ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGRlNjM0NGUuLmVmYWIwZWIgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMzYsNiArMzYsNyBAQAogIwogdGFncwogVEFHUworbGludXgKIHZtbGludXgKIHZtbGludXoKIFN5c3RlbS5tYXAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3N0YWJsZS9zeXNmcy1kZXZpY2VzLW5vZGUgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtZGV2aWNlcy1ub2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5YjgyY2EKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS9zdGFibGUvc3lzZnMtZGV2aWNlcy1ub2RlCkBAIC0wLDAgKzEsNyBAQAorV2hhdDoJCS9zeXMvZGV2aWNlcy9zeXN0ZW0vbm9kZS9ub2RlWAorRGF0ZToJCU9jdG9iZXIgMjAwMgorQ29udGFjdDoJTGludXggTWVtb3J5IE1hbmFnZW1lbnQgbGlzdCA8bGludXgtbW1Aa3ZhY2sub3JnPgorRGVzY3JpcHRpb246CisJCVdoZW4gQ09ORklHX05VTUEgaXMgZW5hYmxlZCwgdGhpcyBpcyBhIGRpcmVjdG9yeSBjb250YWluaW5nCisJCWluZm9ybWF0aW9uIG9uIG5vZGUgWCBzdWNoIGFzIHdoYXQgQ1BVcyBhcmUgbG9jYWwgdG8gdGhlCisJCW5vZGUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLWJ1cy11c2IKaW5kZXggYTA3YzBmMy4uYTk4NmU5YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1idXMtdXNiCisrKyBiL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtYnVzLXVzYgpAQCAtMTU5LDMgKzE1OSwxNCBAQAogCQlkZXZpY2UuICBUaGlzIGlzIHVzZWZ1bCB0byBlbnN1cmUgYXV0byBwcm9iaW5nIHdvbid0CiAJCW1hdGNoIHRoZSBkcml2ZXIgdG8gdGhlIGRldmljZS4gIEZvciBleGFtcGxlOgogCQkjIGVjaG8gIjA0NmQgYzMxNSIgPiAvc3lzL2J1cy91c2IvZHJpdmVycy9mb28vcmVtb3ZlX2lkCisKK1doYXQ6CQkvc3lzL2J1cy91c2IvZGV2aWNlLy4uLi9hdm9pZF9yZXNldAorRGF0ZToJCURlY2VtYmVyIDIwMDkKK0NvbnRhY3Q6CU9saXZlciBOZXVrdW0gPG9saXZlckBuZXVrdW0ub3JnPgorRGVzY3JpcHRpb246CisJCVdyaXRpbmcgMSB0byB0aGlzIGZpbGUgdGVsbHMgdGhlIGtlcm5lbCB0aGF0IHRoaXMKKwkJZGV2aWNlIHdpbGwgbW9ycGggaW50byBhbm90aGVyIG1vZGUgd2hlbiBpdCBpcyByZXNldC4KKwkJRHJpdmVycyB3aWxsIG5vdCB1c2UgcmVzZXQgZm9yIGVycm9yIGhhbmRsaW5nIGZvcgorCQlzdWNoIGRldmljZXMuCitVc2VyczoKKwkJdXNiX21vZGVzd2l0Y2gKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tYXN1cy1sYXB0b3AgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBsYXRmb3JtLWFzdXMtbGFwdG9wCmluZGV4IGExY2I2NjAuLjFkNzc1MzkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQUJJL3Rlc3Rpbmcvc3lzZnMtcGxhdGZvcm0tYXN1cy1sYXB0b3AKKysrIGIvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1hc3VzLWxhcHRvcApAQCAtMSw0ICsxLDQgQEAKLVdoYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vYXN1cy1sYXB0b3AvZGlzcGxheQorV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzX2xhcHRvcC9kaXNwbGF5CiBEYXRlOgkJSmFudWFyeSAyMDA3CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjAKIENvbnRhY3Q6CSJDb3JlbnRpbiBDaGFyeSIgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KQEAgLTEzLDcgKzEzLDcgQEAKIAkJRXg6IC0gMCAoMDAwMGIpIG1lYW5zIG5vIGRpc3BsYXkKIAkJICAgIC0gMyAoMDAxMWIpIENSVCtMQ0QuCiAKLVdoYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vYXN1cy1sYXB0b3AvZ3BzCitXaGF0OgkJL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FzdXNfbGFwdG9wL2dwcwogRGF0ZToJCUphbnVhcnkgMjAwNwogS2VybmVsVmVyc2lvbjoJMi42LjIwCiBDb250YWN0OgkiQ29yZW50aW4gQ2hhcnkiIDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CkBAIC0yMSw3ICsyMSw3IEBACiAJCUNvbnRyb2wgdGhlIGdwcyBkZXZpY2UuIDEgbWVhbnMgb24sIDAgbWVhbnMgb2ZmLgogVXNlcnM6CQlMYXBzdXMKIAotV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC9sZWRkCitXaGF0OgkJL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FzdXNfbGFwdG9wL2xlZGQKIERhdGU6CQlKYW51YXJ5IDIwMDcKIEtlcm5lbFZlcnNpb246CTIuNi4yMAogQ29udGFjdDoJIkNvcmVudGluIENoYXJ5IiA8Y29yZW50aW5jakBpa3NhaWYubmV0PgpAQCAtMjksMTEgKzI5LDExIEBACiAJCVNvbWUgbW9kZWxzIGxpa2UgdGhlIFcxTiBoYXZlIGEgTEVEIGRpc3BsYXkgdGhhdCBjYW4gYmUKIAkJdXNlZCB0byBkaXNwbGF5IHNldmVyYWwgaW5mb3JtYXRpb25zLgogCQlUbyBjb250cm9sIHRoZSBMRUQgZGlzcGxheSwgdXNlIHRoZSBmb2xsb3dpbmcgOgotCQkgICAgZWNobyAweDBUMDAwREREID4gL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FzdXMtbGFwdG9wLworCQkgICAgZWNobyAweDBUMDAwREREID4gL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FzdXNfbGFwdG9wLwogCQl3aGVyZSBUIGNvbnRyb2wgdGhlIDMgbGV0dGVycyBkaXNwbGF5LCBhbmQgREREIHRoZSAzIGRpZ2l0cyBkaXNwbGF5LgogCQlUaGUgREREIHRhYmxlIGNhbiBiZSBmb3VuZCBpbiBEb2N1bWVudGF0aW9uL2xhcHRvcHMvYXN1cy1sYXB0b3AudHh0CiAKLVdoYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vYXN1cy1sYXB0b3AvYmx1ZXRvb3RoCitXaGF0OgkJL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FzdXNfbGFwdG9wL2JsdWV0b290aAogRGF0ZToJCUphbnVhcnkgMjAwNwogS2VybmVsVmVyc2lvbjoJMi42LjIwCiBDb250YWN0OgkiQ29yZW50aW4gQ2hhcnkiIDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CkBAIC00Miw3ICs0Miw3IEBACiAJCVRoaXMgbWF5IGNvbnRyb2wgdGhlIGxlZCwgdGhlIGRldmljZSBvciBib3RoLgogVXNlcnM6CQlMYXBzdXMKIAotV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9hc3VzLWxhcHRvcC93bGFuCitXaGF0OgkJL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2FzdXNfbGFwdG9wL3dsYW4KIERhdGU6CQlKYW51YXJ5IDIwMDcKIEtlcm5lbFZlcnNpb246CTIuNi4yMAogQ29udGFjdDoJIkNvcmVudGluIENoYXJ5IiA8Y29yZW50aW5jakBpa3NhaWYubmV0PgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy9zeXNmcy1wbGF0Zm9ybS1lZWVwYy1sYXB0b3AgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBsYXRmb3JtLWVlZXBjLWxhcHRvcAppbmRleCA3NDQ1ZGZiLi41YjAyNmM2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBsYXRmb3JtLWVlZXBjLWxhcHRvcAorKysgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0aW5nL3N5c2ZzLXBsYXRmb3JtLWVlZXBjLWxhcHRvcApAQCAtMSw0ICsxLDQgQEAKLVdoYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMtbGFwdG9wL2Rpc3AKK1doYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMvZGlzcAogRGF0ZToJCU1heSAyMDA4CiBLZXJuZWxWZXJzaW9uOgkyLjYuMjYKIENvbnRhY3Q6CSJDb3JlbnRpbiBDaGFyeSIgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KQEAgLTksMjEgKzksMjEgQEAKIAkJLSAzID0gTENEK0NSVAogCQlJZiB5b3UgcnVuIFgxMSwgeW91IHNob3VsZCB1c2UgeHJhbmRyIGluc3RlYWQuCiAKLVdoYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMtbGFwdG9wL2NhbWVyYQorV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYy9jYW1lcmEKIERhdGU6CQlNYXkgMjAwOAogS2VybmVsVmVyc2lvbjoJMi42LjI2CiBDb250YWN0OgkiQ29yZW50aW4gQ2hhcnkiIDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CiBEZXNjcmlwdGlvbjoKIAkJQ29udHJvbCB0aGUgY2FtZXJhLiAxIG1lYW5zIG9uLCAwIG1lYW5zIG9mZi4KIAotV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYy1sYXB0b3AvY2FyZHIKK1doYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMvY2FyZHIKIERhdGU6CQlNYXkgMjAwOAogS2VybmVsVmVyc2lvbjoJMi42LjI2CiBDb250YWN0OgkiQ29yZW50aW4gQ2hhcnkiIDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CiBEZXNjcmlwdGlvbjoKIAkJQ29udHJvbCB0aGUgY2FyZCByZWFkZXIuIDEgbWVhbnMgb24sIDAgbWVhbnMgb2ZmLgogCi1XaGF0OgkJL3N5cy9kZXZpY2VzL3BsYXRmb3JtL2VlZXBjLWxhcHRvcC9jcHVmdgorV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYy9jcHVmdgogRGF0ZToJCUp1biAyMDA5CiBLZXJuZWxWZXJzaW9uOgkyLjYuMzEKIENvbnRhY3Q6CSJDb3JlbnRpbiBDaGFyeSIgPGNvcmVudGluY2pAaWtzYWlmLm5ldD4KQEAgLTQyLDcgKzQyLDcgQEAKIAkJICAgIGAtLS0tLS0tLS0tLS0gQXZhaWxhYmxlcyBtb2RlcwogCQlGb3IgZXhhbXBsZSwgMHgzMDEgbWVhbnM6IG1vZGUgMSBzZWxlY3RlZCwgMyBhdmFpbGFibGUgbW9kZXMuCiAKLVdoYXQ6CQkvc3lzL2RldmljZXMvcGxhdGZvcm0vZWVlcGMtbGFwdG9wL2F2YWlsYWJsZV9jcHVmdgorV2hhdDoJCS9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9lZWVwYy9hdmFpbGFibGVfY3B1ZnYKIERhdGU6CQlKdW4gMjAwOQogS2VybmVsVmVyc2lvbjoJMi42LjMxCiBDb250YWN0OgkiQ29yZW50aW4gQ2hhcnkiIDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RNQS1BUEkudHh0IGIvRG9jdW1lbnRhdGlvbi9ETUEtQVBJLnR4dAppbmRleCA1YWNlYjg4Li4wNWUyYWUyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RNQS1BUEkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vRE1BLUFQSS50eHQKQEAgLTQsMjAgKzQsMTggQEAKICAgICAgICAgSmFtZXMgRS5KLiBCb3R0b21sZXkgPEphbWVzLkJvdHRvbWxleUBIYW5zZW5QYXJ0bmVyc2hpcC5jb20+CiAKIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBETUEgQVBJLiAgRm9yIGEgbW9yZSBnZW50bGUgaW50cm9kdWN0aW9uCi1waHJhc2VkIGluIHRlcm1zIG9mIHRoZSBwY2lfIGVxdWl2YWxlbnRzIChhbmQgYWN0dWFsIGV4YW1wbGVzKSBzZWUKLURvY3VtZW50YXRpb24vUENJL1BDSS1ETUEtbWFwcGluZy50eHQuCitvZiB0aGUgQVBJIChhbmQgYWN0dWFsIGV4YW1wbGVzKSBzZWUKK0RvY3VtZW50YXRpb24vRE1BLUFQSS1IT1dUTy50eHQuCiAKLVRoaXMgQVBJIGlzIHNwbGl0IGludG8gdHdvIHBpZWNlcy4gIFBhcnQgSSBkZXNjcmliZXMgdGhlIEFQSSBhbmQgdGhlCi1jb3JyZXNwb25kaW5nIHBjaV8gQVBJLiAgUGFydCBJSSBkZXNjcmliZXMgdGhlIGV4dGVuc2lvbnMgdG8gdGhlIEFQSQotZm9yIHN1cHBvcnRpbmcgbm9uLWNvbnNpc3RlbnQgbWVtb3J5IG1hY2hpbmVzLiAgVW5sZXNzIHlvdSBrbm93IHRoYXQKLXlvdXIgZHJpdmVyIGFic29sdXRlbHkgaGFzIHRvIHN1cHBvcnQgbm9uLWNvbnNpc3RlbnQgcGxhdGZvcm1zICh0aGlzCi1pcyB1c3VhbGx5IG9ubHkgbGVnYWN5IHBsYXRmb3JtcykgeW91IHNob3VsZCBvbmx5IHVzZSB0aGUgQVBJCi1kZXNjcmliZWQgaW4gcGFydCBJLgorVGhpcyBBUEkgaXMgc3BsaXQgaW50byB0d28gcGllY2VzLiAgUGFydCBJIGRlc2NyaWJlcyB0aGUgQVBJLiAgUGFydCBJSQorZGVzY3JpYmVzIHRoZSBleHRlbnNpb25zIHRvIHRoZSBBUEkgZm9yIHN1cHBvcnRpbmcgbm9uLWNvbnNpc3RlbnQKK21lbW9yeSBtYWNoaW5lcy4gIFVubGVzcyB5b3Uga25vdyB0aGF0IHlvdXIgZHJpdmVyIGFic29sdXRlbHkgaGFzIHRvCitzdXBwb3J0IG5vbi1jb25zaXN0ZW50IHBsYXRmb3JtcyAodGhpcyBpcyB1c3VhbGx5IG9ubHkgbGVnYWN5CitwbGF0Zm9ybXMpIHlvdSBzaG91bGQgb25seSB1c2UgdGhlIEFQSSBkZXNjcmliZWQgaW4gcGFydCBJLgogCi1QYXJ0IEkgLSBwY2lfIGFuZCBkbWFfIEVxdWl2YWxlbnQgQVBJIAorUGFydCBJIC0gZG1hXyBBUEkKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotVG8gZ2V0IHRoZSBwY2lfIEFQSSwgeW91IG11c3QgI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogVG8gZ2V0IHRoZSBkbWFfIEFQSSwgeW91IG11c3QgI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKIApAQCAtMjcsOSArMjUsNiBAQAogdm9pZCAqCiBkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCSAgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZmxhZykKLXZvaWQgKgotcGNpX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkgICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUpCiAKIENvbnNpc3RlbnQgbWVtb3J5IGlzIG1lbW9yeSBmb3Igd2hpY2ggYSB3cml0ZSBieSBlaXRoZXIgdGhlIGRldmljZSBvcgogdGhlIHByb2Nlc3NvciBjYW4gaW1tZWRpYXRlbHkgYmUgcmVhZCBieSB0aGUgcHJvY2Vzc29yIG9yIGRldmljZQpAQCAtNTMsMTUgKzQ4LDExIEBACiBUaGUgZmxhZyBwYXJhbWV0ZXIgKGRtYV9hbGxvY19jb2hlcmVudCBvbmx5KSBhbGxvd3MgdGhlIGNhbGxlciB0bwogc3BlY2lmeSB0aGUgR0ZQXyBmbGFncyAoc2VlIGttYWxsb2MpIGZvciB0aGUgYWxsb2NhdGlvbiAodGhlCiBpbXBsZW1lbnRhdGlvbiBtYXkgY2hvb3NlIHRvIGlnbm9yZSBmbGFncyB0aGF0IGFmZmVjdCB0aGUgbG9jYXRpb24gb2YKLXRoZSByZXR1cm5lZCBtZW1vcnksIGxpa2UgR0ZQX0RNQSkuICBGb3IgcGNpX2FsbG9jX2NvbnNpc3RlbnQsIHlvdQotbXVzdCBhc3N1bWUgR0ZQX0FUT01JQyBiZWhhdmlvdXIuCit0aGUgcmV0dXJuZWQgbWVtb3J5LCBsaWtlIEdGUF9ETUEpLgogCiB2b2lkCiBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKIAkJCSAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKLXZvaWQKLXBjaV9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKmNwdV9hZGRyLAotCQkJICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQogCiBGcmVlIHRoZSByZWdpb24gb2YgY29uc2lzdGVudCBtZW1vcnkgeW91IHByZXZpb3VzbHkgYWxsb2NhdGVkLiAgZGV2LAogc2l6ZSBhbmQgZG1hX2hhbmRsZSBtdXN0IGFsbCBiZSB0aGUgc2FtZSBhcyB0aG9zZSBwYXNzZWQgaW50byB0aGUKQEAgLTg5LDEwICs4MCw2IEBACiAJZG1hX3Bvb2xfY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCXNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24sIHNpemVfdCBhbGxvYyk7CiAKLQlzdHJ1Y3QgcGNpX3Bvb2wgKgotCXBjaV9wb29sX2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgcGNpX2RldmljZSAqZGV2LAotCQkJc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgc2l6ZV90IGFsbG9jKTsKLQogVGhlIHBvb2wgY3JlYXRlKCkgcm91dGluZXMgaW5pdGlhbGl6ZSBhIHBvb2wgb2YgZG1hLWNvaGVyZW50IGJ1ZmZlcnMKIGZvciB1c2Ugd2l0aCBhIGdpdmVuIGRldmljZS4gIEl0IG11c3QgYmUgY2FsbGVkIGluIGEgY29udGV4dCB3aGljaAogY2FuIHNsZWVwLgpAQCAtMTA4LDkgKzk1LDYgQEAKIAl2b2lkICpkbWFfcG9vbF9hbGxvYyhzdHJ1Y3QgZG1hX3Bvb2wgKnBvb2wsIGdmcF90IGdmcF9mbGFncywKIAkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUpOwogCi0Jdm9pZCAqcGNpX3Bvb2xfYWxsb2Moc3RydWN0IHBjaV9wb29sICpwb29sLCBnZnBfdCBnZnBfZmxhZ3MsCi0JCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlKTsKLQogVGhpcyBhbGxvY2F0ZXMgbWVtb3J5IGZyb20gdGhlIHBvb2w7IHRoZSByZXR1cm5lZCBtZW1vcnkgd2lsbCBtZWV0IHRoZSBzaXplCiBhbmQgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBzcGVjaWZpZWQgYXQgY3JlYXRpb24gdGltZS4gIFBhc3MgR0ZQX0FUT01JQyB0bwogcHJldmVudCBibG9ja2luZywgb3IgaWYgaXQncyBwZXJtaXR0ZWQgKG5vdCBpbl9pbnRlcnJ1cHQsIG5vdCBob2xkaW5nIFNNUCBsb2NrcyksCkBAIC0xMjIsOSArMTA2LDYgQEAKIAl2b2lkIGRtYV9wb29sX2ZyZWUoc3RydWN0IGRtYV9wb29sICpwb29sLCB2b2lkICp2YWRkciwKIAkJCWRtYV9hZGRyX3QgYWRkcik7CiAKLQl2b2lkIHBjaV9wb29sX2ZyZWUoc3RydWN0IHBjaV9wb29sICpwb29sLCB2b2lkICp2YWRkciwKLQkJCWRtYV9hZGRyX3QgYWRkcik7Ci0KIFRoaXMgcHV0cyBtZW1vcnkgYmFjayBpbnRvIHRoZSBwb29sLiAgVGhlIHBvb2wgaXMgd2hhdCB3YXMgcGFzc2VkIHRvCiB0aGUgcG9vbCBhbGxvY2F0aW9uIHJvdXRpbmU7IHRoZSBjcHUgKHZhZGRyKSBhbmQgZG1hIGFkZHJlc3NlcyBhcmUgd2hhdAogd2VyZSByZXR1cm5lZCB3aGVuIHRoYXQgcm91dGluZSBhbGxvY2F0ZWQgdGhlIG1lbW9yeSBiZWluZyBmcmVlZC4KQEAgLTEzMiw4ICsxMTMsNiBAQAogCiAJdm9pZCBkbWFfcG9vbF9kZXN0cm95KHN0cnVjdCBkbWFfcG9vbCAqcG9vbCk7CiAKLQl2b2lkIHBjaV9wb29sX2Rlc3Ryb3koc3RydWN0IHBjaV9wb29sICpwb29sKTsKLQogVGhlIHBvb2wgZGVzdHJveSgpIHJvdXRpbmVzIGZyZWUgdGhlIHJlc291cmNlcyBvZiB0aGUgcG9vbC4gIFRoZXkgbXVzdCBiZQogY2FsbGVkIGluIGEgY29udGV4dCB3aGljaCBjYW4gc2xlZXAuICBNYWtlIHN1cmUgeW91J3ZlIGZyZWVkIGFsbCBhbGxvY2F0ZWQKIG1lbW9yeSBiYWNrIHRvIHRoZSBwb29sIGJlZm9yZSB5b3UgZGVzdHJveSBpdC4KQEAgLTE0NCw4ICsxMjMsNiBAQAogCiBpbnQKIGRtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKLWludAotcGNpX2RtYV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCB1NjQgbWFzaykKIAogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgZGV2aWNlIGNhbiBzdXBwb3J0IERNQSB0byB0aGUgbWVtb3J5IGRlc2NyaWJlZCBieQogbWFzay4KQEAgLTE1OSw4ICsxMzYsMTQgQEAKIAogaW50CiBkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKKworQ2hlY2tzIHRvIHNlZSBpZiB0aGUgbWFzayBpcyBwb3NzaWJsZSBhbmQgdXBkYXRlcyB0aGUgZGV2aWNlCitwYXJhbWV0ZXJzIGlmIGl0IGlzLgorCitSZXR1cm5zOiAwIGlmIHN1Y2Nlc3NmdWwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgaWYgbm90LgorCiBpbnQKLXBjaV9zZXRfZG1hX21hc2soc3RydWN0IHBjaV9kZXZpY2UgKmRldiwgdTY0IG1hc2spCitkbWFfc2V0X2NvaGVyZW50X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKIAogQ2hlY2tzIHRvIHNlZSBpZiB0aGUgbWFzayBpcyBwb3NzaWJsZSBhbmQgdXBkYXRlcyB0aGUgZGV2aWNlCiBwYXJhbWV0ZXJzIGlmIGl0IGlzLgpAQCAtMTg3LDkgKzE3MCw2IEBACiBkbWFfYWRkcl90CiBkbWFfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLCBzaXplX3Qgc2l6ZSwKIAkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQotZG1hX2FkZHJfdAotcGNpX21hcF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCB2b2lkICpjcHVfYWRkciwgc2l6ZV90IHNpemUsCi0JCSAgICAgIGludCBkaXJlY3Rpb24pCiAKIE1hcHMgYSBwaWVjZSBvZiBwcm9jZXNzb3IgdmlydHVhbCBtZW1vcnkgc28gaXQgY2FuIGJlIGFjY2Vzc2VkIGJ5IHRoZQogZGV2aWNlIGFuZCByZXR1cm5zIHRoZSBwaHlzaWNhbCBoYW5kbGUgb2YgdGhlIG1lbW9yeS4KQEAgLTE5OCwxNCArMTc4LDEwIEBACiBIb3dldmVyIHRoZSBkbWFfIEFQSSB1c2VzIGEgc3Ryb25nbHkgdHlwZWQgZW51bWVyYXRvciBmb3IgaXRzCiBkaXJlY3Rpb246CiAKLURNQV9OT05FCQk9IFBDSV9ETUFfTk9ORQkJbm8gZGlyZWN0aW9uICh1c2VkIGZvcgotCQkJCQkJZGVidWdnaW5nKQotRE1BX1RPX0RFVklDRQkJPSBQQ0lfRE1BX1RPREVWSUNFCWRhdGEgaXMgZ29pbmcgZnJvbSB0aGUKLQkJCQkJCW1lbW9yeSB0byB0aGUgZGV2aWNlCi1ETUFfRlJPTV9ERVZJQ0UJCT0gUENJX0RNQV9GUk9NREVWSUNFCWRhdGEgaXMgY29taW5nIGZyb20KLQkJCQkJCXRoZSBkZXZpY2UgdG8gdGhlCi0JCQkJCQltZW1vcnkKLURNQV9CSURJUkVDVElPTkFMCT0gUENJX0RNQV9CSURJUkVDVElPTkFMCWRpcmVjdGlvbiBpc24ndCBrbm93bgorRE1BX05PTkUJCW5vIGRpcmVjdGlvbiAodXNlZCBmb3IgZGVidWdnaW5nKQorRE1BX1RPX0RFVklDRQkJZGF0YSBpcyBnb2luZyBmcm9tIHRoZSBtZW1vcnkgdG8gdGhlIGRldmljZQorRE1BX0ZST01fREVWSUNFCQlkYXRhIGlzIGNvbWluZyBmcm9tIHRoZSBkZXZpY2UgdG8gdGhlIG1lbW9yeQorRE1BX0JJRElSRUNUSU9OQUwJZGlyZWN0aW9uIGlzbid0IGtub3duCiAKIE5vdGVzOiAgTm90IGFsbCBtZW1vcnkgcmVnaW9ucyBpbiBhIG1hY2hpbmUgY2FuIGJlIG1hcHBlZCBieSB0aGlzCiBBUEkuICBGdXJ0aGVyLCByZWdpb25zIHRoYXQgYXBwZWFyIHRvIGJlIHBoeXNpY2FsbHkgY29udGlndW91cyBpbgpAQCAtMjY4LDkgKzI0NCw2IEBACiB2b2lkCiBkbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUsCiAJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi12b2lkCi1wY2lfdW5tYXBfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKLQkJIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQogCiBVbm1hcHMgdGhlIHJlZ2lvbiBwcmV2aW91c2x5IG1hcHBlZC4gIEFsbCB0aGUgcGFyYW1ldGVycyBwYXNzZWQgaW4KIG11c3QgYmUgaWRlbnRpY2FsIHRvIHRob3NlIHBhc3NlZCBpbiAoYW5kIHJldHVybmVkKSBieSB0aGUgbWFwcGluZwpAQCAtMjgwLDE1ICsyNTMsOSBAQAogZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCSAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCiAJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi1kbWFfYWRkcl90Ci1wY2lfbWFwX3BhZ2Uoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKIHZvaWQKIGRtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywgc2l6ZV90IHNpemUsCiAJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXZvaWQKLXBjaV91bm1hcF9wYWdlKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBkbWFfYWRkcmVzcywKLQkgICAgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCiAKIEFQSSBmb3IgbWFwcGluZyBhbmQgdW5tYXBwaW5nIGZvciBwYWdlcy4gIEFsbCB0aGUgbm90ZXMgYW5kIHdhcm5pbmdzCiBmb3IgdGhlIG90aGVyIG1hcHBpbmcgQVBJcyBhcHBseSBoZXJlLiAgQWxzbywgYWx0aG91Z2ggdGhlIDxvZmZzZXQ+CkBAIC0yOTksOSArMjY2LDYgQEAKIGludAogZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKQogCi1pbnQKLXBjaV9kbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCi0KIEluIHNvbWUgY2lyY3Vtc3RhbmNlcyBkbWFfbWFwX3NpbmdsZSBhbmQgZG1hX21hcF9wYWdlIHdpbGwgZmFpbCB0byBjcmVhdGUKIGEgbWFwcGluZy4gQSBkcml2ZXIgY2FuIGNoZWNrIGZvciB0aGVzZSBlcnJvcnMgYnkgdGVzdGluZyB0aGUgcmV0dXJuZWQKIGRtYSBhZGRyZXNzIHdpdGggZG1hX21hcHBpbmdfZXJyb3IoKS4gQSBub24temVybyByZXR1cm4gdmFsdWUgbWVhbnMgdGhlIG1hcHBpbmcKQEAgLTMxMSw5ICsyNzUsNiBAQAogCWludAogCWRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAogCQlpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLQlpbnQKLQlwY2lfbWFwX3NnKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKQogCiBSZXR1cm5zOiB0aGUgbnVtYmVyIG9mIHBoeXNpY2FsIHNlZ21lbnRzIG1hcHBlZCAodGhpcyBtYXkgYmUgc2hvcnRlcgogdGhhbiA8bmVudHM+IHBhc3NlZCBpbiBpZiBzb21lIGVsZW1lbnRzIG9mIHRoZSBzY2F0dGVyL2dhdGhlciBsaXN0IGFyZQpAQCAtMzUzLDkgKzMxNCw2IEBACiAJdm9pZAogCWRtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCiAJCWludCBuaHdlbnRyaWVzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi0Jdm9pZAotCXBjaV91bm1hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCWludCBuZW50cywgaW50IGRpcmVjdGlvbikKIAogVW5tYXAgdGhlIHByZXZpb3VzbHkgbWFwcGVkIHNjYXR0ZXIvZ2F0aGVyIGxpc3QuICBBbGwgdGhlIHBhcmFtZXRlcnMKIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhvc2UgYW5kIHBhc3NlZCBpbiB0byB0aGUgc2NhdHRlci9nYXRoZXIgbWFwcGluZwpAQCAtMzY1LDIxICszMjMsMjMgQEAKIHBoeXNpY2FsIGVudHJpZXMgcmV0dXJuZWQuCiAKIHZvaWQKLWRtYV9zeW5jX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCi0JCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKK2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKKwkJCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHZvaWQKLXBjaV9kbWFfc3luY19zaW5nbGUoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0JCQkgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKK2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKKwkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHZvaWQKLWRtYV9zeW5jX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKLQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQorZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsCisJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB2b2lkCi1wY2lfZG1hX3N5bmNfc2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkgICAgICAgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKK2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAorCQkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogCi1TeW5jaHJvbmlzZSBhIHNpbmdsZSBjb250aWd1b3VzIG9yIHNjYXR0ZXIvZ2F0aGVyIG1hcHBpbmcuICBBbGwgdGhlCi1wYXJhbWV0ZXJzIG11c3QgYmUgdGhlIHNhbWUgYXMgdGhvc2UgcGFzc2VkIGludG8gdGhlIHNpbmdsZSBtYXBwaW5nCi1BUEkuCitTeW5jaHJvbmlzZSBhIHNpbmdsZSBjb250aWd1b3VzIG9yIHNjYXR0ZXIvZ2F0aGVyIG1hcHBpbmcgZm9yIHRoZSBjcHUKK2FuZCBkZXZpY2UuIFdpdGggdGhlIHN5bmNfc2cgQVBJLCBhbGwgdGhlIHBhcmFtZXRlcnMgbXVzdCBiZSB0aGUgc2FtZQorYXMgdGhvc2UgcGFzc2VkIGludG8gdGhlIHNpbmdsZSBtYXBwaW5nIEFQSS4gV2l0aCB0aGUgc3luY19zaW5nbGUgQVBJLAoreW91IGNhbiB1c2UgZG1hX2hhbmRsZSBhbmQgc2l6ZSBwYXJhbWV0ZXJzIHRoYXQgYXJlbid0IGlkZW50aWNhbCB0bwordGhvc2UgcGFzc2VkIGludG8gdGhlIHNpbmdsZSBtYXBwaW5nIEFQSSB0byBkbyBhIHBhcnRpYWwgc3luYy4KIAogTm90ZXM6ICBZb3UgbXVzdCBkbyB0aGlzOgogCkBAIC00NjEsOSArNDIxLDkgQEAKIFBhcnQgSUkgLSBBZHZhbmNlZCBkbWFfIHVzYWdlCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1XYXJuaW5nOiBUaGVzZSBwaWVjZXMgb2YgdGhlIERNQSBBUEkgaGF2ZSBubyBQQ0kgZXF1aXZhbGVudC4gIFRoZXkKLXNob3VsZCBhbHNvIG5vdCBiZSB1c2VkIGluIHRoZSBtYWpvcml0eSBvZiBjYXNlcywgc2luY2UgdGhleSBjYXRlciBmb3IKLXVubGlrZWx5IGNvcm5lciBjYXNlcyB0aGF0IGRvbid0IGJlbG9uZyBpbiB1c3VhbCBkcml2ZXJzLgorV2FybmluZzogVGhlc2UgcGllY2VzIG9mIHRoZSBETUEgQVBJIHNob3VsZCBub3QgYmUgdXNlZCBpbiB0aGUKK21ham9yaXR5IG9mIGNhc2VzLCBzaW5jZSB0aGV5IGNhdGVyIGZvciB1bmxpa2VseSBjb3JuZXIgY2FzZXMgdGhhdAorZG9uJ3QgYmVsb25nIGluIHVzdWFsIGRyaXZlcnMuCiAKIElmIHlvdSBkb24ndCB1bmRlcnN0YW5kIGhvdyBjYWNoZSBsaW5lIGNvaGVyZW5jeSB3b3JrcyBiZXR3ZWVuIGEKIHByb2Nlc3NvciBhbmQgYW4gSS9PIGRldmljZSwgeW91IHNob3VsZCBub3QgYmUgdXNpbmcgdGhpcyBwYXJ0IG9mIHRoZQpAQCAtNTE0LDE2ICs0NzQsNiBAQAogb2YgdHdvIGZvciBlYXN5IGFsaWdubWVudC4KIAogdm9pZAotZG1hX3N5bmNfc2luZ2xlX3JhbmdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCi0JCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLQotRG9lcyBhIHBhcnRpYWwgc3luYywgc3RhcnRpbmcgYXQgb2Zmc2V0IGFuZCBjb250aW51aW5nIGZvciBzaXplLiAgWW91Ci1tdXN0IGJlIGNhcmVmdWwgdG8gb2JzZXJ2ZSB0aGUgY2FjaGUgYWxpZ25tZW50IGFuZCB3aWR0aCB3aGVuIGRvaW5nCi1hbnl0aGluZyBsaWtlIHRoaXMuICBZb3UgbXVzdCBhbHNvIGJlIGV4dHJhIGNhcmVmdWwgYWJvdXQgYWNjZXNzaW5nCi1tZW1vcnkgeW91IGludGVuZCB0byBzeW5jIHBhcnRpYWxseS4KLQotdm9pZAogZG1hX2NhY2hlX3N5bmMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsCiAJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RldmljZS1kcml2ZXJzLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbAppbmRleCBmOWE2ZTJjLi4xYjJkZDRmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlLWRyaXZlcnMudG1wbApAQCAtNDUsNyArNDUsNyBAQAogICAgICA8L3NlY3QxPgogCiAgICAgIDxzZWN0MT48dGl0bGU+QXRvbWljIGFuZCBwb2ludGVyIG1hbmlwdWxhdGlvbjwvdGl0bGU+Ci0hSWFyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pY18zMi5oCishSWFyY2gveDg2L2luY2x1ZGUvYXNtL2F0b21pYy5oCiAhSWFyY2gveDg2L2luY2x1ZGUvYXNtL3VuYWxpZ25lZC5oCiAgICAgIDwvc2VjdDE+CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2Vpb2Jvb2sudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9kZXZpY2Vpb2Jvb2sudG1wbAppbmRleCAzZWQ4ODEyLi5jMWVkNmE0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svZGV2aWNlaW9ib29rLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2RldmljZWlvYm9vay50bXBsCkBAIC0zMTYsNyArMzE2LDcgQEAKIAogICA8Y2hhcHRlciBpZD0icHViZnVuY3Rpb25zIj4KICAgICAgPHRpdGxlPlB1YmxpYyBGdW5jdGlvbnMgUHJvdmlkZWQ8L3RpdGxlPgotIUlhcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb18zMi5oCishSWFyY2gveDg2L2luY2x1ZGUvYXNtL2lvLmgKICFFbGliL2lvbWFwLmMKICAgPC9jaGFwdGVyPgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbWFjODAyMTEudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tYWM4MDIxMS50bXBsCmluZGV4IGYzZjM3ZjEuLmFmZmIxNWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tYWM4MDIxMS50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9tYWM4MDIxMS50bXBsCkBAIC0xNDQsNyArMTQ0LDcgQEAKICAgICAgICAgdGhpcyB0aG91Z2ggYW5kIHRoZSByZWNvbW1lbmRhdGlvbiB0byBhbGxvdyBvbmx5IGEgc2luZ2xlCiAgICAgICAgIGludGVyZmFjZSBpbiBTVEEgbW9kZSBhdCBmaXJzdCEKICAgICAgIDwvcGFyYT4KLSFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfaWZfaW5pdF9jb25mCishRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3ZpZgogICAgIDwvY2hhcHRlcj4KIAogICAgIDxjaGFwdGVyIGlkPSJyeC10eCI+CkBAIC0yMzQsNyArMjM0LDYgQEAKICAgICAgIDx0aXRsZT5NdWx0aXBsZSBxdWV1ZXMgYW5kIFFvUyBzdXBwb3J0PC90aXRsZT4KICAgICAgIDxwYXJhPlRCRDwvcGFyYT4KICFGaW5jbHVkZS9uZXQvbWFjODAyMTEuaCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zCi0hRmluY2x1ZGUvbmV0L21hYzgwMjExLmggaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzCiAgICAgPC9jaGFwdGVyPgogCiAgICAgPGNoYXB0ZXIgaWQ9IkFQIj4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tdGRuYW5kLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svbXRkbmFuZC50bXBsCmluZGV4IDVlN2Q4NGIuLjEzM2NkNmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay9tdGRuYW5kLnRtcGwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL210ZG5hbmQudG1wbApAQCAtNDg4LDcgKzQ4OCw3IEBACiAJCQkJVGhlIEVDQyBieXRlcyBtdXN0IGJlIHBsYWNlZCBpbW1pZGlhdGVseSBhZnRlciB0aGUgZGF0YQogCQkJCWJ5dGVzIGluIG9yZGVyIHRvIG1ha2UgdGhlIHN5bmRyb21lIGdlbmVyYXRvciB3b3JrLiBUaGlzCiAJCQkJaXMgY29udHJhcnkgdG8gdGhlIHVzdWFsIGxheW91dCB1c2VkIGJ5IHNvZnR3YXJlIEVDQy4gVGhlCi0JCQkJc2VwZXJhdGlvbiBvZiBkYXRhIGFuZCBvdXQgb2YgYmFuZCBhcmVhIGlzIG5vdCBsb25nZXIKKwkJCQlzZXBhcmF0aW9uIG9mIGRhdGEgYW5kIG91dCBvZiBiYW5kIGFyZWEgaXMgbm90IGxvbmdlcgogCQkJCXBvc3NpYmxlLiBUaGUgbmFuZCBkcml2ZXIgY29kZSBoYW5kbGVzIHRoaXMgbGF5b3V0IGFuZAogCQkJCXRoZSByZW1haW5pbmcgZnJlZSBieXRlcyBpbiB0aGUgb29iIGFyZWEgYXJlIG1hbmFnZWQgYnkgCiAJCQkJdGhlIGF1dG9wbGFjZW1lbnQgY29kZS4gUHJvdmlkZSBhIG1hdGNoaW5nIG9vYi1sYXlvdXQKQEAgLTU2MCw3ICs1NjAsNyBAQAogCQkJCWJhZCBibG9ja3MuIFRoZXkgaGF2ZSBmYWN0b3J5IG1hcmtlZCBnb29kIGJsb2Nrcy4gVGhlIG1hcmtlciBwYXR0ZXJuCiAJCQkJaXMgZXJhc2VkIHdoZW4gdGhlIGJsb2NrIGlzIGVyYXNlZCB0byBiZSByZXVzZWQuIFNvIGluIGNhc2Ugb2YKIAkJCQlwb3dlcmxvc3MgYmVmb3JlIHdyaXRpbmcgdGhlIHBhdHRlcm4gYmFjayB0byB0aGUgY2hpcCB0aGlzIGJsb2NrIAotCQkJCXdvdWxkIGJlIGxvc3QgYW5kIGFkZGVkIHRvIHRoZSBiYWQgYmxvY2tzLiBUaGVyZWZvciB3ZSBzY2FuIHRoZSAKKwkJCQl3b3VsZCBiZSBsb3N0IGFuZCBhZGRlZCB0byB0aGUgYmFkIGJsb2Nrcy4gVGhlcmVmb3JlIHdlIHNjYW4gdGhlIAogCQkJCWNoaXAocykgd2hlbiB3ZSBkZXRlY3QgdGhlbSB0aGUgZmlyc3QgdGltZSBmb3IgZ29vZCBibG9ja3MgYW5kIAogCQkJCXN0b3JlIHRoaXMgaW5mb3JtYXRpb24gaW4gYSBiYWQgYmxvY2sgdGFibGUgYmVmb3JlIGVyYXNpbmcgYW55IAogCQkJCW9mIHRoZSBibG9ja3MuCkBAIC0xMDk0LDcgKzEwOTQsNyBAQAogCQltYW51ZmFjdHVyZXJzIHNwZWNpZmljYXRpb25zLiBUaGlzIGFwcGxpZXMgc2ltaWxhciB0byB0aGUgc3BhcmUgYXJlYS4gCiAJPC9wYXJhPgogCTxwYXJhPgotCQlUaGVyZWZvciBOQU5EIGF3YXJlIGZpbGVzeXN0ZW1zIG11c3QgZWl0aGVyIHdyaXRlIGluIHBhZ2Ugc2l6ZSBjaHVua3MKKwkJVGhlcmVmb3JlIE5BTkQgYXdhcmUgZmlsZXN5c3RlbXMgbXVzdCBlaXRoZXIgd3JpdGUgaW4gcGFnZSBzaXplIGNodW5rcwogCQlvciBob2xkIGEgd3JpdGVidWZmZXIgdG8gY29sbGVjdCBzbWFsbGVyIHdyaXRlcyB1bnRpbCB0aGV5IHN1bSB1cCB0byAKIAkJcGFnZXNpemUuIEF2YWlsYWJsZSBOQU5EIGF3YXJlIGZpbGVzeXN0ZW1zOiBKRkZTMiwgWUFGRlMuIAkJCiAJPC9wYXJhPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jb21tb24ueG1sIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC9jb21tb24ueG1sCmluZGV4IGM2NWYwYWMuLmNlYTIzZTEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvY29tbW9uLnhtbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL2NvbW1vbi54bWwKQEAgLTExNzAsNyArMTE3MCw3IEBACiBjYXB0dXJlZCBvciBvdXRwdXQsIGFwcGxpY2F0aW9ucyBjYW4gcmVxdWVzdCBmcmFtZSBza2lwcGluZyBvcgogZHVwbGljYXRpbmcgb24gdGhlIGRyaXZlciBzaWRlLiBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gdXNpbmcKIHRoZSAmZnVuYy1yZWFkOyBvciAmZnVuYy13cml0ZTssIHdoaWNoIGFyZSBub3QgYXVnbWVudGVkIGJ5IHRpbWVzdGFtcHMKLW9yIHNlcXVlbmNlIGNvdW50ZXJzLCBhbmQgdG8gYXZvaWQgdW5uZWNjZXNzYXJ5IGRhdGEgY29weWluZy48L3BhcmE+CitvciBzZXF1ZW5jZSBjb3VudGVycywgYW5kIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGRhdGEgY29weWluZy48L3BhcmE+CiAKICAgICA8cGFyYT5GaW5hbGx5IHRoZXNlIGlvY3RscyBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG51bWJlciBvZgogYnVmZmVycyB1c2VkIGludGVybmFsbHkgYnkgYSBkcml2ZXIgaW4gcmVhZC93cml0ZSBtb2RlLiBGb3IKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctcGFybS54bWwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdjRsL3ZpZGlvYy1nLXBhcm0ueG1sCmluZGV4IDc4MzMyZDMuLjM5MmFhOWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vRG9jQm9vay92NGwvdmlkaW9jLWctcGFybS54bWwKKysrIGIvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Y0bC92aWRpb2MtZy1wYXJtLnhtbApAQCAtNTUsNyArNTUsNyBAQAogZHVwbGljYXRpbmcgb24gdGhlIGRyaXZlciBzaWRlLiBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIHdoZW4gdXNpbmcKIHRoZSA8ZnVuY3Rpb24+cmVhZCgpPC9mdW5jdGlvbj4gb3IgPGZ1bmN0aW9uPndyaXRlKCk8L2Z1bmN0aW9uPiwgd2hpY2gKIGFyZSBub3QgYXVnbWVudGVkIGJ5IHRpbWVzdGFtcHMgb3Igc2VxdWVuY2UgY291bnRlcnMsIGFuZCB0byBhdm9pZAotdW5uZWNjZXNzYXJ5IGRhdGEgY29weWluZy48L3BhcmE+Cit1bm5lY2Vzc2FyeSBkYXRhIGNvcHlpbmcuPC9wYXJhPgogCiAgICAgPHBhcmE+RnVydGhlciB0aGVzZSBpb2N0bHMgY2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YKIGJ1ZmZlcnMgdXNlZCBpbnRlcm5hbGx5IGJ5IGEgZHJpdmVyIGluIHJlYWQvd3JpdGUgbW9kZS4gRm9yCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0hPV1RPIGIvRG9jdW1lbnRhdGlvbi9IT1dUTwppbmRleCA4NDk1ZmM5Li5mNTM5NWFmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0hPV1RPCisrKyBiL0RvY3VtZW50YXRpb24vSE9XVE8KQEAgLTIyMSw4ICsyMjEsOCBAQAogICAtIG1haW4gMi42Lngga2VybmVsIHRyZWUKICAgLSAyLjYueC55IC1zdGFibGUga2VybmVsIHRyZWUKICAgLSAyLjYueCAtZ2l0IGtlcm5lbCBwYXRjaGVzCi0gIC0gMi42LnggLW1tIGtlcm5lbCBwYXRjaGVzCiAgIC0gc3Vic3lzdGVtIHNwZWNpZmljIGtlcm5lbCB0cmVlcyBhbmQgcGF0Y2hlcworICAtIHRoZSAyLjYueCAtbmV4dCBrZXJuZWwgdHJlZSBmb3IgaW50ZWdyYXRpb24gdGVzdHMKIAogMi42Lngga2VybmVsIHRyZWUKIC0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yMzIsNyArMjMyLDcgQEAKICAgLSBBcyBzb29uIGFzIGEgbmV3IGtlcm5lbCBpcyByZWxlYXNlZCBhIHR3byB3ZWVrcyB3aW5kb3cgaXMgb3BlbiwKICAgICBkdXJpbmcgdGhpcyBwZXJpb2Qgb2YgdGltZSBtYWludGFpbmVycyBjYW4gc3VibWl0IGJpZyBkaWZmcyB0bwogICAgIExpbnVzLCB1c3VhbGx5IHRoZSBwYXRjaGVzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gaW5jbHVkZWQgaW4gdGhlCi0gICAgLW1tIGtlcm5lbCBmb3IgYSBmZXcgd2Vla3MuICBUaGUgcHJlZmVycmVkIHdheSB0byBzdWJtaXQgYmlnIGNoYW5nZXMKKyAgICAtbmV4dCBrZXJuZWwgZm9yIGEgZmV3IHdlZWtzLiAgVGhlIHByZWZlcnJlZCB3YXkgdG8gc3VibWl0IGJpZyBjaGFuZ2VzCiAgICAgaXMgdXNpbmcgZ2l0ICh0aGUga2VybmVsJ3Mgc291cmNlIG1hbmFnZW1lbnQgdG9vbCwgbW9yZSBpbmZvcm1hdGlvbgogICAgIGNhbiBiZSBmb3VuZCBhdCBodHRwOi8vZ2l0Lm9yLmN6LykgYnV0IHBsYWluIHBhdGNoZXMgYXJlIGFsc28ganVzdAogICAgIGZpbmUuCkBAIC0yOTMsODQgKzI5Myw0MyBAQAogZXhwZXJpbWVudGFsIHRoYW4gLXJjIGtlcm5lbHMgc2luY2UgdGhleSBhcmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkKIHdpdGhvdXQgZXZlbiBhIGN1cnNvcnkgZ2xhbmNlIHRvIHNlZSBpZiB0aGV5IGFyZSBzYW5lLgogCi0yLjYueCAtbW0ga2VybmVsIHBhdGNoZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVGhlc2UgYXJlIGV4cGVyaW1lbnRhbCBrZXJuZWwgcGF0Y2hlcyByZWxlYXNlZCBieSBBbmRyZXcgTW9ydG9uLiAgQW5kcmV3Ci10YWtlcyBhbGwgb2YgdGhlIGRpZmZlcmVudCBzdWJzeXN0ZW0ga2VybmVsIHRyZWVzIGFuZCBwYXRjaGVzIGFuZCBtdXNoZXMKLXRoZW0gdG9nZXRoZXIsIGFsb25nIHdpdGggYSBsb3Qgb2YgcGF0Y2hlcyB0aGF0IGhhdmUgYmVlbiBwbHVja2VkIGZyb20KLXRoZSBsaW51eC1rZXJuZWwgbWFpbGluZyBsaXN0LiAgVGhpcyB0cmVlIHNlcnZlcyBhcyBhIHByb3ZpbmcgZ3JvdW5kIGZvcgotbmV3IGZlYXR1cmVzIGFuZCBwYXRjaGVzLiAgT25jZSBhIHBhdGNoIGhhcyBwcm92ZWQgaXRzIHdvcnRoIGluIC1tbSBmb3IKLWEgd2hpbGUgQW5kcmV3IG9yIHRoZSBzdWJzeXN0ZW0gbWFpbnRhaW5lciBwdXNoZXMgaXQgb24gdG8gTGludXMgZm9yCi1pbmNsdXNpb24gaW4gbWFpbmxpbmUuCi0KLUl0IGlzIGhlYXZpbHkgZW5jb3VyYWdlZCB0aGF0IGFsbCBuZXcgcGF0Y2hlcyBnZXQgdGVzdGVkIGluIHRoZSAtbW0gdHJlZQotYmVmb3JlIHRoZXkgYXJlIHNlbnQgdG8gTGludXMgZm9yIGluY2x1c2lvbiBpbiB0aGUgbWFpbiBrZXJuZWwgdHJlZS4gIENvZGUKLXdoaWNoIGRvZXMgbm90IG1ha2UgYW4gYXBwZWFyYW5jZSBpbiAtbW0gYmVmb3JlIHRoZSBvcGVuaW5nIG9mIHRoZSBtZXJnZQotd2luZG93IHdpbGwgcHJvdmUgaGFyZCB0byBtZXJnZSBpbnRvIHRoZSBtYWlubGluZS4KLQotVGhlc2Uga2VybmVscyBhcmUgbm90IGFwcHJvcHJpYXRlIGZvciB1c2Ugb24gc3lzdGVtcyB0aGF0IGFyZSBzdXBwb3NlZAotdG8gYmUgc3RhYmxlIGFuZCB0aGV5IGFyZSBtb3JlIHJpc2t5IHRvIHJ1biB0aGFuIGFueSBvZiB0aGUgb3RoZXIKLWJyYW5jaGVzLgotCi1JZiB5b3Ugd2lzaCB0byBoZWxwIG91dCB3aXRoIHRoZSBrZXJuZWwgZGV2ZWxvcG1lbnQgcHJvY2VzcywgcGxlYXNlIHRlc3QKLWFuZCB1c2UgdGhlc2Uga2VybmVsIHJlbGVhc2VzIGFuZCBwcm92aWRlIGZlZWRiYWNrIHRvIHRoZSBsaW51eC1rZXJuZWwKLW1haWxpbmcgbGlzdCBpZiB5b3UgaGF2ZSBhbnkgcHJvYmxlbXMsIGFuZCBpZiBldmVyeXRoaW5nIHdvcmtzIHByb3Blcmx5LgotCi1JbiBhZGRpdGlvbiB0byBhbGwgdGhlIG90aGVyIGV4cGVyaW1lbnRhbCBwYXRjaGVzLCB0aGVzZSBrZXJuZWxzIHVzdWFsbHkKLWFsc28gY29udGFpbiBhbnkgY2hhbmdlcyBpbiB0aGUgbWFpbmxpbmUgLWdpdCBrZXJuZWxzIGF2YWlsYWJsZSBhdCB0aGUKLXRpbWUgb2YgcmVsZWFzZS4KLQotVGhlIC1tbSBrZXJuZWxzIGFyZSBub3QgcmVsZWFzZWQgb24gYSBmaXhlZCBzY2hlZHVsZSwgYnV0IHVzdWFsbHkgYSBmZXcKLS1tbSBrZXJuZWxzIGFyZSByZWxlYXNlZCBpbiBiZXR3ZWVuIGVhY2ggLXJjIGtlcm5lbCAoMSB0byAzIGlzIGNvbW1vbikuCi0KIFN1YnN5c3RlbSBTcGVjaWZpYyBrZXJuZWwgdHJlZXMgYW5kIHBhdGNoZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUEgbnVtYmVyIG9mIHRoZSBkaWZmZXJlbnQga2VybmVsIHN1YnN5c3RlbSBkZXZlbG9wZXJzIGV4cG9zZSB0aGVpcgotZGV2ZWxvcG1lbnQgdHJlZXMgc28gdGhhdCBvdGhlcnMgY2FuIHNlZSB3aGF0IGlzIGhhcHBlbmluZyBpbiB0aGUKLWRpZmZlcmVudCBhcmVhcyBvZiB0aGUga2VybmVsLiAgVGhlc2UgdHJlZXMgYXJlIHB1bGxlZCBpbnRvIHRoZSAtbW0KLWtlcm5lbCByZWxlYXNlcyBhcyBkZXNjcmliZWQgYWJvdmUuCitUaGUgbWFpbnRhaW5lcnMgb2YgdGhlIHZhcmlvdXMga2VybmVsIHN1YnN5c3RlbXMgLS0tIGFuZCBhbHNvIG1hbnkKK2tlcm5lbCBzdWJzeXN0ZW0gZGV2ZWxvcGVycyAtLS0gZXhwb3NlIHRoZWlyIGN1cnJlbnQgc3RhdGUgb2YKK2RldmVsb3BtZW50IGluIHNvdXJjZSByZXBvc2l0b3JpZXMuICBUaGF0IHdheSwgb3RoZXJzIGNhbiBzZWUgd2hhdCBpcworaGFwcGVuaW5nIGluIHRoZSBkaWZmZXJlbnQgYXJlYXMgb2YgdGhlIGtlcm5lbC4gIEluIGFyZWFzIHdoZXJlCitkZXZlbG9wbWVudCBpcyByYXBpZCwgYSBkZXZlbG9wZXIgbWF5IGJlIGFza2VkIHRvIGJhc2UgaGlzIHN1Ym1pc3Npb25zCitvbnRvIHN1Y2ggYSBzdWJzeXN0ZW0ga2VybmVsIHRyZWUgc28gdGhhdCBjb25mbGljdHMgYmV0d2VlbiB0aGUKK3N1Ym1pc3Npb24gYW5kIG90aGVyIGFscmVhZHkgb25nb2luZyB3b3JrIGFyZSBhdm9pZGVkLgogCi1IZXJlIGlzIGEgbGlzdCBvZiBzb21lIG9mIHRoZSBkaWZmZXJlbnQga2VybmVsIHRyZWVzIGF2YWlsYWJsZToKLSAgZ2l0IHRyZWVzOgotICAgIC0gS2J1aWxkIGRldmVsb3BtZW50IHRyZWUsIFNhbSBSYXZuYm9yZyA8c2FtQHJhdm5ib3JnLm9yZz4KLQlnaXQua2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3NhbS9rYnVpbGQuZ2l0CitNb3N0IG9mIHRoZXNlIHJlcG9zaXRvcmllcyBhcmUgZ2l0IHRyZWVzLCBidXQgdGhlcmUgYXJlIGFsc28gb3RoZXIgU0NNcworaW4gdXNlLCBvciBwYXRjaCBxdWV1ZXMgYmVpbmcgcHVibGlzaGVkIGFzIHF1aWx0IHNlcmllcy4gIEFkZHJlc3NlcyBvZgordGhlc2Ugc3Vic3lzdGVtIHJlcG9zaXRvcmllcyBhcmUgbGlzdGVkIGluIHRoZSBNQUlOVEFJTkVSUyBmaWxlLiAgTWFueQorb2YgdGhlbSBjYW4gYmUgYnJvd3NlZCBhdCBodHRwOi8vZ2l0Lmtlcm5lbC5vcmcvLgogCi0gICAgLSBBQ1BJIGRldmVsb3BtZW50IHRyZWUsIExlbiBCcm93biA8bGVuLmJyb3duQGludGVsLmNvbT4KLQlnaXQua2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2xlbmIvbGludXgtYWNwaS0yLjYuZ2l0CitCZWZvcmUgYSBwcm9wb3NlZCBwYXRjaCBpcyBjb21taXR0ZWQgdG8gc3VjaCBhIHN1YnN5c3RlbSB0cmVlLCBpdCBpcworc3ViamVjdCB0byByZXZpZXcgd2hpY2ggcHJpbWFyaWx5IGhhcHBlbnMgb24gbWFpbGluZyBsaXN0cyAoc2VlIHRoZQorcmVzcGVjdGl2ZSBzZWN0aW9uIGJlbG93KS4gIEZvciBzZXZlcmFsIGtlcm5lbCBzdWJzeXN0ZW1zLCB0aGlzIHJldmlldworcHJvY2VzcyBpcyB0cmFja2VkIHdpdGggdGhlIHRvb2wgcGF0Y2h3b3JrLiAgUGF0Y2h3b3JrIG9mZmVycyBhIHdlYgoraW50ZXJmYWNlIHdoaWNoIHNob3dzIHBhdGNoIHBvc3RpbmdzLCBhbnkgY29tbWVudHMgb24gYSBwYXRjaCBvcgorcmV2aXNpb25zIHRvIGl0LCBhbmQgbWFpbnRhaW5lcnMgY2FuIG1hcmsgcGF0Y2hlcyBhcyB1bmRlciByZXZpZXcsCithY2NlcHRlZCwgb3IgcmVqZWN0ZWQuICBNb3N0IG9mIHRoZXNlIHBhdGNod29yayBzaXRlcyBhcmUgbGlzdGVkIGF0CitodHRwOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvIG9yIGh0dHA6Ly9wYXRjaHdvcmsub3psYWJzLm9yZy8uCiAKLSAgICAtIEJsb2NrIGRldmVsb3BtZW50IHRyZWUsIEplbnMgQXhib2UgPGplbnMuYXhib2VAb3JhY2xlLmNvbT4KLQlnaXQua2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2F4Ym9lL2xpbnV4LTIuNi1ibG9jay5naXQKKzIuNi54IC1uZXh0IGtlcm5lbCB0cmVlIGZvciBpbnRlZ3JhdGlvbiB0ZXN0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitCZWZvcmUgdXBkYXRlcyBmcm9tIHN1YnN5c3RlbSB0cmVlcyBhcmUgbWVyZ2VkIGludG8gdGhlIG1haW5saW5lIDIuNi54Cit0cmVlLCB0aGV5IG5lZWQgdG8gYmUgaW50ZWdyYXRpb24tdGVzdGVkLiAgRm9yIHRoaXMgcHVycG9zZSwgYSBzcGVjaWFsCit0ZXN0aW5nIHJlcG9zaXRvcnkgZXhpc3RzIGludG8gd2hpY2ggdmlydHVhbGx5IGFsbCBzdWJzeXN0ZW0gdHJlZXMgYXJlCitwdWxsZWQgb24gYW4gYWxtb3N0IGRhaWx5IGJhc2lzOgorCWh0dHA6Ly9naXQua2VybmVsLm9yZy8/cD1saW51eC9rZXJuZWwvZ2l0L3Nmci9saW51eC1uZXh0LmdpdAorCWh0dHA6Ly9saW51eC5mLXNlaWRlbC5kZS9saW51eC1uZXh0L3Btd2lraS8KIAotICAgIC0gRFJNIGRldmVsb3BtZW50IHRyZWUsIERhdmUgQWlybGllIDxhaXJsaWVkQGxpbnV4LmllPgotCWdpdC5rZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWlybGllZC9kcm0tMi42LmdpdAorVGhpcyB3YXksIHRoZSAtbmV4dCBrZXJuZWwgZ2l2ZXMgYSBzdW1tYXJ5IG91dGxvb2sgb250byB3aGF0IHdpbGwgYmUKK2V4cGVjdGVkIHRvIGdvIGludG8gdGhlIG1haW5saW5lIGtlcm5lbCBhdCB0aGUgbmV4dCBtZXJnZSBwZXJpb2QuCitBZHZlbnR1cm91cyB0ZXN0ZXJzIGFyZSB2ZXJ5IHdlbGNvbWUgdG8gcnVudGltZS10ZXN0IHRoZSAtbmV4dCBrZXJuZWwuCiAKLSAgICAtIGlhNjQgZGV2ZWxvcG1lbnQgdHJlZSwgVG9ueSBMdWNrIDx0b255Lmx1Y2tAaW50ZWwuY29tPgotCWdpdC5rZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYWVnbC9saW51eC0yLjYuZ2l0Ci0KLSAgICAtIGluZmluaWJhbmQsIFJvbGFuZCBEcmVpZXIgPHJvbGFuZGRAY2lzY28uY29tPgotCWdpdC5rZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvcm9sYW5kL2luZmluaWJhbmQuZ2l0Ci0KLSAgICAtIGxpYmF0YSwgSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPgotCWdpdC5rZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvamdhcnppay9saWJhdGEtZGV2LmdpdAotCi0gICAgLSBuZXR3b3JrIGRyaXZlcnMsIEplZmYgR2FyemlrIDxqZ2FyemlrQHBvYm94LmNvbT4KLQlnaXQua2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2pnYXJ6aWsvbmV0ZGV2LTIuNi5naXQKLQotICAgIC0gcGNtY2lhLCBEb21pbmlrIEJyb2Rvd3NraSA8bGludXhAZG9taW5pa2Jyb2Rvd3NraS5uZXQ+Ci0JZ2l0Lmtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9icm9kby9wY21jaWEtMi42LmdpdAotCi0gICAgLSBTQ1NJLCBKYW1lcyBCb3R0b21sZXkgPEphbWVzLkJvdHRvbWxleUBoYW5zZW5wYXJ0bmVyc2hpcC5jb20+Ci0JZ2l0Lmtlcm5lbC5vcmc6L3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qZWpiL3Njc2ktbWlzYy0yLjYuZ2l0Ci0KLSAgICAtIHg4NiwgSW5nbyBNb2xuYXIgPG1pbmdvQGVsdGUuaHU+Ci0JZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3g4Ni9saW51eC0yLjYteDg2LmdpdAotCi0gIHF1aWx0IHRyZWVzOgotICAgIC0gVVNCLCBEcml2ZXIgQ29yZSwgYW5kIEkyQywgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KLQlrZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcGVvcGxlL2dyZWdraC9ncmVna2gtMi42LwotCi0gIE90aGVyIGtlcm5lbCB0cmVlcyBjYW4gYmUgZm91bmQgbGlzdGVkIGF0IGh0dHA6Ly9naXQua2VybmVsLm9yZy8gYW5kIGluCi0gIHRoZSBNQUlOVEFJTkVSUyBmaWxlLgogCiBCdWcgUmVwb3J0aW5nCiAtLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0lQTUkudHh0IGIvRG9jdW1lbnRhdGlvbi9JUE1JLnR4dAppbmRleCBiYzM4MjgzLi42OWRkMjllIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0lQTUkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vSVBNSS50eHQKQEAgLTM2NSw2ICszNjUsNyBAQAogICAgICAgIHJlZ3NoaWZ0cz08c2hpZnQxPiw8c2hpZnQyPiwuLi4KICAgICAgICBzbGF2ZV9hZGRycz08YWRkcjE+LDxhZGRyMj4sLi4uCiAgICAgICAgZm9yY2Vfa2lwbWlkPTxlbmFibGUxPiw8ZW5hYmxlMj4sLi4uCisgICAgICAga2lwbWlkX21heF9idXN5X3VzPTx1c3RpbWUxPiw8dXN0aW1lMj4sLi4uCiAgICAgICAgdW5sb2FkX3doZW5fZW1wdHk9WzB8MV0KIAogRWFjaCBvZiB0aGVzZSBleGNlcHQgc2lfdHJ5ZGVmYXVsdHMgaXMgYSBsaXN0LCB0aGUgZmlyc3QgaXRlbSBmb3IgdGhlCkBAIC00MzMsNiArNDM0LDcgQEAKICAgICAgICBpcG1pX3NpLnJlZ3NoaWZ0cz08c2hpZnQxPiw8c2hpZnQyPiwuLi4KICAgICAgICBpcG1pX3NpLnNsYXZlX2FkZHJzPTxhZGRyMT4sPGFkZHIyPiwuLi4KICAgICAgICBpcG1pX3NpLmZvcmNlX2tpcG1pZD08ZW5hYmxlMT4sPGVuYWJsZTI+LC4uLgorICAgICAgIGlwbWlfc2kua2lwbWlkX21heF9idXN5X3VzPTx1c3RpbWUxPiw8dXN0aW1lMj4sLi4uCiAKIEl0IHdvcmtzIHRoZSBzYW1lIGFzIHRoZSBtb2R1bGUgcGFyYW1ldGVycyBvZiB0aGUgc2FtZSBuYW1lcy4KIApAQCAtNDUwLDYgKzQ1MiwxNiBAQAogaW50ZXJydXB0cywgdGhlIGRyaXZlciB3aWxsIHJ1biBWRVJZIHNsb3dseS4gIERvbid0IGJsYW1lIG1lLAogdGhlc2UgaW50ZXJmYWNlcyBzdWNrLgogCitVbmZvcnR1bmF0ZWx5LCB0aGlzIHRocmVhZCBjYW4gdXNlIGEgbG90IG9mIENQVSBkZXBlbmRpbmcgb24gdGhlCitpbnRlcmZhY2UncyBwZXJmb3JtYW5jZS4gIFRoaXMgY2FuIHdhc3RlIGEgbG90IG9mIENQVSBhbmQgY2F1c2UKK3ZhcmlvdXMgaXNzdWVzIHdpdGggZGV0ZWN0aW5nIGlkbGUgQ1BVIGFuZCB1c2luZyBleHRyYSBwb3dlci4gIFRvCithdm9pZCB0aGlzLCB0aGUga2lwbWlkX21heF9idXN5X3VzIHNldHMgdGhlIG1heGltdW0gYW1vdW50IG9mIHRpbWUsIGluCittaWNyb3NlY29uZHMsIHRoYXQga2lwbWlkIHdpbGwgc3BpbiBiZWZvcmUgc2xlZXBpbmcgZm9yIGEgdGljay4gIFRoaXMKK3ZhbHVlIHNldHMgYSBiYWxhbmNlIGJldHdlZW4gcGVyZm9ybWFuY2UgYW5kIENQVSB3YXN0ZSBhbmQgbmVlZHMgdG8gYmUKK3R1bmVkIHRvIHlvdXIgbmVlZHMuICBNYXliZSwgc29tZWRheSwgYXV0by10dW5pbmcgd2lsbCBiZSBhZGRlZCwgYnV0Cit0aGF0J3Mgbm90IGEgc2ltcGxlIHRoaW5nIGFuZCBldmVuIHRoZSBhdXRvLXR1bmluZyB3b3VsZCBuZWVkIHRvIGJlCit0dW5lZCB0byB0aGUgdXNlcidzIGRlc2lyZWQgcGVyZm9ybWFuY2UuCisKIFRoZSBkcml2ZXIgc3VwcG9ydHMgYSBob3QgYWRkIGFuZCByZW1vdmUgb2YgaW50ZXJmYWNlcy4gIFRoaXMgd2F5LAogaW50ZXJmYWNlcyBjYW4gYmUgYWRkZWQgb3IgcmVtb3ZlZCBhZnRlciB0aGUga2VybmVsIGlzIHVwIGFuZCBydW5uaW5nLgogVGhpcyBpcyBkb25lIHVzaW5nIC9zeXMvbW9kdWxlcy9pcG1pX3NpL3BhcmFtZXRlcnMvaG90bW9kLCB3aGljaCBpcyBhCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL01ha2VmaWxlIGIvRG9jdW1lbnRhdGlvbi9NYWtlZmlsZQppbmRleCA5NGI5NDU3Li42ZmM3ZWExIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL01ha2VmaWxlCisrKyBiL0RvY3VtZW50YXRpb24vTWFrZWZpbGUKQEAgLTEsMyArMSwzIEBACiBvYmotbSA6PSBEb2NCb29rLyBhY2NvdW50aW5nLyBhdXhkaXNwbGF5LyBjb25uZWN0b3IvIFwKLQlmaWxlc3lzdGVtcy9jb25maWdmcy8gaWE2NC8gbmV0d29ya2luZy8gXAotCXBjbWNpYS8gc3BpLyB2aWRlbzRsaW51eC8gdm0vIHdhdGNoZG9nL3NyYy8KKwlmaWxlc3lzdGVtcy8gZmlsZXN5c3RlbXMvY29uZmlnZnMvIGlhNjQvIGxhcHRvcHMvIG5ldHdvcmtpbmcvIFwKKwlwY21jaWEvIHNwaS8gdGltZXJzLyB2aWRlbzRsaW51eC8gdm0vIHdhdGNoZG9nL3NyYy8KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vUENJL1BDSS1ETUEtbWFwcGluZy50eHQgYi9Eb2N1bWVudGF0aW9uL1BDSS9QQ0ktRE1BLW1hcHBpbmcudHh0CmluZGV4IGVjYWQ4OGQuLjUyNjE4YWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vUENJL1BDSS1ETUEtbWFwcGluZy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9QQ0kvUENJLURNQS1tYXBwaW5nLnR4dApAQCAtMSwxMiArMSwxMiBAQAotCQkJRHluYW1pYyBETUEgbWFwcGluZwotCQkJPT09PT09PT09PT09PT09PT09PQorCQkgICAgIER5bmFtaWMgRE1BIG1hcHBpbmcgR3VpZGUKKwkJICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09CiAKIAkJIERhdmlkIFMuIE1pbGxlciA8ZGF2ZW1AcmVkaGF0LmNvbT4KIAkJIFJpY2hhcmQgSGVuZGVyc29uIDxydGhAY3lnbnVzLmNvbT4KIAkJICBKYWt1YiBKZWxpbmVrIDxqYWt1YkByZWRoYXQuY29tPgogCi1UaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgRE1BIG1hcHBpbmcgc3lzdGVtIGluIHRlcm1zIG9mIHRoZSBwY2lfCi1BUEkuICBGb3IgYSBzaW1pbGFyIEFQSSB0aGF0IHdvcmtzIGZvciBnZW5lcmljIGRldmljZXMsIHNlZQorVGhpcyBpcyBhIGd1aWRlIHRvIGRldmljZSBkcml2ZXIgd3JpdGVycyBvbiBob3cgdG8gdXNlIHRoZSBETUEgQVBJCit3aXRoIGV4YW1wbGUgcHNldWRvLWNvZGUuICBGb3IgYSBjb25jaXNlIGRlc2NyaXB0aW9uIG9mIHRoZSBBUEksIHNlZQogRE1BLUFQSS50eHQuCiAKIE1vc3Qgb2YgdGhlIDY0Yml0IHBsYXRmb3JtcyBoYXZlIHNwZWNpYWwgaGFyZHdhcmUgdGhhdCB0cmFuc2xhdGVzIGJ1cwpAQCAtMjYsMTIgKzI2LDE1IEBACiB0cmFuc2Zlci4KIAogVGhlIGZvbGxvd2luZyBBUEkgd2lsbCB3b3JrIG9mIGNvdXJzZSBldmVuIG9uIHBsYXRmb3JtcyB3aGVyZSBubyBzdWNoCi1oYXJkd2FyZSBleGlzdHMsIHNlZSBlLmcuIGFyY2gveDg2L2luY2x1ZGUvYXNtL3BjaS5oIGZvciBob3cgaXQgaXMgaW1wbGVtZW50ZWQgb24KLXRvcCBvZiB0aGUgdmlydF90b19idXMgaW50ZXJmYWNlLgoraGFyZHdhcmUgZXhpc3RzLgorCitOb3RlIHRoYXQgdGhlIERNQSBBUEkgd29ya3Mgd2l0aCBhbnkgYnVzIGluZGVwZW5kZW50IG9mIHRoZSB1bmRlcmx5aW5nCittaWNyb3Byb2Nlc3NvciBhcmNoaXRlY3R1cmUuIFlvdSBzaG91bGQgdXNlIHRoZSBETUEgQVBJIHJhdGhlciB0aGFuCit0aGUgYnVzIHNwZWNpZmljIERNQSBBUEkgKGUuZy4gcGNpX2RtYV8qKS4KIAogRmlyc3Qgb2YgYWxsLCB5b3Ugc2hvdWxkIG1ha2Ugc3VyZQogCi0jaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAogaXMgaW4geW91ciBkcml2ZXIuIFRoaXMgZmlsZSB3aWxsIG9idGFpbiBmb3IgeW91IHRoZSBkZWZpbml0aW9uIG9mIHRoZQogZG1hX2FkZHJfdCAod2hpY2ggY2FuIGhvbGQgYW55IHZhbGlkIERNQSBhZGRyZXNzIGZvciB0aGUgcGxhdGZvcm0pCkBAIC03OCw0NCArODEsNDMgQEAKIAkJCURNQSBhZGRyZXNzaW5nIGxpbWl0YXRpb25zCiAKIERvZXMgeW91ciBkZXZpY2UgaGF2ZSBhbnkgRE1BIGFkZHJlc3NpbmcgbGltaXRhdGlvbnM/ICBGb3IgZXhhbXBsZSwgaXMKLXlvdXIgZGV2aWNlIG9ubHkgY2FwYWJsZSBvZiBkcml2aW5nIHRoZSBsb3cgb3JkZXIgMjQtYml0cyBvZiBhZGRyZXNzCi1vbiB0aGUgUENJIGJ1cyBmb3IgU0FDIERNQSB0cmFuc2ZlcnM/ICBJZiBzbywgeW91IG5lZWQgdG8gaW5mb3JtIHRoZQotUENJIGxheWVyIG9mIHRoaXMgZmFjdC4KK3lvdXIgZGV2aWNlIG9ubHkgY2FwYWJsZSBvZiBkcml2aW5nIHRoZSBsb3cgb3JkZXIgMjQtYml0cyBvZiBhZGRyZXNzPworSWYgc28sIHlvdSBuZWVkIHRvIGluZm9ybSB0aGUga2VybmVsIG9mIHRoaXMgZmFjdC4KIAogQnkgZGVmYXVsdCwgdGhlIGtlcm5lbCBhc3N1bWVzIHRoYXQgeW91ciBkZXZpY2UgY2FuIGFkZHJlc3MgdGhlIGZ1bGwKLTMyLWJpdHMgaW4gYSBTQUMgY3ljbGUuICBGb3IgYSA2NC1iaXQgREFDIGNhcGFibGUgZGV2aWNlLCB0aGlzIG5lZWRzCi10byBiZSBpbmNyZWFzZWQuICBBbmQgZm9yIGEgZGV2aWNlIHdpdGggbGltaXRhdGlvbnMsIGFzIGRpc2N1c3NlZCBpbgotdGhlIHByZXZpb3VzIHBhcmFncmFwaCwgaXQgbmVlZHMgdG8gYmUgZGVjcmVhc2VkLgorMzItYml0cy4gIEZvciBhIDY0LWJpdCBjYXBhYmxlIGRldmljZSwgdGhpcyBuZWVkcyB0byBiZSBpbmNyZWFzZWQuCitBbmQgZm9yIGEgZGV2aWNlIHdpdGggbGltaXRhdGlvbnMsIGFzIGRpc2N1c3NlZCBpbiB0aGUgcHJldmlvdXMKK3BhcmFncmFwaCwgaXQgbmVlZHMgdG8gYmUgZGVjcmVhc2VkLgogCi1wY2lfYWxsb2NfY29uc2lzdGVudCgpIGJ5IGRlZmF1bHQgd2lsbCByZXR1cm4gMzItYml0IERNQSBhZGRyZXNzZXMuCi1QQ0ktWCBzcGVjaWZpY2F0aW9uIHJlcXVpcmVzIFBDSS1YIGRldmljZXMgdG8gc3VwcG9ydCA2NC1iaXQKLWFkZHJlc3NpbmcgKERBQykgZm9yIGFsbCB0cmFuc2FjdGlvbnMuIEFuZCBhdCBsZWFzdCBvbmUgcGxhdGZvcm0gKFNHSQotU04yKSByZXF1aXJlcyA2NC1iaXQgY29uc2lzdGVudCBhbGxvY2F0aW9ucyB0byBvcGVyYXRlIGNvcnJlY3RseSB3aGVuCi10aGUgSU8gYnVzIGlzIGluIFBDSS1YIG1vZGUuIFRoZXJlZm9yZSwgbGlrZSB3aXRoIHBjaV9zZXRfZG1hX21hc2soKSwKLWl0J3MgZ29vZCBwcmFjdGljZSB0byBjYWxsIHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzaygpIHRvIHNldCB0aGUKLWFwcHJvcHJpYXRlIG1hc2sgZXZlbiBpZiB5b3VyIGRldmljZSBvbmx5IHN1cHBvcnRzIDMyLWJpdCBETUEKLShkZWZhdWx0KSBhbmQgZXNwZWNpYWxseSBpZiBpdCdzIGEgUENJLVggZGV2aWNlLgorU3BlY2lhbCBub3RlIGFib3V0IFBDSTogUENJLVggc3BlY2lmaWNhdGlvbiByZXF1aXJlcyBQQ0ktWCBkZXZpY2VzIHRvCitzdXBwb3J0IDY0LWJpdCBhZGRyZXNzaW5nIChEQUMpIGZvciBhbGwgdHJhbnNhY3Rpb25zLiAgQW5kIGF0IGxlYXN0CitvbmUgcGxhdGZvcm0gKFNHSSBTTjIpIHJlcXVpcmVzIDY0LWJpdCBjb25zaXN0ZW50IGFsbG9jYXRpb25zIHRvCitvcGVyYXRlIGNvcnJlY3RseSB3aGVuIHRoZSBJTyBidXMgaXMgaW4gUENJLVggbW9kZS4KIAotRm9yIGNvcnJlY3Qgb3BlcmF0aW9uLCB5b3UgbXVzdCBpbnRlcnJvZ2F0ZSB0aGUgUENJIGxheWVyIGluIHlvdXIKLWRldmljZSBwcm9iZSByb3V0aW5lIHRvIHNlZSBpZiB0aGUgUENJIGNvbnRyb2xsZXIgb24gdGhlIG1hY2hpbmUgY2FuCi1wcm9wZXJseSBzdXBwb3J0IHRoZSBETUEgYWRkcmVzc2luZyBsaW1pdGF0aW9uIHlvdXIgZGV2aWNlIGhhcy4gIEl0IGlzCi1nb29kIHN0eWxlIHRvIGRvIHRoaXMgZXZlbiBpZiB5b3VyIGRldmljZSBob2xkcyB0aGUgZGVmYXVsdCBzZXR0aW5nLAorRm9yIGNvcnJlY3Qgb3BlcmF0aW9uLCB5b3UgbXVzdCBpbnRlcnJvZ2F0ZSB0aGUga2VybmVsIGluIHlvdXIgZGV2aWNlCitwcm9iZSByb3V0aW5lIHRvIHNlZSBpZiB0aGUgRE1BIGNvbnRyb2xsZXIgb24gdGhlIG1hY2hpbmUgY2FuIHByb3Blcmx5CitzdXBwb3J0IHRoZSBETUEgYWRkcmVzc2luZyBsaW1pdGF0aW9uIHlvdXIgZGV2aWNlIGhhcy4gIEl0IGlzIGdvb2QKK3N0eWxlIHRvIGRvIHRoaXMgZXZlbiBpZiB5b3VyIGRldmljZSBob2xkcyB0aGUgZGVmYXVsdCBzZXR0aW5nLAogYmVjYXVzZSB0aGlzIHNob3dzIHRoYXQgeW91IGRpZCB0aGluayBhYm91dCB0aGVzZSBpc3N1ZXMgd3J0LiB5b3VyCiBkZXZpY2UuCiAKLVRoZSBxdWVyeSBpcyBwZXJmb3JtZWQgdmlhIGEgY2FsbCB0byBwY2lfc2V0X2RtYV9tYXNrKCk6CitUaGUgcXVlcnkgaXMgcGVyZm9ybWVkIHZpYSBhIGNhbGwgdG8gZG1hX3NldF9tYXNrKCk6CiAKLQlpbnQgcGNpX3NldF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTY0IGRldmljZV9tYXNrKTsKKwlpbnQgZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spOwogCiBUaGUgcXVlcnkgZm9yIGNvbnNpc3RlbnQgYWxsb2NhdGlvbnMgaXMgcGVyZm9ybWVkIHZpYSBhIGNhbGwgdG8KLXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzaygpOgorZG1hX3NldF9jb2hlcmVudF9tYXNrKCk6CiAKLQlpbnQgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1NjQgZGV2aWNlX21hc2spOworCWludCBkbWFfc2V0X2NvaGVyZW50X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzayk7CiAKLUhlcmUsIHBkZXYgaXMgYSBwb2ludGVyIHRvIHRoZSBQQ0kgZGV2aWNlIHN0cnVjdCBvZiB5b3VyIGRldmljZSwgYW5kCi1kZXZpY2VfbWFzayBpcyBhIGJpdCBtYXNrIGRlc2NyaWJpbmcgd2hpY2ggYml0cyBvZiBhIFBDSSBhZGRyZXNzIHlvdXIKLWRldmljZSBzdXBwb3J0cy4gIEl0IHJldHVybnMgemVybyBpZiB5b3VyIGNhcmQgY2FuIHBlcmZvcm0gRE1BCi1wcm9wZXJseSBvbiB0aGUgbWFjaGluZSBnaXZlbiB0aGUgYWRkcmVzcyBtYXNrIHlvdSBwcm92aWRlZC4KK0hlcmUsIGRldiBpcyBhIHBvaW50ZXIgdG8gdGhlIGRldmljZSBzdHJ1Y3Qgb2YgeW91ciBkZXZpY2UsIGFuZCBtYXNrCitpcyBhIGJpdCBtYXNrIGRlc2NyaWJpbmcgd2hpY2ggYml0cyBvZiBhbiBhZGRyZXNzIHlvdXIgZGV2aWNlCitzdXBwb3J0cy4gIEl0IHJldHVybnMgemVybyBpZiB5b3VyIGNhcmQgY2FuIHBlcmZvcm0gRE1BIHByb3Blcmx5IG9uCit0aGUgbWFjaGluZSBnaXZlbiB0aGUgYWRkcmVzcyBtYXNrIHlvdSBwcm92aWRlZC4gIEluIGdlbmVyYWwsIHRoZQorZGV2aWNlIHN0cnVjdCBvZiB5b3VyIGRldmljZSBpcyBlbWJlZGRlZCBpbiB0aGUgYnVzIHNwZWNpZmljIGRldmljZQorc3RydWN0IG9mIHlvdXIgZGV2aWNlLiAgRm9yIGV4YW1wbGUsIGEgcG9pbnRlciB0byB0aGUgZGV2aWNlIHN0cnVjdCBvZgoreW91ciBQQ0kgZGV2aWNlIGlzIHBkZXYtPmRldiAocGRldiBpcyBhIHBvaW50ZXIgdG8gdGhlIFBDSSBkZXZpY2UKK3N0cnVjdCBvZiB5b3VyIGRldmljZSkuCiAKIElmIGl0IHJldHVybnMgbm9uLXplcm8sIHlvdXIgZGV2aWNlIGNhbm5vdCBwZXJmb3JtIERNQSBwcm9wZXJseSBvbgogdGhpcyBwbGF0Zm9ybSwgYW5kIGF0dGVtcHRpbmcgdG8gZG8gc28gd2lsbCByZXN1bHQgaW4gdW5kZWZpbmVkCkBAIC0xMzMsMzEgKzEzNSwzMCBAQAogZXZlbiBkZXRlY3RlZCwgeW91IGNhbiBhc2sgdGhlbSBmb3IgdGhlIGtlcm5lbCBtZXNzYWdlcyB0byBmaW5kIG91dAogZXhhY3RseSB3aHkuCiAKLVRoZSBzdGFuZGFyZCAzMi1iaXQgYWRkcmVzc2luZyBQQ0kgZGV2aWNlIHdvdWxkIGRvIHNvbWV0aGluZyBsaWtlCi10aGlzOgorVGhlIHN0YW5kYXJkIDMyLWJpdCBhZGRyZXNzaW5nIGRldmljZSB3b3VsZCBkbyBzb21ldGhpbmcgbGlrZSB0aGlzOgogCi0JaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKKwlpZiAoZG1hX3NldF9tYXNrKGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIm15ZGV2OiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CiAJCWdvdG8gaWdub3JlX3RoaXNfZGV2aWNlOwogCX0KIAotQW5vdGhlciBjb21tb24gc2NlbmFyaW8gaXMgYSA2NC1iaXQgY2FwYWJsZSBkZXZpY2UuICBUaGUgYXBwcm9hY2gKLWhlcmUgaXMgdG8gdHJ5IGZvciA2NC1iaXQgREFDIGFkZHJlc3NpbmcsIGJ1dCBiYWNrIGRvd24gdG8gYQotMzItYml0IG1hc2sgc2hvdWxkIHRoYXQgZmFpbC4gIFRoZSBQQ0kgcGxhdGZvcm0gY29kZSBtYXkgZmFpbCB0aGUKLTY0LWJpdCBtYXNrIG5vdCBiZWNhdXNlIHRoZSBwbGF0Zm9ybSBpcyBub3QgY2FwYWJsZSBvZiA2NC1iaXQKLWFkZHJlc3NpbmcuICBSYXRoZXIsIGl0IG1heSBmYWlsIGluIHRoaXMgY2FzZSBzaW1wbHkgYmVjYXVzZQotMzItYml0IFNBQyBhZGRyZXNzaW5nIGlzIGRvbmUgbW9yZSBlZmZpY2llbnRseSB0aGFuIERBQyBhZGRyZXNzaW5nLgotU3BhcmM2NCBpcyBvbmUgcGxhdGZvcm0gd2hpY2ggYmVoYXZlcyBpbiB0aGlzIHdheS4KK0Fub3RoZXIgY29tbW9uIHNjZW5hcmlvIGlzIGEgNjQtYml0IGNhcGFibGUgZGV2aWNlLiAgVGhlIGFwcHJvYWNoIGhlcmUKK2lzIHRvIHRyeSBmb3IgNjQtYml0IGFkZHJlc3NpbmcsIGJ1dCBiYWNrIGRvd24gdG8gYSAzMi1iaXQgbWFzayB0aGF0CitzaG91bGQgbm90IGZhaWwuICBUaGUga2VybmVsIG1heSBmYWlsIHRoZSA2NC1iaXQgbWFzayBub3QgYmVjYXVzZSB0aGUKK3BsYXRmb3JtIGlzIG5vdCBjYXBhYmxlIG9mIDY0LWJpdCBhZGRyZXNzaW5nLiAgUmF0aGVyLCBpdCBtYXkgZmFpbCBpbgordGhpcyBjYXNlIHNpbXBseSBiZWNhdXNlIDMyLWJpdCBhZGRyZXNzaW5nIGlzIGRvbmUgbW9yZSBlZmZpY2llbnRseQordGhhbiA2NC1iaXQgYWRkcmVzc2luZy4gIEZvciBleGFtcGxlLCBTcGFyYzY0IFBDSSBTQUMgYWRkcmVzc2luZyBpcworbW9yZSBlZmZpY2llbnQgdGhhbiBEQUMgYWRkcmVzc2luZy4KIAogSGVyZSBpcyBob3cgeW91IHdvdWxkIGhhbmRsZSBhIDY0LWJpdCBjYXBhYmxlIGRldmljZSB3aGljaCBjYW4gZHJpdmUKIGFsbCA2NC1iaXRzIHdoZW4gYWNjZXNzaW5nIHN0cmVhbWluZyBETUE6CiAKIAlpbnQgdXNpbmdfZGFjOwogCi0JaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpKSB7CisJaWYgKCFkbWFfc2V0X21hc2soZGV2LCBETUFfQklUX01BU0soNjQpKSkgewogCQl1c2luZ19kYWMgPSAxOwotCX0gZWxzZSBpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKKwl9IGVsc2UgaWYgKCFkbWFfc2V0X21hc2soZGV2LCBETUFfQklUX01BU0soMzIpKSkgewogCQl1c2luZ19kYWMgPSAwOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKQEAgLTE3MCwzNiArMTcxLDM2IEBACiAKIAlpbnQgdXNpbmdfZGFjLCBjb25zaXN0ZW50X3VzaW5nX2RhYzsKIAotCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKSkgeworCWlmICghZG1hX3NldF9tYXNrKGRldiwgRE1BX0JJVF9NQVNLKDY0KSkpIHsKIAkJdXNpbmdfZGFjID0gMTsKIAkgICAJY29uc2lzdGVudF91c2luZ19kYWMgPSAxOwotCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSk7Ci0JfSBlbHNlIGlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkgeworCQlkbWFfc2V0X2NvaGVyZW50X21hc2soZGV2LCBETUFfQklUX01BU0soNjQpKTsKKwl9IGVsc2UgaWYgKCFkbWFfc2V0X21hc2soZGV2LCBETUFfQklUX01BU0soMzIpKSkgewogCQl1c2luZ19kYWMgPSAwOwogCQljb25zaXN0ZW50X3VzaW5nX2RhYyA9IDA7Ci0JCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKKwkJZG1hX3NldF9jb2hlcmVudF9tYXNrKGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CiAJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIm15ZGV2OiBObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7CiAJCWdvdG8gaWdub3JlX3RoaXNfZGV2aWNlOwogCX0KIAotcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKCkgd2lsbCBhbHdheXMgYmUgYWJsZSB0byBzZXQgdGhlIHNhbWUgb3IgYQotc21hbGxlciBtYXNrIGFzIHBjaV9zZXRfZG1hX21hc2soKS4gSG93ZXZlciBmb3IgdGhlIHJhcmUgY2FzZSB0aGF0IGEKK2RtYV9zZXRfY29oZXJlbnRfbWFzaygpIHdpbGwgYWx3YXlzIGJlIGFibGUgdG8gc2V0IHRoZSBzYW1lIG9yIGEKK3NtYWxsZXIgbWFzayBhcyBkbWFfc2V0X21hc2soKS4gSG93ZXZlciBmb3IgdGhlIHJhcmUgY2FzZSB0aGF0IGEKIGRldmljZSBkcml2ZXIgb25seSB1c2VzIGNvbnNpc3RlbnQgYWxsb2NhdGlvbnMsIG9uZSB3b3VsZCBoYXZlIHRvCi1jaGVjayB0aGUgcmV0dXJuIHZhbHVlIGZyb20gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKCkuCitjaGVjayB0aGUgcmV0dXJuIHZhbHVlIGZyb20gZG1hX3NldF9jb2hlcmVudF9tYXNrKCkuCiAKIEZpbmFsbHksIGlmIHlvdXIgZGV2aWNlIGNhbiBvbmx5IGRyaXZlIHRoZSBsb3cgMjQtYml0cyBvZgotYWRkcmVzcyBkdXJpbmcgUENJIGJ1cyBtYXN0ZXJpbmcgeW91IG1pZ2h0IGRvIHNvbWV0aGluZyBsaWtlOgorYWRkcmVzcyB5b3UgbWlnaHQgZG8gc29tZXRoaW5nIGxpa2U6CiAKLQlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMjQpKSkgeworCWlmIChkbWFfc2V0X21hc2soZGV2LCBETUFfQklUX01BU0soMjQpKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAibXlkZXY6IDI0LWJpdCBETUEgYWRkcmVzc2luZyBub3QgYXZhaWxhYmxlLlxuIik7CiAJCWdvdG8gaWdub3JlX3RoaXNfZGV2aWNlOwogCX0KIAotV2hlbiBwY2lfc2V0X2RtYV9tYXNrKCkgaXMgc3VjY2Vzc2Z1bCwgYW5kIHJldHVybnMgemVybywgdGhlIFBDSSBsYXllcgotc2F2ZXMgYXdheSB0aGlzIG1hc2sgeW91IGhhdmUgcHJvdmlkZWQuICBUaGUgUENJIGxheWVyIHdpbGwgdXNlIHRoaXMKK1doZW4gZG1hX3NldF9tYXNrKCkgaXMgc3VjY2Vzc2Z1bCwgYW5kIHJldHVybnMgemVybywgdGhlIGtlcm5lbCBzYXZlcworYXdheSB0aGlzIG1hc2sgeW91IGhhdmUgcHJvdmlkZWQuICBUaGUga2VybmVsIHdpbGwgdXNlIHRoaXMKIGluZm9ybWF0aW9uIGxhdGVyIHdoZW4geW91IG1ha2UgRE1BIG1hcHBpbmdzLgogCiBUaGVyZSBpcyBhIGNhc2Ugd2hpY2ggd2UgYXJlIGF3YXJlIG9mIGF0IHRoaXMgdGltZSwgd2hpY2ggaXMgd29ydGgKQEAgLTIwOCw3ICsyMDksNyBAQAogZnVuY3Rpb25zKSBhbmQgdGhlIHZhcmlvdXMgZGlmZmVyZW50IGZ1bmN0aW9ucyBoYXZlIF9kaWZmZXJlbnRfCiBETUEgYWRkcmVzc2luZyBsaW1pdGF0aW9ucywgeW91IG1heSB3aXNoIHRvIHByb2JlIGVhY2ggbWFzayBhbmQKIG9ubHkgcHJvdmlkZSB0aGUgZnVuY3Rpb25hbGl0eSB3aGljaCB0aGUgbWFjaGluZSBjYW4gaGFuZGxlLiAgSXQKLWlzIGltcG9ydGFudCB0aGF0IHRoZSBsYXN0IGNhbGwgdG8gcGNpX3NldF9kbWFfbWFzaygpIGJlIGZvciB0aGUKK2lzIGltcG9ydGFudCB0aGF0IHRoZSBsYXN0IGNhbGwgdG8gZG1hX3NldF9tYXNrKCkgYmUgZm9yIHRoZQogbW9zdCBzcGVjaWZpYyBtYXNrLgogCiBIZXJlIGlzIHBzZXVkby1jb2RlIHNob3dpbmcgaG93IHRoaXMgbWlnaHQgYmUgZG9uZToKQEAgLTIxNywxNyArMjE4LDE3IEBACiAJI2RlZmluZSBSRUNPUkRfQUREUkVTU19CSVRTCURNQV9CSVRfTUFTSygyNCkKIAogCXN0cnVjdCBteV9zb3VuZF9jYXJkICpjYXJkOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldjsKIAogCS4uLgotCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBQTEFZQkFDS19BRERSRVNTX0JJVFMpKSB7CisJaWYgKCFkbWFfc2V0X21hc2soZGV2LCBQTEFZQkFDS19BRERSRVNTX0JJVFMpKSB7CiAJCWNhcmQtPnBsYXliYWNrX2VuYWJsZWQgPSAxOwogCX0gZWxzZSB7CiAJCWNhcmQtPnBsYXliYWNrX2VuYWJsZWQgPSAwOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogUGxheWJhY2sgZGlzYWJsZWQgZHVlIHRvIERNQSBsaW1pdGF0aW9ucy5cbiIsCiAJCSAgICAgICBjYXJkLT5uYW1lKTsKIAl9Ci0JaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIFJFQ09SRF9BRERSRVNTX0JJVFMpKSB7CisJaWYgKCFkbWFfc2V0X21hc2soZGV2LCBSRUNPUkRfQUREUkVTU19CSVRTKSkgewogCQljYXJkLT5yZWNvcmRfZW5hYmxlZCA9IDE7CiAJfSBlbHNlIHsKIAkJY2FyZC0+cmVjb3JkX2VuYWJsZWQgPSAwOwpAQCAtMjUyLDggKzI1Myw4IEBACiAgIFRoaW5rIG9mICJjb25zaXN0ZW50IiBhcyAic3luY2hyb25vdXMiIG9yICJjb2hlcmVudCIuCiAKICAgVGhlIGN1cnJlbnQgZGVmYXVsdCBpcyB0byByZXR1cm4gY29uc2lzdGVudCBtZW1vcnkgaW4gdGhlIGxvdyAzMgotICBiaXRzIG9mIHRoZSBQQ0kgYnVzIHNwYWNlLiAgSG93ZXZlciwgZm9yIGZ1dHVyZSBjb21wYXRpYmlsaXR5IHlvdQotICBzaG91bGQgc2V0IHRoZSBjb25zaXN0ZW50IG1hc2sgZXZlbiBpZiB0aGlzIGRlZmF1bHQgaXMgZmluZSBmb3IgeW91cgorICBiaXRzIG9mIHRoZSBidXMgc3BhY2UuICBIb3dldmVyLCBmb3IgZnV0dXJlIGNvbXBhdGliaWxpdHkgeW91IHNob3VsZAorICBzZXQgdGhlIGNvbnNpc3RlbnQgbWFzayBldmVuIGlmIHRoaXMgZGVmYXVsdCBpcyBmaW5lIGZvciB5b3VyCiAgIGRyaXZlci4KIAogICBHb29kIGV4YW1wbGVzIG9mIHdoYXQgdG8gdXNlIGNvbnNpc3RlbnQgbWFwcGluZ3MgZm9yIGFyZToKQEAgLTI4NSw5ICsyODYsOSBAQAogCSAgICAgZm91bmQgaW4gUENJIGJyaWRnZXMgKHN1Y2ggYXMgYnkgcmVhZGluZyBhIHJlZ2lzdGVyJ3MgdmFsdWUKIAkgICAgIGFmdGVyIHdyaXRpbmcgaXQpLgogCi0tIFN0cmVhbWluZyBETUEgbWFwcGluZ3Mgd2hpY2ggYXJlIHVzdWFsbHkgbWFwcGVkIGZvciBvbmUgRE1BIHRyYW5zZmVyLAotICB1bm1hcHBlZCByaWdodCBhZnRlciBpdCAodW5sZXNzIHlvdSB1c2UgcGNpX2RtYV9zeW5jXyogYmVsb3cpIGFuZCBmb3Igd2hpY2gKLSAgaGFyZHdhcmUgY2FuIG9wdGltaXplIGZvciBzZXF1ZW50aWFsIGFjY2Vzc2VzLgorLSBTdHJlYW1pbmcgRE1BIG1hcHBpbmdzIHdoaWNoIGFyZSB1c3VhbGx5IG1hcHBlZCBmb3Igb25lIERNQQorICB0cmFuc2ZlciwgdW5tYXBwZWQgcmlnaHQgYWZ0ZXIgaXQgKHVubGVzcyB5b3UgdXNlIGRtYV9zeW5jXyogYmVsb3cpCisgIGFuZCBmb3Igd2hpY2ggaGFyZHdhcmUgY2FuIG9wdGltaXplIGZvciBzZXF1ZW50aWFsIGFjY2Vzc2VzLgogCiAgIFRoaXMgb2YgInN0cmVhbWluZyIgYXMgImFzeW5jaHJvbm91cyIgb3IgIm91dHNpZGUgdGhlIGNvaGVyZW5jeQogICBkb21haW4iLgpAQCAtMzAyLDggKzMwMyw4IEBACiAgIG9wdGltaXphdGlvbnMgdGhlIGhhcmR3YXJlIGFsbG93cy4gIFRvIHRoaXMgZW5kLCB3aGVuIHVzaW5nCiAgIHN1Y2ggbWFwcGluZ3MgeW91IG11c3QgYmUgZXhwbGljaXQgYWJvdXQgd2hhdCB5b3Ugd2FudCB0byBoYXBwZW4uCiAKLU5laXRoZXIgdHlwZSBvZiBETUEgbWFwcGluZyBoYXMgYWxpZ25tZW50IHJlc3RyaWN0aW9ucyB0aGF0IGNvbWUKLWZyb20gUENJLCBhbHRob3VnaCBzb21lIGRldmljZXMgbWF5IGhhdmUgc3VjaCByZXN0cmljdGlvbnMuCitOZWl0aGVyIHR5cGUgb2YgRE1BIG1hcHBpbmcgaGFzIGFsaWdubWVudCByZXN0cmljdGlvbnMgdGhhdCBjb21lIGZyb20KK3RoZSB1bmRlcmx5aW5nIGJ1cywgYWx0aG91Z2ggc29tZSBkZXZpY2VzIG1heSBoYXZlIHN1Y2ggcmVzdHJpY3Rpb25zLgogQWxzbywgc3lzdGVtcyB3aXRoIGNhY2hlcyB0aGF0IGFyZW4ndCBETUEtY29oZXJlbnQgd2lsbCB3b3JrIGJldHRlcgogd2hlbiB0aGUgdW5kZXJseWluZyBidWZmZXJzIGRvbid0IHNoYXJlIGNhY2hlIGxpbmVzIHdpdGggb3RoZXIgZGF0YS4KIApAQCAtMzE1LDMzICszMTYsMjcgQEAKIAogCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKIAotCWNwdV9hZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgc2l6ZSwgJmRtYV9oYW5kbGUpOworCWNwdV9hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgJmRtYV9oYW5kbGUsIGdmcCk7CiAKLXdoZXJlIHBkZXYgaXMgYSBzdHJ1Y3QgcGNpX2RldiAqLiBUaGlzIG1heSBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQuCi1Zb3Ugc2hvdWxkIHVzZSBkbWFfYWxsb2NfY29oZXJlbnQgKHNlZSBETUEtQVBJLnR4dCkgZm9yIGJ1c2VzCi13aGVyZSBkZXZpY2VzIGRvbid0IGhhdmUgc3RydWN0IHBjaV9kZXYgKGxpa2UgSVNBLCBFSVNBKS4KLQotVGhpcyBhcmd1bWVudCBpcyBuZWVkZWQgYmVjYXVzZSB0aGUgRE1BIHRyYW5zbGF0aW9ucyBtYXkgYmUgYnVzCi1zcGVjaWZpYyAoYW5kIG9mdGVuIGlzIHByaXZhdGUgdG8gdGhlIGJ1cyB3aGljaCB0aGUgZGV2aWNlIGlzIGF0dGFjaGVkCi10bykuCit3aGVyZSBkZXZpY2UgaXMgYSBzdHJ1Y3QgZGV2aWNlICouIFRoaXMgbWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQKK2NvbnRleHQgd2l0aCB0aGUgR0ZQX0FUT01JQyBmbGFnLgogCiBTaXplIGlzIHRoZSBsZW5ndGggb2YgdGhlIHJlZ2lvbiB5b3Ugd2FudCB0byBhbGxvY2F0ZSwgaW4gYnl0ZXMuCiAKIFRoaXMgcm91dGluZSB3aWxsIGFsbG9jYXRlIFJBTSBmb3IgdGhhdCByZWdpb24sIHNvIGl0IGFjdHMgc2ltaWxhcmx5IHRvCiBfX2dldF9mcmVlX3BhZ2VzIChidXQgdGFrZXMgc2l6ZSBpbnN0ZWFkIG9mIGEgcGFnZSBvcmRlcikuICBJZiB5b3VyCiBkcml2ZXIgbmVlZHMgcmVnaW9ucyBzaXplZCBzbWFsbGVyIHRoYW4gYSBwYWdlLCB5b3UgbWF5IHByZWZlciB1c2luZwotdGhlIHBjaV9wb29sIGludGVyZmFjZSwgZGVzY3JpYmVkIGJlbG93LgordGhlIGRtYV9wb29sIGludGVyZmFjZSwgZGVzY3JpYmVkIGJlbG93LgogCi1UaGUgY29uc2lzdGVudCBETUEgbWFwcGluZyBpbnRlcmZhY2VzLCBmb3Igbm9uLU5VTEwgcGRldiwgd2lsbCBieQotZGVmYXVsdCByZXR1cm4gYSBETUEgYWRkcmVzcyB3aGljaCBpcyBTQUMgKFNpbmdsZSBBZGRyZXNzIEN5Y2xlKQotYWRkcmVzc2FibGUuICBFdmVuIGlmIHRoZSBkZXZpY2UgaW5kaWNhdGVzICh2aWEgUENJIGRtYSBtYXNrKSB0aGF0IGl0Ci1tYXkgYWRkcmVzcyB0aGUgdXBwZXIgMzItYml0cyBhbmQgdGh1cyBwZXJmb3JtIERBQyBjeWNsZXMsIGNvbnNpc3RlbnQKLWFsbG9jYXRpb24gd2lsbCBvbmx5IHJldHVybiA+IDMyLWJpdCBQQ0kgYWRkcmVzc2VzIGZvciBETUEgaWYgdGhlCi1jb25zaXN0ZW50IGRtYSBtYXNrIGhhcyBiZWVuIGV4cGxpY2l0bHkgY2hhbmdlZCB2aWEKLXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzaygpLiAgVGhpcyBpcyB0cnVlIG9mIHRoZSBwY2lfcG9vbCBpbnRlcmZhY2UKLWFzIHdlbGwuCitUaGUgY29uc2lzdGVudCBETUEgbWFwcGluZyBpbnRlcmZhY2VzLCBmb3Igbm9uLU5VTEwgZGV2LCB3aWxsIGJ5CitkZWZhdWx0IHJldHVybiBhIERNQSBhZGRyZXNzIHdoaWNoIGlzIDMyLWJpdCBhZGRyZXNzYWJsZS4gIEV2ZW4gaWYgdGhlCitkZXZpY2UgaW5kaWNhdGVzICh2aWEgRE1BIG1hc2spIHRoYXQgaXQgbWF5IGFkZHJlc3MgdGhlIHVwcGVyIDMyLWJpdHMsCitjb25zaXN0ZW50IGFsbG9jYXRpb24gd2lsbCBvbmx5IHJldHVybiA+IDMyLWJpdCBhZGRyZXNzZXMgZm9yIERNQSBpZgordGhlIGNvbnNpc3RlbnQgRE1BIG1hc2sgaGFzIGJlZW4gZXhwbGljaXRseSBjaGFuZ2VkIHZpYQorZG1hX3NldF9jb2hlcmVudF9tYXNrKCkuICBUaGlzIGlzIHRydWUgb2YgdGhlIGRtYV9wb29sIGludGVyZmFjZSBhcword2VsbC4KIAotcGNpX2FsbG9jX2NvbnNpc3RlbnQgcmV0dXJucyB0d28gdmFsdWVzOiB0aGUgdmlydHVhbCBhZGRyZXNzIHdoaWNoIHlvdQorZG1hX2FsbG9jX2NvaGVyZW50IHJldHVybnMgdHdvIHZhbHVlczogdGhlIHZpcnR1YWwgYWRkcmVzcyB3aGljaCB5b3UKIGNhbiB1c2UgdG8gYWNjZXNzIGl0IGZyb20gdGhlIENQVSBhbmQgZG1hX2hhbmRsZSB3aGljaCB5b3UgcGFzcyB0byB0aGUKIGNhcmQuCiAKQEAgLTM1NCw1NCArMzQ5LDU0IEBACiAKIFRvIHVubWFwIGFuZCBmcmVlIHN1Y2ggYSBETUEgcmVnaW9uLCB5b3UgY2FsbDoKIAotCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgc2l6ZSwgY3B1X2FkZHIsIGRtYV9oYW5kbGUpOworCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgY3B1X2FkZHIsIGRtYV9oYW5kbGUpOwogCi13aGVyZSBwZGV2LCBzaXplIGFyZSB0aGUgc2FtZSBhcyBpbiB0aGUgYWJvdmUgY2FsbCBhbmQgY3B1X2FkZHIgYW5kCi1kbWFfaGFuZGxlIGFyZSB0aGUgdmFsdWVzIHBjaV9hbGxvY19jb25zaXN0ZW50IHJldHVybmVkIHRvIHlvdS4KK3doZXJlIGRldiwgc2l6ZSBhcmUgdGhlIHNhbWUgYXMgaW4gdGhlIGFib3ZlIGNhbGwgYW5kIGNwdV9hZGRyIGFuZAorZG1hX2hhbmRsZSBhcmUgdGhlIHZhbHVlcyBkbWFfYWxsb2NfY29oZXJlbnQgcmV0dXJuZWQgdG8geW91LgogVGhpcyBmdW5jdGlvbiBtYXkgbm90IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dC4KIAogSWYgeW91ciBkcml2ZXIgbmVlZHMgbG90cyBvZiBzbWFsbGVyIG1lbW9yeSByZWdpb25zLCB5b3UgY2FuIHdyaXRlCi1jdXN0b20gY29kZSB0byBzdWJkaXZpZGUgcGFnZXMgcmV0dXJuZWQgYnkgcGNpX2FsbG9jX2NvbnNpc3RlbnQsCi1vciB5b3UgY2FuIHVzZSB0aGUgcGNpX3Bvb2wgQVBJIHRvIGRvIHRoYXQuICBBIHBjaV9wb29sIGlzIGxpa2UKLWEga21lbV9jYWNoZSwgYnV0IGl0IHVzZXMgcGNpX2FsbG9jX2NvbnNpc3RlbnQgbm90IF9fZ2V0X2ZyZWVfcGFnZXMuCitjdXN0b20gY29kZSB0byBzdWJkaXZpZGUgcGFnZXMgcmV0dXJuZWQgYnkgZG1hX2FsbG9jX2NvaGVyZW50LAorb3IgeW91IGNhbiB1c2UgdGhlIGRtYV9wb29sIEFQSSB0byBkbyB0aGF0LiAgQSBkbWFfcG9vbCBpcyBsaWtlCithIGttZW1fY2FjaGUsIGJ1dCBpdCB1c2VzIGRtYV9hbGxvY19jb2hlcmVudCBub3QgX19nZXRfZnJlZV9wYWdlcy4KIEFsc28sIGl0IHVuZGVyc3RhbmRzIGNvbW1vbiBoYXJkd2FyZSBjb25zdHJhaW50cyBmb3IgYWxpZ25tZW50LAogbGlrZSBxdWV1ZSBoZWFkcyBuZWVkaW5nIHRvIGJlIGFsaWduZWQgb24gTiBieXRlIGJvdW5kYXJpZXMuCiAKLUNyZWF0ZSBhIHBjaV9wb29sIGxpa2UgdGhpczoKK0NyZWF0ZSBhIGRtYV9wb29sIGxpa2UgdGhpczoKIAotCXN0cnVjdCBwY2lfcG9vbCAqcG9vbDsKKwlzdHJ1Y3QgZG1hX3Bvb2wgKnBvb2w7CiAKLQlwb29sID0gcGNpX3Bvb2xfY3JlYXRlKG5hbWUsIHBkZXYsIHNpemUsIGFsaWduLCBhbGxvYyk7CisJcG9vbCA9IGRtYV9wb29sX2NyZWF0ZShuYW1lLCBkZXYsIHNpemUsIGFsaWduLCBhbGxvYyk7CiAKLVRoZSAibmFtZSIgaXMgZm9yIGRpYWdub3N0aWNzIChsaWtlIGEga21lbV9jYWNoZSBuYW1lKTsgcGRldiBhbmQgc2l6ZQorVGhlICJuYW1lIiBpcyBmb3IgZGlhZ25vc3RpY3MgKGxpa2UgYSBrbWVtX2NhY2hlIG5hbWUpOyBkZXYgYW5kIHNpemUKIGFyZSBhcyBhYm92ZS4gIFRoZSBkZXZpY2UncyBoYXJkd2FyZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgZm9yIHRoaXMKIHR5cGUgb2YgZGF0YSBpcyAiYWxpZ24iICh3aGljaCBpcyBleHByZXNzZWQgaW4gYnl0ZXMsIGFuZCBtdXN0IGJlIGEKIHBvd2VyIG9mIHR3bykuICBJZiB5b3VyIGRldmljZSBoYXMgbm8gYm91bmRhcnkgY3Jvc3NpbmcgcmVzdHJpY3Rpb25zLAogcGFzcyAwIGZvciBhbGxvYzsgcGFzc2luZyA0MDk2IHNheXMgbWVtb3J5IGFsbG9jYXRlZCBmcm9tIHRoaXMgcG9vbAogbXVzdCBub3QgY3Jvc3MgNEtCeXRlIGJvdW5kYXJpZXMgKGJ1dCBhdCB0aGF0IHRpbWUgaXQgbWF5IGJlIGJldHRlciB0bwotZ28gZm9yIHBjaV9hbGxvY19jb25zaXN0ZW50IGRpcmVjdGx5IGluc3RlYWQpLgorZ28gZm9yIGRtYV9hbGxvY19jb2hlcmVudCBkaXJlY3RseSBpbnN0ZWFkKS4KIAotQWxsb2NhdGUgbWVtb3J5IGZyb20gYSBwY2kgcG9vbCBsaWtlIHRoaXM6CitBbGxvY2F0ZSBtZW1vcnkgZnJvbSBhIGRtYSBwb29sIGxpa2UgdGhpczoKIAotCWNwdV9hZGRyID0gcGNpX3Bvb2xfYWxsb2MocG9vbCwgZmxhZ3MsICZkbWFfaGFuZGxlKTsKKwljcHVfYWRkciA9IGRtYV9wb29sX2FsbG9jKHBvb2wsIGZsYWdzLCAmZG1hX2hhbmRsZSk7CiAKIGZsYWdzIGFyZSBTTEFCX0tFUk5FTCBpZiBibG9ja2luZyBpcyBwZXJtaXR0ZWQgKG5vdCBpbl9pbnRlcnJ1cHQgbm9yCi1ob2xkaW5nIFNNUCBsb2NrcyksIFNMQUJfQVRPTUlDIG90aGVyd2lzZS4gIExpa2UgcGNpX2FsbG9jX2NvbnNpc3RlbnQsCitob2xkaW5nIFNNUCBsb2NrcyksIFNMQUJfQVRPTUlDIG90aGVyd2lzZS4gIExpa2UgZG1hX2FsbG9jX2NvaGVyZW50LAogdGhpcyByZXR1cm5zIHR3byB2YWx1ZXMsIGNwdV9hZGRyIGFuZCBkbWFfaGFuZGxlLgogCi1GcmVlIG1lbW9yeSB0aGF0IHdhcyBhbGxvY2F0ZWQgZnJvbSBhIHBjaV9wb29sIGxpa2UgdGhpczoKK0ZyZWUgbWVtb3J5IHRoYXQgd2FzIGFsbG9jYXRlZCBmcm9tIGEgZG1hX3Bvb2wgbGlrZSB0aGlzOgogCi0JcGNpX3Bvb2xfZnJlZShwb29sLCBjcHVfYWRkciwgZG1hX2hhbmRsZSk7CisJZG1hX3Bvb2xfZnJlZShwb29sLCBjcHVfYWRkciwgZG1hX2hhbmRsZSk7CiAKLXdoZXJlIHBvb2wgaXMgd2hhdCB5b3UgcGFzc2VkIHRvIHBjaV9wb29sX2FsbG9jLCBhbmQgY3B1X2FkZHIgYW5kCi1kbWFfaGFuZGxlIGFyZSB0aGUgdmFsdWVzIHBjaV9wb29sX2FsbG9jIHJldHVybmVkLiBUaGlzIGZ1bmN0aW9uCit3aGVyZSBwb29sIGlzIHdoYXQgeW91IHBhc3NlZCB0byBkbWFfcG9vbF9hbGxvYywgYW5kIGNwdV9hZGRyIGFuZAorZG1hX2hhbmRsZSBhcmUgdGhlIHZhbHVlcyBkbWFfcG9vbF9hbGxvYyByZXR1cm5lZC4gVGhpcyBmdW5jdGlvbgogbWF5IGJlIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dC4KIAotRGVzdHJveSBhIHBjaV9wb29sIGJ5IGNhbGxpbmc6CitEZXN0cm95IGEgZG1hX3Bvb2wgYnkgY2FsbGluZzoKIAotCXBjaV9wb29sX2Rlc3Ryb3kocG9vbCk7CisJZG1hX3Bvb2xfZGVzdHJveShwb29sKTsKIAotTWFrZSBzdXJlIHlvdSd2ZSBjYWxsZWQgcGNpX3Bvb2xfZnJlZSBmb3IgYWxsIG1lbW9yeSBhbGxvY2F0ZWQKK01ha2Ugc3VyZSB5b3UndmUgY2FsbGVkIGRtYV9wb29sX2ZyZWUgZm9yIGFsbCBtZW1vcnkgYWxsb2NhdGVkCiBmcm9tIGEgcG9vbCBiZWZvcmUgeW91IGRlc3Ryb3kgdGhlIHBvb2wuIFRoaXMgZnVuY3Rpb24gbWF5IG5vdAogYmUgY2FsbGVkIGluIGludGVycnVwdCBjb250ZXh0LgogCkBAIC00MTEsMTUgKzQwNiwxNSBAQAogdGFrZSBhIERNQSBkaXJlY3Rpb24gYXJndW1lbnQsIHdoaWNoIGlzIGFuIGludGVnZXIgYW5kIHRha2VzIG9uCiBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAKLSBQQ0lfRE1BX0JJRElSRUNUSU9OQUwKLSBQQ0lfRE1BX1RPREVWSUNFCi0gUENJX0RNQV9GUk9NREVWSUNFCi0gUENJX0RNQV9OT05FCisgRE1BX0JJRElSRUNUSU9OQUwKKyBETUFfVE9fREVWSUNFCisgRE1BX0ZST01fREVWSUNFCisgRE1BX05PTkUKIAogT25lIHNob3VsZCBwcm92aWRlIHRoZSBleGFjdCBETUEgZGlyZWN0aW9uIGlmIHlvdSBrbm93IGl0LgogCi1QQ0lfRE1BX1RPREVWSUNFIG1lYW5zICJmcm9tIG1haW4gbWVtb3J5IHRvIHRoZSBQQ0kgZGV2aWNlIgotUENJX0RNQV9GUk9NREVWSUNFIG1lYW5zICJmcm9tIHRoZSBQQ0kgZGV2aWNlIHRvIG1haW4gbWVtb3J5IgorRE1BX1RPX0RFVklDRSBtZWFucyAiZnJvbSBtYWluIG1lbW9yeSB0byB0aGUgZGV2aWNlIgorRE1BX0ZST01fREVWSUNFIG1lYW5zICJmcm9tIHRoZSBkZXZpY2UgdG8gbWFpbiBtZW1vcnkiCiBJdCBpcyB0aGUgZGlyZWN0aW9uIGluIHdoaWNoIHRoZSBkYXRhIG1vdmVzIGR1cmluZyB0aGUgRE1BCiB0cmFuc2Zlci4KIApAQCAtNDI3LDEyICs0MjIsMTIgQEAKIGFzIHlvdSBwb3NzaWJseSBjYW4uCiAKIElmIHlvdSBhYnNvbHV0ZWx5IGNhbm5vdCBrbm93IHRoZSBkaXJlY3Rpb24gb2YgdGhlIERNQSB0cmFuc2ZlciwKLXNwZWNpZnkgUENJX0RNQV9CSURJUkVDVElPTkFMLiAgSXQgbWVhbnMgdGhhdCB0aGUgRE1BIGNhbiBnbyBpbgorc3BlY2lmeSBETUFfQklESVJFQ1RJT05BTC4gIEl0IG1lYW5zIHRoYXQgdGhlIERNQSBjYW4gZ28gaW4KIGVpdGhlciBkaXJlY3Rpb24uICBUaGUgcGxhdGZvcm0gZ3VhcmFudGVlcyB0aGF0IHlvdSBtYXkgbGVnYWxseQogc3BlY2lmeSB0aGlzLCBhbmQgdGhhdCBpdCB3aWxsIHdvcmssIGJ1dCB0aGlzIG1heSBiZSBhdCB0aGUKIGNvc3Qgb2YgcGVyZm9ybWFuY2UgZm9yIGV4YW1wbGUuCiAKLVRoZSB2YWx1ZSBQQ0lfRE1BX05PTkUgaXMgdG8gYmUgdXNlZCBmb3IgZGVidWdnaW5nLiAgT25lIGNhbgorVGhlIHZhbHVlIERNQV9OT05FIGlzIHRvIGJlIHVzZWQgZm9yIGRlYnVnZ2luZy4gIE9uZSBjYW4KIGhvbGQgdGhpcyBpbiBhIGRhdGEgc3RydWN0dXJlIGJlZm9yZSB5b3UgY29tZSB0byBrbm93IHRoZQogcHJlY2lzZSBkaXJlY3Rpb24sIGFuZCB0aGlzIHdpbGwgaGVscCBjYXRjaCBjYXNlcyB3aGVyZSB5b3VyCiBkaXJlY3Rpb24gdHJhY2tpbmcgbG9naWMgaGFzIGZhaWxlZCB0byBzZXQgdGhpbmdzIHVwIHByb3Blcmx5LgpAQCAtNDQyLDIxICs0MzcsMjEgQEAKIFNvbWUgcGxhdGZvcm1zIGFjdHVhbGx5IGhhdmUgYSB3cml0ZSBwZXJtaXNzaW9uIGJvb2xlYW4gd2hpY2ggRE1BCiBtYXBwaW5ncyBjYW4gYmUgbWFya2VkIHdpdGgsIG11Y2ggbGlrZSBwYWdlIHByb3RlY3Rpb25zIGluIHRoZSB1c2VyCiBwcm9ncmFtIGFkZHJlc3Mgc3BhY2UuICBTdWNoIHBsYXRmb3JtcyBjYW4gYW5kIGRvIHJlcG9ydCBlcnJvcnMgaW4gdGhlCi1rZXJuZWwgbG9ncyB3aGVuIHRoZSBQQ0kgY29udHJvbGxlciBoYXJkd2FyZSBkZXRlY3RzIHZpb2xhdGlvbiBvZiB0aGUKK2tlcm5lbCBsb2dzIHdoZW4gdGhlIERNQSBjb250cm9sbGVyIGhhcmR3YXJlIGRldGVjdHMgdmlvbGF0aW9uIG9mIHRoZQogcGVybWlzc2lvbiBzZXR0aW5nLgogCiBPbmx5IHN0cmVhbWluZyBtYXBwaW5ncyBzcGVjaWZ5IGEgZGlyZWN0aW9uLCBjb25zaXN0ZW50IG1hcHBpbmdzCiBpbXBsaWNpdGx5IGhhdmUgYSBkaXJlY3Rpb24gYXR0cmlidXRlIHNldHRpbmcgb2YKLVBDSV9ETUFfQklESVJFQ1RJT05BTC4KK0RNQV9CSURJUkVDVElPTkFMLgogCiBUaGUgU0NTSSBzdWJzeXN0ZW0gdGVsbHMgeW91IHRoZSBkaXJlY3Rpb24gdG8gdXNlIGluIHRoZQogJ3NjX2RhdGFfZGlyZWN0aW9uJyBtZW1iZXIgb2YgdGhlIFNDU0kgY29tbWFuZCB5b3VyIGRyaXZlciBpcwogd29ya2luZyBvbi4KIAogRm9yIE5ldHdvcmtpbmcgZHJpdmVycywgaXQncyBhIHJhdGhlciBzaW1wbGUgYWZmYWlyLiAgRm9yIHRyYW5zbWl0Ci1wYWNrZXRzLCBtYXAvdW5tYXAgdGhlbSB3aXRoIHRoZSBQQ0lfRE1BX1RPREVWSUNFIGRpcmVjdGlvbgorcGFja2V0cywgbWFwL3VubWFwIHRoZW0gd2l0aCB0aGUgRE1BX1RPX0RFVklDRSBkaXJlY3Rpb24KIHNwZWNpZmllci4gIEZvciByZWNlaXZlIHBhY2tldHMsIGp1c3QgdGhlIG9wcG9zaXRlLCBtYXAvdW5tYXAgdGhlbQotd2l0aCB0aGUgUENJX0RNQV9GUk9NREVWSUNFIGRpcmVjdGlvbiBzcGVjaWZpZXIuCit3aXRoIHRoZSBETUFfRlJPTV9ERVZJQ0UgZGlyZWN0aW9uIHNwZWNpZmllci4KIAogCQkgIFVzaW5nIFN0cmVhbWluZyBETUEgbWFwcGluZ3MKIApAQCAtNDY3LDQzICs0NjIsNDMgQEAKIAogVG8gbWFwIGEgc2luZ2xlIHJlZ2lvbiwgeW91IGRvOgogCi0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBteWRldi0+cGRldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmbXlfZGV2LT5kZXY7CiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOwogCXZvaWQgKmFkZHIgPSBidWZmZXItPnB0cjsKIAlzaXplX3Qgc2l6ZSA9IGJ1ZmZlci0+bGVuOwogCi0JZG1hX2hhbmRsZSA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIGFkZHIsIHNpemUsIGRpcmVjdGlvbik7CisJZG1hX2hhbmRsZSA9IGRtYV9tYXBfc2luZ2xlKGRldiwgYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKIAogYW5kIHRvIHVubWFwIGl0OgogCi0JcGNpX3VubWFwX3NpbmdsZShwZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBkaXJlY3Rpb24pOworCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBkaXJlY3Rpb24pOwogCi1Zb3Ugc2hvdWxkIGNhbGwgcGNpX3VubWFwX3NpbmdsZSB3aGVuIHRoZSBETUEgYWN0aXZpdHkgaXMgZmluaXNoZWQsIGUuZy4KK1lvdSBzaG91bGQgY2FsbCBkbWFfdW5tYXBfc2luZ2xlIHdoZW4gdGhlIERNQSBhY3Rpdml0eSBpcyBmaW5pc2hlZCwgZS5nLgogZnJvbSB0aGUgaW50ZXJydXB0IHdoaWNoIHRvbGQgeW91IHRoYXQgdGhlIERNQSB0cmFuc2ZlciBpcyBkb25lLgogCiBVc2luZyBjcHUgcG9pbnRlcnMgbGlrZSB0aGlzIGZvciBzaW5nbGUgbWFwcGluZ3MgaGFzIGEgZGlzYWR2YW50YWdlLAogeW91IGNhbm5vdCByZWZlcmVuY2UgSElHSE1FTSBtZW1vcnkgaW4gdGhpcyB3YXkuICBUaHVzLCB0aGVyZSBpcyBhCi1tYXAvdW5tYXAgaW50ZXJmYWNlIHBhaXIgYWtpbiB0byBwY2lfe21hcCx1bm1hcH1fc2luZ2xlLiAgVGhlc2UKK21hcC91bm1hcCBpbnRlcmZhY2UgcGFpciBha2luIHRvIGRtYV97bWFwLHVubWFwfV9zaW5nbGUuICBUaGVzZQogaW50ZXJmYWNlcyBkZWFsIHdpdGggcGFnZS9vZmZzZXQgcGFpcnMgaW5zdGVhZCBvZiBjcHUgcG9pbnRlcnMuCiBTcGVjaWZpY2FsbHk6CiAKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IG15ZGV2LT5wZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZteV9kZXYtPmRldjsKIAlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBidWZmZXItPnBhZ2U7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBidWZmZXItPm9mZnNldDsKIAlzaXplX3Qgc2l6ZSA9IGJ1ZmZlci0+bGVuOwogCi0JZG1hX2hhbmRsZSA9IHBjaV9tYXBfcGFnZShwZGV2LCBwYWdlLCBvZmZzZXQsIHNpemUsIGRpcmVjdGlvbik7CisJZG1hX2hhbmRsZSA9IGRtYV9tYXBfcGFnZShkZXYsIHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyZWN0aW9uKTsKIAogCS4uLgogCi0JcGNpX3VubWFwX3BhZ2UocGRldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyZWN0aW9uKTsKKwlkbWFfdW5tYXBfcGFnZShkZXYsIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbik7CiAKIEhlcmUsICJvZmZzZXQiIG1lYW5zIGJ5dGUgb2Zmc2V0IHdpdGhpbiB0aGUgZ2l2ZW4gcGFnZS4KIAogV2l0aCBzY2F0dGVybGlzdHMsIHlvdSBtYXAgYSByZWdpb24gZ2F0aGVyZWQgZnJvbSBzZXZlcmFsIHJlZ2lvbnMgYnk6CiAKLQlpbnQgaSwgY291bnQgPSBwY2lfbWFwX3NnKHBkZXYsIHNnbGlzdCwgbmVudHMsIGRpcmVjdGlvbik7CisJaW50IGksIGNvdW50ID0gZG1hX21hcF9zZyhkZXYsIHNnbGlzdCwgbmVudHMsIGRpcmVjdGlvbik7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAogCWZvcl9lYWNoX3NnKHNnbGlzdCwgc2csIGNvdW50LCBpKSB7CkBAIC01MjcsMTYgKzUyMiwxNiBAQAogCiBUbyB1bm1hcCBhIHNjYXR0ZXJsaXN0LCBqdXN0IGNhbGw6CiAKLQlwY2lfdW5tYXBfc2cocGRldiwgc2dsaXN0LCBuZW50cywgZGlyZWN0aW9uKTsKKwlkbWFfdW5tYXBfc2coZGV2LCBzZ2xpc3QsIG5lbnRzLCBkaXJlY3Rpb24pOwogCiBBZ2FpbiwgbWFrZSBzdXJlIERNQSBhY3Rpdml0eSBoYXMgYWxyZWFkeSBmaW5pc2hlZC4KIAotUExFQVNFIE5PVEU6ICBUaGUgJ25lbnRzJyBhcmd1bWVudCB0byB0aGUgcGNpX3VubWFwX3NnIGNhbGwgbXVzdCBiZQotICAgICAgICAgICAgICB0aGUgX3NhbWVfIG9uZSB5b3UgcGFzc2VkIGludG8gdGhlIHBjaV9tYXBfc2cgY2FsbCwKK1BMRUFTRSBOT1RFOiAgVGhlICduZW50cycgYXJndW1lbnQgdG8gdGhlIGRtYV91bm1hcF9zZyBjYWxsIG11c3QgYmUKKyAgICAgICAgICAgICAgdGhlIF9zYW1lXyBvbmUgeW91IHBhc3NlZCBpbnRvIHRoZSBkbWFfbWFwX3NnIGNhbGwsCiAJICAgICAgaXQgc2hvdWxkIF9OT1RfIGJlIHRoZSAnY291bnQnIHZhbHVlIF9yZXR1cm5lZF8gZnJvbSB0aGUKLSAgICAgICAgICAgICAgcGNpX21hcF9zZyBjYWxsLgorICAgICAgICAgICAgICBkbWFfbWFwX3NnIGNhbGwuCiAKLUV2ZXJ5IHBjaV9tYXBfe3NpbmdsZSxzZ30gY2FsbCBzaG91bGQgaGF2ZSBpdHMgcGNpX3VubWFwX3tzaW5nbGUsc2d9CitFdmVyeSBkbWFfbWFwX3tzaW5nbGUsc2d9IGNhbGwgc2hvdWxkIGhhdmUgaXRzIGRtYV91bm1hcF97c2luZ2xlLHNnfQogY291bnRlcnBhcnQsIGJlY2F1c2UgdGhlIGJ1cyBhZGRyZXNzIHNwYWNlIGlzIGEgc2hhcmVkIHJlc291cmNlIChhbHRob3VnaAogaW4gc29tZSBwb3J0cyB0aGUgbWFwcGluZyBpcyBwZXIgZWFjaCBCVVMgc28gbGVzcyBkZXZpY2VzIGNvbnRlbmQgZm9yIHRoZQogc2FtZSBidXMgYWRkcmVzcyBzcGFjZSkgYW5kIHlvdSBjb3VsZCByZW5kZXIgdGhlIG1hY2hpbmUgdW51c2FibGUgYnkgZWF0aW5nCkBAIC01NDcsMTQgKzU0MiwxNCBAQAogcHJvcGVybHkgaW4gb3JkZXIgZm9yIHRoZSBjcHUgYW5kIGRldmljZSB0byBzZWUgdGhlIG1vc3QgdXB0b2RhdGUgYW5kCiBjb3JyZWN0IGNvcHkgb2YgdGhlIERNQSBidWZmZXIuCiAKLVNvLCBmaXJzdGx5LCBqdXN0IG1hcCBpdCB3aXRoIHBjaV9tYXBfe3NpbmdsZSxzZ30sIGFuZCBhZnRlciBlYWNoIERNQQorU28sIGZpcnN0bHksIGp1c3QgbWFwIGl0IHdpdGggZG1hX21hcF97c2luZ2xlLHNnfSwgYW5kIGFmdGVyIGVhY2ggRE1BCiB0cmFuc2ZlciBjYWxsIGVpdGhlcjoKIAotCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShwZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBkaXJlY3Rpb24pOworCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyZWN0aW9uKTsKIAogb3I6CiAKLQlwY2lfZG1hX3N5bmNfc2dfZm9yX2NwdShwZGV2LCBzZ2xpc3QsIG5lbnRzLCBkaXJlY3Rpb24pOworCWRtYV9zeW5jX3NnX2Zvcl9jcHUoZGV2LCBzZ2xpc3QsIG5lbnRzLCBkaXJlY3Rpb24pOwogCiBhcyBhcHByb3ByaWF0ZS4KIApAQCAtNTYyLDI3ICs1NTcsMjcgQEAKIGZpbmlzaCBhY2Nlc3NpbmcgdGhlIGRhdGEgd2l0aCB0aGUgY3B1LCBhbmQgdGhlbiBiZWZvcmUgYWN0dWFsbHkKIGdpdmluZyB0aGUgYnVmZmVyIHRvIHRoZSBoYXJkd2FyZSBjYWxsIGVpdGhlcjoKIAotCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShwZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBkaXJlY3Rpb24pOworCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGRldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyZWN0aW9uKTsKIAogb3I6CiAKLQlwY2lfZG1hX3N5bmNfc2dfZm9yX2RldmljZShkZXYsIHNnbGlzdCwgbmVudHMsIGRpcmVjdGlvbik7CisJZG1hX3N5bmNfc2dfZm9yX2RldmljZShkZXYsIHNnbGlzdCwgbmVudHMsIGRpcmVjdGlvbik7CiAKIGFzIGFwcHJvcHJpYXRlLgogCiBBZnRlciB0aGUgbGFzdCBETUEgdHJhbnNmZXIgY2FsbCBvbmUgb2YgdGhlIERNQSB1bm1hcCByb3V0aW5lcwotcGNpX3VubWFwX3tzaW5nbGUsc2d9LiBJZiB5b3UgZG9uJ3QgdG91Y2ggdGhlIGRhdGEgZnJvbSB0aGUgZmlyc3QgcGNpX21hcF8qCi1jYWxsIHRpbGwgcGNpX3VubWFwXyosIHRoZW4geW91IGRvbid0IGhhdmUgdG8gY2FsbCB0aGUgcGNpX2RtYV9zeW5jXyoKK2RtYV91bm1hcF97c2luZ2xlLHNnfS4gSWYgeW91IGRvbid0IHRvdWNoIHRoZSBkYXRhIGZyb20gdGhlIGZpcnN0IGRtYV9tYXBfKgorY2FsbCB0aWxsIGRtYV91bm1hcF8qLCB0aGVuIHlvdSBkb24ndCBoYXZlIHRvIGNhbGwgdGhlIGRtYV9zeW5jXyoKIHJvdXRpbmVzIGF0IGFsbC4KIAogSGVyZSBpcyBwc2V1ZG8gY29kZSB3aGljaCBzaG93cyBhIHNpdHVhdGlvbiBpbiB3aGljaCB5b3Ugd291bGQgbmVlZAotdG8gdXNlIHRoZSBwY2lfZG1hX3N5bmNfKigpIGludGVyZmFjZXMuCit0byB1c2UgdGhlIGRtYV9zeW5jXyooKSBpbnRlcmZhY2VzLgogCiAJbXlfY2FyZF9zZXR1cF9yZWNlaXZlX2J1ZmZlcihzdHJ1Y3QgbXlfY2FyZCAqY3AsIGNoYXIgKmJ1ZmZlciwgaW50IGxlbikKIAl7CiAJCWRtYV9hZGRyX3QgbWFwcGluZzsKIAotCQltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUoY3AtPnBkZXYsIGJ1ZmZlciwgbGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQltYXBwaW5nID0gZG1hX21hcF9zaW5nbGUoY3AtPmRldiwgYnVmZmVyLCBsZW4sIERNQV9GUk9NX0RFVklDRSk7CiAKIAkJY3AtPnJ4X2J1ZiA9IGJ1ZmZlcjsKIAkJY3AtPnJ4X2xlbiA9IGxlbjsKQEAgLTYwNiwyNSArNjAxLDI1IEBACiAJCQkgKiB0aGUgRE1BIHRyYW5zZmVyIHdpdGggdGhlIENQVSBmaXJzdAogCQkJICogc28gdGhhdCB3ZSBzZWUgdXBkYXRlZCBjb250ZW50cy4KIAkJCSAqLwotCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGNwLT5wZGV2LCBjcC0+cnhfZG1hLAotCQkJCQkJICAgIGNwLT5yeF9sZW4sCi0JCQkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCZjcC0+ZGV2LCBjcC0+cnhfZG1hLAorCQkJCQkJY3AtPnJ4X2xlbiwKKwkJCQkJCURNQV9GUk9NX0RFVklDRSk7CiAKIAkJCS8qIE5vdyBpdCBpcyBzYWZlIHRvIGV4YW1pbmUgdGhlIGJ1ZmZlci4gKi8KIAkJCWhwID0gKHN0cnVjdCBteV9jYXJkX2hlYWRlciAqKSBjcC0+cnhfYnVmOwogCQkJaWYgKGhlYWRlcl9pc19vayhocCkpIHsKLQkJCQlwY2lfdW5tYXBfc2luZ2xlKGNwLT5wZGV2LCBjcC0+cnhfZG1hLCBjcC0+cnhfbGVuLAotCQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJZG1hX3VubWFwX3NpbmdsZSgmY3AtPmRldiwgY3AtPnJ4X2RtYSwgY3AtPnJ4X2xlbiwKKwkJCQkJCSBETUFfRlJPTV9ERVZJQ0UpOwogCQkJCXBhc3NfdG9fdXBwZXJfbGF5ZXJzKGNwLT5yeF9idWYpOwogCQkJCW1ha2VfYW5kX3NldHVwX25ld19yeF9idWYoY3ApOwogCQkJfSBlbHNlIHsKIAkJCQkvKiBKdXN0IHN5bmMgdGhlIGJ1ZmZlciBhbmQgZ2l2ZSBpdCBiYWNrCiAJCQkJICogdG8gdGhlIGNhcmQuCiAJCQkJICovCi0JCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGNwLT5wZGV2LAotCQkJCQkJCSAgICAgICBjcC0+cnhfZG1hLAotCQkJCQkJCSAgICAgICBjcC0+cnhfbGVuLAotCQkJCQkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKCZjcC0+ZGV2LAorCQkJCQkJCSAgIGNwLT5yeF9kbWEsCisJCQkJCQkJICAgY3AtPnJ4X2xlbiwKKwkJCQkJCQkgICBETUFfRlJPTV9ERVZJQ0UpOwogCQkJCWdpdmVfcnhfYnVmX3RvX2NhcmQoY3ApOwogCQkJfQogCQl9CkBAIC02MzQsMTkgKzYyOSwxOSBAQAogbG9uZ2VyLCBub3Igc2hvdWxkIHRoZXkgdXNlIGJ1c190b192aXJ0LiBTb21lIGRyaXZlcnMgaGF2ZSB0byBiZSBjaGFuZ2VkIGEKIGxpdHRsZSBiaXQsIGJlY2F1c2UgdGhlcmUgaXMgbm8gbG9uZ2VyIGFuIGVxdWl2YWxlbnQgdG8gYnVzX3RvX3ZpcnQgaW4gdGhlCiBkeW5hbWljIERNQSBtYXBwaW5nIHNjaGVtZSAtIHlvdSBoYXZlIHRvIGFsd2F5cyBzdG9yZSB0aGUgRE1BIGFkZHJlc3NlcwotcmV0dXJuZWQgYnkgdGhlIHBjaV9hbGxvY19jb25zaXN0ZW50LCBwY2lfcG9vbF9hbGxvYywgYW5kIHBjaV9tYXBfc2luZ2xlCi1jYWxscyAocGNpX21hcF9zZyBzdG9yZXMgdGhlbSBpbiB0aGUgc2NhdHRlcmxpc3QgaXRzZWxmIGlmIHRoZSBwbGF0Zm9ybQorcmV0dXJuZWQgYnkgdGhlIGRtYV9hbGxvY19jb2hlcmVudCwgZG1hX3Bvb2xfYWxsb2MsIGFuZCBkbWFfbWFwX3NpbmdsZQorY2FsbHMgKGRtYV9tYXBfc2cgc3RvcmVzIHRoZW0gaW4gdGhlIHNjYXR0ZXJsaXN0IGl0c2VsZiBpZiB0aGUgcGxhdGZvcm0KIHN1cHBvcnRzIGR5bmFtaWMgRE1BIG1hcHBpbmcgaW4gaGFyZHdhcmUpIGluIHlvdXIgZHJpdmVyIHN0cnVjdHVyZXMgYW5kL29yCiBpbiB0aGUgY2FyZCByZWdpc3RlcnMuCiAKLUFsbCBQQ0kgZHJpdmVycyBzaG91bGQgYmUgdXNpbmcgdGhlc2UgaW50ZXJmYWNlcyB3aXRoIG5vIGV4Y2VwdGlvbnMuCi1JdCBpcyBwbGFubmVkIHRvIGNvbXBsZXRlbHkgcmVtb3ZlIHZpcnRfdG9fYnVzKCkgYW5kIGJ1c190b192aXJ0KCkgYXMKK0FsbCBkcml2ZXJzIHNob3VsZCBiZSB1c2luZyB0aGVzZSBpbnRlcmZhY2VzIHdpdGggbm8gZXhjZXB0aW9ucy4gIEl0CitpcyBwbGFubmVkIHRvIGNvbXBsZXRlbHkgcmVtb3ZlIHZpcnRfdG9fYnVzKCkgYW5kIGJ1c190b192aXJ0KCkgYXMKIHRoZXkgYXJlIGVudGlyZWx5IGRlcHJlY2F0ZWQuICBTb21lIHBvcnRzIGFscmVhZHkgZG8gbm90IHByb3ZpZGUgdGhlc2UKIGFzIGl0IGlzIGltcG9zc2libGUgdG8gY29ycmVjdGx5IHN1cHBvcnQgdGhlbS4KIAogCQlPcHRpbWl6aW5nIFVubWFwIFN0YXRlIFNwYWNlIENvbnN1bXB0aW9uCiAKLU9uIG1hbnkgcGxhdGZvcm1zLCBwY2lfdW5tYXBfe3NpbmdsZSxwYWdlfSgpIGlzIHNpbXBseSBhIG5vcC4KK09uIG1hbnkgcGxhdGZvcm1zLCBkbWFfdW5tYXBfe3NpbmdsZSxwYWdlfSgpIGlzIHNpbXBseSBhIG5vcC4KIFRoZXJlZm9yZSwga2VlcGluZyB0cmFjayBvZiB0aGUgbWFwcGluZyBhZGRyZXNzIGFuZCBsZW5ndGggaXMgYSB3YXN0ZQogb2Ygc3BhY2UuICBJbnN0ZWFkIG9mIGZpbGxpbmcgeW91ciBkcml2ZXJzIHVwIHdpdGggaWZkZWZzIGFuZCB0aGUgbGlrZQogdG8gIndvcmsgYXJvdW5kIiB0aGlzICh3aGljaCB3b3VsZCBkZWZlYXQgdGhlIHdob2xlIHB1cnBvc2Ugb2YgYQpAQCAtNjU1LDcgKzY1MCw3IEBACiBBY3R1YWxseSwgaW5zdGVhZCBvZiBkZXNjcmliaW5nIHRoZSBtYWNyb3Mgb25lIGJ5IG9uZSwgd2UnbGwKIHRyYW5zZm9ybSBzb21lIGV4YW1wbGUgY29kZS4KIAotMSkgVXNlIERFQ0xBUkVfUENJX1VOTUFQX3tBRERSLExFTn0gaW4gc3RhdGUgc2F2aW5nIHN0cnVjdHVyZXMuCisxKSBVc2UgREVGSU5FX0RNQV9VTk1BUF97QUREUixMRU59IGluIHN0YXRlIHNhdmluZyBzdHJ1Y3R1cmVzLgogICAgRXhhbXBsZSwgYmVmb3JlOgogCiAJc3RydWN0IHJpbmdfc3RhdGUgewpAQCAtNjY4LDE0ICs2NjMsMTEgQEAKIAogCXN0cnVjdCByaW5nX3N0YXRlIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQkJREVDTEFSRV9QQ0lfVU5NQVBfQUREUihtYXBwaW5nKQotCQlERUNMQVJFX1BDSV9VTk1BUF9MRU4obGVuKQorCQlERUZJTkVfRE1BX1VOTUFQX0FERFIobWFwcGluZyk7CisJCURFRklORV9ETUFfVU5NQVBfTEVOKGxlbik7CiAJfTsKIAotICAgTk9URTogRE8gTk9UIHB1dCBhIHNlbWljb2xvbiBhdCB0aGUgZW5kIG9mIHRoZSBERUNMQVJFXyooKQotICAgICAgICAgbWFjcm8uCi0KLTIpIFVzZSBwY2lfdW5tYXBfe2FkZHIsbGVufV9zZXQgdG8gc2V0IHRoZXNlIHZhbHVlcy4KKzIpIFVzZSBkbWFfdW5tYXBfe2FkZHIsbGVufV9zZXQgdG8gc2V0IHRoZXNlIHZhbHVlcy4KICAgIEV4YW1wbGUsIGJlZm9yZToKIAogCXJpbmdwLT5tYXBwaW5nID0gRk9POwpAQCAtNjgzLDIxICs2NzUsMjEgQEAKIAogICAgYWZ0ZXI6CiAKLQlwY2lfdW5tYXBfYWRkcl9zZXQocmluZ3AsIG1hcHBpbmcsIEZPTyk7Ci0JcGNpX3VubWFwX2xlbl9zZXQocmluZ3AsIGxlbiwgQkFSKTsKKwlkbWFfdW5tYXBfYWRkcl9zZXQocmluZ3AsIG1hcHBpbmcsIEZPTyk7CisJZG1hX3VubWFwX2xlbl9zZXQocmluZ3AsIGxlbiwgQkFSKTsKIAotMykgVXNlIHBjaV91bm1hcF97YWRkcixsZW59IHRvIGFjY2VzcyB0aGVzZSB2YWx1ZXMuCiszKSBVc2UgZG1hX3VubWFwX3thZGRyLGxlbn0gdG8gYWNjZXNzIHRoZXNlIHZhbHVlcy4KICAgIEV4YW1wbGUsIGJlZm9yZToKIAotCXBjaV91bm1hcF9zaW5nbGUocGRldiwgcmluZ3AtPm1hcHBpbmcsIHJpbmdwLT5sZW4sCi0JCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlkbWFfdW5tYXBfc2luZ2xlKGRldiwgcmluZ3AtPm1hcHBpbmcsIHJpbmdwLT5sZW4sCisJCQkgRE1BX0ZST01fREVWSUNFKTsKIAogICAgYWZ0ZXI6CiAKLQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsCi0JCQkgcGNpX3VubWFwX2FkZHIocmluZ3AsIG1hcHBpbmcpLAotCQkJIHBjaV91bm1hcF9sZW4ocmluZ3AsIGxlbiksCi0JCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwlkbWFfdW5tYXBfc2luZ2xlKGRldiwKKwkJCSBkbWFfdW5tYXBfYWRkcihyaW5ncCwgbWFwcGluZyksCisJCQkgZG1hX3VubWFwX2xlbihyaW5ncCwgbGVuKSwKKwkJCSBETUFfRlJPTV9ERVZJQ0UpOwogCiBJdCByZWFsbHkgc2hvdWxkIGJlIHNlbGYtZXhwbGFuYXRvcnkuICBXZSB0cmVhdCB0aGUgQUREUiBhbmQgTEVOCiBzZXBhcmF0ZWx5LCBiZWNhdXNlIGl0IGlzIHBvc3NpYmxlIGZvciBhbiBpbXBsZW1lbnRhdGlvbiB0byBvbmx5CkBAIC03MzIsMTUgKzcyNCwxNSBAQAogRE1BIGFkZHJlc3Mgc3BhY2UgaXMgbGltaXRlZCBvbiBzb21lIGFyY2hpdGVjdHVyZXMgYW5kIGFuIGFsbG9jYXRpb24KIGZhaWx1cmUgY2FuIGJlIGRldGVybWluZWQgYnk6CiAKLS0gY2hlY2tpbmcgaWYgcGNpX2FsbG9jX2NvbnNpc3RlbnQgcmV0dXJucyBOVUxMIG9yIHBjaV9tYXBfc2cgcmV0dXJucyAwCistIGNoZWNraW5nIGlmIGRtYV9hbGxvY19jb2hlcmVudCByZXR1cm5zIE5VTEwgb3IgZG1hX21hcF9zZyByZXR1cm5zIDAKIAotLSBjaGVja2luZyB0aGUgcmV0dXJuZWQgZG1hX2FkZHJfdCBvZiBwY2lfbWFwX3NpbmdsZSBhbmQgcGNpX21hcF9wYWdlCi0gIGJ5IHVzaW5nIHBjaV9kbWFfbWFwcGluZ19lcnJvcigpOgorLSBjaGVja2luZyB0aGUgcmV0dXJuZWQgZG1hX2FkZHJfdCBvZiBkbWFfbWFwX3NpbmdsZSBhbmQgZG1hX21hcF9wYWdlCisgIGJ5IHVzaW5nIGRtYV9tYXBwaW5nX2Vycm9yKCk6CiAKIAlkbWFfYWRkcl90IGRtYV9oYW5kbGU7CiAKLQlkbWFfaGFuZGxlID0gcGNpX21hcF9zaW5nbGUocGRldiwgYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKLQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBkZXYsIGRtYV9oYW5kbGUpKSB7CisJZG1hX2hhbmRsZSA9IGRtYV9tYXBfc2luZ2xlKGRldiwgYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkbWFfaGFuZGxlKSkgewogCQkvKgogCQkgKiByZWR1Y2UgY3VycmVudCBETUEgbWFwcGluZyB1c2FnZSwKIAkJICogZGVsYXkgYW5kIHRyeSBhZ2FpbiBsYXRlciBvcgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9TdWJtaXRDaGVja2xpc3QgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdENoZWNrbGlzdAppbmRleCAxMDUzYTU2Li44OTE2Y2E0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdENoZWNrbGlzdAorKysgYi9Eb2N1bWVudGF0aW9uL1N1Ym1pdENoZWNrbGlzdApAQCAtOSwxMCArOSwxNCBAQAoga2VybmVsIHBhdGNoZXMuCiAKIAotMTogQnVpbGRzIGNsZWFubHkgd2l0aCBhcHBsaWNhYmxlIG9yIG1vZGlmaWVkIENPTkZJRyBvcHRpb25zID15LCA9bSwgYW5kCisxOiBJZiB5b3UgdXNlIGEgZmFjaWxpdHkgdGhlbiAjaW5jbHVkZSB0aGUgZmlsZSB0aGF0IGRlZmluZXMvZGVjbGFyZXMKKyAgIHRoYXQgZmFjaWxpdHkuICBEb24ndCBkZXBlbmQgb24gb3RoZXIgaGVhZGVyIGZpbGVzIHB1bGxpbmcgaW4gb25lcworICAgdGhhdCB5b3UgdXNlLgorCisyOiBCdWlsZHMgY2xlYW5seSB3aXRoIGFwcGxpY2FibGUgb3IgbW9kaWZpZWQgQ09ORklHIG9wdGlvbnMgPXksID1tLCBhbmQKICAgID1uLiAgTm8gZ2NjIHdhcm5pbmdzL2Vycm9ycywgbm8gbGlua2VyIHdhcm5pbmdzL2Vycm9ycy4KIAotMjogUGFzc2VzIGFsbG5vY29uZmlnLCBhbGxtb2Rjb25maWcKKzJiOiBQYXNzZXMgYWxsbm9jb25maWcsIGFsbG1vZGNvbmZpZwogCiAzOiBCdWlsZHMgb24gbXVsdGlwbGUgQ1BVIGFyY2hpdGVjdHVyZXMgYnkgdXNpbmcgbG9jYWwgY3Jvc3MtY29tcGlsZSB0b29scwogICAgb3Igc29tZSBvdGhlciBidWlsZCBmYXJtLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL0NQVWZyZXEudHh0IGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL0NQVWZyZXEudHh0CmluZGV4IDc2YjNhMTEuLmZhOTY4YWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9DUFVmcmVxLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvQ1BVZnJlcS50eHQKQEAgLTE0LDggKzE0LDggQEAKICBob3cgdGhlIGNsb2NrcyBhcmUgYXJyYW5nZWQuIFRoZSBmaXJzdCBpbXBsZW1lbnRhdGlvbiB1c2VkIGFzIHNpbmdsZQogIFBMTCB0byBmZWVkIHRoZSBBUk0sIG1lbW9yeSBhbmQgcGVyaXBoZXJhbHMgdmlhIGEgc2VyaWVzIG9mIGRpdmlkZXJzCiAgYW5kIG11eGVzIGFuZCB0aGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIGRvY3VtZW50ZWQgaGVyZS4gQQotIG5ld2VyIHZlcnNpb24gd2hlcmUgdGhlcmUgaXMgYSBzZXBlcmF0ZSBQTEwgYW5kIGNsb2NrIGRpdmlkZXIgZm9yIHRoZQotIEFSTSBjb3JlIGlzIGF2YWlsYWJsZSBhcyBhIHNlcGVyYXRlIGRyaXZlci4KKyBuZXdlciB2ZXJzaW9uIHdoZXJlIHRoZXJlIGlzIGEgc2VwYXJhdGUgUExMIGFuZCBjbG9jayBkaXZpZGVyIGZvciB0aGUKKyBBUk0gY29yZSBpcyBhdmFpbGFibGUgYXMgYSBzZXBhcmF0ZSBkcml2ZXIuCiAKIAogTGF5b3V0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nL092ZXJ2aWV3LnR4dCBiL0RvY3VtZW50YXRpb24vYXJtL1NhbXN1bmcvT3ZlcnZpZXcudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjY2VkMWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nL092ZXJ2aWV3LnR4dApAQCAtMCwwICsxLDg2IEBACisJCVNhbXN1bmcgQVJNIExpbnV4IE92ZXJ2aWV3CisJCT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0ludHJvZHVjdGlvbgorLS0tLS0tLS0tLS0tCisKKyAgVGhlIFNhbXN1bmcgcmFuZ2Ugb2YgQVJNIFNvQ3Mgc3BhbnMgbWFueSBzaW1pbGFyIGRldmljZXMsIGZyb20gdGhlIGluaXRpYWwKKyAgQVJNOSB0aHJvdWdoIHRvIHRoZSBuZXdlc3QgQVJNIGNvcmVzLiBUaGlzIGRvY3VtZW50IHNob3dzIGFuIG92ZXJ2aWV3IG9mCisgIHRoZSBjdXJyZW50IGtlcm5lbCBzdXBwb3J0LCBob3cgdG8gdXNlIGl0IGFuZCB3aGVyZSB0byBmaW5kIHRoZSBjb2RlCisgIHRoYXQgc3VwcG9ydHMgdGhpcy4KKworICBUaGUgY3VycmVudGx5IHN1cHBvcnRlZCBTb0NzIGFyZToKKworICAtIFMzQzI0WFg6IFNlZSBEb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvT3ZlcnZpZXcudHh0IGZvciBmdWxsIGxpc3QKKyAgLSBTM0M2NFhYOiBTM0M2NDAwIGFuZCBTM0M2NDEwCisgIC0gUzVQQzY0NDAKKworICBTNVBDMTAwIGFuZCBTNVBDMTEwIHN1cHBvcnQgaXMgY3VycmVudGx5IGJlaW5nIG1lcmdlZAorCisKK1MzQzI0WFggU3lzdGVtcworLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlcmUgaXMgc3RpbGwgZG9jdW1lbnRhdGlvbiBpbiBEb2N1bW5ldGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvIHdoaWNoCisgIGRlYWxzIHdpdGggdGhlIGFyY2hpdGVjdHVyZSBhbmQgZHJpdmVycyBzcGVjaWZpYyB0byB0aGVzZSBkZXZpY2VzLgorCisgIFNlZSBEb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvT3ZlcnZpZXcudHh0IGZvciBtb3JlIGluZm9ybWF0aW9uCisgIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFuZCBzcGVjaWZpYyBzdXBwb3J0LgorCisKK0NvbmZpZ3VyYXRpb24KKy0tLS0tLS0tLS0tLS0KKworICBBIG51bWJlciBvZiBjb25maWd1cmF0aW9ucyBhcmUgc3VwcGxpZWQsIGFzIHRoZXJlIGlzIG5vIGN1cnJlbnQgd2F5IG9mCisgIHVuaWZ5aW5nIGFsbCB0aGUgU29DcyBpbnRvIG9uZSBrZXJuZWwuCisKKyAgczVwNjQ0MF9kZWZjb25maWcgLSBTNVA2NDQwIHNwZWNpZmljIGRlZmF1bHQgY29uZmlndXJhdGlvbgorICBzNXBjMTAwX2RlZmNvbmZpZyAtIFM1UEMxMDAgc3BlY2lmaWMgZGVmYXVsdCBjb25maWd1cmF0aW9uCisKKworTGF5b3V0CistLS0tLS0KKworICBUaGUgZGlyZWN0b3J5IGxheW91dCBpcyBjdXJyZW50bHkgYmVpbmcgcmVzdHJ1Y3R1cmVkLCBhbmQgY29uc2lzdHMgb2YKKyAgc2V2ZXJhbCBwbGF0Zm9ybSBkaXJlY3RvcmllcyBhbmQgdGhlbiB0aGUgbWFjaGluZSBzcGVjaWZpYyBkaXJlY3RvcmllcworICBvZiB0aGUgQ1BVcyBiZWluZyBidWlsdCBmb3IuCisKKyAgcGxhdC1zYW1zdW5nIHByb3ZpZGVzIHRoZSBiYXNlIGZvciBhbGwgdGhlIGltcGxlbWVudGF0aW9ucywgYW5kIGlzIHRoZQorICBsYXN0IGluIHRoZSBsaW5lIG9mIGluY2x1ZGUgZGlyZWN0b3JpZXMgdGhhdCBhcmUgcHJvY2Vzc2VkIGZvciB0aGUgYnVpbGQKKyAgc3BlY2lmaWMgaW5mb3JtYXRpb24uIEl0IGNvbnRhaW5zIHRoZSBiYXNlIGNsb2NrLCBHUElPIGFuZCBkZXZpY2UgZGVmaW5pdGlvbnMKKyAgdG8gZ2V0IHRoZSBzeXN0ZW0gcnVubmluZy4KKworICBwbGF0LXMzYyBpcyB0aGUgczNjMjR4eC9zM2M2NHh4IHBsYXRmb3JtIGRpcmVjdG9yeSwgYWx0aG91Z2ggaXQgaXMgY3VycmVudGx5CisgIGludm9sdmVkIGluIG90aGVyIGJ1aWxkcyB0aGlzIHdpbGwgYmUgcGhhc2VkIG91dCBvbmNlIHRoZSByZWxldmFudCBjb2RlIGlzCisgIG1vdmVkIGVsc2V3aGVyZS4KKworICBwbGF0LXMzYzI0eHggaXMgZm9yIHMzYzI0eHggc3BlY2lmaWMgYnVpbGRzLCBzZWUgdGhlIFMzQzI0WFggZG9jcy4KKworICBwbGF0LXMzYzY0eHggaXMgZm9yIHRoZSBzM2M2NHh4IHNwZWNpZmljIGJpdHMsIHNlZSB0aGUgUzNDMjRYWCBkb2NzLgorCisgIHBsYXQtczVwIGlzIGZvciBzNXAgc3BlY2lmaWMgYnVpbGRzLCBtb3JlIHRvIGJlIGFkZGVkLgorCisKKyAgWyB0byBmaW5pc2ggXQorCisKK1BvcnQgQ29udHJpYnV0b3JzCistLS0tLS0tLS0tLS0tLS0tLQorCisgIEJlbiBEb29rcyAoQkpEKQorICBWaW5jZW50IFNhbmRlcnMKKyAgSGVyYmVydCBQb3R6bAorICBBcm5hdWQgUGF0YXJkIChSVFApCisgIFJvYyBXdQorICBLbGF1cyBGZXRzY2hlcgorICBEaW1pdHJ5IEFuZHJpYworICBTaGFubm9uIEhvbGxhbmQKKyAgR3VpbGxhdW1lIEdvdXJhdCAoTmV4VmlzaW9uKQorICBDaHJpc3RlciBXZWluaWdlbCAod2luZ2VsKSAoQWNlciBOMzApCisgIEx1Y2FzIENvcnJlaWEgVmlsbGEgUmVhbCAoUzNDMjQwMCBwb3J0KQorCisKK0RvY3VtZW50IEF1dGhvcgorLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAyMDA5LTIwMTAgQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy9jbGtzcmMtY2hhbmdlLXJlZ2lzdGVycy5hd2sgYi9Eb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nL2Nsa3NyYy1jaGFuZ2UtcmVnaXN0ZXJzLmF3awpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wYzUwMjIwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy9jbGtzcmMtY2hhbmdlLXJlZ2lzdGVycy5hd2sKQEAgLTAsMCArMSwxNjcgQEAKKyMhL3Vzci9iaW4vYXdrIC1mCisjCisjIENvcHlyaWdodCAyMDEwIEJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KKyMKKyMgUmVsZWFzZWQgdW5kZXIgR1BMdjIKKworIyBleGFtcGxlIHVzYWdlCisjIC4vY2xrc3JjLWNoYW5nZS1yZWdpc3RlcnMuYXdrIGFyY2gvYXJtL3BsYXQtczVwYzF4eC9pbmNsdWRlL3BsYXQvcmVncy1jbG9jay5oIDwgc3JjID4gZHN0CisKK2Z1bmN0aW9uIGV4dHJhY3RfdmFsdWUocykKK3sKKyAgICBlcWF0ID0gaW5kZXgocywgIj0iKQorICAgIGNvbWF0ID0gaW5kZXgocywgIiwiKQorICAgIHJldHVybiBzdWJzdHIocywgZXFhdCsyLCAoY29tYXQtZXFhdCktMikKK30KKworZnVuY3Rpb24gcmVtb3ZlX2JyYWNrZXRzKGIpCit7CisgICAgcmV0dXJuIHN1YnN0cihiLCAyLCBsZW5ndGgoYiktMikKK30KKworZnVuY3Rpb24gc3BsaXRkZWZpbmUobCwgcCkKK3sKKyAgICByID0gc3BsaXQobCwgdHApCisKKyAgICBwWzBdID0gdHBbMl0KKyAgICBwWzFdID0gcmVtb3ZlX2JyYWNrZXRzKHRwWzNdKQorfQorCitmdW5jdGlvbiBmaW5kX2xlbmd0aChmKQoreworICAgIGlmICgwKQorCXByaW50ZiAiZmluZF9sZW5ndGggIiBmICJcbiIgPiAiL2Rldi9zdGRlcnIiCisKKyAgICBpZiAoZiB+IC8weDEvKQorCXJldHVybiAxCisgICAgZWxzZSBpZiAoZiB+IC8weDMvKQorCXJldHVybiAyCisgICAgZWxzZSBpZiAoZiB+IC8weDcvKQorCXJldHVybiAzCisgICAgZWxzZSBpZiAoZiB+IC8weGYvKQorCXJldHVybiA0CisKKyAgICBwcmludGYgInVua25vd24gbGVnbnRoICIgZiAiXG4iID4gIi9kZXYvc3RkZXJyIgorICAgIGV4aXQKK30KKworZnVuY3Rpb24gZmluZF9zaGlmdChzKQoreworICAgIGlkID0gaW5kZXgocywgIjwiKQorICAgIGlmIChpZCA8PSAwKSB7CisJcHJpbnRmICJjYW5ub3QgZmluZCBzaGlmdCAiIHMgIlxuIiA+ICIvZGV2L3N0ZGVyciIKKwlleGl0CisgICAgfQorCisgICAgcmV0dXJuIHN1YnN0cihzLCBpZCsyKQorfQorCisKK0JFR0lOIHsKKyAgICBpZiAoQVJHQyA8IDIpIHsKKwlwcmludCAidG9vIGZldyBhcmd1bWVudHMiID4gIi9kZXYvc3RkZXJyIgorCWV4aXQKKyAgICB9CisKKyMgcmVhZCB0aGUgaGVhZGVyIGZpbGUgYW5kIGZpbmQgdGhlIG1hc2sgdmFsdWVzIHRoYXQgd2Ugd2lsbCBuZWVkCisjIHRvIHJlcGxhY2UgYW5kIGNyZWF0ZSBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiB2YWx1ZXMKKworICAgIHdoaWxlIChnZXRsaW5lIGxpbmUgPCBBUkdWWzFdID4gMCkgeworCWlmIChsaW5lIH4gL1wjZGVmaW5lLipfTUFTSy8gJiYKKwkgICAgIShsaW5lIH4gL1M1UEMxMDBfRVBMTF9NQVNLLykgJiYKKwkgICAgIShsaW5lIH4gL1VTQl9TSUdfTUFTSy8pKSB7CisJICAgIHNwbGl0ZGVmaW5lKGxpbmUsIGZpZWxkcykKKwkgICAgbmFtZSA9IGZpZWxkc1swXQorCSAgICBpZiAoMCkKKwkJcHJpbnRmICJNQVNLICIgbGluZSAiXG4iID4gIi9kZXYvc3RkZXJyIgorCSAgICBkbWFza1tuYW1lLDBdID0gZmluZF9sZW5ndGgoZmllbGRzWzFdKQorCSAgICBkbWFza1tuYW1lLDFdID0gZmluZF9zaGlmdChmaWVsZHNbMV0pCisJICAgIGlmICgwKQorCQlwcmludGYgIj0+ICciIG5hbWUgIicgTEVOR1RIPSIgZG1hc2tbbmFtZSwwXSAiIFNISUZUPSIgZG1hc2tbbmFtZSwxXSAiXG4iID4gIi9kZXYvc3RkZXJyIgorCX0gZWxzZSB7CisJfQorICAgIH0KKworICAgIGRlbGV0ZSBBUkdWWzFdCit9CisKKy9jbGtzcmNfY2xrLio9Lip7LyB7CisgICAgc2hpZnQ9IiIKKyAgICBtYXNrPSIiCisgICAgZGl2c2hpZnQ9IiIKKyAgICByZWdfZGl2PSIiCisgICAgcmVnX3NyYz0iIgorICAgIGluZGVudD0xCisKKyAgICBwcmludCAkMAorCisgICAgZm9yKDsgaW5kZW50ID49IDE7KSB7CisJaWYgKChnZXRsaW5lIGxpbmUpIDw9IDApIHsKKwkgICAgcHJpbnRmICJ1bmV4cGVjdGVkIGVuZCBvZiBmaWxlIiA+ICIvZGV2L3N0ZGVyciIKKwkgICAgZXhpdCAxOworCX0KKworCWlmIChsaW5lIH4gL1wuc2hpZnQvKSB7CisJICAgIHNoaWZ0ID0gZXh0cmFjdF92YWx1ZShsaW5lKQorCX0gZWxzZSBpZiAobGluZSB+IC9cLm1hc2svKSB7CisJICAgIG1hc2sgPSBleHRyYWN0X3ZhbHVlKGxpbmUpCisJfSBlbHNlIGlmIChsaW5lIH4gL1wucmVnX2RpdmlkZXIvKSB7CisJICAgIHJlZ19kaXYgPSBleHRyYWN0X3ZhbHVlKGxpbmUpCisJfSBlbHNlIGlmIChsaW5lIH4gL1wucmVnX3NvdXJjZS8pIHsKKwkgICAgcmVnX3NyYyA9IGV4dHJhY3RfdmFsdWUobGluZSkKKwl9IGVsc2UgaWYgKGxpbmUgfiAvXC5kaXZpZGVyX3NoaWZ0LykgeworCSAgICBkaXZzaGlmdCA9IGV4dHJhY3RfdmFsdWUobGluZSkKKwl9IGVsc2UgaWYgKGxpbmUgfiAvey8pIHsKKwkJaW5kZW50KysKKwkJcHJpbnQgbGluZQorCSAgICB9IGVsc2UgaWYgKGxpbmUgfiAvfS8pIHsKKwkgICAgaW5kZW50LS0KKworCSAgICBpZiAoaW5kZW50ID09IDApIHsKKwkJaWYgKDApIHsKKwkJICAgIHByaW50ZiAic2hpZnQgJyIgc2hpZnQgICAiJyA9JyIgZG1hc2tbc2hpZnQsMF0gIidcbiIgPiAiL2Rldi9zdGRlcnIiCisJCSAgICBwcmludGYgIm1hc2sgICciIG1hc2sgICAgIidcbiIgPiAiL2Rldi9zdGRlcnIiCisJCSAgICBwcmludGYgImRzaGZ0ICciIGRpdnNoaWZ0ICInXG4iID4gIi9kZXYvc3RkZXJyIgorCQkgICAgcHJpbnRmICJyZGl2ICAnIiByZWdfZGl2ICInXG4iID4gIi9kZXYvc3RkZXJyIgorCQkgICAgcHJpbnRmICJyc3JjICAnIiByZWdfc3JjICInXG4iID4gIi9kZXYvc3RkZXJyIgorCQl9CisKKwkJZ2VuZXJhdGVkID0gbWFzaworCQlzdWIocmVnX3NyYywgcmVnX2RpdiwgZ2VuZXJhdGVkKQorCisJCWlmICgwKSB7CisJCSAgICBwcmludGYgIi8qIHJzcmMgIiByZWdfc3JjICIgKi9cbiIKKwkJICAgIHByaW50ZiAiLyogcmRpdiAiIHJlZ19kaXYgIiAqL1xuIgorCQkgICAgcHJpbnRmICIvKiBzaGlmdCAiIHNoaWZ0ICIgKi9cbiIKKwkJICAgIHByaW50ZiAiLyogbWFzayAiIG1hc2sgIiAqL1xuIgorCQkgICAgcHJpbnRmICIvKiBnZW5lcmF0ZWQgIiBnZW5lcmF0ZWQgIiAqL1xuIgorCQl9CisKKwkJaWYgKHJlZ19kaXYgIT0gIiIpIHsKKwkJICAgIHByaW50ZiAiXHQucmVnX2RpdiA9IHsgIgorCQkgICAgcHJpbnRmICIucmVnID0gIiByZWdfZGl2ICIsICIKKwkJICAgIHByaW50ZiAiLnNoaWZ0ID0gIiBkbWFza1tnZW5lcmF0ZWQsMV0gIiwgIgorCQkgICAgcHJpbnRmICIuc2l6ZSA9ICIgZG1hc2tbZ2VuZXJhdGVkLDBdICIsICIKKwkJICAgIHByaW50ZiAifSxcbiIKKwkJfQorCisJCXByaW50ZiAiXHQucmVnX3NyYyA9IHsgIgorCQlwcmludGYgIi5yZWcgPSAiIHJlZ19zcmMgIiwgIgorCQlwcmludGYgIi5zaGlmdCA9ICIgZG1hc2tbbWFzaywxXSAiLCAiCisJCXByaW50ZiAiLnNpemUgPSAiIGRtYXNrW21hc2ssMF0gIiwgIgorCisJCXByaW50ZiAifSxcbiIKKworCSAgICB9CisKKwkgICAgcHJpbnQgbGluZQorCX0gZWxzZSB7CisJICAgIHByaW50IGxpbmUKKwl9CisKKwlpZiAoMCkKKwkgICAgcHJpbnRmIGluZGVudCAiOiIgbGluZSAiXG4iID4gIi9kZXYvc3RkZXJyIgorICAgIH0KK30KKworLy8gJiYgISAvY2xrc3JjX2Nsay4qPS4qey8geyBwcmludCAkMCB9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nkcm9tL2lkZS1jZCBiL0RvY3VtZW50YXRpb24vY2Ryb20vaWRlLWNkCmluZGV4IDJjNTU4Y2QuLmY0ZGM5ZGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2Ryb20vaWRlLWNkCisrKyBiL0RvY3VtZW50YXRpb24vY2Ryb20vaWRlLWNkCkBAIC0xNTksNDIgKzE1OSw3IEBACiB0byBjaGFuZ2UuICBJZiB0aGUgc2xvdCBudW1iZXIgaXMgLTEsIHRoZSBkcml2ZSBpcyB1bmxvYWRlZC4KIAogCi00LiBDb21waWxhdGlvbiBvcHRpb25zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZXJlIGFyZSBhIGZldyBhZGRpdGlvbmFsIG9wdGlvbnMgd2hpY2ggY2FuIGJlIHNldCB3aGVuIGNvbXBpbGluZyB0aGUKLWRyaXZlci4gIE1vc3QgcGVvcGxlIHNob3VsZCBub3QgbmVlZCB0byBtZXNzIHdpdGggYW55IG9mIHRoZXNlOyB0aGV5Ci1hcmUgbGlzdGVkIGhlcmUgc2ltcGx5IGZvciBjb21wbGV0ZW5lc3MuICBBIGNvbXBpbGF0aW9uIG9wdGlvbiBjYW4gYmUKLWVuYWJsZWQgYnkgYWRkaW5nIGEgbGluZSBvZiB0aGUgZm9ybSBgI2RlZmluZSA8b3B0aW9uPiAxJyB0byB0aGUgdG9wCi1vZiBpZGUtY2QuYy4gIEFsbCB0aGVzZSBvcHRpb25zIGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0LgotCi1WRVJCT1NFX0lERV9DRF9FUlJPUlMKLSAgSWYgdGhpcyBpcyBzZXQsIEFUQVBJIGVycm9yIGNvZGVzIHdpbGwgYmUgdHJhbnNsYXRlZCBpbnRvIHRleHR1YWwKLSAgZGVzY3JpcHRpb25zLiAgSW4gYWRkaXRpb24sIGEgZHVtcCBpcyBtYWRlIG9mIHRoZSBjb21tYW5kIHdoaWNoCi0gIHByb3Zva2VkIHRoZSBlcnJvci4gIFRoaXMgaXMgb2ZmIGJ5IGRlZmF1bHQgdG8gc2F2ZSB0aGUgbWVtb3J5IHVzZWQKLSAgYnkgdGhlIChzb21ld2hhdCBsb25nKSB0YWJsZSBvZiBlcnJvciBkZXNjcmlwdGlvbnMuICAKLQotU1RBTkRBUkRfQVRBUEkKLSAgSWYgdGhpcyBpcyBzZXQsIHRoZSBjb2RlIG5lZWRlZCB0byBkZWFsIHdpdGggY2VydGFpbiBkcml2ZXMgd2hpY2ggZG8KLSAgbm90IHByb3Blcmx5IGltcGxlbWVudCB0aGUgQVRBUEkgc3BlYyB3aWxsIGJlIGRpc2FibGVkLiAgSWYgeW91IGtub3cKLSAgeW91ciBkcml2ZSBpbXBsZW1lbnRzIEFUQVBJIHByb3Blcmx5LCB5b3UgY2FuIHR1cm4gdGhpcyBvbiB0byBnZXQgYQotICBzbGlnaHRseSBzbWFsbGVyIGtlcm5lbC4KLQotTk9fRE9PUl9MT0NLSU5HCi0gIElmIHRoaXMgaXMgc2V0LCB0aGUgZHJpdmVyIHdpbGwgbmV2ZXIgYXR0ZW1wdCB0byBsb2NrIHRoZSBkb29yIG9mCi0gIHRoZSBkcml2ZS4KLQotQ0RST01fTkJMT0NLU19CVUZGRVIKLSAgVGhpcyBzZXRzIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgdG8gYmUgdXNlZCBmb3IgYSBDRFJPTVJFQURBVURJTwotICBpb2N0bC4gIFRoZSBkZWZhdWx0IGlzIDguCi0KLVRFU1QKLSAgVGhpcyBjdXJyZW50bHkgZW5hYmxlcyBhbiBhZGRpdGlvbmFsIGlvY3RsIHdoaWNoIGVuYWJsZXMgYSB1c2VyLW1vZGUKLSAgcHJvZ3JhbSB0byBleGVjdXRlIGFuIGFyYml0cmFyeSBwYWNrZXQgY29tbWFuZC4gIFNlZSB0aGUgc291cmNlIGZvcgotICBkZXRhaWxzLiAgVGhpcyBzaG91bGQgYmUgbGVmdCBvZmYgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nLgotCi0KLTUuIENvbW1vbiBwcm9ibGVtcworNC4gQ29tbW9uIHByb2JsZW1zCiAtLS0tLS0tLS0tLS0tLS0tLS0KIAogVGhpcyBzZWN0aW9uIGRpc2N1c3NlcyBzb21lIGNvbW1vbiBwcm9ibGVtcyBlbmNvdW50ZXJlZCB3aGVuIHRyeWluZyB0bwpAQCAtMzcxLDcgKzMzNiw3IEBACiAgICAgZXhwZW5zZSBvZiBsb3cgc3lzdGVtIHBlcmZvcm1hbmNlLgogCiAKLTYuIGNkY2hhbmdlLmMKKzUuIGNkY2hhbmdlLmMKIC0tLS0tLS0tLS0tLS0KIAogLyoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBfZXZlbnRfbGlzdGVuZXIuYyBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBfZXZlbnRfbGlzdGVuZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzJiZmM0Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cF9ldmVudF9saXN0ZW5lci5jCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogY2dyb3VwX2V2ZW50X2xpc3RlbmVyLmMgLSBTaW1wbGUgbGlzdGVuZXIgb2YgY2dyb3VwIGV2ZW50cworICoKKyAqIENvcHlyaWdodCAoQykgS2lyaWxsIEEuIFNodXRlbW92IDxraXJpbGxAc2h1dGVtb3YubmFtZT4KKyAqLworCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxzeXMvZXZlbnRmZC5oPgorCisjZGVmaW5lIFVTQUdFX1NUUiAiVXNhZ2U6IGNncm91cF9ldmVudF9saXN0ZW5lciA8cGF0aC10by1jb250cm9sLWZpbGU+IDxhcmdzPlxuIgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisJaW50IGVmZCA9IC0xOworCWludCBjZmQgPSAtMTsKKwlpbnQgZXZlbnRfY29udHJvbCA9IC0xOworCWNoYXIgZXZlbnRfY29udHJvbF9wYXRoW1BBVEhfTUFYXTsKKwljaGFyIGxpbmVbTElORV9NQVhdOworCWludCByZXQ7CisKKwlpZiAoYXJnYyAhPSAzKSB7CisJCWZwdXRzKFVTQUdFX1NUUiwgc3RkZXJyKTsKKwkJcmV0dXJuIDE7CisJfQorCisJY2ZkID0gb3Blbihhcmd2WzFdLCBPX1JET05MWSk7CisJaWYgKGNmZCA9PSAtMSkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkNhbm5vdCBvcGVuICVzOiAlc1xuIiwgYXJndlsxXSwKKwkJCQlzdHJlcnJvcihlcnJubykpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBzbnByaW50ZihldmVudF9jb250cm9sX3BhdGgsIFBBVEhfTUFYLCAiJXMvY2dyb3VwLmV2ZW50X2NvbnRyb2wiLAorCQkJZGlybmFtZShhcmd2WzFdKSk7CisJaWYgKHJldCA+PSBQQVRIX01BWCkgeworCQlmcHV0cygiUGF0aCB0byBjZ3JvdXAuZXZlbnRfY29udHJvbCBpcyB0b28gbG9uZ1xuIiwgc3RkZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXZlbnRfY29udHJvbCA9IG9wZW4oZXZlbnRfY29udHJvbF9wYXRoLCBPX1dST05MWSk7CisJaWYgKGV2ZW50X2NvbnRyb2wgPT0gLTEpIHsKKwkJZnByaW50ZihzdGRlcnIsICJDYW5ub3Qgb3BlbiAlczogJXNcbiIsIGV2ZW50X2NvbnRyb2xfcGF0aCwKKwkJCQlzdHJlcnJvcihlcnJubykpOworCQlnb3RvIG91dDsKKwl9CisKKwllZmQgPSBldmVudGZkKDAsIDApOworCWlmIChlZmQgPT0gLTEpIHsKKwkJcGVycm9yKCJldmVudGZkKCkgZmFpbGVkIik7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IHNucHJpbnRmKGxpbmUsIExJTkVfTUFYLCAiJWQgJWQgJXMiLCBlZmQsIGNmZCwgYXJndlsyXSk7CisJaWYgKHJldCA+PSBMSU5FX01BWCkgeworCQlmcHV0cygiQXJndW1lbnRzIHN0cmluZyBpcyB0b28gbG9uZ1xuIiwgc3RkZXJyKTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gd3JpdGUoZXZlbnRfY29udHJvbCwgbGluZSwgc3RybGVuKGxpbmUpICsgMSk7CisJaWYgKHJldCA9PSAtMSkgeworCQlwZXJyb3IoIkNhbm5vdCB3cml0ZSB0byBjZ3JvdXAuZXZlbnRfY29udHJvbCIpOworCQlnb3RvIG91dDsKKwl9CisKKwl3aGlsZSAoMSkgeworCQl1aW50NjRfdCByZXN1bHQ7CisKKwkJcmV0ID0gcmVhZChlZmQsICZyZXN1bHQsIHNpemVvZihyZXN1bHQpKTsKKwkJaWYgKHJldCA9PSAtMSkgeworCQkJaWYgKGVycm5vID09IEVJTlRSKQorCQkJCWNvbnRpbnVlOworCQkJcGVycm9yKCJDYW5ub3QgcmVhZCBmcm9tIGV2ZW50ZmQiKTsKKwkJCWJyZWFrOworCQl9CisJCWFzc2VydChyZXQgPT0gc2l6ZW9mKHJlc3VsdCkpOworCisJCXJldCA9IGFjY2VzcyhldmVudF9jb250cm9sX3BhdGgsIFdfT0spOworCQlpZiAoKHJldCA9PSAtMSkgJiYgKGVycm5vID09IEVOT0VOVCkpIHsKKwkJCQlwdXRzKCJUaGUgY2dyb3VwIHNlZW1zIHRvIGhhdmUgcmVtb3ZlZC4iKTsKKwkJCQlyZXQgPSAwOworCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKHJldCA9PSAtMSkgeworCQkJcGVycm9yKCJjZ3JvdXAuZXZlbnRfY29udHJvbCAiCisJCQkJCSJpcyBub3QgYWNjZXNzYWJsZSBhbnkgbW9yZSIpOworCQkJYnJlYWs7CisJCX0KKworCQlwcmludGYoIiVzICVzOiBjcm9zc2VkXG4iLCBhcmd2WzFdLCBhcmd2WzJdKTsKKwl9CisKK291dDoKKwlpZiAoZWZkID49IDApCisJCWNsb3NlKGVmZCk7CisJaWYgKGV2ZW50X2NvbnRyb2wgPj0gMCkKKwkJY2xvc2UoZXZlbnRfY29udHJvbCk7CisJaWYgKGNmZCA+PSAwKQorCQljbG9zZShjZmQpOworCisJcmV0dXJuIChyZXQgIT0gMCk7Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQKaW5kZXggMGIzM2JmZS4uZmQ1ODhmZjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jZ3JvdXBzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY2dyb3Vwcy50eHQKQEAgLTIyLDYgKzIyLDggQEAKIDIuIFVzYWdlIEV4YW1wbGVzIGFuZCBTeW50YXgKICAgMi4xIEJhc2ljIFVzYWdlCiAgIDIuMiBBdHRhY2hpbmcgcHJvY2Vzc2VzCisgIDIuMyBNb3VudGluZyBoaWVyYXJjaGllcyBieSBuYW1lCisgIDIuNCBOb3RpZmljYXRpb24gQVBJCiAzLiBLZXJuZWwgQVBJCiAgIDMuMSBPdmVydmlldwogICAzLjIgU3luY2hyb25pemF0aW9uCkBAIC00MzQsNiArNDM2LDI1IEBACiBUaGUgbmFtZSBvZiB0aGUgc3Vic3lzdGVtIGFwcGVhcnMgYXMgcGFydCBvZiB0aGUgaGllcmFyY2h5IGRlc2NyaXB0aW9uCiBpbiAvcHJvYy9tb3VudHMgYW5kIC9wcm9jLzxwaWQ+L2Nncm91cHMuCiAKKzIuNCBOb3RpZmljYXRpb24gQVBJCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGVyZSBpcyBtZWNoYW5pc20gd2hpY2ggYWxsb3dzIHRvIGdldCBub3RpZmljYXRpb25zIGFib3V0IGNoYW5naW5nCitzdGF0dXMgb2YgYSBjZ3JvdXAuCisKK1RvIHJlZ2lzdGVyIG5ldyBub3RpZmljYXRpb24gaGFuZGxlciB5b3UgbmVlZDoKKyAtIGNyZWF0ZSBhIGZpbGUgZGVzY3JpcHRvciBmb3IgZXZlbnQgbm90aWZpY2F0aW9uIHVzaW5nIGV2ZW50ZmQoMik7CisgLSBvcGVuIGEgY29udHJvbCBmaWxlIHRvIGJlIG1vbml0b3JlZCAoZS5nLiBtZW1vcnkudXNhZ2VfaW5fYnl0ZXMpOworIC0gd3JpdGUgIjxldmVudF9mZD4gPGNvbnRyb2xfZmQ+IDxhcmdzPiIgdG8gY2dyb3VwLmV2ZW50X2NvbnRyb2wuCisgICBJbnRlcnByZXRhdGlvbiBvZiBhcmdzIGlzIGRlZmluZWQgYnkgY29udHJvbCBmaWxlIGltcGxlbWVudGF0aW9uOworCitldmVudGZkIHdpbGwgYmUgd29rZW4gdXAgYnkgY29udHJvbCBmaWxlIGltcGxlbWVudGF0aW9uIG9yIHdoZW4gdGhlCitjZ3JvdXAgaXMgcmVtb3ZlZC4KKworVG8gdW5yZWdpc3RlciBub3RpZmljYXRpb24gaGFuZGxlciBqdXN0IGNsb3NlIGV2ZW50ZmQuCisKK05PVEU6IFN1cHBvcnQgb2Ygbm90aWZpY2F0aW9ucyBzaG91bGQgYmUgaW1wbGVtZW50ZWQgZm9yIHRoZSBjb250cm9sCitmaWxlLiBTZWUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHN1YnN5c3RlbS4KIAogMy4gS2VybmVsIEFQSQogPT09PT09PT09PT09PQpAQCAtNDg4LDYgKzUwOSwxMSBAQAogLSBhZGQgYW4gZW50cnkgaW4gbGludXgvY2dyb3VwX3N1YnN5cy5oCiAtIGRlZmluZSBhIGNncm91cF9zdWJzeXMgb2JqZWN0IGNhbGxlZCA8bmFtZT5fc3Vic3lzCiAKK0lmIGEgc3Vic3lzdGVtIGNhbiBiZSBjb21waWxlZCBhcyBhIG1vZHVsZSwgaXQgc2hvdWxkIGFsc28gaGF2ZSBpbiBpdHMKK21vZHVsZSBpbml0Y2FsbCBhIGNhbGwgdG8gY2dyb3VwX2xvYWRfc3Vic3lzKCksIGFuZCBpbiBpdHMgZXhpdGNhbGwgYQorY2FsbCB0byBjZ3JvdXBfdW5sb2FkX3N1YnN5cygpLiBJdCBzaG91bGQgYWxzbyBzZXQgaXRzX3N1YnN5cy5tb2R1bGUgPQorVEhJU19NT0RVTEUgaW4gaXRzIC5jIGZpbGUuCisKIEVhY2ggc3Vic3lzdGVtIG1heSBleHBvcnQgdGhlIGZvbGxvd2luZyBtZXRob2RzLiBUaGUgb25seSBtYW5kYXRvcnkKIG1ldGhvZHMgYXJlIGNyZWF0ZS9kZXN0cm95LiBBbnkgb3RoZXJzIHRoYXQgYXJlIG51bGwgYXJlIHByZXN1bWVkIHRvCiBiZSBzdWNjZXNzZnVsIG5vLW9wcy4KQEAgLTUzNiwxMCArNTYyLDIxIEBACiB0YXNrIGlzIHBhc3NlZCwgdGhlbiBhIHN1Y2Nlc3NmdWwgcmVzdWx0IGluZGljYXRlcyB0aGF0ICphbnkqCiB1bnNwZWNpZmllZCB0YXNrIGNhbiBiZSBtb3ZlZCBpbnRvIHRoZSBjZ3JvdXAuIE5vdGUgdGhhdCB0aGlzIGlzbid0CiBjYWxsZWQgb24gYSBmb3JrLiBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIDAgKHN1Y2Nlc3MpIHRoZW4gdGhpcyBzaG91bGQKLXJlbWFpbiB2YWxpZCB3aGlsZSB0aGUgY2FsbGVyIGhvbGRzIGNncm91cF9tdXRleC4gSWYgdGhyZWFkZ3JvdXAgaXMKK3JlbWFpbiB2YWxpZCB3aGlsZSB0aGUgY2FsbGVyIGhvbGRzIGNncm91cF9tdXRleCBhbmQgaXQgaXMgZW5zdXJlZCB0aGF0IGVpdGhlcgorYXR0YWNoKCkgb3IgY2FuY2VsX2F0dGFjaCgpIHdpbGwgYmUgY2FsbGVkIGluIGZ1dHVyZS4gSWYgdGhyZWFkZ3JvdXAgaXMKIHRydWUsIHRoZW4gYSBzdWNjZXNzZnVsIHJlc3VsdCBpbmRpY2F0ZXMgdGhhdCBhbGwgdGhyZWFkcyBpbiB0aGUgZ2l2ZW4KIHRocmVhZCdzIHRocmVhZGdyb3VwIGNhbiBiZSBtb3ZlZCB0b2dldGhlci4KIAordm9pZCBjYW5jZWxfYXR0YWNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dycCwKKwkgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBib29sIHRocmVhZGdyb3VwKQorKGNncm91cF9tdXRleCBoZWxkIGJ5IGNhbGxlcikKKworQ2FsbGVkIHdoZW4gYSB0YXNrIGF0dGFjaCBvcGVyYXRpb24gaGFzIGZhaWxlZCBhZnRlciBjYW5fYXR0YWNoKCkgaGFzIHN1Y2NlZWRlZC4KK0Egc3Vic3lzdGVtIHdob3NlIGNhbl9hdHRhY2goKSBoYXMgc29tZSBzaWRlLWVmZmVjdHMgc2hvdWxkIHByb3ZpZGUgdGhpcworZnVuY3Rpb24sIHNvIHRoYXQgdGhlIHN1YnN5dGVtIGNhbiBpbXBsZW1lbnQgYSByb2xsYmFjay4gSWYgbm90LCBub3QgbmVjZXNzYXJ5LgorVGhpcyB3aWxsIGJlIGNhbGxlZCBvbmx5IGFib3V0IHN1YnN5c3RlbXMgd2hvc2UgY2FuX2F0dGFjaCgpIG9wZXJhdGlvbiBoYXZlCitzdWNjZWVkZWQuCisKIHZvaWQgYXR0YWNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgc3RydWN0IGNncm91cCAqY2dycCwKIAkgICAgc3RydWN0IGNncm91cCAqb2xkX2NncnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywKIAkgICAgYm9vbCB0aHJlYWRncm91cCkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jcHVzZXRzLnR4dCBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9jcHVzZXRzLnR4dAppbmRleCAxZDdlOTc4Li40MTYwZGY4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvY3B1c2V0cy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2NwdXNldHMudHh0CkBAIC0xNjgsMjAgKzE2OCwyMCBAQAogY29udGFpbmluZyAob24gdG9wIG9mIHRoZSBzdGFuZGFyZCBjZ3JvdXAgZmlsZXMpIHRoZSBmb2xsb3dpbmcKIGZpbGVzIGRlc2NyaWJpbmcgdGhhdCBjcHVzZXQ6CiAKLSAtIGNwdXM6IGxpc3Qgb2YgQ1BVcyBpbiB0aGF0IGNwdXNldAotIC0gbWVtczogbGlzdCBvZiBNZW1vcnkgTm9kZXMgaW4gdGhhdCBjcHVzZXQKLSAtIG1lbW9yeV9taWdyYXRlIGZsYWc6IGlmIHNldCwgbW92ZSBwYWdlcyB0byBjcHVzZXRzIG5vZGVzCi0gLSBjcHVfZXhjbHVzaXZlIGZsYWc6IGlzIGNwdSBwbGFjZW1lbnQgZXhjbHVzaXZlPwotIC0gbWVtX2V4Y2x1c2l2ZSBmbGFnOiBpcyBtZW1vcnkgcGxhY2VtZW50IGV4Y2x1c2l2ZT8KLSAtIG1lbV9oYXJkd2FsbCBmbGFnOiAgaXMgbWVtb3J5IGFsbG9jYXRpb24gaGFyZHdhbGxlZAotIC0gbWVtb3J5X3ByZXNzdXJlOiBtZWFzdXJlIG9mIGhvdyBtdWNoIHBhZ2luZyBwcmVzc3VyZSBpbiBjcHVzZXQKLSAtIG1lbW9yeV9zcHJlYWRfcGFnZSBmbGFnOiBpZiBzZXQsIHNwcmVhZCBwYWdlIGNhY2hlIGV2ZW5seSBvbiBhbGxvd2VkIG5vZGVzCi0gLSBtZW1vcnlfc3ByZWFkX3NsYWIgZmxhZzogaWYgc2V0LCBzcHJlYWQgc2xhYiBjYWNoZSBldmVubHkgb24gYWxsb3dlZCBub2RlcwotIC0gc2NoZWRfbG9hZF9iYWxhbmNlIGZsYWc6IGlmIHNldCwgbG9hZCBiYWxhbmNlIHdpdGhpbiBDUFVzIG9uIHRoYXQgY3B1c2V0Ci0gLSBzY2hlZF9yZWxheF9kb21haW5fbGV2ZWw6IHRoZSBzZWFyY2hpbmcgcmFuZ2Ugd2hlbiBtaWdyYXRpbmcgdGFza3MKKyAtIGNwdXNldC5jcHVzOiBsaXN0IG9mIENQVXMgaW4gdGhhdCBjcHVzZXQKKyAtIGNwdXNldC5tZW1zOiBsaXN0IG9mIE1lbW9yeSBOb2RlcyBpbiB0aGF0IGNwdXNldAorIC0gY3B1c2V0Lm1lbW9yeV9taWdyYXRlIGZsYWc6IGlmIHNldCwgbW92ZSBwYWdlcyB0byBjcHVzZXRzIG5vZGVzCisgLSBjcHVzZXQuY3B1X2V4Y2x1c2l2ZSBmbGFnOiBpcyBjcHUgcGxhY2VtZW50IGV4Y2x1c2l2ZT8KKyAtIGNwdXNldC5tZW1fZXhjbHVzaXZlIGZsYWc6IGlzIG1lbW9yeSBwbGFjZW1lbnQgZXhjbHVzaXZlPworIC0gY3B1c2V0Lm1lbV9oYXJkd2FsbCBmbGFnOiAgaXMgbWVtb3J5IGFsbG9jYXRpb24gaGFyZHdhbGxlZAorIC0gY3B1c2V0Lm1lbW9yeV9wcmVzc3VyZTogbWVhc3VyZSBvZiBob3cgbXVjaCBwYWdpbmcgcHJlc3N1cmUgaW4gY3B1c2V0CisgLSBjcHVzZXQubWVtb3J5X3NwcmVhZF9wYWdlIGZsYWc6IGlmIHNldCwgc3ByZWFkIHBhZ2UgY2FjaGUgZXZlbmx5IG9uIGFsbG93ZWQgbm9kZXMKKyAtIGNwdXNldC5tZW1vcnlfc3ByZWFkX3NsYWIgZmxhZzogaWYgc2V0LCBzcHJlYWQgc2xhYiBjYWNoZSBldmVubHkgb24gYWxsb3dlZCBub2RlcworIC0gY3B1c2V0LnNjaGVkX2xvYWRfYmFsYW5jZSBmbGFnOiBpZiBzZXQsIGxvYWQgYmFsYW5jZSB3aXRoaW4gQ1BVcyBvbiB0aGF0IGNwdXNldAorIC0gY3B1c2V0LnNjaGVkX3JlbGF4X2RvbWFpbl9sZXZlbDogdGhlIHNlYXJjaGluZyByYW5nZSB3aGVuIG1pZ3JhdGluZyB0YXNrcwogCiBJbiBhZGRpdGlvbiwgdGhlIHJvb3QgY3B1c2V0IG9ubHkgaGFzIHRoZSBmb2xsb3dpbmcgZmlsZToKLSAtIG1lbW9yeV9wcmVzc3VyZV9lbmFibGVkIGZsYWc6IGNvbXB1dGUgbWVtb3J5X3ByZXNzdXJlPworIC0gY3B1c2V0Lm1lbW9yeV9wcmVzc3VyZV9lbmFibGVkIGZsYWc6IGNvbXB1dGUgbWVtb3J5X3ByZXNzdXJlPwogCiBOZXcgY3B1c2V0cyBhcmUgY3JlYXRlZCB1c2luZyB0aGUgbWtkaXIgc3lzdGVtIGNhbGwgb3Igc2hlbGwKIGNvbW1hbmQuICBUaGUgcHJvcGVydGllcyBvZiBhIGNwdXNldCwgc3VjaCBhcyBpdHMgZmxhZ3MsIGFsbG93ZWQKQEAgLTIyOSw3ICsyMjksNyBAQAogYSBkaXJlY3QgYW5jZXN0b3Igb3IgZGVzY2VuZGFudCwgbWF5IHNoYXJlIGFueSBvZiB0aGUgc2FtZSBDUFVzIG9yCiBNZW1vcnkgTm9kZXMuCiAKLUEgY3B1c2V0IHRoYXQgaXMgbWVtX2V4Y2x1c2l2ZSAqb3IqIG1lbV9oYXJkd2FsbCBpcyAiaGFyZHdhbGxlZCIsCitBIGNwdXNldCB0aGF0IGlzIGNwdXNldC5tZW1fZXhjbHVzaXZlICpvciogY3B1c2V0Lm1lbV9oYXJkd2FsbCBpcyAiaGFyZHdhbGxlZCIsCiBpLmUuIGl0IHJlc3RyaWN0cyBrZXJuZWwgYWxsb2NhdGlvbnMgZm9yIHBhZ2UsIGJ1ZmZlciBhbmQgb3RoZXIgZGF0YQogY29tbW9ubHkgc2hhcmVkIGJ5IHRoZSBrZXJuZWwgYWNyb3NzIG11bHRpcGxlIHVzZXJzLiAgQWxsIGNwdXNldHMsCiB3aGV0aGVyIGhhcmR3YWxsZWQgb3Igbm90LCByZXN0cmljdCBhbGxvY2F0aW9ucyBvZiBtZW1vcnkgZm9yIHVzZXIKQEAgLTMwNCwxNSArMzA0LDE1IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFRoZXJlIGFyZSB0d28gYm9vbGVhbiBmbGFnIGZpbGVzIHBlciBjcHVzZXQgdGhhdCBjb250cm9sIHdoZXJlIHRoZQoga2VybmVsIGFsbG9jYXRlcyBwYWdlcyBmb3IgdGhlIGZpbGUgc3lzdGVtIGJ1ZmZlcnMgYW5kIHJlbGF0ZWQgaW4KLWtlcm5lbCBkYXRhIHN0cnVjdHVyZXMuICBUaGV5IGFyZSBjYWxsZWQgJ21lbW9yeV9zcHJlYWRfcGFnZScgYW5kCi0nbWVtb3J5X3NwcmVhZF9zbGFiJy4KK2tlcm5lbCBkYXRhIHN0cnVjdHVyZXMuICBUaGV5IGFyZSBjYWxsZWQgJ2NwdXNldC5tZW1vcnlfc3ByZWFkX3BhZ2UnIGFuZAorJ2NwdXNldC5tZW1vcnlfc3ByZWFkX3NsYWInLgogCi1JZiB0aGUgcGVyLWNwdXNldCBib29sZWFuIGZsYWcgZmlsZSAnbWVtb3J5X3NwcmVhZF9wYWdlJyBpcyBzZXQsIHRoZW4KK0lmIHRoZSBwZXItY3B1c2V0IGJvb2xlYW4gZmxhZyBmaWxlICdjcHVzZXQubWVtb3J5X3NwcmVhZF9wYWdlJyBpcyBzZXQsIHRoZW4KIHRoZSBrZXJuZWwgd2lsbCBzcHJlYWQgdGhlIGZpbGUgc3lzdGVtIGJ1ZmZlcnMgKHBhZ2UgY2FjaGUpIGV2ZW5seQogb3ZlciBhbGwgdGhlIG5vZGVzIHRoYXQgdGhlIGZhdWx0aW5nIHRhc2sgaXMgYWxsb3dlZCB0byB1c2UsIGluc3RlYWQKIG9mIHByZWZlcnJpbmcgdG8gcHV0IHRob3NlIHBhZ2VzIG9uIHRoZSBub2RlIHdoZXJlIHRoZSB0YXNrIGlzIHJ1bm5pbmcuCiAKLUlmIHRoZSBwZXItY3B1c2V0IGJvb2xlYW4gZmxhZyBmaWxlICdtZW1vcnlfc3ByZWFkX3NsYWInIGlzIHNldCwKK0lmIHRoZSBwZXItY3B1c2V0IGJvb2xlYW4gZmxhZyBmaWxlICdjcHVzZXQubWVtb3J5X3NwcmVhZF9zbGFiJyBpcyBzZXQsCiB0aGVuIHRoZSBrZXJuZWwgd2lsbCBzcHJlYWQgc29tZSBmaWxlIHN5c3RlbSByZWxhdGVkIHNsYWIgY2FjaGVzLAogc3VjaCBhcyBmb3IgaW5vZGVzIGFuZCBkZW50cmllcyBldmVubHkgb3ZlciBhbGwgdGhlIG5vZGVzIHRoYXQgdGhlCiBmYXVsdGluZyB0YXNrIGlzIGFsbG93ZWQgdG8gdXNlLCBpbnN0ZWFkIG9mIHByZWZlcnJpbmcgdG8gcHV0IHRob3NlCkBAIC0zMzcsMjEgKzMzNywyMSBAQAogaXMgdHVybmVkIG9mZiwgdGhlbiB0aGUgY3VycmVudGx5IHNwZWNpZmllZCBOVU1BIG1lbXBvbGljeSBvbmNlIGFnYWluCiBhcHBsaWVzIHRvIG1lbW9yeSBwYWdlIGFsbG9jYXRpb25zLgogCi1Cb3RoICdtZW1vcnlfc3ByZWFkX3BhZ2UnIGFuZCAnbWVtb3J5X3NwcmVhZF9zbGFiJyBhcmUgYm9vbGVhbiBmbGFnCitCb3RoICdjcHVzZXQubWVtb3J5X3NwcmVhZF9wYWdlJyBhbmQgJ2NwdXNldC5tZW1vcnlfc3ByZWFkX3NsYWInIGFyZSBib29sZWFuIGZsYWcKIGZpbGVzLiAgQnkgZGVmYXVsdCB0aGV5IGNvbnRhaW4gIjAiLCBtZWFuaW5nIHRoYXQgdGhlIGZlYXR1cmUgaXMgb2ZmCiBmb3IgdGhhdCBjcHVzZXQuICBJZiBhICIxIiBpcyB3cml0dGVuIHRvIHRoYXQgZmlsZSwgdGhlbiB0aGF0IHR1cm5zCiB0aGUgbmFtZWQgZmVhdHVyZSBvbi4KIAogVGhlIGltcGxlbWVudGF0aW9uIGlzIHNpbXBsZS4KIAotU2V0dGluZyB0aGUgZmxhZyAnbWVtb3J5X3NwcmVhZF9wYWdlJyB0dXJucyBvbiBhIHBlci1wcm9jZXNzIGZsYWcKK1NldHRpbmcgdGhlIGZsYWcgJ2NwdXNldC5tZW1vcnlfc3ByZWFkX3BhZ2UnIHR1cm5zIG9uIGEgcGVyLXByb2Nlc3MgZmxhZwogUEZfU1BSRUFEX1BBR0UgZm9yIGVhY2ggdGFzayB0aGF0IGlzIGluIHRoYXQgY3B1c2V0IG9yIHN1YnNlcXVlbnRseQogam9pbnMgdGhhdCBjcHVzZXQuICBUaGUgcGFnZSBhbGxvY2F0aW9uIGNhbGxzIGZvciB0aGUgcGFnZSBjYWNoZQogaXMgbW9kaWZpZWQgdG8gcGVyZm9ybSBhbiBpbmxpbmUgY2hlY2sgZm9yIHRoaXMgUEZfU1BSRUFEX1BBR0UgdGFzawogZmxhZywgYW5kIGlmIHNldCwgYSBjYWxsIHRvIGEgbmV3IHJvdXRpbmUgY3B1c2V0X21lbV9zcHJlYWRfbm9kZSgpCiByZXR1cm5zIHRoZSBub2RlIHRvIHByZWZlciBmb3IgdGhlIGFsbG9jYXRpb24uCiAKLVNpbWlsYXJseSwgc2V0dGluZyAnbWVtb3J5X3NwcmVhZF9zbGFiJyB0dXJucyBvbiB0aGUgZmxhZworU2ltaWxhcmx5LCBzZXR0aW5nICdjcHVzZXQubWVtb3J5X3NwcmVhZF9zbGFiJyB0dXJucyBvbiB0aGUgZmxhZwogUEZfU1BSRUFEX1NMQUIsIGFuZCBhcHByb3ByaWF0ZWx5IG1hcmtlZCBzbGFiIGNhY2hlcyB3aWxsIGFsbG9jYXRlCiBwYWdlcyBmcm9tIHRoZSBub2RlIHJldHVybmVkIGJ5IGNwdXNldF9tZW1fc3ByZWFkX25vZGUoKS4KIApAQCAtNDA0LDI0ICs0MDQsMjQgQEAKICAgICBzeXN0ZW0gb3ZlcmhlYWQgb24gdGhvc2UgQ1BVcywgaW5jbHVkaW5nIGF2b2lkaW5nIHRhc2sgbG9hZAogICAgIGJhbGFuY2luZyBpZiB0aGF0IGlzIG5vdCBuZWVkZWQuCiAKLVdoZW4gdGhlIHBlci1jcHVzZXQgZmxhZyAic2NoZWRfbG9hZF9iYWxhbmNlIiBpcyBlbmFibGVkICh0aGUgZGVmYXVsdAotc2V0dGluZyksIGl0IHJlcXVlc3RzIHRoYXQgYWxsIHRoZSBDUFVzIGluIHRoYXQgY3B1c2V0cyBhbGxvd2VkICdjcHVzJworV2hlbiB0aGUgcGVyLWNwdXNldCBmbGFnICJjcHVzZXQuc2NoZWRfbG9hZF9iYWxhbmNlIiBpcyBlbmFibGVkICh0aGUgZGVmYXVsdAorc2V0dGluZyksIGl0IHJlcXVlc3RzIHRoYXQgYWxsIHRoZSBDUFVzIGluIHRoYXQgY3B1c2V0cyBhbGxvd2VkICdjcHVzZXQuY3B1cycKIGJlIGNvbnRhaW5lZCBpbiBhIHNpbmdsZSBzY2hlZCBkb21haW4sIGVuc3VyaW5nIHRoYXQgbG9hZCBiYWxhbmNpbmcKIGNhbiBtb3ZlIGEgdGFzayAobm90IG90aGVyd2lzZWQgcGlubmVkLCBhcyBieSBzY2hlZF9zZXRhZmZpbml0eSkKIGZyb20gYW55IENQVSBpbiB0aGF0IGNwdXNldCB0byBhbnkgb3RoZXIuCiAKLVdoZW4gdGhlIHBlci1jcHVzZXQgZmxhZyAic2NoZWRfbG9hZF9iYWxhbmNlIiBpcyBkaXNhYmxlZCwgdGhlbiB0aGUKK1doZW4gdGhlIHBlci1jcHVzZXQgZmxhZyAiY3B1c2V0LnNjaGVkX2xvYWRfYmFsYW5jZSIgaXMgZGlzYWJsZWQsIHRoZW4gdGhlCiBzY2hlZHVsZXIgd2lsbCBhdm9pZCBsb2FkIGJhbGFuY2luZyBhY3Jvc3MgdGhlIENQVXMgaW4gdGhhdCBjcHVzZXQsCiAtLWV4Y2VwdC0tIGluIHNvIGZhciBhcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzb21lIG92ZXJsYXBwaW5nIGNwdXNldAogaGFzICJzY2hlZF9sb2FkX2JhbGFuY2UiIGVuYWJsZWQuCiAKLVNvLCBmb3IgZXhhbXBsZSwgaWYgdGhlIHRvcCBjcHVzZXQgaGFzIHRoZSBmbGFnICJzY2hlZF9sb2FkX2JhbGFuY2UiCitTbywgZm9yIGV4YW1wbGUsIGlmIHRoZSB0b3AgY3B1c2V0IGhhcyB0aGUgZmxhZyAiY3B1c2V0LnNjaGVkX2xvYWRfYmFsYW5jZSIKIGVuYWJsZWQsIHRoZW4gdGhlIHNjaGVkdWxlciB3aWxsIGhhdmUgb25lIHNjaGVkIGRvbWFpbiBjb3ZlcmluZyBhbGwKLUNQVXMsIGFuZCB0aGUgc2V0dGluZyBvZiB0aGUgInNjaGVkX2xvYWRfYmFsYW5jZSIgZmxhZyBpbiBhbnkgb3RoZXIKK0NQVXMsIGFuZCB0aGUgc2V0dGluZyBvZiB0aGUgImNwdXNldC5zY2hlZF9sb2FkX2JhbGFuY2UiIGZsYWcgaW4gYW55IG90aGVyCiBjcHVzZXRzIHdvbid0IG1hdHRlciwgYXMgd2UncmUgYWxyZWFkeSBmdWxseSBsb2FkIGJhbGFuY2luZy4KIAogVGhlcmVmb3JlIGluIHRoZSBhYm92ZSB0d28gc2l0dWF0aW9ucywgdGhlIHRvcCBjcHVzZXQgZmxhZwotInNjaGVkX2xvYWRfYmFsYW5jZSIgc2hvdWxkIGJlIGRpc2FibGVkLCBhbmQgb25seSBzb21lIG9mIHRoZSBzbWFsbGVyLAorImNwdXNldC5zY2hlZF9sb2FkX2JhbGFuY2UiIHNob3VsZCBiZSBkaXNhYmxlZCwgYW5kIG9ubHkgc29tZSBvZiB0aGUgc21hbGxlciwKIGNoaWxkIGNwdXNldHMgaGF2ZSB0aGlzIGZsYWcgZW5hYmxlZC4KIAogV2hlbiBkb2luZyB0aGlzLCB5b3UgZG9uJ3QgdXN1YWxseSB3YW50IHRvIGxlYXZlIGFueSB1bnBpbm5lZCB0YXNrcyBpbgpAQCAtNDMzLDcgKzQzMyw3IEBACiB0YXNrIHRvIHRoYXQgdW5kZXJ1c2VkIENQVS4KIAogT2YgY291cnNlLCB0YXNrcyBwaW5uZWQgdG8gYSBwYXJ0aWN1bGFyIENQVSBjYW4gYmUgbGVmdCBpbiBhIGNwdXNldAotdGhhdCBkaXNhYmxlcyAic2NoZWRfbG9hZF9iYWxhbmNlIiBhcyB0aG9zZSB0YXNrcyBhcmVuJ3QgZ29pbmcgYW55d2hlcmUKK3RoYXQgZGlzYWJsZXMgImNwdXNldC5zY2hlZF9sb2FkX2JhbGFuY2UiIGFzIHRob3NlIHRhc2tzIGFyZW4ndCBnb2luZyBhbnl3aGVyZQogZWxzZSBhbnl3YXkuCiAKIFRoZXJlIGlzIGFuIGltcGVkYW5jZSBtaXNtYXRjaCBoZXJlLCBiZXR3ZWVuIGNwdXNldHMgYW5kIHNjaGVkIGRvbWFpbnMuCkBAIC00NDMsMTkgKzQ0MywxOSBAQAogSXQgaXMgbmVjZXNzYXJ5IGZvciBzY2hlZCBkb21haW5zIHRvIGJlIGZsYXQgYmVjYXVzZSBsb2FkIGJhbGFuY2luZwogYWNyb3NzIHBhcnRpYWxseSBvdmVybGFwcGluZyBzZXRzIG9mIENQVXMgd291bGQgcmlzayB1bnN0YWJsZSBkeW5hbWljcwogdGhhdCB3b3VsZCBiZSBiZXlvbmQgb3VyIHVuZGVyc3RhbmRpbmcuICBTbyBpZiBlYWNoIG9mIHR3byBwYXJ0aWFsbHkKLW92ZXJsYXBwaW5nIGNwdXNldHMgZW5hYmxlcyB0aGUgZmxhZyAnc2NoZWRfbG9hZF9iYWxhbmNlJywgdGhlbiB3ZQorb3ZlcmxhcHBpbmcgY3B1c2V0cyBlbmFibGVzIHRoZSBmbGFnICdjcHVzZXQuc2NoZWRfbG9hZF9iYWxhbmNlJywgdGhlbiB3ZQogZm9ybSBhIHNpbmdsZSBzY2hlZCBkb21haW4gdGhhdCBpcyBhIHN1cGVyc2V0IG9mIGJvdGguICBXZSB3b24ndCBtb3ZlCiBhIHRhc2sgdG8gYSBDUFUgb3V0c2lkZSBpdCBjcHVzZXQsIGJ1dCB0aGUgc2NoZWR1bGVyIGxvYWQgYmFsYW5jaW5nCiBjb2RlIG1pZ2h0IHdhc3RlIHNvbWUgY29tcHV0ZSBjeWNsZXMgY29uc2lkZXJpbmcgdGhhdCBwb3NzaWJpbGl0eS4KIAogVGhpcyBtaXNtYXRjaCBpcyB3aHkgdGhlcmUgaXMgbm90IGEgc2ltcGxlIG9uZS10by1vbmUgcmVsYXRpb24KLWJldHdlZW4gd2hpY2ggY3B1c2V0cyBoYXZlIHRoZSBmbGFnICJzY2hlZF9sb2FkX2JhbGFuY2UiIGVuYWJsZWQsCitiZXR3ZWVuIHdoaWNoIGNwdXNldHMgaGF2ZSB0aGUgZmxhZyAiY3B1c2V0LnNjaGVkX2xvYWRfYmFsYW5jZSIgZW5hYmxlZCwKIGFuZCB0aGUgc2NoZWQgZG9tYWluIGNvbmZpZ3VyYXRpb24uICBJZiBhIGNwdXNldCBlbmFibGVzIHRoZSBmbGFnLCBpdAogd2lsbCBnZXQgYmFsYW5jaW5nIGFjcm9zcyBhbGwgaXRzIENQVXMsIGJ1dCBpZiBpdCBkaXNhYmxlcyB0aGUgZmxhZywKIGl0IHdpbGwgb25seSBiZSBhc3N1cmVkIG9mIG5vIGxvYWQgYmFsYW5jaW5nIGlmIG5vIG90aGVyIG92ZXJsYXBwaW5nCiBjcHVzZXQgZW5hYmxlcyB0aGUgZmxhZy4KIAotSWYgdHdvIGNwdXNldHMgaGF2ZSBwYXJ0aWFsbHkgb3ZlcmxhcHBpbmcgJ2NwdXMnIGFsbG93ZWQsIGFuZCBvbmx5CitJZiB0d28gY3B1c2V0cyBoYXZlIHBhcnRpYWxseSBvdmVybGFwcGluZyAnY3B1c2V0LmNwdXMnIGFsbG93ZWQsIGFuZCBvbmx5CiBvbmUgb2YgdGhlbSBoYXMgdGhpcyBmbGFnIGVuYWJsZWQsIHRoZW4gdGhlIG90aGVyIG1heSBmaW5kIGl0cwogdGFza3Mgb25seSBwYXJ0aWFsbHkgbG9hZCBiYWxhbmNlZCwganVzdCBvbiB0aGUgb3ZlcmxhcHBpbmcgQ1BVcy4KIFRoaXMgaXMganVzdCB0aGUgZ2VuZXJhbCBjYXNlIG9mIHRoZSB0b3BfY3B1c2V0IGV4YW1wbGUgZ2l2ZW4gYSBmZXcKQEAgLTQ2OCwyMyArNDY4LDIzIEBACiAxLjcuMSBzY2hlZF9sb2FkX2JhbGFuY2UgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGUgcGVyLWNwdXNldCBmbGFnICdzY2hlZF9sb2FkX2JhbGFuY2UnIGRlZmF1bHRzIHRvIGVuYWJsZWQgKGNvbnRyYXJ5CitUaGUgcGVyLWNwdXNldCBmbGFnICdjcHVzZXQuc2NoZWRfbG9hZF9iYWxhbmNlJyBkZWZhdWx0cyB0byBlbmFibGVkIChjb250cmFyeQogdG8gbW9zdCBjcHVzZXQgZmxhZ3MuKSAgV2hlbiBlbmFibGVkIGZvciBhIGNwdXNldCwgdGhlIGtlcm5lbCB3aWxsCiBlbnN1cmUgdGhhdCBpdCBjYW4gbG9hZCBiYWxhbmNlIGFjcm9zcyBhbGwgdGhlIENQVXMgaW4gdGhhdCBjcHVzZXQKIChtYWtlcyBzdXJlIHRoYXQgYWxsIHRoZSBDUFVzIGluIHRoZSBjcHVzX2FsbG93ZWQgb2YgdGhhdCBjcHVzZXQgYXJlCiBpbiB0aGUgc2FtZSBzY2hlZCBkb21haW4uKQogCi1JZiB0d28gb3ZlcmxhcHBpbmcgY3B1c2V0cyBib3RoIGhhdmUgJ3NjaGVkX2xvYWRfYmFsYW5jZScgZW5hYmxlZCwKK0lmIHR3byBvdmVybGFwcGluZyBjcHVzZXRzIGJvdGggaGF2ZSAnY3B1c2V0LnNjaGVkX2xvYWRfYmFsYW5jZScgZW5hYmxlZCwKIHRoZW4gdGhleSB3aWxsIGJlIChtdXN0IGJlKSBib3RoIGluIHRoZSBzYW1lIHNjaGVkIGRvbWFpbi4KIAotSWYsIGFzIGlzIHRoZSBkZWZhdWx0LCB0aGUgdG9wIGNwdXNldCBoYXMgJ3NjaGVkX2xvYWRfYmFsYW5jZScgZW5hYmxlZCwKK0lmLCBhcyBpcyB0aGUgZGVmYXVsdCwgdGhlIHRvcCBjcHVzZXQgaGFzICdjcHVzZXQuc2NoZWRfbG9hZF9iYWxhbmNlJyBlbmFibGVkLAogdGhlbiBieSB0aGUgYWJvdmUgdGhhdCBtZWFucyB0aGVyZSBpcyBhIHNpbmdsZSBzY2hlZCBkb21haW4gY292ZXJpbmcKIHRoZSB3aG9sZSBzeXN0ZW0sIHJlZ2FyZGxlc3Mgb2YgYW55IG90aGVyIGNwdXNldCBzZXR0aW5ncy4KIAogVGhlIGtlcm5lbCBjb21taXRzIHRvIHVzZXIgc3BhY2UgdGhhdCBpdCB3aWxsIGF2b2lkIGxvYWQgYmFsYW5jaW5nCiB3aGVyZSBpdCBjYW4uICBJdCB3aWxsIHBpY2sgYXMgZmluZSBhIGdyYW51bGFyaXR5IHBhcnRpdGlvbiBvZiBzY2hlZAogZG9tYWlucyBhcyBpdCBjYW4gd2hpbGUgc3RpbGwgcHJvdmlkaW5nIGxvYWQgYmFsYW5jaW5nIGZvciBhbnkgc2V0Ci1vZiBDUFVzIGFsbG93ZWQgdG8gYSBjcHVzZXQgaGF2aW5nICdzY2hlZF9sb2FkX2JhbGFuY2UnIGVuYWJsZWQuCitvZiBDUFVzIGFsbG93ZWQgdG8gYSBjcHVzZXQgaGF2aW5nICdjcHVzZXQuc2NoZWRfbG9hZF9iYWxhbmNlJyBlbmFibGVkLgogCiBUaGUgaW50ZXJuYWwga2VybmVsIGNwdXNldCB0byBzY2hlZHVsZXIgaW50ZXJmYWNlIHBhc3NlcyBmcm9tIHRoZQogY3B1c2V0IGNvZGUgdG8gdGhlIHNjaGVkdWxlciBjb2RlIGEgcGFydGl0aW9uIG9mIHRoZSBsb2FkIGJhbGFuY2VkCkBAIC00OTUsOSArNDk1LDkgQEAKIFRoZSBjcHVzZXQgY29kZSBidWlsZHMgYSBuZXcgc3VjaCBwYXJ0aXRpb24gYW5kIHBhc3NlcyBpdCB0byB0aGUKIHNjaGVkdWxlciBzY2hlZCBkb21haW4gc2V0dXAgY29kZSwgdG8gaGF2ZSB0aGUgc2NoZWQgZG9tYWlucyByZWJ1aWx0CiBhcyBuZWNlc3NhcnksIHdoZW5ldmVyOgotIC0gdGhlICdzY2hlZF9sb2FkX2JhbGFuY2UnIGZsYWcgb2YgYSBjcHVzZXQgd2l0aCBub24tZW1wdHkgQ1BVcyBjaGFuZ2VzLAorIC0gdGhlICdjcHVzZXQuc2NoZWRfbG9hZF9iYWxhbmNlJyBmbGFnIG9mIGEgY3B1c2V0IHdpdGggbm9uLWVtcHR5IENQVXMgY2hhbmdlcywKICAtIG9yIENQVXMgY29tZSBvciBnbyBmcm9tIGEgY3B1c2V0IHdpdGggdGhpcyBmbGFnIGVuYWJsZWQsCi0gLSBvciAnc2NoZWRfcmVsYXhfZG9tYWluX2xldmVsJyB2YWx1ZSBvZiBhIGNwdXNldCB3aXRoIG5vbi1lbXB0eSBDUFVzCisgLSBvciAnY3B1c2V0LnNjaGVkX3JlbGF4X2RvbWFpbl9sZXZlbCcgdmFsdWUgb2YgYSBjcHVzZXQgd2l0aCBub24tZW1wdHkgQ1BVcwogICAgYW5kIHdpdGggdGhpcyBmbGFnIGVuYWJsZWQgY2hhbmdlcywKICAtIG9yIGEgY3B1c2V0IHdpdGggbm9uLWVtcHR5IENQVXMgYW5kIHdpdGggdGhpcyBmbGFnIGVuYWJsZWQgaXMgcmVtb3ZlZCwKICAtIG9yIGEgY3B1IGlzIG9mZmxpbmVkL29ubGluZWQuCkBAIC01NDIsNyArNTQyLDcgQEAKIG9uIHRoZSBuZXh0IHRpY2suICBGb3Igc29tZSBhcHBsaWNhdGlvbnMgaW4gc3BlY2lhbCBzaXR1YXRpb24sIHdhaXRpbmcKIDEgdGljayBtYXkgYmUgdG9vIGxvbmcuCiAKLVRoZSAnc2NoZWRfcmVsYXhfZG9tYWluX2xldmVsJyBmaWxlIGFsbG93cyB5b3UgdG8gcmVxdWVzdCBjaGFuZ2luZworVGhlICdjcHVzZXQuc2NoZWRfcmVsYXhfZG9tYWluX2xldmVsJyBmaWxlIGFsbG93cyB5b3UgdG8gcmVxdWVzdCBjaGFuZ2luZwogdGhpcyBzZWFyY2hpbmcgcmFuZ2UgYXMgeW91IGxpa2UuICBUaGlzIGZpbGUgdGFrZXMgaW50IHZhbHVlIHdoaWNoCiBpbmRpY2F0ZXMgc2l6ZSBvZiBzZWFyY2hpbmcgcmFuZ2UgaW4gbGV2ZWxzIGlkZWFsbHkgYXMgZm9sbG93cywKIG90aGVyd2lzZSBpbml0aWFsIHZhbHVlIC0xIHRoYXQgaW5kaWNhdGVzIHRoZSBjcHVzZXQgaGFzIG5vIHJlcXVlc3QuCkBAIC01NTksOCArNTU5LDggQEAKIGNhbiBiZSBjaGFuZ2VkIHVzaW5nIHRoZSByZWxheF9kb21haW5fbGV2ZWw9IGJvb3QgcGFyYW1ldGVyLgogCiBUaGlzIGZpbGUgaXMgcGVyLWNwdXNldCBhbmQgYWZmZWN0IHRoZSBzY2hlZCBkb21haW4gd2hlcmUgdGhlIGNwdXNldAotYmVsb25ncyB0by4gIFRoZXJlZm9yZSBpZiB0aGUgZmxhZyAnc2NoZWRfbG9hZF9iYWxhbmNlJyBvZiBhIGNwdXNldAotaXMgZGlzYWJsZWQsIHRoZW4gJ3NjaGVkX3JlbGF4X2RvbWFpbl9sZXZlbCcgaGF2ZSBubyBlZmZlY3Qgc2luY2UKK2JlbG9uZ3MgdG8uICBUaGVyZWZvcmUgaWYgdGhlIGZsYWcgJ2NwdXNldC5zY2hlZF9sb2FkX2JhbGFuY2UnIG9mIGEgY3B1c2V0CitpcyBkaXNhYmxlZCwgdGhlbiAnY3B1c2V0LnNjaGVkX3JlbGF4X2RvbWFpbl9sZXZlbCcgaGF2ZSBubyBlZmZlY3Qgc2luY2UKIHRoZXJlIGlzIG5vIHNjaGVkIGRvbWFpbiBiZWxvbmdpbmcgdGhlIGNwdXNldC4KIAogSWYgbXVsdGlwbGUgY3B1c2V0cyBhcmUgb3ZlcmxhcHBpbmcgYW5kIGhlbmNlIHRoZXkgZm9ybSBhIHNpbmdsZSBzY2hlZApAQCAtNjA3LDkgKzYwNyw5IEBACiBtZW1vcnkgcGxhY2VtZW50LCBhcyBhYm92ZSwgdGhlIG5leHQgdGltZSB0aGF0IHRoZSBrZXJuZWwgYXR0ZW1wdHMKIHRvIGFsbG9jYXRlIGEgcGFnZSBvZiBtZW1vcnkgZm9yIHRoYXQgdGFzay4KIAotSWYgYSBjcHVzZXQgaGFzIGl0cyAnY3B1cycgbW9kaWZpZWQsIHRoZW4gZWFjaCB0YXNrIGluIHRoYXQgY3B1c2V0CitJZiBhIGNwdXNldCBoYXMgaXRzICdjcHVzZXQuY3B1cycgbW9kaWZpZWQsIHRoZW4gZWFjaCB0YXNrIGluIHRoYXQgY3B1c2V0CiB3aWxsIGhhdmUgaXRzIGFsbG93ZWQgQ1BVIHBsYWNlbWVudCBjaGFuZ2VkIGltbWVkaWF0ZWx5LiAgU2ltaWxhcmx5LAotaWYgYSB0YXNrcyBwaWQgaXMgd3JpdHRlbiB0byBhbm90aGVyIGNwdXNldHMgJ3Rhc2tzJyBmaWxlLCB0aGVuIGl0cworaWYgYSB0YXNrcyBwaWQgaXMgd3JpdHRlbiB0byBhbm90aGVyIGNwdXNldHMgJ2NwdXNldC50YXNrcycgZmlsZSwgdGhlbiBpdHMKIGFsbG93ZWQgQ1BVIHBsYWNlbWVudCBpcyBjaGFuZ2VkIGltbWVkaWF0ZWx5LiAgSWYgc3VjaCBhIHRhc2sgaGFkIGJlZW4KIGJvdW5kIHRvIHNvbWUgc3Vic2V0IG9mIGl0cyBjcHVzZXQgdXNpbmcgdGhlIHNjaGVkX3NldGFmZmluaXR5KCkgY2FsbCwKIHRoZSB0YXNrIHdpbGwgYmUgYWxsb3dlZCB0byBydW4gb24gYW55IENQVSBhbGxvd2VkIGluIGl0cyBuZXcgY3B1c2V0LApAQCAtNjIyLDggKzYyMiw4IEBACiBOb3JtYWxseSwgb25jZSBhIHBhZ2UgaXMgYWxsb2NhdGVkIChnaXZlbiBhIHBoeXNpY2FsIHBhZ2UKIG9mIG1haW4gbWVtb3J5KSB0aGVuIHRoYXQgcGFnZSBzdGF5cyBvbiB3aGF0ZXZlciBub2RlIGl0CiB3YXMgYWxsb2NhdGVkLCBzbyBsb25nIGFzIGl0IHJlbWFpbnMgYWxsb2NhdGVkLCBldmVuIGlmIHRoZQotY3B1c2V0cyBtZW1vcnkgcGxhY2VtZW50IHBvbGljeSAnbWVtcycgc3Vic2VxdWVudGx5IGNoYW5nZXMuCi1JZiB0aGUgY3B1c2V0IGZsYWcgZmlsZSAnbWVtb3J5X21pZ3JhdGUnIGlzIHNldCB0cnVlLCB0aGVuIHdoZW4KK2NwdXNldHMgbWVtb3J5IHBsYWNlbWVudCBwb2xpY3kgJ2NwdXNldC5tZW1zJyBzdWJzZXF1ZW50bHkgY2hhbmdlcy4KK0lmIHRoZSBjcHVzZXQgZmxhZyBmaWxlICdjcHVzZXQubWVtb3J5X21pZ3JhdGUnIGlzIHNldCB0cnVlLCB0aGVuIHdoZW4KIHRhc2tzIGFyZSBhdHRhY2hlZCB0byB0aGF0IGNwdXNldCwgYW55IHBhZ2VzIHRoYXQgdGFzayBoYWQKIGFsbG9jYXRlZCB0byBpdCBvbiBub2RlcyBpbiBpdHMgcHJldmlvdXMgY3B1c2V0IGFyZSBtaWdyYXRlZAogdG8gdGhlIHRhc2tzIG5ldyBjcHVzZXQuIFRoZSByZWxhdGl2ZSBwbGFjZW1lbnQgb2YgdGhlIHBhZ2Ugd2l0aGluCkBAIC02MzEsMTIgKzYzMSwxMiBAQAogRm9yIGV4YW1wbGUgaWYgdGhlIHBhZ2Ugd2FzIG9uIHRoZSBzZWNvbmQgdmFsaWQgbm9kZSBvZiB0aGUgcHJpb3IgY3B1c2V0CiB0aGVuIHRoZSBwYWdlIHdpbGwgYmUgcGxhY2VkIG9uIHRoZSBzZWNvbmQgdmFsaWQgbm9kZSBvZiB0aGUgbmV3IGNwdXNldC4KIAotQWxzbyBpZiAnbWVtb3J5X21pZ3JhdGUnIGlzIHNldCB0cnVlLCB0aGVuIGlmIHRoYXQgY3B1c2V0cwotJ21lbXMnIGZpbGUgaXMgbW9kaWZpZWQsIHBhZ2VzIGFsbG9jYXRlZCB0byB0YXNrcyBpbiB0aGF0Ci1jcHVzZXQsIHRoYXQgd2VyZSBvbiBub2RlcyBpbiB0aGUgcHJldmlvdXMgc2V0dGluZyBvZiAnbWVtcycsCitBbHNvIGlmICdjcHVzZXQubWVtb3J5X21pZ3JhdGUnIGlzIHNldCB0cnVlLCB0aGVuIGlmIHRoYXQgY3B1c2V0cworJ2NwdXNldC5tZW1zJyBmaWxlIGlzIG1vZGlmaWVkLCBwYWdlcyBhbGxvY2F0ZWQgdG8gdGFza3MgaW4gdGhhdAorY3B1c2V0LCB0aGF0IHdlcmUgb24gbm9kZXMgaW4gdGhlIHByZXZpb3VzIHNldHRpbmcgb2YgJ2NwdXNldC5tZW1zJywKIHdpbGwgYmUgbW92ZWQgdG8gbm9kZXMgaW4gdGhlIG5ldyBzZXR0aW5nIG9mICdtZW1zLicKIFBhZ2VzIHRoYXQgd2VyZSBub3QgaW4gdGhlIHRhc2tzIHByaW9yIGNwdXNldCwgb3IgaW4gdGhlIGNwdXNldHMKLXByaW9yICdtZW1zJyBzZXR0aW5nLCB3aWxsIG5vdCBiZSBtb3ZlZC4KK3ByaW9yICdjcHVzZXQubWVtcycgc2V0dGluZywgd2lsbCBub3QgYmUgbW92ZWQuCiAKIFRoZXJlIGlzIGFuIGV4Y2VwdGlvbiB0byB0aGUgYWJvdmUuICBJZiBob3RwbHVnIGZ1bmN0aW9uYWxpdHkgaXMgdXNlZAogdG8gcmVtb3ZlIGFsbCB0aGUgQ1BVcyB0aGF0IGFyZSBjdXJyZW50bHkgYXNzaWduZWQgdG8gYSBjcHVzZXQsCkBAIC02NzgsOCArNjc4LDggQEAKICAgY2QgL2Rldi9jcHVzZXQKICAgbWtkaXIgQ2hhcmxpZQogICBjZCBDaGFybGllCi0gIC9iaW4vZWNobyAyLTMgPiBjcHVzCi0gIC9iaW4vZWNobyAxID4gbWVtcworICAvYmluL2VjaG8gMi0zID4gY3B1c2V0LmNwdXMKKyAgL2Jpbi9lY2hvIDEgPiBjcHVzZXQubWVtcwogICAvYmluL2VjaG8gJCQgPiB0YXNrcwogICBzaAogICAjIFRoZSBzdWJzaGVsbCAnc2gnIGlzIG5vdyBydW5uaW5nIGluIGNwdXNldCBDaGFybGllCkBAIC03MjUsMTAgKzcyNSwxMyBAQAogCiBJbiB0aGlzIGRpcmVjdG9yeSB5b3UgY2FuIGZpbmQgc2V2ZXJhbCBmaWxlczoKICMgbHMKLWNwdV9leGNsdXNpdmUgIG1lbW9yeV9taWdyYXRlICAgICAgbWVtcyAgICAgICAgICAgICAgICAgICAgICB0YXNrcwotY3B1cyAgICAgICAgICAgbWVtb3J5X3ByZXNzdXJlICAgICBub3RpZnlfb25fcmVsZWFzZQotbWVtX2V4Y2x1c2l2ZSAgbWVtb3J5X3NwcmVhZF9wYWdlICBzY2hlZF9sb2FkX2JhbGFuY2UKLW1lbV9oYXJkd2FsbCAgIG1lbW9yeV9zcHJlYWRfc2xhYiAgc2NoZWRfcmVsYXhfZG9tYWluX2xldmVsCitjcHVzZXQuY3B1X2V4Y2x1c2l2ZSAgICAgICBjcHVzZXQubWVtb3J5X3NwcmVhZF9zbGFiCitjcHVzZXQuY3B1cyAgICAgICAgICAgICAgICBjcHVzZXQubWVtcworY3B1c2V0Lm1lbV9leGNsdXNpdmUgICAgICAgY3B1c2V0LnNjaGVkX2xvYWRfYmFsYW5jZQorY3B1c2V0Lm1lbV9oYXJkd2FsbCAgICAgICAgY3B1c2V0LnNjaGVkX3JlbGF4X2RvbWFpbl9sZXZlbAorY3B1c2V0Lm1lbW9yeV9taWdyYXRlICAgICAgbm90aWZ5X29uX3JlbGVhc2UKK2NwdXNldC5tZW1vcnlfcHJlc3N1cmUgICAgIHRhc2tzCitjcHVzZXQubWVtb3J5X3NwcmVhZF9wYWdlCiAKIFJlYWRpbmcgdGhlbSB3aWxsIGdpdmUgeW91IGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdGF0ZSBvZiB0aGlzIGNwdXNldDoKIHRoZSBDUFVzIGFuZCBNZW1vcnkgTm9kZXMgaXQgY2FuIHVzZSwgdGhlIHByb2Nlc3NlcyB0aGF0IGFyZSB1c2luZwpAQCAtNzM2LDEzICs3MzksMTMgQEAKIHRoZSBjcHVzZXQuCiAKIFNldCBzb21lIGZsYWdzOgotIyAvYmluL2VjaG8gMSA+IGNwdV9leGNsdXNpdmUKKyMgL2Jpbi9lY2hvIDEgPiBjcHVzZXQuY3B1X2V4Y2x1c2l2ZQogCiBBZGQgc29tZSBjcHVzOgotIyAvYmluL2VjaG8gMC03ID4gY3B1cworIyAvYmluL2VjaG8gMC03ID4gY3B1c2V0LmNwdXMKIAogQWRkIHNvbWUgbWVtczoKLSMgL2Jpbi9lY2hvIDAtNyA+IG1lbXMKKyMgL2Jpbi9lY2hvIDAtNyA+IGNwdXNldC5tZW1zCiAKIE5vdyBhdHRhY2ggeW91ciBzaGVsbCB0byB0aGlzIGNwdXNldDoKICMgL2Jpbi9lY2hvICQkID4gdGFza3MKQEAgLTc3NCwyOCArNzc3LDI4IEBACiBUaGlzIGlzIHRoZSBzeW50YXggdG8gdXNlIHdoZW4gd3JpdGluZyBpbiB0aGUgY3B1cyBvciBtZW1zIGZpbGVzCiBpbiBjcHVzZXQgZGlyZWN0b3JpZXM6CiAKLSMgL2Jpbi9lY2hvIDEtNCA+IGNwdXMJCS0+IHNldCBjcHVzIGxpc3QgdG8gY3B1cyAxLDIsMyw0Ci0jIC9iaW4vZWNobyAxLDIsMyw0ID4gY3B1cwktPiBzZXQgY3B1cyBsaXN0IHRvIGNwdXMgMSwyLDMsNAorIyAvYmluL2VjaG8gMS00ID4gY3B1c2V0LmNwdXMJCS0+IHNldCBjcHVzIGxpc3QgdG8gY3B1cyAxLDIsMyw0CisjIC9iaW4vZWNobyAxLDIsMyw0ID4gY3B1c2V0LmNwdXMJLT4gc2V0IGNwdXMgbGlzdCB0byBjcHVzIDEsMiwzLDQKIAogVG8gYWRkIGEgQ1BVIHRvIGEgY3B1c2V0LCB3cml0ZSB0aGUgbmV3IGxpc3Qgb2YgQ1BVcyBpbmNsdWRpbmcgdGhlCiBDUFUgdG8gYmUgYWRkZWQuIFRvIGFkZCA2IHRvIHRoZSBhYm92ZSBjcHVzZXQ6CiAKLSMgL2Jpbi9lY2hvIDEtNCw2ID4gY3B1cwktPiBzZXQgY3B1cyBsaXN0IHRvIGNwdXMgMSwyLDMsNCw2CisjIC9iaW4vZWNobyAxLTQsNiA+IGNwdXNldC5jcHVzCS0+IHNldCBjcHVzIGxpc3QgdG8gY3B1cyAxLDIsMyw0LDYKIAogU2ltaWxhcmx5IHRvIHJlbW92ZSBhIENQVSBmcm9tIGEgY3B1c2V0LCB3cml0ZSB0aGUgbmV3IGxpc3Qgb2YgQ1BVcwogd2l0aG91dCB0aGUgQ1BVIHRvIGJlIHJlbW92ZWQuCiAKIFRvIHJlbW92ZSBhbGwgdGhlIENQVXM6CiAKLSMgL2Jpbi9lY2hvICIiID4gY3B1cwkJLT4gY2xlYXIgY3B1cyBsaXN0CisjIC9iaW4vZWNobyAiIiA+IGNwdXNldC5jcHVzCQktPiBjbGVhciBjcHVzIGxpc3QKIAogMi4zIFNldHRpbmcgZmxhZ3MKIC0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSBzeW50YXggaXMgdmVyeSBzaW1wbGU6CiAKLSMgL2Jpbi9lY2hvIDEgPiBjcHVfZXhjbHVzaXZlIAktPiBzZXQgZmxhZyAnY3B1X2V4Y2x1c2l2ZScKLSMgL2Jpbi9lY2hvIDAgPiBjcHVfZXhjbHVzaXZlIAktPiB1bnNldCBmbGFnICdjcHVfZXhjbHVzaXZlJworIyAvYmluL2VjaG8gMSA+IGNwdXNldC5jcHVfZXhjbHVzaXZlIAktPiBzZXQgZmxhZyAnY3B1c2V0LmNwdV9leGNsdXNpdmUnCisjIC9iaW4vZWNobyAwID4gY3B1c2V0LmNwdV9leGNsdXNpdmUgCS0+IHVuc2V0IGZsYWcgJ2NwdXNldC5jcHVfZXhjbHVzaXZlJwogCiAyLjQgQXR0YWNoaW5nIHByb2Nlc3NlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1jZ190ZXN0LnR4dCBiL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1jZ190ZXN0LnR4dAppbmRleCA3MmRiODllLi5mN2Y2OGIyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Nncm91cHMvbWVtY2dfdGVzdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbWNnX3Rlc3QudHh0CkBAIC0xLDYgKzEsNiBAQAogTWVtb3J5IFJlc291cmNlIENvbnRyb2xsZXIoTWVtY2cpICBJbXBsZW1lbnRhdGlvbiBNZW1vLgotTGFzdCBVcGRhdGVkOiAyMDA5LzEvMjAKLUJhc2UgS2VybmVsIFZlcnNpb246IGJhc2VkIG9uIDIuNi4yOS1yYzIuCitMYXN0IFVwZGF0ZWQ6IDIwMTAvMgorQmFzZSBLZXJuZWwgVmVyc2lvbjogYmFzZWQgb24gMi42LjMzLXJjNy1tbShjYW5kaWRhdGUgZm9yIDM0KS4KIAogQmVjYXVzZSBWTSBpcyBnZXR0aW5nIGNvbXBsZXggKG9uZSBvZiByZWFzb25zIGlzIG1lbWNnLi4uKSwgbWVtY2cncyBiZWhhdmlvcgogaXMgY29tcGxleC4gVGhpcyBpcyBhIGRvY3VtZW50IGZvciBtZW1jZydzIGludGVybmFsIGJlaGF2aW9yLgpAQCAtMzM3LDcgKzMzNyw3IEBACiAJcmFjZSBhbmQgbG9jayBkZXBlbmRlbmN5IHdpdGggb3RoZXIgY2dyb3VwIHN1YnN5c3RlbXMuCiAKIAlleGFtcGxlKQotCSMgbW91bnQgLXQgY2dyb3VwIG5vbmUgL2Nncm91cCAtdCBjcHVzZXQsbWVtb3J5LGNwdSxkZXZpY2VzCisJIyBtb3VudCAtdCBjZ3JvdXAgbm9uZSAvY2dyb3VwIC1vIGNwdXNldCxtZW1vcnksY3B1LGRldmljZXMKIAogCWFuZCBkbyB0YXNrIG1vdmUsIG1rZGlyLCBybWRpciBldGMuLi51bmRlciB0aGlzLgogCkBAIC0zNDgsNyArMzQ4LDcgQEAKIAogCUZvciBleGFtcGxlLCB0ZXN0IGxpa2UgZm9sbG93aW5nIGlzIGdvb2QuCiAJKFNoZWxsLUEpCi0JIyBtb3VudCAtdCBjZ3JvdXAgbm9uZSAvY2dyb3VwIC10IG1lbW9yeQorCSMgbW91bnQgLXQgY2dyb3VwIG5vbmUgL2Nncm91cCAtbyBtZW1vcnkKIAkjIG1rZGlyIC9jZ3JvdXAvdGVzdAogCSMgZWNobyA0ME0gPiAvY2dyb3VwL3Rlc3QvbWVtb3J5LmxpbWl0X2luX2J5dGVzCiAJIyBlY2hvIDAgPiAvY2dyb3VwL3Rlc3QvdGFza3MKQEAgLTM3OCwzICszNzgsNDIgQEAKIAkjZWNobyA1ME0gPiBtZW1vcnkubGltaXRfaW5fYnl0ZXMKIAkjZWNobyA1ME0gPiBtZW1vcnkubWVtc3cubGltaXRfaW5fYnl0ZXMKIAlydW4gNTFNIG9mIG1hbGxvYworCisgOS45IE1vdmUgY2hhcmdlcyBhdCB0YXNrIG1pZ3JhdGlvbgorCUNoYXJnZXMgYXNzb2NpYXRlZCB3aXRoIGEgdGFzayBjYW4gYmUgbW92ZWQgYWxvbmcgd2l0aCB0YXNrIG1pZ3JhdGlvbi4KKworCShTaGVsbC1BKQorCSNta2RpciAvY2dyb3VwL0EKKwkjZWNobyAkJCA+L2Nncm91cC9BL3Rhc2tzCisJcnVuIHNvbWUgcHJvZ3JhbXMgd2hpY2ggdXNlcyBzb21lIGFtb3VudCBvZiBtZW1vcnkgaW4gL2Nncm91cC9BLgorCisJKFNoZWxsLUIpCisJI21rZGlyIC9jZ3JvdXAvQgorCSNlY2hvIDEgPi9jZ3JvdXAvQi9tZW1vcnkubW92ZV9jaGFyZ2VfYXRfaW1taWdyYXRlCisJI2VjaG8gInBpZCBvZiB0aGUgcHJvZ3JhbSBydW5uaW5nIGluIGdyb3VwIEEiID4vY2dyb3VwL0IvdGFza3MKKworCVlvdSBjYW4gc2VlIGNoYXJnZXMgaGF2ZSBiZWVuIG1vdmVkIGJ5IHJlYWRpbmcgKi51c2FnZV9pbl9ieXRlcyBvcgorCW1lbW9yeS5zdGF0IG9mIGJvdGggQSBhbmQgQi4KKwlTZWUgOC4yIG9mIERvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0IHRvIHNlZSB3aGF0IHZhbHVlIHNob3VsZCBiZQorCXdyaXR0ZW4gdG8gbW92ZV9jaGFyZ2VfYXRfaW1taWdyYXRlLgorCisgOS4xMCBNZW1vcnkgdGhyZXNob2xkcworCU1lbW9yeSBjb250cm9sZXIgaW1wbGVtZW50cyBtZW1vcnkgdGhyZXNob2xkcyB1c2luZyBjZ3JvdXBzIG5vdGlmaWNhdGlvbgorCUFQSS4gWW91IGNhbiB1c2UgRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL2Nncm91cF9ldmVudF9saXN0ZW5lci5jIHRvIHRlc3QKKwlpdC4KKworCShTaGVsbC1BKSBDcmVhdGUgY2dyb3VwIGFuZCBydW4gZXZlbnQgbGlzdGVuZXIKKwkjIG1rZGlyIC9jZ3JvdXAvQQorCSMgLi9jZ3JvdXBfZXZlbnRfbGlzdGVuZXIgL2Nncm91cC9BL21lbW9yeS51c2FnZV9pbl9ieXRlcyA1TQorCisJKFNoZWxsLUIpIEFkZCB0YXNrIHRvIGNncm91cCBhbmQgdHJ5IHRvIGFsbG9jYXRlIGFuZCBmcmVlIG1lbW9yeQorCSMgZWNobyAkJCA+L2Nncm91cC9BL3Rhc2tzCisJIyBhPSIkKGRkIGlmPS9kZXYvemVybyBicz0xTSBjb3VudD0xMCkiCisJIyBhPQorCisJWW91IHdpbGwgc2VlIG1lc3NhZ2UgZnJvbSBjZ3JvdXBfZXZlbnRfbGlzdGVuZXIgZXZlcnkgdGltZSB5b3UgY3Jvc3MKKwl0aGUgdGhyZXNob2xkcy4KKworCVVzZSAvY2dyb3VwL0EvbWVtb3J5Lm1lbXN3LnVzYWdlX2luX2J5dGVzIHRvIHRlc3QgbWVtc3cgdGhyZXNob2xkcy4KKworCUl0J3MgZ29vZCBpZGVhIHRvIHRlc3Qgcm9vdCBjZ3JvdXAgYXMgd2VsbC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY2dyb3Vwcy9tZW1vcnkudHh0IGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbW9yeS50eHQKaW5kZXggYjg3MWYyNS4uZjhiYzgwMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbW9yeS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9jZ3JvdXBzL21lbW9yeS50eHQKQEAgLTE4Miw2ICsxODIsOCBAQAogTk9URTogUmVjbGFpbSBkb2VzIG5vdCB3b3JrIGZvciB0aGUgcm9vdCBjZ3JvdXAsIHNpbmNlIHdlIGNhbm5vdCBzZXQgYW55CiBsaW1pdHMgb24gdGhlIHJvb3QgY2dyb3VwLgogCitOb3RlMjogV2hlbiBwYW5pY19vbl9vb20gaXMgc2V0IHRvICIyIiwgdGhlIHdob2xlIHN5c3RlbSB3aWxsIHBhbmljLgorCiAyLiBMb2NraW5nCiAKIFRoZSBtZW1vcnkgY29udHJvbGxlciB1c2VzIHRoZSBmb2xsb3dpbmcgaGllcmFyY2h5CkBAIC0yNjIsMTAgKzI2NCwxMiBAQAogNC4yIFRhc2sgbWlncmF0aW9uCiAKIFdoZW4gYSB0YXNrIG1pZ3JhdGVzIGZyb20gb25lIGNncm91cCB0byBhbm90aGVyLCBpdCdzIGNoYXJnZSBpcyBub3QKLWNhcnJpZWQgZm9yd2FyZC4gVGhlIHBhZ2VzIGFsbG9jYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBjZ3JvdXAgc3RpbGwKK2NhcnJpZWQgZm9yd2FyZCBieSBkZWZhdWx0LiBUaGUgcGFnZXMgYWxsb2NhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGNncm91cCBzdGlsbAogcmVtYWluIGNoYXJnZWQgdG8gaXQsIHRoZSBjaGFyZ2UgaXMgZHJvcHBlZCB3aGVuIHRoZSBwYWdlIGlzIGZyZWVkIG9yCiByZWNsYWltZWQuCiAKK05vdGU6IFlvdSBjYW4gbW92ZSBjaGFyZ2VzIG9mIGEgdGFzayBhbG9uZyB3aXRoIHRhc2sgbWlncmF0aW9uLiBTZWUgOC4KKwogNC4zIFJlbW92aW5nIGEgY2dyb3VwCiAKIEEgY2dyb3VwIGNhbiBiZSByZW1vdmVkIGJ5IHJtZGlyLCBidXQgYXMgZGlzY3Vzc2VkIGluIHNlY3Rpb25zIDQuMSBhbmQgNC4yLCBhCkBAIC0zNzcsNyArMzgxLDggQEAKIE5PVEUxOiBFbmFibGluZy9kaXNhYmxpbmcgd2lsbCBmYWlsIGlmIHRoZSBjZ3JvdXAgYWxyZWFkeSBoYXMgb3RoZXIKIGNncm91cHMgY3JlYXRlZCBiZWxvdyBpdC4KIAotTk9URTI6IFRoaXMgZmVhdHVyZSBjYW4gYmUgZW5hYmxlZC9kaXNhYmxlZCBwZXIgc3VidHJlZS4KK05PVEUyOiBXaGVuIHBhbmljX29uX29vbSBpcyBzZXQgdG8gIjIiLCB0aGUgd2hvbGUgc3lzdGVtIHdpbGwgcGFuaWMgaW4KK2Nhc2Ugb2YgYW4gb29tIGV2ZW50IGluIGFueSBjZ3JvdXAuCiAKIDcuIFNvZnQgbGltaXRzCiAKQEAgLTQxNCw3ICs0MTksNzYgQEAKIE5PVEUyOiBJdCBpcyByZWNvbW1lbmRlZCB0byBzZXQgdGhlIHNvZnQgbGltaXQgYWx3YXlzIGJlbG93IHRoZSBoYXJkIGxpbWl0LAogICAgICAgIG90aGVyd2lzZSB0aGUgaGFyZCBsaW1pdCB3aWxsIHRha2UgcHJlY2VkZW5jZS4KIAotOC4gVE9ETworOC4gTW92ZSBjaGFyZ2VzIGF0IHRhc2sgbWlncmF0aW9uCisKK1VzZXJzIGNhbiBtb3ZlIGNoYXJnZXMgYXNzb2NpYXRlZCB3aXRoIGEgdGFzayBhbG9uZyB3aXRoIHRhc2sgbWlncmF0aW9uLCB0aGF0CitpcywgdW5jaGFyZ2UgdGFzaydzIHBhZ2VzIGZyb20gdGhlIG9sZCBjZ3JvdXAgYW5kIGNoYXJnZSB0aGVtIHRvIHRoZSBuZXcgY2dyb3VwLgorVGhpcyBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gIUNPTkZJR19NTVUgZW52aXJvbm1lbnRzIGJlY2F1c2Ugb2YgbGFjayBvZgorcGFnZSB0YWJsZXMuCisKKzguMSBJbnRlcmZhY2UKKworVGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuIEl0IGNhbiBiZSBlbmFibGVkKGFuZCBkaXNhYmxlZCBhZ2FpbikgYnkKK3dyaXRpbmcgdG8gbWVtb3J5Lm1vdmVfY2hhcmdlX2F0X2ltbWlncmF0ZSBvZiB0aGUgZGVzdGluYXRpb24gY2dyb3VwLgorCitJZiB5b3Ugd2FudCB0byBlbmFibGUgaXQ6CisKKyMgZWNobyAoc29tZSBwb3NpdGl2ZSB2YWx1ZSkgPiBtZW1vcnkubW92ZV9jaGFyZ2VfYXRfaW1taWdyYXRlCisKK05vdGU6IEVhY2ggYml0cyBvZiBtb3ZlX2NoYXJnZV9hdF9pbW1pZ3JhdGUgaGFzIGl0cyBvd24gbWVhbmluZyBhYm91dCB3aGF0IHR5cGUKKyAgICAgIG9mIGNoYXJnZXMgc2hvdWxkIGJlIG1vdmVkLiBTZWUgOC4yIGZvciBkZXRhaWxzLgorTm90ZTogQ2hhcmdlcyBhcmUgbW92ZWQgb25seSB3aGVuIHlvdSBtb3ZlIG1tLT5vd25lciwgSU9XLCBhIGxlYWRlciBvZiBhIHRocmVhZAorICAgICAgZ3JvdXAuCitOb3RlOiBJZiB3ZSBjYW5ub3QgZmluZCBlbm91Z2ggc3BhY2UgZm9yIHRoZSB0YXNrIGluIHRoZSBkZXN0aW5hdGlvbiBjZ3JvdXAsIHdlCisgICAgICB0cnkgdG8gbWFrZSBzcGFjZSBieSByZWNsYWltaW5nIG1lbW9yeS4gVGFzayBtaWdyYXRpb24gbWF5IGZhaWwgaWYgd2UKKyAgICAgIGNhbm5vdCBtYWtlIGVub3VnaCBzcGFjZS4KK05vdGU6IEl0IGNhbiB0YWtlIHNldmVyYWwgc2Vjb25kcyBpZiB5b3UgbW92ZSBjaGFyZ2VzIGluIGdpZ2EgYnl0ZXMgb3JkZXIuCisKK0FuZCBpZiB5b3Ugd2FudCBkaXNhYmxlIGl0IGFnYWluOgorCisjIGVjaG8gMCA+IG1lbW9yeS5tb3ZlX2NoYXJnZV9hdF9pbW1pZ3JhdGUKKworOC4yIFR5cGUgb2YgY2hhcmdlcyB3aGljaCBjYW4gYmUgbW92ZQorCitFYWNoIGJpdHMgb2YgbW92ZV9jaGFyZ2VfYXRfaW1taWdyYXRlIGhhcyBpdHMgb3duIG1lYW5pbmcgYWJvdXQgd2hhdCB0eXBlIG9mCitjaGFyZ2VzIHNob3VsZCBiZSBtb3ZlZC4KKworICBiaXQgfCB3aGF0IHR5cGUgb2YgY2hhcmdlcyB3b3VsZCBiZSBtb3ZlZCA/CisgLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAwICB8IEEgY2hhcmdlIG9mIGFuIGFub255bW91cyBwYWdlKG9yIHN3YXAgb2YgaXQpIHVzZWQgYnkgdGhlIHRhcmdldCB0YXNrLgorICAgICAgfCBUaG9zZSBwYWdlcyBhbmQgc3dhcHMgbXVzdCBiZSB1c2VkIG9ubHkgYnkgdGhlIHRhcmdldCB0YXNrLiBZb3UgbXVzdAorICAgICAgfCBlbmFibGUgU3dhcCBFeHRlbnNpb24oc2VlIDIuNCkgdG8gZW5hYmxlIG1vdmUgb2Ygc3dhcCBjaGFyZ2VzLgorCitOb3RlOiBUaG9zZSBwYWdlcyBhbmQgc3dhcHMgbXVzdCBiZSBjaGFyZ2VkIHRvIHRoZSBvbGQgY2dyb3VwLgorTm90ZTogTW9yZSB0eXBlIG9mIHBhZ2VzKGUuZy4gZmlsZSBjYWNoZSwgc2htZW0sKSB3aWxsIGJlIHN1cHBvcnRlZCBieSBvdGhlcgorICAgICAgYml0cyBpbiBmdXR1cmUuCisKKzguMyBUT0RPCisKKy0gQWRkIHN1cHBvcnQgZm9yIG90aGVyIHR5cGVzIG9mIHBhZ2VzKGUuZy4gZmlsZSBjYWNoZSwgc2htZW0sIGV0Yy4pLgorLSBJbXBsZW1lbnQgbWFkdmlzZSgyKSB0byBsZXQgdXNlcnMgZGVjaWRlIHRoZSB2bWEgdG8gYmUgbW92ZWQgb3Igbm90IHRvIGJlCisgIG1vdmVkLgorLSBBbGwgb2YgbW92aW5nIGNoYXJnZSBvcGVyYXRpb25zIGFyZSBkb25lIHVuZGVyIGNncm91cF9tdXRleC4gSXQncyBub3QgZ29vZAorICBiZWhhdmlvciB0byBob2xkIHRoZSBtdXRleCB0b28gbG9uZywgc28gd2UgbWF5IG5lZWQgc29tZSB0cmljay4KKworOS4gTWVtb3J5IHRocmVzaG9sZHMKKworTWVtb3J5IGNvbnRyb2xlciBpbXBsZW1lbnRzIG1lbW9yeSB0aHJlc2hvbGRzIHVzaW5nIGNncm91cHMgbm90aWZpY2F0aW9uCitBUEkgKHNlZSBjZ3JvdXBzLnR4dCkuIEl0IGFsbG93cyB0byByZWdpc3RlciBtdWx0aXBsZSBtZW1vcnkgYW5kIG1lbXN3Cit0aHJlc2hvbGRzIGFuZCBnZXRzIG5vdGlmaWNhdGlvbnMgd2hlbiBpdCBjcm9zc2VzLgorCitUbyByZWdpc3RlciBhIHRocmVzaG9sZCBhcHBsaWNhdGlvbiBuZWVkOgorIC0gY3JlYXRlIGFuIGV2ZW50ZmQgdXNpbmcgZXZlbnRmZCgyKTsKKyAtIG9wZW4gbWVtb3J5LnVzYWdlX2luX2J5dGVzIG9yIG1lbW9yeS5tZW1zdy51c2FnZV9pbl9ieXRlczsKKyAtIHdyaXRlIHN0cmluZyBsaWtlICI8ZXZlbnRfZmQ+IDxtZW1vcnkudXNhZ2VfaW5fYnl0ZXM+IDx0aHJlc2hvbGQ+IiB0bworICAgY2dyb3VwLmV2ZW50X2NvbnRyb2wuCisKK0FwcGxpY2F0aW9uIHdpbGwgYmUgbm90aWZpZWQgdGhyb3VnaCBldmVudGZkIHdoZW4gbWVtb3J5IHVzYWdlIGNyb3NzZXMKK3RocmVzaG9sZCBpbiBhbnkgZGlyZWN0aW9uLgorCitJdCdzIGFwcGxpY2FibGUgZm9yIHJvb3QgYW5kIG5vbi1yb290IGNncm91cC4KKworMTAuIFRPRE8KIAogMS4gQWRkIHN1cHBvcnQgZm9yIGFjY291bnRpbmcgaHVnZSBwYWdlcyAoYXMgYSBzZXBhcmF0ZSBjb250cm9sbGVyKQogMi4gTWFrZSBwZXItY2dyb3VwIHNjYW5uZXIgcmVjbGFpbSBub3Qtc2hhcmVkIHBhZ2VzIGZpcnN0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NvbnNvbGUvY29uc29sZS50eHQgYi9Eb2N1bWVudGF0aW9uL2NvbnNvbGUvY29uc29sZS50eHQKaW5kZXggODc3YTFiMi4uOTI2Y2YxYiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9jb25zb2xlL2NvbnNvbGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY29uc29sZS9jb25zb2xlLnR4dApAQCAtNzQsNyArNzQsNyBAQAogaGFuZCwgd2lsbCBiaW5kIHRoZSBkcml2ZXIgdG8gdGhlIGNvbnNvbGVzIHRoYXQgYXJlIGN1cnJlbnRseSBvY2N1cGllZCBieSBhCiBzeXN0ZW0gZHJpdmVyLgogCi1OT1RFMTogQmluZGluZyBhbmQgYmluZGluZyBtdXN0IGJlIHNlbGVjdGVkIGluIEtjb25maWcuIEl0J3MgdW5kZXI6CitOT1RFMTogQmluZGluZyBhbmQgdW5iaW5kaW5nIG11c3QgYmUgc2VsZWN0ZWQgaW4gS2NvbmZpZy4gSXQncyB1bmRlcjoKIAogRGV2aWNlIERyaXZlcnMgLT4gQ2hhcmFjdGVyIGRldmljZXMgLT4gU3VwcG9ydCBmb3IgYmluZGluZyBhbmQgdW5iaW5kaW5nCiBjb25zb2xlIGRyaXZlcnMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvcGNjLWNwdWZyZXEudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHUtZnJlcS9wY2MtY3B1ZnJlcS50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUzYzNiMwotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vY3B1LWZyZXEvcGNjLWNwdWZyZXEudHh0CkBAIC0wLDAgKzEsMjA3IEBACisvKgorICogIHBjYy1jcHVmcmVxLnR4dCAtIFBDQyBpbnRlcmZhY2UgZG9jdW1lbnRhdGlvbgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgTWF0dGhldyBHYXJyZXR0IDxtamdAcmVkaGF0LmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KKyAqICAgICAgTmFnYW5hbmRhIENodW1iYWxrYXIgPG5hZ2FuYW5kYS5jaHVtYmFsa2FyQGhwLmNvbT4KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgR09PRCBUSVRMRSBvciBOT04KKyAqICBJTkZSSU5HRU1FTlQuIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKyAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+CisgKi8KKworCisJCQlQcm9jZXNzb3IgQ2xvY2tpbmcgQ29udHJvbCBEcml2ZXIKKwkJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb250ZW50czoKKy0tLS0tLS0tLQorMS4JSW50cm9kdWN0aW9uCisxLjEJUENDIGludGVyZmFjZQorMS4xLjEgICBHZXQgQXZlcmFnZSBGcmVxdWVuY3kKKzEuMS4yCVNldCBEZXNpcmVkIEZyZXF1ZW5jeQorMS4yCVBsYXRmb3JtcyBhZmZlY3RlZAorMi4JRHJpdmVyIGFuZCAvc3lzIGRldGFpbHMKKzIuMQlzY2FsaW5nX2F2YWlsYWJsZV9mcmVxdWVuY2llcworMi4yCWNwdWluZm9fdHJhbnNpdGlvbl9sYXRlbmN5CisyLjMJY3B1aW5mb19jdXJfZnJlcQorMi40CXJlbGF0ZWRfY3B1cworMy4JQ2F2ZWF0cworCisxLiBJbnRyb2R1Y3Rpb246CistLS0tLS0tLS0tLS0tLS0tCitQcm9jZXNzb3IgQ2xvY2tpbmcgQ29udHJvbCAoUENDKSBpcyBhbiBpbnRlcmZhY2UgYmV0d2VlbiB0aGUgcGxhdGZvcm0KK2Zpcm13YXJlIGFuZCBPU1BNLiBJdCBpcyBhIG1lY2hhbmlzbSBmb3IgY29vcmRpbmF0aW5nIHByb2Nlc3NvcgorcGVyZm9ybWFuY2UgKGllOiBmcmVxdWVuY3kpIGJldHdlZW4gdGhlIHBsYXRmb3JtIGZpcm13YXJlIGFuZCB0aGUgT1MuCisKK1RoZSBQQ0MgZHJpdmVyIChwY2MtY3B1ZnJlcSkgYWxsb3dzIE9TUE0gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIFBDQworaW50ZXJmYWNlLgorCitPUyB1dGlsaXplcyB0aGUgUENDIGludGVyZmFjZSB0byBpbmZvcm0gcGxhdGZvcm0gZmlybXdhcmUgd2hhdCBmcmVxdWVuY3kgdGhlCitPUyB3YW50cyBmb3IgYSBsb2dpY2FsIHByb2Nlc3Nvci4gVGhlIHBsYXRmb3JtIGZpcm13YXJlIGF0dGVtcHRzIHRvIGFjaGlldmUKK3RoZSByZXF1ZXN0ZWQgZnJlcXVlbmN5LiBJZiB0aGUgcmVxdWVzdCBmb3IgdGhlIHRhcmdldCBmcmVxdWVuY3kgY291bGQgbm90IGJlCitzYXRpc2ZpZWQgYnkgcGxhdGZvcm0gZmlybXdhcmUsIHRoZW4gaXQgdXN1YWxseSBtZWFucyB0aGF0IHBvd2VyIGJ1ZGdldAorY29uZGl0aW9ucyBhcmUgaW4gcGxhY2UsIGFuZCAicG93ZXIgY2FwcGluZyIgaXMgdGFraW5nIHBsYWNlLgorCisxLjEgUENDIGludGVyZmFjZToKKy0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIGNvbXBsZXRlIFBDQyBzcGVjaWZpY2F0aW9uIGlzIGF2YWlsYWJsZSBoZXJlOgoraHR0cDovL3d3dy5hY3BpY2Eub3JnL2Rvd25sb2FkL1Byb2Nlc3Nvci1DbG9ja2luZy1Db250cm9sLXYxcDAucGRmCisKK1BDQyByZWxpZXMgb24gYSBzaGFyZWQgbWVtb3J5IHJlZ2lvbiB0aGF0IHByb3ZpZGVzIGEgY2hhbm5lbCBmb3IgY29tbXVuaWNhdGlvbgorYmV0d2VlbiB0aGUgT1MgYW5kIHBsYXRmb3JtIGZpcm13YXJlLiBQQ0MgYWxzbyBpbXBsZW1lbnRzIGEgImRvb3JiZWxsIiB0aGF0CitpcyB1c2VkIGJ5IHRoZSBPUyB0byBpbmZvcm0gdGhlIHBsYXRmb3JtIGZpcm13YXJlIHRoYXQgYSBjb21tYW5kIGhhcyBiZWVuCitzZW50LgorCitUaGUgQUNQSSBQQ0NIKCkgbWV0aG9kIGlzIHVzZWQgdG8gZGlzY292ZXIgdGhlIGxvY2F0aW9uIG9mIHRoZSBQQ0Mgc2hhcmVkCittZW1vcnkgcmVnaW9uLiBUaGUgc2hhcmVkIG1lbW9yeSByZWdpb24gaGVhZGVyIGNvbnRhaW5zIHRoZSAiY29tbWFuZCIgYW5kCisic3RhdHVzIiBpbnRlcmZhY2UuIFBDQ0goKSBhbHNvIGNvbnRhaW5zIGRldGFpbHMgb24gaG93IHRvIGFjY2VzcyB0aGUgcGxhdGZvcm0KK2Rvb3JiZWxsLgorCitUaGUgZm9sbG93aW5nIGNvbW1hbmRzIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIFBDQyBpbnRlcmZhY2U6CisqIEdldCBBdmVyYWdlIEZyZXF1ZW5jeQorKiBTZXQgRGVzaXJlZCBGcmVxdWVuY3kKKworVGhlIEFDUEkgUENDUCgpIG1ldGhvZCBpcyBpbXBsZW1lbnRlZCBmb3IgZWFjaCBsb2dpY2FsIHByb2Nlc3NvciBhbmQgaXMKK3VzZWQgdG8gZGlzY292ZXIgdGhlIG9mZnNldHMgZm9yIHRoZSBpbnB1dCBhbmQgb3V0cHV0IGJ1ZmZlcnMgaW4gdGhlIHNoYXJlZAorbWVtb3J5IHJlZ2lvbi4KKworV2hlbiBQQ0MgbW9kZSBpcyBlbmFibGVkLCB0aGUgcGxhdGZvcm0gd2lsbCBub3QgZXhwb3NlIHByb2Nlc3NvciBwZXJmb3JtYW5jZQorb3IgdGhyb3R0bGUgc3RhdGVzIChfUFNTLCBfVFNTIGFuZCByZWxhdGVkIEFDUEkgb2JqZWN0cykgdG8gT1NQTS4gVGhlcmVmb3JlLAordGhlIG5hdGl2ZSBQLXN0YXRlIGRyaXZlciAoc3VjaCBhcyBhY3BpLWNwdWZyZXEgZm9yIEludGVsLCBwb3dlcm5vdy1rOCBmb3IKK0FNRCkgd2lsbCBub3QgbG9hZC4KKworSG93ZXZlciwgT1NQTSByZW1haW5zIGluIGNvbnRyb2wgb2YgcG9saWN5LiBUaGUgZ292ZXJub3IgKGVnOiAib25kZW1hbmQiKQorY29tcHV0ZXMgdGhlIHJlcXVpcmVkIHBlcmZvcm1hbmNlIGZvciBlYWNoIHByb2Nlc3NvciBiYXNlZCBvbiBzZXJ2ZXIgd29ya2xvYWQuCitUaGUgUENDIGRyaXZlciBmaWxscyBpbiB0aGUgY29tbWFuZCBpbnRlcmZhY2UsIGFuZCB0aGUgaW5wdXQgYnVmZmVyIGFuZAorY29tbXVuaWNhdGVzIHRoZSByZXF1ZXN0IHRvIHRoZSBwbGF0Zm9ybSBmaXJtd2FyZS4gVGhlIHBsYXRmb3JtIGZpcm13YXJlIGlzCityZXNwb25zaWJsZSBmb3IgZGVsaXZlcmluZyB0aGUgcmVxdWVzdGVkIHBlcmZvcm1hbmNlLgorCitFYWNoIFBDQyBjb21tYW5kIGlzICJnbG9iYWwiIGluIHNjb3BlIGFuZCBjYW4gYWZmZWN0IGFsbCB0aGUgbG9naWNhbCBDUFVzIGluCit0aGUgc3lzdGVtLiBUaGVyZWZvcmUsIFBDQyBpcyBjYXBhYmxlIG9mIHBlcmZvcm1pbmcgImdyb3VwIiB1cGRhdGVzLiBXaXRoIFBDQwordGhlIE9TIGlzIGNhcGFibGUgb2YgZ2V0dGluZy9zZXR0aW5nIHRoZSBmcmVxdWVuY3kgb2YgYWxsIHRoZSBsb2dpY2FsIENQVXMgaW4KK3RoZSBzeXN0ZW0gd2l0aCBhIHNpbmdsZSBjYWxsIHRvIHRoZSBCSU9TLgorCisxLjEuMSBHZXQgQXZlcmFnZSBGcmVxdWVuY3k6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGNvbW1hbmQgaXMgdXNlZCBieSB0aGUgT1NQTSB0byBxdWVyeSB0aGUgcnVubmluZyBmcmVxdWVuY3kgb2YgdGhlCitwcm9jZXNzb3Igc2luY2UgdGhlIGxhc3QgdGltZSB0aGlzIGNvbW1hbmQgd2FzIGNvbXBsZXRlZC4gVGhlIG91dHB1dCBidWZmZXIKK2luZGljYXRlcyB0aGUgYXZlcmFnZSB1bmhhbHRlZCBmcmVxdWVuY3kgb2YgdGhlIGxvZ2ljYWwgcHJvY2Vzc29yIGV4cHJlc3NlZCBhcworYSBwZXJjZW50YWdlIG9mIHRoZSBub21pbmFsIChpZTogbWF4aW11bSkgQ1BVIGZyZXF1ZW5jeS4gVGhlIG91dHB1dCBidWZmZXIKK2Fsc28gc2lnbmlmaWVzIGlmIHRoZSBDUFUgZnJlcXVlbmN5IGlzIGxpbWl0ZWQgYnkgYSBwb3dlciBidWRnZXQgY29uZGl0aW9uLgorCisxLjEuMiBTZXQgRGVzaXJlZCBGcmVxdWVuY3k6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGNvbW1hbmQgaXMgdXNlZCBieSB0aGUgT1NQTSB0byBjb21tdW5pY2F0ZSB0byB0aGUgcGxhdGZvcm0gZmlybXdhcmUgdGhlCitkZXNpcmVkIGZyZXF1ZW5jeSBmb3IgYSBsb2dpY2FsIHByb2Nlc3Nvci4gVGhlIG91dHB1dCBidWZmZXIgaXMgY3VycmVudGx5CitpZ25vcmVkIGJ5IE9TUE0uIFRoZSBuZXh0IGludm9jYXRpb24gb2YgIkdldCBBdmVyYWdlIEZyZXF1ZW5jeSIgd2lsbCBpbmZvcm0KK09TUE0gaWYgdGhlIGRlc2lyZWQgZnJlcXVlbmN5IHdhcyBhY2hpZXZlZCBvciBub3QuCisKKzEuMiBQbGF0Zm9ybXMgYWZmZWN0ZWQ6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhlIFBDQyBkcml2ZXIgd2lsbCBsb2FkIG9uIGFueSBzeXN0ZW0gd2hlcmUgdGhlIHBsYXRmb3JtIGZpcm13YXJlOgorKiBzdXBwb3J0cyB0aGUgUENDIGludGVyZmFjZSwgYW5kIHRoZSBhc3NvY2lhdGVkIFBDQ0goKSBhbmQgUENDUCgpIG1ldGhvZHMKKyogYXNzdW1lcyByZXNwb25zaWJpbGl0eSBmb3IgbWFuYWdpbmcgdGhlIGhhcmR3YXJlIGNsb2NraW5nIGNvbnRyb2xzIGluIG9yZGVyCit0byBkZWxpdmVyIHRoZSByZXF1ZXN0ZWQgcHJvY2Vzc29yIHBlcmZvcm1hbmNlCisKK0N1cnJlbnRseSwgY2VydGFpbiBIUCBQcm9MaWFudCBwbGF0Zm9ybXMgaW1wbGVtZW50IHRoZSBQQ0MgaW50ZXJmYWNlLiBPbiB0aG9zZQorcGxhdGZvcm1zIFBDQyBpcyB0aGUgImRlZmF1bHQiIGNob2ljZS4KKworSG93ZXZlciwgaXQgaXMgcG9zc2libGUgdG8gZGlzYWJsZSB0aGlzIGludGVyZmFjZSB2aWEgYSBCSU9TIHNldHRpbmcuIEluCitzdWNoIGFuIGluc3RhbmNlLCBhcyBpcyBhbHNvIHRoZSBjYXNlIG9uIHBsYXRmb3JtcyB3aGVyZSB0aGUgUENDIGludGVyZmFjZQoraXMgbm90IGltcGxlbWVudGVkLCB0aGUgUENDIGRyaXZlciB3aWxsIGZhaWwgdG8gbG9hZCBzaWxlbnRseS4KKworMi4gRHJpdmVyIGFuZCAvc3lzIGRldGFpbHM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1doZW4gdGhlIGRyaXZlciBsb2FkcywgaXQgbWVyZWx5IHByaW50cyB0aGUgbG93ZXN0IGFuZCB0aGUgaGlnaGVzdCBDUFUKK2ZyZXF1ZW5jaWVzIHN1cHBvcnRlZCBieSB0aGUgcGxhdGZvcm0gZmlybXdhcmUuCisKK1RoZSBQQ0MgZHJpdmVyIGxvYWRzIHdpdGggYSBtZXNzYWdlIHN1Y2ggYXM6CitwY2MtY3B1ZnJlcTogKHYxLjAwLjAwKSBkcml2ZXIgbG9hZGVkIHdpdGggZnJlcXVlbmN5IGxpbWl0czogMTYwMCBNSHosIDI5MzMKK01IegorCitUaGlzIG1lYW5zIHRoYXQgdGhlIE9QU00gY2FuIHJlcXVlc3QgdGhlIENQVSB0byBydW4gYXQgYW55IGZyZXF1ZW5jeSBpbgorYmV0d2VlbiB0aGUgbGltaXRzICgxNjAwIE1IeiwgYW5kIDI5MzMgTUh6KSBzcGVjaWZpZWQgaW4gdGhlIG1lc3NhZ2UuCisKK0ludGVybmFsbHksIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoZSBkcml2ZXIgdG8gY29udmVydCB0aGUgInRhcmdldCIgZnJlcXVlbmN5Cit0byBhIGNvcnJlc3BvbmRpbmcgUC1zdGF0ZS4KKworVGhlIFZFUlNJT04gbnVtYmVyIGZvciB0aGUgZHJpdmVyIHdpbGwgYmUgb2YgdGhlIGZvcm1hdCB2Lnh5LmFiLgorZWc6IDEuMDAuMDIKKyAgIC0tLS0tIC0tCisgICAgfCAgICB8CisgICAgfCAgICAtLSB0aGlzIHdpbGwgaW5jcmVhc2Ugd2l0aCBidWcgZml4ZXMvZW5oYW5jZW1lbnRzIHRvIHRoZSBkcml2ZXIKKyAgICB8LS0gdGhpcyBpcyB0aGUgdmVyc2lvbiBvZiB0aGUgUENDIHNwZWNpZmljYXRpb24gdGhlIGRyaXZlciBhZGhlcmVzIHRvCisKKworVGhlIGZvbGxvd2luZyBpcyBhIGJyaWVmIGRpc2N1c3Npb24gb24gc29tZSBvZiB0aGUgZmllbGRzIGV4cG9ydGVkIHZpYSB0aGUKKy9zeXMgZmlsZXN5c3RlbSBhbmQgaG93IHRoZWlyIHZhbHVlcyBhcmUgYWZmZWN0ZWQgYnkgdGhlIFBDQyBkcml2ZXI6CisKKzIuMSBzY2FsaW5nX2F2YWlsYWJsZV9mcmVxdWVuY2llczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3NjYWxpbmdfYXZhaWxhYmxlX2ZyZXF1ZW5jaWVzIGlzIG5vdCBjcmVhdGVkIGluIC9zeXMuIE5vIGludGVybWVkaWF0ZQorZnJlcXVlbmNpZXMgbmVlZCB0byBiZSBsaXN0ZWQgYmVjYXVzZSB0aGUgQklPUyB3aWxsIHRyeSB0byBhY2hpZXZlIGFueQorZnJlcXVlbmN5LCB3aXRoaW4gbGltaXRzLCByZXF1ZXN0ZWQgYnkgdGhlIGdvdmVybm9yLiBBIGZyZXF1ZW5jeSBkb2VzIG5vdCBoYXZlCit0byBiZSBzdHJpY3RseSBhc3NvY2lhdGVkIHdpdGggYSBQLXN0YXRlLgorCisyLjIgY3B1aW5mb190cmFuc2l0aW9uX2xhdGVuY3k6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgY3B1aW5mb190cmFuc2l0aW9uX2xhdGVuY3kgZmllbGQgaXMgMC4gVGhlIFBDQyBzcGVjaWZpY2F0aW9uIGRvZXMKK25vdCBpbmNsdWRlIGEgZmllbGQgdG8gZXhwb3NlIHRoaXMgdmFsdWUgY3VycmVudGx5LgorCisyLjMgY3B1aW5mb19jdXJfZnJlcToKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQSkgT2Z0ZW4gY3B1aW5mb19jdXJfZnJlcSB3aWxsIHNob3cgYSB2YWx1ZSBkaWZmZXJlbnQgdGhhbiB3aGF0IGlzIGRlY2xhcmVkCitpbiB0aGUgc2NhbGluZ19hdmFpbGFibGVfZnJlcXVlbmNpZXMgb3Igc2NhbGluZ19jdXJfZnJlcSwgb3Igc2NhbGluZ19tYXhfZnJlcS4KK1RoaXMgaXMgZHVlIHRvICJ0dXJibyBib29zdCIgYXZhaWxhYmxlIG9uIHJlY2VudCBJbnRlbCBwcm9jZXNzb3JzLiBJZiBjZXJ0YWluCitjb25kaXRpb25zIGFyZSBtZXQgdGhlIEJJT1MgY2FuIGFjaGlldmUgYSBzbGlnaHRseSBoaWdoZXIgc3BlZWQgdGhhbiByZXF1ZXN0ZWQKK2J5IE9TUE0uIEFuIGV4YW1wbGU6CisKK3NjYWxpbmdfY3VyX2ZyZXEJOiAyOTMzMDAwCitjcHVpbmZvX2N1cl9mcmVxCTogMzE5NjAwMAorCitCKSBUaGVyZSBpcyBhIHJvdW5kLW9mZiBlcnJvciBhc3NvY2lhdGVkIHdpdGggdGhlIGNwdWluZm9fY3VyX2ZyZXEgdmFsdWUuCitTaW5jZSB0aGUgZHJpdmVyIG9idGFpbnMgdGhlIGN1cnJlbnQgZnJlcXVlbmN5IGFzIGEgInBlcmNlbnRhZ2UiICglKSBvZiB0aGUKK25vbWluYWwgZnJlcXVlbmN5IGZyb20gdGhlIEJJT1MsIHNvbWV0aW1lcywgdGhlIHZhbHVlcyBkaXNwbGF5ZWQgYnkKK3NjYWxpbmdfY3VyX2ZyZXEgYW5kIGNwdWluZm9fY3VyX2ZyZXEgbWF5IG5vdCBtYXRjaC4gQW4gZXhhbXBsZToKKworc2NhbGluZ19jdXJfZnJlcQk6IDE2MDAwMDAKK2NwdWluZm9fY3VyX2ZyZXEJOiAxNTgzMDAwCisKK0luIHRoaXMgZXhhbXBsZSwgdGhlIG5vbWluYWwgZnJlcXVlbmN5IGlzIDI5MzMgTUh6LiBUaGUgZHJpdmVyIG9idGFpbnMgdGhlCitjdXJyZW50IGZyZXF1ZW5jeSwgY3B1aW5mb19jdXJfZnJlcSwgYXMgNTQlIG9mIHRoZSBub21pbmFsIGZyZXF1ZW5jeToKKworCTU0JSBvZiAyOTMzIE1IeiA9IDE1ODMgTUh6CisKK05vbWluYWwgZnJlcXVlbmN5IGlzIHRoZSBtYXhpbXVtIGZyZXF1ZW5jeSBvZiB0aGUgcHJvY2Vzc29yLCBhbmQgaXQgdXN1YWxseQorY29ycmVzcG9uZHMgdG8gdGhlIGZyZXF1ZW5jeSBvZiB0aGUgUDAgUC1zdGF0ZS4KKworMi40IHJlbGF0ZWRfY3B1czoKKy0tLS0tLS0tLS0tLS0tLS0tCitUaGUgcmVsYXRlZF9jcHVzIGZpZWxkIGlzIGlkZW50aWNhbCB0byBhZmZlY3RlZF9jcHVzLgorCithZmZlY3RlZF9jcHVzCTogNAorcmVsYXRlZF9jcHVzCTogNAorCitDdXJyZW50bHksIHRoZSBQQ0MgZHJpdmVyIGRvZXMgbm90IGV2YWx1YXRlIF9QU0QuIFRoZSBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CitQQ0MgZG8gbm90IGltcGxlbWVudCBTV19BTEwuIFNvIE9TUE0gZG9lc24ndCBuZWVkIHRvIHBlcmZvcm0gYW55IGNvb3JkaW5hdGlvbgordG8gZW5zdXJlIHRoYXQgdGhlIHNhbWUgZnJlcXVlbmN5IGlzIHJlcXVlc3RlZCBvZiBhbGwgZGVwZW5kZW50IENQVXMuCisKKzMuIENhdmVhdHM6CistLS0tLS0tLS0tLQorVGhlICJjcHVmcmVxX3N0YXRzIiBtb2R1bGUgaW4gaXRzIHByZXNlbnQgZm9ybSBjYW5ub3QgYmUgbG9hZGVkIGFuZAorZXhwZWN0ZWQgdG8gd29yayB3aXRoIHRoZSBQQ0MgZHJpdmVyLiBTaW5jZSB0aGUgImNwdWZyZXFfc3RhdHMiIG1vZHVsZQorcHJvdmlkZXMgaW5mb3JtYXRpb24gd3J0IGVhY2ggUC1zdGF0ZSwgaXQgaXMgbm90IGFwcGxpY2FibGUgdG8gdGhlIFBDQyBkcml2ZXIuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvc25hcHNob3QudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2UtbWFwcGVyL3NuYXBzaG90LnR4dAppbmRleCBlM2E3N2IyLi4wZDViYzQ2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvc25hcHNob3QudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNlLW1hcHBlci9zbmFwc2hvdC50eHQKQEAgLTEyMiwzICsxMjIsNDcgQEAKIGJydy0tLS0tLS0gIDEgcm9vdCByb290IDI1NCwgMTEgMjkgYWdvIDE4OjE1IC9kZXYvbWFwcGVyL3ZvbHVtZUdyb3VwLWJhc2UtcmVhbAogYnJ3LS0tLS0tLSAgMSByb290IHJvb3QgMjU0LCAxMiAyOSBhZ28gMTg6MTYgL2Rldi9tYXBwZXIvdm9sdW1lR3JvdXAtYmFzZS1jb3cKIGJydy0tLS0tLS0gIDEgcm9vdCByb290IDI1NCwgMTAgMjkgYWdvIDE4OjE2IC9kZXYvbWFwcGVyL3ZvbHVtZUdyb3VwLWJhc2UKKworCitIb3cgdG8gZGV0ZXJtaW5lIHdoZW4gYSBtZXJnaW5nIGlzIGNvbXBsZXRlCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGUgc25hcHNob3QtbWVyZ2UgYW5kIHNuYXBzaG90IHN0YXR1cyBsaW5lcyBlbmQgd2l0aDoKKyAgPHNlY3RvcnNfYWxsb2NhdGVkPi88dG90YWxfc2VjdG9ycz4gPG1ldGFkYXRhX3NlY3RvcnM+CisKK0JvdGggPHNlY3RvcnNfYWxsb2NhdGVkPiBhbmQgPHRvdGFsX3NlY3RvcnM+IGluY2x1ZGUgYm90aCBkYXRhIGFuZCBtZXRhZGF0YS4KK0R1cmluZyBtZXJnaW5nLCB0aGUgbnVtYmVyIG9mIHNlY3RvcnMgYWxsb2NhdGVkIGdldHMgc21hbGxlciBhbmQKK3NtYWxsZXIuICBNZXJnaW5nIGhhcyBmaW5pc2hlZCB3aGVuIHRoZSBudW1iZXIgb2Ygc2VjdG9ycyBob2xkaW5nIGRhdGEKK2lzIHplcm8sIGluIG90aGVyIHdvcmRzIDxzZWN0b3JzX2FsbG9jYXRlZD4gPT0gPG1ldGFkYXRhX3NlY3RvcnM+LgorCitIZXJlIGlzIGEgcHJhY3RpY2FsIGV4YW1wbGUgKHVzaW5nIGEgaHlicmlkIG9mIGx2bSBhbmQgZG1zZXR1cCBjb21tYW5kcyk6CisKKyMgbHZzCisgIExWICAgICAgVkcgICAgICAgICAgQXR0ciAgIExTaXplIE9yaWdpbiAgU25hcCUgIE1vdmUgTG9nIENvcHklICBDb252ZXJ0CisgIGJhc2UgICAgdm9sdW1lR3JvdXAgb3dpLWEtIDQuMDBnCisgIHNuYXAgICAgdm9sdW1lR3JvdXAgc3dpLWEtIDEuMDBnIGJhc2UgIDE4Ljk3CisKKyMgZG1zZXR1cCBzdGF0dXMgdm9sdW1lR3JvdXAtc25hcAorMCA4Mzg4NjA4IHNuYXBzaG90IDM5Nzg5Ni8yMDk3MTUyIDE1NjAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eIG1ldGFkYXRhIHNlY3RvcnMKKworIyBsdmNvbnZlcnQgLS1tZXJnZSAtYiB2b2x1bWVHcm91cC9zbmFwCisgIE1lcmdpbmcgb2Ygdm9sdW1lIHNuYXAgc3RhcnRlZC4KKworIyBsdnMgdm9sdW1lR3JvdXAvc25hcAorICBMViAgICAgIFZHICAgICAgICAgIEF0dHIgICBMU2l6ZSBPcmlnaW4gIFNuYXAlICBNb3ZlIExvZyBDb3B5JSAgQ29udmVydAorICBiYXNlICAgIHZvbHVtZUdyb3VwIE93aS1hLSA0LjAwZyAgICAgICAgICAxNy4yMworCisjIGRtc2V0dXAgc3RhdHVzIHZvbHVtZUdyb3VwLWJhc2UKKzAgODM4ODYwOCBzbmFwc2hvdC1tZXJnZSAyODE2ODgvMjA5NzE1MiAxMTA0CisKKyMgZG1zZXR1cCBzdGF0dXMgdm9sdW1lR3JvdXAtYmFzZQorMCA4Mzg4NjA4IHNuYXBzaG90LW1lcmdlIDE4MDQ4MC8yMDk3MTUyIDcxMgorCisjIGRtc2V0dXAgc3RhdHVzIHZvbHVtZUdyb3VwLWJhc2UKKzAgODM4ODYwOCBzbmFwc2hvdC1tZXJnZSAxNi8yMDk3MTUyIDE2CisKK01lcmdpbmcgaGFzIGZpbmlzaGVkLgorCisjIGx2cworICBMViAgICAgIFZHICAgICAgICAgIEF0dHIgICBMU2l6ZSBPcmlnaW4gIFNuYXAlICBNb3ZlIExvZyBDb3B5JSAgQ29udmVydAorICBiYXNlICAgIHZvbHVtZUdyb3VwIG93aS1hLSA0LjAwZwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvcGxhdGZvcm0udHh0IGIvRG9jdW1lbnRhdGlvbi9kcml2ZXItbW9kZWwvcGxhdGZvcm0udHh0CmluZGV4IDJlMmMyZWEuLjQxZjQxNjMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL3BsYXRmb3JtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2RyaXZlci1tb2RlbC9wbGF0Zm9ybS50eHQKQEAgLTE5Miw3ICsxOTIsNyBAQAogVXNlciBzcGVjaWZpZWQgZWFybHkgcGxhdGZvcm0gZGV2aWNlcyB3aWxsIGJlIHJlZ2lzdGVyZWQgYXQgdGhpcyBwb2ludC4KIEZvciB0aGUgZWFybHkgc2VyaWFsIGNvbnNvbGUgY2FzZSB0aGUgdXNlciBjYW4gc3BlY2lmeSBwb3J0IG9uIHRoZQoga2VybmVsIGNvbW1hbmQgbGluZSBhcyAiZWFybHlwcmludGs9c2VyaWFsLjAiIHdoZXJlICJlYXJseXByaW50ayIgaXMKLXRoZSBjbGFzcyBzdHJpbmcsICJzZXJpYWwiIGlzIHRoZSBuYW1lIG9mIHRoZSBwbGF0ZnJvbSBkcml2ZXIgYW5kCit0aGUgY2xhc3Mgc3RyaW5nLCAic2VyaWFsIiBpcyB0aGUgbmFtZSBvZiB0aGUgcGxhdGZvcm0gZHJpdmVyIGFuZAogMCBpcyB0aGUgcGxhdGZvcm0gZGV2aWNlIGlkLiBJZiB0aGUgaWQgaXMgLTEgdGhlbiB0aGUgZG90IGFuZCB0aGUKIGlkIGNhbiBiZSBvbWl0dGVkLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2Vpc2EudHh0IGIvRG9jdW1lbnRhdGlvbi9laXNhLnR4dAppbmRleCA2MGUzNjFiLi5mMjk3ZmMxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2Vpc2EudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZWlzYS50eHQKQEAgLTE3MSw3ICsxNzEsNyBAQAogdmlydHVhbF9yb290LmZvcmNlX3Byb2JlIDoKIAogRm9yY2UgdGhlIHByb2JpbmcgY29kZSB0byBwcm9iZSBFSVNBIHNsb3RzIGV2ZW4gd2hlbiBpdCBjYW5ub3QgZmluZCBhbgotRUlTQSBjb21wbGlhbnQgbWFpbmJvYXJkIChub3RoaW5nIGFwcGVhcnMgb24gc2xvdCAwKS4gRGVmYXVsdGQgdG8gMAorRUlTQSBjb21wbGlhbnQgbWFpbmJvYXJkIChub3RoaW5nIGFwcGVhcnMgb24gc2xvdCAwKS4gRGVmYXVsdHMgdG8gMAogKGRvbid0IGZvcmNlKSwgYW5kIHNldCB0byAxIChmb3JjZSBwcm9iaW5nKSB3aGVuIGVpdGhlcgogQ09ORklHX0FMUEhBX0pFTlNFTiBvciBDT05GSUdfRUlTQV9WTEJfUFJJTUlORyBhcmUgc2V0LgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2VtYWlsLWNsaWVudHMudHh0IGIvRG9jdW1lbnRhdGlvbi9lbWFpbC1jbGllbnRzLnR4dAppbmRleCBhNjE4ZWZhLi45NDVmZjNmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2VtYWlsLWNsaWVudHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZW1haWwtY2xpZW50cy50eHQKQEAgLTIxNiwyNiArMjE2LDE0IEBACiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgogR21haWwgKFdlYiBHVUkpCiAKLUlmIHlvdSBqdXN0IGhhdmUgdG8gdXNlIEdtYWlsIHRvIHNlbmQgcGF0Y2hlcywgaXQgQ0FOIGJlIG1hZGUgdG8gd29yay4gIEl0Ci1yZXF1aXJlcyBhIGJpdCBvZiBleHRlcm5hbCBoZWxwLCB0aG91Z2guCitEb2VzIG5vdCB3b3JrIGZvciBzZW5kaW5nIHBhdGNoZXMuCiAKLVRoZSBmaXJzdCBwcm9ibGVtIGlzIHRoYXQgR21haWwgY29udmVydHMgdGFicyB0byBzcGFjZXMuICBUaGlzIHdpbGwKLXRvdGFsbHkgYnJlYWsgeW91ciBwYXRjaGVzLiAgVG8gcHJldmVudCB0aGlzLCB5b3UgaGF2ZSB0byB1c2UgYSBkaWZmZXJlbnQKLWVkaXRvci4gIFRoZXJlIGlzIGEgZmlyZWZveCBleHRlbnNpb24gY2FsbGVkICJWaWV3U291cmNlV2l0aCIKLShodHRwczovL2FkZG9ucy5tb3ppbGxhLm9yZy9lbi1VUy9maXJlZm94L2FkZG9uLzM5NCkgd2hpY2ggYWxsb3dzIHlvdSB0bwotZWRpdCBhbnkgdGV4dCBib3ggaW4gdGhlIGVkaXRvciBvZiB5b3VyIGNob2ljZS4gIENvbmZpZ3VyZSBpdCB0byBsYXVuY2gKLXlvdXIgZmF2b3JpdGUgZWRpdG9yLiAgV2hlbiB5b3Ugd2FudCB0byBzZW5kIGEgcGF0Y2gsIHVzZSB0aGlzIHRlY2huaXF1ZS4KLU9uY2UgeW91IGhhdmUgY3JhZnRlZCB5b3VyIG1lc3NzYWdlICsgcGF0Y2gsIHNhdmUgYW5kIGV4aXQgdGhlIGVkaXRvciwKLXdoaWNoIHNob3VsZCByZWxvYWQgdGhlIEdtYWlsIGVkaXQgYm94LiAgR01BSUwgV0lMTCBQUkVTRVJWRSBUSEUgVEFCUy4KLUhvb3JhaC4gIEFwcGFyZW50bHkgeW91IGNhbiBjdXQtbi1wYXN0ZSBsaXRlcmFsIHRhYnMsIGJ1dCBHbWFpbCB3aWxsCi1jb252ZXJ0IHRob3NlIHRvIHNwYWNlcyB1cG9uIHNlbmRpbmchCitHbWFpbCB3ZWIgY2xpZW50IGNvbnZlcnRzIHRhYnMgdG8gc3BhY2VzIGF1dG9tYXRpY2FsbHkuCiAKLVRoZSBzZWNvbmQgcHJvYmxlbSBpcyB0aGF0IEdtYWlsIGNvbnZlcnRzIHRhYnMgdG8gc3BhY2VzIG9uIHJlcGxpZXMuICBJZgoteW91IHJlcGx5IHRvIGEgcGF0Y2gsIGRvbid0IGV4cGVjdCB0byBiZSBhYmxlIHRvIGFwcGx5IGl0IGFzIGEgcGF0Y2guCitBdCB0aGUgc2FtZSB0aW1lIGl0IHdyYXBzIGxpbmVzIGV2ZXJ5IDc4IGNoYXJzIHdpdGggQ1JMRiBzdHlsZSBsaW5lIGJyZWFrcworYWx0aG91Z2ggdGFiMnNwYWNlIHByb2JsZW0gY2FuIGJlIHNvbHZlZCB3aXRoIGV4dGVybmFsIGVkaXRvci4KIAotVGhlIGxhc3QgcHJvYmxlbSBpcyB0aGF0IEdtYWlsIHdpbGwgYmFzZTY0LWVuY29kZSBhbnkgbWVzc2FnZSB0aGF0IGhhcyBhCi1ub24tQVNDSUkgY2hhcmFjdGVyLiAgVGhhdCBpbmNsdWRlcyB0aGluZ3MgbGlrZSBFdXJvcGVhbiBuYW1lcy4gIEJlIGF3YXJlLgotCi1HbWFpbCBpcyBub3QgY29udmVuaWVudCBmb3IgbGttbCBwYXRjaGVzLCBidXQgQ0FOIGJlIG1hZGUgdG8gd29yay4KK0Fub3RoZXIgcHJvYmxlbSBpcyB0aGF0IEdtYWlsIHdpbGwgYmFzZTY0LWVuY29kZSBhbnkgbWVzc2FnZSB0aGF0IGhhcyBhCitub24tQVNDSUkgY2hhcmFjdGVyLiBUaGF0IGluY2x1ZGVzIHRoaW5ncyBsaWtlIEV1cm9wZWFuIG5hbWVzLgogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mYXVsdC1pbmplY3Rpb24vcHJvdm9rZS1jcmFzaGVzLnR4dCBiL0RvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uL3Byb3Zva2UtY3Jhc2hlcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E5ZDNkOAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uL3Byb3Zva2UtY3Jhc2hlcy50eHQKQEAgLTAsMCArMSwzOCBAQAorVGhlIGxrZHRtIG1vZHVsZSBwcm92aWRlcyBhbiBpbnRlcmZhY2UgdG8gY3Jhc2ggb3IgaW5qdXJlIHRoZSBrZXJuZWwgYXQKK3ByZWRlZmluZWQgY3Jhc2hwb2ludHMgdG8gZXZhbHVhdGUgdGhlIHJlbGlhYmlsaXR5IG9mIGNyYXNoIGR1bXBzIG9idGFpbmVkCit1c2luZyBkaWZmZXJlbnQgZHVtcGluZyBzb2x1dGlvbnMuIFRoZSBtb2R1bGUgdXNlcyBLUFJPQkVzIHRvIGluc3RydW1lbnQKK2NyYXNoaW5nIHBvaW50cywgYnV0IGNhbiBhbHNvIGNyYXNoIHRoZSBrZXJuZWwgZGlyZWN0bHkgd2l0aG91dCBLUlBPQkUKK3N1cHBvcnQuCisKKworWW91IGNhbiBwcm92aWRlIHRoZSB3YXkgZWl0aGVyIHRocm91Z2ggbW9kdWxlIGFyZ3VtZW50cyB3aGVuIGluc2VydGluZwordGhlIG1vZHVsZSwgb3IgdGhyb3VnaCBhIGRlYnVnZnMgaW50ZXJmYWNlLgorCitVc2FnZTogaW5zbW9kIGxrZHRtLmtvIFtyZWN1cl9jb3VudD17PjB9XSBjcG9pbnRfbmFtZT08PiBjcG9pbnRfdHlwZT08PgorCQkJCVtjcG9pbnRfY291bnQ9ez4wfV0KKworICByZWN1cl9jb3VudCA6IFJlY3Vyc2lvbiBsZXZlbCBmb3IgdGhlIHN0YWNrIG92ZXJmbG93IHRlc3QuIERlZmF1bHQgaXMgMTAuCisKKyAgY3BvaW50X25hbWUgOiBDcmFzaCBwb2ludCB3aGVyZSB0aGUga2VybmVsIGlzIHRvIGJlIGNyYXNoZWQuIEl0IGNhbiBiZQorCSBvbmUgb2YgSU5UX0hBUkRXQVJFX0VOVFJZLCBJTlRfSFdfSVJRX0VOLCBJTlRfVEFTS0xFVF9FTlRSWSwKKwkgRlNfREVWUlcsIE1FTV9TV0FQT1VULCBUSU1FUkFERCwgU0NTSV9ESVNQQVRDSF9DTUQsCisJIElERV9DT1JFX0NQLCBESVJFQ1QKKworICBjcG9pbnRfdHlwZSA6IEluZGljYXRlcyB0aGUgYWN0aW9uIHRvIGJlIHRha2VuIG9uIGhpdHRpbmcgdGhlIGNyYXNoIHBvaW50LgorICAgICBJdCBjYW4gYmUgb25lIG9mIFBBTklDLCBCVUcsIEVYQ0VQVElPTiwgTE9PUCwgT1ZFUkZMT1csCisgICAgIENPUlJVUFRfU1RBQ0ssIFVOQUxJR05FRF9MT0FEX1NUT1JFX1dSSVRFLCBPVkVSV1JJVEVfQUxMT0NBVElPTiwKKyAgICAgV1JJVEVfQUZURVJfRlJFRSwKKworICBjcG9pbnRfY291bnQgOiBJbmRpY2F0ZXMgdGhlIG51bWJlciBvZiB0aW1lcyB0aGUgY3Jhc2ggcG9pbnQgaXMgdG8gYmUgaGl0CisgICAgdG8gdHJpZ2dlciBhbiBhY3Rpb24uIFRoZSBkZWZhdWx0IGlzIDEwLgorCitZb3UgY2FuIGFsc28gaW5kdWNlIGZhaWx1cmVzIGJ5IG1vdW50aW5nIGRlYnVnZnMgYW5kIHdyaXRpbmcgdGhlIHR5cGUgdG8KKzxtb3VudHBvaW50Pi9wcm92b2tlLWNyYXNoLzxjcmFzaHBvaW50Pi4gRS5nLiwKKworICBtb3VudCAtdCBkZWJ1Z2ZzIGRlYnVnZnMgL21udAorICBlY2hvIEVYQ0VQVElPTiA+IC9tbnQvcHJvdm9rZS1jcmFzaC9JTlRfSEFSRFdBUkVfRU5UUlkKKworCitBIHNwZWNpYWwgZmlsZSBpcyBgRElSRUNUJyB3aGljaCB3aWxsIGluZHVjZSB0aGUgY3Jhc2ggZGlyZWN0bHkgd2l0aG91dAorS1BST0JFIGluc3RydW1lbnRhdGlvbi4gVGhpcyBtb2RlIGlzIHRoZSBvbmx5IG9uZSBhdmFpbGFibGUgd2hlbiB0aGUgbW9kdWxlCitpcyBidWlsdCBvbiBhIGtlcm5lbCB3aXRob3V0IEtQUk9CRXMgc3VwcG9ydC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCA3MzJiMWZhLi5hNWNjMGRiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC04NCwyNyArODQsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZIC0gb2xkIHN0YXRpYyByZWd1bGF0b3J5IGluZm9ybWF0aW9uCi1XaGVuOglNYXJjaCAyMDEwIC8gZGVza3RvcCBjYXRjaHVwCi0KLVdoeToJVGhlIG9sZCByZWd1bGF0b3J5IGluZnJhc3RydWN0dXJlIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggYSBuZXcgb25lCi0Jd2hpY2ggZG9lcyBub3QgcmVxdWlyZSBzdGF0aWNhbGx5IGRlZmluZWQgcmVndWxhdG9yeSBkb21haW5zLiBXZSBkbwotCW5vdCB3YW50IHRvIGtlZXAgc3RhdGljIHJlZ3VsYXRvcnkgZG9tYWlucyBpbiB0aGUga2VybmVsIGR1ZSB0byB0aGUKLQl0aGUgZHluYW1pYyBuYXR1cmUgb2YgcmVndWxhdG9yeSBsYXcgYW5kIGxvY2FsaXphdGlvbi4gV2Uga2VwdCBhcm91bmQKLQl0aGUgb2xkIHN0YXRpYyBkZWZpbml0aW9ucyBmb3IgdGhlIHJlZ3VsYXRvcnkgZG9tYWlucyBvZjoKLQotCQkqIFVTCi0JCSogSlAKLQkJKiBFVQotCi0JYW5kIHVzZWQgYnkgZGVmYXVsdCB0aGUgVVMgd2hlbiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkgd2FzCi0Jc2V0LiBXZSB3aWxsIHJlbW92ZSB0aGlzIG9wdGlvbiBvbmNlIHRoZSBzdGFuZGFyZCBMaW51eCBkZXNrdG9wIGNhdGNoZXMKLQl1cCB3aXRoIHRoZSBuZXcgdXNlcnNwYWNlIEFQSXMgd2UgaGF2ZSBpbXBsZW1lbnRlZC4KLQotV2hvOglMdWlzIFIuIFJvZHJpZ3VleiA8bHJvZHJpZ3VlekBhdGhlcm9zLmNvbT4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFdoYXQ6CWRldi0+cG93ZXIucG93ZXJfc3RhdGUKIFdoZW46CUp1bHkgMjAwNwogV2h5OglCcm9rZW4gZGVzaWduIGZvciBydW50aW1lIGNvbnRyb2wgb3ZlciBkcml2ZXIgcG93ZXIgc3RhdGVzLCBjb25mdXNpbmcKQEAgLTEzOCwxOSArMTE3LDI1IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogV2hhdDoJUENNQ0lBIGNvbnRyb2wgaW9jdGwgKG5lZWRlZCBmb3IgcGNtY2lhLWNzIFtjYXJkbWdyLCBjYXJkY3RsXSkKLVdoZW46CU5vdmVtYmVyIDIwMDUKK1doZW46CTIuNi4zNS8yLjYuMzYKIEZpbGVzOglkcml2ZXJzL3BjbWNpYS86IHBjbWNpYV9pb2N0bC5jCiBXaHk6CVdpdGggdGhlIDE2LWJpdCBQQ01DSUEgc3Vic3lzdGVtIG5vdyBiZWhhdmluZyAoYWxtb3N0KSBsaWtlIGEKIAlub3JtYWwgaG90cGx1Z2dhYmxlIGJ1cywgYW5kIHdpdGggaXQgdXNpbmcgdGhlIGRlZmF1bHQga2VybmVsCiAJaW5mcmFzdHJ1Y3R1cmUgKGhvdHBsdWcsIGRyaXZlciBjb3JlLCBzeXNmcykga2VlcGluZyB0aGUgUENNQ0lBCiAJY29udHJvbCBpb2N0bCBuZWVkZWQgYnkgY2FyZG1nciBhbmQgY2FyZGN0bCBmcm9tIHBjbWNpYS1jcyBpcwotCXVubmVjZXNzYXJ5LCBhbmQgbWFrZXMgZnVydGhlciBjbGVhbnVwcyBhbmQgaW50ZWdyYXRpb24gb2YgdGhlCisJdW5uZWNlc3NhcnkgYW5kIHBvdGVudGlhbGx5IGhhcm1mdWwgKGl0IGRvZXMgbm90IHByb3ZpZGUgZm9yCisJcHJvcGVyIGxvY2tpbmcpLCBhbmQgbWFrZXMgZnVydGhlciBjbGVhbnVwcyBhbmQgaW50ZWdyYXRpb24gb2YgdGhlCiAJUENNQ0lBIHN1YnN5c3RlbSBpbnRvIHRoZSBMaW51eCBrZXJuZWwgZGV2aWNlIGRyaXZlciBtb2RlbCBtb3JlCiAJZGlmZmljdWx0LiBUaGUgZmVhdHVyZXMgcHJvdmlkZWQgYnkgY2FyZG1nciBhbmQgY2FyZGN0bCBhcmUgZWl0aGVyCiAJaGFuZGxlZCBieSB0aGUga2VybmVsIGl0c2VsZiBub3cgb3IgYXJlIGF2YWlsYWJsZSBpbiB0aGUgbmV3CiAJcGNtY2lhdXRpbHMgcGFja2FnZSBhdmFpbGFibGUgYXQKIAlodHRwOi8va2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL3BjbWNpYS8KLVdobzoJRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGJyb2RvLmRlPgorCisJRm9yIGFsbCBhcmNoaXRlY3R1cmVzIGV4Y2VwdCBBUk0sIHRoZSBhc3NvY2lhdGVkIGNvbmZpZyBzeW1ib2wKKwloYXMgYmVlbiByZW1vdmVkIGZyb20ga2VybmVsIDIuNi4zNDsgZm9yIEFSTSwgaXQgd2lsbCBiZSBsaWtlbHkKKwliZSByZW1vdmVkIGZyb20ga2VybmVsIDIuNi4zNS4gVGhlIGFjdHVhbCBjb2RlIHdpbGwgdGhlbiBsaWtlbHkKKwliZSByZW1vdmVkIGZyb20ga2VybmVsIDIuNi4zNi4KK1dobzoJRG9taW5payBCcm9kb3dza2kgPGxpbnV4QGRvbWluaWticm9kb3dza2kubmV0PgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNDY0LDEyICs0NDksNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoYXQ6CWFkdDc0NzMgaGFyZHdhcmUgbW9uaXRvcmluZyBkcml2ZXIKLVdoZW46CUZlYnJ1YXJ5IDIwMTAKLVdoeToJT2Jzb2xldGVkIGJ5IHRoZSBhZHQ3NDc1IGRyaXZlci4KLVdobzoJSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+Ci0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogV2hhdDoJU3VwcG9ydCBmb3IgbGNkX3N3aXRjaCBhbmQgZGlzcGxheV9nZXQgaW4gYXN1cy1sYXB0b3AgZHJpdmVyCiBXaGVuOglNYXJjaCAyMDEwCiBXaHk6CVRoZXNlIHR3byBmZWF0dXJlcyB1c2Ugbm9uLXN0YW5kYXJkIGludGVyZmFjZXMuIFRoZXJlIGFyZSB0aGUKQEAgLTU2MSwzICs1NDAsNDUgQEAKIAlhZHM3ODQ2IGRyaXZlciBub3cuIFByb3ZpZGVkIHRoYXQgdGhlIG9yaWdpbmFsIGRyaXZlciBpcyBub3QgZ2VuZXJpYwogCWFuZCBpcyBkaWZmaWN1bHQgdG8gbWFpbnRhaW4sIGl0IHdpbGwgYmUgcmVtb3ZlZCBsYXRlci4KIFdobzoJRXJpYyBNaWFvIDxlcmljLnkubWlhb0BnbWFpbC5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJY2FwaWZzCitXaGVuOglGZWJydWFyeSAyMDExCitGaWxlczoJZHJpdmVycy9pc2RuL2NhcGkvY2FwaWZzLioKK1doeToJdWRldiBmdWxseSByZXBsYWNlcyB0aGlzIHNwZWNpYWwgZmlsZSBzeXN0ZW0gdGhhdCBvbmx5IGNvbnRhaW5zIENBUEkKKwlOQ0NJIFRUWSBkZXZpY2Ugbm9kZXMuIFVzZXIgc3BhY2UgKHBwcGRjYXBpcGx1Z2luKSB3b3JrcyB3aXRob3V0CisJbm90aWNpbmcgdGhlIGRpZmZlcmVuY2UuCitXaG86CUphbiBLaXN6a2EgPGphbi5raXN6a2FAd2ViLmRlPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CUtWTSBtZW1vcnkgYWxpYXNlcyBzdXBwb3J0CitXaGVuOglKdWx5IDIwMTAKK1doeToJTWVtb3J5IGFsaWFzaW5nIHN1cHBvcnQgaXMgdXNlZCBmb3Igc3BlZWRpbmcgdXAgZ3Vlc3QgdmdhIGFjY2VzcworCXRocm91Z2ggdGhlIHZnYSB3aW5kb3dzLgorCisJTW9kZXJuIHVzZXJzcGFjZSBubyBsb25nZXIgdXNlcyB0aGlzIGZlYXR1cmUsIHNvIGl0J3MganVzdCBiaXRyb3R0ZWQKKwljb2RlIGFuZCBjYW4gYmUgcmVtb3ZlZCB3aXRoIG5vIGltcGFjdC4KK1dobzoJQXZpIEtpdml0eSA8YXZpQHJlZGhhdC5jb20+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV2hhdDoJS1ZNIGtlcm5lbC1hbGxvY2F0ZWQgbWVtb3J5IHNsb3RzCitXaGVuOglKdWx5IDIwMTAKK1doeToJU2luY2UgMi42LjI1LCBrdm0gc3VwcG9ydHMgdXNlci1hbGxvY2F0ZWQgbWVtb3J5IHNsb3RzLCB3aGljaCBhcmUKKwltdWNoIG1vcmUgZmxleGlibGUgdGhhbiBrZXJuZWwtYWxsb2NhdGVkIHNsb3RzLiAgQWxsIGN1cnJlbnQgdXNlcnNwYWNlCisJc3VwcG9ydHMgdGhlIG5ld2VyIGludGVyZmFjZSBhbmQgdGhpcyBjb2RlIGNhbiBiZSByZW1vdmVkIHdpdGggbm8KKwlpbXBhY3QuCitXaG86CUF2aSBLaXZpdHkgPGF2aUByZWRoYXQuY29tPgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1doYXQ6CUtWTSBwYXJhdmlydCBtbXUgaG9zdCBzdXBwb3J0CitXaGVuOglKYW51YXJ5IDIwMTEKK1doeToJVGhlIHBhcmF2aXJ0IG1tdSBob3N0IHN1cHBvcnQgaXMgc2xvd2VyIHRoYW4gbm9uLXBhcmF2aXJ0IG1tdSwgYm90aAorCW9uIG5ld2VyIGFuZCBvbGRlciBoYXJkd2FyZS4gIEl0IGlzIGFscmVhZHkgbm90IGV4cG9zZWQgdG8gdGhlIGd1ZXN0LAorCWFuZCBrZXB0IG9ubHkgZm9yIGxpdmUgbWlncmF0aW9uIHB1cnBvc2VzLgorV2hvOglBdmkgS2l2aXR5IDxhdmlAcmVkaGF0LmNvbT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy8wMC1JTkRFWCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvMDAtSU5ERVgKaW5kZXggODc1ZDQ5Ni4uM2JhZTQxOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zLzAwLUlOREVYCkBAIC0zMiw2ICszMiw4IEBACiAJLSBpbmZvIG9uIHRoZSB1c2Vyc3BhY2UgaW50ZXJmYWNlIHRvIHRoZSBPQ0ZTMiBETE0uCiBkbm90aWZ5LnR4dAogCS0gaW5mbyBhYm91dCBkaXJlY3Rvcnkgbm90aWZpY2F0aW9uIGluIExpbnV4LgorZG5vdGlmeV90ZXN0LmMKKwktIGV4YW1wbGUgcHJvZ3JhbSBmb3IgZG5vdGlmeQogZWNyeXB0ZnMudHh0CiAJLSBkb2NzIG9uIGVDcnlwdGZzOiBzdGFja2VkIGNyeXB0b2dyYXBoaWMgZmlsZXN5c3RlbSBmb3IgTGludXguCiBleG9mcy50eHQKQEAgLTYyLDYgKzY0LDggQEAKIAktIGluZm8gYW5kIG1vdW50IG9wdGlvbnMgZm9yIHRoZSBKRlMgZmlsZXN5c3RlbS4KIGxvY2tzLnR4dAogCS0gaW5mbyBvbiBmaWxlIGxvY2tpbmcgaW1wbGVtZW50YXRpb25zLCBmbG9jaygpIHZzLiBmY250bCgpLCBldGMuCitsb2dmcy50eHQKKwktIGluZm8gb24gdGhlIExvZ0ZTIGZsYXNoIGZpbGVzeXN0ZW0uCiBtYW5kYXRvcnktbG9ja2luZy50eHQKIAktIGluZm8gb24gdGhlIExpbnV4IGltcGxlbWVudGF0aW9uIG9mIFN5cyBWIG1hbmRhdG9yeSBmaWxlIGxvY2tpbmcuCiBuY3Bmcy50eHQKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZwppbmRleCAxOGI5ZDBjLi4wNmJiYmVkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nCkBAIC00NjAsMTMgKzQ2MCw2IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBkcXVvdF9vcGVyYXRpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHByb3RvdHlwZXM6Ci0JaW50ICgqaW5pdGlhbGl6ZSkgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwotCWludCAoKmRyb3ApIChzdHJ1Y3QgaW5vZGUgKik7Ci0JaW50ICgqYWxsb2Nfc3BhY2UpIChzdHJ1Y3QgaW5vZGUgKiwgcXNpemVfdCwgaW50KTsKLQlpbnQgKCphbGxvY19pbm9kZSkgKGNvbnN0IHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCBsb25nKTsKLQlpbnQgKCpmcmVlX3NwYWNlKSAoc3RydWN0IGlub2RlICosIHFzaXplX3QpOwotCWludCAoKmZyZWVfaW5vZGUpIChjb25zdCBzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQgbG9uZyk7Ci0JaW50ICgqdHJhbnNmZXIpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlhdHRyICopOwogCWludCAoKndyaXRlX2RxdW90KSAoc3RydWN0IGRxdW90ICopOwogCWludCAoKmFjcXVpcmVfZHF1b3QpIChzdHJ1Y3QgZHF1b3QgKik7CiAJaW50ICgqcmVsZWFzZV9kcXVvdCkgKHN0cnVjdCBkcXVvdCAqKTsKQEAgLTQ3OSwxMyArNDcyLDYgQEAKIFdoYXQgZmlsZXN5c3RlbSBzaG91bGQgZXhwZWN0IGZyb20gdGhlIGdlbmVyaWMgcXVvdGEgZnVuY3Rpb25zOgogCiAJCUZTIHJlY3Vyc2lvbglIZWxkIGxvY2tzIHdoZW4gY2FsbGVkCi1pbml0aWFsaXplOgl5ZXMJCW1heWJlIGRxb25vZmZfc2VtCi1kcm9wOgkJeWVzCQktCi1hbGxvY19zcGFjZToJLT5tYXJrX2RpcnR5KCkJLQotYWxsb2NfaW5vZGU6CS0+bWFya19kaXJ0eSgpCS0KLWZyZWVfc3BhY2U6CS0+bWFya19kaXJ0eSgpCS0KLWZyZWVfaW5vZGU6CS0+bWFya19kaXJ0eSgpCS0KLXRyYW5zZmVyOgl5ZXMJCS0KIHdyaXRlX2RxdW90Ogl5ZXMJCWRxb25vZmZfc2VtIG9yIGRxcHRyX3NlbQogYWNxdWlyZV9kcXVvdDoJeWVzCQlkcW9ub2ZmX3NlbSBvciBkcXB0cl9zZW0KIHJlbGVhc2VfZHF1b3Q6CXllcwkJZHFvbm9mZl9zZW0gb3IgZHFwdHJfc2VtCkBAIC00OTUsMTAgKzQ4MSw2IEBACiBGUyByZWN1cnNpb24gbWVhbnMgY2FsbGluZyAtPnF1b3RhX3JlYWQoKSBhbmQgLT5xdW90YV93cml0ZSgpIGZyb20gc3VwZXJibG9jawogb3BlcmF0aW9ucy4KIAotLT5hbGxvY19zcGFjZSgpLCAtPmFsbG9jX2lub2RlKCksIC0+ZnJlZV9zcGFjZSgpLCAtPmZyZWVfaW5vZGUoKSBhcmUgY2FsbGVkCi1vbmx5IGRpcmVjdGx5IGJ5IHRoZSBmaWxlc3lzdGVtIGFuZCBkbyBub3QgY2FsbCBhbnkgZnMgZnVuY3Rpb25zIG9ubHkKLXRoZSAtPm1hcmtfZGlydHkoKSBvcGVyYXRpb24uCi0KIE1vcmUgZGV0YWlscyBhYm91dCBxdW90YSBsb2NraW5nIGNhbiBiZSBmb3VuZCBpbiBmcy9kcXVvdC5jLgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gdm1fb3BlcmF0aW9uc19zdHJ1Y3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1ZGQxMTQKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorIyBrYnVpbGQgdHJpY2sgdG8gYXZvaWQgbGlua2VyIGVycm9yLiBDYW4gYmUgb21pdHRlZCBpZiBhIG1vZHVsZSBpcyBidWlsdC4KK29iai0gOj0gZHVtbXkubworCisjIExpc3Qgb2YgcHJvZ3JhbXMgdG8gYnVpbGQKK2hvc3Rwcm9ncy15IDo9IGRub3RpZnlfdGVzdAorCisjIFRlbGwga2J1aWxkIHRvIGFsd2F5cyBidWlsZCB0aGUgcHJvZ3JhbXMKK2Fsd2F5cyA6PSAkKGhvc3Rwcm9ncy15KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kbm90aWZ5LnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvZG5vdGlmeS50eHQKaW5kZXggOWY1ZDMzOC4uNmJhZjg4ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kbm90aWZ5LnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Rub3RpZnkudHh0CkBAIC02MiwzOCArNjIsOSBAQAogCiBFeGFtcGxlCiAtLS0tLS0tCitTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kbm90aWZ5X3Rlc3QuYyBmb3IgYW4gZXhhbXBsZS4KIAotCSNkZWZpbmUgX0dOVV9TT1VSQ0UJLyogbmVlZGVkIHRvIGdldCB0aGUgZGVmaW5lcyAqLwotCSNpbmNsdWRlIDxmY250bC5oPgkvKiBpbiBnbGliYyAyLjIgdGhpcyBoYXMgdGhlIG5lZWRlZAotCQkJCQkgICB2YWx1ZXMgZGVmaW5lZCAqLwotCSNpbmNsdWRlIDxzaWduYWwuaD4KLQkjaW5jbHVkZSA8c3RkaW8uaD4KLQkjaW5jbHVkZSA8dW5pc3RkLmg+Ci0KLQlzdGF0aWMgdm9sYXRpbGUgaW50IGV2ZW50X2ZkOwotCi0Jc3RhdGljIHZvaWQgaGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QgKnNpLCB2b2lkICpkYXRhKQotCXsKLQkJZXZlbnRfZmQgPSBzaS0+c2lfZmQ7Ci0JfQotCi0JaW50IG1haW4odm9pZCkKLQl7Ci0JCXN0cnVjdCBzaWdhY3Rpb24gYWN0OwotCQlpbnQgZmQ7Ci0KLQkJYWN0LnNhX3NpZ2FjdGlvbiA9IGhhbmRsZXI7Ci0JCXNpZ2VtcHR5c2V0KCZhY3Quc2FfbWFzayk7Ci0JCWFjdC5zYV9mbGFncyA9IFNBX1NJR0lORk87Ci0JCXNpZ2FjdGlvbihTSUdSVE1JTiArIDEsICZhY3QsIE5VTEwpOwotCi0JCWZkID0gb3BlbigiLiIsIE9fUkRPTkxZKTsKLQkJZmNudGwoZmQsIEZfU0VUU0lHLCBTSUdSVE1JTiArIDEpOwotCQlmY250bChmZCwgRl9OT1RJRlksIEROX01PRElGWXxETl9DUkVBVEV8RE5fTVVMVElTSE9UKTsKLQkJLyogd2Ugd2lsbCBub3cgYmUgbm90aWZpZWQgaWYgYW55IG9mIHRoZSBmaWxlcwotCQkgICBpbiAiLiIgaXMgbW9kaWZpZWQgb3IgbmV3IGZpbGVzIGFyZSBjcmVhdGVkICovCi0JCXdoaWxlICgxKSB7Ci0JCQlwYXVzZSgpOwotCQkJcHJpbnRmKCJHb3QgZXZlbnQgb24gZmQ9JWRcbiIsIGV2ZW50X2ZkKTsKLQkJfQotCX0KK05PVEUKKy0tLS0KK0JlZ2lubmluZyB3aXRoIExpbnV4IDIuNi4xMywgZG5vdGlmeSBoYXMgYmVlbiByZXBsYWNlZCBieSBpbm90aWZ5LgorU2VlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvaW5vdGlmeS50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2Rub3RpZnlfdGVzdC5jIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kbm90aWZ5X3Rlc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjM3YjRhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9kbm90aWZ5X3Rlc3QuYwpAQCAtMCwwICsxLDM0IEBACisjZGVmaW5lIF9HTlVfU09VUkNFCS8qIG5lZWRlZCB0byBnZXQgdGhlIGRlZmluZXMgKi8KKyNpbmNsdWRlIDxmY250bC5oPgkvKiBpbiBnbGliYyAyLjIgdGhpcyBoYXMgdGhlIG5lZWRlZAorCQkJCSAgIHZhbHVlcyBkZWZpbmVkICovCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworc3RhdGljIHZvbGF0aWxlIGludCBldmVudF9mZDsKKworc3RhdGljIHZvaWQgaGFuZGxlcihpbnQgc2lnLCBzaWdpbmZvX3QgKnNpLCB2b2lkICpkYXRhKQoreworCWV2ZW50X2ZkID0gc2ktPnNpX2ZkOworfQorCitpbnQgbWFpbih2b2lkKQoreworCXN0cnVjdCBzaWdhY3Rpb24gYWN0OworCWludCBmZDsKKworCWFjdC5zYV9zaWdhY3Rpb24gPSBoYW5kbGVyOworCXNpZ2VtcHR5c2V0KCZhY3Quc2FfbWFzayk7CisJYWN0LnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKKwlzaWdhY3Rpb24oU0lHUlRNSU4gKyAxLCAmYWN0LCBOVUxMKTsKKworCWZkID0gb3BlbigiLiIsIE9fUkRPTkxZKTsKKwlmY250bChmZCwgRl9TRVRTSUcsIFNJR1JUTUlOICsgMSk7CisJZmNudGwoZmQsIEZfTk9USUZZLCBETl9NT0RJRll8RE5fQ1JFQVRFfEROX01VTFRJU0hPVCk7CisJLyogd2Ugd2lsbCBub3cgYmUgbm90aWZpZWQgaWYgYW55IG9mIHRoZSBmaWxlcworCSAgIGluICIuIiBpcyBtb2RpZmllZCBvciBuZXcgZmlsZXMgYXJlIGNyZWF0ZWQgKi8KKwl3aGlsZSAoMSkgeworCQlwYXVzZSgpOworCQlwcmludGYoIkdvdCBldmVudCBvbiBmZD0lZFxuIiwgZXZlbnRfZmQpOworCX0KK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbG9nZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9sb2dmcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY0Yzk0YgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbG9nZnMudHh0CkBAIC0wLDAgKzEsMjQxIEBACisKK1RoZSBMb2dGUyBGbGFzaCBGaWxlc3lzdGVtCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitTcGVjaWZpY2F0aW9uCis9PT09PT09PT09PT09CisKK1N1cGVyYmxvY2tzCistLS0tLS0tLS0tLQorCitUd28gc3VwZXJibG9ja3MgZXhpc3QgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBmaWxlc3lzdGVtLgorRWFjaCBzdXBlcmJsb2NrIGlzIDI1NiBCeXRlcyBsYXJnZSwgd2l0aCBhbm90aGVyIDM4NDAgQnl0ZXMgcmVzZXJ2ZWQKK2ZvciBmdXR1cmUgcHVycG9zZXMsIG1ha2luZyBhIHRvdGFsIG9mIDQwOTYgQnl0ZXMuCisKK1N1cGVyYmxvY2sgbG9jYXRpb25zIG1heSBkaWZmZXIgZm9yIE1URCBhbmQgYmxvY2sgZGV2aWNlcy4gIE9uIE1URCB0aGUKK2ZpcnN0IG5vbi1iYWQgYmxvY2sgY29udGFpbnMgYSBzdXBlcmJsb2NrIGluIHRoZSBmaXJzdCA0MDk2IEJ5dGVzIGFuZAordGhlIGxhc3Qgbm9uLWJhZCBibG9jayBjb250YWlucyBhIHN1cGVyYmxvY2sgaW4gdGhlIGxhc3QgNDA5NiBCeXRlcy4KK09uIGJsb2NrIGRldmljZXMsIHRoZSBmaXJzdCA0MDk2IEJ5dGVzIG9mIHRoZSBkZXZpY2UgY29udGFpbiB0aGUgZmlyc3QKK3N1cGVyYmxvY2sgYW5kIHRoZSBsYXN0IGFsaWduZWQgNDA5NiBCeXRlLWJsb2NrIGNvbnRhaW5zIHRoZSBzZWNvbmQKK3N1cGVyYmxvY2suCisKK0ZvciB0aGUgbW9zdCBwYXJ0LCB0aGUgc3VwZXJibG9ja3MgY2FuIGJlIGNvbnNpZGVyZWQgcmVhZC1vbmx5LiAgVGhleQorYXJlIHdyaXR0ZW4gb25seSB0byBjb3JyZWN0IGVycm9ycyBkZXRlY3RlZCB3aXRoaW4gdGhlIHN1cGVyYmxvY2tzLAorbW92ZSB0aGUgam91cm5hbCBhbmQgY2hhbmdlIHRoZSBmaWxlc3lzdGVtIHBhcmFtZXRlcnMgdGhyb3VnaCB0dW5lZnMuCitBcyBhIHJlc3VsdCwgdGhlIHN1cGVyYmxvY2sgZG9lcyBub3QgY29udGFpbiBhbnkgZmllbGRzIHRoYXQgcmVxdWlyZQorY29uc3RhbnQgdXBkYXRlcywgbGlrZSB0aGUgYW1vdW50IG9mIGZyZWUgc3BhY2UsIGV0Yy4KKworU2VnbWVudHMKKy0tLS0tLS0tCisKK1RoZSBzcGFjZSBpbiB0aGUgZGV2aWNlIGlzIHNwbGl0IHVwIGludG8gZXF1YWwtc2l6ZWQgc2VnbWVudHMuCitTZWdtZW50cyBhcmUgdGhlIHByaW1hcnkgd3JpdGUgdW5pdCBvZiBMb2dGUy4gIFdpdGhpbiBlYWNoIHNlZ21lbnRzLAord3JpdGVzIGhhcHBlbiBmcm9tIGZyb250IChsb3cgYWRkcmVzc2VzKSB0byBiYWNrIChoaWdoIGFkZHJlc3Nlcy4gIElmCitvbmx5IGEgcGFydGlhbCBzZWdtZW50IGhhcyBiZWVuIHdyaXR0ZW4sIHRoZSBzZWdtZW50IG51bWJlciwgdGhlCitjdXJyZW50IHBvc2l0aW9uIHdpdGhpbiBhbmQgb3B0aW9uYWxseSBhIHdyaXRlIGJ1ZmZlciBhcmUgc3RvcmVkIGluCit0aGUgam91cm5hbC4KKworU2VnbWVudHMgYXJlIGVyYXNlZCBhcyBhIHdob2xlLiAgVGhlcmVmb3JlIEdhcmJhZ2UgQ29sbGVjdGlvbiBtYXkgYmUKK3JlcXVpcmVkIHRvIGNvbXBsZXRlbHkgZnJlZSBhIHNlZ21lbnQgYmVmb3JlIGRvaW5nIHNvLgorCitKb3VybmFsCistLS0tLS0tLQorCitUaGUgam91cm5hbCBjb250YWlucyBhbGwgZ2xvYmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWxlc3lzdGVtIHRoYXQKK2lzIHN1YmplY3QgdG8gZnJlcXVlbnQgY2hhbmdlLiAgQXQgbW91bnQgdGltZSwgaXQgaGFzIHRvIGJlIHNjYW5uZWQKK2ZvciB0aGUgbW9zdCByZWNlbnQgY29tbWl0IGVudHJ5LCB3aGljaCBjb250YWlucyBhIGxpc3Qgb2YgcG9pbnRlcnMgdG8KK2FsbCBjdXJyZW50bHkgdmFsaWQgZW50cmllcy4KKworT2JqZWN0IFN0b3JlCistLS0tLS0tLS0tLS0KKworQWxsIHNwYWNlIGV4Y2VwdCBmb3IgdGhlIHN1cGVyYmxvY2tzIGFuZCBqb3VybmFsIGlzIHBhcnQgb2YgdGhlIG9iamVjdAorc3RvcmUuICBFYWNoIHNlZ21lbnQgY29udGFpbnMgYSBzZWdtZW50IGhlYWRlciBhbmQgYSBudW1iZXIgb2YKK29iamVjdHMsIGVhY2ggY29uc2lzdGluZyBvZiB0aGUgb2JqZWN0IGhlYWRlciBhbmQgdGhlIHBheWxvYWQuCitPYmplY3RzIGFyZSBlaXRoZXIgaW5vZGVzLCBkaXJlY3RvcnkgZW50cmllcyAoZGVudHJpZXMpLCBmaWxlIGRhdGEKK2Jsb2NrcyBvciBpbmRpcmVjdCBibG9ja3MuCisKK0xldmVscworLS0tLS0tCisKK0dhcmJhZ2UgY29sbGVjdGlvbiAoR0MpIG1heSBmYWlsIGlmIGFsbCBkYXRhIGlzIHdyaXR0ZW4KK2luZGlzY3JpbWluYXRlbHkuICBPbmUgcmVxdWlyZW1lbnQgb2YgR0MgaXMgdGhhdCBkYXRhIGlzIHNlcGVyYXRlZAorcm91Z2hseSBhY2NvcmRpbmcgdG8gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlIHRyZWUgcm9vdCBhbmQgdGhlIGRhdGEuCitFZmZlY3RpdmVseSB0aGF0IG1lYW5zIGFsbCBmaWxlIGRhdGEgaXMgb24gbGV2ZWwgMCwgaW5kaXJlY3QgYmxvY2tzCithcmUgb24gbGV2ZWxzIDEsIDIsIDMgNCBvciA1IGZvciAxeCwgMngsIDN4LCA0eCBvciA1eCBpbmRpcmVjdCBibG9ja3MsCityZXNwZWN0aXZlbHkuICBJbm9kZSBmaWxlIGRhdGEgaXMgb24gbGV2ZWwgNiBmb3IgdGhlIGlub2RlcyBhbmQgNy0xMQorZm9yIGluZGlyZWN0IGJsb2Nrcy4KKworRWFjaCBzZWdtZW50IGNvbnRhaW5zIG9iamVjdHMgb2YgYSBzaW5nbGUgbGV2ZWwgb25seS4gIEFzIGEgcmVzdWx0LAorZWFjaCBsZXZlbCByZXF1aXJlcyBpdHMgb3duIHNlcGVyYXRlIHNlZ21lbnQgdG8gYmUgb3BlbiBmb3Igd3JpdGluZy4KKworSW5vZGUgRmlsZQorLS0tLS0tLS0tLQorCitBbGwgaW5vZGVzIGFyZSBzdG9yZWQgaW4gYSBzcGVjaWFsIGZpbGUsIHRoZSBpbm9kZSBmaWxlLiAgU2luZ2xlCitleGNlcHRpb24gaXMgdGhlIGlub2RlIGZpbGUncyBpbm9kZSAobWFzdGVyIGlub2RlKSB3aGljaCBmb3Igb2J2aW91cworcmVhc29ucyBpcyBzdG9yZWQgaW4gdGhlIGpvdXJuYWwgaW5zdGVhZC4gIEluc3RlYWQgb2YgZGF0YSBibG9ja3MsIHRoZQorbGVhZiBub2RlcyBvZiB0aGUgaW5vZGUgZmlsZXMgYXJlIGlub2Rlcy4KKworQWxpYXNlcworLS0tLS0tLQorCitXcml0ZXMgaW4gTG9nRlMgYXJlIGRvbmUgYnkgbWVhbnMgb2YgYSB3YW5kZXJpbmcgdHJlZS4gIEEgbmHDr3ZlCitpbXBsZW1lbnRhdGlvbiB3b3VsZCByZXF1aXJlIHRoYXQgZm9yIGVhY2ggd3JpdGUgb3IgYSBibG9jaywgYWxsCitwYXJlbnQgYmxvY2tzIGFyZSB3cml0dGVuIGFzIHdlbGwsIHNpbmNlIHRoZSBibG9jayBwb2ludGVycyBoYXZlCitjaGFuZ2VkLiAgU3VjaCBhbiBpbXBsZW1lbnRhdGlvbiB3b3VsZCBub3QgYmUgdmVyeSBlZmZpY2llbnQuCisKK0luIExvZ0ZTLCB0aGUgYmxvY2sgcG9pbnRlciBjaGFuZ2VzIGFyZSBjYWNoZWQgaW4gdGhlIGpvdXJuYWwgYnkgbWVhbnMKK29mIGFsaWFzIGVudHJpZXMuICBFYWNoIGFsaWFzIGNvbnNpc3RzIG9mIGl0cyBsb2dpY2FsIGFkZHJlc3MgLSBpbm9kZQorbnVtYmVyLCBibG9jayBpbmRleCwgbGV2ZWwgYW5kIGNoaWxkIG51bWJlciAoaW5kZXggaW50byBibG9jaykgLSBhbmQKK3RoZSBjaGFuZ2VkIGRhdGEuICBBbnkgOC1ieXRlIHdvcmQgY2FuIGJlIGNoYW5nZXMgaW4gdGhpcyBtYW5uZXIuCisKK0N1cnJlbnRseSBhbGlhc2VzIGFyZSB1c2VkIGZvciBibG9jayBwb2ludGVycywgZmlsZSBzaXplLCBmaWxlIHVzZWQKK2J5dGVzIGFuZCB0aGUgaGVpZ2h0IG9mIGFuIGlub2RlcyBpbmRpcmVjdCB0cmVlLgorCitTZWdtZW50IEFsaWFzZXMKKy0tLS0tLS0tLS0tLS0tLQorCitSZWxhdGVkIHRvIHJlZ3VsYXIgYWxpYXNlcywgdGhlc2UgYXJlIHVzZWQgdG8gaGFuZGxlIGJhZCBibG9ja3MuCitJbml0aWFsbHksIGJhZCBibG9ja3MgYXJlIGhhbmRsZWQgYnkgbW92aW5nIHRoZSBhZmZlY3RlZCBzZWdtZW50Citjb250ZW50IHRvIGEgc3BhcmUgc2VnbWVudCBhbmQgbm90aW5nIHRoaXMgbW92ZSBpbiB0aGUgam91cm5hbCB3aXRoIGEKK3NlZ21lbnQgYWxpYXMsIGEgc2ltcGxlICh0bywgZnJvbSkgdHVwZWwuICBHQyB3aWxsIGxhdGVyIGVtcHR5IHRoaXMKK3NlZ21lbnQgYW5kIHRoZSBhbGlhcyBjYW4gYmUgcmVtb3ZlZCBhZ2Fpbi4gIFRoaXMgaXMgdXNlZCBvbiBNVEQgb25seS4KKworVmltCistLS0KKworQnkgY2xldmVybHkgcHJlZGljdGluZyB0aGUgbGlmZSB0aW1lIG9mIGRhdGEsIGl0IGlzIHBvc3NpYmxlIHRvCitzZXBlcmF0ZSBsb25nLWxpdmluZyBkYXRhIGZyb20gc2hvcnQtbGl2aW5nIGRhdGEgYW5kIHRoZXJlYnkgcmVkdWNlCit0aGUgR0Mgb3ZlcmhlYWQgbGF0ZXIuICBFYWNoIHR5cGUgb2YgZGlzdGluYyBsaWZlIGV4cGVjdGVuY3kgKHZpbSkgY2FuCitoYXZlIGEgc2VwZXJhdGUgc2VnbWVudCBvcGVuIGZvciB3cml0aW5nLiAgRWFjaCAobGV2ZWwsIHZpbSkgdHVwZWwgY2FuCitiZSBvcGVuIGp1c3Qgb25jZS4gIElmIGFuIG9wZW4gc2VnbWVudCB3aXRoIHVua25vd24gdmltIGlzIGVuY291bnRlcmVkCithdCBtb3VudCB0aW1lLCBpdCBpcyBjbG9zZWQgYW5kIGlnbm9yZWQgaGVuY2Vmb3J0aC4KKworSW5kaXJlY3QgVHJlZQorLS0tLS0tLS0tLS0tLQorCitJbm9kZXMgaW4gTG9nRlMgYXJlIHNpbWlsYXIgdG8gRkZTLXN0eWxlIGZpbGVzeXN0ZW1zIHdpdGggZGlyZWN0IGFuZAoraW5kaXJlY3QgYmxvY2sgcG9pbnRlcnMuICBPbmUgZGlmZmVyZW5jZSBpcyB0aGF0IExvZ0ZTIHVzZXMgYSBzaW5nbGUKK2luZGlyZWN0IHBvaW50ZXIgdGhhdCBjYW4gYmUgZWl0aGVyIGEgMXgsIDJ4LCBldGMuIGluZGlyZWN0IHBvaW50ZXIuCitBIGhlaWdodCBmaWVsZCBpbiB0aGUgaW5vZGUgZGVmaW5lcyB0aGUgaGVpZ2h0IG9mIHRoZSBpbmRpcmVjdCB0cmVlCithbmQgdGhlcmVieSB0aGUgaW5kaXJlY3Rpb24gb2YgdGhlIHBvaW50ZXIuCisKK0Fub3RoZXIgZGlmZmVyZW5jZSBpcyB0aGUgYWRkcmVzc2luZyBvZiBpbmRpcmVjdCBibG9ja3MuICBJbiBMb2dGUywKK3RoZSBmaXJzdCAxNiBwb2ludGVycyBpbiB0aGUgZmlyc3QgaW5kaXJlY3QgYmxvY2sgYXJlIGxlZnQgZW1wdHksCitjb3JyZXNwb25kaW5nIHRvIHRoZSAxNiBkaXJlY3QgcG9pbnRlcnMgaW4gdGhlIGlub2RlLiAgSW4gZXh0MiAobWF5YmUKK290aGVycyBhcyB3ZWxsKSB0aGUgZmlyc3QgcG9pbnRlciBpbiB0aGUgZmlyc3QgaW5kaXJlY3QgYmxvY2sKK2NvcnJlc3BvbmRzIHRvIGxvZ2ljYWwgYmxvY2sgMTIsIHNraXBwaW5nIHRoZSAxMiBkaXJlY3QgcG9pbnRlcnMuCitTbyB3aGVyZSBleHQyIGlzIHVzaW5nIGFyaXRobWV0aWMgdG8gYmV0dGVyIHV0aWxpemUgc3BhY2UsIExvZ0ZTIGtlZXBzCithcml0aG1ldGljIHNpbXBsZSBhbmQgdXNlcyBjb21wcmVzc2lvbiB0byBzYXZlIHNwYWNlLgorCitDb21wcmVzc2lvbgorLS0tLS0tLS0tLS0KKworQm90aCBmaWxlIGRhdGEgYW5kIG1ldGFkYXRhIGNhbiBiZSBjb21wcmVzc2VkLiAgQ29tcHJlc3Npb24gZm9yIGZpbGUKK2RhdGEgY2FuIGJlIGVuYWJsZWQgd2l0aCBjaGF0dHIgK2MgYW5kIGRpc2FibGVkIHdpdGggY2hhdHRyIC1jLiAgRG9pbmcKK3NvIGhhcyBubyBlZmZlY3Qgb24gZXhpc3RpbmcgZGF0YSwgYnV0IG5ldyBkYXRhIHdpbGwgYmUgc3RvcmVkCithY2NvcmRpbmdseS4gIE5ldyBpbm9kZXMgd2lsbCBpbmhlcml0IHRoZSBjb21wcmVzc2lvbiBmbGFnIG9mIHRoZQorcGFyZW50IGRpcmVjdG9yeS4KKworTWV0YWRhdGEgaXMgYWx3YXlzIGNvbXByZXNzZWQuICBIb3dldmVyLCB0aGUgc3BhY2UgYWNjb3VudGluZyBpZ25vcmVzCit0aGlzIGFuZCBjaGFyZ2VzIGZvciB0aGUgdW5jb21wcmVzc2VkIHNpemUuICBGYWlsaW5nIHRvIGRvIHNvIGNvdWxkCityZXN1bHQgaW4gR0MgZmFpbHVyZXMgd2hlbiwgYWZ0ZXIgbW92aW5nIHNvbWUgZGF0YSwgaW5kaXJlY3QgYmxvY2tzCitjb21wcmVzcyB3b3JzZSB0aGFuIHByZXZpb3VzbHkuICBFdmVuIG9uIGEgMTAwJSBmdWxsIG1lZGl1bSwgR0MgbWF5Citub3QgY29uc3VtZSBhbnkgZXh0cmEgc3BhY2UsIHNvIHRoZSBjb21wcmVzc2lvbiBnYWlucyBhcmUgbG9zdCBzcGFjZQordG8gdGhlIHVzZXIuCisKK0hvd2V2ZXIsIHRoZXkgYXJlIG5vdCBsb3N0IHNwYWNlIHRvIHRoZSBmaWxlc3lzdGVtIGludGVybmFscy4gIEJ5CitjaGVhdGluZyB0aGUgdXNlciBmb3IgdGhvc2UgYnl0ZXMsIHRoZSBmaWxlc3lzdGVtIGdhaW5lZCBzb21lIHNsYWNrCitzcGFjZSBhbmQgR0Mgd2lsbCBydW4gbGVzcyBvZnRlbiBhbmQgZmFzdGVyLgorCitHYXJiYWdlIENvbGxlY3Rpb24gYW5kIFdlYXIgTGV2ZWxpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitHYXJiYWdlIGNvbGxlY3Rpb24gaXMgaW52b2tlZCB3aGVuZXZlciB0aGUgbnVtYmVyIG9mIGZyZWUgc2VnbWVudHMKK2ZhbGxzIGJlbG93IGEgdGhyZXNob2xkLiAgVGhlIGJlc3QgKGtub3duKSBjYW5kaWRhdGUgaXMgcGlja2VkIGJhc2VkCitvbiB0aGUgbGVhc3QgYW1vdW50IG9mIHZhbGlkIGRhdGEgY29udGFpbmVkIGluIHRoZSBzZWdtZW50LiAgQWxsCityZW1haW5pbmcgdmFsaWQgZGF0YSBpcyBjb3BpZWQgZWxzZXdoZXJlLCB0aGVyZWJ5IGludmFsaWRhdGluZyBpdC4KKworVGhlIEdDIGNvZGUgYWxzbyBjaGVja3MgZm9yIGFsaWFzZXMgYW5kIHdyaXRlcyB0aGVuIGJhY2sgaWYgdGhlaXIKK251bWJlciBnZXRzIHRvbyBsYXJnZS4KKworV2VhciBsZXZlbGluZyBpcyBkb25lIGJ5IG9jY2FzaW9uYWxseSBwaWNraW5nIGEgc3Vib3B0aW1hbCBzZWdtZW50IGZvcgorZ2FyYmFnZSBjb2xsZWN0aW9uLiAgSWYgYSBzdGFsZSBzZWdtZW50cyBlcmFzZSBjb3VudCBpcyBzaWduaWZpY2FudGx5Citsb3dlciB0aGFuIHRoZSBhY3RpdmUgc2VnbWVudHMnIGVyYXNlIGNvdW50cywgaXQgd2lsbCBiZSBwaWNrZWQuICBXZWFyCitsZXZlbGluZyBpcyByYXRlIGxpbWl0ZWQsIHNvIGl0IHdpbGwgbmV2ZXIgbW9ub3BvbGl6ZSB0aGUgZGV2aWNlIGZvcgorbW9yZSB0aGFuIG9uZSBzZWdtZW50IHdvcnRoIGF0IGEgdGltZS4KKworVmFsdWVzIGZvciAib2NjYXNpb25hbGx5IiwgInNpZ25pZmljYW50bHkgbG93ZXIiIGFyZSBjb21waWxlIHRpbWUKK2NvbnN0YW50cy4KKworSGFzaGVkIGRpcmVjdG9yaWVzCistLS0tLS0tLS0tLS0tLS0tLS0KKworVG8gc2F0aXNmeSBlZmZpY2llbnQgbG9va3VwKCksIGRpcmVjdG9yeSBlbnRyaWVzIGFyZSBoYXNoZWQgYW5kCitsb2NhdGVkIGJhc2VkIG9uIHRoZSBoYXNoLiAgSW4gb3JkZXIgdG8gYm90aCBzdXBwb3J0IGxhcmdlIGRpcmVjdG9yaWVzCithbmQgbm90IGJlIG92ZXJseSBpbmVmZmljaWVudCBmb3Igc21hbGwgZGlyZWN0b3JpZXMsIHNldmVyYWwgaGFzaAordGFibGVzIG9mIGluY3JlYXNpbmcgc2l6ZSBhcmUgdXNlZC4gIEZvciBlYWNoIHRhYmxlLCB0aGUgaGFzaCB2YWx1ZQorbW9kdWxvIHRoZSB0YWJsZSBzaXplIGdpdmVzIHRoZSB0YWJsZSBpbmRleC4KKworVGFibGVzIHNpemVzIGFyZSBjaG9zZW4gdG8gbGltaXQgdGhlIG51bWJlciBvZiBpbmRpcmVjdCBibG9ja3Mgd2l0aCBhCitmdWxseSBwb3B1bGF0ZWQgdGFibGUgdG8gMCwgMSwgMiBvciAzIHJlc3BlY3RpdmVseS4gIFNvIHRoZSBmaXJzdAordGFibGUgY29udGFpbnMgMTYgZW50cmllcywgdGhlIHNlY29uZCA1MTItMTYsIGV0Yy4KKworVGhlIGxhc3QgdGFibGUgaXMgc3BlY2lhbCBpbiBzZXZlcmFsIHdheXMuICBGaXJzdCBpdHMgc2l6ZSBkZXBlbmRzIG9uCit0aGUgZWZmZWN0aXZlIDMyYml0IGxpbWl0IG9uIHRlbGxkaXIvc2Vla2RpciBjb29raWVzLiAgU2luY2UgbG9nZnMKK3VzZXMgdGhlIHVwcGVyIGhhbGYgb2YgdGhlIGFkZHJlc3Mgc3BhY2UgZm9yIGluZGlyZWN0IGJsb2NrcywgdGhlIHNpemUKK2lzIGxpbWl0ZWQgdG8gMl4zMS4gIFNlY29uZGx5IHRoZSB0YWJsZSBjb250YWlucyBoYXNoIGJ1Y2tldHMgd2l0aCAxNgorZW50cmllcyBlYWNoLgorCitVc2luZyBzaW5nbGUtZW50cnkgYnVja2V0cyB3b3VsZCByZXN1bHQgaW4gYmlydGhkYXkgImF0dGFja3MiLiAgQXQKK2p1c3QgMl4xNiB1c2VkIGVudHJpZXMsIGhhc2ggY29sbGlzaW9ucyB3b3VsZCBiZSBsaWtlbHkgKFAgPj0gMC41KS4KK015IG1hdGggc2tpbGxzIGFyZSBpbnN1ZmZpY2llbnQgdG8gZG8gdGhlIGNvbWJpbmF0b3JpY3MgZm9yIHRoZSAxN3gKK2NvbGxpc2lvbnMgbmVjZXNzYXJ5IHRvIG92ZXJmbG93IGEgYnVja2V0LCBidXQgdGVzdGluZyBzaG93ZWQgdGhhdCBpbgorMTAsMDAwIHJ1bnMgdGhlIGxvd2VzdCBkaXJlY3RvcnkgZmlsbCBiZWZvcmUgYSBidWNrZXQgb3ZlcmZsb3cgd2FzCisxODgsMDU3LDEzMCBlbnRyaWVzIHdpdGggYW4gYXZlcmFnZSBvZiAzMTUsMTQ5LDkxNSBlbnRyaWVzLiAgU28gZm9yCitkaXJlY3Rvcnkgc2l6ZXMgb2YgdXAgdG8gYSBtaWxsaW9uLCBidWNrZXQgb3ZlcmZsb3dzIHNob3VsZCBiZQordmlydHVhbGx5IGltcG9zc2libGUgdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMuCisKK1dpdGggY2FyZWZ1bGx5IGNob3NlbiBmaWxlbmFtZXMsIGl0IGlzIG9idmlvdXNseSBwb3NzaWJsZSB0byBjYXVzZSBhbgorb3ZlcmZsb3cgd2l0aCBqdXN0IDIxIGVudHJpZXMgKDQgaGlnaGVyIHRhYmxlcyArIDE2IGVudHJpZXMgKyAxKS4gIFNvCit0aGVyZSBtYXkgYmUgYSBzZWN1cml0eSBjb25jZXJuIGlmIGEgbWFsaWNpb3VzIHVzZXIgaGFzIHdyaXRlIGFjY2VzcwordG8gYSBkaXJlY3RvcnkuCisKK09wZW4gRm9yIERpc2N1c3Npb24KKz09PT09PT09PT09PT09PT09PT0KKworRGV2aWNlIEFkZHJlc3MgU3BhY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgZGV2aWNlIGFkZHJlc3Mgc3BhY2UgaXMgdXNlZCBmb3IgY2FjaGluZy4gIEJvdGggYmxvY2sgZGV2aWNlcyBhbmQKK01URCBwcm92aWRlIGZ1bmN0aW9ucyB0byBlaXRoZXIgcmVhZCBhIHNpbmdsZSBwYWdlIG9yIHdyaXRlIGEgc2VnbWVudC4KK1BhcnRpYWwgc2VnbWVudHMgbWF5IGJlIHdyaXR0ZW4gZm9yIGRhdGEgaW50ZWdyaXR5LCBidXQgd2hlcmUgcG9zc2libGUKK2NvbXBsZXRlIHNlZ21lbnRzIGFyZSB3cml0dGVuIGZvciBwZXJmb3JtYW5jZSBvbiBzaW1wbGUgYmxvY2sgZGV2aWNlCitmbGFzaCBtZWRpYS4KKworTWV0YSBJbm9kZXMKKy0tLS0tLS0tLS0tCisKK0lub2RlcyBhcmUgc3RvcmVkIGluIHRoZSBpbm9kZSBmaWxlLCB3aGljaCBpcyBqdXN0IGEgcmVndWxhciBmaWxlIGZvcgorbW9zdCBwdXJwb3Nlcy4gIEF0IHVtb3VudCB0aW1lLCBob3dldmVyLCB0aGUgaW5vZGUgZmlsZSBuZWVkcyB0bworcmVtYWluIG9wZW4gdW50aWwgYWxsIGRpcnR5IGlub2RlcyBhcmUgd3JpdHRlbi4gIFNvCitnZW5lcmljX3NodXRkb3duX3N1cGVyKCkgbWF5IG5vdCBjbG9zZSB0aGlzIGlub2RlLCBidXQgc2hvdWxkbid0Citjb21wbGFpbiBhYm91dCByZW1haW5pbmcgaW5vZGVzIGR1ZSB0byB0aGUgaW5vZGUgZmlsZSBlaXRoZXIuICBTYW1lCitnb2VzIGZvciBtYXBwaW5nIGlub2RlIG9mIHRoZSBkZXZpY2UgYWRkcmVzcyBzcGFjZS4KKworQ3VycmVudGx5IGxvZ2ZzIHVzZXMgYSBoYWNrIHRoYXQgZXNzZW50aWFsbHkgY29waWVzIHBhcnQgb2YgZnMvaW5vZGUuYworY29kZSBvdmVyLiAgQSBnZW5lcmFsIHNvbHV0aW9uIHdvdWxkIGJlIHByZWZlcnJlZC4KKworSW5kaXJlY3QgYmxvY2sgbWFwcGluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaXRoIGNvbXByZXNzaW9uLCB0aGUgYmxvY2sgZGV2aWNlIChvciBtYXBwaW5nIGlub2RlKSBjYW5ub3QgYmUgdXNlZAordG8gY2FjaGUgaW5kaXJlY3QgYmxvY2tzLiAgU29tZSBvdGhlciBwbGFjZSBpcyByZXF1aXJlZC4gIEN1cnJlbnRseQorbG9nZnMgdXNlcyB0aGUgdG9wIGhhbGYgb2YgZWFjaCBpbm9kZSdzIGFkZHJlc3Mgc3BhY2UuICBUaGUgbG93IDhUQgorKG9uIDMyYml0KSBhcmUgZmlsbGVkIHdpdGggZmlsZSBkYXRhLCB0aGUgaGlnaCA4VEIgYXJlIHVzZWQgZm9yCitpbmRpcmVjdCBibG9ja3MuCisKK09uZSBwcm9ibGVtIGlzIHRoYXQgMTZUQiBmaWxlcyBjcmVhdGVkIG9uIDY0Yml0IHN5c3RlbXMgYWN0dWFsbHkgaGF2ZQorZGF0YSBpbiB0aGUgdG9wIDhUQi4gIEJ1dCBmaWxlcyA+MTZUQiB3b3VsZCBjYXVzZSBwcm9ibGVtcyBhbnl3YXksIHNvCitvbmx5IHRoZSBsaW1pdCBoYXMgY2hhbmdlZC4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mczQxLXNlcnZlci50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25mcy9uZnM0MS1zZXJ2ZXIudHh0CmluZGV4IDFiZDBkMGMuLjZhNTNhODQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmZzL25mczQxLXNlcnZlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvbmZzNDEtc2VydmVyLnR4dApAQCAtMTcsOCArMTcsNyBAQAogb24gb3Igb2ZmOyBycGMubmZzZCBkb2VzIHRoaXMgY29ycmVjdGx5LikKIAogVGhlIE5GU3Y0IG1pbm9ydmVyc2lvbiAxIChORlN2NC4xKSBpbXBsZW1lbnRhdGlvbiBpbiBuZnNkIGlzIGJhc2VkCi1vbiB0aGUgbGF0ZXN0IE5GU3Y0LjEgSW50ZXJuZXQgRHJhZnQ6Ci1odHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLW5mc3Y0LW1pbm9ydmVyc2lvbjEtMjkKK29uIFJGQyA1NjYxLgogCiBGcm9tIHRoZSBtYW55IG5ldyBmZWF0dXJlcyBpbiBORlN2NC4xIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uCiBmb2N1c2VzIG9uIHRoZSBtYW5kYXRvcnktdG8taW1wbGVtZW50IE5GU3Y0LjEgU2Vzc2lvbnMsIHByb3ZpZGluZwpAQCAtNDQsNyArNDMsNyBAQAogCSAgdHJ1bmtpbmcsIGJ1dCB0aGlzIGlzIGEgbWFuZGF0b3J5IGZlYXR1cmUsIGFuZCBpdHMgdXNlIGlzCiAJICByZWNvbW1lbmRlZCB0byBjbGllbnRzIGluIGEgbnVtYmVyIG9mIHBsYWNlcy4gIChFLmcuIHRvIGVuc3VyZQogCSAgdGltZWx5IHJlbmV3YWwgaW4gY2FzZSBhbiBleGlzdGluZyBjb25uZWN0aW9uJ3MgcmV0cnkgdGltZW91dHMKLQkgIGhhdmUgZ290dGVuIHRvbyBsb25nOyBzZWUgc2VjdGlvbiA4LjMgb2YgdGhlIGRyYWZ0LikKKwkgIGhhdmUgZ290dGVuIHRvbyBsb25nOyBzZWUgc2VjdGlvbiA4LjMgb2YgdGhlIFJGQy4pCiAJICBUaGVyZWZvcmUsIGxhY2sgb2YgdGhpcyBmZWF0dXJlIG1heSBjYXVzZSBmdXR1cmUgY2xpZW50cyB0bwogCSAgZmFpbC4KIAktIEluY29tcGxldGUgYmFja2NoYW5uZWwgc3VwcG9ydDogaW5jb21wbGV0ZSBiYWNrY2hhbm5lbCBnc3MKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmlsZnMyLnR4dCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbmlsZnMyLnR4dAppbmRleCA4MzllZmQ4Li5jZjZkMGQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL25pbGZzMi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uaWxmczIudHh0CkBAIC03NCw2ICs3NCw5IEBACiAJCQlUaGlzIGRpc2FibGVzIGV2ZXJ5IHdyaXRlIGFjY2VzcyBvbiB0aGUgZGV2aWNlIGZvcgogCQkJcmVhZC1vbmx5IG1vdW50cyBvciBzbmFwc2hvdHMuICBUaGlzIG9wdGlvbiB3aWxsIGZhaWwKIAkJCWZvciByL3cgbW91bnRzIG9uIGFuIHVuY2xlYW4gdm9sdW1lLgorZGlzY2FyZAkJCUlzc3VlIGRpc2NhcmQvVFJJTSBjb21tYW5kcyB0byB0aGUgdW5kZXJseWluZyBibG9jaworCQkJZGV2aWNlIHdoZW4gYmxvY2tzIGFyZSBmcmVlZC4gIFRoaXMgaXMgdXNlZnVsIGZvciBTU0QKKwkJCWRldmljZXMgYW5kIHNwYXJzZS90aGlubHktcHJvdmlzaW9uZWQgTFVOcy4KIAogTklMRlMyIHVzYWdlCiA9PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IDBkMDc1MTMuLmE0ZjMwZmEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtMTY0LDYgKzE2NCw3IEBACiAgIFZtRXhlOiAgICAgICAgNjgga0IKICAgVm1MaWI6ICAgICAgMTQxMiBrQgogICBWbVBURTogICAgICAgIDIwIGtiCisgIFZtU3dhcDogICAgICAgIDAga0IKICAgVGhyZWFkczogICAgICAgIDEKICAgU2lnUTogICAwLzI4NTc4CiAgIFNpZ1BuZDogMDAwMDAwMDAwMDAwMDAwMApAQCAtMTg4LDcgKzE4OSwxMyBAQAogY29udGFpbnMgZGV0YWlscyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcHJvY2VzcyBpdHNlbGYuICBJdHMgZmllbGRzIGFyZQogZXhwbGFpbmVkIGluIFRhYmxlIDEtNC4KIAotVGFibGUgMS0yOiBDb250ZW50cyBvZiB0aGUgc3RhdG0gZmlsZXMgKGFzIG9mIDIuNi4zMC1yYzcpCisoZm9yIFNNUCBDT05GSUcgdXNlcnMpCitGb3IgbWFraW5nIGFjY291bnRpbmcgc2NhbGFibGUsIFJTUyByZWxhdGVkIGluZm9ybWF0aW9uIGFyZSBoYW5kbGVkIGluCithc3luY2hyb25vdXMgbWFubmVyIGFuZCB0aGUgdmF1bGUgbWF5IG5vdCBiZSB2ZXJ5IHByZWNpc2UuIFRvIHNlZSBhIHByZWNpc2UKK3NuYXBzaG90IG9mIGEgbW9tZW50LCB5b3UgY2FuIHNlZSAvcHJvYy88cGlkPi9zbWFwcyBmaWxlIGFuZCBzY2FuIHBhZ2UgdGFibGUuCitJdCdzIHNsb3cgYnV0IHZlcnkgcHJlY2lzZS4KKworVGFibGUgMS0yOiBDb250ZW50cyBvZiB0aGUgc3RhdHVzIGZpbGVzIChhcyBvZiAyLjYuMzAtcmM3KQogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAgRmllbGQgICAgICAgICAgICAgICAgICAgICAgIENvbnRlbnQKICBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUgb2YgdGhlIGV4ZWN1dGFibGUKQEAgLTIxMyw2ICsyMjAsNyBAQAogIFZtRXhlICAgICAgICAgICAgICAgICAgICAgICBzaXplIG9mIHRleHQgc2VnbWVudAogIFZtTGliICAgICAgICAgICAgICAgICAgICAgICBzaXplIG9mIHNoYXJlZCBsaWJyYXJ5IGNvZGUKICBWbVBURSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBvZiBwYWdlIHRhYmxlIGVudHJpZXMKKyBWbVN3YXAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSBvZiBzd2FwIHVzYWdlICh0aGUgbnVtYmVyIG9mIHJlZmVycmVkIHN3YXBlbnRzKQogIFRocmVhZHMgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgdGhyZWFkcwogIFNpZ1EgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2Ygc2lnbmFscyBxdWV1ZWQvbWF4LiBudW1iZXIgZm9yIHF1ZXVlCiAgU2lnUG5kICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCBvZiBwZW5kaW5nIHNpZ25hbHMgZm9yIHRoZSB0aHJlYWQKQEAgLTQzMCw2ICs0MzgsNyBAQAogIG1vZHVsZXMgICAgIExpc3Qgb2YgbG9hZGVkIG1vZHVsZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgbW91bnRzICAgICAgTW91bnRlZCBmaWxlc3lzdGVtcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICBuZXQgICAgICAgICBOZXR3b3JraW5nIGluZm8gKHNlZSB0ZXh0KSAgICAgICAgICAgICAgICAgICAgICAgIAorIHBhZ2V0eXBlaW5mbyBBZGRpdGlvbmFsIHBhZ2UgYWxsb2NhdG9yIGluZm9ybWF0aW9uIChzZWUgdGV4dCkgICgyLjUpCiAgcGFydGl0aW9ucyAgVGFibGUgb2YgcGFydGl0aW9ucyBrbm93biB0byB0aGUgc3lzdGVtICAgICAgICAgICAKICBwY2kJICAgICBEZXByZWNhdGVkIGluZm8gb2YgUENJIGJ1cyAobmV3IHdheSAtPiAvcHJvYy9idXMvcGNpLywKICAgICAgICAgICAgICBkZWNvdXBsZWQgYnkgbHNwY2kJCQkJCSgyLjQpCkBAIC01ODQsNyArNTkzLDcgQEAKIE5vZGUgMCwgem9uZSAgIE5vcm1hbCAgICAgIDEgICAgICAwICAgICAgMCAgICAgIDEgICAgMTAxICAgICAgOCAuLi4KIE5vZGUgMCwgem9uZSAgSGlnaE1lbSAgICAgIDIgICAgICAwICAgICAgMCAgICAgIDEgICAgICAxICAgICAgMCAuLi4KIAotTWVtb3J5IGZyYWdtZW50YXRpb24gaXMgYSBwcm9ibGVtIHVuZGVyIHNvbWUgd29ya2xvYWRzLCBhbmQgYnVkZHlpbmZvIGlzIGEgCitFeHRlcm5hbCBmcmFnbWVudGF0aW9uIGlzIGEgcHJvYmxlbSB1bmRlciBzb21lIHdvcmtsb2FkcywgYW5kIGJ1ZGR5aW5mbyBpcyBhCiB1c2VmdWwgdG9vbCBmb3IgaGVscGluZyBkaWFnbm9zZSB0aGVzZSBwcm9ibGVtcy4gIEJ1ZGR5aW5mbyB3aWxsIGdpdmUgeW91IGEgCiBjbHVlIGFzIHRvIGhvdyBiaWcgYW4gYXJlYSB5b3UgY2FuIHNhZmVseSBhbGxvY2F0ZSwgb3Igd2h5IGEgcHJldmlvdXMKIGFsbG9jYXRpb24gZmFpbGVkLgpAQCAtNTk0LDYgKzYwMyw0OCBAQAogWk9ORV9ETUEsIDQgY2h1bmtzIG9mIDJeMSpQQUdFX1NJWkUgaW4gWk9ORV9ETUEsIDEwMSBjaHVua3Mgb2YgMl40KlBBR0VfU0laRSAKIGF2YWlsYWJsZSBpbiBaT05FX05PUk1BTCwgZXRjLi4uIAogCitNb3JlIGluZm9ybWF0aW9uIHJlbGV2YW50IHRvIGV4dGVybmFsIGZyYWdtZW50YXRpb24gY2FuIGJlIGZvdW5kIGluCitwYWdldHlwZWluZm8uCisKKz4gY2F0IC9wcm9jL3BhZ2V0eXBlaW5mbworUGFnZSBibG9jayBvcmRlcjogOQorUGFnZXMgcGVyIGJsb2NrOiAgNTEyCisKK0ZyZWUgcGFnZXMgY291bnQgcGVyIG1pZ3JhdGUgdHlwZSBhdCBvcmRlciAgICAgICAwICAgICAgMSAgICAgIDIgICAgICAzICAgICAgNCAgICAgIDUgICAgICA2ICAgICAgNyAgICAgIDggICAgICA5ICAgICAxMAorTm9kZSAgICAwLCB6b25lICAgICAgRE1BLCB0eXBlICAgIFVubW92YWJsZSAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDEgICAgICAxICAgICAgMSAgICAgIDEgICAgICAxICAgICAgMSAgICAgIDEgICAgICAwCitOb2RlICAgIDAsIHpvbmUgICAgICBETUEsIHR5cGUgIFJlY2xhaW1hYmxlICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAKK05vZGUgICAgMCwgem9uZSAgICAgIERNQSwgdHlwZSAgICAgIE1vdmFibGUgICAgICAxICAgICAgMSAgICAgIDIgICAgICAxICAgICAgMiAgICAgIDEgICAgICAxICAgICAgMCAgICAgIDEgICAgICAwICAgICAgMgorTm9kZSAgICAwLCB6b25lICAgICAgRE1BLCB0eXBlICAgICAgUmVzZXJ2ZSAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDEgICAgICAwCitOb2RlICAgIDAsIHpvbmUgICAgICBETUEsIHR5cGUgICAgICBJc29sYXRlICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAKK05vZGUgICAgMCwgem9uZSAgICBETUEzMiwgdHlwZSAgICBVbm1vdmFibGUgICAgMTAzICAgICA1NCAgICAgNzcgICAgICAxICAgICAgMSAgICAgIDEgICAgIDExICAgICAgOCAgICAgIDcgICAgICAxICAgICAgOQorTm9kZSAgICAwLCB6b25lICAgIERNQTMyLCB0eXBlICBSZWNsYWltYWJsZSAgICAgIDAgICAgICAwICAgICAgMiAgICAgIDEgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMSAgICAgIDAgICAgICAwCitOb2RlICAgIDAsIHpvbmUgICAgRE1BMzIsIHR5cGUgICAgICBNb3ZhYmxlICAgIDE2OSAgICAxNTIgICAgMTEzICAgICA5MSAgICAgNzcgICAgIDU0ICAgICAzOSAgICAgMTMgICAgICA2ICAgICAgMSAgICA0NTIKK05vZGUgICAgMCwgem9uZSAgICBETUEzMiwgdHlwZSAgICAgIFJlc2VydmUgICAgICAxICAgICAgMiAgICAgIDIgICAgICAyICAgICAgMiAgICAgIDAgICAgICAxICAgICAgMSAgICAgIDEgICAgICAxICAgICAgMAorTm9kZSAgICAwLCB6b25lICAgIERNQTMyLCB0eXBlICAgICAgSXNvbGF0ZSAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwICAgICAgMCAgICAgIDAgICAgICAwCisKK051bWJlciBvZiBibG9ja3MgdHlwZSAgICAgVW5tb3ZhYmxlICBSZWNsYWltYWJsZSAgICAgIE1vdmFibGUgICAgICBSZXNlcnZlICAgICAgSXNvbGF0ZQorTm9kZSAwLCB6b25lICAgICAgRE1BICAgICAgICAgICAgMiAgICAgICAgICAgIDAgICAgICAgICAgICA1ICAgICAgICAgICAgMSAgICAgICAgICAgIDAKK05vZGUgMCwgem9uZSAgICBETUEzMiAgICAgICAgICAgNDEgICAgICAgICAgICA2ICAgICAgICAgIDk2NyAgICAgICAgICAgIDIgICAgICAgICAgICAwCisKK0ZyYWdtZW50YXRpb24gYXZvaWRhbmNlIGluIHRoZSBrZXJuZWwgd29ya3MgYnkgZ3JvdXBpbmcgcGFnZXMgb2YgZGlmZmVyZW50CittaWdyYXRlIHR5cGVzIGludG8gdGhlIHNhbWUgY29udGlndW91cyByZWdpb25zIG9mIG1lbW9yeSBjYWxsZWQgcGFnZSBibG9ja3MuCitBIHBhZ2UgYmxvY2sgaXMgdHlwaWNhbGx5IHRoZSBzaXplIG9mIHRoZSBkZWZhdWx0IGh1Z2VwYWdlIHNpemUgZS5nLiAyTUIgb24KK1g4Ni02NC4gQnkga2VlcGluZyBwYWdlcyBncm91cGVkIGJhc2VkIG9uIHRoZWlyIGFiaWxpdHkgdG8gbW92ZSwgdGhlIGtlcm5lbAorY2FuIHJlY2xhaW0gcGFnZXMgd2l0aGluIGEgcGFnZSBibG9jayB0byBzYXRpc2Z5IGEgaGlnaC1vcmRlciBhbGxvY2F0aW9uLgorCitUaGUgcGFnZXR5cGluZm8gYmVnaW5zIHdpdGggaW5mb3JtYXRpb24gb24gdGhlIHNpemUgb2YgYSBwYWdlIGJsb2NrLiBJdAordGhlbiBnaXZlcyB0aGUgc2FtZSB0eXBlIG9mIGluZm9ybWF0aW9uIGFzIGJ1ZGR5aW5mbyBleGNlcHQgYnJva2VuIGRvd24KK2J5IG1pZ3JhdGUtdHlwZSBhbmQgZmluaXNoZXMgd2l0aCBkZXRhaWxzIG9uIGhvdyBtYW55IHBhZ2UgYmxvY2tzIG9mIGVhY2gKK3R5cGUgZXhpc3QuCisKK0lmIG1pbl9mcmVlX2tieXRlcyBoYXMgYmVlbiB0dW5lZCBjb3JyZWN0bHkgKHJlY29tbWVuZGF0aW9ucyBtYWRlIGJ5IGh1Z2VhZG0KK2Zyb20gbGliaHVnZXRsYmZzIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGliaHVnZXRsYmZzLyksIG9uZSBjYW4KK21ha2UgYW4gZXN0aW1hdGUgb2YgdGhlIGxpa2VseSBudW1iZXIgb2YgaHVnZSBwYWdlcyB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQKK2F0IGEgZ2l2ZW4gcG9pbnQgaW4gdGltZS4gQWxsIHRoZSAiTW92YWJsZSIgYmxvY2tzIHNob3VsZCBiZSBhbGxvY2F0YWJsZQordW5sZXNzIG1lbW9yeSBoYXMgYmVlbiBtbG9jaygpJ2QuIFNvbWUgb2YgdGhlIFJlY2xhaW1hYmxlIGJsb2NrcyBzaG91bGQKK2Fsc28gYmUgYWxsb2NhdGFibGUgYWx0aG91Z2ggYSBsb3Qgb2YgZmlsZXN5c3RlbSBtZXRhZGF0YSBtYXkgaGF2ZSB0byBiZQorcmVjbGFpbWVkIHRvIGFjaGlldmUgdGhpcy4KKwogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKIG1lbWluZm86CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3NoYXJlZHN1YnRyZWUudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9zaGFyZWRzdWJ0cmVlLnR4dAppbmRleCAyM2ExODEwLi5mYzBlMzlhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3NoYXJlZHN1YnRyZWUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvc2hhcmVkc3VidHJlZS50eHQKQEAgLTgzNyw2ICs4MzcsOSBAQAogCSBpbmRpdmlkdWFsIGxpc3RzIGRvZXMgbm90IGFmZmVjdCBwcm9wYWdhdGlvbiBvciB0aGUgd2F5IHByb3BhZ2F0aW9uCiAJIHRyZWUgaXMgbW9kaWZpZWQgYnkgb3BlcmF0aW9ucy4KIAorCUFsbCB2ZnNtb3VudHMgaW4gYSBwZWVyIGdyb3VwIGhhdmUgdGhlIHNhbWUgLT5tbnRfbWFzdGVyLiAgSWYgaXQgaXMKKwlub24tTlVMTCwgdGhleSBmb3JtIGEgY29udGlndW91cyAob3JkZXJlZCkgc2VnbWVudCBvZiBzbGF2ZSBsaXN0LgorCiAJQSBleGFtcGxlIHByb3BhZ2F0aW9uIHRyZWUgbG9va3MgYXMgc2hvd24gaW4gdGhlIGZpZ3VyZSBiZWxvdy4KIAlbIE5PVEU6IFRob3VnaCBpdCBsb29rcyBsaWtlIGEgZm9yZXN0LCBpZiB3ZSBjb25zaWRlciBhbGwgdGhlIHNoYXJlZAogCW1vdW50cyBhcyBhIGNvbmNlcHR1YWwgZW50aXR5IGNhbGxlZCAncG5vZGUnLCBpdCBiZWNvbWVzIGEgdHJlZV0KQEAgLTg3NCw4ICs4NzcsMTkgQEAKIAogCU5PVEU6IFRoZSBwcm9wYWdhdGlvbiB0cmVlIGlzIG9ydGhvZ29uYWwgdG8gdGhlIG1vdW50IHRyZWUuCiAKKzhCIExvY2tpbmc6CiAKLThCIEFsZ29yaXRobToKKwktPm1udF9zaGFyZSwgLT5tbnRfc2xhdmUsIC0+bW50X3NsYXZlX2xpc3QsIC0+bW50X21hc3RlciBhcmUgcHJvdGVjdGVkCisJYnkgbmFtZXNwYWNlX3NlbSAoZXhjbHVzaXZlIGZvciBtb2RpZmljYXRpb25zLCBzaGFyZWQgZm9yIHJlYWRpbmcpLgorCisJTm9ybWFsbHkgd2UgaGF2ZSAtPm1udF9mbGFncyBtb2RpZmljYXRpb25zIHNlcmlhbGl6ZWQgYnkgdmZzbW91bnRfbG9jay4KKwlUaGVyZSBhcmUgdHdvIGV4Y2VwdGlvbnM6IGRvX2FkZF9tb3VudCgpIGFuZCBjbG9uZV9tbnQoKS4KKwlUaGUgZm9ybWVyIG1vZGlmaWVzIGEgdmZzbW91bnQgdGhhdCBoYXMgbm90IGJlZW4gdmlzaWJsZSBpbiBhbnkgc2hhcmVkCisJZGF0YSBzdHJ1Y3R1cmVzIHlldC4KKwlUaGUgbGF0dGVyIGhvbGRzIG5hbWVzcGFjZV9zZW0gYW5kIHRoZSBvbmx5IHJlZmVyZW5jZXMgdG8gdmZzbW91bnQKKwlhcmUgaW4gbGlzdHMgdGhhdCBjYW4ndCBiZSB0cmF2ZXJzZWQgd2l0aG91dCBuYW1lc3BhY2Vfc2VtLgorCis4QyBBbGdvcml0aG06CiAKIAlUaGUgY3J1eCBvZiB0aGUgaW1wbGVtZW50YXRpb24gcmVzaWRlcyBpbiByYmluZC9tb3ZlIG9wZXJhdGlvbi4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dCBiL0RvY3VtZW50YXRpb24vZ3Bpby50eHQKaW5kZXggMTg2NmMyNy4uYzJjNmU5YiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ncGlvLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2dwaW8udHh0CkBAIC0yNTMsNiArMjUzLDcwIEBACiBBbHNvIG5vdGUgdGhhdCBpdCdzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gaGF2ZSBzdG9wcGVkIHVzaW5nIGEgR1BJTwogYmVmb3JlIHlvdSBmcmVlIGl0LgogCitDb25zaWRlcmluZyBpbiBtb3N0IGNhc2VzIEdQSU9zIGFyZSBhY3R1YWxseSBjb25maWd1cmVkIHJpZ2h0IGFmdGVyIHRoZXkKK2FyZSBjbGFpbWVkLCB0aHJlZSBhZGRpdGlvbmFsIGNhbGxzIGFyZSBkZWZpbmVkOgorCisJLyogcmVxdWVzdCBhIHNpbmdsZSBHUElPLCB3aXRoIGluaXRpYWwgY29uZmlndXJhdGlvbiBzcGVjaWZpZWQgYnkKKwkgKiAnZmxhZ3MnLCBpZGVudGljYWwgdG8gZ3Bpb19yZXF1ZXN0KCkgd3J0IG90aGVyIGFyZ3VtZW50cyBhbmQKKwkgKiByZXR1cm4gdmFsdWUKKwkgKi8KKwlpbnQgZ3Bpb19yZXF1ZXN0X29uZSh1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpsYWJlbCk7CisKKwkvKiByZXF1ZXN0IG11bHRpcGxlIEdQSU9zIGluIGEgc2luZ2xlIGNhbGwKKwkgKi8KKwlpbnQgZ3Bpb19yZXF1ZXN0X2FycmF5KHN0cnVjdCBncGlvICphcnJheSwgc2l6ZV90IG51bSk7CisKKwkvKiByZWxlYXNlIG11bHRpcGxlIEdQSU9zIGluIGEgc2luZ2xlIGNhbGwKKwkgKi8KKwl2b2lkIGdwaW9fZnJlZV9hcnJheShzdHJ1Y3QgZ3BpbyAqYXJyYXksIHNpemVfdCBudW0pOworCit3aGVyZSAnZmxhZ3MnIGlzIGN1cnJlbnRseSBkZWZpbmVkIHRvIHNwZWNpZnkgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorCisJKiBHUElPRl9ESVJfSU4JCS0gdG8gY29uZmlndXJlIGRpcmVjdGlvbiBhcyBpbnB1dAorCSogR1BJT0ZfRElSX09VVAkJLSB0byBjb25maWd1cmUgZGlyZWN0aW9uIGFzIG91dHB1dAorCisJKiBHUElPRl9JTklUX0xPVwktIGFzIG91dHB1dCwgc2V0IGluaXRpYWwgbGV2ZWwgdG8gTE9XCisJKiBHUElPRl9JTklUX0hJR0gJLSBhcyBvdXRwdXQsIHNldCBpbml0aWFsIGxldmVsIHRvIEhJR0gKKworc2luY2UgR1BJT0ZfSU5JVF8qIGFyZSBvbmx5IHZhbGlkIHdoZW4gY29uZmlndXJlZCBhcyBvdXRwdXQsIHNvIGdyb3VwIHZhbGlkCitjb21iaW5hdGlvbnMgYXM6CisKKwkqIEdQSU9GX0lOCQktIGNvbmZpZ3VyZSBhcyBpbnB1dAorCSogR1BJT0ZfT1VUX0lOSVRfTE9XCS0gY29uZmlndXJlZCBhcyBvdXRwdXQsIGluaXRpYWwgbGV2ZWwgTE9XCisJKiBHUElPRl9PVVRfSU5JVF9ISUdICS0gY29uZmlndXJlZCBhcyBvdXRwdXQsIGluaXRpYWwgbGV2ZWwgSElHSAorCitJbiB0aGUgZnV0dXJlLCB0aGVzZSBmbGFncyBjYW4gYmUgZXh0ZW5kZWQgdG8gc3VwcG9ydCBtb3JlIHByb3BlcnRpZXMgc3VjaAorYXMgb3Blbi1kcmFpbiBzdGF0dXMuCisKK0Z1cnRoZXIgbW9yZSwgdG8gZWFzZSB0aGUgY2xhaW0vcmVsZWFzZSBvZiBtdWx0aXBsZSBHUElPcywgJ3N0cnVjdCBncGlvJyBpcworaW50cm9kdWNlZCB0byBlbmNhcHN1bGF0ZSBhbGwgdGhyZWUgZmllbGRzIGFzOgorCisJc3RydWN0IGdwaW8geworCQl1bnNpZ25lZAlncGlvOworCQl1bnNpZ25lZCBsb25nCWZsYWdzOworCQljb25zdCBjaGFyCSpsYWJlbDsKKwl9OworCitBIHR5cGljYWwgZXhhbXBsZSBvZiB1c2FnZToKKworCXN0YXRpYyBzdHJ1Y3QgZ3BpbyBsZWRzX2dwaW9zW10gPSB7CisJCXsgMzIsIEdQSU9GX09VVF9JTklUX0hJR0gsICJQb3dlciBMRUQiIH0sIC8qIGRlZmF1bHQgdG8gT04gKi8KKwkJeyAzMywgR1BJT0ZfT1VUX0lOSVRfTE9XLCAgIkdyZWVuIExFRCIgfSwgLyogZGVmYXVsdCB0byBPRkYgKi8KKwkJeyAzNCwgR1BJT0ZfT1VUX0lOSVRfTE9XLCAgIlJlZCBMRUQiICAgfSwgLyogZGVmYXVsdCB0byBPRkYgKi8KKwkJeyAzNSwgR1BJT0ZfT1VUX0lOSVRfTE9XLCAgIkJsdWUgTEVEIiAgfSwgLyogZGVmYXVsdCB0byBPRkYgKi8KKwkJeyAuLi4gfSwKKwl9OworCisJZXJyID0gZ3Bpb19yZXF1ZXN0X29uZSgzMSwgR1BJT0ZfSU4sICJSZXNldCBCdXR0b24iKTsKKwlpZiAoZXJyKQorCQkuLi4KKworCWVyciA9IGdwaW9fcmVxdWVzdF9hcnJheShsZWRzX2dwaW9zLCBBUlJBWV9TSVpFKGxlZHNfZ3Bpb3MpKTsKKwlpZiAoZXJyKQorCQkuLi4KKworCWdwaW9fZnJlZV9hcnJheShsZWRzX2dwaW9zLCBBUlJBWV9TSVpFKGxlZHNfZ3Bpb3MpKTsKKwogCiBHUElPcyBtYXBwZWQgdG8gSVJRcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vYWJpdHVndXJ1IGIvRG9jdW1lbnRhdGlvbi9od21vbi9hYml0dWd1cnUKaW5kZXggODdmZmEwZi4uNWViM2I5ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9hYml0dWd1cnUKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9hYml0dWd1cnUKQEAgLTMwLDcgKzMwLDcgQEAKIAkgICBiYW5rMV90eXBlcz0xLDEsMCwwLDAsMCwwLDIsMCwwLDAsMCwyLDAsMCwxCiAJICAgWW91IG1heSBhbHNvIG5lZWQgdG8gc3BlY2lmeSB0aGUgZmFuX3NlbnNvcnMgb3B0aW9uIGZvciB0aGVzZSBib2FyZHMKIAkgICBmYW5fc2Vuc29ycz01Ci0JMikgVGhlcmUgaXMgYSBzZXBlcmF0ZSBhYml0dWd1cnUzIGRyaXZlciBmb3IgdGhlc2UgbW90aGVyYm9hcmRzLAorCTIpIFRoZXJlIGlzIGEgc2VwYXJhdGUgYWJpdHVndXJ1MyBkcml2ZXIgZm9yIHRoZXNlIG1vdGhlcmJvYXJkcywKIAkgICB0aGUgYWJpdHVndXJ1ICh3aXRob3V0IHRoZSAzICEpIGRyaXZlciB3aWxsIG5vdCB3b3JrIG9uIHRoZXNlCiAJICAgbW90aGVyYm9hcmRzIChhbmQgdmlzYSB2ZXJzYSkhCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vYWR0NzQxMSBiL0RvY3VtZW50YXRpb24vaHdtb24vYWR0NzQxMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjMyOTYwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9hZHQ3NDExCkBAIC0wLDAgKzEsNDIgQEAKK0tlcm5lbCBkcml2ZXIgYWR0NzQxMQorPT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBBbmFsb2cgRGV2aWNlcyBBRFQ3NDExCisgICAgUHJlZml4OiAnYWR0NzQxMScKKyAgICBBZGRyZXNzZXMgc2Nhbm5lZDogMHg0OCwgMHg0YSwgMHg0YgorICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBBbmFsb2cgRGV2aWNlcyB3ZWJzaXRlCisKK0F1dGhvcjogV29sZnJhbSBTYW5nIChiYXNlZCBvbiBhZHQ3NDcwIGJ5IERhcnJpY2sgSi4gV29uZykKKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIEFuYWxvZyBEZXZpY2VzIEFEVDc0MTEgY2hpcC4gVGhlcmUgbWF5CitiZSBvdGhlciBjaGlwcyB0aGF0IGltcGxlbWVudCB0aGlzIGludGVyZmFjZS4KKworVGhlIEFEVDc0MTEgY2FuIHVzZSBhbiBJMkMvU01CdXMgY29tcGF0aWJsZSAyLXdpcmUgaW50ZXJmYWNlIG9yIGFuCitTUEktY29tcGF0aWJsZSA0LXdpcmUgaW50ZXJmYWNlLiBJdCBwcm92aWRlcyBhIDEwLWJpdCBhbmFsb2cgdG8gZGlnaXRhbAorY29udmVydGVyIHdoaWNoIG1lYXN1cmVzIDEgdGVtcGVyYXR1cmUsIHZkZCBhbmQgOCBpbnB1dCB2b2x0YWdlcy4gSXQgaGFzIGFuCitpbnRlcm5hbCB0ZW1wZXJhdHVyZSBzZW5zb3IsIGJ1dCBhbiBleHRlcm5hbCBvbmUgY2FuIGFsc28gYmUgY29ubmVjdGVkIChvbmUKK2xvc2VzIDIgaW5wdXRzIHRoZW4pLiBUaGVyZSBhcmUgaGlnaC0gYW5kIGxvdy1saW1pdCByZWdpc3RlcnMgZm9yIGFsbCBpbnB1dHMuCisKK0NoZWNrIHRoZSBkYXRhc2hlZXQgZm9yIGRldGFpbHMuCisKK3N5c2ZzLUludGVyZmFjZQorLS0tLS0tLS0tLS0tLS0tCisKK2luMF9pbnB1dAktIHZkZCB2b2x0YWdlIGlucHV0CitpblsxLThdX2lucHV0CS0gYW5hbG9nIDEtOCBpbnB1dAordGVtcDFfaW5wdXQJLSB0ZW1wZXJhdHVyZSBpbnB1dAorCitCZXNpZGVzIHN0YW5kYXJkIGludGVyZmFjZXMsIHRoaXMgZHJpdmVyIGFkZHMgKDAgPSBvZmYsIDEgPSBvbik6CisKKyAgYWRjX3JlZl92ZGQJLSBVc2UgdmRkIGFzIHJlZmVyZW5jZSBpbnN0ZWFkIG9mIDIuMjUgVgorICBmYXN0X3NhbXBsaW5nCS0gU2FtcGxlIGF0IDIyLjUga0h6IGluc3RlYWQgb2YgMS40IGtIeiwgYnV0IGRyb3AgZmlsdGVycworICBub19hdmVyYWdlCS0gVHVybiBvZmYgYXZlcmFnaW5nIG92ZXIgMTYgc2FtcGxlcworCitOb3RlcworLS0tLS0KKworU1BJLCBleHRlcm5hbCB0ZW1wZXJhdHVyZSBzZW5zb3IgYW5kIGxpbWl0IHJlZ2lzdGVycyBhcmUgbm90IHN1cHBvcnRlZCB5ZXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkdDc0NzMgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FkdDc0NzMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0NjYxMmIuLjAwMDAwMDAKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi9hZHQ3NDczCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotS2VybmVsIGRyaXZlciBhZHQ3NDczCi09PT09PT09PT09PT09PT09PT09PT09Ci0KLVN1cHBvcnRlZCBjaGlwczoKLSAgKiBBbmFsb2cgRGV2aWNlcyBBRFQ3NDczCi0gICAgUHJlZml4OiAnYWR0NzQ3MycKLSAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4MkMsIDB4MkQsIDB4MkUKLSAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgQW5hbG9nIERldmljZXMgd2Vic2l0ZQotCi1BdXRob3I6IERhcnJpY2sgSi4gV29uZwotCi1UaGlzIGRyaXZlciBpcyBkZXByZWFjdGVkLCBwbGVhc2UgdXNlIHRoZSBhZHQ3NDc1IGRyaXZlciBpbnN0ZWFkLgotCi1EZXNjcmlwdGlvbgotLS0tLS0tLS0tLS0KLQotVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzdXBwb3J0IGZvciB0aGUgQW5hbG9nIERldmljZXMgQURUNzQ3MyBjaGlwIGZhbWlseS4KLQotVGhlIEFEVDc0NzMgdXNlcyB0aGUgMi13aXJlIGludGVyZmFjZSBjb21wYXRpYmxlIHdpdGggdGhlIFNNQlVTIDIuMAotc3BlY2lmaWNhdGlvbi4gVXNpbmcgYW4gYW5hbG9nIHRvIGRpZ2l0YWwgY29udmVydGVyIGl0IG1lYXN1cmVzIHRocmVlICgzKQotdGVtcGVyYXR1cmVzIGFuZCB0d28gKDIpIHZvbHRhZ2VzLiBJdCBoYXMgZm91ciAoNCkgMTYtYml0IGNvdW50ZXJzIGZvcgotbWVhc3VyaW5nIGZhbiBzcGVlZC4gVGhlcmUgYXJlIHRocmVlICgzKSBQV00gb3V0cHV0cyB0aGF0IGNhbiBiZSB1c2VkCi10byBjb250cm9sIGZhbiBzcGVlZC4KLQotQSBzb3BoaXN0aWNhdGVkIGNvbnRyb2wgc3lzdGVtIGZvciB0aGUgUFdNIG91dHB1dHMgaXMgZGVzaWduZWQgaW50byB0aGUKLUFEVDc0NzMgdGhhdCBhbGxvd3MgZmFuIHNwZWVkIHRvIGJlIGFkanVzdGVkIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gYW55IG9mIHRoZQotdGhyZWUgdGVtcGVyYXR1cmUgc2Vuc29ycy4gRWFjaCBQV00gb3V0cHV0IGlzIGluZGl2aWR1YWxseSBhZGp1c3RhYmxlIGFuZAotcHJvZ3JhbW1hYmxlLiBPbmNlIGNvbmZpZ3VyZWQsIHRoZSBBRFQ3NDczIHdpbGwgYWRqdXN0IHRoZSBQV00gb3V0cHV0cyBpbgotcmVzcG9uc2UgdG8gdGhlIG1lYXN1cmVkIHRlbXBlcmF0dXJlcyB3aXRob3V0IGZ1cnRoZXIgaG9zdCBpbnRlcnZlbnRpb24uCi1UaGlzIGZlYXR1cmUgY2FuIGFsc28gYmUgZGlzYWJsZWQgZm9yIG1hbnVhbCBjb250cm9sIG9mIHRoZSBQV00ncy4KLQotRWFjaCBvZiB0aGUgbWVhc3VyZWQgaW5wdXRzICh2b2x0YWdlLCB0ZW1wZXJhdHVyZSwgZmFuIHNwZWVkKSBoYXMKLWNvcnJlc3BvbmRpbmcgaGlnaC9sb3cgbGltaXQgdmFsdWVzLiBUaGUgQURUNzQ3MyB3aWxsIHNpZ25hbCBhbiBBTEFSTSBpZgotYW55IG1lYXN1cmVkIHZhbHVlIGV4Y2VlZHMgZWl0aGVyIGxpbWl0LgotCi1UaGUgQURUNzQ3MyBzYW1wbGVzIGFsbCBpbnB1dHMgY29udGludW91c2x5LiBUaGUgZHJpdmVyIHdpbGwgbm90IHJlYWQKLXRoZSByZWdpc3RlcnMgbW9yZSBvZnRlbiB0aGFuIG9uY2UgZXZlcnkgb3RoZXIgc2Vjb25kLiBGdXJ0aGVyLAotY29uZmlndXJhdGlvbiBkYXRhIGlzIG9ubHkgcmVhZCBvbmNlIHBlciBtaW51dGUuCi0KLVNwZWNpYWwgRmVhdHVyZXMKLS0tLS0tLS0tLS0tLS0tLS0KLQotVGhlIEFEVDc0NzMgaGF2ZSBhIDEwLWJpdCBBREMgYW5kIGNhbiB0aGVyZWZvcmUgbWVhc3VyZSB0ZW1wZXJhdHVyZXMKLXdpdGggMC4yNSBkZWdDIHJlc29sdXRpb24uIFRlbXBlcmF0dXJlIHJlYWRpbmdzIGNhbiBiZSBjb25maWd1cmVkIGVpdGhlcgotZm9yIHR3b3MgY29tcGxlbWVudCBmb3JtYXQgb3IgIk9mZnNldCA2NCIgZm9ybWF0LCB3aGVyZWluIDYzIGlzIHN1YnRyYWN0ZWQKLWZyb20gdGhlIHJhdyB2YWx1ZSB0byBnZXQgdGhlIHRlbXBlcmF0dXJlIHZhbHVlLgotCi1UaGUgQW5hbG9nIERldmljZXMgZGF0YXNoZWV0IGlzIHZlcnkgZGV0YWlsZWQgYW5kIGRlc2NyaWJlcyBhIHByb2NlZHVyZSBmb3IKLWRldGVybWluaW5nIGFuIG9wdGltYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIGF1dG9tYXRpYyBQV00gY29udHJvbC4KLQotQ29uZmlndXJhdGlvbiBOb3RlcwotLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1CZXNpZGVzIHN0YW5kYXJkIGludGVyZmFjZXMgZHJpdmVyIGFkZHMgdGhlIGZvbGxvd2luZzoKLQotKiBQV00gQ29udHJvbAotCi0qIHB3bSNfYXV0b19wb2ludDFfcHdtIGFuZCB0ZW1wI19hdXRvX3BvaW50MV90ZW1wIGFuZAotKiBwd20jX2F1dG9fcG9pbnQyX3B3bSBhbmQgdGVtcCNfYXV0b19wb2ludDJfdGVtcCAtCi0KLXBvaW50MTogU2V0IHRoZSBwd20gc3BlZWQgYXQgYSBsb3dlciB0ZW1wZXJhdHVyZSBib3VuZC4KLXBvaW50MjogU2V0IHRoZSBwd20gc3BlZWQgYXQgYSBoaWdoZXIgdGVtcGVyYXR1cmUgYm91bmQuCi0KLVRoZSBBRFQ3NDczIHdpbGwgc2NhbGUgdGhlIHB3bSBiZXR3ZWVuIHRoZSBsb3dlciBhbmQgaGlnaGVyIHB3bSBzcGVlZCB3aGVuCi10aGUgdGVtcGVyYXR1cmUgaXMgYmV0d2VlbiB0aGUgdHdvIHRlbXBlcmF0dXJlIGJvdW5kYXJpZXMuICBQV00gdmFsdWVzIHJhbmdlCi1mcm9tIDAgKG9mZikgdG8gMjU1IChmdWxsIHNwZWVkKS4gIEZhbiBzcGVlZCB3aWxsIGJlIHNldCB0byBtYXhpbXVtIHdoZW4gdGhlCi10ZW1wZXJhdHVyZSBzZW5zb3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBQV00gY29udHJvbCBleGNlZWRzIHRlbXAjX21heC4KLQotTm90ZXMKLS0tLS0tCi0KLVRoZSBOVklESUEgYmluYXJ5IGRyaXZlciBwcmVzZW50cyBhbiBBRFQ3NDczIGNoaXAgdmlhIGFuIG9uLWNhcmQgaTJjIGJ1cy4KLVVuZm9ydHVuYXRlbHksIHRoZXkgZmFpbCB0byBzZXQgdGhlIGkyYyBhZGFwdGVyIGNsYXNzLCBzbyB0aGlzIGRyaXZlciBtYXkKLWZhaWwgdG8gZmluZCB0aGUgY2hpcCB1bnRpbCB0aGUgbnZpZGlhIGRyaXZlciBpcyBwYXRjaGVkLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9hc2M3NjIxIGIvRG9jdW1lbnRhdGlvbi9od21vbi9hc2M3NjIxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyODdiZTcKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2FzYzc2MjEKQEAgLTAsMCArMSwyOTYgQEAKK0tlcm5lbCBkcml2ZXIgYXNjNzYyMQorPT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgICBBbmRpZ2lsb2cgYVNDNzYyMSBhbmQgYVNDNzYyMWEKKyAgICBQcmVmaXg6ICdhc2M3NjIxJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgyYywgMHgyZCwgMHgyZQorICAgIERhdGFzaGVldDogaHR0cDovL3d3dy5mYWlydmlldzUuY29tL2xpbnV4L2FzYzc2MjEvYXNjNzYyMS5wZGYKKworQXV0aG9yOgorCQlHZW9yZ2UgSm9zZXBoCisKK0Rlc2NyaXB0aW9uIHByb3ZpZGVkIGJ5IERhdmUgUGl2aW4gQCBBbmRpZ2lsb2c6CisKK0FuZGlnaWxvZyBoYXMgYm90aCB0aGUgUEVDSSBhbmQgcHJlLVBFQ0kgdmVyc2lvbnMgb2YgdGhlIEhlY2V0YS02LCBhcworSW50ZWwgY2FsbHMgdGhlbS4gSGVjZXRhLTZlIGhhcyBoaWdoIGZyZXF1ZW5jeSBQV00gYW5kIEhlY2V0YS02cCBoYXMKK2FkZGVkIFBFQ0kgYW5kIGEgNHRoIHRoZXJtYWwgem9uZS4gVGhlIEFuZGlnaWxvZyBhU0M3NjExIGlzIHRoZQorSGVjZXRhLTZlIHBhcnQgYW5kIGFTQzc2MjEgaXMgdGhlIEhlY2V0YS02cCBwYXJ0LiBUaGV5IGFyZSBib3RoIGluCit2b2x1bWUgcHJvZHVjdGlvbiwgc2hpcHBpbmcgdG8gSW50ZWwgYW5kIHRoZWlyIHN1YnMuCisKK1dlIGhhdmUgZW5oYW5jZWQgYm90aCBwYXJ0cyByZWxhdGl2ZSB0byB0aGUgZ292ZXJuaW5nIEludGVsCitzcGVjaWZpY2F0aW9uLiBGaXJzdCBlbmhhbmNlbWVudCBpcyB0ZW1wZXJhdHVyZSByZWFkaW5nIHJlc29sdXRpb24uIFdlCitoYXZlIHVzZWQgcmVnaXN0ZXJzIGJlbG93IDIwaCBmb3IgdmVuZG9yLXNwZWNpZmljIGZ1bmN0aW9ucyBpbiBhZGRpdGlvbgordG8gdGhvc2UgaW4gdGhlIEludGVsLXNwZWNpZmllZCB2ZW5kb3IgcmFuZ2UuCisKK091ciBjb252ZXJzaW9uIHByb2Nlc3MgcHJvZHVjZXMgYSByZXN1bHQgdGhhdCBpcyByZXBvcnRlZCBhcyB0d28gYnl0ZXMuCitUaGUgZmFuIHNwZWVkIGNvbnRyb2wgdXNlcyB0aGlzIGZpbmVyIHZhbHVlIHRvIHByb2R1Y2UgYSAic3RlcC1sZXNzIiBmYW4KK1BXTSBvdXRwdXQuIFRoZXNlIHR3byBieXRlcyBhcmUgInJlYWQtbG9ja2VkIiB0byBndWFyYW50ZWUgdGhhdCBvbmNlIGEKK2hpZ2ggb3IgbG93IGJ5dGUgaXMgcmVhZCwgdGhlIG90aGVyIGJ5dGUgaXMgbG9ja2VkLWluIHVudGlsIGFmdGVyIHRoZQorbmV4dCByZWFkIG9mIGFueSByZWdpc3Rlci4gU28gdG8gZ2V0IGFuIGF0b21pYyByZWFkaW5nLCByZWFkIGhpZ2ggb3IgbG93CitieXRlLCB0aGVuIHRoZSB2ZXJ5IG5leHQgcmVhZCBzaG91bGQgYmUgdGhlIG9wcG9zaXRlIGJ5dGUuIE91ciBkYXRhCitzaGVldCBzYXlzIDEwLWJpdHMgb2YgcmVzb2x1dGlvbiwgYWx0aG91Z2ggeW91IG1heSBmaW5kIHRoZSBsb3dlciBiaXRzCithcmUgYWN0aXZlLCB0aGV5IGFyZSBub3QgbmVjZXNzYXJpbHkgcmVsaWFibGUgb3IgdXNlZnVsIGV4dGVybmFsbHkuIFdlCitjaG9zZSBub3QgdG8gbWFzayB0aGVtLgorCitXZSBlbXBsb3kgc2lnbmlmaWNhbnQgZmlsdGVyaW5nIHRoYXQgaXMgdXNlciB0dW5hYmxlIGFzIGRlc2NyaWJlZCBpbiB0aGUKK2RhdGEgc2hlZXQuIE91ciB0ZW1wZXJhdHVyZSByZXBvcnRzIGFuZCBmYW4gUFdNIG91dHB1dHMgYXJlIHZlcnkgc21vb3RoCit3aGVuIGNvbXBhcmVkIHRvIHRoZSBjb21wZXRpdGlvbiwgaW4gYWRkaXRpb24gdG8gdGhlIGhpZ2hlciByZXNvbHV0aW9uCit0ZW1wZXJhdHVyZSByZXBvcnRzLiBUaGUgc21vb3RoZXIgUFdNIG91dHB1dCBkb2VzIG5vdCByZXF1aXJlIHVzZXIKK2ludGVydmVudGlvbi4KKworV2Ugb2ZmZXIgR1BJTyBmZWF0dXJlcyBvbiB0aGUgZm9ybWVyIFZJRCBwaW5zLiBUaGVzZSBhcmUgb3Blbi1kcmFpbgorb3V0cHV0cyBvciBpbnB1dHMgYW5kIG1heSBiZSB1c2VkIGFzIGdlbmVyYWwgcHVycG9zZSBJL08gb3IgYXMgYWxhcm0KK291dHB1dHMgdGhhdCBhcmUgYmFzZWQgb24gdGVtcGVyYXR1cmUgbGltaXRzLiBUaGVzZSBhcmUgaW4gMTloIGFuZCAxQWguCisKK1dlIG9mZmVyIGZsZXhpYmxlIG1hcHBpbmcgb2YgdGVtcGVyYXR1cmUgcmVhZGluZ3MgdG8gdGhlcm1hbCB6b25lcy4gQW55Cit0ZW1wZXJhdHVyZSBtYXkgYmUgbWFwcGVkIHRvIGFueSB6b25lLCB3aGljaCBoYXMgYSBkZWZhdWx0IGFzc2lnbm1lbnQKK3RoYXQgZm9sbG93cyBJbnRlbCdzIHNwZWNzLgorCitTaW5jZSB0aGVyZSBpcyBhIGZhbiB0byB6b25lIGFzc2lnbm1lbnQgdGhhdCBhbGxvd3MgZm9yIHRoZSAiaG90dGVyIiBvZgorYSBzZXQgb2Ygem9uZXMgdG8gY29udHJvbCB0aGUgUFdNIG9mIGFuIGluZGl2aWR1YWwgZmFuLCBidXQgdGhlcmUgaXMgbm8KK2luZGljYXRpb24gdG8gdGhlIHVzZXIsIHdlIGhhdmUgYWRkZWQgYW4gaW5kaWNhdG9yIHRoYXQgc2hvd3Mgd2hpY2ggem9uZQoraXMgY3VycmVudGx5IGNvbnRyb2xsaW5nIHRoZSBQV00gZm9yIGEgZ2l2ZW4gZmFuLiBUaGlzIGlzIGluIHJlZ2lzdGVyCiswMGguCisKK0JvdGggcmVtb3RlIGRpb2RlIHRlbXBlcmF0dXJlIHJlYWRpbmdzIG1heSBiZSBnaXZlbiBhbiBvZmZzZXQgdmFsdWUgc3VjaAordGhhdCB0aGUgcmVwb3J0ZWQgcmVhZGluZyBhcyB3ZWxsIGFzIHRoZSB0ZW1wZXJhdHVyZSB1c2VkIHRvIGRldGVybWluZQorUFdNIG1heSBiZSBvZmZzZXQgZm9yIHN5c3RlbSBjYWxpYnJhdGlvbiBwdXJwb3Nlcy4KKworUEVDSSBFeHRlbmRlZCBjb25maWd1cmF0aW9uIGFsbG93cyBmb3IgaGF2aW5nIG1vcmUgdGhhbiB0d28gZG9tYWlucyBwZXIKK1BFQ0kgYWRkcmVzcyBhbmQgYWxzbyBwcm92aWRlcyBhbiBlbmFibGluZyBmdW5jdGlvbiBmb3IgZWFjaCBQRUNJCithZGRyZXNzLiBPbmUgY291bGQgdXNlIG91ciBmbGV4aWJsZSB6b25lIGFzc2lnbm1lbnQgdG8gaGF2ZSBhIHpvbmUKK2Fzc2lnbmVkIHRvIHVwIHRvIDQgUEVDSSBhZGRyZXNzZXMuIFRoaXMgaXMgbm90IHBvc3NpYmxlIGluIHRoZSBkZWZhdWx0CitJbnRlbCBjb25maWd1cmF0aW9uLiBUaGlzIHdvdWxkIGJlIHVzZWZ1bCBpbiBtdWx0aS1DUFUgc3lzdGVtcyB3aXRoCitpbmRpdmlkdWFsIGZhbnMgb24gZWFjaCB0aGF0IHdvdWxkIGJlbmVmaXQgZnJvbSBpbmRpdmlkdWFsIGZhbiBjb250cm9sLgorVGhpcyBpcyBpbiByZWdpc3RlciAwRWguCisKK1RoZSB0YWNob21ldGVyIG1lYXN1cmVtZW50IHN5c3RlbSBpcyBmbGV4aWJsZSBhbmQgYWJsZSB0byBhZGFwdCB0byBtYW55CitmYW4gdHlwZXMuIFdlIGNhbiBhbHNvIHN1cHBvcnQgcHVsc2Utc3RyZXRjaGVkIFBXTSBzbyB0aGF0IDMtd2lyZSBmYW5zCittYXkgYmUgdXNlZC4gVGhlc2UgY2hhcmFjdGVyaXN0aWNzIGFyZSBpbiByZWdpc3RlcnMgMDRoIHRvIDA3aC4KKworRmluYWxseSwgd2UgaGF2ZSBhZGRlZCBhIHRhY2ggZGlzYWJsZSBmdW5jdGlvbiB0aGF0IHR1cm5zIG9mZiB0aGUgdGFjaAorbWVhc3VyZW1lbnQgc3lzdGVtIGZvciBpbmRpdmlkdWFsIHRhY2hzIGluIG9yZGVyIHRvIHNhdmUgcG93ZXIuIFRoYXQgaXMKK2luIHJlZ2lzdGVyIDc1aC4KKworLS0KK2FTQzc2MjEgUHJvZHVjdCBEZXNjcmlwdGlvbgorCitUaGUgYVNDNzYyMSBoYXMgYSB0d28gd2lyZSBkaWdpdGFsIGludGVyZmFjZSBjb21wYXRpYmxlIHdpdGggU01CdXMgMi4wLgorVXNpbmcgYSAxMC1iaXQgQURDLCB0aGUgYVNDNzYyMSBtZWFzdXJlcyB0aGUgdGVtcGVyYXR1cmUgb2YgdHdvIHJlbW90ZSBkaW9kZQorY29ubmVjdGVkIHRyYW5zaXN0b3JzIGFzIHdlbGwgYXMgaXRzIG93biBkaWUuIFN1cHBvcnQgZm9yIFBsYXRmb3JtCitFbnZpcm9ubWVudGFsIENvbnRyb2wgSW50ZXJmYWNlIChQRUNJKSBpcyBpbmNsdWRlZC4KKworVXNpbmcgdGVtcGVyYXR1cmUgaW5mb3JtYXRpb24gZnJvbSB0aGVzZSBmb3VyIHpvbmVzLCBhbiBhdXRvbWF0aWMgZmFuIHNwZWVkCitjb250cm9sIGFsZ29yaXRobSBpcyBlbXBsb3llZCB0byBtaW5pbWl6ZSBhY291c3RpYyBpbXBhY3Qgd2hpbGUgYWNoaWV2aW5nCityZWNvbW1lbmRlZCBDUFUgdGVtcGVyYXR1cmUgdW5kZXIgdmFyeWluZyBvcGVyYXRpb25hbCBsb2Fkcy4KKworVG8gc2V0IGZhbiBzcGVlZCwgdGhlIGFTQzc2MjEgaGFzIHRocmVlIGluZGVwZW5kZW50IHB1bHNlIHdpZHRoIG1vZHVsYXRpb24KKyhQV00pIG91dHB1dHMgdGhhdCBhcmUgY29udHJvbGxlZCBieSBvbmUsIG9yIGEgY29tYmluYXRpb24gb2YgdGhyZWUsCit0ZW1wZXJhdHVyZSB6b25lcy4gQm90aCBoaWdoLSBhbmQgbG93LWZyZXF1ZW5jeSBQV00gcmFuZ2VzIGFyZSBzdXBwb3J0ZWQuCisKK1RoZSBhU0M3NjIxIGFsc28gaW5jbHVkZXMgYSBkaWdpdGFsIGZpbHRlciB0aGF0IGNhbiBiZSBpbnZva2VkIHRvIHNtb290aAordGVtcGVyYXR1cmUgcmVhZGluZ3MgZm9yIGJldHRlciBjb250cm9sIG9mIGZhbiBzcGVlZCBhbmQgbWluaW11bSBhY291c3RpYworaW1wYWN0LgorCitUaGUgYVNDNzYyMSBoYXMgdGFjaG9tZXRlciBpbnB1dHMgdG8gbWVhc3VyZSBmYW4gc3BlZWQgb24gdXAgdG8gZm91ciBmYW5zLgorTGltaXQgYW5kIHN0YXR1cyByZWdpc3RlcnMgZm9yIGFsbCBtZWFzdXJlZCB2YWx1ZXMgYXJlIGluY2x1ZGVkIHRvIGFsZXJ0Cit0aGUgc3lzdGVtIGhvc3QgdGhhdCBhbnkgbWVhc3VyZW1lbnRzIGFyZSBvdXRzaWRlIG9mIHByb2dyYW1tZWQgbGltaXRzCit2aWEgc3RhdHVzIHJlZ2lzdGVycy4KKworU3lzdGVtIHZvbHRhZ2VzIG9mIFZDQ1AsIDIuNVYsIDMuM1YsIDUuMFYsIGFuZCAxMlYgbW90aGVyYm9hcmQgcG93ZXIgYXJlCittb25pdG9yZWQgZWZmaWNpZW50bHkgd2l0aCBpbnRlcm5hbCBzY2FsaW5nIHJlc2lzdG9ycy4KKworRmVhdHVyZXMKKy0gU3VwcG9ydHMgUEVDSSBpbnRlcmZhY2UgYW5kIG1vbml0b3JzIGludGVybmFsIGFuZCByZW1vdGUgdGhlcm1hbCBkaW9kZXMKKy0gMi13aXJlLCBTTUJ1cyAyLjAgY29tcGxpYW50LCBzZXJpYWwgaW50ZXJmYWNlCistIDEwLWJpdCBBREMKKy0gTW9uaXRvcnMgVkNDUCwgMi41ViwgMy4zViwgNS4wViwgYW5kIDEyViBtb3RoZXJib2FyZC9wcm9jZXNzb3Igc3VwcGxpZXMKKy0gUHJvZ3JhbW1hYmxlIGF1dG9ub21vdXMgZmFuIGNvbnRyb2wgYmFzZWQgb24gdGVtcGVyYXR1cmUgcmVhZGluZ3MKKy0gTm9pc2UgZmlsdGVyaW5nIG9mIHRlbXBlcmF0dXJlIHJlYWRpbmcgZm9yIGZhbiBzcGVlZCBjb250cm9sCistIDAuMjVDIGRpZ2l0YWwgdGVtcGVyYXR1cmUgc2Vuc29yIHJlc29sdXRpb24KKy0gMyBQV00gZmFuIHNwZWVkIGNvbnRyb2wgb3V0cHV0cyBmb3IgMi0sIDMtIG9yIDQtd2lyZSBmYW5zIGFuZCB1cCB0byA0IGZhbgorCXRhY2hvbWV0ZXIgaW5wdXRzCistIEVuaGFuY2VkIG1lYXN1cmVkIHRlbXBlcmF0dXJlIHRvIFRlbXBlcmF0dXJlIFpvbmUgYXNzaWdubWVudC4KKy0gUHJvdmlkZXMgaGlnaCBhbmQgbG93IFBXTSBmcmVxdWVuY3kgcmFuZ2VzCistIDMgR1BJTyBwaW5zIGZvciBjdXN0b20gdXNlCistIDI0LUxlYWQgUVNPUCBwYWNrYWdlCisKK0NvbmZpZ3VyYXRpb24gTm90ZXMKKz09PT09PT09PT09PT09PT09PT0KKworRXhjZXB0IHdoZXJlIG5vdGVkIGJlbG93LCB0aGUgc3lzZnMgZW50cmllcyBjcmVhdGVkIGJ5IHRoaXMgZHJpdmVyIGZvbGxvdwordGhlIHN0YW5kYXJkcyBkZWZpbmVkIGluICJzeXNmcy1pbnRlcmZhY2UiLgorCit0ZW1wMV9zb3VyY2UKKwkwIAkoZGVmYXVsdCkgcGVjaV9sZWdhY3kgPSAwLCBSZW1vdGUgMSBUZW1wZXJhdHVyZQorCQkJcGVjaV9sZWdhY3kgPSAxLCBQRUNJIFByb2Nlc3NvciBUZW1wZXJhdHVyZSAwCisJMSAJUmVtb3RlIDEgVGVtcGVyYXR1cmUKKwkyIAlSZW1vdGUgMiBUZW1wZXJhdHVyZQorCTMgCUludGVybmFsIFRlbXBlcmF0dXJlCisJNCAJUEVDSSBQcm9jZXNzb3IgVGVtcGVyYXR1cmUgMAorCTUgCVBFQ0kgUHJvY2Vzc29yIFRlbXBlcmF0dXJlIDEKKwk2IAlQRUNJIFByb2Nlc3NvciBUZW1wZXJhdHVyZSAyCisJNyAgUEVDSSBQcm9jZXNzb3IgVGVtcGVyYXR1cmUgMworCit0ZW1wMl9zb3VyY2UKKwkwIAkoZGVmYXVsdCkgSW50ZXJuYWwgVGVtcGVyYXR1cmUKKwkxIAlSZW1vdGUgMSBUZW1wZXJhdHVyZQorCTIgCVJlbW90ZSAyIFRlbXBlcmF0dXJlCisJMyAJSW50ZXJuYWwgVGVtcGVyYXR1cmUKKwk0IAlQRUNJIFByb2Nlc3NvciBUZW1wZXJhdHVyZSAwCisJNSAJUEVDSSBQcm9jZXNzb3IgVGVtcGVyYXR1cmUgMQorCTYgCVBFQ0kgUHJvY2Vzc29yIFRlbXBlcmF0dXJlIDIKKwk3IAlQRUNJIFByb2Nlc3NvciBUZW1wZXJhdHVyZSAzCisKK3RlbXAzX3NvdXJjZQorCTAgCShkZWZhdWx0KSBSZW1vdGUgMiBUZW1wZXJhdHVyZQorCTEgCVJlbW90ZSAxIFRlbXBlcmF0dXJlCisJMiAJUmVtb3RlIDIgVGVtcGVyYXR1cmUKKwkzIAlJbnRlcm5hbCBUZW1wZXJhdHVyZQorCTQgCVBFQ0kgUHJvY2Vzc29yIFRlbXBlcmF0dXJlIDAKKwk1IAlQRUNJIFByb2Nlc3NvciBUZW1wZXJhdHVyZSAxCisJNiAJUEVDSSBQcm9jZXNzb3IgVGVtcGVyYXR1cmUgMgorCTcgCVBFQ0kgUHJvY2Vzc29yIFRlbXBlcmF0dXJlIDMKKwordGVtcDRfc291cmNlCisJMCAJKGRlZmF1bHQpIHBlY2lfbGVnYWN5ID0gMCwgUEVDSSBQcm9jZXNzb3IgVGVtcGVyYXR1cmUgMAorCQkJcGVjaV9sZWdhY3kgPSAxLCBSZW1vdGUgMSBUZW1wZXJhdHVyZQorCTEgCVJlbW90ZSAxIFRlbXBlcmF0dXJlCisJMiAJUmVtb3RlIDIgVGVtcGVyYXR1cmUKKwkzIAlJbnRlcm5hbCBUZW1wZXJhdHVyZQorCTQgCVBFQ0kgUHJvY2Vzc29yIFRlbXBlcmF0dXJlIDAKKwk1IAlQRUNJIFByb2Nlc3NvciBUZW1wZXJhdHVyZSAxCisJNiAJUEVDSSBQcm9jZXNzb3IgVGVtcGVyYXR1cmUgMgorCTcgCVBFQ0kgUHJvY2Vzc29yIFRlbXBlcmF0dXJlIDMKKwordGVtcFsxLTRdX3Ntb290aGluZ19lbmFibGUKK3RlbXBbMS00XV9zbW9vdGhpbmdfdGltZQorCVNtb290aHMgc3Bpa2VzIGluIHRlbXAgcmVhZGluZ3MgY2F1c2VkIGJ5IG5vaXNlLgorCVZhbGlkIHZhbHVlcyBpbiBtaWxsaXNlY29uZHMgYXJlOgorCTM1MDAwCisJMTc2MDAKKwkxMTgwMAorCSA3MDAwCisJIDQ0MDAKKwkgMzAwMAorCSAxNjAwCisJICA4MDAKKwordGVtcFsxLTRdX2NyaXQKKwlXaGVuIHRoZSBjb3JyZXNwb25kaW5nIHpvbmUgdGVtcGVyYXR1cmUgcmVhY2hlcyB0aGlzIHZhbHVlLAorCUFMTCBwd20gb3V0cHV0cyB3aWxsIGdvdCB0byAxMDAlLgorCit0ZW1wWzUtOF1faW5wdXQKK3RlbXBbNS04XV9lbmFibGUKKwlUaGUgYVNDNzYyMSBjYW4gYWxzbyByZWFkIHRlbXBlcmF0dXJlcyBwcm92aWRlZCBieSB0aGUgcHJvY2Vzc29yCisJdmlhIHRoZSBQRUNJIGJ1cy4gIFVzdWFsbHkgdGhlc2UgYXJlICJjb3JlIiB0ZW1wcyBhbmQgYXJlIHJlbGF0aXZlCisJdG8gdGhlIHBvaW50IHdoZXJlIHRoZSBhdXRvbWF0aWMgdGhlcm1hbCBjb250cm9sIGNpcmN1aXQgc3RhcnRzCisJdGhyb3R0bGluZy4gIFRoaXMgbWVhbnMgdGhhdCB0aGVzZSBhcmUgdXN1YWxseSBuZWdhdGl2ZSBudW1iZXJzLgorCitwd21bMS0zXV9lbmFibGUKKwkwCQlGYW4gb2ZmLgorCTEJCUZhbiBvbiBtYW51YWwgY29udHJvbC4KKwkyCQlGYW4gb24gYXV0b21hdGljIGNvbnRyb2wgYW5kIHdpbGwgcnVuIGF0IHRoZSBtaW5pbXVtIHB3bQorCQkJCWlmIHRoZSB0ZW1wZXJhdHVyZSBmb3IgdGhlIHpvbmUgaXMgYmVsb3cgdGhlIG1pbmltdW0uCisJMwkJRmFuIG9uIGF1dG9tYXRpYyBjb250cm9sIGJ1dCB3aWxsIGJlIG9mZiBpZiB0aGUgdGVtcGVyYXR1cmUKKwkJCQlmb3IgdGhlIHpvbmUgaXMgYmVsb3cgdGhlIG1pbmltdW0uCisJNC0yNTQJSWdub3JlZC4KKwkyNTUJCUZhbiBvbiBmdWxsLgorCitwd21bMS0zXV9hdXRvX2NoYW5uZWxzCisJQml0bWFwIGFzIGRlc2NyaWJlZCBpbiBzeXNjdGwtaW50ZXJmYWNlIHdpdGggdGhlIGZvbGxvd2luZworCWV4Y2VwdGlvbnMuLi4KKwlPbmx5IHRoZSBmb2xsb3dpbmcgY29tYmluYXRpb24gb2Ygem9uZXMgKGFuZCB0aGVpciBjb3JyZXNwb25kaW5nIG1hc2tzKQorCWFyZSB2YWxpZDoKKwkxCisJMgorCTMKKwkyLDMKKwkxLDIsMworCTQKKwkxLDIsMyw0CisKKwlTcGVjaWFsIHZhbHVlczoKKwkwCQkJRGlzYWJsZWQuCisJMTYJCUZhbiBvbiBtYW51YWwgY29udHJvbC4KKwkzMQkJRmFuIG9uIGZ1bGwuCisKKworcHdtWzEtM11faW52ZXJ0CisJV2hlbiBzZXQsIGludmVydHMgdGhlIG1lYW5pbmcgb2YgcHdtWzEtM10uCisJaS5lLiAgd2hlbiBwd20gPSAwLCB0aGUgZmFuIHdpbGwgYmUgb24gZnVsbCBhbmQKKwl3aGVuIHB3bSA9IDI1NSB0aGUgZmFuIHdpbGwgYmUgb2ZmLgorCitwd21bMS0zXV9mcmVxCisJUFdNIGZyZXF1ZW5jeSBpbiBIegorCVZhbGlkIHZhbHVlcyBpbiBIeiBhcmU6CisKKwkxMAorCTE1CisJMjMKKwkzMCAgKGRlZmF1bHQpCisJMzgKKwk0NworCTYyCisJOTQKKwkyMzAwMAorCTI0MDAwCisJMjUwMDAKKwkyNjAwMAorCTI3MDAwCisJMjgwMDAKKwkyOTAwMAorCTMwMDAwCisKKwlTZXR0aW5nIGFueSBvdGhlciB2YWx1ZSB3aWxsIGJlIGlnbm9yZWQuCisKK3BlY2lfZW5hYmxlCisJRW5hYmxlcyBvciBkaXNhYmxlcyBQRUNJCisKK3BlY2lfYXZnCisJSW5wdXQgZmlsdGVyIGF2ZXJhZ2UgdGltZS4KKworCTAgCTAgU2VjLiAobm8gU21vb3RoaW5nKSAoZGVmYXVsdCkKKwkxIAkwLjI1IFNlYy4KKwkyIAkwLjUgU2VjLgorCTMgCTEuMCBTZWMuCisJNCAJMi4wIFNlYy4KKwk1IAk0LjAgU2VjLgorCTYgCTguMCBTZWMuCisJNyAJMC4wIFNlYy4KKworcGVjaV9sZWdhY3kKKworCTAJU3RhbmRhcmQgTW9kZSAoZGVmYXVsdCkKKwkJUmVtb3RlIERpb2RlIDEgcmVhZGluZyBpcyBhc3NvY2lhdGVkIHdpdGgKKwkJVGVtcGVyYXR1cmUgWm9uZSAxLCBQRUNJIGlzIGFzc29jaWF0ZWQgd2l0aAorCQlab25lIDQKKworCTEJTGVnYWN5IE1vZGUKKwkJUEVDSSBpcyBhc3NvY2lhdGVkIHdpdGggVGVtcGVyYXR1cmUgWm9uZSAxLAorCQlSZW1vdGUgRGlvZGUgMSBpcyBhc3NvY2lhdGVkIHdpdGggWm9uZSA0CisKK3BlY2lfZGlvZGUKKwlEaW9kZSBmaWx0ZXIKKworCTAJMC4yNSBTZWMuCisJMSAJMS4xIFNlYy4KKwkyIAkyLjQgU2VjLiAgKGRlZmF1bHQpCisJMyAJMy40IFNlYy4KKwk0IAk1LjAgU2VjLgorCTUgCTYuOCBTZWMuCisJNiAJMTAuMiBTZWMuCisJNyAJMTYuNCBTZWMuCisKK3BlY2lfNGRvbWFpbgorCUZvdXIgZG9tYWluIGVuYWJsZQorCisJMCAJMSBvciAyIERvbWFpbnMgZm9yIGVuYWJsZWQgcHJvY2Vzc29ycyAoZGVmYXVsdCkKKwkxIAkzIG9yIDQgRG9tYWlucyBmb3IgZW5hYmxlZCBwcm9jZXNzb3JzCisKK3BlY2lfZG9tYWluCisJRG9tYWluCisKKwkwIAlQcm9jZXNzb3IgY29udGFpbnMgYSBzaW5nbGUgZG9tYWluICgwKSAJIChkZWZhdWx0KQorCTEgCVByb2Nlc3NvciBjb250YWlucyB0d28gZG9tYWlucyAoMCwxKQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9pdDg3IGIvRG9jdW1lbnRhdGlvbi9od21vbi9pdDg3CmluZGV4IGY5YmE5NmMuLjhkMDhiZjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vaXQ4NworKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2l0ODcKQEAgLTUsMzEgKzUsMjMgQEAKICAgKiBJVDg3MDVGCiAgICAgUHJlZml4OiAnaXQ4NycKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogZnJvbSBTdXBlciBJL08gY29uZmlnIHNwYWNlICg4IEkvTyBwb3J0cykKLSAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgSVRFIHdlYnNpdGUKLSAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuaXRlLmNvbS50dy9wcm9kdWN0X2luZm8vZmlsZS9wYy9JVDg3MDVGX1YuMC40LjEucGRmCisgICAgRGF0YXNoZWV0OiBPbmNlIHB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgSVRFIHdlYnNpdGUsIGJ1dCBubyBsb25nZXIKICAgKiBJVDg3MTJGCiAgICAgUHJlZml4OiAnaXQ4NzEyJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBmcm9tIFN1cGVyIEkvTyBjb25maWcgc3BhY2UgKDggSS9PIHBvcnRzKQotICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBJVEUgd2Vic2l0ZQotICAgICAgICAgICAgICAgaHR0cDovL3d3dy5pdGUuY29tLnR3L3Byb2R1Y3RfaW5mby9maWxlL3BjL0lUODcxMkZfVjAuOS4xLnBkZgotICAgICAgICAgICAgICAgaHR0cDovL3d3dy5pdGUuY29tLnR3L3Byb2R1Y3RfaW5mby9maWxlL3BjL0VycmF0YSUyMFYwLjElMjBmb3IlMjBJVDg3MTJGJTIwVjAuOS4xLnBkZgotICAgICAgICAgICAgICAgaHR0cDovL3d3dy5pdGUuY29tLnR3L3Byb2R1Y3RfaW5mby9maWxlL3BjL0lUODcxMkZfVjAuOS4zLnBkZgorICAgIERhdGFzaGVldDogT25jZSBwdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIElURSB3ZWJzaXRlLCBidXQgbm8gbG9uZ2VyCiAgICogSVQ4NzE2Ri9JVDg3MjZGCiAgICAgUHJlZml4OiAnaXQ4NzE2JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBmcm9tIFN1cGVyIEkvTyBjb25maWcgc3BhY2UgKDggSS9PIHBvcnRzKQotICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBJVEUgd2Vic2l0ZQotICAgICAgICAgICAgICAgaHR0cDovL3d3dy5pdGUuY29tLnR3L3Byb2R1Y3RfaW5mby9maWxlL3BjL0lUODcxNkZfVjAuMy5aSVAKLSAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuaXRlLmNvbS50dy9wcm9kdWN0X2luZm8vZmlsZS9wYy9JVDg3MjZGX1YwLjMucGRmCisgICAgRGF0YXNoZWV0OiBPbmNlIHB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgSVRFIHdlYnNpdGUsIGJ1dCBubyBsb25nZXIKICAgKiBJVDg3MThGCiAgICAgUHJlZml4OiAnaXQ4NzE4JwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBmcm9tIFN1cGVyIEkvTyBjb25maWcgc3BhY2UgKDggSS9PIHBvcnRzKQotICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBJVEUgd2Vic2l0ZQotICAgICAgICAgICAgICAgaHR0cDovL3d3dy5pdGUuY29tLnR3L3Byb2R1Y3RfaW5mby9maWxlL3BjL0lUODcxOEZfVjAuMi56aXAKLSAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuaXRlLmNvbS50dy9wcm9kdWN0X2luZm8vZmlsZS9wYy9JVDg3MThGX1YwJTIwM18oZm9yJTIwQyUyMHZlcnNpb24pLnppcAorICAgIERhdGFzaGVldDogT25jZSBwdWJsaWNseSBhdmFpbGFibGUgYXQgdGhlIElURSB3ZWJzaXRlLCBidXQgbm8gbG9uZ2VyCiAgICogSVQ4NzIwRgogICAgIFByZWZpeDogJ2l0ODcyMCcKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogZnJvbSBTdXBlciBJL08gY29uZmlnIHNwYWNlICg4IEkvTyBwb3J0cykKLSAgICBEYXRhc2hlZXQ6IE5vdCB5ZXQgcHVibGljbHkgYXZhaWxhYmxlLgorICAgIERhdGFzaGVldDogTm90IHB1YmxpY2x5IGF2YWlsYWJsZQogICAqIFNpUzk1MCAgIFtjbG9uZSBvZiBJVDg3MDVGXQogICAgIFByZWZpeDogJ2l0ODcnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IGZyb20gU3VwZXIgSS9PIGNvbmZpZyBzcGFjZSAoOCBJL08gcG9ydHMpCkBAIC0xMzYsNiArMTI4LDEwIEBACiBzZWNvbmRzIHNpbmNlIHRoZSBsYXN0IHVwZGF0ZSkuIFRoaXMgbWVhbnMgdGhhdCB5b3UgY2FuIGVhc2lseSBtaXNzCiBvbmNlLW9ubHkgYWxhcm1zLgogCitPdXQtb2YtbGltaXQgcmVhZGluZ3MgY2FuIGFsc28gcmVzdWx0IGluIGJlZXBpbmcsIGlmIHRoZSBjaGlwIGlzIHByb3Blcmx5Cit3aXJlZCBhbmQgY29uZmlndXJlZC4gQmVlcGluZyBjYW4gYmUgZW5hYmxlZCBvciBkaXNhYmxlZCBwZXIgc2Vuc29yIHR5cGUKKyh0ZW1wZXJhdHVyZXMsIHZvbHRhZ2VzIGFuZCBmYW5zLikKKwogVGhlIElUODd4eCBvbmx5IHVwZGF0ZXMgaXRzIHZhbHVlcyBlYWNoIDEuNSBzZWNvbmRzOyByZWFkaW5nIGl0IG1vcmUgb2Z0ZW4KIHdpbGwgZG8gbm8gaGFybSwgYnV0IHdpbGwgcmV0dXJuICdvbGQnIHZhbHVlcy4KIApAQCAtMTUwLDExICsxNDYsMzggQEAKIC0tLS0tLS0tLS0tLS0tLS0tCiAKIFRoZSBmYW4gc3BlZWQgY29udHJvbCBmZWF0dXJlcyBhcmUgbGltaXRlZCB0byBtYW51YWwgUFdNIG1vZGUuIEF1dG9tYXRpYwotIlNtYXJ0IEd1YXJkaWFuIiBtb2RlIGNvbnRyb2wgaGFuZGxpbmcgaXMgbm90IGltcGxlbWVudGVkLiBIb3dldmVyCi1pZiB5b3Ugd2FudCB0byBnbyBmb3IgIm1hbnVhbCBtb2RlIiBqdXN0IHdyaXRlIDEgdG8gcHdtTl9lbmFibGUuCisiU21hcnQgR3VhcmRpYW4iIG1vZGUgY29udHJvbCBoYW5kbGluZyBpcyBvbmx5IGltcGxlbWVudGVkIGZvciBvbGRlciBjaGlwcworKHNlZSBiZWxvdy4pIEhvd2V2ZXIgaWYgeW91IHdhbnQgdG8gZ28gZm9yICJtYW51YWwgbW9kZSIganVzdCB3cml0ZSAxIHRvCitwd21OX2VuYWJsZS4KIAogSWYgeW91IGFyZSBvbmx5IGFibGUgdG8gY29udHJvbCB0aGUgZmFuIHNwZWVkIHdpdGggdmVyeSBzbWFsbCBQV00gdmFsdWVzLAogdHJ5IGxvd2VyaW5nIHRoZSBQV00gYmFzZSBmcmVxdWVuY3kgKHB3bTFfZnJlcSkuIERlcGVuZGluZyBvbiB0aGUgZmFuLAogaXQgbWF5IGdpdmUgeW91IGEgc29tZXdoYXQgZ3JlYXRlciBjb250cm9sIHJhbmdlLiBUaGUgc2FtZSBmcmVxdWVuY3kgaXMKIHVzZWQgdG8gZHJpdmUgYWxsIGZhbiBvdXRwdXRzLCB3aGljaCBpcyB3aHkgcHdtMl9mcmVxIGFuZCBwd20zX2ZyZXEgYXJlCiByZWFkLW9ubHkuCisKKworQXV0b21hdGljIGZhbiBzcGVlZCBjb250cm9sIChvbGQgaW50ZXJmYWNlKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZHJpdmVyIHN1cHBvcnRzIHRoZSBvbGQgaW50ZXJmYWNlIHRvIGF1dG9tYXRpYyBmYW4gc3BlZWQgY29udHJvbAord2hpY2ggaXMgaW1wbGVtZW50ZWQgYnkgSVQ4NzA1RiBjaGlwcyB1cCB0byByZXZpc2lvbiBGIGFuZCBJVDg3MTJGCitjaGlwcyB1cCB0byByZXZpc2lvbiBHLgorCitUaGlzIGludGVyZmFjZSBpbXBsZW1lbnRzIDQgdGVtcGVyYXR1cmUgdnMuIFBXTSBvdXRwdXQgdHJpcCBwb2ludHMuCitUaGUgUFdNIG91dHB1dCBvZiB0cmlwIHBvaW50IDQgaXMgYWx3YXlzIHRoZSBtYXhpbXVtIHZhbHVlIChmYW4gcnVubmluZworYXQgZnVsbCBzcGVlZCkgd2hpbGUgdGhlIFBXTSBvdXRwdXQgb2YgdGhlIG90aGVyIDMgdHJpcCBwb2ludHMgY2FuIGJlCitmcmVlbHkgY2hvc2VuLiBUaGUgdGVtcGVyYXR1cmUgb2YgYWxsIDQgdHJpcCBwb2ludHMgY2FuIGJlIGZyZWVseSBjaG9zZW4uCitBZGRpdGlvbmFsbHksIHRyaXAgcG9pbnQgMSBoYXMgYW4gaHlzdGVyZXNpcyB0ZW1wZXJhdHVyZSBhdHRhY2hlZCwgdG8KK3ByZXZlbnQgZmFzdCBzd2l0Y2hpbmcgYmV0d2VlbiBmYW4gb24gYW5kIG9mZi4KKworVGhlIGNoaXAgYXV0b21hdGljYWxseSBjb21wdXRlcyB0aGUgUFdNIG91dHB1dCB2YWx1ZSBiYXNlZCBvbiB0aGUgaW5wdXQKK3RlbXBlcmF0dXJlLCBiYXNlZCBvbiB0aGlzIHNpbXBsZSBydWxlOiBpZiB0aGUgdGVtcGVyYXR1cmUgdmFsdWUgaXMKK2JldHdlZW4gdHJpcCBwb2ludCBOIGFuZCB0cmlwIHBvaW50IE4rMSB0aGVuIHRoZSBQV00gb3V0cHV0IHZhbHVlIGlzCit0aGUgb25lIG9mIHRyaXAgcG9pbnQgTi4gVGhlIGF1dG9tYXRpYyBjb250cm9sIG1vZGUgaXMgbGVzcyBmbGV4aWJsZQordGhhbiB0aGUgbWFudWFsIGNvbnRyb2wgbW9kZSwgYnV0IGl0IHJlYWN0cyBmYXN0ZXIsIGlzIG1vcmUgcm9idXN0IGFuZAorZG9lc24ndCB1c2UgQ1BVIGN5Y2xlcy4KKworVHJpcCBwb2ludHMgbXVzdCBiZSBzZXQgcHJvcGVybHkgYmVmb3JlIHN3aXRjaGluZyB0byBhdXRvbWF0aWMgZmFuIHNwZWVkCitjb250cm9sIG1vZGUuIFRoZSBkcml2ZXIgd2lsbCBwZXJmb3JtIGJhc2ljIGludGVncml0eSBjaGVja3MgYmVmb3JlCithY3R1YWxseSBzd2l0Y2hpbmcgdG8gYXV0b21hdGljIGNvbnRyb2wgbW9kZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbG05MCBiL0RvY3VtZW50YXRpb24vaHdtb24vbG05MAppbmRleCA5M2Q4ZTNkLi42YTAzZGQ0IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2xtOTAKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9sbTkwCkBAIC04NCw2ICs4NCwxMCBAQAogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHg0YwogICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBNYXhpbSB3ZWJzaXRlCiAgICAgICAgICAgICAgICBodHRwOi8vd3d3Lm1heGltLWljLmNvbS9xdWlja192aWV3Mi5jZm0vcXZfcGsvMzUwMAorICAqIFdpbmJvbmQvTnV2b3RvbiBXODNMNzcxQVdHL0FTRworICAgIFByZWZpeDogJ3c4M2w3NzEnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IEkyQyAweDRjCisgICAgRGF0YXNoZWV0OiBOb3QgcHVibGljbHkgYXZhaWxhYmxlLCBjYW4gYmUgcmVxdWVzdGVkIGZyb20gTnV2b3RvbgogCiAKIEF1dGhvcjogSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CkBAIC0xNDcsNiArMTUxLDEyIEBACiAgICogU2VsZWN0YWJsZSBhZGRyZXNzCiAgICogUmVtb3RlIHNlbnNvciB0eXBlIHNlbGVjdGlvbgogCitXODNMNzcxQVdHL0FTRworICAqIFRoZSBBV0cgYW5kIEFTRyB2YXJpYW50cyBvbmx5IGRpZmZlciBpbiBwYWNrYWdlIGZvcm1hdC4KKyAgKiBGaWx0ZXIgYW5kIGFsZXJ0IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgYXQgMHhCRgorICAqIERpb2RlIGlkZWFsaXR5IGZhY3RvciBjb25maWd1cmF0aW9uIChyZW1vdGUgc2Vuc29yKSBhdCAweEUzCisgICogTW92aW5nIGF2ZXJhZ2UgKGRlcGVuZGluZyBvbiBjb252ZXJzaW9uIHJhdGUpCisKIEFsbCB0ZW1wZXJhdHVyZSB2YWx1ZXMgYXJlIGdpdmVuIGluIGRlZ3JlZXMgQ2Vsc2l1cy4gUmVzb2x1dGlvbgogaXMgMS4wIGRlZ3JlZSBmb3IgdGhlIGxvY2FsIHRlbXBlcmF0dXJlLCAwLjEyNSBkZWdyZWUgZm9yIHRoZSByZW1vdGUKIHRlbXBlcmF0dXJlLCBleGNlcHQgZm9yIHRoZSBNQVg2NjU3LCBNQVg2NjU4IGFuZCBNQVg2NjU5IHdoaWNoIGhhdmUgYQpAQCAtMTYzLDYgKzE3MywxOCBAQAogb3RoZXIgc2Vjb25kOyByZWFkaW5nIHRoZW0gbW9yZSBvZnRlbiB3aWxsIGRvIG5vIGhhcm0sIGJ1dCB3aWxsIHJldHVybgogJ29sZCcgdmFsdWVzLgogCitTTUJ1cyBBbGVydCBTdXBwb3J0CistLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIGhhcyBiYXNpYyBzdXBwb3J0IGZvciBTTUJ1cyBhbGVydC4gV2hlbiBhbiBhbGVydCBpcyByZWNlaXZlZCwKK3RoZSBzdGF0dXMgcmVnaXN0ZXIgaXMgcmVhZCBhbmQgdGhlIGZhdWx0eSB0ZW1wZXJhdHVyZSBjaGFubmVsIGlzIGxvZ2dlZC4KKworVGhlIEFuYWxvZyBEZXZpY2VzIGNoaXBzIChBRE0xMDMyIGFuZCBBRFQ3NDYxKSBkbyBub3QgaW1wbGVtZW50IHRoZSBTTUJ1cworYWxlcnQgcHJvdG9jb2wgcHJvcGVybHkgc28gYWRkaXRpb25hbCBjYXJlIGlzIG5lZWRlZDogdGhlIEFMRVJUIG91dHB1dCBpcworZGlzYWJsZWQgd2hlbiBhbiBhbGVydCBpcyByZWNlaXZlZCwgYW5kIGlzIHJlLWVuYWJsZWQgb25seSB3aGVuIHRoZSBhbGFybQoraXMgZ29uZS4gT3RoZXJ3aXNlIHRoZSBjaGlwIHdvdWxkIGJsb2NrIGFsZXJ0cyBmcm9tIG90aGVyIGNoaXBzIGluIHRoZSBidXMKK2FzIGxvbmcgYXMgdGhlIGFsYXJtIGlzIGFjdGl2ZS4KKwogUEVDIFN1cHBvcnQKIC0tLS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtaTgwMSBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtaTgwMQppbmRleCA4MWMwYzU5Li5lMWJiNWIyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLWk4MDEKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1pODAxCkBAIC0xNSw3ICsxNSw4IEBACiAgICogSW50ZWwgODI4MDFJIChJQ0g5KQogICAqIEludGVsIEVQODA1NzkgKFRvbGFwYWkpCiAgICogSW50ZWwgODI4MDFKSSAoSUNIMTApCi0gICogSW50ZWwgUENICisgICogSW50ZWwgMzQwMC81IFNlcmllcyAoUENIKQorICAqIEludGVsIENvdWdhciBQb2ludCAoUENIKQogICAgRGF0YXNoZWV0czogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBJbnRlbCB3ZWJzaXRlCiAKIEF1dGhvcnM6IApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0IGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0CmluZGV4IGRjZWFiYTEuLjI0NjFjN2IgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGFycG9ydAorKysgYi9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQKQEAgLTI5LDYgKzI5LDkgQEAKIEVhcmxpZXIga2VybmVscyBkZWZhdWx0ZWQgdG8gdHlwZT0wIChQaGlsaXBzKS4gIEJ1dCBub3csIGlmIHRoZSB0eXBlCiBwYXJhbWV0ZXIgaXMgbWlzc2luZywgdGhlIGRyaXZlciB3aWxsIHNpbXBseSBmYWlsIHRvIGluaXRpYWxpemUuCiAKK1NNQnVzIGFsZXJ0IHN1cHBvcnQgaXMgYXZhaWxhYmxlIG9uIGFkYXB0ZXJzIHdoaWNoIGhhdmUgdGhpcyBsaW5lIHByb3Blcmx5Citjb25uZWN0ZWQgdG8gdGhlIHBhcmFsbGVsIHBvcnQncyBpbnRlcnJ1cHQgcGluLgorCiAKIEJ1aWxkaW5nIHlvdXIgb3duIGFkYXB0ZXIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodCBiL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodAppbmRleCAyODc0MzY0Li5iZGM5Y2JiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LWxpZ2h0CkBAIC05LDMgKzksMTQgQEAKIGFuZCB0aGUgaW1wb3NzaWJpbGl0eSB0byBkYWlzeS1jaGFpbiBvdGhlciBwYXJhbGxlbCBwb3J0IGRldmljZXMuICAgICAgICAgICAgICAgICAKICAgCiBQbGVhc2Ugc2VlIGkyYy1wYXJwb3J0IGZvciBkb2N1bWVudGF0aW9uLgorCitNb2R1bGUgcGFyYW1ldGVyczoKKworKiB0eXBlOiB0eXBlIG9mIGFkYXB0ZXIgKHNlZSBpMmMtcGFycG9ydCBvciBtb2RpbmZvKQorCisqIGJhc2U6IGJhc2UgSS9PIGFkZHJlc3MKKyAgRGVmYXVsdCBpcyAweDM3OCB3aGljaCBpcyBmYWlybHkgY29tbW9uIGZvciBwYXJhbGxlbCBwb3J0cywgYXQgbGVhc3Qgb24gUEMuCisKKyogaXJxOiBvcHRpb25hbCBJUlEKKyAgVGhpcyBtdXN0IGJlIHBhc3NlZCBpZiB5b3Ugd2FudCBTTUJ1cyBhbGVydCBzdXBwb3J0LCBhc3N1bWluZyB5b3VyIGFkYXB0ZXIKKyAgYWN0dWFsbHkgc3VwcG9ydHMgdGhpcy4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL3NtYnVzLXByb3RvY29sIGIvRG9jdW1lbnRhdGlvbi9pMmMvc21idXMtcHJvdG9jb2wKaW5kZXggOWRmNDc0NC4uN2MxOWQxYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvc21idXMtcHJvdG9jb2wKKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvc21idXMtcHJvdG9jb2wKQEAgLTE4NSw2ICsxODUsMjIgQEAKIHJlcXVpcmUgUEVDIGNoZWNrc3Vtcy4KIAogCitTTUJ1cyBBbGVydAorPT09PT09PT09PT0KKworU01CdXMgQWxlcnQgd2FzIGludHJvZHVjZWQgaW4gUmV2aXNpb24gMS4wIG9mIHRoZSBzcGVjaWZpY2F0aW9uLgorCitUaGUgU01CdXMgYWxlcnQgcHJvdG9jb2wgYWxsb3dzIHNldmVyYWwgU01CdXMgc2xhdmUgZGV2aWNlcyB0byBzaGFyZSBhCitzaW5nbGUgaW50ZXJydXB0IHBpbiBvbiB0aGUgU01CdXMgbWFzdGVyLCB3aGlsZSBzdGlsbCBhbGxvd2luZyB0aGUgbWFzdGVyCit0byBrbm93IHdoaWNoIHNsYXZlIHRyaWdnZXJlZCB0aGUgaW50ZXJydXB0LgorCitUaGlzIGlzIGltcGxlbWVudGVkIHRoZSBmb2xsb3dpbmcgd2F5IGluIHRoZSBMaW51eCBrZXJuZWw6CisqIEkyQyBidXMgZHJpdmVycyB3aGljaCBzdXBwb3J0IFNNQnVzIGFsZXJ0IHNob3VsZCBjYWxsCisgIGkyY19zZXR1cF9zbWJ1c19hbGVydCgpIHRvIHNldHVwIFNNQnVzIGFsZXJ0IHN1cHBvcnQuCisqIEkyQyBkcml2ZXJzIGZvciBkZXZpY2VzIHdoaWNoIGNhbiB0cmlnZ2VyIFNNQnVzIGFsZXJ0cyBzaG91bGQgaW1wbGVtZW50CisgIHRoZSBvcHRpb25hbCBhbGVydCgpIGNhbGxiYWNrLgorCisKIEkyQyBCbG9jayBUcmFuc2FjdGlvbnMKID09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzIGIvRG9jdW1lbnRhdGlvbi9pMmMvd3JpdGluZy1jbGllbnRzCmluZGV4IDBhNzQ2MDMuLjMyMTllZTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL3dyaXRpbmctY2xpZW50cworKysgYi9Eb2N1bWVudGF0aW9uL2kyYy93cml0aW5nLWNsaWVudHMKQEAgLTMxOCw4ICszMTgsOSBAQAogVGhlc2Ugcm91dGluZXMgcmVhZCBhbmQgd3JpdGUgc29tZSBieXRlcyBmcm9tL3RvIGEgY2xpZW50LiBUaGUgY2xpZW50CiBjb250YWlucyB0aGUgaTJjIGFkZHJlc3MsIHNvIHlvdSBkbyBub3QgaGF2ZSB0byBpbmNsdWRlIGl0LiBUaGUgc2Vjb25kCiBwYXJhbWV0ZXIgY29udGFpbnMgdGhlIGJ5dGVzIHRvIHJlYWQvd3JpdGUsIHRoZSB0aGlyZCB0aGUgbnVtYmVyIG9mIGJ5dGVzCi10byByZWFkL3dyaXRlIChtdXN0IGJlIGxlc3MgdGhhbiB0aGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIuKSBSZXR1cm5lZCBpcwotdGhlIGFjdHVhbCBudW1iZXIgb2YgYnl0ZXMgcmVhZC93cml0dGVuLgordG8gcmVhZC93cml0ZSAobXVzdCBiZSBsZXNzIHRoYW4gdGhlIGxlbmd0aCBvZiB0aGUgYnVmZmVyLCBhbHNvIHNob3VsZCBiZQorbGVzcyB0aGFuIDY0ayBzaW5jZSBtc2cubGVuIGlzIHUxNi4pIFJldHVybmVkIGlzIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGJ5dGVzCityZWFkL3dyaXR0ZW4uCiAKIAlpbnQgaTJjX3RyYW5zZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGkyY19tc2cgKm1zZywKIAkJCSBpbnQgbnVtKTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5pdC50eHQgYi9Eb2N1bWVudGF0aW9uL2luaXQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNWFkNWUKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2luaXQudHh0CkBAIC0wLDAgKzEsNDkgQEAKK0V4cGxhaW5pbmcgdGhlIGRyZWFkZWQgIk5vIGluaXQgZm91bmQuIiBib290IGhhbmcgbWVzc2FnZQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK09LLCBzbyB5b3UndmUgZ290IHRoaXMgcHJldHR5IHVuaW50dWl0aXZlIG1lc3NhZ2UgKGN1cnJlbnRseSBsb2NhdGVkCitpbiBpbml0L21haW4uYykgYW5kIGFyZSB3b25kZXJpbmcgd2hhdCB0aGUgSCoqKiB3ZW50IHdyb25nLgorU29tZSBoaWdoLWxldmVsIHJlYXNvbnMgZm9yIGZhaWx1cmUgKGxpc3RlZCByb3VnaGx5IGluIG9yZGVyIG9mIGV4ZWN1dGlvbikKK3RvIGxvYWQgdGhlIGluaXQgYmluYXJ5IGFyZToKK0EpIFVuYWJsZSB0byBtb3VudCByb290IEZTCitCKSBpbml0IGJpbmFyeSBkb2Vzbid0IGV4aXN0IG9uIHJvb3RmcworQykgYnJva2VuIGNvbnNvbGUgZGV2aWNlCitEKSBiaW5hcnkgZXhpc3RzIGJ1dCBkZXBlbmRlbmNpZXMgbm90IGF2YWlsYWJsZQorRSkgYmluYXJ5IGNhbm5vdCBiZSBsb2FkZWQKKworRGV0YWlsZWQgZXhwbGFuYXRpb25zOgorMCkgU2V0ICJkZWJ1ZyIga2VybmVsIHBhcmFtZXRlciAoaW4gYm9vdGxvYWRlciBjb25maWcgZmlsZSBvciBDT05GSUdfQ01ETElORSkKKyAgIHRvIGdldCBtb3JlIGRldGFpbGVkIGtlcm5lbCBtZXNzYWdlcy4KK0EpIG1ha2Ugc3VyZSB5b3UgaGF2ZSB0aGUgY29ycmVjdCByb290IEZTIHR5cGUKKyAgIChhbmQgcm9vdD0ga2VybmVsIHBhcmFtZXRlciBwb2ludHMgdG8gdGhlIGNvcnJlY3QgcGFydGl0aW9uKSwKKyAgIHJlcXVpcmVkIGRyaXZlcnMgc3VjaCBhcyBzdG9yYWdlIGhhcmR3YXJlIChzdWNoIGFzIFNDU0kgb3IgVVNCISkKKyAgIGFuZCBmaWxlc3lzdGVtIChleHQzLCBqZmZzMiBldGMuKSBhcmUgYnVpbHRpbiAoYWx0ZXJuYXRpdmVseSBhcyBtb2R1bGVzLAorICAgdG8gYmUgcHJlLWxvYWRlZCBieSBhbiBpbml0cmQpCitDKSBQb3NzaWJseSBhIGNvbmZsaWN0IGluIGNvbnNvbGU9IHNldHVwIC0tPiBpbml0aWFsIGNvbnNvbGUgdW5hdmFpbGFibGUuCisgICBFLmcuIHNvbWUgc2VyaWFsIGNvbnNvbGVzIGFyZSB1bnJlbGlhYmxlIGR1ZSB0byBzZXJpYWwgSVJRIGlzc3VlcyAoZS5nLgorICAgbWlzc2luZyBpbnRlcnJ1cHQtYmFzZWQgY29uZmlndXJhdGlvbikuCisgICBUcnkgdXNpbmcgYSBkaWZmZXJlbnQgY29uc29sZT0gZGV2aWNlIG9yIGUuZy4gbmV0Y29uc29sZT0gLgorRCkgZS5nLiByZXF1aXJlZCBsaWJyYXJ5IGRlcGVuZGVuY2llcyBvZiB0aGUgaW5pdCBiaW5hcnkgc3VjaCBhcworICAgL2xpYi9sZC1saW51eC5zby4yIG1pc3Npbmcgb3IgYnJva2VuLiBVc2UgcmVhZGVsZiAtZCA8SU5JVD58Z3JlcCBORUVERUQKKyAgIHRvIGZpbmQgb3V0IHdoaWNoIGxpYnJhcmllcyBhcmUgcmVxdWlyZWQuCitFKSBtYWtlIHN1cmUgdGhlIGJpbmFyeSdzIGFyY2hpdGVjdHVyZSBtYXRjaGVzIHlvdXIgaGFyZHdhcmUuCisgICBFLmcuIGkzODYgdnMuIHg4Nl82NCBtaXNtYXRjaCwgb3IgdHJ5aW5nIHRvIGxvYWQgeDg2IG9uIEFSTSBoYXJkd2FyZS4KKyAgIEluIGNhc2UgeW91IHRyaWVkIGxvYWRpbmcgYSBub24tYmluYXJ5IGZpbGUgaGVyZSAoc2hlbGwgc2NyaXB0PyksCisgICB5b3Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSBzY3JpcHQgc3BlY2lmaWVzIGFuIGludGVycHJldGVyIGluIGl0cyBzaGViYW5nCisgICBoZWFkZXIgbGluZSAoIyEvLi4uKSB0aGF0IGlzIGZ1bGx5IHdvcmtpbmcgKGluY2x1ZGluZyBpdHMgbGlicmFyeQorICAgZGVwZW5kZW5jaWVzKS4gQW5kIGJlZm9yZSB0YWNrbGluZyBzY3JpcHRzLCBiZXR0ZXIgZmlyc3QgdGVzdCBhIHNpbXBsZQorICAgbm9uLXNjcmlwdCBiaW5hcnkgc3VjaCBhcyAvYmluL3NoIGFuZCBjb25maXJtIGl0cyBzdWNjZXNzZnVsIGV4ZWN1dGlvbi4KKyAgIFRvIGZpbmQgb3V0IG1vcmUsIGFkZCBjb2RlIHRvIGluaXQvbWFpbi5jIHRvIGRpc3BsYXkga2VybmVsX2V4ZWN2ZSgpcworICAgcmV0dXJuIHZhbHVlcy4KKworUGxlYXNlIGV4dGVuZCB0aGlzIGV4cGxhbmF0aW9uIHdoZW5ldmVyIHlvdSBmaW5kIG5ldyBmYWlsdXJlIGNhdXNlcworKGFmdGVyIGFsbCBsb2FkaW5nIHRoZSBpbml0IGJpbmFyeSBpcyBhIENSSVRJQ0FMIGFuZCBoYXJkIHRyYW5zaXRpb24gc3RlcAord2hpY2ggbmVlZHMgdG8gYmUgbWFkZSBhcyBwYWlubGVzcyBhcyBwb3NzaWJsZSksIHRoZW4gc3VibWl0IHBhdGNoIHRvIExLTUwuCitGdXJ0aGVyIFRPRE9zOgorLSBJbXBsZW1lbnQgdGhlIHZhcmlvdXMgcnVuX2luaXRfcHJvY2VzcygpIGludm9jYXRpb25zIHZpYSBhIHN0cnVjdCBhcnJheQorICB3aGljaCBjYW4gdGhlbiBzdG9yZSB0aGUga2VybmVsX2V4ZWN2ZSgpIHJlc3VsdCB2YWx1ZSBhbmQgb24gZmFpbHVyZQorICBsb2cgaXQgYWxsIGJ5IGl0ZXJhdGluZyBvdmVyIF9hbGxfIHJlc3VsdHMgKHZlcnkgaW1wb3J0YW50IHVzYWJpbGl0eSBmaXgpLgorLSB0cnkgdG8gbWFrZSB0aGUgaW1wbGVtZW50YXRpb24gaXRzZWxmIG1vcmUgaGVscGZ1bCBpbiBnZW5lcmFsLAorICBlLmcuIGJ5IHByb3ZpZGluZyBhZGRpdGlvbmFsIGVycm9yIG1lc3NhZ2VzIGF0IGFmZmVjdGVkIHBsYWNlcy4KKworQW5kcmVhcyBNb2hyIDxhbmRpIGF0IGxpc2FzIHBlcmlvZCBkZT4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW5wdXQvcm90YXJ5LWVuY29kZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9yb3RhcnktZW5jb2Rlci50eHQKaW5kZXggM2E2YWVjNC4uOGI0MTI5ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pbnB1dC9yb3RhcnktZW5jb2Rlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pbnB1dC9yb3RhcnktZW5jb2Rlci50eHQKQEAgLTc1LDcgKzc1LDcgQEAKIHRoZSBjb25maWd1cmF0aW9uLgogCiBCZWNhdXNlIEdQSU8gdG8gSVJRIG1hcHBpbmcgaXMgcGxhdGZvcm0gc3BlY2lmaWMsIHRoaXMgaW5mb3JtYXRpb24gbXVzdAotYmUgZ2l2ZW4gaW4gc2VwZXJhdGVseSB0byB0aGUgZHJpdmVyLiBTZWUgdGhlIGV4YW1wbGUgYmVsb3cuCitiZSBnaXZlbiBpbiBzZXBhcmF0ZWx5IHRvIHRoZSBkcml2ZXIuIFNlZSB0aGUgZXhhbXBsZSBiZWxvdy4KIAogLS0tLS0tLS0tPHNuaXA+LS0tLS0tLS0tCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dCBiL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dAppbmRleCAzNWNmNjRkLi4zNWM5YjUxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0CkBAIC0xMzksNyArMTM5LDYgQEAKICdLJwlhbGwJbGludXgva2QuaAogJ0wnCTAwLTFGCWxpbnV4L2xvb3AuaAkJY29uZmxpY3QhCiAnTCcJMTAtMUYJZHJpdmVycy9zY3NpL21wdDJzYXMvbXB0MnNhc19jdGwuaAljb25mbGljdCEKLSdMJwkyMC0yRglsaW51eC91c2IvdnN0dXNiLmgKICdMJwlFMC1GRglsaW51eC9wcGRkLmgJCWVuY3J5cHRlZCBkaXNrIGRldmljZSBkcml2ZXIKIAkJCQkJPGh0dHA6Ly9saW51eDAxLmd3ZGcuZGUvfmFsYXRoYW0vcHBkZC5odG1sPgogJ00nCWFsbAlsaW51eC9zb3VuZGNhcmQuaAljb25mbGljdCEKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaXNkbi9JTlRFUkZBQ0UuQ0FQSSBiL0RvY3VtZW50YXRpb24vaXNkbi9JTlRFUkZBQ0UuQ0FQSQppbmRleCA1ZmU4ZGU1Li5mMTcyMDkxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2lzZG4vSU5URVJGQUNFLkNBUEkKKysrIGIvRG9jdW1lbnRhdGlvbi9pc2RuL0lOVEVSRkFDRS5DQVBJCkBAIC0xNDksMTAgKzE0OSwxMSBAQAogCXBvaW50ZXIgdG8gYSBjYWxsYmFjayBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGVudHJ5IGZvciB0aGUgZGV2aWNlIGluCiAJdGhlIENBUEkgY29udHJvbGxlciBpbmZvIHRhYmxlLCAvcHJvYy9jYXBpL2NvbnRyb2xsZXIKIAotcmVhZF9wcm9jX3QgKmN0cl9yZWFkX3Byb2MKLQlwb2ludGVyIHRvIHRoZSByZWFkX3Byb2MgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRoZSBkZXZpY2UncyBwcm9jIGZpbGUKLQlzeXN0ZW0gZW50cnksIC9wcm9jL2NhcGkvY29udHJvbGxlcnMvPG4+OyB3aWxsIGJlIGNhbGxlZCB3aXRoIGEKLQlwb2ludGVyIHRvIHRoZSBkZXZpY2UncyBjYXBpX2N0ciBzdHJ1Y3R1cmUgYXMgdGhlIGxhc3QgKGRhdGEpIGFyZ3VtZW50Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpwcm9jX2ZvcHMKKwlwb2ludGVycyB0byBjYWxsYmFjayBmdW5jdGlvbnMgZm9yIHRoZSBkZXZpY2UncyBwcm9jIGZpbGUKKwlzeXN0ZW0gZW50cnksIC9wcm9jL2NhcGkvY29udHJvbGxlcnMvPG4+OyBwb2ludGVyIHRvIHRoZSBkZXZpY2UncworCWNhcGlfY3RyIHN0cnVjdHVyZSBpcyBhdmFpbGFibGUgZnJvbSBzdHJ1Y3QgcHJvY19kaXJfZW50cnk6OmRhdGEKKwl3aGljaCBpcyBhdmFpbGFibGUgZnJvbSBzdHJ1Y3QgaW5vZGUuCiAKIE5vdGU6IENhbGxiYWNrIGZ1bmN0aW9ucyBleGNlcHQgc2VuZF9tZXNzYWdlKCkgYXJlIG5ldmVyIGNhbGxlZCBpbiBpbnRlcnJ1cHQKIGNvbnRleHQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmdpZ2FzZXQgYi9Eb2N1bWVudGF0aW9uL2lzZG4vUkVBRE1FLmdpZ2FzZXQKaW5kZXggNzk0OTQxZi4uZTQ3MmRmOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pc2RuL1JFQURNRS5naWdhc2V0CisrKyBiL0RvY3VtZW50YXRpb24vaXNkbi9SRUFETUUuZ2lnYXNldApAQCAtMjkyLDEwICsyOTIsMTAgQEAKICAgICAgICAgdG8gL2V0Yy9tb2Rwcm9iZS5kL2dpZ2FzZXQsIC9ldGMvbW9kcHJvYmUuY29uZi5sb2NhbCBvciBhIHNpbWlsYXIgZmlsZS4KIAogICAgICBQcm9ibGVtOgotICAgICAgICBZb3VyIGlzZG4gc2NyaXB0IGFib3J0cyB3aXRoIGEgbWVzc2FnZSBhYm91dCBpc2RubG9nLgorICAgICAgICBUaGUgaXNkbmxvZyBwcm9ncmFtIGVtaXRzIGVycm9yIG1lc3NhZ2VzIG9yIGp1c3QgZG9lc24ndCB3b3JrLgogICAgICBTb2x1dGlvbjoKLSAgICAgICAgVHJ5IGRlYWN0aXZhdGluZyAob3IgY29tbWVudGluZyBvdXQpIGlzZG5sb2cuIFRoaXMgZHJpdmVyIGRvZXMgbm90Ci0gICAgICAgIHN1cHBvcnQgaXQuCisgICAgICAgIElzZG5sb2cgc3VwcG9ydHMgb25seSB0aGUgSGlTYXggZHJpdmVyLiBEbyBub3QgYXR0ZW1wdCB0byB1c2UgaXQgd2l0aAorCW90aGVyIGRyaXZlcnMgc3VjaCBhcyBHaWdhc2V0LgogCiAgICAgIFByb2JsZW06CiAgICAgICAgIFlvdSBoYXZlIHR3byBvciBtb3JlIERFQ1QgZGF0YSBhZGFwdGVycyAoTTEwMS9NMTA1KSBhbmQgb25seSB0aGUKQEAgLTMyMSw4ICszMjEsOCBAQAogICAgICB3cml0aW5nIGFuIGFwcHJvcHJpYXRlIHZhbHVlIHRvIC9zeXMvbW9kdWxlL2dpZ2FzZXQvcGFyYW1ldGVycy9kZWJ1ZywgZS5nLgogICAgICAgICBlY2hvIDAgPiAvc3lzL21vZHVsZS9naWdhc2V0L3BhcmFtZXRlcnMvZGVidWcKICAgICAgc3dpdGNoZXMgb2ZmIGRlYnVnZ2luZyBvdXRwdXQgY29tcGxldGVseSwKLSAgICAgICAgZWNobyAweDEwYTAyMCA+IC9zeXMvbW9kdWxlL2dpZ2FzZXQvcGFyYW1ldGVycy9kZWJ1ZwotICAgICBlbmFibGVzIHRoZSBzdGFuZGFyZCBzZXQgb2YgZGVidWdnaW5nIG91dHB1dCBtZXNzYWdlcy4gVGhlc2UgdmFsdWVzIGFyZQorICAgICAgICBlY2hvIDB4MzAyMDIwID4gL3N5cy9tb2R1bGUvZ2lnYXNldC9wYXJhbWV0ZXJzL2RlYnVnCisgICAgIGVuYWJsZXMgYSByZWFzb25hYmxlIHNldCBvZiBkZWJ1Z2dpbmcgb3V0cHV0IG1lc3NhZ2VzLiBUaGVzZSB2YWx1ZXMgYXJlCiAgICAgIGJpdCBwYXR0ZXJucyB3aGVyZSBldmVyeSBiaXQgY29udHJvbHMgYSBjZXJ0YWluIHR5cGUgb2YgZGVidWdnaW5nIG91dHB1dC4KICAgICAgU2VlIHRoZSBjb25zdGFudHMgREVCVUdfKiBpbiB0aGUgc291cmNlIGZpbGUgZ2lnYXNldC5oIGZvciBkZXRhaWxzLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CmluZGV4IDhjNjY2ZDguLjNiYzQ4YjAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CisrKyBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0CkBAIC01NCw2ICs1NCw3IEBACiAJSU1BICAgICBJbnRlZ3JpdHkgbWVhc3VyZW1lbnQgYXJjaGl0ZWN0dXJlIGlzIGVuYWJsZWQuCiAJSU9TQ0hFRAlNb3JlIHRoYW4gb25lIEkvTyBzY2hlZHVsZXIgaXMgZW5hYmxlZC4KIAlJUF9QTlAJSVAgREhDUCwgQk9PVFAsIG9yIFJBUlAgaXMgZW5hYmxlZC4KKwlJUFY2CUlQdjYgc3VwcG9ydCBpcyBlbmFibGVkLgogCUlTQVBOUAlJU0EgUG5QIGNvZGUgaXMgZW5hYmxlZC4KIAlJU0ROCUFwcHJvcHJpYXRlIElTRE4gc3VwcG9ydCBpcyBlbmFibGVkLgogCUpPWQlBcHByb3ByaWF0ZSBqb3lzdGljayBzdXBwb3J0IGlzIGVuYWJsZWQuCkBAIC0zNTYsNiArMzU3LDkgQEAKIAkJCUNoYW5nZSB0aGUgYW1vdW50IG9mIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBvdXRwdXQKIAkJCXdoZW4gaW5pdGlhbGlzaW5nIHRoZSBBUElDIGFuZCBJTy1BUElDIGNvbXBvbmVudHMuCiAKKwlhdXRvY29uZj0JW0lQVjZdCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwdjYudHh0LgorCiAJc2hvd19sYXBpYz0JW0FQSUMsWDg2XSBBZHZhbmNlZCBQcm9ncmFtbWFibGUgSW50ZXJydXB0IENvbnRyb2xsZXIKIAkJCUxpbWl0IGFwaWMgZHVtcGluZy4gVGhlIHBhcmFtZXRlciBkZWZpbmVzIHRoZSBtYXhpbWFsCiAJCQludW1iZXIgb2YgbG9jYWwgYXBpY3MgYmVpbmcgZHVtcGVkLiBBbHNvIGl0IGlzIHBvc3NpYmxlCkBAIC02MzgsNiArNjQyLDEyIEBACiAJCQlTZWUgZHJpdmVycy9jaGFyL1JFQURNRS5lcGNhIGFuZAogCQkJRG9jdW1lbnRhdGlvbi9zZXJpYWwvZGlnaWVwY2EudHh0LgogCisJZGlzYWJsZT0JW0lQVjZdCisJCQlTZWUgRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2lwdjYudHh0LgorCisJZGlzYWJsZV9pcHY2PQlbSVBWNl0KKwkJCVNlZSBEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXB2Ni50eHQuCisKIAlkaXNhYmxlX210cnJfY2xlYW51cCBbWDg2XQogCQkJVGhlIGtlcm5lbCB0cmllcyB0byBhZGp1c3QgTVRSUiBsYXlvdXQgZnJvbSBjb250aW51b3VzCiAJCQl0byBkaXNjcmV0ZSwgdG8gbWFrZSBYIHNlcnZlciBkcml2ZXIgYWJsZSB0byBhZGQgV0IKQEAgLTE3ODQsNiArMTc5NCwxMiBAQAogCQkJcHVyZ2VzIHdoaWNoIGlzIHJlcG9ydGVkIGZyb20gZWl0aGVyIFBBTF9WTV9TVU1NQVJZIG9yCiAJCQlTQUwgUEFMTy4KIAorCW5yX2NwdXM9CVtTTVBdIE1heGltdW0gbnVtYmVyIG9mIHByb2Nlc3NvcnMgdGhhdAlhbiBTTVAga2VybmVsCisJCQljb3VsZCBzdXBwb3J0LiAgbnJfY3B1cz1uIDogbiA+PSAxIGxpbWl0cyB0aGUga2VybmVsIHRvCisJCQlzdXBwb3J0aW5nICduJyBwcm9jZXNzb3JzLiBMYXRlciBpbiBydW50aW1lIHlvdSBjYW4gbm90CisJCQl1c2UgaG90cGx1ZyBjcHUgZmVhdHVyZSB0byBwdXQgbW9yZSBjcHUgYmFjayB0byBvbmxpbmUuCisJCQlqdXN0IGxpa2UgeW91IGNvbXBpbGUgdGhlIGtlcm5lbCBOUl9DUFVTPW4KKwogCW5yX3VhcnRzPQlbU0VSSUFMXSBtYXhpbXVtIG51bWJlciBvZiBVQVJUcyB0byBiZSByZWdpc3RlcmVkLgogCiAJbnVtYV96b25lbGlzdF9vcmRlcj0gW0tOTCwgQk9PVF0gU2VsZWN0IHpvbmVsaXN0IG9yZGVyIGZvciBOVU1BLgpAQCAtMjgxOCw2ICsyODM0LDEyIEBACiAJCQlkZWZhdWx0IHgyYXBpYyBjbHVzdGVyIG1vZGUgb24gcGxhdGZvcm1zCiAJCQlzdXBwb3J0aW5nIHgyYXBpYy4KIAorCXg4Nl9tcnN0X3RpbWVyPSBbWDg2LTMyLEFQQlRdCisJCQlDaG9vc2UgdGltZXIgb3B0aW9uIGZvciB4ODYgTW9vcmVzdG93biBNSUQgcGxhdGZvcm0uCisJCQlUd28gdmFsaWQgb3B0aW9ucyBhcmUgYXBidCB0aW1lciBvbmx5IGFuZCBsYXBpYyB0aW1lcgorCQkJcGx1cyBvbmUgYXBidCB0aW1lciBmb3IgYnJvYWRjYXN0IHRpbWVyLgorCQkJeDg2X21yc3RfdGltZXI9YXBidF9vbmx5IHwgbGFwaWNfYW5kX2FwYnQKKwogCXhkPQkJW0hXLFhUXSBPcmlnaW5hbCBYVCBwcmUtSURFIChSTEwgZW5jb2RlZCkgZGlza3MuCiAJeGRfZ2VvPQkJU2VlIGhlYWRlciBvZiBkcml2ZXJzL2Jsb2NrL3hkLmMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va29iamVjdC50eHQgYi9Eb2N1bWVudGF0aW9uL2tvYmplY3QudHh0CmluZGV4IGM3OWFiOTkuLmJkYjEzODEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va29iamVjdC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rb2JqZWN0LnR4dApAQCAtMjY2LDcgKzI2Niw3IEBACiAKICAgICBzdHJ1Y3Qga29ial90eXBlIHsKIAkgICAgdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBrb2JqZWN0ICopOwotCSAgICBzdHJ1Y3Qgc3lzZnNfb3BzCSpzeXNmc19vcHM7CisJICAgIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgKnN5c2ZzX29wczsKIAkgICAgc3RydWN0IGF0dHJpYnV0ZQkqKmRlZmF1bHRfYXR0cnM7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rcHJvYmVzLnR4dCBiL0RvY3VtZW50YXRpb24va3Byb2Jlcy50eHQKaW5kZXggMDUzMDM3YS4uMmY5MTE1YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rcHJvYmVzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2twcm9iZXMudHh0CkBAIC0xLDYgKzEsNyBAQAogVGl0bGUJOiBLZXJuZWwgUHJvYmVzIChLcHJvYmVzKQogQXV0aG9ycwk6IEppbSBLZW5pc3RvbiA8amtlbmlzdG9AdXMuaWJtLmNvbT4KLQk6IFByYXNhbm5hIFMgUGFuY2hhbXVraGkgPHByYXNhbm5hQGluLmlibS5jb20+CisJOiBQcmFzYW5uYSBTIFBhbmNoYW11a2hpIDxwcmFzYW5uYS5wYW5jaGFtdWtoaUBnbWFpbC5jb20+CisJOiBNYXNhbWkgSGlyYW1hdHN1IDxtaGlyYW1hdEByZWRoYXQuY29tPgogCiBDT05URU5UUwogCkBAIC0xNSw2ICsxNiw3IEBACiA5LiBKcHJvYmVzIEV4YW1wbGUKIDEwLiBLcmV0cHJvYmVzIEV4YW1wbGUKIEFwcGVuZGl4IEE6IFRoZSBrcHJvYmVzIGRlYnVnZnMgaW50ZXJmYWNlCitBcHBlbmRpeCBCOiBUaGUga3Byb2JlcyBzeXNjdGwgaW50ZXJmYWNlCiAKIDEuIENvbmNlcHRzOiBLcHJvYmVzLCBKcHJvYmVzLCBSZXR1cm4gUHJvYmVzCiAKQEAgLTQyLDEzICs0NCwxMyBAQAogY2FuIHNwZWVkIHVwIHVucmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2hlbiB5b3UgaGF2ZSB0byB1bnJlZ2lzdGVyCiBhIGxvdCBvZiBwcm9iZXMgYXQgb25jZS4KIAotVGhlIG5leHQgdGhyZWUgc3Vic2VjdGlvbnMgZXhwbGFpbiBob3cgdGhlIGRpZmZlcmVudCB0eXBlcyBvZgotcHJvYmVzIHdvcmsuICBUaGV5IGV4cGxhaW4gY2VydGFpbiB0aGluZ3MgdGhhdCB5b3UnbGwgbmVlZCB0bwota25vdyBpbiBvcmRlciB0byBtYWtlIHRoZSBiZXN0IHVzZSBvZiBLcHJvYmVzIC0tIGUuZy4sIHRoZQotZGlmZmVyZW5jZSBiZXR3ZWVuIGEgcHJlX2hhbmRsZXIgYW5kIGEgcG9zdF9oYW5kbGVyLCBhbmQgaG93Ci10byB1c2UgdGhlIG1heGFjdGl2ZSBhbmQgbm1pc3NlZCBmaWVsZHMgb2YgYSBrcmV0cHJvYmUuICBCdXQKLWlmIHlvdSdyZSBpbiBhIGh1cnJ5IHRvIHN0YXJ0IHVzaW5nIEtwcm9iZXMsIHlvdSBjYW4gc2tpcCBhaGVhZAotdG8gc2VjdGlvbiAyLgorVGhlIG5leHQgZm91ciBzdWJzZWN0aW9ucyBleHBsYWluIGhvdyB0aGUgZGlmZmVyZW50IHR5cGVzIG9mCitwcm9iZXMgd29yayBhbmQgaG93IGp1bXAgb3B0aW1pemF0aW9uIHdvcmtzLiAgVGhleSBleHBsYWluIGNlcnRhaW4KK3RoaW5ncyB0aGF0IHlvdSdsbCBuZWVkIHRvIGtub3cgaW4gb3JkZXIgdG8gbWFrZSB0aGUgYmVzdCB1c2Ugb2YKK0twcm9iZXMgLS0gZS5nLiwgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIHByZV9oYW5kbGVyIGFuZAorYSBwb3N0X2hhbmRsZXIsIGFuZCBob3cgdG8gdXNlIHRoZSBtYXhhY3RpdmUgYW5kIG5taXNzZWQgZmllbGRzIG9mCithIGtyZXRwcm9iZS4gIEJ1dCBpZiB5b3UncmUgaW4gYSBodXJyeSB0byBzdGFydCB1c2luZyBLcHJvYmVzLCB5b3UKK2NhbiBza2lwIGFoZWFkIHRvIHNlY3Rpb24gMi4KIAogMS4xIEhvdyBEb2VzIGEgS3Byb2JlIFdvcms/CiAKQEAgLTE2MSwxMyArMTYzLDEyNSBAQAogb2JqZWN0IGF2YWlsYWJsZSwgdGhlbiBpbiBhZGRpdGlvbiB0byBpbmNyZW1lbnRpbmcgdGhlIG5taXNzZWQgY291bnQsCiB0aGUgdXNlciBlbnRyeV9oYW5kbGVyIGludm9jYXRpb24gaXMgYWxzbyBza2lwcGVkLgogCisxLjQgSG93IERvZXMgSnVtcCBPcHRpbWl6YXRpb24gV29yaz8KKworSWYgeW91IGNvbmZpZ3VyZWQgeW91ciBrZXJuZWwgd2l0aCBDT05GSUdfT1BUUFJPQkVTPXkgKGN1cnJlbnRseQordGhpcyBvcHRpb24gaXMgc3VwcG9ydGVkIG9uIHg4Ni94ODYtNjQsIG5vbi1wcmVlbXB0aXZlIGtlcm5lbCkgYW5kCit0aGUgImRlYnVnLmtwcm9iZXNfb3B0aW1pemF0aW9uIiBrZXJuZWwgcGFyYW1ldGVyIGlzIHNldCB0byAxIChzZWUKK3N5c2N0bCg4KSksIEtwcm9iZXMgdHJpZXMgdG8gcmVkdWNlIHByb2JlLWhpdCBvdmVyaGVhZCBieSB1c2luZyBhIGp1bXAKK2luc3RydWN0aW9uIGluc3RlYWQgb2YgYSBicmVha3BvaW50IGluc3RydWN0aW9uIGF0IGVhY2ggcHJvYmVwb2ludC4KKworMS40LjEgSW5pdCBhIEtwcm9iZQorCitXaGVuIGEgcHJvYmUgaXMgcmVnaXN0ZXJlZCwgYmVmb3JlIGF0dGVtcHRpbmcgdGhpcyBvcHRpbWl6YXRpb24sCitLcHJvYmVzIGluc2VydHMgYW4gb3JkaW5hcnksIGJyZWFrcG9pbnQtYmFzZWQga3Byb2JlIGF0IHRoZSBzcGVjaWZpZWQKK2FkZHJlc3MuIFNvLCBldmVuIGlmIGl0J3Mgbm90IHBvc3NpYmxlIHRvIG9wdGltaXplIHRoaXMgcGFydGljdWxhcgorcHJvYmVwb2ludCwgdGhlcmUnbGwgYmUgYSBwcm9iZSB0aGVyZS4KKworMS40LjIgU2FmZXR5IENoZWNrCisKK0JlZm9yZSBvcHRpbWl6aW5nIGEgcHJvYmUsIEtwcm9iZXMgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBzYWZldHkgY2hlY2tzOgorCistIEtwcm9iZXMgdmVyaWZpZXMgdGhhdCB0aGUgcmVnaW9uIHRoYXQgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUganVtcAoraW5zdHJ1Y3Rpb24gKHRoZSAib3B0aW1pemVkIHJlZ2lvbiIpIGxpZXMgZW50aXJlbHkgd2l0aGluIG9uZSBmdW5jdGlvbi4KKyhBIGp1bXAgaW5zdHJ1Y3Rpb24gaXMgbXVsdGlwbGUgYnl0ZXMsIGFuZCBzbyBtYXkgb3ZlcmxheSBtdWx0aXBsZQoraW5zdHJ1Y3Rpb25zLikKKworLSBLcHJvYmVzIGFuYWx5emVzIHRoZSBlbnRpcmUgZnVuY3Rpb24gYW5kIHZlcmlmaWVzIHRoYXQgdGhlcmUgaXMgbm8KK2p1bXAgaW50byB0aGUgb3B0aW1pemVkIHJlZ2lvbi4gIFNwZWNpZmljYWxseToKKyAgLSB0aGUgZnVuY3Rpb24gY29udGFpbnMgbm8gaW5kaXJlY3QganVtcDsKKyAgLSB0aGUgZnVuY3Rpb24gY29udGFpbnMgbm8gaW5zdHJ1Y3Rpb24gdGhhdCBjYXVzZXMgYW4gZXhjZXB0aW9uIChzaW5jZQorICB0aGUgZml4dXAgY29kZSB0cmlnZ2VyZWQgYnkgdGhlIGV4Y2VwdGlvbiBjb3VsZCBqdW1wIGJhY2sgaW50byB0aGUKKyAgb3B0aW1pemVkIHJlZ2lvbiAtLSBLcHJvYmVzIGNoZWNrcyB0aGUgZXhjZXB0aW9uIHRhYmxlcyB0byB2ZXJpZnkgdGhpcyk7CisgIGFuZAorICAtIHRoZXJlIGlzIG5vIG5lYXIganVtcCB0byB0aGUgb3B0aW1pemVkIHJlZ2lvbiAob3RoZXIgdGhhbiB0byB0aGUgZmlyc3QKKyAgYnl0ZSkuCisKKy0gRm9yIGVhY2ggaW5zdHJ1Y3Rpb24gaW4gdGhlIG9wdGltaXplZCByZWdpb24sIEtwcm9iZXMgdmVyaWZpZXMgdGhhdAordGhlIGluc3RydWN0aW9uIGNhbiBiZSBleGVjdXRlZCBvdXQgb2YgbGluZS4KKworMS40LjMgUHJlcGFyaW5nIERldG91ciBCdWZmZXIKKworTmV4dCwgS3Byb2JlcyBwcmVwYXJlcyBhICJkZXRvdXIiIGJ1ZmZlciwgd2hpY2ggY29udGFpbnMgdGhlIGZvbGxvd2luZworaW5zdHJ1Y3Rpb24gc2VxdWVuY2U6CistIGNvZGUgdG8gcHVzaCB0aGUgQ1BVJ3MgcmVnaXN0ZXJzIChlbXVsYXRpbmcgYSBicmVha3BvaW50IHRyYXApCistIGEgY2FsbCB0byB0aGUgdHJhbXBvbGluZSBjb2RlIHdoaWNoIGNhbGxzIHVzZXIncyBwcm9iZSBoYW5kbGVycy4KKy0gY29kZSB0byByZXN0b3JlIHJlZ2lzdGVycworLSB0aGUgaW5zdHJ1Y3Rpb25zIGZyb20gdGhlIG9wdGltaXplZCByZWdpb24KKy0gYSBqdW1wIGJhY2sgdG8gdGhlIG9yaWdpbmFsIGV4ZWN1dGlvbiBwYXRoLgorCisxLjQuNCBQcmUtb3B0aW1pemF0aW9uCisKK0FmdGVyIHByZXBhcmluZyB0aGUgZGV0b3VyIGJ1ZmZlciwgS3Byb2JlcyB2ZXJpZmllcyB0aGF0IG5vbmUgb2YgdGhlCitmb2xsb3dpbmcgc2l0dWF0aW9ucyBleGlzdDoKKy0gVGhlIHByb2JlIGhhcyBlaXRoZXIgYSBicmVha19oYW5kbGVyIChpLmUuLCBpdCdzIGEganByb2JlKSBvciBhCitwb3N0X2hhbmRsZXIuCistIE90aGVyIGluc3RydWN0aW9ucyBpbiB0aGUgb3B0aW1pemVkIHJlZ2lvbiBhcmUgcHJvYmVkLgorLSBUaGUgcHJvYmUgaXMgZGlzYWJsZWQuCitJbiBhbnkgb2YgdGhlIGFib3ZlIGNhc2VzLCBLcHJvYmVzIHdvbid0IHN0YXJ0IG9wdGltaXppbmcgdGhlIHByb2JlLgorU2luY2UgdGhlc2UgYXJlIHRlbXBvcmFyeSBzaXR1YXRpb25zLCBLcHJvYmVzIHRyaWVzIHRvIHN0YXJ0CitvcHRpbWl6aW5nIGl0IGFnYWluIGlmIHRoZSBzaXR1YXRpb24gaXMgY2hhbmdlZC4KKworSWYgdGhlIGtwcm9iZSBjYW4gYmUgb3B0aW1pemVkLCBLcHJvYmVzIGVucXVldWVzIHRoZSBrcHJvYmUgdG8gYW4KK29wdGltaXppbmcgbGlzdCwgYW5kIGtpY2tzIHRoZSBrcHJvYmUtb3B0aW1pemVyIHdvcmtxdWV1ZSB0byBvcHRpbWl6ZQoraXQuICBJZiB0aGUgdG8tYmUtb3B0aW1pemVkIHByb2JlcG9pbnQgaXMgaGl0IGJlZm9yZSBiZWluZyBvcHRpbWl6ZWQsCitLcHJvYmVzIHJldHVybnMgY29udHJvbCB0byB0aGUgb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gcGF0aCBieSBzZXR0aW5nCit0aGUgQ1BVJ3MgaW5zdHJ1Y3Rpb24gcG9pbnRlciB0byB0aGUgY29waWVkIGNvZGUgaW4gdGhlIGRldG91ciBidWZmZXIKKy0tIHRodXMgYXQgbGVhc3QgYXZvaWRpbmcgdGhlIHNpbmdsZS1zdGVwLgorCisxLjQuNSBPcHRpbWl6YXRpb24KKworVGhlIEtwcm9iZS1vcHRpbWl6ZXIgZG9lc24ndCBpbnNlcnQgdGhlIGp1bXAgaW5zdHJ1Y3Rpb24gaW1tZWRpYXRlbHk7CityYXRoZXIsIGl0IGNhbGxzIHN5bmNocm9uaXplX3NjaGVkKCkgZm9yIHNhZmV0eSBmaXJzdCwgYmVjYXVzZSBpdCdzCitwb3NzaWJsZSBmb3IgYSBDUFUgdG8gYmUgaW50ZXJydXB0ZWQgaW4gdGhlIG1pZGRsZSBvZiBleGVjdXRpbmcgdGhlCitvcHRpbWl6ZWQgcmVnaW9uKCopLiAgQXMgeW91IGtub3csIHN5bmNocm9uaXplX3NjaGVkKCkgY2FuIGVuc3VyZQordGhhdCBhbGwgaW50ZXJydXB0aW9ucyB0aGF0IHdlcmUgYWN0aXZlIHdoZW4gc3luY2hyb25pemVfc2NoZWQoKQord2FzIGNhbGxlZCBhcmUgZG9uZSwgYnV0IG9ubHkgaWYgQ09ORklHX1BSRUVNUFQ9bi4gIFNvLCB0aGlzIHZlcnNpb24KK29mIGtwcm9iZSBvcHRpbWl6YXRpb24gc3VwcG9ydHMgb25seSBrZXJuZWxzIHdpdGggQ09ORklHX1BSRUVNUFQ9bi4oKiopCisKK0FmdGVyIHRoYXQsIHRoZSBLcHJvYmUtb3B0aW1pemVyIGNhbGxzIHN0b3BfbWFjaGluZSgpIHRvIHJlcGxhY2UKK3RoZSBvcHRpbWl6ZWQgcmVnaW9uIHdpdGggYSBqdW1wIGluc3RydWN0aW9uIHRvIHRoZSBkZXRvdXIgYnVmZmVyLAordXNpbmcgdGV4dF9wb2tlX3NtcCgpLgorCisxLjQuNiBVbm9wdGltaXphdGlvbgorCitXaGVuIGFuIG9wdGltaXplZCBrcHJvYmUgaXMgdW5yZWdpc3RlcmVkLCBkaXNhYmxlZCwgb3IgYmxvY2tlZCBieQorYW5vdGhlciBrcHJvYmUsIGl0IHdpbGwgYmUgdW5vcHRpbWl6ZWQuICBJZiB0aGlzIGhhcHBlbnMgYmVmb3JlCit0aGUgb3B0aW1pemF0aW9uIGlzIGNvbXBsZXRlLCB0aGUga3Byb2JlIGlzIGp1c3QgZGVxdWV1ZWQgZnJvbSB0aGUKK29wdGltaXplZCBsaXN0LiAgSWYgdGhlIG9wdGltaXphdGlvbiBoYXMgYmVlbiBkb25lLCB0aGUganVtcCBpcworcmVwbGFjZWQgd2l0aCB0aGUgb3JpZ2luYWwgY29kZSAoZXhjZXB0IGZvciBhbiBpbnQzIGJyZWFrcG9pbnQgaW4KK3RoZSBmaXJzdCBieXRlKSBieSB1c2luZyB0ZXh0X3Bva2Vfc21wKCkuCisKKygqKVBsZWFzZSBpbWFnaW5lIHRoYXQgdGhlIDJuZCBpbnN0cnVjdGlvbiBpcyBpbnRlcnJ1cHRlZCBhbmQgdGhlbgordGhlIG9wdGltaXplciByZXBsYWNlcyB0aGUgMm5kIGluc3RydWN0aW9uIHdpdGggdGhlIGp1bXAgKmFkZHJlc3MqCit3aGlsZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgaXMgcnVubmluZy4gV2hlbiB0aGUgaW50ZXJydXB0CityZXR1cm5zIHRvIG9yaWdpbmFsIGFkZHJlc3MsIHRoZXJlIGlzIG5vIHZhbGlkIGluc3RydWN0aW9uLAorYW5kIGl0IGNhdXNlcyBhbiB1bmV4cGVjdGVkIHJlc3VsdC4KKworKCoqKVRoaXMgb3B0aW1pemF0aW9uLXNhZmV0eSBjaGVja2luZyBtYXkgYmUgcmVwbGFjZWQgd2l0aCB0aGUKK3N0b3AtbWFjaGluZSBtZXRob2QgdGhhdCBrc3BsaWNlIHVzZXMgZm9yIHN1cHBvcnRpbmcgYSBDT05GSUdfUFJFRU1QVD15CitrZXJuZWwuCisKK05PVEUgZm9yIGdlZWtzOgorVGhlIGp1bXAgb3B0aW1pemF0aW9uIGNoYW5nZXMgdGhlIGtwcm9iZSdzIHByZV9oYW5kbGVyIGJlaGF2aW9yLgorV2l0aG91dCBvcHRpbWl6YXRpb24sIHRoZSBwcmVfaGFuZGxlciBjYW4gY2hhbmdlIHRoZSBrZXJuZWwncyBleGVjdXRpb24KK3BhdGggYnkgY2hhbmdpbmcgcmVncy0+aXAgYW5kIHJldHVybmluZyAxLiAgSG93ZXZlciwgd2hlbiB0aGUgcHJvYmUKK2lzIG9wdGltaXplZCwgdGhhdCBtb2RpZmljYXRpb24gaXMgaWdub3JlZC4gIFRodXMsIGlmIHlvdSB3YW50IHRvCit0d2VhayB0aGUga2VybmVsJ3MgZXhlY3V0aW9uIHBhdGgsIHlvdSBuZWVkIHRvIHN1cHByZXNzIG9wdGltaXphdGlvbiwKK3VzaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRlY2huaXF1ZXM6CistIFNwZWNpZnkgYW4gZW1wdHkgZnVuY3Rpb24gZm9yIHRoZSBrcHJvYmUncyBwb3N0X2hhbmRsZXIgb3IgYnJlYWtfaGFuZGxlci4KKyBvcgorLSBDb25maWcgQ09ORklHX09QVFBST0JFUz1uLgorIG9yCistIEV4ZWN1dGUgJ3N5c2N0bCAtdyBkZWJ1Zy5rcHJvYmVzX29wdGltaXphdGlvbj1uJworCiAyLiBBcmNoaXRlY3R1cmVzIFN1cHBvcnRlZAogCiBLcHJvYmVzLCBqcHJvYmVzLCBhbmQgcmV0dXJuIHByb2JlcyBhcmUgaW1wbGVtZW50ZWQgb24gdGhlIGZvbGxvd2luZwogYXJjaGl0ZWN0dXJlczoKIAotLSBpMzg2Ci0tIHg4Nl82NCAoQU1ELTY0LCBFTTY0VCkKKy0gaTM4NiAoU3VwcG9ydHMganVtcCBvcHRpbWl6YXRpb24pCistIHg4Nl82NCAoQU1ELTY0LCBFTTY0VCkgKFN1cHBvcnRzIGp1bXAgb3B0aW1pemF0aW9uKQogLSBwcGM2NAogLSBpYTY0IChEb2VzIG5vdCBzdXBwb3J0IHByb2JlcyBvbiBpbnN0cnVjdGlvbiBzbG90MS4pCiAtIHNwYXJjNjQgKFJldHVybiBwcm9iZXMgbm90IHlldCBpbXBsZW1lbnRlZC4pCkBAIC0xOTMsNiArMzA3LDEwIEBACiBzbyB5b3UgY2FuIHVzZSAib2JqZHVtcCAtZCAtbCB2bWxpbnV4IiB0byBzZWUgdGhlIHNvdXJjZS10by1vYmplY3QKIGNvZGUgbWFwcGluZy4KIAorSWYgeW91IHdhbnQgdG8gcmVkdWNlIHByb2Jpbmcgb3ZlcmhlYWQsIHNldCAiS3Byb2JlcyBqdW1wIG9wdGltaXphdGlvbgorc3VwcG9ydCIgKENPTkZJR19PUFRQUk9CRVMpIHRvICJ5Ii4gWW91IGNhbiBmaW5kIHRoaXMgb3B0aW9uIHVuZGVyIHRoZQorIktwcm9iZXMiIGxpbmUuCisKIDQuIEFQSSBSZWZlcmVuY2UKIAogVGhlIEtwcm9iZXMgQVBJIGluY2x1ZGVzIGEgInJlZ2lzdGVyIiBmdW5jdGlvbiBhbmQgYW4gInVucmVnaXN0ZXIiCkBAIC0zODksNyArNTA3LDEwIEBACiAKIEtwcm9iZXMgYWxsb3dzIG11bHRpcGxlIHByb2JlcyBhdCB0aGUgc2FtZSBhZGRyZXNzLiAgQ3VycmVudGx5LAogaG93ZXZlciwgdGhlcmUgY2Fubm90IGJlIG11bHRpcGxlIGpwcm9iZXMgb24gdGhlIHNhbWUgZnVuY3Rpb24gYXQKLXRoZSBzYW1lIHRpbWUuCit0aGUgc2FtZSB0aW1lLiAgQWxzbywgYSBwcm9iZXBvaW50IGZvciB3aGljaCB0aGVyZSBpcyBhIGpwcm9iZSBvcgorYSBwb3N0X2hhbmRsZXIgY2Fubm90IGJlIG9wdGltaXplZC4gIFNvIGlmIHlvdSBpbnN0YWxsIGEganByb2JlLAorb3IgYSBrcHJvYmUgd2l0aCBhIHBvc3RfaGFuZGxlciwgYXQgYW4gb3B0aW1pemVkIHByb2JlcG9pbnQsIHRoZQorcHJvYmVwb2ludCB3aWxsIGJlIHVub3B0aW1pemVkIGF1dG9tYXRpY2FsbHkuCiAKIEluIGdlbmVyYWwsIHlvdSBjYW4gaW5zdGFsbCBhIHByb2JlIGFueXdoZXJlIGluIHRoZSBrZXJuZWwuCiBJbiBwYXJ0aWN1bGFyLCB5b3UgY2FuIHByb2JlIGludGVycnVwdCBoYW5kbGVycy4gIEtub3duIGV4Y2VwdGlvbnMKQEAgLTQ1Myw2ICs1NzQsMzggQEAKIG9uIHRoZSB4ODZfNjQgdmVyc2lvbiBvZiBfX3N3aXRjaF90bygpOyB0aGUgcmVnaXN0cmF0aW9uIGZ1bmN0aW9ucwogcmV0dXJuIC1FSU5WQUwuCiAKK09uIHg4Ni94ODYtNjQsIHNpbmNlIHRoZSBKdW1wIE9wdGltaXphdGlvbiBvZiBLcHJvYmVzIG1vZGlmaWVzCitpbnN0cnVjdGlvbnMgd2lkZWx5LCB0aGVyZSBhcmUgc29tZSBsaW1pdGF0aW9ucyB0byBvcHRpbWl6YXRpb24uIFRvCitleHBsYWluIGl0LCB3ZSBpbnRyb2R1Y2Ugc29tZSB0ZXJtaW5vbG9neS4gSW1hZ2luZSBhIDMtaW5zdHJ1Y3Rpb24KK3NlcXVlbmNlIGNvbnNpc3Rpbmcgb2YgYSB0d28gMi1ieXRlIGluc3RydWN0aW9ucyBhbmQgb25lIDMtYnl0ZQoraW5zdHJ1Y3Rpb24uCisKKyAgICAgICAgSUEKKyAgICAgICAgIHwKK1stMl1bLTFdWzBdWzFdWzJdWzNdWzRdWzVdWzZdWzddCisgICAgICAgIFtpbnMxXVtpbnMyXVsgIGluczMgXQorCVs8LSAgICAgRENSICAgICAgIC0+XQorCSAgIFs8LSBKVFBSIC0+XQorCitpbnMxOiAxc3QgSW5zdHJ1Y3Rpb24KK2luczI6IDJuZCBJbnN0cnVjdGlvbgoraW5zMzogM3JkIEluc3RydWN0aW9uCitJQTogIEluc2VydGlvbiBBZGRyZXNzCitKVFBSOiBKdW1wIFRhcmdldCBQcm9oaWJpdGlvbiBSZWdpb24KK0RDUjogRGV0b3VyZWQgQ29kZSBSZWdpb24KKworVGhlIGluc3RydWN0aW9ucyBpbiBEQ1IgYXJlIGNvcGllZCB0byB0aGUgb3V0LW9mLWxpbmUgYnVmZmVyCitvZiB0aGUga3Byb2JlLCBiZWNhdXNlIHRoZSBieXRlcyBpbiBEQ1IgYXJlIHJlcGxhY2VkIGJ5CithIDUtYnl0ZSBqdW1wIGluc3RydWN0aW9uLiBTbyB0aGVyZSBhcmUgc2V2ZXJhbCBsaW1pdGF0aW9ucy4KKworYSkgVGhlIGluc3RydWN0aW9ucyBpbiBEQ1IgbXVzdCBiZSByZWxvY2F0YWJsZS4KK2IpIFRoZSBpbnN0cnVjdGlvbnMgaW4gRENSIG11c3Qgbm90IGluY2x1ZGUgYSBjYWxsIGluc3RydWN0aW9uLgorYykgSlRQUiBtdXN0IG5vdCBiZSB0YXJnZXRlZCBieSBhbnkganVtcCBvciBjYWxsIGluc3RydWN0aW9uLgorZCkgRENSIG11c3Qgbm90IHN0cmFkZGxlIHRoZSBib3JkZXIgYmV0d2VlZW4gZnVuY3Rpb25zLgorCitBbnl3YXksIHRoZXNlIGxpbWl0YXRpb25zIGFyZSBjaGVja2VkIGJ5IHRoZSBpbi1rZXJuZWwgaW5zdHJ1Y3Rpb24KK2RlY29kZXIsIHNvIHlvdSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IHRoYXQuCisKIDYuIFByb2JlIE92ZXJoZWFkCiAKIE9uIGEgdHlwaWNhbCBDUFUgaW4gdXNlIGluIDIwMDUsIGEga3Byb2JlIGhpdCB0YWtlcyAwLjUgdG8gMS4wCkBAIC00NzYsNiArNjI5LDE5IEBACiBwcGM2NDogUE9XRVI1IChnciksIDE2NTYgTUh6IChTTVQgZGlzYWJsZWQsIDEgdmlydHVhbCBDUFUgcGVyIHBoeXNpY2FsIENQVSkKIGsgPSAwLjc3IHVzZWM7IGogPSAxLjMxOyByID0gMS4yNjsga3IgPSAxLjQ1OyBqciA9IDEuOTkKIAorNi4xIE9wdGltaXplZCBQcm9iZSBPdmVyaGVhZAorCitUeXBpY2FsbHksIGFuIG9wdGltaXplZCBrcHJvYmUgaGl0IHRha2VzIDAuMDcgdG8gMC4xIG1pY3Jvc2Vjb25kcyB0bworcHJvY2Vzcy4gSGVyZSBhcmUgc2FtcGxlIG92ZXJoZWFkIGZpZ3VyZXMgKGluIHVzZWMpIGZvciB4ODYgYXJjaGl0ZWN0dXJlcy4KK2sgPSB1bm9wdGltaXplZCBrcHJvYmUsIGIgPSBib29zdGVkIChzaW5nbGUtc3RlcCBza2lwcGVkKSwgbyA9IG9wdGltaXplZCBrcHJvYmUsCityID0gdW5vcHRpbWl6ZWQga3JldHByb2JlLCByYiA9IGJvb3N0ZWQga3JldHByb2JlLCBybyA9IG9wdGltaXplZCBrcmV0cHJvYmUuCisKK2kzODY6IEludGVsKFIpIFhlb24oUikgRTU0MTAsIDIuMzNHSHosIDQ2NTYuOTAgYm9nb21pcHMKK2sgPSAwLjgwIHVzZWM7IGIgPSAwLjMzOyBvID0gMC4wNTsgciA9IDEuMTA7IHJiID0gMC42MTsgcm8gPSAwLjMzCisKK3g4Ni02NDogSW50ZWwoUikgWGVvbihSKSBFNTQxMCwgMi4zM0dIeiwgNDY1Ni45MCBib2dvbWlwcworayA9IDAuOTkgdXNlYzsgYiA9IDAuNDM7IG8gPSAwLjA2OyByID0gMS4yNDsgcmIgPSAwLjY4OyBybyA9IDAuMzAKKwogNy4gVE9ETwogCiBhLiBTeXN0ZW1UYXAgKGh0dHA6Ly9zb3VyY2V3YXJlLm9yZy9zeXN0ZW10YXApOiBQcm92aWRlcyBhIHNpbXBsaWZpZWQKQEAgLTUyMyw3ICs2ODksOCBAQAogYSB2aXJ0dWFsIGFkZHJlc3MgdGhhdCBpcyBubyBsb25nZXIgdmFsaWQgKG1vZHVsZSBpbml0IHNlY3Rpb25zLCBtb2R1bGUKIHZpcnR1YWwgYWRkcmVzc2VzIHRoYXQgY29ycmVzcG9uZCB0byBtb2R1bGVzIHRoYXQndmUgYmVlbiB1bmxvYWRlZCksCiBzdWNoIHByb2JlcyBhcmUgbWFya2VkIHdpdGggW0dPTkVdLiBJZiB0aGUgcHJvYmUgaXMgdGVtcG9yYXJpbHkgZGlzYWJsZWQsCi1zdWNoIHByb2JlcyBhcmUgbWFya2VkIHdpdGggW0RJU0FCTEVEXS4KK3N1Y2ggcHJvYmVzIGFyZSBtYXJrZWQgd2l0aCBbRElTQUJMRURdLiBJZiB0aGUgcHJvYmUgaXMgb3B0aW1pemVkLCBpdCBpcworbWFya2VkIHdpdGggW09QVElNSVpFRF0uCiAKIC9zeXMva2VybmVsL2RlYnVnL2twcm9iZXMvZW5hYmxlZDogVHVybiBrcHJvYmVzIE9OL09GRiBmb3JjaWJseS4KIApAQCAtNTMzLDMgKzcwMCwxOSBAQAogZmlsZS4gTm90ZSB0aGF0IHRoaXMga25vYiBqdXN0IGRpc2FybXMgYW5kIGFybXMgYWxsIGtwcm9iZXMgYW5kIGRvZXNuJ3QKIGNoYW5nZSBlYWNoIHByb2JlJ3MgZGlzYWJsaW5nIHN0YXRlLiBUaGlzIG1lYW5zIHRoYXQgZGlzYWJsZWQga3Byb2JlcyAobWFya2VkCiBbRElTQUJMRURdKSB3aWxsIGJlIG5vdCBlbmFibGVkIGlmIHlvdSB0dXJuIE9OIGFsbCBrcHJvYmVzIGJ5IHRoaXMga25vYi4KKworCitBcHBlbmRpeCBCOiBUaGUga3Byb2JlcyBzeXNjdGwgaW50ZXJmYWNlCisKKy9wcm9jL3N5cy9kZWJ1Zy9rcHJvYmVzLW9wdGltaXphdGlvbjogVHVybiBrcHJvYmVzIG9wdGltaXphdGlvbiBPTi9PRkYuCisKK1doZW4gQ09ORklHX09QVFBST0JFUz15LCB0aGlzIHN5c2N0bCBpbnRlcmZhY2UgYXBwZWFycyBhbmQgaXQgcHJvdmlkZXMKK2Ega25vYiB0byBnbG9iYWxseSBhbmQgZm9yY2libHkgdHVybiBqdW1wIG9wdGltaXphdGlvbiAoc2VlIHNlY3Rpb24KKzEuNCkgT04gb3IgT0ZGLiBCeSBkZWZhdWx0LCBqdW1wIG9wdGltaXphdGlvbiBpcyBhbGxvd2VkIChPTikuCitJZiB5b3UgZWNobyAiMCIgdG8gdGhpcyBmaWxlIG9yIHNldCAiZGVidWcua3Byb2Jlc19vcHRpbWl6YXRpb24iIHRvCiswIHZpYSBzeXNjdGwsIGFsbCBvcHRpbWl6ZWQgcHJvYmVzIHdpbGwgYmUgdW5vcHRpbWl6ZWQsIGFuZCBhbnkgbmV3Citwcm9iZXMgcmVnaXN0ZXJlZCBhZnRlciB0aGF0IHdpbGwgbm90IGJlIG9wdGltaXplZC4gIE5vdGUgdGhhdCB0aGlzCitrbm9iICpjaGFuZ2VzKiB0aGUgb3B0aW1pemVkIHN0YXRlLiBUaGlzIG1lYW5zIHRoYXQgb3B0aW1pemVkIHByb2JlcworKG1hcmtlZCBbT1BUSU1JWkVEXSkgd2lsbCBiZSB1bm9wdGltaXplZCAoW09QVElNSVpFRF0gdGFnIHdpbGwgYmUKK3JlbW92ZWQpLiBJZiB0aGUga25vYiBpcyB0dXJuZWQgb24sIHRoZXkgd2lsbCBiZSBvcHRpbWl6ZWQgYWdhaW4uCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va3ZtL2FwaS50eHQgYi9Eb2N1bWVudGF0aW9uL2t2bS9hcGkudHh0CmluZGV4IDI4MTFlNDUuLmM2NDE2YTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24va3ZtL2FwaS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rdm0vYXBpLnR4dApAQCAtMjMsMTIgKzIzLDEyIEBACiAgICBPbmx5IHJ1biB2Y3B1IGlvY3RscyBmcm9tIHRoZSBzYW1lIHRocmVhZCB0aGF0IHdhcyB1c2VkIHRvIGNyZWF0ZSB0aGUKICAgIHZjcHUuCiAKLTIuIEZpbGUgZGVzY3JpdHBvcnMKKzIuIEZpbGUgZGVzY3JpcHRvcnMKIAogVGhlIGt2bSBBUEkgaXMgY2VudGVyZWQgYXJvdW5kIGZpbGUgZGVzY3JpcHRvcnMuICBBbiBpbml0aWFsCiBvcGVuKCIvZGV2L2t2bSIpIG9idGFpbnMgYSBoYW5kbGUgdG8gdGhlIGt2bSBzdWJzeXN0ZW07IHRoaXMgaGFuZGxlCiBjYW4gYmUgdXNlZCB0byBpc3N1ZSBzeXN0ZW0gaW9jdGxzLiAgQSBLVk1fQ1JFQVRFX1ZNIGlvY3RsIG9uIHRoaXMKLWhhbmRsZSB3aWxsIGNyZWF0ZSBhIFZNIGZpbGUgZGVzY3JpcHJvciB3aGljaCBjYW4gYmUgdXNlZCB0byBpc3N1ZSBWTQoraGFuZGxlIHdpbGwgY3JlYXRlIGEgVk0gZmlsZSBkZXNjcmlwdG9yIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGlzc3VlIFZNCiBpb2N0bHMuICBBIEtWTV9DUkVBVEVfVkNQVSBpb2N0bCBvbiBhIFZNIGZkIHdpbGwgY3JlYXRlIGEgdmlydHVhbCBjcHUKIGFuZCByZXR1cm4gYSBmaWxlIGRlc2NyaXB0b3IgcG9pbnRpbmcgdG8gaXQuICBGaW5hbGx5LCBpb2N0bHMgb24gYSB2Y3B1CiBmZCBjYW4gYmUgdXNlZCB0byBjb250cm9sIHRoZSB2Y3B1LCBpbmNsdWRpbmcgdGhlIGltcG9ydGFudCB0YXNrIG9mCkBAIC02NDMsNyArNjQzLDcgQEAKIFBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fY2xvY2tfZGF0YSAoaW4pCiBSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yCiAKLVNldHMgdGhlIGN1cnJlbnQgdGltZXN0YW1wIG9mIGt2bWNsb2NrIHRvIHRoZSB2YWx1ZWQgc3BlY2lmaWMgaW4gaXRzIHBhcmFtZXRlci4KK1NldHMgdGhlIGN1cnJlbnQgdGltZXN0YW1wIG9mIGt2bWNsb2NrIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQgaW4gaXRzIHBhcmFtZXRlci4KIEluIGNvbmp1bmN0aW9uIHdpdGggS1ZNX0dFVF9DTE9DSywgaXQgaXMgdXNlZCB0byBlbnN1cmUgbW9ub3RvbmljaXR5IG9uIHNjZW5hcmlvcwogc3VjaCBhcyBtaWdyYXRpb24uCiAKQEAgLTc5NSwxMSArNzk1LDExIEBACiAJCQlfX3U2NCBkYXRhX29mZnNldDsgLyogcmVsYXRpdmUgdG8ga3ZtX3J1biBzdGFydCAqLwogCQl9IGlvOwogCi1JZiBleGl0X3JlYXNvbiBpcyBLVk1fRVhJVF9JT19JTiBvciBLVk1fRVhJVF9JT19PVVQsIHRoZW4gdGhlIHZjcHUgaGFzCitJZiBleGl0X3JlYXNvbiBpcyBLVk1fRVhJVF9JTywgdGhlbiB0aGUgdmNwdSBoYXMKIGV4ZWN1dGVkIGEgcG9ydCBJL08gaW5zdHJ1Y3Rpb24gd2hpY2ggY291bGQgbm90IGJlIHNhdGlzZmllZCBieSBrdm0uCiBkYXRhX29mZnNldCBkZXNjcmliZXMgd2hlcmUgdGhlIGRhdGEgaXMgbG9jYXRlZCAoS1ZNX0VYSVRfSU9fT1VUKSBvcgogd2hlcmUga3ZtIGV4cGVjdHMgYXBwbGljYXRpb24gY29kZSB0byBwbGFjZSB0aGUgZGF0YSBmb3IgdGhlIG5leHQKLUtWTV9SVU4gaW52b2NhdGlvbiAoS1ZNX0VYSVRfSU9fSU4pLiAgRGF0YSBmb3JtYXQgaXMgYSBwYXRja2VkIGFycmF5LgorS1ZNX1JVTiBpbnZvY2F0aW9uIChLVk1fRVhJVF9JT19JTikuICBEYXRhIGZvcm1hdCBpcyBhIHBhY2tlZCBhcnJheS4KIAogCQlzdHJ1Y3QgewogCQkJc3RydWN0IGt2bV9kZWJ1Z19leGl0X2FyY2ggYXJjaDsKQEAgLTgxNSw3ICs4MTUsNyBAQAogCQkJX191OCAgaXNfd3JpdGU7CiAJCX0gbW1pbzsKIAotSWYgZXhpdF9yZWFzb24gaXMgS1ZNX0VYSVRfTU1JTyBvciBLVk1fRVhJVF9JT19PVVQsIHRoZW4gdGhlIHZjcHUgaGFzCitJZiBleGl0X3JlYXNvbiBpcyBLVk1fRVhJVF9NTUlPLCB0aGVuIHRoZSB2Y3B1IGhhcwogZXhlY3V0ZWQgYSBtZW1vcnktbWFwcGVkIEkvTyBpbnN0cnVjdGlvbiB3aGljaCBjb3VsZCBub3QgYmUgc2F0aXNmaWVkCiBieSBrdm0uICBUaGUgJ2RhdGEnIG1lbWJlciBjb250YWlucyB0aGUgd3JpdHRlbiBkYXRhIGlmICdpc193cml0ZScgaXMKIHRydWUsIGFuZCBzaG91bGQgYmUgZmlsbGVkIGJ5IGFwcGxpY2F0aW9uIGNvZGUgb3RoZXJ3aXNlLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzLzAwLUlOREVYCmluZGV4IGVlNTY5MmIuLmZhNjg4NTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbGFwdG9wcy8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvMDAtSU5ERVgKQEAgLTIsNiArMiwxMiBAQAogCS0gVGhpcyBmaWxlCiBhY2VyLXdtaS50eHQKIAktIGluZm9ybWF0aW9uIG9uIHRoZSBBY2VyIExhcHRvcCBXTUkgRXh0cmFzIGRyaXZlci4KK2FzdXMtbGFwdG9wLnR4dAorCS0gaW5mb3JtYXRpb24gb24gdGhlIEFzdXMgTGFwdG9wIEV4dHJhcyBkcml2ZXIuCitkaXNrLXNob2NrLXByb3RlY3Rpb24udHh0CisJLSBpbmZvcm1hdGlvbiBvbiBoYXJkIGRpc2sgc2hvY2sgcHJvdGVjdGlvbi4KK2RzbG0uYworCS0gU2ltcGxlIERpc2sgU2xlZXAgTW9uaXRvciBwcm9ncmFtCiBsYXB0b3AtbW9kZS50eHQKIAktIGhvdyB0byBjb25zZXJ2ZSBiYXR0ZXJ5IHBvd2VyIHVzaW5nIGxhcHRvcC1tb2RlLgogc29ueS1sYXB0b3AudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvTWFrZWZpbGUgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNiMTQ0YQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbGFwdG9wcy9NYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKKyMga2J1aWxkIHRyaWNrIHRvIGF2b2lkIGxpbmtlciBlcnJvci4gQ2FuIGJlIG9taXR0ZWQgaWYgYSBtb2R1bGUgaXMgYnVpbHQuCitvYmotIDo9IGR1bW15Lm8KKworIyBMaXN0IG9mIHByb2dyYW1zIHRvIGJ1aWxkCitob3N0cHJvZ3MteSA6PSBkc2xtCisKKyMgVGVsbCBrYnVpbGQgdG8gYWx3YXlzIGJ1aWxkIHRoZSBwcm9ncmFtcworYWx3YXlzIDo9ICQoaG9zdHByb2dzLXkpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvZHNsbS5jIGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2RzbG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmZmMjkwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2RzbG0uYwpAQCAtMCwwICsxLDE2NiBAQAorLyoKKyAqIGRzbG0uYworICogU2ltcGxlIERpc2sgU2xlZXAgTW9uaXRvcgorICogIGJ5IEJhcnRlayBLYW5pYQorICogTGljZW5jZWQgdW5kZXIgdGhlIEdQTAorICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisKKyNpZmRlZiBERUJVRworI2RlZmluZSBEKHgpIHgKKyNlbHNlCisjZGVmaW5lIEQoeCkKKyNlbmRpZgorCitpbnQgZW5kaXQgPSAwOworCisvKiBDaGVjayBpZiB0aGUgZGlzayBpcyBpbiBwb3dlcnNhdmUtbW9kZQorICogTW9zdCBvZiB0aGUgY29kZSBpcyBzdG9sZW4gZnJvbSBoZHBhcm0uCisgKiAxID0gYWN0aXZlLCAwID0gc3RhbmRieS9zbGVlcCwgLTEgPSB1bmtub3duICovCitzdGF0aWMgaW50IGNoZWNrX3Bvd2VybW9kZShpbnQgZmQpCit7CisgICAgdW5zaWduZWQgY2hhciBhcmdzWzRdID0ge1dJTl9DSEVDS1BPV0VSTU9ERTEsMCwwLDB9OworICAgIGludCBzdGF0ZTsKKworICAgIGlmIChpb2N0bChmZCwgSERJT19EUklWRV9DTUQsICZhcmdzKQorCSYmIChhcmdzWzBdID0gV0lOX0NIRUNLUE9XRVJNT0RFMikgLyogdHJ5IGFnYWluIHdpdGggMHg5OCAqLworCSYmIGlvY3RsKGZkLCBIRElPX0RSSVZFX0NNRCwgJmFyZ3MpKSB7CisJaWYgKGVycm5vICE9IEVJTyB8fCBhcmdzWzBdICE9IDAgfHwgYXJnc1sxXSAhPSAwKSB7CisJICAgIHN0YXRlID0gLTE7IC8qICJ1bmtub3duIjsgKi8KKwl9IGVsc2UKKwkgICAgc3RhdGUgPSAwOyAvKiAic2xlZXBpbmciOyAqLworICAgIH0gZWxzZSB7CisJc3RhdGUgPSAoYXJnc1syXSA9PSAyNTUpID8gMSA6IDA7CisgICAgfQorICAgIEQocHJpbnRmKCIgZHJpdmUgc3RhdGUgaXM6ICAlZFxuIiwgc3RhdGUpKTsKKworICAgIHJldHVybiBzdGF0ZTsKK30KKworc3RhdGljIGNoYXIgKnN0YXRlX25hbWUoaW50IGkpCit7CisgICAgaWYgKGkgPT0gLTEpIHJldHVybiAidW5rbm93biI7CisgICAgaWYgKGkgPT0gMCkgcmV0dXJuICJzbGVlcGluZyI7CisgICAgaWYgKGkgPT0gMSkgcmV0dXJuICJhY3RpdmUiOworCisgICAgcmV0dXJuICJpbnRlcm5hbCBlcnJvciI7Cit9CisKK3N0YXRpYyBjaGFyICpteWN0aW1lKHRpbWVfdCB0aW1lKQoreworICAgIGNoYXIgKnRzID0gY3RpbWUoJnRpbWUpOworICAgIHRzW3N0cmxlbih0cykgLSAxXSA9IDA7CisKKyAgICByZXR1cm4gdHM7Cit9CisKK3N0YXRpYyB2b2lkIG1lYXN1cmUoaW50IGZkKQoreworICAgIHRpbWVfdCBzdGFydF90aW1lOworICAgIGludCBsYXN0X3N0YXRlOworICAgIHRpbWVfdCBsYXN0X3RpbWU7CisgICAgaW50IGN1cnJfc3RhdGU7CisgICAgdGltZV90IGN1cnJfdGltZSA9IDA7CisgICAgdGltZV90IHRpbWVfZGlmZjsKKyAgICB0aW1lX3QgYWN0aXZlX3RpbWUgPSAwOworICAgIHRpbWVfdCBzbGVlcF90aW1lID0gMDsKKyAgICB0aW1lX3QgdW5rbm93bl90aW1lID0gMDsKKyAgICB0aW1lX3QgdG90YWxfdGltZSA9IDA7CisgICAgaW50IGNoYW5nZXMgPSAwOworICAgIGZsb2F0IHRtcDsKKworICAgIHByaW50ZigiU3RhcnRpbmcgbWVhc3VyZW1lbnRzXG4iKTsKKworICAgIGxhc3Rfc3RhdGUgPSBjaGVja19wb3dlcm1vZGUoZmQpOworICAgIHN0YXJ0X3RpbWUgPSBsYXN0X3RpbWUgPSB0aW1lKDApOworICAgIHByaW50ZigiICBTeXN0ZW0gaXMgaW4gc3RhdGUgJXNcblxuIiwgc3RhdGVfbmFtZShsYXN0X3N0YXRlKSk7CisKKyAgICB3aGlsZSghZW5kaXQpIHsKKwlzbGVlcCgxKTsKKwljdXJyX3N0YXRlID0gY2hlY2tfcG93ZXJtb2RlKGZkKTsKKworCWlmIChjdXJyX3N0YXRlICE9IGxhc3Rfc3RhdGUgfHwgZW5kaXQpIHsKKwkgICAgY2hhbmdlcysrOworCSAgICBjdXJyX3RpbWUgPSB0aW1lKDApOworCSAgICB0aW1lX2RpZmYgPSBjdXJyX3RpbWUgLSBsYXN0X3RpbWU7CisKKwkgICAgaWYgKGxhc3Rfc3RhdGUgPT0gMSkgYWN0aXZlX3RpbWUgKz0gdGltZV9kaWZmOworCSAgICBlbHNlIGlmIChsYXN0X3N0YXRlID09IDApIHNsZWVwX3RpbWUgKz0gdGltZV9kaWZmOworCSAgICBlbHNlIHVua25vd25fdGltZSArPSB0aW1lX2RpZmY7CisKKwkgICAgbGFzdF9zdGF0ZSA9IGN1cnJfc3RhdGU7CisJICAgIGxhc3RfdGltZSA9IGN1cnJfdGltZTsKKworCSAgICBwcmludGYoIiVzOiBTdGF0ZS1jaGFuZ2UgdG8gJXNcbiIsIG15Y3RpbWUoY3Vycl90aW1lKSwKKwkJICAgc3RhdGVfbmFtZShjdXJyX3N0YXRlKSk7CisJfQorICAgIH0KKyAgICBjaGFuZ2VzLS07IC8qIENvbXBlbnNhdGUgZm9yIFNJR0lOVCAqLworCisgICAgdG90YWxfdGltZSA9IHRpbWUoMCkgLSBzdGFydF90aW1lOworICAgIHByaW50ZigiXG5Ub3RhbCBydW5uaW5nIHRpbWU6ICAlbHVzXG4iLCBjdXJyX3RpbWUgLSBzdGFydF90aW1lKTsKKyAgICBwcmludGYoIiBTdGF0ZSBjaGFuZ2VkICVkIHRpbWVzXG4iLCBjaGFuZ2VzKTsKKworICAgIHRtcCA9IChmbG9hdClzbGVlcF90aW1lIC8gKGZsb2F0KXRvdGFsX3RpbWUgKiAxMDA7CisgICAgcHJpbnRmKCIgVGltZSBpbiBzbGVlcCBzdGF0ZTogICAlbHVzICglLjJmJSUpXG4iLCBzbGVlcF90aW1lLCB0bXApOworICAgIHRtcCA9IChmbG9hdClhY3RpdmVfdGltZSAvIChmbG9hdCl0b3RhbF90aW1lICogMTAwOworICAgIHByaW50ZigiIFRpbWUgaW4gYWN0aXZlIHN0YXRlOiAgJWx1cyAoJS4yZiUlKVxuIiwgYWN0aXZlX3RpbWUsIHRtcCk7CisgICAgdG1wID0gKGZsb2F0KXVua25vd25fdGltZSAvIChmbG9hdCl0b3RhbF90aW1lICogMTAwOworICAgIHByaW50ZigiIFRpbWUgaW4gdW5rbm93biBzdGF0ZTogJWx1cyAoJS4yZiUlKVxuIiwgdW5rbm93bl90aW1lLCB0bXApOworfQorCitzdGF0aWMgdm9pZCBlbmRlcihpbnQgcykKK3sKKyAgICBlbmRpdCA9IDE7Cit9CisKK3N0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCit7CisgICAgcHV0cygidXNhZ2U6IGRzbG0gWy13IDx0aW1lPl0gPGRpc2s+Iik7CisgICAgZXhpdCgwKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludCBmZDsKKyAgICBjaGFyICpkaXNrID0gMDsKKyAgICBpbnQgc2V0dGxlX3RpbWUgPSA2MDsKKworICAgIC8qIFBhcnNlIHRoZSBzaW1wbGUgY29tbWFuZC1saW5lICovCisgICAgaWYgKGFyZ2MgPT0gMikKKwlkaXNrID0gYXJndlsxXTsKKyAgICBlbHNlIGlmIChhcmdjID09IDQpIHsKKwlzZXR0bGVfdGltZSA9IGF0b2koYXJndlsyXSk7CisJZGlzayA9IGFyZ3ZbM107CisgICAgfSBlbHNlCisJdXNhZ2UoKTsKKworICAgIGlmICghKGZkID0gb3BlbihkaXNrLCBPX1JET05MWXxPX05PTkJMT0NLKSkpIHsKKwlwcmludGYoIkNhbid0IG9wZW4gJXMsIGJlY2F1c2U6ICVzXG4iLCBkaXNrLCBzdHJlcnJvcihlcnJubykpOworCWV4aXQoLTEpOworICAgIH0KKworICAgIGlmIChzZXR0bGVfdGltZSkgeworCXByaW50ZigiV2FpdGluZyAlZCBzZWNvbmRzIGZvciB0aGUgc3lzdGVtIHRvIHNldHRsZSBkb3duIHRvICIKKwkgICAgICAgIidub3JtYWwnXG4iLCBzZXR0bGVfdGltZSk7CisJc2xlZXAoc2V0dGxlX3RpbWUpOworICAgIH0gZWxzZQorCXB1dHMoIk5vdCB3YWl0aW5nIGZvciBzeXN0ZW0gdG8gc2V0dGxlIGRvd24iKTsKKworICAgIHNpZ25hbChTSUdJTlQsIGVuZGVyKTsKKworICAgIG1lYXN1cmUoZmQpOworCisgICAgY2xvc2UoZmQpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvbGFwdG9wLW1vZGUudHh0IGIvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL2xhcHRvcC1tb2RlLnR4dAppbmRleCBlZWVkZWUxLi4yYzNjMzUwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvbGFwdG9wLW1vZGUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbGFwdG9wcy9sYXB0b3AtbW9kZS50eHQKQEAgLTc3OSwxNzIgKzc3OSw0IEBACiAtLS0tLS0tLS0tLS0tLS0KIAogQmFydGVrIEthbmlhIHN1Ym1pdHRlZCB0aGlzLCBpdCBjYW4gYmUgdXNlZCB0byBtZWFzdXJlIGhvdyBtdWNoIHRpbWUgeW91ciBkaXNrCi1zcGVuZHMgc3B1biB1cC9kb3duLgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1kc2xtLmMgQkVHSU4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLyoKLSAqIFNpbXBsZSBEaXNrIFNsZWVwIE1vbml0b3IKLSAqICBieSBCYXJ0ZWsgS2FuaWEKLSAqIExpY2VuY2VkIHVuZGVyIHRoZSBHUEwKLSAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgotCi0jaWZkZWYgREVCVUcKLSNkZWZpbmUgRCh4KSB4Ci0jZWxzZQotI2RlZmluZSBEKHgpCi0jZW5kaWYKLQotaW50IGVuZGl0ID0gMDsKLQotLyogQ2hlY2sgaWYgdGhlIGRpc2sgaXMgaW4gcG93ZXJzYXZlLW1vZGUKLSAqIE1vc3Qgb2YgdGhlIGNvZGUgaXMgc3RvbGVuIGZyb20gaGRwYXJtLgotICogMSA9IGFjdGl2ZSwgMCA9IHN0YW5kYnkvc2xlZXAsIC0xID0gdW5rbm93biAqLwotaW50IGNoZWNrX3Bvd2VybW9kZShpbnQgZmQpCi17Ci0gICAgdW5zaWduZWQgY2hhciBhcmdzWzRdID0ge1dJTl9DSEVDS1BPV0VSTU9ERTEsMCwwLDB9OwotICAgIGludCBzdGF0ZTsKLQotICAgIGlmIChpb2N0bChmZCwgSERJT19EUklWRV9DTUQsICZhcmdzKQotCSYmIChhcmdzWzBdID0gV0lOX0NIRUNLUE9XRVJNT0RFMikgLyogdHJ5IGFnYWluIHdpdGggMHg5OCAqLwotCSYmIGlvY3RsKGZkLCBIRElPX0RSSVZFX0NNRCwgJmFyZ3MpKSB7Ci0JaWYgKGVycm5vICE9IEVJTyB8fCBhcmdzWzBdICE9IDAgfHwgYXJnc1sxXSAhPSAwKSB7Ci0JICAgIHN0YXRlID0gLTE7IC8qICJ1bmtub3duIjsgKi8KLQl9IGVsc2UKLQkgICAgc3RhdGUgPSAwOyAvKiAic2xlZXBpbmciOyAqLwotICAgIH0gZWxzZSB7Ci0Jc3RhdGUgPSAoYXJnc1syXSA9PSAyNTUpID8gMSA6IDA7Ci0gICAgfQotICAgIEQocHJpbnRmKCIgZHJpdmUgc3RhdGUgaXM6ICAlZFxuIiwgc3RhdGUpKTsKLQotICAgIHJldHVybiBzdGF0ZTsKLX0KLQotY2hhciAqc3RhdGVfbmFtZShpbnQgaSkKLXsKLSAgICBpZiAoaSA9PSAtMSkgcmV0dXJuICJ1bmtub3duIjsKLSAgICBpZiAoaSA9PSAwKSByZXR1cm4gInNsZWVwaW5nIjsKLSAgICBpZiAoaSA9PSAxKSByZXR1cm4gImFjdGl2ZSI7Ci0KLSAgICByZXR1cm4gImludGVybmFsIGVycm9yIjsKLX0KLQotY2hhciAqbXljdGltZSh0aW1lX3QgdGltZSkKLXsKLSAgICBjaGFyICp0cyA9IGN0aW1lKCZ0aW1lKTsKLSAgICB0c1tzdHJsZW4odHMpIC0gMV0gPSAwOwotCi0gICAgcmV0dXJuIHRzOwotfQotCi12b2lkIG1lYXN1cmUoaW50IGZkKQotewotICAgIHRpbWVfdCBzdGFydF90aW1lOwotICAgIGludCBsYXN0X3N0YXRlOwotICAgIHRpbWVfdCBsYXN0X3RpbWU7Ci0gICAgaW50IGN1cnJfc3RhdGU7Ci0gICAgdGltZV90IGN1cnJfdGltZSA9IDA7Ci0gICAgdGltZV90IHRpbWVfZGlmZjsKLSAgICB0aW1lX3QgYWN0aXZlX3RpbWUgPSAwOwotICAgIHRpbWVfdCBzbGVlcF90aW1lID0gMDsKLSAgICB0aW1lX3QgdW5rbm93bl90aW1lID0gMDsKLSAgICB0aW1lX3QgdG90YWxfdGltZSA9IDA7Ci0gICAgaW50IGNoYW5nZXMgPSAwOwotICAgIGZsb2F0IHRtcDsKLQotICAgIHByaW50ZigiU3RhcnRpbmcgbWVhc3VyZW1lbnRzXG4iKTsKLQotICAgIGxhc3Rfc3RhdGUgPSBjaGVja19wb3dlcm1vZGUoZmQpOwotICAgIHN0YXJ0X3RpbWUgPSBsYXN0X3RpbWUgPSB0aW1lKDApOwotICAgIHByaW50ZigiICBTeXN0ZW0gaXMgaW4gc3RhdGUgJXNcblxuIiwgc3RhdGVfbmFtZShsYXN0X3N0YXRlKSk7Ci0KLSAgICB3aGlsZSghZW5kaXQpIHsKLQlzbGVlcCgxKTsKLQljdXJyX3N0YXRlID0gY2hlY2tfcG93ZXJtb2RlKGZkKTsKLQotCWlmIChjdXJyX3N0YXRlICE9IGxhc3Rfc3RhdGUgfHwgZW5kaXQpIHsKLQkgICAgY2hhbmdlcysrOwotCSAgICBjdXJyX3RpbWUgPSB0aW1lKDApOwotCSAgICB0aW1lX2RpZmYgPSBjdXJyX3RpbWUgLSBsYXN0X3RpbWU7Ci0KLQkgICAgaWYgKGxhc3Rfc3RhdGUgPT0gMSkgYWN0aXZlX3RpbWUgKz0gdGltZV9kaWZmOwotCSAgICBlbHNlIGlmIChsYXN0X3N0YXRlID09IDApIHNsZWVwX3RpbWUgKz0gdGltZV9kaWZmOwotCSAgICBlbHNlIHVua25vd25fdGltZSArPSB0aW1lX2RpZmY7Ci0KLQkgICAgbGFzdF9zdGF0ZSA9IGN1cnJfc3RhdGU7Ci0JICAgIGxhc3RfdGltZSA9IGN1cnJfdGltZTsKLQotCSAgICBwcmludGYoIiVzOiBTdGF0ZS1jaGFuZ2UgdG8gJXNcbiIsIG15Y3RpbWUoY3Vycl90aW1lKSwKLQkJICAgc3RhdGVfbmFtZShjdXJyX3N0YXRlKSk7Ci0JfQotICAgIH0KLSAgICBjaGFuZ2VzLS07IC8qIENvbXBlbnNhdGUgZm9yIFNJR0lOVCAqLwotCi0gICAgdG90YWxfdGltZSA9IHRpbWUoMCkgLSBzdGFydF90aW1lOwotICAgIHByaW50ZigiXG5Ub3RhbCBydW5uaW5nIHRpbWU6ICAlbHVzXG4iLCBjdXJyX3RpbWUgLSBzdGFydF90aW1lKTsKLSAgICBwcmludGYoIiBTdGF0ZSBjaGFuZ2VkICVkIHRpbWVzXG4iLCBjaGFuZ2VzKTsKLQotICAgIHRtcCA9IChmbG9hdClzbGVlcF90aW1lIC8gKGZsb2F0KXRvdGFsX3RpbWUgKiAxMDA7Ci0gICAgcHJpbnRmKCIgVGltZSBpbiBzbGVlcCBzdGF0ZTogICAlbHVzICglLjJmJSUpXG4iLCBzbGVlcF90aW1lLCB0bXApOwotICAgIHRtcCA9IChmbG9hdClhY3RpdmVfdGltZSAvIChmbG9hdCl0b3RhbF90aW1lICogMTAwOwotICAgIHByaW50ZigiIFRpbWUgaW4gYWN0aXZlIHN0YXRlOiAgJWx1cyAoJS4yZiUlKVxuIiwgYWN0aXZlX3RpbWUsIHRtcCk7Ci0gICAgdG1wID0gKGZsb2F0KXVua25vd25fdGltZSAvIChmbG9hdCl0b3RhbF90aW1lICogMTAwOwotICAgIHByaW50ZigiIFRpbWUgaW4gdW5rbm93biBzdGF0ZTogJWx1cyAoJS4yZiUlKVxuIiwgdW5rbm93bl90aW1lLCB0bXApOwotfQotCi12b2lkIGVuZGVyKGludCBzKQotewotICAgIGVuZGl0ID0gMTsKLX0KLQotdm9pZCB1c2FnZSgpCi17Ci0gICAgcHV0cygidXNhZ2U6IGRzbG0gWy13IDx0aW1lPl0gPGRpc2s+Iik7Ci0gICAgZXhpdCgwKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIGludCBmZDsKLSAgICBjaGFyICpkaXNrID0gMDsKLSAgICBpbnQgc2V0dGxlX3RpbWUgPSA2MDsKLQotICAgIC8qIFBhcnNlIHRoZSBzaW1wbGUgY29tbWFuZC1saW5lICovCi0gICAgaWYgKGFyZ2MgPT0gMikKLQlkaXNrID0gYXJndlsxXTsKLSAgICBlbHNlIGlmIChhcmdjID09IDQpIHsKLQlzZXR0bGVfdGltZSA9IGF0b2koYXJndlsyXSk7Ci0JZGlzayA9IGFyZ3ZbM107Ci0gICAgfSBlbHNlCi0JdXNhZ2UoKTsKLQotICAgIGlmICghKGZkID0gb3BlbihkaXNrLCBPX1JET05MWXxPX05PTkJMT0NLKSkpIHsKLQlwcmludGYoIkNhbid0IG9wZW4gJXMsIGJlY2F1c2U6ICVzXG4iLCBkaXNrLCBzdHJlcnJvcihlcnJubykpOwotCWV4aXQoLTEpOwotICAgIH0KLQotICAgIGlmIChzZXR0bGVfdGltZSkgewotCXByaW50ZigiV2FpdGluZyAlZCBzZWNvbmRzIGZvciB0aGUgc3lzdGVtIHRvIHNldHRsZSBkb3duIHRvICIKLQkgICAgICAgIidub3JtYWwnXG4iLCBzZXR0bGVfdGltZSk7Ci0Jc2xlZXAoc2V0dGxlX3RpbWUpOwotICAgIH0gZWxzZQotCXB1dHMoIk5vdCB3YWl0aW5nIGZvciBzeXN0ZW0gdG8gc2V0dGxlIGRvd24iKTsKLQotICAgIHNpZ25hbChTSUdJTlQsIGVuZGVyKTsKLQotICAgIG1lYXN1cmUoZmQpOwotCi0gICAgY2xvc2UoZmQpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1kc2xtLmMgRU5ELS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3BlbmRzIHNwdW4gdXAvZG93bi4gIFNlZSBEb2N1bWVudGF0aW9uL2xhcHRvcHMvZHNsbS5jCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQgYi9Eb2N1bWVudGF0aW9uL2xhcHRvcHMvdGhpbmtwYWQtYWNwaS50eHQKaW5kZXggNzVhZmExMi4uMzljMGEwOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sYXB0b3BzL3RoaW5rcGFkLWFjcGkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbGFwdG9wcy90aGlua3BhZC1hY3BpLnR4dApAQCAtNjUwLDYgKzY1MCwxMCBAQAogCWVjaG8gZXhwYW5kX3RvZ2dsZSA+IC9wcm9jL2FjcGkvaWJtL3ZpZGVvCiAJZWNobyB2aWRlb19zd2l0Y2ggPiAvcHJvYy9hY3BpL2libS92aWRlbwogCitOT1RFOiBBY2Nlc3MgdG8gdGhpcyBmZWF0dXJlIGlzIHJlc3RyaWN0ZWQgdG8gcHJvY2Vzc2VzIG93bmluZyB0aGUKK0NBUF9TWVNfQURNSU4gY2FwYWJpbGl0eSBmb3Igc2FmZXR5IHJlYXNvbnMsIGFzIGl0IGNhbiBpbnRlcmFjdCBiYWRseQorZW5vdWdoIHdpdGggc29tZSB2ZXJzaW9ucyBvZiBYLm9yZyB0byBjcmFzaCBpdC4KKwogRWFjaCB2aWRlbyBvdXRwdXQgZGV2aWNlIGNhbiBiZSBlbmFibGVkIG9yIGRpc2FibGVkIGluZGl2aWR1YWxseS4KIFJlYWRpbmcgL3Byb2MvYWNwaS9pYm0vdmlkZW8gc2hvd3MgdGhlIHN0YXR1cyBvZiBlYWNoIGRldmljZS4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nLzAwLUlOREVYCmluZGV4IDUwMTg5YmYuLmZlNWMwOTkgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy8wMC1JTkRFWAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvMDAtSU5ERVgKQEAgLTMyLDYgKzMyLDggQEAKIAktIHRoZSBDcnlzdGFsIExBTiAoQ1M4OTAwLzIwLWJhc2VkKSBFdGhlcm5ldCBJU0EgYWRhcHRlciBkcml2ZXIKIGN4YWNydS50eHQKIAktIENvbmV4YW50IEFjY2Vzc1J1bm5lciBVU0IgQURTTCBNb2RlbQorY3hhY3J1LWNmLnB5CisJLSBDb25leGFudCBBY2Nlc3NSdW5uZXIgVVNCIEFEU0wgTW9kZW0gY29uZmlndXJhdGlvbiBmaWxlIHBhcnNlcgogZGU0eDUudHh0CiAJLSB0aGUgRGlnaXRhbCBFdGhlcldPUktTIERFND8/IGFuZCBERTU/PyBQQ0kgRXRoZXJuZXQgZHJpdmVyCiBkZWNuZXQudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY3hhY3J1LWNmLnB5IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2N4YWNydS1jZi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDFkMjk4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2N4YWNydS1jZi5weQpAQCAtMCwwICsxLDQ4IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IDIwMDkgU2ltb24gQXJsb3R0CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisjIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisjIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorIyBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisjIFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorIworIyBVc2FnZTogY3hhY3J1LWNmLnB5IDwgY3hhY3J1LWNmLmJpbgorIyBPdXRwdXQ6IHZhbHVlcyBzdHJpbmcgc3VpdGFibGUgZm9yIHRoZSBzeXNmcyBhZHNsX2NvbmZpZyBhdHRyaWJ1dGUKKyMKKyMgV2FybmluZzogY3hhY3J1LWNmLmJpbiB3aXRoIE1ENSBoYXNoIGNkYmFjMjY4OTk2OWQ1ZWQ1ZDQ4NTBmMTE3NzAyMTEwCisjIGNvbnRhaW5zIG1pcy1hbGlnbmVkIHZhbHVlcyB3aGljaCB3aWxsIHN0b3AgdGhlIG1vZGVtIGZyb20gYmVpbmcgYWJsZQorIyB0byBtYWtlIGEgY29ubmVjdGlvbi4gSWYgdGhlIGZpcnN0IGFuZCBsYXN0IHR3byBieXRlcyBhcmUgcmVtb3ZlZCB0aGVuCisjIHRoZSB2YWx1ZXMgYmVjb21lIHZhbGlkLCBidXQgdGhlIG1vZHVsYXRpb24gd2lsbCBiZSBmb3JjZWQgdG8gQU5TSQorIyBUMS40MTMgb25seSB3aGljaCBtYXkgbm90IGJlIGFwcHJvcHJpYXRlLgorIworIyBUaGUgb3JpZ2luYWwgYmluYXJ5IGZvcm1hdCBpcyBhIHBhY2tlZCBsaXN0IG9mIGxlMzIgdmFsdWVzLgorCitpbXBvcnQgc3lzCitpbXBvcnQgc3RydWN0CisKK2kgPSAwCit3aGlsZSBUcnVlOgorCWJ1ZiA9IHN5cy5zdGRpbi5yZWFkKDQpCisKKwlpZiBsZW4oYnVmKSA9PSAwOgorCQlicmVhaworCWVsaWYgbGVuKGJ1ZikgIT0gNDoKKwkJc3lzLnN0ZG91dC53cml0ZSgiXG4iKQorCQlzeXMuc3RkZXJyLndyaXRlKCJFcnJvcjogcmVhZCB7MH0gbm90IDQgYnl0ZXNcbiIuZm9ybWF0KGxlbihidWYpKSkKKwkJc3lzLmV4aXQoMSkKKworCWlmIGkgPiAwOgorCQlzeXMuc3Rkb3V0LndyaXRlKCIgIikKKwlzeXMuc3Rkb3V0LndyaXRlKCJ7MDp4fT17MX0iLmZvcm1hdChpLCBzdHJ1Y3QudW5wYWNrKCI8SSIsIGJ1ZilbMF0pKQorCWkgKz0gMQorCitzeXMuc3Rkb3V0LndyaXRlKCJcbiIpCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvY3hhY3J1LnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jeGFjcnUudHh0CmluZGV4IGIwNzQ2ODEuLjJjY2UwNDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jeGFjcnUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9jeGFjcnUudHh0CkBAIC00LDYgKzQsMTIgQEAKIG1vZHVsZSBsb2FkZWQsIHRoZSBkZXZpY2Ugd2lsbCBzb21ldGltZXMgc3RvcCByZXNwb25kaW5nIGFmdGVyIHVubG9hZGluZyB0aGUKIGRyaXZlciBhbmQgaXQgaXMgbmVjZXNzYXJ5IHRvIHVucGx1Zy9yZW1vdmUgcG93ZXIgdG8gdGhlIGRldmljZSB0byBmaXggdGhpcy4KIAorTm90ZTogc3VwcG9ydCBmb3IgY3hhY3J1LWNmLmJpbiBoYXMgYmVlbiByZW1vdmVkLiBJdCB3YXMgbm90IGxvYWRlZCBjb3JyZWN0bHkKK3NvIGl0IGhhZCBubyBlZmZlY3Qgb24gdGhlIGRldmljZSBjb25maWd1cmF0aW9uLiBGaXhpbmcgaXQgY291bGQgaGF2ZSBzdG9wcGVkCitleGlzdGluZyBkZXZpY2VzIHdvcmtpbmcgd2hlbiBhbiBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gaXMgc3VwcGxpZWQuCisKK1RoZXJlIGlzIGEgc2NyaXB0IGN4YWNydS1jZi5weSB0byBjb252ZXJ0IGFuIGV4aXN0aW5nIGZpbGUgdG8gdGhlIHN5c2ZzIGZvcm0uCisKIERldGVjdGVkIGRldmljZXMgd2lsbCBhcHBlYXIgYXMgQVRNIGRldmljZXMgbmFtZWQgImN4YWNydSIuIEluIC9zeXMvY2xhc3MvYXRtLwogdGhlc2UgYXJlIGRpcmVjdG9yaWVzIG5hbWVkIGN4YWNydU4gd2hlcmUgTiBpcyB0aGUgZGV2aWNlIG51bWJlci4gQSBzeW1saW5rCiBuYW1lZCBkZXZpY2UgcG9pbnRzIHRvIHRoZSBVU0IgaW50ZXJmYWNlIGRldmljZSdzIGRpcmVjdG9yeSB3aGljaCBjb250YWlucwpAQCAtMTUsNiArMjEsMTUgQEAKICogYWRzbF9oZWFkZW5kX2Vudmlyb25tZW50CiAJSW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlbW90ZSBoZWFkZW5kLgogCisqIGFkc2xfY29uZmlnCisJQ29uZmlndXJhdGlvbiB3cml0aW5nIGludGVyZmFjZS4KKwlXcml0ZSBwYXJhbWV0ZXJzIGluIGhleGFkZWNpbWFsIGZvcm1hdCA8aW5kZXg+PTx2YWx1ZT4sCisJc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UsIGUuZy46CisJCSIxPTAgYT01IgorCVVwIHRvIDcgcGFyYW1ldGVycyBhdCBhIHRpbWUgd2lsbCBiZSBzZW50IGFuZCB0aGUgbW9kZW0gd2lsbCByZXN0YXJ0CisJdGhlIEFEU0wgY29ubmVjdGlvbiB3aGVuIGFueSB2YWx1ZSBpcyBzZXQuIFRoZXNlIGFyZSBsb2dnZWQgZm9yIGZ1dHVyZQorCXJlZmVyZW5jZS4KKwogKiBkb3duc3RyZWFtX2F0dGVudWF0aW9uIChkQikKICogZG93bnN0cmVhbV9iaXRzX3Blcl9mcmFtZQogKiBkb3duc3RyZWFtX3JhdGUgKGticHMpCkBAIC02MSw2ICs3Niw3IEBACiAqIG1hY19hZGRyZXNzCiAKICogbW9kdWxhdGlvbgorCSIiICh3aGVuIG5vdCBjb25uZWN0ZWQpCiAJIkFOU0kgVDEuNDEzIgogCSJJVFUtVCBHLjk5Mi4xIChHLkRNVCkiCiAJIklUVS1UIEcuOTkyLjIgKEcuTElURSkiCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGNjcC50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGNjcC50eHQKaW5kZXggYjEzMmU0YTMuLmE2MmZkZjcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kY2NwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGNjcC50eHQKQEAgLTU4LDggKzU4LDEwIEBACiBzaXplIChhcHBsaWNhdGlvbiBwYXlsb2FkIHNpemUpIGluIGJ5dGVzLCBzZWUgUkZDIDQzNDAsIHNlY3Rpb24gMTQuCiAKIERDQ1BfU09DS09QVF9BVkFJTEFCTEVfQ0NJRFMgaXMgYWxzbyByZWFkLW9ubHkgYW5kIHJldHVybnMgdGhlIGxpc3Qgb2YgQ0NJRHMKLXN1cHBvcnRlZCBieSB0aGUgZW5kcG9pbnQgKHNlZSBpbmNsdWRlL2xpbnV4L2RjY3AuaCBmb3Igc3ltYm9saWMgY29uc3RhbnRzKS4KLVRoZSBjYWxsZXIgbmVlZHMgdG8gcHJvdmlkZSBhIHN1ZmZpY2llbnRseSBsYXJnZSAoPiAyKSBhcnJheSBvZiB0eXBlIHVpbnQ4X3QuCitzdXBwb3J0ZWQgYnkgdGhlIGVuZHBvaW50LiBUaGUgb3B0aW9uIHZhbHVlIGlzIGFuIGFycmF5IG9mIHR5cGUgdWludDhfdCB3aG9zZQorc2l6ZSBpcyBwYXNzZWQgYXMgb3B0aW9uIGxlbmd0aC4gVGhlIG1pbmltdW0gYXJyYXkgc2l6ZSBpcyA0IGVsZW1lbnRzLCB0aGUKK3ZhbHVlIHJldHVybmVkIGluIHRoZSBvcHRsZW4gYXJndW1lbnQgYWx3YXlzIHJlZmxlY3RzIHRoZSB0cnVlIG51bWJlciBvZgorYnVpbHQtaW4gQ0NJRHMuCiAKIERDQ1BfU09DS09QVF9DQ0lEIGlzIHdyaXRlLW9ubHkgYW5kIHNldHMgYm90aCB0aGUgVFggYW5kIFJYIENDSURzIGF0IHRoZSBzYW1lCiB0aW1lLCBjb21iaW5pbmcgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV4dCB0d28gc29ja2V0IG9wdGlvbnMuIFRoaXMgb3B0aW9uIGlzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9pcC1zeXNjdGwudHh0CmluZGV4IGU4N2YzY2RjLi44YjcyYzg4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dApAQCAtNDg3LDYgKzQ4NywzMCBAQAogCWFuZCBDT05GSUdfTkVUX0RNQSBpcyBlbmFibGVkLgogCURlZmF1bHQ6IDQwOTYKIAordGNwX3RoaW5fbGluZWFyX3RpbWVvdXRzIC0gQk9PTEVBTgorCUVuYWJsZSBkeW5hbWljIHRyaWdnZXJpbmcgb2YgbGluZWFyIHRpbWVvdXRzIGZvciB0aGluIHN0cmVhbXMuCisJSWYgc2V0LCBhIGNoZWNrIGlzIHBlcmZvcm1lZCB1cG9uIHJldHJhbnNtaXNzaW9uIGJ5IHRpbWVvdXQgdG8KKwlkZXRlcm1pbmUgaWYgdGhlIHN0cmVhbSBpcyB0aGluIChsZXNzIHRoYW4gNCBwYWNrZXRzIGluIGZsaWdodCkuCisJQXMgbG9uZyBhcyB0aGUgc3RyZWFtIGlzIGZvdW5kIHRvIGJlIHRoaW4sIHVwIHRvIDYgbGluZWFyCisJdGltZW91dHMgbWF5IGJlIHBlcmZvcm1lZCBiZWZvcmUgZXhwb25lbnRpYWwgYmFja29mZiBtb2RlIGlzCisJaW5pdGlhdGVkLiBUaGlzIGltcHJvdmVzIHJldHJhbnNtaXNzaW9uIGxhdGVuY3kgZm9yCisJbm9uLWFnZ3Jlc3NpdmUgdGhpbiBzdHJlYW1zLCBvZnRlbiBmb3VuZCB0byBiZSB0aW1lLWRlcGVuZGVudC4KKwlGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGluIHN0cmVhbXMsIHNlZQorCURvY3VtZW50YXRpb24vbmV0d29ya2luZy90Y3AtdGhpbi50eHQKKwlEZWZhdWx0OiAwCisKK3RjcF90aGluX2R1cGFjayAtIEJPT0xFQU4KKwlFbmFibGUgZHluYW1pYyB0cmlnZ2VyaW5nIG9mIHJldHJhbnNtaXNzaW9ucyBhZnRlciBvbmUgZHVwQUNLCisJZm9yIHRoaW4gc3RyZWFtcy4gSWYgc2V0LCBhIGNoZWNrIGlzIHBlcmZvcm1lZCB1cG9uIHJlY2VwdGlvbgorCW9mIGEgZHVwQUNLIHRvIGRldGVybWluZSBpZiB0aGUgc3RyZWFtIGlzIHRoaW4gKGxlc3MgdGhhbiA0CisJcGFja2V0cyBpbiBmbGlnaHQpLiBBcyBsb25nIGFzIHRoZSBzdHJlYW0gaXMgZm91bmQgdG8gYmUgdGhpbiwKKwlkYXRhIGlzIHJldHJhbnNtaXR0ZWQgb24gdGhlIGZpcnN0IHJlY2VpdmVkIGR1cEFDSy4gVGhpcworCWltcHJvdmVzIHJldHJhbnNtaXNzaW9uIGxhdGVuY3kgZm9yIG5vbi1hZ2dyZXNzaXZlIHRoaW4KKwlzdHJlYW1zLCBvZnRlbiBmb3VuZCB0byBiZSB0aW1lLWRlcGVuZGVudC4KKwlGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGluIHN0cmVhbXMsIHNlZQorCURvY3VtZW50YXRpb24vbmV0d29ya2luZy90Y3AtdGhpbi50eHQKKwlEZWZhdWx0OiAwCisKIFVEUCB2YXJpYWJsZXM6CiAKIHVkcF9tZW0gLSB2ZWN0b3Igb2YgMyBJTlRFR0VSczogbWluLCBwcmVzc3VyZSwgbWF4CkBAIC02OTIsNiArNzE2LDI1IEBACiAJY29uZi97YWxsLGludGVyZmFjZX0vcHJveHlfYXJwIGlzIHNldCB0byBUUlVFLAogCWl0IHdpbGwgYmUgZGlzYWJsZWQgb3RoZXJ3aXNlCiAKK3Byb3h5X2FycF9wdmxhbiAtIEJPT0xFQU4KKwlQcml2YXRlIFZMQU4gcHJveHkgYXJwLgorCUJhc2ljYWxseSBhbGxvdyBwcm94eSBhcnAgcmVwbGllcyBiYWNrIHRvIHRoZSBzYW1lIGludGVyZmFjZQorCShmcm9tIHdoaWNoIHRoZSBBUlAgcmVxdWVzdC9zb2xpY2l0YXRpb24gd2FzIHJlY2VpdmVkKS4KKworCVRoaXMgaXMgZG9uZSB0byBzdXBwb3J0IChldGhlcm5ldCkgc3dpdGNoIGZlYXR1cmVzLCBsaWtlIFJGQworCTMwNjksIHdoZXJlIHRoZSBpbmRpdmlkdWFsIHBvcnRzIGFyZSBOT1QgYWxsb3dlZCB0bworCWNvbW11bmljYXRlIHdpdGggZWFjaCBvdGhlciwgYnV0IHRoZXkgYXJlIGFsbG93ZWQgdG8gdGFsayB0bworCXRoZSB1cHN0cmVhbSByb3V0ZXIuICBBcyBkZXNjcmliZWQgaW4gUkZDIDMwNjksIGl0IGlzIHBvc3NpYmxlCisJdG8gYWxsb3cgdGhlc2UgaG9zdHMgdG8gY29tbXVuaWNhdGUgdGhyb3VnaCB0aGUgdXBzdHJlYW0KKwlyb3V0ZXIgYnkgcHJveHlfYXJwJ2luZy4gRG9uJ3QgbmVlZCB0byBiZSB1c2VkIHRvZ2V0aGVyIHdpdGgKKwlwcm94eV9hcnAuCisKKwlUaGlzIHRlY2hub2xvZ3kgaXMga25vd24gYnkgZGlmZmVyZW50IG5hbWVzOgorCSAgSW4gUkZDIDMwNjkgaXQgaXMgY2FsbGVkIFZMQU4gQWdncmVnYXRpb24uCisJICBDaXNjbyBhbmQgQWxsaWVkIFRlbGVzeW4gY2FsbCBpdCBQcml2YXRlIFZMQU4uCisJICBIZXdsZXR0LVBhY2thcmQgY2FsbCBpdCBTb3VyY2UtUG9ydCBmaWx0ZXJpbmcgb3IgcG9ydC1pc29sYXRpb24uCisJICBFcmljc3NvbiBjYWxsIGl0IE1BQy1Gb3JjZWQgRm9yd2FyZGluZyAoUkZDIERyYWZ0KS4KKwogc2hhcmVkX21lZGlhIC0gQk9PTEVBTgogCVNlbmQocm91dGVyKSBvciBhY2NlcHQoaG9zdCkgUkZDMTYyMCBzaGFyZWQgbWVkaWEgcmVkaXJlY3RzLgogCU92ZXJyaWRlcyBpcF9zZWN1cmVfcmVkaXJlY3RzLgpAQCAtODMzLDkgKzg3NiwxOCBAQAogCSAgICBvciBoYXJkd2FyZSBhZGRyZXNzIGNoYW5nZXMuCiAKIGFycF9hY2NlcHQgLSBCT09MRUFOCi0JRGVmaW5lIGJlaGF2aW9yIHdoZW4gZ3JhdHVpdG91cyBhcnAgcmVwbGllcyBhcmUgcmVjZWl2ZWQ6Ci0JMCAtIGRyb3AgZ3JhdHVpdG91cyBhcnAgZnJhbWVzCi0JMSAtIGFjY2VwdCBncmF0dWl0b3VzIGFycCBmcmFtZXMKKwlEZWZpbmUgYmVoYXZpb3IgZm9yIGdyYXR1aXRvdXMgQVJQIGZyYW1lcyB3aG8ncyBJUCBpcyBub3QKKwlhbHJlYWR5IHByZXNlbnQgaW4gdGhlIEFSUCB0YWJsZToKKwkwIC0gZG9uJ3QgY3JlYXRlIG5ldyBlbnRyaWVzIGluIHRoZSBBUlAgdGFibGUKKwkxIC0gY3JlYXRlIG5ldyBlbnRyaWVzIGluIHRoZSBBUlAgdGFibGUKKworCUJvdGggcmVwbGllcyBhbmQgcmVxdWVzdHMgdHlwZSBncmF0dWl0b3VzIGFycCB3aWxsIHRyaWdnZXIgdGhlCisJQVJQIHRhYmxlIHRvIGJlIHVwZGF0ZWQsIGlmIHRoaXMgc2V0dGluZyBpcyBvbi4KKworCUlmIHRoZSBBUlAgdGFibGUgYWxyZWFkeSBjb250YWlucyB0aGUgSVAgYWRkcmVzcyBvZiB0aGUKKwlncmF0dWl0b3VzIGFycCBmcmFtZSwgdGhlIGFycCB0YWJsZSB3aWxsIGJlIHVwZGF0ZWQgcmVnYXJkbGVzcworCWlmIHRoaXMgc2V0dGluZyBpcyBvbiBvciBvZmYuCisKIAogYXBwX3NvbGljaXQgLSBJTlRFR0VSCiAJVGhlIG1heGltdW0gbnVtYmVyIG9mIHByb2JlcyB0byBzZW5kIHRvIHRoZSB1c2VyIHNwYWNlIEFSUCBkYWVtb24KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9peGdiZXZmLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9peGdiZXZmLnR4dApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xOTAxNWRlCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2JldmYudHh0CkBAIC0wLDAgKzEsOTAgQEAKK0xpbnV4KiBCYXNlIERyaXZlciBmb3IgSW50ZWwoUikgTmV0d29yayBDb25uZWN0aW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOb3ZlbWJlciAyNCwgMjAwOQorCitDb250ZW50cworPT09PT09PT0KKworLSBJbiBUaGlzIFJlbGVhc2UKKy0gSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCistIEtub3duIElzc3Vlcy9Ucm91Ymxlc2hvb3RpbmcKKy0gU3VwcG9ydAorCitJbiBUaGlzIFJlbGVhc2UKKz09PT09PT09PT09PT09PQorCitUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBpeGdiZXZmIExpbnV4KiBCYXNlIERyaXZlciBmb3IgSW50ZWwgTmV0d29yaworQ29ubmVjdGlvbi4KKworVGhlIGl4Z2JldmYgZHJpdmVyIHN1cHBvcnRzIDgyNTk5LWJhc2VkIHZpcnR1YWwgZnVuY3Rpb24gZGV2aWNlcyB0aGF0IGNhbiBvbmx5CitiZSBhY3RpdmF0ZWQgb24ga2VybmVscyB3aXRoIENPTkZJR19QQ0lfSU9WIGVuYWJsZWQuCisKK1RoZSBpeGdiZXZmIGRyaXZlciBzdXBwb3J0cyB2aXJ0dWFsIGZ1bmN0aW9ucyBnZW5lcmF0ZWQgYnkgdGhlIGl4Z2JlIGRyaXZlcgord2l0aCBhIG1heF92ZnMgdmFsdWUgb2YgMSBvciBncmVhdGVyLgorCitUaGUgZ3Vlc3QgT1MgbG9hZGluZyB0aGUgaXhnYmV2ZiBkcml2ZXIgbXVzdCBzdXBwb3J0IE1TSS1YIGludGVycnVwdHMuCisKK1ZMQU5zOiBUaGVyZSBpcyBhIGxpbWl0IG9mIGEgdG90YWwgb2YgMzIgc2hhcmVkIFZMQU5zIHRvIDEgb3IgbW9yZSBWRnMuCisKK0lkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgorPT09PT09PT09PT09PT09PT09PT09PT09CisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvIHRvIHRoZSBBZGFwdGVyICYKK0RyaXZlciBJRCBHdWlkZSBhdDoKKworICAgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbS9zdXBwb3J0L25ldHdvcmsvc2IvQ1MtMDA4NDQxLmh0bQorCitLbm93biBJc3N1ZXMvVHJvdWJsZXNob290aW5nCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgVW5sb2FkaW5nIFBoeXNpY2FsIEZ1bmN0aW9uIChQRikgRHJpdmVyIENhdXNlcyBTeXN0ZW0gUmVib290cyBXaGVuIFZNIGlzCisgIFJ1bm5pbmcgYW5kIFZGIGlzIExvYWRlZCBvbiB0aGUgVk0KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIERvIG5vdCB1bmxvYWQgdGhlIFBGIGRyaXZlciAoaXhnYmUpIHdoaWxlIFZGcyBhcmUgYXNzaWduZWQgdG8gZ3Vlc3RzLgorCitTdXBwb3J0Cis9PT09PT09CisKK0ZvciBnZW5lcmFsIGluZm9ybWF0aW9uLCBnbyB0byB0aGUgSW50ZWwgc3VwcG9ydCB3ZWJzaXRlIGF0OgorCisgICAgaHR0cDovL3N1cHBvcnQuaW50ZWwuY29tCisKK29yIHRoZSBJbnRlbCBXaXJlZCBOZXR3b3JraW5nIHByb2plY3QgaG9zdGVkIGJ5IFNvdXJjZWZvcmdlIGF0OgorCisgICAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9lMTAwMAorCitJZiBhbiBpc3N1ZSBpcyBpZGVudGlmaWVkIHdpdGggdGhlIHJlbGVhc2VkIHNvdXJjZSBjb2RlIG9uIHRoZSBzdXBwb3J0ZWQKK2tlcm5lbCB3aXRoIGEgc3VwcG9ydGVkIGFkYXB0ZXIsIGVtYWlsIHRoZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiByZWxhdGVkCit0byB0aGUgaXNzdWUgdG8gZTEwMDAtZGV2ZWxAbGlzdHMuc2YubmV0CisKK0xpY2Vuc2UKKz09PT09PT0KKworSW50ZWwgMTAgR2lnYWJpdCBMaW51eCBkcml2ZXIuCitDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Cit1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAordmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCittb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKK3RoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KK3RoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKK1RyYWRlbWFya3MKKz09PT09PT09PT0KKworSW50ZWwsIEl0YW5pdW0sIGFuZCBQZW50aXVtIGFyZSB0cmFkZW1hcmtzIG9yIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBvZgorSW50ZWwgQ29ycG9yYXRpb24gb3IgaXRzIHN1YnNpZGlhcmllcyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgb3RoZXIKK2NvdW50cmllcy4KKworKiBPdGhlciBuYW1lcyBhbmQgYnJhbmRzIG1heSBiZSBjbGFpbWVkIGFzIHRoZSBwcm9wZXJ0eSBvZiBvdGhlcnMuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGFja2V0X21tYXAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3BhY2tldF9tbWFwLnR4dAppbmRleCBhMjJmZDg1Li4wOWFiMGQyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGFja2V0X21tYXAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wYWNrZXRfbW1hcC50eHQKQEAgLTIsNyArMiw3IEBACiArIEFCU1RSQUNUCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1UaGlzIGZpbGUgZG9jdW1lbnRzIHRoZSBDT05GSUdfUEFDS0VUX01NQVAgb3B0aW9uIGF2YWlsYWJsZSB3aXRoIHRoZSBQQUNLRVQKK1RoaXMgZmlsZSBkb2N1bWVudHMgdGhlIG1tYXAoKSBmYWNpbGl0eSBhdmFpbGFibGUgd2l0aCB0aGUgUEFDS0VUCiBzb2NrZXQgaW50ZXJmYWNlIG9uIDIuNCBhbmQgMi42IGtlcm5lbHMuIFRoaXMgdHlwZSBvZiBzb2NrZXRzIGlzIHVzZWQgZm9yIAogY2FwdHVyZSBuZXR3b3JrIHRyYWZmaWMgd2l0aCB1dGlsaXRpZXMgbGlrZSB0Y3BkdW1wIG9yIGFueSBvdGhlciB0aGF0IG5lZWRzCiByYXcgYWNjZXNzIHRvIG5ldHdvcmsgaW50ZXJmYWNlLgpAQCAtNDQsNyArNDQsNyBAQAogc3VwcG9ydGVkIGJ5IGRldmljZXMgb2YgeW91ciBuZXR3b3JrLgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotKyBIb3cgdG8gdXNlIENPTkZJR19QQUNLRVRfTU1BUCB0byBpbXByb3ZlIGNhcHR1cmUgcHJvY2VzcworKyBIb3cgdG8gdXNlIG1tYXAoKSB0byBpbXByb3ZlIGNhcHR1cmUgcHJvY2VzcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogRnJvbSB0aGUgdXNlciBzdGFuZHBvaW50LCB5b3Ugc2hvdWxkIHVzZSB0aGUgaGlnaGVyIGxldmVsIGxpYnBjYXAgbGlicmFyeSwgd2hpY2gKQEAgLTY0LDcgKzY0LDcgQEAKIHN1cHBvcnQuCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0rIEhvdyB0byB1c2UgQ09ORklHX1BBQ0tFVF9NTUFQIGRpcmVjdGx5IHRvIGltcHJvdmUgY2FwdHVyZSBwcm9jZXNzCisrIEhvdyB0byB1c2UgbW1hcCgpIGRpcmVjdGx5IHRvIGltcHJvdmUgY2FwdHVyZSBwcm9jZXNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBGcm9tIHRoZSBzeXN0ZW0gY2FsbHMgc3RhbmQgcG9pbnQsIHRoZSB1c2Ugb2YgUEFDS0VUX01NQVAgaW52b2x2ZXMKQEAgLTEwNSw3ICsxMDUsNyBAQAogdGhlIHVzZSBvZiB0aGlzIGJ1ZmZlci4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSsgSG93IHRvIHVzZSBDT05GSUdfUEFDS0VUX01NQVAgZGlyZWN0bHkgdG8gaW1wcm92ZSB0cmFuc21pc3Npb24gcHJvY2VzcworKyBIb3cgdG8gdXNlIG1tYXAoKSBkaXJlY3RseSB0byBpbXByb3ZlIHRyYW5zbWlzc2lvbiBwcm9jZXNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVHJhbnNtaXNzaW9uIHByb2Nlc3MgaXMgc2ltaWxhciB0byBjYXB0dXJlIGFzIHNob3duIGJlbG93LgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcmVndWxhdG9yeS50eHQgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcmVndWxhdG9yeS50eHQKaW5kZXggZWUzMTM2OS4uOTU1MTYyMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JlZ3VsYXRvcnkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9yZWd1bGF0b3J5LnR4dApAQCAtMTg4LDMgKzE4OCwyNyBAQAogCQkgICAgICAgJm15ZHJpdmVyX2pwX3JlZ2RvbS5yZWdfcnVsZXNbaV0sCiAJCSAgICAgICBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSkpOwogCXJlZ3VsYXRvcnlfc3RydWN0X2hpbnQocmQpOworCitTdGF0aWNhbGx5IGNvbXBpbGVkIHJlZ3VsYXRvcnkgZGF0YWJhc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJbiBtb3N0IHNpdHVhdGlvbnMgdGhlIHVzZXJsYW5kIHNvbHV0aW9uIHVzaW5nIENSREEgYXMgZGVzY3JpYmVkCithYm92ZSBpcyB0aGUgcHJlZmVycmVkIHNvbHV0aW9uLiAgSG93ZXZlciBpbiBzb21lIGNhc2VzIGEgc2V0IG9mCitydWxlcyBidWlsdCBpbnRvIHRoZSBrZXJuZWwgaXRzZWxmIG1heSBiZSBkZXNpcmFibGUuICBUbyBhY2NvdW50Citmb3IgdGhpcyBzaXR1YXRpb24sIGEgY29uZmlndXJhdGlvbiBvcHRpb24gaGFzIGJlZW4gcHJvdmlkZWQKKyhpLmUuIENPTkZJR19DRkc4MDIxMV9JTlRFUk5BTF9SRUdEQikuICBXaXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQsCit0aGUgd2lyZWxlc3MgZGF0YWJhc2UgaW5mb3JtYXRpb24gY29udGFpbmVkIGluIG5ldC93aXJlbGVzcy9kYi50eHQgaXMKK3VzZWQgdG8gZ2VuZXJhdGUgYSBkYXRhIHN0cnVjdHVyZSBlbmNvZGVkIGluIG5ldC93aXJlbGVzcy9yZWdkYi5jLgorVGhhdCBvcHRpb24gYWxzbyBlbmFibGVzIGNvZGUgaW4gbmV0L3dpcmVsZXNzL3JlZy5jIHdoaWNoIHF1ZXJpZXMKK3RoZSBkYXRhIGluIHJlZ2RiLmMgYXMgYW4gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgQ1JEQS4KKworVGhlIGZpbGUgbmV0L3dpcmVsZXNzL2RiLnR4dCBzaG91bGQgYmUga2VwdCB1cC10by1kYXRlIHdpdGggdGhlIGRiLnR4dAorZmlsZSBhdmFpbGFibGUgaW4gdGhlIGdpdCByZXBvc2l0b3J5IGhlcmU6CisKKyAgICBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGludmlsbGUvd2lyZWxlc3MtcmVnZGIuZ2l0CisKK0FnYWluLCBtb3N0IHVzZXJzIGluIG1vc3Qgc2l0dWF0aW9ucyBzaG91bGQgYmUgdXNpbmcgdGhlIENSREEgcGFja2FnZQorcHJvdmlkZWQgd2l0aCB0aGVpciBkaXN0cmlidXRpb24sIGFuZCBpbiBtb3N0IG90aGVyIHNpdHVhdGlvbnMgdXNlcnMKK3Nob3VsZCBiZSBidWlsZGluZyBhbmQgdXNpbmcgQ1JEQSBvbiB0aGVpciBvd24gcmF0aGVyIHRoYW4gdXNpbmcKK3RoaXMgb3B0aW9uLiAgSWYgeW91IGFyZSBub3QgYWJzb2x1dGVseSBzdXJlIHRoYXQgeW91IHNob3VsZCBiZSB1c2luZworQ09ORklHX0NGRzgwMjExX0lOVEVSTkFMX1JFR0RCIHRoZW4gX0RPX05PVF9VU0VfSVRfLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NrZnAudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3NrZnAudHh0CmluZGV4IGFiZmRkZjguLjIwM2VjNjYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9za2ZwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvc2tmcC50eHQKQEAgLTY4LDcgKzY4LDcgQEAKID09PT09PT09PT09PT09PT09PT09PT09CiAKIEZyb20gdjIuMDEgb24sIHRoZSBkcml2ZXIgaXMgaW50ZWdyYXRlZCBpbiB0aGUgbGludXgga2VybmVsIHNvdXJjZXMuCi1UaGVyZWZvciwgdGhlIGluc3RhbGxhdGlvbiBpcyB0aGUgc2FtZSBhcyBmb3IgYW55IG90aGVyIGFkYXB0ZXIKK1RoZXJlZm9yZSwgdGhlIGluc3RhbGxhdGlvbiBpcyB0aGUgc2FtZSBhcyBmb3IgYW55IG90aGVyIGFkYXB0ZXIKIHN1cHBvcnRlZCBieSB0aGUga2VybmVsLgogUmVmZXIgdG8gdGhlIG1hbnVhbCBvZiB5b3VyIGRpc3RyaWJ1dGlvbiBhYm91dCB0aGUgaW5zdGFsbGF0aW9uCiBvZiBuZXR3b3JrIGFkYXB0ZXJzLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RjcC10aGluLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90Y3AtdGhpbi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUxZTIyOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90Y3AtdGhpbi50eHQKQEAgLTAsMCArMSw0NyBAQAorVGhpbi1zdHJlYW1zIGFuZCBUQ1AKKz09PT09PT09PT09PT09PT09PT09CitBIHdpZGUgcmFuZ2Ugb2YgSW50ZXJuZXQtYmFzZWQgc2VydmljZXMgdGhhdCB1c2UgcmVsaWFibGUgdHJhbnNwb3J0Citwcm90b2NvbHMgZGlzcGxheSB3aGF0IHdlIGNhbGwgdGhpbi1zdHJlYW0gcHJvcGVydGllcy4gVGhpcyBtZWFucwordGhhdCB0aGUgYXBwbGljYXRpb24gc2VuZHMgZGF0YSB3aXRoIHN1Y2ggYSBsb3cgcmF0ZSB0aGF0IHRoZQorcmV0cmFuc21pc3Npb24gbWVjaGFuaXNtcyBvZiB0aGUgdHJhbnNwb3J0IHByb3RvY29sIGFyZSBub3QgZnVsbHkKK2VmZmVjdGl2ZS4gSW4gdGltZS1kZXBlbmRlbnQgc2NlbmFyaW9zIChsaWtlIG9ubGluZSBnYW1lcywgY29udHJvbAorc3lzdGVtcywgc3RvY2sgdHJhZGluZyBldGMuKSB3aGVyZSB0aGUgdXNlciBleHBlcmllbmNlIGRlcGVuZHMKK29uIHRoZSBkYXRhIGRlbGl2ZXJ5IGxhdGVuY3ksIHBhY2tldCBsb3NzIGNhbiBiZSBkZXZhc3RhdGluZyBmb3IKK3RoZSBzZXJ2aWNlIHF1YWxpdHkuIEV4dHJlbWUgbGF0ZW5jaWVzIGFyZSBjYXVzZWQgYnkgVENQJ3MKK2RlcGVuZGVuY3kgb24gdGhlIGFycml2YWwgb2YgbmV3IGRhdGEgZnJvbSB0aGUgYXBwbGljYXRpb24gdG8gdHJpZ2dlcgorcmV0cmFuc21pc3Npb25zIGVmZmVjdGl2ZWx5IHRocm91Z2ggZmFzdCByZXRyYW5zbWl0IGluc3RlYWQgb2YKK3dhaXRpbmcgZm9yIGxvbmcgdGltZW91dHMuCisKK0FmdGVyIGFuYWx5c2luZyBhIGxhcmdlIG51bWJlciBvZiB0aW1lLWRlcGVuZGVudCBpbnRlcmFjdGl2ZQorYXBwbGljYXRpb25zLCB3ZSBoYXZlIHNlZW4gdGhhdCB0aGV5IG9mdGVuIHByb2R1Y2UgdGhpbiBzdHJlYW1zCithbmQgYWxzbyBzdGF5IHdpdGggdGhpcyB0cmFmZmljIHBhdHRlcm4gdGhyb3VnaG91dCBpdHMgZW50aXJlCitsaWZlc3Bhbi4gVGhlIGNvbWJpbmF0aW9uIG9mIHRpbWUtZGVwZW5kZW5jeSBhbmQgdGhlIGZhY3QgdGhhdCB0aGUKK3N0cmVhbXMgcHJvdm9rZSBoaWdoIGxhdGVuY2llcyB3aGVuIHVzaW5nIFRDUCBpcyB1bmZvcnR1bmF0ZS4KKworSW4gb3JkZXIgdG8gcmVkdWNlIGFwcGxpY2F0aW9uLWxheWVyIGxhdGVuY3kgd2hlbiBwYWNrZXRzIGFyZSBsb3N0LAorYSBzZXQgb2YgbWVjaGFuaXNtcyBoYXMgYmVlbiBtYWRlLCB3aGljaCBhZGRyZXNzIHRoZXNlIGxhdGVuY3kgaXNzdWVzCitmb3IgdGhpbiBzdHJlYW1zLiBJbiBzaG9ydCwgaWYgdGhlIGtlcm5lbCBkZXRlY3RzIGEgdGhpbiBzdHJlYW0sCit0aGUgcmV0cmFuc21pc3Npb24gbWVjaGFuaXNtcyBhcmUgbW9kaWZpZWQgaW4gdGhlIGZvbGxvd2luZyBtYW5uZXI6CisKKzEpIElmIHRoZSBzdHJlYW0gaXMgdGhpbiwgZmFzdCByZXRyYW5zbWl0IG9uIHRoZSBmaXJzdCBkdXBBQ0suCisyKSBJZiB0aGUgc3RyZWFtIGlzIHRoaW4sIGRvIG5vdCBhcHBseSBleHBvbmVudGlhbCBiYWNrb2ZmLgorCitUaGVzZSBlbmhhbmNlbWVudHMgYXJlIGFwcGxpZWQgb25seSBpZiB0aGUgc3RyZWFtIGlzIGRldGVjdGVkIGFzCit0aGluLiBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSBkZWZpbmluZyBhIHRocmVzaG9sZCBmb3IgdGhlIG51bWJlcgorb2YgcGFja2V0cyBpbiBmbGlnaHQuIElmIHRoZXJlIGFyZSBsZXNzIHRoYW4gNCBwYWNrZXRzIGluIGZsaWdodCwKK2Zhc3QgcmV0cmFuc21pc3Npb25zIGNhbiBub3QgYmUgdHJpZ2dlcmVkLCBhbmQgdGhlIHN0cmVhbSBpcyBwcm9uZQordG8gZXhwZXJpZW5jZSBoaWdoIHJldHJhbnNtaXNzaW9uIGxhdGVuY2llcy4KKworU2luY2UgdGhlc2UgbWVjaGFuaXNtcyBhcmUgdGFyZ2V0ZWQgYXQgdGltZS1kZXBlbmRlbnQgYXBwbGljYXRpb25zLAordGhleSBtdXN0IGJlIHNwZWNpZmljYWxseSBhY3RpdmF0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uIHVzaW5nIHRoZQorVENQX1RISU5fTElORUFSX1RJTUVPVVRTIGFuZCBUQ1BfVEhJTl9EVVBBQ0sgSU9DVExTIG9yIHRoZQordGNwX3RoaW5fbGluZWFyX3RpbWVvdXRzIGFuZCB0Y3BfdGhpbl9kdXBhY2sgc3lzY3Rscy4gQm90aAorbW9kaWZpY2F0aW9ucyBhcmUgdHVybmVkIG9mZiBieSBkZWZhdWx0LgorCitSZWZlcmVuY2VzCis9PT09PT09PT09CitNb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBtb2RpZmljYXRpb25zLCBhcyB3ZWxsIGFzIGEgd2lkZSByYW5nZSBvZgorZXhwZXJpbWVudGFsIGRhdGEgY2FuIGJlIGZvdW5kIGhlcmU6CisiSW1wcm92aW5nIGxhdGVuY3kgZm9yIGludGVyYWN0aXZlLCB0aGluLXN0cmVhbSBhcHBsaWNhdGlvbnMgb3ZlcgorcmVsaWFibGUgdHJhbnNwb3J0IgoraHR0cDovL3NpbXVsYS5uby9yZXNlYXJjaC9uZC9wdWJsaWNhdGlvbnMvU2ltdWxhLm5kLjQ3Ny9zaW11bGFfcGRmX2ZpbGUKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvdGltZXN0YW1waW5nLmMgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvdGltZXN0YW1waW5nL3RpbWVzdGFtcGluZy5jCmluZGV4IGE3OTM2ZmUuLmJhYjYxOWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy90aW1lc3RhbXBpbmcvdGltZXN0YW1waW5nLmMKKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3RpbWVzdGFtcGluZy90aW1lc3RhbXBpbmcuYwpAQCAtMzcwLDcgKzM3MCw3IEBACiAJfQogCiAJc29jayA9IHNvY2tldChQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCk7Ci0JaWYgKHNvY2tldCA8IDApCisJaWYgKHNvY2sgPCAwKQogCQliYWlsKCJzb2NrZXQiKTsKIAogCW1lbXNldCgmZGV2aWNlLCAwLCBzaXplb2YoZGV2aWNlKSk7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3BucC50eHQgYi9Eb2N1bWVudGF0aW9uL3BucC50eHQKaW5kZXggYTMyN2RiNi4uNzYzZTQ2NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wbnAudHh0CisrKyBiL0RvY3VtZW50YXRpb24vcG5wLnR4dApAQCAtNTcsNyArNTcsNyBAQAogIyBjYXQgcmVzb3VyY2VzCiBESVNBQkxFRAogCi0tIE5vdGljZSB0aGUgc3RyaW5nICJESVNBQkxFRCIuICBUSGlzIG1lYW5zIHRoZSBkZXZpY2UgaXMgbm90IGFjdGl2ZS4KKy0gTm90aWNlIHRoZSBzdHJpbmcgIkRJU0FCTEVEIi4gIFRoaXMgbWVhbnMgdGhlIGRldmljZSBpcyBub3QgYWN0aXZlLgogCiAzLikgY2hlY2sgdGhlIGRldmljZSdzIHBvc3NpYmxlIGNvbmZpZ3VyYXRpb25zIChvcHRpb25hbCkKICMgY2F0IG9wdGlvbnMKQEAgLTEzOSw3ICsxMzksNyBAQAogCiBSZXF1aXJlbWVudHMgZm9yIGEgTGludXggUG5QIHByb3RvY29sOgogMS4pIHRoZSBwcm90b2NvbCBtdXN0IHVzZSBFSVNBIElEcwotMi4pIHRoZSBwcm90b2NvbCBtdXN0IGluZm9ybSB0aGUgUG5QIExheWVyIG9mIGEgZGV2aWNlcyBjdXJyZW50IGNvbmZpZ3VyYXRpb24KKzIuKSB0aGUgcHJvdG9jb2wgbXVzdCBpbmZvcm0gdGhlIFBuUCBMYXllciBvZiBhIGRldmljZSdzIGN1cnJlbnQgY29uZmlndXJhdGlvbgogLSB0aGUgYWJpbGl0eSB0byBzZXQgcmVzb3VyY2VzIGlzIG9wdGlvbmFsIGJ1dCBwcmVmZXJyZWQuCiAKIFRoZSBmb2xsb3dpbmcgYXJlIFBuUCBwcm90b2NvbCByZWxhdGVkIGZ1bmN0aW9uczoKQEAgLTE1OCw3ICsxNTgsNyBAQAogLSBhdXRvbWF0aWNhbGx5IHdpbGwgZnJlZSBtZW0gdXNlZCBieSB0aGUgZGV2aWNlIGFuZCByZWxhdGVkIHN0cnVjdHVyZXMKIAogcG5wX2FkZF9pZAotLSBhZGRzIGEgRUlTQSBJRCB0byB0aGUgbGlzdCBvZiBzdXBwb3J0ZWQgSURzIGZvciB0aGUgc3BlY2lmaWVkIGRldmljZQorLSBhZGRzIGFuIEVJU0EgSUQgdG8gdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIElEcyBmb3IgdGhlIHNwZWNpZmllZCBkZXZpY2UKIAogRm9yIG1vcmUgaW5mb3JtYXRpb24gY29uc3VsdCB0aGUgc291cmNlIG9mIGEgcHJvdG9jb2wgc3VjaCBhcwogL2RyaXZlcnMvcG5wL3BucGJpb3MvY29yZS5jLgpAQCAtMTY3LDcgKzE2Nyw3IEBACiAKIExpbnV4IFBsdWcgYW5kIFBsYXkgRHJpdmVycwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGluZm9ybWF0aW9uIGZvciBsaW51eCBQblAgZHJpdmVyIGRldmVsb3BlcnMuCisJVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGluZm9ybWF0aW9uIGZvciBMaW51eCBQblAgZHJpdmVyIGRldmVsb3BlcnMuCiAKIFRoZSBOZXcgV2F5CiAuLi4uLi4uLi4uLgpAQCAtMjM1LDExICsyMzUsMTAgQEAKIFRoZSBPbGQgV2F5CiAuLi4uLi4uLi4uLgogCi1hIHNlcmllcyBvZiBjb21wYXRpYmlsaXR5IGZ1bmN0aW9ucyBoYXZlIGJlZW4gY3JlYXRlZCB0byBtYWtlIGl0IGVhc3kgdG8gY29udmVydCAKLQorQSBzZXJpZXMgb2YgY29tcGF0aWJpbGl0eSBmdW5jdGlvbnMgaGF2ZSBiZWVuIGNyZWF0ZWQgdG8gbWFrZSBpdCBlYXN5IHRvIGNvbnZlcnQKIElTQVBOUCBkcml2ZXJzLiAgVGhleSBzaG91bGQgc2VydmUgYXMgYSB0ZW1wb3Jhcnkgc29sdXRpb24gb25seS4KIAotdGhleSBhcmUgYXMgZm9sbG93czoKK1RoZXkgYXJlIGFzIGZvbGxvd3M6CiAKIHN0cnVjdCBwbnBfY2FyZCAqcG5wX2ZpbmRfY2FyZCh1bnNpZ25lZCBzaG9ydCB2ZW5kb3IsCiAJCQkJIHVuc2lnbmVkIHNob3J0IGRldmljZSwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VyL3J1bnRpbWVfcG0udHh0CmluZGV4IDM1NmZkODYuLjU1Yjg1OWIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXIvcnVudGltZV9wbS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlci9ydW50aW1lX3BtLnR4dApAQCAtMjI0LDYgKzIyNCwxMiBAQAogICAgICAgUlBNX1NVU1BFTkRFRCwgd2hpY2ggbWVhbnMgdGhhdCBlYWNoIGRldmljZSBpcyBpbml0aWFsbHkgcmVnYXJkZWQgYnkgdGhlCiAgICAgICBQTSBjb3JlIGFzICdzdXNwZW5kZWQnLCByZWdhcmRsZXNzIG9mIGl0cyByZWFsIGhhcmR3YXJlIHN0YXR1cwogCisgIHVuc2lnbmVkIGludCBydW50aW1lX2F1dG87CisgICAgLSBpZiBzZXQsIGluZGljYXRlcyB0aGF0IHRoZSB1c2VyIHNwYWNlIGhhcyBhbGxvd2VkIHRoZSBkZXZpY2UgZHJpdmVyIHRvCisgICAgICBwb3dlciBtYW5hZ2UgdGhlIGRldmljZSBhdCBydW4gdGltZSB2aWEgdGhlIC9zeXMvZGV2aWNlcy8uLi4vcG93ZXIvY29udHJvbAorICAgICAgaW50ZXJmYWNlOyBpdCBtYXkgb25seSBiZSBtb2RpZmllZCB3aXRoIHRoZSBoZWxwIG9mIHRoZSBwbV9ydW50aW1lX2FsbG93KCkKKyAgICAgIGFuZCBwbV9ydW50aW1lX2ZvcmJpZCgpIGhlbHBlciBmdW5jdGlvbnMKKwogQWxsIG9mIHRoZSBhYm92ZSBmaWVsZHMgYXJlIG1lbWJlcnMgb2YgdGhlICdwb3dlcicgbWVtYmVyIG9mICdzdHJ1Y3QgZGV2aWNlJy4KIAogNC4gUnVuLXRpbWUgUE0gRGV2aWNlIEhlbHBlciBGdW5jdGlvbnMKQEAgLTI1MCw3ICsyNTYsNyBAQAogICAgICAgdG8gc3VzcGVuZCB0aGUgZGV2aWNlIGFnYWluIGluIGZ1dHVyZQogCiAgIGludCBwbV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwotICAgIC0gZXhlY3V0ZSB0aGUgc3Vic3lzdGVtLWxldmUgcmVzdW1lIGNhbGxiYWNrIGZvciB0aGUgZGV2aWNlOyByZXR1cm5zIDAgb24KKyAgICAtIGV4ZWN1dGUgdGhlIHN1YnN5c3RlbS1sZXZlbCByZXN1bWUgY2FsbGJhY2sgZm9yIHRoZSBkZXZpY2U7IHJldHVybnMgMCBvbgogICAgICAgc3VjY2VzcywgMSBpZiB0aGUgZGV2aWNlJ3MgcnVuLXRpbWUgUE0gc3RhdHVzIHdhcyBhbHJlYWR5ICdhY3RpdmUnIG9yCiAgICAgICBlcnJvciBjb2RlIG9uIGZhaWx1cmUsIHdoZXJlIC1FQUdBSU4gbWVhbnMgaXQgbWF5IGJlIHNhZmUgdG8gYXR0ZW1wdCB0bwogICAgICAgcmVzdW1lIHRoZSBkZXZpY2UgYWdhaW4gaW4gZnV0dXJlLCBidXQgJ3Bvd2VyLnJ1bnRpbWVfZXJyb3InIHNob3VsZCBiZQpAQCAtMzI5LDYgKzMzNSwyMCBAQAogICAgICAgJ3Bvd2VyLnJ1bnRpbWVfZXJyb3InIGlzIHNldCBvciAncG93ZXIuZGlzYWJsZV9kZXB0aCcgaXMgZ3JlYXRlciB0aGFuCiAgICAgICB6ZXJvKQogCisgIGJvb2wgcG1fcnVudGltZV9zdXNwZW5kZWQoc3RydWN0IGRldmljZSAqZGV2KTsKKyAgICAtIHJldHVybiB0cnVlIGlmIHRoZSBkZXZpY2UncyBydW50aW1lIFBNIHN0YXR1cyBpcyAnc3VzcGVuZGVkJywgb3IgZmFsc2UKKyAgICAgIG90aGVyd2lzZQorCisgIHZvaWQgcG1fcnVudGltZV9hbGxvdyhzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gc2V0IHRoZSBwb3dlci5ydW50aW1lX2F1dG8gZmxhZyBmb3IgdGhlIGRldmljZSBhbmQgZGVjcmVhc2UgaXRzIHVzYWdlCisgICAgICBjb3VudGVyICh1c2VkIGJ5IHRoZSAvc3lzL2RldmljZXMvLi4uL3Bvd2VyL2NvbnRyb2wgaW50ZXJmYWNlIHRvCisgICAgICBlZmZlY3RpdmVseSBhbGxvdyB0aGUgZGV2aWNlIHRvIGJlIHBvd2VyIG1hbmFnZWQgYXQgcnVuIHRpbWUpCisKKyAgdm9pZCBwbV9ydW50aW1lX2ZvcmJpZChzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gdW5zZXQgdGhlIHBvd2VyLnJ1bnRpbWVfYXV0byBmbGFnIGZvciB0aGUgZGV2aWNlIGFuZCBpbmNyZWFzZSBpdHMgdXNhZ2UKKyAgICAgIGNvdW50ZXIgKHVzZWQgYnkgdGhlIC9zeXMvZGV2aWNlcy8uLi4vcG93ZXIvY29udHJvbCBpbnRlcmZhY2UgdG8KKyAgICAgIGVmZmVjdGl2ZWx5IHByZXZlbnQgdGhlIGRldmljZSBmcm9tIGJlaW5nIHBvd2VyIG1hbmFnZWQgYXQgcnVuIHRpbWUpCisKIEl0IGlzIHNhZmUgdG8gZXhlY3V0ZSB0aGUgZm9sbG93aW5nIGhlbHBlciBmdW5jdGlvbnMgZnJvbSBpbnRlcnJ1cHQgY29udGV4dDoKIAogcG1fcmVxdWVzdF9pZGxlKCkKQEAgLTM4Miw2ICs0MDIsMTggQEAKIGZpbmlzaGVkLCBzbyB0aGUgUE0gY29yZSB1c2VzIHBtX3J1bnRpbWVfaWRsZV9zeW5jKCkgdG8gaW52b2tlIHRoZQogc3Vic3lzdGVtLWxldmVsIGlkbGUgY2FsbGJhY2sgZm9yIHRoZSBkZXZpY2UgYXQgdGhhdCB0aW1lLgogCitUaGUgdXNlciBzcGFjZSBjYW4gZWZmZWN0aXZlbHkgZGlzYWxsb3cgdGhlIGRyaXZlciBvZiB0aGUgZGV2aWNlIHRvIHBvd2VyIG1hbmFnZQoraXQgYXQgcnVuIHRpbWUgYnkgY2hhbmdpbmcgdGhlIHZhbHVlIG9mIGl0cyAvc3lzL2RldmljZXMvLi4uL3Bvd2VyL2NvbnRyb2wKK2F0dHJpYnV0ZSB0byAib24iLCB3aGljaCBjYXVzZXMgcG1fcnVudGltZV9mb3JiaWQoKSB0byBiZSBjYWxsZWQuICBJbiBwcmluY2lwbGUsCit0aGlzIG1lY2hhbmlzbSBtYXkgYWxzbyBiZSB1c2VkIGJ5IHRoZSBkcml2ZXIgdG8gZWZmZWN0aXZlbHkgdHVybiBvZmYgdGhlCitydW4tdGltZSBwb3dlciBtYW5hZ2VtZW50IG9mIHRoZSBkZXZpY2UgdW50aWwgdGhlIHVzZXIgc3BhY2UgdHVybnMgaXQgb24uCitOYW1lbHksIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24gdGhlIGRyaXZlciBjYW4gbWFrZSBzdXJlIHRoYXQgdGhlIHJ1bi10aW1lIFBNCitzdGF0dXMgb2YgdGhlIGRldmljZSBpcyAnYWN0aXZlJyBhbmQgY2FsbCBwbV9ydW50aW1lX2ZvcmJpZCgpLiAgSXQgc2hvdWxkIGJlCitub3RlZCwgaG93ZXZlciwgdGhhdCBpZiB0aGUgdXNlciBzcGFjZSBoYXMgYWxyZWFkeSBpbnRlbnRpb25hbGx5IGNoYW5nZWQgdGhlCit2YWx1ZSBvZiAvc3lzL2RldmljZXMvLi4uL3Bvd2VyL2NvbnRyb2wgdG8gImF1dG8iIHRvIGFsbG93IHRoZSBkcml2ZXIgdG8gcG93ZXIKK21hbmFnZSB0aGUgZGV2aWNlIGF0IHJ1biB0aW1lLCB0aGUgZHJpdmVyIG1heSBjb25mdXNlIGl0IGJ5IHVzaW5nCitwbV9ydW50aW1lX2ZvcmJpZCgpIHRoaXMgd2F5LgorCiA2LiBSdW4tdGltZSBQTSBhbmQgU3lzdGVtIFNsZWVwCiAKIFJ1bi10aW1lIFBNIGFuZCBzeXN0ZW0gc2xlZXAgKGkuZS4sIHN5c3RlbSBzdXNwZW5kIGFuZCBoaWJlcm5hdGlvbiwgYWxzbyBrbm93bgpAQCAtNDMxLDMgKzQ2Myw2NCBAQAogLT5wcmVwYXJlKCkgY2FsbGJhY2sgYW5kIGRlY3JlbWVudHMgaXQgYWZ0ZXIgY2FsbGluZyB0aGUgLT5jb21wbGV0ZSgpIGNhbGxiYWNrLgogSGVuY2UgZGlzYWJsaW5nIHJ1bi10aW1lIFBNIHRlbXBvcmFyaWx5IGxpa2UgdGhpcyB3aWxsIG5vdCBjYXVzZSBhbnkgcnVuLXRpbWUKIHN1c3BlbmQgY2FsbGJhY2tzIHRvIGJlIGxvc3QuCisKKzcuIEdlbmVyaWMgc3Vic3lzdGVtIGNhbGxiYWNrcworCitTdWJzeXN0ZW1zIG1heSB3aXNoIHRvIGNvbnNlcnZlIGNvZGUgc3BhY2UgYnkgdXNpbmcgdGhlIHNldCBvZiBnZW5lcmljIHBvd2VyCittYW5hZ2VtZW50IGNhbGxiYWNrcyBwcm92aWRlZCBieSB0aGUgUE0gY29yZSwgZGVmaW5lZCBpbgorZHJpdmVyL2Jhc2UvcG93ZXIvZ2VuZXJpY19vcHMuYzoKKworICBpbnQgcG1fZ2VuZXJpY19ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KTsKKyAgICAtIGludm9rZSB0aGUgLT5ydW50aW1lX2lkbGUoKSBjYWxsYmFjayBwcm92aWRlZCBieSB0aGUgZHJpdmVyIG9mIHRoaXMKKyAgICAgIGRldmljZSwgaWYgZGVmaW5lZCwgYW5kIGNhbGwgcG1fcnVudGltZV9zdXNwZW5kKCkgZm9yIHRoaXMgZGV2aWNlIGlmIHRoZQorICAgICAgcmV0dXJuIHZhbHVlIGlzIDAgb3IgdGhlIGNhbGxiYWNrIGlzIG5vdCBkZWZpbmVkCisKKyAgaW50IHBtX2dlbmVyaWNfcnVudGltZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldik7CisgICAgLSBpbnZva2UgdGhlIC0+cnVudGltZV9zdXNwZW5kKCkgY2FsbGJhY2sgcHJvdmlkZWQgYnkgdGhlIGRyaXZlciBvZiB0aGlzCisgICAgICBkZXZpY2UgYW5kIHJldHVybiBpdHMgcmVzdWx0LCBvciByZXR1cm4gLUVJTlZBTCBpZiBub3QgZGVmaW5lZAorCisgIGludCBwbV9nZW5lcmljX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CisgICAgLSBpbnZva2UgdGhlIC0+cnVudGltZV9yZXN1bWUoKSBjYWxsYmFjayBwcm92aWRlZCBieSB0aGUgZHJpdmVyIG9mIHRoaXMKKyAgICAgIGRldmljZSBhbmQgcmV0dXJuIGl0cyByZXN1bHQsIG9yIHJldHVybiAtRUlOVkFMIGlmIG5vdCBkZWZpbmVkCisKKyAgaW50IHBtX2dlbmVyaWNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gaWYgdGhlIGRldmljZSBoYXMgbm90IGJlZW4gc3VzcGVuZGVkIGF0IHJ1biB0aW1lLCBpbnZva2UgdGhlIC0+c3VzcGVuZCgpCisgICAgICBjYWxsYmFjayBwcm92aWRlZCBieSBpdHMgZHJpdmVyIGFuZCByZXR1cm4gaXRzIHJlc3VsdCwgb3IgcmV0dXJuIDAgaWYgbm90CisgICAgICBkZWZpbmVkCisKKyAgaW50IHBtX2dlbmVyaWNfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldik7CisgICAgLSBpbnZva2UgdGhlIC0+cmVzdW1lKCkgY2FsbGJhY2sgcHJvdmlkZWQgYnkgdGhlIGRyaXZlciBvZiB0aGlzIGRldmljZSBhbmQsCisgICAgICBpZiBzdWNjZXNzZnVsLCBjaGFuZ2UgdGhlIGRldmljZSdzIHJ1bnRpbWUgUE0gc3RhdHVzIHRvICdhY3RpdmUnCisKKyAgaW50IHBtX2dlbmVyaWNfZnJlZXplKHN0cnVjdCBkZXZpY2UgKmRldik7CisgICAgLSBpZiB0aGUgZGV2aWNlIGhhcyBub3QgYmVlbiBzdXNwZW5kZWQgYXQgcnVuIHRpbWUsIGludm9rZSB0aGUgLT5mcmVlemUoKQorICAgICAgY2FsbGJhY2sgcHJvdmlkZWQgYnkgaXRzIGRyaXZlciBhbmQgcmV0dXJuIGl0cyByZXN1bHQsIG9yIHJldHVybiAwIGlmIG5vdAorICAgICAgZGVmaW5lZAorCisgIGludCBwbV9nZW5lcmljX3RoYXcoc3RydWN0IGRldmljZSAqZGV2KTsKKyAgICAtIGlmIHRoZSBkZXZpY2UgaGFzIG5vdCBiZWVuIHN1c3BlbmRlZCBhdCBydW4gdGltZSwgaW52b2tlIHRoZSAtPnRoYXcoKQorICAgICAgY2FsbGJhY2sgcHJvdmlkZWQgYnkgaXRzIGRyaXZlciBhbmQgcmV0dXJuIGl0cyByZXN1bHQsIG9yIHJldHVybiAwIGlmIG5vdAorICAgICAgZGVmaW5lZAorCisgIGludCBwbV9nZW5lcmljX3Bvd2Vyb2ZmKHN0cnVjdCBkZXZpY2UgKmRldik7CisgICAgLSBpZiB0aGUgZGV2aWNlIGhhcyBub3QgYmVlbiBzdXNwZW5kZWQgYXQgcnVuIHRpbWUsIGludm9rZSB0aGUgLT5wb3dlcm9mZigpCisgICAgICBjYWxsYmFjayBwcm92aWRlZCBieSBpdHMgZHJpdmVyIGFuZCByZXR1cm4gaXRzIHJlc3VsdCwgb3IgcmV0dXJuIDAgaWYgbm90CisgICAgICBkZWZpbmVkCisKKyAgaW50IHBtX2dlbmVyaWNfcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYpOworICAgIC0gaW52b2tlIHRoZSAtPnJlc3RvcmUoKSBjYWxsYmFjayBwcm92aWRlZCBieSB0aGUgZHJpdmVyIG9mIHRoaXMgZGV2aWNlIGFuZCwKKyAgICAgIGlmIHN1Y2Nlc3NmdWwsIGNoYW5nZSB0aGUgZGV2aWNlJ3MgcnVudGltZSBQTSBzdGF0dXMgdG8gJ2FjdGl2ZScKKworVGhlc2UgZnVuY3Rpb25zIGNhbiBiZSBhc3NpZ25lZCB0byB0aGUgLT5ydW50aW1lX2lkbGUoKSwgLT5ydW50aW1lX3N1c3BlbmQoKSwKKy0+cnVudGltZV9yZXN1bWUoKSwgLT5zdXNwZW5kKCksIC0+cmVzdW1lKCksIC0+ZnJlZXplKCksIC0+dGhhdygpLCAtPnBvd2Vyb2ZmKCksCitvciAtPnJlc3RvcmUoKSBjYWxsYmFjayBwb2ludGVycyBpbiB0aGUgc3Vic3lzdGVtLWxldmVsIGRldl9wbV9vcHMgc3RydWN0dXJlcy4KKworSWYgYSBzdWJzeXN0ZW0gd2lzaGVzIHRvIHVzZSBhbGwgb2YgdGhlbSBhdCB0aGUgc2FtZSB0aW1lLCBpdCBjYW4gc2ltcGx5IGFzc2lnbgordGhlIEdFTkVSSUNfU1VCU1lTX1BNX09QUyBtYWNybywgZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L3BtLmgsIHRvIGl0cworZGV2X3BtX29wcyBzdHJ1Y3R1cmUgcG9pbnRlci4KKworRGV2aWNlIGRyaXZlcnMgdGhhdCB3aXNoIHRvIHVzZSB0aGUgc2FtZSBmdW5jdGlvbiBhcyBhIHN5c3RlbSBzdXNwZW5kLCBmcmVlemUsCitwb3dlcm9mZiBhbmQgcnVuLXRpbWUgc3VzcGVuZCBjYWxsYmFjaywgYW5kIHNpbWlsYXJseSBmb3Igc3lzdGVtIHJlc3VtZSwgdGhhdywKK3Jlc3RvcmUsIGFuZCBydW4tdGltZSByZXN1bWUsIGNhbiBhY2hpZXZlIHRoaXMgd2l0aCB0aGUgaGVscCBvZiB0aGUKK1VOSVZFUlNBTF9ERVZfUE1fT1BTIG1hY3JvIGRlZmluZWQgaW4gaW5jbHVkZS9saW51eC9wbS5oIChwb3NzaWJseSBzZXR0aW5nIGl0cworbGFzdCBhcmd1bWVudCB0byBOVUxMKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2Nhbi50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jYW4udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYTRmY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9jYW4udHh0CkBAIC0wLDAgKzEsNTMgQEAKK0NBTiBEZXZpY2UgVHJlZSBCaW5kaW5ncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyhjKSAyMDA2LTIwMDkgU2VjcmV0IExhYiBUZWNobm9sb2dpZXMgTHRkCitHcmFudCBMaWtlbHkgPGdyYW50Lmxpa2VseUBzZWNyZXRsYWIuY2E+CisKK2ZzbCxtcGM1MjAwLW1zY2FuIG5vZGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW4gYWRkaXRpb24gdG8gdGhlIHJlcXVpcmVkIGNvbXBhdGlibGUtLCByZWctIGFuZCBpbnRlcnJ1cHQtcHJvcGVydGllcywgeW91IGNhbgorYWxzbyBzcGVjaWZ5IHdoaWNoIGNsb2NrIHNvdXJjZSBzaGFsbCBiZSB1c2VkIGZvciB0aGUgY29udHJvbGxlcjoKKworLSBmc2wsbXNjYW4tY2xvY2stc291cmNlIDogYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgY2xvY2sgc291cmNlLiBWYWxpZCB2YWx1ZXMKKwkJCSAgIGFyZToJImlwIiBmb3IgaXAgYnVzIGNsb2NrCisJCQkJICJyZWYiIGZvciByZWZlcmVuY2UgY2xvY2sgKFhUQUwpCisJCQkgICAicmVmIiBpcyBkZWZhdWx0IGluIGNhc2UgdGhpcyBwcm9wZXJ0eSBpcyBub3QKKwkJCSAgIHByZXNlbnQuCisKK2ZzbCxtcGM1MTIxLW1zY2FuIG5vZGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW4gYWRkaXRpb24gdG8gdGhlIHJlcXVpcmVkIGNvbXBhdGlibGUtLCByZWctIGFuZCBpbnRlcnJ1cHQtcHJvcGVydGllcywgeW91IGNhbgorYWxzbyBzcGVjaWZ5IHdoaWNoIGNsb2NrIHNvdXJjZSBhbmQgZGl2aWRlciBzaGFsbCBiZSB1c2VkIGZvciB0aGUgY29udHJvbGxlcjoKKworLSBmc2wsbXNjYW4tY2xvY2stc291cmNlIDogYSBzdHJpbmcgZGVzY3JpYmluZyB0aGUgY2xvY2sgc291cmNlLiBWYWxpZCB2YWx1ZXMKKwkJCSAgIGFyZToJImlwIiBmb3IgaXAgYnVzIGNsb2NrCisJCQkJInJlZiIgZm9yIHJlZmVyZW5jZSBjbG9jaworCQkJCSJzeXMiIGZvciBzeXN0ZW0gY2xvY2sKKwkJCSAgIElmIHRoaXMgcHJvcGVydHkgaXMgbm90IHByZXNlbnQsIGFuIG9wdGltYWwgQ0FOCisJCQkgICBjbG9jayBzb3VyY2UgYW5kIGZyZXF1ZW5jeSBiYXNlZCBvbiB0aGUgc3lzdGVtCisJCQkgICBjbG9jayB3aWxsIGJlIHNlbGVjdGVkLiBJZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSwKKwkJCSAgIHRoZSByZWZlcmVuY2UgY2xvY2sgd2lsbCBiZSB1c2VkLgorCistIGZzbCxtc2Nhbi1jbG9jay1kaXZpZGVyOiBmb3IgdGhlIHJlZmVyZW5jZSBhbmQgc3lzdGVtIGNsb2NrLCBhbiBhZGRpdGlvbmFsCisJCQkgICBjbG9jayBkaXZpZGVyIGNhbiBiZSBzcGVjaWZpZWQuIEJ5IGRlZmF1bHQsIGEKKwkJCSAgIHZhbHVlIG9mIDEgaXMgdXNlZC4KKworTm90ZSB0aGF0IHRoZSBNUEM1MTIxIFJldi4gMSBwcm9jZXNzb3IgaXMgbm90IHN1cHBvcnRlZC4KKworRXhhbXBsZXM6CisJY2FuQDEzMDAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLW1zY2FuIjsKKwkJaW50ZXJydXB0cyA9IDwxMiAweDg+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJcmVnID0gPDB4MTMwMCAweDgwPjsKKwl9OworCisJY2FuQDEzODAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLW1zY2FuIjsKKwkJaW50ZXJydXB0cyA9IDwxMyAweDg+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJcmVnID0gPDB4MTM4MCAweDgwPjsKKwkJZnNsLG1zY2FuLWNsb2NrLXNvdXJjZSA9ICJyZWYiOworCQlmc2wsbXNjYW4tY2xvY2stZGl2aWRlciA9IDwzPjsKKwl9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZG1hLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2RtYS50eHQKaW5kZXggMDczMmNkZC4uMmE0YjRiYyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZG1hLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9kbWEudHh0CkBAIC00NCwyMSArNDQsMjkgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJcmVnID0gPDAgMHg4MD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCX07CiAJCWRtYS1jaGFubmVsQDgwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJcmVnID0gPDB4ODAgMHg4MD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCWludGVycnVwdHMgPSA8NzEgOD47CiAJCX07CiAJCWRtYS1jaGFubmVsQDEwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJfTsKIAkJZG1hLWNoYW5uZWxAMTgwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJcmVnID0gPDB4MTgwIDB4ODA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDcxIDg+OwogCQl9OwogCX07CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2kyYy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9pMmMudHh0CmluZGV4IGI2ZDJlMjEuLjUwZGEyMDMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2kyYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvaTJjLnR4dApAQCAtMiwxNSArMiwxNCBAQAogCiBSZXF1aXJlZCBwcm9wZXJ0aWVzIDoKIAotIC0gZGV2aWNlX3R5cGUgOiBTaG91bGQgYmUgImkyYyIKICAtIHJlZyA6IE9mZnNldCBhbmQgbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBzZXQgZm9yIHRoZSBkZXZpY2UKKyAtIGNvbXBhdGlibGUgOiBzaG91bGQgYmUgImZzbCxDSElQLWkyYyIgd2hlcmUgQ0hJUCBpcyB0aGUgbmFtZSBvZiBhCisgICBjb21wYXRpYmxlIHByb2Nlc3NvciwgZS5nLiBtcGM4MzEzLCBtcGM4NTQzLCBtcGM4NTQ0LCBtcGM1MTIxLAorICAgbXBjNTIwMCBvciBtcGM1MjAwYi4gRm9yIHRoZSBtcGM1MTIxLCBhbiBhZGRpdGlvbmFsIG5vZGUKKyAgICJmc2wsbXBjNTEyMS1pMmMtY3RybCIgaXMgcmVxdWlyZWQgYXMgc2hvd24gaW4gdGhlIGV4YW1wbGUgYmVsb3cuCiAKIFJlY29tbWVuZGVkIHByb3BlcnRpZXMgOgogCi0gLSBjb21wYXRpYmxlIDogY29tcGF0aWJpbGl0eSBsaXN0IHdpdGggMiBlbnRyaWVzLCB0aGUgZmlyc3Qgc2hvdWxkCi0gICBiZSAiZnNsLENISVAtaTJjIiB3aGVyZSBDSElQIGlzIHRoZSBuYW1lIG9mIGEgY29tcGF0aWJsZSBwcm9jZXNzb3IsCi0gICBlLmcuIG1wYzgzMTMsIG1wYzg1NDMsIG1wYzg1NDQsIG1wYzUyMDAgb3IgbXBjNTIwMGIuIFRoZSBzZWNvbmQgb25lCi0gICBzaG91bGQgYmUgImZzbC1pMmMiLgogIC0gaW50ZXJydXB0cyA6IDxhIGI+IHdoZXJlIGEgaXMgdGhlIGludGVycnVwdCBudW1iZXIgYW5kIGIgaXMgYQogICAgZmllbGQgdGhhdCByZXByZXNlbnRzIGFuIGVuY29kaW5nIG9mIHRoZSBzZW5zZSBhbmQgbGV2ZWwKICAgIGluZm9ybWF0aW9uIGZvciB0aGUgaW50ZXJydXB0LiAgVGhpcyBzaG91bGQgYmUgZW5jb2RlZCBiYXNlZCBvbgpAQCAtMjQsMjUgKzIzLDQwIEBACiAKIEV4YW1wbGVzIDoKIAorCS8qIE1QQzUxMjEgYmFzZWQgYm9hcmQgKi8KKwlpMmNAMTc0MCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1pMmMiLCAiZnNsLWkyYyI7CisJCXJlZyA9IDwweDE3NDAgMHgyMD47CisJCWludGVycnVwdHMgPSA8MTEgMHg4PjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwxMDAwMDA+OworCX07CisKKwlpMmNjb250cm9sQDE3NjAgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWkyYy1jdHJsIjsKKwkJcmVnID0gPDB4MTc2MCAweDg+OworCX07CisKKwkvKiBNUEM1MjAwQiBiYXNlZCBib2FyZCAqLwogCWkyY0AzZDAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDA+OwogCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKLQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJcmVnID0gPDB4M2QwMCAweDQwPjsKIAkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCWZzbCxwcmVzZXJ2ZS1jbG9ja2luZzsKIAl9OwogCisJLyogTVBDODU0NCBiYXNlIGJvYXJkICovCiAJaTJjQDMxMDAgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCWNlbGwtaW5kZXggPSA8MT47CiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDQtaTJjIiwgImZzbC1pMmMiOwogCQlyZWcgPSA8MHgzMTAwIDB4MTAwPjsKIAkJaW50ZXJydXB0cyA9IDw0MyAyPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDw0MDAwMDA+OwogCX07Ci0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL21wYzUyMDAudHh0IGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBjNTIwMC50eHQKaW5kZXggNWM2NjAyZC4uNGNjYjJjZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBjNTIwMC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvbXBjNTIwMC50eHQKQEAgLTE5NSwxMSArMTk1LDQgQEAKIAogZnNsLG1wYzUyMDAtbXNjYW4gbm9kZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1JbiBhZGRpdGlvbiB0byB0aGUgcmVxdWlyZWQgY29tcGF0aWJsZS0sIHJlZy0gYW5kIGludGVycnVwdC1wcm9wZXJpdGVzLCB5b3UgY2FuCi1hbHNvIHNwZWNpZnkgd2hpY2ggY2xvY2sgc291cmNlIHNoYWxsIGJlIHVzZWQgZm9yIHRoZSBjb250cm9sbGVyOgotCi0tIGZzbCxtc2Nhbi1jbG9jay1zb3VyY2UtIGEgc3RyaW5nIGRlc2NyaWJpbmcgdGhlIGNsb2NrIHNvdXJjZS4gVmFsaWQgdmFsdWVzCi0JCQkgIGFyZToJImlwIiBmb3IgaXAgYnVzIGNsb2NrCi0JCQkJInJlZiIgZm9yIHJlZmVyZW5jZSBjbG9jayAoWFRBTCkKLQkJCSAgInJlZiIgaXMgZGVmYXVsdCBpbiBjYXNlIHRoaXMgcHJvcGVydHkgaXMgbm90Ci0JCQkgIHByZXNlbnQuCitTZWUgZmlsZSBjYW4udHh0IGluIHRoaXMgZGlyZWN0b3J5LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zMzkwL2t2bS50eHQgYi9Eb2N1bWVudGF0aW9uL3MzOTAva3ZtLnR4dAppbmRleCA2ZjVjZWIwLi44NWYzMjgwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3MzOTAva3ZtLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3MzOTAva3ZtLnR4dApAQCAtMTAyLDcgKzEwMiw3IEBACiBzZWUgYWxzbzoJaW5jbHVkZS9saW51eC9rdm0uaAogVGhpcyBpb2N0bCBzdG9yZXMgdGhlIHN0YXRlIG9mIHRoZSBjcHUgYXQgdGhlIGd1ZXN0IHJlYWwgYWRkcmVzcyBnaXZlbiBhcwogYXJndW1lbnQsIHVubGVzcyBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMgZGVmaW5lZCBpbiBpbmNsdWRlL2xpbnV4L2t2bS5oCi1pcyBnaXZlbiBhcyBhcmd1ZW1lbnQ6CitpcyBnaXZlbiBhcyBhcmd1bWVudDoKIEtWTV9TMzkwX1NUT1JFX1NUQVRVU19OT0FERFIgLSB0aGUgQ1BVIHN0b3JlcyBpdHMgc3RhdHVzIHRvIHRoZSBzYXZlIGFyZWEgaW4KIGFic29sdXRlIGxvd2NvcmUgYXMgZGVmaW5lZCBieSB0aGUgcHJpbmNpcGxlcyBvZiBvcGVyYXRpb24KIEtWTV9TMzkwX1NUT1JFX1NUQVRVU19QUkVGSVhFRCAtIHRoZSBDUFUgc3RvcmVzIGl0cyBzdGF0dXMgdG8gdGhlIHNhdmUgYXJlYSBpbgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5scGZjIGIvRG9jdW1lbnRhdGlvbi9zY3NpL0NoYW5nZUxvZy5scGZjCmluZGV4IGZmMTlhNTIuLjJmZmMxMTQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2NzaS9DaGFuZ2VMb2cubHBmYworKysgYi9Eb2N1bWVudGF0aW9uL3Njc2kvQ2hhbmdlTG9nLmxwZmMKQEAgLTk4OSw4ICs5ODksOCBAQAogCSogUmVtb3ZlIHJlZHVuZGFudCBwb3J0X2NtcCAhPSAyIGNoZWNrIGluIGlmCiAJICAoIXBvcnRfY21wKSB7IC4uLi4gaWYgKHBvcnRfY21wICE9IDIpLi4uLiB9CiAJKiBDbG9jayBjaGFuZ2VzOiByZW1vdmVkIHN0cnVjdCBjbGtfZGF0YSBhbmQgdGltZXJMaXN0LgotCSogQ2xvY2sgY2hhbmdlczogc2VwZXJhdGUgbm9kZXZfdG1vIGFuZCBlbHNfcmV0cnlfZGVsYXkgaW50byAyCi0JICBzZXBlcmF0ZSB0aW1lcnMgYW5kIGNvbnZlcnQgdG8gMSBhcmd1bWVudCBjaGFuZ2VkCisJKiBDbG9jayBjaGFuZ2VzOiBzZXBhcmF0ZSBub2Rldl90bW8gYW5kIGVsc19yZXRyeV9kZWxheSBpbnRvIDIKKwkgIHNlcGFyYXRlIHRpbWVycyBhbmQgY29udmVydCB0byAxIGFyZ3VtZW50IGNoYW5nZWQKIAkgIExQRkNfTk9ERV9GQVJQX1BFTkRfdCB0byBzdHJ1Y3QgbHBmY19ub2RlX2ZhcnBfcGVuZCBjb252ZXJ0CiAJICBpcGZhcnBfdG1vIHRvIDEgYXJndW1lbnQgY29udmVydCB0YXJnZXQgc3RydWN0IHRtb2Z1bmMgYW5kCiAJICBydHBsdW5mdW5jIHRvIDEgYXJndW1lbnQgKiBjcl9jb3VudCwgY3JfZGVsYXkgYW5kCkBAIC0xNTE0LDcgKzE1MTQsNyBAQAogCSogUmVtb3ZlIHVudXNlZCBlbHhjbG9jayBkZWNsYXJhdGlvbiBpbiBlbHhfc2xpLmguCiAJKiBTaW5jZSBldmVyeXdoZXJlIElPQ0JfRU5UUlkgaXMgdXNlZCwgdGhlIHJldHVybiB2YWx1ZSBpcyBjYXN0LAogCSAgbW92ZSB0aGUgY2FzdCBpbnRvIHRoZSBtYWNyby4KLQkqIFNwbGl0IGlvY3RscyBvdXQgaW50byBzZXBlcmF0ZSBmaWxlcworCSogU3BsaXQgaW9jdGxzIG91dCBpbnRvIHNlcGFyYXRlIGZpbGVzCiAKIENoYW5nZXMgZnJvbSAyMDA0MDMyNiB0byAyMDA0MDQwMgogCkBAIC0xNTM0LDcgKzE1MzQsNyBAQAogCSogVW51c2VkIHZhcmlhYmxlIGNsZWFudXAKIAkqIFVzZSBMaW51eCBsaXN0IG1hY3JvcyBmb3IgRE1BQlVGX3QKIAkqIEJyZWFrIHVwIGlvY3RscyBpbnRvIDMgc2VjdGlvbnMsIGRmYywgdXRpbCwgaGJhYXBpCi0JICByZWFycmFuZ2VkIGNvZGUgc28gdGhpcyBjb3VsZCBiZSBlYXNpbHkgc2VwZXJhdGVkIGludG8gYQorCSAgcmVhcnJhbmdlZCBjb2RlIHNvIHRoaXMgY291bGQgYmUgZWFzaWx5IHNlcGFyYXRlZCBpbnRvIGEKIAkgIGRpZmZlcm5ldCBtb2R1bGUgbGF0ZXIgQWxsIDMgYXJlIGN1cnJlbnRseSB0dXJuZWQgb24gYnkKIAkgIGRlZmluZXMgaW4gbHBmY19pb2N0bC5jIExQRkNfREZDX0lPQ1RMLCBMUEZDX1VUSUxfSU9DVEwsCiAJICBMUEZDX0hCQUFQSV9JT0NUTApAQCAtMTU1MSw3ICsxNTUxLDcgQEAKIAkgIHN0YXJ0ZWQgYnkgbHBmY19vbmxpbmUoKS4gIGxwZmNfb2ZmbGluZSgpIG9ubHkgc3RvcHBlZAogCSAgZWxzX3RpbWVvdXQgcm91dGluZS4gIEl0IG5vdyBzdG9wcyBhbGwgdGltZW91dCByb3V0aW5lcwogCSAgYXNzb2NpYXRlZCB3aXRoIHRoYXQgaGJhLgotCSogUmVwbGFjZSBzZXBlcmF0ZSBuZXh0IGFuZCBwcmV2IHBvaW50ZXJzIGluIHN0cnVjdAorCSogUmVwbGFjZSBzZXBhcmF0ZSBuZXh0IGFuZCBwcmV2IHBvaW50ZXJzIGluIHN0cnVjdAogCSAgbHBmY19iaW5kbGlzdCB3aXRoIGxpc3RfaGVhZCB0eXBlLiAgSW4gZWx4SEJBX3QsIHJlcGxhY2UKIAkgIGZjX25scGJpbmRfc3RhcnQgYW5kIF9lbmQgd2l0aCBmY19ubHBiaW5kX2xpc3QgYW5kIHVzZQogCSAgbGlzdF9oZWFkIG1hY3JvcyB0byBhY2Nlc3MgaXQuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NlcmlhbC90dHkudHh0IGIvRG9jdW1lbnRhdGlvbi9zZXJpYWwvdHR5LnR4dAppbmRleCA1ZTUzNDlhLi43YzkwMDUwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NlcmlhbC90dHkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2VyaWFsL3R0eS50eHQKQEAgLTEwNSw2ICsxMDUsMTAgQEAKIAkJCWlzIHBlcm1pdHRlZCB0byBjYWxsIHRoZSBkcml2ZXIgd3JpdGUgbWV0aG9kIGZyb20KIAkJCXRoaXMgZnVuY3Rpb24uIEluIHN1Y2ggYSBzaXR1YXRpb24gZGVmZXIgaXQuCiAKK2RjZF9jaGFuZ2UoKQktCVJlcG9ydCB0byB0aGUgdHR5IGxpbmUgdGhlIGN1cnJlbnQgRENEIHBpbiBzdGF0dXMKKwkJCWNoYW5nZXMgYW5kIHRoZSByZWxhdGl2ZSB0aW1lc3RhbXAuIFRoZSB0aW1lc3RhbXAKKwkJCWNhbiBiZSBOVUxMLgorCiAKIERyaXZlciBBY2Nlc3MKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zb3VuZC9hbHNhL0FMU0EtQ29uZmlndXJhdGlvbi50eHQgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAppbmRleCAzM2RmODJlLi5iZmNiYmY4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3NvdW5kL2Fsc2EvQUxTQS1Db25maWd1cmF0aW9uLnR4dApAQCAtMTgxMiw3ICsxODEyLDcgQEAKICAgTW9kdWxlIHNuZC11YTEwMQogICAtLS0tLS0tLS0tLS0tLS0tCiAKLSAgICBNb2R1bGUgZm9yIHRoZSBFZGlyb2wgVUEtMTAxIGF1ZGlvL01JREkgaW50ZXJmYWNlLgorICAgIE1vZHVsZSBmb3IgdGhlIEVkaXJvbCBVQS0xMDEvVUEtMTAwMCBhdWRpby9NSURJIGludGVyZmFjZXMuCiAKICAgICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBtdWx0aXBsZSBkZXZpY2VzLCBhdXRvcHJvYmUgYW5kIGhvdHBsdWdnaW5nLgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3N5c2N0bC92bS50eHQgYi9Eb2N1bWVudGF0aW9uL3N5c2N0bC92bS50eHQKaW5kZXggZmM1NzkwZC4uNmM3ZDE4YyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9zeXNjdGwvdm0udHh0CisrKyBiL0RvY3VtZW50YXRpb24vc3lzY3RsL3ZtLnR4dApAQCAtNTczLDExICs1NzMsMTQgQEAKIG1heSBiZSBub3QgZmF0YWwgeWV0LgogCiBJZiB0aGlzIGlzIHNldCB0byAyLCB0aGUga2VybmVsIHBhbmljcyBjb21wdWxzb3JpbHkgZXZlbiBvbiB0aGUKLWFib3ZlLW1lbnRpb25lZC4KK2Fib3ZlLW1lbnRpb25lZC4gRXZlbiBvb20gaGFwcGVucyB1bmRlciBtZW1vcnkgY2dyb3VwLCB0aGUgd2hvbGUKK3N5c3RlbSBwYW5pY3MuCiAKIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAuCiAxIGFuZCAyIGFyZSBmb3IgZmFpbG92ZXIgb2YgY2x1c3RlcmluZy4gUGxlYXNlIHNlbGVjdCBlaXRoZXIKIGFjY29yZGluZyB0byB5b3VyIHBvbGljeSBvZiBmYWlsb3Zlci4KK3BhbmljX29uX29vbT0yK2tkdW1wIGdpdmVzIHlvdSB2ZXJ5IHN0cm9uZyB0b29sIHRvIGludmVzdGlnYXRlCit3aHkgb29tIGhhcHBlbnMuIFlvdSBjYW4gZ2V0IHNuYXBzaG90LgogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGltZXJzLzAwLUlOREVYIGIvRG9jdW1lbnRhdGlvbi90aW1lcnMvMDAtSU5ERVgKaW5kZXggMzk3ZGMzNS4uYTkyNDhkYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90aW1lcnMvMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi90aW1lcnMvMDAtSU5ERVgKQEAgLTQsNiArNCw4IEBACiAJLSBIaWdoIHJlc29sdXRpb24gdGltZXJzIGFuZCBkeW5hbWljIHRpY2tzIGRlc2lnbiBub3RlcwogaHBldC50eHQKIAktIEhpZ2ggUHJlY2lzaW9uIEV2ZW50IFRpbWVyIERyaXZlciBmb3IgTGludXgKK2hwZXRfZXhhbXBsZS5jCisJLSBzYW1wbGUgaHBldCB0aW1lciB0ZXN0IHByb2dyYW0KIGhydGltZXJzLnR4dAogCS0gc3Vic3lzdGVtIGZvciBoaWdoLXJlc29sdXRpb24ga2VybmVsIHRpbWVycwogdGltZXJfc3RhdHMudHh0CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RpbWVycy9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vdGltZXJzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NTYyNWYKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3RpbWVycy9NYWtlZmlsZQpAQCAtMCwwICsxLDggQEAKKyMga2J1aWxkIHRyaWNrIHRvIGF2b2lkIGxpbmtlciBlcnJvci4gQ2FuIGJlIG9taXR0ZWQgaWYgYSBtb2R1bGUgaXMgYnVpbHQuCitvYmotIDo9IGR1bW15Lm8KKworIyBMaXN0IG9mIHByb2dyYW1zIHRvIGJ1aWxkCitob3N0cHJvZ3MteSA6PSBocGV0X2V4YW1wbGUKKworIyBUZWxsIGtidWlsZCB0byBhbHdheXMgYnVpbGQgdGhlIHByb2dyYW1zCithbHdheXMgOj0gJChob3N0cHJvZ3MteSkKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGltZXJzL2hwZXQudHh0IGIvRG9jdW1lbnRhdGlvbi90aW1lcnMvaHBldC50eHQKaW5kZXggMTZkMjVlNi4uNzY3MzkyZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi90aW1lcnMvaHBldC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90aW1lcnMvaHBldC50eHQKQEAgLTI2LDI3NCArMjYsNSBAQAogYXJjaC94ODYva2VybmVsL2hwZXQuYy4KIAogVGhlIGRyaXZlciBwcm92aWRlcyBhIHVzZXJzcGFjZSBBUEkgd2hpY2ggcmVzZW1ibGVzIHRoZSBBUEkgZm91bmQgaW4gdGhlCi1SVEMgZHJpdmVyIGZyYW1ld29yay4gIEFuIGV4YW1wbGUgdXNlciBzcGFjZSBwcm9ncmFtIGlzIHByb3ZpZGVkIGJlbG93LgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxmY250bC5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPG1lbW9yeS5oPgotI2luY2x1ZGUgPG1hbGxvYy5oPgotI2luY2x1ZGUgPHRpbWUuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy93YWl0Lmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8ZmNudGwuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvaHBldC5oPgotCi0KLWV4dGVybiB2b2lkIGhwZXRfb3Blbl9jbG9zZShpbnQsIGNvbnN0IGNoYXIgKiopOwotZXh0ZXJuIHZvaWQgaHBldF9pbmZvKGludCwgY29uc3QgY2hhciAqKik7Ci1leHRlcm4gdm9pZCBocGV0X3BvbGwoaW50LCBjb25zdCBjaGFyICoqKTsKLWV4dGVybiB2b2lkIGhwZXRfZmFzeW5jKGludCwgY29uc3QgY2hhciAqKik7Ci1leHRlcm4gdm9pZCBocGV0X3JlYWQoaW50LCBjb25zdCBjaGFyICoqKTsKLQotI2luY2x1ZGUgPHN5cy9wb2xsLmg+Ci0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0KLXN0cnVjdCBocGV0X2NvbW1hbmQgewotCWNoYXIJCSpjb21tYW5kOwotCXZvaWQJCSgqZnVuYykoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiogYXJndik7Ci19IGhwZXRfY29tbWFuZFtdID0gewotCXsKLQkJIm9wZW4tY2xvc2UiLAotCQlocGV0X29wZW5fY2xvc2UKLQl9LAotCXsKLQkJImluZm8iLAotCQlocGV0X2luZm8KLQl9LAotCXsKLQkJInBvbGwiLAotCQlocGV0X3BvbGwKLQl9LAotCXsKLQkJImZhc3luYyIsCi0JCWhwZXRfZmFzeW5jCi0JfSwKLX07Ci0KLWludAotbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKiBhcmd2KQotewotCWludAlpOwotCi0JYXJnYy0tOwotCWFyZ3YrKzsKLQotCWlmICghYXJnYykgewotCQlmcHJpbnRmKHN0ZGVyciwgIi1ocGV0OiByZXF1aXJlcyBjb21tYW5kXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLQotCi0JZm9yIChpID0gMDsgaSA8IChzaXplb2YgKGhwZXRfY29tbWFuZCkgLyBzaXplb2YgKGhwZXRfY29tbWFuZFswXSkpOyBpKyspCi0JCWlmICghc3RyY21wKGFyZ3ZbMF0sIGhwZXRfY29tbWFuZFtpXS5jb21tYW5kKSkgewotCQkJYXJnYy0tOwotCQkJYXJndisrOwotCQkJZnByaW50ZihzdGRlcnIsICItaHBldDogZXhlY3V0aW5nICVzXG4iLAotCQkJCWhwZXRfY29tbWFuZFtpXS5jb21tYW5kKTsKLQkJCWhwZXRfY29tbWFuZFtpXS5mdW5jKGFyZ2MsIGFyZ3YpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQotCWZwcmludGYoc3RkZXJyLCAiZG9faHBldDogY29tbWFuZCAlcyBub3QgaW1wbGVtZW50ZWRcbiIsIGFyZ3ZbMF0pOwotCi0JcmV0dXJuIC0xOwotfQotCi12b2lkCi1ocGV0X29wZW5fY2xvc2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQotewotCWludAlmZDsKLQotCWlmIChhcmdjICE9IDEpIHsKLQkJZnByaW50ZihzdGRlcnIsICJocGV0X29wZW5fY2xvc2U6IGRldmljZS1uYW1lXG4iKTsKLQkJcmV0dXJuOwotCX0KLQotCWZkID0gb3Blbihhcmd2WzBdLCBPX1JET05MWSk7Ci0JaWYgKGZkIDwgMCkKLQkJZnByaW50ZihzdGRlcnIsICJocGV0X29wZW5fY2xvc2U6IG9wZW4gZmFpbGVkXG4iKTsKLQllbHNlCi0JCWNsb3NlKGZkKTsKLQotCXJldHVybjsKLX0KLQotdm9pZAotaHBldF9pbmZvKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKLXsKLX0KLQotdm9pZAotaHBldF9wb2xsKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKLXsKLQl1bnNpZ25lZCBsb25nCQlmcmVxOwotCWludAkJCWl0ZXJhdGlvbnMsIGksIGZkOwotCXN0cnVjdCBwb2xsZmQJCXBmZDsKLQlzdHJ1Y3QgaHBldF9pbmZvCWluZm87Ci0Jc3RydWN0IHRpbWV2YWwJCXN0diwgZXR2OwotCXN0cnVjdCB0aW1lem9uZQkJdHo7Ci0JbG9uZwkJCXVzZWM7Ci0KLQlpZiAoYXJnYyAhPSAzKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiBkZXZpY2UtbmFtZSBmcmVxIGl0ZXJhdGlvbnNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JZnJlcSA9IGF0b2koYXJndlsxXSk7Ci0JaXRlcmF0aW9ucyA9IGF0b2koYXJndlsyXSk7Ci0KLQlmZCA9IG9wZW4oYXJndlswXSwgT19SRE9OTFkpOwotCi0JaWYgKGZkIDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogb3BlbiBvZiAlcyBmYWlsZWRcbiIsIGFyZ3ZbMF0pOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGlvY3RsKGZkLCBIUEVUX0lSUUZSRVEsIGZyZXEpIDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogSFBFVF9JUlFGUkVRIGZhaWxlZFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChpb2N0bChmZCwgSFBFVF9JTkZPLCAmaW5mbykgPCAwKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiBmYWlsZWQgdG8gZ2V0IGluZm9cbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogaW5mby5oaV9mbGFncyAweCVseFxuIiwgaW5mby5oaV9mbGFncyk7Ci0KLQlpZiAoaW5mby5oaV9mbGFncyAmJiAoaW9jdGwoZmQsIEhQRVRfRVBJLCAwKSA8IDApKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiBIUEVUX0VQSSBmYWlsZWRcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoaW9jdGwoZmQsIEhQRVRfSUVfT04sIDApIDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbCwgSFBFVF9JRV9PTiBmYWlsZWRcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlwZmQuZmQgPSBmZDsKLQlwZmQuZXZlbnRzID0gUE9MTElOOwotCi0JZm9yIChpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgewotCQlwZmQucmV2ZW50cyA9IDA7Ci0JCWdldHRpbWVvZmRheSgmc3R2LCAmdHopOwotCQlpZiAocG9sbCgmcGZkLCAxLCAtMSkgPCAwKQotCQkJZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGw6IHBvbGwgZmFpbGVkXG4iKTsKLQkJZWxzZSB7Ci0JCQlsb25nIAlkYXRhOwotCi0JCQlnZXR0aW1lb2ZkYXkoJmV0diwgJnR6KTsKLQkJCXVzZWMgPSBzdHYudHZfc2VjICogMTAwMDAwMCArIHN0di50dl91c2VjOwotCQkJdXNlYyA9IChldHYudHZfc2VjICogMTAwMDAwMCArIGV0di50dl91c2VjKSAtIHVzZWM7Ci0KLQkJCWZwcmludGYoc3RkZXJyLAotCQkJCSJocGV0X3BvbGw6IGV4cGlyZWQgdGltZSA9IDB4JWx4XG4iLCB1c2VjKTsKLQotCQkJZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGw6IHJldmVudHMgPSAweCV4XG4iLAotCQkJCXBmZC5yZXZlbnRzKTsKLQotCQkJaWYgKHJlYWQoZmQsICZkYXRhLCBzaXplb2YoZGF0YSkpICE9IHNpemVvZihkYXRhKSkgewotCQkJCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiByZWFkIGZhaWxlZFxuIik7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGw6IGRhdGEgMHglbHhcbiIsCi0JCQkJCWRhdGEpOwotCQl9Ci0JfQotCi1vdXQ6Ci0JY2xvc2UoZmQpOwotCXJldHVybjsKLX0KLQotc3RhdGljIGludCBocGV0X3NpZ2lvX2NvdW50OwotCi1zdGF0aWMgdm9pZAotaHBldF9zaWdpbyhpbnQgdmFsKQotewotCWZwcmludGYoc3RkZXJyLCAiaHBldF9zaWdpbzogY2FsbGVkXG4iKTsKLQlocGV0X3NpZ2lvX2NvdW50Kys7Ci19Ci0KLXZvaWQKLWhwZXRfZmFzeW5jKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKLXsKLQl1bnNpZ25lZCBsb25nCQlmcmVxOwotCWludAkJCWl0ZXJhdGlvbnMsIGksIGZkLCB2YWx1ZTsKLQlzaWdfdAkJCW9sZHNpZzsKLQlzdHJ1Y3QgaHBldF9pbmZvCWluZm87Ci0KLQlocGV0X3NpZ2lvX2NvdW50ID0gMDsKLQlmZCA9IC0xOwotCi0JaWYgKChvbGRzaWcgPSBzaWduYWwoU0lHSU8sIGhwZXRfc2lnaW8pKSA9PSBTSUdfRVJSKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmM6IGZhaWxlZCB0byBzZXQgc2lnbmFsIGhhbmRsZXJcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGFyZ2MgIT0gMykgewotCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jOiBkZXZpY2UtbmFtZSBmcmVxIGl0ZXJhdGlvbnNcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlmZCA9IG9wZW4oYXJndlswXSwgT19SRE9OTFkpOwotCi0JaWYgKGZkIDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jOiBmYWlsZWQgdG8gb3BlbiAlc1xuIiwgYXJndlswXSk7Ci0JCXJldHVybjsKLQl9Ci0KLQotCWlmICgoZmNudGwoZmQsIEZfU0VUT1dOLCBnZXRwaWQoKSkgPT0gMSkgfHwKLQkJKCh2YWx1ZSA9IGZjbnRsKGZkLCBGX0dFVEZMKSkgPT0gMSkgfHwKLQkJKGZjbnRsKGZkLCBGX1NFVEZMLCB2YWx1ZSB8IE9fQVNZTkMpID09IDEpKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmM6IGZjbnRsIGZhaWxlZFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWZyZXEgPSBhdG9pKGFyZ3ZbMV0pOwotCWl0ZXJhdGlvbnMgPSBhdG9pKGFyZ3ZbMl0pOwotCi0JaWYgKGlvY3RsKGZkLCBIUEVUX0lSUUZSRVEsIGZyZXEpIDwgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jOiBIUEVUX0lSUUZSRVEgZmFpbGVkXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKGlvY3RsKGZkLCBIUEVUX0lORk8sICZpbmZvKSA8IDApIHsKLQkJZnByaW50ZihzdGRlcnIsICJocGV0X2Zhc3luYzogZmFpbGVkIHRvIGdldCBpbmZvXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZnByaW50ZihzdGRlcnIsICJocGV0X2Zhc3luYzogaW5mby5oaV9mbGFncyAweCVseFxuIiwgaW5mby5oaV9mbGFncyk7Ci0KLQlpZiAoaW5mby5oaV9mbGFncyAmJiAoaW9jdGwoZmQsIEhQRVRfRVBJLCAwKSA8IDApKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmM6IEhQRVRfRVBJIGZhaWxlZFxuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChpb2N0bChmZCwgSFBFVF9JRV9PTiwgMCkgPCAwKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmMsIEhQRVRfSUVfT04gZmFpbGVkXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgewotCQkodm9pZCkgcGF1c2UoKTsKLQkJZnByaW50ZihzdGRlcnIsICJocGV0X2Zhc3luYzogY291bnQgPSAlZFxuIiwgaHBldF9zaWdpb19jb3VudCk7Ci0JfQotCi1vdXQ6Ci0Jc2lnbmFsKFNJR0lPLCBvbGRzaWcpOwotCi0JaWYgKGZkID49IDApCi0JCWNsb3NlKGZkKTsKLQotCXJldHVybjsKLX0KK1JUQyBkcml2ZXIgZnJhbWV3b3JrLiAgQW4gZXhhbXBsZSB1c2VyIHNwYWNlIHByb2dyYW0gaXMgcHJvdmlkZWQgaW4KK2ZpbGU6RG9jdW1lbnRhdGlvbi90aW1lcnMvaHBldF9leGFtcGxlLmMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdGltZXJzL2hwZXRfZXhhbXBsZS5jIGIvRG9jdW1lbnRhdGlvbi90aW1lcnMvaHBldF9leGFtcGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjljZTJkOQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdGltZXJzL2hwZXRfZXhhbXBsZS5jCkBAIC0wLDAgKzEsMjY5IEBACisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPG1lbW9yeS5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaHBldC5oPgorCisKK2V4dGVybiB2b2lkIGhwZXRfb3Blbl9jbG9zZShpbnQsIGNvbnN0IGNoYXIgKiopOworZXh0ZXJuIHZvaWQgaHBldF9pbmZvKGludCwgY29uc3QgY2hhciAqKik7CitleHRlcm4gdm9pZCBocGV0X3BvbGwoaW50LCBjb25zdCBjaGFyICoqKTsKK2V4dGVybiB2b2lkIGhwZXRfZmFzeW5jKGludCwgY29uc3QgY2hhciAqKik7CitleHRlcm4gdm9pZCBocGV0X3JlYWQoaW50LCBjb25zdCBjaGFyICoqKTsKKworI2luY2x1ZGUgPHN5cy9wb2xsLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisKK3N0cnVjdCBocGV0X2NvbW1hbmQgeworCWNoYXIJCSpjb21tYW5kOworCXZvaWQJCSgqZnVuYykoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiogYXJndik7Cit9IGhwZXRfY29tbWFuZFtdID0geworCXsKKwkJIm9wZW4tY2xvc2UiLAorCQlocGV0X29wZW5fY2xvc2UKKwl9LAorCXsKKwkJImluZm8iLAorCQlocGV0X2luZm8KKwl9LAorCXsKKwkJInBvbGwiLAorCQlocGV0X3BvbGwKKwl9LAorCXsKKwkJImZhc3luYyIsCisJCWhwZXRfZmFzeW5jCisJfSwKK307CisKK2ludAorbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqKiBhcmd2KQoreworCWludAlpOworCisJYXJnYy0tOworCWFyZ3YrKzsKKworCWlmICghYXJnYykgeworCQlmcHJpbnRmKHN0ZGVyciwgIi1ocGV0OiByZXF1aXJlcyBjb21tYW5kXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCisJZm9yIChpID0gMDsgaSA8IChzaXplb2YgKGhwZXRfY29tbWFuZCkgLyBzaXplb2YgKGhwZXRfY29tbWFuZFswXSkpOyBpKyspCisJCWlmICghc3RyY21wKGFyZ3ZbMF0sIGhwZXRfY29tbWFuZFtpXS5jb21tYW5kKSkgeworCQkJYXJnYy0tOworCQkJYXJndisrOworCQkJZnByaW50ZihzdGRlcnIsICItaHBldDogZXhlY3V0aW5nICVzXG4iLAorCQkJCWhwZXRfY29tbWFuZFtpXS5jb21tYW5kKTsKKwkJCWhwZXRfY29tbWFuZFtpXS5mdW5jKGFyZ2MsIGFyZ3YpOworCQkJcmV0dXJuIDA7CisJCX0KKworCWZwcmludGYoc3RkZXJyLCAiZG9faHBldDogY29tbWFuZCAlcyBub3QgaW1wbGVtZW50ZWRcbiIsIGFyZ3ZbMF0pOworCisJcmV0dXJuIC0xOworfQorCit2b2lkCitocGV0X29wZW5fY2xvc2UoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2KQoreworCWludAlmZDsKKworCWlmIChhcmdjICE9IDEpIHsKKwkJZnByaW50ZihzdGRlcnIsICJocGV0X29wZW5fY2xvc2U6IGRldmljZS1uYW1lXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWZkID0gb3Blbihhcmd2WzBdLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZnByaW50ZihzdGRlcnIsICJocGV0X29wZW5fY2xvc2U6IG9wZW4gZmFpbGVkXG4iKTsKKwllbHNlCisJCWNsb3NlKGZkKTsKKworCXJldHVybjsKK30KKwordm9pZAoraHBldF9pbmZvKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKK30KKwordm9pZAoraHBldF9wb2xsKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBsb25nCQlmcmVxOworCWludAkJCWl0ZXJhdGlvbnMsIGksIGZkOworCXN0cnVjdCBwb2xsZmQJCXBmZDsKKwlzdHJ1Y3QgaHBldF9pbmZvCWluZm87CisJc3RydWN0IHRpbWV2YWwJCXN0diwgZXR2OworCXN0cnVjdCB0aW1lem9uZQkJdHo7CisJbG9uZwkJCXVzZWM7CisKKwlpZiAoYXJnYyAhPSAzKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiBkZXZpY2UtbmFtZSBmcmVxIGl0ZXJhdGlvbnNcbiIpOworCQlyZXR1cm47CisJfQorCisJZnJlcSA9IGF0b2koYXJndlsxXSk7CisJaXRlcmF0aW9ucyA9IGF0b2koYXJndlsyXSk7CisKKwlmZCA9IG9wZW4oYXJndlswXSwgT19SRE9OTFkpOworCisJaWYgKGZkIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogb3BlbiBvZiAlcyBmYWlsZWRcbiIsIGFyZ3ZbMF0pOworCQlyZXR1cm47CisJfQorCisJaWYgKGlvY3RsKGZkLCBIUEVUX0lSUUZSRVEsIGZyZXEpIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogSFBFVF9JUlFGUkVRIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChpb2N0bChmZCwgSFBFVF9JTkZPLCAmaW5mbykgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiBmYWlsZWQgdG8gZ2V0IGluZm9cbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbDogaW5mby5oaV9mbGFncyAweCVseFxuIiwgaW5mby5oaV9mbGFncyk7CisKKwlpZiAoaW5mby5oaV9mbGFncyAmJiAoaW9jdGwoZmQsIEhQRVRfRVBJLCAwKSA8IDApKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiBIUEVUX0VQSSBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoaW9jdGwoZmQsIEhQRVRfSUVfT04sIDApIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfcG9sbCwgSFBFVF9JRV9PTiBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlwZmQuZmQgPSBmZDsKKwlwZmQuZXZlbnRzID0gUE9MTElOOworCisJZm9yIChpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgeworCQlwZmQucmV2ZW50cyA9IDA7CisJCWdldHRpbWVvZmRheSgmc3R2LCAmdHopOworCQlpZiAocG9sbCgmcGZkLCAxLCAtMSkgPCAwKQorCQkJZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGw6IHBvbGwgZmFpbGVkXG4iKTsKKwkJZWxzZSB7CisJCQlsb25nIAlkYXRhOworCisJCQlnZXR0aW1lb2ZkYXkoJmV0diwgJnR6KTsKKwkJCXVzZWMgPSBzdHYudHZfc2VjICogMTAwMDAwMCArIHN0di50dl91c2VjOworCQkJdXNlYyA9IChldHYudHZfc2VjICogMTAwMDAwMCArIGV0di50dl91c2VjKSAtIHVzZWM7CisKKwkJCWZwcmludGYoc3RkZXJyLAorCQkJCSJocGV0X3BvbGw6IGV4cGlyZWQgdGltZSA9IDB4JWx4XG4iLCB1c2VjKTsKKworCQkJZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGw6IHJldmVudHMgPSAweCV4XG4iLAorCQkJCXBmZC5yZXZlbnRzKTsKKworCQkJaWYgKHJlYWQoZmQsICZkYXRhLCBzaXplb2YoZGF0YSkpICE9IHNpemVvZihkYXRhKSkgeworCQkJCWZwcmludGYoc3RkZXJyLCAiaHBldF9wb2xsOiByZWFkIGZhaWxlZFxuIik7CisJCQl9CisJCQllbHNlCisJCQkJZnByaW50ZihzdGRlcnIsICJocGV0X3BvbGw6IGRhdGEgMHglbHhcbiIsCisJCQkJCWRhdGEpOworCQl9CisJfQorCitvdXQ6CisJY2xvc2UoZmQpOworCXJldHVybjsKK30KKworc3RhdGljIGludCBocGV0X3NpZ2lvX2NvdW50OworCitzdGF0aWMgdm9pZAoraHBldF9zaWdpbyhpbnQgdmFsKQoreworCWZwcmludGYoc3RkZXJyLCAiaHBldF9zaWdpbzogY2FsbGVkXG4iKTsKKwlocGV0X3NpZ2lvX2NvdW50Kys7Cit9CisKK3ZvaWQKK2hwZXRfZmFzeW5jKGludCBhcmdjLCBjb25zdCBjaGFyICoqYXJndikKK3sKKwl1bnNpZ25lZCBsb25nCQlmcmVxOworCWludAkJCWl0ZXJhdGlvbnMsIGksIGZkLCB2YWx1ZTsKKwlzaWdfdAkJCW9sZHNpZzsKKwlzdHJ1Y3QgaHBldF9pbmZvCWluZm87CisKKwlocGV0X3NpZ2lvX2NvdW50ID0gMDsKKwlmZCA9IC0xOworCisJaWYgKChvbGRzaWcgPSBzaWduYWwoU0lHSU8sIGhwZXRfc2lnaW8pKSA9PSBTSUdfRVJSKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmM6IGZhaWxlZCB0byBzZXQgc2lnbmFsIGhhbmRsZXJcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKGFyZ2MgIT0gMykgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jOiBkZXZpY2UtbmFtZSBmcmVxIGl0ZXJhdGlvbnNcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlmZCA9IG9wZW4oYXJndlswXSwgT19SRE9OTFkpOworCisJaWYgKGZkIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jOiBmYWlsZWQgdG8gb3BlbiAlc1xuIiwgYXJndlswXSk7CisJCXJldHVybjsKKwl9CisKKworCWlmICgoZmNudGwoZmQsIEZfU0VUT1dOLCBnZXRwaWQoKSkgPT0gMSkgfHwKKwkJKCh2YWx1ZSA9IGZjbnRsKGZkLCBGX0dFVEZMKSkgPT0gMSkgfHwKKwkJKGZjbnRsKGZkLCBGX1NFVEZMLCB2YWx1ZSB8IE9fQVNZTkMpID09IDEpKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmM6IGZjbnRsIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWZyZXEgPSBhdG9pKGFyZ3ZbMV0pOworCWl0ZXJhdGlvbnMgPSBhdG9pKGFyZ3ZbMl0pOworCisJaWYgKGlvY3RsKGZkLCBIUEVUX0lSUUZSRVEsIGZyZXEpIDwgMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgImhwZXRfZmFzeW5jOiBIUEVUX0lSUUZSRVEgZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGlvY3RsKGZkLCBIUEVUX0lORk8sICZpbmZvKSA8IDApIHsKKwkJZnByaW50ZihzdGRlcnIsICJocGV0X2Zhc3luYzogZmFpbGVkIHRvIGdldCBpbmZvXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJZnByaW50ZihzdGRlcnIsICJocGV0X2Zhc3luYzogaW5mby5oaV9mbGFncyAweCVseFxuIiwgaW5mby5oaV9mbGFncyk7CisKKwlpZiAoaW5mby5oaV9mbGFncyAmJiAoaW9jdGwoZmQsIEhQRVRfRVBJLCAwKSA8IDApKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmM6IEhQRVRfRVBJIGZhaWxlZFxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChpb2N0bChmZCwgSFBFVF9JRV9PTiwgMCkgPCAwKSB7CisJCWZwcmludGYoc3RkZXJyLCAiaHBldF9mYXN5bmMsIEhQRVRfSUVfT04gZmFpbGVkXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGl0ZXJhdGlvbnM7IGkrKykgeworCQkodm9pZCkgcGF1c2UoKTsKKwkJZnByaW50ZihzdGRlcnIsICJocGV0X2Zhc3luYzogY291bnQgPSAlZFxuIiwgaHBldF9zaWdpb19jb3VudCk7CisJfQorCitvdXQ6CisJc2lnbmFsKFNJR0lPLCBvbGRzaWcpOworCisJaWYgKGZkID49IDApCisJCWNsb3NlKGZkKTsKKworCXJldHVybjsKK30KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dCBiL0RvY3VtZW50YXRpb24vdHJhY2UvZnRyYWNlLnR4dAppbmRleCBiYWIzMDQwLi4wMzQ4NWJmIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3RyYWNlL2Z0cmFjZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi90cmFjZS9mdHJhY2UudHh0CkBAIC0xNTg4LDcgKzE1ODgsNyBAQAogCiBXaGVuIHRyYWNpbmcgaXMgZW5hYmxlZCwga3N0b3BfbWFjaGluZSBpcyBjYWxsZWQgdG8gcHJldmVudAogcmFjZXMgd2l0aCB0aGUgQ1BVUyBleGVjdXRpbmcgY29kZSBiZWluZyBtb2RpZmllZCAod2hpY2ggY2FuCi1jYXVzZSB0aGUgQ1BVIHRvIGRvIHVuZGVzaXJlYWJsZSB0aGluZ3MpLCBhbmQgdGhlIG5vcHMgYXJlCitjYXVzZSB0aGUgQ1BVIHRvIGRvIHVuZGVzaXJhYmxlIHRoaW5ncyksIGFuZCB0aGUgbm9wcyBhcmUKIHBhdGNoZWQgYmFjayB0byBjYWxscy4gQnV0IHRoaXMgdGltZSwgdGhleSBkbyBub3QgY2FsbCBtY291bnQKICh3aGljaCBpcyBqdXN0IGEgZnVuY3Rpb24gc3R1YikuIFRoZXkgbm93IGNhbGwgaW50byB0aGUgZnRyYWNlCiBpbmZyYXN0cnVjdHVyZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL2Vycm9yLWNvZGVzLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL2Vycm9yLWNvZGVzLnR4dAppbmRleCA5Y2Y4M2U4Li5kODM3MDNlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi9lcnJvci1jb2Rlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvZXJyb3ItY29kZXMudHh0CkBAIC00MSw4ICs0MSw4IEBACiAKIC1FRkJJRwkJSG9zdCBjb250cm9sbGVyIGRyaXZlciBjYW4ndCBzY2hlZHVsZSB0aGF0IG1hbnkgSVNPIGZyYW1lcy4KIAotLUVQSVBFCQlTcGVjaWZpZWQgZW5kcG9pbnQgaXMgc3RhbGxlZC4gIEZvciBub24tY29udHJvbCBlbmRwb2ludHMsCi0JCXJlc2V0IHRoaXMgc3RhdHVzIHdpdGggdXNiX2NsZWFyX2hhbHQoKS4KKy1FUElQRQkJVGhlIHBpcGUgdHlwZSBzcGVjaWZpZWQgaW4gdGhlIFVSQiBkb2Vzbid0IG1hdGNoIHRoZQorCQllbmRwb2ludCdzIGFjdHVhbCB0eXBlLgogCiAtRU1TR1NJWkUJKGEpIGVuZHBvaW50IG1heHBhY2tldCBzaXplIGlzIHplcm87IGl0IGlzIG5vdCB1c2FibGUKIAkJICAgIGluIHRoZSBjdXJyZW50IGludGVyZmFjZSBhbHRzZXR0aW5nLgpAQCAtNjAsNiArNjAsOCBAQAogCiAtRUhPU1RVTlJFQUNICVVSQiB3YXMgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgZGV2aWNlIGlzIHN1c3BlbmRlZC4KIAorLUVOT0VYRUMJQSBjb250cm9sIFVSQiBkb2Vzbid0IGNvbnRhaW4gYSBTZXR1cCBwYWNrZXQuCisKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgICAgICAgRXJyb3IgY29kZXMgcmV0dXJuZWQgYnkgaW4gdXJiLT5zdGF0dXMgICAgICAgICAgICAgICAqCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi9wb3dlci1tYW5hZ2VtZW50LnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3Bvd2VyLW1hbmFnZW1lbnQudHh0CmluZGV4IDNiZjY4MTguLjI3OTBhZDQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL3Bvd2VyLW1hbmFnZW1lbnQudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3Bvd2VyLW1hbmFnZW1lbnQudHh0CkBAIC0yLDcgKzIsNyBAQAogCiAJCSBBbGFuIFN0ZXJuIDxzdGVybkByb3dsYW5kLmhhcnZhcmQuZWR1PgogCi0JCQkgICAgTm92ZW1iZXIgMTAsIDIwMDkKKwkJCSAgICBEZWNlbWJlciAxMSwgMjAwOQogCiAKIApAQCAtMjksOSArMjksOSBAQAogaW5mb3JtYXRpb24gYWJvdXQgc3lzdGVtIFBNKS4KIAogTm90ZTogRHluYW1pYyBQTSBzdXBwb3J0IGZvciBVU0IgaXMgcHJlc2VudCBvbmx5IGlmIHRoZSBrZXJuZWwgd2FzCi1idWlsdCB3aXRoIENPTkZJR19VU0JfU1VTUEVORCBlbmFibGVkLiAgU3lzdGVtIFBNIHN1cHBvcnQgaXMgcHJlc2VudAotb25seSBpZiB0aGUga2VybmVsIHdhcyBidWlsdCB3aXRoIENPTkZJR19TVVNQRU5EIG9yIENPTkZJR19ISUJFUk5BVElPTgotZW5hYmxlZC4KK2J1aWx0IHdpdGggQ09ORklHX1VTQl9TVVNQRU5EIGVuYWJsZWQgKHdoaWNoIGRlcGVuZHMgb24KK0NPTkZJR19QTV9SVU5USU1FKS4gIFN5c3RlbSBQTSBzdXBwb3J0IGlzIHByZXNlbnQgb25seSBpZiB0aGUga2VybmVsCit3YXMgYnVpbHQgd2l0aCBDT05GSUdfU1VTUEVORCBvciBDT05GSUdfSElCRVJOQVRJT04gZW5hYmxlZC4KIAogCiAJV2hhdCBpcyBSZW1vdGUgV2FrZXVwPwpAQCAtMjI5LDYgKzIyOSwxMSBAQAogYWxzbyBjaGFuZ2UgdGhlIGlkbGUtZGVsYXkgdGltZTsgMiBzZWNvbmRzIGlzIG5vdCB0aGUgYmVzdCBjaG9pY2UgZm9yCiBldmVyeSBkZXZpY2UuCiAKK0lmIGEgZHJpdmVyIGtub3dzIHRoYXQgaXRzIGRldmljZSBoYXMgcHJvcGVyIHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQsCitpdCBjYW4gZW5hYmxlIGF1dG9zdXNwZW5kIGFsbCBieSBpdHNlbGYuICBGb3IgZXhhbXBsZSwgdGhlIHZpZGVvCitkcml2ZXIgZm9yIGEgbGFwdG9wJ3Mgd2ViY2FtIG1pZ2h0IGRvIHRoaXMsIHNpbmNlIHRoZXNlIGRldmljZXMgYXJlCityYXJlbHkgdXNlZCBhbmQgc28gc2hvdWxkIG5vcm1hbGx5IGJlIGF1dG9zdXNwZW5kZWQuCisKIFNvbWV0aW1lcyBpdCB0dXJucyBvdXQgdGhhdCBldmVuIHdoZW4gYSBkZXZpY2UgZG9lcyB3b3JrIG9rYXkgd2l0aAogYXV0b3N1c3BlbmQgdGhlcmUgYXJlIHN0aWxsIHByb2JsZW1zLiAgRm9yIGV4YW1wbGUsIHRoZXJlIGFyZQogZXhwZXJpbWVudGFsIHBhdGNoZXMgYWRkaW5nIGF1dG9zdXNwZW5kIHN1cHBvcnQgdG8gdGhlIHVzYmhpZCBkcml2ZXIsCkBAIC0zMjEsNjkgKzMyNiw4MSBAQAogCXZvaWQgdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX25vX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CiAJdm9pZCB1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Vfbm9fc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CiAKLVRoZSBmdW5jdGlvbnMgd29yayBieSBtYWludGFpbmluZyBhIGNvdW50ZXIgaW4gdGhlIHVzYl9pbnRlcmZhY2UKLXN0cnVjdHVyZS4gIFdoZW4gaW50Zi0+cG1fdXNhZ2VfY291bnQgaXMgPiAwIHRoZW4gdGhlIGludGVyZmFjZSBpcwotZGVlbWVkIHRvIGJlIGJ1c3ksIGFuZCB0aGUga2VybmVsIHdpbGwgbm90IGF1dG9zdXNwZW5kIHRoZSBpbnRlcmZhY2UncwotZGV2aWNlLiAgV2hlbiBpbnRmLT5wbV91c2FnZV9jb3VudCBpcyA8PSAwIHRoZW4gdGhlIGludGVyZmFjZSBpcwotY29uc2lkZXJlZCB0byBiZSBpZGxlLCBhbmQgdGhlIGtlcm5lbCBtYXkgYXV0b3N1c3BlbmQgdGhlIGRldmljZS4KK1RoZSBmdW5jdGlvbnMgd29yayBieSBtYWludGFpbmluZyBhIHVzYWdlIGNvdW50ZXIgaW4gdGhlCit1c2JfaW50ZXJmYWNlJ3MgZW1iZWRkZWQgZGV2aWNlIHN0cnVjdHVyZS4gIFdoZW4gdGhlIGNvdW50ZXIgaXMgPiAwCit0aGVuIHRoZSBpbnRlcmZhY2UgaXMgZGVlbWVkIHRvIGJlIGJ1c3ksIGFuZCB0aGUga2VybmVsIHdpbGwgbm90CithdXRvc3VzcGVuZCB0aGUgaW50ZXJmYWNlJ3MgZGV2aWNlLiAgV2hlbiB0aGUgdXNhZ2UgY291bnRlciBpcyA9IDAKK3RoZW4gdGhlIGludGVyZmFjZSBpcyBjb25zaWRlcmVkIHRvIGJlIGlkbGUsIGFuZCB0aGUga2VybmVsIG1heQorYXV0b3N1c3BlbmQgdGhlIGRldmljZS4KIAotKFRoZXJlIGlzIGEgc2ltaWxhciBwbV91c2FnZV9jb3VudCBmaWVsZCBpbiBzdHJ1Y3QgdXNiX2RldmljZSwKKyhUaGVyZSBpcyBhIHNpbWlsYXIgdXNhZ2UgY291bnRlciBmaWVsZCBpbiBzdHJ1Y3QgdXNiX2RldmljZSwKIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlIGl0c2VsZiByYXRoZXIgdGhhbiBhbnkgb2YgaXRzIGludGVyZmFjZXMuCi1UaGlzIGZpZWxkIGlzIHVzZWQgb25seSBieSB0aGUgVVNCIGNvcmUuKQorVGhpcyBjb3VudGVyIGlzIHVzZWQgb25seSBieSB0aGUgVVNCIGNvcmUuKQogCi1Ecml2ZXJzIG11c3Qgbm90IG1vZGlmeSBpbnRmLT5wbV91c2FnZV9jb3VudCBkaXJlY3RseTsgaXRzIHZhbHVlCi1zaG91bGQgYmUgY2hhbmdlZCBvbmx5IGJlIHVzaW5nIHRoZSBmdW5jdGlvbnMgbGlzdGVkIGFib3ZlLiAgRHJpdmVycwotYXJlIHJlc3BvbnNpYmxlIGZvciBpbnN1cmluZyB0aGF0IHRoZSBvdmVyYWxsIGNoYW5nZSB0byBwbV91c2FnZV9jb3VudAotZHVyaW5nIHRoZWlyIGxpZmV0aW1lIGJhbGFuY2VzIG91dCB0byAwIChpdCBtYXkgYmUgbmVjZXNzYXJ5IGZvciB0aGUKLWRpc2Nvbm5lY3QgbWV0aG9kIHRvIGNhbGwgdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKCkgb25lIG9yIG1vcmUgdGltZXMKLXRvIGZ1bGZpbGwgdGhpcyByZXF1aXJlbWVudCkuICBUaGUgZmlyc3QgdHdvIHJvdXRpbmVzIHVzZSB0aGUgUE0gbXV0ZXgKLWluIHN0cnVjdCB1c2JfZGV2aWNlIGZvciBtdXR1YWwgZXhjbHVzaW9uOyBkcml2ZXJzIHVzaW5nIHRoZSBhc3luYwotcm91dGluZXMgYXJlIHJlc3BvbnNpYmxlIGZvciB0aGVpciBvd24gc3luY2hyb25pemF0aW9uIGFuZCBtdXR1YWwKLWV4Y2x1c2lvbi4KK0RyaXZlcnMgbmVlZCBub3QgYmUgY29uY2VybmVkIGFib3V0IGJhbGFuY2luZyBjaGFuZ2VzIHRvIHRoZSB1c2FnZQorY291bnRlcjsgdGhlIFVTQiBjb3JlIHdpbGwgdW5kbyBhbnkgcmVtYWluaW5nICJnZXQicyB3aGVuIGEgZHJpdmVyCitpcyB1bmJvdW5kIGZyb20gaXRzIGludGVyZmFjZS4gIEFzIGEgY29yb2xsYXJ5LCBkcml2ZXJzIG11c3Qgbm90IGNhbGwKK2FueSBvZiB0aGUgdXNiX2F1dG9wbV8qIGZ1bmN0aW9ucyBhZnRlciB0aGVpciBkaWNvbm5lY3QoKSByb3V0aW5lIGhhcworcmV0dXJuZWQuCiAKLQl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoKSBpbmNyZW1lbnRzIHBtX3VzYWdlX2NvdW50IGFuZAotCWF0dGVtcHRzIGFuIGF1dG9yZXN1bWUgaWYgdGhlIG5ldyB2YWx1ZSBpcyA+IDAgYW5kIHRoZQotCWRldmljZSBpcyBzdXNwZW5kZWQuCitEcml2ZXJzIHVzaW5nIHRoZSBhc3luYyByb3V0aW5lcyBhcmUgcmVzcG9uc2libGUgZm9yIHRoZWlyIG93bgorc3luY2hyb25pemF0aW9uIGFuZCBtdXR1YWwgZXhjbHVzaW9uLgogCi0JdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKCkgZGVjcmVtZW50cyBwbV91c2FnZV9jb3VudCBhbmQKLQlhdHRlbXB0cyBhbiBhdXRvc3VzcGVuZCBpZiB0aGUgbmV3IHZhbHVlIGlzIDw9IDAgYW5kIHRoZQotCWRldmljZSBpc24ndCBzdXNwZW5kZWQuCisJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKCkgaW5jcmVtZW50cyB0aGUgdXNhZ2UgY291bnRlciBhbmQKKwlkb2VzIGFuIGF1dG9yZXN1bWUgaWYgdGhlIGRldmljZSBpcyBzdXNwZW5kZWQuICBJZiB0aGUKKwlhdXRvcmVzdW1lIGZhaWxzLCB0aGUgY291bnRlciBpcyBkZWNyZW1lbnRlZCBiYWNrLgorCisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKCkgZGVjcmVtZW50cyB0aGUgdXNhZ2UgY291bnRlciBhbmQKKwlhdHRlbXB0cyBhbiBhdXRvc3VzcGVuZCBpZiB0aGUgbmV3IHZhbHVlIGlzID0gMC4KIAogCXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZV9hc3luYygpIGFuZAogCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9hc3luYygpIGRvIGFsbW9zdCB0aGUgc2FtZSB0aGluZ3MgYXMKLQl0aGVpciBub24tYXN5bmMgY291bnRlcnBhcnRzLiAgVGhlIGRpZmZlcmVuY2VzIGFyZTogdGhleSBkbwotCW5vdCBhY3F1aXJlIHRoZSBQTSBtdXRleCwgYW5kIHRoZXkgdXNlIGEgd29ya3F1ZXVlIHRvIGRvIHRoZWlyCisJdGhlaXIgbm9uLWFzeW5jIGNvdW50ZXJwYXJ0cy4gIFRoZSBiaWcgZGlmZmVyZW5jZSBpcyB0aGF0IHRoZXkKKwl1c2UgYSB3b3JrcXVldWUgdG8gZG8gdGhlIHJlc3VtZSBvciBzdXNwZW5kIHBhcnQgb2YgdGhlaXIKIAlqb2JzLiAgQXMgYSByZXN1bHQgdGhleSBjYW4gYmUgY2FsbGVkIGluIGFuIGF0b21pYyBjb250ZXh0LAogCXN1Y2ggYXMgYW4gVVJCJ3MgY29tcGxldGlvbiBoYW5kbGVyLCBidXQgd2hlbiB0aGV5IHJldHVybiB0aGUKLQlkZXZpY2Ugd2lsbCBub3QgZ2VuZXJhbGx5IG5vdCB5ZXQgYmUgaW4gdGhlIGRlc2lyZWQgc3RhdGUuCisJZGV2aWNlIHdpbGwgZ2VuZXJhbGx5IG5vdCB5ZXQgYmUgaW4gdGhlIGRlc2lyZWQgc3RhdGUuCiAKIAl1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2Vfbm9fcmVzdW1lKCkgYW5kCiAJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlX25vX3N1c3BlbmQoKSBtZXJlbHkgaW5jcmVtZW50IG9yCi0JZGVjcmVtZW50IHRoZSBwbV91c2FnZV9jb3VudCB2YWx1ZTsgdGhleSBkbyBub3QgYXR0ZW1wdCB0bwotCWNhcnJ5IG91dCBhbiBhdXRvcmVzdW1lIG9yIGFuIGF1dG9zdXNwZW5kLiAgSGVuY2UgdGhleSBjYW4gYmUKLQljYWxsZWQgaW4gYW4gYXRvbWljIGNvbnRleHQuCisJZGVjcmVtZW50IHRoZSB1c2FnZSBjb3VudGVyOyB0aGV5IGRvIG5vdCBhdHRlbXB0IHRvIGNhcnJ5IG91dAorCWFuIGF1dG9yZXN1bWUgb3IgYW4gYXV0b3N1c3BlbmQuICBIZW5jZSB0aGV5IGNhbiBiZSBjYWxsZWQgaW4KKwlhbiBhdG9taWMgY29udGV4dC4KIAotVGhlIGNvbnZlbnRpb25hbCB1c2FnZSBwYXR0ZXJuIGlzIHRoYXQgYSBkcml2ZXIgY2FsbHMKK1RoZSBzaW1wbGVzdCB1c2FnZSBwYXR0ZXJuIGlzIHRoYXQgYSBkcml2ZXIgY2FsbHMKIHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSgpIGluIGl0cyBvcGVuIHJvdXRpbmUgYW5kCi11c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoKSBpbiBpdHMgY2xvc2Ugb3IgcmVsZWFzZSByb3V0aW5lLiAgQnV0Ci1vdGhlciBwYXR0ZXJucyBhcmUgcG9zc2libGUuCit1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoKSBpbiBpdHMgY2xvc2Ugb3IgcmVsZWFzZSByb3V0aW5lLiAgQnV0IG90aGVyCitwYXR0ZXJucyBhcmUgcG9zc2libGUuCiAKIFRoZSBhdXRvc3VzcGVuZCBhdHRlbXB0cyBtZW50aW9uZWQgYWJvdmUgd2lsbCBvZnRlbiBmYWlsIGZvciBvbmUKIHJlYXNvbiBvciBhbm90aGVyLiAgRm9yIGV4YW1wbGUsIHRoZSBwb3dlci9sZXZlbCBhdHRyaWJ1dGUgbWlnaHQgYmUKIHNldCB0byAib24iLCBvciBhbm90aGVyIGludGVyZmFjZSBpbiB0aGUgc2FtZSBkZXZpY2UgbWlnaHQgbm90IGJlCiBpZGxlLiAgVGhpcyBpcyBwZXJmZWN0bHkgbm9ybWFsLiAgSWYgdGhlIHJlYXNvbiBmb3IgZmFpbHVyZSB3YXMgdGhhdAotdGhlIGRldmljZSBoYXNuJ3QgYmVlbiBpZGxlIGZvciBsb25nIGVub3VnaCwgYSBkZWxheWVkIHdvcmtxdWV1ZQotcm91dGluZSBpcyBhdXRvbWF0aWNhbGx5IHNldCB1cCB0byBjYXJyeSBvdXQgdGhlIG9wZXJhdGlvbiB3aGVuIHRoZQotYXV0b3N1c3BlbmQgaWRsZS1kZWxheSBoYXMgZXhwaXJlZC4KK3RoZSBkZXZpY2UgaGFzbid0IGJlZW4gaWRsZSBmb3IgbG9uZyBlbm91Z2gsIGEgdGltZXIgaXMgc2NoZWR1bGVkIHRvCitjYXJyeSBvdXQgdGhlIG9wZXJhdGlvbiBhdXRvbWF0aWNhbGx5IHdoZW4gdGhlIGF1dG9zdXNwZW5kIGlkbGUtZGVsYXkKK2hhcyBleHBpcmVkLgogCiBBdXRvcmVzdW1lIGF0dGVtcHRzIGFsc28gY2FuIGZhaWwsIGFsdGhvdWdoIGZhaWx1cmUgd291bGQgbWVhbiB0aGF0CiB0aGUgZGV2aWNlIGlzIG5vIGxvbmdlciBwcmVzZW50IG9yIG9wZXJhdGluZyBwcm9wZXJseS4gIFVubGlrZQotYXV0b3N1c3BlbmQsIHRoZXJlJ3Mgbm8gZGVsYXkgZm9yIGFuIGF1dG9yZXN1bWUuCithdXRvc3VzcGVuZCwgdGhlcmUncyBubyBpZGxlLWRlbGF5IGZvciBhbiBhdXRvcmVzdW1lLgogCiAKIAlPdGhlciBwYXJ0cyBvZiB0aGUgZHJpdmVyIGludGVyZmFjZQogCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKK0RyaXZlcnMgY2FuIGVuYWJsZSBhdXRvc3VzcGVuZCBmb3IgdGhlaXIgZGV2aWNlcyBieSBjYWxsaW5nCisKKwl1c2JfZW5hYmxlX2F1dG9zdXNwZW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKKworaW4gdGhlaXIgcHJvYmUoKSByb3V0aW5lLCBpZiB0aGV5IGtub3cgdGhhdCB0aGUgZGV2aWNlIGlzIGNhcGFibGUgb2YKK3N1c3BlbmRpbmcgYW5kIHJlc3VtaW5nIGNvcnJlY3RseS4gIFRoaXMgaXMgZXhhY3RseSBlcXVpdmFsZW50IHRvCit3cml0aW5nICJhdXRvIiB0byB0aGUgZGV2aWNlJ3MgcG93ZXIvbGV2ZWwgYXR0cmlidXRlLiAgTGlrZXdpc2UsCitkcml2ZXJzIGNhbiBkaXNhYmxlIGF1dG9zdXNwZW5kIGJ5IGNhbGxpbmcKKworCXVzYl9kaXNhYmxlX2F1dG9zdXNwZW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKKworVGhpcyBpcyBleGFjdGx5IHRoZSBzYW1lIGFzIHdyaXRpbmcgIm9uIiB0byB0aGUgcG93ZXIvbGV2ZWwgYXR0cmlidXRlLgorCiBTb21ldGltZXMgYSBkcml2ZXIgbmVlZHMgdG8gbWFrZSBzdXJlIHRoYXQgcmVtb3RlIHdha2V1cCBpcyBlbmFibGVkCiBkdXJpbmcgYXV0b3N1c3BlbmQuICBGb3IgZXhhbXBsZSwgdGhlcmUncyBub3QgbXVjaCBwb2ludAogYXV0b3N1c3BlbmRpbmcgYSBrZXlib2FyZCBpZiB0aGUgdXNlciBjYW4ndCBjYXVzZSB0aGUga2V5Ym9hcmQgdG8gZG8gYQpAQCAtMzk1LDI2ICs0MTIsMjcgQEAKIE5vcm1hbGx5IGEgZHJpdmVyIHdvdWxkIHNldCB0aGlzIGZsYWcgaW4gaXRzIHByb2JlIG1ldGhvZCwgYXQgd2hpY2gKIHRpbWUgdGhlIGRldmljZSBpcyBndWFyYW50ZWVkIG5vdCB0byBiZSBhdXRvc3VzcGVuZGVkLikKIAotVGhlIHN5bmNocm9ub3VzIHVzYl9hdXRvcG1fKiByb3V0aW5lcyBoYXZlIHRvIHJ1biBpbiBhIHNsZWVwYWJsZQotcHJvY2VzcyBjb250ZXh0OyB0aGV5IG11c3Qgbm90IGJlIGNhbGxlZCBmcm9tIGFuIGludGVycnVwdCBoYW5kbGVyIG9yCi13aGlsZSBob2xkaW5nIGEgc3BpbmxvY2suICBJbiBmYWN0LCB0aGUgZW50aXJlIGF1dG9zdXNwZW5kIG1lY2hhbmlzbQotaXMgbm90IHdlbGwgZ2VhcmVkIHRvd2FyZCBpbnRlcnJ1cHQtZHJpdmVuIG9wZXJhdGlvbi4gIEhvd2V2ZXIgdGhlcmUKLWlzIG9uZSB0aGluZyBhIGRyaXZlciBjYW4gZG8gaW4gYW4gaW50ZXJydXB0IGhhbmRsZXI6CitJZiBhIGRyaXZlciBkb2VzIGl0cyBJL08gYXN5bmNocm9ub3VzbHkgaW4gaW50ZXJydXB0IGNvbnRleHQsIGl0CitzaG91bGQgY2FsbCB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2VfYXN5bmMoKSBiZWZvcmUgc3RhcnRpbmcgb3V0cHV0IGFuZAordXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlX2FzeW5jKCkgd2hlbiB0aGUgb3V0cHV0IHF1ZXVlIGRyYWlucy4gIFdoZW4KK2l0IHJlY2VpdmVzIGFuIGlucHV0IGV2ZW50LCBpdCBzaG91bGQgY2FsbAogCiAJdXNiX21hcmtfbGFzdF9idXN5KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKIAotVGhpcyBzZXRzIHVkZXYtPmxhc3RfYnVzeSB0byB0aGUgY3VycmVudCB0aW1lLiAgdWRldi0+bGFzdF9idXN5IGlzIHRoZQotZmllbGQgdXNlZCBmb3IgaWRsZS1kZWxheSBjYWxjdWxhdGlvbnM7IHVwZGF0aW5nIGl0IHdpbGwgY2F1c2UgYW55Ci1wZW5kaW5nIGF1dG9zdXNwZW5kIHRvIGJlIG1vdmVkIGJhY2suICBUaGUgdXNiX2F1dG9wbV8qIHJvdXRpbmVzIHdpbGwKLWFsc28gc2V0IHRoZSBsYXN0X2J1c3kgZmllbGQgdG8gdGhlIGN1cnJlbnQgdGltZS4KK2luIHRoZSBldmVudCBoYW5kbGVyLiAgVGhpcyBzZXRzIHVkZXYtPmxhc3RfYnVzeSB0byB0aGUgY3VycmVudCB0aW1lLgordWRldi0+bGFzdF9idXN5IGlzIHRoZSBmaWVsZCB1c2VkIGZvciBpZGxlLWRlbGF5IGNhbGN1bGF0aW9uczsKK3VwZGF0aW5nIGl0IHdpbGwgY2F1c2UgYW55IHBlbmRpbmcgYXV0b3N1c3BlbmQgdG8gYmUgbW92ZWQgYmFjay4gIE1vc3QKK29mIHRoZSB1c2JfYXV0b3BtXyogcm91dGluZXMgd2lsbCBhbHNvIHNldCB0aGUgbGFzdF9idXN5IGZpZWxkIHRvIHRoZQorY3VycmVudCB0aW1lLgogCi1DYWxsaW5nIHVyYl9tYXJrX2xhc3RfYnVzeSgpIGZyb20gd2l0aGluIGFuIFVSQiBjb21wbGV0aW9uIGhhbmRsZXIgaXMKLXN1YmplY3QgdG8gcmFjZXM6IFRoZSBrZXJuZWwgbWF5IGhhdmUganVzdCBmaW5pc2hlZCBkZWNpZGluZyB0aGUKLWRldmljZSBoYXMgYmVlbiBpZGxlIGZvciBsb25nIGVub3VnaCBidXQgbm90IHlldCBnb3R0ZW4gYXJvdW5kIHRvCi1jYWxsaW5nIHRoZSBkcml2ZXIncyBzdXNwZW5kIG1ldGhvZC4gIFRoZSBkcml2ZXIgd291bGQgaGF2ZSB0byBiZQotcmVzcG9uc2libGUgZm9yIHN5bmNocm9uaXppbmcgaXRzIHN1c3BlbmQgbWV0aG9kIHdpdGggaXRzIFVSQgotY29tcGxldGlvbiBoYW5kbGVyIGFuZCBjYXVzaW5nIHRoZSBhdXRvc3VzcGVuZCB0byBmYWlsIHdpdGggLUVCVVNZIGlmCi1hbiBVUkIgaGFkIGNvbXBsZXRlZCB0b28gcmVjZW50bHkuCitBc3luY2hyb25vdXMgb3BlcmF0aW9uIGlzIGFsd2F5cyBzdWJqZWN0IHRvIHJhY2VzLiAgRm9yIGV4YW1wbGUsIGEKK2RyaXZlciBtYXkgY2FsbCBvbmUgb2YgdGhlIHVzYl9hdXRvcG1fKl9pbnRlcmZhY2VfYXN5bmMoKSByb3V0aW5lcyBhdAorYSB0aW1lIHdoZW4gdGhlIGNvcmUgaGFzIGp1c3QgZmluaXNoZWQgZGVjaWRpbmcgdGhlIGRldmljZSBoYXMgYmVlbgoraWRsZSBmb3IgbG9uZyBlbm91Z2ggYnV0IG5vdCB5ZXQgZ290dGVuIGFyb3VuZCB0byBjYWxsaW5nIHRoZSBkcml2ZXIncworc3VzcGVuZCBtZXRob2QuICBUaGUgc3VzcGVuZCBtZXRob2QgbXVzdCBiZSByZXNwb25zaWJsZSBmb3IKK3N5bmNocm9uaXppbmcgd2l0aCB0aGUgb3V0cHV0IHJlcXVlc3Qgcm91dGluZSBhbmQgdGhlIFVSQiBjb21wbGV0aW9uCitoYW5kbGVyOyBpdCBzaG91bGQgY2F1c2UgYXV0b3N1c3BlbmRzIHRvIGZhaWwgd2l0aCAtRUJVU1kgaWYgdGhlCitkcml2ZXIgbmVlZHMgdG8gdXNlIHRoZSBkZXZpY2UuCiAKIEV4dGVybmFsIHN1c3BlbmQgY2FsbHMgc2hvdWxkIG5ldmVyIGJlIGFsbG93ZWQgdG8gZmFpbCBpbiB0aGlzIHdheSwKIG9ubHkgYXV0b3N1c3BlbmQgY2FsbHMuICBUaGUgZHJpdmVyIGNhbiB0ZWxsIHRoZW0gYXBhcnQgYnkgY2hlY2tpbmcKQEAgLTQyMiw3NSArNDQwLDIzIEBACiBtZXRob2Q7IHRoaXMgYml0IHdpbGwgYmUgc2V0IGZvciBpbnRlcm5hbCBQTSBldmVudHMgKGF1dG9zdXNwZW5kKSBhbmQKIGNsZWFyIGZvciBleHRlcm5hbCBQTSBldmVudHMuCiAKLU1hbnkgb2YgdGhlIGluZ3JlZGllbnRzIGluIHRoZSBhdXRvc3VzcGVuZCBmcmFtZXdvcmsgYXJlIG9yaWVudGVkCi10b3dhcmRzIGludGVyZmFjZXM6IFRoZSB1c2JfaW50ZXJmYWNlIHN0cnVjdHVyZSBjb250YWlucyB0aGUKLXBtX3VzYWdlX2NudCBmaWVsZCwgYW5kIHRoZSB1c2JfYXV0b3BtXyogcm91dGluZXMgdGFrZSBhbiBpbnRlcmZhY2UKLXBvaW50ZXIgYXMgdGhlaXIgYXJndW1lbnQuICBCdXQgc29tZXdoYXQgY29uZnVzaW5nbHksIGEgZmV3IG9mIHRoZQotcGllY2VzIChpLmUuLCB1c2JfbWFya19sYXN0X2J1c3koKSkgdXNlIHRoZSB1c2JfZGV2aWNlIHN0cnVjdHVyZQotaW5zdGVhZC4gIERyaXZlcnMgbmVlZCB0byBrZWVwIHRoaXMgc3RyYWlnaHQ7IHRoZXkgY2FuIGNhbGwKLWludGVyZmFjZV90b191c2JkZXYoKSB0byBmaW5kIHRoZSBkZXZpY2Ugc3RydWN0dXJlIGZvciBhIGdpdmVuCi1pbnRlcmZhY2UuCiAKKwlNdXR1YWwgZXhjbHVzaW9uCisJLS0tLS0tLS0tLS0tLS0tLQogCi0JTG9ja2luZyByZXF1aXJlbWVudHMKLQktLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1BbGwgdGhyZWUgc3VzcGVuZC9yZXN1bWUgbWV0aG9kcyBhcmUgYWx3YXlzIGNhbGxlZCB3aGlsZSBob2xkaW5nIHRoZQotdXNiX2RldmljZSdzIFBNIG11dGV4LiAgRm9yIGV4dGVybmFsIGV2ZW50cyAtLSBidXQgbm90IG5lY2Vzc2FyaWx5IGZvcgotYXV0b3N1c3BlbmQgb3IgYXV0b3Jlc3VtZSAtLSB0aGUgZGV2aWNlIHNlbWFwaG9yZSAodWRldi0+ZGV2LnNlbSkgd2lsbAotYWxzbyBiZSBoZWxkLiAgVGhpcyBpbXBsaWVzIHRoYXQgZXh0ZXJuYWwgc3VzcGVuZC9yZXN1bWUgZXZlbnRzIGFyZQotbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggY2FsbHMgdG8gcHJvYmUsIGRpc2Nvbm5lY3QsIHByZV9yZXNldCwgYW5kCi1wb3N0X3Jlc2V0OyB0aGUgVVNCIGNvcmUgZ3VhcmFudGVlcyB0aGF0IHRoaXMgaXMgdHJ1ZSBvZiBpbnRlcm5hbAotc3VzcGVuZC9yZXN1bWUgZXZlbnRzIGFzIHdlbGwuCitGb3IgZXh0ZXJuYWwgZXZlbnRzIC0tIGJ1dCBub3QgbmVjZXNzYXJpbHkgZm9yIGF1dG9zdXNwZW5kIG9yCithdXRvcmVzdW1lIC0tIHRoZSBkZXZpY2Ugc2VtYXBob3JlICh1ZGV2LT5kZXYuc2VtKSB3aWxsIGJlIGhlbGQgd2hlbiBhCitzdXNwZW5kIG9yIHJlc3VtZSBtZXRob2QgaXMgY2FsbGVkLiAgVGhpcyBpbXBsaWVzIHRoYXQgZXh0ZXJuYWwKK3N1c3BlbmQvcmVzdW1lIGV2ZW50cyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggY2FsbHMgdG8gcHJvYmUsCitkaXNjb25uZWN0LCBwcmVfcmVzZXQsIGFuZCBwb3N0X3Jlc2V0OyB0aGUgVVNCIGNvcmUgZ3VhcmFudGVlcyB0aGF0Cit0aGlzIGlzIHRydWUgb2YgYXV0b3N1c3BlbmQvYXV0b3Jlc3VtZSBldmVudHMgYXMgd2VsbC4KIAogSWYgYSBkcml2ZXIgd2FudHMgdG8gYmxvY2sgYWxsIHN1c3BlbmQvcmVzdW1lIGNhbGxzIGR1cmluZyBzb21lCi1jcml0aWNhbCBzZWN0aW9uLCBpdCBjYW4gc2ltcGx5IGFjcXVpcmUgdWRldi0+cG1fbXV0ZXguIE5vdGUgdGhhdAotY2FsbHMgdG8gcmVzdW1lIG1heSBiZSB0cmlnZ2VyZWQgaW5kaXJlY3RseS4gQmxvY2sgSU8gZHVlIHRvIG1lbW9yeQotYWxsb2NhdGlvbnMgY2FuIG1ha2UgdGhlIHZtIHN1YnN5c3RlbSByZXN1bWUgYSBkZXZpY2UuIFRodXMgd2hpbGUKLWhvbGRpbmcgdGhpcyBsb2NrIHlvdSBtdXN0IG5vdCBhbGxvY2F0ZSBtZW1vcnkgd2l0aCBHRlBfS0VSTkVMIG9yCi1HRlBfTk9GUy4KLQotQWx0ZXJuYXRpdmVseSwgaWYgdGhlIGNyaXRpY2FsIHNlY3Rpb24gbWlnaHQgY2FsbCBzb21lIG9mIHRoZQotdXNiX2F1dG9wbV8qIHJvdXRpbmVzLCB0aGUgZHJpdmVyIGNhbiBhdm9pZCBkZWFkbG9jayBieSBkb2luZzoKLQotCWRvd24oJnVkZXYtPmRldi5zZW0pOwotCXJjID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGludGYpOwotCi1hbmQgYXQgdGhlIGVuZCBvZiB0aGUgY3JpdGljYWwgc2VjdGlvbjoKLQotCWlmICghcmMpCi0JCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShpbnRmKTsKLQl1cCgmdWRldi0+ZGV2LnNlbSk7Ci0KLUhvbGRpbmcgdGhlIGRldmljZSBzZW1hcGhvcmUgd2lsbCBibG9jayBhbGwgZXh0ZXJuYWwgUE0gY2FsbHMsIGFuZCB0aGUKLXVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSgpIHdpbGwgcHJldmVudCBhbnkgaW50ZXJuYWwgUE0gY2FsbHMsIGV2ZW4gaWYKLWl0IGZhaWxzLiAgKEV4ZXJjaXNlOiBXaHk/KQotCi1UaGUgcnVsZXMgZm9yIGxvY2tpbmcgb3JkZXIgYXJlOgotCi0JTmV2ZXIgYWNxdWlyZSBhbnkgZGV2aWNlIHNlbWFwaG9yZSB3aGlsZSBob2xkaW5nIGFueSBQTSBtdXRleC4KLQotCU5ldmVyIGFjcXVpcmUgdWRldi0+cG1fbXV0ZXggd2hpbGUgaG9sZGluZyB0aGUgUE0gbXV0ZXggZm9yCi0JYSBkZXZpY2UgdGhhdCBpc24ndCBhIGRlc2NlbmRhbnQgb2YgdWRldi4KLQotSW4gb3RoZXIgd29yZHMsIFBNIG11dGV4ZXMgc2hvdWxkIG9ubHkgYmUgYWNxdWlyZWQgZ29pbmcgdXAgdGhlIGRldmljZQotdHJlZSwgYW5kIHRoZXkgc2hvdWxkIGJlIGFjcXVpcmVkIG9ubHkgYWZ0ZXIgbG9ja2luZyBhbGwgdGhlIGRldmljZQotc2VtYXBob3JlcyB5b3UgbmVlZCB0byBob2xkLiAgVGhlc2UgcnVsZXMgZG9uJ3QgbWF0dGVyIHRvIGRyaXZlcnMgdmVyeQotbXVjaDsgdGhleSB1c3VhbGx5IGFmZmVjdCBqdXN0IHRoZSBVU0IgY29yZS4KLQotU3RpbGwsIGRyaXZlcnMgZG8gbmVlZCB0byBiZSBjYXJlZnVsLiAgRm9yIGV4YW1wbGUsIG1hbnkgZHJpdmVycyB1c2UgYQotcHJpdmF0ZSBtdXRleCB0byBzeW5jaHJvbml6ZSB0aGVpciBub3JtYWwgSS9PIGFjdGl2aXRpZXMgd2l0aCB0aGVpcgotZGlzY29ubmVjdCBtZXRob2QuICBOb3cgaWYgdGhlIGRyaXZlciBzdXBwb3J0cyBhdXRvc3VzcGVuZCB0aGVuIGl0Ci1tdXN0IGNhbGwgdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKCkgZnJvbSBzb21ld2hlcmUgLS0gbWF5YmUgZnJvbSBpdHMKLWNsb3NlIG1ldGhvZC4gIEl0IHNob3VsZCBtYWtlIHRoZSBjYWxsIHdoaWxlIGhvbGRpbmcgdGhlIHByaXZhdGUgbXV0ZXgsCi1zaW5jZSBhIGRyaXZlciBzaG91bGRuJ3QgY2FsbCBhbnkgb2YgdGhlIHVzYl9hdXRvcG1fKiBmdW5jdGlvbnMgZm9yIGFuCi1pbnRlcmZhY2UgZnJvbSB3aGljaCBpdCBoYXMgYmVlbiB1bmJvdW5kLgotCi1CdXQgdGhlIHVzYl9hdXRwbV8qIHJvdXRpbmVzIGFsd2F5cyBhY3F1aXJlIHRoZSBkZXZpY2UncyBQTSBtdXRleCwgYW5kCi1jb25zZXF1ZW50bHkgdGhlIGxvY2tpbmcgb3JkZXIgaGFzIHRvIGJlOiBwcml2YXRlIG11dGV4IGZpcnN0LCBQTQotbXV0ZXggc2Vjb25kLiAgU2luY2UgdGhlIHN1c3BlbmQgbWV0aG9kIGlzIGFsd2F5cyBjYWxsZWQgd2l0aCB0aGUgUE0KLW11dGV4IGhlbGQsIGl0IG11c3RuJ3QgdHJ5IHRvIGFjcXVpcmUgdGhlIHByaXZhdGUgbXV0ZXguICBJdCBoYXMgdG8KLXN5bmNocm9uaXplIHdpdGggdGhlIGRyaXZlcidzIEkvTyBhY3Rpdml0aWVzIGluIHNvbWUgb3RoZXIgd2F5LgorY3JpdGljYWwgc2VjdGlvbiwgdGhlIGJlc3Qgd2F5IGlzIHRvIGxvY2sgdGhlIGRldmljZSBhbmQgY2FsbAordXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKCkgKGFuZCBkbyB0aGUgcmV2ZXJzZSBhdCB0aGUgZW5kIG9mIHRoZQorY3JpdGljYWwgc2VjdGlvbikuICBIb2xkaW5nIHRoZSBkZXZpY2Ugc2VtYXBob3JlIHdpbGwgYmxvY2sgYWxsCitleHRlcm5hbCBQTSBjYWxscywgYW5kIHRoZSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoKSB3aWxsIHByZXZlbnQgYW55CitpbnRlcm5hbCBQTSBjYWxscywgZXZlbiBpZiBpdCBmYWlscy4gIChFeGVyY2lzZTogV2h5PykKIAogCiAJSW50ZXJhY3Rpb24gYmV0d2VlbiBkeW5hbWljIFBNIGFuZCBzeXN0ZW0gUE0KQEAgLTQ5OSwyMiArNDY1LDExIEBACiBEeW5hbWljIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHN5c3RlbSBwb3dlciBtYW5hZ2VtZW50IGNhbiBpbnRlcmFjdCBpbgogYSBjb3VwbGUgb2Ygd2F5cy4KIAotRmlyc3RseSwgYSBkZXZpY2UgbWF5IGFscmVhZHkgYmUgbWFudWFsbHkgc3VzcGVuZGVkIG9yIGF1dG9zdXNwZW5kZWQKLXdoZW4gYSBzeXN0ZW0gc3VzcGVuZCBvY2N1cnMuICBTaW5jZSBzeXN0ZW0gc3VzcGVuZHMgYXJlIHN1cHBvc2VkIHRvCi1iZSBhcyB0cmFuc3BhcmVudCBhcyBwb3NzaWJsZSwgdGhlIGRldmljZSBzaG91bGQgcmVtYWluIHN1c3BlbmRlZAotZm9sbG93aW5nIHRoZSBzeXN0ZW0gcmVzdW1lLiAgVGhlIDIuNi4yMyBrZXJuZWwgb2JleXMgdGhpcyBwcmluY2lwbGUKLWZvciBtYW51YWxseSBzdXNwZW5kZWQgZGV2aWNlcyBidXQgbm90IGZvciBhdXRvc3VzcGVuZGVkIGRldmljZXM7IHRoZXkKLWRvIGdldCByZXN1bWVkIHdoZW4gdGhlIHN5c3RlbSB3YWtlcyB1cC4gIChQcmVzdW1hYmx5IHRoZXkgd2lsbCBiZQotYXV0b3N1c3BlbmRlZCBhZ2FpbiBhZnRlciB0aGVpciBpZGxlLWRlbGF5IHRpbWUgZXhwaXJlcy4pICBJbiBsYXRlcgota2VybmVscyB0aGlzIGJlaGF2aW9yIHdpbGwgYmUgZml4ZWQuCi0KLShUaGVyZSBpcyBhbiBleGNlcHRpb24uICBJZiBhIGRldmljZSB3b3VsZCB1bmRlcmdvIGEgcmVzZXQtcmVzdW1lCi1pbnN0ZWFkIG9mIGEgbm9ybWFsIHJlc3VtZSwgYW5kIHRoZSBkZXZpY2UgaXMgZW5hYmxlZCBmb3IgcmVtb3RlCi13YWtldXAsIHRoZW4gdGhlIHJlc2V0LXJlc3VtZSB0YWtlcyBwbGFjZSBldmVuIGlmIHRoZSBkZXZpY2Ugd2FzCi1hbHJlYWR5IHN1c3BlbmRlZCB3aGVuIHRoZSBzeXN0ZW0gc3VzcGVuZCBiZWdhbi4gIFRoZSBqdXN0aWZpY2F0aW9uIGlzCi10aGF0IGEgcmVzZXQtcmVzdW1lIGlzIGEga2luZCBvZiByZW1vdGUtd2FrZXVwIGV2ZW50LiAgT3IgdG8gcHV0IGl0Ci1hbm90aGVyIHdheSwgYSBkZXZpY2Ugd2hpY2ggbmVlZHMgYSByZXNldCB3b24ndCBiZSBhYmxlIHRvIGdlbmVyYXRlCi1ub3JtYWwgcmVtb3RlLXdha2V1cCBzaWduYWxzLCBzbyBpdCBvdWdodCB0byBiZSByZXN1bWVkIGltbWVkaWF0ZWx5LikKK0ZpcnN0bHksIGEgZGV2aWNlIG1heSBhbHJlYWR5IGJlIGF1dG9zdXNwZW5kZWQgd2hlbiBhIHN5c3RlbSBzdXNwZW5kCitvY2N1cnMuICBTaW5jZSBzeXN0ZW0gc3VzcGVuZHMgYXJlIHN1cHBvc2VkIHRvIGJlIGFzIHRyYW5zcGFyZW50IGFzCitwb3NzaWJsZSwgdGhlIGRldmljZSBzaG91bGQgcmVtYWluIHN1c3BlbmRlZCBmb2xsb3dpbmcgdGhlIHN5c3RlbQorcmVzdW1lLiAgQnV0IHRoaXMgdGhlb3J5IG1heSBub3Qgd29yayBvdXQgd2VsbCBpbiBwcmFjdGljZTsgb3ZlciB0aW1lCit0aGUga2VybmVsJ3MgYmVoYXZpb3IgaW4gdGhpcyByZWdhcmQgaGFzIGNoYW5nZWQuCiAKIFNlY29uZGx5LCBhIGR5bmFtaWMgcG93ZXItbWFuYWdlbWVudCBldmVudCBtYXkgb2NjdXIgYXMgYSBzeXN0ZW0KIHN1c3BlbmQgaXMgdW5kZXJ3YXkuICBUaGUgd2luZG93IGZvciB0aGlzIGlzIHNob3J0LCBzaW5jZSBzeXN0ZW0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdm0vMDAtSU5ERVggYi9Eb2N1bWVudGF0aW9uL3ZtLzAwLUlOREVYCmluZGV4IGU1N2Q2YTkuLmRjYTgyZDcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vMDAtSU5ERVgKKysrIGIvRG9jdW1lbnRhdGlvbi92bS8wMC1JTkRFWApAQCAtNCwyMyArNCwzNSBAQAogCS0gQW4gZXhwbGFuYXRpb24gZnJvbSBMaW51cyBhYm91dCB0c2stPmFjdGl2ZV9tbSB2cyB0c2stPm1tLgogYmFsYW5jZQogCS0gdmFyaW91cyBpbmZvcm1hdGlvbiBvbiBtZW1vcnkgYmFsYW5jaW5nLgoraHVnZXBhZ2UtbW1hcC5jCisJLSBFeGFtcGxlIGFwcCB1c2luZyBodWdlIHBhZ2UgbWVtb3J5IHdpdGggdGhlIG1tYXAgc3lzdGVtIGNhbGwuCitodWdlcGFnZS1zaG0uYworCS0gRXhhbXBsZSBhcHAgdXNpbmcgaHVnZSBwYWdlIG1lbW9yeSB3aXRoIFN5cyBWIHNoYXJlZCBtZW1vcnkgc3lzdGVtIGNhbGxzLgogaHVnZXRsYnBhZ2UudHh0CiAJLSBhIGJyaWVmIHN1bW1hcnkgb2YgaHVnZXRsYnBhZ2Ugc3VwcG9ydCBpbiB0aGUgTGludXgga2VybmVsLgoraHdwb2lzb24udHh0CisJLSBleHBsYWlucyB3aGF0IGh3cG9pc29uIGlzCiBrc20udHh0CiAJLSBob3cgdG8gdXNlIHRoZSBLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZyBmZWF0dXJlLgogbG9ja2luZwogCS0gaW5mbyBvbiBob3cgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uIGlzIGRvbmUgaW4gdGhlIExpbnV4IHZtIGNvZGUuCittYXBfaHVnZXRsYi5jCisJLSBhbiBleGFtcGxlIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBNQVBfSFVHRVRMQiBtbWFwIGZsYWcuCiBudW1hCiAJLSBpbmZvcm1hdGlvbiBhYm91dCBOVU1BIHNwZWNpZmljIGNvZGUgaW4gdGhlIExpbnV4IHZtLgogbnVtYV9tZW1vcnlfcG9saWN5LnR4dAogCS0gZG9jdW1lbnRhdGlvbiBvZiBjb25jZXB0cyBhbmQgQVBJcyBvZiB0aGUgMi42IG1lbW9yeSBwb2xpY3kgc3VwcG9ydC4KIG92ZXJjb21taXQtYWNjb3VudGluZwogCS0gZGVzY3JpcHRpb24gb2YgdGhlIExpbnV4IGtlcm5lbHMgb3ZlcmNvbW1pdCBoYW5kbGluZyBtb2Rlcy4KK3BhZ2UtdHlwZXMuYworCS0gVG9vbCBmb3IgcXVlcnlpbmcgcGFnZSBmbGFncwogcGFnZV9taWdyYXRpb24KIAktIGRlc2NyaXB0aW9uIG9mIHBhZ2UgbWlncmF0aW9uIGluIE5VTUEgc3lzdGVtcy4KK3BhZ2VtYXAudHh0CisJLSBwYWdlbWFwLCBmcm9tIHRoZSB1c2Vyc3BhY2UgcGVyc3BlY3RpdmUKIHNsYWJpbmZvLmMKIAktIHNvdXJjZSBjb2RlIGZvciBhIHRvb2wgdG8gZ2V0IHJlcG9ydHMgYWJvdXQgc2xhYnMuCiBzbHViLnR4dAogCS0gYSBzaG9ydCB1c2VycyBndWlkZSBmb3IgU0xVQi4KLW1hcF9odWdldGxiLmMKLQktIGFuIGV4YW1wbGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIE1BUF9IVUdFVExCIG1tYXAgZmxhZy4KK3VuZXZpY3RhYmxlLWxydS50eHQKKwktIFVuZXZpY3RhYmxlIExSVSBpbmZyYXN0cnVjdHVyZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9NYWtlZmlsZSBiL0RvY3VtZW50YXRpb24vdm0vTWFrZWZpbGUKaW5kZXggNWJkMjY5Yi4uOWRjZmYzMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS9NYWtlZmlsZQorKysgYi9Eb2N1bWVudGF0aW9uL3ZtL01ha2VmaWxlCkBAIC0yLDcgKzIsNyBAQAogb2JqLSA6PSBkdW1teS5vCiAKICMgTGlzdCBvZiBwcm9ncmFtcyB0byBidWlsZAotaG9zdHByb2dzLXkgOj0gc2xhYmluZm8gcGFnZS10eXBlcworaG9zdHByb2dzLXkgOj0gc2xhYmluZm8gcGFnZS10eXBlcyBodWdlcGFnZS1tbWFwIGh1Z2VwYWdlLXNobSBtYXBfaHVnZXRsYgogCiAjIFRlbGwga2J1aWxkIHRvIGFsd2F5cyBidWlsZCB0aGUgcHJvZ3JhbXMKIGFsd2F5cyA6PSAkKGhvc3Rwcm9ncy15KQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92bS9odWdlcGFnZS1tbWFwLmMgYi9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2VwYWdlLW1tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjBkZDlhCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9odWdlcGFnZS1tbWFwLmMKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIGh1Z2VwYWdlLW1tYXA6CisgKgorICogRXhhbXBsZSBvZiB1c2luZyBodWdlIHBhZ2UgbWVtb3J5IGluIGEgdXNlciBhcHBsaWNhdGlvbiB1c2luZyB0aGUgbW1hcAorICogc3lzdGVtIGNhbGwuICBCZWZvcmUgcnVubmluZyB0aGlzIGFwcGxpY2F0aW9uLCBtYWtlIHN1cmUgdGhhdCB0aGUKKyAqIGFkbWluaXN0cmF0b3IgaGFzIG1vdW50ZWQgdGhlIGh1Z2V0bGJmcyBmaWxlc3lzdGVtIChvbiBzb21lIGRpcmVjdG9yeQorICogbGlrZSAvbW50KSB1c2luZyB0aGUgY29tbWFuZCBtb3VudCAtdCBodWdldGxiZnMgbm9kZXYgL21udC4gSW4gdGhpcworICogZXhhbXBsZSwgdGhlIGFwcCBpcyByZXF1ZXN0aW5nIG1lbW9yeSBvZiBzaXplIDI1Nk1CIHRoYXQgaXMgYmFja2VkIGJ5CisgKiBodWdlIHBhZ2VzLgorICoKKyAqIEZvciB0aGUgaWE2NCBhcmNoaXRlY3R1cmUsIHRoZSBMaW51eCBrZXJuZWwgcmVzZXJ2ZXMgUmVnaW9uIG51bWJlciA0IGZvcgorICogaHVnZSBwYWdlcy4gIFRoYXQgbWVhbnMgdGhhdCBpZiBvbmUgcmVxdWlyZXMgYSBmaXhlZCBhZGRyZXNzLCBhIGh1Z2UgcGFnZQorICogYWxpZ25lZCBhZGRyZXNzIHN0YXJ0aW5nIHdpdGggMHg4MDAwMDAuLi4gd2lsbCBiZSByZXF1aXJlZC4gIElmIGEgZml4ZWQKKyAqIGFkZHJlc3MgaXMgbm90IHJlcXVpcmVkLCB0aGUga2VybmVsIHdpbGwgc2VsZWN0IGFuIGFkZHJlc3MgaW4gdGhlIHByb3BlcgorICogcmFuZ2UuCisgKiBPdGhlciBhcmNoaXRlY3R1cmVzLCBzdWNoIGFzIHBwYzY0LCBpMzg2IG9yIHg4Nl82NCBhcmUgbm90IHNvIGNvbnN0cmFpbmVkLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKworI2RlZmluZSBGSUxFX05BTUUgIi9tbnQvaHVnZXBhZ2VmaWxlIgorI2RlZmluZSBMRU5HVEggKDI1NlVMKjEwMjQqMTAyNCkKKyNkZWZpbmUgUFJPVEVDVElPTiAoUFJPVF9SRUFEIHwgUFJPVF9XUklURSkKKworLyogT25seSBpYTY0IHJlcXVpcmVzIHRoaXMgKi8KKyNpZmRlZiBfX2lhNjRfXworI2RlZmluZSBBRERSICh2b2lkICopKDB4ODAwMDAwMDAwMDAwMDAwMFVMKQorI2RlZmluZSBGTEFHUyAoTUFQX1NIQVJFRCB8IE1BUF9GSVhFRCkKKyNlbHNlCisjZGVmaW5lIEFERFIgKHZvaWQgKikoMHgwVUwpCisjZGVmaW5lIEZMQUdTIChNQVBfU0hBUkVEKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGNoZWNrX2J5dGVzKGNoYXIgKmFkZHIpCit7CisJcHJpbnRmKCJGaXJzdCBoZXggaXMgJXhcbiIsICooKHVuc2lnbmVkIGludCAqKWFkZHIpKTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfYnl0ZXMoY2hhciAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTEVOR1RIOyBpKyspCisJCSooYWRkciArIGkpID0gKGNoYXIpaTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9ieXRlcyhjaGFyICphZGRyKQoreworCXVuc2lnbmVkIGxvbmcgaTsKKworCWNoZWNrX2J5dGVzKGFkZHIpOworCWZvciAoaSA9IDA7IGkgPCBMRU5HVEg7IGkrKykKKwkJaWYgKCooYWRkciArIGkpICE9IChjaGFyKWkpIHsKKwkJCXByaW50ZigiTWlzbWF0Y2ggYXQgJWx1XG4iLCBpKTsKKwkJCWJyZWFrOworCQl9Cit9CisKK2ludCBtYWluKHZvaWQpCit7CisJdm9pZCAqYWRkcjsKKwlpbnQgZmQ7CisKKwlmZCA9IG9wZW4oRklMRV9OQU1FLCBPX0NSRUFUIHwgT19SRFdSLCAwNzU1KTsKKwlpZiAoZmQgPCAwKSB7CisJCXBlcnJvcigiT3BlbiBmYWlsZWQiKTsKKwkJZXhpdCgxKTsKKwl9CisKKwlhZGRyID0gbW1hcChBRERSLCBMRU5HVEgsIFBST1RFQ1RJT04sIEZMQUdTLCBmZCwgMCk7CisJaWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkgeworCQlwZXJyb3IoIm1tYXAiKTsKKwkJdW5saW5rKEZJTEVfTkFNRSk7CisJCWV4aXQoMSk7CisJfQorCisJcHJpbnRmKCJSZXR1cm5lZCBhZGRyZXNzIGlzICVwXG4iLCBhZGRyKTsKKwljaGVja19ieXRlcyhhZGRyKTsKKwl3cml0ZV9ieXRlcyhhZGRyKTsKKwlyZWFkX2J5dGVzKGFkZHIpOworCisJbXVubWFwKGFkZHIsIExFTkdUSCk7CisJY2xvc2UoZmQpOworCXVubGluayhGSUxFX05BTUUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2VwYWdlLXNobS5jIGIvRG9jdW1lbnRhdGlvbi92bS9odWdlcGFnZS1zaG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzk1NmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi92bS9odWdlcGFnZS1zaG0uYwpAQCAtMCwwICsxLDk4IEBACisvKgorICogaHVnZXBhZ2Utc2htOgorICoKKyAqIEV4YW1wbGUgb2YgdXNpbmcgaHVnZSBwYWdlIG1lbW9yeSBpbiBhIHVzZXIgYXBwbGljYXRpb24gdXNpbmcgU3lzIFYgc2hhcmVkCisgKiBtZW1vcnkgc3lzdGVtIGNhbGxzLiAgSW4gdGhpcyBleGFtcGxlIHRoZSBhcHAgaXMgcmVxdWVzdGluZyAyNTZNQiBvZgorICogbWVtb3J5IHRoYXQgaXMgYmFja2VkIGJ5IGh1Z2UgcGFnZXMuICBUaGUgYXBwbGljYXRpb24gdXNlcyB0aGUgZmxhZworICogU0hNX0hVR0VUTEIgaW4gdGhlIHNobWdldCBzeXN0ZW0gY2FsbCB0byBpbmZvcm0gdGhlIGtlcm5lbCB0aGF0IGl0IGlzCisgKiByZXF1ZXN0aW5nIGh1Z2UgcGFnZXMuCisgKgorICogRm9yIHRoZSBpYTY0IGFyY2hpdGVjdHVyZSwgdGhlIExpbnV4IGtlcm5lbCByZXNlcnZlcyBSZWdpb24gbnVtYmVyIDQgZm9yCisgKiBodWdlIHBhZ2VzLiAgVGhhdCBtZWFucyB0aGF0IGlmIG9uZSByZXF1aXJlcyBhIGZpeGVkIGFkZHJlc3MsIGEgaHVnZSBwYWdlCisgKiBhbGlnbmVkIGFkZHJlc3Mgc3RhcnRpbmcgd2l0aCAweDgwMDAwMC4uLiB3aWxsIGJlIHJlcXVpcmVkLiAgSWYgYSBmaXhlZAorICogYWRkcmVzcyBpcyBub3QgcmVxdWlyZWQsIHRoZSBrZXJuZWwgd2lsbCBzZWxlY3QgYW4gYWRkcmVzcyBpbiB0aGUgcHJvcGVyCisgKiByYW5nZS4KKyAqIE90aGVyIGFyY2hpdGVjdHVyZXMsIHN1Y2ggYXMgcHBjNjQsIGkzODYgb3IgeDg2XzY0IGFyZSBub3Qgc28gY29uc3RyYWluZWQuCisgKgorICogTm90ZTogVGhlIGRlZmF1bHQgc2hhcmVkIG1lbW9yeSBsaW1pdCBpcyBxdWl0ZSBsb3cgb24gbWFueSBrZXJuZWxzLAorICogeW91IG1heSBuZWVkIHRvIGluY3JlYXNlIGl0IHZpYToKKyAqCisgKiBlY2hvIDI2ODQzNTQ1NiA+IC9wcm9jL3N5cy9rZXJuZWwvc2htbWF4CisgKgorICogVGhpcyB3aWxsIGluY3JlYXNlIHRoZSBtYXhpbXVtIHNpemUgcGVyIHNoYXJlZCBtZW1vcnkgc2VnbWVudCB0byAyNTZNQi4KKyAqIFRoZSBvdGhlciBsaW1pdCB0aGF0IHlvdSB3aWxsIGhpdCBldmVudHVhbGx5IGlzIHNobWFsbCB3aGljaCBpcyB0aGUKKyAqIHRvdGFsIGFtb3VudCBvZiBzaGFyZWQgbWVtb3J5IGluIHBhZ2VzLiBUbyBzZXQgaXQgdG8gMTZHQiBvbiBhIHN5c3RlbQorICogd2l0aCBhIDRrQiBwYWdlc2l6ZSBkbzoKKyAqCisgKiBlY2hvIDQxOTQzMDQgPiAvcHJvYy9zeXMva2VybmVsL3NobWFsbAorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9pcGMuaD4KKyNpbmNsdWRlIDxzeXMvc2htLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworI2lmbmRlZiBTSE1fSFVHRVRMQgorI2RlZmluZSBTSE1fSFVHRVRMQiAwNDAwMAorI2VuZGlmCisKKyNkZWZpbmUgTEVOR1RIICgyNTZVTCoxMDI0KjEwMjQpCisKKyNkZWZpbmUgZHByaW50Zih4KSAgcHJpbnRmKHgpCisKKy8qIE9ubHkgaWE2NCByZXF1aXJlcyB0aGlzICovCisjaWZkZWYgX19pYTY0X18KKyNkZWZpbmUgQUREUiAodm9pZCAqKSgweDgwMDAwMDAwMDAwMDAwMDBVTCkKKyNkZWZpbmUgU0hNQVRfRkxBR1MgKFNITV9STkQpCisjZWxzZQorI2RlZmluZSBBRERSICh2b2lkICopKDB4MFVMKQorI2RlZmluZSBTSE1BVF9GTEFHUyAoMCkKKyNlbmRpZgorCitpbnQgbWFpbih2b2lkKQoreworCWludCBzaG1pZDsKKwl1bnNpZ25lZCBsb25nIGk7CisJY2hhciAqc2htYWRkcjsKKworCWlmICgoc2htaWQgPSBzaG1nZXQoMiwgTEVOR1RILAorCQkJICAgIFNITV9IVUdFVExCIHwgSVBDX0NSRUFUIHwgU0hNX1IgfCBTSE1fVykpIDwgMCkgeworCQlwZXJyb3IoInNobWdldCIpOworCQlleGl0KDEpOworCX0KKwlwcmludGYoInNobWlkOiAweCV4XG4iLCBzaG1pZCk7CisKKwlzaG1hZGRyID0gc2htYXQoc2htaWQsIEFERFIsIFNITUFUX0ZMQUdTKTsKKwlpZiAoc2htYWRkciA9PSAoY2hhciAqKS0xKSB7CisJCXBlcnJvcigiU2hhcmVkIG1lbW9yeSBhdHRhY2ggZmFpbHVyZSIpOworCQlzaG1jdGwoc2htaWQsIElQQ19STUlELCBOVUxMKTsKKwkJZXhpdCgyKTsKKwl9CisJcHJpbnRmKCJzaG1hZGRyOiAlcFxuIiwgc2htYWRkcik7CisKKwlkcHJpbnRmKCJTdGFydGluZyB0aGUgd3JpdGVzOlxuIik7CisJZm9yIChpID0gMDsgaSA8IExFTkdUSDsgaSsrKSB7CisJCXNobWFkZHJbaV0gPSAoY2hhcikoaSk7CisJCWlmICghKGkgJSAoMTAyNCAqIDEwMjQpKSkKKwkJCWRwcmludGYoIi4iKTsKKwl9CisJZHByaW50ZigiXG4iKTsKKworCWRwcmludGYoIlN0YXJ0aW5nIHRoZSBDaGVjay4uLiIpOworCWZvciAoaSA9IDA7IGkgPCBMRU5HVEg7IGkrKykKKwkJaWYgKHNobWFkZHJbaV0gIT0gKGNoYXIpaSkKKwkJCXByaW50ZigiXG5JbmRleCAlbHUgbWlzbWF0Y2hlZFxuIiwgaSk7CisJZHByaW50ZigiRG9uZS5cbiIpOworCisJaWYgKHNobWR0KChjb25zdCB2b2lkICopc2htYWRkcikgIT0gMCkgeworCQlwZXJyb3IoIkRldGFjaCBmYWlsdXJlIik7CisJCXNobWN0bChzaG1pZCwgSVBDX1JNSUQsIE5VTEwpOworCQlleGl0KDMpOworCX0KKworCXNobWN0bChzaG1pZCwgSVBDX1JNSUQsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL2h1Z2V0bGJwYWdlLnR4dCBiL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0CmluZGV4IGJjMzE2MzYuLjQ1NzYzNGMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdm0vaHVnZXRsYnBhZ2UudHh0CkBAIC0yOTksMTc2ICsyOTksMTEgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogLyoKLSAqIEV4YW1wbGUgb2YgdXNpbmcgaHVnZSBwYWdlIG1lbW9yeSBpbiBhIHVzZXIgYXBwbGljYXRpb24gdXNpbmcgU3lzIFYgc2hhcmVkCi0gKiBtZW1vcnkgc3lzdGVtIGNhbGxzLiAgSW4gdGhpcyBleGFtcGxlIHRoZSBhcHAgaXMgcmVxdWVzdGluZyAyNTZNQiBvZgotICogbWVtb3J5IHRoYXQgaXMgYmFja2VkIGJ5IGh1Z2UgcGFnZXMuICBUaGUgYXBwbGljYXRpb24gdXNlcyB0aGUgZmxhZwotICogU0hNX0hVR0VUTEIgaW4gdGhlIHNobWdldCBzeXN0ZW0gY2FsbCB0byBpbmZvcm0gdGhlIGtlcm5lbCB0aGF0IGl0IGlzCi0gKiByZXF1ZXN0aW5nIGh1Z2UgcGFnZXMuCi0gKgotICogRm9yIHRoZSBpYTY0IGFyY2hpdGVjdHVyZSwgdGhlIExpbnV4IGtlcm5lbCByZXNlcnZlcyBSZWdpb24gbnVtYmVyIDQgZm9yCi0gKiBodWdlIHBhZ2VzLiAgVGhhdCBtZWFucyB0aGF0IGlmIG9uZSByZXF1aXJlcyBhIGZpeGVkIGFkZHJlc3MsIGEgaHVnZSBwYWdlCi0gKiBhbGlnbmVkIGFkZHJlc3Mgc3RhcnRpbmcgd2l0aCAweDgwMDAwMC4uLiB3aWxsIGJlIHJlcXVpcmVkLiAgSWYgYSBmaXhlZAotICogYWRkcmVzcyBpcyBub3QgcmVxdWlyZWQsIHRoZSBrZXJuZWwgd2lsbCBzZWxlY3QgYW4gYWRkcmVzcyBpbiB0aGUgcHJvcGVyCi0gKiByYW5nZS4KLSAqIE90aGVyIGFyY2hpdGVjdHVyZXMsIHN1Y2ggYXMgcHBjNjQsIGkzODYgb3IgeDg2XzY0IGFyZSBub3Qgc28gY29uc3RyYWluZWQuCi0gKgotICogTm90ZTogVGhlIGRlZmF1bHQgc2hhcmVkIG1lbW9yeSBsaW1pdCBpcyBxdWl0ZSBsb3cgb24gbWFueSBrZXJuZWxzLAotICogeW91IG1heSBuZWVkIHRvIGluY3JlYXNlIGl0IHZpYToKLSAqCi0gKiBlY2hvIDI2ODQzNTQ1NiA+IC9wcm9jL3N5cy9rZXJuZWwvc2htbWF4Ci0gKgotICogVGhpcyB3aWxsIGluY3JlYXNlIHRoZSBtYXhpbXVtIHNpemUgcGVyIHNoYXJlZCBtZW1vcnkgc2VnbWVudCB0byAyNTZNQi4KLSAqIFRoZSBvdGhlciBsaW1pdCB0aGF0IHlvdSB3aWxsIGhpdCBldmVudHVhbGx5IGlzIHNobWFsbCB3aGljaCBpcyB0aGUKLSAqIHRvdGFsIGFtb3VudCBvZiBzaGFyZWQgbWVtb3J5IGluIHBhZ2VzLiBUbyBzZXQgaXQgdG8gMTZHQiBvbiBhIHN5c3RlbQotICogd2l0aCBhIDRrQiBwYWdlc2l6ZSBkbzoKLSAqCi0gKiBlY2hvIDQxOTQzMDQgPiAvcHJvYy9zeXMva2VybmVsL3NobWFsbAorICogaHVnZXBhZ2Utc2htOiAgc2VlIERvY3VtZW50YXRpb24vdm0vaHVnZXBhZ2Utc2htLmMKICAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL2lwYy5oPgotI2luY2x1ZGUgPHN5cy9zaG0uaD4KLSNpbmNsdWRlIDxzeXMvbW1hbi5oPgotCi0jaWZuZGVmIFNITV9IVUdFVExCCi0jZGVmaW5lIFNITV9IVUdFVExCIDA0MDAwCi0jZW5kaWYKLQotI2RlZmluZSBMRU5HVEggKDI1NlVMKjEwMjQqMTAyNCkKLQotI2RlZmluZSBkcHJpbnRmKHgpICBwcmludGYoeCkKLQotI2RlZmluZSBBRERSICh2b2lkICopKDB4MFVMKQkvKiBsZXQga2VybmVsIGNob29zZSBhZGRyZXNzICovCi0jZGVmaW5lIFNITUFUX0ZMQUdTICgwKQotCi1pbnQgbWFpbih2b2lkKQotewotCWludCBzaG1pZDsKLQl1bnNpZ25lZCBsb25nIGk7Ci0JY2hhciAqc2htYWRkcjsKLQotCWlmICgoc2htaWQgPSBzaG1nZXQoMiwgTEVOR1RILAotCQkJICAgIFNITV9IVUdFVExCIHwgSVBDX0NSRUFUIHwgU0hNX1IgfCBTSE1fVykpIDwgMCkgewotCQlwZXJyb3IoInNobWdldCIpOwotCQlleGl0KDEpOwotCX0KLQlwcmludGYoInNobWlkOiAweCV4XG4iLCBzaG1pZCk7Ci0KLQlzaG1hZGRyID0gc2htYXQoc2htaWQsIEFERFIsIFNITUFUX0ZMQUdTKTsKLQlpZiAoc2htYWRkciA9PSAoY2hhciAqKS0xKSB7Ci0JCXBlcnJvcigiU2hhcmVkIG1lbW9yeSBhdHRhY2ggZmFpbHVyZSIpOwotCQlzaG1jdGwoc2htaWQsIElQQ19STUlELCBOVUxMKTsKLQkJZXhpdCgyKTsKLQl9Ci0JcHJpbnRmKCJzaG1hZGRyOiAlcFxuIiwgc2htYWRkcik7Ci0KLQlkcHJpbnRmKCJTdGFydGluZyB0aGUgd3JpdGVzOlxuIik7Ci0JZm9yIChpID0gMDsgaSA8IExFTkdUSDsgaSsrKSB7Ci0JCXNobWFkZHJbaV0gPSAoY2hhcikoaSk7Ci0JCWlmICghKGkgJSAoMTAyNCAqIDEwMjQpKSkKLQkJCWRwcmludGYoIi4iKTsKLQl9Ci0JZHByaW50ZigiXG4iKTsKLQotCWRwcmludGYoIlN0YXJ0aW5nIHRoZSBDaGVjay4uLiIpOwotCWZvciAoaSA9IDA7IGkgPCBMRU5HVEg7IGkrKykKLQkJaWYgKHNobWFkZHJbaV0gIT0gKGNoYXIpaSkKLQkJCXByaW50ZigiXG5JbmRleCAlbHUgbWlzbWF0Y2hlZFxuIiwgaSk7Ci0JZHByaW50ZigiRG9uZS5cbiIpOwotCi0JaWYgKHNobWR0KChjb25zdCB2b2lkICopc2htYWRkcikgIT0gMCkgewotCQlwZXJyb3IoIkRldGFjaCBmYWlsdXJlIik7Ci0JCXNobWN0bChzaG1pZCwgSVBDX1JNSUQsIE5VTEwpOwotCQlleGl0KDMpOwotCX0KLQotCXNobWN0bChzaG1pZCwgSVBDX1JNSUQsIE5VTEwpOwotCi0JcmV0dXJuIDA7Ci19CiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogLyoKLSAqIEV4YW1wbGUgb2YgdXNpbmcgaHVnZSBwYWdlIG1lbW9yeSBpbiBhIHVzZXIgYXBwbGljYXRpb24gdXNpbmcgdGhlIG1tYXAKLSAqIHN5c3RlbSBjYWxsLiAgQmVmb3JlIHJ1bm5pbmcgdGhpcyBhcHBsaWNhdGlvbiwgbWFrZSBzdXJlIHRoYXQgdGhlCi0gKiBhZG1pbmlzdHJhdG9yIGhhcyBtb3VudGVkIHRoZSBodWdldGxiZnMgZmlsZXN5c3RlbSAob24gc29tZSBkaXJlY3RvcnkKLSAqIGxpa2UgL21udCkgdXNpbmcgdGhlIGNvbW1hbmQgbW91bnQgLXQgaHVnZXRsYmZzIG5vZGV2IC9tbnQuIEluIHRoaXMKLSAqIGV4YW1wbGUsIHRoZSBhcHAgaXMgcmVxdWVzdGluZyBtZW1vcnkgb2Ygc2l6ZSAyNTZNQiB0aGF0IGlzIGJhY2tlZCBieQotICogaHVnZSBwYWdlcy4KLSAqCi0gKiBGb3IgdGhlIGlhNjQgYXJjaGl0ZWN0dXJlLCB0aGUgTGludXgga2VybmVsIHJlc2VydmVzIFJlZ2lvbiBudW1iZXIgNCBmb3IKLSAqIGh1Z2UgcGFnZXMuICBUaGF0IG1lYW5zIHRoYXQgaWYgb25lIHJlcXVpcmVzIGEgZml4ZWQgYWRkcmVzcywgYSBodWdlIHBhZ2UKLSAqIGFsaWduZWQgYWRkcmVzcyBzdGFydGluZyB3aXRoIDB4ODAwMDAwLi4uIHdpbGwgYmUgcmVxdWlyZWQuICBJZiBhIGZpeGVkCi0gKiBhZGRyZXNzIGlzIG5vdCByZXF1aXJlZCwgdGhlIGtlcm5lbCB3aWxsIHNlbGVjdCBhbiBhZGRyZXNzIGluIHRoZSBwcm9wZXIKLSAqIHJhbmdlLgotICogT3RoZXIgYXJjaGl0ZWN0dXJlcywgc3VjaCBhcyBwcGM2NCwgaTM4NiBvciB4ODZfNjQgYXJlIG5vdCBzbyBjb25zdHJhaW5lZC4KKyAqIGh1Z2VwYWdlLW1tYXA6ICBzZWUgRG9jdW1lbnRhdGlvbi92bS9odWdlcGFnZS1tbWFwLmMKICAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3lzL21tYW4uaD4KLSNpbmNsdWRlIDxmY250bC5oPgotCi0jZGVmaW5lIEZJTEVfTkFNRSAiL21udC9odWdlcGFnZWZpbGUiCi0jZGVmaW5lIExFTkdUSCAoMjU2VUwqMTAyNCoxMDI0KQotI2RlZmluZSBQUk9URUNUSU9OIChQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKQotCi0jZGVmaW5lIEFERFIgKHZvaWQgKikoMHgwVUwpCS8qIGxldCBrZXJuZWwgY2hvb3NlIGFkZHJlc3MgKi8KLSNkZWZpbmUgRkxBR1MgKE1BUF9TSEFSRUQpCi0KLXZvaWQgY2hlY2tfYnl0ZXMoY2hhciAqYWRkcikKLXsKLQlwcmludGYoIkZpcnN0IGhleCBpcyAleFxuIiwgKigodW5zaWduZWQgaW50ICopYWRkcikpOwotfQotCi12b2lkIHdyaXRlX2J5dGVzKGNoYXIgKmFkZHIpCi17Ci0JdW5zaWduZWQgbG9uZyBpOwotCi0JZm9yIChpID0gMDsgaSA8IExFTkdUSDsgaSsrKQotCQkqKGFkZHIgKyBpKSA9IChjaGFyKWk7Ci19Ci0KLXZvaWQgcmVhZF9ieXRlcyhjaGFyICphZGRyKQotewotCXVuc2lnbmVkIGxvbmcgaTsKLQotCWNoZWNrX2J5dGVzKGFkZHIpOwotCWZvciAoaSA9IDA7IGkgPCBMRU5HVEg7IGkrKykKLQkJaWYgKCooYWRkciArIGkpICE9IChjaGFyKWkpIHsKLQkJCXByaW50ZigiTWlzbWF0Y2ggYXQgJWx1XG4iLCBpKTsKLQkJCWJyZWFrOwotCQl9Ci19Ci0KLWludCBtYWluKHZvaWQpCi17Ci0Jdm9pZCAqYWRkcjsKLQlpbnQgZmQ7Ci0KLQlmZCA9IG9wZW4oRklMRV9OQU1FLCBPX0NSRUFUIHwgT19SRFdSLCAwNzU1KTsKLQlpZiAoZmQgPCAwKSB7Ci0JCXBlcnJvcigiT3BlbiBmYWlsZWQiKTsKLQkJZXhpdCgxKTsKLQl9Ci0KLQlhZGRyID0gbW1hcChBRERSLCBMRU5HVEgsIFBST1RFQ1RJT04sIEZMQUdTLCBmZCwgMCk7Ci0JaWYgKGFkZHIgPT0gTUFQX0ZBSUxFRCkgewotCQlwZXJyb3IoIm1tYXAiKTsKLQkJdW5saW5rKEZJTEVfTkFNRSk7Ci0JCWV4aXQoMSk7Ci0JfQotCi0JcHJpbnRmKCJSZXR1cm5lZCBhZGRyZXNzIGlzICVwXG4iLCBhZGRyKTsKLQljaGVja19ieXRlcyhhZGRyKTsKLQl3cml0ZV9ieXRlcyhhZGRyKTsKLQlyZWFkX2J5dGVzKGFkZHIpOwotCi0JbXVubWFwKGFkZHIsIExFTkdUSCk7Ci0JY2xvc2UoZmQpOwotCXVubGluayhGSUxFX05BTUUpOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL21hcF9odWdldGxiLmMgYi9Eb2N1bWVudGF0aW9uL3ZtL21hcF9odWdldGxiLmMKaW5kZXggZTJiZGFlMy4uOTk2OWM3ZCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92bS9tYXBfaHVnZXRsYi5jCisrKyBiL0RvY3VtZW50YXRpb24vdm0vbWFwX2h1Z2V0bGIuYwpAQCAtMzEsMTIgKzMxLDEyIEBACiAjZGVmaW5lIEZMQUdTIChNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMgfCBNQVBfSFVHRVRMQikKICNlbmRpZgogCi12b2lkIGNoZWNrX2J5dGVzKGNoYXIgKmFkZHIpCitzdGF0aWMgdm9pZCBjaGVja19ieXRlcyhjaGFyICphZGRyKQogewogCXByaW50ZigiRmlyc3QgaGV4IGlzICV4XG4iLCAqKCh1bnNpZ25lZCBpbnQgKilhZGRyKSk7CiB9CiAKLXZvaWQgd3JpdGVfYnl0ZXMoY2hhciAqYWRkcikKK3N0YXRpYyB2b2lkIHdyaXRlX2J5dGVzKGNoYXIgKmFkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyBpOwogCkBAIC00NCw3ICs0NCw3IEBACiAJCSooYWRkciArIGkpID0gKGNoYXIpaTsKIH0KIAotdm9pZCByZWFkX2J5dGVzKGNoYXIgKmFkZHIpCitzdGF0aWMgdm9pZCByZWFkX2J5dGVzKGNoYXIgKmFkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyBpOwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZtL3NsdWIudHh0IGIvRG9jdW1lbnRhdGlvbi92bS9zbHViLnR4dAppbmRleCBiMzczMDBlLi4wNzM3NWU3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZtL3NsdWIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdm0vc2x1Yi50eHQKQEAgLTQxLDYgKzQxLDcgQEAKIAlQCQlQb2lzb25pbmcgKG9iamVjdCBhbmQgcGFkZGluZykKIAlVCQlVc2VyIHRyYWNraW5nIChmcmVlIGFuZCBhbGxvYykKIAlUCQlUcmFjZSAocGxlYXNlIG9ubHkgdXNlIG9uIHNpbmdsZSBzbGFicykKKwlBCQlUb2dnbGUgZmFpbHNsYWIgZmlsdGVyIG1hcmsgZm9yIHRoZSBjYWNoZQogCU8JCVN3aXRjaCBkZWJ1Z2dpbmcgb2ZmIGZvciBjYWNoZXMgdGhhdCB3b3VsZCBoYXZlCiAJCQljYXVzZWQgaGlnaGVyIG1pbmltdW0gc2xhYiBvcmRlcnMKIAktCQlTd2l0Y2ggYWxsIGRlYnVnZ2luZyBvZmYgKHVzZWZ1bCBpZiB0aGUga2VybmVsIGlzCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZveWFnZXIudHh0IGIvRG9jdW1lbnRhdGlvbi92b3lhZ2VyLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc0OWFmNS4uMDAwMDAwMAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZveWFnZXIudHh0CisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotUnVubmluZyBMaW51eCBvbiB0aGUgVm95YWdlciBBcmNoaXRlY3R1cmUKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLUZvciBmdWxsIGRldGFpbHMgYW5kIGN1cnJlbnQgcHJvamVjdCBzdGF0dXMsIHNlZQotCi1odHRwOi8vd3d3LmhhbnNlbnBhcnRuZXJzaGlwLmNvbS92b3lhZ2VyCi0KLVRoZSB2b3lhZ2VyIGFyY2hpdGVjdHVyZSB3YXMgZGVzaWduZWQgYnkgTkNSIGluIHRoZSBtaWQgODBzIHRvIGJlIGEKLWZ1bGx5IFNNUCBjYXBhYmxlIFJBUyBjb21wdXRpbmcgYXJjaGl0ZWN0dXJlIGJ1aWx0IGFyb3VuZCBpbnRlbCdzIDQ4NgotY2hpcCBzZXQuICBUaGUgdm95YWdlciBjYW1lIGluIHRocmVlIGxldmVscyBvZiBhcmNoaXRlY3R1cmFsCi1zb3BoaXN0aWNhdGlvbjogMyw0IGFuZCA1IC0tLSAxIGFuZCAyIG5ldmVyIG1hZGUgaXQgb3V0IG9mIHByb3RvdHlwZS4KLVRoZSBsaW51eCBwYXRjaGVzIHN1cHBvcnQgb25seSB0aGUgTGV2ZWwgNSB2b3lhZ2VyIGFyY2hpdGVjdHVyZSAoYW55Ci1tYWNoaW5lIGNsYXNzIDM0MzUgYW5kIGFib3ZlKS4KLQotVGhlIFZveWFnZXIgQXJjaGl0ZWN0dXJlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotVm95YWdlciBtYWNoaW5lcyBjb25zaXN0IG9mIGEgQmFzZWJvYXJkIHdpdGggYSAzODYgZGlhZ25vc3RpYwotcHJvY2Vzc29yLCBhIFBvd2VyIFN1cHBseSBJbnRlcmZhY2UgKFBTSSkgYSBQcmltYXJ5IGFuZCBwb3NzaWJseQotU2Vjb25kYXJ5IE1pY3JvY2hhbm5lbCBidXMgYW5kIGJldHdlZW4gMiBhbmQgMjAgdm95YWdlciBzbG90cy4gIFRoZQotdm95YWdlciBzbG90cyBjYW4gYmUgcG9wdWxhdGVkIHdpdGggbWVtb3J5IGFuZCBjcHUgY2FyZHMgKHVwIHRvIDRHQgotbWVtb3J5IGFuZCBmcm9tIDEgNDg2IHRvIDMyIFBlbnRpdW0gUHJvIHByb2Nlc3NvcnMpLiAgSW50ZXJuYWxseSwgdGhlCi12b3lhZ2VyIGhhcyBhIGR1YWwgYXJiaXRyYXRlZCBzeXN0ZW0gYnVzIGFuZCBhIGNvbmZpZ3VyYXRpb24gYW5kIHRlc3QKLWJ1cyAoQ0FUKS4gIFRoZSB2b3lhZ2VyIGJ1cyBzcGVlZCBpcyA0ME1Iei4gIFRoZXJlZm9yZSAoc2luY2UgYWxsCi12b3lhZ2VyIGNhcmRzIGFyZSBkdWFsIHBvcnRlZCBmb3IgZWFjaCBzeXN0ZW0gYnVzKSB0aGUgbWF4aW11bQotdHJhbnNmZXIgcmF0ZSBpcyAzMjBNYi9zIGJ1dCBvbmx5IGlmIHlvdSBoYXZlIHlvdXIgc2xvdCBjb25maWd1cmF0aW9uCi10dW5lZCAob25seSBtZW1vcnkgY2FyZHMgY2FuIGNvbW11bmljYXRlIHdpdGggYm90aCBidXNzZXMgYXQgb25jZSwgQ1BVCi1jYXJkcyB1dGlsaXNlIHRoZW0gb25lIGF0IGEgdGltZSkuCi0KLVZveWFnZXIgU01QCi0tLS0tLS0tLS0tLQotCi1TaW5jZSB2b3lhZ2VyIHdhcyB0aGUgZmlyc3QgaW50ZWwgYmFzZWQgU01QIHN5c3RlbSwgaXQgaXMgc2xpZ2h0bHkKLW1vcmUgcHJpbWl0aXZlIHRoYW4gdGhlIEludGVsIElPLUFQSUMgYXBwcm9hY2ggdG8gU01QLiAgVm95YWdlciBhbGxvd3MKLWFyYml0cmFyeSBpbnRlcnJ1cHQgcm91dGluZyAoaW5jbHVkaW5nIHByb2Nlc3NvciBhZmZpbml0eSByb3V0aW5nKSBvZgotYWxsIDE2IFBDIHR5cGUgaW50ZXJydXB0cy4gIEhvd2V2ZXIgaXQgZG9lcyB0aGlzIGJ5IHVzaW5nIGEgbW9kaWZpZWQKLTUyNTkgbWFzdGVyL3NsYXZlIGNoaXAgc2V0IGluc3RlYWQgb2YgYW4gQVBJQyBidXMuICBBZGRpdGlvbmFsbHksCi12b3lhZ2VyIHN1cHBvcnRzIENyb3NzIFByb2Nlc3NvciBJbnRlcnJ1cHRzIChDUEkpIGVxdWl2YWxlbnQgdG8gdGhlCi1BUElDIElQSXMuICBUaGVyZSBhcmUgdHdvIHJvdXRlZCB2b3lhZ2VyIGludGVycnVwdCBsaW5lcyBwcm92aWRlZCB0bwotZWFjaCBzbG90LgotCi1Qcm9jZXNzb3IgQ2FyZHMKLS0tLS0tLS0tLS0tLS0tLQotCi1UaGVzZSBjb21lIGluIHNpbmdsZSwgZHlhZGljIGFuZCBxdWFkIGNvbmZpZ3VyYXRpb25zICh0aGUgcXVhZHMgYXJlCi1wcm9ibGVtYXRpYy0tc2VlIGxhdGVyKS4gIFRoZSBtYXhpbXVtIGNvbmZpZ3VyYXRpb24gaXMgOCBxdWFkIGNhcmRzCi1mb3IgMzIgd2F5IFNNUC4KLQotUXVhZCBQcm9jZXNzb3JzCi0tLS0tLS0tLS0tLS0tLS0KLQotQmVjYXVzZSB2b3lhZ2VyIG9ubHkgc3VwcGxpZXMgdHdvIGludGVycnVwdCBsaW5lcyB0byBlYWNoIFByb2Nlc3NvcgotY2FyZCwgdGhlIFF1YWQgcHJvY2Vzc29ycyBoYXZlIHRvIGJlIGNvbmZpZ3VyZWQgKGFuZCBCb290c3RyYXBwZWQpIGluCi1hcyBhIHBhaXIgb2YgTWFzdGVyL1NsYXZlIHByb2Nlc3NvcnMuCi0KLUluIGZhY3QsIG1vc3QgUXVhZCBjYXJkcyBvbmx5IGFjY2VwdCBvbmUgVklDIGludGVycnVwdCBsaW5lLCBzbyB0aGV5Ci1oYXZlIG9uZSBpbnRlcnJ1cHQgaGFuZGxpbmcgcHJvY2Vzc29yIChjYWxsZWQgdGhlIFZJQyBleHRlbmRlZAotcHJvY2Vzc29yKSBhbmQgdGhyZWUgbm9uLWludGVycnVwdCBoYW5kbGluZyBwcm9jZXNzb3JzLgotCi1DdXJyZW50IFN0YXR1cwotLS0tLS0tLS0tLS0tLS0KLQotVGhlIFN5c3RlbSB3aWxsIGJvb3Qgb24gTW9ubywgRHlhZCBhbmQgUXVhZCBjYXJkcy4gIFRoZXJlIHdhcwotb3JpZ2luYWxseSBhIFF1YWQgYm9vdCBwcm9ibGVtIHdoaWNoIGhhcyBiZWVuIGZpeGVkIGJ5IHByb3BlciBnZHQKLWFsaWdubWVudCBpbiB0aGUgaW5pdGlhbCBib290IGxvYWRlci4gIElmIHlvdSBzdGlsbCBjYW5ub3QgZ2V0IHlvdXIKLXZveWFnZXIgc3lzdGVtIHRvIGJvb3QsIGVtYWlsIG1lIGF0OgotCi08Si5FLkouQm90dG9tbGV5QEhhbnNlblBhcnRuZXJzaGlwLmNvbT4KLQotCi1UaGUgUXVhZCBjYXJkcyBub3cgc3VwcG9ydCB1c2luZyB0aGUgc2VwYXJhdGUgUXVhZCBDUEkgdmVjdG9ycyBpbnN0ZWFkCi1vZiBnb2luZyB0aHJvdWdoIHRoZSBWSUMgbWFpbGJveCBzeXN0ZW0uCi0KLVRoZSBMZXZlbCA0IGFyY2hpdGVjdHVyZSAoMzQzMCBhbmQgMzM2MCBNYWNoaW5lcykgc2hvdWxkIGFsc28gd29yawotZmluZS4KLQotRHVtcCBTd2l0Y2gKLS0tLS0tLS0tLS0tCi0KLVRoZSB2b3lhZ2VyIGR1bXAgc3dpdGNoIHNlbmRzIG91dCBhIGJyb2FkY2FzdCBOTUkgd2hpY2ggdGhlIHZveWFnZXIKLWNvZGUgaW50ZXJjZXB0cyBhbmQgZG9lcyBhIHRhc2sgZHVtcC4KLQotUG93ZXIgU3dpdGNoCi0tLS0tLS0tLS0tLS0KLQotVGhlIGZyb250IHBhbmVsIHBvd2VyIHN3aXRjaCBpcyBpbnRlcmNlcHRlZCBieSB0aGUga2VybmVsIGFuZCBzaG91bGQKLWNhdXNlIGEgc3lzdGVtIHNodXRkb3duIGFuZCBwb3dlciBvZmYuCi0KLUEgTm90ZSBBYm91dCBNaXhlZCBDUFUgU3lzdGVtcwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUxpbnV4IGlzbid0IGRlc2lnbmVkIHRvIGhhbmRsZSBtaXhlZCBDUFUgc3lzdGVtcyB2ZXJ5IHdlbGwuICBJbiBvcmRlcgotdG8gZ2V0IGV2ZXJ5dGhpbmcgZ29pbmcgeW91ICptdXN0KiBtYWtlIHN1cmUgdGhhdCB5b3VyIGxvd2VzdAotY2FwYWJpbGl0eSBDUFUgaXMgdXNlZCBmb3IgYm9vdGluZy4gIEFsc28sIG1peGluZyBDUFUgY2xhc3NlcwotKGUuZy4gNDg2IGFuZCA1ODYpIGlzIHJlYWxseSBub3QgZ29pbmcgdG8gd29yayB2ZXJ5IHdlbGwgYXQgYWxsLgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBmNTIwZGQwLi5mZTg4YjVmIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtNzEsNiArNzEsNyBAQAogCU06IE1haWwgcGF0Y2hlcyB0bzogRnVsbE5hbWUgPGFkZHJlc3NAZG9tYWluPgogCUw6IE1haWxpbmcgbGlzdCB0aGF0IGlzIHJlbGV2YW50IHRvIHRoaXMgYXJlYQogCVc6IFdlYi1wYWdlIHdpdGggc3RhdHVzL2luZm8KKwlROiBQYXRjaHdvcmsgd2ViIGJhc2VkIHBhdGNoIHRyYWNraW5nIHN5c3RlbSBzaXRlCiAJVDogU0NNIHRyZWUgdHlwZSBhbmQgbG9jYXRpb24uICBUeXBlIGlzIG9uZSBvZjogZ2l0LCBoZywgcXVpbHQsIHN0Z2l0LgogCVM6IFN0YXR1cywgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAJICAgU3VwcG9ydGVkOglTb21lb25lIGlzIGFjdHVhbGx5IHBhaWQgdG8gbG9vayBhZnRlciB0aGlzLgpAQCAtMTgyLDYgKzE4Myw3IEBACiBNOglMYXRjaGVzYXIgSW9ua292IDxsdWNob0Bpb25rb3YubmV0PgogTDoJdjlmcy1kZXZlbG9wZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBXOglodHRwOi8vc3dpay5uZXQvdjlmcworUToJaHR0cDovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3Qvdjlmcy1kZXZlbC9saXN0LwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9lcmljdmgvdjlmcy5naXQKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvOXAudHh0CkBAIC0yMzgsNiArMjQwLDcgQEAKIE06CUxlbiBCcm93biA8bGVuYkBrZXJuZWwub3JnPgogTDoJbGludXgtYWNwaUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cubGVzc3dhdHRzLm9yZy9wcm9qZWN0cy9hY3BpLworUToJaHR0cDovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3QvbGludXgtYWNwaS9saXN0LwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9sZW5iL2xpbnV4LWFjcGktMi42LmdpdAogUzoJU3VwcG9ydGVkCiBGOglkcml2ZXJzL2FjcGkvCkBAIC00MjgsNyArNDMxLDYgQEAKIEw6CWxpbnV4LWdlb2RlQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQogVzoJaHR0cDovL3d3dy5hbWQuY29tL3VzLWVuL0Nvbm5lY3Rpdml0eVNvbHV0aW9ucy9UZWNobmljYWxSZXNvdXJjZXMvMCwsNTBfMjMzNF8yNDUyXzExMzYzLDAwLmh0bWwKIFM6CVN1cHBvcnRlZAotRjoJYXJjaC94ODYva2VybmVsL2dlb2RlXzMyLmMKIEY6CWRyaXZlcnMvY2hhci9od19yYW5kb20vZ2VvZGUtcm5nLmMKIEY6CWRyaXZlcnMvY3J5cHRvL2dlb2RlKgogRjoJZHJpdmVycy92aWRlby9nZW9kZS8KQEAgLTY2NCw2ICs2NjYsMTIgQEAKIEY6CWFyY2gvYXJtL21hY2gtbXgqLwogRjoJYXJjaC9hcm0vcGxhdC1teGMvCiAKK0FSTS9GUkVFU0NBTEUgSU1YNTEKK006CUFtaXQgS3VjaGVyaWEgPGFtaXQua3VjaGVyaWFAY2Fub25pY2FsLmNvbT4KK0w6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCitTOglNYWludGFpbmVkCitGOglhcmNoL2FybS9tYWNoLW14NS8KKwogQVJNL0dMT01BVElPTiBHRVNCQzkzMTJTWCBNQUNISU5FIFNVUFBPUlQKIE06CUxlbm5lcnQgQnV5dGVuaGVrIDxrZXJuZWxAd2FudHN0b2ZseS5vcmc+CiBMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQpAQCAtOTM3LDYgKzk0NSwxNiBAQAogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vbWFjaC1zM2M2NDEwLwogCitBUk0vU0hNT0JJTEUgQVJNIEFSQ0hJVEVDVFVSRQorTToJUGF1bCBNdW5kdCA8bGV0aGFsQGxpbnV4LXNoLm9yZz4KK006CU1hZ251cyBEYW1tIDxtYWdudXMuZGFtbUBnbWFpbC5jb20+CitMOglsaW51eC1zaEB2Z2VyLmtlcm5lbC5vcmcKK1Q6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbGV0aGFsL2dlbmVzaXMtMi42LmdpdAorVzoJaHR0cDovL29zcy5yZW5lc2FzLmNvbQorUzoJU3VwcG9ydGVkCitGOglhcmNoL2FybS9tYWNoLXNobW9iaWxlLworRjoJZHJpdmVycy9zaC8KKwogQVJNL1RFQ0hOT0xPR0lDIFNZU1RFTVMgVFM3MjUwIE1BQ0hJTkUgU1VQUE9SVAogTToJTGVubmVydCBCdXl0ZW5oZWsgPGtlcm5lbEB3YW50c3RvZmx5Lm9yZz4KIEw6CWxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCkBAIC05NjYsNiArOTg0LDEzIEBACiBTOglNYWludGFpbmVkCiBGOglhcmNoL2FybS92ZnAvCiAKK0FTQzc2MjEgSEFSRFdBUkUgTU9OSVRPUiBEUklWRVIKK006CUdlb3JnZSBKb3NlcGggPGdlb3JnZS5qb3NlcGhAZmFpcnZpZXc1LmNvbT4KK0w6CWxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKK1M6CU1haW50YWluZWQKK0Y6CURvY3VtZW50YXRpb24vaHdtb24vYXNjNzYyMQorRjoJZHJpdmVycy9od21vbi9hc2M3NjIxLmMKKwogQVNVUyBBQ1BJIEVYVFJBUyBEUklWRVIKIE06CUNvcmVudGluIENoYXJ5IDxjb3JlbnRpbmNqQGlrc2FpZi5uZXQ+CiBNOglLYXJvbCBLb3ppbW9yIDxzeml3YW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgpAQCAtMTIyNiw2ICsxMjUxLDEzIEBACiBTOglTdXBwb3J0ZWQKIEY6CWRyaXZlcnMvcnRjL3J0Yy1iZmluLmMKIAorQkxBQ0tGSU4gU0RIIERSSVZFUgorTToJQ2xpZmYgQ2FpIDxjbGlmZi5jYWlAYW5hbG9nLmNvbT4KK0w6CXVjbGludXgtZGlzdC1kZXZlbEBibGFja2Zpbi51Y2xpbnV4Lm9yZworVzoJaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnCitTOglTdXBwb3J0ZWQKK0Y6CWRyaXZlcnMvbW1jL2hvc3QvYmZpbl9zZGguYworCiBCTEFDS0ZJTiBTRVJJQUwgRFJJVkVSCiBNOglTb25pYyBaaGFuZyA8c29uaWMuemhhbmdAYW5hbG9nLmNvbT4KIEw6CXVjbGludXgtZGlzdC1kZXZlbEBibGFja2Zpbi51Y2xpbnV4Lm9yZwpAQCAtMTMzMiw2ICsxMzY0LDcgQEAKIE06CUNocmlzIE1hc29uIDxjaHJpcy5tYXNvbkBvcmFjbGUuY29tPgogTDoJbGludXgtYnRyZnNAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vYnRyZnMud2lraS5rZXJuZWwub3JnLworUToJaHR0cDovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3QvbGludXgtYnRyZnMvbGlzdC8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbWFzb24vYnRyZnMtdW5zdGFibGUuZ2l0CiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2J0cmZzLnR4dApAQCAtMTQ5Niw2ICsxNTI5LDcgQEAKIEw6CWxpbnV4LWNpZnMtY2xpZW50QGxpc3RzLnNhbWJhLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCiBMOglzYW1iYS10ZWNobmljYWxAbGlzdHMuc2FtYmEub3JnIChtb2RlcmF0ZWQgZm9yIG5vbi1zdWJzY3JpYmVycykKIFc6CWh0dHA6Ly9saW51eC1jaWZzLnNhbWJhLm9yZy8KK1E6CWh0dHA6Ly9wYXRjaHdvcmsub3psYWJzLm9yZy9wcm9qZWN0L2xpbnV4LWNpZnMtY2xpZW50L2xpc3QvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3NmcmVuY2gvY2lmcy0yLjYuZ2l0CiBTOglTdXBwb3J0ZWQKIEY6CURvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvY2lmcy50eHQKQEAgLTE3ODIsNiArMTgxNiw3IEBACiBQOglBbGFzZGFpciBLZXJnb24KIEw6CWRtLWRldmVsQHJlZGhhdC5jb20KIFc6CWh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vZG0KK1E6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L2RtLWRldmVsL2xpc3QvCiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2RldmljZS1tYXBwZXIvCiBGOglkcml2ZXJzL21kL2RtKgpAQCAtMjEyNiw2ICsyMTYxLDcgQEAKIE06CUFuZHJlYXMgRGlsZ2VyIDxhZGlsZ2VyQHN1bi5jb20+CiBMOglsaW51eC1leHQ0QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL2V4dDQud2lraS5rZXJuZWwub3JnCitROglodHRwOi8vcGF0Y2h3b3JrLm96bGFicy5vcmcvcHJvamVjdC9saW51eC1leHQ0L2xpc3QvCiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2V4dDQudHh0CiBGOglmcy9leHQ0LwpAQCAtMjM5MSw2ICsyNDI3LDEyIEBACiBGOglkcml2ZXJzL2lzZG4vZ2lnYXNldC8KIEY6CWluY2x1ZGUvbGludXgvZ2lnYXNldF9kZXYuaAogCitHUkVUSCAxMC8xMDAvMUcgRXRoZXJuZXQgTUFDIGRldmljZSBkcml2ZXIKK006CUtyaXN0b2ZmZXIgR2xlbWJvIDxrcmlzdG9mZmVyQGdhaXNsZXIuY29tPgorTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZworUzoJTWFpbnRhaW5lZAorRjoJZHJpdmVycy9uZXQvZ3JldGgqCisKIEhBUkQgRFJJVkUgQUNUSVZFIFBST1RFQ1RJT04gU1lTVEVNIChIREFQUykgRFJJVkVSCiBNOglGcmFuayBTZWlkZWwgPGZyYW5rQGYtc2VpZGVsLmRlPgogTDoJbG0tc2Vuc29yc0BsbS1zZW5zb3JzLm9yZwpAQCAtMjQ5NiwxMyArMjUzOCw2IEBACiBTOglNYWludGFpbmVkCiBGOglzb3VuZC9wYXJpc2MvaGFybW9ueS4qCiAKLUhBWUVTIEVTUCBTRVJJQUwgRFJJVkVSCi1NOgkiQW5kcmV3IEouIFJvYmluc29uIiA8YXJvYmluc29Abnl4Lm5ldD4KLVc6CWh0dHA6Ly93d3cubnl4Lm5ldC9+YXJvYmluc28KLVM6CU1haW50YWluZWQKLUY6CURvY3VtZW50YXRpb24vc2VyaWFsL2hheWVzLWVzcC50eHQKLUY6CWRyaXZlcnMvY2hhci9lc3AuYwotCiBIRVdMRVRULVBBQ0tBUkQgU01BUlQyIFJBSUQgRFJJVkVSCiBNOglDaGlyYWcgS2FudGhhcmlhIDxjaGlyYWcua2FudGhhcmlhQGhwLmNvbT4KIEw6CWlzc19zdG9yYWdlZGV2QGhwLmNvbQpAQCAtMjcxMSw2ICsyNzQ2LDcgQEAKIElERSBTVUJTWVNURU0KIE06CSJEYXZpZCBTLiBNaWxsZXIiIDxkYXZlbUBkYXZlbWxvZnQubmV0PgogTDoJbGludXgtaWRlQHZnZXIua2VybmVsLm9yZworUToJaHR0cDovL3BhdGNod29yay5vemxhYnMub3JnL3Byb2plY3QvbGludXgtaWRlL2xpc3QvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2RhdmVtL2lkZS0yLjYuZ2l0CiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2lkZS8KQEAgLTI3NjUsNiArMjgwMSw3IEBACiBNOglIYWwgUm9zZW5zdG9jayA8aGFsLnJvc2Vuc3RvY2tAZ21haWwuY29tPgogTDoJbGludXgtcmRtYUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cub3BlbmliLm9yZy8KK1E6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L2xpbnV4LXJkbWEvbGlzdC8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvcm9sYW5kL2luZmluaWJhbmQuZ2l0CiBTOglTdXBwb3J0ZWQKIEY6CURvY3VtZW50YXRpb24vaW5maW5pYmFuZC8KQEAgLTI3ODQsMTIgKzI4MjEsMTMgQEAKIE06CURtaXRyeSBUb3Jva2hvdiA8ZG1pdHJ5LnRvcm9raG92QGdtYWlsLmNvbT4KIE06CURtaXRyeSBUb3Jva2hvdiA8ZHRvckBtYWlsLnJ1PgogTDoJbGludXgtaW5wdXRAdmdlci5rZXJuZWwub3JnCitROglodHRwOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcHJvamVjdC9saW51eC1pbnB1dC9saXN0LwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9kdG9yL2lucHV0LmdpdAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9pbnB1dC8KIAogSU5URUwgRlJBTUVCVUZGRVIgRFJJVkVSIChleGNsdWRpbmcgODEwIGFuZCA4MTUpCi1NOglTeWx2YWluIE1leWVyIDxzeWx2YWluLm1leWVyQHdvcmxkb25saW5lLmZyPgorTToJTWFpayBCcm9lbW1lIDxtYnJvZW1tZUBwbHVzc2VydmVyLmRlPgogTDoJbGludXgtZmJkZXZAdmdlci5rZXJuZWwub3JnCiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2ZiL2ludGVsZmIudHh0CkBAIC0zMDQwLDYgKzMwNzgsMTMgQEAKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi8KIAorSVQ4NyBIQVJEV0FSRSBNT05JVE9SSU5HIERSSVZFUgorTToJSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CitMOglsbS1zZW5zb3JzQGxtLXNlbnNvcnMub3JnCitTOglNYWludGFpbmVkCitGOglEb2N1bWVudGF0aW9uL2h3bW9uL2l0ODcKK0Y6CWRyaXZlcnMvaHdtb24vaXQ4Ny5jCisKIElWVFYgVklERU80TElOVVggRFJJVkVSCiBNOglBbmR5IFdhbGxzIDxhd2FsbHNAcmFkaXgubmV0PgogTDoJaXZ0di1kZXZlbEBpdnR2ZHJpdmVyLm9yZyAobW9kZXJhdGVkIGZvciBub24tc3Vic2NyaWJlcnMpCkBAIC0zMDkzLDYgKzMxMzgsNyBAQAogS0NPTkZJRwogTToJUm9tYW4gWmlwcGVsIDx6aXBwZWxAbGludXgtbTY4ay5vcmc+CiBMOglsaW51eC1rYnVpbGRAdmdlci5rZXJuZWwub3JnCitROglodHRwOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcHJvamVjdC9saW51eC1rYnVpbGQvbGlzdC8KIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24va2J1aWxkL2tjb25maWctbGFuZ3VhZ2UudHh0CiBGOglzY3JpcHRzL2tjb25maWcvCkBAIC0zMTY3LDcgKzMyMTMsNyBAQAogRjoJYXJjaC94ODYva3ZtL3N2bS5jCiAKIEtFUk5FTCBWSVJUVUFMIE1BQ0hJTkUgKEtWTSkgRk9SIFBPV0VSUEMKLU06CUhvbGxpcyBCbGFuY2hhcmQgPGhvbGxpc2JAdXMuaWJtLmNvbT4KK006CUFsZXhhbmRlciBHcmFmIDxhZ3JhZkBzdXNlLmRlPgogTDoJa3ZtLXBwY0B2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9rdm0ucXVtcmFuZXQuY29tCiBTOglTdXBwb3J0ZWQKQEAgLTMzMDYsNiArMzM1Miw3IEBACiBNOglQYXVsIE1hY2tlcnJhcyA8cGF1bHVzQHNhbWJhLm9yZz4KIFc6CWh0dHA6Ly93d3cucGVuZ3VpbnBwYy5vcmcvCiBMOglsaW51eHBwYy1kZXZAb3psYWJzLm9yZworUToJaHR0cDovL3BhdGNod29yay5vemxhYnMub3JnL3Byb2plY3QvbGludXhwcGMtZGV2L2xpc3QvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2JlbmgvcG93ZXJwYy5naXQKIFM6CVN1cHBvcnRlZAogRjoJRG9jdW1lbnRhdGlvbi9wb3dlcnBjLwpAQCAtMzQyNiw2ICszNDczLDEzIEBACiBGOglEb2N1bWVudGF0aW9uL2xkbS50eHQKIEY6CWZzL3BhcnRpdGlvbnMvbGRtLioKIAorTG9nRlMKK006CUpvZXJuIEVuZ2VsIDxqb2VybkBsb2dmcy5vcmc+CitMOglsb2dmc0Bsb2dmcy5vcmcKK1c6CWxvZ2ZzLm9yZworUzoJTWFpbnRhaW5lZAorRjoJZnMvbG9nZnMvCisKIExTSUxPR0lDIE1QVCBGVVNJT04gRFJJVkVSUyAoRkMvU0FTL1NQSSkKIE06CUVyaWMgTW9vcmUgPEVyaWMuTW9vcmVAbHNpLmNvbT4KIE06CXN1cHBvcnRAbHNpLmNvbQpAQCAtMzUyOCw5ICszNTgyLDkgQEAKIEY6CWluY2x1ZGUvbGludXgvbXY2NDN4eC5oCiAKIE1BUlZFTEwgTVdMOEsgV0lSRUxFU1MgRFJJVkVSCi1NOglMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEBtYXJ2ZWxsLmNvbT4KK006CUxlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPgogTDoJbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnCi1TOglTdXBwb3J0ZWQKK1M6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKIAogTUFSVkVMTCBTT0MgTU1DL1NEL1NESU8gQ09OVFJPTExFUiBEUklWRVIKQEAgLTM1NjIsNiArMzYxNiw3IEBACiBQOglMaW51eFRWLm9yZyBQcm9qZWN0CiBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly9saW51eHR2Lm9yZworUToJaHR0cDovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3QvbGludXgtbWVkaWEvbGlzdC8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvbWNoZWhhYi9saW51eC0yLjYuZ2l0CiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL2R2Yi8KQEAgLTM1ODksNyArMzY0NCw3IEBACiAKIE1FTU9SWSBSRVNPVVJDRSBDT05UUk9MTEVSCiBNOglCYWxiaXIgU2luZ2ggPGJhbGJpckBsaW51eC52bmV0LmlibS5jb20+Ci1NOglQYXZlbCBFbWVseWFub3YgPHhlbXVsQG9wZW52ei5vcmc+CitNOglEYWlzdWtlIE5pc2hpbXVyYSA8bmlzaGltdXJhQG14cC5uZXMubmVjLmNvLmpwPgogTToJS0FNRVpBV0EgSGlyb3l1a2kgPGthbWV6YXdhLmhpcm95dUBqcC5mdWppdHN1LmNvbT4KIEw6CWxpbnV4LW1tQGt2YWNrLm9yZwogUzoJTWFpbnRhaW5lZApAQCAtMzU5Nyw4ICszNjUyLDkgQEAKIAogTUVNT1JZIFRFQ0hOT0xPR1kgREVWSUNFUyAoTVREKQogTToJRGF2aWQgV29vZGhvdXNlIDxkd213MkBpbmZyYWRlYWQub3JnPgotVzoJaHR0cDovL3d3dy5saW51eC1tdGQuaW5mcmFkZWFkLm9yZy8KIEw6CWxpbnV4LW10ZEBsaXN0cy5pbmZyYWRlYWQub3JnCitXOglodHRwOi8vd3d3LmxpbnV4LW10ZC5pbmZyYWRlYWQub3JnLworUToJaHR0cDovL3BhdGNod29yay5vemxhYnMub3JnL3Byb2plY3QvbGludXgtbXRkL2xpc3QvCiBUOglnaXQgZ2l0Oi8vZ2l0LmluZnJhZGVhZC5vcmcvbXRkLTIuNi5naXQKIFM6CU1haW50YWluZWQKIEY6CWRyaXZlcnMvbXRkLwpAQCAtMzg1OCw2ICszOTE0LDcgQEAKIE5FVFdPUktJTkcgW1dJUkVMRVNTXQogTToJIkpvaG4gVy4gTGludmlsbGUiIDxsaW52aWxsZUB0dXhkcml2ZXIuY29tPgogTDoJbGludXgtd2lyZWxlc3NAdmdlci5rZXJuZWwub3JnCitROglodHRwOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcHJvamVjdC9saW51eC13aXJlbGVzcy9saXN0LwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9saW52aWxsZS93aXJlbGVzcy0yLjYuZ2l0CiBTOglNYWludGFpbmVkCiBGOgluZXQvbWFjODAyMTEvCkBAIC0zOTUwLDYgKzQwMDcsNyBAQAogTDoJbGludXgtb21hcEB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cubXVydS5jb20vbGludXgvb21hcC8KIFc6CWh0dHA6Ly9saW51eC5vbWFwLmNvbS8KK1E6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L2xpbnV4LW9tYXAvbGlzdC8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvdG1saW5kL2xpbnV4LW9tYXAtMi42LmdpdAogUzoJTWFpbnRhaW5lZAogRjoJYXJjaC9hcm0vKm9tYXAqLwpAQCAtNDE3Niw2ICs0MjM0LDcgQEAKIE06CSJKYW1lcyBFLkouIEJvdHRvbWxleSIgPGplamJAcGFyaXNjLWxpbnV4Lm9yZz4KIEw6CWxpbnV4LXBhcmlzY0B2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cucGFyaXNjLWxpbnV4Lm9yZy8KK1E6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L2xpbnV4LXBhcmlzYy9saXN0LwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9reWxlL3BhcmlzYy0yLjYuZ2l0CiBTOglNYWludGFpbmVkCiBGOglhcmNoL3BhcmlzYy8KQEAgLTQyMTgsNiArNDI3Nyw3IEBACiBQQ0kgU1VCU1lTVEVNCiBNOglKZXNzZSBCYXJuZXMgPGpiYXJuZXNAdmlydHVvdXNnZWVrLm9yZz4KIEw6CWxpbnV4LXBjaUB2Z2VyLmtlcm5lbC5vcmcKK1E6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L2xpbnV4LXBjaS9saXN0LwogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9qYmFybmVzL3BjaS0yLjYuZ2l0CiBTOglTdXBwb3J0ZWQKIEY6CURvY3VtZW50YXRpb24vUENJLwpAQCAtNDI1OSw3ICs0MzE5LDkgQEAKIFM6CVN1cHBvcnRlZAogRjoJa2VybmVsL3BlcmZfZXZlbnQuYwogRjoJaW5jbHVkZS9saW51eC9wZXJmX2V2ZW50LmgKLUY6CWFyY2gvKi8qL2tlcm5lbC9wZXJmX2V2ZW50LmMKK0Y6CWFyY2gvKi9rZXJuZWwvcGVyZl9ldmVudC5jCitGOglhcmNoLyova2VybmVsLyovcGVyZl9ldmVudC5jCitGOglhcmNoLyova2VybmVsLyovKi9wZXJmX2V2ZW50LmMKIEY6CWFyY2gvKi9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKIEY6CWFyY2gvKi9saWIvcGVyZl9ldmVudC5jCiBGOglhcmNoLyova2VybmVsL3BlcmZfY2FsbGNoYWluLmMKQEAgLTQ0NTYsNiArNDUxOCwxMyBAQAogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC95Y21pYW8vcHhhLWxpbnV4LTIuNi5naXQKIFM6CU1haW50YWluZWQKIAorTU1QMiBTVVBQT1JUIChha2EgQVJNQURBNjEwKQorTToJSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPgorTToJRXJpYyBNaWFvIDxlcmljLnkubWlhb0BnbWFpbC5jb20+CitMOglsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcgKG1vZGVyYXRlZCBmb3Igbm9uLXN1YnNjcmliZXJzKQorVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC95Y21pYW8vcHhhLWxpbnV4LTIuNi5naXQKK1M6CU1haW50YWluZWQKKwogUFhBIE1NQ0kgRFJJVkVSCiBTOglPcnBoYW4KIApAQCAtNDQ4MCw2ICs0NTQ5LDEzIEBACiBGOglEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvTElDRU5TRS5xbGEzeHh4CiBGOglkcml2ZXJzL25ldC9xbGEzeHh4LioKIAorUUxPR0lDIFFMQ05JQyAoMS8xMClHYiBFVEhFUk5FVCBEUklWRVIKK006CUFtaXQgS3VtYXIgU2FsZWNoYSA8YW1pdC5zYWxlY2hhQHFsb2dpYy5jb20+CitNOglsaW51eC1kcml2ZXJAcWxvZ2ljLmNvbQorTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZworUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL25ldC9xbGNuaWMvCisKIFFMT0dJQyBRTEdFIDEwR2IgRVRIRVJORVQgRFJJVkVSCiBNOglSb24gTWVyY2VyIDxyb24ubWVyY2VyQHFsb2dpYy5jb20+CiBNOglsaW51eC1kcml2ZXJAcWxvZ2ljLmNvbQpAQCAtNDU4Niw2ICs0NjYyLDcgQEAKIFJFQUwgVElNRSBDTE9DSyAoUlRDKSBTVUJTWVNURU0KIE06CUFsZXNzYW5kcm8gWnVtbW8gPGEuenVtbW9AdG93ZXJ0ZWNoLml0PgogTDoJcnRjLWxpbnV4QGdvb2dsZWdyb3Vwcy5jb20KK1E6CWh0dHA6Ly9wYXRjaHdvcmsub3psYWJzLm9yZy9wcm9qZWN0L3J0Yy1saW51eC9saXN0LwogUzoJTWFpbnRhaW5lZAogRjoJRG9jdW1lbnRhdGlvbi9ydGMudHh0CiBGOglkcml2ZXJzL3J0Yy8KQEAgLTQ4NzQsNiArNDk1MSw4IEBACiBTRVJWRVIgRU5HSU5FUyAxMEdicHMgTklDIC0gQmxhZGVFbmdpbmUgMiBEUklWRVIKIE06CVNhdGh5YSBQZXJsYSA8c2F0aHlhcEBzZXJ2ZXJlbmdpbmVzLmNvbT4KIE06CVN1YmJ1IFNlZXRoYXJhbWFuIDxzdWJidXNAc2VydmVyZW5naW5lcy5jb20+CitNOglTYXJ2ZXNod2FyIEJhbmRpIDxzYXJ2ZXNod2FyYkBzZXJ2ZXJlbmdpbmVzLmNvbT4KK006CUFqaXQgS2hhcGFyZGUgPGFqaXRrQHNlcnZlcmVuZ2luZXMuY29tPgogTDoJbmV0ZGV2QHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5zZXJ2ZXJlbmdpbmVzLmNvbQogUzoJU3VwcG9ydGVkCkBAIC00OTUxLDYgKzUwMzAsNyBAQAogVEkgREFWSU5DSSBNQUNISU5FIFNVUFBPUlQKIFA6CUtldmluIEhpbG1hbgogTToJZGF2aW5jaS1saW51eC1vcGVuLXNvdXJjZUBsaW51eC5kYXZpbmNpZHNwLmNvbQorUToJaHR0cDovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3QvbGludXgtZGF2aW5jaS9saXN0LwogUzoJU3VwcG9ydGVkCiBGOglhcmNoL2FybS9tYWNoLWRhdmluY2kKIApAQCAtNTExNiw2ICs1MTk2LDcgQEAKIFNQQVJDICsgVWx0cmFTUEFSQyAoc3BhcmMvc3BhcmM2NCkKIE06CSJEYXZpZCBTLiBNaWxsZXIiIDxkYXZlbUBkYXZlbWxvZnQubmV0PgogTDoJc3BhcmNsaW51eEB2Z2VyLmtlcm5lbC5vcmcKK1E6CWh0dHA6Ly9wYXRjaHdvcmsub3psYWJzLm9yZy9wcm9qZWN0L3NwYXJjbGludXgvbGlzdC8KIFQ6CWdpdCBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvZGF2ZW0vc3BhcmMtMi42LmdpdAogVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9kYXZlbS9zcGFyYy1uZXh0LTIuNi5naXQKIFM6CU1haW50YWluZWQKQEAgLTUxMzEsNiArNTIxMiw3IEBACiBNOglEYXZpZCBCcm93bmVsbCA8ZGJyb3duZWxsQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIE06CUdyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4KIEw6CXNwaS1kZXZlbC1nZW5lcmFsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorUToJaHR0cDovL3BhdGNod29yay5rZXJuZWwub3JnL3Byb2plY3Qvc3BpLWRldmVsLWdlbmVyYWwvbGlzdC8KIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vc3BpLwogRjoJZHJpdmVycy9zcGkvCkBAIC01MTg2LDcgKzUyNjgsNyBAQAogCiBTVEFSTU9ERSBSQURJTyBJUCAoU1RSSVApIFBST1RPQ09MIERSSVZFUgogUzoJT3JwaGFuCi1GOglkcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jCitGOglkcml2ZXJzL3N0YWdpbmcvc3RyaXAvc3RyaXAuYwogRjoJaW5jbHVkZS9saW51eC9pZl9zdHJpcC5oCiAKIFNUUkFESVMgTVBFRy0yIERFQ09ERVIgRFJJVkVSCkBAIC01MjA3LDYgKzUyODksNyBAQAogTToJUGF1bCBNdW5kdCA8bGV0aGFsQGxpbnV4LXNoLm9yZz4KIEw6CWxpbnV4LXNoQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5saW51eC1zaC5vcmcKK1E6CWh0dHA6Ly9wYXRjaHdvcmsua2VybmVsLm9yZy9wcm9qZWN0L2xpbnV4LXNoL2xpc3QvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2xldGhhbC9zaC0yLjYuZ2l0CiBTOglTdXBwb3J0ZWQKIEY6CURvY3VtZW50YXRpb24vc2gvCkBAIC01ODQyLDYgKzU5MjUsMTUgQEAKIEY6CURvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZhdC50eHQKIEY6CWZzL2ZhdC8KIAorVklSVElPIEhPU1QgKFZIT1NUKQorTToJIk1pY2hhZWwgUy4gVHNpcmtpbiIgPG1zdEByZWRoYXQuY29tPgorTDoJa3ZtQHZnZXIua2VybmVsLm9yZworTDoJdmlydHVhbGl6YXRpb25AbGlzdHMub3NkbC5vcmcKK0w6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKK1M6CU1haW50YWluZWQKK0Y6CWRyaXZlcnMvdmhvc3QvCitGOglpbmNsdWRlL2xpbnV4L3Zob3N0LmgKKwogVklBIFJISU5FIE5FVFdPUksgRFJJVkVSCiBNOglSb2dlciBMdWV0aGkgPHJsQGhlbGxnYXRlLmNoPgogUzoJTWFpbnRhaW5lZApAQCAtNTk2NSw3ICs2MDU3LDcgQEAKIFc6CWh0dHA6Ly93d3cuaHBsLmhwLmNvbS9wZXJzb25hbC9KZWFuX1RvdXJyaWxoZXMvTGludXgvCiBTOglNYWludGFpbmVkCiBGOglEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvd2F2ZWxhbi50eHQKLUY6CWRyaXZlcnMvbmV0L3dpcmVsZXNzL3dhdmVsYW4qCitGOglkcml2ZXJzL3N0YWdpbmcvd2F2ZWxhbi8KIAogV0Q3MDAwIFNDU0kgRFJJVkVSCiBNOglNaXJvc2xhdiBaYWdvcmFjIDx6YWdhQGZseS5jYy5mZXIuaHI+CkBAIC02MDAwLDcgKzYwOTIsNyBAQAogRjoJZHJpdmVycy9pbnB1dC9taXNjL3dpc3Ryb25fYnRucy5jCiAKIFdMMTI1MSBXSVJFTEVTUyBEUklWRVIKLU06CUthbGxlIFZhbG8gPGthbGxlLnZhbG9Abm9raWEuY29tPgorTToJS2FsbGUgVmFsbyA8a2FsbGUudmFsb0Bpa2kuZmk+CiBMOglsaW51eC13aXJlbGVzc0B2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2xpbnZpbGxlL3dpcmVsZXNzLXRlc3RpbmcuZ2l0CkBAIC02MDczLDYgKzYxNjUsNyBAQAogWDg2IFBMQVRGT1JNIERSSVZFUlMKIE06CU1hdHRoZXcgR2FycmV0dCA8bWpnQHJlZGhhdC5jb20+CiBMOglwbGF0Zm9ybS1kcml2ZXIteDg2QHZnZXIua2VybmVsLm9yZworVDogICAgICBnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L21qZzU5L3BsYXRmb3JtLWRyaXZlcnMteDg2LmdpdAogUzoJTWFpbnRhaW5lZAogRjoJZHJpdmVycy9wbGF0Zm9ybS94ODYKIApAQCAtNjE2MCw2ICs2MjUzLDcgQEAKIFRIRSBSRVNUCiBNOglMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+CiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCitROglodHRwOi8vcGF0Y2h3b3JrLmtlcm5lbC5vcmcvcHJvamVjdC9MS01ML2xpc3QvCiBUOglnaXQgZ2l0Oi8vZ2l0Lmtlcm5lbC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3RvcnZhbGRzL2xpbnV4LTIuNi5naXQKIFM6CUJ1cmllZCBhbGl2ZSBpbiByZXBvcnRlcnMKIEY6CSoKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggMWIyNDg5NS4uMDhmZjAyZCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTEsNyArMSw3IEBACiBWRVJTSU9OID0gMgogUEFUQ0hMRVZFTCA9IDYKLVNVQkxFVkVMID0gMzMKLUVYVFJBVkVSU0lPTiA9CitTVUJMRVZFTCA9IDM0CitFWFRSQVZFUlNJT04gPSAtcmMxCiBOQU1FID0gTWFuLUVhdGluZyBTZWFscyBvZiBBbnRpcXVpdHkKIAogIyAqRE9DVU1FTlRBVElPTioKZGlmZiAtLWdpdCBhL2FyY2gvS2NvbmZpZyBiL2FyY2gvS2NvbmZpZwppbmRleCAyMTVlNDYwLi5lNWViMTMzIDEwMDY0NAotLS0gYS9hcmNoL0tjb25maWcKKysrIGIvYXJjaC9LY29uZmlnCkBAIC00MSw2ICs0MSwxNyBAQAogCSAgZm9yIGtlcm5lbCBkZWJ1Z2dpbmcsIG5vbi1pbnRydXNpdmUgaW5zdHJ1bWVudGF0aW9uIGFuZCB0ZXN0aW5nLgogCSAgSWYgaW4gZG91YnQsIHNheSAiTiIuCiAKK2NvbmZpZyBPUFRQUk9CRVMKKwlib29sICJLcHJvYmVzIGp1bXAgb3B0aW1pemF0aW9uIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCisJZGVmYXVsdCB5CisJZGVwZW5kcyBvbiBLUFJPQkVTCisJZGVwZW5kcyBvbiAhUFJFRU1QVAorCWRlcGVuZHMgb24gSEFWRV9PUFRQUk9CRVMKKwlzZWxlY3QgS0FMTFNZTVNfQUxMCisJaGVscAorCSAgVGhpcyBvcHRpb24gd2lsbCBhbGxvdyBrcHJvYmVzIHRvIG9wdGltaXplIGJyZWFrcG9pbnQgdG8KKwkgIGEganVtcCBmb3IgcmVkdWNpbmcgaXRzIG92ZXJoZWFkLgorCiBjb25maWcgSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUwogCWJvb2wKIAloZWxwCkBAIC04Myw2ICs5NCw4IEBACiBjb25maWcgSEFWRV9LUkVUUFJPQkVTCiAJYm9vbAogCitjb25maWcgSEFWRV9PUFRQUk9CRVMKKwlib29sCiAjCiAjIEFuIGFyY2ggc2hvdWxkIHNlbGVjdCB0aGlzIGlmIGl0IHByb3ZpZGVzIGFsbCB0aGVzZSB0aGluZ3M6CiAjCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL0tjb25maWcgYi9hcmNoL2FscGhhL0tjb25maWcKaW5kZXggYmQ3MjYxZS4uNzUyOTFmZCAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9LY29uZmlnCisrKyBiL2FyY2gvYWxwaGEvS2NvbmZpZwpAQCAtMTAsNiArMTAsNyBAQAogCXNlbGVjdCBIQVZFX09QUk9GSUxFCiAJc2VsZWN0IEhBVkVfU1lTQ0FMTF9XUkFQUEVSUwogCXNlbGVjdCBIQVZFX1BFUkZfRVZFTlRTCisJc2VsZWN0IEhBVkVfRE1BX0FUVFJTCiAJaGVscAogCSAgVGhlIEFscGhhIGlzIGEgNjQtYml0IGdlbmVyYWwtcHVycG9zZSBwcm9jZXNzb3IgZGVzaWduZWQgYW5kCiAJICBtYXJrZXRlZCBieSB0aGUgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gb2YgYmxlc3NlZCBtZW1vcnksCkBAIC01OCw2ICs1OSw5IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgTkVFRF9ETUFfTUFQX1NUQVRFCisgICAgICAgZGVmX2Jvb2wgeQorCiBjb25maWcgR0VORVJJQ19JU0FfRE1BCiAJYm9vbAogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDA0ZWI1NjguLjFiY2U4MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTEsNzEgKzEsNDkgQEAKICNpZm5kZWYgX0FMUEhBX0RNQV9NQVBQSU5HX0gKICNkZWZpbmUgX0FMUEhBX0RNQV9NQVBQSU5HX0gKIAorI2luY2x1ZGUgPGxpbnV4L2RtYS1hdHRycy5oPgogCi0jaWZkZWYgQ09ORklHX1BDSQorZXh0ZXJuIHN0cnVjdCBkbWFfbWFwX29wcyAqZG1hX29wczsKIAotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorc3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hX21hcF9vcHMgKmdldF9kbWFfb3BzKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZG1hX29wczsKK30KIAotI2RlZmluZSBkbWFfbWFwX3NpbmdsZShkZXYsIHZhLCBzaXplLCBkaXIpCQlcCi0JCXBjaV9tYXBfc2luZ2xlKGFscGhhX2dlbmRldl90b19wY2koZGV2KSwgdmEsIHNpemUsIGRpcikKLSNkZWZpbmUgZG1hX3VubWFwX3NpbmdsZShkZXYsIGFkZHIsIHNpemUsIGRpcikJCVwKLQkJcGNpX3VubWFwX3NpbmdsZShhbHBoYV9nZW5kZXZfdG9fcGNpKGRldiksIGFkZHIsIHNpemUsIGRpcikKLSNkZWZpbmUgZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgYWRkciwgZ2ZwKQlcCi0JICAgICAgX19wY2lfYWxsb2NfY29uc2lzdGVudChhbHBoYV9nZW5kZXZfdG9fcGNpKGRldiksIHNpemUsIGFkZHIsIGdmcCkKLSNkZWZpbmUgZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCB2YSwgYWRkcikJCVwKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChhbHBoYV9nZW5kZXZfdG9fcGNpKGRldiksIHNpemUsIHZhLCBhZGRyKQotI2RlZmluZSBkbWFfbWFwX3BhZ2UoZGV2LCBwYWdlLCBvZmYsIHNpemUsIGRpcikJCVwKLQkJcGNpX21hcF9wYWdlKGFscGhhX2dlbmRldl90b19wY2koZGV2KSwgcGFnZSwgb2ZmLCBzaXplLCBkaXIpCi0jZGVmaW5lIGRtYV91bm1hcF9wYWdlKGRldiwgYWRkciwgc2l6ZSwgZGlyKQkJXAotCQlwY2lfdW5tYXBfcGFnZShhbHBoYV9nZW5kZXZfdG9fcGNpKGRldiksIGFkZHIsIHNpemUsIGRpcikKLSNkZWZpbmUgZG1hX21hcF9zZyhkZXYsIHNnLCBuZW50cywgZGlyKQkJCVwKLQkJcGNpX21hcF9zZyhhbHBoYV9nZW5kZXZfdG9fcGNpKGRldiksIHNnLCBuZW50cywgZGlyKQotI2RlZmluZSBkbWFfdW5tYXBfc2coZGV2LCBzZywgbmVudHMsIGRpcikJCVwKLQkJcGNpX3VubWFwX3NnKGFscGhhX2dlbmRldl90b19wY2koZGV2KSwgc2csIG5lbnRzLCBkaXIpCi0jZGVmaW5lIGRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKQkJCVwKLQkJcGNpX2RtYV9zdXBwb3J0ZWQoYWxwaGFfZ2VuZGV2X3RvX3BjaShkZXYpLCBtYXNrKQotI2RlZmluZSBkbWFfbWFwcGluZ19lcnJvcihkZXYsIGFkZHIpCQkJCVwKLQkJcGNpX2RtYV9tYXBwaW5nX2Vycm9yKGFscGhhX2dlbmRldl90b19wY2koZGV2KSwgYWRkcikKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtbWFwcGluZy1jb21tb24uaD4KIAotI2Vsc2UJLyogbm8gUENJIC0gbm8gSU9NTVUuICovCitzdGF0aWMgaW5saW5lIHZvaWQgKmRtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCSAgICAgICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnApCit7CisJcmV0dXJuIGdldF9kbWFfb3BzKGRldiktPmFsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZ2ZwKTsKK30KIAotI2luY2x1ZGUgPGFzbS9pby5oPgkvKiBmb3IgdmlydF90b19waHlzKCkgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCSAgICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKK3sKKwlnZXRfZG1hX29wcyhkZXYpLT5mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOworfQogCi1zdHJ1Y3Qgc2NhdHRlcmxpc3Q7Ci12b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCSBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnApOwotaW50IGRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCi0JICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CitzdGF0aWMgaW5saW5lIGludCBkbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCit7CisJcmV0dXJuIGdldF9kbWFfb3BzKGRldiktPm1hcHBpbmdfZXJyb3IoZGV2LCBkbWFfYWRkcik7Cit9CiAKLSNkZWZpbmUgZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCB2YSwgYWRkcikJCVwKLQkJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyl2YSwgZ2V0X29yZGVyKHNpemUpKQotI2RlZmluZSBkbWFfc3VwcG9ydGVkKGRldiwgbWFzaykJCShtYXNrIDwgMHgwMGZmZmZmZlVMID8gMCA6IDEpCi0jZGVmaW5lIGRtYV9tYXBfc2luZ2xlKGRldiwgdmEsIHNpemUsIGRpcikJdmlydF90b19waHlzKHZhKQotI2RlZmluZSBkbWFfbWFwX3BhZ2UoZGV2LCBwYWdlLCBvZmYsIHNpemUsIGRpcikJKHBhZ2VfdG9fcGEocGFnZSkgKyBvZmYpCitzdGF0aWMgaW5saW5lIGludCBkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisJcmV0dXJuIGdldF9kbWFfb3BzKGRldiktPmRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKTsKK30KIAotI2RlZmluZSBkbWFfdW5tYXBfc2luZ2xlKGRldiwgYWRkciwgc2l6ZSwgZGlyKQkoKHZvaWQpMCkKLSNkZWZpbmUgZG1hX3VubWFwX3BhZ2UoZGV2LCBhZGRyLCBzaXplLCBkaXIpCSgodm9pZCkwKQotI2RlZmluZSBkbWFfdW5tYXBfc2coZGV2LCBzZywgbmVudHMsIGRpcikJKCh2b2lkKTApCi0KLSNkZWZpbmUgZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBhZGRyKSAgKDApCi0KLSNlbmRpZgkvKiAhQ09ORklHX1BDSSAqLworc3RhdGljIGlubGluZSBpbnQgZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisJcmV0dXJuIGdldF9kbWFfb3BzKGRldiktPnNldF9kbWFfbWFzayhkZXYsIG1hc2spOworfQogCiAjZGVmaW5lIGRtYV9hbGxvY19ub25jb2hlcmVudChkLCBzLCBoLCBmKQlkbWFfYWxsb2NfY29oZXJlbnQoZCwgcywgaCwgZikKICNkZWZpbmUgZG1hX2ZyZWVfbm9uY29oZXJlbnQoZCwgcywgdiwgaCkJZG1hX2ZyZWVfY29oZXJlbnQoZCwgcywgdiwgaCkKICNkZWZpbmUgZG1hX2lzX2NvbnNpc3RlbnQoZCwgaCkJCQkoMSkKIAotaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKTsKLQotI2RlZmluZSBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsIGFkZHIsIHNpemUsIGRpcikJICAoKHZvaWQpMCkKLSNkZWZpbmUgZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBhZGRyLCBzaXplLCBkaXIpICAoKHZvaWQpMCkKLSNkZWZpbmUgZG1hX3N5bmNfc2luZ2xlX3JhbmdlKGRldiwgYWRkciwgb2ZmLCBzaXplLCBkaXIpICAoKHZvaWQpMCkKLSNkZWZpbmUgZG1hX3N5bmNfc2dfZm9yX2NwdShkZXYsIHNnLCBuZW50cywgZGlyKQkgICgodm9pZCkwKQotI2RlZmluZSBkbWFfc3luY19zZ19mb3JfZGV2aWNlKGRldiwgc2csIG5lbnRzLCBkaXIpCSAgKCh2b2lkKTApCiAjZGVmaW5lIGRtYV9jYWNoZV9zeW5jKGRldiwgdmEsIHNpemUsIGRpcikJCSAgKCh2b2lkKTApCi0jZGVmaW5lIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KGRldiwgYWRkciwgb2Zmc2V0LCBzaXplLCBkaXIpCSgodm9pZCkwKQotI2RlZmluZSBkbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShkZXYsIGFkZHIsIG9mZnNldCwgc2l6ZSwgZGlyKQkoKHZvaWQpMCkKLQogI2RlZmluZSBkbWFfZ2V0X2NhY2hlX2FsaWdubWVudCgpCQkJICBMMV9DQUNIRV9CWVRFUwogCiAjZW5kaWYJLyogX0FMUEhBX0RNQV9NQVBQSU5HX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vbG9jYWwuaCBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vbG9jYWwuaAppbmRleCA2YWQzZWE2Li5iOWUzZTMzIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL2xvY2FsLmgKKysrIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9sb2NhbC5oCkBAIC05OCwyMSArOTgsNCBAQAogI2RlZmluZSBfX2xvY2FsX2FkZChpLGwpCSgobCktPmEuY291bnRlcis9KGkpKQogI2RlZmluZSBfX2xvY2FsX3N1YihpLGwpCSgobCktPmEuY291bnRlci09KGkpKQogCi0vKiBVc2UgdGhlc2UgZm9yIHBlci1jcHUgbG9jYWxfdCB2YXJpYWJsZXM6IG9uIHNvbWUgYXJjaHMgdGhleSBhcmUKLSAqIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGVzZSBuYWl2ZSBpbXBsZW1lbnRhdGlvbnMuICBOb3RlIHRoZXkgdGFrZQotICogYSB2YXJpYWJsZSwgbm90IGFuIGFkZHJlc3MuCi0gKi8KLSNkZWZpbmUgY3B1X2xvY2FsX3JlYWQobCkJbG9jYWxfcmVhZCgmX19nZXRfY3B1X3ZhcihsKSkKLSNkZWZpbmUgY3B1X2xvY2FsX3NldChsLCBpKQlsb2NhbF9zZXQoJl9fZ2V0X2NwdV92YXIobCksIChpKSkKLQotI2RlZmluZSBjcHVfbG9jYWxfaW5jKGwpCWxvY2FsX2luYygmX19nZXRfY3B1X3ZhcihsKSkKLSNkZWZpbmUgY3B1X2xvY2FsX2RlYyhsKQlsb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIobCkpCi0jZGVmaW5lIGNwdV9sb2NhbF9hZGQoaSwgbCkJbG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIobCkpCi0jZGVmaW5lIGNwdV9sb2NhbF9zdWIoaSwgbCkJbG9jYWxfc3ViKChpKSwgJl9fZ2V0X2NwdV92YXIobCkpCi0KLSNkZWZpbmUgX19jcHVfbG9jYWxfaW5jKGwpCV9fbG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKGwpKQotI2RlZmluZSBfX2NwdV9sb2NhbF9kZWMobCkJX19sb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIobCkpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX2FkZChpLCBsKQlfX2xvY2FsX2FkZCgoaSksICZfX2dldF9jcHVfdmFyKGwpKQotI2RlZmluZSBfX2NwdV9sb2NhbF9zdWIoaSwgbCkJX19sb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkKLQogI2VuZGlmIC8qIF9BTFBIQV9MT0NBTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wY2kuaAppbmRleCBkZDhkY2FiLi4yOGQwNDk3IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3BjaS5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTcwLDE0MiArNzAsMTEgQEAKICAgIGRlY2lzaW9ucy4gICovCiAjZGVmaW5lIFBDSV9ETUFfQlVTX0lTX1BIWVMgIDAKIAotLyogQWxsb2NhdGUgYW5kIG1hcCBrZXJuZWwgYnVmZmVyIHVzaW5nIGNvbnNpc3RlbnQgbW9kZSBETUEgZm9yIFBDSQotICAgZGV2aWNlLiAgUmV0dXJucyBub24tTlVMTCBjcHUtdmlldyBwb2ludGVyIHRvIHRoZSBidWZmZXIgaWYKLSAgIHN1Y2Nlc3NmdWwgYW5kIHNldHMgKkRNQV9BRERSUCB0byB0aGUgcGNpIHNpZGUgZG1hIGFkZHJlc3MgYXMgd2VsbCwKLSAgIGVsc2UgRE1BX0FERFJQIGlzIHVuZGVmaW5lZC4gICovCi0KLWV4dGVybiB2b2lkICpfX3BjaV9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICosIHNpemVfdCwKLQkJCQkgICAgZG1hX2FkZHJfdCAqLCBnZnBfdCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgKgotcGNpX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYSkKLXsKLQlyZXR1cm4gX19wY2lfYWxsb2NfY29uc2lzdGVudChkZXYsIHNpemUsIGRtYSwgR0ZQX0FUT01JQyk7Ci19Ci0KLS8qIEZyZWUgYW5kIHVubWFwIGEgY29uc2lzdGVudCBETUEgYnVmZmVyLiAgQ1BVX0FERFIgYW5kIERNQV9BRERSIG11c3QKLSAgIGJlIHZhbHVlcyB0aGF0IHdlcmUgcmV0dXJuZWQgZnJvbSBwY2lfYWxsb2NfY29uc2lzdGVudC4gIFNJWkUgbXVzdAotICAgYmUgdGhlIHNhbWUgYXMgd2hhdCBhcyBwYXNzZWQgaW50byBwY2lfYWxsb2NfY29uc2lzdGVudC4KLSAgIFJlZmVyZW5jZXMgdG8gdGhlIG1lbW9yeSBhbmQgbWFwcGluZ3MgYXNzb2NpYXRlZCB3aXRoIENQVV9BRERSIG9yCi0gICBETUFfQUREUiBwYXN0IHRoaXMgY2FsbCBhcmUgaWxsZWdhbC4gICovCi0KLWV4dGVybiB2b2lkIHBjaV9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKiwgc2l6ZV90LCB2b2lkICosIGRtYV9hZGRyX3QpOwotCi0vKiBNYXAgYSBzaW5nbGUgYnVmZmVyIG9mIHRoZSBpbmRpY2F0ZSBzaXplIGZvciBQQ0kgRE1BIGluIHN0cmVhbWluZyBtb2RlLgotICAgVGhlIDMyLWJpdCBQQ0kgYnVzIG1hc3RlcmluZyBhZGRyZXNzIHRvIHVzZSBpcyByZXR1cm5lZC4gIE9uY2UgdGhlIGRldmljZQotICAgaXMgZ2l2ZW4gdGhlIGRtYSBhZGRyZXNzLCB0aGUgZGV2aWNlIG93bnMgdGhpcyBtZW1vcnkgdW50aWwgZWl0aGVyCi0gICBwY2lfdW5tYXBfc2luZ2xlIG9yIHBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSBpcyBwZXJmb3JtZWQuICAqLwotCi1leHRlcm4gZG1hX2FkZHJfdCBwY2lfbWFwX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAqLCB2b2lkICosIHNpemVfdCwgaW50KTsKLQotLyogTGlrZXdpc2UsIGJ1dCBmb3IgYSBwYWdlIGluc3RlYWQgb2YgYW4gYWRkcmVzcy4gICovCi1leHRlcm4gZG1hX2FkZHJfdCBwY2lfbWFwX3BhZ2Uoc3RydWN0IHBjaV9kZXYgKiwgc3RydWN0IHBhZ2UgKiwKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nLCBzaXplX3QsIGludCk7Ci0KLS8qIFRlc3QgZm9yIHBjaV9tYXBfc2luZ2xlIG9yIHBjaV9tYXBfcGFnZSBoYXZpbmcgZ2VuZXJhdGVkIGFuIGVycm9yLiAgKi8KLQotc3RhdGljIGlubGluZSBpbnQKLXBjaV9kbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcikKLXsKLQlyZXR1cm4gZG1hX2FkZHIgPT0gMDsKLX0KLQotLyogVW5tYXAgYSBzaW5nbGUgc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9uLiAgVGhlIERNQV9BRERSIGFuZAotICAgU0laRSBtdXN0IG1hdGNoIHdoYXQgd2FzIHByb3ZpZGVkIGZvciBpbiBhIHByZXZpb3VzIHBjaV9tYXBfc2luZ2xlCi0gICBjYWxsLiAgQWxsIG90aGVyIHVzYWdlcyBhcmUgdW5kZWZpbmVkLiAgQWZ0ZXIgdGhpcyBjYWxsLCByZWFkcyBieQotICAgdGhlIGNwdSB0byB0aGUgYnVmZmVyIGFyZSBndWFyYW50ZWVkIHRvIHNlZSB3aGF0ZXZlciB0aGUgZGV2aWNlCi0gICB3cm90ZSB0aGVyZS4gICovCi0KLWV4dGVybiB2b2lkIHBjaV91bm1hcF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LCBpbnQpOwotZXh0ZXJuIHZvaWQgcGNpX3VubWFwX3BhZ2Uoc3RydWN0IHBjaV9kZXYgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LCBpbnQpOwotCi0vKiBwY2lfdW5tYXBfe3NpbmdsZSxwYWdlfSBpcyBub3QgYSBub3AsIHRodXMuLi4gKi8KLSNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCVwKLQlkbWFfYWRkcl90IEFERFJfTkFNRTsKLSNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKQkJXAotCV9fdTMyIExFTl9OQU1FOwotI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJCQlcCi0JKChQVFIpLT5BRERSX05BTUUpCi0jZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKQkJXAotCSgoKFBUUiktPkFERFJfTkFNRSkgPSAoVkFMKSkKLSNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJCVwKLQkoKFBUUiktPkxFTl9OQU1FKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCQlcCi0JKCgoUFRSKS0+TEVOX05BTUUpID0gKFZBTCkpCi0KLS8qIE1hcCBhIHNldCBvZiBidWZmZXJzIGRlc2NyaWJlZCBieSBzY2F0dGVybGlzdCBpbiBzdHJlYW1pbmcgbW9kZSBmb3IKLSAgIFBDSSBETUEuICBUaGlzIGlzIHRoZSBzY2F0dGVyLWdhdGhlciB2ZXJzaW9uIG9mIHRoZSBhYm92ZQotICAgcGNpX21hcF9zaW5nbGUgaW50ZXJmYWNlLiAgSGVyZSB0aGUgc2NhdHRlciBnYXRoZXIgbGlzdCBlbGVtZW50cwotICAgYXJlIGVhY2ggdGFnZ2VkIHdpdGggdGhlIGFwcHJvcHJpYXRlIFBDSSBkbWEgYWRkcmVzcyBhbmQgbGVuZ3RoLgotICAgVGhleSBhcmUgb2J0YWluZWQgdmlhIHNnX2RtYV97YWRkcmVzcyxsZW5ndGh9KFNHKS4KLQotICAgTk9URTogQW4gaW1wbGVtZW50YXRpb24gbWF5IGJlIGFibGUgdG8gdXNlIGEgc21hbGxlciBudW1iZXIgb2YgRE1BCi0gICBhZGRyZXNzL2xlbmd0aCBwYWlycyB0aGFuIHRoZXJlIGFyZSBTRyB0YWJsZSBlbGVtZW50cy4gIChmb3IKLSAgIGV4YW1wbGUgdmlhIHZpcnR1YWwgbWFwcGluZyBjYXBhYmlsaXRpZXMpIFRoZSByb3V0aW5lIHJldHVybnMgdGhlCi0gICBudW1iZXIgb2YgYWRkci9sZW5ndGggcGFpcnMgYWN0dWFsbHkgdXNlZCwgYXQgbW9zdCBuZW50cy4KLQotICAgRGV2aWNlIG93bmVyc2hpcCBpc3N1ZXMgYXMgbWVudGlvbmVkIGFib3ZlIGZvciBwY2lfbWFwX3NpbmdsZSBhcmUKLSAgIHRoZSBzYW1lIGhlcmUuICAqLwotCi1leHRlcm4gaW50IHBjaV9tYXBfc2coc3RydWN0IHBjaV9kZXYgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgaW50KTsKLQotLyogVW5tYXAgYSBzZXQgb2Ygc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9ucy4gIEFnYWluLCBjcHUgcmVhZAotICAgcnVsZXMgY29uY2VybmluZyBjYWxscyBoZXJlIGFyZSB0aGUgc2FtZSBhcyBmb3IgcGNpX3VubWFwX3NpbmdsZSgpCi0gICBhYm92ZS4gICovCi0KLWV4dGVybiB2b2lkIHBjaV91bm1hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQpOwotCi0vKiBNYWtlIHBoeXNpY2FsIG1lbW9yeSBjb25zaXN0ZW50IGZvciBhIHNpbmdsZSBzdHJlYW1pbmcgbW9kZSBETUEKLSAgIHRyYW5zbGF0aW9uIGFmdGVyIGEgdHJhbnNmZXIgYW5kIGRldmljZSBjdXJyZW50bHkgaGFzIG93bmVyc2hpcAotICAgb2YgdGhlIGJ1ZmZlci4KLQotICAgSWYgeW91IHBlcmZvcm0gYSBwY2lfbWFwX3NpbmdsZSgpIGJ1dCB3aXNoIHRvIGludGVycm9nYXRlIHRoZQotICAgYnVmZmVyIHVzaW5nIHRoZSBjcHUsIHlldCBkbyBub3Qgd2lzaCB0byB0ZWFyZG93biB0aGUgUENJIGRtYQotICAgbWFwcGluZywgeW91IG11c3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBkb2luZyBzby4gIEF0IHRoZSBuZXh0Ci0gICBwb2ludCB5b3UgZ2l2ZSB0aGUgUENJIGRtYSBhZGRyZXNzIGJhY2sgdG8gdGhlIGNhcmQsIHlvdSBtdXN0IGZpcnN0Ci0gICBwZXJmb3JtIGEgcGNpX2RtYV9zeW5jX2Zvcl9kZXZpY2UsIGFuZCB0aGVuIHRoZSBkZXZpY2UgYWdhaW4gb3ducwotICAgdGhlIGJ1ZmZlci4gICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZAotcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCi0JCQkgICAgbG9uZyBzaXplLCBpbnQgZGlyZWN0aW9uKQotewotCS8qIE5vdGhpbmcgdG8gZG8uICAqLwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLAotCQkJICAgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQotewotCS8qIE5vdGhpbmcgdG8gZG8uICAqLwotfQotCi0vKiBNYWtlIHBoeXNpY2FsIG1lbW9yeSBjb25zaXN0ZW50IGZvciBhIHNldCBvZiBzdHJlYW1pbmcgbW9kZSBETUEKLSAgIHRyYW5zbGF0aW9ucyBhZnRlciBhIHRyYW5zZmVyLiAgVGhlIHNhbWUgYXMgcGNpX2RtYV9zeW5jX3NpbmdsZV8qCi0gICBidXQgZm9yIGEgc2NhdHRlci1nYXRoZXIgbGlzdCwgc2FtZSBydWxlcyBhbmQgdXNhZ2UuICAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQKLXBjaV9kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCi0JCQlpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCi17Ci0JLyogTm90aGluZyB0byBkby4gICovCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAotcGNpX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCSAgIGludCBuZW50cywgaW50IGRpcmVjdGlvbikKLXsKLQkvKiBOb3RoaW5nIHRvIGRvLiAgKi8KLX0KLQotLyogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIFBDSSBkZXZpY2UgRE1BIGFkZHJlc3MgbWFzayBjYW4KLSAgIGJlIHN1cHBvcnRlZCBwcm9wZXJseS4gIEZvciBleGFtcGxlLCBpZiB5b3VyIGRldmljZSBjYW4KLSAgIG9ubHkgZHJpdmUgdGhlIGxvdyAyNC1iaXRzIGR1cmluZyBQQ0kgYnVzIG1hc3RlcmluZywgdGhlbgotICAgeW91IHdvdWxkIHBhc3MgMHgwMGZmZmZmZiBhcyB0aGUgbWFzayB0byB0aGlzIGZ1bmN0aW9uLiAgKi8KLQotZXh0ZXJuIGludCBwY2lfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHU2NCBtYXNrKTsKLQogI2lmZGVmIENPTkZJR19QQ0kKKworLyogaW1wbGVtZW50IHRoZSBwY2lfIERNQSBBUEkgaW4gdGVybXMgb2YgdGhlIGdlbmVyaWMgZGV2aWNlIGRtYV8gb25lICovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGNpLWRtYS1jb21wYXQuaD4KKwogc3RhdGljIGlubGluZSB2b2lkIHBjaV9kbWFfYnVyc3RfYWR2aWNlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCQllbnVtIHBjaV9kbWFfYnVyc3Rfc3RyYXRlZ3kgKnN0cmF0LAogCQkJCQl1bnNpZ25lZCBsb25nICpzdHJhdGVneV9wYXJhbWV0ZXIpCkBAIC0yNDQsOCArMTEzLDYgQEAKIAlyZXR1cm4gaG9zZS0+bmVlZF9kb21haW5faW5mbzsKIH0KIAotc3RydWN0IHBjaV9kZXYgKmFscGhhX2dlbmRldl90b19wY2koc3RydWN0IGRldmljZSAqZGV2KTsKLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogLyogVmFsdWVzIGZvciB0aGUgYHdoaWNoJyBhcmd1bWVudCB0byBzeXNfcGNpY29uZmlnX2lvYmFzZS4gICovCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9hbHBoYS9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCAzMmM3YTVjLi42NWNmM2UyIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvYWxwaGEvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTY4LDYgKzY4LDcgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorI2RlZmluZSBhcmNoX2hhc19zaW5nbGVfc3RlcCgpCQkoMSkKICNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpICgoKHJlZ3MpLT5wcyAmIDgpICE9IDApCiAjZGVmaW5lIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykgKChyZWdzKS0+cGMpCiAjZGVmaW5lIHByb2ZpbGVfcGMocmVncykgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvb3NmX3N5cy5jCmluZGV4IDYyNjE5ZjIuLjUzYzIxM2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL29zZl9zeXMuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9vc2Zfc3lzLmMKQEAgLTM2MSw3ICszNjEsNyBAQAogU1lTQ0FMTF9ERUZJTkU0KG9zZl9tb3VudCwgdW5zaWduZWQgbG9uZywgdHlwZW5yLCBjaGFyIF9fdXNlciAqLCBwYXRoLAogCQlpbnQsIGZsYWcsIHZvaWQgX191c2VyICosIGRhdGEpCiB7Ci0JaW50IHJldHZhbCA9IC1FSU5WQUw7CisJaW50IHJldHZhbDsKIAljaGFyICpuYW1lOwogCiAJbmFtZSA9IGdldG5hbWUocGF0aCk7CkBAIC0zNzksNiArMzc5LDcgQEAKIAkJcmV0dmFsID0gb3NmX3Byb2Nmc19tb3VudChuYW1lLCBkYXRhLCBmbGFnKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKKwkJcmV0dmFsID0gLUVJTlZBTDsKIAkJcHJpbnRrKCJvc2ZfbW91bnQoJWxkLCAleClcbiIsIHR5cGVuciwgZmxhZyk7CiAJfQogCXB1dG5hbWUobmFtZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wY2ktbm9vcC5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvcGNpLW5vb3AuYwppbmRleCBjMTlhMzc2Li44MjNhNTQwIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9wY2ktbm9vcC5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3BjaS1ub29wLmMKQEAgLTEwNiw1OCArMTA2LDggQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLS8qIFN0dWJzIGZvciB0aGUgcm91dGluZXMgaW4gcGNpX2lvbW11LmM6ICovCi0KLXZvaWQgKgotX19wY2lfYWxsb2NfY29uc2lzdGVudChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc2l6ZV90IHNpemUsCi0JCSAgICAgICBkbWFfYWRkcl90ICpkbWFfYWRkcnAsIGdmcF90IGdmcCkKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQotdm9pZAotcGNpX2ZyZWVfY29uc2lzdGVudChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc2l6ZV90IHNpemUsIHZvaWQgKmNwdV9hZGRyLAotCQkgICAgZG1hX2FkZHJfdCBkbWFfYWRkcikKLXsKLX0KLQotZG1hX2FkZHJfdAotcGNpX21hcF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgKmNwdV9hZGRyLCBzaXplX3Qgc2l6ZSwKLQkgICAgICAgaW50IGRpcmVjdGlvbikKLXsKLQlyZXR1cm4gKGRtYV9hZGRyX3QpIDA7Ci19Ci0KLXZvaWQKLXBjaV91bm1hcF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAotCQkgaW50IGRpcmVjdGlvbikKLXsKLX0KLQotaW50Ci1wY2lfbWFwX3NnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCi0JICAgaW50IGRpcmVjdGlvbikKLXsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZAotcGNpX3VubWFwX3NnKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCi0JICAgICBpbnQgZGlyZWN0aW9uKQotewotfQotCi1pbnQKLXBjaV9kbWFfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBtYXNrKQotewotCXJldHVybiAwOwotfQotCi0vKiBHZW5lcmljIERNQSBtYXBwaW5nIGZ1bmN0aW9uczogKi8KLQotdm9pZCAqCi1kbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwKQorc3RhdGljIHZvaWQgKmFscGhhX25vb3BfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgICAgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwKQogewogCXZvaWQgKnJldDsKIApAQCAtMTcxLDExICsxMjEsMjIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1FWFBPUlRfU1lNQk9MKGRtYV9hbGxvY19jb2hlcmVudCk7CitzdGF0aWMgdm9pZCBhbHBoYV9ub29wX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgIHZvaWQgKmNwdV9hZGRyLCBkbWFfYWRkcl90IGRtYV9hZGRyKQoreworCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpY3B1X2FkZHIsIGdldF9vcmRlcihzaXplKSk7Cit9CiAKLWludAotZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCBpbnQgbmVudHMsCi0JICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQorc3RhdGljIGRtYV9hZGRyX3QgYWxwaGFfbm9vcF9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkJICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJcmV0dXJuIHBhZ2VfdG9fcGEocGFnZSkgKyBvZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgYWxwaGFfbm9vcF9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgaW50IG5lbnRzLAorCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCWludCBpOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CkBAIC0xOTIsMTkgKzE1MywzNyBAQAogCXJldHVybiBuZW50czsKIH0KIAotRVhQT1JUX1NZTUJPTChkbWFfbWFwX3NnKTsKK3N0YXRpYyBpbnQgYWxwaGFfbm9vcF9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcikKK3sKKwlyZXR1cm4gMDsKK30KIAotaW50Ci1kbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3N0YXRpYyBpbnQgYWxwaGFfbm9vcF9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3sKKwlyZXR1cm4gbWFzayA8IDB4MDBmZmZmZmZVTCA/IDAgOiAxOworfQorCitzdGF0aWMgaW50IGFscGhhX25vb3Bfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKIHsKIAlpZiAoIWRldi0+ZG1hX21hc2sgfHwgIWRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKSkKIAkJcmV0dXJuIC1FSU87CiAKIAkqZGV2LT5kbWFfbWFzayA9IG1hc2s7Ci0KIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woZG1hX3NldF9tYXNrKTsKKworc3RydWN0IGRtYV9tYXBfb3BzIGFscGhhX25vb3Bfb3BzID0geworCS5hbGxvY19jb2hlcmVudAkJPSBhbHBoYV9ub29wX2FsbG9jX2NvaGVyZW50LAorCS5mcmVlX2NvaGVyZW50CQk9IGFscGhhX25vb3BfZnJlZV9jb2hlcmVudCwKKwkubWFwX3BhZ2UJCT0gYWxwaGFfbm9vcF9tYXBfcGFnZSwKKwkubWFwX3NnCQkJPSBhbHBoYV9ub29wX21hcF9zZywKKwkubWFwcGluZ19lcnJvcgkJPSBhbHBoYV9ub29wX21hcHBpbmdfZXJyb3IsCisJLmRtYV9zdXBwb3J0ZWQJCT0gYWxwaGFfbm9vcF9zdXBwb3J0ZWQsCisJLnNldF9kbWFfbWFzawkJPSBhbHBoYV9ub29wX3NldF9tYXNrLAorfTsKKworc3RydWN0IGRtYV9tYXBfb3BzICpkbWFfb3BzID0gJmFscGhhX25vb3Bfb3BzOworRVhQT1JUX1NZTUJPTChkbWFfb3BzKTsKIAogdm9pZCBfX2lvbWVtICpwY2lfaW9tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGJhciwgdW5zaWduZWQgbG9uZyBtYXhsZW4pCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wY2lfaW9tbXUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3BjaV9pb21tdS5jCmluZGV4IDg0NDk1MDQuLmNlOWU1NGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3BjaV9pb21tdS5jCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3BjaV9pb21tdS5jCkBAIC0yMTYsMTAgKzIxNiwzMCBAQAogCWZvciAoaSA9IDA7IGkgPCBuOyArK2kpCiAJCXBbaV0gPSAwOwogfQotDAotLyogVHJ1ZSBpZiB0aGUgbWFjaGluZSBzdXBwb3J0cyBEQUMgYWRkcmVzc2luZywgYW5kIERFViBjYW4KLSAgIG1ha2UgdXNlIG9mIGl0IGdpdmVuIE1BU0suICAqLwotc3RhdGljIGludCBwY2lfZGFjX2RtYV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCB1NjQgbWFzayk7CisKKy8qCisgKiBUcnVlIGlmIHRoZSBtYWNoaW5lIHN1cHBvcnRzIERBQyBhZGRyZXNzaW5nLCBhbmQgREVWIGNhbgorICogbWFrZSB1c2Ugb2YgaXQgZ2l2ZW4gTUFTSy4KKyAqLworc3RhdGljIGludCBwY2lfZGFjX2RtYV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IG1hc2spCit7CisJZG1hNjRfYWRkcl90IGRhY19vZmZzZXQgPSBhbHBoYV9tdi5wY2lfZGFjX29mZnNldDsKKwlpbnQgb2sgPSAxOworCisJLyogSWYgdGhpcyBpcyBub3Qgc2V0LCB0aGUgbWFjaGluZSBkb2Vzbid0IHN1cHBvcnQgREFDIGF0IGFsbC4gICovCisJaWYgKGRhY19vZmZzZXQgPT0gMCkKKwkJb2sgPSAwOworCisJLyogVGhlIGRldmljZSBoYXMgdG8gYmUgYWJsZSB0byBhZGRyZXNzIG91ciBEQUMgYml0LiAgKi8KKwlpZiAoKGRhY19vZmZzZXQgJiBkZXYtPmRtYV9tYXNrKSAhPSBkYWNfb2Zmc2V0KQorCQlvayA9IDA7CisKKwkvKiBJZiBib3RoIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG1ldCwgd2UgYXJlIGZpbmUuICovCisJREJHQSgicGNpX2RhY19kbWFfc3VwcG9ydGVkICVzIGZyb20gJXBcbiIsCisJICAgICBvayA/ICJ5ZXMiIDogIm5vIiwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKKworCXJldHVybiBvazsKK30KIAogLyogTWFwIGEgc2luZ2xlIGJ1ZmZlciBvZiB0aGUgaW5kaWNhdGVkIHNpemUgZm9yIFBDSSBETUEgaW4gc3RyZWFtaW5nCiAgICBtb2RlLiAgVGhlIDMyLWJpdCBQQ0kgYnVzIG1hc3RlcmluZyBhZGRyZXNzIHRvIHVzZSBpcyByZXR1cm5lZC4KQEAgLTMwMSwyMyArMzIxLDM2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotZG1hX2FkZHJfdAotcGNpX21hcF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHZvaWQgKmNwdV9hZGRyLCBzaXplX3Qgc2l6ZSwgaW50IGRpcikKKy8qIEhlbHBlciBmb3IgZ2VuZXJpYyBETUEtbWFwcGluZyBmdW5jdGlvbnMuICovCitzdGF0aWMgc3RydWN0IHBjaV9kZXYgKmFscGhhX2dlbmRldl90b19wY2koc3RydWN0IGRldmljZSAqZGV2KQogewotCWludCBkYWNfYWxsb3dlZDsgCisJaWYgKGRldiAmJiBkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKQorCQlyZXR1cm4gdG9fcGNpX2RldihkZXYpOwogCi0JaWYgKGRpciA9PSBQQ0lfRE1BX05PTkUpCi0JCUJVRygpOworCS8qIEFzc3VtZSB0aGF0IG5vbi1QQ0kgZGV2aWNlcyBhc2tpbmcgZm9yIERNQSBhcmUgZWl0aGVyIElTQSBvciBFSVNBLAorCSAgIEJVRygpIG90aGVyd2lzZS4gKi8KKwlCVUdfT04oIWlzYV9icmlkZ2UpOwogCi0JZGFjX2FsbG93ZWQgPSBwZGV2ID8gcGNpX2RhY19kbWFfc3VwcG9ydGVkKHBkZXYsIHBkZXYtPmRtYV9tYXNrKSA6IDA7IAotCXJldHVybiBwY2lfbWFwX3NpbmdsZV8xKHBkZXYsIGNwdV9hZGRyLCBzaXplLCBkYWNfYWxsb3dlZCk7CisJLyogQXNzdW1lIG5vbi1idXNtYXN0ZXIgSVNBIERNQSB3aGVuIGRtYV9tYXNrIGlzIG5vdCBzZXQgKHRoZSBJU0EKKwkgICBicmlkZ2UgaXMgYnVzIG1hc3RlciB0aGVuKS4gKi8KKwlpZiAoIWRldiB8fCAhZGV2LT5kbWFfbWFzayB8fCAhKmRldi0+ZG1hX21hc2spCisJCXJldHVybiBpc2FfYnJpZGdlOworCisJLyogRm9yIEVJU0EgYnVzIG1hc3RlcnMsIHJldHVybiBpc2FfYnJpZGdlIChpdCBtaWdodCBoYXZlIHNtYWxsZXIKKwkgICBkbWFfbWFzayBkdWUgdG8gd2lyaW5nIGxpbWl0YXRpb25zKS4gKi8KKwlpZiAoKmRldi0+ZG1hX21hc2sgPj0gaXNhX2JyaWRnZS0+ZG1hX21hc2spCisJCXJldHVybiBpc2FfYnJpZGdlOworCisJLyogVGhpcyBhc3N1bWVzIElTQSBidXMgbWFzdGVyIHdpdGggZG1hX21hc2sgMHhmZmZmZmYuICovCisJcmV0dXJuIE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MKHBjaV9tYXBfc2luZ2xlKTsKIAotZG1hX2FkZHJfdAotcGNpX21hcF9wYWdlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcikKK3N0YXRpYyBkbWFfYWRkcl90IGFscGhhX3BjaV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJCSAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhbHBoYV9nZW5kZXZfdG9fcGNpKGRldik7CiAJaW50IGRhY19hbGxvd2VkOwogCiAJaWYgKGRpciA9PSBQQ0lfRE1BX05PTkUpCkBAIC0zMjcsNyArMzYwLDYgQEAKIAlyZXR1cm4gcGNpX21hcF9zaW5nbGVfMShwZGV2LCAoY2hhciAqKXBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldCwgCiAJCQkJc2l6ZSwgZGFjX2FsbG93ZWQpOwogfQotRVhQT1JUX1NZTUJPTChwY2lfbWFwX3BhZ2UpOwogCiAvKiBVbm1hcCBhIHNpbmdsZSBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb24uICBUaGUgRE1BX0FERFIgYW5kCiAgICBTSVpFIG11c3QgbWF0Y2ggd2hhdCB3YXMgcHJvdmlkZWQgZm9yIGluIGEgcHJldmlvdXMgcGNpX21hcF9zaW5nbGUKQEAgLTMzNSwxNiArMzY3LDE3IEBACiAgICB0aGUgY3B1IHRvIHRoZSBidWZmZXIgYXJlIGd1YXJhbnRlZWQgdG8gc2VlIHdoYXRldmVyIHRoZSBkZXZpY2UKICAgIHdyb3RlIHRoZXJlLiAgKi8KIAotdm9pZAotcGNpX3VubWFwX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUsCi0JCSBpbnQgZGlyZWN0aW9uKQorc3RhdGljIHZvaWQgYWxwaGFfcGNpX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLAorCQkJCSBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJCSBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWxwaGFfZ2VuZGV2X3RvX3BjaShkZXYpOwogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IHBkZXYgPyBwZGV2LT5zeXNkYXRhIDogcGNpX2lzYV9ob3NlOwogCXN0cnVjdCBwY2lfaW9tbXVfYXJlbmEgKmFyZW5hOwogCWxvbmcgZG1hX29mcywgbnBhZ2VzOwogCi0JaWYgKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpCisJaWYgKGRpciA9PSBQQ0lfRE1BX05PTkUpCiAJCUJVRygpOwogCiAJaWYgKGRtYV9hZGRyID49IF9fZGlyZWN0X21hcF9iYXNlCkBAIC0zOTMsMjUgKzQyNiwxNiBAQAogCURCR0EyKCJwY2lfdW5tYXBfc2luZ2xlOiBzZyBbJWxseCwlenhdIG5wICVsZCBmcm9tICVwXG4iLAogCSAgICAgIGRtYV9hZGRyLCBzaXplLCBucGFnZXMsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9Ci1FWFBPUlRfU1lNQk9MKHBjaV91bm1hcF9zaW5nbGUpOwotCi12b2lkCi1wY2lfdW5tYXBfcGFnZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKLQkgICAgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCi17Ci0JcGNpX3VubWFwX3NpbmdsZShwZGV2LCBkbWFfYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKLX0KLUVYUE9SVF9TWU1CT0wocGNpX3VubWFwX3BhZ2UpOwogCiAvKiBBbGxvY2F0ZSBhbmQgbWFwIGtlcm5lbCBidWZmZXIgdXNpbmcgY29uc2lzdGVudCBtb2RlIERNQSBmb3IgUENJCiAgICBkZXZpY2UuICBSZXR1cm5zIG5vbi1OVUxMIGNwdS12aWV3IHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBpZgogICAgc3VjY2Vzc2Z1bCBhbmQgc2V0cyAqRE1BX0FERFJQIHRvIHRoZSBwY2kgc2lkZSBkbWEgYWRkcmVzcyBhcyB3ZWxsLAogICAgZWxzZSBETUFfQUREUlAgaXMgdW5kZWZpbmVkLiAgKi8KIAotdm9pZCAqCi1fX3BjaV9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc2l6ZSwKLQkJICAgICAgIGRtYV9hZGRyX3QgKmRtYV9hZGRycCwgZ2ZwX3QgZ2ZwKQorc3RhdGljIHZvaWQgKmFscGhhX3BjaV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCSAgICAgIGRtYV9hZGRyX3QgKmRtYV9hZGRycCwgZ2ZwX3QgZ2ZwKQogeworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWxwaGFfZ2VuZGV2X3RvX3BjaShkZXYpOwogCXZvaWQgKmNwdV9hZGRyOwogCWxvbmcgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CiAKQEAgLTQzOSwxMyArNDYzLDEyIEBACiAJCWdmcCB8PSBHRlBfRE1BOwogCQlnb3RvIHRyeV9hZ2FpbjsKIAl9Ci0JCQorCiAJREJHQTIoInBjaV9hbGxvY19jb25zaXN0ZW50OiAlenggLT4gWyVwLCVsbHhdIGZyb20gJXBcbiIsCiAJICAgICAgc2l6ZSwgY3B1X2FkZHIsICpkbWFfYWRkcnAsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiAKIAlyZXR1cm4gY3B1X2FkZHI7CiB9Ci1FWFBPUlRfU1lNQk9MKF9fcGNpX2FsbG9jX2NvbnNpc3RlbnQpOwogCiAvKiBGcmVlIGFuZCB1bm1hcCBhIGNvbnNpc3RlbnQgRE1BIGJ1ZmZlci4gIENQVV9BRERSIGFuZCBETUFfQUREUiBtdXN0CiAgICBiZSB2YWx1ZXMgdGhhdCB3ZXJlIHJldHVybmVkIGZyb20gcGNpX2FsbG9jX2NvbnNpc3RlbnQuICBTSVpFIG11c3QKQEAgLTQ1MywxNyArNDc2LDE2IEBACiAgICBSZWZlcmVuY2VzIHRvIHRoZSBtZW1vcnkgYW5kIG1hcHBpbmdzIGFzc29jaWF0ZWQgd2l0aCBDUFVfQUREUiBvcgogICAgRE1BX0FERFIgcGFzdCB0aGlzIGNhbGwgYXJlIGlsbGVnYWwuICAqLwogCi12b2lkCi1wY2lfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1X2FkZHIsCi0JCSAgICBkbWFfYWRkcl90IGRtYV9hZGRyKQorc3RhdGljIHZvaWQgYWxwaGFfcGNpX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgdm9pZCAqY3B1X2FkZHIsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCiB7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhbHBoYV9nZW5kZXZfdG9fcGNpKGRldik7CiAJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBkbWFfYWRkciwgc2l6ZSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKWNwdV9hZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOwogCiAJREJHQTIoInBjaV9mcmVlX2NvbnNpc3RlbnQ6IFslbGx4LCV6eF0gZnJvbSAlcFxuIiwKIAkgICAgICBkbWFfYWRkciwgc2l6ZSwgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KLUVYUE9SVF9TWU1CT0wocGNpX2ZyZWVfY29uc2lzdGVudCk7CiAKIC8qIENsYXNzaWZ5IHRoZSBlbGVtZW50cyBvZiB0aGUgc2NhdHRlcmxpc3QuICBXcml0ZSBkbWFfYWRkcmVzcwogICAgb2YgZWFjaCBlbGVtZW50IHdpdGg6CkBAIC02MjYsMjMgKzY0OCwyMSBAQAogCXJldHVybiAxOwogfQogCi1pbnQKLXBjaV9tYXBfc2coc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKLQkgICBpbnQgZGlyZWN0aW9uKQorc3RhdGljIGludCBhbHBoYV9wY2lfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCSAgICBpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFscGhhX2dlbmRldl90b19wY2koZGV2KTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnN0YXJ0LCAqZW5kLCAqb3V0OwogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKIAlzdHJ1Y3QgcGNpX2lvbW11X2FyZW5hICphcmVuYTsKIAlkbWFfYWRkcl90IG1heF9kbWE7CiAJaW50IGRhY19hbGxvd2VkOwotCXN0cnVjdCBkZXZpY2UgKmRldjsKIAotCWlmIChkaXJlY3Rpb24gPT0gUENJX0RNQV9OT05FKQorCWlmIChkaXIgPT0gUENJX0RNQV9OT05FKQogCQlCVUcoKTsKIAotCWRhY19hbGxvd2VkID0gcGRldiA/IHBjaV9kYWNfZG1hX3N1cHBvcnRlZChwZGV2LCBwZGV2LT5kbWFfbWFzaykgOiAwOwotCi0JZGV2ID0gcGRldiA/ICZwZGV2LT5kZXYgOiBOVUxMOworCWRhY19hbGxvd2VkID0gZGV2ID8gcGNpX2RhY19kbWFfc3VwcG9ydGVkKHBkZXYsIHBkZXYtPmRtYV9tYXNrKSA6IDA7CiAKIAkvKiBGYXN0IHBhdGggc2luZ2xlIGVudHJ5IHNjYXR0ZXJsaXN0cy4gICovCiAJaWYgKG5lbnRzID09IDEpIHsKQEAgLTY5OSwxOSArNzE5LDE5IEBACiAJLyogU29tZSBhbGxvY2F0aW9uIGZhaWxlZCB3aGlsZSBtYXBwaW5nIHRoZSBzY2F0dGVybGlzdAogCSAgIGVudHJpZXMuICBVbm1hcCB0aGVtIG5vdy4gICovCiAJaWYgKG91dCA+IHN0YXJ0KQotCQlwY2lfdW5tYXBfc2cocGRldiwgc3RhcnQsIG91dCAtIHN0YXJ0LCBkaXJlY3Rpb24pOworCQlwY2lfdW5tYXBfc2cocGRldiwgc3RhcnQsIG91dCAtIHN0YXJ0LCBkaXIpOwogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChwY2lfbWFwX3NnKTsKIAogLyogVW5tYXAgYSBzZXQgb2Ygc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9ucy4gIEFnYWluLCBjcHUgcmVhZAogICAgcnVsZXMgY29uY2VybmluZyBjYWxscyBoZXJlIGFyZSB0aGUgc2FtZSBhcyBmb3IgcGNpX3VubWFwX3NpbmdsZSgpCiAgICBhYm92ZS4gICovCiAKLXZvaWQKLXBjaV91bm1hcF9zZyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAotCSAgICAgaW50IGRpcmVjdGlvbikKK3N0YXRpYyB2b2lkIGFscGhhX3BjaV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgICAgICAgaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhbHBoYV9nZW5kZXZfdG9fcGNpKGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2U7CiAJc3RydWN0IHBjaV9pb21tdV9hcmVuYSAqYXJlbmE7CkBAIC03MTksNyArNzM5LDcgQEAKIAlkbWFfYWRkcl90IG1heF9kbWE7CiAJZG1hX2FkZHJfdCBmYmVnLCBmZW5kOwogCi0JaWYgKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpCisJaWYgKGRpciA9PSBQQ0lfRE1BX05PTkUpCiAJCUJVRygpOwogCiAJaWYgKCEgYWxwaGFfbXYubXZfcGNpX3RiaSkKQEAgLTc4MywxNSArODAzLDEzIEBACiAKIAlEQkdBKCJwY2lfdW5tYXBfc2c6ICVsZCBlbnRyaWVzXG4iLCBuZW50cyAtIChlbmQgLSBzZykpOwogfQotRVhQT1JUX1NZTUJPTChwY2lfdW5tYXBfc2cpOwotCiAKIC8qIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBQQ0kgZGV2aWNlIERNQSBhZGRyZXNzIG1hc2sgY2FuIGJlCiAgICBzdXBwb3J0ZWQgcHJvcGVybHkuICAqLwogCi1pbnQKLXBjaV9kbWFfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1NjQgbWFzaykKK3N0YXRpYyBpbnQgYWxwaGFfcGNpX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQogeworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWxwaGFfZ2VuZGV2X3RvX3BjaShkZXYpOwogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKIAlzdHJ1Y3QgcGNpX2lvbW11X2FyZW5hICphcmVuYTsKIApAQCAtODE4LDcgKzgzNiw2IEBACiAKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0wocGNpX2RtYV9zdXBwb3J0ZWQpOwogCiAMCiAvKgpAQCAtOTE4LDY2ICs5MzUsMzIgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogVHJ1ZSBpZiB0aGUgbWFjaGluZSBzdXBwb3J0cyBEQUMgYWRkcmVzc2luZywgYW5kIERFViBjYW4KLSAgIG1ha2UgdXNlIG9mIGl0IGdpdmVuIE1BU0suICAqLwotCi1zdGF0aWMgaW50Ci1wY2lfZGFjX2RtYV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IG1hc2spCitzdGF0aWMgaW50IGFscGhhX3BjaV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcikKIHsKLQlkbWE2NF9hZGRyX3QgZGFjX29mZnNldCA9IGFscGhhX212LnBjaV9kYWNfb2Zmc2V0OwotCWludCBvayA9IDE7Ci0KLQkvKiBJZiB0aGlzIGlzIG5vdCBzZXQsIHRoZSBtYWNoaW5lIGRvZXNuJ3Qgc3VwcG9ydCBEQUMgYXQgYWxsLiAgKi8KLQlpZiAoZGFjX29mZnNldCA9PSAwKQotCQlvayA9IDA7Ci0KLQkvKiBUaGUgZGV2aWNlIGhhcyB0byBiZSBhYmxlIHRvIGFkZHJlc3Mgb3VyIERBQyBiaXQuICAqLwotCWlmICgoZGFjX29mZnNldCAmIGRldi0+ZG1hX21hc2spICE9IGRhY19vZmZzZXQpCi0JCW9rID0gMDsKLQotCS8qIElmIGJvdGggY29uZGl0aW9ucyBhYm92ZSBhcmUgbWV0LCB3ZSBhcmUgZmluZS4gKi8KLQlEQkdBKCJwY2lfZGFjX2RtYV9zdXBwb3J0ZWQgJXMgZnJvbSAlcFxuIiwKLQkgICAgIG9rID8gInllcyIgOiAibm8iLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwotCi0JcmV0dXJuIG9rOworCXJldHVybiBkbWFfYWRkciA9PSAwOwogfQogCi0vKiBIZWxwZXIgZm9yIGdlbmVyaWMgRE1BLW1hcHBpbmcgZnVuY3Rpb25zLiAqLwotCi1zdHJ1Y3QgcGNpX2RldiAqCi1hbHBoYV9nZW5kZXZfdG9fcGNpKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpZiAoZGV2ICYmIGRldi0+YnVzID09ICZwY2lfYnVzX3R5cGUpCi0JCXJldHVybiB0b19wY2lfZGV2KGRldik7Ci0KLQkvKiBBc3N1bWUgdGhhdCBub24tUENJIGRldmljZXMgYXNraW5nIGZvciBETUEgYXJlIGVpdGhlciBJU0Egb3IgRUlTQSwKLQkgICBCVUcoKSBvdGhlcndpc2UuICovCi0JQlVHX09OKCFpc2FfYnJpZGdlKTsKLQotCS8qIEFzc3VtZSBub24tYnVzbWFzdGVyIElTQSBETUEgd2hlbiBkbWFfbWFzayBpcyBub3Qgc2V0ICh0aGUgSVNBCi0JICAgYnJpZGdlIGlzIGJ1cyBtYXN0ZXIgdGhlbikuICovCi0JaWYgKCFkZXYgfHwgIWRldi0+ZG1hX21hc2sgfHwgISpkZXYtPmRtYV9tYXNrKQotCQlyZXR1cm4gaXNhX2JyaWRnZTsKLQotCS8qIEZvciBFSVNBIGJ1cyBtYXN0ZXJzLCByZXR1cm4gaXNhX2JyaWRnZSAoaXQgbWlnaHQgaGF2ZSBzbWFsbGVyCi0JICAgZG1hX21hc2sgZHVlIHRvIHdpcmluZyBsaW1pdGF0aW9ucykuICovCi0JaWYgKCpkZXYtPmRtYV9tYXNrID49IGlzYV9icmlkZ2UtPmRtYV9tYXNrKQotCQlyZXR1cm4gaXNhX2JyaWRnZTsKLQotCS8qIFRoaXMgYXNzdW1lcyBJU0EgYnVzIG1hc3RlciB3aXRoIGRtYV9tYXNrIDB4ZmZmZmZmLiAqLwotCXJldHVybiBOVUxMOwotfQotRVhQT1JUX1NZTUJPTChhbHBoYV9nZW5kZXZfdG9fcGNpKTsKLQotaW50Ci1kbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3N0YXRpYyBpbnQgYWxwaGFfcGNpX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCiB7CiAJaWYgKCFkZXYtPmRtYV9tYXNrIHx8CiAJICAgICFwY2lfZG1hX3N1cHBvcnRlZChhbHBoYV9nZW5kZXZfdG9fcGNpKGRldiksIG1hc2spKQogCQlyZXR1cm4gLUVJTzsKIAogCSpkZXYtPmRtYV9tYXNrID0gbWFzazsKLQogCXJldHVybiAwOwogfQotRVhQT1JUX1NZTUJPTChkbWFfc2V0X21hc2spOworCitzdHJ1Y3QgZG1hX21hcF9vcHMgYWxwaGFfcGNpX29wcyA9IHsKKwkuYWxsb2NfY29oZXJlbnQJCT0gYWxwaGFfcGNpX2FsbG9jX2NvaGVyZW50LAorCS5mcmVlX2NvaGVyZW50CQk9IGFscGhhX3BjaV9mcmVlX2NvaGVyZW50LAorCS5tYXBfcGFnZQkJPSBhbHBoYV9wY2lfbWFwX3BhZ2UsCisJLnVubWFwX3BhZ2UJCT0gYWxwaGFfcGNpX3VubWFwX3BhZ2UsCisJLm1hcF9zZwkJCT0gYWxwaGFfcGNpX21hcF9zZywKKwkudW5tYXBfc2cJCT0gYWxwaGFfcGNpX3VubWFwX3NnLAorCS5tYXBwaW5nX2Vycm9yCQk9IGFscGhhX3BjaV9tYXBwaW5nX2Vycm9yLAorCS5kbWFfc3VwcG9ydGVkCQk9IGFscGhhX3BjaV9zdXBwb3J0ZWQsCisJLnNldF9kbWFfbWFzawkJPSBhbHBoYV9wY2lfc2V0X21hc2ssCit9OworCitzdHJ1Y3QgZG1hX21hcF9vcHMgKmRtYV9vcHMgPSAmYWxwaGFfcGNpX29wczsKK0VYUE9SVF9TWU1CT0woZG1hX29wcyk7CmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYWxwaGEva2VybmVsL3B0cmFjZS5jCmluZGV4IGUwNzIwNDFkLi45YWNhZGM2IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9wdHJhY2UuYwpAQCAtMjQ5LDYgKzI0OSwxNyBAQAogCXJldHVybiAobnNhdmVkICE9IDApOwogfQogCit2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCit7CisJLyogTWFyayBzaW5nbGUgc3RlcHBpbmcuICAqLworCXRhc2tfdGhyZWFkX2luZm8oY2hpbGQpLT5icHRfbnNhdmVkID0gLTE7Cit9CisKK3ZvaWQgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCit7CisJcHRyYWNlX2NhbmNlbF9icHQoY2hpbGQpOworfQorCiAvKgogICogQ2FsbGVkIGJ5IGtlcm5lbC9wdHJhY2UuYyB3aGVuIGRldGFjaGluZy4uCiAgKgpAQCAtMjU2LDcgKzI2Nyw3IEBACiAgKi8KIHZvaWQgcHRyYWNlX2Rpc2FibGUoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKIHsgCi0JcHRyYWNlX2NhbmNlbF9icHQoY2hpbGQpOworCXVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChjaGlsZCk7CiB9CiAKIGxvbmcgYXJjaF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LCBsb25nIGFkZHIsIGxvbmcgZGF0YSkKQEAgLTI5NSw1MiArMzA2LDYgQEAKIAkJREJHKERCR19NRU0sICgicG9rZSAkJWxkPC0lI2x4XG4iLCBhZGRyLCBkYXRhKSk7CiAJCXJldCA9IHB1dF9yZWcoY2hpbGQsIGFkZHIsIGRhdGEpOwogCQlicmVhazsKLQotCWNhc2UgUFRSQUNFX1NZU0NBTEw6Ci0JCS8qIGNvbnRpbnVlIGFuZCBzdG9wIGF0IG5leHQgKHJldHVybiBmcm9tKSBzeXNjYWxsICovCi0JY2FzZSBQVFJBQ0VfQ09OVDogICAgLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCi0JCXJldCA9IC1FSU87Ci0JCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQotCQkJYnJlYWs7Ci0JCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9TWVNDQUxMKQotCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCQllbHNlCi0JCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKLQkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7Ci0JCS8qIG1ha2Ugc3VyZSBzaW5nbGUtc3RlcCBicmVha3BvaW50IGlzIGdvbmUuICovCi0JCXB0cmFjZV9jYW5jZWxfYnB0KGNoaWxkKTsKLQkJd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKLQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0KLQkvKgotCSAqIE1ha2UgdGhlIGNoaWxkIGV4aXQuICBCZXN0IEkgY2FuIGRvIGlzIHNlbmQgaXQgYSBzaWdraWxsLgotCSAqIHBlcmhhcHMgaXQgc2hvdWxkIGJlIHB1dCBpbiB0aGUgc3RhdHVzIHRoYXQgaXQgd2FudHMgdG8KLQkgKiBleGl0LgotCSAqLwotCWNhc2UgUFRSQUNFX0tJTEw6Ci0JCXJldCA9IDA7Ci0JCWlmIChjaGlsZC0+ZXhpdF9zdGF0ZSA9PSBFWElUX1pPTUJJRSkKLQkJCWJyZWFrOwotCQljaGlsZC0+ZXhpdF9jb2RlID0gU0lHS0lMTDsKLQkJLyogbWFrZSBzdXJlIHNpbmdsZS1zdGVwIGJyZWFrcG9pbnQgaXMgZ29uZS4gKi8KLQkJcHRyYWNlX2NhbmNlbF9icHQoY2hpbGQpOwotCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOwotCQlicmVhazsKLQotCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6ICAvKiBleGVjdXRlIHNpbmdsZSBpbnN0cnVjdGlvbi4gKi8KLQkJcmV0ID0gLUVJTzsKLQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCi0JCQlicmVhazsKLQkJLyogTWFyayBzaW5nbGUgc3RlcHBpbmcuICAqLwotCQl0YXNrX3RocmVhZF9pbmZvKGNoaWxkKS0+YnB0X25zYXZlZCA9IC0xOwotCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKLQkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7Ci0JCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7Ci0JCS8qIGdpdmUgaXQgYSBjaGFuY2UgdG8gcnVuLiAqLwotCQlyZXQgPSAwOwotCQlicmVhazsKLQogCWRlZmF1bHQ6CiAJCXJldCA9IHB0cmFjZV9yZXF1ZXN0KGNoaWxkLCByZXF1ZXN0LCBhZGRyLCBkYXRhKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCAzYjE4MTI4Li5jYWRmZTJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTE1NSw2ICsxNTUsOSBAQAogY29uZmlnIFpPTkVfRE1BCiAJYm9vbAogCitjb25maWcgTkVFRF9ETUFfTUFQX1NUQVRFCisgICAgICAgZGVmX2Jvb2wgeQorCiBjb25maWcgR0VORVJJQ19JU0FfRE1BCiAJYm9vbAogCkBAIC0zMjEsMTAgKzMyNCw5IEBACiAJYm9vbCAiRnJlZXNjYWxlIE1YQy9pTVgtYmFzZWQiCiAJc2VsZWN0IEdFTkVSSUNfVElNRQogCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCi0Jc2VsZWN0IEFSQ0hfTVREX1hJUAotCXNlbGVjdCBHRU5FUklDX0dQSU8KIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAlzZWxlY3QgSEFWRV9DTEsKKwlzZWxlY3QgQ09NTU9OX0NMS0RFVgogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIEZyZWVzY2FsZSBNWEMvaU1YLWJhc2VkIGZhbWlseSBvZiBwcm9jZXNzb3JzCiAKQEAgLTUwOCw3ICs1MTAsNyBAQAogCSAgT3Jpb24tMiAoNTI4MSksIE9yaW9uLTEtOTAgKDYxODMpLgogCiBjb25maWcgQVJDSF9NTVAKLQlib29sICJNYXJ2ZWxsIFBYQTE2OC85MTAiCisJYm9vbCAiTWFydmVsbCBQWEExNjgvOTEwL01NUDIiCiAJZGVwZW5kcyBvbiBNTVUKIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCkBAIC01MTksNyArNTIxLDcgQEAKIAlzZWxlY3QgVElDS19PTkVTSE9UCiAJc2VsZWN0IFBMQVRfUFhBCiAJaGVscAotCSAgU3VwcG9ydCBmb3IgTWFydmVsbCdzIFBYQTE2OC85MTAgcHJvY2Vzc29yIGxpbmUuCisJICBTdXBwb3J0IGZvciBNYXJ2ZWxsJ3MgUFhBMTY4L1BYQTkxMChNTVApIGFuZCBNTVAyIHByb2Nlc3NvciBsaW5lLgogCiBjb25maWcgQVJDSF9LUzg2OTUKIAlib29sICJNaWNyZWwvS2VuZGluIEtTODY5NSIKQEAgLTYwNSw2ICs2MDcsMTEgQEAKIAkgIGludGVyZmFjZSB0byB0aGUgQVJNOSBtb2RlbSBwcm9jZXNzb3Igd2hpY2ggcnVucyB0aGUgYmFzZWJhbmQgc3RhY2sKIAkgIGFuZCBjb250cm9scyBzb21lIHZpdGFsIHN1YnN5c3RlbXMgKGNsb2NrIGFuZCBwb3dlciBjb250cm9sLCBldGMpLgogCitjb25maWcgQVJDSF9TSE1PQklMRQorCWJvb2wgIlJlbmVzYXMgU0gtTW9iaWxlIgorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIFJlbmVzYXMncyBTSC1Nb2JpbGUgQVJNIHBsYXRmb3JtcworCiBjb25maWcgQVJDSF9SUEMKIAlib29sICJSaXNjUEMiCiAJc2VsZWN0IEFSQ0hfQUNPUk4KQEAgLTY0OCwxMiArNjU1LDQzIEBACiAKIGNvbmZpZyBBUkNIX1MzQzY0WFgKIAlib29sICJTYW1zdW5nIFMzQzY0WFgiCisJc2VsZWN0IFBMQVRfU0FNU1VORworCXNlbGVjdCBDUFVfVjYKIAlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSTV9WSUMKIAlzZWxlY3QgSEFWRV9DTEsKKwlzZWxlY3QgTk9fSU9QT1JUCiAJc2VsZWN0IEFSQ0hfSEFTX0NQVUZSRVEKKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwlzZWxlY3QgU0FNU1VOR19DTEtTUkMKKwlzZWxlY3QgU0FNU1VOR19JUlFfVklDX1RJTUVSCisJc2VsZWN0IFNBTVNVTkdfSVJRX1VBUlQKKwlzZWxlY3QgUzNDX0dQSU9fVFJBQ0sKKwlzZWxlY3QgUzNDX0dQSU9fUFVMTF9VUERPV04KKwlzZWxlY3QgUzNDX0dQSU9fQ0ZHX1MzQzI0WFgKKwlzZWxlY3QgUzNDX0dQSU9fQ0ZHX1MzQzY0WFgKKwlzZWxlY3QgUzNDX0RFVl9OQU5ECisJc2VsZWN0IFVTQl9BUkNIX0hBU19PSENJCisJc2VsZWN0IFNBTVNVTkdfR1BJT0xJQl80QklUCiAJaGVscAogCSAgU2Ftc3VuZyBTM0M2NFhYIHNlcmllcyBiYXNlZCBzeXN0ZW1zCiAKK2NvbmZpZyBBUkNIX1M1UDY0NDAKKwlib29sICJTYW1zdW5nIFM1UDY0NDAiCisJc2VsZWN0IENQVV9WNgorCXNlbGVjdCBHRU5FUklDX0dQSU8KKwlzZWxlY3QgSEFWRV9DTEsKKwloZWxwCisJICBTYW1zdW5nIFM1UDY0NDAgQ1BVIGJhc2VkIHN5c3RlbXMKKworY29uZmlnIEFSQ0hfUzVQNjQ0MgorCWJvb2wgIlNhbXN1bmcgUzVQNjQ0MiIKKwlzZWxlY3QgQ1BVX1Y2CisJc2VsZWN0IEdFTkVSSUNfR1BJTworCXNlbGVjdCBIQVZFX0NMSworCWhlbHAKKwkgIFNhbXN1bmcgUzVQNjQ0MiBDUFUgYmFzZWQgc3lzdGVtcworCiBjb25maWcgQVJDSF9TNVBDMVhYCiAJYm9vbCAiU2Ftc3VuZyBTNVBDMVhYIgogCXNlbGVjdCBHRU5FUklDX0dQSU8KQEAgLTY2Myw2ICs3MDEsMTUgQEAKIAloZWxwCiAJICBTYW1zdW5nIFM1UEMxWFggc2VyaWVzIGJhc2VkIHN5c3RlbXMKIAorY29uZmlnIEFSQ0hfUzVQVjIxMAorCWJvb2wgIlNhbXN1bmcgUzVQVjIxMC9TNVBDMTEwIgorCXNlbGVjdCBDUFVfVjcKKwlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEhBVkVfQ0xLCisJc2VsZWN0IEFSTV9MMV9DQUNIRV9TSElGVF82CisJaGVscAorCSAgU2Ftc3VuZyBTNVBWMjEwL1M1UEMxMTAgc2VyaWVzIGJhc2VkIHN5c3RlbXMKKwogY29uZmlnIEFSQ0hfU0hBUksKIAlib29sICJTaGFyayIKIAlzZWxlY3QgQ1BVX1NBMTEwCkBAIC04MjgsOCArODc1LDcgQEAKIAogc291cmNlICJhcmNoL2FybS9wbGF0LXNhbXN1bmcvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9hcm0vcGxhdC1zM2MyNHh4L0tjb25maWciCi1zb3VyY2UgImFyY2gvYXJtL3BsYXQtczNjNjR4eC9LY29uZmlnIgotc291cmNlICJhcmNoL2FybS9wbGF0LXMzYy9LY29uZmlnIgorc291cmNlICJhcmNoL2FybS9wbGF0LXM1cC9LY29uZmlnIgogc291cmNlICJhcmNoL2FybS9wbGF0LXM1cGMxeHgvS2NvbmZpZyIKIAogaWYgQVJDSF9TM0MyNDEwCkBAIC04MzcsMjEgKzg4MywyNyBAQAogc291cmNlICJhcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1zM2MyNDEyL0tjb25maWciCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtczNjMjQ0MC9LY29uZmlnIgotc291cmNlICJhcmNoL2FybS9tYWNoLXMzYzI0NDIvS2NvbmZpZyIKIHNvdXJjZSAiYXJjaC9hcm0vbWFjaC1zM2MyNDQzL0tjb25maWciCiBlbmRpZgogCiBpZiBBUkNIX1MzQzY0WFgKLXNvdXJjZSAiYXJjaC9hcm0vbWFjaC1zM2M2NDAwL0tjb25maWciCi1zb3VyY2UgImFyY2gvYXJtL21hY2gtczNjNjQxMC9LY29uZmlnIgorc291cmNlICJhcmNoL2FybS9tYWNoLXMzYzY0eHgvS2NvbmZpZyIKIGVuZGlmCiAKLXNvdXJjZSAiYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9LY29uZmlnIgorc291cmNlICJhcmNoL2FybS9tYWNoLXM1cDY0NDAvS2NvbmZpZyIKKworc291cmNlICJhcmNoL2FybS9tYWNoLXM1cDY0NDIvS2NvbmZpZyIKIAogaWYgQVJDSF9TNVBDMVhYCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtczVwYzEwMC9LY29uZmlnIgogZW5kaWYKIAorc291cmNlICJhcmNoL2FybS9tYWNoLXM1cHYyMTAvS2NvbmZpZyIKKworc291cmNlICJhcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWciCisKK3NvdXJjZSAiYXJjaC9hcm0vcGxhdC1zdG1wM3h4eC9LY29uZmlnIgorCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtdTMwMC9LY29uZmlnIgogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtdXg1MDAvS2NvbmZpZyIKQEAgLTExMTcsNyArMTE2OSw3IEBACiBjb25maWcgSFoKIAlpbnQKIAlkZWZhdWx0IDEyOCBpZiBBUkNIX0w3MjAwCi0JZGVmYXVsdCAyMDAgaWYgQVJDSF9FQlNBMTEwIHx8IEFSQ0hfUzNDMjQxMAorCWRlZmF1bHQgMjAwIGlmIEFSQ0hfRUJTQTExMCB8fCBBUkNIX1MzQzI0MTAgfHwgQVJDSF9TNVA2NDQwIHx8IEFSQ0hfUzVQNjQ0MiB8fCBBUkNIX1M1UFYyMTAKIAlkZWZhdWx0IE9NQVBfMzJLX1RJTUVSX0haIGlmIEFSQ0hfT01BUCAmJiBPTUFQXzMyS19USU1FUgogCWRlZmF1bHQgQVQ5MV9USU1FUl9IWiBpZiBBUkNIX0FUOTEKIAlkZWZhdWx0IDEwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvYXJtL0tjb25maWcuZGVidWcKaW5kZXggNWNiOTMyNi4uOTEzNDRhZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZy5kZWJ1ZworKysgYi9hcmNoL2FybS9LY29uZmlnLmRlYnVnCkBAIC0xMTcsNyArMTE3LDcgQEAKIAkgIGNhdXNlIHRoZSBkZWJ1ZyBtZXNzYWdlcyB0byBhcHBlYXIgb24gdGhlIGZpcnN0IHNlcmlhbCBwb3J0LgogCiBjb25maWcgREVCVUdfUzNDX1VBUlQKLQlkZXBlbmRzIG9uIFBMQVRfUzNDCisJZGVwZW5kcyBvbiBQTEFUX1NBTVNVTkcKIAlpbnQgIlMzQyBVQVJUIHRvIHVzZSBmb3IgbG93LWxldmVsIGRlYnVnIgogCWRlZmF1bHQgIjAiCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vTWFrZWZpbGUgYi9hcmNoL2FybS9NYWtlZmlsZQppbmRleCA4MWY1NGNhLi5lZDgyMGU3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtMTQ2LDYgKzE0Niw3IEBACiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTVgyKQkJOj0gbXgyCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTVgyNSkJCTo9IG14MjUKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9NWDMpCQk6PSBteDMKK21hY2hpbmUtJChDT05GSUdfQVJDSF9NWDUpCQk6PSBteDUKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9NWEM5MTIzMSkJCTo9IG14YzkxMjMxCiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfTkVUWCkJCTo9IG5ldHgKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9OT01BRElLKQkJOj0gbm9tYWRpawpAQCAtMTU5LDEyICsxNjAsMTYgQEAKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9QWEEpCQk6PSBweGEKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9SRUFMVklFVykJCTo9IHJlYWx2aWV3CiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfUlBDKQkJOj0gcnBjCi1tYWNoaW5lLSQoQ09ORklHX0FSQ0hfUzNDMjQxMCkJCTo9IHMzYzI0MTAgczNjMjQwMCBzM2MyNDEyIHMzYzI0NDAgczNjMjQ0MiBzM2MyNDQzCittYWNoaW5lLSQoQ09ORklHX0FSQ0hfUzNDMjQxMCkJCTo9IHMzYzI0MTAgczNjMjQwMCBzM2MyNDEyIHMzYzI0NDAgczNjMjQ0MwogbWFjaGluZS0kKENPTkZJR19BUkNIX1MzQzI0QTApCQk6PSBzM2MyNGEwCi1tYWNoaW5lLSQoQ09ORklHX0FSQ0hfUzNDNjRYWCkJCTo9IHMzYzY0MDAgczNjNjQxMAorbWFjaGluZS0kKENPTkZJR19BUkNIX1MzQzY0WFgpCQk6PSBzM2M2NHh4CittYWNoaW5lLSQoQ09ORklHX0FSQ0hfUzVQNjQ0MCkJCTo9IHM1cDY0NDAKK21hY2hpbmUtJChDT05GSUdfQVJDSF9TNVA2NDQyKQkJOj0gczVwNjQ0MgogbWFjaGluZS0kKENPTkZJR19BUkNIX1M1UEMxWFgpCQk6PSBzNXBjMTAwCittYWNoaW5lLSQoQ09ORklHX0FSQ0hfUzVQVjIxMCkJCTo9IHM1cHYyMTAKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9TQTExMDApCQk6PSBzYTExMDAKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9TSEFSSykJCTo9IHNoYXJrCittYWNoaW5lLSQoQ09ORklHX0FSQ0hfU0hNT0JJTEUpIAk6PSBzaG1vYmlsZQogbWFjaGluZS0kKENPTkZJR19BUkNIX1NUTVAzNzhYKQkJOj0gc3RtcDM3OHgKIG1hY2hpbmUtJChDT05GSUdfQVJDSF9TVE1QMzdYWCkJCTo9IHN0bXAzN3h4CiBtYWNoaW5lLSQoQ09ORklHX0FSQ0hfVTMwMCkJCTo9IHUzMDAKQEAgLTE3OCwxNCArMTgzLDE1IEBACiAjIGJ5IENPTkZJR18qIG1hY3JvIG5hbWUuCiBwbGF0LSQoQ09ORklHX0FSQ0hfTVhDKQkJOj0gbXhjCiBwbGF0LSQoQ09ORklHX0FSQ0hfT01BUCkJOj0gb21hcAorcGxhdC0kKENPTkZJR19BUkNIX1MzQzY0WFgpCTo9IHNhbXN1bmcKIHBsYXQtJChDT05GSUdfQVJDSF9TVE1QM1hYWCkJOj0gc3RtcDN4eHgKIHBsYXQtJChDT05GSUdfUExBVF9JT1ApCQk6PSBpb3AKIHBsYXQtJChDT05GSUdfUExBVF9OT01BRElLKQk6PSBub21hZGlrCiBwbGF0LSQoQ09ORklHX1BMQVRfT1JJT04pCTo9IG9yaW9uCiBwbGF0LSQoQ09ORklHX1BMQVRfUFhBKQkJOj0gcHhhCi1wbGF0LSQoQ09ORklHX1BMQVRfUzNDMjRYWCkJOj0gczNjMjR4eCBzM2Mgc2Ftc3VuZwotcGxhdC0kKENPTkZJR19QTEFUX1MzQzY0WFgpCTo9IHMzYzY0eHggczNjIHNhbXN1bmcKLXBsYXQtJChDT05GSUdfUExBVF9TNVBDMVhYKQk6PSBzNXBjMXh4IHMzYyBzYW1zdW5nCitwbGF0LSQoQ09ORklHX1BMQVRfUzNDMjRYWCkJOj0gczNjMjR4eCBzYW1zdW5nCitwbGF0LSQoQ09ORklHX1BMQVRfUzVQQzFYWCkJOj0gczVwYzF4eCBzYW1zdW5nCitwbGF0LSQoQ09ORklHX1BMQVRfUzVQKQkJOj0gczVwIHNhbXN1bmcKIAogaWZlcSAoJChDT05GSUdfQVJDSF9FQlNBMTEwKSx5KQogIyBUaGlzIGlzIHdoYXQgaGFwcGVucyBpZiB5b3UgZm9yZ2V0IHRoZSBJT0NTMTYgbGluZS4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvYm9vdHAvaW5pdC5TIGIvYXJjaC9hcm0vYm9vdC9ib290cC9pbml0LlMKaW5kZXggZGY3YmM3MC4uOGIwZGU0MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9ib290cC9pbml0LlMKKysrIGIvYXJjaC9hcm0vYm9vdC9ib290cC9pbml0LlMKQEAgLTQ5LDcgKzQ5LDcgQEAKIC8qCiAgKiBmaW5kIHRoZSBlbmQgb2YgdGhlIHRhZyBsaXN0LCBhbmQgdGhlbiBhZGQgYW4gSU5JVFJEIHRhZyBvbiB0aGUgZW5kLgogICogSWYgdGhlcmUgaXMgYWxyZWFkeSBhbiBJTklUUkQgdGFnLCB0aGVuIHdlIGlnbm9yZSBpdDsgdGhlIGxhc3QgSU5JVFJECi0gKiB0YWcgdGFrZXMgcHJlY2lkZW5jZS4KKyAqIHRhZyB0YWtlcyBwcmVjZWRlbmNlLgogICovCiB0YWdsaXN0OglsZHIJcjEwLCBbcjksICMwXQkJQCB0YWcgbGVuZ3RoCiAJCXRlcQlyMTAsICMwCQkJQCBsYXN0IHRhZyAoemVybyBsZW5ndGgpPwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKaW5kZXggOTliNzVhYS4uNTM1YTkxZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUworKysgYi9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCkBAIC0xNzAsOCArMTcwLDggQEAKIAogCQkudGV4dAogCQlhZHIJcjAsIExDMAotIEFSTSgJCWxkbWlhCXIwLCB7cjEsIHIyLCByMywgcjQsIHI1LCByNiwgaXAsIHNwfQkpCi0gVEhVTUIoCQlsZG1pYQlyMCwge3IxLCByMiwgcjMsIHI0LCByNSwgcjYsIGlwfQkpCisgQVJNKAkJbGRtaWEJcjAsIHtyMSwgcjIsIHIzLCByNCwgcjUsIHI2LCByMTEsIGlwLCBzcH0pCisgVEhVTUIoCQlsZG1pYQlyMCwge3IxLCByMiwgcjMsIHI0LCByNSwgcjYsIHIxMSwgaXB9CSkKICBUSFVNQigJCWxkcglzcCwgW3IwLCAjMjhdCQkJCSkKIAkJc3VicwlyMCwgcjAsIHIxCQlAIGNhbGN1bGF0ZSB0aGUgZGVsdGEgb2Zmc2V0CiAKQEAgLTE4MiwxMiArMTgyLDEzIEBACiAJCS8qCiAJCSAqIFdlJ3JlIHJ1bm5pbmcgYXQgYSBkaWZmZXJlbnQgYWRkcmVzcy4gIFdlIG5lZWQgdG8gZml4CiAJCSAqIHVwIHZhcmlvdXMgcG9pbnRlcnM6Ci0JCSAqICAgcjUgLSB6SW1hZ2UgYmFzZSBhZGRyZXNzCi0JCSAqICAgcjYgLSBHT1Qgc3RhcnQKKwkJICogICByNSAtIHpJbWFnZSBiYXNlIGFkZHJlc3MgKF9zdGFydCkKKwkJICogICByNiAtIHNpemUgb2YgZGVjb21wcmVzc2VkIGltYWdlCisJCSAqICAgcjExIC0gR09UIHN0YXJ0CiAJCSAqICAgaXAgLSBHT1QgZW5kCiAJCSAqLwogCQlhZGQJcjUsIHI1LCByMAotCQlhZGQJcjYsIHI2LCByMAorCQlhZGQJcjExLCByMTEsIHIwCiAJCWFkZAlpcCwgaXAsIHIwCiAKICNpZm5kZWYgQ09ORklHX1pCT09UX1JPTQpAQCAtMjA1LDEwICsyMDYsMTAgQEAKIAkJLyoKIAkJICogUmVsb2NhdGUgYWxsIGVudHJpZXMgaW4gdGhlIEdPVCB0YWJsZS4KIAkJICovCi0xOgkJbGRyCXIxLCBbcjYsICMwXQkJQCByZWxvY2F0ZSBlbnRyaWVzIGluIHRoZSBHT1QKKzE6CQlsZHIJcjEsIFtyMTEsICMwXQkJQCByZWxvY2F0ZSBlbnRyaWVzIGluIHRoZSBHT1QKIAkJYWRkCXIxLCByMSwgcjAJCUAgdGFibGUuICBUaGlzIGZpeGVzIHVwIHRoZQotCQlzdHIJcjEsIFtyNl0sICM0CQlAIEMgcmVmZXJlbmNlcy4KLQkJY21wCXI2LCBpcAorCQlzdHIJcjEsIFtyMTFdLCAjNAkJQCBDIHJlZmVyZW5jZXMuCisJCWNtcAlyMTEsIGlwCiAJCWJsbwkxYgogI2Vsc2UKIApAQCAtMjE2LDEyICsyMTcsMTIgQEAKIAkJICogUmVsb2NhdGUgZW50cmllcyBpbiB0aGUgR09UIHRhYmxlLiAgV2Ugb25seSByZWxvY2F0ZQogCQkgKiB0aGUgZW50cmllcyB0aGF0IGFyZSBvdXRzaWRlIHRoZSAocmVsb2NhdGVkKSBCU1MgcmVnaW9uLgogCQkgKi8KLTE6CQlsZHIJcjEsIFtyNiwgIzBdCQlAIHJlbG9jYXRlIGVudHJpZXMgaW4gdGhlIEdPVAorMToJCWxkcglyMSwgW3IxMSwgIzBdCQlAIHJlbG9jYXRlIGVudHJpZXMgaW4gdGhlIEdPVAogCQljbXAJcjEsIHIyCQkJQCBlbnRyeSA8IGJzc19zdGFydCB8fAogCQljbXBocwlyMywgcjEJCQlAIF9lbmQgPCBlbnRyeQogCQlhZGRsbwlyMSwgcjEsIHIwCQlAIHRhYmxlLiAgVGhpcyBmaXhlcyB1cCB0aGUKLQkJc3RyCXIxLCBbcjZdLCAjNAkJQCBDIHJlZmVyZW5jZXMuCi0JCWNtcAlyNiwgaXAKKwkJc3RyCXIxLCBbcjExXSwgIzQJCUAgQyByZWZlcmVuY2VzLgorCQljbXAJcjExLCBpcAogCQlibG8JMWIKICNlbmRpZgogCkBAIC0yNDcsNiArMjQ4LDcgQEAKICAqIENoZWNrIHRvIHNlZSBpZiB3ZSB3aWxsIG92ZXJ3cml0ZSBvdXJzZWx2ZXMuCiAgKiAgIHI0ID0gZmluYWwga2VybmVsIGFkZHJlc3MKICAqICAgcjUgPSBzdGFydCBvZiB0aGlzIGltYWdlCisgKiAgIHI2ID0gc2l6ZSBvZiBkZWNvbXByZXNzZWQgaW1hZ2UKICAqICAgcjIgPSBlbmQgb2YgbWFsbG9jIHNwYWNlIChhbmQgdGhlcmVmb3JlIHRoaXMgaW1hZ2UpCiAgKiBXZSBiYXNpY2FsbHkgd2FudDoKICAqICAgcjQgPj0gcjIgLT4gT0sKQEAgLTI1NCw4ICsyNTYsNyBAQAogICovCiAJCWNtcAlyNCwgcjIKIAkJYmhzCXdvbnRfb3ZlcndyaXRlCi0JCXN1YglyMywgc3AsIHI1CQlAID4gY29tcHJlc3NlZCBrZXJuZWwgc2l6ZQotCQlhZGQJcjAsIHI0LCByMywgbHNsICMyCUAgYWxsb3cgZm9yIDR4IGV4cGFuc2lvbgorCQlhZGQJcjAsIHI0LCByNgogCQljbXAJcjAsIHI1CiAJCWJscwl3b250X292ZXJ3cml0ZQogCkBAIC0yNzEsNyArMjcyLDYgQEAKICAqIHIxLXIzICA9IHVudXNlZAogICogcjQgICAgID0ga2VybmVsIGV4ZWN1dGlvbiBhZGRyZXNzCiAgKiByNSAgICAgPSBkZWNvbXByZXNzZWQga2VybmVsIHN0YXJ0Ci0gKiByNiAgICAgPSBwcm9jZXNzb3IgSUQKICAqIHI3ICAgICA9IGFyY2hpdGVjdHVyZSBJRAogICogcjggICAgID0gYXRhZ3MgcG9pbnRlcgogICogcjktcjEyLHIxNCA9IGNvcnJ1cHRlZApAQCAtMzEyLDcgKzMxMiw4IEBACiAJCS53b3JkCV9lbmQJCQlAIHIzCiAJCS53b3JkCXpyZWxhZGRyCQlAIHI0CiAJCS53b3JkCV9zdGFydAkJCUAgcjUKLQkJLndvcmQJX2dvdF9zdGFydAkJQCByNgorCQkud29yZAlfaW1hZ2Vfc2l6ZQkJQCByNgorCQkud29yZAlfZ290X3N0YXJ0CQlAIHIxMQogCQkud29yZAlfZ290X2VuZAkJQCBpcAogCQkud29yZAl1c2VyX3N0YWNrKzQwOTYJCUAgc3AKIExDMToJCS53b3JkCXJlbG9jX2VuZCAtIHJlbG9jX3N0YXJ0CkBAIC0zMzYsNyArMzM3LDYgQEAKICAqCiAgKiBPbiBlbnRyeSwKICAqICByNCA9IGtlcm5lbCBleGVjdXRpb24gYWRkcmVzcwotICogIHI2ID0gcHJvY2Vzc29yIElECiAgKiAgcjcgPSBhcmNoaXRlY3R1cmUgbnVtYmVyCiAgKiAgcjggPSBhdGFncyBwb2ludGVyCiAgKiAgcjkgPSBydW4tdGltZSBhZGRyZXNzIG9mICJzdGFydCIgICg/Pz8pCkBAIC01NDIsNyArNTQyLDYgQEAKICAqIHIxLXIzICA9IHVudXNlZAogICogcjQgICAgID0ga2VybmVsIGV4ZWN1dGlvbiBhZGRyZXNzCiAgKiByNSAgICAgPSBkZWNvbXByZXNzZWQga2VybmVsIHN0YXJ0Ci0gKiByNiAgICAgPSBwcm9jZXNzb3IgSUQKICAqIHI3ICAgICA9IGFyY2hpdGVjdHVyZSBJRAogICogcjggICAgID0gYXRhZ3MgcG9pbnRlcgogICogcjktcjEyLHIxNCA9IGNvcnJ1cHRlZApAQCAtNTgxLDE5ICs1ODAsMTkgQEAKICAqICByMSAgPSBjb3JydXB0ZWQKICAqICByMiAgPSBjb3JydXB0ZWQKICAqICByMyAgPSBibG9jayBvZmZzZXQKLSAqICByNiAgPSBjb3JydXB0ZWQKKyAqICByOSAgPSBjb3JydXB0ZWQKICAqICByMTIgPSBjb3JydXB0ZWQKICAqLwogCiBjYWxsX2NhY2hlX2ZuOglhZHIJcjEyLCBwcm9jX3R5cGVzCiAjaWZkZWYgQ09ORklHX0NQVV9DUDE1Ci0JCW1yYwlwMTUsIDAsIHI2LCBjMCwgYzAJQCBnZXQgcHJvY2Vzc29yIElECisJCW1yYwlwMTUsIDAsIHI5LCBjMCwgYzAJQCBnZXQgcHJvY2Vzc29yIElECiAjZWxzZQotCQlsZHIJcjYsID1DT05GSUdfUFJPQ0VTU09SX0lECisJCWxkcglyOSwgPUNPTkZJR19QUk9DRVNTT1JfSUQKICNlbmRpZgogMToJCWxkcglyMSwgW3IxMiwgIzBdCQlAIGdldCB2YWx1ZQogCQlsZHIJcjIsIFtyMTIsICM0XQkJQCBnZXQgbWFzawotCQllb3IJcjEsIHIxLCByNgkJQCAocmVhbCBeIG1hdGNoKQorCQllb3IJcjEsIHIxLCByOQkJQCAocmVhbCBeIG1hdGNoKQogCQl0c3QJcjEsIHIyCQkJQCAgICAgICAmIG1hc2sKICBBUk0oCQlhZGRlcQlwYywgcjEyLCByMwkJKSBAIGNhbGwgY2FjaGUgZnVuY3Rpb24KICBUSFVNQigJCWFkZGVxCXIxMiwgcjMJCQkpCkBAIC03NzgsOCArNzc3LDcgQEAKICAqIFR1cm4gb2ZmIHRoZSBDYWNoZSBhbmQgTU1VLiAgQVJNdjMgZG9lcyBub3Qgc3VwcG9ydAogICogcmVhZGluZyB0aGUgY29udHJvbCByZWdpc3RlciwgYnV0IEFSTXY0IGRvZXMuCiAgKgotICogT24gZW50cnksICByNiA9IHByb2Nlc3NvciBJRAotICogT24gZXhpdCwgICByMCwgcjEsIHIyLCByMywgcjEyIGNvcnJ1cHRlZAorICogT24gZXhpdCwgcjAsIHIxLCByMiwgcjMsIHI5LCByMTIgY29ycnVwdGVkCiAgKiBUaGlzIHJvdXRpbmUgbXVzdCBwcmVzZXJ2ZTogcjQsIHI2LCByNwogICovCiAJCS5hbGlnbgk1CkBAIC04NTIsMTAgKzg1MCw4IEBACiAvKgogICogQ2xlYW4gYW5kIGZsdXNoIHRoZSBjYWNoZSB0byBtYWludGFpbiBjb25zaXN0ZW5jeS4KICAqCi0gKiBPbiBlbnRyeSwKLSAqICByNiA9IHByb2Nlc3NvciBJRAogICogT24gZXhpdCwKLSAqICByMSwgcjIsIHIzLCByMTEsIHIxMiBjb3JydXB0ZWQKKyAqICByMSwgcjIsIHIzLCByOSwgcjExLCByMTIgY29ycnVwdGVkCiAgKiBUaGlzIHJvdXRpbmUgbXVzdCBwcmVzZXJ2ZToKICAqICByMCwgcjQsIHI1LCByNiwgcjcKICAqLwpAQCAtOTY3LDcgKzk2Myw3IEBACiAJCW1vdglyMiwgIzY0KjEwMjQJCUAgZGVmYXVsdDogMzJLIGRjYWNoZSBzaXplICgqMikKIAkJbW92CXIxMSwgIzMyCQlAIGRlZmF1bHQ6IDMyIGJ5dGUgbGluZSBzaXplCiAJCW1yYwlwMTUsIDAsIHIzLCBjMCwgYzAsIDEJQCByZWFkIGNhY2hlIHR5cGUKLQkJdGVxCXIzLCByNgkJCUAgY2FjaGUgSUQgcmVnaXN0ZXIgcHJlc2VudD8KKwkJdGVxCXIzLCByOQkJCUAgY2FjaGUgSUQgcmVnaXN0ZXIgcHJlc2VudD8KIAkJYmVxCW5vX2NhY2hlX2lkCiAJCW1vdglyMSwgcjMsIGxzciAjMTgKIAkJYW5kCXIxLCByMSwgIzcKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbiBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC92bWxpbnV4Lmxkcy5pbgppbmRleCA3Y2E5ZWNmLi5kMDgxNjg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvdm1saW51eC5sZHMuaW4KKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL3ZtbGludXgubGRzLmluCkBAIC00Myw2ICs0Myw5IEBACiAKICAgX2V0ZXh0ID0gLjsKIAorICAvKiBBc3N1bWUgc2l6ZSBvZiBkZWNvbXByZXNzZWQgaW1hZ2UgaXMgNHggdGhlIGNvbXByZXNzZWQgaW1hZ2UgKi8KKyAgX2ltYWdlX3NpemUgPSAoX2V0ZXh0IC0gX3RleHQpICogNDsKKwogICBfZ290X3N0YXJ0ID0gLjsKICAgLmdvdAkJCTogeyAqKC5nb3QpIH0KICAgX2dvdF9lbmQgPSAuOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2Nsa2Rldi5jIGIvYXJjaC9hcm0vY29tbW9uL2Nsa2Rldi5jCmluZGV4IDQ0NmI2OTYuLjY0MTZkNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9jbGtkZXYuYworKysgYi9hcmNoL2FybS9jb21tb24vY2xrZGV2LmMKQEAgLTMyLDcgKzMyLDcgQEAKICAqICBJZiBhbiBlbnRyeSBoYXMgYSBkZXZpY2UgSUQsIGl0IG11c3QgbWF0Y2gKICAqICBJZiBhbiBlbnRyeSBoYXMgYSBjb25uZWN0aW9uIElELCBpdCBtdXN0IG1hdGNoCiAgKiBUaGVuIHdlIHRha2UgdGhlIG1vc3Qgc3BlY2lmaWMgZW50cnkgLSB3aXRoIHRoZSBmb2xsb3dpbmcKLSAqIG9yZGVyIG9mIHByZWNpZGVuY2U6IGRlditjb24gPiBkZXYgb25seSA+IGNvbiBvbmx5LgorICogb3JkZXIgb2YgcHJlY2VkZW5jZTogZGV2K2NvbiA+IGRldiBvbmx5ID4gY29uIG9ubHkuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfZmluZChjb25zdCBjaGFyICpkZXZfaWQsIGNvbnN0IGNoYXIgKmNvbl9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9pdDgxNTIuYyBiL2FyY2gvYXJtL2NvbW1vbi9pdDgxNTIuYwppbmRleCAyNzkzNDQ3Li5lZTFkM2I4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vaXQ4MTUyLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL2l0ODE1Mi5jCkBAIC0yNzIsMzMgKzI3Miw2IEBACiAJCSgoZG1hX2FkZHIgKyBzaXplIC0gUEhZU19PRkZTRVQpID49IFNaXzY0TSk7CiB9CiAKLS8qCi0gKiBXZSBvdmVycmlkZSB0aGVzZSBzbyB3ZSBwcm9wZXJseSBkbyBkbWFib3VuY2Ugb3RoZXJ3aXNlIGRyaXZlcnMKLSAqIGFyZSBhYmxlIHRvIHNldCB0aGUgZG1hX21hc2sgdG8gMHhmZmZmZmZmZiBhbmQgd2UgY2FuIG5vIGxvbmdlcgotICogdHJhcCBib3VuY2VzLiA6KAotICoKLSAqIFdlIGp1c3QgcmV0dXJuIHRydWUgb24gZXZlcnloaW5nIGV4Y2VwdCBmb3IgPCA2NE1CIGluIHdoaWNoIGNhc2UKLSAqIHdlIHdpbGwgZmFpbCBtaXNlcmFsYnkgYW5kIGRpZSBzaW5jZSB3ZSBjYW4ndCBoYW5kbGUgdGhhdCBjYXNlLgotICovCi1pbnQgcGNpX3NldF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1NjQgbWFzaykKLXsKLQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzOiAlbGx4XG4iLCBfX2Z1bmNfXywgbWFzayk7Ci0JaWYgKG1hc2sgPj0gUEhZU19PRkZTRVQgKyBTWl82NE0gLSAxKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAtRUlPOwotfQotCi1pbnQKLXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1NjQgbWFzaykKLXsKLQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzOiAlbGx4XG4iLCBfX2Z1bmNfXywgbWFzayk7Ci0JaWYgKG1hc2sgPj0gUEhZU19PRkZTRVQgKyBTWl82NE0gLSAxKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAtRUlPOwotfQotCiBpbnQgX19pbml0IGl0ODE1Ml9wY2lfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCiB7CiAJaXQ4MTUyX2lvLnN0YXJ0ID0gSVQ4MTUyX0lPX0JBU0UgKyAweDEyMDAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jIGIvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jCmluZGV4IGJkMzZjNzcuLjkwYWUwMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYworKysgYi9hcmNoL2FybS9jb21tb24vbG9jb21vLmMKQEAgLTMyLDYgKzMyLDEyIEBACiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvbG9jb21vLmg+CiAKKy8qIExvQ29NbyBJbnRlcnJ1cHRzICovCisjZGVmaW5lIElSUV9MT0NPTU9fS0VZCQkoMCkKKyNkZWZpbmUgSVJRX0xPQ09NT19HUElPCQkoMSkKKyNkZWZpbmUgSVJRX0xPQ09NT19MVAkJKDIpCisjZGVmaW5lIElSUV9MT0NPTU9fU1BJCQkoMykKKwogLyogTTYyMzMyIG91dHB1dCBjaGFubmVsIHNlbGVjdGlvbiAqLwogI2RlZmluZSBNNjIzMzJfRVZSX0NICTEJLyogTTYyMzMyIHZvbHVtZSBjaGFubmVsIG51bWJlciAgKi8KIAkJCQkvKiAgIDAgOiBDSC4xICwgMSA6IENILiAyICAgICAgICAqLwpAQCAtNTgsNiArNjQsNyBAQAogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAl1bnNpZ25lZCBsb25nIHBoeXM7CiAJdW5zaWduZWQgaW50IGlycTsKKwlpbnQgaXJxX2Jhc2U7CiAJc3BpbmxvY2tfdCBsb2NrOwogCXZvaWQgX19pb21lbSAqYmFzZTsKICNpZmRlZiBDT05GSUdfUE0KQEAgLTgxLDkgKzg4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgbG9jb21vX2Rldl9pbmZvIGxvY29tb19kZXZpY2VzW10gPSB7CiAJewogCQkuZGV2aWQgCQk9IExPQ09NT19ERVZJRF9LRVlCT0FSRCwKLQkJLmlycSA9IHsKLQkJCUlSUV9MT0NPTU9fS0VZLAotCQl9LAorCQkuaXJxCQk9IHsgSVJRX0xPQ09NT19LRVkgfSwKIAkJLm5hbWUJCT0gImxvY29tby1rZXlib2FyZCIsCiAJCS5vZmZzZXQJCT0gTE9DT01PX0tFWUJPQVJELAogCQkubGVuZ3RoCQk9IDE2LApAQCAtMTMzLDUzICsxMzgsMjAgQEAKIAl9LAogfTsKIAotCi0vKiogTG9Db01vIGludGVycnVwdCBoYW5kbGluZyBzdHVmZi4KLSAqIE5PVEU6IExvQ29NbyBoYXMgYSAxIHRvIG1hbnkgbWFwcGluZyBvbiBhbGwgb2YgaXRzIElSUXMuCi0gKiB0aGF0IGlzLCB0aGVyZSBpcyBvbmx5IG9uZSByZWFsIGhhcmR3YXJlIGludGVycnVwdAotICogd2UgZGV0ZXJtaW5lIHdoaWNoIGludGVycnVwdCBpdCBpcyBieSByZWFkaW5nIHNvbWUgSU8gbWVtb3J5LgotICogV2UgaGF2ZSB0d28gbGV2ZWxzIG9mIGV4cGFuc2lvbiwgZmlyc3QgaW4gdGhlIGhhbmRsZXIgZm9yIHRoZQotICogaGFyZHdhcmUgaW50ZXJydXB0IHdlIGdlbmVyYXRlIGFuIGludGVycnVwdAotICogSVJRX0xPQ09NT18qX0JBU0UgYW5kIHRob3NlIGhhbmRsZXJzIGdlbmVyYXRlIG1vcmUgaW50ZXJydXB0cwotICoKLSAqIGhhcmR3YXJlIGlycSByZWFkcyBMT0NPTU9fSUNSICYgMHgwZjAwCi0gKiAgIElSUV9MT0NPTU9fS0VZX0JBU0UKLSAqICAgSVJRX0xPQ09NT19HUElPX0JBU0UKLSAqICAgSVJRX0xPQ09NT19MVF9CQVNFCi0gKiAgIElSUV9MT0NPTU9fU1BJX0JBU0UKLSAqIElSUV9MT0NPTU9fS0VZX0JBU0UgcmVhZHMgTE9DT01PX0tJQyAmIDB4MDAwMQotICogICBJUlFfTE9DT01PX0tFWQotICogSVJRX0xPQ09NT19HUElPX0JBU0UgcmVhZHMgTE9DT01PX0dJUiAmIExPQ09NT19HUEQgJiAweGZmZmYKLSAqICAgSVJRX0xPQ09NT19HUElPWzAtMTVdCi0gKiBJUlFfTE9DT01PX0xUX0JBU0UgcmVhZHMgTE9DT01PX0xUSU5UICYgMHgwMDAxCi0gKiAgIElSUV9MT0NPTU9fTFQKLSAqIElSUV9MT0NPTU9fU1BJX0JBU0UgcmVhZHMgTE9DT01PX1NQSUlSICYgMHgwMDBGCi0gKiAgIElSUV9MT0NPTU9fU1BJX1JGUgotICogICBJUlFfTE9DT01PX1NQSV9SRlcKLSAqICAgSVJRX0xPQ09NT19TUElfT1ZSTgotICogICBJUlFfTE9DT01PX1NQSV9URU5ECi0gKi8KLQotI2RlZmluZSBMT0NPTU9fSVJRX1NUQVJUCShJUlFfTE9DT01PX0tFWV9CQVNFKQotI2RlZmluZSBMT0NPTU9fSVJRX0tFWV9TVEFSVAkoSVJRX0xPQ09NT19LRVkpCi0jZGVmaW5lCUxPQ09NT19JUlFfR1BJT19TVEFSVAkoSVJRX0xPQ09NT19HUElPMCkKLSNkZWZpbmUJTE9DT01PX0lSUV9MVF9TVEFSVAkoSVJRX0xPQ09NT19MVCkKLSNkZWZpbmUJTE9DT01PX0lSUV9TUElfU1RBUlQJKElSUV9MT0NPTU9fU1BJX1JGUikKLQogc3RhdGljIHZvaWQgbG9jb21vX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogeworCXN0cnVjdCBsb2NvbW8gKmxjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKIAlpbnQgcmVxLCBpOwotCXZvaWQgX19pb21lbSAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CiAKIAkvKiBBY2tub3dsZWRnZSB0aGUgcGFyZW50IElSUSAqLwogCWRlc2MtPmNoaXAtPmFjayhpcnEpOwogCiAJLyogY2hlY2sgd2h5IHRoaXMgaW50ZXJydXB0IHdhcyBnZW5lcmF0ZWQgKi8KLQlyZXEgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19JQ1IpICYgMHgwZjAwOworCXJlcSA9IGxvY29tb19yZWFkbChsY2hpcC0+YmFzZSArIExPQ09NT19JQ1IpICYgMHgwZjAwOwogCiAJaWYgKHJlcSkgewogCQkvKiBnZW5lcmF0ZSB0aGUgbmV4dCBpbnRlcnJ1cHQocykgKi8KLQkJaXJxID0gTE9DT01PX0lSUV9TVEFSVDsKKwkJaXJxID0gbGNoaXAtPmlycV9iYXNlOwogCQlmb3IgKGkgPSAwOyBpIDw9IDM7IGkrKywgaXJxKyspIHsKIAkJCWlmIChyZXEgJiAoMHgwMTAwIDw8IGkpKSB7CiAJCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CkBAIC0xOTUsMjAgKzE2NywyMCBAQAogCiBzdGF0aWMgdm9pZCBsb2NvbW9fbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCBsb2NvbW8gKmxjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKIAl1bnNpZ25lZCBpbnQgcjsKLQlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fSUNSKTsKLQlyICY9IH4oMHgwMDEwIDw8IChpcnEgLSBMT0NPTU9fSVJRX1NUQVJUKSk7Ci0JbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0lDUik7CisJciA9IGxvY29tb19yZWFkbChsY2hpcC0+YmFzZSArIExPQ09NT19JQ1IpOworCXIgJj0gfigweDAwMTAgPDwgKGlycSAtIGxjaGlwLT5pcnFfYmFzZSkpOworCWxvY29tb193cml0ZWwociwgbGNoaXAtPmJhc2UgKyBMT0NPTU9fSUNSKTsKIH0KIAogc3RhdGljIHZvaWQgbG9jb21vX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCBsb2NvbW8gKmxjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKIAl1bnNpZ25lZCBpbnQgcjsKLQlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fSUNSKTsKLQlyIHw9ICgweDAwMTAgPDwgKGlycSAtIExPQ09NT19JUlFfU1RBUlQpKTsKLQlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fSUNSKTsKKwlyID0gbG9jb21vX3JlYWRsKGxjaGlwLT5iYXNlICsgTE9DT01PX0lDUik7CisJciB8PSAoMHgwMDEwIDw8IChpcnEgLSBsY2hpcC0+aXJxX2Jhc2UpKTsKKwlsb2NvbW9fd3JpdGVsKHIsIGxjaGlwLT5iYXNlICsgTE9DT01PX0lDUik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbG9jb21vX2NoaXAgPSB7CkBAIC0yMTgsMjk3ICsxOTAsMjIgQEAKIAkudW5tYXNrCT0gbG9jb21vX3VubWFza19pcnEsCiB9OwogCi1zdGF0aWMgdm9pZCBsb2NvbW9fa2V5X2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCXZvaWQgX19pb21lbSAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0KLQlpZiAobG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fS0VZQk9BUkQgKyBMT0NPTU9fS0lDKSAmIDB4MDAwMSkgewotCQlnZW5lcmljX2hhbmRsZV9pcnEoTE9DT01PX0lSUV9LRVlfU1RBUlQpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgbG9jb21vX2tleV9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQl1bnNpZ25lZCBpbnQgcjsKLQlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fS0VZQk9BUkQgKyBMT0NPTU9fS0lDKTsKLQlyICY9IH4oMHgwMTAwIDw8IChpcnEgLSBMT0NPTU9fSVJRX0tFWV9TVEFSVCkpOwotCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19LRVlCT0FSRCArIExPQ09NT19LSUMpOwotfQotCi1zdGF0aWMgdm9pZCBsb2NvbW9fa2V5X21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQl1bnNpZ25lZCBpbnQgcjsKLQlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fS0VZQk9BUkQgKyBMT0NPTU9fS0lDKTsKLQlyICY9IH4oMHgwMDEwIDw8IChpcnEgLSBMT0NPTU9fSVJRX0tFWV9TVEFSVCkpOwotCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19LRVlCT0FSRCArIExPQ09NT19LSUMpOwotfQotCi1zdGF0aWMgdm9pZCBsb2NvbW9fa2V5X3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCXVuc2lnbmVkIGludCByOwotCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19LRVlCT0FSRCArIExPQ09NT19LSUMpOwotCXIgfD0gKDB4MDAxMCA8PCAoaXJxIC0gTE9DT01PX0lSUV9LRVlfU1RBUlQpKTsKLQlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fS0VZQk9BUkQgKyBMT0NPTU9fS0lDKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBsb2NvbW9fa2V5X2NoaXAgPSB7Ci0JLm5hbWUJPSAiTE9DT01PLWtleSIsCi0JLmFjawk9IGxvY29tb19rZXlfYWNrX2lycSwKLQkubWFzawk9IGxvY29tb19rZXlfbWFza19pcnEsCi0JLnVubWFzawk9IGxvY29tb19rZXlfdW5tYXNrX2lycSwKLX07Ci0KLXN0YXRpYyB2b2lkIGxvY29tb19ncGlvX2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCWludCByZXEsIGk7Ci0Jdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQotCXJlcSA9IAlsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19HSVIpICYKLQkJbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fR1BEKSAmCi0JCTB4ZmZmZjsKLQotCWlmIChyZXEpIHsKLQkJaXJxID0gTE9DT01PX0lSUV9HUElPX1NUQVJUOwotCQlmb3IgKGkgPSAwOyBpIDw9IDE1OyBpKyssIGlycSsrKSB7Ci0JCQlpZiAocmVxICYgKDB4MDAwMSA8PCBpKSkgewotCQkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwotCQkJfQotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBsb2NvbW9fZ3Bpb19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQl1bnNpZ25lZCBpbnQgcjsKLQlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fR1dFKTsKLQlyIHw9ICgweDAwMDEgPDwgKGlycSAtIExPQ09NT19JUlFfR1BJT19TVEFSVCkpOwotCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19HV0UpOwotCi0JciA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX0dJUyk7Ci0JciAmPSB+KDB4MDAwMSA8PCAoaXJxIC0gTE9DT01PX0lSUV9HUElPX1NUQVJUKSk7Ci0JbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX0dJUyk7Ci0KLQlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fR1dFKTsKLQlyICY9IH4oMHgwMDAxIDw8IChpcnEgLSBMT0NPTU9fSVJRX0dQSU9fU1RBUlQpKTsKLQlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fR1dFKTsKLX0KLQotc3RhdGljIHZvaWQgbG9jb21vX2dwaW9fbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCXVuc2lnbmVkIGludCByOwotCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19HSUUpOwotCXIgJj0gfigweDAwMDEgPDwgKGlycSAtIExPQ09NT19JUlFfR1BJT19TVEFSVCkpOwotCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19HSUUpOwotfQotCi1zdGF0aWMgdm9pZCBsb2NvbW9fZ3Bpb191bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQl1bnNpZ25lZCBpbnQgcjsKLQlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fR0lFKTsKLQlyIHw9ICgweDAwMDEgPDwgKGlycSAtIExPQ09NT19JUlFfR1BJT19TVEFSVCkpOwotCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19HSUUpOwotfQotCi1zdGF0aWMgaW50IEdQSU9fSVJRX3Jpc2luZ19lZGdlOwotc3RhdGljIGludCBHUElPX0lSUV9mYWxsaW5nX2VkZ2U7Ci0KLXN0YXRpYyBpbnQgbG9jb21vX2dwaW9fdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgdHlwZSkKLXsKLQl1bnNpZ25lZCBpbnQgbWFzazsKLQl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCi0JbWFzayA9IDEgPDwgKGlycSAtIExPQ09NT19JUlFfR1BJT19TVEFSVCk7Ci0KLQlpZiAodHlwZSA9PSBJUlFfVFlQRV9QUk9CRSkgewotCQlpZiAoKEdQSU9fSVJRX3Jpc2luZ19lZGdlIHwgR1BJT19JUlFfZmFsbGluZ19lZGdlKSAmIG1hc2spCi0JCQlyZXR1cm4gMDsKLQkJdHlwZSA9IElSUV9UWVBFX0VER0VfUklTSU5HIHwgSVJRX1RZUEVfRURHRV9GQUxMSU5HOwotCX0KLQotCWlmICh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpCi0JCUdQSU9fSVJRX3Jpc2luZ19lZGdlIHw9IG1hc2s7Ci0JZWxzZQotCQlHUElPX0lSUV9yaXNpbmdfZWRnZSAmPSB+bWFzazsKLQlpZiAodHlwZSAmIElSUV9UWVBFX0VER0VfRkFMTElORykKLQkJR1BJT19JUlFfZmFsbGluZ19lZGdlIHw9IG1hc2s7Ci0JZWxzZQotCQlHUElPX0lSUV9mYWxsaW5nX2VkZ2UgJj0gfm1hc2s7Ci0JbG9jb21vX3dyaXRlbChHUElPX0lSUV9yaXNpbmdfZWRnZSwgbWFwYmFzZSArIExPQ09NT19HUklFKTsKLQlsb2NvbW9fd3JpdGVsKEdQSU9fSVJRX2ZhbGxpbmdfZWRnZSwgbWFwYmFzZSArIExPQ09NT19HRklFKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGxvY29tb19ncGlvX2NoaXAgPSB7Ci0JLm5hbWUJICA9ICJMT0NPTU8tZ3BpbyIsCi0JLmFjawkgID0gbG9jb21vX2dwaW9fYWNrX2lycSwKLQkubWFzawkgID0gbG9jb21vX2dwaW9fbWFza19pcnEsCi0JLnVubWFzawkgID0gbG9jb21vX2dwaW9fdW5tYXNrX2lycSwKLQkuc2V0X3R5cGUgPSBsb2NvbW9fZ3Bpb190eXBlLAotfTsKLQotc3RhdGljIHZvaWQgbG9jb21vX2x0X2hhbmRsZXIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCXZvaWQgX19pb21lbSAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0KLQlpZiAobG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fTFRJTlQpICYgMHgwMDAxKSB7Ci0JCWdlbmVyaWNfaGFuZGxlX2lycShMT0NPTU9fSVJRX0xUX1NUQVJUKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGxvY29tb19sdF9hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQl1bnNpZ25lZCBpbnQgcjsKLQlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fTFRJTlQpOwotCXIgJj0gfigweDAxMDAgPDwgKGlycSAtIExPQ09NT19JUlFfTFRfU1RBUlQpKTsKLQlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fTFRJTlQpOwotfQotCi1zdGF0aWMgdm9pZCBsb2NvbW9fbHRfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCXVuc2lnbmVkIGludCByOwotCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19MVElOVCk7Ci0JciAmPSB+KDB4MDAxMCA8PCAoaXJxIC0gTE9DT01PX0lSUV9MVF9TVEFSVCkpOwotCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19MVElOVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGxvY29tb19sdF91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQl1bnNpZ25lZCBpbnQgcjsKLQlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fTFRJTlQpOwotCXIgfD0gKDB4MDAxMCA8PCAoaXJxIC0gTE9DT01PX0lSUV9MVF9TVEFSVCkpOwotCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19MVElOVCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbG9jb21vX2x0X2NoaXAgPSB7Ci0JLm5hbWUJPSAiTE9DT01PLWx0IiwKLQkuYWNrCT0gbG9jb21vX2x0X2Fja19pcnEsCi0JLm1hc2sJPSBsb2NvbW9fbHRfbWFza19pcnEsCi0JLnVubWFzawk9IGxvY29tb19sdF91bm1hc2tfaXJxLAotfTsKLQotc3RhdGljIHZvaWQgbG9jb21vX3NwaV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQlpbnQgcmVxLCBpOwotCXZvaWQgX19pb21lbSAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0KLQlyZXEgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19TUEkgKyBMT0NPTU9fU1BJSVIpICYgMHgwMDBGOwotCWlmIChyZXEpIHsKLQkJaXJxID0gTE9DT01PX0lSUV9TUElfU1RBUlQ7Ci0KLQkJZm9yIChpID0gMDsgaSA8PSAzOyBpKyssIGlycSsrKSB7Ci0JCQlpZiAocmVxICYgKDB4MDAwMSA8PCBpKSkgewotCQkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwotCQkJfQotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBsb2NvbW9fc3BpX2Fja19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCXVuc2lnbmVkIGludCByOwotCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19TUEkgKyBMT0NPTU9fU1BJV0UpOwotCXIgfD0gKDB4MDAwMSA8PCAoaXJxIC0gTE9DT01PX0lSUV9TUElfU1RBUlQpKTsKLQlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fU1BJICsgTE9DT01PX1NQSVdFKTsKLQotCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19TUEkgKyBMT0NPTU9fU1BJSVMpOwotCXIgJj0gfigweDAwMDEgPDwgKGlycSAtIExPQ09NT19JUlFfU1BJX1NUQVJUKSk7Ci0JbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX1NQSSArIExPQ09NT19TUElJUyk7Ci0KLQlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fU1BJICsgTE9DT01PX1NQSVdFKTsKLQlyICY9IH4oMHgwMDAxIDw8IChpcnEgLSBMT0NPTU9fSVJRX1NQSV9TVEFSVCkpOwotCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19TUEkgKyBMT0NPTU9fU1BJV0UpOwotfQotCi1zdGF0aWMgdm9pZCBsb2NvbW9fc3BpX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKLQl1bnNpZ25lZCBpbnQgcjsKLQlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fU1BJICsgTE9DT01PX1NQSUlFKTsKLQlyICY9IH4oMHgwMDAxIDw8IChpcnEgLSBMT0NPTU9fSVJRX1NQSV9TVEFSVCkpOwotCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19TUEkgKyBMT0NPTU9fU1BJSUUpOwotfQotCi1zdGF0aWMgdm9pZCBsb2NvbW9fc3BpX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCXVuc2lnbmVkIGludCByOwotCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19TUEkgKyBMT0NPTU9fU1BJSUUpOwotCXIgfD0gKDB4MDAwMSA8PCAoaXJxIC0gTE9DT01PX0lSUV9TUElfU1RBUlQpKTsKLQlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fU1BJICsgTE9DT01PX1NQSUlFKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBsb2NvbW9fc3BpX2NoaXAgPSB7Ci0JLm5hbWUJPSAiTE9DT01PLXNwaSIsCi0JLmFjawk9IGxvY29tb19zcGlfYWNrX2lycSwKLQkubWFzawk9IGxvY29tb19zcGlfbWFza19pcnEsCi0JLnVubWFzawk9IGxvY29tb19zcGlfdW5tYXNrX2lycSwKLX07Ci0KIHN0YXRpYyB2b2lkIGxvY29tb19zZXR1cF9pcnEoc3RydWN0IGxvY29tbyAqbGNoaXApCiB7Ci0JaW50IGlycTsKLQl2b2lkIF9faW9tZW0gKmlycWJhc2UgPSBsY2hpcC0+YmFzZTsKKwlpbnQgaXJxID0gbGNoaXAtPmlycV9iYXNlOwogCiAJLyoKIAkgKiBJbnN0YWxsIGhhbmRsZXIgZm9yIElSUV9MT0NPTU9fSFcuCiAJICovCiAJc2V0X2lycV90eXBlKGxjaGlwLT5pcnEsIElSUV9UWVBFX0VER0VfRkFMTElORyk7Ci0Jc2V0X2lycV9jaGlwX2RhdGEobGNoaXAtPmlycSwgaXJxYmFzZSk7CisJc2V0X2lycV9jaGlwX2RhdGEobGNoaXAtPmlycSwgbGNoaXApOwogCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGxjaGlwLT5pcnEsIGxvY29tb19oYW5kbGVyKTsKIAotCS8qIEluc3RhbGwgaGFuZGxlcnMgZm9yIElSUV9MT0NPTU9fKl9CQVNFICovCi0Jc2V0X2lycV9jaGlwKElSUV9MT0NPTU9fS0VZX0JBU0UsICZsb2NvbW9fY2hpcCk7Ci0Jc2V0X2lycV9jaGlwX2RhdGEoSVJRX0xPQ09NT19LRVlfQkFTRSwgaXJxYmFzZSk7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0xPQ09NT19LRVlfQkFTRSwgbG9jb21vX2tleV9oYW5kbGVyKTsKLQotCXNldF9pcnFfY2hpcChJUlFfTE9DT01PX0dQSU9fQkFTRSwgJmxvY29tb19jaGlwKTsKLQlzZXRfaXJxX2NoaXBfZGF0YShJUlFfTE9DT01PX0dQSU9fQkFTRSwgaXJxYmFzZSk7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0xPQ09NT19HUElPX0JBU0UsIGxvY29tb19ncGlvX2hhbmRsZXIpOwotCi0Jc2V0X2lycV9jaGlwKElSUV9MT0NPTU9fTFRfQkFTRSwgJmxvY29tb19jaGlwKTsKLQlzZXRfaXJxX2NoaXBfZGF0YShJUlFfTE9DT01PX0xUX0JBU0UsIGlycWJhc2UpOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9MT0NPTU9fTFRfQkFTRSwgbG9jb21vX2x0X2hhbmRsZXIpOwotCi0Jc2V0X2lycV9jaGlwKElSUV9MT0NPTU9fU1BJX0JBU0UsICZsb2NvbW9fY2hpcCk7Ci0Jc2V0X2lycV9jaGlwX2RhdGEoSVJRX0xPQ09NT19TUElfQkFTRSwgaXJxYmFzZSk7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0xPQ09NT19TUElfQkFTRSwgbG9jb21vX3NwaV9oYW5kbGVyKTsKLQotCS8qIGluc3RhbGwgaGFuZGxlcnMgZm9yIElSUV9MT0NPTU9fS0VZX0JBU0UgZ2VuZXJhdGVkIGludGVycnVwdHMgKi8KLQlzZXRfaXJxX2NoaXAoTE9DT01PX0lSUV9LRVlfU1RBUlQsICZsb2NvbW9fa2V5X2NoaXApOwotCXNldF9pcnFfY2hpcF9kYXRhKExPQ09NT19JUlFfS0VZX1NUQVJULCBpcnFiYXNlKTsKLQlzZXRfaXJxX2hhbmRsZXIoTE9DT01PX0lSUV9LRVlfU1RBUlQsIGhhbmRsZV9lZGdlX2lycSk7Ci0Jc2V0X2lycV9mbGFncyhMT0NPTU9fSVJRX0tFWV9TVEFSVCwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOwotCi0JLyogaW5zdGFsbCBoYW5kbGVycyBmb3IgSVJRX0xPQ09NT19HUElPX0JBU0UgZ2VuZXJhdGVkIGludGVycnVwdHMgKi8KLQlmb3IgKGlycSA9IExPQ09NT19JUlFfR1BJT19TVEFSVDsgaXJxIDwgTE9DT01PX0lSUV9HUElPX1NUQVJUICsgMTY7IGlycSsrKSB7Ci0JCXNldF9pcnFfY2hpcChpcnEsICZsb2NvbW9fZ3Bpb19jaGlwKTsKLQkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCBpcnFiYXNlKTsKLQkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2VkZ2VfaXJxKTsKLQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKLQl9Ci0KLQkvKiBpbnN0YWxsIGhhbmRsZXJzIGZvciBJUlFfTE9DT01PX0xUX0JBU0UgZ2VuZXJhdGVkIGludGVycnVwdHMgKi8KLQlzZXRfaXJxX2NoaXAoTE9DT01PX0lSUV9MVF9TVEFSVCwgJmxvY29tb19sdF9jaGlwKTsKLQlzZXRfaXJxX2NoaXBfZGF0YShMT0NPTU9fSVJRX0xUX1NUQVJULCBpcnFiYXNlKTsKLQlzZXRfaXJxX2hhbmRsZXIoTE9DT01PX0lSUV9MVF9TVEFSVCwgaGFuZGxlX2VkZ2VfaXJxKTsKLQlzZXRfaXJxX2ZsYWdzKExPQ09NT19JUlFfTFRfU1RBUlQsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKLQotCS8qIGluc3RhbGwgaGFuZGxlcnMgZm9yIElSUV9MT0NPTU9fU1BJX0JBU0UgZ2VuZXJhdGVkIGludGVycnVwdHMgKi8KLQlmb3IgKGlycSA9IExPQ09NT19JUlFfU1BJX1NUQVJUOyBpcnEgPCBMT0NPTU9fSVJRX1NQSV9TVEFSVCArIDQ7IGlycSsrKSB7Ci0JCXNldF9pcnFfY2hpcChpcnEsICZsb2NvbW9fc3BpX2NoaXApOwotCQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsIGlycWJhc2UpOwotCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfZWRnZV9pcnEpOworCS8qIEluc3RhbGwgaGFuZGxlcnMgZm9yIElSUV9MT0NPTU9fKiAqLworCWZvciAoIDsgaXJxIDw9IGxjaGlwLT5pcnFfYmFzZSArIDM7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZsb2NvbW9fY2hpcCk7CisJCXNldF9pcnFfY2hpcF9kYXRhKGlycSwgbGNoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQgfCBJUlFGX1BST0JFKTsKIAl9CiB9CkBAIC01NTUsNyArMjUyLDggQEAKIAkJZGV2LT5tYXBiYXNlID0gMDsKIAlkZXYtPmxlbmd0aCA9IGluZm8tPmxlbmd0aDsKIAotCW1lbW1vdmUoZGV2LT5pcnEsIGluZm8tPmlycSwgc2l6ZW9mKGRldi0+aXJxKSk7CisJZGV2LT5pcnFbMF0gPSAobGNoaXAtPmlycV9iYXNlID09IE5PX0lSUSkgPworCQkJTk9fSVJRIDogbGNoaXAtPmlycV9iYXNlICsgaW5mby0+aXJxWzBdOwogCiAJcmV0ID0gZGV2aWNlX3JlZ2lzdGVyKCZkZXYtPmRldik7CiAJaWYgKHJldCkgewpAQCAtNjcyLDYgKzM3MCw3IEBACiBzdGF0aWMgaW50CiBfX2xvY29tb19wcm9iZShzdHJ1Y3QgZGV2aWNlICptZSwgc3RydWN0IHJlc291cmNlICptZW0sIGludCBpcnEpCiB7CisJc3RydWN0IGxvY29tb19wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IG1lLT5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBsb2NvbW8gKmxjaGlwOwogCXVuc2lnbmVkIGxvbmcgcjsKIAlpbnQgaSwgcmV0ID0gLUVOT0RFVjsKQEAgLTY4Nyw2ICszODYsNyBAQAogCiAJbGNoaXAtPnBoeXMgPSBtZW0tPnN0YXJ0OwogCWxjaGlwLT5pcnEgPSBpcnE7CisJbGNoaXAtPmlycV9iYXNlID0gKHBkYXRhKSA/IHBkYXRhLT5pcnFfYmFzZSA6IE5PX0lSUTsKIAogCS8qCiAJICogTWFwIHRoZSB3aG9sZSByZWdpb24uICBUaGlzIGFsc28gbWFwcyB0aGUKQEAgLTc1Myw3ICs0NTMsNyBAQAogCSAqIFRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciBtdXN0IGJlIGluaXRpYWxpc2VkIGJlZm9yZSBhbnkKIAkgKiBvdGhlciBkZXZpY2UgdG8gZW5zdXJlIHRoYXQgdGhlIGludGVycnVwdHMgYXJlIGF2YWlsYWJsZS4KIAkgKi8KLQlpZiAobGNoaXAtPmlycSAhPSBOT19JUlEpCisJaWYgKGxjaGlwLT5pcnEgIT0gTk9fSVJRICYmIGxjaGlwLT5pcnFfYmFzZSAhPSBOT19JUlEpCiAJCWxvY29tb19zZXR1cF9pcnEobGNoaXApOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobG9jb21vX2RldmljZXMpOyBpKyspCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2ExMTExLmMgYi9hcmNoL2FybS9jb21tb24vc2ExMTExLmMKaW5kZXggOGJhNzA0NC4uYTUyYTI3YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL3NhMTExMS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zYTExMTEuYwpAQCAtMzUsNiArMzUsNTggQEAKIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9zYTExMTEuaD4KIAorLyogU0ExMTExIElSUXMgKi8KKyNkZWZpbmUgSVJRX0dQQUlOMAkJKDApCisjZGVmaW5lIElSUV9HUEFJTjEJCSgxKQorI2RlZmluZSBJUlFfR1BBSU4yCQkoMikKKyNkZWZpbmUgSVJRX0dQQUlOMwkJKDMpCisjZGVmaW5lIElSUV9HUEJJTjAJCSg0KQorI2RlZmluZSBJUlFfR1BCSU4xCQkoNSkKKyNkZWZpbmUgSVJRX0dQQklOMgkJKDYpCisjZGVmaW5lIElSUV9HUEJJTjMJCSg3KQorI2RlZmluZSBJUlFfR1BCSU40CQkoOCkKKyNkZWZpbmUgSVJRX0dQQklONQkJKDkpCisjZGVmaW5lIElSUV9HUENJTjAJCSgxMCkKKyNkZWZpbmUgSVJRX0dQQ0lOMQkJKDExKQorI2RlZmluZSBJUlFfR1BDSU4yCQkoMTIpCisjZGVmaW5lIElSUV9HUENJTjMJCSgxMykKKyNkZWZpbmUgSVJRX0dQQ0lONAkJKDE0KQorI2RlZmluZSBJUlFfR1BDSU41CQkoMTUpCisjZGVmaW5lIElSUV9HUENJTjYJCSgxNikKKyNkZWZpbmUgSVJRX0dQQ0lONwkJKDE3KQorI2RlZmluZSBJUlFfTVNUWElOVAkJKDE4KQorI2RlZmluZSBJUlFfTVNSWElOVAkJKDE5KQorI2RlZmluZSBJUlFfTVNTVE9QRVJSSU5UCSgyMCkKKyNkZWZpbmUgSVJRX1RQVFhJTlQJCSgyMSkKKyNkZWZpbmUgSVJRX1RQUlhJTlQJCSgyMikKKyNkZWZpbmUgSVJRX1RQU1RPUEVSUklOVAkoMjMpCisjZGVmaW5lIFNTUFhNVElOVAkJKDI0KQorI2RlZmluZSBTU1BSQ1ZJTlQJCSgyNSkKKyNkZWZpbmUgU1NQUk9SCQkJKDI2KQorI2RlZmluZSBBVURYTVRETUFET05FQQkJKDMyKQorI2RlZmluZSBBVURSQ1ZETUFET05FQQkJKDMzKQorI2RlZmluZSBBVURYTVRETUFET05FQgkJKDM0KQorI2RlZmluZSBBVURSQ1ZETUFET05FQgkJKDM1KQorI2RlZmluZSBBVURURlNSCQkJKDM2KQorI2RlZmluZSBBVURSRlNSCQkJKDM3KQorI2RlZmluZSBBVURUVVIJCQkoMzgpCisjZGVmaW5lIEFVRFJPUgkJCSgzOSkKKyNkZWZpbmUgQVVERFRTCQkJKDQwKQorI2RlZmluZSBBVURSREQJCQkoNDEpCisjZGVmaW5lIEFVRFNUTwkJCSg0MikKKyNkZWZpbmUgSVJRX1VTQlBXUgkJKDQzKQorI2RlZmluZSBJUlFfSENJTQkJKDQ0KQorI2RlZmluZSBJUlFfSENJQlVGRkFDQwkJKDQ1KQorI2RlZmluZSBJUlFfSENJUk1UV0tQCQkoNDYpCisjZGVmaW5lIElSUV9OSENJTUZDSVIJCSg0NykKKyNkZWZpbmUgSVJRX1VTQl9QT1JUX1JFU1VNRQkoNDgpCisjZGVmaW5lIElSUV9TMF9SRUFEWV9OSU5UCSg0OSkKKyNkZWZpbmUgSVJRX1MxX1JFQURZX05JTlQJKDUwKQorI2RlZmluZSBJUlFfUzBfQ0RfVkFMSUQJCSg1MSkKKyNkZWZpbmUgSVJRX1MxX0NEX1ZBTElECQkoNTIpCisjZGVmaW5lIElSUV9TMF9CVkQxX1NUU0NIRwkoNTMpCisjZGVmaW5lIElSUV9TMV9CVkQxX1NUU0NIRwkoNTQpCisKIGV4dGVybiB2b2lkIF9faW5pdCBzYTExMTBfbWJfZW5hYmxlKHZvaWQpOwogCiAvKgpAQCAtNDksNiArMTAxLDcgQEAKIAlzdHJ1Y3QgY2xrCSpjbGs7CiAJdW5zaWduZWQgbG9uZwlwaHlzOwogCWludAkJaXJxOworCWludAkJaXJxX2Jhc2U7CS8qIGJhc2UgZm9yIGNhc2NhZGVkIG9uLWNoaXAgSVJRcyAqLwogCXNwaW5sb2NrX3QJbG9jazsKIAl2b2lkIF9faW9tZW0JKmJhc2U7CiAjaWZkZWYgQ09ORklHX1BNCkBAIC0xNTIsMzYgKzIwNSwzNyBAQAogc2ExMTExX2lycV9oYW5kbGVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKIHsKIAl1bnNpZ25lZCBpbnQgc3RhdDAsIHN0YXQxLCBpOwotCXZvaWQgX19pb21lbSAqYmFzZSA9IGdldF9pcnFfZGF0YShpcnEpOworCXN0cnVjdCBzYTExMTEgKnNhY2hpcCA9IGdldF9pcnFfZGF0YShpcnEpOworCXZvaWQgX19pb21lbSAqbWFwYmFzZSA9IHNhY2hpcC0+YmFzZSArIFNBMTExMV9JTlRDOwogCi0Jc3RhdDAgPSBzYTExMTFfcmVhZGwoYmFzZSArIFNBMTExMV9JTlRTVEFUQ0xSMCk7Ci0Jc3RhdDEgPSBzYTExMTFfcmVhZGwoYmFzZSArIFNBMTExMV9JTlRTVEFUQ0xSMSk7CisJc3RhdDAgPSBzYTExMTFfcmVhZGwobWFwYmFzZSArIFNBMTExMV9JTlRTVEFUQ0xSMCk7CisJc3RhdDEgPSBzYTExMTFfcmVhZGwobWFwYmFzZSArIFNBMTExMV9JTlRTVEFUQ0xSMSk7CiAKLQlzYTExMTFfd3JpdGVsKHN0YXQwLCBiYXNlICsgU0ExMTExX0lOVFNUQVRDTFIwKTsKKwlzYTExMTFfd3JpdGVsKHN0YXQwLCBtYXBiYXNlICsgU0ExMTExX0lOVFNUQVRDTFIwKTsKIAogCWRlc2MtPmNoaXAtPmFjayhpcnEpOwogCi0Jc2ExMTExX3dyaXRlbChzdGF0MSwgYmFzZSArIFNBMTExMV9JTlRTVEFUQ0xSMSk7CisJc2ExMTExX3dyaXRlbChzdGF0MSwgbWFwYmFzZSArIFNBMTExMV9JTlRTVEFUQ0xSMSk7CiAKIAlpZiAoc3RhdDAgPT0gMCAmJiBzdGF0MSA9PSAwKSB7CiAJCWRvX2JhZF9JUlEoaXJxLCBkZXNjKTsKIAkJcmV0dXJuOwogCX0KIAotCWZvciAoaSA9IElSUV9TQTExMTFfU1RBUlQ7IHN0YXQwOyBpKyssIHN0YXQwID4+PSAxKQorCWZvciAoaSA9IDA7IHN0YXQwOyBpKyssIHN0YXQwID4+PSAxKQogCQlpZiAoc3RhdDAgJiAxKQotCQkJaGFuZGxlX2VkZ2VfaXJxKGksIGlycV9kZXNjICsgaSk7CisJCQlnZW5lcmljX2hhbmRsZV9pcnEoaSArIHNhY2hpcC0+aXJxX2Jhc2UpOwogCi0JZm9yIChpID0gSVJRX1NBMTExMV9TVEFSVCArIDMyOyBzdGF0MTsgaSsrLCBzdGF0MSA+Pj0gMSkKKwlmb3IgKGkgPSAzMjsgc3RhdDE7IGkrKywgc3RhdDEgPj49IDEpCiAJCWlmIChzdGF0MSAmIDEpCi0JCQloYW5kbGVfZWRnZV9pcnEoaSwgaXJxX2Rlc2MgKyBpKTsKKwkJCWdlbmVyaWNfaGFuZGxlX2lycShpICsgc2FjaGlwLT5pcnFfYmFzZSk7CiAKIAkvKiBGb3IgbGV2ZWwtYmFzZWQgaW50ZXJydXB0cyAqLwogCWRlc2MtPmNoaXAtPnVubWFzayhpcnEpOwogfQogCi0jZGVmaW5lIFNBMTExMV9JUlFNQVNLX0xPKHgpCSgxIDw8ICh4IC0gSVJRX1NBMTExMV9TVEFSVCkpCi0jZGVmaW5lIFNBMTExMV9JUlFNQVNLX0hJKHgpCSgxIDw8ICh4IC0gSVJRX1NBMTExMV9TVEFSVCAtIDMyKSkKKyNkZWZpbmUgU0ExMTExX0lSUU1BU0tfTE8oeCkJKDEgPDwgKHggLSBzYWNoaXAtPmlycV9iYXNlKSkKKyNkZWZpbmUgU0ExMTExX0lSUU1BU0tfSEkoeCkJKDEgPDwgKHggLSBzYWNoaXAtPmlycV9iYXNlIC0gMzIpKQogCiBzdGF0aWMgdm9pZCBzYTExMTFfYWNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewpAQCAtMTg5LDcgKzI0Myw4IEBACiAKIHN0YXRpYyB2b2lkIHNhMTExMV9tYXNrX2xvd2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXZvaWQgX19pb21lbSAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJc3RydWN0IHNhMTExMSAqc2FjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBzYWNoaXAtPmJhc2UgKyBTQTExMTFfSU5UQzsKIAl1bnNpZ25lZCBsb25nIGllMDsKIAogCWllMCA9IHNhMTExMV9yZWFkbChtYXBiYXNlICsgU0ExMTExX0lOVEVOMCk7CkBAIC0xOTksNyArMjU0LDggQEAKIAogc3RhdGljIHZvaWQgc2ExMTExX3VubWFza19sb3dpcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCBzYTExMTEgKnNhY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlID0gc2FjaGlwLT5iYXNlICsgU0ExMTExX0lOVEM7CiAJdW5zaWduZWQgbG9uZyBpZTA7CiAKIAlpZTAgPSBzYTExMTFfcmVhZGwobWFwYmFzZSArIFNBMTExMV9JTlRFTjApOwpAQCAtMjE2LDggKzI3Miw5IEBACiAgKi8KIHN0YXRpYyBpbnQgc2ExMTExX3JldHJpZ2dlcl9sb3dpcnEodW5zaWduZWQgaW50IGlycSkKIHsKKwlzdHJ1Y3Qgc2ExMTExICpzYWNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXZvaWQgX19pb21lbSAqbWFwYmFzZSA9IHNhY2hpcC0+YmFzZSArIFNBMTExMV9JTlRDOwogCXVuc2lnbmVkIGludCBtYXNrID0gU0ExMTExX0lSUU1BU0tfTE8oaXJxKTsKLQl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwogCXVuc2lnbmVkIGxvbmcgaXAwOwogCWludCBpOwogCkBAIC0yMzcsOCArMjk0LDkgQEAKIAogc3RhdGljIGludCBzYTExMTFfdHlwZV9sb3dpcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IGZsYWdzKQogeworCXN0cnVjdCBzYTExMTEgKnNhY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlID0gc2FjaGlwLT5iYXNlICsgU0ExMTExX0lOVEM7CiAJdW5zaWduZWQgaW50IG1hc2sgPSBTQTExMTFfSVJRTUFTS19MTyhpcnEpOwotCXZvaWQgX19pb21lbSAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CiAJdW5zaWduZWQgbG9uZyBpcDA7CiAKIAlpZiAoZmxhZ3MgPT0gSVJRX1RZUEVfUFJPQkUpCkBAIC0yNjAsOCArMzE4LDkgQEAKIAogc3RhdGljIGludCBzYTExMTFfd2FrZV9sb3dpcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IG9uKQogeworCXN0cnVjdCBzYTExMTEgKnNhY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlID0gc2FjaGlwLT5iYXNlICsgU0ExMTExX0lOVEM7CiAJdW5zaWduZWQgaW50IG1hc2sgPSBTQTExMTFfSVJRTUFTS19MTyhpcnEpOwotCXZvaWQgX19pb21lbSAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CiAJdW5zaWduZWQgbG9uZyB3ZTA7CiAKIAl3ZTAgPSBzYTExMTFfcmVhZGwobWFwYmFzZSArIFNBMTExMV9XQUtFRU4wKTsKQEAgLTI4Niw3ICszNDUsOCBAQAogCiBzdGF0aWMgdm9pZCBzYTExMTFfbWFza19oaWdoaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0Jdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlzdHJ1Y3Qgc2ExMTExICpzYWNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXZvaWQgX19pb21lbSAqbWFwYmFzZSA9IHNhY2hpcC0+YmFzZSArIFNBMTExMV9JTlRDOwogCXVuc2lnbmVkIGxvbmcgaWUxOwogCiAJaWUxID0gc2ExMTExX3JlYWRsKG1hcGJhc2UgKyBTQTExMTFfSU5URU4xKTsKQEAgLTI5Niw3ICszNTYsOCBAQAogCiBzdGF0aWMgdm9pZCBzYTExMTFfdW5tYXNrX2hpZ2hpcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCBzYTExMTEgKnNhY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlID0gc2FjaGlwLT5iYXNlICsgU0ExMTExX0lOVEM7CiAJdW5zaWduZWQgbG9uZyBpZTE7CiAKIAlpZTEgPSBzYTExMTFfcmVhZGwobWFwYmFzZSArIFNBMTExMV9JTlRFTjEpOwpAQCAtMzEzLDggKzM3NCw5IEBACiAgKi8KIHN0YXRpYyBpbnQgc2ExMTExX3JldHJpZ2dlcl9oaWdoaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CisJc3RydWN0IHNhMTExMSAqc2FjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBzYWNoaXAtPmJhc2UgKyBTQTExMTFfSU5UQzsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IFNBMTExMV9JUlFNQVNLX0hJKGlycSk7Ci0Jdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKIAl1bnNpZ25lZCBsb25nIGlwMTsKIAlpbnQgaTsKIApAQCAtMzM0LDggKzM5Niw5IEBACiAKIHN0YXRpYyBpbnQgc2ExMTExX3R5cGVfaGlnaGlycSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CisJc3RydWN0IHNhMTExMSAqc2FjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBzYWNoaXAtPmJhc2UgKyBTQTExMTFfSU5UQzsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IFNBMTExMV9JUlFNQVNLX0hJKGlycSk7Ci0Jdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKIAl1bnNpZ25lZCBsb25nIGlwMTsKIAogCWlmIChmbGFncyA9PSBJUlFfVFlQRV9QUk9CRSkKQEAgLTM1Nyw4ICs0MjAsOSBAQAogCiBzdGF0aWMgaW50IHNhMTExMV93YWtlX2hpZ2hpcnEodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IG9uKQogeworCXN0cnVjdCBzYTExMTEgKnNhY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJdm9pZCBfX2lvbWVtICptYXBiYXNlID0gc2FjaGlwLT5iYXNlICsgU0ExMTExX0lOVEM7CiAJdW5zaWduZWQgaW50IG1hc2sgPSBTQTExMTFfSVJRTUFTS19ISShpcnEpOwotCXZvaWQgX19pb21lbSAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CiAJdW5zaWduZWQgbG9uZyB3ZTE7CiAKIAl3ZTEgPSBzYTExMTFfcmVhZGwobWFwYmFzZSArIFNBMTExMV9XQUtFRU4xKTsKQEAgLTQxMiwxNCArNDc2LDE0IEBACiAKIAlmb3IgKGlycSA9IElSUV9HUEFJTjA7IGlycSA8PSBTU1BST1I7IGlycSsrKSB7CiAJCXNldF9pcnFfY2hpcChpcnEsICZzYTExMTFfbG93X2NoaXApOwotCQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsIGlycWJhc2UpOworCQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsIHNhY2hpcCk7CiAJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9lZGdlX2lycSk7CiAJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CiAJfQogCiAJZm9yIChpcnEgPSBBVURYTVRETUFET05FQTsgaXJxIDw9IElSUV9TMV9CVkQxX1NUU0NIRzsgaXJxKyspIHsKIAkJc2V0X2lycV9jaGlwKGlycSwgJnNhMTExMV9oaWdoX2NoaXApOwotCQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsIGlycWJhc2UpOworCQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsIHNhY2hpcCk7CiAJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9lZGdlX2lycSk7CiAJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CiAJfQpAQCAtNDI4LDcgKzQ5Miw3IEBACiAJICogUmVnaXN0ZXIgU0ExMTExIGludGVycnVwdAogCSAqLwogCXNldF9pcnFfdHlwZShzYWNoaXAtPmlycSwgSVJRX1RZUEVfRURHRV9SSVNJTkcpOwotCXNldF9pcnFfZGF0YShzYWNoaXAtPmlycSwgaXJxYmFzZSk7CisJc2V0X2lycV9kYXRhKHNhY2hpcC0+aXJxLCBzYWNoaXApOwogCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKHNhY2hpcC0+aXJxLCBzYTExMTFfaXJxX2hhbmRsZXIpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2Nvb3AuYyBiL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCmluZGV4IDM3YmRhNWYuLjkwMTIwMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zY29vcC5jCkBAIC0xNDAsNiArMTQwLDcgQEAKIEVYUE9SVF9TWU1CT0wocmVhZF9zY29vcF9yZWcpOwogRVhQT1JUX1NZTUJPTCh3cml0ZV9zY29vcF9yZWcpOwogCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgdm9pZCBjaGVja19zY29vcF9yZWcoc3RydWN0IHNjb29wX2RldiAqc2RldikKIHsKIAl1bnNpZ25lZCBzaG9ydCBtY3I7CkBAIC0xNDksNyArMTUwLDYgQEAKIAkJaW93cml0ZTE2KDB4MDEwMSwgc2Rldi0+YmFzZSArIFNDT09QX01DUik7CiB9CiAKLSNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgc2Nvb3Bfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlzdHJ1Y3Qgc2Nvb3BfZGV2ICpzZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvYW0zNTE3X2V2bV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2FtMzUxN19ldm1fZGVmY29uZmlnCmluZGV4IGFiZTk5NjYuLjY2YTEwYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvYW0zNTE3X2V2bV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9hbTM1MTdfZXZtX2RlZmNvbmZpZwpAQCAtMjAxLDcgKzIwMSw3IEBACiAjIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfREVCVUdfQ0xPQ0tET01BSU4gaXMgbm90IHNldAogQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTPXkKLSMgQ09ORklHX09NQVBfTVVYIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX01VWD15CiAjIENPTkZJR19PTUFQX01DQlNQIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldApAQCAtNTkwLDcgKzU5MCw0NiBAQAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19PTUFQPXkKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TUEkgaXMgbm90IHNldAogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2FwNGV2Yl9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2FwNGV2Yl9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0MjI5YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvYXA0ZXZiX2RlZmNvbmZpZwpAQCAtMCwwICsxLDc3OSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjNworIyBNb24gRmViICA4IDEyOjI1OjM2IDIwMTAKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk89eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorQ09ORklHX1JEX0JaSVAyPXkKK0NPTkZJR19SRF9MWk1BPXkKK0NPTkZJR19SRF9MWk89eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9DTEs9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEQUY9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworQ09ORklHX01NVT15CisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RPVkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NITU9CSUxFPXkKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKKworIworIyBTSC1Nb2JpbGUgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfU0g3MzY3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0g3Mzc3IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NINzM3Mj15CisKKyMKKyMgU0gtTW9iaWxlIEJvYXJkIFR5cGUKKyMKK0NPTkZJR19NQUNIX0FQNEVWQj15CisKKyMKKyMgU0gtTW9iaWxlIFN5c3RlbSBDb25maWd1cmF0aW9uCisjCisKKyMKKyMgTWVtb3J5IGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19NRU1PUllfU1RBUlQ9MHg0MDAwMDAwMAorQ09ORklHX01FTU9SWV9TSVpFPTB4MTAwMDAwMDAKKworIworIyBUaW1lciBhbmQgY2xvY2sgY29uZmlndXJhdGlvbgorIworQ09ORklHX1NIX1RJTUVSX0NNVD15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzJ2Nks9eQorQ09ORklHX0NQVV9WNz15CitDT05GSUdfQ1BVXzMydjc9eQorQ09ORklHX0NQVV9BQlJUX0VWNz15CitDT05GSUdfQ1BVX1BBQlJUX1Y3PXkKK0NPTkZJR19DUFVfQ0FDSEVfVjc9eQorQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKK0NPTkZJR19DUFVfQ09QWV9WNj15CitDT05GSUdfQ1BVX1RMQl9WNz15CitDT05GSUdfQ1BVX0hBU19BU0lEPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQVJNX1RIVU1CRUUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfSEFTX1RMU19SRUc9eQorQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01CisjIENPTkZJR19BUk1fRVJSQVRBXzQzMDk3MyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fRVJSQVRBXzQ1ODY5MyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fRVJSQVRBXzQ2MDA3NSBpcyBub3Qgc2V0CitDT05GSUdfQ09NTU9OX0NMS0RFVj15CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0haPTEwMAorIyBDT05GSUdfVEhVTUIyX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfQUVBQkk9eQorIyBDT05GSUdfT0FCSV9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKyMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzAsMTE1MjAwIGVhcmx5cHJpbnRrPXNoLXNjaS4wLDExNTIwMCIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0tFWEVDPXkKK0NPTkZJR19BVEFHU19QUk9DPXkKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1NIX1NDST15CitDT05GSUdfU0VSSUFMX1NIX1NDSV9OUl9VQVJUUz04CitDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX0ZTTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfRklMRVNZU1RFTVMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVU5XSU5EPXkKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CitDT05GSUdfREVDT01QUkVTU19MWk89eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2RldmtpdDgwMDBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9kZXZraXQ4MDAwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWE4MTdlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9kZXZraXQ4MDAwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDE4ODkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzYKKyMgVGh1IEZlYiAgNCAxNTo0Mjo1NiAyMDEwCisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfQVJDSF9IQVNfQ1BVRlJFUT15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk89eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CitDT05GSUdfUkRfQlpJUDI9eQorQ09ORklHX1JEX0xaTUE9eQorIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX1NMT1dfV09SSyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9HRU5FUklDX0RNQV9DT0hFUkVOVD15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorQ09ORklHX0JBU0VfU01BTEw9MAorQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFZFUlNJT05TPXkKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCREFGPXkKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSBUeXBlCisjCitDT05GSUdfTU1VPXkKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9PTUFQPXkKKyMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKKworIworIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucworIworQ09ORklHX0FSQ0hfT01BUF9PVEc9eQorIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9PTUFQMlBMVVM9eQorIyBDT05GSUdfQVJDSF9PTUFQMiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9PTUFQMz15CisjIENPTkZJR19BUkNIX09NQVA0IGlzIG5vdCBzZXQKKworIworIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucworIworIyBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MgaXMgbm90IHNldAorIyBDT05GSUdfT01BUF9NVVggaXMgbm90IHNldAorQ09ORklHX09NQVBfTUNCU1A9eQorIyBDT05GSUdfT01BUF9NQk9YX0ZXSyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQX01QVV9USU1FUiBpcyBub3Qgc2V0CitDT05GSUdfT01BUF8zMktfVElNRVI9eQorQ09ORklHX09NQVBfMzJLX1RJTUVSX0haPTEyOAorQ09ORklHX09NQVBfRE1fVElNRVI9eQorIyBDT05GSUdfT01BUF9QTV9OT05FIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX1BNX05PT1A9eQorQ09ORklHX0FSQ0hfT01BUDM0MzA9eQorCisjCisjIE9NQVAgQm9hcmQgVHlwZQorIworIyBDT05GSUdfTUFDSF9PTUFQM19CRUFHTEUgaXMgbm90IHNldAorQ09ORklHX01BQ0hfREVWS0lUODAwMD15CisjIENPTkZJR19NQUNIX09NQVBfTERQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT1ZFUk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PTUFQM0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX09NQVAzNTE3RVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT01BUDNfUEFORE9SQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX09NQVAzX1RPVUNIQk9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX09NQVBfMzQzMFNEUCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX05PS0lBX1JYNTEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PTUFQX1pPT00yIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT01BUF9aT09NMyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NNX1QzNSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0lHRVAwMDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT01BUF8zNjMwU0RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVAzX0VNVSBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQM19TRFJDX0FDX1RJTUlORyBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfMzJ2Nks9eQorQ09ORklHX0NQVV9WNz15CitDT05GSUdfQ1BVXzMydjc9eQorQ09ORklHX0NQVV9BQlJUX0VWNz15CitDT05GSUdfQ1BVX1BBQlJUX1Y3PXkKK0NPTkZJR19DUFVfQ0FDSEVfVjc9eQorQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKK0NPTkZJR19DUFVfQ09QWV9WNj15CitDT05GSUdfQ1BVX1RMQl9WNz15CitDT05GSUdfQ1BVX0hBU19BU0lEPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQVJNX1RIVU1CRUUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfSEFTX1RMU19SRUc9eQorQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD02CisjIENPTkZJR19BUk1fRVJSQVRBXzQzMDk3MyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fRVJSQVRBXzQ1ODY5MyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fRVJSQVRBXzQ2MDA3NSBpcyBub3Qgc2V0CitDT05GSUdfQ09NTU9OX0NMS0RFVj15CisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfVElDS19PTkVTSE9UPXkKK0NPTkZJR19OT19IWj15CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMjgKKyMgQ09ORklHX1RIVU1CMl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CitDT05GSUdfQVJDSF9IQVNfSE9MRVNfTUVNT1JZTU9ERUw9eQorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMyLDExNTIwMG44IHJvb3Q9L2Rldi9uZnMgbmZzcm9vdD0xOTIuMTY4LjEuMTpob21lL25mc3Jvb3QvY3VycmVudCxob21lL25mc3Jvb3QvY3VycmVudCBpcD1kaGNwIHJ3IG5vaW5pdHJkIHJvb3QgIGRlbGF5PTMiCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworQ09ORklHX0ZQRV9OV0ZQRT15CisjIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorQ09ORklHX1ZGUD15CitDT05GSUdfVkZQdjM9eQorQ09ORklHX05FT049eQorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CitDT05GSUdfWEZSTT15CisjIENPTkZJR19YRlJNX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX05FVF9LRVk9eQorIyBDT05GSUdfTkVUX0tFWV9NSUdSQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVD15CisjIENPTkZJR19JTkVUX0xSTyBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorQ09ORklHX0lSREE9eQorCisjCisjIElyREEgcHJvdG9jb2xzCisjCisjIENPTkZJR19JUkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkNPTU0gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQV9VTFRSQSBpcyBub3Qgc2V0CisKKyMKKyMgSXJEQSBvcHRpb25zCisjCisjIENPTkZJR19JUkRBX0NBQ0hFX0xBU1RfTFNBUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBX0ZBU1RfUlIgaXMgbm90IHNldAorIyBDT05GSUdfSVJEQV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5mcmFyZWQtcG9ydCBkZXZpY2UgZHJpdmVycworIworCisjCisjIFNJUiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfSVJUVFlfU0lSIGlzIG5vdCBzZXQKKworIworIyBEb25nbGUgc3VwcG9ydAorIworIyBDT05GSUdfS0lOR1NVTl9ET05HTEUgaXMgbm90IHNldAorIyBDT05GSUdfS1NEQVpaTEVfRE9OR0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTOTU5X0RPTkdMRSBpcyBub3Qgc2V0CisKKyMKKyMgRklSIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSUdNQVRFTF9GSVIgaXMgbm90IHNldAorIyBDT05GSUdfTUNTX0ZJUiBpcyBub3Qgc2V0CitDT05GSUdfQlQ9eQorIyBDT05GSUdfQlRfTDJDQVAgaXMgbm90IHNldAorIyBDT05GSUdfQlRfU0NPIGlzIG5vdCBzZXQKKworIworIyBCbHVldG9vdGggZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0JUX0hDSUJUVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJUU0RJTyBpcyBub3Qgc2V0CisjIENPTkZJR19CVF9IQ0lVQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJDTTIwM1ggaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlBBMTBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSVZIQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQlRfTVJWTCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBTkRBTE9ORT15CisjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCisjIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUkFNPXkKK0NPTkZJR19NVERfUk9NPXkKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9EQVRBRkxBU0ggaXMgbm90IHNldAorIyBDT05GSUdfTVREX00yNVA4MCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU1NUMjVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9PTUFQMj15CitDT05GSUdfTVREX05BTkRfT01BUF9QUkVGRVRDSD15CisjIENPTkZJR19NVERfTkFORF9PTUFQX1BSRUZFVENIX0RNQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKK0NPTkZJR19NVERfVUJJPXkKK0NPTkZJR19NVERfVUJJX1dMX1RIUkVTSE9MRD00MDk2CitDT05GSUdfTVREX1VCSV9CRUJfUkVTRVJWRT0xCisjIENPTkZJR19NVERfVUJJX0dMVUVCSSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIGRlYnVnZ2luZyBvcHRpb25zCisjCisjIENPTkZJR19NVERfVUJJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYwCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZFVEggaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CitDT05GSUdfRE05MDAwPXkKK0NPTkZJR19ETTkwMDBfREVCVUdMRVZFTD00CitDT05GSUdfRE05MDAwX0ZPUkNFX1NJTVBMRV9QSFlfUE9MTD15CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOIGlzIG5vdCBzZXQKKworIworIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfTUFUUklYPXkKKyMgQ09ORklHX0tFWUJPQVJEX0xNODMyMyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9UV0w0MDMwPXkKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRFlOQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01DUzUwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1VTQl9DT01QT1NJVEUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UU0MyMDA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorQ09ORklHX1NFUklPX0xJQlBTMj15CitDT05GSUdfU0VSSU9fUkFXPXkKKyMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMyCitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQ9eQorQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFM9eQorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTBfREVURUNUX0lSUT15CitDT05GSUdfU0VSSUFMXzgyNTBfUlNBPXkKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorQ09ORklHX1JBV19EUklWRVI9eQorQ09ORklHX01BWF9SQVdfREVWUz0yNTYKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfT01BUD15CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorQ09ORklHX1NQST15CisjIENPTkZJR19TUElfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX09NQVAyNFhYPXkKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCisjIENPTkZJR19TUElfU1BJREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9UTEU2MlgwIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CitDT05GSUdfR1BJT0xJQj15CisjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorQ09ORklHX0dQSU9fVFdMNDAzMD15CisjIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAorCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworQ09ORklHX01GRF9DT1JFPXkKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFBTNjUwMTAgaXMgbm90IHNldAorQ09ORklHX1RXTDQwMzBfQ09SRT15CitDT05GSUdfVFdMNDAzMF9QT1dFUj15CitDT05GSUdfVFdMNDAzMF9DT0RFQz15CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9NQVg4NjYwIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15CisjIENPTkZJR19SRUdVTEFUT1JfTFAzOTcxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTAyMyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwN1ggaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU49eQorQ09ORklHX0ZCX0JPVEhfRU5ESUFOPXkKKyMgQ09ORklHX0ZCX0JJR19FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfTElUVExFX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAorQ09ORklHX0ZCX09NQVBfQk9PVExPQURFUl9JTklUPXkKK0NPTkZJR19PTUFQMl9WUkFNPXkKK0NPTkZJR19PTUFQMl9WUkZCPXkKK0NPTkZJR19PTUFQMl9EU1M9eQorQ09ORklHX09NQVAyX1ZSQU1fU0laRT0wCitDT05GSUdfT01BUDJfRFNTX0RFQlVHX1NVUFBPUlQ9eQorIyBDT05GSUdfT01BUDJfRFNTX0NPTExFQ1RfSVJRX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVAyX0RTU19SRkJJIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQMl9EU1NfVkVOQz15CisjIENPTkZJR19PTUFQMl9EU1NfU0RJIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVAyX0RTU19EU0kgaXMgbm90IHNldAorIyBDT05GSUdfT01BUDJfRFNTX0ZBS0VfVlNZTkMgaXMgbm90IHNldAorQ09ORklHX09NQVAyX0RTU19NSU5fRkNLX1BFUl9QQ0s9MAorQ09ORklHX0ZCX09NQVAyPXkKK0NPTkZJR19GQl9PTUFQMl9ERUJVR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZCX09NQVAyX0ZPUkNFX0FVVE9fVVBEQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9PTUFQMl9OVU1fRkJTPTMKKworIworIyBPTUFQMi8zIERpc3BsYXkgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19QQU5FTF9HRU5FUklDPXkKKyMgQ09ORklHX1BBTkVMX1NIQVJQX0xTMDM3VjdEVzAxIGlzIG5vdCBzZXQKK0NPTkZJR19QQU5FTF9JTk5PTFVYX0FUMDcwVE44Mz15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ESVNQTEFZX1NVUFBPUlQ9eQorCisjCisjIERpc3BsYXkgaGFyZHdhcmUgZHJpdmVycworIworCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlk9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CisjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKK0NPTkZJR19TT1VORD15CisjIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorQ09ORklHX1NORF9KQUNLPXkKKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9SQVdNSURJX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMM19MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEw0X0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NCQVdFX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRU1VMTBLMV9TRVEgaXMgbm90IHNldAorQ09ORklHX1NORF9EUklWRVJTPXkKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CitDT05GSUdfU05EX0FSTT15CitDT05GSUdfU05EX1NQST15CitDT05GSUdfU05EX1VTQj15CisjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfQ0FJQVEgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0M9eQorQ09ORklHX1NORF9PTUFQX1NPQz15CitDT05GSUdfU05EX09NQVBfU09DX01DQlNQPXkKK0NPTkZJR19TTkRfT01BUF9TT0NfT01BUDNfQkVBR0xFPXkKK0NPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPXkKKyMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQ19UV0w0MDMwPXkKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU1VQUE9SVD15CitDT05GSUdfSElEPXkKK0NPTkZJR19ISURSQVc9eQorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfSElEREVWPXkKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAorQ09ORklHX0hJRF9FWktFWT15CisjIENPTkZJR19ISURfS1lFIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfR1lSQVRJT049eQorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAorQ09ORklHX0hJRF9MT0dJVEVDSD15CisjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX01JQ1JPU09GVD15CitDT05GSUdfSElEX01PTlRFUkVZPXkKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorIyBDT05GSUdfSElEX0dSRUVOQVNJQSBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU01BUlRKT1lQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9UT1BTRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9USFJVU1RNQVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU1VQUE9SVD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQl9BUkNIX0hBU19FSENJPXkKK0NPTkZJR19VU0I9eQorIyBDT05GSUdfVVNCX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUPXkKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTM2Ml9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01VU0JfSERSQz15CitDT05GSUdfVVNCX01VU0JfU09DPXkKKworIworIyBPTUFQIDM0M3ggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydAorIworQ09ORklHX1VTQl9NVVNCX0hPU1Q9eQorIyBDT05GSUdfVVNCX01VU0JfUEVSSVBIRVJBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTVVTQl9PVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAorQ09ORklHX1VTQl9NVVNCX0hEUkNfSENEPXkKKyMgQ09ORklHX01VU0JfUElPX09OTFkgaXMgbm90IHNldAorQ09ORklHX1VTQl9JTlZFTlRSQV9ETUE9eQorIyBDT05GSUdfVVNCX1RJX0NQUElfRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CisjCisKKyMKKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KKyMKK0NPTkZJR19VU0JfU1RPUkFHRT1tCisjIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX1ZCVVNfRFJBVz0yCitDT05GSUdfVVNCX0dBREdFVF9TRUxFQ1RFRD15CisjIENPTkZJR19VU0JfR0FER0VUX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9BVE1FTF9VU0JBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1VTQjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MSDdBNDBYIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR0FER0VUX09NQVA9eQorQ09ORklHX1VTQl9PTUFQPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xBTkdXRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQVVESU89bQorQ09ORklHX1VTQl9FVEg9bQorQ09ORklHX1VTQl9FVEhfUk5ESVM9eQorQ09ORklHX1VTQl9FVEhfRUVNPXkKK0NPTkZJR19VU0JfR0FER0VURlM9bQorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUFTU19TVE9SQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR19TRVJJQUw9bQorIyBDT05GSUdfVVNCX01JRElfR0FER0VUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR19QUklOVEVSPW0KKyMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX01VTFRJIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKK0NPTkZJR19VU0JfT1RHX1VUSUxTPXkKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VTFBJIGlzIG5vdCBzZXQKK0NPTkZJR19UV0w0MDMwX1VTQj15CisjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19TREhDST15CitDT05GSUdfTU1DX1NESENJX1BMVEZNPW0KKyMgQ09ORklHX01NQ19PTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NTUNfT01BUF9IUz15CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19TUEk9bQorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX0dQSU89eQorQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFQzNTkzIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19UUklHR0VSX0hFQVJUQkVBVD15CisjIENPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKKworIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1RXTDQwMzA9eQorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgQ0JVUyBzdXBwb3J0CisjCisjIENPTkZJR19DQlVTIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorQ09ORklHX1FVT1RBPXkKKyMgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HPXkKK0NPTkZJR19RVU9UQV9UUkVFPXkKKyMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAorQ09ORklHX1FGTVRfVjI9eQorQ09ORklHX1FVT1RBQ1RMPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9GU19XQlVGX1ZFUklGWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorIyBDT05GSUdfSkZGUzJfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9SVElNRT15CisjIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0CitDT05GSUdfVUJJRlNfRlM9eQorIyBDT05GSUdfVUJJRlNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVUJJRlNfRlNfQURWQU5DRURfQ09NUFIgaXMgbm90IHNldAorQ09ORklHX1VCSUZTX0ZTX0xaTz15CitDT05GSUdfVUJJRlNfRlNfWkxJQj15CisjIENPTkZJR19VQklGU19GU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ1JBTUZTPXkKKyMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CitDT05GSUdfU1VOUlBDX0dTUz15CitDT05GSUdfUlBDU0VDX0dTU19LUkI1PXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1Y2OF9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworQ09ORklHX1BSSU5US19USU1FPXkKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUM9eQorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MQorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQorIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0FSTV9VTldJTkQ9eQorQ09ORklHX0RFQlVHX1VTRVI9eQorQ09ORklHX0RFQlVHX0VSUk9SUz15CisjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MTCBpcyBub3Qgc2V0CisjIENPTkZJR19PQ19FVE0gaXMgbm90IHNldAorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz15CisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworQ09ORklHX0NSWVBUT19DUkMzMkM9eQorIyBDT05GSUdfQ1JZUFRPX0dIQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPXkKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTFpPPXkKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPXkKK0NPTkZJR19DUkMxNj15CitDT05GSUdfQ1JDX1QxMERJRj1tCitDT05GSUdfQ1JDX0lUVV9UPW0KK0NPTkZJR19DUkMzMj15CitDT05GSUdfQ1JDNz1tCitDT05GSUdfTElCQ1JDMzJDPXkKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfTFpPX0NPTVBSRVNTPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKK0NPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKK0NPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvZzNldm1fZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9nM2V2bV9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MxOTAzMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZzNldm1fZGVmY29uZmlnCkBAIC0wLDAgKzEsNzc0IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmM3CisjIE1vbiBGZWIgIDggMTI6MjA6MDEgMjAxMAorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUENfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CitDT05GSUdfUkRfQlpJUDI9eQorQ09ORklHX1JEX0xaTUE9eQorQ09ORklHX1JEX0xaTz15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIworQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX01PRFVMRVMgaXMgbm90IHNldAorQ09ORklHX0JMT0NLPXkKK0NPTkZJR19MQkRBRj15CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTk9PUD15CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJub29wIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSBUeXBlCisjCitDT05GSUdfTU1VPXkKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU0hNT0JJTEU9eQorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTg1MDAgaXMgbm90IHNldAorCisjCisjIFNILU1vYmlsZSBTeXN0ZW0gVHlwZQorIworQ09ORklHX0FSQ0hfU0g3MzY3PXkKKyMgQ09ORklHX0FSQ0hfU0g3Mzc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0g3MzcyIGlzIG5vdCBzZXQKKworIworIyBTSC1Nb2JpbGUgQm9hcmQgVHlwZQorIworQ09ORklHX01BQ0hfRzNFVk09eQorCisjCisjIFNILU1vYmlsZSBTeXN0ZW0gQ29uZmlndXJhdGlvbgorIworCisjCisjIE1lbW9yeSBjb25maWd1cmF0aW9uCisjCitDT05GSUdfTUVNT1JZX1NUQVJUPTB4NTAwMDAwMDAKK0NPTkZJR19NRU1PUllfU0laRT0weDA4MDAwMDAwCisKKyMKKyMgVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19TSF9USU1FUl9DTVQ9eQorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVX1Y2PXkKKyMgQ09ORklHX0NQVV8zMnY2SyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVXzMydjY9eQorQ09ORklHX0NQVV9BQlJUX0VWNj15CitDT05GSUdfQ1BVX1BBQlJUX1Y2PXkKK0NPTkZJR19DUFVfQ0FDSEVfVjY9eQorQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKK0NPTkZJR19DUFVfQ09QWV9WNj15CitDT05GSUdfQ1BVX1RMQl9WNj15CitDT05GSUdfQ1BVX0hBU19BU0lEPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKKworIworIyBQcm9jZXNzb3IgRmVhdHVyZXMKKyMKK0NPTkZJR19BUk1fVEhVTUI9eQorIyBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKKyMgQ09ORklHX0FSTV9FUlJBVEFfNDExOTIwIGlzIG5vdCBzZXQKK0NPTkZJR19DT01NT05fQ0xLREVWPXkKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCitDT05GSUdfQUVBQkk9eQorIyBDT05GSUdfT0FCSV9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKyMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMTE1MjAwIGVhcmx5cHJpbnRrPXNoLXNjaS4xLDExNTIwMCIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0tFWEVDPXkKK0NPTkZJR19BVEFHU19QUk9DPXkKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworIyBDT05GSUdfQ1BVX0lETEUgaXMgbm90IHNldAorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworIyBDT05GSUdfVkZQIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX1BNPXkKKyMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVU1BFTkQgaXMgbm90IHNldAorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CisjIENPTkZJR19NVERfQ0ZJX0FNRFNURCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQPXkKKyMgQ09ORklHX01URF9QSFlTTUFQX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVJNX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1NIX1NDST15CitDT05GSUdfU0VSSUFMX1NIX1NDSV9OUl9VQVJUUz04CitDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkMgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCisjIENPTkZJR19FWFQyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKKyMgQ09ORklHX0ZTTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSU5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfRklMRVNZU1RFTVMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19TVFJJUF9BU01fU1lNUyBpcyBub3Qgc2V0CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKKyMgQ09ORklHX0ZUUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVU5XSU5EPXkKKyMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CitDT05GSUdfREVDT01QUkVTU19MWk89eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2c0ZXZtX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvZzRldm1fZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlZTc5YTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2c0ZXZtX2RlZmNvbmZpZwpAQCAtMCwwICsxLDc3OSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjNworIyBNb24gRmViICA4IDEyOjIxOjM1IDIwMTAKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk89eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CitDT05GSUdfR1JPVVBfU0NIRUQ9eQorQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQorIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1VTRVJfU0NIRUQ9eQorIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorQ09ORklHX1JEX0JaSVAyPXkKK0NPTkZJR19SRF9MWk1BPXkKK0NPTkZJR19SRF9MWk89eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9DTEs9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCisjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEQUY9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19CSCBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CitDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUT15CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTVVURVhfU1BJTl9PTl9PV05FUiBpcyBub3Qgc2V0CisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBTeXN0ZW0gVHlwZQorIworQ09ORklHX01NVT15CisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RPVkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NITU9CSUxFPXkKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKKworIworIyBTSC1Nb2JpbGUgU3lzdGVtIFR5cGUKKyMKKyMgQ09ORklHX0FSQ0hfU0g3MzY3IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NINzM3Nz15CisjIENPTkZJR19BUkNIX1NINzM3MiBpcyBub3Qgc2V0CisKKyMKKyMgU0gtTW9iaWxlIEJvYXJkIFR5cGUKKyMKK0NPTkZJR19NQUNIX0c0RVZNPXkKKworIworIyBTSC1Nb2JpbGUgU3lzdGVtIENvbmZpZ3VyYXRpb24KKyMKKworIworIyBNZW1vcnkgY29uZmlndXJhdGlvbgorIworQ09ORklHX01FTU9SWV9TVEFSVD0weDQwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgwODAwMDAwMAorCisjCisjIFRpbWVyIGFuZCBjbG9jayBjb25maWd1cmF0aW9uCisjCitDT05GSUdfU0hfVElNRVJfQ01UPXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMnY2Sz15CitDT05GSUdfQ1BVX1Y3PXkKK0NPTkZJR19DUFVfMzJ2Nz15CitDT05GSUdfQ1BVX0FCUlRfRVY3PXkKK0NPTkZJR19DUFVfUEFCUlRfVjc9eQorQ09ORklHX0NQVV9DQUNIRV9WNz15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQorQ09ORklHX0NQVV9DT1BZX1Y2PXkKK0NPTkZJR19DUFVfVExCX1Y3PXkKK0NPTkZJR19DUFVfSEFTX0FTSUQ9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19BUk1fVEhVTUJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVNfVExTX1JFRz15CitDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKKyMgQ09ORklHX0FSTV9FUlJBVEFfNDMwOTczIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9FUlJBVEFfNDU4NjkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9FUlJBVEFfNDYwMDc1IGlzIG5vdCBzZXQKK0NPTkZJR19DT01NT05fQ0xLREVWPXkKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX05PX0haIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hfUkVTX1RJTUVSUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCisjIENPTkZJR19USFVNQjJfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19BRUFCST15CisjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CitDT05GSUdfQUxJR05NRU5UX1RSQVA9eQorIyBDT05GSUdfVUFDQ0VTU19XSVRIX01FTUNQWSBpcyBub3Qgc2V0CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkJPT1RfUk9NX1RFWFQ9MHgwCitDT05GSUdfWkJPT1RfUk9NX0JTUz0weDAKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVNDNCwxMTUyMDAgZWFybHlwcmludGs9c2gtc2NpLjQsMTE1MjAwIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfS0VYRUM9eQorQ09ORklHX0FUQUdTX1BST0M9eQorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCisjIENPTkZJR19WRlAgaXMgbm90IHNldAorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU1VTUEVORCBpcyBub3Qgc2V0CisjIENPTkZJR19BUE1fRU1VTEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1JVTlRJTUUgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CisjIENPTkZJR19ORVQgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorIyBDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorIyBDT05GSUdfTVREX1BIWVNNQVBfQ09NUEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EPXkKKyMgQ09ORklHX01URF9OQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0hfU0NJPXkKK0NPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTPTgKK0NPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfRlNOT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfRE5PVElGWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOT1RJRllfVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVRFQ1RfSFVOR19UQVNLIGlzIG5vdCBzZXQKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorQ09ORklHX0FSTV9VTldJTkQ9eQorIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAorIyBDT05GSUdfT0NfRVRNIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMzIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfTFpPX0RFQ09NUFJFU1M9eQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CitDT05GSUdfREVDT01QUkVTU19CWklQMj15CitDT05GSUdfREVDT01QUkVTU19MWk1BPXkKK0NPTkZJR19ERUNPTVBSRVNTX0xaTz15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaWdlcDAwMjBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pZ2VwMDAyMF9kZWZjb25maWcKaW5kZXggYTE5MjI0OC4uZTc5NDBhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pZ2VwMDAyMF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pZ2VwMDAyMF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM2Ci0jIEZyaSBOb3YgMTMgMTI6MDE6MTcgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMworIyBUaHUgSmFuICA3IDE2OjE0OjU1IDIwMTAKICMKIENPTkZJR19BUk09eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKQEAgLTQ2LDYgKzQ2LDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC0xMjYsMTQgKzEyNyw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15CiAjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CiAjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAotQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iYW50aWNpcGF0b3J5IgorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCkBAIC0xNjIsNiArMTkwLDcgQEAKICMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldApAQCAtMTg0LDYgKzIxMyw3IEBACiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfT01BUD15CiAjIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VODUwMCBpcyBub3Qgc2V0CiAKICMKICMgVEkgT01BUCBJbXBsZW1lbnRhdGlvbnMKQEAgLTE5NywxMiArMjI3LDggQEAKICMKICMgT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMKICMKLSMgQ09ORklHX09NQVBfREVCVUdfUE9XRVJET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9ERUJVR19DTE9DS0RPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUyBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9NVVg9eQotQ09ORklHX09NQVBfTVVYX0RFQlVHPXkKLUNPTkZJR19PTUFQX01VWF9XQVJOSU5HUz15CitDT05GSUdfT01BUF9SRVNFVF9DTE9DS1M9eQorIyBDT05GSUdfT01BUF9NVVggaXMgbm90IHNldAogQ09ORklHX09NQVBfTUNCU1A9eQogIyBDT05GSUdfT01BUF9NQk9YX0ZXSyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUFQX01QVV9USU1FUiBpcyBub3Qgc2V0CkBAIC0yMTcsNiArMjQzLDcgQEAKIENPTkZJR19PTUFQX1BNX05PT1A9eQogQ09ORklHX0FSQ0hfT01BUDM0WFg9eQogQ09ORklHX0FSQ0hfT01BUDM0MzA9eQorQ09ORklHX09NQVBfUEFDS0FHRV9DQkI9eQogCiAjCiAjIE9NQVAgQm9hcmQgVHlwZQpAQCAtMjI3LDEzICsyNTQsMTYgQEAKICMgQ09ORklHX01BQ0hfT01BUDNFVk0gaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9PTUFQMzUxN0VWTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX09NQVAzX1BBTkRPUkEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PTUFQM19UT1VDSEJPT0sgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9PTUFQXzM0MzBTRFAgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9OT0tJQV9SWDUxIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfT01BUF9aT09NMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX0NNX1QzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX09NQVBfWk9PTTMgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9PTUFQXzM2MzBTRFAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DTV9UMzUgaXMgbm90IHNldAogQ09ORklHX01BQ0hfSUdFUDAwMjA9eQorIyBDT05GSUdfTUFDSF9PTUFQXzM2MzBTRFAgaXMgbm90IHNldAorIyBDT05GSUdfT01BUDNfRU1VIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVAzX1NEUkNfQUNfVElNSU5HIGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3IgVHlwZQpAQCAtMzA1LDggKzMzNSw2IEBACiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX0hBVkVfTUxPQ0s9eQotQ09ORklHX0hBVkVfTUxPQ0tFRF9QQUdFX0JJVD15CiAjIENPTkZJR19LU00gaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKQEAgLTQ0MCwzNSArNDY4LDM1IEBACiAjCiAjIEJsdWV0b290aCBkZXZpY2UgZHJpdmVycwogIwotQ09ORklHX0JUX0hDSUJUVVNCPW0KKyMgQ09ORklHX0JUX0hDSUJUVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUX0hDSUJUU0RJTyBpcyBub3Qgc2V0CiBDT05GSUdfQlRfSENJVUFSVD1tCiBDT05GSUdfQlRfSENJVUFSVF9IND15CiBDT05GSUdfQlRfSENJVUFSVF9CQ1NQPXkKIENPTkZJR19CVF9IQ0lVQVJUX0xMPXkKLUNPTkZJR19CVF9IQ0lCQ00yMDNYPW0KLUNPTkZJR19CVF9IQ0lCUEExMFg9bQotQ09ORklHX0JUX0hDSUJGVVNCPW0KKyMgQ09ORklHX0JUX0hDSUJDTTIwM1ggaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJQlBBMTBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUX0hDSUJGVVNCIGlzIG5vdCBzZXQKIENPTkZJR19CVF9IQ0lWSENJPW0KIENPTkZJR19CVF9NUlZMPW0KIENPTkZJR19CVF9NUlZMX1NESU89bQogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKLUNPTkZJR19DRkc4MDIxMT1tCitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XRVhUX0NPUkU9eQorQ09ORklHX1dFWFRfUFJPQz15CitDT05GSUdfV0VYVF9TUFk9eQorQ09ORklHX0NGRzgwMjExPXkKICMgQ09ORklHX05MODAyMTFfVEVTVE1PREUgaXMgbm90IHNldAogIyBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QUz15Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0xCiAjIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19DRkc4MDIxMV9XRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQotQ09ORklHX0xJQjgwMjExPW0KLUNPTkZJR19MSUI4MDIxMV9DUllQVF9XRVA9bQotQ09ORklHX0xJQjgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0xJQjgwMjExX0NSWVBUX1RLSVA9bQorQ09ORklHX0xJQjgwMjExPXkKICMgQ09ORklHX0xJQjgwMjExX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19NQUM4MDIxMT1tCitDT05GSUdfTUFDODAyMTE9eQogIyBDT05GSUdfTUFDODAyMTFfUkNfUElEIGlzIG5vdCBzZXQKIENPTkZJR19NQUM4MDIxMV9SQ19NSU5TVFJFTD15CiAjIENPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX1BJRCBpcyBub3Qgc2V0CkBAIC01MDAsMTIgKzUyOCw5NSBAQAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogQ09ORklHX0NPTk5FQ1RPUj15CiBDT05GSUdfUFJPQ19FVkVOVFM9eQotIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCisjIENPTkZJR19NVERfQ0ZJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorQ09ORklHX01URF9PTkVOQU5EPXkKKyMgQ09ORklHX01URF9PTkVOQU5EX1ZFUklGWV9XUklURSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORF9HRU5FUklDIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfT05FTkFORF9PTUFQMj15CisjIENPTkZJR19NVERfT05FTkFORF9PVFAgaXMgbm90IHNldAorQ09ORklHX01URF9PTkVOQU5EXzJYX1BST0dSQU09eQorIyBDT05GSUdfTVREX09ORU5BTkRfU0lNIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVj15CiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTUxNiw3ICs2MjcsNiBAQAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAogIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKLUNPTkZJR19FRVBST01fOTNDWDY9bQogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTYxMyw1NiArNzIzLDI2IEBACiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTl84MDIxMT15Ci1DT05GSUdfTElCRVJUQVM9bQotQ09ORklHX0xJQkVSVEFTX1VTQj1tCi1DT05GSUdfTElCRVJUQVNfU0RJTz1tCisjIENPTkZJR19MSUJFUlRBU19USElORklSTSBpcyBub3Qgc2V0CisjIENPTkZJR19BVDc2QzUwWF9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAorIyBDT05GSUdfUlRMODE4NyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEhfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0MyBpcyBub3Qgc2V0CisjIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTSBpcyBub3Qgc2V0CitDT05GSUdfTElCRVJUQVM9eQorIyBDT05GSUdfTElCRVJUQVNfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19MSUJFUlRBU19TRElPPXkKICMgQ09ORklHX0xJQkVSVEFTX1NQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJFUlRBU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJFUlRBU19USElORklSTSBpcyBub3Qgc2V0Ci1DT05GSUdfQVQ3NkM1MFhfVVNCPW0KLUNPTkZJR19VU0JfWkQxMjAxPW0KLUNPTkZJR19VU0JfTkVUX1JORElTX1dMQU49bQotQ09ORklHX1JUTDgxODc9bQotIyBDT05GSUdfTUFDODAyMTFfSFdTSU0gaXMgbm90IHNldAotQ09ORklHX1A1NF9DT01NT049bQotQ09ORklHX1A1NF9VU0I9bQotQ09ORklHX1A1NF9TUEk9bQotQ09ORklHX0FUSF9DT01NT049bQotQ09ORklHX0FSOTE3MF9VU0I9bQotQ09ORklHX0hPU1RBUD1tCi1DT05GSUdfSE9TVEFQX0ZJUk1XQVJFPXkKLUNPTkZJR19IT1NUQVBfRklSTVdBUkVfTlZSQU09eQotQ09ORklHX0I0Mz1tCi0jIENPTkZJR19CNDNfU0RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDNfUEhZX0xQIGlzIG5vdCBzZXQKLUNPTkZJR19CNDNfSFdSTkc9eQotIyBDT05GSUdfQjQzX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19CNDNMRUdBQ1k9bQotQ09ORklHX0I0M0xFR0FDWV9IV1JORz15Ci0jIENPTkZJR19CNDNMRUdBQ1lfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0I0M0xFR0FDWV9ETUE9eQotQ09ORklHX0I0M0xFR0FDWV9QSU89eQotQ09ORklHX0I0M0xFR0FDWV9ETUFfQU5EX1BJT19NT0RFPXkKLSMgQ09ORklHX0I0M0xFR0FDWV9ETUFfTU9ERSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDNMRUdBQ1lfUElPX01PREUgaXMgbm90IHNldAotQ09ORklHX1pEMTIxMVJXPW0KLSMgQ09ORklHX1pEMTIxMVJXX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19SVDJYMDA9bQotQ09ORklHX1JUMjUwMFVTQj1tCi1DT05GSUdfUlQ3M1VTQj1tCi1DT05GSUdfUlQyODAwVVNCPW0KLUNPTkZJR19SVDJYMDBfTElCX1VTQj1tCi1DT05GSUdfUlQyWDAwX0xJQj1tCi1DT05GSUdfUlQyWDAwX0xJQl9IVD15Ci1DT05GSUdfUlQyWDAwX0xJQl9GSVJNV0FSRT15Ci1DT05GSUdfUlQyWDAwX0xJQl9DUllQVE89eQotIyBDT05GSUdfUlQyWDAwX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19XTDEyWFg9bQotIyBDT05GSUdfV0wxMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMMTI3MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV00gaXMgbm90IHNldAorIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAorIyBDT05GSUdfV0wxMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pEMTIxMVJXIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC02NzIsMjkgKzc1MiwxMCBAQAogIyBVU0IgTmV0d29yayBBZGFwdGVycwogIwogIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAotQ09ORklHX1VTQl9LQVdFVEg9bQotQ09ORklHX1VTQl9QRUdBU1VTPW0KKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAotQ09ORklHX1VTQl9VU0JORVQ9bQotQ09ORklHX1VTQl9ORVRfQVg4ODE3WD1tCi1DT05GSUdfVVNCX05FVF9DRENFVEhFUj1tCi1DT05GSUdfVVNCX05FVF9DRENfRUVNPW0KLUNPTkZJR19VU0JfTkVUX0RNOTYwMT1tCi1DT05GSUdfVVNCX05FVF9TTVNDOTVYWD1tCi1DT05GSUdfVVNCX05FVF9HTDYyMEE9bQotQ09ORklHX1VTQl9ORVRfTkVUMTA4MD1tCi1DT05GSUdfVVNCX05FVF9QTFVTQj1tCi1DT05GSUdfVVNCX05FVF9NQ1M3ODMwPW0KLUNPTkZJR19VU0JfTkVUX1JORElTX0hPU1Q9bQotQ09ORklHX1VTQl9ORVRfQ0RDX1NVQlNFVD1tCi0jIENPTkZJR19VU0JfQUxJX001NjMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9BTjI3MjAgaXMgbm90IHNldAotQ09ORklHX1VTQl9CRUxLSU49eQotQ09ORklHX1VTQl9BUk1MSU5VWD15Ci0jIENPTkZJR19VU0JfRVBTT04yODg4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9LQzIxOTAgaXMgbm90IHNldAotQ09ORklHX1VTQl9ORVRfWkFVUlVTPW0KLSMgQ09ORklHX1VTQl9ORVRfSU5UNTFYMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUFAgaXMgbm90IHNldAogIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CkBAIC03MTAsNiArNzcxLDcgQEAKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtODA5LDcgKzg3MSw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC04MjUsNiArODg2LDggQEAKICMgQ09ORklHX1NQSV9CSVRCQU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSV9HUElPIGlzIG5vdCBzZXQKIENPTkZJR19TUElfT01BUDI0WFg9eQorIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFByb3RvY29sIE1hc3RlcnMKQEAgLTg5Miw3ICs5NTUsNyBAQAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfTUZEX0NPUkU9eQogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldApAQCAtOTAwLDExICs5NjMsMTMgQEAKICMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKIENPTkZJR19UV0w0MDMwX0NPUkU9eQogIyBDT05GSUdfVFdMNDAzMF9QT1dFUiBpcyBub3Qgc2V0CitDT05GSUdfVFdMNDAzMF9DT0RFQz15CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldApAQCAtOTEyLDYgKzk3Nyw4IEBACiAjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAorIyBDT05GSUdfQUI0NTAwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUj15CiAjIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldApAQCAtOTE5LDYgKzk4Niw3IEBACiAjIENPTkZJR19SRUdVTEFUT1JfVVNFUlNQQUNFX0NPTlNVTUVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9NQVg4NjYwIGlzIG5vdCBzZXQKIENPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15CiAjIENPTkZJR19SRUdVTEFUT1JfTFAzOTcxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTAyMyBpcyBub3Qgc2V0CkBAIC05MzAsNjUgKzk5OCwxMjkgQEAKICMKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CisjIENPTkZJR19GQl9USUxFQkxJVFRJTkcgaXMgbm90IHNldAorCisjCisjIEZyYW1lIGJ1ZmZlciBoYXJkd2FyZSBkcml2ZXJzCisjCisjIENPTkZJR19GQl9VVkVTQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQlJPQURTSEVFVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9PTUFQX0JPT1RMT0FERVJfSU5JVCBpcyBub3Qgc2V0CitDT05GSUdfT01BUDJfVlJBTT15CitDT05GSUdfT01BUDJfVlJGQj15CitDT05GSUdfT01BUDJfRFNTPXkKK0NPTkZJR19PTUFQMl9WUkFNX1NJWkU9MTQKKyMgQ09ORklHX09NQVAyX0RTU19ERUJVR19TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVAyX0RTU19SRkJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVAyX0RTU19WRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVAyX0RTU19TREkgaXMgbm90IHNldAorQ09ORklHX09NQVAyX0RTU19EU0k9eQorQ09ORklHX09NQVAyX0RTU19VU0VfRFNJX1BMTD15CisjIENPTkZJR19PTUFQMl9EU1NfRkFLRV9WU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfT01BUDJfRFNTX01JTl9GQ0tfUEVSX1BDSz0wCitDT05GSUdfRkJfT01BUDI9eQorIyBDT05GSUdfRkJfT01BUDJfREVCVUdfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9PTUFQMl9GT1JDRV9BVVRPX1VQREFURSBpcyBub3Qgc2V0CitDT05GSUdfRkJfT01BUDJfTlVNX0ZCUz0zCisKKyMKKyMgT01BUDIvMyBEaXNwbGF5IERldmljZSBEcml2ZXJzCisjCitDT05GSUdfUEFORUxfR0VORVJJQz15CisjIENPTkZJR19QQU5FTF9TSEFSUF9MUzAzN1Y3RFcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19QQU5FTF9UQUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAogIwotIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19ESVNQTEFZX1NVUFBPUlQ9eQorCisjCisjIERpc3BsYXkgaGFyZHdhcmUgZHJpdmVycworIwogCiAjCiAjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAogIwogIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAogQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotQ09ORklHX0hJRF9TVVBQT1JUPXkKLUNPTkZJR19ISUQ9eQotIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgSW5wdXQgRGV2aWNlcwotIwotQ09ORklHX1VTQl9ISUQ9eQotIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKLQotIwotIyBTcGVjaWFsIEhJRCBkcml2ZXJzCi0jCi0jIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9DSEVSUlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NISUNPTlkgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0NZUFJFU1MgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0RSQUdPTlJJU0UgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0VaS0VZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9LWUUgaXMgbm90IHNldAotIyBDT05GSUdfSElEX0dZUkFUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9UV0lOSEFOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9LRU5TSU5HVE9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9MT0dJVEVDSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTUlDUk9TT0ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9NT05URVJFWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU0FNU1VORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU09OWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfU1VOUExVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAotIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfV0FDT00gaXMgbm90IHNldAotIyBDT05GSUdfSElEX1pFUk9QTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CisjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CitDT05GSUdfTE9HT19MSU5VWF9DTFVUMjI0PXkKK0NPTkZJR19TT1VORD15CisjIENPTkZJR19TT1VORF9PU1NfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfU05EPXkKK0NPTkZJR19TTkRfVElNRVI9eQorQ09ORklHX1NORF9QQ009eQorQ09ORklHX1NORF9KQUNLPXkKKyMgQ09ORklHX1NORF9TRVFVRU5DRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01JWEVSX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUENNX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfSFJUSU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NVUFBPUlRfT0xEX0FQSSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlMgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfRFJJVkVSUz15CisjIENPTkZJR19TTkRfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01UUEFWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TRVJJQUxfVTE2NTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NUFU0MDEgaXMgbm90IHNldAorQ09ORklHX1NORF9BUk09eQorQ09ORklHX1NORF9TUEk9eQorQ09ORklHX1NORF9VU0I9eQorIyBDT05GSUdfU05EX1VTQl9BVURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DPXkKK0NPTkZJR19TTkRfT01BUF9TT0M9eQorQ09ORklHX1NORF9PTUFQX1NPQ19NQ0JTUD15CitDT05GSUdfU05EX09NQVBfU09DX0lHRVAwMDIwPXkKK0NPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPXkKKyMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQ19UV0w0MDMwPXkKKyMgQ09ORklHX1NPVU5EX1BSSU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19ISUQ9bQogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15CiAjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CkBAIC05OTcsMTIgKzExMjksMTIgQEAKICMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucwogIwogIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQogIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPW0KKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CiAKQEAgLTEwMTAsMjkgKzExNDIsMjEgQEAKICMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiAjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKK0NPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVD15CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQogIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTVVTQl9IRFJDPXkKLUNPTkZJR19VU0JfTVVTQl9TT0M9eQotCi0jCi0jIE9NQVAgMzQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX01VU0JfSE9TVD15Ci0jIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NVVNCX09URyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX01VU0JfSERSQ19IQ0Q9eQotIyBDT05GSUdfTVVTQl9QSU9fT05MWSBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0lOVkVOVFJBX0RNQT15Ci0jIENPTkZJR19VU0JfVElfQ1BQSV9ETUEgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX01VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01VU0JfSERSQyBpcyBub3Qgc2V0CiAKICMKICMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCkBAIC0xMDQ5LDE5ICsxMTczLDcgQEAKICMKICMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKLUNPTkZJR19VU0JfU1RPUkFHRT1tCi0jIENPTkZJR19VU0JfU1RPUkFHRV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9EQVRBRkFCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT00gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSVNEMjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKIAogIwpAQCAtMTA5OSw0MSArMTIxMSw3IEBACiAjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVD15Ci1DT05GSUdfVVNCX0dBREdFVF9ERUJVRz15Ci1DT05GSUdfVVNCX0dBREdFVF9ERUJVR19GSUxFUz15Ci1DT05GSUdfVVNCX0dBREdFVF9WQlVTX0RSQVc9MgotQ09ORklHX1VTQl9HQURHRVRfU0VMRUNURUQ9eQotIyBDT05GSUdfVVNCX0dBREdFVF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9PTUFQPXkKLUNPTkZJR19VU0JfT01BUD15Ci0jIENPTkZJR19VU0JfR0FER0VUX1BYQTI1WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1I4QTY2NTk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX1pFUk89bQotIyBDT05GSUdfVVNCX0FVRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9FVEggaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAogCiAjCiAjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQpAQCAtMTE0MSwxMCArMTIxOSwxMSBAQAogQ09ORklHX1VTQl9PVEdfVVRJTFM9eQogIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU1AxMzAxX09NQVAgaXMgbm90IHNldAotQ09ORklHX1RXTDQwMzBfVVNCPXkKKyMgQ09ORklHX1VTQl9VTFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfVVNCIGlzIG5vdCBzZXQKICMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogQ09ORklHX01NQz15Ci0jIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01NQ19ERUJVRz15CiAjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CiAKICMKQEAgLTExNTgsNyArMTIzNyw4IEBACiAjCiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCi0jIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19TREhDST15CisjIENPTkZJR19NTUNfU0RIQ0lfUExURk0gaXMgbm90IHNldAogIyBDT05GSUdfTU1DX09NQVAgaXMgbm90IHNldAogQ09ORklHX01NQ19PTUFQX0hTPXkKICMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKQEAgLTExNzksNiArMTI1OSwxMSBAQAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKKyMgQ0JVUyBzdXBwb3J0CisjCisjIENPTkZJR19DQlVTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKQEAgLTEyNTMsNiArMTMzOCw3IEBACiAjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NRVUFTSEZTIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldApAQCAtMTQwMSw2ICsxNDg3LDcgQEAKICMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQogQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CkBAIC0xNDI1LDcgKzE1MTIsOSBAQAogIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTQzMyw3ICsxNTIyLDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pbW90ZTJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pbW90ZTJfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZDJiZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9jb25maWdzL2ltb3RlMl9kZWZjb25maWcKQEAgLTAsMCArMSwyMDc3IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmM4CisjIFNhdCBGZWIgMTMgMjE6NDg6NTMgMjAxMAorIworQ09ORklHX0FSTT15CitDT05GSUdfU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT049eQorQ09ORklHX0dFTkVSSUNfR1BJTz15CitDT05GSUdfR0VORVJJQ19USU1FPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQorQ09ORklHX0hBVkVfTEFURU5DWVRPUF9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQorQ09ORklHX0hBUkRJUlFTX1NXX1JFU0VORD15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0FSQ0hfSEFTX0NQVUZSRVE9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0FSQ0hfTVREX1hJUD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk89eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19TWVNWSVBDX1NZU0NUTD15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorQ09ORklHX0dST1VQX1NDSEVEPXkKK0NPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKKyMgQ09ORklHX1JUX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0VSX1NDSEVEPXkKKyMgQ09ORklHX0NHUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CitDT05GSUdfUkRfQlpJUDI9eQorQ09ORklHX1JEX0xaTUE9eQorIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CisjIENPTkZJR19DT01QQVRfQlJLIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCPXkKKyMgQ09ORklHX1NMVUIgaXMgbm90IHNldAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQ0xLPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKKyMgQ09ORklHX0dDT1ZfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19TTE9XX1dPUks9eQorIyBDT05GSUdfU0xPV19XT1JLX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CitDT05GSUdfTU9EVkVSU0lPTlM9eQorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CisjIENPTkZJR19MQkRBRiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CisjIENPTkZJR19JT1NDSEVEX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9ERUFETElORT15CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iZGVhZGxpbmUiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorQ09ORklHX0ZSRUVaRVI9eQorCisjCisjIFN5c3RlbSBUeXBlCisjCitDT05GSUdfTU1VPXkKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUFhBPXkKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKKworIworIyBJbnRlbCBQWEEyeHgvUFhBM3h4IEltcGxlbWVudGF0aW9ucworIworCisjCisjIEludGVsL01hcnZlbGwgRGV2IFBsYXRmb3JtcyAoc29ydGVkIGJ5IGhhcmR3YXJlIHJlbGVhc2UgdGltZSkKKyMKKyMgQ09ORklHX0FSQ0hfTFVCQk9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BSU5TVE9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1pZTE9OSVRFMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfWllMT05JVEUzMjAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UQVZPUkVWQiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1NBQVIgaXMgbm90IHNldAorCisjCisjIFRoaXJkIFBhcnR5IERldiBQbGF0Zm9ybXMgKHNvcnRlZCBieSB2ZW5kb3IgbmFtZSkKKyMKKyMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQVJDT01fWkVVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0JBTExPT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ1NCNzI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQVJNQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VNX1gyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9FWEVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NNX1gzMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HVU1TVElYIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX0lOVEVMTU9URTI9eQorIyBDT05GSUdfTUFDSF9TVEFSR0FURTIgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9YQ0VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSSVpFUFNfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTE9HSUNQRF9QWEEyNzAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9QQ00wMjcgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DT0xJQlJJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ09MSUJSSTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NPTElCUkkzMjAgaXMgbm90IHNldAorCisjCisjIEVuZC11c2VyIFByb2R1Y3RzIChzb3J0ZWQgYnkgdmVuZG9yIG5hbWUpCisjCisjIENPTkZJR19NQUNIX0g0NzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSDUwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9ISU1BTEFZQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01BR0lDSUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUlPQTcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19QWEFfRVpYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTVA5MDBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX1BBTE0gaXMgbm90IHNldAorIyBDT05GSUdfUFhBX1NIQVJQU0wgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEFfRVNFUklFUyBpcyBub3Qgc2V0CitDT05GSUdfUFhBMjd4PXkKK0NPTkZJR19QWEFfU1NQPXkKK0NPTkZJR19QWEFfSEFWRV9CT0FSRF9JUlFTPXkKK0NPTkZJR19QTEFUX1BYQT15CisKKyMKKyMgUHJvY2Vzc29yIFR5cGUKKyMKK0NPTkZJR19DUFVfWFNDQUxFPXkKK0NPTkZJR19DUFVfMzJ2NT15CitDT05GSUdfQ1BVX0FCUlRfRVY1VD15CitDT05GSUdfQ1BVX1BBQlJUX0xFR0FDWT15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQorQ09ORklHX0NQVV9UTEJfVjRXQkk9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01CitDT05GSUdfSVdNTVhUPXkKK0NPTkZJR19YU0NBTEVfUE1VPXkKK0NPTkZJR19DT01NT05fQ0xLREVWPXkKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFQ9eQorQ09ORklHX0haPTEwMAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTk5OTk5OQorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTB4MAorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5MSByb290PS9kZXYvbW1jYmxrMHAyIHJvb3Rmc3R5cGU9ZXh0MiByb290ZGVsYXk9MyBpcD0xOTIuMTY4LjAuMjAyOjE5Mi4xNjguMC4yMDA6MTkyLjE2OC4wLjIwMDoyNTUuMjU1LjI1NS4wIGRlYnVnIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfS0VYRUM9eQorQ09ORklHX0FUQUdTX1BST0M9eQorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCitDT05GSUdfQ1BVX0ZSRVE9eQorQ09ORklHX0NQVV9GUkVRX1RBQkxFPXkKK0NPTkZJR19DUFVfRlJFUV9ERUJVRz15CitDT05GSUdfQ1BVX0ZSRVFfU1RBVD15CisjIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorQ09ORklHX0NQVV9GUkVRX0dPVl9QT1dFUlNBVkU9bQorQ09ORklHX0NQVV9GUkVRX0dPVl9VU0VSU1BBQ0U9bQorQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORD1tCitDT05GSUdfQ1BVX0ZSRVFfR09WX0NPTlNFUlZBVElWRT1tCitDT05GSUdfQ1BVX0lETEU9eQorQ09ORklHX0NQVV9JRExFX0dPVl9MQURERVI9eQorQ09ORklHX0NQVV9JRExFX0dPVl9NRU5VPXkKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorQ09ORklHX0JJTkZNVF9BT1VUPW0KK0NPTkZJR19CSU5GTVRfTUlTQz1tCisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorQ09ORklHX0FQTV9FTVVMQVRJT049eQorQ09ORklHX1BNX1JVTlRJTUU9eQorQ09ORklHX0FSQ0hfU1VTUEVORF9QT1NTSUJMRT15CitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CitDT05GSUdfWEZSTV9JUENPTVA9bQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKK0NPTkZJR19JUF9QTlBfREhDUD15CitDT05GSUdfSVBfUE5QX0JPT1RQPXkKK0NPTkZJR19JUF9QTlBfUkFSUD15CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1RVTk5FTD1tCisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9ESUFHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19DVUJJQz15CitDT05GSUdfREVGQVVMVF9UQ1BfQ09ORz0iY3ViaWMiCisjIENPTkZJR19UQ1BfTUQ1U0lHIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PW0KKyMgQ09ORklHX0lQVjZfUFJJVkFDWSBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X1JPVVRFUl9QUkVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjZfT1BUSU1JU1RJQ19EQUQgaXMgbm90IHNldAorQ09ORklHX0lORVQ2X0FIPW0KK0NPTkZJR19JTkVUNl9FU1A9bQorQ09ORklHX0lORVQ2X0lQQ09NUD1tCitDT05GSUdfSVBWNl9NSVA2PW0KK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPW0KKyMgQ09ORklHX0lQVjZfU0lUXzZSRCBpcyBub3Qgc2V0CitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CitDT05GSUdfSVBWNl9UVU5ORUw9bQorQ09ORklHX0lQVjZfTVVMVElQTEVfVEFCTEVTPXkKK0NPTkZJR19JUFY2X1NVQlRSRUVTPXkKKyMgQ09ORklHX0lQVjZfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEPXkKK0NPTkZJR19CUklER0VfTkVURklMVEVSPXkKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfTkVURklMVEVSX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQorQ09ORklHX05GX0NPTk5UUkFDSz1tCitDT05GSUdfTkZfQ1RfQUNDVD15CitDT05GSUdfTkZfQ09OTlRSQUNLX01BUks9eQorQ09ORklHX05GX0NPTk5UUkFDS19FVkVOVFM9eQorIyBDT05GSUdfTkZfQ1RfUFJPVE9fRENDUCBpcyBub3Qgc2V0CitDT05GSUdfTkZfQ1RfUFJPVE9fR1JFPW0KK0NPTkZJR19ORl9DVF9QUk9UT19TQ1RQPW0KK0NPTkZJR19ORl9DVF9QUk9UT19VRFBMSVRFPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfQU1BTkRBPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSDMyMz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX0lSQz1tCitDT05GSUdfTkZfQ09OTlRSQUNLX05FVEJJT1NfTlM9bQorQ09ORklHX05GX0NPTk5UUkFDS19QUFRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0FORT1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1NJUD1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1RGVFA9bQorQ09ORklHX05GX0NUX05FVExJTks9bQorIyBDT05GSUdfTkVURklMVEVSX1RQUk9YWSBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ0xBU1NJRlk9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1AgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfSEw9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTEVEPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0c9bQorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZRVUVVRT1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX05PVFJBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9SQVRFRVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NMVVNURVIgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT01NRU5UPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkJZVEVTPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTkxJTUlUPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTk1BUks9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9DT05OVFJBQ0s9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9EQ0NQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfRFNDUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hBU0hMSU1JVD1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hFTFBFUj1tCitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0hMPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTElNSVQ9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfTVVMVElQT1JUPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PV05FUiBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWT1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFViBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BLVFRZUEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9RVU9UQT1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkFURUVTVCBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TQ1RQPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RBVEU9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFUSVNUSUM9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVFJJTkc9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1M9bQorQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9USU1FPW0KK0NPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfVTMyPW0KKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9PU0YgaXMgbm90IHNldAorIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05GX0RFRlJBR19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVBWND1tCitDT05GSUdfTkZfQ09OTlRSQUNLX1BST0NfQ09NUEFUPXkKK0NPTkZJR19JUF9ORl9RVUVVRT1tCitDT05GSUdfSVBfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQX05GX01BVENIX0FERFJUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BSD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQorQ09ORklHX05GX05BVD1tCitDT05GSUdfTkZfTkFUX05FRURFRD15CitDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9ORVRNQVA9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCitDT05GSUdfTkZfTkFUX1NOTVBfQkFTSUM9bQorQ09ORklHX05GX05BVF9QUk9UT19HUkU9bQorQ09ORklHX05GX05BVF9QUk9UT19VRFBMSVRFPW0KK0NPTkZJR19ORl9OQVRfUFJPVE9fU0NUUD1tCitDT05GSUdfTkZfTkFUX0ZUUD1tCitDT05GSUdfTkZfTkFUX0lSQz1tCitDT05GSUdfTkZfTkFUX1RGVFA9bQorQ09ORklHX05GX05BVF9BTUFOREE9bQorQ09ORklHX05GX05BVF9QUFRQPW0KK0NPTkZJR19ORl9OQVRfSDMyMz1tCitDT05GSUdfTkZfTkFUX1NJUD1tCitDT05GSUdfSVBfTkZfTUFOR0xFPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ0xVU1RFUklQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfRUNOPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVFRMPW0KK0NPTkZJR19JUF9ORl9SQVc9bQorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KKworIworIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX05GX0NPTk5UUkFDS19JUFY2PW0KK0NPTkZJR19JUDZfTkZfUVVFVUU9bQorQ09ORklHX0lQNl9ORl9JUFRBQkxFUz1tCitDT05GSUdfSVA2X05GX01BVENIX0FIPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRVVJNjQ9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9GUkFHPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCitDT05GSUdfSVA2X05GX01BVENIX0hMPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfSVBWNkhFQURFUj1tCitDT05GSUdfSVA2X05GX01BVENIX01IPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfSEw9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVA2X05GX01BTkdMRT1tCitDT05GSUdfSVA2X05GX1JBVz1tCisjIENPTkZJR19CUklER0VfTkZfRUJUQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CitDT05GSUdfU1RQPW0KK0NPTkZJR19CUklER0U9bQorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfTExDPW0KKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfSUVFRTgwMjE1ND15CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorQ09ORklHX0JUPXkKK0NPTkZJR19CVF9MMkNBUD15CitDT05GSUdfQlRfU0NPPXkKK0NPTkZJR19CVF9SRkNPTU09eQorQ09ORklHX0JUX1JGQ09NTV9UVFk9eQorQ09ORklHX0JUX0JORVA9eQorQ09ORklHX0JUX0JORVBfTUNfRklMVEVSPXkKK0NPTkZJR19CVF9CTkVQX1BST1RPX0ZJTFRFUj15CitDT05GSUdfQlRfSElEUD15CisKKyMKKyMgQmx1ZXRvb3RoIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfQlRfSENJQlRVU0I9bQorQ09ORklHX0JUX0hDSUJUU0RJTz1tCitDT05GSUdfQlRfSENJVUFSVD15CitDT05GSUdfQlRfSENJVUFSVF9IND15CisjIENPTkZJR19CVF9IQ0lVQVJUX0JDU1AgaXMgbm90IHNldAorIyBDT05GSUdfQlRfSENJVUFSVF9MTCBpcyBub3Qgc2V0CitDT05GSUdfQlRfSENJQkNNMjAzWD1tCitDT05GSUdfQlRfSENJQlBBMTBYPW0KK0NPTkZJR19CVF9IQ0lCRlVTQj1tCitDT05GSUdfQlRfSENJVkhDST1tCitDT05GSUdfQlRfTVJWTD1tCitDT05GSUdfQlRfTVJWTF9TRElPPW0KKyMgQ09ORklHX0JUX0FUSDNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19GSUJfUlVMRVM9eQorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj1tCitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CitDT05GSUdfQ09OTkVDVE9SPW0KK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX0hBVkVfTVREX09UUD15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorQ09ORklHX01URF9DRklfQURWX09QVElPTlM9eQorQ09ORklHX01URF9DRklfTk9TV0FQPXkKKyMgQ09ORklHX01URF9DRklfQkVfQllURV9TV0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfTEVfQllURV9TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0dFT01FVFJZPXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKKyMgQ09ORklHX01URF9DRklfSTIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfT1RQPXkKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKKyMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUFhBMlhYPXkKKyMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPW0KK0NPTkZJR19CTEtfREVWX0NSWVBUT0xPT1A9bQorIyBDT05GSUdfQkxLX0RFVl9EUkJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX05CRD1tCisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKK0NPTkZJR19EVU1NWT15CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTiBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19JRUVFODAyMTU0X0RSSVZFUlM9eQorIyBDT05GSUdfSUVFRTgwMjE1NF9GQUtFSEFSRCBpcyBub3Qgc2V0CitDT05GSUdfUFBQPW0KK0NPTkZJR19QUFBfTVVMVElMSU5LPXkKK0NPTkZJR19QUFBfRklMVEVSPXkKK0NPTkZJR19QUFBfQVNZTkM9bQorQ09ORklHX1BQUF9TWU5DX1RUWT1tCitDT05GSUdfUFBQX0RFRkxBVEU9bQorQ09ORklHX1BQUF9CU0RDT01QPW0KKyMgQ09ORklHX1BQUF9NUFBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUE9FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworIyBDT05GSUdfSU5QVVRfTU9VU0VERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9BUE1QT1dFUiBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0FUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfR1BJTz15CisjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfUFhBMjd4PXkKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAorQ09ORklHX1RPVUNIU0NSRUVOX0RBOTAzND15CisjIENPTkZJR19UT1VDSFNDUkVFTl9EWU5BUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VFVEkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUNTNTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVVNCX0NPTVBPU0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RTQzIwMDcgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTUlTQz15CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9VSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfR1BJT19ST1RBUllfRU5DT0RFUiBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX1BYQT15CitDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9OAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfUFhBPXkKKyMgQ09ORklHX0kyQ19QWEFfU0xBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAorQ09ORklHX1NQSV9QWEEyWFg9eQorIyBDT05GSUdfU1BJX1hJTElOWCBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfREVTSUdOV0FSRSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFByb3RvY29sIE1hc3RlcnMKKyMKKyMgQ09ORklHX1NQSV9TUElERVYgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1RMRTYyWDAgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUNQMjNTMDggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19NQzMzODgwIGlzIG5vdCBzZXQKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorQ09ORklHX1BPV0VSX1NVUFBMWT15CisjIENPTkZJR19QT1dFUl9TVVBQTFlfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUERBX1BPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQTV9QT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0RTMjc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0RTMjc4MiBpcyBub3Qgc2V0CisjIENPTkZJR19CQVRURVJZX0JRMjd4MDAgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9EQTkwMzAgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9NQVgxNzA0MCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKK0NPTkZJR19QTUlDX0RBOTAzWD15CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAorIyBDT05GSUdfQUI0NTAwX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1JFR1VMQVRPUj15CitDT05GSUdfUkVHVUxBVE9SX0RFQlVHPXkKKyMgQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUj15CitDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUj15CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTUFYODY2MCBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SX0RBOTAzWD15CisjIENPTkZJR19SRUdVTEFUT1JfTFAzOTcxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUl9UUFM2NTAyMyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwN1ggaXMgbm90IHNldAorQ09ORklHX01FRElBX1NVUFBPUlQ9eQorCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCitDT05GSUdfVklERU9fREVWPXkKK0NPTkZJR19WSURFT19WNEwyX0NPTU1PTj15CitDT05GSUdfVklERU9fQUxMT1dfVjRMMT15CitDT05GSUdfVklERU9fVjRMMV9DT01QQVQ9eQorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX01FRElBPXkKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKK0NPTkZJR19JUl9DT1JFPXkKK0NPTkZJR19WSURFT19JUj15CisjIENPTkZJR19NRURJQV9BVFRBQ0ggaXMgbm90IHNldAorQ09ORklHX01FRElBX1RVTkVSPXkKK0NPTkZJR19NRURJQV9UVU5FUl9DVVNUT01JU0U9eQorIyBDT05GSUdfTUVESUFfVFVORVJfU0lNUExFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1REQTgyOTAgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfVERBODI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9UREExODI3MSBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9UREE5ODg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjEgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfVEVBNTc2NyBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9NVDIwWFggaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfTVQyMDYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX01UMjI2NiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9NVDIxMzEgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfUVQxMDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1RVTkVSX1hDMjAyOCBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9UVU5FUl9YQzUwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfTVhMNTAwNVMgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfTVhMNTAwN1QgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfVFVORVJfTUM0NFM4MDMgaXMgbm90IHNldAorQ09ORklHX01FRElBX1RVTkVSX01BWDIxNjU9bQorQ09ORklHX1ZJREVPX1Y0TDI9eQorQ09ORklHX1ZJREVPX1Y0TDE9eQorQ09ORklHX1ZJREVPQlVGX0dFTj15CitDT05GSUdfVklERU9CVUZfRE1BX1NHPXkKK0NPTkZJR19WSURFT19DQVBUVVJFX0RSSVZFUlM9eQorIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0ZJWEVEX01JTk9SX1JBTkdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19IRUxQRVJfQ0hJUFNfQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fSVJfSTJDPXkKKworIworIyBFbmNvZGVycy9kZWNvZGVycyBhbmQgb3RoZXIgaGVscGVyIGNoaXBzCisjCisKKyMKKyMgQXVkaW8gZGVjb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX1RWQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVERBNzQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UREE5ODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1REQTk4NzUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVEVBNjQxNUMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVEVBNjQyMCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NU1AzNDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NTNTM0NSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUzUzTDMyQSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NNTI3OTAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVExWMzIwQUlDMjNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1dNODc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19XTTg3MzkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVlAyN1NNUFggaXMgbm90IHNldAorCisjCisjIFJEUyBkZWNvZGVycworIworIyBDT05GSUdfVklERU9fU0FBNjU4OCBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW8gZGVjb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX0FEVjcxODAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQlQ4MTkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQlQ4NTYgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQlQ4NjYgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fS1MwMTI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09WNzY3MCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NVDlWMDExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RDTTgyNVggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNzExMCBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTcxN1ggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNzE5MSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19UVlA1MTRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1RWUDUxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVlBYMzIyMCBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW8gYW5kIGF1ZGlvIGRlY29kZXJzCisjCisjIENPTkZJR19WSURFT19DWDI1ODQwIGlzIG5vdCBzZXQKKworIworIyBNUEVHIHZpZGVvIGVuY29kZXJzCisjCisjIENPTkZJR19WSURFT19DWDIzNDFYIGlzIG5vdCBzZXQKKworIworIyBWaWRlbyBlbmNvZGVycworIworIyBDT05GSUdfVklERU9fU0FBNzEyNyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE3MTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0FEVjcxNzAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQURWNzE3NSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19USFM3MzAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0FEVjczNDMgaXMgbm90IHNldAorCisjCisjIFZpZGVvIGltcHJvdmVtZW50IGNoaXBzCisjCisjIENPTkZJR19WSURFT19VUEQ2NDAzMUEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVVBENjQwODMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVklWSSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DUElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0NQSUEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTUyNDkgaXMgbm90IHNldAorQ09ORklHX1NPQ19DQU1FUkE9eQorIyBDT05GSUdfU09DX0NBTUVSQV9NVDlNMDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TT0NfQ0FNRVJBX01UOU0xMTE9eQorIyBDT05GSUdfU09DX0NBTUVSQV9NVDlUMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPQ19DQU1FUkFfTVQ5VDExMiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBX01UOVYwMjIgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9SSjU0TjEgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9UVzk5MTAgaXMgbm90IHNldAorIyBDT05GSUdfU09DX0NBTUVSQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBX09WNzcyWCBpcyBub3Qgc2V0CisjIENPTkZJR19TT0NfQ0FNRVJBX09WOTY0MCBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fUFhBMjd4PXkKKyMgQ09ORklHX1ZJREVPX1NIX01PQklMRV9DRVUgaXMgbm90IHNldAorIyBDT05GSUdfVjRMX1VTQl9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19SQURJT19BREFQVEVSUz15CisjIENPTkZJR19JMkNfU0k0NzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1NJNDcxMyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFNCUiBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19TSTQ3MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01SODAwIGlzIG5vdCBzZXQKK0NPTkZJR19SQURJT19URUE1NzY0PXkKK0NPTkZJR19SQURJT19URUE1NzY0X1hUQUw9eQorIyBDT05GSUdfUkFESU9fVEVGNjg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1VWRVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9QWEE9eQorQ09ORklHX0ZCX1BYQV9PVkVSTEFZPXkKKyMgQ09ORklHX0ZCX1BYQV9TTUFSVFBBTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9QWEFfUEFSQU1FVEVSUz15CisjIENPTkZJR19GQl9NQlggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CisjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKK0NPTkZJR19CQUNLTElHSFRfR0VORVJJQz15CisjIENPTkZJR19CQUNLTElHSFRfREE5MDNYIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UUz15CisjIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzh4MTYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF9NSU5JXzR4Nj15CisjIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorQ09ORklHX1NPVU5EPXkKK0NPTkZJR19TT1VORF9PU1NfQ09SRT15CitDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQorQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPXkKK0NPTkZJR19TTkRfSkFDSz15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CitDT05GSUdfU05EX01JWEVSX09TUz15CitDT05GSUdfU05EX1BDTV9PU1M9eQorQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9BUk0gaXMgbm90IHNldAorQ09ORklHX1NORF9QWEEyWFhfTElCPXkKKyMgQ09ORklHX1NORF9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX1BYQTJYWF9TT0M9eQorIyBDT05GSUdfU05EX1BYQTJYWF9TT0NfSU1PVEUyIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPXkKKyMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCisjIENPTkZJR19VU0JfSElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9BUFBMRT1tCisjIENPTkZJR19ISURfV0FDT00gaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfREVWSUNFX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKKworIworIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbworIworIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfU0VSSUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfRU1JNjIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VNSTI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BRFVUVVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFVlNFRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkVSUllfQ0hBUkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JRE1PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9GVERJX0VMQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVQ9eQorIyBDT05GSUdfVVNCX0dBREdFVF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RFQlVHX0ZJTEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfVkJVU19EUkFXPTIKK0NPTkZJR19VU0JfR0FER0VUX1NFTEVDVEVEPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FUTUVMX1VTQkEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfVVNCMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUFhBMjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUjhBNjY1OTcgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfUFhBMjdYPXkKK0NPTkZJR19VU0JfUFhBMjdYPXkKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDX0hTT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfSU1YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX002NjU5MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0FNRDU1MzZVREMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9GU0xfUUUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9DSTEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTkVUMjI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0dPS1UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkVSTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9FVEg9eQorIyBDT05GSUdfVVNCX0VUSF9STkRJUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUFTU19TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19NVUxUSSBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCitDT05GSUdfVVNCX09UR19VVElMUz15CisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VTFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAorQ09ORklHX01NQz15CisjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FPXkKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9eQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorQ09ORklHX1NESU9fVUFSVD1tCisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfUFhBPXkKKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAorQ09ORklHX01NQ19TUEk9eQorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfTEVEU19MUDM5NDQ9eQorIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfREFDMTI0UzA4NSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0xUMzU5MyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIFRyaWdnZXJzCisjCitDT05GSUdfTEVEU19UUklHR0VSUz15CitDT05GSUdfTEVEU19UUklHR0VSX1RJTUVSPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUPXkKK0NPTkZJR19MRURTX1RSSUdHRVJfR1BJTz15CitDT05GSUdfTEVEU19UUklHR0VSX0RFRkFVTFRfT049eQorCisjCisjIGlwdGFibGVzIHRyaWdnZXIgaXMgdW5kZXIgTmV0ZmlsdGVyIGNvbmZpZyAoTEVEIHRhcmdldCkKKyMKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAorCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CisKKyMKKyMgb24tQ1BVIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPW0KKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0pCRD1tCisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9bQorQ09ORklHX1JFSVNFUkZTX0ZTPW0KKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CitDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFI9eQorQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX1hGU19GUz1tCisjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfWEZTX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19BVVRPRlNfRlM9eQorQ09ORklHX0FVVE9GUzRfRlM9eQorQ09ORklHX0ZVU0VfRlM9bQorQ09ORklHX0NVU0U9bQorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9bQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz1tCitDT05GSUdfTVNET1NfRlM9bQorQ09ORklHX1ZGQVRfRlM9bQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz1tCitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlM9eQorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX0xaTz15CitDT05GSUdfSkZGUzJfUlRJTUU9eQorQ09ORklHX0pGRlMyX1JVQklOPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX05PTkUgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0NNT0RFX1BSSU9SSVRZPXkKKyMgQ09ORklHX0pGRlMyX0NNT0RFX1NJWkUgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ01PREVfRkFWT1VSTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9bQorQ09ORklHX1NRVUFTSEZTPW0KKyMgQ09ORklHX1NRVUFTSEZTX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TUVVBU0hGU19GUkFHTUVOVF9DQUNIRV9TSVpFPTMKKyMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfRlM9bQorQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CTE9DSz15CisjIENPTkZJR19ST01GU19CQUNLRURfQllfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9CT1RIIGlzIG5vdCBzZXQKK0NPTkZJR19ST01GU19PTl9CTE9DSz15CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CitDT05GSUdfTkZTX0ZTPXkKK0NPTkZJR19ORlNfVjM9eQorQ09ORklHX05GU19WM19BQ0w9eQorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPT1RfTkZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEPW0KK0NPTkZJR19ORlNEX1YyX0FDTD15CitDT05GSUdfTkZTRF9WMz15CitDT05GSUdfTkZTRF9WM19BQ0w9eQorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTkZTX0FDTF9TVVBQT1JUPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCisjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorQ09ORklHX0NJRlM9bQorQ09ORklHX0NJRlNfU1RBVFM9eQorIyBDT05GSUdfQ0lGU19TVEFUUzIgaXMgbm90IHNldAorQ09ORklHX0NJRlNfV0VBS19QV19IQVNIPXkKK0NPTkZJR19DSUZTX1hBVFRSPXkKK0NPTkZJR19DSUZTX1BPU0lYPXkKKyMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfRVhQRVJJTUVOVEFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9bQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9bQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9bQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9bQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9bQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9bQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9bQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9bQorQ09ORklHX05MU19JU084ODU5Xzg9bQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT1tCitDT05GSUdfTkxTX0FTQ0lJPW0KK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KK0NPTkZJR19OTFNfSVNPODg1OV8yPW0KK0NPTkZJR19OTFNfSVNPODg1OV8zPW0KK0NPTkZJR19OTFNfSVNPODg1OV80PW0KK0NPTkZJR19OTFNfSVNPODg1OV81PW0KK0NPTkZJR19OTFNfSVNPODg1OV82PW0KK0NPTkZJR19OTFNfSVNPODg1OV83PW0KK0NPTkZJR19OTFNfSVNPODg1OV85PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9bQorQ09ORklHX05MU19JU084ODU5XzE1PW0KK0NPTkZJR19OTFNfS09JOF9SPW0KK0NPTkZJR19OTFNfS09JOF9VPW0KK0NPTkZJR19OTFNfVVRGOD1tCisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKKyMgQ09ORklHX1NDSEVEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19QUkVFTVBUPXkKK0NPTkZJR19ERUJVR19SVF9NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19QSV9MSVNUPXkKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0M9eQorQ09ORklHX1BST1ZFX0xPQ0tJTkc9eQorQ09ORklHX0xPQ0tERVA9eQorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tERVAgaXMgbm90IHNldAorQ09ORklHX1RSQUNFX0lSUUZMQUdTPXkKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBQ0tUUkFDRT15CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorIyBDT05GSUdfRlRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RZTkFNSUNfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfQVJNX1VOV0lORD15CitDT05GSUdfREVCVUdfVVNFUj15CitDT05GSUdfREVCVUdfRVJST1JTPXkKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCitDT05GSUdfQ1JZUFRPX0FMR0FQST1tCitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9bQorQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQUVBRDI9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9bQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPW0KK0NPTkZJR19DUllQVE9fSEFTSD1tCitDT05GSUdfQ1JZUFRPX0hBU0gyPW0KK0NPTkZJR19DUllQVE9fUk5HMj1tCitDT05GSUdfQ1JZUFRPX1BDT01QPW0KK0NPTkZJR19DUllQVE9fTUFOQUdFUj1tCitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPW0KK0NPTkZJR19DUllQVE9fR0YxMjhNVUw9bQorQ09ORklHX0NSWVBUT19OVUxMPW0KK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPW0KK0NPTkZJR19DUllQVE9fQ1JZUFREPW0KK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPW0KKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCitDT05GSUdfQ1JZUFRPX0xSVz1tCitDT05GSUdfQ1JZUFRPX1BDQkM9bQorQ09ORklHX0NSWVBUT19YVFM9bQorCisjCisjIEhhc2ggbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fSE1BQz1tCitDT05GSUdfQ1JZUFRPX1hDQkM9bQorQ09ORklHX0NSWVBUT19WTUFDPW0KKworIworIyBEaWdlc3QKKyMKK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KK0NPTkZJR19DUllQVE9fR0hBU0g9bQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9bQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCitDT05GSUdfQ1JZUFRPX1RHUjE5Mj1tCisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKK0NPTkZJR19DUllQVE9fQUVTPW0KKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQ0FTVDU9bQorQ09ORklHX0NSWVBUT19DQVNUNj1tCitDT05GSUdfQ1JZUFRPX0RFUz1tCitDT05GSUdfQ1JZUFRPX0ZDUllQVD1tCitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NFRUQ9bQorQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KK0NPTkZJR19DUllQVE9fVEVBPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSD1tCitDT05GSUdfQ1JZUFRPX1RXT0ZJU0hfQ09NTU9OPW0KKworIworIyBDb21wcmVzc2lvbgorIworQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PXkKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorQ09ORklHX0NSQ19JVFVfVD15CitDT05GSUdfQ1JDMzI9eQorQ09ORklHX0NSQzc9eQorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9bQorQ09ORklHX0xaT19DT01QUkVTUz1tCitDT05GSUdfTFpPX0RFQ09NUFJFU1M9bQorQ09ORklHX0RFQ09NUFJFU1NfR1pJUD15CitDT05GSUdfREVDT01QUkVTU19CWklQMj15CitDT05GSUdfREVDT01QUkVTU19MWk1BPXkKK0NPTkZJR19URVhUU0VBUkNIPXkKK0NPTkZJR19URVhUU0VBUkNIX0tNUD1tCitDT05GSUdfVEVYVFNFQVJDSF9CTT1tCitDT05GSUdfVEVYVFNFQVJDSF9GU009bQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfTkxBVFRSPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mva2lya3dvb2RfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcKaW5kZXggNWZjNDRjOS4uNDYxMWQzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9raXJrd29vZF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM2Ci0jIFNhdCBOb3YgIDcgMjA6MzE6MTggMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjNgorIyBUaHUgRmViICA0IDIzOjA4OjU0IDIwMTAKICMKIENPTkZJR19BUk09eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKQEAgLTMyLDYgKzMyLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ1LDYgKzUxLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC0xMjcsMTQgKzEzNCw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE2Myw2ICsxOTcsNyBAQAogIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0tJUktXT09EPXkKICMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldApAQCAtMTg1LDYgKzIyMCw3IEBACiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKIAogIwogIyBNYXJ2ZWxsIEtpcmt3b29kIEltcGxlbWVudGF0aW9ucwpAQCAtMTk1LDcgKzIzMSwxMSBAQAogQ09ORklHX01BQ0hfTVY4OEY2MjgxR1RXX0dFPXkKIENPTkZJR19NQUNIX1NIRUVWQVBMVUc9eQogQ09ORklHX01BQ0hfVFMyMTk9eQorQ09ORklHX01BQ0hfVFM0MVg9eQorQ09ORklHX01BQ0hfT1BFTlJEPXkKIENPTkZJR19NQUNIX09QRU5SRF9CQVNFPXkKK0NPTkZJR19NQUNIX09QRU5SRF9DTElFTlQ9eQorQ09ORklHX01BQ0hfTkVUU1BBQ0VfVjI9eQogQ09ORklHX1BMQVRfT1JJT049eQogCiAjCkBAIC0yNjIsMTIgKzMwMiwxMCBAQAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz05OTk5OTkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CkBAIC0zOTgsMTUgKzQzNiwxOCBAQAogIyBDT05GSUdfQlQgaXMgbm90IHNldAogIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTPXkKK0NPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX1dFWFRfQ09SRT15CitDT05GSUdfV0VYVF9QUk9DPXkKK0NPTkZJR19XRVhUX1NQWT15CiBDT05GSUdfQ0ZHODAyMTE9eQogIyBDT05GSUdfTkw4MDIxMV9URVNUTU9ERSBpcyBub3Qgc2V0CiAjIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1MgaXMgbm90IHNldAogIyBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTPXkKLUNPTkZJR19DRkc4MDIxMV9ERUZBVUxUX1BTX1ZBTFVFPTEKICMgQ09ORklHX0NGRzgwMjExX0RFQlVHRlMgaXMgbm90IHNldAogQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQorQ09ORklHX0NGRzgwMjExX1dFWFQ9eQogQ09ORklHX1dJUkVMRVNTX0VYVF9TWVNGUz15CiBDT05GSUdfTElCODAyMTE9eQogIyBDT05GSUdfTElCODAyMTFfREVCVUcgaXMgbm90IHNldApAQCAtNTU2LDYgKzU5NywxMCBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKQEAgLTYwNiw3ICs2NTEsOSBAQAogIyBDT05GSUdfU0NTSV9CTlgyX0lTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JFMklTQ1NJIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSFBTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV19TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKQEAgLTY0Miw2ICs2ODksNyBAQAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUE1DUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BNODAwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0JGQV9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKQEAgLTY5NiwxNSArNzQ0LDE2IEBACiAjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUERDX09MRCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JBRElTWVMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SREMgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9SWjEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQzEyMDAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TRVJWRVJXT1JLUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQVRBX1BEQzIwMjdYIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lMNjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfVE9TSElCQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TQ0ggaXMgbm90IHNldApAQCAtNzIwLDcgKzc2OSw3IEBACiAjCiAKICMKLSMgU2VlIHRoZSBoZWxwIHRleHRzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIyBUaGUgbmV3ZXIgc3RhY2sgaXMgcmVjb21tZW5kZWQuCiAjCiAjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CkBAIC04MjgsMTMgKzg3Nyw2IEBACiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVFIgaXMgbm90IHNldAogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTl84MDIxMT15Ci1DT05GSUdfTElCRVJUQVM9eQotIyBDT05GSUdfTElCRVJUQVNfVVNCIGlzIG5vdCBzZXQKLUNPTkZJR19MSUJFUlRBU19TRElPPXkKLSMgQ09ORklHX0xJQkVSVEFTX1NQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MSUJFUlRBU19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUJFUlRBU19USElORklSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVDc2QzUwWF9VU0IgaXMgbm90IHNldApAQCAtODQ2LDE5ICs4ODgsMjQgQEAKICMgQ09ORklHX0FETTgyMTEgaXMgbm90IHNldAogIyBDT05GSUdfTUFDODAyMTFfSFdTSU0gaXMgbm90IHNldAogIyBDT05GSUdfTVdMOEsgaXMgbm90IHNldAotIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEhfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0MyBpcyBub3Qgc2V0CisjIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQVzIxMDAgaXMgbm90IHNldAogIyBDT05GSUdfSVBXMjIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JV0xXSUZJIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CNDMgaXMgbm90IHNldAotIyBDT05GSUdfQjQzTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1pEMTIxMVJXIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUMlgwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRVJNRVMgaXMgbm90IHNldAotIyBDT05GSUdfV0wxMlhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0lXTSBpcyBub3Qgc2V0CitDT05GSUdfTElCRVJUQVM9eQorIyBDT05GSUdfTElCRVJUQVNfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19MSUJFUlRBU19TRElPPXkKKyMgQ09ORklHX0xJQkVSVEFTX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJFUlRBU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19IRVJNRVMgaXMgbm90IHNldAorIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAorIyBDT05GSUdfV0wxMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1pEMTIxMVJXIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC04ODEsNiArOTI4LDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTg5MCw2ICs5MzgsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC05MzMsNiArOTgyLDcgQEAKICMgQ09ORklHX1NFUklPX1BDSVBTMiBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSU9fTElCUFMyPXkKICMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtMTAxOSwxMSArMTA2OSw2IEBACiAjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAogCiAjCi0jIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLQotIwogIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKICMKICMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldApAQCAtMTAzMiw3ICsxMDc3LDYgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwNDgsNiArMTA5Miw4IEBACiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX09SSU9OPXkKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCkBAIC0xMDc0LDEwICsxMTIwLDEyIEBACiAjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAogCiAjCiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKKyMgQ09ORklHX0dQSU9fQ1M1NTM1IGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKQEAgLTExMTYsNiArMTE2NCw3IEBACiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAogIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19BRFA1NTIwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODMxWCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CkBAIC0xMTIzLDYgKzExNzIsOCBAQAogIyBDT05GSUdfTUZEX01DMTM3ODMgaXMgbm90IHNldAogIyBDT05GSUdfQUIzMTAwX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfRVpYX1BDQVAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEXzg4UE04NjA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCNDUwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIApAQCAtMTMwNSw2ICsxMzU2LDcgQEAKICMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCiAjCiAjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VTFBJIGlzIG5vdCBzZXQKICMgQ09ORklHX05PUF9VU0JfWENFSVYgaXMgbm90IHNldAogIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKIENPTkZJR19NTUM9eQpAQCAtMTM0NCw2ICsxMzk2LDcgQEAKICMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MVDM1OTMgaXMgbm90IHNldAogCiAjCiAjIExFRCBUcmlnZ2VycwpAQCAtMTM4OCw2ICsxNDQxLDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9TMzUzOTBBPXkKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKQEAgLTE0MTcsNyArMTQ3MSw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTE2ODQsNyArMTc0MCw5IEBACiBDT05GSUdfREVCVUdfRVJST1JTPXkKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTY5Miw3ICsxNzUwLDExIEBACiAjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCiBDT05GSUdfQ1JZUFRPPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9taW5pMjQ0MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL21pbmkyNDQwX2RlZmNvbmZpZwppbmRleCBkMmE5MGViLi5mZjQ0YmQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL21pbmkyNDQwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL21pbmkyNDQwX2RlZmNvbmZpZwpAQCAtMTg0LDcgKzE4NCw3IEBACiBDT05GSUdfUzNDMjRYWF9HUElPX0VYVFJBPTAKIENPTkZJR19TM0MyNDEwX0RNQT15CiAjIENPTkZJR19TM0MyNDEwX0RNQV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfUzNDMjRYWF9BREM9eQorQ09ORklHX1MzQ19BREM9eQogQ09ORklHX1BMQVRfUzNDPXkKIENPTkZJR19DUFVfTExTRVJJQUxfUzNDMjQ0MF9PTkxZPXkKIENPTkZJR19DUFVfTExTRVJJQUxfUzNDMjQ0MD15CkBAIC0xOTksOCArMTk5LDggQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudAogIwotIyBDT05GSUdfUzNDMjQxMF9QTV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TM0MyNDEwX1BNX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVNVTkdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNU1VOR19QTV9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfUzNDX0xPV0xFVkVMX1VBUlRfUE9SVD0wCiBDT05GSUdfUzNDX0dQSU9fU1BBQ0U9MAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL21tcDJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9tbXAyX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2Y3NmNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9tbXAyX2RlZmNvbmZpZwpAQCAtMCwwICsxLDExOTQgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgVHVlIEphbiAgNSAxMzo1NToyMiAyMDEwCisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQQ19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfU0xBQj15CisjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCREFGPXkKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSBUeXBlCisjCitDT05GSUdfTU1VPXkKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX01NUD15CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVEFWT1JFVkIgaXMgbm90IHNldAorCisjCisjIE1hcnZlbGwgUFhBMTY4LzkxMC9NTVAyIEltcGxtZW50YXRpb25zCisjCisjIENPTkZJR19NQUNIX0FTUEVOSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfWllMT05JVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfVFRDX0RLQiBpcyBub3Qgc2V0CitDT05GSUdfTUFDSF9GTElOVD15CitDT05GSUdfQ1BVX01NUDI9eQorQ09ORklHX1BMQVRfUFhBPXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV9WNj15CitDT05GSUdfQ1BVXzMydjZLPXkKK0NPTkZJR19DUFVfMzJ2Nj15CitDT05GSUdfQ1BVX0FCUlRfRVY2PXkKK0NPTkZJR19DUFVfUEFCUlRfVjY9eQorQ09ORklHX0NQVV9DQUNIRV9WNj15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQorQ09ORklHX0NQVV9DT1BZX1Y2PXkKK0NPTkZJR19DUFVfVExCX1Y2PXkKK0NPTkZJR19DUFVfSEFTX0FTSUQ9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQorIyBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAgaXMgbm90IHNldAorQ09ORklHX0NPTU1PTl9DTEtERVY9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CitDT05GSUdfT0FCSV9DT01QQVQ9eQorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKyMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAorQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCitDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L25mcyByb290ZnN0eXBlPW5mcyBuZnNyb290PTE5Mi4xNjguMS4xMDA6L25mc3Jvb3QvIGlwPTE5Mi4xNjguMS4xMDE6MTkyLjE2OC4xLjEwMDo6MjU1LjI1NS4yNTUuMDo6ZXRoMDpvbiBjb25zb2xlPXR0eVMwLDExNTIwMCBtZW09MTI4TSB1c2VyX2RlYnVnPTI1NSIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCisjIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorQ09ORklHX1ZGUD15CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKKyMgQ09ORklHX1hGUk1fVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NVQl9QT0xJQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9NSUdSQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1RBVElTVElDUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFdPUktfU0VDTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVIgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEUyBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjE1NCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKworIworIyBDRkc4MDIxMSBuZWVkcyB0byBiZSBlbmFibGVkIGZvciBNQUM4MDIxMQorIworIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIiCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1RFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisjIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCisjIENPTkZJR19NVERfQ0hBUiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORD15CisjIENPTkZJR19NVERfTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRUNDX1NNQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9NVVNFVU1fSURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0dQSU8gaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX0lEUz15CisjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BYQTN4eCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfT05FTkFORD15CisjIENPTkZJR19NVERfT05FTkFORF9WRVJJRllfV1JJVEUgaXMgbm90IHNldAorQ09ORklHX01URF9PTkVOQU5EX0dFTkVSSUM9eQorIyBDT05GSUdfTVREX09ORU5BTkRfT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EXzJYX1BST0dSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkRfU0lNIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETUEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CitDT05GSUdfU01DOTFYPXkKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0M5MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RORVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19XTEFOPXkKKyMgQ09ORklHX0hPU1RBUCBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9QWEE9eQorQ09ORklHX1NFUklBTF9QWEFfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CisjIENPTkZJR19JMkNfQ0hBUkRFViBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorQ09ORklHX0kyQ19QWEE9eQorIyBDT05GSUdfSTJDX1BYQV9TTEFWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NRkRfQ09SRT15CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NRkRfODhQTTg2MDc9eQorQ09ORklHX1JFR1VMQVRPUj15CisjIENPTkZJR19SRUdVTEFUT1JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SX01BWDg2NjA9eQorIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwMjMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1JfODhQTTg2MDc9eQorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CitDT05GSUdfTENEX0NMQVNTX0RFVklDRT15CisjIENPTkZJR19MQ0RfSUxJOTMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19MQ0RfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JBQ0tMSUdIVF9DTEFTU19ERVZJQ0U9eQorQ09ORklHX0JBQ0tMSUdIVF9HRU5FUklDPXkKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlEzMksgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlg4MDI1IGlzIG5vdCBzZXQKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKworIworIyBQbGF0Zm9ybSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9DTU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMjg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNTUzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNzQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfU1RLMTdUQTggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworIyBDT05GSUdfRVhUMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorQ09ORklHX0VYVDRfVVNFX0ZPUl9FWFQyMz15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0FDTD15CisKKyMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1YzX0FDTD15CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19BQ0xfU1VQUE9SVD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKK0NPTkZJR19QUklOVEtfVElNRT15CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tNRU1MRUFLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVU5XSU5EPXkKK0NPTkZJR19ERUJVR19VU0VSPXkKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAorIyBDT05GSUdfT0NfRVRNIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9tdjc4eHgwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXY3OHh4MF9kZWZjb25maWcKaW5kZXggNmFmYTJjMS4uZGE0NzEwZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9tdjc4eHgwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL212Nzh4eDBfZGVmY29uZmlnCkBAIC0xNzYsNiArMTc2LDcgQEAKICMKIENPTkZJR19NQUNIX0RCNzhYMDBfQlA9eQogQ09ORklHX01BQ0hfUkQ3OFgwMF9NQVNBPXkKK0NPTkZJR19NQUNIX1RFUkFTVEFUSU9OX1dYTD15CiBDT05GSUdfUExBVF9PUklPTj15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgxYWRzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvbXgxYWRzX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2NhYmJiNi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL214MWFkc19kZWZjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw3NDIgKzAsMCBAQAotIwotIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKLSMgU3VuIE1hciAyNyAwMjoxNTo0NiAyMDA1Ci0jCi1DT05GSUdfQVJNPXkKLUNPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKLUNPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19JT01BUD15Ci0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19MT0NLX0tFUk5FTD15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotIyBDT05GSUdfU1lTQ1RMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hPVFBMVUcgaXMgbm90IHNldAotQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKLSMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15Ci0jIENPTkZJR19LQUxMU1lNUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0lNWD15Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLQotIwotIyBJTVggSW1wbGVtZW50YXRpb25zCi0jCi1DT05GSUdfQVJDSF9NWDFBRFM9eQotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVX0FSTTkyMFQ9eQotQ09ORklHX0NQVV8zMnY0PXkKLUNPTkZJR19DUFVfQUJSVF9FVjRUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVjRXVD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9DT1BZX1Y0V0I9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0ggaXMgbm90IHNldAotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfSVNBPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotQ09ORklHX1BSRUVNUFQ9eQotIyBDT05GSUdfTEVEUyBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTTVgwLDU3NjAwbjggaXA9Ym9vdHAgcm9vdD0vZGV2L25mcyIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotQ09ORklHX0ZQRV9OV0ZQRT15Ci1DT05GSUdfRlBFX05XRlBFX1hQPXkKLUNPTkZJR19GUEVfRkFTVEZQRT15Ci0KLSMKLSMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQotIwotQ09ORklHX01URD15Ci0jIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX1BBUlRJVElPTlM9eQotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0Ci0KLSMKLSMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKLSMKLUNPTkZJR19NVERfQ0hBUj15Ci1DT05GSUdfTVREX0JMT0NLPXkKLSMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKLQotIwotIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycwotIwotIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0kxPXkKLUNPTkZJR19NVERfQ0ZJX0kyPXkKLSMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUk9NPXkKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BOUCBpcyBub3Qgc2V0Ci0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1hEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9MT09QPXkKLSMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLSMgQ09ORklHX0lPU0NIRURfQVMgaXMgbm90IHNldAotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotCi0jCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAotIwotQ09ORklHX05FVD15Ci0KLSMKLSMgTmV0d29ya2luZyBvcHRpb25zCi0jCi1DT05GSUdfUEFDS0VUPW0KLUNPTkZJR19QQUNLRVRfTU1BUD15Ci0jIENPTkZJR19ORVRMSU5LX0RFViBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci0jIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX1BOUD15Ci1DT05GSUdfSVBfUE5QX0RIQ1A9eQotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9UQ1BESUFHPXkKLSMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCi1DT05GSUdfTkVUX0VUSEVSTkVUPXkKLUNPTkZJR19NSUk9eQotIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBTkNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9WRU5ET1JfU01DIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUMTcwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPQ0tFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLQotIwotIyBUb2tlbiBSaW5nIGRldmljZXMKLSMKLSMgQ09ORklHX1RSIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4gKG5vbi1oYW1yYWRpbykKLSMKLSMgQ09ORklHX05FVF9SQURJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgV2FuIGludGVyZmFjZXMKLSMKLSMgQ09ORklHX1dBTiBpcyBub3Qgc2V0Ci1DT05GSUdfUFBQPXkKLSMgQ09ORklHX1BQUF9NVUxUSUxJTksgaXMgbm90IHNldAotQ09ORklHX1BQUF9GSUxURVI9eQotQ09ORklHX1BQUF9BU1lOQz15Ci0jIENPTkZJR19QUFBfU1lOQ19UVFkgaXMgbm90IHNldAotQ09ORklHX1BQUF9ERUZMQVRFPXkKLUNPTkZJR19QUFBfQlNEQ09NUD15Ci0jIENPTkZJR19QUFBPRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lOUFVUIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLSMgQ09ORklHX1ZUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLSMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0lNWD15Ci1DT05GSUdfU0VSSUFMX0lNWF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotIyBDT05GSUdfTEVHQUNZX1BUWVMgaXMgbm90IHNldAotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLUNPTkZJR19SVEM9bQotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkMgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLSMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KQkQgaXMgbm90IHNldAotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIwotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotQ09ORklHX0ZBVF9GUz15Ci1DT05GSUdfTVNET1NfRlM9eQotQ09ORklHX1ZGQVRfRlM9eQotQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNwotQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfU1lTRlM9eQotQ09ORklHX0RFVkZTX0ZTPXkKLUNPTkZJR19ERVZGU19NT1VOVD15Ci0jIENPTkZJR19ERVZGU19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLSMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JBTUZTPXkKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCi1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLSMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotQ09ORklHX05MUz15Ci1DT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKLSMgQ09ORklHX05MU19DT0RFUEFHRV80MzcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19BU0NJSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV8xIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAotIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKLSMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotQ09ORklHX0RFQlVHX0tFUk5FTD15Ci1DT05GSUdfTUFHSUNfU1lTUlE9eQotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLSMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfUFJFRU1QVD15Ci0jIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLUNPTkZJR19ERUJVR19JTkZPPXkKLSMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19ERUJVR19VU0VSPXkKLUNPTkZJR19ERUJVR19FUlJPUlM9eQotIyBDT05GSUdfREVCVUdfTEwgaXMgbm90IHNldAotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotQ09ORklHX0NSWVBUTz15Ci0jIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi1DT05GSUdfQ1JDX0NDSVRUPXkKLUNPTkZJR19DUkMzMj15Ci0jIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAotQ09ORklHX1pMSUJfSU5GTEFURT15Ci1DT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgyN19kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL214MjdfZGVmY29uZmlnCmluZGV4IGVkZmRkNmYuLmI0YzEzNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvbXgyN19kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDI3X2RlZmNvbmZpZwpAQCAtMjAwLDcgKzIwMCw3IEBACiBDT05GSUdfTUFDSF9QQ00wMzg9eQogQ09ORklHX01BQ0hfUENNOTcwX0JBU0VCT0FSRD15CiBDT05GSUdfTUFDSF9NWDI3XzNEUz15Ci1DT05GSUdfTUFDSF9NWDI3TElURT15CitDT05GSUdfTUFDSF9JTVgyN0xJVEU9eQogQ09ORklHX01YQ19JUlFfUFJJT1I9eQogQ09ORklHX01YQ19QV009eQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL214NTFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9teDUxX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODhlOTUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9teDUxX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEyODYgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzYKKyMgVHVlIEZlYiAgMiAxNToyMDo0OCAyMDEwCisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19HRU5FUklDX1RJTUU9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfQVJDSF9NVERfWElQPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTgKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMiBpcyBub3Qgc2V0CitDT05GSUdfUkVMQVk9eQorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CisjIENPTkZJR19TTFVCX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9DTEs9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfR0NPVl9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorQ09ORklHX01PRFZFUlNJT05TPXkKK0NPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEw9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCREFGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKK0NPTkZJR19GUkVFWkVSPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworQ09ORklHX01NVT15CisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTVhDPXkKKyMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzVQQzFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1UzMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9EQVZJTkNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VODUwMCBpcyBub3Qgc2V0CisKKyMKKyMgRnJlZXNjYWxlIE1YQyBJbXBsZW1lbnRhdGlvbnMKKyMKKyMgQ09ORklHX0FSQ0hfTVgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVgyNSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YMyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQzkxMjMxIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX01YNT15CitDT05GSUdfQVJDSF9NWDUxPXkKKworIworIyBNWDUgcGxhdGZvcm1zOgorIworQ09ORklHX01BQ0hfTVg1MV9CQUJCQUdFPXkKKyMgQ09ORklHX01YQ19JUlFfUFJJT1IgaXMgbm90IHNldAorQ09ORklHX01YQ19UWklDPXkKKyMgQ09ORklHX01YQ19QV00gaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTVhDX0lPTVVYX1YzPXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMnY2Sz15CitDT05GSUdfQ1BVX1Y3PXkKK0NPTkZJR19DUFVfMzJ2Nz15CitDT05GSUdfQ1BVX0FCUlRfRVY3PXkKK0NPTkZJR19DUFVfUEFCUlRfVjc9eQorQ09ORklHX0NQVV9DQUNIRV9WNz15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQorQ09ORklHX0NQVV9DT1BZX1Y2PXkKK0NPTkZJR19DUFVfVExCX1Y3PXkKK0NPTkZJR19DUFVfSEFTX0FTSUQ9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19BUk1fVEhVTUJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVNfVExTX1JFRz15CitDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKKyMgQ09ORklHX0FSTV9FUlJBVEFfNDMwOTczIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9FUlJBVEFfNDU4NjkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9FUlJBVEFfNDYwMDc1IGlzIG5vdCBzZXQKK0NPTkZJR19DT01NT05fQ0xLREVWPXkKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKK0NPTkZJR19USUNLX09ORVNIT1Q9eQorQ09ORklHX05PX0haPXkKK0NPTkZJR19ISUdIX1JFU19USU1FUlM9eQorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorQ09ORklHX1ZNU1BMSVRfM0c9eQorIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CisjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCisjIENPTkZJR19QUkVFTVBUX05PTkUgaXMgbm90IHNldAorQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZPXkKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorQ09ORklHX0haPTEwMAorIyBDT05GSUdfVEhVTUIyX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfQUVBQkk9eQorIyBDT05GSUdfT0FCSV9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CitDT05GSUdfUEFHRUZMQUdTX0VYVEVOREVEPXkKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9MzI3NjgKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0wCitDT05GSUdfWkJPT1RfUk9NX0JTUz0wCitDT05GSUdfQ01ETElORT0ibm9pbml0cmQgY29uc29sZT10dHlteGMwLDExNTIwMCByb290PS9kZXYvbmZzIG5mc3Jvb3Q9MTkyLjE2OC4wLjEwMTovc2hhcmVkL25mcyBpcD1kaGNwIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19WRlA9eQorQ09ORklHX1ZGUHYzPXkKK0NPTkZJR19ORU9OPXkKKworIworIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0NPUkVfRFVNUF9ERUZBVUxUX0VMRl9IRUFERVJTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FPVVQ9eQorIyBDT05GSUdfQklORk1UX0FPVVQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPW0KKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19QTT15CitDT05GSUdfUE1fREVCVUc9eQorIyBDT05GSUdfUE1fVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfQ0FOX1BNX1RSQUNFPXkKK0NPTkZJR19QTV9TTEVFUD15CitDT05GSUdfU1VTUEVORD15CitDT05GSUdfUE1fVEVTVF9TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorIyBDT05GSUdfQVBNX0VNVUxBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19QTV9SVU5USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iIgorIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKK0NPTkZJR19DT05ORUNUT1I9eQorQ09ORklHX1BST0NfRVZFTlRTPXkKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWPXkKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9NjU1MzYKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BST0NfRlMgaXMgbm90IHNldAorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKK0NPTkZJR19TQ1NJX0NPTlNUQU5UUz15CitDT05GSUdfU0NTSV9MT0dHSU5HPXkKK0NPTkZJR19TQ1NJX1NDQU5fQVNZTkM9eQorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT1dMRVZFTCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CitDT05GSUdfQVRBPW0KKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfQVRBX1ZFUkJPU0VfRVJST1I9eQorQ09ORklHX1NBVEFfUE1QPXkKK0NPTkZJR19BVEFfU0ZGPXkKKyMgQ09ORklHX1NBVEFfTVYgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKK0NPTkZJR19NQVJWRUxMX1BIWT15CitDT05GSUdfREFWSUNPTV9QSFk9eQorQ09ORklHX1FTRU1JX1BIWT15CitDT05GSUdfTFhUX1BIWT15CitDT05GSUdfQ0lDQURBX1BIWT15CitDT05GSUdfVklURVNTRV9QSFk9eQorQ09ORklHX1NNU0NfUEhZPXkKK0NPTkZJR19CUk9BRENPTV9QSFk9eQorQ09ORklHX0lDUExVU19QSFk9eQorQ09ORklHX1JFQUxURUtfUEhZPXkKK0NPTkZJR19OQVRJT05BTF9QSFk9eQorQ09ORklHX1NURTEwWFA9eQorQ09ORklHX0xTSV9FVDEwMTFDX1BIWT15CitDT05GSUdfRklYRURfUEhZPXkKK0NPTkZJR19NRElPX0JJVEJBTkc9eQorQ09ORklHX01ESU9fR1BJTz15CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9bQorIyBDT05GSUdfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NDIgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CitDT05GSUdfRkVDPXkKKyMgQ09ORklHX0ZFQzIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMQU4gaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19QUFAgaXMgbm90IHNldAorIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKK0NPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKK0NPTkZJR19JTlBVVF9FVkJVRz1tCisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19RVDIxNjAgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9bQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CitDT05GSUdfTU9VU0VfUFMyX0VMQU5URUNIPXkKKyMgQ09ORklHX01PVVNFX1BTMl9TRU5URUxJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9QUzJfVE9VQ0hLSVQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD1tCitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CitDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKKyMgQ09ORklHX0RFVktNRU0gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfSU1YPXkKK0NPTkZJR19TRVJJQUxfSU1YX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKKyMgQ09ORklHX0kyQ19DT01QQVQgaXMgbm90IHNldAorQ09ORklHX0kyQ19DSEFSREVWPW0KKyMgQ09ORklHX0kyQ19IRUxQRVJfQVVUTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEFsZ29yaXRobXMKKyMKK0NPTkZJR19JMkNfQUxHT0JJVD1tCitDT05GSUdfSTJDX0FMR09QQ0Y9bQorQ09ORklHX0kyQ19BTEdPUENBPW0KKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19ERVNJR05XQVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JTVggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorCisjCisjIE90aGVyIEkyQy9TTUJ1cyBidXMgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BDQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CisjCisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19NTUM9eQorIyBDT05GSUdfTU1DX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfQkxPQ0s9bQorQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfU0RJT19VQVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19URVNUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QvU0RJTyBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX01NQ19TREhDST1tCisjIENPTkZJR19NTUNfU0RIQ0lfUExURk0gaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX0FUTUVMTUNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19NWEMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorQ09ORklHX05FV19MRURTPXkKK0NPTkZJR19MRURTX0NMQVNTPW0KKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19MVDM1OTMgaXMgbm90IHNldAorCisjCisjIExFRCBUcmlnZ2VycworIworIyBDT05GSUdfTEVEU19UUklHR0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CitDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMPXkKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JQNUMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUMl9GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUM19GU19TRUNVUklUWT15CitDT05GSUdfRVhUNF9GUz15CitDT05GSUdfRVhUNF9GU19YQVRUUj15CitDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDRfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUNF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKKyMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfSkJEMj15CisjIENPTkZJR19KQkQyX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CitDT05GSUdfUVVPVEE9eQorQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFPXkKKyMgQ09ORklHX1BSSU5UX1FVT1RBX1dBUk5JTkcgaXMgbm90IHNldAorIyBDT05GSUdfUUZNVF9WMSBpcyBub3Qgc2V0CisjIENPTkZJR19RRk1UX1YyIGlzIG5vdCBzZXQKK0NPTkZJR19RVU9UQUNUTD15CitDT05GSUdfQVVUT0ZTX0ZTPXkKK0NPTkZJR19BVVRPRlM0X0ZTPXkKK0NPTkZJR19GVVNFX0ZTPXkKKyMgQ09ORklHX0NVU0UgaXMgbm90IHNldAorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9bQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19DT05GSUdGU19GUz1tCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUNSWVBUX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CitDT05GSUdfTkZTX1YzX0FDTD15CitDT05GSUdfTkZTX1Y0PXkKKyMgQ09ORklHX05GU19WNF8xIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19BQ0xfU1VQUE9SVD15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9ImNwNDM3IgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9bQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0lTTzg4NTlfMTU9bQorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfVVRGOD15CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19GUz15CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX1NPRlRMT0NLVVAgaXMgbm90IHNldAorIyBDT05GSUdfREVURUNUX0hVTkdfVEFTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01FTU9SWV9JTklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CisjIENPTkZJR19GVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9VTldJTkQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVVNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0xMPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworQ09ORklHX0tFWVM9eQorIyBDT05GSUdfS0VZU19ERUJVR19QUk9DX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX1NFQ1VSSVRZRlM9eQorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TRUxJTlVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU01BQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9UT01PWU8gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfREFDPXkKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZPSIiCitDT05GSUdfQ1JZUFRPPXkKKworIworIyBDcnlwdG8gY29yZSBvciBoZWxwZXIKKyMKK0NPTkZJR19DUllQVE9fQUxHQVBJPXkKK0NPTkZJR19DUllQVE9fQUxHQVBJMj15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19QQ09NUD15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19XT1JLUVVFVUU9eQorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVVUSEVOQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgQXV0aGVudGljYXRlZCBFbmNyeXB0aW9uIHdpdGggQXNzb2NpYXRlZCBEYXRhCisjCisjIENPTkZJR19DUllQVE9fQ0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUUlWIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBtb2RlcworIworQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCitDT05GSUdfQ1JZUFRPX0NSQzMyQz1tCisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDEyOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDMyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEE1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorCisjCisjIENpcGhlcnMKKyMKKyMgQ09ORklHX0NSWVBUT19BRVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQVJDNCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19MWk89eQorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19SQVRJT05BTD15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PXkKK0NPTkZJR19DUkNfVDEwRElGPXkKK0NPTkZJR19DUkNfSVRVX1Q9bQorQ09ORklHX0NSQzMyPXkKK0NPTkZJR19DUkM3PW0KK0NPTkZJR19MSUJDUkMzMkM9bQorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL251Yzk1MF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL251Yzk1MF9kZWZjb25maWcKaW5kZXggOTczMDBlYy4uNTFjYzJhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9udWM5NTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvbnVjOTUwX2RlZmNvbmZpZwpAQCAtNTkwLDggKzU5MCw0MCBAQAogIwogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAotIyBDT05GSUdfRkIgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9OVUM5MDA9eQorQ09ORklHX0dQTTEwNDBBMF8zMjBYMjQwPXkKK0NPTkZJR19GQl9OVUM5MDBfREVCVUc9eQorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CisKKwogCiAjCiAjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKQEAgLTYwMyw2ICs2MzUsMjUgQEAKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX0RFVEVDVF9QUklNQVJZPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfUk9UQVRJT04gaXMgbm90IHNldAorQ09ORklHX0ZPTlRTPXkKKyMgQ09ORklHX0ZPTlRfOHg4IGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4MTY9eQorIyBDT05GSUdfRk9OVF82eDExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfN3gxNCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1BFQVJMXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX0FDT1JOXzh4OCBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX01JTklfNHg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfU1VOOHgxNiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjEyeDIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRfMTB4MTggaXMgbm90IHNldAorQ09ORklHX0xPR089eQorIyBDT05GSUdfTE9HT19MSU5VWF9NT05PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR09fTElOVVhfVkdBMTYgaXMgbm90IHNldAorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CisKICMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1VQUE9SVD15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZGVmY29uZmlnCmluZGV4IDM2N2JlOTguLjcxNDgzNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMyLXJjOAotIyBUdWUgRGVjICAxIDE0OjA0OjAyIDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzUKKyMgVHVlIEphbiAyNiAxMTowNTozMSAyMDEwCiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CkBAIC0yMCw2ICsyMCw4IEBACiBDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CiBDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19PUFJPRklMRV9BUk1WNj15CitDT05GSUdfT1BST0ZJTEVfQVJNMTFfQ09SRT15CiBDT05GSUdfT1BST0ZJTEVfQVJNVjc9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgpAQCAtMzMsNiArMzUsMTIgQEAKIENPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDgsNiArNTYsNyBAQAogIwogQ09ORklHX1RSRUVfUkNVPXkKICMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAogIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19SQ1VfRkFOT1VUPTMyCiAjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKQEAgLTY5LDYgKzc4LDcgQEAKIENPTkZJR19SRF9HWklQPXkKICMgQ09ORklHX1JEX0JaSVAyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JEX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfUkRfTFpPIGlzIG5vdCBzZXQKIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU1lTQ1RMPXkKIENPTkZJR19BTk9OX0lOT0RFUz15CkBAIC0xMzMsMTQgKzE0Myw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogQ09ORklHX0ZSRUVaRVI9eQogCiAjCkBAIC0xNjksNiArMjA2LDcgQEAKICMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldApAQCAtMTkxLDIxICsyMjksMjMgQEAKICMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKICMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKIAogIwogIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwogIwogQ09ORklHX0FSQ0hfT01BUF9PVEc9eQogIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAyIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVAyUExVUz15CitDT05GSUdfQVJDSF9PTUFQMj15CiBDT05GSUdfQVJDSF9PTUFQMz15Ci0jIENPTkZJR19BUkNIX09NQVA0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX09NQVA0PXkKIAogIwogIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwogIwotIyBDT05GSUdfT01BUF9ERUJVR19QT1dFUkRPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0RFQlVHX0NMT0NLRE9NQUlOIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX0RFQlVHX0RFVklDRVM9eQorQ09ORklHX09NQVBfREVCVUdfTEVEUz15CiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1M9eQogQ09ORklHX09NQVBfTVVYPXkKIENPTkZJR19PTUFQX01VWF9ERUJVRz15CkBAIC0yMTYsNDMgKzI1Niw2NiBAQAogQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKIENPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKIENPTkZJR19PTUFQX0RNX1RJTUVSPXkKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDEgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzIGlzIG5vdCBzZXQKLUNPTkZJR19PTUFQX0xMX0RFQlVHX05PTkU9eQogIyBDT05GSUdfT01BUF9QTV9OT05FIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQX1BNX05PT1A9eQotQ09ORklHX0FSQ0hfT01BUDM0WFg9eQorQ09ORklHX01BQ0hfT01BUF9HRU5FUklDPXkKKworIworIyBPTUFQIENvcmUgVHlwZQorIworQ09ORklHX0FSQ0hfT01BUDI0MjA9eQorIyBDT05GSUdfQVJDSF9PTUFQMjQzMCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQMzQzMD15CitDT05GSUdfT01BUF9QQUNLQUdFX0NCQj15CitDT05GSUdfT01BUF9QQUNLQUdFX0NVUz15CitDT05GSUdfT01BUF9QQUNLQUdFX0NCUD15CiAKICMKICMgT01BUCBCb2FyZCBUeXBlCiAjCitDT05GSUdfTUFDSF9PTUFQMl9UVVNCNjAxMD15CitDT05GSUdfTUFDSF9PTUFQX0g0PXkKK0NPTkZJR19NQUNIX09NQVBfQVBPTExPTj15CisjIENPTkZJR19NQUNIX09NQVBfMjQzMFNEUCBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9PTUFQM19CRUFHTEU9eQogQ09ORklHX01BQ0hfT01BUF9MRFA9eQogQ09ORklHX01BQ0hfT1ZFUk89eQogQ09ORklHX01BQ0hfT01BUDNFVk09eQogQ09ORklHX01BQ0hfT01BUDM1MTdFVk09eQogQ09ORklHX01BQ0hfT01BUDNfUEFORE9SQT15CitDT05GSUdfTUFDSF9PTUFQM19UT1VDSEJPT0s9eQogQ09ORklHX01BQ0hfT01BUF8zNDMwU0RQPXkKK0NPTkZJR19NQUNIX05PS0lBX044MDA9eQorQ09ORklHX01BQ0hfTk9LSUFfTjgxMD15CitDT05GSUdfTUFDSF9OT0tJQV9OODEwX1dJTUFYPXkKK0NPTkZJR19NQUNIX05PS0lBX044WDA9eQogQ09ORklHX01BQ0hfTk9LSUFfUlg1MT15CiBDT05GSUdfTUFDSF9PTUFQX1pPT00yPXkKIENPTkZJR19NQUNIX09NQVBfWk9PTTM9eQogQ09ORklHX01BQ0hfQ01fVDM1PXkKIENPTkZJR19NQUNIX0lHRVAwMDIwPXkKIENPTkZJR19NQUNIX09NQVBfMzYzMFNEUD15CitDT05GSUdfTUFDSF9PTUFQXzQ0MzBTRFA9eQorIyBDT05GSUdfT01BUDNfRU1VIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVAzX1NEUkNfQUNfVElNSU5HIGlzIG5vdCBzZXQKIAogIwogIyBQcm9jZXNzb3IgVHlwZQogIwotQ09ORklHX0NQVV8zMnY2Sz15CitDT05GSUdfQ1BVX1Y2PXkKKyMgQ09ORklHX0NQVV8zMnY2SyBpcyBub3Qgc2V0CiBDT05GSUdfQ1BVX1Y3PXkKK0NPTkZJR19DUFVfMzJ2Nj15CiBDT05GSUdfQ1BVXzMydjc9eQorQ09ORklHX0NQVV9BQlJUX0VWNj15CiBDT05GSUdfQ1BVX0FCUlRfRVY3PXkKK0NPTkZJR19DUFVfUEFCUlRfVjY9eQogQ09ORklHX0NQVV9QQUJSVF9WNz15CitDT05GSUdfQ1BVX0NBQ0hFX1Y2PXkKIENPTkZJR19DUFVfQ0FDSEVfVjc9eQogQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKIENPTkZJR19DUFVfQ09QWV9WNj15CitDT05GSUdfQ1BVX1RMQl9WNj15CiBDT05GSUdfQ1BVX1RMQl9WNz15CiBDT05GSUdfQ1BVX0hBU19BU0lEPXkKIENPTkZJR19DUFVfQ1AxNT15CkBAIC0yNjgsOSArMzMxLDExIEBACiAjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CiBDT05GSUdfSEFTX1RMU19SRUc9eQogQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD02CisjIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUk1fRVJSQVRBXzQzMDk3MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUk1fRVJSQVRBXzQ1ODY5MyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUk1fRVJSQVRBXzQ2MDA3NSBpcyBub3Qgc2V0CitDT05GSUdfQVJNX0dJQz15CiBDT05GSUdfQ09NTU9OX0NMS0RFVj15CiAKICMKQEAgLTI4Nyw2ICszNTIsNyBAQAogQ09ORklHX05PX0haPXkKIENPTkZJR19ISUdIX1JFU19USU1FUlM9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKIENPTkZJR19WTVNQTElUXzNHPXkKICMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAogIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CkBAIC0yOTgsNiArMzY0LDcgQEAKICMgQ09ORklHX1RIVU1CMl9LRVJORUwgaXMgbm90IHNldAogQ09ORklHX0FFQUJJPXkKIENPTkZJR19PQUJJX0NPTVBBVD15CitDT05GSUdfQVJDSF9IQVNfSE9MRVNfTUVNT1JZTU9ERUw9eQogIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAogIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CkBAIC0zMDgsMTIgKzM3NSwxMCBAQAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz05OTk5OTkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19MRURTPXkKQEAgLTUwOSwxNSArNTc0LDE4IEBACiAjIENPTkZJR19CVF9NUlZMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CitDT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19XRVhUX0NPUkU9eQorQ09ORklHX1dFWFRfUFJPQz15CitDT05GSUdfV0VYVF9TUFk9eQogQ09ORklHX0NGRzgwMjExPXkKICMgQ09ORklHX05MODAyMTFfVEVTVE1PREUgaXMgbm90IHNldAogIyBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QUz15Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0xCiAjIENPTkZJR19DRkc4MDIxMV9ERUJVR0ZTIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKK0NPTkZJR19DRkc4MDIxMV9XRVhUPXkKIENPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogQ09ORklHX0xJQjgwMjExPXkKICMgQ09ORklHX0xJQjgwMjExX0RFQlVHIGlzIG5vdCBzZXQKQEAgLTY3MSw2ICs3MzksNyBAQAogIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0xPT1A9eQogIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRFJCRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CkBAIC02ODEsOSArNzUwLDEyIEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTTDI5MDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19USV9EQUM3NTEyIGlzIG5vdCBzZXQKICMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTY5NCw2ICs3NjYsNyBAQAogQ09ORklHX0VFUFJPTV9MRUdBQ1k9eQogIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTUMzMjAwVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC03OTIsMjggKzg2NSwyNiBAQAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19ORVRERVZfMTAwMDA9eQogQ09ORklHX1dMQU49eQotIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfV0xBTl84MDIxMT15Ci1DT05GSUdfTElCRVJUQVM9eQotQ09ORklHX0xJQkVSVEFTX1VTQj15Ci1DT05GSUdfTElCRVJUQVNfU0RJTz15Ci0jIENPTkZJR19MSUJFUlRBU19TUEkgaXMgbm90IHNldAotQ09ORklHX0xJQkVSVEFTX0RFQlVHPXkKICMgQ09ORklHX0xJQkVSVEFTX1RISU5GSVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUNzZDNTBYX1VTQiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9ORVRfUk5ESVNfV0xBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVEw4MTg3IGlzIG5vdCBzZXQKICMgQ09ORklHX01BQzgwMjExX0hXU0lNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1A1NF9DT01NT04gaXMgbm90IHNldAogIyBDT05GSUdfQVRIX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogIyBDT05GSUdfQjQzIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0M0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorIyBDT05GSUdfSVdNIGlzIG5vdCBzZXQKK0NPTkZJR19MSUJFUlRBUz15CitDT05GSUdfTElCRVJUQVNfVVNCPXkKK0NPTkZJR19MSUJFUlRBU19TRElPPXkKKyMgQ09ORklHX0xJQkVSVEFTX1NQSSBpcyBub3Qgc2V0CitDT05GSUdfTElCRVJUQVNfREVCVUc9eQorIyBDT05GSUdfUDU0X0NPTU1PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVDJYMDAgaXMgbm90IHNldAogIyBDT05GSUdfV0wxMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lXTSBpcyBub3Qgc2V0CisjIENPTkZJR19aRDEyMTFSVyBpcyBub3Qgc2V0CiAKICMKICMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycwpAQCAtODYxLDYgKzkzMiw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTg4OSw2ICs5NjEsNyBAQAogIyBDT05GSUdfS0VZQk9BUkRfT1BFTkNPUkVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX1NVTktCRCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PTUFQIGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9UV0w0MDMwPXkKICMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CkBAIC05MTQsNiArOTg3LDcgQEAKICMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRFlOQVBSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldApAQCAtOTQ4LDYgKzEwMjIsNyBAQAogQ09ORklHX1NFUklPX1NFUlBPUlQ9eQogQ09ORklHX1NFUklPX0xJQlBTMj15CiAjIENPTkZJR19TRVJJT19SQVcgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fQUxURVJBX1BTMiBpcyBub3Qgc2V0CiAjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CiAKICMKQEAgLTk4Niw2ICsxMDYxLDcgQEAKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKICMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET01fT01BUD15CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldApAQCAtMTAyNCw3ICsxMTAwLDYgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKQEAgLTEwNDAsNiArMTExNSw4IEBACiAjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfR1BJTyBpcyBub3Qgc2V0CiBDT05GSUdfU1BJX09NQVAyNFhYPXkKKyMgQ09ORklHX1NQSV9YSUxJTlggaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0RFU0lHTldBUkUgaXMgbm90IHNldAogCiAjCiAjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCkBAIC0xMDY3LDYgKzExNDQsNyBAQAogIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CiBDT05GSUdfR1BJT19UV0w0MDMwPXkKKyMgQ09ORklHX0dQSU9fQURQNTU4OCBpcyBub3Qgc2V0CiAKICMKICMgUENJIEdQSU8gZXhwYW5kZXJzOgpAQCAtMTE0MSw2ICsxMjE5LDcgQEAKICMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CkBAIC0xMTY2LDYgKzEyNDUsNyBAQAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BTUM2ODIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKQEAgLTExNzksNiArMTI1OSw3IEBACiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTElTM19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKIENPTkZJR19XQVRDSERPRz15CiBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQ9eQpAQCAtMTIwNCwyMCArMTI4NSwyMiBAQAogIwogIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCiAjCi0jIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfTUZEX0NPUkU9eQogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRU5FTEFVUyBpcyBub3Qgc2V0CiBDT05GSUdfVFdMNDAzMF9DT1JFPXkKICMgQ09ORklHX1RXTDQwMzBfUE9XRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFdMNDAzMF9DT0RFQyBpcyBub3Qgc2V0CitDT05GSUdfVFdMNDAzMF9DT0RFQz15CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldApAQCAtMTIyNSw2ICsxMzA4LDggQEAKICMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SPXkKICMgQ09ORklHX1JFR1VMQVRPUl9ERUJVRyBpcyBub3Qgc2V0CiBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0U9eQpAQCAtMTIzMiw2ICsxMzE3LDcgQEAKICMgQ09ORklHX1JFR1VMQVRPUl9VU0VSU1BBQ0VfQ09OU1VNRVIgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SX0JRMjQwMjIgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SX01BWDE1ODYgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX01BWDg2NjAgaXMgbm90IHNldAogQ09ORklHX1JFR1VMQVRPUl9UV0w0MDMwPXkKICMgQ09ORklHX1JFR1VMQVRPUl9MUDM5NzEgaXMgbm90IHNldAogIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDIzIGlzIG5vdCBzZXQKQEAgLTEyNjcsNiArMTM1Myw3IEBACiAjCiAjIENPTkZJR19GQl9VVkVTQSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9UTUlPIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAogIyBDT05GSUdfRkJfTUVUUk9OT01FIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX01CODYyWFggaXMgbm90IHNldApAQCAtMTI4MSw2ICsxMzY4LDcgQEAKICMgQ09ORklHX0ZCX09NQVBfTENEX01JUElEIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZCX09NQVBfQk9PVExPQURFUl9JTklUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9PTUFQX0NPTlNJU1RFTlRfRE1BX1NJWkU9MgorIyBDT05GSUdfT01BUDJfRFNTIGlzIG5vdCBzZXQKIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQogQ09ORklHX0xDRF9DTEFTU19ERVZJQ0U9eQogIyBDT05GSUdfTENEX0xNUzI4M0dGMDUgaXMgbm90IHNldApAQCAtMTM2NCwxMiArMTQ1MiwxNSBAQAogQ09ORklHX1NORF9TT0M9eQogQ09ORklHX1NORF9PTUFQX1NPQz15CiBDT05GSUdfU05EX09NQVBfU09DX01DQlNQPXkKKyMgQ09ORklHX1NORF9PTUFQX1NPQ19OODEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9PTUFQX1NPQ19PVkVSTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfT01BUF9TT0NfT01BUDNFVk0gaXMgbm90IHNldAorIyBDT05GSUdfU05EX09NQVBfU09DX0FNMzUxN0VWTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfT01BUF9TT0NfU0RQMzQzMCBpcyBub3Qgc2V0CiBDT05GSUdfU05EX09NQVBfU09DX09NQVAzX1BBTkRPUkE9eQogIyBDT05GSUdfU05EX09NQVBfU09DX09NQVAzX0JFQUdMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTkRfT01BUF9TT0NfWk9PTTIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09NQVBfU09DX0lHRVAwMDIwIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU09DX0kyQ19BTkRfU1BJPXkKICMgQ09ORklHX1NORF9TT0NfQUxMX0NPREVDUyBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NPQ19UV0w0MDMwPXkKQEAgLTE0MTgsNyArMTUwOSw3IEBACiBDT05GSUdfVVNCX1NVUFBPUlQ9eQogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQl9BUkNIX0hBU19FSENJIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CiBDT05GSUdfVVNCPXkKIENPTkZJR19VU0JfREVCVUc9eQogQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CkBAIC0xNDQxLDYgKzE1MzIsNyBAQAogIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKICMKICMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldApAQCAtMTU1NiwxNiArMTY0OCwxOCBAQAogIyBDT05GSUdfVVNCX0dBREdFVF9MQU5HV0VMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0RVTU1ZX0hDRCBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQ9eQotQ09ORklHX1VTQl9aRVJPPXkKK0NPTkZJR19VU0JfWkVSTz1tCiAjIENPTkZJR19VU0JfWkVST19ITlBURVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfRklMRV9TVE9SQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NQVNTX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HX01VTFRJIGlzIG5vdCBzZXQKIAogIwogIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKQEAgLTE1NzMsNiArMTY2Nyw3IEBACiBDT05GSUdfVVNCX09UR19VVElMUz15CiAjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVUxQSSBpcyBub3Qgc2V0CiBDT05GSUdfVFdMNDAzMF9VU0I9eQogQ09ORklHX05PUF9VU0JfWENFSVY9eQogQ09ORklHX01NQz15CkBAIC0xNjA5LDcgKzE3MDQsOSBAQAogIyBDT05GSUdfTEVEU19MUDM5NDQgaXMgbm90IHNldAogIyBDT05GSUdfTEVEU19QQ0E5NTVYIGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfREFDMTI0UzA4NSBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1JFR1VMQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0xUMzU5MyBpcyBub3Qgc2V0CiAKICMKICMgTEVEIFRyaWdnZXJzCkBAIC0xNjUzLDYgKzE3NTAsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRMzJLIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX1RXTDQwMzA9eQogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKQEAgLTE2ODMsNyArMTc4MSw5IEBACiAjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01TTTYyNDIgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9CUTQ4MDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUDVDMDEgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9WMzAyMCBpcyBub3Qgc2V0CiAKICMKQEAgLTE5NTEsNiArMjA1MSw3IEBACiAjIENPTkZJR19MS0RUTSBpcyBub3Qgc2V0CiAjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAogIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CiBDT05GSUdfTk9QX1RSQUNFUj15CiBDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQpAQCAtMTk4Myw3ICsyMDg0LDkgQEAKICMgQ09ORklHX0RFQlVHX0VSUk9SUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ19FVE0gaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTE5OTMsOSArMjA5NiwxMiBAQAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFQ1VSSVRZX1BBVEggaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFlfUk9PVFBMVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZXZtX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfZXZtX2RlZmNvbmZpZwppbmRleCA4NmNjNGJlLi5lMmFkODU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29tYXAzX2V2bV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19ldm1fZGVmY29uZmlnCkBAIC0xODcsNiArMTg3LDggQEAKICMKICMgT01BUCBGZWF0dXJlIFNlbGVjdGlvbnMKICMKK0NPTkZJR19PTUFQX1NNQVJUUkVGTEVYPXkKKyMgQ09ORklHX09NQVBfU01BUlRSRUZMRVhfVEVTVElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUFQX0RFQlVHX1BPV0VSRE9NQUlOIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfREVCVUdfQ0xPQ0tET01BSU4gaXMgbm90IHNldAogQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTPXkKQEAgLTMzMyw3ICszMzUsNyBAQAogIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKICMKIENPTkZJR19QTT15Ci0jIENPTkZJR19QTV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUE1fREVCVUc9eQogQ09ORklHX1BNX1NMRUVQPXkKIENPTkZJR19TVVNQRU5EPXkKIENPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQpAQCAtMTMzOSw3ICsxMzQxLDcgQEAKIENPTkZJR19GUkFNRV9XQVJOPTEwMjQKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfRlM9eQogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKICMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXAzX3BhbmRvcmFfZGVmY29uZmlnCmluZGV4IGY3NGViOWEuLjVkMDhlMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcDNfcGFuZG9yYV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9vbWFwM19wYW5kb3JhX2RlZmNvbmZpZwpAQCAtMSwxNSArMSwxNCBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI4LXJjNwotIyBGcmkgRGVjICA1IDExOjU0OjA5IDIwMDgKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzYKKyMgU2F0IEZlYiAgNiAyMDoyNTo0MSAyMDEwCiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CiBDT05GSUdfR0VORVJJQ19HUElPPXkKIENPTkZJR19HRU5FUklDX1RJTUU9eQogQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFM9eQotQ09ORklHX01NVT15Ci0jIENPTkZJR19OT19JT1BPUlQgaXMgbm90IHNldAorQ09ORklHX0hBVkVfUFJPQ19DUFU9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQogQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CiBDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQpAQCAtMTgsMTMgKzE3LDEzIEBACiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hBU19DUFVGUkVRPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzIsOCArMzEsMTUgQEAKIENPTkZJR19FWFBFUklNRU5UQUw9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0NST1NTX0NPTVBJTEU9IiIKIENPTkZJR19MT0NBTFZFUlNJT049IiIKIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiBDT05GSUdfU1lTVklQQ19TWVNDVEw9eQpAQCAtNDIsMjQgKzQ4LDMzIEBACiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKICMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKIENPTkZJR19JS0NPTkZJRz15CiBDT05GSUdfSUtDT05GSUdfUFJPQz15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0Ci1DT05GSUdfR1JPVVBfU0NIRUQ9eQotQ09ORklHX0ZBSVJfR1JPVVBfU0NIRUQ9eQotIyBDT05GSUdfUlRfR1JPVVBfU0NIRUQgaXMgbm90IHNldAotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkgaXMgbm90IHNldAotCisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKIENPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CisjIENPTkZJR19SRF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JEX0xaTyBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogQ09ORklHX0VNQkVEREVEPXkKIENPTkZJR19VSUQxNj15CiAjIENPTkZJR19TWVNDVExfU1lTQ0FMTCBpcyBub3Qgc2V0CkBAIC03MCwzMSArODUsNDEgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorQ09ORklHX0hBVkVfUEVSRl9FVkVOVFM9eQorQ09ORklHX1BFUkZfVVNFX1ZNQUxMT0M9eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCisjIENPTkZJR19QRVJGX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19QRVJGX0NPVU5URVJTIGlzIG5vdCBzZXQKIENPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfQ09NUEFUX0JSSz15CiBDT05GSUdfU0xBQj15CiAjIENPTkZJR19TTFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfT1BST0ZJTEU9eQogIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9LUFJPQkVTPXkKIENPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQogQ09ORklHX0hBVkVfQ0xLPXkKKworIworIyBHQ09WLWJhc2VkIGtlcm5lbCBwcm9maWxpbmcKKyMKK0NPTkZJR19TTE9XX1dPUks9eQogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogQ09ORklHX01PRFVMRVM9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX0xPQUQgaXMgbm90IHNldApAQCAtMTAyLDExICsxMjcsOCBAQAogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiBDT05GSUdfTU9EVkVSU0lPTlM9eQogQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci1DT05GSUdfS01PRD15CiBDT05GSUdfQkxPQ0s9eQotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTExNCwzMyArMTM2LDYyIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLUNPTkZJR19ERUZBVUxUX0FTPXkKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAotIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi1DT05GSUdfQ0xBU1NJQ19SQ1U9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DSz15CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlE9eQorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0s9eQorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKK0NPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRPXkKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAogCiAjCiAjIFN5c3RlbSBUeXBlCiAjCitDT05GSUdfTU1VPXkKICMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CkBAIC0xNDgsNDkgKzE5OSw1OCBAQAogIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlVDOTNYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzVQNjQ0MCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQPXkKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKIAogIwogIyBUSSBPTUFQIEltcGxlbWVudGF0aW9ucwogIwogQ09ORklHX0FSQ0hfT01BUF9PVEc9eQogIyBDT05GSUdfQVJDSF9PTUFQMSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9PTUFQMlBMVVM9eQogIyBDT05GSUdfQVJDSF9PTUFQMiBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9PTUFQMz15CisjIENPTkZJR19BUkNIX09NQVA0IGlzIG5vdCBzZXQKIAogIwogIyBPTUFQIEZlYXR1cmUgU2VsZWN0aW9ucwogIwotIyBDT05GSUdfT01BUF9ERUJVR19QT1dFUkRPTUFJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX0RFQlVHX0NMT0NLRE9NQUlOIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTIGlzIG5vdCBzZXQKICMgQ09ORklHX09NQVBfTVVYIGlzIG5vdCBzZXQKIENPTkZJR19PTUFQX01DQlNQPXkKKyMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldAogQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKIENPTkZJR19PTUFQXzMyS19USU1FUl9IWj0xMjgKIENPTkZJR19PTUFQX0RNX1RJTUVSPXkKLSMgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDEgaXMgbm90IHNldAotIyBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMiBpcyBub3Qgc2V0Ci1DT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMz15Ci1DT05GSUdfQVJDSF9PTUFQMzRYWD15CisjIENPTkZJR19PTUFQX1BNX05PTkUgaXMgbm90IHNldAorQ09ORklHX09NQVBfUE1fTk9PUD15CiBDT05GSUdfQVJDSF9PTUFQMzQzMD15CitDT05GSUdfT01BUF9QQUNLQUdFX0NCQj15CiAKICMKICMgT01BUCBCb2FyZCBUeXBlCkBAIC0xOTgsMTUgKzI1OCwxOSBAQAogIyBDT05GSUdfTUFDSF9PTUFQM19CRUFHTEUgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9PTUFQX0xEUCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX09WRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT01BUDNFVk0gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PTUFQMzUxN0VWTSBpcyBub3Qgc2V0CiBDT05GSUdfTUFDSF9PTUFQM19QQU5ET1JBPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLQotIwotIyBQb3dlciBtYW5hZ2VtZW50Ci0jCisjIENPTkZJR19NQUNIX09NQVAzX1RPVUNIQk9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX09NQVBfMzQzMFNEUCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX05PS0lBX1JYNTEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9PTUFQX1pPT00yIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT01BUF9aT09NMyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NNX1QzNSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0lHRVAwMDIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfT01BUF8zNjMwU0RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NQVAzX0VNVSBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQM19TRFJDX0FDX1RJTUlORyBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIFR5cGUKQEAgLTIxNSw3ICsyNzksNyBAQAogQ09ORklHX0NQVV9WNz15CiBDT05GSUdfQ1BVXzMydjc9eQogQ09ORklHX0NQVV9BQlJUX0VWNz15Ci1DT05GSUdfQ1BVX1BBQlJUX0lGQVI9eQorQ09ORklHX0NQVV9QQUJSVF9WNz15CiBDT05GSUdfQ1BVX0NBQ0hFX1Y3PXkKIENPTkZJR19DUFVfQ0FDSEVfVklQVD15CiBDT05GSUdfQ1BVX0NPUFlfVjY9eQpAQCAtMjMzLDcgKzI5NywxMiBAQAogIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKIENPTkZJR19IQVNfVExTX1JFRz15Ci0jIENPTkZJR19PVVRFUl9DQUNIRSBpcyBub3Qgc2V0CitDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTYKK0NPTkZJR19DUFVfSEFTX1BNVT15CisjIENPTkZJR19BUk1fRVJSQVRBXzQzMDk3MyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fRVJSQVRBXzQ1ODY5MyBpcyBub3Qgc2V0CisjIENPTkZJR19BUk1fRVJSQVRBXzQ2MDA3NSBpcyBub3Qgc2V0CitDT05GSUdfQ09NTU9OX0NMS0RFVj15CiAKICMKICMgQnVzIHN1cHBvcnQKQEAgLTI1MywxMyArMzIyLDE2IEBACiAjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAogQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlk9eQogIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CiBDT05GSUdfSFo9MTI4CisjIENPTkZJR19USFVNQjJfS0VSTkVMIGlzIG5vdCBzZXQKIENPTkZJR19BRUFCST15CiBDT05GSUdfT0FCSV9DT01QQVQ9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQogIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CkBAIC0yNjgsMTMgKzM0MCwxNCBAQAogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQogQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKLSMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfWk9ORV9ETUFfRkxBRz0wCiBDT05GSUdfVklSVF9UT19CVVM9eQotQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CisjIENPTkZJR19LU00gaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfTU1BUF9NSU5fQUREUj00MDk2CiAjIENPTkZJR19MRURTIGlzIG5vdCBzZXQKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKIAogIwogIyBCb290IG9wdGlvbnMKQEAgLTM2Niw2ICs0MzksNyBAQAogIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAogIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAogIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVE0gaXMgbm90IHNldAogIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKQEAgLTM3OSw3ICs0NTMsMTAgQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKICMKICMgTmV0d29yayB0ZXN0aW5nCkBAIC0zOTAsOCArNDY3LDE0IEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XSVJFTEVTUyBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1M9eQorIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorCisjCisjIENGRzgwMjExIG5lZWRzIHRvIGJlIGVuYWJsZWQgZm9yIE1BQzgwMjExCisjCisjIENPTkZJR19XSU1BWCBpcyBub3Qgc2V0CiAjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKIApAQCAtNDAzLDYgKzQ4Niw4IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCitDT05GSUdfREVWVE1QRlM9eQorQ09ORklHX0RFVlRNUEZTX01PVU5UPXkKIENPTkZJR19TVEFOREFMT05FPXkKIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKICMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CkBAIC00MTIsNiArNDk3LDcgQEAKICMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CiBDT05GSUdfTVREPXkKICMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CiBDT05GSUdfTVREX1BBUlRJVElPTlM9eQogIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldApAQCAtNDYyLDYgKzU0OCw3IEBACiAjCiAjIENPTkZJR19NVERfREFUQUZMQVNIIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NMjVQODAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NTVDI1TCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldApAQCAtNDc4LDYgKzU2NSw5IEBACiAjIENPTkZJR19NVERfTkFORF9FQ0NfU01DIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX01VU0VVTV9JRFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX05BTkRfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfT01BUDI9eQorQ09ORklHX01URF9OQU5EX09NQVBfUFJFRkVUQ0g9eQorIyBDT05GSUdfTVREX05BTkRfT01BUF9QUkVGRVRDSF9ETUEgaXMgbm90IHNldAogQ09ORklHX01URF9OQU5EX0lEUz15CiAjIENPTkZJR19NVERfTkFORF9ESVNLT05DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9OQU5EX05BTkRTSU0gaXMgbm90IHNldApAQCAtNDg2LDYgKzU3NiwxMSBAQAogIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAogCiAjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorCisjCiAjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcwogIwogIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CkBAIC00OTQsNiArNTg5LDEwIEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfUkFNPXkKQEAgLTUwMiw3ICs2MDEsMjUgQEAKICMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfQUQ1MjVYX0RQT1QgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVNMMjkwMDMgaXMgbm90IHNldAorIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfSVdNQzMyMDBUT1AgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKICMgQ09ORklHX0lERSBpcyBub3Qgc2V0CiAKQEAgLTUyNSwxMCArNjQyLDYgQEAKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCiAjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldApAQCAtNTQ1LDggKzY1OCwxMSBAQAogIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0lfTE9XTEVWRUw9eQogIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQpAQCAtNTU5LDEzICs2NzUsMTMgQEAKICMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAogCiAjCi0jIFdpcmVsZXNzIExBTgorIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCiAjCi0jIENPTkZJR19XTEFOX1BSRTgwMjExIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dMQU5fODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfSVdMV0lGSV9MRURTIGlzIG5vdCBzZXQKIAogIwogIyBVU0IgTmV0d29yayBBZGFwdGVycwpAQCAtNTgyLDYgKzY5OCw3IEBACiAjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKICMKICMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKQEAgLTU4OSw2ICs3MDYsNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC02MDUsMTMgKzcyMywyMCBAQAogIyBJbnB1dCBEZXZpY2UgRHJpdmVycwogIwogQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAogIyBDT05GSUdfS0VZQk9BUkRfQVRLQkQgaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9YVEtCRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9ORVdUT04gaXMgbm90IHNldAotIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAogQ09ORklHX0tFWUJPQVJEX0dQSU89eQorIyBDT05GSUdfS0VZQk9BUkRfTUFUUklYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX0xNODMyMyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKK0NPTkZJR19LRVlCT0FSRF9UV0w0MDMwPXkKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiAjIENPTkZJR19NT1VTRV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfU0VSSUFMIGlzIG5vdCBzZXQKQEAgLTYxOSwxMyArNzQ0LDIyIEBACiAjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQogQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDY9eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OV9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRFlOQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FRVRJIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01DUzUwMDAgaXMgbm90IHNldAogIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CkBAIC02MzQsOCArNzY4LDE4IEBACiAjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CiAjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XOTBYOTAwIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NSVNDPXkKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAogQ09ORklHX0lOUFVUX1RXTDQwMzBfUFdSQlVUVE9OPXkKKyMgQ09ORklHX0lOUFVUX1VJTlBVVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9HUElPX1JPVEFSWV9FTkNPREVSIGlzIG5vdCBzZXQKIAogIwogIyBIYXJkd2FyZSBJL08gcG9ydHMKQEAgLTY3MCwxOCArODE0LDIxIEBACiAjCiAjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKICMKKyMgQ09ORklHX1NFUklBTF9NQVgzMTAwIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfQ09SRT15CiBDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CiBDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAogQ09ORklHX0hXX1JBTkRPTT15Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogQ09ORklHX0kyQz15CiBDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CiBDT05GSUdfSTJDX0NIQVJERVY9eQogQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CiAKQEAgLTY5MiwxMCArODM5LDEyIEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX09NQVA9eQogIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfWElMSU5YIGlzIG5vdCBzZXQKIAogIwogIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCkBAIC03MDksMjEgKzg1OCw2IEBACiAjCiAjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfSVNQMTMwMV9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CkBAIC03MzYsMTQgKzg3MCwyMSBAQAogIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfU1BJX0JJVEJBTkcgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX0dQSU8gaXMgbm90IHNldAogQ09ORklHX1NQSV9PTUFQMjRYWD15CisjIENPTkZJR19TUElfWElMSU5YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKIAogIwogIyBTUEkgUHJvdG9jb2wgTWFzdGVycwogIwotIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAogIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CiAjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQogIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CkBAIC03NjAsNiArOTAxLDcgQEAKICMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAogQ09ORklHX0dQSU9fVFdMNDAzMD15CisjIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAogCiAjCiAjIFBDSSBHUElPIGV4cGFuZGVyczoKQEAgLTc3MCwxMSArOTEyLDE2IEBACiAjCiAjIENPTkZJR19HUElPX01BWDczMDEgaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19NQ1AyM1MwOCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DMzM4ODAgaXMgbm90IHNldAorCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAogIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfQUxTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAotIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIApAQCAtNzg2LDQ0ICs5MzMsMTExIEBACiAjCiAjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKICMKLSMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19NRkRfQ09SRT15CisjIENPTkZJR19NRkRfODhQTTg2MFggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfSTJDUExEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKIENPTkZJR19UV0w0MDMwX0NPUkU9eQorQ09ORklHX1RXTDQwMzBfUE9XRVI9eQorQ09ORklHX1RXTDQwMzBfQ09ERUM9eQogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0FEUDU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX01BWDg5MjUgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzFYIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKLQotIwotIyBNdWx0aW1lZGlhIGRyaXZlcnMKLSMKLUNPTkZJR19EQUI9eQotIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004OTk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19FWlhfUENBUCBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SPXkKK0NPTkZJR19SRUdVTEFUT1JfREVCVUc9eQorIyBDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0UgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTUFYODY0OSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTUFYODY2MCBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SX1RXTDQwMzA9eQorIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwMjMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKICMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9eQorQ09ORklHX0ZCPXkKKyMgQ09ORklHX0ZJUk1XQVJFX0VESUQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRERDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JPT1RfVkVTQV9TVVBQT1JUIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9DRkJfRklMTFJFQ1Q9eQorQ09ORklHX0ZCX0NGQl9DT1BZQVJFQT15CitDT05GSUdfRkJfQ0ZCX0lNQUdFQkxJVD15CisjIENPTkZJR19GQl9DRkJfUkVWX1BJWEVMU19JTl9CWVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GT1JFSUdOX0VORElBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRk9QUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TVkdBTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01BQ01PREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JBQ0tMSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NT0RFX0hFTFBFUlMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WSVJUVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX01FVFJPTk9NRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQjg2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0JST0FEU0hFRVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfT01BUF9CT09UTE9BREVSX0lOSVQgaXMgbm90IHNldAorQ09ORklHX09NQVAyX1ZSQU09eQorQ09ORklHX09NQVAyX1ZSRkI9eQorQ09ORklHX09NQVAyX0RTUz15CitDT05GSUdfT01BUDJfVlJBTV9TSVpFPTAKK0NPTkZJR19PTUFQMl9EU1NfREVCVUdfU1VQUE9SVD15CisjIENPTkZJR19PTUFQMl9EU1NfQ09MTEVDVF9JUlFfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfT01BUDJfRFNTX1JGQkkgaXMgbm90IHNldAorQ09ORklHX09NQVAyX0RTU19WRU5DPXkKKyMgQ09ORklHX09NQVAyX0RTU19TREkgaXMgbm90IHNldAorIyBDT05GSUdfT01BUDJfRFNTX0RTSSBpcyBub3Qgc2V0CisjIENPTkZJR19PTUFQMl9EU1NfRkFLRV9WU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfT01BUDJfRFNTX01JTl9GQ0tfUEVSX1BDSz0wCitDT05GSUdfRkJfT01BUDI9eQorQ09ORklHX0ZCX09NQVAyX0RFQlVHX1NVUFBPUlQ9eQorIyBDT05GSUdfRkJfT01BUDJfRk9SQ0VfQVVUT19VUERBVEUgaXMgbm90IHNldAorQ09ORklHX0ZCX09NQVAyX05VTV9GQlM9MworCisjCisjIE9NQVAyLzMgRGlzcGxheSBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfUEFORUxfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19QQU5FTF9TSEFSUF9MUzAzN1Y3RFcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19QQU5FTF9TSEFSUF9MUTA0M1QxREcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19QQU5FTF9UT1BQT0xZX1RETzM1UyBpcyBub3Qgc2V0CitDT05GSUdfUEFORUxfVFBPX1REMDQzTVRFQTE9eQorQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVD15CisjIENPTkZJR19MQ0RfQ0xBU1NfREVWSUNFIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfQ0xBU1NfREVWSUNFPXkKK0NPTkZJR19CQUNLTElHSFRfR0VORVJJQz15CiAKICMKICMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydApAQCAtODM1LDYgKzEwNDksMTYgQEAKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CitDT05GSUdfTE9HT19MSU5VWF9NT05PPXkKK0NPTkZJR19MT0dPX0xJTlVYX1ZHQTE2PXkKK0NPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQ9eQogQ09ORklHX1NPVU5EPXkKIENPTkZJR19TT1VORF9PU1NfQ09SRT15CiBDT05GSUdfU09VTkRfT1NTX0NPUkVfUFJFQ0xBSU09eQpAQCAtODQyLDI1ICsxMDY2LDQzIEBACiBDT05GSUdfU05EX1RJTUVSPXkKIENPTkZJR19TTkRfUENNPXkKIENPTkZJR19TTkRfSkFDSz15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfT1NTRU1VTD15CiBDT05GSUdfU05EX01JWEVSX09TUz15CiBDT05GSUdfU05EX1BDTV9PU1M9eQogQ09ORklHX1NORF9QQ01fT1NTX1BMVUdJTlM9eQorIyBDT05GSUdfU05EX0hSVElNRVIgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKIENPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQogQ09ORklHX1NORF9WRVJCT1NFX1BSSU5USz15CisjIENPTkZJR19TTkRfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1JBV01JRElfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9PUEwzX0xJQl9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDRfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0JBV0VfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9FTVUxMEsxX1NFUSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX0RSSVZFUlM9eQorIyBDT05GSUdfU05EX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NVFBBViBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfU0VSSUFMX1UxNjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVBVNDAxIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQVJNPXkKK0NPTkZJR19TTkRfU1BJPXkKIENPTkZJR19TTkRfVVNCPXkKKyMgQ09ORklHX1NORF9VU0JfQVVESU8gaXMgbm90IHNldAorIyBDT05GSUdfU05EX1VTQl9VQTEwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVVNCX0NBSUFRIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU09DPXkKIENPTkZJR19TTkRfT01BUF9TT0M9eQogQ09ORklHX1NORF9PTUFQX1NPQ19NQ0JTUD15CiBDT05GSUdfU05EX09NQVBfU09DX09NQVAzX1BBTkRPUkE9eQogQ09ORklHX1NORF9TT0NfSTJDX0FORF9TUEk9eQorIyBDT05GSUdfU05EX1NPQ19BTExfQ09ERUNTIGlzIG5vdCBzZXQKIENPTkZJR19TTkRfU09DX1RXTDQwMzA9eQotCisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci0jIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKIAogIwpAQCAtODczLDMxICsxMTE1LDQwIEBACiAjCiAjIFNwZWNpYWwgSElEIGRyaXZlcnMKICMKLSMgQ09ORklHX0hJRF9DT01QQVQgaXMgbm90IHNldAorIyBDT05GSUdfSElEXzNNX1BDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfQTRURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9BUFBMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfQkVMS0lOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hJRF9CUklHSFQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX0NIRVJSWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfQ0hJQ09OWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfQ1lQUkVTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISURfREVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRFJBR09OUklTRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfRVpLRVkgaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tZRSBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfR1lSQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RXSU5IQU4gaXMgbm90IHNldAorIyBDT05GSUdfSElEX0tFTlNJTkdUT04gaXMgbm90IHNldAogIyBDT05GSUdfSElEX0xPR0lURUNIIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9NSUNST1NPRlQgaXMgbm90IHNldAogIyBDT05GSUdfSElEX01PTlRFUkVZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9OVFJJRyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfT1JURUsgaXMgbm90IHNldAogIyBDT05GSUdfSElEX1BBTlRIRVJMT1JEIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9QRVRBTFlOWCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfUVVBTlRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TQU1TVU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVEFOVFVNIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJRF9TVU5QTFVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfR1JFRU5BU0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TTUFSVEpPWVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RIUlVTVE1BU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfWkVST1BMVVMgaXMgbm90IHNldAogQ09ORklHX1VTQl9TVVBQT1JUPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogQ09ORklHX1VTQj15CiAjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKQEAgLTkxMSw3ICsxMTYyLDcgQEAKICMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19XSElURUxJU1QgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX09UR19CTEFDS0xJU1RfSFVCIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9NT04gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CiAKQEAgLTkxOSw3ICsxMTcwLDEzIEBACiAjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycwogIwogIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9FSENJX0hDRD15CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9UVF9ORVdTQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1hVMjEwSFBfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTc2MF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDEzNjJfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9PSENJX0hDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldApAQCAtOTMwLDExICsxMTg3LDEwIEBACiAjCiAjIE9NQVAgMzQzeCBoaWdoIHNwZWVkIFVTQiBzdXBwb3J0CiAjCi1DT05GSUdfVVNCX01VU0JfSE9TVD15Ci0jIENPTkZJR19VU0JfTVVTQl9QRVJJUEhFUkFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0hPU1QgaXMgbm90IHNldAorQ09ORklHX1VTQl9NVVNCX1BFUklQSEVSQUw9eQogIyBDT05GSUdfVVNCX01VU0JfT1RHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDIGlzIG5vdCBzZXQKLUNPTkZJR19VU0JfTVVTQl9IRFJDX0hDRD15CitDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkM9eQogIyBDT05GSUdfTVVTQl9QSU9fT05MWSBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0lOVkVOVFJBX0RNQT15CiAjIENPTkZJR19VU0JfVElfQ1BQSV9ETUEgaXMgbm90IHNldApAQCAtOTQ5LDExICsxMjA1LDExIEBACiAjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKIAogIwotIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5CiAjCiAKICMKLSMgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mb3JtYXRpb24KKyMgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm8KICMKICMgQ09ORklHX1VTQl9TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CkBAIC05NzksMTQgKzEyMzUsMTMgQEAKICMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKQEAgLTEwMDIsMjcgKzEyNTcsNDYgQEAKICMgQ09ORklHX1VTQl9HQURHRVRfQVRNRUxfVVNCQSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9VU0IyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0Ci1DT05GSUdfVVNCX0dBREdFVF9PTUFQPXkKLUNPTkZJR19VU0JfT01BUD15CisjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX1MzQ19IU09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0lNWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9NNjY1OTIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9BTUQ1NTM2VURDIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfRlNMX1FFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfQ0kxM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX05FVDIyODAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9HT0tVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVRfTEFOR1dFTEwgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9EVU1NWV9IQ0QgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0dBREdFVF9EVUFMU1BFRUQgaXMgbm90IHNldAorQ09ORklHX1VTQl9HQURHRVRfRFVBTFNQRUVEPXkKICMgQ09ORklHX1VTQl9aRVJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVURJTyBpcyBub3Qgc2V0CiBDT05GSUdfVVNCX0VUSD15CiBDT05GSUdfVVNCX0VUSF9STkRJUz15CisjIENPTkZJR19VU0JfRVRIX0VFTSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUFTU19TVE9SQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HX1NFUklBTCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTUlESV9HQURHRVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfUFJJTlRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfQ0RDX0NPTVBPU0lURSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19OT0tJQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR19NVUxUSSBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCitDT05GSUdfVVNCX09UR19VVElMUz15CisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTUDEzMDFfT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVUxQSSBpcyBub3Qgc2V0CitDT05GSUdfVFdMNDAzMF9VU0I9eQorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKICMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CkBAIC0xMDQwLDE2ICsxMzE0LDQxIEBACiAjCiAjIENPTkZJR19NTUNfU0RIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX09NQVAgaXMgbm90IHNldAorQ09ORklHX01NQ19PTUFQX0hTPXkKKyMgQ09ORklHX01NQ19BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQ19BVE1FTE1DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUNfU1BJIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogQ09ORklHX05FV19MRURTPXkKIENPTkZJR19MRURTX0NMQVNTPXkKKworIworIyBMRUQgZHJpdmVycworIworIyBDT05GSUdfTEVEU19QQ0E5NTMyIGlzIG5vdCBzZXQKIENPTkZJR19MRURTX0dQSU89eQogQ09ORklHX0xFRFNfR1BJT19QTEFURk9STT15CisjIENPTkZJR19MRURTX0xQMzk0NCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1BDQTk1NVggaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19EQUMxMjRTMDg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfQkQyODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfTFQzNTkzIGlzIG5vdCBzZXQKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKIENPTkZJR19MRURTX1RSSUdHRVJTPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19UUklHR0VSX0dQSU8gaXMgbm90IHNldAogQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OPXkKIAorIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKIENPTkZJR19SVENfQ0xBU1M9eQogQ09ORklHX1JUQ19IQ1RPU1lTPXkKQEAgLTEwNzgsMTAgKzEzNzcsMTIgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9UV0w0MDMwPXkKICMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODAyNSBpcyBub3Qgc2V0CiAKICMKICMgU1BJIFJUQyBkcml2ZXJzCkBAIC0xMDkzLDYgKzEzOTQsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9SOTcwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1JTNUMzNDggaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9EUzMyMzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0YyMTIzIGlzIG5vdCBzZXQKIAogIwogIyBQbGF0Zm9ybSBSVEMgZHJpdmVycwpAQCAtMTEwNiwxOCArMTQwOCwyMiBAQAogIyBDT05GSUdfUlRDX0RSVl9NNDhUODYgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCiAjIG9uLUNQVSBSVEMgZHJpdmVycwogIwogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKICMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CiAKLUNPTkZJR19SRUdVTEFUT1I9eQotQ09ORklHX1JFR1VMQVRPUl9GSVhFRF9WT0xUQUdFPXkKLUNPTkZJR19SRUdVTEFUT1JfVFdMNDAzMD15CisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwogIyBGaWxlIHN5c3RlbXMKQEAgLTExMjYsMjEgKzE0MzIsMjcgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CiBDT05GSUdfSkJEPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotQ09ORklHX0ZJTEVfTE9DS0lORz15CiAjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQogQ09ORklHX0ROT1RJRlk9eQotQ09ORklHX0lOT1RJRlk9eQogQ09ORklHX0lOT1RJRllfVVNFUj15CitDT05GSUdfRkFOT1RJRlk9eQogQ09ORklHX1FVT1RBPXkKICMgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFIGlzIG5vdCBzZXQKIENPTkZJR19QUklOVF9RVU9UQV9XQVJOSU5HPXkKK0NPTkZJR19RVU9UQV9UUkVFPXkKICMgQ09ORklHX1FGTVRfVjEgaXMgbm90IHNldAogQ09ORklHX1FGTVRfVjI9eQogQ09ORklHX1FVT1RBQ1RMPXkKQEAgLTExNDksNiArMTQ2MSwxMSBAQAogIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CiAKICMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKQEAgLTExNzUsMTAgKzE0OTIsNyBAQAogIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIworQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQogIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CkBAIC0xMTg3LDcgKzE1MDEsOSBAQAogIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTExOTYsNyArMTUxMiwyMCBAQAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUV09SS19GSUxFU1lTVEVNUz15CisjIENPTkZJR19ORlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0VQSF9GUyBpcyBub3Qgc2V0CitDT05GSUdfQ0lGUz15CisjIENPTkZJR19DSUZTX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfV0VBS19QV19IQVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGU19FWFBFUklNRU5UQUwgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTEyNjksNiArMTU5OCw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtMTI3NywxMSArMTYwNywxNSBAQAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CkBAIC0xMjk5LDMzICsxNjMzLDQyIEBACiAjIENPTkZJR19ERUJVR19NRU1PUllfSU5JVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0FSQ0hfS0dEQj15CiAjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVU5XSU5EPXkKICMgQ09ORklHX0RFQlVHX1VTRVIgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtMTMzMywxOSArMTY3NiwyMiBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKICMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCiAjCi0jIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CiBDT05GSUdfQ1JZUFRPX0FMR0FQST15Ci1DT05GSUdfQ1JZUFRPX0FFQUQ9eQotQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fSEFTSD15Ci1DT05GSUdfQ1JZUFRPX1JORz15Ci1DT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CisjIENPTkZJR19DUllQVE9fTUFOQUdFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUFOQUdFUjIgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldApAQCAtMTM2MiwxMiArMTcwOCwxMiBAQAogIwogIyBCbG9jayBtb2RlcwogIwotQ09ORklHX0NSWVBUT19DQkM9eQorIyBDT05GSUdfQ1JZUFRPX0NCQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0VDQiBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKIAogIwpAQCAtMTM3NSwxMyArMTcyMSwxNSBAQAogIwogIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAogCiAjCiAjIERpZ2VzdAogIwotIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NSQzMyQz15CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JZUFRPX01ENT15CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldApAQCAtMTQwMyw3ICsxNzUxLDcgQEAKICMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKLUNPTkZJR19DUllQVE9fREVTPXkKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAogIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKQEAgLTE0MTYsMzMgKzE3NjQsMzMgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCiAjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgogIwogIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAotQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwogIwogQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CiBDT05GSUdfQ1JDX0NDSVRUPXkKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAogIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKIENPTkZJR19DUkMzMj15CiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKLUNPTkZJR19MSUJDUkMzMkM9eQotQ09ORklHX1BMSVNUPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15Ci0KLSMgYWRkZWQgYnkgaGFuZCBmb3Igbm93Ci1DT05GSUdfS0VZQk9BUkRfVFdMNDAzMD15Ci1DT05GSUdfVVNCX09UR19VVElMUz15Ci1DT05GSUdfVFdMNDAzMF9VU0I9eQotQ09ORklHX01NQ19PTUFQX0hTPXkKLQorQ09ORklHX05MQVRUUj15CisjIENPTkZJR19TSE1fU0lHTkFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPUSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29tYXBfNDQzMHNkcF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL29tYXBfNDQzMHNkcF9kZWZjb25maWcKaW5kZXggYzQ4ZDdiOC4uYTk2YmNhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwXzQ0MzBzZHBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF80NDMwc2RwX2RlZmNvbmZpZwpAQCAtMTk5LDcgKzE5OSw3IEBACiAjCiAjIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUFQX01VWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19PTUFQX01DQlNQIGlzIG5vdCBzZXQKK0NPTkZJR19PTUFQX01DQlNQPXkKICMgQ09ORklHX09NQVBfTUJPWF9GV0sgaXMgbm90IHNldAogIyBDT05GSUdfT01BUF9NUFVfVElNRVIgaXMgbm90IHNldAogQ09ORklHX09NQVBfMzJLX1RJTUVSPXkKQEAgLTMwNyw3ICszMDcsNyBAQAogIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0icm9vdD0vZGV2L3JhbTAgcncgbWVtPTEyOE0gY29uc29sZT10dHlTMCwxMTUyMDBuOCBpbml0cmQ9MHg4MTYwMDAwMCwyME0gcmFtZGlza19zaXplPTIwNDgwIgorQ09ORklHX0NNRExJTkU9InJvb3Q9L2Rldi9yYW0wIHJ3IG1lbT0xMjhNIGNvbnNvbGU9dHR5UzIsMTE1MjAwbjggaW5pdHJkPTB4ODE2MDAwMDAsMjBNIHJhbWRpc2tfc2l6ZT0yMDQ4MCIKICMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAogIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAogCkBAIC00OTEsNyArNDkxLDggQEAKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CitDT05GSUdfT01BUF9XQVRDSERPRz15CiBDT05GSUdfU1NCX1BPU1NJQkxFPXkKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20zX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb21hcF96b29tM19kZWZjb25maWcKaW5kZXggYTNlM2M4Mi4uZmY4YWMzZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9vbWFwX3pvb20zX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL29tYXBfem9vbTNfZGVmY29uZmlnCkBAIC0xMTM2LDcgKzExMzYsNyBAQAogIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CiBDT05GSUdfTU1DPXkKICMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CitDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUU9eQogCiAjCiAjIE1NQy9TRC9TRElPIENhcmQgRHJpdmVycwpAQCAtMTE4Niw3ICsxMTg2LDcgQEAKICMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CiAjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAotIyBDT05GSUdfUlRDX0RSVl9UV0w0MDMwIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1RXTDQwMzA9eQogIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKQEAgLTE0MTYsNyArMTQxNiw3IEBACiBDT05GSUdfTUFHSUNfU1lTUlE9eQogIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiAjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9vcmlvbjV4X2RlZmNvbmZpZwppbmRleCA4NWIwNWQzLi5lZTFlYmQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL29yaW9uNXhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvb3Jpb241eF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM2Ci0jIFNhdCBOb3YgIDcgMjA6NTI6MjEgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjNgorIyBUaHUgRmViICA0IDIzOjMwOjAwIDIwMTAKICMKIENPTkZJR19BUk09eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKQEAgLTMyLDYgKzMyLDEyIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKQEAgLTQ1LDYgKzUxLDcgQEAKICMKIENPTkZJR19UUkVFX1JDVT15CiAjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD0zMgogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CkBAIC0xMjIsMTQgKzEyOSw0MSBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKQEAgLTE1OCw2ICsxOTIsNyBAQAogIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CkBAIC0xODAsNiArMjE1LDcgQEAKICMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTg1MDAgaXMgbm90IHNldAogCiAjCiAjIE9yaW9uIEltcGxlbWVudGF0aW9ucwpAQCAtMTkyLDYgKzIyOCw3IEBACiBDT05GSUdfTUFDSF9URVJBU1RBVElPTl9QUk8yPXkKIENPTkZJR19NQUNIX0xJTktTVEFUSU9OX1BSTz15CiBDT05GSUdfTUFDSF9MSU5LU1RBVElPTl9NSU5JPXkKK0NPTkZJR19NQUNIX0xJTktTVEFUSU9OX0xTX0hHTD15CiBDT05GSUdfTUFDSF9UUzQwOT15CiBDT05GSUdfTUFDSF9XUlQzNTBOX1YyPXkKIENPTkZJR19NQUNIX1RTNzhYWD15CkBAIC0yNjgsMTIgKzMwNSwxMCBAQAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz05OTk5OTkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfSEFWRV9NTE9DSz15Ci1DT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKICMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19MRURTPXkKQEAgLTQxMiwxMCArNDQ3LDYgQEAKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKIENPTkZJR19XSVJFTEVTUz15CiAjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0Ci1DT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0wCi0jIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWSBpcyBub3Qgc2V0Ci1DT05GSUdfV0lSRUxFU1NfRVhUPXkKLUNPTkZJR19XSVJFTEVTU19FWFRfU1lTRlM9eQogIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAogCiAjCkBAIC01NTQsNiArNTg1LDEwIEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKICMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldApAQCAtNTYyLDYgKzU5Nyw3IEBACiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0FENTI1WF9EUE9UIGlzIG5vdCBzZXQKICMgQ09ORklHX1BIQU5UT00gaXMgbm90IHNldAogIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAogIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKQEAgLTU2OSw2ICs2MDUsNyBAQAogIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQX0lMTyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIAogIwpAQCAtNjIxLDcgKzY1OCw5IEBACiAjIENPTkZJR19TQ1NJX0JOWDJfSVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkUySVNDU0kgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFNBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXX1NBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldApAQCAtNjU3LDYgKzY5Niw3IEBACiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9QTUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUE04MDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQkZBX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldApAQCAtNzExLDE1ICs3NTEsMTYgQEAKICMgQ09ORklHX1BBVEFfTlM4NzQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX09QVEkgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9PUFRJRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9QRENfT0xEIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfUkFESVNZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1JaMTAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NDMTIwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1NFUlZFUldPUktTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBVEFfUERDMjAyN1ggaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TSUw2ODAgaXMgbm90IHNldAogIyBDT05GSUdfUEFUQV9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UT1NISUJBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfVklBIGlzIG5vdCBzZXQKICMgQ09ORklHX1BBVEFfV0lOQk9ORCBpcyBub3Qgc2V0CiAjIENPTkZJR19QQVRBX1BMQVRGT1JNIGlzIG5vdCBzZXQKQEAgLTczNiw3ICs3NzcsNyBAQAogIwogCiAjCi0jIFNlZSB0aGUgaGVscCB0ZXh0cyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyMgVGhlIG5ld2VyIHN0YWNrIGlzIHJlY29tbWVuZGVkLgogIwogIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAogIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldApAQCAtODQyLDggKzg4MywxMCBAQAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX1RSIGlzIG5vdCBzZXQKIENPTkZJR19XTEFOPXkKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1FTCBpcyBub3Qgc2V0CisjIENPTkZJR19QUklTTTU0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9aRDEyMDEgaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC04NjYsNiArOTA5LDcgQEAKICMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAogIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNWE5FVDMgaXMgbm90IHNldAogIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CiAjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CiAKQEAgLTg3NSw2ICs5MTksNyBAQAogQ09ORklHX0lOUFVUPXkKICMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAogIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKIAogIwogIyBVc2VybGFuZCBpbnRlcmZhY2VzCkBAIC05OTMsMTEgKzEwMzgsNiBAQAogIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKIAogIwotIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCi0jCi0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0KLSMKICMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCiAjCiAjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKQEAgLTEwMDYsNyArMTA0Niw2IEBACiAjCiAjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAogIwotIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CkBAIC0xMDMzLDEwICsxMDcyLDEyIEBACiAjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX0FEUDU1ODggaXMgbm90IHNldAogCiAjCiAjIFBDSSBHUElPIGV4cGFuZGVyczoKICMKKyMgQ09ORklHX0dQSU9fQ1M1NTM1IGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAogIyBDT05GSUdfR1BJT19MQU5HV0VMTCBpcyBub3Qgc2V0CiAKQEAgLTEwNzksNiArMTEyMCw3IEBACiAjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAogQ09ORklHX1NFTlNPUlNfTE03NT15CiAjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKQEAgLTExMDQsNiArMTE0Niw3IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldApAQCAtMTExOCw2ICsxMTYxLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzX0kyQyBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQpAQCAtMTE0MCwxMSArMTE4NCwxMyBAQAogIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF84OFBNODYwNyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTEzMTYsNiArMTM2Miw3IEBACiAjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQogIwogIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVUxQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19OT1BfVVNCX1hDRUlWIGlzIG5vdCBzZXQKICMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NTUMgaXMgbm90IHNldApAQCAtMTMzMiw2ICsxMzc5LDcgQEAKICMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKICMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CiAjIENPTkZJR19MRURTX0JEMjgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0xUMzU5MyBpcyBub3Qgc2V0CiAKICMKICMgTEVEIFRyaWdnZXJzCkBAIC0xMzc3LDYgKzE0MjUsNyBAQAogIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKIENPTkZJR19SVENfRFJWX000MVQ4MD15CiAjIENPTkZJR19SVENfRFJWX000MVQ4MF9XRFQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9CUTMySyBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0RSVl9TMzUzOTBBPXkKICMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfUlg4NTgxIGlzIG5vdCBzZXQKQEAgLTEzOTgsNyArMTQ0Nyw5IEBACiBDT05GSUdfUlRDX0RSVl9NNDhUODY9eQogIyBDT05GSUdfUlRDX0RSVl9NNDhUMzUgaXMgbm90IHNldAogIyBDT05GSUdfUlRDX0RSVl9NNDhUNTkgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NU002MjQyIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlA1QzAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAogCiAjCkBAIC0xNjg2LDcgKzE3MzcsOSBAQAogQ09ORklHX0RFQlVHX0VSUk9SUz15CiAjIENPTkZJR19ERUJVR19TVEFDS19VU0FHRSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfTEw9eQorIyBDT05GSUdfRUFSTFlfUFJJTlRLIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ19FVE0gaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTE2OTQsNyArMTc0NywxMSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogQ09ORklHX0NSWVBUTz15CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMTY4X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvcHhhMTY4X2RlZmNvbmZpZwppbmRleCA3OTFiOGMzLi4xMTM1MTFmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3B4YTE2OF9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9weGExNjhfZGVmY29uZmlnCkBAIC0xLDE1ICsxLDEzIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMzCi0jIEZyaSBNYXIgMjAgMTM6NDM6MTMgMjAwOQorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjMworIyBUdWUgSmFuIDEyIDA4OjU3OjEwIDIwMTAKICMKIENPTkZJR19BUk09eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQogQ09ORklHX0dFTkVSSUNfVElNRT15CiBDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15Ci1DT05GSUdfTU1VPXkKLSMgQ09ORklHX05PX0lPUE9SVCBpcyBub3Qgc2V0CiBDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CkBAIC0xOCwxMyArMTYsMTIgQEAKIENPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQogQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKLSMgQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VNjQgaXMgbm90IHNldAogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CiBDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQogQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CiBDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKIENPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKIAogIwogIyBHZW5lcmFsIHNldHVwCkBAIC0zNSw2ICszMiwxMiBAQAogQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgogQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9HWklQPXkKK0NPTkZJR19IQVZFX0tFUk5FTF9MWk89eQorQ09ORklHX0tFUk5FTF9HWklQPXkKKyMgQ09ORklHX0tFUk5FTF9CWklQMiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpNQSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVJORUxfTFpPIGlzIG5vdCBzZXQKIENPTkZJR19TV0FQPXkKIENPTkZJR19TWVNWSVBDPXkKIENPTkZJR19TWVNWSVBDX1NZU0NUTD15CkBAIC00NiwxMSArNDksMTMgQEAKICMKICMgUkNVIFN1YnN5c3RlbQogIwotQ09ORklHX0NMQVNTSUNfUkNVPXkKLSMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtNjQsMTAgKzY5LDEwIEBACiAjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKICMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAogQ09ORklHX1VJRDE2PXkKIENPTkZJR19TWVNDVExfU1lTQ0FMTD15CkBAIC03OCwxNyArODMsMjAgQEAKIENPTkZJR19QUklOVEs9eQogQ09ORklHX0JVRz15CiBDT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX0JBU0VfRlVMTD15CiBDT05GSUdfRlVURVg9eQotQ09ORklHX0FOT05fSU5PREVTPXkKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0lHTkFMRkQ9eQogQ09ORklHX1RJTUVSRkQ9eQogQ09ORklHX0VWRU5URkQ9eQogQ09ORklHX1NITUVNPXkKIENPTkZJR19BSU89eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX0NPTVBBVF9CUks9eQogQ09ORklHX1NMQUI9eQogIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKQEAgLTk4LDYgKzEwNiwxMSBAQAogQ09ORklHX0hBVkVfS1BST0JFUz15CiBDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKIENPTkZJR19IQVZFX0NMSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAogQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQogQ09ORklHX1NMQUJJTkZPPXkKIENPTkZJR19SVF9NVVRFWEVTPXkKQEAgLTEwOSw4ICsxMjIsNyBAQAogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19CTE9DSz15Ci0jIENPTkZJR19MQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfTEJEQUY9eQogIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAogCkBAIC0xMTgsMzEgKzEzMCw2MiBAQAogIyBJTyBTY2hlZHVsZXJzCiAjCiBDT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKIENPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKIENPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAogQ09ORklHX0RFRkFVTFRfQ0ZRPXkKICMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKICMgU3lzdGVtIFR5cGUKICMKK0NPTkZJR19NTVU9eQogIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CkBAIC0xNTAsMjYgKzE5MywzMCBAQAogIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfTU1QPXkKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfTU1QPXkKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0JDTVJJTkcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VODUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX1RBVk9SRVZCIGlzIG5vdCBzZXQKIAogIwpAQCAtMTc3LDYgKzIyNCw3IEBACiAjCiBDT05GSUdfTUFDSF9BU1BFTklURT15CiBDT05GSUdfTUFDSF9aWUxPTklURTI9eQorQ09ORklHX01BQ0hfQVZFTkdFUlNfTElURT15CiAjIENPTkZJR19NQUNIX1RUQ19ES0IgaXMgbm90IHNldAogQ09ORklHX0NQVV9QWEExNjg9eQogQ09ORklHX1BMQVRfUFhBPXkKQEAgLTE4Nyw3ICsyMzUsNyBAQAogQ09ORklHX0NQVV9NT0hBV0s9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfUEFCUlRfTk9JRkFSPXkKK0NPTkZJR19DUFVfUEFCUlRfTEVHQUNZPXkKIENPTkZJR19DUFVfQ0FDSEVfVklWVD15CiBDT05GSUdfQ1BVX0NPUFlfVjRXQj15CiBDT05GSUdfQ1BVX1RMQl9WNFdCST15CkBAIC0yMDEsNyArMjQ5LDcgQEAKICMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAotIyBDT05GSUdfT1VURVJfQ0FDSEUgaXMgbm90IHNldAorQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01CiBDT05GSUdfSVdNTVhUPXkKIENPTkZJR19DT01NT05fQ0xLREVWPXkKIApAQCAtMjIzLDEzICsyNzEsMTUgQEAKICMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAogIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CiBDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKIENPTkZJR19QUkVFTVBUPXkKIENPTkZJR19IWj0xMDAKIENPTkZJR19BRUFCST15CiBDT05GSUdfT0FCSV9DT01QQVQ9eQotQ09ORklHX0FSQ0hfRkxBVE1FTV9IQVNfSE9MRVM9eQogIyBDT05GSUdfQVJDSF9TUEFSU0VNRU1fREVGQVVMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NFTEVDVF9NRU1PUllfTU9ERUwgaXMgbm90IHNldAorIyBDT05GSUdfSElHSE1FTSBpcyBub3Qgc2V0CiBDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CiBDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQogIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CkBAIC0yMzcsMTIgKzI4NywxNCBAQAogQ09ORklHX0ZMQVRNRU09eQogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQotQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz05OTk5OTkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKIAogIwogIyBCb290IG9wdGlvbnMKQEAgLTI4OCw3ICszNDAsNiBAQAogIwogIyBOZXR3b3JraW5nIG9wdGlvbnMKICMKLUNPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQogQ09ORklHX1BBQ0tFVD15CiAjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWD15CkBAIC0zMzAsNiArMzgxLDcgQEAKICMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKICMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfUkRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKICMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CkBAIC0zNDMsNiArMzk1LDggQEAKICMgQ09ORklHX0xBUEIgaXMgbm90IHNldAogIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTM1NSwxMyArNDA5LDEzIEBACiAjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CiBDT05GSUdfV0lSRUxFU1M9eQogIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAotQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZPXkKLSMgQ09ORklHX1dJUkVMRVNTX0VYVCBpcyBub3Qgc2V0CiAjIENPTkZJR19MSUI4MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUM4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgQ0ZHODAyMTEgbmVlZHMgdG8gYmUgZW5hYmxlZCBmb3IgTUFDODAyMTEKKyMKICMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKICMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldApAQCAtMzc0LDYgKzQyOCw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TVEFOREFMT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQgaXMgbm90IHNldAogQ09ORklHX0ZXX0xPQURFUj15CkBAIC00MTIsOCArNDY3LDEwIEBACiAjIENPTkZJR19BWDg4Nzk2IGlzIG5vdCBzZXQKIENPTkZJR19TTUM5MVg9eQogIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQzkxMVggaXMgbm90IHNldAogIyBDT05GSUdfU01TQzkxMVggaXMgbm90IHNldAorIyBDT05GSUdfRE5FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CiAjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAogIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CkBAIC00MjIsMTUgKzQ3OSwxMiBAQAogIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MV9NTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAogIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKLQotIwotIyBXaXJlbGVzcyBMQU4KLSMKLSMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAotIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKIAogIwogIyBFbmFibGUgV2lNQVggKE5ldHdvcmtpbmcgb3B0aW9ucykgdG8gc2VlIHRoZSBXaU1BWCBkcml2ZXJzCkBAIC00NDIsNiArNDk2LDcgQEAKICMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKIAogIwogIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydApAQCAtNDQ5LDYgKzUwNCw3IEBACiBDT05GSUdfSU5QVVQ9eQogIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAogCiAjCiAjIFVzZXJsYW5kIGludGVyZmFjZXMKQEAgLTUxMCw2ICs1NjYsMTEgQEAKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAogIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQogQ09ORklHX0dQSU9MSUI9eQogIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CkBAIC01MzAsMTEgKzU5MSwxNCBAQAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiAjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAogQ09ORklHX1NTQl9QT1NTSUJMRT15CiAKQEAgLTU1NSwyMiArNjE5LDggQEAKICMgQ09ORklHX01GRF9UN0w2NlhCIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9UQzYzODdYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVEM2MzkzWEIgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBHcmFwaGljcyBzdXBwb3J0CkBAIC01OTUsMTMgKzY0NSwxNyBAQAogIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiBDT05GSUdfUlRDX0xJQj15CiAjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCiAjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKIAogIwpAQCAtNjEzLDEwICs2NjcsMTMgQEAKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CiBDT05GSUdfRlNfUE9TSVhfQUNMPXkKLUNPTkZJR19GSUxFX0xPQ0tJTkc9eQogIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKIENPTkZJR19ETk9USUZZPXkKIENPTkZJR19JTk9USUZZPXkKIENPTkZJR19JTk9USUZZX1VTRVI9eQpAQCAtNjI3LDYgKzY4NCwxMSBAQAogQ09ORklHX0dFTkVSSUNfQUNMPXkKIAogIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCiAjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKICMKICMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldApAQCAtNjczLDYgKzczNSw3IEBACiBDT05GSUdfTkZTX1YzPXkKIENPTkZJR19ORlNfVjNfQUNMPXkKIENPTkZJR19ORlNfVjQ9eQorIyBDT05GSUdfTkZTX1Y0XzEgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKICMgQ09ORklHX05GU0QgaXMgbm90IHNldAogQ09ORklHX0xPQ0tEPXkKQEAgLTY4MSw3ICs3NDQsNiBAQAogQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiBDT05GSUdfU1VOUlBDX0dTUz15Ci0jIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAogQ09ORklHX1JQQ1NFQ19HU1NfS1JCNT15CiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CkBAIC03MDYsNiArNzY4LDcgQEAKIENPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CiBDT05GSUdfRlJBTUVfV0FSTj0xMDI0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CkBAIC03MTQsMTEgKzc3NywxNSBAQAogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfREVURUNUX0hVTkdfVEFTSz15CisjIENPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fSFVOR19UQVNLX1BBTklDX1ZBTFVFPTAKIENPTkZJR19TQ0hFRF9ERUJVRz15CiAjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAogIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKQEAgLTczOCwyOCArODA1LDMzIEBACiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogIyBDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAogQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKLQotIwotIyBUcmFjZXJzCi0jCitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQogIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX0lSUVNPRkZfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkFDRV9CUkFOQ0hfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19EWU5BTUlDX1BSSU5US19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAogQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKICMgQ09ORklHX0tHREIgaXMgbm90IHNldApAQCAtNzY4LDcgKzg0MCw5IEBACiBDT05GSUdfREVCVUdfRVJST1JTPXkKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtNzc2LDEzICs4NTAsMTYgQEAKICMgQ09ORklHX0tFWVMgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAogIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKIENPTkZJR19DUllQVE89eQogCiAjCiAjIENyeXB0byBjb3JlIG9yIGhlbHBlcgogIwotIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BTEdBUEk9eQogQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKIENPTkZJR19DUllQVE9fQUVBRDI9eQpAQCAtNzkxLDEwICs4NjgsMTIgQEAKIENPTkZJR19DUllQVE9fSEFTSD15CiBDT05GSUdfQ1JZUFRPX0hBU0gyPXkKIENPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX1BDT01QPXkKIENPTkZJR19DUllQVE9fTUFOQUdFUj15CiBDT05GSUdfQ1JZUFRPX01BTkFHRVIyPXkKICMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1dPUktRVUVVRT15CiAjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKQEAgLTgyMiwxMSArOTAxLDEzIEBACiAjCiAjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVk1BQyBpcyBub3Qgc2V0CiAKICMKICMgRGlnZXN0CiAjCiAjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HSEFTSCBpcyBub3Qgc2V0CiAjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fTUQ1PXkKICMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CkBAIC04NjMsNiArOTQ0LDcgQEAKICMgQ29tcHJlc3Npb24KICMKICMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19aTElCIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAogCiAjCkBAIC04NzAsNiArOTUyLDcgQEAKICMKICMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQklOQVJZX1BSSU5URiBpcyBub3Qgc2V0CiAKICMKICMgTGlicmFyeSByb3V0aW5lcwpAQCAtODg0LDcgKzk2Nyw3IEBACiAjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19QTElTVD15CiBDT05GSUdfSEFTX0lPTUVNPXkKIENPTkZJR19IQVNfSU9QT1JUPXkKIENPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19OTEFUVFI9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9yYXVtZmVsZF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL3JhdW1mZWxkX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2IxYThmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9yYXVtZmVsZF9kZWZjb25maWcKQEAgLTAsMCArMSwxODk4IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzItcmM1CisjIFN1biBOb3YgIDEgMjE6NTc6MzIgMjAwOQorIworQ09ORklHX0FSTT15CitDT05GSUdfSEFWRV9QV009eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UUz15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19BUkNIX0hBU19DUFVGUkVRPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19BUkNIX01URF9YSVA9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUT15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCitDT05GSUdfQ09OU1RSVUNUT1JTPXkKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKKyMgQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfTlMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CitDT05GSUdfQ09NUEFUX0JSSz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCitDT05GSUdfU0xPV19XT1JLPXkKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEQUYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfQVM9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKK0NPTkZJR19GUkVFWkVSPXkKKworIworIyBTeXN0ZW0gVHlwZQorIworQ09ORklHX01NVT15CisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUFhBPXkKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzY0WFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CisKKyMKKyMgSW50ZWwgUFhBMnh4L1BYQTN4eCBJbXBsZW1lbnRhdGlvbnMKKyMKKworIworIyBTdXBwb3J0ZWQgUFhBM3h4IFByb2Nlc3NvciBWYXJpYW50cworIworQ09ORklHX0NQVV9QWEEzMDA9eQorIyBDT05GSUdfQ1BVX1BYQTMxMCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1BYQTMyMD15CisjIENPTkZJR19DUFVfUFhBOTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9QWEE5MzUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1BYQTk1MCBpcyBub3Qgc2V0CisKKyMKKyMgSW50ZWwvTWFydmVsbCBEZXYgUGxhdGZvcm1zIChzb3J0ZWQgYnkgaGFyZHdhcmUgcmVsZWFzZSB0aW1lKQorIworIyBDT05GSUdfQVJDSF9MVUJCT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfTUFJTlNUT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfWllMT05JVEUgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9MSVRUTEVUT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9UQVZPUkVWQiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX1NBQVIgaXMgbm90IHNldAorCisjCisjIFRoaXJkIFBhcnR5IERldiBQbGF0Zm9ybXMgKHNvcnRlZCBieSB2ZW5kb3IgbmFtZSkKKyMKKyMgQ09ORklHX0FSQ0hfUFhBX0lEUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZJUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQkFMTE9PTjMgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DU0I3MjYgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9BUk1DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfRU1fWDI3MCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0VYRURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ01fWDMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dVTVNUSVggaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9JTlRFTE1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfU1RBUkdBVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfWENFUCBpcyBub3Qgc2V0CisjIENPTkZJR19UUklaRVBTX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0xPR0lDUERfUFhBMjcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfUENNMDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfQ09MSUJSSSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0NPTElCUkkzMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9DT0xJQlJJMzIwIGlzIG5vdCBzZXQKKworIworIyBFbmQtdXNlciBQcm9kdWN0cyAoc29ydGVkIGJ5IHZlbmRvciBuYW1lKQorIworIyBDT05GSUdfTUFDSF9INDcwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0g1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0hfSElNQUxBWUEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSF9NQUdJQ0lBTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01JT0E3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUFhBX0VaWCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX01QOTAwQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQV9QQUxNIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX1JBVU1GRUxEX1JDPXkKK0NPTkZJR19NQUNIX1JBVU1GRUxEX0NPTk5FQ1RPUj15CitDT05GSUdfTUFDSF9SQVVNRkVMRF9QUk9UTz15CitDT05GSUdfTUFDSF9SQVVNRkVMRF9TUEVBS0VSPXkKKyMgQ09ORklHX1BYQV9TSEFSUFNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMgaXMgbm90IHNldAorQ09ORklHX1BYQTN4eD15CitDT05GSUdfUFhBX1NTUD15CitDT05GSUdfUExBVF9QWEE9eQorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVXzMyPXkKK0NPTkZJR19DUFVfWFNDMz15CitDT05GSUdfQ1BVXzMydjU9eQorQ09ORklHX0NQVV9BQlJUX0VWNVQ9eQorQ09ORklHX0NQVV9QQUJSVF9MRUdBQ1k9eQorQ09ORklHX0NQVV9DQUNIRV9WSVZUPXkKK0NPTkZJR19DUFVfVExCX1Y0V0JJPXkKK0NPTkZJR19DUFVfQ1AxNT15CitDT05GSUdfQ1BVX0NQMTVfTU1VPXkKK0NPTkZJR19JT18zNj15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9EQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfQlBSRURJQ1RfRElTQUJMRSBpcyBub3Qgc2V0CitDT05GSUdfT1VURVJfQ0FDSEU9eQorQ09ORklHX0NBQ0hFX1hTQzNMMj15CitDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTUKK0NPTkZJR19JV01NWFQ9eQorQ09ORklHX0NPTU1PTl9DTEtERVY9eQorCisjCisjIEJ1cyBzdXBwb3J0CisjCisjIENPTkZJR19QQ0lfU1lTQ0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBGZWF0dXJlcworIworQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorIyBDT05GSUdfSElHSF9SRVNfVElNRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKK0NPTkZJR19WTVNQTElUXzNHPXkKKyMgQ09ORklHX1ZNU1BMSVRfMkcgaXMgbm90IHNldAorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHhDMDAwMDAwMAorQ09ORklHX1BSRUVNUFRfTk9ORT15CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0xMDAKK0NPTkZJR19BRUFCST15CisjIENPTkZJR19PQUJJX0NPTVBBVCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQwOTYKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTAKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfSEFWRV9NTE9DSz15CitDT05GSUdfSEFWRV9NTE9DS0VEX1BBR0VfQklUPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0wCitDT05GSUdfWkJPT1RfUk9NX0JTUz0wCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTMCwxMTUyMDAgcnciCisjIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKworIworIyBDUFUgUG93ZXIgTWFuYWdlbWVudAorIworQ09ORklHX0NQVV9GUkVRPXkKK0NPTkZJR19DUFVfRlJFUV9UQUJMRT15CisjIENPTkZJR19DUFVfRlJFUV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0ZSRVFfU1RBVD15CisjIENPTkZJR19DUFVfRlJFUV9TVEFUX0RFVEFJTFMgaXMgbm90IHNldAorQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BFUkZPUk1BTkNFPXkKKyMgQ09ORklHX0NQVV9GUkVRX0RFRkFVTFRfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9ERUZBVUxUX0dPVl9VU0VSU1BBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfT05ERU1BTkQgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVFfREVGQVVMVF9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfRlJFUV9HT1ZfUEVSRk9STUFOQ0U9eQorIyBDT05GSUdfQ1BVX0ZSRVFfR09WX1BPV0VSU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfVVNFUlNQQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRX0dPVl9PTkRFTUFORCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUV9HT1ZfQ09OU0VSVkFUSVZFIGlzIG5vdCBzZXQKK0NPTkZJR19DUFVfSURMRT15CitDT05GSUdfQ1BVX0lETEVfR09WX0xBRERFUj15CitDT05GSUdfQ1BVX0lETEVfR09WX01FTlU9eQorCisjCisjIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgorIworCisjCisjIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAorIworCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfUE09eQorIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NMRUVQPXkKK0NPTkZJR19TVVNQRU5EPXkKK0NPTkZJR19TVVNQRU5EX0ZSRUVaRVI9eQorQ09ORklHX0FQTV9FTVVMQVRJT049eQorIyBDT05GSUdfUE1fUlVOVElNRSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1RVTk5FTD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj15CisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVDZfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVDZfWEZSTV9NT0RFX1JPVVRFT1BUSU1JWkFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2X1NJVD15CitDT05GSUdfSVBWNl9ORElTQ19OT0RFVFlQRT15CisjIENPTkZJR19JUFY2X1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19SRFMgaXMgbm90IHNldAorIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9EU0EgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CitDT05GSUdfQ0ZHODAyMTE9eQorIyBDT05GSUdfTkw4MDIxMV9URVNUTU9ERSBpcyBub3Qgc2V0CisjIENPTkZJR19DRkc4MDIxMV9ERVZFTE9QRVJfV0FSTklOR1MgaXMgbm90IHNldAorQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRz15CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QUz15CitDT05GSUdfQ0ZHODAyMTFfREVGQVVMVF9QU19WQUxVRT0xCitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQorQ09ORklHX1dJUkVMRVNTX0VYVD15CitDT05GSUdfV0lSRUxFU1NfRVhUX1NZU0ZTPXkKK0NPTkZJR19MSUI4MDIxMT15CisjIENPTkZJR19MSUI4MDIxMV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTUFDODAyMTE9eQorQ09ORklHX01BQzgwMjExX1JDX01JTlNUUkVMPXkKKyMgQ09ORklHX01BQzgwMjExX1JDX0RFRkFVTFRfUElEIGlzIG5vdCBzZXQKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUX01JTlNUUkVMPXkKK0NPTkZJR19NQUM4MDIxMV9SQ19ERUZBVUxUPSJtaW5zdHJlbCIKKyMgQ09ORklHX01BQzgwMjExX01FU0ggaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTFfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9ERUJVR19NRU5VIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKKyMgQ09ORklHX0RFVlRNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FGU19QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CitDT05GSUdfTkZUTD15CitDT05GSUdfTkZUTF9SVz15CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworIyBDT05GSUdfTVREX0NGSSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TU1QyNUwgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQkxPQ0syTVREPXkKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9IMTkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9HUElPIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9JRFM9eQorIyBDT05GSUdfTVREX05BTkRfRElTS09OQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9TSEFSUFNMIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTkFORF9QWEEzeHg9eQorIyBDT05GSUdfTVREX05BTkRfUFhBM3h4X0JVSUxUSU4gaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTkFORFNJTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKK0NPTkZJR19NVERfVUJJPXkKK0NPTkZJR19NVERfVUJJX1dMX1RIUkVTSE9MRD00MDk2CitDT05GSUdfTVREX1VCSV9CRUJfUkVTRVJWRT0xCisjIENPTkZJR19NVERfVUJJX0dMVUVCSSBpcyBub3Qgc2V0CisKKyMKKyMgVUJJIGRlYnVnZ2luZyBvcHRpb25zCisjCisjIENPTkZJR19NVERfVUJJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19ERVZJQ0VTPXkKKyMgQ09ORklHX0lDUzkzMlM0MDEgaXMgbm90IHNldAorIyBDT05GSUdfRU5DTE9TVVJFX1NFUlZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19JU0wyOTAwMz15CitDT05GSUdfVElfREFDNzUxMj15CisjIENPTkZJR19DMlBPUlQgaXMgbm90IHNldAorCisjCisjIEVFUFJPTSBzdXBwb3J0CisjCisjIENPTkZJR19FRVBST01fQVQyNCBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fQVQyNSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19QSFlMSUI9eQorCisjCisjIE1JSSBQSFkgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01BUlZFTExfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RBVklDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FTRU1JX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19MWFRfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJQ0FEQV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfVklURVNTRV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU01TQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQlJPQURDT01fUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lDUExVU19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUkVBTFRFS19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTkFUSU9OQUxfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NURTEwWFAgaXMgbm90IHNldAorIyBDT05GSUdfTFNJX0VUMTAxMUNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZJWEVEX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRElPX0JJVEJBTkcgaXMgbm90IHNldAorQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX0FYODg3OTYgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNOTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FTkMyOEo2MCBpcyBub3Qgc2V0CisjIENPTkZJR19FVEhPQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MTFYIGlzIG5vdCBzZXQKK0NPTkZJR19TTVNDOTExWD15CisjIENPTkZJR19ETkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg0MiBpcyBub3Qgc2V0CisjIENPTkZJR19LUzg4NTEgaXMgbm90IHNldAorIyBDT05GSUdfS1M4ODUxX01MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorQ09ORklHX1dMQU49eQorIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0xBTl84MDIxMT15CitDT05GSUdfTElCRVJUQVM9eQorIyBDT05GSUdfTElCRVJUQVNfVVNCIGlzIG5vdCBzZXQKK0NPTkZJR19MSUJFUlRBU19TRElPPW0KKyMgQ09ORklHX0xJQkVSVEFTX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJFUlRBU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJFUlRBU19USElORklSTSBpcyBub3Qgc2V0CisjIENPTkZJR19BVDc2QzUwWF9VU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1pEMTIwMSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTkVUX1JORElTX1dMQU4gaXMgbm90IHNldAorIyBDT05GSUdfUlRMODE4NyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUM4MDIxMV9IV1NJTSBpcyBub3Qgc2V0CisjIENPTkZJR19QNTRfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUSF9DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfSE9TVEFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0MyBpcyBub3Qgc2V0CisjIENPTkZJR19CNDNMRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfWkQxMjExUlcgaXMgbm90IHNldAorIyBDT05GSUdfUlQyWDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dMMTJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19JV00gaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1VTQk5FVD15CisjIENPTkZJR19VU0JfTkVUX0FYODgxN1ggaXMgbm90IHNldAorQ09ORklHX1VTQl9ORVRfQ0RDRVRIRVI9eQorIyBDT05GSUdfVVNCX05FVF9DRENfRUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfRE05NjAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfU01TQzk1WFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9HTDYyMEEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9ORVQxMDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfUExVU0IgaXMgbm90IHNldAorQ09ORklHX1VTQl9ORVRfTUNTNzgzMD15CisjIENPTkZJR19VU0JfTkVUX1JORElTX0hPU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX05FVF9DRENfU1VCU0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfWkFVUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ORVRfSU5UNTFYMSBpcyBub3Qgc2V0CisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9QT0xMREVWPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKKyMgQ09ORklHX0tFWUJPQVJEX0FEUDU1ODggaXMgbm90IHNldAorQ09ORklHX0tFWUJPQVJEX0FUS0JEPXkKKyMgQ09ORklHX1FUMjE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9MS0tCRCBpcyBub3Qgc2V0CitDT05GSUdfS0VZQk9BUkRfR1BJTz15CisjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTE04MzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BWDczNTkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9QWEEyN3ggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzcgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5X0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzlfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBpcyBub3Qgc2V0CitDT05GSUdfVE9VQ0hTQ1JFRU5fRUVUST1tCisjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NQ1M1MDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwNyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XOTBYOTAwIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NSVNDPXkKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9XRVJNQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1lFQUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfQ00xMDkgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVUlOUFVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9HUElPX1JPVEFSWV9FTkNPREVSPXkKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfQ09OU09MRV9UUkFOU0xBVElPTlM9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMX1BYQT15CitDT05GSUdfU0VSSUFMX1BYQV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NPTVBBVD15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCisjIENPTkZJR19JMkNfREVTSUdOV0FSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfUFhBPXkKKyMgQ09ORklHX0kyQ19QWEFfU0xBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19USU5ZX1VTQiBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CitDT05GSUdfU1BJPXkKK0NPTkZJR19TUElfREVCVUc9eQorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfU1BJX0JJVEJBTkc9eQorQ09ORklHX1NQSV9HUElPPXkKKyMgQ09ORklHX1NQSV9QWEEyWFggaXMgbm90IHNldAorCisjCisjIFNQSSBQcm90b2NvbCBNYXN0ZXJzCisjCitDT05GSUdfU1BJX1NQSURFVj15CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorQ09ORklHX0RFQlVHX0dQSU89eQorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX01BWDczMlggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0E5NTNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENGODU3WCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMwMSBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX01DUDIzUzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fTUMzMzg4MCBpcyBub3Qgc2V0CisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKK0NPTkZJR19XMT1tCisKKyMKKyMgMS13aXJlIEJ1cyBNYXN0ZXJzCisjCisjIENPTkZJR19XMV9NQVNURVJfRFMyNDkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxX01BU1RFUl9EUzI0ODIgaXMgbm90IHNldAorIyBDT05GSUdfVzFfTUFTVEVSX0RTMVdNIGlzIG5vdCBzZXQKK0NPTkZJR19XMV9NQVNURVJfR1BJTz1tCisKKyMKKyMgMS13aXJlIFNsYXZlcworIworIyBDT05GSUdfVzFfU0xBVkVfVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVzFfU0xBVkVfU01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19XMV9TTEFWRV9EUzI0MzEgaXMgbm90IHNldAorIyBDT05GSUdfVzFfU0xBVkVfRFMyNDMzIGlzIG5vdCBzZXQKK0NPTkZJR19XMV9TTEFWRV9EUzI3NjA9bQorIyBDT05GSUdfVzFfU0xBVkVfQlEyNzAwMCBpcyBub3Qgc2V0CitDT05GSUdfUE9XRVJfU1VQUExZPXkKKyMgQ09ORklHX1BPV0VSX1NVUFBMWV9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUERBX1BPV0VSPXkKKyMgQ09ORklHX0FQTV9QT1dFUiBpcyBub3Qgc2V0CitDT05GSUdfQkFUVEVSWV9EUzI3NjA9bQorIyBDT05GSUdfQkFUVEVSWV9EUzI3ODIgaXMgbm90IHNldAorIyBDT05GSUdfQkFUVEVSWV9CUTI3eDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBVFRFUllfTUFYMTcwNDAgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBOYXRpdmUgZHJpdmVycworIworIyBDT05GSUdfU0VOU09SU19BRDc0MTQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRENYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HNzYwQSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyMTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MVEM0MjQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05NTI0MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDExMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NIVDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVE1QNDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzTDc4Nk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfTElTM19TUEk9eQorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9NQzEzNzgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FCMzEwMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VaWF9QQ0FQIGlzIG5vdCBzZXQKK0NPTkZJR19SRUdVTEFUT1I9eQorQ09ORklHX1JFR1VMQVRPUl9ERUJVRz15CitDT05GSUdfUkVHVUxBVE9SX0ZJWEVEX1ZPTFRBR0U9eQorIyBDT05GSUdfUkVHVUxBVE9SX1ZJUlRVQUxfQ09OU1VNRVIgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfTUFYMTU4NiBpcyBub3Qgc2V0CitDT05GSUdfUkVHVUxBVE9SX01BWDg2NjA9eQorIyBDT05GSUdfUkVHVUxBVE9SX0xQMzk3MSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1JfVFBTNjUwMjMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SX1RQUzY1MDdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CT09UX1ZFU0FfU1VQUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfRk9SRUlHTl9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKKyMgQ09ORklHX0ZCX1MxRDEzWFhYIGlzIG5vdCBzZXQKK0NPTkZJR19GQl9QWEE9eQorIyBDT05GSUdfRkJfUFhBX09WRVJMQVkgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUFhBX1NNQVJUUEFORUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUFhBX1BBUkFNRVRFUlMgaXMgbm90IHNldAorQ09ORklHX1BYQTNYWF9HQ1U9eQorIyBDT05GSUdfRkJfTUJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1cxMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CUk9BRFNIRUVUIGlzIG5vdCBzZXQKK0NPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQ9eQorIyBDT05GSUdfTENEX0NMQVNTX0RFVklDRSBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CisjIENPTkZJR19CQUNLTElHSFRfR0VORVJJQyBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX1BXTT15CisKKyMKKyMgRGlzcGxheSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRElTUExBWV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKK0NPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFPXkKKyMgQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEVfREVURUNUX1BSSU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ST1RBVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UUyBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDg9eQorQ09ORklHX0ZPTlRfOHgxNj15CitDT05GSUdfTE9HTz15CisjIENPTkZJR19MT0dPX0xJTlVYX01PTk8gaXMgbm90IHNldAorIyBDT05GSUdfTE9HT19MSU5VWF9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dPX0xJTlVYX0NMVVQyMjQgaXMgbm90IHNldAorQ09ORklHX0xPR09fUkFVTUZFTERfQ0xVVDIyND15CitDT05GSUdfU09VTkQ9eQorIyBDT05GSUdfU09VTkRfT1NTX0NPUkUgaXMgbm90IHNldAorQ09ORklHX1NORD15CitDT05GSUdfU05EX1RJTUVSPXkKK0NPTkZJR19TTkRfUENNPXkKK0NPTkZJR19TTkRfSkFDSz15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9NSVhFUl9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1BDTV9PU1MgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfU1VQUE9SVF9PTERfQVBJPXkKK0NPTkZJR19TTkRfVkVSQk9TRV9QUk9DRlM9eQorIyBDT05GSUdfU05EX1ZFUkJPU0VfUFJJTlRLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfUkFXTUlESV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX09QTDNfTElCX1NFUSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfT1BMNF9MSUJfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9TQkFXRV9TRVEgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0VNVTEwSzFfU0VRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfQVJNPXkKK0NPTkZJR19TTkRfUFhBMlhYX0xJQj15CisjIENPTkZJR19TTkRfUFhBMlhYX0FDOTcgaXMgbm90IHNldAorQ09ORklHX1NORF9TUEk9eQorIyBDT05GSUdfU05EX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfU05EX1NPQz15CitDT05GSUdfU05EX1BYQTJYWF9TT0M9eQorQ09ORklHX1NORF9QWEFfU09DX1NTUD15CitDT05GSUdfU05EX1NPQ19SQVVNRkVMRD15CitDT05GSUdfU05EX1NPQ19JMkNfQU5EX1NQST15CisjIENPTkZJR19TTkRfU09DX0FMTF9DT0RFQ1MgaXMgbm90IHNldAorQ09ORklHX1NORF9TT0NfQUs0MTA0PXkKK0NPTkZJR19TTkRfU09DX0NTNDI3MD15CisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURSQVcgaXMgbm90IHNldAorCisjCisjIFVTQiBJbnB1dCBEZXZpY2VzCisjCitDT05GSUdfVVNCX0hJRD15CisjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ISURERVYgaXMgbm90IHNldAorCisjCisjIFNwZWNpYWwgSElEIGRyaXZlcnMKKyMKK0NPTkZJR19ISURfQTRURUNIPXkKK0NPTkZJR19ISURfQVBQTEU9eQorQ09ORklHX0hJRF9CRUxLSU49eQorQ09ORklHX0hJRF9DSEVSUlk9eQorQ09ORklHX0hJRF9DSElDT05ZPXkKK0NPTkZJR19ISURfQ1lQUkVTUz15CitDT05GSUdfSElEX0RSQUdPTlJJU0U9eQorIyBDT05GSUdfRFJBR09OUklTRV9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX0VaS0VZPXkKK0NPTkZJR19ISURfS1lFPXkKK0NPTkZJR19ISURfR1lSQVRJT049eQorQ09ORklHX0hJRF9UV0lOSEFOPXkKK0NPTkZJR19ISURfS0VOU0lOR1RPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorQ09ORklHX0hJRF9OVFJJRz15CitDT05GSUdfSElEX1BBTlRIRVJMT1JEPXkKKyMgQ09ORklHX1BBTlRIRVJMT1JEX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEVUQUxZTlg9eQorQ09ORklHX0hJRF9TQU1TVU5HPXkKK0NPTkZJR19ISURfU09OWT15CitDT05GSUdfSElEX1NVTlBMVVM9eQorQ09ORklHX0hJRF9HUkVFTkFTSUE9eQorIyBDT05GSUdfR1JFRU5BU0lBX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfU01BUlRKT1lQTFVTPXkKKyMgQ09ORklHX1NNQVJUSk9ZUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1RPUFNFRUQ9eQorQ09ORklHX0hJRF9USFJVU1RNQVNURVI9eQorIyBDT05GSUdfVEhSVVNUTUFTVEVSX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfWkVST1BMVVM9eQorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCPXkKK0NPTkZJR19VU0JfREVCVUc9eQorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworIyBDT05GSUdfVVNCX0RFVklDRUZTIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VTUEVORCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKyMgQ09ORklHX1VTQl9XVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XVVNCX0NCQUYgaXMgbm90IHNldAorCisjCisjIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVycworIworIyBDT05GSUdfVVNCX0M2N1gwMF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMzYyX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fREVTQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU8gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVVNCX0hEUkMgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV0RNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UTUMgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGRlcGVuZHMgb24gU0NTSSBidXQgQkxLX0RFVl9TRCBtYXkKKyMKKworIworIyBhbHNvIGJlIG5lZWRlZDsgc2VlIFVTQl9TVE9SQUdFIEhlbHAgZm9yIG1vcmUgaW5mbworIworQ09ORklHX1VTQl9TVE9SQUdFPXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009eQorQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMD15CitDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQ9eQorQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOT15CitDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1PXkKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VTQl9HUElPX1ZCVVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9QX1VTQl9YQ0VJViBpcyBub3Qgc2V0CitDT05GSUdfTU1DPXkKKyMgQ09ORklHX01NQ19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVU5TQUZFX1JFU1VNRSBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gQ2FyZCBEcml2ZXJzCisjCitDT05GSUdfTU1DX0JMT0NLPXkKK0NPTkZJR19NTUNfQkxPQ0tfQk9VTkNFPXkKKyMgQ09ORklHX1NESU9fVUFSVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEL1NESU8gSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19NTUNfUFhBPW0KKyMgQ09ORklHX01NQ19TREhDSSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAorIyBDT05GSUdfTU1DX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CitDT05GSUdfTkVXX0xFRFM9eQorQ09ORklHX0xFRFNfQ0xBU1M9eQorCisjCisjIExFRCBkcml2ZXJzCisjCisjIENPTkZJR19MRURTX1BDQTk1MzIgaXMgbm90IHNldAorQ09ORklHX0xFRFNfR1BJTz15CitDT05GSUdfTEVEU19HUElPX1BMQVRGT1JNPXkKKyMgQ09ORklHX0xFRFNfTFAzOTQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfUENBOTU1WCBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX0RBQzEyNFMwODUgaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19QV00gaXMgbm90IHNldAorIyBDT05GSUdfTEVEU19CRDI4MDIgaXMgbm90IHNldAorQ09ORklHX0xFRFNfTFQzNTkzPXkKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKK0NPTkZJR19MRURTX1RSSUdHRVJTPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9USU1FUiBpcyBub3Qgc2V0CisjIENPTkZJR19MRURTX1RSSUdHRVJfSEVBUlRCRUFUIGlzIG5vdCBzZXQKK0NPTkZJR19MRURTX1RSSUdHRVJfQkFDS0xJR0hUPXkKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFRFNfVFJJR0dFUl9ERUZBVUxUX09OIGlzIG5vdCBzZXQKKworIworIyBpcHRhYmxlcyB0cmlnZ2VyIGlzIHVuZGVyIE5ldGZpbHRlciBjb25maWcgKExFRCB0YXJnZXQpCisjCisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDg1ODEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SWDgwMjUgaXMgbm90IHNldAorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9NNDFUOTQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzOTAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUjk3MDEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzQ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMzMjM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGMjEyMyBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9TQTExMDAgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfUFhBPXkKK0NPTkZJR19ETUFERVZJQ0VTPXkKKworIworIyBETUEgRGV2aWNlcworIworIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CitDT05GSUdfVUlPPXkKKyMgQ09ORklHX1VJT19QRFJWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19QRFJWX0dFTklSUSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU9fU01YIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJT19TRVJDT1MzIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQyX0ZTX1hJUD15CitDT05GSUdfRVhUM19GUz15CisjIENPTkZJR19FWFQzX0RFRkFVTFRTX1RPX09SREVSRUQgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19YSVA9eQorQ09ORklHX0pCRD15CitDT05GSUdfRlNfTUJDQUNIRT15CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OSUxGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CitDT05GSUdfRlNOT1RJRlk9eQorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDYWNoZXMKKyMKK0NPTkZJR19GU0NBQ0hFPXkKK0NPTkZJR19GU0NBQ0hFX1NUQVRTPXkKKyMgQ09ORklHX0ZTQ0FDSEVfSElTVE9HUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTQ0FDSEVfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0NBQ0hFRklMRVM9eQorIyBDT05GSUdfQ0FDSEVGSUxFU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19DQUNIRUZJTEVTX0hJU1RPR1JBTSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorQ09ORklHX01JU0NfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfVUJJRlNfRlM9eQorIyBDT05GSUdfVUJJRlNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfVUJJRlNfRlNfQURWQU5DRURfQ09NUFIgaXMgbm90IHNldAorQ09ORklHX1VCSUZTX0ZTX0xaTz15CitDT05GSUdfVUJJRlNfRlNfWkxJQj15CisjIENPTkZJR19VQklGU19GU19ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX05GU19GU0NBQ0hFPXkKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorQ09ORklHX05MU19DT0RFUEFHRV83Mzc9eQorQ09ORklHX05MU19DT0RFUEFHRV83NzU9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTA9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTI9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTU9eQorQ09ORklHX05MU19DT0RFUEFHRV84NTc9eQorQ09ORklHX05MU19DT0RFUEFHRV84NjA9eQorQ09ORklHX05MU19DT0RFUEFHRV84NjE9eQorQ09ORklHX05MU19DT0RFUEFHRV84NjI9eQorQ09ORklHX05MU19DT0RFUEFHRV84NjM9eQorQ09ORklHX05MU19DT0RFUEFHRV84NjQ9eQorQ09ORklHX05MU19DT0RFUEFHRV84NjU9eQorQ09ORklHX05MU19DT0RFUEFHRV84NjY9eQorQ09ORklHX05MU19DT0RFUEFHRV84Njk9eQorQ09ORklHX05MU19DT0RFUEFHRV85MzY9eQorQ09ORklHX05MU19DT0RFUEFHRV85NTA9eQorQ09ORklHX05MU19DT0RFUEFHRV85MzI9eQorQ09ORklHX05MU19DT0RFUEFHRV85NDk9eQorQ09ORklHX05MU19DT0RFUEFHRV84NzQ9eQorQ09ORklHX05MU19JU084ODU5Xzg9eQorQ09ORklHX05MU19DT0RFUEFHRV8xMjUwPXkKK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MT15CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPXkKK0NPTkZJR19OTFNfSVNPODg1OV8yPXkKK0NPTkZJR19OTFNfSVNPODg1OV8zPXkKK0NPTkZJR19OTFNfSVNPODg1OV80PXkKK0NPTkZJR19OTFNfSVNPODg1OV81PXkKK0NPTkZJR19OTFNfSVNPODg1OV82PXkKK0NPTkZJR19OTFNfSVNPODg1OV83PXkKK0NPTkZJR19OTFNfSVNPODg1OV85PXkKK0NPTkZJR19OTFNfSVNPODg1OV8xMz15CitDT05GSUdfTkxTX0lTTzg4NTlfMTQ9eQorQ09ORklHX05MU19JU084ODU5XzE1PXkKK0NPTkZJR19OTFNfS09JOF9SPXkKK0NPTkZJR19OTFNfS09JOF9VPXkKK0NPTkZJR19OTFNfVVRGOD15CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCitDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTT0ZGX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVU5XSU5EPXkKK0NPTkZJR19ERUJVR19VU0VSPXkKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSDI9eQorQ09ORklHX0NSWVBUT19STkcyPXkKK0NPTkZJR19DUllQVE9fUENPTVA9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fRUNCPXkKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9eQorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FSQzQ9eQorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9eQorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19MWk89eQorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMxNj15CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fQ09NUFJFU1M9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX05MQVRUUj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3J4NTFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9yeDUxX2RlZmNvbmZpZwppbmRleCBiNmVlZWJiLi4xOTNiZDMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3J4NTFfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3Mvcng1MV9kZWZjb25maWcKQEAgLTQ0NSw2ICs0NDUsOCBAQAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CiAjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAogIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfUEhPTkVUPXkKKyMgQ09ORklHX0lFRUU4MDIxNTQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0RDQiBpcyBub3Qgc2V0CiAKQEAgLTEzMjUsMjcgKzEzMjcsMzQgQEAKICMgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX09NQVAgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9QWEEyNVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9SOEE2NjU5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX1BYQTI3WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfR0FER0VUX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0NfSFNPVEcgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9JTVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVF9TM0MyNDEwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfTTY2NTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfQU1ENTUzNlVEQyBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0ZTTF9RRSBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VUX0NJMTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dBREdFVF9ORVQyMjgwIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfR09LVSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUX0xBTkdXRUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9HQURHRVRfRFVNTVlfSENEIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfR0FER0VUX0RVQUxTUEVFRD15CiBDT05GSUdfVVNCX1pFUk89bQogIyBDT05GSUdfVVNCX1pFUk9fSE5QVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVESU8gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR0FER0VURlMgaXMgbm90IHNldAogQ09ORklHX1VTQl9GSUxFX1NUT1JBR0U9bQogIyBDT05GSUdfVVNCX0ZJTEVfU1RPUkFHRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NQVNTX1NUT1JBR0UgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0dfU0VSSUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9NSURJX0dBREdFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfR19QUklOVEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DRENfQ09NUE9TSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfR19OT0tJQT1tCisjIENPTkZJR19VU0JfR19NVUxUSSBpcyBub3Qgc2V0CiAKICMKICMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCkBAIC0xMzU0LDcgKzEzNjMsNyBAQAogIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CiAjIENPTkZJR19JU1AxMzAxX09NQVAgaXMgbm90IHNldAogQ09ORklHX1RXTDQwMzBfVVNCPXkKLUNPTkZJR19NTUM9eQorQ09ORklHX01NQz1tCiAjIENPTkZJR19NTUNfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1VOU0FGRV9SRVNVTUUgaXMgbm90IHNldAogCkBAIC0xMzYyLDcgKzEzNzEsNyBAQAogIyBNTUMvU0QvU0RJTyBDYXJkIERyaXZlcnMKICMKIENPTkZJR19NTUNfQkxPQ0s9bQotQ09ORklHX01NQ19CTE9DS19CT1VOQ0U9eQorIyBDT05GSUdfTU1DX0JMT0NLX0JPVU5DRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRElPX1VBUlQgaXMgbm90IHNldAogIyBDT05GSUdfTU1DX1RFU1QgaXMgbm90IHNldAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3MzYzI0MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zM2MyNDEwX2RlZmNvbmZpZwppbmRleCAyZjEwZGFlLi44ZTk0YzNjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3MzYzI0MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvczNjMjQxMF9kZWZjb25maWcKQEAgLTE4Nyw3ICsxODcsNyBAQAogQ09ORklHX1BNX1NJTVRFQz15CiBDT05GSUdfUzNDMjQxMF9ETUE9eQogIyBDT05GSUdfUzNDMjQxMF9ETUFfREVCVUcgaXMgbm90IHNldAotQ09ORklHX1MzQzI0WFhfQURDPXkKK0NPTkZJR19TM0NfQURDPXkKIENPTkZJR19NQUNIX1NNREs9eQogQ09ORklHX1BMQVRfUzNDPXkKIENPTkZJR19DUFVfTExTRVJJQUxfUzNDMjQxMD15CkBAIC0yMDMsOCArMjAzLDggQEAKICMKICMgUG93ZXIgbWFuYWdlbWVudAogIwotIyBDT05GSUdfUzNDMjQxMF9QTV9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TM0MyNDEwX1BNX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVNVTkdfUE1fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNU1VOR19QTV9DSEVDSyBpcyBub3Qgc2V0CiBDT05GSUdfUzNDX0xPV0xFVkVMX1VBUlRfUE9SVD0wCiBDT05GSUdfUzNDX0dQSU9fU1BBQ0U9MAogQ09ORklHX1MzQ19ERVZfSFNNTUM9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zM2M2NDAwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvczNjNjQwMF9kZWZjb25maWcKaW5kZXggZjU2ZTUwZi4uNWU3ZDRjMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9zM2M2NDAwX2RlZmNvbmZpZworKysgYi9hcmNoL2FybS9jb25maWdzL3MzYzY0MDBfZGVmY29uZmlnCkBAIC0xLDE0ICsxLDExIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjgtcmMzCi0jIE1vbiBOb3YgIDMgMTA6MTA6MzAgMjAwOAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjNAorIyBUdWUgSmFuIDE5IDEzOjEyOjQwIDIwMTAKICMKIENPTkZJR19BUk09eQogQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKIENPTkZJR19HRU5FUklDX0dQSU89eQotIyBDT05GSUdfR0VORVJJQ19USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFMgaXMgbm90IHNldAotQ09ORklHX01NVT15CiBDT05GSUdfTk9fSU9QT1JUPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKIENPTkZJR19TVEFDS1RSQUNFX1NVUFBPUlQ9eQpAQCAtMTgsMTMgKzE1LDEzIEBACiBDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKIENPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci0jIENPTkZJR19BUkNIX0hBU19JTE9HMl9VMzIgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTY0IGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0hBU19DUFVGUkVRPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQogQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCiBDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CiAKICMKICMgR2VuZXJhbCBzZXR1cApAQCAtMzQsMTMgKzMxLDMwIEBACiBDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCiBDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAogQ09ORklHX1NXQVA9eQogIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKLSMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CiBDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CiAjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CkBAIC01MCw4ICs2NCwxMyBAQAogIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiBDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorQ09ORklHX1JEX0JaSVAyPXkKK0NPTkZJR19SRF9MWk1BPXkKK0NPTkZJR19SRF9MWk89eQogQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKIENPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKICMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKIENPTkZJR19VSUQxNj15CiBDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQpAQCAtNjIsMzIgKzgxLDM4IEBACiBDT05GSUdfUFJJTlRLPXkKIENPTkZJR19CVUc9eQogQ09ORklHX0VMRl9DT1JFPXkKLUNPTkZJR19DT01QQVRfQlJLPXkKIENPTkZJR19CQVNFX0ZVTEw9eQogQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19BTk9OX0lOT0RFUz15CiBDT05GSUdfRVBPTEw9eQogQ09ORklHX1NJR05BTEZEPXkKIENPTkZJR19USU1FUkZEPXkKIENPTkZJR19FVkVOVEZEPXkKIENPTkZJR19TSE1FTT15CiBDT05GSUdfQUlPPXkKKworIworIyBLZXJuZWwgUGVyZm9ybWFuY2UgRXZlbnRzIEFuZCBDb3VudGVycworIwogQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKIENPTkZJR19TTFVCX0RFQlVHPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKICMgQ09ORklHX1NMQUIgaXMgbm90IHNldAogQ09ORklHX1NMVUI9eQogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotIyBDT05GSUdfTUFSS0VSUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9PUFJPRklMRT15CiAjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0tQUk9CRVM9eQogQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CiBDT05GSUdfSEFWRV9DTEs9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKIENPTkZJR19TTEFCSU5GTz15CiBDT05GSUdfUlRfTVVURVhFUz15Ci0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKIENPTkZJR19NT0RVTEVTPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKQEAgLTk1LDExICsxMjAsOCBAQAogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQogQ09ORklHX0JMT0NLPXkKLUNPTkZJR19MQkQ9eQotIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0Ci1DT05GSUdfTFNGPXkKK0NPTkZJR19MQkRBRj15CiAjIENPTkZJR19CTEtfREVWX0JTRyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0lOVEVHUklUWSBpcyBub3Qgc2V0CiAKQEAgLTEwNywzMyArMTI5LDYyIEBACiAjIElPIFNjaGVkdWxlcnMKICMKIENPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQogQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQogQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CiBDT05GSUdfREVGQVVMVF9DRlE9eQogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImNmcSIKLUNPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAogIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CiAKICMKICMgU3lzdGVtIFR5cGUKICMKK0NPTkZJR19NTVU9eQogIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfR0VNSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NWEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVE1QM1hYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05PTUFESUsgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JT1AxM1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMzJYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKQEAgLTE0MSwzNSArMTkyLDYyIEBACiAjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RPVkUgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9LSVJLV09PRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xPS0kgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9NVjc4WFgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfT1JJT041WCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01NUCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tTODY5NSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX05TOVhYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1c5MFg5MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QTlg0MDA4IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVNNIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9TM0M2NFhYPXkKKyMgQ09ORklHX0FSQ0hfUzVQNjQ0MCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTg1MDAgaXMgbm90IHNldAorQ09ORklHX1BMQVRfU0FNU1VORz15CitDT05GSUdfU0FNU1VOR19DTEtTUkM9eQorQ09ORklHX1NBTVNVTkdfSVJRX1ZJQ19USU1FUj15CitDT05GSUdfU0FNU1VOR19JUlFfVUFSVD15CitDT05GSUdfUzNDX0dQSU9fQ0ZHX1MzQzI0WFg9eQorQ09ORklHX1MzQ19HUElPX0NGR19TM0M2NFhYPXkKK0NPTkZJR19TM0NfR1BJT19QVUxMX1VQRE9XTj15CitDT05GSUdfU0FNU1VOR19HUElPX0VYVFJBPTAKKyMgQ09ORklHX1MzQ19BREMgaXMgbm90IHNldAorQ09ORklHX1MzQ19ERVZfSFNNTUM9eQorQ09ORklHX1MzQ19ERVZfSFNNTUMxPXkKK0NPTkZJR19TM0NfREVWX0kyQzE9eQorQ09ORklHX1MzQ19ERVZfRkI9eQorQ09ORklHX1MzQ19ERVZfVVNCX0hPU1Q9eQorQ09ORklHX1MzQ19ERVZfVVNCX0hTT1RHPXkKK0NPTkZJR19TM0NfREVWX05BTkQ9eQogQ09ORklHX1BMQVRfUzNDNjRYWD15CiBDT05GSUdfQ1BVX1MzQzY0MDBfSU5JVD15CiBDT05GSUdfQ1BVX1MzQzY0MDBfQ0xPQ0s9eQorIyBDT05GSUdfUzNDNjRYWF9ETUEgaXMgbm90IHNldAogQ09ORklHX1MzQzY0WFhfU0VUVVBfSTJDMD15CiBDT05GSUdfUzNDNjRYWF9TRVRVUF9JMkMxPXkKK0NPTkZJR19TM0M2NFhYX1NFVFVQX0ZCXzI0QlBQPXkKK0NPTkZJR19TM0M2NFhYX1NFVFVQX1NESENJX0dQSU89eQogQ09ORklHX1BMQVRfUzNDPXkKIAogIwogIyBCb290IG9wdGlvbnMKICMKIENPTkZJR19TM0NfQk9PVF9FUlJPUl9SRVNFVD15CitDT05GSUdfUzNDX0JPT1RfVUFSVF9GT1JDRV9GSUZPPXkKIAogIwogIyBQb3dlciBtYW5hZ2VtZW50CkBAIC0xNzcsMTcgKzI1NSwxNiBAQAogQ09ORklHX1MzQ19MT1dMRVZFTF9VQVJUX1BPUlQ9MAogQ09ORklHX1MzQ19HUElPX1NQQUNFPTAKIENPTkZJR19TM0NfR1BJT19UUkFDSz15Ci1DT05GSUdfUzNDX0dQSU9fUFVMTF9VUERPV049eQotQ09ORklHX1MzQ19HUElPX0NGR19TM0MyNFhYPXkKLUNPTkZJR19TM0NfR1BJT19DRkdfUzNDNjRYWD15Ci1DT05GSUdfUzNDX0RFVl9IU01NQz15Ci1DT05GSUdfUzNDX0RFVl9IU01NQzE9eQotQ09ORklHX1MzQ19ERVZfSTJDMT15CisjIENPTkZJR19NQUNIX1NNREs2NDAwIGlzIG5vdCBzZXQKIENPTkZJR19DUFVfUzNDNjQxMD15CiBDT05GSUdfUzNDNjQxMF9TRVRVUF9TREhDST15CisjIENPTkZJR19NQUNIX0FOVzY0MTAgaXMgbm90IHNldAogQ09ORklHX01BQ0hfU01ESzY0MTA9eQogQ09ORklHX1NNREs2NDEwX1NEX0NIMD15CiAjIENPTkZJR19TTURLNjQxMF9TRF9DSDEgaXMgbm90IHNldAorIyBDT05GSUdfU01ESzY0MTBfV00xMTkwX0VWMSBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX05DUCBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNIX0hNVCBpcyBub3Qgc2V0CiAKICMKICMgUHJvY2Vzc29yIFR5cGUKQEAgLTE5Niw3ICsyNzMsNyBAQAogQ09ORklHX0NQVV8zMnY2Sz15CiBDT05GSUdfQ1BVXzMydjY9eQogQ09ORklHX0NQVV9BQlJUX0VWNj15Ci1DT05GSUdfQ1BVX1BBQlJUX05PSUZBUj15CitDT05GSUdfQ1BVX1BBQlJUX1Y2PXkKIENPTkZJR19DUFVfQ0FDSEVfVjY9eQogQ09ORklHX0NQVV9DQUNIRV9WSVBUPXkKIENPTkZJR19DUFVfQ09QWV9WNj15CkBAIC0yMTIsOCArMjg5LDEwIEBACiAjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAogIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX09VVEVSX0NBQ0hFIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fTDFfQ0FDSEVfU0hJRlQ9NQorIyBDT05GSUdfQVJNX0VSUkFUQV80MTE5MjAgaXMgbm90IHNldAogQ09ORklHX0FSTV9WSUM9eQorQ09ORklHX0FSTV9WSUNfTlI9MgogCiAjCiAjIEJ1cyBzdXBwb3J0CkBAIC0yMjksMTMgKzMwOCwxNSBAQAogIyBDT05GSUdfVk1TUExJVF8yRyBpcyBub3Qgc2V0CiAjIENPTkZJR19WTVNQTElUXzFHIGlzIG5vdCBzZXQKIENPTkZJR19QQUdFX09GRlNFVD0weEMwMDAwMDAwCitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAogQ09ORklHX0haPTEwMAogQ09ORklHX0FFQUJJPXkKIENPTkZJR19PQUJJX0NPTVBBVD15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0hBU19IT0xFUz15CiAjIENPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKIENPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKIENPTkZJR19GTEFUTUVNX01BTlVBTD15CiAjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKQEAgLTI0MywyNiArMzI0LDI4IEBACiBDT05GSUdfRkxBVE1FTT15CiBDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQogQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15Ci1DT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAotIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz05OTk5OTkKICMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19aT05FX0RNQV9GTEFHPTAKIENPTkZJR19WSVJUX1RPX0JVUz15Ci1DT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKIAogIwogIyBCb290IG9wdGlvbnMKICMKIENPTkZJR19aQk9PVF9ST01fVEVYVD0wCiBDT05GSUdfWkJPT1RfUk9NX0JTUz0wCi1DT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQUMwLDExNTIwMCByb290PS9kZXYvcmFtIGluaXQ9L2Jpbi9iYXNoIGluaXRyZD0weDUxMDAwMDAwLDRNIgorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0FDMCwxMTUyMDAgcm9vdD0vZGV2L3JhbSBpbml0PS9saW51eHJjIGluaXRyZD0weDUxMDAwMDAwLDZNIHJhbWRpc2tfc2l6ZT02MTQ0IgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CiAKICMKICMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKICMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKICMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKIAogIwpAQCAtMzAwLDYgKzM4Myw3IEBACiAjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKICMKIENPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiBDT05GSUdfRldfTE9BREVSPXkKQEAgLTMxNCwxNCArMzk4LDMyIEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD15CiAjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKICMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CiBDT05GSUdfTUlTQ19ERVZJQ0VTPXkKLSMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CisjIENPTkZJR19BRDUyNVhfRFBPVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKICMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JU0wyOTAwMyBpcyBub3Qgc2V0CisjIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworQ09ORklHX0VFUFJPTV9BVDI0PXkKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTUMzMjAwVE9QIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0lERT15CiAjIENPTkZJR19JREUgaXMgbm90IHNldAogCkBAIC0zMzQsNiArNDM2LDcgQEAKICMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEEgaXMgbm90IHNldAogIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAogCiAjCiAjIElucHV0IGRldmljZSBzdXBwb3J0CkBAIC0zNDEsNiArNDQ0LDcgQEAKIENPTkZJR19JTlBVVD15CiAjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CiAKICMKICMgVXNlcmxhbmQgaW50ZXJmYWNlcwpAQCAtMzU3LDI3ICs0NjEsMzMgQEAKICMgSW5wdXQgRGV2aWNlIERyaXZlcnMKICMKIENPTkZJR19JTlBVVF9LRVlCT0FSRD15CisjIENPTkZJR19LRVlCT0FSRF9BRFA1NTg4IGlzIG5vdCBzZXQKIENPTkZJR19LRVlCT0FSRF9BVEtCRD15Ci0jIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfUVQyMTYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0tFWUJPQVJEX0xLS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19LRVlCT0FSRF9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX01BVFJJWCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVg3MzU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX05FV1RPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9PUEVOQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1RPV0FXQVkgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfU1VOS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1hUS0JEIGlzIG5vdCBzZXQKIENPTkZJR19JTlBVVF9NT1VTRT15CiBDT05GSUdfTU9VU0VfUFMyPXkKIENPTkZJR19NT1VTRV9QUzJfQUxQUz15CiBDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CiBDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15Ci1DT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKIENPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CiAjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfQVBQTEVUT1VDSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NT1VTRV9CQ001OTc0IGlzIG5vdCBzZXQKICMgQ09ORklHX01PVVNFX1ZTWFhYQUEgaXMgbm90IHNldAogIyBDT05GSUdfTU9VU0VfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TWU5BUFRJQ1NfSTJDIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKICMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CkBAIC0zOTAsNiArNTAwLDcgQEAKIENPTkZJR19TRVJJT19TRVJQT1JUPXkKIENPTkZJR19TRVJJT19MSUJQUzI9eQogIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAogCiAjCkBAIC00MjMsMTYgKzUzNCwxOCBAQAogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKIENPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKICMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CiBDT05GSUdfSFdfUkFORE9NPXkKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXX1JBTkRPTV9USU1FUklPTUVNIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfSTJDPXkKIENPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ09NUEFUPXkKIENPTkZJR19JMkNfQ0hBUkRFVj15CiBDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKIApAQCAtNDQzLDYgKzU1Niw3IEBACiAjCiAjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQogIworIyBDT05GSUdfSTJDX0RFU0lHTldBUkUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAogIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CiBDT05GSUdfSTJDX1MzQzI0MTA9eQpAQCAtNDYzLDMyICs1NzcsMzMgQEAKICMKICMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19EUzE2ODIgaXMgbm90IHNldAotQ09ORklHX0VFUFJPTV9BVDI0PXkKLSMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKworIworIyBQUFMgc3VwcG9ydAorIworIyBDT05GSUdfUFBTIGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX1JFUVVJUkVfR1BJT0xJQj15CiBDT05GSUdfR1BJT0xJQj15CiAjIENPTkZJR19ERUJVR19HUElPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fU1lTRlMgaXMgbm90IHNldAogCiAjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKICMgSTJDIEdQSU8gZXhwYW5kZXJzOgogIwogIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKICMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19BRFA1NTg4IGlzIG5vdCBzZXQKIAogIwogIyBQQ0kgR1BJTyBleHBhbmRlcnM6CkBAIC00OTcsMTAgKzYxMiwxOSBAQAogIwogIyBTUEkgR1BJTyBleHBhbmRlcnM6CiAjCisKKyMKKyMgQUM5NyBHUElPIGV4cGFuZGVyczoKKyMKICMgQ09ORklHX1cxIGlzIG5vdCBzZXQKICMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CiBDT05GSUdfSFdNT049eQogIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBkcml2ZXJzCisjCiAjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldApAQCAtNTA5LDE3ICs2MzMsMjEgQEAKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0c3NjBBIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzMgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldApAQCAtNTMwLDE2ICs2NTgsMjQgQEAKICMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDIxNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTk1MjQxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSFQxNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CkBAIC01NDksMTUgKzY4NSwxNCBAQAogIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTElTM19JMkMgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQogCiAjCiAjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQogIwotQ09ORklHX1NTQl9QT1NTSUJMRT15CiAjIENPTkZJR19TU0IgaXMgbm90IHNldAogCiAjCkBAIC01NjgsMjggKzcwMywyMiBAQAogIyBDT05GSUdfTUZEX0FTSUMzIGlzIG5vdCBzZXQKICMgQ09ORklHX0hUQ19FR1BJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfQURQNTUyMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzMVggaXMgbm90IHNldAogIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAotCi0jCi0jIE11bHRpbWVkaWEgZHJpdmVycwotIwotIyBDT05GSUdfREFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjMxMDBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfODhQTTg2MDcgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FRElBX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTYxMiwxNyArNzQxLDE1IEBACiAjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CiBDT05GSUdfSElEX1NVUFBPUlQ9eQogQ09ORklHX0hJRD15Ci1DT05GSUdfSElEX0RFQlVHPXkKICMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CiAjIENPTkZJR19ISURfUElEIGlzIG5vdCBzZXQKIAogIwogIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCi0jIENPTkZJR19ISURfQ09NUEFUIGlzIG5vdCBzZXQKIENPTkZJR19VU0JfU1VQUE9SVD15CiBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQogIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIApAQCAtNjMxLDkgKzc1OCwxMyBAQAogIwogCiAjCi0jIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heQogIwogIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCiBDT05GSUdfTU1DPXkKIENPTkZJR19NTUNfREVCVUc9eQogQ09ORklHX01NQ19VTlNBRkVfUkVTVU1FPXkKQEAgLTY1MCwyMiArNzgxLDI0IEBACiAjIE1NQy9TRC9TRElPIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCiAjCiBDT05GSUdfTU1DX1NESENJPXkKKyMgQ09ORklHX01NQ19TREhDSV9QTFRGTSBpcyBub3Qgc2V0CiBDT05GSUdfTU1DX1NESENJX1MzQz15CisjIENPTkZJR19NTUNfU0RIQ0lfUzNDX0RNQSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVQ5MSBpcyBub3Qgc2V0CisjIENPTkZJR19NTUNfQVRNRUxNQ0kgaXMgbm90IHNldAogIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKIENPTkZJR19SVENfTElCPXkKICMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKIAogIwotIyBWb2x0YWdlIGFuZCBDdXJyZW50IHJlZ3VsYXRvcnMKKyMgVEkgVkxZTlEKICMKLSMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfRklYRURfVk9MVEFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfVklSVFVBTF9DT05TVU1FUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SRUdVTEFUT1JfQlEyNDAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CiAKICMKICMgRmlsZSBzeXN0ZW1zCkBAIC02NzQsNiArODA3LDcgQEAKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQorIyBDT05GSUdfRVhUM19ERUZBVUxUU19UT19PUkRFUkVEIGlzIG5vdCBzZXQKIENPTkZJR19FWFQzX0ZTX1hBVFRSPXkKIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTD15CiBDT05GSUdfRVhUM19GU19TRUNVUklUWT15CkBAIC02ODMsOSArODE3LDEyIEBACiAjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0ZTX1BPU0lYX0FDTD15Ci1DT05GSUdfRklMRV9MT0NLSU5HPXkKICMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CiBDT05GSUdfRE5PVElGWT15CiBDT05GSUdfSU5PVElGWT15CiBDT05GSUdfSU5PVElGWV9VU0VSPXkKQEAgLTY5Niw2ICs4MzMsMTEgQEAKIENPTkZJR19HRU5FUklDX0FDTD15CiAKICMKKyMgQ2FjaGVzCisjCisjIENPTkZJR19GU0NBQ0hFIGlzIG5vdCBzZXQKKworIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCiAjCiAjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKQEAgLTcxOSwxMCArODYxLDcgQEAKIENPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CiAjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKQEAgLTczMSwxMiArODcwLDE3IEBACiAjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAogIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19ST01GU19GUz15CitDT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JMT0NLPXkKKyMgQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9NVEQgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JPVEggaXMgbm90IHNldAorQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKICMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAogIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKIApAQCAtNzU1LDYgKzg5OSw3IEBACiBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQogQ09ORklHX0ZSQU1FX1dBUk49MTAyNAogQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldApAQCAtNzYzLDEyICs5MDgsMTYgQEAKIENPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CiAjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CiBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCiBDT05GSUdfU0NIRURfREVCVUc9eQogIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAogIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfUlRfTVVURVhFUz15CiBDT05GSUdfREVCVUdfUElfTElTVD15CiAjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldApAQCAtNzg3LDM0ICs5MzYsNDMgQEAKIENPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CiAjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CiAjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CiAjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKICMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAogIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKIENPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15Ci0KLSMKLSMgVHJhY2VycwotIworQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKICMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAotIyBDT05GSUdfQ09OVEVYVF9TV0lUQ0hfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAogIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAogIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9BUkNIX0tHREI9eQogIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfQVJNX1VOV0lORD15CiBDT05GSUdfREVCVUdfVVNFUj15CiBDT05GSUdfREVCVUdfRVJST1JTPXkKICMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfUzNDX1VBUlQ9MAogCiAjCkBAIC04MjMsMTMgKzk4MSwxOSBAQAogIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfU0VMSU5VWCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NNQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfU0VDVVJJVFlfVE9NT1lPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX0RBQz15CitDT05GSUdfREVGQVVMVF9TRUNVUklUWT0iIgogIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAogCiAjCiAjIExpYnJhcnkgcm91dGluZXMKICMKIENPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldApAQCAtODM4LDYgKzEwMDIsMTAgQEAKICMgQ09ORklHX0NSQzcgaXMgbm90IHNldAogIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKIENPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1BMSVNUPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKK0NPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKK0NPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpPPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9zNXA2NDQwX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvczVwNjQ0MF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc5YTE1ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvczVwNjQ0MF9kZWZjb25maWcKQEAgLTAsMCArMSw5NjkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKKyMgU2F0IEphbiAgOSAxNjozMzo1NSAyMDEwCisjCitDT05GSUdfQVJNPXkKK0NPTkZJR19TWVNfU1VQUE9SVFNfQVBNX0VNVUxBVElPTj15CitDT05GSUdfR0VORVJJQ19HUElPPXkKK0NPTkZJR19OT19JT1BPUlQ9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX1NUQUNLVFJBQ0VfU1VQUE9SVD15CitDT05GSUdfSEFWRV9MQVRFTkNZVE9QX1NVUFBPUlQ9eQorQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKKyMgQ09ORklHX1NZU1ZJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX1RSRUVfUkNVPXkKKyMgQ09ORklHX1RSRUVfUFJFRU1QVF9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfVElOWV9SQ1UgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19SQ1VfRkFOT1VUPTMyCisjIENPTkZJR19SQ1VfRkFOT1VUX0VYQUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE3CisjIENPTkZJR19HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEPXkKK0NPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyPXkKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19OQU1FU1BBQ0VTPXkKKyMgQ09ORklHX1VUU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0VSX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BJRF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19SRF9HWklQPXkKK0NPTkZJR19SRF9CWklQMj15CitDT05GSUdfUkRfTFpNQT15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CitDT05GSUdfQ09NUEFUX0JSSz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEQUY9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1M1UDY0NDA9eQorIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RBVklOQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQkNNUklORyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1U4NTAwIGlzIG5vdCBzZXQKK0NPTkZJR19QTEFUX1NBTVNVTkc9eQorQ09ORklHX1NBTVNVTkdfQ0xLU1JDPXkKK0NPTkZJR19TQU1TVU5HX0lSUV9WSUNfVElNRVI9eQorQ09ORklHX1NBTVNVTkdfSVJRX1VBUlQ9eQorQ09ORklHX1NBTVNVTkdfR1BJT19FWFRSQT0wCitDT05GSUdfUExBVF9TM0M9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1MzQ19CT09UX0VSUk9SX1JFU0VUPXkKK0NPTkZJR19TM0NfQk9PVF9VQVJUX0ZPUkNFX0ZJRk89eQorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQKKyMKK0NPTkZJR19TM0NfTE9XTEVWRUxfVUFSVF9QT1JUPTEKK0NPTkZJR19TM0NfR1BJT19TUEFDRT0wCitDT05GSUdfUzNDX0dQSU9fVFJBQ0s9eQorQ09ORklHX1BMQVRfUzVQPXkKK0NPTkZJR19DUFVfUzVQNjQ0MF9JTklUPXkKK0NPTkZJR19DUFVfUzVQNjQ0MF9DTE9DSz15CitDT05GSUdfQ1BVX1M1UDY0NDA9eQorQ09ORklHX01BQ0hfU01ESzY0NDA9eQorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVX1Y2PXkKK0NPTkZJR19DUFVfMzJ2Nks9eQorQ09ORklHX0NQVV8zMnY2PXkKK0NPTkZJR19DUFVfQUJSVF9FVjY9eQorQ09ORklHX0NQVV9QQUJSVF9WNj15CitDT05GSUdfQ1BVX0NBQ0hFX1Y2PXkKK0NPTkZJR19DUFVfQ0FDSEVfVklQVD15CitDT05GSUdfQ1BVX0NPUFlfVjY9eQorQ09ORklHX0NQVV9UTEJfVjY9eQorQ09ORklHX0NQVV9IQVNfQVNJRD15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01CisjIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMCBpcyBub3Qgc2V0CitDT05GSUdfQVJNX1ZJQz15CitDT05GSUdfQVJNX1ZJQ19OUj0yCisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjAwCitDT05GSUdfQUVBQkk9eQorQ09ORklHX09BQklfQ09NUEFUPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9OTk5OTk5CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKyMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTAKK0NPTkZJR19DTURMSU5FPSJyb290PS9kZXYvcmFtMCBydyByYW1kaXNrPTgxOTIgaW5pdHJkPTB4MjA4MDAwMDAsOE0gY29uc29sZT10dHlTQUMxLDExNTIwMCBpbml0PS9saW51eHJjIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBTkRBTE9ORT15CisjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisKKyMKKyMgRFJCRCBkaXNhYmxlZCBiZWNhdXNlIFBST0NfRlMsIElORVQgb3IgQ09OTkVDVE9SIG5vdCBzZWxlY3RlZAorIworQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgorIyBDT05GSUdfQkxLX0RFVl9YSVAgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19NR19ESVNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JU0NfREVWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0NBTl9BU1lOQyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9XQUlUX1NDQU49bQorCisjCisjIFNDU0kgVHJhbnNwb3J0cworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19MSUJTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlBfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfTE9XTEVWRUw9eQorIyBDT05GSUdfTElCRkMgaXMgbm90IHNldAorIyBDT05GSUdfTElCRkNPRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9PU0RfSU5JVElBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfU1BBUlNFS01BUCBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWD15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9FVkRFVj15CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKK0NPTkZJR19JTlBVVF9LRVlCT0FSRD15CitDT05GSUdfS0VZQk9BUkRfQVRLQkQ9eQorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9NQVRSSVggaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX09QRU5DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVE9XQVdBWSBpcyBub3Qgc2V0CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01PVVNFPXkKK0NPTkZJR19NT1VTRV9QUzI9eQorQ09ORklHX01PVVNFX1BTMl9BTFBTPXkKK0NPTkZJR19NT1VTRV9QUzJfTE9HSVBTMlBQPXkKK0NPTkZJR19NT1VTRV9QUzJfU1lOQVBUSUNTPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1NFTlRFTElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1BTMl9UT1VDSEtJVCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9TRVJJQUwgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9HUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU49eQorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fQUQ3ODc5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0RZTkFQUk8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fV0FDT01fVzgwMDEgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0lORVhJTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NSzcxMiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9QRU5NT1VOVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFJJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIV0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNISVQyMTMgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKK0NPTkZJR19TRVJJTz15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CitDT05GSUdfU0VSSU9fTElCUFMyPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTMKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1NBTVNVTkc9eQorQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTPTQKKyMgQ09ORklHX1NFUklBTF9TQU1TVU5HX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfU0FNU1VOR19DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfUzVQNjQ0MD15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfRElTUExBWV9TVVBQT1JUPXkKKworIworIyBEaXNwbGF5IGhhcmR3YXJlIGRyaXZlcnMKKyMKKworIworIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKK0NPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRF9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVVBQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKKyMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETUFERVZJQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVWERJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBUSSBWTFlOUQorIworIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKKyMgQ09ORklHX0VYVDNfREVGQVVMVFNfVE9fT1JERVJFRCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GU19YQVRUUj15CitDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQUNMPXkKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ST01GU19GUz15CitDT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JMT0NLPXkKKyMgQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9NVEQgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JPVEggaXMgbm90IHNldAorQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUlRfTVVURVhFUz15CitDT05GSUdfREVCVUdfUElfTElTVD15CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLPXkKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MgaXMgbm90IHNldAorIyBDT05GSUdfUFJPVkVfTE9DS0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19MT0NLX1NUQVQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQPXkKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX01FTU9SWV9JTklUPXkKKyMgQ09ORklHX0RFQlVHX0xJU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU0cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTk9USUZJRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0NSRURFTlRJQUxTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfUFJJTlRLX0RFTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLVFJBQ0VfU0VMRl9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JMT0NLX0VYVF9ERVZUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZPUkNFX1dFQUtfUEVSX0NQVSBpcyBub3Qgc2V0CisjIENPTkZJR19GQVVMVF9JTkpFQ1RJT04gaXMgbm90IHNldAorIyBDT05GSUdfTEFURU5DWVRPUCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfUEFHRV9QT0lTT05JTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRlVOQ1RJT05fVFJBQ0VSPXkKK0NPTkZJR19UUkFDSU5HX1NVUFBPUlQ9eQorQ09ORklHX0ZUUkFDRT15CisjIENPTkZJR19GVU5DVElPTl9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfU0NIRURfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQUJMRV9ERUZBVUxUX1RSQUNFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorQ09ORklHX0JSQU5DSF9QUk9GSUxFX05PTkU9eQorIyBDT05GSUdfUFJPRklMRV9BTk5PVEFURURfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMRV9BTExfQlJBTkNIRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1RBQ0tfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tNRU1UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19XT1JLUVVFVUVfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfQVJNX1VOV0lORD15CitDT05GSUdfREVCVUdfVVNFUj15CitDT05GSUdfREVCVUdfRVJST1JTPXkKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUzNDX1VBUlQ9MQorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fQ0JDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1ZNQUMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0hBU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fREVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19GQ1JZUFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VSUEVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UV09GSVNIIGlzIG5vdCBzZXQKKworIworIyBDb21wcmVzc2lvbgorIworIyBDT05GSUdfQ1JZUFRPX0RFRkxBVEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1pMSUIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0hXPXkKKyMgQ09ORklHX0JJTkFSWV9QUklOVEYgaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorQ09ORklHX0NSQ19DQ0lUVD15CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfVDEwRElGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19JVFVfVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfREVDT01QUkVTU19HWklQPXkKK0NPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKK0NPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3M1cDY0NDJfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zNXA2NDQyX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGUyMGJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zNXA2NDQyX2RlZmNvbmZpZwpAQCAtMCwwICsxLDg4MyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjNAorIyBNb24gSmFuIDI1IDA4OjUwOjI4IDIwMTAKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX05PX0lPUE9SVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX1ZFQ1RPUlNfQkFTRT0weGZmZmYwMDAwCitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorQ09ORklHX0NPTlNUUlVDVE9SUz15CisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX0hBVkVfS0VSTkVMX0daSVA9eQorQ09ORklHX0hBVkVfS0VSTkVMX0xaTz15CitDT05GSUdfS0VSTkVMX0daSVA9eQorIyBDT05GSUdfS0VSTkVMX0JaSVAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFUk5FTF9MWk8gaXMgbm90IHNldAorQ09ORklHX1NXQVA9eQorIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKworIworIyBSQ1UgU3Vic3lzdGVtCisjCitDT05GSUdfVFJFRV9SQ1U9eQorIyBDT05GSUdfVFJFRV9QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19USU5ZX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVFJBQ0UgaXMgbm90IHNldAorQ09ORklHX1JDVV9GQU5PVVQ9MzIKKyMgQ09ORklHX1JDVV9GQU5PVVRfRVhBQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTcKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX05BTUVTUEFDRVM9eQorIyBDT05GSUdfVVRTX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1JEX0daSVA9eQorQ09ORklHX1JEX0JaSVAyPXkKK0NPTkZJR19SRF9MWk1BPXkKK0NPTkZJR19SRF9MWk89eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0FOT05fSU5PREVTPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19VSUQxNj15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorCisjCisjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCisjCitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1NMVUJfREVCVUc9eQorQ09ORklHX0NPTVBBVF9CUks9eQorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfU0xVQj15CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9DTEs9eQorCisjCisjIEdDT1YtYmFzZWQga2VybmVsIHByb2ZpbGluZworIworIyBDT05GSUdfU0xPV19XT1JLIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UPXkKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCREFGPXkKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorIyBDT05GSUdfSU5MSU5FX1NQSU5fVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1RSWUxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9MT0NLX0lSUVNBVkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVVRFWF9TUElOX09OX09XTkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSRUVaRVIgaXMgbm90IHNldAorCisjCisjIFN5c3RlbSBUeXBlCisjCitDT05GSUdfTU1VPXkKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9HRU1JTkkgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRVA5M1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01YQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NUTVAzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTkVUWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTk9NQURJSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDEzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzMlggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JT1AzM1ggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfRE9WRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0tJUktXT09EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTE9LSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01WNzhYWDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9PUklPTjVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTU1QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS1M4Njk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTlM5WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVzkwWDkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NU00gaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzNDNjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1M1UDY0NDAgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUzVQNjQ0Mj15CisjIENPTkZJR19BUkNIX1M1UEMxWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTg1MDAgaXMgbm90IHNldAorQ09ORklHX1BMQVRfU0FNU1VORz15CitDT05GSUdfU0FNU1VOR19DTEtTUkM9eQorQ09ORklHX1NBTVNVTkdfSVJRX1ZJQ19USU1FUj15CitDT05GSUdfU0FNU1VOR19JUlFfVUFSVD15CitDT05GSUdfU0FNU1VOR19HUElPTElCXzRCSVQ9eQorQ09ORklHX1MzQ19HUElPX0NGR19TM0MyNFhYPXkKK0NPTkZJR19TM0NfR1BJT19DRkdfUzNDNjRYWD15CitDT05GSUdfUzNDX0dQSU9fUFVMTF9VUERPV049eQorQ09ORklHX1NBTVNVTkdfR1BJT19FWFRSQT0wCisjIENPTkZJR19TM0NfQURDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50CisjCitDT05GSUdfUExBVF9TM0M9eQorCisjCisjIEJvb3Qgb3B0aW9ucworIworIyBDT05GSUdfUzNDX0JPT1RfRVJST1JfUkVTRVQgaXMgbm90IHNldAorQ09ORklHX1MzQ19CT09UX1VBUlRfRk9SQ0VfRklGTz15CitDT05GSUdfUzNDX0xPV0xFVkVMX1VBUlRfUE9SVD0xCitDT05GSUdfUzNDX0dQSU9fU1BBQ0U9MAorQ09ORklHX1MzQ19HUElPX1RSQUNLPXkKK0NPTkZJR19QTEFUX1M1UD15CitDT05GSUdfQ1BVX1M1UDY0NDI9eQorQ09ORklHX01BQ0hfU01ESzY0NDI9eQorCisjCisjIFByb2Nlc3NvciBUeXBlCisjCitDT05GSUdfQ1BVX1Y2PXkKK0NPTkZJR19DUFVfMzJ2Nks9eQorQ09ORklHX0NQVV8zMnY2PXkKK0NPTkZJR19DUFVfQUJSVF9FVjY9eQorQ09ORklHX0NQVV9QQUJSVF9WNj15CitDT05GSUdfQ1BVX0NBQ0hFX1Y2PXkKK0NPTkZJR19DUFVfQ0FDSEVfVklQVD15CitDT05GSUdfQ1BVX0NPUFlfVjY9eQorQ09ORklHX0NQVV9UTEJfVjY9eQorQ09ORklHX0NQVV9IQVNfQVNJRD15CitDT05GSUdfQ1BVX0NQMTU9eQorQ09ORklHX0NQVV9DUDE1X01NVT15CisKKyMKKyMgUHJvY2Vzc29yIEZlYXR1cmVzCisjCitDT05GSUdfQVJNX1RIVU1CPXkKKyMgQ09ORklHX0NQVV9JQ0FDSEVfRElTQUJMRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0JQUkVESUNUX0RJU0FCTEUgaXMgbm90IHNldAorQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVD01CisjIENPTkZJR19BUk1fRVJSQVRBXzQxMTkyMCBpcyBub3Qgc2V0CitDT05GSUdfQVJNX1ZJQz15CitDT05GSUdfQVJNX1ZJQ19OUj0yCisKKyMKKyMgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDSV9TWVNDQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIEZlYXR1cmVzCisjCitDT05GSUdfVk1TUExJVF8zRz15CisjIENPTkZJR19WTVNQTElUXzJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZNU1BMSVRfMUcgaXMgbm90IHNldAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4QzAwMDAwMDAKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjAwCitDT05GSUdfQUVBQkk9eQorQ09ORklHX09BQklfQ09NUEFUPXkKKyMgQ09ORklHX0FSQ0hfU1BBUlNFTUVNX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TRUxFQ1RfTUVNT1JZX01PREVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9OTk5OTk5CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0wCitDT05GSUdfVklSVF9UT19CVVM9eQorIyBDT05GSUdfS1NNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX01NQVBfTUlOX0FERFI9NDA5NgorQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKKyMgQ09ORklHX1VBQ0NFU1NfV0lUSF9NRU1DUFkgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pCT09UX1JPTV9URVhUPTAKK0NPTkZJR19aQk9PVF9ST01fQlNTPTAKK0NPTkZJR19DTURMSU5FPSJyb290PS9kZXYvcmFtMCBydyByYW1kaXNrPTgxOTIgaW5pdHJkPTB4MjA4MDAwMDAsOE0gY29uc29sZT10dHlTQUMxLDExNTIwMCBpbml0PS9saW51eHJjIgorIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisKKyMKKyMgQ1BVIFBvd2VyIE1hbmFnZW1lbnQKKyMKKyMgQ09ORklHX0NQVV9JRExFIGlzIG5vdCBzZXQKKworIworIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KKyMKKworIworIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKKyMKK0NPTkZJR19GUEVfTldGUEU9eQorIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGUCBpcyBub3Qgc2V0CisKKyMKKyMgVXNlcnNwYWNlIGJpbmFyeSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BT1VUPXkKKyMgQ09ORklHX0JJTkZNVF9BT1VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBQb3dlciBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKKyMgQ09ORklHX1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVU1BFTkRfUE9TU0lCTEU9eQorIyBDT05GSUdfTkVUIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19VRVZFTlRfSEVMUEVSX1BBVEg9Ii9zYmluL2hvdHBsdWciCisjIENPTkZJR19ERVZUTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfU1RBTkRBTE9ORT15CisjIENPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEIGlzIG5vdCBzZXQKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKworIworIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCisjCitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01HX0RJU0sgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz15CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX09TRF9JTklUSUFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKyMgQ09ORklHX0lOUFVUX0ZGX01FTUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfUE9MTERFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9TUEFSU0VLTUFQIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVEFCTEVUIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9UT1VDSFNDUkVFTj15CisjIENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRFlOQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9GVUpJVFNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0dVTlpFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0VMTyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XQUNPTV9XODAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fSU5FWElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hJVDIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19TRVJQT1JUPXkKKyMgQ09ORklHX1NFUklPX1JBVyBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJT19BTFRFUkFfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTMKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTMKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1NBTVNVTkc9eQorQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTPTMKKyMgQ09ORklHX1NFUklBTF9TQU1TVU5HX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfU0FNU1VOR19DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfUzVQVjIxMD15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKKyMgQ09ORklHX0RFVlBUU19NVUxUSVBMRV9JTlNUQU5DRVMgaXMgbm90IHNldAorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfSFdfUkFORE9NX1RJTUVSSU9NRU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorCisjCisjIFBQUyBzdXBwb3J0CisjCisjIENPTkZJR19QUFMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfUkVRVUlSRV9HUElPTElCPXkKK0NPTkZJR19HUElPTElCPXkKKyMgQ09ORklHX0RFQlVHX0dQSU8gaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19TWVNGUyBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBJMkMgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgUENJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBBQzk3IEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX0VHUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1Q3TDY2WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM4N1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UQzYzOTNYQiBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorCisjCisjIFRJIFZMWU5RCisjCisjIENPTkZJR19TVEFHSU5HIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19HRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05JTEZTMl9GUyBpcyBub3Qgc2V0CitDT05GSUdfRklMRV9MT0NLSU5HPXkKK0NPTkZJR19GU05PVElGWT15CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQUNMPXkKKworIworIyBDYWNoZXMKKyMKKyMgQ09ORklHX0ZTQ0FDSEUgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CitDT05GSUdfVE1QRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfU1FVQVNIRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ST01GU19GUz15CitDT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JMT0NLPXkKKyMgQ09ORklHX1JPTUZTX0JBQ0tFRF9CWV9NVEQgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX0JPVEggaXMgbm90IHNldAorQ09ORklHX1JPTUZTX09OX0JMT0NLPXkKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX0JTRF9ESVNLTEFCRUw9eQorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT049eQorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9eQorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1NUUklQX0FTTV9TWU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19ERVRFQ1RfSFVOR19UQVNLPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9IVU5HX1RBU0tfUEFOSUNfVkFMVUU9MAorQ09ORklHX1NDSEVEX0RFQlVHPXkKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfVElNRVJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfT0JKRUNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX0RFQlVHX09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS01FTUxFQUsgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1JUX01VVEVYRVM9eQorQ09ORklHX0RFQlVHX1BJX0xJU1Q9eQorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TUElOTE9DSz15CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19MT0NLX0FMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST1ZFX0xPQ0tJTkcgaXMgbm90IHNldAorIyBDT05GSUdfTE9DS19TVEFUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfQlVHVkVSQk9TRT15CitDT05GSUdfREVCVUdfSU5GTz15CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19XUklURUNPVU5UIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NRU1PUllfSU5JVD15CisjIENPTkZJR19ERUJVR19MSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX05PVElGSUVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19DUkVERU5USUFMUyBpcyBub3Qgc2V0CitDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19CT09UX1BSSU5US19ERUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfVE9SVFVSRV9URVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9DUFVfU1RBTExfREVURUNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS1RSQUNFX1NFTEZfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CTE9DS19FWFRfREVWVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GT1JDRV9XRUFLX1BFUl9DUFUgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKKyMgQ09ORklHX1BBR0VfUE9JU09OSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfVFJBQ0lOR19TVVBQT1JUPXkKK0NPTkZJR19GVFJBQ0U9eQorIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19FTkFCTEVfREVGQVVMVF9UUkFDRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RfVFJBQ0VSIGlzIG5vdCBzZXQKK0NPTkZJR19CUkFOQ0hfUFJPRklMRV9OT05FPXkKKyMgQ09ORklHX1BST0ZJTEVfQU5OT1RBVEVEX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTEVfQUxMX0JSQU5DSEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUNLX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19LTUVNVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfV09SS1FVRVVFX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKKyMgQ09ORklHX0tHREIgaXMgbm90IHNldAorIyBDT05GSUdfQVJNX1VOV0lORCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfVVNFUj15CitDT05GSUdfREVCVUdfRVJST1JTPXkKKyMgQ09ORklHX0RFQlVHX1NUQUNLX1VTQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19FQVJMWV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUzNDX1VBUlQ9MQorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CitDT05GSUdfREVDT01QUkVTU19MWk89eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3M1cGMxMTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zNXBjMTEwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWE2MzYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zNXBjMTEwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDg5NCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjNAorIyBXZWQgRmViIDI0IDE1OjM2OjU0IDIwMTAKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX05PX0lPUE9SVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVF82PXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CisjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CitDT05GSUdfUkRfQlpJUDI9eQorQ09ORklHX1JEX0xaTUE9eQorQ09ORklHX1JEX0xaTz15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CitDT05GSUdfQ09NUEFUX0JSSz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEQUY9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzVQNjQ0MCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1M1UDY0NDIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1M1UFYyMTA9eQorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTg1MDAgaXMgbm90IHNldAorQ09ORklHX1BMQVRfU0FNU1VORz15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCisjIENPTkZJR19TM0NfQk9PVF9FUlJPUl9SRVNFVCBpcyBub3Qgc2V0CitDT05GSUdfUzNDX0JPT1RfVUFSVF9GT1JDRV9GSUZPPXkKK0NPTkZJR19TM0NfTE9XTEVWRUxfVUFSVF9QT1JUPTEKK0NPTkZJR19TQU1TVU5HX0NMS1NSQz15CitDT05GSUdfU0FNU1VOR19JUlFfVklDX1RJTUVSPXkKK0NPTkZJR19TQU1TVU5HX0lSUV9VQVJUPXkKK0NPTkZJR19TQU1TVU5HX0dQSU9MSUJfNEJJVD15CitDT05GSUdfUzNDX0dQSU9fQ0ZHX1MzQzI0WFg9eQorQ09ORklHX1MzQ19HUElPX0NGR19TM0M2NFhYPXkKK0NPTkZJR19TM0NfR1BJT19QVUxMX1VQRE9XTj15CitDT05GSUdfU0FNU1VOR19HUElPX0VYVFJBPTAKK0NPTkZJR19TM0NfR1BJT19TUEFDRT0wCitDT05GSUdfUzNDX0dQSU9fVFJBQ0s9eQorIyBDT05GSUdfUzNDX0FEQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudAorIworQ09ORklHX1BMQVRfUzVQPXkKK0NPTkZJR19DUFVfUzVQVjIxMD15CisjIENPTkZJR19NQUNIX1NNREtWMjEwIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX1NNREtDMTEwPXkKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMnY2Sz15CitDT05GSUdfQ1BVX1Y3PXkKK0NPTkZJR19DUFVfMzJ2Nz15CitDT05GSUdfQ1BVX0FCUlRfRVY3PXkKK0NPTkZJR19DUFVfUEFCUlRfVjc9eQorQ09ORklHX0NQVV9DQUNIRV9WNz15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQorQ09ORklHX0NQVV9DT1BZX1Y2PXkKK0NPTkZJR19DUFVfVExCX1Y3PXkKK0NPTkZJR19DUFVfSEFTX0FTSUQ9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19BUk1fVEhVTUJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVNfVExTX1JFRz15CitDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTYKKyMgQ09ORklHX0FSTV9FUlJBVEFfNDMwOTczIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9FUlJBVEFfNDU4NjkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9FUlJBVEFfNDYwMDc1IGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVklDPXkKK0NPTkZJR19BUk1fVklDX05SPTIKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1ZNU1BMSVRfM0cgaXMgbm90IHNldAorQ09ORklHX1ZNU1BMSVRfMkc9eQorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19IWj0yMDAKKyMgQ09ORklHX1RIVU1CMl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKKyMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQorQ09ORklHX1NQQVJTRU1FTT15CitDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CitDT05GSUdfU1BBUlNFTUVNX0VYVFJFTUU9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTk5OTk5OQorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0wCitDT05GSUdfWkJPT1RfUk9NX0JTUz0wCitDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L3JhbTAgcncgcmFtZGlzaz04MTkyIGluaXRyZD0weDIwODAwMDAwLDhNIGNvbnNvbGU9dHR5U0FDMSwxMTUyMDAgaW5pdD0vbGludXhyYyIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCisjIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorQ09ORklHX1ZGUD15CitDT05GSUdfVkZQdjM9eQorQ09ORklHX05FT049eQorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKKyMgQ09ORklHX05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9EWU5BUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0FNU1VORz15CitDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFNfND15CitDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMX1NBTVNVTkdfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9TQU1TVU5HX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9TNVBWMjEwPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19BQ0w9eQorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1JPTUZTX0ZTPXkKK0NPTkZJR19ST01GU19CQUNLRURfQllfQkxPQ0s9eQorIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19CQUNLRURfQllfQk9USCBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfQlNEX0RJU0tMQUJFTD15CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTj15CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19SVF9NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19QSV9MSVNUPXkKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVU5XSU5EPXkKK0NPTkZJR19ERUJVR19VU0VSPXkKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0xMPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUzNDX1VBUlQ9MQorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CitDT05GSUdfREVDT01QUkVTU19MWk89eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3M1cHYyMTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zNXB2MjEwX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjdkNDc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vY29uZmlncy9zNXB2MjEwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDg5NCBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzLXJjNAorIyBXZWQgRmViIDI0IDE1OjM2OjE2IDIwMTAKKyMKK0NPTkZJR19BUk09eQorQ09ORklHX1NZU19TVVBQT1JUU19BUE1fRU1VTEFUSU9OPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorQ09ORklHX05PX0lPUE9SVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlE9eQorQ09ORklHX0FSTV9MMV9DQUNIRV9TSElGVF82PXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKK0NPTkZJR19DT05TVFJVQ1RPUlM9eQorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfSEFWRV9LRVJORUxfR1pJUD15CitDT05GSUdfSEFWRV9LRVJORUxfTFpPPXkKK0NPTkZJR19LRVJORUxfR1pJUD15CisjIENPTkZJR19LRVJORUxfQlpJUDIgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTUEgaXMgbm90IHNldAorIyBDT05GSUdfS0VSTkVMX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CisjIENPTkZJR19TWVNWSVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19UUkVFX1JDVT15CisjIENPTkZJR19UUkVFX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTllfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfUkNVX0ZBTk9VVD0zMgorIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNworIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNFUl9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19QSURfTlMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfUkRfR1pJUD15CitDT05GSUdfUkRfQlpJUDI9eQorQ09ORklHX1JEX0xaTUE9eQorQ09ORklHX1JEX0xaTz15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQorQ09ORklHX1NZU0NUTD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CisKKyMKKyMgS2VybmVsIFBlcmZvcm1hbmNlIEV2ZW50cyBBbmQgQ291bnRlcnMKKyMKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CitDT05GSUdfQ09NUEFUX0JSSz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0NMSz15CisKKyMKKyMgR0NPVi1iYXNlZCBrZXJuZWwgcHJvZmlsaW5nCisjCisjIENPTkZJR19TTE9XX1dPUksgaXMgbm90IHNldAorQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQ9eQorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19CTE9DSz15CitDT05GSUdfTEJEQUY9eQorIyBDT05GSUdfQkxLX0RFVl9CU0cgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTlRFR1JJVFkgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQorQ09ORklHX0lPU0NIRURfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19JTkxJTkVfU1BJTl9UUllMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1RSWUxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfU1BJTl9VTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0JIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9TUElOX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1NQSU5fVU5MT0NLX0lSUVJFU1RPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX0xPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfTE9DS19JUlFTQVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9SRUFEX1VOTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1JFQURfVU5MT0NLX0lSUSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfUkVBRF9VTkxPQ0tfSVJRUkVTVE9SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVFJZTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19CSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX0xPQ0tfSVJRU0FWRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkxJTkVfV1JJVEVfVU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOTElORV9XUklURV9VTkxPQ0tfQkggaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlEgaXMgbm90IHNldAorIyBDT05GSUdfSU5MSU5FX1dSSVRFX1VOTE9DS19JUlFSRVNUT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01VVEVYX1NQSU5fT05fT1dORVIgaXMgbm90IHNldAorIyBDT05GSUdfRlJFRVpFUiBpcyBub3Qgc2V0CisKKyMKKyMgU3lzdGVtIFR5cGUKKyMKK0NPTkZJR19NTVU9eQorIyBDT05GSUdfQVJDSF9BQUVDMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0FUOTEgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0dFTUlOSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVhDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfU1RNUDNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OT01BRElLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU9QMTNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9ET1ZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfS0lSS1dPT0QgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9MT0tJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfTVY3OFhYMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09SSU9ONVggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9NTVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9LUzg2OTUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9OUzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9XOTBYOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX01TTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TM0M2NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUzVQNjQ0MCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1M1UDY0NDIgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TNVBDMVhYIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1M1UFYyMTA9eQorIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9VMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfREFWSU5DSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9CQ01SSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVTg1MDAgaXMgbm90IHNldAorQ09ORklHX1BMQVRfU0FNU1VORz15CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCisjIENPTkZJR19TM0NfQk9PVF9FUlJPUl9SRVNFVCBpcyBub3Qgc2V0CitDT05GSUdfUzNDX0JPT1RfVUFSVF9GT1JDRV9GSUZPPXkKK0NPTkZJR19TM0NfTE9XTEVWRUxfVUFSVF9QT1JUPTEKK0NPTkZJR19TQU1TVU5HX0NMS1NSQz15CitDT05GSUdfU0FNU1VOR19JUlFfVklDX1RJTUVSPXkKK0NPTkZJR19TQU1TVU5HX0lSUV9VQVJUPXkKK0NPTkZJR19TQU1TVU5HX0dQSU9MSUJfNEJJVD15CitDT05GSUdfUzNDX0dQSU9fQ0ZHX1MzQzI0WFg9eQorQ09ORklHX1MzQ19HUElPX0NGR19TM0M2NFhYPXkKK0NPTkZJR19TM0NfR1BJT19QVUxMX1VQRE9XTj15CitDT05GSUdfU0FNU1VOR19HUElPX0VYVFJBPTAKK0NPTkZJR19TM0NfR1BJT19TUEFDRT0wCitDT05GSUdfUzNDX0dQSU9fVFJBQ0s9eQorIyBDT05GSUdfUzNDX0FEQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudAorIworQ09ORklHX1BMQVRfUzVQPXkKK0NPTkZJR19DUFVfUzVQVjIxMD15CitDT05GSUdfTUFDSF9TTURLVjIxMD15CisjIENPTkZJR19NQUNIX1NNREtDMTEwIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgVHlwZQorIworQ09ORklHX0NQVV8zMnY2Sz15CitDT05GSUdfQ1BVX1Y3PXkKK0NPTkZJR19DUFVfMzJ2Nz15CitDT05GSUdfQ1BVX0FCUlRfRVY3PXkKK0NPTkZJR19DUFVfUEFCUlRfVjc9eQorQ09ORklHX0NQVV9DQUNIRV9WNz15CitDT05GSUdfQ1BVX0NBQ0hFX1ZJUFQ9eQorQ09ORklHX0NQVV9DT1BZX1Y2PXkKK0NPTkZJR19DUFVfVExCX1Y3PXkKK0NPTkZJR19DUFVfSEFTX0FTSUQ9eQorQ09ORklHX0NQVV9DUDE1PXkKK0NPTkZJR19DUFVfQ1AxNV9NTVU9eQorCisjCisjIFByb2Nlc3NvciBGZWF0dXJlcworIworQ09ORklHX0FSTV9USFVNQj15CisjIENPTkZJR19BUk1fVEhVTUJFRSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfSUNBQ0hFX0RJU0FCTEUgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9CUFJFRElDVF9ESVNBQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19IQVNfVExTX1JFRz15CitDT05GSUdfQVJNX0wxX0NBQ0hFX1NISUZUPTYKKyMgQ09ORklHX0FSTV9FUlJBVEFfNDMwOTczIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9FUlJBVEFfNDU4NjkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSTV9FUlJBVEFfNDYwMDc1IGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVklDPXkKK0NPTkZJR19BUk1fVklDX05SPTIKKworIworIyBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfUENJX1NZU0NBTEwgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9TVVBQT1JUU19NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgRmVhdHVyZXMKKyMKKyMgQ09ORklHX1ZNU1BMSVRfM0cgaXMgbm90IHNldAorQ09ORklHX1ZNU1BMSVRfMkc9eQorIyBDT05GSUdfVk1TUExJVF8xRyBpcyBub3Qgc2V0CitDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAorIyBDT05GSUdfUFJFRU1QVF9OT05FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKK0NPTkZJR19IWj0yMDAKKyMgQ09ORklHX1RIVU1CMl9LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0FFQUJJPXkKK0NPTkZJR19PQUJJX0NPTVBBVD15CitDT05GSUdfQVJDSF9TUEFSU0VNRU1fRU5BQkxFPXkKK0NPTkZJR19BUkNIX1NQQVJTRU1FTV9ERUZBVUxUPXkKKyMgQ09ORklHX0FSQ0hfU0VMRUNUX01FTU9SWV9NT0RFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKKyMgQ09ORklHX0ZMQVRNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX1NQQVJTRU1FTV9NQU5VQUw9eQorQ09ORklHX1NQQVJTRU1FTT15CitDT05GSUdfSEFWRV9NRU1PUllfUFJFU0VOVD15CitDT05GSUdfU1BBUlNFTUVNX0VYVFJFTUU9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTk5OTk5OQorIyBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MAorQ09ORklHX1ZJUlRfVE9fQlVTPXkKKyMgQ09ORklHX0tTTSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9NTUFQX01JTl9BRERSPTQwOTYKK0NPTkZJR19BTElHTk1FTlRfVFJBUD15CisjIENPTkZJR19VQUNDRVNTX1dJVEhfTUVNQ1BZIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aQk9PVF9ST01fVEVYVD0wCitDT05GSUdfWkJPT1RfUk9NX0JTUz0wCitDT05GSUdfQ01ETElORT0icm9vdD0vZGV2L3JhbTAgcncgcmFtZGlzaz04MTkyIGluaXRyZD0weDIwODAwMDAwLDhNIGNvbnNvbGU9dHR5U0FDMSwxMTUyMDAgaW5pdD0vbGludXhyYyIKKyMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorCisjCisjIENQVSBQb3dlciBNYW5hZ2VtZW50CisjCisjIENPTkZJR19DUFVfSURMRSBpcyBub3Qgc2V0CisKKyMKKyMgRmxvYXRpbmcgcG9pbnQgZW11bGF0aW9uCisjCisKKyMKKyMgQXQgbGVhc3Qgb25lIGVtdWxhdGlvbiBtdXN0IGJlIHNlbGVjdGVkCisjCisjIENPTkZJR19GUEVfTldGUEUgaXMgbm90IHNldAorIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAorQ09ORklHX1ZGUD15CitDT05GSUdfVkZQdjM9eQorQ09ORklHX05FT049eQorCisjCisjIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQ09SRV9EVU1QX0RFRkFVTFRfRUxGX0hFQURFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQU9VVD15CisjIENPTkZJR19CSU5GTVRfQU9VVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVNQRU5EX1BPU1NJQkxFPXkKKyMgQ09ORklHX05FVCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfREVWVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CitDT05GSUdfRklSTVdBUkVfSU5fS0VSTkVMPXkKK0NPTkZJR19FWFRSQV9GSVJNV0FSRT0iIgorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RFVlJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorCisjCisjIERSQkQgZGlzYWJsZWQgYmVjYXVzZSBQUk9DX0ZTLCBJTkVUIG9yIENPTk5FQ1RPUiBub3Qgc2VsZWN0ZWQKKyMKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfTUdfRElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19NSVNDX0RFVklDRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPXkKKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKKyMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfT1NEX0lOSVRJQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVEEgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1NQQVJTRUtNQVAgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3OSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9EWU5BUFJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0ZVSklUU1UgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fR1VOWkUgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1dBQ09NX1c4MDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9JTkVYSU8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTUs3MTIgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fUEVOTU9VTlQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hSSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSFdJTiBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9UT1VDSElUMjEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1c5MFg5MDAgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCitDT05GSUdfU0VSSU89eQorQ09ORklHX1NFUklPX1NFUlBPUlQ9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX0FMVEVSQV9QUzIgaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX0NPTlNPTEVfVFJBTlNMQVRJT05TPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorIyBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0FNU1VORz15CitDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFNfND15CitDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFM9NAorIyBDT05GSUdfU0VSSUFMX1NBTVNVTkdfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9TQU1TVU5HX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9TNVBWMjEwPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CisjIENPTkZJR19IV19SQU5ET01fVElNRVJJT01FTSBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CisKKyMKKyMgUFBTIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQUyBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisKKyMKKyMgU1BJIEdQSU8gZXhwYW5kZXJzOgorIworCisjCisjIEFDOTcgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9BU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfRUdQSU8gaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVDdMNjZYQiBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVEM2Mzg3WEIgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RDNjM5M1hCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRURJQV9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCisjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1VQUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVhESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VJTyBpcyBub3Qgc2V0CisKKyMKKyMgVEkgVkxZTlEKKyMKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTklMRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorQ09ORklHX0ZTTk9USUZZPXkKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CitDT05GSUdfR0VORVJJQ19BQ0w9eQorCisjCisjIENhY2hlcworIworIyBDT05GSUdfRlNDQUNIRSBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfU1lTQ1RMPXkKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKK0NPTkZJR19UTVBGU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorQ09ORklHX1JPTUZTX0ZTPXkKK0NPTkZJR19ST01GU19CQUNLRURfQllfQkxPQ0s9eQorIyBDT05GSUdfUk9NRlNfQkFDS0VEX0JZX01URCBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19CQUNLRURfQllfQk9USCBpcyBub3Qgc2V0CitDT05GSUdfUk9NRlNfT05fQkxPQ0s9eQorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CitDT05GSUdfQlNEX0RJU0tMQUJFTD15CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTj15CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCitDT05GSUdfTkxTX0NPREVQQUdFXzQzNz15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83NzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorQ09ORklHX05MU19BU0NJST15CitDT05GSUdfTkxTX0lTTzg4NTlfMT15CisjIENPTkZJR19OTFNfSVNPODg1OV8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV81IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV85IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1IgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfVSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfVVRGOCBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfU1RSSVBfQVNNX1NZTVMgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX0RFQlVHX1NISVJRIGlzIG5vdCBzZXQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUNfVkFMVUU9MAorQ09ORklHX0RFVEVDVF9IVU5HX1RBU0s9eQorIyBDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQyBpcyBub3Qgc2V0CitDT05GSUdfQk9PVFBBUkFNX0hVTkdfVEFTS19QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMVUJfREVCVUdfT04gaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LTUVNTEVBSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19QUkVFTVBUIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19SVF9NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19QSV9MSVNUPXkKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0s9eQorQ09ORklHX0RFQlVHX01VVEVYRVM9eQorIyBDT05GSUdfREVCVUdfTE9DS19BTExPQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9WRV9MT0NLSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPQ0tfU1RBVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVA9eQorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorQ09ORklHX0RFQlVHX0lORk89eQorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQ1JFREVOVElBTFMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRk9SQ0VfV0VBS19QRVJfQ1BVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZBVUxUX0lOSkVDVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CisjIENPTkZJR19QQUdFX1BPSVNPTklORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX1RSQUNJTkdfU1VQUE9SVD15CitDT05GSUdfRlRSQUNFPXkKKyMgQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ0hFRF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX0RFRkFVTFRfVFJBQ0VSUyBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UX1RSQUNFUiBpcyBub3Qgc2V0CitDT05GSUdfQlJBTkNIX1BST0ZJTEVfTk9ORT15CisjIENPTkZJR19QUk9GSUxFX0FOTk9UQVRFRF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxFX0FMTF9CUkFOQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfS01FTVRSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dPUktRVUVVRV9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19TQU1QTEVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0FSQ0hfS0dEQj15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKK0NPTkZJR19BUk1fVU5XSU5EPXkKK0NPTkZJR19ERUJVR19VU0VSPXkKK0NPTkZJR19ERUJVR19FUlJPUlM9eQorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0xMPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorIyBDT05GSUdfREVCVUdfSUNFRENDIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DX0VUTSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfUzNDX1VBUlQ9MQorCisjCisjIFNlY3VyaXR5IG9wdGlvbnMKKyMKKyMgQ09ORklHX0tFWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1NFTElOVVggaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9TRUNVUklUWV9TTUFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX1NFQ1VSSVRZX1RPTU9ZTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9TRUNVUklUWV9EQUM9eQorQ09ORklHX0RFRkFVTFRfU0VDVVJJVFk9IiIKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5BUllfUFJJTlRGIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKK0NPTkZJR19ERUNPTVBSRVNTX0daSVA9eQorQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CitDT05GSUdfREVDT01QUkVTU19MWk89eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCAyNTZlZTFjLi42OWNlMDcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTEyOCw2ICsxMjgsMTQgQEAKIAogc3RhdGljIGlubGluZSBpbnQgZG1hX3NldF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IGRtYV9tYXNrKQogeworI2lmZGVmIENPTkZJR19ETUFCT1VOQ0UKKwlpZiAoZGV2LT5hcmNoZGF0YS5kbWFib3VuY2UpIHsKKwkJaWYgKGRtYV9tYXNrID49IElTQV9ETUFfVEhSRVNIT0xEKQorCQkJcmV0dXJuIDA7CisJCWVsc2UKKwkJCXJldHVybiAtRUlPOworCX0KKyNlbmRpZgogCWlmICghZGV2LT5kbWFfbWFzayB8fCAhZG1hX3N1cHBvcnRlZChkZXYsIGRtYV9tYXNrKSkKIAkJcmV0dXJuIC1FSU87CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VudHJ5LW1hY3JvLXZpYzIuUyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2VudHJ5LW1hY3JvLXZpYzIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2ViODVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vZW50cnktbWFjcm8tdmljMi5TCkBAIC0wLDAgKzEsNTcgQEAKKy8qIGFyY2gvYXJtL2luY2x1ZGUvYXNtL2VudHJ5LW1hY3JvLXZpYzIuUworICoKKyAqIE9yaWdpbmFsbHkgYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIGEgZGV2aWNlIHdpdGggdHdvIFZJQ3MKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyovCisKKy8qIFRoaXMgc2hvdWxkIGJlIGluY2x1ZGVkIGZyb20gPG1hY2gvZW50cnktbWFjcm8uUz4gd2l0aCB0aGUgbmVjZXNzYXJ5CisgKiBkZWZpbmVzIGZvciB2aXJ0dWFsIGFkZHJlc3NlcyBhbmQgSVJRIGJhc2VzIGZvciB0aGUgdHdvIHZpY3MuCisgKgorICogVGhlIGNvZGUgbmVlZHMgdGhlIGZvbGxvd2luZyBkZWZpbmVkOgorICoJSVJRX1ZJQzBfQkFTRQlJUlEgbnVtYmVyIG9mIFZJQzAncyBmaXJzdCBJUlEKKyAqCUlSUV9WSUMxX0JBU0UJSVJRIG51bWJlciBvZiBWSUMxJ3MgZmlyc3QgSVJRCisgKglWQV9WSUMwCQlWaXJ0dWFsIGFkZHJlc3Mgb2YgVklDMAorICoJVkFfVklDMQkJVmlydHVhbCBhZGRyZXNzIG9mIFZJQzEKKyAqCisgKiBOb3RlLCBjb2RlIGFzc3VtZXMgVklDMCdzIHZpcnR1YWwgYWRkcmVzcyBpcyBhbiBBUk0gaW1tZWRpYXRlIGNvbnN0YW50CisgKiBhd2F5IGZyb20gVklDMS4KKyovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CisKKwkubWFjcm8JZGlzYWJsZV9maXEKKwkuZW5kbQorCisJLm1hY3JvCWdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJbGRyCVxiYXNlLCA9VkFfVklDMAorCS5lbmRtCisKKwkubWFjcm8JYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCS5lbmRtCisKKwkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisKKwlAIGNoZWNrIHRoZSB2aWMwCisJbW92CVxpcnFuciwgI0lSUV9WSUMwX0JBU0UgKyAzMQorCWxkcglcaXJxc3RhdCwgWyBcYmFzZSwgIyBWSUNfSVJRX1NUQVRVUyBdCisJdGVxCVxpcnFzdGF0LCAjMAorCisJQCBvdGhlcndpc2UgdHJ5IHZpYzEKKwlhZGRlcQlcdG1wLCBcYmFzZSwgIyhWQV9WSUMxIC0gVkFfVklDMCkKKwlhZGRlcQlcaXJxbnIsIFxpcnFuciwgIyhJUlFfVklDMV9CQVNFIC0gSVJRX1ZJQzBfQkFTRSkKKwlsZHJlcQlcaXJxc3RhdCwgWyBcdG1wLCAjIFZJQ19JUlFfU1RBVFVTIF0KKwl0ZXFlcQlcaXJxc3RhdCwgIzAKKworCWNsem5lCVxpcnFzdGF0LCBcaXJxc3RhdAorCXN1Ym5lCVxpcnFuciwgXGlycW5yLCBcaXJxc3RhdAorCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9pb3AzeHgtYWRtYS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvaW9wM3h4LWFkbWEuaAppbmRleCAxYThjNzI3Li45YjI4ZjEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9pb3AzeHgtYWRtYS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2lvcDN4eC1hZG1hLmgKQEAgLTM2Niw4ICszNjYsNyBAQAogCQlzbG90X2NudCArPSAqc2xvdHNfcGVyX29wOwogCX0KIAotCWlmIChsZW4pCi0JCXNsb3RfY250ICs9ICpzbG90c19wZXJfb3A7CisJc2xvdF9jbnQgKz0gKnNsb3RzX3Blcl9vcDsKIAogCXJldHVybiBzbG90X2NudDsKIH0KQEAgLTM4OSw4ICszODgsNyBAQAogCQlzbG90X2NudCArPSAqc2xvdHNfcGVyX29wOwogCX0KIAotCWlmIChsZW4pCi0JCXNsb3RfY250ICs9ICpzbG90c19wZXJfb3A7CisJc2xvdF9jbnQgKz0gKnNsb3RzX3Blcl9vcDsKIAogCXJldHVybiBzbG90X2NudDsKIH0KQEAgLTczNywxMCArNzM1LDggQEAKIAkJCWkgKz0gc2xvdHNfcGVyX29wOwogCQl9IHdoaWxlIChsZW4gPiBJT1BfQURNQV9aRVJPX1NVTV9NQVhfQllURV9DT1VOVCk7CiAKLQkJaWYgKGxlbikgewotCQkJaXRlciA9IGlvcF9od19kZXNjX3Nsb3RfaWR4KGh3X2Rlc2MsIGkpOwotCQkJaXRlci0+Ynl0ZV9jb3VudCA9IGxlbjsKLQkJfQorCQlpdGVyID0gaW9wX2h3X2Rlc2Nfc2xvdF9pZHgoaHdfZGVzYywgaSk7CisJCWl0ZXItPmJ5dGVfY291bnQgPSBsZW47CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9pdDgxNTIuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2l0ODE1Mi5oCmluZGV4IDc0YjVmZmYuLjY3MDBjN2YgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2l0ODE1Mi5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2l0ODE1Mi5oCkBAIC03NSw2ICs3NSwxOCBAQAogICBJVDgxNTJfUERfSVJRKDEpICBVU0IgKFVTQlIpCiAgIElUODE1Ml9QRF9JUlEoMCkgIEF1ZGlvIGNvbnRyb2xsZXIgKEFDUikKICAqLworI2RlZmluZSBJVDgxNTJfSVJRKHgpICAgKElSUV9CT0FSRF9FTkQgKyAoeCkpCisKKy8qIElSUS1zb3VyY2VzIGluIDMgZ3JvdXBzIC0gbG9jYWwgZGV2aWNlcywgTFBDIChzZXJpYWwpLCBhbmQgZXh0ZXJuYWwgUENJICovCisjZGVmaW5lIElUODE1Ml9MRF9JUlFfQ09VTlQgICAgIDkKKyNkZWZpbmUgSVQ4MTUyX0xQX0lSUV9DT1VOVCAgICAgMTYKKyNkZWZpbmUgSVQ4MTUyX1BEX0lSUV9DT1VOVCAgICAgMTUKKworLyogUHJpb3JpdGllczogKi8KKyNkZWZpbmUgSVQ4MTUyX1BEX0lSUShpKSAgICAgICAgSVQ4MTUyX0lSUShpKQorI2RlZmluZSBJVDgxNTJfTFBfSVJRKGkpICAgICAgICAoSVQ4MTUyX0lSUShpKSArIElUODE1Ml9QRF9JUlFfQ09VTlQpCisjZGVmaW5lIElUODE1Ml9MRF9JUlEoaSkgICAgICAgIChJVDgxNTJfSVJRKGkpICsgSVQ4MTUyX1BEX0lSUV9DT1VOVCArIElUODE1Ml9MUF9JUlFfQ09VTlQpCisKIC8qIGZyZXF1ZW50bHkgdXNlZCBpbnRlcnJ1cHRzICovCiAjZGVmaW5lIElUODE1Ml9QQ0lTRVJSCQlJVDgxNTJfUERfSVJRKDE0KQogI2RlZmluZSBJVDgxNTJfSDJQVEFEUgkJSVQ4MTUyX1BEX0lSUSgxMykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2xvY29tby5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vaGFyZHdhcmUvbG9jb21vLmgKaW5kZXggOTU0YjFiZS4uNzRlNTFkNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2xvY29tby5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL2xvY29tby5oCkBAIC0yMTQsNCArMjE0LDggQEAKIC8qIEZyb250bGlnaHQgY29udHJvbCAqLwogdm9pZCBsb2NvbW9fZnJvbnRsaWdodF9zZXQoc3RydWN0IGxvY29tb19kZXYgKmRldiwgaW50IGR1dHksIGludCB2ciwgaW50IGJwd2YpOwogCitzdHJ1Y3QgbG9jb21vX3BsYXRmb3JtX2RhdGEgeworCWludAlpcnFfYmFzZTsJLyogSVJRIGJhc2UgZm9yIGNhc2NhZGVkIG9uLWNoaXAgSVJRcyAqLworfTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9oYXJkd2FyZS9zYTExMTEuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL3NhMTExMS5oCmluZGV4IDVkYTI1OTUuLjkyZWQyNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL3NhMTExMS5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL2hhcmR3YXJlL3NhMTExMS5oCkBAIC01NzgsNCArNTc4LDggQEAKIHZvaWQgc2ExMTExX3NldF9pbyhzdHJ1Y3Qgc2ExMTExX2RldiAqc2FkZXYsIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgdik7CiB2b2lkIHNhMTExMV9zZXRfc2xlZXBfaW8oc3RydWN0IHNhMTExMV9kZXYgKnNhZGV2LCB1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IHYpOwogCitzdHJ1Y3Qgc2ExMTExX3BsYXRmb3JtX2RhdGEgeworCWludAlpcnFfYmFzZTsJLyogYmFzZSBmb3IgY2FzY2FkZWQgb24tY2hpcCBJUlFzICovCit9OworCiAjZW5kaWYgIC8qIF9BU01fQVJDSF9TQTExMTEgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggMjI2Y2RkZC4uNDc5ODAxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGNpLmgKQEAgLTMwLDE3ICszMCw2IEBACiAgKi8KICNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUyAgICAgKDEpCiAKLS8qCi0gKiBXaGV0aGVyIHBjaV91bm1hcF97c2luZ2xlLHBhZ2V9IGlzIGEgbm9wIGRlcGVuZHMgdXBvbiB0aGUKLSAqIGNvbmZpZ3VyYXRpb24uCi0gKi8KLSNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCWRtYV9hZGRyX3QgQUREUl9OQU1FOwotI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9MRU4oTEVOX05BTUUpCQlfX3UzMiBMRU5fTkFNRTsKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpCQkoKFBUUiktPkFERFJfTkFNRSkKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHJfc2V0KFBUUiwgQUREUl9OQU1FLCBWQUwpCSgoKFBUUiktPkFERFJfTkFNRSkgPSAoVkFMKSkKLSNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJKChQVFIpLT5MRU5fTkFNRSkKLSNkZWZpbmUgcGNpX3VubWFwX2xlbl9zZXQoUFRSLCBMRU5fTkFNRSwgVkFMKQkoKChQVFIpLT5MRU5fTkFNRSkgPSAoVkFMKSkKLQogI2lmZGVmIENPTkZJR19QQ0kKIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZG1hX2J1cnN0X2FkdmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkJZW51bSBwY2lfZG1hX2J1cnN0X3N0cmF0ZWd5ICpzdHJhdCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggZWVjNmU4OS4uOWRjYjExZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTEyOCw2ICsxMjgsOCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCisjZGVmaW5lIGFyY2hfaGFzX3NpbmdsZV9zdGVwKCkJKDEpCisKICNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpCVwKIAkoKChyZWdzKS0+QVJNX2Nwc3IgJiAweGYpID09IDApCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggY2Y5Y2RhYTIuLmRkMmJmNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC00NDMsOSArNDQzLDEyIEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHQUNUSU9OCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdTVVNQRU5ECisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfTU1BUAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEX1NFTEVDVAogCiAjaWYgIWRlZmluZWQoQ09ORklHX0FFQUJJKSB8fCBkZWZpbmVkKENPTkZJR19PQUJJX0NPTVBBVCkKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0lQQwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfVVRJTUUKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9jYWxscy5TIGIvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMKaW5kZXggOTMxNGEyZC4uMzdhZTMwMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2NhbGxzLlMKQEAgLTkxLDcgKzkxLDcgQEAKIAkJQ0FMTChzeXNfc2V0dGltZW9mZGF5KQogLyogODAgKi8JQ0FMTChzeXNfZ2V0Z3JvdXBzMTYpCiAJCUNBTEwoc3lzX3NldGdyb3VwczE2KQotCQlDQUxMKE9CU09MRVRFKG9sZF9zZWxlY3QpKQkvKiB1c2VkIGJ5IGxpYmM0ICovCisJCUNBTEwoT0JTT0xFVEUoc3lzX29sZF9zZWxlY3QpKQkvKiB1c2VkIGJ5IGxpYmM0ICovCiAJCUNBTEwoc3lzX3N5bWxpbmspCiAJCUNBTEwoc3lzX25pX3N5c2NhbGwpCQkvKiB3YXMgc3lzX2xzdGF0ICovCiAvKiA4NSAqLwlDQUxMKHN5c19yZWFkbGluaykKQEAgLTk5LDcgKzk5LDcgQEAKIAkJQ0FMTChzeXNfc3dhcG9uKQogCQlDQUxMKHN5c19yZWJvb3QpCiAJCUNBTEwoT0JTT0xFVEUoc3lzX29sZF9yZWFkZGlyKSkJLyogdXNlZCBieSBsaWJjNCAqLwotLyogOTAgKi8JQ0FMTChPQlNPTEVURShvbGRfbW1hcCkpCS8qIHVzZWQgYnkgbGliYzQgKi8KKy8qIDkwICovCUNBTEwoT0JTT0xFVEUoc3lzX29sZF9tbWFwKSkJLyogdXNlZCBieSBsaWJjNCAqLwogCQlDQUxMKHN5c19tdW5tYXApCiAJCUNBTEwoc3lzX3RydW5jYXRlKQogCQlDQUxMKHN5c19mdHJ1bmNhdGUpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmMKaW5kZXggMDhmODk5Zi4uM2Y1NjJhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuYwpAQCAtNDUyLDEyICs0NTIsMjMgQEAKIAkJY2xlYXJfYnJlYWtwb2ludChjaGlsZCwgJmNoaWxkLT50aHJlYWQuZGVidWcuYnBbaV0pOwogfQogCit2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJdGFzay0+cHRyYWNlICY9IH5QVF9TSU5HTEVTVEVQOworCXB0cmFjZV9jYW5jZWxfYnB0KHRhc2spOworfQorCit2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKK3sKKwl0YXNrLT5wdHJhY2UgfD0gUFRfU0lOR0xFU1RFUDsKK30KKwogLyoKICAqIENhbGxlZCBieSBrZXJuZWwvcHRyYWNlLmMgd2hlbiBkZXRhY2hpbmcuLgogICovCiB2b2lkIHB0cmFjZV9kaXNhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7Ci0Jc2luZ2xlX3N0ZXBfZGlzYWJsZShjaGlsZCk7CisJdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKGNoaWxkKTsKIH0KIAogLyoKQEAgLTc1Myw1MyArNzY0LDYgQEAKIAkJCXJldCA9IHB0cmFjZV93cml0ZV91c2VyKGNoaWxkLCBhZGRyLCBkYXRhKTsKIAkJCWJyZWFrOwogCi0JCS8qCi0JCSAqIGNvbnRpbnVlL3Jlc3RhcnQgYW5kIHN0b3AgYXQgbmV4dCAocmV0dXJuIGZyb20pIHN5c2NhbGwKLQkJICovCi0JCWNhc2UgUFRSQUNFX1NZU0NBTEw6Ci0JCWNhc2UgUFRSQUNFX0NPTlQ6Ci0JCQlyZXQgPSAtRUlPOwotCQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCi0JCQkJYnJlYWs7Ci0JCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkKLQkJCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7Ci0JCQllbHNlCi0JCQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7Ci0JCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKLQkJCXNpbmdsZV9zdGVwX2Rpc2FibGUoY2hpbGQpOwotCQkJd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKLQkJCXJldCA9IDA7Ci0JCQlicmVhazsKLQotCQkvKgotCQkgKiBtYWtlIHRoZSBjaGlsZCBleGl0LiAgQmVzdCBJIGNhbiBkbyBpcyBzZW5kIGl0IGEgc2lna2lsbC4KLQkJICogcGVyaGFwcyBpdCBzaG91bGQgYmUgcHV0IGluIHRoZSBzdGF0dXMgdGhhdCBpdCB3YW50cyB0bwotCQkgKiBleGl0LgotCQkgKi8KLQkJY2FzZSBQVFJBQ0VfS0lMTDoKLQkJCXNpbmdsZV9zdGVwX2Rpc2FibGUoY2hpbGQpOwotCQkJaWYgKGNoaWxkLT5leGl0X3N0YXRlICE9IEVYSVRfWk9NQklFKSB7Ci0JCQkJY2hpbGQtPmV4aXRfY29kZSA9IFNJR0tJTEw7Ci0JCQkJd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKLQkJCX0KLQkJCXJldCA9IDA7Ci0JCQlicmVhazsKLQotCQkvKgotCQkgKiBleGVjdXRlIHNpbmdsZSBpbnN0cnVjdGlvbi4KLQkJICovCi0JCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6Ci0JCQlyZXQgPSAtRUlPOwotCQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCi0JCQkJYnJlYWs7Ci0JCQlzaW5nbGVfc3RlcF9lbmFibGUoY2hpbGQpOwotCQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7Ci0JCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKLQkJCS8qIGdpdmUgaXQgYSBjaGFuY2UgdG8gcnVuLiAqLwotCQkJd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKLQkJCXJldCA9IDA7Ci0JCQlicmVhazsKLQogCQljYXNlIFBUUkFDRV9HRVRSRUdTOgogCQkJcmV0ID0gcHRyYWNlX2dldHJlZ3MoY2hpbGQsICh2b2lkIF9fdXNlciAqKWRhdGEpOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmggYi9hcmNoL2FybS9rZXJuZWwvcHRyYWNlLmgKaW5kZXggZGVmM2I2MS4uMzkyNjYwNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3B0cmFjZS5oCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9wdHJhY2UuaApAQCAtMTQsMjAgKzE0LDYgQEAKIGV4dGVybiB2b2lkIHB0cmFjZV9icmVhayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgc3RydWN0IHB0X3JlZ3MgKik7CiAKIC8qCi0gKiBtYWtlIHN1cmUgc2luZ2xlLXN0ZXAgYnJlYWtwb2ludCBpcyBnb25lLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2luZ2xlX3N0ZXBfZGlzYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCi17Ci0JdGFzay0+cHRyYWNlICY9IH5QVF9TSU5HTEVTVEVQOwotCXB0cmFjZV9jYW5jZWxfYnB0KHRhc2spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2luZ2xlX3N0ZXBfZW5hYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKLXsKLQl0YXNrLT5wdHJhY2UgfD0gUFRfU0lOR0xFU1RFUDsKLX0KLQotLyoKICAqIFNlbmQgU0lHVFJBUCBpZiB3ZSdyZSBzaW5nbGUtc3RlcHBpbmcKICAqLwogc3RhdGljIGlubGluZSB2b2lkIHNpbmdsZV9zdGVwX3RyYXAoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3N5c19hcm0uYyBiL2FyY2gvYXJtL2tlcm5lbC9zeXNfYXJtLmMKaW5kZXggYWU0MDI3Yi4uNDM1MGY3NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3N5c19hcm0uYworKysgYi9hcmNoL2FybS9rZXJuZWwvc3lzX2FybS5jCkBAIC0yOCwxMzUgKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pcGMuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAKLXN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQl1bnNpZ25lZCBsb25nIGxlbjsKLQl1bnNpZ25lZCBsb25nIHByb3Q7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIGZkOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwotfTsKLQotYXNtbGlua2FnZSBpbnQgb2xkX21tYXAoc3RydWN0IG1tYXBfYXJnX3N0cnVjdCBfX3VzZXIgKmFyZykKLXsKLQlpbnQgZXJyb3IgPSAtRUZBVUxUOwotCXN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgYTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmYSwgYXJnLCBzaXplb2YoYSkpKQotCQlnb3RvIG91dDsKLQotCWVycm9yID0gLUVJTlZBTDsKLQlpZiAoYS5vZmZzZXQgJiB+UEFHRV9NQVNLKQotCQlnb3RvIG91dDsKLQotCWVycm9yID0gc3lzX21tYXBfcGdvZmYoYS5hZGRyLCBhLmxlbiwgYS5wcm90LCBhLmZsYWdzLCBhLmZkLCBhLm9mZnNldCA+PiBQQUdFX1NISUZUKTsKLW91dDoKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qCi0gKiBQZXJmb3JtIHRoZSBzZWxlY3QobmQsIGluLCBvdXQsIGV4LCB0dikgYW5kIG1tYXAoKSBzeXN0ZW0KLSAqIGNhbGxzLgotICovCi0KLXN0cnVjdCBzZWxfYXJnX3N0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBuOwotCWZkX3NldCBfX3VzZXIgKmlucCwgKm91dHAsICpleHA7Ci0Jc3RydWN0IHRpbWV2YWwgX191c2VyICp0dnA7Ci19OwotCi1hc21saW5rYWdlIGludCBvbGRfc2VsZWN0KHN0cnVjdCBzZWxfYXJnX3N0cnVjdCBfX3VzZXIgKmFyZykKLXsKLQlzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QgYTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmYSwgYXJnLCBzaXplb2YoYSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQkvKiBzeXNfc2VsZWN0KCkgZG9lcyB0aGUgYXBwcm9wcmlhdGUga2VybmVsIGxvY2tpbmcgKi8KLQlyZXR1cm4gc3lzX3NlbGVjdChhLm4sIGEuaW5wLCBhLm91dHAsIGEuZXhwLCBhLnR2cCk7Ci19Ci0KLSNpZiAhZGVmaW5lZChDT05GSUdfQUVBQkkpIHx8IGRlZmluZWQoQ09ORklHX09BQklfQ09NUEFUKQotLyoKLSAqIHN5c19pcGMoKSBpcyB0aGUgZGUtbXVsdGlwbGV4ZXIgZm9yIHRoZSBTeXNWIElQQyBjYWxscy4uCi0gKgotICogVGhpcyBpcyByZWFsbHkgaG9ycmlibHkgdWdseS4KLSAqLwotYXNtbGlua2FnZSBpbnQgc3lzX2lwYyh1aW50IGNhbGwsIGludCBmaXJzdCwgaW50IHNlY29uZCwgaW50IHRoaXJkLAotCQkgICAgICAgdm9pZCBfX3VzZXIgKnB0ciwgbG9uZyBmaWZ0aCkKLXsKLQlpbnQgdmVyc2lvbiwgcmV0OwotCi0JdmVyc2lvbiA9IGNhbGwgPj4gMTY7IC8qIGhhY2sgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLQljYWxsICY9IDB4ZmZmZjsKLQotCXN3aXRjaCAoY2FsbCkgewotCWNhc2UgU0VNT1A6Ci0JCXJldHVybiBzeXNfc2VtdGltZWRvcCAoZmlyc3QsIChzdHJ1Y3Qgc2VtYnVmIF9fdXNlciAqKXB0ciwgc2Vjb25kLCBOVUxMKTsKLQljYXNlIFNFTVRJTUVET1A6Ci0JCXJldHVybiBzeXNfc2VtdGltZWRvcChmaXJzdCwgKHN0cnVjdCBzZW1idWYgX191c2VyICopcHRyLCBzZWNvbmQsCi0JCQkJCShjb25zdCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopZmlmdGgpOwotCi0JY2FzZSBTRU1HRVQ6Ci0JCXJldHVybiBzeXNfc2VtZ2V0IChmaXJzdCwgc2Vjb25kLCB0aGlyZCk7Ci0JY2FzZSBTRU1DVEw6IHsKLQkJdW5pb24gc2VtdW4gZm91cnRoOwotCQlpZiAoIXB0cikKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoZ2V0X3VzZXIoZm91cnRoLl9fcGFkLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKikgcHRyKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gc3lzX3NlbWN0bCAoZmlyc3QsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCk7Ci0JfQotCi0JY2FzZSBNU0dTTkQ6Ci0JCXJldHVybiBzeXNfbXNnc25kKGZpcnN0LCAoc3RydWN0IG1zZ2J1ZiBfX3VzZXIgKikgcHRyLCAKLQkJCQkgIHNlY29uZCwgdGhpcmQpOwotCWNhc2UgTVNHUkNWOgotCQlzd2l0Y2ggKHZlcnNpb24pIHsKLQkJY2FzZSAwOiB7Ci0JCQlzdHJ1Y3QgaXBjX2tsdWRnZSB0bXA7Ci0JCQlpZiAoIXB0cikKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmdG1wLChzdHJ1Y3QgaXBjX2tsdWRnZSBfX3VzZXIgKilwdHIsCi0JCQkJCSAgIHNpemVvZiAodG1wKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gc3lzX21zZ3JjdiAoZmlyc3QsIHRtcC5tc2dwLCBzZWNvbmQsCi0JCQkJCSAgIHRtcC5tc2d0eXAsIHRoaXJkKTsKLQkJfQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIHN5c19tc2dyY3YgKGZpcnN0LAotCQkJCQkgICAoc3RydWN0IG1zZ2J1ZiBfX3VzZXIgKikgcHRyLAotCQkJCQkgICBzZWNvbmQsIGZpZnRoLCB0aGlyZCk7Ci0JCX0KLQljYXNlIE1TR0dFVDoKLQkJcmV0dXJuIHN5c19tc2dnZXQgKChrZXlfdCkgZmlyc3QsIHNlY29uZCk7Ci0JY2FzZSBNU0dDVEw6Ci0JCXJldHVybiBzeXNfbXNnY3RsKGZpcnN0LCBzZWNvbmQsIChzdHJ1Y3QgbXNxaWRfZHMgX191c2VyICopcHRyKTsKLQotCWNhc2UgU0hNQVQ6Ci0JCXN3aXRjaCAodmVyc2lvbikgewotCQlkZWZhdWx0OiB7Ci0JCQl1bG9uZyByYWRkcjsKLQkJCXJldCA9IGRvX3NobWF0KGZpcnN0LCAoY2hhciBfX3VzZXIgKilwdHIsIHNlY29uZCwgJnJhZGRyKTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKLQkJCXJldHVybiBwdXRfdXNlcihyYWRkciwgKHVsb25nIF9fdXNlciAqKXRoaXJkKTsKLQkJfQotCQljYXNlIDE6IC8qIE9mIGNvdXJzZSwgd2UgZG9uJ3Qgc3VwcG9ydCBpQkNTMiEgKi8KLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JY2FzZSBTSE1EVDogCi0JCXJldHVybiBzeXNfc2htZHQgKChjaGFyIF9fdXNlciAqKXB0cik7Ci0JY2FzZSBTSE1HRVQ6Ci0JCXJldHVybiBzeXNfc2htZ2V0IChmaXJzdCwgc2Vjb25kLCB0aGlyZCk7Ci0JY2FzZSBTSE1DVEw6Ci0JCXJldHVybiBzeXNfc2htY3RsIChmaXJzdCwgc2Vjb25kLAotCQkJCSAgIChzdHJ1Y3Qgc2htaWRfZHMgX191c2VyICopIHB0cik7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9TWVM7Ci0JfQotfQotI2VuZGlmCi0KIC8qIEZvcmsgYSBuZXcgdGFzayAtIHRoaXMgY3JlYXRlcyBhIG5ldyBwcm9ncmFtIHRocmVhZC4KICAqIFRoaXMgaXMgY2FsbGVkIGluZGlyZWN0bHkgdmlhIGEgc21hbGwgd3JhcHBlcgogICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMgYi9hcmNoL2FybS9rZXJuZWwvc3lzX29hYmktY29tcGF0LmMKaW5kZXggZDU5YTBjZC4uMzNmZjY3OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3N5c19vYWJpLWNvbXBhdC5jCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9zeXNfb2FiaS1jb21wYXQuYwpAQCAtMzQ2LDkgKzM0Niw2IEBACiAJcmV0dXJuIHN5c19vYWJpX3NlbXRpbWVkb3Aoc2VtaWQsIHRzb3BzLCBuc29wcywgTlVMTCk7CiB9CiAKLWV4dGVybiBhc21saW5rYWdlIGludCBzeXNfaXBjKHVpbnQgY2FsbCwgaW50IGZpcnN0LCBpbnQgc2Vjb25kLCBpbnQgdGhpcmQsCi0JCQkgICAgICB2b2lkIF9fdXNlciAqcHRyLCBsb25nIGZpZnRoKTsKLQogYXNtbGlua2FnZSBpbnQgc3lzX29hYmlfaXBjKHVpbnQgY2FsbCwgaW50IGZpcnN0LCBpbnQgc2Vjb25kLCBpbnQgdGhpcmQsCiAJCQkgICAgdm9pZCBfX3VzZXIgKnB0ciwgbG9uZyBmaWZ0aCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYyBiL2FyY2gvYXJtL2tlcm5lbC91bndpbmQuYwppbmRleCA3ODZhYzJiLi41MDI5MmNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdW53aW5kLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3Vud2luZC5jCkBAIC0zNTksNyArMzU5LDkgQEAKIAkJZnJhbWUuZnAgPSByZWdzLT5BUk1fZnA7CiAJCWZyYW1lLnNwID0gcmVncy0+QVJNX3NwOwogCQlmcmFtZS5sciA9IHJlZ3MtPkFSTV9scjsKLQkJZnJhbWUucGMgPSByZWdzLT5BUk1fcGM7CisJCS8qIFBDIG1pZ2h0IGJlIGNvcnJ1cHRlZCwgdXNlIExSIGluIHRoYXQgY2FzZS4gKi8KKwkJZnJhbWUucGMgPSBrZXJuZWxfdGV4dF9hZGRyZXNzKHJlZ3MtPkFSTV9wYykKKwkJCSA/IHJlZ3MtPkFSTV9wYyA6IHJlZ3MtPkFSTV9scjsKIAl9IGVsc2UgaWYgKHRzayA9PSBjdXJyZW50KSB7CiAJCWZyYW1lLmZwID0gKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX2ZyYW1lX2FkZHJlc3MoMCk7CiAJCWZyYW1lLnNwID0gY3VycmVudF9zcDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwX3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxcm05MjAwX3RpbWUuYwppbmRleCAzMDlmMzUxLi4yNTAwZjQxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXJtOTIwMF90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFybTkyMDBfdGltZS5jCkBAIC01OCw2ICs1OCwxMiBAQAogewogCXUzMglzciA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9TVF9TUikgJiBpcnFtYXNrOwogCisJLyoKKwkgKiBpcnFzIHNob3VsZCBiZSBkaXNhYmxlZCBoZXJlLCBidXQgYXMgdGhlIGlycSBpcyBzaGFyZWQgdGhleSBhcmUgb25seQorCSAqIGd1YXJhbnRlZWQgdG8gYmUgb2ZmIGlmIHRoZSB0aW1lciBpcnEgaXMgcmVnaXN0ZXJlZCBmaXJzdC4KKwkgKi8KKwlXQVJOX09OX09OQ0UoIWlycXNfZGlzYWJsZWQoKSk7CisKIAkvKiBzaW11bGF0ZSAib25lc2hvdCIgdGltZXIgd2l0aCBhbGFybSAqLwogCWlmIChzciAmIEFUOTFfU1RfQUxNUykgewogCQljbGtldnQuZXZlbnRfaGFuZGxlcigmY2xrZXZ0KTsKQEAgLTEzMiwyNCArMTM4LDExIEBACiBzdGF0aWMgaW50CiBjbGtldnQzMmtfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLCBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpCiB7Ci0JdW5zaWduZWQgbG9uZwlmbGFnczsKIAl1MzIJCWFsbTsKIAlpbnQJCXN0YXR1cyA9IDA7CiAKIAlCVUdfT04oZGVsdGEgPCAyKTsKIAotCS8qIFVzZSAicmF3IiBwcmltaXRpdmVzIHNvIHdlIGJlaGF2ZSBjb3JyZWN0bHkgb24gUlQga2VybmVscy4gKi8KLQlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JLyoKLQkgKiBBY2NvcmRpbmcgdG8gVGhvbWFzIEdsZWl4bmVyIGlycXMgYXJlIGFscmVhZHkgZGlzYWJsZWQgaGVyZS4gIFNpbXBseQotCSAqIHJlbW92aW5nIHJhd19sb2NhbF9pcnFfc2F2ZSBhYm92ZSAoYW5kIHRoZSBtYXRjaGluZwotCSAqIHJhd19sb2NhbF9pcnFfcmVzdG9yZSkgd2FzIG5vdCBhY2NlcHRlZC4gIFNlZQotCSAqIGh0dHA6Ly90aHJlYWQuZ21hbmUub3JnL2dtYW5lLmxpbnV4LnBvcnRzLmFybS5rZXJuZWwvNDExNzQKLQkgKiBTbyBmb3Igbm93ICgyMDA4LTExLTIwKSBqdXN0IHdhcm4gb25jZSBpZiBpcnFzIHdlcmUgbm90IGRpc2FibGVkIC4uLgotCSAqLwotCVdBUk5fT05fT05DRSghcmF3X2lycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpKTsKLQogCS8qIFRoZSBhbGFybSBJUlEgdXNlcyBhYnNvbHV0ZSB0aW1lIChub3crZGVsdGEpLCBub3QgdGhlIHJlbGF0aXZlCiAJICogdGltZSAoZGVsdGEpIGluIG91ciBjYWxsaW5nIGNvbnZlbnRpb24uICBMaWtlIGFsbCBjbG9ja2V2ZW50cwogCSAqIHVzaW5nIHN1Y2ggIm1hdGNoIiBoYXJkd2FyZSwgd2UgaGF2ZSBhIHJhY2UgdG8gZGVmZW5kIGFnYWluc3QuCkBAIC0xNjksNyArMTYyLDYgQEAKIAlhbG0gKz0gZGVsdGE7CiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9TVF9SVEFSLCBhbG0pOwogCi0JcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNnhfdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2F0OTFzYW05MjZ4X3RpbWUuYwppbmRleCA0YmQ1NmFlLi42MDhhNjMyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTEvYXQ5MXNhbTkyNnhfdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MS9hdDkxc2FtOTI2eF90aW1lLmMKQEAgLTYyLDE2ICs2MiwxMiBAQAogc3RhdGljIHZvaWQKIHBpdF9jbGtldnRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQogewotCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Ci0KIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgotCQkvKiB1cGRhdGUgY2xvY2tzb3VyY2UgY291bnRlciwgdGhlbiBlbmFibGUgdGhlIElSUSAqLwotCQlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQkvKiB1cGRhdGUgY2xvY2tzb3VyY2UgY291bnRlciAqLwogCQlwaXRfY250ICs9IHBpdF9jeWNsZSAqIFBJVF9QSUNOVChhdDkxX3N5c19yZWFkKEFUOTFfUElUX1BJVlIpKTsKIAkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QSVRfTVIsIChwaXRfY3ljbGUgLSAxKSB8IEFUOTFfUElUX1BJVEVOCiAJCQkJfCBBVDkxX1BJVF9QSVRJRU4pOwotCQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQlicmVhazsKIAljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CiAJCUJVRygpOwpAQCAtMTAwLDYgKzk2LDExIEBACiAgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCBhdDkxc2FtOTI2eF9waXRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKKwkvKgorCSAqIGlycXMgc2hvdWxkIGJlIGRpc2FibGVkIGhlcmUsIGJ1dCBhcyB0aGUgaXJxIGlzIHNoYXJlZCB0aGV5IGFyZSBvbmx5CisJICogZ3VhcmFudGVlZCB0byBiZSBvZmYgaWYgdGhlIHRpbWVyIGlycSBpcyByZWdpc3RlcmVkIGZpcnN0LgorCSAqLworCVdBUk5fT05fT05DRSghaXJxc19kaXNhYmxlZCgpKTsKIAogCS8qIFRoZSBQSVQgaW50ZXJydXB0IG1heSBiZSBkaXNhYmxlZCwgYW5kIGlzIHNoYXJlZCAqLwogCWlmICgocGl0X2Nsa2V2dC5tb2RlID09IENMT0NLX0VWVF9NT0RFX1BFUklPRElDKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX21jaS5oIGIvYXJjaC9hcm0vbWFjaC1hdDkxL2luY2x1ZGUvbWFjaC9hdDkxX21jaS5oCmluZGV4IDU1MGQ1MDMuLjU3ZjhlZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MS9pbmNsdWRlL21hY2gvYXQ5MV9tY2kuaAorKysgYi9hcmNoL2FybS9tYWNoLWF0OTEvaW5jbHVkZS9tYWNoL2F0OTFfbWNpLmgKQEAgLTc3LDcgKzc3LDcgQEAKIAogI2RlZmluZSBBVDkxX01DSV9CTEtSCQkweDE4CQkvKiBCbG9jayBSZWdpc3RlciAqLwogI2RlZmluZQkJQVQ5MV9NQ0lfQkxLUl9CQ05UKG4pCSgoMHhmZmZmICYgKG4pKSA8PCAwKQkvKiBCbG9jayBjb3VudCAqLwotI2RlZmluZQkJQVQ5MV9NQ0lfQkxLUl9CTEtMRU4obikJKCgweGZmZmYgJiAobikpIDw8IDE2KQkvKiBCbG9jayBsZW5naHQgKi8KKyNkZWZpbmUJCUFUOTFfTUNJX0JMS1JfQkxLTEVOKG4pCSgoMHhmZmZmICYgKG4pKSA8PCAxNikJLyogQmxvY2sgbGVuZ3RoICovCiAKICNkZWZpbmUgQVQ5MV9NQ0lfUlNQUihuKQkoMHgyMCArICgobikgKiA0KSkJLyogUmVzcG9uc2UgUmVnaXN0ZXJzIDAtMyAqLwogI2RlZmluZSBBVDkxX01DUl9SRFIJCTB4MzAJCS8qIFJlY2VpdmUgRGF0YSBSZWdpc3RlciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9pMmMuaCBiL2FyY2gvYXJtL21hY2gtZGF2aW5jaS9pbmNsdWRlL21hY2gvaTJjLmgKaW5kZXggMzlmZGNlYS4uMjMxMmQxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1kYXZpbmNpL2luY2x1ZGUvbWFjaC9pMmMuaAorKysgYi9hcmNoL2FybS9tYWNoLWRhdmluY2kvaW5jbHVkZS9tYWNoL2kyYy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIERhVmluY2kgSTJDIGNvbnRyb2xsZXIgcGxhdGZyb21fZGV2aWNlIGluZm8KKyAqIERhVmluY2kgSTJDIGNvbnRyb2xsZXIgcGxhdGZvcm1fZGV2aWNlIGluZm8KICAqCiAgKiBBdXRob3I6IFZsYWRpbWlyIEJhcmlub3YsIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgogICoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZG92ZS9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtZG92ZS9jb21tb24uYwppbmRleCA4MDY5NzJhLi41ZGEyY2Y0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWRvdmUvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1kb3ZlL2NvbW1vbi5jCkBAIC02MDUsNyArNjA1LDcgQEAKIAkuZGV2CQk9IHsKIAkJLmRtYV9tYXNrCQk9ICZkb3ZlX3hvcjBfZG1hbWFzaywKIAkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDY0KSwKLQkJLnBsYXRmb3JtX2RhdGEJCT0gKHZvaWQgKikmZG92ZV94b3IwMF9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmZG92ZV94b3IwMF9kYXRhLAogCX0sCiB9OwogCkBAIC02MzEsNyArNjMxLDcgQEAKIAkuZGV2CQk9IHsKIAkJLmRtYV9tYXNrCQk9ICZkb3ZlX3hvcjBfZG1hbWFzaywKIAkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDY0KSwKLQkJLnBsYXRmb3JtX2RhdGEJCT0gKHZvaWQgKikmZG92ZV94b3IwMV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmZG92ZV94b3IwMV9kYXRhLAogCX0sCiB9OwogCkBAIC03MDQsNyArNzA0LDcgQEAKIAkuZGV2CQk9IHsKIAkJLmRtYV9tYXNrCQk9ICZkb3ZlX3hvcjFfZG1hbWFzaywKIAkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDY0KSwKLQkJLnBsYXRmb3JtX2RhdGEJCT0gKHZvaWQgKikmZG92ZV94b3IxMF9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmZG92ZV94b3IxMF9kYXRhLAogCX0sCiB9OwogCkBAIC03MzAsNyArNzMwLDcgQEAKIAkuZGV2CQk9IHsKIAkJLmRtYV9tYXNrCQk9ICZkb3ZlX3hvcjFfZG1hbWFzaywKIAkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDY0KSwKLQkJLnBsYXRmb3JtX2RhdGEJCT0gKHZvaWQgKikmZG92ZV94b3IxMV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmZG92ZV94b3IxMV9kYXRhLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvdHM3Mnh4LmggYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9pbmNsdWRlL21hY2gvdHM3Mnh4LmgKaW5kZXggM2JkOTM0ZS4uOTMxMDdkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1lcDkzeHgvaW5jbHVkZS9tYWNoL3RzNzJ4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2luY2x1ZGUvbWFjaC90czcyeHguaApAQCAtNjUsNiArNjUsOCBAQAogI2RlZmluZSBUUzcyWFhfUlRDX0RBVEFfUEhZU19CQVNFCTB4MTE3MDAwMDAKICNkZWZpbmUgVFM3MlhYX1JUQ19EQVRBX1NJWkUJCTB4MDAwMDEwMDAKIAorI2RlZmluZSBUUzcyWFhfV0RUX0NPTlRST0xfUEhZU19CQVNFCTB4MjM4MDAwMDAKKyNkZWZpbmUgVFM3MlhYX1dEVF9GRUVEX1BIWVNfQkFTRQkweDIzYzAwMDAwCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L21pY3JvOS5jIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvbWljcm85LmMKaW5kZXggZjM3NTdhMS4uYzMzMzYwZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L21pY3JvOS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L21pY3JvOS5jCkBAIC0yOCw3ICsyOCw3IEBACiAgKgogICogTWljcm85LUhpZ2ggaGFzIHVwIHRvIDY0TUIgb2YgMzItYml0IGZsYXNoIG9uIENTMQogICogTWljcm85LU1pZCBoYXMgdXAgdG8gNjRNQiBvZiBlaXRoZXIgMzItYml0IG9yIDE2LWJpdCBmbGFzaCBvbiBDUzEKLSAqIE1pY3JvOS1MaXRlIHVzZXMgYSBzZXBlcmF0ZSBNVEQgbWFwIGRyaXZlciBmb3IgZmxhc2ggc3VwcG9ydAorICogTWljcm85LUxpdGUgdXNlcyBhIHNlcGFyYXRlIE1URCBtYXAgZHJpdmVyIGZvciBmbGFzaCBzdXBwb3J0CiAgKiBNaWNybzktU2xpbSBoYXMgdXAgdG8gNjRNQiBvZiBlaXRoZXIgMzItYml0IG9yIDE2LWJpdCBmbGFzaCBvbiBDUzEKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbWljcm85X2ZsYXNoX2RhdGE7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC90czcyeHguYyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L3RzNzJ4eC5jCmluZGV4IDI1OWY3ODIuLmZhYzFlYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L3RzNzJ4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L3RzNzJ4eC5jCkBAIC0xNjYsNiArMTY2LDI2IEBACiAJLm51bV9yZXNvdXJjZXMJPSAwLAogfTsKIAorc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0czcyeHhfd2R0X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gVFM3MlhYX1dEVF9DT05UUk9MX1BIWVNfQkFTRSwKKwkJLmVuZAk9IFRTNzJYWF9XRFRfQ09OVFJPTF9QSFlTX0JBU0UgKyBTWl80SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBUUzcyWFhfV0RUX0ZFRURfUEhZU19CQVNFLAorCQkuZW5kCT0gVFM3MlhYX1dEVF9GRUVEX1BIWVNfQkFTRSArIFNaXzRLIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRzNzJ4eF93ZHRfZGV2aWNlID0geworCS5uYW1lCQk9ICJ0czcyeHgtd2R0IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMgCT0gQVJSQVlfU0laRSh0czcyeHhfd2R0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gdHM3Mnh4X3dkdF9yZXNvdXJjZXMsCit9OworCiBzdGF0aWMgc3RydWN0IGVwOTN4eF9ldGhfZGF0YSB0czcyeHhfZXRoX2RhdGEgPSB7CiAJLnBoeV9pZAkJPSAxLAogfTsKQEAgLTE3NSw2ICsxOTUsNyBAQAogCWVwOTN4eF9pbml0X2RldmljZXMoKTsKIAl0czcyeHhfcmVnaXN0ZXJfZmxhc2goKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnRzNzJ4eF9ydGNfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnRzNzJ4eF93ZHRfZGV2aWNlKTsKIAogCWVwOTN4eF9yZWdpc3Rlcl9ldGgoJnRzNzJ4eF9ldGhfZGF0YSwgMSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24tcGNpLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24tcGNpLmMKaW5kZXggYzRhMDE1OS4uZTMxODE1MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvY29tbW9uLXBjaS5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi1wY2kuYwpAQCAtNTAyLDMyICs1MDIsNiBAQAogCXJldHVybiBwY2lfc2Nhbl9idXMoc3lzLT5idXNuciwgJml4cDR4eF9vcHMsIHN5cyk7CiB9CiAKLS8qCi0gKiBXZSBvdmVycmlkZSB0aGVzZSBzbyB3ZSBwcm9wZXJseSBkbyBkbWFib3VuY2Ugb3RoZXJ3aXNlIGRyaXZlcnMKLSAqIGFyZSBhYmxlIHRvIHNldCB0aGUgZG1hX21hc2sgdG8gMHhmZmZmZmZmZiBhbmQgd2UgY2FuIG5vIGxvbmdlcgotICogdHJhcCBib3VuY2VzLiA6KAotICoKLSAqIFdlIGp1c3QgcmV0dXJuIHRydWUgb24gZXZlcnloaW5nIGV4Y2VwdCBmb3IgPCA2NE1CIGluIHdoaWNoIGNhc2UgCi0gKiB3ZSB3aWxsIGZhaWwgbWlzZXJhbGJ5IGFuZCBkaWUgc2luY2Ugd2UgY2FuJ3QgaGFuZGxlIHRoYXQgY2FzZS4KLSAqLwotaW50Ci1wY2lfc2V0X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU2NCBtYXNrKQotewotCWlmIChtYXNrID49IFNaXzY0TSAtIDEgKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAtRUlPOwotfQotICAgIAotaW50Ci1wY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IG1hc2spCi17Ci0JaWYgKG1hc2sgPj0gU1pfNjRNIC0gMSApCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIC1FSU87Ci19Ci0KIEVYUE9SVF9TWU1CT0woaXhwNHh4X3BjaV9yZWFkKTsKIEVYUE9SVF9TWU1CT0woaXhwNHh4X3BjaV93cml0ZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggZjlkMWM0My4uZjkxY2E2ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTI2LDExICsyNiw2IEBACiAjZGVmaW5lIFBDSUJJT1NfTUFYX01FTQkJMHg0QkZGRkZGRgogI2VuZGlmCiAKLS8qCi0gKiBXZSBvdmVycmlkZSB0aGUgc3RhbmRhcmQgZG1hLW1hc2sgcm91dGluZXMgZm9yIGJvdW5jaW5nLgotICovCi0jZGVmaW5lCUhBVkVfQVJDSF9QQ0lfU0VUX0RNQV9NQVNLCi0KICNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCTEKIAogLyogUmVnaXN0ZXIgbG9jYXRpb25zIGFuZCBiaXRzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL0tjb25maWcKaW5kZXggZjZjNjE5Ni4uMTc4NzlhOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvS2NvbmZpZwpAQCAtMzIsNiArMzIsMTIgQEAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQogCSAgTWFydmVsbCBTaGVldmFQbHVnIFJlZmVyZW5jZSBCb2FyZC4KIAorY29uZmlnIE1BQ0hfRVNBVEFfU0hFRVZBUExVRworCWJvb2wgIk1hcnZlbGwgZVNBVEEgU2hlZXZhUGx1ZyBSZWZlcmVuY2UgQm9hcmQiCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCisJICBNYXJ2ZWxsIGVTQVRBIFNoZWV2YVBsdWcgUmVmZXJlbmNlIEJvYXJkLgorCiBjb25maWcgTUFDSF9UUzIxOQogCWJvb2wgIlFOQVAgVFMtMTEwLCBUUy0xMTksIFRTLTIxMCwgVFMtMjE5IGFuZCBUUy0yMTlQIFR1cmJvIE5BUyIKIAloZWxwCkBAIC00NiwxOCArNTIsMzUgQEAKIAkgIFFOQVAgVFMtNDEwLCBUUy00MTBVLCBUUy00MTlQIGFuZCBUUy00MTlVIFR1cmJvIE5BUwogCSAgZGV2aWNlcy4KIAorY29uZmlnIE1BQ0hfT1BFTlJECisgICAgICAgIGJvb2wKKwogY29uZmlnIE1BQ0hfT1BFTlJEX0JBU0UKIAlib29sICJNYXJ2ZWxsIE9wZW5SRCBCYXNlIEJvYXJkIgorCXNlbGVjdCBNQUNIX09QRU5SRAogCWhlbHAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQogCSAgTWFydmVsbCBPcGVuUkQgQmFzZSBCb2FyZC4KIAorY29uZmlnIE1BQ0hfT1BFTlJEX0NMSUVOVAorCWJvb2wgIk1hcnZlbGwgT3BlblJEIENsaWVudCBCb2FyZCIKKwlzZWxlY3QgTUFDSF9PUEVOUkQKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKKwkgIE1hcnZlbGwgT3BlblJEIENsaWVudCBCb2FyZC4KKwogY29uZmlnIE1BQ0hfTkVUU1BBQ0VfVjIKIAlib29sICJMYUNpZSBOZXR3b3JrIFNwYWNlIHYyIE5BUyBCb2FyZCIKIAloZWxwCiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKIAkgIExhQ2llIE5ldHdvcmsgU3BhY2UgdjIgTkFTLgogCitjb25maWcgTUFDSF9JTkVUU1BBQ0VfVjIKKwlib29sICJMYUNpZSBJbnRlcm5ldCBTcGFjZSB2MiBOQVMgQm9hcmQiCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCisJICBMYUNpZSBJbnRlcm5ldCBTcGFjZSB2MiBOQVMuCisKIGVuZG1lbnUKIAogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL01ha2VmaWxlCmluZGV4IGQ0ZDdmNTMuLmE1NTMwZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9NYWtlZmlsZQpAQCAtNSw5ICs1LDExIEBACiBvYmotJChDT05GSUdfTUFDSF9SRDg4RjYyODEpCQkrPSByZDg4ZjYyODEtc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfTVY4OEY2MjgxR1RXX0dFKQkrPSBtdjg4ZjYyODFndHdfZ2Utc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfU0hFRVZBUExVRykJCSs9IHNoZWV2YXBsdWctc2V0dXAubworb2JqLSQoQ09ORklHX01BQ0hfRVNBVEFfU0hFRVZBUExVRykJKz0gc2hlZXZhcGx1Zy1zZXR1cC5vCiBvYmotJChDT05GSUdfTUFDSF9UUzIxOSkJCSs9IHRzMjE5LXNldHVwLm8gdHN4MXgtY29tbW9uLm8KIG9iai0kKENPTkZJR19NQUNIX1RTNDFYKQkJKz0gdHM0MXgtc2V0dXAubyB0c3gxeC1jb21tb24ubwotb2JqLSQoQ09ORklHX01BQ0hfT1BFTlJEX0JBU0UpCQkrPSBvcGVucmRfYmFzZS1zZXR1cC5vCitvYmotJChDT05GSUdfTUFDSF9PUEVOUkQpCQkrPSBvcGVucmQtc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfTkVUU1BBQ0VfVjIpCQkrPSBuZXRzcGFjZV92Mi1zZXR1cC5vCitvYmotJChDT05GSUdfTUFDSF9JTkVUU1BBQ0VfVjIpCQkrPSBuZXRzcGFjZV92Mi1zZXR1cC5vCiAKIG9iai0kKENPTkZJR19DUFVfSURMRSkJCQkrPSBjcHVpZGxlLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL2NvbW1vbi5jCmluZGV4IDI0MmRkMDcuLmY3NTljYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2QvY29tbW9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9jb21tb24uYwpAQCAtNjU2LDcgKzY1Niw3IEBACiAJLmRldgkJPSB7CiAJCS5kbWFfbWFzawkJPSAma2lya3dvb2RfeG9yX2RtYW1hc2ssCiAJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSyg2NCksCi0JCS5wbGF0Zm9ybV9kYXRhCQk9ICh2b2lkICopJmtpcmt3b29kX3hvcjAwX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZraXJrd29vZF94b3IwMF9kYXRhLAogCX0sCiB9OwogCkBAIC02ODIsNyArNjgyLDcgQEAKIAkuZGV2CQk9IHsKIAkJLmRtYV9tYXNrCQk9ICZraXJrd29vZF94b3JfZG1hbWFzaywKIAkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDY0KSwKLQkJLnBsYXRmb3JtX2RhdGEJCT0gKHZvaWQgKikma2lya3dvb2RfeG9yMDFfZGF0YSwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmtpcmt3b29kX3hvcjAxX2RhdGEsCiAJfSwKIH07CiAKQEAgLTc1NSw3ICs3NTUsNyBAQAogCS5kZXYJCT0gewogCQkuZG1hX21hc2sJCT0gJmtpcmt3b29kX3hvcl9kbWFtYXNrLAogCQkuY29oZXJlbnRfZG1hX21hc2sJPSBETUFfQklUX01BU0soNjQpLAotCQkucGxhdGZvcm1fZGF0YQkJPSAodm9pZCAqKSZraXJrd29vZF94b3IxMF9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQkJPSAma2lya3dvb2RfeG9yMTBfZGF0YSwKIAl9LAogfTsKIApAQCAtNzgxLDcgKzc4MSw3IEBACiAJLmRldgkJPSB7CiAJCS5kbWFfbWFzawkJPSAma2lya3dvb2RfeG9yX2RtYW1hc2ssCiAJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSyg2NCksCi0JCS5wbGF0Zm9ybV9kYXRhCQk9ICh2b2lkICopJmtpcmt3b29kX3hvcjExX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZraXJrd29vZF94b3IxMV9kYXRhLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWtpcmt3b29kL25ldHNwYWNlX3YyLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL25ldHNwYWNlX3YyLXNldHVwLmMKaW5kZXggOWEwNjQwNi4uM2FlMTU4ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9uZXRzcGFjZV92Mi1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gta2lya3dvb2QvbmV0c3BhY2VfdjItc2V0dXAuYwpAQCAtMTgyLDggKzE4MiwxNCBAQAogCiBzdGF0aWMgc3RydWN0IGdwaW9fbGVkIG5ldHNwYWNlX3YyX2dwaW9fbGVkX3BpbnNbXSA9IHsKIAl7Ci0JCS5uYW1lCT0gIm5zX3YyOnJlZDpmYWlsIiwKLQkJLmdwaW8JPSBORVRTUEFDRV9WMl9HUElPX1JFRF9MRUQsCisJCS5uYW1lCQkJPSAibnNfdjI6Ymx1ZTpzYXRhIiwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJkZWZhdWx0LW9uIiwKKwkJLmdwaW8JCQk9IE5FVFNQQUNFX1YyX0dQSU9fQkxVRV9MRURfQ01ELAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCX0sCisJeworCQkubmFtZQkJCT0gIm5zX3YyOnJlZDpmYWlsIiwKKwkJLmdwaW8JCQk9IE5FVFNQQUNFX1YyX0dQSU9fUkVEX0xFRCwKIAl9LAogfTsKIApAQCAtMjAyLDMwICsyMDgsMTkgQEAKIAogc3RhdGljIHZvaWQgX19pbml0IG5ldHNwYWNlX3YyX2dwaW9fbGVkc19pbml0KHZvaWQpCiB7CisJaW50IGVycjsKKworCS8qIENvbmZpZ3VyZSByZWdpc3RlciBzbG93X2xlZCB0byBhbGxvdyBTQVRBIGFjdGl2aXR5IExFRCBibGlua2luZyAqLworCWVyciA9IGdwaW9fcmVxdWVzdChORVRTUEFDRV9WMl9HUElPX0JMVUVfTEVEX1NMT1csICJibHVlIExFRCBzbG93Iik7CisJaWYgKGVyciA9PSAwKSB7CisJCWVyciA9IGdwaW9fZGlyZWN0aW9uX291dHB1dChORVRTUEFDRV9WMl9HUElPX0JMVUVfTEVEX1NMT1csIDApOworCQlpZiAoZXJyKQorCQkJZ3Bpb19mcmVlKE5FVFNQQUNFX1YyX0dQSU9fQkxVRV9MRURfU0xPVyk7CisJfQorCWlmIChlcnIpCisJCXByX2VycigibmV0c3BhY2VfdjI6IGZhaWxlZCB0byBjb25maWd1cmUgYmx1ZSBMRUQgc2xvdyBHUElPXG4iKTsKKwogCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbmV0c3BhY2VfdjJfZ3Bpb19sZWRzKTsKLQotCS8qCi0JICogQ29uZmlndXJlIHRoZSBmcm9udCBibHVlIExFRCB0byBibGluayBpbiByZWxhdGlvbiB3aXRoIHRoZSBTQVRBCi0JICogYWN0aXZpdHkuCi0JICovCi0JaWYgKGdwaW9fcmVxdWVzdChORVRTUEFDRV9WMl9HUElPX0JMVUVfTEVEX1NMT1csCi0JCQkgIlNBVEEgYmx1ZSBMRUQgc2xvdyIpICE9IDApCi0JCXJldHVybjsKLQlpZiAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE5FVFNQQUNFX1YyX0dQSU9fQkxVRV9MRURfU0xPVywgMCkgIT0gMCkKLQkJZ290byBlcnJfZnJlZV8xOwotCWlmIChncGlvX3JlcXVlc3QoTkVUU1BBQ0VfVjJfR1BJT19CTFVFX0xFRF9DTUQsCi0JCQkgIlNBVEEgYmx1ZSBMRUQgY29tbWFuZCIpICE9IDApCi0JCWdvdG8gZXJyX2ZyZWVfMTsKLQlpZiAoZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE5FVFNQQUNFX1YyX0dQSU9fQkxVRV9MRURfQ01ELCAwKSAhPSAwKQotCQlnb3RvIGVycl9mcmVlXzI7Ci0KLQlyZXR1cm47Ci0KLWVycl9mcmVlXzI6Ci0JZ3Bpb19mcmVlKE5FVFNQQUNFX1YyX0dQSU9fQkxVRV9MRURfQ01EKTsKLWVycl9mcmVlXzE6Ci0JZ3Bpb19mcmVlKE5FVFNQQUNFX1YyX0dQSU9fQkxVRV9MRURfU0xPVyk7Ci0JcHJfZXJyKCJuZXRzcGFjZV92MjogZmFpbGVkIHRvIGNvbmZpZ3VyZSBTQVRBIGJsdWUgTEVEXG4iKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0zMTQsNiArMzA5LDcgQEAKIAkJcHJfZXJyKCJuZXRzcGFjZV92MjogZmFpbGVkIHRvIGNvbmZpZ3VyZSBwb3dlci1vZmYgR1BJT1xuIik7CiB9CiAKKyNpZmRlZiBDT05GSUdfTUFDSF9ORVRTUEFDRV9WMgogTUFDSElORV9TVEFSVChORVRTUEFDRV9WMiwgIkxhQ2llIE5ldHdvcmsgU3BhY2UgdjIiKQogCS5waHlzX2lvCT0gS0lSS1dPT0RfUkVHU19QSFlTX0JBU0UsCiAJLmlvX3BnX29mZnN0CT0gKChLSVJLV09PRF9SRUdTX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLApAQCAtMzIzLDMgKzMxOSwxNiBAQAogCS5pbml0X2lycQk9IGtpcmt3b29kX2luaXRfaXJxLAogCS50aW1lcgkJPSAmbmV0c3BhY2VfdjJfdGltZXIsCiBNQUNISU5FX0VORAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9JTkVUU1BBQ0VfVjIKK01BQ0hJTkVfU1RBUlQoSU5FVFNQQUNFX1YyLCAiTGFDaWUgSW50ZXJuZXQgU3BhY2UgdjIiKQorCS5waHlzX2lvCT0gS0lSS1dPT0RfUkVHU19QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChLSVJLV09PRF9SRUdTX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLmluaXRfbWFjaGluZQk9IG5ldHNwYWNlX3YyX2luaXQsCisJLm1hcF9pbwkJPSBraXJrd29vZF9tYXBfaW8sCisJLmluaXRfaXJxCT0ga2lya3dvb2RfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZuZXRzcGFjZV92Ml90aW1lciwKK01BQ0hJTkVfRU5ECisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvb3BlbnJkLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZC1zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkM2YxZWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZC1zZXR1cC5jCkBAIC0wLDAgKzEsMTE4IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1raXJrd29vZC9vcGVucmQtc2V0dXAuYworICoKKyAqIE1hcnZlbGwgT3BlblJEIChCYXNlfENsaWVudCkgQm9hcmQgU2V0dXAKKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPG1hY2gva2lya3dvb2QuaD4KKyNpbmNsdWRlIDxwbGF0L212c2Rpby5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgIm1wcC5oIgorCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gb3BlbnJkX25hbmRfcGFydHNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJ1LWJvb3QiLAorCQkub2Zmc2V0CQk9IDAsCisJCS5zaXplCQk9IFNaXzFNLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUKKwl9LCB7CisJCS5uYW1lCQk9ICJ1SW1hZ2UiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX05YVEJMSywKKwkJLnNpemUJCT0gU1pfNE0KKwl9LCB7CisJCS5uYW1lCQk9ICJyb290IiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19OWFRCTEssCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIG9wZW5yZF9nZTAwX2RhdGEgPSB7CisJLnBoeV9hZGRyCT0gTVY2NDNYWF9FVEhfUEhZX0FERFIoOCksCit9OworCitzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgb3BlbnJkX2dlMDFfZGF0YSA9IHsKKwkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfQUREUigyNCksCit9OworCitzdGF0aWMgc3RydWN0IG12X3NhdGFfcGxhdGZvcm1fZGF0YSBvcGVucmRfc2F0YV9kYXRhID0geworCS5uX3BvcnRzCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXZzZGlvX3BsYXRmb3JtX2RhdGEgb3BlbnJkX212c2Rpb19kYXRhID0geworCS5ncGlvX2NhcmRfZGV0ZWN0ID0gMjksCS8qIE1QUDI5IHVzZWQgYXMgU0QgY2FyZCBkZXRlY3QgKi8KK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb3BlbnJkX21wcF9jb25maWdbXSBfX2luaXRkYXRhID0geworCU1QUDI5X0dQSU8sCisJMAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9wZW5yZF9pbml0KHZvaWQpCit7CisJLyoKKwkgKiBCYXNpYyBzZXR1cC4gTmVlZHMgdG8gYmUgY2FsbGVkIGVhcmx5LgorCSAqLworCWtpcmt3b29kX2luaXQoKTsKKwlraXJrd29vZF9tcHBfY29uZihvcGVucmRfbXBwX2NvbmZpZyk7CisKKwlraXJrd29vZF91YXJ0MF9pbml0KCk7CisJa2lya3dvb2RfbmFuZF9pbml0KEFSUkFZX0FORF9TSVpFKG9wZW5yZF9uYW5kX3BhcnRzKSwgMjUpOworCisJa2lya3dvb2RfZWhjaV9pbml0KCk7CisKKwlraXJrd29vZF9nZTAwX2luaXQoJm9wZW5yZF9nZTAwX2RhdGEpOworCWlmIChtYWNoaW5lX2lzX29wZW5yZF9jbGllbnQoKSkKKwkJa2lya3dvb2RfZ2UwMV9pbml0KCZvcGVucmRfZ2UwMV9kYXRhKTsKKwlraXJrd29vZF9zYXRhX2luaXQoJm9wZW5yZF9zYXRhX2RhdGEpOworCWtpcmt3b29kX3NkaW9faW5pdCgmb3BlbnJkX212c2Rpb19kYXRhKTsKKworCWtpcmt3b29kX2kyY19pbml0KCk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG9wZW5yZF9wY2lfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX29wZW5yZF9iYXNlKCkgfHwgbWFjaGluZV9pc19vcGVucmRfY2xpZW50KCkpCisJCWtpcmt3b29kX3BjaWVfaW5pdCgpOworCisJcmV0dXJuIDA7Cit9CitzdWJzeXNfaW5pdGNhbGwob3BlbnJkX3BjaV9pbml0KTsKKworI2lmZGVmIENPTkZJR19NQUNIX09QRU5SRF9CQVNFCitNQUNISU5FX1NUQVJUKE9QRU5SRF9CQVNFLCAiTWFydmVsbCBPcGVuUkQgQmFzZSBCb2FyZCIpCisJLyogTWFpbnRhaW5lcjogRGhhdmFsIFZhc2EgPGRoYXZhbC52YXNhQGVpbmZvY2hpcHMuY29tPiAqLworCS5waHlzX2lvCT0gS0lSS1dPT0RfUkVHU19QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChLSVJLV09PRF9SRUdTX1ZJUlRfQkFTRSkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLmluaXRfbWFjaGluZQk9IG9wZW5yZF9pbml0LAorCS5tYXBfaW8JCT0ga2lya3dvb2RfbWFwX2lvLAorCS5pbml0X2lycQk9IGtpcmt3b29kX2luaXRfaXJxLAorCS50aW1lcgkJPSAma2lya3dvb2RfdGltZXIsCitNQUNISU5FX0VORAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9PUEVOUkRfQ0xJRU5UCitNQUNISU5FX1NUQVJUKE9QRU5SRF9DTElFTlQsICJNYXJ2ZWxsIE9wZW5SRCBDbGllbnQgQm9hcmQiKQorCS8qIE1haW50YWluZXI6IERoYXZhbCBWYXNhIDxkaGF2YWwudmFzYUBlaW5mb2NoaXBzLmNvbT4gKi8KKwkucGh5c19pbwk9IEtJUktXT09EX1JFR1NfUEhZU19CQVNFLAorCS5pb19wZ19vZmZzdAk9ICgoS0lSS1dPT0RfUkVHU19WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5pbml0X21hY2hpbmUJPSBvcGVucmRfaW5pdCwKKwkubWFwX2lvCQk9IGtpcmt3b29kX21hcF9pbywKKwkuaW5pdF9pcnEJPSBraXJrd29vZF9pbml0X2lycSwKKwkudGltZXIJCT0gJmtpcmt3b29kX3RpbWVyLAorTUFDSElORV9FTkQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9vcGVucmRfYmFzZS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9vcGVucmRfYmFzZS1zZXR1cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzYxN2M3Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvb3BlbnJkX2Jhc2Utc2V0dXAuYworKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWtpcmt3b29kL29wZW5yZF9iYXNlLXNldHVwLmMKLSAqCi0gKiBNYXJ2ZWxsIE9wZW5SRCBCYXNlIEJvYXJkIFNldHVwCi0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55Ci0gKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGxpbnV4L212NjQzeHhfZXRoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8bWFjaC9raXJrd29vZC5oPgotI2luY2x1ZGUgPHBsYXQvbXZzZGlvLmg+Ci0jaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAibXBwLmgiCi0KLXN0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBvcGVucmRfYmFzZV9uYW5kX3BhcnRzW10gPSB7Ci0JewotCQkubmFtZSA9ICJ1LWJvb3QiLAotCQkub2Zmc2V0ID0gMCwKLQkJLnNpemUgPSBTWl8xTQotCX0sIHsKLQkJLm5hbWUgPSAidUltYWdlIiwKLQkJLm9mZnNldCA9IE1URFBBUlRfT0ZTX05YVEJMSywKLQkJLnNpemUgPSBTWl80TQotCX0sIHsKLQkJLm5hbWUgPSAicm9vdCIsCi0JCS5vZmZzZXQgPSBNVERQQVJUX09GU19OWFRCTEssCi0JCS5zaXplID0gTVREUEFSVF9TSVpfRlVMTAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgb3BlbnJkX2Jhc2VfZ2UwMF9kYXRhID0gewotCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDgpLAotfTsKLQotc3RhdGljIHN0cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGEgb3BlbnJkX2Jhc2Vfc2F0YV9kYXRhID0gewotCS5uX3BvcnRzCT0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXZzZGlvX3BsYXRmb3JtX2RhdGEgb3BlbnJkX2Jhc2VfbXZzZGlvX2RhdGEgPSB7Ci0JLmdwaW9fY2FyZF9kZXRlY3QgPSAyOSwJLyogTVBQMjkgdXNlZCBhcyBTRCBjYXJkIGRldGVjdCAqLwotfTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBvcGVucmRfYmFzZV9tcHBfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKLQlNUFAyOV9HUElPLAotCTAKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBvcGVucmRfYmFzZV9pbml0KHZvaWQpCi17Ci0JLyoKLQkgKiBCYXNpYyBzZXR1cC4gTmVlZHMgdG8gYmUgY2FsbGVkIGVhcmx5LgotCSAqLwotCWtpcmt3b29kX2luaXQoKTsKLQlraXJrd29vZF9tcHBfY29uZihvcGVucmRfYmFzZV9tcHBfY29uZmlnKTsKLQotCWtpcmt3b29kX3VhcnQwX2luaXQoKTsKLQlraXJrd29vZF9uYW5kX2luaXQoQVJSQVlfQU5EX1NJWkUob3BlbnJkX2Jhc2VfbmFuZF9wYXJ0cyksIDI1KTsKLQotCWtpcmt3b29kX2VoY2lfaW5pdCgpOwotCi0Ja2lya3dvb2RfZ2UwMF9pbml0KCZvcGVucmRfYmFzZV9nZTAwX2RhdGEpOwotCWtpcmt3b29kX3NhdGFfaW5pdCgmb3BlbnJkX2Jhc2Vfc2F0YV9kYXRhKTsKLQlraXJrd29vZF9zZGlvX2luaXQoJm9wZW5yZF9iYXNlX212c2Rpb19kYXRhKTsKLQotCWtpcmt3b29kX2kyY19pbml0KCk7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IG9wZW5yZF9iYXNlX3BjaV9pbml0KHZvaWQpCi17Ci0JaWYgKG1hY2hpbmVfaXNfb3BlbnJkX2Jhc2UoKSkKLQkJa2lya3dvb2RfcGNpZV9pbml0KCk7Ci0KLQlyZXR1cm4gMDsKLSB9Ci1zdWJzeXNfaW5pdGNhbGwob3BlbnJkX2Jhc2VfcGNpX2luaXQpOwotCi0KLU1BQ0hJTkVfU1RBUlQoT1BFTlJEX0JBU0UsICJNYXJ2ZWxsIE9wZW5SRCBCYXNlIEJvYXJkIikKLQkvKiBNYWludGFpbmVyOiBEaGF2YWwgVmFzYSA8ZGhhdmFsLnZhc2FAZWluZm9jaGlwcy5jb20+ICovCi0JLnBoeXNfaW8JPSBLSVJLV09PRF9SRUdTX1BIWVNfQkFTRSwKLQkuaW9fcGdfb2Zmc3QJPSAoKEtJUktXT09EX1JFR1NfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKLQkuaW5pdF9tYWNoaW5lCT0gb3BlbnJkX2Jhc2VfaW5pdCwKLQkubWFwX2lvCQk9IGtpcmt3b29kX21hcF9pbywKLQkuaW5pdF9pcnEJPSBraXJrd29vZF9pbml0X2lycSwKLQkudGltZXIJCT0gJmtpcmt3b29kX3RpbWVyLAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gta2lya3dvb2Qvc2hlZXZhcGx1Zy1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9zaGVldmFwbHVnLXNldHVwLmMKaW5kZXggYzczMTllZS4uYTAwODc5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9zaGVldmFwbHVnLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1raXJrd29vZC9zaGVldmFwbHVnLXNldHVwLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KICNpbmNsdWRlIDxsaW51eC9tdjY0M3h4X2V0aC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KQEAgLTQyLDEwICs0MywxOSBAQAogCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDApLAogfTsKIAorc3RhdGljIHN0cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGEgc2hlZXZhX2VzYXRhX3NhdGFfZGF0YSA9IHsKKwkubl9wb3J0cwk9IDIsCit9OworCiBzdGF0aWMgc3RydWN0IG12c2Rpb19wbGF0Zm9ybV9kYXRhIHNoZWV2YXBsdWdfbXZzZGlvX2RhdGEgPSB7CiAJLyogdW5mb3J0dW5hdGVseSB0aGUgQ0Qgc2lnbmFsIGhhcyBub3QgYmVlbiBjb25uZWN0ZWQgKi8KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbXZzZGlvX3BsYXRmb3JtX2RhdGEgc2hlZXZhX2VzYXRhX212c2Rpb19kYXRhID0geworCS5ncGlvX3dyaXRlX3Byb3RlY3QgPSA0NCwgLyogTVBQNDQgdXNlZCBhcyBTRCB3cml0ZSBwcm90ZWN0ICovCisJLmdwaW9fY2FyZF9kZXRlY3QgPSA0NywJICAvKiBNUFA0NyB1c2VkIGFzIFNEIGNhcmQgZGV0ZWN0ICovCit9OworCiBzdGF0aWMgc3RydWN0IGdwaW9fbGVkIHNoZWV2YXBsdWdfbGVkX3BpbnNbXSA9IHsKIAl7CiAJCS5uYW1lCQkJPSAicGx1ZzpncmVlbjpoZWFsdGgiLApAQCAtNzQsMTMgKzg0LDI2IEBACiAJMAogfTsKIAorc3RhdGljIHVuc2lnbmVkIGludCBzaGVldmFfZXNhdGFfbXBwX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJTVBQMjlfR1BJTywJLyogVVNCIFBvd2VyIEVuYWJsZSAqLworCU1QUDQ0X0dQSU8sCS8qIFNEIFdyaXRlIFByb3RlY3QgKi8KKwlNUFA0N19HUElPLAkvKiBTRCBDYXJkIERldGVjdCAqLworCU1QUDQ5X0dQSU8sCS8qIExFRCBHcmVlbiAqLworCTAKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBzaGVldmFwbHVnX2luaXQodm9pZCkKIHsKIAkvKgogCSAqIEJhc2ljIHNldHVwLiBOZWVkcyB0byBiZSBjYWxsZWQgZWFybHkuCiAJICovCiAJa2lya3dvb2RfaW5pdCgpOwotCWtpcmt3b29kX21wcF9jb25mKHNoZWV2YXBsdWdfbXBwX2NvbmZpZyk7CisKKwkvKiBzZXR1cCBncGlvIHBpbiBzZWxlY3QgKi8KKwlpZiAobWFjaGluZV9pc19zaGVldmFfZXNhdGEoKSkKKwkJa2lya3dvb2RfbXBwX2NvbmYoc2hlZXZhX2VzYXRhX21wcF9jb25maWcpOworCWVsc2UKKwkJa2lya3dvb2RfbXBwX2NvbmYoc2hlZXZhcGx1Z19tcHBfY29uZmlnKTsKIAogCWtpcmt3b29kX3VhcnQwX2luaXQoKTsKIAlraXJrd29vZF9uYW5kX2luaXQoQVJSQVlfQU5EX1NJWkUoc2hlZXZhcGx1Z19uYW5kX3BhcnRzKSwgMjUpOwpAQCAtOTEsMTEgKzExNCwyMSBAQAogCWtpcmt3b29kX2VoY2lfaW5pdCgpOwogCiAJa2lya3dvb2RfZ2UwMF9pbml0KCZzaGVldmFwbHVnX2dlMDBfZGF0YSk7Ci0Ja2lya3dvb2Rfc2Rpb19pbml0KCZzaGVldmFwbHVnX212c2Rpb19kYXRhKTsKKworCS8qIGhvbm9yIGxvd2VyIHBvd2VyIGNvbnN1bXB0aW9uIGZvciBwbHVncyB3aXRoIG91dCBlU0FUQSAqLworCWlmIChtYWNoaW5lX2lzX3NoZWV2YV9lc2F0YSgpKQorCQlraXJrd29vZF9zYXRhX2luaXQoJnNoZWV2YV9lc2F0YV9zYXRhX2RhdGEpOworCisJLyogZW5hYmxlIHNkIHdwIGFuZCBzZCBjZCBvbiBwbHVncyB3aXRoIGVzYXRhICovCisJaWYgKG1hY2hpbmVfaXNfc2hlZXZhX2VzYXRhKCkpCisJCWtpcmt3b29kX3NkaW9faW5pdCgmc2hlZXZhX2VzYXRhX212c2Rpb19kYXRhKTsKKwllbHNlCisJCWtpcmt3b29kX3NkaW9faW5pdCgmc2hlZXZhcGx1Z19tdnNkaW9fZGF0YSk7CiAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNoZWV2YXBsdWdfbGVkcyk7CiB9CiAKKyNpZmRlZiBDT05GSUdfTUFDSF9TSEVFVkFQTFVHCiBNQUNISU5FX1NUQVJUKFNIRUVWQVBMVUcsICJNYXJ2ZWxsIFNoZWV2YVBsdWcgUmVmZXJlbmNlIEJvYXJkIikKIAkvKiBNYWludGFpbmVyOiBzaGFkaSBBbW1vdXJpIDxzaGFkaUBtYXJ2ZWxsLmNvbT4gKi8KIAkucGh5c19pbwk9IEtJUktXT09EX1JFR1NfUEhZU19CQVNFLApAQCAtMTA2LDMgKzEzOSwxNiBAQAogCS5pbml0X2lycQk9IGtpcmt3b29kX2luaXRfaXJxLAogCS50aW1lcgkJPSAma2lya3dvb2RfdGltZXIsCiBNQUNISU5FX0VORAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9FU0FUQV9TSEVFVkFQTFVHCitNQUNISU5FX1NUQVJUKEVTQVRBX1NIRUVWQVBMVUcsICJNYXJ2ZWxsIGVTQVRBIFNoZWV2YVBsdWcgUmVmZXJlbmNlIEJvYXJkIikKKwkucGh5c19pbwk9IEtJUktXT09EX1JFR1NfUEhZU19CQVNFLAorCS5pb19wZ19vZmZzdAk9ICgoS0lSS1dPT0RfUkVHU19WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5pbml0X21hY2hpbmUJPSBzaGVldmFwbHVnX2luaXQsCisJLm1hcF9pbwkJPSBraXJrd29vZF9tYXBfaW8sCisJLmluaXRfaXJxCT0ga2lya3dvb2RfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZraXJrd29vZF90aW1lciwKK01BQ0hJTkVfRU5ECisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW1tcC9LY29uZmlnCmluZGV4IGM2YTU2NGYuLjZhYjg0M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGlmIEFSQ0hfTU1QCiAKLW1lbnUgIk1hcnZlbGwgUFhBMTY4LzkxMCBJbXBsbWVudGF0aW9ucyIKK21lbnUgIk1hcnZlbGwgUFhBMTY4LzkxMC9NTVAyIEltcGxtZW50YXRpb25zIgogCiBjb25maWcgTUFDSF9BU1BFTklURQogCWJvb2wgIk1hcnZlbGwncyBQWEExNjggQXNwZW5pdGUgRGV2ZWxvcG1lbnQgQm9hcmQiCkBAIC0xNiw2ICsxNiwxMyBAQAogCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhlIE1hcnZlbGwgUFhBMTY4LWJhc2VkCiAJICBaeWxvbml0ZTIgRGV2ZWxvcG1lbnQgQm9hcmQuCiAKK2NvbmZpZyBNQUNIX0FWRU5HRVJTX0xJVEUKKwlib29sICJNYXJ2ZWxsJ3MgUFhBMTY4IEF2ZW5nZXJzIExpdGUgRGV2ZWxvcG1lbnQgQm9hcmQiCisJc2VsZWN0IENQVV9QWEExNjgKKwloZWxwCisJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgdG8gc3VwcG9ydCB0aGUgTWFydmVsbCBQWEExNjgtYmFzZWQKKwkgIEF2ZW5nZXJzIExpdGUgRGV2ZWxvcG1lbnQgQm9hcmQuCisKIGNvbmZpZyBNQUNIX1RBVk9SRVZCCiAJYm9vbCAiTWFydmVsbCdzIFBYQTkxMCBUYXZvckVWQiBEZXZlbG9wbWVudCBCb2FyZCIKIAlzZWxlY3QgQ1BVX1BYQTkxMApAQCAtMzAsNiArMzcsMjYgQEAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoZSBNYXJ2ZWxsIFBYQTkxMC1iYXNlZAogCSAgVFRDX0RLQiBEZXZlbG9wbWVudCBCb2FyZC4KIAorY29uZmlnIE1BQ0hfRkxJTlQKKwlib29sICJNYXJ2ZWxsJ3MgRmxpbnQgRGV2ZWxvcG1lbnQgUGxhdGZvcm0iCisJc2VsZWN0IENQVV9NTVAyCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhlIE1hcnZlbGwgTU1QMi1iYXNlZAorCSAgRmxpbnQgRGV2ZWxvcG1lbnQgUGxhdGZvcm0uCisJICBNTVAyLWJhc2VkIGJvYXJkIGNhbid0IGJlIGNvLWV4aXN0ZWQgd2l0aCBQWEExNjgtYmFzZWQgJgorCSAgUFhBOTEwLWJhc2VkIGRldmVsb3BtZW50IGJvYXJkLiBTaW5jZSBNTVAyIGlzIGNvbXBhdGlibGUgdG8KKwkgIEFSTXY2IGFyY2hpdGVjdHVyZS4KKworY29uZmlnIE1BQ0hfTUFSVkVMTF9KQVNQRVIKKwlib29sICJNYXJ2ZWxsJ3MgSmFzcGVyIERldmVsb3BtZW50IFBsYXRmb3JtIgorCXNlbGVjdCBDUFVfTU1QMgorCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoZSBNYXJ2ZWxsIE1NUDItYmFzZQorCSAgSmFzcGVyIERldmVsb3BtZW50IFBsYXRmb3JtLgorCSAgTU1QMi1iYXNlZCBib2FyZCBjYW4ndCBiZSBjby1leGlzdGVkIHdpdGggUFhBMTY4LWJhc2VkICYKKwkgIFBYQTkxMC1iYXNlZCBkZXZlbG9wbWVudCBib2FyZC4gU2luY2UgTU1QMiBpcyBjb21wYXRpYmxlIHRvCisJICBBUk12NiBhcmNoaXRlY3R1cmUuCisKIGVuZG1lbnUKIAogY29uZmlnIENQVV9QWEExNjgKQEAgLTQ0LDQgKzcxLDEwIEBACiAJaGVscAogCSAgU2VsZWN0IGNvZGUgc3BlY2lmaWMgdG8gUFhBOTEwCiAKK2NvbmZpZyBDUFVfTU1QMgorCWJvb2wKKwlzZWxlY3QgQ1BVX1Y2CisJc2VsZWN0IENQVV8zMnY2SworCWhlbHAKKwkgIFNlbGVjdCBjb2RlIHNwZWNpZmljIHRvIE1NUDIuIE1NUDIgaXMgQVJNdjYgY29tcGF0aWJsZS4KIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbW1wL01ha2VmaWxlCmluZGV4IDY4ODNlNjUuLjhiNjZkMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL01ha2VmaWxlCkBAIC0yLDE0ICsyLDE4IEBACiAjIE1ha2VmaWxlIGZvciBNYXJ2ZWxsJ3MgUFhBMTY4IHByb2Nlc3NvcnMgbGluZQogIwogCi1vYmoteQkJCQkrPSBjb21tb24ubyBjbG9jay5vIGRldmljZXMubyBpcnEubyB0aW1lLm8KK29iai15CQkJCSs9IGNvbW1vbi5vIGNsb2NrLm8gZGV2aWNlcy5vIHRpbWUubwogCiAjIFNvQyBzdXBwb3J0Ci1vYmotJChDT05GSUdfQ1BVX1BYQTE2OCkJKz0gcHhhMTY4Lm8KLW9iai0kKENPTkZJR19DUFVfUFhBOTEwKQkrPSBweGE5MTAubworb2JqLSQoQ09ORklHX0NQVV9QWEExNjgpCSs9IHB4YTE2OC5vIGlycS1weGExNjgubworb2JqLSQoQ09ORklHX0NQVV9QWEE5MTApCSs9IHB4YTkxMC5vIGlycS1weGExNjgubworb2JqLSQoQ09ORklHX0NQVV9NTVAyKQkJKz0gbW1wMi5vIGlycS1tbXAyLm8KIAogIyBib2FyZCBzdXBwb3J0CiBvYmotJChDT05GSUdfTUFDSF9BU1BFTklURSkJKz0gYXNwZW5pdGUubwogb2JqLSQoQ09ORklHX01BQ0hfWllMT05JVEUyKQkrPSBhc3Blbml0ZS5vCitvYmotJChDT05GSUdfTUFDSF9BVkVOR0VSU19MSVRFKSs9IGF2ZW5nZXJzX2xpdGUubwogb2JqLSQoQ09ORklHX01BQ0hfVEFWT1JFVkIpCSs9IHRhdm9yZXZiLm8KIG9iai0kKENPTkZJR19NQUNIX1RUQ19ES0IpCSs9IHR0Y19ka2Iubworb2JqLSQoQ09ORklHX01BQ0hfRkxJTlQpCSs9IGZsaW50Lm8KK29iai0kKENPTkZJR19NQUNIX01BUlZFTExfSkFTUEVSKSArPSBqYXNwZXIubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvYXZlbmdlcnNfbGl0ZS5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvYXZlbmdlcnNfbGl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjM2ZhNWQxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvYXZlbmdlcnNfbGl0ZS5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvYXZlbmdlcnNfbGl0ZS5jCisgKgorICogIFN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIFBYQTE2OC1iYXNlZCBBdmVuZ2VycyBsaXRlIERldmVsb3BtZW50IFBsYXRmb3JtLgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGhlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxtYWNoL2FkZHItbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9tZnAtcHhhMTY4Lmg+CisjaW5jbHVkZSA8bWFjaC9weGExNjguaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKworCisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworLyogQXZlbmdlcnMgbGl0ZSBNRlAgY29uZmlndXJhdGlvbnMgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGF2ZW5nZXJzX2xpdGVfcGluX2NvbmZpZ19WMTZGW10gX19pbml0ZGF0YSA9IHsKKwkvKiBERUJVR19VQVJUICovCisJR1BJTzg4X1VBUlQyX1RYRCwKKwlHUElPODlfVUFSVDJfUlhELAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGF2ZW5nZXJzX2xpdGVfaW5pdCh2b2lkKQoreworCW1mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoYXZlbmdlcnNfbGl0ZV9waW5fY29uZmlnX1YxNkYpKTsKKworCS8qIG9uLWNoaXAgZGV2aWNlcyAqLworCXB4YTE2OF9hZGRfdWFydCgyKTsKK30KKworTUFDSElORV9TVEFSVChBVkVOR0VSU19MSVRFLCAiUFhBMTY4IEF2ZW5nZXJzIGxpdGUgRGV2ZWxvcG1lbnQgUGxhdGZvcm0iKQorCS5waHlzX2lvICAgICAgICA9IEFQQl9QSFlTX0JBU0UsCisJLmJvb3RfcGFyYW1zICAgID0gMHgwMDAwMDEwMCwKKwkuaW9fcGdfb2Zmc3QgICAgPSAoQVBCX1ZJUlRfQkFTRSA+PiAxOCkgJiAweGZmZmMsCisJLm1hcF9pbwkJPSBweGFfbWFwX2lvLAorCS5pbml0X2lycSAgICAgICA9IHB4YTE2OF9pbml0X2lycSwKKwkudGltZXIgICAgICAgICAgPSAmcHhhMTY4X3RpbWVyLAorCS5pbml0X21hY2hpbmUgICA9IGF2ZW5nZXJzX2xpdGVfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtbW1wL2NvbW1vbi5oCmluZGV4IGMzM2ZiYmMuLmI0YTBiYTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbW1wL2NvbW1vbi5oCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2NvbW1vbi5oCkBAIC0zLDExICszLDE1IEBACiBzdHJ1Y3Qgc3lzX3RpbWVyOwogCiBleHRlcm4gdm9pZCB0aW1lcl9pbml0KGludCBpcnEpOworZXh0ZXJuIHZvaWQgbW1wMl9jbGVhcl9wbWljX2ludCh2b2lkKTsKIAogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgcHhhMTY4X3RpbWVyOwogZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgcHhhOTEwX3RpbWVyOworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgbW1wMl90aW1lcjsKIGV4dGVybiB2b2lkIF9faW5pdCBweGExNjhfaW5pdF9pcnEodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgcHhhOTEwX2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgX19pbml0IG1tcDJfaW5pdF9pY3Uodm9pZCk7CitleHRlcm4gdm9pZCBfX2luaXQgbW1wMl9pbml0X2lycSh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgX19pbml0IGljdV9pbml0X2lycSh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCBweGFfbWFwX2lvKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvZmxpbnQuYyBiL2FyY2gvYXJtL21hY2gtbW1wL2ZsaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVjNzcwOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2ZsaW50LmMKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvZmxpbnQuYworICoKKyAqICBTdXBwb3J0IGZvciB0aGUgTWFydmVsbCBGbGludCBEZXZlbG9wbWVudCBQbGF0Zm9ybS4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPG1hY2gvYWRkci1tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL21mcC1tbXAyLmg+CisjaW5jbHVkZSA8bWFjaC9tbXAyLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZmxpbnRfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogVUFSVDEgKi8KKwlHUElPNDVfVUFSVDFfUlhELAorCUdQSU80Nl9VQVJUMV9UWEQsCisKKwkvKiBVQVJUMiAqLworCUdQSU80N19VQVJUMl9SWEQsCisJR1BJTzQ4X1VBUlQyX1RYRCwKKworCS8qIFNNQyAqLworCUdQSU8xNTFfU01DX1NDTEssCisJR1BJTzE0NV9TTUNfbkNTMCwKKwlHUElPMTQ2X1NNQ19uQ1MxLAorCUdQSU8xNTJfU01DX0JFMCwKKwlHUElPMTUzX1NNQ19CRTEsCisJR1BJTzE1NF9TTUNfSVJRLAorCUdQSU8xMTNfU01DX1JEWSwKKworCS8qRXRoZXJuZXQqLworCUdQSU8xNTVfR1BJTzE1NSwKKworCS8qIERGSSAqLworCUdQSU8xNjhfREZJX0QwLAorCUdQSU8xNjdfREZJX0QxLAorCUdQSU8xNjZfREZJX0QyLAorCUdQSU8xNjVfREZJX0QzLAorCUdQSU8xMDdfREZJX0Q0LAorCUdQSU8xMDZfREZJX0Q1LAorCUdQSU8xMDVfREZJX0Q2LAorCUdQSU8xMDRfREZJX0Q3LAorCUdQSU8xMTFfREZJX0Q4LAorCUdQSU8xNjRfREZJX0Q5LAorCUdQSU8xNjNfREZJX0QxMCwKKwlHUElPMTYyX0RGSV9EMTEsCisJR1BJTzE2MV9ERklfRDEyLAorCUdQSU8xMTBfREZJX0QxMywKKwlHUElPMTA5X0RGSV9EMTQsCisJR1BJTzEwOF9ERklfRDE1LAorCUdQSU8xNDNfTkRfbkNTMCwKKwlHUElPMTQ0X05EX25DUzEsCisJR1BJTzE0N19ORF9uV0UsCisJR1BJTzE0OF9ORF9uUkUsCisJR1BJTzE1MF9ORF9BTEUsCisJR1BJTzE0OV9ORF9DTEUsCisJR1BJTzExMl9ORF9SRFkwLAorCUdQSU8xNjBfTkRfUkRZMSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc21jOTF4X3BsYXRkYXRhIGZsaW50X3NtYzkxeF9pbmZvID0geworCS5mbGFncyAgPSBTTUM5MVhfVVNFXzE2QklUIHwgU01DOTFYX05PV0FJVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTF4X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ICA9IFNNQ19DUzFfUEhZU19CQVNFICsgMHgzMDAsCisJCS5lbmQgICAgPSBTTUNfQ1MxX1BIWVNfQkFTRSArIDB4ZmZmZmYsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IGdwaW9fdG9faXJxKDE1NSksCisJCS5lbmQgICAgPSBncGlvX3RvX2lycSgxNTUpLAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdIRURHRSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJzbWM5MXgiLAorCS5pZCAgICAgICAgICAgICA9IDAsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZmbGludF9zbWM5MXhfaW5mbywKKwl9LAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoc21jOTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gc21jOTF4X3Jlc291cmNlcywKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBmbGludF9pbml0KHZvaWQpCit7CisJbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShmbGludF9waW5fY29uZmlnKSk7CisKKwkvKiBvbi1jaGlwIGRldmljZXMgKi8KKwltbXAyX2FkZF91YXJ0KDEpOworCW1tcDJfYWRkX3VhcnQoMik7CisKKwkvKiBvZmYtY2hpcCBkZXZpY2VzICovCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzbWM5MXhfZGV2aWNlKTsKK30KKworTUFDSElORV9TVEFSVChGTElOVCwgIkZsaW50IERldmVsb3BtZW50IFBsYXRmb3JtIikKKwkucGh5c19pbyAgICAgICAgPSBBUEJfUEhZU19CQVNFLAorCS5ib290X3BhcmFtcyAgICA9IDB4MDAwMDAxMDAsCisJLmlvX3BnX29mZnN0ICAgID0gKEFQQl9WSVJUX0JBU0UgPj4gMTgpICYgMHhmZmZjLAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBtbXAyX2luaXRfaXJxLAorCS50aW1lciAgICAgICAgICA9ICZtbXAyX3RpbWVyLAorCS5pbml0X21hY2hpbmUgICA9IGZsaW50X2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2NwdXR5cGUuaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9jcHV0eXBlLmgKaW5kZXggMjVlNzk3Yi4uODNiMTg3MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2NwdXR5cGUuaAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvY3B1dHlwZS5oCkBAIC04LDYgKzgsNyBAQAogICoKICAqIFBYQTE2OCAgICBBMCAgICAweDQxMTU5MjYzICAgMHg1NjE1ODQwMCAgIDB4MDBBMEEzMzMKICAqIFBYQTkxMCAgICBZMCAgICAweDQxMTU5MjYyICAgMHg1NjE1ODAwMCAgIDB4MDBGMEM5MTAKKyAqIE1NUDIJICAgICBaMAkJCTB4NTYwZjU4MTEKICAqLwogCiAjaWZkZWYgQ09ORklHX0NQVV9QWEExNjgKQEAgLTI0LDcgKzI1LDE1IEBACiAjICBkZWZpbmUgX19jcHVfaXNfcHhhOTEwKGlkKQkoMCkKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0NQVV9NTVAyCisjICBkZWZpbmUgX19jcHVfaXNfbW1wMihpZCkJXAorCSh7IHVuc2lnbmVkIGludCBfaWQgPSAoKGlkKSA+PiA4KSAmIDB4ZmY7IF9pZCA9PSAweDU4OyB9KQorI2Vsc2UKKyMgIGRlZmluZSBfX2NwdV9pc19tbXAyKGlkKQkoMCkKKyNlbmRpZgorCiAjZGVmaW5lIGNwdV9pc19weGExNjgoKQkJKHsgX19jcHVfaXNfcHhhMTY4KHJlYWRfY3B1aWRfaWQoKSk7IH0pCiAjZGVmaW5lIGNwdV9pc19weGE5MTAoKQkJKHsgX19jcHVfaXNfcHhhOTEwKHJlYWRfY3B1aWRfaWQoKSk7IH0pCisjZGVmaW5lIGNwdV9pc19tbXAyKCkJCSh7IF9fY3B1X2lzX21tcDIocmVhZF9jcHVpZF9pZCgpKTsgfSkKIAogI2VuZGlmIC8qIF9fQVNNX01BQ0hfQ1BVVFlQRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZGV2aWNlcy5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2RldmljZXMuaAppbmRleCAyNDU4NTM5Li4xZmEwYTQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZGV2aWNlcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9kZXZpY2VzLmgKQEAgLTM0LDQgKzM0LDE2IEBACiAJLnNpemUJCT0gX3NpemUsCQkJCQlcCiAJLmRtYQkJPSB7IF9kbWEgfSwJCQkJCVwKIH07CisKKyNkZWZpbmUgTU1QMl9ERVZJQ0UoX25hbWUsIF9kcnYsIF9pZCwgX2lycSwgX3N0YXJ0LCBfc2l6ZSwgX2RtYS4uLikJXAorc3RydWN0IHB4YV9kZXZpY2VfZGVzYyBtbXAyX2RldmljZV8jI19uYW1lIF9faW5pdGRhdGEgPSB7CQlcCisJLmRldl9uYW1lCT0gIm1tcDItIiAjX25hbWUsCQkJCVwKKwkuZHJ2X25hbWUJPSBfZHJ2LAkJCQkJCVwKKwkuaWQJCT0gX2lkLAkJCQkJCVwKKwkuaXJxCQk9IElSUV9NTVAyXyMjX2lycSwJCQkJXAorCS5zdGFydAkJPSBfc3RhcnQsCQkJCQlcCisJLnNpemUJCT0gX3NpemUsCQkJCQlcCisJLmRtYQkJPSB7IF9kbWEgfSwJCQkJCVwKK30KKwogZXh0ZXJuIGludCBweGFfcmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBweGFfZGV2aWNlX2Rlc2MgKiwgdm9pZCAqLCBzaXplX3QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCA2ZDNjZDM1Li5jNDJkOWQ0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMTUsNyArMTUsMTIgQEAKIAkuZW5kbQogCiAJLm1hY3JvCWdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCi0JbGRyCVxiYXNlLCA9SUNVX0FQX0lSUV9TRUxfSU5UX05VTQorCW1yYwlwMTUsIDAsIFx0bXAsIGMwLCBjMCwgMAkJQCBDUFVJRAorCWFuZAlcdG1wLCBcdG1wLCAjMHhmZjAwCisJY21wCVx0bXAsICMweDU4MDAKKwlsZHIJXGJhc2UsID1JQ1VfVklSVF9CQVNFCisJYWRkbmUJXGJhc2UsIFxiYXNlLCAjMHgxMGMJCUAgUEoxIEFQIElOVCBTRUwgcmVnaXN0ZXIKKwlhZGRlcQlcYmFzZSwgXGJhc2UsICMweDEwNAkJQCBQSjQgSVJRIFNFTCByZWdpc3RlcgogCS5lbmRtCiAKIAkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL2lycXMuaAppbmRleCBkNjg4NzFiLi4wMjcwMTE5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvaXJxcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTExMywxMCArMTEzLDExOSBAQAogI2RlZmluZSBJUlFfUFhBOTEwX0FQX1BNVQkJNjAKICNkZWZpbmUgSVJRX1BYQTkxMF9TTV9JTlQJCTYzCS8qIGZyb20gUGluTXV4ICovCiAKLSNkZWZpbmUgSVJRX0dQSU9fU1RBUlQJCQk2NAotI2RlZmluZSBJUlFfR1BJT19OVU0JCQkxMjgKKy8qCisgKiBJbnRlcnJ1cHQgbnVtYmVycyBmb3IgTU1QMgorICovCisjZGVmaW5lIElSUV9NTVAyX05PTkUJCQkoLTEpCisjZGVmaW5lIElSUV9NTVAyX1NTUDEJCQkwCisjZGVmaW5lIElSUV9NTVAyX1NTUDIJCQkxCisjZGVmaW5lIElSUV9NTVAyX1NTUEExCQkJMgorI2RlZmluZSBJUlFfTU1QMl9TU1BBMgkJCTMKKyNkZWZpbmUgSVJRX01NUDJfUE1JQ19NVVgJCTQJLyogUE1JQyAmIENoYXJnZXIgKi8KKyNkZWZpbmUgSVJRX01NUDJfUlRDX01VWAkJNQorI2RlZmluZSBJUlFfTU1QMl9UV1NJMQkJCTcKKyNkZWZpbmUgSVJRX01NUDJfR1BVCQkJOAorI2RlZmluZSBJUlFfTU1QMl9LRVlQQUQJCQk5CisjZGVmaW5lIElSUV9NTVAyX1JPVEFSWQkJCTEwCisjZGVmaW5lIElSUV9NTVAyX1RSQUNLQkFMTAkJMTEKKyNkZWZpbmUgSVJRX01NUDJfT05FV0lSRQkJMTIKKyNkZWZpbmUgSVJRX01NUDJfVElNRVIxCQkJMTMKKyNkZWZpbmUgSVJRX01NUDJfVElNRVIyCQkJMTQKKyNkZWZpbmUgSVJRX01NUDJfVElNRVIzCQkJMTUKKyNkZWZpbmUgSVJRX01NUDJfUklQQwkJCTE2CisjZGVmaW5lIElSUV9NTVAyX1RXU0lfTVVYCQkxNwkvKiBUV1NJMiB+IFRXU0k2ICovCisjZGVmaW5lIElSUV9NTVAyX0hETUkJCQkxOQorI2RlZmluZSBJUlFfTU1QMl9TU1AzCQkJMjAKKyNkZWZpbmUgSVJRX01NUDJfU1NQNAkJCTIxCisjZGVmaW5lIElSUV9NTVAyX1VTQl9IUzEJCTIyCisjZGVmaW5lIElSUV9NTVAyX1VTQl9IUzIJCTIzCisjZGVmaW5lIElSUV9NTVAyX1VBUlQzCQkJMjQKKyNkZWZpbmUgSVJRX01NUDJfVUFSVDEJCQkyNworI2RlZmluZSBJUlFfTU1QMl9VQVJUMgkJCTI4CisjZGVmaW5lIElSUV9NTVAyX01JUElfRFNJCQkyOQorI2RlZmluZSBJUlFfTU1QMl9DSTIJCQkzMAorI2RlZmluZSBJUlFfTU1QMl9QTVVfVElNRVIxCQkzMQorI2RlZmluZSBJUlFfTU1QMl9QTVVfVElNRVIyCQkzMgorI2RlZmluZSBJUlFfTU1QMl9QTVVfVElNRVIzCQkzMworI2RlZmluZSBJUlFfTU1QMl9VU0JfRlMJCQkzNAorI2RlZmluZSBJUlFfTU1QMl9NSVNDX01VWAkJMzUKKyNkZWZpbmUgSVJRX01NUDJfV0RUMQkJCTM2CisjZGVmaW5lIElSUV9NTVAyX05BTkRfRE1BCQkzNworI2RlZmluZSBJUlFfTU1QMl9VU0lNCQkJMzgKKyNkZWZpbmUgSVJRX01NUDJfTU1DCQkJMzkKKyNkZWZpbmUgSVJRX01NUDJfV1RNCQkJNDAKKyNkZWZpbmUgSVJRX01NUDJfTENECQkJNDEKKyNkZWZpbmUgSVJRX01NUDJfQ0kJCQk0MgorI2RlZmluZSBJUlFfTU1QMl9JUkUJCQk0MworI2RlZmluZSBJUlFfTU1QMl9VU0JfT1RHCQk0NAorI2RlZmluZSBJUlFfTU1QMl9OQU5ECQkJNDUKKyNkZWZpbmUgSVJRX01NUDJfVUFSVDQJCQk0NgorI2RlZmluZSBJUlFfTU1QMl9ETUFfRklRCQk0NworI2RlZmluZSBJUlFfTU1QMl9ETUFfUklRCQk0OAorI2RlZmluZSBJUlFfTU1QMl9HUElPCQkJNDkKKyNkZWZpbmUgSVJRX01NUDJfU1NQX01VWAkJNTEKKyNkZWZpbmUgSVJRX01NUDJfTU1DMgkJCTUyCisjZGVmaW5lIElSUV9NTVAyX01NQzMJCQk1MworI2RlZmluZSBJUlFfTU1QMl9NTUM0CQkJNTQKKyNkZWZpbmUgSVJRX01NUDJfTUlQSV9IU0kJCTU1CisjZGVmaW5lIElSUV9NTVAyX01TUAkJCTU4CisjZGVmaW5lIElSUV9NTVAyX01JUElfU0xJTV9ETUEJCTU5CisjZGVmaW5lIElSUV9NTVAyX1BKNF9GUkVRX0NIRwkJNjAKKyNkZWZpbmUgSVJRX01NUDJfTUlQSV9TTElNCQk2MgorI2RlZmluZSBJUlFfTU1QMl9TTQkJCTYzCisKKyNkZWZpbmUgSVJRX01NUDJfTVVYX0JBU0UJCTY0CisKKy8qIHNlY29uZGFyeSBpbnRlcnJ1cHQgb2YgSU5UICM0ICovCisjZGVmaW5lIElSUV9NTVAyX1BNSUNfQkFTRQkJKElSUV9NTVAyX01VWF9CQVNFKQorI2RlZmluZSBJUlFfTU1QMl9DSEFSR0VSCQkoSVJRX01NUDJfUE1JQ19CQVNFICsgMCkKKyNkZWZpbmUgSVJRX01NUDJfUE1JQwkJCShJUlFfTU1QMl9QTUlDX0JBU0UgKyAxKQorCisvKiBzZWNvbmRhcnkgaW50ZXJydXB0IG9mIElOVCAjNSAqLworI2RlZmluZSBJUlFfTU1QMl9SVENfQkFTRQkJKElSUV9NTVAyX1BNSUNfQkFTRSArIDIpCisjZGVmaW5lIElSUV9NTVAyX1JUQ19BTEFSTQkJKElSUV9NTVAyX1JUQ19CQVNFICsgMCkKKyNkZWZpbmUgSVJRX01NUDJfUlRDCQkJKElSUV9NTVAyX1JUQ19CQVNFICsgMSkKKworLyogc2Vjb25kYXJ5IGludGVycnVwdCBvZiBJTlQgIzE3ICovCisjZGVmaW5lIElSUV9NTVAyX1RXU0lfQkFTRQkJKElSUV9NTVAyX1JUQ19CQVNFICsgMikKKyNkZWZpbmUgSVJRX01NUDJfVFdTSTIJCQkoSVJRX01NUDJfVFdTSV9CQVNFICsgMCkKKyNkZWZpbmUgSVJRX01NUDJfVFdTSTMJCQkoSVJRX01NUDJfVFdTSV9CQVNFICsgMSkKKyNkZWZpbmUgSVJRX01NUDJfVFdTSTQJCQkoSVJRX01NUDJfVFdTSV9CQVNFICsgMikKKyNkZWZpbmUgSVJRX01NUDJfVFdTSTUJCQkoSVJRX01NUDJfVFdTSV9CQVNFICsgMykKKyNkZWZpbmUgSVJRX01NUDJfVFdTSTYJCQkoSVJRX01NUDJfVFdTSV9CQVNFICsgNCkKKworLyogc2Vjb25kYXJ5IGludGVycnVwdCBvZiBJTlQgIzM1ICovCisjZGVmaW5lIElSUV9NTVAyX01JU0NfQkFTRQkJKElSUV9NTVAyX1RXU0lfQkFTRSArIDUpCisjZGVmaW5lIElSUV9NTVAyX1BFUkYJCQkoSVJRX01NUDJfTUlTQ19CQVNFICsgMCkKKyNkZWZpbmUgSVJRX01NUDJfTDJfUEFfRUNDCQkoSVJRX01NUDJfTUlTQ19CQVNFICsgMSkKKyNkZWZpbmUgSVJRX01NUDJfTDJfRUNDCQkJKElSUV9NTVAyX01JU0NfQkFTRSArIDIpCisjZGVmaW5lIElSUV9NTVAyX0wyX1VFQ0MJCShJUlFfTU1QMl9NSVNDX0JBU0UgKyAzKQorI2RlZmluZSBJUlFfTU1QMl9ERFIJCQkoSVJRX01NUDJfTUlTQ19CQVNFICsgNCkKKyNkZWZpbmUgSVJRX01NUDJfRkFCMF9USU1FT1VUCQkoSVJRX01NUDJfTUlTQ19CQVNFICsgNSkKKyNkZWZpbmUgSVJRX01NUDJfRkFCMV9USU1FT1VUCQkoSVJRX01NUDJfTUlTQ19CQVNFICsgNikKKyNkZWZpbmUgSVJRX01NUDJfRkFCMl9USU1FT1VUCQkoSVJRX01NUDJfTUlTQ19CQVNFICsgNykKKyNkZWZpbmUgSVJRX01NUDJfVEhFUk1BTAkJKElSUV9NTVAyX01JU0NfQkFTRSArIDkpCisjZGVmaW5lIElSUV9NTVAyX01BSU5fUE1VCQkoSVJRX01NUDJfTUlTQ19CQVNFICsgMTApCisjZGVmaW5lIElSUV9NTVAyX1dEVDIJCQkoSVJRX01NUDJfTUlTQ19CQVNFICsgMTEpCisjZGVmaW5lIElSUV9NTVAyX0NPUkVTSUdIVAkJKElSUV9NTVAyX01JU0NfQkFTRSArIDEyKQorI2RlZmluZSBJUlFfTU1QMl9DT01NVFgJCQkoSVJRX01NUDJfTUlTQ19CQVNFICsgMTMpCisjZGVmaW5lIElSUV9NTVAyX0NPTU1SWAkJCShJUlFfTU1QMl9NSVNDX0JBU0UgKyAxNCkKKworLyogc2Vjb25kYXJ5IGludGVycnVwdCBvZiBJTlQgIzUxICovCisjZGVmaW5lIElSUV9NTVAyX1NTUF9CQVNFCQkoSVJRX01NUDJfTUlTQ19CQVNFICsgMTUpCisjZGVmaW5lIElSUV9NTVAyX1NTUDFfU1JEWQkJKElSUV9NTVAyX1NTUF9CQVNFICsgMCkKKyNkZWZpbmUgSVJRX01NUDJfU1NQM19TUkRZCQkoSVJRX01NUDJfU1NQX0JBU0UgKyAxKQorCisjZGVmaW5lIElSUV9NTVAyX01VWF9FTkQJCShJUlFfTU1QMl9TU1BfQkFTRSArIDIpCisKKyNkZWZpbmUgSVJRX0dQSU9fU1RBUlQJCQkxMjgKKyNkZWZpbmUgSVJRX0dQSU9fTlVNCQkJMTkyCiAjZGVmaW5lIElSUV9HUElPKHgpCQkJKElSUV9HUElPX1NUQVJUICsgKHgpKQogCi0jZGVmaW5lIE5SX0lSUVMJCShJUlFfR1BJT19TVEFSVCArIElSUV9HUElPX05VTSkKKy8qIEJvYXJkIElSUSAtIDY0IGJ5IGRlZmF1bHQsIGluY3JlYXNlIGlmIG5vdCBlbm91Z2ggKi8KKyNkZWZpbmUgSVJRX0JPQVJEX1NUQVJUCQkJKElSUV9HUElPX1NUQVJUICsgSVJRX0dQSU9fTlVNKQorI2RlZmluZSBJUlFfQk9BUkRfRU5ECQkJKElSUV9CT0FSRF9TVEFSVCArIDY0KQorCisjZGVmaW5lIE5SX0lSUVMJCQkJKElSUV9CT0FSRF9FTkQpCiAKICNlbmRpZiAvKiBfX0FTTV9NQUNIX0lSUVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1tbXAyLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLW1tcDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjlmODE0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1tbXAyLmgKQEAgLTAsMCArMSwyNDAgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9NRlBfTU1QMl9ICisjZGVmaW5lIF9fQVNNX01BQ0hfTUZQX01NUDJfSAorCisjaW5jbHVkZSA8bWFjaC9tZnAuaD4KKworI2RlZmluZSBNRlBfRFJJVkVfVkVSWV9TTE9XCSgweDAgPDwgMTMpCisjZGVmaW5lIE1GUF9EUklWRV9TTE9XCQkoMHgyIDw8IDEzKQorI2RlZmluZSBNRlBfRFJJVkVfTUVESVVNCSgweDQgPDwgMTMpCisjZGVmaW5lIE1GUF9EUklWRV9GQVNUCQkoMHg4IDw8IDEzKQorCisvKiBHUElPICovCisKKy8qIERGSSAqLworI2RlZmluZSBHUElPMTA4X0RGSV9EMTUJCU1GUF9DRkcoR1BJTzEwOCwgQUYwKQorI2RlZmluZSBHUElPMTA5X0RGSV9EMTQJCU1GUF9DRkcoR1BJTzEwOSwgQUYwKQorI2RlZmluZSBHUElPMTEwX0RGSV9EMTMJCU1GUF9DRkcoR1BJTzExMCwgQUYwKQorI2RlZmluZSBHUElPMTYxX0RGSV9EMTIJCU1GUF9DRkcoR1BJTzE2MSwgQUYwKQorI2RlZmluZSBHUElPMTYyX0RGSV9EMTEJCU1GUF9DRkcoR1BJTzE2MiwgQUYwKQorI2RlZmluZSBHUElPMTYzX0RGSV9EMTAJCU1GUF9DRkcoR1BJTzE2MywgQUYwKQorI2RlZmluZSBHUElPMTY0X0RGSV9EOQkJTUZQX0NGRyhHUElPMTY0LCBBRjApCisjZGVmaW5lIEdQSU8xMTFfREZJX0Q4CQlNRlBfQ0ZHKEdQSU8xMTEsIEFGMCkKKyNkZWZpbmUgR1BJTzEwNF9ERklfRDcJCU1GUF9DRkcoR1BJTzEwNCwgQUYwKQorI2RlZmluZSBHUElPMTA1X0RGSV9ENgkJTUZQX0NGRyhHUElPMTA1LCBBRjApCisjZGVmaW5lIEdQSU8xMDZfREZJX0Q1CQlNRlBfQ0ZHKEdQSU8xMDYsIEFGMCkKKyNkZWZpbmUgR1BJTzEwN19ERklfRDQJCU1GUF9DRkcoR1BJTzEwNywgQUYwKQorI2RlZmluZSBHUElPMTY1X0RGSV9EMwkJTUZQX0NGRyhHUElPMTY1LCBBRjApCisjZGVmaW5lIEdQSU8xNjZfREZJX0QyCQlNRlBfQ0ZHKEdQSU8xNjYsIEFGMCkKKyNkZWZpbmUgR1BJTzE2N19ERklfRDEJCU1GUF9DRkcoR1BJTzE2NywgQUYwKQorI2RlZmluZSBHUElPMTY4X0RGSV9EMAkJTUZQX0NGRyhHUElPMTY4LCBBRjApCisjZGVmaW5lIEdQSU8xNDNfTkRfbkNTMAkJTUZQX0NGRyhHUElPMTQzLCBBRjApCisjZGVmaW5lIEdQSU8xNDRfTkRfbkNTMQkJTUZQX0NGRyhHUElPMTQ0LCBBRjApCisjZGVmaW5lIEdQSU8xNDdfTkRfbldFCQlNRlBfQ0ZHKEdQSU8xNDcsIEFGMCkKKyNkZWZpbmUgR1BJTzE0OF9ORF9uUkUJCU1GUF9DRkcoR1BJTzE0OCwgQUYwKQorI2RlZmluZSBHUElPMTUwX05EX0FMRQkJTUZQX0NGRyhHUElPMTUwLCBBRjApCisjZGVmaW5lIEdQSU8xNDlfTkRfQ0xFCQlNRlBfQ0ZHKEdQSU8xNDksIEFGMCkKKyNkZWZpbmUgR1BJTzExMl9ORF9SRFkwCQlNRlBfQ0ZHKEdQSU8xMTIsIEFGMCkKKyNkZWZpbmUgR1BJTzE2MF9ORF9SRFkxCQlNRlBfQ0ZHKEdQSU8xNjAsIEFGMCkKKworLyogU3RhdGljIE1lbW9yeSBDb250cm9sbGVyICovCisjZGVmaW5lIEdQSU8xNDVfU01DX25DUzAJTUZQX0NGRyhHUElPMTQ1LCBBRjApCisjZGVmaW5lIEdQSU8xNDZfU01DX25DUzEJTUZQX0NGRyhHUElPMTQ2LCBBRjApCisjZGVmaW5lIEdQSU8xNTJfU01DX0JFMAkJTUZQX0NGRyhHUElPMTUyLCBBRjApCisjZGVmaW5lIEdQSU8xNTNfU01DX0JFMQkJTUZQX0NGRyhHUElPMTUzLCBBRjApCisjZGVmaW5lIEdQSU8xNTRfU01DX0lSUQkJTUZQX0NGRyhHUElPMTU0LCBBRjApCisjZGVmaW5lIEdQSU8xMTNfU01DX1JEWQkJTUZQX0NGRyhHUElPMTEzLCBBRjApCisjZGVmaW5lIEdQSU8xNTFfU01DX1NDTEsJTUZQX0NGRyhHUElPMTUxLCBBRjApCisKKy8qIEV0aGVybmV0ICovCisjZGVmaW5lIEdQSU8xNTVfU01fQURWTVVYCU1GUF9DRkcoR1BJTzE1NSwgQUYyKQorI2RlZmluZSBHUElPMTU1X0dQSU8xNTUJCU1GUF9DRkcoR1BJTzE1NSwgQUYxKQorCisvKiBVQVJUMSAqLworI2RlZmluZSBHUElPNDVfVUFSVDFfUlhECU1GUF9DRkcoR1BJTzQ1LCBBRjEpCisjZGVmaW5lIEdQSU80Nl9VQVJUMV9UWEQJTUZQX0NGRyhHUElPNDYsIEFGMSkKKyNkZWZpbmUgR1BJTzI5X1VBUlQxX1JYRAlNRlBfQ0ZHKEdQSU8yOSwgQUYxKQorI2RlZmluZSBHUElPMzBfVUFSVDFfVFhECU1GUF9DRkcoR1BJTzMwLCBBRjEpCisjZGVmaW5lIEdQSU8zMV9VQVJUMV9DVFMJTUZQX0NGRyhHUElPMzEsIEFGMSkKKyNkZWZpbmUgR1BJTzMyX1VBUlQxX1JUUwlNRlBfQ0ZHKEdQSU8zMiwgQUYxKQorCisvKiBVQVJUMiAqLworI2RlZmluZSBHUElPNDdfVUFSVDJfUlhECU1GUF9DRkcoR1BJTzQ3LCBBRjEpCisjZGVmaW5lIEdQSU80OF9VQVJUMl9UWEQJTUZQX0NGRyhHUElPNDgsIEFGMSkKKyNkZWZpbmUgR1BJTzQ5X1VBUlQyX0NUUwlNRlBfQ0ZHKEdQSU80OSwgQUYxKQorI2RlZmluZSBHUElPNTBfVUFSVDJfUlRTCU1GUF9DRkcoR1BJTzUwLCBBRjEpCisKKy8qIFVBUlQzICovCisjZGVmaW5lIEdQSU81MV9VQVJUM19SWEQJTUZQX0NGRyhHUElPNTEsIEFGMSkKKyNkZWZpbmUgR1BJTzUyX1VBUlQzX1RYRAlNRlBfQ0ZHKEdQSU81MiwgQUYxKQorI2RlZmluZSBHUElPNTNfVUFSVDNfQ1RTCU1GUF9DRkcoR1BJTzUzLCBBRjEpCisjZGVmaW5lIEdQSU81NF9VQVJUM19SVFMJTUZQX0NGRyhHUElPNTQsIEFGMSkKKworLyogTU1DMSAqLworI2RlZmluZSBHUElPMTI0X01NQzFfREFUNwlNRlBfQ0ZHX0RSVihHUElPMTI0LCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU8xMjVfTU1DMV9EQVQ2CU1GUF9DRkdfRFJWKEdQSU8xMjUsIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzEyOV9NTUMxX0RBVDUJTUZQX0NGR19EUlYoR1BJTzEyOSwgQUYxLCBGQVNUKQorI2RlZmluZSBHUElPMTMwX01NQzFfREFUNAlNRlBfQ0ZHX0RSVihHUElPMTMwLCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU8xMzFfTU1DMV9EQVQzCU1GUF9DRkdfRFJWKEdQSU8xMzEsIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzEzMl9NTUMxX0RBVDIJTUZQX0NGR19EUlYoR1BJTzEzMiwgQUYxLCBGQVNUKQorI2RlZmluZSBHUElPMTMzX01NQzFfREFUMQlNRlBfQ0ZHX0RSVihHUElPMTMzLCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU8xMzRfTU1DMV9EQVQwCU1GUF9DRkdfRFJWKEdQSU8xMzQsIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzEzNl9NTUMxX0NNRAlNRlBfQ0ZHX0RSVihHUElPMTM2LCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU8xMzlfTU1DMV9DTEsJTUZQX0NGR19EUlYoR1BJTzEzOSwgQUYxLCBGQVNUKQorI2RlZmluZSBHUElPMTQwX01NQzFfQ0QJCU1GUF9DRkdfRFJWKEdQSU8xNDAsIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzE0MV9NTUMxX1dQCQlNRlBfQ0ZHX0RSVihHUElPMTQxLCBBRjEsIEZBU1QpCisKKy8qTU1DMiovCisjZGVmaW5lIEdQSU8zN19NTUMyX0RBVDMJTUZQX0NGR19EUlYoR1BJTzM3LCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU8zOF9NTUMyX0RBVDIJTUZQX0NGR19EUlYoR1BJTzM4LCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU8zOV9NTUMyX0RBVDEJTUZQX0NGR19EUlYoR1BJTzM5LCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU80MF9NTUMyX0RBVDAJTUZQX0NGR19EUlYoR1BJTzQwLCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU80MV9NTUMyX0NNRAkJTUZQX0NGR19EUlYoR1BJTzQxLCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU80Ml9NTUMyX0NMSwkJTUZQX0NGR19EUlYoR1BJTzQyLCBBRjEsIEZBU1QpCisKKy8qTU1DMyovCisjZGVmaW5lIEdQSU8xNjVfTU1DM19EQVQ3CU1GUF9DRkdfRFJWKEdQSU8xNjUsIEFGMiwgRkFTVCkKKyNkZWZpbmUgR1BJTzE2Ml9NTUMzX0RBVDYJTUZQX0NGR19EUlYoR1BJTzE2MiwgQUYyLCBGQVNUKQorI2RlZmluZSBHUElPMTY2X01NQzNfREFUNQlNRlBfQ0ZHX0RSVihHUElPMTY2LCBBRjIsIEZBU1QpCisjZGVmaW5lIEdQSU8xNjNfTU1DM19EQVQ0CU1GUF9DRkdfRFJWKEdQSU8xNjMsIEFGMiwgRkFTVCkKKyNkZWZpbmUgR1BJTzE2N19NTUMzX0RBVDMJTUZQX0NGR19EUlYoR1BJTzE2NywgQUYyLCBGQVNUKQorI2RlZmluZSBHUElPMTY0X01NQzNfREFUMglNRlBfQ0ZHX0RSVihHUElPMTY0LCBBRjIsIEZBU1QpCisjZGVmaW5lIEdQSU8xNjhfTU1DM19EQVQxCU1GUF9DRkdfRFJWKEdQSU8xNjgsIEFGMiwgRkFTVCkKKyNkZWZpbmUgR1BJTzExMV9NTUMzX0RBVDAJTUZQX0NGR19EUlYoR1BJTzExMSwgQUYyLCBGQVNUKQorI2RlZmluZSBHUElPMTEyX01NQzNfQ01ECU1GUF9DRkdfRFJWKEdQSU8xMTIsIEFGMiwgRkFTVCkKKyNkZWZpbmUgR1BJTzE1MV9NTUMzX0NMSwlNRlBfQ0ZHX0RSVihHUElPMTUxLCBBRjIsIEZBU1QpCisKKy8qIExDRCAqLworI2RlZmluZSBHUElPNzRfTENEX0ZDTEsJCU1GUF9DRkdfRFJWKEdQSU83NCwgQUYxLCBGQVNUKQorI2RlZmluZSBHUElPNzVfTENEX0xDTEsJCU1GUF9DRkdfRFJWKEdQSU83NSwgQUYxLCBGQVNUKQorI2RlZmluZSBHUElPNzZfTENEX1BDTEsJCU1GUF9DRkdfRFJWKEdQSU83NiwgQUYxLCBGQVNUKQorI2RlZmluZSBHUElPNzdfTENEX0RFTkEJCU1GUF9DRkdfRFJWKEdQSU83NywgQUYxLCBGQVNUKQorI2RlZmluZSBHUElPNzhfTENEX0REMAkJTUZQX0NGR19EUlYoR1BJTzc4LCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU83OV9MQ0RfREQxCQlNRlBfQ0ZHX0RSVihHUElPNzksIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzgwX0xDRF9ERDIJCU1GUF9DRkdfRFJWKEdQSU84MCwgQUYxLCBGQVNUKQorI2RlZmluZSBHUElPODFfTENEX0REMwkJTUZQX0NGR19EUlYoR1BJTzgxLCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU84Ml9MQ0RfREQ0CQlNRlBfQ0ZHX0RSVihHUElPODIsIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzgzX0xDRF9ERDUJCU1GUF9DRkdfRFJWKEdQSU84MywgQUYxLCBGQVNUKQorI2RlZmluZSBHUElPODRfTENEX0RENgkJTUZQX0NGR19EUlYoR1BJTzg0LCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU84NV9MQ0RfREQ3CQlNRlBfQ0ZHX0RSVihHUElPODUsIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzg2X0xDRF9ERDgJCU1GUF9DRkdfRFJWKEdQSU84NiwgQUYxLCBGQVNUKQorI2RlZmluZSBHUElPODdfTENEX0REOQkJTUZQX0NGR19EUlYoR1BJTzg3LCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU84OF9MQ0RfREQxMAkJTUZQX0NGR19EUlYoR1BJTzg4LCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU84OV9MQ0RfREQxMQkJTUZQX0NGR19EUlYoR1BJTzg5LCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU85MF9MQ0RfREQxMgkJTUZQX0NGR19EUlYoR1BJTzkwLCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU85MV9MQ0RfREQxMwkJTUZQX0NGR19EUlYoR1BJTzkxLCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU85Ml9MQ0RfREQxNAkJTUZQX0NGR19EUlYoR1BJTzkyLCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU85M19MQ0RfREQxNQkJTUZQX0NGR19EUlYoR1BJTzkzLCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU85NF9MQ0RfREQxNgkJTUZQX0NGR19EUlYoR1BJTzk0LCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU85NV9MQ0RfREQxNwkJTUZQX0NGR19EUlYoR1BJTzk1LCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU85Nl9MQ0RfREQxOAkJTUZQX0NGR19EUlYoR1BJTzk2LCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU85N19MQ0RfREQxOQkJTUZQX0NGR19EUlYoR1BJTzk3LCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU85OF9MQ0RfREQyMAkJTUZQX0NGR19EUlYoR1BJTzk4LCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU85OV9MQ0RfREQyMQkJTUZQX0NGR19EUlYoR1BJTzk5LCBBRjEsIEZBU1QpCisjZGVmaW5lIEdQSU8xMDBfTENEX0REMjIJTUZQX0NGR19EUlYoR1BJTzEwMCwgQUYxLCBGQVNUKQorI2RlZmluZSBHUElPMTAxX0xDRF9ERDIzCU1GUF9DRkdfRFJWKEdQSU8xMDEsIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzk0X1NQSV9EQ0xLCQlNRlBfQ0ZHX0RSVihHUElPOTQsIEFGMywgRkFTVCkKKyNkZWZpbmUgR1BJTzk1X1NQSV9DUzAJCU1GUF9DRkdfRFJWKEdQSU85NSwgQUYzLCBGQVNUKQorI2RlZmluZSBHUElPOTZfU1BJX0RJTgkJTUZQX0NGR19EUlYoR1BJTzk2LCBBRjMsIEZBU1QpCisjZGVmaW5lIEdQSU85N19TUElfRE9VVAkJTUZQX0NGR19EUlYoR1BJTzk3LCBBRjMsIEZBU1QpCisjZGVmaW5lIEdQSU85OF9MQ0RfUlNUCQlNRlBfQ0ZHX0RSVihHUElPOTgsIEFGMCwgRkFTVCkKKworI2RlZmluZSBHUElPMTE0X01OX0NMS19PVVQJTUZQX0NGR19EUlYoR1BJTzExNCwgQUYxLCBGQVNUKQorCisvKkxDRCBUViBwYXRoKi8KKyNkZWZpbmUgR1BJTzEyNF9MQ0RfREQyNAlNRlBfQ0ZHX0RSVihHUElPMTI0LCBBRjIsIEZBU1QpCisjZGVmaW5lIEdQSU8xMjVfTENEX0REMjUJTUZQX0NGR19EUlYoR1BJTzEyNSwgQUYyLCBGQVNUKQorI2RlZmluZSBHUElPMTI2X0xDRF9ERDMzCU1GUF9DRkdfRFJWKEdQSU8xMjYsIEFGMiwgRkFTVCkKKyNkZWZpbmUgR1BJTzEyN19MQ0RfREQyNglNRlBfQ0ZHX0RSVihHUElPMTI3LCBBRjIsIEZBU1QpCisjZGVmaW5lIEdQSU8xMjhfTENEX0REMjcJTUZQX0NGR19EUlYoR1BJTzEyOCwgQUYyLCBGQVNUKQorI2RlZmluZSBHUElPMTI5X0xDRF9ERDI4CU1GUF9DRkdfRFJWKEdQSU8xMjksIEFGMiwgRkFTVCkKKyNkZWZpbmUgR1BJTzEzMF9MQ0RfREQyOQlNRlBfQ0ZHX0RSVihHUElPMTMwLCBBRjIsIEZBU1QpCisjZGVmaW5lIEdQSU8xMzVfTENEX0REMzAJTUZQX0NGR19EUlYoR1BJTzEzNSwgQUYyLCBGQVNUKQorI2RlZmluZSBHUElPMTM3X0xDRF9ERDMxCU1GUF9DRkdfRFJWKEdQSU8xMzcsIEFGMiwgRkFTVCkKKyNkZWZpbmUgR1BJTzEzOF9MQ0RfREQzMglNRlBfQ0ZHX0RSVihHUElPMTM4LCBBRjIsIEZBU1QpCisjZGVmaW5lIEdQSU8xNDBfTENEX0REMzQJTUZQX0NGR19EUlYoR1BJTzE0MCwgQUYyLCBGQVNUKQorI2RlZmluZSBHUElPMTQxX0xDRF9ERDM1CU1GUF9DRkdfRFJWKEdQSU8xNDEsIEFGMiwgRkFTVCkKKworLyogSTJDICovCisjZGVmaW5lIEdQSU80M19UV1NJMl9TQ0wJTUZQX0NGR19EUlYoR1BJTzQzLCBBRjEsIFNMT1cpCisjZGVmaW5lIEdQSU80NF9UV1NJMl9TREEJTUZQX0NGR19EUlYoR1BJTzQ0LCBBRjEsIFNMT1cpCisjZGVmaW5lIEdQSU83MV9UV1NJM19TQ0wJTUZQX0NGR19EUlYoR1BJTzcxLCBBRjEsIFNMT1cpCisjZGVmaW5lIEdQSU83Ml9UV1NJM19TREEJTUZQX0NGR19EUlYoR1BJTzcyLCBBRjEsIFNMT1cpCisjZGVmaW5lIEdQSU85OV9UV1NJNV9TQ0wJTUZQX0NGR19EUlYoR1BJTzk5LCBBRjQsIFNMT1cpCisjZGVmaW5lIEdQSU8xMDBfVFdTSTVfU0RBCU1GUF9DRkdfRFJWKEdQSU8xMDAsIEFGNCwgU0xPVykKKyNkZWZpbmUgR1BJTzk3X1RXU0k2X1NDTAlNRlBfQ0ZHX0RSVihHUElPOTcsIEFGMiwgU0xPVykKKyNkZWZpbmUgR1BJTzk4X1RXU0k2X1NEQQlNRlBfQ0ZHX0RSVihHUElPOTgsIEFGMiwgU0xPVykKKworLyogU1NQQTEgKi8KKyNkZWZpbmUgR1BJTzI0X0kyU19TWVNDTEsJTUZQX0NGRyhHUElPMjQsIEFGMSkKKyNkZWZpbmUgR1BJTzI1X0kyU19CSVRDTEsJTUZQX0NGRyhHUElPMjUsIEFGMSkKKyNkZWZpbmUgR1BJTzI2X0kyU19TWU5DCQlNRlBfQ0ZHKEdQSU8yNiwgQUYxKQorI2RlZmluZSBHUElPMjdfSTJTX0RBVEFfT1VUCU1GUF9DRkcoR1BJTzI3LCBBRjEpCisjZGVmaW5lIEdQSU8yOF9JMlNfU0RBVEFfSU4JTUZQX0NGRyhHUElPMjgsIEFGMSkKKyNkZWZpbmUgR1BJTzExNF9JMlNfTUNMSwlNRlBfQ0ZHKEdQSU8xMTQsIEFGMSkKKworLyogU1NQQTIgKi8KKyNkZWZpbmUgR1BJTzMzX1NTUEEyX0NMSwlNRlBfQ0ZHKEdQSU8zMywgQUYxKQorI2RlZmluZSBHUElPMzRfU1NQQTJfRlJNCU1GUF9DRkcoR1BJTzM0LCBBRjEpCisjZGVmaW5lIEdQSU8zNV9TU1BBMl9UWEQJTUZQX0NGRyhHUElPMzUsIEFGMSkKKyNkZWZpbmUgR1BJTzM2X1NTUEEyX1JYRAlNRlBfQ0ZHKEdQSU8zNiwgQUYxKQorCisvKiBLZXlwYWQgKi8KKyNkZWZpbmUgR1BJTzAwX0tQX01LSU4wCQlNRlBfQ0ZHKEdQSU8wLCBBRjEpCisjZGVmaW5lIEdQSU8wMV9LUF9NS09VVDAJTUZQX0NGRyhHUElPMSwgQUYxKQorI2RlZmluZSBHUElPMDJfS1BfTUtJTjEJCU1GUF9DRkcoR1BJTzIsIEFGMSkKKyNkZWZpbmUgR1BJTzAzX0tQX01LT1VUMQlNRlBfQ0ZHKEdQSU8zLCBBRjEpCisjZGVmaW5lIEdQSU8wNF9LUF9NS0lOMgkJTUZQX0NGRyhHUElPNCwgQUYxKQorI2RlZmluZSBHUElPMDVfS1BfTUtPVVQyCU1GUF9DRkcoR1BJTzUsIEFGMSkKKyNkZWZpbmUgR1BJTzA2X0tQX01LSU4zCQlNRlBfQ0ZHKEdQSU82LCBBRjEpCisjZGVmaW5lIEdQSU8wN19LUF9NS09VVDMJTUZQX0NGRyhHUElPNywgQUYxKQorI2RlZmluZSBHUElPMDhfS1BfTUtJTjQJCU1GUF9DRkcoR1BJTzgsIEFGMSkKKyNkZWZpbmUgR1BJTzA5X0tQX01LT1VUNAlNRlBfQ0ZHKEdQSU85LCBBRjEpCisjZGVmaW5lIEdQSU8xMF9LUF9NS0lONQkJTUZQX0NGRyhHUElPMTAsIEFGMSkKKyNkZWZpbmUgR1BJTzExX0tQX01LT1VUNQlNRlBfQ0ZHKEdQSU8xMSwgQUYxKQorI2RlZmluZSBHUElPMTJfS1BfTUtJTjYJCU1GUF9DRkcoR1BJTzEyLCBBRjEpCisjZGVmaW5lIEdQSU8xM19LUF9NS09VVDYJTUZQX0NGRyhHUElPMTMsIEFGMSkKKyNkZWZpbmUgR1BJTzE0X0tQX01LSU43CQlNRlBfQ0ZHKEdQSU8xNCwgQUYxKQorI2RlZmluZSBHUElPMTVfS1BfTUtPVVQ3CU1GUF9DRkcoR1BJTzE1LCBBRjEpCisjZGVmaW5lIEdQSU8xNl9LUF9ES0lOMAkJTUZQX0NGRyhHUElPMTYsIEFGMSkKKyNkZWZpbmUgR1BJTzE3X0tQX0RLSU4xCQlNRlBfQ0ZHKEdQSU8xNywgQUYxKQorI2RlZmluZSBHUElPMThfS1BfREtJTjIJCU1GUF9DRkcoR1BJTzE4LCBBRjEpCisjZGVmaW5lIEdQSU8xOV9LUF9ES0lOMwkJTUZQX0NGRyhHUElPMTksIEFGMSkKKyNkZWZpbmUgR1BJTzIwX0tQX0RLSU40CQlNRlBfQ0ZHKEdQSU8yMCwgQUYxKQorI2RlZmluZSBHUElPMjFfS1BfREtJTjUJCU1GUF9DRkcoR1BJTzIxLCBBRjEpCisjZGVmaW5lIEdQSU8yMl9LUF9ES0lONgkJTUZQX0NGRyhHUElPMjIsIEFGMSkKKyNkZWZpbmUgR1BJTzIzX0tQX0RLSU43CQlNRlBfQ0ZHKEdQSU8yMywgQUYxKQorCisvKiBDQU1FUkEgKi8KKyNkZWZpbmUgR1BJTzU5X0NDSUNfSU43CQlNRlBfQ0ZHX0RSVihHUElPNTksIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzYwX0NDSUNfSU42CQlNRlBfQ0ZHX0RSVihHUElPNjAsIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzYxX0NDSUNfSU41CQlNRlBfQ0ZHX0RSVihHUElPNjEsIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzYyX0NDSUNfSU40CQlNRlBfQ0ZHX0RSVihHUElPNjIsIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzYzX0NDSUNfSU4zCQlNRlBfQ0ZHX0RSVihHUElPNjMsIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzY0X0NDSUNfSU4yCQlNRlBfQ0ZHX0RSVihHUElPNjQsIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzY1X0NDSUNfSU4xCQlNRlBfQ0ZHX0RSVihHUElPNjUsIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzY2X0NDSUNfSU4wCQlNRlBfQ0ZHX0RSVihHUElPNjYsIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzY3X0NBTV9IU1lOQwlNRlBfQ0ZHX0RSVihHUElPNjcsIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzY4X0NBTV9WU1lOQwlNRlBfQ0ZHX0RSVihHUElPNjgsIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzY5X0NBTV9NQ0xLCQlNRlBfQ0ZHX0RSVihHUElPNjksIEFGMSwgRkFTVCkKKyNkZWZpbmUgR1BJTzcwX0NBTV9QQ0xLCQlNRlBfQ0ZHX0RSVihHUElPNzAsIEFGMSwgRkFTVCkKKworLyogV2lmaSAqLworI2RlZmluZSBHUElPNDVfR1BJTzQ1CQlNRlBfQ0ZHKEdQSU80NSwgQUYwKQorI2RlZmluZSBHUElPNDZfR1BJTzQ2CQlNRlBfQ0ZHKEdQSU80NiwgQUYwKQorI2RlZmluZSBHUElPMjFfR1BJTzIxCQlNRlBfQ0ZHKEdQSU8yMSwgQUYwKQorI2RlZmluZSBHUElPMjJfR1BJTzIyCQlNRlBfQ0ZHKEdQSU8yMiwgQUYwKQorI2RlZmluZSBHUElPNTVfR1BJTzU1CQlNRlBfQ0ZHKEdQSU81NSwgQUYwKQorI2RlZmluZSBHUElPNTZfR1BJTzU2CQlNRlBfQ0ZHKEdQSU81NiwgQUYwKQorI2RlZmluZSBHUElPNTdfR1BJTzU3CQlNRlBfQ0ZHKEdQSU81NywgQUYwKQorI2RlZmluZSBHUElPNThfR1BJTzU4CQlNRlBfQ0ZHKEdQSU81OCwgQUYwKQorCisvKiBDb2RlYyovCisjZGVmaW5lIEdQSU8yM19HUElPMjMJCU1GUF9DRkcoR1BJTzIzLCBBRjApCisKKyNkZWZpbmUgR1BJTzEwMV9HUElPMTAxCQlNRlBfQ0ZHKEdQSU8xMDEsIEFGMCkKKworLyogUE1JQyAqLworI2RlZmluZSBQTUlDX1BNSUNfSU5UCQlNRlBfQ0ZHKFBNSUNfSU5ULCBBRjApCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX01GUF9NTVAyX0ggKi8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGExNjguaCBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tZnAtcHhhMTY4LmgKaW5kZXggM2IyMTZiZi4uZGVkNDNjNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL21mcC1weGExNjguaAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbWZwLXB4YTE2OC5oCkBAIC0xOTMsNyArMTkzLDkgQEAKICNkZWZpbmUgR1BJTzMyX0NGX25DRDEJCU1GUF9DRkcoR1BJTzMyLCBBRjMpCiAjZGVmaW5lIEdQSU8zM19DRl9uQ0QyCQlNRlBfQ0ZHKEdQSU8zMywgQUYzKQogCi0vKiBVQVJUMSAqLworLyogVUFSVCAqLworI2RlZmluZSBHUElPODhfVUFSVDJfVFhECU1GUF9DRkcoR1BJTzg4LCBBRjIpCisjZGVmaW5lIEdQSU84OV9VQVJUMl9SWEQJTUZQX0NGRyhHUElPODksIEFGMikKICNkZWZpbmUgR1BJTzEwN19VQVJUMV9UWEQJTUZQX0NGR19EUlYoR1BJTzEwNywgQUYxLCBGQVNUKQogI2RlZmluZSBHUElPMTA3X1VBUlQxX1JYRAlNRlBfQ0ZHX0RSVihHUElPMTA3LCBBRjIsIEZBU1QpCiAjZGVmaW5lIEdQSU8xMDhfVUFSVDFfUlhECU1GUF9DRkdfRFJWKEdQSU8xMDgsIEFGMSwgRkFTVCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9tbXAyLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbW1wMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1OWYzYmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvbW1wMi5oCkBAIC0wLDAgKzEsNjAgQEAKKyNpZm5kZWYgX19BU01fTUFDSF9NTVAyX0gKKyNkZWZpbmUgX19BU01fTUFDSF9NTVAyX0gKKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPG1hY2gvZGV2aWNlcy5oPgorI2luY2x1ZGUgPHBsYXQvaTJjLmg+CisKK2V4dGVybiBzdHJ1Y3QgcHhhX2RldmljZV9kZXNjIG1tcDJfZGV2aWNlX3VhcnQxOworZXh0ZXJuIHN0cnVjdCBweGFfZGV2aWNlX2Rlc2MgbW1wMl9kZXZpY2VfdWFydDI7CitleHRlcm4gc3RydWN0IHB4YV9kZXZpY2VfZGVzYyBtbXAyX2RldmljZV91YXJ0MzsKK2V4dGVybiBzdHJ1Y3QgcHhhX2RldmljZV9kZXNjIG1tcDJfZGV2aWNlX3VhcnQ0OworZXh0ZXJuIHN0cnVjdCBweGFfZGV2aWNlX2Rlc2MgbW1wMl9kZXZpY2VfdHdzaTE7CitleHRlcm4gc3RydWN0IHB4YV9kZXZpY2VfZGVzYyBtbXAyX2RldmljZV90d3NpMjsKK2V4dGVybiBzdHJ1Y3QgcHhhX2RldmljZV9kZXNjIG1tcDJfZGV2aWNlX3R3c2kzOworZXh0ZXJuIHN0cnVjdCBweGFfZGV2aWNlX2Rlc2MgbW1wMl9kZXZpY2VfdHdzaTQ7CitleHRlcm4gc3RydWN0IHB4YV9kZXZpY2VfZGVzYyBtbXAyX2RldmljZV90d3NpNTsKK2V4dGVybiBzdHJ1Y3QgcHhhX2RldmljZV9kZXNjIG1tcDJfZGV2aWNlX3R3c2k2OworCitzdGF0aWMgaW5saW5lIGludCBtbXAyX2FkZF91YXJ0KGludCBpZCkKK3sKKwlzdHJ1Y3QgcHhhX2RldmljZV9kZXNjICpkID0gTlVMTDsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIDE6IGQgPSAmbW1wMl9kZXZpY2VfdWFydDE7IGJyZWFrOworCWNhc2UgMjogZCA9ICZtbXAyX2RldmljZV91YXJ0MjsgYnJlYWs7CisJY2FzZSAzOiBkID0gJm1tcDJfZGV2aWNlX3VhcnQzOyBicmVhazsKKwljYXNlIDQ6IGQgPSAmbW1wMl9kZXZpY2VfdWFydDQ7IGJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBweGFfcmVnaXN0ZXJfZGV2aWNlKGQsIE5VTEwsIDApOworfQorCitzdGF0aWMgaW5saW5lIGludCBtbXAyX2FkZF90d3NpKGludCBpZCwgc3RydWN0IGkyY19weGFfcGxhdGZvcm1fZGF0YSAqZGF0YSwKKwkJCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbywgdW5zaWduZWQgc2l6ZSkKK3sKKwlzdHJ1Y3QgcHhhX2RldmljZV9kZXNjICpkID0gTlVMTDsKKwlpbnQgcmV0OworCisJc3dpdGNoIChpZCkgeworCWNhc2UgMDogZCA9ICZtbXAyX2RldmljZV90d3NpMTsgYnJlYWs7CisJY2FzZSAxOiBkID0gJm1tcDJfZGV2aWNlX3R3c2kyOyBicmVhazsKKwljYXNlIDI6IGQgPSAmbW1wMl9kZXZpY2VfdHdzaTM7IGJyZWFrOworCWNhc2UgMzogZCA9ICZtbXAyX2RldmljZV90d3NpNDsgYnJlYWs7CisJY2FzZSA0OiBkID0gJm1tcDJfZGV2aWNlX3R3c2k1OyBicmVhazsKKwljYXNlIDU6IGQgPSAmbW1wMl9kZXZpY2VfdHdzaTY7IGJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldCA9IGkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKGlkLCBpbmZvLCBzaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIHB4YV9yZWdpc3Rlcl9kZXZpY2UoZCwgZGF0YSwgc2l6ZW9mKCpkYXRhKSk7Cit9CisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX01NUDJfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1hcGJjLmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1hcGJjLmgKaW5kZXggOThjY2JlZS4uNzEyYWYwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3JlZ3MtYXBiYy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC9yZWdzLWFwYmMuaApAQCAtNjksNiArNjksNDcgQEAKICNkZWZpbmUgQVBCQ19QWEE5MTBfQVNGQVIJQVBCQ19SRUcoMHgwNTApCiAjZGVmaW5lIEFQQkNfUFhBOTEwX0FTU0FSCUFQQkNfUkVHKDB4MDU0KQogCisvKgorICogQVBCIENsb2NrIHJlZ2lzdGVyIG9mZnNldHMgZm9yIE1NUDIKKyAqLworI2RlZmluZSBBUEJDX01NUDJfUlRDCQlBUEJDX1JFRygweDAwMCkKKyNkZWZpbmUgQVBCQ19NTVAyX1RXU0kxCQlBUEJDX1JFRygweDAwNCkKKyNkZWZpbmUgQVBCQ19NTVAyX1RXU0kyCQlBUEJDX1JFRygweDAwOCkKKyNkZWZpbmUgQVBCQ19NTVAyX1RXU0kzCQlBUEJDX1JFRygweDAwYykKKyNkZWZpbmUgQVBCQ19NTVAyX1RXU0k0CQlBUEJDX1JFRygweDAxMCkKKyNkZWZpbmUgQVBCQ19NTVAyX09ORVdJUkUJQVBCQ19SRUcoMHgwMTQpCisjZGVmaW5lIEFQQkNfTU1QMl9LUEMJCUFQQkNfUkVHKDB4MDE4KQorI2RlZmluZSBBUEJDX01NUDJfVEJfUk9UQVJZCUFQQkNfUkVHKDB4MDFjKQorI2RlZmluZSBBUEJDX01NUDJfU1dfSlRBRwlBUEJDX1JFRygweDAyMCkKKyNkZWZpbmUgQVBCQ19NTVAyX1RJTUVSUwlBUEJDX1JFRygweDAyNCkKKyNkZWZpbmUgQVBCQ19NTVAyX1VBUlQxCQlBUEJDX1JFRygweDAyYykKKyNkZWZpbmUgQVBCQ19NTVAyX1VBUlQyCQlBUEJDX1JFRygweDAzMCkKKyNkZWZpbmUgQVBCQ19NTVAyX1VBUlQzCQlBUEJDX1JFRygweDAzNCkKKyNkZWZpbmUgQVBCQ19NTVAyX0dQSU8JCUFQQkNfUkVHKDB4MDM4KQorI2RlZmluZSBBUEJDX01NUDJfUFdNMAkJQVBCQ19SRUcoMHgwM2MpCisjZGVmaW5lIEFQQkNfTU1QMl9QV00xCQlBUEJDX1JFRygweDA0MCkKKyNkZWZpbmUgQVBCQ19NTVAyX1BXTTIJCUFQQkNfUkVHKDB4MDQ0KQorI2RlZmluZSBBUEJDX01NUDJfUFdNMwkJQVBCQ19SRUcoMHgwNDgpCisjZGVmaW5lIEFQQkNfTU1QMl9TU1AwCQlBUEJDX1JFRygweDA0YykKKyNkZWZpbmUgQVBCQ19NTVAyX1NTUDEJCUFQQkNfUkVHKDB4MDUwKQorI2RlZmluZSBBUEJDX01NUDJfU1NQMgkJQVBCQ19SRUcoMHgwNTQpCisjZGVmaW5lIEFQQkNfTU1QMl9TU1AzCQlBUEJDX1JFRygweDA1OCkKKyNkZWZpbmUgQVBCQ19NTVAyX1NTUDQJCUFQQkNfUkVHKDB4MDVjKQorI2RlZmluZSBBUEJDX01NUDJfU1NQNQkJQVBCQ19SRUcoMHgwNjApCisjZGVmaW5lIEFQQkNfTU1QMl9BSUIJCUFQQkNfUkVHKDB4MDY0KQorI2RlZmluZSBBUEJDX01NUDJfQVNGQVIJCUFQQkNfUkVHKDB4MDY4KQorI2RlZmluZSBBUEJDX01NUDJfQVNTQVIJCUFQQkNfUkVHKDB4MDZjKQorI2RlZmluZSBBUEJDX01NUDJfVVNJTQkJQVBCQ19SRUcoMHgwNzApCisjZGVmaW5lIEFQQkNfTU1QMl9NUE1VCQlBUEJDX1JFRygweDA3NCkKKyNkZWZpbmUgQVBCQ19NTVAyX0lQQwkJQVBCQ19SRUcoMHgwNzgpCisjZGVmaW5lIEFQQkNfTU1QMl9UV1NJNQkJQVBCQ19SRUcoMHgwN2MpCisjZGVmaW5lIEFQQkNfTU1QMl9UV1NJNgkJQVBCQ19SRUcoMHgwODApCisjZGVmaW5lIEFQQkNfTU1QMl9UV1NJX0lOVFNUUwlBUEJDX1JFRygweDA4NCkKKyNkZWZpbmUgQVBCQ19NTVAyX1VBUlQ0CQlBUEJDX1JFRygweDA4OCkKKyNkZWZpbmUgQVBCQ19NTVAyX1JJUEMJCUFQQkNfUkVHKDB4MDhjKQorI2RlZmluZSBBUEJDX01NUDJfVEhTRU5TMQlBUEJDX1JFRygweDA5MCkJLyogVGhlcm1hbCBTZW5zb3IgKi8KKyNkZWZpbmUgQVBCQ19NTVAyX1RIU0VOU19JTlRTVFMJQVBCQ19SRUcoMHgwYTQpCisKIC8qIENvbW1vbiBBUEIgY2xvY2sgcmVnaXN0ZXIgYml0IGRlZmluaXRpb25zICovCiAjZGVmaW5lIEFQQkNfQVBCQ0xLCSgxIDw8IDApICAvKiBBUEIgQnVzIENsb2NrIEVuYWJsZSAqLwogI2RlZmluZSBBUEJDX0ZOQ0xLCSgxIDw8IDEpICAvKiBGdW5jdGlvbmFsIENsb2NrIEVuYWJsZSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3JlZ3MtaWN1LmggYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1pY3UuaAppbmRleCBlNWYwODcyLi5mODgyZDkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1pY3UuaAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvcmVncy1pY3UuaApAQCAtMTcsMTAgKzE3LDEyIEBACiAjZGVmaW5lIElDVV9SRUcoeCkJKElDVV9WSVJUX0JBU0UgKyAoeCkpCiAKICNkZWZpbmUgSUNVX0lOVF9DT05GKG4pCQlJQ1VfUkVHKChuKSA8PCAyKQorI2RlZmluZSBJQ1VfSU5UX0NPTkZfTUFTSwkoMHhmKQorCisvKioqKioqKioqKioqIFBYQTE2OC9QWEE5MTAgKE1NUCkgKioqKioqKioqKioqKioqKioqKioqLwogI2RlZmluZSBJQ1VfSU5UX0NPTkZfQVBfSU5UCSgxIDw8IDYpCiAjZGVmaW5lIElDVV9JTlRfQ09ORl9DUF9JTlQJKDEgPDwgNSkKICNkZWZpbmUgSUNVX0lOVF9DT05GX0lSUQkoMSA8PCA0KQotI2RlZmluZSBJQ1VfSU5UX0NPTkZfTUFTSwkoMHhmKQogCiAjZGVmaW5lIElDVV9BUF9GSVFfU0VMX0lOVF9OVU0JSUNVX1JFRygweDEwOCkJLyogQVAgRklRIFNlbGVjdGVkIEludGVycnVwdCAqLwogI2RlZmluZSBJQ1VfQVBfSVJRX1NFTF9JTlRfTlVNCUlDVV9SRUcoMHgxMEMpCS8qIEFQIElSUSBTZWxlY3RlZCBJbnRlcnJ1cHQgKi8KQEAgLTI4LDQgKzMwLDQyIEBACiAjZGVmaW5lIElDVV9JTlRfU1RBVFVTXzAJSUNVX1JFRygweDEyOCkJLyogSW50ZXJydXB0IFN0dWF0cyAwICovCiAjZGVmaW5lIElDVV9JTlRfU1RBVFVTXzEJSUNVX1JFRygweDEyQykJLyogSW50ZXJydXB0IFN0YXR1cyAxICovCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKiBNTVAyICoqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogSVJRMC9GSVEwIGlzIHJvdXRlZCB0byBTUCBJUlEvRklRLgorICogSVJRMSBpcyByb3V0ZWQgdG8gUEo0IElSUSwgYW5kIElSUTIgaXMgcm91dGVzIHRvIFBKNCBGSVEuCisgKi8KKyNkZWZpbmUgSUNVX0lOVF9ST1VURV9TUF9JUlEJCSgxIDw8IDQpCisjZGVmaW5lIElDVV9JTlRfUk9VVEVfUEo0X0lSUQkJKDEgPDwgNSkKKyNkZWZpbmUgSUNVX0lOVF9ST1VURV9QSjRfRklRCQkoMSA8PCA2KQorCisjZGVmaW5lIE1NUDJfSUNVX1BKNF9JUlFfU1RBVFVTMAlJQ1VfUkVHKDB4MTM4KQorI2RlZmluZSBNTVAyX0lDVV9QSjRfSVJRX1NUQVRVUzEJSUNVX1JFRygweDEzYykKKyNkZWZpbmUgTU1QMl9JQ1VfUEo0X0ZJUV9TVEFUVVMwCUlDVV9SRUcoMHgxNDApCisjZGVmaW5lIE1NUDJfSUNVX1BKNF9GSVFfU1RBVFVTMQlJQ1VfUkVHKDB4MTQ0KQorCisjZGVmaW5lIE1NUDJfSUNVX0lOVDRfU1RBVFVTCQlJQ1VfUkVHKDB4MTUwKQorI2RlZmluZSBNTVAyX0lDVV9JTlQ1X1NUQVRVUwkJSUNVX1JFRygweDE1NCkKKyNkZWZpbmUgTU1QMl9JQ1VfSU5UMTdfU1RBVFVTCQlJQ1VfUkVHKDB4MTU4KQorI2RlZmluZSBNTVAyX0lDVV9JTlQzNV9TVEFUVVMJCUlDVV9SRUcoMHgxNWMpCisjZGVmaW5lIE1NUDJfSUNVX0lOVDUxX1NUQVRVUwkJSUNVX1JFRygweDE2MCkKKworI2RlZmluZSBNTVAyX0lDVV9JTlQ0X01BU0sJCUlDVV9SRUcoMHgxNjgpCisjZGVmaW5lIE1NUDJfSUNVX0lOVDVfTUFTSwkJSUNVX1JFRygweDE2QykKKyNkZWZpbmUgTU1QMl9JQ1VfSU5UMTdfTUFTSwkJSUNVX1JFRygweDE3MCkKKyNkZWZpbmUgTU1QMl9JQ1VfSU5UMzVfTUFTSwkJSUNVX1JFRygweDE3NCkKKyNkZWZpbmUgTU1QMl9JQ1VfSU5UNTFfTUFTSwkJSUNVX1JFRygweDE3OCkKKworI2RlZmluZSBNTVAyX0lDVV9TUF9JUlFfU0VMCQlJQ1VfUkVHKDB4MTAwKQorI2RlZmluZSBNTVAyX0lDVV9QSjRfSVJRX1NFTAkJSUNVX1JFRygweDEwNCkKKyNkZWZpbmUgTU1QMl9JQ1VfUEo0X0ZJUV9TRUwJCUlDVV9SRUcoMHgxMDgpCisKKyNkZWZpbmUgTU1QMl9JQ1VfSU5WRVJUCQkJSUNVX1JFRygweDE2NCkKKworI2RlZmluZSBNTVAyX0lDVV9JTlZfUE1JQwkJKDEgPDwgMCkKKyNkZWZpbmUgTU1QMl9JQ1VfSU5WX1BFUkYJCSgxIDw8IDEpCisjZGVmaW5lIE1NUDJfSUNVX0lOVl9DT01NVFgJCSgxIDw8IDIpCisjZGVmaW5lIE1NUDJfSUNVX0lOVl9DT01NUlgJCSgxIDw8IDMpCisKICNlbmRpZiAvKiBfX0FTTV9NQUNIX0lDVV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC1tbXAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAppbmRleCBjOTNkNWZhLi5hN2RjYzUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW1tcC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTgsMTUgKzgsMTYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KICNpbmNsdWRlIDxtYWNoL2FkZHItbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAogI2RlZmluZSBVQVJUMV9CQVNFCShBUEJfUEhZU19CQVNFICsgMHgzNjAwMCkKICNkZWZpbmUgVUFSVDJfQkFTRQkoQVBCX1BIWVNfQkFTRSArIDB4MTcwMDApCiAjZGVmaW5lIFVBUlQzX0JBU0UJKEFQQl9QSFlTX0JBU0UgKyAweDE4MDAwKQogCitzdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqVUFSVCA9ICh1bnNpZ25lZCBsb25nICopVUFSVDJfQkFTRTsKKwogc3RhdGljIGlubGluZSB2b2lkIHB1dGMoY2hhciBjKQogewotCXZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKlVBUlQgPSAodW5zaWduZWQgbG9uZyAqKVVBUlQyX0JBU0U7Ci0KIAkvKiBVQVJUIGVuYWJsZWQ/ICovCiAJaWYgKCEoVUFSVFtVQVJUX0lFUl0gJiBVQVJUX0lFUl9VVUUpKQogCQlyZXR1cm47CkBAIC0zNCw4ICszNSwxNCBAQAogewogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9kZWNvbXBfc2V0dXAodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19hdmVuZ2Vyc19saXRlKCkpCisJCVVBUlQgPSAodW5zaWduZWQgbG9uZyAqKVVBUlQzX0JBU0U7Cit9CisKIC8qCiAgKiBub3RoaW5nIHRvIGRvCiAgKi8KLSNkZWZpbmUgYXJjaF9kZWNvbXBfc2V0dXAoKQorCiAjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tbXAvaXJxLW1tcDIuYyBiL2FyY2gvYXJtL21hY2gtbW1wL2lycS1tbXAyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2IxODIyMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL2lycS1tbXAyLmMKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1tbXAvaXJxLW1tcDIuYworICoKKyAqICBHZW5lcmljIElSUSBoYW5kbGluZywgR1BJTyBJUlEgZGVtdWx0aXBsZXhpbmcsIGV0Yy4KKyAqCisgKiAgQXV0aG9yOglIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+CisgKiAgQ29weXJpZ2h0OglNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9yZWdzLWljdS5oPgorCisjaW5jbHVkZSAiY29tbW9uLmgiCisKK3N0YXRpYyB2b2lkIGljdV9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVpbnQzMl90IHIgPSBfX3Jhd19yZWFkbChJQ1VfSU5UX0NPTkYoaXJxKSk7CisKKwlyICY9IH5JQ1VfSU5UX1JPVVRFX1BKNF9JUlE7CisJX19yYXdfd3JpdGVsKHIsIElDVV9JTlRfQ09ORihpcnEpKTsKK30KKworc3RhdGljIHZvaWQgaWN1X3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1aW50MzJfdCByID0gX19yYXdfcmVhZGwoSUNVX0lOVF9DT05GKGlycSkpOworCisJciB8PSBJQ1VfSU5UX1JPVVRFX1BKNF9JUlE7CisJX19yYXdfd3JpdGVsKHIsIElDVV9JTlRfQ09ORihpcnEpKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpY3VfaXJxX2NoaXAgPSB7CisJLm5hbWUJCT0gImljdV9pcnEiLAorCS5tYXNrCQk9IGljdV9tYXNrX2lycSwKKwkubWFza19hY2sJPSBpY3VfbWFza19pcnEsCisJLnVubWFzawkJPSBpY3VfdW5tYXNrX2lycSwKK307CisKK3N0YXRpYyB2b2lkIHBtaWNfaXJxX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlmIChpcnEgPT0gSVJRX01NUDJfUE1JQykKKwkJbW1wMl9jbGVhcl9wbWljX2ludCgpOworfQorCisjZGVmaW5lIFNFQ09ORF9JUlFfTUFTSyhfbmFtZV8sIGlycV9iYXNlLCBwcmVmaXgpCQkJXAorc3RhdGljIHZvaWQgX25hbWVfIyNfbWFza19pcnEodW5zaWduZWQgaW50IGlycSkJCQkJXAorewkJCQkJCQkJCVwKKwl1aW50MzJfdCByOwkJCQkJCQlcCisJciA9IF9fcmF3X3JlYWRsKHByZWZpeCMjX01BU0spIHwgKDEgPDwgKGlycSAtIGlycV9iYXNlKSk7CVwKKwlfX3Jhd193cml0ZWwociwgcHJlZml4IyNfTUFTSyk7CQkJCQlcCit9CisKKyNkZWZpbmUgU0VDT05EX0lSUV9VTk1BU0soX25hbWVfLCBpcnFfYmFzZSwgcHJlZml4KQkJCVwKK3N0YXRpYyB2b2lkIF9uYW1lXyMjX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkJCQlcCit7CQkJCQkJCQkJXAorCXVpbnQzMl90IHI7CQkJCQkJCVwKKwlyID0gX19yYXdfcmVhZGwocHJlZml4IyNfTUFTSykgJiB+KDEgPDwgKGlycSAtIGlycV9iYXNlKSk7CVwKKwlfX3Jhd193cml0ZWwociwgcHJlZml4IyNfTUFTSyk7CQkJCQlcCit9CisKKyNkZWZpbmUgU0VDT05EX0lSUV9ERU1VWChfbmFtZV8sIGlycV9iYXNlLCBwcmVmaXgpCQkJXAorc3RhdGljIHZvaWQgX25hbWVfIyNfaXJxX2RlbXV4KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykJXAorewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIHN0YXR1cywgbWFzaywgbjsJCQkJCVwKKwltYXNrID0gX19yYXdfcmVhZGwocHJlZml4IyNfTUFTSyk7CQkJCVwKKwl3aGlsZSAoMSkgewkJCQkJCQlcCisJCXN0YXR1cyA9IF9fcmF3X3JlYWRsKHByZWZpeCMjX1NUQVRVUykgJiB+bWFzazsJCVwKKwkJaWYgKHN0YXR1cyA9PSAwKQkJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQluID0gZmluZF9maXJzdF9iaXQoJnN0YXR1cywgQklUU19QRVJfTE9ORyk7CQlcCisJCXdoaWxlIChuIDwgQklUU19QRVJfTE9ORykgewkJCQlcCisJCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxX2Jhc2UgKyBuKTsJCVwKKwkJCW4gPSBmaW5kX25leHRfYml0KCZzdGF0dXMsIEJJVFNfUEVSX0xPTkcsIG4rMSk7CVwKKwkJfQkJCQkJCQlcCisJfQkJCQkJCQkJXAorfQorCisjZGVmaW5lIFNFQ09ORF9JUlFfQ0hJUChfbmFtZV8sIGlycV9iYXNlLCBwcmVmaXgpCQkJXAorU0VDT05EX0lSUV9NQVNLKF9uYW1lXywgaXJxX2Jhc2UsIHByZWZpeCkJCQkJXAorU0VDT05EX0lSUV9VTk1BU0soX25hbWVfLCBpcnFfYmFzZSwgcHJlZml4KQkJCQlcCitTRUNPTkRfSVJRX0RFTVVYKF9uYW1lXywgaXJxX2Jhc2UsIHByZWZpeCkJCQkJXAorc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBfbmFtZV8jI19pcnFfY2hpcCA9IHsJCQkJXAorCS5uYW1lCQk9ICNfbmFtZV8sCQkJCQlcCisJLm1hc2sJCT0gX25hbWVfIyNfbWFza19pcnEsCQkJCVwKKwkudW5tYXNrCQk9IF9uYW1lXyMjX3VubWFza19pcnEsCQkJCVwKK30KKworU0VDT05EX0lSUV9DSElQKHBtaWMsIElSUV9NTVAyX1BNSUNfQkFTRSwgTU1QMl9JQ1VfSU5UNCk7CitTRUNPTkRfSVJRX0NISVAocnRjLCAgSVJRX01NUDJfUlRDX0JBU0UsICBNTVAyX0lDVV9JTlQ1KTsKK1NFQ09ORF9JUlFfQ0hJUCh0d3NpLCBJUlFfTU1QMl9UV1NJX0JBU0UsIE1NUDJfSUNVX0lOVDE3KTsKK1NFQ09ORF9JUlFfQ0hJUChtaXNjLCBJUlFfTU1QMl9NSVNDX0JBU0UsIE1NUDJfSUNVX0lOVDM1KTsKK1NFQ09ORF9JUlFfQ0hJUChzc3AsICBJUlFfTU1QMl9TU1BfQkFTRSwgIE1NUDJfSUNVX0lOVDUxKTsKKworc3RhdGljIHZvaWQgaW5pdF9tdXhfaXJxKHN0cnVjdCBpcnFfY2hpcCAqY2hpcCwgaW50IHN0YXJ0LCBpbnQgbnVtKQoreworCWludCBpcnE7CisKKwlmb3IgKGlycSA9IHN0YXJ0OyBudW0gPiAwOyBpcnErKywgbnVtLS0pIHsKKwkJLyogbWFzayBhbmQgY2xlYXIgdGhlIElSUSAqLworCQljaGlwLT5tYXNrKGlycSk7CisJCWlmIChjaGlwLT5hY2spCisJCQljaGlwLT5hY2soaXJxKTsKKworCQlzZXRfaXJxX2NoaXAoaXJxLCBjaGlwKTsKKwkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwl9Cit9CisKK3ZvaWQgX19pbml0IG1tcDJfaW5pdF9pY3Uodm9pZCkKK3sKKwlpbnQgaXJxOworCisJZm9yIChpcnEgPSAwOyBpcnEgPCBJUlFfTU1QMl9NVVhfQkFTRTsgaXJxKyspIHsKKwkJaWN1X21hc2tfaXJxKGlycSk7CisJCXNldF9pcnFfY2hpcChpcnEsICZpY3VfaXJxX2NoaXApOworCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7CisKKwkJc3dpdGNoIChpcnEpIHsKKwkJY2FzZSBJUlFfTU1QMl9QTUlDX01VWDoKKwkJY2FzZSBJUlFfTU1QMl9SVENfTVVYOgorCQljYXNlIElSUV9NTVAyX1RXU0lfTVVYOgorCQljYXNlIElSUV9NTVAyX01JU0NfTVVYOgorCQljYXNlIElSUV9NTVAyX1NTUF9NVVg6CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBOT1RFOiBJUlFfTU1QMl9QTUlDIHJlcXVpcmVzIHRoZSBQTUlDIE1GUFIgcmVnaXN0ZXIKKwkgKiB0byBiZSB3cml0dGVuIHRvIGNsZWFyIHRoZSBpbnRlcnJ1cHQKKwkgKi8KKwlwbWljX2lycV9jaGlwLmFjayA9IHBtaWNfaXJxX2FjazsKKworCWluaXRfbXV4X2lycSgmcG1pY19pcnFfY2hpcCwgSVJRX01NUDJfUE1JQ19CQVNFLCAyKTsKKwlpbml0X211eF9pcnEoJnJ0Y19pcnFfY2hpcCwgSVJRX01NUDJfUlRDX0JBU0UsIDIpOworCWluaXRfbXV4X2lycSgmdHdzaV9pcnFfY2hpcCwgSVJRX01NUDJfVFdTSV9CQVNFLCA1KTsKKwlpbml0X211eF9pcnEoJm1pc2NfaXJxX2NoaXAsIElSUV9NTVAyX01JU0NfQkFTRSwgMTUpOworCWluaXRfbXV4X2lycSgmc3NwX2lycV9jaGlwLCBJUlFfTU1QMl9TU1BfQkFTRSwgMik7CisKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfTU1QMl9QTUlDX01VWCwgcG1pY19pcnFfZGVtdXgpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9NTVAyX1JUQ19NVVgsIHJ0Y19pcnFfZGVtdXgpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9NTVAyX1RXU0lfTVVYLCB0d3NpX2lycV9kZW11eCk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX01NUDJfTUlTQ19NVVgsIG1pc2NfaXJxX2RlbXV4KTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfTU1QMl9TU1BfTVVYLCBzc3BfaXJxX2RlbXV4KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbW1wL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1tbXAvaXJxLXB4YTE2OC5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLW1tcC9pcnEuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1tbXAvaXJxLXB4YTE2OC5jCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9qYXNwZXIuYyBiL2FyY2gvYXJtL21hY2gtbW1wL2phc3Blci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmZDRkNjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW1tcC9qYXNwZXIuYwpAQCAtMCwwICsxLDgwIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL2phc3Blci5jCisgKgorICogIFN1cHBvcnQgZm9yIHRoZSBNYXJ2ZWxsIEphc3BlciBEZXZlbG9wbWVudCBQbGF0Zm9ybS4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8bWFjaC9hZGRyLW1hcC5oPgorI2luY2x1ZGUgPG1hY2gvbWZwLW1tcDIuaD4KKyNpbmNsdWRlIDxtYWNoL21tcDIuaD4KKworI2luY2x1ZGUgImNvbW1vbi5oIgorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBqYXNwZXJfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogVUFSVDEgKi8KKwlHUElPMjlfVUFSVDFfUlhELAorCUdQSU8zMF9VQVJUMV9UWEQsCisKKwkvKiBVQVJUMyAqLworCUdQSU81MV9VQVJUM19SWEQsCisJR1BJTzUyX1VBUlQzX1RYRCwKKworCS8qIERGSSAqLworCUdQSU8xNjhfREZJX0QwLAorCUdQSU8xNjdfREZJX0QxLAorCUdQSU8xNjZfREZJX0QyLAorCUdQSU8xNjVfREZJX0QzLAorCUdQSU8xMDdfREZJX0Q0LAorCUdQSU8xMDZfREZJX0Q1LAorCUdQSU8xMDVfREZJX0Q2LAorCUdQSU8xMDRfREZJX0Q3LAorCUdQSU8xMTFfREZJX0Q4LAorCUdQSU8xNjRfREZJX0Q5LAorCUdQSU8xNjNfREZJX0QxMCwKKwlHUElPMTYyX0RGSV9EMTEsCisJR1BJTzE2MV9ERklfRDEyLAorCUdQSU8xMTBfREZJX0QxMywKKwlHUElPMTA5X0RGSV9EMTQsCisJR1BJTzEwOF9ERklfRDE1LAorCUdQSU8xNDNfTkRfbkNTMCwKKwlHUElPMTQ0X05EX25DUzEsCisJR1BJTzE0N19ORF9uV0UsCisJR1BJTzE0OF9ORF9uUkUsCisJR1BJTzE1MF9ORF9BTEUsCisJR1BJTzE0OV9ORF9DTEUsCisJR1BJTzExMl9ORF9SRFkwLAorCUdQSU8xNjBfTkRfUkRZMSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBqYXNwZXJfaW5pdCh2b2lkKQoreworCW1mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoamFzcGVyX3Bpbl9jb25maWcpKTsKKworCS8qIG9uLWNoaXAgZGV2aWNlcyAqLworCW1tcDJfYWRkX3VhcnQoMSk7CisJbW1wMl9hZGRfdWFydCgzKTsKK30KKworTUFDSElORV9TVEFSVChNQVJWRUxMX0pBU1BFUiwgIkphc3BlciBEZXZlbG9wbWVudCBQbGF0Zm9ybSIpCisJLnBoeXNfaW8gICAgICAgID0gQVBCX1BIWVNfQkFTRSwKKwkuYm9vdF9wYXJhbXMgICAgPSAweDAwMDAwMTAwLAorCS5pb19wZ19vZmZzdCAgICA9IChBUEJfVklSVF9CQVNFID4+IDE4KSAmIDB4ZmZmYywKKwkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gbW1wMl9pbml0X2lycSwKKwkudGltZXIgICAgICAgICAgPSAmbW1wMl90aW1lciwKKwkuaW5pdF9tYWNoaW5lICAgPSBqYXNwZXJfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC9tbXAyLmMgYi9hcmNoL2FybS9tYWNoLW1tcC9tbXAyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJlYjlkYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL21tcDIuYwpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtbW1wL21tcDIuYworICoKKyAqIGNvZGUgbmFtZSBNTVAyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2FkZHItbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWFwYmMuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtYXBtdS5oPgorI2luY2x1ZGUgPG1hY2gvY3B1dHlwZS5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPG1hY2gvbWZwLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9kZXZpY2VzLmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJjbG9jay5oIgorCisjZGVmaW5lIE1GUFJfVklSVF9CQVNFCShBUEJfVklSVF9CQVNFICsgMHgxZTAwMCkKKworI2RlZmluZSBBUE1BU0soaSkJKEdQSU9fUkVHU19WSVJUICsgQkFOS19PRkYoaSkgKyAweDljKQorCitzdGF0aWMgc3RydWN0IG1mcF9hZGRyX21hcCBtbXAyX2FkZHJfbWFwW10gX19pbml0ZGF0YSA9IHsKKwlNRlBfQUREUihQTUlDX0lOVCwgMHgyYzQpLAorCisJTUZQX0FERFJfRU5ELAorfTsKKwordm9pZCBtbXAyX2NsZWFyX3BtaWNfaW50KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBtZnByX3BtaWMsIGRhdGE7CisKKwltZnByX3BtaWMgPSBBUEJfVklSVF9CQVNFICsgMHgxZTAwMCArIDB4MmM0OworCWRhdGEgPSBfX3Jhd19yZWFkbChtZnByX3BtaWMpOworCV9fcmF3X3dyaXRlbChkYXRhIHwgKDEgPDwgNiksIG1mcHJfcG1pYyk7CisJX19yYXdfd3JpdGVsKGRhdGEsIG1mcHJfcG1pYyk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBtbXAyX2luaXRfZ3Bpbyh2b2lkKQoreworCWludCBpOworCisJLyogZW5hYmxlIEdQSU8gY2xvY2sgKi8KKwlfX3Jhd193cml0ZWwoQVBCQ19BUEJDTEsgfCBBUEJDX0ZOQ0xLLCBBUEJDX01NUDJfR1BJTyk7CisKKwkvKiB1bm1hc2sgR1BJTyBlZGdlIGRldGVjdGlvbiBmb3IgYWxsIDYgYmFua3MgLS0gQVBNQVNLeCAqLworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCV9fcmF3X3dyaXRlbCgweGZmZmZmZmZmLCBBUE1BU0soaSkpOworCisJcHhhX2luaXRfZ3BpbyhJUlFfTU1QMl9HUElPLCAwLCAxNjcsIE5VTEwpOworfQorCit2b2lkIF9faW5pdCBtbXAyX2luaXRfaXJxKHZvaWQpCit7CisJbW1wMl9pbml0X2ljdSgpOworCW1tcDJfaW5pdF9ncGlvKCk7Cit9CisKKy8qIEFQQiBwZXJpcGhlcmFsIGNsb2NrcyAqLworc3RhdGljIEFQQkNfQ0xLKHVhcnQxLCBNTVAyX1VBUlQxLCAxLCAyNjAwMDAwMCk7CitzdGF0aWMgQVBCQ19DTEsodWFydDIsIE1NUDJfVUFSVDIsIDEsIDI2MDAwMDAwKTsKK3N0YXRpYyBBUEJDX0NMSyh1YXJ0MywgTU1QMl9VQVJUMywgMSwgMjYwMDAwMDApOworc3RhdGljIEFQQkNfQ0xLKHVhcnQ0LCBNTVAyX1VBUlQ0LCAxLCAyNjAwMDAwMCk7CitzdGF0aWMgQVBCQ19DTEsodHdzaTEsIE1NUDJfVFdTSTEsIDAsIDI2MDAwMDAwKTsKK3N0YXRpYyBBUEJDX0NMSyh0d3NpMiwgTU1QMl9UV1NJMiwgMCwgMjYwMDAwMDApOworc3RhdGljIEFQQkNfQ0xLKHR3c2kzLCBNTVAyX1RXU0kzLCAwLCAyNjAwMDAwMCk7CitzdGF0aWMgQVBCQ19DTEsodHdzaTQsIE1NUDJfVFdTSTQsIDAsIDI2MDAwMDAwKTsKK3N0YXRpYyBBUEJDX0NMSyh0d3NpNSwgTU1QMl9UV1NJNSwgMCwgMjYwMDAwMDApOworc3RhdGljIEFQQkNfQ0xLKHR3c2k2LCBNTVAyX1RXU0k2LCAwLCAyNjAwMDAwMCk7CitzdGF0aWMgQVBCQ19DTEsocnRjLCBNTVAyX1JUQywgMCwgMzI3NjgpOworCitzdGF0aWMgQVBNVV9DTEsobmFuZCwgTkFORCwgMHhiZiwgMTAwMDAwMDAwKTsKKworc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIG1tcDJfY2xrcmVnc1tdID0geworCUlOSVRfQ0xLUkVHKCZjbGtfdWFydDEsICJweGEyeHgtdWFydC4wIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa191YXJ0MiwgInB4YTJ4eC11YXJ0LjEiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3VhcnQzLCAicHhhMnh4LXVhcnQuMiIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfdWFydDQsICJweGEyeHgtdWFydC4zIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa190d3NpMSwgInB4YTJ4eC1pMmMuMCIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfdHdzaTIsICJweGEyeHgtaTJjLjEiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3R3c2kzLCAicHhhMnh4LWkyYy4yIiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa190d3NpNCwgInB4YTJ4eC1pMmMuMyIsIE5VTEwpLAorCUlOSVRfQ0xLUkVHKCZjbGtfdHdzaTUsICJweGEyeHgtaTJjLjQiLCBOVUxMKSwKKwlJTklUX0NMS1JFRygmY2xrX3R3c2k2LCAicHhhMnh4LWkyYy41IiwgTlVMTCksCisJSU5JVF9DTEtSRUcoJmNsa19uYW5kLCAicHhhM3h4LW5hbmQiLCBOVUxMKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1tcDJfaW5pdCh2b2lkKQoreworCWlmIChjcHVfaXNfbW1wMigpKSB7CisJCW1mcF9pbml0X2Jhc2UoTUZQUl9WSVJUX0JBU0UpOworCQltZnBfaW5pdF9hZGRyKG1tcDJfYWRkcl9tYXApOworCQljbGtzX3JlZ2lzdGVyKEFSUkFZX0FORF9TSVpFKG1tcDJfY2xrcmVncykpOworCX0KKworCXJldHVybiAwOworfQorcG9zdGNvcmVfaW5pdGNhbGwobW1wMl9pbml0KTsKKworLyogb24tY2hpcCBkZXZpY2VzICovCitNTVAyX0RFVklDRSh1YXJ0MSwgInB4YTJ4eC11YXJ0IiwgMCwgVUFSVDEsIDB4ZDQwMzAwMDAsIDB4MzAsIDQsIDUpOworTU1QMl9ERVZJQ0UodWFydDIsICJweGEyeHgtdWFydCIsIDEsIFVBUlQyLCAweGQ0MDE3MDAwLCAweDMwLCAyMCwgMjEpOworTU1QMl9ERVZJQ0UodWFydDMsICJweGEyeHgtdWFydCIsIDIsIFVBUlQzLCAweGQ0MDE4MDAwLCAweDMwLCAyMiwgMjMpOworTU1QMl9ERVZJQ0UodWFydDQsICJweGEyeHgtdWFydCIsIDMsIFVBUlQ0LCAweGQ0MDE2MDAwLCAweDMwLCAxOCwgMTkpOworTU1QMl9ERVZJQ0UodHdzaTEsICJweGEyeHgtaTJjIiwgMCwgVFdTSTEsIDB4ZDQwMTEwMDAsIDB4NzApOworTU1QMl9ERVZJQ0UodHdzaTIsICJweGEyeHgtaTJjIiwgMSwgVFdTSTIsIDB4ZDQwMzEwMDAsIDB4NzApOworTU1QMl9ERVZJQ0UodHdzaTMsICJweGEyeHgtaTJjIiwgMiwgVFdTSTMsIDB4ZDQwMzIwMDAsIDB4NzApOworTU1QMl9ERVZJQ0UodHdzaTQsICJweGEyeHgtaTJjIiwgMywgVFdTSTQsIDB4ZDQwMzMwMDAsIDB4NzApOworTU1QMl9ERVZJQ0UodHdzaTUsICJweGEyeHgtaTJjIiwgNCwgVFdTSTUsIDB4ZDQwMzM4MDAsIDB4NzApOworTU1QMl9ERVZJQ0UodHdzaTYsICJweGEyeHgtaTJjIiwgNSwgVFdTSTYsIDB4ZDQwMzQwMDAsIDB4NzApOworTU1QMl9ERVZJQ0UobmFuZCwgInB4YTN4eC1uYW5kIiwgLTEsIE5BTkQsIDB4ZDQyODMwMDAsIDB4MTAwLCAyOCwgMjkpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW1tcC90aW1lLmMgYi9hcmNoL2FybS9tYWNoLW1tcC90aW1lLmMKaW5kZXggYTg0MDBiYi4uY2Y3NTY5NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tbXAvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbW1wL3RpbWUuYwpAQCAtMzAsNyArMzAsMTAgQEAKIAogI2luY2x1ZGUgPG1hY2gvYWRkci1tYXAuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtdGltZXJzLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWFwYmMuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKyNpbmNsdWRlIDxtYWNoL2NwdXR5cGUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAKICNpbmNsdWRlICJjbG9jay5oIgogCkBAIC0xNTgsNyArMTYxLDcgQEAKIAogCV9fcmF3X3dyaXRlbChjZXIgJiB+MHgxLCBUSU1FUlNfVklSVF9CQVNFICsgVE1SX0NFUik7IC8qIGRpc2FibGUgKi8KIAotCWNjciAmPSBUTVJfQ0NSX0NTXzAoMHgzKTsKKwljY3IgJj0gKGNwdV9pc19tbXAyKCkpID8gVE1SX0NDUl9DU18wKDApIDogVE1SX0NDUl9DU18wKDMpOwogCV9fcmF3X3dyaXRlbChjY3IsIFRJTUVSU19WSVJUX0JBU0UgKyBUTVJfQ0NSKTsKIAogCS8qIGZyZWUtcnVubmluZyBtb2RlICovCkBAIC0xOTcsMyArMjAwLDI0IEBACiAJY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNrc3JjKTsKIAljbG9ja2V2ZW50c19yZWdpc3Rlcl9kZXZpY2UoJmNrZXZ0KTsKIH0KKworc3RhdGljIHZvaWQgX19pbml0IG1tcDJfdGltZXJfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgY2xrX3JzdDsKKworCV9fcmF3X3dyaXRlbChBUEJDX0FQQkNMSyB8IEFQQkNfUlNULCBBUEJDX01NUDJfVElNRVJTKTsKKworCS8qCisJICogZW5hYmxlIGJ1cy9mdW5jdGlvbmFsIGNsb2NrLCBlbmFibGUgNi41TUh6IChkaXZpZGVyIDQpLAorCSAqIHJlbGVhc2UgcmVzZXQKKwkgKi8KKwljbGtfcnN0ID0gQVBCQ19BUEJDTEsgfCBBUEJDX0ZOQ0xLIHwgQVBCQ19GTkNMS1NFTCgxKTsKKwlfX3Jhd193cml0ZWwoY2xrX3JzdCwgQVBCQ19NTVAyX1RJTUVSUyk7CisKKwl0aW1lcl9pbml0KElSUV9NTVAyX1RJTUVSMSk7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgbW1wMl90aW1lciA9IHsKKwkuaW5pdAk9IG1tcDJfdGltZXJfaW5pdCwKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL0tjb25maWcKaW5kZXggNmZiZTY4Zi4uZjJkMzA5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL0tjb25maWcKQEAgLTE0LDYgKzE0LDEyIEBACiAJICBTYXkgJ1knIGhlcmUgaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCB0aGUKIAkgIE1hcnZlbGwgUkQtNzh4MDAtbUFTQSBSZWZlcmVuY2UgRGVzaWduLgogCitjb25maWcgTUFDSF9URVJBU1RBVElPTl9XWEwKKwlib29sICJCdWZmYWxvIFdMWCAoVGVyYXN0YXRpb24gRHVvKSBOQVMiCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlCisJICBCdWZmYWxvIFdYTCBOYXMuCisKIGVuZG1lbnUKIAogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9NYWtlZmlsZQppbmRleCBkYTYyOGI3Li42N2ExM2Y5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW12Nzh4eDAvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL01ha2VmaWxlCkBAIC0xLDMgKzEsNCBAQAotb2JqLXkJCQkJKz0gY29tbW9uLm8gYWRkci1tYXAubyBpcnEubyBwY2llLm8KK29iai15CQkJCSs9IGNvbW1vbi5vIGFkZHItbWFwLm8gbXBwLm8gaXJxLm8gcGNpZS5vCiBvYmotJChDT05GSUdfTUFDSF9EQjc4WDAwX0JQKQkrPSBkYjc4eDAwLWJwLXNldHVwLm8KIG9iai0kKENPTkZJR19NQUNIX1JENzhYMDBfTUFTQSkJKz0gcmQ3OHgwMC1tYXNhLXNldHVwLm8KK29iai0kKENPTkZJR19NQUNIX1RFUkFTVEFUSU9OX1dYTCkgKz0gYnVmZmFsby13eGwtc2V0dXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2J1ZmZhbG8td3hsLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvYnVmZmFsby13eGwtc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWU1ZTU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL2J1ZmZhbG8td3hsLXNldHVwLmMKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW12Nzh4eDAvYnVmZmFsby13eGwtc2V0dXAuYworICoKKyAqIEJ1ZmZhbG8gV1hMIChUZXJhc3RhdGlvbiBEdW8pIFNldHVwIHJvdXRpbmVzCisgKgorICogc2ViYXN0aWVuIHJlcXVpZW0gPHNlYmFzdGllbkByZXF1aWVtLmZyPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWFjaC9tdjc4eHgwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAibXBwLmgiCisKKworLyogVGhpcyBhcmNoIGhhcyAyIEdpZ2EgRXRoZXJuZXQgKi8KKworc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIGRiNzh4MDBfZ2UwMF9kYXRhID0geworCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDApLAorfTsKKworc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIGRiNzh4MDBfZ2UwMV9kYXRhID0geworCS5waHlfYWRkcgk9IE1WNjQzWFhfRVRIX1BIWV9BRERSKDgpLAorfTsKKworCisvKiAyIFNBVEEgY29udHJvbGxlciBzdXBwb3J0aW5nIEhvdFBsdWcgKi8KKworc3RhdGljIHN0cnVjdCBtdl9zYXRhX3BsYXRmb3JtX2RhdGEgZGI3OHgwMF9zYXRhX2RhdGEgPSB7CisJLm5fcG9ydHMJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGRiNzh4MDBfaTJjX3J0YyA9IHsKKwlJMkNfQk9BUkRfSU5GTygiZHMxMzM4IiwgMHg2OCksCit9OworCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgd3hsX21wcF9jb25maWdbXSBfX2luaXRkYXRhID0geworCU1QUDBfR0UxX1RYQ0xLLAorCU1QUDFfR0UxX1RYQ1RMLAorCU1QUDJfR0UxX1JYQ1RMLAorCU1QUDNfR0UxX1JYQ0xLLAorCU1QUDRfR0UxX1RYRDAsCisJTVBQNV9HRTFfVFhEMSwKKwlNUFA2X0dFMV9UWEQyLAorCU1QUDdfR0UxX1RYRDMsCisJTVBQOF9HRTFfUlhEMCwKKwlNUFA5X0dFMV9SWEQxLAorCU1QUDEwX0dFMV9SWEQyLAorCU1QUDExX0dFMV9SWEQzLAorCU1QUDEyX0dQSU8sCisJTVBQMTNfU1lTUlNUX09VVG4sCisJTVBQMTRfU0FUQTFfQUNUbiwKKwlNUFAxNV9TQVRBMF9BQ1RuLAorCU1QUDE2X0dQSU8sCisJTVBQMTdfR1BJTywKKwlNUFAxOF9HUElPLAorCU1QUDE5X0dQSU8sCisJTVBQMjBfR1BJTywKKwlNUFAyMV9HUElPLAorCU1QUDIyX0dQSU8sCisJTVBQMjNfR1BJTywKKwlNUFAyNF9VQTJfVFhELAorCU1QUDI1X1VBMl9SWEQsCisJTVBQMjZfVUEyX0NUU24sCisJTVBQMjdfVUEyX1JUU24sCisJTVBQMjhfR1BJTywKKwlNUFAyOV9TWVNSU1RfT1VUbiwKKwlNUFAzMF9HUElPLAorCU1QUDMxX0dQSU8sCisJTVBQMzJfR1BJTywKKwlNUFAzM19HUElPLAorCU1QUDM0X0dQSU8sCisJTVBQMzVfR1BJTywKKwlNUFAzNl9HUElPLAorCU1QUDM3X0dQSU8sCisJTVBQMzhfR1BJTywKKwlNUFAzOV9HUElPLAorCU1QUDQwX1VOVVNFRCwKKwlNUFA0MV9VTlVTRUQsCisJTVBQNDJfVU5VU0VELAorCU1QUDQzX1VOVVNFRCwKKwlNUFA0NF9VTlVTRUQsCisJTVBQNDVfVU5VU0VELAorCU1QUDQ2X1VOVVNFRCwKKwlNUFA0N19VTlVTRUQsCisJTVBQNDhfU0FUQTFfQUNUbiwKKwlNUFA0OV9TQVRBMF9BQ1RuLAorCTAKK307CisKKworc3RhdGljIHZvaWQgX19pbml0IHd4bF9pbml0KHZvaWQpCit7CisJLyoKKwkgKiBCYXNpYyBNVjc4eHgwIHNldHVwLiBOZWVkcyB0byBiZSBjYWxsZWQgZWFybHkuCisJICovCisJbXY3OHh4MF9pbml0KCk7CisJbXY3OHh4MF9tcHBfY29uZih3eGxfbXBwX2NvbmZpZyk7CisKKwkvKgorCSAqIFBhcnRpdGlvbiBvbi1jaGlwIHBlcmlwaGVyYWxzIGJldHdlZW4gdGhlIHR3byBDUFUgY29yZXMuCisJICovCisJbXY3OHh4MF9laGNpMF9pbml0KCk7CisJbXY3OHh4MF9laGNpMV9pbml0KCk7CisJbXY3OHh4MF9laGNpMl9pbml0KCk7CisJbXY3OHh4MF9nZTAwX2luaXQoJmRiNzh4MDBfZ2UwMF9kYXRhKTsKKwltdjc4eHgwX2dlMDFfaW5pdCgmZGI3OHgwMF9nZTAxX2RhdGEpOworCW12Nzh4eDBfc2F0YV9pbml0KCZkYjc4eDAwX3NhdGFfZGF0YSk7CisJbXY3OHh4MF91YXJ0MF9pbml0KCk7CisJbXY3OHh4MF91YXJ0MV9pbml0KCk7CisJbXY3OHh4MF91YXJ0Ml9pbml0KCk7CisJbXY3OHh4MF91YXJ0M19pbml0KCk7CisJbXY3OHh4MF9pMmNfaW5pdCgpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsICZkYjc4eDAwX2kyY19ydGMsIDEpOworfQorCitzdGF0aWMgaW50IF9faW5pdCB3eGxfcGNpX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc190ZXJhc3RhdGlvbl93eGwoKSkgeworCQkvKgorCQkgKiBBc3NpZ24gdGhlIHgxNiBQQ0llIHNsb3Qgb24gdGhlIGJvYXJkIHRvIENQVSBjb3JlCisJCSAqICMwLCBhbmQgbGV0IENQVSBjb3JlICMxIGhhdmUgdGhlIGZvdXIgeDEgc2xvdHMuCisJCSAqLworCQlpZiAobXY3OHh4MF9jb3JlX2luZGV4KCkgPT0gMCkKKwkJCW12Nzh4eDBfcGNpZV9pbml0KDAsIDEpOworCQllbHNlCisJCQltdjc4eHgwX3BjaWVfaW5pdCgxLCAwKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK3N1YnN5c19pbml0Y2FsbCh3eGxfcGNpX2luaXQpOworCitNQUNISU5FX1NUQVJUKFRFUkFTVEFUSU9OX1dYTCwgIkJ1ZmZhbG8gTmFzIFdYTCIpCisJLyogTWFpbnRhaW5lcjogU2ViYXN0aWVuIFJlcXVpZW0gPHNlYmFzdGllbkByZXF1aWVtLmZyPiAqLworCS5waHlzX2lvCT0gTVY3OFhYMF9SRUdTX1BIWVNfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoKE1WNzhYWDBfUkVHU19WSVJUX0JBU0UpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5pbml0X21hY2hpbmUJPSB3eGxfaW5pdCwKKwkubWFwX2lvCQk9IG12Nzh4eDBfbWFwX2lvLAorCS5pbml0X2lycQk9IG12Nzh4eDBfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZtdjc4eHgwX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9tcHAuYyBiL2FyY2gvYXJtL21hY2gtbXY3OHh4MC9tcHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTRhYzUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL21wcC5jCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLW12Nzh4MDAvbXBwLmMKKyAqCisgKiBNUFAgZnVuY3Rpb25zIGZvciBNYXJ2ZWxsIE1WNzh4MDAgU29DcworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQorICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbWJ1cy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAibXBwLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19pbml0IG12Nzh4eDBfdmFyaWFudCh2b2lkKQoreworCXUzMiBkZXYsIHJldjsKKworCW12Nzh4eDBfcGNpZV9pZCgmZGV2LCAmcmV2KTsKKworCWlmIChkZXYgPT0gTVY3ODEwMF9ERVZfSUQgJiYgcmV2ID49IE1WNzgxMDBfUkVWX0EwKQorCQlyZXR1cm4gTVBQXzc4MTAwX0EwX01BU0s7CisKKwlwcmludGsoS0VSTl9FUlIgIk1QUCBzZXR1cDogdW5rbm93biBtdjc4eDAwIHZhcmlhbnQgIgorCQkJIihkZXYgJSN4IHJldiAlI3gpXG4iLCBkZXYsIHJldik7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgTVBQX0NUUkwoaSkJKERFVl9CVVNfVklSVF9CQVNFICsgKGkpICogNCkKKyNkZWZpbmUgTVBQX05SX1JFR1MJKDEgKyBNUFBfTUFYLzgpCisKK3ZvaWQgX19pbml0IG12Nzh4eDBfbXBwX2NvbmYodW5zaWduZWQgaW50ICptcHBfbGlzdCkKK3sKKwl1MzIgbXBwX2N0cmxbTVBQX05SX1JFR1NdOworCXVuc2lnbmVkIGludCB2YXJpYW50X21hc2s7CisJaW50IGk7CisKKwl2YXJpYW50X21hc2sgPSBtdjc4eHgwX3ZhcmlhbnQoKTsKKwlpZiAoIXZhcmlhbnRfbWFzaykKKwkJcmV0dXJuOworCisJLyogSW5pdGlhbGl6ZSBncGlvbGliLiAqLworCW9yaW9uX2dwaW9faW5pdCgpOworCisJcHJpbnRrKEtFUk5fREVCVUcgImluaXRpYWwgTVBQIHJlZ3M6Iik7CisJZm9yIChpID0gMDsgaSA8IE1QUF9OUl9SRUdTOyBpKyspIHsKKwkJbXBwX2N0cmxbaV0gPSByZWFkbChNUFBfQ1RSTChpKSk7CisJCXByaW50aygiICUwOHgiLCBtcHBfY3RybFtpXSk7CisJfQorCXByaW50aygiXG4iKTsKKworCXdoaWxlICgqbXBwX2xpc3QpIHsKKwkJdW5zaWduZWQgaW50IG51bSA9IE1QUF9OVU0oKm1wcF9saXN0KTsKKwkJdW5zaWduZWQgaW50IHNlbCA9IE1QUF9TRUwoKm1wcF9saXN0KTsKKwkJaW50IHNoaWZ0LCBncGlvX21vZGU7CisKKwkJaWYgKG51bSA+IE1QUF9NQVgpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAibXY3OHh4MF9tcHBfY29uZjogaW52YWxpZCBNUFAgIgorCQkJCQkibnVtYmVyICgldSlcbiIsIG51bSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoISgqbXBwX2xpc3QgJiB2YXJpYW50X21hc2spKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCSJtdjc4eHgwX21wcF9jb25mOiByZXF1ZXN0ZWQgTVBQJXUgY29uZmlnICIKKwkJCQkJInVuYXZhaWxhYmxlIG9uIHRoaXMgaGFyZHdhcmVcbiIsIG51bSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXNoaWZ0ID0gKG51bSAmIDcpIDw8IDI7CisJCW1wcF9jdHJsW251bSAvIDhdICY9IH4oMHhmIDw8IHNoaWZ0KTsKKwkJbXBwX2N0cmxbbnVtIC8gOF0gfD0gc2VsIDw8IHNoaWZ0OworCisJCWdwaW9fbW9kZSA9IDA7CisJCWlmICgqbXBwX2xpc3QgJiBNUFBfSU5QVVRfTUFTSykKKwkJCWdwaW9fbW9kZSB8PSBHUElPX0lOUFVUX09LOworCQlpZiAoKm1wcF9saXN0ICYgTVBQX09VVFBVVF9NQVNLKQorCQkJZ3Bpb19tb2RlIHw9IEdQSU9fT1VUUFVUX09LOworCQlpZiAoc2VsICE9IDApCisJCQlncGlvX21vZGUgPSAwOworCQlvcmlvbl9ncGlvX3NldF92YWxpZChudW0sIGdwaW9fbW9kZSk7CisKKwkJbXBwX2xpc3QrKzsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAiICBmaW5hbCBNUFAgcmVnczoiKTsKKwlmb3IgKGkgPSAwOyBpIDwgTVBQX05SX1JFR1M7IGkrKykgeworCQl3cml0ZWwobXBwX2N0cmxbaV0sIE1QUF9DVFJMKGkpKTsKKwkJcHJpbnRrKCIgJTA4eCIsIG1wcF9jdHJsW2ldKTsKKwl9CisJcHJpbnRrKCJcbiIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL21wcC5oIGIvYXJjaC9hcm0vbWFjaC1tdjc4eHgwL21wcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwODQwYjcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW12Nzh4eDAvbXBwLmgKQEAgLTAsMCArMSwzNDcgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW12Nzh4eDAvbXBwLmggLS0gTXVsdGkgUHVycG9zZSBQaW5zCisgKgorICoKKyAqIHNlYmFzdGllbiByZXF1aWVtIDxzZWJhc3RpZW5AcmVxdWllbS5mcj4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaWZuZGVmIF9fTVY3OFgwMF9NUFBfSAorI2RlZmluZSBfX01WNzhYMDBfTVBQX0gKKworI2RlZmluZSBNUFAoX251bSwgX3NlbCwgX2luLCBfb3V0LCBfNzgxMDBfQTApIChcCisgICAgLyogTVBQIG51bWJlciAqLyAgICAgICAgKChfbnVtKSAmIDB4ZmYpIHwgXAorICAgIC8qIE1QUCBzZWxlY3QgdmFsdWUgKi8gICAgICAgICgoKF9zZWwpICYgMHhmKSA8PCA4KSB8IFwKKyAgICAvKiBtYXkgYmUgaW5wdXQgc2lnbmFsICovICAgICgoISEoX2luKSkgPDwgMTIpIHwgXAorICAgIC8qIG1heSBiZSBvdXRwdXQgc2lnbmFsICovICAgICgoISEoX291dCkpIDw8IDEzKSB8IFwKKyAgICAvKiBhdmFpbGFibGUgb24gQTAgKi8gICAgKCghIShfNzgxMDBfQTApKSA8PCAxNCkpCisKKyNkZWZpbmUgTVBQX05VTSh4KSAgICAoKHgpICYgMHhmZikKKyNkZWZpbmUgTVBQX1NFTCh4KSAgICAoKCh4KSA+PiA4KSAmIDB4ZikKKworICAgICAgICAgICAgICAgIC8qICAgbnVtIHNlbCAgaSAgbyAgNzgxMDBfQTAgICovCisKKyNkZWZpbmUgTVBQX0lOUFVUX01BU0sgICAgICAgIE1QUCgwLCAweDAsIDEsIDAsIDApCisjZGVmaW5lIE1QUF9PVVRQVVRfTUFTSyAgICAgICAgTVBQKDAsIDB4MCwgMCwgMSwgMCkKKworI2RlZmluZSBNUFBfNzgxMDBfQTBfTUFTSyAgICBNUFAoMCwgMHgwLCAwLCAwLCAxKQorCisjZGVmaW5lIE1QUDBfR1BJTyAgICAgICAgTVBQKDAsIDB4MCwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQMF9HRTBfQ09MICAgICAgICBNUFAoMCwgMHgxLCAxLCAwLCAxKQorI2RlZmluZSBNUFAwX0dFMV9UWENMSyAgICAgICAgTVBQKDAsIDB4MiwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMF9VTlVTRUQgICAgICAgIE1QUCgwLCAweDMsIDAsIDAsIDEpCisKKyNkZWZpbmUgTVBQMV9HUElPICAgICAgICBNUFAoMSwgMHgwLCAxLCAxLCAxKQorI2RlZmluZSBNUFAxX0dFMF9SWEVSUiAgICAgICAgTVBQKDEsIDB4MSwgMSwgMCwgMSkKKyNkZWZpbmUgTVBQMV9HRTFfVFhDVEwgICAgICAgIE1QUCgxLCAweDIsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDFfVU5VU0VEICAgICAgICBNUFAoMSwgMHgzLCAwLCAwLCAxKQorCisjZGVmaW5lIE1QUDJfR1BJTyAgICAgICAgTVBQKDIsIDB4MCwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQMl9HRTBfQ1JTICAgICAgICBNUFAoMiwgMHgxLCAxLCAwLCAxKQorI2RlZmluZSBNUFAyX0dFMV9SWENUTCAgICAgICAgTVBQKDIsIDB4MiwgMSwgMCwgMSkKKyNkZWZpbmUgTVBQMl9VTlVTRUQgICAgICAgIE1QUCgyLCAweDMsIDAsIDAsIDEpCisKKyNkZWZpbmUgTVBQM19HUElPICAgICAgICBNUFAoMywgMHgwLCAxLCAxLCAxKQorI2RlZmluZSBNUFAzX0dFMF9UWEVSUiAgICAgICAgTVBQKDMsIDB4MSwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQM19HRTFfUlhDTEsgICAgICAgIE1QUCgzLCAweDIsIDEsIDAsIDEpCisjZGVmaW5lIE1QUDNfVU5VU0VEICAgICAgICBNUFAoMywgMHgzLCAwLCAwLCAxKQorCisjZGVmaW5lIE1QUDRfR1BJTyAgICAgICAgTVBQKDQsIDB4MCwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQNF9HRTBfVFhENCAgICAgICAgTVBQKDQsIDB4MSwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQNF9HRTFfVFhEMCAgICAgICAgTVBQKDQsIDB4MiwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQNF9VTlVTRUQgICAgICAgIE1QUCg0LCAweDMsIDAsIDAsIDEpCisKKyNkZWZpbmUgTVBQNV9HUElPICAgICAgICBNUFAoNSwgMHgwLCAxLCAxLCAxKQorI2RlZmluZSBNUFA1X0dFMF9UWEQ1ICAgICAgICBNUFAoNSwgMHgxLCAwLCAxLCAxKQorI2RlZmluZSBNUFA1X0dFMV9UWEQxICAgICAgICBNUFAoNSwgMHgyLCAwLCAxLCAxKQorI2RlZmluZSBNUFA1X1VOVVNFRCAgICAgICAgTVBQKDUsIDB4MywgMCwgMCwgMSkKKworI2RlZmluZSBNUFA2X0dQSU8gICAgICAgIE1QUCg2LCAweDAsIDEsIDEsIDEpCisjZGVmaW5lIE1QUDZfR0UwX1RYRDYgICAgICAgIE1QUCg2LCAweDEsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDZfR0UxX1RYRDIgICAgICAgIE1QUCg2LCAweDIsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDZfVU5VU0VEICAgICAgICBNUFAoNiwgMHgzLCAwLCAwLCAxKQorCisjZGVmaW5lIE1QUDdfR1BJTyAgICAgICAgTVBQKDcsIDB4MCwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQN19HRTBfVFhENyAgICAgICAgTVBQKDcsIDB4MSwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQN19HRTFfVFhEMyAgICAgICAgTVBQKDcsIDB4MiwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQN19VTlVTRUQgICAgICAgIE1QUCg3LCAweDMsIDAsIDAsIDEpCisKKyNkZWZpbmUgTVBQOF9HUElPICAgICAgICBNUFAoOCwgMHgwLCAxLCAxLCAxKQorI2RlZmluZSBNUFA4X0dFMF9SWEQ0ICAgICAgICBNUFAoOCwgMHgxLCAxLCAwLCAxKQorI2RlZmluZSBNUFA4X0dFMV9SWEQwICAgICAgICBNUFAoOCwgMHgyLCAxLCAwLCAxKQorI2RlZmluZSBNUFA4X1VOVVNFRCAgICAgICAgTVBQKDgsIDB4MywgMCwgMCwgMSkKKworI2RlZmluZSBNUFA5X0dQSU8gICAgICAgIE1QUCg5LCAweDAsIDEsIDEsIDEpCisjZGVmaW5lIE1QUDlfR0UwX1JYRDUgICAgICAgIE1QUCg5LCAweDEsIDEsIDAsIDEpCisjZGVmaW5lIE1QUDlfR0UxX1JYRDEgICAgICAgIE1QUCg5LCAweDIsIDEsIDAsIDEpCisjZGVmaW5lIE1QUDlfVU5VU0VEICAgICAgICBNUFAoOSwgMHgzLCAwLCAwLCAxKQorCisjZGVmaW5lIE1QUDEwX0dQSU8gICAgICAgIE1QUCgxMCwgMHgwLCAxLCAxLCAxKQorI2RlZmluZSBNUFAxMF9HRTBfUlhENiAgICAgICAgTVBQKDEwLCAweDEsIDEsIDAsIDEpCisjZGVmaW5lIE1QUDEwX0dFMV9SWEQyICAgICAgICBNUFAoMTAsIDB4MiwgMSwgMCwgMSkKKyNkZWZpbmUgTVBQMTBfVU5VU0VEICAgICAgICBNUFAoMTAsIDB4MywgMCwgMCwgMSkKKworI2RlZmluZSBNUFAxMV9HUElPICAgICAgICBNUFAoMTEsIDB4MCwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQMTFfR0UwX1JYRDcgICAgICAgIE1QUCgxMSwgMHgxLCAxLCAwLCAxKQorI2RlZmluZSBNUFAxMV9HRTFfUlhEMyAgICAgICAgTVBQKDExLCAweDIsIDEsIDAsIDEpCisjZGVmaW5lIE1QUDExX1VOVVNFRCAgICAgICAgTVBQKDExLCAweDMsIDAsIDAsIDEpCisKKyNkZWZpbmUgTVBQMTJfR1BJTyAgICAgICAgTVBQKDEyLCAweDAsIDEsIDEsIDEpCisjZGVmaW5lIE1QUDEyX01fQkIgICAgICAgIE1QUCgxMiwgMHgzLCAxLCAwLCAxKQorI2RlZmluZSBNUFAxMl9VQTBfQ1RTbiAgICAgICAgTVBQKDEyLCAweDQsIDEsIDAsIDEpCisjZGVmaW5lIE1QUDEyX05BTkRfRkxBU0hfUkVuMCAgICBNUFAoMTIsIDB4NSwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMTJfVERNMF9TQ1NuICAgICAgICBNUFAoMTIsIDBYNiwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMTJfVU5VU0VEICAgICAgICBNUFAoMTIsIDB4MSwgMCwgMCwgMSkKKworI2RlZmluZSBNUFAxM19HUElPICAgICAgICBNUFAoMTMsIDB4MCwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQMTNfU1lTUlNUX09VVG4gICAgTVBQKDEzLCAweDMsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDEzX1VBMF9SVFNuICAgICAgICBNUFAoMTMsIDB4NCwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMTNfTkFOX0ZMQVNIX1dFbjAgICAgTVBQKDEzLCAweDUsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDEzX1RETV9TQ0xLICAgICAgICBNUFAoMTMsIDB4NiwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMTNfVU5VU0VEICAgICAgICBNUFAoMTMsIDB4MSwgMCwgMCwgMSkKKworI2RlZmluZSBNUFAxNF9HUElPICAgICAgICBNUFAoMTQsIDB4MCwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQMTRfU0FUQTFfQUNUbiAgICBNUFAoMTQsIDB4MywgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMTRfVUExX0NUU24gICAgICAgIE1QUCgxNCwgMHg0LCAxLCAwLCAxKQorI2RlZmluZSBNUFAxNF9OQU5EX0ZMQVNIX1JFbjEgICAgTVBQKDE0LCAweDUsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDE0X1RETV9TTU9TSSAgICAgICAgTVBQKDE0LCAweDYsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDE0X1VOVVNFRCAgICAgICAgTVBQKDE0LCAweDEsIDAsIDAsIDEpCisKKyNkZWZpbmUgTVBQMTVfR1BJTyAgICAgICAgTVBQKDE1LCAweDAsIDEsIDEsIDEpCisjZGVmaW5lIE1QUDE1X1NBVEEwX0FDVG4gICAgTVBQKDE1LCAweDMsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDE1X1VBMV9SVFNuICAgICAgICBNUFAoMTUsIDB4NCwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMTVfTkFORF9GTEFTSF9XRW4xICAgIE1QUCgxNSwgMHg1LCAwLCAxLCAxKQorI2RlZmluZSBNUFAxNV9URE1fU01JU08gICAgICAgIE1QUCgxNSwgMHg2LCAxLCAwLCAxKQorI2RlZmluZSBNUFAxNV9VTlVTRUQgICAgICAgIE1QUCgxNSwgMHgxLCAwLCAwLCAxKQorCisjZGVmaW5lIE1QUDE2X0dQSU8gICAgICAgIE1QUCgxNiwgMHgwLCAxLCAxLCAxKQorI2RlZmluZSBNUFAxNl9TQVRBMV9QUkVTRU5UbiAgICBNUFAoMTYsIDB4MywgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMTZfVUEyX1RYRCAgICAgICAgTVBQKDE2LCAweDQsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDE2X05BTkRfRkxBU0hfUkVuMyAgICBNUFAoMTYsIDB4NSwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMTZfVERNX0lOVG4gICAgICAgIE1QUCgxNiwgMHg2LCAxLCAwLCAxKQorI2RlZmluZSBNUFAxNl9VTlVTRUQgICAgICAgIE1QUCgxNiwgMHgxLCAwLCAwLCAxKQorCisKKyNkZWZpbmUgTVBQMTdfR1BJTyAgICAgICAgTVBQKDE3LCAweDAsIDEsIDEsIDEpCisjZGVmaW5lIE1QUDE3X1NBVEEwX1BSRVNFTlRuICAgIE1QUCgxNywgMHgzLCAwLCAxLCAxKQorI2RlZmluZSBNUFAxN19VQTJfUlhEICAgICAgICBNUFAoMTcsIDB4NCwgMSwgMCwgMSkKKyNkZWZpbmUgTVBQMTdfTkFORF9GTEFTSF9XRW4zICAgIE1QUCgxNywgMHg1LCAwLCAxLCAxKQorI2RlZmluZSBNUFAxN19URE1fUlNUbiAgICAgICAgTVBQKDE3LCAweDYsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDE3X1VOVVNFRCAgICAgICAgTVBQKDE3LCAweDEsIDAsIDAsIDEpCisKKworI2RlZmluZSBNUFAxOF9HUElPICAgICAgICBNUFAoMTgsIDB4MCwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQMThfVUEwX0NUU24gICAgICAgIE1QUCgxOCwgMHg0LCAxLCAwLCAxKQorI2RlZmluZSBNUFAxOF9CT09UX0ZMQVNIX1JFbiAgICBNUFAoMTgsIDB4NSwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMThfVU5VU0VEICAgICAgICBNUFAoMTgsIDB4MSwgMCwgMCwgMSkKKworCisKKyNkZWZpbmUgTVBQMTlfR1BJTyAgICAgICAgTVBQKDE5LCAweDAsIDEsIDEsIDEpCisjZGVmaW5lIE1QUDE5X1VBMF9DVFNuICAgICAgICBNUFAoMTksIDB4NCwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMTlfQk9PVF9GTEFTSF9XRW4gICAgTVBQKDE5LCAweDUsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDE5X1VOVVNFRCAgICAgICAgTVBQKDE5LCAweDEsIDAsIDAsIDEpCisKKworI2RlZmluZSBNUFAyMF9HUElPICAgICAgICBNUFAoMjAsIDB4MCwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQMjBfVUExX0NUU3MgICAgICAgIE1QUCgyMCwgMHg0LCAxLCAwLCAxKQorI2RlZmluZSBNUFAyMF9URE1fUENMSyAgICAgICAgTVBQKDIwLCAweDYsIDEsIDEsIDApCisjZGVmaW5lIE1QUDIwX1VOVVNFRCAgICAgICAgTVBQKDIwLCAweDEsIDAsIDAsIDEpCisKKworCisjZGVmaW5lIE1QUDIxX0dQSU8gICAgICAgIE1QUCgyMSwgMHgwLCAxLCAxLCAxKQorI2RlZmluZSBNUFAyMV9VQTFfQ1RTcyAgICAgICAgTVBQKDIxLCAweDQsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDIxX1RETV9GU1lOQyAgICAgICAgTVBQKDIxLCAweDYsIDEsIDEsIDApCisjZGVmaW5lIE1QUDIxX1VOVVNFRCAgICAgICAgTVBQKDIxLCAweDEsIDAsIDAsIDEpCisKKworCisjZGVmaW5lIE1QUDIyX0dQSU8gICAgICAgIE1QUCgyMiwgMHgwLCAxLCAxLCAxKQorI2RlZmluZSBNUFAyMl9VQTNfVERYICAgICAgICBNUFAoMjIsIDB4NCwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMjJfTkFORF9GTEFTSF9SRW4yICAgIE1QUCgyMiwgMHg1LCAwLCAxLCAxKQorI2RlZmluZSBNUFAyMl9URE1fRFJYICAgICAgICBNUFAoMjIsIDB4NiwgMSwgMCwgMSkKKyNkZWZpbmUgTVBQMjJfVU5VU0VEICAgICAgICBNUFAoMjIsIDB4MSwgMCwgMCwgMSkKKworCisKKyNkZWZpbmUgTVBQMjNfR1BJTyAgICAgICAgTVBQKDIzLCAweDAsIDEsIDEsIDEpCisjZGVmaW5lIE1QUDIzX1VBM19SRFggICAgICAgIE1QUCgyMywgMHg0LCAxLCAwLCAxKQorI2RlZmluZSBNUFAyM19OQU5EX0ZMQVNIX1dFbjIgICAgTVBQKDIzLCAweDUsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDIzX1RETV9EVFggICAgICAgIE1QUCgyMywgMHg2LCAwLCAxLCAxKQorI2RlZmluZSBNUFAyM19VTlVTRUQgICAgICAgIE1QUCgyMywgMHgxLCAwLCAwLCAxKQorCisKKyNkZWZpbmUgTVBQMjRfR1BJTyAgICAgICAgTVBQKDI0LCAweDAsIDEsIDEsIDEpCisjZGVmaW5lIE1QUDI0X1VBMl9UWEQgICAgICAgIE1QUCgyNCwgMHg0LCAwLCAxLCAxKQorI2RlZmluZSBNUFAyNF9URE1fSU5UbiAgICAgICAgTVBQKDI0LCAweDYsIDEsIDAsIDEpCisjZGVmaW5lIE1QUDI0X1VOVVNFRCAgICAgICAgTVBQKDI0LCAweDEsIDAsIDAsIDEpCisKKworI2RlZmluZSBNUFAyNV9HUElPICAgICAgICBNUFAoMjUsIDB4MCwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQMjVfVUEyX1JYRCAgICAgICAgTVBQKDI1LCAweDQsIDEsIDAsIDEpCisjZGVmaW5lIE1QUDI1X1RETV9SU1RuICAgICAgICBNUFAoMjUsIDB4NiwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMjVfVU5VU0VEICAgICAgICBNUFAoMjUsIDB4MSwgMCwgMCwgMSkKKworCisjZGVmaW5lIE1QUDI2X0dQSU8gICAgICAgIE1QUCgyNiwgMHgwLCAxLCAxLCAxKQorI2RlZmluZSBNUFAyNl9VQTJfQ1RTbiAgICAgICAgTVBQKDI2LCAweDQsIDEsIDAsIDEpCisjZGVmaW5lIE1QUDI2X1RETV9QQ0xLICAgICAgICBNUFAoMjYsIDB4NiwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQMjZfVU5VU0VEICAgICAgICBNUFAoMjYsIDB4MSwgMCwgMCwgMSkKKworCisjZGVmaW5lIE1QUDI3X0dQSU8gICAgICAgIE1QUCgyNywgMHgwLCAxLCAxLCAxKQorI2RlZmluZSBNUFAyN19VQTJfUlRTbiAgICAgICAgTVBQKDI3LCAweDQsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDI3X1RETV9GU1lOQyAgICAgICAgTVBQKDI3LCAweDYsIDEsIDEsIDEpCisjZGVmaW5lIE1QUDI3X1VOVVNFRCAgICAgICAgTVBQKDI3LCAweDEsIDAsIDAsIDEpCisKKworI2RlZmluZSBNUFAyOF9HUElPICAgICAgICBNUFAoMjgsIDB4MCwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQMjhfVUEzX1RYRCAgICAgICAgTVBQKDI4LCAweDQsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDI4X1RETV9EUlggICAgICAgIE1QUCgyOCwgMHg2LCAxLCAwLCAxKQorI2RlZmluZSBNUFAyOF9VTlVTRUQgICAgICAgIE1QUCgyOCwgMHgxLCAwLCAwLCAxKQorCisjZGVmaW5lIE1QUDI5X0dQSU8gICAgICAgIE1QUCgyOSwgMHgwLCAxLCAxLCAxKQorI2RlZmluZSBNUFAyOV9VQTNfUlhEICAgICAgICBNUFAoMjksIDB4NCwgMSwgMCwgMSkKKyNkZWZpbmUgTVBQMjlfU1lTUlNUX09VVG4gICAgTVBQKDI5LCAweDUsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDI5X1RETV9EVFggICAgICAgIE1QUCgyOSwgMHg2LCAwLCAxLCAxKQorI2RlZmluZSBNUFAyOV9VTlVTRUQgICAgICAgIE1QUCgyOSwgMHgxLCAwLCAwLCAxKQorCisjZGVmaW5lIE1QUDMwX0dQSU8gICAgICAgIE1QUCgzMCwgMHgwLCAxLCAxLCAxKQorI2RlZmluZSBNUFAzMF9VQTNfQ1RTbiAgICAgICAgTVBQKDMwLCAweDQsIDEsIDAsIDEpCisjZGVmaW5lIE1QUDMwX1VOVVNFRCAgICAgICAgTVBQKDMwLCAweDEsIDAsIDAsIDEpCisKKyNkZWZpbmUgTVBQMzFfR1BJTyAgICAgICAgTVBQKDMxLCAweDAsIDEsIDEsIDEpCisjZGVmaW5lIE1QUDMxX1VBM19SVFNuICAgICAgICBNUFAoMzEsIDB4NCwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMzFfVERNMV9TQ1NuICAgICAgICBNUFAoMzEsIDB4NiwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMzFfVU5VU0VEICAgICAgICBNUFAoMzEsIDB4MSwgMCwgMCwgMSkKKworCisjZGVmaW5lIE1QUDMyX0dQSU8gICAgICAgIE1QUCgzMiwgMHgxLCAxLCAxLCAxKQorI2RlZmluZSBNUFAzMl9VQTNfVERYICAgICAgICBNUFAoMzIsIDB4NCwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMzJfU1lTUlNUX09VVG4gICAgTVBQKDMyLCAweDUsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDMyX1RETTBfUlhRICAgICAgICBNUFAoMzIsIDB4NiwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMzJfVU5VU0VEICAgICAgICBNUFAoMzIsIDB4MywgMCwgMCwgMSkKKworCisjZGVmaW5lIE1QUDMzX0dQSU8gICAgICAgIE1QUCgzMywgMHgxLCAxLCAxLCAxKQorI2RlZmluZSBNUFAzM19VQTNfUkRYICAgICAgICBNUFAoMzMsIDB4NCwgMSwgMCwgMSkKKyNkZWZpbmUgTVBQMzNfVERNMF9UWFEgICAgICAgIE1QUCgzMywgMHg2LCAwLCAxLCAxKQorI2RlZmluZSBNUFAzM19VTlVTRUQgICAgICAgIE1QUCgzMywgMHgzLCAwLCAwLCAxKQorCisKKworI2RlZmluZSBNUFAzNF9HUElPICAgICAgICBNUFAoMzQsIDB4MSwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQMzRfVUEyX1REWCAgICAgICAgTVBQKDM0LCAweDQsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDM0X1RETTFfUlhRICAgICAgICBNUFAoMzQsIDB4NiwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMzRfVU5VU0VEICAgICAgICBNUFAoMzQsIDB4MywgMCwgMCwgMSkKKworCisKKyNkZWZpbmUgTVBQMzVfR1BJTyAgICAgICAgTVBQKDM1LCAweDEsIDEsIDEsIDEpCisjZGVmaW5lIE1QUDM1X1VBMl9SRFggICAgICAgIE1QUCgzNSwgMHg0LCAxLCAwLCAxKQorI2RlZmluZSBNUFAzNV9URE0xX1RYUSAgICAgICAgTVBQKDM1LCAweDYsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDM1X1VOVVNFRCAgICAgICAgTVBQKDM1LCAweDMsIDAsIDAsIDEpCisKKyNkZWZpbmUgTVBQMzZfR1BJTyAgICAgICAgTVBQKDM2LCAweDEsIDEsIDEsIDEpCisjZGVmaW5lIE1QUDM2X1VBMF9DVFNuICAgICAgICBNUFAoMzYsIDB4MiwgMSwgMCwgMSkKKyNkZWZpbmUgTVBQMzZfVUEyX1REWCAgICAgICAgTVBQKDM2LCAweDQsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDM2X1RETTBfU0NTbiAgICAgICAgTVBQKDM2LCAweDYsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDM2X1VOVVNFRCAgICAgICAgTVBQKDM2LCAweDMsIDAsIDAsIDEpCisKKworI2RlZmluZSBNUFAzN19HUElPICAgICAgICBNUFAoMzcsIDB4MSwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQMzdfVUEwX1JUU24gICAgICAgIE1QUCgzNywgMHgyLCAwLCAxLCAxKQorI2RlZmluZSBNUFAzN19VQTJfUlhEICAgICAgICBNUFAoMzcsIDB4NCwgMSwgMCwgMSkKKyNkZWZpbmUgTVBQMzdfU1lTUlNUX09VVG4gICAgTVBQKDM3LCAweDUsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDM3X1RETV9TQ0xLICAgICAgICBNUFAoMzcsIDB4NiwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMzdfVU5VU0VEICAgICAgICBNUFAoMzcsIDB4MywgMCwgMCwgMSkKKworCisKKworI2RlZmluZSBNUFAzOF9HUElPICAgICAgICBNUFAoMzgsIDB4MSwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQMzhfVUExX0NUU24gICAgICAgIE1QUCgzOCwgMHgyLCAxLCAwLCAxKQorI2RlZmluZSBNUFAzOF9VQTNfVFhEICAgICAgICBNUFAoMzgsIDB4NCwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMzhfU1lTUlNUX09VVG4gICAgTVBQKDM4LCAweDUsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDM4X1RETV9TTU9TSSAgICAgICAgTVBQKDM4LCAweDYsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDM4X1VOVVNFRCAgICAgICAgTVBQKDM4LCAweDMsIDAsIDAsIDEpCisKKworCisKKyNkZWZpbmUgTVBQMzlfR1BJTyAgICAgICAgTVBQKDM5LCAweDEsIDEsIDEsIDEpCisjZGVmaW5lIE1QUDM5X1VBMV9SVFNuICAgICAgICBNUFAoMzksIDB4MiwgMCwgMSwgMSkKKyNkZWZpbmUgTVBQMzlfVUEzX1JYRCAgICAgICAgTVBQKDM5LCAweDQsIDEsIDAsIDEpCisjZGVmaW5lIE1QUDM5X1NZU1JTVF9PVVRuICAgIE1QUCgzOSwgMHg1LCAwLCAxLCAxKQorI2RlZmluZSBNUFAzOV9URE1fU01JU08gICAgICAgIE1QUCgzOSwgMHg2LCAxLCAwLCAxKQorI2RlZmluZSBNUFAzOV9VTlVTRUQgICAgICAgIE1QUCgzOSwgMHgzLCAwLCAwLCAxKQorCisKKworI2RlZmluZSBNUFA0MF9HUElPICAgICAgICBNUFAoNDAsIDB4MSwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQNDBfVERNX0lOVG4gICAgICAgIE1QUCg0MCwgMHg2LCAxLCAwLCAxKQorI2RlZmluZSBNUFA0MF9VTlVTRUQgICAgICAgIE1QUCg0MCwgMHgwLCAwLCAwLCAxKQorCisKKworI2RlZmluZSBNUFA0MV9HUElPICAgICAgICBNUFAoNDEsIDB4MSwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQNDFfVERNX1JTVG4gICAgICAgIE1QUCg0MSwgMHg2LCAwLCAxLCAxKQorI2RlZmluZSBNUFA0MV9VTlVTRUQgICAgICAgIE1QUCg0MSwgMHgwLCAwLCAwLCAxKQorCisKKworI2RlZmluZSBNUFA0Ml9HUElPICAgICAgICBNUFAoNDIsIDB4MSwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQNDJfVERNX1BDTEsgICAgICAgIE1QUCg0MiwgMHg2LCAxLCAxLCAxKQorI2RlZmluZSBNUFA0Ml9VTlVTRUQgICAgICAgIE1QUCg0MiwgMHgwLCAwLCAwLCAxKQorCisKKworI2RlZmluZSBNUFA0M19HUElPICAgICAgICBNUFAoNDMsIDB4MSwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQNDNfVERNX0ZTWU5DICAgICAgICBNUFAoNDMsIDB4NiwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQNDNfVU5VU0VEICAgICAgICBNUFAoNDMsIDB4MCwgMCwgMCwgMSkKKworCisKKyNkZWZpbmUgTVBQNDRfR1BJTyAgICAgICAgTVBQKDQ0LCAweDEsIDEsIDEsIDEpCisjZGVmaW5lIE1QUDQ0X1RETV9EUlggICAgICAgIE1QUCg0NCwgMHg2LCAxLCAwLCAxKQorI2RlZmluZSBNUFA0NF9VTlVTRUQgICAgICAgIE1QUCg0NCwgMHgwLCAwLCAwLCAxKQorCisKKworI2RlZmluZSBNUFA0NV9HUElPICAgICAgICBNUFAoNDUsIDB4MSwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQNDVfU0FUQTBfQUNUbiAgICBNUFAoNDUsIDB4MywgMCwgMSwgMSkKKyNkZWZpbmUgTVBQNDVfVERNX0RSWCAgICAgICAgTVBQKDQ1LCAweDYsIDAsIDEsIDEpCisjZGVmaW5lIE1QUDQ1X1VOVVNFRCAgICAgICAgTVBQKDQ1LCAweDAsIDAsIDAsIDEpCisKKworI2RlZmluZSBNUFA0Nl9HUElPICAgICAgICBNUFAoNDYsIDB4MSwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQNDZfVERNX1NDU24gICAgICAgIE1QUCg0NiwgMHg2LCAwLCAxLCAxKQorI2RlZmluZSBNUFA0Nl9VTlVTRUQgICAgICAgIE1QUCg0NiwgMHgwLCAwLCAwLCAxKQorCisKKyNkZWZpbmUgTVBQNDdfR1BJTyAgICAgICAgTVBQKDQ3LCAweDEsIDEsIDEsIDEpCisjZGVmaW5lIE1QUDQ3X1VOVVNFRCAgICAgICAgTVBQKDQ3LCAweDAsIDAsIDAsIDEpCisKKworCisjZGVmaW5lIE1QUDQ4X0dQSU8gICAgICAgIE1QUCg0OCwgMHgxLCAxLCAxLCAxKQorI2RlZmluZSBNUFA0OF9TQVRBMV9BQ1RuICAgIE1QUCg0OCwgMHgzLCAwLCAxLCAxKQorI2RlZmluZSBNUFA0OF9VTlVTRUQgICAgICAgIE1QUCg0OCwgMHgyLCAwLCAwLCAxKQorCisKKworI2RlZmluZSBNUFA0OV9HUElPICAgICAgICBNUFAoNDksIDB4MSwgMSwgMSwgMSkKKyNkZWZpbmUgTVBQNDlfU0FUQTBfQUNUbiAgICBNUFAoNDksIDB4MywgMCwgMSwgMSkKKyNkZWZpbmUgTVBQNDlfTV9CQiAgICAgICAgTVBQKDQ5LCAweDQsIDEsIDAsIDEpCisjZGVmaW5lIE1QUDQ5X1VOVVNFRCAgICAgICAgTVBQKDQ5LCAweDIsIDAsIDAsIDEpCisKKworI2RlZmluZSBNUFBfTUFYICAgICAgICAgICAgNDkKKwordm9pZCBtdjc4eHgwX21wcF9jb25mKHVuc2lnbmVkIGludCAqbXBwX2xpc3QpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgxL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1teDEvTWFrZWZpbGUKaW5kZXggN2Y4NmZlMC4uZmMyZGRmOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1teDEvTWFrZWZpbGUKQEAgLTQsMTEgKzQsMTIgQEAKIAogIyBPYmplY3QgZmlsZSBsaXN0cy4KIAorRVhUUkFfQ0ZMQUdTICs9IC1ESU1YX05FRURTX0RFUFJFQ0FURURfU1lNQk9MUwogb2JqLXkJCQkrPSBnZW5lcmljLm8gY2xvY2subyBkZXZpY2VzLm8KIAogIyBTdXBwb3J0IGZvciBDTU9TIHNlbnNvciBpbnRlcmZhY2UKIG9iai0kKENPTkZJR19NWDFfVklERU8pCSs9IGtzeW1fbXgxLm8gbXgxX2NhbWVyYV9maXEubwogCiAjIFNwZWNpZmljIGJvYXJkIHN1cHBvcnQKLW9iai0kKENPTkZJR19BUkNIX01YMUFEUykgKz0gbXgxYWRzLm8KLW9iai0kKENPTkZJR19NQUNIX1NDQjkzMjgpICs9IHNjYjkzMjgubwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK29iai0kKENPTkZJR19BUkNIX01YMUFEUykgKz0gbWFjaC1teDFhZHMubworb2JqLSQoQ09ORklHX01BQ0hfU0NCOTMyOCkgKz0gbWFjaC1zY2I5MzI4Lm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgxL21hY2gtbXgxYWRzLmMgYi9hcmNoL2FybS9tYWNoLW14MS9tYWNoLW14MWFkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxZjNjZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14MS9tYWNoLW14MWFkcy5jCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1pbXgvbWFjaC1teDFhZHMuYworICoKKyAqIEluaXRpYWxseSBiYXNlZCBvbjoKKyAqCWxpbnV4LTIuNi43LWlteC9hcmNoL2FybS9tYWNoLWlteC9zY2I5MzI4LmMKKyAqCUNvcHlyaWdodCAoYykgMjAwNCBTYXNjaGEgSGF1ZXIgPHNhc2NoYUBzYXNjaGFoYXVlci5kZT4KKyAqCisgKiAyMDA0IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3BjZjg1N3guaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKworI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaTJjLmg+CisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgxLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyBpbnQgbXgxYWRzX3BpbnNbXSA9IHsKKwkvKiBVQVJUMSAqLworCVBDOV9QRl9VQVJUMV9DVFMsCisJUEMxMF9QRl9VQVJUMV9SVFMsCisJUEMxMV9QRl9VQVJUMV9UWEQsCisJUEMxMl9QRl9VQVJUMV9SWEQsCisJLyogVUFSVDIgKi8KKwlQQjI4X1BGX1VBUlQyX0NUUywKKwlQQjI5X1BGX1VBUlQyX1JUUywKKwlQQjMwX1BGX1VBUlQyX1RYRCwKKwlQQjMxX1BGX1VBUlQyX1JYRCwKKwkvKiBJMkMgKi8KKwlQQTE1X1BGX0kyQ19TREEsCisJUEExNl9QRl9JMkNfU0NMLAorCS8qIFNQSSAqLworCVBDMTNfUEZfU1BJMV9TUElfUkRZLAorCVBDMTRfUEZfU1BJMV9TQ0xLLAorCVBDMTVfUEZfU1BJMV9TUywKKwlQQzE2X1BGX1NQSTFfTUlTTywKKwlQQzE3X1BGX1NQSTFfTU9TSSwKK307CisKKy8qCisgKiBVQVJUcyBwbGF0Zm9ybSBkYXRhCisgKi8KKworc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YVtdID0geworCXsKKwkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKKwl9LCB7CisJCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCisJfSwKK307CisKKy8qCisgKiBQaHlzbWFwIGZsYXNoCisgKi8KKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbXgxYWRzX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDQsCQkvKiBiYW5rd2lkdGggaW4gYnl0ZXMgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CT0gSU1YX0NTMF9QSFlTLAorCS5lbmQJPSBJTVhfQ1MwX1BIWVMgKyBTWl8zMk0gLSAxLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZmxhc2hfZGV2aWNlID0geworCS5uYW1lCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAk9IDAsCisJLnJlc291cmNlID0gJmZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzID0gMSwKK307CisKKy8qCisgKiBJMkMKKyAqLworc3RhdGljIHN0cnVjdCBwY2Y4NTd4X3BsYXRmb3JtX2RhdGEgcGNmODU3eF9kYXRhW10gPSB7CisJeworCQkuZ3Bpb19iYXNlID0gNCAqIDMyLAorCX0sIHsKKwkJLmdwaW9fYmFzZSA9IDQgKiAzMiArIDE2LAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgbXgxYWRzX2kyY19kYXRhID0geworCS5iaXRyYXRlID0gMTAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBteDFhZHNfaTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTc1IiwgMHgyMiksCisJCS5wbGF0Zm9ybV9kYXRhID0gJnBjZjg1N3hfZGF0YVswXSwKKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTc1IiwgMHgyNCksCisJCS5wbGF0Zm9ybV9kYXRhID0gJnBjZjg1N3hfZGF0YVsxXSwKKwl9LAorfTsKKworLyoKKyAqIEJvYXJkIGluaXQKKyAqLworc3RhdGljIHZvaWQgX19pbml0IG14MWFkc19pbml0KHZvaWQpCit7CisJbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteDFhZHNfcGlucywKKwkJQVJSQVlfU0laRShteDFhZHNfcGlucyksICJteDFhZHMiKTsKKworCS8qIFVBUlQgKi8KKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZpbXhfdWFydDFfZGV2aWNlLCAmdWFydF9wZGF0YVswXSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14X3VhcnQyX2RldmljZSwgJnVhcnRfcGRhdGFbMV0pOworCisJLyogUGh5c21hcCBmbGFzaCAqLworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJmZsYXNoX2RldmljZSwgJm14MWFkc19mbGFzaF9kYXRhKTsKKworCS8qIEkyQyAqLworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG14MWFkc19pMmNfZGV2aWNlcywKKwkJCQlBUlJBWV9TSVpFKG14MWFkc19pMmNfZGV2aWNlcykpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14X2kyY19kZXZpY2UsICZteDFhZHNfaTJjX2RhdGEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXgxYWRzX3RpbWVyX2luaXQodm9pZCkKK3sKKwlteDFfY2xvY2tzX2luaXQoMzIwMDApOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIG14MWFkc190aW1lciA9IHsKKwkuaW5pdAk9IG14MWFkc190aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChNWDFBRFMsICJGcmVlc2NhbGUgTVgxQURTIikKKwkvKiBNYWludGFpbmVyOiBTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4ICovCisJLnBoeXNfaW8JPSBJTVhfSU9fUEhZUywKKwkuaW9fcGdfb2Zmc3QJPSAoSU1YX0lPX0JBU0UgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IE1YMV9QSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8JCT0gbXgxX21hcF9pbywKKwkuaW5pdF9pcnEJPSBteDFfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZteDFhZHNfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IG14MWFkc19pbml0LAorTUFDSElORV9FTkQKKworTUFDSElORV9TVEFSVChNWExBRFMsICJGcmVlc2NhbGUgTVhMQURTIikKKwkucGh5c19pbwk9IElNWF9JT19QSFlTLAorCS5pb19wZ19vZmZzdAk9IChJTVhfSU9fQkFTRSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gTVgxX1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbwkJPSBteDFfbWFwX2lvLAorCS5pbml0X2lycQk9IG14MV9pbml0X2lycSwKKwkudGltZXIJCT0gJm14MWFkc190aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gbXgxYWRzX2luaXQsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvbWFjaC1zY2I5MzI4LmMgYi9hcmNoL2FybS9tYWNoLW14MS9tYWNoLXNjYjkzMjguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTg3YTdhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDEvbWFjaC1zY2I5MzI4LmMKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW14MS9tYWNoLXNjYjkzMjguYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBTYXNjaGEgSGF1ZXIgPHNhc2NoYWhhdWVyQHdlYi5kZT4KKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA4IEp1ZXJnZW4gQmVpc2VydCA8amJlaXNlcnRAbmV0c2NhcGUubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtOTAwMC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgxLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qCisgKiBUaGlzIHNjYjkzMjggaGFzIGEgMzJNaUIgZmxhc2gKKyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBmbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSBJTVhfQ1MwX1BIWVMsCisJLmVuZAk9IElNWF9DUzBfUEhZUyArICgzMiAqIDEwMjQgKiAxMDI0KSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBzY2JfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGggID0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjYl9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnNjYl9mbGFzaF9kYXRhLAorCX0sCisJLnJlc291cmNlID0gJmZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzID0gMSwKK307CisKKy8qCisgKiBzY2I5MzI4IGhhcyBhIERNOTAwMCBuZXR3b3JrIGNvbnRyb2xsZXIKKyAqIGNvbm5lY3RlZCB0byBDUzUsIHdpdGggMTYgYml0IGRhdGEgcGF0aAorICogYW5kIGludGVycnVwdCBjb25uZWN0ZWQgdG8gR1BJTyAzCisgKi8KKworLyoKKyAqIGludGVybmFsIGRhdGFwYXRoIGlzIGZpeGVkIDE2IGJpdAorICovCitzdGF0aWMgc3RydWN0IGRtOTAwMF9wbGF0X2RhdGEgZG05MDAwX3BsYXRkYXRhID0geworCS5mbGFncwk9IERNOTAwMF9QTEFURl8xNkJJVE9OTFksCit9OworCisvKgorICogdGhlIERNOTAwMCBkcml2ZXJzIHdhbnRzIHR3byBkZWZpbmVkIGFkZHJlc3Mgc3BhY2VzCisgKiB0byBnYWluIGFjY2VzcyB0byBhZGRyZXNzIGxhdGNoIHJlZ2lzdGVycyBhbmQgdGhlIGRhdGEgcGF0aC4KKyAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbTkwMDB4X3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJPSAiYWRkcmVzcyBhcmVhIiwKKwkJLnN0YXJ0CT0gSU1YX0NTNV9QSFlTLAorCQkuZW5kCT0gSU1YX0NTNV9QSFlTICsgMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCS8qIGFkZHJlc3MgYWNjZXNzICovCisJfSwgeworCQkubmFtZQk9ICJkYXRhIGFyZWEiLAorCQkuc3RhcnQJPSBJTVhfQ1M1X1BIWVMgKyA0LAorCQkuZW5kCT0gSU1YX0NTNV9QSFlTICsgNSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCS8qIGRhdGEgYWNjZXNzICovCisJfSwgeworCQkuc3RhcnQJPSBJUlFfR1BJT0MoMyksCisJCS5lbmQJPSBJUlFfR1BJT0MoMyksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfTE9XTEVWRUwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtOTAwMHhfZGV2aWNlID0geworCS5uYW1lCQk9ICJkbTkwMDAiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShkbTkwMDB4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gZG05MDAweF9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmRtOTAwMF9wbGF0ZGF0YSwKKwl9Cit9OworCitzdGF0aWMgaW50IG14Y191YXJ0MV9waW5zW10gPSB7CisJUEM5X1BGX1VBUlQxX0NUUywKKwlQQzEwX1BGX1VBUlQxX1JUUywKKwlQQzExX1BGX1VBUlQxX1RYRCwKKwlQQzEyX1BGX1VBUlQxX1JYRCwKK307CisKK3N0YXRpYyBpbnQgdWFydDFfbXhjX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlyZXR1cm4gbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteGNfdWFydDFfcGlucywKKwkJCUFSUkFZX1NJWkUobXhjX3VhcnQxX3BpbnMpLCAiVUFSVDEiKTsKK30KKworc3RhdGljIGludCB1YXJ0MV9teGNfZXhpdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCW14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhteGNfdWFydDFfcGlucywKKwkJCUFSUkFZX1NJWkUobXhjX3VhcnQxX3BpbnMpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKKwkuaW5pdCA9IHVhcnQxX214Y19pbml0LAorCS5leGl0ID0gdWFydDFfbXhjX2V4aXQsCisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NiX2ZsYXNoX2RldmljZSwKKwkmZG05MDAweF9kZXZpY2UsCit9OworCisvKgorICogc2NiOTMyOF9pbml0IC0gSW5pdCB0aGUgQ1BVIGNhcmQgaXRzZWxmCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBzY2I5MzI4X2luaXQodm9pZCkKK3sKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZpbXhfdWFydDFfZGV2aWNlLCAmdWFydF9wZGF0YSk7CisKKwlwcmludGsoS0VSTl9JTkZPIlNjYjkzMjg6IEFkZGluZyBkZXZpY2VzXG4iKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHNjYjkzMjhfdGltZXJfaW5pdCh2b2lkKQoreworCW14MV9jbG9ja3NfaW5pdCgzMjAwMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIHNjYjkzMjhfdGltZXIgPSB7CisJLmluaXQJPSBzY2I5MzI4X3RpbWVyX2luaXQsCit9OworCitNQUNISU5FX1NUQVJUKFNDQjkzMjgsICJTeW5lcnRyb25peHggc2NiOTMyOCIpCisgICAgLyogU2FzY2hhIEhhdWVyICovCisJLnBoeXNfaW8JPSAweDAwMjAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhlMDIwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MDgwMDAxMDAsCisJLm1hcF9pbwkJPSBteDFfbWFwX2lvLAorCS5pbml0X2lycQk9IG14MV9pbml0X2lycSwKKwkudGltZXIJCT0gJnNjYjkzMjhfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IHNjYjkzMjhfaW5pdCwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MS9teDFhZHMuYyBiL2FyY2gvYXJtL21hY2gtbXgxL214MWFkcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMGYwNGU1Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgxL214MWFkcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY1ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWlteC9teDFhZHMuYwotICoKLSAqIEluaXRpYWxseSBiYXNlZCBvbjoKLSAqCWxpbnV4LTIuNi43LWlteC9hcmNoL2FybS9tYWNoLWlteC9zY2I5MzI4LmMKLSAqCUNvcHlyaWdodCAoYykgMjAwNCBTYXNjaGEgSGF1ZXIgPHNhc2NoYUBzYXNjaGFoYXVlci5kZT4KLSAqCi0gKiAyMDA0IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKLSAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjL3BjZjg1N3guaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLQotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvaTJjLmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLQotI2luY2x1ZGUgImRldmljZXMuaCIKLQotc3RhdGljIGludCBteDFhZHNfcGluc1tdID0gewotCS8qIFVBUlQxICovCi0JUEM5X1BGX1VBUlQxX0NUUywKLQlQQzEwX1BGX1VBUlQxX1JUUywKLQlQQzExX1BGX1VBUlQxX1RYRCwKLQlQQzEyX1BGX1VBUlQxX1JYRCwKLQkvKiBVQVJUMiAqLwotCVBCMjhfUEZfVUFSVDJfQ1RTLAotCVBCMjlfUEZfVUFSVDJfUlRTLAotCVBCMzBfUEZfVUFSVDJfVFhELAotCVBCMzFfUEZfVUFSVDJfUlhELAotCS8qIEkyQyAqLwotCVBBMTVfUEZfSTJDX1NEQSwKLQlQQTE2X1BGX0kyQ19TQ0wsCi0JLyogU1BJICovCi0JUEMxM19QRl9TUEkxX1NQSV9SRFksCi0JUEMxNF9QRl9TUEkxX1NDTEssCi0JUEMxNV9QRl9TUEkxX1NTLAotCVBDMTZfUEZfU1BJMV9NSVNPLAotCVBDMTdfUEZfU1BJMV9NT1NJLAotfTsKLQotLyoKLSAqIFVBUlRzIHBsYXRmb3JtIGRhdGEKLSAqLwotCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhW10gPSB7Ci0JewotCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotCX0sIHsKLQkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKLQl9LAotfTsKLQotLyoKLSAqIFBoeXNtYXAgZmxhc2gKLSAqLwotCi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBteDFhZHNfZmxhc2hfZGF0YSA9IHsKLQkud2lkdGgJCT0gNCwJCS8qIGJhbmt3aWR0aCBpbiBieXRlcyAqLwotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBmbGFzaF9yZXNvdXJjZSA9IHsKLQkuc3RhcnQJPSBJTVhfQ1MwX1BIWVMsCi0JLmVuZAk9IElNWF9DUzBfUEhZUyArIFNaXzMyTSAtIDEsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBmbGFzaF9kZXZpY2UgPSB7Ci0JLm5hbWUJPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkCT0gMCwKLQkucmVzb3VyY2UgPSAmZmxhc2hfcmVzb3VyY2UsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotfTsKLQotLyoKLSAqIEkyQwotICovCi1zdGF0aWMgc3RydWN0IHBjZjg1N3hfcGxhdGZvcm1fZGF0YSBwY2Y4NTd4X2RhdGFbXSA9IHsKLQl7Ci0JCS5ncGlvX2Jhc2UgPSA0ICogMzIsCi0JfSwgewotCQkuZ3Bpb19iYXNlID0gNCAqIDMyICsgMTYsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBteDFhZHNfaTJjX2RhdGEgPSB7Ci0JLmJpdHJhdGUgPSAxMDAwMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIG14MWFkc19pMmNfZGV2aWNlc1tdID0gewotCXsKLQkJSTJDX0JPQVJEX0lORk8oInBjZjg1NzUiLCAweDIyKSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmcGNmODU3eF9kYXRhWzBdLAotCX0sIHsKLQkJSTJDX0JPQVJEX0lORk8oInBjZjg1NzUiLCAweDI0KSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmcGNmODU3eF9kYXRhWzFdLAotCX0sCi19OwotCi0vKgotICogQm9hcmQgaW5pdAotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgbXgxYWRzX2luaXQodm9pZCkKLXsKLQlteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKG14MWFkc19waW5zLAotCQlBUlJBWV9TSVpFKG14MWFkc19waW5zKSwgIm14MWFkcyIpOwotCi0JLyogVUFSVCAqLwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJmlteF91YXJ0MV9kZXZpY2UsICZ1YXJ0X3BkYXRhWzBdKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZpbXhfdWFydDJfZGV2aWNlLCAmdWFydF9wZGF0YVsxXSk7Ci0KLQkvKiBQaHlzbWFwIGZsYXNoICovCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmZmxhc2hfZGV2aWNlLCAmbXgxYWRzX2ZsYXNoX2RhdGEpOwotCi0JLyogSTJDICovCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgbXgxYWRzX2kyY19kZXZpY2VzLAotCQkJCUFSUkFZX1NJWkUobXgxYWRzX2kyY19kZXZpY2VzKSk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZpbXhfaTJjX2RldmljZSwgJm14MWFkc19pMmNfZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBteDFhZHNfdGltZXJfaW5pdCh2b2lkKQotewotCW14MV9jbG9ja3NfaW5pdCgzMjAwMCk7Ci19Ci0KLXN0cnVjdCBzeXNfdGltZXIgbXgxYWRzX3RpbWVyID0gewotCS5pbml0CT0gbXgxYWRzX3RpbWVyX2luaXQsCi19OwotCi1NQUNISU5FX1NUQVJUKE1YMUFEUywgIkZyZWVzY2FsZSBNWDFBRFMiKQotCS8qIE1haW50YWluZXI6IFNhc2NoYSBIYXVlciwgUGVuZ3V0cm9uaXggKi8KLQkucGh5c19pbwk9IElNWF9JT19QSFlTLAotCS5pb19wZ19vZmZzdAk9IChJTVhfSU9fQkFTRSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zCT0gUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvCQk9IG14MV9tYXBfaW8sCi0JLmluaXRfaXJxCT0gbXgxX2luaXRfaXJxLAotCS50aW1lcgkJPSAmbXgxYWRzX3RpbWVyLAotCS5pbml0X21hY2hpbmUJPSBteDFhZHNfaW5pdCwKLU1BQ0hJTkVfRU5ECi0KLU1BQ0hJTkVfU1RBUlQoTVhMQURTLCAiRnJlZXNjYWxlIE1YTEFEUyIpCi0JLnBoeXNfaW8JPSBJTVhfSU9fUEhZUywKLQkuaW9fcGdfb2Zmc3QJPSAoSU1YX0lPX0JBU0UgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcwk9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbwkJPSBteDFfbWFwX2lvLAotCS5pbml0X2lycQk9IG14MV9pbml0X2lycSwKLQkudGltZXIJCT0gJm14MWFkc190aW1lciwKLQkuaW5pdF9tYWNoaW5lCT0gbXgxYWRzX2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDEvc2NiOTMyOC5jIGIvYXJjaC9hcm0vbWFjaC1teDEvc2NiOTMyOC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMjVkOThkLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgxL3NjYjkzMjguYworKysgL2Rldi9udWxsCkBAIC0xLDE1OCArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1teDEvc2NiOTMyOC5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA0IFNhc2NoYSBIYXVlciA8c2FzY2hhaGF1ZXJAd2ViLmRlPgotICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDggSnVlcmdlbiBCZWlzZXJ0IDxqYmVpc2VydEBuZXRzY2FwZS5uZXQ+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZG05MDAwLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC5oPgotCi0jaW5jbHVkZSAiZGV2aWNlcy5oIgotCi0vKgotICogVGhpcyBzY2I5MzI4IGhhcyBhIDMyTWlCIGZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0CT0gSU1YX0NTMF9QSFlTLAotCS5lbmQJPSBJTVhfQ1MwX1BIWVMgKyAoMzIgKiAxMDI0ICogMTAyNCkgLSAxLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgc2NiX2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoICA9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2JfZmxhc2hfZGV2aWNlID0gewotCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQJCT0gMCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzY2JfZmxhc2hfZGF0YSwKLQl9LAotCS5yZXNvdXJjZSA9ICZmbGFzaF9yZXNvdXJjZSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi19OwotCi0vKgotICogc2NiOTMyOCBoYXMgYSBETTkwMDAgbmV0d29yayBjb250cm9sbGVyCi0gKiBjb25uZWN0ZWQgdG8gQ1M1LCB3aXRoIDE2IGJpdCBkYXRhIHBhdGgKLSAqIGFuZCBpbnRlcnJ1cHQgY29ubmVjdGVkIHRvIEdQSU8gMwotICovCi0KLS8qCi0gKiBpbnRlcm5hbCBkYXRhcGF0aCBpcyBmaXhlZCAxNiBiaXQKLSAqLwotc3RhdGljIHN0cnVjdCBkbTkwMDBfcGxhdF9kYXRhIGRtOTAwMF9wbGF0ZGF0YSA9IHsKLQkuZmxhZ3MJPSBETTkwMDBfUExBVEZfMTZCSVRPTkxZLAotfTsKLQotLyoKLSAqIHRoZSBETTkwMDAgZHJpdmVycyB3YW50cyB0d28gZGVmaW5lZCBhZGRyZXNzIHNwYWNlcwotICogdG8gZ2FpbiBhY2Nlc3MgdG8gYWRkcmVzcyBsYXRjaCByZWdpc3RlcnMgYW5kIHRoZSBkYXRhIHBhdGguCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZG05MDAweF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5uYW1lCT0gImFkZHJlc3MgYXJlYSIsCi0JCS5zdGFydAk9IElNWF9DUzVfUEhZUywKLQkJLmVuZAk9IElNWF9DUzVfUEhZUyArIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAkvKiBhZGRyZXNzIGFjY2VzcyAqLwotCX0sIHsKLQkJLm5hbWUJPSAiZGF0YSBhcmVhIiwKLQkJLnN0YXJ0CT0gSU1YX0NTNV9QSFlTICsgNCwKLQkJLmVuZAk9IElNWF9DUzVfUEhZUyArIDUsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAkvKiBkYXRhIGFjY2VzcyAqLwotCX0sIHsKLQkJLnN0YXJ0CT0gSVJRX0dQSU9DKDMpLAotCQkuZW5kCT0gSVJRX0dQSU9DKDMpLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbTkwMDB4X2RldmljZSA9IHsKLQkubmFtZQkJPSAiZG05MDAwIiwKLQkuaWQJCT0gMCwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoZG05MDAweF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGRtOTAwMHhfcmVzb3VyY2VzLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZkbTkwMDBfcGxhdGRhdGEsCi0JfQotfTsKLQotc3RhdGljIGludCBteGNfdWFydDFfcGluc1tdID0gewotCVBDOV9QRl9VQVJUMV9DVFMsCi0JUEMxMF9QRl9VQVJUMV9SVFMsCi0JUEMxMV9QRl9VQVJUMV9UWEQsCi0JUEMxMl9QRl9VQVJUMV9SWEQsCi19OwotCi1zdGF0aWMgaW50IHVhcnQxX214Y19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JcmV0dXJuIG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXhjX3VhcnQxX3BpbnMsCi0JCQlBUlJBWV9TSVpFKG14Y191YXJ0MV9waW5zKSwgIlVBUlQxIik7Ci19Ci0KLXN0YXRpYyBpbnQgdWFydDFfbXhjX2V4aXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMobXhjX3VhcnQxX3BpbnMsCi0JCQlBUlJBWV9TSVpFKG14Y191YXJ0MV9waW5zKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgPSB7Ci0JLmluaXQgPSB1YXJ0MV9teGNfaW5pdCwKLQkuZXhpdCA9IHVhcnQxX214Y19leGl0LAotCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnNjYl9mbGFzaF9kZXZpY2UsCi0JJmRtOTAwMHhfZGV2aWNlLAotfTsKLQotLyoKLSAqIHNjYjkzMjhfaW5pdCAtIEluaXQgdGhlIENQVSBjYXJkIGl0c2VsZgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgc2NiOTMyOF9pbml0KHZvaWQpCi17Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14X3VhcnQxX2RldmljZSwgJnVhcnRfcGRhdGEpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyJTY2I5MzI4OiBBZGRpbmcgZGV2aWNlc1xuIik7Ci0JcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzY2I5MzI4X3RpbWVyX2luaXQodm9pZCkKLXsKLQlteDFfY2xvY2tzX2luaXQoMzIwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c190aW1lciBzY2I5MzI4X3RpbWVyID0gewotCS5pbml0CT0gc2NiOTMyOF90aW1lcl9pbml0LAotfTsKLQotTUFDSElORV9TVEFSVChTQ0I5MzI4LCAiU3luZXJ0cm9uaXh4IHNjYjkzMjgiKQotICAgIC8qIFNhc2NoYSBIYXVlciAqLwotCS5waHlzX2lvCT0gMHgwMDIwMDAwMCwKLQkuaW9fcGdfb2Zmc3QJPSAoKDB4ZTAyMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMJPSAweDA4MDAwMTAwLAotCS5tYXBfaW8JCT0gbXgxX21hcF9pbywKLQkuaW5pdF9pcnEJPSBteDFfaW5pdF9pcnEsCi0JLnRpbWVyCQk9ICZzY2I5MzI4X3RpbWVyLAotCS5pbml0X21hY2hpbmUJPSBzY2I5MzI4X2luaXQsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXgyL0tjb25maWcKaW5kZXggYjk2YzZhMy4uNzQyZmQ0ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9LY29uZmlnCkBAIC0zNyw2ICszNyw3IEBACiBjb25maWcgTUFDSF9QQ00wMzgKIAlib29sICJQaHl0ZWMgcGh5Q09SRS1pLk1YMjcgQ1BVIG1vZHVsZSAocGNtMDM4KSIKIAlkZXBlbmRzIG9uIE1BQ0hfTVgyNworCXNlbGVjdCBNWENfVUxQSSBpZiBVU0JfVUxQSQogCWhlbHAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgcGh5Q09SRS1pLk1YMjcgKGFrYSBwY20wMzgpIHBsYXRmb3JtLiBUaGlzCiAJICBpbmNsdWRlcyBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgdGhlIG1vZHVsZSBhbmQgaXRzIHBlcmlwaGVyYWxzLgpAQCAtNTUsNyArNTYsNyBAQAogCiBlbmRjaG9pY2UKIAotY29uZmlnIE1BQ0hfRVVLUkVBX0NQVUlNWDI3Citjb25maWcgTUFDSF9DUFVJTVgyNwogCWJvb2wgIkV1a3JlYSBDUFVJTVgyNyBtb2R1bGUiCiAJZGVwZW5kcyBvbiBNQUNIX01YMjcKIAloZWxwCkBAIC02NCwxNCArNjUsMTQgQEAKIAogY29uZmlnIE1BQ0hfRVVLUkVBX0NQVUlNWDI3X1VTRVNESEMyCiAJYm9vbCAiQ1BVSU1YMjcgaW50ZWdyYXRlcyBTREhDMiBtb2R1bGUiCi0JZGVwZW5kcyBvbiBNQUNIX0VVS1JFQV9DUFVJTVgyNworCWRlcGVuZHMgb24gTUFDSF9DUFVJTVgyNwogCWhlbHAKIAkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciB0aGUgaW50ZXJuYWwgU0RIQzIgdXNlZCBvbiBDUFVJTVgyNyB1c2VkCiAJICBmb3Igd2lmaSBvciBlTU1DLgogCiBjaG9pY2UKIAlwcm9tcHQgIkJhc2Vib2FyZCIKLQlkZXBlbmRzIG9uIE1BQ0hfRVVLUkVBX0NQVUlNWDI3CisJZGVwZW5kcyBvbiBNQUNIX0NQVUlNWDI3CiAJZGVmYXVsdCBNQUNIX0VVS1JFQV9NQklNWDI3X0JBU0VCT0FSRAogCiBjb25maWcgTUFDSF9FVUtSRUFfTUJJTVgyN19CQVNFQk9BUkQKQEAgLTkwLDcgKzkxLDcgQEAKIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTVgyN1BESyBwbGF0Zm9ybS4gVGhpcyBpbmNsdWRlcyBzcGVjaWZpYwogCSAgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzIHBlcmlwaGVyYWxzLgogCi1jb25maWcgTUFDSF9NWDI3TElURQorY29uZmlnIE1BQ0hfSU1YMjdMSVRFCiAJYm9vbCAiTG9naWNQRCBNWDI3IExJVEVLSVQgcGxhdGZvcm0iCiAJZGVwZW5kcyBvbiBNQUNIX01YMjcKIAloZWxwCkBAIC0xMDAsNiArMTAxLDcgQEAKIGNvbmZpZyBNQUNIX1BDQTEwMAogCWJvb2wgIlBoeXRlYyBwaHlDQVJELXMgKHBjYTEwMCkiCiAJZGVwZW5kcyBvbiBNQUNIX01YMjcKKwlzZWxlY3QgTVhDX1VMUEkgaWYgVVNCX1VMUEkKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIHBoeUNBUkQtcyAoYWthIHBjYTEwMCkgcGxhdGZvcm0uIFRoaXMKIAkgIGluY2x1ZGVzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgbW9kdWxlIGFuZCBpdHMgcGVyaXBoZXJhbHMuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbXgyL01ha2VmaWxlCmluZGV4IDUyYWNhMGFhLi5lMzI1NGZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW14Mi9NYWtlZmlsZQpAQCAtNCwyMSArNCwyMCBAQAogCiAjIE9iamVjdCBmaWxlIGxpc3RzLgogCi1vYmoteQk6PSAgZ2VuZXJpYy5vIGRldmljZXMubyBzZXJpYWwubworb2JqLXkJOj0gIGRldmljZXMubyBzZXJpYWwubwogCi1vYmotJChDT05GSUdfTUFDSF9NWDIxKSArPSBjbG9ja19pbXgyMS5vCitvYmotJChDT05GSUdfTUFDSF9NWDIxKSArPSBjbG9ja19pbXgyMS5vIG1tLWlteDIxLm8KIAogb2JqLSQoQ09ORklHX01BQ0hfTVgyNykgKz0gY3B1X2lteDI3Lm8KLW9iai0kKENPTkZJR19NQUNIX01YMjcpICs9IGNsb2NrX2lteDI3Lm8KK29iai0kKENPTkZJR19NQUNIX01YMjcpICs9IGNsb2NrX2lteDI3Lm8gbW0taW14MjcubwogCi1vYmotJChDT05GSUdfTUFDSF9NWDIxQURTKSArPSBteDIxYWRzLm8KLW9iai0kKENPTkZJR19NQUNIX01YMjdBRFMpICs9IG14MjdhZHMubwotb2JqLSQoQ09ORklHX01BQ0hfUENNMDM4KSArPSBwY20wMzgubworb2JqLSQoQ09ORklHX01BQ0hfTVgyMUFEUykgKz0gbWFjaC1teDIxYWRzLm8KK29iai0kKENPTkZJR19NQUNIX01YMjdBRFMpICs9IG1hY2gtbXgyN2Fkcy5vCitvYmotJChDT05GSUdfTUFDSF9QQ00wMzgpICs9IG1hY2gtcGNtMDM4Lm8KIG9iai0kKENPTkZJR19NQUNIX1BDTTk3MF9CQVNFQk9BUkQpICs9IHBjbTk3MC1iYXNlYm9hcmQubwotb2JqLSQoQ09ORklHX01BQ0hfTVgyN18zRFMpICs9IG14MjdwZGsubwotb2JqLSQoQ09ORklHX01BQ0hfTVgyN0xJVEUpICs9IG14MjdsaXRlLm8KLW9iai0kKENPTkZJR19NQUNIX0VVS1JFQV9DUFVJTVgyNykgKz0gZXVrcmVhX2NwdWlteDI3Lm8KK29iai0kKENPTkZJR19NQUNIX01YMjdfM0RTKSArPSBtYWNoLW14MjdfM2RzLm8KK29iai0kKENPTkZJR19NQUNIX0lNWDI3TElURSkgKz0gbWFjaC1pbXgyN2xpdGUubworb2JqLSQoQ09ORklHX01BQ0hfQ1BVSU1YMjcpICs9IG1hY2gtY3B1aW14Mjcubwogb2JqLSQoQ09ORklHX01BQ0hfRVVLUkVBX01CSU1YMjdfQkFTRUJPQVJEKSArPSBldWtyZWFfbWJpbXgyNy1iYXNlYm9hcmQubwotb2JqLSQoQ09ORklHX01BQ0hfUENBMTAwKSArPSBwY2ExMDAubwotb2JqLSQoQ09ORklHX01BQ0hfTVhUX1RENjApICs9IG14dF90ZDYwLm8KLQorb2JqLSQoQ09ORklHX01BQ0hfUENBMTAwKSArPSBtYWNoLXBjYTEwMC5vCitvYmotJChDT05GSUdfTUFDSF9NWFRfVEQ2MCkgKz0gbWFjaC1teHRfdGQ2MC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyMS5jIGIvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjEuYwppbmRleCBlODJiNDg5Li5iYjQxOWVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyMS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDIxLmMKQEAgLTIzLDExICsyMywyNDIgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KICNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKLSNpbmNsdWRlICJjcm1fcmVncy5oIgorI2RlZmluZSBJT19BRERSX0NDTShvZmYpCShNWDIxX0lPX0FERFJFU1MoTVgyMV9DQ01fQkFTRV9BRERSICsgKG9mZikpKQorCisvKiBSZWdpc3RlciBvZmZzZXRzICovCisjZGVmaW5lIENDTV9DU0NSCQlJT19BRERSX0NDTSgweDApCisjZGVmaW5lIENDTV9NUENUTDAJCUlPX0FERFJfQ0NNKDB4NCkKKyNkZWZpbmUgQ0NNX01QQ1RMMQkJSU9fQUREUl9DQ00oMHg4KQorI2RlZmluZSBDQ01fU1BDVEwwCQlJT19BRERSX0NDTSgweGMpCisjZGVmaW5lIENDTV9TUENUTDEJCUlPX0FERFJfQ0NNKDB4MTApCisjZGVmaW5lIENDTV9PU0MyNk1DVEwJCUlPX0FERFJfQ0NNKDB4MTQpCisjZGVmaW5lIENDTV9QQ0RSMAkJSU9fQUREUl9DQ00oMHgxOCkKKyNkZWZpbmUgQ0NNX1BDRFIxCQlJT19BRERSX0NDTSgweDFjKQorI2RlZmluZSBDQ01fUENDUjAJCUlPX0FERFJfQ0NNKDB4MjApCisjZGVmaW5lIENDTV9QQ0NSMQkJSU9fQUREUl9DQ00oMHgyNCkKKyNkZWZpbmUgQ0NNX0NDU1IJCUlPX0FERFJfQ0NNKDB4MjgpCisjZGVmaW5lIENDTV9QTUNUTAkJSU9fQUREUl9DQ00oMHgyYykKKyNkZWZpbmUgQ0NNX1BNQ09VTlQJCUlPX0FERFJfQ0NNKDB4MzApCisjZGVmaW5lIENDTV9XS0dEQ1RMCQlJT19BRERSX0NDTSgweDM0KQorCisjZGVmaW5lIENDTV9DU0NSX1BSRVNDX09GRlNFVAkyOQorI2RlZmluZSBDQ01fQ1NDUl9QUkVTQ19NQVNLCSgweDcgPDwgQ0NNX0NTQ1JfUFJFU0NfT0ZGU0VUKQorCisjZGVmaW5lIENDTV9DU0NSX1VTQl9PRkZTRVQJMjYKKyNkZWZpbmUgQ0NNX0NTQ1JfVVNCX01BU0sJKDB4NyA8PCBDQ01fQ1NDUl9VU0JfT0ZGU0VUKQorI2RlZmluZSBDQ01fQ1NDUl9TRF9PRkZTRVQJMjQKKyNkZWZpbmUgQ0NNX0NTQ1JfU0RfTUFTSwkoMHgzIDw8IENDTV9DU0NSX1NEX09GRlNFVCkKKyNkZWZpbmUgQ0NNX0NTQ1JfU1BMTFJFUwkoMSA8PCAyMikKKyNkZWZpbmUgQ0NNX0NTQ1JfTVBMTFJFUwkoMSA8PCAyMSkKKyNkZWZpbmUgQ0NNX0NTQ1JfU1NJMl9PRkZTRVQJMjAKKyNkZWZpbmUgQ0NNX0NTQ1JfU1NJMgkJKDEgPDwgQ0NNX0NTQ1JfU1NJMl9PRkZTRVQpCisjZGVmaW5lIENDTV9DU0NSX1NTSTFfT0ZGU0VUCTE5CisjZGVmaW5lIENDTV9DU0NSX1NTSTEJCSgxIDw8IENDTV9DU0NSX1NTSTFfT0ZGU0VUKQorI2RlZmluZSBDQ01fQ1NDUl9GSVJfT0ZGU0VUCTE4CisjZGVmaW5lIENDTV9DU0NSX0ZJUgkJKDEgPDwgQ0NNX0NTQ1JfRklSX09GRlNFVCkKKyNkZWZpbmUgQ0NNX0NTQ1JfU1AJCSgxIDw8IDE3KQorI2RlZmluZSBDQ01fQ1NDUl9NQ1UJCSgxIDw8IDE2KQorI2RlZmluZSBDQ01fQ1NDUl9CQ0xLX09GRlNFVAkxMAorI2RlZmluZSBDQ01fQ1NDUl9CQ0xLX01BU0sJKDB4ZiA8PCBDQ01fQ1NDUl9CQ0xLX09GRlNFVCkKKyNkZWZpbmUgQ0NNX0NTQ1JfSVBESVZfT0ZGU0VUCTkKKyNkZWZpbmUgQ0NNX0NTQ1JfSVBESVYJCSgxIDw8IENDTV9DU0NSX0lQRElWX09GRlNFVCkKKworI2RlZmluZSBDQ01fQ1NDUl9PU0MyNk1ESVYJKDEgPDwgNCkKKyNkZWZpbmUgQ0NNX0NTQ1JfT1NDMjZNCQkoMSA8PCAzKQorI2RlZmluZSBDQ01fQ1NDUl9GUE0JCSgxIDw8IDIpCisjZGVmaW5lIENDTV9DU0NSX1NQRU4JCSgxIDw8IDEpCisjZGVmaW5lIENDTV9DU0NSX01QRU4JCTEKKworI2RlZmluZSBDQ01fTVBDVEwwX0NQTE0JCSgxIDw8IDMxKQorI2RlZmluZSBDQ01fTVBDVEwwX1BEX09GRlNFVAkyNgorI2RlZmluZSBDQ01fTVBDVEwwX1BEX01BU0sJKDB4ZiA8PCAyNikKKyNkZWZpbmUgQ0NNX01QQ1RMMF9NRkRfT0ZGU0VUCTE2CisjZGVmaW5lIENDTV9NUENUTDBfTUZEX01BU0sJKDB4M2ZmIDw8IDE2KQorI2RlZmluZSBDQ01fTVBDVEwwX01GSV9PRkZTRVQJMTAKKyNkZWZpbmUgQ0NNX01QQ1RMMF9NRklfTUFTSwkoMHhmIDw8IDEwKQorI2RlZmluZSBDQ01fTVBDVEwwX01GTl9PRkZTRVQJMAorI2RlZmluZSBDQ01fTVBDVEwwX01GTl9NQVNLCTB4M2ZmCisKKyNkZWZpbmUgQ0NNX01QQ1RMMV9MRgkJKDEgPDwgMTUpCisjZGVmaW5lIENDTV9NUENUTDFfQlJNTwkJKDEgPDwgNikKKworI2RlZmluZSBDQ01fU1BDVEwwX0NQTE0JCSgxIDw8IDMxKQorI2RlZmluZSBDQ01fU1BDVEwwX1BEX09GRlNFVAkyNgorI2RlZmluZSBDQ01fU1BDVEwwX1BEX01BU0sJKDB4ZiA8PCAyNikKKyNkZWZpbmUgQ0NNX1NQQ1RMMF9NRkRfT0ZGU0VUCTE2CisjZGVmaW5lIENDTV9TUENUTDBfTUZEX01BU0sJKDB4M2ZmIDw8IDE2KQorI2RlZmluZSBDQ01fU1BDVEwwX01GSV9PRkZTRVQJMTAKKyNkZWZpbmUgQ0NNX1NQQ1RMMF9NRklfTUFTSwkoMHhmIDw8IDEwKQorI2RlZmluZSBDQ01fU1BDVEwwX01GTl9PRkZTRVQJMAorI2RlZmluZSBDQ01fU1BDVEwwX01GTl9NQVNLCTB4M2ZmCisKKyNkZWZpbmUgQ0NNX1NQQ1RMMV9MRgkJKDEgPDwgMTUpCisjZGVmaW5lIENDTV9TUENUTDFfQlJNTwkJKDEgPDwgNikKKworI2RlZmluZSBDQ01fT1NDMjZNQ1RMX1BFQUtfT0ZGU0VUCTE2CisjZGVmaW5lIENDTV9PU0MyNk1DVExfUEVBS19NQVNLCQkoMHgzIDw8IDE2KQorI2RlZmluZSBDQ01fT1NDMjZNQ1RMX0FHQ19PRkZTRVQJOAorI2RlZmluZSBDQ01fT1NDMjZNQ1RMX0FHQ19NQVNLCQkoMHgzZiA8PCA4KQorI2RlZmluZSBDQ01fT1NDMjZNQ1RMX0FOQVRFU1RfT0ZGU0VUCTAKKyNkZWZpbmUgQ0NNX09TQzI2TUNUTF9BTkFURVNUX01BU0sJMHgzZgorCisjZGVmaW5lIENDTV9QQ0RSMF9TU0kyQkFVRERJVl9PRkZTRVQJMjYKKyNkZWZpbmUgQ0NNX1BDRFIwX1NTSTJCQVVERElWX01BU0sJKDB4M2YgPDwgMjYpCisjZGVmaW5lIENDTV9QQ0RSMF9TU0kxQkFVRERJVl9PRkZTRVQJMTYKKyNkZWZpbmUgQ0NNX1BDRFIwX1NTSTFCQVVERElWX01BU0sJKDB4M2YgPDwgMTYpCisjZGVmaW5lIENDTV9QQ0RSMF9ORkNESVZfT0ZGU0VUCQkxMgorI2RlZmluZSBDQ01fUENEUjBfTkZDRElWX01BU0sJCSgweGYgPDwgMTIpCisjZGVmaW5lIENDTV9QQ0RSMF80OE1ESVZfT0ZGU0VUCQk1CisjZGVmaW5lIENDTV9QQ0RSMF80OE1ESVZfTUFTSwkJKDB4NyA8PCBDQ01fUENEUjBfNDhNRElWX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDRFIwX0ZJUklESVZfT0ZGU0VUCTAKKyNkZWZpbmUgQ0NNX1BDRFIwX0ZJUklESVZfTUFTSwkJMHgxZgorI2RlZmluZSBDQ01fUENEUjFfUEVSRElWNF9PRkZTRVQJMjQKKyNkZWZpbmUgQ0NNX1BDRFIxX1BFUkRJVjRfTUFTSwkJKDB4M2YgPDwgMjQpCisjZGVmaW5lIENDTV9QQ0RSMV9QRVJESVYzX09GRlNFVAkxNgorI2RlZmluZSBDQ01fUENEUjFfUEVSRElWM19NQVNLCQkoMHgzZiA8PCAxNikKKyNkZWZpbmUgQ0NNX1BDRFIxX1BFUkRJVjJfT0ZGU0VUCTgKKyNkZWZpbmUgQ0NNX1BDRFIxX1BFUkRJVjJfTUFTSwkJKDB4M2YgPDwgOCkKKyNkZWZpbmUgQ0NNX1BDRFIxX1BFUkRJVjFfT0ZGU0VUCTAKKyNkZWZpbmUgQ0NNX1BDRFIxX1BFUkRJVjFfTUFTSwkJMHgzZgorCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfQ1NJX09GRlNFVAkzMQorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0NTSV9SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0RNQV9PRkZTRVQJMzAKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19ETUFfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19CUk9NX09GRlNFVAkyOAorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0JST01fUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19FTU1BX09GRlNFVAkyNworI2RlZmluZSBDQ01fUENDUl9IQ0xLX0VNTUFfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19MQ0RDX09GRlNFVAkyNgorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0xDRENfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19TTENEQ19PRkZTRVQJMjUKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19TTENEQ19SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9IQ0xLX1VTQk9UR19PRkZTRVQJMjQKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19VU0JPVEdfUkVHCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0JNSV9PRkZTRVQJMjMKKyNkZWZpbmUgQ0NNX1BDQ1JfQk1JX01BU0sJCSgxIDw8IENDTV9QQ0NSX0JNSV9NQVNLKQorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0JNSV9SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9QRVJDTEs0X09GRlNFVAkJMjIKKyNkZWZpbmUgQ0NNX1BDQ1JfUEVSQ0xLNF9SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9TTENEQ19PRkZTRVQJCTIxCisjZGVmaW5lIENDTV9QQ0NSX1NMQ0RDX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0ZJUklfQkFVRF9PRkZTRVQJMjAKKyNkZWZpbmUgQ0NNX1BDQ1JfRklSSV9CQVVEX01BU0sJCSgxIDw8IENDTV9QQ0NSX0ZJUklfQkFVRF9NQVNLKQorI2RlZmluZSBDQ01fUENDUl9GSVJJX0JBVURfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfTkZDX09GRlNFVAkJMTkKKyNkZWZpbmUgQ0NNX1BDQ1JfTkZDX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0xDRENfT0ZGU0VUCQkxOAorI2RlZmluZSBDQ01fUENDUl9MQ0RDX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1NTSTFfQkFVRF9PRkZTRVQJMTcKKyNkZWZpbmUgQ0NNX1BDQ1JfU1NJMV9CQVVEX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1NTSTJfQkFVRF9PRkZTRVQJMTYKKyNkZWZpbmUgQ0NNX1BDQ1JfU1NJMl9CQVVEX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0VNTUFfT0ZGU0VUCQkxNQorI2RlZmluZSBDQ01fUENDUl9FTU1BX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1VTQk9UR19PRkZTRVQJCTE0CisjZGVmaW5lIENDTV9QQ0NSX1VTQk9UR19SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9ETUFfT0ZGU0VUCQkxMworI2RlZmluZSBDQ01fUENDUl9ETUFfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfSTJDMV9PRkZTRVQJCTEyCisjZGVmaW5lIENDTV9QQ0NSX0kyQzFfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfR1BJT19PRkZTRVQJCTExCisjZGVmaW5lIENDTV9QQ0NSX0dQSU9fUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfU0RIQzJfT0ZGU0VUCQkxMAorI2RlZmluZSBDQ01fUENDUl9TREhDMl9SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9TREhDMV9PRkZTRVQJCTkKKyNkZWZpbmUgQ0NNX1BDQ1JfU0RIQzFfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfRklSSV9PRkZTRVQJCTgKKyNkZWZpbmUgQ0NNX1BDQ1JfRklSSV9NQVNLCQkoMSA8PCBDQ01fUENDUl9CQVVEX01BU0spCisjZGVmaW5lIENDTV9QQ0NSX0ZJUklfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfU1NJMl9JUEdfT0ZGU0VUCTcKKyNkZWZpbmUgQ0NNX1BDQ1JfU1NJMl9SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9TU0kxX0lQR19PRkZTRVQJNgorI2RlZmluZSBDQ01fUENDUl9TU0kxX1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX0NTUEkyX09GRlNFVAkJNQorI2RlZmluZQlDQ01fUENDUl9DU1BJMl9SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9DU1BJMV9PRkZTRVQJCTQKKyNkZWZpbmUJQ0NNX1BDQ1JfQ1NQSTFfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDRfT0ZGU0VUCQkzCisjZGVmaW5lIENDTV9QQ0NSX1VBUlQ0X1JFRwkJQ0NNX1BDQ1IwCisjZGVmaW5lIENDTV9QQ0NSX1VBUlQzX09GRlNFVAkJMgorI2RlZmluZSBDQ01fUENDUl9VQVJUM19SRUcJCUNDTV9QQ0NSMAorI2RlZmluZSBDQ01fUENDUl9VQVJUMl9PRkZTRVQJCTEKKyNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDJfUkVHCQlDQ01fUENDUjAKKyNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDFfT0ZGU0VUCQkwCisjZGVmaW5lIENDTV9QQ0NSX1VBUlQxX1JFRwkJQ0NNX1BDQ1IwCisKKyNkZWZpbmUgQ0NNX1BDQ1JfT1dJUkVfT0ZGU0VUCQkzMQorI2RlZmluZSBDQ01fUENDUl9PV0lSRV9SRUcJCUNDTV9QQ0NSMQorI2RlZmluZSBDQ01fUENDUl9LUFBfT0ZGU0VUCQkzMAorI2RlZmluZSBDQ01fUENDUl9LUFBfUkVHCQlDQ01fUENDUjEKKyNkZWZpbmUgQ0NNX1BDQ1JfUlRDX09GRlNFVAkJMjkKKyNkZWZpbmUgQ0NNX1BDQ1JfUlRDX1JFRwkJQ0NNX1BDQ1IxCisjZGVmaW5lIENDTV9QQ0NSX1BXTV9PRkZTRVQJCTI4CisjZGVmaW5lIENDTV9QQ0NSX1BXTV9SRUcJCUNDTV9QQ0NSMQorI2RlZmluZSBDQ01fUENDUl9HUFQzX09GRlNFVAkJMjcKKyNkZWZpbmUgQ0NNX1BDQ1JfR1BUM19SRUcJCUNDTV9QQ0NSMQorI2RlZmluZSBDQ01fUENDUl9HUFQyX09GRlNFVAkJMjYKKyNkZWZpbmUgQ0NNX1BDQ1JfR1BUMl9SRUcJCUNDTV9QQ0NSMQorI2RlZmluZSBDQ01fUENDUl9HUFQxX09GRlNFVAkJMjUKKyNkZWZpbmUgQ0NNX1BDQ1JfR1BUMV9SRUcJCUNDTV9QQ0NSMQorI2RlZmluZSBDQ01fUENDUl9XRFRfT0ZGU0VUCQkyNAorI2RlZmluZSBDQ01fUENDUl9XRFRfUkVHCQlDQ01fUENDUjEKKyNkZWZpbmUgQ0NNX1BDQ1JfQ1NQSTNfT0ZGU0VUCQkyMworI2RlZmluZQlDQ01fUENDUl9DU1BJM19SRUcJCUNDTV9QQ0NSMQorCisjZGVmaW5lIENDTV9QQ0NSX0NTUEkxX01BU0sJCSgxIDw8IENDTV9QQ0NSX0NTUEkxX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfQ1NQSTJfTUFTSwkJKDEgPDwgQ0NNX1BDQ1JfQ1NQSTJfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9DU1BJM19NQVNLCQkoMSA8PCBDQ01fUENDUl9DU1BJM19PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0RNQV9NQVNLCQkoMSA8PCBDQ01fUENDUl9ETUFfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9FTU1BX01BU0sJCSgxIDw8IENDTV9QQ0NSX0VNTUFfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9HUElPX01BU0sJCSgxIDw8IENDTV9QQ0NSX0dQSU9fT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9HUFQxX01BU0sJCSgxIDw8IENDTV9QQ0NSX0dQVDFfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9HUFQyX01BU0sJCSgxIDw8IENDTV9QQ0NSX0dQVDJfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9HUFQzX01BU0sJCSgxIDw8IENDTV9QQ0NSX0dQVDNfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0JST01fTUFTSwkJKDEgPDwgQ0NNX1BDQ1JfSENMS19CUk9NX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19DU0lfTUFTSwkJKDEgPDwgQ0NNX1BDQ1JfSENMS19DU0lfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0RNQV9NQVNLCQkoMSA8PCBDQ01fUENDUl9IQ0xLX0RNQV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0hDTEtfRU1NQV9NQVNLCQkoMSA8PCBDQ01fUENDUl9IQ0xLX0VNTUFfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9IQ0xLX0xDRENfTUFTSwkJKDEgPDwgQ0NNX1BDQ1JfSENMS19MQ0RDX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfSENMS19TTENEQ19NQVNLCSgxIDw8IENDTV9QQ0NSX0hDTEtfU0xDRENfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9IQ0xLX1VTQk9UR19NQVNLCSgxIDw8IENDTV9QQ0NSX0hDTEtfVVNCT1RHX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfSTJDMV9NQVNLCQkoMSA8PCBDQ01fUENDUl9JMkMxX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfS1BQX01BU0sJCSgxIDw8IENDTV9QQ0NSX0tQUF9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX0xDRENfTUFTSwkJKDEgPDwgQ0NNX1BDQ1JfTENEQ19PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX05GQ19NQVNLCQkoMSA8PCBDQ01fUENDUl9ORkNfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9PV0lSRV9NQVNLCQkoMSA8PCBDQ01fUENDUl9PV0lSRV9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1BFUkNMSzRfTUFTSwkJKDEgPDwgQ0NNX1BDQ1JfUEVSQ0xLNF9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1BXTV9NQVNLCQkoMSA8PCBDQ01fUENDUl9QV01fT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9SVENfTUFTSwkJKDEgPDwgQ0NNX1BDQ1JfUlRDX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfU0RIQzFfTUFTSwkJKDEgPDwgQ0NNX1BDQ1JfU0RIQzFfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9TREhDMl9NQVNLCQkoMSA8PCBDQ01fUENDUl9TREhDMl9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1NMQ0RDX01BU0sJCSgxIDw8IENDTV9QQ0NSX1NMQ0RDX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfU1NJMV9CQVVEX01BU0sJCSgxIDw8IENDTV9QQ0NSX1NTSTFfQkFVRF9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1NTSTFfSVBHX01BU0sJCSgxIDw8IENDTV9QQ0NSX1NTSTFfSVBHX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfU1NJMl9CQVVEX01BU0sJCSgxIDw8IENDTV9QQ0NSX1NTSTJfQkFVRF9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1NTSTJfSVBHX01BU0sJCSgxIDw8IENDTV9QQ0NSX1NTSTJfSVBHX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDFfTUFTSwkJKDEgPDwgQ0NNX1BDQ1JfVUFSVDFfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9VQVJUMl9NQVNLCQkoMSA8PCBDQ01fUENDUl9VQVJUMl9PRkZTRVQpCisjZGVmaW5lIENDTV9QQ0NSX1VBUlQzX01BU0sJCSgxIDw8IENDTV9QQ0NSX1VBUlQzX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDRfTUFTSwkJKDEgPDwgQ0NNX1BDQ1JfVUFSVDRfT0ZGU0VUKQorI2RlZmluZSBDQ01fUENDUl9VU0JPVEdfTUFTSwkJKDEgPDwgQ0NNX1BDQ1JfVVNCT1RHX09GRlNFVCkKKyNkZWZpbmUgQ0NNX1BDQ1JfV0RUX01BU0sJCSgxIDw8IENDTV9QQ0NSX1dEVF9PRkZTRVQpCisKKyNkZWZpbmUgQ0NNX0NDU1JfMzJLU1IJCSgxIDw8IDE1KQorCisjZGVmaW5lIENDTV9DQ1NSX0NMS01PREUxCSgxIDw8IDkpCisjZGVmaW5lIENDTV9DQ1NSX0NMS01PREUwCSgxIDw8IDgpCisKKyNkZWZpbmUgQ0NNX0NDU1JfQ0xLT1NFTF9PRkZTRVQgMAorI2RlZmluZSBDQ01fQ0NTUl9DTEtPU0VMX01BU0sJMHgxZgorCisjZGVmaW5lIFNZU19GTUNSCQkweDE0CS8qIEZ1bmN0aW9uYWwgTXV4aW5nIENvbnRyb2wgUmVnICovCisjZGVmaW5lIFNZU19DSElQX0lECQkweDAwCS8qIFRoZSBvZmZzZXQgb2YgQ0hJUCBJRCByZWdpc3RlciAqLwogCiBzdGF0aWMgaW50IF9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKQEAgLTEwMDIsNiArMTIzMyw3IEBACiAJY2xrX2VuYWJsZSgmdWFydF9jbGtbMF0pOwogI2VuZGlmCiAKLQlteGNfdGltZXJfaW5pdCgmZ3B0X2Nsa1swXSwgSU9fQUREUkVTUyhHUFQxX0JBU0VfQUREUiksIE1YQ19JTlRfR1BUMSk7CisJbXhjX3RpbWVyX2luaXQoJmdwdF9jbGtbMF0sIE1YMjFfSU9fQUREUkVTUyhNWDIxX0dQVDFfQkFTRV9BRERSKSwKKwkJCU1YMjFfSU5UX0dQVDEpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2Nsb2NrX2lteDI3LmMKaW5kZXggMThjNTNhNi4uMGYwODIzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvY2xvY2tfaW14MjcuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9jbG9ja19pbXgyNy5jCkBAIC0yOSwyMSArMjksMjMgQEAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KIAorI2RlZmluZSBJT19BRERSX0NDTShvZmYpCShNWDI3X0lPX0FERFJFU1MoTVgyN19DQ01fQkFTRV9BRERSICsgKG9mZikpKQorCiAvKiBSZWdpc3RlciBvZmZzZXRzICovCi0jZGVmaW5lIENDTV9DU0NSICAgICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgwKQotI2RlZmluZSBDQ01fTVBDVEwwICAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4NCkKLSNkZWZpbmUgQ0NNX01QQ1RMMSAgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDgpCi0jZGVmaW5lIENDTV9TUENUTDAgICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHhDKQotI2RlZmluZSBDQ01fU1BDVEwxICAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4MTApCi0jZGVmaW5lIENDTV9PU0MyNk1DVEwgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgxNCkKLSNkZWZpbmUgQ0NNX1BDRFIwICAgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDE4KQotI2RlZmluZSBDQ01fUENEUjEgICAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4MWMpCi0jZGVmaW5lIENDTV9QQ0NSMCAgICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgyMCkKLSNkZWZpbmUgQ0NNX1BDQ1IxICAgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDI0KQotI2RlZmluZSBDQ01fQ0NTUiAgICAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4MjgpCi0jZGVmaW5lIENDTV9QTUNUTCAgICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgyYykKLSNkZWZpbmUgQ0NNX1BNQ09VTlQgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDMwKQotI2RlZmluZSBDQ01fV0tHRENUTCAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4MzQpCisjZGVmaW5lIENDTV9DU0NSCQlJT19BRERSX0NDTSgweDApCisjZGVmaW5lIENDTV9NUENUTDAJCUlPX0FERFJfQ0NNKDB4NCkKKyNkZWZpbmUgQ0NNX01QQ1RMMQkJSU9fQUREUl9DQ00oMHg4KQorI2RlZmluZSBDQ01fU1BDVEwwCQlJT19BRERSX0NDTSgweGMpCisjZGVmaW5lIENDTV9TUENUTDEJCUlPX0FERFJfQ0NNKDB4MTApCisjZGVmaW5lIENDTV9PU0MyNk1DVEwJCUlPX0FERFJfQ0NNKDB4MTQpCisjZGVmaW5lIENDTV9QQ0RSMAkJSU9fQUREUl9DQ00oMHgxOCkKKyNkZWZpbmUgQ0NNX1BDRFIxCQlJT19BRERSX0NDTSgweDFjKQorI2RlZmluZSBDQ01fUENDUjAJCUlPX0FERFJfQ0NNKDB4MjApCisjZGVmaW5lIENDTV9QQ0NSMQkJSU9fQUREUl9DQ00oMHgyNCkKKyNkZWZpbmUgQ0NNX0NDU1IJCUlPX0FERFJfQ0NNKDB4MjgpCisjZGVmaW5lIENDTV9QTUNUTAkJSU9fQUREUl9DQ00oMHgyYykKKyNkZWZpbmUgQ0NNX1BNQ09VTlQJCUlPX0FERFJfQ0NNKDB4MzApCisjZGVmaW5lIENDTV9XS0dEQ1RMCQlJT19BRERSX0NDTSgweDM0KQogCiAjZGVmaW5lIENDTV9DU0NSX1VQREFURV9ESVMJKDEgPDwgMzEpCiAjZGVmaW5lIENDTV9DU0NSX1NTSTIJCSgxIDw8IDIzKQpAQCAtNzUzLDcgKzc1NSw4IEBACiAJY2xrX2VuYWJsZSgmdWFydDFfY2xrKTsKICNlbmRpZgogCi0JbXhjX3RpbWVyX2luaXQoJmdwdDFfY2xrLCBJT19BRERSRVNTKEdQVDFfQkFTRV9BRERSKSwgTVhDX0lOVF9HUFQxKTsKKwlteGNfdGltZXJfaW5pdCgmZ3B0MV9jbGssIE1YMjdfSU9fQUREUkVTUyhNWDI3X0dQVDFfQkFTRV9BRERSKSwKKwkJCU1YMjdfSU5UX0dQVDEpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9jcHVfaW14MjcuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2NwdV9pbXgyNy5jCmluZGV4IGQ5ZTNiZjkuLmQ4ZDNiMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL2NwdV9pbXgyNy5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL2NwdV9pbXgyNy5jCkBAIC0zOSw3ICszOSw4IEBACiAJICogdGhlIHNpbGljb24gcmV2aXNpb24gdmVyeSBlYXJseSB3ZSByZWFkIGl0IGhlcmUgdG8KIAkgKiBhdm9pZCBhbnkgZnVydGhlciBob29rcwogCSovCi0JdmFsID0gX19yYXdfcmVhZGwoSU9fQUREUkVTUyhTWVNDVFJMX0JBU0VfQUREUikgKyBTWVNfQ0hJUF9JRCk7CisJdmFsID0gX19yYXdfcmVhZGwoTVgyN19JT19BRERSRVNTKE1YMjdfU1lTQ1RSTF9CQVNFX0FERFIKKwkJCQkrIFNZU19DSElQX0lEKSk7CiAKIAljcHVfc2lsaWNvbl9yZXYgPSAoaW50KSh2YWwgPj4gMjgpOwogCWNwdV9wYXJ0bnVtYmVyID0gKGludCkoKHZhbCA+PiAxMikgJiAweEZGRkYpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvY3JtX3JlZ3MuaCBiL2FyY2gvYXJtL21hY2gtbXgyL2NybV9yZWdzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc0OWRlNzYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvY3JtX3JlZ3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDQtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IDIwMDggSnVlcmdlbiBCZWlzZXJ0LCBrZXJuZWxAcGVuZ3V0cm9uaXguZGUKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKLSAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9NWDJfQ1JNX1JFR1NfSF9fCi0jZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9NWDJfQ1JNX1JFR1NfSF9fCi0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0KLS8qIFJlZ2lzdGVyIG9mZnNldHMgKi8KLSNkZWZpbmUgQ0NNX0NTQ1IgICAgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDApCi0jZGVmaW5lIENDTV9NUENUTDAgICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHg0KQotI2RlZmluZSBDQ01fTVBDVEwxICAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4OCkKLSNkZWZpbmUgQ0NNX1NQQ1RMMCAgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweEMpCi0jZGVmaW5lIENDTV9TUENUTDEgICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgxMCkKLSNkZWZpbmUgQ0NNX09TQzI2TUNUTCAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDE0KQotI2RlZmluZSBDQ01fUENEUjAgICAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4MTgpCi0jZGVmaW5lIENDTV9QQ0RSMSAgICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgxYykKLSNkZWZpbmUgQ0NNX1BDQ1IwICAgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDIwKQotI2RlZmluZSBDQ01fUENDUjEgICAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4MjQpCi0jZGVmaW5lIENDTV9DQ1NSICAgICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgyOCkKLSNkZWZpbmUgQ0NNX1BNQ1RMICAgICAgICAgICAgICAgKElPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikgKyAweDJjKQotI2RlZmluZSBDQ01fUE1DT1VOVCAgICAgICAgICAgICAoSU9fQUREUkVTUyhDQ01fQkFTRV9BRERSKSArIDB4MzApCi0jZGVmaW5lIENDTV9XS0dEQ1RMICAgICAgICAgICAgIChJT19BRERSRVNTKENDTV9CQVNFX0FERFIpICsgMHgzNCkKLQotI2RlZmluZSBDQ01fQ1NDUl9QUkVTQ19PRkZTRVQgICAyOQotI2RlZmluZSBDQ01fQ1NDUl9QUkVTQ19NQVNLICAgICAoMHg3IDw8IENDTV9DU0NSX1BSRVNDX09GRlNFVCkKLQotI2RlZmluZSBDQ01fQ1NDUl9VU0JfT0ZGU0VUICAgICAyNgotI2RlZmluZSBDQ01fQ1NDUl9VU0JfTUFTSyAgICAgICAoMHg3IDw8IENDTV9DU0NSX1VTQl9PRkZTRVQpCi0jZGVmaW5lIENDTV9DU0NSX1NEX09GRlNFVCAgICAgIDI0Ci0jZGVmaW5lIENDTV9DU0NSX1NEX01BU0sgICAgICAgICgweDMgPDwgQ0NNX0NTQ1JfU0RfT0ZGU0VUKQotI2RlZmluZSBDQ01fQ1NDUl9TUExMUkVTICAgICAgICAoMSA8PCAyMikKLSNkZWZpbmUgQ0NNX0NTQ1JfTVBMTFJFUyAgICAgICAgKDEgPDwgMjEpCi0jZGVmaW5lIENDTV9DU0NSX1NTSTJfT0ZGU0VUICAgIDIwCi0jZGVmaW5lIENDTV9DU0NSX1NTSTIgICAgICAgICAgICgxIDw8IENDTV9DU0NSX1NTSTJfT0ZGU0VUKQotI2RlZmluZSBDQ01fQ1NDUl9TU0kxX09GRlNFVCAgICAxOQotI2RlZmluZSBDQ01fQ1NDUl9TU0kxICAgICAgICAgICAoMSA8PCBDQ01fQ1NDUl9TU0kxX09GRlNFVCkKLSNkZWZpbmUgQ0NNX0NTQ1JfRklSX09GRlNFVCAgICAJMTgKLSNkZWZpbmUgQ0NNX0NTQ1JfRklSCQkoMSA8PCBDQ01fQ1NDUl9GSVJfT0ZGU0VUKQotI2RlZmluZSBDQ01fQ1NDUl9TUCAgICAgICAgICAgICAoMSA8PCAxNykKLSNkZWZpbmUgQ0NNX0NTQ1JfTUNVICAgICAgICAgICAgKDEgPDwgMTYpCi0jZGVmaW5lIENDTV9DU0NSX0JDTEtfT0ZGU0VUCTEwCi0jZGVmaW5lIENDTV9DU0NSX0JDTEtfTUFTSyAgICAgICgweGYgPDwgQ0NNX0NTQ1JfQkNMS19PRkZTRVQpCi0jZGVmaW5lIENDTV9DU0NSX0lQRElWX09GRlNFVCAgIDkKLSNkZWZpbmUgQ0NNX0NTQ1JfSVBESVYgICAgICAgICAgKDEgPDwgQ0NNX0NTQ1JfSVBESVZfT0ZGU0VUKQotCi0jZGVmaW5lIENDTV9DU0NSX09TQzI2TURJViAgICAgICgxIDw8IDQpCi0jZGVmaW5lIENDTV9DU0NSX09TQzI2TSAgICAgICAgICgxIDw8IDMpCi0jZGVmaW5lIENDTV9DU0NSX0ZQTSAgICAgICAgICAgICgxIDw8IDIpCi0jZGVmaW5lIENDTV9DU0NSX1NQRU4gICAgICAgICAgICgxIDw8IDEpCi0jZGVmaW5lIENDTV9DU0NSX01QRU4gICAgICAgICAgIDEKLQotCi0KLSNkZWZpbmUgQ0NNX01QQ1RMMF9DUExNICAgICAgICAgKDEgPDwgMzEpCi0jZGVmaW5lIENDTV9NUENUTDBfUERfT0ZGU0VUICAgIDI2Ci0jZGVmaW5lIENDTV9NUENUTDBfUERfTUFTSyAgICAgICgweGYgPDwgMjYpCi0jZGVmaW5lIENDTV9NUENUTDBfTUZEX09GRlNFVCAgIDE2Ci0jZGVmaW5lIENDTV9NUENUTDBfTUZEX01BU0sgICAgICgweDNmZiA8PCAxNikKLSNkZWZpbmUgQ0NNX01QQ1RMMF9NRklfT0ZGU0VUICAgMTAKLSNkZWZpbmUgQ0NNX01QQ1RMMF9NRklfTUFTSyAgICAgKDB4ZiA8PCAxMCkKLSNkZWZpbmUgQ0NNX01QQ1RMMF9NRk5fT0ZGU0VUICAgMAotI2RlZmluZSBDQ01fTVBDVEwwX01GTl9NQVNLICAgICAweDNmZgotCi0jZGVmaW5lIENDTV9NUENUTDFfTEYgICAgICAgICAgICgxIDw8IDE1KQotI2RlZmluZSBDQ01fTVBDVEwxX0JSTU8gICAgICAgICAoMSA8PCA2KQotCi0jZGVmaW5lIENDTV9TUENUTDBfQ1BMTSAgICAgICAgICgxIDw8IDMxKQotI2RlZmluZSBDQ01fU1BDVEwwX1BEX09GRlNFVCAgICAyNgotI2RlZmluZSBDQ01fU1BDVEwwX1BEX01BU0sgICAgICAoMHhmIDw8IDI2KQotI2RlZmluZSBDQ01fU1BDVEwwX01GRF9PRkZTRVQgICAxNgotI2RlZmluZSBDQ01fU1BDVEwwX01GRF9NQVNLICAgICAoMHgzZmYgPDwgMTYpCi0jZGVmaW5lIENDTV9TUENUTDBfTUZJX09GRlNFVCAgIDEwCi0jZGVmaW5lIENDTV9TUENUTDBfTUZJX01BU0sgICAgICgweGYgPDwgMTApCi0jZGVmaW5lIENDTV9TUENUTDBfTUZOX09GRlNFVCAgIDAKLSNkZWZpbmUgQ0NNX1NQQ1RMMF9NRk5fTUFTSyAgICAgMHgzZmYKLQotI2RlZmluZSBDQ01fU1BDVEwxX0xGICAgICAgICAgICAoMSA8PCAxNSkKLSNkZWZpbmUgQ0NNX1NQQ1RMMV9CUk1PICAgICAgICAgKDEgPDwgNikKLQotI2RlZmluZSBDQ01fT1NDMjZNQ1RMX1BFQUtfT0ZGU0VUICAgICAgIDE2Ci0jZGVmaW5lIENDTV9PU0MyNk1DVExfUEVBS19NQVNLICAgICAgICAgKDB4MyA8PCAxNikKLSNkZWZpbmUgQ0NNX09TQzI2TUNUTF9BR0NfT0ZGU0VUICAgICAgICA4Ci0jZGVmaW5lIENDTV9PU0MyNk1DVExfQUdDX01BU0sgICAgICAgICAgKDB4M2YgPDwgOCkKLSNkZWZpbmUgQ0NNX09TQzI2TUNUTF9BTkFURVNUX09GRlNFVCAgICAwCi0jZGVmaW5lIENDTV9PU0MyNk1DVExfQU5BVEVTVF9NQVNLICAgICAgMHgzZgotCi0jZGVmaW5lIENDTV9QQ0RSMF9TU0kyQkFVRERJVl9PRkZTRVQgICAgMjYKLSNkZWZpbmUgQ0NNX1BDRFIwX1NTSTJCQVVERElWX01BU0sgICAgICAoMHgzZiA8PCAyNikKLSNkZWZpbmUgQ0NNX1BDRFIwX1NTSTFCQVVERElWX09GRlNFVCAgICAxNgotI2RlZmluZSBDQ01fUENEUjBfU1NJMUJBVURESVZfTUFTSyAgICAgICgweDNmIDw8IDE2KQotI2RlZmluZSBDQ01fUENEUjBfTkZDRElWX09GRlNFVCAgICAgICAgIDEyCi0jZGVmaW5lIENDTV9QQ0RSMF9ORkNESVZfTUFTSyAgICAgICAgICAgKDB4ZiA8PCAxMikKLSNkZWZpbmUgQ0NNX1BDRFIwXzQ4TURJVl9PRkZTRVQJCTUKLSNkZWZpbmUgQ0NNX1BDRFIwXzQ4TURJVl9NQVNLCQkoMHg3IDw8IENDTV9QQ0RSMF80OE1ESVZfT0ZGU0VUKQotI2RlZmluZSBDQ01fUENEUjBfRklSSURJVl9PRkZTRVQJMAotI2RlZmluZSBDQ01fUENEUjBfRklSSURJVl9NQVNLCQkweDFmCi0jZGVmaW5lIENDTV9QQ0RSMV9QRVJESVY0X09GRlNFVCAgICAgICAgMjQKLSNkZWZpbmUgQ0NNX1BDRFIxX1BFUkRJVjRfTUFTSyAgICAgICAgICAoMHgzZiA8PCAyNCkKLSNkZWZpbmUgQ0NNX1BDRFIxX1BFUkRJVjNfT0ZGU0VUICAgICAgICAxNgotI2RlZmluZSBDQ01fUENEUjFfUEVSRElWM19NQVNLICAgICAgICAgICgweDNmIDw8IDE2KQotI2RlZmluZSBDQ01fUENEUjFfUEVSRElWMl9PRkZTRVQgICAgICAgIDgKLSNkZWZpbmUgQ0NNX1BDRFIxX1BFUkRJVjJfTUFTSyAgICAgICAgICAoMHgzZiA8PCA4KQotI2RlZmluZSBDQ01fUENEUjFfUEVSRElWMV9PRkZTRVQgICAgICAgIDAKLSNkZWZpbmUgQ0NNX1BDRFIxX1BFUkRJVjFfTUFTSyAgICAgICAgICAweDNmCi0KLSNkZWZpbmUgQ0NNX1BDQ1JfSENMS19DU0lfT0ZGU0VUICAgICAgIAkzMQotI2RlZmluZSBDQ01fUENDUl9IQ0xLX0NTSV9SRUcJICAgICAgICBDQ01fUENDUjAKLSNkZWZpbmUgQ0NNX1BDQ1JfSENMS19ETUFfT0ZGU0VUICAgICAgIAkzMAotI2RlZmluZSBDQ01fUENDUl9IQ0xLX0RNQV9SRUcJICAgICAgICBDQ01fUENDUjAKLSNkZWZpbmUgQ0NNX1BDQ1JfSENMS19CUk9NX09GRlNFVCAgICAgIAkyOAotI2RlZmluZSBDQ01fUENDUl9IQ0xLX0JST01fUkVHCSAgICAgICAgQ0NNX1BDQ1IwCi0jZGVmaW5lIENDTV9QQ0NSX0hDTEtfRU1NQV9PRkZTRVQgICAgICAJMjcKLSNkZWZpbmUgQ0NNX1BDQ1JfSENMS19FTU1BX1JFRwkgICAgICAgIENDTV9QQ0NSMAotI2RlZmluZSBDQ01fUENDUl9IQ0xLX0xDRENfT0ZGU0VUICAgICAgCTI2Ci0jZGVmaW5lIENDTV9QQ0NSX0hDTEtfTENEQ19SRUcJICAgICAgICBDQ01fUENDUjAKLSNkZWZpbmUgQ0NNX1BDQ1JfSENMS19TTENEQ19PRkZTRVQgICAgIAkyNQotI2RlZmluZSBDQ01fUENDUl9IQ0xLX1NMQ0RDX1JFRwkgICAgICAgIENDTV9QQ0NSMAotI2RlZmluZSBDQ01fUENDUl9IQ0xLX1VTQk9UR19PRkZTRVQgICAgCTI0Ci0jZGVmaW5lIENDTV9QQ0NSX0hDTEtfVVNCT1RHX1JFRwlDQ01fUENDUjAKLSNkZWZpbmUgQ0NNX1BDQ1JfSENMS19CTUlfT0ZGU0VUICAgIAkyMwotI2RlZmluZSBDQ01fUENDUl9CTUlfTUFTSyAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfQk1JX01BU0spCi0jZGVmaW5lIENDTV9QQ0NSX0hDTEtfQk1JX1JFRwkgICAgCUNDTV9QQ0NSMAotI2RlZmluZSBDQ01fUENDUl9QRVJDTEs0X09GRlNFVCAgICAgICAgCTIyCi0jZGVmaW5lIENDTV9QQ0NSX1BFUkNMSzRfUkVHCSAgICAJQ0NNX1BDQ1IwCi0jZGVmaW5lIENDTV9QQ0NSX1NMQ0RDX09GRlNFVCAgICAgICAgICAJMjEKLSNkZWZpbmUgQ0NNX1BDQ1JfU0xDRENfUkVHCQlDQ01fUENDUjAKLSNkZWZpbmUgQ0NNX1BDQ1JfRklSSV9CQVVEX09GRlNFVCAgICAgICAyMAotI2RlZmluZSBDQ01fUENDUl9GSVJJX0JBVURfTUFTSyAgICAgICAgICgxIDw8IENDTV9QQ0NSX0ZJUklfQkFVRF9NQVNLKQotI2RlZmluZSBDQ01fUENDUl9GSVJJX0JBVURfUkVHCSAgICAgICAgQ0NNX1BDQ1IwCi0jZGVmaW5lIENDTV9QQ0NSX05GQ19PRkZTRVQJCTE5Ci0jZGVmaW5lIENDTV9QQ0NSX05GQ19SRUcJCUNDTV9QQ0NSMAotI2RlZmluZSBDQ01fUENDUl9MQ0RDX09GRlNFVCAgICAgICAgICAgCTE4Ci0jZGVmaW5lIENDTV9QQ0NSX0xDRENfUkVHCQlDQ01fUENDUjAKLSNkZWZpbmUgQ0NNX1BDQ1JfU1NJMV9CQVVEX09GRlNFVCAgICAgIAkxNwotI2RlZmluZSBDQ01fUENDUl9TU0kxX0JBVURfUkVHCSAgICAJQ0NNX1BDQ1IwCi0jZGVmaW5lIENDTV9QQ0NSX1NTSTJfQkFVRF9PRkZTRVQgICAgICAJMTYKLSNkZWZpbmUgQ0NNX1BDQ1JfU1NJMl9CQVVEX1JFRwkgICAgCUNDTV9QQ0NSMAotI2RlZmluZSBDQ01fUENDUl9FTU1BX09GRlNFVCAgICAgICAgICAgCTE1Ci0jZGVmaW5lIENDTV9QQ0NSX0VNTUFfUkVHCQlDQ01fUENDUjAKLSNkZWZpbmUgQ0NNX1BDQ1JfVVNCT1RHX09GRlNFVCAgICAgICAgIAkxNAotI2RlZmluZSBDQ01fUENDUl9VU0JPVEdfUkVHCQlDQ01fUENDUjAKLSNkZWZpbmUgQ0NNX1BDQ1JfRE1BX09GRlNFVCAgICAgICAgICAgIAkxMwotI2RlZmluZSBDQ01fUENDUl9ETUFfUkVHICAgICAgICAgICAgCUNDTV9QQ0NSMAotI2RlZmluZSBDQ01fUENDUl9JMkMxX09GRlNFVCAgICAgICAgICAgCTEyCi0jZGVmaW5lIENDTV9QQ0NSX0kyQzFfUkVHCQlDQ01fUENDUjAKLSNkZWZpbmUgQ0NNX1BDQ1JfR1BJT19PRkZTRVQgICAgICAgICAgIAkxMQotI2RlZmluZSBDQ01fUENDUl9HUElPX1JFRwkJQ0NNX1BDQ1IwCi0jZGVmaW5lIENDTV9QQ0NSX1NESEMyX09GRlNFVCAgICAgICAgICAJMTAKLSNkZWZpbmUgQ0NNX1BDQ1JfU0RIQzJfUkVHCQlDQ01fUENDUjAKLSNkZWZpbmUgQ0NNX1BDQ1JfU0RIQzFfT0ZGU0VUICAgICAgICAgIAk5Ci0jZGVmaW5lIENDTV9QQ0NSX1NESEMxX1JFRwkJQ0NNX1BDQ1IwCi0jZGVmaW5lIENDTV9QQ0NSX0ZJUklfT0ZGU0VUCQk4Ci0jZGVmaW5lIENDTV9QQ0NSX0ZJUklfTUFTSwkJKDEgPDwgQ0NNX1BDQ1JfQkFVRF9NQVNLKQotI2RlZmluZSBDQ01fUENDUl9GSVJJX1JFRwkJQ0NNX1BDQ1IwCi0jZGVmaW5lIENDTV9QQ0NSX1NTSTJfSVBHX09GRlNFVCAgICAgICAJNwotI2RlZmluZSBDQ01fUENDUl9TU0kyX1JFRwkJQ0NNX1BDQ1IwCi0jZGVmaW5lIENDTV9QQ0NSX1NTSTFfSVBHX09GRlNFVCAgICAgICAJNgotI2RlZmluZSBDQ01fUENDUl9TU0kxX1JFRwkJQ0NNX1BDQ1IwCi0jZGVmaW5lIENDTV9QQ0NSX0NTUEkyX09GRlNFVAkJNQotI2RlZmluZQlDQ01fUENDUl9DU1BJMl9SRUcJCUNDTV9QQ0NSMAotI2RlZmluZSBDQ01fUENDUl9DU1BJMV9PRkZTRVQJCTQKLSNkZWZpbmUJQ0NNX1BDQ1JfQ1NQSTFfUkVHCQlDQ01fUENDUjAKLSNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDRfT0ZGU0VUICAgICAgICAgIAkzCi0jZGVmaW5lIENDTV9QQ0NSX1VBUlQ0X1JFRwkJQ0NNX1BDQ1IwCi0jZGVmaW5lIENDTV9QQ0NSX1VBUlQzX09GRlNFVCAgICAgICAgICAJMgotI2RlZmluZSBDQ01fUENDUl9VQVJUM19SRUcJCUNDTV9QQ0NSMAotI2RlZmluZSBDQ01fUENDUl9VQVJUMl9PRkZTRVQgICAgICAgICAgCTEKLSNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDJfUkVHCQlDQ01fUENDUjAKLSNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDFfT0ZGU0VUICAgICAgICAgIAkwCi0jZGVmaW5lIENDTV9QQ0NSX1VBUlQxX1JFRwkJQ0NNX1BDQ1IwCi0KLSNkZWZpbmUgQ0NNX1BDQ1JfT1dJUkVfT0ZGU0VUICAgICAgICAgIAkzMQotI2RlZmluZSBDQ01fUENDUl9PV0lSRV9SRUcJCUNDTV9QQ0NSMQotI2RlZmluZSBDQ01fUENDUl9LUFBfT0ZGU0VUICAgICAgICAgICAgCTMwCi0jZGVmaW5lIENDTV9QQ0NSX0tQUF9SRUcJCUNDTV9QQ0NSMQotI2RlZmluZSBDQ01fUENDUl9SVENfT0ZGU0VUICAgICAgICAgICAgCTI5Ci0jZGVmaW5lIENDTV9QQ0NSX1JUQ19SRUcJCUNDTV9QQ0NSMQotI2RlZmluZSBDQ01fUENDUl9QV01fT0ZGU0VUICAgICAgICAgICAgCTI4Ci0jZGVmaW5lIENDTV9QQ0NSX1BXTV9SRUcJCUNDTV9QQ0NSMQotI2RlZmluZSBDQ01fUENDUl9HUFQzX09GRlNFVCAgICAgICAgICAgCTI3Ci0jZGVmaW5lIENDTV9QQ0NSX0dQVDNfUkVHCQlDQ01fUENDUjEKLSNkZWZpbmUgQ0NNX1BDQ1JfR1BUMl9PRkZTRVQgICAgICAgICAgIAkyNgotI2RlZmluZSBDQ01fUENDUl9HUFQyX1JFRwkJQ0NNX1BDQ1IxCi0jZGVmaW5lIENDTV9QQ0NSX0dQVDFfT0ZGU0VUICAgICAgICAgICAJMjUKLSNkZWZpbmUgQ0NNX1BDQ1JfR1BUMV9SRUcJCUNDTV9QQ0NSMQotI2RlZmluZSBDQ01fUENDUl9XRFRfT0ZGU0VUICAgICAgICAgICAgCTI0Ci0jZGVmaW5lIENDTV9QQ0NSX1dEVF9SRUcJCUNDTV9QQ0NSMQotI2RlZmluZSBDQ01fUENDUl9DU1BJM19PRkZTRVQJCTIzCi0jZGVmaW5lCUNDTV9QQ0NSX0NTUEkzX1JFRwkJQ0NNX1BDQ1IxCi0KLSNkZWZpbmUgQ0NNX1BDQ1JfQ1NQSTFfTUFTSyAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9DU1BJMV9PRkZTRVQpCi0jZGVmaW5lIENDTV9QQ0NSX0NTUEkyX01BU0sgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfQ1NQSTJfT0ZGU0VUKQotI2RlZmluZSBDQ01fUENDUl9DU1BJM19NQVNLICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0NTUEkzX09GRlNFVCkKLSNkZWZpbmUgQ0NNX1BDQ1JfRE1BX01BU0sgICAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9ETUFfT0ZGU0VUKQotI2RlZmluZSBDQ01fUENDUl9FTU1BX01BU0sgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0VNTUFfT0ZGU0VUKQotI2RlZmluZSBDQ01fUENDUl9HUElPX01BU0sgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0dQSU9fT0ZGU0VUKQotI2RlZmluZSBDQ01fUENDUl9HUFQxX01BU0sgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0dQVDFfT0ZGU0VUKQotI2RlZmluZSBDQ01fUENDUl9HUFQyX01BU0sgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0dQVDJfT0ZGU0VUKQotI2RlZmluZSBDQ01fUENDUl9HUFQzX01BU0sgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0dQVDNfT0ZGU0VUKQotI2RlZmluZSBDQ01fUENDUl9IQ0xLX0JST01fTUFTSwkJKDEgPDwgQ0NNX1BDQ1JfSENMS19CUk9NX09GRlNFVCkKLSNkZWZpbmUgQ0NNX1BDQ1JfSENMS19DU0lfTUFTSyAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9IQ0xLX0NTSV9PRkZTRVQpCi0jZGVmaW5lIENDTV9QQ0NSX0hDTEtfRE1BX01BU0sgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfSENMS19ETUFfT0ZGU0VUKQotI2RlZmluZSBDQ01fUENDUl9IQ0xLX0VNTUFfTUFTSyAgICAgICAgCSgxIDw8IENDTV9QQ0NSX0hDTEtfRU1NQV9PRkZTRVQpCi0jZGVmaW5lIENDTV9QQ0NSX0hDTEtfTENEQ19NQVNLICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfSENMS19MQ0RDX09GRlNFVCkKLSNkZWZpbmUgQ0NNX1BDQ1JfSENMS19TTENEQ19NQVNLICAgICAgIAkoMSA8PCBDQ01fUENDUl9IQ0xLX1NMQ0RDX09GRlNFVCkKLSNkZWZpbmUgQ0NNX1BDQ1JfSENMS19VU0JPVEdfTUFTSyAgICAgIAkoMSA8PCBDQ01fUENDUl9IQ0xLX1VTQk9UR19PRkZTRVQpCi0jZGVmaW5lIENDTV9QQ0NSX0kyQzFfTUFTSyAgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfSTJDMV9PRkZTRVQpCi0jZGVmaW5lIENDTV9QQ0NSX0tQUF9NQVNLICAgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfS1BQX09GRlNFVCkKLSNkZWZpbmUgQ0NNX1BDQ1JfTENEQ19NQVNLICAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9MQ0RDX09GRlNFVCkKLSNkZWZpbmUgQ0NNX1BDQ1JfTkZDX01BU0sJCSgxIDw8IENDTV9QQ0NSX05GQ19PRkZTRVQpCi0jZGVmaW5lIENDTV9QQ0NSX09XSVJFX01BU0sgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfT1dJUkVfT0ZGU0VUKQotI2RlZmluZSBDQ01fUENDUl9QRVJDTEs0X01BU0sgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1BFUkNMSzRfT0ZGU0VUKQotI2RlZmluZSBDQ01fUENDUl9QV01fTUFTSyAgICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1BXTV9PRkZTRVQpCi0jZGVmaW5lIENDTV9QQ0NSX1JUQ19NQVNLICAgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfUlRDX09GRlNFVCkKLSNkZWZpbmUgQ0NNX1BDQ1JfU0RIQzFfTUFTSyAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9TREhDMV9PRkZTRVQpCi0jZGVmaW5lIENDTV9QQ0NSX1NESEMyX01BU0sgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfU0RIQzJfT0ZGU0VUKQotI2RlZmluZSBDQ01fUENDUl9TTENEQ19NQVNLICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1NMQ0RDX09GRlNFVCkKLSNkZWZpbmUgQ0NNX1BDQ1JfU1NJMV9CQVVEX01BU0sgICAgICAgIAkoMSA8PCBDQ01fUENDUl9TU0kxX0JBVURfT0ZGU0VUKQotI2RlZmluZSBDQ01fUENDUl9TU0kxX0lQR19NQVNLICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1NTSTFfSVBHX09GRlNFVCkKLSNkZWZpbmUgQ0NNX1BDQ1JfU1NJMl9CQVVEX01BU0sgICAgICAgIAkoMSA8PCBDQ01fUENDUl9TU0kyX0JBVURfT0ZGU0VUKQotI2RlZmluZSBDQ01fUENDUl9TU0kyX0lQR19NQVNLICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1NTSTJfSVBHX09GRlNFVCkKLSNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDFfTUFTSyAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9VQVJUMV9PRkZTRVQpCi0jZGVmaW5lIENDTV9QQ0NSX1VBUlQyX01BU0sgICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfVUFSVDJfT0ZGU0VUKQotI2RlZmluZSBDQ01fUENDUl9VQVJUM19NQVNLICAgICAgICAgICAgCSgxIDw8IENDTV9QQ0NSX1VBUlQzX09GRlNFVCkKLSNkZWZpbmUgQ0NNX1BDQ1JfVUFSVDRfTUFTSyAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9VQVJUNF9PRkZTRVQpCi0jZGVmaW5lIENDTV9QQ0NSX1VTQk9UR19NQVNLICAgICAgICAgICAJKDEgPDwgQ0NNX1BDQ1JfVVNCT1RHX09GRlNFVCkKLSNkZWZpbmUgQ0NNX1BDQ1JfV0RUX01BU0sgICAgICAgICAgICAgIAkoMSA8PCBDQ01fUENDUl9XRFRfT0ZGU0VUKQotCi0KLSNkZWZpbmUgQ0NNX0NDU1JfMzJLU1IgICAgICAgICAgKDEgPDwgMTUpCi0KLSNkZWZpbmUgQ0NNX0NDU1JfQ0xLTU9ERTEgICAgICAgKDEgPDwgOSkKLSNkZWZpbmUgQ0NNX0NDU1JfQ0xLTU9ERTAgICAgICAgKDEgPDwgOCkKLQotI2RlZmluZSBDQ01fQ0NTUl9DTEtPU0VMX09GRlNFVCAwCi0jZGVmaW5lIENDTV9DQ1NSX0NMS09TRUxfTUFTSyAgIDB4MWYKLQotI2RlZmluZSBTWVNfRk1DUiAgICAgICAgICAgICAgICAweDE0CS8qICBGdW5jdGlvbmFsIE11eGluZyBDb250cm9sIFJlZyAqLwotI2RlZmluZSBTWVNfQ0hJUF9JRCAgICAgICAgICAgICAweDAwCS8qIFRoZSBvZmZzZXQgb2YgQ0hJUCBJRCByZWdpc3RlciAqLwotCi0jZW5kaWYgLyogX19BUkNIX0FSTV9NQUNIX01YMl9DUk1fUkVHU19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuYwppbmRleCAzZDM5OGNlLi5iOTFlNDEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtNDYsNjUgKzQ3LDMxIEBACiAgKiAtIGkuTVgyMTogMiBjaGFubmVsCiAgKiAtIGkuTVgyNzogMyBjaGFubmVsCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NwaV9yZXNvdXJjZXMwW10gPSB7Ci0JewotCSAgICAgICAuc3RhcnQgPSBDU1BJMV9CQVNFX0FERFIsCi0JICAgICAgIC5lbmQgPSBDU1BJMV9CQVNFX0FERFIgKyBTWl80SyAtIDEsCi0JICAgICAgIC5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkgICAgICAgLnN0YXJ0ID0gTVhDX0lOVF9DU1BJMSwKLQkgICAgICAgLmVuZCA9IE1YQ19JTlRfQ1NQSTEsCi0JICAgICAgIC5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OworI2RlZmluZSBERUZJTkVfSU1YX1NQSV9ERVZJQ0UobiwgYmFzZWFkZHIsIGlycSkJCQkJCVwKKwlzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zcGlfcmVzb3VyY2VzICMjIG5bXSA9IHsJCQlcCisJCXsJCQkJCQkJCVwKKwkJCS5zdGFydCA9IGJhc2VhZGRyLAkJCQkJXAorCQkJLmVuZCA9IGJhc2VhZGRyICsgU1pfNEsgLSAxLAkJCQlcCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwJCQkJXAorCQl9LCB7CQkJCQkJCQlcCisJCQkuc3RhcnQgPSBpcnEsCQkJCQkJXAorCQkJLmVuZCA9IGlycSwJCQkJCQlcCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwJCQkJXAorCQl9LAkJCQkJCQkJXAorCX07CQkJCQkJCQkJXAorCQkJCQkJCQkJCVwKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlICMjIG4gPSB7CQkJCVwKKwkJLm5hbWUgPSAic3BpX2lteCIsCQkJCQkJXAorCQkuaWQgPSBuLAkJCQkJCQlcCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpX3Jlc291cmNlcyAjIyBuKSwJCVwKKwkJLnJlc291cmNlID0gbXhjX3NwaV9yZXNvdXJjZXMgIyMgbiwJCQkJXAorCX0KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfc3BpX3Jlc291cmNlczFbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IENTUEkyX0JBU0VfQUREUiwKLQkJLmVuZCA9IENTUEkyX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgPSBNWENfSU5UX0NTUEkyLAotCQkuZW5kID0gTVhDX0lOVF9DU1BJMiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07CitERUZJTkVfSU1YX1NQSV9ERVZJQ0UoMCwgTVgyeF9DU1BJMV9CQVNFX0FERFIsIE1YMnhfSU5UX0NTUEkxKTsKK0RFRklORV9JTVhfU1BJX0RFVklDRSgxLCBNWDJ4X0NTUEkyX0JBU0VfQUREUiwgTVgyeF9JTlRfQ1NQSTIpOwogCiAjaWZkZWYgQ09ORklHX01BQ0hfTVgyNwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfc3BpX3Jlc291cmNlczJbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IENTUEkzX0JBU0VfQUREUiwKLQkJLmVuZCA9IENTUEkzX0JBU0VfQUREUiArIFNaXzRLIC0gMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgPSBNWENfSU5UX0NTUEkzLAotCQkuZW5kID0gTVhDX0lOVF9DU1BJMywKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0jZW5kaWYKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTAgPSB7Ci0JLm5hbWUgPSAic3BpX2lteCIsCi0JLmlkID0gMCwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX3NwaV9yZXNvdXJjZXMwKSwKLQkucmVzb3VyY2UgPSBteGNfc3BpX3Jlc291cmNlczAsCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMSA9IHsKLQkubmFtZSA9ICJzcGlfaW14IiwKLQkuaWQgPSAxLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpX3Jlc291cmNlczEpLAotCS5yZXNvdXJjZSA9IG14Y19zcGlfcmVzb3VyY2VzMSwKLX07Ci0KLSNpZmRlZiBDT05GSUdfTUFDSF9NWDI3Ci1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zcGlfZGV2aWNlMiA9IHsKLQkubmFtZSA9ICJzcGlfaW14IiwKLQkuaWQgPSAyLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc3BpX3Jlc291cmNlczIpLAotCS5yZXNvdXJjZSA9IG14Y19zcGlfcmVzb3VyY2VzMiwKLX07CitERUZJTkVfSU1YX1NQSV9ERVZJQ0UoMiwgTVgyN19DU1BJM19CQVNFX0FERFIsIE1YMjdfSU5UX0NTUEkzKTsKICNlbmRpZgogCiAvKgpAQCAtMTEyLDEwNCArNzksMzQgQEAKICAqIC0gaS5NWDIxOiAzIHRpbWVycwogICogLSBpLk1YMjc6IDYgdGltZXJzCiAgKi8KLQotLyogV2UgdXNlIGdwdDAgYXMgc3lzdGVtIHRpbWVyLCBzbyBkbyBub3QgYWRkIGEgZGV2aWNlIGZvciB0aGlzIG9uZSAqLwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHRpbWVyMV9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IEdQVDJfQkFTRV9BRERSLAotCQkuZW5kCT0gR1BUMl9CQVNFX0FERFIgKyAweDE3LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCAgID0gTVhDX0lOVF9HUFQyLAotCQkuZW5kICAgICA9IE1YQ19JTlRfR1BUMiwKLQkJLmZsYWdzICAgPSBJT1JFU09VUkNFX0lSUSwKKyNkZWZpbmUgREVGSU5FX0lNWF9HUFRfREVWSUNFKG4sIGJhc2VhZGRyLCBpcnEpCQkJCVwKKwlzdGF0aWMgc3RydWN0IHJlc291cmNlIHRpbWVyICMjIG4gIyNfcmVzb3VyY2VzW10gPSB7CQlcCisJCXsJCQkJCQkJXAorCQkJLnN0YXJ0ID0gYmFzZWFkZHIsCQkJCVwKKwkJCS5lbmQgPSBiYXNlYWRkciArIFNaXzRLIC0gMSwJCQlcCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwJCQlcCisJCX0sIHsJCQkJCQkJXAorCQkJLnN0YXJ0ID0gaXJxLAkJCQkJXAorCQkJLmVuZCA9IGlycSwJCQkJCVwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAkJCVwKKwkJfQkJCQkJCQlcCisJfTsJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19ncHQgIyMgbiA9IHsJCQkJXAorCQkubmFtZSA9ICJpbXhfZ3B0IiwJCQkJCVwKKwkJLmlkID0gbiwJCQkJCQlcCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1lciAjIyBuICMjIF9yZXNvdXJjZXMpLAlcCisJCS5yZXNvdXJjZSA9IHRpbWVyICMjIG4gIyMgX3Jlc291cmNlcywJCQlcCiAJfQotfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZ3B0MSA9IHsKLQkubmFtZSA9ICJpbXhfZ3B0IiwKLQkuaWQgPSAxLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1lcjFfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSB0aW1lcjFfcmVzb3VyY2VzLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSB0aW1lcjJfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBHUFQzX0JBU0VfQUREUiwKLQkJLmVuZAk9IEdQVDNfQkFTRV9BRERSICsgMHgxNywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQgICA9IE1YQ19JTlRfR1BUMywKLQkJLmVuZCAgICAgPSBNWENfSU5UX0dQVDMsCi0JCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEsCi0JfQotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZ3B0MiA9IHsKLQkubmFtZSA9ICJpbXhfZ3B0IiwKLQkuaWQgPSAyLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh0aW1lcjJfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgPSB0aW1lcjJfcmVzb3VyY2VzLAotfTsKKy8qIFdlIHVzZSBncHQxIGFzIHN5c3RlbSB0aW1lciwgc28gZG8gbm90IGFkZCBhIGRldmljZSBmb3IgdGhpcyBvbmUgKi8KK0RFRklORV9JTVhfR1BUX0RFVklDRSgxLCBNWDJ4X0dQVDJfQkFTRV9BRERSLCBNWDJ4X0lOVF9HUFQyKTsKK0RFRklORV9JTVhfR1BUX0RFVklDRSgyLCBNWDJ4X0dQVDNfQkFTRV9BRERSLCBNWDJ4X0lOVF9HUFQzKTsKIAogI2lmZGVmIENPTkZJR19NQUNIX01YMjcKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGltZXIzX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gR1BUNF9CQVNFX0FERFIsCi0JCS5lbmQJPSBHUFQ0X0JBU0VfQUREUiArIDB4MTcsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ICAgPSBNWENfSU5UX0dQVDQsCi0JCS5lbmQgICAgID0gTVhDX0lOVF9HUFQ0LAotCQkuZmxhZ3MgICA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2dwdDMgPSB7Ci0JLm5hbWUgPSAiaW14X2dwdCIsCi0JLmlkID0gMywKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltZXIzX3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gdGltZXIzX3Jlc291cmNlcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGltZXI0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gR1BUNV9CQVNFX0FERFIsCi0JCS5lbmQJPSBHUFQ1X0JBU0VfQUREUiArIDB4MTcsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ICAgPSBNWENfSU5UX0dQVDUsCi0JCS5lbmQgICAgID0gTVhDX0lOVF9HUFQ1LAotCQkuZmxhZ3MgICA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2dwdDQgPSB7Ci0JLm5hbWUgPSAiaW14X2dwdCIsCi0JLmlkID0gNCwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltZXI0X3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gdGltZXI0X3Jlc291cmNlcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdGltZXI1X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gR1BUNl9CQVNFX0FERFIsCi0JCS5lbmQJPSBHUFQ2X0JBU0VfQUREUiArIDB4MTcsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ICAgPSBNWENfSU5UX0dQVDYsCi0JCS5lbmQgICAgID0gTVhDX0lOVF9HUFQ2LAotCQkuZmxhZ3MgICA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2dwdDUgPSB7Ci0JLm5hbWUgPSAiaW14X2dwdCIsCi0JLmlkID0gNSwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUodGltZXI1X3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gdGltZXI1X3Jlc291cmNlcywKLX07CitERUZJTkVfSU1YX0dQVF9ERVZJQ0UoMywgTVgyN19HUFQ0X0JBU0VfQUREUiwgTVgyN19JTlRfR1BUNCk7CitERUZJTkVfSU1YX0dQVF9ERVZJQ0UoNCwgTVgyN19HUFQ1X0JBU0VfQUREUiwgTVgyN19JTlRfR1BUNSk7CitERUZJTkVfSU1YX0dQVF9ERVZJQ0UoNSwgTVgyN19HUFQ2X0JBU0VfQUREUiwgTVgyN19JTlRfR1BUNik7CiAjZW5kaWYKIAogLyoKQEAgLTIyMCw5ICsxMTcsOSBAQAogICovCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y193ZHRfcmVzb3VyY2VzW10gPSB7CiAJewotCQkuc3RhcnQJPSBXRE9HX0JBU0VfQUREUiwKLQkJLmVuZAk9IFdET0dfQkFTRV9BRERSICsgMHgzMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJCS5zdGFydCA9IE1YMnhfV0RPR19CQVNFX0FERFIsCisJCS5lbmQgPSBNWDJ4X1dET0dfQkFTRV9BRERSICsgU1pfNEsgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogfTsKIApAQCAtMjM1LDggKzEzMiw4IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3cxX21hc3Rlcl9yZXNvdXJjZXNbXSA9IHsKIAl7Ci0JCS5zdGFydCA9IE9XSVJFX0JBU0VfQUREUiwKLQkJLmVuZCAgID0gT1dJUkVfQkFTRV9BRERSICsgU1pfNEsgLSAxLAorCQkuc3RhcnQgPSBNWDJ4X09XSVJFX0JBU0VfQUREUiwKKwkJLmVuZCA9IE1YMnhfT1dJUkVfQkFTRV9BRERSICsgU1pfNEsgLSAxLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAl9LAogfTsKQEAgLTI0OCwyNCArMTQ1LDMzIEBACiAJLnJlc291cmNlID0gbXhjX3cxX21hc3Rlcl9yZXNvdXJjZXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19uYW5kX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gTkZDX0JBU0VfQUREUiwKLQkJLmVuZAk9IE5GQ19CQVNFX0FERFIgKyAweGZmZiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQJPSBNWENfSU5UX05BTkRGQywKLQkJLmVuZAk9IE1YQ19JTlRfTkFOREZDLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKKyNkZWZpbmUgREVGSU5FX01YQ19OQU5EX0RFVklDRShwZngsIGJhc2VhZGRyLCBpcnEpCQkJXAorCXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGZ4ICMjIF9uYW5kX3Jlc291cmNlc1tdID0gewkJXAorCQl7CQkJCQkJCVwKKwkJCS5zdGFydCA9IGJhc2VhZGRyLAkJCQlcCisJCQkuZW5kID0gYmFzZWFkZHIgKyBTWl80SyAtIDEsCQkJXAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCQkJXAorCQl9LCB7CQkJCQkJCVwKKwkJCS5zdGFydCA9IGlycSwJCQkJCVwKKwkJCS5lbmQgPSBpcnEsCQkJCQlcCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwJCQlcCisJCX0sCQkJCQkJCVwKKwl9OwkJCQkJCQkJXAorCQkJCQkJCQkJXAorCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGZ4ICMjIF9uYW5kX2RldmljZSA9IHsJCQlcCisJCS5uYW1lID0gIm14Y19uYW5kIiwJCQkJCVwKKwkJLmlkID0gMCwJCQkJCQlcCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShwZnggIyMgX25hbmRfcmVzb3VyY2VzKSwJXAorCQkucmVzb3VyY2UgPSBwZnggIyMgX25hbmRfcmVzb3VyY2VzLAkJCVwKKwl9CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX25hbmRfZGV2aWNlID0gewotCS5uYW1lID0gIm14Y19uYW5kIiwKLQkuaWQgPSAwLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfbmFuZF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSA9IG14Y19uYW5kX3Jlc291cmNlcywKLX07CisjaWZkZWYgQ09ORklHX01BQ0hfTVgyMQorREVGSU5FX01YQ19OQU5EX0RFVklDRShpbXgyMSwgTVgyMV9ORkNfQkFTRV9BRERSLCBNWDIxX0lOVF9OQU5ERkMpOworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CitERUZJTkVfTVhDX05BTkRfREVWSUNFKGlteDI3LCBNWDI3X05GQ19CQVNFX0FERFIsIE1YMjdfSU5UX05BTkRGQyk7CisjZW5kaWYKIAogLyoKICAqIGxjZGM6CkBAIC0yNzUsMTIgKzE4MSwxMiBAQAogICovCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19mYltdID0gewogCXsKLQkJLnN0YXJ0ID0gTENEQ19CQVNFX0FERFIsCi0JCS5lbmQgICA9IExDRENfQkFTRV9BRERSICsgMHhGRkYsCisJCS5zdGFydCA9IE1YMnhfTENEQ19CQVNFX0FERFIsCisJCS5lbmQgPSBNWDJ4X0xDRENfQkFTRV9BRERSICsgU1pfNEsgLSAxLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAl9LCB7Ci0JCS5zdGFydCA9IE1YQ19JTlRfTENEQywKLQkJLmVuZCAgID0gTVhDX0lOVF9MQ0RDLAorCQkuc3RhcnQgPSBNWDJ4X0lOVF9MQ0RDLAorCQkuZW5kID0gTVgyeF9JTlRfTENEQywKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCiAJfQogfTsKQEAgLTI5MiwyMCArMTk4LDIwIEBACiAJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19mYiksCiAJLnJlc291cmNlID0gbXhjX2ZiLAogCS5kZXYgPSB7Ci0JCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4RkZGRkZGRkYsCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCiAJfSwKIH07CiAKICNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19mZWNfcmVzb3VyY2VzW10gPSB7CiAJewotCQkuc3RhcnQJPSBGRUNfQkFTRV9BRERSLAotCQkuZW5kCT0gRkVDX0JBU0VfQUREUiArIDB4ZmZmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwkJLnN0YXJ0ID0gTVgyN19GRUNfQkFTRV9BRERSLAorCQkuZW5kID0gTVgyN19GRUNfQkFTRV9BRERSICsgU1pfNEsgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAl9LCB7Ci0JCS5zdGFydAk9IE1YQ19JTlRfRkVDLAotCQkuZW5kCT0gTVhDX0lOVF9GRUMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQgPSBNWDI3X0lOVF9GRUMsCisJCS5lbmQgPSBNWDI3X0lOVF9GRUMsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwogCkBAIC0zMTcsNTUgKzIyMyw0MSBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19pMmNfMV9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IEkyQ19CQVNFX0FERFIsCi0JCS5lbmQJPSBJMkNfQkFTRV9BRERSICsgMHgwZmZmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydAk9IE1YQ19JTlRfSTJDLAotCQkuZW5kCT0gTVhDX0lOVF9JMkMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorI2RlZmluZSBERUZJTkVfSU1YX0kyQ19ERVZJQ0UobiwgYmFzZWFkZHIsIGlycSkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX2kyY19yZXNvdXJjZXMgIyMgbltdID0gewkJXAorCQl7CQkJCQkJCVwKKwkJCS5zdGFydCA9IGJhc2VhZGRyLAkJCQlcCisJCQkuZW5kID0gYmFzZWFkZHIgKyBTWl80SyAtIDEsCQkJXAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCQkJXAorCQl9LCB7CQkJCQkJCVwKKwkJCS5zdGFydCA9IGlycSwJCQkJCVwKKwkJCS5lbmQgPSBpcnEsCQkJCQlcCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwJCQlcCisJCX0JCQkJCQkJXAorCX07CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZSAjIyBuID0gewkJCVwKKwkJLm5hbWUgPSAiaW14LWkyYyIsCQkJCQlcCisJCS5pZCA9IG4sCQkJCQkJXAorCQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2kyY19yZXNvdXJjZXMgIyMgbiksCVwKKwkJLnJlc291cmNlID0gbXhjX2kyY19yZXNvdXJjZXMgIyMgbiwJCQlcCiAJfQotfTsKIAotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTAgPSB7Ci0JLm5hbWUgPSAiaW14LWkyYyIsCi0JLmlkID0gMCwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2kyY18xX3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gbXhjX2kyY18xX3Jlc291cmNlcywKLX07CitERUZJTkVfSU1YX0kyQ19ERVZJQ0UoMCwgTVgyeF9JMkNfQkFTRV9BRERSLCBNWDJ4X0lOVF9JMkMpOwogCiAjaWZkZWYgQ09ORklHX01BQ0hfTVgyNwotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfaTJjXzJfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBJMkMyX0JBU0VfQUREUiwKLQkJLmVuZAk9IEkyQzJfQkFTRV9BRERSICsgMHgwZmZmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydAk9IE1YQ19JTlRfSTJDMiwKLQkJLmVuZAk9IE1YQ19JTlRfSTJDMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfQotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTEgPSB7Ci0JLm5hbWUgPSAiaW14LWkyYyIsCi0JLmlkID0gMSwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUobXhjX2kyY18yX3Jlc291cmNlcyksCi0JLnJlc291cmNlID0gbXhjX2kyY18yX3Jlc291cmNlcywKLX07CitERUZJTkVfSU1YX0kyQ19ERVZJQ0UoMSwgTVgyN19JMkMyX0JBU0VfQUREUiwgTVgyN19JTlRfSTJDMik7CiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteGNfcHdtX3Jlc291cmNlc1tdID0gewogCXsKLQkJLnN0YXJ0CT0gUFdNX0JBU0VfQUREUiwKLQkJLmVuZAk9IFBXTV9CQVNFX0FERFIgKyAweDBmZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQgPSBNWDJ4X1BXTV9CQVNFX0FERFIsCisJCS5lbmQgPSBNWDJ4X1BXTV9CQVNFX0FERFIgKyBTWl80SyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCX0sIHsKLQkJLnN0YXJ0ICAgPSBNWENfSU5UX1BXTSwKLQkJLmVuZCAgICAgPSBNWENfSU5UX1BXTSwKLQkJLmZsYWdzICAgPSBJT1JFU09VUkNFX0lSUSwKKwkJLnN0YXJ0ID0gTVgyeF9JTlRfUFdNLAorCQkuZW5kID0gTVgyeF9JTlRfUFdNLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKIAl9CiB9OwogCkBAIC0zNzYsODEgKzI2OCw1MyBAQAogCS5yZXNvdXJjZSA9IG14Y19wd21fcmVzb3VyY2VzLAogfTsKIAotLyoKLSAqIFJlc291cmNlIGRlZmluaXRpb24gZm9yIHRoZSBNWEMgU0RIQwotICovCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19zZGhjMV9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydCA9IFNESEMxX0JBU0VfQUREUiwKLQkJLmVuZCAgID0gU0RIQzFfQkFTRV9BRERSICsgU1pfNEsgLSAxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCA9IE1YQ19JTlRfU0RIQzEsCi0JCS5lbmQgICA9IE1YQ19JTlRfU0RIQzEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0sIHsKLQkJLnN0YXJ0ICA9IERNQV9SRVFfU0RIQzEsCi0JCS5lbmQgICAgPSBETUFfUkVRX1NESEMxLAotCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9ETUEsCi0JfSwKLX07CisjZGVmaW5lIERFRklORV9NWENfTU1DX0RFVklDRShuLCBiYXNlYWRkciwgaXJxLCBkbWFyZXEpCQkJXAorCXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NkaGNfcmVzb3VyY2VzICMjIG5bXSA9IHsJCVwKKwkJewkJCQkJCQlcCisJCQkuc3RhcnQgPSBiYXNlYWRkciwJCQkJXAorCQkJLmVuZCA9IGJhc2VhZGRyICsgU1pfNEsgLSAxLAkJCVwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAkJCVwKKwkJfSwgewkJCQkJCQlcCisJCQkuc3RhcnQgPSBpcnEsCQkJCQlcCisJCQkuZW5kID0gaXJxLAkJCQkJXAorCQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCQkJXAorCQl9LCB7CQkJCQkJCVwKKwkJCS5zdGFydCA9IGRtYXJlcSwJCQkJXAorCQkJLmVuZCA9IGRtYXJlcSwJCQkJCVwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAkJCVwKKwkJfSwJCQkJCQkJXAorCX07CQkJCQkJCQlcCisJCQkJCQkJCQlcCisJc3RhdGljIHU2NCBteGNfc2RoYyAjIyBuICMjIF9kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsJXAorCQkJCQkJCQkJXAorCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NkaGNfZGV2aWNlICMjIG4gPSB7CQkJXAorCQkubmFtZSA9ICJteGMtbW1jIiwJCQkJCVwKKwkJLmlkID0gbiwJCQkJCQlcCisJCS5kZXYgPSB7CQkJCQkJXAorCQkJLmRtYV9tYXNrID0gJm14Y19zZGhjICMjIG4gIyMgX2RtYW1hc2ssCQlcCisJCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAkJXAorCQl9LAkJCQkJCQlcCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShteGNfc2RoY19yZXNvdXJjZXMgIyMgbiksCVwKKwkJLnJlc291cmNlID0gbXhjX3NkaGNfcmVzb3VyY2VzICMjIG4sCQlcCisJfQogCi1zdGF0aWMgdTY0IG14Y19zZGhjMV9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zZGhjX2RldmljZTAgPSB7Ci0gICAgICAgLm5hbWUgICAgICAgICAgID0gIm14Yy1tbWMiLAotICAgICAgIC5pZCAgICAgICAgICAgICA9IDAsCi0gICAgICAgLmRldiAgICAgICAgICAgID0gewotICAgICAgICAgICAgICAgLmRtYV9tYXNrID0gJm14Y19zZGhjMV9kbWFtYXNrLAotICAgICAgICAgICAgICAgLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKLSAgICAgICB9LAotICAgICAgIC5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUobXhjX3NkaGMxX3Jlc291cmNlcyksCi0gICAgICAgLnJlc291cmNlICAgICAgID0gbXhjX3NkaGMxX3Jlc291cmNlcywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3NkaGMyX3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0ID0gU0RIQzJfQkFTRV9BRERSLAotCQkuZW5kICAgPSBTREhDMl9CQVNFX0FERFIgKyBTWl80SyAtIDEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0ID0gTVhDX0lOVF9TREhDMiwKLQkJLmVuZCAgID0gTVhDX0lOVF9TREhDMiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCi0JfSwgewotCQkuc3RhcnQgID0gRE1BX1JFUV9TREhDMiwKLQkJLmVuZCAgICA9IERNQV9SRVFfU0RIQzIsCi0JCS5mbGFncyAgPSBJT1JFU09VUkNFX0RNQSwKLQl9LAotfTsKLQotc3RhdGljIHU2NCBteGNfc2RoYzJfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc2RoY19kZXZpY2UxID0gewotICAgICAgIC5uYW1lICAgICAgICAgICA9ICJteGMtbW1jIiwKLSAgICAgICAuaWQgICAgICAgICAgICAgPSAxLAotICAgICAgIC5kZXYgICAgICAgICAgICA9IHsKLSAgICAgICAgICAgICAgIC5kbWFfbWFzayA9ICZteGNfc2RoYzJfZG1hbWFzaywKLSAgICAgICAgICAgICAgIC5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCi0gICAgICAgfSwKLSAgICAgICAubnVtX3Jlc291cmNlcyAgPSBBUlJBWV9TSVpFKG14Y19zZGhjMl9yZXNvdXJjZXMpLAotICAgICAgIC5yZXNvdXJjZSAgICAgICA9IG14Y19zZGhjMl9yZXNvdXJjZXMsCi19OworREVGSU5FX01YQ19NTUNfREVWSUNFKDAsIE1YMnhfU0RIQzFfQkFTRV9BRERSLCBNWDJ4X0lOVF9TREhDMSwgTVgyeF9ETUFfUkVRX1NESEMxKTsKK0RFRklORV9NWENfTU1DX0RFVklDRSgxLCBNWDJ4X1NESEMyX0JBU0VfQUREUiwgTVgyeF9JTlRfU0RIQzIsIE1YMnhfRE1BX1JFUV9TREhDMik7CiAKICNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG90Z19yZXNvdXJjZXNbXSA9IHsKIAl7Ci0JCS5zdGFydAk9IE9UR19CQVNFX0FERFIsCi0JCS5lbmQJPSBPVEdfQkFTRV9BRERSICsgMHgxZmYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCQkuc3RhcnQgPSBNWDI3X1VTQk9UR19CQVNFX0FERFIsCisJCS5lbmQgPSBNWDI3X1VTQk9UR19CQVNFX0FERFIgKyAweDFmZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwgewotCQkuc3RhcnQJPSBNWENfSU5UX1VTQjMsCi0JCS5lbmQJPSBNWENfSU5UX1VTQjMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCQkuc3RhcnQgPSBNWDI3X0lOVF9VU0IzLAorCQkuZW5kID0gTVgyN19JTlRfVVNCMywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CiAKLXN0YXRpYyB1NjQgb3RnX2RtYW1hc2sgPSAweGZmZmZmZmZmVUw7CitzdGF0aWMgdTY0IG90Z19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAogLyogT1RHIGdhZGdldCBkZXZpY2UgKi8KIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX290Z191ZGNfZGV2aWNlID0gewpAQCAtNDU4LDcgKzMyMiw3IEBACiAJLmlkCQk9IC0xLAogCS5kZXYJCT0gewogCQkuZG1hX21hc2sJCT0gJm90Z19kbWFtYXNrLAotCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmVUwsCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCiAJfSwKIAkucmVzb3VyY2UJPSBvdGdfcmVzb3VyY2VzLAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvdGdfcmVzb3VyY2VzKSwKQEAgLTQ2OSw3ICszMzMsNyBAQAogCS5uYW1lID0gIm14Yy1laGNpIiwKIAkuaWQgPSAwLAogCS5kZXYgPSB7Ci0JCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCiAJCS5kbWFfbWFzayA9ICZvdGdfZG1hbWFzaywKIAl9LAogCS5yZXNvdXJjZSA9IG90Z19yZXNvdXJjZXMsCkBAIC00NzgsMTYgKzM0MiwxNiBAQAogCiAvKiBVU0IgaG9zdCAxICovCiAKLXN0YXRpYyB1NjQgdXNiaDFfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKK3N0YXRpYyB1NjQgdXNiaDFfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3VzYmgxX3Jlc291cmNlc1tdID0gewogCXsKLQkJLnN0YXJ0ID0gT1RHX0JBU0VfQUREUiArIDB4MjAwLAotCQkuZW5kID0gT1RHX0JBU0VfQUREUiArIDB4M2ZmLAorCQkuc3RhcnQgPSBNWDI3X1VTQk9UR19CQVNFX0FERFIgKyAweDIwMCwKKwkJLmVuZCA9IE1YMjdfVVNCT1RHX0JBU0VfQUREUiArIDB4M2ZmLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAl9LCB7Ci0JCS5zdGFydCA9IE1YQ19JTlRfVVNCMSwKLQkJLmVuZCA9IE1YQ19JTlRfVVNCMSwKKwkJLnN0YXJ0ID0gTVgyN19JTlRfVVNCMSwKKwkJLmVuZCA9IE1YMjdfSU5UX1VTQjEsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNDk2LDcgKzM2MCw3IEBACiAJLm5hbWUgPSAibXhjLWVoY2kiLAogCS5pZCA9IDEsCiAJLmRldiA9IHsKLQkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKIAkJLmRtYV9tYXNrID0gJnVzYmgxX2RtYW1hc2ssCiAJfSwKIAkucmVzb3VyY2UgPSBteGNfdXNiaDFfcmVzb3VyY2VzLApAQCAtNTA0LDE2ICszNjgsMTYgQEAKIH07CiAKIC8qIFVTQiBob3N0IDIgKi8KLXN0YXRpYyB1NjQgdXNiaDJfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKK3N0YXRpYyB1NjQgdXNiaDJfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX3VzYmgyX3Jlc291cmNlc1tdID0gewogCXsKLQkJLnN0YXJ0ID0gT1RHX0JBU0VfQUREUiArIDB4NDAwLAotCQkuZW5kID0gT1RHX0JBU0VfQUREUiArIDB4NWZmLAorCQkuc3RhcnQgPSBNWDI3X1VTQk9UR19CQVNFX0FERFIgKyAweDQwMCwKKwkJLmVuZCA9IE1YMjdfVVNCT1RHX0JBU0VfQUREUiArIDB4NWZmLAogCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKIAl9LCB7Ci0JCS5zdGFydCA9IE1YQ19JTlRfVVNCMiwKLQkJLmVuZCA9IE1YQ19JTlRfVVNCMiwKKwkJLnN0YXJ0ID0gTVgyN19JTlRfVVNCMiwKKwkJLmVuZCA9IE1YMjdfSU5UX1VTQjIsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNTIyLDcgKzM4Niw3IEBACiAJLm5hbWUgPSAibXhjLWVoY2kiLAogCS5pZCA9IDIsCiAJLmRldiA9IHsKLQkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwkJLmNvaGVyZW50X2RtYV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKSwKIAkJLmRtYV9tYXNrID0gJnVzYmgyX2RtYW1hc2ssCiAJfSwKIAkucmVzb3VyY2UgPSBteGNfdXNiaDJfcmVzb3VyY2VzLApAQCAtNTMwLDExNSArMzk0LDExNSBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9zc2lfcmVzb3VyY2VzMFtdID0gewotCXsKLQkJLnN0YXJ0CT0gU1NJMV9CQVNFX0FERFIsCi0JCS5lbmQJPSBTU0kxX0JBU0VfQUREUiArIDB4NkYsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0CT0gTVhDX0lOVF9TU0kxLAotCQkuZW5kCT0gTVhDX0lOVF9TU0kxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LCB7Ci0JCS5uYW1lCT0gInR4MCIsCi0JCS5zdGFydAk9IERNQV9SRVFfU1NJMV9UWDAsCi0JCS5lbmQJPSBETUFfUkVRX1NTSTFfVFgwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKLQl9LCB7Ci0JCS5uYW1lCT0gInJ4MCIsCi0JCS5zdGFydAk9IERNQV9SRVFfU1NJMV9SWDAsCi0JCS5lbmQJPSBETUFfUkVRX1NTSTFfUlgwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKLQl9LCB7Ci0JCS5uYW1lCT0gInR4MSIsCi0JCS5zdGFydAk9IERNQV9SRVFfU1NJMV9UWDEsCi0JCS5lbmQJPSBETUFfUkVRX1NTSTFfVFgxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKLQl9LCB7Ci0JCS5uYW1lCT0gInJ4MSIsCi0JCS5zdGFydAk9IERNQV9SRVFfU1NJMV9SWDEsCi0JCS5lbmQJPSBETUFfUkVRX1NTSTFfUlgxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0RNQSwKLQl9LAotfTsKKyNkZWZpbmUgREVGSU5FX0lNWF9TU0lfRE1BUkVTKF9uYW1lLCBzc2luLCBzdWZmaXgpCQkJXAorCXsJCQkJCQkJCVwKKwkJLm5hbWUgPSBfbmFtZSwJCQkJCQlcCisJCS5zdGFydCA9IE1YMnhfRE1BX1JFUV9TU0kgIyMgc3NpbiAjIyBfICMjIHN1ZmZpeCwJXAorCQkuZW5kID0gTVgyeF9ETUFfUkVRX1NTSSAjIyBzc2luICMjIF8gIyMgc3VmZml4LAkJXAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwJCQkJXAorCX0KIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpbXhfc3NpX3Jlc291cmNlczFbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IFNTSTJfQkFTRV9BRERSLAotCQkuZW5kCT0gU1NJMl9CQVNFX0FERFIgKyAweDZGLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydAk9IE1YQ19JTlRfU1NJMiwKLQkJLmVuZAk9IE1YQ19JTlRfU1NJMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwgewotCQkubmFtZQk9ICJ0eDAiLAotCQkuc3RhcnQJPSBETUFfUkVRX1NTSTJfVFgwLAotCQkuZW5kCT0gRE1BX1JFUV9TU0kyX1RYMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCi0JfSwgewotCQkubmFtZQk9ICJyeDAiLAotCQkuc3RhcnQJPSBETUFfUkVRX1NTSTJfUlgwLAotCQkuZW5kCT0gRE1BX1JFUV9TU0kyX1JYMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCi0JfSwgewotCQkubmFtZQk9ICJ0eDEiLAotCQkuc3RhcnQJPSBETUFfUkVRX1NTSTJfVFgxLAotCQkuZW5kCT0gRE1BX1JFUV9TU0kyX1RYMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCi0JfSwgewotCQkubmFtZQk9ICJyeDEiLAotCQkuc3RhcnQJPSBETUFfUkVRX1NTSTJfUlgxLAotCQkuZW5kCT0gRE1BX1JFUV9TU0kyX1JYMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9ETUEsCi0JfSwKLX07CisjZGVmaW5lIERFRklORV9JTVhfU1NJX0RFVklDRShuLCBzc2luLCBiYXNlYWRkciwgaXJxKQkJCVwKKwlzdGF0aWMgc3RydWN0IHJlc291cmNlIGlteF9zc2lfcmVzb3VyY2VzICMjIG5bXSA9IHsJCVwKKwkJewkJCQkJCQlcCisJCQkuc3RhcnQgPSBNWDJ4X1NTSSAjIyBzc2luICMjIF9CQVNFX0FERFIsCVwKKwkJCS5lbmQgPSBNWDJ4X1NTSSAjIyBzc2luICMjIF9CQVNFX0FERFIgKyAweDZmLAlcCisJCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwJCQlcCisJCX0sIHsJCQkJCQkJXAorCQkJLnN0YXJ0ID0gTVgyeF9JTlRfU1NJMSwJCQkJXAorCQkJLmVuZCA9IE1YMnhfSU5UX1NTSTEsCQkJCVwKKwkJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAkJCVwKKwkJfSwJCQkJCQkJXAorCQlERUZJTkVfSU1YX1NTSV9ETUFSRVMoInR4MCIsIHNzaW4sIFRYMCksCQlcCisJCURFRklORV9JTVhfU1NJX0RNQVJFUygicngwIiwgc3NpbiwgUlgwKSwJCVwKKwkJREVGSU5FX0lNWF9TU0lfRE1BUkVTKCJ0eDEiLCBzc2luLCBUWDEpLAkJXAorCQlERUZJTkVfSU1YX1NTSV9ETUFSRVMoInJ4MSIsIHNzaW4sIFJYMSksCQlcCisJfTsJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zc2lfZGV2aWNlICMjIG4gPSB7CQkJXAorCQkubmFtZSA9ICJpbXgtc3NpIiwJCQkJCVwKKwkJLmlkID0gbiwJCQkJCQlcCisJCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShpbXhfc3NpX3Jlc291cmNlcyAjIyBuKSwJXAorCQkucmVzb3VyY2UgPSBpbXhfc3NpX3Jlc291cmNlcyAjIyBuLAkJCVwKKwl9CiAKLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14X3NzaV9kZXZpY2UwID0gewotCS5uYW1lID0gImlteC1zc2kiLAotCS5pZCA9IDAsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGlteF9zc2lfcmVzb3VyY2VzMCksCi0JLnJlc291cmNlID0gaW14X3NzaV9yZXNvdXJjZXMwLAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbXhfc3NpX2RldmljZTEgPSB7Ci0JLm5hbWUgPSAiaW14LXNzaSIsCi0JLmlkID0gMSwKLQkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoaW14X3NzaV9yZXNvdXJjZXMxKSwKLQkucmVzb3VyY2UgPSBpbXhfc3NpX3Jlc291cmNlczEsCi19OworREVGSU5FX0lNWF9TU0lfREVWSUNFKDAsIDEsIE1YMnhfU1NJMV9CQVNFX0FERFIsIE1YMnhfSU5UX1NTSTEpOworREVGSU5FX0lNWF9TU0lfREVWSUNFKDEsIDIsIE1YMnhfU1NJMV9CQVNFX0FERFIsIE1YMnhfSU5UX1NTSTEpOwogCiAvKiBHUElPIHBvcnQgZGVzY3JpcHRpb24gKi8KLXN0YXRpYyBzdHJ1Y3QgbXhjX2dwaW9fcG9ydCBpbXhfZ3Bpb19wb3J0c1tdID0gewotCXsKLQkJLmNoaXAubGFiZWwgPSAiZ3Bpby0wIiwKLQkJLmlycSA9IE1YQ19JTlRfR1BJTywKLQkJLmJhc2UgPSBJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSKSwKLQkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJULAotCX0sIHsKLQkJLmNoaXAubGFiZWwgPSAiZ3Bpby0xIiwKLQkJLmJhc2UgPSBJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSICsgMHgxMDApLAotCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAzMiwKLQl9LCB7Ci0JCS5jaGlwLmxhYmVsID0gImdwaW8tMiIsCi0JCS5iYXNlID0gSU9fQUREUkVTUyhHUElPX0JBU0VfQUREUiArIDB4MjAwKSwKLQkJLnZpcnR1YWxfaXJxX3N0YXJ0ID0gTVhDX0dQSU9fSVJRX1NUQVJUICsgNjQsCi0JfSwgewotCQkuY2hpcC5sYWJlbCA9ICJncGlvLTMiLAotCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJT19CQVNFX0FERFIgKyAweDMwMCksCi0JCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDk2LAotCX0sIHsKLQkJLmNoaXAubGFiZWwgPSAiZ3Bpby00IiwKLQkJLmJhc2UgPSBJT19BRERSRVNTKEdQSU9fQkFTRV9BRERSICsgMHg0MDApLAotCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyAxMjgsCi0JfSwgewotCQkuY2hpcC5sYWJlbCA9ICJncGlvLTUiLAotCQkuYmFzZSA9IElPX0FERFJFU1MoR1BJT19CQVNFX0FERFIgKyAweDUwMCksCi0JCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIDE2MCwKKyNkZWZpbmUgREVGSU5FX01YQ19HUElPX1BPUlRfSVJRKFNPQywgbiwgX2lycSkJCQkJXAorCXsJCQkJCQkJCVwKKwkJLmNoaXAubGFiZWwgPSAiZ3Bpby0iICNuLAkJCQlcCisJCS5pcnEgPSBfaXJxLAkJCQkJCVwKKwkJLmJhc2UgPSBTT0MgIyMgX0lPX0FERFJFU1MoTVgyeF9HUElPX0JBU0VfQUREUiArCVwKKwkJCQluICogMHgxMDApLAkJCQlcCisJCS52aXJ0dWFsX2lycV9zdGFydCA9IE1YQ19HUElPX0lSUV9TVEFSVCArIG4gKiAzMiwJXAogCX0KLX07CisKKyNkZWZpbmUgREVGSU5FX01YQ19HUElPX1BPUlQoU09DLCBuKQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJLmNoaXAubGFiZWwgPSAiZ3Bpby0iICNuLAkJCQlcCisJCS5iYXNlID0gU09DICMjIF9JT19BRERSRVNTKE1YMnhfR1BJT19CQVNFX0FERFIgKwlcCisJCQkJbiAqIDB4MTAwKSwJCQkJXAorCQkudmlydHVhbF9pcnFfc3RhcnQgPSBNWENfR1BJT19JUlFfU1RBUlQgKyBuICogMzIsCVwKKwl9CisKKyNkZWZpbmUgREVGSU5FX01YQ19HUElPX1BPUlRTKFNPQywgcGZ4KQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgbXhjX2dwaW9fcG9ydCBwZnggIyMgX2dwaW9fcG9ydHNbXSA9IHsJCVwKKwkJREVGSU5FX01YQ19HUElPX1BPUlRfSVJRKFNPQywgMCwgU09DICMjIF9JTlRfR1BJTyksCVwKKwkJREVGSU5FX01YQ19HUElPX1BPUlQoU09DLCAxKSwJCQkJXAorCQlERUZJTkVfTVhDX0dQSU9fUE9SVChTT0MsIDIpLAkJCQlcCisJCURFRklORV9NWENfR1BJT19QT1JUKFNPQywgMyksCQkJCVwKKwkJREVGSU5FX01YQ19HUElPX1BPUlQoU09DLCA0KSwJCQkJXAorCQlERUZJTkVfTVhDX0dQSU9fUE9SVChTT0MsIDUpLAkJCQlcCisJfQorCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyMQorREVGSU5FX01YQ19HUElPX1BPUlRTKE1YMjEsIGlteDIxKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNworREVGSU5FX01YQ19HUElPX1BPUlRTKE1YMjcsIGlteDI3KTsKKyNlbmRpZgogCiBpbnQgX19pbml0IG14Y19yZWdpc3Rlcl9ncGlvcyh2b2lkKQogewotCXJldHVybiBteGNfZ3Bpb19pbml0KGlteF9ncGlvX3BvcnRzLCBBUlJBWV9TSVpFKGlteF9ncGlvX3BvcnRzKSk7CisjaWZkZWYgQ09ORklHX01BQ0hfTVgyMQorCWlmIChjcHVfaXNfbXgyMSgpKQorCQlyZXR1cm4gbXhjX2dwaW9faW5pdChpbXgyMV9ncGlvX3BvcnRzLCBBUlJBWV9TSVpFKGlteDIxX2dwaW9fcG9ydHMpKTsKKwllbHNlCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CisJaWYgKGNwdV9pc19teDI3KCkpCisJCXJldHVybiBteGNfZ3Bpb19pbml0KGlteDI3X2dwaW9fcG9ydHMsIEFSUkFZX1NJWkUoaW14MjdfZ3Bpb19wb3J0cykpOworCWVsc2UKKyNlbmRpZgorCQlyZXR1cm4gMDsKIH0KKworI2lmZGVmIENPTkZJR19NQUNIX01YMjEKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXgyMV91c2JoY19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IE1YMjFfQkFTRV9BRERSLAorCQkuZW5kCT0gTVgyMV9CQVNFX0FERFIgKyAweDFGRkYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJCT0gTVgyMV9JTlRfVVNCSE9TVCwKKwkJLmVuZAkJPSBNWDIxX0lOVF9VU0JIT1NULAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgyMV91c2JoY19kZXZpY2UgPSB7CisJLm5hbWUJCT0gImlteDIxLWhjZCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5kbWFfbWFzayA9ICZteDIxX3VzYmhjX2RldmljZS5kZXYuY29oZXJlbnRfZG1hX21hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IERNQV9CSVRfTUFTSygzMiksCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXgyMV91c2JoY19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG14MjFfdXNiaGNfcmVzb3VyY2VzLAorfTsKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLW14Mi9kZXZpY2VzLmgKaW5kZXggOTczMDZhYS4uODRlZDUxMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvZGV2aWNlcy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL2RldmljZXMuaApAQCAtMSw4ICsxLDEwIEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZ3B0MTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19ncHQyOworI2lmZGVmIENPTkZJR19NQUNIX01YMjcKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19ncHQzOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2dwdDQ7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZ3B0NTsKKyNlbmRpZgogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3dkdDsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTA7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UxOwpAQCAtMTEsMTIgKzEzLDE5IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2U0OwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlNTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y193MV9tYXN0ZXJfZGV2aWNlOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX25hbmRfZGV2aWNlOworI2lmZGVmIENPTkZJR19NQUNIX01YMjEKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteDIxX25hbmRfZGV2aWNlOworI2VuZGlmCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW14MjdfbmFuZF9kZXZpY2U7CisjZW5kaWYKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19mYl9kZXZpY2U7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZmVjX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19wd21fZGV2aWNlOwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX2kyY19kZXZpY2UwOworI2lmZGVmIENPTkZJR19NQUNIX01YMjcKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19pMmNfZGV2aWNlMTsKKyNlbmRpZgogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NkaGNfZGV2aWNlMDsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19zZGhjX2RldmljZTE7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfb3RnX3VkY19kZXZpY2U7CkBAIC0yNSw2ICszNCw5IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdXNiaDI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTA7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfc3BpX2RldmljZTE7CisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNwogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3NwaV9kZXZpY2UyOworI2VuZGlmCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDIxX3VzYmhjX2RldmljZTsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zc2lfZGV2aWNlMDsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlteF9zc2lfZGV2aWNlMTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2V1a3JlYV9jcHVpbXgyNy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvZXVrcmVhX2NwdWlteDI3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiMTg3NjAuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvZXVrcmVhX2NwdWlteDI3LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBFcmljIEJlbmFyZCAtIGVyaWNAZXVrcmVhLmNvbQotICoKLSAqIEJhc2VkIG9uIHBjbTAzOC5jIHdoaWNoIGlzIDoKLSAqIENvcHlyaWdodCAyMDA3IFJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4sIFBlbmd1dHJvbml4Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSnVlcmdlbiBCZWlzZXJ0IChrZXJuZWxAcGVuZ3V0cm9uaXguZGUpCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCi0gKiBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BsYXQtcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSA8bWFjaC9ib2FyZC1ldWtyZWFfY3B1aW14MjcuaD4KLSNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2kyYy5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgotCi0jaW5jbHVkZSAiZGV2aWNlcy5oIgotCi1zdGF0aWMgaW50IGV1a3JlYV9jcHVpbXgyN19waW5zW10gPSB7Ci0JLyogVUFSVDEgKi8KLQlQRTEyX1BGX1VBUlQxX1RYRCwKLQlQRTEzX1BGX1VBUlQxX1JYRCwKLQlQRTE0X1BGX1VBUlQxX0NUUywKLQlQRTE1X1BGX1VBUlQxX1JUUywKLQkvKiBVQVJUNCAqLwotCVBCMjZfQUZfVUFSVDRfUlRTLAotCVBCMjhfQUZfVUFSVDRfVFhELAotCVBCMjlfQUZfVUFSVDRfQ1RTLAotCVBCMzFfQUZfVUFSVDRfUlhELAotCS8qIEZFQyAqLwotCVBEMF9BSU5fRkVDX1RYRDAsCi0JUEQxX0FJTl9GRUNfVFhEMSwKLQlQRDJfQUlOX0ZFQ19UWEQyLAotCVBEM19BSU5fRkVDX1RYRDMsCi0JUEQ0X0FPVVRfRkVDX1JYX0VSLAotCVBENV9BT1VUX0ZFQ19SWEQxLAotCVBENl9BT1VUX0ZFQ19SWEQyLAotCVBEN19BT1VUX0ZFQ19SWEQzLAotCVBEOF9BRl9GRUNfTURJTywKLQlQRDlfQUlOX0ZFQ19NREMsCi0JUEQxMF9BT1VUX0ZFQ19DUlMsCi0JUEQxMV9BT1VUX0ZFQ19UWF9DTEssCi0JUEQxMl9BT1VUX0ZFQ19SWEQwLAotCVBEMTNfQU9VVF9GRUNfUlhfRFYsCi0JUEQxNF9BT1VUX0ZFQ19SWF9DTEssCi0JUEQxNV9BT1VUX0ZFQ19DT0wsCi0JUEQxNl9BSU5fRkVDX1RYX0VSLAotCVBGMjNfQUlOX0ZFQ19UWF9FTiwKLQkvKiBJMkMxICovCi0JUEQxN19QRl9JMkNfREFUQSwKLQlQRDE4X1BGX0kyQ19DTEssCi0JLyogU0RIQzIgKi8KLQlQQjRfUEZfU0QyX0QwLAotCVBCNV9QRl9TRDJfRDEsCi0JUEI2X1BGX1NEMl9EMiwKLQlQQjdfUEZfU0QyX0QzLAotCVBCOF9QRl9TRDJfQ01ELAotCVBCOV9QRl9TRDJfQ0xLLAotI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MF9NT0RVTEUpCi0JLyogUXVhZCBVQVJUJ3MgSVJRICovCi0JR1BJT19QT1JURCB8IDIyIHwgR1BJT19HUElPIHwgR1BJT19JTiwKLQlHUElPX1BPUlREIHwgMjMgfCBHUElPX0dQSU8gfCBHUElPX0lOLAotCUdQSU9fUE9SVEQgfCAyNyB8IEdQSU9fR1BJTyB8IEdQSU9fSU4sCi0JR1BJT19QT1JURCB8IDMwIHwgR1BJT19HUElPIHwgR1BJT19JTiwKLSNlbmRpZgotfTsKLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZXVrcmVhX2NwdWlteDI3X2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZXVrcmVhX2NwdWlteDI3X2ZsYXNoX3Jlc291cmNlID0gewotCS5zdGFydCA9IDB4YzAwMDAwMDAsCi0JLmVuZCAgID0gMHhjM2ZmZmZmZiwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV1a3JlYV9jcHVpbXgyN19ub3JfbXRkX2RldmljZSA9IHsKLQkubmFtZSA9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQgPSAwLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmV1a3JlYV9jcHVpbXgyN19mbGFzaF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZldWtyZWFfY3B1aW14MjdfZmxhc2hfcmVzb3VyY2UsCi19OwotCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhW10gPSB7Ci0JewotCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotCX0sIHsKLQkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhIGV1a3JlYV9jcHVpbXgyN19uYW5kX2JvYXJkX2luZm8gPSB7Ci0JLndpZHRoID0gMSwKLQkuaHdfZWNjID0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmZXVrcmVhX2NwdWlteDI3X25vcl9tdGRfZGV2aWNlLAotCSZteGNfZmVjX2RldmljZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgZXVrcmVhX2NwdWlteDI3X2kyY18xX2RhdGEgPSB7Ci0JLmJpdHJhdGUgPSAxMDAwMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGV1a3JlYV9jcHVpbXgyN19pMmNfZGV2aWNlc1tdID0gewotCXsKLQkJSTJDX0JPQVJEX0lORk8oInBjZjg1NjMiLCAweDUxKSwKLQl9LAotfTsKLQotI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHNlcmlhbF9wbGF0Zm9ybV9kYXRhW10gPSB7Ci0JewotCQkubWFwYmFzZSA9ICh1bnNpZ25lZCBsb25nKShDUzNfQkFTRV9BRERSICsgMHgyMDAwMDApLAotCQkuaXJxID0gSVJRX0dQSU9CKDIzKSwKLQkJLnVhcnRjbGsgPSAxNDc0NTYwMCwKLQkJLnJlZ3NoaWZ0ID0gMSwKLQkJLmlvdHlwZSA9IFVQSU9fTUVNLAotCQkuZmxhZ3MgPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QgfCBVUEZfSU9SRU1BUCwKLQl9LCB7Ci0JCS5tYXBiYXNlID0gKHVuc2lnbmVkIGxvbmcpKENTM19CQVNFX0FERFIgKyAweDQwMDAwMCksCi0JCS5pcnEgPSBJUlFfR1BJT0IoMjIpLAotCQkudWFydGNsayA9IDE0NzQ1NjAwLAotCQkucmVnc2hpZnQgPSAxLAotCQkuaW90eXBlID0gVVBJT19NRU0sCi0JCS5mbGFncyA9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCB8IFVQRl9JT1JFTUFQLAotCX0sIHsKLQkJLm1hcGJhc2UgPSAodW5zaWduZWQgbG9uZykoQ1MzX0JBU0VfQUREUiArIDB4ODAwMDAwKSwKLQkJLmlycSA9IElSUV9HUElPQigyNyksCi0JCS51YXJ0Y2xrID0gMTQ3NDU2MDAsCi0JCS5yZWdzaGlmdCA9IDEsCi0JCS5pb3R5cGUgPSBVUElPX01FTSwKLQkJLmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwgVVBGX0lPUkVNQVAsCi0JfSwgewotCQkubWFwYmFzZSA9ICh1bnNpZ25lZCBsb25nKShDUzNfQkFTRV9BRERSICsgMHgxMDAwMDAwKSwKLQkJLmlycSA9IElSUV9HUElPQigzMCksCi0JCS51YXJ0Y2xrID0gMTQ3NDU2MDAsCi0JCS5yZWdzaGlmdCA9IDEsCi0JCS5pb3R5cGUgPSBVUElPX01FTSwKLQkJLmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwgVVBGX0lPUkVNQVAsCi0JfSwgewotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNlcmlhbF9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAic2VyaWFsODI1MCIsCi0JLmlkID0gMCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhLAotCX0sCi19OwotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIF9faW5pdCBldWtyZWFfY3B1aW14MjdfaW5pdCh2b2lkKQotewotCW14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMoZXVrcmVhX2NwdWlteDI3X3BpbnMsCi0JCUFSUkFZX1NJWkUoZXVrcmVhX2NwdWlteDI3X3BpbnMpLCAiQ1BVSU1YMjciKTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhWzBdKTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19uYW5kX2RldmljZSwgJmV1a3JlYV9jcHVpbXgyN19uYW5kX2JvYXJkX2luZm8pOwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZXVrcmVhX2NwdWlteDI3X2kyY19kZXZpY2VzLAotCQkJCUFSUkFZX1NJWkUoZXVrcmVhX2NwdWlteDI3X2kyY19kZXZpY2VzKSk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTAsICZldWtyZWFfY3B1aW14MjdfaTJjXzFfZGF0YSk7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKLQotI2lmIGRlZmluZWQoQ09ORklHX01BQ0hfRVVLUkVBX0NQVUlNWDI3X1VTRVNESEMyKQotCS8qIFNESEMyIGNhbiBiZSB1c2VkIGZvciBXaWZpICovCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NkaGNfZGV2aWNlMSwgTlVMTCk7Ci0JLyogaW4gd2hpY2ggY2FzZSBVQVJUNCBpcyBhbHNvIHVzZWQgZm9yIEJsdWV0b290aCAqLwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTMsICZ1YXJ0X3BkYXRhWzFdKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTApIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwX01PRFVMRSkKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNlcmlhbF9kZXZpY2UpOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUFDSF9FVUtSRUFfTUJJTVgyN19CQVNFQk9BUkQKLQlldWtyZWFfbWJpbXgyN19iYXNlYm9hcmRfaW5pdCgpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBldWtyZWFfY3B1aW14MjdfdGltZXJfaW5pdCh2b2lkKQotewotCW14MjdfY2xvY2tzX2luaXQoMjYwMDAwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c190aW1lciBldWtyZWFfY3B1aW14MjdfdGltZXIgPSB7Ci0JLmluaXQgPSBldWtyZWFfY3B1aW14MjdfdGltZXJfaW5pdCwKLX07Ci0KLU1BQ0hJTkVfU1RBUlQoQ1BVSU1YMjcsICJFVUtSRUEgQ1BVSU1YMjciKQotCS5waHlzX2lvICAgICAgICA9IEFJUElfQkFTRV9BRERSLAotCS5pb19wZ19vZmZzdCAgICA9ICgoQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbyAgICAgICAgID0gbXgyN19tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXgyN19pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lICAgPSBldWtyZWFfY3B1aW14MjdfaW5pdCwKLQkudGltZXIgICAgICAgICAgPSAmZXVrcmVhX2NwdWlteDI3X3RpbWVyLAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL2V1a3JlYV9tYmlteDI3LWJhc2Vib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1teDIvZXVrcmVhX21iaW14MjctYmFzZWJvYXJkLmMKaW5kZXggNzM4MmI2ZC4uZjNiMTY5ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvZXVrcmVhX21iaW14MjctYmFzZWJvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvZXVrcmVhX21iaW14MjctYmFzZWJvYXJkLmMKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjcuaD4KICNpbmNsdWRlIDxtYWNoL2lteGZiLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9nZW5lcmljLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9nZW5lcmljLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlOGY3NTkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvZ2VuZXJpYy5jCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIGdlbmVyaWMuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBKdWVyZ2VuIEJlaXNlcnQgKGtlcm5lbEBwZW5ndXRyb25peC5kZSkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKLSAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotLyogTVgyNyBtZW1vcnkgbWFwIGRlZmluaXRpb24gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXhjX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCS8qCi0JICogdGhpcyBmaXhlZCBtYXBwaW5nIGNvdmVyczoKLQkgKiAtIEFJUEkxCi0JICogLSBBSVBJMgotCSAqIC0gQUlUQwotCSAqIC0gUk9NIFBhdGNoCi0JICogLSBhbmQgc29tZSByZXNlcnZlZCBzcGFjZQotCSAqLwotCXsKLQkJLnZpcnR1YWwgPSBBSVBJX0JBU0VfQUREUl9WSVJULAotCQkucGZuID0gX19waHlzX3RvX3BmbihBSVBJX0JBU0VfQUREUiksCi0JCS5sZW5ndGggPSBBSVBJX1NJWkUsCi0JCS50eXBlID0gTVRfREVWSUNFCi0JfSwKLQkvKgotCSAqIHRoaXMgZml4ZWQgbWFwcGluZyBjb3ZlcnM6Ci0JICogLSBDU0kKLQkgKiAtIEFUQQotCSAqLwotCXsKLQkJLnZpcnR1YWwgPSBTQUhCMV9CQVNFX0FERFJfVklSVCwKLQkJLnBmbiA9IF9fcGh5c190b19wZm4oU0FIQjFfQkFTRV9BRERSKSwKLQkJLmxlbmd0aCA9IFNBSEIxX1NJWkUsCi0JCS50eXBlID0gTVRfREVWSUNFCi0JfSwKLQkvKgotCSAqIHRoaXMgZml4ZWQgbWFwcGluZyBjb3ZlcnM6Ci0JICogLSBFTUkKLQkgKi8KLQl7Ci0JCS52aXJ0dWFsID0gWF9NRU1DX0JBU0VfQUREUl9WSVJULAotCQkucGZuID0gX19waHlzX3RvX3BmbihYX01FTUNfQkFTRV9BRERSKSwKLQkJLmxlbmd0aCA9IFhfTUVNQ19TSVpFLAotCQkudHlwZSA9IE1UX0RFVklDRQotCX0KLX07Ci0KLS8qCi0gKiBJbml0aWFsaXplIHRoZSBtZW1vcnkgbWFwLiBJdCBpcyBjYWxsZWQgZHVyaW5nIHRoZQotICogc3lzdGVtIHN0YXJ0dXAgdG8gY3JlYXRlIHN0YXRpYyBwaHlzaWNhbCB0byB2aXJ0dWFsCi0gKiBtZW1vcnkgbWFwIGZvciB0aGUgSU8gbW9kdWxlcy4KLSAqLwotdm9pZCBfX2luaXQgbXgyMV9tYXBfaW8odm9pZCkKLXsKLQlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgyMSk7Ci0JbXhjX2FyY2hfcmVzZXRfaW5pdChJT19BRERSRVNTKFdET0dfQkFTRV9BRERSKSk7Ci0KLQlpb3RhYmxlX2luaXQobXhjX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXhjX2lvX2Rlc2MpKTsKLX0KLQotdm9pZCBfX2luaXQgbXgyN19tYXBfaW8odm9pZCkKLXsKLQlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgyNyk7Ci0JbXhjX2FyY2hfcmVzZXRfaW5pdChJT19BRERSRVNTKFdET0dfQkFTRV9BRERSKSk7Ci0KLQlpb3RhYmxlX2luaXQobXhjX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXhjX2lvX2Rlc2MpKTsKLX0KLQotdm9pZCBfX2luaXQgbXgyN19pbml0X2lycSh2b2lkKQotewotCW14Y19pbml0X2lycShJT19BRERSRVNTKEFWSUNfQkFTRV9BRERSKSk7Ci19Ci0KLXZvaWQgX19pbml0IG14MjFfaW5pdF9pcnEodm9pZCkKLXsKLQlteDI3X2luaXRfaXJxKCk7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtY3B1aW14MjcuYyBiL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtY3B1aW14MjcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjYxNmRjYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtY3B1aW14MjcuYwpAQCAtMCwwICsxLDIzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBFcmljIEJlbmFyZCAtIGVyaWNAZXVrcmVhLmNvbQorICoKKyAqIEJhc2VkIG9uIHBjbTAzOC5jIHdoaWNoIGlzIDoKKyAqIENvcHlyaWdodCAyMDA3IFJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4sIFBlbmd1dHJvbml4CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggSnVlcmdlbiBCZWlzZXJ0IChrZXJuZWxAcGVuZ3V0cm9uaXguZGUpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BsYXQtcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9ib2FyZC1ldWtyZWFfY3B1aW14MjcuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2kyYy5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyNy5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyBpbnQgZXVrcmVhX2NwdWlteDI3X3BpbnNbXSA9IHsKKwkvKiBVQVJUMSAqLworCVBFMTJfUEZfVUFSVDFfVFhELAorCVBFMTNfUEZfVUFSVDFfUlhELAorCVBFMTRfUEZfVUFSVDFfQ1RTLAorCVBFMTVfUEZfVUFSVDFfUlRTLAorCS8qIFVBUlQ0ICovCisJUEIyNl9BRl9VQVJUNF9SVFMsCisJUEIyOF9BRl9VQVJUNF9UWEQsCisJUEIyOV9BRl9VQVJUNF9DVFMsCisJUEIzMV9BRl9VQVJUNF9SWEQsCisJLyogRkVDICovCisJUEQwX0FJTl9GRUNfVFhEMCwKKwlQRDFfQUlOX0ZFQ19UWEQxLAorCVBEMl9BSU5fRkVDX1RYRDIsCisJUEQzX0FJTl9GRUNfVFhEMywKKwlQRDRfQU9VVF9GRUNfUlhfRVIsCisJUEQ1X0FPVVRfRkVDX1JYRDEsCisJUEQ2X0FPVVRfRkVDX1JYRDIsCisJUEQ3X0FPVVRfRkVDX1JYRDMsCisJUEQ4X0FGX0ZFQ19NRElPLAorCVBEOV9BSU5fRkVDX01EQywKKwlQRDEwX0FPVVRfRkVDX0NSUywKKwlQRDExX0FPVVRfRkVDX1RYX0NMSywKKwlQRDEyX0FPVVRfRkVDX1JYRDAsCisJUEQxM19BT1VUX0ZFQ19SWF9EViwKKwlQRDE0X0FPVVRfRkVDX1JYX0NMSywKKwlQRDE1X0FPVVRfRkVDX0NPTCwKKwlQRDE2X0FJTl9GRUNfVFhfRVIsCisJUEYyM19BSU5fRkVDX1RYX0VOLAorCS8qIEkyQzEgKi8KKwlQRDE3X1BGX0kyQ19EQVRBLAorCVBEMThfUEZfSTJDX0NMSywKKwkvKiBTREhDMiAqLworCVBCNF9QRl9TRDJfRDAsCisJUEI1X1BGX1NEMl9EMSwKKwlQQjZfUEZfU0QyX0QyLAorCVBCN19QRl9TRDJfRDMsCisJUEI4X1BGX1NEMl9DTUQsCisJUEI5X1BGX1NEMl9DTEssCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTApIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwX01PRFVMRSkKKwkvKiBRdWFkIFVBUlQncyBJUlEgKi8KKwlHUElPX1BPUlREIHwgMjIgfCBHUElPX0dQSU8gfCBHUElPX0lOLAorCUdQSU9fUE9SVEQgfCAyMyB8IEdQSU9fR1BJTyB8IEdQSU9fSU4sCisJR1BJT19QT1JURCB8IDI3IHwgR1BJT19HUElPIHwgR1BJT19JTiwKKwlHUElPX1BPUlREIHwgMzAgfCBHUElPX0dQSU8gfCBHUElPX0lOLAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBldWtyZWFfY3B1aW14MjdfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGggPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBldWtyZWFfY3B1aW14MjdfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0ID0gMHhjMDAwMDAwMCwKKwkuZW5kICAgPSAweGMzZmZmZmZmLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZXVrcmVhX2NwdWlteDI3X25vcl9tdGRfZGV2aWNlID0geworCS5uYW1lID0gInBoeXNtYXAtZmxhc2giLAorCS5pZCA9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZXVrcmVhX2NwdWlteDI3X2ZsYXNoX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCisJLnJlc291cmNlID0gJmV1a3JlYV9jcHVpbXgyN19mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGFbXSA9IHsKKwl7CisJCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCisJfSwgeworCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgZXVrcmVhX2NwdWlteDI3X25hbmRfYm9hcmRfaW5mbyA9IHsKKwkud2lkdGggPSAxLAorCS5od19lY2MgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZldWtyZWFfY3B1aW14Mjdfbm9yX210ZF9kZXZpY2UsCisJJm14Y19mZWNfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBldWtyZWFfY3B1aW14MjdfaTJjXzFfZGF0YSA9IHsKKwkuYml0cmF0ZSA9IDEwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gZXVrcmVhX2NwdWlteDI3X2kyY19kZXZpY2VzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygicGNmODU2MyIsIDB4NTEpLAorCX0sCit9OworCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTApIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tYXBiYXNlID0gKHVuc2lnbmVkIGxvbmcpKE1YMjdfQ1MzX0JBU0VfQUREUiArIDB4MjAwMDAwKSwKKwkJLmlycSA9IElSUV9HUElPQigyMyksCisJCS51YXJ0Y2xrID0gMTQ3NDU2MDAsCisJCS5yZWdzaGlmdCA9IDEsCisJCS5pb3R5cGUgPSBVUElPX01FTSwKKwkJLmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwgVVBGX0lPUkVNQVAsCisJfSwgeworCQkubWFwYmFzZSA9ICh1bnNpZ25lZCBsb25nKShNWDI3X0NTM19CQVNFX0FERFIgKyAweDQwMDAwMCksCisJCS5pcnEgPSBJUlFfR1BJT0IoMjIpLAorCQkudWFydGNsayA9IDE0NzQ1NjAwLAorCQkucmVnc2hpZnQgPSAxLAorCQkuaW90eXBlID0gVVBJT19NRU0sCisJCS5mbGFncyA9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCB8IFVQRl9JT1JFTUFQLAorCX0sIHsKKwkJLm1hcGJhc2UgPSAodW5zaWduZWQgbG9uZykoTVgyN19DUzNfQkFTRV9BRERSICsgMHg4MDAwMDApLAorCQkuaXJxID0gSVJRX0dQSU9CKDI3KSwKKwkJLnVhcnRjbGsgPSAxNDc0NTYwMCwKKwkJLnJlZ3NoaWZ0ID0gMSwKKwkJLmlvdHlwZSA9IFVQSU9fTUVNLAorCQkuZmxhZ3MgPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QgfCBVUEZfSU9SRU1BUCwKKwl9LCB7CisJCS5tYXBiYXNlID0gKHVuc2lnbmVkIGxvbmcpKE1YMjdfQ1MzX0JBU0VfQUREUiArIDB4MTAwMDAwMCksCisJCS5pcnEgPSBJUlFfR1BJT0IoMzApLAorCQkudWFydGNsayA9IDE0NzQ1NjAwLAorCQkucmVnc2hpZnQgPSAxLAorCQkuaW90eXBlID0gVVBJT19NRU0sCisJCS5mbGFncyA9IFVQRl9CT09UX0FVVE9DT05GIHwgVVBGX1NLSVBfVEVTVCB8IFVQRl9JT1JFTUFQLAorCX0sIHsKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZXJpYWxfZGV2aWNlID0geworCS5uYW1lID0gInNlcmlhbDgyNTAiLAorCS5pZCA9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSBzZXJpYWxfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBfX2luaXQgZXVrcmVhX2NwdWlteDI3X2luaXQodm9pZCkKK3sKKwlteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKGV1a3JlYV9jcHVpbXgyN19waW5zLAorCQlBUlJBWV9TSVpFKGV1a3JlYV9jcHVpbXgyN19waW5zKSwgIkNQVUlNWDI3Iik7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YVswXSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZpbXgyN19uYW5kX2RldmljZSwKKwkJCSZldWtyZWFfY3B1aW14MjdfbmFuZF9ib2FyZF9pbmZvKTsKKworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIGV1a3JlYV9jcHVpbXgyN19pMmNfZGV2aWNlcywKKwkJCQlBUlJBWV9TSVpFKGV1a3JlYV9jcHVpbXgyN19pMmNfZGV2aWNlcykpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2kyY19kZXZpY2UwLCAmZXVrcmVhX2NwdWlteDI3X2kyY18xX2RhdGEpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19NQUNIX0VVS1JFQV9DUFVJTVgyN19VU0VTREhDMikKKwkvKiBTREhDMiBjYW4gYmUgdXNlZCBmb3IgV2lmaSAqLworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19zZGhjX2RldmljZTEsIE5VTEwpOworCS8qIGluIHdoaWNoIGNhc2UgVUFSVDQgaXMgYWxzbyB1c2VkIGZvciBCbHVldG9vdGggKi8KKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UzLCAmdWFydF9wZGF0YVsxXSk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MF9NT0RVTEUpCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZXJpYWxfZGV2aWNlKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfRVVLUkVBX01CSU1YMjdfQkFTRUJPQVJECisJZXVrcmVhX21iaW14MjdfYmFzZWJvYXJkX2luaXQoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZXVrcmVhX2NwdWlteDI3X3RpbWVyX2luaXQodm9pZCkKK3sKKwlteDI3X2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgZXVrcmVhX2NwdWlteDI3X3RpbWVyID0geworCS5pbml0ID0gZXVrcmVhX2NwdWlteDI3X3RpbWVyX2luaXQsCit9OworCitNQUNISU5FX1NUQVJUKENQVUlNWDI3LCAiRVVLUkVBIENQVUlNWDI3IikKKwkucGh5c19pbyAgICAgICAgPSBNWDI3X0FJUElfQkFTRV9BRERSLAorCS5pb19wZ19vZmZzdCAgICA9ICgoTVgyN19BSVBJX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zICAgID0gTVgyN19QSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8gICAgICAgICA9IG14MjdfbWFwX2lvLAorCS5pbml0X2lycSAgICAgICA9IG14MjdfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZSAgID0gZXVrcmVhX2NwdWlteDI3X2luaXQsCisJLnRpbWVyICAgICAgICAgID0gJmV1a3JlYV9jcHVpbXgyN190aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9tYWNoLWlteDI3bGl0ZS5jIGIvYXJjaC9hcm0vbWFjaC1teDIvbWFjaC1pbXgyN2xpdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTcxMGJmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvbWFjaC1pbXgyN2xpdGUuYwpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDcgUm9iZXJ0IFNjaHdlYmVsIDxyLnNjaHdlYmVsQHBlbmd1dHJvbml4LmRlPiwgUGVuZ3V0cm9uaXgKKyAqIENvcHlyaWdodCAoQykgMjAwOCBKdWVyZ2VuIEJlaXNlcnQgKGtlcm5lbEBwZW5ndXRyb25peC5kZSkKKyAqIENvcHlyaWdodCAyMDA5IERhbmllbCBTY2hhZWZmZXIgKGRhbmllbC5zY2hhZWZmZXJAdGltZXN5cy5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjcuaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLW14MjdsaXRlLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXgyN2xpdGVfcGluc1tdID0geworCS8qIFVBUlQxICovCisJUEUxMl9QRl9VQVJUMV9UWEQsCisJUEUxM19QRl9VQVJUMV9SWEQsCisJUEUxNF9QRl9VQVJUMV9DVFMsCisJUEUxNV9QRl9VQVJUMV9SVFMsCisJLyogRkVDICovCisJUEQwX0FJTl9GRUNfVFhEMCwKKwlQRDFfQUlOX0ZFQ19UWEQxLAorCVBEMl9BSU5fRkVDX1RYRDIsCisJUEQzX0FJTl9GRUNfVFhEMywKKwlQRDRfQU9VVF9GRUNfUlhfRVIsCisJUEQ1X0FPVVRfRkVDX1JYRDEsCisJUEQ2X0FPVVRfRkVDX1JYRDIsCisJUEQ3X0FPVVRfRkVDX1JYRDMsCisJUEQ4X0FGX0ZFQ19NRElPLAorCVBEOV9BSU5fRkVDX01EQywKKwlQRDEwX0FPVVRfRkVDX0NSUywKKwlQRDExX0FPVVRfRkVDX1RYX0NMSywKKwlQRDEyX0FPVVRfRkVDX1JYRDAsCisJUEQxM19BT1VUX0ZFQ19SWF9EViwKKwlQRDE0X0FPVVRfRkVDX1JYX0NMSywKKwlQRDE1X0FPVVRfRkVDX0NPTCwKKwlQRDE2X0FJTl9GRUNfVFhfRVIsCisJUEYyM19BSU5fRkVDX1RYX0VOLAorfTsKKworc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKKwkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZteGNfZmVjX2RldmljZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteDI3bGl0ZV9pbml0KHZvaWQpCit7CisJbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteDI3bGl0ZV9waW5zLCBBUlJBWV9TSVpFKG14MjdsaXRlX3BpbnMpLAorCQkiaW14MjdsaXRlIik7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXgyN2xpdGVfdGltZXJfaW5pdCh2b2lkKQoreworCW14MjdfY2xvY2tzX2luaXQoMjYwMDAwMDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBteDI3bGl0ZV90aW1lciA9IHsKKwkuaW5pdAk9IG14MjdsaXRlX3RpbWVyX2luaXQsCit9OworCitNQUNISU5FX1NUQVJUKElNWDI3TElURSwgIkxvZ2ljUEQgaS5NWDI3TElURSIpCisJLnBoeXNfaW8gICAgICAgID0gTVgyN19BSVBJX0JBU0VfQUREUiwKKwkuaW9fcGdfb2Zmc3QgICAgPSAoKE1YMjdfQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyAgICA9IE1YMjdfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBteDI3X21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBteDI3X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IG14MjdsaXRlX2luaXQsCisJLnRpbWVyICAgICAgICAgID0gJm14MjdsaXRlX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtbXgyMWFkcy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvbWFjaC1teDIxYWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTEzZTU4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtbXgyMWFkcy5jCkBAIC0wLDAgKzEsMjk0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICogIENvcHlyaWdodCAoQykgMjAwMiBTaGFuZSBOYXkgKHNoYW5lQG1pbmlybC5jb20pCisgKiAgQ29weXJpZ2h0IDIwMDYtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CisjaW5jbHVkZSA8bWFjaC9pbXhmYi5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyMS5oPgorI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgyMWFkcy5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IG14MjFhZHNfcGluc1tdID0geworCisJLyogQ1M4OTAwQSAqLworCShHUElPX1BPUlRFIHwgR1BJT19HUElPIHwgR1BJT19JTiB8IDExKSwKKworCS8qIFVBUlQxICovCisJUEUxMl9QRl9VQVJUMV9UWEQsCisJUEUxM19QRl9VQVJUMV9SWEQsCisJUEUxNF9QRl9VQVJUMV9DVFMsCisJUEUxNV9QRl9VQVJUMV9SVFMsCisKKwkvKiBVQVJUMyAoSXJEQSkgLSBvbmx5IFRYRCBhbmQgUlhEICovCisJUEU4X1BGX1VBUlQzX1RYRCwKKwlQRTlfUEZfVUFSVDNfUlhELAorCisJLyogVUFSVDQgKi8KKwlQQjI2X0FGX1VBUlQ0X1JUUywKKwlQQjI4X0FGX1VBUlQ0X1RYRCwKKwlQQjI5X0FGX1VBUlQ0X0NUUywKKwlQQjMxX0FGX1VBUlQ0X1JYRCwKKworCS8qIExDREMgKi8KKwlQQTVfUEZfTFNDTEssCisJUEE2X1BGX0xEMCwKKwlQQTdfUEZfTEQxLAorCVBBOF9QRl9MRDIsCisJUEE5X1BGX0xEMywKKwlQQTEwX1BGX0xENCwKKwlQQTExX1BGX0xENSwKKwlQQTEyX1BGX0xENiwKKwlQQTEzX1BGX0xENywKKwlQQTE0X1BGX0xEOCwKKwlQQTE1X1BGX0xEOSwKKwlQQTE2X1BGX0xEMTAsCisJUEExN19QRl9MRDExLAorCVBBMThfUEZfTEQxMiwKKwlQQTE5X1BGX0xEMTMsCisJUEEyMF9QRl9MRDE0LAorCVBBMjFfUEZfTEQxNSwKKwlQQTIyX1BGX0xEMTYsCisJUEEyNF9QRl9SRVYsICAgICAvKiBTaGFycCBwYW5lbCBkZWRpY2F0ZWQgc2lnbmFsICovCisJUEEyNV9QRl9DTFMsICAgICAvKiBTaGFycCBwYW5lbCBkZWRpY2F0ZWQgc2lnbmFsICovCisJUEEyNl9QRl9QUywgICAgICAvKiBTaGFycCBwYW5lbCBkZWRpY2F0ZWQgc2lnbmFsICovCisJUEEyN19QRl9TUExfU1BSLCAvKiBTaGFycCBwYW5lbCBkZWRpY2F0ZWQgc2lnbmFsICovCisJUEEyOF9QRl9IU1lOQywKKwlQQTI5X1BGX1ZTWU5DLAorCVBBMzBfUEZfQ09OVFJBU1QsCisJUEEzMV9QRl9PRV9BQ0QsCisKKwkvKiBNTUMvU0RIQyAqLworCVBFMThfUEZfU0QxX0QwLAorCVBFMTlfUEZfU0QxX0QxLAorCVBFMjBfUEZfU0QxX0QyLAorCVBFMjFfUEZfU0QxX0QzLAorCVBFMjJfUEZfU0QxX0NNRCwKKwlQRTIzX1BGX1NEMV9DTEssCisKKwkvKiBORkMgKi8KKwlQRjBfUEZfTlJGQiwKKwlQRjFfUEZfTkZDRSwKKwlQRjJfUEZfTkZXUCwKKwlQRjNfUEZfTkZDTEUsCisJUEY0X1BGX05GQUxFLAorCVBGNV9QRl9ORlJFLAorCVBGNl9QRl9ORldFLAorCVBGN19QRl9ORklPMCwKKwlQRjhfUEZfTkZJTzEsCisJUEY5X1BGX05GSU8yLAorCVBGMTBfUEZfTkZJTzMsCisJUEYxMV9QRl9ORklPNCwKKwlQRjEyX1BGX05GSU81LAorCVBGMTNfUEZfTkZJTzYsCisJUEYxNF9QRl9ORklPNywKK307CisKKy8qIEFEUydzIE5PUiBmbGFzaDogMnggQU0yOUJEUzEyOEhFOVZLSSBvbiAzMi1iaXQgYnVzICovCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBteDIxYWRzX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoID0gNCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXgyMWFkc19mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgPSBNWDIxX0NTMF9CQVNFX0FERFIsCisJLmVuZCA9IE1YMjFfQ1MwX0JBU0VfQUREUiArIDB4MDIwMDAwMDAgLSAxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgyMWFkc19ub3JfbXRkX2RldmljZSA9IHsKKwkubmFtZSA9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJm14MjFhZHNfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzID0gMSwKKwkucmVzb3VyY2UgPSAmbXgyMWFkc19mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgPSB7CisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfbm9ydHNfcGRhdGEgPSB7Cit9OworCisKK3N0YXRpYyBpbnQgbXgyMWFkc19mYl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJdTE2IHRtcDsKKworCXRtcCA9IF9fcmF3X3JlYWR3KE1YMjFBRFNfSU9fUkVHKTsKKwl0bXAgfD0gTVgyMUFEU19JT19MQ0RPTjsKKwlfX3Jhd193cml0ZXcodG1wLCBNWDIxQURTX0lPX1JFRyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG14MjFhZHNfZmJfZXhpdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXUxNiB0bXA7CisKKwl0bXAgPSBfX3Jhd19yZWFkdyhNWDIxQURTX0lPX1JFRyk7CisJdG1wICY9IH5NWDIxQURTX0lPX0xDRE9OOworCV9fcmF3X3dyaXRldyh0bXAsIE1YMjFBRFNfSU9fUkVHKTsKK30KKworLyoKKyAqIENvbm5lY3RlZCBpcyBhIHBvcnRyYWl0IFNoYXJwLVFWR0EgZGlzcGxheQorICogb2YgdHlwZTogTFEwMzVRN0RCMDIKKyAqLworc3RhdGljIHN0cnVjdCBpbXhfZmJfdmlkZW9tb2RlIG14MjFhZHNfbW9kZXNbXSA9IHsKKwl7CisJCS5tb2RlID0geworCQkJLm5hbWUJCT0gIlNoYXJwLUxRMDM1UTciLAorCQkJLnJlZnJlc2gJPSA2MCwKKwkJCS54cmVzCQk9IDI0MCwKKwkJCS55cmVzCQk9IDMyMCwKKwkJCS5waXhjbG9jawk9IDE4ODY3OSwgLyogaW4gcHMgKDUuM01IeikgKi8KKwkJCS5oc3luY19sZW4JPSAyLAorCQkJLmxlZnRfbWFyZ2luCT0gNiwKKwkJCS5yaWdodF9tYXJnaW4JPSAxNiwKKwkJCS52c3luY19sZW4JPSAxLAorCQkJLnVwcGVyX21hcmdpbgk9IDgsCisJCQkubG93ZXJfbWFyZ2luCT0gMTAsCisJCX0sCisJCS5wY3IJCT0gMHhmYjEwOGJjNywKKwkJLmJwcAkJPSAxNiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSBteDIxYWRzX2ZiX2RhdGEgPSB7CisJLm1vZGUgPSBteDIxYWRzX21vZGVzLAorCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG14MjFhZHNfbW9kZXMpLAorCisJLnB3bXIJCT0gMHgwMGE5MDNmZiwKKwkubHNjcjEJCT0gMHgwMDEyMDMwMCwKKwkuZG1hY3IJCT0gMHgwMDAyMDAwOCwKKworCS5pbml0ID0gbXgyMWFkc19mYl9pbml0LAorCS5leGl0ID0gbXgyMWFkc19mYl9leGl0LAorfTsKKworc3RhdGljIGludCBteDIxYWRzX3NkaGNfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKF9fcmF3X3JlYWR3KE1YMjFBRFNfSU9fUkVHKSAmIE1YMjFBRFNfSU9fU0RfV1ApID8gMSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgbXgyMWFkc19zZGhjX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IGRldGVjdF9pcnEsCisJdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmVxdWVzdF9pcnEoSVJRX0dQSU9EKDI1KSwgZGV0ZWN0X2lycSwKKwkJSVJRRl9UUklHR0VSX0ZBTExJTkcsICJtbWMtZGV0ZWN0IiwgZGF0YSk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJcmV0dXJuIDA7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbXgyMWFkc19zZGhjX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWZyZWVfaXJxKElSUV9HUElPRCgyNSksIGRhdGEpOworfQorCitzdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIG14MjFhZHNfc2RoY19wZGF0YSA9IHsKKwkub2NyX2F2YWlsID0gTU1DX1ZERF8yOV8zMCB8IE1NQ19WRERfMzBfMzEsIC8qIDMuMFYgKi8KKwkuZ2V0X3JvID0gbXgyMWFkc19zZGhjX2dldF9ybywKKwkuaW5pdCA9IG14MjFhZHNfc2RoY19pbml0LAorCS5leGl0ID0gbXgyMWFkc19zZGhjX2V4aXQsCit9OworCitzdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgbXgyMWFkc19uYW5kX2JvYXJkX2luZm8gPSB7CisJLndpZHRoID0gMSwKKwkuaHdfZWNjID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXgyMWFkc19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwkvKgorCSAqIE1lbW9yeS1tYXBwZWQgSS9PIG9uIE1YMjFBRFMgQmFzZSBib2FyZDoKKwkgKiAgIC0gQ1M4OTAwQSBFdGhlcm5ldCBjb250cm9sbGVyCisJICogICAtIFNUMTZDMjU1MkNKIFVBUlQKKwkgKiAgIC0gQ1BVIGFuZCBCYXNlIGJvYXJkIHZlcnNpb24KKwkgKiAgIC0gQmFzZSBib2FyZCBJL08gcmVnaXN0ZXIKKwkgKi8KKwl7CisJCS52aXJ0dWFsID0gTVgyMUFEU19NTUlPX0JBU0VfQUREUiwKKwkJLnBmbiA9IF9fcGh5c190b19wZm4oTVgyMV9DUzFfQkFTRV9BRERSKSwKKwkJLmxlbmd0aCA9IE1YMjFBRFNfTU1JT19TSVpFLAorCQkudHlwZSA9IE1UX0RFVklDRSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG14MjFhZHNfbWFwX2lvKHZvaWQpCit7CisJbXgyMV9tYXBfaW8oKTsKKwlpb3RhYmxlX2luaXQobXgyMWFkc19pb19kZXNjLCBBUlJBWV9TSVpFKG14MjFhZHNfaW9fZGVzYykpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJm14MjFhZHNfbm9yX210ZF9kZXZpY2UsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbXgyMWFkc19ib2FyZF9pbml0KHZvaWQpCit7CisJbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteDIxYWRzX3BpbnMsIEFSUkFZX1NJWkUobXgyMWFkc19waW5zKSwKKwkJCSJteDIxYWRzIik7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMiwgJnVhcnRfbm9ydHNfcGRhdGEpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTMsICZ1YXJ0X3BkYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfZmJfZGV2aWNlLCAmbXgyMWFkc19mYl9kYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UwLCAmbXgyMWFkc19zZGhjX3BkYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZpbXgyMV9uYW5kX2RldmljZSwgJm14MjFhZHNfbmFuZF9ib2FyZF9pbmZvKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXgyMWFkc190aW1lcl9pbml0KHZvaWQpCit7CisJbXgyMV9jbG9ja3NfaW5pdCgzMjc2OCwgMjYwMDAwMDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBteDIxYWRzX3RpbWVyID0geworCS5pbml0CT0gbXgyMWFkc190aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChNWDIxQURTLCAiRnJlZXNjYWxlIGkuTVgyMUFEUyIpCisJLyogbWFpbnRhaW5lcjogRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gKi8KKwkucGh5c19pbyAgICAgICAgPSBNWDIxX0FJUElfQkFTRV9BRERSLAorCS5pb19wZ19vZmZzdCAgICA9ICgoTVgyMV9BSVBJX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zICAgID0gTVgyMV9QSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8gICAgICAgICA9IG14MjFhZHNfbWFwX2lvLAorCS5pbml0X2lycSAgICAgICA9IG14MjFfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZSAgID0gbXgyMWFkc19ib2FyZF9pbml0LAorCS50aW1lciAgICAgICAgICA9ICZteDIxYWRzX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtbXgyN18zZHMuYyBiL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtbXgyN18zZHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmY0ZTBkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvbWFjaC1teDI3XzNkcy5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIEF1dGhvcjogRmFiaW8gRXN0ZXZhbSA8ZmFiaW8uZXN0ZXZhbUBmcmVlc2NhbGUuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDI3Lmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC1teDI3cGRrLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXgyN3Bka19waW5zW10gPSB7CisJLyogVUFSVDEgKi8KKwlQRTEyX1BGX1VBUlQxX1RYRCwKKwlQRTEzX1BGX1VBUlQxX1JYRCwKKwlQRTE0X1BGX1VBUlQxX0NUUywKKwlQRTE1X1BGX1VBUlQxX1JUUywKKwkvKiBGRUMgKi8KKwlQRDBfQUlOX0ZFQ19UWEQwLAorCVBEMV9BSU5fRkVDX1RYRDEsCisJUEQyX0FJTl9GRUNfVFhEMiwKKwlQRDNfQUlOX0ZFQ19UWEQzLAorCVBENF9BT1VUX0ZFQ19SWF9FUiwKKwlQRDVfQU9VVF9GRUNfUlhEMSwKKwlQRDZfQU9VVF9GRUNfUlhEMiwKKwlQRDdfQU9VVF9GRUNfUlhEMywKKwlQRDhfQUZfRkVDX01ESU8sCisJUEQ5X0FJTl9GRUNfTURDLAorCVBEMTBfQU9VVF9GRUNfQ1JTLAorCVBEMTFfQU9VVF9GRUNfVFhfQ0xLLAorCVBEMTJfQU9VVF9GRUNfUlhEMCwKKwlQRDEzX0FPVVRfRkVDX1JYX0RWLAorCVBEMTRfQU9VVF9GRUNfUlhfQ0xLLAorCVBEMTVfQU9VVF9GRUNfQ09MLAorCVBEMTZfQUlOX0ZFQ19UWF9FUiwKKwlQRjIzX0FJTl9GRUNfVFhfRU4sCit9OworCitzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJm14Y19mZWNfZGV2aWNlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG14MjdwZGtfaW5pdCh2b2lkKQoreworCW14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXgyN3Bka19waW5zLCBBUlJBWV9TSVpFKG14MjdwZGtfcGlucyksCisJCSJteDI3cGRrIik7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXgyN3Bka190aW1lcl9pbml0KHZvaWQpCit7CisJbXgyN19jbG9ja3NfaW5pdCgyNjAwMDAwMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIG14MjdwZGtfdGltZXIgPSB7CisJLmluaXQJPSBteDI3cGRrX3RpbWVyX2luaXQsCit9OworCitNQUNISU5FX1NUQVJUKE1YMjdfM0RTLCAiRnJlZXNjYWxlIE1YMjdQREsiKQorCS8qIG1haW50YWluZXI6IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuICovCisJLnBoeXNfaW8gICAgICAgID0gTVgyN19BSVBJX0JBU0VfQUREUiwKKwkuaW9fcGdfb2Zmc3QgICAgPSAoKE1YMjdfQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyAgICA9IE1YMjdfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBteDI3X21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBteDI3X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IG14MjdwZGtfaW5pdCwKKwkudGltZXIgICAgICAgICAgPSAmbXgyN3Bka190aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9tYWNoLW14MjdhZHMuYyBiL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtbXgyN2Fkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjZTMyMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14Mi9tYWNoLW14MjdhZHMuYwpAQCAtMCwwICsxLDM0NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQorICogIENvcHlyaWdodCAyMDA2LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDI3Lmg+CisjaW5jbHVkZSA8bWFjaC9ib2FyZC1teDI3YWRzLmg+CisjaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgorI2luY2x1ZGUgPG1hY2gvaTJjLmg+CisjaW5jbHVkZSA8bWFjaC9pbXhmYi5oPgorI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXgyN2Fkc19waW5zW10gPSB7CisJLyogVUFSVDAgKi8KKwlQRTEyX1BGX1VBUlQxX1RYRCwKKwlQRTEzX1BGX1VBUlQxX1JYRCwKKwlQRTE0X1BGX1VBUlQxX0NUUywKKwlQRTE1X1BGX1VBUlQxX1JUUywKKwkvKiBVQVJUMSAqLworCVBFM19QRl9VQVJUMl9DVFMsCisJUEU0X1BGX1VBUlQyX1JUUywKKwlQRTZfUEZfVUFSVDJfVFhELAorCVBFN19QRl9VQVJUMl9SWEQsCisJLyogVUFSVDIgKi8KKwlQRThfUEZfVUFSVDNfVFhELAorCVBFOV9QRl9VQVJUM19SWEQsCisJUEUxMF9QRl9VQVJUM19DVFMsCisJUEUxMV9QRl9VQVJUM19SVFMsCisJLyogVUFSVDMgKi8KKwlQQjI2X0FGX1VBUlQ0X1JUUywKKwlQQjI4X0FGX1VBUlQ0X1RYRCwKKwlQQjI5X0FGX1VBUlQ0X0NUUywKKwlQQjMxX0FGX1VBUlQ0X1JYRCwKKwkvKiBVQVJUNCAqLworCVBCMThfQUZfVUFSVDVfVFhELAorCVBCMTlfQUZfVUFSVDVfUlhELAorCVBCMjBfQUZfVUFSVDVfQ1RTLAorCVBCMjFfQUZfVUFSVDVfUlRTLAorCS8qIFVBUlQ1ICovCisJUEIxMF9BRl9VQVJUNl9UWEQsCisJUEIxMl9BRl9VQVJUNl9DVFMsCisJUEIxMV9BRl9VQVJUNl9SWEQsCisJUEIxM19BRl9VQVJUNl9SVFMsCisJLyogRkVDICovCisJUEQwX0FJTl9GRUNfVFhEMCwKKwlQRDFfQUlOX0ZFQ19UWEQxLAorCVBEMl9BSU5fRkVDX1RYRDIsCisJUEQzX0FJTl9GRUNfVFhEMywKKwlQRDRfQU9VVF9GRUNfUlhfRVIsCisJUEQ1X0FPVVRfRkVDX1JYRDEsCisJUEQ2X0FPVVRfRkVDX1JYRDIsCisJUEQ3X0FPVVRfRkVDX1JYRDMsCisJUEQ4X0FGX0ZFQ19NRElPLAorCVBEOV9BSU5fRkVDX01EQywKKwlQRDEwX0FPVVRfRkVDX0NSUywKKwlQRDExX0FPVVRfRkVDX1RYX0NMSywKKwlQRDEyX0FPVVRfRkVDX1JYRDAsCisJUEQxM19BT1VUX0ZFQ19SWF9EViwKKwlQRDE0X0FPVVRfRkVDX1JYX0NMSywKKwlQRDE1X0FPVVRfRkVDX0NPTCwKKwlQRDE2X0FJTl9GRUNfVFhfRVIsCisJUEYyM19BSU5fRkVDX1RYX0VOLAorCS8qIEkyQzIgKi8KKwlQQzVfUEZfSTJDMl9TREEsCisJUEM2X1BGX0kyQzJfU0NMLAorCS8qIEZCICovCisJUEE1X1BGX0xTQ0xLLAorCVBBNl9QRl9MRDAsCisJUEE3X1BGX0xEMSwKKwlQQThfUEZfTEQyLAorCVBBOV9QRl9MRDMsCisJUEExMF9QRl9MRDQsCisJUEExMV9QRl9MRDUsCisJUEExMl9QRl9MRDYsCisJUEExM19QRl9MRDcsCisJUEExNF9QRl9MRDgsCisJUEExNV9QRl9MRDksCisJUEExNl9QRl9MRDEwLAorCVBBMTdfUEZfTEQxMSwKKwlQQTE4X1BGX0xEMTIsCisJUEExOV9QRl9MRDEzLAorCVBBMjBfUEZfTEQxNCwKKwlQQTIxX1BGX0xEMTUsCisJUEEyMl9QRl9MRDE2LAorCVBBMjNfUEZfTEQxNywKKwlQQTI0X1BGX1JFViwKKwlQQTI1X1BGX0NMUywKKwlQQTI2X1BGX1BTLAorCVBBMjdfUEZfU1BMX1NQUiwKKwlQQTI4X1BGX0hTWU5DLAorCVBBMjlfUEZfVlNZTkMsCisJUEEzMF9QRl9DT05UUkFTVCwKKwlQQTMxX1BGX09FX0FDRCwKKwkvKiBPV0lSRSAqLworCVBFMTZfQUZfT1dJUkUsCisJLyogU0RIQzEqLworCVBFMThfUEZfU0QxX0QwLAorCVBFMTlfUEZfU0QxX0QxLAorCVBFMjBfUEZfU0QxX0QyLAorCVBFMjFfUEZfU0QxX0QzLAorCVBFMjJfUEZfU0QxX0NNRCwKKwlQRTIzX1BGX1NEMV9DTEssCisJLyogU0RIQzIqLworCVBCNF9QRl9TRDJfRDAsCisJUEI1X1BGX1NEMl9EMSwKKwlQQjZfUEZfU0QyX0QyLAorCVBCN19QRl9TRDJfRDMsCisJUEI4X1BGX1NEMl9DTUQsCisJUEI5X1BGX1NEMl9DTEssCit9OworCitzdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgbXgyN2Fkc19uYW5kX2JvYXJkX2luZm8gPSB7CisJLndpZHRoID0gMSwKKwkuaHdfZWNjID0gMSwKK307CisKKy8qIEFEUydzIE5PUiBmbGFzaCAqLworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbXgyN2Fkc19mbGFzaF9kYXRhID0geworCS53aWR0aCA9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14MjdhZHNfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0ID0gMHhjMDAwMDAwMCwKKwkuZW5kID0gMHhjMDAwMDAwMCArIDB4MDIwMDAwMDAgLSAxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDI3YWRzX25vcl9tdGRfZGV2aWNlID0geworCS5uYW1lID0gInBoeXNtYXAtZmxhc2giLAorCS5pZCA9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmbXgyN2Fkc19mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMgPSAxLAorCS5yZXNvdXJjZSA9ICZteDI3YWRzX2ZsYXNoX3Jlc291cmNlLAorfTsKKworc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBteDI3YWRzX2kyY19kYXRhID0geworCS5iaXRyYXRlID0gMTAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBteDI3YWRzX2kyY19kZXZpY2VzW10gPSB7Cit9OworCit2b2lkIGxjZF9wb3dlcihpbnQgb24pCit7CisJaWYgKG9uKQorCQlfX3Jhd193cml0ZXcoUEJDX0JDVFJMMV9MQ0RPTiwgUEJDX0JDVFJMMV9TRVRfUkVHKTsKKwllbHNlCisJCV9fcmF3X3dyaXRldyhQQkNfQkNUUkwxX0xDRE9OLCBQQkNfQkNUUkwxX0NMRUFSX1JFRyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW14X2ZiX3ZpZGVvbW9kZSBteDI3YWRzX21vZGVzW10gPSB7CisJeworCQkubW9kZSA9IHsKKwkJCS5uYW1lCQk9ICJTaGFycC1MUTAzNVE3IiwKKwkJCS5yZWZyZXNoCT0gNjAsCisJCQkueHJlcwkJPSAyNDAsCisJCQkueXJlcwkJPSAzMjAsCisJCQkucGl4Y2xvY2sJPSAxODg2NzksIC8qIGluIHBzICg1LjNNSHopICovCisJCQkuaHN5bmNfbGVuCT0gMSwKKwkJCS5sZWZ0X21hcmdpbgk9IDksCisJCQkucmlnaHRfbWFyZ2luCT0gMTYsCisJCQkudnN5bmNfbGVuCT0gMSwKKwkJCS51cHBlcl9tYXJnaW4JPSA3LAorCQkJLmxvd2VyX21hcmdpbgk9IDksCisJCX0sCisJCS5icHAJCT0gMTYsCisJCS5wY3IJCT0gMHhGQjAwOEJDMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpbXhfZmJfcGxhdGZvcm1fZGF0YSBteDI3YWRzX2ZiX2RhdGEgPSB7CisJLm1vZGUgPSBteDI3YWRzX21vZGVzLAorCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG14MjdhZHNfbW9kZXMpLAorCisJLyoKKwkgKiAtIEhTWU5DIGFjdGl2ZSBoaWdoCisJICogLSBWU1lOQyBhY3RpdmUgaGlnaAorCSAqIC0gY2xrIG5vdGVuYWJsZWQgd2hpbGUgaWRsZQorCSAqIC0gY2xvY2sgaW52ZXJ0ZWQKKwkgKiAtIGRhdGEgbm90IGludmVydGVkCisJICogLSBkYXRhIGVuYWJsZSBsb3cgYWN0aXZlCisJICogLSBlbmFibGUgc2hhcnAgbW9kZQorCSAqLworCS5wd21yCQk9IDB4MDBBOTAzRkYsCisJLmxzY3IxCQk9IDB4MDAxMjAzMDAsCisJLmRtYWNyCQk9IDB4MDAwMjAwMTAsCisKKwkubGNkX3Bvd2VyCT0gbGNkX3Bvd2VyLAorfTsKKworc3RhdGljIGludCBteDI3YWRzX3NkaGMxX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IGRldGVjdF9pcnEsCisJCQkgICAgICB2b2lkICpkYXRhKQoreworCXJldHVybiByZXF1ZXN0X2lycShJUlFfR1BJT0UoMjEpLCBkZXRlY3RfaXJxLCBJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkJICAgInNkaGMxLWNhcmQtZGV0ZWN0IiwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgbXgyN2Fkc19zZGhjMl9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBkZXRlY3RfaXJxLAorCQkJICAgICAgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4gcmVxdWVzdF9pcnEoSVJRX0dQSU9CKDcpLCBkZXRlY3RfaXJxLCBJUlFGX1RSSUdHRVJfUklTSU5HLAorCQkJICAgInNkaGMyLWNhcmQtZGV0ZWN0IiwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIG14MjdhZHNfc2RoYzFfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJZnJlZV9pcnEoSVJRX0dQSU9FKDIxKSwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIG14MjdhZHNfc2RoYzJfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCit7CisJZnJlZV9pcnEoSVJRX0dQSU9CKDcpLCBkYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjMV9wZGF0YSA9IHsKKwkuaW5pdCA9IG14MjdhZHNfc2RoYzFfaW5pdCwKKwkuZXhpdCA9IG14MjdhZHNfc2RoYzFfZXhpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgc2RoYzJfcGRhdGEgPSB7CisJLmluaXQgPSBteDI3YWRzX3NkaGMyX2luaXQsCisJLmV4aXQgPSBteDI3YWRzX3NkaGMyX2V4aXQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJm14MjdhZHNfbm9yX210ZF9kZXZpY2UsCisJJm14Y19mZWNfZGV2aWNlLAorCSZteGNfdzFfbWFzdGVyX2RldmljZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGFbXSA9IHsKKwl7CisJCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCisJfSwgeworCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorCX0sIHsKKwkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKKwl9LCB7CisJCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCisJfSwgeworCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorCX0sIHsKKwkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG14MjdhZHNfYm9hcmRfaW5pdCh2b2lkKQoreworCW14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXgyN2Fkc19waW5zLCBBUlJBWV9TSVpFKG14MjdhZHNfcGlucyksCisJCQkibXgyN2FkcyIpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGFbMF0pOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTEsICZ1YXJ0X3BkYXRhWzFdKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UyLCAmdWFydF9wZGF0YVsyXSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMywgJnVhcnRfcGRhdGFbM10pOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTQsICZ1YXJ0X3BkYXRhWzRdKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2U1LCAmdWFydF9wZGF0YVs1XSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14MjdfbmFuZF9kZXZpY2UsICZteDI3YWRzX25hbmRfYm9hcmRfaW5mbyk7CisKKwkvKiBvbmx5IHRoZSBpMmMgbWFzdGVyIDEgaXMgdXNlZCBvbiB0aGlzIENQVSBjYXJkICovCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgbXgyN2Fkc19pMmNfZGV2aWNlcywKKwkJCQlBUlJBWV9TSVpFKG14MjdhZHNfaTJjX2RldmljZXMpKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTEsICZteDI3YWRzX2kyY19kYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfZmJfZGV2aWNlLCAmbXgyN2Fkc19mYl9kYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UwLCAmc2RoYzFfcGRhdGEpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19zZGhjX2RldmljZTEsICZzZGhjMl9wZGF0YSk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG14MjdhZHNfdGltZXJfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZnJlZiA9IDI2MDAwMDAwOworCisJaWYgKChfX3Jhd19yZWFkdyhQQkNfVkVSU0lPTl9SRUcpICYgQ0tJSF8yN01IWl9CSVRfU0VUKSA9PSAwKQorCQlmcmVmID0gMjcwMDAwMDA7CisKKwlteDI3X2Nsb2Nrc19pbml0KGZyZWYpOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBteDI3YWRzX3RpbWVyID0geworCS5pbml0CT0gbXgyN2Fkc190aW1lcl9pbml0LAorfTsKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteDI3YWRzX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwgPSBQQkNfQkFTRV9BRERSRVNTLAorCQkucGZuID0gX19waHlzX3RvX3BmbihNWDI3X0NTNF9CQVNFX0FERFIpLAorCQkubGVuZ3RoID0gU1pfMU0sCisJCS50eXBlID0gTVRfREVWSUNFLAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbXgyN2Fkc19tYXBfaW8odm9pZCkKK3sKKwlteDI3X21hcF9pbygpOworCWlvdGFibGVfaW5pdChteDI3YWRzX2lvX2Rlc2MsIEFSUkFZX1NJWkUobXgyN2Fkc19pb19kZXNjKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoTVgyN0FEUywgIkZyZWVzY2FsZSBpLk1YMjdBRFMiKQorCS8qIG1haW50YWluZXI6IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuICovCisJLnBoeXNfaW8gICAgICAgID0gTVgyN19BSVBJX0JBU0VfQUREUiwKKwkuaW9fcGdfb2Zmc3QgICAgPSAoKE1YMjdfQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyAgICA9IE1YMjdfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBteDI3YWRzX21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBteDI3X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IG14MjdhZHNfYm9hcmRfaW5pdCwKKwkudGltZXIgICAgICAgICAgPSAmbXgyN2Fkc190aW1lciwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtbXh0X3RkNjAuYyBiL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtbXh0X3RkNjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzM4NTU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvbWFjaC1teHRfdGQ2MC5jCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAorICogIENvcHlyaWdodCAoQykgMjAwMiBTaGFuZSBOYXkgKHNoYW5lQG1pbmlybC5jb20pCisgKiAgQ29weXJpZ2h0IDIwMDYtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDI3Lmg+CisjaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgorI2luY2x1ZGUgPG1hY2gvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL3BjYTk1M3guaD4KKyNpbmNsdWRlIDxtYWNoL2lteGZiLmg+CisjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworc3RhdGljIHVuc2lnbmVkIGludCBteHRfdGQ2MF9waW5zW10gX19pbml0ZGF0YSA9IHsKKwkvKiBVQVJUMCAqLworCVBFMTJfUEZfVUFSVDFfVFhELAorCVBFMTNfUEZfVUFSVDFfUlhELAorCVBFMTRfUEZfVUFSVDFfQ1RTLAorCVBFMTVfUEZfVUFSVDFfUlRTLAorCS8qIFVBUlQxICovCisJUEUzX1BGX1VBUlQyX0NUUywKKwlQRTRfUEZfVUFSVDJfUlRTLAorCVBFNl9QRl9VQVJUMl9UWEQsCisJUEU3X1BGX1VBUlQyX1JYRCwKKwkvKiBVQVJUMiAqLworCVBFOF9QRl9VQVJUM19UWEQsCisJUEU5X1BGX1VBUlQzX1JYRCwKKwlQRTEwX1BGX1VBUlQzX0NUUywKKwlQRTExX1BGX1VBUlQzX1JUUywKKwkvKiBGRUMgKi8KKwlQRDBfQUlOX0ZFQ19UWEQwLAorCVBEMV9BSU5fRkVDX1RYRDEsCisJUEQyX0FJTl9GRUNfVFhEMiwKKwlQRDNfQUlOX0ZFQ19UWEQzLAorCVBENF9BT1VUX0ZFQ19SWF9FUiwKKwlQRDVfQU9VVF9GRUNfUlhEMSwKKwlQRDZfQU9VVF9GRUNfUlhEMiwKKwlQRDdfQU9VVF9GRUNfUlhEMywKKwlQRDhfQUZfRkVDX01ESU8sCisJUEQ5X0FJTl9GRUNfTURDLAorCVBEMTBfQU9VVF9GRUNfQ1JTLAorCVBEMTFfQU9VVF9GRUNfVFhfQ0xLLAorCVBEMTJfQU9VVF9GRUNfUlhEMCwKKwlQRDEzX0FPVVRfRkVDX1JYX0RWLAorCVBEMTRfQU9VVF9GRUNfUlhfQ0xLLAorCVBEMTVfQU9VVF9GRUNfQ09MLAorCVBEMTZfQUlOX0ZFQ19UWF9FUiwKKwlQRjIzX0FJTl9GRUNfVFhfRU4sCisJLyogSTJDMSAqLworCVBEMTdfUEZfSTJDX0RBVEEsCisJUEQxOF9QRl9JMkNfQ0xLLAorCS8qIEkyQzIgKi8KKwlQQzVfUEZfSTJDMl9TREEsCisJUEM2X1BGX0kyQzJfU0NMLAorCS8qIEZCICovCisJUEE1X1BGX0xTQ0xLLAorCVBBNl9QRl9MRDAsCisJUEE3X1BGX0xEMSwKKwlQQThfUEZfTEQyLAorCVBBOV9QRl9MRDMsCisJUEExMF9QRl9MRDQsCisJUEExMV9QRl9MRDUsCisJUEExMl9QRl9MRDYsCisJUEExM19QRl9MRDcsCisJUEExNF9QRl9MRDgsCisJUEExNV9QRl9MRDksCisJUEExNl9QRl9MRDEwLAorCVBBMTdfUEZfTEQxMSwKKwlQQTE4X1BGX0xEMTIsCisJUEExOV9QRl9MRDEzLAorCVBBMjBfUEZfTEQxNCwKKwlQQTIxX1BGX0xEMTUsCisJUEEyMl9QRl9MRDE2LAorCVBBMjNfUEZfTEQxNywKKwlQQTI1X1BGX0NMUywKKwlQQTI3X1BGX1NQTF9TUFIsCisJUEEyOF9QRl9IU1lOQywKKwlQQTI5X1BGX1ZTWU5DLAorCVBBMzBfUEZfQ09OVFJBU1QsCisJUEEzMV9QRl9PRV9BQ0QsCisJLyogT1dJUkUgKi8KKwlQRTE2X0FGX09XSVJFLAorCS8qIFNESEMxKi8KKwlQRTE4X1BGX1NEMV9EMCwKKwlQRTE5X1BGX1NEMV9EMSwKKwlQRTIwX1BGX1NEMV9EMiwKKwlQRTIxX1BGX1NEMV9EMywKKwlQRTIyX1BGX1NEMV9DTUQsCisJUEUyM19QRl9TRDFfQ0xLLAorCVBGOF9BRl9BVEFfSU9SRFksCisJLyogU0RIQzIqLworCVBCNF9QRl9TRDJfRDAsCisJUEI1X1BGX1NEMl9EMSwKKwlQQjZfUEZfU0QyX0QyLAorCVBCN19QRl9TRDJfRDMsCisJUEI4X1BGX1NEMl9DTUQsCisJUEI5X1BGX1NEMl9DTEssCit9OworCitzdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgbXh0X3RkNjBfbmFuZF9ib2FyZF9pbmZvID0geworCS53aWR0aCA9IDEsCisJLmh3X2VjYyA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIG14dF90ZDYwX2kyY19kYXRhID0geworCS5iaXRyYXRlID0gMTAwMDAwLAorfTsKKworLyogUENBOTU1NyAqLworc3RhdGljIGludCBteHRfdGQ2MF9wY2E5NTU3X3NldHVwKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJdW5zaWduZWQgZ3Bpb19iYXNlLCB1bnNpZ25lZCBuZ3BpbywKKwkJCQl2b2lkICpjb250ZXh0KQoreworCXN0YXRpYyBpbnQgbXh0X3RkNjBfZ3Bpb192YWx1ZVtdID0geworCQktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgMQorCX07CisJaW50IG47CisKKwlmb3IgKG4gPSAwOyBuIDwgQVJSQVlfU0laRShteHRfdGQ2MF9ncGlvX3ZhbHVlKTsgKytuKSB7CisJCWdwaW9fcmVxdWVzdChncGlvX2Jhc2UgKyBuLCAiTVhUX1RENjAgR1BJTyBFeHAiKTsKKwkJaWYgKG14dF90ZDYwX2dwaW9fdmFsdWVbbl0gPCAwKQorCQkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpb19iYXNlICsgbik7CisJCWVsc2UKKwkJCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvX2Jhc2UgKyBuLAorCQkJCQkJbXh0X3RkNjBfZ3Bpb192YWx1ZVtuXSk7CisJCWdwaW9fZXhwb3J0KGdwaW9fYmFzZSArIG4sIDApOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBjYTk1M3hfcGxhdGZvcm1fZGF0YSBteHRfdGQ2MF9wY2E5NTU3X3BkYXRhID0geworCS5ncGlvX2Jhc2UJPSAyNDAsIC8qIHBsYWNlIFBDQTk1NTcgYWZ0ZXIgYWxsIE1YMjcgZ3BpbyBwaW5zICovCisJLmludmVydAkJPSAwLCAvKiBEbyBub3QgaW52ZXJ0ICovCisJLnNldHVwCQk9IG14dF90ZDYwX3BjYTk1NTdfc2V0dXAsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIG14dF90ZDYwX2kyY19kZXZpY2VzW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygicGNhOTU1NyIsIDB4MTgpLAorCQkucGxhdGZvcm1fZGF0YSA9ICZteHRfdGQ2MF9wY2E5NTU3X3BkYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIG14dF90ZDYwX2kyYzJfZGF0YSA9IHsKKwkuYml0cmF0ZSA9IDEwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gbXh0X3RkNjBfaTJjMl9kZXZpY2VzW10gPSB7Cit9OworCitzdGF0aWMgc3RydWN0IGlteF9mYl92aWRlb21vZGUgbXh0X3RkNjBfbW9kZXNbXSA9IHsKKwl7CisJCS5tb2RlID0geworCQkJLm5hbWUJCT0gIkNoaW1laSBMVzcwMEFUOTAwMyIsCisJCQkucmVmcmVzaAk9IDYwLAorCQkJLnhyZXMJCT0gODAwLAorCQkJLnlyZXMJCT0gNDgwLAorCQkJLnBpeGNsb2NrCT0gMzAzMDMsCisJCQkuaHN5bmNfbGVuCT0gNjQsCisJCQkubGVmdF9tYXJnaW4JPSAweDY3LAorCQkJLnJpZ2h0X21hcmdpbgk9IDB4NjgsCisJCQkudnN5bmNfbGVuCT0gMTYsCisJCQkudXBwZXJfbWFyZ2luCT0gMHgwZiwKKwkJCS5sb3dlcl9tYXJnaW4JPSAweDBmLAorCQl9LAorCQkuYnBwCQk9IDE2LAorCQkucGNyCQk9IDB4RkEyMDhCODMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgbXh0X3RkNjBfZmJfZGF0YSA9IHsKKwkubW9kZSA9IG14dF90ZDYwX21vZGVzLAorCS5udW1fbW9kZXMgPSBBUlJBWV9TSVpFKG14dF90ZDYwX21vZGVzKSwKKworCS8qCisJICogLSBIU1lOQyBhY3RpdmUgaGlnaAorCSAqIC0gVlNZTkMgYWN0aXZlIGhpZ2gKKwkgKiAtIGNsayBub3RlbmFibGVkIHdoaWxlIGlkbGUKKwkgKiAtIGNsb2NrIGludmVydGVkCisJICogLSBkYXRhIG5vdCBpbnZlcnRlZAorCSAqIC0gZGF0YSBlbmFibGUgbG93IGFjdGl2ZQorCSAqIC0gZW5hYmxlIHNoYXJwIG1vZGUKKwkgKi8KKwkucHdtcgkJPSAweDAwQTkwM0ZGLAorCS5sc2NyMQkJPSAweDAwMTIwMzAwLAorCS5kbWFjcgkJPSAweDAwMDIwMDEwLAorfTsKKworc3RhdGljIGludCBteHRfdGQ2MF9zZGhjMV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBkZXRlY3RfaXJxLAorCQkJCXZvaWQgKmRhdGEpCit7CisJcmV0dXJuIHJlcXVlc3RfaXJxKElSUV9HUElPRig4KSwgZGV0ZWN0X2lycSwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCisJCQkJInNkaGMxLWNhcmQtZGV0ZWN0IiwgZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIG14dF90ZDYwX3NkaGMxX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWZyZWVfaXJxKElSUV9HUElPRig4KSwgZGF0YSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgc2RoYzFfcGRhdGEgPSB7CisJLmluaXQgPSBteHRfdGQ2MF9zZGhjMV9pbml0LAorCS5leGl0ID0gbXh0X3RkNjBfc2RoYzFfZXhpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmbXhjX2ZlY19kZXZpY2UsCit9OworCitzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhW10gPSB7CisJeworCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorCX0sIHsKKwkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKKwl9LCB7CisJCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteHRfdGQ2MF9ib2FyZF9pbml0KHZvaWQpCit7CisJbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteHRfdGQ2MF9waW5zLCBBUlJBWV9TSVpFKG14dF90ZDYwX3BpbnMpLAorCQkJIk1YVF9URDYwIik7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YVswXSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgJnVhcnRfcGRhdGFbMV0pOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTIsICZ1YXJ0X3BkYXRhWzJdKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZpbXgyN19uYW5kX2RldmljZSwgJm14dF90ZDYwX25hbmRfYm9hcmRfaW5mbyk7CisKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBteHRfdGQ2MF9pMmNfZGV2aWNlcywKKwkJCQlBUlJBWV9TSVpFKG14dF90ZDYwX2kyY19kZXZpY2VzKSk7CisKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBteHRfdGQ2MF9pMmMyX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShteHRfdGQ2MF9pMmMyX2RldmljZXMpKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMCwgJm14dF90ZDYwX2kyY19kYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTEsICZteHRfdGQ2MF9pMmMyX2RhdGEpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19mYl9kZXZpY2UsICZteHRfdGQ2MF9mYl9kYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UwLCAmc2RoYzFfcGRhdGEpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteHRfdGQ2MF90aW1lcl9pbml0KHZvaWQpCit7CisJbXgyN19jbG9ja3NfaW5pdCgyNjAwMDAwMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIG14dF90ZDYwX3RpbWVyID0geworCS5pbml0CT0gbXh0X3RkNjBfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoTVhUX1RENjAsICJNYXh0cmFjayBpLU1YVCBURDYwIikKKwkvKiBtYWludGFpbmVyOiBNYXh0cmFjayBJbmR1c3RyaWFsICovCisJLnBoeXNfaW8JPSBNWDI3X0FJUElfQkFTRV9BRERSLAorCS5pb19wZ19vZmZzdAk9ICgoTVgyN19BSVBJX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gTVgyN19QSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8JCT0gbXgyN19tYXBfaW8sCisJLmluaXRfaXJxCT0gbXgyN19pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gbXh0X3RkNjBfYm9hcmRfaW5pdCwKKwkudGltZXIJCT0gJm14dF90ZDYwX3RpbWVyLAorTUFDSElORV9FTkQKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvbWFjaC1wY2ExMDAuYyBiL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtcGNhMTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc4ZmZmMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtcGNhMTAwLmMKQEAgLTAsMCArMSwzOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBSb2JlcnQgU2Nod2ViZWwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+LCBQZW5ndXRyb25peAorICogQ29weXJpZ2h0IChDKSAyMDA5IFNhc2NoYSBIYXVlciAoa2VybmVsQHBlbmd1dHJvbml4LmRlKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9hdDI0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL2VlcHJvbS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvdWxwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjcuaD4KKyNpbmNsdWRlIDxtYWNoL2kyYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpZiBkZWZpbmVkKENPTkZJR19TUElfSU1YKSB8fCBkZWZpbmVkKENPTkZJR19TUElfSU1YX01PRFVMRSkKKyNpbmNsdWRlIDxtYWNoL3NwaS5oPgorI2VuZGlmCisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorI2luY2x1ZGUgPG1hY2gvYXVkbXV4Lmg+CisjaW5jbHVkZSA8bWFjaC9zc2kuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CisjaW5jbHVkZSA8bWFjaC91bHBpLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKyNkZWZpbmUgT1RHX1BIWV9DU19HUElPIChHUElPX1BPUlRCICsgMjMpCisjZGVmaW5lIFVTQkgyX1BIWV9DU19HUElPIChHUElPX1BPUlRCICsgMjQpCisKK3N0YXRpYyBpbnQgcGNhMTAwX3BpbnNbXSA9IHsKKwkvKiBVQVJUMSAqLworCVBFMTJfUEZfVUFSVDFfVFhELAorCVBFMTNfUEZfVUFSVDFfUlhELAorCVBFMTRfUEZfVUFSVDFfQ1RTLAorCVBFMTVfUEZfVUFSVDFfUlRTLAorCS8qIFNESEMgKi8KKwlQQjRfUEZfU0QyX0QwLAorCVBCNV9QRl9TRDJfRDEsCisJUEI2X1BGX1NEMl9EMiwKKwlQQjdfUEZfU0QyX0QzLAorCVBCOF9QRl9TRDJfQ01ELAorCVBCOV9QRl9TRDJfQ0xLLAorCS8qIEZFQyAqLworCVBEMF9BSU5fRkVDX1RYRDAsCisJUEQxX0FJTl9GRUNfVFhEMSwKKwlQRDJfQUlOX0ZFQ19UWEQyLAorCVBEM19BSU5fRkVDX1RYRDMsCisJUEQ0X0FPVVRfRkVDX1JYX0VSLAorCVBENV9BT1VUX0ZFQ19SWEQxLAorCVBENl9BT1VUX0ZFQ19SWEQyLAorCVBEN19BT1VUX0ZFQ19SWEQzLAorCVBEOF9BRl9GRUNfTURJTywKKwlQRDlfQUlOX0ZFQ19NREMsCisJUEQxMF9BT1VUX0ZFQ19DUlMsCisJUEQxMV9BT1VUX0ZFQ19UWF9DTEssCisJUEQxMl9BT1VUX0ZFQ19SWEQwLAorCVBEMTNfQU9VVF9GRUNfUlhfRFYsCisJUEQxNF9BT1VUX0ZFQ19SWF9DTEssCisJUEQxNV9BT1VUX0ZFQ19DT0wsCisJUEQxNl9BSU5fRkVDX1RYX0VSLAorCVBGMjNfQUlOX0ZFQ19UWF9FTiwKKwkvKiBTU0kxICovCisJUEMyMF9QRl9TU0kxX0ZTLAorCVBDMjFfUEZfU1NJMV9SWEQsCisJUEMyMl9QRl9TU0kxX1RYRCwKKwlQQzIzX1BGX1NTSTFfQ0xLLAorCS8qIG9uYm9hcmQgSTJDICovCisJUEM1X1BGX0kyQzJfU0RBLAorCVBDNl9QRl9JMkMyX1NDTCwKKwkvKiBleHRlcm5hbCBJMkMgKi8KKwlQRDE3X1BGX0kyQ19EQVRBLAorCVBEMThfUEZfSTJDX0NMSywKKwkvKiBTUEkxICovCisJUEQyNV9QRl9DU1BJMV9SRFksCisJUEQyOV9QRl9DU1BJMV9TQ0xLLAorCVBEMzBfUEZfQ1NQSTFfTUlTTywKKwlQRDMxX1BGX0NTUEkxX01PU0ksCisJLyogT1RHICovCisJT1RHX1BIWV9DU19HUElPIHwgR1BJT19HUElPIHwgR1BJT19PVVQsCisJUEM3X1BGX1VTQk9UR19EQVRBNSwKKwlQQzhfUEZfVVNCT1RHX0RBVEE2LAorCVBDOV9QRl9VU0JPVEdfREFUQTAsCisJUEMxMF9QRl9VU0JPVEdfREFUQTIsCisJUEMxMV9QRl9VU0JPVEdfREFUQTEsCisJUEMxMl9QRl9VU0JPVEdfREFUQTQsCisJUEMxM19QRl9VU0JPVEdfREFUQTMsCisJUEUwX1BGX1VTQk9UR19OWFQsCisJUEUxX1BGX1VTQk9UR19TVFAsCisJUEUyX1BGX1VTQk9UR19ESVIsCisJUEUyNF9QRl9VU0JPVEdfQ0xLLAorCVBFMjVfUEZfVVNCT1RHX0RBVEE3LAorCS8qIFVTQkgyICovCisJVVNCSDJfUEhZX0NTX0dQSU8gfCBHUElPX0dQSU8gfCBHUElPX09VVCwKKwlQQTBfUEZfVVNCSDJfQ0xLLAorCVBBMV9QRl9VU0JIMl9ESVIsCisJUEEyX1BGX1VTQkgyX0RBVEE3LAorCVBBM19QRl9VU0JIMl9OWFQsCisJUEE0X1BGX1VTQkgyX1NUUCwKKwlQRDE5X0FGX1VTQkgyX0RBVEE0LAorCVBEMjBfQUZfVVNCSDJfREFUQTMsCisJUEQyMV9BRl9VU0JIMl9EQVRBNiwKKwlQRDIyX0FGX1VTQkgyX0RBVEEwLAorCVBEMjNfQUZfVVNCSDJfREFUQTIsCisJUEQyNF9BRl9VU0JIMl9EQVRBMSwKKwlQRDI2X0FGX1VTQkgyX0RBVEE1LAorfTsKKworc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKKwkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorfTsKKworc3RhdGljIHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhIHBjYTEwMF9uYW5kX2JvYXJkX2luZm8gPSB7CisJLndpZHRoID0gMSwKKwkuaHdfZWNjID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmbXhjX3cxX21hc3Rlcl9kZXZpY2UsCisJJm14Y19mZWNfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBwY2ExMDBfaTJjXzFfZGF0YSA9IHsKKwkuYml0cmF0ZSA9IDEwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXQyNF9wbGF0Zm9ybV9kYXRhIGJvYXJkX2VlcHJvbSA9IHsKKwkuYnl0ZV9sZW4gPSA0MDk2LAorCS5wYWdlX3NpemUgPSAzMiwKKwkuZmxhZ3MgPSBBVDI0X0ZMQUdfQUREUjE2LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBwY2ExMDBfaTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJhdDI0IiwgMHg1MiksIC8qIEUwPTAsIEUxPTEsIEUyPTAgKi8KKwkJLnBsYXRmb3JtX2RhdGEgPSAmYm9hcmRfZWVwcm9tLAorCX0sIHsKKwkJSTJDX0JPQVJEX0lORk8oInJ0Yy1wY2Y4NTYzIiwgMHg1MSksCisJCS50eXBlID0gInBjZjg1NjMiCisJfSwgeworCQlJMkNfQk9BUkRfSU5GTygibG03NSIsIDB4NGEpLAorCQkudHlwZSA9ICJsbTc1IgorCX0KK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19TUElfSU1YKSB8fCBkZWZpbmVkKENPTkZJR19TUElfSU1YX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2VlcHJvbSBhdDI1MzIwID0geworCS5uYW1lCQk9ICJhdDI1MzIwYW4iLAorCS5ieXRlX2xlbgk9IDQwOTYsCisJLnBhZ2Vfc2l6ZQk9IDMyLAorCS5mbGFncwkJPSBFRV9BRERSMiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gcGNhMTAwX3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5tb2RhbGlhcyA9ICJhdDI1IiwKKwkJLm1heF9zcGVlZF9oeiA9IDMwMDAwLAorCQkuYnVzX251bSA9IDAsCisJCS5jaGlwX3NlbGVjdCA9IDEsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmF0MjUzMjAsCisJfSwKK307CisKK3N0YXRpYyBpbnQgcGNhMTAwX3NwaV9jc1tdID0ge0dQSU9fUE9SVEQgKyAyOCwgR1BJT19QT1JURCArIDI3fTsKKworc3RhdGljIHN0cnVjdCBzcGlfaW14X21hc3RlciBwY2ExMDBfc3BpXzBfZGF0YSA9IHsKKwkuY2hpcHNlbGVjdAk9IHBjYTEwMF9zcGlfY3MsCisJLm51bV9jaGlwc2VsZWN0ID0gQVJSQVlfU0laRShwY2ExMDBfc3BpX2NzKSwKK307CisjZW5kaWYKKworc3RhdGljIHZvaWQgcGNhMTAwX2FjOTdfd2FybV9yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCit7CisJbXhjX2dwaW9fbW9kZShHUElPX1BPUlRDIHwgMjAgfCBHUElPX0dQSU8gfCBHUElPX09VVCk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QT1JUQyArIDIwLCAxKTsKKwl1ZGVsYXkoMik7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QT1JUQyArIDIwLCAwKTsKKwlteGNfZ3Bpb19tb2RlKFBDMjBfUEZfU1NJMV9GUyk7CisJbXNsZWVwKDIpOworfQorCitzdGF0aWMgdm9pZCBwY2ExMDBfYWM5N19jb2xkX3Jlc2V0KHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKK3sKKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEMgfCAyMCB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsgIC8qIEZTICovCisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QT1JUQyArIDIwLCAwKTsKKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEMgfCAyMiB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsgIC8qIFRYICovCisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QT1JUQyArIDIyLCAwKTsKKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEMgfCAyOCB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsgIC8qIHJlc2V0ICovCisJZ3Bpb19zZXRfdmFsdWUoR1BJT19QT1JUQyArIDI4LCAwKTsKKwl1ZGVsYXkoMTApOworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fUE9SVEMgKyAyOCwgMSk7CisJbXhjX2dwaW9fbW9kZShQQzIwX1BGX1NTSTFfRlMpOworCW14Y19ncGlvX21vZGUoUEMyMl9QRl9TU0kxX1RYRCk7CisJbXNsZWVwKDIpOworfQorCitzdGF0aWMgc3RydWN0IGlteF9zc2lfcGxhdGZvcm1fZGF0YSBwY2ExMDBfc3NpX3BkYXRhID0geworCS5hYzk3X3Jlc2V0CQk9IHBjYTEwMF9hYzk3X2NvbGRfcmVzZXQsCisJLmFjOTdfd2FybV9yZXNldAk9IHBjYTEwMF9hYzk3X3dhcm1fcmVzZXQsCisJLmZsYWdzCQkJPSBJTVhfU1NJX1VTRV9BQzk3LAorfTsKKworc3RhdGljIGludCBwY2ExMDBfc2RoYzJfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgZGV0ZWN0X2lycSwKKwkJdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcmVxdWVzdF9pcnEoSVJRX0dQSU9DKDI5KSwgZGV0ZWN0X2lycSwKKwkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJICAiaW14LW1tYy1kZXRlY3QiLCBkYXRhKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIKKwkJCSJwY2ExMDA6IEZhaWxlZCB0byByZXVlc3QgaXJxIGZvciBzZC9tbWMgZGV0ZWN0aW9uXG4iKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHBjYTEwMF9zZGhjMl9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlmcmVlX2lycShJUlFfR1BJT0MoMjkpLCBkYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjX3BkYXRhID0geworCS5pbml0ID0gcGNhMTAwX3NkaGMyX2luaXQsCisJLmV4aXQgPSBwY2ExMDBfc2RoYzJfZXhpdCwKK307CisKK3N0YXRpYyBpbnQgb3RnX3BoeV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJZ3Bpb19zZXRfdmFsdWUoT1RHX1BIWV9DU19HUElPLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIG90Z19wZGF0YSA9IHsKKwkuaW5pdAk9IG90Z19waHlfaW5pdCwKKwkucG9ydHNjCT0gTVhDX0VIQ0lfTU9ERV9VTFBJLAorCS5mbGFncwk9IE1YQ19FSENJX0lOVEVSRkFDRV9ESUZGX1VOSSwKK307CisKK3N0YXRpYyBpbnQgdXNiaDJfcGh5X2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlncGlvX3NldF92YWx1ZShVU0JIMl9QSFlfQ1NfR1BJTywgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB1c2JoMl9wZGF0YSA9IHsKKwkuaW5pdAk9IHVzYmgyX3BoeV9pbml0LAorCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEksCisJLmZsYWdzCT0gTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JLAorfTsKKworc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIG90Z19kZXZpY2VfcGRhdGEgPSB7CisJLm9wZXJhdGluZ19tb2RlID0gRlNMX1VTQjJfRFJfREVWSUNFLAorCS5waHlfbW9kZSAgICAgICA9IEZTTF9VU0IyX1BIWV9VTFBJLAorfTsKKworc3RhdGljIGludCBvdGdfbW9kZV9ob3N0OworCitzdGF0aWMgaW50IF9faW5pdCBwY2ExMDBfb3RnX21vZGUoY2hhciAqb3B0aW9ucykKK3sKKwlpZiAoIXN0cmNtcChvcHRpb25zLCAiaG9zdCIpKQorCQlvdGdfbW9kZV9ob3N0ID0gMTsKKwllbHNlIGlmICghc3RyY21wKG9wdGlvbnMsICJkZXZpY2UiKSkKKwkJb3RnX21vZGVfaG9zdCA9IDA7CisJZWxzZQorCQlwcl9pbmZvKCJvdGdfbW9kZSBuZWl0aGVyIFwiaG9zdFwiIG5vciBcImRldmljZVwiLiAiCisJCQkiRGVmYXVsdGluZyB0byBkZXZpY2VcbiIpOworCXJldHVybiAwOworfQorX19zZXR1cCgib3RnX21vZGU9IiwgcGNhMTAwX290Z19tb2RlKTsKKworc3RhdGljIHZvaWQgX19pbml0IHBjYTEwMF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCS8qIFNTSSB1bml0ICovCisJbXhjX2F1ZG11eF92MV9jb25maWd1cmVfcG9ydChNWDI3X0FVRE1VWF9IUENSMV9TU0kwLAorCQkJCSAgTVhDX0FVRE1VWF9WMV9QQ1JfU1lOIHwgLyogNHdpcmUgbW9kZSAqLworCQkJCSAgTVhDX0FVRE1VWF9WMV9QQ1JfVEZDU0VMKDMpIHwKKwkJCQkgIE1YQ19BVURNVVhfVjFfUENSX1RDTEtESVIgfCAvKiBjbG9jayBpcyBvdXRwdXQgKi8KKwkJCQkgIE1YQ19BVURNVVhfVjFfUENSX1JYRFNFTCgzKSk7CisJbXhjX2F1ZG11eF92MV9jb25maWd1cmVfcG9ydCgzLAorCQkJCSAgTVhDX0FVRE1VWF9WMV9QQ1JfU1lOIHwgLyogNHdpcmUgbW9kZSAqLworCQkJCSAgTVhDX0FVRE1VWF9WMV9QQ1JfVEZDU0VMKDApIHwKKwkJCQkgIE1YQ19BVURNVVhfVjFfUENSX1RGU0RJUiB8CisJCQkJICBNWENfQVVETVVYX1YxX1BDUl9SWERTRUwoMCkpOworCisJcmV0ID0gbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhwY2ExMDBfcGlucywKKwkJCUFSUkFZX1NJWkUocGNhMTAwX3BpbnMpLCAiUENBMTAwIik7CisJaWYgKHJldCkKKwkJcHJpbnRrKEtFUk5fRVJSICJwY2ExMDA6IEZhaWxlZCB0byBzZXR1cCBwaW5zICglZClcbiIsIHJldCk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZpbXhfc3NpX2RldmljZTAsICZwY2ExMDBfc3NpX3BkYXRhKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKKworCW14Y19ncGlvX21vZGUoR1BJT19QT1JUQyB8IDI5IHwgR1BJT19HUElPIHwgR1BJT19JTik7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NkaGNfZGV2aWNlMSwgJnNkaGNfcGRhdGEpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14MjdfbmFuZF9kZXZpY2UsICZwY2ExMDBfbmFuZF9ib2FyZF9pbmZvKTsKKworCS8qIG9ubHkgdGhlIGkyYyBtYXN0ZXIgMSBpcyB1c2VkIG9uIHRoaXMgQ1BVIGNhcmQgKi8KKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBwY2ExMDBfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShwY2ExMDBfaTJjX2RldmljZXMpKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMSwgJnBjYTEwMF9pMmNfMV9kYXRhKTsKKworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI3IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCisJLyogR1BJTzBfSVJRICovCisJbXhjX2dwaW9fbW9kZShHUElPX1BPUlRDIHwgMzEgfCBHUElPX0dQSU8gfCBHUElPX0lOKTsKKwkvKiBHUElPMV9JUlEgKi8KKwlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEMgfCAyNSB8IEdQSU9fR1BJTyB8IEdQSU9fSU4pOworCS8qIEdQSU8yX0lSUSAqLworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURSB8IDUgfCBHUElPX0dQSU8gfCBHUElPX0lOKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NQSV9JTVgpIHx8IGRlZmluZWQoQ09ORklHX1NQSV9JTVhfTU9EVUxFKQorCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHBjYTEwMF9zcGlfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKHBjYTEwMF9zcGlfYm9hcmRfaW5mbykpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19zcGlfZGV2aWNlMCwgJnBjYTEwMF9zcGlfMF9kYXRhKTsKKyNlbmRpZgorCisJZ3Bpb19yZXF1ZXN0KE9UR19QSFlfQ1NfR1BJTywgInVzYi1vdGctY3MiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoT1RHX1BIWV9DU19HUElPLCAxKTsKKwlncGlvX3JlcXVlc3QoVVNCSDJfUEhZX0NTX0dQSU8sICJ1c2ItaG9zdDItY3MiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoVVNCSDJfUEhZX0NTX0dQSU8sIDEpOworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1VMUEkpCisJaWYgKG90Z19tb2RlX2hvc3QpIHsKKwkJb3RnX3BkYXRhLm90ZyA9IG90Z191bHBpX2NyZWF0ZSgmbXhjX3VscGlfYWNjZXNzX29wcywKKwkJCQlVU0JfT1RHX0RSVl9WQlVTIHwgVVNCX09UR19EUlZfVkJVU19FWFQpOworCisJCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19vdGdfaG9zdCwgJm90Z19wZGF0YSk7CisJfQorCisJdXNiaDJfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAorCQkJCVVTQl9PVEdfRFJWX1ZCVVMgfCBVU0JfT1RHX0RSVl9WQlVTX0VYVCk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDIsICZ1c2JoMl9wZGF0YSk7CisjZW5kaWYKKwlpZiAoIW90Z19tb2RlX2hvc3QpIHsKKwkJZ3Bpb19zZXRfdmFsdWUoT1RHX1BIWV9DU19HUElPLCAwKTsKKwkJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z191ZGNfZGV2aWNlLCAmb3RnX2RldmljZV9wZGF0YSk7CisJfQorCisJcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwY2ExMDBfdGltZXJfaW5pdCh2b2lkKQoreworCW14MjdfY2xvY2tzX2luaXQoMjYwMDAwMDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBwY2ExMDBfdGltZXIgPSB7CisJLmluaXQgPSBwY2ExMDBfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoUENBMTAwLCAicGh5Q0FSRC1pLk1YMjciKQorCS5waHlzX2lvICAgICAgICA9IE1YMjdfQUlQSV9CQVNFX0FERFIsCisJLmlvX3BnX29mZnN0ICAgID0gKChNWDI3X0FJUElfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMgICAgPSBNWDI3X1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyAgICAgICAgID0gbXgyN19tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gbXgyN19pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lICAgPSBwY2ExMDBfaW5pdCwKKwkudGltZXIgICAgICAgICAgPSAmcGNhMTAwX3RpbWVyLAorTUFDSElORV9FTkQKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvbWFjaC1wY20wMzguYyBiL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtcGNtMDM4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM1ZmJlMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL21hY2gtcGNtMDM4LmMKQEAgLTAsMCArMSwzNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwNyBSb2JlcnQgU2Nod2ViZWwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+LCBQZW5ndXRyb25peAorICogQ29weXJpZ2h0IChDKSAyMDA4IEp1ZXJnZW4gQmVpc2VydCAoa2VybmVsQHBlbmd1dHJvbml4LmRlKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvYXQyNC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BsYXQtcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9tYzEzNzgzLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjaW5jbHVkZSA8bWFjaC9ib2FyZC1wY20wMzguaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2kyYy5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyNy5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+CisjaW5jbHVkZSA8bWFjaC9zcGkuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CisjaW5jbHVkZSA8bWFjaC91bHBpLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKK3N0YXRpYyBpbnQgcGNtMDM4X3BpbnNbXSA9IHsKKwkvKiBVQVJUMSAqLworCVBFMTJfUEZfVUFSVDFfVFhELAorCVBFMTNfUEZfVUFSVDFfUlhELAorCVBFMTRfUEZfVUFSVDFfQ1RTLAorCVBFMTVfUEZfVUFSVDFfUlRTLAorCS8qIFVBUlQyICovCisJUEUzX1BGX1VBUlQyX0NUUywKKwlQRTRfUEZfVUFSVDJfUlRTLAorCVBFNl9QRl9VQVJUMl9UWEQsCisJUEU3X1BGX1VBUlQyX1JYRCwKKwkvKiBVQVJUMyAqLworCVBFOF9QRl9VQVJUM19UWEQsCisJUEU5X1BGX1VBUlQzX1JYRCwKKwlQRTEwX1BGX1VBUlQzX0NUUywKKwlQRTExX1BGX1VBUlQzX1JUUywKKwkvKiBGRUMgKi8KKwlQRDBfQUlOX0ZFQ19UWEQwLAorCVBEMV9BSU5fRkVDX1RYRDEsCisJUEQyX0FJTl9GRUNfVFhEMiwKKwlQRDNfQUlOX0ZFQ19UWEQzLAorCVBENF9BT1VUX0ZFQ19SWF9FUiwKKwlQRDVfQU9VVF9GRUNfUlhEMSwKKwlQRDZfQU9VVF9GRUNfUlhEMiwKKwlQRDdfQU9VVF9GRUNfUlhEMywKKwlQRDhfQUZfRkVDX01ESU8sCisJUEQ5X0FJTl9GRUNfTURDLAorCVBEMTBfQU9VVF9GRUNfQ1JTLAorCVBEMTFfQU9VVF9GRUNfVFhfQ0xLLAorCVBEMTJfQU9VVF9GRUNfUlhEMCwKKwlQRDEzX0FPVVRfRkVDX1JYX0RWLAorCVBEMTRfQU9VVF9GRUNfUlhfQ0xLLAorCVBEMTVfQU9VVF9GRUNfQ09MLAorCVBEMTZfQUlOX0ZFQ19UWF9FUiwKKwlQRjIzX0FJTl9GRUNfVFhfRU4sCisJLyogSTJDMiAqLworCVBDNV9QRl9JMkMyX1NEQSwKKwlQQzZfUEZfSTJDMl9TQ0wsCisJLyogU1BJMSAqLworCVBEMjVfUEZfQ1NQSTFfUkRZLAorCVBEMjlfUEZfQ1NQSTFfU0NMSywKKwlQRDMwX1BGX0NTUEkxX01JU08sCisJUEQzMV9QRl9DU1BJMV9NT1NJLAorCS8qIFNTSTEgKi8KKwlQQzIwX1BGX1NTSTFfRlMsCisJUEMyMV9QRl9TU0kxX1JYRCwKKwlQQzIyX1BGX1NTSTFfVFhELAorCVBDMjNfUEZfU1NJMV9DTEssCisJLyogU1NJNCAqLworCVBDMTZfUEZfU1NJNF9GUywKKwlQQzE3X1BGX1NTSTRfUlhELAorCVBDMThfUEZfU1NJNF9UWEQsCisJUEMxOV9QRl9TU0k0X0NMSywKKwkvKiBVU0IgaG9zdCAqLworCVBBMF9QRl9VU0JIMl9DTEssCisJUEExX1BGX1VTQkgyX0RJUiwKKwlQQTJfUEZfVVNCSDJfREFUQTcsCisJUEEzX1BGX1VTQkgyX05YVCwKKwlQQTRfUEZfVVNCSDJfU1RQLAorCVBEMTlfQUZfVVNCSDJfREFUQTQsCisJUEQyMF9BRl9VU0JIMl9EQVRBMywKKwlQRDIxX0FGX1VTQkgyX0RBVEE2LAorCVBEMjJfQUZfVVNCSDJfREFUQTAsCisJUEQyM19BRl9VU0JIMl9EQVRBMiwKKwlQRDI0X0FGX1VTQkgyX0RBVEExLAorCVBEMjZfQUZfVVNCSDJfREFUQTUsCit9OworCisvKgorICogUGh5dGVjJ3MgUENNMDM4IGNvbWVzIHdpdGggMk1pQiBiYXR0ZXJ5IGJ1ZmZlcmVkIFNSQU0sCisgKiAxNiBiaXQgd2lkdGgKKyAqLworCitzdGF0aWMgc3RydWN0IHBsYXRkYXRhX210ZF9yYW0gcGNtMDM4X3NyYW1fZGF0YSA9IHsKKwkuYmFua3dpZHRoID0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNtMDM4X3NyYW1fcmVzb3VyY2UgPSB7CisJLnN0YXJ0ID0gTVgyN19DUzFfQkFTRV9BRERSLAorCS5lbmQgICA9IE1YMjdfQ1MxX0JBU0VfQUREUiArIDUxMiAqIDEwMjQgLSAxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNtMDM4X3NyYW1fbXRkX2RldmljZSA9IHsKKwkubmFtZSA9ICJtdGQtcmFtIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBjbTAzOF9zcmFtX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCisJLnJlc291cmNlID0gJnBjbTAzOF9zcmFtX3Jlc291cmNlLAorfTsKKworLyoKKyAqIFBoeXRlYydzIHBoeUNPUkUtaS5NWDI3IGNvbWVzIHdpdGggMzJNaUIgZmxhc2gsCisgKiAxNiBiaXQgd2lkdGgKKyAqLworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGNtMDM4X2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoID0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNtMDM4X2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydCA9IDB4YzAwMDAwMDAsCisJLmVuZCAgID0gMHhjMWZmZmZmZiwKKwkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjbTAzOF9ub3JfbXRkX2RldmljZSA9IHsKKwkubmFtZSA9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBjbTAzOF9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMgPSAxLAorCS5yZXNvdXJjZSA9ICZwY20wMzhfZmxhc2hfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhW10gPSB7CisJeworCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorCX0sIHsKKwkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKKwl9LCB7CisJCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSBwY20wMzhfbmFuZF9ib2FyZF9pbmZvID0geworCS53aWR0aCA9IDEsCisJLmh3X2VjYyA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnBjbTAzOF9ub3JfbXRkX2RldmljZSwKKwkmbXhjX3cxX21hc3Rlcl9kZXZpY2UsCisJJm14Y19mZWNfZGV2aWNlLAorCSZwY20wMzhfc3JhbV9tdGRfZGV2aWNlLAorfTsKKworLyogT24gcGNtMDM4IHRoZXJlJ3MgYSBzcmFtIGF0dGFjaGVkIHRvIENTMSwgd2UgZW5hYmxlIHRoZSBjaGlwc2VsZWN0IGhlcmUgYW5kCisgKiBzZXR1cCBvdGhlciBzdHVmZnMgdG8gYWNjZXNzIHRoZSBzcmFtLiAqLworc3RhdGljIHZvaWQgX19pbml0IHBjbTAzOF9pbml0X3NyYW0odm9pZCkKK3sKKwlteDI3X3NldHVwX3dlaW1jcygxLCAweDAwMDBkODQzLCAweDIyMjUyNTIxLCAweDIyMjIwYTAwKTsKK30KKworc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBwY20wMzhfaTJjXzFfZGF0YSA9IHsKKwkuYml0cmF0ZSA9IDEwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXQyNF9wbGF0Zm9ybV9kYXRhIGJvYXJkX2VlcHJvbSA9IHsKKwkuYnl0ZV9sZW4gPSA0MDk2LAorCS5wYWdlX3NpemUgPSAzMiwKKwkuZmxhZ3MgPSBBVDI0X0ZMQUdfQUREUjE2LAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBwY20wMzhfaTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJhdDI0IiwgMHg1MiksIC8qIEUwPTAsIEUxPTEsIEUyPTAgKi8KKwkJLnBsYXRmb3JtX2RhdGEgPSAmYm9hcmRfZWVwcm9tLAorCX0sIHsKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1NjMiLCAweDUxKSwKKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCJsbTc1IiwgMHg0YSksCisJfQorfTsKKworc3RhdGljIGludCBwY20wMzhfc3BpX2NzW10gPSB7R1BJT19QT1JURCArIDI4fTsKKworc3RhdGljIHN0cnVjdCBzcGlfaW14X21hc3RlciBwY20wMzhfc3BpXzBfZGF0YSA9IHsKKwkuY2hpcHNlbGVjdCA9IHBjbTAzOF9zcGlfY3MsCisJLm51bV9jaGlwc2VsZWN0ID0gQVJSQVlfU0laRShwY20wMzhfc3BpX2NzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZGhjMV9jb25zdW1lcnNbXSA9IHsKKwl7CisJCS5kZXYJPSAmbXhjX3NkaGNfZGV2aWNlMS5kZXYsCisJCS5zdXBwbHkJPSAic2RoY192Y2MiLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RoYzFfZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYgPSAzMDAwMDAwLAorCQkubWF4X3VWID0gMzQwMDAwMCwKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKKwkJCVJFR1VMQVRPUl9DSEFOR0VfTU9ERSB8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCB8CisJCQlSRUdVTEFUT1JfTU9ERV9GQVNULAorCQkuYWx3YXlzX29uID0gMCwKKwkJLmJvb3Rfb24gPSAwLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoc2RoYzFfY29uc3VtZXJzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSBzZGhjMV9jb25zdW1lcnMsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgY2FtX2NvbnN1bWVyc1tdID0geworCXsKKwkJLmRldgk9IE5VTEwsCisJCS5zdXBwbHkJPSAiaW14X2NhbV92Y2MiLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgY2FtX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWID0gMzAwMDAwMCwKKwkJLm1heF91ViA9IDM0MDAwMDAsCisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8CisJCQlSRUdVTEFUT1JfQ0hBTkdFX01PREUgfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwgfAorCQkJUkVHVUxBVE9SX01PREVfRkFTVCwKKwkJLmFsd2F5c19vbiA9IDAsCisJCS5ib290X29uID0gMCwKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKGNhbV9jb25zdW1lcnMpLAorCS5jb25zdW1lcl9zdXBwbGllcyA9IGNhbV9jb25zdW1lcnMsCit9OworCitzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfaW5pdF9kYXRhIHBjbTAzOF9yZWd1bGF0b3JzW10gPSB7CisJeworCQkuaWQgPSBNQzEzNzgzX1JFR1VfVkNBTSwKKwkJLmluaXRfZGF0YSA9ICZjYW1fZGF0YSwKKwl9LCB7CisJCS5pZCA9IE1DMTM3ODNfUkVHVV9WTU1DMSwKKwkJLmluaXRfZGF0YSA9ICZzZGhjMV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG1jMTM3ODNfcGxhdGZvcm1fZGF0YSBwY20wMzhfcG1pYyA9IHsKKwkucmVndWxhdG9ycyA9IHBjbTAzOF9yZWd1bGF0b3JzLAorCS5udW1fcmVndWxhdG9ycyA9IEFSUkFZX1NJWkUocGNtMDM4X3JlZ3VsYXRvcnMpLAorCS5mbGFncyA9IE1DMTM3ODNfVVNFX0FEQyB8IE1DMTM3ODNfVVNFX1JFR1VMQVRPUiB8CisJCSBNQzEzNzgzX1VTRV9UT1VDSFNDUkVFTiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gcGNtMDM4X3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS5tb2RhbGlhcyA9ICJtYzEzNzgzIiwKKwkJLmlycSA9IElSUV9HUElPQigyMyksCisJCS5tYXhfc3BlZWRfaHogPSAzMDAwMDAsCisJCS5idXNfbnVtID0gMCwKKwkJLmNoaXBfc2VsZWN0ID0gMCwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGNtMDM4X3BtaWMsCisJCS5tb2RlID0gU1BJX0NTX0hJR0gsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhID0geworCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEksCisJLmZsYWdzCT0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEIHwgTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHBjbTAzOF9pbml0KHZvaWQpCit7CisJbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhwY20wMzhfcGlucywgQVJSQVlfU0laRShwY20wMzhfcGlucyksCisJCQkiUENNMDM4Iik7CisKKwlwY20wMzhfaW5pdF9zcmFtKCk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YVswXSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgJnVhcnRfcGRhdGFbMV0pOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTIsICZ1YXJ0X3BkYXRhWzJdKTsKKworCW14Y19ncGlvX21vZGUoUEUxNl9BRl9PV0lSRSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14MjdfbmFuZF9kZXZpY2UsICZwY20wMzhfbmFuZF9ib2FyZF9pbmZvKTsKKworCS8qIG9ubHkgdGhlIGkyYyBtYXN0ZXIgMSBpcyB1c2VkIG9uIHRoaXMgQ1BVIGNhcmQgKi8KKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBwY20wMzhfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShwY20wMzhfaTJjX2RldmljZXMpKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMSwgJnBjbTAzOF9pMmNfMV9kYXRhKTsKKworCS8qIFBFMTggZm9yIHVzZXItTEVEIEQ0MCAqLworCW14Y19ncGlvX21vZGUoR1BJT19QT1JURSB8IDE4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOworCisJbXhjX2dwaW9fbW9kZShHUElPX1BPUlREIHwgMjggfCBHUElPX0dQSU8gfCBHUElPX09VVCk7CisKKwkvKiBNQzEzNzgzIElSUSAqLworCW14Y19ncGlvX21vZGUoR1BJT19QT1JUQiB8IDIzIHwgR1BJT19HUElPIHwgR1BJT19JTik7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc3BpX2RldmljZTAsICZwY20wMzhfc3BpXzBfZGF0YSk7CisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8ocGNtMDM4X3NwaV9ib2FyZF9pbmZvLAorCQkJCUFSUkFZX1NJWkUocGNtMDM4X3NwaV9ib2FyZF9pbmZvKSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDIsICZ1c2JoMl9wZGF0YSk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKKworI2lmZGVmIENPTkZJR19NQUNIX1BDTTk3MF9CQVNFQk9BUkQKKwlwY205NzBfYmFzZWJvYXJkX2luaXQoKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcGNtMDM4X3RpbWVyX2luaXQodm9pZCkKK3sKKwlteDI3X2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgcGNtMDM4X3RpbWVyID0geworCS5pbml0ID0gcGNtMDM4X3RpbWVyX2luaXQsCit9OworCitNQUNISU5FX1NUQVJUKFBDTTAzOCwgInBoeUNPUkUtaS5NWDI3IikKKwkucGh5c19pbyAgICAgICAgPSBNWDI3X0FJUElfQkFTRV9BRERSLAorCS5pb19wZ19vZmZzdCAgICA9ICgoTVgyN19BSVBJX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zICAgID0gTVgyN19QSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8gICAgICAgICA9IG14MjdfbWFwX2lvLAorCS5pbml0X2lycSAgICAgICA9IG14MjdfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZSAgID0gcGNtMDM4X2luaXQsCisJLnRpbWVyICAgICAgICAgID0gJnBjbTAzOF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9tbS1pbXgyMS5jIGIvYXJjaC9hcm0vbWFjaC1teDIvbW0taW14MjEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDEzNDMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvbW0taW14MjEuYwpAQCAtMCwwICsxLDgzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1teDIvbW0taW14MjEuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBKdWVyZ2VuIEJlaXNlcnQgKGtlcm5lbEBwZW5ndXRyb25peC5kZSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworLyogTVgyMSBtZW1vcnkgbWFwIGRlZmluaXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaW14MjFfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJLyoKKwkgKiB0aGlzIGZpeGVkIG1hcHBpbmcgY292ZXJzOgorCSAqIC0gQUlQSTEKKwkgKiAtIEFJUEkyCisJICogLSBBSVRDCisJICogLSBST00gUGF0Y2gKKwkgKiAtIGFuZCBzb21lIHJlc2VydmVkIHNwYWNlCisJICovCisJeworCQkudmlydHVhbCA9IE1YMjFfQUlQSV9CQVNFX0FERFJfVklSVCwKKwkJLnBmbiA9IF9fcGh5c190b19wZm4oTVgyMV9BSVBJX0JBU0VfQUREUiksCisJCS5sZW5ndGggPSBNWDIxX0FJUElfU0laRSwKKwkJLnR5cGUgPSBNVF9ERVZJQ0UKKwl9LAorCS8qCisJICogdGhpcyBmaXhlZCBtYXBwaW5nIGNvdmVyczoKKwkgKiAtIENTSQorCSAqIC0gQVRBCisJICovCisJeworCQkudmlydHVhbCA9IE1YMjFfU0FIQjFfQkFTRV9BRERSX1ZJUlQsCisJCS5wZm4gPSBfX3BoeXNfdG9fcGZuKE1YMjFfU0FIQjFfQkFTRV9BRERSKSwKKwkJLmxlbmd0aCA9IE1YMjFfU0FIQjFfU0laRSwKKwkJLnR5cGUgPSBNVF9ERVZJQ0UKKwl9LAorCS8qCisJICogdGhpcyBmaXhlZCBtYXBwaW5nIGNvdmVyczoKKwkgKiAtIEVNSQorCSAqLworCXsKKwkJLnZpcnR1YWwgPSBNWDIxX1hfTUVNQ19CQVNFX0FERFJfVklSVCwKKwkJLnBmbiA9IF9fcGh5c190b19wZm4oTVgyMV9YX01FTUNfQkFTRV9BRERSKSwKKwkJLmxlbmd0aCA9IE1YMjFfWF9NRU1DX1NJWkUsCisJCS50eXBlID0gTVRfREVWSUNFCisJfSwKK307CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBtZW1vcnkgbWFwLiBJdCBpcyBjYWxsZWQgZHVyaW5nIHRoZQorICogc3lzdGVtIHN0YXJ0dXAgdG8gY3JlYXRlIHN0YXRpYyBwaHlzaWNhbCB0byB2aXJ0dWFsCisgKiBtZW1vcnkgbWFwIGZvciB0aGUgSU8gbW9kdWxlcy4KKyAqLwordm9pZCBfX2luaXQgbXgyMV9tYXBfaW8odm9pZCkKK3sKKwlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgyMSk7CisJbXhjX2FyY2hfcmVzZXRfaW5pdChNWDIxX0lPX0FERFJFU1MoTVgyMV9XRE9HX0JBU0VfQUREUikpOworCisJaW90YWJsZV9pbml0KGlteDIxX2lvX2Rlc2MsIEFSUkFZX1NJWkUoaW14MjFfaW9fZGVzYykpOworfQorCit2b2lkIF9faW5pdCBteDIxX2luaXRfaXJxKHZvaWQpCit7CisJbXhjX2luaXRfaXJxKE1YMjFfSU9fQUREUkVTUyhNWDIxX0FWSUNfQkFTRV9BRERSKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9tbS1pbXgyNy5jIGIvYXJjaC9hcm0vbWFjaC1teDIvbW0taW14MjcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzY2ZWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDIvbW0taW14MjcuYwpAQCAtMCwwICsxLDgzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1teDIvbW0taW14MjcuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBKdWVyZ2VuIEJlaXNlcnQgKGtlcm5lbEBwZW5ndXRyb25peC5kZSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworLyogTVgyNyBtZW1vcnkgbWFwIGRlZmluaXRpb24gKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaW14MjdfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJLyoKKwkgKiB0aGlzIGZpeGVkIG1hcHBpbmcgY292ZXJzOgorCSAqIC0gQUlQSTEKKwkgKiAtIEFJUEkyCisJICogLSBBSVRDCisJICogLSBST00gUGF0Y2gKKwkgKiAtIGFuZCBzb21lIHJlc2VydmVkIHNwYWNlCisJICovCisJeworCQkudmlydHVhbCA9IE1YMjdfQUlQSV9CQVNFX0FERFJfVklSVCwKKwkJLnBmbiA9IF9fcGh5c190b19wZm4oTVgyN19BSVBJX0JBU0VfQUREUiksCisJCS5sZW5ndGggPSBNWDI3X0FJUElfU0laRSwKKwkJLnR5cGUgPSBNVF9ERVZJQ0UKKwl9LAorCS8qCisJICogdGhpcyBmaXhlZCBtYXBwaW5nIGNvdmVyczoKKwkgKiAtIENTSQorCSAqIC0gQVRBCisJICovCisJeworCQkudmlydHVhbCA9IE1YMjdfU0FIQjFfQkFTRV9BRERSX1ZJUlQsCisJCS5wZm4gPSBfX3BoeXNfdG9fcGZuKE1YMjdfU0FIQjFfQkFTRV9BRERSKSwKKwkJLmxlbmd0aCA9IE1YMjdfU0FIQjFfU0laRSwKKwkJLnR5cGUgPSBNVF9ERVZJQ0UKKwl9LAorCS8qCisJICogdGhpcyBmaXhlZCBtYXBwaW5nIGNvdmVyczoKKwkgKiAtIEVNSQorCSAqLworCXsKKwkJLnZpcnR1YWwgPSBNWDI3X1hfTUVNQ19CQVNFX0FERFJfVklSVCwKKwkJLnBmbiA9IF9fcGh5c190b19wZm4oTVgyN19YX01FTUNfQkFTRV9BRERSKSwKKwkJLmxlbmd0aCA9IE1YMjdfWF9NRU1DX1NJWkUsCisJCS50eXBlID0gTVRfREVWSUNFCisJfSwKK307CisKKy8qCisgKiBJbml0aWFsaXplIHRoZSBtZW1vcnkgbWFwLiBJdCBpcyBjYWxsZWQgZHVyaW5nIHRoZQorICogc3lzdGVtIHN0YXJ0dXAgdG8gY3JlYXRlIHN0YXRpYyBwaHlzaWNhbCB0byB2aXJ0dWFsCisgKiBtZW1vcnkgbWFwIGZvciB0aGUgSU8gbW9kdWxlcy4KKyAqLwordm9pZCBfX2luaXQgbXgyN19tYXBfaW8odm9pZCkKK3sKKwlteGNfc2V0X2NwdV90eXBlKE1YQ19DUFVfTVgyNyk7CisJbXhjX2FyY2hfcmVzZXRfaW5pdChNWDI3X0lPX0FERFJFU1MoTVgyN19XRE9HX0JBU0VfQUREUikpOworCisJaW90YWJsZV9pbml0KGlteDI3X2lvX2Rlc2MsIEFSUkFZX1NJWkUoaW14MjdfaW9fZGVzYykpOworfQorCit2b2lkIF9faW5pdCBteDI3X2luaXRfaXJxKHZvaWQpCit7CisJbXhjX2luaXRfaXJxKE1YMjdfSU9fQUREUkVTUyhNWDI3X0FWSUNfQkFTRV9BRERSKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9teDIxYWRzLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9teDIxYWRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmNWY3N2MuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvbXgyMWFkcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjk0ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyIFNoYW5lIE5heSAoc2hhbmVAbWluaXJsLmNvbSkKLSAqICBDb3B5cmlnaHQgMjAwNi0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KLSNpbmNsdWRlIDxtYWNoL2lteGZiLmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KLSNpbmNsdWRlIDxtYWNoL21tYy5oPgotI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgyMWFkcy5oPgotCi0jaW5jbHVkZSAiZGV2aWNlcy5oIgotCi1zdGF0aWMgdW5zaWduZWQgaW50IG14MjFhZHNfcGluc1tdID0gewotCi0JLyogQ1M4OTAwQSAqLwotCShHUElPX1BPUlRFIHwgR1BJT19HUElPIHwgR1BJT19JTiB8IDExKSwKLQotCS8qIFVBUlQxICovCi0JUEUxMl9QRl9VQVJUMV9UWEQsCi0JUEUxM19QRl9VQVJUMV9SWEQsCi0JUEUxNF9QRl9VQVJUMV9DVFMsCi0JUEUxNV9QRl9VQVJUMV9SVFMsCi0KLQkvKiBVQVJUMyAoSXJEQSkgLSBvbmx5IFRYRCBhbmQgUlhEICovCi0JUEU4X1BGX1VBUlQzX1RYRCwKLQlQRTlfUEZfVUFSVDNfUlhELAotCi0JLyogVUFSVDQgKi8KLQlQQjI2X0FGX1VBUlQ0X1JUUywKLQlQQjI4X0FGX1VBUlQ0X1RYRCwKLQlQQjI5X0FGX1VBUlQ0X0NUUywKLQlQQjMxX0FGX1VBUlQ0X1JYRCwKLQotCS8qIExDREMgKi8KLQlQQTVfUEZfTFNDTEssCi0JUEE2X1BGX0xEMCwKLQlQQTdfUEZfTEQxLAotCVBBOF9QRl9MRDIsCi0JUEE5X1BGX0xEMywKLQlQQTEwX1BGX0xENCwKLQlQQTExX1BGX0xENSwKLQlQQTEyX1BGX0xENiwKLQlQQTEzX1BGX0xENywKLQlQQTE0X1BGX0xEOCwKLQlQQTE1X1BGX0xEOSwKLQlQQTE2X1BGX0xEMTAsCi0JUEExN19QRl9MRDExLAotCVBBMThfUEZfTEQxMiwKLQlQQTE5X1BGX0xEMTMsCi0JUEEyMF9QRl9MRDE0LAotCVBBMjFfUEZfTEQxNSwKLQlQQTIyX1BGX0xEMTYsCi0JUEEyNF9QRl9SRVYsICAgICAvKiBTaGFycCBwYW5lbCBkZWRpY2F0ZWQgc2lnbmFsICovCi0JUEEyNV9QRl9DTFMsICAgICAvKiBTaGFycCBwYW5lbCBkZWRpY2F0ZWQgc2lnbmFsICovCi0JUEEyNl9QRl9QUywgICAgICAvKiBTaGFycCBwYW5lbCBkZWRpY2F0ZWQgc2lnbmFsICovCi0JUEEyN19QRl9TUExfU1BSLCAvKiBTaGFycCBwYW5lbCBkZWRpY2F0ZWQgc2lnbmFsICovCi0JUEEyOF9QRl9IU1lOQywKLQlQQTI5X1BGX1ZTWU5DLAotCVBBMzBfUEZfQ09OVFJBU1QsCi0JUEEzMV9QRl9PRV9BQ0QsCi0KLQkvKiBNTUMvU0RIQyAqLwotCVBFMThfUEZfU0QxX0QwLAotCVBFMTlfUEZfU0QxX0QxLAotCVBFMjBfUEZfU0QxX0QyLAotCVBFMjFfUEZfU0QxX0QzLAotCVBFMjJfUEZfU0QxX0NNRCwKLQlQRTIzX1BGX1NEMV9DTEssCi0KLQkvKiBORkMgKi8KLQlQRjBfUEZfTlJGQiwKLQlQRjFfUEZfTkZDRSwKLQlQRjJfUEZfTkZXUCwKLQlQRjNfUEZfTkZDTEUsCi0JUEY0X1BGX05GQUxFLAotCVBGNV9QRl9ORlJFLAotCVBGNl9QRl9ORldFLAotCVBGN19QRl9ORklPMCwKLQlQRjhfUEZfTkZJTzEsCi0JUEY5X1BGX05GSU8yLAotCVBGMTBfUEZfTkZJTzMsCi0JUEYxMV9QRl9ORklPNCwKLQlQRjEyX1BGX05GSU81LAotCVBGMTNfUEZfTkZJTzYsCi0JUEYxNF9QRl9ORklPNywKLX07Ci0KLS8qIEFEUydzIE5PUiBmbGFzaDogMnggQU0yOUJEUzEyOEhFOVZLSSBvbiAzMi1iaXQgYnVzICovCi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBteDIxYWRzX2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoID0gNCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXgyMWFkc19mbGFzaF9yZXNvdXJjZSA9IHsKLQkuc3RhcnQgPSBDUzBfQkFTRV9BRERSLAotCS5lbmQgPSBDUzBfQkFTRV9BRERSICsgMHgwMjAwMDAwMCAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDIxYWRzX25vcl9tdGRfZGV2aWNlID0gewotCS5uYW1lID0gInBoeXNtYXAtZmxhc2giLAotCS5pZCA9IDAsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmbXgyMWFkc19mbGFzaF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZteDIxYWRzX2ZsYXNoX3Jlc291cmNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKLQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9ub3J0c19wZGF0YSA9IHsKLX07Ci0KLQotc3RhdGljIGludCBteDIxYWRzX2ZiX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQl1MTYgdG1wOwotCi0JdG1wID0gX19yYXdfcmVhZHcoTVgyMUFEU19JT19SRUcpOwotCXRtcCB8PSBNWDIxQURTX0lPX0xDRE9OOwotCV9fcmF3X3dyaXRldyh0bXAsIE1YMjFBRFNfSU9fUkVHKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgbXgyMWFkc19mYl9leGl0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JdTE2IHRtcDsKLQotCXRtcCA9IF9fcmF3X3JlYWR3KE1YMjFBRFNfSU9fUkVHKTsKLQl0bXAgJj0gfk1YMjFBRFNfSU9fTENET047Ci0JX19yYXdfd3JpdGV3KHRtcCwgTVgyMUFEU19JT19SRUcpOwotfQotCi0vKgotICogQ29ubmVjdGVkIGlzIGEgcG9ydHJhaXQgU2hhcnAtUVZHQSBkaXNwbGF5Ci0gKiBvZiB0eXBlOiBMUTAzNVE3REIwMgotICovCi1zdGF0aWMgc3RydWN0IGlteF9mYl92aWRlb21vZGUgbXgyMWFkc19tb2Rlc1tdID0gewotCXsKLQkJLm1vZGUgPSB7Ci0JCQkubmFtZQkJPSAiU2hhcnAtTFEwMzVRNyIsCi0JCQkucmVmcmVzaAk9IDYwLAotCQkJLnhyZXMJCT0gMjQwLAotCQkJLnlyZXMJCT0gMzIwLAotCQkJLnBpeGNsb2NrCT0gMTg4Njc5LCAvKiBpbiBwcyAoNS4zTUh6KSAqLwotCQkJLmhzeW5jX2xlbgk9IDIsCi0JCQkubGVmdF9tYXJnaW4JPSA2LAotCQkJLnJpZ2h0X21hcmdpbgk9IDE2LAotCQkJLnZzeW5jX2xlbgk9IDEsCi0JCQkudXBwZXJfbWFyZ2luCT0gOCwKLQkJCS5sb3dlcl9tYXJnaW4JPSAxMCwKLQkJfSwKLQkJLnBjcgkJPSAweGZiMTA4YmM3LAotCQkuYnBwCQk9IDE2LAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhIG14MjFhZHNfZmJfZGF0YSA9IHsKLQkubW9kZSA9IG14MjFhZHNfbW9kZXMsCi0JLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobXgyMWFkc19tb2RlcyksCi0KLQkucHdtcgkJPSAweDAwYTkwM2ZmLAotCS5sc2NyMQkJPSAweDAwMTIwMzAwLAotCS5kbWFjcgkJPSAweDAwMDIwMDA4LAotCi0JLmluaXQgPSBteDIxYWRzX2ZiX2luaXQsCi0JLmV4aXQgPSBteDIxYWRzX2ZiX2V4aXQsCi19OwotCi1zdGF0aWMgaW50IG14MjFhZHNfc2RoY19nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiAoX19yYXdfcmVhZHcoTVgyMUFEU19JT19SRUcpICYgTVgyMUFEU19JT19TRF9XUCkgPyAxIDogMDsKLX0KLQotc3RhdGljIGludCBteDIxYWRzX3NkaGNfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgZGV0ZWN0X2lycSwKLQl2b2lkICpkYXRhKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSByZXF1ZXN0X2lycShJUlFfR1BJT0QoMjUpLCBkZXRlY3RfaXJxLAotCQlJUlFGX1RSSUdHRVJfRkFMTElORywgIm1tYy1kZXRlY3QiLCBkYXRhKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQlyZXR1cm4gMDsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBteDIxYWRzX3NkaGNfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JZnJlZV9pcnEoSVJRX0dQSU9EKDI1KSwgZGF0YSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgbXgyMWFkc19zZGhjX3BkYXRhID0gewotCS5vY3JfYXZhaWwgPSBNTUNfVkREXzI5XzMwIHwgTU1DX1ZERF8zMF8zMSwgLyogMy4wViAqLwotCS5nZXRfcm8gPSBteDIxYWRzX3NkaGNfZ2V0X3JvLAotCS5pbml0ID0gbXgyMWFkc19zZGhjX2luaXQsCi0JLmV4aXQgPSBteDIxYWRzX3NkaGNfZXhpdCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSBteDIxYWRzX25hbmRfYm9hcmRfaW5mbyA9IHsKLQkud2lkdGggPSAxLAotCS5od19lY2MgPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteDIxYWRzX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCS8qCi0JICogTWVtb3J5LW1hcHBlZCBJL08gb24gTVgyMUFEUyBCYXNlIGJvYXJkOgotCSAqICAgLSBDUzg5MDBBIEV0aGVybmV0IGNvbnRyb2xsZXIKLQkgKiAgIC0gU1QxNkMyNTUyQ0ogVUFSVAotCSAqICAgLSBDUFUgYW5kIEJhc2UgYm9hcmQgdmVyc2lvbgotCSAqICAgLSBCYXNlIGJvYXJkIEkvTyByZWdpc3RlcgotCSAqLwotCXsKLQkJLnZpcnR1YWwgPSBNWDIxQURTX01NSU9fQkFTRV9BRERSLAotCQkucGZuID0gX19waHlzX3RvX3BmbihDUzFfQkFTRV9BRERSKSwKLQkJLmxlbmd0aCA9IE1YMjFBRFNfTU1JT19TSVpFLAotCQkudHlwZSA9IE1UX0RFVklDRSwKLQl9LAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IG14MjFhZHNfbWFwX2lvKHZvaWQpCi17Ci0JbXgyMV9tYXBfaW8oKTsKLQlpb3RhYmxlX2luaXQobXgyMWFkc19pb19kZXNjLCBBUlJBWV9TSVpFKG14MjFhZHNfaW9fZGVzYykpOwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJm14MjFhZHNfbm9yX210ZF9kZXZpY2UsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgbXgyMWFkc19ib2FyZF9pbml0KHZvaWQpCi17Ci0JbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteDIxYWRzX3BpbnMsIEFSUkFZX1NJWkUobXgyMWFkc19waW5zKSwKLQkJCSJteDIxYWRzIik7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMiwgJnVhcnRfbm9ydHNfcGRhdGEpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTMsICZ1YXJ0X3BkYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfZmJfZGV2aWNlLCAmbXgyMWFkc19mYl9kYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UwLCAmbXgyMWFkc19zZGhjX3BkYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfbmFuZF9kZXZpY2UsICZteDIxYWRzX25hbmRfYm9hcmRfaW5mbyk7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IG14MjFhZHNfdGltZXJfaW5pdCh2b2lkKQotewotCW14MjFfY2xvY2tzX2luaXQoMzI3NjgsIDI2MDAwMDAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXgyMWFkc190aW1lciA9IHsKLQkuaW5pdAk9IG14MjFhZHNfdGltZXJfaW5pdCwKLX07Ci0KLU1BQ0hJTkVfU1RBUlQoTVgyMUFEUywgIkZyZWVzY2FsZSBpLk1YMjFBRFMiKQotCS8qIG1haW50YWluZXI6IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuICovCi0JLnBoeXNfaW8gICAgICAgID0gQUlQSV9CQVNFX0FERFIsCi0JLmlvX3BnX29mZnN0ICAgID0gKChBSVBJX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zICAgID0gUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBteDIxYWRzX21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDIxX2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IG14MjFhZHNfYm9hcmRfaW5pdCwKLQkudGltZXIgICAgICAgICAgPSAmbXgyMWFkc190aW1lciwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9teDI3YWRzLmMgYi9hcmNoL2FybS9tYWNoLW14Mi9teDI3YWRzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzZTQxMmIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvbXgyN2Fkcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMzQ1ICswLDAgQEAKLS8qCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyIFNoYW5lIE5heSAoc2hhbmVAbWluaXJsLmNvbSkKLSAqICBDb3B5cmlnaHQgMjAwNi0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KLSNpbmNsdWRlIDxtYWNoL2JvYXJkLW14MjdhZHMuaD4KLSNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+Ci0jaW5jbHVkZSA8bWFjaC9pMmMuaD4KLSNpbmNsdWRlIDxtYWNoL2lteGZiLmg+Ci0jaW5jbHVkZSA8bWFjaC9tbWMuaD4KLQotI2luY2x1ZGUgImRldmljZXMuaCIKLQotc3RhdGljIHVuc2lnbmVkIGludCBteDI3YWRzX3BpbnNbXSA9IHsKLQkvKiBVQVJUMCAqLwotCVBFMTJfUEZfVUFSVDFfVFhELAotCVBFMTNfUEZfVUFSVDFfUlhELAotCVBFMTRfUEZfVUFSVDFfQ1RTLAotCVBFMTVfUEZfVUFSVDFfUlRTLAotCS8qIFVBUlQxICovCi0JUEUzX1BGX1VBUlQyX0NUUywKLQlQRTRfUEZfVUFSVDJfUlRTLAotCVBFNl9QRl9VQVJUMl9UWEQsCi0JUEU3X1BGX1VBUlQyX1JYRCwKLQkvKiBVQVJUMiAqLwotCVBFOF9QRl9VQVJUM19UWEQsCi0JUEU5X1BGX1VBUlQzX1JYRCwKLQlQRTEwX1BGX1VBUlQzX0NUUywKLQlQRTExX1BGX1VBUlQzX1JUUywKLQkvKiBVQVJUMyAqLwotCVBCMjZfQUZfVUFSVDRfUlRTLAotCVBCMjhfQUZfVUFSVDRfVFhELAotCVBCMjlfQUZfVUFSVDRfQ1RTLAotCVBCMzFfQUZfVUFSVDRfUlhELAotCS8qIFVBUlQ0ICovCi0JUEIxOF9BRl9VQVJUNV9UWEQsCi0JUEIxOV9BRl9VQVJUNV9SWEQsCi0JUEIyMF9BRl9VQVJUNV9DVFMsCi0JUEIyMV9BRl9VQVJUNV9SVFMsCi0JLyogVUFSVDUgKi8KLQlQQjEwX0FGX1VBUlQ2X1RYRCwKLQlQQjEyX0FGX1VBUlQ2X0NUUywKLQlQQjExX0FGX1VBUlQ2X1JYRCwKLQlQQjEzX0FGX1VBUlQ2X1JUUywKLQkvKiBGRUMgKi8KLQlQRDBfQUlOX0ZFQ19UWEQwLAotCVBEMV9BSU5fRkVDX1RYRDEsCi0JUEQyX0FJTl9GRUNfVFhEMiwKLQlQRDNfQUlOX0ZFQ19UWEQzLAotCVBENF9BT1VUX0ZFQ19SWF9FUiwKLQlQRDVfQU9VVF9GRUNfUlhEMSwKLQlQRDZfQU9VVF9GRUNfUlhEMiwKLQlQRDdfQU9VVF9GRUNfUlhEMywKLQlQRDhfQUZfRkVDX01ESU8sCi0JUEQ5X0FJTl9GRUNfTURDLAotCVBEMTBfQU9VVF9GRUNfQ1JTLAotCVBEMTFfQU9VVF9GRUNfVFhfQ0xLLAotCVBEMTJfQU9VVF9GRUNfUlhEMCwKLQlQRDEzX0FPVVRfRkVDX1JYX0RWLAotCVBEMTRfQU9VVF9GRUNfUlhfQ0xLLAotCVBEMTVfQU9VVF9GRUNfQ09MLAotCVBEMTZfQUlOX0ZFQ19UWF9FUiwKLQlQRjIzX0FJTl9GRUNfVFhfRU4sCi0JLyogSTJDMiAqLwotCVBDNV9QRl9JMkMyX1NEQSwKLQlQQzZfUEZfSTJDMl9TQ0wsCi0JLyogRkIgKi8KLQlQQTVfUEZfTFNDTEssCi0JUEE2X1BGX0xEMCwKLQlQQTdfUEZfTEQxLAotCVBBOF9QRl9MRDIsCi0JUEE5X1BGX0xEMywKLQlQQTEwX1BGX0xENCwKLQlQQTExX1BGX0xENSwKLQlQQTEyX1BGX0xENiwKLQlQQTEzX1BGX0xENywKLQlQQTE0X1BGX0xEOCwKLQlQQTE1X1BGX0xEOSwKLQlQQTE2X1BGX0xEMTAsCi0JUEExN19QRl9MRDExLAotCVBBMThfUEZfTEQxMiwKLQlQQTE5X1BGX0xEMTMsCi0JUEEyMF9QRl9MRDE0LAotCVBBMjFfUEZfTEQxNSwKLQlQQTIyX1BGX0xEMTYsCi0JUEEyM19QRl9MRDE3LAotCVBBMjRfUEZfUkVWLAotCVBBMjVfUEZfQ0xTLAotCVBBMjZfUEZfUFMsCi0JUEEyN19QRl9TUExfU1BSLAotCVBBMjhfUEZfSFNZTkMsCi0JUEEyOV9QRl9WU1lOQywKLQlQQTMwX1BGX0NPTlRSQVNULAotCVBBMzFfUEZfT0VfQUNELAotCS8qIE9XSVJFICovCi0JUEUxNl9BRl9PV0lSRSwKLQkvKiBTREhDMSovCi0JUEUxOF9QRl9TRDFfRDAsCi0JUEUxOV9QRl9TRDFfRDEsCi0JUEUyMF9QRl9TRDFfRDIsCi0JUEUyMV9QRl9TRDFfRDMsCi0JUEUyMl9QRl9TRDFfQ01ELAotCVBFMjNfUEZfU0QxX0NMSywKLQkvKiBTREhDMiovCi0JUEI0X1BGX1NEMl9EMCwKLQlQQjVfUEZfU0QyX0QxLAotCVBCNl9QRl9TRDJfRDIsCi0JUEI3X1BGX1NEMl9EMywKLQlQQjhfUEZfU0QyX0NNRCwKLQlQQjlfUEZfU0QyX0NMSywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSBteDI3YWRzX25hbmRfYm9hcmRfaW5mbyA9IHsKLQkud2lkdGggPSAxLAotCS5od19lY2MgPSAxLAotfTsKLQotLyogQURTJ3MgTk9SIGZsYXNoICovCi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBteDI3YWRzX2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXgyN2Fkc19mbGFzaF9yZXNvdXJjZSA9IHsKLQkuc3RhcnQgPSAweGMwMDAwMDAwLAotCS5lbmQgPSAweGMwMDAwMDAwICsgMHgwMjAwMDAwMCAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14MjdhZHNfbm9yX210ZF9kZXZpY2UgPSB7Ci0JLm5hbWUgPSAicGh5c21hcC1mbGFzaCIsCi0JLmlkID0gMCwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZteDI3YWRzX2ZsYXNoX2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJm14MjdhZHNfZmxhc2hfcmVzb3VyY2UsCi19OwotCi1zdGF0aWMgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIG14MjdhZHNfaTJjX2RhdGEgPSB7Ci0JLmJpdHJhdGUgPSAxMDAwMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIG14MjdhZHNfaTJjX2RldmljZXNbXSA9IHsKLX07Ci0KLXZvaWQgbGNkX3Bvd2VyKGludCBvbikKLXsKLQlpZiAob24pCi0JCV9fcmF3X3dyaXRldyhQQkNfQkNUUkwxX0xDRE9OLCBQQkNfQkNUUkwxX1NFVF9SRUcpOwotCWVsc2UKLQkJX19yYXdfd3JpdGV3KFBCQ19CQ1RSTDFfTENET04sIFBCQ19CQ1RSTDFfQ0xFQVJfUkVHKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpbXhfZmJfdmlkZW9tb2RlIG14MjdhZHNfbW9kZXNbXSA9IHsKLQl7Ci0JCS5tb2RlID0gewotCQkJLm5hbWUJCT0gIlNoYXJwLUxRMDM1UTciLAotCQkJLnJlZnJlc2gJPSA2MCwKLQkJCS54cmVzCQk9IDI0MCwKLQkJCS55cmVzCQk9IDMyMCwKLQkJCS5waXhjbG9jawk9IDE4ODY3OSwgLyogaW4gcHMgKDUuM01IeikgKi8KLQkJCS5oc3luY19sZW4JPSAxLAotCQkJLmxlZnRfbWFyZ2luCT0gOSwKLQkJCS5yaWdodF9tYXJnaW4JPSAxNiwKLQkJCS52c3luY19sZW4JPSAxLAotCQkJLnVwcGVyX21hcmdpbgk9IDcsCi0JCQkubG93ZXJfbWFyZ2luCT0gOSwKLQkJfSwKLQkJLmJwcAkJPSAxNiwKLQkJLnBjcgkJPSAweEZCMDA4QkMwLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhIG14MjdhZHNfZmJfZGF0YSA9IHsKLQkubW9kZSA9IG14MjdhZHNfbW9kZXMsCi0JLm51bV9tb2RlcyA9IEFSUkFZX1NJWkUobXgyN2Fkc19tb2RlcyksCi0KLQkvKgotCSAqIC0gSFNZTkMgYWN0aXZlIGhpZ2gKLQkgKiAtIFZTWU5DIGFjdGl2ZSBoaWdoCi0JICogLSBjbGsgbm90ZW5hYmxlZCB3aGlsZSBpZGxlCi0JICogLSBjbG9jayBpbnZlcnRlZAotCSAqIC0gZGF0YSBub3QgaW52ZXJ0ZWQKLQkgKiAtIGRhdGEgZW5hYmxlIGxvdyBhY3RpdmUKLQkgKiAtIGVuYWJsZSBzaGFycCBtb2RlCi0JICovCi0JLnB3bXIJCT0gMHgwMEE5MDNGRiwKLQkubHNjcjEJCT0gMHgwMDEyMDMwMCwKLQkuZG1hY3IJCT0gMHgwMDAyMDAxMCwKLQotCS5sY2RfcG93ZXIJPSBsY2RfcG93ZXIsCi19OwotCi1zdGF0aWMgaW50IG14MjdhZHNfc2RoYzFfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgZGV0ZWN0X2lycSwKLQkJCSAgICAgIHZvaWQgKmRhdGEpCi17Ci0JcmV0dXJuIHJlcXVlc3RfaXJxKElSUV9HUElPRSgyMSksIGRldGVjdF9pcnEsIElSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkgICAic2RoYzEtY2FyZC1kZXRlY3QiLCBkYXRhKTsKLX0KLQotc3RhdGljIGludCBteDI3YWRzX3NkaGMyX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IGRldGVjdF9pcnEsCi0JCQkgICAgICB2b2lkICpkYXRhKQotewotCXJldHVybiByZXF1ZXN0X2lycShJUlFfR1BJT0IoNyksIGRldGVjdF9pcnEsIElSUUZfVFJJR0dFUl9SSVNJTkcsCi0JCQkgICAic2RoYzItY2FyZC1kZXRlY3QiLCBkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgbXgyN2Fkc19zZGhjMV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlmcmVlX2lycShJUlFfR1BJT0UoMjEpLCBkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgbXgyN2Fkc19zZGhjMl9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlmcmVlX2lycShJUlFfR1BJT0IoNyksIGRhdGEpOwotfQotCi1zdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGMxX3BkYXRhID0gewotCS5pbml0ID0gbXgyN2Fkc19zZGhjMV9pbml0LAotCS5leGl0ID0gbXgyN2Fkc19zZGhjMV9leGl0LAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjMl9wZGF0YSA9IHsKLQkuaW5pdCA9IG14MjdhZHNfc2RoYzJfaW5pdCwKLQkuZXhpdCA9IG14MjdhZHNfc2RoYzJfZXhpdCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmbXgyN2Fkc19ub3JfbXRkX2RldmljZSwKLQkmbXhjX2ZlY19kZXZpY2UsCi0JJm14Y193MV9tYXN0ZXJfZGV2aWNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YVtdID0gewotCXsKLQkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKLQl9LCB7Ci0JCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi0JfSwgewotCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotCX0sIHsKLQkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKLQl9LCB7Ci0JCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi0JfSwgewotCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotCX0sCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgbXgyN2Fkc19ib2FyZF9pbml0KHZvaWQpCi17Ci0JbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhteDI3YWRzX3BpbnMsIEFSUkFZX1NJWkUobXgyN2Fkc19waW5zKSwKLQkJCSJteDI3YWRzIik7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YVswXSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgJnVhcnRfcGRhdGFbMV0pOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTIsICZ1YXJ0X3BkYXRhWzJdKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UzLCAmdWFydF9wZGF0YVszXSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlNCwgJnVhcnRfcGRhdGFbNF0pOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTUsICZ1YXJ0X3BkYXRhWzVdKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfbmFuZF9kZXZpY2UsICZteDI3YWRzX25hbmRfYm9hcmRfaW5mbyk7Ci0KLQkvKiBvbmx5IHRoZSBpMmMgbWFzdGVyIDEgaXMgdXNlZCBvbiB0aGlzIENQVSBjYXJkICovCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgbXgyN2Fkc19pMmNfZGV2aWNlcywKLQkJCQlBUlJBWV9TSVpFKG14MjdhZHNfaTJjX2RldmljZXMpKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTEsICZteDI3YWRzX2kyY19kYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfZmJfZGV2aWNlLCAmbXgyN2Fkc19mYl9kYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc2RoY19kZXZpY2UwLCAmc2RoYzFfcGRhdGEpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19zZGhjX2RldmljZTEsICZzZGhjMl9wZGF0YSk7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IG14MjdhZHNfdGltZXJfaW5pdCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZnJlZiA9IDI2MDAwMDAwOwotCi0JaWYgKChfX3Jhd19yZWFkdyhQQkNfVkVSU0lPTl9SRUcpICYgQ0tJSF8yN01IWl9CSVRfU0VUKSA9PSAwKQotCQlmcmVmID0gMjcwMDAwMDA7Ci0KLQlteDI3X2Nsb2Nrc19pbml0KGZyZWYpOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c190aW1lciBteDI3YWRzX3RpbWVyID0gewotCS5pbml0CT0gbXgyN2Fkc190aW1lcl9pbml0LAotfTsKLQotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteDI3YWRzX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwgPSBQQkNfQkFTRV9BRERSRVNTLAotCQkucGZuID0gX19waHlzX3RvX3BmbihDUzRfQkFTRV9BRERSKSwKLQkJLmxlbmd0aCA9IFNaXzFNLAotCQkudHlwZSA9IE1UX0RFVklDRSwKLQl9LAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IG14MjdhZHNfbWFwX2lvKHZvaWQpCi17Ci0JbXgyN19tYXBfaW8oKTsKLQlpb3RhYmxlX2luaXQobXgyN2Fkc19pb19kZXNjLCBBUlJBWV9TSVpFKG14MjdhZHNfaW9fZGVzYykpOwotfQotCi1NQUNISU5FX1NUQVJUKE1YMjdBRFMsICJGcmVlc2NhbGUgaS5NWDI3QURTIikKLQkvKiBtYWludGFpbmVyOiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAqLwotCS5waHlzX2lvICAgICAgICA9IEFJUElfQkFTRV9BRERSLAotCS5pb19wZ19vZmZzdCAgICA9ICgoQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbyAgICAgICAgID0gbXgyN2Fkc19tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXgyN19pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lICAgPSBteDI3YWRzX2JvYXJkX2luaXQsCi0JLnRpbWVyICAgICAgICAgID0gJm14MjdhZHNfdGltZXIsCi1NQUNISU5FX0VORAotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9teDI3bGl0ZS5jIGIvYXJjaC9hcm0vbWFjaC1teDIvbXgyN2xpdGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJlYTIyNy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14Mi9teDI3bGl0ZS5jCisrKyAvZGV2L251bGwKQEAgLTEsOTUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA3IFJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4sIFBlbmd1dHJvbml4Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSnVlcmdlbiBCZWlzZXJ0IChrZXJuZWxAcGVuZ3V0cm9uaXguZGUpCi0gKiBDb3B5cmlnaHQgMjAwOSBEYW5pZWwgU2NoYWVmZmVyIChkYW5pZWwuc2NoYWVmZmVyQHRpbWVzeXMuY29tKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC5oPgotI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgyN2xpdGUuaD4KLQotI2luY2x1ZGUgImRldmljZXMuaCIKLQotc3RhdGljIHVuc2lnbmVkIGludCBteDI3bGl0ZV9waW5zW10gPSB7Ci0JLyogVUFSVDEgKi8KLQlQRTEyX1BGX1VBUlQxX1RYRCwKLQlQRTEzX1BGX1VBUlQxX1JYRCwKLQlQRTE0X1BGX1VBUlQxX0NUUywKLQlQRTE1X1BGX1VBUlQxX1JUUywKLQkvKiBGRUMgKi8KLQlQRDBfQUlOX0ZFQ19UWEQwLAotCVBEMV9BSU5fRkVDX1RYRDEsCi0JUEQyX0FJTl9GRUNfVFhEMiwKLQlQRDNfQUlOX0ZFQ19UWEQzLAotCVBENF9BT1VUX0ZFQ19SWF9FUiwKLQlQRDVfQU9VVF9GRUNfUlhEMSwKLQlQRDZfQU9VVF9GRUNfUlhEMiwKLQlQRDdfQU9VVF9GRUNfUlhEMywKLQlQRDhfQUZfRkVDX01ESU8sCi0JUEQ5X0FJTl9GRUNfTURDLAotCVBEMTBfQU9VVF9GRUNfQ1JTLAotCVBEMTFfQU9VVF9GRUNfVFhfQ0xLLAotCVBEMTJfQU9VVF9GRUNfUlhEMCwKLQlQRDEzX0FPVVRfRkVDX1JYX0RWLAotCVBEMTRfQU9VVF9GRUNfUlhfQ0xLLAotCVBEMTVfQU9VVF9GRUNfQ09MLAotCVBEMTZfQUlOX0ZFQ19UWF9FUiwKLQlQRjIzX0FJTl9GRUNfVFhfRU4sCi19OwotCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0gewotCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJm14Y19mZWNfZGV2aWNlLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IG14MjdsaXRlX2luaXQodm9pZCkKLXsKLQlteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKG14MjdsaXRlX3BpbnMsIEFSUkFZX1NJWkUobXgyN2xpdGVfcGlucyksCi0JCSJpbXgyN2xpdGUiKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7Ci0JcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBteDI3bGl0ZV90aW1lcl9pbml0KHZvaWQpCi17Ci0JbXgyN19jbG9ja3NfaW5pdCgyNjAwMDAwMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIG14MjdsaXRlX3RpbWVyID0gewotCS5pbml0CT0gbXgyN2xpdGVfdGltZXJfaW5pdCwKLX07Ci0KLU1BQ0hJTkVfU1RBUlQoSU1YMjdMSVRFLCAiTG9naWNQRCBpLk1YMjdMSVRFIikKLQkucGh5c19pbyAgICAgICAgPSBBSVBJX0JBU0VfQUREUiwKLQkuaW9fcGdfb2Zmc3QgICAgPSAoKEFJUElfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IG14MjdfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14MjdfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZSAgID0gbXgyN2xpdGVfaW5pdCwKLQkudGltZXIgICAgICAgICAgPSAmbXgyN2xpdGVfdGltZXIsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvbXgyN3Bkay5jIGIvYXJjaC9hcm0vbWFjaC1teDIvbXgyN3Bkay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NzYxZDFiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL214MjdwZGsuYworKysgL2Rldi9udWxsCkBAIC0xLDk1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIEF1dGhvcjogRmFiaW8gRXN0ZXZhbSA8ZmFiaW8uZXN0ZXZhbUBmcmVlc2NhbGUuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC5oPgotI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgyN3Bkay5oPgotCi0jaW5jbHVkZSAiZGV2aWNlcy5oIgotCi1zdGF0aWMgdW5zaWduZWQgaW50IG14MjdwZGtfcGluc1tdID0gewotCS8qIFVBUlQxICovCi0JUEUxMl9QRl9VQVJUMV9UWEQsCi0JUEUxM19QRl9VQVJUMV9SWEQsCi0JUEUxNF9QRl9VQVJUMV9DVFMsCi0JUEUxNV9QRl9VQVJUMV9SVFMsCi0JLyogRkVDICovCi0JUEQwX0FJTl9GRUNfVFhEMCwKLQlQRDFfQUlOX0ZFQ19UWEQxLAotCVBEMl9BSU5fRkVDX1RYRDIsCi0JUEQzX0FJTl9GRUNfVFhEMywKLQlQRDRfQU9VVF9GRUNfUlhfRVIsCi0JUEQ1X0FPVVRfRkVDX1JYRDEsCi0JUEQ2X0FPVVRfRkVDX1JYRDIsCi0JUEQ3X0FPVVRfRkVDX1JYRDMsCi0JUEQ4X0FGX0ZFQ19NRElPLAotCVBEOV9BSU5fRkVDX01EQywKLQlQRDEwX0FPVVRfRkVDX0NSUywKLQlQRDExX0FPVVRfRkVDX1RYX0NMSywKLQlQRDEyX0FPVVRfRkVDX1JYRDAsCi0JUEQxM19BT1VUX0ZFQ19SWF9EViwKLQlQRDE0X0FPVVRfRkVDX1JYX0NMSywKLQlQRDE1X0FPVVRfRkVDX0NPTCwKLQlQRDE2X0FJTl9GRUNfVFhfRVIsCi0JUEYyM19BSU5fRkVDX1RYX0VOLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKLQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZteGNfZmVjX2RldmljZSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBteDI3cGRrX2luaXQodm9pZCkKLXsKLQlteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKG14MjdwZGtfcGlucywgQVJSQVlfU0laRShteDI3cGRrX3BpbnMpLAotCQkibXgyN3BkayIpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IG14MjdwZGtfdGltZXJfaW5pdCh2b2lkKQotewotCW14MjdfY2xvY2tzX2luaXQoMjYwMDAwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c190aW1lciBteDI3cGRrX3RpbWVyID0gewotCS5pbml0CT0gbXgyN3Bka190aW1lcl9pbml0LAotfTsKLQotTUFDSElORV9TVEFSVChNWDI3XzNEUywgIkZyZWVzY2FsZSBNWDI3UERLIikKLQkvKiBtYWludGFpbmVyOiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAqLwotCS5waHlzX2lvICAgICAgICA9IEFJUElfQkFTRV9BRERSLAotCS5pb19wZ19vZmZzdCAgICA9ICgoQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcyAgICA9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbyAgICAgICAgID0gbXgyN19tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXgyN19pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lICAgPSBteDI3cGRrX2luaXQsCi0JLnRpbWVyICAgICAgICAgID0gJm14MjdwZGtfdGltZXIsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvbXh0X3RkNjAuYyBiL2FyY2gvYXJtL21hY2gtbXgyL214dF90ZDYwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhiY2MxYTUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvbXh0X3RkNjAuYworKysgL2Rldi9udWxsCkBAIC0xLDI5NSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAotICogIENvcHlyaWdodCAoQykgMjAwMiBTaGFuZSBOYXkgKHNoYW5lQG1pbmlybC5jb20pCi0gKiAgQ29weXJpZ2h0IDIwMDYtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9tYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KLSNpbmNsdWRlIDxtYWNoL2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy9wY2E5NTN4Lmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXhmYi5oPgotI2luY2x1ZGUgPG1hY2gvbW1jLmg+Ci0KLSNpbmNsdWRlICJkZXZpY2VzLmgiCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgbXh0X3RkNjBfcGluc1tdIF9faW5pdGRhdGEgPSB7Ci0JLyogVUFSVDAgKi8KLQlQRTEyX1BGX1VBUlQxX1RYRCwKLQlQRTEzX1BGX1VBUlQxX1JYRCwKLQlQRTE0X1BGX1VBUlQxX0NUUywKLQlQRTE1X1BGX1VBUlQxX1JUUywKLQkvKiBVQVJUMSAqLwotCVBFM19QRl9VQVJUMl9DVFMsCi0JUEU0X1BGX1VBUlQyX1JUUywKLQlQRTZfUEZfVUFSVDJfVFhELAotCVBFN19QRl9VQVJUMl9SWEQsCi0JLyogVUFSVDIgKi8KLQlQRThfUEZfVUFSVDNfVFhELAotCVBFOV9QRl9VQVJUM19SWEQsCi0JUEUxMF9QRl9VQVJUM19DVFMsCi0JUEUxMV9QRl9VQVJUM19SVFMsCi0JLyogRkVDICovCi0JUEQwX0FJTl9GRUNfVFhEMCwKLQlQRDFfQUlOX0ZFQ19UWEQxLAotCVBEMl9BSU5fRkVDX1RYRDIsCi0JUEQzX0FJTl9GRUNfVFhEMywKLQlQRDRfQU9VVF9GRUNfUlhfRVIsCi0JUEQ1X0FPVVRfRkVDX1JYRDEsCi0JUEQ2X0FPVVRfRkVDX1JYRDIsCi0JUEQ3X0FPVVRfRkVDX1JYRDMsCi0JUEQ4X0FGX0ZFQ19NRElPLAotCVBEOV9BSU5fRkVDX01EQywKLQlQRDEwX0FPVVRfRkVDX0NSUywKLQlQRDExX0FPVVRfRkVDX1RYX0NMSywKLQlQRDEyX0FPVVRfRkVDX1JYRDAsCi0JUEQxM19BT1VUX0ZFQ19SWF9EViwKLQlQRDE0X0FPVVRfRkVDX1JYX0NMSywKLQlQRDE1X0FPVVRfRkVDX0NPTCwKLQlQRDE2X0FJTl9GRUNfVFhfRVIsCi0JUEYyM19BSU5fRkVDX1RYX0VOLAotCS8qIEkyQzEgKi8KLQlQRDE3X1BGX0kyQ19EQVRBLAotCVBEMThfUEZfSTJDX0NMSywKLQkvKiBJMkMyICovCi0JUEM1X1BGX0kyQzJfU0RBLAotCVBDNl9QRl9JMkMyX1NDTCwKLQkvKiBGQiAqLwotCVBBNV9QRl9MU0NMSywKLQlQQTZfUEZfTEQwLAotCVBBN19QRl9MRDEsCi0JUEE4X1BGX0xEMiwKLQlQQTlfUEZfTEQzLAotCVBBMTBfUEZfTEQ0LAotCVBBMTFfUEZfTEQ1LAotCVBBMTJfUEZfTEQ2LAotCVBBMTNfUEZfTEQ3LAotCVBBMTRfUEZfTEQ4LAotCVBBMTVfUEZfTEQ5LAotCVBBMTZfUEZfTEQxMCwKLQlQQTE3X1BGX0xEMTEsCi0JUEExOF9QRl9MRDEyLAotCVBBMTlfUEZfTEQxMywKLQlQQTIwX1BGX0xEMTQsCi0JUEEyMV9QRl9MRDE1LAotCVBBMjJfUEZfTEQxNiwKLQlQQTIzX1BGX0xEMTcsCi0JUEEyNV9QRl9DTFMsCi0JUEEyN19QRl9TUExfU1BSLAotCVBBMjhfUEZfSFNZTkMsCi0JUEEyOV9QRl9WU1lOQywKLQlQQTMwX1BGX0NPTlRSQVNULAotCVBBMzFfUEZfT0VfQUNELAotCS8qIE9XSVJFICovCi0JUEUxNl9BRl9PV0lSRSwKLQkvKiBTREhDMSovCi0JUEUxOF9QRl9TRDFfRDAsCi0JUEUxOV9QRl9TRDFfRDEsCi0JUEUyMF9QRl9TRDFfRDIsCi0JUEUyMV9QRl9TRDFfRDMsCi0JUEUyMl9QRl9TRDFfQ01ELAotCVBFMjNfUEZfU0QxX0NMSywKLQlQRjhfQUZfQVRBX0lPUkRZLAotCS8qIFNESEMyKi8KLQlQQjRfUEZfU0QyX0QwLAotCVBCNV9QRl9TRDJfRDEsCi0JUEI2X1BGX1NEMl9EMiwKLQlQQjdfUEZfU0QyX0QzLAotCVBCOF9QRl9TRDJfQ01ELAotCVBCOV9QRl9TRDJfQ0xLLAotfTsKLQotc3RhdGljIHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhIG14dF90ZDYwX25hbmRfYm9hcmRfaW5mbyA9IHsKLQkud2lkdGggPSAxLAotCS5od19lY2MgPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBteHRfdGQ2MF9pMmNfZGF0YSA9IHsKLQkuYml0cmF0ZSA9IDEwMDAwMCwKLX07Ci0KLS8qIFBDQTk1NTcgKi8KLXN0YXRpYyBpbnQgbXh0X3RkNjBfcGNhOTU1N19zZXR1cChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJCXVuc2lnbmVkIGdwaW9fYmFzZSwgdW5zaWduZWQgbmdwaW8sCi0JCQkJdm9pZCAqY29udGV4dCkKLXsKLQlzdGF0aWMgaW50IG14dF90ZDYwX2dwaW9fdmFsdWVbXSA9IHsKLQkJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIDEKLQl9OwotCWludCBuOwotCi0JZm9yIChuID0gMDsgbiA8IEFSUkFZX1NJWkUobXh0X3RkNjBfZ3Bpb192YWx1ZSk7ICsrbikgewotCQlncGlvX3JlcXVlc3QoZ3Bpb19iYXNlICsgbiwgIk1YVF9URDYwIEdQSU8gRXhwIik7Ci0JCWlmIChteHRfdGQ2MF9ncGlvX3ZhbHVlW25dIDwgMCkKLQkJCWdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW9fYmFzZSArIG4pOwotCQllbHNlCi0JCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3Bpb19iYXNlICsgbiwKLQkJCQkJCW14dF90ZDYwX2dwaW9fdmFsdWVbbl0pOwotCQlncGlvX2V4cG9ydChncGlvX2Jhc2UgKyBuLCAwKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2E5NTN4X3BsYXRmb3JtX2RhdGEgbXh0X3RkNjBfcGNhOTU1N19wZGF0YSA9IHsKLQkuZ3Bpb19iYXNlCT0gMjQwLCAvKiBwbGFjZSBQQ0E5NTU3IGFmdGVyIGFsbCBNWDI3IGdwaW8gcGlucyAqLwotCS5pbnZlcnQJCT0gMCwgLyogRG8gbm90IGludmVydCAqLwotCS5zZXR1cAkJPSBteHRfdGQ2MF9wY2E5NTU3X3NldHVwLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBteHRfdGQ2MF9pMmNfZGV2aWNlc1tdID0gewotCXsKLQkJSTJDX0JPQVJEX0lORk8oInBjYTk1NTciLCAweDE4KSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmbXh0X3RkNjBfcGNhOTU1N19wZGF0YSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBteHRfdGQ2MF9pMmMyX2RhdGEgPSB7Ci0JLmJpdHJhdGUgPSAxMDAwMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIG14dF90ZDYwX2kyYzJfZGV2aWNlc1tdID0gewotfTsKLQotc3RhdGljIHN0cnVjdCBpbXhfZmJfdmlkZW9tb2RlIG14dF90ZDYwX21vZGVzW10gPSB7Ci0JewotCQkubW9kZSA9IHsKLQkJCS5uYW1lCQk9ICJDaGltZWkgTFc3MDBBVDkwMDMiLAotCQkJLnJlZnJlc2gJPSA2MCwKLQkJCS54cmVzCQk9IDgwMCwKLQkJCS55cmVzCQk9IDQ4MCwKLQkJCS5waXhjbG9jawk9IDMwMzAzLAotCQkJLmhzeW5jX2xlbgk9IDY0LAotCQkJLmxlZnRfbWFyZ2luCT0gMHg2NywKLQkJCS5yaWdodF9tYXJnaW4JPSAweDY4LAotCQkJLnZzeW5jX2xlbgk9IDE2LAotCQkJLnVwcGVyX21hcmdpbgk9IDB4MGYsCi0JCQkubG93ZXJfbWFyZ2luCT0gMHgwZiwKLQkJfSwKLQkJLmJwcAkJPSAxNiwKLQkJLnBjcgkJPSAweEZBMjA4QjgzLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGlteF9mYl9wbGF0Zm9ybV9kYXRhIG14dF90ZDYwX2ZiX2RhdGEgPSB7Ci0JLm1vZGUgPSBteHRfdGQ2MF9tb2RlcywKLQkubnVtX21vZGVzID0gQVJSQVlfU0laRShteHRfdGQ2MF9tb2RlcyksCi0KLQkvKgotCSAqIC0gSFNZTkMgYWN0aXZlIGhpZ2gKLQkgKiAtIFZTWU5DIGFjdGl2ZSBoaWdoCi0JICogLSBjbGsgbm90ZW5hYmxlZCB3aGlsZSBpZGxlCi0JICogLSBjbG9jayBpbnZlcnRlZAotCSAqIC0gZGF0YSBub3QgaW52ZXJ0ZWQKLQkgKiAtIGRhdGEgZW5hYmxlIGxvdyBhY3RpdmUKLQkgKiAtIGVuYWJsZSBzaGFycCBtb2RlCi0JICovCi0JLnB3bXIJCT0gMHgwMEE5MDNGRiwKLQkubHNjcjEJCT0gMHgwMDEyMDMwMCwKLQkuZG1hY3IJCT0gMHgwMDAyMDAxMCwKLX07Ci0KLXN0YXRpYyBpbnQgbXh0X3RkNjBfc2RoYzFfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgZGV0ZWN0X2lycSwKLQkJCQl2b2lkICpkYXRhKQotewotCXJldHVybiByZXF1ZXN0X2lycShJUlFfR1BJT0YoOCksIGRldGVjdF9pcnEsIElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJCSJzZGhjMS1jYXJkLWRldGVjdCIsIGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBteHRfdGQ2MF9zZGhjMV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlmcmVlX2lycShJUlFfR1BJT0YoOCksIGRhdGEpOwotfQotCi1zdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGMxX3BkYXRhID0gewotCS5pbml0ID0gbXh0X3RkNjBfc2RoYzFfaW5pdCwKLQkuZXhpdCA9IG14dF90ZDYwX3NkaGMxX2V4aXQsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJm14Y19mZWNfZGV2aWNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YVtdID0gewotCXsKLQkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKLQl9LCB7Ci0JCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi0JfSwgewotCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotCX0sCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgbXh0X3RkNjBfYm9hcmRfaW5pdCh2b2lkKQotewotCW14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMobXh0X3RkNjBfcGlucywgQVJSQVlfU0laRShteHRfdGQ2MF9waW5zKSwKLQkJCSJNWFRfVEQ2MCIpOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGFbMF0pOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTEsICZ1YXJ0X3BkYXRhWzFdKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UyLCAmdWFydF9wZGF0YVsyXSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX25hbmRfZGV2aWNlLCAmbXh0X3RkNjBfbmFuZF9ib2FyZF9pbmZvKTsKLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIG14dF90ZDYwX2kyY19kZXZpY2VzLAotCQkJCUFSUkFZX1NJWkUobXh0X3RkNjBfaTJjX2RldmljZXMpKTsKLQotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIG14dF90ZDYwX2kyYzJfZGV2aWNlcywKLQkJCQlBUlJBWV9TSVpFKG14dF90ZDYwX2kyYzJfZGV2aWNlcykpOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2kyY19kZXZpY2UwLCAmbXh0X3RkNjBfaTJjX2RhdGEpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMSwgJm14dF90ZDYwX2kyYzJfZGF0YSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2ZiX2RldmljZSwgJm14dF90ZDYwX2ZiX2RhdGEpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19zZGhjX2RldmljZTAsICZzZGhjMV9wZGF0YSk7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhwbGF0Zm9ybV9kZXZpY2VzLCBBUlJBWV9TSVpFKHBsYXRmb3JtX2RldmljZXMpKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IG14dF90ZDYwX3RpbWVyX2luaXQodm9pZCkKLXsKLQlteDI3X2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXh0X3RkNjBfdGltZXIgPSB7Ci0JLmluaXQJPSBteHRfdGQ2MF90aW1lcl9pbml0LAotfTsKLQotTUFDSElORV9TVEFSVChNWFRfVEQ2MCwgIk1heHRyYWNrIGktTVhUIFRENjAiKQotCS8qIG1haW50YWluZXI6IE1heHRyYWNrIEluZHVzdHJpYWwgKi8KLQkucGh5c19pbwk9IEFJUElfQkFTRV9BRERSLAotCS5pb19wZ19vZmZzdAk9ICgoQUlQSV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcwk9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCi0JLm1hcF9pbwkJPSBteDI3X21hcF9pbywKLQkuaW5pdF9pcnEJPSBteDI3X2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUJPSBteHRfdGQ2MF9ib2FyZF9pbml0LAotCS50aW1lcgkJPSAmbXh0X3RkNjBfdGltZXIsCi1NQUNISU5FX0VORAotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9wY2ExMDAuYyBiL2FyY2gvYXJtL21hY2gtbXgyL3BjYTEwMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWEzZDM0Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL3BjYTEwMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNyBSb2JlcnQgU2Nod2ViZWwgPHIuc2Nod2ViZWxAcGVuZ3V0cm9uaXguZGU+LCBQZW5ndXRyb25peAotICogQ29weXJpZ2h0IChDKSAyMDA5IFNhc2NoYSBIYXVlciAoa2VybmVsQHBlbmd1dHJvbml4LmRlKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAotICogTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy9hdDI0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL2VlcHJvbS5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KLSNpbmNsdWRlIDxtYWNoL2kyYy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLSNpZiBkZWZpbmVkKENPTkZJR19TUElfSU1YKSB8fCBkZWZpbmVkKENPTkZJR19TUElfSU1YX01PRFVMRSkKLSNpbmNsdWRlIDxtYWNoL3NwaS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxtYWNoL21tYy5oPgotCi0jaW5jbHVkZSAiZGV2aWNlcy5oIgotCi1zdGF0aWMgaW50IHBjYTEwMF9waW5zW10gPSB7Ci0JLyogVUFSVDEgKi8KLQlQRTEyX1BGX1VBUlQxX1RYRCwKLQlQRTEzX1BGX1VBUlQxX1JYRCwKLQlQRTE0X1BGX1VBUlQxX0NUUywKLQlQRTE1X1BGX1VBUlQxX1JUUywKLQkvKiBTREhDICovCi0JUEI0X1BGX1NEMl9EMCwKLQlQQjVfUEZfU0QyX0QxLAotCVBCNl9QRl9TRDJfRDIsCi0JUEI3X1BGX1NEMl9EMywKLQlQQjhfUEZfU0QyX0NNRCwKLQlQQjlfUEZfU0QyX0NMSywKLQkvKiBGRUMgKi8KLQlQRDBfQUlOX0ZFQ19UWEQwLAotCVBEMV9BSU5fRkVDX1RYRDEsCi0JUEQyX0FJTl9GRUNfVFhEMiwKLQlQRDNfQUlOX0ZFQ19UWEQzLAotCVBENF9BT1VUX0ZFQ19SWF9FUiwKLQlQRDVfQU9VVF9GRUNfUlhEMSwKLQlQRDZfQU9VVF9GRUNfUlhEMiwKLQlQRDdfQU9VVF9GRUNfUlhEMywKLQlQRDhfQUZfRkVDX01ESU8sCi0JUEQ5X0FJTl9GRUNfTURDLAotCVBEMTBfQU9VVF9GRUNfQ1JTLAotCVBEMTFfQU9VVF9GRUNfVFhfQ0xLLAotCVBEMTJfQU9VVF9GRUNfUlhEMCwKLQlQRDEzX0FPVVRfRkVDX1JYX0RWLAotCVBEMTRfQU9VVF9GRUNfUlhfQ0xLLAotCVBEMTVfQU9VVF9GRUNfQ09MLAotCVBEMTZfQUlOX0ZFQ19UWF9FUiwKLQlQRjIzX0FJTl9GRUNfVFhfRU4sCi0JLyogU1NJMSAqLwotCVBDMjBfUEZfU1NJMV9GUywKLQlQQzIxX1BGX1NTSTFfUlhELAotCVBDMjJfUEZfU1NJMV9UWEQsCi0JUEMyM19QRl9TU0kxX0NMSywKLQkvKiBvbmJvYXJkIEkyQyAqLwotCVBDNV9QRl9JMkMyX1NEQSwKLQlQQzZfUEZfSTJDMl9TQ0wsCi0JLyogZXh0ZXJuYWwgSTJDICovCi0JUEQxN19QRl9JMkNfREFUQSwKLQlQRDE4X1BGX0kyQ19DTEssCi0JLyogU1BJMSAqLwotCVBEMjVfUEZfQ1NQSTFfUkRZLAotCVBEMjlfUEZfQ1NQSTFfU0NMSywKLQlQRDMwX1BGX0NTUEkxX01JU08sCi0JUEQzMV9QRl9DU1BJMV9NT1NJLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKLQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotfTsKLQotc3RhdGljIHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhIHBjYTEwMF9uYW5kX2JvYXJkX2luZm8gPSB7Ci0JLndpZHRoID0gMSwKLQkuaHdfZWNjID0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmbXhjX3cxX21hc3Rlcl9kZXZpY2UsCi0JJm14Y19mZWNfZGV2aWNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBwY2ExMDBfaTJjXzFfZGF0YSA9IHsKLQkuYml0cmF0ZSA9IDEwMDAwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQyNF9wbGF0Zm9ybV9kYXRhIGJvYXJkX2VlcHJvbSA9IHsKLQkuYnl0ZV9sZW4gPSA0MDk2LAotCS5wYWdlX3NpemUgPSAzMiwKLQkuZmxhZ3MgPSBBVDI0X0ZMQUdfQUREUjE2LAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBwY2ExMDBfaTJjX2RldmljZXNbXSA9IHsKLQl7Ci0JCUkyQ19CT0FSRF9JTkZPKCJhdDI0IiwgMHg1MiksIC8qIEUwPTAsIEUxPTEsIEUyPTAgKi8KLQkJLnBsYXRmb3JtX2RhdGEgPSAmYm9hcmRfZWVwcm9tLAotCX0sIHsKLQkJSTJDX0JPQVJEX0lORk8oInJ0Yy1wY2Y4NTYzIiwgMHg1MSksCi0JCS50eXBlID0gInBjZjg1NjMiCi0JfSwgewotCQlJMkNfQk9BUkRfSU5GTygibG03NSIsIDB4NGEpLAotCQkudHlwZSA9ICJsbTc1IgotCX0KLX07Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TUElfSU1YKSB8fCBkZWZpbmVkKENPTkZJR19TUElfSU1YX01PRFVMRSkKLXN0YXRpYyBzdHJ1Y3Qgc3BpX2VlcHJvbSBhdDI1MzIwID0gewotCS5uYW1lCQk9ICJhdDI1MzIwYW4iLAotCS5ieXRlX2xlbgk9IDQwOTYsCi0JLnBhZ2Vfc2l6ZQk9IDMyLAotCS5mbGFncwkJPSBFRV9BRERSMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gcGNhMTAwX3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS5tb2RhbGlhcyA9ICJhdDI1IiwKLQkJLm1heF9zcGVlZF9oeiA9IDMwMDAwLAotCQkuYnVzX251bSA9IDAsCi0JCS5jaGlwX3NlbGVjdCA9IDEsCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmF0MjUzMjAsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbnQgcGNhMTAwX3NwaV9jc1tdID0ge0dQSU9fUE9SVEQgKyAyOCwgR1BJT19QT1JURCArIDI3fTsKLQotc3RhdGljIHN0cnVjdCBzcGlfaW14X21hc3RlciBwY2ExMDBfc3BpXzBfZGF0YSA9IHsKLQkuY2hpcHNlbGVjdAk9IHBjYTEwMF9zcGlfY3MsCi0JLm51bV9jaGlwc2VsZWN0ID0gQVJSQVlfU0laRShwY2ExMDBfc3BpX2NzKSwKLX07Ci0jZW5kaWYKLQotc3RhdGljIGludCBwY2ExMDBfc2RoYzJfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgZGV0ZWN0X2lycSwKLQkJdm9pZCAqZGF0YSkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcmVxdWVzdF9pcnEoSVJRX0dQSU9DKDI5KSwgZGV0ZWN0X2lycSwKLQkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkJICAiaW14LW1tYy1kZXRlY3QiLCBkYXRhKTsKLQlpZiAocmV0KQotCQlwcmludGsoS0VSTl9FUlIKLQkJCSJwY2ExMDA6IEZhaWxlZCB0byByZXVlc3QgaXJxIGZvciBzZC9tbWMgZGV0ZWN0aW9uXG4iKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHBjYTEwMF9zZGhjMl9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlmcmVlX2lycShJUlFfR1BJT0MoMjkpLCBkYXRhKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjX3BkYXRhID0gewotCS5pbml0ID0gcGNhMTAwX3NkaGMyX2luaXQsCi0JLmV4aXQgPSBwY2ExMDBfc2RoYzJfZXhpdCwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBwY2ExMDBfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKHBjYTEwMF9waW5zLAotCQkJQVJSQVlfU0laRShwY2ExMDBfcGlucyksICJQQ0ExMDAiKTsKLQlpZiAocmV0KQotCQlwcmludGsoS0VSTl9FUlIgInBjYTEwMDogRmFpbGVkIHRvIHNldHVwIHBpbnMgKCVkKVxuIiwgcmV0KTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKLQotCW14Y19ncGlvX21vZGUoR1BJT19QT1JUQyB8IDI5IHwgR1BJT19HUElPIHwgR1BJT19JTik7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NkaGNfZGV2aWNlMSwgJnNkaGNfcGRhdGEpOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX25hbmRfZGV2aWNlLCAmcGNhMTAwX25hbmRfYm9hcmRfaW5mbyk7Ci0KLQkvKiBvbmx5IHRoZSBpMmMgbWFzdGVyIDEgaXMgdXNlZCBvbiB0aGlzIENQVSBjYXJkICovCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgcGNhMTAwX2kyY19kZXZpY2VzLAotCQkJCUFSUkFZX1NJWkUocGNhMTAwX2kyY19kZXZpY2VzKSk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTEsICZwY2ExMDBfaTJjXzFfZGF0YSk7Ci0KLQlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEQgfCAyOCB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsKLQlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEQgfCAyNyB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsKLQotCS8qIEdQSU8wX0lSUSAqLwotCW14Y19ncGlvX21vZGUoR1BJT19QT1JUQyB8IDMxIHwgR1BJT19HUElPIHwgR1BJT19JTik7Ci0JLyogR1BJTzFfSVJRICovCi0JbXhjX2dwaW9fbW9kZShHUElPX1BPUlRDIHwgMjUgfCBHUElPX0dQSU8gfCBHUElPX0lOKTsKLQkvKiBHUElPMl9JUlEgKi8KLQlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEUgfCA1IHwgR1BJT19HUElPIHwgR1BJT19JTik7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19TUElfSU1YKSB8fCBkZWZpbmVkKENPTkZJR19TUElfSU1YX01PRFVMRSkKLQlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhwY2ExMDBfc3BpX2JvYXJkX2luZm8sCi0JCQkJQVJSQVlfU0laRShwY2ExMDBfc3BpX2JvYXJkX2luZm8pKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc3BpX2RldmljZTAsICZwY2ExMDBfc3BpXzBfZGF0YSk7Ci0jZW5kaWYKLQotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHBsYXRmb3JtX2RldmljZXMsIEFSUkFZX1NJWkUocGxhdGZvcm1fZGV2aWNlcykpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgcGNhMTAwX3RpbWVyX2luaXQodm9pZCkKLXsKLQlteDI3X2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgcGNhMTAwX3RpbWVyID0gewotCS5pbml0ID0gcGNhMTAwX3RpbWVyX2luaXQsCi19OwotCi1NQUNISU5FX1NUQVJUKFBDQTEwMCwgInBoeUNBUkQtaS5NWDI3IikKLQkucGh5c19pbyAgICAgICAgPSBBSVBJX0JBU0VfQUREUiwKLQkuaW9fcGdfb2Zmc3QgICAgPSAoKEFJUElfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IG14MjdfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14MjdfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZSAgID0gcGNhMTAwX2luaXQsCi0JLnRpbWVyICAgICAgICAgID0gJnBjYTEwMF90aW1lciwKLU1BQ0hJTkVfRU5ECi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyL3BjbTAzOC5jIGIvYXJjaC9hcm0vbWFjaC1teDIvcGNtMDM4LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkwNmQ1OWIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtMDM4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDA3IFJvYmVydCBTY2h3ZWJlbCA8ci5zY2h3ZWJlbEBwZW5ndXRyb25peC5kZT4sIFBlbmd1dHJvbml4Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDggSnVlcmdlbiBCZWlzZXJ0IChrZXJuZWxAcGVuZ3V0cm9uaXguZGUpCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0gKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCi0gKiBNQSAwMjExMC0xMzAxLCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy9hdDI0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGxhdC1yYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+Ci0jaW5jbHVkZSA8bGludXgvbWZkL21jMTM3ODMuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2JvYXJkLXBjbTAzOC5oPgotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvaTJjLmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC5oPgotI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KLSNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGkuaD4KLQotI2luY2x1ZGUgImRldmljZXMuaCIKLQotc3RhdGljIGludCBwY20wMzhfcGluc1tdID0gewotCS8qIFVBUlQxICovCi0JUEUxMl9QRl9VQVJUMV9UWEQsCi0JUEUxM19QRl9VQVJUMV9SWEQsCi0JUEUxNF9QRl9VQVJUMV9DVFMsCi0JUEUxNV9QRl9VQVJUMV9SVFMsCi0JLyogVUFSVDIgKi8KLQlQRTNfUEZfVUFSVDJfQ1RTLAotCVBFNF9QRl9VQVJUMl9SVFMsCi0JUEU2X1BGX1VBUlQyX1RYRCwKLQlQRTdfUEZfVUFSVDJfUlhELAotCS8qIFVBUlQzICovCi0JUEU4X1BGX1VBUlQzX1RYRCwKLQlQRTlfUEZfVUFSVDNfUlhELAotCVBFMTBfUEZfVUFSVDNfQ1RTLAotCVBFMTFfUEZfVUFSVDNfUlRTLAotCS8qIEZFQyAqLwotCVBEMF9BSU5fRkVDX1RYRDAsCi0JUEQxX0FJTl9GRUNfVFhEMSwKLQlQRDJfQUlOX0ZFQ19UWEQyLAotCVBEM19BSU5fRkVDX1RYRDMsCi0JUEQ0X0FPVVRfRkVDX1JYX0VSLAotCVBENV9BT1VUX0ZFQ19SWEQxLAotCVBENl9BT1VUX0ZFQ19SWEQyLAotCVBEN19BT1VUX0ZFQ19SWEQzLAotCVBEOF9BRl9GRUNfTURJTywKLQlQRDlfQUlOX0ZFQ19NREMsCi0JUEQxMF9BT1VUX0ZFQ19DUlMsCi0JUEQxMV9BT1VUX0ZFQ19UWF9DTEssCi0JUEQxMl9BT1VUX0ZFQ19SWEQwLAotCVBEMTNfQU9VVF9GRUNfUlhfRFYsCi0JUEQxNF9BT1VUX0ZFQ19SWF9DTEssCi0JUEQxNV9BT1VUX0ZFQ19DT0wsCi0JUEQxNl9BSU5fRkVDX1RYX0VSLAotCVBGMjNfQUlOX0ZFQ19UWF9FTiwKLQkvKiBJMkMyICovCi0JUEM1X1BGX0kyQzJfU0RBLAotCVBDNl9QRl9JMkMyX1NDTCwKLQkvKiBTUEkxICovCi0JUEQyNV9QRl9DU1BJMV9SRFksCi0JUEQyOV9QRl9DU1BJMV9TQ0xLLAotCVBEMzBfUEZfQ1NQSTFfTUlTTywKLQlQRDMxX1BGX0NTUEkxX01PU0ksCi0JLyogU1NJMSAqLwotCVBDMjBfUEZfU1NJMV9GUywKLQlQQzIxX1BGX1NTSTFfUlhELAotCVBDMjJfUEZfU1NJMV9UWEQsCi0JUEMyM19QRl9TU0kxX0NMSywKLQkvKiBTU0k0ICovCi0JUEMxNl9QRl9TU0k0X0ZTLAotCVBDMTdfUEZfU1NJNF9SWEQsCi0JUEMxOF9QRl9TU0k0X1RYRCwKLQlQQzE5X1BGX1NTSTRfQ0xLLAotfTsKLQotLyoKLSAqIFBoeXRlYydzIFBDTTAzOCBjb21lcyB3aXRoIDJNaUIgYmF0dGVyeSBidWZmZXJlZCBTUkFNLAotICogMTYgYml0IHdpZHRoCi0gKi8KLQotc3RhdGljIHN0cnVjdCBwbGF0ZGF0YV9tdGRfcmFtIHBjbTAzOF9zcmFtX2RhdGEgPSB7Ci0JLmJhbmt3aWR0aCA9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHBjbTAzOF9zcmFtX3Jlc291cmNlID0gewotCS5zdGFydCA9IENTMV9CQVNFX0FERFIsCi0JLmVuZCAgID0gQ1MxX0JBU0VfQUREUiArIDUxMiAqIDEwMjQgLSAxLAotCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNtMDM4X3NyYW1fbXRkX2RldmljZSA9IHsKLQkubmFtZSA9ICJtdGQtcmFtIiwKLQkuaWQgPSAwLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnBjbTAzOF9zcmFtX2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJnBjbTAzOF9zcmFtX3Jlc291cmNlLAotfTsKLQotLyoKLSAqIFBoeXRlYydzIHBoeUNPUkUtaS5NWDI3IGNvbWVzIHdpdGggMzJNaUIgZmxhc2gsCi0gKiAxNiBiaXQgd2lkdGgKLSAqLwotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGNtMDM4X2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNtMDM4X2ZsYXNoX3Jlc291cmNlID0gewotCS5zdGFydCA9IDB4YzAwMDAwMDAsCi0JLmVuZCAgID0gMHhjMWZmZmZmZiwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjbTAzOF9ub3JfbXRkX2RldmljZSA9IHsKLQkubmFtZSA9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQgPSAwLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnBjbTAzOF9mbGFzaF9kYXRhLAotCX0sCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotCS5yZXNvdXJjZSA9ICZwY20wMzhfZmxhc2hfcmVzb3VyY2UsCi19OwotCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhW10gPSB7Ci0JewotCQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotCX0sIHsKLQkJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKLQl9LCB7Ci0JCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSBwY20wMzhfbmFuZF9ib2FyZF9pbmZvID0gewotCS53aWR0aCA9IDEsCi0JLmh3X2VjYyA9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnBjbTAzOF9ub3JfbXRkX2RldmljZSwKLQkmbXhjX3cxX21hc3Rlcl9kZXZpY2UsCi0JJm14Y19mZWNfZGV2aWNlLAotCSZwY20wMzhfc3JhbV9tdGRfZGV2aWNlLAotfTsKLQotLyogT24gcGNtMDM4IHRoZXJlJ3MgYSBzcmFtIGF0dGFjaGVkIHRvIENTMSwgd2UgZW5hYmxlIHRoZSBjaGlwc2VsZWN0IGhlcmUgYW5kCi0gKiBzZXR1cCBvdGhlciBzdHVmZnMgdG8gYWNjZXNzIHRoZSBzcmFtLiAqLwotc3RhdGljIHZvaWQgX19pbml0IHBjbTAzOF9pbml0X3NyYW0odm9pZCkKLXsKLQlfX3Jhd193cml0ZWwoMHgwMDAwZDg0MywgQ1NDUl9VKDEpKTsKLQlfX3Jhd193cml0ZWwoMHgyMjI1MjUyMSwgQ1NDUl9MKDEpKTsKLQlfX3Jhd193cml0ZWwoMHgyMjIyMGEwMCwgQ1NDUl9BKDEpKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBwY20wMzhfaTJjXzFfZGF0YSA9IHsKLQkuYml0cmF0ZSA9IDEwMDAwMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXQyNF9wbGF0Zm9ybV9kYXRhIGJvYXJkX2VlcHJvbSA9IHsKLQkuYnl0ZV9sZW4gPSA0MDk2LAotCS5wYWdlX3NpemUgPSAzMiwKLQkuZmxhZ3MgPSBBVDI0X0ZMQUdfQUREUjE2LAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBwY20wMzhfaTJjX2RldmljZXNbXSA9IHsKLQl7Ci0JCUkyQ19CT0FSRF9JTkZPKCJhdDI0IiwgMHg1MiksIC8qIEUwPTAsIEUxPTEsIEUyPTAgKi8KLQkJLnBsYXRmb3JtX2RhdGEgPSAmYm9hcmRfZWVwcm9tLAotCX0sIHsKLQkJSTJDX0JPQVJEX0lORk8oInBjZjg1NjMiLCAweDUxKSwKLQl9LCB7Ci0JCUkyQ19CT0FSRF9JTkZPKCJsbTc1IiwgMHg0YSksCi0JfQotfTsKLQotc3RhdGljIGludCBwY20wMzhfc3BpX2NzW10gPSB7R1BJT19QT1JURCArIDI4fTsKLQotc3RhdGljIHN0cnVjdCBzcGlfaW14X21hc3RlciBwY20wMzhfc3BpXzBfZGF0YSA9IHsKLQkuY2hpcHNlbGVjdCA9IHBjbTAzOF9zcGlfY3MsCi0JLm51bV9jaGlwc2VsZWN0ID0gQVJSQVlfU0laRShwY20wMzhfc3BpX2NzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZGhjMV9jb25zdW1lcnNbXSA9IHsKLQl7Ci0JCS5kZXYJPSAmbXhjX3NkaGNfZGV2aWNlMS5kZXYsCi0JCS5zdXBwbHkJPSAic2RoY192Y2MiLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RoYzFfZGF0YSA9IHsKLQkuY29uc3RyYWludHMgPSB7Ci0JCS5taW5fdVYgPSAzMDAwMDAwLAotCQkubWF4X3VWID0gMzQwMDAwMCwKLQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKLQkJCVJFR1VMQVRPUl9DSEFOR0VfTU9ERSB8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAotCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCB8Ci0JCQlSRUdVTEFUT1JfTU9ERV9GQVNULAotCQkuYWx3YXlzX29uID0gMCwKLQkJLmJvb3Rfb24gPSAwLAotCX0sCi0JLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoc2RoYzFfY29uc3VtZXJzKSwKLQkuY29uc3VtZXJfc3VwcGxpZXMgPSBzZGhjMV9jb25zdW1lcnMsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgY2FtX2NvbnN1bWVyc1tdID0gewotCXsKLQkJLmRldgk9IE5VTEwsCi0JCS5zdXBwbHkJPSAiaW14X2NhbV92Y2MiLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgY2FtX2RhdGEgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubWluX3VWID0gMzAwMDAwMCwKLQkJLm1heF91ViA9IDM0MDAwMDAsCi0JCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8Ci0JCQlSRUdVTEFUT1JfQ0hBTkdFX01PREUgfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKLQkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwgfAotCQkJUkVHVUxBVE9SX01PREVfRkFTVCwKLQkJLmFsd2F5c19vbiA9IDAsCi0JCS5ib290X29uID0gMCwKLQl9LAotCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKGNhbV9jb25zdW1lcnMpLAotCS5jb25zdW1lcl9zdXBwbGllcyA9IGNhbV9jb25zdW1lcnMsCi19OwotCi1zdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfaW5pdF9kYXRhIHBjbTAzOF9yZWd1bGF0b3JzW10gPSB7Ci0JewotCQkuaWQgPSBNQzEzNzgzX1JFR1VfVkNBTSwKLQkJLmluaXRfZGF0YSA9ICZjYW1fZGF0YSwKLQl9LCB7Ci0JCS5pZCA9IE1DMTM3ODNfUkVHVV9WTU1DMSwKLQkJLmluaXRfZGF0YSA9ICZzZGhjMV9kYXRhLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IG1jMTM3ODNfcGxhdGZvcm1fZGF0YSBwY20wMzhfcG1pYyA9IHsKLQkucmVndWxhdG9ycyA9IHBjbTAzOF9yZWd1bGF0b3JzLAotCS5udW1fcmVndWxhdG9ycyA9IEFSUkFZX1NJWkUocGNtMDM4X3JlZ3VsYXRvcnMpLAotCS5mbGFncyA9IE1DMTM3ODNfVVNFX0FEQyB8IE1DMTM3ODNfVVNFX1JFR1VMQVRPUiB8Ci0JCSBNQzEzNzgzX1VTRV9UT1VDSFNDUkVFTiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gcGNtMDM4X3NwaV9ib2FyZF9pbmZvW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS5tb2RhbGlhcyA9ICJtYzEzNzgzIiwKLQkJLmlycSA9IElSUV9HUElPQigyMyksCi0JCS5tYXhfc3BlZWRfaHogPSAzMDAwMDAsCi0JCS5idXNfbnVtID0gMCwKLQkJLmNoaXBfc2VsZWN0ID0gMCwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmcGNtMDM4X3BtaWMsCi0JCS5tb2RlID0gU1BJX0NTX0hJR0gsCi0JfQotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IHBjbTAzOF9pbml0KHZvaWQpCi17Ci0JbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhwY20wMzhfcGlucywgQVJSQVlfU0laRShwY20wMzhfcGlucyksCi0JCQkiUENNMDM4Iik7Ci0KLQlwY20wMzhfaW5pdF9zcmFtKCk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YVswXSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgJnVhcnRfcGRhdGFbMV0pOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTIsICZ1YXJ0X3BkYXRhWzJdKTsKLQotCW14Y19ncGlvX21vZGUoUEUxNl9BRl9PV0lSRSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX25hbmRfZGV2aWNlLCAmcGNtMDM4X25hbmRfYm9hcmRfaW5mbyk7Ci0KLQkvKiBvbmx5IHRoZSBpMmMgbWFzdGVyIDEgaXMgdXNlZCBvbiB0aGlzIENQVSBjYXJkICovCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgcGNtMDM4X2kyY19kZXZpY2VzLAotCQkJCUFSUkFZX1NJWkUocGNtMDM4X2kyY19kZXZpY2VzKSk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTEsICZwY20wMzhfaTJjXzFfZGF0YSk7Ci0KLQkvKiBQRTE4IGZvciB1c2VyLUxFRCBENDAgKi8KLQlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEUgfCAxOCB8IEdQSU9fR1BJTyB8IEdQSU9fT1VUKTsKLQotCW14Y19ncGlvX21vZGUoR1BJT19QT1JURCB8IDI4IHwgR1BJT19HUElPIHwgR1BJT19PVVQpOwotCi0JLyogTUMxMzc4MyBJUlEgKi8KLQlteGNfZ3Bpb19tb2RlKEdQSU9fUE9SVEIgfCAyMyB8IEdQSU9fR1BJTyB8IEdQSU9fSU4pOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NwaV9kZXZpY2UwLCAmcGNtMDM4X3NwaV8wX2RhdGEpOwotCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHBjbTAzOF9zcGlfYm9hcmRfaW5mbywKLQkJCQlBUlJBWV9TSVpFKHBjbTAzOF9zcGlfYm9hcmRfaW5mbykpOwotCi0JcGxhdGZvcm1fYWRkX2RldmljZXMocGxhdGZvcm1fZGV2aWNlcywgQVJSQVlfU0laRShwbGF0Zm9ybV9kZXZpY2VzKSk7Ci0KLSNpZmRlZiBDT05GSUdfTUFDSF9QQ005NzBfQkFTRUJPQVJECi0JcGNtOTcwX2Jhc2Vib2FyZF9pbml0KCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHBjbTAzOF90aW1lcl9pbml0KHZvaWQpCi17Ci0JbXgyN19jbG9ja3NfaW5pdCgyNjAwMDAwMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIHBjbTAzOF90aW1lciA9IHsKLQkuaW5pdCA9IHBjbTAzOF90aW1lcl9pbml0LAotfTsKLQotTUFDSElORV9TVEFSVChQQ00wMzgsICJwaHlDT1JFLWkuTVgyNyIpCi0JLnBoeXNfaW8gICAgICAgID0gQUlQSV9CQVNFX0FERFIsCi0JLmlvX3BnX29mZnN0ICAgID0gKChBSVBJX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zICAgID0gUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBteDI3X21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDI3X2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IHBjbTAzOF9pbml0LAotCS50aW1lciAgICAgICAgICA9ICZwY20wMzhfdGltZXIsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1teDIvcGNtOTcwLWJhc2Vib2FyZC5jCmluZGV4IDNjYjdmNDUuLjRhYWZkNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL3BjbTk3MC1iYXNlYm9hcmQuYworKysgYi9hcmNoL2FybS9tYWNoLW14Mi9wY205NzAtYmFzZWJvYXJkLmMKQEAgLTI0LDcgKzI0LDcgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAKICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjcuaD4KICNpbmNsdWRlIDxtYWNoL2lteGZiLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPG1hY2gvbW1jLmg+CkBAIC0xOTAsOCArMTkwLDggQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY205NzBfc2phMTAwMF9yZXNvdXJjZXNbXSA9IHsKIAl7Ci0JCS5zdGFydCAgID0gQ1M0X0JBU0VfQUREUiwKLQkJLmVuZCAgICAgPSBDUzRfQkFTRV9BRERSICsgMHgxMDAgLSAxLAorCQkuc3RhcnQgICA9IE1YMjdfQ1M0X0JBU0VfQUREUiwKKwkJLmVuZCAgICAgPSBNWDI3X0NTNF9CQVNFX0FERFIgKyAweDEwMCAtIDEsCiAJCS5mbGFncyAgID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwgewogCQkuc3RhcnQgICA9IElSUV9HUElPRSgxOSksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14Mi9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtbXgyL3NlcmlhbC5jCmluZGV4IDQwYTQ4NWMuLjFjMGM4MzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyL3NlcmlhbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyL3NlcmlhbC5jCkBAIC0yNiwxMiArMjYsMTIgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MFtdID0gewogCXsKLQkJLnN0YXJ0ID0gVUFSVDFfQkFTRV9BRERSLAotCQkuZW5kID0gVUFSVDFfQkFTRV9BRERSICsgMHgwQjUsCisJCS5zdGFydCA9IE1YMnhfVUFSVDFfQkFTRV9BRERSLAorCQkuZW5kID0gTVgyeF9VQVJUMV9CQVNFX0FERFIgKyAweDBCNSwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwgewotCQkuc3RhcnQgPSBNWENfSU5UX1VBUlQxLAotCQkuZW5kID0gTVhDX0lOVF9VQVJUMSwKKwkJLnN0YXJ0ID0gTVgyeF9JTlRfVUFSVDEsCisJCS5lbmQgPSBNWDJ4X0lOVF9VQVJUMSwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC00NSwxMiArNDUsMTIgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MVtdID0gewogCXsKLQkJLnN0YXJ0ID0gVUFSVDJfQkFTRV9BRERSLAotCQkuZW5kID0gVUFSVDJfQkFTRV9BRERSICsgMHgwQjUsCisJCS5zdGFydCA9IE1YMnhfVUFSVDJfQkFTRV9BRERSLAorCQkuZW5kID0gTVgyeF9VQVJUMl9CQVNFX0FERFIgKyAweDBCNSwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwgewotCQkuc3RhcnQgPSBNWENfSU5UX1VBUlQyLAotCQkuZW5kID0gTVhDX0lOVF9VQVJUMiwKKwkJLnN0YXJ0ID0gTVgyeF9JTlRfVUFSVDIsCisJCS5lbmQgPSBNWDJ4X0lOVF9VQVJUMiwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC02NCwxMiArNjQsMTIgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0MltdID0gewogCXsKLQkJLnN0YXJ0ID0gVUFSVDNfQkFTRV9BRERSLAotCQkuZW5kID0gVUFSVDNfQkFTRV9BRERSICsgMHgwQjUsCisJCS5zdGFydCA9IE1YMnhfVUFSVDNfQkFTRV9BRERSLAorCQkuZW5kID0gTVgyeF9VQVJUM19CQVNFX0FERFIgKyAweDBCNSwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwgewotCQkuc3RhcnQgPSBNWENfSU5UX1VBUlQzLAotCQkuZW5kID0gTVhDX0lOVF9VQVJUMywKKwkJLnN0YXJ0ID0gTVgyeF9JTlRfVUFSVDMsCisJCS5lbmQgPSBNWDJ4X0lOVF9VQVJUMywKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC04MywxMiArODMsMTIgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0M1tdID0gewogCXsKLQkJLnN0YXJ0ID0gVUFSVDRfQkFTRV9BRERSLAotCQkuZW5kID0gVUFSVDRfQkFTRV9BRERSICsgMHgwQjUsCisJCS5zdGFydCA9IE1YMnhfVUFSVDRfQkFTRV9BRERSLAorCQkuZW5kID0gTVgyeF9VQVJUNF9CQVNFX0FERFIgKyAweDBCNSwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwgewotCQkuc3RhcnQgPSBNWENfSU5UX1VBUlQ0LAotCQkuZW5kID0gTVhDX0lOVF9VQVJUNCwKKwkJLnN0YXJ0ID0gTVgyeF9JTlRfVUFSVDQsCisJCS5lbmQgPSBNWDJ4X0lOVF9VQVJUNCwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC0xMDMsMTIgKzEwMywxMiBAQAogI2lmZGVmIENPTkZJR19NQUNIX01YMjcKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDRbXSA9IHsKIAl7Ci0JCS5zdGFydCA9IFVBUlQ1X0JBU0VfQUREUiwKLQkJLmVuZCA9IFVBUlQ1X0JBU0VfQUREUiArIDB4MEI1LAorCQkuc3RhcnQgPSBNWDI3X1VBUlQ1X0JBU0VfQUREUiwKKwkJLmVuZCA9IE1YMjdfVUFSVDVfQkFTRV9BRERSICsgMHgwQjUsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAogCX0sIHsKLQkJLnN0YXJ0ID0gTVhDX0lOVF9VQVJUNSwKLQkJLmVuZCA9IE1YQ19JTlRfVUFSVDUsCisJCS5zdGFydCA9IE1YMjdfSU5UX1VBUlQ1LAorCQkuZW5kID0gTVgyN19JTlRfVUFSVDUsCiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtMTIyLDEyICsxMjIsMTIgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0NVtdID0gewogCXsKLQkJLnN0YXJ0ID0gVUFSVDZfQkFTRV9BRERSLAotCQkuZW5kID0gVUFSVDZfQkFTRV9BRERSICsgMHgwQjUsCisJCS5zdGFydCA9IE1YMjdfVUFSVDZfQkFTRV9BRERSLAorCQkuZW5kID0gTVgyN19VQVJUNl9CQVNFX0FERFIgKyAweDBCNSwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwgewotCQkuc3RhcnQgPSBNWENfSU5UX1VBUlQ2LAotCQkuZW5kID0gTVhDX0lOVF9VQVJUNiwKKwkJLnN0YXJ0ID0gTVgyN19JTlRfVUFSVDYsCisJCS5lbmQgPSBNWDI3X0lOVF9VQVJUNiwKIAkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14MjUvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXgyNS9LY29uZmlnCmluZGV4IGNjMjhmNTYuLjU0ZDIxNzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyNS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtbXgyNS9LY29uZmlnCkBAIC0zLDcgKzMsNiBAQAogY29tbWVudCAiTVgyNSBwbGF0Zm9ybXM6IgogCiBjb25maWcgTUFDSF9NWDI1XzNEUwotCXNlbGVjdCBBUkNIX01YQ19JT01VWF9WMwogCWJvb2wgIlN1cHBvcnQgTVgyNVBESyAoM0RTKSBQbGF0Zm9ybSIKIAogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtbXgyNS9NYWtlZmlsZQppbmRleCBmZTIzODM2Li4xMGNlYmM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14MjUvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L01ha2VmaWxlCkBAIC0xLDMgKzEsMyBAQAogb2JqLXkJCQkJOj0gbW0ubyBkZXZpY2VzLm8KIG9iai0kKENPTkZJR19BUkNIX01YMjUpCQkrPSBjbG9jay5vCi1vYmotJChDT05GSUdfTUFDSF9NWDI1XzNEUykJKz0gbXgyNXBkay5vCitvYmotJChDT05GSUdfTUFDSF9NWDI1XzNEUykJKz0gbWFjaC1teDI1cGRrLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1teDI1L2Nsb2NrLmMKaW5kZXggMzdlMTM1OS4uMTU1MDE0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDI1L2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L2Nsb2NrLmMKQEAgLTEyNCw2ICsxMjQsMTEgQEAKIAlyZXR1cm4gZ2V0X3JhdGVfcGVyKDUpOwogfQogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9sY2RjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gZ2V0X3JhdGVfcGVyKDcpOworfQorCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcmF0ZV9vdGcoc3RydWN0IGNsayAqY2xrKQogewogCXJldHVybiA0ODAwMDAwMDsgLyogRklYTUUgKi8KQEAgLTE2Nyw2ICsxNzIsOCBAQAogREVGSU5FX0NMT0NLKGNzcGkyX2NsaywgIDAsIENDTV9DR0NSMSwgIDYsIGdldF9yYXRlX2lwZywgTlVMTCwgTlVMTCk7CiBERUZJTkVfQ0xPQ0soY3NwaTNfY2xrLCAgMCwgQ0NNX0NHQ1IxLCAgNywgZ2V0X3JhdGVfaXBnLCBOVUxMLCBOVUxMKTsKIERFRklORV9DTE9DSyhmZWNfYWhiX2NsaywgMCwgQ0NNX0NHQ1IwLCAyMywgTlVMTCwJIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGxjZGNfYWhiX2NsaywgMCwgQ0NNX0NHQ1IwLCAyNCwgTlVMTCwJIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGxjZGNfcGVyX2NsaywgMCwgQ0NNX0NHQ1IwLCAgNywgTlVMTCwJIE5VTEwsICZsY2RjX2FoYl9jbGspOwogREVGSU5FX0NMT0NLKHVhcnQxX2NsaywgIDAsIENDTV9DR0NSMiwgMTQsIGdldF9yYXRlX3VhcnQsIE5VTEwsICZ1YXJ0X3Blcl9jbGspOwogREVGSU5FX0NMT0NLKHVhcnQyX2NsaywgIDAsIENDTV9DR0NSMiwgMTUsIGdldF9yYXRlX3VhcnQsIE5VTEwsICZ1YXJ0X3Blcl9jbGspOwogREVGSU5FX0NMT0NLKHVhcnQzX2NsaywgIDAsIENDTV9DR0NSMiwgMTYsIGdldF9yYXRlX3VhcnQsIE5VTEwsICZ1YXJ0X3Blcl9jbGspOwpAQCAtMTgyLDYgKzE4OSw4IEBACiBERUZJTkVfQ0xPQ0sodHNjX2NsaywJIDAsIENDTV9DR0NSMiwgMTMsIGdldF9yYXRlX2lwZywgTlVMTCwgTlVMTCk7CiBERUZJTkVfQ0xPQ0soaTJjX2NsaywJIDAsIENDTV9DR0NSMCwgIDYsIGdldF9yYXRlX2kyYywgTlVMTCwgTlVMTCk7CiBERUZJTkVfQ0xPQ0soZmVjX2NsaywJIDAsIENDTV9DR0NSMSwgMTUsIGdldF9yYXRlX2lwZywgTlVMTCwgJmZlY19haGJfY2xrKTsKK0RFRklORV9DTE9DSyhkcnlpY2VfY2xrLCAwLCBDQ01fQ0dDUjEsICA4LCBnZXRfcmF0ZV9pcGcsIE5VTEwsIE5VTEwpOworREVGSU5FX0NMT0NLKGxjZGNfY2xrLAkgMCwgQ0NNX0NHQ1IxLCAyOSwgZ2V0X3JhdGVfbGNkYywgTlVMTCwgJmxjZGNfcGVyX2Nsayk7CiAKICNkZWZpbmUgX1JFR0lTVEVSX0NMT0NLKGQsIG4sIGMpCVwKIAl7CQkJCVwKQEAgLTIxNCw2ICsyMjMsOCBAQAogCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4xIiwgTlVMTCwgaTJjX2NsaykKIAlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMiIsIE5VTEwsIGkyY19jbGspCiAJX1JFR0lTVEVSX0NMT0NLKCJmZWMuMCIsIE5VTEwsIGZlY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXhkaV9ydGMuMCIsIE5VTEwsIGRyeWljZV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtZmIuMCIsIE5VTEwsIGxjZGNfY2xrKQogfTsKIAogaW50IF9faW5pdCBteDI1X2Nsb2Nrc19pbml0KHZvaWQpCkBAIC0yMjgsNiArMjM5LDkgQEAKIAlfX3Jhd193cml0ZWwoKDB4ZiA8PCAxNikgfCAoMyA8PCAyNiksIENSTV9CQVNFICsgQ0NNX0NHQ1IxKTsKIAlfX3Jhd193cml0ZWwoKDEgPDwgNSksIENSTV9CQVNFICsgQ0NNX0NHQ1IyKTsKIAorCS8qIENsb2NrIHNvdXJjZSBmb3IgbGNkYyBpcyB1cGxsICovCisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKENSTV9CQVNFKzB4NjQpIHwgKDEgPDwgNyksIENSTV9CQVNFICsgMHg2NCk7CisKIAlteGNfdGltZXJfaW5pdCgmZ3B0X2NsaywgTVgyNV9JT19BRERSRVNTKE1YMjVfR1BUMV9CQVNFX0FERFIpLCA1NCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMgYi9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5jCmluZGV4IDlmZGVlYTEuLjNmNGI4YTAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuYwpAQCAtNDM4LDMgKzQzOCw2NSBAQAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShteDI1X2ZlY19yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IG14MjVfZmVjX3Jlc291cmNlcywKIH07CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXhjX25hbmRfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBNWDI1X05GQ19CQVNFX0FERFIsCisJCS5lbmQJPSBNWDI1X05GQ19CQVNFX0FERFIgKyAweDFmZmYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBNWDI1X0lOVF9OQU5ERkMsCisJCS5lbmQJPSBNWDI1X0lOVF9OQU5ERkMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19uYW5kX2RldmljZSA9IHsKKwkubmFtZQkJPSAibXhjX25hbmQiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShteGNfbmFuZF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG14Y19uYW5kX3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbXgyNV9ydGNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBNWDI1X0RSWUlDRV9CQVNFX0FERFIsCisJCS5lbmQJPSBNWDI1X0RSWUlDRV9CQVNFX0FERFIgKyAweDQwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gTVgyNV9JTlRfRFJZSUNFLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUQorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14MjVfcnRjX2RldmljZSA9IHsKKwkubmFtZQk9ICJpbXhkaV9ydGMiLAorCS5pZAk9IDAsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG14MjVfcnRjX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbXgyNV9ydGNfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteDI1X2ZiX3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gTVgyNV9MQ0RDX0JBU0VfQUREUiwKKwkJLmVuZAk9IE1YMjVfTENEQ19CQVNFX0FERFIgKyAweGZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS5zdGFydAk9IE1YMjVfSU5UX0xDREMsCisJCS5lbmQJPSBNWDI1X0lOVF9MQ0RDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDI1X2ZiX2RldmljZSA9IHsKKwkubmFtZQkJPSAiaW14LWZiIiwKKwkuaWQJCT0gMCwKKwkucmVzb3VyY2UJPSBteDI1X2ZiX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXgyNV9mYl9yZXNvdXJjZXMpLAorCS5kZXYJCT0geworCQkuY29oZXJlbnRfZG1hX21hc2sgPSAweEZGRkZGRkZGLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuaCBiL2FyY2gvYXJtL21hY2gtbXgyNS9kZXZpY2VzLmgKaW5kZXggZmU1NDIwZi4uMzk1NjBlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDI1L2RldmljZXMuaAorKysgYi9hcmNoL2FybS9tYWNoLW14MjUvZGV2aWNlcy5oCkBAIC0xOCwzICsxOCw2IEBACiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTE7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfaTJjX2RldmljZTI7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDI1X2ZlY19kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfbmFuZF9kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDI1X3J0Y19kZXZpY2U7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDI1X2ZiX2RldmljZTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgyNS9tYWNoLW14MjVwZGsuYyBiL2FyY2gvYXJtL21hY2gtbXgyNS9tYWNoLW14MjVwZGsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2Q3NDEwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDI1L21hY2gtbXgyNXBkay5jCkBAIC0wLDAgKzEsMTc0IEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgU2FzY2hhIEhhdWVyLCA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZmVjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL214MjUuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+CisjaW5jbHVkZSA8bWFjaC9pbXhmYi5oPgorI2luY2x1ZGUgImRldmljZXMuaCIKKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MjUuaD4KKworc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKKwkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorfTsKKworc3RhdGljIHN0cnVjdCBwYWRfZGVzYyBteDI1cGRrX3BhZHNbXSA9IHsKKwlNWDI1X1BBRF9GRUNfTURDX19GRUNfTURDLAorCU1YMjVfUEFEX0ZFQ19NRElPX19GRUNfTURJTywKKwlNWDI1X1BBRF9GRUNfVERBVEEwX19GRUNfVERBVEEwLAorCU1YMjVfUEFEX0ZFQ19UREFUQTFfX0ZFQ19UREFUQTEsCisJTVgyNV9QQURfRkVDX1RYX0VOX19GRUNfVFhfRU4sCisJTVgyNV9QQURfRkVDX1JEQVRBMF9fRkVDX1JEQVRBMCwKKwlNWDI1X1BBRF9GRUNfUkRBVEExX19GRUNfUkRBVEExLAorCU1YMjVfUEFEX0ZFQ19SWF9EVl9fRkVDX1JYX0RWLAorCU1YMjVfUEFEX0ZFQ19UWF9DTEtfX0ZFQ19UWF9DTEssCisJTVgyNV9QQURfQTE3X19HUElPXzJfMywgLyogRkVDX0VOLCBHUElPIDM1ICovCisJTVgyNV9QQURfRDEyX19HUElPXzRfOCwgLyogRkVDX1JFU0VUX0IsIEdQSU8gMTA0ICovCisKKwkvKiBMQ0QgKi8KKwlNWDI1X1BBRF9MRDBfX0xEMCwKKwlNWDI1X1BBRF9MRDFfX0xEMSwKKwlNWDI1X1BBRF9MRDJfX0xEMiwKKwlNWDI1X1BBRF9MRDNfX0xEMywKKwlNWDI1X1BBRF9MRDRfX0xENCwKKwlNWDI1X1BBRF9MRDVfX0xENSwKKwlNWDI1X1BBRF9MRDZfX0xENiwKKwlNWDI1X1BBRF9MRDdfX0xENywKKwlNWDI1X1BBRF9MRDhfX0xEOCwKKwlNWDI1X1BBRF9MRDlfX0xEOSwKKwlNWDI1X1BBRF9MRDEwX19MRDEwLAorCU1YMjVfUEFEX0xEMTFfX0xEMTEsCisJTVgyNV9QQURfTEQxMl9fTEQxMiwKKwlNWDI1X1BBRF9MRDEzX19MRDEzLAorCU1YMjVfUEFEX0xEMTRfX0xEMTQsCisJTVgyNV9QQURfTEQxNV9fTEQxNSwKKwlNWDI1X1BBRF9HUElPX0VfX0xEMTYsCisJTVgyNV9QQURfR1BJT19GX19MRDE3LAorCU1YMjVfUEFEX0hTWU5DX19IU1lOQywKKwlNWDI1X1BBRF9WU1lOQ19fVlNZTkMsCisJTVgyNV9QQURfTFNDTEtfX0xTQ0xLLAorCU1YMjVfUEFEX09FX0FDRF9fT0VfQUNELAorCU1YMjVfUEFEX0NPTlRSQVNUX19DT05UUkFTVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmVjX3BsYXRmb3JtX2RhdGEgbXgyNV9mZWNfcGRhdGEgPSB7CisgICAgICAgIC5waHkgICAgPSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSwKK307CisKKyNkZWZpbmUgRkVDX0VOQUJMRV9HUElPCQkzNQorI2RlZmluZSBGRUNfUkVTRVRfQl9HUElPCTEwNAorCitzdGF0aWMgdm9pZCBfX2luaXQgbXgyNXBka19mZWNfcmVzZXQodm9pZCkKK3sKKwlncGlvX3JlcXVlc3QoRkVDX0VOQUJMRV9HUElPLCAiRkVDIFBIWSBlbmFibGUiKTsKKwlncGlvX3JlcXVlc3QoRkVDX1JFU0VUX0JfR1BJTywgIkZFQyBQSFkgcmVzZXQiKTsKKworCWdwaW9fZGlyZWN0aW9uX291dHB1dChGRUNfRU5BQkxFX0dQSU8sIDApOyAgLyogZHJvcCBQSFkgcG93ZXIgKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoRkVDX1JFU0VUX0JfR1BJTywgMCk7IC8qIGFzc2VydCByZXNldCAqLworCXVkZWxheSgyKTsKKworCS8qIHR1cm4gb24gUEhZIHBvd2VyIGFuZCBsaWZ0IHJlc2V0ICovCisJZ3Bpb19zZXRfdmFsdWUoRkVDX0VOQUJMRV9HUElPLCAxKTsKKwlncGlvX3NldF92YWx1ZShGRUNfUkVTRVRfQl9HUElPLCAxKTsKK30KKworc3RhdGljIHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhIG14MjVwZGtfbmFuZF9ib2FyZF9pbmZvID0geworCS53aWR0aAkJPSAxLAorCS5od19lY2MJCT0gMSwKKwkuZmxhc2hfYmJ0CT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14X2ZiX3ZpZGVvbW9kZSBteDI1cGRrX21vZGVzW10gPSB7CisJeworCQkubW9kZQk9IHsKKwkJCS5uYW1lCQk9ICJDUlQtVkdBIiwKKwkJCS5yZWZyZXNoCT0gNjAsCisJCQkueHJlcwkJPSA2NDAsCisJCQkueXJlcwkJPSA0ODAsCisJCQkucGl4Y2xvY2sJPSAzOTY4MywKKwkJCS5sZWZ0X21hcmdpbgk9IDQ1LAorCQkJLnJpZ2h0X21hcmdpbgk9IDExNCwKKwkJCS51cHBlcl9tYXJnaW4JPSAzMywKKwkJCS5sb3dlcl9tYXJnaW4JPSAxMSwKKwkJCS5oc3luY19sZW4JPSAxLAorCQkJLnZzeW5jX2xlbgk9IDEsCisJCX0sCisJCS5icHAJPSAxNiwKKwkJLnBjcgk9IDB4RkEyMDhCODAsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14X2ZiX3BsYXRmb3JtX2RhdGEgbXgyNXBka19mYl9wZGF0YSA9IHsKKwkubW9kZQkJPSBteDI1cGRrX21vZGVzLAorCS5udW1fbW9kZXMJPSBBUlJBWV9TSVpFKG14MjVwZGtfbW9kZXMpLAorCS5wd21yCQk9IDB4MDBBOTAzRkYsCisJLmxzY3IxCQk9IDB4MDAxMjAzMDAsCisJLmRtYWNyCQk9IDB4MDAwMjAwMTAsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbXgyNXBka19pbml0KHZvaWQpCit7CisJbXhjX2lvbXV4X3YzX3NldHVwX211bHRpcGxlX3BhZHMobXgyNXBka19wYWRzLAorCQkJQVJSQVlfU0laRShteDI1cGRrX3BhZHMpKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDIsIE5VTEwpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19uYW5kX2RldmljZSwgJm14MjVwZGtfbmFuZF9ib2FyZF9pbmZvKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDI1X3J0Y19kZXZpY2UsIE5VTEwpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14MjVfZmJfZGV2aWNlLCAmbXgyNXBka19mYl9wZGF0YSk7CisKKwlteDI1cGRrX2ZlY19yZXNldCgpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14MjVfZmVjX2RldmljZSwgJm14MjVfZmVjX3BkYXRhKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG14MjVwZGtfdGltZXJfaW5pdCh2b2lkKQoreworCW14MjVfY2xvY2tzX2luaXQoKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXgyNXBka190aW1lciA9IHsKKwkuaW5pdCAgID0gbXgyNXBka190aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChNWDI1XzNEUywgIkZyZWVzY2FsZSBNWDI1UERLICgzRFMpIikKKwkvKiBNYWludGFpbmVyOiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAqLworCS5waHlzX2lvCT0gTVgyNV9BSVBTMV9CQVNFX0FERFIsCisJLmlvX3BnX29mZnN0CT0gKChNWDI1X0FJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zICAgID0gTVgyNV9QSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8gICAgICAgICA9IG14MjVfbWFwX2lvLAorCS5pbml0X2lycSAgICAgICA9IG14MjVfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZSAgID0gbXgyNXBka19pbml0LAorCS50aW1lciAgICAgICAgICA9ICZteDI1cGRrX3RpbWVyLAorTUFDSElORV9FTkQKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYyBiL2FyY2gvYXJtL21hY2gtbXgyNS9teDI1cGRrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmMDYwODkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDI1L214MjVwZGsuYworKysgL2Rldi9udWxsCkBAIC0xLDExMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDkgU2FzY2hhIEhhdWVyLCA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvZmVjLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KLSNpbmNsdWRlIDxtYWNoL214MjUuaD4KLSNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+Ci0jaW5jbHVkZSAiZGV2aWNlcy5oIgotI2luY2x1ZGUgPG1hY2gvaW9tdXguaD4KLQotc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKLQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotfTsKLQotc3RhdGljIHN0cnVjdCBwYWRfZGVzYyBteDI1cGRrX3BhZHNbXSA9IHsKLQlNWDI1X1BBRF9GRUNfTURDX19GRUNfTURDLAotCU1YMjVfUEFEX0ZFQ19NRElPX19GRUNfTURJTywKLQlNWDI1X1BBRF9GRUNfVERBVEEwX19GRUNfVERBVEEwLAotCU1YMjVfUEFEX0ZFQ19UREFUQTFfX0ZFQ19UREFUQTEsCi0JTVgyNV9QQURfRkVDX1RYX0VOX19GRUNfVFhfRU4sCi0JTVgyNV9QQURfRkVDX1JEQVRBMF9fRkVDX1JEQVRBMCwKLQlNWDI1X1BBRF9GRUNfUkRBVEExX19GRUNfUkRBVEExLAotCU1YMjVfUEFEX0ZFQ19SWF9EVl9fRkVDX1JYX0RWLAotCU1YMjVfUEFEX0ZFQ19UWF9DTEtfX0ZFQ19UWF9DTEssCi0JTVgyNV9QQURfQTE3X19HUElPXzJfMywgLyogRkVDX0VOLCBHUElPIDM1ICovCi0JTVgyNV9QQURfRDEyX19HUElPXzRfOCwgLyogRkVDX1JFU0VUX0IsIEdQSU8gMTA0ICovCi19OwotCi1zdGF0aWMgc3RydWN0IGZlY19wbGF0Zm9ybV9kYXRhIG14MjVfZmVjX3BkYXRhID0gewotICAgICAgICAucGh5ICAgID0gUEhZX0lOVEVSRkFDRV9NT0RFX1JNSUksCi19OwotCi0jZGVmaW5lIEZFQ19FTkFCTEVfR1BJTwkJMzUKLSNkZWZpbmUgRkVDX1JFU0VUX0JfR1BJTwkxMDQKLQotc3RhdGljIHZvaWQgX19pbml0IG14MjVwZGtfZmVjX3Jlc2V0KHZvaWQpCi17Ci0JZ3Bpb19yZXF1ZXN0KEZFQ19FTkFCTEVfR1BJTywgIkZFQyBQSFkgZW5hYmxlIik7Ci0JZ3Bpb19yZXF1ZXN0KEZFQ19SRVNFVF9CX0dQSU8sICJGRUMgUEhZIHJlc2V0Iik7Ci0KLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoRkVDX0VOQUJMRV9HUElPLCAwKTsgIC8qIGRyb3AgUEhZIHBvd2VyICovCi0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEZFQ19SRVNFVF9CX0dQSU8sIDApOyAvKiBhc3NlcnQgcmVzZXQgKi8KLQl1ZGVsYXkoMik7Ci0KLQkvKiB0dXJuIG9uIFBIWSBwb3dlciBhbmQgbGlmdCByZXNldCAqLwotCWdwaW9fc2V0X3ZhbHVlKEZFQ19FTkFCTEVfR1BJTywgMSk7Ci0JZ3Bpb19zZXRfdmFsdWUoRkVDX1JFU0VUX0JfR1BJTywgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBteDI1cGRrX2luaXQodm9pZCkKLXsKLQlteGNfaW9tdXhfdjNfc2V0dXBfbXVsdGlwbGVfcGFkcyhteDI1cGRrX3BhZHMsCi0JCQlBUlJBWV9TSVpFKG14MjVwZGtfcGFkcykpOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgTlVMTCk7Ci0KLQlteDI1cGRrX2ZlY19yZXNldCgpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14MjVfZmVjX2RldmljZSwgJm14MjVfZmVjX3BkYXRhKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IG14MjVwZGtfdGltZXJfaW5pdCh2b2lkKQotewotCW14MjVfY2xvY2tzX2luaXQoKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXgyNXBka190aW1lciA9IHsKLQkuaW5pdCAgID0gbXgyNXBka190aW1lcl9pbml0LAotfTsKLQotTUFDSElORV9TVEFSVChNWDI1XzNEUywgIkZyZWVzY2FsZSBNWDI1UERLICgzRFMpIikKLQkvKiBNYWludGFpbmVyOiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAqLwotCS5waHlzX2lvCT0gTVgyNV9BSVBTMV9CQVNFX0FERFIsCi0JLmlvX3BnX29mZnN0CT0gKChNWDI1X0FJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zICAgID0gUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBteDI1X21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDI1X2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IG14MjVwZGtfaW5pdCwKLQkudGltZXIgICAgICAgICAgPSAmbXgyNXBka190aW1lciwKLU1BQ0hJTkVfRU5ECi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW14My9LY29uZmlnCmluZGV4IDI4Mjk0NDEuLjM4NzJhZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvS2NvbmZpZwpAQCAtMzQsNiArMzQsNyBAQAogY29uZmlnIE1BQ0hfUENNMDM3CiAJYm9vbCAiU3VwcG9ydCBQaHl0ZWMgcGNtMDM3IChpLk1YMzEpIHBsYXRmb3JtcyIKIAlzZWxlY3QgQVJDSF9NWDMxCisJc2VsZWN0IE1YQ19VTFBJIGlmIFVTQl9VTFBJCiAJaGVscAogCSAgSW5jbHVkZSBzdXBwb3J0IGZvciBQaHl0ZWMgcGNtMDM3IHBsYXRmb3JtLiBUaGlzIGluY2x1ZGVzCiAJICBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgdGhlIGJvYXJkIGFuZCBpdHMgcGVyaXBoZXJhbHMuCkBAIC04Niw2ICs4Nyw3IEBACiBjb25maWcgTUFDSF9QQ00wNDMKIAlib29sICJTdXBwb3J0IFBoeXRlYyBwY20wNDMgKGkuTVgzNSkgcGxhdGZvcm1zIgogCXNlbGVjdCBBUkNIX01YMzUKKwlzZWxlY3QgTVhDX1VMUEkgaWYgVVNCX1VMUEkKIAloZWxwCiAJICBJbmNsdWRlIHN1cHBvcnQgZm9yIFBoeXRlYyBwY20wNDMgcGxhdGZvcm0uIFRoaXMgaW5jbHVkZXMKIAkgIHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgYm9hcmQgYW5kIGl0cyBwZXJpcGhlcmFscy4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1teDMvTWFrZWZpbGUKaW5kZXggOTNjN2IyOS4uNWQ2NTBmZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvTWFrZWZpbGUKQEAgLTUsMTggKzUsMjIgQEAKICMgT2JqZWN0IGZpbGUgbGlzdHMuCiAKIG9iai15CQkJCTo9IG1tLm8gZGV2aWNlcy5vIGNwdS5vCi1vYmotJChDT05GSUdfQVJDSF9NWDMxKQkJKz0gY2xvY2subyBpb211eC5vCitDRkxBR1NfbW0ubyA9IC1ESU1YX05FRURTX0RFUFJFQ0FURURfU1lNQk9MUworQ0ZMQUdTX2RldmljZXMubyA9IC1ESU1YX05FRURTX0RFUFJFQ0FURURfU1lNQk9MUworQ0ZMQUdTX2NwdS5vID0gLURJTVhfTkVFRFNfREVQUkVDQVRFRF9TWU1CT0xTCitvYmotJChDT05GSUdfQVJDSF9NWDMxKQkJKz0gY2xvY2staW14MzEubyBpb211eC1pbXgzMS5vCiBvYmotJChDT05GSUdfQVJDSF9NWDM1KQkJKz0gY2xvY2staW14MzUubwotb2JqLSQoQ09ORklHX01BQ0hfTVgzMUFEUykJKz0gbXgzMWFkcy5vCi1vYmotJChDT05GSUdfTUFDSF9NWDMxTElMTFkpCSs9IG14MzFsaWxseS5vIG14MzFsaWxseS1kYi5vCi1vYmotJChDT05GSUdfTUFDSF9NWDMxTElURSkJKz0gbXgzMWxpdGUubyBteDMxbGl0ZS1kYi5vCi1vYmotJChDT05GSUdfTUFDSF9QQ00wMzcpCSs9IHBjbTAzNy5vCi1vYmotJChDT05GSUdfTUFDSF9QQ00wMzdfRUVUKQkrPSBwY20wMzdfZWV0Lm8KLW9iai0kKENPTkZJR19NQUNIX01YMzFfM0RTKQkrPSBteDMxcGRrLm8KLW9iai0kKENPTkZJR19NQUNIX01YMzFNT0JPQVJEKQkrPSBteDMxbW9ib2FyZC5vIG14MzFtb2JvYXJkLWRldmJvYXJkLm8gXAotCQkJCSAgIG14MzFtb2JvYXJkLW1hcnhib3Qubwotb2JqLSQoQ09ORklHX01BQ0hfUU9ORykJCSs9IHFvbmcubwotb2JqLSQoQ09ORklHX01BQ0hfUENNMDQzKQkrPSBwY20wNDMubwotb2JqLSQoQ09ORklHX01BQ0hfQVJNQURJTExPNVgwKSArPSBhcm1hZGlsbG81eDAubwotb2JqLSQoQ09ORklHX01BQ0hfTVgzNV8zRFMpCSs9IG14MzVwZGsubwotb2JqLSQoQ09ORklHX01BQ0hfS1pNX0FSTTExXzAxKQkrPSBrem1hcm0xMS5vCitvYmotJChDT05GSUdfTUFDSF9NWDMxQURTKQkrPSBtYWNoLW14MzFhZHMubworb2JqLSQoQ09ORklHX01BQ0hfTVgzMUxJTExZKQkrPSBtYWNoLW14MzFsaWxseS5vIG14MzFsaWxseS1kYi5vCitvYmotJChDT05GSUdfTUFDSF9NWDMxTElURSkJKz0gbWFjaC1teDMxbGl0ZS5vIG14MzFsaXRlLWRiLm8KK29iai0kKENPTkZJR19NQUNIX1BDTTAzNykJKz0gbWFjaC1wY20wMzcubworb2JqLSQoQ09ORklHX01BQ0hfUENNMDM3X0VFVCkJKz0gbWFjaC1wY20wMzdfZWV0Lm8KK29iai0kKENPTkZJR19NQUNIX01YMzFfM0RTKQkrPSBtYWNoLW14MzFfM2RzLm8KK0NGTEFHU19tYWNoLW14MzFfM2RzLm8gPSAtRElNWF9ORUVEU19ERVBSRUNBVEVEX1NZTUJPTFMKK29iai0kKENPTkZJR19NQUNIX01YMzFNT0JPQVJEKQkrPSBtYWNoLW14MzFtb2JvYXJkLm8gbXgzMW1vYm9hcmQtZGV2Ym9hcmQubyBcCisJCQkJICAgbXgzMW1vYm9hcmQtbWFyeGJvdC5vIG14MzFtb2JvYXJkLXNtYXJ0Ym90Lm8KK29iai0kKENPTkZJR19NQUNIX1FPTkcpCQkrPSBtYWNoLXFvbmcubworb2JqLSQoQ09ORklHX01BQ0hfUENNMDQzKQkrPSBtYWNoLXBjbTA0My5vCitvYmotJChDT05GSUdfTUFDSF9BUk1BRElMTE81WDApICs9IG1hY2gtYXJtYWRpbGxvNXgwLm8KK29iai0kKENPTkZJR19NQUNIX01YMzVfM0RTKQkrPSBtYWNoLW14MzVwZGsubworb2JqLSQoQ09ORklHX01BQ0hfS1pNX0FSTTExXzAxKQkrPSBtYWNoLWt6bV9hcm0xMV8wMS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9hcm1hZGlsbG81eDAuYyBiL2FyY2gvYXJtL21hY2gtbXgzL2FybWFkaWxsbzV4MC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NGFhYjQwLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2FybWFkaWxsbzV4MC5jCisrKyAvZGV2L251bGwKQEAgLTEsNDE2ICswLDAgQEAKLS8qCi0gKiBhcm1hZGlsbG81eDAuYwotICoKLSAqIENvcHlyaWdodCAyMDA5IEFsYmVydG8gUGFuaXp6byA8bWFyYW1hb3BlcmNoZXNlaW1vcnRvQGdtYWlsLmNvbT4KLSAqIHVwZGF0ZXMgaW4gaHR0cDovL2FsYmVyZHJvaWQuYmxvZ3Nwb3QuY29tLwotICoKLSAqIEJhc2VkIG9uIEF0bWFyayBUZWNobm8sIEluYy4gYXJtYWRpbGxvIDUwMCBCU1AgMjAwOAotICogQmFzZWQgb24gbXgzMWFkcy5jIGFuZCBwY20wMzcuYyBHcmVhdCBXb3JrIQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKLSAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzLmg+Ci0jaW5jbHVkZSA8bWFjaC9ib2FyZC1hcm1hZGlsbG81eDAuaD4KLSNpbmNsdWRlIDxtYWNoL21tYy5oPgotI2luY2x1ZGUgPG1hY2gvaXB1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9teDNmYi5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KLQotI2luY2x1ZGUgImRldmljZXMuaCIKLSNpbmNsdWRlICJjcm1fcmVncy5oIgotCi1zdGF0aWMgaW50IGFybWFkaWxsbzV4MF9waW5zW10gPSB7Ci0JLyogVUFSVDEgKi8KLQlNWDMxX1BJTl9DVFMxX19DVFMxLAotCU1YMzFfUElOX1JUUzFfX1JUUzEsCi0JTVgzMV9QSU5fVFhEMV9fVFhEMSwKLQlNWDMxX1BJTl9SWEQxX19SWEQxLAotCS8qIFVBUlQyICovCi0JTVgzMV9QSU5fQ1RTMl9fQ1RTMiwKLQlNWDMxX1BJTl9SVFMyX19SVFMyLAotCU1YMzFfUElOX1RYRDJfX1RYRDIsCi0JTVgzMV9QSU5fUlhEMl9fUlhEMiwKLQkvKiBMQU45MTE4X0lSUSAqLwotCUlPTVVYX01PREUoTVgzMV9QSU5fR1BJTzFfMCwgSU9NVVhfQ09ORklHX0dQSU8pLAotCS8qIFNESEMxICovCi0JTVgzMV9QSU5fU0QxX0RBVEEzX19TRDFfREFUQTMsCi0JTVgzMV9QSU5fU0QxX0RBVEEyX19TRDFfREFUQTIsCi0JTVgzMV9QSU5fU0QxX0RBVEExX19TRDFfREFUQTEsCi0JTVgzMV9QSU5fU0QxX0RBVEEwX19TRDFfREFUQTAsCi0JTVgzMV9QSU5fU0QxX0NMS19fU0QxX0NMSywKLQlNWDMxX1BJTl9TRDFfQ01EX19TRDFfQ01ELAotCS8qIEZyYW1lYnVmZmVyICovCi0JTVgzMV9QSU5fTEQwX19MRDAsCi0JTVgzMV9QSU5fTEQxX19MRDEsCi0JTVgzMV9QSU5fTEQyX19MRDIsCi0JTVgzMV9QSU5fTEQzX19MRDMsCi0JTVgzMV9QSU5fTEQ0X19MRDQsCi0JTVgzMV9QSU5fTEQ1X19MRDUsCi0JTVgzMV9QSU5fTEQ2X19MRDYsCi0JTVgzMV9QSU5fTEQ3X19MRDcsCi0JTVgzMV9QSU5fTEQ4X19MRDgsCi0JTVgzMV9QSU5fTEQ5X19MRDksCi0JTVgzMV9QSU5fTEQxMF9fTEQxMCwKLQlNWDMxX1BJTl9MRDExX19MRDExLAotCU1YMzFfUElOX0xEMTJfX0xEMTIsCi0JTVgzMV9QSU5fTEQxM19fTEQxMywKLQlNWDMxX1BJTl9MRDE0X19MRDE0LAotCU1YMzFfUElOX0xEMTVfX0xEMTUsCi0JTVgzMV9QSU5fTEQxNl9fTEQxNiwKLQlNWDMxX1BJTl9MRDE3X19MRDE3LAotCU1YMzFfUElOX1ZTWU5DM19fVlNZTkMzLAotCU1YMzFfUElOX0hTWU5DX19IU1lOQywKLQlNWDMxX1BJTl9GUFNISUZUX19GUFNISUZULAotCU1YMzFfUElOX0RSRFkwX19EUkRZMCwKLQlJT01VWF9NT0RFKE1YMzFfUElOX0xDUzEsIElPTVVYX0NPTkZJR19HUElPKSwgLypBRFY3MTI1X1BTQVZFKi8KLQkvKiBJMkMyICovCi0JTVgzMV9QSU5fQ1NQSTJfTU9TSV9fU0NMLAotCU1YMzFfUElOX0NTUEkyX01JU09fX1NEQSwKLX07Ci0KLS8qIFJUQyBvdmVyIEkyQyovCi0jZGVmaW5lIEFSTUFESUxMTzVYMF9SVENfR1BJTwlJT01VWF9UT19HUElPKE1YMzFfUElOX1NSWEQ0KQotCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGFybWFkaWxsbzV4MF9pMmNfcnRjID0gewotCUkyQ19CT0FSRF9JTkZPKCJzMzUzOTBhIiwgMHgzMCksCi19OwotCi0vKiBHUElPIEJVVFRPTlMgKi8KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBhcm1hZGlsbG81eDBfYnV0dG9uc1tdID0gewotCXsKLQkJLmNvZGUJCT0gS0VZX0VOVEVSLCAvKjI4Ki8KLQkJLmdwaW8JCT0gSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9TQ0xLMCksCi0JCS5hY3RpdmVfbG93CT0gMSwKLQkJLmRlc2MJCT0gIm1lbnUiLAotCQkud2FrZXVwCQk9IDEsCi0JfSwgewotCQkuY29kZQkJPSBLRVlfQkFDSywgLyoxNTgqLwotCQkuZ3BpbwkJPSBJT01VWF9UT19HUElPKE1YMzFfUElOX1NSU1QwKSwKLQkJLmFjdGl2ZV9sb3cJPSAxLAotCQkuZGVzYwkJPSAiYmFjayIsCi0JCS53YWtldXAJCT0gMSwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGFybWFkaWxsbzV4MF9idXR0b25fZGF0YSA9IHsKLQkuYnV0dG9ucwk9IGFybWFkaWxsbzV4MF9idXR0b25zLAotCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoYXJtYWRpbGxvNXgwX2J1dHRvbnMpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXJtYWRpbGxvNXgwX2J1dHRvbl9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gImdwaW8ta2V5cyIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gMCwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmYXJtYWRpbGxvNXgwX2J1dHRvbl9kYXRhLAotCX0KLX07Ci0KLS8qCi0gKiBOQU5EIEZsYXNoCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSBhcm1hZGlsbG81eDBfbmFuZF9mbGFzaF9wZGF0YSA9IHsKLQkud2lkdGgJCT0gMSwKLQkuaHdfZWNjCQk9IDEsCi19OwotCi0vKgotICogTVREIE5PUiBGbGFzaAotICovCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gYXJtYWRpbGxvNXgwX25vcl9mbGFzaF9wYXJ0aXRpb25zW10gPSB7Ci0JewotCQkubmFtZQkJPSAibm9yLmJvb3Rsb2FkZXIiLAotCQkub2Zmc2V0CQk9IDB4MDAwMDAwMDAsCi0JCS5zaXplCQk9IDQqMzIqMTAyNCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJub3Iua2VybmVsIiwKLQkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCi0JCS5zaXplCQk9IDE2KjEyOCoxMDI0LAotCX0sIHsKLQkJLm5hbWUJCT0gIm5vci51c2VybGFuZCIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAotCQkuc2l6ZQkJPSAxMTAqMTI4KjEwMjQsCi0JfSwgewotCQkubmFtZQkJPSAibm9yLmNvbmZpZyIsCi0JCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAotCQkuc2l6ZQkJPSAxKjEyOCoxMDI0LAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBhcm1hZGlsbG81eDBfbm9yX2ZsYXNoX3BkYXRhID0gewotCS53aWR0aAkJPSAyLAotCS5wYXJ0cwkJPSBhcm1hZGlsbG81eDBfbm9yX2ZsYXNoX3BhcnRpdGlvbnMsCi0JLm5yX3BhcnRzCT0gQVJSQVlfU0laRShhcm1hZGlsbG81eDBfbm9yX2ZsYXNoX3BhcnRpdGlvbnMpLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhcm1hZGlsbG81eDBfbm9yX2ZsYXNoX3Jlc291cmNlID0gewotCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKLQkuc3RhcnQJCT0gQ1MwX0JBU0VfQUREUiwKLQkuZW5kCQk9IENTMF9CQVNFX0FERFIgKyBTWl82NE0gLSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXJtYWRpbGxvNXgwX25vcl9mbGFzaCA9IHsKLQkubmFtZQkJCT0gInBoeXNtYXAtZmxhc2giLAotCS5pZAkJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJCT0gMSwKLQkucmVzb3VyY2UJCT0gJmFybWFkaWxsbzV4MF9ub3JfZmxhc2hfcmVzb3VyY2UsCi19OwotCi0vKgotICogRkIgc3VwcG9ydAotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSBmYl9tb2RlZGJbXSA9IHsKLQl7CS8qIDY0MHg0ODAgQCA2MCBIeiAqLwotCQkubmFtZQkJPSAiQ1JULVZHQSIsCi0JCS5yZWZyZXNoCT0gNjAsCi0JCS54cmVzCQk9IDY0MCwKLQkJLnlyZXMJCT0gNDgwLAotCQkucGl4Y2xvY2sJPSAzOTcyMSwKLQkJLmxlZnRfbWFyZ2luCT0gMzUsCi0JCS5yaWdodF9tYXJnaW4JPSAxMTUsCi0JCS51cHBlcl9tYXJnaW4JPSA0MywKLQkJLmxvd2VyX21hcmdpbgk9IDEsCi0JCS5oc3luY19sZW4JPSAxMCwKLQkJLnZzeW5jX2xlbgk9IDEsCi0JCS5zeW5jCQk9IEZCX1NZTkNfT0VfQUNUX0hJR0gsCi0JCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAotCQkuZmxhZwkJPSAwLAotCX0sIHsvKiA4MDB4NjAwIEAgNTYgSHogKi8KLQkJLm5hbWUJCT0gIkNSVC1TVkdBIiwKLQkJLnJlZnJlc2gJPSA1NiwKLQkJLnhyZXMJCT0gODAwLAotCQkueXJlcwkJPSA2MDAsCi0JCS5waXhjbG9jawk9IDMwMDAwLAotCQkubGVmdF9tYXJnaW4JPSAzMCwKLQkJLnJpZ2h0X21hcmdpbgk9IDEwOCwKLQkJLnVwcGVyX21hcmdpbgk9IDEzLAotCQkubG93ZXJfbWFyZ2luCT0gMTAsCi0JCS5oc3luY19sZW4JPSAxMCwKLQkJLnZzeW5jX2xlbgk9IDEsCi0JCS5zeW5jCQk9IEZCX1NZTkNfT0VfQUNUX0hJR0ggfCBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8Ci0JCQkJICBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QsCi0JCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAotCQkuZmxhZwkJPSAwLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGlwdV9wbGF0Zm9ybV9kYXRhIG14M19pcHVfZGF0YSA9IHsKLQkuaXJxX2Jhc2UgPSBNWENfSVBVX0lSUV9TVEFSVCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXgzZmJfcGxhdGZvcm1fZGF0YSBteDNmYl9wZGF0YSA9IHsKLQkuZG1hX2Rldgk9ICZteDNfaXB1LmRldiwKLQkubmFtZQkJPSAiQ1JULVZHQSIsCi0JLm1vZGUJCT0gZmJfbW9kZWRiLAotCS5udW1fbW9kZXMJPSBBUlJBWV9TSVpFKGZiX21vZGVkYiksCi19OwotCi0vKgotICogU0RIQyAxCi0gKiBNTUMgc3VwcG9ydAotICovCi1zdGF0aWMgaW50IGFybWFkaWxsbzV4MF9zZGhjMV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiBncGlvX2dldF92YWx1ZShJT01VWF9UT19HUElPKE1YMzFfUElOX0FUQV9SRVNFVF9CKSk7Ci19Ci0KLXN0YXRpYyBpbnQgYXJtYWRpbGxvNXgwX3NkaGMxX2luaXQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgIGlycV9oYW5kbGVyX3QgZGV0ZWN0X2lycSwgdm9pZCAqZGF0YSkKLXsKLQlpbnQgcmV0OwotCWludCBncGlvX2RldCwgZ3Bpb193cDsKLQotCWdwaW9fZGV0ID0gSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9BVEFfRE1BQ0spOwotCWdwaW9fd3AgPSBJT01VWF9UT19HUElPKE1YMzFfUElOX0FUQV9SRVNFVF9CKTsKLQotCXJldCA9IGdwaW9fcmVxdWVzdChncGlvX2RldCwgInNkaGMtY2FyZC1kZXRlY3QiKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpb19kZXQpOwotCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9fd3AsICJzZGhjLXdyaXRlLXByb3RlY3QiKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9ncGlvX2ZyZWU7Ci0KLQlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvX3dwKTsKLQotCS8qIFdoZW4gc3VwcG9ydGVkIHRoZSB0cmlnZ2VyIHR5cGUgaGF2ZSB0byBiZSBCT1RIICovCi0JcmV0ID0gcmVxdWVzdF9pcnEoSU9NVVhfVE9fSVJRKE1YMzFfUElOX0FUQV9ETUFDSyksIGRldGVjdF9pcnEsCi0JCQkgIElSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCSAgInNkaGMtZGV0ZWN0IiwgZGF0YSk7Ci0KLQlpZiAocmV0KQotCQlnb3RvIGVycl9ncGlvX2ZyZWVfMjsKLQotCXJldHVybiAwOwotCi1lcnJfZ3Bpb19mcmVlXzI6Ci0JZ3Bpb19mcmVlKGdwaW9fd3ApOwotCi1lcnJfZ3Bpb19mcmVlOgotCWdwaW9fZnJlZShncGlvX2RldCk7Ci0KLQlyZXR1cm4gcmV0OwotCi19Ci0KLXN0YXRpYyB2b2lkIGFybWFkaWxsbzV4MF9zZGhjMV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKLXsKLQlmcmVlX2lycShJT01VWF9UT19JUlEoTVgzMV9QSU5fQVRBX0RNQUNLKSwgZGF0YSk7Ci0JZ3Bpb19mcmVlKElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fQVRBX0RNQUNLKSk7Ci0JZ3Bpb19mcmVlKElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fQVRBX1JFU0VUX0IpKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjX3BkYXRhID0gewotCS5nZXRfcm8gPSBhcm1hZGlsbG81eDBfc2RoYzFfZ2V0X3JvLAotCS5pbml0ID0gYXJtYWRpbGxvNXgwX3NkaGMxX2luaXQsCi0JLmV4aXQgPSBhcm1hZGlsbG81eDBfc2RoYzFfZXhpdCwKLX07Ci0KLS8qCi0gKiBTTVNDIDkxMTgKLSAqIE5ldHdvcmsgc3VwcG9ydAotICovCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGFybWFkaWxsbzV4MF9zbWM5MTF4X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CT0gQ1MzX0JBU0VfQUREUiwKLQkJLmVuZAk9IENTM19CQVNFX0FERFIgKyBTWl8zMk0gLSAxLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydAk9IElPTVVYX1RPX0lSUShNWDMxX1BJTl9HUElPMV8wKSwKLQkJLmVuZAk9IElPTVVYX1RPX0lSUShNWDMxX1BJTl9HUElPMV8wKSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9MT1dMRVZFTCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBzbXNjOTExeF9wbGF0Zm9ybV9jb25maWcgc21zYzkxMXhfaW5mbyA9IHsKLQkuZmxhZ3MJCT0gU01TQzkxMVhfVVNFXzE2QklULAotCS5pcnFfcG9sYXJpdHkgICA9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAotCS5pcnFfdHlwZSAgICAgICA9IFNNU0M5MTFYX0lSUV9UWVBFX1BVU0hfUFVMTCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFybWFkaWxsbzV4MF9zbWM5MTF4X2RldmljZSA9IHsKLQkubmFtZSAgICAgICAgICAgPSAic21zYzkxMXgiLAotCS5pZCAgICAgICAgICAgICA9IC0xLAotCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoYXJtYWRpbGxvNXgwX3NtYzkxMXhfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UgICAgICAgPSBhcm1hZGlsbG81eDBfc21jOTExeF9yZXNvdXJjZXMsCi0JLmRldiAgICAgICAgICAgID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzbXNjOTExeF9pbmZvLAotCX0sCi19OwotCi0vKiBVQVJUIGRldmljZSBkYXRhICovCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0gewotCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJmFybWFkaWxsbzV4MF9zbWM5MTF4X2RldmljZSwKLQkmbXhjX2kyY19kZXZpY2UxLAotCSZhcm1hZGlsbG81eDBfYnV0dG9uX2RldmljZSwKLX07Ci0KLS8qCi0gKiBQZXJmb3JtIGJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9ucwotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgYXJtYWRpbGxvNXgwX2luaXQodm9pZCkKLXsKLQlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhhcm1hZGlsbG81eDBfcGlucywKLQkJCUFSUkFZX1NJWkUoYXJtYWRpbGxvNXgwX3BpbnMpLCAiYXJtYWRpbGxvNXgwIik7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKLQotCS8qIFJlZ2lzdGVyIFVBUlQgKi8KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgJnVhcnRfcGRhdGEpOwotCi0JLyogU01TQzkxMTggSVJRIHBpbiAqLwotCWdwaW9fZGlyZWN0aW9uX2lucHV0KE1YMzFfUElOX0dQSU8xXzApOwotCi0JLyogUmVnaXN0ZXIgU0RIQyAqLwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y3NkaGNfZGV2aWNlMCwgJnNkaGNfcGRhdGEpOwotCi0JLyogUmVnaXN0ZXIgRkIgKi8KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDNfaXB1LCAmbXgzX2lwdV9kYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDNfZmIsICZteDNmYl9wZGF0YSk7Ci0KLQkvKiBSZWdpc3RlciBOT1IgRmxhc2ggKi8KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZhcm1hZGlsbG81eDBfbm9yX2ZsYXNoLAotCQkJICAgICZhcm1hZGlsbG81eDBfbm9yX2ZsYXNoX3BkYXRhKTsKLQotCS8qIFJlZ2lzdGVyIE5BTkQgRmxhc2ggKi8KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfbmFuZF9kZXZpY2UsICZhcm1hZGlsbG81eDBfbmFuZF9mbGFzaF9wZGF0YSk7Ci0KLQkvKiBzZXQgTkFORCBwYWdlIHNpemUgdG8gMmsgaWYgbm90IGNvbmZpZ3VyZWQgdmlhIGJvb3QgbW9kZSBwaW5zICovCi0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKE1YQ19DQ01fUkNTUikgfCAoMSA8PCAzMCksIE1YQ19DQ01fUkNTUik7Ci0KLQkvKiBSVEMgKi8KLQkvKiBHZXQgUlRDIElSUSBhbmQgcmVnaXN0ZXIgdGhlIGNoaXAgKi8KLQlpZiAoZ3Bpb19yZXF1ZXN0KEFSTUFESUxMTzVYMF9SVENfR1BJTywgInJ0YyIpID09IDApIHsKLQkJaWYgKGdwaW9fZGlyZWN0aW9uX2lucHV0KEFSTUFESUxMTzVYMF9SVENfR1BJTykgPT0gMCkKLQkJCWFybWFkaWxsbzV4MF9pMmNfcnRjLmlycSA9IGdwaW9fdG9faXJxKEFSTUFESUxMTzVYMF9SVENfR1BJTyk7Ci0JCWVsc2UKLQkJCWdwaW9fZnJlZShBUk1BRElMTE81WDBfUlRDX0dQSU8pOwotCX0KLQlpZiAoYXJtYWRpbGxvNXgwX2kyY19ydGMuaXJxID09IDApCi0JCXByX3dhcm5pbmcoImFybWFkaWxsbzV4MF9pbml0OiBmYWlsZWQgdG8gZ2V0IFJUQyBJUlFcbiIpOwotCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsICZhcm1hZGlsbG81eDBfaTJjX3J0YywgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBhcm1hZGlsbG81eDBfdGltZXJfaW5pdCh2b2lkKQotewotCW14MzFfY2xvY2tzX2luaXQoMjYwMDAwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c190aW1lciBhcm1hZGlsbG81eDBfdGltZXIgPSB7Ci0JLmluaXQJPSBhcm1hZGlsbG81eDBfdGltZXJfaW5pdCwKLX07Ci0KLU1BQ0hJTkVfU1RBUlQoQVJNQURJTExPNVgwLCAiQXJtYWRpbGxvLTUwMCIpCi0JLyogTWFpbnRhaW5lcjogQWxiZXJ0byBQYW5penpvICAqLwotCS5waHlzX2lvCT0gQUlQUzFfQkFTRV9BRERSLAotCS5pb19wZ19vZmZzdAk9ICgoQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MDAwMDAxMDAsCi0JLm1hcF9pbwkJPSBteDMxX21hcF9pbywKLQkuaW5pdF9pcnEJPSBteDMxX2luaXRfaXJxLAotCS50aW1lcgkJPSAmYXJtYWRpbGxvNXgwX3RpbWVyLAotCS5pbml0X21hY2hpbmUJPSBhcm1hZGlsbG81eDBfaW5pdCwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jbG9jay1pbXgzMS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MGRiYTk5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzEuYwpAQCAtMCwwICsxLDYzMSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA1LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBieSBTYXNjaGEgSGF1ZXIgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNpbmNsdWRlIDxtYWNoL2Nsb2NrLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvbXgzMS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisKKyNpbmNsdWRlICJjcm1fcmVncy5oIgorCisjZGVmaW5lIFBSRV9ESVZfTUlOX0ZSRVEgICAgMTAwMDAwMDAgLyogTWluaW11bSBGcmVxdWVuY3kgYWZ0ZXIgUHJlZGl2aWRlciAqLworCitzdGF0aWMgdm9pZCBfX2NhbGNfcHJlX3Bvc3RfZGl2aWRlcnModTMyIGRpdiwgdTMyICpwcmUsIHUzMiAqcG9zdCkKK3sKKwl1MzIgbWluX3ByZSwgdGVtcF9wcmUsIG9sZF9lcnIsIGVycjsKKworCWlmIChkaXYgPj0gNTEyKSB7CisJCSpwcmUgPSA4OworCQkqcG9zdCA9IDY0OworCX0gZWxzZSBpZiAoZGl2ID49IDY0KSB7CisJCW1pbl9wcmUgPSAoZGl2IC0gMSkgLyA2NCArIDE7CisJCW9sZF9lcnIgPSA4OworCQlmb3IgKHRlbXBfcHJlID0gODsgdGVtcF9wcmUgPj0gbWluX3ByZTsgdGVtcF9wcmUtLSkgeworCQkJZXJyID0gZGl2ICUgdGVtcF9wcmU7CisJCQlpZiAoZXJyID09IDApIHsKKwkJCQkqcHJlID0gdGVtcF9wcmU7CisJCQkJYnJlYWs7CisJCQl9CisJCQllcnIgPSB0ZW1wX3ByZSAtIGVycjsKKwkJCWlmIChlcnIgPCBvbGRfZXJyKSB7CisJCQkJb2xkX2VyciA9IGVycjsKKwkJCQkqcHJlID0gdGVtcF9wcmU7CisJCQl9CisJCX0KKwkJKnBvc3QgPSAoZGl2ICsgKnByZSAtIDEpIC8gKnByZTsKKwl9IGVsc2UgaWYgKGRpdiA8PSA4KSB7CisJCSpwcmUgPSBkaXY7CisJCSpwb3N0ID0gMTsKKwl9IGVsc2UgeworCQkqcHJlID0gMTsKKwkJKnBvc3QgPSBkaXY7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNsayBtY3VfcGxsX2NsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNlcmlhbF9wbGxfY2xrOworc3RhdGljIHN0cnVjdCBjbGsgaXBnX2NsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNraWhfY2xrOworCitzdGF0aWMgaW50IGNncl9lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisKKwlpZiAoIWNsay0+ZW5hYmxlX3JlZykKKwkJcmV0dXJuIDA7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOworCXJlZyB8PSAzIDw8IGNsay0+ZW5hYmxlX3NoaWZ0OworCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY2dyX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisKKwlpZiAoIWNsay0+ZW5hYmxlX3JlZykKKwkJcmV0dXJuOworCisJcmVnID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlyZWcgJj0gfigzIDw8IGNsay0+ZW5hYmxlX3NoaWZ0KTsKKworCS8qIHNwZWNpYWwgY2FzZSBmb3IgRU1JIGNsb2NrICovCisJaWYgKGNsay0+ZW5hYmxlX3JlZyA9PSBNWENfQ0NNX0NHUjIgJiYgY2xrLT5lbmFibGVfc2hpZnQgPT0gOCkKKwkJcmVnIHw9ICgxIDw8IGNsay0+ZW5hYmxlX3NoaWZ0KTsKKworCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHBsbF9yZWZfZ2V0X3JhdGUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGNjbXI7CisJdW5zaWduZWQgaW50IHByY3M7CisKKwljY21yID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQ01SKTsKKwlwcmNzID0gKGNjbXIgJiBNWENfQ0NNX0NDTVJfUFJDU19NQVNLKSA+PiBNWENfQ0NNX0NDTVJfUFJDU19PRkZTRVQ7CisJaWYgKHByY3MgPT0gMHgxKQorCQlyZXR1cm4gQ0tJTF9DTEtfRlJFUSAqIDEwMjQ7CisJZWxzZQorCQlyZXR1cm4gY2xrX2dldF9yYXRlKCZja2loX2Nsayk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHVzYl9wbGxfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9VUENUTCk7CisKKwlyZXR1cm4gbXhjX2RlY29kZV9wbGwocmVnLCBwbGxfcmVmX2dldF9yYXRlKCkpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzZXJpYWxfcGxsX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fU1JQQ1RMKTsKKworCXJldHVybiBteGNfZGVjb2RlX3BsbChyZWcsIHBsbF9yZWZfZ2V0X3JhdGUoKSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1jdV9wbGxfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgcmVnLCBjY21yOworCisJY2NtciA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0NNUik7CisKKwlpZiAoIShjY21yICYgTVhDX0NDTV9DQ01SX01QRSkgfHwgKGNjbXIgJiBNWENfQ0NNX0NDTVJfTURTKSkKKwkJcmV0dXJuIGNsa19nZXRfcmF0ZSgmY2tpaF9jbGspOworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9NUENUTCk7CisKKwlyZXR1cm4gbXhjX2RlY29kZV9wbGwocmVnLCBwbGxfcmVmX2dldF9yYXRlKCkpOworfQorCitzdGF0aWMgaW50IHVzYl9wbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQ01SKTsKKwlyZWcgfD0gTVhDX0NDTV9DQ01SX1VQRTsKKwlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NDTVIpOworCisJLyogTm8gbG9jayBiaXQgb24gTVgzMSwgc28gdXNpbmcgbWF4IHRpbWUgZnJvbSBzcGVjICovCisJdWRlbGF5KDgwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB1c2JfcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NDTVIpOworCXJlZyAmPSB+TVhDX0NDTV9DQ01SX1VQRTsKKwlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NDTVIpOworfQorCitzdGF0aWMgaW50IHNlcmlhbF9wbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQ01SKTsKKwlyZWcgfD0gTVhDX0NDTV9DQ01SX1NQRTsKKwlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NDTVIpOworCisJLyogTm8gbG9jayBiaXQgb24gTVgzMSwgc28gdXNpbmcgbWF4IHRpbWUgZnJvbSBzcGVjICovCisJdWRlbGF5KDgwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXJpYWxfcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NDTVIpOworCXJlZyAmPSB+TVhDX0NDTV9DQ01SX1NQRTsKKwlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NDTVIpOworfQorCisjZGVmaW5lIFBEUjAobWFzaywgb2ZmKSAoKF9fcmF3X3JlYWRsKE1YQ19DQ01fUERSMCkgJiBtYXNrKSA+PiBvZmYpCisjZGVmaW5lIFBEUjEobWFzaywgb2ZmKSAoKF9fcmF3X3JlYWRsKE1YQ19DQ01fUERSMSkgJiBtYXNrKSA+PiBvZmYpCisjZGVmaW5lIFBEUjIobWFzaywgb2ZmKSAoKF9fcmF3X3JlYWRsKE1YQ19DQ01fUERSMikgJiBtYXNrKSA+PiBvZmYpCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1jdV9tYWluX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcG1jcjAgPSBfX3Jhd19yZWFkbChNWENfQ0NNX1BNQ1IwKTsKKworCWlmICgocG1jcjAgJiBNWENfQ0NNX1BNQ1IwX0RGU1VQMSkgPT0gTVhDX0NDTV9QTUNSMF9ERlNVUDFfU1BMTCkKKwkJcmV0dXJuIGNsa19nZXRfcmF0ZSgmc2VyaWFsX3BsbF9jbGspOworCWVsc2UKKwkJcmV0dXJuIGNsa19nZXRfcmF0ZSgmbWN1X3BsbF9jbGspOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhaGJfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgbWF4X3BkZjsKKworCW1heF9wZGYgPSBQRFIwKE1YQ19DQ01fUERSMF9NQVhfUE9ERl9NQVNLLAorCQkgICAgICAgTVhDX0NDTV9QRFIwX01BWF9QT0RGX09GRlNFVCk7CisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAobWF4X3BkZiArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBpcGdfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgaXBnX3BkZjsKKworCWlwZ19wZGYgPSBQRFIwKE1YQ19DQ01fUERSMF9JUEdfUE9ERl9NQVNLLAorCQkgICAgICAgTVhDX0NDTV9QRFIwX0lQR19QT0RGX09GRlNFVCk7CisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoaXBnX3BkZiArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBuZmNfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgbmZjX3BkZjsKKworCW5mY19wZGYgPSBQRFIwKE1YQ19DQ01fUERSMF9ORkNfUE9ERl9NQVNLLAorCQkgICAgICAgTVhDX0NDTV9QRFIwX05GQ19QT0RGX09GRlNFVCk7CisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAobmZjX3BkZiArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBoc3BfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgaHNwX3BkZjsKKworCWhzcF9wZGYgPSBQRFIwKE1YQ19DQ01fUERSMF9IU1BfUE9ERl9NQVNLLAorCQkgICAgICAgTVhDX0NDTV9QRFIwX0hTUF9QT0RGX09GRlNFVCk7CisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoaHNwX3BkZiArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB1c2JfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgdXNiX3BkZiwgdXNiX3ByZXBkZjsKKworCXVzYl9wZGYgPSBQRFIxKE1YQ19DQ01fUERSMV9VU0JfUE9ERl9NQVNLLAorCQkgICAgICAgTVhDX0NDTV9QRFIxX1VTQl9QT0RGX09GRlNFVCk7CisJdXNiX3ByZXBkZiA9IFBEUjEoTVhDX0NDTV9QRFIxX1VTQl9QUkRGX01BU0ssCisJCQkgIE1YQ19DQ01fUERSMV9VU0JfUFJERl9PRkZTRVQpOworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKHVzYl9wcmVwZGYgKyAxKSAvICh1c2JfcGRmICsgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNzaV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZywgcHJlLCBwb3N0OworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9QRFIwKTsKKwlwcmUgPSAocmVnICYgTVhDX0NDTV9QRFIwX0NTSV9QUkRGX01BU0spID4+CisJICAgIE1YQ19DQ01fUERSMF9DU0lfUFJERl9PRkZTRVQ7CisJcHJlKys7CisJcG9zdCA9IChyZWcgJiBNWENfQ0NNX1BEUjBfQ1NJX1BPREZfTUFTSykgPj4KKwkgICAgTVhDX0NDTV9QRFIwX0NTSV9QT0RGX09GRlNFVDsKKwlwb3N0Kys7CisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAocHJlICogcG9zdCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNzaV9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiBwcmUsIHBvc3QsIHBhcmVudCA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJdTMyIGRpdiA9IHBhcmVudCAvIHJhdGU7CisKKwlpZiAocGFyZW50ICUgcmF0ZSkKKwkJZGl2Kys7CisKKwlfX2NhbGNfcHJlX3Bvc3RfZGl2aWRlcnMoZGl2LCAmcHJlLCAmcG9zdCk7CisKKwlyZXR1cm4gcGFyZW50IC8gKHByZSAqIHBvc3QpOworfQorCitzdGF0aWMgaW50IGNzaV9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgcmVnLCBkaXYsIHByZSwgcG9zdCwgcGFyZW50ID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCWRpdiA9IHBhcmVudCAvIHJhdGU7CisKKwlpZiAoKHBhcmVudCAvIGRpdikgIT0gcmF0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlfX2NhbGNfcHJlX3Bvc3RfZGl2aWRlcnMoZGl2LCAmcHJlLCAmcG9zdCk7CisKKwkvKiBTZXQgQ1NJIGNsb2NrIGRpdmlkZXIgKi8KKwlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX1BEUjApICYKKwkgICAgfihNWENfQ0NNX1BEUjBfQ1NJX1BPREZfTUFTSyB8IE1YQ19DQ01fUERSMF9DU0lfUFJERl9NQVNLKTsKKwlyZWcgfD0gKHBvc3QgLSAxKSA8PCBNWENfQ0NNX1BEUjBfQ1NJX1BPREZfT0ZGU0VUOworCXJlZyB8PSAocHJlIC0gMSkgPDwgTVhDX0NDTV9QRFIwX0NTSV9QUkRGX09GRlNFVDsKKwlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX1BEUjApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNzaTFfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgc3NpMV9wZGYsIHNzaTFfcHJlcGRmOworCisJc3NpMV9wZGYgPSBQRFIxKE1YQ19DQ01fUERSMV9TU0kxX1BPREZfTUFTSywKKwkJCU1YQ19DQ01fUERSMV9TU0kxX1BPREZfT0ZGU0VUKTsKKwlzc2kxX3ByZXBkZiA9IFBEUjEoTVhDX0NDTV9QRFIxX1NTSTFfUFJFX1BPREZfTUFTSywKKwkJCSAgIE1YQ19DQ01fUERSMV9TU0kxX1BSRV9QT0RGX09GRlNFVCk7CisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoc3NpMV9wcmVwZGYgKyAxKSAvIChzc2kxX3BkZiArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzc2kyX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHNzaTJfcGRmLCBzc2kyX3ByZXBkZjsKKworCXNzaTJfcGRmID0gUERSMShNWENfQ0NNX1BEUjFfU1NJMl9QT0RGX01BU0ssCisJCQlNWENfQ0NNX1BEUjFfU1NJMl9QT0RGX09GRlNFVCk7CisJc3NpMl9wcmVwZGYgPSBQRFIxKE1YQ19DQ01fUERSMV9TU0kyX1BSRV9QT0RGX01BU0ssCisJCQkgICBNWENfQ0NNX1BEUjFfU1NJMl9QUkVfUE9ERl9PRkZTRVQpOworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKHNzaTJfcHJlcGRmICsgMSkgLyAoc3NpMl9wZGYgKyAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZmlyaV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyBmaXJpX3BkZiwgZmlyaV9wcmVwZGY7CisKKwlmaXJpX3BkZiA9IFBEUjEoTVhDX0NDTV9QRFIxX0ZJUklfUE9ERl9NQVNLLAorCQkJTVhDX0NDTV9QRFIxX0ZJUklfUE9ERl9PRkZTRVQpOworCWZpcmlfcHJlcGRmID0gUERSMShNWENfQ0NNX1BEUjFfRklSSV9QUkVfUE9ERl9NQVNLLAorCQkJICAgTVhDX0NDTV9QRFIxX0ZJUklfUFJFX1BPREZfT0ZGU0VUKTsKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIChmaXJpX3ByZXBkZiArIDEpIC8gKGZpcmlfcGRmICsgMSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZpcmlfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgcHJlLCBwb3N0OworCXUzMiBwYXJlbnQgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCXUzMiBkaXYgPSBwYXJlbnQgLyByYXRlOworCisJaWYgKHBhcmVudCAlIHJhdGUpCisJCWRpdisrOworCisJX19jYWxjX3ByZV9wb3N0X2RpdmlkZXJzKGRpdiwgJnByZSwgJnBvc3QpOworCisJcmV0dXJuIHBhcmVudCAvIChwcmUgKiBwb3N0KTsKKworfQorCitzdGF0aWMgaW50IGZpcmlfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIHJlZywgZGl2LCBwcmUsIHBvc3QsIHBhcmVudCA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlkaXYgPSBwYXJlbnQgLyByYXRlOworCisJaWYgKChwYXJlbnQgLyBkaXYpICE9IHJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJX19jYWxjX3ByZV9wb3N0X2RpdmlkZXJzKGRpdiwgJnByZSwgJnBvc3QpOworCisJLyogU2V0IEZJUkkgY2xvY2sgZGl2aWRlciAqLworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fUERSMSkgJgorCSAgICB+KE1YQ19DQ01fUERSMV9GSVJJX1BPREZfTUFTSyB8IE1YQ19DQ01fUERSMV9GSVJJX1BSRV9QT0RGX01BU0spOworCXJlZyB8PSAocHJlIC0gMSkgPDwgTVhDX0NDTV9QRFIxX0ZJUklfUFJFX1BPREZfT0ZGU0VUOworCXJlZyB8PSAocG9zdCAtIDEpIDw8IE1YQ19DQ01fUERSMV9GSVJJX1BPREZfT0ZGU0VUOworCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fUERSMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWJ4X2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIDI7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1zdGljazFfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgbXN0aV9wZGY7CisKKwltc3RpX3BkZiA9IFBEUjIoTVhDX0NDTV9QRFIyX01TVDFfUERGX01BU0ssCisJCQlNWENfQ0NNX1BEUjJfTVNUMV9QREZfT0ZGU0VUKTsKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIChtc3RpX3BkZiArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtc3RpY2syX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIG1zdGlfcGRmOworCisJbXN0aV9wZGYgPSBQRFIyKE1YQ19DQ01fUERSMl9NU1QyX1BERl9NQVNLLAorCQkJTVhDX0NDTV9QRFIyX01TVDJfUERGX09GRlNFVCk7CisJcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAobXN0aV9wZGYgKyAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2tpaF9yYXRlOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfY2tpaF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNraWhfcmF0ZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX2NraWxfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBDS0lMX0NMS19GUkVROworfQorCitzdGF0aWMgc3RydWN0IGNsayBja2loX2NsayA9IHsKKwkuZ2V0X3JhdGUgPSBjbGtfY2tpaF9nZXRfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jdV9wbGxfY2xrID0geworCS5wYXJlbnQgPSAmY2tpaF9jbGssCisJLmdldF9yYXRlID0gbWN1X3BsbF9nZXRfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jdV9tYWluX2NsayA9IHsKKwkucGFyZW50ID0gJm1jdV9wbGxfY2xrLAorCS5nZXRfcmF0ZSA9IG1jdV9tYWluX2dldF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2VyaWFsX3BsbF9jbGsgPSB7CisJLnBhcmVudCA9ICZja2loX2NsaywKKwkuZ2V0X3JhdGUgPSBzZXJpYWxfcGxsX2dldF9yYXRlLAorCS5lbmFibGUgPSBzZXJpYWxfcGxsX2VuYWJsZSwKKwkuZGlzYWJsZSA9IHNlcmlhbF9wbGxfZGlzYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9wbGxfY2xrID0geworCS5wYXJlbnQgPSAmY2tpaF9jbGssCisJLmdldF9yYXRlID0gdXNiX3BsbF9nZXRfcmF0ZSwKKwkuZW5hYmxlID0gdXNiX3BsbF9lbmFibGUsCisJLmRpc2FibGUgPSB1c2JfcGxsX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhaGJfY2xrID0geworCS5wYXJlbnQgPSAmbWN1X21haW5fY2xrLAorCS5nZXRfcmF0ZSA9IGFoYl9nZXRfcmF0ZSwKK307CisKKyNkZWZpbmUgREVGSU5FX0NMT0NLKG5hbWUsIGksIGVyLCBlcywgZ3IsIHMsIHApCQlcCisJc3RhdGljIHN0cnVjdCBjbGsgbmFtZSA9IHsJCQlcCisJCS5pZAkJPSBpLAkJCVwKKwkJLmVuYWJsZV9yZWcJPSBlciwJCQlcCisJCS5lbmFibGVfc2hpZnQJPSBlcywJCQlcCisJCS5nZXRfcmF0ZQk9IGdyLAkJCVwKKwkJLmVuYWJsZQkJPSBjZ3JfZW5hYmxlLAkJXAorCQkuZGlzYWJsZQk9IGNncl9kaXNhYmxlLAkJXAorCQkuc2Vjb25kYXJ5CT0gcywJCQlcCisJCS5wYXJlbnQJCT0gcCwJCQlcCisJfQorCisjZGVmaW5lIERFRklORV9DTE9DSzEobmFtZSwgaSwgZXIsIGVzLCBnZXRzZXRyb3VuZCwgcywgcCkJXAorCXN0YXRpYyBzdHJ1Y3QgY2xrIG5hbWUgPSB7CQkJCVwKKwkJLmlkCQk9IGksCQkJCVwKKwkJLmVuYWJsZV9yZWcJPSBlciwJCQkJXAorCQkuZW5hYmxlX3NoaWZ0CT0gZXMsCQkJCVwKKwkJLmdldF9yYXRlCT0gZ2V0c2V0cm91bmQjI19nZXRfcmF0ZSwJXAorCQkuc2V0X3JhdGUJPSBnZXRzZXRyb3VuZCMjX3NldF9yYXRlLAlcCisJCS5yb3VuZF9yYXRlCT0gZ2V0c2V0cm91bmQjI19yb3VuZF9yYXRlLAlcCisJCS5lbmFibGUJCT0gY2dyX2VuYWJsZSwJCQlcCisJCS5kaXNhYmxlCT0gY2dyX2Rpc2FibGUsCQkJXAorCQkuc2Vjb25kYXJ5CT0gcywJCQkJXAorCQkucGFyZW50CQk9IHAsCQkJCVwKKwl9CisKK0RFRklORV9DTE9DSyhwZXJjbGtfY2xrLCAgMCwgTlVMTCwgICAgICAgICAgMCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworCitERUZJTkVfQ0xPQ0soc2RoYzFfY2xrLCAgIDAsIE1YQ19DQ01fQ0dSMCwgIDAsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKK0RFRklORV9DTE9DSyhzZGhjMl9jbGssICAgMSwgTVhDX0NDTV9DR1IwLCAgMiwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOworREVGSU5FX0NMT0NLKGdwdF9jbGssICAgICAwLCBNWENfQ0NNX0NHUjAsICA0LCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CitERUZJTkVfQ0xPQ0soZXBpdDFfY2xrLCAgIDAsIE1YQ19DQ01fQ0dSMCwgIDYsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKK0RFRklORV9DTE9DSyhlcGl0Ml9jbGssICAgMSwgTVhDX0NDTV9DR1IwLCAgOCwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOworREVGSU5FX0NMT0NLKGlpbV9jbGssICAgICAwLCBNWENfQ0NNX0NHUjAsIDEwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soYXRhX2NsaywgICAgIDAsIE1YQ19DQ01fQ0dSMCwgMTIsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhzZG1hX2NsazEsICAgMCwgTVhDX0NDTV9DR1IwLCAxNCwgTlVMTCwgJnNkbWFfY2xrMSwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKGNzcGkzX2NsaywgICAyLCBNWENfQ0NNX0NHUjAsIDE2LCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0socm5nX2NsaywgICAgIDAsIE1YQ19DQ01fQ0dSMCwgMTgsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0MV9jbGssICAgMCwgTVhDX0NDTV9DR1IwLCAyMCwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOworREVGSU5FX0NMT0NLKHVhcnQyX2NsaywgICAxLCBNWENfQ0NNX0NHUjAsIDIyLCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CitERUZJTkVfQ0xPQ0soc3NpMV9jbGssICAgIDAsIE1YQ19DQ01fQ0dSMCwgMjQsIHNzaTFfZ2V0X3JhdGUsIE5VTEwsICZzZXJpYWxfcGxsX2Nsayk7CitERUZJTkVfQ0xPQ0soaTJjMV9jbGssICAgIDAsIE1YQ19DQ01fQ0dSMCwgMjYsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKK0RFRklORV9DTE9DSyhpMmMyX2NsaywgICAgMSwgTVhDX0NDTV9DR1IwLCAyOCwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOworREVGSU5FX0NMT0NLKGkyYzNfY2xrLCAgICAyLCBNWENfQ0NNX0NHUjAsIDMwLCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CisKK0RFRklORV9DTE9DSyhtcGVnNF9jbGssICAgMCwgTVhDX0NDTV9DR1IxLCAgMCwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKG1zdGljazFfY2xrLCAwLCBNWENfQ0NNX0NHUjEsICAyLCBtc3RpY2sxX2dldF9yYXRlLCBOVUxMLCAmdXNiX3BsbF9jbGspOworREVGSU5FX0NMT0NLKG1zdGljazJfY2xrLCAxLCBNWENfQ0NNX0NHUjEsICA0LCBtc3RpY2syX2dldF9yYXRlLCBOVUxMLCAmdXNiX3BsbF9jbGspOworREVGSU5FX0NMT0NLMShjc2lfY2xrLCAgICAwLCBNWENfQ0NNX0NHUjEsICA2LCBjc2ksIE5VTEwsICZzZXJpYWxfcGxsX2Nsayk7CitERUZJTkVfQ0xPQ0socnRjX2NsaywgICAgIDAsIE1YQ19DQ01fQ0dSMSwgIDgsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyh3ZG9nX2NsaywgICAgMCwgTVhDX0NDTV9DR1IxLCAxMCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKHB3bV9jbGssICAgICAwLCBNWENfQ0NNX0NHUjEsIDEyLCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CitERUZJTkVfQ0xPQ0sodXNiX2NsazIsICAgIDAsIE1YQ19DQ01fQ0dSMSwgMTgsIHVzYl9nZXRfcmF0ZSwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLKGtwcF9jbGssICAgICAwLCBNWENfQ0NNX0NHUjEsIDIwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soaXB1X2NsaywgICAgIDAsIE1YQ19DQ01fQ0dSMSwgMjIsIGhzcF9nZXRfcmF0ZSwgTlVMTCwgJm1jdV9tYWluX2Nsayk7CitERUZJTkVfQ0xPQ0sodWFydDNfY2xrLCAgIDIsIE1YQ19DQ01fQ0dSMSwgMjQsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0NF9jbGssICAgMywgTVhDX0NDTV9DR1IxLCAyNiwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOworREVGSU5FX0NMT0NLKHVhcnQ1X2NsaywgICA0LCBNWENfQ0NNX0NHUjEsIDI4LCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7CitERUZJTkVfQ0xPQ0sob3dpcmVfY2xrLCAgIDAsIE1YQ19DQ01fQ0dSMSwgMzAsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKKworREVGSU5FX0NMT0NLKHNzaTJfY2xrLCAgICAxLCBNWENfQ0NNX0NHUjIsICAwLCBzc2kyX2dldF9yYXRlLCBOVUxMLCAmc2VyaWFsX3BsbF9jbGspOworREVGSU5FX0NMT0NLKGNzcGkxX2NsaywgICAwLCBNWENfQ0NNX0NHUjIsICAyLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7CitERUZJTkVfQ0xPQ0soY3NwaTJfY2xrLCAgIDEsIE1YQ19DQ01fQ0dSMiwgIDQsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyhtYnhfY2xrLCAgICAgMCwgTVhDX0NDTV9DR1IyLCAgNiwgbWJ4X2dldF9yYXRlLCBOVUxMLCAmYWhiX2Nsayk7CitERUZJTkVfQ0xPQ0soZW1pX2NsaywgICAgIDAsIE1YQ19DQ01fQ0dSMiwgIDgsIE5VTEwsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhydGljX2NsaywgICAgMCwgTVhDX0NDTV9DR1IyLCAxMCwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOworREVGSU5FX0NMT0NLMShmaXJpX2NsaywgICAwLCBNWENfQ0NNX0NHUjIsIDEyLCBmaXJpLCBOVUxMLCAmdXNiX3BsbF9jbGspOworCitERUZJTkVfQ0xPQ0soc2RtYV9jbGsyLCAgIDAsIE5VTEwsICAgICAgICAgIDAsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKK0RFRklORV9DTE9DSyh1c2JfY2xrMSwgICAgMCwgTlVMTCwgICAgICAgICAgMCwgdXNiX2dldF9yYXRlLCBOVUxMLCAmdXNiX3BsbF9jbGspOworREVGSU5FX0NMT0NLKG5mY19jbGssICAgICAwLCBOVUxMLCAgICAgICAgICAwLCBuZmNfZ2V0X3JhdGUsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhzY2NfY2xrLCAgICAgMCwgTlVMTCwgICAgICAgICAgMCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOworREVGSU5FX0NMT0NLKGlwZ19jbGssICAgICAwLCBOVUxMLCAgICAgICAgICAwLCBpcGdfZ2V0X3JhdGUsIE5VTEwsICZhaGJfY2xrKTsKK0RFRklORV9DTE9DSyhja2lsX2NsaywgICAgMCwgTlVMTCwgICAgICAgICAgMCwgY2xrX2NraWxfZ2V0X3JhdGUsIE5VTEwsIE5VTEwpOworCisjZGVmaW5lIF9SRUdJU1RFUl9DTE9DSyhkLCBuLCBjKSBcCisJeyBcCisJCS5kZXZfaWQgPSBkLCBcCisJCS5jb25faWQgPSBuLCBcCisJCS5jbGsgPSAmYywgXAorCX0sCisKK3N0YXRpYyBzdHJ1Y3QgY2xrX2xvb2t1cCBsb29rdXBzW10gPSB7CisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlbWkiLCBlbWlfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygic3BpX2lteC4wIiwgTlVMTCwgY3NwaTFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygic3BpX2lteC4xIiwgTlVMTCwgY3NwaTJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygic3BpX2lteC4yIiwgTlVMTCwgY3NwaTNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0IiwgZ3B0X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInB3bSIsIHB3bV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtd2R0LjAiLCBOVUxMLCB3ZG9nX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInJ0YyIsIHJ0Y19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlcGl0IiwgZXBpdDFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZXBpdCIsIGVwaXQyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y19uYW5kLjAiLCBOVUxMLCBuZmNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaXB1LWNvcmUiLCBOVUxMLCBpcHVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXgzX3NkY19mYiIsIE5VTEwsIGlwdV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJrcHAiLCBrcHBfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMCIsICJ1c2IiLCB1c2JfY2xrMSkKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjAiLCAidXNiX2FoYiIsIHVzYl9jbGsyKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMSIsICJ1c2IiLCB1c2JfY2xrMSkKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjEiLCAidXNiX2FoYiIsIHVzYl9jbGsyKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMiIsICJ1c2IiLCB1c2JfY2xrMSkKKwlfUkVHSVNURVJfQ0xPQ0soIm14Yy1laGNpLjIiLCAidXNiX2FoYiIsIHVzYl9jbGsyKQorCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYiIsIHVzYl9jbGsxKQorCV9SRUdJU1RFUl9DTE9DSygiZnNsLXVzYjItdWRjIiwgInVzYl9haGIiLCB1c2JfY2xrMikKKwlfUkVHSVNURVJfQ0xPQ0soIm14My1jYW1lcmEuMCIsIE5VTEwsIGNzaV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4wIiwgTlVMTCwgdWFydDFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMSIsIE5VTEwsIHVhcnQyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjIiLCBOVUxMLCB1YXJ0M19jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4zIiwgTlVMTCwgdWFydDRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuNCIsIE5VTEwsIHVhcnQ1X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMCIsIE5VTEwsIGkyYzFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4xIiwgTlVMTCwgaTJjMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjIiLCBOVUxMLCBpMmMzX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y193MS4wIiwgTlVMTCwgb3dpcmVfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLW1tYy4wIiwgTlVMTCwgc2RoYzFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygibXhjLW1tYy4xIiwgTlVMTCwgc2RoYzJfY2xrKQorCV9SRUdJU1RFUl9DTE9DSygiaW14LXNzaS4wIiwgTlVMTCwgc3NpMV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtc3NpLjEiLCBOVUxMLCBzc2kyX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImZpcmkiLCBmaXJpX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImF0YSIsIGF0YV9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJydGljIiwgcnRpY19jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJybmciLCBybmdfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAic2RtYV9haGIiLCBzZG1hX2NsazEpCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzZG1hX2lwZyIsIHNkbWFfY2xrMikKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm1zdGljayIsIG1zdGljazFfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibXN0aWNrIiwgbXN0aWNrMl9jbGspCisJX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzY2MiLCBzY2NfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiaWltIiwgaWltX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgIm1wZWc0IiwgbXBlZzRfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibWJ4IiwgbWJ4X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soIm14Y19ydGMiLCBOVUxMLCBja2lsX2NsaykKK307CisKK2ludCBfX2luaXQgbXgzMV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpCit7CisJdTMyIHJlZzsKKworCWNraWhfcmF0ZSA9IGZyZWY7CisKKwljbGtkZXZfYWRkX3RhYmxlKGxvb2t1cHMsIEFSUkFZX1NJWkUobG9va3VwcykpOworCisJLyogY2hhbmdlIHRoZSBjc2lfY2xrIHBhcmVudCBpZiBuZWNlc3NhcnkgKi8KKwlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NDTVIpOworCWlmICghKHJlZyAmIE1YQ19DQ01fQ0NNUl9DU0NTKSkKKwkJaWYgKGNsa19zZXRfcGFyZW50KCZjc2lfY2xrLCAmdXNiX3BsbF9jbGspKQorCQkJcHJfZXJyKCIlczogZXJyb3IgY2hhbmdpbmcgY3NpX2NsayBwYXJlbnRcbiIsIF9fZnVuY19fKTsKKworCisJLyogVHVybiBvZmYgYWxsIHBvc3NpYmxlIGNsb2NrcyAqLworCV9fcmF3X3dyaXRlbCgoMyA8PCA0KSwgTVhDX0NDTV9DR1IwKTsKKwlfX3Jhd193cml0ZWwoMCwgTVhDX0NDTV9DR1IxKTsKKwlfX3Jhd193cml0ZWwoKDMgPDwgOCkgfCAoMyA8PCAxNCkgfCAoMyA8PCAxNil8CisJCSAgICAgMSA8PCAyNyB8IDEgPDwgMjgsIC8qIEJpdCAyNyBhbmQgMjggYXJlIG5vdCBkZWZpbmVkIGZvcgorCQkJCQkgICBNWDMyLCBidXQgc3RpbGwgcmVxdWlyZWQgdG8gYmUgc2V0ICovCisJCSAgICAgTVhDX0NDTV9DR1IyKTsKKworCS8qCisJICogQmVmb3JlIHR1cm5pbmcgb2ZmIHVzYl9wbGwgbWFrZSBzdXJlIGlwZ19wZXJfY2xrIGlzIGdlbmVyYXRlZAorCSAqIGJ5IGlwZ19jbGsgYW5kIG5vdCB1c2JfcGxsLgorCSAqLworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChNWENfQ0NNX0NDTVIpIHwgKDEgPDwgMjQpLCBNWENfQ0NNX0NDTVIpOworCisJdXNiX3BsbF9kaXNhYmxlKCZ1c2JfcGxsX2Nsayk7CisKKwlwcl9pbmZvKCJDbG9jayBpbnB1dCBzb3VyY2UgaXMgJWxkXG4iLCBjbGtfZ2V0X3JhdGUoJmNraWhfY2xrKSk7CisKKwljbGtfZW5hYmxlKCZncHRfY2xrKTsKKwljbGtfZW5hYmxlKCZlbWlfY2xrKTsKKwljbGtfZW5hYmxlKCZpaW1fY2xrKTsKKworCWNsa19lbmFibGUoJnNlcmlhbF9wbGxfY2xrKTsKKworCW14MzFfcmVhZF9jcHVfcmV2KCk7CisKKwlpZiAobXgzMV9yZXZpc2lvbigpID49IE1YMzFfQ0hJUF9SRVZfMl8wKSB7CisJCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fUE1DUjEpOworCQkvKiBObyBQTEwgcmVzdGFydCBvbiBEVkZTIHN3aXRjaDsgZW5hYmxlIGF1dG8gRU1JIGhhbmRzaGFrZSAqLworCQlyZWcgfD0gTVhDX0NDTV9QTUNSMV9QTExSRElTIHwgTVhDX0NDTV9QTUNSMV9FTUlSUV9FTjsKKwkJX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9QTUNSMSk7CisJfQorCisJbXhjX3RpbWVyX2luaXQoJmlwZ19jbGssIE1YMzFfSU9fQUREUkVTUyhNWDMxX0dQVDFfQkFTRV9BRERSKSwKKwkJCU1YMzFfSU5UX0dQVCk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMKaW5kZXggZjNmNDFmYS4uOWYzZTk0M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLWlteDM1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2staW14MzUuYwpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgogCi0jZGVmaW5lIENDTV9CQVNFCUlPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikKKyNkZWZpbmUgQ0NNX0JBU0UJTVgzNV9JT19BRERSRVNTKE1YMzVfQ0NNX0JBU0VfQUREUikKIAogI2RlZmluZSBDQ01fQ0NNUiAgICAgICAgMHgwMAogI2RlZmluZSBDQ01fUERSMCAgICAgICAgMHgwNApAQCAtNTAyLDcgKzUwMiw4IEBACiAJX19yYXdfd3JpdGVsKCgzIDw8IDI2KSB8IGxsLCBDQ01fQkFTRSArIENDTV9DR1IyKTsKIAlfX3Jhd193cml0ZWwoMCwgQ0NNX0JBU0UgKyBDQ01fQ0dSMyk7CiAKLQlteGNfdGltZXJfaW5pdCgmZ3B0X2NsaywgSU9fQUREUkVTUyhHUFQxX0JBU0VfQUREUiksIE1YQ19JTlRfR1BUKTsKKwlteGNfdGltZXJfaW5pdCgmZ3B0X2NsaywKKwkJCU1YMzVfSU9fQUREUkVTUyhNWDM1X0dQVDFfQkFTRV9BRERSKSwgTVgzNV9JTlRfR1BUKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtbXgzL2Nsb2NrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI1YzM5YTAuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvY2xvY2suYworKysgL2Rldi9udWxsCkBAIC0xLDYzMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDUtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IFNhc2NoYSBIYXVlciA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAotICogTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KLSNpbmNsdWRlIDxhc20vZGl2NjQuaD4KLQotI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9teDMxLmg+Ci0jaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLQotI2luY2x1ZGUgImNybV9yZWdzLmgiCi0KLSNkZWZpbmUgUFJFX0RJVl9NSU5fRlJFUSAgICAxMDAwMDAwMCAvKiBNaW5pbXVtIEZyZXF1ZW5jeSBhZnRlciBQcmVkaXZpZGVyICovCi0KLXN0YXRpYyB2b2lkIF9fY2FsY19wcmVfcG9zdF9kaXZpZGVycyh1MzIgZGl2LCB1MzIgKnByZSwgdTMyICpwb3N0KQotewotCXUzMiBtaW5fcHJlLCB0ZW1wX3ByZSwgb2xkX2VyciwgZXJyOwotCi0JaWYgKGRpdiA+PSA1MTIpIHsKLQkJKnByZSA9IDg7Ci0JCSpwb3N0ID0gNjQ7Ci0JfSBlbHNlIGlmIChkaXYgPj0gNjQpIHsKLQkJbWluX3ByZSA9IChkaXYgLSAxKSAvIDY0ICsgMTsKLQkJb2xkX2VyciA9IDg7Ci0JCWZvciAodGVtcF9wcmUgPSA4OyB0ZW1wX3ByZSA+PSBtaW5fcHJlOyB0ZW1wX3ByZS0tKSB7Ci0JCQllcnIgPSBkaXYgJSB0ZW1wX3ByZTsKLQkJCWlmIChlcnIgPT0gMCkgewotCQkJCSpwcmUgPSB0ZW1wX3ByZTsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWVyciA9IHRlbXBfcHJlIC0gZXJyOwotCQkJaWYgKGVyciA8IG9sZF9lcnIpIHsKLQkJCQlvbGRfZXJyID0gZXJyOwotCQkJCSpwcmUgPSB0ZW1wX3ByZTsKLQkJCX0KLQkJfQotCQkqcG9zdCA9IChkaXYgKyAqcHJlIC0gMSkgLyAqcHJlOwotCX0gZWxzZSBpZiAoZGl2IDw9IDgpIHsKLQkJKnByZSA9IGRpdjsKLQkJKnBvc3QgPSAxOwotCX0gZWxzZSB7Ci0JCSpwcmUgPSAxOwotCQkqcG9zdCA9IGRpdjsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jdV9wbGxfY2xrOwotc3RhdGljIHN0cnVjdCBjbGsgc2VyaWFsX3BsbF9jbGs7Ci1zdGF0aWMgc3RydWN0IGNsayBpcGdfY2xrOwotc3RhdGljIHN0cnVjdCBjbGsgY2tpaF9jbGs7Ci0KLXN0YXRpYyBpbnQgY2dyX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTMyIHJlZzsKLQotCWlmICghY2xrLT5lbmFibGVfcmVnKQotCQlyZXR1cm4gMDsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7Ci0JcmVnIHw9IDMgPDwgY2xrLT5lbmFibGVfc2hpZnQ7Ci0JX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjZ3JfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTMyIHJlZzsKLQotCWlmICghY2xrLT5lbmFibGVfcmVnKQotCQlyZXR1cm47Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwotCXJlZyAmPSB+KDMgPDwgY2xrLT5lbmFibGVfc2hpZnQpOwotCi0JLyogc3BlY2lhbCBjYXNlIGZvciBFTUkgY2xvY2sgKi8KLQlpZiAoY2xrLT5lbmFibGVfcmVnID09IE1YQ19DQ01fQ0dSMiAmJiBjbGstPmVuYWJsZV9zaGlmdCA9PSA4KQotCQlyZWcgfD0gKDEgPDwgY2xrLT5lbmFibGVfc2hpZnQpOwotCi0JX19yYXdfd3JpdGVsKHJlZywgY2xrLT5lbmFibGVfcmVnKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgcGxsX3JlZl9nZXRfcmF0ZSh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgY2NtcjsKLQl1bnNpZ25lZCBpbnQgcHJjczsKLQotCWNjbXIgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NDTVIpOwotCXByY3MgPSAoY2NtciAmIE1YQ19DQ01fQ0NNUl9QUkNTX01BU0spID4+IE1YQ19DQ01fQ0NNUl9QUkNTX09GRlNFVDsKLQlpZiAocHJjcyA9PSAweDEpCi0JCXJldHVybiBDS0lMX0NMS19GUkVRICogMTAyNDsKLQllbHNlCi0JCXJldHVybiBjbGtfZ2V0X3JhdGUoJmNraWhfY2xrKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgdXNiX3BsbF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyByZWc7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX1VQQ1RMKTsKLQotCXJldHVybiBteGNfZGVjb2RlX3BsbChyZWcsIHBsbF9yZWZfZ2V0X3JhdGUoKSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNlcmlhbF9wbGxfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcmVnOwotCi0JcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9TUlBDVEwpOwotCi0JcmV0dXJuIG14Y19kZWNvZGVfcGxsKHJlZywgcGxsX3JlZl9nZXRfcmF0ZSgpKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgbWN1X3BsbF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyByZWcsIGNjbXI7Ci0KLQljY21yID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQ01SKTsKLQotCWlmICghKGNjbXIgJiBNWENfQ0NNX0NDTVJfTVBFKSB8fCAoY2NtciAmIE1YQ19DQ01fQ0NNUl9NRFMpKQotCQlyZXR1cm4gY2xrX2dldF9yYXRlKCZja2loX2Nsayk7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX01QQ1RMKTsKLQotCXJldHVybiBteGNfZGVjb2RlX3BsbChyZWcsIHBsbF9yZWZfZ2V0X3JhdGUoKSk7Ci19Ci0KLXN0YXRpYyBpbnQgdXNiX3BsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiByZWc7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NDTVIpOwotCXJlZyB8PSBNWENfQ0NNX0NDTVJfVVBFOwotCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0NNUik7Ci0KLQkvKiBObyBsb2NrIGJpdCBvbiBNWDMxLCBzbyB1c2luZyBtYXggdGltZSBmcm9tIHNwZWMgKi8KLQl1ZGVsYXkoODApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHVzYl9wbGxfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTMyIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0NNUik7Ci0JcmVnICY9IH5NWENfQ0NNX0NDTVJfVVBFOwotCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0NNUik7Ci19Ci0KLXN0YXRpYyBpbnQgc2VyaWFsX3BsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiByZWc7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NDTVIpOwotCXJlZyB8PSBNWENfQ0NNX0NDTVJfU1BFOwotCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0NNUik7Ci0KLQkvKiBObyBsb2NrIGJpdCBvbiBNWDMxLCBzbyB1c2luZyBtYXggdGltZSBmcm9tIHNwZWMgKi8KLQl1ZGVsYXkoODApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNlcmlhbF9wbGxfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTMyIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0NNUik7Ci0JcmVnICY9IH5NWENfQ0NNX0NDTVJfU1BFOwotCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0NNUik7Ci19Ci0KLSNkZWZpbmUgUERSMChtYXNrLCBvZmYpICgoX19yYXdfcmVhZGwoTVhDX0NDTV9QRFIwKSAmIG1hc2spID4+IG9mZikKLSNkZWZpbmUgUERSMShtYXNrLCBvZmYpICgoX19yYXdfcmVhZGwoTVhDX0NDTV9QRFIxKSAmIG1hc2spID4+IG9mZikKLSNkZWZpbmUgUERSMihtYXNrLCBvZmYpICgoX19yYXdfcmVhZGwoTVhDX0NDTV9QRFIyKSAmIG1hc2spID4+IG9mZikKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgbWN1X21haW5fZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiBwbWNyMCA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fUE1DUjApOwotCi0JaWYgKChwbWNyMCAmIE1YQ19DQ01fUE1DUjBfREZTVVAxKSA9PSBNWENfQ0NNX1BNQ1IwX0RGU1VQMV9TUExMKQotCQlyZXR1cm4gY2xrX2dldF9yYXRlKCZzZXJpYWxfcGxsX2Nsayk7Ci0JZWxzZQotCQlyZXR1cm4gY2xrX2dldF9yYXRlKCZtY3VfcGxsX2Nsayk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGFoYl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBtYXhfcGRmOwotCi0JbWF4X3BkZiA9IFBEUjAoTVhDX0NDTV9QRFIwX01BWF9QT0RGX01BU0ssCi0JCSAgICAgICBNWENfQ0NNX1BEUjBfTUFYX1BPREZfT0ZGU0VUKTsKLQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIChtYXhfcGRmICsgMSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGlwZ19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBpcGdfcGRmOwotCi0JaXBnX3BkZiA9IFBEUjAoTVhDX0NDTV9QRFIwX0lQR19QT0RGX01BU0ssCi0JCSAgICAgICBNWENfQ0NNX1BEUjBfSVBHX1BPREZfT0ZGU0VUKTsKLQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIChpcGdfcGRmICsgMSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG5mY19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBuZmNfcGRmOwotCi0JbmZjX3BkZiA9IFBEUjAoTVhDX0NDTV9QRFIwX05GQ19QT0RGX01BU0ssCi0JCSAgICAgICBNWENfQ0NNX1BEUjBfTkZDX1BPREZfT0ZGU0VUKTsKLQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIChuZmNfcGRmICsgMSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGhzcF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBoc3BfcGRmOwotCi0JaHNwX3BkZiA9IFBEUjAoTVhDX0NDTV9QRFIwX0hTUF9QT0RGX01BU0ssCi0JCSAgICAgICBNWENfQ0NNX1BEUjBfSFNQX1BPREZfT0ZGU0VUKTsKLQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIChoc3BfcGRmICsgMSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHVzYl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyB1c2JfcGRmLCB1c2JfcHJlcGRmOwotCi0JdXNiX3BkZiA9IFBEUjEoTVhDX0NDTV9QRFIxX1VTQl9QT0RGX01BU0ssCi0JCSAgICAgICBNWENfQ0NNX1BEUjFfVVNCX1BPREZfT0ZGU0VUKTsKLQl1c2JfcHJlcGRmID0gUERSMShNWENfQ0NNX1BEUjFfVVNCX1BSREZfTUFTSywKLQkJCSAgTVhDX0NDTV9QRFIxX1VTQl9QUkRGX09GRlNFVCk7Ci0JcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAodXNiX3ByZXBkZiArIDEpIC8gKHVzYl9wZGYgKyAxKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgY3NpX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1MzIgcmVnLCBwcmUsIHBvc3Q7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX1BEUjApOwotCXByZSA9IChyZWcgJiBNWENfQ0NNX1BEUjBfQ1NJX1BSREZfTUFTSykgPj4KLQkgICAgTVhDX0NDTV9QRFIwX0NTSV9QUkRGX09GRlNFVDsKLQlwcmUrKzsKLQlwb3N0ID0gKHJlZyAmIE1YQ19DQ01fUERSMF9DU0lfUE9ERl9NQVNLKSA+PgotCSAgICBNWENfQ0NNX1BEUjBfQ1NJX1BPREZfT0ZGU0VUOwotCXBvc3QrKzsKLQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIChwcmUgKiBwb3N0KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgY3NpX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdTMyIHByZSwgcG9zdCwgcGFyZW50ID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQl1MzIgZGl2ID0gcGFyZW50IC8gcmF0ZTsKLQotCWlmIChwYXJlbnQgJSByYXRlKQotCQlkaXYrKzsKLQotCV9fY2FsY19wcmVfcG9zdF9kaXZpZGVycyhkaXYsICZwcmUsICZwb3N0KTsKLQotCXJldHVybiBwYXJlbnQgLyAocHJlICogcG9zdCk7Ci19Ci0KLXN0YXRpYyBpbnQgY3NpX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXUzMiByZWcsIGRpdiwgcHJlLCBwb3N0LCBwYXJlbnQgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCi0JZGl2ID0gcGFyZW50IC8gcmF0ZTsKLQotCWlmICgocGFyZW50IC8gZGl2KSAhPSByYXRlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCV9fY2FsY19wcmVfcG9zdF9kaXZpZGVycyhkaXYsICZwcmUsICZwb3N0KTsKLQotCS8qIFNldCBDU0kgY2xvY2sgZGl2aWRlciAqLwotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fUERSMCkgJgotCSAgICB+KE1YQ19DQ01fUERSMF9DU0lfUE9ERl9NQVNLIHwgTVhDX0NDTV9QRFIwX0NTSV9QUkRGX01BU0spOwotCXJlZyB8PSAocG9zdCAtIDEpIDw8IE1YQ19DQ01fUERSMF9DU0lfUE9ERl9PRkZTRVQ7Ci0JcmVnIHw9IChwcmUgLSAxKSA8PCBNWENfQ0NNX1BEUjBfQ1NJX1BSREZfT0ZGU0VUOwotCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fUERSMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgc3NpMV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBzc2kxX3BkZiwgc3NpMV9wcmVwZGY7Ci0KLQlzc2kxX3BkZiA9IFBEUjEoTVhDX0NDTV9QRFIxX1NTSTFfUE9ERl9NQVNLLAotCQkJTVhDX0NDTV9QRFIxX1NTSTFfUE9ERl9PRkZTRVQpOwotCXNzaTFfcHJlcGRmID0gUERSMShNWENfQ0NNX1BEUjFfU1NJMV9QUkVfUE9ERl9NQVNLLAotCQkJICAgTVhDX0NDTV9QRFIxX1NTSTFfUFJFX1BPREZfT0ZGU0VUKTsKLQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIChzc2kxX3ByZXBkZiArIDEpIC8gKHNzaTFfcGRmICsgMSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNzaTJfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgc3NpMl9wZGYsIHNzaTJfcHJlcGRmOwotCi0Jc3NpMl9wZGYgPSBQRFIxKE1YQ19DQ01fUERSMV9TU0kyX1BPREZfTUFTSywKLQkJCU1YQ19DQ01fUERSMV9TU0kyX1BPREZfT0ZGU0VUKTsKLQlzc2kyX3ByZXBkZiA9IFBEUjEoTVhDX0NDTV9QRFIxX1NTSTJfUFJFX1BPREZfTUFTSywKLQkJCSAgIE1YQ19DQ01fUERSMV9TU0kyX1BSRV9QT0RGX09GRlNFVCk7Ci0JcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAoc3NpMl9wcmVwZGYgKyAxKSAvIChzc2kyX3BkZiArIDEpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBmaXJpX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIGZpcmlfcGRmLCBmaXJpX3ByZXBkZjsKLQotCWZpcmlfcGRmID0gUERSMShNWENfQ0NNX1BEUjFfRklSSV9QT0RGX01BU0ssCi0JCQlNWENfQ0NNX1BEUjFfRklSSV9QT0RGX09GRlNFVCk7Ci0JZmlyaV9wcmVwZGYgPSBQRFIxKE1YQ19DQ01fUERSMV9GSVJJX1BSRV9QT0RGX01BU0ssCi0JCQkgICBNWENfQ0NNX1BEUjFfRklSSV9QUkVfUE9ERl9PRkZTRVQpOwotCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKGZpcmlfcHJlcGRmICsgMSkgLyAoZmlyaV9wZGYgKyAxKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgZmlyaV9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXUzMiBwcmUsIHBvc3Q7Ci0JdTMyIHBhcmVudCA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JdTMyIGRpdiA9IHBhcmVudCAvIHJhdGU7Ci0KLQlpZiAocGFyZW50ICUgcmF0ZSkKLQkJZGl2Kys7Ci0KLQlfX2NhbGNfcHJlX3Bvc3RfZGl2aWRlcnMoZGl2LCAmcHJlLCAmcG9zdCk7Ci0KLQlyZXR1cm4gcGFyZW50IC8gKHByZSAqIHBvc3QpOwotCi19Ci0KLXN0YXRpYyBpbnQgZmlyaV9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1MzIgcmVnLCBkaXYsIHByZSwgcG9zdCwgcGFyZW50ID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCWRpdiA9IHBhcmVudCAvIHJhdGU7Ci0KLQlpZiAoKHBhcmVudCAvIGRpdikgIT0gcmF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlfX2NhbGNfcHJlX3Bvc3RfZGl2aWRlcnMoZGl2LCAmcHJlLCAmcG9zdCk7Ci0KLQkvKiBTZXQgRklSSSBjbG9jayBkaXZpZGVyICovCi0JcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9QRFIxKSAmCi0JICAgIH4oTVhDX0NDTV9QRFIxX0ZJUklfUE9ERl9NQVNLIHwgTVhDX0NDTV9QRFIxX0ZJUklfUFJFX1BPREZfTUFTSyk7Ci0JcmVnIHw9IChwcmUgLSAxKSA8PCBNWENfQ0NNX1BEUjFfRklSSV9QUkVfUE9ERl9PRkZTRVQ7Ci0JcmVnIHw9IChwb3N0IC0gMSkgPDwgTVhDX0NDTV9QRFIxX0ZJUklfUE9ERl9PRkZTRVQ7Ci0JX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9QRFIxKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBtYnhfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gMjsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgbXN0aWNrMV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBtc3RpX3BkZjsKLQotCW1zdGlfcGRmID0gUERSMihNWENfQ0NNX1BEUjJfTVNUMV9QREZfTUFTSywKLQkJCU1YQ19DQ01fUERSMl9NU1QxX1BERl9PRkZTRVQpOwotCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gKG1zdGlfcGRmICsgMSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIG1zdGljazJfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgbXN0aV9wZGY7Ci0KLQltc3RpX3BkZiA9IFBEUjIoTVhDX0NDTV9QRFIyX01TVDJfUERGX01BU0ssCi0JCQlNWENfQ0NNX1BEUjJfTVNUMl9QREZfT0ZGU0VUKTsKLQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIChtc3RpX3BkZiArIDEpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBja2loX3JhdGU7Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19ja2loX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY2tpaF9yYXRlOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfY2tpbF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIENLSUxfQ0xLX0ZSRVE7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNraWhfY2xrID0gewotCS5nZXRfcmF0ZSA9IGNsa19ja2loX2dldF9yYXRlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWN1X3BsbF9jbGsgPSB7Ci0JLnBhcmVudCA9ICZja2loX2NsaywKLQkuZ2V0X3JhdGUgPSBtY3VfcGxsX2dldF9yYXRlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWN1X21haW5fY2xrID0gewotCS5wYXJlbnQgPSAmbWN1X3BsbF9jbGssCi0JLmdldF9yYXRlID0gbWN1X21haW5fZ2V0X3JhdGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzZXJpYWxfcGxsX2NsayA9IHsKLQkucGFyZW50ID0gJmNraWhfY2xrLAotCS5nZXRfcmF0ZSA9IHNlcmlhbF9wbGxfZ2V0X3JhdGUsCi0JLmVuYWJsZSA9IHNlcmlhbF9wbGxfZW5hYmxlLAotCS5kaXNhYmxlID0gc2VyaWFsX3BsbF9kaXNhYmxlLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiX3BsbF9jbGsgPSB7Ci0JLnBhcmVudCA9ICZja2loX2NsaywKLQkuZ2V0X3JhdGUgPSB1c2JfcGxsX2dldF9yYXRlLAotCS5lbmFibGUgPSB1c2JfcGxsX2VuYWJsZSwKLQkuZGlzYWJsZSA9IHVzYl9wbGxfZGlzYWJsZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGFoYl9jbGsgPSB7Ci0JLnBhcmVudCA9ICZtY3VfbWFpbl9jbGssCi0JLmdldF9yYXRlID0gYWhiX2dldF9yYXRlLAotfTsKLQotI2RlZmluZSBERUZJTkVfQ0xPQ0sobmFtZSwgaSwgZXIsIGVzLCBnciwgcywgcCkJCVwKLQlzdGF0aWMgc3RydWN0IGNsayBuYW1lID0gewkJCVwKLQkJLmlkCQk9IGksCQkJXAotCQkuZW5hYmxlX3JlZwk9IGVyLAkJCVwKLQkJLmVuYWJsZV9zaGlmdAk9IGVzLAkJCVwKLQkJLmdldF9yYXRlCT0gZ3IsCQkJXAotCQkuZW5hYmxlCQk9IGNncl9lbmFibGUsCQlcCi0JCS5kaXNhYmxlCT0gY2dyX2Rpc2FibGUsCQlcCi0JCS5zZWNvbmRhcnkJPSBzLAkJCVwKLQkJLnBhcmVudAkJPSBwLAkJCVwKLQl9Ci0KLSNkZWZpbmUgREVGSU5FX0NMT0NLMShuYW1lLCBpLCBlciwgZXMsIGdldHNldHJvdW5kLCBzLCBwKQlcCi0Jc3RhdGljIHN0cnVjdCBjbGsgbmFtZSA9IHsJCQkJXAotCQkuaWQJCT0gaSwJCQkJXAotCQkuZW5hYmxlX3JlZwk9IGVyLAkJCQlcCi0JCS5lbmFibGVfc2hpZnQJPSBlcywJCQkJXAotCQkuZ2V0X3JhdGUJPSBnZXRzZXRyb3VuZCMjX2dldF9yYXRlLAlcCi0JCS5zZXRfcmF0ZQk9IGdldHNldHJvdW5kIyNfc2V0X3JhdGUsCVwKLQkJLnJvdW5kX3JhdGUJPSBnZXRzZXRyb3VuZCMjX3JvdW5kX3JhdGUsCVwKLQkJLmVuYWJsZQkJPSBjZ3JfZW5hYmxlLAkJCVwKLQkJLmRpc2FibGUJPSBjZ3JfZGlzYWJsZSwJCQlcCi0JCS5zZWNvbmRhcnkJPSBzLAkJCQlcCi0JCS5wYXJlbnQJCT0gcCwJCQkJXAotCX0KLQotREVGSU5FX0NMT0NLKHBlcmNsa19jbGssICAwLCBOVUxMLCAgICAgICAgICAwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7Ci0KLURFRklORV9DTE9DSyhzZGhjMV9jbGssICAgMCwgTVhDX0NDTV9DR1IwLCAgMCwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOwotREVGSU5FX0NMT0NLKHNkaGMyX2NsaywgICAxLCBNWENfQ0NNX0NHUjAsICAyLCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soZ3B0X2NsaywgICAgIDAsIE1YQ19DQ01fQ0dSMCwgIDQsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKLURFRklORV9DTE9DSyhlcGl0MV9jbGssICAgMCwgTVhDX0NDTV9DR1IwLCAgNiwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOwotREVGSU5FX0NMT0NLKGVwaXQyX2NsaywgICAxLCBNWENfQ0NNX0NHUjAsICA4LCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soaWltX2NsaywgICAgIDAsIE1YQ19DQ01fQ0dSMCwgMTAsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKLURFRklORV9DTE9DSyhhdGFfY2xrLCAgICAgMCwgTVhDX0NDTV9DR1IwLCAxMiwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOwotREVGSU5FX0NMT0NLKHNkbWFfY2xrMSwgICAwLCBNWENfQ0NNX0NHUjAsIDE0LCBOVUxMLCAmc2RtYV9jbGsxLCAmYWhiX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soY3NwaTNfY2xrLCAgIDIsIE1YQ19DQ01fQ0dSMCwgMTYsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKLURFRklORV9DTE9DSyhybmdfY2xrLCAgICAgMCwgTVhDX0NDTV9DR1IwLCAxOCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOwotREVGSU5FX0NMT0NLKHVhcnQxX2NsaywgICAwLCBNWENfQ0NNX0NHUjAsIDIwLCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7Ci1ERUZJTkVfQ0xPQ0sodWFydDJfY2xrLCAgIDEsIE1YQ19DQ01fQ0dSMCwgMjIsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKLURFRklORV9DTE9DSyhzc2kxX2NsaywgICAgMCwgTVhDX0NDTV9DR1IwLCAyNCwgc3NpMV9nZXRfcmF0ZSwgTlVMTCwgJnNlcmlhbF9wbGxfY2xrKTsKLURFRklORV9DTE9DSyhpMmMxX2NsaywgICAgMCwgTVhDX0NDTV9DR1IwLCAyNiwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOwotREVGSU5FX0NMT0NLKGkyYzJfY2xrLCAgICAxLCBNWENfQ0NNX0NHUjAsIDI4LCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soaTJjM19jbGssICAgIDIsIE1YQ19DQ01fQ0dSMCwgMzAsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKLQotREVGSU5FX0NMT0NLKG1wZWc0X2NsaywgICAwLCBNWENfQ0NNX0NHUjEsICAwLCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7Ci1ERUZJTkVfQ0xPQ0sobXN0aWNrMV9jbGssIDAsIE1YQ19DQ01fQ0dSMSwgIDIsIG1zdGljazFfZ2V0X3JhdGUsIE5VTEwsICZ1c2JfcGxsX2Nsayk7Ci1ERUZJTkVfQ0xPQ0sobXN0aWNrMl9jbGssIDEsIE1YQ19DQ01fQ0dSMSwgIDQsIG1zdGljazJfZ2V0X3JhdGUsIE5VTEwsICZ1c2JfcGxsX2Nsayk7Ci1ERUZJTkVfQ0xPQ0sxKGNzaV9jbGssICAgIDAsIE1YQ19DQ01fQ0dSMSwgIDYsIGNzaSwgTlVMTCwgJnNlcmlhbF9wbGxfY2xrKTsKLURFRklORV9DTE9DSyhydGNfY2xrLCAgICAgMCwgTVhDX0NDTV9DR1IxLCAgOCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOwotREVGSU5FX0NMT0NLKHdkb2dfY2xrLCAgICAwLCBNWENfQ0NNX0NHUjEsIDEwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7Ci1ERUZJTkVfQ0xPQ0socHdtX2NsaywgICAgIDAsIE1YQ19DQ01fQ0dSMSwgMTIsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKLURFRklORV9DTE9DSyh1c2JfY2xrMiwgICAgMCwgTVhDX0NDTV9DR1IxLCAxOCwgdXNiX2dldF9yYXRlLCBOVUxMLCAmYWhiX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soa3BwX2NsaywgICAgIDAsIE1YQ19DQ01fQ0dSMSwgMjAsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKLURFRklORV9DTE9DSyhpcHVfY2xrLCAgICAgMCwgTVhDX0NDTV9DR1IxLCAyMiwgaHNwX2dldF9yYXRlLCBOVUxMLCAmbWN1X21haW5fY2xrKTsKLURFRklORV9DTE9DSyh1YXJ0M19jbGssICAgMiwgTVhDX0NDTV9DR1IxLCAyNCwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOwotREVGSU5FX0NMT0NLKHVhcnQ0X2NsaywgICAzLCBNWENfQ0NNX0NHUjEsIDI2LCBOVUxMLCBOVUxMLCAmcGVyY2xrX2Nsayk7Ci1ERUZJTkVfQ0xPQ0sodWFydDVfY2xrLCAgIDQsIE1YQ19DQ01fQ0dSMSwgMjgsIE5VTEwsIE5VTEwsICZwZXJjbGtfY2xrKTsKLURFRklORV9DTE9DSyhvd2lyZV9jbGssICAgMCwgTVhDX0NDTV9DR1IxLCAzMCwgTlVMTCwgTlVMTCwgJnBlcmNsa19jbGspOwotCi1ERUZJTkVfQ0xPQ0soc3NpMl9jbGssICAgIDEsIE1YQ19DQ01fQ0dSMiwgIDAsIHNzaTJfZ2V0X3JhdGUsIE5VTEwsICZzZXJpYWxfcGxsX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soY3NwaTFfY2xrLCAgIDAsIE1YQ19DQ01fQ0dSMiwgIDIsIE5VTEwsIE5VTEwsICZpcGdfY2xrKTsKLURFRklORV9DTE9DSyhjc3BpMl9jbGssICAgMSwgTVhDX0NDTV9DR1IyLCAgNCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOwotREVGSU5FX0NMT0NLKG1ieF9jbGssICAgICAwLCBNWENfQ0NNX0NHUjIsICA2LCBtYnhfZ2V0X3JhdGUsIE5VTEwsICZhaGJfY2xrKTsKLURFRklORV9DTE9DSyhlbWlfY2xrLCAgICAgMCwgTVhDX0NDTV9DR1IyLCAgOCwgTlVMTCwgTlVMTCwgJmFoYl9jbGspOwotREVGSU5FX0NMT0NLKHJ0aWNfY2xrLCAgICAwLCBNWENfQ0NNX0NHUjIsIDEwLCBOVUxMLCBOVUxMLCAmYWhiX2Nsayk7Ci1ERUZJTkVfQ0xPQ0sxKGZpcmlfY2xrLCAgIDAsIE1YQ19DQ01fQ0dSMiwgMTIsIGZpcmksIE5VTEwsICZ1c2JfcGxsX2Nsayk7Ci0KLURFRklORV9DTE9DSyhzZG1hX2NsazIsICAgMCwgTlVMTCwgICAgICAgICAgMCwgTlVMTCwgTlVMTCwgJmlwZ19jbGspOwotREVGSU5FX0NMT0NLKHVzYl9jbGsxLCAgICAwLCBOVUxMLCAgICAgICAgICAwLCB1c2JfZ2V0X3JhdGUsIE5VTEwsICZ1c2JfcGxsX2Nsayk7Ci1ERUZJTkVfQ0xPQ0sobmZjX2NsaywgICAgIDAsIE5VTEwsICAgICAgICAgIDAsIG5mY19nZXRfcmF0ZSwgTlVMTCwgJmFoYl9jbGspOwotREVGSU5FX0NMT0NLKHNjY19jbGssICAgICAwLCBOVUxMLCAgICAgICAgICAwLCBOVUxMLCBOVUxMLCAmaXBnX2Nsayk7Ci1ERUZJTkVfQ0xPQ0soaXBnX2NsaywgICAgIDAsIE5VTEwsICAgICAgICAgIDAsIGlwZ19nZXRfcmF0ZSwgTlVMTCwgJmFoYl9jbGspOwotREVGSU5FX0NMT0NLKGNraWxfY2xrLCAgICAwLCBOVUxMLCAgICAgICAgICAwLCBjbGtfY2tpbF9nZXRfcmF0ZSwgTlVMTCwgTlVMTCk7Ci0KLSNkZWZpbmUgX1JFR0lTVEVSX0NMT0NLKGQsIG4sIGMpIFwKLQl7IFwKLQkJLmRldl9pZCA9IGQsIFwKLQkJLmNvbl9pZCA9IG4sIFwKLQkJLmNsayA9ICZjLCBcCi0JfSwKLQotc3RhdGljIHN0cnVjdCBjbGtfbG9va3VwIGxvb2t1cHNbXSA9IHsKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVtaSIsIGVtaV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjAiLCBOVUxMLCBjc3BpMV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjEiLCBOVUxMLCBjc3BpMl9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJzcGlfaW14LjIiLCBOVUxMLCBjc3BpM19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJncHQiLCBncHRfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicHdtIiwgcHdtX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImlteC13ZHQuMCIsIE5VTEwsIHdkb2dfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAicnRjIiwgcnRjX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImVwaXQiLCBlcGl0MV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJlcGl0IiwgZXBpdDJfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygibXhjX25hbmQuMCIsIE5VTEwsIG5mY19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpcHUtY29yZSIsIE5VTEwsIGlwdV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteDNfc2RjX2ZiIiwgTlVMTCwgaXB1X2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgImtwcCIsIGtwcF9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4wIiwgInVzYiIsIHVzYl9jbGsxKQotCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMCIsICJ1c2JfYWhiIiwgdXNiX2NsazIpCi0JX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4xIiwgInVzYiIsIHVzYl9jbGsxKQotCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMSIsICJ1c2JfYWhiIiwgdXNiX2NsazIpCi0JX1JFR0lTVEVSX0NMT0NLKCJteGMtZWhjaS4yIiwgInVzYiIsIHVzYl9jbGsxKQotCV9SRUdJU1RFUl9DTE9DSygibXhjLWVoY2kuMiIsICJ1c2JfYWhiIiwgdXNiX2NsazIpCi0JX1JFR0lTVEVSX0NMT0NLKCJmc2wtdXNiMi11ZGMiLCAidXNiIiwgdXNiX2NsazEpCi0JX1JFR0lTVEVSX0NMT0NLKCJmc2wtdXNiMi11ZGMiLCAidXNiX2FoYiIsIHVzYl9jbGsyKQotCV9SRUdJU1RFUl9DTE9DSygibXgzLWNhbWVyYS4wIiwgTlVMTCwgY3NpX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjAiLCBOVUxMLCB1YXJ0MV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4xIiwgTlVMTCwgdWFydDJfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMiIsIE5VTEwsIHVhcnQzX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjMiLCBOVUxMLCB1YXJ0NF9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC40IiwgTlVMTCwgdWFydDVfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygiaW14LWkyYy4wIiwgTlVMTCwgaTJjMV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtaTJjLjEiLCBOVUxMLCBpMmMyX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImlteC1pMmMuMiIsIE5VTEwsIGkyYzNfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygibXhjX3cxLjAiLCBOVUxMLCBvd2lyZV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteGMtbW1jLjAiLCBOVUxMLCBzZGhjMV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJteGMtbW1jLjEiLCBOVUxMLCBzZGhjMl9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKCJpbXgtc3NpLjAiLCBOVUxMLCBzc2kxX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soImlteC1zc2kuMSIsIE5VTEwsIHNzaTJfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZmlyaSIsIGZpcmlfY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiYXRhIiwgYXRhX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInJ0aWMiLCBydGljX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInJuZyIsIHJuZ19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJzZG1hX2FoYiIsIHNkbWFfY2xrMSkKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNkbWFfaXBnIiwgc2RtYV9jbGsyKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibXN0aWNrIiwgbXN0aWNrMV9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtc3RpY2siLCBtc3RpY2syX2NsaykKLQlfUkVHSVNURVJfQ0xPQ0soTlVMTCwgInNjYyIsIHNjY19jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJpaW0iLCBpaW1fY2xrKQotCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAibXBlZzQiLCBtcGVnNF9jbGspCi0JX1JFR0lTVEVSX0NMT0NLKE5VTEwsICJtYngiLCBtYnhfY2xrKQotCV9SRUdJU1RFUl9DTE9DSygibXhjX3J0YyIsIE5VTEwsIGNraWxfY2xrKQotfTsKLQotaW50IF9faW5pdCBteDMxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZikKLXsKLQl1MzIgcmVnOwotCi0JY2tpaF9yYXRlID0gZnJlZjsKLQotCWNsa2Rldl9hZGRfdGFibGUobG9va3VwcywgQVJSQVlfU0laRShsb29rdXBzKSk7Ci0KLQkvKiBjaGFuZ2UgdGhlIGNzaV9jbGsgcGFyZW50IGlmIG5lY2Vzc2FyeSAqLwotCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0NNUik7Ci0JaWYgKCEocmVnICYgTVhDX0NDTV9DQ01SX0NTQ1MpKQotCQlpZiAoY2xrX3NldF9wYXJlbnQoJmNzaV9jbGssICZ1c2JfcGxsX2NsaykpCi0JCQlwcl9lcnIoIiVzOiBlcnJvciBjaGFuZ2luZyBjc2lfY2xrIHBhcmVudFxuIiwgX19mdW5jX18pOwotCi0KLQkvKiBUdXJuIG9mZiBhbGwgcG9zc2libGUgY2xvY2tzICovCi0JX19yYXdfd3JpdGVsKCgzIDw8IDQpLCBNWENfQ0NNX0NHUjApOwotCV9fcmF3X3dyaXRlbCgwLCBNWENfQ0NNX0NHUjEpOwotCV9fcmF3X3dyaXRlbCgoMyA8PCA4KSB8ICgzIDw8IDE0KSB8ICgzIDw8IDE2KXwKLQkJICAgICAxIDw8IDI3IHwgMSA8PCAyOCwgLyogQml0IDI3IGFuZCAyOCBhcmUgbm90IGRlZmluZWQgZm9yCi0JCQkJCSAgIE1YMzIsIGJ1dCBzdGlsbCByZXF1aXJlZCB0byBiZSBzZXQgKi8KLQkJICAgICBNWENfQ0NNX0NHUjIpOwotCi0JLyoKLQkgKiBCZWZvcmUgdHVybmluZyBvZmYgdXNiX3BsbCBtYWtlIHN1cmUgaXBnX3Blcl9jbGsgaXMgZ2VuZXJhdGVkCi0JICogYnkgaXBnX2NsayBhbmQgbm90IHVzYl9wbGwuCi0JICovCi0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0NNUikgfCAoMSA8PCAyNCksIE1YQ19DQ01fQ0NNUik7Ci0KLQl1c2JfcGxsX2Rpc2FibGUoJnVzYl9wbGxfY2xrKTsKLQotCXByX2luZm8oIkNsb2NrIGlucHV0IHNvdXJjZSBpcyAlbGRcbiIsIGNsa19nZXRfcmF0ZSgmY2tpaF9jbGspKTsKLQotCWNsa19lbmFibGUoJmdwdF9jbGspOwotCWNsa19lbmFibGUoJmVtaV9jbGspOwotCWNsa19lbmFibGUoJmlpbV9jbGspOwotCi0JY2xrX2VuYWJsZSgmc2VyaWFsX3BsbF9jbGspOwotCi0JbXgzMV9yZWFkX2NwdV9yZXYoKTsKLQotCWlmIChteDMxX3JldmlzaW9uKCkgPj0gQ0hJUF9SRVZfMl8wKSB7Ci0JCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fUE1DUjEpOwotCQkvKiBObyBQTEwgcmVzdGFydCBvbiBEVkZTIHN3aXRjaDsgZW5hYmxlIGF1dG8gRU1JIGhhbmRzaGFrZSAqLwotCQlyZWcgfD0gTVhDX0NDTV9QTUNSMV9QTExSRElTIHwgTVhDX0NDTV9QTUNSMV9FTUlSUV9FTjsKLQkJX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9QTUNSMSk7Ci0JfQotCi0JbXhjX3RpbWVyX2luaXQoJmlwZ19jbGssIElPX0FERFJFU1MoR1BUMV9CQVNFX0FERFIpLCBNWENfSU5UX0dQVCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvY3B1LmMgYi9hcmNoL2FybS9tYWNoLW14My9jcHUuYwppbmRleCBkYjgyODgwLi44NjFhZmUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9jcHUuYworKysgYi9hcmNoL2FybS9tYWNoLW14My9jcHUuYwpAQCAtNDEsNyArNDEsNyBAQAogCXUzMiBpLCBzcmV2OwogCiAJLyogcmVhZCBTUkVWIHJlZ2lzdGVyIGZyb20gSUlNIG1vZHVsZSAqLwotCXNyZXYgPSBfX3Jhd19yZWFkbChJT19BRERSRVNTKElJTV9CQVNFX0FERFIpICsgTVhDX0lJTVNSRVYpOworCXNyZXYgPSBfX3Jhd19yZWFkbChJT19BRERSRVNTKElJTV9CQVNFX0FERFIgKyBNWENfSUlNU1JFVikpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXgzMV9jcHVfdHlwZSk7IGkrKykKIAkJaWYgKHNyZXYgPT0gbXgzMV9jcHVfdHlwZVtpXS5zcmV2KSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9jcm1fcmVncy5oIGIvYXJjaC9hcm0vbWFjaC1teDMvY3JtX3JlZ3MuaAppbmRleCBhZGZhMzYyLi4zN2E4YTA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9jcm1fcmVncy5oCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL2NybV9yZWdzLmgKQEAgLTI0LDcgKzI0LDcgQEAKICNkZWZpbmUgQ0tJSF9DTEtfRlJFUV8yN01IWiAgICAgMjcwMDAwMDAKICNkZWZpbmUgQ0tJTF9DTEtfRlJFUSAgICAgICAgICAgMzI3NjgKIAotI2RlZmluZSBNWENfQ0NNX0JBU0UJCUlPX0FERFJFU1MoQ0NNX0JBU0VfQUREUikKKyNkZWZpbmUgTVhDX0NDTV9CQVNFCQlNWDMxX0lPX0FERFJFU1MoTVgzMV9DQ01fQkFTRV9BRERSKQogCiAvKiBSZWdpc3RlciBhZGRyZXNzZXMgKi8KICNkZWZpbmUgTVhDX0NDTV9DQ01SCQkoTVhDX0NDTV9CQVNFICsgMHgwMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL2lvbXV4LWlteDMxLmMgYi9hcmNoL2FybS9tYWNoLW14My9pb211eC1pbXgzMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZDdmYTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14My9pb211eC1pbXgzMS5jCkBAIC0wLDAgKzEsMTgxIEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IFNhc2NoYSBIYXVlciA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA5IGJ5IFZhbGVudGluIExvbmdjaGFtcCA8dmFsZW50aW4ubG9uZ2NoYW1wQGVwZmwuY2g+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KKworLyoKKyAqIElPTVVYIHJlZ2lzdGVyIChiYXNlKSBhZGRyZXNzZXMKKyAqLworI2RlZmluZSBJT01VWF9CQVNFCU1YMzFfSU9fQUREUkVTUyhNWDMxX0lPTVVYQ19CQVNFX0FERFIpCisjZGVmaW5lIElPTVVYSU5UX09CUzEJKElPTVVYX0JBU0UgKyAweDAwMCkKKyNkZWZpbmUgSU9NVVhJTlRfT0JTMgkoSU9NVVhfQkFTRSArIDB4MDA0KQorI2RlZmluZSBJT01VWEdQUgkoSU9NVVhfQkFTRSArIDB4MDA4KQorI2RlZmluZSBJT01VWFNXX01VWF9DVEwJKElPTVVYX0JBU0UgKyAweDAwQykKKyNkZWZpbmUgSU9NVVhTV19QQURfQ1RMCShJT01VWF9CQVNFICsgMHgxNTQpCisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soZ3Bpb19tdXhfbG9jayk7CisKKyNkZWZpbmUgSU9NVVhfUkVHX01BU0sgKElPTVVYX1BBRE5VTV9NQVNLICYgfjB4MykKKwordW5zaWduZWQgbG9uZyBteGNfcGluX2FsbG9jX21hcFtOQl9QT1JUUyAqIDMyIC8gQklUU19QRVJfTE9OR107CisvKgorICogc2V0IHRoZSBtb2RlIGZvciBhIElPTVVYIHBpbi4KKyAqLworaW50IG14Y19pb211eF9tb2RlKHVuc2lnbmVkIGludCBwaW5fbW9kZSkKK3sKKwl1MzIgZmllbGQsIGwsIG1vZGUsIHJldCA9IDA7CisJdm9pZCBfX2lvbWVtICpyZWc7CisKKwlyZWcgPSBJT01VWFNXX01VWF9DVEwgKyAocGluX21vZGUgJiBJT01VWF9SRUdfTUFTSyk7CisJZmllbGQgPSBwaW5fbW9kZSAmIDB4MzsKKwltb2RlID0gKHBpbl9tb2RlICYgSU9NVVhfTU9ERV9NQVNLKSA+PiBJT01VWF9NT0RFX1NISUZUOworCisJc3Bpbl9sb2NrKCZncGlvX211eF9sb2NrKTsKKworCWwgPSBfX3Jhd19yZWFkbChyZWcpOworCWwgJj0gfigweGZmIDw8IChmaWVsZCAqIDgpKTsKKwlsIHw9IG1vZGUgPDwgKGZpZWxkICogOCk7CisJX19yYXdfd3JpdGVsKGwsIHJlZyk7CisKKwlzcGluX3VubG9jaygmZ3Bpb19tdXhfbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChteGNfaW9tdXhfbW9kZSk7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIHBhZCB2YWx1ZSBmb3IgYSBJT01VWCBwaW4uCisgKi8KK3ZvaWQgbXhjX2lvbXV4X3NldF9wYWQoZW51bSBpb211eF9waW5zIHBpbiwgdTMyIGNvbmZpZykKK3sKKwl1MzIgZmllbGQsIGw7CisJdm9pZCBfX2lvbWVtICpyZWc7CisKKwlwaW4gJj0gSU9NVVhfUEFETlVNX01BU0s7CisJcmVnID0gSU9NVVhTV19QQURfQ1RMICsgKHBpbiArIDIpIC8gMyAqIDQ7CisJZmllbGQgPSAocGluICsgMikgJSAzOworCisJcHJfZGVidWcoIiVzOiByZWcgb2Zmc2V0ID0gMHgleCwgZmllbGQgPSAlZFxuIiwKKwkJCV9fZnVuY19fLCAocGluICsgMikgLyAzLCBmaWVsZCk7CisKKwlzcGluX2xvY2soJmdwaW9fbXV4X2xvY2spOworCisJbCA9IF9fcmF3X3JlYWRsKHJlZyk7CisJbCAmPSB+KDB4MWZmIDw8IChmaWVsZCAqIDEwKSk7CisJbCB8PSBjb25maWcgPDwgKGZpZWxkICogMTApOworCV9fcmF3X3dyaXRlbChsLCByZWcpOworCisJc3Bpbl91bmxvY2soJmdwaW9fbXV4X2xvY2spOworfQorRVhQT1JUX1NZTUJPTChteGNfaW9tdXhfc2V0X3BhZCk7CisKKy8qCisgKiBhbGxvY3MgYSBzaW5nbGUgcGluOgorICogCS0gcmVzZXJ2ZXMgdGhlIHBpbiBzbyB0aGF0IGl0IGlzIG5vdCBjbGFpbWVkIGJ5IGFub3RoZXIgZHJpdmVyCisgKiAJLSBzZXR1cHMgdGhlIGlvbXV4IGFjY29yZGluZyB0byB0aGUgY29uZmlndXJhdGlvbgorICovCitpbnQgbXhjX2lvbXV4X2FsbG9jX3Bpbihjb25zdCB1bnNpZ25lZCBpbnQgcGluLCBjb25zdCBjaGFyICpsYWJlbCkKK3sKKwl1bnNpZ25lZCBwYWQgPSBwaW4gJiBJT01VWF9QQUROVU1fTUFTSzsKKworCWlmIChwYWQgPj0gKFBJTl9NQVggKyAxKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm14Y19pb211eDogQXR0ZW1wdCB0byByZXF1ZXN0IG5vbmV4aXN0YW50IHBpbiAldSBmb3IgXCIlc1wiXG4iLAorCQkJcGFkLCBsYWJlbCA/IGxhYmVsIDogIj8iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHRlc3RfYW5kX3NldF9iaXQocGFkLCBteGNfcGluX2FsbG9jX21hcCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJteGNfaW9tdXg6IHBpbiAldSBhbHJlYWR5IHVzZWQuIEFsbG9jYXRpb24gZm9yIFwiJXNcIiBmYWlsZWRcbiIsCisJCQlwYWQsIGxhYmVsID8gbGFiZWwgOiAiPyIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKwlteGNfaW9tdXhfbW9kZShwaW4pOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKG14Y19pb211eF9hbGxvY19waW4pOworCitpbnQgbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnModW5zaWduZWQgaW50ICpwaW5fbGlzdCwgdW5zaWduZWQgY291bnQsCisJCWNvbnN0IGNoYXIgKmxhYmVsKQoreworCXVuc2lnbmVkIGludCAqcCA9IHBpbl9saXN0OworCWludCBpOworCWludCByZXQgPSAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJcmV0ID0gbXhjX2lvbXV4X2FsbG9jX3BpbigqcCwgbGFiZWwpOworCQlpZiAocmV0KQorCQkJZ290byBzZXR1cF9lcnJvcjsKKwkJcCsrOworCX0KKwlyZXR1cm4gMDsKKworc2V0dXBfZXJyb3I6CisJbXhjX2lvbXV4X3JlbGVhc2VfbXVsdGlwbGVfcGlucyhwaW5fbGlzdCwgaSk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wobXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnMpOworCit2b2lkIG14Y19pb211eF9yZWxlYXNlX3Bpbihjb25zdCB1bnNpZ25lZCBpbnQgcGluKQoreworCXVuc2lnbmVkIHBhZCA9IHBpbiAmIElPTVVYX1BBRE5VTV9NQVNLOworCisJaWYgKHBhZCA8IChQSU5fTUFYICsgMSkpCisJCWNsZWFyX2JpdChwYWQsIG14Y19waW5fYWxsb2NfbWFwKTsKK30KK0VYUE9SVF9TWU1CT0wobXhjX2lvbXV4X3JlbGVhc2VfcGluKTsKKwordm9pZCBteGNfaW9tdXhfcmVsZWFzZV9tdWx0aXBsZV9waW5zKHVuc2lnbmVkIGludCAqcGluX2xpc3QsIGludCBjb3VudCkKK3sKKwl1bnNpZ25lZCBpbnQgKnAgPSBwaW5fbGlzdDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCW14Y19pb211eF9yZWxlYXNlX3BpbigqcCk7CisJCXArKzsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKG14Y19pb211eF9yZWxlYXNlX211bHRpcGxlX3BpbnMpOworCisvKgorICogVGhpcyBmdW5jdGlvbiBlbmFibGVzL2Rpc2FibGVzIHRoZSBnZW5lcmFsIHB1cnBvc2UgZnVuY3Rpb24gZm9yIGEgcGFydGljdWxhcgorICogc2lnbmFsLgorICovCit2b2lkIG14Y19pb211eF9zZXRfZ3ByKGVudW0gaW9tdXhfZ3BfZnVuYyBncCwgYm9vbCBlbikKK3sKKwl1MzIgbDsKKworCXNwaW5fbG9jaygmZ3Bpb19tdXhfbG9jayk7CisJbCA9IF9fcmF3X3JlYWRsKElPTVVYR1BSKTsKKwlpZiAoZW4pCisJCWwgfD0gZ3A7CisJZWxzZQorCQlsICY9IH5ncDsKKworCV9fcmF3X3dyaXRlbChsLCBJT01VWEdQUik7CisJc3Bpbl91bmxvY2soJmdwaW9fbXV4X2xvY2spOworfQorRVhQT1JUX1NZTUJPTChteGNfaW9tdXhfc2V0X2dwcik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9pb211eC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvaW9tdXguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzY2Y2NiYy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9pb211eC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTgxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwNC0yMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggYnkgU2FzY2hhIEhhdWVyIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgVmFsZW50aW4gTG9uZ2NoYW1wIDx2YWxlbnRpbi5sb25nY2hhbXBAZXBmbC5jaD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKLSAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KLSNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgotCi0vKgotICogSU9NVVggcmVnaXN0ZXIgKGJhc2UpIGFkZHJlc3NlcwotICovCi0jZGVmaW5lIElPTVVYX0JBU0UJSU9fQUREUkVTUyhJT01VWENfQkFTRV9BRERSKQotI2RlZmluZSBJT01VWElOVF9PQlMxCShJT01VWF9CQVNFICsgMHgwMDApCi0jZGVmaW5lIElPTVVYSU5UX09CUzIJKElPTVVYX0JBU0UgKyAweDAwNCkKLSNkZWZpbmUgSU9NVVhHUFIJKElPTVVYX0JBU0UgKyAweDAwOCkKLSNkZWZpbmUgSU9NVVhTV19NVVhfQ1RMCShJT01VWF9CQVNFICsgMHgwMEMpCi0jZGVmaW5lIElPTVVYU1dfUEFEX0NUTAkoSU9NVVhfQkFTRSArIDB4MTU0KQotCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGdwaW9fbXV4X2xvY2spOwotCi0jZGVmaW5lIElPTVVYX1JFR19NQVNLIChJT01VWF9QQUROVU1fTUFTSyAmIH4weDMpCi0KLXVuc2lnbmVkIGxvbmcgbXhjX3Bpbl9hbGxvY19tYXBbTkJfUE9SVFMgKiAzMiAvIEJJVFNfUEVSX0xPTkddOwotLyoKLSAqIHNldCB0aGUgbW9kZSBmb3IgYSBJT01VWCBwaW4uCi0gKi8KLWludCBteGNfaW9tdXhfbW9kZSh1bnNpZ25lZCBpbnQgcGluX21vZGUpCi17Ci0JdTMyIGZpZWxkLCBsLCBtb2RlLCByZXQgPSAwOwotCXZvaWQgX19pb21lbSAqcmVnOwotCi0JcmVnID0gSU9NVVhTV19NVVhfQ1RMICsgKHBpbl9tb2RlICYgSU9NVVhfUkVHX01BU0spOwotCWZpZWxkID0gcGluX21vZGUgJiAweDM7Ci0JbW9kZSA9IChwaW5fbW9kZSAmIElPTVVYX01PREVfTUFTSykgPj4gSU9NVVhfTU9ERV9TSElGVDsKLQotCXNwaW5fbG9jaygmZ3Bpb19tdXhfbG9jayk7Ci0KLQlsID0gX19yYXdfcmVhZGwocmVnKTsKLQlsICY9IH4oMHhmZiA8PCAoZmllbGQgKiA4KSk7Ci0JbCB8PSBtb2RlIDw8IChmaWVsZCAqIDgpOwotCV9fcmF3X3dyaXRlbChsLCByZWcpOwotCi0Jc3Bpbl91bmxvY2soJmdwaW9fbXV4X2xvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0wobXhjX2lvbXV4X21vZGUpOwotCi0vKgotICogVGhpcyBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSBwYWQgdmFsdWUgZm9yIGEgSU9NVVggcGluLgotICovCi12b2lkIG14Y19pb211eF9zZXRfcGFkKGVudW0gaW9tdXhfcGlucyBwaW4sIHUzMiBjb25maWcpCi17Ci0JdTMyIGZpZWxkLCBsOwotCXZvaWQgX19pb21lbSAqcmVnOwotCi0JcGluICY9IElPTVVYX1BBRE5VTV9NQVNLOwotCXJlZyA9IElPTVVYU1dfUEFEX0NUTCArIChwaW4gKyAyKSAvIDMgKiA0OwotCWZpZWxkID0gKHBpbiArIDIpICUgMzsKLQotCXByX2RlYnVnKCIlczogcmVnIG9mZnNldCA9IDB4JXgsIGZpZWxkID0gJWRcbiIsCi0JCQlfX2Z1bmNfXywgKHBpbiArIDIpIC8gMywgZmllbGQpOwotCi0Jc3Bpbl9sb2NrKCZncGlvX211eF9sb2NrKTsKLQotCWwgPSBfX3Jhd19yZWFkbChyZWcpOwotCWwgJj0gfigweDFmZiA8PCAoZmllbGQgKiAxMCkpOwotCWwgfD0gY29uZmlnIDw8IChmaWVsZCAqIDEwKTsKLQlfX3Jhd193cml0ZWwobCwgcmVnKTsKLQotCXNwaW5fdW5sb2NrKCZncGlvX211eF9sb2NrKTsKLX0KLUVYUE9SVF9TWU1CT0wobXhjX2lvbXV4X3NldF9wYWQpOwotCi0vKgotICogYWxsb2NzIGEgc2luZ2xlIHBpbjoKLSAqIAktIHJlc2VydmVzIHRoZSBwaW4gc28gdGhhdCBpdCBpcyBub3QgY2xhaW1lZCBieSBhbm90aGVyIGRyaXZlcgotICogCS0gc2V0dXBzIHRoZSBpb211eCBhY2NvcmRpbmcgdG8gdGhlIGNvbmZpZ3VyYXRpb24KLSAqLwotaW50IG14Y19pb211eF9hbGxvY19waW4oY29uc3QgdW5zaWduZWQgaW50IHBpbiwgY29uc3QgY2hhciAqbGFiZWwpCi17Ci0JdW5zaWduZWQgcGFkID0gcGluICYgSU9NVVhfUEFETlVNX01BU0s7Ci0KLQlpZiAocGFkID49IChQSU5fTUFYICsgMSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJteGNfaW9tdXg6IEF0dGVtcHQgdG8gcmVxdWVzdCBub25leGlzdGFudCBwaW4gJXUgZm9yIFwiJXNcIlxuIiwKLQkJCXBhZCwgbGFiZWwgPyBsYWJlbCA6ICI/Iik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICh0ZXN0X2FuZF9zZXRfYml0KHBhZCwgbXhjX3Bpbl9hbGxvY19tYXApKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibXhjX2lvbXV4OiBwaW4gJXUgYWxyZWFkeSB1c2VkLiBBbGxvY2F0aW9uIGZvciBcIiVzXCIgZmFpbGVkXG4iLAotCQkJcGFkLCBsYWJlbCA/IGxhYmVsIDogIj8iKTsKLQkJcmV0dXJuIC1FQlVTWTsKLQl9Ci0JbXhjX2lvbXV4X21vZGUocGluKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChteGNfaW9tdXhfYWxsb2NfcGluKTsKLQotaW50IG14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKHVuc2lnbmVkIGludCAqcGluX2xpc3QsIHVuc2lnbmVkIGNvdW50LAotCQljb25zdCBjaGFyICpsYWJlbCkKLXsKLQl1bnNpZ25lZCBpbnQgKnAgPSBwaW5fbGlzdDsKLQlpbnQgaTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCXJldCA9IG14Y19pb211eF9hbGxvY19waW4oKnAsIGxhYmVsKTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gc2V0dXBfZXJyb3I7Ci0JCXArKzsKLQl9Ci0JcmV0dXJuIDA7Ci0KLXNldHVwX2Vycm9yOgotCW14Y19pb211eF9yZWxlYXNlX211bHRpcGxlX3BpbnMocGluX2xpc3QsIGkpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKG14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKTsKLQotdm9pZCBteGNfaW9tdXhfcmVsZWFzZV9waW4oY29uc3QgdW5zaWduZWQgaW50IHBpbikKLXsKLQl1bnNpZ25lZCBwYWQgPSBwaW4gJiBJT01VWF9QQUROVU1fTUFTSzsKLQotCWlmIChwYWQgPCAoUElOX01BWCArIDEpKQotCQljbGVhcl9iaXQocGFkLCBteGNfcGluX2FsbG9jX21hcCk7Ci19Ci1FWFBPUlRfU1lNQk9MKG14Y19pb211eF9yZWxlYXNlX3Bpbik7Ci0KLXZvaWQgbXhjX2lvbXV4X3JlbGVhc2VfbXVsdGlwbGVfcGlucyh1bnNpZ25lZCBpbnQgKnBpbl9saXN0LCBpbnQgY291bnQpCi17Ci0JdW5zaWduZWQgaW50ICpwID0gcGluX2xpc3Q7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlteGNfaW9tdXhfcmVsZWFzZV9waW4oKnApOwotCQlwKys7Ci0JfQotfQotRVhQT1JUX1NZTUJPTChteGNfaW9tdXhfcmVsZWFzZV9tdWx0aXBsZV9waW5zKTsKLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gZW5hYmxlcy9kaXNhYmxlcyB0aGUgZ2VuZXJhbCBwdXJwb3NlIGZ1bmN0aW9uIGZvciBhIHBhcnRpY3VsYXIKLSAqIHNpZ25hbC4KLSAqLwotdm9pZCBteGNfaW9tdXhfc2V0X2dwcihlbnVtIGlvbXV4X2dwX2Z1bmMgZ3AsIGJvb2wgZW4pCi17Ci0JdTMyIGw7Ci0KLQlzcGluX2xvY2soJmdwaW9fbXV4X2xvY2spOwotCWwgPSBfX3Jhd19yZWFkbChJT01VWEdQUik7Ci0JaWYgKGVuKQotCQlsIHw9IGdwOwotCWVsc2UKLQkJbCAmPSB+Z3A7Ci0KLQlfX3Jhd193cml0ZWwobCwgSU9NVVhHUFIpOwotCXNwaW5fdW5sb2NrKCZncGlvX211eF9sb2NrKTsKLX0KLUVYUE9SVF9TWU1CT0wobXhjX2lvbXV4X3NldF9ncHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMva3ptYXJtMTEuYyBiL2FyY2gvYXJtL21hY2gtbXgzL2t6bWFybTExLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmYTk5Y2UuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMva3ptYXJtMTEuYworKysgL2Rldi9udWxsCkBAIC0xLDI2OCArMCwwIEBACi0vKgotICogS1pNLUFSTTExLTAxIHN1cHBvcnQKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIFlvaWNoaSBZdWFzYSA8eXVhc2FAbGludXgtbWlwcy5vcmc+Ci0gKgotICogYmFzZWQgb24gY29kZSBmb3IgTVgzMUFEUywKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQotICogIENvcHlyaWdodCAyMDA1LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotCi0jaW5jbHVkZSA8bWFjaC9ib2FyZC1rem1hcm0xMS5oPgotI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KLSNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KLSNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgotI2luY2x1ZGUgPG1hY2gvbWVtb3J5Lmg+Ci0KLSNpbmNsdWRlICJkZXZpY2VzLmgiCi0KLSNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTBfTU9EVUxFKQotLyoKLSAqIEtaTS1BUk0xMS0wMSBoYXMgYW4gZXh0ZXJuYWwgVUFSVCBvbiBGUEdBCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKLQl7Ci0JCS5tZW1iYXNlCT0gSU9fQUREUkVTUyhLWk1fQVJNMTFfMTY1NTApLAotCQkubWFwYmFzZQk9IEtaTV9BUk0xMV8xNjU1MCwKLQkJLmlycQkJPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzFfMSksCi0JCS5pcnFmbGFncwk9IElSUV9UWVBFX0VER0VfUklTSU5HLAotCQkudWFydGNsawk9IDE0NzQ1NjAwLAotCQkucmVnc2hpZnQJPSAwLAotCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwKLQkJCQkgIFVQRl9CVUdHWV9VQVJULAotCX0sCi0Je30sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNlcmlhbDgyNTBfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQJPSBLWk1fQVJNMTFfMTY1NTAsCi0JCS5lbmQJPSBLWk1fQVJNMTFfMTY1NTAgKyAweDEwLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0CT0gSU9NVVhfVE9fSVJRKE1YMzFfUElOX0dQSU8xXzEpLAotCQkuZW5kCT0gSU9NVVhfVE9fSVJRKE1YMzFfUElOX0dQSU8xXzEpLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2VyaWFsX2RldmljZSA9IHsKLQkubmFtZQkJPSAic2VyaWFsODI1MCIsCi0JLmlkCQk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKLQkuZGV2CQk9IHsKLQkJCQkucGxhdGZvcm1fZGF0YSA9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhLAotCQkJICB9LAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzZXJpYWw4MjUwX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gc2VyaWFsODI1MF9yZXNvdXJjZXMsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBrem1faW5pdF9leHRfdWFydCh2b2lkKQotewotCXU4IHRtcDsKLQotCS8qCi0JICogR1BJTyAxLTE6IGV4dGVybmFsIFVBUlQgaW50ZXJydXB0IGxpbmUKLQkgKi8KLQlteGNfaW9tdXhfbW9kZShJT01VWF9NT0RFKE1YMzFfUElOX0dQSU8xXzEsIElPTVVYX0NPTkZJR19HUElPKSk7Ci0JZ3Bpb19yZXF1ZXN0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fR1BJTzFfMSksICJleHQtdWFydC1pbnQiKTsKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8xXzEpKTsKLQotCS8qCi0JICogVW5tYXNrIFVBUlQgaW50ZXJydXB0Ci0JICovCi0JdG1wID0gX19yYXdfcmVhZGIoSU9fQUREUkVTUyhLWk1fQVJNMTFfQ1RMMSkpOwotCXRtcCB8PSAweDI7Ci0JX19yYXdfd3JpdGViKHRtcCwgSU9fQUREUkVTUyhLWk1fQVJNMTFfQ1RMMSkpOwotCi0JcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2VyaWFsX2RldmljZSk7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQga3ptX2luaXRfZXh0X3VhcnQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0vKgotICogU01TQyBMQU45MTE4Ci0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19TTVNDOTExWCkgfHwgZGVmaW5lZChDT05GSUdfU01TQzkxMVhfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBzbXNjOTExeF9wbGF0Zm9ybV9jb25maWcga3ptX3Ntc2M5MTE4X2NvbmZpZyA9IHsKLQkucGh5X2ludGVyZmFjZQk9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUksCi0JLmlycV9wb2xhcml0eQk9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfSElHSCwKLQkuaXJxX3R5cGUJPSBTTVNDOTExWF9JUlFfVFlQRV9QVVNIX1BVTEwsCi0JLmZsYWdzCQk9IFNNU0M5MTFYX1VTRV8zMkJJVCB8IFNNU0M5MTFYX1NBVkVfTUFDX0FERFJFU1MsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGt6bV9zbXNjOTExOF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IENTNV9CQVNFX0FERFIsCi0JCS5lbmQJPSBDUzVfQkFTRV9BRERSICsgU1pfMTI4SyAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JewotCQkuc3RhcnQJPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzFfMiksCi0JCS5lbmQJPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzFfMiksCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfSElHSEVER0UsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGt6bV9zbXNjOTExOF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInNtc2M5MTF4IiwKLQkuaWQJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGt6bV9zbXNjOTExOF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IGt6bV9zbXNjOTExOF9yZXNvdXJjZXMsCi0JLmRldgkJPSB7Ci0JCQkJLnBsYXRmb3JtX2RhdGEgPSAma3ptX3Ntc2M5MTE4X2NvbmZpZywKLQkJCSAgfSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGt6bV9pbml0X3Ntc2M5MTE4KHZvaWQpCi17Ci0JLyoKLQkgKiBHUElPIDEtMjogU01TQzkxMTggaW50ZXJydXB0IGxpbmUKLQkgKi8KLQlteGNfaW9tdXhfbW9kZShJT01VWF9NT0RFKE1YMzFfUElOX0dQSU8xXzIsIElPTVVYX0NPTkZJR19HUElPKSk7Ci0JZ3Bpb19yZXF1ZXN0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fR1BJTzFfMiksICJzbXNjOTExOC1pbnQiKTsKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8xXzIpKTsKLQotCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmt6bV9zbXNjOTExOF9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IGt6bV9pbml0X3Ntc2M5MTE4KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9JTVgpIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9JTVhfTU9EVUxFKQotc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKLQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IGt6bV9pbml0X2lteF91YXJ0KHZvaWQpCi17Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgJnVhcnRfcGRhdGEpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBrem1faW5pdF9pbXhfdWFydCh2b2lkKQotewotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQga3ptX3BpbnNbXSBfX2luaXRkYXRhID0gewotCU1YMzFfUElOX0NUUzFfX0NUUzEsCi0JTVgzMV9QSU5fUlRTMV9fUlRTMSwKLQlNWDMxX1BJTl9UWEQxX19UWEQxLAotCU1YMzFfUElOX1JYRDFfX1JYRDEsCi0JTVgzMV9QSU5fRENEX0RDRTFfX0RDRF9EQ0UxLAotCU1YMzFfUElOX1JJX0RDRTFfX1JJX0RDRTEsCi0JTVgzMV9QSU5fRFNSX0RDRTFfX0RTUl9EQ0UxLAotCU1YMzFfUElOX0RUUl9EQ0UxX19EVFJfRENFMSwKLQlNWDMxX1BJTl9DVFMyX19DVFMyLAotCU1YMzFfUElOX1JUUzJfX1JUUzIsCi0JTVgzMV9QSU5fVFhEMl9fVFhEMiwKLQlNWDMxX1BJTl9SWEQyX19SWEQyLAotCU1YMzFfUElOX0RDRF9EVEUxX19EQ0RfRFRFMiwKLQlNWDMxX1BJTl9SSV9EVEUxX19SSV9EVEUyLAotCU1YMzFfUElOX0RTUl9EVEUxX19EU1JfRFRFMiwKLQlNWDMxX1BJTl9EVFJfRFRFMV9fRFRSX0RURTIsCi19OwotCi0vKgotICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBrem1fYm9hcmRfaW5pdCh2b2lkKQotewotCW14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKGt6bV9waW5zLAotCQkJCSAgICAgIEFSUkFZX1NJWkUoa3ptX3BpbnMpLCAia3ptIik7Ci0Ja3ptX2luaXRfZXh0X3VhcnQoKTsKLQlrem1faW5pdF9zbXNjOTExOCgpOwotCWt6bV9pbml0X2lteF91YXJ0KCk7Ci0KLQlwcl9pbmZvKCJDbG9jayBpbnB1dCBzb3VyY2UgaXMgMjZNSHpcbiIpOwotfQotCi0vKgotICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBzdGF0aWMgbWFwcGluZ3MgZm9yIHRoZSBrem0tYXJtMTEtMDEgYm9hcmQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mga3ptX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwJPSBDUzRfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUzRfQkFTRV9BRERSKSwKLQkJLmxlbmd0aAkJPSBDUzRfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfSwKLQl7Ci0JCS52aXJ0dWFsCT0gQ1M1X0JBU0VfQUREUl9WSVJULAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oQ1M1X0JBU0VfQUREUiksCi0JCS5sZW5ndGgJCT0gQ1M1X1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sCi19OwotCi0vKgotICogU2V0IHVwIHN0YXRpYyB2aXJ0dWFsIG1hcHBpbmdzLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQga3ptX21hcF9pbyh2b2lkKQotewotCW14MzFfbWFwX2lvKCk7Ci0JaW90YWJsZV9pbml0KGt6bV9pb19kZXNjLCBBUlJBWV9TSVpFKGt6bV9pb19kZXNjKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBrem1fdGltZXJfaW5pdCh2b2lkKQotewotCW14MzFfY2xvY2tzX2luaXQoMjYwMDAwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c190aW1lciBrem1fdGltZXIgPSB7Ci0JLmluaXQgICA9IGt6bV90aW1lcl9pbml0LAotfTsKLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgdXNlcyBzdGFuZGFyZCBrZXJuZWwgbWFjcm9zIGRlZmluZSBpbiBhcmNoLmggaW4gb3JkZXIgdG8KLSAqIGluaXRpYWxpemUgX19tYWNoX2Rlc2NfS1pNX0FSTTExXzAxIGRhdGEgc3RydWN0dXJlLgotICovCi1NQUNISU5FX1NUQVJUKEtaTV9BUk0xMV8wMSwgIkt5b3RvIE1pY3JvY29tcHV0ZXIgQ28uLCBMdGQuIEtaTS1BUk0xMS0wMSIpCi0JLnBoeXNfaW8gICAgICAgID0gQUlQUzFfQkFTRV9BRERSLAotCS5pb19wZ19vZmZzdCAgICA9ICgoQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IGt6bV9tYXBfaW8sCi0JLmluaXRfaXJxICAgICAgID0gbXgzMV9pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lICAgPSBrem1fYm9hcmRfaW5pdCwKLQkudGltZXIgICAgICAgICAgPSAma3ptX3RpbWVyLAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtYXJtYWRpbGxvNXgwLmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLWFybWFkaWxsbzV4MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNzJiMGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLWFybWFkaWxsbzV4MC5jCkBAIC0wLDAgKzEsNDE2IEBACisvKgorICogYXJtYWRpbGxvNXgwLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBBbGJlcnRvIFBhbml6em8gPG1hcmFtYW9wZXJjaGVzZWltb3J0b0BnbWFpbC5jb20+CisgKiB1cGRhdGVzIGluIGh0dHA6Ly9hbGJlcmRyb2lkLmJsb2dzcG90LmNvbS8KKyAqCisgKiBCYXNlZCBvbiBBdG1hcmsgVGVjaG5vLCBJbmMuIGFybWFkaWxsbyA1MDAgQlNQIDIwMDgKKyAqIEJhc2VkIG9uIG14MzFhZHMuYyBhbmQgcGNtMDM3LmMgR3JlYXQgV29yayEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW9fa2V5cy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQtYXJtYWRpbGxvNXgwLmg+CisjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL2lwdS5oPgorI2luY2x1ZGUgPG1hY2gvbXgzZmIuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisjaW5jbHVkZSAiY3JtX3JlZ3MuaCIKKworc3RhdGljIGludCBhcm1hZGlsbG81eDBfcGluc1tdID0geworCS8qIFVBUlQxICovCisJTVgzMV9QSU5fQ1RTMV9fQ1RTMSwKKwlNWDMxX1BJTl9SVFMxX19SVFMxLAorCU1YMzFfUElOX1RYRDFfX1RYRDEsCisJTVgzMV9QSU5fUlhEMV9fUlhEMSwKKwkvKiBVQVJUMiAqLworCU1YMzFfUElOX0NUUzJfX0NUUzIsCisJTVgzMV9QSU5fUlRTMl9fUlRTMiwKKwlNWDMxX1BJTl9UWEQyX19UWEQyLAorCU1YMzFfUElOX1JYRDJfX1JYRDIsCisJLyogTEFOOTExOF9JUlEgKi8KKwlJT01VWF9NT0RFKE1YMzFfUElOX0dQSU8xXzAsIElPTVVYX0NPTkZJR19HUElPKSwKKwkvKiBTREhDMSAqLworCU1YMzFfUElOX1NEMV9EQVRBM19fU0QxX0RBVEEzLAorCU1YMzFfUElOX1NEMV9EQVRBMl9fU0QxX0RBVEEyLAorCU1YMzFfUElOX1NEMV9EQVRBMV9fU0QxX0RBVEExLAorCU1YMzFfUElOX1NEMV9EQVRBMF9fU0QxX0RBVEEwLAorCU1YMzFfUElOX1NEMV9DTEtfX1NEMV9DTEssCisJTVgzMV9QSU5fU0QxX0NNRF9fU0QxX0NNRCwKKwkvKiBGcmFtZWJ1ZmZlciAqLworCU1YMzFfUElOX0xEMF9fTEQwLAorCU1YMzFfUElOX0xEMV9fTEQxLAorCU1YMzFfUElOX0xEMl9fTEQyLAorCU1YMzFfUElOX0xEM19fTEQzLAorCU1YMzFfUElOX0xENF9fTEQ0LAorCU1YMzFfUElOX0xENV9fTEQ1LAorCU1YMzFfUElOX0xENl9fTEQ2LAorCU1YMzFfUElOX0xEN19fTEQ3LAorCU1YMzFfUElOX0xEOF9fTEQ4LAorCU1YMzFfUElOX0xEOV9fTEQ5LAorCU1YMzFfUElOX0xEMTBfX0xEMTAsCisJTVgzMV9QSU5fTEQxMV9fTEQxMSwKKwlNWDMxX1BJTl9MRDEyX19MRDEyLAorCU1YMzFfUElOX0xEMTNfX0xEMTMsCisJTVgzMV9QSU5fTEQxNF9fTEQxNCwKKwlNWDMxX1BJTl9MRDE1X19MRDE1LAorCU1YMzFfUElOX0xEMTZfX0xEMTYsCisJTVgzMV9QSU5fTEQxN19fTEQxNywKKwlNWDMxX1BJTl9WU1lOQzNfX1ZTWU5DMywKKwlNWDMxX1BJTl9IU1lOQ19fSFNZTkMsCisJTVgzMV9QSU5fRlBTSElGVF9fRlBTSElGVCwKKwlNWDMxX1BJTl9EUkRZMF9fRFJEWTAsCisJSU9NVVhfTU9ERShNWDMxX1BJTl9MQ1MxLCBJT01VWF9DT05GSUdfR1BJTyksIC8qQURWNzEyNV9QU0FWRSovCisJLyogSTJDMiAqLworCU1YMzFfUElOX0NTUEkyX01PU0lfX1NDTCwKKwlNWDMxX1BJTl9DU1BJMl9NSVNPX19TREEsCit9OworCisvKiBSVEMgb3ZlciBJMkMqLworI2RlZmluZSBBUk1BRElMTE81WDBfUlRDX0dQSU8JSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9TUlhENCkKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBhcm1hZGlsbG81eDBfaTJjX3J0YyA9IHsKKwlJMkNfQk9BUkRfSU5GTygiczM1MzkwYSIsIDB4MzApLAorfTsKKworLyogR1BJTyBCVVRUT05TICovCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gYXJtYWRpbGxvNXgwX2J1dHRvbnNbXSA9IHsKKwl7CisJCS5jb2RlCQk9IEtFWV9FTlRFUiwgLyoyOCovCisJCS5ncGlvCQk9IElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fU0NMSzApLAorCQkuYWN0aXZlX2xvdwk9IDEsCisJCS5kZXNjCQk9ICJtZW51IiwKKwkJLndha2V1cAkJPSAxLAorCX0sIHsKKwkJLmNvZGUJCT0gS0VZX0JBQ0ssIC8qMTU4Ki8KKwkJLmdwaW8JCT0gSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9TUlNUMCksCisJCS5hY3RpdmVfbG93CT0gMSwKKwkJLmRlc2MJCT0gImJhY2siLAorCQkud2FrZXVwCQk9IDEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBhcm1hZGlsbG81eDBfYnV0dG9uX2RhdGEgPSB7CisJLmJ1dHRvbnMJPSBhcm1hZGlsbG81eDBfYnV0dG9ucywKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKGFybWFkaWxsbzV4MF9idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFybWFkaWxsbzV4MF9idXR0b25fZGV2aWNlID0geworCS5uYW1lCQk9ICJncGlvLWtleXMiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmFybWFkaWxsbzV4MF9idXR0b25fZGF0YSwKKwl9Cit9OworCisvKgorICogTkFORCBGbGFzaAorICovCitzdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgYXJtYWRpbGxvNXgwX25hbmRfZmxhc2hfcGRhdGEgPSB7CisJLndpZHRoCQk9IDEsCisJLmh3X2VjYwkJPSAxLAorfTsKKworLyoKKyAqIE1URCBOT1IgRmxhc2gKKyAqLworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGFybWFkaWxsbzV4MF9ub3JfZmxhc2hfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUJCT0gIm5vci5ib290bG9hZGVyIiwKKwkJLm9mZnNldAkJPSAweDAwMDAwMDAwLAorCQkuc2l6ZQkJPSA0KjMyKjEwMjQsCisJfSwgeworCQkubmFtZQkJPSAibm9yLmtlcm5lbCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSAxNioxMjgqMTAyNCwKKwl9LCB7CisJCS5uYW1lCQk9ICJub3IudXNlcmxhbmQiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gMTEwKjEyOCoxMDI0LAorCX0sIHsKKwkJLm5hbWUJCT0gIm5vci5jb25maWciLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gMSoxMjgqMTAyNCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgYXJtYWRpbGxvNXgwX25vcl9mbGFzaF9wZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKKwkucGFydHMJCT0gYXJtYWRpbGxvNXgwX25vcl9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoYXJtYWRpbGxvNXgwX25vcl9mbGFzaF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXJtYWRpbGxvNXgwX25vcl9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJLnN0YXJ0CQk9IE1YMzFfQ1MwX0JBU0VfQUREUiwKKwkuZW5kCQk9IE1YMzFfQ1MwX0JBU0VfQUREUiArIFNaXzY0TSAtIDEsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhcm1hZGlsbG81eDBfbm9yX2ZsYXNoID0geworCS5uYW1lCQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwkJPSAxLAorCS5yZXNvdXJjZQkJPSAmYXJtYWRpbGxvNXgwX25vcl9mbGFzaF9yZXNvdXJjZSwKK307CisKKy8qCisgKiBGQiBzdXBwb3J0CisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmJfdmlkZW9tb2RlIGZiX21vZGVkYltdID0geworCXsJLyogNjQweDQ4MCBAIDYwIEh6ICovCisJCS5uYW1lCQk9ICJDUlQtVkdBIiwKKwkJLnJlZnJlc2gJPSA2MCwKKwkJLnhyZXMJCT0gNjQwLAorCQkueXJlcwkJPSA0ODAsCisJCS5waXhjbG9jawk9IDM5NzIxLAorCQkubGVmdF9tYXJnaW4JPSAzNSwKKwkJLnJpZ2h0X21hcmdpbgk9IDExNSwKKwkJLnVwcGVyX21hcmdpbgk9IDQzLAorCQkubG93ZXJfbWFyZ2luCT0gMSwKKwkJLmhzeW5jX2xlbgk9IDEwLAorCQkudnN5bmNfbGVuCT0gMSwKKwkJLnN5bmMJCT0gRkJfU1lOQ19PRV9BQ1RfSElHSCwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJCS5mbGFnCQk9IDAsCisJfSwgey8qIDgwMHg2MDAgQCA1NiBIeiAqLworCQkubmFtZQkJPSAiQ1JULVNWR0EiLAorCQkucmVmcmVzaAk9IDU2LAorCQkueHJlcwkJPSA4MDAsCisJCS55cmVzCQk9IDYwMCwKKwkJLnBpeGNsb2NrCT0gMzAwMDAsCisJCS5sZWZ0X21hcmdpbgk9IDMwLAorCQkucmlnaHRfbWFyZ2luCT0gMTA4LAorCQkudXBwZXJfbWFyZ2luCT0gMTMsCisJCS5sb3dlcl9tYXJnaW4JPSAxMCwKKwkJLmhzeW5jX2xlbgk9IDEwLAorCQkudnN5bmNfbGVuCT0gMSwKKwkJLnN5bmMJCT0gRkJfU1lOQ19PRV9BQ1RfSElHSCB8IEZCX1NZTkNfSE9SX0hJR0hfQUNUIHwKKwkJCQkgIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJCS5mbGFnCQk9IDAsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaXB1X3BsYXRmb3JtX2RhdGEgbXgzX2lwdV9kYXRhID0geworCS5pcnFfYmFzZSA9IE1YQ19JUFVfSVJRX1NUQVJULAorfTsKKworc3RhdGljIHN0cnVjdCBteDNmYl9wbGF0Zm9ybV9kYXRhIG14M2ZiX3BkYXRhID0geworCS5kbWFfZGV2CT0gJm14M19pcHUuZGV2LAorCS5uYW1lCQk9ICJDUlQtVkdBIiwKKwkubW9kZQkJPSBmYl9tb2RlZGIsCisJLm51bV9tb2Rlcwk9IEFSUkFZX1NJWkUoZmJfbW9kZWRiKSwKK307CisKKy8qCisgKiBTREhDIDEKKyAqIE1NQyBzdXBwb3J0CisgKi8KK3N0YXRpYyBpbnQgYXJtYWRpbGxvNXgwX3NkaGMxX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fQVRBX1JFU0VUX0IpKTsKK30KKworc3RhdGljIGludCBhcm1hZGlsbG81eDBfc2RoYzFfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgaXJxX2hhbmRsZXJfdCBkZXRlY3RfaXJxLCB2b2lkICpkYXRhKQoreworCWludCByZXQ7CisJaW50IGdwaW9fZGV0LCBncGlvX3dwOworCisJZ3Bpb19kZXQgPSBJT01VWF9UT19HUElPKE1YMzFfUElOX0FUQV9ETUFDSyk7CisJZ3Bpb193cCA9IElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fQVRBX1JFU0VUX0IpOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW9fZGV0LCAic2RoYy1jYXJkLWRldGVjdCIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvX2RldCk7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoZ3Bpb193cCwgInNkaGMtd3JpdGUtcHJvdGVjdCIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2dwaW9fZnJlZTsKKworCWdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW9fd3ApOworCisJLyogV2hlbiBzdXBwb3J0ZWQgdGhlIHRyaWdnZXIgdHlwZSBoYXZlIHRvIGJlIEJPVEggKi8KKwlyZXQgPSByZXF1ZXN0X2lycShJT01VWF9UT19JUlEoTVgzMV9QSU5fQVRBX0RNQUNLKSwgZGV0ZWN0X2lycSwKKwkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJICAic2RoYy1kZXRlY3QiLCBkYXRhKTsKKworCWlmIChyZXQpCisJCWdvdG8gZXJyX2dwaW9fZnJlZV8yOworCisJcmV0dXJuIDA7CisKK2Vycl9ncGlvX2ZyZWVfMjoKKwlncGlvX2ZyZWUoZ3Bpb193cCk7CisKK2Vycl9ncGlvX2ZyZWU6CisJZ3Bpb19mcmVlKGdwaW9fZGV0KTsKKworCXJldHVybiByZXQ7CisKK30KKworc3RhdGljIHZvaWQgYXJtYWRpbGxvNXgwX3NkaGMxX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWZyZWVfaXJxKElPTVVYX1RPX0lSUShNWDMxX1BJTl9BVEFfRE1BQ0spLCBkYXRhKTsKKwlncGlvX2ZyZWUoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9BVEFfRE1BQ0spKTsKKwlncGlvX2ZyZWUoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9BVEFfUkVTRVRfQikpOworfQorCitzdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGNfcGRhdGEgPSB7CisJLmdldF9ybyA9IGFybWFkaWxsbzV4MF9zZGhjMV9nZXRfcm8sCisJLmluaXQgPSBhcm1hZGlsbG81eDBfc2RoYzFfaW5pdCwKKwkuZXhpdCA9IGFybWFkaWxsbzV4MF9zZGhjMV9leGl0LAorfTsKKworLyoKKyAqIFNNU0MgOTExOAorICogTmV0d29yayBzdXBwb3J0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXJtYWRpbGxvNXgwX3NtYzkxMXhfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBNWDMxX0NTM19CQVNFX0FERFIsCisJCS5lbmQJPSBNWDMxX0NTM19CQVNFX0FERFIgKyBTWl8zMk0gLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydAk9IElPTVVYX1RPX0lSUShNWDMxX1BJTl9HUElPMV8wKSwKKwkJLmVuZAk9IElPTVVYX1RPX0lSUShNWDMxX1BJTl9HUElPMV8wKSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9MT1dMRVZFTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbXNjOTExeF9wbGF0Zm9ybV9jb25maWcgc21zYzkxMXhfaW5mbyA9IHsKKwkuZmxhZ3MJCT0gU01TQzkxMVhfVVNFXzE2QklULAorCS5pcnFfcG9sYXJpdHkgICA9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAorCS5pcnFfdHlwZSAgICAgICA9IFNNU0M5MTFYX0lSUV9UWVBFX1BVU0hfUFVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFybWFkaWxsbzV4MF9zbWM5MTF4X2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAic21zYzkxMXgiLAorCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5udW1fcmVzb3VyY2VzICA9IEFSUkFZX1NJWkUoYXJtYWRpbGxvNXgwX3NtYzkxMXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgICAgICAgPSBhcm1hZGlsbG81eDBfc21jOTExeF9yZXNvdXJjZXMsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzbXNjOTExeF9pbmZvLAorCX0sCit9OworCisvKiBVQVJUIGRldmljZSBkYXRhICovCitzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJmFybWFkaWxsbzV4MF9zbWM5MTF4X2RldmljZSwKKwkmbXhjX2kyY19kZXZpY2UxLAorCSZhcm1hZGlsbG81eDBfYnV0dG9uX2RldmljZSwKK307CisKKy8qCisgKiBQZXJmb3JtIGJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9ucworICovCitzdGF0aWMgdm9pZCBfX2luaXQgYXJtYWRpbGxvNXgwX2luaXQodm9pZCkKK3sKKwlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhhcm1hZGlsbG81eDBfcGlucywKKwkJCUFSUkFZX1NJWkUoYXJtYWRpbGxvNXgwX3BpbnMpLCAiYXJtYWRpbGxvNXgwIik7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKKworCS8qIFJlZ2lzdGVyIFVBUlQgKi8KKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgJnVhcnRfcGRhdGEpOworCisJLyogU01TQzkxMTggSVJRIHBpbiAqLworCWdwaW9fZGlyZWN0aW9uX2lucHV0KE1YMzFfUElOX0dQSU8xXzApOworCisJLyogUmVnaXN0ZXIgU0RIQyAqLworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y3NkaGNfZGV2aWNlMCwgJnNkaGNfcGRhdGEpOworCisJLyogUmVnaXN0ZXIgRkIgKi8KKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDNfaXB1LCAmbXgzX2lwdV9kYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDNfZmIsICZteDNmYl9wZGF0YSk7CisKKwkvKiBSZWdpc3RlciBOT1IgRmxhc2ggKi8KKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZhcm1hZGlsbG81eDBfbm9yX2ZsYXNoLAorCQkJICAgICZhcm1hZGlsbG81eDBfbm9yX2ZsYXNoX3BkYXRhKTsKKworCS8qIFJlZ2lzdGVyIE5BTkQgRmxhc2ggKi8KKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfbmFuZF9kZXZpY2UsICZhcm1hZGlsbG81eDBfbmFuZF9mbGFzaF9wZGF0YSk7CisKKwkvKiBzZXQgTkFORCBwYWdlIHNpemUgdG8gMmsgaWYgbm90IGNvbmZpZ3VyZWQgdmlhIGJvb3QgbW9kZSBwaW5zICovCisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKE1YQ19DQ01fUkNTUikgfCAoMSA8PCAzMCksIE1YQ19DQ01fUkNTUik7CisKKwkvKiBSVEMgKi8KKwkvKiBHZXQgUlRDIElSUSBhbmQgcmVnaXN0ZXIgdGhlIGNoaXAgKi8KKwlpZiAoZ3Bpb19yZXF1ZXN0KEFSTUFESUxMTzVYMF9SVENfR1BJTywgInJ0YyIpID09IDApIHsKKwkJaWYgKGdwaW9fZGlyZWN0aW9uX2lucHV0KEFSTUFESUxMTzVYMF9SVENfR1BJTykgPT0gMCkKKwkJCWFybWFkaWxsbzV4MF9pMmNfcnRjLmlycSA9IGdwaW9fdG9faXJxKEFSTUFESUxMTzVYMF9SVENfR1BJTyk7CisJCWVsc2UKKwkJCWdwaW9fZnJlZShBUk1BRElMTE81WDBfUlRDX0dQSU8pOworCX0KKwlpZiAoYXJtYWRpbGxvNXgwX2kyY19ydGMuaXJxID09IDApCisJCXByX3dhcm5pbmcoImFybWFkaWxsbzV4MF9pbml0OiBmYWlsZWQgdG8gZ2V0IFJUQyBJUlFcbiIpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsICZhcm1hZGlsbG81eDBfaTJjX3J0YywgMSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhcm1hZGlsbG81eDBfdGltZXJfaW5pdCh2b2lkKQoreworCW14MzFfY2xvY2tzX2luaXQoMjYwMDAwMDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBhcm1hZGlsbG81eDBfdGltZXIgPSB7CisJLmluaXQJPSBhcm1hZGlsbG81eDBfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoQVJNQURJTExPNVgwLCAiQXJtYWRpbGxvLTUwMCIpCisJLyogTWFpbnRhaW5lcjogQWxiZXJ0byBQYW5penpvICAqLworCS5waHlzX2lvCT0gTVgzMV9BSVBTMV9CQVNFX0FERFIsCisJLmlvX3BnX29mZnN0CT0gKE1YMzFfQUlQUzFfQkFTRV9BRERSX1ZJUlQgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IE1YM3hfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvCQk9IG14MzFfbWFwX2lvLAorCS5pbml0X2lycQk9IG14MzFfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZhcm1hZGlsbG81eDBfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IGFybWFkaWxsbzV4MF9pbml0LAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gta3ptX2FybTExXzAxLmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLWt6bV9hcm0xMV8wMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwODVkNWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLWt6bV9hcm0xMV8wMS5jCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogS1pNLUFSTTExLTAxIHN1cHBvcnQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgIFlvaWNoaSBZdWFzYSA8eXVhc2FAbGludXgtbWlwcy5vcmc+CisgKgorICogYmFzZWQgb24gY29kZSBmb3IgTVgzMUFEUywKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQorICogIENvcHlyaWdodCAyMDA1LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjaW5jbHVkZSA8bWFjaC9ib2FyZC1rem1hcm0xMS5oPgorI2luY2x1ZGUgPG1hY2gvY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgorI2luY2x1ZGUgPG1hY2gvbWVtb3J5Lmg+CisKKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKyNkZWZpbmUgS1pNX0FSTTExX0lPX0FERFJFU1MoeCkgKAkJCQkJXAorCUlNWF9JT19BRERSRVNTKHgsIE1YMzFfQ1M0KSA/OgkJCQkJXAorCUlNWF9JT19BRERSRVNTKHgsIE1YMzFfQ1M1KSA/OgkJCQkJXAorCU1YMzFfSU9fQUREUkVTUyh4KSkKKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MF9NT0RVTEUpCisvKgorICogS1pNLUFSTTExLTAxIGhhcyBhbiBleHRlcm5hbCBVQVJUIG9uIEZQR0EKKyAqLworc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0geworCXsKKwkJLm1lbWJhc2UJPSBLWk1fQVJNMTFfSU9fQUREUkVTUyhLWk1fQVJNMTFfMTY1NTApLAorCQkubWFwYmFzZQk9IEtaTV9BUk0xMV8xNjU1MCwKKwkJLmlycQkJPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzFfMSksCisJCS5pcnFmbGFncwk9IElSUV9UWVBFX0VER0VfUklTSU5HLAorCQkudWFydGNsawk9IDE0NzQ1NjAwLAorCQkucmVnc2hpZnQJPSAwLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwKKwkJCQkgIFVQRl9CVUdHWV9VQVJULAorCX0sCisJe30sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNlcmlhbDgyNTBfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBLWk1fQVJNMTFfMTY1NTAsCisJCS5lbmQJPSBLWk1fQVJNMTFfMTY1NTAgKyAweDEwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSU9NVVhfVE9fSVJRKE1YMzFfUElOX0dQSU8xXzEpLAorCQkuZW5kCT0gSU9NVVhfVE9fSVJRKE1YMzFfUElOX0dQSU8xXzEpLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2VyaWFsX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKKwkuZGV2CQk9IHsKKwkJCQkucGxhdGZvcm1fZGF0YSA9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhLAorCQkJICB9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzZXJpYWw4MjUwX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc2VyaWFsODI1MF9yZXNvdXJjZXMsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBrem1faW5pdF9leHRfdWFydCh2b2lkKQoreworCXU4IHRtcDsKKworCS8qCisJICogR1BJTyAxLTE6IGV4dGVybmFsIFVBUlQgaW50ZXJydXB0IGxpbmUKKwkgKi8KKwlteGNfaW9tdXhfbW9kZShJT01VWF9NT0RFKE1YMzFfUElOX0dQSU8xXzEsIElPTVVYX0NPTkZJR19HUElPKSk7CisJZ3Bpb19yZXF1ZXN0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fR1BJTzFfMSksICJleHQtdWFydC1pbnQiKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8xXzEpKTsKKworCS8qCisJICogVW5tYXNrIFVBUlQgaW50ZXJydXB0CisJICovCisJdG1wID0gX19yYXdfcmVhZGIoS1pNX0FSTTExX0lPX0FERFJFU1MoS1pNX0FSTTExX0NUTDEpKTsKKwl0bXAgfD0gMHgyOworCV9fcmF3X3dyaXRlYih0bXAsIEtaTV9BUk0xMV9JT19BRERSRVNTKEtaTV9BUk0xMV9DVEwxKSk7CisKKwlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZXJpYWxfZGV2aWNlKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBrem1faW5pdF9leHRfdWFydCh2b2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qCisgKiBTTVNDIExBTjkxMTgKKyAqLworI2lmIGRlZmluZWQoQ09ORklHX1NNU0M5MTFYKSB8fCBkZWZpbmVkKENPTkZJR19TTVNDOTExWF9NT0RVTEUpCitzdGF0aWMgc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyBrem1fc21zYzkxMThfY29uZmlnID0geworCS5waHlfaW50ZXJmYWNlCT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwKKwkuaXJxX3BvbGFyaXR5CT0gU01TQzkxMVhfSVJRX1BPTEFSSVRZX0FDVElWRV9ISUdILAorCS5pcnFfdHlwZQk9IFNNU0M5MTFYX0lSUV9UWVBFX1BVU0hfUFVMTCwKKwkuZmxhZ3MJCT0gU01TQzkxMVhfVVNFXzMyQklUIHwgU01TQzkxMVhfU0FWRV9NQUNfQUREUkVTUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Uga3ptX3Ntc2M5MTE4X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gTVgzMV9DUzVfQkFTRV9BRERSLAorCQkuZW5kCT0gTVgzMV9DUzVfQkFTRV9BRERSICsgU1pfMTI4SyAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkuc3RhcnQJPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzFfMiksCisJCS5lbmQJPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzFfMiksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfSElHSEVER0UsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGt6bV9zbXNjOTExOF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtc2M5MTF4IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGt6bV9zbXNjOTExOF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IGt6bV9zbXNjOTExOF9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCQkJLnBsYXRmb3JtX2RhdGEgPSAma3ptX3Ntc2M5MTE4X2NvbmZpZywKKwkJCSAgfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGt6bV9pbml0X3Ntc2M5MTE4KHZvaWQpCit7CisJLyoKKwkgKiBHUElPIDEtMjogU01TQzkxMTggaW50ZXJydXB0IGxpbmUKKwkgKi8KKwlteGNfaW9tdXhfbW9kZShJT01VWF9NT0RFKE1YMzFfUElOX0dQSU8xXzIsIElPTVVYX0NPTkZJR19HUElPKSk7CisJZ3Bpb19yZXF1ZXN0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fR1BJTzFfMiksICJzbXNjOTExOC1pbnQiKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8xXzIpKTsKKworCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmt6bV9zbXNjOTExOF9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IGt6bV9pbml0X3Ntc2M5MTE4KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9JTVgpIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9JTVhfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKKwkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGt6bV9pbml0X2lteF91YXJ0KHZvaWQpCit7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgJnVhcnRfcGRhdGEpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBrem1faW5pdF9pbXhfdWFydCh2b2lkKQoreworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQga3ptX3BpbnNbXSBfX2luaXRkYXRhID0geworCU1YMzFfUElOX0NUUzFfX0NUUzEsCisJTVgzMV9QSU5fUlRTMV9fUlRTMSwKKwlNWDMxX1BJTl9UWEQxX19UWEQxLAorCU1YMzFfUElOX1JYRDFfX1JYRDEsCisJTVgzMV9QSU5fRENEX0RDRTFfX0RDRF9EQ0UxLAorCU1YMzFfUElOX1JJX0RDRTFfX1JJX0RDRTEsCisJTVgzMV9QSU5fRFNSX0RDRTFfX0RTUl9EQ0UxLAorCU1YMzFfUElOX0RUUl9EQ0UxX19EVFJfRENFMSwKKwlNWDMxX1BJTl9DVFMyX19DVFMyLAorCU1YMzFfUElOX1JUUzJfX1JUUzIsCisJTVgzMV9QSU5fVFhEMl9fVFhEMiwKKwlNWDMxX1BJTl9SWEQyX19SWEQyLAorCU1YMzFfUElOX0RDRF9EVEUxX19EQ0RfRFRFMiwKKwlNWDMxX1BJTl9SSV9EVEUxX19SSV9EVEUyLAorCU1YMzFfUElOX0RTUl9EVEUxX19EU1JfRFRFMiwKKwlNWDMxX1BJTl9EVFJfRFRFMV9fRFRSX0RURTIsCit9OworCisvKgorICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBrem1fYm9hcmRfaW5pdCh2b2lkKQoreworCW14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKGt6bV9waW5zLAorCQkJCSAgICAgIEFSUkFZX1NJWkUoa3ptX3BpbnMpLCAia3ptIik7CisJa3ptX2luaXRfZXh0X3VhcnQoKTsKKwlrem1faW5pdF9zbXNjOTExOCgpOworCWt6bV9pbml0X2lteF91YXJ0KCk7CisKKwlwcl9pbmZvKCJDbG9jayBpbnB1dCBzb3VyY2UgaXMgMjZNSHpcbiIpOworfQorCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBzdGF0aWMgbWFwcGluZ3MgZm9yIHRoZSBrem0tYXJtMTEtMDEgYm9hcmQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2Mga3ptX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSBNWDMxX0NTNF9CQVNFX0FERFJfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE1YMzFfQ1M0X0JBU0VfQUREUiksCisJCS5sZW5ndGgJCT0gTVgzMV9DUzRfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFCisJfSwKKwl7CisJCS52aXJ0dWFsCT0gTVgzMV9DUzVfQkFTRV9BRERSX1ZJUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihNWDMxX0NTNV9CQVNFX0FERFIpLAorCQkubGVuZ3RoCQk9IE1YMzFfQ1M1X1NJWkUsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCit9OworCisvKgorICogU2V0IHVwIHN0YXRpYyB2aXJ0dWFsIG1hcHBpbmdzLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQga3ptX21hcF9pbyh2b2lkKQoreworCW14MzFfbWFwX2lvKCk7CisJaW90YWJsZV9pbml0KGt6bV9pb19kZXNjLCBBUlJBWV9TSVpFKGt6bV9pb19kZXNjKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBrem1fdGltZXJfaW5pdCh2b2lkKQoreworCW14MzFfY2xvY2tzX2luaXQoMjYwMDAwMDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBrem1fdGltZXIgPSB7CisJLmluaXQgICA9IGt6bV90aW1lcl9pbml0LAorfTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgdXNlcyBzdGFuZGFyZCBrZXJuZWwgbWFjcm9zIGRlZmluZSBpbiBhcmNoLmggaW4gb3JkZXIgdG8KKyAqIGluaXRpYWxpemUgX19tYWNoX2Rlc2NfS1pNX0FSTTExXzAxIGRhdGEgc3RydWN0dXJlLgorICovCitNQUNISU5FX1NUQVJUKEtaTV9BUk0xMV8wMSwgIkt5b3RvIE1pY3JvY29tcHV0ZXIgQ28uLCBMdGQuIEtaTS1BUk0xMS0wMSIpCisJLnBoeXNfaW8gICAgICAgID0gTVgzMV9BSVBTMV9CQVNFX0FERFIsCisJLmlvX3BnX29mZnN0ICAgID0gKE1YMzFfQUlQUzFfQkFTRV9BRERSX1ZJUlQgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyAgICA9IE1YM3hfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBrem1fbWFwX2lvLAorCS5pbml0X2lycSAgICAgICA9IG14MzFfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZSAgID0ga3ptX2JvYXJkX2luaXQsCisJLnRpbWVyICAgICAgICAgID0gJmt6bV90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFfM2RzLmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFfM2RzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4YzE4YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMV8zZHMuYwpAQCAtMCwwICsxLDI2NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgzMXBkay5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgorI2luY2x1ZGUgImRldmljZXMuaCIKKworLyohCisgKiBAZmlsZSBteDMxcGRrLmMKKyAqCisgKiBAYnJpZWYgVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBib2FyZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4KKyAqCisgKiBAaW5ncm91cCBTeXN0ZW0KKyAqLworCitzdGF0aWMgaW50IG14MzFwZGtfcGluc1tdID0geworCS8qIFVBUlQxICovCisJTVgzMV9QSU5fQ1RTMV9fQ1RTMSwKKwlNWDMxX1BJTl9SVFMxX19SVFMxLAorCU1YMzFfUElOX1RYRDFfX1RYRDEsCisJTVgzMV9QSU5fUlhEMV9fUlhEMSwKKwlJT01VWF9NT0RFKE1YMzFfUElOX0dQSU8xXzEsIElPTVVYX0NPTkZJR19HUElPKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgPSB7CisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKKy8qCisgKiBTdXBwb3J0IGZvciB0aGUgU01TQzkyMTcgb24gdGhlIERlYnVnIGJvYXJkLgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIHNtc2M5MTF4X2NvbmZpZyA9IHsKKwkuaXJxX3BvbGFyaXR5CT0gU01TQzkxMVhfSVJRX1BPTEFSSVRZX0FDVElWRV9MT1csCisJLmlycV90eXBlCT0gU01TQzkxMVhfSVJRX1RZUEVfUFVTSF9QVUxMLAorCS5mbGFncwkJPSBTTVNDOTExWF9VU0VfMTZCSVQgfCBTTVNDOTExWF9GT1JDRV9JTlRFUk5BTF9QSFksCisJLnBoeV9pbnRlcmZhY2UJPSBQSFlfSU5URVJGQUNFX01PREVfTUlJLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbXNjOTExeF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAkJPSBMQU45MjE3X0JBU0VfQUREUiwKKwkJLmVuZAkJPSBMQU45MjE3X0JBU0VfQUREUiArIDB4ZmYsCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydAkJPSBFWFBJT19JTlRfRU5FVCwKKwkJLmVuZAkJPSBFWFBJT19JTlRfRU5FVCwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbXNjOTExeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtc2M5MTF4IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtc2M5MTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc21zYzkxMXhfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzbXNjOTExeF9jb25maWcsCisJfSwKK307CisKKy8qCisgKiBSb3V0aW5lcyBmb3IgdGhlIENQTEQgb24gdGhlIGRlYnVnIGJvYXJkLiBJdCBjb250YWlucyBhIENQTEQgaGFuZGxpbmcKKyAqIExFRHMsIHN3aXRjaGVzLCBpbnRlcnJ1cHRzIGZvciBFdGhlcm5ldC4KKyAqLworCitzdGF0aWMgdm9pZCBteDMxcGRrX2V4cGlvX2lycV9oYW5kbGVyKHVpbnQzMl90IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXVpbnQzMl90IGltcl92YWw7CisJdWludDMyX3QgaW50X3ZhbGlkOworCXVpbnQzMl90IGV4cGlvX2lycTsKKworCWltcl92YWwgPSBfX3Jhd19yZWFkdyhDUExEX0lOVF9NQVNLX1JFRyk7CisJaW50X3ZhbGlkID0gX19yYXdfcmVhZHcoQ1BMRF9JTlRfU1RBVFVTX1JFRykgJiB+aW1yX3ZhbDsKKworCWV4cGlvX2lycSA9IE1YQ19FWFBfSU9fQkFTRTsKKwlmb3IgKDsgaW50X3ZhbGlkICE9IDA7IGludF92YWxpZCA+Pj0gMSwgZXhwaW9faXJxKyspIHsKKwkJaWYgKChpbnRfdmFsaWQgJiAxKSA9PSAwKQorCQkJY29udGludWU7CisJCWdlbmVyaWNfaGFuZGxlX2lycShleHBpb19pcnEpOworCX0KK30KKworLyoKKyAqIERpc2FibGUgYW4gZXhwaW8gcGluJ3MgaW50ZXJydXB0IGJ5IHNldHRpbmcgdGhlIGJpdCBpbiB0aGUgaW1yLgorICogQHBhcmFtIGlycSAgICAgICAgICAgYW4gZXhwaW8gdmlydHVhbCBpcnEgbnVtYmVyCisgKi8KK3N0YXRpYyB2b2lkIGV4cGlvX21hc2tfaXJxKHVpbnQzMl90IGlycSkKK3sKKwl1aW50MTZfdCByZWc7CisJdWludDMyX3QgZXhwaW8gPSBNWENfSVJRX1RPX0VYUElPKGlycSk7CisKKwkvKiBtYXNrIHRoZSBpbnRlcnJ1cHQgKi8KKwlyZWcgPSBfX3Jhd19yZWFkdyhDUExEX0lOVF9NQVNLX1JFRyk7CisJcmVnIHw9IDEgPDwgZXhwaW87CisJX19yYXdfd3JpdGV3KHJlZywgQ1BMRF9JTlRfTUFTS19SRUcpOworfQorCisvKgorICogQWNrbm93bGVkZ2UgYW4gZXhwYW5kZWQgaW8gcGluJ3MgaW50ZXJydXB0IGJ5IGNsZWFyaW5nIHRoZSBiaXQgaW4gdGhlIGlzci4KKyAqIEBwYXJhbSBpcnEgICAgICAgICAgIGFuIGV4cGFuZGVkIGlvIHZpcnR1YWwgaXJxIG51bWJlcgorICovCitzdGF0aWMgdm9pZCBleHBpb19hY2tfaXJxKHVpbnQzMl90IGlycSkKK3sKKwl1aW50MzJfdCBleHBpbyA9IE1YQ19JUlFfVE9fRVhQSU8oaXJxKTsKKworCS8qIGNsZWFyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzICovCisJX19yYXdfd3JpdGV3KDEgPDwgZXhwaW8sIENQTERfSU5UX1JFU0VUX1JFRyk7CisJX19yYXdfd3JpdGV3KDAsIENQTERfSU5UX1JFU0VUX1JFRyk7CisJLyogbWFzayB0aGUgaW50ZXJydXB0ICovCisJZXhwaW9fbWFza19pcnEoaXJxKTsKK30KKworLyoKKyAqIEVuYWJsZSBhIGV4cGlvIHBpbidzIGludGVycnVwdCBieSBjbGVhcmluZyB0aGUgYml0IGluIHRoZSBpbXIuCisgKiBAcGFyYW0gaXJxICAgICAgICAgICBhIGV4cGlvIHZpcnR1YWwgaXJxIG51bWJlcgorICovCitzdGF0aWMgdm9pZCBleHBpb191bm1hc2tfaXJxKHVpbnQzMl90IGlycSkKK3sKKwl1aW50MTZfdCByZWc7CisJdWludDMyX3QgZXhwaW8gPSBNWENfSVJRX1RPX0VYUElPKGlycSk7CisKKwkvKiB1bm1hc2sgdGhlIGludGVycnVwdCAqLworCXJlZyA9IF9fcmF3X3JlYWR3KENQTERfSU5UX01BU0tfUkVHKTsKKwlyZWcgJj0gfigxIDw8IGV4cGlvKTsKKwlfX3Jhd193cml0ZXcocmVnLCBDUExEX0lOVF9NQVNLX1JFRyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZXhwaW9faXJxX2NoaXAgPSB7CisJLmFjayA9IGV4cGlvX2Fja19pcnEsCisJLm1hc2sgPSBleHBpb19tYXNrX2lycSwKKwkudW5tYXNrID0gZXhwaW9fdW5tYXNrX2lycSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG14MzFwZGtfaW5pdF9leHBpbyh2b2lkKQoreworCWludCBpOworCWludCByZXQ7CisKKwkvKiBDaGVjayBpZiB0aGVyZSdzIGEgZGVidWcgYm9hcmQgY29ubmVjdGVkICovCisJaWYgKChfX3Jhd19yZWFkdyhDUExEX01BR0lDX05VTUJFUjFfUkVHKSAhPSAweEFBQUEpIHx8CisJICAgIChfX3Jhd19yZWFkdyhDUExEX01BR0lDX05VTUJFUjJfUkVHKSAhPSAweDU1NTUpIHx8CisJICAgIChfX3Jhd19yZWFkdyhDUExEX01BR0lDX05VTUJFUjNfUkVHKSAhPSAweENBRkUpKSB7CisJCS8qIE5vIERlYnVnIGJvYXJkIGZvdW5kICovCisJCXJldHVybiAtRU5PREVWOworCX0KKworCXByX2luZm8oImkuTVgzMVBESyBEZWJ1ZyBib2FyZCBkZXRlY3RlZCwgcmV2ID0gMHglMDRYXG4iLAorCQlfX3Jhd19yZWFkdyhDUExEX0NPREVfVkVSX1JFRykpOworCisJLyoKKwkgKiBDb25maWd1cmUgSU5UIGxpbmUgYXMgR1BJTyBpbnB1dAorCSAqLworCXJldCA9IGdwaW9fcmVxdWVzdChJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8xXzEpLCAic21zOTIxNy1pcnEiKTsKKwlpZiAocmV0KQorCQlwcl93YXJuaW5nKCJjb3VsZCBub3QgZ2V0IExBTiBpcnEgZ3Bpb1xuIik7CisJZWxzZQorCQlncGlvX2RpcmVjdGlvbl9pbnB1dChJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8xXzEpKTsKKworCS8qIERpc2FibGUgdGhlIGludGVycnVwdHMgYW5kIGNsZWFyIHRoZSBzdGF0dXMgKi8KKwlfX3Jhd193cml0ZXcoMCwgQ1BMRF9JTlRfTUFTS19SRUcpOworCV9fcmF3X3dyaXRldygweEZGRkYsIENQTERfSU5UX1JFU0VUX1JFRyk7CisJX19yYXdfd3JpdGV3KDAsIENQTERfSU5UX1JFU0VUX1JFRyk7CisJX19yYXdfd3JpdGV3KDB4MUYsIENQTERfSU5UX01BU0tfUkVHKTsKKwlmb3IgKGkgPSBNWENfRVhQX0lPX0JBU0U7CisJICAgICBpIDwgKE1YQ19FWFBfSU9fQkFTRSArIE1YQ19NQVhfRVhQX0lPX0xJTkVTKTsKKwkgICAgIGkrKykgeworCQlzZXRfaXJxX2NoaXAoaSwgJmV4cGlvX2lycV9jaGlwKTsKKwkJc2V0X2lycV9oYW5kbGVyKGksIGhhbmRsZV9sZXZlbF9pcnEpOworCQlzZXRfaXJxX2ZsYWdzKGksIElSUUZfVkFMSUQpOworCX0KKwlzZXRfaXJxX3R5cGUoRVhQSU9fUEFSRU5UX0lOVCwgSVJRX1RZUEVfTEVWRUxfTE9XKTsKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihFWFBJT19QQVJFTlRfSU5ULCBteDMxcGRrX2V4cGlvX2lycV9oYW5kbGVyKTsKKworCXJldHVybiAwOworfQorCisvKgorICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgTVgzMSBtZW1vcnkgbWFwLgorICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG14MzFwZGtfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbCA9IE1YMzFfQ1M1X0JBU0VfQUREUl9WSVJULAorCQkucGZuID0gX19waHlzX3RvX3BmbihNWDMxX0NTNV9CQVNFX0FERFIpLAorCQkubGVuZ3RoID0gTVgzMV9DUzVfU0laRSwKKwkJLnR5cGUgPSBNVF9ERVZJQ0UsCisJfSwKK307CisKKy8qCisgKiBTZXQgdXAgc3RhdGljIHZpcnR1YWwgbWFwcGluZ3MuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBteDMxcGRrX21hcF9pbyh2b2lkKQoreworCW14MzFfbWFwX2lvKCk7CisJaW90YWJsZV9pbml0KG14MzFwZGtfaW9fZGVzYywgQVJSQVlfU0laRShteDMxcGRrX2lvX2Rlc2MpKTsKK30KKworLyohCisgKiBCb2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IG14Y19ib2FyZF9pbml0KHZvaWQpCit7CisJbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnMobXgzMXBka19waW5zLCBBUlJBWV9TSVpFKG14MzFwZGtfcGlucyksCisJCQkJICAgICAgIm14MzFwZGsiKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKKworCWlmICghbXgzMXBka19pbml0X2V4cGlvKCkpCisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc21zYzkxMXhfZGV2aWNlKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG14MzFwZGtfdGltZXJfaW5pdCh2b2lkKQoreworCW14MzFfY2xvY2tzX2luaXQoMjYwMDAwMDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBteDMxcGRrX3RpbWVyID0geworCS5pbml0CT0gbXgzMXBka190aW1lcl9pbml0LAorfTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgdXNlcyBzdGFuZGFyZCBrZXJuZWwgbWFjcm9zIGRlZmluZWQgaW4gYXJjaC5oIGluIG9yZGVyIHRvCisgKiBpbml0aWFsaXplIF9fbWFjaF9kZXNjX01YMzFQREsgZGF0YSBzdHJ1Y3R1cmUuCisgKi8KK01BQ0hJTkVfU1RBUlQoTVgzMV8zRFMsICJGcmVlc2NhbGUgTVgzMVBESyAoM0RTKSIpCisJLyogTWFpbnRhaW5lcjogRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gKi8KKwkucGh5c19pbwk9IE1YMzFfQUlQUzFfQkFTRV9BRERSLAorCS5pb19wZ19vZmZzdAk9IChNWDMxX0FJUFMxX0JBU0VfQUREUl9WSVJUID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMgICAgPSBNWDN4X1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyAgICAgICAgID0gbXgzMXBka19tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gbXgzMV9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lICAgPSBteGNfYm9hcmRfaW5pdCwKKwkudGltZXIgICAgICAgICAgPSAmbXgzMXBka190aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFhZHMuYyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMWFkcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzZDFhMTgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFhZHMuYwpAQCAtMCwwICsxLDU1OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQorICogIENvcHlyaWdodCAyMDA1LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLW14MzFhZHMuaD4KKyNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KKworI2lmZGVmIENPTkZJR19NQUNIX01YMzFBRFNfV00xMTMzX0VWMQorI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvYXVkaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL3BtaWMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisvKiEKKyAqIEBmaWxlIG14MzFhZHMuYworICoKKyAqIEBicmllZiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGJvYXJkLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgorICoKKyAqIEBpbmdyb3VwIFN5c3RlbQorICovCisKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMXzgyNTBfTU9EVUxFKQorLyohCisgKiBUaGUgc2VyaWFsIHBvcnQgZGVmaW5pdGlvbiBzdHJ1Y3R1cmUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tZW1iYXNlICA9ICh2b2lkICopKFBCQ19CQVNFX0FERFJFU1MgKyBQQkNfU0MxNkM2NTJfVUFSVEEpLAorCQkubWFwYmFzZSAgPSAodW5zaWduZWQgbG9uZykoTVgzMV9DUzRfQkFTRV9BRERSICsgUEJDX1NDMTZDNjUyX1VBUlRBKSwKKwkJLmlycSAgICAgID0gRVhQSU9fSU5UX1hVQVJUX0lOVEEsCisJCS51YXJ0Y2xrICA9IDE0NzQ1NjAwLAorCQkucmVnc2hpZnQgPSAwLAorCQkuaW90eXBlICAgPSBVUElPX01FTSwKKwkJLmZsYWdzICAgID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwgVVBGX0FVVE9fSVJRLAorCX0sIHsKKwkJLm1lbWJhc2UgID0gKHZvaWQgKikoUEJDX0JBU0VfQUREUkVTUyArIFBCQ19TQzE2QzY1Ml9VQVJUQiksCisJCS5tYXBiYXNlICA9ICh1bnNpZ25lZCBsb25nKShNWDMxX0NTNF9CQVNFX0FERFIgKyBQQkNfU0MxNkM2NTJfVUFSVEIpLAorCQkuaXJxICAgICAgPSBFWFBJT19JTlRfWFVBUlRfSU5UQiwKKwkJLnVhcnRjbGsgID0gMTQ3NDU2MDAsCisJCS5yZWdzaGlmdCA9IDAsCisJCS5pb3R5cGUgICA9IFVQSU9fTUVNLAorCQkuZmxhZ3MgICAgPSBVUEZfQk9PVF9BVVRPQ09ORiB8IFVQRl9TS0lQX1RFU1QgfCBVUEZfQVVUT19JUlEsCisJfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNlcmlhbF9kZXZpY2UgPSB7CisJLm5hbWUJPSAic2VyaWFsODI1MCIsCisJLmlkCT0gMCwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSA9IHNlcmlhbF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBteGNfaW5pdF9leHR1YXJ0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc2VyaWFsX2RldmljZSk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgbXhjX2luaXRfZXh0dWFydCh2b2lkKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfSU1YKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfSU1YX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgPSB7CisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdWFydF9waW5zW10gPSB7CisJTVgzMV9QSU5fQ1RTMV9fQ1RTMSwKKwlNWDMxX1BJTl9SVFMxX19SVFMxLAorCU1YMzFfUElOX1RYRDFfX1RYRDEsCisJTVgzMV9QSU5fUlhEMV9fUlhEMQorfTsKKworc3RhdGljIGlubGluZSB2b2lkIG14Y19pbml0X2lteF91YXJ0KHZvaWQpCit7CisJbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnModWFydF9waW5zLCBBUlJBWV9TSVpFKHVhcnRfcGlucyksICJ1YXJ0LTAiKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7Cit9CisjZWxzZSAvKiAhU0VSSUFMX0lNWCAqLworc3RhdGljIGlubGluZSB2b2lkIG14Y19pbml0X2lteF91YXJ0KHZvaWQpCit7Cit9CisjZW5kaWYgLyogIVNFUklBTF9JTVggKi8KKworc3RhdGljIHZvaWQgbXgzMWFkc19leHBpb19pcnFfaGFuZGxlcih1MzIgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJdTMyIGltcl92YWw7CisJdTMyIGludF92YWxpZDsKKwl1MzIgZXhwaW9faXJxOworCisJaW1yX3ZhbCA9IF9fcmF3X3JlYWR3KFBCQ19JTlRNQVNLX1NFVF9SRUcpOworCWludF92YWxpZCA9IF9fcmF3X3JlYWR3KFBCQ19JTlRTVEFUVVNfUkVHKSAmIGltcl92YWw7CisKKwlleHBpb19pcnEgPSBNWENfRVhQX0lPX0JBU0U7CisJZm9yICg7IGludF92YWxpZCAhPSAwOyBpbnRfdmFsaWQgPj49IDEsIGV4cGlvX2lycSsrKSB7CisJCWlmICgoaW50X3ZhbGlkICYgMSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCisJCWdlbmVyaWNfaGFuZGxlX2lycShleHBpb19pcnEpOworCX0KK30KKworLyoKKyAqIERpc2FibGUgYW4gZXhwaW8gcGluJ3MgaW50ZXJydXB0IGJ5IHNldHRpbmcgdGhlIGJpdCBpbiB0aGUgaW1yLgorICogQHBhcmFtIGlycSAgICAgICAgICAgYW4gZXhwaW8gdmlydHVhbCBpcnEgbnVtYmVyCisgKi8KK3N0YXRpYyB2b2lkIGV4cGlvX21hc2tfaXJxKHUzMiBpcnEpCit7CisJdTMyIGV4cGlvID0gTVhDX0lSUV9UT19FWFBJTyhpcnEpOworCS8qIG1hc2sgdGhlIGludGVycnVwdCAqLworCV9fcmF3X3dyaXRldygxIDw8IGV4cGlvLCBQQkNfSU5UTUFTS19DTEVBUl9SRUcpOworCV9fcmF3X3JlYWR3KFBCQ19JTlRNQVNLX0NMRUFSX1JFRyk7Cit9CisKKy8qCisgKiBBY2tub3dsZWRnZSBhbiBleHBhbmRlZCBpbyBwaW4ncyBpbnRlcnJ1cHQgYnkgY2xlYXJpbmcgdGhlIGJpdCBpbiB0aGUgaXNyLgorICogQHBhcmFtIGlycSAgICAgICAgICAgYW4gZXhwYW5kZWQgaW8gdmlydHVhbCBpcnEgbnVtYmVyCisgKi8KK3N0YXRpYyB2b2lkIGV4cGlvX2Fja19pcnEodTMyIGlycSkKK3sKKwl1MzIgZXhwaW8gPSBNWENfSVJRX1RPX0VYUElPKGlycSk7CisJLyogY2xlYXIgdGhlIGludGVycnVwdCBzdGF0dXMgKi8KKwlfX3Jhd193cml0ZXcoMSA8PCBleHBpbywgUEJDX0lOVFNUQVRVU19SRUcpOworfQorCisvKgorICogRW5hYmxlIGEgZXhwaW8gcGluJ3MgaW50ZXJydXB0IGJ5IGNsZWFyaW5nIHRoZSBiaXQgaW4gdGhlIGltci4KKyAqIEBwYXJhbSBpcnEgICAgICAgICAgIGEgZXhwaW8gdmlydHVhbCBpcnEgbnVtYmVyCisgKi8KK3N0YXRpYyB2b2lkIGV4cGlvX3VubWFza19pcnEodTMyIGlycSkKK3sKKwl1MzIgZXhwaW8gPSBNWENfSVJRX1RPX0VYUElPKGlycSk7CisJLyogdW5tYXNrIHRoZSBpbnRlcnJ1cHQgKi8KKwlfX3Jhd193cml0ZXcoMSA8PCBleHBpbywgUEJDX0lOVE1BU0tfU0VUX1JFRyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgZXhwaW9faXJxX2NoaXAgPSB7CisJLm5hbWUgPSAiRVhQSU8oQ1BMRCkiLAorCS5hY2sgPSBleHBpb19hY2tfaXJxLAorCS5tYXNrID0gZXhwaW9fbWFza19pcnEsCisJLnVubWFzayA9IGV4cGlvX3VubWFza19pcnEsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbXgzMWFkc19pbml0X2V4cGlvKHZvaWQpCit7CisJaW50IGk7CisKKwlwcmludGsoS0VSTl9JTkZPICJNWDMxQURTIEVYUElPKENQTEQpIGhhcmR3YXJlXG4iKTsKKworCS8qCisJICogQ29uZmlndXJlIElOVCBsaW5lIGFzIEdQSU8gaW5wdXQKKwkgKi8KKwlteGNfaW9tdXhfYWxsb2NfcGluKElPTVVYX01PREUoTVgzMV9QSU5fR1BJTzFfNCwgSU9NVVhfQ09ORklHX0dQSU8pLCAiZXhwaW8iKTsKKworCS8qIGRpc2FibGUgdGhlIGludGVycnVwdCBhbmQgY2xlYXIgdGhlIHN0YXR1cyAqLworCV9fcmF3X3dyaXRldygweEZGRkYsIFBCQ19JTlRNQVNLX0NMRUFSX1JFRyk7CisJX19yYXdfd3JpdGV3KDB4RkZGRiwgUEJDX0lOVFNUQVRVU19SRUcpOworCWZvciAoaSA9IE1YQ19FWFBfSU9fQkFTRTsgaSA8IChNWENfRVhQX0lPX0JBU0UgKyBNWENfTUFYX0VYUF9JT19MSU5FUyk7CisJICAgICBpKyspIHsKKwkJc2V0X2lycV9jaGlwKGksICZleHBpb19pcnFfY2hpcCk7CisJCXNldF9pcnFfaGFuZGxlcihpLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEKTsKKwl9CisJc2V0X2lycV90eXBlKEVYUElPX1BBUkVOVF9JTlQsIElSUV9UWVBFX0xFVkVMX0hJR0gpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKEVYUElPX1BBUkVOVF9JTlQsIG14MzFhZHNfZXhwaW9faXJxX2hhbmRsZXIpOworfQorCisjaWZkZWYgQ09ORklHX01BQ0hfTVgzMUFEU19XTTExMzNfRVYxCisvKiBUaGlzIHNlY3Rpb24gZGVmaW5lcyBzZXR1cCBmb3IgdGhlIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcworICogMTEzMy1FVjEgUE1VL2F1ZGlvIGJvYXJkLiAgV2hlbiBvdGhlciBQTVUgYm9hcmRzIGFyZSBzdXBwb3J0ZWQgdGhlCisgKiByZWd1bGF0b3IgZGVmaW5pdGlvbnMgbWF5IGJlIHNoYXJlZCB3aXRoIHRoZW0sIGJ1dCBmb3Igbm93IHRoZXkgY2FuCisgKiBvbmx5IGJlIHVzZWQgd2l0aCB0aGlzIGJvYXJkIHNvIHdvdWxkIGdlbmVyYXRlIHdhcm5pbmdzIGFib3V0CisgKiB1bnVzZWQgc3RhdGljcyBhbmQgc29tZSBvZiB0aGUgY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpYyB0byB0aGlzCisgKiBtb2R1bGUuCisgKi8KKworLyogQ1BVICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc3cxYV9jb25zdW1lcnNbXSA9IHsKKwl7CisJCS5zdXBwbHkgPSAiY3B1X3ZjYyIsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHN3MWFfZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlNXMUEiLAorCQkubWluX3VWID0gMTI3NTAwMCwKKwkJLm1heF91ViA9IDE2MDAwMDAsCisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8CisJCQkJICBSRUdVTEFUT1JfQ0hBTkdFX01PREUsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMIHwKKwkJCQkgICAgUkVHVUxBVE9SX01PREVfRkFTVCwKKwkJLnN0YXRlX21lbSA9IHsKKwkJCSAudVYgPSAxNDAwMDAwLAorCQkJIC5tb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkJIC5lbmFibGVkID0gMSwKKwkJIH0sCisJCS5pbml0aWFsX3N0YXRlID0gUE1fU1VTUEVORF9NRU0sCisJCS5hbHdheXNfb24gPSAxLAorCQkuYm9vdF9vbiA9IDEsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShzdzFhX2NvbnN1bWVycyksCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gc3cxYV9jb25zdW1lcnMsCit9OworCisvKiBTeXN0ZW0gSU8gLSBIaWdoICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdmlvaGlfZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlZJT0hPIiwKKwkJLm1pbl91ViA9IDI4MDAwMDAsCisJCS5tYXhfdVYgPSAyODAwMDAwLAorCQkuc3RhdGVfbWVtID0geworCQkJIC51ViA9IDI4MDAwMDAsCisJCQkgLm1vZGUgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkgLmVuYWJsZWQgPSAxLAorCQkgfSwKKwkJLmluaXRpYWxfc3RhdGUgPSBQTV9TVVNQRU5EX01FTSwKKwkJLmFsd2F5c19vbiA9IDEsCisJCS5ib290X29uID0gMSwKKwl9LAorfTsKKworLyogU3lzdGVtIElPIC0gTG93ICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdmlvbG9fZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlZJT0xPIiwKKwkJLm1pbl91ViA9IDE4MDAwMDAsCisJCS5tYXhfdVYgPSAxODAwMDAwLAorCQkuc3RhdGVfbWVtID0geworCQkJIC51ViA9IDE4MDAwMDAsCisJCQkgLm1vZGUgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkgLmVuYWJsZWQgPSAxLAorCQkgfSwKKwkJLmluaXRpYWxfc3RhdGUgPSBQTV9TVVNQRU5EX01FTSwKKwkJLmFsd2F5c19vbiA9IDEsCisJCS5ib290X29uID0gMSwKKwl9LAorfTsKKworLyogRERSIFJBTSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHN3MmFfZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlNXMkEiLAorCQkubWluX3VWID0gMTgwMDAwMCwKKwkJLm1heF91ViA9IDE4MDAwMDAsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkuc3RhdGVfbWVtID0geworCQkJIC51ViA9IDE4MDAwMDAsCisJCQkgLm1vZGUgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkgLmVuYWJsZWQgPSAxLAorCQkgfSwKKwkJLnN0YXRlX2Rpc2sgPSB7CisJCQkgLm1vZGUgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkgLmVuYWJsZWQgPSAwLAorCQkgfSwKKwkJLmFsd2F5c19vbiA9IDEsCisJCS5ib290X29uID0gMSwKKwkJLmluaXRpYWxfc3RhdGUgPSBQTV9TVVNQRU5EX01FTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGxkbzFfZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlZDQU0vVk1NQzEvVk1NQzIiLAorCQkubWluX3VWID0gMjgwMDAwMCwKKwkJLm1heF91ViA9IDI4MDAwMDAsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJLmFwcGx5X3VWID0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGxkbzJfY29uc3VtZXJzW10gPSB7CisJeyAuc3VwcGx5ID0gIkFWREQiLCAuZGV2X25hbWUgPSAiMS0wMDFhIiB9LAorCXsgLnN1cHBseSA9ICJIUFZERCIsIC5kZXZfbmFtZSA9ICIxLTAwMWEiIH0sCit9OworCisvKiBDT0RFQyBhbmQgU0lNICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgbGRvMl9kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiVkVTSU0vVlNJTS9BVkREIiwKKwkJLm1pbl91ViA9IDMzMDAwMDAsCisJCS5tYXhfdVYgPSAzMzAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS5hcHBseV91ViA9IDEsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShsZG8yX2NvbnN1bWVycyksCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gbGRvMl9jb25zdW1lcnMsCit9OworCisvKiBHZW5lcmFsICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgdmRpZ19kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiVkRJRyIsCisJCS5taW5fdVYgPSAxNTAwMDAwLAorCQkubWF4X3VWID0gMTUwMDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCS5hcHBseV91ViA9IDEsCisJCS5hbHdheXNfb24gPSAxLAorCQkuYm9vdF9vbiA9IDEsCisJfSwKK307CisKKy8qIFRyYW5jZWl2ZXJzICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgbGRvNF9kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiVlJGMS9DVkREXzIuNzc1IiwKKwkJLm1pbl91ViA9IDI1MDAwMDAsCisJCS5tYXhfdVYgPSAyNTAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKKwkJLmFwcGx5X3VWID0gMSwKKwkJLmFsd2F5c19vbiA9IDEsCisJCS5ib290X29uID0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCB3bTgzNTBfbGVkX3BsYXRmb3JtX2RhdGEgd204MzUwX2xlZF9kYXRhID0geworCS5uYW1lICAgICAgICAgICAgPSAid204MzUwOndoaXRlIiwKKwkuZGVmYXVsdF90cmlnZ2VyID0gImhlYXJ0YmVhdCIsCisJLm1heF91QSAgICAgICAgICA9IDI3ODk5LAorfTsKKworc3RhdGljIHN0cnVjdCB3bTgzNTBfYXVkaW9fcGxhdGZvcm1fZGF0YSBpbXgzMmFkc193bTgzNTBfc2V0dXAgPSB7CisJLnZtaWRfZGlzY2hhcmdlX21zZWNzID0gMTAwMCwKKwkuZHJhaW5fbXNlY3MgPSAzMCwKKwkuY2FwX2Rpc2NoYXJnZV9tc2VjcyA9IDcwMCwKKwkudm1pZF9jaGFyZ2VfbXNlY3MgPSA3MDAsCisJLnZtaWRfc19jdXJ2ZSA9IFdNODM1MF9TX0NVUlZFX1NMT1csCisJLmRpc19vdXQ0ID0gV004MzUwX0RJU0NIQVJHRV9TTE9XLAorCS5kaXNfb3V0MyA9IFdNODM1MF9ESVNDSEFSR0VfU0xPVywKKwkuZGlzX291dDIgPSBXTTgzNTBfRElTQ0hBUkdFX1NMT1csCisJLmRpc19vdXQxID0gV004MzUwX0RJU0NIQVJHRV9TTE9XLAorCS52cm9pX291dDQgPSBXTTgzNTBfVElFX09GRl81MDBSLAorCS52cm9pX291dDMgPSBXTTgzNTBfVElFX09GRl81MDBSLAorCS52cm9pX291dDIgPSBXTTgzNTBfVElFX09GRl81MDBSLAorCS52cm9pX291dDEgPSBXTTgzNTBfVElFX09GRl81MDBSLAorCS52cm9pX2VuYWJsZSA9IDAsCisJLmNvZGVjX2N1cnJlbnRfb24gPSBXTTgzNTBfQ09ERUNfSVNFTF8xXzAsCisJLmNvZGVjX2N1cnJlbnRfc3RhbmRieSA9IFdNODM1MF9DT0RFQ19JU0VMXzBfNSwKKwkuY29kZWNfY3VycmVudF9jaGFyZ2UgPSBXTTgzNTBfQ09ERUNfSVNFTF8xXzUsCit9OworCitzdGF0aWMgaW50IG14MzFfd204MzUwX2luaXQoc3RydWN0IHdtODM1MCAqd204MzUwKQoreworCXdtODM1MF9ncGlvX2NvbmZpZyh3bTgzNTAsIDAsIFdNODM1MF9HUElPX0RJUl9JTiwKKwkJCSAgIFdNODM1MF9HUElPMF9QV1JfT05fSU4sIFdNODM1MF9HUElPX0FDVElWRV9MT1csCisJCQkgICBXTTgzNTBfR1BJT19QVUxMX1VQLCBXTTgzNTBfR1BJT19JTlZFUlRfT0ZGLAorCQkJICAgV004MzUwX0dQSU9fREVCT1VOQ0VfT04pOworCisJd204MzUwX2dwaW9fY29uZmlnKHdtODM1MCwgMywgV004MzUwX0dQSU9fRElSX0lOLAorCQkJICAgV004MzUwX0dQSU8zX1BXUl9PRkZfSU4sIFdNODM1MF9HUElPX0FDVElWRV9ISUdILAorCQkJICAgV004MzUwX0dQSU9fUFVMTF9ET1dOLCBXTTgzNTBfR1BJT19JTlZFUlRfT0ZGLAorCQkJICAgV004MzUwX0dQSU9fREVCT1VOQ0VfT04pOworCisJd204MzUwX2dwaW9fY29uZmlnKHdtODM1MCwgNCwgV004MzUwX0dQSU9fRElSX0lOLAorCQkJICAgV004MzUwX0dQSU80X01SX0lOLCBXTTgzNTBfR1BJT19BQ1RJVkVfSElHSCwKKwkJCSAgIFdNODM1MF9HUElPX1BVTExfRE9XTiwgV004MzUwX0dQSU9fSU5WRVJUX09GRiwKKwkJCSAgIFdNODM1MF9HUElPX0RFQk9VTkNFX09GRik7CisKKwl3bTgzNTBfZ3Bpb19jb25maWcod204MzUwLCA3LCBXTTgzNTBfR1BJT19ESVJfSU4sCisJCQkgICBXTTgzNTBfR1BJTzdfSElCRVJOQVRFX0lOLCBXTTgzNTBfR1BJT19BQ1RJVkVfSElHSCwKKwkJCSAgIFdNODM1MF9HUElPX1BVTExfRE9XTiwgV004MzUwX0dQSU9fSU5WRVJUX09GRiwKKwkJCSAgIFdNODM1MF9HUElPX0RFQk9VTkNFX09GRik7CisKKwl3bTgzNTBfZ3Bpb19jb25maWcod204MzUwLCA2LCBXTTgzNTBfR1BJT19ESVJfT1VULAorCQkJICAgV004MzUwX0dQSU82X1NET1VUX09VVCwgV004MzUwX0dQSU9fQUNUSVZFX0hJR0gsCisJCQkgICBXTTgzNTBfR1BJT19QVUxMX05PTkUsIFdNODM1MF9HUElPX0lOVkVSVF9PRkYsCisJCQkgICBXTTgzNTBfR1BJT19ERUJPVU5DRV9PRkYpOworCisJd204MzUwX2dwaW9fY29uZmlnKHdtODM1MCwgOCwgV004MzUwX0dQSU9fRElSX09VVCwKKwkJCSAgIFdNODM1MF9HUElPOF9WQ0NfRkFVTFRfT1VULCBXTTgzNTBfR1BJT19BQ1RJVkVfTE9XLAorCQkJICAgV004MzUwX0dQSU9fUFVMTF9OT05FLCBXTTgzNTBfR1BJT19JTlZFUlRfT0ZGLAorCQkJICAgV004MzUwX0dQSU9fREVCT1VOQ0VfT0ZGKTsKKworCXdtODM1MF9ncGlvX2NvbmZpZyh3bTgzNTAsIDksIFdNODM1MF9HUElPX0RJUl9PVVQsCisJCQkgICBXTTgzNTBfR1BJTzlfQkFUVF9GQVVMVF9PVVQsIFdNODM1MF9HUElPX0FDVElWRV9MT1csCisJCQkgICBXTTgzNTBfR1BJT19QVUxMX05PTkUsIFdNODM1MF9HUElPX0lOVkVSVF9PRkYsCisJCQkgICBXTTgzNTBfR1BJT19ERUJPVU5DRV9PRkYpOworCisJd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsIFdNODM1MF9EQ0RDXzEsICZzdzFhX2RhdGEpOworCXdtODM1MF9yZWdpc3Rlcl9yZWd1bGF0b3Iod204MzUwLCBXTTgzNTBfRENEQ18zLCAmdmlvaGlfZGF0YSk7CisJd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsIFdNODM1MF9EQ0RDXzQsICZ2aW9sb19kYXRhKTsKKwl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0RDRENfNiwgJnN3MmFfZGF0YSk7CisJd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsIFdNODM1MF9MRE9fMSwgJmxkbzFfZGF0YSk7CisJd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsIFdNODM1MF9MRE9fMiwgJmxkbzJfZGF0YSk7CisJd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsIFdNODM1MF9MRE9fMywgJnZkaWdfZGF0YSk7CisJd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsIFdNODM1MF9MRE9fNCwgJmxkbzRfZGF0YSk7CisKKwkvKiBMRURzICovCisJd204MzUwX2RjZGNfc2V0X3Nsb3Qod204MzUwLCBXTTgzNTBfRENEQ181LCAxLCAxLAorCQkJICAgICBXTTgzNTBfREM1X0VSUkFDVF9TSFVURE9XTl9DT05WKTsKKwl3bTgzNTBfaXNpbmtfc2V0X2ZsYXNoKHdtODM1MCwgV004MzUwX0lTSU5LX0EsCisJCQkgICAgICAgV004MzUwX0lTSU5LX0ZMQVNIX0RJU0FCTEUsCisJCQkgICAgICAgV004MzUwX0lTSU5LX0ZMQVNIX1RSSUdfQklULAorCQkJICAgICAgIFdNODM1MF9JU0lOS19GTEFTSF9EVVJfMzJNUywKKwkJCSAgICAgICBXTTgzNTBfSVNJTktfRkxBU0hfT05fSU5TVEFOVCwKKwkJCSAgICAgICBXTTgzNTBfSVNJTktfRkxBU0hfT0ZGX0lOU1RBTlQsCisJCQkgICAgICAgV004MzUwX0lTSU5LX0ZMQVNIX01PREVfRU4pOworCXdtODM1MF9kY2RjMjVfc2V0X21vZGUod204MzUwLCBXTTgzNTBfRENEQ181LAorCQkJICAgICAgIFdNODM1MF9JU0lOS19NT0RFX0JPT1NULAorCQkJICAgICAgIFdNODM1MF9JU0lOS19JTElNX05PUk1BTCwKKwkJCSAgICAgICBXTTgzNTBfREM1X1JNUF8yMFYsCisJCQkgICAgICAgV004MzUwX0RDNV9GQlNSQ19JU0lOS0EpOworCXdtODM1MF9yZWdpc3Rlcl9sZWQod204MzUwLCAwLCBXTTgzNTBfRENEQ181LCBXTTgzNTBfSVNJTktfQSwKKwkJCSAgICAmd204MzUwX2xlZF9kYXRhKTsKKworCXdtODM1MC0+Y29kZWMucGxhdGZvcm1fZGF0YSA9ICZpbXgzMmFkc193bTgzNTBfc2V0dXA7CisKKwlyZWd1bGF0b3JfaGFzX2Z1bGxfY29uc3RyYWludHMoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHdtODM1MF9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgbXgzMV93bTgzNTBfcGRhdGEgPSB7CisJLmluaXQgPSBteDMxX3dtODM1MF9pbml0LAorCS5pcnFfYmFzZSA9IE1YQ19CT0FSRF9JUlFfU1RBUlQgKyBNWENfTUFYX0VYUF9JT19MSU5FUywKK307CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0kyQ19JTVgpIHx8IGRlZmluZWQoQ09ORklHX0kyQ19JTVhfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIG14MzFhZHNfaTJjMV9kZXZpY2VzW10gPSB7CisjaWZkZWYgQ09ORklHX01BQ0hfTVgzMUFEU19XTTExMzNfRVYxCisJeworCQlJMkNfQk9BUkRfSU5GTygid204MzUwIiwgMHgxYSksCisJCS5wbGF0Zm9ybV9kYXRhID0gJm14MzFfd204MzUwX3BkYXRhLAorCQkuaXJxID0gSU9NVVhfVE9fSVJRKE1YMzFfUElOX0dQSU8xXzMpLAorCX0sCisjZW5kaWYKK307CisKK3N0YXRpYyB2b2lkIG14Y19pbml0X2kyYyh2b2lkKQoreworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIG14MzFhZHNfaTJjMV9kZXZpY2VzLAorCQkJCUFSUkFZX1NJWkUobXgzMWFkc19pMmMxX2RldmljZXMpKTsKKworCW14Y19pb211eF9tb2RlKElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTJfTU9TSSwgSU9NVVhfQ09ORklHX0FMVDEpKTsKKwlteGNfaW9tdXhfbW9kZShJT01VWF9NT0RFKE1YMzFfUElOX0NTUEkyX01JU08sIElPTVVYX0NPTkZJR19BTFQxKSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTEsIE5VTEwpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIG14Y19pbml0X2kyYyh2b2lkKQoreworfQorI2VuZGlmCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc3NpX3BpbnNbXSA9IHsKKwlNWDMxX1BJTl9TRlM1X19TRlM1LAorCU1YMzFfUElOX1NDSzVfX1NDSzUsCisJTVgzMV9QSU5fU1JYRDVfX1NSWEQ1LAorCU1YMzFfUElOX1NUWEQ1X19TVFhENSwKK307CisKK3N0YXRpYyB2b2lkIG14Y19pbml0X2F1ZGlvKHZvaWQpCit7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmaW14X3NzaV9kZXZpY2UwLCBOVUxMKTsKKwlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhzc2lfcGlucywgQVJSQVlfU0laRShzc2lfcGlucyksICJzc2kiKTsKK30KKworLyohCisgKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHN0YXRpYyBtYXBwaW5ncyBmb3IgdGhlIGkuTVgzMUFEUyBib2FyZC4KKyAqLworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteDMxYWRzX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSBNWDMxX0NTNF9CQVNFX0FERFJfVklSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKE1YMzFfQ1M0X0JBU0VfQUREUiksCisJCS5sZW5ndGgJCT0gTVgzMV9DUzRfU0laRSAvIDIsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCit9OworCisvKiEKKyAqIFNldCB1cCBzdGF0aWMgdmlydHVhbCBtYXBwaW5ncy4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IG14MzFhZHNfbWFwX2lvKHZvaWQpCit7CisJbXgzMV9tYXBfaW8oKTsKKwlpb3RhYmxlX2luaXQobXgzMWFkc19pb19kZXNjLCBBUlJBWV9TSVpFKG14MzFhZHNfaW9fZGVzYykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXgzMWFkc19pbml0X2lycSh2b2lkKQoreworCW14MzFfaW5pdF9pcnEoKTsKKwlteDMxYWRzX2luaXRfZXhwaW8oKTsKK30KKworLyohCisgKiBCb2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IG14Y19ib2FyZF9pbml0KHZvaWQpCit7CisJbXhjX2luaXRfZXh0dWFydCgpOworCW14Y19pbml0X2lteF91YXJ0KCk7CisJbXhjX2luaXRfaTJjKCk7CisJbXhjX2luaXRfYXVkaW8oKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG14MzFhZHNfdGltZXJfaW5pdCh2b2lkKQoreworCW14MzFfY2xvY2tzX2luaXQoMjYwMDAwMDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBteDMxYWRzX3RpbWVyID0geworCS5pbml0CT0gbXgzMWFkc190aW1lcl9pbml0LAorfTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgdXNlcyBzdGFuZGFyZCBrZXJuZWwgbWFjcm9zIGRlZmluZWQgaW4gYXJjaC5oIGluIG9yZGVyIHRvCisgKiBpbml0aWFsaXplIF9fbWFjaF9kZXNjX01YMzFBRFMgZGF0YSBzdHJ1Y3R1cmUuCisgKi8KK01BQ0hJTkVfU1RBUlQoTVgzMUFEUywgIkZyZWVzY2FsZSBNWDMxQURTIikKKwkvKiBNYWludGFpbmVyOiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAqLworCS5waHlzX2lvCT0gTVgzMV9BSVBTMV9CQVNFX0FERFIsCisJLmlvX3BnX29mZnN0CT0gKE1YMzFfQUlQUzFfQkFTRV9BRERSX1ZJUlQgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyAgICA9IE1YM3hfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBteDMxYWRzX21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBteDMxYWRzX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAorCS50aW1lciAgICAgICAgICA9ICZteDMxYWRzX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMWxpbGx5LmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFsaWxseS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwODQ3YjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFsaWxseS5jCkBAIC0wLDAgKzEsMjA2IEBACisvKgorICogIExJTExZLTExMzEgbW9kdWxlIHN1cHBvcnQKKyAqCisgKiAgICBDb3B5cmlnaHQgKGMpIDIwMDkgRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4KKyAqCisgKiAgYmFzZWQgb24gY29kZSBmb3Igb3RoZXIgTVgzMSBib2FyZHMsCisgKgorICogICAgQ29weXJpZ2h0IDIwMDUtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvcgorICogICAgQ29weXJpZ2h0IChjKSAyMDA5IEFsYmVydG8gUGFuaXp6byA8bWFyYW1hb3BlcmNoZXNlaW1vcnRvQGdtYWlsLmNvbT4KKyAqICAgIENvcHlyaWdodCAoQykgMjAwOSBWYWxlbnRpbiBMb25nY2hhbXAsIEVQRkwgTW9ib3RzIGdyb3VwCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9tYzEzNzgzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgzMWxpbGx5Lmg+CisjaW5jbHVkZSA8bWFjaC9zcGkuaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBtb2R1bGUtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgZm9yIExJTExZLTExMzEuCisgKiBJbml0aWFsaXphdGlvbiBvZiBwZXJpcGhlcmFscyBmb3VuZCBvbiB0aGUgYmFzZWJvYXJkIGlzIGltcGxlbWVudGVkIGluIHRoZQorICogYXBwcm9wcmlhdGUgYmFzZWJvYXJkIHN1cHBvcnQgY29kZS4KKyAqLworCisvKiBTTVNDIGV0aGVybmV0IHN1cHBvcnQgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbXNjOTF4X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CT0gTVgzMV9DUzRfQkFTRV9BRERSLAorCQkuZW5kCT0gTVgzMV9DUzRfQkFTRV9BRERSICsgMHhmZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gSU9NVVhfVE9fSVJRKE1YMzFfUElOX0dQSU8xXzApLAorCQkuZW5kCT0gSU9NVVhfVE9fSVJRKE1YMzFfUElOX0dQSU8xXzApLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIHNtc2M5MTF4X2NvbmZpZyA9IHsKKwkucGh5X2ludGVyZmFjZQk9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUksCisJLmlycV9wb2xhcml0eQk9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAorCS5pcnFfdHlwZQk9IFNNU0M5MTFYX0lSUV9UWVBFX09QRU5fRFJBSU4sCisJLmZsYWdzCQk9IFNNU0M5MTFYX1VTRV8zMkJJVCB8CisJCQkgIFNNU0M5MTFYX1NBVkVfTUFDX0FERFJFU1MgfAorCQkJICBTTVNDOTExWF9GT1JDRV9JTlRFUk5BTF9QSFksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbXNjOTF4X2RldmljZSA9IHsKKwkubmFtZQkJPSAic21zYzkxMXgiLAorCS5pZAkJPSAtMSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21zYzkxeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNtc2M5MXhfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzbXNjOTExeF9jb25maWcsCisJfQorfTsKKworLyogTk9SIGZsYXNoICovCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBub3JfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGggID0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugbm9yX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAk9IDB4YTAwMDAwMDAsCisJLmVuZAk9IDB4YTFmZmZmZmYsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwaHlzbWFwX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJPSAwLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhICA9ICZub3JfZmxhc2hfZGF0YSwKKwl9LAorCS5yZXNvdXJjZSA9ICZub3JfZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzbXNjOTF4X2RldmljZSwKKwkmcGh5c21hcF9mbGFzaF9kZXZpY2UsCit9OworCisvKiBTUEkgKi8KKworc3RhdGljIGludCBzcGlfaW50ZXJuYWxfY2hpcHNlbGVjdFtdID0geworCU1YQ19TUElfQ1MoMCksCisJTVhDX1NQSV9DUygxKSwKKwlNWENfU1BJX0NTKDIpLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfaW14X21hc3RlciBzcGkwX3BkYXRhID0geworCS5jaGlwc2VsZWN0ID0gc3BpX2ludGVybmFsX2NoaXBzZWxlY3QsCisJLm51bV9jaGlwc2VsZWN0ID0gQVJSQVlfU0laRShzcGlfaW50ZXJuYWxfY2hpcHNlbGVjdCksCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHNwaTFfcGRhdGEgPSB7CisJLmNoaXBzZWxlY3QgPSBzcGlfaW50ZXJuYWxfY2hpcHNlbGVjdCwKKwkubnVtX2NoaXBzZWxlY3QgPSBBUlJBWV9TSVpFKHNwaV9pbnRlcm5hbF9jaGlwc2VsZWN0KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWMxMzc4M19wbGF0Zm9ybV9kYXRhIG1jMTM3ODNfcGRhdGEgX19pbml0ZGF0YSA9IHsKKwkuZmxhZ3MgPSBNQzEzNzgzX1VTRV9SVEMgfCBNQzEzNzgzX1VTRV9UT1VDSFNDUkVFTiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gbWMxMzc4M19kZXYgX19pbml0ZGF0YSA9IHsKKwkubW9kYWxpYXMJPSAibWMxMzc4MyIsCisJLm1heF9zcGVlZF9oegk9IDEwMDAwMDAsCisJLmJ1c19udW0JPSAxLAorCS5jaGlwX3NlbGVjdAk9IDAsCisJLnBsYXRmb3JtX2RhdGEJPSAmbWMxMzc4M19wZGF0YSwKK307CisKK3N0YXRpYyBpbnQgbXgzMWxpbGx5X2Jhc2Vib2FyZDsKK2NvcmVfcGFyYW0obXgzMWxpbGx5X2Jhc2Vib2FyZCwgbXgzMWxpbGx5X2Jhc2Vib2FyZCwgaW50LCAwNDQ0KTsKKworc3RhdGljIHZvaWQgX19pbml0IG14MzFsaWxseV9ib2FyZF9pbml0KHZvaWQpCit7CisJc3dpdGNoIChteDMxbGlsbHlfYmFzZWJvYXJkKSB7CisJY2FzZSBNWDMxTElMTFlfTk9CT0FSRDoKKwkJYnJlYWs7CisJY2FzZSBNWDMxTElMTFlfREI6CisJCW14MzFsaWxseV9kYl9pbml0KCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiSWxsZWdhbCBteDMxbGlsbHlfYmFzZWJvYXJkIHR5cGUgJWRcbiIsCisJCQlteDMxbGlsbHlfYmFzZWJvYXJkKTsKKwl9CisKKwlteGNfaW9tdXhfYWxsb2NfcGluKE1YMzFfUElOX0NTNF9fQ1M0LCAiRXRoZXJuZXQgQ1MiKTsKKworCS8qIFNQSSAqLworCW14Y19pb211eF9hbGxvY19waW4oTVgzMV9QSU5fQ1NQSTFfU0NMS19fU0NMSywgIlNQSTFfQ0xLIik7CisJbXhjX2lvbXV4X2FsbG9jX3BpbihNWDMxX1BJTl9DU1BJMV9NT1NJX19NT1NJLCAiU1BJMV9UWCIpOworCW14Y19pb211eF9hbGxvY19waW4oTVgzMV9QSU5fQ1NQSTFfTUlTT19fTUlTTywgIlNQSTFfUlgiKTsKKwlteGNfaW9tdXhfYWxsb2NfcGluKE1YMzFfUElOX0NTUEkxX1NQSV9SRFlfX1NQSV9SRFksICJTUEkxX1JEWSIpOworCW14Y19pb211eF9hbGxvY19waW4oTVgzMV9QSU5fQ1NQSTFfU1MwX19TUzAsICJTUEkxX1NTMCIpOworCW14Y19pb211eF9hbGxvY19waW4oTVgzMV9QSU5fQ1NQSTFfU1MxX19TUzEsICJTUEkxX1NTMSIpOworCW14Y19pb211eF9hbGxvY19waW4oTVgzMV9QSU5fQ1NQSTFfU1MyX19TUzIsICJTUEkxX1NTMiIpOworCisJbXhjX2lvbXV4X2FsbG9jX3BpbihNWDMxX1BJTl9DU1BJMl9TQ0xLX19TQ0xLLCAiU1BJMl9DTEsiKTsKKwlteGNfaW9tdXhfYWxsb2NfcGluKE1YMzFfUElOX0NTUEkyX01PU0lfX01PU0ksICJTUEkyX1RYIik7CisJbXhjX2lvbXV4X2FsbG9jX3BpbihNWDMxX1BJTl9DU1BJMl9NSVNPX19NSVNPLCAiU1BJMl9SWCIpOworCW14Y19pb211eF9hbGxvY19waW4oTVgzMV9QSU5fQ1NQSTJfU1BJX1JEWV9fU1BJX1JEWSwgIlNQSTJfUkRZIik7CisJbXhjX2lvbXV4X2FsbG9jX3BpbihNWDMxX1BJTl9DU1BJMl9TUzBfX1NTMCwgIlNQSTJfU1MwIik7CisJbXhjX2lvbXV4X2FsbG9jX3BpbihNWDMxX1BJTl9DU1BJMl9TUzFfX1NTMSwgIlNQSTJfU1MxIik7CisJbXhjX2lvbXV4X2FsbG9jX3BpbihNWDMxX1BJTl9DU1BJMl9TUzJfX1NTMiwgIlNQSTJfU1MyIik7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc3BpX2RldmljZTAsICZzcGkwX3BkYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc3BpX2RldmljZTEsICZzcGkxX3BkYXRhKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbygmbWMxMzc4M19kZXYsIDEpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteDMxbGlsbHlfdGltZXJfaW5pdCh2b2lkKQoreworCW14MzFfY2xvY2tzX2luaXQoMjYwMDAwMDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBteDMxbGlsbHlfdGltZXIgPSB7CisJLmluaXQJPSBteDMxbGlsbHlfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoTElMTFkxMTMxLCAiSU5DTyBzdGFydGVjIExJTExZLTExMzEiKQorCS5waHlzX2lvCT0gTVgzMV9BSVBTMV9CQVNFX0FERFIsCisJLmlvX3BnX29mZnN0CT0gKE1YMzFfQUlQUzFfQkFTRV9BRERSX1ZJUlQgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IE1YM3hfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvCQk9IG14MzFfbWFwX2lvLAorCS5pbml0X2lycQk9IG14MzFfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IG14MzFsaWxseV9ib2FyZF9pbml0LAorCS50aW1lcgkJPSAmbXgzMWxpbGx5X3RpbWVyLAorTUFDSElORV9FTkQKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxbGl0ZS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDMxbGl0ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNmQxMTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFsaXRlLmMKQEAgLTAsMCArMSwyOTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkCisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIFNoYW5lIE5heSAoc2hhbmVAbWluaXJsLmNvbSkKKyAqICBDb3B5cmlnaHQgMjAwNS0yMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IERhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbWMxMzc4My5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3VscGkuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLW14MzFsaXRlLmg+CisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgorI2luY2x1ZGUgPG1hY2gvc3BpLmg+CisjaW5jbHVkZSA8bWFjaC9teGNfZWhjaS5oPgorI2luY2x1ZGUgPG1hY2gvdWxwaS5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBtb2R1bGUtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBteDMxbGl0ZV9waW5zW10gPSB7CisJLyogTEFOOTExNyBJUlEgcGluICovCisJSU9NVVhfTU9ERShNWDMxX1BJTl9TRlM2LCBJT01VWF9DT05GSUdfR1BJTyksCisJLyogU1BJIDEgKi8KKwlNWDMxX1BJTl9DU1BJMl9TQ0xLX19TQ0xLLAorCU1YMzFfUElOX0NTUEkyX01PU0lfX01PU0ksCisJTVgzMV9QSU5fQ1NQSTJfTUlTT19fTUlTTywKKwlNWDMxX1BJTl9DU1BJMl9TUElfUkRZX19TUElfUkRZLAorCU1YMzFfUElOX0NTUEkyX1NTMF9fU1MwLAorCU1YMzFfUElOX0NTUEkyX1NTMV9fU1MxLAorCU1YMzFfUElOX0NTUEkyX1NTMl9fU1MyLAorfTsKKworc3RhdGljIHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhIG14MzFsaXRlX25hbmRfYm9hcmRfaW5mbyA9IHsKKwkud2lkdGggPSAxLAorCS5od19lY2MgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBzbXNjOTExeF9wbGF0Zm9ybV9jb25maWcgc21zYzkxMXhfY29uZmlnID0geworCS5pcnFfcG9sYXJpdHkJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0xPVywKKwkuaXJxX3R5cGUJPSBTTVNDOTExWF9JUlFfVFlQRV9QVVNIX1BVTEwsCisJLmZsYWdzCQk9IFNNU0M5MTFYX1VTRV8xNkJJVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21zYzkxMXhfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJCT0gTVgzMV9DUzRfQkFTRV9BRERSLAorCQkuZW5kCQk9IE1YMzFfQ1M0X0JBU0VfQUREUiArIDB4MTAwLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQJCT0gSU9NVVhfVE9fSVJRKE1YMzFfUElOX1NGUzYpLAorCQkuZW5kCQk9IElPTVVYX1RPX0lSUShNWDMxX1BJTl9TRlM2KSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbXNjOTExeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtc2M5MTF4IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtc2M5MTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc21zYzkxMXhfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzbXNjOTExeF9jb25maWcsCisJfSwKK307CisKKy8qCisgKiBTUEkKKyAqCisgKiBUaGUgTUMxMzc4MyBpcyB0aGUgb25seSBoYXJkLXdpcmVkIFNQSSBkZXZpY2Ugb24gdGhlIG1vZHVsZS4KKyAqLworCitzdGF0aWMgaW50IHNwaV9pbnRlcm5hbF9jaGlwc2VsZWN0W10gPSB7CisJTVhDX1NQSV9DUygwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgc3BpMV9wZGF0YSA9IHsKKwkuY2hpcHNlbGVjdAk9IHNwaV9pbnRlcm5hbF9jaGlwc2VsZWN0LAorCS5udW1fY2hpcHNlbGVjdAk9IEFSUkFZX1NJWkUoc3BpX2ludGVybmFsX2NoaXBzZWxlY3QpLAorfTsKKworc3RhdGljIHN0cnVjdCBtYzEzNzgzX3BsYXRmb3JtX2RhdGEgbWMxMzc4M19wZGF0YSBfX2luaXRkYXRhID0geworCS5mbGFncyAgPSBNQzEzNzgzX1VTRV9SVEMgfAorCQkgIE1DMTM3ODNfVVNFX1JFR1VMQVRPUiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gbWMxMzc4M19zcGlfZGV2IF9faW5pdGRhdGEgPSB7CisJLm1vZGFsaWFzICAgICAgID0gIm1jMTM3ODMiLAorCS5tYXhfc3BlZWRfaHogICA9IDEwMDAwMDAsCisJLmJ1c19udW0JPSAxLAorCS5jaGlwX3NlbGVjdCAgICA9IDAsCisJLnBsYXRmb3JtX2RhdGEgID0gJm1jMTM3ODNfcGRhdGEsCisJLmlycQkJPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzFfMyksCit9OworCisvKgorICogVVNCCisgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9VTFBJKQorI2RlZmluZSBVU0JfUEFEX0NGRyAoUEFEX0NUTF9EUlZfTUFYIHwgUEFEX0NUTF9TUkVfRkFTVCB8IFBBRF9DVExfSFlTX0NNT1MgfCBcCisJCQlQQURfQ1RMX09ERV9DTU9TIHwgUEFEX0NUTF8xMDBLX1BVKQorCitzdGF0aWMgaW50IHVzYmgyX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlpbnQgcGluc1tdID0geworCQlNWDMxX1BJTl9VU0JIMl9EQVRBMF9fVVNCSDJfREFUQTAsCisJCU1YMzFfUElOX1VTQkgyX0RBVEExX19VU0JIMl9EQVRBMSwKKwkJTVgzMV9QSU5fVVNCSDJfQ0xLX19VU0JIMl9DTEssCisJCU1YMzFfUElOX1VTQkgyX0RJUl9fVVNCSDJfRElSLAorCQlNWDMxX1BJTl9VU0JIMl9OWFRfX1VTQkgyX05YVCwKKwkJTVgzMV9QSU5fVVNCSDJfU1RQX19VU0JIMl9TVFAsCisJfTsKKworCW14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKHBpbnMsIEFSUkFZX1NJWkUocGlucyksICJVU0IgSDIiKTsKKworCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQkgyX0NMSywgVVNCX1BBRF9DRkcpOworCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQkgyX0RJUiwgVVNCX1BBRF9DRkcpOworCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQkgyX05YVCwgVVNCX1BBRF9DRkcpOworCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQkgyX1NUUCwgVVNCX1BBRF9DRkcpOworCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQkgyX0RBVEEwLCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCSDJfREFUQTEsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9TUlhENiwgVVNCX1BBRF9DRkcpOworCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1NUWEQ2LCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fU0ZTMywgVVNCX1BBRF9DRkcpOworCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1NDSzMsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9TUlhEMywgVVNCX1BBRF9DRkcpOworCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1NUWEQzLCBVU0JfUEFEX0NGRyk7CisKKwlteGNfaW9tdXhfc2V0X2dwcihNVVhfUEdQX1VIMiwgdHJ1ZSk7CisKKwkvKiBjaGlwIHNlbGVjdCAqLworCW14Y19pb211eF9hbGxvY19waW4oSU9NVVhfTU9ERShNWDMxX1BJTl9EVFJfRENFMSwgSU9NVVhfQ09ORklHX0dQSU8pLAorCQkJCSJVU0JIMl9DUyIpOworCWdwaW9fcmVxdWVzdChJT01VWF9UT19HUElPKE1YMzFfUElOX0RUUl9EQ0UxKSwgIlVTQkgyIENTIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fRFRSX0RDRTEpLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgdXNiaDJfcGRhdGEgPSB7CisJLmluaXQgICA9IHVzYmgyX2luaXQsCisJLnBvcnRzYyA9IE1YQ19FSENJX01PREVfVUxQSSB8IE1YQ19FSENJX1VUTUlfOEJJVCwKKwkuZmxhZ3MgID0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVELAorfTsKKyNlbmRpZgorCisvKgorICogTk9SIGZsYXNoCisgKi8KKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbm9yX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoICA9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5vcl9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgID0gMHhhMDAwMDAwMCwKKwkuZW5kICAgID0gMHhhMWZmZmZmZiwKKwkuZmxhZ3MgID0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwaHlzbWFwX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZSAgID0gInBoeXNtYXAtZmxhc2giLAorCS5pZCAgICAgPSAwLAorCS5kZXYgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhICA9ICZub3JfZmxhc2hfZGF0YSwKKwl9LAorCS5yZXNvdXJjZSA9ICZub3JfZmxhc2hfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMgPSAxLAorfTsKKworCisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBNWDMxIG1lbW9yeSBtYXAuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXgzMWxpdGVfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbCA9IE1YMzFfQ1M0X0JBU0VfQUREUl9WSVJULAorCQkucGZuID0gX19waHlzX3RvX3BmbihNWDMxX0NTNF9CQVNFX0FERFIpLAorCQkubGVuZ3RoID0gTVgzMV9DUzRfU0laRSwKKwkJLnR5cGUgPSBNVF9ERVZJQ0UKKwl9Cit9OworCisvKgorICogU2V0IHVwIHN0YXRpYyB2aXJ0dWFsIG1hcHBpbmdzLgorICovCit2b2lkIF9faW5pdCBteDMxbGl0ZV9tYXBfaW8odm9pZCkKK3sKKwlteDMxX21hcF9pbygpOworCWlvdGFibGVfaW5pdChteDMxbGl0ZV9pb19kZXNjLCBBUlJBWV9TSVpFKG14MzFsaXRlX2lvX2Rlc2MpKTsKK30KKworc3RhdGljIGludCBteDMxbGl0ZV9iYXNlYm9hcmQ7Citjb3JlX3BhcmFtKG14MzFsaXRlX2Jhc2Vib2FyZCwgbXgzMWxpdGVfYmFzZWJvYXJkLCBpbnQsIDA0NDQpOworCitzdGF0aWMgdm9pZCBfX2luaXQgbXhjX2JvYXJkX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJc3dpdGNoIChteDMxbGl0ZV9iYXNlYm9hcmQpIHsKKwljYXNlIE1YMzFMSVRFX05PQk9BUkQ6CisJCWJyZWFrOworCWNhc2UgTVgzMUxJVEVfREI6CisJCW14MzFsaXRlX2RiX2luaXQoKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJJbGxlZ2FsIG14MzFsaXRlX2Jhc2Vib2FyZCB0eXBlICVkXG4iLAorCQkJCW14MzFsaXRlX2Jhc2Vib2FyZCk7CisJfQorCisJbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnMobXgzMWxpdGVfcGlucywgQVJSQVlfU0laRShteDMxbGl0ZV9waW5zKSwKKwkJCQkgICAgICAibXgzMWxpdGUiKTsKKworCS8qIE5PUiBhbmQgTkFORCBmbGFzaCAqLworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGh5c21hcF9mbGFzaF9kZXZpY2UpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19uYW5kX2RldmljZSwgJm14MzFsaXRlX25hbmRfYm9hcmRfaW5mbyk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc3BpX2RldmljZTEsICZzcGkxX3BkYXRhKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbygmbWMxMzc4M19zcGlfZGV2LCAxKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9VTFBJKQorCS8qIFVTQiAqLworCXVzYmgyX3BkYXRhLm90ZyA9IG90Z191bHBpX2NyZWF0ZSgmbXhjX3VscGlfYWNjZXNzX29wcywKKwkJCQlVU0JfT1RHX0RSVl9WQlVTIHwgVVNCX09UR19EUlZfVkJVU19FWFQpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VzYmgyLCAmdXNiaDJfcGRhdGEpOworI2VuZGlmCisKKwkvKiBTTVNDOTExNyBJUlEgcGluICovCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fU0ZTNiksICJzbXM5MTE3LWlycSIpOworCWlmIChyZXQpCisJCXByX3dhcm5pbmcoImNvdWxkIG5vdCBnZXQgTEFOIGlycSBncGlvXG4iKTsKKwllbHNlIHsKKwkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9TRlM2KSk7CisJCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc21zYzkxMXhfZGV2aWNlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteDMxbGl0ZV90aW1lcl9pbml0KHZvaWQpCit7CisJbXgzMV9jbG9ja3NfaW5pdCgyNjAwMDAwMCk7Cit9CisKK3N0cnVjdCBzeXNfdGltZXIgbXgzMWxpdGVfdGltZXIgPSB7CisJLmluaXQJPSBteDMxbGl0ZV90aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChNWDMxTElURSwgIkxvZ2ljUEQgaS5NWDMxIFNPTSIpCisJLyogTWFpbnRhaW5lcjogRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gKi8KKwkucGh5c19pbyAgICAgICAgPSBNWDMxX0FJUFMxX0JBU0VfQUREUiwKKwkuaW9fcGdfb2Zmc3QgICAgPSAoTVgzMV9BSVBTMV9CQVNFX0FERFJfVklSVCA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zICAgID0gTVgzeF9QSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8gICAgICAgICA9IG14MzFsaXRlX21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBteDMxX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAorCS50aW1lciAgICAgICAgICA9ICZteDMxbGl0ZV90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFtb2JvYXJkLmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLW14MzFtb2JvYXJkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdkYzUxOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzMW1vYm9hcmQuYwpAQCAtMCwwICsxLDU1MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggVmFsZW50aW4gTG9uZ2NoYW1wLCBFUEZMIE1vYm90cyBncm91cAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL21jMTM3ODMuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IvdWxwaS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgzMW1vYm9hcmQuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KKyNpbmNsdWRlIDxtYWNoL2lwdS5oPgorI2luY2x1ZGUgPG1hY2gvaTJjLmg+CisjaW5jbHVkZSA8bWFjaC9tbWMuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CisjaW5jbHVkZSA8bWFjaC9teDNfY2FtZXJhLmg+CisjaW5jbHVkZSA8bWFjaC9zcGkuaD4KKyNpbmNsdWRlIDxtYWNoL3VscGkuaD4KKworI2luY2x1ZGUgImRldmljZXMuaCIKKworc3RhdGljIHVuc2lnbmVkIGludCBtb2JvYXJkX3BpbnNbXSA9IHsKKwkvKiBVQVJUMCAqLworCU1YMzFfUElOX1RYRDFfX1RYRDEsIE1YMzFfUElOX1JYRDFfX1JYRDEsCisJTVgzMV9QSU5fQ1RTMV9fR1BJTzJfNywKKwkvKiBVQVJUNCAqLworCU1YMzFfUElOX1BDX1JTVF9fQ1RTNSwgTVgzMV9QSU5fUENfVlMyX19SVFM1LAorCU1YMzFfUElOX1BDX0JWRDJfX1RYRDUsIE1YMzFfUElOX1BDX0JWRDFfX1JYRDUsCisJLyogSTJDMCAqLworCU1YMzFfUElOX0kyQ19EQVRfX0kyQzFfU0RBLCBNWDMxX1BJTl9JMkNfQ0xLX19JMkMxX1NDTCwKKwkvKiBJMkMxICovCisJTVgzMV9QSU5fRENEX0RURTFfX0kyQzJfU0RBLCBNWDMxX1BJTl9SSV9EVEUxX19JMkMyX1NDTCwKKwkvKiBTREhDMSAqLworCU1YMzFfUElOX1NEMV9EQVRBM19fU0QxX0RBVEEzLCBNWDMxX1BJTl9TRDFfREFUQTJfX1NEMV9EQVRBMiwKKwlNWDMxX1BJTl9TRDFfREFUQTFfX1NEMV9EQVRBMSwgTVgzMV9QSU5fU0QxX0RBVEEwX19TRDFfREFUQTAsCisJTVgzMV9QSU5fU0QxX0NMS19fU0QxX0NMSywgTVgzMV9QSU5fU0QxX0NNRF9fU0QxX0NNRCwKKwlNWDMxX1BJTl9BVEFfQ1MwX19HUElPM18yNiwgTVgzMV9QSU5fQVRBX0NTMV9fR1BJTzNfMjcsCisJLyogVVNCIHJlc2V0ICovCisJTVgzMV9QSU5fR1BJTzFfMF9fR1BJTzFfMCwKKwkvKiBVU0IgT1RHICovCisJTVgzMV9QSU5fVVNCT1RHX0RBVEEwX19VU0JPVEdfREFUQTAsCisJTVgzMV9QSU5fVVNCT1RHX0RBVEExX19VU0JPVEdfREFUQTEsCisJTVgzMV9QSU5fVVNCT1RHX0RBVEEyX19VU0JPVEdfREFUQTIsCisJTVgzMV9QSU5fVVNCT1RHX0RBVEEzX19VU0JPVEdfREFUQTMsCisJTVgzMV9QSU5fVVNCT1RHX0RBVEE0X19VU0JPVEdfREFUQTQsCisJTVgzMV9QSU5fVVNCT1RHX0RBVEE1X19VU0JPVEdfREFUQTUsCisJTVgzMV9QSU5fVVNCT1RHX0RBVEE2X19VU0JPVEdfREFUQTYsCisJTVgzMV9QSU5fVVNCT1RHX0RBVEE3X19VU0JPVEdfREFUQTcsCisJTVgzMV9QSU5fVVNCT1RHX0NMS19fVVNCT1RHX0NMSywgTVgzMV9QSU5fVVNCT1RHX0RJUl9fVVNCT1RHX0RJUiwKKwlNWDMxX1BJTl9VU0JPVEdfTlhUX19VU0JPVEdfTlhULCBNWDMxX1BJTl9VU0JPVEdfU1RQX19VU0JPVEdfU1RQLAorCU1YMzFfUElOX1VTQl9PQ19fR1BJTzFfMzAsCisJLyogVVNCIEgyICovCisJTVgzMV9QSU5fVVNCSDJfREFUQTBfX1VTQkgyX0RBVEEwLAorCU1YMzFfUElOX1VTQkgyX0RBVEExX19VU0JIMl9EQVRBMSwKKwlNWDMxX1BJTl9TVFhEM19fVVNCSDJfREFUQTIsIE1YMzFfUElOX1NSWEQzX19VU0JIMl9EQVRBMywKKwlNWDMxX1BJTl9TQ0szX19VU0JIMl9EQVRBNCwgTVgzMV9QSU5fU0ZTM19fVVNCSDJfREFUQTUsCisJTVgzMV9QSU5fU1RYRDZfX1VTQkgyX0RBVEE2LCBNWDMxX1BJTl9TUlhENl9fVVNCSDJfREFUQTcsCisJTVgzMV9QSU5fVVNCSDJfQ0xLX19VU0JIMl9DTEssIE1YMzFfUElOX1VTQkgyX0RJUl9fVVNCSDJfRElSLAorCU1YMzFfUElOX1VTQkgyX05YVF9fVVNCSDJfTlhULCBNWDMxX1BJTl9VU0JIMl9TVFBfX1VTQkgyX1NUUCwKKwlNWDMxX1BJTl9TQ0s2X19HUElPMV8yNSwKKwkvKiBMRURzICovCisJTVgzMV9QSU5fU1ZFTjBfX0dQSU8yXzAsIE1YMzFfUElOX1NUWDBfX0dQSU8yXzEsCisJTVgzMV9QSU5fU1JYMF9fR1BJTzJfMiwgTVgzMV9QSU5fU0lNUEQwX19HUElPMl8zLAorCS8qIFNQSTEgKi8KKwlNWDMxX1BJTl9DU1BJMl9NT1NJX19NT1NJLCBNWDMxX1BJTl9DU1BJMl9NSVNPX19NSVNPLAorCU1YMzFfUElOX0NTUEkyX1NDTEtfX1NDTEssIE1YMzFfUElOX0NTUEkyX1NQSV9SRFlfX1NQSV9SRFksCisJTVgzMV9QSU5fQ1NQSTJfU1MwX19TUzAsIE1YMzFfUElOX0NTUEkyX1NTMl9fU1MyLAorCS8qIEF0bGFzIElSUSAqLworCU1YMzFfUElOX0dQSU8xXzNfX0dQSU8xXzMsCisJLyogU1BJMiAqLworCU1YMzFfUElOX0NTUEkzX01PU0lfX01PU0ksIE1YMzFfUElOX0NTUEkzX01JU09fX01JU08sCisJTVgzMV9QSU5fQ1NQSTNfU0NMS19fU0NMSywgTVgzMV9QSU5fQ1NQSTNfU1BJX1JEWV9fU1BJX1JEWSwKKwlNWDMxX1BJTl9DU1BJMl9TUzFfX0NTUEkzX1NTMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG14MzFtb2JvYXJkX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoICAJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBteDMxbW9ib2FyZF9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSAweGEwMDAwMDAwLAorCS5lbmQJPSAweGExZmZmZmZmLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgzMW1vYm9hcmRfZmxhc2ggPSB7CisJLm5hbWUJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCT0gMCwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSAgPSAmbXgzMW1vYm9hcmRfZmxhc2hfZGF0YSwKKwl9LAorCS5yZXNvdXJjZSA9ICZteDMxbW9ib2FyZF9mbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCit9OworCitzdGF0aWMgaW50IG1vYm9hcmRfdWFydDBfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWdwaW9fcmVxdWVzdChJT01VWF9UT19HUElPKE1YMzFfUElOX0NUUzEpLCAidWFydDAtY3RzLWhhY2siKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9DVFMxKSwgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnQwX3BkYXRhID0geworCS5pbml0ID0gbW9ib2FyZF91YXJ0MF9pbml0LAorfTsKKworc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydDRfcGRhdGEgPSB7CisJLmZsYWdzID0gSU1YVUFSVF9IQVZFX1JUU0NUUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgbW9ib2FyZF9pMmMwX3BkYXRhID0geworCS5iaXRyYXRlID0gNDAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBtb2JvYXJkX2kyYzFfcGRhdGEgPSB7CisJLmJpdHJhdGUgPSAxMDAwMDAsCit9OworCitzdGF0aWMgaW50IG1vYm9hcmRfc3BpMV9jc1tdID0geworCU1YQ19TUElfQ1MoMCksCisJTVhDX1NQSV9DUygyKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2lteF9tYXN0ZXIgbW9ib2FyZF9zcGkxX21hc3RlciA9IHsKKwkuY2hpcHNlbGVjdAk9IG1vYm9hcmRfc3BpMV9jcywKKwkubnVtX2NoaXBzZWxlY3QJPSBBUlJBWV9TSVpFKG1vYm9hcmRfc3BpMV9jcyksCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc2RoY19jb25zdW1lcnNbXSA9IHsKKwl7CisJCS5kZXYJPSAmbXhjc2RoY19kZXZpY2UwLmRldiwKKwkJLnN1cHBseQk9ICJzZGhjMF92Y2MiLAorCX0sCisJeworCQkuZGV2CT0gJm14Y3NkaGNfZGV2aWNlMS5kZXYsCisJCS5zdXBwbHkJPSAic2RoYzFfdmNjIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNkaGNfdnJlZ19kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91ViA9IDI3MDAwMDAsCisJCS5tYXhfdVYgPSAzMDAwMDAwLAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfAorCQkJUkVHVUxBVE9SX0NIQU5HRV9NT0RFIHwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMIHwKKwkJCVJFR1VMQVRPUl9NT0RFX0ZBU1QsCisJCS5hbHdheXNfb24gPSAwLAorCQkuYm9vdF9vbiA9IDEsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShzZGhjX2NvbnN1bWVycyksCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gc2RoY19jb25zdW1lcnMsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgY2FtX2NvbnN1bWVyc1tdID0geworCXsKKwkJLmRldgk9ICZteDNfY2FtZXJhLmRldiwKKwkJLnN1cHBseQk9ICJjYW1fdmNjIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGNhbV92cmVnX2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWID0gMjcwMDAwMCwKKwkJLm1heF91ViA9IDMwMDAwMDAsCisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8CisJCQlSRUdVTEFUT1JfQ0hBTkdFX01PREUgfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwgfAorCQkJUkVHVUxBVE9SX01PREVfRkFTVCwKKwkJLmFsd2F5c19vbiA9IDAsCisJCS5ib290X29uID0gMSwKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKGNhbV9jb25zdW1lcnMpLAorCS5jb25zdW1lcl9zdXBwbGllcyA9IGNhbV9jb25zdW1lcnMsCit9OworCitzdGF0aWMgc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX2luaXRfZGF0YSBtb2JvYXJkX3JlZ3VsYXRvcnNbXSA9IHsKKwl7CisJCS5pZCA9IE1DMTM3ODNfUkVHVV9WTU1DMSwKKwkJLmluaXRfZGF0YSA9ICZzZGhjX3ZyZWdfZGF0YSwKKwl9LAorCXsKKwkJLmlkID0gTUMxMzc4M19SRUdVX1ZDQU0sCisJCS5pbml0X2RhdGEgPSAmY2FtX3ZyZWdfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtYzEzNzgzX3BsYXRmb3JtX2RhdGEgbW9ib2FyZF9wbWljID0geworCS5yZWd1bGF0b3JzID0gbW9ib2FyZF9yZWd1bGF0b3JzLAorCS5udW1fcmVndWxhdG9ycyA9IEFSUkFZX1NJWkUobW9ib2FyZF9yZWd1bGF0b3JzKSwKKwkuZmxhZ3MgPSBNQzEzNzgzX1VTRV9SRUdVTEFUT1IgfCBNQzEzNzgzX1VTRV9SVEMgfAorCQlNQzEzNzgzX1VTRV9BREMsCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIG1vYm9hcmRfc3BpX2JvYXJkX2luZm9bXSBfX2luaXRkYXRhID0geworCXsKKwkJLm1vZGFsaWFzID0gIm1jMTM3ODMiLAorCQkuaXJxID0gSU9NVVhfVE9fSVJRKE1YMzFfUElOX0dQSU8xXzMpLAorCQkubWF4X3NwZWVkX2h6ID0gMzAwMDAwLAorCQkuYnVzX251bSA9IDEsCisJCS5jaGlwX3NlbGVjdCA9IDAsCisJCS5wbGF0Zm9ybV9kYXRhID0gJm1vYm9hcmRfcG1pYywKKwkJLm1vZGUgPSBTUElfQ1NfSElHSCwKKwl9LAorfTsKKworc3RhdGljIGludCBtb2JvYXJkX3NwaTJfY3NbXSA9IHsKKwlNWENfU1BJX0NTKDEpLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfaW14X21hc3RlciBtb2JvYXJkX3NwaTJfbWFzdGVyID0geworCS5jaGlwc2VsZWN0CT0gbW9ib2FyZF9zcGkyX2NzLAorCS5udW1fY2hpcHNlbGVjdAk9IEFSUkFZX1NJWkUobW9ib2FyZF9zcGkyX2NzKSwKK307CisKKyNkZWZpbmUgU0RIQzFfQ0QgSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9BVEFfQ1MwKQorI2RlZmluZSBTREhDMV9XUCBJT01VWF9UT19HUElPKE1YMzFfUElOX0FUQV9DUzEpCisKK3N0YXRpYyBpbnQgbW9ib2FyZF9zZGhjMV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoU0RIQzFfV1ApOworfQorCitzdGF0aWMgaW50IG1vYm9hcmRfc2RoYzFfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgZGV0ZWN0X2lycSwKKwkJdm9pZCAqZGF0YSkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KFNESEMxX0NELCAic2RoYy1kZXRlY3QiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoU0RIQzFfQ0QpOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KFNESEMxX1dQLCAic2RoYy13cCIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2dwaW9fZnJlZTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChTREhDMV9XUCk7CisKKwlyZXQgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycShTREhDMV9DRCksIGRldGVjdF9pcnEsCisJCUlSUUZfVFJJR0dFUl9SSVNJTkcgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKKwkJInNkaGMxLWNhcmQtZGV0ZWN0IiwgZGF0YSk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfZ3Bpb19mcmVlXzI7CisKKwlyZXR1cm4gMDsKKworZXJyX2dwaW9fZnJlZV8yOgorCWdwaW9fZnJlZShTREhDMV9XUCk7CitlcnJfZ3Bpb19mcmVlOgorCWdwaW9fZnJlZShTREhDMV9DRCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtb2JvYXJkX3NkaGMxX2V4aXQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQoreworCWZyZWVfaXJxKGdwaW9fdG9faXJxKFNESEMxX0NEKSwgZGF0YSk7CisJZ3Bpb19mcmVlKFNESEMxX1dQKTsKKwlncGlvX2ZyZWUoU0RIQzFfQ0QpOworfQorCitzdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGMxX3BkYXRhID0geworCS5nZXRfcm8JPSBtb2JvYXJkX3NkaGMxX2dldF9ybywKKwkuaW5pdAk9IG1vYm9hcmRfc2RoYzFfaW5pdCwKKwkuZXhpdAk9IG1vYm9hcmRfc2RoYzFfZXhpdCwKK307CisKKy8qCisgKiB0aGlzIHBpbiBpcyBkZWRpY2F0ZWQgZm9yIGFsbCBteDMxbW9ib2FyZCBzeXN0ZW1zLCBzbyB3ZSBkbyBpdCBoZXJlCisgKi8KKyNkZWZpbmUgVVNCX1JFU0VUX0IJSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9HUElPMV8wKQorCitzdGF0aWMgdm9pZCB1c2JfeGN2cl9yZXNldCh2b2lkKQoreworCWdwaW9fcmVxdWVzdChVU0JfUkVTRVRfQiwgInVzYi1yZXNldCIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChVU0JfUkVTRVRfQiwgMCk7CisJbWRlbGF5KDEpOworCWdwaW9fc2V0X3ZhbHVlKFVTQl9SRVNFVF9CLCAxKTsKK30KKworI2RlZmluZSBVU0JfUEFEX0NGRyAoUEFEX0NUTF9EUlZfTUFYIHwgUEFEX0NUTF9TUkVfRkFTVCB8IFBBRF9DVExfSFlTX0NNT1MgfCBcCisJCQlQQURfQ1RMX09ERV9DTU9TIHwgUEFEX0NUTF8xMDBLX1BVKQorCisjZGVmaW5lIE9UR19FTl9CIElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fVVNCX09DKQorCitzdGF0aWMgdm9pZCBtb2JvYXJkX3VzYm90Z19pbml0KHZvaWQpCit7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEEwLCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEExLCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEEyLCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEEzLCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE0LCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE1LCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE2LCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE3LCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0NMSywgVVNCX1BBRF9DRkcpOworCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQk9UR19ESVIsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfTlhULCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX1NUUCwgVVNCX1BBRF9DRkcpOworCisJZ3Bpb19yZXF1ZXN0KE9UR19FTl9CLCAidXNiLXVkYy1lbiIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChPVEdfRU5fQiwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSB1c2JfcGRhdGEgPSB7CisJLm9wZXJhdGluZ19tb2RlCT0gRlNMX1VTQjJfRFJfREVWSUNFLAorCS5waHlfbW9kZQk9IEZTTF9VU0IyX1BIWV9VTFBJLAorfTsKKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9VTFBJKQorCisjZGVmaW5lIFVTQkgyX0VOX0IgSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9TQ0s2KQorCitzdGF0aWMgaW50IG1vYm9hcmRfdXNiaDJfaHdfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQ7CisKKwlteGNfaW9tdXhfc2V0X2dwcihNVVhfUEdQX1VIMiwgdHJ1ZSk7CisKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JIMl9DTEssIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JIMl9ESVIsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JIMl9OWFQsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JIMl9TVFAsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JIMl9EQVRBMCwgVVNCX1BBRF9DRkcpOworCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQkgyX0RBVEExLCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fU1JYRDYsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9TVFhENiwgVVNCX1BBRF9DRkcpOworCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1NGUzMsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9TQ0szLCBVU0JfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fU1JYRDMsIFVTQl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9TVFhEMywgVVNCX1BBRF9DRkcpOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KFVTQkgyX0VOX0IsICJ1c2JoMi1lbiIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFVTQkgyX0VOX0IsIDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbW9ib2FyZF91c2JoMl9od19leGl0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJZ3Bpb19mcmVlKFVTQkgyX0VOX0IpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgdXNiaDJfcGRhdGEgPSB7CisJLmluaXQJPSBtb2JvYXJkX3VzYmgyX2h3X2luaXQsCisJLmV4aXQJPSBtb2JvYXJkX3VzYmgyX2h3X2V4aXQsCisJLnBvcnRzYwk9IE1YQ19FSENJX01PREVfVUxQSSB8IE1YQ19FSENJX1VUTUlfOEJJVCwKKwkuZmxhZ3MJPSBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtb2JvYXJkX3VzYmgyX2luaXQodm9pZCkKK3sKKwl1c2JoMl9wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCisJCQlVU0JfT1RHX0RSVl9WQlVTIHwgVVNCX09UR19EUlZfVkJVU19FWFQpOworCisJcmV0dXJuIG14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgJnVzYmgyX3BkYXRhKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBtb2JvYXJkX3VzYmgyX2luaXQodm9pZCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBteDMxbW9ib2FyZF9sZWRzW10gPSB7CisJeworCQkubmFtZSAJPSAiY29yZWJvYXJkLWxlZC0wOnJlZDpydW5uaW5nIiwKKwkJLmRlZmF1bHRfdHJpZ2dlciA9ICJoZWFydGJlYXQiLAorCQkuZ3BpbyAJPSBJT01VWF9UT19HUElPKE1YMzFfUElOX1NWRU4wKSwKKwl9LCB7CisJCS5uYW1lCT0gImNvcmVib2FyZC1sZWQtMTpyZWQiLAorCQkuZ3Bpbwk9IElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fU1RYMCksCisJfSwgeworCQkubmFtZQk9ICJjb3JlYm9hcmQtbGVkLTI6cmVkIiwKKwkJLmdwaW8JPSBJT01VWF9UT19HUElPKE1YMzFfUElOX1NSWDApLAorCX0sIHsKKwkJLm5hbWUJPSAiY29yZWJvYXJkLWxlZC0zOnJlZCIsCisJCS5ncGlvCT0gSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9TSU1QRDApLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgbXgzMW1vYm9hcmRfbGVkX3BkYXRhID0geworCS5udW1fbGVkcyAJPSBBUlJBWV9TSVpFKG14MzFtb2JvYXJkX2xlZHMpLAorCS5sZWRzCQk9IG14MzFtb2JvYXJkX2xlZHMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDMxbW9ib2FyZF9sZWRzX2RldmljZSA9IHsKKwkubmFtZQk9ICJsZWRzLWdwaW8iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJm14MzFtb2JvYXJkX2xlZF9wZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpcHVfcGxhdGZvcm1fZGF0YSBteDNfaXB1X2RhdGEgPSB7CisJLmlycV9iYXNlID0gTVhDX0lQVV9JUlFfU1RBUlQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJm14MzFtb2JvYXJkX2ZsYXNoLAorCSZteDMxbW9ib2FyZF9sZWRzX2RldmljZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXgzX2NhbWVyYV9wZGF0YSBjYW1lcmFfcGRhdGEgPSB7CisJLmRtYV9kZXYJPSAmbXgzX2lwdS5kZXYsCisJLmZsYWdzCQk9IE1YM19DQU1FUkFfREFUQVdJRFRIXzggfCBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xMCwKKwkubWNsa18xMGtoegk9IDQ4MDAsCit9OworCisjZGVmaW5lIENBTUVSQV9CVUZfU0laRQkoNCoxMDI0KjEwMjQpCisKK3N0YXRpYyBpbnQgX19pbml0IG14MzFtb2JvYXJkX2NhbV9hbGxvY19kbWEoY29uc3Qgc2l6ZV90IGJ1Zl9zaXplKQoreworCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKKwl2b2lkICpidWY7CisJaW50IGRtYTsKKworCWlmIChidWZfc2l6ZSA8IDIgKiAxMDI0ICogMTAyNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlidWYgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgYnVmX3NpemUsICZkbWFfaGFuZGxlLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikgeworCQlwcl9lcnIoIiVzOiBjYW5ub3QgYWxsb2NhdGUgY2FtZXJhIGJ1ZmZlci1tZW1vcnlcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJbWVtc2V0KGJ1ZiwgMCwgYnVmX3NpemUpOworCisJZG1hID0gZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KCZteDNfY2FtZXJhLmRldiwKKwkJCQkJZG1hX2hhbmRsZSwgZG1hX2hhbmRsZSwgYnVmX3NpemUsCisJCQkJCURNQV9NRU1PUllfTUFQIHwgRE1BX01FTU9SWV9FWENMVVNJVkUpOworCisJLyogVGhlIHdheSB3ZSBjYWxsIGRtYV9kZWNsYXJlX2NvaGVyZW50X21lbW9yeSBvbmx5IGEgbWFsbG9jIGNhbiBmYWlsICovCisJcmV0dXJuIGRtYSAmIERNQV9NRU1PUllfTUFQID8gMCA6IC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgbXgzMW1vYm9hcmRfYmFzZWJvYXJkOworY29yZV9wYXJhbShteDMxbW9ib2FyZF9iYXNlYm9hcmQsIG14MzFtb2JvYXJkX2Jhc2Vib2FyZCwgaW50LCAwNDQ0KTsKKworLyoKKyAqIEJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgbXhjX2JvYXJkX2luaXQodm9pZCkKK3sKKwlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhtb2JvYXJkX3BpbnMsIEFSUkFZX1NJWkUobW9ib2FyZF9waW5zKSwKKwkJIm1vYm9hcmQiKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnQwX3BkYXRhKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTQsICZ1YXJ0NF9wZGF0YSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTAsICZtb2JvYXJkX2kyYzBfcGRhdGEpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMSwgJm1vYm9hcmRfaTJjMV9wZGF0YSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc3BpX2RldmljZTEsICZtb2JvYXJkX3NwaTFfbWFzdGVyKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc3BpX2RldmljZTIsICZtb2JvYXJkX3NwaTJfbWFzdGVyKTsKKworCWdwaW9fcmVxdWVzdChJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8xXzMpLCAicG1pYy1pcnEiKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8xXzMpKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhtb2JvYXJkX3NwaV9ib2FyZF9pbmZvLAorCQlBUlJBWV9TSVpFKG1vYm9hcmRfc3BpX2JvYXJkX2luZm8pKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y3NkaGNfZGV2aWNlMCwgJnNkaGMxX3BkYXRhKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14M19pcHUsICZteDNfaXB1X2RhdGEpOworCWlmICghbXgzMW1vYm9hcmRfY2FtX2FsbG9jX2RtYShDQU1FUkFfQlVGX1NJWkUpKQorCQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDNfY2FtZXJhLCAmY2FtZXJhX3BkYXRhKTsKKworCXVzYl94Y3ZyX3Jlc2V0KCk7CisKKwltb2JvYXJkX3VzYm90Z19pbml0KCk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z191ZGNfZGV2aWNlLCAmdXNiX3BkYXRhKTsKKwltb2JvYXJkX3VzYmgyX2luaXQoKTsKKworCXN3aXRjaCAobXgzMW1vYm9hcmRfYmFzZWJvYXJkKSB7CisJY2FzZSBNWDMxTk9CT0FSRDoKKwkJYnJlYWs7CisJY2FzZSBNWDMxREVWQk9BUkQ6CisJCW14MzFtb2JvYXJkX2RldmJvYXJkX2luaXQoKTsKKwkJYnJlYWs7CisJY2FzZSBNWDMxTUFSWEJPVDoKKwkJbXgzMW1vYm9hcmRfbWFyeGJvdF9pbml0KCk7CisJCWJyZWFrOworCWNhc2UgTVgzMVNNQVJUQk9UOgorCQlteDMxbW9ib2FyZF9zbWFydGJvdF9pbml0KCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiSWxsZWdhbCBteDMxbW9ib2FyZF9iYXNlYm9hcmQgdHlwZSAlZFxuIiwKKwkJCW14MzFtb2JvYXJkX2Jhc2Vib2FyZCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXgzMW1vYm9hcmRfdGltZXJfaW5pdCh2b2lkKQoreworCW14MzFfY2xvY2tzX2luaXQoMjYwMDAwMDApOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIG14MzFtb2JvYXJkX3RpbWVyID0geworCS5pbml0CT0gbXgzMW1vYm9hcmRfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoTVgzMU1PQk9BUkQsICJFUEZMIE1vYm90cyBteDMxbW9ib2FyZCIpCisJLyogTWFpbnRhaW5lcjogVmFsZW50aW4gTG9uZ2NoYW1wLCBFUEZMIE1vYm90cyBncm91cCAqLworCS5waHlzX2lvCT0gTVgzMV9BSVBTMV9CQVNFX0FERFIsCisJLmlvX3BnX29mZnN0CT0gKE1YMzFfQUlQUzFfQkFTRV9BRERSX1ZJUlQgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyAgICA9IE1YM3hfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBteDMxX21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBteDMxX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAorCS50aW1lciAgICAgICAgICA9ICZteDMxbW9ib2FyZF90aW1lciwKK01BQ0hJTkVfRU5ECisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzNXBkay5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1teDM1cGRrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmNhYzg0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtbXgzNXBkay5jCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IEZhYmlvIEVzdGV2YW0gPGZhYmlvLmVzdGV2YW1AZnJlZXNjYWxlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzNS5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJm14Y19mZWNfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBwYWRfZGVzYyBteDM1cGRrX3BhZHNbXSA9IHsKKwkvKiBVQVJUMSAqLworCU1YMzVfUEFEX0NUUzFfX1VBUlQxX0NUUywKKwlNWDM1X1BBRF9SVFMxX19VQVJUMV9SVFMsCisJTVgzNV9QQURfVFhEMV9fVUFSVDFfVFhEX01VWCwKKwlNWDM1X1BBRF9SWEQxX19VQVJUMV9SWERfTVVYLAorCS8qIEZFQyAqLworCU1YMzVfUEFEX0ZFQ19UWF9DTEtfX0ZFQ19UWF9DTEssCisJTVgzNV9QQURfRkVDX1JYX0NMS19fRkVDX1JYX0NMSywKKwlNWDM1X1BBRF9GRUNfUlhfRFZfX0ZFQ19SWF9EViwKKwlNWDM1X1BBRF9GRUNfQ09MX19GRUNfQ09MLAorCU1YMzVfUEFEX0ZFQ19SREFUQTBfX0ZFQ19SREFUQV8wLAorCU1YMzVfUEFEX0ZFQ19UREFUQTBfX0ZFQ19UREFUQV8wLAorCU1YMzVfUEFEX0ZFQ19UWF9FTl9fRkVDX1RYX0VOLAorCU1YMzVfUEFEX0ZFQ19NRENfX0ZFQ19NREMsCisJTVgzNV9QQURfRkVDX01ESU9fX0ZFQ19NRElPLAorCU1YMzVfUEFEX0ZFQ19UWF9FUlJfX0ZFQ19UWF9FUlIsCisJTVgzNV9QQURfRkVDX1JYX0VSUl9fRkVDX1JYX0VSUiwKKwlNWDM1X1BBRF9GRUNfQ1JTX19GRUNfQ1JTLAorCU1YMzVfUEFEX0ZFQ19SREFUQTFfX0ZFQ19SREFUQV8xLAorCU1YMzVfUEFEX0ZFQ19UREFUQTFfX0ZFQ19UREFUQV8xLAorCU1YMzVfUEFEX0ZFQ19SREFUQTJfX0ZFQ19SREFUQV8yLAorCU1YMzVfUEFEX0ZFQ19UREFUQTJfX0ZFQ19UREFUQV8yLAorCU1YMzVfUEFEX0ZFQ19SREFUQTNfX0ZFQ19SREFUQV8zLAorCU1YMzVfUEFEX0ZFQ19UREFUQTNfX0ZFQ19UREFUQV8zLAorCS8qIFVTQk9URyAqLworCU1YMzVfUEFEX1VTQk9UR19QV1JfX1VTQl9UT1BfVVNCT1RHX1BXUiwKKwlNWDM1X1BBRF9VU0JPVEdfT0NfX1VTQl9UT1BfVVNCT1RHX09DLAorfTsKKworLyogT1RHIGNvbmZpZyAqLworc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIHVzYl9wZGF0YSA9IHsKKwkub3BlcmF0aW5nX21vZGUJPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCisJLnBoeV9tb2RlCT0gRlNMX1VTQjJfUEhZX1VUTUlfV0lERSwKK307CisKKy8qCisgKiBCb2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IG14Y19ib2FyZF9pbml0KHZvaWQpCit7CisJbXhjX2lvbXV4X3YzX3NldHVwX211bHRpcGxlX3BhZHMobXgzNXBka19wYWRzLCBBUlJBWV9TSVpFKG14MzVwZGtfcGFkcykpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfb3RnX3VkY19kZXZpY2UsICZ1c2JfcGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgbXgzNXBka190aW1lcl9pbml0KHZvaWQpCit7CisJbXgzNV9jbG9ja3NfaW5pdCgpOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIG14MzVwZGtfdGltZXIgPSB7CisJLmluaXQJPSBteDM1cGRrX3RpbWVyX2luaXQsCit9OworCitNQUNISU5FX1NUQVJUKE1YMzVfM0RTLCAiRnJlZXNjYWxlIE1YMzVQREsiKQorCS8qIE1haW50YWluZXI6IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMgKi8KKwkucGh5c19pbwk9IE1YMzVfQUlQUzFfQkFTRV9BRERSLAorCS5pb19wZ19vZmZzdAk9ICgoTVgzNV9BSVBTMV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyAgICA9IE1YM3hfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBteDM1X21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBteDM1X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAorCS50aW1lciAgICAgICAgICA9ICZteDM1cGRrX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtcGNtMDM3LmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLXBjbTAzNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZjUzMTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLXBjbTAzNy5jCkBAIC0wLDAgKzEsNjkzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BsYXQtcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjL2F0MjQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Nhbi9wbGF0Zm9ybS9zamExMDAwLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi91bHBpLmg+CisjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KKworI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLXBjbTAzNy5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaTJjLmg+CisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzLmg+CisjaW5jbHVkZSA8bWFjaC9pcHUuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPG1hY2gvbXgzX2NhbWVyYS5oPgorI2luY2x1ZGUgPG1hY2gvbXgzZmIuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+CisjaW5jbHVkZSA8bWFjaC9teGNfZWhjaS5oPgorI2luY2x1ZGUgPG1hY2gvdWxwaS5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorI2luY2x1ZGUgInBjbTAzNy5oIgorCitzdGF0aWMgZW51bSBwY20wMzdfYm9hcmRfdmFyaWFudCBwY20wMzdfaW5zdGFuY2UgPSBQQ00wMzdfUENNOTcwOworCitzdGF0aWMgaW50IF9faW5pdCBwY20wMzdfdmFyaWFudF9zZXR1cChjaGFyICpzdHIpCit7CisJaWYgKCFzdHJjbXAoImVldCIsIHN0cikpCisJCXBjbTAzN19pbnN0YW5jZSA9IFBDTTAzN19FRVQ7CisJZWxzZSBpZiAoc3RyY21wKCJwY205NzAiLCBzdHIpKQorCQlwcl93YXJuaW5nKCJVbmtub3duIHBjbTAzNyBiYXNlYm9hcmQgdmFyaWFudCAlc1xuIiwgc3RyKTsKKworCXJldHVybiAxOworfQorCisvKiBTdXBwb3J0ZWQgdmFsdWVzOiAicGNtOTcwIiAoZGVmYXVsdCkgYW5kICJlZXQiICovCitfX3NldHVwKCJwY20wMzdfdmFyaWFudD0iLCBwY20wMzdfdmFyaWFudF9zZXR1cCk7CisKK2VudW0gcGNtMDM3X2JvYXJkX3ZhcmlhbnQgcGNtMDM3X3ZhcmlhbnQodm9pZCkKK3sKKwlyZXR1cm4gcGNtMDM3X2luc3RhbmNlOworfQorCisvKiBVQVJUMSB3aXRoIFJUUy9DVFMgaGFuZHNoYWtlIHNpZ25hbHMgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGNtMDM3X3VhcnQxX2hhbmRzaGFrZV9waW5zW10gPSB7CisJTVgzMV9QSU5fQ1RTMV9fQ1RTMSwKKwlNWDMxX1BJTl9SVFMxX19SVFMxLAorCU1YMzFfUElOX1RYRDFfX1RYRDEsCisJTVgzMV9QSU5fUlhEMV9fUlhEMSwKK307CisKKy8qIFVBUlQxIHdpdGhvdXQgUlRTL0NUUyBoYW5kc2hha2Ugc2lnbmFscyAqLworc3RhdGljIHVuc2lnbmVkIGludCBwY20wMzdfdWFydDFfcGluc1tdID0geworCU1YMzFfUElOX1RYRDFfX1RYRDEsCisJTVgzMV9QSU5fUlhEMV9fUlhEMSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGNtMDM3X3BpbnNbXSA9IHsKKwkvKiBJMkMgKi8KKwlNWDMxX1BJTl9DU1BJMl9NT1NJX19TQ0wsCisJTVgzMV9QSU5fQ1NQSTJfTUlTT19fU0RBLAorCU1YMzFfUElOX0NTUEkyX1NTMl9fSTJDM19TREEsCisJTVgzMV9QSU5fQ1NQSTJfU0NMS19fSTJDM19TQ0wsCisJLyogU0RIQzEgKi8KKwlNWDMxX1BJTl9TRDFfREFUQTNfX1NEMV9EQVRBMywKKwlNWDMxX1BJTl9TRDFfREFUQTJfX1NEMV9EQVRBMiwKKwlNWDMxX1BJTl9TRDFfREFUQTFfX1NEMV9EQVRBMSwKKwlNWDMxX1BJTl9TRDFfREFUQTBfX1NEMV9EQVRBMCwKKwlNWDMxX1BJTl9TRDFfQ0xLX19TRDFfQ0xLLAorCU1YMzFfUElOX1NEMV9DTURfX1NEMV9DTUQsCisJSU9NVVhfTU9ERShNWDMxX1BJTl9TQ0s2LCBJT01VWF9DT05GSUdfR1BJTyksIC8qIGNhcmQgZGV0ZWN0ICovCisJSU9NVVhfTU9ERShNWDMxX1BJTl9TRlM2LCBJT01VWF9DT05GSUdfR1BJTyksIC8qIHdyaXRlIHByb3RlY3QgKi8KKwkvKiBTUEkxICovCisJTVgzMV9QSU5fQ1NQSTFfTU9TSV9fTU9TSSwKKwlNWDMxX1BJTl9DU1BJMV9NSVNPX19NSVNPLAorCU1YMzFfUElOX0NTUEkxX1NDTEtfX1NDTEssCisJTVgzMV9QSU5fQ1NQSTFfU1BJX1JEWV9fU1BJX1JEWSwKKwlNWDMxX1BJTl9DU1BJMV9TUzBfX1NTMCwKKwlNWDMxX1BJTl9DU1BJMV9TUzFfX1NTMSwKKwlNWDMxX1BJTl9DU1BJMV9TUzJfX1NTMiwKKwkvKiBVQVJUMiAqLworCU1YMzFfUElOX1RYRDJfX1RYRDIsCisJTVgzMV9QSU5fUlhEMl9fUlhEMiwKKwlNWDMxX1BJTl9DVFMyX19DVFMyLAorCU1YMzFfUElOX1JUUzJfX1JUUzIsCisJLyogVUFSVDMgKi8KKwlNWDMxX1BJTl9DU1BJM19NT1NJX19SWEQzLAorCU1YMzFfUElOX0NTUEkzX01JU09fX1RYRDMsCisJTVgzMV9QSU5fQ1NQSTNfU0NMS19fUlRTMywKKwlNWDMxX1BJTl9DU1BJM19TUElfUkRZX19DVFMzLAorCS8qIExBTjkyMTcgaXJxIHBpbiAqLworCUlPTVVYX01PREUoTVgzMV9QSU5fR1BJTzNfMSwgSU9NVVhfQ09ORklHX0dQSU8pLAorCS8qIE9uZXdpcmUgKi8KKwlNWDMxX1BJTl9CQVRUX0xJTkVfX09XSVJFLAorCS8qIEZyYW1lYnVmZmVyICovCisJTVgzMV9QSU5fTEQwX19MRDAsCisJTVgzMV9QSU5fTEQxX19MRDEsCisJTVgzMV9QSU5fTEQyX19MRDIsCisJTVgzMV9QSU5fTEQzX19MRDMsCisJTVgzMV9QSU5fTEQ0X19MRDQsCisJTVgzMV9QSU5fTEQ1X19MRDUsCisJTVgzMV9QSU5fTEQ2X19MRDYsCisJTVgzMV9QSU5fTEQ3X19MRDcsCisJTVgzMV9QSU5fTEQ4X19MRDgsCisJTVgzMV9QSU5fTEQ5X19MRDksCisJTVgzMV9QSU5fTEQxMF9fTEQxMCwKKwlNWDMxX1BJTl9MRDExX19MRDExLAorCU1YMzFfUElOX0xEMTJfX0xEMTIsCisJTVgzMV9QSU5fTEQxM19fTEQxMywKKwlNWDMxX1BJTl9MRDE0X19MRDE0LAorCU1YMzFfUElOX0xEMTVfX0xEMTUsCisJTVgzMV9QSU5fTEQxNl9fTEQxNiwKKwlNWDMxX1BJTl9MRDE3X19MRDE3LAorCU1YMzFfUElOX1ZTWU5DM19fVlNZTkMzLAorCU1YMzFfUElOX0hTWU5DX19IU1lOQywKKwlNWDMxX1BJTl9GUFNISUZUX19GUFNISUZULAorCU1YMzFfUElOX0RSRFkwX19EUkRZMCwKKwlNWDMxX1BJTl9EM19SRVZfX0QzX1JFViwKKwlNWDMxX1BJTl9DT05UUkFTVF9fQ09OVFJBU1QsCisJTVgzMV9QSU5fRDNfU1BMX19EM19TUEwsCisJTVgzMV9QSU5fRDNfQ0xTX19EM19DTFMsCisJTVgzMV9QSU5fTENTMF9fR1BJMDNfMjMsCisJLyogQ1NJICovCisJSU9NVVhfTU9ERShNWDMxX1BJTl9DU0lfRDUsIElPTVVYX0NPTkZJR19HUElPKSwKKwlNWDMxX1BJTl9DU0lfRDZfX0NTSV9ENiwKKwlNWDMxX1BJTl9DU0lfRDdfX0NTSV9ENywKKwlNWDMxX1BJTl9DU0lfRDhfX0NTSV9EOCwKKwlNWDMxX1BJTl9DU0lfRDlfX0NTSV9EOSwKKwlNWDMxX1BJTl9DU0lfRDEwX19DU0lfRDEwLAorCU1YMzFfUElOX0NTSV9EMTFfX0NTSV9EMTEsCisJTVgzMV9QSU5fQ1NJX0QxMl9fQ1NJX0QxMiwKKwlNWDMxX1BJTl9DU0lfRDEzX19DU0lfRDEzLAorCU1YMzFfUElOX0NTSV9EMTRfX0NTSV9EMTQsCisJTVgzMV9QSU5fQ1NJX0QxNV9fQ1NJX0QxNSwKKwlNWDMxX1BJTl9DU0lfSFNZTkNfX0NTSV9IU1lOQywKKwlNWDMxX1BJTl9DU0lfTUNMS19fQ1NJX01DTEssCisJTVgzMV9QSU5fQ1NJX1BJWENMS19fQ1NJX1BJWENMSywKKwlNWDMxX1BJTl9DU0lfVlNZTkNfX0NTSV9WU1lOQywKKwkvKiBHUElPICovCisJSU9NVVhfTU9ERShNWDMxX1BJTl9BVEFfRE1BQ0ssIElPTVVYX0NPTkZJR19HUElPKSwKKwkvKiBPVEcgKi8KKwlNWDMxX1BJTl9VU0JPVEdfREFUQTBfX1VTQk9UR19EQVRBMCwKKwlNWDMxX1BJTl9VU0JPVEdfREFUQTFfX1VTQk9UR19EQVRBMSwKKwlNWDMxX1BJTl9VU0JPVEdfREFUQTJfX1VTQk9UR19EQVRBMiwKKwlNWDMxX1BJTl9VU0JPVEdfREFUQTNfX1VTQk9UR19EQVRBMywKKwlNWDMxX1BJTl9VU0JPVEdfREFUQTRfX1VTQk9UR19EQVRBNCwKKwlNWDMxX1BJTl9VU0JPVEdfREFUQTVfX1VTQk9UR19EQVRBNSwKKwlNWDMxX1BJTl9VU0JPVEdfREFUQTZfX1VTQk9UR19EQVRBNiwKKwlNWDMxX1BJTl9VU0JPVEdfREFUQTdfX1VTQk9UR19EQVRBNywKKwlNWDMxX1BJTl9VU0JPVEdfQ0xLX19VU0JPVEdfQ0xLLAorCU1YMzFfUElOX1VTQk9UR19ESVJfX1VTQk9UR19ESVIsCisJTVgzMV9QSU5fVVNCT1RHX05YVF9fVVNCT1RHX05YVCwKKwlNWDMxX1BJTl9VU0JPVEdfU1RQX19VU0JPVEdfU1RQLAorCS8qIFVTQiBob3N0IDIgKi8KKwlJT01VWF9NT0RFKE1YMzFfUElOX1VTQkgyX0NMSywgSU9NVVhfQ09ORklHX0ZVTkMpLAorCUlPTVVYX01PREUoTVgzMV9QSU5fVVNCSDJfRElSLCBJT01VWF9DT05GSUdfRlVOQyksCisJSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JIMl9OWFQsIElPTVVYX0NPTkZJR19GVU5DKSwKKwlJT01VWF9NT0RFKE1YMzFfUElOX1VTQkgyX1NUUCwgSU9NVVhfQ09ORklHX0ZVTkMpLAorCUlPTVVYX01PREUoTVgzMV9QSU5fVVNCSDJfREFUQTAsIElPTVVYX0NPTkZJR19GVU5DKSwKKwlJT01VWF9NT0RFKE1YMzFfUElOX1VTQkgyX0RBVEExLCBJT01VWF9DT05GSUdfRlVOQyksCisJSU9NVVhfTU9ERShNWDMxX1BJTl9TVFhEMywgSU9NVVhfQ09ORklHX0ZVTkMpLAorCUlPTVVYX01PREUoTVgzMV9QSU5fU1JYRDMsIElPTVVYX0NPTkZJR19GVU5DKSwKKwlJT01VWF9NT0RFKE1YMzFfUElOX1NDSzMsIElPTVVYX0NPTkZJR19GVU5DKSwKKwlJT01VWF9NT0RFKE1YMzFfUElOX1NGUzMsIElPTVVYX0NPTkZJR19GVU5DKSwKKwlJT01VWF9NT0RFKE1YMzFfUElOX1NUWEQ2LCBJT01VWF9DT05GSUdfRlVOQyksCisJSU9NVVhfTU9ERShNWDMxX1BJTl9TUlhENiwgSU9NVVhfQ09ORklHX0ZVTkMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGNtMDM3X2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoICA9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjbTAzN19mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSAweGEwMDAwMDAwLAorCS5lbmQJPSAweGExZmZmZmZmLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNtMDM3X2ZsYXNoID0geworCS5uYW1lCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAk9IDAsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgID0gJnBjbTAzN19mbGFzaF9kYXRhLAorCX0sCisJLnJlc291cmNlID0gJnBjbTAzN19mbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtc2M5MTF4X3Jlc291cmNlc1tdID0geworCXsKKwkJLnN0YXJ0CQk9IE1YMzFfQ1MxX0JBU0VfQUREUiArIDB4MzAwLAorCQkuZW5kCQk9IE1YMzFfQ1MxX0JBU0VfQUREUiArIDB4MzAwICsgU1pfNjRLIC0gMSwKKwkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0CQk9IElPTVVYX1RPX0lSUShNWDMxX1BJTl9HUElPM18xKSwKKwkJLmVuZAkJPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzNfMSksCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyBzbXNjOTExeF9pbmZvID0geworCS5mbGFncwkJPSBTTVNDOTExWF9VU0VfMzJCSVQgfCBTTVNDOTExWF9GT1JDRV9JTlRFUk5BTF9QSFkgfAorCQkJICBTTVNDOTExWF9TQVZFX01BQ19BRERSRVNTLAorCS5pcnFfcG9sYXJpdHkJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0xPVywKKwkuaXJxX3R5cGUJPSBTTVNDOTExWF9JUlFfVFlQRV9PUEVOX0RSQUlOLAorCS5waHlfaW50ZXJmYWNlCT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjbTAzN19ldGggPSB7CisJLm5hbWUJCT0gInNtc2M5MTF4IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtc2M5MTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gc21zYzkxMXhfcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzbXNjOTExeF9pbmZvLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRkYXRhX210ZF9yYW0gcGNtMDM4X3NyYW1fZGF0YSA9IHsKKwkuYmFua3dpZHRoID0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNtMDM4X3NyYW1fcmVzb3VyY2UgPSB7CisJLnN0YXJ0ID0gTVgzMV9DUzRfQkFTRV9BRERSLAorCS5lbmQgICA9IE1YMzFfQ1M0X0JBU0VfQUREUiArIDUxMiAqIDEwMjQgLSAxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNtMDM3X3NyYW1fZGV2aWNlID0geworCS5uYW1lID0gIm10ZC1yYW0iLAorCS5pZCA9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGNtMDM4X3NyYW1fZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzID0gMSwKKwkucmVzb3VyY2UgPSAmcGNtMDM4X3NyYW1fcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgcGNtMDM3X25hbmRfYm9hcmRfaW5mbyA9IHsKKwkud2lkdGggPSAxLAorCS5od19lY2MgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBwY20wMzdfaTJjXzFfZGF0YSA9IHsKKwkuYml0cmF0ZSA9IDEwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgcGNtMDM3X2kyY18yX2RhdGEgPSB7CisJLmJpdHJhdGUgPSAyMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXQyNF9wbGF0Zm9ybV9kYXRhIGJvYXJkX2VlcHJvbSA9IHsKKwkuYnl0ZV9sZW4gPSA0MDk2LAorCS5wYWdlX3NpemUgPSAzMiwKKwkuZmxhZ3MgPSBBVDI0X0ZMQUdfQUREUjE2LAorfTsKKworc3RhdGljIGludCBwY20wMzdfY2FtZXJhX3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IG9uKQoreworCS8qIGRpc2FibGUgb3IgZW5hYmxlIHRoZSBjYW1lcmEgaW4gWDcgb3IgWDggUENNOTcwIGNvbm5lY3RvciAqLworCWdwaW9fc2V0X3ZhbHVlKElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fQ1NJX0Q1KSwgIW9uKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBwY20wMzdfaTJjX2NhbWVyYVtdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oIm10OXQwMzEiLCAweDVkKSwKKwl9LCB7CisJCUkyQ19CT0FSRF9JTkZPKCJtdDl2MDIyIiwgMHg0OCksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGlua19tdDl2MDIyID0geworCS5idXNfaWQJCT0gMCwJCS8qIE11c3QgbWF0Y2ggd2l0aCB0aGUgY2FtZXJhIElEICovCisJLmJvYXJkX2luZm8JPSAmcGNtMDM3X2kyY19jYW1lcmFbMV0sCisJLmkyY19hZGFwdGVyX2lkCT0gMiwKKwkubW9kdWxlX25hbWUJPSAibXQ5djAyMiIsCit9OworCitzdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBpY2xpbmtfbXQ5dDAzMSA9IHsKKwkuYnVzX2lkCQk9IDAsCQkvKiBNdXN0IG1hdGNoIHdpdGggdGhlIGNhbWVyYSBJRCAqLworCS5wb3dlcgkJPSBwY20wMzdfY2FtZXJhX3Bvd2VyLAorCS5ib2FyZF9pbmZvCT0gJnBjbTAzN19pMmNfY2FtZXJhWzBdLAorCS5pMmNfYWRhcHRlcl9pZAk9IDIsCisJLm1vZHVsZV9uYW1lCT0gIm10OXQwMzEiLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBwY20wMzdfaTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJhdDI0IiwgMHg1MiksIC8qIEUwPTAsIEUxPTEsIEUyPTAgKi8KKwkJLnBsYXRmb3JtX2RhdGEgPSAmYm9hcmRfZWVwcm9tLAorCX0sIHsKKwkJSTJDX0JPQVJEX0lORk8oInBjZjg1NjMiLCAweDUxKSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwY20wMzdfbXQ5dDAzMSA9IHsKKwkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAorCS5pZAk9IDAsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rX210OXQwMzEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjbTAzN19tdDl2MDIyID0geworCS5uYW1lCT0gInNvYy1jYW1lcmEtcGRydiIsCisJLmlkCT0gMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZpY2xpbmtfbXQ5djAyMiwKKwl9LAorfTsKKworLyogTm90IGNvbm5lY3RlZCBieSBkZWZhdWx0ICovCisjaWZkZWYgUENNOTcwX1NESENfUldfU1dJVENICitzdGF0aWMgaW50IHBjbTk3MF9zZGhjMV9nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBncGlvX2dldF92YWx1ZShJT01VWF9UT19HUElPKE1YMzFfUElOX1NGUzYpKTsKK30KKyNlbmRpZgorCisjZGVmaW5lIFNESEMxX0dQSU9fV1AJSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9TRlM2KQorI2RlZmluZSBTREhDMV9HUElPX0RFVAlJT01VWF9UT19HUElPKE1YMzFfUElOX1NDSzYpCisKK3N0YXRpYyBpbnQgcGNtOTcwX3NkaGMxX2luaXQoc3RydWN0IGRldmljZSAqZGV2LCBpcnFfaGFuZGxlcl90IGRldGVjdF9pcnEsCisJCXZvaWQgKmRhdGEpCit7CisJaW50IHJldDsKKworCXJldCA9IGdwaW9fcmVxdWVzdChTREhDMV9HUElPX0RFVCwgInNkaGMtZGV0ZWN0Iik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWdwaW9fZGlyZWN0aW9uX2lucHV0KFNESEMxX0dQSU9fREVUKTsKKworI2lmZGVmIFBDTTk3MF9TREhDX1JXX1NXSVRDSAorCXJldCA9IGdwaW9fcmVxdWVzdChTREhDMV9HUElPX1dQLCAic2RoYy13cCIpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2dwaW9fZnJlZTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChTREhDMV9HUElPX1dQKTsKKyNlbmRpZgorCisJcmV0ID0gcmVxdWVzdF9pcnEoSU9NVVhfVE9fSVJRKE1YMzFfUElOX1NDSzYpLCBkZXRlY3RfaXJxLAorCQkJSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJCSJzZGhjLWRldGVjdCIsIGRhdGEpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2dwaW9fZnJlZV8yOworCisJcmV0dXJuIDA7CisKK2Vycl9ncGlvX2ZyZWVfMjoKKyNpZmRlZiBQQ005NzBfU0RIQ19SV19TV0lUQ0gKKwlncGlvX2ZyZWUoU0RIQzFfR1BJT19XUCk7CitlcnJfZ3Bpb19mcmVlOgorI2VuZGlmCisJZ3Bpb19mcmVlKFNESEMxX0dQSU9fREVUKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHBjbTk3MF9zZGhjMV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlmcmVlX2lycShJT01VWF9UT19JUlEoTVgzMV9QSU5fU0NLNiksIGRhdGEpOworCWdwaW9fZnJlZShTREhDMV9HUElPX0RFVCk7CisJZ3Bpb19mcmVlKFNESEMxX0dQSU9fV1ApOworfQorCitzdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIHNkaGNfcGRhdGEgPSB7CisjaWZkZWYgUENNOTcwX1NESENfUldfU1dJVENICisJLmdldF9ybyA9IHBjbTk3MF9zZGhjMV9nZXRfcm8sCisjZW5kaWYKKwkuaW5pdCA9IHBjbTk3MF9zZGhjMV9pbml0LAorCS5leGl0ID0gcGNtOTcwX3NkaGMxX2V4aXQsCit9OworCitzdHJ1Y3QgbXgzX2NhbWVyYV9wZGF0YSBjYW1lcmFfcGRhdGEgPSB7CisJLmRtYV9kZXYJPSAmbXgzX2lwdS5kZXYsCisJLmZsYWdzCQk9IE1YM19DQU1FUkFfREFUQVdJRFRIXzggfCBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xMCwKKwkubWNsa18xMGtoegk9IDIwMDAsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwY20wMzdfY2FtZXJhX2FsbG9jX2RtYShjb25zdCBzaXplX3QgYnVmX3NpemUpCit7CisJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOworCXZvaWQgKmJ1ZjsKKwlpbnQgZG1hOworCisJaWYgKGJ1Zl9zaXplIDwgMiAqIDEwMjQgKiAxMDI0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJ1ZiA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBidWZfc2l6ZSwgJmRtYV9oYW5kbGUsIEdGUF9LRVJORUwpOworCWlmICghYnVmKSB7CisJCXByX2VycigiJXM6IGNhbm5vdCBhbGxvY2F0ZSBjYW1lcmEgYnVmZmVyLW1lbW9yeVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZW1zZXQoYnVmLCAwLCBidWZfc2l6ZSk7CisKKwlkbWEgPSBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoJm14M19jYW1lcmEuZGV2LAorCQkJCQlkbWFfaGFuZGxlLCBkbWFfaGFuZGxlLCBidWZfc2l6ZSwKKwkJCQkJRE1BX01FTU9SWV9NQVAgfCBETUFfTUVNT1JZX0VYQ0xVU0lWRSk7CisKKwkvKiBUaGUgd2F5IHdlIGNhbGwgZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5IG9ubHkgYSBtYWxsb2MgY2FuIGZhaWwgKi8KKwlyZXR1cm4gZG1hICYgRE1BX01FTU9SWV9NQVAgPyAwIDogLUVOT01FTTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZwY20wMzdfZmxhc2gsCisJJnBjbTAzN19zcmFtX2RldmljZSwKKwkmcGNtMDM3X210OXQwMzEsCisJJnBjbTAzN19tdDl2MDIyLAorfTsKKworc3RhdGljIHN0cnVjdCBpcHVfcGxhdGZvcm1fZGF0YSBteDNfaXB1X2RhdGEgPSB7CisJLmlycV9iYXNlID0gTVhDX0lQVV9JUlFfU1RBUlQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSBmYl9tb2RlZGJbXSA9IHsKKwl7CisJCS8qIDI0MHgzMjAgQCA2MCBIeiBTaGFycCAqLworCQkubmFtZQkJPSAiU2hhcnAtTFEwMzVRN0RIMDYtUVZHQSIsCisJCS5yZWZyZXNoCT0gNjAsCisJCS54cmVzCQk9IDI0MCwKKwkJLnlyZXMJCT0gMzIwLAorCQkucGl4Y2xvY2sJPSAxODU5MjUsCisJCS5sZWZ0X21hcmdpbgk9IDksCisJCS5yaWdodF9tYXJnaW4JPSAxNiwKKwkJLnVwcGVyX21hcmdpbgk9IDcsCisJCS5sb3dlcl9tYXJnaW4JPSA5LAorCQkuaHN5bmNfbGVuCT0gMSwKKwkJLnZzeW5jX2xlbgk9IDEsCisJCS5zeW5jCQk9IEZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19TSEFSUF9NT0RFIHwKKwkJCQkgIEZCX1NZTkNfQ0xLX0lOVkVSVCB8IEZCX1NZTkNfQ0xLX0lETEVfRU4sCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCQkuZmxhZwkJPSAwLAorCX0sIHsKKwkJLyogMjQweDMyMCBAIDYwIEh6ICovCisJCS5uYW1lCQk9ICJUWDA5MCIsCisJCS5yZWZyZXNoCT0gNjAsCisJCS54cmVzCQk9IDI0MCwKKwkJLnlyZXMJCT0gMzIwLAorCQkucGl4Y2xvY2sJPSAzODI1NSwKKwkJLmxlZnRfbWFyZ2luCT0gMTQ0LAorCQkucmlnaHRfbWFyZ2luCT0gMCwKKwkJLnVwcGVyX21hcmdpbgk9IDcsCisJCS5sb3dlcl9tYXJnaW4JPSA0MCwKKwkJLmhzeW5jX2xlbgk9IDk2LAorCQkudnN5bmNfbGVuCT0gMSwKKwkJLnN5bmMJCT0gRkJfU1lOQ19WRVJUX0hJR0hfQUNUIHwgRkJfU1lOQ19PRV9BQ1RfSElHSCwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJCS5mbGFnCQk9IDAsCisJfSwgeworCQkvKiAyNDB4MzIwIEAgNjAgSHogKi8KKwkJLm5hbWUJCT0gIkNNRUwtT0xFRCIsCisJCS5yZWZyZXNoCT0gNjAsCisJCS54cmVzCQk9IDI0MCwKKwkJLnlyZXMJCT0gMzIwLAorCQkucGl4Y2xvY2sJPSAxODU5MjUsCisJCS5sZWZ0X21hcmdpbgk9IDksCisJCS5yaWdodF9tYXJnaW4JPSAxNiwKKwkJLnVwcGVyX21hcmdpbgk9IDcsCisJCS5sb3dlcl9tYXJnaW4JPSA5LAorCQkuaHN5bmNfbGVuCT0gMSwKKwkJLnZzeW5jX2xlbgk9IDEsCisJCS5zeW5jCQk9IEZCX1NZTkNfT0VfQUNUX0hJR0ggfCBGQl9TWU5DX0NMS19JTlZFUlQsCisJCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAorCQkuZmxhZwkJPSAwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG14M2ZiX3BsYXRmb3JtX2RhdGEgbXgzZmJfcGRhdGEgPSB7CisJLmRtYV9kZXYJPSAmbXgzX2lwdS5kZXYsCisJLm5hbWUJCT0gIlNoYXJwLUxRMDM1UTdESDA2LVFWR0EiLAorCS5tb2RlCQk9IGZiX21vZGVkYiwKKwkubnVtX21vZGVzCT0gQVJSQVlfU0laRShmYl9tb2RlZGIpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY205NzBfc2phMTAwMF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydCAgID0gTVgzMV9DUzVfQkFTRV9BRERSLAorCQkuZW5kICAgICA9IE1YMzFfQ1M1X0JBU0VfQUREUiArIDB4MTAwIC0gMSwKKwkJLmZsYWdzICAgPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydCAgID0gSU9NVVhfVE9fSVJRKElPTVVYX1BJTig0OCwgMTA1KSksCisJCS5lbmQgICAgID0gSU9NVVhfVE9fSVJRKElPTVVYX1BJTig0OCwgMTA1KSksCisJCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9MT1dFREdFLAorCX0sCit9OworCitzdHJ1Y3Qgc2phMTAwMF9wbGF0Zm9ybV9kYXRhIHBjbTk3MF9zamExMDAwX3BsYXRmb3JtX2RhdGEgPSB7CisJLmNsb2NrCQk9IDE2MDAwMDAwIC8gMiwKKwkub2NyCQk9IDB4NDAgfCAweDE4LAorCS5jZHIJCT0gMHg0MCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjbTk3MF9zamExMDAwID0geworCS5uYW1lID0gInNqYTEwMDBfcGxhdGZvcm0iLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBjbTk3MF9zamExMDAwX3BsYXRmb3JtX2RhdGEsCisJfSwKKwkucmVzb3VyY2UgPSBwY205NzBfc2phMTAwMF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHBjbTk3MF9zamExMDAwX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgb3RnX3BkYXRhID0geworCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEksCisJLmZsYWdzCT0gTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JLAorfTsKKworc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhID0geworCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEksCisJLmZsYWdzCT0gTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JLAorfTsKKworc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIG90Z19kZXZpY2VfcGRhdGEgPSB7CisJLm9wZXJhdGluZ19tb2RlID0gRlNMX1VTQjJfRFJfREVWSUNFLAorCS5waHlfbW9kZSAgICAgICA9IEZTTF9VU0IyX1BIWV9VTFBJLAorfTsKKworc3RhdGljIGludCBvdGdfbW9kZV9ob3N0OworCitzdGF0aWMgaW50IF9faW5pdCBwY20wMzdfb3RnX21vZGUoY2hhciAqb3B0aW9ucykKK3sKKwlpZiAoIXN0cmNtcChvcHRpb25zLCAiaG9zdCIpKQorCQlvdGdfbW9kZV9ob3N0ID0gMTsKKwllbHNlIGlmICghc3RyY21wKG9wdGlvbnMsICJkZXZpY2UiKSkKKwkJb3RnX21vZGVfaG9zdCA9IDA7CisJZWxzZQorCQlwcl9pbmZvKCJvdGdfbW9kZSBuZWl0aGVyIFwiaG9zdFwiIG5vciBcImRldmljZVwiLiAiCisJCQkiRGVmYXVsdGluZyB0byBkZXZpY2VcbiIpOworCXJldHVybiAwOworfQorX19zZXR1cCgib3RnX21vZGU9IiwgcGNtMDM3X290Z19tb2RlKTsKKworLyoKKyAqIEJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgbXhjX2JvYXJkX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCXUzMiB0bXA7CisKKwlteGNfaW9tdXhfc2V0X2dwcihNVVhfUEdQX1VIMiwgMSk7CisKKwlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhwY20wMzdfcGlucywgQVJSQVlfU0laRShwY20wMzdfcGlucyksCisJCQkicGNtMDM3Iik7CisKKyNkZWZpbmUgSDJfUEFEX0NGRyAoUEFEX0NUTF9EUlZfTUFYIHwgUEFEX0NUTF9TUkVfRkFTVCB8IFBBRF9DVExfSFlTX0NNT1MgXAorCQl8IFBBRF9DVExfT0RFX0NNT1MgfCBQQURfQ1RMXzEwMEtfUFUpCisKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JIMl9DTEssIEgyX1BBRF9DRkcpOworCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQkgyX0RJUiwgSDJfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCSDJfTlhULCBIMl9QQURfQ0ZHKTsKKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JIMl9TVFAsIEgyX1BBRF9DRkcpOworCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQkgyX0RBVEEwLCBIMl9QQURfQ0ZHKTsgLyogVVNCSDJfREFUQTAgKi8KKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JIMl9EQVRBMSwgSDJfUEFEX0NGRyk7IC8qIFVTQkgyX0RBVEExICovCisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fU1JYRDYsIEgyX1BBRF9DRkcpOwkvKiBVU0JIMl9EQVRBMiAqLworCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1NUWEQ2LCBIMl9QQURfQ0ZHKTsJLyogVVNCSDJfREFUQTMgKi8KKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9TRlMzLCBIMl9QQURfQ0ZHKTsJLyogVVNCSDJfREFUQTQgKi8KKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9TQ0szLCBIMl9QQURfQ0ZHKTsJLyogVVNCSDJfREFUQTUgKi8KKwlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9TUlhEMywgSDJfUEFEX0NGRyk7CS8qIFVTQkgyX0RBVEE2ICovCisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fU1RYRDMsIEgyX1BBRF9DRkcpOwkvKiBVU0JIMl9EQVRBNyAqLworCisJaWYgKHBjbTAzN192YXJpYW50KCkgPT0gUENNMDM3X0VFVCkKKwkJbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnMocGNtMDM3X3VhcnQxX3BpbnMsCisJCQlBUlJBWV9TSVpFKHBjbTAzN191YXJ0MV9waW5zKSwgInBjbTAzN191YXJ0MSIpOworCWVsc2UKKwkJbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnMocGNtMDM3X3VhcnQxX2hhbmRzaGFrZV9waW5zLAorCQkJQVJSQVlfU0laRShwY20wMzdfdWFydDFfaGFuZHNoYWtlX3BpbnMpLAorCQkJInBjbTAzN191YXJ0MSIpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgJnVhcnRfcGRhdGEpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTIsICZ1YXJ0X3BkYXRhKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y193MV9tYXN0ZXJfZGV2aWNlLCBOVUxMKTsKKworCS8qIExBTjkyMTcgSVJRIHBpbiAqLworCXJldCA9IGdwaW9fcmVxdWVzdChJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8zXzEpLCAibGFuOTIxNy1pcnEiKTsKKwlpZiAocmV0KQorCQlwcl93YXJuaW5nKCJjb3VsZCBub3QgZ2V0IExBTiBpcnEgZ3Bpb1xuIik7CisJZWxzZSB7CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fR1BJTzNfMSkpOworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBjbTAzN19ldGgpOworCX0KKworCisJLyogSTJDIGFkYXB0ZXJzIGFuZCBkZXZpY2VzICovCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgcGNtMDM3X2kyY19kZXZpY2VzLAorCQkJQVJSQVlfU0laRShwY20wMzdfaTJjX2RldmljZXMpKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMSwgJnBjbTAzN19pMmNfMV9kYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTIsICZwY20wMzdfaTJjXzJfZGF0YSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfbmFuZF9kZXZpY2UsICZwY20wMzdfbmFuZF9ib2FyZF9pbmZvKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNzZGhjX2RldmljZTAsICZzZGhjX3BkYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDNfaXB1LCAmbXgzX2lwdV9kYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDNfZmIsICZteDNmYl9wZGF0YSk7CisKKwkvKiBDU0kgKi8KKwkvKiBDYW1lcmEgcG93ZXI6IGRlZmF1bHQgLSBvZmYgKi8KKwlyZXQgPSBncGlvX3JlcXVlc3QoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9DU0lfRDUpLCAibXQ5dDAzMS1wb3dlciIpOworCWlmICghcmV0KQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9DU0lfRDUpLCAxKTsKKwllbHNlCisJCWljbGlua19tdDl0MDMxLnBvd2VyID0gTlVMTDsKKworCWlmICghcGNtMDM3X2NhbWVyYV9hbGxvY19kbWEoNCAqIDEwMjQgKiAxMDI0KSkKKwkJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXgzX2NhbWVyYSwgJmNhbWVyYV9wZGF0YSk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBjbTk3MF9zamExMDAwKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9VTFBJKQorCWlmIChvdGdfbW9kZV9ob3N0KSB7CisJCW90Z19wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCisJCQkJVVNCX09UR19EUlZfVkJVUyB8IFVTQl9PVEdfRFJWX1ZCVVNfRVhUKTsKKworCQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfb3RnX2hvc3QsICZvdGdfcGRhdGEpOworCX0KKworCXVzYmgyX3BkYXRhLm90ZyA9IG90Z191bHBpX2NyZWF0ZSgmbXhjX3VscGlfYWNjZXNzX29wcywKKwkJCQlVU0JfT1RHX0RSVl9WQlVTIHwgVVNCX09UR19EUlZfVkJVU19FWFQpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VzYmgyLCAmdXNiaDJfcGRhdGEpOworI2VuZGlmCisJaWYgKCFvdGdfbW9kZV9ob3N0KQorCQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfb3RnX3VkY19kZXZpY2UsICZvdGdfZGV2aWNlX3BkYXRhKTsKKworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcGNtMDM3X3RpbWVyX2luaXQodm9pZCkKK3sKKwlteDMxX2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKK30KKworc3RydWN0IHN5c190aW1lciBwY20wMzdfdGltZXIgPSB7CisJLmluaXQJPSBwY20wMzdfdGltZXJfaW5pdCwKK307CisKK01BQ0hJTkVfU1RBUlQoUENNMDM3LCAiUGh5dGVjIFBoeWNvcmUgcGNtMDM3IikKKwkvKiBNYWludGFpbmVyOiBQZW5ndXRyb25peCAqLworCS5waHlzX2lvCT0gTVgzMV9BSVBTMV9CQVNFX0FERFIsCisJLmlvX3BnX29mZnN0CT0gKE1YMzFfQUlQUzFfQkFTRV9BRERSX1ZJUlQgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcyAgICA9IE1YM3hfUEhZU19PRkZTRVQgKyAweDEwMCwKKwkubWFwX2lvICAgICAgICAgPSBteDMxX21hcF9pbywKKwkuaW5pdF9pcnEgICAgICAgPSBteDMxX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAorCS50aW1lciAgICAgICAgICA9ICZwY20wMzdfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDM3X2VldC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1wY20wMzdfZWV0LmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtbXgzL3BjbTAzN19lZXQuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1wY20wMzdfZWV0LmMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL21hY2gtcGNtMDQzLmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLXBjbTA0My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZjFlYzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLXBjbTA0My5jCkBAIC0wLDAgKzEsNDEzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOSBTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BsYXQtcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3NtYzkxMXguaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy9hdDI0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi91bHBpLmg+CisjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpZiBkZWZpbmVkIENPTkZJR19JMkNfSU1YIHx8IGRlZmluZWQgQ09ORklHX0kyQ19JTVhfTU9EVUxFCisjaW5jbHVkZSA8bWFjaC9pMmMuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzNS5oPgorI2luY2x1ZGUgPG1hY2gvaXB1Lmg+CisjaW5jbHVkZSA8bWFjaC9teDNmYi5oPgorI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KKyNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+CisjaW5jbHVkZSA8bWFjaC91bHBpLmg+CisjaW5jbHVkZSA8bWFjaC9hdWRtdXguaD4KKyNpbmNsdWRlIDxtYWNoL3NzaS5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSBmYl9tb2RlZGJbXSA9IHsKKwl7CisJCS8qIDI0MHgzMjAgQCA2MCBIeiAqLworCQkubmFtZQkJPSAiU2hhcnAtTFEwMzVRNyIsCisJCS5yZWZyZXNoCT0gNjAsCisJCS54cmVzCQk9IDI0MCwKKwkJLnlyZXMJCT0gMzIwLAorCQkucGl4Y2xvY2sJPSAxODU5MjUsCisJCS5sZWZ0X21hcmdpbgk9IDksCisJCS5yaWdodF9tYXJnaW4JPSAxNiwKKwkJLnVwcGVyX21hcmdpbgk9IDcsCisJCS5sb3dlcl9tYXJnaW4JPSA5LAorCQkuaHN5bmNfbGVuCT0gMSwKKwkJLnZzeW5jX2xlbgk9IDEsCisJCS5zeW5jCQk9IEZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19TSEFSUF9NT0RFIHwgRkJfU1lOQ19DTEtfSU5WRVJUIHwgRkJfU1lOQ19DTEtfSURMRV9FTiwKKwkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCisJCS5mbGFnCQk9IDAsCisJfSwgeworCQkvKiAyNDB4MzIwIEAgNjAgSHogKi8KKwkJLm5hbWUJCT0gIlRYMDkwIiwKKwkJLnJlZnJlc2gJPSA2MCwKKwkJLnhyZXMJCT0gMjQwLAorCQkueXJlcwkJPSAzMjAsCisJCS5waXhjbG9jawk9IDM4MjU1LAorCQkubGVmdF9tYXJnaW4JPSAxNDQsCisJCS5yaWdodF9tYXJnaW4JPSAwLAorCQkudXBwZXJfbWFyZ2luCT0gNywKKwkJLmxvd2VyX21hcmdpbgk9IDQwLAorCQkuaHN5bmNfbGVuCT0gOTYsCisJCS52c3luY19sZW4JPSAxLAorCQkuc3luYwkJPSBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QgfCBGQl9TWU5DX09FX0FDVF9ISUdILAorCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKKwkJLmZsYWcJCT0gMCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBpcHVfcGxhdGZvcm1fZGF0YSBteDNfaXB1X2RhdGEgPSB7CisJLmlycV9iYXNlID0gTVhDX0lQVV9JUlFfU1RBUlQsCit9OworCitzdGF0aWMgc3RydWN0IG14M2ZiX3BsYXRmb3JtX2RhdGEgbXgzZmJfcGRhdGEgPSB7CisJLmRtYV9kZXYJPSAmbXgzX2lwdS5kZXYsCisJLm5hbWUJCT0gIlNoYXJwLUxRMDM1UTciLAorCS5tb2RlCQk9IGZiX21vZGVkYiwKKwkubnVtX21vZGVzCT0gQVJSQVlfU0laRShmYl9tb2RlZGIpLAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGNtMDQzX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoICA9IDIsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHBjbTA0M19mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJPSAweGEwMDAwMDAwLAorCS5lbmQJPSAweGExZmZmZmZmLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNtMDQzX2ZsYXNoID0geworCS5uYW1lCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAk9IDAsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgID0gJnBjbTA0M19mbGFzaF9kYXRhLAorCX0sCisJLnJlc291cmNlID0gJnBjbTA0M19mbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCisjaWYgZGVmaW5lZCBDT05GSUdfSTJDX0lNWCB8fCBkZWZpbmVkIENPTkZJR19JMkNfSU1YX01PRFVMRQorc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBwY20wNDNfaTJjXzFfZGF0YSA9IHsKKwkuYml0cmF0ZSA9IDUwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBhdDI0X3BsYXRmb3JtX2RhdGEgYm9hcmRfZWVwcm9tID0geworCS5ieXRlX2xlbiA9IDQwOTYsCisJLnBhZ2Vfc2l6ZSA9IDMyLAorCS5mbGFncyA9IEFUMjRfRkxBR19BRERSMTYsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHBjbTA0M19pMmNfZGV2aWNlc1tdID0geworICAgICAgIHsKKwkJSTJDX0JPQVJEX0lORk8oImF0MjQiLCAweDUyKSwgLyogRTA9MCwgRTE9MSwgRTI9MCAqLworCQkucGxhdGZvcm1fZGF0YSA9ICZib2FyZF9lZXByb20sCisJfSwgeworCQlJMkNfQk9BUkRfSU5GTygicGNmODU2MyIsIDB4NTEpLAorCX0KK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0geworCSZwY20wNDNfZmxhc2gsCisJJm14Y19mZWNfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBwYWRfZGVzYyBwY20wNDNfcGFkc1tdID0geworCS8qIFVBUlQxICovCisJTVgzNV9QQURfQ1RTMV9fVUFSVDFfQ1RTLAorCU1YMzVfUEFEX1JUUzFfX1VBUlQxX1JUUywKKwlNWDM1X1BBRF9UWEQxX19VQVJUMV9UWERfTVVYLAorCU1YMzVfUEFEX1JYRDFfX1VBUlQxX1JYRF9NVVgsCisJLyogVUFSVDIgKi8KKwlNWDM1X1BBRF9DVFMyX19VQVJUMl9DVFMsCisJTVgzNV9QQURfUlRTMl9fVUFSVDJfUlRTLAorCU1YMzVfUEFEX1RYRDJfX1VBUlQyX1RYRF9NVVgsCisJTVgzNV9QQURfUlhEMl9fVUFSVDJfUlhEX01VWCwKKwkvKiBGRUMgKi8KKwlNWDM1X1BBRF9GRUNfVFhfQ0xLX19GRUNfVFhfQ0xLLAorCU1YMzVfUEFEX0ZFQ19SWF9DTEtfX0ZFQ19SWF9DTEssCisJTVgzNV9QQURfRkVDX1JYX0RWX19GRUNfUlhfRFYsCisJTVgzNV9QQURfRkVDX0NPTF9fRkVDX0NPTCwKKwlNWDM1X1BBRF9GRUNfUkRBVEEwX19GRUNfUkRBVEFfMCwKKwlNWDM1X1BBRF9GRUNfVERBVEEwX19GRUNfVERBVEFfMCwKKwlNWDM1X1BBRF9GRUNfVFhfRU5fX0ZFQ19UWF9FTiwKKwlNWDM1X1BBRF9GRUNfTURDX19GRUNfTURDLAorCU1YMzVfUEFEX0ZFQ19NRElPX19GRUNfTURJTywKKwlNWDM1X1BBRF9GRUNfVFhfRVJSX19GRUNfVFhfRVJSLAorCU1YMzVfUEFEX0ZFQ19SWF9FUlJfX0ZFQ19SWF9FUlIsCisJTVgzNV9QQURfRkVDX0NSU19fRkVDX0NSUywKKwlNWDM1X1BBRF9GRUNfUkRBVEExX19GRUNfUkRBVEFfMSwKKwlNWDM1X1BBRF9GRUNfVERBVEExX19GRUNfVERBVEFfMSwKKwlNWDM1X1BBRF9GRUNfUkRBVEEyX19GRUNfUkRBVEFfMiwKKwlNWDM1X1BBRF9GRUNfVERBVEEyX19GRUNfVERBVEFfMiwKKwlNWDM1X1BBRF9GRUNfUkRBVEEzX19GRUNfUkRBVEFfMywKKwlNWDM1X1BBRF9GRUNfVERBVEEzX19GRUNfVERBVEFfMywKKwkvKiBJMkMxICovCisJTVgzNV9QQURfSTJDMV9DTEtfX0kyQzFfU0NMLAorCU1YMzVfUEFEX0kyQzFfREFUX19JMkMxX1NEQSwKKwkvKiBEaXNwbGF5ICovCisJTVgzNV9QQURfTEQwX19JUFVfRElTUEJfREFUXzAsCisJTVgzNV9QQURfTEQxX19JUFVfRElTUEJfREFUXzEsCisJTVgzNV9QQURfTEQyX19JUFVfRElTUEJfREFUXzIsCisJTVgzNV9QQURfTEQzX19JUFVfRElTUEJfREFUXzMsCisJTVgzNV9QQURfTEQ0X19JUFVfRElTUEJfREFUXzQsCisJTVgzNV9QQURfTEQ1X19JUFVfRElTUEJfREFUXzUsCisJTVgzNV9QQURfTEQ2X19JUFVfRElTUEJfREFUXzYsCisJTVgzNV9QQURfTEQ3X19JUFVfRElTUEJfREFUXzcsCisJTVgzNV9QQURfTEQ4X19JUFVfRElTUEJfREFUXzgsCisJTVgzNV9QQURfTEQ5X19JUFVfRElTUEJfREFUXzksCisJTVgzNV9QQURfTEQxMF9fSVBVX0RJU1BCX0RBVF8xMCwKKwlNWDM1X1BBRF9MRDExX19JUFVfRElTUEJfREFUXzExLAorCU1YMzVfUEFEX0xEMTJfX0lQVV9ESVNQQl9EQVRfMTIsCisJTVgzNV9QQURfTEQxM19fSVBVX0RJU1BCX0RBVF8xMywKKwlNWDM1X1BBRF9MRDE0X19JUFVfRElTUEJfREFUXzE0LAorCU1YMzVfUEFEX0xEMTVfX0lQVV9ESVNQQl9EQVRfMTUsCisJTVgzNV9QQURfTEQxNl9fSVBVX0RJU1BCX0RBVF8xNiwKKwlNWDM1X1BBRF9MRDE3X19JUFVfRElTUEJfREFUXzE3LAorCU1YMzVfUEFEX0QzX0hTWU5DX19JUFVfRElTUEJfRDNfSFNZTkMsCisJTVgzNV9QQURfRDNfRlBTSElGVF9fSVBVX0RJU1BCX0QzX0NMSywKKwlNWDM1X1BBRF9EM19EUkRZX19JUFVfRElTUEJfRDNfRFJEWSwKKwlNWDM1X1BBRF9DT05UUkFTVF9fSVBVX0RJU1BCX0NPTlRSLAorCU1YMzVfUEFEX0QzX1ZTWU5DX19JUFVfRElTUEJfRDNfVlNZTkMsCisJTVgzNV9QQURfRDNfUkVWX19JUFVfRElTUEJfRDNfUkVWLAorCU1YMzVfUEFEX0QzX0NMU19fSVBVX0RJU1BCX0QzX0NMUywKKwkvKiBncGlvICovCisJTVgzNV9QQURfQVRBX0NTMF9fR1BJTzJfNiwKKwkvKiBVU0IgaG9zdCAqLworCU1YMzVfUEFEX0kyQzJfQ0xLX19VU0JfVE9QX1VTQkgyX1BXUiwKKwlNWDM1X1BBRF9JMkMyX0RBVF9fVVNCX1RPUF9VU0JIMl9PQywKKwkvKiBTU0kgKi8KKwlNWDM1X1BBRF9TVFhGUzRfX0FVRE1VWF9BVUQ0X1RYRlMsCisJTVgzNV9QQURfU1RYRDRfX0FVRE1VWF9BVUQ0X1RYRCwKKwlNWDM1X1BBRF9TUlhENF9fQVVETVVYX0FVRDRfUlhELAorCU1YMzVfUEFEX1NDSzRfX0FVRE1VWF9BVUQ0X1RYQywKK307CisKKyNkZWZpbmUgQUM5N19HUElPX1RYRlMJKDEgKiAzMiArIDMxKQorI2RlZmluZSBBQzk3X0dQSU9fVFhECSgxICogMzIgKyAyOCkKKyNkZWZpbmUgQUM5N19HUElPX1JFU0VUCSgxICogMzIgKyAwKQorCitzdGF0aWMgdm9pZCBwY20wNDNfYWM5N193YXJtX3Jlc2V0KHN0cnVjdCBzbmRfYWM5NyAqYWM5NykKK3sKKwlzdHJ1Y3QgcGFkX2Rlc2MgdHhmc19ncGlvID0gTVgzNV9QQURfU1RYRlM0X19HUElPMl8zMTsKKwlzdHJ1Y3QgcGFkX2Rlc2MgdHhmcyA9IE1YMzVfUEFEX1NUWEZTNF9fQVVETVVYX0FVRDRfVFhGUzsKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEFDOTdfR1BJT19UWEZTLCAiU1NJIik7CisJaWYgKHJldCkgeworCQlwcmludGsoImZhaWxlZCB0byBnZXQgR1BJT19UWEZTOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuOworCX0KKworCW14Y19pb211eF92M19zZXR1cF9wYWQoJnR4ZnNfZ3Bpbyk7CisKKwkvKiB3YXJtIHJlc2V0ICovCisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEFDOTdfR1BJT19UWEZTLCAxKTsKKwl1ZGVsYXkoMik7CisJZ3Bpb19zZXRfdmFsdWUoQUM5N19HUElPX1RYRlMsIDApOworCisJZ3Bpb19mcmVlKEFDOTdfR1BJT19UWEZTKTsKKwlteGNfaW9tdXhfdjNfc2V0dXBfcGFkKCZ0eGZzKTsKK30KKworc3RhdGljIHZvaWQgcGNtMDQzX2FjOTdfY29sZF9yZXNldChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpCit7CisJc3RydWN0IHBhZF9kZXNjIHR4ZnNfZ3BpbyA9IE1YMzVfUEFEX1NUWEZTNF9fR1BJTzJfMzE7CisJc3RydWN0IHBhZF9kZXNjIHR4ZnMgPSBNWDM1X1BBRF9TVFhGUzRfX0FVRE1VWF9BVUQ0X1RYRlM7CisJc3RydWN0IHBhZF9kZXNjIHR4ZF9ncGlvID0gTVgzNV9QQURfU1RYRDRfX0dQSU8yXzI4OworCXN0cnVjdCBwYWRfZGVzYyB0eGQgPSBNWDM1X1BBRF9TVFhENF9fQVVETVVYX0FVRDRfVFhEOworCXN0cnVjdCBwYWRfZGVzYyByZXNldF9ncGlvID0gTVgzNV9QQURfU0QyX0NNRF9fR1BJTzJfMDsKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEFDOTdfR1BJT19UWEZTLCAiU1NJIik7CisJaWYgKHJldCkKKwkJZ290byBlcnIxOworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEFDOTdfR1BJT19UWEQsICJTU0kiKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjI7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoQUM5N19HUElPX1JFU0VULCAiU1NJIik7CisJaWYgKHJldCkKKwkJZ290byBlcnIzOworCisJbXhjX2lvbXV4X3YzX3NldHVwX3BhZCgmdHhmc19ncGlvKTsKKwlteGNfaW9tdXhfdjNfc2V0dXBfcGFkKCZ0eGRfZ3Bpbyk7CisJbXhjX2lvbXV4X3YzX3NldHVwX3BhZCgmcmVzZXRfZ3Bpbyk7CisKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoQUM5N19HUElPX1RYRlMsIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChBQzk3X0dQSU9fVFhELCAwKTsKKworCS8qIGNvbGQgcmVzZXQgKi8KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoQUM5N19HUElPX1JFU0VULCAwKTsKKwl1ZGVsYXkoMTApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChBQzk3X0dQSU9fUkVTRVQsIDEpOworCisJbXhjX2lvbXV4X3YzX3NldHVwX3BhZCgmdHhkKTsKKwlteGNfaW9tdXhfdjNfc2V0dXBfcGFkKCZ0eGZzKTsKKworCWdwaW9fZnJlZShBQzk3X0dQSU9fUkVTRVQpOworZXJyMzoKKwlncGlvX2ZyZWUoQUM5N19HUElPX1RYRCk7CitlcnIyOgorCWdwaW9fZnJlZShBQzk3X0dQSU9fVFhGUyk7CitlcnIxOgorCWlmIChyZXQpCisJCXByaW50aygiJXMgZmFpbGVkIHdpdGggJWRcbiIsIF9fZnVuY19fLCByZXQpOworCW1kZWxheSgxKTsKK30KKworc3RhdGljIHN0cnVjdCBpbXhfc3NpX3BsYXRmb3JtX2RhdGEgcGNtMDQzX3NzaV9wZGF0YSA9IHsKKwkuYWM5N19yZXNldCA9IHBjbTA0M19hYzk3X2NvbGRfcmVzZXQsCisJLmFjOTdfd2FybV9yZXNldCA9IHBjbTA0M19hYzk3X3dhcm1fcmVzZXQsCisJLmZsYWdzID0gSU1YX1NTSV9VU0VfQUM5NywKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSBwY20wMzdfbmFuZF9ib2FyZF9pbmZvID0geworCS53aWR0aCA9IDEsCisJLmh3X2VjYyA9IDEsCit9OworCitzdGF0aWMgc3RydWN0IG14Y191c2JoX3BsYXRmb3JtX2RhdGEgb3RnX3BkYXRhID0geworCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VUTUksCisJLmZsYWdzCT0gTVhDX0VIQ0lfSU5URVJGQUNFX0RJRkZfVU5JLAorfTsKKworc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgxX3BkYXRhID0geworCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1NFUklBTCwKKwkuZmxhZ3MJPSBNWENfRUhDSV9JTlRFUkZBQ0VfU0lOR0xFX1VOSSB8IE1YQ19FSENJX0lOVEVSTkFMX1BIWSB8CisJCSAgTVhDX0VIQ0lfSVBQVUVfRE9XTiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSBvdGdfZGV2aWNlX3BkYXRhID0geworCS5vcGVyYXRpbmdfbW9kZSA9IEZTTF9VU0IyX0RSX0RFVklDRSwKKwkucGh5X21vZGUgICAgICAgPSBGU0xfVVNCMl9QSFlfVVRNSSwKK307CisKK3N0YXRpYyBpbnQgb3RnX21vZGVfaG9zdDsKKworc3RhdGljIGludCBfX2luaXQgcGNtMDQzX290Z19tb2RlKGNoYXIgKm9wdGlvbnMpCit7CisJaWYgKCFzdHJjbXAob3B0aW9ucywgImhvc3QiKSkKKwkJb3RnX21vZGVfaG9zdCA9IDE7CisJZWxzZSBpZiAoIXN0cmNtcChvcHRpb25zLCAiZGV2aWNlIikpCisJCW90Z19tb2RlX2hvc3QgPSAwOworCWVsc2UKKwkJcHJfaW5mbygib3RnX21vZGUgbmVpdGhlciBcImhvc3RcIiBub3IgXCJkZXZpY2VcIi4gIgorCQkJIkRlZmF1bHRpbmcgdG8gZGV2aWNlXG4iKTsKKwlyZXR1cm4gMDsKK30KK19fc2V0dXAoIm90Z19tb2RlPSIsIHBjbTA0M19vdGdfbW9kZSk7CisKKy8qCisgKiBCb2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IG14Y19ib2FyZF9pbml0KHZvaWQpCit7CisJbXhjX2lvbXV4X3YzX3NldHVwX211bHRpcGxlX3BhZHMocGNtMDQzX3BhZHMsIEFSUkFZX1NJWkUocGNtMDQzX3BhZHMpKTsKKworCW14Y19hdWRtdXhfdjJfY29uZmlndXJlX3BvcnQoMywKKwkJCU1YQ19BVURNVVhfVjJfUFRDUl9TWU4gfCAvKiA0d2lyZSBtb2RlICovCisJCQlNWENfQVVETVVYX1YyX1BUQ1JfVEZTRUwoMCkgfAorCQkJTVhDX0FVRE1VWF9WMl9QVENSX1RGU0RJUiwKKwkJCU1YQ19BVURNVVhfVjJfUERDUl9SWERTRUwoMCkpOworCisJbXhjX2F1ZG11eF92Ml9jb25maWd1cmVfcG9ydCgwLAorCQkJTVhDX0FVRE1VWF9WMl9QVENSX1NZTiB8IC8qIDR3aXJlIG1vZGUgKi8KKwkJCU1YQ19BVURNVVhfVjJfUFRDUl9UQ1NFTCgzKSB8CisJCQlNWENfQVVETVVYX1YyX1BUQ1JfVENMS0RJUiwgLyogY2xvY2sgaXMgb3V0cHV0ICovCisJCQlNWENfQVVETVVYX1YyX1BEQ1JfUlhEU0VMKDMpKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIEFSUkFZX1NJWkUoZGV2aWNlcykpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19uYW5kX2RldmljZSwgJnBjbTAzN19uYW5kX2JvYXJkX2luZm8pOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJmlteF9zc2lfZGV2aWNlMCwgJnBjbTA0M19zc2lfcGRhdGEpOworCisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMSwgJnVhcnRfcGRhdGEpOworCisjaWYgZGVmaW5lZCBDT05GSUdfSTJDX0lNWCB8fCBkZWZpbmVkIENPTkZJR19JMkNfSU1YX01PRFVMRQorCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsIHBjbTA0M19pMmNfZGV2aWNlcywKKwkJCUFSUkFZX1NJWkUocGNtMDQzX2kyY19kZXZpY2VzKSk7CisKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTAsICZwY20wNDNfaTJjXzFfZGF0YSk7CisjZW5kaWYKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14M19pcHUsICZteDNfaXB1X2RhdGEpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14M19mYiwgJm14M2ZiX3BkYXRhKTsKKworI2lmIGRlZmluZWQoQ09ORklHX1VTQl9VTFBJKQorCWlmIChvdGdfbW9kZV9ob3N0KSB7CisJCW90Z19wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCisJCQkJVVNCX09UR19EUlZfVkJVUyB8IFVTQl9PVEdfRFJWX1ZCVVNfRVhUKTsKKworCQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfb3RnX2hvc3QsICZvdGdfcGRhdGEpOworCX0KKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMSwgJnVzYmgxX3BkYXRhKTsKKyNlbmRpZgorCWlmICghb3RnX21vZGVfaG9zdCkKKwkJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z191ZGNfZGV2aWNlLCAmb3RnX2RldmljZV9wZGF0YSk7CisKK30KKworc3RhdGljIHZvaWQgX19pbml0IHBjbTA0M190aW1lcl9pbml0KHZvaWQpCit7CisJbXgzNV9jbG9ja3NfaW5pdCgpOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIHBjbTA0M190aW1lciA9IHsKKwkuaW5pdAk9IHBjbTA0M190aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChQQ00wNDMsICJQaHl0ZWMgUGh5Y29yZSBwY20wNDMiKQorCS8qIE1haW50YWluZXI6IFBlbmd1dHJvbml4ICovCisJLnBoeXNfaW8JPSBNWDM1X0FJUFMxX0JBU0VfQUREUiwKKwkuaW9fcGdfb2Zmc3QJPSAoKE1YMzVfQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMgICAgPSBNWDN4X1BIWVNfT0ZGU0VUICsgMHgxMDAsCisJLm1hcF9pbyAgICAgICAgID0gbXgzNV9tYXBfaW8sCisJLmluaXRfaXJxICAgICAgID0gbXgzNV9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lICAgPSBteGNfYm9hcmRfaW5pdCwKKwkudGltZXIgICAgICAgICAgPSAmcGNtMDQzX3RpbWVyLAorTUFDSElORV9FTkQKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1xb25nLmMgYi9hcmNoL2FybS9tYWNoLW14My9tYWNoLXFvbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWI1YjgzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbWFjaC1xb25nLmMKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IElseWEgWWFub2ssIEVtY3JhZnQgU3lzdGVtcyBMdGQsIDx5YW5va0BlbWNyYWZ0LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLXFvbmcuaD4KKyNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KKyNpbmNsdWRlICJkZXZpY2VzLmgiCisKKy8qIEZQR0EgZGVmaW5lcyAqLworI2RlZmluZSBRT05HX0ZQR0FfVkVSU0lPTihtYWpvciwgbWlub3IsIHJldikJXAorCSgoKG1ham9yICYgMHhGKSA8PCAxMikgfCAoKG1pbm9yICYgMHhGKSA8PCA4KSB8IChyZXYgJiAweEZGKSkKKworI2RlZmluZSBRT05HX0ZQR0FfQkFTRUFERFIgCQlNWDMxX0NTMV9CQVNFX0FERFIKKyNkZWZpbmUgUU9OR19GUEdBX1BFUklQSF9TSVpFIAkJKDEgPDwgMjQpCisKKyNkZWZpbmUgUU9OR19GUEdBX0NUUkxfQkFTRUFERFIJCVFPTkdfRlBHQV9CQVNFQUREUgorI2RlZmluZSBRT05HX0ZQR0FfQ1RSTF9TSVpFIAkJMHgxMAorLyogRlBHQSBjb250cm9sIHJlZ2lzdGVycyAqLworI2RlZmluZSBRT05HX0ZQR0FfQ1RSTF9WRVJTSU9OCQkweDAwCisKKyNkZWZpbmUgUU9OR19ETkVUX0lECQkxCisjZGVmaW5lIFFPTkdfRE5FVF9CQVNFQUREUglcCisJKFFPTkdfRlBHQV9CQVNFQUREUiArIFFPTkdfRE5FVF9JRCAqIFFPTkdfRlBHQV9QRVJJUEhfU0laRSkKKyNkZWZpbmUgUU9OR19ETkVUX1NJWkUgCQkweDAwMDAxMDAwCisKKyNkZWZpbmUgUU9OR19GUEdBX0lSUQkJSU9NVVhfVE9fSVJRKE1YMzFfUElOX0RUUl9EQ0UxKQorCisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBib2FyZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4KKyAqLworCitzdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0geworCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCit9OworCitzdGF0aWMgaW50IHVhcnRfcGluc1tdID0geworCU1YMzFfUElOX0NUUzFfX0NUUzEsCisJTVgzMV9QSU5fUlRTMV9fUlRTMSwKKwlNWDMxX1BJTl9UWEQxX19UWEQxLAorCU1YMzFfUElOX1JYRDFfX1JYRDEKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBteGNfaW5pdF9pbXhfdWFydCh2b2lkKQoreworCW14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKHVhcnRfcGlucywgQVJSQVlfU0laRSh1YXJ0X3BpbnMpLAorCQkJInVhcnQtMCIpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbmV0X3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJPSAiZG5ldC1tZW1vcnkiLAorCQkuc3RhcnQJPSBRT05HX0RORVRfQkFTRUFERFIsCisJCS5lbmQJPSBRT05HX0RORVRfQkFTRUFERFIgKyBRT05HX0RORVRfU0laRSAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0CT0gUU9OR19GUEdBX0lSUSwKKwkJLmVuZAk9IFFPTkdfRlBHQV9JUlEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbmV0X2RldmljZSA9IHsKKwkubmFtZQkJCT0gImRuZXQiLAorCS5pZAkJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShkbmV0X3Jlc291cmNlcyksCisJLnJlc291cmNlCQk9IGRuZXRfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcW9uZ19pbml0X2RuZXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbmV0X2RldmljZSk7CisJcmV0dXJuIHJldDsKK30KKworLyogTVREIE5PUiBmbGFzaCAqLworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBxb25nX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoID0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcW9uZ19mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQgPSBNWDMxX0NTMF9CQVNFX0FERFIsCisJLmVuZCA9IE1YMzFfQ1MwX0JBU0VfQUREUiArIFFPTkdfTk9SX1NJWkUgLSAxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcW9uZ19ub3JfbXRkX2RldmljZSA9IHsKKwkubmFtZSA9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQgPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnFvbmdfZmxhc2hfZGF0YSwKKwkJfSwKKwkucmVzb3VyY2UgPSAmcW9uZ19mbGFzaF9yZXNvdXJjZSwKKwkubnVtX3Jlc291cmNlcyA9IDEsCit9OworCitzdGF0aWMgdm9pZCBxb25nX2luaXRfbm9yX210ZCh2b2lkKQoreworCSh2b2lkKXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcW9uZ19ub3JfbXRkX2RldmljZSk7Cit9CisKKy8qCisgKiBIYXJkd2FyZSBzcGVjaWZpYyBhY2Nlc3MgdG8gY29udHJvbC1saW5lcworICovCitzdGF0aWMgdm9pZCBxb25nX25hbmRfY21kX2N0cmwoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQsIHVuc2lnbmVkIGludCBjdHJsKQoreworCXN0cnVjdCBuYW5kX2NoaXAgKm5hbmRfY2hpcCA9IG10ZC0+cHJpdjsKKworCWlmIChjbWQgPT0gTkFORF9DTURfTk9ORSkKKwkJcmV0dXJuOworCisJaWYgKGN0cmwgJiBOQU5EX0NMRSkKKwkJd3JpdGViKGNtZCwgbmFuZF9jaGlwLT5JT19BRERSX1cgKyAoMSA8PCAyNCkpOworCWVsc2UKKwkJd3JpdGViKGNtZCwgbmFuZF9jaGlwLT5JT19BRERSX1cgKyAoMSA8PCAyMykpOworfQorCisvKgorICogUmVhZCB0aGUgRGV2aWNlIFJlYWR5IHBpbi4KKyAqLworc3RhdGljIGludCBxb25nX25hbmRfZGV2aWNlX3JlYWR5KHN0cnVjdCBtdGRfaW5mbyAqbXRkKQoreworCXJldHVybiBncGlvX2dldF92YWx1ZShJT01VWF9UT19HUElPKE1YMzFfUElOX05GUkIpKTsKK30KKworc3RhdGljIHZvaWQgcW9uZ19uYW5kX3NlbGVjdF9jaGlwKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBpbnQgY2hpcCkKK3sKKwlpZiAoY2hpcCA+PSAwKQorCQlncGlvX3NldF92YWx1ZShJT01VWF9UT19HUElPKE1YMzFfUElOX05GQ0VfQiksIDApOworCWVsc2UKKwkJZ3Bpb19zZXRfdmFsdWUoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9ORkNFX0IpLCAxKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9uYW5kX2RhdGEgcW9uZ19uYW5kX2RhdGEgPSB7CisJLmNoaXAgPSB7CisJCS5jaGlwX2RlbGF5CQk9IDIwLAorCQkub3B0aW9ucwkJPSAwLAorCX0sCisJLmN0cmwgPSB7CisJCS5jbWRfY3RybCAJCT0gcW9uZ19uYW5kX2NtZF9jdHJsLAorCQkuZGV2X3JlYWR5CQk9IHFvbmdfbmFuZF9kZXZpY2VfcmVhZHksCisJCS5zZWxlY3RfY2hpcAkJPSBxb25nX25hbmRfc2VsZWN0X2NoaXAsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBxb25nX25hbmRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0ICAJPSBNWDMxX0NTM19CQVNFX0FERFIsCisJLmVuZCAgICAJPSBNWDMxX0NTM19CQVNFX0FERFIgKyBTWl8zMk0gLSAxLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHFvbmdfbmFuZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gImdlbl9uYW5kIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnFvbmdfbmFuZF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZxb25nX25hbmRfcmVzb3VyY2UsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgcW9uZ19pbml0X25hbmRfbXRkKHZvaWQpCit7CisJLyogaW5pdCBDUyAqLworCW14MzFfc2V0dXBfd2VpbWNzKDMsIDB4MDAwMDRmMDAsIDB4MjAwMTNiMzEsIDB4MDAwMjA4MDApOworCW14Y19pb211eF9zZXRfZ3ByKE1VWF9TRENUTF9DU0QxX1NFTCwgdHJ1ZSk7CisKKwkvKiBlbmFibGUgcGluICovCisJbXhjX2lvbXV4X21vZGUoSU9NVVhfTU9ERShNWDMxX1BJTl9ORkNFX0IsIElPTVVYX0NPTkZJR19HUElPKSk7CisJaWYgKCFncGlvX3JlcXVlc3QoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9ORkNFX0IpLCAibmFuZF9lbmFibGUiKSkKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fTkZDRV9CKSwgMCk7CisKKwkvKiByZWFkeS9idXN5IHBpbiAqLworCW14Y19pb211eF9tb2RlKElPTVVYX01PREUoTVgzMV9QSU5fTkZSQiwgSU9NVVhfQ09ORklHX0dQSU8pKTsKKwlpZiAoIWdwaW9fcmVxdWVzdChJT01VWF9UT19HUElPKE1YMzFfUElOX05GUkIpLCAibmFuZF9yZHkiKSkKKwkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9ORlJCKSk7CisKKwkvKiB3cml0ZSBwcm90ZWN0IHBpbiAqLworCW14Y19pb211eF9tb2RlKElPTVVYX01PREUoTVgzMV9QSU5fTkZXUF9CLCBJT01VWF9DT05GSUdfR1BJTykpOworCWlmICghZ3Bpb19yZXF1ZXN0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fTkZXUF9CKSwgIm5hbmRfd3AiKSkKKwkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9ORldQX0IpKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcW9uZ19uYW5kX2RldmljZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBxb25nX2luaXRfZnBnYSh2b2lkKQoreworCXZvaWQgX19pb21lbSAqcmVnczsKKwl1MzIgZnBnYV92ZXI7CisKKwlyZWdzID0gaW9yZW1hcChRT05HX0ZQR0FfQ1RSTF9CQVNFQUREUiwgUU9OR19GUEdBX0NUUkxfU0laRSk7CisJaWYgKCFyZWdzKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzLCBhYm9ydGluZy5cbiIsCisJCQkJX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJZnBnYV92ZXIgPSByZWFkbChyZWdzICsgUU9OR19GUEdBX0NUUkxfVkVSU0lPTik7CisJaW91bm1hcChyZWdzKTsKKwlwcmludGsoS0VSTl9JTkZPICJRb25nIEZQR0EgdmVyc2lvbiAlZC4lZC4lZFxuIiwKKwkJCShmcGdhX3ZlciAmIDB4RjAwMCkgPj4gMTIsCisJCQkoZnBnYV92ZXIgJiAweDBGMDApID4+IDgsIGZwZ2FfdmVyICYgMHgwMEZGKTsKKwlpZiAoZnBnYV92ZXIgPCBRT05HX0ZQR0FfVkVSU0lPTigwLCA4LCA3KSkgeworCQlwcmludGsoS0VSTl9FUlIgInFvbmc6IFVuZXhwZWN0ZWQgRlBHQSB2ZXJzaW9uLCBGUEdBLWJhc2VkICIKKwkJCQkiZGV2aWNlcyB3b24ndCBiZSByZWdpc3RlcmVkIVxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiByZWdpc3RlciBGUEdBLWJhc2VkIGRldmljZXMgKi8KKwlxb25nX2luaXRfbmFuZF9tdGQoKTsKKwlxb25nX2luaXRfZG5ldCgpOworfQorCisvKgorICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBteGNfYm9hcmRfaW5pdCh2b2lkKQoreworCW14Y19pbml0X2lteF91YXJ0KCk7CisJcW9uZ19pbml0X25vcl9tdGQoKTsKKwlxb25nX2luaXRfZnBnYSgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcW9uZ190aW1lcl9pbml0KHZvaWQpCit7CisJbXgzMV9jbG9ja3NfaW5pdCgyNjAwMDAwMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIHFvbmdfdGltZXIgPSB7CisJLmluaXQJPSBxb25nX3RpbWVyX2luaXQsCit9OworCisvKgorICogVGhlIGZvbGxvd2luZyB1c2VzIHN0YW5kYXJkIGtlcm5lbCBtYWNyb3MgZGVmaW5lZCBpbiBhcmNoLmggaW4gb3JkZXIgdG8KKyAqIGluaXRpYWxpemUgX19tYWNoX2Rlc2NfUU9ORyBkYXRhIHN0cnVjdHVyZS4KKyAqLworCitNQUNISU5FX1NUQVJUKFFPTkcsICJEYXZlL0RFTlggUW9uZ0VWQi1MSVRFIikKKwkvKiBNYWludGFpbmVyOiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nIEdtYkggKi8KKwkucGh5c19pbyAgICAgICAgPSBNWDMxX0FJUFMxX0JBU0VfQUREUiwKKwkuaW9fcGdfb2Zmc3QgICAgPSAoTVgzMV9BSVBTMV9CQVNFX0FERFJfVklSVCA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zICAgID0gTVgzeF9QSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8gICAgICAgICA9IG14MzFfbWFwX2lvLAorCS5pbml0X2lycSAgICAgICA9IG14MzFfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZSAgID0gbXhjX2JvYXJkX2luaXQsCisJLnRpbWVyICAgICAgICAgID0gJnFvbmdfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWFkcy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWFkcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MzhjNTQ5Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFhZHMuYworKysgL2Rldi9udWxsCkBAIC0xLDU1NSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwMCBEZWVwIEJsdWUgU29sdXRpb25zIEx0ZAotICogIENvcHlyaWdodCAoQykgMjAwMiBTaGFuZSBOYXkgKHNoYW5lQG1pbmlybC5jb20pCi0gKiAgQ29weXJpZ2h0IDIwMDUtMjAwNyBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgzMWFkcy5oPgotI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KLSNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgotCi0jaWZkZWYgQ09ORklHX01BQ0hfTVgzMUFEU19XTTExMzNfRVYxCi0jaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9hdWRpby5oPgotI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvY29yZS5oPgotI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvcG1pYy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlICJkZXZpY2VzLmgiCi0KLS8qIQotICogQGZpbGUgbXgzMWFkcy5jCi0gKgotICogQGJyaWVmIFRoaXMgZmlsZSBjb250YWlucyB0aGUgYm9hcmQtc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gcm91dGluZXMuCi0gKgotICogQGluZ3JvdXAgU3lzdGVtCi0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF84MjUwKSB8fCBkZWZpbmVkKENPTkZJR19TRVJJQUxfODI1MF9NT0RVTEUpCi0vKiEKLSAqIFRoZSBzZXJpYWwgcG9ydCBkZWZpbml0aW9uIHN0cnVjdHVyZS4KLSAqLwotc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YVtdID0gewotCXsKLQkJLm1lbWJhc2UgID0gKHZvaWQgKikoUEJDX0JBU0VfQUREUkVTUyArIFBCQ19TQzE2QzY1Ml9VQVJUQSksCi0JCS5tYXBiYXNlICA9ICh1bnNpZ25lZCBsb25nKShDUzRfQkFTRV9BRERSICsgUEJDX1NDMTZDNjUyX1VBUlRBKSwKLQkJLmlycSAgICAgID0gRVhQSU9fSU5UX1hVQVJUX0lOVEEsCi0JCS51YXJ0Y2xrICA9IDE0NzQ1NjAwLAotCQkucmVnc2hpZnQgPSAwLAotCQkuaW90eXBlICAgPSBVUElPX01FTSwKLQkJLmZsYWdzICAgID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwgVVBGX0FVVE9fSVJRLAotCX0sIHsKLQkJLm1lbWJhc2UgID0gKHZvaWQgKikoUEJDX0JBU0VfQUREUkVTUyArIFBCQ19TQzE2QzY1Ml9VQVJUQiksCi0JCS5tYXBiYXNlICA9ICh1bnNpZ25lZCBsb25nKShDUzRfQkFTRV9BRERSICsgUEJDX1NDMTZDNjUyX1VBUlRCKSwKLQkJLmlycSAgICAgID0gRVhQSU9fSU5UX1hVQVJUX0lOVEIsCi0JCS51YXJ0Y2xrICA9IDE0NzQ1NjAwLAotCQkucmVnc2hpZnQgPSAwLAotCQkuaW90eXBlICAgPSBVUElPX01FTSwKLQkJLmZsYWdzICAgID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwgVVBGX0FVVE9fSVJRLAotCX0sCi0Je30sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZXJpYWxfZGV2aWNlID0gewotCS5uYW1lCT0gInNlcmlhbDgyNTAiLAotCS5pZAk9IDAsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSBzZXJpYWxfcGxhdGZvcm1fZGF0YSwKLQl9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgbXhjX2luaXRfZXh0dWFydCh2b2lkKQotewotCXJldHVybiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNlcmlhbF9kZXZpY2UpOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IG14Y19pbml0X2V4dHVhcnQodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0lNWCkgfHwgZGVmaW5lZChDT05GSUdfU0VSSUFMX0lNWF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0gewotCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi19OwotCi1zdGF0aWMgdW5zaWduZWQgaW50IHVhcnRfcGluc1tdID0gewotCU1YMzFfUElOX0NUUzFfX0NUUzEsCi0JTVgzMV9QSU5fUlRTMV9fUlRTMSwKLQlNWDMxX1BJTl9UWEQxX19UWEQxLAotCU1YMzFfUElOX1JYRDFfX1JYRDEKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBteGNfaW5pdF9pbXhfdWFydCh2b2lkKQotewotCW14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKHVhcnRfcGlucywgQVJSQVlfU0laRSh1YXJ0X3BpbnMpLCAidWFydC0wIik7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwotfQotI2Vsc2UgLyogIVNFUklBTF9JTVggKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBteGNfaW5pdF9pbXhfdWFydCh2b2lkKQotewotfQotI2VuZGlmIC8qICFTRVJJQUxfSU1YICovCi0KLXN0YXRpYyB2b2lkIG14MzFhZHNfZXhwaW9faXJxX2hhbmRsZXIodTMyIGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCXUzMiBpbXJfdmFsOwotCXUzMiBpbnRfdmFsaWQ7Ci0JdTMyIGV4cGlvX2lycTsKLQotCWltcl92YWwgPSBfX3Jhd19yZWFkdyhQQkNfSU5UTUFTS19TRVRfUkVHKTsKLQlpbnRfdmFsaWQgPSBfX3Jhd19yZWFkdyhQQkNfSU5UU1RBVFVTX1JFRykgJiBpbXJfdmFsOwotCi0JZXhwaW9faXJxID0gTVhDX0VYUF9JT19CQVNFOwotCWZvciAoOyBpbnRfdmFsaWQgIT0gMDsgaW50X3ZhbGlkID4+PSAxLCBleHBpb19pcnErKykgewotCQlpZiAoKGludF92YWxpZCAmIDEpID09IDApCi0JCQljb250aW51ZTsKLQotCQlnZW5lcmljX2hhbmRsZV9pcnEoZXhwaW9faXJxKTsKLQl9Ci19Ci0KLS8qCi0gKiBEaXNhYmxlIGFuIGV4cGlvIHBpbidzIGludGVycnVwdCBieSBzZXR0aW5nIHRoZSBiaXQgaW4gdGhlIGltci4KLSAqIEBwYXJhbSBpcnEgICAgICAgICAgIGFuIGV4cGlvIHZpcnR1YWwgaXJxIG51bWJlcgotICovCi1zdGF0aWMgdm9pZCBleHBpb19tYXNrX2lycSh1MzIgaXJxKQotewotCXUzMiBleHBpbyA9IE1YQ19JUlFfVE9fRVhQSU8oaXJxKTsKLQkvKiBtYXNrIHRoZSBpbnRlcnJ1cHQgKi8KLQlfX3Jhd193cml0ZXcoMSA8PCBleHBpbywgUEJDX0lOVE1BU0tfQ0xFQVJfUkVHKTsKLQlfX3Jhd19yZWFkdyhQQkNfSU5UTUFTS19DTEVBUl9SRUcpOwotfQotCi0vKgotICogQWNrbm93bGVkZ2UgYW4gZXhwYW5kZWQgaW8gcGluJ3MgaW50ZXJydXB0IGJ5IGNsZWFyaW5nIHRoZSBiaXQgaW4gdGhlIGlzci4KLSAqIEBwYXJhbSBpcnEgICAgICAgICAgIGFuIGV4cGFuZGVkIGlvIHZpcnR1YWwgaXJxIG51bWJlcgotICovCi1zdGF0aWMgdm9pZCBleHBpb19hY2tfaXJxKHUzMiBpcnEpCi17Ci0JdTMyIGV4cGlvID0gTVhDX0lSUV9UT19FWFBJTyhpcnEpOwotCS8qIGNsZWFyIHRoZSBpbnRlcnJ1cHQgc3RhdHVzICovCi0JX19yYXdfd3JpdGV3KDEgPDwgZXhwaW8sIFBCQ19JTlRTVEFUVVNfUkVHKTsKLX0KLQotLyoKLSAqIEVuYWJsZSBhIGV4cGlvIHBpbidzIGludGVycnVwdCBieSBjbGVhcmluZyB0aGUgYml0IGluIHRoZSBpbXIuCi0gKiBAcGFyYW0gaXJxICAgICAgICAgICBhIGV4cGlvIHZpcnR1YWwgaXJxIG51bWJlcgotICovCi1zdGF0aWMgdm9pZCBleHBpb191bm1hc2tfaXJxKHUzMiBpcnEpCi17Ci0JdTMyIGV4cGlvID0gTVhDX0lSUV9UT19FWFBJTyhpcnEpOwotCS8qIHVubWFzayB0aGUgaW50ZXJydXB0ICovCi0JX19yYXdfd3JpdGV3KDEgPDwgZXhwaW8sIFBCQ19JTlRNQVNLX1NFVF9SRUcpOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIGV4cGlvX2lycV9jaGlwID0gewotCS5uYW1lID0gIkVYUElPKENQTEQpIiwKLQkuYWNrID0gZXhwaW9fYWNrX2lycSwKLQkubWFzayA9IGV4cGlvX21hc2tfaXJxLAotCS51bm1hc2sgPSBleHBpb191bm1hc2tfaXJxLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IG14MzFhZHNfaW5pdF9leHBpbyh2b2lkKQotewotCWludCBpOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiTVgzMUFEUyBFWFBJTyhDUExEKSBoYXJkd2FyZVxuIik7Ci0KLQkvKgotCSAqIENvbmZpZ3VyZSBJTlQgbGluZSBhcyBHUElPIGlucHV0Ci0JICovCi0JbXhjX2lvbXV4X2FsbG9jX3BpbihJT01VWF9NT0RFKE1YMzFfUElOX0dQSU8xXzQsIElPTVVYX0NPTkZJR19HUElPKSwgImV4cGlvIik7Ci0KLQkvKiBkaXNhYmxlIHRoZSBpbnRlcnJ1cHQgYW5kIGNsZWFyIHRoZSBzdGF0dXMgKi8KLQlfX3Jhd193cml0ZXcoMHhGRkZGLCBQQkNfSU5UTUFTS19DTEVBUl9SRUcpOwotCV9fcmF3X3dyaXRldygweEZGRkYsIFBCQ19JTlRTVEFUVVNfUkVHKTsKLQlmb3IgKGkgPSBNWENfRVhQX0lPX0JBU0U7IGkgPCAoTVhDX0VYUF9JT19CQVNFICsgTVhDX01BWF9FWFBfSU9fTElORVMpOwotCSAgICAgaSsrKSB7Ci0JCXNldF9pcnFfY2hpcChpLCAmZXhwaW9faXJxX2NoaXApOwotCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2xldmVsX2lycSk7Ci0JCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7Ci0JfQotCXNldF9pcnFfdHlwZShFWFBJT19QQVJFTlRfSU5ULCBJUlFfVFlQRV9MRVZFTF9ISUdIKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihFWFBJT19QQVJFTlRfSU5ULCBteDMxYWRzX2V4cGlvX2lycV9oYW5kbGVyKTsKLX0KLQotI2lmZGVmIENPTkZJR19NQUNIX01YMzFBRFNfV00xMTMzX0VWMQotLyogVGhpcyBzZWN0aW9uIGRlZmluZXMgc2V0dXAgZm9yIHRoZSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MKLSAqIDExMzMtRVYxIFBNVS9hdWRpbyBib2FyZC4gIFdoZW4gb3RoZXIgUE1VIGJvYXJkcyBhcmUgc3VwcG9ydGVkIHRoZQotICogcmVndWxhdG9yIGRlZmluaXRpb25zIG1heSBiZSBzaGFyZWQgd2l0aCB0aGVtLCBidXQgZm9yIG5vdyB0aGV5IGNhbgotICogb25seSBiZSB1c2VkIHdpdGggdGhpcyBib2FyZCBzbyB3b3VsZCBnZW5lcmF0ZSB3YXJuaW5ncyBhYm91dAotICogdW51c2VkIHN0YXRpY3MgYW5kIHNvbWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24gaXMgc3BlY2lmaWMgdG8gdGhpcwotICogbW9kdWxlLgotICovCi0KLS8qIENQVSAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHN3MWFfY29uc3VtZXJzW10gPSB7Ci0JewotCQkuc3VwcGx5ID0gImNwdV92Y2MiLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzdzFhX2RhdGEgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubmFtZSA9ICJTVzFBIiwKLQkJLm1pbl91ViA9IDEyNzUwMDAsCi0JCS5tYXhfdVYgPSAxNjAwMDAwLAotCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UgfAotCQkJCSAgUkVHVUxBVE9SX0NIQU5HRV9NT0RFLAotCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCB8Ci0JCQkJICAgIFJFR1VMQVRPUl9NT0RFX0ZBU1QsCi0JCS5zdGF0ZV9tZW0gPSB7Ci0JCQkgLnVWID0gMTQwMDAwMCwKLQkJCSAubW9kZSA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKLQkJCSAuZW5hYmxlZCA9IDEsCi0JCSB9LAotCQkuaW5pdGlhbF9zdGF0ZSA9IFBNX1NVU1BFTkRfTUVNLAotCQkuYWx3YXlzX29uID0gMSwKLQkJLmJvb3Rfb24gPSAxLAotCX0sCi0JLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoc3cxYV9jb25zdW1lcnMpLAotCS5jb25zdW1lcl9zdXBwbGllcyA9IHN3MWFfY29uc3VtZXJzLAotfTsKLQotLyogU3lzdGVtIElPIC0gSGlnaCAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHZpb2hpX2RhdGEgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubmFtZSA9ICJWSU9ITyIsCi0JCS5taW5fdVYgPSAyODAwMDAwLAotCQkubWF4X3VWID0gMjgwMDAwMCwKLQkJLnN0YXRlX21lbSA9IHsKLQkJCSAudVYgPSAyODAwMDAwLAotCQkJIC5tb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAotCQkJIC5lbmFibGVkID0gMSwKLQkJIH0sCi0JCS5pbml0aWFsX3N0YXRlID0gUE1fU1VTUEVORF9NRU0sCi0JCS5hbHdheXNfb24gPSAxLAotCQkuYm9vdF9vbiA9IDEsCi0JfSwKLX07Ci0KLS8qIFN5c3RlbSBJTyAtIExvdyAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHZpb2xvX2RhdGEgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubmFtZSA9ICJWSU9MTyIsCi0JCS5taW5fdVYgPSAxODAwMDAwLAotCQkubWF4X3VWID0gMTgwMDAwMCwKLQkJLnN0YXRlX21lbSA9IHsKLQkJCSAudVYgPSAxODAwMDAwLAotCQkJIC5tb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAotCQkJIC5lbmFibGVkID0gMSwKLQkJIH0sCi0JCS5pbml0aWFsX3N0YXRlID0gUE1fU1VTUEVORF9NRU0sCi0JCS5hbHdheXNfb24gPSAxLAotCQkuYm9vdF9vbiA9IDEsCi0JfSwKLX07Ci0KLS8qIEREUiBSQU0gKi8KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzdzJhX2RhdGEgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubmFtZSA9ICJTVzJBIiwKLQkJLm1pbl91ViA9IDE4MDAwMDAsCi0JCS5tYXhfdVYgPSAxODAwMDAwLAotCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKLQkJLnN0YXRlX21lbSA9IHsKLQkJCSAudVYgPSAxODAwMDAwLAotCQkJIC5tb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAotCQkJIC5lbmFibGVkID0gMSwKLQkJIH0sCi0JCS5zdGF0ZV9kaXNrID0gewotCQkJIC5tb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAotCQkJIC5lbmFibGVkID0gMCwKLQkJIH0sCi0JCS5hbHdheXNfb24gPSAxLAotCQkuYm9vdF9vbiA9IDEsCi0JCS5pbml0aWFsX3N0YXRlID0gUE1fU1VTUEVORF9NRU0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBsZG8xX2RhdGEgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubmFtZSA9ICJWQ0FNL1ZNTUMxL1ZNTUMyIiwKLQkJLm1pbl91ViA9IDI4MDAwMDAsCi0JCS5tYXhfdVYgPSAyODAwMDAwLAotCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKLQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCi0JCS5hcHBseV91ViA9IDEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBsZG8yX2NvbnN1bWVyc1tdID0gewotCXsKLQkJLnN1cHBseSA9ICJBVkREIiwKLQl9LAotCXsKLQkJLnN1cHBseSA9ICJIUFZERCIsCi0JfSwKLX07Ci0KLS8qIENPREVDIGFuZCBTSU0gKi8KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBsZG8yX2RhdGEgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubmFtZSA9ICJWRVNJTS9WU0lNL0FWREQiLAotCQkubWluX3VWID0gMzMwMDAwMCwKLQkJLm1heF91ViA9IDMzMDAwMDAsCi0JCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAotCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKLQkJLmFwcGx5X3VWID0gMSwKLQl9LAotCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKGxkbzJfY29uc3VtZXJzKSwKLQkuY29uc3VtZXJfc3VwcGxpZXMgPSBsZG8yX2NvbnN1bWVycywKLX07Ci0KLS8qIEdlbmVyYWwgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB2ZGlnX2RhdGEgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubmFtZSA9ICJWRElHIiwKLQkJLm1pbl91ViA9IDE1MDAwMDAsCi0JCS5tYXhfdVYgPSAxNTAwMDAwLAotCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKLQkJLmFwcGx5X3VWID0gMSwKLQkJLmFsd2F5c19vbiA9IDEsCi0JCS5ib290X29uID0gMSwKLQl9LAotfTsKLQotLyogVHJhbmNlaXZlcnMgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBsZG80X2RhdGEgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubmFtZSA9ICJWUkYxL0NWRERfMi43NzUiLAotCQkubWluX3VWID0gMjUwMDAwMCwKLQkJLm1heF91ViA9IDI1MDAwMDAsCi0JCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAotCQkuYXBwbHlfdVYgPSAxLAotCQkuYWx3YXlzX29uID0gMSwKLQkJLmJvb3Rfb24gPSAxLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHdtODM1MF9sZWRfcGxhdGZvcm1fZGF0YSB3bTgzNTBfbGVkX2RhdGEgPSB7Ci0JLm5hbWUgICAgICAgICAgICA9ICJ3bTgzNTA6d2hpdGUiLAotCS5kZWZhdWx0X3RyaWdnZXIgPSAiaGVhcnRiZWF0IiwKLQkubWF4X3VBICAgICAgICAgID0gMjc4OTksCi19OwotCi1zdGF0aWMgc3RydWN0IHdtODM1MF9hdWRpb19wbGF0Zm9ybV9kYXRhIGlteDMyYWRzX3dtODM1MF9zZXR1cCA9IHsKLQkudm1pZF9kaXNjaGFyZ2VfbXNlY3MgPSAxMDAwLAotCS5kcmFpbl9tc2VjcyA9IDMwLAotCS5jYXBfZGlzY2hhcmdlX21zZWNzID0gNzAwLAotCS52bWlkX2NoYXJnZV9tc2VjcyA9IDcwMCwKLQkudm1pZF9zX2N1cnZlID0gV004MzUwX1NfQ1VSVkVfU0xPVywKLQkuZGlzX291dDQgPSBXTTgzNTBfRElTQ0hBUkdFX1NMT1csCi0JLmRpc19vdXQzID0gV004MzUwX0RJU0NIQVJHRV9TTE9XLAotCS5kaXNfb3V0MiA9IFdNODM1MF9ESVNDSEFSR0VfU0xPVywKLQkuZGlzX291dDEgPSBXTTgzNTBfRElTQ0hBUkdFX1NMT1csCi0JLnZyb2lfb3V0NCA9IFdNODM1MF9USUVfT0ZGXzUwMFIsCi0JLnZyb2lfb3V0MyA9IFdNODM1MF9USUVfT0ZGXzUwMFIsCi0JLnZyb2lfb3V0MiA9IFdNODM1MF9USUVfT0ZGXzUwMFIsCi0JLnZyb2lfb3V0MSA9IFdNODM1MF9USUVfT0ZGXzUwMFIsCi0JLnZyb2lfZW5hYmxlID0gMCwKLQkuY29kZWNfY3VycmVudF9vbiA9IFdNODM1MF9DT0RFQ19JU0VMXzFfMCwKLQkuY29kZWNfY3VycmVudF9zdGFuZGJ5ID0gV004MzUwX0NPREVDX0lTRUxfMF81LAotCS5jb2RlY19jdXJyZW50X2NoYXJnZSA9IFdNODM1MF9DT0RFQ19JU0VMXzFfNSwKLX07Ci0KLXN0YXRpYyBpbnQgbXgzMV93bTgzNTBfaW5pdChzdHJ1Y3Qgd204MzUwICp3bTgzNTApCi17Ci0JaW50IGk7Ci0KLQl3bTgzNTBfZ3Bpb19jb25maWcod204MzUwLCAwLCBXTTgzNTBfR1BJT19ESVJfSU4sCi0JCQkgICBXTTgzNTBfR1BJTzBfUFdSX09OX0lOLCBXTTgzNTBfR1BJT19BQ1RJVkVfTE9XLAotCQkJICAgV004MzUwX0dQSU9fUFVMTF9VUCwgV004MzUwX0dQSU9fSU5WRVJUX09GRiwKLQkJCSAgIFdNODM1MF9HUElPX0RFQk9VTkNFX09OKTsKLQotCXdtODM1MF9ncGlvX2NvbmZpZyh3bTgzNTAsIDMsIFdNODM1MF9HUElPX0RJUl9JTiwKLQkJCSAgIFdNODM1MF9HUElPM19QV1JfT0ZGX0lOLCBXTTgzNTBfR1BJT19BQ1RJVkVfSElHSCwKLQkJCSAgIFdNODM1MF9HUElPX1BVTExfRE9XTiwgV004MzUwX0dQSU9fSU5WRVJUX09GRiwKLQkJCSAgIFdNODM1MF9HUElPX0RFQk9VTkNFX09OKTsKLQotCXdtODM1MF9ncGlvX2NvbmZpZyh3bTgzNTAsIDQsIFdNODM1MF9HUElPX0RJUl9JTiwKLQkJCSAgIFdNODM1MF9HUElPNF9NUl9JTiwgV004MzUwX0dQSU9fQUNUSVZFX0hJR0gsCi0JCQkgICBXTTgzNTBfR1BJT19QVUxMX0RPV04sIFdNODM1MF9HUElPX0lOVkVSVF9PRkYsCi0JCQkgICBXTTgzNTBfR1BJT19ERUJPVU5DRV9PRkYpOwotCi0Jd204MzUwX2dwaW9fY29uZmlnKHdtODM1MCwgNywgV004MzUwX0dQSU9fRElSX0lOLAotCQkJICAgV004MzUwX0dQSU83X0hJQkVSTkFURV9JTiwgV004MzUwX0dQSU9fQUNUSVZFX0hJR0gsCi0JCQkgICBXTTgzNTBfR1BJT19QVUxMX0RPV04sIFdNODM1MF9HUElPX0lOVkVSVF9PRkYsCi0JCQkgICBXTTgzNTBfR1BJT19ERUJPVU5DRV9PRkYpOwotCi0Jd204MzUwX2dwaW9fY29uZmlnKHdtODM1MCwgNiwgV004MzUwX0dQSU9fRElSX09VVCwKLQkJCSAgIFdNODM1MF9HUElPNl9TRE9VVF9PVVQsIFdNODM1MF9HUElPX0FDVElWRV9ISUdILAotCQkJICAgV004MzUwX0dQSU9fUFVMTF9OT05FLCBXTTgzNTBfR1BJT19JTlZFUlRfT0ZGLAotCQkJICAgV004MzUwX0dQSU9fREVCT1VOQ0VfT0ZGKTsKLQotCXdtODM1MF9ncGlvX2NvbmZpZyh3bTgzNTAsIDgsIFdNODM1MF9HUElPX0RJUl9PVVQsCi0JCQkgICBXTTgzNTBfR1BJTzhfVkNDX0ZBVUxUX09VVCwgV004MzUwX0dQSU9fQUNUSVZFX0xPVywKLQkJCSAgIFdNODM1MF9HUElPX1BVTExfTk9ORSwgV004MzUwX0dQSU9fSU5WRVJUX09GRiwKLQkJCSAgIFdNODM1MF9HUElPX0RFQk9VTkNFX09GRik7Ci0KLQl3bTgzNTBfZ3Bpb19jb25maWcod204MzUwLCA5LCBXTTgzNTBfR1BJT19ESVJfT1VULAotCQkJICAgV004MzUwX0dQSU85X0JBVFRfRkFVTFRfT1VULCBXTTgzNTBfR1BJT19BQ1RJVkVfTE9XLAotCQkJICAgV004MzUwX0dQSU9fUFVMTF9OT05FLCBXTTgzNTBfR1BJT19JTlZFUlRfT0ZGLAotCQkJICAgV004MzUwX0dQSU9fREVCT1VOQ0VfT0ZGKTsKLQotCS8qIEZpeCB1cCBmb3Igb3VyIG93biBzdXBwbGllcy4gKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsZG8yX2NvbnN1bWVycyk7IGkrKykKLQkJbGRvMl9jb25zdW1lcnNbaV0uZGV2ID0gd204MzUwLT5kZXY7Ci0KLQl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0RDRENfMSwgJnN3MWFfZGF0YSk7Ci0Jd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsIFdNODM1MF9EQ0RDXzMsICZ2aW9oaV9kYXRhKTsKLQl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0RDRENfNCwgJnZpb2xvX2RhdGEpOwotCXdtODM1MF9yZWdpc3Rlcl9yZWd1bGF0b3Iod204MzUwLCBXTTgzNTBfRENEQ182LCAmc3cyYV9kYXRhKTsKLQl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0xET18xLCAmbGRvMV9kYXRhKTsKLQl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0xET18yLCAmbGRvMl9kYXRhKTsKLQl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0xET18zLCAmdmRpZ19kYXRhKTsKLQl3bTgzNTBfcmVnaXN0ZXJfcmVndWxhdG9yKHdtODM1MCwgV004MzUwX0xET180LCAmbGRvNF9kYXRhKTsKLQotCS8qIExFRHMgKi8KLQl3bTgzNTBfZGNkY19zZXRfc2xvdCh3bTgzNTAsIFdNODM1MF9EQ0RDXzUsIDEsIDEsCi0JCQkgICAgIFdNODM1MF9EQzVfRVJSQUNUX1NIVVRET1dOX0NPTlYpOwotCXdtODM1MF9pc2lua19zZXRfZmxhc2god204MzUwLCBXTTgzNTBfSVNJTktfQSwKLQkJCSAgICAgICBXTTgzNTBfSVNJTktfRkxBU0hfRElTQUJMRSwKLQkJCSAgICAgICBXTTgzNTBfSVNJTktfRkxBU0hfVFJJR19CSVQsCi0JCQkgICAgICAgV004MzUwX0lTSU5LX0ZMQVNIX0RVUl8zMk1TLAotCQkJICAgICAgIFdNODM1MF9JU0lOS19GTEFTSF9PTl9JTlNUQU5ULAotCQkJICAgICAgIFdNODM1MF9JU0lOS19GTEFTSF9PRkZfSU5TVEFOVCwKLQkJCSAgICAgICBXTTgzNTBfSVNJTktfRkxBU0hfTU9ERV9FTik7Ci0Jd204MzUwX2RjZGMyNV9zZXRfbW9kZSh3bTgzNTAsIFdNODM1MF9EQ0RDXzUsCi0JCQkgICAgICAgV004MzUwX0lTSU5LX01PREVfQk9PU1QsCi0JCQkgICAgICAgV004MzUwX0lTSU5LX0lMSU1fTk9STUFMLAotCQkJICAgICAgIFdNODM1MF9EQzVfUk1QXzIwViwKLQkJCSAgICAgICBXTTgzNTBfREM1X0ZCU1JDX0lTSU5LQSk7Ci0Jd204MzUwX3JlZ2lzdGVyX2xlZCh3bTgzNTAsIDAsIFdNODM1MF9EQ0RDXzUsIFdNODM1MF9JU0lOS19BLAotCQkJICAgICZ3bTgzNTBfbGVkX2RhdGEpOwotCi0Jd204MzUwLT5jb2RlYy5wbGF0Zm9ybV9kYXRhID0gJmlteDMyYWRzX3dtODM1MF9zZXR1cDsKLQotCXJlZ3VsYXRvcl9oYXNfZnVsbF9jb25zdHJhaW50cygpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgd204MzUwX3BsYXRmb3JtX2RhdGEgX19pbml0ZGF0YSBteDMxX3dtODM1MF9wZGF0YSA9IHsKLQkuaW5pdCA9IG14MzFfd204MzUwX2luaXQsCi0JLmlycV9iYXNlID0gTVhDX0JPQVJEX0lSUV9TVEFSVCArIE1YQ19NQVhfRVhQX0lPX0xJTkVTLAotfTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfSTJDX0lNWCkgfHwgZGVmaW5lZChDT05GSUdfSTJDX0lNWF9NT0RVTEUpCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgbXgzMWFkc19pMmMxX2RldmljZXNbXSA9IHsKLSNpZmRlZiBDT05GSUdfTUFDSF9NWDMxQURTX1dNMTEzM19FVjEKLQl7Ci0JCUkyQ19CT0FSRF9JTkZPKCJ3bTgzNTAiLCAweDFhKSwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmbXgzMV93bTgzNTBfcGRhdGEsCi0JCS5pcnEgPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzFfMyksCi0JfSwKLSNlbmRpZgotfTsKLQotc3RhdGljIHZvaWQgbXhjX2luaXRfaTJjKHZvaWQpCi17Ci0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgbXgzMWFkc19pMmMxX2RldmljZXMsCi0JCQkJQVJSQVlfU0laRShteDMxYWRzX2kyYzFfZGV2aWNlcykpOwotCi0JbXhjX2lvbXV4X21vZGUoSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMl9NT1NJLCBJT01VWF9DT05GSUdfQUxUMSkpOwotCW14Y19pb211eF9tb2RlKElPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTJfTUlTTywgSU9NVVhfQ09ORklHX0FMVDEpKTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMSwgTlVMTCk7Ci19Ci0jZWxzZQotc3RhdGljIHZvaWQgbXhjX2luaXRfaTJjKHZvaWQpCi17Ci19Ci0jZW5kaWYKLQotLyohCi0gKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHN0YXRpYyBtYXBwaW5ncyBmb3IgdGhlIGkuTVgzMUFEUyBib2FyZC4KLSAqLwotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBteDMxYWRzX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwJPSBDUzRfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihDUzRfQkFTRV9BRERSKSwKLQkJLmxlbmd0aAkJPSBDUzRfU0laRSAvIDIsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCX0sCi19OwotCi0vKiEKLSAqIFNldCB1cCBzdGF0aWMgdmlydHVhbCBtYXBwaW5ncy4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IG14MzFhZHNfbWFwX2lvKHZvaWQpCi17Ci0JbXgzMV9tYXBfaW8oKTsKLQlpb3RhYmxlX2luaXQobXgzMWFkc19pb19kZXNjLCBBUlJBWV9TSVpFKG14MzFhZHNfaW9fZGVzYykpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgbXgzMWFkc19pbml0X2lycSh2b2lkKQotewotCW14MzFfaW5pdF9pcnEoKTsKLQlteDMxYWRzX2luaXRfZXhwaW8oKTsKLX0KLQotLyohCi0gKiBCb2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IG14Y19ib2FyZF9pbml0KHZvaWQpCi17Ci0JbXhjX2luaXRfZXh0dWFydCgpOwotCW14Y19pbml0X2lteF91YXJ0KCk7Ci0JbXhjX2luaXRfaTJjKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBteDMxYWRzX3RpbWVyX2luaXQodm9pZCkKLXsKLQlteDMxX2Nsb2Nrc19pbml0KDI2MDAwMDAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbXgzMWFkc190aW1lciA9IHsKLQkuaW5pdAk9IG14MzFhZHNfdGltZXJfaW5pdCwKLX07Ci0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIHVzZXMgc3RhbmRhcmQga2VybmVsIG1hY3JvcyBkZWZpbmVkIGluIGFyY2guaCBpbiBvcmRlciB0bwotICogaW5pdGlhbGl6ZSBfX21hY2hfZGVzY19NWDMxQURTIGRhdGEgc3RydWN0dXJlLgotICovCi1NQUNISU5FX1NUQVJUKE1YMzFBRFMsICJGcmVlc2NhbGUgTVgzMUFEUyIpCi0JLyogTWFpbnRhaW5lcjogRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gKi8KLQkucGh5c19pbwk9IEFJUFMxX0JBU0VfQUREUiwKLQkuaW9fcGdfb2Zmc3QJPSAoKEFJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zICAgID0gUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBteDMxYWRzX21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDMxYWRzX2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAotCS50aW1lciAgICAgICAgICA9ICZteDMxYWRzX3RpbWVyLAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaWxseS5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWxpbGx5LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDljZTAyOWYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWxpbGx5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMDYgKzAsMCBAQAotLyoKLSAqICBMSUxMWS0xMTMxIG1vZHVsZSBzdXBwb3J0Ci0gKgotICogICAgQ29weXJpZ2h0IChjKSAyMDA5IERhbmllbCBNYWNrIDxkYW5pZWxAY2FpYXEuZGU+Ci0gKgotICogIGJhc2VkIG9uIGNvZGUgZm9yIG90aGVyIE1YMzEgYm9hcmRzLAotICoKLSAqICAgIENvcHlyaWdodCAyMDA1LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IKLSAqICAgIENvcHlyaWdodCAoYykgMjAwOSBBbGJlcnRvIFBhbml6em8gPG1hcmFtYW9wZXJjaGVzZWltb3J0b0BnbWFpbC5jb20+Ci0gKiAgICBDb3B5cmlnaHQgKEMpIDIwMDkgVmFsZW50aW4gTG9uZ2NoYW1wLCBFUEZMIE1vYm90cyBncm91cAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9tZmQvbWMxMzc4My5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KLSNpbmNsdWRlIDxtYWNoL2JvYXJkLW14MzFsaWxseS5oPgotI2luY2x1ZGUgPG1hY2gvc3BpLmg+Ci0KLSNpbmNsdWRlICJkZXZpY2VzLmgiCi0KLS8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgbW9kdWxlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIGZvciBMSUxMWS0xMTMxLgotICogSW5pdGlhbGl6YXRpb24gb2YgcGVyaXBoZXJhbHMgZm91bmQgb24gdGhlIGJhc2Vib2FyZCBpcyBpbXBsZW1lbnRlZCBpbiB0aGUKLSAqIGFwcHJvcHJpYXRlIGJhc2Vib2FyZCBzdXBwb3J0IGNvZGUuCi0gKi8KLQotLyogU01TQyBldGhlcm5ldCBzdXBwb3J0ICovCi0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21zYzkxeF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAk9IENTNF9CQVNFX0FERFIsCi0JCS5lbmQJPSBDUzRfQkFTRV9BRERSICsgMHhmZmZmLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCXsKLQkJLnN0YXJ0CT0gSU9NVVhfVE9fSVJRKE1YMzFfUElOX0dQSU8xXzApLAotCQkuZW5kCT0gSU9NVVhfVE9fSVJRKE1YMzFfUElOX0dQSU8xXzApLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIHNtc2M5MTF4X2NvbmZpZyA9IHsKLQkucGh5X2ludGVyZmFjZQk9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUksCi0JLmlycV9wb2xhcml0eQk9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAotCS5pcnFfdHlwZQk9IFNNU0M5MTFYX0lSUV9UWVBFX09QRU5fRFJBSU4sCi0JLmZsYWdzCQk9IFNNU0M5MTFYX1VTRV8zMkJJVCB8Ci0JCQkgIFNNU0M5MTFYX1NBVkVfTUFDX0FERFJFU1MgfAotCQkJICBTTVNDOTExWF9GT1JDRV9JTlRFUk5BTF9QSFksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbXNjOTF4X2RldmljZSA9IHsKLQkubmFtZQkJPSAic21zYzkxMXgiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21zYzkxeF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IHNtc2M5MXhfcmVzb3VyY2VzLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzbXNjOTExeF9jb25maWcsCi0JfQotfTsKLQotLyogTk9SIGZsYXNoICovCi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBub3JfZmxhc2hfZGF0YSA9IHsKLQkud2lkdGggID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugbm9yX2ZsYXNoX3Jlc291cmNlID0gewotCS5zdGFydAk9IDB4YTAwMDAwMDAsCi0JLmVuZAk9IDB4YTFmZmZmZmYsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwaHlzbWFwX2ZsYXNoX2RldmljZSA9IHsKLQkubmFtZQk9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQJPSAwLAotCS5kZXYJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhICA9ICZub3JfZmxhc2hfZGF0YSwKLQl9LAotCS5yZXNvdXJjZSA9ICZub3JfZmxhc2hfcmVzb3VyY2UsCi0JLm51bV9yZXNvdXJjZXMgPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZzbXNjOTF4X2RldmljZSwKLQkmcGh5c21hcF9mbGFzaF9kZXZpY2UsCi19OwotCi0vKiBTUEkgKi8KLQotc3RhdGljIGludCBzcGlfaW50ZXJuYWxfY2hpcHNlbGVjdFtdID0gewotCU1YQ19TUElfQ1MoMCksCi0JTVhDX1NQSV9DUygxKSwKLQlNWENfU1BJX0NTKDIpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzcGlfaW14X21hc3RlciBzcGkwX3BkYXRhID0gewotCS5jaGlwc2VsZWN0ID0gc3BpX2ludGVybmFsX2NoaXBzZWxlY3QsCi0JLm51bV9jaGlwc2VsZWN0ID0gQVJSQVlfU0laRShzcGlfaW50ZXJuYWxfY2hpcHNlbGVjdCksCi19OwotCi1zdGF0aWMgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHNwaTFfcGRhdGEgPSB7Ci0JLmNoaXBzZWxlY3QgPSBzcGlfaW50ZXJuYWxfY2hpcHNlbGVjdCwKLQkubnVtX2NoaXBzZWxlY3QgPSBBUlJBWV9TSVpFKHNwaV9pbnRlcm5hbF9jaGlwc2VsZWN0KSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWMxMzc4M19wbGF0Zm9ybV9kYXRhIG1jMTM3ODNfcGRhdGEgX19pbml0ZGF0YSA9IHsKLQkuZmxhZ3MgPSBNQzEzNzgzX1VTRV9SVEMgfCBNQzEzNzgzX1VTRV9UT1VDSFNDUkVFTiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gbWMxMzc4M19kZXYgX19pbml0ZGF0YSA9IHsKLQkubW9kYWxpYXMJPSAibWMxMzc4MyIsCi0JLm1heF9zcGVlZF9oegk9IDEwMDAwMDAsCi0JLmJ1c19udW0JPSAxLAotCS5jaGlwX3NlbGVjdAk9IDAsCi0JLnBsYXRmb3JtX2RhdGEJPSAmbWMxMzc4M19wZGF0YSwKLX07Ci0KLXN0YXRpYyBpbnQgbXgzMWxpbGx5X2Jhc2Vib2FyZDsKLWNvcmVfcGFyYW0obXgzMWxpbGx5X2Jhc2Vib2FyZCwgbXgzMWxpbGx5X2Jhc2Vib2FyZCwgaW50LCAwNDQ0KTsKLQotc3RhdGljIHZvaWQgX19pbml0IG14MzFsaWxseV9ib2FyZF9pbml0KHZvaWQpCi17Ci0Jc3dpdGNoIChteDMxbGlsbHlfYmFzZWJvYXJkKSB7Ci0JY2FzZSBNWDMxTElMTFlfTk9CT0FSRDoKLQkJYnJlYWs7Ci0JY2FzZSBNWDMxTElMTFlfREI6Ci0JCW14MzFsaWxseV9kYl9pbml0KCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiSWxsZWdhbCBteDMxbGlsbHlfYmFzZWJvYXJkIHR5cGUgJWRcbiIsCi0JCQlteDMxbGlsbHlfYmFzZWJvYXJkKTsKLQl9Ci0KLQlteGNfaW9tdXhfYWxsb2NfcGluKE1YMzFfUElOX0NTNF9fQ1M0LCAiRXRoZXJuZXQgQ1MiKTsKLQotCS8qIFNQSSAqLwotCW14Y19pb211eF9hbGxvY19waW4oTVgzMV9QSU5fQ1NQSTFfU0NMS19fU0NMSywgIlNQSTFfQ0xLIik7Ci0JbXhjX2lvbXV4X2FsbG9jX3BpbihNWDMxX1BJTl9DU1BJMV9NT1NJX19NT1NJLCAiU1BJMV9UWCIpOwotCW14Y19pb211eF9hbGxvY19waW4oTVgzMV9QSU5fQ1NQSTFfTUlTT19fTUlTTywgIlNQSTFfUlgiKTsKLQlteGNfaW9tdXhfYWxsb2NfcGluKE1YMzFfUElOX0NTUEkxX1NQSV9SRFlfX1NQSV9SRFksICJTUEkxX1JEWSIpOwotCW14Y19pb211eF9hbGxvY19waW4oTVgzMV9QSU5fQ1NQSTFfU1MwX19TUzAsICJTUEkxX1NTMCIpOwotCW14Y19pb211eF9hbGxvY19waW4oTVgzMV9QSU5fQ1NQSTFfU1MxX19TUzEsICJTUEkxX1NTMSIpOwotCW14Y19pb211eF9hbGxvY19waW4oTVgzMV9QSU5fQ1NQSTFfU1MyX19TUzIsICJTUEkxX1NTMiIpOwotCi0JbXhjX2lvbXV4X2FsbG9jX3BpbihNWDMxX1BJTl9DU1BJMl9TQ0xLX19TQ0xLLCAiU1BJMl9DTEsiKTsKLQlteGNfaW9tdXhfYWxsb2NfcGluKE1YMzFfUElOX0NTUEkyX01PU0lfX01PU0ksICJTUEkyX1RYIik7Ci0JbXhjX2lvbXV4X2FsbG9jX3BpbihNWDMxX1BJTl9DU1BJMl9NSVNPX19NSVNPLCAiU1BJMl9SWCIpOwotCW14Y19pb211eF9hbGxvY19waW4oTVgzMV9QSU5fQ1NQSTJfU1BJX1JEWV9fU1BJX1JEWSwgIlNQSTJfUkRZIik7Ci0JbXhjX2lvbXV4X2FsbG9jX3BpbihNWDMxX1BJTl9DU1BJMl9TUzBfX1NTMCwgIlNQSTJfU1MwIik7Ci0JbXhjX2lvbXV4X2FsbG9jX3BpbihNWDMxX1BJTl9DU1BJMl9TUzFfX1NTMSwgIlNQSTJfU1MxIik7Ci0JbXhjX2lvbXV4X2FsbG9jX3BpbihNWDMxX1BJTl9DU1BJMl9TUzJfX1NTMiwgIlNQSTJfU1MyIik7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc3BpX2RldmljZTAsICZzcGkwX3BkYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc3BpX2RldmljZTEsICZzcGkxX3BkYXRhKTsKLQlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbygmbWMxMzc4M19kZXYsIDEpOwotCi0JcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBteDMxbGlsbHlfdGltZXJfaW5pdCh2b2lkKQotewotCW14MzFfY2xvY2tzX2luaXQoMjYwMDAwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c190aW1lciBteDMxbGlsbHlfdGltZXIgPSB7Ci0JLmluaXQJPSBteDMxbGlsbHlfdGltZXJfaW5pdCwKLX07Ci0KLU1BQ0hJTkVfU1RBUlQoTElMTFkxMTMxLCAiSU5DTyBzdGFydGVjIExJTExZLTExMzEiKQotCS5waHlzX2lvCT0gQUlQUzFfQkFTRV9BRERSLAotCS5pb19wZ19vZmZzdAk9ICgoQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMJPSBQSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8JCT0gbXgzMV9tYXBfaW8sCi0JLmluaXRfaXJxCT0gbXgzMV9pbml0X2lycSwKLQkuaW5pdF9tYWNoaW5lCT0gbXgzMWxpbGx5X2JvYXJkX2luaXQsCi0JLnRpbWVyCQk9ICZteDMxbGlsbHlfdGltZXIsCi1NQUNISU5FX0VORAotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxbGl0ZS1kYi5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMWxpdGUtZGIuYwppbmRleCA2OTQ2MTFkLi5jY2Q4NzQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9teDMxbGl0ZS1kYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaXRlLWRiLmMKQEAgLTY3LDYgKzY3LDEzIEBACiAJTVgzMV9QSU5fQ1NQSTFfU1MwX19TUzAsCiAJTVgzMV9QSU5fQ1NQSTFfU1MxX19TUzEsCiAJTVgzMV9QSU5fQ1NQSTFfU1MyX19TUzIsCisJLyogU0RIQzEgKi8KKwlNWDMxX1BJTl9TRDFfREFUQTBfX1NEMV9EQVRBMCwKKwlNWDMxX1BJTl9TRDFfREFUQTFfX1NEMV9EQVRBMSwKKwlNWDMxX1BJTl9TRDFfREFUQTJfX1NEMV9EQVRBMiwKKwlNWDMxX1BJTl9TRDFfREFUQTNfX1NEMV9EQVRBMywKKwlNWDMxX1BJTl9TRDFfQ0xLX19TRDFfQ0xLLAorCU1YMzFfUElOX1NEMV9DTURfX1NEMV9DTUQsCiB9OwogCiAvKiBVQVJUICovCkBAIC03OSwxMSArODYsMTEgQEAKIHN0YXRpYyBpbnQgZ3Bpb19kZXQsIGdwaW9fd3A7CiAKICNkZWZpbmUgTU1DX1BBRF9DRkcgKFBBRF9DVExfRFJWX01BWCB8IFBBRF9DVExfU1JFX0ZBU1QgfCBQQURfQ1RMX0hZU19DTU9TIHwgXAotCQkJUEFEX0NUTF9PREVfQ01PUyB8IFBBRF9DVExfMTAwS19QVSkKKwkJICAgICBQQURfQ1RMX09ERV9DTU9TKQogCiBzdGF0aWMgaW50IG14Y19tbWMxX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fTENTMCkpOworCXJldHVybiBncGlvX2dldF92YWx1ZShJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8xXzYpKTsKIH0KIAogc3RhdGljIGludCBteGNfbW1jMV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTk0LDEyICsxMDEsMTcgQEAKIAlncGlvX2RldCA9IElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fRENEX0RDRTEpOwogCWdwaW9fd3AgPSBJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8xXzYpOwogCi0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fU0QxX0RBVEEwLCBNTUNfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fU0QxX0RBVEExLCBNTUNfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fU0QxX0RBVEEyLCBNTUNfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fU0QxX0RBVEEzLCBNTUNfUEFEX0NGRyk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fU0QxX0RBVEEwLAorCQkJICBNTUNfUEFEX0NGRyB8IFBBRF9DVExfUFVFX1BVRCB8IFBBRF9DVExfMTAwS19QVSk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fU0QxX0RBVEExLAorCQkJICBNTUNfUEFEX0NGRyB8IFBBRF9DVExfUFVFX1BVRCB8IFBBRF9DVExfMTAwS19QVSk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fU0QxX0RBVEEyLAorCQkJICBNTUNfUEFEX0NGRyB8IFBBRF9DVExfUFVFX1BVRCB8IFBBRF9DVExfMTAwS19QVSk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fU0QxX0RBVEEzLAorCQkJICBNTUNfUEFEX0NGRyB8IFBBRF9DVExfUFVFX1BVRCB8IFBBRF9DVExfMTAwS19QVSk7CisJbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fU0QxX0NNRCwKKwkJCSAgTU1DX1BBRF9DRkcgfCBQQURfQ1RMX1BVRV9QVUQgfCBQQURfQ1RMXzEwMEtfUFUpOwogCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1NEMV9DTEssIE1NQ19QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9TRDFfQ01ELCBNTUNfUEFEX0NGRyk7CiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoZ3Bpb19kZXQsICJNTUMgZGV0ZWN0Iik7CiAJaWYgKHJldCkKQEAgLTExMyw3ICsxMjUsNyBAQAogCWdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW9fd3ApOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoSU9NVVhfVE9fSVJRKE1YMzFfUElOX0RDRF9EQ0UxKSwgZGV0ZWN0X2lycSwKLQkJCSAgSVJRRl9ESVNBQkxFRCB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAorCQkJICBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCiAJCQkgICJNTUMgZGV0ZWN0IiwgZGF0YSk7CiAJaWYgKHJldCkKIAkJZ290byBleGl0X2ZyZWVfd3A7CkBAIC0xMzMsNyArMTQ1LDcgQEAKIHsKIAlncGlvX2ZyZWUoZ3Bpb19kZXQpOwogCWdwaW9fZnJlZShncGlvX3dwKTsKLQlmcmVlX2lycShJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzFfMSksIGRhdGEpOworCWZyZWVfaXJxKElPTVVYX1RPX0lSUShNWDMxX1BJTl9EQ0RfRENFMSksIGRhdGEpOwogfQogCiBzdGF0aWMgc3RydWN0IGlteG1tY19wbGF0Zm9ybV9kYXRhIG1tY19wZGF0YSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaXRlLmMgYi9hcmNoL2FybS9tYWNoLW14My9teDMxbGl0ZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODliMjBkLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFsaXRlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTcgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQotICogIENvcHlyaWdodCAyMDA1LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgRGFuaWVsIE1hY2sgPGRhbmllbEBjYWlhcS5kZT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgotI2luY2x1ZGUgPGxpbnV4L21mZC9tYzEzNzgzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IvdWxwaS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgotI2luY2x1ZGUgPG1hY2gvYm9hcmQtbXgzMWxpdGUuaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxtYWNoL214Y19uYW5kLmg+Ci0jaW5jbHVkZSA8bWFjaC9zcGkuaD4KLSNpbmNsdWRlIDxtYWNoL214Y19laGNpLmg+Ci0jaW5jbHVkZSA8bWFjaC91bHBpLmg+Ci0KLSNpbmNsdWRlICJkZXZpY2VzLmgiCi0KLS8qCi0gKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIG1vZHVsZS1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4KLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IG14MzFsaXRlX3BpbnNbXSA9IHsKLQkvKiBMQU45MTE3IElSUSBwaW4gKi8KLQlJT01VWF9NT0RFKE1YMzFfUElOX1NGUzYsIElPTVVYX0NPTkZJR19HUElPKSwKLQkvKiBTUEkgMSAqLwotCU1YMzFfUElOX0NTUEkyX1NDTEtfX1NDTEssCi0JTVgzMV9QSU5fQ1NQSTJfTU9TSV9fTU9TSSwKLQlNWDMxX1BJTl9DU1BJMl9NSVNPX19NSVNPLAotCU1YMzFfUElOX0NTUEkyX1NQSV9SRFlfX1NQSV9SRFksCi0JTVgzMV9QSU5fQ1NQSTJfU1MwX19TUzAsCi0JTVgzMV9QSU5fQ1NQSTJfU1MxX19TUzEsCi0JTVgzMV9QSU5fQ1NQSTJfU1MyX19TUzIsCi19OwotCi1zdGF0aWMgc3RydWN0IG14Y19uYW5kX3BsYXRmb3JtX2RhdGEgbXgzMWxpdGVfbmFuZF9ib2FyZF9pbmZvID0gewotCS53aWR0aCA9IDEsCi0JLmh3X2VjYyA9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyBzbXNjOTExeF9jb25maWcgPSB7Ci0JLmlycV9wb2xhcml0eQk9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAotCS5pcnFfdHlwZQk9IFNNU0M5MTFYX0lSUV9UWVBFX1BVU0hfUFVMTCwKLQkuZmxhZ3MJCT0gU01TQzkxMVhfVVNFXzE2QklULAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbXNjOTExeF9yZXNvdXJjZXNbXSA9IHsKLQl7Ci0JCS5zdGFydAkJPSBDUzRfQkFTRV9BRERSLAotCQkuZW5kCQk9IENTNF9CQVNFX0FERFIgKyAweDEwMCwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0CQk9IElPTVVYX1RPX0lSUShNWDMxX1BJTl9TRlM2KSwKLQkJLmVuZAkJPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fU0ZTNiksCi0JCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21zYzkxMXhfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzbXNjOTExeCIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbXNjOTExeF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IHNtc2M5MTF4X3Jlc291cmNlcywKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmc21zYzkxMXhfY29uZmlnLAotCX0sCi19OwotCi0vKgotICogU1BJCi0gKgotICogVGhlIE1DMTM3ODMgaXMgdGhlIG9ubHkgaGFyZC13aXJlZCBTUEkgZGV2aWNlIG9uIHRoZSBtb2R1bGUuCi0gKi8KLQotc3RhdGljIGludCBzcGlfaW50ZXJuYWxfY2hpcHNlbGVjdFtdID0gewotCU1YQ19TUElfQ1MoMCksCi19OwotCi1zdGF0aWMgc3RydWN0IHNwaV9pbXhfbWFzdGVyIHNwaTFfcGRhdGEgPSB7Ci0JLmNoaXBzZWxlY3QJPSBzcGlfaW50ZXJuYWxfY2hpcHNlbGVjdCwKLQkubnVtX2NoaXBzZWxlY3QJPSBBUlJBWV9TSVpFKHNwaV9pbnRlcm5hbF9jaGlwc2VsZWN0KSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWMxMzc4M19wbGF0Zm9ybV9kYXRhIG1jMTM3ODNfcGRhdGEgX19pbml0ZGF0YSA9IHsKLQkuZmxhZ3MgID0gTUMxMzc4M19VU0VfUlRDIHwKLQkJICBNQzEzNzgzX1VTRV9SRUdVTEFUT1IsCi19OwotCi1zdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIG1jMTM3ODNfc3BpX2RldiBfX2luaXRkYXRhID0gewotCS5tb2RhbGlhcyAgICAgICA9ICJtYzEzNzgzIiwKLQkubWF4X3NwZWVkX2h6ICAgPSAxMDAwMDAwLAotCS5idXNfbnVtCT0gMSwKLQkuY2hpcF9zZWxlY3QgICAgPSAwLAotCS5wbGF0Zm9ybV9kYXRhICA9ICZtYzEzNzgzX3BkYXRhLAotCS5pcnEJCT0gSU9NVVhfVE9fSVJRKE1YMzFfUElOX0dQSU8xXzMpLAotfTsKLQotLyoKLSAqIFVTQgotICovCi0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKLSNkZWZpbmUgVVNCX1BBRF9DRkcgKFBBRF9DVExfRFJWX01BWCB8IFBBRF9DVExfU1JFX0ZBU1QgfCBQQURfQ1RMX0hZU19DTU9TIHwgXAotCQkJUEFEX0NUTF9PREVfQ01PUyB8IFBBRF9DVExfMTAwS19QVSkKLQotc3RhdGljIGludCB1c2JoMl9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JaW50IHBpbnNbXSA9IHsKLQkJTVgzMV9QSU5fVVNCSDJfREFUQTBfX1VTQkgyX0RBVEEwLAotCQlNWDMxX1BJTl9VU0JIMl9EQVRBMV9fVVNCSDJfREFUQTEsCi0JCU1YMzFfUElOX1VTQkgyX0NMS19fVVNCSDJfQ0xLLAotCQlNWDMxX1BJTl9VU0JIMl9ESVJfX1VTQkgyX0RJUiwKLQkJTVgzMV9QSU5fVVNCSDJfTlhUX19VU0JIMl9OWFQsCi0JCU1YMzFfUElOX1VTQkgyX1NUUF9fVVNCSDJfU1RQLAotCX07Ci0KLQlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhwaW5zLCBBUlJBWV9TSVpFKHBpbnMpLCAiVVNCIEgyIik7Ci0KLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JIMl9DTEssIFVTQl9QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JIMl9ESVIsIFVTQl9QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JIMl9OWFQsIFVTQl9QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JIMl9TVFAsIFVTQl9QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JIMl9EQVRBMCwgVVNCX1BBRF9DRkcpOwotCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQkgyX0RBVEExLCBVU0JfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fU1JYRDYsIFVTQl9QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9TVFhENiwgVVNCX1BBRF9DRkcpOwotCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1NGUzMsIFVTQl9QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9TQ0szLCBVU0JfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fU1JYRDMsIFVTQl9QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9TVFhEMywgVVNCX1BBRF9DRkcpOwotCi0JbXhjX2lvbXV4X3NldF9ncHIoTVVYX1BHUF9VSDIsIHRydWUpOwotCi0JLyogY2hpcCBzZWxlY3QgKi8KLQlteGNfaW9tdXhfYWxsb2NfcGluKElPTVVYX01PREUoTVgzMV9QSU5fRFRSX0RDRTEsIElPTVVYX0NPTkZJR19HUElPKSwKLQkJCQkiVVNCSDJfQ1MiKTsKLQlncGlvX3JlcXVlc3QoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9EVFJfRENFMSksICJVU0JIMiBDUyIpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChJT01VWF9UT19HUElPKE1YMzFfUElOX0RUUl9EQ0UxKSwgMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhID0gewotCS5pbml0ICAgPSB1c2JoMl9pbml0LAotCS5wb3J0c2MgPSBNWENfRUhDSV9NT0RFX1VMUEkgfCBNWENfRUhDSV9VVE1JXzhCSVQsCi0JLmZsYWdzICA9IE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCwKLX07Ci0jZW5kaWYKLQotLyoKLSAqIE5PUiBmbGFzaAotICovCi0KLXN0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG5vcl9mbGFzaF9kYXRhID0gewotCS53aWR0aCAgPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBub3JfZmxhc2hfcmVzb3VyY2UgPSB7Ci0JLnN0YXJ0ICA9IDB4YTAwMDAwMDAsCi0JLmVuZCAgICA9IDB4YTFmZmZmZmYsCi0JLmZsYWdzICA9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGh5c21hcF9mbGFzaF9kZXZpY2UgPSB7Ci0JLm5hbWUgICA9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQgICAgID0gMCwKLQkuZGV2ICAgID0gewotCQkucGxhdGZvcm1fZGF0YSAgPSAmbm9yX2ZsYXNoX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UgPSAmbm9yX2ZsYXNoX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLX07Ci0KLQotCi0vKgotICogVGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyB0aGUgTVgzMSBtZW1vcnkgbWFwLgotICovCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIG14MzFsaXRlX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwgPSBDUzRfQkFTRV9BRERSX1ZJUlQsCi0JCS5wZm4gPSBfX3BoeXNfdG9fcGZuKENTNF9CQVNFX0FERFIpLAotCQkubGVuZ3RoID0gQ1M0X1NJWkUsCi0JCS50eXBlID0gTVRfREVWSUNFCi0JfQotfTsKLQotLyoKLSAqIFNldCB1cCBzdGF0aWMgdmlydHVhbCBtYXBwaW5ncy4KLSAqLwotdm9pZCBfX2luaXQgbXgzMWxpdGVfbWFwX2lvKHZvaWQpCi17Ci0JbXgzMV9tYXBfaW8oKTsKLQlpb3RhYmxlX2luaXQobXgzMWxpdGVfaW9fZGVzYywgQVJSQVlfU0laRShteDMxbGl0ZV9pb19kZXNjKSk7Ci19Ci0KLXN0YXRpYyBpbnQgbXgzMWxpdGVfYmFzZWJvYXJkOwotY29yZV9wYXJhbShteDMxbGl0ZV9iYXNlYm9hcmQsIG14MzFsaXRlX2Jhc2Vib2FyZCwgaW50LCAwNDQ0KTsKLQotc3RhdGljIHZvaWQgX19pbml0IG14Y19ib2FyZF9pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQotCXN3aXRjaCAobXgzMWxpdGVfYmFzZWJvYXJkKSB7Ci0JY2FzZSBNWDMxTElURV9OT0JPQVJEOgotCQlicmVhazsKLQljYXNlIE1YMzFMSVRFX0RCOgotCQlteDMxbGl0ZV9kYl9pbml0KCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiSWxsZWdhbCBteDMxbGl0ZV9iYXNlYm9hcmQgdHlwZSAlZFxuIiwKLQkJCQlteDMxbGl0ZV9iYXNlYm9hcmQpOwotCX0KLQotCW14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKG14MzFsaXRlX3BpbnMsIEFSUkFZX1NJWkUobXgzMWxpdGVfcGlucyksCi0JCQkJICAgICAgIm14MzFsaXRlIik7Ci0KLQkvKiBOT1IgYW5kIE5BTkQgZmxhc2ggKi8KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBoeXNtYXBfZmxhc2hfZGV2aWNlKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfbmFuZF9kZXZpY2UsICZteDMxbGl0ZV9uYW5kX2JvYXJkX2luZm8pOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3NwaV9kZXZpY2UxLCAmc3BpMV9wZGF0YSk7Ci0Jc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oJm1jMTM3ODNfc3BpX2RldiwgMSk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19VU0JfVUxQSSkKLQkvKiBVU0IgKi8KLQl1c2JoMl9wZGF0YS5vdGcgPSBvdGdfdWxwaV9jcmVhdGUoJm14Y191bHBpX2FjY2Vzc19vcHMsCi0JCQkJVVNCX09UR19EUlZfVkJVUyB8IFVTQl9PVEdfRFJWX1ZCVVNfRVhUKTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191c2JoMiwgJnVzYmgyX3BkYXRhKTsKLSNlbmRpZgotCi0JLyogU01TQzkxMTcgSVJRIHBpbiAqLwotCXJldCA9IGdwaW9fcmVxdWVzdChJT01VWF9UT19HUElPKE1YMzFfUElOX1NGUzYpLCAic21zOTExNy1pcnEiKTsKLQlpZiAocmV0KQotCQlwcl93YXJuaW5nKCJjb3VsZCBub3QgZ2V0IExBTiBpcnEgZ3Bpb1xuIik7Ci0JZWxzZSB7Ci0JCWdwaW9fZGlyZWN0aW9uX2lucHV0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fU0ZTNikpOwotCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnNtc2M5MTF4X2RldmljZSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgbXgzMWxpdGVfdGltZXJfaW5pdCh2b2lkKQotewotCW14MzFfY2xvY2tzX2luaXQoMjYwMDAwMDApOwotfQotCi1zdHJ1Y3Qgc3lzX3RpbWVyIG14MzFsaXRlX3RpbWVyID0gewotCS5pbml0CT0gbXgzMWxpdGVfdGltZXJfaW5pdCwKLX07Ci0KLU1BQ0hJTkVfU1RBUlQoTVgzMUxJVEUsICJMb2dpY1BEIGkuTVgzMSBTT00iKQotCS8qIE1haW50YWluZXI6IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuICovCi0JLnBoeXNfaW8gICAgICAgID0gQUlQUzFfQkFTRV9BRERSLAotCS5pb19wZ19vZmZzdCAgICA9ICgoQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IG14MzFsaXRlX21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDMxX2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAotCS50aW1lciAgICAgICAgICA9ICZteDMxbGl0ZV90aW1lciwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1kZXZib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtZGV2Ym9hcmQuYwppbmRleCA0Mzg0MjhlLi45ZmJhZDJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1kZXZib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLWRldmJvYXJkLmMKQEAgLTQ5LDYgKzQ5LDkgQEAKIAlNWDMxX1BJTl9DU1BJMV9TUzJfX1VTQkgxX1JDViwgTVgzMV9QSU5fQ1NQSTFfU0NMS19fVVNCSDFfT0VCLAogCU1YMzFfUElOX0NTUEkxX1NQSV9SRFlfX1VTQkgxX0ZTLCBNWDMxX1BJTl9TRlM2X19VU0JIMV9TVVNQRU5ELAogCU1YMzFfUElOX05GUkVfQl9fR1BJTzFfMTEsIE1YMzFfUElOX05GQUxFX19HUElPMV8xMiwKKwkvKiBTRUwgKi8KKwlNWDMxX1BJTl9EVFJfRENFMV9fR1BJTzJfOCwgTVgzMV9QSU5fRFNSX0RDRTFfX0dQSU8yXzksCisJTVgzMV9QSU5fUklfRENFMV9fR1BJTzJfMTAsIE1YMzFfUElOX0RDRF9EQ0UxX19HUElPMl8xMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW14dWFydF9wbGF0Zm9ybV9kYXRhIHVhcnRfcGRhdGEgPSB7CkBAIC0xMDgsNiArMTExLDMzIEBACiAJLmV4aXQJPSBkZXZib2FyZF9zZGhjMl9leGl0LAogfTsKIAorI2RlZmluZSBTRUwwIElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fRFRSX0RDRTEpCisjZGVmaW5lIFNFTDEgSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9EU1JfRENFMSkKKyNkZWZpbmUgU0VMMiBJT01VWF9UT19HUElPKE1YMzFfUElOX1JJX0RDRTEpCisjZGVmaW5lIFNFTDMgSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9EQ0RfRENFMSkKKworc3RhdGljIHZvaWQgZGV2Ym9hcmRfaW5pdF9zZWxfZ3Bpb3Modm9pZCkKK3sKKwlpZiAoIWdwaW9fcmVxdWVzdChTRUwwLCAic2VsMCIpKSB7CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KFNFTDApOworCQlncGlvX2V4cG9ydChTRUwwLCB0cnVlKTsKKwl9CisKKwlpZiAoIWdwaW9fcmVxdWVzdChTRUwxLCAic2VsMSIpKSB7CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KFNFTDEpOworCQlncGlvX2V4cG9ydChTRUwxLCB0cnVlKTsKKwl9CisKKwlpZiAoIWdwaW9fcmVxdWVzdChTRUwyLCAic2VsMiIpKSB7CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KFNFTDIpOworCQlncGlvX2V4cG9ydChTRUwyLCB0cnVlKTsKKwl9CisKKwlpZiAoIWdwaW9fcmVxdWVzdChTRUwzLCAic2VsMyIpKSB7CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KFNFTDMpOworCQlncGlvX2V4cG9ydChTRUwzLCB0cnVlKTsKKwl9Cit9CiAjZGVmaW5lIFVTQl9QQURfQ0ZHIChQQURfQ1RMX0RSVl9NQVggfCBQQURfQ1RMX1NSRV9GQVNUIHwgUEFEX0NUTF9IWVNfQ01PUyB8IFwKIAkJCVBBRF9DVExfT0RFX0NNT1MgfCBQQURfQ1RMXzEwMEtfUFUpCiAKQEAgLTE5Niw1ICsyMjYsNyBAQAogCiAJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjc2RoY19kZXZpY2UxLCAmc2RoYzJfcGRhdGEpOwogCisJZGV2Ym9hcmRfaW5pdF9zZWxfZ3Bpb3MoKTsKKwogCWRldmJvYXJkX3VzYmgxX2luaXQoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLW1hcnhib3QuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLW1hcnhib3QuYwppbmRleCAxZjQ0YjljLi4zOTU4NTE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1tYXJ4Ym90LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtbWFyeGJvdC5jCkBAIC02Niw2ICs2Niw5IEBACiAJTVgzMV9QSU5fQ1NQSTFfU1MyX19VU0JIMV9SQ1YsIE1YMzFfUElOX0NTUEkxX1NDTEtfX1VTQkgxX09FQiwKIAlNWDMxX1BJTl9DU1BJMV9TUElfUkRZX19VU0JIMV9GUywgTVgzMV9QSU5fU0ZTNl9fVVNCSDFfU1VTUEVORCwKIAlNWDMxX1BJTl9ORlJFX0JfX0dQSU8xXzExLCBNWDMxX1BJTl9ORkFMRV9fR1BJTzFfMTIsCisJLyogU0VMICovCisJTVgzMV9QSU5fRFRSX0RDRTFfX0dQSU8yXzgsIE1YMzFfUElOX0RTUl9EQ0UxX19HUElPMl85LAorCU1YMzFfUElOX1JJX0RDRTFfX0dQSU8yXzEwLCBNWDMxX1BJTl9EQ0RfRENFMV9fR1BJTzJfMTEsCiB9OwogCiAjZGVmaW5lIFNESEMyX0NEIElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fQVRBX0RJT1IpCkBAIC0xMjcsMTIgKzEzMCwxMiBAQAogc3RhdGljIHZvaWQgZHNwaWNzX3Jlc2V0c19pbml0KHZvaWQpCiB7CiAJaWYgKCFncGlvX3JlcXVlc3QoVFJTTEFUX1JTVF9CLCAidHJhbnNsYXRvci1yc3QiKSkgewotCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoVFJTTEFUX1JTVF9CLCAxKTsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFRSU0xBVF9SU1RfQiwgMCk7CiAJCWdwaW9fZXhwb3J0KFRSU0xBVF9SU1RfQiwgZmFsc2UpOwogCX0KIAogCWlmICghZ3Bpb19yZXF1ZXN0KERTUElDU19SU1RfQiwgImRzcGljcy1yc3QiKSkgewotCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoRFNQSUNTX1JTVF9CLCAxKTsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KERTUElDU19SU1RfQiwgMCk7CiAJCWdwaW9fZXhwb3J0KERTUElDU19SU1RfQiwgZmFsc2UpOwogCX0KIH0KQEAgLTIwMCw3ICsyMDMsNyBAQAogCWludCByZXQgPSBncGlvX3JlcXVlc3QoQ0FNX0NIT0lDRSwgImNhbS1jaG9pY2UiKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChDQU1fQ0hPSUNFLCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoQ0FNX0NIT0lDRSwgMCk7CiAKIAlyZXQgPSBncGlvX3JlcXVlc3QoQkFTRUNBTV9SU1RfQiwgImJhc2VjYW0tcmVzZXQiKTsKIAlpZiAocmV0KQpAQCAtMjIzLDYgKzIyNiwzNCBAQAogCXJldHVybiAwOwogfQogCisjZGVmaW5lIFNFTDAgSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9EVFJfRENFMSkKKyNkZWZpbmUgU0VMMSBJT01VWF9UT19HUElPKE1YMzFfUElOX0RTUl9EQ0UxKQorI2RlZmluZSBTRUwyIElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fUklfRENFMSkKKyNkZWZpbmUgU0VMMyBJT01VWF9UT19HUElPKE1YMzFfUElOX0RDRF9EQ0UxKQorCitzdGF0aWMgdm9pZCBtYXJ4Ym90X2luaXRfc2VsX2dwaW9zKHZvaWQpCit7CisJaWYgKCFncGlvX3JlcXVlc3QoU0VMMCwgInNlbDAiKSkgeworCQlncGlvX2RpcmVjdGlvbl9pbnB1dChTRUwwKTsKKwkJZ3Bpb19leHBvcnQoU0VMMCwgdHJ1ZSk7CisJfQorCisJaWYgKCFncGlvX3JlcXVlc3QoU0VMMSwgInNlbDEiKSkgeworCQlncGlvX2RpcmVjdGlvbl9pbnB1dChTRUwxKTsKKwkJZ3Bpb19leHBvcnQoU0VMMSwgdHJ1ZSk7CisJfQorCisJaWYgKCFncGlvX3JlcXVlc3QoU0VMMiwgInNlbDIiKSkgeworCQlncGlvX2RpcmVjdGlvbl9pbnB1dChTRUwyKTsKKwkJZ3Bpb19leHBvcnQoU0VMMiwgdHJ1ZSk7CisJfQorCisJaWYgKCFncGlvX3JlcXVlc3QoU0VMMywgInNlbDMiKSkgeworCQlncGlvX2RpcmVjdGlvbl9pbnB1dChTRUwzKTsKKwkJZ3Bpb19leHBvcnQoU0VMMywgdHJ1ZSk7CisJfQorfQorCiAjZGVmaW5lIFVTQl9QQURfQ0ZHIChQQURfQ1RMX0RSVl9NQVggfCBQQURfQ1RMX1NSRV9GQVNUIHwgUEFEX0NUTF9IWVNfQ01PUyB8IFwKIAkJCVBBRF9DVExfT0RFX0NNT1MgfCBQQURfQ1RMXzEwMEtfUFUpCiAKQEAgLTMwNyw2ICszMzgsOCBAQAogCW14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKG1hcnhib3RfcGlucywgQVJSQVlfU0laRShtYXJ4Ym90X3BpbnMpLAogCQkibWFyeGJvdCIpOwogCisJbWFyeGJvdF9pbml0X3NlbF9ncGlvcygpOworCiAJZHNwaWNzX3Jlc2V0c19pbml0KCk7CiAKIAlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNzZGhjX2RldmljZTEsICZzZGhjMl9wZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14My9teDMxbW9ib2FyZC1zbWFydGJvdC5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtc21hcnRib3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmE2OWZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQtc21hcnRib3QuYwpAQCAtMCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBWYWxlbnRpbiBMb25nY2hhbXAsIEVQRkwgTW9ib3RzIGdyb3VwCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgorCisjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgdW5zaWduZWQgaW50IHNtYXJ0Ym90X3BpbnNbXSA9IHsKKwkvKiBVQVJUMSAqLworCU1YMzFfUElOX0NUUzJfX0NUUzIsIE1YMzFfUElOX1JUUzJfX1JUUzIsCisJTVgzMV9QSU5fVFhEMl9fVFhEMiwgTVgzMV9QSU5fUlhEMl9fUlhEMiwKKwkvKiBDU0kgKi8KKwlNWDMxX1BJTl9DU0lfRDRfX0NTSV9ENCwgTVgzMV9QSU5fQ1NJX0Q1X19DU0lfRDUsCisJTVgzMV9QSU5fQ1NJX0Q2X19DU0lfRDYsIE1YMzFfUElOX0NTSV9EN19fQ1NJX0Q3LAorCU1YMzFfUElOX0NTSV9EOF9fQ1NJX0Q4LCBNWDMxX1BJTl9DU0lfRDlfX0NTSV9EOSwKKwlNWDMxX1BJTl9DU0lfRDEwX19DU0lfRDEwLCBNWDMxX1BJTl9DU0lfRDExX19DU0lfRDExLAorCU1YMzFfUElOX0NTSV9EMTJfX0NTSV9EMTIsIE1YMzFfUElOX0NTSV9EMTNfX0NTSV9EMTMsCisJTVgzMV9QSU5fQ1NJX0QxNF9fQ1NJX0QxNCwgTVgzMV9QSU5fQ1NJX0QxNV9fQ1NJX0QxNSwKKwlNWDMxX1BJTl9DU0lfSFNZTkNfX0NTSV9IU1lOQywgTVgzMV9QSU5fQ1NJX01DTEtfX0NTSV9NQ0xLLAorCU1YMzFfUElOX0NTSV9QSVhDTEtfX0NTSV9QSVhDTEssIE1YMzFfUElOX0NTSV9WU1lOQ19fQ1NJX1ZTWU5DLAorCU1YMzFfUElOX0dQSU8zXzBfX0dQSU8zXzAsIE1YMzFfUElOX0dQSU8zXzFfX0dQSU8zXzEsCisJLyogRU5BQkxFUyAqLworCU1YMzFfUElOX0RUUl9EQ0UxX19HUElPMl84LCBNWDMxX1BJTl9EU1JfRENFMV9fR1BJTzJfOSwKKwlNWDMxX1BJTl9SSV9EQ0UxX19HUElPMl8xMCwgTVgzMV9QSU5fRENEX0RDRTFfX0dQSU8yXzExLAorfTsKKworc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKKwkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorfTsKKworI2RlZmluZSBDQU1fUE9XRVIJSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9HUElPM18xKQorI2RlZmluZSBDQU1fUlNUX0IJSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9HUElPM18wKQorCitzdGF0aWMgaW50IHNtYXJ0Ym90X2NhbV9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBvbikKK3sKKwlncGlvX3NldF92YWx1ZShDQU1fUE9XRVIsICFvbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc21hcnRib3RfY2FtX3Jlc2V0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlncGlvX3NldF92YWx1ZShDQU1fUlNUX0IsIDApOworCXVkZWxheSgxMDApOworCWdwaW9fc2V0X3ZhbHVlKENBTV9SU1RfQiwgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gc21hcnRib3RfaTJjX2RldmljZXNbXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJtdDl0MDMxIiwgMHg1ZCksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGJhc2VfaWNsaW5rID0geworCS5idXNfaWQJCT0gMCwJCS8qIE11c3QgbWF0Y2ggd2l0aCB0aGUgY2FtZXJhIElEICovCisJLnBvd2VyCQk9IHNtYXJ0Ym90X2NhbV9wb3dlciwKKwkucmVzZXQJCT0gc21hcnRib3RfY2FtX3Jlc2V0LAorCS5ib2FyZF9pbmZvCT0gJnNtYXJ0Ym90X2kyY19kZXZpY2VzWzBdLAorCS5pMmNfYWRhcHRlcl9pZAk9IDAsCisJLm1vZHVsZV9uYW1lCT0gIm10OXQwMzEiLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21hcnRib3RfY2FtZXJhW10gPSB7CisJeworCQkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAorCQkuaWQJPSAwLAorCQkuZGV2CT0geworCQkJLnBsYXRmb3JtX2RhdGEgPSAmYmFzZV9pY2xpbmssCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzbWFydGJvdF9jYW1lcmFzW10gX19pbml0ZGF0YSA9IHsKKwkmc21hcnRib3RfY2FtZXJhWzBdLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc21hcnRib3RfY2FtX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0ID0gZ3Bpb19yZXF1ZXN0KENBTV9SU1RfQiwgImNhbS1yZXNldCIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KENBTV9SU1RfQiwgMSk7CisJcmV0ID0gZ3Bpb19yZXF1ZXN0KENBTV9QT1dFUiwgImNhbS1zdGFuZGJ5Iik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoQ0FNX1BPV0VSLCAwKTsKKworCXJldHVybiAwOworfQorCisjZGVmaW5lIFBPV0VSX0VOIElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fRFRSX0RDRTEpCisjZGVmaW5lIERTUElDX1JTVF9CIElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fRFNSX0RDRTEpCisjZGVmaW5lIFRSU0xBVF9SU1RfQiBJT01VWF9UT19HUElPKE1YMzFfUElOX1JJX0RDRTEpCisjZGVmaW5lIFNFTDMgSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9EQ0RfRENFMSkKKworc3RhdGljIHZvaWQgc21hcnRib3RfcmVzZXRzX2luaXQodm9pZCkKK3sKKwlpZiAoIWdwaW9fcmVxdWVzdChQT1dFUl9FTiwgInBvd2VyLWVuYWJsZSIpKSB7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChQT1dFUl9FTiwgMCk7CisJCWdwaW9fZXhwb3J0KFBPV0VSX0VOLCBmYWxzZSk7CisJfQorCisJaWYgKCFncGlvX3JlcXVlc3QoRFNQSUNfUlNUX0IsICJkc3BpYy1yc3QiKSkgeworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoRFNQSUNfUlNUX0IsIDApOworCQlncGlvX2V4cG9ydChEU1BJQ19SU1RfQiwgZmFsc2UpOworCX0KKworCWlmICghZ3Bpb19yZXF1ZXN0KFRSU0xBVF9SU1RfQiwgInRyYW5zbGF0b3ItcnN0IikpIHsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFRSU0xBVF9SU1RfQiwgMCk7CisJCWdwaW9fZXhwb3J0KFRSU0xBVF9SU1RfQiwgZmFsc2UpOworCX0KKworCWlmICghZ3Bpb19yZXF1ZXN0KFNFTDMsICJzZWwzIikpIHsKKwkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoU0VMMyk7CisJCWdwaW9fZXhwb3J0KFNFTDMsIHRydWUpOworCX0KK30KKy8qCisgKiBzeXN0ZW0gaW5pdCBmb3IgYmFzZWJvYXJkIHVzYWdlLiBXaWxsIGJlIGNhbGxlZCBieSBteDMxbW9ib2FyZCBpbml0LgorICovCit2b2lkIF9faW5pdCBteDMxbW9ib2FyZF9zbWFydGJvdF9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiSW5pdGlhbGl6aW5nIG14MzFzbWFydGJvdCBwZXJpcGhlcmFsc1xuIik7CisKKwlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhzbWFydGJvdF9waW5zLCBBUlJBWV9TSVpFKHNtYXJ0Ym90X3BpbnMpLAorCQkic21hcnRib3QiKTsKKworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTEsICZ1YXJ0X3BkYXRhKTsKKworCXNtYXJ0Ym90X3Jlc2V0c19pbml0KCk7CisKKwlzbWFydGJvdF9jYW1faW5pdCgpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNtYXJ0Ym90X2NhbWVyYXMsIEFSUkFZX1NJWkUoc21hcnRib3RfY2FtZXJhcykpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQuYyBiL2FyY2gvYXJtL21hY2gtbXgzL214MzFtb2JvYXJkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZDYwNWQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMW1vYm9hcmQuYworKysgL2Rldi9udWxsCkBAIC0xLDU4MCArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwOCBWYWxlbnRpbiBMb25nY2hhbXAsIEVQRkwgTW9ib3RzIGdyb3VwCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KLSNpbmNsdWRlIDxsaW51eC9tZmQvbWMxMzc4My5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi91bHBpLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8bWFjaC9ib2FyZC1teDMxbW9ib2FyZC5oPgotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KLSNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgotI2luY2x1ZGUgPG1hY2gvaXB1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9pMmMuaD4KLSNpbmNsdWRlIDxtYWNoL21tYy5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX2VoY2kuaD4KLSNpbmNsdWRlIDxtYWNoL214M19jYW1lcmEuaD4KLSNpbmNsdWRlIDxtYWNoL3NwaS5oPgotI2luY2x1ZGUgPG1hY2gvdWxwaS5oPgotCi0jaW5jbHVkZSAiZGV2aWNlcy5oIgotCi1zdGF0aWMgdW5zaWduZWQgaW50IG1vYm9hcmRfcGluc1tdID0gewotCS8qIFVBUlQwICovCi0JTVgzMV9QSU5fVFhEMV9fVFhEMSwgTVgzMV9QSU5fUlhEMV9fUlhEMSwKLQlNWDMxX1BJTl9DVFMxX19HUElPMl83LAotCS8qIFVBUlQ0ICovCi0JTVgzMV9QSU5fUENfUlNUX19DVFM1LCBNWDMxX1BJTl9QQ19WUzJfX1JUUzUsCi0JTVgzMV9QSU5fUENfQlZEMl9fVFhENSwgTVgzMV9QSU5fUENfQlZEMV9fUlhENSwKLQkvKiBJMkMwICovCi0JTVgzMV9QSU5fSTJDX0RBVF9fSTJDMV9TREEsIE1YMzFfUElOX0kyQ19DTEtfX0kyQzFfU0NMLAotCS8qIEkyQzEgKi8KLQlNWDMxX1BJTl9EQ0RfRFRFMV9fSTJDMl9TREEsIE1YMzFfUElOX1JJX0RURTFfX0kyQzJfU0NMLAotCS8qIFNESEMxICovCi0JTVgzMV9QSU5fU0QxX0RBVEEzX19TRDFfREFUQTMsIE1YMzFfUElOX1NEMV9EQVRBMl9fU0QxX0RBVEEyLAotCU1YMzFfUElOX1NEMV9EQVRBMV9fU0QxX0RBVEExLCBNWDMxX1BJTl9TRDFfREFUQTBfX1NEMV9EQVRBMCwKLQlNWDMxX1BJTl9TRDFfQ0xLX19TRDFfQ0xLLCBNWDMxX1BJTl9TRDFfQ01EX19TRDFfQ01ELAotCU1YMzFfUElOX0FUQV9DUzBfX0dQSU8zXzI2LCBNWDMxX1BJTl9BVEFfQ1MxX19HUElPM18yNywKLQkvKiBVU0IgcmVzZXQgKi8KLQlNWDMxX1BJTl9HUElPMV8wX19HUElPMV8wLAotCS8qIFVTQiBPVEcgKi8KLQlNWDMxX1BJTl9VU0JPVEdfREFUQTBfX1VTQk9UR19EQVRBMCwKLQlNWDMxX1BJTl9VU0JPVEdfREFUQTFfX1VTQk9UR19EQVRBMSwKLQlNWDMxX1BJTl9VU0JPVEdfREFUQTJfX1VTQk9UR19EQVRBMiwKLQlNWDMxX1BJTl9VU0JPVEdfREFUQTNfX1VTQk9UR19EQVRBMywKLQlNWDMxX1BJTl9VU0JPVEdfREFUQTRfX1VTQk9UR19EQVRBNCwKLQlNWDMxX1BJTl9VU0JPVEdfREFUQTVfX1VTQk9UR19EQVRBNSwKLQlNWDMxX1BJTl9VU0JPVEdfREFUQTZfX1VTQk9UR19EQVRBNiwKLQlNWDMxX1BJTl9VU0JPVEdfREFUQTdfX1VTQk9UR19EQVRBNywKLQlNWDMxX1BJTl9VU0JPVEdfQ0xLX19VU0JPVEdfQ0xLLCBNWDMxX1BJTl9VU0JPVEdfRElSX19VU0JPVEdfRElSLAotCU1YMzFfUElOX1VTQk9UR19OWFRfX1VTQk9UR19OWFQsIE1YMzFfUElOX1VTQk9UR19TVFBfX1VTQk9UR19TVFAsCi0JTVgzMV9QSU5fVVNCX09DX19HUElPMV8zMCwKLQkvKiBVU0IgSDIgKi8KLQlNWDMxX1BJTl9VU0JIMl9EQVRBMF9fVVNCSDJfREFUQTAsCi0JTVgzMV9QSU5fVVNCSDJfREFUQTFfX1VTQkgyX0RBVEExLAotCU1YMzFfUElOX1NUWEQzX19VU0JIMl9EQVRBMiwgTVgzMV9QSU5fU1JYRDNfX1VTQkgyX0RBVEEzLAotCU1YMzFfUElOX1NDSzNfX1VTQkgyX0RBVEE0LCBNWDMxX1BJTl9TRlMzX19VU0JIMl9EQVRBNSwKLQlNWDMxX1BJTl9TVFhENl9fVVNCSDJfREFUQTYsIE1YMzFfUElOX1NSWEQ2X19VU0JIMl9EQVRBNywKLQlNWDMxX1BJTl9VU0JIMl9DTEtfX1VTQkgyX0NMSywgTVgzMV9QSU5fVVNCSDJfRElSX19VU0JIMl9ESVIsCi0JTVgzMV9QSU5fVVNCSDJfTlhUX19VU0JIMl9OWFQsIE1YMzFfUElOX1VTQkgyX1NUUF9fVVNCSDJfU1RQLAotCU1YMzFfUElOX1NDSzZfX0dQSU8xXzI1LAotCS8qIExFRHMgKi8KLQlNWDMxX1BJTl9TVkVOMF9fR1BJTzJfMCwgTVgzMV9QSU5fU1RYMF9fR1BJTzJfMSwKLQlNWDMxX1BJTl9TUlgwX19HUElPMl8yLCBNWDMxX1BJTl9TSU1QRDBfX0dQSU8yXzMsCi0JLyogU0VMICovCi0JTVgzMV9QSU5fRFRSX0RDRTFfX0dQSU8yXzgsIE1YMzFfUElOX0RTUl9EQ0UxX19HUElPMl85LAotCU1YMzFfUElOX1JJX0RDRTFfX0dQSU8yXzEwLCBNWDMxX1BJTl9EQ0RfRENFMV9fR1BJTzJfMTEsCi0JLyogU1BJMSAqLwotCU1YMzFfUElOX0NTUEkyX01PU0lfX01PU0ksIE1YMzFfUElOX0NTUEkyX01JU09fX01JU08sCi0JTVgzMV9QSU5fQ1NQSTJfU0NMS19fU0NMSywgTVgzMV9QSU5fQ1NQSTJfU1BJX1JEWV9fU1BJX1JEWSwKLQlNWDMxX1BJTl9DU1BJMl9TUzBfX1NTMCwgTVgzMV9QSU5fQ1NQSTJfU1MyX19TUzIsCi0JLyogQXRsYXMgSVJRICovCi0JTVgzMV9QSU5fR1BJTzFfM19fR1BJTzFfMywKLQkvKiBTUEkyICovCi0JTVgzMV9QSU5fQ1NQSTNfTU9TSV9fTU9TSSwgTVgzMV9QSU5fQ1NQSTNfTUlTT19fTUlTTywKLQlNWDMxX1BJTl9DU1BJM19TQ0xLX19TQ0xLLCBNWDMxX1BJTl9DU1BJM19TUElfUkRZX19TUElfUkRZLAotCU1YMzFfUElOX0NTUEkyX1NTMV9fQ1NQSTNfU1MxLAotfTsKLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbXgzMW1vYm9hcmRfZmxhc2hfZGF0YSA9IHsKLQkud2lkdGggIAk9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG14MzFtb2JvYXJkX2ZsYXNoX3Jlc291cmNlID0gewotCS5zdGFydAk9IDB4YTAwMDAwMDAsCi0JLmVuZAk9IDB4YTFmZmZmZmYsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBteDMxbW9ib2FyZF9mbGFzaCA9IHsKLQkubmFtZQk9ICJwaHlzbWFwLWZsYXNoIiwKLQkuaWQJPSAwLAotCS5kZXYJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhICA9ICZteDMxbW9ib2FyZF9mbGFzaF9kYXRhLAotCX0sCi0JLnJlc291cmNlID0gJm14MzFtb2JvYXJkX2ZsYXNoX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLX07Ci0KLXN0YXRpYyBpbnQgbW9ib2FyZF91YXJ0MF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JZ3Bpb19yZXF1ZXN0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fQ1RTMSksICJ1YXJ0MC1jdHMtaGFjayIpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChJT01VWF9UT19HUElPKE1YMzFfUElOX0NUUzEpLCAwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydDBfcGRhdGEgPSB7Ci0JLmluaXQgPSBtb2JvYXJkX3VhcnQwX2luaXQsCi19OwotCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0NF9wZGF0YSA9IHsKLQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBtb2JvYXJkX2kyYzBfcGRhdGEgPSB7Ci0JLmJpdHJhdGUgPSA0MDAwMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIG1vYm9hcmRfaTJjMV9wZGF0YSA9IHsKLQkuYml0cmF0ZSA9IDEwMDAwMCwKLX07Ci0KLXN0YXRpYyBpbnQgbW9ib2FyZF9zcGkxX2NzW10gPSB7Ci0JTVhDX1NQSV9DUygwKSwKLQlNWENfU1BJX0NTKDIpLAotfTsKLQotc3RhdGljIHN0cnVjdCBzcGlfaW14X21hc3RlciBtb2JvYXJkX3NwaTFfbWFzdGVyID0gewotCS5jaGlwc2VsZWN0CT0gbW9ib2FyZF9zcGkxX2NzLAotCS5udW1fY2hpcHNlbGVjdAk9IEFSUkFZX1NJWkUobW9ib2FyZF9zcGkxX2NzKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZGhjX2NvbnN1bWVyc1tdID0gewotCXsKLQkJLmRldgk9ICZteGNzZGhjX2RldmljZTAuZGV2LAotCQkuc3VwcGx5CT0gInNkaGMwX3ZjYyIsCi0JfSwKLQl7Ci0JCS5kZXYJPSAmbXhjc2RoY19kZXZpY2UxLmRldiwKLQkJLnN1cHBseQk9ICJzZGhjMV92Y2MiLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc2RoY192cmVnX2RhdGEgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubWluX3VWID0gMjcwMDAwMCwKLQkJLm1heF91ViA9IDMwMDAwMDAsCi0JCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSB8Ci0JCQlSRUdVTEFUT1JfQ0hBTkdFX01PREUgfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKLQkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwgfAotCQkJUkVHVUxBVE9SX01PREVfRkFTVCwKLQkJLmFsd2F5c19vbiA9IDAsCi0JCS5ib290X29uID0gMSwKLQl9LAotCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKHNkaGNfY29uc3VtZXJzKSwKLQkuY29uc3VtZXJfc3VwcGxpZXMgPSBzZGhjX2NvbnN1bWVycywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBjYW1fY29uc3VtZXJzW10gPSB7Ci0JewotCQkuZGV2CT0gJm14M19jYW1lcmEuZGV2LAotCQkuc3VwcGx5CT0gImNhbV92Y2MiLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgY2FtX3ZyZWdfZGF0YSA9IHsKLQkuY29uc3RyYWludHMgPSB7Ci0JCS5taW5fdVYgPSAyNzAwMDAwLAotCQkubWF4X3VWID0gMzAwMDAwMCwKLQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKLQkJCVJFR1VMQVRPUl9DSEFOR0VfTU9ERSB8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAotCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCB8Ci0JCQlSRUdVTEFUT1JfTU9ERV9GQVNULAotCQkuYWx3YXlzX29uID0gMCwKLQkJLmJvb3Rfb24gPSAxLAotCX0sCi0JLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoY2FtX2NvbnN1bWVycyksCi0JLmNvbnN1bWVyX3N1cHBsaWVzID0gY2FtX2NvbnN1bWVycywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfaW5pdF9kYXRhIG1vYm9hcmRfcmVndWxhdG9yc1tdID0gewotCXsKLQkJLmlkID0gTUMxMzc4M19SRUdVX1ZNTUMxLAotCQkuaW5pdF9kYXRhID0gJnNkaGNfdnJlZ19kYXRhLAotCX0sCi0JewotCQkuaWQgPSBNQzEzNzgzX1JFR1VfVkNBTSwKLQkJLmluaXRfZGF0YSA9ICZjYW1fdnJlZ19kYXRhLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IG1jMTM3ODNfcGxhdGZvcm1fZGF0YSBtb2JvYXJkX3BtaWMgPSB7Ci0JLnJlZ3VsYXRvcnMgPSBtb2JvYXJkX3JlZ3VsYXRvcnMsCi0JLm51bV9yZWd1bGF0b3JzID0gQVJSQVlfU0laRShtb2JvYXJkX3JlZ3VsYXRvcnMpLAotCS5mbGFncyA9IE1DMTM3ODNfVVNFX1JFR1VMQVRPUiB8IE1DMTM3ODNfVVNFX1JUQyB8Ci0JCU1DMTM3ODNfVVNFX0FEQywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gbW9ib2FyZF9zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkubW9kYWxpYXMgPSAibWMxMzc4MyIsCi0JCS5pcnEgPSBJT01VWF9UT19JUlEoTVgzMV9QSU5fR1BJTzFfMyksCi0JCS5tYXhfc3BlZWRfaHogPSAzMDAwMDAsCi0JCS5idXNfbnVtID0gMSwKLQkJLmNoaXBfc2VsZWN0ID0gMCwKLQkJLnBsYXRmb3JtX2RhdGEgPSAmbW9ib2FyZF9wbWljLAotCQkubW9kZSA9IFNQSV9DU19ISUdILAotCX0sCi19OwotCi1zdGF0aWMgaW50IG1vYm9hcmRfc3BpMl9jc1tdID0gewotCU1YQ19TUElfQ1MoMSksCi19OwotCi1zdGF0aWMgc3RydWN0IHNwaV9pbXhfbWFzdGVyIG1vYm9hcmRfc3BpMl9tYXN0ZXIgPSB7Ci0JLmNoaXBzZWxlY3QJPSBtb2JvYXJkX3NwaTJfY3MsCi0JLm51bV9jaGlwc2VsZWN0CT0gQVJSQVlfU0laRShtb2JvYXJkX3NwaTJfY3MpLAotfTsKLQotI2RlZmluZSBTREhDMV9DRCBJT01VWF9UT19HUElPKE1YMzFfUElOX0FUQV9DUzApCi0jZGVmaW5lIFNESEMxX1dQIElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fQVRBX0NTMSkKLQotc3RhdGljIGludCBtb2JvYXJkX3NkaGMxX2dldF9ybyhzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuICFncGlvX2dldF92YWx1ZShTREhDMV9XUCk7Ci19Ci0KLXN0YXRpYyBpbnQgbW9ib2FyZF9zZGhjMV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBkZXRlY3RfaXJxLAotCQl2b2lkICpkYXRhKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBncGlvX3JlcXVlc3QoU0RIQzFfQ0QsICJzZGhjLWRldGVjdCIpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlncGlvX2RpcmVjdGlvbl9pbnB1dChTREhDMV9DRCk7Ci0KLQlyZXQgPSBncGlvX3JlcXVlc3QoU0RIQzFfV1AsICJzZGhjLXdwIik7Ci0JaWYgKHJldCkKLQkJZ290byBlcnJfZ3Bpb19mcmVlOwotCWdwaW9fZGlyZWN0aW9uX2lucHV0KFNESEMxX1dQKTsKLQotCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKFNESEMxX0NEKSwgZGV0ZWN0X2lycSwKLQkJSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfVFJJR0dFUl9GQUxMSU5HLAotCQkic2RoYzEtY2FyZC1kZXRlY3QiLCBkYXRhKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9ncGlvX2ZyZWVfMjsKLQotCXJldHVybiAwOwotCi1lcnJfZ3Bpb19mcmVlXzI6Ci0JZ3Bpb19mcmVlKFNESEMxX1dQKTsKLWVycl9ncGlvX2ZyZWU6Ci0JZ3Bpb19mcmVlKFNESEMxX0NEKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIG1vYm9hcmRfc2RoYzFfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JZnJlZV9pcnEoZ3Bpb190b19pcnEoU0RIQzFfQ0QpLCBkYXRhKTsKLQlncGlvX2ZyZWUoU0RIQzFfV1ApOwotCWdwaW9fZnJlZShTREhDMV9DRCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaW14bW1jX3BsYXRmb3JtX2RhdGEgc2RoYzFfcGRhdGEgPSB7Ci0JLmdldF9ybwk9IG1vYm9hcmRfc2RoYzFfZ2V0X3JvLAotCS5pbml0CT0gbW9ib2FyZF9zZGhjMV9pbml0LAotCS5leGl0CT0gbW9ib2FyZF9zZGhjMV9leGl0LAotfTsKLQotLyoKLSAqIHRoaXMgcGluIGlzIGRlZGljYXRlZCBmb3IgYWxsIG14MzFtb2JvYXJkIHN5c3RlbXMsIHNvIHdlIGRvIGl0IGhlcmUKLSAqLwotI2RlZmluZSBVU0JfUkVTRVRfQglJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8xXzApCi0KLXN0YXRpYyB2b2lkIHVzYl94Y3ZyX3Jlc2V0KHZvaWQpCi17Ci0JZ3Bpb19yZXF1ZXN0KFVTQl9SRVNFVF9CLCAidXNiLXJlc2V0Iik7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFVTQl9SRVNFVF9CLCAwKTsKLQltZGVsYXkoMSk7Ci0JZ3Bpb19zZXRfdmFsdWUoVVNCX1JFU0VUX0IsIDEpOwotfQotCi0jZGVmaW5lIFVTQl9QQURfQ0ZHIChQQURfQ1RMX0RSVl9NQVggfCBQQURfQ1RMX1NSRV9GQVNUIHwgUEFEX0NUTF9IWVNfQ01PUyB8IFwKLQkJCVBBRF9DVExfT0RFX0NNT1MgfCBQQURfQ1RMXzEwMEtfUFUpCi0KLSNkZWZpbmUgT1RHX0VOX0IgSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9VU0JfT0MpCi0KLXN0YXRpYyB2b2lkIG1vYm9hcmRfdXNib3RnX2luaXQodm9pZCkKLXsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTAsIFVTQl9QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTEsIFVTQl9QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTIsIFVTQl9QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTMsIFVTQl9QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTQsIFVTQl9QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTUsIFVTQl9QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTYsIFVTQl9QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTcsIFVTQl9QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfQ0xLLCBVU0JfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RJUiwgVVNCX1BBRF9DRkcpOwotCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQk9UR19OWFQsIFVTQl9QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfU1RQLCBVU0JfUEFEX0NGRyk7Ci0KLQlncGlvX3JlcXVlc3QoT1RHX0VOX0IsICJ1c2ItdWRjLWVuIik7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE9UR19FTl9CLCAwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIHVzYl9wZGF0YSA9IHsKLQkub3BlcmF0aW5nX21vZGUJPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCi0JLnBoeV9tb2RlCT0gRlNMX1VTQjJfUEhZX1VMUEksCi19OwotCi0jaWYgZGVmaW5lZChDT05GSUdfVVNCX1VMUEkpCi0KLSNkZWZpbmUgVVNCSDJfRU5fQiBJT01VWF9UT19HUElPKE1YMzFfUElOX1NDSzYpCi0KLXN0YXRpYyBpbnQgbW9ib2FyZF91c2JoMl9od19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JaW50IHJldCA9IGdwaW9fcmVxdWVzdChVU0JIMl9FTl9CLCAidXNiaDItZW4iKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JbXhjX2lvbXV4X3NldF9ncHIoTVVYX1BHUF9VSDIsIHRydWUpOwotCi0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCSDJfQ0xLLCBVU0JfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCSDJfRElSLCBVU0JfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCSDJfTlhULCBVU0JfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCSDJfU1RQLCBVU0JfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCSDJfREFUQTAsIFVTQl9QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JIMl9EQVRBMSwgVVNCX1BBRF9DRkcpOwotCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1NSWEQ2LCBVU0JfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fU1RYRDYsIFVTQl9QQURfQ0ZHKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9TRlMzLCBVU0JfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fU0NLMywgVVNCX1BBRF9DRkcpOwotCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1NSWEQzLCBVU0JfUEFEX0NGRyk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fU1RYRDMsIFVTQl9QQURfQ0ZHKTsKLQotCWdwaW9fZGlyZWN0aW9uX291dHB1dChVU0JIMl9FTl9CLCAwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1vYm9hcmRfdXNiaDJfaHdfZXhpdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCWdwaW9fZnJlZShVU0JIMl9FTl9CKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBteGNfdXNiaF9wbGF0Zm9ybV9kYXRhIHVzYmgyX3BkYXRhID0gewotCS5pbml0CT0gbW9ib2FyZF91c2JoMl9od19pbml0LAotCS5leGl0CT0gbW9ib2FyZF91c2JoMl9od19leGl0LAotCS5wb3J0c2MJPSBNWENfRUhDSV9NT0RFX1VMUEkgfCBNWENfRUhDSV9VVE1JXzhCSVQsCi0JLmZsYWdzCT0gTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVELAotfTsKLQotc3RhdGljIGludCBfX2luaXQgbW9ib2FyZF91c2JoMl9pbml0KHZvaWQpCi17Ci0JdXNiaDJfcGRhdGEub3RnID0gb3RnX3VscGlfY3JlYXRlKCZteGNfdWxwaV9hY2Nlc3Nfb3BzLAotCQkJVVNCX09UR19EUlZfVkJVUyB8IFVTQl9PVEdfRFJWX1ZCVVNfRVhUKTsKLQotCXJldHVybiBteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdXNiaDIsICZ1c2JoMl9wZGF0YSk7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSBpbnQgbW9ib2FyZF91c2JoMl9pbml0KHZvaWQpIHsgcmV0dXJuIDA7IH0KLSNlbmRpZgotCi0KLXN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgbXgzMW1vYm9hcmRfbGVkc1tdID0gewotCXsKLQkJLm5hbWUgCT0gImNvcmVib2FyZC1sZWQtMDpyZWQ6cnVubmluZyIsCi0JCS5kZWZhdWx0X3RyaWdnZXIgPSAiaGVhcnRiZWF0IiwKLQkJLmdwaW8gCT0gSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9TVkVOMCksCi0JfSwgewotCQkubmFtZQk9ICJjb3JlYm9hcmQtbGVkLTE6cmVkIiwKLQkJLmdwaW8JPSBJT01VWF9UT19HUElPKE1YMzFfUElOX1NUWDApLAotCX0sIHsKLQkJLm5hbWUJPSAiY29yZWJvYXJkLWxlZC0yOnJlZCIsCi0JCS5ncGlvCT0gSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9TUlgwKSwKLQl9LCB7Ci0JCS5uYW1lCT0gImNvcmVib2FyZC1sZWQtMzpyZWQiLAotCQkuZ3Bpbwk9IElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fU0lNUEQwKSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIG14MzFtb2JvYXJkX2xlZF9wZGF0YSA9IHsKLQkubnVtX2xlZHMgCT0gQVJSQVlfU0laRShteDMxbW9ib2FyZF9sZWRzKSwKLQkubGVkcwkJPSBteDMxbW9ib2FyZF9sZWRzLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXgzMW1vYm9hcmRfbGVkc19kZXZpY2UgPSB7Ci0JLm5hbWUJPSAibGVkcy1ncGlvIiwKLQkuaWQJPSAtMSwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZteDMxbW9ib2FyZF9sZWRfcGRhdGEsCi0JfSwKLX07Ci0KLSNkZWZpbmUgU0VMMCBJT01VWF9UT19HUElPKE1YMzFfUElOX0RUUl9EQ0UxKQotI2RlZmluZSBTRUwxIElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fRFNSX0RDRTEpCi0jZGVmaW5lIFNFTDIgSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9SSV9EQ0UxKQotI2RlZmluZSBTRUwzIElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fRENEX0RDRTEpCi0KLXN0YXRpYyB2b2lkIG14MzFtb2JvYXJkX2luaXRfc2VsX2dwaW9zKHZvaWQpCi17Ci0JaWYgKCFncGlvX3JlcXVlc3QoU0VMMCwgInNlbDAiKSkgewotCQlncGlvX2RpcmVjdGlvbl9pbnB1dChTRUwwKTsKLQkJZ3Bpb19leHBvcnQoU0VMMCwgdHJ1ZSk7Ci0JfQotCi0JaWYgKCFncGlvX3JlcXVlc3QoU0VMMSwgInNlbDEiKSkgewotCQlncGlvX2RpcmVjdGlvbl9pbnB1dChTRUwxKTsKLQkJZ3Bpb19leHBvcnQoU0VMMSwgdHJ1ZSk7Ci0JfQotCi0JaWYgKCFncGlvX3JlcXVlc3QoU0VMMiwgInNlbDIiKSkgewotCQlncGlvX2RpcmVjdGlvbl9pbnB1dChTRUwyKTsKLQkJZ3Bpb19leHBvcnQoU0VMMiwgdHJ1ZSk7Ci0JfQotCi0JaWYgKCFncGlvX3JlcXVlc3QoU0VMMywgInNlbDMiKSkgewotCQlncGlvX2RpcmVjdGlvbl9pbnB1dChTRUwzKTsKLQkJZ3Bpb19leHBvcnQoU0VMMywgdHJ1ZSk7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IGlwdV9wbGF0Zm9ybV9kYXRhIG14M19pcHVfZGF0YSA9IHsKLQkuaXJxX2Jhc2UgPSBNWENfSVBVX0lSUV9TVEFSVCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmbXgzMW1vYm9hcmRfZmxhc2gsCi0JJm14MzFtb2JvYXJkX2xlZHNfZGV2aWNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBteDNfY2FtZXJhX3BkYXRhIGNhbWVyYV9wZGF0YSA9IHsKLQkuZG1hX2Rldgk9ICZteDNfaXB1LmRldiwKLQkuZmxhZ3MJCT0gTVgzX0NBTUVSQV9EQVRBV0lEVEhfOCB8IE1YM19DQU1FUkFfREFUQVdJRFRIXzEwLAotCS5tY2xrXzEwa2h6CT0gNDgwMCwKLX07Ci0KLSNkZWZpbmUgQ0FNRVJBX0JVRl9TSVpFCSg0KjEwMjQqMTAyNCkKLQotc3RhdGljIGludCBfX2luaXQgbXgzMW1vYm9hcmRfY2FtX2FsbG9jX2RtYShjb25zdCBzaXplX3QgYnVmX3NpemUpCi17Ci0JZG1hX2FkZHJfdCBkbWFfaGFuZGxlOwotCXZvaWQgKmJ1ZjsKLQlpbnQgZG1hOwotCi0JaWYgKGJ1Zl9zaXplIDwgMiAqIDEwMjQgKiAxMDI0KQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWJ1ZiA9IGRtYV9hbGxvY19jb2hlcmVudChOVUxMLCBidWZfc2l6ZSwgJmRtYV9oYW5kbGUsIEdGUF9LRVJORUwpOwotCWlmICghYnVmKSB7Ci0JCXByX2VycigiJXM6IGNhbm5vdCBhbGxvY2F0ZSBjYW1lcmEgYnVmZmVyLW1lbW9yeVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltZW1zZXQoYnVmLCAwLCBidWZfc2l6ZSk7Ci0KLQlkbWEgPSBkbWFfZGVjbGFyZV9jb2hlcmVudF9tZW1vcnkoJm14M19jYW1lcmEuZGV2LAotCQkJCQlkbWFfaGFuZGxlLCBkbWFfaGFuZGxlLCBidWZfc2l6ZSwKLQkJCQkJRE1BX01FTU9SWV9NQVAgfCBETUFfTUVNT1JZX0VYQ0xVU0lWRSk7Ci0KLQkvKiBUaGUgd2F5IHdlIGNhbGwgZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5IG9ubHkgYSBtYWxsb2MgY2FuIGZhaWwgKi8KLQlyZXR1cm4gZG1hICYgRE1BX01FTU9SWV9NQVAgPyAwIDogLUVOT01FTTsKLX0KLQotc3RhdGljIGludCBteDMxbW9ib2FyZF9iYXNlYm9hcmQ7Ci1jb3JlX3BhcmFtKG14MzFtb2JvYXJkX2Jhc2Vib2FyZCwgbXgzMW1vYm9hcmRfYmFzZWJvYXJkLCBpbnQsIDA0NDQpOwotCi0vKgotICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBteGNfYm9hcmRfaW5pdCh2b2lkKQotewotCW14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKG1vYm9hcmRfcGlucywgQVJSQVlfU0laRShtb2JvYXJkX3BpbnMpLAotCQkibW9ib2FyZCIpOwotCi0JcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydDBfcGRhdGEpOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlNCwgJnVhcnQ0X3BkYXRhKTsKLQotCW14MzFtb2JvYXJkX2luaXRfc2VsX2dwaW9zKCk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfaTJjX2RldmljZTAsICZtb2JvYXJkX2kyYzBfcGRhdGEpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMSwgJm1vYm9hcmRfaTJjMV9wZGF0YSk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc3BpX2RldmljZTEsICZtb2JvYXJkX3NwaTFfbWFzdGVyKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfc3BpX2RldmljZTIsICZtb2JvYXJkX3NwaTJfbWFzdGVyKTsKLQotCWdwaW9fcmVxdWVzdChJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8xXzMpLCAicG1pYy1pcnEiKTsKLQlncGlvX2RpcmVjdGlvbl9pbnB1dChJT01VWF9UT19HUElPKE1YMzFfUElOX0dQSU8xXzMpKTsKLQlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhtb2JvYXJkX3NwaV9ib2FyZF9pbmZvLAotCQlBUlJBWV9TSVpFKG1vYm9hcmRfc3BpX2JvYXJkX2luZm8pKTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y3NkaGNfZGV2aWNlMCwgJnNkaGMxX3BkYXRhKTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14M19pcHUsICZteDNfaXB1X2RhdGEpOwotCWlmICghbXgzMW1vYm9hcmRfY2FtX2FsbG9jX2RtYShDQU1FUkFfQlVGX1NJWkUpKQotCQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDNfY2FtZXJhLCAmY2FtZXJhX3BkYXRhKTsKLQotCXVzYl94Y3ZyX3Jlc2V0KCk7Ci0KLQltb2JvYXJkX3VzYm90Z19pbml0KCk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX290Z191ZGNfZGV2aWNlLCAmdXNiX3BkYXRhKTsKLQltb2JvYXJkX3VzYmgyX2luaXQoKTsKLQotCXN3aXRjaCAobXgzMW1vYm9hcmRfYmFzZWJvYXJkKSB7Ci0JY2FzZSBNWDMxTk9CT0FSRDoKLQkJYnJlYWs7Ci0JY2FzZSBNWDMxREVWQk9BUkQ6Ci0JCW14MzFtb2JvYXJkX2RldmJvYXJkX2luaXQoKTsKLQkJYnJlYWs7Ci0JY2FzZSBNWDMxTUFSWEJPVDoKLQkJbXgzMW1vYm9hcmRfbWFyeGJvdF9pbml0KCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiSWxsZWdhbCBteDMxbW9ib2FyZF9iYXNlYm9hcmQgdHlwZSAlZFxuIiwKLQkJCW14MzFtb2JvYXJkX2Jhc2Vib2FyZCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgbXgzMW1vYm9hcmRfdGltZXJfaW5pdCh2b2lkKQotewotCW14MzFfY2xvY2tzX2luaXQoMjYwMDAwMDApOwotfQotCi1zdHJ1Y3Qgc3lzX3RpbWVyIG14MzFtb2JvYXJkX3RpbWVyID0gewotCS5pbml0CT0gbXgzMW1vYm9hcmRfdGltZXJfaW5pdCwKLX07Ci0KLU1BQ0hJTkVfU1RBUlQoTVgzMU1PQk9BUkQsICJFUEZMIE1vYm90cyBteDMxbW9ib2FyZCIpCi0JLyogTWFpbnRhaW5lcjogVmFsZW50aW4gTG9uZ2NoYW1wLCBFUEZMIE1vYm90cyBncm91cCAqLwotCS5waHlzX2lvCT0gQUlQUzFfQkFTRV9BRERSLAotCS5pb19wZ19vZmZzdAk9ICgoQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IG14MzFfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14MzFfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZSAgID0gbXhjX2JvYXJkX2luaXQsCi0JLnRpbWVyICAgICAgICAgID0gJm14MzFtb2JvYXJkX3RpbWVyLAotTUFDSElORV9FTkQKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzMXBkay5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzMXBkay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxODcxNWYxLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzFwZGsuYworKysgL2Rldi9udWxsCkBAIC0xLDI2NiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL21lbW9yeS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9ib2FyZC1teDMxcGRrLmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzLmg+Ci0jaW5jbHVkZSAiZGV2aWNlcy5oIgotCi0vKiEKLSAqIEBmaWxlIG14MzFwZGsuYwotICoKLSAqIEBicmllZiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGJvYXJkLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgotICoKLSAqIEBpbmdyb3VwIFN5c3RlbQotICovCi0KLXN0YXRpYyBpbnQgbXgzMXBka19waW5zW10gPSB7Ci0JLyogVUFSVDEgKi8KLQlNWDMxX1BJTl9DVFMxX19DVFMxLAotCU1YMzFfUElOX1JUUzFfX1JUUzEsCi0JTVgzMV9QSU5fVFhEMV9fVFhEMSwKLQlNWDMxX1BJTl9SWEQxX19SWEQxLAotCUlPTVVYX01PREUoTVgzMV9QSU5fR1BJTzFfMSwgSU9NVVhfQ09ORklHX0dQSU8pLAotfTsKLQotc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKLQkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAotfTsKLQotLyoKLSAqIFN1cHBvcnQgZm9yIHRoZSBTTVNDOTIxNyBvbiB0aGUgRGVidWcgYm9hcmQuCi0gKi8KLQotc3RhdGljIHN0cnVjdCBzbXNjOTExeF9wbGF0Zm9ybV9jb25maWcgc21zYzkxMXhfY29uZmlnID0gewotCS5pcnFfcG9sYXJpdHkJPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0xPVywKLQkuaXJxX3R5cGUJPSBTTVNDOTExWF9JUlFfVFlQRV9QVVNIX1BVTEwsCi0JLmZsYWdzCQk9IFNNU0M5MTFYX1VTRV8xNkJJVCB8IFNNU0M5MTFYX0ZPUkNFX0lOVEVSTkFMX1BIWSwKLQkucGh5X2ludGVyZmFjZQk9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUksCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNtc2M5MTF4X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CQk9IExBTjkyMTdfQkFTRV9BRERSLAotCQkuZW5kCQk9IExBTjkyMTdfQkFTRV9BRERSICsgMHhmZiwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0CQk9IEVYUElPX0lOVF9FTkVULAotCQkuZW5kCQk9IEVYUElPX0lOVF9FTkVULAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtc2M5MTF4X2RldmljZSA9IHsKLQkubmFtZQkJPSAic21zYzkxMXgiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21zYzkxMXhfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBzbXNjOTExeF9yZXNvdXJjZXMsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnNtc2M5MTF4X2NvbmZpZywKLQl9LAotfTsKLQotLyoKLSAqIFJvdXRpbmVzIGZvciB0aGUgQ1BMRCBvbiB0aGUgZGVidWcgYm9hcmQuIEl0IGNvbnRhaW5zIGEgQ1BMRCBoYW5kbGluZwotICogTEVEcywgc3dpdGNoZXMsIGludGVycnVwdHMgZm9yIEV0aGVybmV0LgotICovCi0KLXN0YXRpYyB2b2lkIG14MzFwZGtfZXhwaW9faXJxX2hhbmRsZXIodWludDMyX3QgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCi17Ci0JdWludDMyX3QgaW1yX3ZhbDsKLQl1aW50MzJfdCBpbnRfdmFsaWQ7Ci0JdWludDMyX3QgZXhwaW9faXJxOwotCi0JaW1yX3ZhbCA9IF9fcmF3X3JlYWR3KENQTERfSU5UX01BU0tfUkVHKTsKLQlpbnRfdmFsaWQgPSBfX3Jhd19yZWFkdyhDUExEX0lOVF9TVEFUVVNfUkVHKSAmIH5pbXJfdmFsOwotCi0JZXhwaW9faXJxID0gTVhDX0VYUF9JT19CQVNFOwotCWZvciAoOyBpbnRfdmFsaWQgIT0gMDsgaW50X3ZhbGlkID4+PSAxLCBleHBpb19pcnErKykgewotCQlpZiAoKGludF92YWxpZCAmIDEpID09IDApCi0JCQljb250aW51ZTsKLQkJZ2VuZXJpY19oYW5kbGVfaXJxKGV4cGlvX2lycSk7Ci0JfQotfQotCi0vKgotICogRGlzYWJsZSBhbiBleHBpbyBwaW4ncyBpbnRlcnJ1cHQgYnkgc2V0dGluZyB0aGUgYml0IGluIHRoZSBpbXIuCi0gKiBAcGFyYW0gaXJxICAgICAgICAgICBhbiBleHBpbyB2aXJ0dWFsIGlycSBudW1iZXIKLSAqLwotc3RhdGljIHZvaWQgZXhwaW9fbWFza19pcnEodWludDMyX3QgaXJxKQotewotCXVpbnQxNl90IHJlZzsKLQl1aW50MzJfdCBleHBpbyA9IE1YQ19JUlFfVE9fRVhQSU8oaXJxKTsKLQotCS8qIG1hc2sgdGhlIGludGVycnVwdCAqLwotCXJlZyA9IF9fcmF3X3JlYWR3KENQTERfSU5UX01BU0tfUkVHKTsKLQlyZWcgfD0gMSA8PCBleHBpbzsKLQlfX3Jhd193cml0ZXcocmVnLCBDUExEX0lOVF9NQVNLX1JFRyk7Ci19Ci0KLS8qCi0gKiBBY2tub3dsZWRnZSBhbiBleHBhbmRlZCBpbyBwaW4ncyBpbnRlcnJ1cHQgYnkgY2xlYXJpbmcgdGhlIGJpdCBpbiB0aGUgaXNyLgotICogQHBhcmFtIGlycSAgICAgICAgICAgYW4gZXhwYW5kZWQgaW8gdmlydHVhbCBpcnEgbnVtYmVyCi0gKi8KLXN0YXRpYyB2b2lkIGV4cGlvX2Fja19pcnEodWludDMyX3QgaXJxKQotewotCXVpbnQzMl90IGV4cGlvID0gTVhDX0lSUV9UT19FWFBJTyhpcnEpOwotCi0JLyogY2xlYXIgdGhlIGludGVycnVwdCBzdGF0dXMgKi8KLQlfX3Jhd193cml0ZXcoMSA8PCBleHBpbywgQ1BMRF9JTlRfUkVTRVRfUkVHKTsKLQlfX3Jhd193cml0ZXcoMCwgQ1BMRF9JTlRfUkVTRVRfUkVHKTsKLQkvKiBtYXNrIHRoZSBpbnRlcnJ1cHQgKi8KLQlleHBpb19tYXNrX2lycShpcnEpOwotfQotCi0vKgotICogRW5hYmxlIGEgZXhwaW8gcGluJ3MgaW50ZXJydXB0IGJ5IGNsZWFyaW5nIHRoZSBiaXQgaW4gdGhlIGltci4KLSAqIEBwYXJhbSBpcnEgICAgICAgICAgIGEgZXhwaW8gdmlydHVhbCBpcnEgbnVtYmVyCi0gKi8KLXN0YXRpYyB2b2lkIGV4cGlvX3VubWFza19pcnEodWludDMyX3QgaXJxKQotewotCXVpbnQxNl90IHJlZzsKLQl1aW50MzJfdCBleHBpbyA9IE1YQ19JUlFfVE9fRVhQSU8oaXJxKTsKLQotCS8qIHVubWFzayB0aGUgaW50ZXJydXB0ICovCi0JcmVnID0gX19yYXdfcmVhZHcoQ1BMRF9JTlRfTUFTS19SRUcpOwotCXJlZyAmPSB+KDEgPDwgZXhwaW8pOwotCV9fcmF3X3dyaXRldyhyZWcsIENQTERfSU5UX01BU0tfUkVHKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBleHBpb19pcnFfY2hpcCA9IHsKLQkuYWNrID0gZXhwaW9fYWNrX2lycSwKLQkubWFzayA9IGV4cGlvX21hc2tfaXJxLAotCS51bm1hc2sgPSBleHBpb191bm1hc2tfaXJxLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgbXgzMXBka19pbml0X2V4cGlvKHZvaWQpCi17Ci0JaW50IGk7Ci0JaW50IHJldDsKLQotCS8qIENoZWNrIGlmIHRoZXJlJ3MgYSBkZWJ1ZyBib2FyZCBjb25uZWN0ZWQgKi8KLQlpZiAoKF9fcmF3X3JlYWR3KENQTERfTUFHSUNfTlVNQkVSMV9SRUcpICE9IDB4QUFBQSkgfHwKLQkgICAgKF9fcmF3X3JlYWR3KENQTERfTUFHSUNfTlVNQkVSMl9SRUcpICE9IDB4NTU1NSkgfHwKLQkgICAgKF9fcmF3X3JlYWR3KENQTERfTUFHSUNfTlVNQkVSM19SRUcpICE9IDB4Q0FGRSkpIHsKLQkJLyogTm8gRGVidWcgYm9hcmQgZm91bmQgKi8KLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcHJfaW5mbygiaS5NWDMxUERLIERlYnVnIGJvYXJkIGRldGVjdGVkLCByZXYgPSAweCUwNFhcbiIsCi0JCV9fcmF3X3JlYWR3KENQTERfQ09ERV9WRVJfUkVHKSk7Ci0KLQkvKgotCSAqIENvbmZpZ3VyZSBJTlQgbGluZSBhcyBHUElPIGlucHV0Ci0JICovCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fR1BJTzFfMSksICJzbXM5MjE3LWlycSIpOwotCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImNvdWxkIG5vdCBnZXQgTEFOIGlycSBncGlvXG4iKTsKLQllbHNlCi0JCWdwaW9fZGlyZWN0aW9uX2lucHV0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fR1BJTzFfMSkpOwotCi0JLyogRGlzYWJsZSB0aGUgaW50ZXJydXB0cyBhbmQgY2xlYXIgdGhlIHN0YXR1cyAqLwotCV9fcmF3X3dyaXRldygwLCBDUExEX0lOVF9NQVNLX1JFRyk7Ci0JX19yYXdfd3JpdGV3KDB4RkZGRiwgQ1BMRF9JTlRfUkVTRVRfUkVHKTsKLQlfX3Jhd193cml0ZXcoMCwgQ1BMRF9JTlRfUkVTRVRfUkVHKTsKLQlfX3Jhd193cml0ZXcoMHgxRiwgQ1BMRF9JTlRfTUFTS19SRUcpOwotCWZvciAoaSA9IE1YQ19FWFBfSU9fQkFTRTsKLQkgICAgIGkgPCAoTVhDX0VYUF9JT19CQVNFICsgTVhDX01BWF9FWFBfSU9fTElORVMpOwotCSAgICAgaSsrKSB7Ci0JCXNldF9pcnFfY2hpcChpLCAmZXhwaW9faXJxX2NoaXApOwotCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2xldmVsX2lycSk7Ci0JCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7Ci0JfQotCXNldF9pcnFfdHlwZShFWFBJT19QQVJFTlRfSU5ULCBJUlFfVFlQRV9MRVZFTF9MT1cpOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKEVYUElPX1BBUkVOVF9JTlQsIG14MzFwZGtfZXhwaW9faXJxX2hhbmRsZXIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBUaGlzIHN0cnVjdHVyZSBkZWZpbmVzIHRoZSBNWDMxIG1lbW9yeSBtYXAuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbXgzMXBka19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKLQl7Ci0JCS52aXJ0dWFsID0gQ1M1X0JBU0VfQUREUl9WSVJULAotCQkucGZuID0gX19waHlzX3RvX3BmbihDUzVfQkFTRV9BRERSKSwKLQkJLmxlbmd0aCA9IENTNV9TSVpFLAotCQkudHlwZSA9IE1UX0RFVklDRSwKLQl9LAotfTsKLQotLyoKLSAqIFNldCB1cCBzdGF0aWMgdmlydHVhbCBtYXBwaW5ncy4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IG14MzFwZGtfbWFwX2lvKHZvaWQpCi17Ci0JbXgzMV9tYXBfaW8oKTsKLQlpb3RhYmxlX2luaXQobXgzMXBka19pb19kZXNjLCBBUlJBWV9TSVpFKG14MzFwZGtfaW9fZGVzYykpOwotfQotCi0vKiEKLSAqIEJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgbXhjX2JvYXJkX2luaXQodm9pZCkKLXsKLQlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhteDMxcGRrX3BpbnMsIEFSUkFZX1NJWkUobXgzMXBka19waW5zKSwKLQkJCQkgICAgICAibXgzMXBkayIpOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOwotCi0JaWYgKCFteDMxcGRrX2luaXRfZXhwaW8oKSkKLQkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzbXNjOTExeF9kZXZpY2UpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgbXgzMXBka190aW1lcl9pbml0KHZvaWQpCi17Ci0JbXgzMV9jbG9ja3NfaW5pdCgyNjAwMDAwMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIG14MzFwZGtfdGltZXIgPSB7Ci0JLmluaXQJPSBteDMxcGRrX3RpbWVyX2luaXQsCi19OwotCi0vKgotICogVGhlIGZvbGxvd2luZyB1c2VzIHN0YW5kYXJkIGtlcm5lbCBtYWNyb3MgZGVmaW5lZCBpbiBhcmNoLmggaW4gb3JkZXIgdG8KLSAqIGluaXRpYWxpemUgX19tYWNoX2Rlc2NfTVgzMVBESyBkYXRhIHN0cnVjdHVyZS4KLSAqLwotTUFDSElORV9TVEFSVChNWDMxXzNEUywgIkZyZWVzY2FsZSBNWDMxUERLICgzRFMpIikKLQkvKiBNYWludGFpbmVyOiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiAqLwotCS5waHlzX2lvCT0gQUlQUzFfQkFTRV9BRERSLAotCS5pb19wZ19vZmZzdAk9ICgoQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IG14MzFwZGtfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14MzFfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZSAgID0gbXhjX2JvYXJkX2luaXQsCi0JLnRpbWVyICAgICAgICAgID0gJm14MzFwZGtfdGltZXIsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvbXgzNXBkay5jIGIvYXJjaC9hcm0vbWFjaC1teDMvbXgzNXBkay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwYmJjNjVlLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtbXgzL214MzVwZGsuYworKysgL2Rldi9udWxsCkBAIC0xLDExNiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBBdXRob3I6IEZhYmlvIEVzdGV2YW0gPGZhYmlvLmVzdGV2YW1AZnJlZXNjYWxlLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9mc2xfZGV2aWNlcy5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgotI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgzNS5oPgotCi0jaW5jbHVkZSAiZGV2aWNlcy5oIgotCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0gewotCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJm14Y19mZWNfZGV2aWNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBwYWRfZGVzYyBteDM1cGRrX3BhZHNbXSA9IHsKLQkvKiBVQVJUMSAqLwotCU1YMzVfUEFEX0NUUzFfX1VBUlQxX0NUUywKLQlNWDM1X1BBRF9SVFMxX19VQVJUMV9SVFMsCi0JTVgzNV9QQURfVFhEMV9fVUFSVDFfVFhEX01VWCwKLQlNWDM1X1BBRF9SWEQxX19VQVJUMV9SWERfTVVYLAotCS8qIEZFQyAqLwotCU1YMzVfUEFEX0ZFQ19UWF9DTEtfX0ZFQ19UWF9DTEssCi0JTVgzNV9QQURfRkVDX1JYX0NMS19fRkVDX1JYX0NMSywKLQlNWDM1X1BBRF9GRUNfUlhfRFZfX0ZFQ19SWF9EViwKLQlNWDM1X1BBRF9GRUNfQ09MX19GRUNfQ09MLAotCU1YMzVfUEFEX0ZFQ19SREFUQTBfX0ZFQ19SREFUQV8wLAotCU1YMzVfUEFEX0ZFQ19UREFUQTBfX0ZFQ19UREFUQV8wLAotCU1YMzVfUEFEX0ZFQ19UWF9FTl9fRkVDX1RYX0VOLAotCU1YMzVfUEFEX0ZFQ19NRENfX0ZFQ19NREMsCi0JTVgzNV9QQURfRkVDX01ESU9fX0ZFQ19NRElPLAotCU1YMzVfUEFEX0ZFQ19UWF9FUlJfX0ZFQ19UWF9FUlIsCi0JTVgzNV9QQURfRkVDX1JYX0VSUl9fRkVDX1JYX0VSUiwKLQlNWDM1X1BBRF9GRUNfQ1JTX19GRUNfQ1JTLAotCU1YMzVfUEFEX0ZFQ19SREFUQTFfX0ZFQ19SREFUQV8xLAotCU1YMzVfUEFEX0ZFQ19UREFUQTFfX0ZFQ19UREFUQV8xLAotCU1YMzVfUEFEX0ZFQ19SREFUQTJfX0ZFQ19SREFUQV8yLAotCU1YMzVfUEFEX0ZFQ19UREFUQTJfX0ZFQ19UREFUQV8yLAotCU1YMzVfUEFEX0ZFQ19SREFUQTNfX0ZFQ19SREFUQV8zLAotCU1YMzVfUEFEX0ZFQ19UREFUQTNfX0ZFQ19UREFUQV8zLAotCS8qIFVTQk9URyAqLwotCU1YMzVfUEFEX1VTQk9UR19QV1JfX1VTQl9UT1BfVVNCT1RHX1BXUiwKLQlNWDM1X1BBRF9VU0JPVEdfT0NfX1VTQl9UT1BfVVNCT1RHX09DLAotfTsKLQotLyogT1RHIGNvbmZpZyAqLwotc3RhdGljIHN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhIHVzYl9wZGF0YSA9IHsKLQkub3BlcmF0aW5nX21vZGUJPSBGU0xfVVNCMl9EUl9ERVZJQ0UsCi0JLnBoeV9tb2RlCT0gRlNMX1VTQjJfUEhZX1VUTUlfV0lERSwKLX07Ci0KLS8qCi0gKiBCb2FyZCBzcGVjaWZpYyBpbml0aWFsaXphdGlvbi4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IG14Y19ib2FyZF9pbml0KHZvaWQpCi17Ci0JbXhjX2lvbXV4X3YzX3NldHVwX211bHRpcGxlX3BhZHMobXgzNXBka19wYWRzLCBBUlJBWV9TSVpFKG14MzVwZGtfcGFkcykpOwotCi0JcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UwLCAmdWFydF9wZGF0YSk7Ci0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfb3RnX3VkY19kZXZpY2UsICZ1c2JfcGRhdGEpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgbXgzNXBka190aW1lcl9pbml0KHZvaWQpCi17Ci0JbXgzNV9jbG9ja3NfaW5pdCgpOwotfQotCi1zdHJ1Y3Qgc3lzX3RpbWVyIG14MzVwZGtfdGltZXIgPSB7Ci0JLmluaXQJPSBteDM1cGRrX3RpbWVyX2luaXQsCi19OwotCi1NQUNISU5FX1NUQVJUKE1YMzVfM0RTLCAiRnJlZXNjYWxlIE1YMzVQREsiKQotCS8qIE1haW50YWluZXI6IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMgKi8KLQkucGh5c19pbwk9IEFJUFMxX0JBU0VfQUREUiwKLQkuaW9fcGdfb2Zmc3QJPSAoKEFJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zICAgID0gUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBteDM1X21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDM1X2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAotCS50aW1lciAgICAgICAgICA9ICZteDM1cGRrX3RpbWVyLAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL3BjbTAzNy5jIGIvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDM3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViZTM5NjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDM3LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NDYgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDggU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wbGF0LXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXNjOTExeC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy9hdDI0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9jYW4vcGxhdGZvcm0vc2phMTAwMC5oPgotCi0jaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPG1hY2gvYm9hcmQtcGNtMDM3Lmg+Ci0jaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9pMmMuaD4KLSNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC1teDMuaD4KLSNpbmNsdWRlIDxtYWNoL2lwdS5oPgotI2luY2x1ZGUgPG1hY2gvbW1jLmg+Ci0jaW5jbHVkZSA8bWFjaC9teDNfY2FtZXJhLmg+Ci0jaW5jbHVkZSA8bWFjaC9teDNmYi5oPgotI2luY2x1ZGUgPG1hY2gvbXhjX25hbmQuaD4KLQotI2luY2x1ZGUgImRldmljZXMuaCIKLSNpbmNsdWRlICJwY20wMzcuaCIKLQotc3RhdGljIGVudW0gcGNtMDM3X2JvYXJkX3ZhcmlhbnQgcGNtMDM3X2luc3RhbmNlID0gUENNMDM3X1BDTTk3MDsKLQotc3RhdGljIGludCBfX2luaXQgcGNtMDM3X3ZhcmlhbnRfc2V0dXAoY2hhciAqc3RyKQotewotCWlmICghc3RyY21wKCJlZXQiLCBzdHIpKQotCQlwY20wMzdfaW5zdGFuY2UgPSBQQ00wMzdfRUVUOwotCWVsc2UgaWYgKHN0cmNtcCgicGNtOTcwIiwgc3RyKSkKLQkJcHJfd2FybmluZygiVW5rbm93biBwY20wMzcgYmFzZWJvYXJkIHZhcmlhbnQgJXNcbiIsIHN0cik7Ci0KLQlyZXR1cm4gMTsKLX0KLQotLyogU3VwcG9ydGVkIHZhbHVlczogInBjbTk3MCIgKGRlZmF1bHQpIGFuZCAiZWV0IiAqLwotX19zZXR1cCgicGNtMDM3X3ZhcmlhbnQ9IiwgcGNtMDM3X3ZhcmlhbnRfc2V0dXApOwotCi1lbnVtIHBjbTAzN19ib2FyZF92YXJpYW50IHBjbTAzN192YXJpYW50KHZvaWQpCi17Ci0JcmV0dXJuIHBjbTAzN19pbnN0YW5jZTsKLX0KLQotLyogVUFSVDEgd2l0aCBSVFMvQ1RTIGhhbmRzaGFrZSBzaWduYWxzICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHBjbTAzN191YXJ0MV9oYW5kc2hha2VfcGluc1tdID0gewotCU1YMzFfUElOX0NUUzFfX0NUUzEsCi0JTVgzMV9QSU5fUlRTMV9fUlRTMSwKLQlNWDMxX1BJTl9UWEQxX19UWEQxLAotCU1YMzFfUElOX1JYRDFfX1JYRDEsCi19OwotCi0vKiBVQVJUMSB3aXRob3V0IFJUUy9DVFMgaGFuZHNoYWtlIHNpZ25hbHMgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGNtMDM3X3VhcnQxX3BpbnNbXSA9IHsKLQlNWDMxX1BJTl9UWEQxX19UWEQxLAotCU1YMzFfUElOX1JYRDFfX1JYRDEsCi19OwotCi1zdGF0aWMgdW5zaWduZWQgaW50IHBjbTAzN19waW5zW10gPSB7Ci0JLyogSTJDICovCi0JTVgzMV9QSU5fQ1NQSTJfTU9TSV9fU0NMLAotCU1YMzFfUElOX0NTUEkyX01JU09fX1NEQSwKLQlNWDMxX1BJTl9DU1BJMl9TUzJfX0kyQzNfU0RBLAotCU1YMzFfUElOX0NTUEkyX1NDTEtfX0kyQzNfU0NMLAotCS8qIFNESEMxICovCi0JTVgzMV9QSU5fU0QxX0RBVEEzX19TRDFfREFUQTMsCi0JTVgzMV9QSU5fU0QxX0RBVEEyX19TRDFfREFUQTIsCi0JTVgzMV9QSU5fU0QxX0RBVEExX19TRDFfREFUQTEsCi0JTVgzMV9QSU5fU0QxX0RBVEEwX19TRDFfREFUQTAsCi0JTVgzMV9QSU5fU0QxX0NMS19fU0QxX0NMSywKLQlNWDMxX1BJTl9TRDFfQ01EX19TRDFfQ01ELAotCUlPTVVYX01PREUoTVgzMV9QSU5fU0NLNiwgSU9NVVhfQ09ORklHX0dQSU8pLCAvKiBjYXJkIGRldGVjdCAqLwotCUlPTVVYX01PREUoTVgzMV9QSU5fU0ZTNiwgSU9NVVhfQ09ORklHX0dQSU8pLCAvKiB3cml0ZSBwcm90ZWN0ICovCi0JLyogU1BJMSAqLwotCU1YMzFfUElOX0NTUEkxX01PU0lfX01PU0ksCi0JTVgzMV9QSU5fQ1NQSTFfTUlTT19fTUlTTywKLQlNWDMxX1BJTl9DU1BJMV9TQ0xLX19TQ0xLLAotCU1YMzFfUElOX0NTUEkxX1NQSV9SRFlfX1NQSV9SRFksCi0JTVgzMV9QSU5fQ1NQSTFfU1MwX19TUzAsCi0JTVgzMV9QSU5fQ1NQSTFfU1MxX19TUzEsCi0JTVgzMV9QSU5fQ1NQSTFfU1MyX19TUzIsCi0JLyogVUFSVDIgKi8KLQlNWDMxX1BJTl9UWEQyX19UWEQyLAotCU1YMzFfUElOX1JYRDJfX1JYRDIsCi0JTVgzMV9QSU5fQ1RTMl9fQ1RTMiwKLQlNWDMxX1BJTl9SVFMyX19SVFMyLAotCS8qIFVBUlQzICovCi0JTVgzMV9QSU5fQ1NQSTNfTU9TSV9fUlhEMywKLQlNWDMxX1BJTl9DU1BJM19NSVNPX19UWEQzLAotCU1YMzFfUElOX0NTUEkzX1NDTEtfX1JUUzMsCi0JTVgzMV9QSU5fQ1NQSTNfU1BJX1JEWV9fQ1RTMywKLQkvKiBMQU45MjE3IGlycSBwaW4gKi8KLQlJT01VWF9NT0RFKE1YMzFfUElOX0dQSU8zXzEsIElPTVVYX0NPTkZJR19HUElPKSwKLQkvKiBPbmV3aXJlICovCi0JTVgzMV9QSU5fQkFUVF9MSU5FX19PV0lSRSwKLQkvKiBGcmFtZWJ1ZmZlciAqLwotCU1YMzFfUElOX0xEMF9fTEQwLAotCU1YMzFfUElOX0xEMV9fTEQxLAotCU1YMzFfUElOX0xEMl9fTEQyLAotCU1YMzFfUElOX0xEM19fTEQzLAotCU1YMzFfUElOX0xENF9fTEQ0LAotCU1YMzFfUElOX0xENV9fTEQ1LAotCU1YMzFfUElOX0xENl9fTEQ2LAotCU1YMzFfUElOX0xEN19fTEQ3LAotCU1YMzFfUElOX0xEOF9fTEQ4LAotCU1YMzFfUElOX0xEOV9fTEQ5LAotCU1YMzFfUElOX0xEMTBfX0xEMTAsCi0JTVgzMV9QSU5fTEQxMV9fTEQxMSwKLQlNWDMxX1BJTl9MRDEyX19MRDEyLAotCU1YMzFfUElOX0xEMTNfX0xEMTMsCi0JTVgzMV9QSU5fTEQxNF9fTEQxNCwKLQlNWDMxX1BJTl9MRDE1X19MRDE1LAotCU1YMzFfUElOX0xEMTZfX0xEMTYsCi0JTVgzMV9QSU5fTEQxN19fTEQxNywKLQlNWDMxX1BJTl9WU1lOQzNfX1ZTWU5DMywKLQlNWDMxX1BJTl9IU1lOQ19fSFNZTkMsCi0JTVgzMV9QSU5fRlBTSElGVF9fRlBTSElGVCwKLQlNWDMxX1BJTl9EUkRZMF9fRFJEWTAsCi0JTVgzMV9QSU5fRDNfUkVWX19EM19SRVYsCi0JTVgzMV9QSU5fQ09OVFJBU1RfX0NPTlRSQVNULAotCU1YMzFfUElOX0QzX1NQTF9fRDNfU1BMLAotCU1YMzFfUElOX0QzX0NMU19fRDNfQ0xTLAotCU1YMzFfUElOX0xDUzBfX0dQSTAzXzIzLAotCS8qIENTSSAqLwotCUlPTVVYX01PREUoTVgzMV9QSU5fQ1NJX0Q1LCBJT01VWF9DT05GSUdfR1BJTyksCi0JTVgzMV9QSU5fQ1NJX0Q2X19DU0lfRDYsCi0JTVgzMV9QSU5fQ1NJX0Q3X19DU0lfRDcsCi0JTVgzMV9QSU5fQ1NJX0Q4X19DU0lfRDgsCi0JTVgzMV9QSU5fQ1NJX0Q5X19DU0lfRDksCi0JTVgzMV9QSU5fQ1NJX0QxMF9fQ1NJX0QxMCwKLQlNWDMxX1BJTl9DU0lfRDExX19DU0lfRDExLAotCU1YMzFfUElOX0NTSV9EMTJfX0NTSV9EMTIsCi0JTVgzMV9QSU5fQ1NJX0QxM19fQ1NJX0QxMywKLQlNWDMxX1BJTl9DU0lfRDE0X19DU0lfRDE0LAotCU1YMzFfUElOX0NTSV9EMTVfX0NTSV9EMTUsCi0JTVgzMV9QSU5fQ1NJX0hTWU5DX19DU0lfSFNZTkMsCi0JTVgzMV9QSU5fQ1NJX01DTEtfX0NTSV9NQ0xLLAotCU1YMzFfUElOX0NTSV9QSVhDTEtfX0NTSV9QSVhDTEssCi0JTVgzMV9QSU5fQ1NJX1ZTWU5DX19DU0lfVlNZTkMsCi0JLyogR1BJTyAqLwotCUlPTVVYX01PREUoTVgzMV9QSU5fQVRBX0RNQUNLLCBJT01VWF9DT05GSUdfR1BJTyksCi19OwotCi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBwY20wMzdfZmxhc2hfZGF0YSA9IHsKLQkud2lkdGggID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNtMDM3X2ZsYXNoX3Jlc291cmNlID0gewotCS5zdGFydAk9IDB4YTAwMDAwMDAsCi0JLmVuZAk9IDB4YTFmZmZmZmYsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgaW50IHVzYm90Z19waW5zW10gPSB7Ci0JTVgzMV9QSU5fVVNCT1RHX0RBVEEwX19VU0JPVEdfREFUQTAsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEExX19VU0JPVEdfREFUQTEsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEEyX19VU0JPVEdfREFUQTIsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEEzX19VU0JPVEdfREFUQTMsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEE0X19VU0JPVEdfREFUQTQsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEE1X19VU0JPVEdfREFUQTUsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEE2X19VU0JPVEdfREFUQTYsCi0JTVgzMV9QSU5fVVNCT1RHX0RBVEE3X19VU0JPVEdfREFUQTcsCi0JTVgzMV9QSU5fVVNCT1RHX0NMS19fVVNCT1RHX0NMSywKLQlNWDMxX1BJTl9VU0JPVEdfRElSX19VU0JPVEdfRElSLAotCU1YMzFfUElOX1VTQk9UR19OWFRfX1VTQk9UR19OWFQsCi0JTVgzMV9QSU5fVVNCT1RHX1NUUF9fVVNCT1RHX1NUUCwKLX07Ci0KLS8qIFVTQiBPVEcgSFMgcG9ydCAqLwotc3RhdGljIGludCBfX2luaXQgZ3Bpb191c2JvdGdfaHNfYWN0aXZhdGUodm9pZCkKLXsKLQlpbnQgcmV0ID0gbXhjX2lvbXV4X3NldHVwX211bHRpcGxlX3BpbnModXNib3RnX3BpbnMsCi0JCQkJCUFSUkFZX1NJWkUodXNib3RnX3BpbnMpLCAidXNib3RnIik7Ci0KLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBzZXQgdXAgT1RHIHBpbnNcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQk9UR19EQVRBMCwgUEFEX0NUTF9EUlZfTUFYIHwgUEFEX0NUTF9TUkVfRkFTVCk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEExLCBQQURfQ1RMX0RSVl9NQVggfCBQQURfQ1RMX1NSRV9GQVNUKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTIsIFBBRF9DVExfRFJWX01BWCB8IFBBRF9DVExfU1JFX0ZBU1QpOwotCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQk9UR19EQVRBMywgUEFEX0NUTF9EUlZfTUFYIHwgUEFEX0NUTF9TUkVfRkFTVCk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE0LCBQQURfQ1RMX0RSVl9NQVggfCBQQURfQ1RMX1NSRV9GQVNUKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfREFUQTUsIFBBRF9DVExfRFJWX01BWCB8IFBBRF9DVExfU1JFX0ZBU1QpOwotCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQk9UR19EQVRBNiwgUEFEX0NUTF9EUlZfTUFYIHwgUEFEX0NUTF9TUkVfRkFTVCk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX0RBVEE3LCBQQURfQ1RMX0RSVl9NQVggfCBQQURfQ1RMX1NSRV9GQVNUKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfQ0xLLCAgIFBBRF9DVExfRFJWX01BWCB8IFBBRF9DVExfU1JFX0ZBU1QpOwotCW14Y19pb211eF9zZXRfcGFkKE1YMzFfUElOX1VTQk9UR19ESVIsICAgUEFEX0NUTF9EUlZfTUFYIHwgUEFEX0NUTF9TUkVfRkFTVCk7Ci0JbXhjX2lvbXV4X3NldF9wYWQoTVgzMV9QSU5fVVNCT1RHX05YVCwgICBQQURfQ1RMX0RSVl9NQVggfCBQQURfQ1RMX1NSRV9GQVNUKTsKLQlteGNfaW9tdXhfc2V0X3BhZChNWDMxX1BJTl9VU0JPVEdfU1RQLCAgIFBBRF9DVExfRFJWX01BWCB8IFBBRF9DVExfU1JFX0ZBU1QpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIE9URyBjb25maWcgKi8KLXN0YXRpYyBzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSB1c2JfcGRhdGEgPSB7Ci0JLm9wZXJhdGluZ19tb2RlCT0gRlNMX1VTQjJfRFJfREVWSUNFLAotCS5waHlfbW9kZQk9IEZTTF9VU0IyX1BIWV9VTFBJLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNtMDM3X2ZsYXNoID0gewotCS5uYW1lCT0gInBoeXNtYXAtZmxhc2giLAotCS5pZAk9IDAsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgID0gJnBjbTAzN19mbGFzaF9kYXRhLAotCX0sCi0JLnJlc291cmNlID0gJnBjbTAzN19mbGFzaF9yZXNvdXJjZSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0gewotCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHNtc2M5MTF4X3Jlc291cmNlc1tdID0gewotCXsKLQkJLnN0YXJ0CQk9IENTMV9CQVNFX0FERFIgKyAweDMwMCwKLQkJLmVuZAkJPSBDUzFfQkFTRV9BRERSICsgMHgzMDAgKyBTWl82NEsgLSAxLAotCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwgewotCQkuc3RhcnQJCT0gSU9NVVhfVE9fSVJRKE1YMzFfUElOX0dQSU8zXzEpLAotCQkuZW5kCQk9IElPTVVYX1RPX0lSUShNWDMxX1BJTl9HUElPM18xKSwKLQkJLmZsYWdzCQk9IElPUkVTT1VSQ0VfSVJRIHwgSU9SRVNPVVJDRV9JUlFfTE9XTEVWRUwsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc21zYzkxMXhfcGxhdGZvcm1fY29uZmlnIHNtc2M5MTF4X2luZm8gPSB7Ci0JLmZsYWdzCQk9IFNNU0M5MTFYX1VTRV8zMkJJVCB8IFNNU0M5MTFYX0ZPUkNFX0lOVEVSTkFMX1BIWSB8Ci0JCQkgIFNNU0M5MTFYX1NBVkVfTUFDX0FERFJFU1MsCi0JLmlycV9wb2xhcml0eQk9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAotCS5pcnFfdHlwZQk9IFNNU0M5MTFYX0lSUV9UWVBFX09QRU5fRFJBSU4sCi0JLnBoeV9pbnRlcmZhY2UJPSBQSFlfSU5URVJGQUNFX01PREVfTUlJLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNtMDM3X2V0aCA9IHsKLQkubmFtZQkJPSAic21zYzkxMXgiLAotCS5pZAkJPSAtMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc21zYzkxMXhfcmVzb3VyY2VzKSwKLQkucmVzb3VyY2UJPSBzbXNjOTExeF9yZXNvdXJjZXMsCi0JLmRldgkJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnNtc2M5MTF4X2luZm8sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGRhdGFfbXRkX3JhbSBwY20wMzhfc3JhbV9kYXRhID0gewotCS5iYW5rd2lkdGggPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY20wMzhfc3JhbV9yZXNvdXJjZSA9IHsKLQkuc3RhcnQgPSBDUzRfQkFTRV9BRERSLAotCS5lbmQgICA9IENTNF9CQVNFX0FERFIgKyA1MTIgKiAxMDI0IC0gMSwKLQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjbTAzN19zcmFtX2RldmljZSA9IHsKLQkubmFtZSA9ICJtdGQtcmFtIiwKLQkuaWQgPSAwLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnBjbTAzOF9zcmFtX2RhdGEsCi0JfSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi0JLnJlc291cmNlID0gJnBjbTAzOF9zcmFtX3Jlc291cmNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBteGNfbmFuZF9wbGF0Zm9ybV9kYXRhIHBjbTAzN19uYW5kX2JvYXJkX2luZm8gPSB7Ci0JLndpZHRoID0gMSwKLQkuaHdfZWNjID0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaW14aTJjX3BsYXRmb3JtX2RhdGEgcGNtMDM3X2kyY18xX2RhdGEgPSB7Ci0JLmJpdHJhdGUgPSAxMDAwMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IGlteGkyY19wbGF0Zm9ybV9kYXRhIHBjbTAzN19pMmNfMl9kYXRhID0gewotCS5iaXRyYXRlID0gMjAwMDAsCi19OwotCi1zdGF0aWMgc3RydWN0IGF0MjRfcGxhdGZvcm1fZGF0YSBib2FyZF9lZXByb20gPSB7Ci0JLmJ5dGVfbGVuID0gNDA5NiwKLQkucGFnZV9zaXplID0gMzIsCi0JLmZsYWdzID0gQVQyNF9GTEFHX0FERFIxNiwKLX07Ci0KLXN0YXRpYyBpbnQgcGNtMDM3X2NhbWVyYV9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBvbikKLXsKLQkvKiBkaXNhYmxlIG9yIGVuYWJsZSB0aGUgY2FtZXJhIGluIFg3IG9yIFg4IFBDTTk3MCBjb25uZWN0b3IgKi8KLQlncGlvX3NldF92YWx1ZShJT01VWF9UT19HUElPKE1YMzFfUElOX0NTSV9ENSksICFvbik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gcGNtMDM3X2kyY19jYW1lcmFbXSA9IHsKLQl7Ci0JCUkyQ19CT0FSRF9JTkZPKCJtdDl0MDMxIiwgMHg1ZCksCi0JfSwgewotCQlJMkNfQk9BUkRfSU5GTygibXQ5djAyMiIsIDB4NDgpLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHNvY19jYW1lcmFfbGluayBpY2xpbmtfbXQ5djAyMiA9IHsKLQkuYnVzX2lkCQk9IDAsCQkvKiBNdXN0IG1hdGNoIHdpdGggdGhlIGNhbWVyYSBJRCAqLwotCS5ib2FyZF9pbmZvCT0gJnBjbTAzN19pMmNfY2FtZXJhWzFdLAotCS5pMmNfYWRhcHRlcl9pZAk9IDIsCi0JLm1vZHVsZV9uYW1lCT0gIm10OXYwMjIiLAotfTsKLQotc3RhdGljIHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgaWNsaW5rX210OXQwMzEgPSB7Ci0JLmJ1c19pZAkJPSAwLAkJLyogTXVzdCBtYXRjaCB3aXRoIHRoZSBjYW1lcmEgSUQgKi8KLQkucG93ZXIJCT0gcGNtMDM3X2NhbWVyYV9wb3dlciwKLQkuYm9hcmRfaW5mbwk9ICZwY20wMzdfaTJjX2NhbWVyYVswXSwKLQkuaTJjX2FkYXB0ZXJfaWQJPSAyLAotCS5tb2R1bGVfbmFtZQk9ICJtdDl0MDMxIiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gcGNtMDM3X2kyY19kZXZpY2VzW10gPSB7Ci0JewotCQlJMkNfQk9BUkRfSU5GTygiYXQyNCIsIDB4NTIpLCAvKiBFMD0wLCBFMT0xLCBFMj0wICovCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmJvYXJkX2VlcHJvbSwKLQl9LCB7Ci0JCUkyQ19CT0FSRF9JTkZPKCJwY2Y4NTYzIiwgMHg1MSksCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNtMDM3X210OXQwMzEgPSB7Ci0JLm5hbWUJPSAic29jLWNhbWVyYS1wZHJ2IiwKLQkuaWQJPSAwLAotCS5kZXYJPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJmljbGlua19tdDl0MDMxLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwY20wMzdfbXQ5djAyMiA9IHsKLQkubmFtZQk9ICJzb2MtY2FtZXJhLXBkcnYiLAotCS5pZAk9IDEsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmaWNsaW5rX210OXYwMjIsCi0JfSwKLX07Ci0KLS8qIE5vdCBjb25uZWN0ZWQgYnkgZGVmYXVsdCAqLwotI2lmZGVmIFBDTTk3MF9TREhDX1JXX1NXSVRDSAotc3RhdGljIGludCBwY205NzBfc2RoYzFfZ2V0X3JvKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9TRlM2KSk7Ci19Ci0jZW5kaWYKLQotI2RlZmluZSBTREhDMV9HUElPX1dQCUlPTVVYX1RPX0dQSU8oTVgzMV9QSU5fU0ZTNikKLSNkZWZpbmUgU0RIQzFfR1BJT19ERVQJSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9TQ0s2KQotCi1zdGF0aWMgaW50IHBjbTk3MF9zZGhjMV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldiwgaXJxX2hhbmRsZXJfdCBkZXRlY3RfaXJxLAotCQl2b2lkICpkYXRhKQotewotCWludCByZXQ7Ci0KLQlyZXQgPSBncGlvX3JlcXVlc3QoU0RIQzFfR1BJT19ERVQsICJzZGhjLWRldGVjdCIpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KLQlncGlvX2RpcmVjdGlvbl9pbnB1dChTREhDMV9HUElPX0RFVCk7Ci0KLSNpZmRlZiBQQ005NzBfU0RIQ19SV19TV0lUQ0gKLQlyZXQgPSBncGlvX3JlcXVlc3QoU0RIQzFfR1BJT19XUCwgInNkaGMtd3AiKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9ncGlvX2ZyZWU7Ci0JZ3Bpb19kaXJlY3Rpb25faW5wdXQoU0RIQzFfR1BJT19XUCk7Ci0jZW5kaWYKLQotCXJldCA9IHJlcXVlc3RfaXJxKElPTVVYX1RPX0lSUShNWDMxX1BJTl9TQ0s2KSwgZGV0ZWN0X2lycSwKLQkJCUlSUUZfRElTQUJMRUQgfCBJUlFGX1RSSUdHRVJfRkFMTElORywKLQkJCQkic2RoYy1kZXRlY3QiLCBkYXRhKTsKLQlpZiAocmV0KQotCQlnb3RvIGVycl9ncGlvX2ZyZWVfMjsKLQotCXJldHVybiAwOwotCi1lcnJfZ3Bpb19mcmVlXzI6Ci0jaWZkZWYgUENNOTcwX1NESENfUldfU1dJVENICi0JZ3Bpb19mcmVlKFNESEMxX0dQSU9fV1ApOwotZXJyX2dwaW9fZnJlZToKLSNlbmRpZgotCWdwaW9fZnJlZShTREhDMV9HUElPX0RFVCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBwY205NzBfc2RoYzFfZXhpdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCi17Ci0JZnJlZV9pcnEoSU9NVVhfVE9fSVJRKE1YMzFfUElOX1NDSzYpLCBkYXRhKTsKLQlncGlvX2ZyZWUoU0RIQzFfR1BJT19ERVQpOwotCWdwaW9fZnJlZShTREhDMV9HUElPX1dQKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpbXhtbWNfcGxhdGZvcm1fZGF0YSBzZGhjX3BkYXRhID0gewotI2lmZGVmIFBDTTk3MF9TREhDX1JXX1NXSVRDSAotCS5nZXRfcm8gPSBwY205NzBfc2RoYzFfZ2V0X3JvLAotI2VuZGlmCi0JLmluaXQgPSBwY205NzBfc2RoYzFfaW5pdCwKLQkuZXhpdCA9IHBjbTk3MF9zZGhjMV9leGl0LAotfTsKLQotc3RydWN0IG14M19jYW1lcmFfcGRhdGEgY2FtZXJhX3BkYXRhID0gewotCS5kbWFfZGV2CT0gJm14M19pcHUuZGV2LAotCS5mbGFncwkJPSBNWDNfQ0FNRVJBX0RBVEFXSURUSF84IHwgTVgzX0NBTUVSQV9EQVRBV0lEVEhfMTAsCi0JLm1jbGtfMTBraHoJPSAyMDAwLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgcGNtMDM3X2NhbWVyYV9hbGxvY19kbWEoY29uc3Qgc2l6ZV90IGJ1Zl9zaXplKQotewotCWRtYV9hZGRyX3QgZG1hX2hhbmRsZTsKLQl2b2lkICpidWY7Ci0JaW50IGRtYTsKLQotCWlmIChidWZfc2l6ZSA8IDIgKiAxMDI0ICogMTAyNCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlidWYgPSBkbWFfYWxsb2NfY29oZXJlbnQoTlVMTCwgYnVmX3NpemUsICZkbWFfaGFuZGxlLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWJ1ZikgewotCQlwcl9lcnIoIiVzOiBjYW5ub3QgYWxsb2NhdGUgY2FtZXJhIGJ1ZmZlci1tZW1vcnlcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JbWVtc2V0KGJ1ZiwgMCwgYnVmX3NpemUpOwotCi0JZG1hID0gZG1hX2RlY2xhcmVfY29oZXJlbnRfbWVtb3J5KCZteDNfY2FtZXJhLmRldiwKLQkJCQkJZG1hX2hhbmRsZSwgZG1hX2hhbmRsZSwgYnVmX3NpemUsCi0JCQkJCURNQV9NRU1PUllfTUFQIHwgRE1BX01FTU9SWV9FWENMVVNJVkUpOwotCi0JLyogVGhlIHdheSB3ZSBjYWxsIGRtYV9kZWNsYXJlX2NvaGVyZW50X21lbW9yeSBvbmx5IGEgbWFsbG9jIGNhbiBmYWlsICovCi0JcmV0dXJuIGRtYSAmIERNQV9NRU1PUllfTUFQID8gMCA6IC1FTk9NRU07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmcGNtMDM3X2ZsYXNoLAotCSZwY20wMzdfc3JhbV9kZXZpY2UsCi0JJnBjbTAzN19tdDl0MDMxLAotCSZwY20wMzdfbXQ5djAyMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaXB1X3BsYXRmb3JtX2RhdGEgbXgzX2lwdV9kYXRhID0gewotCS5pcnFfYmFzZSA9IE1YQ19JUFVfSVJRX1NUQVJULAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgZmJfbW9kZWRiW10gPSB7Ci0JewotCQkvKiAyNDB4MzIwIEAgNjAgSHogU2hhcnAgKi8KLQkJLm5hbWUJCT0gIlNoYXJwLUxRMDM1UTdESDA2LVFWR0EiLAotCQkucmVmcmVzaAk9IDYwLAotCQkueHJlcwkJPSAyNDAsCi0JCS55cmVzCQk9IDMyMCwKLQkJLnBpeGNsb2NrCT0gMTg1OTI1LAotCQkubGVmdF9tYXJnaW4JPSA5LAotCQkucmlnaHRfbWFyZ2luCT0gMTYsCi0JCS51cHBlcl9tYXJnaW4JPSA3LAotCQkubG93ZXJfbWFyZ2luCT0gOSwKLQkJLmhzeW5jX2xlbgk9IDEsCi0JCS52c3luY19sZW4JPSAxLAotCQkuc3luYwkJPSBGQl9TWU5DX0hPUl9ISUdIX0FDVCB8IEZCX1NZTkNfU0hBUlBfTU9ERSB8Ci0JCQkJICBGQl9TWU5DX0NMS19JTlZFUlQgfCBGQl9TWU5DX0NMS19JRExFX0VOLAotCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKLQkJLmZsYWcJCT0gMCwKLQl9LCB7Ci0JCS8qIDI0MHgzMjAgQCA2MCBIeiAqLwotCQkubmFtZQkJPSAiVFgwOTAiLAotCQkucmVmcmVzaAk9IDYwLAotCQkueHJlcwkJPSAyNDAsCi0JCS55cmVzCQk9IDMyMCwKLQkJLnBpeGNsb2NrCT0gMzgyNTUsCi0JCS5sZWZ0X21hcmdpbgk9IDE0NCwKLQkJLnJpZ2h0X21hcmdpbgk9IDAsCi0JCS51cHBlcl9tYXJnaW4JPSA3LAotCQkubG93ZXJfbWFyZ2luCT0gNDAsCi0JCS5oc3luY19sZW4JPSA5NiwKLQkJLnZzeW5jX2xlbgk9IDEsCi0JCS5zeW5jCQk9IEZCX1NZTkNfVkVSVF9ISUdIX0FDVCB8IEZCX1NZTkNfT0VfQUNUX0hJR0gsCi0JCS52bW9kZQkJPSBGQl9WTU9ERV9OT05JTlRFUkxBQ0VELAotCQkuZmxhZwkJPSAwLAotCX0sIHsKLQkJLyogMjQweDMyMCBAIDYwIEh6ICovCi0JCS5uYW1lCQk9ICJDTUVMLU9MRUQiLAotCQkucmVmcmVzaAk9IDYwLAotCQkueHJlcwkJPSAyNDAsCi0JCS55cmVzCQk9IDMyMCwKLQkJLnBpeGNsb2NrCT0gMTg1OTI1LAotCQkubGVmdF9tYXJnaW4JPSA5LAotCQkucmlnaHRfbWFyZ2luCT0gMTYsCi0JCS51cHBlcl9tYXJnaW4JPSA3LAotCQkubG93ZXJfbWFyZ2luCT0gOSwKLQkJLmhzeW5jX2xlbgk9IDEsCi0JCS52c3luY19sZW4JPSAxLAotCQkuc3luYwkJPSBGQl9TWU5DX09FX0FDVF9ISUdIIHwgRkJfU1lOQ19DTEtfSU5WRVJULAotCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKLQkJLmZsYWcJCT0gMCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBteDNmYl9wbGF0Zm9ybV9kYXRhIG14M2ZiX3BkYXRhID0gewotCS5kbWFfZGV2CT0gJm14M19pcHUuZGV2LAotCS5uYW1lCQk9ICJTaGFycC1MUTAzNVE3REgwNi1RVkdBIiwKLQkubW9kZQkJPSBmYl9tb2RlZGIsCi0JLm51bV9tb2Rlcwk9IEFSUkFZX1NJWkUoZmJfbW9kZWRiKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcGNtOTcwX3NqYTEwMDBfcmVzb3VyY2VzW10gPSB7Ci0JewotCQkuc3RhcnQgICA9IENTNV9CQVNFX0FERFIsCi0JCS5lbmQgICAgID0gQ1M1X0JBU0VfQUREUiArIDB4MTAwIC0gMSwKLQkJLmZsYWdzICAgPSBJT1JFU09VUkNFX01FTSwKLQl9LCB7Ci0JCS5zdGFydCAgID0gSU9NVVhfVE9fSVJRKElPTVVYX1BJTig0OCwgMTA1KSksCi0JCS5lbmQgICAgID0gSU9NVVhfVE9fSVJRKElPTVVYX1BJTig0OCwgMTA1KSksCi0JCS5mbGFncyAgID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9MT1dFREdFLAotCX0sCi19OwotCi1zdHJ1Y3Qgc2phMTAwMF9wbGF0Zm9ybV9kYXRhIHBjbTk3MF9zamExMDAwX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLmNsb2NrCQk9IDE2MDAwMDAwIC8gMiwKLQkub2NyCQk9IDB4NDAgfCAweDE4LAotCS5jZHIJCT0gMHg0MCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBjbTk3MF9zamExMDAwID0gewotCS5uYW1lID0gInNqYTEwMDBfcGxhdGZvcm0iLAotCS5kZXYgPSB7Ci0JCS5wbGF0Zm9ybV9kYXRhID0gJnBjbTk3MF9zamExMDAwX3BsYXRmb3JtX2RhdGEsCi0JfSwKLQkucmVzb3VyY2UgPSBwY205NzBfc2phMTAwMF9yZXNvdXJjZXMsCi0JLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKHBjbTk3MF9zamExMDAwX3Jlc291cmNlcyksCi19OwotCi0vKgotICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBteGNfYm9hcmRfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhwY20wMzdfcGlucywgQVJSQVlfU0laRShwY20wMzdfcGlucyksCi0JCQkicGNtMDM3Iik7Ci0KLQlpZiAocGNtMDM3X3ZhcmlhbnQoKSA9PSBQQ00wMzdfRUVUKQotCQlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhwY20wMzdfdWFydDFfcGlucywKLQkJCUFSUkFZX1NJWkUocGNtMDM3X3VhcnQxX3BpbnMpLCAicGNtMDM3X3VhcnQxIik7Ci0JZWxzZQotCQlteGNfaW9tdXhfc2V0dXBfbXVsdGlwbGVfcGlucyhwY20wMzdfdWFydDFfaGFuZHNoYWtlX3BpbnMsCi0JCQlBUlJBWV9TSVpFKHBjbTAzN191YXJ0MV9oYW5kc2hha2VfcGlucyksCi0JCQkicGNtMDM3X3VhcnQxIik7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UxLCAmdWFydF9wZGF0YSk7Ci0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMiwgJnVhcnRfcGRhdGEpOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3cxX21hc3Rlcl9kZXZpY2UsIE5VTEwpOwotCi0JLyogTEFOOTIxNyBJUlEgcGluICovCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fR1BJTzNfMSksICJsYW45MjE3LWlycSIpOwotCWlmIChyZXQpCi0JCXByX3dhcm5pbmcoImNvdWxkIG5vdCBnZXQgTEFOIGlycSBncGlvXG4iKTsKLQllbHNlIHsKLQkJZ3Bpb19kaXJlY3Rpb25faW5wdXQoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9HUElPM18xKSk7Ci0JCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmcGNtMDM3X2V0aCk7Ci0JfQotCi0KLQkvKiBJMkMgYWRhcHRlcnMgYW5kIGRldmljZXMgKi8KLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBwY20wMzdfaTJjX2RldmljZXMsCi0JCQlBUlJBWV9TSVpFKHBjbTAzN19pMmNfZGV2aWNlcykpOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2kyY19kZXZpY2UxLCAmcGNtMDM3X2kyY18xX2RhdGEpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19pMmNfZGV2aWNlMiwgJnBjbTAzN19pMmNfMl9kYXRhKTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19uYW5kX2RldmljZSwgJnBjbTAzN19uYW5kX2JvYXJkX2luZm8pOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y3NkaGNfZGV2aWNlMCwgJnNkaGNfcGRhdGEpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14M19pcHUsICZteDNfaXB1X2RhdGEpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14M19mYiwgJm14M2ZiX3BkYXRhKTsKLQlpZiAoIWdwaW9fdXNib3RnX2hzX2FjdGl2YXRlKCkpCi0JCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y19vdGdfdWRjX2RldmljZSwgJnVzYl9wZGF0YSk7Ci0KLQkvKiBDU0kgKi8KLQkvKiBDYW1lcmEgcG93ZXI6IGRlZmF1bHQgLSBvZmYgKi8KLQlyZXQgPSBncGlvX3JlcXVlc3QoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9DU0lfRDUpLCAibXQ5dDAzMS1wb3dlciIpOwotCWlmICghcmV0KQotCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9DU0lfRDUpLCAxKTsKLQllbHNlCi0JCWljbGlua19tdDl0MDMxLnBvd2VyID0gTlVMTDsKLQotCWlmICghcGNtMDM3X2NhbWVyYV9hbGxvY19kbWEoNCAqIDEwMjQgKiAxMDI0KSkKLQkJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXgzX2NhbWVyYSwgJmNhbWVyYV9wZGF0YSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnBjbTk3MF9zamExMDAwKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHBjbTAzN190aW1lcl9pbml0KHZvaWQpCi17Ci0JbXgzMV9jbG9ja3NfaW5pdCgyNjAwMDAwMCk7Ci19Ci0KLXN0cnVjdCBzeXNfdGltZXIgcGNtMDM3X3RpbWVyID0gewotCS5pbml0CT0gcGNtMDM3X3RpbWVyX2luaXQsCi19OwotCi1NQUNISU5FX1NUQVJUKFBDTTAzNywgIlBoeXRlYyBQaHljb3JlIHBjbTAzNyIpCi0JLyogTWFpbnRhaW5lcjogUGVuZ3V0cm9uaXggKi8KLQkucGh5c19pbwk9IEFJUFMxX0JBU0VfQUREUiwKLQkuaW9fcGdfb2Zmc3QJPSAoKEFJUFMxX0JBU0VfQUREUl9WSVJUKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zICAgID0gUEhZU19PRkZTRVQgKyAweDEwMCwKLQkubWFwX2lvICAgICAgICAgPSBteDMxX21hcF9pbywKLQkuaW5pdF9pcnEgICAgICAgPSBteDMxX2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUgICA9IG14Y19ib2FyZF9pbml0LAotCS50aW1lciAgICAgICAgICA9ICZwY20wMzdfdGltZXIsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDMvcGNtMDQzLmMgYi9hcmNoL2FybS9tYWNoLW14My9wY20wNDMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTNhYTgyOS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9wY20wNDMuYworKysgL2Rldi9udWxsCkBAIC0xLDI1OSArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAwOSBTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BsYXQtcmFtLmg+Ci0jaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L3NtYzkxMXguaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMvYXQyNC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgotI2lmIGRlZmluZWQgQ09ORklHX0kyQ19JTVggfHwgZGVmaW5lZCBDT05GSUdfSTJDX0lNWF9NT0RVTEUKLSNpbmNsdWRlIDxtYWNoL2kyYy5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bWFjaC9pb211eC1teDM1Lmg+Ci0jaW5jbHVkZSA8bWFjaC9pcHUuaD4KLSNpbmNsdWRlIDxtYWNoL214M2ZiLmg+Ci0jaW5jbHVkZSA8bWFjaC9teGNfbmFuZC5oPgotCi0jaW5jbHVkZSAiZGV2aWNlcy5oIgotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZiX3ZpZGVvbW9kZSBmYl9tb2RlZGJbXSA9IHsKLQl7Ci0JCS8qIDI0MHgzMjAgQCA2MCBIeiAqLwotCQkubmFtZQkJPSAiU2hhcnAtTFEwMzVRNyIsCi0JCS5yZWZyZXNoCT0gNjAsCi0JCS54cmVzCQk9IDI0MCwKLQkJLnlyZXMJCT0gMzIwLAotCQkucGl4Y2xvY2sJPSAxODU5MjUsCi0JCS5sZWZ0X21hcmdpbgk9IDksCi0JCS5yaWdodF9tYXJnaW4JPSAxNiwKLQkJLnVwcGVyX21hcmdpbgk9IDcsCi0JCS5sb3dlcl9tYXJnaW4JPSA5LAotCQkuaHN5bmNfbGVuCT0gMSwKLQkJLnZzeW5jX2xlbgk9IDEsCi0JCS5zeW5jCQk9IEZCX1NZTkNfSE9SX0hJR0hfQUNUIHwgRkJfU1lOQ19TSEFSUF9NT0RFIHwgRkJfU1lOQ19DTEtfSU5WRVJUIHwgRkJfU1lOQ19DTEtfSURMRV9FTiwKLQkJLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQsCi0JCS5mbGFnCQk9IDAsCi0JfSwgewotCQkvKiAyNDB4MzIwIEAgNjAgSHogKi8KLQkJLm5hbWUJCT0gIlRYMDkwIiwKLQkJLnJlZnJlc2gJPSA2MCwKLQkJLnhyZXMJCT0gMjQwLAotCQkueXJlcwkJPSAzMjAsCi0JCS5waXhjbG9jawk9IDM4MjU1LAotCQkubGVmdF9tYXJnaW4JPSAxNDQsCi0JCS5yaWdodF9tYXJnaW4JPSAwLAotCQkudXBwZXJfbWFyZ2luCT0gNywKLQkJLmxvd2VyX21hcmdpbgk9IDQwLAotCQkuaHN5bmNfbGVuCT0gOTYsCi0JCS52c3luY19sZW4JPSAxLAotCQkuc3luYwkJPSBGQl9TWU5DX1ZFUlRfSElHSF9BQ1QgfCBGQl9TWU5DX09FX0FDVF9ISUdILAotCQkudm1vZGUJCT0gRkJfVk1PREVfTk9OSU5URVJMQUNFRCwKLQkJLmZsYWcJCT0gMCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBpcHVfcGxhdGZvcm1fZGF0YSBteDNfaXB1X2RhdGEgPSB7Ci0JLmlycV9iYXNlID0gTVhDX0lQVV9JUlFfU1RBUlQsCi19OwotCi1zdGF0aWMgc3RydWN0IG14M2ZiX3BsYXRmb3JtX2RhdGEgbXgzZmJfcGRhdGEgPSB7Ci0JLmRtYV9kZXYJPSAmbXgzX2lwdS5kZXYsCi0JLm5hbWUJCT0gIlNoYXJwLUxRMDM1UTciLAotCS5tb2RlCQk9IGZiX21vZGVkYiwKLQkubnVtX21vZGVzCT0gQVJSQVlfU0laRShmYl9tb2RlZGIpLAotfTsKLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGNtMDQzX2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoICA9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHBjbTA0M19mbGFzaF9yZXNvdXJjZSA9IHsKLQkuc3RhcnQJPSAweGEwMDAwMDAwLAotCS5lbmQJPSAweGExZmZmZmZmLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGNtMDQzX2ZsYXNoID0gewotCS5uYW1lCT0gInBoeXNtYXAtZmxhc2giLAotCS5pZAk9IDAsCi0JLmRldgk9IHsKLQkJLnBsYXRmb3JtX2RhdGEgID0gJnBjbTA0M19mbGFzaF9kYXRhLAotCX0sCi0JLnJlc291cmNlID0gJnBjbTA0M19mbGFzaF9yZXNvdXJjZSwKLQkubnVtX3Jlc291cmNlcyA9IDEsCi19OwotCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0gewotCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi19OwotCi0jaWYgZGVmaW5lZCBDT05GSUdfSTJDX0lNWCB8fCBkZWZpbmVkIENPTkZJR19JMkNfSU1YX01PRFVMRQotc3RhdGljIHN0cnVjdCBpbXhpMmNfcGxhdGZvcm1fZGF0YSBwY20wNDNfaTJjXzFfZGF0YSA9IHsKLQkuYml0cmF0ZSA9IDUwMDAwLAotfTsKLQotc3RhdGljIHN0cnVjdCBhdDI0X3BsYXRmb3JtX2RhdGEgYm9hcmRfZWVwcm9tID0gewotCS5ieXRlX2xlbiA9IDQwOTYsCi0JLnBhZ2Vfc2l6ZSA9IDMyLAotCS5mbGFncyA9IEFUMjRfRkxBR19BRERSMTYsCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIHBjbTA0M19pMmNfZGV2aWNlc1tdID0gewotICAgICAgIHsKLQkJSTJDX0JPQVJEX0lORk8oImF0MjQiLCAweDUyKSwgLyogRTA9MCwgRTE9MSwgRTI9MCAqLwotCQkucGxhdGZvcm1fZGF0YSA9ICZib2FyZF9lZXByb20sCi0JfSwgewotCQlJMkNfQk9BUkRfSU5GTygicGNmODU2MyIsIDB4NTEpLAotCX0KLX07Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZwY20wNDNfZmxhc2gsCi0JJm14Y19mZWNfZGV2aWNlLAotfTsKLQotc3RhdGljIHN0cnVjdCBwYWRfZGVzYyBwY20wNDNfcGFkc1tdID0gewotCS8qIFVBUlQxICovCi0JTVgzNV9QQURfQ1RTMV9fVUFSVDFfQ1RTLAotCU1YMzVfUEFEX1JUUzFfX1VBUlQxX1JUUywKLQlNWDM1X1BBRF9UWEQxX19VQVJUMV9UWERfTVVYLAotCU1YMzVfUEFEX1JYRDFfX1VBUlQxX1JYRF9NVVgsCi0JLyogVUFSVDIgKi8KLQlNWDM1X1BBRF9DVFMyX19VQVJUMl9DVFMsCi0JTVgzNV9QQURfUlRTMl9fVUFSVDJfUlRTLAotCU1YMzVfUEFEX1RYRDJfX1VBUlQyX1RYRF9NVVgsCi0JTVgzNV9QQURfUlhEMl9fVUFSVDJfUlhEX01VWCwKLQkvKiBGRUMgKi8KLQlNWDM1X1BBRF9GRUNfVFhfQ0xLX19GRUNfVFhfQ0xLLAotCU1YMzVfUEFEX0ZFQ19SWF9DTEtfX0ZFQ19SWF9DTEssCi0JTVgzNV9QQURfRkVDX1JYX0RWX19GRUNfUlhfRFYsCi0JTVgzNV9QQURfRkVDX0NPTF9fRkVDX0NPTCwKLQlNWDM1X1BBRF9GRUNfUkRBVEEwX19GRUNfUkRBVEFfMCwKLQlNWDM1X1BBRF9GRUNfVERBVEEwX19GRUNfVERBVEFfMCwKLQlNWDM1X1BBRF9GRUNfVFhfRU5fX0ZFQ19UWF9FTiwKLQlNWDM1X1BBRF9GRUNfTURDX19GRUNfTURDLAotCU1YMzVfUEFEX0ZFQ19NRElPX19GRUNfTURJTywKLQlNWDM1X1BBRF9GRUNfVFhfRVJSX19GRUNfVFhfRVJSLAotCU1YMzVfUEFEX0ZFQ19SWF9FUlJfX0ZFQ19SWF9FUlIsCi0JTVgzNV9QQURfRkVDX0NSU19fRkVDX0NSUywKLQlNWDM1X1BBRF9GRUNfUkRBVEExX19GRUNfUkRBVEFfMSwKLQlNWDM1X1BBRF9GRUNfVERBVEExX19GRUNfVERBVEFfMSwKLQlNWDM1X1BBRF9GRUNfUkRBVEEyX19GRUNfUkRBVEFfMiwKLQlNWDM1X1BBRF9GRUNfVERBVEEyX19GRUNfVERBVEFfMiwKLQlNWDM1X1BBRF9GRUNfUkRBVEEzX19GRUNfUkRBVEFfMywKLQlNWDM1X1BBRF9GRUNfVERBVEEzX19GRUNfVERBVEFfMywKLQkvKiBJMkMxICovCi0JTVgzNV9QQURfSTJDMV9DTEtfX0kyQzFfU0NMLAotCU1YMzVfUEFEX0kyQzFfREFUX19JMkMxX1NEQSwKLQkvKiBEaXNwbGF5ICovCi0JTVgzNV9QQURfTEQwX19JUFVfRElTUEJfREFUXzAsCi0JTVgzNV9QQURfTEQxX19JUFVfRElTUEJfREFUXzEsCi0JTVgzNV9QQURfTEQyX19JUFVfRElTUEJfREFUXzIsCi0JTVgzNV9QQURfTEQzX19JUFVfRElTUEJfREFUXzMsCi0JTVgzNV9QQURfTEQ0X19JUFVfRElTUEJfREFUXzQsCi0JTVgzNV9QQURfTEQ1X19JUFVfRElTUEJfREFUXzUsCi0JTVgzNV9QQURfTEQ2X19JUFVfRElTUEJfREFUXzYsCi0JTVgzNV9QQURfTEQ3X19JUFVfRElTUEJfREFUXzcsCi0JTVgzNV9QQURfTEQ4X19JUFVfRElTUEJfREFUXzgsCi0JTVgzNV9QQURfTEQ5X19JUFVfRElTUEJfREFUXzksCi0JTVgzNV9QQURfTEQxMF9fSVBVX0RJU1BCX0RBVF8xMCwKLQlNWDM1X1BBRF9MRDExX19JUFVfRElTUEJfREFUXzExLAotCU1YMzVfUEFEX0xEMTJfX0lQVV9ESVNQQl9EQVRfMTIsCi0JTVgzNV9QQURfTEQxM19fSVBVX0RJU1BCX0RBVF8xMywKLQlNWDM1X1BBRF9MRDE0X19JUFVfRElTUEJfREFUXzE0LAotCU1YMzVfUEFEX0xEMTVfX0lQVV9ESVNQQl9EQVRfMTUsCi0JTVgzNV9QQURfTEQxNl9fSVBVX0RJU1BCX0RBVF8xNiwKLQlNWDM1X1BBRF9MRDE3X19JUFVfRElTUEJfREFUXzE3LAotCU1YMzVfUEFEX0QzX0hTWU5DX19JUFVfRElTUEJfRDNfSFNZTkMsCi0JTVgzNV9QQURfRDNfRlBTSElGVF9fSVBVX0RJU1BCX0QzX0NMSywKLQlNWDM1X1BBRF9EM19EUkRZX19JUFVfRElTUEJfRDNfRFJEWSwKLQlNWDM1X1BBRF9DT05UUkFTVF9fSVBVX0RJU1BCX0NPTlRSLAotCU1YMzVfUEFEX0QzX1ZTWU5DX19JUFVfRElTUEJfRDNfVlNZTkMsCi0JTVgzNV9QQURfRDNfUkVWX19JUFVfRElTUEJfRDNfUkVWLAotCU1YMzVfUEFEX0QzX0NMU19fSVBVX0RJU1BCX0QzX0NMUywKLQkvKiBncGlvICovCi0JTVgzNV9QQURfQVRBX0NTMF9fR1BJTzJfNiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbXhjX25hbmRfcGxhdGZvcm1fZGF0YSBwY20wMzdfbmFuZF9ib2FyZF9pbmZvID0gewotCS53aWR0aCA9IDEsCi0JLmh3X2VjYyA9IDEsCi19OwotCi0vKgotICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBteGNfYm9hcmRfaW5pdCh2b2lkKQotewotCW14Y19pb211eF92M19zZXR1cF9tdWx0aXBsZV9wYWRzKHBjbTA0M19wYWRzLCBBUlJBWV9TSVpFKHBjbTA0M19wYWRzKSk7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhkZXZpY2VzLCBBUlJBWV9TSVpFKGRldmljZXMpKTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfbmFuZF9kZXZpY2UsICZwY20wMzdfbmFuZF9ib2FyZF9pbmZvKTsKLQotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTEsICZ1YXJ0X3BkYXRhKTsKLQotI2lmIGRlZmluZWQgQ09ORklHX0kyQ19JTVggfHwgZGVmaW5lZCBDT05GSUdfSTJDX0lNWF9NT0RVTEUKLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBwY20wNDNfaTJjX2RldmljZXMsCi0JCQlBUlJBWV9TSVpFKHBjbTA0M19pMmNfZGV2aWNlcykpOwotCi0JbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX2kyY19kZXZpY2UwLCAmcGNtMDQzX2kyY18xX2RhdGEpOwotI2VuZGlmCi0KLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDNfaXB1LCAmbXgzX2lwdV9kYXRhKTsKLQlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteDNfZmIsICZteDNmYl9wZGF0YSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBwY20wNDNfdGltZXJfaW5pdCh2b2lkKQotewotCW14MzVfY2xvY2tzX2luaXQoKTsKLX0KLQotc3RydWN0IHN5c190aW1lciBwY20wNDNfdGltZXIgPSB7Ci0JLmluaXQJPSBwY20wNDNfdGltZXJfaW5pdCwKLX07Ci0KLU1BQ0hJTkVfU1RBUlQoUENNMDQzLCAiUGh5dGVjIFBoeWNvcmUgcGNtMDQzIikKLQkvKiBNYWludGFpbmVyOiBQZW5ndXRyb25peCAqLwotCS5waHlzX2lvCT0gQUlQUzFfQkFTRV9BRERSLAotCS5pb19wZ19vZmZzdAk9ICgoQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IG14MzVfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14MzVfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZSAgID0gbXhjX2JvYXJkX2luaXQsCi0JLnRpbWVyICAgICAgICAgID0gJnBjbTA0M190aW1lciwKLU1BQ0hJTkVfRU5ECi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXgzL3FvbmcuYyBiL2FyY2gvYXJtL21hY2gtbXgzL3FvbmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDQ0NTExZi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW14My9xb25nLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODUgKzAsMCBAQAotLyoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDkgSWx5YSBZYW5vaywgRW1jcmFmdCBTeXN0ZW1zIEx0ZCwgPHlhbm9rQGVtY3JhZnQuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbWVtb3J5Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPG1hY2gvYm9hcmQtcW9uZy5oPgotI2luY2x1ZGUgPG1hY2gvaW14LXVhcnQuaD4KLSNpbmNsdWRlIDxtYWNoL2lvbXV4LW14My5oPgotI2luY2x1ZGUgImRldmljZXMuaCIKLQotLyogRlBHQSBkZWZpbmVzICovCi0jZGVmaW5lIFFPTkdfRlBHQV9WRVJTSU9OKG1ham9yLCBtaW5vciwgcmV2KQlcCi0JKCgobWFqb3IgJiAweEYpIDw8IDEyKSB8ICgobWlub3IgJiAweEYpIDw8IDgpIHwgKHJldiAmIDB4RkYpKQotCi0jZGVmaW5lIFFPTkdfRlBHQV9CQVNFQUREUiAJCUNTMV9CQVNFX0FERFIKLSNkZWZpbmUgUU9OR19GUEdBX1BFUklQSF9TSVpFIAkJKDEgPDwgMjQpCi0KLSNkZWZpbmUgUU9OR19GUEdBX0NUUkxfQkFTRUFERFIJCVFPTkdfRlBHQV9CQVNFQUREUgotI2RlZmluZSBRT05HX0ZQR0FfQ1RSTF9TSVpFIAkJMHgxMAotLyogRlBHQSBjb250cm9sIHJlZ2lzdGVycyAqLwotI2RlZmluZSBRT05HX0ZQR0FfQ1RSTF9WRVJTSU9OCQkweDAwCi0KLSNkZWZpbmUgUU9OR19ETkVUX0lECQkxCi0jZGVmaW5lIFFPTkdfRE5FVF9CQVNFQUREUglcCi0JKFFPTkdfRlBHQV9CQVNFQUREUiArIFFPTkdfRE5FVF9JRCAqIFFPTkdfRlBHQV9QRVJJUEhfU0laRSkKLSNkZWZpbmUgUU9OR19ETkVUX1NJWkUgCQkweDAwMDAxMDAwCi0KLSNkZWZpbmUgUU9OR19GUEdBX0lSUQkJSU9NVVhfVE9fSVJRKE1YMzFfUElOX0RUUl9EQ0UxKQotCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBib2FyZC1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiByb3V0aW5lcy4KLSAqLwotCi1zdGF0aWMgc3RydWN0IGlteHVhcnRfcGxhdGZvcm1fZGF0YSB1YXJ0X3BkYXRhID0gewotCS5mbGFncyA9IElNWFVBUlRfSEFWRV9SVFNDVFMsCi19OwotCi1zdGF0aWMgaW50IHVhcnRfcGluc1tdID0gewotCU1YMzFfUElOX0NUUzFfX0NUUzEsCi0JTVgzMV9QSU5fUlRTMV9fUlRTMSwKLQlNWDMxX1BJTl9UWEQxX19UWEQxLAotCU1YMzFfUElOX1JYRDFfX1JYRDEKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBteGNfaW5pdF9pbXhfdWFydCh2b2lkKQotewotCW14Y19pb211eF9zZXR1cF9tdWx0aXBsZV9waW5zKHVhcnRfcGlucywgQVJSQVlfU0laRSh1YXJ0X3BpbnMpLAotCQkJInVhcnQtMCIpOwotCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTAsICZ1YXJ0X3BkYXRhKTsKLX0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBkbmV0X3Jlc291cmNlc1tdID0gewotCXsKLQkJLm5hbWUJPSAiZG5ldC1tZW1vcnkiLAotCQkuc3RhcnQJPSBRT05HX0RORVRfQkFTRUFERFIsCi0JCS5lbmQJPSBRT05HX0RORVRfQkFTRUFERFIgKyBRT05HX0RORVRfU0laRSAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sIHsKLQkJLnN0YXJ0CT0gUU9OR19GUEdBX0lSUSwKLQkJLmVuZAk9IFFPTkdfRlBHQV9JUlEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbmV0X2RldmljZSA9IHsKLQkubmFtZQkJCT0gImRuZXQiLAotCS5pZAkJCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJCT0gQVJSQVlfU0laRShkbmV0X3Jlc291cmNlcyksCi0JLnJlc291cmNlCQk9IGRuZXRfcmVzb3VyY2VzLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgcW9uZ19pbml0X2RuZXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbmV0X2RldmljZSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogTVREIE5PUiBmbGFzaCAqLwotCi1zdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBxb25nX2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoID0gMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcW9uZ19mbGFzaF9yZXNvdXJjZSA9IHsKLQkuc3RhcnQgPSBDUzBfQkFTRV9BRERSLAotCS5lbmQgPSBDUzBfQkFTRV9BRERSICsgUU9OR19OT1JfU0laRSAtIDEsCi0JLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBxb25nX25vcl9tdGRfZGV2aWNlID0gewotCS5uYW1lID0gInBoeXNtYXAtZmxhc2giLAotCS5pZCA9IDAsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmcW9uZ19mbGFzaF9kYXRhLAotCQl9LAotCS5yZXNvdXJjZSA9ICZxb25nX2ZsYXNoX3Jlc291cmNlLAotCS5udW1fcmVzb3VyY2VzID0gMSwKLX07Ci0KLXN0YXRpYyB2b2lkIHFvbmdfaW5pdF9ub3JfbXRkKHZvaWQpCi17Ci0JKHZvaWQpcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZxb25nX25vcl9tdGRfZGV2aWNlKTsKLX0KLQotLyoKLSAqIEhhcmR3YXJlIHNwZWNpZmljIGFjY2VzcyB0byBjb250cm9sLWxpbmVzCi0gKi8KLXN0YXRpYyB2b2lkIHFvbmdfbmFuZF9jbWRfY3RybChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IGNtZCwgdW5zaWduZWQgaW50IGN0cmwpCi17Ci0Jc3RydWN0IG5hbmRfY2hpcCAqbmFuZF9jaGlwID0gbXRkLT5wcml2OwotCi0JaWYgKGNtZCA9PSBOQU5EX0NNRF9OT05FKQotCQlyZXR1cm47Ci0KLQlpZiAoY3RybCAmIE5BTkRfQ0xFKQotCQl3cml0ZWIoY21kLCBuYW5kX2NoaXAtPklPX0FERFJfVyArICgxIDw8IDI0KSk7Ci0JZWxzZQotCQl3cml0ZWIoY21kLCBuYW5kX2NoaXAtPklPX0FERFJfVyArICgxIDw8IDIzKSk7Ci19Ci0KLS8qCi0gKiBSZWFkIHRoZSBEZXZpY2UgUmVhZHkgcGluLgotICovCi1zdGF0aWMgaW50IHFvbmdfbmFuZF9kZXZpY2VfcmVhZHkoc3RydWN0IG10ZF9pbmZvICptdGQpCi17Ci0JcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlKElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fTkZSQikpOwotfQotCi1zdGF0aWMgdm9pZCBxb25nX25hbmRfc2VsZWN0X2NoaXAoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwKQotewotCWlmIChjaGlwID49IDApCi0JCWdwaW9fc2V0X3ZhbHVlKElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fTkZDRV9CKSwgMCk7Ci0JZWxzZQotCQlncGlvX3NldF92YWx1ZShJT01VWF9UT19HUElPKE1YMzFfUElOX05GQ0VfQiksIDEpOwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX25hbmRfZGF0YSBxb25nX25hbmRfZGF0YSA9IHsKLQkuY2hpcCA9IHsKLQkJLmNoaXBfZGVsYXkJCT0gMjAsCi0JCS5vcHRpb25zCQk9IDAsCi0JfSwKLQkuY3RybCA9IHsKLQkJLmNtZF9jdHJsIAkJPSBxb25nX25hbmRfY21kX2N0cmwsCi0JCS5kZXZfcmVhZHkJCT0gcW9uZ19uYW5kX2RldmljZV9yZWFkeSwKLQkJLnNlbGVjdF9jaGlwCQk9IHFvbmdfbmFuZF9zZWxlY3RfY2hpcCwKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHFvbmdfbmFuZF9yZXNvdXJjZSA9IHsKLQkuc3RhcnQgIAk9IENTM19CQVNFX0FERFIsCi0JLmVuZCAgICAJPSBDUzNfQkFTRV9BRERSICsgU1pfMzJNIC0gMSwKLQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBxb25nX25hbmRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJnZW5fbmFuZCIsCi0JLmlkCQk9IC0xLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZxb25nX25hbmRfZGF0YSwKLQl9LAotCS5udW1fcmVzb3VyY2VzCT0gMSwKLQkucmVzb3VyY2UJPSAmcW9uZ19uYW5kX3Jlc291cmNlLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IHFvbmdfaW5pdF9uYW5kX210ZCh2b2lkKQotewotCS8qIGluaXQgQ1MgKi8KLQlfX3Jhd193cml0ZWwoMHgwMDAwNGYwMCwgQ1NDUl9VKDMpKTsKLQlfX3Jhd193cml0ZWwoMHgyMDAxM2IzMSwgQ1NDUl9MKDMpKTsKLQlfX3Jhd193cml0ZWwoMHgwMDAyMDgwMCwgQ1NDUl9BKDMpKTsKLQlteGNfaW9tdXhfc2V0X2dwcihNVVhfU0RDVExfQ1NEMV9TRUwsIHRydWUpOwotCi0JLyogZW5hYmxlIHBpbiAqLwotCW14Y19pb211eF9tb2RlKElPTVVYX01PREUoTVgzMV9QSU5fTkZDRV9CLCBJT01VWF9DT05GSUdfR1BJTykpOwotCWlmICghZ3Bpb19yZXF1ZXN0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fTkZDRV9CKSwgIm5hbmRfZW5hYmxlIikpCi0JCWdwaW9fZGlyZWN0aW9uX291dHB1dChJT01VWF9UT19HUElPKE1YMzFfUElOX05GQ0VfQiksIDApOwotCi0JLyogcmVhZHkvYnVzeSBwaW4gKi8KLQlteGNfaW9tdXhfbW9kZShJT01VWF9NT0RFKE1YMzFfUElOX05GUkIsIElPTVVYX0NPTkZJR19HUElPKSk7Ci0JaWYgKCFncGlvX3JlcXVlc3QoSU9NVVhfVE9fR1BJTyhNWDMxX1BJTl9ORlJCKSwgIm5hbmRfcmR5IikpCi0JCWdwaW9fZGlyZWN0aW9uX2lucHV0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fTkZSQikpOwotCi0JLyogd3JpdGUgcHJvdGVjdCBwaW4gKi8KLQlteGNfaW9tdXhfbW9kZShJT01VWF9NT0RFKE1YMzFfUElOX05GV1BfQiwgSU9NVVhfQ09ORklHX0dQSU8pKTsKLQlpZiAoIWdwaW9fcmVxdWVzdChJT01VWF9UT19HUElPKE1YMzFfUElOX05GV1BfQiksICJuYW5kX3dwIikpCi0JCWdwaW9fZGlyZWN0aW9uX2lucHV0KElPTVVYX1RPX0dQSU8oTVgzMV9QSU5fTkZXUF9CKSk7Ci0KLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnFvbmdfbmFuZF9kZXZpY2UpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgcW9uZ19pbml0X2ZwZ2Eodm9pZCkKLXsKLQl2b2lkIF9faW9tZW0gKnJlZ3M7Ci0JdTMyIGZwZ2FfdmVyOwotCi0JcmVncyA9IGlvcmVtYXAoUU9OR19GUEdBX0NUUkxfQkFTRUFERFIsIFFPTkdfRlBHQV9DVFJMX1NJWkUpOwotCWlmICghcmVncykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gbWFwIHJlZ2lzdGVycywgYWJvcnRpbmcuXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQotCWZwZ2FfdmVyID0gcmVhZGwocmVncyArIFFPTkdfRlBHQV9DVFJMX1ZFUlNJT04pOwotCWlvdW5tYXAocmVncyk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiUW9uZyBGUEdBIHZlcnNpb24gJWQuJWQuJWRcbiIsCi0JCQkoZnBnYV92ZXIgJiAweEYwMDApID4+IDEyLAotCQkJKGZwZ2FfdmVyICYgMHgwRjAwKSA+PiA4LCBmcGdhX3ZlciAmIDB4MDBGRik7Ci0JaWYgKGZwZ2FfdmVyIDwgUU9OR19GUEdBX1ZFUlNJT04oMCwgOCwgNykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJxb25nOiBVbmV4cGVjdGVkIEZQR0EgdmVyc2lvbiwgRlBHQS1iYXNlZCAiCi0JCQkJImRldmljZXMgd29uJ3QgYmUgcmVnaXN0ZXJlZCFcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogcmVnaXN0ZXIgRlBHQS1iYXNlZCBkZXZpY2VzICovCi0JcW9uZ19pbml0X25hbmRfbXRkKCk7Ci0JcW9uZ19pbml0X2RuZXQoKTsKLX0KLQotLyoKLSAqIEJvYXJkIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgbXhjX2JvYXJkX2luaXQodm9pZCkKLXsKLQlteGNfaW5pdF9pbXhfdWFydCgpOwotCXFvbmdfaW5pdF9ub3JfbXRkKCk7Ci0JcW9uZ19pbml0X2ZwZ2EoKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHFvbmdfdGltZXJfaW5pdCh2b2lkKQotewotCW14MzFfY2xvY2tzX2luaXQoMjYwMDAwMDApOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c190aW1lciBxb25nX3RpbWVyID0gewotCS5pbml0CT0gcW9uZ190aW1lcl9pbml0LAotfTsKLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgdXNlcyBzdGFuZGFyZCBrZXJuZWwgbWFjcm9zIGRlZmluZWQgaW4gYXJjaC5oIGluIG9yZGVyIHRvCi0gKiBpbml0aWFsaXplIF9fbWFjaF9kZXNjX1FPTkcgZGF0YSBzdHJ1Y3R1cmUuCi0gKi8KLQotTUFDSElORV9TVEFSVChRT05HLCAiRGF2ZS9ERU5YIFFvbmdFVkItTElURSIpCi0JLyogTWFpbnRhaW5lcjogREVOWCBTb2Z0d2FyZSBFbmdpbmVlcmluZyBHbWJIICovCi0JLnBoeXNfaW8gICAgICAgID0gQUlQUzFfQkFTRV9BRERSLAotCS5pb19wZ19vZmZzdCAgICA9ICgoQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMgICAgPSBQSFlTX09GRlNFVCArIDB4MTAwLAotCS5tYXBfaW8gICAgICAgICA9IG14MzFfbWFwX2lvLAotCS5pbml0X2lycSAgICAgICA9IG14MzFfaW5pdF9pcnEsCi0JLmluaXRfbWFjaGluZSAgID0gbXhjX2JvYXJkX2luaXQsCi0JLnRpbWVyICAgICAgICAgID0gJnFvbmdfdGltZXIsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDUvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtbXg1L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU3NmQ1MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L0tjb25maWcKQEAgLTAsMCArMSwxOCBAQAoraWYgQVJDSF9NWDUKKworY29uZmlnIEFSQ0hfTVg1MQorCWJvb2wKKwlkZWZhdWx0IHkKKwlzZWxlY3QgTVhDX1RaSUMKKwlzZWxlY3QgQVJDSF9NWENfSU9NVVhfVjMKKworY29tbWVudCAiTVg1IHBsYXRmb3JtczoiCisKK2NvbmZpZyBNQUNIX01YNTFfQkFCQkFHRQorCWJvb2wgIlN1cHBvcnQgTVg1MSBCQUJCQUdFIHBsYXRmb3JtcyIKKwloZWxwCisJICBJbmNsdWRlIHN1cHBvcnQgZm9yIE1YNTEgQmFiYmFnZSBwbGF0Zm9ybSwgYWxzbyBrbm93biBhcyBNWDUxRVZLIGluCisJICB1LWJvb3QuIFRoaXMgaW5jbHVkZXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIHRoZSBib2FyZCBhbmQgaXRzCisJICBwZXJpcGhlcmFscy4KKworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1teDUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYyM2Y4NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L01ha2VmaWxlCkBAIC0wLDAgKzEsOSBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKworIyBPYmplY3QgZmlsZSBsaXN0cy4KK29iai15ICAgOj0gY3B1Lm8gbW0ubyBjbG9jay1teDUxLm8gZGV2aWNlcy5vCisKK29iai0kKENPTkZJR19NQUNIX01YNTFfQkFCQkFHRSkgKz0gYm9hcmQtbXg1MV9iYWJiYWdlLm8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDUvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtbXg1L01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkzOWExOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSwzIEBACisgICB6cmVsYWRkci15CTo9IDB4OTAwMDgwMDAKK3BhcmFtc19waHlzLXkJOj0gMHg5MDAwMDEwMAoraW5pdHJkX3BoeXMteQk6PSAweDkwODAwMDAwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUxX2JhYmJhZ2UuYyBiL2FyY2gvYXJtL21hY2gtbXg1L2JvYXJkLW14NTFfYmFiYmFnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNjdhNzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14NS9ib2FyZC1teDUxX2JhYmJhZ2UuYwpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIEFtaXQgS3VjaGVyaWEgPGFtaXQua3VjaGVyaWFAY2Fub25pY2FsLmNvbT4KKyAqCisgKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqCisgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2lteC11YXJ0Lmg+CisjaW5jbHVkZSA8bWFjaC9pb211eC1teDUxLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJm14Y19mZWNfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBwYWRfZGVzYyBteDUxYmFiYmFnZV9wYWRzW10gPSB7CisJLyogVUFSVDEgKi8KKwlNWDUxX1BBRF9VQVJUMV9SWERfX1VBUlQxX1JYRCwKKwlNWDUxX1BBRF9VQVJUMV9UWERfX1VBUlQxX1RYRCwKKwlNWDUxX1BBRF9VQVJUMV9SVFNfX1VBUlQxX1JUUywKKwlNWDUxX1BBRF9VQVJUMV9DVFNfX1VBUlQxX0NUUywKKworCS8qIFVBUlQyICovCisJTVg1MV9QQURfVUFSVDJfUlhEX19VQVJUMl9SWEQsCisJTVg1MV9QQURfVUFSVDJfVFhEX19VQVJUMl9UWEQsCisKKwkvKiBVQVJUMyAqLworCU1YNTFfUEFEX0VJTV9EMjVfX1VBUlQzX1JYRCwKKwlNWDUxX1BBRF9FSU1fRDI2X19VQVJUM19UWEQsCisJTVg1MV9QQURfRUlNX0QyN19fVUFSVDNfUlRTLAorCU1YNTFfUEFEX0VJTV9EMjRfX1VBUlQzX0NUUywKK307CisKKy8qIFNlcmlhbCBwb3J0cyAqLworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9JTVgpIHx8IGRlZmluZWQoQ09ORklHX1NFUklBTF9JTVhfTU9EVUxFKQorc3RhdGljIHN0cnVjdCBpbXh1YXJ0X3BsYXRmb3JtX2RhdGEgdWFydF9wZGF0YSA9IHsKKwkuZmxhZ3MgPSBJTVhVQVJUX0hBVkVfUlRTQ1RTLAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIG14Y19pbml0X2lteF91YXJ0KHZvaWQpCit7CisJbXhjX3JlZ2lzdGVyX2RldmljZSgmbXhjX3VhcnRfZGV2aWNlMCwgJnVhcnRfcGRhdGEpOworCW14Y19yZWdpc3Rlcl9kZXZpY2UoJm14Y191YXJ0X2RldmljZTEsICZ1YXJ0X3BkYXRhKTsKKwlteGNfcmVnaXN0ZXJfZGV2aWNlKCZteGNfdWFydF9kZXZpY2UyLCAmdWFydF9wZGF0YSk7Cit9CisjZWxzZSAvKiAhU0VSSUFMX0lNWCAqLworc3RhdGljIGlubGluZSB2b2lkIG14Y19pbml0X2lteF91YXJ0KHZvaWQpCit7Cit9CisjZW5kaWYgLyogU0VSSUFMX0lNWCAqLworCisvKgorICogQm9hcmQgc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBteGNfYm9hcmRfaW5pdCh2b2lkKQoreworCW14Y19pb211eF92M19zZXR1cF9tdWx0aXBsZV9wYWRzKG14NTFiYWJiYWdlX3BhZHMsCisJCQkJCUFSUkFZX1NJWkUobXg1MWJhYmJhZ2VfcGFkcykpOworCW14Y19pbml0X2lteF91YXJ0KCk7CisJcGxhdGZvcm1fYWRkX2RldmljZXMoZGV2aWNlcywgQVJSQVlfU0laRShkZXZpY2VzKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteDUxX2JhYmJhZ2VfdGltZXJfaW5pdCh2b2lkKQoreworCW14NTFfY2xvY2tzX2luaXQoMzI3NjgsIDI0MDAwMDAwLCAyMjU3OTIwMCwgMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIG14Y190aW1lciA9IHsKKwkuaW5pdAk9IG14NTFfYmFiYmFnZV90aW1lcl9pbml0LAorfTsKKworTUFDSElORV9TVEFSVChNWDUxX0JBQkJBR0UsICJGcmVlc2NhbGUgTVg1MSBCYWJiYWdlIEJvYXJkIikKKwkvKiBNYWludGFpbmVyOiBBbWl0IEt1Y2hlcmlhIDxhbWl0Lmt1Y2hlcmlhQGNhbm9uaWNhbC5jb20+ICovCisJLnBoeXNfaW8gPSBNWDUxX0FJUFMxX0JBU0VfQUREUiwKKwkuaW9fcGdfb2Zmc3QgPSAoKE1YNTFfQUlQUzFfQkFTRV9BRERSX1ZJUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMgPSBQSFlTX09GRlNFVCArIDB4MTAwLAorCS5tYXBfaW8gPSBteDUxX21hcF9pbywKKwkuaW5pdF9pcnEgPSBteDUxX2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUgPSBteGNfYm9hcmRfaW5pdCwKKwkudGltZXIgPSAmbXhjX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2Nsb2NrLW14NTEuYyBiL2FyY2gvYXJtL21hY2gtbXg1L2Nsb2NrLW14NTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTkwYzAzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvY2xvY2stbXg1MS5jCkBAIC0wLDAgKzEsODI1IEBACisvKgorICogQ29weXJpZ2h0IDIwMDgtMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgQW1pdCBLdWNoZXJpYSA8YW1pdC5rdWNoZXJpYUBjYW5vbmljYWwuY29tPgorICoKKyAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICoKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAorICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvY29tbW9uLmg+CisjaW5jbHVkZSA8bWFjaC9jbG9jay5oPgorCisjaW5jbHVkZSAiY3JtX3JlZ3MuaCIKKworLyogRXh0ZXJuYWwgY2xvY2sgdmFsdWVzIHBhc3NlZC1pbiBieSB0aGUgYm9hcmQgY29kZSAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgZXh0ZXJuYWxfaGlnaF9yZWZlcmVuY2UsIGV4dGVybmFsX2xvd19yZWZlcmVuY2U7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBvc2NpbGxhdG9yX3JlZmVyZW5jZSwgY2tpaDJfcmVmZXJlbmNlOworCitzdGF0aWMgc3RydWN0IGNsayBvc2NfY2xrOworc3RhdGljIHN0cnVjdCBjbGsgcGxsMV9tYWluX2NsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbDFfc3dfY2xrOworc3RhdGljIHN0cnVjdCBjbGsgcGxsMl9zd19jbGs7CitzdGF0aWMgc3RydWN0IGNsayBwbGwzX3N3X2NsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGxwX2FwbV9jbGs7CitzdGF0aWMgc3RydWN0IGNsayBwZXJpcGhfYXBtX2NsazsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFoYl9jbGs7CitzdGF0aWMgc3RydWN0IGNsayBpcGdfY2xrOworCisjZGVmaW5lIE1BWF9EUExMX1dBSVRfVFJJRVMJMTAwMCAvKiAxMDAwICogdWRlbGF5KDEpID0gMW1zICovCisKK3N0YXRpYyBpbnQgX2Nsa19jY2dyX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJcmVnIHw9IE1YQ19DQ01fQ0NHUnhfTU9EX09OIDw8IGNsay0+ZW5hYmxlX3NoaWZ0OworCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX2Nsa19jY2dyX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisJcmVnID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlyZWcgJj0gfihNWENfQ0NNX0NDR1J4X01PRF9PRkYgPDwgY2xrLT5lbmFibGVfc2hpZnQpOworCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7CisKK30KKworc3RhdGljIHZvaWQgX2Nsa19jY2dyX2Rpc2FibGVfaW53YWl0KHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoY2xrLT5lbmFibGVfcmVnKTsKKwlyZWcgJj0gfihNWENfQ0NNX0NDR1J4X0NHX01BU0sgPDwgY2xrLT5lbmFibGVfc2hpZnQpOworCXJlZyB8PSBNWENfQ0NNX0NDR1J4X01PRF9JRExFIDw8IGNsay0+ZW5hYmxlX3NoaWZ0OworCV9fcmF3X3dyaXRlbChyZWcsIGNsay0+ZW5hYmxlX3JlZyk7Cit9CisKKy8qCisgKiBGb3IgdGhlIDQtdG8tMSBtdXhlZCBpbnB1dCBjbG9jaworICovCitzdGF0aWMgaW5saW5lIHUzMiBfZ2V0X211eChzdHJ1Y3QgY2xrICpwYXJlbnQsIHN0cnVjdCBjbGsgKm0wLAorCQkJICAgc3RydWN0IGNsayAqbTEsIHN0cnVjdCBjbGsgKm0yLCBzdHJ1Y3QgY2xrICptMykKK3sKKwlpZiAocGFyZW50ID09IG0wKQorCQlyZXR1cm4gMDsKKwllbHNlIGlmIChwYXJlbnQgPT0gbTEpCisJCXJldHVybiAxOworCWVsc2UgaWYgKHBhcmVudCA9PSBtMikKKwkJcmV0dXJuIDI7CisJZWxzZSBpZiAocGFyZW50ID09IG0zKQorCQlyZXR1cm4gMzsKKwllbHNlCisJCUJVRygpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpfZ2V0X3BsbF9iYXNlKHN0cnVjdCBjbGsgKnBsbCkKK3sKKwlpZiAocGxsID09ICZwbGwxX21haW5fY2xrKQorCQlyZXR1cm4gTVg1MV9EUExMMV9CQVNFOworCWVsc2UgaWYgKHBsbCA9PSAmcGxsMl9zd19jbGspCisJCXJldHVybiBNWDUxX0RQTEwyX0JBU0U7CisJZWxzZSBpZiAocGxsID09ICZwbGwzX3N3X2NsaykKKwkJcmV0dXJuIE1YNTFfRFBMTDNfQkFTRTsKKwllbHNlCisJCUJVRygpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19wbGxfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCWxvbmcgbWZpLCBtZm4sIG1mZCwgcGRmLCByZWZfY2xrLCBtZm5fYWJzOworCXVuc2lnbmVkIGxvbmcgZHBfb3AsIGRwX21mZCwgZHBfbWZuLCBkcF9jdGwsIHBsbF9oZnNtLCBkYmw7CisJdm9pZCBfX2lvbWVtICpwbGxiYXNlOworCXM2NCB0ZW1wOworCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGU7CisKKwlwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisKKwlwbGxiYXNlID0gX2dldF9wbGxfYmFzZShjbGspOworCisJZHBfY3RsID0gX19yYXdfcmVhZGwocGxsYmFzZSArIE1YQ19QTExfRFBfQ1RMKTsKKwlwbGxfaGZzbSA9IGRwX2N0bCAmIE1YQ19QTExfRFBfQ1RMX0hGU007CisJZGJsID0gZHBfY3RsICYgTVhDX1BMTF9EUF9DVExfRFBEQ0swXzJfRU47CisKKwlpZiAocGxsX2hmc20gPT0gMCkgeworCQlkcF9vcCA9IF9fcmF3X3JlYWRsKHBsbGJhc2UgKyBNWENfUExMX0RQX09QKTsKKwkJZHBfbWZkID0gX19yYXdfcmVhZGwocGxsYmFzZSArIE1YQ19QTExfRFBfTUZEKTsKKwkJZHBfbWZuID0gX19yYXdfcmVhZGwocGxsYmFzZSArIE1YQ19QTExfRFBfTUZOKTsKKwl9IGVsc2UgeworCQlkcF9vcCA9IF9fcmF3X3JlYWRsKHBsbGJhc2UgKyBNWENfUExMX0RQX0hGU19PUCk7CisJCWRwX21mZCA9IF9fcmF3X3JlYWRsKHBsbGJhc2UgKyBNWENfUExMX0RQX0hGU19NRkQpOworCQlkcF9tZm4gPSBfX3Jhd19yZWFkbChwbGxiYXNlICsgTVhDX1BMTF9EUF9IRlNfTUZOKTsKKwl9CisJcGRmID0gZHBfb3AgJiBNWENfUExMX0RQX09QX1BERl9NQVNLOworCW1maSA9IChkcF9vcCAmIE1YQ19QTExfRFBfT1BfTUZJX01BU0spID4+IE1YQ19QTExfRFBfT1BfTUZJX09GRlNFVDsKKwltZmkgPSAobWZpIDw9IDUpID8gNSA6IG1maTsKKwltZmQgPSBkcF9tZmQgJiBNWENfUExMX0RQX01GRF9NQVNLOworCW1mbiA9IG1mbl9hYnMgPSBkcF9tZm4gJiBNWENfUExMX0RQX01GTl9NQVNLOworCS8qIFNpZ24gZXh0ZW5kIHRvIDMyLWJpdHMgKi8KKwlpZiAobWZuID49IDB4MDQwMDAwMDApIHsKKwkJbWZuIHw9IDB4RkMwMDAwMDA7CisJCW1mbl9hYnMgPSAtbWZuOworCX0KKworCXJlZl9jbGsgPSAyICogcGFyZW50X3JhdGU7CisJaWYgKGRibCAhPSAwKQorCQlyZWZfY2xrICo9IDI7CisKKwlyZWZfY2xrIC89IChwZGYgKyAxKTsKKwl0ZW1wID0gKHU2NCkgcmVmX2NsayAqIG1mbl9hYnM7CisJZG9fZGl2KHRlbXAsIG1mZCArIDEpOworCWlmIChtZm4gPCAwKQorCQl0ZW1wID0gLXRlbXA7CisJdGVtcCA9IChyZWZfY2xrICogbWZpKSArIHRlbXA7CisKKwlyZXR1cm4gdGVtcDsKK30KKworc3RhdGljIGludCBfY2xrX3BsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgcmVnOworCXZvaWQgX19pb21lbSAqcGxsYmFzZTsKKworCWxvbmcgbWZpLCBwZGYsIG1mbiwgbWZkID0gOTk5OTk5OworCXM2NCB0ZW1wNjQ7CisJdW5zaWduZWQgbG9uZyBxdWFkX3BhcmVudF9yYXRlOworCXVuc2lnbmVkIGxvbmcgcGxsX2hmc20sIGRwX2N0bDsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJcGxsYmFzZSA9IF9nZXRfcGxsX2Jhc2UoY2xrKTsKKworCXF1YWRfcGFyZW50X3JhdGUgPSA0ICogcGFyZW50X3JhdGU7CisJcGRmID0gbWZpID0gLTE7CisJd2hpbGUgKCsrcGRmIDwgMTYgJiYgbWZpIDwgNSkKKwkJbWZpID0gcmF0ZSAqIChwZGYrMSkgLyBxdWFkX3BhcmVudF9yYXRlOworCWlmIChtZmkgPiAxNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcGRmLS07CisKKwl0ZW1wNjQgPSByYXRlICogKHBkZisxKSAtIHF1YWRfcGFyZW50X3JhdGUgKiBtZmk7CisJZG9fZGl2KHRlbXA2NCwgcXVhZF9wYXJlbnRfcmF0ZS8xMDAwMDAwKTsKKwltZm4gPSAobG9uZyl0ZW1wNjQ7CisKKwlkcF9jdGwgPSBfX3Jhd19yZWFkbChwbGxiYXNlICsgTVhDX1BMTF9EUF9DVEwpOworCS8qIHVzZSBkcGRjazBfMiAqLworCV9fcmF3X3dyaXRlbChkcF9jdGwgfCAweDEwMDBMLCBwbGxiYXNlICsgTVhDX1BMTF9EUF9DVEwpOworCXBsbF9oZnNtID0gZHBfY3RsICYgTVhDX1BMTF9EUF9DVExfSEZTTTsKKwlpZiAocGxsX2hmc20gPT0gMCkgeworCQlyZWcgPSBtZmkgPDwgNCB8IHBkZjsKKwkJX19yYXdfd3JpdGVsKHJlZywgcGxsYmFzZSArIE1YQ19QTExfRFBfT1ApOworCQlfX3Jhd193cml0ZWwobWZkLCBwbGxiYXNlICsgTVhDX1BMTF9EUF9NRkQpOworCQlfX3Jhd193cml0ZWwobWZuLCBwbGxiYXNlICsgTVhDX1BMTF9EUF9NRk4pOworCX0gZWxzZSB7CisJCXJlZyA9IG1maSA8PCA0IHwgcGRmOworCQlfX3Jhd193cml0ZWwocmVnLCBwbGxiYXNlICsgTVhDX1BMTF9EUF9IRlNfT1ApOworCQlfX3Jhd193cml0ZWwobWZkLCBwbGxiYXNlICsgTVhDX1BMTF9EUF9IRlNfTUZEKTsKKwkJX19yYXdfd3JpdGVsKG1mbiwgcGxsYmFzZSArIE1YQ19QTExfRFBfSEZTX01GTik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX2Nsa19wbGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVnOworCXZvaWQgX19pb21lbSAqcGxsYmFzZTsKKwlpbnQgaSA9IDA7CisKKwlwbGxiYXNlID0gX2dldF9wbGxfYmFzZShjbGspOworCXJlZyA9IF9fcmF3X3JlYWRsKHBsbGJhc2UgKyBNWENfUExMX0RQX0NUTCkgfCBNWENfUExMX0RQX0NUTF9VUEVOOworCV9fcmF3X3dyaXRlbChyZWcsIHBsbGJhc2UgKyBNWENfUExMX0RQX0NUTCk7CisKKwkvKiBXYWl0IGZvciBsb2NrICovCisJZG8geworCQlyZWcgPSBfX3Jhd19yZWFkbChwbGxiYXNlICsgTVhDX1BMTF9EUF9DVEwpOworCQlpZiAocmVnICYgTVhDX1BMTF9EUF9DVExfTFJGKQorCQkJYnJlYWs7CisKKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKCsraSA8IE1BWF9EUExMX1dBSVRfVFJJRVMpOworCisJaWYgKGkgPT0gTUFYX0RQTExfV0FJVF9UUklFUykgeworCQlwcl9lcnIoIk1YNTogcGxsIGxvY2tpbmcgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9jbGtfcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisJdm9pZCBfX2lvbWVtICpwbGxiYXNlOworCisJcGxsYmFzZSA9IF9nZXRfcGxsX2Jhc2UoY2xrKTsKKwlyZWcgPSBfX3Jhd19yZWFkbChwbGxiYXNlICsgTVhDX1BMTF9EUF9DVEwpICYgfk1YQ19QTExfRFBfQ1RMX1VQRU47CisJX19yYXdfd3JpdGVsKHJlZywgcGxsYmFzZSArIE1YQ19QTExfRFBfQ1RMKTsKK30KKworc3RhdGljIGludCBfY2xrX3BsbDFfc3dfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwl1MzIgcmVnLCBzdGVwOworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQ1NSKTsKKworCS8qIFdoZW4gc3dpdGNoaW5nIGZyb20gcGxsX21haW5fY2xrIHRvIGEgYnlwYXNzIGNsb2NrLCBmaXJzdCBzZWxlY3QgYQorCSAqIG11bHRpcGxleGVkIGNsb2NrIGluICdzdGVwX3NlbCcsIHRoZW4gc2hpZnQgdGhlIGdsaXRjaGxlc3MgbXV4CisJICogJ3BsbDFfc3dfY2xrX3NlbCcuCisJICoKKwkgKiBXaGVuIHN3aXRjaGluZyBiYWNrLCBkbyBpdCBpbiByZXZlcnNlIG9yZGVyCisJICovCisJaWYgKHBhcmVudCA9PSAmcGxsMV9tYWluX2NsaykgeworCQkvKiBTd2l0Y2ggdG8gcGxsMV9tYWluX2NsayAqLworCQlyZWcgJj0gfk1YQ19DQ01fQ0NTUl9QTEwxX1NXX0NMS19TRUw7CisJCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0NTUik7CisJCS8qIHN0ZXBfY2xrIG11eCBzd2l0Y2hlZCB0byBscF9hcG0sIHRvIHNhdmUgcG93ZXIuICovCisJCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0NTUik7CisJCXJlZyAmPSB+TVhDX0NDTV9DQ1NSX1NURVBfU0VMX01BU0s7CisJCXJlZyB8PSAoTVhDX0NDTV9DQ1NSX1NURVBfU0VMX0xQX0FQTSA8PAorCQkJCU1YQ19DQ01fQ0NTUl9TVEVQX1NFTF9PRkZTRVQpOworCX0gZWxzZSB7CisJCWlmIChwYXJlbnQgPT0gJmxwX2FwbV9jbGspIHsKKwkJCXN0ZXAgPSBNWENfQ0NNX0NDU1JfU1RFUF9TRUxfTFBfQVBNOworCQl9IGVsc2UgIGlmIChwYXJlbnQgPT0gJnBsbDJfc3dfY2xrKSB7CisJCQlzdGVwID0gTVhDX0NDTV9DQ1NSX1NURVBfU0VMX1BMTDJfRElWSURFRDsKKwkJfSBlbHNlICBpZiAocGFyZW50ID09ICZwbGwzX3N3X2NsaykgeworCQkJc3RlcCA9IE1YQ19DQ01fQ0NTUl9TVEVQX1NFTF9QTEwzX0RJVklERUQ7CisJCX0gZWxzZQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJcmVnICY9IH5NWENfQ0NNX0NDU1JfU1RFUF9TRUxfTUFTSzsKKwkJcmVnIHw9IChzdGVwIDw8IE1YQ19DQ01fQ0NTUl9TVEVQX1NFTF9PRkZTRVQpOworCisJCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0NTUik7CisJCS8qIFN3aXRjaCB0byBzdGVwX2NsayAqLworCQlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NDU1IpOworCQlyZWcgfD0gTVhDX0NDTV9DQ1NSX1BMTDFfU1dfQ0xLX1NFTDsKKwl9CisJX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DQ1NSKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3BsbDFfc3dfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWcsIGRpdjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQ1NSKTsKKworCWlmIChjbGstPnBhcmVudCA9PSAmcGxsMl9zd19jbGspIHsKKwkJZGl2ID0gKChyZWcgJiBNWENfQ0NNX0NDU1JfUExMMl9QT0RGX01BU0spID4+CisJCSAgICAgICBNWENfQ0NNX0NDU1JfUExMMl9QT0RGX09GRlNFVCkgKyAxOworCX0gZWxzZSBpZiAoY2xrLT5wYXJlbnQgPT0gJnBsbDNfc3dfY2xrKSB7CisJCWRpdiA9ICgocmVnICYgTVhDX0NDTV9DQ1NSX1BMTDNfUE9ERl9NQVNLKSA+PgorCQkgICAgICAgTVhDX0NDTV9DQ1NSX1BMTDNfUE9ERl9PRkZTRVQpICsgMTsKKwl9IGVsc2UKKwkJZGl2ID0gMTsKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyBkaXY7Cit9CisKK3N0YXRpYyBpbnQgX2Nsa19wbGwyX3N3X3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0NTUik7CisKKwlpZiAocGFyZW50ID09ICZwbGwyX3N3X2NsaykKKwkJcmVnICY9IH5NWENfQ0NNX0NDU1JfUExMMl9TV19DTEtfU0VMOworCWVsc2UKKwkJcmVnIHw9IE1YQ19DQ01fQ0NTUl9QTEwyX1NXX0NMS19TRUw7CisKKwlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NDU1IpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9jbGtfbHBfYXBtX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJdTMyIHJlZzsKKworCWlmIChwYXJlbnQgPT0gJm9zY19jbGspCisJCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0NTUikgJiB+TVhDX0NDTV9DQ1NSX0xQX0FQTV9TRUw7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0NTUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX2FybV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIGNhY3JyLCBkaXY7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwljYWNyciA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0FDUlIpOworCWRpdiA9IChjYWNyciAmIE1YQ19DQ01fQ0FDUlJfQVJNX1BPREZfTUFTSykgKyAxOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gZGl2OworfQorCitzdGF0aWMgaW50IF9jbGtfcGVyaXBoX2FwbV9zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCXUzMiByZWcsIG11eDsKKwlpbnQgaSA9IDA7CisKKwltdXggPSBfZ2V0X211eChwYXJlbnQsICZwbGwxX3N3X2NsaywgJnBsbDNfc3dfY2xrLCAmbHBfYXBtX2NsaywgTlVMTCk7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NCQ01SKSAmIH5NWENfQ0NNX0NCQ01SX1BFUklQSF9DTEtfU0VMX01BU0s7CisJcmVnIHw9IG11eCA8PCBNWENfQ0NNX0NCQ01SX1BFUklQSF9DTEtfU0VMX09GRlNFVDsKKwlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NCQ01SKTsKKworCS8qIFdhaXQgZm9yIGxvY2sgKi8KKwlkbyB7CisJCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0RISVBSKTsKKwkJaWYgKCEocmVnICYgIE1YQ19DQ01fQ0RISVBSX1BFUklQSF9DTEtfU0VMX0JVU1kpKQorCQkJYnJlYWs7CisKKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKCsraSA8IE1BWF9EUExMX1dBSVRfVFJJRVMpOworCisJaWYgKGkgPT0gTUFYX0RQTExfV0FJVF9UUklFUykgeworCQlwcl9lcnIoIk1YNTogU2V0IHBhcmVudCBmb3IgcGVyaXBoX2FwbSBjbG9jayBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfY2xrX21haW5fYnVzX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCit7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0JDRFIpOworCisJaWYgKHBhcmVudCA9PSAmcGxsMl9zd19jbGspCisJCXJlZyAmPSB+TVhDX0NDTV9DQkNEUl9QRVJJUEhfQ0xLX1NFTDsKKwllbHNlIGlmIChwYXJlbnQgPT0gJnBlcmlwaF9hcG1fY2xrKQorCQlyZWcgfD0gTVhDX0NDTV9DQkNEUl9QRVJJUEhfQ0xLX1NFTDsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCisJX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DQkNEUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgbWFpbl9idXNfY2xrID0geworCS5wYXJlbnQgPSAmcGxsMl9zd19jbGssCisJLnNldF9wYXJlbnQgPSBfY2xrX21haW5fYnVzX3NldF9wYXJlbnQsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfYWhiX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVnLCBkaXY7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0JDRFIpOworCWRpdiA9ICgocmVnICYgTVhDX0NDTV9DQkNEUl9BSEJfUE9ERl9NQVNLKSA+PgorCSAgICAgICBNWENfQ0NNX0NCQ0RSX0FIQl9QT0RGX09GRlNFVCkgKyAxOworCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdjsKK30KKworCitzdGF0aWMgaW50IF9jbGtfYWhiX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiByZWcsIGRpdjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCWludCBpID0gMDsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKwlpZiAoZGl2ID4gOCB8fCBkaXYgPCAxIHx8ICgocGFyZW50X3JhdGUgLyBkaXYpICE9IHJhdGUpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0JDRFIpOworCXJlZyAmPSB+TVhDX0NDTV9DQkNEUl9BSEJfUE9ERl9NQVNLOworCXJlZyB8PSAoZGl2IC0gMSkgPDwgTVhDX0NDTV9DQkNEUl9BSEJfUE9ERl9PRkZTRVQ7CisJX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DQkNEUik7CisKKwkvKiBXYWl0IGZvciBsb2NrICovCisJZG8geworCQlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NESElQUik7CisJCWlmICghKHJlZyAmIE1YQ19DQ01fQ0RISVBSX0FIQl9QT0RGX0JVU1kpKQorCQkJYnJlYWs7CisKKwkJdWRlbGF5KDEpOworCX0gd2hpbGUgKCsraSA8IE1BWF9EUExMX1dBSVRfVFJJRVMpOworCisJaWYgKGkgPT0gTUFYX0RQTExfV0FJVF9UUklFUykgeworCQlwcl9lcnIoIk1YNTogY2xrX2FoYl9zZXRfcmF0ZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX2Nsa19haGJfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssCisJCQkJCQl1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIGRpdjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOworCWlmIChkaXYgPiA4KQorCQlkaXYgPSA4OworCWVsc2UgaWYgKGRpdiA9PSAwKQorCQlkaXYrKzsKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyBkaXY7Cit9CisKKworc3RhdGljIGludCBfY2xrX21heF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWc7CisKKwlfY2xrX2NjZ3JfZW5hYmxlKGNsayk7CisKKwkvKiBIYW5kc2hha2Ugd2l0aCBNQVggd2hlbiBMUE0gaXMgZW50ZXJlZC4gKi8KKwlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NMUENSKTsKKwlyZWcgJj0gfk1YQ19DQ01fQ0xQQ1JfQllQQVNTX01BWF9MUE1fSFM7CisJX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DTFBDUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX2Nsa19tYXhfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZzsKKworCV9jbGtfY2Nncl9kaXNhYmxlX2lud2FpdChjbGspOworCisJLyogTm8gSGFuZHNoYWtlIHdpdGggTUFYIHdoZW4gTFBNIGlzIGVudGVyZWQgYXMgaXRzIGRpc2FibGVkLiAqLworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0xQQ1IpOworCXJlZyB8PSBNWENfQ0NNX0NMUENSX0JZUEFTU19NQVhfTFBNX0hTOworCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ0xQQ1IpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfaXBnX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVnLCBkaXY7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKE1YQ19DQ01fQ0JDRFIpOworCWRpdiA9ICgocmVnICYgTVhDX0NDTV9DQkNEUl9JUEdfUE9ERl9NQVNLKSA+PgorCSAgICAgICBNWENfQ0NNX0NCQ0RSX0lQR19QT0RGX09GRlNFVCkgKyAxOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gZGl2OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfaXBnX3Blcl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdTMyIHJlZywgcHJlZGl2MSwgcHJlZGl2MiwgcG9kZjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJaWYgKGNsay0+cGFyZW50ID09ICZtYWluX2J1c19jbGsgfHwgY2xrLT5wYXJlbnQgPT0gJmxwX2FwbV9jbGspIHsKKwkJLyogdGhlIG1haW5fYnVzX2NsayBpcyB0aGUgb25lIGJlZm9yZSB0aGUgRFZGUyBlbmdpbmUgKi8KKwkJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQkNEUik7CisJCXByZWRpdjEgPSAoKHJlZyAmIE1YQ19DQ01fQ0JDRFJfUEVSQ0xLX1BSRUQxX01BU0spID4+CisJCQkgICBNWENfQ0NNX0NCQ0RSX1BFUkNMS19QUkVEMV9PRkZTRVQpICsgMTsKKwkJcHJlZGl2MiA9ICgocmVnICYgTVhDX0NDTV9DQkNEUl9QRVJDTEtfUFJFRDJfTUFTSykgPj4KKwkJCSAgIE1YQ19DQ01fQ0JDRFJfUEVSQ0xLX1BSRUQyX09GRlNFVCkgKyAxOworCQlwb2RmID0gKChyZWcgJiBNWENfQ0NNX0NCQ0RSX1BFUkNMS19QT0RGX01BU0spID4+CisJCQlNWENfQ0NNX0NCQ0RSX1BFUkNMS19QT0RGX09GRlNFVCkgKyAxOworCQlyZXR1cm4gcGFyZW50X3JhdGUgLyAocHJlZGl2MSAqIHByZWRpdjIgKiBwb2RmKTsKKwl9IGVsc2UgaWYgKGNsay0+cGFyZW50ID09ICZpcGdfY2xrKQorCQlyZXR1cm4gcGFyZW50X3JhdGU7CisJZWxzZQorCQlCVUcoKTsKK30KKworc3RhdGljIGludCBfY2xrX2lwZ19wZXJfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwl1MzIgcmVnOworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQkNNUik7CisKKwlyZWcgJj0gfk1YQ19DQ01fQ0JDTVJfUEVSQ0xLX0xQX0FQTV9DTEtfU0VMOworCXJlZyAmPSB+TVhDX0NDTV9DQkNNUl9QRVJDTEtfSVBHX0NMS19TRUw7CisKKwlpZiAocGFyZW50ID09ICZpcGdfY2xrKQorCQlyZWcgfD0gTVhDX0NDTV9DQkNNUl9QRVJDTEtfSVBHX0NMS19TRUw7CisJZWxzZSBpZiAocGFyZW50ID09ICZscF9hcG1fY2xrKQorCQlyZWcgfD0gTVhDX0NDTV9DQkNNUl9QRVJDTEtfTFBfQVBNX0NMS19TRUw7CisJZWxzZSBpZiAocGFyZW50ICE9ICZtYWluX2J1c19jbGspCisJCXJldHVybiAtRUlOVkFMOworCisJX19yYXdfd3JpdGVsKHJlZywgTVhDX0NDTV9DQkNNUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3VhcnRfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiByZWcsIHByZWRpdiwgcG9kZjsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCisJcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DU0NEUjEpOworCXByZWRpdiA9ICgocmVnICYgTVhDX0NDTV9DU0NEUjFfVUFSVF9DTEtfUFJFRF9NQVNLKSA+PgorCQkgIE1YQ19DQ01fQ1NDRFIxX1VBUlRfQ0xLX1BSRURfT0ZGU0VUKSArIDE7CisJcG9kZiA9ICgocmVnICYgTVhDX0NDTV9DU0NEUjFfVUFSVF9DTEtfUE9ERl9NQVNLKSA+PgorCQlNWENfQ0NNX0NTQ0RSMV9VQVJUX0NMS19QT0RGX09GRlNFVCkgKyAxOworCisJcmV0dXJuIHBhcmVudF9yYXRlIC8gKHByZWRpdiAqIHBvZGYpOworfQorCitzdGF0aWMgaW50IF9jbGtfdWFydF9zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCXUzMiByZWcsIG11eDsKKworCW11eCA9IF9nZXRfbXV4KHBhcmVudCwgJnBsbDFfc3dfY2xrLCAmcGxsMl9zd19jbGssICZwbGwzX3N3X2NsaywKKwkJICAgICAgICZscF9hcG1fY2xrKTsKKwlyZWcgPSBfX3Jhd19yZWFkbChNWENfQ0NNX0NTQ01SMSkgJiB+TVhDX0NDTV9DU0NNUjFfVUFSVF9DTEtfU0VMX01BU0s7CisJcmVnIHw9IG11eCA8PCBNWENfQ0NNX0NTQ01SMV9VQVJUX0NMS19TRUxfT0ZGU0VUOworCV9fcmF3X3dyaXRlbChyZWcsIE1YQ19DQ01fQ1NDTVIxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfaGlnaF9yZWZlcmVuY2VfY2xvY2tfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGV4dGVybmFsX2hpZ2hfcmVmZXJlbmNlOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfbG93X3JlZmVyZW5jZV9jbG9ja19yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gZXh0ZXJuYWxfbG93X3JlZmVyZW5jZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X29zY2lsbGF0b3JfcmVmZXJlbmNlX2Nsb2NrX3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBvc2NpbGxhdG9yX3JlZmVyZW5jZTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2NraWgyX3JlZmVyZW5jZV9jbG9ja19yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2tpaDJfcmVmZXJlbmNlOworfQorCisvKiBFeHRlcm5hbCBoaWdoIGZyZXF1ZW5jeSBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgY2tpaF9jbGsgPSB7CisJLmdldF9yYXRlID0gZ2V0X2hpZ2hfcmVmZXJlbmNlX2Nsb2NrX3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBja2loMl9jbGsgPSB7CisJLmdldF9yYXRlID0gZ2V0X2NraWgyX3JlZmVyZW5jZV9jbG9ja19yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgb3NjX2NsayA9IHsKKwkuZ2V0X3JhdGUgPSBnZXRfb3NjaWxsYXRvcl9yZWZlcmVuY2VfY2xvY2tfcmF0ZSwKK307CisKKy8qIEV4dGVybmFsIGxvdyBmcmVxdWVuY3kgKDMya0h6KSBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgY2tpbF9jbGsgPSB7CisJLmdldF9yYXRlID0gZ2V0X2xvd19yZWZlcmVuY2VfY2xvY2tfcmF0ZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbDFfbWFpbl9jbGsgPSB7CisJLnBhcmVudCA9ICZvc2NfY2xrLAorCS5nZXRfcmF0ZSA9IGNsa19wbGxfZ2V0X3JhdGUsCisJLmVuYWJsZSA9IF9jbGtfcGxsX2VuYWJsZSwKKwkuZGlzYWJsZSA9IF9jbGtfcGxsX2Rpc2FibGUsCit9OworCisvKiBDbG9jayB0cmVlIGJsb2NrIGRpYWdyYW0gKFdJUCk6CisgKiAJQ0NNOiBDbG9jayBDb250cm9sbGVyIE1vZHVsZQorICoKKyAqIFBMTCBvdXRwdXQgLT4gfAorICogICAgICAgICAgICAgICB8IENDTSBTd2l0Y2hlciAtPiBDQ01fQ0xLX1JPT1RfR0VOIC0+CisgKiBQTEwgYnlwYXNzIC0+IHwKKyAqCisgKi8KKworLyogUExMMSBTVyBzdXBwbGllcyB0byBBUk0gY29yZSAqLworc3RhdGljIHN0cnVjdCBjbGsgcGxsMV9zd19jbGsgPSB7CisJLnBhcmVudCA9ICZwbGwxX21haW5fY2xrLAorCS5zZXRfcGFyZW50ID0gX2Nsa19wbGwxX3N3X3NldF9wYXJlbnQsCisJLmdldF9yYXRlID0gY2xrX3BsbDFfc3dfZ2V0X3JhdGUsCit9OworCisvKiBQTEwyIFNXIHN1cHBsaWVzIHRvIEFYSS9BSEIvSVAgYnVzZXMgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHBsbDJfc3dfY2xrID0geworCS5wYXJlbnQgPSAmb3NjX2NsaywKKwkuZ2V0X3JhdGUgPSBjbGtfcGxsX2dldF9yYXRlLAorCS5zZXRfcmF0ZSA9IF9jbGtfcGxsX3NldF9yYXRlLAorCS5zZXRfcGFyZW50ID0gX2Nsa19wbGwyX3N3X3NldF9wYXJlbnQsCisJLmVuYWJsZSA9IF9jbGtfcGxsX2VuYWJsZSwKKwkuZGlzYWJsZSA9IF9jbGtfcGxsX2Rpc2FibGUsCit9OworCisvKiBQTEwzIFNXIHN1cHBsaWVzIHRvIHNlcmlhbCBjbG9ja3MgbGlrZSBVU0IsIFNTSSwgZXRjLiAqLworc3RhdGljIHN0cnVjdCBjbGsgcGxsM19zd19jbGsgPSB7CisJLnBhcmVudCA9ICZvc2NfY2xrLAorCS5zZXRfcmF0ZSA9IF9jbGtfcGxsX3NldF9yYXRlLAorCS5nZXRfcmF0ZSA9IGNsa19wbGxfZ2V0X3JhdGUsCisJLmVuYWJsZSA9IF9jbGtfcGxsX2VuYWJsZSwKKwkuZGlzYWJsZSA9IF9jbGtfcGxsX2Rpc2FibGUsCit9OworCisvKiBMb3ctcG93ZXIgQXVkaW8gUGxheWJhY2sgTW9kZSBjbG9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgbHBfYXBtX2NsayA9IHsKKwkucGFyZW50ID0gJm9zY19jbGssCisJLnNldF9wYXJlbnQgPSBfY2xrX2xwX2FwbV9zZXRfcGFyZW50LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGVyaXBoX2FwbV9jbGsgPSB7CisJLnBhcmVudCA9ICZwbGwxX3N3X2NsaywKKwkuc2V0X3BhcmVudCA9IF9jbGtfcGVyaXBoX2FwbV9zZXRfcGFyZW50LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY3B1X2NsayA9IHsKKwkucGFyZW50ID0gJnBsbDFfc3dfY2xrLAorCS5nZXRfcmF0ZSA9IGNsa19hcm1fZ2V0X3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhaGJfY2xrID0geworCS5wYXJlbnQgPSAmbWFpbl9idXNfY2xrLAorCS5nZXRfcmF0ZSA9IGNsa19haGJfZ2V0X3JhdGUsCisJLnNldF9yYXRlID0gX2Nsa19haGJfc2V0X3JhdGUsCisJLnJvdW5kX3JhdGUgPSBfY2xrX2FoYl9yb3VuZF9yYXRlLAorfTsKKworLyogTWFpbiBJUCBpbnRlcmZhY2UgY2xvY2sgZm9yIGFjY2VzcyB0byByZWdpc3RlcnMgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGlwZ19jbGsgPSB7CisJLnBhcmVudCA9ICZhaGJfY2xrLAorCS5nZXRfcmF0ZSA9IGNsa19pcGdfZ2V0X3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpcGdfcGVyY2xrID0geworCS5wYXJlbnQgPSAmbHBfYXBtX2NsaywKKwkuZ2V0X3JhdGUgPSBjbGtfaXBnX3Blcl9nZXRfcmF0ZSwKKwkuc2V0X3BhcmVudCA9IF9jbGtfaXBnX3Blcl9zZXRfcGFyZW50LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydF9yb290X2NsayA9IHsKKwkucGFyZW50ID0gJnBsbDJfc3dfY2xrLAorCS5nZXRfcmF0ZSA9IGNsa191YXJ0X2dldF9yYXRlLAorCS5zZXRfcGFyZW50ID0gX2Nsa191YXJ0X3NldF9wYXJlbnQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhaGJfbWF4X2NsayA9IHsKKwkucGFyZW50ID0gJmFoYl9jbGssCisJLmVuYWJsZV9yZWcgPSBNWENfQ0NNX0NDR1IwLAorCS5lbmFibGVfc2hpZnQgPSBNWENfQ0NNX0NDR1J4X0NHMTRfT0ZGU0VULAorCS5lbmFibGUgPSBfY2xrX21heF9lbmFibGUsCisJLmRpc2FibGUgPSBfY2xrX21heF9kaXNhYmxlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYWlwc190ejFfY2xrID0geworCS5wYXJlbnQgPSAmYWhiX2NsaywKKwkuc2Vjb25kYXJ5ID0gJmFoYl9tYXhfY2xrLAorCS5lbmFibGVfcmVnID0gTVhDX0NDTV9DQ0dSMCwKKwkuZW5hYmxlX3NoaWZ0ID0gTVhDX0NDTV9DQ0dSeF9DRzEyX09GRlNFVCwKKwkuZW5hYmxlID0gX2Nsa19jY2dyX2VuYWJsZSwKKwkuZGlzYWJsZSA9IF9jbGtfY2Nncl9kaXNhYmxlX2lud2FpdCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFpcHNfdHoyX2NsayA9IHsKKwkucGFyZW50ID0gJmFoYl9jbGssCisJLnNlY29uZGFyeSA9ICZhaGJfbWF4X2NsaywKKwkuZW5hYmxlX3JlZyA9IE1YQ19DQ01fQ0NHUjAsCisJLmVuYWJsZV9zaGlmdCA9IE1YQ19DQ01fQ0NHUnhfQ0cxM19PRkZTRVQsCisJLmVuYWJsZSA9IF9jbGtfY2Nncl9lbmFibGUsCisJLmRpc2FibGUgPSBfY2xrX2NjZ3JfZGlzYWJsZV9pbndhaXQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHRfMzJrX2NsayA9IHsKKwkuaWQgPSAwLAorCS5wYXJlbnQgPSAmY2tpbF9jbGssCit9OworCisjZGVmaW5lIERFRklORV9DTE9DSyhuYW1lLCBpLCBlciwgZXMsIGdyLCBzciwgcCwgcykJXAorCXN0YXRpYyBzdHJ1Y3QgY2xrIG5hbWUgPSB7CQkJXAorCQkuaWQJCT0gaSwJCQlcCisJCS5lbmFibGVfcmVnCT0gZXIsCQkJXAorCQkuZW5hYmxlX3NoaWZ0CT0gZXMsCQkJXAorCQkuZ2V0X3JhdGUJPSBnciwJCQlcCisJCS5zZXRfcmF0ZQk9IHNyLAkJCVwKKwkJLmVuYWJsZQkJPSBfY2xrX2NjZ3JfZW5hYmxlLAlcCisJCS5kaXNhYmxlCT0gX2Nsa19jY2dyX2Rpc2FibGUsCVwKKwkJLnBhcmVudAkJPSBwLAkJCVwKKwkJLnNlY29uZGFyeQk9IHMsCQkJXAorCX0KKworLyogREVGSU5FX0NMT0NLKG5hbWUsIGlkLCBlbmFibGVfcmVnLCBlbmFibGVfc2hpZnQsCisgICBnZXRfcmF0ZSwgc2V0X3JhdGUsIHBhcmVudCwgc2Vjb25kYXJ5KTsgKi8KKworLyogU2hhcmVkIHBlcmlwaGVyYWwgYnVzIGFyYml0ZXIgKi8KK0RFRklORV9DTE9DSyhzcGJhX2NsaywgMCwgTVhDX0NDTV9DQ0dSNSwgTVhDX0NDTV9DQ0dSeF9DRzBfT0ZGU0VULAorCU5VTEwsICBOVUxMLCAmaXBnX2NsaywgTlVMTCk7CisKKy8qIFVBUlQgKi8KK0RFRklORV9DTE9DSyh1YXJ0MV9jbGssIDAsIE1YQ19DQ01fQ0NHUjEsIE1YQ19DQ01fQ0NHUnhfQ0c0X09GRlNFVCwKKwlOVUxMLCAgTlVMTCwgJnVhcnRfcm9vdF9jbGssIE5VTEwpOworREVGSU5FX0NMT0NLKHVhcnQyX2NsaywgMSwgTVhDX0NDTV9DQ0dSMSwgTVhDX0NDTV9DQ0dSeF9DRzZfT0ZGU0VULAorCU5VTEwsICBOVUxMLCAmdWFydF9yb290X2NsaywgTlVMTCk7CitERUZJTkVfQ0xPQ0sodWFydDNfY2xrLCAyLCBNWENfQ0NNX0NDR1IxLCBNWENfQ0NNX0NDR1J4X0NHOF9PRkZTRVQsCisJTlVMTCwgIE5VTEwsICZ1YXJ0X3Jvb3RfY2xrLCBOVUxMKTsKK0RFRklORV9DTE9DSyh1YXJ0MV9pcGdfY2xrLCAwLCBNWENfQ0NNX0NDR1IxLCBNWENfQ0NNX0NDR1J4X0NHM19PRkZTRVQsCisJTlVMTCwgIE5VTEwsICZpcGdfY2xrLCAmYWlwc190ejFfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0Ml9pcGdfY2xrLCAxLCBNWENfQ0NNX0NDR1IxLCBNWENfQ0NNX0NDR1J4X0NHNV9PRkZTRVQsCisJTlVMTCwgIE5VTEwsICZpcGdfY2xrLCAmYWlwc190ejFfY2xrKTsKK0RFRklORV9DTE9DSyh1YXJ0M19pcGdfY2xrLCAyLCBNWENfQ0NNX0NDR1IxLCBNWENfQ0NNX0NDR1J4X0NHN19PRkZTRVQsCisJTlVMTCwgIE5VTEwsICZpcGdfY2xrLCAmc3BiYV9jbGspOworCisvKiBHUFQgKi8KK0RFRklORV9DTE9DSyhncHRfY2xrLCAwLCBNWENfQ0NNX0NDR1IyLCBNWENfQ0NNX0NDR1J4X0NHOV9PRkZTRVQsCisJTlVMTCwgIE5VTEwsICZpcGdfcGVyY2xrLCBOVUxMKTsKK0RFRklORV9DTE9DSyhncHRfaXBnX2NsaywgMCwgTVhDX0NDTV9DQ0dSMiwgTVhDX0NDTV9DQ0dSeF9DRzEwX09GRlNFVCwKKwlOVUxMLCAgTlVMTCwgJmlwZ19jbGssIE5VTEwpOworCisvKiBGRUMgKi8KK0RFRklORV9DTE9DSyhmZWNfY2xrLCAwLCBNWENfQ0NNX0NDR1IyLCBNWENfQ0NNX0NDR1J4X0NHMTJfT0ZGU0VULAorCU5VTEwsICBOVUxMLCAmaXBnX2NsaywgTlVMTCk7CisKKyNkZWZpbmUgX1JFR0lTVEVSX0NMT0NLKGQsIG4sIGMpIFwKKyAgICAgICB7IFwKKwkJLmRldl9pZCA9IGQsIFwKKwkJLmNvbl9pZCA9IG4sIFwKKwkJLmNsayA9ICZjLCAgIFwKKyAgICAgICB9LAorCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0geworCV9SRUdJU1RFUl9DTE9DSygiaW14LXVhcnQuMCIsIE5VTEwsIHVhcnQxX2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImlteC11YXJ0LjEiLCBOVUxMLCB1YXJ0Ml9jbGspCisJX1JFR0lTVEVSX0NMT0NLKCJpbXgtdWFydC4yIiwgTlVMTCwgdWFydDNfY2xrKQorCV9SRUdJU1RFUl9DTE9DSyhOVUxMLCAiZ3B0IiwgZ3B0X2NsaykKKwlfUkVHSVNURVJfQ0xPQ0soImZlYy4wIiwgTlVMTCwgZmVjX2NsaykKK307CisKK3N0YXRpYyB2b2lkIGNsa190cmVlX2luaXQodm9pZCkKK3sKKwl1MzIgcmVnOworCisJaXBnX3BlcmNsay5zZXRfcGFyZW50KCZpcGdfcGVyY2xrLCAmbHBfYXBtX2Nsayk7CisKKwkvKgorCSAqIEluaXRpYWxpc2UgdGhlIElQRyBQRVIgQ0xLIGRpdmlkZXJzIHRvIDMuIElQR19QRVJfQ0xLIHNob3VsZCBiZSBhdAorCSAqIDhNSHosIGl0cyBkZXJpdmVkIGZyb20gbHBfYXBtLgorCSAqCisJICogRklYTUU6IFZlcmlmeSBpZiB0cnVlIGZvciBhbGwgYm9hcmRzCisJICovCisJcmVnID0gX19yYXdfcmVhZGwoTVhDX0NDTV9DQkNEUik7CisJcmVnICY9IH5NWENfQ0NNX0NCQ0RSX1BFUkNMS19QUkVEMV9NQVNLOworCXJlZyAmPSB+TVhDX0NDTV9DQkNEUl9QRVJDTEtfUFJFRDJfTUFTSzsKKwlyZWcgJj0gfk1YQ19DQ01fQ0JDRFJfUEVSQ0xLX1BPREZfTUFTSzsKKwlyZWcgfD0gKDIgPDwgTVhDX0NDTV9DQkNEUl9QRVJDTEtfUFJFRDFfT0ZGU0VUKTsKKwlfX3Jhd193cml0ZWwocmVnLCBNWENfQ0NNX0NCQ0RSKTsKK30KKworaW50IF9faW5pdCBteDUxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgY2tpbCwgdW5zaWduZWQgbG9uZyBvc2MsCisJCQl1bnNpZ25lZCBsb25nIGNraWgxLCB1bnNpZ25lZCBsb25nIGNraWgyKQoreworCWludCBpOworCisJZXh0ZXJuYWxfbG93X3JlZmVyZW5jZSA9IGNraWw7CisJZXh0ZXJuYWxfaGlnaF9yZWZlcmVuY2UgPSBja2loMTsKKwlja2loMl9yZWZlcmVuY2UgPSBja2loMjsKKwlvc2NpbGxhdG9yX3JlZmVyZW5jZSA9IG9zYzsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGxvb2t1cHMpOyBpKyspCisJCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCisJY2xrX3RyZWVfaW5pdCgpOworCisJY2xrX2VuYWJsZSgmY3B1X2Nsayk7CisJY2xrX2VuYWJsZSgmbWFpbl9idXNfY2xrKTsKKworCS8qIFN5c3RlbSB0aW1lciAqLworCW14Y190aW1lcl9pbml0KCZncHRfY2xrLCBNWDUxX0lPX0FERFJFU1MoTVg1MV9HUFQxX0JBU0VfQUREUiksCisJCU1YNTFfTVhDX0lOVF9HUFQpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDUvY3B1LmMgYi9hcmNoL2FybS9tYWNoLW14NS9jcHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWM3NjlmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1teDUvY3B1LmMKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqCisgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICoKKyAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgQ1BVIGluaXRpYWxpemF0aW9uIGNvZGUuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RhdGljIGludCBfX2luaXQgcG9zdF9jcHVfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisJdm9pZCBfX2lvbWVtICpiYXNlOworCisJaWYgKCFjcHVfaXNfbXg1MSgpKQorCQlyZXR1cm4gMDsKKworCWJhc2UgPSBNWDUxX0lPX0FERFJFU1MoTVg1MV9BSVBTMV9CQVNFX0FERFIpOworCV9fcmF3X3dyaXRlbCgweDAsIGJhc2UgKyAweDQwKTsKKwlfX3Jhd193cml0ZWwoMHgwLCBiYXNlICsgMHg0NCk7CisJX19yYXdfd3JpdGVsKDB4MCwgYmFzZSArIDB4NDgpOworCV9fcmF3X3dyaXRlbCgweDAsIGJhc2UgKyAweDRDKTsKKwlyZWcgPSBfX3Jhd19yZWFkbChiYXNlICsgMHg1MCkgJiAweDAwRkZGRkZGOworCV9fcmF3X3dyaXRlbChyZWcsIGJhc2UgKyAweDUwKTsKKworCWJhc2UgPSBNWDUxX0lPX0FERFJFU1MoTVg1MV9BSVBTMl9CQVNFX0FERFIpOworCV9fcmF3X3dyaXRlbCgweDAsIGJhc2UgKyAweDQwKTsKKwlfX3Jhd193cml0ZWwoMHgwLCBiYXNlICsgMHg0NCk7CisJX19yYXdfd3JpdGVsKDB4MCwgYmFzZSArIDB4NDgpOworCV9fcmF3X3dyaXRlbCgweDAsIGJhc2UgKyAweDRDKTsKKwlyZWcgPSBfX3Jhd19yZWFkbChiYXNlICsgMHg1MCkgJiAweDAwRkZGRkZGOworCV9fcmF3X3dyaXRlbChyZWcsIGJhc2UgKyAweDUwKTsKKworCXJldHVybiAwOworfQorCitwb3N0Y29yZV9pbml0Y2FsbChwb3N0X2NwdV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbXg1L2NybV9yZWdzLmggYi9hcmNoL2FybS9tYWNoLW14NS9jcm1fcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NzZiOWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14NS9jcm1fcmVncy5oCkBAIC0wLDAgKzEsNTgzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICoKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAorICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX01YNTFfQ1JNX1JFR1NfSF9fCisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9NWDUxX0NSTV9SRUdTX0hfXworCisjZGVmaW5lIE1YNTFfQ0NNX0JBU0UJCU1YNTFfSU9fQUREUkVTUyhNWDUxX0NDTV9CQVNFX0FERFIpCisjZGVmaW5lIE1YNTFfRFBMTDFfQkFTRQkJTVg1MV9JT19BRERSRVNTKE1YNTFfUExMMV9CQVNFX0FERFIpCisjZGVmaW5lIE1YNTFfRFBMTDJfQkFTRQkJTVg1MV9JT19BRERSRVNTKE1YNTFfUExMMl9CQVNFX0FERFIpCisjZGVmaW5lIE1YNTFfRFBMTDNfQkFTRQkJTVg1MV9JT19BRERSRVNTKE1YNTFfUExMM19CQVNFX0FERFIpCisjZGVmaW5lIE1YNTFfQ09SVEVYQThfQkFTRQlNWDUxX0lPX0FERFJFU1MoTVg1MV9BUk1fQkFTRV9BRERSKQorI2RlZmluZSBNWDUxX0dQQ19CQVNFCQlNWDUxX0lPX0FERFJFU1MoTVg1MV9HUENfQkFTRV9BRERSKQorCisvKiBQTEwgUmVnaXN0ZXIgT2Zmc2V0cyAqLworI2RlZmluZSBNWENfUExMX0RQX0NUTAkJCTB4MDAKKyNkZWZpbmUgTVhDX1BMTF9EUF9DT05GSUcJCTB4MDQKKyNkZWZpbmUgTVhDX1BMTF9EUF9PUAkJCTB4MDgKKyNkZWZpbmUgTVhDX1BMTF9EUF9NRkQJCQkweDBDCisjZGVmaW5lIE1YQ19QTExfRFBfTUZOCQkJMHgxMAorI2RlZmluZSBNWENfUExMX0RQX01GTk1JTlVTCQkweDE0CisjZGVmaW5lIE1YQ19QTExfRFBfTUZOUExVUwkJMHgxOAorI2RlZmluZSBNWENfUExMX0RQX0hGU19PUAkJMHgxQworI2RlZmluZSBNWENfUExMX0RQX0hGU19NRkQJCTB4MjAKKyNkZWZpbmUgTVhDX1BMTF9EUF9IRlNfTUZOCQkweDI0CisjZGVmaW5lIE1YQ19QTExfRFBfTUZOX1RPR0MJCTB4MjgKKyNkZWZpbmUgTVhDX1BMTF9EUF9ERVNUQVQJCTB4MmMKKworLyogUExMIFJlZ2lzdGVyIEJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBNWENfUExMX0RQX0NUTF9NVUxfQ1RSTAkJMHgyMDAwCisjZGVmaW5lIE1YQ19QTExfRFBfQ1RMX0RQRENLMF8yX0VOCTB4MTAwMAorI2RlZmluZSBNWENfUExMX0RQX0NUTF9EUERDSzBfMl9PRkZTRVQJMTIKKyNkZWZpbmUgTVhDX1BMTF9EUF9DVExfQURFCQkweDgwMAorI2RlZmluZSBNWENfUExMX0RQX0NUTF9SRUZfQ0xLX0RJVgkweDQwMAorI2RlZmluZSBNWENfUExMX0RQX0NUTF9SRUZfQ0xLX1NFTF9NQVNLCSgzIDw8IDgpCisjZGVmaW5lIE1YQ19QTExfRFBfQ1RMX1JFRl9DTEtfU0VMX09GRlNFVAk4CisjZGVmaW5lIE1YQ19QTExfRFBfQ1RMX0hGU00JCTB4ODAKKyNkZWZpbmUgTVhDX1BMTF9EUF9DVExfUFJFCQkweDQwCisjZGVmaW5lIE1YQ19QTExfRFBfQ1RMX1VQRU4JCTB4MjAKKyNkZWZpbmUgTVhDX1BMTF9EUF9DVExfUlNUCQkweDEwCisjZGVmaW5lIE1YQ19QTExfRFBfQ1RMX1JDUAkJMHg4CisjZGVmaW5lIE1YQ19QTExfRFBfQ1RMX1BMTQkJMHg0CisjZGVmaW5lIE1YQ19QTExfRFBfQ1RMX0JSTTAJCTB4MgorI2RlZmluZSBNWENfUExMX0RQX0NUTF9MUkYJCTB4MQorCisjZGVmaW5lIE1YQ19QTExfRFBfQ09ORklHX0JJU1QJCTB4OAorI2RlZmluZSBNWENfUExMX0RQX0NPTkZJR19TSkNfQ0UJMHg0CisjZGVmaW5lIE1YQ19QTExfRFBfQ09ORklHX0FSRU4JCTB4MgorI2RlZmluZSBNWENfUExMX0RQX0NPTkZJR19MRFJFUQkJMHgxCisKKyNkZWZpbmUgTVhDX1BMTF9EUF9PUF9NRklfT0ZGU0VUCTQKKyNkZWZpbmUgTVhDX1BMTF9EUF9PUF9NRklfTUFTSwkJKDB4RiA8PCA0KQorI2RlZmluZSBNWENfUExMX0RQX09QX1BERl9PRkZTRVQJMAorI2RlZmluZSBNWENfUExMX0RQX09QX1BERl9NQVNLCQkweEYKKworI2RlZmluZSBNWENfUExMX0RQX01GRF9PRkZTRVQJCTAKKyNkZWZpbmUgTVhDX1BMTF9EUF9NRkRfTUFTSwkJMHgwN0ZGRkZGRgorCisjZGVmaW5lIE1YQ19QTExfRFBfTUZOX09GRlNFVAkJMHgwCisjZGVmaW5lIE1YQ19QTExfRFBfTUZOX01BU0sJCTB4MDdGRkZGRkYKKworI2RlZmluZSBNWENfUExMX0RQX01GTl9UT0dDX1RPR19ESVMJKDEgPDwgMTcpCisjZGVmaW5lIE1YQ19QTExfRFBfTUZOX1RPR0NfVE9HX0VOCSgxIDw8IDE2KQorI2RlZmluZSBNWENfUExMX0RQX01GTl9UT0dDX0NOVF9PRkZTRVQJMHgwCisjZGVmaW5lIE1YQ19QTExfRFBfTUZOX1RPR0NfQ05UX01BU0sJMHhGRkZGCisKKyNkZWZpbmUgTVhDX1BMTF9EUF9ERVNUQVRfVE9HX1NFTAkoMSA8PCAzMSkKKyNkZWZpbmUgTVhDX1BMTF9EUF9ERVNUQVRfTUZOCQkweDA3RkZGRkZGCisKKy8qIFJlZ2lzdGVyIGFkZHJlc3NlcyBvZiBDQ00qLworI2RlZmluZSBNWENfQ0NNX0NDUgkJKE1YNTFfQ0NNX0JBU0UgKyAweDAwKQorI2RlZmluZSBNWENfQ0NNX0NDRFIJCShNWDUxX0NDTV9CQVNFICsgMHgwNCkKKyNkZWZpbmUgTVhDX0NDTV9DU1IJCShNWDUxX0NDTV9CQVNFICsgMHgwOCkKKyNkZWZpbmUgTVhDX0NDTV9DQ1NSCQkoTVg1MV9DQ01fQkFTRSArIDB4MEMpCisjZGVmaW5lIE1YQ19DQ01fQ0FDUlIJCShNWDUxX0NDTV9CQVNFICsgMHgxMCkKKyNkZWZpbmUgTVhDX0NDTV9DQkNEUgkJKE1YNTFfQ0NNX0JBU0UgKyAweDE0KQorI2RlZmluZSBNWENfQ0NNX0NCQ01SCQkoTVg1MV9DQ01fQkFTRSArIDB4MTgpCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIxCQkoTVg1MV9DQ01fQkFTRSArIDB4MUMpCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIyCQkoTVg1MV9DQ01fQkFTRSArIDB4MjApCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIxCQkoTVg1MV9DQ01fQkFTRSArIDB4MjQpCisjZGVmaW5lIE1YQ19DQ01fQ1MxQ0RSCQkoTVg1MV9DQ01fQkFTRSArIDB4MjgpCisjZGVmaW5lIE1YQ19DQ01fQ1MyQ0RSCQkoTVg1MV9DQ01fQkFTRSArIDB4MkMpCisjZGVmaW5lIE1YQ19DQ01fQ0RDRFIJCShNWDUxX0NDTV9CQVNFICsgMHgzMCkKKyNkZWZpbmUgTVhDX0NDTV9DSFNDRFIJCShNWDUxX0NDTV9CQVNFICsgMHgzNCkKKyNkZWZpbmUgTVhDX0NDTV9DU0NEUjIJCShNWDUxX0NDTV9CQVNFICsgMHgzOCkKKyNkZWZpbmUgTVhDX0NDTV9DU0NEUjMJCShNWDUxX0NDTV9CQVNFICsgMHgzQykKKyNkZWZpbmUgTVhDX0NDTV9DU0NEUjQJCShNWDUxX0NDTV9CQVNFICsgMHg0MCkKKyNkZWZpbmUgTVhDX0NDTV9DV0RSCQkoTVg1MV9DQ01fQkFTRSArIDB4NDQpCisjZGVmaW5lIE1YQ19DQ01fQ0RISVBSCQkoTVg1MV9DQ01fQkFTRSArIDB4NDgpCisjZGVmaW5lIE1YQ19DQ01fQ0RDUgkJKE1YNTFfQ0NNX0JBU0UgKyAweDRDKQorI2RlZmluZSBNWENfQ0NNX0NUT1IJCShNWDUxX0NDTV9CQVNFICsgMHg1MCkKKyNkZWZpbmUgTVhDX0NDTV9DTFBDUgkJKE1YNTFfQ0NNX0JBU0UgKyAweDU0KQorI2RlZmluZSBNWENfQ0NNX0NJU1IJCShNWDUxX0NDTV9CQVNFICsgMHg1OCkKKyNkZWZpbmUgTVhDX0NDTV9DSU1SCQkoTVg1MV9DQ01fQkFTRSArIDB4NUMpCisjZGVmaW5lIE1YQ19DQ01fQ0NPU1IJCShNWDUxX0NDTV9CQVNFICsgMHg2MCkKKyNkZWZpbmUgTVhDX0NDTV9DR1BSCQkoTVg1MV9DQ01fQkFTRSArIDB4NjQpCisjZGVmaW5lIE1YQ19DQ01fQ0NHUjAJCShNWDUxX0NDTV9CQVNFICsgMHg2OCkKKyNkZWZpbmUgTVhDX0NDTV9DQ0dSMQkJKE1YNTFfQ0NNX0JBU0UgKyAweDZDKQorI2RlZmluZSBNWENfQ0NNX0NDR1IyCQkoTVg1MV9DQ01fQkFTRSArIDB4NzApCisjZGVmaW5lIE1YQ19DQ01fQ0NHUjMJCShNWDUxX0NDTV9CQVNFICsgMHg3NCkKKyNkZWZpbmUgTVhDX0NDTV9DQ0dSNAkJKE1YNTFfQ0NNX0JBU0UgKyAweDc4KQorI2RlZmluZSBNWENfQ0NNX0NDR1I1CQkoTVg1MV9DQ01fQkFTRSArIDB4N0MpCisjZGVmaW5lIE1YQ19DQ01fQ0NHUjYJCShNWDUxX0NDTV9CQVNFICsgMHg4MCkKKyNkZWZpbmUgTVhDX0NDTV9DTUVPUgkJKE1YNTFfQ0NNX0JBU0UgKyAweDg0KQorCisvKiBEZWZpbmUgdGhlIGJpdHMgaW4gcmVnaXN0ZXIgQ0NSICovCisjZGVmaW5lIE1YQ19DQ01fQ0NSX0NPU0NfRU4JCSgxIDw8IDEyKQorI2RlZmluZSBNWENfQ0NNX0NDUl9GUE1fTVVMVF9NQVNLCSgxIDw8IDExKQorI2RlZmluZSBNWENfQ0NNX0NDUl9DQU1QMl9FTgkJKDEgPDwgMTApCisjZGVmaW5lIE1YQ19DQ01fQ0NSX0NBTVAxX0VOCQkoMSA8PCA5KQorI2RlZmluZSBNWENfQ0NNX0NDUl9GUE1fRU4JCSgxIDw8IDgpCisjZGVmaW5lIE1YQ19DQ01fQ0NSX09TQ05UX09GRlNFVAkoMCkKKyNkZWZpbmUgTVhDX0NDTV9DQ1JfT1NDTlRfTUFTSwkoMHhGRikKKworLyogRGVmaW5lIHRoZSBiaXRzIGluIHJlZ2lzdGVyIENDRFIgKi8KKyNkZWZpbmUgTVhDX0NDTV9DQ0RSX0hTQ19IU19NQVNLCSgweDEgPDwgMTgpCisjZGVmaW5lIE1YQ19DQ01fQ0NEUl9JUFVfSFNfTUFTSwkoMHgxIDw8IDE3KQorI2RlZmluZSBNWENfQ0NNX0NDRFJfRU1JX0hTX01BU0sJKDB4MSA8PCAxNikKKworLyogRGVmaW5lIHRoZSBiaXRzIGluIHJlZ2lzdGVyIENTUiAqLworI2RlZmluZSBNWENfQ0NNX0NTUl9DT1NSX1JFQURZCSgxIDw8IDUpCisjZGVmaW5lIE1YQ19DQ01fQ1NSX0xWU19WQUxVRQkoMSA8PCA0KQorI2RlZmluZSBNWENfQ0NNX0NTUl9DQU1QMl9SRUFEWQkoMSA8PCAzKQorI2RlZmluZSBNWENfQ0NNX0NTUl9DQU1QMV9SRUFEWQkoMSA8PCAyKQorI2RlZmluZSBNWENfQ0NNX0NTUl9GUE1fUkVBRFkJKDEgPDwgMSkKKyNkZWZpbmUgTVhDX0NDTV9DU1JfUkVGX0VOX0IJKDEgPDwgMCkKKworLyogRGVmaW5lIHRoZSBiaXRzIGluIHJlZ2lzdGVyIENDU1IgKi8KKyNkZWZpbmUgTVhDX0NDTV9DQ1NSX0xQX0FQTV9TRUwJCSgweDEgPDwgOSkKKyNkZWZpbmUgTVhDX0NDTV9DQ1NSX1NURVBfU0VMX09GRlNFVAkoNykKKyNkZWZpbmUgTVhDX0NDTV9DQ1NSX1NURVBfU0VMX01BU0sJKDB4MyA8PCA3KQorI2RlZmluZSBNWENfQ0NNX0NDU1JfU1RFUF9TRUxfTFBfQVBNCSAgIDAKKyNkZWZpbmUgTVhDX0NDTV9DQ1NSX1NURVBfU0VMX1BMTDFfQllQQVNTICAxIC8qIE9ubHkgd2hlbiBKVEFHIGNvbm5lY3RlZD8gKi8KKyNkZWZpbmUgTVhDX0NDTV9DQ1NSX1NURVBfU0VMX1BMTDJfRElWSURFRCAyCisjZGVmaW5lIE1YQ19DQ01fQ0NTUl9TVEVQX1NFTF9QTEwzX0RJVklERUQgMworI2RlZmluZSBNWENfQ0NNX0NDU1JfUExMMl9QT0RGX09GRlNFVAkoNSkKKyNkZWZpbmUgTVhDX0NDTV9DQ1NSX1BMTDJfUE9ERl9NQVNLCSgweDMgPDwgNSkKKyNkZWZpbmUgTVhDX0NDTV9DQ1NSX1BMTDNfUE9ERl9PRkZTRVQJKDMpCisjZGVmaW5lIE1YQ19DQ01fQ0NTUl9QTEwzX1BPREZfTUFTSwkoMHgzIDw8IDMpCisjZGVmaW5lIE1YQ19DQ01fQ0NTUl9QTEwxX1NXX0NMS19TRUwJKDEgPDwgMikgLyogMDogcGxsMV9tYWluX2NsaywKKwkJCQkJCSAgICAxOiBzdGVwX2NsayAqLworI2RlZmluZSBNWENfQ0NNX0NDU1JfUExMMl9TV19DTEtfU0VMCSgxIDw8IDEpCisjZGVmaW5lIE1YQ19DQ01fQ0NTUl9QTEwzX1NXX0NMS19TRUwJKDEgPDwgMCkKKworLyogRGVmaW5lIHRoZSBiaXRzIGluIHJlZ2lzdGVyIENBQ1JSICovCisjZGVmaW5lIE1YQ19DQ01fQ0FDUlJfQVJNX1BPREZfT0ZGU0VUCSgwKQorI2RlZmluZSBNWENfQ0NNX0NBQ1JSX0FSTV9QT0RGX01BU0sJKDB4NykKKworLyogRGVmaW5lIHRoZSBiaXRzIGluIHJlZ2lzdGVyIENCQ0RSICovCisjZGVmaW5lIE1YQ19DQ01fQ0JDRFJfRU1JX0NMS19TRUwJCSgweDEgPDwgMjYpCisjZGVmaW5lIE1YQ19DQ01fQ0JDRFJfUEVSSVBIX0NMS19TRUwJCSgweDEgPDwgMjUpCisjZGVmaW5lIE1YQ19DQ01fQ0JDRFJfRERSX0hGX1NFTF9PRkZTRVQJCSgzMCkKKyNkZWZpbmUgTVhDX0NDTV9DQkNEUl9ERFJfSEZfU0VMCQkoMHgxIDw8IDMwKQorI2RlZmluZSBNWENfQ0NNX0NCQ0RSX0REUl9QT0RGX09GRlNFVAkJKDI3KQorI2RlZmluZSBNWENfQ0NNX0NCQ0RSX0REUl9QT0RGX01BU0sJCSgweDcgPDwgMjcpCisjZGVmaW5lIE1YQ19DQ01fQ0JDRFJfRU1JX1BPREZfT0ZGU0VUCQkoMjIpCisjZGVmaW5lIE1YQ19DQ01fQ0JDRFJfRU1JX1BPREZfTUFTSwkJKDB4NyA8PCAyMikKKyNkZWZpbmUgTVhDX0NDTV9DQkNEUl9BWElfQl9QT0RGX09GRlNFVAkJKDE5KQorI2RlZmluZSBNWENfQ0NNX0NCQ0RSX0FYSV9CX1BPREZfTUFTSwkJKDB4NyA8PCAxOSkKKyNkZWZpbmUgTVhDX0NDTV9DQkNEUl9BWElfQV9QT0RGX09GRlNFVAkJKDE2KQorI2RlZmluZSBNWENfQ0NNX0NCQ0RSX0FYSV9BX1BPREZfTUFTSwkJKDB4NyA8PCAxNikKKyNkZWZpbmUgTVhDX0NDTV9DQkNEUl9ORkNfUE9ERl9PRkZTRVQJCSgxMykKKyNkZWZpbmUgTVhDX0NDTV9DQkNEUl9ORkNfUE9ERl9NQVNLCQkoMHg3IDw8IDEzKQorI2RlZmluZSBNWENfQ0NNX0NCQ0RSX0FIQl9QT0RGX09GRlNFVAkJKDEwKQorI2RlZmluZSBNWENfQ0NNX0NCQ0RSX0FIQl9QT0RGX01BU0sJCSgweDcgPDwgMTApCisjZGVmaW5lIE1YQ19DQ01fQ0JDRFJfSVBHX1BPREZfT0ZGU0VUCQkoOCkKKyNkZWZpbmUgTVhDX0NDTV9DQkNEUl9JUEdfUE9ERl9NQVNLCQkoMHgzIDw8IDgpCisjZGVmaW5lIE1YQ19DQ01fQ0JDRFJfUEVSQ0xLX1BSRUQxX09GRlNFVAkoNikKKyNkZWZpbmUgTVhDX0NDTV9DQkNEUl9QRVJDTEtfUFJFRDFfTUFTSwkJKDB4MyA8PCA2KQorI2RlZmluZSBNWENfQ0NNX0NCQ0RSX1BFUkNMS19QUkVEMl9PRkZTRVQJKDMpCisjZGVmaW5lIE1YQ19DQ01fQ0JDRFJfUEVSQ0xLX1BSRUQyX01BU0sJCSgweDcgPDwgMykKKyNkZWZpbmUgTVhDX0NDTV9DQkNEUl9QRVJDTEtfUE9ERl9PRkZTRVQJKDApCisjZGVmaW5lIE1YQ19DQ01fQ0JDRFJfUEVSQ0xLX1BPREZfTUFTSwkJKDB4NykKKworLyogRGVmaW5lIHRoZSBiaXRzIGluIHJlZ2lzdGVyIENCQ01SICovCisjZGVmaW5lIE1YQ19DQ01fQ0JDTVJfVlBVX0FYSV9DTEtfU0VMX09GRlNFVAkoMTQpCisjZGVmaW5lIE1YQ19DQ01fQ0JDTVJfVlBVX0FYSV9DTEtfU0VMX01BU0sJKDB4MyA8PCAxNCkKKyNkZWZpbmUgTVhDX0NDTV9DQkNNUl9QRVJJUEhfQ0xLX1NFTF9PRkZTRVQJKDEyKQorI2RlZmluZSBNWENfQ0NNX0NCQ01SX1BFUklQSF9DTEtfU0VMX01BU0sJKDB4MyA8PCAxMikKKyNkZWZpbmUgTVhDX0NDTV9DQkNNUl9ERFJfQ0xLX1NFTF9PRkZTRVQJKDEwKQorI2RlZmluZSBNWENfQ0NNX0NCQ01SX0REUl9DTEtfU0VMX01BU0sJCSgweDMgPDwgMTApCisjZGVmaW5lIE1YQ19DQ01fQ0JDTVJfQVJNX0FYSV9DTEtfU0VMX09GRlNFVAkoOCkKKyNkZWZpbmUgTVhDX0NDTV9DQkNNUl9BUk1fQVhJX0NMS19TRUxfTUFTSwkoMHgzIDw8IDgpCisjZGVmaW5lIE1YQ19DQ01fQ0JDTVJfSVBVX0hTUF9DTEtfU0VMX09GRlNFVAkoNikKKyNkZWZpbmUgTVhDX0NDTV9DQkNNUl9JUFVfSFNQX0NMS19TRUxfTUFTSwkoMHgzIDw8IDYpCisjZGVmaW5lIE1YQ19DQ01fQ0JDTVJfR1BVX0NMS19TRUxfT0ZGU0VUCSg0KQorI2RlZmluZSBNWENfQ0NNX0NCQ01SX0dQVV9DTEtfU0VMX01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUgTVhDX0NDTV9DQkNNUl9HUFUyRF9DTEtfU0VMX09GRlNFVAkoMTQpCisjZGVmaW5lIE1YQ19DQ01fQ0JDTVJfR1BVMkRfQ0xLX1NFTF9NQVNLCSgweDMgPDwgMTQpCisjZGVmaW5lIE1YQ19DQ01fQ0JDTVJfUEVSQ0xLX0xQX0FQTV9DTEtfU0VMCSgweDEgPDwgMSkKKyNkZWZpbmUgTVhDX0NDTV9DQkNNUl9QRVJDTEtfSVBHX0NMS19TRUwJKDB4MSA8PCAwKQorCisvKiBEZWZpbmUgdGhlIGJpdHMgaW4gcmVnaXN0ZXIgQ1NDTVIxICovCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIxX1NTSV9FWFQyX0NMS19TRUxfT0ZGU0VUCQkoMzApCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIxX1NTSV9FWFQyX0NMS19TRUxfTUFTSwkJKDB4MyA8PCAzMCkKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjFfU1NJX0VYVDFfQ0xLX1NFTF9PRkZTRVQJCSgyOCkKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjFfU1NJX0VYVDFfQ0xLX1NFTF9NQVNLCQkoMHgzIDw8IDI4KQorI2RlZmluZSBNWENfQ0NNX0NTQ01SMV9VU0JfUEhZX0NMS19TRUxfT0ZGU0VUCQkoMjYpCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIxX1VTQl9QSFlfQ0xLX1NFTAkJCSgweDEgPDwgMjYpCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIxX1VBUlRfQ0xLX1NFTF9PRkZTRVQJCSgyNCkKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjFfVUFSVF9DTEtfU0VMX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIxX1VTQk9IM19DTEtfU0VMX09GRlNFVAkJKDIyKQorI2RlZmluZSBNWENfQ0NNX0NTQ01SMV9VU0JPSDNfQ0xLX1NFTF9NQVNLCQkoMHgzIDw8IDIyKQorI2RlZmluZSBNWENfQ0NNX0NTQ01SMV9FU0RIQzFfTVNIQzFfQ0xLX1NFTF9PRkZTRVQJKDIwKQorI2RlZmluZSBNWENfQ0NNX0NTQ01SMV9FU0RIQzFfTVNIQzFfQ0xLX1NFTF9NQVNLCSgweDMgPDwgMjApCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIxX0VTREhDM19DTEtfU0VMCQkJKDB4MSA8PCAxOSkKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjFfRVNESEM0X0NMS19TRUwJCQkoMHgxIDw8IDE4KQorI2RlZmluZSBNWENfQ0NNX0NTQ01SMV9FU0RIQzJfTVNIQzJfQ0xLX1NFTF9PRkZTRVQJKDE2KQorI2RlZmluZSBNWENfQ0NNX0NTQ01SMV9FU0RIQzJfTVNIQzJfQ0xLX1NFTF9NQVNLCSgweDMgPDwgMTYpCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIxX1NTSTFfQ0xLX1NFTF9PRkZTRVQJCSgxNCkKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjFfU1NJMV9DTEtfU0VMX01BU0sJCSgweDMgPDwgMTQpCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIxX1NTSTJfQ0xLX1NFTF9PRkZTRVQJCSgxMikKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjFfU1NJMl9DTEtfU0VMX01BU0sJCSgweDMgPDwgMTIpCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIxX1NTSTNfQ0xLX1NFTAkJCSgweDEgPDwgMTEpCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIxX1ZQVV9SQ0xLX1NFTAkJCSgweDEgPDwgMTApCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIxX1NTSV9BUE1fQ0xLX1NFTF9PRkZTRVQJCSg4KQorI2RlZmluZSBNWENfQ0NNX0NTQ01SMV9TU0lfQVBNX0NMS19TRUxfTUFTSwkJKDB4MyA8PCA4KQorI2RlZmluZSBNWENfQ0NNX0NTQ01SMV9UVkVfQ0xLX1NFTAkJCSgweDEgPDwgNykKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjFfVFZFX0VYVF9DTEtfU0VMCQkJKDB4MSA8PCA2KQorI2RlZmluZSBNWENfQ0NNX0NTQ01SMV9DU1BJX0NMS19TRUxfT0ZGU0VUCQkoNCkKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjFfQ1NQSV9DTEtfU0VMX01BU0sJCSgweDMgPDwgNCkKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjFfU1BESUZfQ0xLX1NFTF9PRkZTRVQJCSgyKQorI2RlZmluZSBNWENfQ0NNX0NTQ01SMV9TUERJRl9DTEtfU0VMX01BU0sJCSgweDMgPDwgMikKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjFfU1NJX0VYVDJfQ09NX0NMS19TRUwJCSgweDEgPDwgMSkKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjFfU1NJX0VYVDFfQ09NX0NMS19TRUwJCSgweDEpCisKKy8qIERlZmluZSB0aGUgYml0cyBpbiByZWdpc3RlciBDU0NNUjIgKi8KKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjJfRElfQ0xLX1NFTF9PRkZTRVQobikJCSgyNituKjMpCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIyX0RJX0NMS19TRUxfTUFTSyhuKQkJKDB4NyA8PCAoMjYrbiozKSkKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjJfQ1NJX01DTEsyX0NMS19TRUxfT0ZGU0VUCQkoMjQpCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIyX0NTSV9NQ0xLMl9DTEtfU0VMX01BU0sJCSgweDMgPDwgMjQpCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIyX0NTSV9NQ0xLMV9DTEtfU0VMX09GRlNFVAkJKDIyKQorI2RlZmluZSBNWENfQ0NNX0NTQ01SMl9DU0lfTUNMSzFfQ0xLX1NFTF9NQVNLCQkoMHgzIDw8IDIyKQorI2RlZmluZSBNWENfQ0NNX0NTQ01SMl9FU0NfQ0xLX1NFTF9PRkZTRVQJCSgyMCkKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjJfRVNDX0NMS19TRUxfTUFTSwkJCSgweDMgPDwgMjApCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIyX0hTQzJfQ0xLX1NFTF9PRkZTRVQJCSgxOCkKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjJfSFNDMl9DTEtfU0VMX01BU0sJCSgweDMgPDwgMTgpCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIyX0hTQzFfQ0xLX1NFTF9PRkZTRVQJCSgxNikKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjJfSFNDMV9DTEtfU0VMX01BU0sJCSgweDMgPDwgMTYpCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIyX0hTSTJDX0NMS19TRUxfT0ZGU0VUCQkoMTQpCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIyX0hTSTJDX0NMS19TRUxfTUFTSwkJKDB4MyA8PCAxNCkKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjJfRklSSV9DTEtfU0VMX09GRlNFVAkJKDEyKQorI2RlZmluZSBNWENfQ0NNX0NTQ01SMl9GSVJJX0NMS19TRUxfTUFTSwkJKDB4MyA8PCAxMikKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjJfU0lNX0NMS19TRUxfT0ZGU0VUCQkoMTApCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIyX1NJTV9DTEtfU0VMX01BU0sJCQkoMHgzIDw8IDEwKQorI2RlZmluZSBNWENfQ0NNX0NTQ01SMl9TTElNQlVTX0NPTQkJCSgweDEgPDwgOSkKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjJfU0xJTUJVU19DTEtfU0VMX09GRlNFVAkJKDYpCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIyX1NMSU1CVVNfQ0xLX1NFTF9NQVNLCQkoMHg3IDw8IDYpCisjZGVmaW5lIE1YQ19DQ01fQ1NDTVIyX1NQRElGMV9DT00JCQkoMSA8PCA1KQorI2RlZmluZSBNWENfQ0NNX0NTQ01SMl9TUERJRjBfQ09NCQkJKDEgPDwgNCkKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjJfU1BESUYxX0NMS19TRUxfT0ZGU0VUCQkoMikKKyNkZWZpbmUgTVhDX0NDTV9DU0NNUjJfU1BESUYxX0NMS19TRUxfTUFTSwkJKDB4MyA8PCAyKQorI2RlZmluZSBNWENfQ0NNX0NTQ01SMl9TUERJRjBfQ0xLX1NFTF9PRkZTRVQJCSgwKQorI2RlZmluZSBNWENfQ0NNX0NTQ01SMl9TUERJRjBfQ0xLX1NFTF9NQVNLCQkoMHgzKQorCisvKiBEZWZpbmUgdGhlIGJpdHMgaW4gcmVnaXN0ZXIgQ1NDRFIxICovCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIxX0VTREhDMl9NU0hDMl9DTEtfUFJFRF9PRkZTRVQJKDIyKQorI2RlZmluZSBNWENfQ0NNX0NTQ0RSMV9FU0RIQzJfTVNIQzJfQ0xLX1BSRURfTUFTSwkoMHg3IDw8IDIyKQorI2RlZmluZSBNWENfQ0NNX0NTQ0RSMV9FU0RIQzJfTVNIQzJfQ0xLX1BPREZfT0ZGU0VUCSgxOSkKKyNkZWZpbmUgTVhDX0NDTV9DU0NEUjFfRVNESEMyX01TSEMyX0NMS19QT0RGX01BU0sJKDB4NyA8PCAxOSkKKyNkZWZpbmUgTVhDX0NDTV9DU0NEUjFfRVNESEMxX01TSEMxX0NMS19QUkVEX09GRlNFVAkoMTYpCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIxX0VTREhDMV9NU0hDMV9DTEtfUFJFRF9NQVNLCSgweDcgPDwgMTYpCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIxX1BHQ19DTEtfUE9ERl9PRkZTRVQJCSgxNCkKKyNkZWZpbmUgTVhDX0NDTV9DU0NEUjFfUEdDX0NMS19QT0RGX01BU0sJCSgweDMgPDwgMTQpCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIxX0VTREhDMV9NU0hDMV9DTEtfUE9ERl9PRkZTRVQJKDExKQorI2RlZmluZSBNWENfQ0NNX0NTQ0RSMV9FU0RIQzFfTVNIQzFfQ0xLX1BPREZfTUFTSwkoMHg3IDw8IDExKQorI2RlZmluZSBNWENfQ0NNX0NTQ0RSMV9VU0JPSDNfQ0xLX1BSRURfT0ZGU0VUCQkoOCkKKyNkZWZpbmUgTVhDX0NDTV9DU0NEUjFfVVNCT0gzX0NMS19QUkVEX01BU0sJCSgweDcgPDwgOCkKKyNkZWZpbmUgTVhDX0NDTV9DU0NEUjFfVVNCT0gzX0NMS19QT0RGX09GRlNFVAkJKDYpCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIxX1VTQk9IM19DTEtfUE9ERl9NQVNLCQkoMHgzIDw8IDYpCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIxX1VBUlRfQ0xLX1BSRURfT0ZGU0VUCQkoMykKKyNkZWZpbmUgTVhDX0NDTV9DU0NEUjFfVUFSVF9DTEtfUFJFRF9NQVNLCQkoMHg3IDw8IDMpCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIxX1VBUlRfQ0xLX1BPREZfT0ZGU0VUCQkoMCkKKyNkZWZpbmUgTVhDX0NDTV9DU0NEUjFfVUFSVF9DTEtfUE9ERl9NQVNLCQkoMHg3KQorCisvKiBEZWZpbmUgdGhlIGJpdHMgaW4gcmVnaXN0ZXIgQ1MxQ0RSIGFuZCBDUzJDRFIgKi8KKyNkZWZpbmUgTVhDX0NDTV9DUzFDRFJfU1NJX0VYVDFfQ0xLX1BSRURfT0ZGU0VUCQkoMjIpCisjZGVmaW5lIE1YQ19DQ01fQ1MxQ0RSX1NTSV9FWFQxX0NMS19QUkVEX01BU0sJCSgweDcgPDwgMjIpCisjZGVmaW5lIE1YQ19DQ01fQ1MxQ0RSX1NTSV9FWFQxX0NMS19QT0RGX09GRlNFVAkJKDE2KQorI2RlZmluZSBNWENfQ0NNX0NTMUNEUl9TU0lfRVhUMV9DTEtfUE9ERl9NQVNLCQkoMHgzRiA8PCAxNikKKyNkZWZpbmUgTVhDX0NDTV9DUzFDRFJfU1NJMV9DTEtfUFJFRF9PRkZTRVQJCSg2KQorI2RlZmluZSBNWENfQ0NNX0NTMUNEUl9TU0kxX0NMS19QUkVEX01BU0sJCSgweDcgPDwgNikKKyNkZWZpbmUgTVhDX0NDTV9DUzFDRFJfU1NJMV9DTEtfUE9ERl9PRkZTRVQJCSgwKQorI2RlZmluZSBNWENfQ0NNX0NTMUNEUl9TU0kxX0NMS19QT0RGX01BU0sJCSgweDNGKQorCisjZGVmaW5lIE1YQ19DQ01fQ1MyQ0RSX1NTSV9FWFQyX0NMS19QUkVEX09GRlNFVAkJKDIyKQorI2RlZmluZSBNWENfQ0NNX0NTMkNEUl9TU0lfRVhUMl9DTEtfUFJFRF9NQVNLCQkoMHg3IDw8IDIyKQorI2RlZmluZSBNWENfQ0NNX0NTMkNEUl9TU0lfRVhUMl9DTEtfUE9ERl9PRkZTRVQJCSgxNikKKyNkZWZpbmUgTVhDX0NDTV9DUzJDRFJfU1NJX0VYVDJfQ0xLX1BPREZfTUFTSwkJKDB4M0YgPDwgMTYpCisjZGVmaW5lIE1YQ19DQ01fQ1MyQ0RSX1NTSTJfQ0xLX1BSRURfT0ZGU0VUCQkoNikKKyNkZWZpbmUgTVhDX0NDTV9DUzJDRFJfU1NJMl9DTEtfUFJFRF9NQVNLCQkoMHg3IDw8IDYpCisjZGVmaW5lIE1YQ19DQ01fQ1MyQ0RSX1NTSTJfQ0xLX1BPREZfT0ZGU0VUCQkoMCkKKyNkZWZpbmUgTVhDX0NDTV9DUzJDRFJfU1NJMl9DTEtfUE9ERl9NQVNLCQkoMHgzRikKKworLyogRGVmaW5lIHRoZSBiaXRzIGluIHJlZ2lzdGVyIENEQ0RSICovCisjZGVmaW5lIE1YQ19DQ01fQ0RDRFJfVFZFX0NMS19QUkVEX09GRlNFVAkJKDI4KQorI2RlZmluZSBNWENfQ0NNX0NEQ0RSX1RWRV9DTEtfUFJFRF9NQVNLCQkJKDB4NyA8PCAyOCkKKyNkZWZpbmUgTVhDX0NDTV9DRENEUl9TUERJRjBfQ0xLX1BSRURfT0ZGU0VUCQkoMjUpCisjZGVmaW5lIE1YQ19DQ01fQ0RDRFJfU1BESUYwX0NMS19QUkVEX01BU0sJCSgweDcgPDwgMjUpCisjZGVmaW5lIE1YQ19DQ01fQ0RDRFJfU1BESUYwX0NMS19QT0RGX09GRlNFVAkJKDE5KQorI2RlZmluZSBNWENfQ0NNX0NEQ0RSX1NQRElGMF9DTEtfUE9ERl9NQVNLCQkoMHgzRiA8PCAxOSkKKyNkZWZpbmUgTVhDX0NDTV9DRENEUl9TUERJRjFfQ0xLX1BSRURfT0ZGU0VUCQkoMTYpCisjZGVmaW5lIE1YQ19DQ01fQ0RDRFJfU1BESUYxX0NMS19QUkVEX01BU0sJCSgweDcgPDwgMTYpCisjZGVmaW5lIE1YQ19DQ01fQ0RDRFJfU1BESUYxX0NMS19QT0RGX09GRlNFVAkJKDkpCisjZGVmaW5lIE1YQ19DQ01fQ0RDRFJfU1BESUYxX0NMS19QT0RGX01BU0sJCSgweDNGIDw8IDkpCisjZGVmaW5lIE1YQ19DQ01fQ0RDRFJfRElfQ0xLX1BSRURfT0ZGU0VUCQkoNikKKyNkZWZpbmUgTVhDX0NDTV9DRENEUl9ESV9DTEtfUFJFRF9NQVNLCQkJKDB4NyA8PCA2KQorI2RlZmluZSBNWENfQ0NNX0NEQ0RSX1VTQl9QSFlfUFJFRF9PRkZTRVQJCSgzKQorI2RlZmluZSBNWENfQ0NNX0NEQ0RSX1VTQl9QSFlfUFJFRF9NQVNLCQkJKDB4NyA8PCAzKQorI2RlZmluZSBNWENfQ0NNX0NEQ0RSX1VTQl9QSFlfUE9ERl9PRkZTRVQJCSgwKQorI2RlZmluZSBNWENfQ0NNX0NEQ0RSX1VTQl9QSFlfUE9ERl9NQVNLCQkJKDB4NykKKworLyogRGVmaW5lIHRoZSBiaXRzIGluIHJlZ2lzdGVyIENIU0NDRFIgKi8KKyNkZWZpbmUgTVhDX0NDTV9DSFNDQ0RSX0VTQ19DTEtfUFJFRF9PRkZTRVQJCSgxMikKKyNkZWZpbmUgTVhDX0NDTV9DSFNDQ0RSX0VTQ19DTEtfUFJFRF9NQVNLCQkoMHg3IDw8IDEyKQorI2RlZmluZSBNWENfQ0NNX0NIU0NDRFJfRVNDX0NMS19QT0RGX09GRlNFVAkJKDYpCisjZGVmaW5lIE1YQ19DQ01fQ0hTQ0NEUl9FU0NfQ0xLX1BPREZfTUFTSwkJKDB4M0YgPDwgNikKKyNkZWZpbmUgTVhDX0NDTV9DSFNDQ0RSX0hTQzJfQ0xLX1BPREZfT0ZGU0VUCQkoMykKKyNkZWZpbmUgTVhDX0NDTV9DSFNDQ0RSX0hTQzJfQ0xLX1BPREZfTUFTSwkJKDB4NyA8PCAzKQorI2RlZmluZSBNWENfQ0NNX0NIU0NDRFJfSFNDMV9DTEtfUE9ERl9PRkZTRVQJCSgwKQorI2RlZmluZSBNWENfQ0NNX0NIU0NDRFJfSFNDMV9DTEtfUE9ERl9NQVNLCQkoMHg3KQorCisvKiBEZWZpbmUgdGhlIGJpdHMgaW4gcmVnaXN0ZXIgQ1NDRFIyICovCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIyX0NTUElfQ0xLX1BSRURfT0ZGU0VUCQkoMjUpCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIyX0NTUElfQ0xLX1BSRURfTUFTSwkJKDB4NyA8PCAyNSkKKyNkZWZpbmUgTVhDX0NDTV9DU0NEUjJfQ1NQSV9DTEtfUE9ERl9PRkZTRVQJCSgxOSkKKyNkZWZpbmUgTVhDX0NDTV9DU0NEUjJfQ1NQSV9DTEtfUE9ERl9NQVNLCQkoMHgzRiA8PCAxOSkKKyNkZWZpbmUgTVhDX0NDTV9DU0NEUjJfU0lNX0NMS19QUkVEX09GRlNFVAkJKDE2KQorI2RlZmluZSBNWENfQ0NNX0NTQ0RSMl9TSU1fQ0xLX1BSRURfTUFTSwkJKDB4NyA8PCAxNikKKyNkZWZpbmUgTVhDX0NDTV9DU0NEUjJfU0lNX0NMS19QT0RGX09GRlNFVAkJKDkpCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIyX1NJTV9DTEtfUE9ERl9NQVNLCQkoMHgzRiA8PCA5KQorI2RlZmluZSBNWENfQ0NNX0NTQ0RSMl9TTElNQlVTX0NMS19QUkVEX09GRlNFVAkJKDYpCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIyX1NMSU1CVVNfUFJFRF9NQVNLCQkoMHg3IDw8IDYpCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIyX1NMSU1CVVNfUE9ERl9PRkZTRVQJCSgwKQorI2RlZmluZSBNWENfQ0NNX0NTQ0RSMl9TTElNQlVTX1BPREZfTUFTSwkJKDB4M0YpCisKKy8qIERlZmluZSB0aGUgYml0cyBpbiByZWdpc3RlciBDU0NEUjMgKi8KKyNkZWZpbmUgTVhDX0NDTV9DU0NEUjNfSFNJMkNfQ0xLX1BSRURfT0ZGU0VUCQkoMTYpCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIzX0hTSTJDX0NMS19QUkVEX01BU0sJCSgweDcgPDwgMTYpCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIzX0hTSTJDX0NMS19QT0RGX09GRlNFVAkJKDkpCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIzX0hTSTJDX0NMS19QT0RGX01BU0sJCSgweDNGIDw8IDkpCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIzX0ZJUklfQ0xLX1BSRURfT0ZGU0VUCQkoNikKKyNkZWZpbmUgTVhDX0NDTV9DU0NEUjNfRklSSV9DTEtfUFJFRF9NQVNLCQkoMHg3IDw8IDYpCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFIzX0ZJUklfQ0xLX1BPREZfT0ZGU0VUCQkoMCkKKyNkZWZpbmUgTVhDX0NDTV9DU0NEUjNfRklSSV9DTEtfUE9ERl9NQVNLCQkoMHgzRikKKworLyogRGVmaW5lIHRoZSBiaXRzIGluIHJlZ2lzdGVyIENTQ0RSNCAqLworI2RlZmluZSBNWENfQ0NNX0NTQ0RSNF9DU0lfTUNMSzJfQ0xLX1BSRURfT0ZGU0VUCSgxNikKKyNkZWZpbmUgTVhDX0NDTV9DU0NEUjRfQ1NJX01DTEsyX0NMS19QUkVEX01BU0sJCSgweDcgPDwgMTYpCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFI0X0NTSV9NQ0xLMl9DTEtfUE9ERl9PRkZTRVQJKDkpCisjZGVmaW5lIE1YQ19DQ01fQ1NDRFI0X0NTSV9NQ0xLMl9DTEtfUE9ERl9NQVNLCQkoMHgzRiA8PCA5KQorI2RlZmluZSBNWENfQ0NNX0NTQ0RSNF9DU0lfTUNMSzFfQ0xLX1BSRURfT0ZGU0VUCSg2KQorI2RlZmluZSBNWENfQ0NNX0NTQ0RSNF9DU0lfTUNMSzFfQ0xLX1BSRURfTUFTSwkJKDB4NyA8PCA2KQorI2RlZmluZSBNWENfQ0NNX0NTQ0RSNF9DU0lfTUNMSzFfQ0xLX1BPREZfT0ZGU0VUCSgwKQorI2RlZmluZSBNWENfQ0NNX0NTQ0RSNF9DU0lfTUNMSzFfQ0xLX1BPREZfTUFTSwkJKDB4M0YpCisKKy8qIERlZmluZSB0aGUgYml0cyBpbiByZWdpc3RlciBDREhJUFIgKi8KKyNkZWZpbmUgTVhDX0NDTV9DREhJUFJfQVJNX1BPREZfQlVTWQkJCSgxIDw8IDE2KQorI2RlZmluZSBNWENfQ0NNX0NESElQUl9ERFJfSEZfQ0xLX1NFTF9CVVNZCQkoMSA8PCA4KQorI2RlZmluZSBNWENfQ0NNX0NESElQUl9ERFJfUE9ERl9CVVNZCQkJKDEgPDwgNykKKyNkZWZpbmUgTVhDX0NDTV9DREhJUFJfRU1JX0NMS19TRUxfQlVTWQkJCSgxIDw8IDYpCisjZGVmaW5lIE1YQ19DQ01fQ0RISVBSX1BFUklQSF9DTEtfU0VMX0JVU1kJCSgxIDw8IDUpCisjZGVmaW5lIE1YQ19DQ01fQ0RISVBSX05GQ19JUEdfSU5UX01FTV9QT0RGX0JVU1kJKDEgPDwgNCkKKyNkZWZpbmUgTVhDX0NDTV9DREhJUFJfQUhCX1BPREZfQlVTWQkJCSgxIDw8IDMpCisjZGVmaW5lIE1YQ19DQ01fQ0RISVBSX0VNSV9QT0RGX0JVU1kJCQkoMSA8PCAyKQorI2RlZmluZSBNWENfQ0NNX0NESElQUl9BWElfQl9QT0RGX0JVU1kJCQkoMSA8PCAxKQorI2RlZmluZSBNWENfQ0NNX0NESElQUl9BWElfQV9QT0RGX0JVU1kJCQkoMSA8PCAwKQorCisvKiBEZWZpbmUgdGhlIGJpdHMgaW4gcmVnaXN0ZXIgQ0RDUiAqLworI2RlZmluZSBNWENfQ0NNX0NEQ1JfQVJNX0ZSRVFfU0hJRlRfRElWSURFUgkJKDB4MSA8PCAyKQorI2RlZmluZSBNWENfQ0NNX0NEQ1JfUEVSSVBIX0NMS19EVkZTX1BPREZfT0ZGU0VUCSgwKQorI2RlZmluZSBNWENfQ0NNX0NEQ1JfUEVSSVBIX0NMS19EVkZTX1BPREZfTUFTSwkJKDB4MykKKworLyogRGVmaW5lIHRoZSBiaXRzIGluIHJlZ2lzdGVyIENMUENSICovCisjZGVmaW5lIE1YQ19DQ01fQ0xQQ1JfQllQQVNTX0hTQ19MUE1fSFMJCSgweDEgPDwgMjMpCisjZGVmaW5lIE1YQ19DQ01fQ0xQQ1JfQllQQVNTX1NDQ19MUE1fSFMJCSgweDEgPDwgMjIpCisjZGVmaW5lIE1YQ19DQ01fQ0xQQ1JfQllQQVNTX01BWF9MUE1fSFMJCSgweDEgPDwgMjEpCisjZGVmaW5lIE1YQ19DQ01fQ0xQQ1JfQllQQVNTX1NETUFfTFBNX0hTCSgweDEgPDwgMjApCisjZGVmaW5lIE1YQ19DQ01fQ0xQQ1JfQllQQVNTX0VNSV9MUE1fSFMJCSgweDEgPDwgMTkpCisjZGVmaW5lIE1YQ19DQ01fQ0xQQ1JfQllQQVNTX0lQVV9MUE1fSFMJCSgweDEgPDwgMTgpCisjZGVmaW5lIE1YQ19DQ01fQ0xQQ1JfQllQQVNTX1JUSUNfTFBNX0hTCSgweDEgPDwgMTcpCisjZGVmaW5lIE1YQ19DQ01fQ0xQQ1JfQllQQVNTX1JOR0NfTFBNX0hTCSgweDEgPDwgMTYpCisjZGVmaW5lIE1YQ19DQ01fQ0xQQ1JfQ09TQ19QV1JET1dOCQkoMHgxIDw8IDExKQorI2RlZmluZSBNWENfQ0NNX0NMUENSX1NUQllfQ09VTlRfT0ZGU0VUCQkoOSkKKyNkZWZpbmUgTVhDX0NDTV9DTFBDUl9TVEJZX0NPVU5UX01BU0sJCSgweDMgPDwgOSkKKyNkZWZpbmUgTVhDX0NDTV9DTFBDUl9WU1RCWQkJCSgweDEgPDwgOCkKKyNkZWZpbmUgTVhDX0NDTV9DTFBDUl9ESVNfUkVGX09TQwkJKDB4MSA8PCA3KQorI2RlZmluZSBNWENfQ0NNX0NMUENSX1NCWU9TCQkJKDB4MSA8PCA2KQorI2RlZmluZSBNWENfQ0NNX0NMUENSX0FSTV9DTEtfRElTX09OX0xQTQkoMHgxIDw8IDUpCisjZGVmaW5lIE1YQ19DQ01fQ0xQQ1JfTFBTUl9DTEtfU0VMX09GRlNFVAkoMykKKyNkZWZpbmUgTVhDX0NDTV9DTFBDUl9MUFNSX0NMS19TRUxfTUFTSwkJKDB4MyA8PCAzKQorI2RlZmluZSBNWENfQ0NNX0NMUENSX0xQTV9PRkZTRVQJCSgwKQorI2RlZmluZSBNWENfQ0NNX0NMUENSX0xQTV9NQVNLCQkJKDB4MykKKworLyogRGVmaW5lIHRoZSBiaXRzIGluIHJlZ2lzdGVyIENJU1IgKi8KKyNkZWZpbmUgTVhDX0NDTV9DSVNSX0FSTV9QT0RGX0xPQURFRAkJCSgweDEgPDwgMjUpCisjZGVmaW5lIE1YQ19DQ01fQ0lTUl9ORkNfSVBHX0lOVF9NRU1fUE9ERl9MT0FERUQJKDB4MSA8PCAyMSkKKyNkZWZpbmUgTVhDX0NDTV9DSVNSX0FIQl9QT0RGX0xPQURFRAkJCSgweDEgPDwgMjApCisjZGVmaW5lIE1YQ19DQ01fQ0lTUl9FTUlfUE9ERl9MT0FERUQJCQkoMHgxIDw8IDE5KQorI2RlZmluZSBNWENfQ0NNX0NJU1JfQVhJX0JfUE9ERl9MT0FERUQJCQkoMHgxIDw8IDE4KQorI2RlZmluZSBNWENfQ0NNX0NJU1JfQVhJX0FfUE9ERl9MT0FERUQJCQkoMHgxIDw8IDE3KQorI2RlZmluZSBNWENfQ0NNX0NJU1JfRElWSURFUl9MT0FERUQJCQkoMHgxIDw8IDE2KQorI2RlZmluZSBNWENfQ0NNX0NJU1JfQ09TQ19SRUFEWQkJCQkoMHgxIDw8IDYpCisjZGVmaW5lIE1YQ19DQ01fQ0lTUl9DS0lIMl9SRUFEWQkJCSgweDEgPDwgNSkKKyNkZWZpbmUgTVhDX0NDTV9DSVNSX0NLSUhfUkVBRFkJCQkJKDB4MSA8PCA0KQorI2RlZmluZSBNWENfQ0NNX0NJU1JfRlBNX1JFQURZCQkJCSgweDEgPDwgMykKKyNkZWZpbmUgTVhDX0NDTV9DSVNSX0xSRl9QTEwzCQkJCSgweDEgPDwgMikKKyNkZWZpbmUgTVhDX0NDTV9DSVNSX0xSRl9QTEwyCQkJCSgweDEgPDwgMSkKKyNkZWZpbmUgTVhDX0NDTV9DSVNSX0xSRl9QTEwxCQkJCSgweDEpCisKKy8qIERlZmluZSB0aGUgYml0cyBpbiByZWdpc3RlciBDSU1SICovCisjZGVmaW5lIE1YQ19DQ01fQ0lNUl9NQVNLX0FSTV9QT0RGX0xPQURFRAkJKDB4MSA8PCAyNSkKKyNkZWZpbmUgTVhDX0NDTV9DSU1SX01BU0tfTkZDX0lQR19JTlRfTUVNX1BPREZfTE9BREVECSgweDEgPDwgMjEpCisjZGVmaW5lIE1YQ19DQ01fQ0lNUl9NQVNLX0VNSV9QT0RGX0xPQURFRAkJKDB4MSA8PCAyMCkKKyNkZWZpbmUgTVhDX0NDTV9DSU1SX01BU0tfQVhJX0NfUE9ERl9MT0FERUQJCSgweDEgPDwgMTkpCisjZGVmaW5lIE1YQ19DQ01fQ0lNUl9NQVNLX0FYSV9CX1BPREZfTE9BREVECQkoMHgxIDw8IDE4KQorI2RlZmluZSBNWENfQ0NNX0NJTVJfTUFTS19BWElfQV9QT0RGX0xPQURFRAkJKDB4MSA8PCAxNykKKyNkZWZpbmUgTVhDX0NDTV9DSU1SX01BU0tfRElWSURFUl9MT0FERUQJCSgweDEgPDwgMTYpCisjZGVmaW5lIE1YQ19DQ01fQ0lNUl9NQVNLX0NPU0NfUkVBRFkJCQkoMHgxIDw8IDUpCisjZGVmaW5lIE1YQ19DQ01fQ0lNUl9NQVNLX0NLSUhfUkVBRFkJCQkoMHgxIDw8IDQpCisjZGVmaW5lIE1YQ19DQ01fQ0lNUl9NQVNLX0ZQTV9SRUFEWQkJCSgweDEgPDwgMykKKyNkZWZpbmUgTVhDX0NDTV9DSU1SX01BU0tfTFJGX1BMTDMJCQkoMHgxIDw8IDIpCisjZGVmaW5lIE1YQ19DQ01fQ0lNUl9NQVNLX0xSRl9QTEwyCQkJKDB4MSA8PCAxKQorI2RlZmluZSBNWENfQ0NNX0NJTVJfTUFTS19MUkZfUExMMQkJCSgweDEpCisKKy8qIERlZmluZSB0aGUgYml0cyBpbiByZWdpc3RlciBDQ09TUiAqLworI2RlZmluZSBNWENfQ0NNX0NDT1NSX0NLTzJfRU5fT0ZGU0VUCQkJKDB4MSA8PCAyNCkKKyNkZWZpbmUgTVhDX0NDTV9DQ09TUl9DS08yX0RJVl9PRkZTRVQJCQkoMjEpCisjZGVmaW5lIE1YQ19DQ01fQ0NPU1JfQ0tPMl9ESVZfTUFTSwkJCSgweDcgPDwgMjEpCisjZGVmaW5lIE1YQ19DQ01fQ0NPU1JfQ0tPMl9TRUxfT0ZGU0VUCQkJKDE2KQorI2RlZmluZSBNWENfQ0NNX0NDT1NSX0NLTzJfU0VMX01BU0sJCQkoMHgxRiA8PCAxNikKKyNkZWZpbmUgTVhDX0NDTV9DQ09TUl9DS09MX0VOCQkJCSgweDEgPDwgNykKKyNkZWZpbmUgTVhDX0NDTV9DQ09TUl9DS09MX0RJVl9PRkZTRVQJCQkoNCkKKyNkZWZpbmUgTVhDX0NDTV9DQ09TUl9DS09MX0RJVl9NQVNLCQkJKDB4NyA8PCA0KQorI2RlZmluZSBNWENfQ0NNX0NDT1NSX0NLT0xfU0VMX09GRlNFVAkJCSgwKQorI2RlZmluZSBNWENfQ0NNX0NDT1NSX0NLT0xfU0VMX01BU0sJCQkoMHhGKQorCisvKiBEZWZpbmUgdGhlIGJpdHMgaW4gcmVnaXN0ZXJzIENHUFIgKi8KKyNkZWZpbmUgTVhDX0NDTV9DR1BSX0VGVVNFX1BST0dfU1VQUExZX0dBVEUJCSgweDEgPDwgNCkKKyNkZWZpbmUgTVhDX0NDTV9DR1BSX0ZQTV9TRUwJCQkJKDB4MSA8PCAzKQorI2RlZmluZSBNWENfQ0NNX0NHUFJfVkxfTDJCSVNUX0NMS0RJVl9PRkZTRVQJCSgwKQorI2RlZmluZSBNWENfQ0NNX0NHUFJfVkxfTDJCSVNUX0NMS0RJVl9NQVNLCQkoMHg3KQorCisvKiBEZWZpbmUgdGhlIGJpdHMgaW4gcmVnaXN0ZXJzIENDR1J4ICovCisjZGVmaW5lIE1YQ19DQ01fQ0NHUnhfQ0dfTUFTSwkJCQkweDMKKyNkZWZpbmUgTVhDX0NDTV9DQ0dSeF9NT0RfT0ZGCQkJCTB4MAorI2RlZmluZSBNWENfQ0NNX0NDR1J4X01PRF9PTgkJCQkweDMKKyNkZWZpbmUgTVhDX0NDTV9DQ0dSeF9NT0RfSURMRQkJCQkweDEKKworI2RlZmluZSBNWENfQ0NNX0NDR1J4X0NHMTVfTUFTSwkJCQkoMHgzIDw8IDMwKQorI2RlZmluZSBNWENfQ0NNX0NDR1J4X0NHMTRfTUFTSwkJCQkoMHgzIDw8IDI4KQorI2RlZmluZSBNWENfQ0NNX0NDR1J4X0NHMTNfTUFTSwkJCQkoMHgzIDw8IDI2KQorI2RlZmluZSBNWENfQ0NNX0NDR1J4X0NHMTJfTUFTSwkJCQkoMHgzIDw8IDI0KQorI2RlZmluZSBNWENfQ0NNX0NDR1J4X0NHMTFfTUFTSwkJCQkoMHgzIDw8IDIyKQorI2RlZmluZSBNWENfQ0NNX0NDR1J4X0NHMTBfTUFTSwkJCQkoMHgzIDw8IDIwKQorI2RlZmluZSBNWENfQ0NNX0NDR1J4X0NHOV9NQVNLCQkJCSgweDMgPDwgMTgpCisjZGVmaW5lIE1YQ19DQ01fQ0NHUnhfQ0c4X01BU0sJCQkJKDB4MyA8PCAxNikKKyNkZWZpbmUgTVhDX0NDTV9DQ0dSeF9DRzVfTUFTSwkJCQkoMHgzIDw8IDEwKQorI2RlZmluZSBNWENfQ0NNX0NDR1J4X0NHNF9NQVNLCQkJCSgweDMgPDwgOCkKKyNkZWZpbmUgTVhDX0NDTV9DQ0dSeF9DRzNfTUFTSwkJCQkoMHgzIDw8IDYpCisjZGVmaW5lIE1YQ19DQ01fQ0NHUnhfQ0cyX01BU0sJCQkJKDB4MyA8PCA0KQorI2RlZmluZSBNWENfQ0NNX0NDR1J4X0NHMV9NQVNLCQkJCSgweDMgPDwgMikKKyNkZWZpbmUgTVhDX0NDTV9DQ0dSeF9DRzBfTUFTSwkJCQkoMHgzIDw8IDApCisKKyNkZWZpbmUgTVhDX0NDTV9DQ0dSeF9DRzE1X09GRlNFVAkJCTMwCisjZGVmaW5lIE1YQ19DQ01fQ0NHUnhfQ0cxNF9PRkZTRVQJCQkyOAorI2RlZmluZSBNWENfQ0NNX0NDR1J4X0NHMTNfT0ZGU0VUCQkJMjYKKyNkZWZpbmUgTVhDX0NDTV9DQ0dSeF9DRzEyX09GRlNFVAkJCTI0CisjZGVmaW5lIE1YQ19DQ01fQ0NHUnhfQ0cxMV9PRkZTRVQJCQkyMgorI2RlZmluZSBNWENfQ0NNX0NDR1J4X0NHMTBfT0ZGU0VUCQkJMjAKKyNkZWZpbmUgTVhDX0NDTV9DQ0dSeF9DRzlfT0ZGU0VUCQkJMTgKKyNkZWZpbmUgTVhDX0NDTV9DQ0dSeF9DRzhfT0ZGU0VUCQkJMTYKKyNkZWZpbmUgTVhDX0NDTV9DQ0dSeF9DRzdfT0ZGU0VUCQkJMTQKKyNkZWZpbmUgTVhDX0NDTV9DQ0dSeF9DRzZfT0ZGU0VUCQkJMTIKKyNkZWZpbmUgTVhDX0NDTV9DQ0dSeF9DRzVfT0ZGU0VUCQkJMTAKKyNkZWZpbmUgTVhDX0NDTV9DQ0dSeF9DRzRfT0ZGU0VUCQkJOAorI2RlZmluZSBNWENfQ0NNX0NDR1J4X0NHM19PRkZTRVQJCQk2CisjZGVmaW5lIE1YQ19DQ01fQ0NHUnhfQ0cyX09GRlNFVAkJCTQKKyNkZWZpbmUgTVhDX0NDTV9DQ0dSeF9DRzFfT0ZGU0VUCQkJMgorI2RlZmluZSBNWENfQ0NNX0NDR1J4X0NHMF9PRkZTRVQJCQkwCisKKyNkZWZpbmUgTVhDX0RQVENfTFBfQkFTRQkoTVg1MV9HUENfQkFTRSArIDB4ODApCisjZGVmaW5lIE1YQ19EUFRDX0dQX0JBU0UJKE1YNTFfR1BDX0JBU0UgKyAweDEwMCkKKyNkZWZpbmUgTVhDX0RWRlNfQ09SRV9CQVNFCShNWDUxX0dQQ19CQVNFICsgMHgxODApCisjZGVmaW5lIE1YQ19EUFRDX1BFUl9CQVNFCShNWDUxX0dQQ19CQVNFICsgMHgxQzApCisjZGVmaW5lIE1YQ19QR0NfSVBVX0JBU0UJKE1YNTFfR1BDX0JBU0UgKyAweDIyMCkKKyNkZWZpbmUgTVhDX1BHQ19WUFVfQkFTRQkoTVg1MV9HUENfQkFTRSArIDB4MjQwKQorI2RlZmluZSBNWENfUEdDX0dQVV9CQVNFCShNWDUxX0dQQ19CQVNFICsgMHgyNjApCisjZGVmaW5lIE1YQ19TUlBHX05FT05fQkFTRQkoTVg1MV9HUENfQkFTRSArIDB4MjgwKQorI2RlZmluZSBNWENfU1JQR19BUk1fQkFTRQkoTVg1MV9HUENfQkFTRSArIDB4MkEwKQorI2RlZmluZSBNWENfU1JQR19FTVBHQzBfQkFTRQkoTVg1MV9HUENfQkFTRSArIDB4MkMwKQorI2RlZmluZSBNWENfU1JQR19FTVBHQzFfQkFTRQkoTVg1MV9HUENfQkFTRSArIDB4MkQwKQorI2RlZmluZSBNWENfU1JQR19NRUdBTUlYX0JBU0UJKE1YNTFfR1BDX0JBU0UgKyAweDJFMCkKKyNkZWZpbmUgTVhDX1NSUEdfRU1JX0JBU0UJKE1YNTFfR1BDX0JBU0UgKyAweDMwMCkKKworLyogQ09SVEVYQTggcGxhdGZvcm0gKi8KKyNkZWZpbmUgTVhDX0NPUlRFWEE4X1BMQVRfUFZJRAkJKE1YNTFfQ09SVEVYQThfQkFTRSArIDB4MCkKKyNkZWZpbmUgTVhDX0NPUlRFWEE4X1BMQVRfR1BDCQkoTVg1MV9DT1JURVhBOF9CQVNFICsgMHg0KQorI2RlZmluZSBNWENfQ09SVEVYQThfUExBVF9QSUMJCShNWDUxX0NPUlRFWEE4X0JBU0UgKyAweDgpCisjZGVmaW5lIE1YQ19DT1JURVhBOF9QTEFUX0xQQwkJKE1YNTFfQ09SVEVYQThfQkFTRSArIDB4QykKKyNkZWZpbmUgTVhDX0NPUlRFWEE4X1BMQVRfTkVPTl9MUEMJKE1YNTFfQ09SVEVYQThfQkFTRSArIDB4MTApCisjZGVmaW5lIE1YQ19DT1JURVhBOF9QTEFUX0lDR0MJCShNWDUxX0NPUlRFWEE4X0JBU0UgKyAweDE0KQorI2RlZmluZSBNWENfQ09SVEVYQThfUExBVF9BTUMJCShNWDUxX0NPUlRFWEE4X0JBU0UgKyAweDE4KQorI2RlZmluZSBNWENfQ09SVEVYQThfUExBVF9OTUMJCShNWDUxX0NPUlRFWEE4X0JBU0UgKyAweDIwKQorI2RlZmluZSBNWENfQ09SVEVYQThfUExBVF9OTVMJCShNWDUxX0NPUlRFWEE4X0JBU0UgKyAweDI0KQorCisvKiBEVkZTIENPUkUgKi8KKyNkZWZpbmUgTVhDX0RWRlNUSFJTCQkoTVhDX0RWRlNfQ09SRV9CQVNFICsgMHgwMCkKKyNkZWZpbmUgTVhDX0RWRlNDT1VOCQkoTVhDX0RWRlNfQ09SRV9CQVNFICsgMHgwNCkKKyNkZWZpbmUgTVhDX0RWRlNTSUcxCQkoTVhDX0RWRlNfQ09SRV9CQVNFICsgMHgwOCkKKyNkZWZpbmUgTVhDX0RWRlNTSUcwCQkoTVhDX0RWRlNfQ09SRV9CQVNFICsgMHgwQykKKyNkZWZpbmUgTVhDX0RWRlNHUEMwCQkoTVhDX0RWRlNfQ09SRV9CQVNFICsgMHgxMCkKKyNkZWZpbmUgTVhDX0RWRlNHUEMxCQkoTVhDX0RWRlNfQ09SRV9CQVNFICsgMHgxNCkKKyNkZWZpbmUgTVhDX0RWRlNHUEJUCQkoTVhDX0RWRlNfQ09SRV9CQVNFICsgMHgxOCkKKyNkZWZpbmUgTVhDX0RWRlNFTUFDCQkoTVhDX0RWRlNfQ09SRV9CQVNFICsgMHgxQykKKyNkZWZpbmUgTVhDX0RWRlNDTlRSCQkoTVhDX0RWRlNfQ09SRV9CQVNFICsgMHgyMCkKKyNkZWZpbmUgTVhDX0RWRlNMVFIwXzAJCShNWENfRFZGU19DT1JFX0JBU0UgKyAweDI0KQorI2RlZmluZSBNWENfRFZGU0xUUjBfMQkJKE1YQ19EVkZTX0NPUkVfQkFTRSArIDB4MjgpCisjZGVmaW5lIE1YQ19EVkZTTFRSMV8wCQkoTVhDX0RWRlNfQ09SRV9CQVNFICsgMHgyQykKKyNkZWZpbmUgTVhDX0RWRlNMVFIxXzEJCShNWENfRFZGU19DT1JFX0JBU0UgKyAweDMwKQorI2RlZmluZSBNWENfRFZGU1BUMCAJCShNWENfRFZGU19DT1JFX0JBU0UgKyAweDM0KQorI2RlZmluZSBNWENfRFZGU1BUMSAJCShNWENfRFZGU19DT1JFX0JBU0UgKyAweDM4KQorI2RlZmluZSBNWENfRFZGU1BUMiAJCShNWENfRFZGU19DT1JFX0JBU0UgKyAweDNDKQorI2RlZmluZSBNWENfRFZGU1BUMyAJCShNWENfRFZGU19DT1JFX0JBU0UgKyAweDQwKQorCisvKiBHUEMgKi8KKyNkZWZpbmUgTVhDX0dQQ19DTlRSCQkoTVg1MV9HUENfQkFTRSArIDB4MCkKKyNkZWZpbmUgTVhDX0dQQ19QR1IJCShNWDUxX0dQQ19CQVNFICsgMHg0KQorI2RlZmluZSBNWENfR1BDX1ZDUgkJKE1YNTFfR1BDX0JBU0UgKyAweDgpCisjZGVmaW5lIE1YQ19HUENfQUxMX1BVCQkoTVg1MV9HUENfQkFTRSArIDB4QykKKyNkZWZpbmUgTVhDX0dQQ19ORU9OCQkoTVg1MV9HUENfQkFTRSArIDB4MTApCisjZGVmaW5lIE1YQ19HUENfUEdSX0FSTVBHX09GRlNFVAk4CisjZGVmaW5lIE1YQ19HUENfUEdSX0FSTVBHX01BU0sJCSgzIDw8IDgpCisKKy8qIFBHQyAqLworI2RlZmluZSBNWENfUEdDX0lQVV9QR0NSCShNWENfUEdDX0lQVV9CQVNFICsgMHgwKQorI2RlZmluZSBNWENfUEdDX0lQVV9QR1NSCShNWENfUEdDX0lQVV9CQVNFICsgMHhDKQorI2RlZmluZSBNWENfUEdDX1ZQVV9QR0NSCShNWENfUEdDX1ZQVV9CQVNFICsgMHgwKQorI2RlZmluZSBNWENfUEdDX1ZQVV9QR1NSCShNWENfUEdDX1ZQVV9CQVNFICsgMHhDKQorI2RlZmluZSBNWENfUEdDX0dQVV9QR0NSCShNWENfUEdDX0dQVV9CQVNFICsgMHgwKQorI2RlZmluZSBNWENfUEdDX0dQVV9QR1NSCShNWENfUEdDX0dQVV9CQVNFICsgMHhDKQorCisjZGVmaW5lIE1YQ19QR0NSX1BDUgkJMQorI2RlZmluZSBNWENfU1JQR0NSX1BDUgkJMQorI2RlZmluZSBNWENfRU1QR0NSX1BDUgkJMQorI2RlZmluZSBNWENfUEdTUl9QU1IJCTEKKworCisjZGVmaW5lIE1YQ19DT1JURVhBOF9QTEFUX0xQQ19EU00JKDEgPDwgMCkKKyNkZWZpbmUgTVhDX0NPUlRFWEE4X1BMQVRfTFBDX0RCR19EU00JKDEgPDwgMSkKKworLyogU1JQRyAqLworI2RlZmluZSBNWENfU1JQR19ORU9OX1NSUEdDUgkoTVhDX1NSUEdfTkVPTl9CQVNFICsgMHgwKQorI2RlZmluZSBNWENfU1JQR19ORU9OX1BVUFNDUgkoTVhDX1NSUEdfTkVPTl9CQVNFICsgMHg0KQorI2RlZmluZSBNWENfU1JQR19ORU9OX1BETlNDUgkoTVhDX1NSUEdfTkVPTl9CQVNFICsgMHg4KQorCisjZGVmaW5lIE1YQ19TUlBHX0FSTV9TUlBHQ1IJKE1YQ19TUlBHX0FSTV9CQVNFICsgMHgwKQorI2RlZmluZSBNWENfU1JQR19BUk1fUFVQU0NSCShNWENfU1JQR19BUk1fQkFTRSArIDB4NCkKKyNkZWZpbmUgTVhDX1NSUEdfQVJNX1BETlNDUgkoTVhDX1NSUEdfQVJNX0JBU0UgKyAweDgpCisKKyNkZWZpbmUgTVhDX1NSUEdfRU1QR0MwX1NSUEdDUgkoTVhDX1NSUEdfRU1QR0MwX0JBU0UgKyAweDApCisjZGVmaW5lIE1YQ19TUlBHX0VNUEdDMF9QVVBTQ1IJKE1YQ19TUlBHX0VNUEdDMF9CQVNFICsgMHg0KQorI2RlZmluZSBNWENfU1JQR19FTVBHQzBfUEROU0NSCShNWENfU1JQR19FTVBHQzBfQkFTRSArIDB4OCkKKworI2RlZmluZSBNWENfU1JQR19FTVBHQzFfU1JQR0NSCShNWENfU1JQR19FTVBHQzFfQkFTRSArIDB4MCkKKyNkZWZpbmUgTVhDX1NSUEdfRU1QR0MxX1BVUFNDUgkoTVhDX1NSUEdfRU1QR0MxX0JBU0UgKyAweDQpCisjZGVmaW5lIE1YQ19TUlBHX0VNUEdDMV9QRE5TQ1IJKE1YQ19TUlBHX0VNUEdDMV9CQVNFICsgMHg4KQorCisjZGVmaW5lIE1YQ19TUlBHX01FR0FNSVhfU1JQR0NSCQkoTVhDX1NSUEdfTUVHQU1JWF9CQVNFICsgMHgwKQorI2RlZmluZSBNWENfU1JQR19NRUdBTUlYX1BVUFNDUgkJKE1YQ19TUlBHX01FR0FNSVhfQkFTRSArIDB4NCkKKyNkZWZpbmUgTVhDX1NSUEdfTUVHQU1JWF9QRE5TQ1IJCShNWENfU1JQR19NRUdBTUlYX0JBU0UgKyAweDgpCisKKyNkZWZpbmUgTVhDX1NSUEdDX0VNSV9TUlBHQ1IJKE1YQ19TUlBHQ19FTUlfQkFTRSArIDB4MCkKKyNkZWZpbmUgTVhDX1NSUEdDX0VNSV9QVVBTQ1IJKE1YQ19TUlBHQ19FTUlfQkFTRSArIDB4NCkKKyNkZWZpbmUgTVhDX1NSUEdDX0VNSV9QRE5TQ1IJKE1YQ19TUlBHQ19FTUlfQkFTRSArIDB4OCkKKworI2VuZGlmCQkJCS8qIF9fQVJDSF9BUk1fTUFDSF9NWDUxX0NSTV9SRUdTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDUvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1teDUvZGV2aWNlcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZmQzOTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW14NS9kZXZpY2VzLmMKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IEFtaXQgS3VjaGVyaWEgPGFtaXQua3VjaGVyaWFAY2Fub25pY2FsLmNvbT4KKyAqCisgKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIFZlcnNpb24gMiBvciBsYXRlciBhdCB0aGUgZm9sbG93aW5nIGxvY2F0aW9uczoKKyAqCisgKiBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2dwbC1saWNlbnNlLmh0bWwKKyAqIGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9ncGwuaHRtbAorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9pbXgtdWFydC5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQwW10gPSB7CisJeworCQkuc3RhcnQgPSBNWDUxX1VBUlQxX0JBU0VfQUREUiwKKwkJLmVuZCA9IE1YNTFfVUFSVDFfQkFTRV9BRERSICsgMHhmZmYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVg1MV9NWENfSU5UX1VBUlQxLAorCQkuZW5kID0gTVg1MV9NWENfSU5UX1VBUlQxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UwID0geworCS5uYW1lID0gImlteC11YXJ0IiwKKwkuaWQgPSAwLAorCS5yZXNvdXJjZSA9IHVhcnQwLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh1YXJ0MCksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQxW10gPSB7CisJeworCQkuc3RhcnQgPSBNWDUxX1VBUlQyX0JBU0VfQUREUiwKKwkJLmVuZCA9IE1YNTFfVUFSVDJfQkFTRV9BRERSICsgMHhmZmYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVg1MV9NWENfSU5UX1VBUlQyLAorCQkuZW5kID0gTVg1MV9NWENfSU5UX1VBUlQyLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UxID0geworCS5uYW1lID0gImlteC11YXJ0IiwKKwkuaWQgPSAxLAorCS5yZXNvdXJjZSA9IHVhcnQxLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh1YXJ0MSksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQyW10gPSB7CisJeworCQkuc3RhcnQgPSBNWDUxX1VBUlQzX0JBU0VfQUREUiwKKwkJLmVuZCA9IE1YNTFfVUFSVDNfQkFTRV9BRERSICsgMHhmZmYsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sIHsKKwkJLnN0YXJ0ID0gTVg1MV9NWENfSU5UX1VBUlQzLAorCQkuZW5kID0gTVg1MV9NWENfSU5UX1VBUlQzLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UyID0geworCS5uYW1lID0gImlteC11YXJ0IiwKKwkuaWQgPSAyLAorCS5yZXNvdXJjZSA9IHVhcnQyLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRSh1YXJ0MiksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG14Y19mZWNfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBNWDUxX01YQ19GRUNfQkFTRV9BRERSLAorCQkuZW5kCT0gTVg1MV9NWENfRkVDX0JBU0VfQUREUiArIDB4ZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LCB7CisJCS5zdGFydAk9IE1YNTFfTVhDX0lOVF9GRUMsCisJCS5lbmQJPSBNWDUxX01YQ19JTlRfRkVDLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfZmVjX2RldmljZSA9IHsKKwkubmFtZSA9ICJmZWMiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKG14Y19mZWNfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBteGNfZmVjX3Jlc291cmNlcywKK307CisKKy8qIER1bW15IGRlZmluaXRpb24gdG8gYWxsb3cgY29tcGlsaW5nIGluIEFWSUMgYW5kIFRaSUMgc2ltdWx0YW5lb3VzbHkgKi8KK2ludCBfX2luaXQgbXhjX3JlZ2lzdGVyX2dwaW9zKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14NS9kZXZpY2VzLmggYi9hcmNoL2FybS9tYWNoLW14NS9kZXZpY2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMzOWFiOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L2RldmljZXMuaApAQCAtMCwwICsxLDQgQEAKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y191YXJ0X2RldmljZTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBteGNfdWFydF9kZXZpY2UxOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbXhjX3VhcnRfZGV2aWNlMjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14Y19mZWNfZGV2aWNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1teDUvbW0uYyBiL2FyY2gvYXJtL21hY2gtbXg1L21tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIxZTE4YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtbXg1L21tLmMKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBUaGUgY29kZSBjb250YWluZWQgaGVyZWluIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBWZXJzaW9uIDIgb3IgbGF0ZXIgYXQgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM6CisgKgorICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ncGwtbGljZW5zZS5odG1sCisgKiBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwKKyAqCisgKiBDcmVhdGUgc3RhdGljIG1hcHBpbmcgYmV0d2VlbiBwaHlzaWNhbCB0byB2aXJ0dWFsIG1lbW9yeS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvaW9tdXgtdjMuaD4KKworLyoKKyAqIERlZmluZSB0aGUgTVg1MSBtZW1vcnkgbWFwLgorICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG14Y19pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsID0gTVg1MV9JUkFNX0JBU0VfQUREUl9WSVJULAorCQkucGZuID0gX19waHlzX3RvX3BmbihNWDUxX0lSQU1fQkFTRV9BRERSKSwKKwkJLmxlbmd0aCA9IE1YNTFfSVJBTV9TSVpFLAorCQkudHlwZSA9IE1UX0RFVklDRQorCX0sIHsKKwkJLnZpcnR1YWwgPSBNWDUxX0RFQlVHX0JBU0VfQUREUl9WSVJULAorCQkucGZuID0gX19waHlzX3RvX3BmbihNWDUxX0RFQlVHX0JBU0VfQUREUiksCisJCS5sZW5ndGggPSBNWDUxX0RFQlVHX1NJWkUsCisJCS50eXBlID0gTVRfREVWSUNFCisJfSwgeworCQkudmlydHVhbCA9IE1YNTFfVFpJQ19CQVNFX0FERFJfVklSVCwKKwkJLnBmbiA9IF9fcGh5c190b19wZm4oTVg1MV9UWklDX0JBU0VfQUREUiksCisJCS5sZW5ndGggPSBNWDUxX1RaSUNfU0laRSwKKwkJLnR5cGUgPSBNVF9ERVZJQ0UKKwl9LCB7CisJCS52aXJ0dWFsID0gTVg1MV9BSVBTMV9CQVNFX0FERFJfVklSVCwKKwkJLnBmbiA9IF9fcGh5c190b19wZm4oTVg1MV9BSVBTMV9CQVNFX0FERFIpLAorCQkubGVuZ3RoID0gTVg1MV9BSVBTMV9TSVpFLAorCQkudHlwZSA9IE1UX0RFVklDRQorCX0sIHsKKwkJLnZpcnR1YWwgPSBNWDUxX1NQQkEwX0JBU0VfQUREUl9WSVJULAorCQkucGZuID0gX19waHlzX3RvX3BmbihNWDUxX1NQQkEwX0JBU0VfQUREUiksCisJCS5sZW5ndGggPSBNWDUxX1NQQkEwX1NJWkUsCisJCS50eXBlID0gTVRfREVWSUNFCisJfSwgeworCQkudmlydHVhbCA9IE1YNTFfQUlQUzJfQkFTRV9BRERSX1ZJUlQsCisJCS5wZm4gPSBfX3BoeXNfdG9fcGZuKE1YNTFfQUlQUzJfQkFTRV9BRERSKSwKKwkJLmxlbmd0aCA9IE1YNTFfQUlQUzJfU0laRSwKKwkJLnR5cGUgPSBNVF9ERVZJQ0UKKwl9LCB7CisJCS52aXJ0dWFsID0gTVg1MV9ORkNfQVhJX0JBU0VfQUREUl9WSVJULAorCQkucGZuID0gX19waHlzX3RvX3BmbihNWDUxX05GQ19BWElfQkFTRV9BRERSKSwKKwkJLmxlbmd0aCA9IE1YNTFfTkZDX0FYSV9TSVpFLAorCQkudHlwZSA9IE1UX0RFVklDRQorCX0sCit9OworCisvKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgbWVtb3J5IG1hcC4gSXQgaXMgY2FsbGVkIGR1cmluZyB0aGUKKyAqIHN5c3RlbSBzdGFydHVwIHRvIGNyZWF0ZSBzdGF0aWMgcGh5c2ljYWwgdG8gdmlydHVhbCBtZW1vcnkgbWFwcGluZ3MKKyAqIGZvciB0aGUgSU8gbW9kdWxlcy4KKyAqLwordm9pZCBfX2luaXQgbXg1MV9tYXBfaW8odm9pZCkKK3sKKwl1MzIgdHppY19hZGRyOworCisJaWYgKG14NTFfcmV2aXNpb24oKSA8IE1YNTFfQ0hJUF9SRVZfMl8wKQorCQl0emljX2FkZHIgPSAweDhGRkZDMDAwOworCWVsc2UKKwkJdHppY19hZGRyID0gMHhFMDAwMzAwMDsKKwlteGNfaW9fZGVzY1syXS5wZm4gPSAgX19waHlzX3RvX3Bmbih0emljX2FkZHIpOworCisJbXhjX3NldF9jcHVfdHlwZShNWENfQ1BVX01YNTEpOworCW14Y19pb211eF92M19pbml0KE1YNTFfSU9fQUREUkVTUyhNWDUxX0lPTVVYQ19CQVNFX0FERFIpKTsKKwlteGNfYXJjaF9yZXNldF9pbml0KE1YNTFfSU9fQUREUkVTUyhNWDUxX1dET0dfQkFTRV9BRERSKSk7CisJaW90YWJsZV9pbml0KG14Y19pb19kZXNjLCBBUlJBWV9TSVpFKG14Y19pb19kZXNjKSk7Cit9CisKK3ZvaWQgX19pbml0IG14NTFfaW5pdF9pcnEodm9pZCkKK3sKKwl0emljX2luaXRfaXJxKE1YNTFfSU9fQUREUkVTUyhNWDUxX1RaSUNfQkFTRV9BRERSKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW14YzkxMjMxL21hZ3gtem41LmMgYi9hcmNoL2FybS9tYWNoLW14YzkxMjMxL21hZ3gtem41LmMKaW5kZXggN2RiZTRjYS4uNjk4MTZiYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1teGM5MTIzMS9tYWd4LXpuNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtbXhjOTEyMzEvbWFneC16bjUuYwpAQCAtNTUsNyArNTUsNyBAQAogTUFDSElORV9TVEFSVChNQUdYX1pONSwgIk1vdG9yb2xhIFpuNSIpCiAJLnBoeXNfaW8JPSBNWEM5MTIzMV9BSVBTMV9CQVNFX0FERFIsCiAJLmlvX3BnX29mZnN0CT0gKChNWEM5MTIzMV9BSVBTMV9CQVNFX0FERFJfVklSVCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcwk9IFBIWVNfT0ZGU0VUICsgMHgxMDAsCisJLmJvb3RfcGFyYW1zCT0gTVhDOTEyMzFfUEhZU19PRkZTRVQgKyAweDEwMCwKIAkubWFwX2lvCQk9IG14YzkxMjMxX21hcF9pbywKIAkuaW5pdF9pcnEJPSBteGM5MTIzMV9pbml0X2lycSwKIAkudGltZXIJCT0gJnpuNV90aW1lciwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9ib2FyZC1uaGs4ODE1LmMgYi9hcmNoL2FybS9tYWNoLW5vbWFkaWsvYm9hcmQtbmhrODgxNS5jCmluZGV4IDk0MzhiZjYuLmFiMzcxMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtbm9tYWRpay9ib2FyZC1uaGs4ODE1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1ub21hZGlrL2JvYXJkLW5oazg4MTUuYwpAQCAtMzgsNyArMzgsNyBAQAogI2RlZmluZSBTUkNfQ1JfSU5JVF9NQVNLCTB4MDAwMDdmZmYKICNkZWZpbmUgU1JDX0NSX0lOSVRfVkFMCQkweDJhYWE4MDAwCiAKLS8qIFRoZXNlIGFkcmVzc2VzIHNwYW4gMTZNQiwgc28gdXNlIHRocmVlIGluZGl2aWR1YWwgcGFnZXMgKi8KKy8qIFRoZXNlIGFkZHJlc3NlcyBzcGFuIDE2TUIsIHNvIHVzZSB0aHJlZSBpbmRpdmlkdWFsIHBhZ2VzICovCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG5oazg4MTVfbmFuZF9yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS5uYW1lID0gIm5hbmRfYWRkciIsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9NYWtlZmlsZQppbmRleCA5Y2UxN2YxLi5iNmE1MzdjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAKICMgQ29tbW9uIHN1cHBvcnQKLW9iai15IDo9IGlvLm8gaWQubyBzcmFtLm8gaXJxLm8gbXV4Lm8gc2VyaWFsLm8gZGV2aWNlcy5vCitvYmoteSA6PSBpby5vIGlkLm8gc3JhbS5vIGlycS5vIG11eC5vIGZsYXNoLm8gc2VyaWFsLm8gZGV2aWNlcy5vCiBvYmoteSArPSBjbG9jay5vIGNsb2NrX2RhdGEubyBvcHBfZGF0YS5vCiAKIG9iai0kKENPTkZJR19PTUFQX01DQlNQKSArPSBtY2JzcC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWZzYW1wbGUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jCmluZGV4IDdlNzBjM2MuLjA5NmYyZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jCkBAIC0xOCwxOCArMTgsMTkgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSA8cGxhdC90Yy5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CisjaW5jbHVkZSA8cGxhdC9mbGFzaC5oPgogI2luY2x1ZGUgPHBsYXQvZnBnYS5oPgogI2luY2x1ZGUgPHBsYXQva2V5cGFkLmg+CiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KQEAgLTE1MCw5ICsxNTEsOSBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgbm9yX2RhdGEgPSB7Ci0JLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBub3JfZGF0YSA9IHsKIAkud2lkdGgJCT0gMiwKKwkuc2V0X3ZwcAk9IG9tYXAxX3NldF92cHAsCiAJLnBhcnRzCQk9IG5vcl9wYXJ0aXRpb25zLAogCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUobm9yX3BhcnRpdGlvbnMpLAogfTsKQEAgLTE2NCw3ICsxNjUsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugbm9yX2RldmljZSA9IHsKLQkubmFtZQkJPSAib21hcGZsYXNoIiwKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJm5vcl9kYXRhLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCmluZGV4IGZhN2NlY2UuLmQxMTAwZTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHBzNjUwMTAuaD4KICNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KQEAgLTM1LDcgKzM2LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKICNpbmNsdWRlIDxwbGF0L211eC5oPgpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAjaW5jbHVkZSA8cGxhdC9rZXlwYWQuaD4KICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgorI2luY2x1ZGUgPHBsYXQvZmxhc2guaD4KIAogI2luY2x1ZGUgImJvYXJkLWgyLmgiCiAKQEAgLTEyMSw5ICsxMjIsOSBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBoMl9ub3JfZGF0YSA9IHsKLQkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGgyX25vcl9kYXRhID0gewogCS53aWR0aAkJPSAyLAorCS5zZXRfdnBwCT0gb21hcDFfc2V0X3ZwcCwKIAkucGFydHMJCT0gaDJfbm9yX3BhcnRpdGlvbnMsCiAJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShoMl9ub3JfcGFydGl0aW9ucyksCiB9OwpAQCAtMTM0LDcgKzEzNSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoMl9ub3JfZGV2aWNlID0gewotCS5uYW1lCQk9ICJvbWFwZmxhc2giLAorCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKIAkuaWQJCT0gMCwKIAkuZGV2CQk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmaDJfbm9yX2RhdGEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKaW5kZXggNmE3ZjljMy4uYTUzYWI4MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHBzNjUwMTAuaD4KQEAgLTM3LDcgKzM4LDYgQEAKIAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlIDxwbGF0L2tleXBhZC5oPgogI2luY2x1ZGUgPHBsYXQvZG1hLmg+CiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KKyNpbmNsdWRlIDxwbGF0L2ZsYXNoLmg+CiAKICNpbmNsdWRlICJib2FyZC1oMy5oIgogCkBAIC0xMjYsOSArMTI3LDkgQEAKIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgbm9yX2RhdGEgPSB7Ci0JLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBub3JfZGF0YSA9IHsKIAkud2lkdGgJCT0gMiwKKwkuc2V0X3ZwcAk9IG9tYXAxX3NldF92cHAsCiAJLnBhcnRzCQk9IG5vcl9wYXJ0aXRpb25zLAogCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUobm9yX3BhcnRpdGlvbnMpLAogfTsKQEAgLTEzOSw3ICsxNDAsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugbm9yX2RldmljZSA9IHsKLQkubmFtZQkJPSAib21hcGZsYXNoIiwKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJm5vcl9kYXRhLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKaW5kZXggMjEzM2IwMC4uNWQxMmZkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCkBAIC0yMiwxNiArMjIsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbWM5MXguaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KKyNpbmNsdWRlIDxwbGF0L2ZsYXNoLmg+CiAjaW5jbHVkZSA8cGxhdC9mcGdhLmg+CiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CiAjaW5jbHVkZSA8cGxhdC90Yy5oPgpAQCAtOTQsOSArOTUsOSBAQAogCX0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBpbm5vdmF0b3JfZmxhc2hfZGF0YSA9IHsKLQkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGlubm92YXRvcl9mbGFzaF9kYXRhID0gewogCS53aWR0aAkJPSAyLAorCS5zZXRfdnBwCT0gb21hcDFfc2V0X3ZwcCwKIAkucGFydHMJCT0gaW5ub3ZhdG9yX3BhcnRpdGlvbnMsCiAJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShpbm5vdmF0b3JfcGFydGl0aW9ucyksCiB9OwpAQCAtMTA4LDcgKzEwOSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbm5vdmF0b3JfZmxhc2hfZGV2aWNlID0gewotCS5uYW1lCQk9ICJvbWFwZmxhc2giLAorCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKIAkuaWQJCT0gMCwKIAkuZGV2CQk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmaW5ub3ZhdG9yX2ZsYXNoX2RhdGEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYwppbmRleCBjY2VhNGY0Li44MGQ4NjIwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKQEAgLTM3LDYgKzM3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pMmMvdHBzNjUwMTAuaD4KIApAQCAtNDYsOCArNDcsOCBAQAogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAKKyNpbmNsdWRlIDxwbGF0L2ZsYXNoLmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KICNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvdGMuaD4KQEAgLTk0LDkgKzk1LDkgQEAKIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgb3NrX2ZsYXNoX2RhdGEgPSB7Ci0JLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBvc2tfZmxhc2hfZGF0YSA9IHsKIAkud2lkdGgJCT0gMiwKKwkuc2V0X3ZwcAk9IG9tYXAxX3NldF92cHAsCiAJLnBhcnRzCQk9IG9za19wYXJ0aXRpb25zLAogCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUob3NrX3BhcnRpdGlvbnMpLAogfTsKQEAgLTEwNyw3ICsxMDgsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb3NrNTkxMl9mbGFzaF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm9tYXBmbGFzaCIsCisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAogCS5pZAkJPSAwLAogCS5kZXYJCT0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZvc2tfZmxhc2hfZGF0YSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10ZS5jCmluZGV4IDlmZTg4NzIuLjU2OWI0YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXRlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdGUuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2FwbS1lbXVsYXRpb24uaD4KQEAgLTMxLDkgKzMyLDkgQEAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8cGxhdC9mbGFzaC5oPgogI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KICNpbmNsdWRlIDxwbGF0L3RjLmg+CkBAIC0xMjYsOSArMTI3LDkgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIHBhbG10ZV9yb21fZGF0YSA9IHsKLQkubWFwX25hbWUJPSAibWFwX3JvbSIsCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBwYWxtdGVfcm9tX2RhdGEgPSB7CiAJLndpZHRoCQk9IDIsCisJLnNldF92cHAJPSBvbWFwMV9zZXRfdnBwLAogCS5wYXJ0cwkJPSBwYWxtdGVfcm9tX3BhcnRpdGlvbnMsCiAJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShwYWxtdGVfcm9tX3BhcnRpdGlvbnMpLAogfTsKQEAgLTE0MCw3ICsxNDEsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXRlX3JvbV9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm9tYXBmbGFzaCIsCisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAogCS5pZAkJPSAtMSwKIAkuZGV2CQk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmcGFsbXRlX3JvbV9kYXRhLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGFsbXR0LmMKaW5kZXggYWYwNjhlMy4uNmFkNDlhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtdHQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG10dC5jCkBAIC0yMSwxNiArMjEsMTcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCiAjaW5jbHVkZSA8cGxhdC9sZWQuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxwbGF0L2ZsYXNoLmg+CiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgogI2luY2x1ZGUgPHBsYXQvZG1hLmg+CkBAIC0xMDQsOSArMTA1LDkgQEAKIAl9CiB9OwogCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgcGFsbXR0X2ZsYXNoX2RhdGEgPSB7Ci0JLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBwYWxtdHRfZmxhc2hfZGF0YSA9IHsKIAkud2lkdGgJCT0gMiwKKwkuc2V0X3ZwcAk9IG9tYXAxX3NldF92cHAsCiAJLnBhcnRzCQk9IHBhbG10dF9wYXJ0aXRpb25zLAogCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUocGFsbXR0X3BhcnRpdGlvbnMpLAogfTsKQEAgLTExOCw3ICsxMTksNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGFsbXR0X2ZsYXNoX2RldmljZSA9IHsKLQkubmFtZQkJPSAib21hcGZsYXNoIiwKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnBhbG10dF9mbGFzaF9kYXRhLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wYWxtejcxLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYwppbmRleCBjN2EzYjZmLi42NjQxZGU5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBhbG16NzEuYwpAQCAtMjUsMTQgKzI1LDE1IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgogCiAjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8cGxhdC9mbGFzaC5oPgogI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KICNpbmNsdWRlIDxwbGF0L2RtYS5oPgpAQCAtMTI2LDEwICsxMjcsOSBAQAogCX0sCiB9OwogCi1zdGF0aWMgc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgcGFsbXo3MV9yb21fZGF0YSA9IHsKLQkubWFwX25hbWUJPSAibWFwX3JvbSIsCi0JLm5hbWUJCT0gIm9uYm9hcmRyb20iLAorc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgcGFsbXo3MV9yb21fZGF0YSA9IHsKIAkud2lkdGgJCT0gMiwKKwkuc2V0X3ZwcAk9IG9tYXAxX3NldF92cHAsCiAJLnBhcnRzCQk9IHBhbG16NzFfcm9tX3BhcnRpdGlvbnMsCiAJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShwYWxtejcxX3JvbV9wYXJ0aXRpb25zKSwKIH07CkBAIC0xNDEsNyArMTQxLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBhbG16NzFfcm9tX2RldmljZSA9IHsKLQkubmFtZQk9ICJvbWFwZmxhc2giLAorCS5uYW1lCT0gInBoeXNtYXAtZmxhc2giLAogCS5pZAk9IC0xLAogCS5kZXYgPSB7CiAJCS5wbGF0Zm9ybV9kYXRhID0gJnBhbG16NzFfcm9tX2RhdGEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBlcnNldXMyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBlcnNldXMyLmMKaW5kZXggMTM4N2E0Zi4uZTg1NGQ1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYwpAQCAtMTgsMTkgKzE4LDIwIEBACiAjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KIAogI2luY2x1ZGUgPHBsYXQvdGMuaD4KICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KICNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvZnBnYS5oPgorI2luY2x1ZGUgPHBsYXQvZmxhc2guaD4KICNpbmNsdWRlIDxwbGF0L2tleXBhZC5oPgogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgpAQCAtMTE3LDkgKzExOCw5IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgZmxhc2hfcGxhdGZvcm1fZGF0YSBub3JfZGF0YSA9IHsKLQkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIG5vcl9kYXRhID0gewogCS53aWR0aAkJPSAyLAorCS5zZXRfdnBwCT0gb21hcDFfc2V0X3ZwcCwKIAkucGFydHMJCT0gbm9yX3BhcnRpdGlvbnMsCiAJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShub3JfcGFydGl0aW9ucyksCiB9OwpAQCAtMTMxLDcgKzEzMiw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBub3JfZGV2aWNlID0gewotCS5uYW1lCQk9ICJvbWFwZmxhc2giLAorCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKIAkuaWQJCT0gMCwKIAkuZGV2CQk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmbm9yX2RhdGEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1zeDEuYwppbmRleCA3YTk3ZmFjLi4yZmIxZTVmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXN4MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtc3gxLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtMjksMTAgKzMwLDEwIEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKICNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxwbGF0L2ZsYXNoLmg+CiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KICNpbmNsdWRlIDxwbGF0L2RtYS5oPgogI2luY2x1ZGUgPHBsYXQvaXJkYS5oPgpAQCAtMjg3LDkgKzI4OCw5IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIHN4MV9mbGFzaF9kYXRhID0gewotCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAorc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgc3gxX2ZsYXNoX2RhdGEgPSB7CiAJLndpZHRoCQk9IDIsCisJLnNldF92cHAJPSBvbWFwMV9zZXRfdnBwLAogCS5wYXJ0cwkJPSBzeDFfcGFydGl0aW9ucywKIAkubnJfcGFydHMJPSBBUlJBWV9TSVpFKHN4MV9wYXJ0aXRpb25zKSwKIH07CkBAIC0zMTAsNyArMzExLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHN4MV9mbGFzaF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm9tYXBmbGFzaCIsCisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAogCS5pZAkJPSAwLAogCS5kZXYJCT0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZzeDFfZmxhc2hfZGF0YSwKQEAgLTMyNyw3ICszMjgsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc3gxX2ZsYXNoX2RldmljZSA9IHsKLQkubmFtZQkJPSAib21hcGZsYXNoIiwKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJnN4MV9mbGFzaF9kYXRhLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtdm9pY2VibHVlLmMKaW5kZXggMTY5MTgzNS4uODdiOTQzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC12b2ljZWJsdWUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXZvaWNlYmx1ZS5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgpAQCAtMjcsMTEgKzI4LDExIEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAKICNpbmNsdWRlIDxwbGF0L2NvbW1vbi5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPHBsYXQvZmxhc2guaD4KICNpbmNsdWRlIDxwbGF0L211eC5oPgogI2luY2x1ZGUgPHBsYXQvdGMuaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgpAQCAtODYsOSArODcsOSBAQAogfQogYXJjaF9pbml0Y2FsbChleHRfdWFydF9pbml0KTsKIAotc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIHZvaWNlYmx1ZV9mbGFzaF9kYXRhID0gewotCS5tYXBfbmFtZQk9ICJjZmlfcHJvYmUiLAorc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgdm9pY2VibHVlX2ZsYXNoX2RhdGEgPSB7CiAJLndpZHRoCQk9IDIsCisJLnNldF92cHAJPSBvbWFwMV9zZXRfdnBwLAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB2b2ljZWJsdWVfZmxhc2hfcmVzb3VyY2UgPSB7CkBAIC05OCw3ICs5OSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB2b2ljZWJsdWVfZmxhc2hfZGV2aWNlID0gewotCS5uYW1lCQk9ICJvbWFwZmxhc2giLAorCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKIAkuaWQJCT0gMCwKIAkuZGV2CQk9IHsKIAkJLnBsYXRmb3JtX2RhdGEJPSAmdm9pY2VibHVlX2ZsYXNoX2RhdGEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMKaW5kZXggMDRmMWQyOS4uZTBhZWMxMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDUsIDIwMDkgTm9raWEgY29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA1LCAyMDA5LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KICAqICBXcml0dGVuIGJ5IFR1dWtrYSBUaWtrYW5lbiA8dHV1a2thLnRpa2thbmVuQGVsZWt0cm9iaXQuY29tPgogICoKICAqICBNb2RpZmllZCB0byB1c2Ugb21hcCBzaGFyZWQgY2xvY2sgZnJhbWV3b3JrIGJ5CkBAIC0zOCwyNiArMzgsNiBAQAogICogT21hcDEgc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi1zdGF0aWMgaW50IGNsa19vbWFwMV9kdW1teV9lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBjbGtfb21hcDFfZHVtbXlfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci19Ci0KLWNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2R1bW15ID0gewotCS5lbmFibGUJCT0gY2xrX29tYXAxX2R1bW15X2VuYWJsZSwKLQkuZGlzYWJsZQk9IGNsa19vbWFwMV9kdW1teV9kaXNhYmxlLAotfTsKLQotLyogWFhYIGNhbiBiZSByZXBsYWNlZCB3aXRoIGEgZml4ZWRfZGl2aXNvcl9yZWNhbGMgKi8KLXVuc2lnbmVkIGxvbmcgb21hcDFfd2F0Y2hkb2dfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyAxNDsKLX0KLQogdW5zaWduZWQgbG9uZyBvbWFwMV91YXJ0X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCiB7CiAJdW5zaWduZWQgaW50IHZhbCA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CkBAIC01NzcsOSArNTU3LDYgQEAKIAogbG9uZyBvbWFwMV9jbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKIHsKLQlpZiAoY2xrLT5mbGFncyAmIFJBVEVfRklYRUQpCi0JCXJldHVybiBjbGstPnJhdGU7Ci0KIAlpZiAoY2xrLT5yb3VuZF9yYXRlICE9IE5VTEwpCiAJCXJldHVybiBjbGstPnJvdW5kX3JhdGUoY2xrLCByYXRlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9ja19kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrX2RhdGEuYwppbmRleCA2NWU3YjViLi5hYTg1NThhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrX2RhdGEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrX2RhdGEuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9ja19kYXRhLmMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNSwgMjAwOSBOb2tpYSBjb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDUsIDIwMDktMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICogIFdyaXR0ZW4gYnkgVHV1a2thIFRpa2thbmVuIDx0dXVra2EudGlra2FuZW5AZWxla3Ryb2JpdC5jb20+CiAgKiAgQmFzZWQgb24gY2xvY2tzLmggYnkgVG9ueSBMaW5kZ3JlbiwgR29yZG9uIE1jTnV0dCBhbmQgUmlkZ2VSdW4sIEluYwogICoKQEAgLTI3LDEzICsyNyw2IEBACiAgKiBPbWFwMSBjbG9ja3MKICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIFhYWCBpcyB0aGlzIG5lY2Vzc2FyeT8gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGR1bW15X2NrID0gewotCS5uYW1lCT0gImR1bW15IiwKLQkub3BzCT0gJmNsa29wc19kdW1teSwKLQkuZmxhZ3MJPSBSQVRFX0ZJWEVELAotfTsKLQogc3RhdGljIHN0cnVjdCBjbGsgY2tfcmVmID0gewogCS5uYW1lCQk9ICJja19yZWYiLAogCS5vcHMJCT0gJmNsa29wc19udWxsLApAQCAtMTQ5LDcgKzE0Miw4IEBACiAJCS5mbGFncwkJPSBDTE9DS19JRExFX0NPTlRST0wsCiAJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhBUk1fSURMRUNUMiksCiAJCS5lbmFibGVfYml0CT0gRU5fV0RUQ0ssCi0JCS5yZWNhbGMJCT0gJm9tYXAxX3dhdGNoZG9nX3JlY2FsYywKKwkJLmZpeGVkX2Rpdgk9IDE0LAorCQkucmVjYWxjCQk9ICZvbWFwX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjLAogCX0sCiAJLmlkbGVjdF9zaGlmdAk9IDAsCiB9OwpAQCAtMzg4LDggKzM4Miw3IEBACiAJCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHJlYWwgcGFyZW50ICovCiAJCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCiAJCS5yYXRlCQk9IDQ4MDAwMDAwLAotCQkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQgfAotCQkJCSAgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJCS5mbGFncwkJPSBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCiAJCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzApLAogCQkuZW5hYmxlX2JpdAk9IDI5LAogCX0sCkBAIC00MjksOCArNDIyLDcgQEAKIAkJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcmVhbCBwYXJlbnQgKi8KIAkJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKIAkJLnJhdGUJCT0gNDgwMDAwMDAsCi0JCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCB8Ci0JCQkJICBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkJLmZsYWdzCQk9IEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKIAkJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMCksCiAJCS5lbmFibGVfYml0CT0gMzEsCiAJfSwKQEAgLTQ0Miw3ICs0MzQsNyBAQAogCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwogCS5yYXRlCQk9IDYwMDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAorCS5mbGFncwkJPSBFTkFCTEVfUkVHXzMyQklULAogCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhVTFBEX0NMT0NLX0NUUkwpLAogCS5lbmFibGVfYml0CT0gVVNCX01DTEtfRU5fQklULAogfTsKQEAgLTQ1Miw3ICs0NDQsNyBAQAogCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwogCS5yYXRlCQk9IDQ4MDAwMDAwLCAvKiBBY3R1YWxseSAyIGNsb2NrcywgMTJNSHogYW5kIDQ4TUh6ICovCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklULAorCS5mbGFncwkJPSBFTkFCTEVfUkVHXzMyQklULAogCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhNT0RfQ09ORl9DVFJMXzApLAogCS5lbmFibGVfYml0CT0gVVNCX0hPU1RfSEhDX1VIT1NUX0VOLAogfTsKQEAgLTQ2Myw3ICs0NTUsNyBAQAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudCAqLwogCS5yYXRlCQk9IDQ4MDAwMDAwLAogCS8qIE9UR19TWVNDT05fMi5PVEdfUEFERU4gPT0gMCAobm90IDE1MTAtY29tcGF0aWJsZSkgKi8KLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQsCisJLmZsYWdzCQk9IEVOQUJMRV9SRUdfMzJCSVQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE9UR19CQVNFICsgMHgwOCksIC8qIE9UR19TWVNDT05fMiAqLwogCS5lbmFibGVfYml0CT0gOCAvKiBVSE9TVF9FTiAqLywKIH07CkBAIC00NzMsNyArNDY1LDYgQEAKIAkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQgKi8KIAkucmF0ZQkJPSA0ODAwMDAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKIAkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoU09GVF9SRVFfUkVHKSwKIAkuZW5hYmxlX2JpdAk9IDQsCiB9OwpAQCAtNDgzLDcgKzQ3NCw2IEBACiAJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLyogRGlyZWN0IGZyb20gVUxQRCwgbm8gcGFyZW50ICovCiAJLnJhdGUJCT0gNDgwMDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKFNPRlRfUkVRX1JFRyksCiAJLmVuYWJsZV9iaXQJPSA4LAogfTsKQEAgLTQ5Myw3ICs0ODMsNiBAQAogCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS8qIERpcmVjdCBmcm9tIFVMUEQsIG5vIHBhcmVudC4gTWF5IGJlIGVuYWJsZWQgYnkgZXh0IGhhcmR3YXJlLiAqLwogCS5yYXRlCQk9IDEyMDAwMDAwLAotCS5mbGFncwkJPSBSQVRFX0ZJWEVELAogCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhTT0ZUX1JFUV9SRUcpLAogCS5lbmFibGVfYml0CT0gNiwKIH07CkBAIC01MTQsNyArNTAzLDYgQEAKIAkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkvKiBEaXJlY3QgZnJvbSBVTFBELCBubyBwYXJlbnQuIE1heSBiZSBlbmFibGVkIGJ5IGV4dCBoYXJkd2FyZS4gKi8KIAkucmF0ZQkJPSAxMjAwMDAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGJjbGtfMTZ4eCA9IHsKQEAgLTUyOSwzNiArNTE3LDM0IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtbWMxX2NrID0gewotCS5uYW1lCQk9ICJtbWNfY2siLAorCS5uYW1lCQk9ICJtbWMxX2NrIiwKIAkub3BzCQk9ICZjbGtvcHNfZ2VuZXJpYywKIAkvKiBGdW5jdGlvbmFsIGNsb2NrIGlzIGRpcmVjdCBmcm9tIFVMUEQsIGludGVyZmFjZSBjbG9jayBpcyBBUk1QRVIgKi8KIAkucGFyZW50CQk9ICZhcm1wZXJfY2suY2xrLAogCS5yYXRlCQk9IDQ4MDAwMDAwLAotCS5mbGFncwkJPSBSQVRFX0ZJWEVEIHwgRU5BQkxFX1JFR18zMkJJVCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAorCS5mbGFncwkJPSBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQMV9JT19BRERSRVNTKE1PRF9DT05GX0NUUkxfMCksCiAJLmVuYWJsZV9iaXQJPSAyMywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzJfY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY19jayIsCi0JLmlkCQk9IDEsCisJLm5hbWUJCT0gIm1tYzJfY2siLAogCS5vcHMJCT0gJmNsa29wc19nZW5lcmljLAogCS8qIEZ1bmN0aW9uYWwgY2xvY2sgaXMgZGlyZWN0IGZyb20gVUxQRCwgaW50ZXJmYWNlIGNsb2NrIGlzIEFSTVBFUiAqLwogCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCiAJLnJhdGUJCT0gNDgwMDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfUkVHXzMyQklUIHwgQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCisJLmZsYWdzCQk9IEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKIAkuZW5hYmxlX3JlZwk9IE9NQVAxX0lPX0FERFJFU1MoTU9EX0NPTkZfQ1RSTF8wKSwKIAkuZW5hYmxlX2JpdAk9IDIwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbW1jM19jayA9IHsKLQkubmFtZQkJPSAibW1jX2NrIiwKLQkuaWQJCT0gMiwKKwkubmFtZQkJPSAibW1jM19jayIsCiAJLm9wcwkJPSAmY2xrb3BzX2dlbmVyaWMsCiAJLyogRnVuY3Rpb25hbCBjbG9jayBpcyBkaXJlY3QgZnJvbSBVTFBELCBpbnRlcmZhY2UgY2xvY2sgaXMgQVJNUEVSICovCiAJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKIAkucmF0ZQkJPSA0ODAwMDAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9SRUdfMzJCSVQgfCBDTE9DS19OT19JRExFX1BBUkVOVCwKKwkuZmxhZ3MJCT0gRU5BQkxFX1JFR18zMkJJVCB8IENMT0NLX05PX0lETEVfUEFSRU5ULAogCS5lbmFibGVfcmVnCT0gT01BUDFfSU9fQUREUkVTUyhTT0ZUX1JFUV9SRUcpLAogCS5lbmFibGVfYml0CT0gMTIsCiB9OwpAQCAtNTc2LDcgKzU2Miw2IEBACiByZW1haW5zIGFjdGl2ZSBkdXJpbmcgTVBVIGlkbGUgd2hlbmV2ZXIgdGhpcyBpcyBlbmFibGVkICovCiBzdGF0aWMgc3RydWN0IGNsayBpMmNfZmNrID0gewogCS5uYW1lCQk9ICJpMmNfZmNrIiwKLQkuaWQJCT0gMSwKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCiAJLnBhcmVudAkJPSAmYXJteG9yX2NrLmNsaywKQEAgLTU4NSw3ICs1NzAsNiBAQAogCiBzdGF0aWMgc3RydWN0IGNsayBpMmNfaWNrID0gewogCS5uYW1lCQk9ICJpMmNfaWNrIiwKLQkuaWQJCT0gMSwKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkuZmxhZ3MJCT0gQ0xPQ0tfTk9fSURMRV9QQVJFTlQsCiAJLnBhcmVudAkJPSAmYXJtcGVyX2NrLmNsaywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKaW5kZXggYTJkMDdhYS4uMzc5MTAwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9kZXZpY2VzLmMKQEAgLTczLDcgKzczLDcgQEAKICMgIGRlZmluZSBJTlRfRFNQX01BSUxCT1gxCUlOVF8xNjEwX0RTUF9NQUlMQk9YMQogI2VuZGlmCiAKLSNkZWZpbmUgT01BUDFfTUJPWF9CQVNFCQlPTUFQMV9JT19BRERSRVNTKE9NQVAxNlhYX01BSUxCT1hfQkFTRSkKKyNkZWZpbmUgT01BUDFfTUJPWF9CQVNFCQlPTUFQMTZYWF9NQUlMQk9YX0JBU0UKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtYm94X3Jlc291cmNlc1tdID0gewogCXsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvZmxhc2guYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvZmxhc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjA3YTc4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9mbGFzaC5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBGbGFzaCBzdXBwb3J0IGZvciBPTUFQMQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CisKKyNpbmNsdWRlIDxwbGF0L2lvLmg+CisjaW5jbHVkZSA8cGxhdC90Yy5oPgorCit2b2lkIG9tYXAxX3NldF92cHAoc3RydWN0IG1hcF9pbmZvICptYXAsIGludCBlbmFibGUpCit7CisJc3RhdGljIGludCBjb3VudDsKKwl1MzIgbDsKKworCWlmIChlbmFibGUpIHsKKwkJaWYgKGNvdW50KysgPT0gMCkgeworCQkJbCA9IG9tYXBfcmVhZGwoRU1JRlNfQ09ORklHKTsKKwkJCWwgfD0gT01BUF9FTUlGU19DT05GSUdfV1A7CisJCQlvbWFwX3dyaXRlbChsLCBFTUlGU19DT05GSUcpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGNvdW50ICYmICgtLWNvdW50ID09IDApKSB7CisJCQlsID0gb21hcF9yZWFkbChFTUlGU19DT05GSUcpOworCQkJbCAmPSB+T01BUF9FTUlGU19DT05GSUdfV1A7CisJCQlvbWFwX3dyaXRlbChsLCBFTUlGU19DT05GSUcpOworCQl9CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pMmMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaTJjLmMKaW5kZXggMWJmNDczNS4uNTQ0NmM5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pMmMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2kyYy5jCkBAIC0yMyw5ICsyMyw3IEBACiAjaW5jbHVkZSA8cGxhdC9tdXguaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCi1pbnQgX19pbml0IG9tYXBfcmVnaXN0ZXJfaTJjX2J1cyhpbnQgYnVzX2lkLCB1MzIgY2xrcmF0ZSwKLQkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvIGNvbnN0ICppbmZvLAotCQkJICB1bnNpZ25lZCBsZW4pCit2b2lkIF9faW5pdCBvbWFwMV9pMmNfbXV4X3BpbnMoaW50IGJ1c19pZCkKIHsKIAlpZiAoY3B1X2lzX29tYXA3eHgoKSkgewogCQlvbWFwX2NmZ19yZWcoSTJDXzdYWF9TREEpOwpAQCAtMzQsNiArMzIsNCBAQAogCQlvbWFwX2NmZ19yZWcoSTJDX1NEQSk7CiAJCW9tYXBfY2ZnX3JlZyhJMkNfU0NMKTsKIAl9Ci0KLQlyZXR1cm4gb21hcF9wbGF0X3JlZ2lzdGVyX2kyY19idXMoYnVzX2lkLCBjbGtyYXRlLCBpbmZvLCBsZW4pOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtb21hcDEvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKaW5kZXggOGM3NGNhYi4uYjZkOTU4NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMSwxOCArMTEsODAgQEAKICAqCiAqLwogCisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorCisjaW5jbHVkZSA8cGxhdC9zZXJpYWwuaD4KKworCQkucHVzaHNlY3Rpb24gLmRhdGEKK29tYXBfdWFydF9waHlzOgkud29yZAkweDAKK29tYXBfdWFydF92aXJ0Ogkud29yZAkweDAKKwkJLnBvcHNlY3Rpb24KKworCQkvKgorCQkgKiBOb3RlIHRoYXQgdGhpcyBjb2RlIHdvbid0IHdvcmsgaWYgdGhlIGJvb3Rsb2FkZXIgcGFzc2VzCisJCSAqIGEgd3JvbmcgbWFjaGluZSBJRCBudW1iZXIgaW4gcjEuIFRvIGRlYnVnLCBqdXN0IGhhcmRjb2RlCisJCSAqIHRoZSBkZXNpcmVkIFVBUlQgcGh5cyBhbmQgdmlydCBhZGRyZXNzZXMgdGVtcG9yYXJpbHkgaW50bworCQkgKiB0aGUgb21hcF91YXJ0X3BoeXMgYW5kIG9tYXBfdWFydF92aXJ0IGFib3ZlLgorCQkgKi8KIAkJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCisKKwkJLyogVXNlIG9tYXBfdWFydF9waHlzL3ZpcnQgaWYgYWxyZWFkeSBjb25maWd1cmVkICovCis5OgkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKKwkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPworCQlsZHJlcQlccngsID1vbWFwX3VhcnRfcGh5cwlAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcworCQlsZHJuZQlccngsID1vbWFwX3VhcnRfdmlydAlAIHZpcnR1YWwgYmFzZQorCQlsZHIJXHJ4LCBbXHJ4LCAjMF0KKwkJY21wCVxyeCwgIzAJCQlAIGlzIHBvcnQgY29uZmlndXJlZD8KKwkJYm5lCTk5ZgkJCUAgYWxyZWFkeSBjb25maWd1cmVkCisKKwkJLyogQ2hlY2sgN1hYIFVBUlQxIHNjcmF0Y2hwYWQgcmVnaXN0ZXIgZm9yIHVhcnQgdG8gdXNlICovCiAJCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJCXRzdAlccngsICMxCQkJQCBNTVUgZW5hYmxlZD8KIAkJbW92ZXEJXHJ4LCAjMHhmZjAwMDAwMAlAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcwogCQltb3ZuZQlccngsICMweGZlMDAwMDAwCUAgdmlydHVhbCBiYXNlCi0JCW9ycglccngsIFxyeCwgIzB4MDBmYjAwMDAKLSNpZmRlZiBDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMwotCQlvcnIJXHJ4LCBccngsICMweDAwMDA5MDAwCUAgVUFSVCAzCi0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQyKSB8fCBkZWZpbmVkKENPTkZJR19PTUFQX0xMX0RFQlVHX1VBUlQzKQotCQlvcnIJXHJ4LCBccngsICMweDAwMDAwODAwCUAgVUFSVCAyICYgMwotI2VuZGlmCisJCW9ycglccngsIFxyeCwgIzB4MDBmYjAwMDAJQCBPTUFQMVVBUlQxCisJCWxkcmIJXHJ4LCBbXHJ4LCAjKFVBUlRfU0NSIDw8IE9NQVA3WFhfUE9SVF9TSElGVCldCisJCWNtcAlccngsICMwCQkJQCBhbnl0aGluZyBpbiA3WFggc2NyYXRjaHBhZD8KKwkJYm5lCTEwZgkJCUAgZm91bmQgN1hYIHVhcnQKKworCQkvKiBDaGVjayAxNXh4LzE2eHggVUFSVDEgc2NyYXRjaHBhZCByZWdpc3RlciBmb3IgdWFydCB0byB1c2UgKi8KKwkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKKwkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPworCQltb3ZlcQlccngsICMweGZmMDAwMDAwCUAgcGh5c2ljYWwgYmFzZSBhZGRyZXNzCisJCW1vdm5lCVxyeCwgIzB4ZmUwMDAwMDAJQCB2aXJ0dWFsIGJhc2UKKwkJb3JyCVxyeCwgXHJ4LCAjMHgwMGZiMDAwMAlAIE9NQVAxVUFSVDEKKwkJbGRyYglccngsIFtccngsICMoVUFSVF9TQ1IgPDwgT01BUF9QT1JUX1NISUZUKV0KKworCQkvKiBTZWxlY3QgdGhlIFVBUlQgdG8gdXNlIGJhc2VkIG9uIHRoZSBVQVJUMSBzY3JhdGNocGFkIHZhbHVlICovCisxMDoJCWNtcAlccngsICMwCQkJQCBubyBwb3J0IGNvbmZpZ3VyZWQ/CisJCWJlcQkxMWYJCQlAIGlmIG5vbmUsIHRyeSB0byB1c2UgVUFSVDEKKwkJY21wCVxyeCwgI09NQVAxVUFSVDEKKwkJYmVxCTExZgkJCUAgY29uZmlndXJlIE9NQVAxVUFSVDEKKwkJY21wCVxyeCwgI09NQVAxVUFSVDIKKwkJYmVxCTEyZgkJCUAgY29uZmlndXJlIE9NQVAxVUFSVDIKKwkJY21wCVxyeCwgI09NQVAxVUFSVDMKKwkJYmVxCTEzZgkJCUAgY29uZmlndXJlIE9NQVAyVUFSVDMKKworCQkvKiBDb25maWd1cmUgdGhlIFVBUlQgb2Zmc2V0IGZyb20gdGhlIHBoeXMvdmlydCBiYXNlICovCisxMToJCW1vdglccngsICMweDAwZmIwMDAwCUAgT01BUDFVQVJUMQorCQliCTk4ZgorMTI6CQltb3YJXHJ4LCAjMHgwMGZiMDAwMAlAIE9NQVAxVUFSVDEKKwkJb3JyCVxyeCwgXHJ4LCAjMHgwMDAwMDgwMAlAIE9NQVAxVUFSVDIKKwkJYgk5OGYKKzEzOgkJbW92CVxyeCwgIzB4MDBmYjAwMDAJQCBPTUFQMVVBUlQxCisJCW9ycglccngsIFxyeCwgIzB4MDAwMDA4MDAJQCBPTUFQMVVBUlQyCisJCW9ycglccngsIFxyeCwgIzB4MDAwMDkwMDAJQCBPTUFQMVVBUlQzCisKKwkJLyogU3RvcmUgYm90aCBwaHlzIGFuZCB2aXJ0IGFkZHJlc3MgZm9yIHRoZSB1YXJ0ICovCis5ODoJCWFkZAlccngsIFxyeCwgIzB4ZmYwMDAwMDAJQCBwaHlzIGJhc2UKKwkJbGRyCVx0bXAsID1vbWFwX3VhcnRfcGh5cworCQlzdHIJXHJ4LCBbXHRtcCwgIzBdCisJCXN1YglccngsIFxyeCwgIzB4ZmYwMDAwMDAJQCBwaHlzIGJhc2UKKwkJYWRkCVxyeCwgXHJ4LCAjMHhmZTAwMDAwMAlAIHZpcnQgYmFzZQorCQlsZHIJXHRtcCwgPW9tYXBfdWFydF92aXJ0CisJCXN0cglccngsIFtcdG1wLCAjMF0KKwkJYgk5YgorOTk6CiAJCS5lbmRtCiAKIAkJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CkBAIC0zMCwxMyArOTIsMTMgQEAKIAkJLmVuZG0KIAogCQkubWFjcm8JYnVzeXVhcnQscmQscngKLTEwMDE6CQlsZHJiCVxyZCwgW1xyeCwgIygweDUgPDwgMildCUAgT01BUC0xNTEwIGFuZCBmcmllbmRzCi0JCWFuZAlccmQsIFxyZCwgIzB4NjAKLQkJdGVxCVxyZCwgIzB4NjAKKzEwMDE6CQlsZHJiCVxyZCwgW1xyeCwgIyhVQVJUX0xTUiA8PCBPTUFQX1BPUlRfU0hJRlQpXQorCQlhbmQJXHJkLCBccmQsICMoVUFSVF9MU1JfVEVNVCB8IFVBUlRfTFNSX1RIUkUpCisJCXRlcQlccmQsICMoVUFSVF9MU1JfVEVNVCB8IFVBUlRfTFNSX1RIUkUpCiAJCWJlcQkxMDAyZgotCQlsZHJiCVxyZCwgW1xyeCwgIygweDUgPDwgMCldCUAgT01BUC03MzAgb25seQotCQlhbmQJXHJkLCBccmQsICMweDYwCi0JCXRlcQlccmQsICMweDYwCisJCWxkcmIJXHJkLCBbXHJ4LCAjKFVBUlRfTFNSIDw8IE9NQVA3WFhfUE9SVF9TSElGVCldCisJCWFuZAlccmQsIFxyZCwgIyhVQVJUX0xTUl9URU1UIHwgVUFSVF9MU1JfVEhSRSkKKwkJdGVxCVxyZCwgIyhVQVJUX0xTUl9URU1UIHwgVUFSVF9MU1JfVEhSRSkKIAkJYm5lCTEwMDFiCiAxMDAyOgogCQkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tYWlsYm94LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL21haWxib3guYwppbmRleCBjYWY4ODlhLi40ZjViM2RhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL21haWxib3guYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL21haWxib3guYwpAQCAtMTQ2LDcgKzE0Niw2IEBACiBzdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwMV9tYm94X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXM7Ci0JaW50IHJldCA9IDA7CiAKIAlpZiAocGRldi0+bnVtX3Jlc291cmNlcyAhPSAyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgbnVtYmVyIG9mIHJlc291cmNlczogJWRcbiIsCkBAIC0xNjAsMTIgKzE1OSwxOCBAQAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIG1lbSByZXNvdXJjZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KLQltYm94X2Jhc2UgPSByZXMtPnN0YXJ0OworCisJbWJveF9iYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghbWJveF9iYXNlKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJLyogRFNQIElSUSAqLwogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CiAJaWYgKHVubGlrZWx5KCFyZXMpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgaXJxIHJlc291cmNlXG4iKTsKKwkJaW91bm1hcChtYm94X2Jhc2UpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJbWJveF9kc3BfaW5mby5pcnEgPSByZXMtPnN0YXJ0OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9tY2JzcC5jCmluZGV4IDZiZGRjZTEuLmY5YTVjZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbWNic3AuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL21jYnNwLmMKQEAgLTk5LDkgKzk5LDExIEBACiAJfSwKIH07CiAjZGVmaW5lIE9NQVA3WFhfTUNCU1BfUERBVEFfU1oJCUFSUkFZX1NJWkUob21hcDd4eF9tY2JzcF9wZGF0YSkKKyNkZWZpbmUgT01BUDdYWF9NQ0JTUF9SRUdfTlVNCQkoT01BUF9NQ0JTUF9SRUdfWENFUkggLyBzaXplb2YodTE2KSArIDEpCiAjZWxzZQogI2RlZmluZSBvbWFwN3h4X21jYnNwX3BkYXRhCQlOVUxMCiAjZGVmaW5lIE9NQVA3WFhfTUNCU1BfUERBVEFfU1oJCTAKKyNkZWZpbmUgT01BUDdYWF9NQ0JTUF9SRUdfTlVNCQkwCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNVhYCkBAIC0xMzIsOSArMTM0LDExIEBACiAJfSwKIH07CiAjZGVmaW5lIE9NQVAxNVhYX01DQlNQX1BEQVRBX1NaCQlBUlJBWV9TSVpFKG9tYXAxNXh4X21jYnNwX3BkYXRhKQorI2RlZmluZSBPTUFQMTVYWF9NQ0JTUF9SRUdfTlVNCQkoT01BUF9NQ0JTUF9SRUdfWENFUkggLyBzaXplb2YodTE2KSArIDEpCiAjZWxzZQogI2RlZmluZSBvbWFwMTV4eF9tY2JzcF9wZGF0YQkJTlVMTAogI2RlZmluZSBPTUFQMTVYWF9NQ0JTUF9QREFUQV9TWgkJMAorI2RlZmluZSBPTUFQMTVYWF9NQ0JTUF9SRUdfTlVNCQkwCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxNlhYCkBAIC0xNjUsMTkgKzE2OSwyNSBAQAogCX0sCiB9OwogI2RlZmluZSBPTUFQMTZYWF9NQ0JTUF9QREFUQV9TWgkJQVJSQVlfU0laRShvbWFwMTZ4eF9tY2JzcF9wZGF0YSkKKyNkZWZpbmUgT01BUDE2WFhfTUNCU1BfUkVHX05VTQkJKE9NQVBfTUNCU1BfUkVHX1hDRVJIIC8gc2l6ZW9mKHUxNikgKyAxKQogI2Vsc2UKICNkZWZpbmUgb21hcDE2eHhfbWNic3BfcGRhdGEJCU5VTEwKICNkZWZpbmUgT01BUDE2WFhfTUNCU1BfUERBVEFfU1oJCTAKKyNkZWZpbmUgT01BUDE2WFhfTUNCU1BfUkVHX05VTQkJMAogI2VuZGlmCiAKIGludCBfX2luaXQgb21hcDFfbWNic3BfaW5pdCh2b2lkKQogewotCWlmIChjcHVfaXNfb21hcDd4eCgpKQorCWlmIChjcHVfaXNfb21hcDd4eCgpKSB7CiAJCW9tYXBfbWNic3BfY291bnQgPSBPTUFQN1hYX01DQlNQX1BEQVRBX1NaOwotCWlmIChjcHVfaXNfb21hcDE1eHgoKSkKKwkJb21hcF9tY2JzcF9jYWNoZV9zaXplID0gT01BUDdYWF9NQ0JTUF9SRUdfTlVNICogc2l6ZW9mKHUxNik7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE1eHgoKSkgewogCQlvbWFwX21jYnNwX2NvdW50ID0gT01BUDE1WFhfTUNCU1BfUERBVEFfU1o7Ci0JaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQorCQlvbWFwX21jYnNwX2NhY2hlX3NpemUgPSBPTUFQMTVYWF9NQ0JTUF9SRUdfTlVNICogc2l6ZW9mKHUxNik7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkgewogCQlvbWFwX21jYnNwX2NvdW50ID0gT01BUDE2WFhfTUNCU1BfUERBVEFfU1o7CisJCW9tYXBfbWNic3BfY2FjaGVfc2l6ZSA9IE9NQVAxNlhYX01DQlNQX1JFR19OVU0gKiBzaXplb2YodTE2KTsKKwl9CiAKIAltY2JzcF9wdHIgPSBremFsbG9jKG9tYXBfbWNic3BfY291bnQgKiBzaXplb2Yoc3RydWN0IG9tYXBfbWNic3AgKiksCiAJCQkJCQkJCUdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvc2VyaWFsLmMKaW5kZXggNmU1MjA3Yy4uMzQ5ZGU5MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9zZXJpYWwuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL3NlcmlhbC5jCkBAIC02NCw3ICs2NCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGFbXSA9IHsKIAl7Ci0JCS5tYXBiYXNlCT0gT01BUF9VQVJUMV9CQVNFLAorCQkubWFwYmFzZQk9IE9NQVAxX1VBUlQxX0JBU0UsCiAJCS5pcnEJCT0gSU5UX1VBUlQxLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS5pb3R5cGUJCT0gVVBJT19NRU0sCkBAIC03Miw3ICs3Miw3IEBACiAJCS51YXJ0Y2xrCT0gT01BUDE2WFhfQkFTRV9CQVVEICogMTYsCiAJfSwKIAl7Ci0JCS5tYXBiYXNlCT0gT01BUF9VQVJUMl9CQVNFLAorCQkubWFwYmFzZQk9IE9NQVAxX1VBUlQyX0JBU0UsCiAJCS5pcnEJCT0gSU5UX1VBUlQyLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS5pb3R5cGUJCT0gVVBJT19NRU0sCkBAIC04MCw3ICs4MCw3IEBACiAJCS51YXJ0Y2xrCT0gT01BUDE2WFhfQkFTRV9CQVVEICogMTYsCiAJfSwKIAl7Ci0JCS5tYXBiYXNlCT0gT01BUF9VQVJUM19CQVNFLAorCQkubWFwYmFzZQk9IE9NQVAxX1VBUlQzX0JBU0UsCiAJCS5pcnEJCT0gSU5UX1VBUlQzLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS5pb3R5cGUJCT0gVVBJT19NRU0sCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9tYXAyL0tjb25maWcKaW5kZXggNjA2YmYwNC4uYThhM2QxZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvS2NvbmZpZwpAQCAtMSwyOCArMSwxOSBAQAogY29tbWVudCAiT01BUCBDb3JlIFR5cGUiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAyCiAKLWNvbmZpZyBBUkNIX09NQVAyNFhYCi0JYm9vbCAiT01BUDI0eHggQmFzZWQgU3lzdGVtIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMgotCiBjb25maWcgQVJDSF9PTUFQMjQyMAogCWJvb2wgIk9NQVAyNDIwIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAyNFhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyCiAJc2VsZWN0IE9NQVBfRE1fVElNRVIKIAlzZWxlY3QgQVJDSF9PTUFQX09URwogCiBjb25maWcgQVJDSF9PTUFQMjQzMAogCWJvb2wgIk9NQVAyNDMwIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAyNFhYCi0KLWNvbmZpZyBBUkNIX09NQVAzNFhYCi0JYm9vbCAiT01BUDM0eHggQmFzZWQgU3lzdGVtIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMwotCXNlbGVjdCBVU0JfQVJDSF9IQVNfRUhDSQorCWRlcGVuZHMgb24gQVJDSF9PTUFQMgogCiBjb25maWcgQVJDSF9PTUFQMzQzMAogCWJvb2wgIk9NQVAzNDMwIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKIAlzZWxlY3QgQVJDSF9PTUFQX09URwogCiBjb25maWcgT01BUF9QQUNLQUdFX0NCQwpAQCAtMzgsMTEgKzI5LDExIEBACiAgICAgICAgYm9vbAogCiBjb21tZW50ICJPTUFQIEJvYXJkIFR5cGUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAyIHx8IEFSQ0hfT01BUDMgfHwgQVJDSF9PTUFQNAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMlBMVVMKIAogY29uZmlnIE1BQ0hfT01BUF9HRU5FUklDCiAJYm9vbCAiR2VuZXJpYyBPTUFQIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMiAmJiBBUkNIX09NQVAyNFhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyCiAKIGNvbmZpZyBNQUNIX09NQVAyX1RVU0I2MDEwCiAJYm9vbApAQCAtNTEsNTUgKzQyLDU5IEBACiAKIGNvbmZpZyBNQUNIX09NQVBfSDQKIAlib29sICJPTUFQIDI0MjAgSDQgYm9hcmQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAyICYmIEFSQ0hfT01BUDI0WFgKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDIKIAlzZWxlY3QgT01BUF9ERUJVR19ERVZJQ0VTCiAKIGNvbmZpZyBNQUNIX09NQVBfQVBPTExPTgogCWJvb2wgIk9NQVAgMjQyMCBBcG9sbG9uIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMiAmJiBBUkNIX09NQVAyNFhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyCiAKIGNvbmZpZyBNQUNIX09NQVBfMjQzMFNEUAogCWJvb2wgIk9NQVAgMjQzMCBTRFAgYm9hcmQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAyICYmIEFSQ0hfT01BUDI0WFgKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDIKIAogY29uZmlnIE1BQ0hfT01BUDNfQkVBR0xFCiAJYm9vbCAiT01BUDMgQkVBR0xFIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAzCiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQkIKIAorY29uZmlnIE1BQ0hfREVWS0lUODAwMAorICAgICAgICBib29sICJERVZLSVQ4MDAwIGJvYXJkIgorICAgICAgICBkZXBlbmRzIG9uIEFSQ0hfT01BUDMKKwogY29uZmlnIE1BQ0hfT01BUF9MRFAKIAlib29sICJPTUFQMyBMRFAgYm9hcmQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKIAlzZWxlY3QgT01BUF9QQUNLQUdFX0NCQgogCiBjb25maWcgTUFDSF9PVkVSTwogCWJvb2wgIkd1bXN0aXggT3Zlcm8gYm9hcmQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKIAlzZWxlY3QgT01BUF9QQUNLQUdFX0NCQgogCiBjb25maWcgTUFDSF9PTUFQM0VWTQogCWJvb2wgIk9NQVAgMzUzMCBFVk0gYm9hcmQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKIAlzZWxlY3QgT01BUF9QQUNLQUdFX0NCQgogCiBjb25maWcgTUFDSF9PTUFQMzUxN0VWTQogCWJvb2wgIk9NQVAzNTE3LyBBTTM1MTcgRVZNIGJvYXJkIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAzCiAJc2VsZWN0IE9NQVBfUEFDS0FHRV9DQkIKIAogY29uZmlnIE1BQ0hfT01BUDNfUEFORE9SQQogCWJvb2wgIk9NQVAzIFBhbmRvcmEiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKIAlzZWxlY3QgT01BUF9QQUNLQUdFX0NCQgogCiBjb25maWcgTUFDSF9PTUFQM19UT1VDSEJPT0sKIAlib29sICJPTUFQMyBUb3VjaCBCb29rIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAzCiAJc2VsZWN0IEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UKIAogY29uZmlnIE1BQ0hfT01BUF8zNDMwU0RQCiAJYm9vbCAiT01BUCAzNDMwIFNEUCBib2FyZCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMwogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JCCiAKIGNvbmZpZyBNQUNIX05PS0lBX044MDAKQEAgLTEyMCwzMyArMTE1LDMzIEBACiAKIGNvbmZpZyBNQUNIX05PS0lBX1JYNTEKIAlib29sICJOb2tpYSBSWC01MSBib2FyZCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMwogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JCCiAKIGNvbmZpZyBNQUNIX09NQVBfWk9PTTIKIAlib29sICJPTUFQMyBab29tMiBib2FyZCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMwogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JCCiAKIGNvbmZpZyBNQUNIX09NQVBfWk9PTTMKIAlib29sICJPTUFQMzYzMCBab29tMyBib2FyZCIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMwogCXNlbGVjdCBPTUFQX1BBQ0tBR0VfQ0JQCiAKIGNvbmZpZyBNQUNIX0NNX1QzNQogCWJvb2wgIkNvbXB1TGFiIENNLVQzNSBtb2R1bGUiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKIAlzZWxlY3QgT01BUF9QQUNLQUdFX0NVUwogCXNlbGVjdCBPTUFQX01VWAogCiBjb25maWcgTUFDSF9JR0VQMDAyMAotCWJvb2wgIklHRVAwMDIwIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMyAmJiBBUkNIX09NQVAzNFhYCisJYm9vbCAiSUdFUCB2MiBib2FyZCIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKIAlzZWxlY3QgT01BUF9QQUNLQUdFX0NCQgogCiBjb25maWcgTUFDSF9PTUFQXzM2MzBTRFAKIAlib29sICJPTUFQMzYzMCBTRFAgYm9hcmQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAzICYmIEFSQ0hfT01BUDM0WFgKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMKIAlzZWxlY3QgT01BUF9QQUNLQUdFX0NCUAogCiBjb25maWcgTUFDSF9PTUFQXzQ0MzBTRFAKQEAgLTE2Miw3ICsxNTcsNyBAQAogCiBjb25maWcgT01BUDNfU0RSQ19BQ19USU1JTkcKIAlib29sICJFbmFibGUgU0RSQyBBQyB0aW1pbmcgcmVnaXN0ZXIgY2hhbmdlcyIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgQVJDSF9PTUFQMzRYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMwogCWRlZmF1bHQgbgogCWhlbHAKIAkgIElmIHlvdSBrbm93IHRoYXQgbm9uZSBvZiB5b3VyIHN5c3RlbSBpbml0aWF0b3JzIHdpbGwgYXR0ZW1wdCB0bwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtb21hcDIvTWFrZWZpbGUKaW5kZXggYjMyNjc4Yi4uMjA2OWZiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL01ha2VmaWxlCkBAIC01LDE1ICs1LDE3IEBACiAjIENvbW1vbiBzdXBwb3J0CiBvYmoteSA6PSBpZC5vIGlvLm8gY29udHJvbC5vIG11eC5vIGRldmljZXMubyBzZXJpYWwubyBncG1jLm8gdGltZXItZ3AubwogCi1vbWFwLTItMy1jb21tb24JCQkJPSBpcnEubyBzZHJjLm8gb21hcF9od21vZC5vCi1vbWFwLTMtNC1jb21tb24JCQkJPSBkcGxsLm8KK29tYXAtMi0zLWNvbW1vbgkJCQk9IGlycS5vIHNkcmMubworaHdtb2QtY29tbW9uCQkJCT0gb21hcF9od21vZC5vIFwKKwkJCQkJICBvbWFwX2h3bW9kX2NvbW1vbl9kYXRhLm8KIHByY20tY29tbW9uCQkJCT0gcHJjbS5vIHBvd2VyZG9tYWluLm8KLWNsb2NrLWNvbW1vbgkJCQk9IGNsb2NrLm8gY2xvY2tfY29tbW9uX2RhdGEubyBjbG9ja2RvbWFpbi5vCitjbG9jay1jb21tb24JCQkJPSBjbG9jay5vIGNsb2NrX2NvbW1vbl9kYXRhLm8gXAorCQkJCQkgIGNsb2NrZG9tYWluLm8gY2xrdF9kcGxsLm8gXAorCQkJCQkgIGNsa3RfY2xrc2VsLm8KIAotb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpICs9ICQob21hcC0yLTMtY29tbW9uKSAkKHByY20tY29tbW9uKSAkKGNsb2NrLWNvbW1vbikKLW9iai0kKENPTkZJR19BUkNIX09NQVAzKSArPSAkKG9tYXAtMi0zLWNvbW1vbikgJChwcmNtLWNvbW1vbikgJChjbG9jay1jb21tb24pIFwKLQkJCSAgICAkKG9tYXAtMy00LWNvbW1vbikKLW9iai0kKENPTkZJR19BUkNIX09NQVA0KSArPSAkKG9tYXAtMy00LWNvbW1vbikgcHJjbS5vIGNsb2NrLm8KK29iai0kKENPTkZJR19BUkNIX09NQVAyKSArPSAkKG9tYXAtMi0zLWNvbW1vbikgJChwcmNtLWNvbW1vbikgJChod21vZC1jb21tb24pCitvYmotJChDT05GSUdfQVJDSF9PTUFQMykgKz0gJChvbWFwLTItMy1jb21tb24pICQocHJjbS1jb21tb24pICQoaHdtb2QtY29tbW9uKQorb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpICs9ICQocHJjbS1jb21tb24pCiAKIG9iai0kKENPTkZJR19PTUFQX01DQlNQKSArPSBtY2JzcC5vCiAKQEAgLTI2LDYgKzI4LDEwIEBACiBvYmotJChDT05GSUdfQVJDSF9PTUFQMjQzMCkJCSs9IHNyYW0yNDN4Lm8KIG9iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gc3JhbTM0eHgubwogCitBRkxBR1Nfc3JhbTI0MngubwkJCTo9LVdhLC1tYXJjaD1hcm12NgorQUZMQUdTX3NyYW0yNDN4Lm8JCQk6PS1XYSwtbWFyY2g9YXJtdjYKK0FGTEFHU19zcmFtMzR4eC5vCQkJOj0tV2EsLW1hcmNoPWFybXY3LWEKKwogIyBQaW4gbXVsdGlwbGV4aW5nCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9IG11eDM0eHgubwogCkBAIC0zNiw5ICs0MiwxMyBAQAogIyBQb3dlciBNYW5hZ2VtZW50CiBpZmVxICgkKENPTkZJR19QTSkseSkKIG9iai0kKENPTkZJR19BUkNIX09NQVAyKQkJKz0gcG0yNHh4Lm8KLW9iai0kKENPTkZJR19BUkNIX09NQVAyNFhYKQkJKz0gc2xlZXAyNHh4Lm8KK29iai0kKENPTkZJR19BUkNIX09NQVAyKQkJKz0gc2xlZXAyNHh4Lm8KIG9iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gcG0zNHh4Lm8gc2xlZXAzNHh4Lm8gY3B1aWRsZTM0eHgubwogb2JqLSQoQ09ORklHX1BNX0RFQlVHKQkJCSs9IHBtLWRlYnVnLm8KKworQUZMQUdTX3NsZWVwMjR4eC5vCQkJOj0tV2EsLW1hcmNoPWFybXY2CitBRkxBR1Nfc2xlZXAzNHh4Lm8JCQk6PS1XYSwtbWFyY2g9YXJtdjctYQorCiBlbmRpZgogCiAjIFBSQ00KQEAgLTQ3LDE0ICs1NywzMSBAQAogb2JqLSQoQ09ORklHX0FSQ0hfT01BUDQpCQkrPSBjbTR4eHgubwogCiAjIENsb2NrIGZyYW1ld29yawotb2JqLSQoQ09ORklHX0FSQ0hfT01BUDIpCQkrPSBjbG9jazJ4eHgubyBjbG9jazJ4eHhfZGF0YS5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQMikJCSs9ICQoY2xvY2stY29tbW9uKSBjbG9jazJ4eHgubyBcCisJCQkJCSAgIGNsa3QyeHh4X3N5cy5vIFwKKwkJCQkJICAgY2xrdDJ4eHhfZHBsbGNvcmUubyBcCisJCQkJCSAgIGNsa3QyeHh4X3ZpcnRfcHJjbV9zZXQubyBcCisJCQkJCSAgIGNsa3QyeHh4X2FwbGwubyBjbGt0Mnh4eF9vc2Mubworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDI0MjApCQkrPSBjbG9jazI0MjBfZGF0YS5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQMjQzMCkJCSs9IGNsb2NrMjQzMC5vIGNsb2NrMjQzMF9kYXRhLm8KK29iai0kKENPTkZJR19BUkNIX09NQVAzKQkJKz0gJChjbG9jay1jb21tb24pIGNsb2NrM3h4eC5vIFwKKwkJCQkJICAgY2xvY2szNHh4Lm8gY2xrdDM0eHhfZHBsbDNtMi5vIFwKKwkJCQkJICAgY2xvY2szNTE3Lm8gY2xvY2szNnh4Lm8gXAorCQkJCQkgICBkcGxsM3h4eC5vIGNsb2NrM3h4eF9kYXRhLm8KK29iai0kKENPTkZJR19BUkNIX09NQVA0KQkJKz0gJChjbG9jay1jb21tb24pIGNsb2NrNDR4eF9kYXRhLm8gXAorCQkJCQkgICBkcGxsM3h4eC5vCisKKyMgT01BUDIgY2xvY2sgcmF0ZSBzZXQgZGF0YSAob2xkICJPUFAiIGRhdGEpCiBvYmotJChDT05GSUdfQVJDSF9PTUFQMjQyMCkJCSs9IG9wcDI0MjBfZGF0YS5vCi1vYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9IGNsb2NrMzR4eC5vIGNsb2NrMzR4eF9kYXRhLm8KIG9iai0kKENPTkZJR19BUkNIX09NQVAyNDMwKQkJKz0gb3BwMjQzMF9kYXRhLm8KLW9iai0kKENPTkZJR19BUkNIX09NQVA0KQkJKz0gY2xvY2s0NHh4Lm8gY2xvY2s0NHh4X2RhdGEubworCisjIGh3bW9kIGRhdGEKK29iai0kKENPTkZJR19BUkNIX09NQVAyNDIwKQkJKz0gb21hcF9od21vZF8yNDIwX2RhdGEubworb2JqLSQoQ09ORklHX0FSQ0hfT01BUDI0MzApCQkrPSBvbWFwX2h3bW9kXzI0MzBfZGF0YS5vCitvYmotJChDT05GSUdfQVJDSF9PTUFQMykJCSs9IG9tYXBfaHdtb2RfM3h4eF9kYXRhLm8KIAogIyBFTVUgcGVyaXBoZXJhbHMKLW9iai0kKENPTkZJR19PTUFQM19FTVUpCQkrPSBlbXUubworb2JqLSQoQ09ORklHX09NQVAzX0VNVSkJCQkrPSBlbXUubwogCiBvYmotJChDT05GSUdfT01BUF9NQk9YX0ZXSykJCSs9IG1haWxib3hfbWFjaC5vCiBtYWlsYm94X21hY2gtb2JqcwkJCTo9IG1haWxib3gubwpAQCAtNzEsNDUgKzk4LDQ4IEBACiBvYmotJChDT05GSUdfTUFDSF9PTUFQX0dFTkVSSUMpCQkrPSBib2FyZC1nZW5lcmljLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVBfSDQpCQkrPSBib2FyZC1oNC5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQXzI0MzBTRFApCQkrPSBib2FyZC0yNDMwc2RwLm8gXAotCQkJCQkgICBtbWMtdHdsNDAzMC5vCisJCQkJCSAgIGhzbW1jLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVBfQVBPTExPTikJCSs9IGJvYXJkLWFwb2xsb24ubwogb2JqLSQoQ09ORklHX01BQ0hfT01BUDNfQkVBR0xFKQkJKz0gYm9hcmQtb21hcDNiZWFnbGUubyBcCi0JCQkJCSAgIG1tYy10d2w0MDMwLm8KKwkJCQkJICAgaHNtbWMubworb2JqLSQoQ09ORklHX01BQ0hfREVWS0lUODAwMCkgICAgIAkrPSBib2FyZC1kZXZraXQ4MDAwLm8gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhzbW1jLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVBfTERQKQkJKz0gYm9hcmQtbGRwLm8gXAotCQkJCQkgICBtbWMtdHdsNDAzMC5vCisJCQkJCSAgIGhzbW1jLm8KIG9iai0kKENPTkZJR19NQUNIX09WRVJPKQkJKz0gYm9hcmQtb3Zlcm8ubyBcCi0JCQkJCSAgIG1tYy10d2w0MDMwLm8KKwkJCQkJICAgaHNtbWMubwogb2JqLSQoQ09ORklHX01BQ0hfT01BUDNFVk0pCQkrPSBib2FyZC1vbWFwM2V2bS5vIFwKLQkJCQkJICAgbW1jLXR3bDQwMzAubworCQkJCQkgICBoc21tYy5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQM19QQU5ET1JBKQkrPSBib2FyZC1vbWFwM3BhbmRvcmEubyBcCi0JCQkJCSAgIG1tYy10d2w0MDMwLm8KKwkJCQkJICAgaHNtbWMubwogb2JqLSQoQ09ORklHX01BQ0hfT01BUF8zNDMwU0RQKQkJKz0gYm9hcmQtMzQzMHNkcC5vIFwKLQkJCQkJICAgbW1jLXR3bDQwMzAubworCQkJCQkgICBoc21tYy5vIFwKKwkJCQkJICAgYm9hcmQtc2RwLWZsYXNoLm8KIG9iai0kKENPTkZJR19NQUNIX05PS0lBX044WDApCQkrPSBib2FyZC1uOHgwLm8KIG9iai0kKENPTkZJR19NQUNIX05PS0lBX1JYNTEpCQkrPSBib2FyZC1yeDUxLm8gXAogCQkJCQkgICBib2FyZC1yeDUxLXNkcmFtLm8gXAogCQkJCQkgICBib2FyZC1yeDUxLXBlcmlwaGVyYWxzLm8gXAotCQkJCQkgICBtbWMtdHdsNDAzMC5vCisJCQkJCSAgIGhzbW1jLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVBfWk9PTTIpCQkrPSBib2FyZC16b29tMi5vIFwKIAkJCQkJICAgYm9hcmQtem9vbS1wZXJpcGhlcmFscy5vIFwKLQkJCQkJICAgbW1jLXR3bDQwMzAubyBcCisJCQkJCSAgIGhzbW1jLm8gXAogCQkJCQkgICBib2FyZC16b29tLWRlYnVnYm9hcmQubwogb2JqLSQoQ09ORklHX01BQ0hfT01BUF9aT09NMykJCSs9IGJvYXJkLXpvb20zLm8gXAogCQkJCQkgICBib2FyZC16b29tLXBlcmlwaGVyYWxzLm8gXAotCQkJCQkgICBtbWMtdHdsNDAzMC5vIFwKKwkJCQkJICAgaHNtbWMubyBcCiAJCQkJCSAgIGJvYXJkLXpvb20tZGVidWdib2FyZC5vCiBvYmotJChDT05GSUdfTUFDSF9PTUFQXzM2MzBTRFApCQkrPSBib2FyZC0zNjMwc2RwLm8gXAogCQkJCQkgICBib2FyZC16b29tLXBlcmlwaGVyYWxzLm8gXAotCQkJCQkgICBtbWMtdHdsNDAzMC5vCisJCQkJCSAgIGhzbW1jLm8KIG9iai0kKENPTkZJR19NQUNIX0NNX1QzNSkJCSs9IGJvYXJkLWNtLXQzNS5vIFwKLQkJCQkJICAgbW1jLXR3bDQwMzAubworCQkJCQkgICBoc21tYy5vCiBvYmotJChDT05GSUdfTUFDSF9JR0VQMDAyMCkJCSs9IGJvYXJkLWlnZXAwMDIwLm8gXAotCQkJCQkgICBtbWMtdHdsNDAzMC5vCisJCQkJCSAgIGhzbW1jLm8KIG9iai0kKENPTkZJR19NQUNIX09NQVAzX1RPVUNIQk9PSykJKz0gYm9hcmQtb21hcDN0b3VjaGJvb2subyBcCi0JCQkJCSAgIG1tYy10d2w0MDMwLm8KKwkJCQkJICAgaHNtbWMubwogb2JqLSQoQ09ORklHX01BQ0hfT01BUF80NDMwU0RQKQkJKz0gYm9hcmQtNDQzMHNkcC5vCiAKLW9iai0kKENPTkZJR19NQUNIX09NQVAzNTE3RVZNKSAgICAgKz0gYm9hcmQtYW0zNTE3ZXZtLm8KK29iai0kKENPTkZJR19NQUNIX09NQVAzNTE3RVZNKQkJKz0gYm9hcmQtYW0zNTE3ZXZtLm8KIAogIyBQbGF0Zm9ybSBzcGVjaWZpYyBkZXZpY2UgaW5pdCBjb2RlCiBvYmoteQkJCQkJKz0gdXNiLW11c2IubwpAQCAtMTE5LDUgKzE0OSw4IEBACiBvbmVuYW5kLSQoQ09ORklHX01URF9PTkVOQU5EX09NQVAyKQk6PSBncG1jLW9uZW5hbmQubwogb2JqLXkJCQkJCSs9ICQob25lbmFuZC1tKSAkKG9uZW5hbmQteSkKIAorbmFuZC0kKENPTkZJR19NVERfTkFORF9PTUFQMikJCTo9IGdwbWMtbmFuZC5vCitvYmoteQkJCQkJKz0gJChuYW5kLW0pICQobmFuZC15KQorCiBzbWM5MXgtJChDT05GSUdfU01DOTFYKQkJCTo9IGdwbWMtc21jOTF4Lm8KIG9iai15CQkJCQkrPSAkKHNtYzkxeC1tKSAkKHNtYzkxeC15KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0yNDMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYwppbmRleCBlNTA4OTA0Li4wMWQxMTNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTI0MzBzZHAuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CkBAIC0yOCw3ICsyOSw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KIAogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgogI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CkBAIC0zOCw3ICszOCw3IEBACiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KICNpbmNsdWRlIDxwbGF0L2dwbWMtc21jOTF4Lmg+CiAKLSNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgorI2luY2x1ZGUgImhzbW1jLmgiCiAKICNkZWZpbmUgU0RQMjQzMF9DUzBfQkFTRQkweDA0MDAwMDAwCiAjZGVmaW5lIFNFQ09OREFSWV9MQ0RfR1BJTwkJMTQ3CkBAIC03NCw4ICs3NCw3IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIHNkcDI0MzBfZmxhc2hfZGF0YSA9IHsKLQkubWFwX25hbWUJPSAiY2ZpX3Byb2JlIiwKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHNkcDI0MzBfZmxhc2hfZGF0YSA9IHsKIAkud2lkdGgJCT0gMiwKIAkucGFydHMJCT0gc2RwMjQzMF9wYXJ0aXRpb25zLAogCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoc2RwMjQzMF9wYXJ0aXRpb25zKSwKQEAgLTg4LDcgKzg3LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNkcDI0MzBfZmxhc2hfZGV2aWNlID0gewotCS5uYW1lCQk9ICJvbWFwZmxhc2giLAorCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKIAkuaWQJCT0gMCwKIAkuZGV2ID0gewogCQkucGxhdGZvcm1fZGF0YQk9ICZzZHAyNDMwX2ZsYXNoX2RhdGEsCkBAIC0xODMsNyArMTgyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gbW1jW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyBtbWNbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLm1tYwkJPSAxLAogCQkud2lyZXMJCT0gNCwKQEAgLTE5NCw2ICsxOTMsMTIgQEAKIAl7fQkvKiBUZXJtaW5hdG9yICovCiB9OwogCitzdGF0aWMgc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhIG11c2JfYm9hcmRfZGF0YSA9IHsKKwkuaW50ZXJmYWNlX3R5cGUJCT0gTVVTQl9JTlRFUkZBQ0VfVUxQSSwKKwkubW9kZQkJCT0gTVVTQl9PVEcsCisJLnBvd2VyCQkJPSAxMDAsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF8yNDMwc2RwX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwpAQCAtMjAyLDggKzIwNyw4IEBACiAKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzZHAyNDMwX2RldmljZXMsIEFSUkFZX1NJWkUoc2RwMjQzMF9kZXZpY2VzKSk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwotCXR3bDQwMzBfbW1jX2luaXQobW1jKTsKLQl1c2JfbXVzYl9pbml0KCk7CisJb21hcDJfaHNtbWNfaW5pdChtbWMpOworCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CiAJYm9hcmRfc21jOTF4X2luaXQoKTsKIAogCS8qIFR1cm4gb2ZmIHNlY29uZGFyeSBMQ0QgYmFja2xpZ2h0ICovCkBAIC0yMTUsNyArMjIwLDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzI0MzBzZHBfbWFwX2lvKHZvaWQpCiB7CiAJb21hcDJfc2V0X2dsb2JhbHNfMjQzeCgpOwotCW9tYXAyX21hcF9jb21tb25faW8oKTsKKwlvbWFwMjQzeF9tYXBfY29tbW9uX2lvKCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoT01BUF8yNDMwU0RQLCAiT01BUDI0MzAgc2RwMjQzMCBib2FyZCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCmluZGV4IGM5MGIwZDAuLmExMDEwMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzQzMHNkcC5jCkBAIC00MSw5ICs0MSwxMiBAQAogI2luY2x1ZGUgPHBsYXQvY29udHJvbC5oPgogI2luY2x1ZGUgPHBsYXQvZ3BtYy1zbWM5MXguaD4KIAorI2luY2x1ZGUgPG1hY2gvYm9hcmQtc2RwLmg+CisKICNpbmNsdWRlICJtdXguaCIKICNpbmNsdWRlICJzZHJhbS1xaW1vbmRhLWh5YjE4bTUxMjE2MGFmLTYuaCIKLSNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgorI2luY2x1ZGUgImhzbW1jLmgiCisjaW5jbHVkZSAicG0uaCIKIAogI2RlZmluZSBDT05GSUdfRElTQUJMRV9IRkNMSyAxCiAKQEAgLTU1LDYgKzU4LDI0IEBACiAKICNkZWZpbmUgVFdMNDAzMF9NU0VDVVJFX0dQSU8gMjIKIAorLyogRklYTUU6IFRoZXNlIHZhbHVlcyBuZWVkIHRvIGJlIHVwZGF0ZWQgYmFzZWQgb24gbW9yZSBwcm9maWxpbmcgb24gMzQzMHNkcCovCitzdGF0aWMgc3RydWN0IGNwdWlkbGVfcGFyYW1zIG9tYXAzX2NwdWlkbGVfcGFyYW1zX3RhYmxlW10gPSB7CisJLyogQzEgKi8KKwl7MSwgMiwgMiwgNX0sCisJLyogQzIgKi8KKwl7MSwgMTAsIDEwLCAzMH0sCisJLyogQzMgKi8KKwl7MSwgNTAsIDUwLCAzMDB9LAorCS8qIEM0ICovCisJezEsIDE1MDAsIDE4MDAsIDQwMDB9LAorCS8qIEM1ICovCisJezEsIDI1MDAsIDc1MDAsIDEyMDAwfSwKKwkvKiBDNiAqLworCXsxLCAzMDAwLCA4NTAwLCAxNTAwMH0sCisJLyogQzcgKi8KKwl7MSwgMTAwMDAsIDMwMDAwLCAzMDAwMDB9LAorfTsKKwogc3RhdGljIGludCBib2FyZF9rZXltYXBbXSA9IHsKIAlLRVkoMCwgMCwgS0VZX0xFRlQpLAogCUtFWSgwLCAxLCBLRVlfUklHSFQpLApAQCAtMzA1LDYgKzMyNiw3IEBACiB7CiAJb21hcF9ib2FyZF9jb25maWcgPSBzZHAzNDMwX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShzZHAzNDMwX2NvbmZpZyk7CisJb21hcDNfcG1faW5pdF9jcHVpZGxlKG9tYXAzX2NwdWlkbGVfcGFyYW1zX3RhYmxlKTsKIAlvbWFwMl9pbml0X2NvbW1vbl9odyhoeWIxOG01MTIxNjBhZjZfc2RyY19wYXJhbXMsIE5VTEwpOwogCW9tYXBfaW5pdF9pcnEoKTsKIAlvbWFwX2dwaW9faW5pdCgpOwpAQCAtMzI2LDcgKzM0OCw3IEBACiAJLnRibHNpemUJCT0gQVJSQVlfU0laRShzZHAzNDMwX2JhdHRfdGFibGUpLAogfTsKIAotc3RhdGljIHN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gbW1jW10gPSB7CitzdGF0aWMgc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gbW1jW10gPSB7CiAJewogCQkubW1jCQk9IDEsCiAJCS8qIDggYml0cyAoZGVmYXVsdCkgcmVxdWlyZXMgUzYuMyA9PSBPTiwKQEAgLTM2Myw3ICszODUsNyBAQAogCSAqLwogCW1tY1swXS5ncGlvX2NkID0gZ3BpbyArIDA7CiAJbW1jWzFdLmdwaW9fY2QgPSBncGlvICsgMTsKLQl0d2w0MDMwX21tY19pbml0KG1tYyk7CisJb21hcDJfaHNtbWNfaW5pdChtbWMpOwogCiAJLyogbGluayByZWd1bGF0b3JzIHRvIE1NQyBhZGFwdGVycyAuLi4gd2UgImtub3ciIHRoZQogCSAqIHJlZ3VsYXRvcnMgd2lsbCBiZSBzZXQgdXAgb25seSAqYWZ0ZXIqIHdlIHJldHVybi4KQEAgLTUyMCwxMCArNTQyLDYgQEAKIC8qIFZQTEwyIGZvciBkaWdpdGFsIHZpZGVvIG91dHB1dHMgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzZHAzNDMwX3ZwbGwyX3N1cHBsaWVzW10gPSB7CiAJewotCQkuc3VwcGx5CQk9ICJ2ZHZpIiwKLQkJLmRldgkJPSAmc2RwMzQzMF9sY2RfZGV2aWNlLmRldiwKLQl9LAotCXsKIAkJLnN1cHBseQkJPSAidmRkc19kc2kiLAogCQkuZGV2CQk9ICZzZHAzNDMwX2Rzc19kZXZpY2UuZGV2LAogCX0KQEAgLTY1MCw2ICs2NjgsMTIwIEBACiAjZGVmaW5lIGJvYXJkX211eAlOVUxMCiAjZW5kaWYKIAorc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHNkcF9ub3JfcGFydGl0aW9uc1tdID0geworCS8qIGJvb3Rsb2FkZXIgKFUtQm9vdCwgZXRjKSBpbiBmaXJzdCBzZWN0b3IgKi8KKwl7CisJCS5uYW1lCQk9ICJCb290bG9hZGVyLU5PUiIsCisJCS5vZmZzZXQJCT0gMCwKKwkJLnNpemUJCT0gU1pfMjU2SywKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLCAvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCS8qIGJvb3Rsb2FkZXIgcGFyYW1zIGluIHRoZSBuZXh0IHNlY3RvciAqLworCXsKKwkJLm5hbWUJCT0gIlBhcmFtcy1OT1IiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gU1pfMjU2SywKKwkJLm1hc2tfZmxhZ3MJPSAwLAorCX0sCisJLyoga2VybmVsICovCisJeworCQkubmFtZQkJPSAiS2VybmVsLU5PUiIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBTWl8yTSwKKwkJLm1hc2tfZmxhZ3MJPSAwCisJfSwKKwkvKiBmaWxlIHN5c3RlbSAqLworCXsKKwkJLm5hbWUJCT0gIkZpbGVzeXN0ZW0tTk9SIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IE1URFBBUlRfU0laX0ZVTEwsCisJCS5tYXNrX2ZsYWdzCT0gMAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBzZHBfb25lbmFuZF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiWC1Mb2FkZXItT25lTkFORCIsCisJCS5vZmZzZXQJCT0gMCwKKwkJLnNpemUJCT0gNCAqICg2NCAqIDIwNDgpLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUgIC8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJeworCQkubmFtZQkJPSAiVS1Cb290LU9uZU5BTkQiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gMiAqICg2NCAqIDIwNDgpLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUgIC8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJeworCQkubmFtZQkJPSAiVS1Cb290IEVudmlyb25tZW50LU9uZU5BTkQiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gMSAqICg2NCAqIDIwNDgpLAorCX0sCisJeworCQkubmFtZQkJPSAiS2VybmVsLU9uZU5BTkQiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gMTYgKiAoNjQgKiAyMDQ4KSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gIkZpbGUgU3lzdGVtLU9uZU5BTkQiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIHNkcF9uYW5kX3BhcnRpdGlvbnNbXSA9IHsKKwkvKiBBbGwgdGhlIHBhcnRpdGlvbiBzaXplcyBhcmUgbGlzdGVkIGluIHRlcm1zIG9mIE5BTkQgYmxvY2sgc2l6ZSAqLworCXsKKwkJLm5hbWUJCT0gIlgtTG9hZGVyLU5BTkQiLAorCQkub2Zmc2V0CQk9IDAsCisJCS5zaXplCQk9IDQgKiAoNjQgKiAyMDQ4KSwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gIlUtQm9vdC1OQU5EIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4ODAwMDAgKi8KKwkJLnNpemUJCT0gMTAgKiAoNjQgKiAyMDQ4KSwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAkvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gIkJvb3QgRW52LU5BTkQiLAorCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDFjMDAwMCAqLworCQkuc2l6ZQkJPSA2ICogKDY0ICogMjA0OCksCisJfSwKKwl7CisJCS5uYW1lCQk9ICJLZXJuZWwtTkFORCIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDI4MDAwMCAqLworCQkuc2l6ZQkJPSA0MCAqICg2NCAqIDIwNDgpLAorCX0sCisJeworCQkubmFtZQkJPSAiRmlsZSBTeXN0ZW0gLSBOQU5EIiwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4NzgwMDAwICovCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmxhc2hfcGFydGl0aW9ucyBzZHBfZmxhc2hfcGFydGl0aW9uc1tdID0geworCXsKKwkJLnBhcnRzID0gc2RwX25vcl9wYXJ0aXRpb25zLAorCQkubnJfcGFydHMgPSBBUlJBWV9TSVpFKHNkcF9ub3JfcGFydGl0aW9ucyksCisJfSwKKwl7CisJCS5wYXJ0cyA9IHNkcF9vbmVuYW5kX3BhcnRpdGlvbnMsCisJCS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUoc2RwX29uZW5hbmRfcGFydGl0aW9ucyksCisJfSwKKwl7CisJCS5wYXJ0cyA9IHNkcF9uYW5kX3BhcnRpdGlvbnMsCisJCS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUoc2RwX25hbmRfcGFydGl0aW9ucyksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgbXVzYl9ib2FyZF9kYXRhID0geworCS5pbnRlcmZhY2VfdHlwZQkJPSBNVVNCX0lOVEVSRkFDRV9VTFBJLAorCS5tb2RlCQkJPSBNVVNCX09URywKKwkucG93ZXIJCQk9IDEwMCwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzM0MzBzZHBfaW5pdCh2b2lkKQogewogCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7CkBAIC02NjQsOCArNzk2LDkgQEAKIAkJCQlBUlJBWV9TSVpFKHNkcDM0MzBfc3BpX2JvYXJkX2luZm8pKTsKIAlhZHM3ODQ2X2Rldl9pbml0KCk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwotCXVzYl9tdXNiX2luaXQoKTsKKwl1c2JfbXVzYl9pbml0KCZtdXNiX2JvYXJkX2RhdGEpOwogCWJvYXJkX3NtYzkxeF9pbml0KCk7CisJc2RwX2ZsYXNoX2luaXQoc2RwX2ZsYXNoX3BhcnRpdGlvbnMpOwogCXNkcDM0MzBfZGlzcGxheV9pbml0KCk7CiAJZW5hYmxlX2JvYXJkX3dha2V1cF9zb3VyY2UoKTsKIAl1c2JfZWhjaV9pbml0KCZlaGNpX3BkYXRhKTsKQEAgLTY3NCw3ICs4MDcsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfMzQzMHNkcF9tYXBfaW8odm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDJfbWFwX2NvbW1vbl9pbygpOworCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKIH0KIAogTUFDSElORV9TVEFSVChPTUFQXzM0MzBTRFAsICJPTUFQMzQzMCAzNDMwU0RQIGJvYXJkIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzYzMHNkcC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC0zNjMwc2RwLmMKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCA3MzkwNTk2Li40Mzg2ZDJiCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzYzMHNkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtMzYzMHNkcC5jCkBAIC02OCw4ICs2OCw4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3NkcF9tYXBfaW8odm9pZCkKIHsKLQlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDJfbWFwX2NvbW1vbl9pbygpOworCW9tYXAyX3NldF9nbG9iYWxzXzM2eHgoKTsKKwlvbWFwMzR4eF9tYXBfY29tbW9uX2lvKCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHNkcF9jb25maWdbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC00NDMwc2RwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYwppbmRleCA4YmE4ZmI1Li4xODBhYzExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLTQ0MzBzZHAuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KIAogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMjcsNiArMjgsNyBAQAogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CiAjaW5jbHVkZSA8cGxhdC9jb250cm9sLmg+CiAjaW5jbHVkZSA8cGxhdC90aW1lci1ncC5oPgorI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2dpYy5oPgogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9jYWNoZS1sMngwLmg+CiAKQEAgLTM5LDEwICs0MSw2IEBACiAJJnNkcDQ0MzBfbGNkX2RldmljZSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb21hcF91YXJ0X2NvbmZpZyBzZHA0NDMwX3VhcnRfY29uZmlnIF9faW5pdGRhdGEgPSB7Ci0JLmVuYWJsZWRfdWFydHMJPSAoMSA8PCAwKSB8ICgxIDw8IDEpIHwgKDEgPDwgMikgfCAoMSA8PCAzKSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIHNkcDQ0MzBfbGNkX2NvbmZpZyBfX2luaXRkYXRhID0gewogCS5jdHJsX25hbWUJPSAiaW50ZXJuYWwiLAogfTsKQEAgLTEzMSwxNyArMTI5LDI3IEBACiAJb21hcF9ncGlvX2luaXQoKTsKIH0KIAorc3RhdGljIHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSBtdXNiX2JvYXJkX2RhdGEgPSB7CisJLmludGVyZmFjZV90eXBlCQk9IE1VU0JfSU5URVJGQUNFX1VUTUksCisJLm1vZGUJCQk9IE1VU0JfUEVSSVBIRVJBTCwKKwkucG93ZXIJCQk9IDEwMCwKK307CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzQ0MzBzZHBfaW5pdCh2b2lkKQogewogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNkcDQ0MzBfZGV2aWNlcywgQVJSQVlfU0laRShzZHA0NDMwX2RldmljZXMpKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7CisJLyogT01BUDQgU0RQIHVzZXMgaW50ZXJuYWwgdHJhbnNjZWl2ZXIgc28gcmVnaXN0ZXIgbm9wIHRyYW5zY2VpdmVyICovCisJdXNiX25vcF94Y2Vpdl9yZWdpc3RlcigpOworCS8qIEZJWE1FOiBhbGxvdyBtdWx0aS1vbWFwIHRvIGJvb3QgdW50aWwgbXVzYiBpcyB1cGRhdGVkIGZvciBvbWFwNCAqLworCWlmICghY3B1X2lzX29tYXA0NHh4KCkpCisJCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwXzQ0MzBzZHBfbWFwX2lvKHZvaWQpCiB7CiAJb21hcDJfc2V0X2dsb2JhbHNfNDQzeCgpOwotCW9tYXAyX21hcF9jb21tb25faW8oKTsKKwlvbWFwNDR4eF9tYXBfY29tbW9uX2lvKCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoT01BUF80NDMwU0RQLCAiT01BUDQ0MzAgNDQzMFNEUCBib2FyZCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2V2bS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hbTM1MTdldm0uYwppbmRleCBiNGU2ZWNhLi43MGMxODYxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFtMzUxN2V2bS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYW0zNTE3ZXZtLmMKQEAgLTIwLDggKzIwLDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMvcGNhOTUzeC5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvYW0zNXh4Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CkBAIC0yOSw5ICszMSwyMjggQEAKICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgorI2luY2x1ZGUgPHBsYXQvZGlzcGxheS5oPgogCiAjaW5jbHVkZSAibXV4LmgiCiAKKyNkZWZpbmUgTENEX1BBTkVMX1BXUgkJMTc2CisjZGVmaW5lIExDRF9QQU5FTF9CS0xJR0hUX1BXUgkxODIKKyNkZWZpbmUgTENEX1BBTkVMX1BXTQkJMTgxCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBhbTM1MTdldm1faTJjX2JvYXJkaW5mb1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oInMzNTM5MGEiLCAweDMwKSwKKwkJLnR5cGUJCT0gInMzNTM5MGEiLAorCX0sCit9OworCisvKgorICogUlRDIC0gUzM1MzkwQQorICovCisjZGVmaW5lIEdQSU9fUlRDUzM1MzkwQV9JUlEJNTUKKworc3RhdGljIHZvaWQgX19pbml0IGFtMzUxN19ldm1fcnRjX2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKworCW9tYXBfbXV4X2luaXRfZ3BpbyhHUElPX1JUQ1MzNTM5MEFfSVJRLCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApOworCXIgPSBncGlvX3JlcXVlc3QoR1BJT19SVENTMzUzOTBBX0lSUSwgInJ0Y3MzNTM5MGEtaXJxIik7CisJaWYgKHIgPCAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImZhaWxlZCB0byByZXF1ZXN0IEdQSU8jJWRcbiIsCisJCQkJR1BJT19SVENTMzUzOTBBX0lSUSk7CisJCXJldHVybjsKKwl9CisJciA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fUlRDUzM1MzkwQV9JUlEpOworCWlmIChyIDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJHUElPIyVkIGNhbm5vdCBiZSBjb25maWd1cmVkIGFzIGlucHV0XG4iLAorCQkJCUdQSU9fUlRDUzM1MzkwQV9JUlEpOworCQlncGlvX2ZyZWUoR1BJT19SVENTMzUzOTBBX0lSUSk7CisJCXJldHVybjsKKwl9CisJYW0zNTE3ZXZtX2kyY19ib2FyZGluZm9bMF0uaXJxID0gZ3Bpb190b19pcnEoR1BJT19SVENTMzUzOTBBX0lSUSk7Cit9CisKKy8qCisgKiBJMkMgR1BJTyBFeHBhbmRlciAtIFRDQTY0MTYKKyAqLworCisvKiBNb3VudGVkIG9uIEJhc2UtQm9hcmQgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNhOTUzeF9wbGF0Zm9ybV9kYXRhIGFtMzUxN2V2bV9ncGlvX2V4cGFuZGVyX2luZm9fMCA9IHsKKwkuZ3Bpb19iYXNlCT0gT01BUF9NQVhfR1BJT19MSU5FUywKK307CitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgYW0zNTE3ZXZtX3RjYTY0MTZfaW5mb18wW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygidGNhNjQxNiIsIDB4MjEpLAorCQkucGxhdGZvcm1fZGF0YSA9ICZhbTM1MTdldm1fZ3Bpb19leHBhbmRlcl9pbmZvXzAsCisJfSwKK307CisKKy8qIE1vdW50ZWQgb24gVUkgQ2FyZCAqLworc3RhdGljIHN0cnVjdCBwY2E5NTN4X3BsYXRmb3JtX2RhdGEgYW0zNTE3ZXZtX3VpX2dwaW9fZXhwYW5kZXJfaW5mb18xID0geworCS5ncGlvX2Jhc2UJPSBPTUFQX01BWF9HUElPX0xJTkVTICsgMTYsCit9Oworc3RhdGljIHN0cnVjdCBwY2E5NTN4X3BsYXRmb3JtX2RhdGEgYW0zNTE3ZXZtX3VpX2dwaW9fZXhwYW5kZXJfaW5mb18yID0geworCS5ncGlvX2Jhc2UJPSBPTUFQX01BWF9HUElPX0xJTkVTICsgMzIsCit9Oworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGFtMzUxN2V2bV91aV90Y2E2NDE2X2luZm9bXSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJ0Y2E2NDE2IiwgMHgyMCksCisJCS5wbGF0Zm9ybV9kYXRhID0gJmFtMzUxN2V2bV91aV9ncGlvX2V4cGFuZGVyX2luZm9fMSwKKwl9LAorCXsKKwkJSTJDX0JPQVJEX0lORk8oInRjYTY0MTYiLCAweDIxKSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYW0zNTE3ZXZtX3VpX2dwaW9fZXhwYW5kZXJfaW5mb18yLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhbTM1MTdfZXZtX2kyY19pbml0KHZvaWQpCit7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDQwMCwgTlVMTCwgMCk7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDIsIDQwMCwgYW0zNTE3ZXZtX3RjYTY0MTZfaW5mb18wLAorCQkJQVJSQVlfU0laRShhbTM1MTdldm1fdGNhNjQxNl9pbmZvXzApKTsKKwlvbWFwX3JlZ2lzdGVyX2kyY19idXMoMywgNDAwLCBhbTM1MTdldm1fdWlfdGNhNjQxNl9pbmZvLAorCQkJQVJSQVlfU0laRShhbTM1MTdldm1fdWlfdGNhNjQxNl9pbmZvKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsY2RfZW5hYmxlZDsKK3N0YXRpYyBpbnQgZHZpX2VuYWJsZWQ7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhbTM1MTdfZXZtX2Rpc3BsYXlfaW5pdCh2b2lkKQoreworCWludCByOworCisJb21hcF9tdXhfaW5pdF9ncGlvKExDRF9QQU5FTF9QV1IsIE9NQVBfUElOX0lOUFVUX1BVTExVUCk7CisJb21hcF9tdXhfaW5pdF9ncGlvKExDRF9QQU5FTF9CS0xJR0hUX1BXUiwgT01BUF9QSU5fSU5QVVRfUFVMTERPV04pOworCW9tYXBfbXV4X2luaXRfZ3BpbyhMQ0RfUEFORUxfUFdNLCBPTUFQX1BJTl9JTlBVVF9QVUxMRE9XTik7CisJLyoKKwkgKiBFbmFibGUgR1BJTyAxODIgPSBMQ0QgQmFja2xpZ2h0IFBvd2VyCisJICovCisJciA9IGdwaW9fcmVxdWVzdChMQ0RfUEFORUxfQktMSUdIVF9QV1IsICJsY2RfYmFja2xpZ2h0X3B3ciIpOworCWlmIChyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBsY2RfYmFja2xpZ2h0X3B3clxuIik7CisJCXJldHVybjsKKwl9CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KExDRF9QQU5FTF9CS0xJR0hUX1BXUiwgMSk7CisJLyoKKwkgKiBFbmFibGUgR1BJTyAxODEgPSBMQ0QgUGFuZWwgUFdNCisJICovCisJciA9IGdwaW9fcmVxdWVzdChMQ0RfUEFORUxfUFdNLCAibGNkX3B3bSIpOworCWlmIChyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBsY2RfcHdtXG4iKTsKKwkJZ290byBlcnJfMTsKKwl9CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KExDRF9QQU5FTF9QV00sIDEpOworCS8qCisJICogRW5hYmxlIEdQSU8gMTc2ID0gTENEIFBhbmVsIFBvd2VyIGVuYWJsZSBwaW4KKwkgKi8KKwlyID0gZ3Bpb19yZXF1ZXN0KExDRF9QQU5FTF9QV1IsICJsY2RfcGFuZWxfcHdyIik7CisJaWYgKHIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gZ2V0IGxjZF9wYW5lbF9wd3JcbiIpOworCQlnb3RvIGVycl8yOworCX0KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTENEX1BBTkVMX1BXUiwgMSk7CisKKwlwcmludGsoS0VSTl9JTkZPICJEaXNwbGF5IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseVxuIik7CisJcmV0dXJuOworCitlcnJfMjoKKwlncGlvX2ZyZWUoTENEX1BBTkVMX1BXTSk7CitlcnJfMToKKwlncGlvX2ZyZWUoTENEX1BBTkVMX0JLTElHSFRfUFdSKTsKK30KKworc3RhdGljIGludCBhbTM1MTdfZXZtX3BhbmVsX2VuYWJsZV9sY2Qoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWlmIChkdmlfZW5hYmxlZCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbm5vdCBlbmFibGUgTENELCBEVkkgaXMgZW5hYmxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlncGlvX3NldF92YWx1ZShMQ0RfUEFORUxfUFdSLCAxKTsKKwlsY2RfZW5hYmxlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYW0zNTE3X2V2bV9wYW5lbF9kaXNhYmxlX2xjZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJZ3Bpb19zZXRfdmFsdWUoTENEX1BBTkVMX1BXUiwgMCk7CisJbGNkX2VuYWJsZWQgPSAwOworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RldmljZSBhbTM1MTdfZXZtX2xjZF9kZXZpY2UgPSB7CisJLnR5cGUJCQk9IE9NQVBfRElTUExBWV9UWVBFX0RQSSwKKwkubmFtZQkJCT0gImxjZCIsCisJLmRyaXZlcl9uYW1lCQk9ICJzaGFycF9scV9wYW5lbCIsCisJLnBoeS5kcGkuZGF0YV9saW5lcyAJPSAxNiwKKwkucGxhdGZvcm1fZW5hYmxlCT0gYW0zNTE3X2V2bV9wYW5lbF9lbmFibGVfbGNkLAorCS5wbGF0Zm9ybV9kaXNhYmxlCT0gYW0zNTE3X2V2bV9wYW5lbF9kaXNhYmxlX2xjZCwKK307CisKK3N0YXRpYyBpbnQgYW0zNTE3X2V2bV9wYW5lbF9lbmFibGVfdHYoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhbTM1MTdfZXZtX3BhbmVsX2Rpc2FibGVfdHYoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RldmljZSBhbTM1MTdfZXZtX3R2X2RldmljZSA9IHsKKwkudHlwZSAJCQk9IE9NQVBfRElTUExBWV9UWVBFX1ZFTkMsCisJLm5hbWUgCQkJPSAidHYiLAorCS5kcml2ZXJfbmFtZQkJPSAidmVuYyIsCisJLnBoeS52ZW5jLnR5cGUJCT0gT01BUF9EU1NfVkVOQ19UWVBFX1NWSURFTywKKwkucGxhdGZvcm1fZW5hYmxlCT0gYW0zNTE3X2V2bV9wYW5lbF9lbmFibGVfdHYsCisJLnBsYXRmb3JtX2Rpc2FibGUJPSBhbTM1MTdfZXZtX3BhbmVsX2Rpc2FibGVfdHYsCit9OworCitzdGF0aWMgaW50IGFtMzUxN19ldm1fcGFuZWxfZW5hYmxlX2R2aShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJaWYgKGxjZF9lbmFibGVkKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2Fubm90IGVuYWJsZSBEVkksIExDRCBpcyBlbmFibGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWR2aV9lbmFibGVkID0gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhbTM1MTdfZXZtX3BhbmVsX2Rpc2FibGVfZHZpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlkdmlfZW5hYmxlZCA9IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlIGFtMzUxN19ldm1fZHZpX2RldmljZSA9IHsKKwkudHlwZQkJCT0gT01BUF9ESVNQTEFZX1RZUEVfRFBJLAorCS5uYW1lCQkJPSAiZHZpIiwKKwkuZHJpdmVyX25hbWUJCT0gImdlbmVyaWNfcGFuZWwiLAorCS5waHkuZHBpLmRhdGFfbGluZXMJPSAyNCwKKwkucGxhdGZvcm1fZW5hYmxlCT0gYW0zNTE3X2V2bV9wYW5lbF9lbmFibGVfZHZpLAorCS5wbGF0Zm9ybV9kaXNhYmxlCT0gYW0zNTE3X2V2bV9wYW5lbF9kaXNhYmxlX2R2aSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICphbTM1MTdfZXZtX2Rzc19kZXZpY2VzW10gPSB7CisJJmFtMzUxN19ldm1fbGNkX2RldmljZSwKKwkmYW0zNTE3X2V2bV90dl9kZXZpY2UsCisJJmFtMzUxN19ldm1fZHZpX2RldmljZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfYm9hcmRfaW5mbyBhbTM1MTdfZXZtX2Rzc19kYXRhID0geworCS5udW1fZGV2aWNlcwk9IEFSUkFZX1NJWkUoYW0zNTE3X2V2bV9kc3NfZGV2aWNlcyksCisJLmRldmljZXMJPSBhbTM1MTdfZXZtX2Rzc19kZXZpY2VzLAorCS5kZWZhdWx0X2RldmljZQk9ICZhbTM1MTdfZXZtX2xjZF9kZXZpY2UsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFtMzUxN19ldm1fZHNzX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcGRzcyIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZhbTM1MTdfZXZtX2Rzc19kYXRhLAorCX0sCit9OworCiAvKgogICogQm9hcmQgaW5pdGlhbGl6YXRpb24KICAqLwpAQCAtMzksNiArMjYwLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphbTM1MTdfZXZtX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZhbTM1MTdfZXZtX2Rzc19kZXZpY2UsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgYW0zNTE3X2V2bV9pbml0X2lycSh2b2lkKQpAQCAtNzIsMTggKzI5NCwzMSBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgYW0zNTE3X2V2bV9pbml0KHZvaWQpCiB7CisJYW0zNTE3X2V2bV9pMmNfaW5pdCgpOworCiAJb21hcDNfbXV4X2luaXQoYm9hcmRfbXV4LCBPTUFQX1BBQ0tBR0VfQ0JCKTsKIAlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhhbTM1MTdfZXZtX2RldmljZXMsCiAJCQkJQVJSQVlfU0laRShhbTM1MTdfZXZtX2RldmljZXMpKTsKIAogCW9tYXBfc2VyaWFsX2luaXQoKTsKKworCS8qIENvbmZpZ3VyZSBHUElPIGZvciBFSENJIHBvcnQgKi8KKwlvbWFwX211eF9pbml0X2dwaW8oNTcsIE9NQVBfUElOX09VVFBVVCk7CiAJdXNiX2VoY2lfaW5pdCgmZWhjaV9wZGF0YSk7CisJLyogRFNTICovCisJYW0zNTE3X2V2bV9kaXNwbGF5X2luaXQoKTsKKworCS8qIFJUQyAtIFMzNTM5MEEgKi8KKwlhbTM1MTdfZXZtX3J0Y19pbml0KCk7CisKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygxLCBhbTM1MTdldm1faTJjX2JvYXJkaW5mbywKKwkJCQlBUlJBWV9TSVpFKGFtMzUxN2V2bV9pMmNfYm9hcmRpbmZvKSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhbTM1MTdfZXZtX21hcF9pbyh2b2lkKQogewogCW9tYXAyX3NldF9nbG9iYWxzXzM0M3goKTsKLQlvbWFwMl9tYXBfY29tbW9uX2lvKCk7CisJb21hcDM0eHhfbWFwX2NvbW1vbl9pbygpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVAzNTE3RVZNLCAiT01BUDM1MTcvQU0zNTE3IEVWTSIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWFwb2xsb24uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCmluZGV4IGZiYmQ2OGQuLmFhNjlmYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jCkBAIC0zMzcsNyArMzM3LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2Fwb2xsb25fbWFwX2lvKHZvaWQpCiB7CiAJb21hcDJfc2V0X2dsb2JhbHNfMjQyeCgpOwotCW9tYXAyX21hcF9jb21tb25faW8oKTsKKwlvbWFwMjQyeF9tYXBfY29tbW9uX2lvKCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoT01BUF9BUE9MTE9OLCAiT01BUDI0eHggQXBvbGxvbiIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1jbS10MzUuYwppbmRleCAyNjI2YTlmLi5hZmE3N2NhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWNtLXQzNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtY20tdDM1LmMKQEAgLTMyLDYgKzMyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMvdHdsLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KIAorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvdGRvMjRtLmg+CisKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KQEAgLTQxLDEyICs0NCwxMyBAQAogI2luY2x1ZGUgPHBsYXQvbmFuZC5oPgogI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CisjaW5jbHVkZSA8cGxhdC9kaXNwbGF5Lmg+CiAKICNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKICNpbmNsdWRlICJtdXguaCIKICNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKLSNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgorI2luY2x1ZGUgImhzbW1jLmgiCiAKICNkZWZpbmUgQ01fVDM1X0dQSU9fUEVORE9XTgk1NwogCkBAIC0yNDgsNyArMjUyLDYgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19UT1VDSFNDUkVFTl9BRFM3ODQ2X01PRFVMRSkKLSNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2Fkczc4NDYuaD4KIAogI2luY2x1ZGUgPHBsYXQvbWNzcGkuaD4KQEAgLTMwNCw2ICszMDcsMTkzIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgY21fdDM1X2luaXRfYWRzNzg0Nih2b2lkKSB7fQogI2VuZGlmCiAKKyNkZWZpbmUgQ01fVDM1X0xDRF9FTl9HUElPIDE1NworI2RlZmluZSBDTV9UMzVfTENEX0JMX0dQSU8gNTgKKyNkZWZpbmUgQ01fVDM1X0RWSV9FTl9HUElPIDU0CisKK3N0YXRpYyBpbnQgbGNkX2JsX2dwaW87CitzdGF0aWMgaW50IGxjZF9lbl9ncGlvOworc3RhdGljIGludCBkdmlfZW5fZ3BpbzsKKworc3RhdGljIGludCBsY2RfZW5hYmxlZDsKK3N0YXRpYyBpbnQgZHZpX2VuYWJsZWQ7CisKK3N0YXRpYyBpbnQgY21fdDM1X3BhbmVsX2VuYWJsZV9sY2Qoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWlmIChkdmlfZW5hYmxlZCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbm5vdCBlbmFibGUgTENELCBEVkkgaXMgZW5hYmxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWdwaW9fc2V0X3ZhbHVlKGxjZF9lbl9ncGlvLCAxKTsKKwlncGlvX3NldF92YWx1ZShsY2RfYmxfZ3BpbywgMSk7CisKKwlsY2RfZW5hYmxlZCA9IDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY21fdDM1X3BhbmVsX2Rpc2FibGVfbGNkKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlsY2RfZW5hYmxlZCA9IDA7CisKKwlncGlvX3NldF92YWx1ZShsY2RfYmxfZ3BpbywgMCk7CisJZ3Bpb19zZXRfdmFsdWUobGNkX2VuX2dwaW8sIDApOworfQorCitzdGF0aWMgaW50IGNtX3QzNV9wYW5lbF9lbmFibGVfZHZpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlpZiAobGNkX2VuYWJsZWQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZW5hYmxlIERWSSwgTENEIGlzIGVuYWJsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlncGlvX3NldF92YWx1ZShkdmlfZW5fZ3BpbywgMCk7CisJZHZpX2VuYWJsZWQgPSAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGNtX3QzNV9wYW5lbF9kaXNhYmxlX2R2aShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJZ3Bpb19zZXRfdmFsdWUoZHZpX2VuX2dwaW8sIDEpOworCWR2aV9lbmFibGVkID0gMDsKK30KKworc3RhdGljIGludCBjbV90MzVfcGFuZWxfZW5hYmxlX3R2KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgY21fdDM1X3BhbmVsX2Rpc2FibGVfdHYoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RldmljZSBjbV90MzVfbGNkX2RldmljZSA9IHsKKwkubmFtZQkJCT0gImxjZCIsCisJLmRyaXZlcl9uYW1lCQk9ICJ0b3Bwb2x5X3RkbzM1c19wYW5lbCIsCisJLnR5cGUJCQk9IE9NQVBfRElTUExBWV9UWVBFX0RQSSwKKwkucGh5LmRwaS5kYXRhX2xpbmVzCT0gMTgsCisJLnBsYXRmb3JtX2VuYWJsZQk9IGNtX3QzNV9wYW5lbF9lbmFibGVfbGNkLAorCS5wbGF0Zm9ybV9kaXNhYmxlCT0gY21fdDM1X3BhbmVsX2Rpc2FibGVfbGNkLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgY21fdDM1X2R2aV9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJkdmkiLAorCS5kcml2ZXJfbmFtZQkJPSAiZ2VuZXJpY19wYW5lbCIsCisJLnR5cGUJCQk9IE9NQVBfRElTUExBWV9UWVBFX0RQSSwKKwkucGh5LmRwaS5kYXRhX2xpbmVzCT0gMjQsCisJLnBsYXRmb3JtX2VuYWJsZQk9IGNtX3QzNV9wYW5lbF9lbmFibGVfZHZpLAorCS5wbGF0Zm9ybV9kaXNhYmxlCT0gY21fdDM1X3BhbmVsX2Rpc2FibGVfZHZpLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgY21fdDM1X3R2X2RldmljZSA9IHsKKwkubmFtZQkJCT0gInR2IiwKKwkuZHJpdmVyX25hbWUJCT0gInZlbmMiLAorCS50eXBlCQkJPSBPTUFQX0RJU1BMQVlfVFlQRV9WRU5DLAorCS5waHkudmVuYy50eXBlCQk9IE9NQVBfRFNTX1ZFTkNfVFlQRV9TVklERU8sCisJLnBsYXRmb3JtX2VuYWJsZQk9IGNtX3QzNV9wYW5lbF9lbmFibGVfdHYsCisJLnBsYXRmb3JtX2Rpc2FibGUJPSBjbV90MzVfcGFuZWxfZGlzYWJsZV90diwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpjbV90MzVfZHNzX2RldmljZXNbXSA9IHsKKwkmY21fdDM1X2xjZF9kZXZpY2UsCisJJmNtX3QzNV9kdmlfZGV2aWNlLAorCSZjbV90MzVfdHZfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19ib2FyZF9pbmZvIGNtX3QzNV9kc3NfZGF0YSA9IHsKKwkubnVtX2RldmljZXMJPSBBUlJBWV9TSVpFKGNtX3QzNV9kc3NfZGV2aWNlcyksCisJLmRldmljZXMJPSBjbV90MzVfZHNzX2RldmljZXMsCisJLmRlZmF1bHRfZGV2aWNlCT0gJmNtX3QzNV9kdmlfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY21fdDM1X2Rzc19kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBkc3MiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmY21fdDM1X2Rzc19kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX2RldmljZV9jb25maWcgdGRvMjRtX21jc3BpX2NvbmZpZyA9IHsKKwkudHVyYm9fbW9kZQk9IDAsCisJLnNpbmdsZV9jaGFubmVsCT0gMSwJLyogMDogc2xhdmUsIDE6IG1hc3RlciAqLworfTsKKworc3RhdGljIHN0cnVjdCB0ZG8yNG1fcGxhdGZvcm1fZGF0YSB0ZG8yNG1fY29uZmlnID0geworCS5tb2RlbCA9IFRETzM1UywKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gY21fdDM1X2xjZF9zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkubW9kYWxpYXMJCT0gInRkbzI0bSIsCisJCS5idXNfbnVtCQk9IDQsCisJCS5jaGlwX3NlbGVjdAkJPSAwLAorCQkubWF4X3NwZWVkX2h6CQk9IDEwMDAwMDAsCisJCS5jb250cm9sbGVyX2RhdGEJPSAmdGRvMjRtX21jc3BpX2NvbmZpZywKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJnRkbzI0bV9jb25maWcsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjbV90MzVfaW5pdF9kaXNwbGF5KHZvaWQpCit7CisJaW50IGVycjsKKworCWxjZF9lbl9ncGlvID0gQ01fVDM1X0xDRF9FTl9HUElPOworCWxjZF9ibF9ncGlvID0gQ01fVDM1X0xDRF9CTF9HUElPOworCWR2aV9lbl9ncGlvID0gQ01fVDM1X0RWSV9FTl9HUElPOworCisJc3BpX3JlZ2lzdGVyX2JvYXJkX2luZm8oY21fdDM1X2xjZF9zcGlfYm9hcmRfaW5mbywKKwkJCQlBUlJBWV9TSVpFKGNtX3QzNV9sY2Rfc3BpX2JvYXJkX2luZm8pKTsKKworCWVyciA9IGdwaW9fcmVxdWVzdChsY2RfZW5fZ3BpbywgIkxDRCBSU1QiKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiQ00tVDM1OiBmYWlsZWQgdG8gZ2V0IExDRCByZXNldCBHUElPXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gZ3Bpb19yZXF1ZXN0KGxjZF9ibF9ncGlvLCAiTENEIEJMIik7CisJaWYgKGVycikgeworCQlwcl9lcnIoIkNNLVQzNTogZmFpbGVkIHRvIGdldCBMQ0QgYmFja2xpZ2h0IGNvbnRyb2wgR1BJT1xuIik7CisJCWdvdG8gZXJyX2xjZF9ibDsKKwl9CisKKwllcnIgPSBncGlvX3JlcXVlc3QoZHZpX2VuX2dwaW8sICJEVkkgRU4iKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiQ00tVDM1OiBmYWlsZWQgdG8gZ2V0IERWSSByZXNldCBHUElPXG4iKTsKKwkJZ290byBlcnJfZHZpX2VuOworCX0KKworCWdwaW9fZXhwb3J0KGxjZF9lbl9ncGlvLCAwKTsKKwlncGlvX2V4cG9ydChsY2RfYmxfZ3BpbywgMCk7CisJZ3Bpb19leHBvcnQoZHZpX2VuX2dwaW8sIDApOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChsY2RfZW5fZ3BpbywgMCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGxjZF9ibF9ncGlvLCAwKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZHZpX2VuX2dwaW8sIDEpOworCisJbXNsZWVwKDUwKTsKKwlncGlvX3NldF92YWx1ZShsY2RfZW5fZ3BpbywgMSk7CisKKwllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmNtX3QzNV9kc3NfZGV2aWNlKTsKKwlpZiAoZXJyKSB7CisJCXByX2VycigiQ00tVDM1OiBmYWlsZWQgdG8gcmVnaXN0ZXIgRFNTIGRldmljZVxuIik7CisJCWdvdG8gZXJyX2Rldl9yZWc7CisJfQorCisJcmV0dXJuOworCitlcnJfZGV2X3JlZzoKKwlncGlvX2ZyZWUoZHZpX2VuX2dwaW8pOworZXJyX2R2aV9lbjoKKwlncGlvX2ZyZWUobGNkX2JsX2dwaW8pOworZXJyX2xjZF9ibDoKKwlncGlvX2ZyZWUobGNkX2VuX2dwaW8pOworb3V0OgorCisJcmV0dXJuOworfQorCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgY21fdDM1X3ZtbWMxX3N1cHBseSA9IHsKIAkuc3VwcGx5CQkJPSAidm1tYyIsCiB9OwpAQCAtMzEyLDYgKzUwMiwxNiBAQAogCS5zdXBwbHkJCQk9ICJ2bW1jX2F1eCIsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgY21fdDM1X3ZkYWNfc3VwcGx5ID0geworCS5zdXBwbHkJCT0gInZkZGFfZGFjIiwKKwkuZGV2CQk9ICZjbV90MzVfZHNzX2RldmljZS5kZXYsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgY21fdDM1X3Zkdmlfc3VwcGx5ID0geworCS5zdXBwbHkJCT0gInZkdmkiLAorCS5kZXYJCT0gJmNtX3QzNV9kc3NfZGV2aWNlLmRldiwKK307CisKIC8qIFZNTUMxIGZvciBNTUMxIHBpbnMgQ01ELCBDTEssIERBVDAuLkRBVDMgKDIwIG1BLCBwbHVzIGNhcmQgPT0gbWF4IDIyMCBtQSkgKi8KIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBjbV90MzVfdm1tYzEgPSB7CiAJLmNvbnN0cmFpbnRzID0gewpAQCAtMzQyLDYgKzU0MiwzNSBAQAogCS5jb25zdW1lcl9zdXBwbGllcwk9ICZjbV90MzVfdnNpbV9zdXBwbHksCiB9OwogCisvKiBWREFDIGZvciBEU1MgZHJpdmluZyBTLVZpZGVvICg4IG1BIHVubG9hZGVkLCBtYXggNjUgbUEpICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgY21fdDM1X3ZkYWMgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAxODAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcwk9ICZjbV90MzVfdmRhY19zdXBwbHksCit9OworCisvKiBWUExMMiBmb3IgZGlnaXRhbCB2aWRlbyBvdXRwdXRzICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgY21fdDM1X3ZwbGwyID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUJCQk9ICJWRFZJIiwKKwkJLm1pbl91VgkJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJCT0gMTgwMDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmY21fdDM1X3Zkdmlfc3VwcGx5LAorfTsKKwogc3RhdGljIHN0cnVjdCB0d2w0MDMwX3VzYl9kYXRhIGNtX3QzNV91c2JfZGF0YSA9IHsKIAkudXNiX21vZGUJPSBUMl9VU0JfTU9ERV9VTFBJLAogfTsKQEAgLTM2NCw3ICs1OTMsNyBAQAogCS5yZXAJCT0gMSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9oc21tY19pbmZvIG1tY1tdID0geworc3RhdGljIHN0cnVjdCBvbWFwMl9oc21tY19pbmZvIG1tY1tdID0gewogCXsKIAkJLm1tYwkJPSAxLAogCQkud2lyZXMJCT0gNCwKQEAgLTQxMyw3ICs2NDIsNyBAQAogCiAJLyogZ3BpbyArIDAgaXMgIm1tYzBfY2QiIChpbnB1dC9JUlEpICovCiAJbW1jWzBdLmdwaW9fY2QgPSBncGlvICsgMDsKLQl0d2w0MDMwX21tY19pbml0KG1tYyk7CisJb21hcDJfaHNtbWNfaW5pdChtbWMpOwogCiAJLyogbGluayByZWd1bGF0b3JzIHRvIE1NQyBhZGFwdGVycyAqLwogCWNtX3QzNV92bW1jMV9zdXBwbHkuZGV2ID0gbW1jWzBdLmRldjsKQEAgLTQ0NSw2ICs2NzQsOCBAQAogCS5ncGlvCQk9ICZjbV90MzVfZ3Bpb19kYXRhLAogCS52bW1jMQkJPSAmY21fdDM1X3ZtbWMxLAogCS52c2ltCQk9ICZjbV90MzVfdnNpbSwKKwkudmRhYwkJPSAmY21fdDM1X3ZkYWMsCisJLnZwbGwyCQk9ICZjbV90MzVfdnBsbDIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgY21fdDM1X2kyY19ib2FyZGluZm9bXSA9IHsKQEAgLTQ3OSw3ICs3MTAsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IGNtX3QzNV9tYXBfaW8odm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDJfbWFwX2NvbW1vbl9pbygpOworCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKIH0KIAogc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCBib2FyZF9tdXhbXSBfX2luaXRkYXRhID0gewpAQCAtNTY4LDYgKzc5OSwxMSBAQAogCU9NQVAzX01VWChEU1NfREFUQTIyLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX09VVFBVVCksCiAJT01BUDNfTVVYKERTU19EQVRBMjMsIE9NQVBfTVVYX01PREUwIHwgT01BUF9QSU5fT1VUUFVUKSwKIAorCS8qIGRpc3BsYXkgY29udHJvbHMgKi8KKwlPTUFQM19NVVgoTUNCU1AxX0ZTUiwgT01BUF9NVVhfTU9ERTQgfCBPTUFQX1BJTl9PVVRQVVQpLAorCU9NQVAzX01VWChHUE1DX05DUzcsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fT1VUUFVUKSwKKwlPTUFQM19NVVgoR1BNQ19OQ1MzLCBPTUFQX01VWF9NT0RFNCB8IE9NQVBfUElOX09VVFBVVCksCisKIAkvKiBUUFMgSVJRICovCiAJT01BUDNfTVVYKFNZU19OSVJRLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfV0FLRVVQX0VOIHwgXAogCQkgIE9NQVBfUElOX0lOUFVUX1BVTExVUCksCkBAIC01NzUsNiArODExLDEyIEBACiAJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgbXVzYl9ib2FyZF9kYXRhID0geworCS5pbnRlcmZhY2VfdHlwZQkJPSBNVVNCX0lOVEVSRkFDRV9VTFBJLAorCS5tb2RlCQkJPSBNVVNCX09URywKKwkucG93ZXIJCQk9IDEwMCwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBjbV90MzVfaW5pdCh2b2lkKQogewogCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NVUyk7CkBAIC01ODQsOCArODI2LDkgQEAKIAljbV90MzVfaW5pdF9hZHM3ODQ2KCk7CiAJY21fdDM1X2luaXRfZXRoZXJuZXQoKTsKIAljbV90MzVfaW5pdF9sZWQoKTsKKwljbV90MzVfaW5pdF9kaXNwbGF5KCk7CiAKLQl1c2JfbXVzYl9pbml0KCk7CisJdXNiX211c2JfaW5pdCgmbXVzYl9ib2FyZF9kYXRhKTsKIH0KIAogTUFDSElORV9TVEFSVChDTV9UMzUsICJDb21wdWxhYiBDTS1UMzUiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWRldmtpdDgwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzEwMTkwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1kZXZraXQ4MDAwLmMKQEAgLTAsMCArMSw2OTcgQEAKKy8qCisgKiBib2FyZC1kZXZraXQ4MDAwLmMgLSBUaW1MTCBEZXZraXQ4MDAwCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEtpbSBCb3RoZXJ3YXkKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUaG9tYXMgV2ViZXIKKyAqCisgKiBNb2RpZmllZCBmcm9tIG1hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYworICoKKyAqIEluaXRpYWwgY29kZTogU3llZCBNb2hhbW1lZCBLaGFzaW0KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvX2tleXMuaD4KKworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisKKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorCisjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgorI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CisjaW5jbHVkZSA8cGxhdC9ncG1jLmg+CisjaW5jbHVkZSA8cGxhdC9uYW5kLmg+CisjaW5jbHVkZSA8cGxhdC91c2IuaD4KKyNpbmNsdWRlIDxwbGF0L3RpbWVyLWdwLmg+CisjaW5jbHVkZSA8cGxhdC9kaXNwbGF5Lmg+CisKKyNpbmNsdWRlIDxwbGF0L21jc3BpLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvbWF0cml4X2tleXBhZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvYWRzNzg0Ni5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9vdGcuaD4KKyNpbmNsdWRlIDxsaW51eC9kbTkwMDAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgInNkcmFtLW1pY3Jvbi1tdDQ2aDMybTMybGYtNi5oIgorCisjaW5jbHVkZSAibXV4LmgiCisjaW5jbHVkZSAiaHNtbWMuaCIKKworI2RlZmluZSBHUE1DX0NTMF9CQVNFICAweDYwCisjZGVmaW5lIEdQTUNfQ1NfU0laRSAgIDB4MzAKKworI2RlZmluZSBOQU5EX0JMT0NLX1NJWkUJCVNaXzEyOEsKKworI2RlZmluZSBPTUFQX0RNOTAwMF9HUElPX0lSUQkyNQorI2RlZmluZSBPTUFQM19ERVZLSVRfVFNfR1BJTwkyNworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gZGV2a2l0ODAwMF9uYW5kX3BhcnRpdGlvbnNbXSA9IHsKKwkvKiBBbGwgdGhlIHBhcnRpdGlvbiBzaXplcyBhcmUgbGlzdGVkIGluIHRlcm1zIG9mIE5BTkQgYmxvY2sgc2l6ZSAqLworCXsKKwkJLm5hbWUJCT0gIlgtTG9hZGVyIiwKKwkJLm9mZnNldAkJPSAwLAorCQkuc2l6ZQkJPSA0ICogTkFORF9CTE9DS19TSVpFLAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCS8qIGZvcmNlIHJlYWQtb25seSAqLworCX0sCisJeworCQkubmFtZQkJPSAiVS1Cb290IiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4ODAwMDAgKi8KKwkJLnNpemUJCT0gMTUgKiBOQU5EX0JMT0NLX1NJWkUsCisJCS5tYXNrX2ZsYWdzCT0gTVREX1dSSVRFQUJMRSwJLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwKKwl7CisJCS5uYW1lCQk9ICJVLUJvb3QgRW52IiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCS8qIE9mZnNldCA9IDB4MjYwMDAwICovCisJCS5zaXplCQk9IDEgKiBOQU5EX0JMT0NLX1NJWkUsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJLZXJuZWwiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwJLyogT2Zmc2V0ID0gMHgyODAwMDAgKi8KKwkJLnNpemUJCT0gMzIgKiBOQU5EX0JMT0NLX1NJWkUsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJGaWxlIFN5c3RlbSIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAkvKiBPZmZzZXQgPSAweDY4MDAwMCAqLworCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfbmFuZF9wbGF0Zm9ybV9kYXRhIGRldmtpdDgwMDBfbmFuZF9kYXRhID0geworCS5vcHRpb25zCT0gTkFORF9CVVNXSURUSF8xNiwKKwkucGFydHMJCT0gZGV2a2l0ODAwMF9uYW5kX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShkZXZraXQ4MDAwX25hbmRfcGFydGl0aW9ucyksCisJLmRtYV9jaGFubmVsCT0gLTEsCQkvKiBkaXNhYmxlIERNQSBpbiBPTUFQIE5BTkQgZHJpdmVyICovCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRldmtpdDgwMDBfbmFuZF9yZXNvdXJjZSA9IHsKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkZXZraXQ4MDAwX25hbmRfZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwMi1uYW5kIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmRldmtpdDgwMDBfbmFuZF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZkZXZraXQ4MDAwX25hbmRfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gbW1jW10gPSB7CisJeworCQkubW1jCQk9IDEsCisJCS53aXJlcwkJPSA4LAorCQkuZ3Bpb193cAk9IDI5LAorCX0sCisJe30JLyogVGVybWluYXRvciAqLworfTsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIGRldmtpdDgwMDBfY29uZmlnW10gX19pbml0ZGF0YSA9IHsKK307CisKK3N0YXRpYyBpbnQgZGV2a2l0ODAwMF9wYW5lbF9lbmFibGVfbGNkKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0dQSU8sIDB4ODAsIFJFR19HUElPREFUQURJUjEpOworCXR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfTEVELCAweDAsIDB4MCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGV2a2l0ODAwMF9wYW5lbF9kaXNhYmxlX2xjZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7Cit9CitzdGF0aWMgaW50IGRldmtpdDgwMDBfcGFuZWxfZW5hYmxlX2R2aShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRldmtpdDgwMDBfcGFuZWxfZGlzYWJsZV9kdmkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworfQorCitzdGF0aWMgaW50IGRldmtpdDgwMDBfcGFuZWxfZW5hYmxlX3R2KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZXZraXQ4MDAwX3BhbmVsX2Rpc2FibGVfdHYoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworfQorCisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBkZXZraXQ4MDAwX3ZtbWMxX3N1cHBseSA9IHsKKwkuc3VwcGx5CQkJPSAidm1tYyIsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgZGV2a2l0ODAwMF92c2ltX3N1cHBseSA9IHsKKwkuc3VwcGx5CQkJPSAidm1tY19hdXgiLAorfTsKKworCitzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RldmljZSBkZXZraXQ4MDAwX2xjZF9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAibGNkIiwKKwkuZHJpdmVyX25hbWUgICAgICAgICAgICA9ICJpbm5vbHV4X2F0X3BhbmVsIiwKKwkudHlwZSAgICAgICAgICAgICAgICAgICA9IE9NQVBfRElTUExBWV9UWVBFX0RQSSwKKwkucGh5LmRwaS5kYXRhX2xpbmVzICAgICA9IDI0LAorCS5wbGF0Zm9ybV9lbmFibGUgICAgICAgID0gZGV2a2l0ODAwMF9wYW5lbF9lbmFibGVfbGNkLAorCS5wbGF0Zm9ybV9kaXNhYmxlICAgICAgID0gZGV2a2l0ODAwMF9wYW5lbF9kaXNhYmxlX2xjZCwKK307CitzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RldmljZSBkZXZraXQ4MDAwX2R2aV9kZXZpY2UgPSB7CisJLm5hbWUgICAgICAgICAgICAgICAgICAgPSAiZHZpIiwKKwkuZHJpdmVyX25hbWUgICAgICAgICAgICA9ICJnZW5lcmljX3BhbmVsIiwKKwkudHlwZSAgICAgICAgICAgICAgICAgICA9IE9NQVBfRElTUExBWV9UWVBFX0RQSSwKKwkucGh5LmRwaS5kYXRhX2xpbmVzICAgICA9IDI0LAorCS5wbGF0Zm9ybV9lbmFibGUgICAgICAgID0gZGV2a2l0ODAwMF9wYW5lbF9lbmFibGVfZHZpLAorCS5wbGF0Zm9ybV9kaXNhYmxlICAgICAgID0gZGV2a2l0ODAwMF9wYW5lbF9kaXNhYmxlX2R2aSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlIGRldmtpdDgwMDBfdHZfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICAgICAgICAgID0gInR2IiwKKwkuZHJpdmVyX25hbWUgICAgICAgICAgICA9ICJ2ZW5jIiwKKwkudHlwZSAgICAgICAgICAgICAgICAgICA9IE9NQVBfRElTUExBWV9UWVBFX1ZFTkMsCisJLnBoeS52ZW5jLnR5cGUgICAgICAgICAgPSBPTUFQX0RTU19WRU5DX1RZUEVfU1ZJREVPLAorCS5wbGF0Zm9ybV9lbmFibGUgICAgICAgID0gZGV2a2l0ODAwMF9wYW5lbF9lbmFibGVfdHYsCisJLnBsYXRmb3JtX2Rpc2FibGUgICAgICAgPSBkZXZraXQ4MDAwX3BhbmVsX2Rpc2FibGVfdHYsCit9OworCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkZXZraXQ4MDAwX2Rzc19kZXZpY2VzW10gPSB7CisJJmRldmtpdDgwMDBfbGNkX2RldmljZSwKKwkmZGV2a2l0ODAwMF9kdmlfZGV2aWNlLAorCSZkZXZraXQ4MDAwX3R2X2RldmljZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfYm9hcmRfaW5mbyBkZXZraXQ4MDAwX2Rzc19kYXRhID0geworCS5udW1fZGV2aWNlcyA9IEFSUkFZX1NJWkUoZGV2a2l0ODAwMF9kc3NfZGV2aWNlcyksCisJLmRldmljZXMgPSBkZXZraXQ4MDAwX2Rzc19kZXZpY2VzLAorCS5kZWZhdWx0X2RldmljZSA9ICZkZXZraXQ4MDAwX2xjZF9kZXZpY2UsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkZXZraXQ4MDAwX2Rzc19kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBkc3MiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZGV2a2l0ODAwMF9kc3NfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IGRldmtpdDgwMDBfdmRkYV9kYWNfc3VwcGx5ID0geworCS5zdXBwbHkgPSAidmRkYV9kYWMiLAorCS5kZXYJPSAmZGV2a2l0ODAwMF9kc3NfZGV2aWNlLmRldiwKK307CisKK3N0YXRpYyBpbnQgYm9hcmRfa2V5bWFwW10gPSB7CisJS0VZKDAsIDAsIEtFWV8xKSwKKwlLRVkoMSwgMCwgS0VZXzIpLAorCUtFWSgyLCAwLCBLRVlfMyksCisJS0VZKDAsIDEsIEtFWV80KSwKKwlLRVkoMSwgMSwgS0VZXzUpLAorCUtFWSgyLCAxLCBLRVlfNiksCisJS0VZKDMsIDEsIEtFWV9GNSksCisJS0VZKDAsIDIsIEtFWV83KSwKKwlLRVkoMSwgMiwgS0VZXzgpLAorCUtFWSgyLCAyLCBLRVlfOSksCisJS0VZKDMsIDIsIEtFWV9GNiksCisJS0VZKDAsIDMsIEtFWV9GNyksCisJS0VZKDEsIDMsIEtFWV8wKSwKKwlLRVkoMiwgMywgS0VZX0Y4KSwKKwlQRVJTSVNURU5UX0tFWSg0LCA1KSwKKwlLRVkoNCwgNCwgS0VZX1ZPTFVNRVVQKSwKKwlLRVkoNSwgNSwgS0VZX1ZPTFVNRURPV04pLAorCTAKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleW1hcF9kYXRhIGJvYXJkX21hcF9kYXRhID0geworCS5rZXltYXAJCQk9IGJvYXJkX2tleW1hcCwKKwkua2V5bWFwX3NpemUJCT0gQVJSQVlfU0laRShib2FyZF9rZXltYXApLAorfTsKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2tleXBhZF9kYXRhIGRldmtpdDgwMDBfa3BfZGF0YSA9IHsKKwkua2V5bWFwX2RhdGEJPSAmYm9hcmRfbWFwX2RhdGEsCisJLnJvd3MJCT0gNiwKKwkuY29scwkJPSA2LAorCS5yZXAJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZ3Bpb19sZWRzW107CisKK3N0YXRpYyBpbnQgZGV2a2l0ODAwMF90d2xfZ3Bpb19zZXR1cChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXVuc2lnbmVkIGdwaW8sIHVuc2lnbmVkIG5ncGlvKQoreworCW9tYXBfbXV4X2luaXRfZ3BpbygyOSwgT01BUF9QSU5fSU5QVVQpOworCS8qIGdwaW8gKyAwIGlzICJtbWMwX2NkIiAoaW5wdXQvSVJRKSAqLworCW1tY1swXS5ncGlvX2NkID0gZ3BpbyArIDA7CisJb21hcDJfaHNtbWNfaW5pdChtbWMpOworCisJLyogbGluayByZWd1bGF0b3JzIHRvIE1NQyBhZGFwdGVycyAqLworCWRldmtpdDgwMDBfdm1tYzFfc3VwcGx5LmRldiA9IG1tY1swXS5kZXY7CisJZGV2a2l0ODAwMF92c2ltX3N1cHBseS5kZXYgPSBtbWNbMF0uZGV2OworCisJLyogUkVWSVNJVDogbmVlZCBlaGNpLW9tYXAgaG9va3MgZm9yIGV4dGVybmFsIFZCVVMKKwkgKiBwb3dlciBzd2l0Y2ggYW5kIG92ZXJjdXJyZW50IGRldGVjdAorCSAqLworCisJZ3Bpb19yZXF1ZXN0KGdwaW8gKyAxLCAiRUhDSV9uT0MiKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvICsgMSk7CisKKwkvKiBUV0w0MDMwX0dQSU9fTUFYICsgMCA9PSBsZWRBLCBFSENJIG5FTl9VU0JfUFdSIChvdXQsIGFjdGl2ZSBsb3cpICovCisJZ3Bpb19yZXF1ZXN0KGdwaW8gKyBUV0w0MDMwX0dQSU9fTUFYLCAibkVOX1VTQl9QV1IiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbyArIFRXTDQwMzBfR1BJT19NQVgsIDEpOworCisJLyogVFdMNDAzMF9HUElPX01BWCArIDEgPT0gbGVkQiwgUE1VX1NUQVQgKG91dCwgYWN0aXZlIGxvdyBMRUQpICovCisJZ3Bpb19sZWRzWzJdLmdwaW8gPSBncGlvICsgVFdMNDAzMF9HUElPX01BWCArIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2dwaW9fcGxhdGZvcm1fZGF0YSBkZXZraXQ4MDAwX2dwaW9fZGF0YSA9IHsKKwkuZ3Bpb19iYXNlCT0gT01BUF9NQVhfR1BJT19MSU5FUywKKwkuaXJxX2Jhc2UJPSBUV0w0MDMwX0dQSU9fSVJRX0JBU0UsCisJLmlycV9lbmQJPSBUV0w0MDMwX0dQSU9fSVJRX0VORCwKKwkudXNlX2xlZHMJPSB0cnVlLAorCS5wdWxsdXBzCT0gQklUKDEpLAorCS5wdWxsZG93bnMJPSBCSVQoMikgfCBCSVQoNikgfCBCSVQoNykgfCBCSVQoOCkgfCBCSVQoMTMpCisJCQkJfCBCSVQoMTUpIHwgQklUKDE2KSB8IEJJVCgxNyksCisJLnNldHVwCQk9IGRldmtpdDgwMDBfdHdsX2dwaW9fc2V0dXAsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgZGV2a2l0ODAwMF92cGxsMl9zdXBwbGllc1tdID0geworCXsKKwkuc3VwcGx5CQk9ICJ2ZHZpIiwKKwkuZGV2CQk9ICZkZXZraXQ4MDAwX2xjZF9kZXZpY2UuZGV2LAorCX0sCisJeworCS5zdXBwbHkJCT0gInZkc3NfZHNpIiwKKwkuZGV2CQk9ICZkZXZraXQ4MDAwX2Rzc19kZXZpY2UuZGV2LAorCX0KK307CisKKy8qIFZNTUMxIGZvciBNTUMxIHBpbnMgQ01ELCBDTEssIERBVDAuLkRBVDMgKDIwIG1BLCBwbHVzIGNhcmQgPT0gbWF4IDIyMCBtQSkgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBkZXZraXQ4MDAwX3ZtbWMxID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMTg1MDAwMCwKKwkJLm1heF91VgkJCT0gMzE1MDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmZGV2a2l0ODAwMF92bW1jMV9zdXBwbHksCit9OworCisvKiBWU0lNIGZvciBNTUMxIHBpbnMgREFUNC4uREFUNyAoMiBtQSwgcGx1cyBjYXJkID09IG1heCA1MCBtQSkgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBkZXZraXQ4MDAwX3ZzaW0gPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAzMDAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcwk9ICZkZXZraXQ4MDAwX3ZzaW1fc3VwcGx5LAorfTsKKworLyogVkRBQyBmb3IgRFNTIGRyaXZpbmcgUy1WaWRlbyAoOCBtQSB1bmxvYWRlZCwgbWF4IDY1IG1BKSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGRldmtpdDgwMDBfdmRhYyA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDE4MDAwMDAsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJmRldmtpdDgwMDBfdmRkYV9kYWNfc3VwcGx5LAorfTsKKworLyogVlBMTDIgZm9yIGRpZ2l0YWwgdmlkZW8gb3V0cHV0cyAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGRldmtpdDgwMDBfdnBsbDIgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZQkJCT0gIlZEVkkiLAorCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAxODAwMDAwLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSBBUlJBWV9TSVpFKGRldmtpdDgwMDBfdnBsbDJfc3VwcGxpZXMpLAorCS5jb25zdW1lcl9zdXBwbGllcwk9IGRldmtpdDgwMDBfdnBsbDJfc3VwcGxpZXMsCit9OworCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfdXNiX2RhdGEgZGV2a2l0ODAwMF91c2JfZGF0YSA9IHsKKwkudXNiX21vZGUJPSBUMl9VU0JfTU9ERV9VTFBJLAorfTsKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2NvZGVjX2F1ZGlvX2RhdGEgZGV2a2l0ODAwMF9hdWRpb19kYXRhID0geworCS5hdWRpb19tY2xrID0gMjYwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IHR3bDQwMzBfY29kZWNfZGF0YSBkZXZraXQ4MDAwX2NvZGVjX2RhdGEgPSB7CisJLmF1ZGlvX21jbGsgPSAyNjAwMDAwMCwKKwkuYXVkaW8gPSAmZGV2a2l0ODAwMF9hdWRpb19kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgZGV2a2l0ODAwMF90d2xkYXRhID0geworCS5pcnFfYmFzZQk9IFRXTDQwMzBfSVJRX0JBU0UsCisJLmlycV9lbmQJPSBUV0w0MDMwX0lSUV9FTkQsCisKKwkvKiBwbGF0Zm9ybV9kYXRhIGZvciBjaGlsZHJlbiBnb2VzIGhlcmUgKi8KKwkudXNiCQk9ICZkZXZraXQ4MDAwX3VzYl9kYXRhLAorCS5ncGlvCQk9ICZkZXZraXQ4MDAwX2dwaW9fZGF0YSwKKwkuY29kZWMJCT0gJmRldmtpdDgwMDBfY29kZWNfZGF0YSwKKwkudm1tYzEJCT0gJmRldmtpdDgwMDBfdm1tYzEsCisJLnZzaW0JCT0gJmRldmtpdDgwMDBfdnNpbSwKKwkudmRhYwkJPSAmZGV2a2l0ODAwMF92ZGFjLAorCS52cGxsMgkJPSAmZGV2a2l0ODAwMF92cGxsMiwKKwkua2V5cGFkCQk9ICZkZXZraXQ4MDAwX2twX2RhdGEsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgZGV2a2l0ODAwMF9pMmNfYm9hcmRpbmZvW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygidHdsNDAzMCIsIDB4NDgpLAorCQkuZmxhZ3MgPSBJMkNfQ0xJRU5UX1dBS0UsCisJCS5pcnEgPSBJTlRfMzRYWF9TWVNfTklSUSwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZGV2a2l0ODAwMF90d2xkYXRhLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkZXZraXQ4MDAwX2kyY19pbml0KHZvaWQpCit7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDI2MDAsIGRldmtpdDgwMDBfaTJjX2JvYXJkaW5mbywKKwkJCUFSUkFZX1NJWkUoZGV2a2l0ODAwMF9pMmNfYm9hcmRpbmZvKSk7CisJLyogQnVzIDMgaXMgYXR0YWNoZWQgdG8gdGhlIERWSSBwb3J0IHdoZXJlIGRldmljZXMgbGlrZSB0aGUgcGljbyBETFAKKwkgKiBwcm9qZWN0b3IgZG9uJ3Qgd29yayByZWxpYWJseSB3aXRoIDQwMGtIeiAqLworCW9tYXBfcmVnaXN0ZXJfaTJjX2J1cygzLCA0MDAsIE5VTEwsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGdwaW9fbGVkc1tdID0geworCXsKKwkJLm5hbWUJCQk9ICJsZWQxIiwKKwkJLmRlZmF1bHRfdHJpZ2dlcgk9ICJoZWFydGJlYXQiLAorCQkuZ3BpbwkJCT0gMTg2LAorCQkuYWN0aXZlX2xvdwkJPSB0cnVlLAorCX0sCisJeworCQkubmFtZQkJCT0gImxlZDIiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm1tYzAiLAorCQkuZ3BpbwkJCT0gMTYzLAorCQkuYWN0aXZlX2xvdwkJPSB0cnVlLAorCX0sCisJeworCQkubmFtZQkJCT0gImxlZEIiLAorCQkuZGVmYXVsdF90cmlnZ2VyCT0gIm5vbmUiLAorCQkuZ3BpbwkJCT0gMTUzLAorCQkuYWN0aXZlX2xvdyAgICAgICAgICAgICA9IHRydWUsCisJfSwKKwl7CisJCS5uYW1lCQkJPSAibGVkMyIsCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAibm9uZSIsCisJCS5ncGlvCQkJPSAxNjQsCisJCS5hY3RpdmVfbG93ICAgICAgICAgICAgID0gdHJ1ZSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIGdwaW9fbGVkX2luZm8gPSB7CisJLmxlZHMJCT0gZ3Bpb19sZWRzLAorCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUoZ3Bpb19sZWRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxlZHNfZ3BpbyA9IHsKKwkubmFtZQk9ICJsZWRzLWdwaW8iLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmdwaW9fbGVkX2luZm8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBncGlvX2J1dHRvbnNbXSA9IHsKKwl7CisJCS5jb2RlCQkJPSBCVE5fRVhUUkEsCisJCS5ncGlvCQkJPSAyNiwKKwkJLmRlc2MJCQk9ICJ1c2VyIiwKKwkJLndha2V1cAkJCT0gMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfcGxhdGZvcm1fZGF0YSBncGlvX2tleV9pbmZvID0geworCS5idXR0b25zCT0gZ3Bpb19idXR0b25zLAorCS5uYnV0dG9ucwk9IEFSUkFZX1NJWkUoZ3Bpb19idXR0b25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGtleXNfZ3BpbyA9IHsKKwkubmFtZQk9ICJncGlvLWtleXMiLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmdwaW9fa2V5X2luZm8sCisJfSwKK307CisKKworc3RhdGljIHZvaWQgX19pbml0IGRldmtpdDgwMDBfaW5pdF9pcnEodm9pZCkKK3sKKwlvbWFwX2JvYXJkX2NvbmZpZyA9IGRldmtpdDgwMDBfY29uZmlnOworCW9tYXBfYm9hcmRfY29uZmlnX3NpemUgPSBBUlJBWV9TSVpFKGRldmtpdDgwMDBfY29uZmlnKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9odyhtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zLAorCQkJICAgICBtdDQ2aDMybTMybGY2X3NkcmNfcGFyYW1zKTsKKwlvbWFwX2luaXRfaXJxKCk7CisjaWZkZWYgQ09ORklHX09NQVBfMzJLX1RJTUVSCisJb21hcDJfZ3BfY2xvY2tldmVudF9zZXRfZ3B0aW1lcigxMik7CisjZW5kaWYKKwlvbWFwX2dwaW9faW5pdCgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZGV2a2l0ODAwMF9hZHM3ODQ2X2luaXQodm9pZCkKK3sKKwlpbnQgZ3BpbyA9IE9NQVAzX0RFVktJVF9UU19HUElPOworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoZ3BpbywgImFkczc4NDZfcGVuX2Rvd24iKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8gJWQgZm9yICIKKwkJCQkiYWRzNzg0NiBwZW4gZG93biBJUlFcbiIsIGdwaW8pOworCQlyZXR1cm47CisJfQorCisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpbyk7Cit9CisKK3N0YXRpYyBpbnQgYWRzNzg0Nl9nZXRfcGVuZG93bl9zdGF0ZSh2b2lkKQoreworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWUoT01BUDNfREVWS0lUX1RTX0dQSU8pOworfQorCitzdGF0aWMgc3RydWN0IGFkczc4NDZfcGxhdGZvcm1fZGF0YSBhZHM3ODQ2X2NvbmZpZyA9IHsKKwkueF9tYXggICAgICAgICAgICAgICAgICA9IDB4MGZmZiwKKwkueV9tYXggICAgICAgICAgICAgICAgICA9IDB4MGZmZiwKKwkueF9wbGF0ZV9vaG1zICAgICAgICAgICA9IDE4MCwKKwkucHJlc3N1cmVfbWF4ICAgICAgICAgICA9IDI1NSwKKwkuZGVib3VuY2VfbWF4ICAgICAgICAgICA9IDEwLAorCS5kZWJvdW5jZV90b2wgICAgICAgICAgID0gNSwKKwkuZGVib3VuY2VfcmVwICAgICAgICAgICA9IDEsCisJLmdldF9wZW5kb3duX3N0YXRlCT0gYWRzNzg0Nl9nZXRfcGVuZG93bl9zdGF0ZSwKKwkua2VlcF92cmVmX29uCQk9IDEsCisJLnNldHRsZV9kZWxheV91c2VjcyAgICAgPSAxNTAsCit9OworCitzdGF0aWMgc3RydWN0IG9tYXAyX21jc3BpX2RldmljZV9jb25maWcgYWRzNzg0Nl9tY3NwaV9jb25maWcgPSB7CisJLnR1cmJvX21vZGUJPSAwLAorCS5zaW5nbGVfY2hhbm5lbAk9IDEsCS8qIDA6IHNsYXZlLCAxOiBtYXN0ZXIgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gZGV2a2l0ODAwMF9zcGlfYm9hcmRfaW5mb1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkubW9kYWxpYXMJCT0gImFkczc4NDYiLAorCQkuYnVzX251bQkJPSAyLAorCQkuY2hpcF9zZWxlY3QJCT0gMCwKKwkJLm1heF9zcGVlZF9oegkJPSAxNTAwMDAwLAorCQkuY29udHJvbGxlcl9kYXRhCT0gJmFkczc4NDZfbWNzcGlfY29uZmlnLAorCQkuaXJxCQkJPSBPTUFQX0dQSU9fSVJRKE9NQVAzX0RFVktJVF9UU19HUElPKSwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJmFkczc4NDZfY29uZmlnLAorCX0KK307CisKKyNkZWZpbmUgT01BUF9ETTkwMDBfQkFTRQkweDJjMDAwMDAwCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcF9kbTkwMDBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJCT0gT01BUF9ETTkwMDBfQkFTRSwKKwkJLmVuZAkJPSAoT01BUF9ETTkwMDBfQkFTRSArIDB4NCAtIDEpLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAkJPSAoT01BUF9ETTkwMDBfQkFTRSArIDB4NDAwKSwKKwkJLmVuZAkJPSAoT01BUF9ETTkwMDBfQkFTRSArIDB4NDAwICsgMHg0IC0gMSksCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CQk9IE9NQVBfR1BJT19JUlEoT01BUF9ETTkwMDBfR1BJT19JUlEpLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEgfCBJUlFGX1RSSUdHRVJfTE9XLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGRtOTAwMF9wbGF0X2RhdGEgb21hcF9kbTkwMDBfcGxhdGRhdGEgPSB7CisJLmZsYWdzID0gRE05MDAwX1BMQVRGXzE2QklUT05MWSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfZG05MDAwX2RldiA9IHsKKwkubmFtZSA9ICJkbTkwMDAiLAorCS5pZCA9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShvbWFwX2RtOTAwMF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG9tYXBfZG05MDAwX3Jlc291cmNlcywKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZvbWFwX2RtOTAwMF9wbGF0ZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXBfZG05MDAwX2luaXQodm9pZCkKK3sKKwlpZiAoZ3Bpb19yZXF1ZXN0KE9NQVBfRE05MDAwX0dQSU9fSVJRLCAiZG05MDAwIGlycSIpIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IEdQSU8lZCBmb3IgZG05MDAwIElSUVxuIiwKKwkJCU9NQVBfRE05MDAwX0dQSU9fSVJRKTsKKwkJcmV0dXJuOworCQl9CisKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChPTUFQX0RNOTAwMF9HUElPX0lSUSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZraXQ4MDAwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZkZXZraXQ4MDAwX2Rzc19kZXZpY2UsCisJJmxlZHNfZ3BpbywKKwkma2V5c19ncGlvLAorCSZvbWFwX2RtOTAwMF9kZXYsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZGV2a2l0ODAwMF9mbGFzaF9pbml0KHZvaWQpCit7CisJdTggY3MgPSAwOworCXU4IG5hbmRjcyA9IEdQTUNfQ1NfTlVNICsgMTsKKworCXUzMiBncG1jX2Jhc2VfYWRkID0gT01BUDM0WFhfR1BNQ19WSVJUOworCisJLyogZmluZCBvdXQgdGhlIGNoaXAtc2VsZWN0IG9uIHdoaWNoIE5BTkQgZXhpc3RzICovCisJd2hpbGUgKGNzIDwgR1BNQ19DU19OVU0pIHsKKwkJdTMyIHJldCA9IDA7CisJCXJldCA9IGdwbWNfY3NfcmVhZF9yZWcoY3MsIEdQTUNfQ1NfQ09ORklHMSk7CisKKwkJaWYgKChyZXQgJiAweEMwMCkgPT0gMHg4MDApIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIkZvdW5kIE5BTkQgb24gQ1MlZFxuIiwgY3MpOworCQkJaWYgKG5hbmRjcyA+IEdQTUNfQ1NfTlVNKQorCQkJCW5hbmRjcyA9IGNzOworCQl9CisJCWNzKys7CisJfQorCisJaWYgKG5hbmRjcyA+IEdQTUNfQ1NfTlVNKSB7CisJCXByaW50ayhLRVJOX0lORk8gIk5BTkQ6IFVuYWJsZSB0byBmaW5kIGNvbmZpZ3VyYXRpb24gIgorCQkJCSAiaW4gR1BNQ1xuICIpOworCQlyZXR1cm47CisJfQorCisJaWYgKG5hbmRjcyA8IEdQTUNfQ1NfTlVNKSB7CisJCWRldmtpdDgwMDBfbmFuZF9kYXRhLmNzID0gbmFuZGNzOworCQlkZXZraXQ4MDAwX25hbmRfZGF0YS5ncG1jX2NzX2Jhc2VhZGRyID0gKHZvaWQgKikKKwkJCShncG1jX2Jhc2VfYWRkICsgR1BNQ19DUzBfQkFTRSArIG5hbmRjcyAqIEdQTUNfQ1NfU0laRSk7CisJCWRldmtpdDgwMDBfbmFuZF9kYXRhLmdwbWNfYmFzZWFkZHIgPSAodm9pZCAqKQorCQkJKGdwbWNfYmFzZV9hZGQpOworCisJCXByaW50ayhLRVJOX0lORk8gIlJlZ2lzdGVyaW5nIE5BTkQgb24gQ1MlZFxuIiwgbmFuZGNzKTsKKwkJaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZGV2a2l0ODAwMF9uYW5kX2RldmljZSkgPCAwKQorCQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgTkFORCBkZXZpY2VcbiIpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSBtdXNiX2JvYXJkX2RhdGEgPSB7CisJLmludGVyZmFjZV90eXBlCQk9IE1VU0JfSU5URVJGQUNFX1VMUEksCisJLm1vZGUJCQk9IE1VU0JfT1RHLAorCS5wb3dlcgkJCT0gMTAwLAorfTsKKworc3RhdGljIHN0cnVjdCBlaGNpX2hjZF9vbWFwX3BsYXRmb3JtX2RhdGEgZWhjaV9wZGF0YSBfX2luaXRjb25zdCA9IHsKKworCS5wb3J0X21vZGVbMF0gPSBFSENJX0hDRF9PTUFQX01PREVfUEhZLAorCS5wb3J0X21vZGVbMV0gPSBFSENJX0hDRF9PTUFQX01PREVfUEhZLAorCS5wb3J0X21vZGVbMl0gPSBFSENJX0hDRF9PTUFQX01PREVfVU5LTk9XTiwKKworCS5waHlfcmVzZXQgID0gdHJ1ZSwKKwkucmVzZXRfZ3Bpb19wb3J0WzBdICA9IC1FSU5WQUwsCisJLnJlc2V0X2dwaW9fcG9ydFsxXSAgPSAxNDcsCisJLnJlc2V0X2dwaW9fcG9ydFsyXSAgPSAtRUlOVkFMCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZGV2a2l0ODAwMF9pbml0KHZvaWQpCit7CisJZGV2a2l0ODAwMF9pMmNfaW5pdCgpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmtpdDgwMDBfZGV2aWNlcywKKwkJCUFSUkFZX1NJWkUoZGV2a2l0ODAwMF9kZXZpY2VzKSk7CisJb21hcF9ib2FyZF9jb25maWcgPSBkZXZraXQ4MDAwX2NvbmZpZzsKKwlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShkZXZraXQ4MDAwX2NvbmZpZyk7CisKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhkZXZraXQ4MDAwX3NwaV9ib2FyZF9pbmZvLAorCUFSUkFZX1NJWkUoZGV2a2l0ODAwMF9zcGlfYm9hcmRfaW5mbykpOworCisJb21hcF9zZXJpYWxfaW5pdCgpOworCisJb21hcF9kbTkwMDBfaW5pdCgpOworCisJZGV2a2l0ODAwMF9hZHM3ODQ2X2luaXQoKTsKKworCW9tYXBfbXV4X2luaXRfZ3BpbygxNzAsIE9NQVBfUElOX0lOUFVUKTsKKworCWdwaW9fcmVxdWVzdCgxNzAsICJEVklfblBEIik7CisJLyogUkVWSVNJVCBsZWF2ZSBEVkkgcG93ZXJlZCBkb3duIHVudGlsIGl0J3MgbmVlZGVkIC4uLiAqLworCWdwaW9fZGlyZWN0aW9uX291dHB1dCgxNzAsIHRydWUpOworCisJdXNiX211c2JfaW5pdCgmbXVzYl9ib2FyZF9kYXRhKTsKKwl1c2JfZWhjaV9pbml0KCZlaGNpX3BkYXRhKTsKKwlkZXZraXQ4MDAwX2ZsYXNoX2luaXQoKTsKKworCS8qIEVuc3VyZSBTRFJDIHBpbnMgYXJlIG11eCdkIGZvciBzZWxmLXJlZnJlc2ggKi8KKwlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyX2NrZTAiLCBPTUFQX1BJTl9PVVRQVVQpOworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZHJfY2tlMSIsIE9NQVBfUElOX09VVFBVVCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBkZXZraXQ4MDAwX21hcF9pbyh2b2lkKQoreworCW9tYXAyX3NldF9nbG9iYWxzXzM0M3goKTsKKwlvbWFwMzR4eF9tYXBfY29tbW9uX2lvKCk7Cit9CisKK01BQ0hJTkVfU1RBUlQoREVWS0lUODAwMCwgIk9NQVAzIERldmtpdDgwMDAiKQorCS5waHlzX2lvCT0gMHg0ODAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZDgwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDgwMDAwMTAwLAorCS5tYXBfaW8JCT0gZGV2a2l0ODAwMF9tYXBfaW8sCisJLmluaXRfaXJxCT0gZGV2a2l0ODAwMF9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gZGV2a2l0ODAwMF9pbml0LAorCS50aW1lcgkJPSAmb21hcF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWdlbmVyaWMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCmluZGV4IDdlNmU2Y2EuLjE2Y2MwNjggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtZ2VuZXJpYy5jCkBAIC01MCw3ICs1MCw3IEBACiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9nZW5lcmljX21hcF9pbyh2b2lkKQogewogCW9tYXAyX3NldF9nbG9iYWxzXzI0MngoKTsgLyogc2hvdWxkIGJlIDI0MngsIDI0M3gsIG9yIDM0M3ggKi8KLQlvbWFwMl9tYXBfY29tbW9uX2lvKCk7CisJb21hcDI0MnhfbWFwX2NvbW1vbl9pbygpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfR0VORVJJQywgIkdlbmVyaWMgT01BUDI0eHgiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCmluZGV4IGNmYjdmMTIuLjA2NjVmMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CiAjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CkBAIC0yOSw3ICszMCw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvZmxhc2guaD4KIAogI2luY2x1ZGUgPHBsYXQvY29udHJvbC5oPgogI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgpAQCAtMTE1LDggKzExNSw3IEBACiAJfQogfTsKIAotc3RhdGljIHN0cnVjdCBmbGFzaF9wbGF0Zm9ybV9kYXRhIGg0X2ZsYXNoX2RhdGEgPSB7Ci0JLm1hcF9uYW1lCT0gImNmaV9wcm9iZSIsCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBoNF9mbGFzaF9kYXRhID0gewogCS53aWR0aAkJPSAyLAogCS5wYXJ0cwkJPSBoNF9wYXJ0aXRpb25zLAogCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUoaDRfcGFydGl0aW9ucyksCkBAIC0xMjcsNyArMTI2LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGg0X2ZsYXNoX2RldmljZSA9IHsKLQkubmFtZQkJPSAib21hcGZsYXNoIiwKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCiAJLmlkCQk9IDAsCiAJLmRldgkJPSB7CiAJCS5wbGF0Zm9ybV9kYXRhCT0gJmg0X2ZsYXNoX2RhdGEsCkBAIC0zNzAsNyArMzY5LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2g0X21hcF9pbyh2b2lkKQogewogCW9tYXAyX3NldF9nbG9iYWxzXzI0MngoKTsKLQlvbWFwMl9tYXBfY29tbW9uX2lvKCk7CisJb21hcDI0MnhfbWFwX2NvbW1vbl9pbygpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfSDQsICJPTUFQMjQyMCBINCBib2FyZCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWlnZXAwMDIwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWlnZXAwMDIwLmMKaW5kZXggMTE3YjhmZC4uOTk1ODk4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1pZ2VwMDAyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaWdlcDAwMjAuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CkBAIC0yOCw5ICsyOSwxMiBAQAogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CiAjaW5jbHVkZSA8cGxhdC9ncG1jLmg+CiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KKyNpbmNsdWRlIDxwbGF0L2Rpc3BsYXkuaD4KKyNpbmNsdWRlIDxwbGF0L29uZW5hbmQuaD4KIAogI2luY2x1ZGUgIm11eC5oIgotI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCisjaW5jbHVkZSAiaHNtbWMuaCIKKyNpbmNsdWRlICJzZHJhbS1udW1vbnl4LW02NWt4eHh4YW0uaCIKIAogI2RlZmluZSBJR0VQMl9TTVNDOTExWF9DUyAgICAgICA1CiAjZGVmaW5lIElHRVAyX1NNU0M5MTFYX0dQSU8gICAgIDE3NgpAQCAtMzgsNiArNDIsMTA4IEBACiAjZGVmaW5lIElHRVAyX0dQSU9fTEVEMF9SRUQgCTI2CiAjZGVmaW5lIElHRVAyX0dQSU9fTEVEMF9HUkVFTiAJMjcKICNkZWZpbmUgSUdFUDJfR1BJT19MRUQxX1JFRCAgIAkyOAorI2RlZmluZSBJR0VQMl9HUElPX0RWSV9QVVAJMTcwCisjZGVmaW5lIElHRVAyX0dQSU9fV0lGSV9OUEQgCTk0CisjZGVmaW5lIElHRVAyX0dQSU9fV0lGSV9OUkVTRVQgCTk1CisKKyNpZiBkZWZpbmVkKENPTkZJR19NVERfT05FTkFORF9PTUFQMikgfHwgXAorCWRlZmluZWQoQ09ORklHX01URF9PTkVOQU5EX09NQVAyX01PRFVMRSkKKworI2RlZmluZSBPTkVOQU5EX01BUCAgICAgICAgICAgICAweDIwMDAwMDAwCisKKy8qIE5BTkQwNEdSNEUxQSAoIHgyIEZsYXNoIGJ1aWx0LWluIENPTUJPIFBPUCBNRU1PUlkgKQorICogU2luY2UgdGhlIGRldmljZSBpcyBlcXVpcHBlZCB3aXRoIHR3byBEYXRhUkFNcywgYW5kIHR3by1wbGFuZSBOQU5ECisgKiBGbGFzaCBtZW1vcnkgYXJyYXksIHRoZXNlIHR3byBjb21wb25lbnQgZW5hYmxlcyBzaW11bHRhbmVvdXMgcHJvZ3JhbQorICogb2YgNEtpQi4gUGxhbmUxIGhhcyBvbmx5IGV2ZW4gYmxvY2tzIHN1Y2ggYXMgYmxvY2swLCBibG9jazIsIGJsb2NrNAorICogd2hpbGUgUGxhbmUyIGhhcyBvbmx5IG9kZCBibG9ja3Mgc3VjaCBhcyBibG9jazEsIGJsb2NrMywgYmxvY2s1LgorICogU28gTVREIHJlZ2FyZHMgaXQgYXMgNEtpQiBwYWdlIHNpemUgYW5kIDI1NktpQiBibG9jayBzaXplIDY0KigyKjIwNDgpCisgKi8KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIGlnZXAyX29uZW5hbmRfcGFydGl0aW9uc1tdID0geworCXsKKwkJLm5hbWUgICAgICAgICAgID0gIlgtTG9hZGVyIiwKKwkJLm9mZnNldCAgICAgICAgID0gMCwKKwkJLnNpemUgICAgICAgICAgID0gMiAqICg2NCooMioyMDQ4KSkKKwl9LAorCXsKKwkJLm5hbWUgICAgICAgICAgID0gIlUtQm9vdCIsCisJCS5vZmZzZXQgICAgICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgICAgICAgICAgID0gNiAqICg2NCooMioyMDQ4KSksCisJfSwKKwl7CisJCS5uYW1lICAgICAgICAgICA9ICJFbnZpcm9ubWVudCIsCisJCS5vZmZzZXQgICAgICAgICA9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUgICAgICAgICAgID0gMiAqICg2NCooMioyMDQ4KSksCisJfSwKKwl7CisJCS5uYW1lICAgICAgICAgICA9ICJLZXJuZWwiLAorCQkub2Zmc2V0ICAgICAgICAgPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplICAgICAgICAgICA9IDEyICogKDY0KigyKjIwNDgpKSwKKwl9LAorCXsKKwkJLm5hbWUgICAgICAgICAgID0gIkZpbGUgU3lzdGVtIiwKKwkJLm9mZnNldCAgICAgICAgID0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZSAgICAgICAgICAgPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgaW50IGlnZXAyX29uZW5hbmRfc2V0dXAodm9pZCBfX2lvbWVtICpvbmVuYW5kX2Jhc2UsIGludCBmcmVxKQoreworICAgICAgIC8qIG5vdGhpbmcgaXMgcmVxdWlyZWQgdG8gYmUgc2V0dXAgZm9yIG9uZW5hbmQgYXMgb2Ygbm93ICovCisgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9vbmVuYW5kX3BsYXRmb3JtX2RhdGEgaWdlcDJfb25lbmFuZF9kYXRhID0geworCS5wYXJ0cyA9IGlnZXAyX29uZW5hbmRfcGFydGl0aW9ucywKKwkubnJfcGFydHMgPSBBUlJBWV9TSVpFKGlnZXAyX29uZW5hbmRfcGFydGl0aW9ucyksCisJLm9uZW5hbmRfc2V0dXAgPSBpZ2VwMl9vbmVuYW5kX3NldHVwLAorCS5kbWFfY2hhbm5lbAk9IC0xLAkvKiBkaXNhYmxlIERNQSBpbiBPTUFQIE9uZU5BTkQgZHJpdmVyICovCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpZ2VwMl9vbmVuYW5kX2RldmljZSA9IHsKKwkubmFtZQkJPSAib21hcDItb25lbmFuZCIsCisJLmlkCQk9IC0xLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmlnZXAyX29uZW5hbmRfZGF0YSwKKwl9LAorfTsKKwordm9pZCBfX2luaXQgaWdlcDJfZmxhc2hfaW5pdCh2b2lkKQoreworCXU4CQljcyA9IDA7CisJdTgJCW9uZW5hbmRjcyA9IEdQTUNfQ1NfTlVNICsgMTsKKworCXdoaWxlIChjcyA8IEdQTUNfQ1NfTlVNKSB7CisJCXUzMiByZXQgPSAwOworCQlyZXQgPSBncG1jX2NzX3JlYWRfcmVnKGNzLCBHUE1DX0NTX0NPTkZJRzEpOworCisJCS8qIENoZWNrIGlmIE5BTkQvb25lTkFORCBpcyBjb25maWd1cmVkICovCisJCWlmICgocmV0ICYgMHhDMDApID09IDB4ODAwKQorCQkJLyogTkFORCBmb3VuZCAqLworCQkJcHJfZXJyKCJJR0VQIHYyOiBVbnN1cHBvcnRlZCBOQU5EIGZvdW5kXG4iKTsKKwkJZWxzZSB7CisJCQlyZXQgPSBncG1jX2NzX3JlYWRfcmVnKGNzLCBHUE1DX0NTX0NPTkZJRzcpOworCQkJaWYgKChyZXQgJiAweDNGKSA9PSAoT05FTkFORF9NQVAgPj4gMjQpKQorCQkJCS8qIE9ORU5BTkQgZm91bmQgKi8KKwkJCQlvbmVuYW5kY3MgPSBjczsKKwkJfQorCQljcysrOworCX0KKwlpZiAob25lbmFuZGNzID4gR1BNQ19DU19OVU0pIHsKKwkJcHJfZXJyKCJJR0VQIHYyOiBVbmFibGUgdG8gZmluZCBjb25maWd1cmF0aW9uIGluIEdQTUNcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKG9uZW5hbmRjcyA8IEdQTUNfQ1NfTlVNKSB7CisJCWlnZXAyX29uZW5hbmRfZGF0YS5jcyA9IG9uZW5hbmRjczsKKwkJaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmaWdlcDJfb25lbmFuZF9kZXZpY2UpIDwgMCkKKwkJCXByX2VycigiSUdFUCB2MjogVW5hYmxlIHRvIHJlZ2lzdGVyIE9uZU5BTkQgZGV2aWNlXG4iKTsKKwl9Cit9CisKKyNlbHNlCit2b2lkIF9faW5pdCBpZ2VwMl9mbGFzaF9pbml0KHZvaWQpIHt9CisjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX1NNU0M5MTFYKSB8fCBkZWZpbmVkKENPTkZJR19TTVNDOTExWF9NT0RVTEUpCiAKQEAgLTEwNiw2ICsyMTIsMTAgQEAKIAkuc3VwcGx5CQk9ICJ2bW1jIiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBpZ2VwMl92bW1jMl9zdXBwbHkgPSB7CisJLnN1cHBseQkJPSAidm1tYyIsCit9OworCiAvKiBWTU1DMSBmb3IgT01BUCBWRERfTU1DMSAoaS9vKSBhbmQgTU1DMSBjYXJkICovCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgaWdlcDJfdm1tYzEgPSB7CiAJLmNvbnN0cmFpbnRzID0gewpAQCAtMTIxLDcgKzIzMSwyMiBAQAogCS5jb25zdW1lcl9zdXBwbGllcyAgICAgID0gJmlnZXAyX3ZtbWMxX3N1cHBseSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9oc21tY19pbmZvIG1tY1tdID0geworLyogVk1NQzIgZm9yIE9NQVAgVkREX01NQzIgKGkvbykgYW5kIE1NQzIgV0lGSSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGlnZXAyX3ZtbWMyID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMTg1MDAwMCwKKwkJLm1heF91VgkJCT0gMzE1MDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzICA9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzICAgICAgPSAmaWdlcDJfdm1tYzJfc3VwcGx5LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwMl9oc21tY19pbmZvIG1tY1tdID0gewogCXsKIAkJLm1tYwkJPSAxLAogCQkud2lyZXMJCT0gNCwKQEAgLTE0MiwxMiArMjY3LDEzIEBACiB7CiAJLyogZ3BpbyArIDAgaXMgIm1tYzBfY2QiIChpbnB1dC9JUlEpICovCiAJbW1jWzBdLmdwaW9fY2QgPSBncGlvICsgMDsKLQl0d2w0MDMwX21tY19pbml0KG1tYyk7CisJb21hcDJfaHNtbWNfaW5pdChtbWMpOwogCiAJLyogbGluayByZWd1bGF0b3JzIHRvIE1NQyBhZGFwdGVycyAuLi4gd2UgImtub3ciIHRoZQogCSAqIHJlZ3VsYXRvcnMgd2lsbCBiZSBzZXQgdXAgb25seSAqYWZ0ZXIqIHdlIHJldHVybi4KIAkqLwogCWlnZXAyX3ZtbWMxX3N1cHBseS5kZXYgPSBtbWNbMF0uZGV2OworCWlnZXAyX3ZtbWMyX3N1cHBseS5kZXYgPSBtbWNbMV0uZGV2OwogCiAJcmV0dXJuIDA7CiB9OwpAQCAtMTY0LDIzICsyOTAsMTMwIEBACiAJLnVzYl9tb2RlCT0gVDJfVVNCX01PREVfVUxQSSwKIH07CiAKK3N0YXRpYyBpbnQgaWdlcDJfZW5hYmxlX2R2aShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KElHRVAyX0dQSU9fRFZJX1BVUCwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaWdlcDJfZGlzYWJsZV9kdmkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWdwaW9fZGlyZWN0aW9uX291dHB1dChJR0VQMl9HUElPX0RWSV9QVVAsIDApOworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RldmljZSBpZ2VwMl9kdmlfZGV2aWNlID0geworCS50eXBlCQkJPSBPTUFQX0RJU1BMQVlfVFlQRV9EUEksCisJLm5hbWUJCQk9ICJkdmkiLAorCS5kcml2ZXJfbmFtZQkJPSAiZ2VuZXJpY19wYW5lbCIsCisJLnBoeS5kcGkuZGF0YV9saW5lcwk9IDI0LAorCS5wbGF0Zm9ybV9lbmFibGUJPSBpZ2VwMl9lbmFibGVfZHZpLAorCS5wbGF0Zm9ybV9kaXNhYmxlCT0gaWdlcDJfZGlzYWJsZV9kdmksCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RldmljZSAqaWdlcDJfZHNzX2RldmljZXNbXSA9IHsKKwkmaWdlcDJfZHZpX2RldmljZQorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19ib2FyZF9pbmZvIGlnZXAyX2Rzc19kYXRhID0geworCS5udW1fZGV2aWNlcwk9IEFSUkFZX1NJWkUoaWdlcDJfZHNzX2RldmljZXMpLAorCS5kZXZpY2VzCT0gaWdlcDJfZHNzX2RldmljZXMsCisJLmRlZmF1bHRfZGV2aWNlCT0gJmlnZXAyX2R2aV9kZXZpY2UsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpZ2VwMl9kc3NfZGV2aWNlID0geworCS5uYW1lCT0gIm9tYXBkc3MiLAorCS5pZAk9IC0xLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmlnZXAyX2Rzc19kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgaWdlcDJfdnBsbDJfc3VwcGx5ID0geworCS5zdXBwbHkJPSAidmRkc19kc2kiLAorCS5kZXYJPSAmaWdlcDJfZHNzX2RldmljZS5kZXYsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgaWdlcDJfdnBsbDIgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZQkJCT0gIlZEVkkiLAorCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAxODAwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmaWdlcDJfdnBsbDJfc3VwcGx5LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGlnZXAyX2Rpc3BsYXlfaW5pdCh2b2lkKQoreworCWlmIChncGlvX3JlcXVlc3QoSUdFUDJfR1BJT19EVklfUFVQLCAiR1BJT19EVklfUFVQIikgJiYKKwkgICAgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KElHRVAyX0dQSU9fRFZJX1BVUCwgMSkpCisJCXByX2VycigiSUdFUCB2MjogQ291bGQgbm90IG9idGFpbiBncGlvIEdQSU9fRFZJX1BVUFxuIik7Cit9CisjaWZkZWYgQ09ORklHX0xFRFNfVFJJR0dFUlMKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZ3Bpb19sZWRzW10gPSB7CisJeworCQkubmFtZSA9ICJHUElPX0xFRDFfUkVEIiwKKwkJLmRlZmF1bHRfdHJpZ2dlciA9ICJoZWFydGJlYXQiLAorCQkuZ3BpbyA9IElHRVAyX0dQSU9fTEVEMV9SRUQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBncGlvX2xlZHNfaW5mbyA9IHsKKwkubGVkcyAgICAgICAgICAgPSBncGlvX2xlZHMsCisJLm51bV9sZWRzICAgICAgID0gQVJSQVlfU0laRShncGlvX2xlZHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbGVkc19ncGlvID0geworCSAubmFtZSAgID0gImxlZHMtZ3BpbyIsCisJIC5pZCAgICAgPSAtMSwKKwkgLmRldiAgICA9IHsKKwkJIC5wbGF0Zm9ybV9kYXRhICA9ICAmZ3Bpb19sZWRzX2luZm8sCisJfSwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmlnZXAyX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZpZ2VwMl9kc3NfZGV2aWNlLAorI2lmZGVmIENPTkZJR19MRURTX1RSSUdHRVJTCisJJmxlZHNfZ3BpbywKKyNlbmRpZgorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGlnZXAyX2luaXRfaXJxKHZvaWQpCiB7CiAJb21hcF9ib2FyZF9jb25maWcgPSBpZ2VwMl9jb25maWc7CiAJb21hcF9ib2FyZF9jb25maWdfc2l6ZSA9IEFSUkFZX1NJWkUoaWdlcDJfY29uZmlnKTsKLQlvbWFwMl9pbml0X2NvbW1vbl9odyhOVUxMLCBOVUxMKTsKKwlvbWFwMl9pbml0X2NvbW1vbl9odyhtNjVreHh4eGFtX3NkcmNfcGFyYW1zLCBtNjVreHh4eGFtX3NkcmNfcGFyYW1zKTsKIAlvbWFwX2luaXRfaXJxKCk7CiAJb21hcF9ncGlvX2luaXQoKTsKIH0KIAorc3RhdGljIHN0cnVjdCB0d2w0MDMwX2NvZGVjX2F1ZGlvX2RhdGEgaWdlcDJfYXVkaW9fZGF0YSA9IHsKKwkuYXVkaW9fbWNsayA9IDI2MDAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCB0d2w0MDMwX2NvZGVjX2RhdGEgaWdlcDJfY29kZWNfZGF0YSA9IHsKKwkuYXVkaW9fbWNsayA9IDI2MDAwMDAwLAorCS5hdWRpbyA9ICZpZ2VwMl9hdWRpb19kYXRhLAorfTsKKwogc3RhdGljIHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgaWdlcDJfdHdsZGF0YSA9IHsKIAkuaXJxX2Jhc2UJPSBUV0w0MDMwX0lSUV9CQVNFLAogCS5pcnFfZW5kCT0gVFdMNDAzMF9JUlFfRU5ELAogCiAJLyogcGxhdGZvcm1fZGF0YSBmb3IgY2hpbGRyZW4gZ29lcyBoZXJlICovCiAJLnVzYgkJPSAmaWdlcDJfdXNiX2RhdGEsCisJLmNvZGVjCQk9ICZpZ2VwMl9jb2RlY19kYXRhLAogCS5ncGlvCQk9ICZpZ2VwMl9ncGlvX2RhdGEsCiAJLnZtbWMxICAgICAgICAgID0gJmlnZXAyX3ZtbWMxLAorCS52bW1jMgkJPSAmaWdlcDJfdm1tYzIsCisJLnZwbGwyCQk9ICZpZ2VwMl92cGxsMiwKIAogfTsKIApAQCAtMjAzLDYgKzQzNiwyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhIG11c2JfYm9hcmRfZGF0YSA9IHsKKwkuaW50ZXJmYWNlX3R5cGUJCT0gTVVTQl9JTlRFUkZBQ0VfVUxQSSwKKwkubW9kZQkJCT0gTVVTQl9PVEcsCisJLnBvd2VyCQkJPSAxMDAsCit9OworCitzdGF0aWMgc3RydWN0IGVoY2lfaGNkX29tYXBfcGxhdGZvcm1fZGF0YSBlaGNpX3BkYXRhIF9faW5pdGNvbnN0ID0geworCS5wb3J0X21vZGVbMF0gPSBFSENJX0hDRF9PTUFQX01PREVfVU5LTk9XTiwKKwkucG9ydF9tb2RlWzFdID0gRUhDSV9IQ0RfT01BUF9NT0RFX1BIWSwKKwkucG9ydF9tb2RlWzJdID0gRUhDSV9IQ0RfT01BUF9NT0RFX1VOS05PV04sCisKKwkucGh5X3Jlc2V0ID0gdHJ1ZSwKKwkucmVzZXRfZ3Bpb19wb3J0WzBdID0gLUVJTlZBTCwKKwkucmVzZXRfZ3Bpb19wb3J0WzFdID0gSUdFUDJfR1BJT19VU0JIX05SRVNFVCwKKwkucmVzZXRfZ3Bpb19wb3J0WzJdID0gLUVJTlZBTCwKK307CisKICNpZmRlZiBDT05GSUdfT01BUF9NVVgKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggYm9hcmRfbXV4W10gX19pbml0ZGF0YSA9IHsKIAl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LApAQCAtMjE1LDkgKzQ2NSwxMyBAQAogewogCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7CiAJaWdlcDJfaTJjX2luaXQoKTsKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhpZ2VwMl9kZXZpY2VzLCBBUlJBWV9TSVpFKGlnZXAyX2RldmljZXMpKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7Ci0JdXNiX211c2JfaW5pdCgpOworCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CisJdXNiX2VoY2lfaW5pdCgmZWhjaV9wZGF0YSk7CiAKKwlpZ2VwMl9mbGFzaF9pbml0KCk7CisJaWdlcDJfZGlzcGxheV9pbml0KCk7CiAJaWdlcDJfaW5pdF9zbXNjOTExeCgpOwogCiAJLyogR1BJTyB1c2Vyc3BhY2UgbGVkcyAqLwpAQCAtMjM0LDE5ICs0ODgsMzYgQEAKIAkJZ3Bpb19zZXRfdmFsdWUoSUdFUDJfR1BJT19MRUQwX0dSRUVOLCAwKTsKIAl9IGVsc2UKIAkJcHJfd2FybmluZygiSUdFUCB2MjogQ291bGQgbm90IG9idGFpbiBncGlvIEdQSU9fTEVEMF9HUkVFTlxuIik7Ci0KKyNpZm5kZWYgQ09ORklHX0xFRFNfVFJJR0dFUlMKIAlpZiAoKGdwaW9fcmVxdWVzdChJR0VQMl9HUElPX0xFRDFfUkVELCAiR1BJT19MRUQxX1JFRCIpID09IDApICYmCiAJICAgIChncGlvX2RpcmVjdGlvbl9vdXRwdXQoSUdFUDJfR1BJT19MRUQxX1JFRCwgMSkgPT0gMCkpIHsKIAkJZ3Bpb19leHBvcnQoSUdFUDJfR1BJT19MRUQxX1JFRCwgMCk7CiAJCWdwaW9fc2V0X3ZhbHVlKElHRVAyX0dQSU9fTEVEMV9SRUQsIDApOwogCX0gZWxzZQogCQlwcl93YXJuaW5nKCJJR0VQIHYyOiBDb3VsZCBub3Qgb2J0YWluIGdwaW8gR1BJT19MRUQxX1JFRFxuIik7CisjZW5kaWYKKwkvKiBHUElPIFctTEFOICsgQmx1ZXRvb3RoIGNvbWJvIG1vZHVsZSAqLworCWlmICgoZ3Bpb19yZXF1ZXN0KElHRVAyX0dQSU9fV0lGSV9OUEQsICJHUElPX1dJRklfTlBEIikgPT0gMCkgJiYKKwkgICAgKGdwaW9fZGlyZWN0aW9uX291dHB1dChJR0VQMl9HUElPX1dJRklfTlBELCAxKSA9PSAwKSkgeworCQlncGlvX2V4cG9ydChJR0VQMl9HUElPX1dJRklfTlBELCAwKTsKKy8qIAkJZ3Bpb19zZXRfdmFsdWUoSUdFUDJfR1BJT19XSUZJX05QRCwgMCk7ICovCisJfSBlbHNlCisJCXByX3dhcm5pbmcoIklHRVAgdjI6IENvdWxkIG5vdCBvYnRhaW4gZ3BpbyBHUElPX1dJRklfTlBEXG4iKTsKKworCWlmICgoZ3Bpb19yZXF1ZXN0KElHRVAyX0dQSU9fV0lGSV9OUkVTRVQsICJHUElPX1dJRklfTlJFU0VUIikgPT0gMCkgJiYKKwkgICAgKGdwaW9fZGlyZWN0aW9uX291dHB1dChJR0VQMl9HUElPX1dJRklfTlJFU0VULCAxKSA9PSAwKSkgeworCQlncGlvX2V4cG9ydChJR0VQMl9HUElPX1dJRklfTlJFU0VULCAwKTsKKwkJZ3Bpb19zZXRfdmFsdWUoSUdFUDJfR1BJT19XSUZJX05SRVNFVCwgMCk7CisJCXVkZWxheSgxMCk7CisJCWdwaW9fc2V0X3ZhbHVlKElHRVAyX0dQSU9fV0lGSV9OUkVTRVQsIDEpOworCX0gZWxzZQorCQlwcl93YXJuaW5nKCJJR0VQIHYyOiBDb3VsZCBub3Qgb2J0YWluIGdwaW8gR1BJT19XSUZJX05SRVNFVFxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBpZ2VwMl9tYXBfaW8odm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDJfbWFwX2NvbW1vbl9pbygpOworCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKIH0KIAogTUFDSElORV9TVEFSVChJR0VQMDAyMCwgIklHRVAgdjIgYm9hcmQiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbGRwLmMKaW5kZXggOTk1ZDRhMi4uNWZjYjUyZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1sZHAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWxkcC5jCkBAIC00NCw3ICs0NCw3IEBACiAjaW5jbHVkZSA8cGxhdC91c2IuaD4KIAogI2luY2x1ZGUgIm11eC5oIgotI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCisjaW5jbHVkZSAiaHNtbWMuaCIKIAogI2RlZmluZSBMRFBfU01TQzkxMVhfQ1MJCTEKICNkZWZpbmUgTERQX1NNU0M5MTFYX0dQSU8JMTUyCkBAIC0zNTksNyArMzU5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gbW1jW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyBtbWNbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLm1tYwkJPSAxLAogCQkud2lyZXMJCT0gNCwKQEAgLTM4Myw2ICszODMsMTIgQEAKICNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhIG11c2JfYm9hcmRfZGF0YSA9IHsKKwkuaW50ZXJmYWNlX3R5cGUJCT0gTVVTQl9JTlRFUkZBQ0VfVUxQSSwKKwkubW9kZQkJCT0gTVVTQl9PVEcsCisJLnBvd2VyCQkJPSAxMDAsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcF9sZHBfaW5pdCh2b2lkKQogewogCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7CkBAIC0zOTQsOSArNDAwLDkgQEAKIAkJCQlBUlJBWV9TSVpFKGxkcF9zcGlfYm9hcmRfaW5mbykpOwogCWFkczc4NDZfZGV2X2luaXQoKTsKIAlvbWFwX3NlcmlhbF9pbml0KCk7Ci0JdXNiX211c2JfaW5pdCgpOworCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CiAKLQl0d2w0MDMwX21tY19pbml0KG1tYyk7CisJb21hcDJfaHNtbWNfaW5pdChtbWMpOwogCS8qIGxpbmsgcmVndWxhdG9ycyB0byBNTUMgYWRhcHRlcnMgKi8KIAlsZHBfdm1tYzFfc3VwcGx5LmRldiA9IG1tY1swXS5kZXY7CiB9CkBAIC00MDQsNyArNDEwLDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX2xkcF9tYXBfaW8odm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDJfbWFwX2NvbW1vbl9pbygpOworCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKIH0KIAogTUFDSElORV9TVEFSVChPTUFQX0xEUCwgIk9NQVAgTERQIGJvYXJkIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtbjh4MC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMKaW5kZXggNzY0YWIxZS4uNGNhYjA1MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1uOHgwLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL211c2IuaD4KIApAQCAtMjUsMTEgKzI2LDE3IEBACiAKICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KKyNpbmNsdWRlIDxwbGF0L21lbmVsYXVzLmg+CiAjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CiAjaW5jbHVkZSA8cGxhdC9tY3NwaS5oPgogI2luY2x1ZGUgPHBsYXQvb25lbmFuZC5oPgorI2luY2x1ZGUgPHBsYXQvbW1jLmg+CiAjaW5jbHVkZSA8cGxhdC9zZXJpYWwuaD4KIAorc3RhdGljIGludCBzbG90MV9jb3Zlcl9vcGVuOworc3RhdGljIGludCBzbG90Ml9jb3Zlcl9vcGVuOworc3RhdGljIHN0cnVjdCBkZXZpY2UgKm1tY19kZXZpY2U7CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcDJfbWNzcGlfZGV2aWNlX2NvbmZpZyBwNTRzcGlfbWNzcGlfY29uZmlnID0gewogCS50dXJib19tb2RlCT0gMCwKIAkuc2luZ2xlX2NoYW5uZWwgPSAxLApAQCAtOTYsMTAgKzEwMyw0NDYgQEAKIAogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19NRU5FTEFVUykgJiYJCQkJCQlcCisJKGRlZmluZWQoQ09ORklHX01NQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9NT0RVTEUpKQorCisvKgorICogT24gYm90aCBOODAwIGFuZCBOODEwLCBvbmx5IHRoZSBmaXJzdCBvZiB0aGUgdHdvIE1NQyBjb250cm9sbGVycyBpcyBpbiB1c2UuCisgKiBUaGUgdHdvIE1NQyBzbG90cyBhcmUgbXVsdGlwbGV4ZWQgdmlhIE1lbmVsYXVzIGNvbXBhbmlvbiBjaGlwIG92ZXIgSTJDLgorICogT24gTjgwMCwgYm90aCBzbG90cyBhcmUgcG93ZXJlZCB2aWEgTWVuZWxhdXMuIE9uIE44MTAsIG9ubHkgb25lIG9mIHRoZQorICogc2xvdHMgaXMgcG93ZXJlZCB2aWEgTWVuZWxhdXMuIFRoZSBOODEwIEVNTUMgaXMgcG93ZXJlZCB2aWEgR1BJTy4KKyAqCisgKiBWTU1DCQkJCXNsb3QgMSBvbiBib3RoIE44MDAgYW5kIE44MTAKKyAqIFZEQ0RDM19BUEUgYW5kIFZNQ1MyX0FQRQlzbG90IDIgb24gTjgwMAorICogR1BJTzIzIGFuZCBHUElPOQkJc2xvdCAyIEVNTUMgb24gTjgxMAorICoKKyAqLworI2RlZmluZSBOOFgwX1NMT1RfU1dJVENIX0dQSU8JOTYKKyNkZWZpbmUgTjgxMF9FTU1DX1ZTRF9HUElPCTIzCisjZGVmaW5lIE5OODEwX0VNTUNfVklPX0dQSU8JOQorCitzdGF0aWMgaW50IG44eDBfbW1jX3N3aXRjaF9zbG90KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpCit7CisjaWZkZWYgQ09ORklHX01NQ19ERUJVRworCWRldl9kYmcoZGV2LCAiQ2hvb3NlIHNsb3QgJWRcbiIsIHNsb3QgKyAxKTsKKyNlbmRpZgorCWdwaW9fc2V0X3ZhbHVlKE44WDBfU0xPVF9TV0lUQ0hfR1BJTywgc2xvdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbjh4MF9tbWNfc2V0X3Bvd2VyX21lbmVsYXVzKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsCisJCQkJCWludCBwb3dlcl9vbiwgaW50IHZkZCkKK3sKKwlpbnQgbVY7CisKKyNpZmRlZiBDT05GSUdfTU1DX0RFQlVHCisJZGV2X2RiZyhkZXYsICJTZXQgc2xvdCAlZCBwb3dlcjogJXMgKHZkZCAlZClcbiIsIHNsb3QgKyAxLAorCQlwb3dlcl9vbiA/ICJvbiIgOiAib2ZmIiwgdmRkKTsKKyNlbmRpZgorCWlmIChzbG90ID09IDApIHsKKwkJaWYgKCFwb3dlcl9vbikKKwkJCXJldHVybiBtZW5lbGF1c19zZXRfdm1tYygwKTsKKwkJc3dpdGNoICgxIDw8IHZkZCkgeworCQljYXNlIE1NQ19WRERfMzNfMzQ6CisJCWNhc2UgTU1DX1ZERF8zMl8zMzoKKwkJY2FzZSBNTUNfVkREXzMxXzMyOgorCQkJbVYgPSAzMTAwOworCQkJYnJlYWs7CisJCWNhc2UgTU1DX1ZERF8zMF8zMToKKwkJCW1WID0gMzAwMDsKKwkJCWJyZWFrOworCQljYXNlIE1NQ19WRERfMjhfMjk6CisJCQltViA9IDI4MDA7CisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzE2NV8xOTU6CisJCQltViA9IDE4NTA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUJVRygpOworCQl9CisJCXJldHVybiBtZW5lbGF1c19zZXRfdm1tYyhtVik7CisJfSBlbHNlIHsKKwkJaWYgKCFwb3dlcl9vbikKKwkJCXJldHVybiBtZW5lbGF1c19zZXRfdmRjZGMoMywgMCk7CisJCXN3aXRjaCAoMSA8PCB2ZGQpIHsKKwkJY2FzZSBNTUNfVkREXzMzXzM0OgorCQljYXNlIE1NQ19WRERfMzJfMzM6CisJCQltViA9IDMzMDA7CisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzMwXzMxOgorCQljYXNlIE1NQ19WRERfMjlfMzA6CisJCQltViA9IDMwMDA7CisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzI4XzI5OgorCQljYXNlIE1NQ19WRERfMjdfMjg6CisJCQltViA9IDI4MDA7CisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzI0XzI1OgorCQljYXNlIE1NQ19WRERfMjNfMjQ6CisJCQltViA9IDI0MDA7CisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzIyXzIzOgorCQljYXNlIE1NQ19WRERfMjFfMjI6CisJCQltViA9IDIyMDA7CisJCQlicmVhazsKKwkJY2FzZSBNTUNfVkREXzIwXzIxOgorCQkJbVYgPSAyMDAwOworCQkJYnJlYWs7CisJCWNhc2UgTU1DX1ZERF8xNjVfMTk1OgorCQkJbVYgPSAxODAwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCVUcoKTsKKwkJfQorCQlyZXR1cm4gbWVuZWxhdXNfc2V0X3ZkY2RjKDMsIG1WKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG44MTBfc2V0X3Bvd2VyX2VtbWMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgaW50IHBvd2VyX29uKQoreworCWRldl9kYmcoZGV2LCAiU2V0IEVNTUMgcG93ZXIgJXNcbiIsIHBvd2VyX29uID8gIm9uIiA6ICJvZmYiKTsKKworCWlmIChwb3dlcl9vbikgeworCQlncGlvX3NldF92YWx1ZShOODEwX0VNTUNfVlNEX0dQSU8sIDEpOworCQltc2xlZXAoMSk7CisJCWdwaW9fc2V0X3ZhbHVlKE5OODEwX0VNTUNfVklPX0dQSU8sIDEpOworCQltc2xlZXAoMSk7CisJfSBlbHNlIHsKKwkJZ3Bpb19zZXRfdmFsdWUoTk44MTBfRU1NQ19WSU9fR1BJTywgMCk7CisJCW1zbGVlcCg1MCk7CisJCWdwaW9fc2V0X3ZhbHVlKE44MTBfRU1NQ19WU0RfR1BJTywgMCk7CisJCW1zbGVlcCg1MCk7CisJfQorfQorCitzdGF0aWMgaW50IG44eDBfbW1jX3NldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgcG93ZXJfb24sCisJCQkgICAgICBpbnQgdmRkKQoreworCWlmIChtYWNoaW5lX2lzX25va2lhX244MDAoKSB8fCBzbG90ID09IDApCisJCXJldHVybiBuOHgwX21tY19zZXRfcG93ZXJfbWVuZWxhdXMoZGV2LCBzbG90LCBwb3dlcl9vbiwgdmRkKTsKKworCW44MTBfc2V0X3Bvd2VyX2VtbWMoZGV2LCBwb3dlcl9vbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBuOHgwX21tY19zZXRfYnVzX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IGJ1c19tb2RlKQoreworCWludCByOworCisJZGV2X2RiZyhkZXYsICJTZXQgc2xvdCAlZCBidXMgbW9kZSAlc1xuIiwgc2xvdCArIDEsCisJCWJ1c19tb2RlID09IE1NQ19CVVNNT0RFX09QRU5EUkFJTiA/ICJvcGVuLWRyYWluIiA6ICJwdXNoLXB1bGwiKTsKKwlCVUdfT04oc2xvdCAhPSAwICYmIHNsb3QgIT0gMSk7CisJc2xvdCsrOworCXN3aXRjaCAoYnVzX21vZGUpIHsKKwljYXNlIE1NQ19CVVNNT0RFX09QRU5EUkFJTjoKKwkJciA9IG1lbmVsYXVzX3NldF9tbWNfb3BlbmRyYWluKHNsb3QsIDEpOworCQlicmVhazsKKwljYXNlIE1NQ19CVVNNT0RFX1BVU0hQVUxMOgorCQlyID0gbWVuZWxhdXNfc2V0X21tY19vcGVuZHJhaW4oc2xvdCwgMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KKwlpZiAociAhPSAwICYmIHByaW50a19yYXRlbGltaXQoKSkKKwkJZGV2X2VycihkZXYsICJNTUM6IHVuYWJsZSB0byBzZXQgYnVzIG1vZGUgZm9yIHNsb3QgJWRcbiIsCisJCQlzbG90KTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBuOHgwX21tY19nZXRfY292ZXJfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkKK3sKKwlzbG90Kys7CisJQlVHX09OKHNsb3QgIT0gMSAmJiBzbG90ICE9IDIpOworCWlmIChzbG90ID09IDEpCisJCXJldHVybiBzbG90MV9jb3Zlcl9vcGVuOworCWVsc2UKKwkJcmV0dXJuIHNsb3QyX2NvdmVyX29wZW47Cit9CisKK3N0YXRpYyB2b2lkIG44eDBfbW1jX2NhbGxiYWNrKHZvaWQgKmRhdGEsIHU4IGNhcmRfbWFzaykKK3sKKwlpbnQgYml0LCAqb3BlbnAsIGluZGV4OworCisJaWYgKG1hY2hpbmVfaXNfbm9raWFfbjgwMCgpKSB7CisJCWJpdCA9IDEgPDwgMTsKKwkJb3BlbnAgPSAmc2xvdDJfY292ZXJfb3BlbjsKKwkJaW5kZXggPSAxOworCX0gZWxzZSB7CisJCWJpdCA9IDE7CisJCW9wZW5wID0gJnNsb3QxX2NvdmVyX29wZW47CisJCWluZGV4ID0gMDsKKwl9CisKKwlpZiAoY2FyZF9tYXNrICYgYml0KQorCQkqb3BlbnAgPSAxOworCWVsc2UKKwkJKm9wZW5wID0gMDsKKworCW9tYXBfbW1jX25vdGlmeV9jb3Zlcl9ldmVudChtbWNfZGV2aWNlLCBpbmRleCwgKm9wZW5wKTsKK30KKwordm9pZCBuOHgwX21tY19zbG90MV9jb3Zlcl9oYW5kbGVyKHZvaWQgKmFyZywgaW50IGNsb3NlZF9zdGF0ZSkKK3sKKwlpZiAobW1jX2RldmljZSA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlzbG90MV9jb3Zlcl9vcGVuID0gIWNsb3NlZF9zdGF0ZTsKKwlvbWFwX21tY19ub3RpZnlfY292ZXJfZXZlbnQobW1jX2RldmljZSwgMCwgY2xvc2VkX3N0YXRlKTsKK30KKworc3RhdGljIGludCBuOHgwX21tY19sYXRlX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByLCBiaXQsICpvcGVucDsKKwlpbnQgdnMyc2VsOworCisJbW1jX2RldmljZSA9IGRldjsKKworCXIgPSBtZW5lbGF1c19zZXRfc2xvdF9zZWwoMSk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCWlmIChtYWNoaW5lX2lzX25va2lhX244MDAoKSkKKwkJdnMyc2VsID0gMDsKKwllbHNlCisJCXZzMnNlbCA9IDI7CisKKwlyID0gbWVuZWxhdXNfc2V0X21tY19zbG90KDIsIDAsIHZzMnNlbCwgMSk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCW44eDBfbW1jX3NldF9wb3dlcihkZXYsIDAsIE1NQ19QT1dFUl9PTiwgMTYpOyAvKiBNTUNfVkREXzI4XzI5ICovCisJbjh4MF9tbWNfc2V0X3Bvd2VyKGRldiwgMSwgTU1DX1BPV0VSX09OLCAxNik7CisKKwlyID0gbWVuZWxhdXNfc2V0X21tY19zbG90KDEsIDEsIDAsIDEpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisJciA9IG1lbmVsYXVzX3NldF9tbWNfc2xvdCgyLCAxLCB2czJzZWwsIDEpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlyID0gbWVuZWxhdXNfZ2V0X3Nsb3RfcGluX3N0YXRlcygpOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisKKwlpZiAobWFjaGluZV9pc19ub2tpYV9uODAwKCkpIHsKKwkJYml0ID0gMSA8PCAxOworCQlvcGVucCA9ICZzbG90Ml9jb3Zlcl9vcGVuOworCX0gZWxzZSB7CisJCWJpdCA9IDE7CisJCW9wZW5wID0gJnNsb3QxX2NvdmVyX29wZW47CisJCXNsb3QyX2NvdmVyX29wZW4gPSAwOworCX0KKworCS8qIEFsbCBzbG90IHBpbiBiaXRzIHNlZW0gdG8gYmUgaW52ZXJzZWQgdW50aWwgZmlyc3Qgc3dpdGNoIGNoYW5nZSAqLworCWlmIChyID09IDB4ZiB8fCByID09ICgweGYgJiB+Yml0KSkKKwkJciA9IH5yOworCisJaWYgKHIgJiBiaXQpCisJCSpvcGVucCA9IDE7CisJZWxzZQorCQkqb3BlbnAgPSAwOworCisJciA9IG1lbmVsYXVzX3JlZ2lzdGVyX21tY19jYWxsYmFjayhuOHgwX21tY19jYWxsYmFjaywgTlVMTCk7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgbjh4MF9tbWNfc2h1dGRvd24oc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCB2czJzZWw7CisKKwlpZiAobWFjaGluZV9pc19ub2tpYV9uODAwKCkpCisJCXZzMnNlbCA9IDA7CisJZWxzZQorCQl2czJzZWwgPSAyOworCisJbWVuZWxhdXNfc2V0X21tY19zbG90KDEsIDAsIDAsIDApOworCW1lbmVsYXVzX3NldF9tbWNfc2xvdCgyLCAwLCB2czJzZWwsIDApOworfQorCitzdGF0aWMgdm9pZCBuOHgwX21tY19jbGVhbnVwKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwltZW5lbGF1c191bnJlZ2lzdGVyX21tY19jYWxsYmFjaygpOworCisJZ3Bpb19mcmVlKE44WDBfU0xPVF9TV0lUQ0hfR1BJTyk7CisKKwlpZiAobWFjaGluZV9pc19ub2tpYV9uODEwKCkpIHsKKwkJZ3Bpb19mcmVlKE44MTBfRU1NQ19WU0RfR1BJTyk7CisJCWdwaW9fZnJlZShOTjgxMF9FTU1DX1ZJT19HUElPKTsKKwl9Cit9CisKKy8qCisgKiBNTUMgY29udHJvbGxlcjEgaGFzIHR3byBzbG90cyB0aGF0IGFyZSBtdWx0aXBsZXhlZCB2aWEgSTJDLgorICogTU1DIGNvbnRyb2xsZXIyIGlzIG5vdCBpbiB1c2UuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSBtbWMxX2RhdGEgPSB7CisJLm5yX3Nsb3RzCQkJPSAyLAorCS5zd2l0Y2hfc2xvdAkJCT0gbjh4MF9tbWNfc3dpdGNoX3Nsb3QsCisJLmluaXQJCQkJPSBuOHgwX21tY19sYXRlX2luaXQsCisJLmNsZWFudXAJCQk9IG44eDBfbW1jX2NsZWFudXAsCisJLnNodXRkb3duCQkJPSBuOHgwX21tY19zaHV0ZG93biwKKwkubWF4X2ZyZXEJCQk9IDI0MDAwMDAwLAorCS5kbWFfbWFzawkJCT0gMHhmZmZmZmZmZiwKKwkuc2xvdHNbMF0gPSB7CisJCS53aXJlcwkJCT0gNCwKKwkJLnNldF9wb3dlcgkJPSBuOHgwX21tY19zZXRfcG93ZXIsCisJCS5zZXRfYnVzX21vZGUJCT0gbjh4MF9tbWNfc2V0X2J1c19tb2RlLAorCQkuZ2V0X2NvdmVyX3N0YXRlCT0gbjh4MF9tbWNfZ2V0X2NvdmVyX3N0YXRlLAorCQkub2NyX21hc2sJCT0gTU1DX1ZERF8xNjVfMTk1IHwgTU1DX1ZERF8zMF8zMSB8CisJCQkJCQlNTUNfVkREXzMyXzMzICAgfCBNTUNfVkREXzMzXzM0LAorCQkubmFtZQkJCT0gImludGVybmFsIiwKKwl9LAorCS5zbG90c1sxXSA9IHsKKwkJLnNldF9wb3dlcgkJPSBuOHgwX21tY19zZXRfcG93ZXIsCisJCS5zZXRfYnVzX21vZGUJCT0gbjh4MF9tbWNfc2V0X2J1c19tb2RlLAorCQkuZ2V0X2NvdmVyX3N0YXRlCT0gbjh4MF9tbWNfZ2V0X2NvdmVyX3N0YXRlLAorCQkub2NyX21hc2sJCT0gTU1DX1ZERF8xNjVfMTk1IHwgTU1DX1ZERF8yMF8yMSB8CisJCQkJCQlNTUNfVkREXzIxXzIyIHwgTU1DX1ZERF8yMl8yMyB8CisJCQkJCQlNTUNfVkREXzIzXzI0IHwgTU1DX1ZERF8yNF8yNSB8CisJCQkJCQlNTUNfVkREXzI3XzI4IHwgTU1DX1ZERF8yOF8yOSB8CisJCQkJCQlNTUNfVkREXzI5XzMwIHwgTU1DX1ZERF8zMF8zMSB8CisJCQkJCQlNTUNfVkREXzMyXzMzIHwgTU1DX1ZERF8zM18zNCwKKwkJLm5hbWUJCQk9ICJleHRlcm5hbCIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jX2RhdGFbT01BUDI0WFhfTlJfTU1DXTsKKwordm9pZCBfX2luaXQgbjh4MF9tbWNfaW5pdCh2b2lkKQorCit7CisJaW50IGVycjsKKworCWlmIChtYWNoaW5lX2lzX25va2lhX244MTAoKSkgeworCQltbWMxX2RhdGEuc2xvdHNbMF0ubmFtZSA9ICJleHRlcm5hbCI7CisKKwkJLyoKKwkJICogU29tZSBTYW1zdW5nIE1vdmluYW5kIGNoaXBzIGRvIG5vdCBsaWtlIG9wZW4tZW5kZWQKKwkJICogbXVsdGktYmxvY2sgcmVhZHMgYW5kIGZhbGwgdG8gYnJhaW5kLWRlYWQgc3RhdGUKKwkJICogd2hpbGUgZG9pbmcgc28uIFJlZHVjaW5nIHRoZSBudW1iZXIgb2YgYmxvY2tzIGluCisJCSAqIHRoZSB0cmFuc2ZlciBvciBkZWxheXMgaW4gY2xvY2sgZGlzYWJsZSBkbyBub3QgaGVscAorCQkgKi8KKwkJbW1jMV9kYXRhLnNsb3RzWzFdLm5hbWUgPSAiaW50ZXJuYWwiOworCQltbWMxX2RhdGEuc2xvdHNbMV0uYmFuX29wZW5lbmRlZCA9IDE7CisJfQorCisJZXJyID0gZ3Bpb19yZXF1ZXN0KE44WDBfU0xPVF9TV0lUQ0hfR1BJTywgIk1NQyBzbG90IHN3aXRjaCIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTjhYMF9TTE9UX1NXSVRDSF9HUElPLCAwKTsKKworCWlmIChtYWNoaW5lX2lzX25va2lhX244MTAoKSkgeworCQllcnIgPSBncGlvX3JlcXVlc3QoTjgxMF9FTU1DX1ZTRF9HUElPLCAiTU1DIHNsb3QgMiBWZGRmIik7CisJCWlmIChlcnIpIHsKKwkJCWdwaW9fZnJlZShOOFgwX1NMT1RfU1dJVENIX0dQSU8pOworCQkJcmV0dXJuIGVycjsKKwkJfQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoTjgxMF9FTU1DX1ZTRF9HUElPLCAwKTsKKworCQllcnIgPSBncGlvX3JlcXVlc3QoTk44MTBfRU1NQ19WSU9fR1BJTywgIk1NQyBzbG90IDIgVmRkIik7CisJCWlmIChlcnIpIHsKKwkJCWdwaW9fZnJlZShOOFgwX1NMT1RfU1dJVENIX0dQSU8pOworCQkJZ3Bpb19mcmVlKE44MTBfRU1NQ19WU0RfR1BJTyk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChOTjgxMF9FTU1DX1ZJT19HUElPLCAwKTsKKwl9CisKKwltbWNfZGF0YVswXSA9ICZtbWMxX2RhdGE7CisJb21hcDJfaW5pdF9tbWMobW1jX2RhdGEsIE9NQVAyNFhYX05SX01NQyk7Cit9CisjZWxzZQorCit2b2lkIF9faW5pdCBuOHgwX21tY19pbml0KHZvaWQpCit7Cit9CisKK3ZvaWQgbjh4MF9tbWNfc2xvdDFfY292ZXJfaGFuZGxlcih2b2lkICphcmcsIGludCBzdGF0ZSkKK3sKK30KKworI2VuZGlmCS8qIENPTkZJR19NTUNfT01BUCAqLworCisjaWZkZWYgQ09ORklHX01FTkVMQVVTCisKK3N0YXRpYyBpbnQgbjh4MF9hdXRvX3NsZWVwX3JlZ3VsYXRvcnModm9pZCkKK3sKKwl1MzIgdmFsOworCWludCByZXQ7CisKKwl2YWwgPSBFTl9WUExMX1NMRUVQIHwgRU5fVk1NQ19TTEVFUCAgICBcCisJCXwgRU5fVkFVWF9TTEVFUCB8IEVOX1ZJT19TTEVFUCBcCisJCXwgRU5fVk1FTV9TTEVFUCB8IEVOX0RDM19TTEVFUCBcCisJCXwgRU5fVkNfU0xFRVAgfCBFTl9EQzJfU0xFRVA7CisKKwlyZXQgPSBtZW5lbGF1c19zZXRfcmVndWxhdG9yX3NsZWVwKDEsIHZhbCk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3Qgc2V0IHJlZ3VsYXRvcnMgdG8gc2xlZXAgb24gIgorCQkJIm1lbmVsYXVzOiAldVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbjh4MF9hdXRvX3ZvbHRhZ2Vfc2NhbGUodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbWVuZWxhdXNfc2V0X3Zjb3JlX2h3KDE0MDAsIDEwNTApOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IHNldCBWQ09SRSB2b2x0YWdlIG9uICIKKwkJCSJtZW5lbGF1czogJXVcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG44eDBfbWVuZWxhdXNfbGF0ZV9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gbjh4MF9hdXRvX3ZvbHRhZ2Vfc2NhbGUoKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgPSBuOHgwX2F1dG9fc2xlZXBfcmVndWxhdG9ycygpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgbjh4MF9pMmNfYm9hcmRfaW5mb18xW10gPSB7CisJeworCQlJMkNfQk9BUkRfSU5GTygibWVuZWxhdXMiLCAweDcyKSwKKwkJLmlycSA9IElOVF8yNFhYX1NZU19OSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG1lbmVsYXVzX3BsYXRmb3JtX2RhdGEgbjh4MF9tZW5lbGF1c19wbGF0Zm9ybV9kYXRhID0geworCS5sYXRlX2luaXQgPSBuOHgwX21lbmVsYXVzX2xhdGVfaW5pdCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBuOHgwX21lbmVsYXVzX2luaXQodm9pZCkKK3sKKwluOHgwX2kyY19ib2FyZF9pbmZvXzFbMF0ucGxhdGZvcm1fZGF0YSA9ICZuOHgwX21lbmVsYXVzX3BsYXRmb3JtX2RhdGE7CisJb21hcF9yZWdpc3Rlcl9pMmNfYnVzKDEsIDQwMCwgbjh4MF9pMmNfYm9hcmRfaW5mb18xLAorCQkJICAgICAgQVJSQVlfU0laRShuOHgwX2kyY19ib2FyZF9pbmZvXzEpKTsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgbjh4MF9tZW5lbGF1c19pbml0KHZvaWQpCit7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQgX19pbml0IG44eDBfbWFwX2lvKHZvaWQpCiB7CiAJb21hcDJfc2V0X2dsb2JhbHNfMjQyeCgpOwotCW9tYXAyX21hcF9jb21tb25faW8oKTsKKwlvbWFwMjQyeF9tYXBfY29tbW9uX2lvKCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBuOHgwX2luaXRfaXJxKHZvaWQpCkBAIC0xMTYsNyArNTU5LDkgQEAKIAkJCQlBUlJBWV9TSVpFKG44MDBfc3BpX2JvYXJkX2luZm8pKTsKIAogCW9tYXBfc2VyaWFsX2luaXQoKTsKKwluOHgwX21lbmVsYXVzX2luaXQoKTsKIAluOHgwX29uZW5hbmRfaW5pdCgpOworCW44eDBfbW1jX2luaXQoKTsKIH0KIAogTUFDSElORV9TVEFSVChOT0tJQV9OODAwLCAiTm9raWEgTjgwMCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzYmVhZ2xlLmMKaW5kZXggMjMxY2I0ZS4uNmViNzdlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2JlYWdsZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNiZWFnbGUuYwpAQCAtNDUsNyArNDUsNyBAQAogI2luY2x1ZGUgPHBsYXQvdGltZXItZ3AuaD4KIAogI2luY2x1ZGUgIm11eC5oIgotI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCisjaW5jbHVkZSAiaHNtbWMuaCIKIAogI2RlZmluZSBHUE1DX0NTMF9CQVNFICAweDYwCiAjZGVmaW5lIEdQTUNfQ1NfU0laRSAgIDB4MzAKQEAgLTEwOCw3ICsxMDgsNyBAQAogCiAjaW5jbHVkZSAic2RyYW0tbWljcm9uLW10NDZoMzJtMzJsZi02LmgiCiAKLXN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9oc21tY19pbmZvIG1tY1tdID0geworc3RhdGljIHN0cnVjdCBvbWFwMl9oc21tY19pbmZvIG1tY1tdID0gewogCXsKIAkJLm1tYwkJPSAxLAogCQkud2lyZXMJCT0gOCwKQEAgLTE0Nyw3ICsxNDcsNyBAQAogCX0KIAkvKiBncGlvICsgMCBpcyAibW1jMF9jZCIgKGlucHV0L0lSUSkgKi8KIAltbWNbMF0uZ3Bpb19jZCA9IGdwaW8gKyAwOwotCXR3bDQwMzBfbW1jX2luaXQobW1jKTsKKwlvbWFwMl9oc21tY19pbml0KG1tYyk7CiAKIAkvKiBsaW5rIHJlZ3VsYXRvcnMgdG8gTU1DIGFkYXB0ZXJzICovCiAJYmVhZ2xlX3ZtbWMxX3N1cHBseS5kZXYgPSBtbWNbMF0uZGV2OwpAQCAtNDMwLDYgKzQzMCwxMiBAQAogI2RlZmluZSBib2FyZF9tdXgJTlVMTAogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgbXVzYl9ib2FyZF9kYXRhID0geworCS5pbnRlcmZhY2VfdHlwZQkJPSBNVVNCX0lOVEVSRkFDRV9VTFBJLAorCS5tb2RlCQkJPSBNVVNCX09URywKKwkucG93ZXIJCQk9IDEwMCwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19iZWFnbGVfaW5pdCh2b2lkKQogewogCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7CkBAIC00NDMsNyArNDQ5LDcgQEAKIAkvKiBSRVZJU0lUIGxlYXZlIERWSSBwb3dlcmVkIGRvd24gdW50aWwgaXQncyBuZWVkZWQgLi4uICovCiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KDE3MCwgdHJ1ZSk7CiAKLQl1c2JfbXVzYl9pbml0KCk7CisJdXNiX211c2JfaW5pdCgmbXVzYl9ib2FyZF9kYXRhKTsKIAl1c2JfZWhjaV9pbml0KCZlaGNpX3BkYXRhKTsKIAlvbWFwM2JlYWdsZV9mbGFzaF9pbml0KCk7CiAKQEAgLTQ1NSw3ICs0NjEsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2JlYWdsZV9tYXBfaW8odm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDJfbWFwX2NvbW1vbl9pbygpOworCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKIH0KIAogTUFDSElORV9TVEFSVChPTUFQM19CRUFHTEUsICJPTUFQMyBCZWFnbGUgQm9hcmQiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM2V2bS5jCmluZGV4IDM0ZGUxNzguLmQ2YmM4OGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNldm0uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzZXZtLmMKQEAgLTQxLDEwICs0MSwxMSBAQAogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KICNpbmNsdWRlIDxwbGF0L21jc3BpLmg+CisjaW5jbHVkZSA8cGxhdC9kaXNwbGF5Lmg+CiAKICNpbmNsdWRlICJtdXguaCIKICNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKLSNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgorI2luY2x1ZGUgImhzbW1jLmgiCiAKICNkZWZpbmUgT01BUDNfRVZNX1RTX0dQSU8JMTc1CiAjZGVmaW5lIE9NQVAzX0VWTV9FSENJX1ZCVVMJMjIKQEAgLTE0Nyw2ICsxNDgsMTg3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IG9tYXAzZXZtX2luaXRfc21zYzkxMXgodm9pZCkgeyByZXR1cm47IH0KICNlbmRpZgogCisvKgorICogT01BUDNFVk0gTENEIFBhbmVsIGNvbnRyb2wgc2lnbmFscworICovCisjZGVmaW5lIE9NQVAzRVZNX0xDRF9QQU5FTF9MUgkJMgorI2RlZmluZSBPTUFQM0VWTV9MQ0RfUEFORUxfVUQJCTMKKyNkZWZpbmUgT01BUDNFVk1fTENEX1BBTkVMX0lOSQkJMTUyCisjZGVmaW5lIE9NQVAzRVZNX0xDRF9QQU5FTF9FTlZERAkxNTMKKyNkZWZpbmUgT01BUDNFVk1fTENEX1BBTkVMX1FWR0EJCTE1NAorI2RlZmluZSBPTUFQM0VWTV9MQ0RfUEFORUxfUkVTQgkJMTU1CisjZGVmaW5lIE9NQVAzRVZNX0xDRF9QQU5FTF9CS0xJR0hUX0dQSU8JMjEwCisjZGVmaW5lIE9NQVAzRVZNX0RWSV9QQU5FTF9FTl9HUElPCTE5OQorCitzdGF0aWMgaW50IGxjZF9lbmFibGVkOworc3RhdGljIGludCBkdmlfZW5hYmxlZDsKKworc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2V2bV9kaXNwbGF5X2luaXQodm9pZCkKK3sKKwlpbnQgcjsKKworCXIgPSBncGlvX3JlcXVlc3QoT01BUDNFVk1fTENEX1BBTkVMX1JFU0IsICJsY2RfcGFuZWxfcmVzYiIpOworCWlmIChyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBsY2RfcGFuZWxfcmVzYlxuIik7CisJCXJldHVybjsKKwl9CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE9NQVAzRVZNX0xDRF9QQU5FTF9SRVNCLCAxKTsKKworCXIgPSBncGlvX3JlcXVlc3QoT01BUDNFVk1fTENEX1BBTkVMX0lOSSwgImxjZF9wYW5lbF9pbmkiKTsKKwlpZiAocikgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBnZXQgbGNkX3BhbmVsX2luaVxuIik7CisJCWdvdG8gZXJyXzE7CisJfQorCWdwaW9fZGlyZWN0aW9uX291dHB1dChPTUFQM0VWTV9MQ0RfUEFORUxfSU5JLCAxKTsKKworCXIgPSBncGlvX3JlcXVlc3QoT01BUDNFVk1fTENEX1BBTkVMX1FWR0EsICJsY2RfcGFuZWxfcXZnYSIpOworCWlmIChyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBsY2RfcGFuZWxfcXZnYVxuIik7CisJCWdvdG8gZXJyXzI7CisJfQorCWdwaW9fZGlyZWN0aW9uX291dHB1dChPTUFQM0VWTV9MQ0RfUEFORUxfUVZHQSwgMCk7CisKKwlyID0gZ3Bpb19yZXF1ZXN0KE9NQVAzRVZNX0xDRF9QQU5FTF9MUiwgImxjZF9wYW5lbF9sciIpOworCWlmIChyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGdldCBsY2RfcGFuZWxfbHJcbiIpOworCQlnb3RvIGVycl8zOworCX0KKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoT01BUDNFVk1fTENEX1BBTkVMX0xSLCAxKTsKKworCXIgPSBncGlvX3JlcXVlc3QoT01BUDNFVk1fTENEX1BBTkVMX1VELCAibGNkX3BhbmVsX3VkIik7CisJaWYgKHIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gZ2V0IGxjZF9wYW5lbF91ZFxuIik7CisJCWdvdG8gZXJyXzQ7CisJfQorCWdwaW9fZGlyZWN0aW9uX291dHB1dChPTUFQM0VWTV9MQ0RfUEFORUxfVUQsIDEpOworCisJciA9IGdwaW9fcmVxdWVzdChPTUFQM0VWTV9MQ0RfUEFORUxfRU5WREQsICJsY2RfcGFuZWxfZW52ZGQiKTsKKwlpZiAocikgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBnZXQgbGNkX3BhbmVsX2VudmRkXG4iKTsKKwkJZ290byBlcnJfNTsKKwl9CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KE9NQVAzRVZNX0xDRF9QQU5FTF9FTlZERCwgMCk7CisKKwlyZXR1cm47CisKK2Vycl81OgorCWdwaW9fZnJlZShPTUFQM0VWTV9MQ0RfUEFORUxfVUQpOworZXJyXzQ6CisJZ3Bpb19mcmVlKE9NQVAzRVZNX0xDRF9QQU5FTF9MUik7CitlcnJfMzoKKwlncGlvX2ZyZWUoT01BUDNFVk1fTENEX1BBTkVMX1FWR0EpOworZXJyXzI6CisJZ3Bpb19mcmVlKE9NQVAzRVZNX0xDRF9QQU5FTF9JTkkpOworZXJyXzE6CisJZ3Bpb19mcmVlKE9NQVAzRVZNX0xDRF9QQU5FTF9SRVNCKTsKKworfQorCitzdGF0aWMgaW50IG9tYXAzX2V2bV9lbmFibGVfbGNkKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlpZiAoZHZpX2VuYWJsZWQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgZW5hYmxlIExDRCwgRFZJIGlzIGVuYWJsZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZ3Bpb19zZXRfdmFsdWUoT01BUDNFVk1fTENEX1BBTkVMX0VOVkRELCAwKTsKKworCWlmIChnZXRfb21hcDNfZXZtX3JldigpID49IE9NQVAzRVZNX0JPQVJEX0dFTl8yKQorCQlncGlvX3NldF92YWx1ZShPTUFQM0VWTV9MQ0RfUEFORUxfQktMSUdIVF9HUElPLCAwKTsKKwllbHNlCisJCWdwaW9fc2V0X3ZhbHVlKE9NQVAzRVZNX0xDRF9QQU5FTF9CS0xJR0hUX0dQSU8sIDEpOworCisJbGNkX2VuYWJsZWQgPSAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBvbWFwM19ldm1fZGlzYWJsZV9sY2Qoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWdwaW9fc2V0X3ZhbHVlKE9NQVAzRVZNX0xDRF9QQU5FTF9FTlZERCwgMSk7CisKKwlpZiAoZ2V0X29tYXAzX2V2bV9yZXYoKSA+PSBPTUFQM0VWTV9CT0FSRF9HRU5fMikKKwkJZ3Bpb19zZXRfdmFsdWUoT01BUDNFVk1fTENEX1BBTkVMX0JLTElHSFRfR1BJTywgMSk7CisJZWxzZQorCQlncGlvX3NldF92YWx1ZShPTUFQM0VWTV9MQ0RfUEFORUxfQktMSUdIVF9HUElPLCAwKTsKKworCWxjZF9lbmFibGVkID0gMDsKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kZXZpY2Ugb21hcDNfZXZtX2xjZF9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJsY2QiLAorCS5kcml2ZXJfbmFtZQkJPSAic2hhcnBfbHNfcGFuZWwiLAorCS50eXBlCQkJPSBPTUFQX0RJU1BMQVlfVFlQRV9EUEksCisJLnBoeS5kcGkuZGF0YV9saW5lcwk9IDE4LAorCS5wbGF0Zm9ybV9lbmFibGUJPSBvbWFwM19ldm1fZW5hYmxlX2xjZCwKKwkucGxhdGZvcm1fZGlzYWJsZQk9IG9tYXAzX2V2bV9kaXNhYmxlX2xjZCwKK307CisKK3N0YXRpYyBpbnQgb21hcDNfZXZtX2VuYWJsZV90dihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXAzX2V2bV9kaXNhYmxlX3R2KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kZXZpY2Ugb21hcDNfZXZtX3R2X2RldmljZSA9IHsKKwkubmFtZQkJCT0gInR2IiwKKwkuZHJpdmVyX25hbWUJCT0gInZlbmMiLAorCS50eXBlCQkJPSBPTUFQX0RJU1BMQVlfVFlQRV9WRU5DLAorCS5waHkudmVuYy50eXBlCQk9IE9NQVBfRFNTX1ZFTkNfVFlQRV9TVklERU8sCisJLnBsYXRmb3JtX2VuYWJsZQk9IG9tYXAzX2V2bV9lbmFibGVfdHYsCisJLnBsYXRmb3JtX2Rpc2FibGUJPSBvbWFwM19ldm1fZGlzYWJsZV90diwKK307CisKK3N0YXRpYyBpbnQgb21hcDNfZXZtX2VuYWJsZV9kdmkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWlmIChsY2RfZW5hYmxlZCkgeworCQlwcmludGsoS0VSTl9FUlIgImNhbm5vdCBlbmFibGUgRFZJLCBMQ0QgaXMgZW5hYmxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWdwaW9fc2V0X3ZhbHVlKE9NQVAzRVZNX0RWSV9QQU5FTF9FTl9HUElPLCAxKTsKKworCWR2aV9lbmFibGVkID0gMTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb21hcDNfZXZtX2Rpc2FibGVfZHZpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlncGlvX3NldF92YWx1ZShPTUFQM0VWTV9EVklfUEFORUxfRU5fR1BJTywgMCk7CisKKwlkdmlfZW5hYmxlZCA9IDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlIG9tYXAzX2V2bV9kdmlfZGV2aWNlID0geworCS5uYW1lCQkJPSAiZHZpIiwKKwkuZHJpdmVyX25hbWUJCT0gImdlbmVyaWNfcGFuZWwiLAorCS50eXBlCQkJPSBPTUFQX0RJU1BMQVlfVFlQRV9EUEksCisJLnBoeS5kcGkuZGF0YV9saW5lcwk9IDI0LAorCS5wbGF0Zm9ybV9lbmFibGUJPSBvbWFwM19ldm1fZW5hYmxlX2R2aSwKKwkucGxhdGZvcm1fZGlzYWJsZQk9IG9tYXAzX2V2bV9kaXNhYmxlX2R2aSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpvbWFwM19ldm1fZHNzX2RldmljZXNbXSA9IHsKKwkmb21hcDNfZXZtX2xjZF9kZXZpY2UsCisJJm9tYXAzX2V2bV90dl9kZXZpY2UsCisJJm9tYXAzX2V2bV9kdmlfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19ib2FyZF9pbmZvIG9tYXAzX2V2bV9kc3NfZGF0YSA9IHsKKwkubnVtX2RldmljZXMJPSBBUlJBWV9TSVpFKG9tYXAzX2V2bV9kc3NfZGV2aWNlcyksCisJLmRldmljZXMJPSBvbWFwM19ldm1fZHNzX2RldmljZXMsCisJLmRlZmF1bHRfZGV2aWNlCT0gJm9tYXAzX2V2bV9sY2RfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcDNfZXZtX2Rzc19kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBkc3MiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmb21hcDNfZXZtX2Rzc19kYXRhLAorCX0sCit9OworCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgb21hcDNldm1fdm1tYzFfc3VwcGx5ID0gewogCS5zdXBwbHkJCQk9ICJ2bW1jIiwKIH07CkBAIC0xODUsNyArMzY3LDcgQEAKIAkuY29uc3VtZXJfc3VwcGxpZXMJPSAmb21hcDNldm1fdnNpbV9zdXBwbHksCiB9OwogCi1zdGF0aWMgc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyBtbWNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyBtbWNbXSA9IHsKIAl7CiAJCS5tbWMJCT0gMSwKIAkJLndpcmVzCQk9IDQsCkBAIC0yMjUsNyArNDA3LDcgQEAKIAkvKiBncGlvICsgMCBpcyAibW1jMF9jZCIgKGlucHV0L0lSUSkgKi8KIAlvbWFwX211eF9pbml0X2dwaW8oNjMsIE9NQVBfUElOX0lOUFVUKTsKIAltbWNbMF0uZ3Bpb19jZCA9IGdwaW8gKyAwOwotCXR3bDQwMzBfbW1jX2luaXQobW1jKTsKKwlvbWFwMl9oc21tY19pbml0KG1tYyk7CiAKIAkvKiBsaW5rIHJlZ3VsYXRvcnMgdG8gTU1DIGFkYXB0ZXJzICovCiAJb21hcDNldm1fdm1tYzFfc3VwcGx5LmRldiA9IG1tY1swXS5kZXY7CkBAIC0yMzYsNiArNDE4LDE0IEBACiAJICogdGhlIFAyIGNvbm5lY3Rvcjsgbm90YWJseSBMRURBIGZvciB0aGUgTENEIGJhY2tsaWdodC4KIAkgKi8KIAorCS8qIFRXTDQwMzBfR1BJT19NQVggKyAwID09IGxlZEEsIExDRCBCYWNrbGlnaHQgY29udHJvbCAqLworCWdwaW9fcmVxdWVzdChncGlvICsgVFdMNDAzMF9HUElPX01BWCwgIkVOX0xDRF9CS0wiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbyArIFRXTDQwMzBfR1BJT19NQVgsIDApOworCisJLyogZ3BpbyArIDcgPT0gRFZJIEVuYWJsZSAqLworCWdwaW9fcmVxdWVzdChncGlvICsgNywgIkVOX0RWSSIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvICsgNywgMCk7CisKIAkvKiBUV0w0MDMwX0dQSU9fTUFYICsgMSA9PSBsZWRCIChvdXQsIGFjdGl2ZSBsb3cgTEVEKSAqLwogCWdwaW9fbGVkc1syXS5ncGlvID0gZ3BpbyArIFRXTDQwMzBfR1BJT19NQVggKyAxOwogCkBAIC0yNTgsMjAgKzQ0OCwyMyBAQAogCiBzdGF0aWMgaW50IGJvYXJkX2tleW1hcFtdID0gewogCUtFWSgwLCAwLCBLRVlfTEVGVCksCi0JS0VZKDAsIDEsIEtFWV9SSUdIVCksCi0JS0VZKDAsIDIsIEtFWV9BKSwKLQlLRVkoMCwgMywgS0VZX0IpLAotCUtFWSgxLCAwLCBLRVlfRE9XTiksCisJS0VZKDAsIDEsIEtFWV9ET1dOKSwKKwlLRVkoMCwgMiwgS0VZX0VOVEVSKSwKKwlLRVkoMCwgMywgS0VZX00pLAorCisJS0VZKDEsIDAsIEtFWV9SSUdIVCksCiAJS0VZKDEsIDEsIEtFWV9VUCksCi0JS0VZKDEsIDIsIEtFWV9FKSwKLQlLRVkoMSwgMywgS0VZX0YpLAotCUtFWSgyLCAwLCBLRVlfRU5URVIpLAotCUtFWSgyLCAxLCBLRVlfSSksCisJS0VZKDEsIDIsIEtFWV9JKSwKKwlLRVkoMSwgMywgS0VZX04pLAorCisJS0VZKDIsIDAsIEtFWV9BKSwKKwlLRVkoMiwgMSwgS0VZX0UpLAogCUtFWSgyLCAyLCBLRVlfSiksCi0JS0VZKDIsIDMsIEtFWV9LKSwKLQlLRVkoMywgMCwgS0VZX00pLAotCUtFWSgzLCAxLCBLRVlfTiksCi0JS0VZKDMsIDIsIEtFWV9PKSwKKwlLRVkoMiwgMywgS0VZX08pLAorCisJS0VZKDMsIDAsIEtFWV9CKSwKKwlLRVkoMywgMSwgS0VZX0YpLAorCUtFWSgzLCAyLCBLRVlfSyksCiAJS0VZKDMsIDMsIEtFWV9QKQogfTsKIApAQCAtMzAwLDYgKzQ5Myw0NyBAQAogCS5hdWRpbyA9ICZvbWFwM2V2bV9hdWRpb19kYXRhLAogfTsKIAorc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IG9tYXAzX2V2bV92ZGRhX2RhY19zdXBwbHkgPSB7CisJLnN1cHBseQkJPSAidmRkYV9kYWMiLAorCS5kZXYJCT0gJm9tYXAzX2V2bV9kc3NfZGV2aWNlLmRldiwKK307CisKKy8qIFZEQUMgZm9yIERTUyBkcml2aW5nIFMtVmlkZW8gKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBvbWFwM19ldm1fdmRhYyA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDE4MDAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcwk9ICZvbWFwM19ldm1fdmRkYV9kYWNfc3VwcGx5LAorfTsKKworLyogVlBMTDIgZm9yIGRpZ2l0YWwgdmlkZW8gb3V0cHV0cyAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IG9tYXAzX2V2bV92cGxsMl9zdXBwbHkgPSB7CisJLnN1cHBseQkJPSAidmR2aSIsCisJLmRldgkJPSAmb21hcDNfZXZtX2xjZF9kZXZpY2UuZGV2LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIG9tYXAzX2V2bV92cGxsMiA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lCQkJPSAiVkRWSSIsCisJCS5taW5fdVYJCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDE4MDAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSAxLAorCS5jb25zdW1lcl9zdXBwbGllcwk9ICZvbWFwM19ldm1fdnBsbDJfc3VwcGx5LAorfTsKKwogc3RhdGljIHN0cnVjdCB0d2w0MDMwX3BsYXRmb3JtX2RhdGEgb21hcDNldm1fdHdsZGF0YSA9IHsKIAkuaXJxX2Jhc2UJPSBUV0w0MDMwX0lSUV9CQVNFLAogCS5pcnFfZW5kCT0gVFdMNDAzMF9JUlFfRU5ELApAQCAtMzEwLDYgKzU0NCw4IEBACiAJLnVzYgkJPSAmb21hcDNldm1fdXNiX2RhdGEsCiAJLmdwaW8JCT0gJm9tYXAzZXZtX2dwaW9fZGF0YSwKIAkuY29kZWMJCT0gJm9tYXAzZXZtX2NvZGVjX2RhdGEsCisJLnZkYWMJCT0gJm9tYXAzX2V2bV92ZGFjLAorCS52cGxsMgkJPSAmb21hcDNfZXZtX3ZwbGwyLAogfTsKIAogc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIG9tYXAzZXZtX2kyY19ib2FyZGluZm9bXSA9IHsKQEAgLTMzNywxNSArNTczLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugb21hcDNfZXZtX2xjZF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gIm9tYXAzZXZtX2xjZCIsCi0JLmlkCQk9IC0xLAotfTsKLQotc3RhdGljIHN0cnVjdCBvbWFwX2xjZF9jb25maWcgb21hcDNfZXZtX2xjZF9jb25maWcgX19pbml0ZGF0YSA9IHsKLQkuY3RybF9uYW1lCT0gImludGVybmFsIiwKLX07Ci0KIHN0YXRpYyB2b2lkIGFkczc4NDZfZGV2X2luaXQodm9pZCkKIHsKIAlpZiAoZ3Bpb19yZXF1ZXN0KE9NQVAzX0VWTV9UU19HUElPLCAiQURTNzg0NiBwZW5kb3duIikgPCAwKQpAQCAtMzkzLDcgKzYyMCw2IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCBvbWFwM19ldm1fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKLQl7IE9NQVBfVEFHX0xDRCwJCSZvbWFwM19ldm1fbGNkX2NvbmZpZyB9LAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2V2bV9pbml0X2lycSh2b2lkKQpAQCAtNDA2LDcgKzYzMiw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvbWFwM19ldm1fZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJm9tYXAzX2V2bV9sY2RfZGV2aWNlLAorCSZvbWFwM19ldm1fZHNzX2RldmljZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZWhjaV9oY2Rfb21hcF9wbGF0Zm9ybV9kYXRhIGVoY2lfcGRhdGEgX19pbml0Y29uc3QgPSB7CkBAIC00MjQsMTIgKzY1MCwyNCBAQAogCiAjaWZkZWYgQ09ORklHX09NQVBfTVVYCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfbXV4IGJvYXJkX211eFtdIF9faW5pdGRhdGEgPSB7CisJT01BUDNfTVVYKFNZU19OSVJRLCBPTUFQX01VWF9NT0RFMCB8IE9NQVBfUElOX0lOUFVUX1BVTExVUCB8CisJCQkJT01BUF9QSU5fT0ZGX0lOUFVUX1BVTExVUCB8CisJCQkJT01BUF9QSU5fT0ZGX1dBS0VVUEVOQUJMRSksCisJT01BUDNfTVVYKE1DU1BJMV9DUzEsIE9NQVBfTVVYX01PREU0IHwgT01BUF9QSU5fSU5QVVRfUFVMTFVQIHwKKwkJCQlPTUFQX1BJTl9PRkZfSU5QVVRfUFVMTFVQIHwKKwkJCQlPTUFQX1BJTl9PRkZfV0FLRVVQRU5BQkxFKSwKIAl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAogfTsKICNlbHNlCiAjZGVmaW5lIGJvYXJkX211eAlOVUxMCiAjZW5kaWYKIAorc3RhdGljIHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSBtdXNiX2JvYXJkX2RhdGEgPSB7CisJLmludGVyZmFjZV90eXBlCQk9IE1VU0JfSU5URVJGQUNFX1VMUEksCisJLm1vZGUJCQk9IE1VU0JfT1RHLAorCS5wb3dlcgkJCT0gMTAwLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzX2V2bV9pbml0KHZvaWQpCiB7CiAJb21hcDNfZXZtX2dldF9yZXZpc2lvbigpOwpAQCAtNDQzLDEwICs2ODEsMTAgQEAKIAkJCQlBUlJBWV9TSVpFKG9tYXAzZXZtX3NwaV9ib2FyZF9pbmZvKSk7CiAKIAlvbWFwX3NlcmlhbF9pbml0KCk7Ci0jaWZkZWYgQ09ORklHX05PUF9VU0JfWENFSVYKKwogCS8qIE9NQVAzRVZNIHVzZXMgSVNQMTUwNCBwaHkgYW5kIHNvIHJlZ2lzdGVyIG5vcCB0cmFuc2NlaXZlciAqLwogCXVzYl9ub3BfeGNlaXZfcmVnaXN0ZXIoKTsKLSNlbmRpZgorCiAJaWYgKGdldF9vbWFwM19ldm1fcmV2KCkgPj0gT01BUDNFVk1fQk9BUkRfR0VOXzIpIHsKIAkJLyogZW5hYmxlIEVIQ0kgVkJVUyB1c2luZyBHUElPMjIgKi8KIAkJb21hcF9tdXhfaW5pdF9ncGlvKDIyLCBPTUFQX1BJTl9JTlBVVF9QVUxMVVApOwpAQCAtNDY5LDE2ICs3MDcsMTcgQEAKIAkJb21hcF9tdXhfaW5pdF9ncGlvKDEzNSwgT01BUF9QSU5fT1VUUFVUKTsKIAkJZWhjaV9wZGF0YS5yZXNldF9ncGlvX3BvcnRbMV0gPSAxMzU7CiAJfQotCXVzYl9tdXNiX2luaXQoKTsKKwl1c2JfbXVzYl9pbml0KCZtdXNiX2JvYXJkX2RhdGEpOwogCXVzYl9laGNpX2luaXQoJmVoY2lfcGRhdGEpOwogCWFkczc4NDZfZGV2X2luaXQoKTsKIAlvbWFwM2V2bV9pbml0X3Ntc2M5MTF4KCk7CisJb21hcDNfZXZtX2Rpc3BsYXlfaW5pdCgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNfZXZtX21hcF9pbyh2b2lkKQogewogCW9tYXAyX3NldF9nbG9iYWxzXzM0M3goKTsKLQlvbWFwMl9tYXBfY29tbW9uX2lvKCk7CisJb21hcDM0eHhfbWFwX2NvbW1vbl9pbygpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVAzRVZNLCAiT01BUDMgRVZNIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzcGFuZG9yYS5jCmluZGV4IGVmMTdjZjEuLjQ4MjdmNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDNwYW5kb3JhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3BhbmRvcmEuYwpAQCAtNDAsMTAgKzQwLDExIEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPHBsYXQvbWNzcGkuaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgorI2luY2x1ZGUgPHBsYXQvZGlzcGxheS5oPgogCiAjaW5jbHVkZSAibXV4LmgiCiAjaW5jbHVkZSAic2RyYW0tbWljcm9uLW10NDZoMzJtMzJsZi02LmgiCi0jaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKKyNpbmNsdWRlICJoc21tYy5oIgogCiAjZGVmaW5lIE9NQVAzX1BBTkRPUkFfVFNfR1BJTwkJOTQKIApAQCAtMTkyLDcgKzE5Myw0MSBAQAogCS5yZXAJCT0gMSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9oc21tY19pbmZvIG9tYXAzcGFuZG9yYV9tbWNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlIHBhbmRvcmFfbGNkX2RldmljZSA9IHsKKwkubmFtZQkJCT0gImxjZCIsCisJLmRyaXZlcl9uYW1lCQk9ICJ0cG9fdGQwNDNtdGVhMV9wYW5lbCIsCisJLnR5cGUJCQk9IE9NQVBfRElTUExBWV9UWVBFX0RQSSwKKwkucGh5LmRwaS5kYXRhX2xpbmVzCT0gMjQsCisJLnJlc2V0X2dwaW8JCT0gMTU3LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgcGFuZG9yYV90dl9kZXZpY2UgPSB7CisJLm5hbWUJCQk9ICJ0diIsCisJLmRyaXZlcl9uYW1lCQk9ICJ2ZW5jIiwKKwkudHlwZQkJCT0gT01BUF9ESVNQTEFZX1RZUEVfVkVOQywKKwkucGh5LnZlbmMudHlwZQkJPSBPTUFQX0RTU19WRU5DX1RZUEVfU1ZJREVPLAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKnBhbmRvcmFfZHNzX2RldmljZXNbXSA9IHsKKwkmcGFuZG9yYV9sY2RfZGV2aWNlLAorCSZwYW5kb3JhX3R2X2RldmljZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfYm9hcmRfaW5mbyBwYW5kb3JhX2Rzc19kYXRhID0geworCS5udW1fZGV2aWNlcwk9IEFSUkFZX1NJWkUocGFuZG9yYV9kc3NfZGV2aWNlcyksCisJLmRldmljZXMJPSBwYW5kb3JhX2Rzc19kZXZpY2VzLAorCS5kZWZhdWx0X2RldmljZQk9ICZwYW5kb3JhX2xjZF9kZXZpY2UsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBwYW5kb3JhX2Rzc19kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXBkc3MiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGFuZG9yYV9kc3NfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwMl9oc21tY19pbmZvIG9tYXAzcGFuZG9yYV9tbWNbXSA9IHsKIAl7CiAJCS5tbWMJCT0gMSwKIAkJLndpcmVzCQk9IDQsCkBAIC0yMTcsMjUgKzI1MiwxMyBAQAogCXt9CS8qIFRlcm1pbmF0b3IgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBwYW5kb3JhX3ZtbWMxX3N1cHBseSA9IHsKLQkuc3VwcGx5CQkJPSAidm1tYyIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcGFuZG9yYV92bW1jMl9zdXBwbHkgPSB7Ci0JLnN1cHBseQkJCT0gInZtbWMiLAotfTsKLQogc3RhdGljIGludCBvbWFwM3BhbmRvcmFfdHdsX2dwaW9fc2V0dXAoc3RydWN0IGRldmljZSAqZGV2LAogCQl1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBuZ3BpbykKIHsKIAkvKiBncGlvICsgezAsMX0gaXMgIm1tY3swLDF9X2NkIiAoaW5wdXQvSVJRKSAqLwogCW9tYXAzcGFuZG9yYV9tbWNbMF0uZ3Bpb19jZCA9IGdwaW8gKyAwOwogCW9tYXAzcGFuZG9yYV9tbWNbMV0uZ3Bpb19jZCA9IGdwaW8gKyAxOwotCXR3bDQwMzBfbW1jX2luaXQob21hcDNwYW5kb3JhX21tYyk7Ci0KLQkvKiBsaW5rIHJlZ3VsYXRvcnMgdG8gTU1DIGFkYXB0ZXJzICovCi0JcGFuZG9yYV92bW1jMV9zdXBwbHkuZGV2ID0gb21hcDNwYW5kb3JhX21tY1swXS5kZXY7Ci0JcGFuZG9yYV92bW1jMl9zdXBwbHkuZGV2ID0gb21hcDNwYW5kb3JhX21tY1sxXS5kZXY7CisJb21hcDJfaHNtbWNfaW5pdChvbWFwM3BhbmRvcmFfbW1jKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjQ3LDYgKzI3MCwzNiBAQAogCS5zZXR1cAkJPSBvbWFwM3BhbmRvcmFfdHdsX2dwaW9fc2V0dXAsCiB9OwogCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcGFuZG9yYV92bW1jMV9zdXBwbHkgPQorCVJFR1VMQVRPUl9TVVBQTFkoInZtbWMiLCAibW1jaS1vbWFwLWhzLjAiKTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHBhbmRvcmFfdm1tYzJfc3VwcGx5ID0KKwlSRUdVTEFUT1JfU1VQUExZKCJ2bW1jIiwgIm1tY2ktb21hcC1ocy4xIik7CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBwYW5kb3JhX3ZkZGFfZGFjX3N1cHBseSA9CisJUkVHVUxBVE9SX1NVUFBMWSgidmRkYV9kYWMiLCAib21hcGRzcyIpOworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcGFuZG9yYV92ZGRzX3N1cHBsaWVzW10gPSB7CisJUkVHVUxBVE9SX1NVUFBMWSgidmRkc19zZGkiLCAib21hcGRzcyIpLAorCVJFR1VMQVRPUl9TVVBQTFkoInZkZHNfZHNpIiwgIm9tYXBkc3MiKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBwYW5kb3JhX3ZjY19sY2Rfc3VwcGx5ID0KKwlSRUdVTEFUT1JfU1VQUExZKCJ2Y2MiLCAiZGlzcGxheTAiKTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHBhbmRvcmFfdXNiX3BoeV9zdXBwbHkgPQorCVJFR1VMQVRPUl9TVVBQTFkoImhzdXNiMCIsICJlaGNpLW9tYXAuMCIpOworCisvKiBhZHM3ODQ2IG9uIFNQSSBhbmQgMiBudWIgY29udHJvbGxlcnMgb24gSTJDICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcGFuZG9yYV92YXV4NF9zdXBwbGllc1tdID0geworCVJFR1VMQVRPUl9TVVBQTFkoInZjYyIsICJzcGkxLjAiKSwKKwlSRUdVTEFUT1JfU1VQUExZKCJ2Y2MiLCAiMy0wMDY2IiksCisJUkVHVUxBVE9SX1NVUFBMWSgidmNjIiwgIjMtMDA2NyIpLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHBhbmRvcmFfYWRhY19zdXBwbHkgPQorCVJFR1VMQVRPUl9TVVBQTFkoInZjYyIsICJzb2MtYXVkaW8iKTsKKwogLyogVk1NQzEgZm9yIE1NQzEgcGlucyBDTUQsIENMSywgREFUMC4uREFUMyAoMjAgbUEsIHBsdXMgY2FyZCA9PSBtYXggMjIwIG1BKSAqLwogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHBhbmRvcmFfdm1tYzEgPSB7CiAJLmNvbnN0cmFpbnRzID0gewpAQCAtMjc3LDYgKzMzMCw5NiBAQAogCS5jb25zdW1lcl9zdXBwbGllcwk9ICZwYW5kb3JhX3ZtbWMyX3N1cHBseSwKIH07CiAKKy8qIFZEQUMgZm9yIERTUyBkcml2aW5nIFMtVmlkZW8gKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBwYW5kb3JhX3ZkYWMgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAxODAwMDAwLAorCQkubWF4X3VWCQkJPSAxODAwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmcGFuZG9yYV92ZGRhX2RhY19zdXBwbHksCit9OworCisvKiBWUExMMiBmb3IgZGlnaXRhbCB2aWRlbyBvdXRwdXRzICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgcGFuZG9yYV92cGxsMiA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5taW5fdVYJCQk9IDE4MDAwMDAsCisJCS5tYXhfdVYJCQk9IDE4MDAwMDAsCisJCS5hcHBseV91VgkJPSB0cnVlLAorCQkudmFsaWRfbW9kZXNfbWFzawk9IFJFR1VMQVRPUl9NT0RFX05PUk1BTAorCQkJCQl8IFJFR1VMQVRPUl9NT0RFX1NUQU5EQlksCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX01PREUKKwkJCQkJfCBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUywKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMJPSBBUlJBWV9TSVpFKHBhbmRvcmFfdmRkc19zdXBwbGllcyksCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gcGFuZG9yYV92ZGRzX3N1cHBsaWVzLAorfTsKKworLyogVkFVWDEgZm9yIExDRCAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHBhbmRvcmFfdmF1eDEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAzMDAwMDAwLAorCQkubWF4X3VWCQkJPSAzMDAwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gMSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSAmcGFuZG9yYV92Y2NfbGNkX3N1cHBseSwKK307CisKKy8qIFZBVVgyIGZvciBVU0IgaG9zdCBQSFkgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBwYW5kb3JhX3ZhdXgyID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMTgwMDAwMCwKKwkJLm1heF91VgkJCT0gMTgwMDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJnBhbmRvcmFfdXNiX3BoeV9zdXBwbHksCit9OworCisvKiBWQVVYNCBmb3IgYWRzNzg0NiBhbmQgbnVicyAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHBhbmRvcmFfdmF1eDQgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubWluX3VWCQkJPSAyODAwMDAwLAorCQkubWF4X3VWCQkJPSAyODAwMDAwLAorCQkuYXBwbHlfdVYJCT0gdHJ1ZSwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwKKwkJCQkJfCBSRUdVTEFUT1JfTU9ERV9TVEFOREJZLAorCQkudmFsaWRfb3BzX21hc2sJCT0gUkVHVUxBVE9SX0NIQU5HRV9NT0RFCisJCQkJCXwgUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzCT0gQVJSQVlfU0laRShwYW5kb3JhX3ZhdXg0X3N1cHBsaWVzKSwKKwkuY29uc3VtZXJfc3VwcGxpZXMJPSBwYW5kb3JhX3ZhdXg0X3N1cHBsaWVzLAorfTsKKworLyogVlNJTSBmb3IgYXVkaW8gREFDICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgcGFuZG9yYV92c2ltID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMjgwMDAwMCwKKwkJLm1heF91VgkJCT0gMjgwMDAwMCwKKwkJLmFwcGx5X3VWCQk9IHRydWUsCisJCS52YWxpZF9tb2Rlc19tYXNrCT0gUkVHVUxBVE9SX01PREVfTk9STUFMCisJCQkJCXwgUkVHVUxBVE9SX01PREVfU1RBTkRCWSwKKwkJLnZhbGlkX29wc19tYXNrCQk9IFJFR1VMQVRPUl9DSEFOR0VfTU9ERQorCQkJCQl8IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcwk9IDEsCisJLmNvbnN1bWVyX3N1cHBsaWVzCT0gJnBhbmRvcmFfYWRhY19zdXBwbHksCit9OworCiBzdGF0aWMgc3RydWN0IHR3bDQwMzBfdXNiX2RhdGEgb21hcDNwYW5kb3JhX3VzYl9kYXRhID0gewogCS51c2JfbW9kZQk9IFQyX1VTQl9NT0RFX1VMUEksCiB9OwpAQCAtMjk4LDYgKzQ0MSwxMiBAQAogCS5jb2RlYwkJPSAmb21hcDNwYW5kb3JhX2NvZGVjX2RhdGEsCiAJLnZtbWMxCQk9ICZwYW5kb3JhX3ZtbWMxLAogCS52bW1jMgkJPSAmcGFuZG9yYV92bW1jMiwKKwkudmRhYwkJPSAmcGFuZG9yYV92ZGFjLAorCS52cGxsMgkJPSAmcGFuZG9yYV92cGxsMiwKKwkudmF1eDEJCT0gJnBhbmRvcmFfdmF1eDEsCisJLnZhdXgyCQk9ICZwYW5kb3JhX3ZhdXgyLAorCS52YXV4NAkJPSAmcGFuZG9yYV92YXV4NCwKKwkudnNpbQkJPSAmcGFuZG9yYV92c2ltLAogCS5rZXlwYWQJCT0gJnBhbmRvcmFfa3BfZGF0YSwKIH07CiAKQEAgLTM2NSw2ICs1MTQsMTIgQEAKIAkJLmNvbnRyb2xsZXJfZGF0YQk9ICZhZHM3ODQ2X21jc3BpX2NvbmZpZywKIAkJLmlycQkJCT0gT01BUF9HUElPX0lSUShPTUFQM19QQU5ET1JBX1RTX0dQSU8pLAogCQkucGxhdGZvcm1fZGF0YQkJPSAmYWRzNzg0Nl9jb25maWcsCisJfSwgeworCQkubW9kYWxpYXMJCT0gInRwb190ZDA0M210ZWExX3BhbmVsX3NwaSIsCisJCS5idXNfbnVtCQk9IDEsCisJCS5jaGlwX3NlbGVjdAkJPSAxLAorCQkubWF4X3NwZWVkX2h6CQk9IDM3NTAwMCwKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJnBhbmRvcmFfbGNkX2RldmljZSwKIAl9CiB9OwogCkBAIC0zNzksNiArNTM0LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvbWFwM3BhbmRvcmFfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnBhbmRvcmFfbGVkc19ncGlvLAogCSZwYW5kb3JhX2tleXNfZ3BpbywKKwkmcGFuZG9yYV9kc3NfZGV2aWNlLAogfTsKIAogc3RhdGljIHN0cnVjdCBlaGNpX2hjZF9vbWFwX3BsYXRmb3JtX2RhdGEgZWhjaV9wZGF0YSBfX2luaXRjb25zdCA9IHsKQEAgLTQwMSw2ICs1NTcsMTIgQEAKICNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IG9tYXBfbXVzYl9ib2FyZF9kYXRhIG11c2JfYm9hcmRfZGF0YSA9IHsKKwkuaW50ZXJmYWNlX3R5cGUJCT0gTVVTQl9JTlRFUkZBQ0VfVUxQSSwKKwkubW9kZQkJCT0gTVVTQl9PVEcsCisJLnBvd2VyCQkJPSAxMDAsCit9OworCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDNwYW5kb3JhX2luaXQodm9pZCkKIHsKIAlvbWFwM19tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9DQkIpOwpAQCAtNDEzLDcgKzU3NSw3IEBACiAJb21hcDNwYW5kb3JhX2Fkczc4NDZfaW5pdCgpOwogCXVzYl9laGNpX2luaXQoJmVoY2lfcGRhdGEpOwogCXBhbmRvcmFfa2V5c19ncGlvX2luaXQoKTsKLQl1c2JfbXVzYl9pbml0KCk7CisJdXNiX211c2JfaW5pdCgmbXVzYl9ib2FyZF9kYXRhKTsKIAogCS8qIEVuc3VyZSBTRFJDIHBpbnMgYXJlIG11eCdkIGZvciBzZWxmLXJlZnJlc2ggKi8KIAlvbWFwX211eF9pbml0X3NpZ25hbCgic2RyY19ja2UwIiwgT01BUF9QSU5fT1VUUFVUKTsKQEAgLTQyMyw3ICs1ODUsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IG9tYXAzcGFuZG9yYV9tYXBfaW8odm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDJfbWFwX2NvbW1vbl9pbygpOworCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKIH0KIAogTUFDSElORV9TVEFSVChPTUFQM19QQU5ET1JBLCAiUGFuZG9yYSBIYW5kaGVsZCBDb25zb2xlIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb21hcDN0b3VjaGJvb2suYwppbmRleCBmZTNkMjJjLi4zOTQzZDBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW9tYXAzdG91Y2hib29rLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vbWFwM3RvdWNoYm9vay5jCkBAIC01MCw3ICs1MCw3IEBACiAjaW5jbHVkZSA8cGxhdC90aW1lci1ncC5oPgogCiAjaW5jbHVkZSAibXV4LmgiCi0jaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKKyNpbmNsdWRlICJoc21tYy5oIgogCiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAKQEAgLTEyMiw3ICsxMjIsNyBAQAogCiAjaW5jbHVkZSAic2RyYW0tbWljcm9uLW10NDZoMzJtMzJsZi02LmgiCiAKLXN0YXRpYyBzdHJ1Y3QgdHdsNDAzMF9oc21tY19pbmZvIG1tY1tdID0geworc3RhdGljIHN0cnVjdCBvbWFwMl9oc21tY19pbmZvIG1tY1tdID0gewogCXsKIAkJLm1tYwkJPSAxLAogCQkud2lyZXMJCT0gOCwKQEAgLTE2MSw3ICsxNjEsNyBAQAogCX0KIAkvKiBncGlvICsgMCBpcyAibW1jMF9jZCIgKGlucHV0L0lSUSkgKi8KIAltbWNbMF0uZ3Bpb19jZCA9IGdwaW8gKyAwOwotCXR3bDQwMzBfbW1jX2luaXQobW1jKTsKKwlvbWFwMl9oc21tY19pbml0KG1tYyk7CiAKIAkvKiBsaW5rIHJlZ3VsYXRvcnMgdG8gTU1DIGFkYXB0ZXJzICovCiAJdG91Y2hib29rX3ZtbWMxX3N1cHBseS5kZXYgPSBtbWNbMF0uZGV2OwpAQCAtNTI3LDYgKzUyNywxMiBAQAogfQogX19lYXJseV9wYXJhbSgidGJyPSIsIGVhcmx5X3RvdWNoYm9va19yZXZpc2lvbik7CiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgbXVzYl9ib2FyZF9kYXRhID0geworCS5pbnRlcmZhY2VfdHlwZQkJPSBNVVNCX0lOVEVSRkFDRV9VTFBJLAorCS5tb2RlCQkJPSBNVVNCX09URywKKwkucG93ZXIJCQk9IDEwMCwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM190b3VjaGJvb2tfaW5pdCh2b2lkKQogewogCXBtX3Bvd2VyX29mZiA9IG9tYXAzX3RvdWNoYm9va19wb3dlcm9mZjsKQEAgLTU0NSw3ICs1NTEsNyBAQAogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKG9tYXAzX2Fkczc4NDZfc3BpX2JvYXJkX2luZm8sCiAJCQkJQVJSQVlfU0laRShvbWFwM19hZHM3ODQ2X3NwaV9ib2FyZF9pbmZvKSk7CiAJb21hcDNfYWRzNzg0Nl9pbml0KCk7Ci0JdXNiX211c2JfaW5pdCgpOworCXVzYl9tdXNiX2luaXQoJm11c2JfYm9hcmRfZGF0YSk7CiAJdXNiX2VoY2lfaW5pdCgmZWhjaV9wZGF0YSk7CiAJb21hcDN0b3VjaGJvb2tfZmxhc2hfaW5pdCgpOwogCkBAIC01NTcsNyArNTYzLDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM190b3VjaGJvb2tfbWFwX2lvKHZvaWQpCiB7CiAJb21hcDJfc2V0X2dsb2JhbHNfMzQzeCgpOwotCW9tYXAyX21hcF9jb21tb25faW8oKTsKKwlvbWFwMzR4eF9tYXBfY29tbW9uX2lvKCk7CiB9CiAKIE1BQ0hJTkVfU1RBUlQoVE9VQ0hCT09LLCAiT01BUDMgdG91Y2hib29rIEJvYXJkIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtb3Zlcm8uYwppbmRleCBkMTkyZGQ5Li41MDg3MmE0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLW92ZXJvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1vdmVyby5jCkBAIC00OCw3ICs0OCw3IEBACiAKICNpbmNsdWRlICJtdXguaCIKICNpbmNsdWRlICJzZHJhbS1taWNyb24tbXQ0NmgzMm0zMmxmLTYuaCIKLSNpbmNsdWRlICJtbWMtdHdsNDAzMC5oIgorI2luY2x1ZGUgImhzbW1jLmgiCiAKICNkZWZpbmUgT1ZFUk9fR1BJT19CVF9YR0FURQkxNQogI2RlZmluZSBPVkVST19HUElPX1cyV19OUkVTRVQJMTYKQEAgLTI3Miw3ICsyNzIsNyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gbW1jW10gPSB7CitzdGF0aWMgc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gbW1jW10gPSB7CiAJewogCQkubW1jCQk9IDEsCiAJCS53aXJlcwkJPSA0LApAQCAtMjk3LDcgKzI5Nyw3IEBACiBzdGF0aWMgaW50IG92ZXJvX3R3bF9ncGlvX3NldHVwKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJdW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbmdwaW8pCiB7Ci0JdHdsNDAzMF9tbWNfaW5pdChtbWMpOworCW9tYXAyX2hzbW1jX2luaXQobW1jKTsKIAogCW92ZXJvX3ZtbWMxX3N1cHBseS5kZXYgPSBtbWNbMF0uZGV2OwogCkBAIC00MTMsNiArNDEzLDEyIEBACiAjZGVmaW5lIGJvYXJkX211eAlOVUxMCiAjZW5kaWYKIAorc3RhdGljIHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSBtdXNiX2JvYXJkX2RhdGEgPSB7CisJLmludGVyZmFjZV90eXBlCQk9IE1VU0JfSU5URVJGQUNFX1VMUEksCisJLm1vZGUJCQk9IE1VU0JfT1RHLAorCS5wb3dlcgkJCT0gMTAwLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IG92ZXJvX2luaXQodm9pZCkKIHsKIAlvbWFwM19tdXhfaW5pdChib2FyZF9tdXgsIE9NQVBfUEFDS0FHRV9DQkIpOwpAQCAtNDIwLDcgKzQyNiw3IEBACiAJcGxhdGZvcm1fYWRkX2RldmljZXMob3Zlcm9fZGV2aWNlcywgQVJSQVlfU0laRShvdmVyb19kZXZpY2VzKSk7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwogCW92ZXJvX2ZsYXNoX2luaXQoKTsKLQl1c2JfbXVzYl9pbml0KCk7CisJdXNiX211c2JfaW5pdCgmbXVzYl9ib2FyZF9kYXRhKTsKIAl1c2JfZWhjaV9pbml0KCZlaGNpX3BkYXRhKTsKIAlvdmVyb19hZHM3ODQ2X2luaXQoKTsKIAlvdmVyb19pbml0X3Ntc2M5MTF4KCk7CkBAIC00NjksNyArNDc1LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBvdmVyb19tYXBfaW8odm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDJfbWFwX2NvbW1vbl9pbygpOworCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKIH0KIAogTUFDSElORV9TVEFSVChPVkVSTywgIkd1bXN0aXggT3Zlcm8iKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1yeDUxLXBlcmlwaGVyYWxzLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwppbmRleCBhY2FmZGJjLi40Mzc3YTRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEtcGVyaXBoZXJhbHMuYwpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPHBsYXQvZ3BtYy1zbWM5MXguaD4KIAogI2luY2x1ZGUgIm11eC5oIgotI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCisjaW5jbHVkZSAiaHNtbWMuaCIKIAogI2RlZmluZSBTWVNURU1fUkVWX0JfVVNFU19WQVVYMwkweDE2OTkKICNkZWZpbmUgU1lTVEVNX1JFVl9TX1VTRVNfVkFVWDMgMHg4CkBAIC0yMDksNyArMjA5LDQ3IEBACiAJLmlycV9saW5lCQk9IDEsCiB9OwogCi1zdGF0aWMgc3RydWN0IHR3bDQwMzBfaHNtbWNfaW5mbyBtbWNbXSA9IHsKKy8qIEVuYWJsZSBpbnB1dCBsb2dpYyBhbmQgcHVsbCBhbGwgbGluZXMgdXAgd2hlbiBlTU1DIGlzIG9uLiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCByeDUxX21tYzJfb25fbXV4W10gPSB7CisJT01BUDNfTVVYKFNETU1DMl9DTUQsIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDAsIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDEsIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDIsIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDMsIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDQsIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDUsIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDYsIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDcsIE9NQVBfUElOX0lOUFVUX1BVTExVUCB8IE9NQVBfTVVYX01PREUwKSwKKwl7IC5yZWdfb2Zmc2V0ID0gT01BUF9NVVhfVEVSTUlOQVRPUiB9LAorfTsKKworLyogRGlzYWJsZSBpbnB1dCBsb2dpYyBhbmQgcHVsbCBhbGwgbGluZXMgZG93biB3aGVuIGVNTUMgaXMgb2ZmLiAqLworc3RhdGljIHN0cnVjdCBvbWFwX2JvYXJkX211eCByeDUxX21tYzJfb2ZmX211eFtdID0geworCU9NQVAzX01VWChTRE1NQzJfQ01ELCBPTUFQX1BVTExfRU5BIHwgT01BUF9NVVhfTU9ERTApLAorCU9NQVAzX01VWChTRE1NQzJfREFUMCwgT01BUF9QVUxMX0VOQSB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDEsIE9NQVBfUFVMTF9FTkEgfCBPTUFQX01VWF9NT0RFMCksCisJT01BUDNfTVVYKFNETU1DMl9EQVQyLCBPTUFQX1BVTExfRU5BIHwgT01BUF9NVVhfTU9ERTApLAorCU9NQVAzX01VWChTRE1NQzJfREFUMywgT01BUF9QVUxMX0VOQSB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDQsIE9NQVBfUFVMTF9FTkEgfCBPTUFQX01VWF9NT0RFMCksCisJT01BUDNfTVVYKFNETU1DMl9EQVQ1LCBPTUFQX1BVTExfRU5BIHwgT01BUF9NVVhfTU9ERTApLAorCU9NQVAzX01VWChTRE1NQzJfREFUNiwgT01BUF9QVUxMX0VOQSB8IE9NQVBfTVVYX01PREUwKSwKKwlPTUFQM19NVVgoU0RNTUMyX0RBVDcsIE9NQVBfUFVMTF9FTkEgfCBPTUFQX01VWF9NT0RFMCksCisJeyAucmVnX29mZnNldCA9IE9NQVBfTVVYX1RFUk1JTkFUT1IgfSwKK307CisKKy8qCisgKiBDdXJyZW50IGZsb3dzIHRvIGVNTUMgd2hlbiBlTU1DIGlzIG9mZiBhbmQgdGhlIGRhdGEgbGluZXMgYXJlIHB1bGxlZCB1cCwKKyAqIHNvIHB1bGwgdGhlbSBkb3duLiBOLkIuIHdlIHB1bGwgOCBsaW5lcyBiZWNhdXNlIHdlIGFyZSB1c2luZyA4IGxpbmVzLgorICovCitzdGF0aWMgdm9pZCByeDUxX21tYzJfcmVtdXgoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uKQoreworCWlmIChwb3dlcl9vbikKKwkJb21hcF9tdXhfd3JpdGVfYXJyYXkocng1MV9tbWMyX29uX211eCk7CisJZWxzZQorCQlvbWFwX211eF93cml0ZV9hcnJheShyeDUxX21tYzJfb2ZmX211eCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyBtbWNbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLm5hbWUJCT0gImV4dGVybmFsIiwKIAkJLm1tYwkJPSAxLApAQCAtMjIyLDI1ICsyNjIsMjkgQEAKIAl7CiAJCS5uYW1lCQk9ICJpbnRlcm5hbCIsCiAJCS5tbWMJCT0gMiwKLQkJLndpcmVzCQk9IDgsCisJCS53aXJlcwkJPSA4LCAvKiBTZWUgYWxzbyByeDUxX21tYzJfcmVtdXggKi8KIAkJLmdwaW9fY2QJPSAtRUlOVkFMLAogCQkuZ3Bpb193cAk9IC1FSU5WQUwsCiAJCS5ub25yZW1vdmFibGUJPSB0cnVlLAogCQkucG93ZXJfc2F2aW5nCT0gdHJ1ZSwKKwkJLnJlbXV4CQk9IHJ4NTFfbW1jMl9yZW11eCwKIAl9LAogCXt9CS8qIFRlcm1pbmF0b3IgKi8KIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSByeDUxX3ZtbWMxX3N1cHBseSA9IHsKLQkuc3VwcGx5CQkJPSAidm1tYyIsCisJLnN1cHBseSAgID0gInZtbWMiLAorCS5kZXZfbmFtZSA9ICJtbWNpLW9tYXAtaHMuMCIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgcng1MV92bW1jMl9zdXBwbHkgPSB7Ci0JLnN1cHBseQkJCT0gInZtbWMiLAorCS5zdXBwbHkgICA9ICJ2bW1jIiwKKwkuZGV2X25hbWUgPSAibW1jaS1vbWFwLWhzLjEiLAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHJ4NTFfdnNpbV9zdXBwbHkgPSB7Ci0JLnN1cHBseQkJCT0gInZtbWNfYXV4IiwKKwkuc3VwcGx5ICAgPSAidm1tY19hdXgiLAorCS5kZXZfbmFtZSA9ICJtbWNpLW9tYXAtaHMuMSIsCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgcng1MV92YXV4MSA9IHsKQEAgLTM3NSwxMiArNDE5LDYgQEAKIAlncGlvX3JlcXVlc3QoZ3BpbyArIDcsICJzcGVha2VyX2VuIik7CiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8gKyA3LCAxKTsKIAotCS8qIHNldCB1cCBNTUMgYWRhcHRlcnMsIGxpbmtpbmcgdGhlaXIgcmVndWxhdG9ycyB0byB0aGVtICovCi0JdHdsNDAzMF9tbWNfaW5pdChtbWMpOwotCXJ4NTFfdm1tYzFfc3VwcGx5LmRldiA9IG1tY1swXS5kZXY7Ci0Jcng1MV92bW1jMl9zdXBwbHkuZGV2ID0gbW1jWzFdLmRldjsKLQlyeDUxX3ZzaW1fc3VwcGx5LmRldiA9IG1tY1sxXS5kZXY7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNzUxLDUgKzc4OSw2IEBACiAJcng1MV9pbml0X3dsMTI1MSgpOwogCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKHJ4NTFfcGVyaXBoZXJhbHNfc3BpX2JvYXJkX2luZm8sCiAJCQkJQVJSQVlfU0laRShyeDUxX3BlcmlwaGVyYWxzX3NwaV9ib2FyZF9pbmZvKSk7CisJb21hcDJfaHNtbWNfaW5pdChtbWMpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXJ4NTEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCmluZGV4IDY3YmIzNDcuLmIxNTVjMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtcng1MS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogCiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CkBAIC0zMCw5ICszMSw0OSBAQAogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAKICNpbmNsdWRlICJtdXguaCIKKyNpbmNsdWRlICJwbS5oIgorCisjZGVmaW5lIFJYNTFfR1BJT19TTEVFUF9JTkQgMTYyCiAKIHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpyeDUxX2dldF9zZHJhbV90aW1pbmdzKHZvaWQpOwogCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIGdwaW9fbGVkc1tdID0geworCXsKKwkJLm5hbWUJPSAic2xlZXBfaW5kIiwKKwkJLmdwaW8JPSBSWDUxX0dQSU9fU0xFRVBfSU5ELAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgZ3Bpb19sZWRfaW5mbyA9IHsKKwkubGVkcwkJPSBncGlvX2xlZHMsCisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShncGlvX2xlZHMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbGVkc19ncGlvID0geworCS5uYW1lCT0gImxlZHMtZ3BpbyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZ3Bpb19sZWRfaW5mbywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBjcHVpZGxlX3BhcmFtcyByeDUxX2NwdWlkbGVfcGFyYW1zW10gPSB7CisJLyogQzEgKi8KKwl7MSwgMTEwLCAxNjIsIDV9LAorCS8qIEMyICovCisJezEsIDEwNiwgMTgwLCAzMDl9LAorCS8qIEMzICovCisJezAsIDEwNywgNDEwLCA0NjA1N30sCisJLyogQzQgKi8KKwl7MCwgMTIxLCAzMzc0LCA0NjA1N30sCisJLyogQzUgKi8KKwl7MSwgODU1LCAxMTQ2LCA0NjA1N30sCisJLyogQzYgKi8KKwl7MCwgNzU4MCwgNDEzNCwgNDg0MzI5fSwKKwkvKiBDNyAqLworCXsxLCA3NTA1LCAxNTI3NCwgNDg0MzI5fSwKK307CisKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9sY2RfY29uZmlnIHJ4NTFfbGNkX2NvbmZpZyA9IHsKIAkuY3RybF9uYW1lCT0gImludGVybmFsIiwKIH07CkBAIC02Miw2ICsxMDMsNyBAQAogCiAJb21hcF9ib2FyZF9jb25maWcgPSByeDUxX2NvbmZpZzsKIAlvbWFwX2JvYXJkX2NvbmZpZ19zaXplID0gQVJSQVlfU0laRShyeDUxX2NvbmZpZyk7CisJb21hcDNfcG1faW5pdF9jcHVpZGxlKHJ4NTFfY3B1aWRsZV9wYXJhbXMpOwogCXNkcmNfcGFyYW1zID0gcng1MV9nZXRfc2RyYW1fdGltaW5ncygpOwogCW9tYXAyX2luaXRfY29tbW9uX2h3KHNkcmNfcGFyYW1zLCBzZHJjX3BhcmFtcyk7CiAJb21hcF9pbml0X2lycSgpOwpAQCAtNzgsMjIgKzEyMCwzMCBAQAogI2RlZmluZSBib2FyZF9tdXgJTlVMTAogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgbXVzYl9ib2FyZF9kYXRhID0geworCS5pbnRlcmZhY2VfdHlwZQkJPSBNVVNCX0lOVEVSRkFDRV9VTFBJLAorCS5tb2RlCQkJPSBNVVNCX1BFUklQSEVSQUwsCisJLnBvd2VyCQkJPSAwLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IHJ4NTFfaW5pdCh2b2lkKQogewogCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCQik7CiAJb21hcF9zZXJpYWxfaW5pdCgpOwotCXVzYl9tdXNiX2luaXQoKTsKKwl1c2JfbXVzYl9pbml0KCZtdXNiX2JvYXJkX2RhdGEpOwogCXJ4NTFfcGVyaXBoZXJhbHNfaW5pdCgpOwogCiAJLyogRW5zdXJlIFNEUkMgcGlucyBhcmUgbXV4J2QgZm9yIHNlbGYtcmVmcmVzaCAqLwogCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZHJjX2NrZTAiLCBPTUFQX1BJTl9PVVRQVVQpOwogCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzZHJjX2NrZTEiLCBPTUFQX1BJTl9PVVRQVVQpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZsZWRzX2dwaW8pOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcng1MV9tYXBfaW8odm9pZCkKIHsKIAlvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KCk7Ci0Jb21hcDJfbWFwX2NvbW1vbl9pbygpOworCW9tYXAzNHh4X21hcF9jb21tb25faW8oKTsKIH0KIAogTUFDSElORV9TVEFSVChOT0tJQV9SWDUxLCAiTm9raWEgUlgtNTEgYm9hcmQiKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1zZHAtZmxhc2guYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtc2RwLWZsYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFiODhkZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtc2RwLWZsYXNoLmMKQEAgLTAsMCArMSwyNzIgQEAKKy8qCisgKiBib2FyZC1zZHAtZmxhc2guYworICogTW9kaWZpZWQgZnJvbSBtYWNoLW9tYXAyL2JvYXJkLTM0MzBzZHAtZmxhc2guYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzCisgKgorICogVmltYWwgU2luZ2ggPHZpbWFsc2luZ2hAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgorI2luY2x1ZGUgPHBsYXQvbmFuZC5oPgorI2luY2x1ZGUgPHBsYXQvb25lbmFuZC5oPgorI2luY2x1ZGUgPHBsYXQvdGMuaD4KKyNpbmNsdWRlIDxtYWNoL2JvYXJkLXNkcC5oPgorCisjZGVmaW5lIFJFR19GUEdBX1JFVgkJCTB4MTAKKyNkZWZpbmUgUkVHX0ZQR0FfRElQX1NXSVRDSF9JTlBVVDIJMHg2MAorI2RlZmluZSBNQVhfU1VQUE9SVEVEX0dQTUNfQ09ORklHCTMKKworI2RlZmluZSBERUJVR19CQVNFCQkweDA4MDAwMDAwIC8qIGRlYnVnIGJvYXJkICovCisKKyNkZWZpbmUgUERDX05PUgkJMQorI2RlZmluZSBQRENfTkFORAkyCisjZGVmaW5lIFBEQ19PTkVOQU5ECTMKKyNkZWZpbmUgREJHX01QREIJNAorCisvKiB2YXJpb3VzIG1lbW9yeSBzaXplcyAqLworI2RlZmluZSBGTEFTSF9TSVpFX1NEUFYxCVNaXzY0TQkvKiBOT1IgZmxhc2ggKDY0IE1lZyBhbGlnbmVkKSAqLworI2RlZmluZSBGTEFTSF9TSVpFX1NEUFYyCVNaXzEyOE0JLyogTk9SIGZsYXNoICgyNTYgTWVnIGFsaWduZWQpICovCisKKy8qCisgKiBTRFAzNDMwIFYyIEJvYXJkIENTIG9yZ2FuaXphdGlvbgorICogRGlmZmVyZW50IGZyb20gU0RQMzQzMCBWMS4gTm93IDQgc3dpdGNoZXMgdXNlZCB0byBzcGVjaWZ5IENTCisgKgorICogU2VlIGFsc28gdGhlIFN3aXRjaCBTOCBzZXR0aW5ncyBpbiB0aGUgY29tbWVudHMuCisgKgorICogUkVWSVNJVDogQWRkIHN1cHBvcnQgZm9yIDI0MzAgU0RQCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNoaXBfc2VsX3NkcFtdW0dQTUNfQ1NfTlVNXSA9IHsKKwl7UERDX05PUiwgUERDX05BTkQsIFBEQ19PTkVOQU5ELCBEQkdfTVBEQiwgMCwgMCwgMCwgMH0sIC8qIFM4OjExMTEgKi8KKwl7UERDX09ORU5BTkQsIFBEQ19OQU5ELCBQRENfTk9SLCBEQkdfTVBEQiwgMCwgMCwgMCwgMH0sIC8qIFM4OjExMTAgKi8KKwl7UERDX05BTkQsIFBEQ19PTkVOQU5ELCBQRENfTk9SLCBEQkdfTVBEQiwgMCwgMCwgMCwgMH0sIC8qIFM4OjExMDEgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIHNkcF9ub3JfZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2RwX25vcl9yZXNvdXJjZSA9IHsKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzZHBfbm9yX2RldmljZSA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCQkucGxhdGZvcm1fZGF0YSA9ICZzZHBfbm9yX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJnNkcF9ub3JfcmVzb3VyY2UsCit9OworCitzdGF0aWMgdm9pZAorX19pbml0IGJvYXJkX25vcl9pbml0KHN0cnVjdCBmbGFzaF9wYXJ0aXRpb25zIHNkcF9ub3JfcGFydHMsIHU4IGNzKQoreworCWludCBlcnI7CisKKwlzZHBfbm9yX2RhdGEucGFydHMJPSBzZHBfbm9yX3BhcnRzLnBhcnRzOworCXNkcF9ub3JfZGF0YS5ucl9wYXJ0cwk9IHNkcF9ub3JfcGFydHMubnJfcGFydHM7CisKKwkvKiBDb25maWd1cmUgc3RhcnQgYWRkcmVzcyBhbmQgc2l6ZSBvZiBOT1IgZGV2aWNlICovCisJaWYgKG9tYXBfcmV2KCkgPj0gT01BUDM0MzBfUkVWX0VTMV8wKSB7CisJCWVyciA9IGdwbWNfY3NfcmVxdWVzdChjcywgRkxBU0hfU0laRV9TRFBWMiAtIDEsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmc2RwX25vcl9yZXNvdXJjZS5zdGFydCk7CisJCXNkcF9ub3JfcmVzb3VyY2UuZW5kID0gc2RwX25vcl9yZXNvdXJjZS5zdGFydAorCQkJCQkrIEZMQVNIX1NJWkVfU0RQVjIgLSAxOworCX0gZWxzZSB7CisJCWVyciA9IGdwbWNfY3NfcmVxdWVzdChjcywgRkxBU0hfU0laRV9TRFBWMSAtIDEsCisJCQkJKHVuc2lnbmVkIGxvbmcgKikmc2RwX25vcl9yZXNvdXJjZS5zdGFydCk7CisJCXNkcF9ub3JfcmVzb3VyY2UuZW5kID0gc2RwX25vcl9yZXNvdXJjZS5zdGFydAorCQkJCQkrIEZMQVNIX1NJWkVfU0RQVjEgLSAxOworCX0KKwlpZiAoZXJyIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgIk5PUjogQ2FuJ3QgcmVxdWVzdCBHUE1DIENTXG4iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZzZHBfbm9yX2RldmljZSkgPCAwKQorCQlwcmludGsoS0VSTl9FUlIJIlVuYWJsZSB0byByZWdpc3RlciBOT1IgZGV2aWNlXG4iKTsKK30KKworI2lmIGRlZmluZWQoQ09ORklHX01URF9PTkVOQU5EX09NQVAyKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX01URF9PTkVOQU5EX09NQVAyX01PRFVMRSkKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9vbmVuYW5kX3BsYXRmb3JtX2RhdGEgYm9hcmRfb25lbmFuZF9kYXRhID0geworCS5kbWFfY2hhbm5lbAk9IC0xLCAgIC8qIGRpc2FibGUgRE1BIGluIE9NQVAgT25lTkFORCBkcml2ZXIgKi8KK307CisKK3N0YXRpYyB2b2lkCitfX2luaXQgYm9hcmRfb25lbmFuZF9pbml0KHN0cnVjdCBmbGFzaF9wYXJ0aXRpb25zIHNkcF9vbmVuYW5kX3BhcnRzLCB1OCBjcykKK3sKKwlib2FyZF9vbmVuYW5kX2RhdGEuY3MJCT0gY3M7CisJYm9hcmRfb25lbmFuZF9kYXRhLnBhcnRzCT0gc2RwX29uZW5hbmRfcGFydHMucGFydHM7CisJYm9hcmRfb25lbmFuZF9kYXRhLm5yX3BhcnRzCT0gc2RwX29uZW5hbmRfcGFydHMubnJfcGFydHM7CisKKwlncG1jX29uZW5hbmRfaW5pdCgmYm9hcmRfb25lbmFuZF9kYXRhKTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZAorX19pbml0IGJvYXJkX29uZW5hbmRfaW5pdChzdHJ1Y3QgZmxhc2hfcGFydGl0aW9ucyBzZHBfb25lbmFuZF9wYXJ0cywgdTggY3MpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX01URF9PTkVOQU5EX09NQVAyIHx8IENPTkZJR19NVERfT05FTkFORF9PTUFQMl9NT0RVTEUgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX09NQVAyKSB8fCBcCisJCWRlZmluZWQoQ09ORklHX01URF9OQU5EX09NQVAyX01PRFVMRSkKKworLyogTm90ZSB0aGF0IGFsbCB2YWx1ZXMgaW4gdGhpcyBzdHJ1Y3QgYXJlIGluIG5hbm9zZWNvbmRzICovCitzdGF0aWMgc3RydWN0IGdwbWNfdGltaW5ncyBuYW5kX3RpbWluZ3MgPSB7CisKKwkuc3luY19jbGsgPSAwLAorCisJLmNzX29uID0gMCwKKwkuY3NfcmRfb2ZmID0gMzYsCisJLmNzX3dyX29mZiA9IDM2LAorCisJLmFkdl9vbiA9IDYsCisJLmFkdl9yZF9vZmYgPSAyNCwKKwkuYWR2X3dyX29mZiA9IDM2LAorCisJLndlX29mZiA9IDMwLAorCS5vZV9vZmYgPSA0OCwKKworCS5hY2Nlc3MgPSA1NCwKKwkucmRfY3ljbGUgPSA3MiwKKwkud3JfY3ljbGUgPSA3MiwKKworCS53cl9hY2Nlc3MgPSAzMCwKKwkud3JfZGF0YV9tdXhfYnVzID0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgc2RwX25hbmRfZGF0YSA9IHsKKwkubmFuZF9zZXR1cAk9IE5VTEwsCisJLmdwbWNfdAkJPSAmbmFuZF90aW1pbmdzLAorCS5kbWFfY2hhbm5lbAk9IC0xLAkJLyogZGlzYWJsZSBETUEgaW4gT01BUCBOQU5EIGRyaXZlciAqLworCS5kZXZfcmVhZHkJPSBOVUxMLAorCS5kZXZzaXplCT0gMCwJLyogJzAnIGZvciA4LWJpdCwgJzEnIGZvciAxNi1iaXQgZGV2aWNlICovCit9OworCitzdGF0aWMgdm9pZAorX19pbml0IGJvYXJkX25hbmRfaW5pdChzdHJ1Y3QgZmxhc2hfcGFydGl0aW9ucyBzZHBfbmFuZF9wYXJ0cywgdTggY3MpCit7CisJc2RwX25hbmRfZGF0YS5jcwkJPSBjczsKKwlzZHBfbmFuZF9kYXRhLnBhcnRzCQk9IHNkcF9uYW5kX3BhcnRzLnBhcnRzOworCXNkcF9uYW5kX2RhdGEubnJfcGFydHMJCT0gc2RwX25hbmRfcGFydHMubnJfcGFydHM7CisKKwlzZHBfbmFuZF9kYXRhLmdwbWNfY3NfYmFzZWFkZHIJPSAodm9pZCAqKShPTUFQMzRYWF9HUE1DX1ZJUlQgKworCQkJCQkJCUdQTUNfQ1MwX0JBU0UgKworCQkJCQkJCWNzICogR1BNQ19DU19TSVpFKTsKKwlzZHBfbmFuZF9kYXRhLmdwbWNfYmFzZWFkZHIJID0gKHZvaWQgKikgKE9NQVAzNFhYX0dQTUNfVklSVCk7CisKKwlncG1jX25hbmRfaW5pdCgmc2RwX25hbmRfZGF0YSk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQKK19faW5pdCBib2FyZF9uYW5kX2luaXQoc3RydWN0IGZsYXNoX3BhcnRpdGlvbnMgc2RwX25hbmRfcGFydHMsIHU4IGNzKQoreworfQorI2VuZGlmIC8qIENPTkZJR19NVERfTkFORF9PTUFQMiB8fCBDT05GSUdfTVREX05BTkRfT01BUDJfTU9EVUxFICovCisKKy8qKgorICogZ2V0X2dwbWMwX3R5cGUgLSBSZWFkcyB0aGUgRlBHQSBESVBfU1dJVENIX0lOUFVUX1JFR0lTVEVSMiB0byBnZXQKKyAqIHRoZSB2YXJpb3VzIGNzIHZhbHVlcy4KKyAqLworc3RhdGljIHU4IGdldF9ncG1jMF90eXBlKHZvaWQpCit7CisJdTggY3MgPSAwOworCXZvaWQgX19pb21lbSAqZnBnYV9tYXBfYWRkcjsKKworCWZwZ2FfbWFwX2FkZHIgPSBpb3JlbWFwKERFQlVHX0JBU0UsIDQwOTYpOworCWlmICghZnBnYV9tYXBfYWRkcikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIShfX3Jhd19yZWFkdyhmcGdhX21hcF9hZGRyICsgUkVHX0ZQR0FfUkVWKSkpCisJCS8qIHdlIGRvbnQgaGF2ZSBhbiBERUJVRyBGUEdBPz8/ICovCisJCS8qIERlcGVuZCBvbiAjZGVmaW5lcyEhIGRlZmF1bHQgdG8gc3RyYXRhIGJvb3QgcmV0dXJuIHBhcmFtICovCisJCWdvdG8gdW5tYXA7CisKKwkvKiBTOC1ESVAtT0ZGID0gMSwgUzgtRElQLU9OID0gMCAqLworCWNzID0gX19yYXdfcmVhZHcoZnBnYV9tYXBfYWRkciArIFJFR19GUEdBX0RJUF9TV0lUQ0hfSU5QVVQyKSAmIDB4ZjsKKworCS8qIEVTMi4wIFNEUCdzIG9ud2FyZHMgNCBkaXAgc3dpdGNoZXMgYXJlIHByb3ZpZGVkIGZvciBDUyAqLworCWlmIChvbWFwX3JldigpID49IE9NQVAzNDMwX1JFVl9FUzFfMCkKKwkJLyogY2hhbmdlIChTOC0xOjQ9RFMtMjowKSB0byAoUzgtNDoxPURTLTI6MCkgKi8KKwkJY3MgPSAoKGNzICYgOCkgPj4gMykgfCAoKGNzICYgNCkgPj4gMSkgfAorCQkJKChjcyAmIDIpIDw8IDEpIHwgKChjcyAmIDEpIDw8IDMpOworCWVsc2UKKwkJLyogY2hhbmdlIChTOC0xOjM9RFMtMjowKSB0byAoUzgtMzoxPURTLTI6MCkgKi8KKwkJY3MgPSAoKGNzICYgNCkgPj4gMikgfCAoY3MgJiAyKSB8ICgoY3MgJiAxKSA8PCAyKTsKK3VubWFwOgorCWlvdW5tYXAoZnBnYV9tYXBfYWRkcik7CisJcmV0dXJuIGNzOworfQorCisvKioKKyAqIHNkcDM0MzBfZmxhc2hfaW5pdCAtIElkZW50aWZ5IGRldmljZXMgY29ubmVjdGVkIHRvIEdQTUMgYW5kIHJlZ2lzdGVyLgorICoKKyAqIEByZXR1cm4gLSB2b2lkLgorICovCit2b2lkIF9faW5pdCBzZHBfZmxhc2hfaW5pdChzdHJ1Y3QgZmxhc2hfcGFydGl0aW9ucyBzZHBfcGFydGl0aW9uX2luZm9bXSkKK3sKKwl1OAkJY3MgPSAwOworCXU4CQlub3JjcyA9IEdQTUNfQ1NfTlVNICsgMTsKKwl1OAkJbmFuZGNzID0gR1BNQ19DU19OVU0gKyAxOworCXU4CQlvbmVuYW5kY3MgPSBHUE1DX0NTX05VTSArIDE7CisJdTgJCWlkeDsKKwl1bnNpZ25lZCBjaGFyCSpjb25maWdfc2VsID0gTlVMTDsKKworCS8qIFJFVklTSVQ6IElzIHRoaXMgcmV0dXJuIGNvcnJlY3QgaWR4IGZvciAyNDMwIFNEUD8KKwkgKiBmb3Igd2hpY2ggY3MgY29uZmlndXJhdGlvbiBtYXRjaGVzIGZvciAyNDMwIFNEUD8KKwkgKi8KKwlpZHggPSBnZXRfZ3BtYzBfdHlwZSgpOworCWlmIChpZHggPj0gTUFYX1NVUFBPUlRFRF9HUE1DX0NPTkZJRykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGNoaXAgc2VsZWN0OiAlZFxuIiwgX19mdW5jX18sIGNzKTsKKwkJcmV0dXJuOworCX0KKwljb25maWdfc2VsID0gKHVuc2lnbmVkIGNoYXIgKikoY2hpcF9zZWxfc2RwW2lkeF0pOworCisJd2hpbGUgKGNzIDwgR1BNQ19DU19OVU0pIHsKKwkJc3dpdGNoIChjb25maWdfc2VsW2NzXSkgeworCQljYXNlIFBEQ19OT1I6CisJCQlpZiAobm9yY3MgPiBHUE1DX0NTX05VTSkKKwkJCQlub3JjcyA9IGNzOworCQkJYnJlYWs7CisJCWNhc2UgUERDX05BTkQ6CisJCQlpZiAobmFuZGNzID4gR1BNQ19DU19OVU0pCisJCQkJbmFuZGNzID0gY3M7CisJCQlicmVhazsKKwkJY2FzZSBQRENfT05FTkFORDoKKwkJCWlmIChvbmVuYW5kY3MgPiBHUE1DX0NTX05VTSkKKwkJCQlvbmVuYW5kY3MgPSBjczsKKwkJCWJyZWFrOworCQl9OworCQljcysrOworCX0KKworCWlmIChub3JjcyA+IEdQTUNfQ1NfTlVNKQorCQlwcmludGsoS0VSTl9JTkZPICJPbmVOQU5EOiBVbmFibGUgdG8gZmluZCBjb25maWd1cmF0aW9uICIKKwkJCQkiIGluIEdQTUNcbiAiKTsKKwllbHNlCisJCWJvYXJkX25vcl9pbml0KHNkcF9wYXJ0aXRpb25faW5mb1swXSwgbm9yY3MpOworCisJaWYgKG9uZW5hbmRjcyA+IEdQTUNfQ1NfTlVNKQorCQlwcmludGsoS0VSTl9JTkZPICJPbmVOQU5EOiBVbmFibGUgdG8gZmluZCBjb25maWd1cmF0aW9uICIKKwkJCQkiIGluIEdQTUNcbiAiKTsKKwllbHNlCisJCWJvYXJkX29uZW5hbmRfaW5pdChzZHBfcGFydGl0aW9uX2luZm9bMV0sIG9uZW5hbmRjcyk7CisKKwlpZiAobmFuZGNzID4gR1BNQ19DU19OVU0pCisJCXByaW50ayhLRVJOX0lORk8gIk5BTkQ6IFVuYWJsZSB0byBmaW5kIGNvbmZpZ3VyYXRpb24gIgorCQkJCSIgaW4gR1BNQ1xuICIpOworCWVsc2UKKwkJYm9hcmRfbmFuZF9pbml0KHNkcF9wYXJ0aXRpb25faW5mb1syXSwgbmFuZGNzKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1wZXJpcGhlcmFscy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tLXBlcmlwaGVyYWxzLmMKb2xkIG1vZGUgMTAwNzU1Cm5ldyBtb2RlIDEwMDY0NAppbmRleCAxZTNkZmI2Li5jYTk1ZDhkCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1wZXJpcGhlcmFscy5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbS1wZXJpcGhlcmFscy5jCkBAIC0yNCw3ICsyNCw4IEBACiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgogCi0jaW5jbHVkZSAibW1jLXR3bDQwMzAuaCIKKyNpbmNsdWRlICJtdXguaCIKKyNpbmNsdWRlICJoc21tYy5oIgogCiAvKiBab29tMiBoYXMgUXdlcnR5IGtleWJvYXJkKi8KIHN0YXRpYyBpbnQgYm9hcmRfa2V5bWFwW10gPSB7CkBAIC0xNTAsNyArMTUxLDcgQEAKIAkuY29uc3VtZXJfc3VwcGxpZXMgICAgICA9ICZ6b29tX3ZzaW1fc3VwcGx5LAogfTsKIAotc3RhdGljIHN0cnVjdCB0d2w0MDMwX2hzbW1jX2luZm8gbW1jW10gX19pbml0ZGF0YSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyBtbWNbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLm5hbWUJCT0gImV4dGVybmFsIiwKIAkJLm1tYwkJPSAxLApAQCAtMTc1LDcgKzE3Niw3IEBACiB7CiAJLyogZ3BpbyArIDAgaXMgIm1tYzBfY2QiIChpbnB1dC9JUlEpICovCiAJbW1jWzBdLmdwaW9fY2QgPSBncGlvICsgMDsKLQl0d2w0MDMwX21tY19pbml0KG1tYyk7CisJb21hcDJfaHNtbWNfaW5pdChtbWMpOwogCiAJLyogbGluayByZWd1bGF0b3JzIHRvIE1NQyBhZGFwdGVycyAuLi4gd2UgImtub3ciIHRoZQogCSAqIHJlZ3VsYXRvcnMgd2lsbCBiZSBzZXQgdXAgb25seSAqYWZ0ZXIqIHdlIHJldHVybi4KQEAgLTI2Myw5ICsyNjQsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSBtdXNiX2JvYXJkX2RhdGEgPSB7CisJLmludGVyZmFjZV90eXBlCQk9IE1VU0JfSU5URVJGQUNFX1VMUEksCisJLm1vZGUJCQk9IE1VU0JfT1RHLAorCS5wb3dlcgkJCT0gMTAwLAorfTsKKworc3RhdGljIHZvaWQgZW5hYmxlX2JvYXJkX3dha2V1cF9zb3VyY2Uodm9pZCkKK3sKKwkvKiBUMiBpbnRlcnJ1cHQgbGluZSAoa2V5cGFkKSAqLworCW9tYXBfbXV4X2luaXRfc2lnbmFsKCJzeXNfbmlycSIsCisJCU9NQVBfV0FLRVVQX0VOIHwgT01BUF9QSU5fSU5QVVRfUFVMTFVQKTsKK30KKwogdm9pZCBfX2luaXQgem9vbV9wZXJpcGhlcmFsc19pbml0KHZvaWQpCiB7CiAJb21hcF9pMmNfaW5pdCgpOwogCW9tYXBfc2VyaWFsX2luaXQoKTsKLQl1c2JfbXVzYl9pbml0KCk7CisJdXNiX211c2JfaW5pdCgmbXVzYl9ib2FyZF9kYXRhKTsKKwllbmFibGVfYm9hcmRfd2FrZXVwX3NvdXJjZSgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMi5jCmluZGV4IGJiODdjZjcuLjlhMjZmODQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20yLmMKQEAgLTg3LDcgKzg3LDcgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3pvb20yX21hcF9pbyh2b2lkKQogewogCW9tYXAyX3NldF9nbG9iYWxzXzM0M3goKTsKLQlvbWFwMl9tYXBfY29tbW9uX2lvKCk7CisJb21hcDM0eHhfbWFwX2NvbW1vbl9pbygpOwogfQogCiBNQUNISU5FX1NUQVJUKE9NQVBfWk9PTTIsICJPTUFQIFpvb20yIGJvYXJkIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtem9vbTMuYwppbmRleCBhOWZlOTE4Li5kM2UzY2Q1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLXpvb20zLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC16b29tMy5jCkBAIC0yMCwxNCArMjAsMTUgQEAKIAogI2luY2x1ZGUgPHBsYXQvY29tbW9uLmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgorI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAKICNpbmNsdWRlICJtdXguaCIKICNpbmNsdWRlICJzZHJhbS1oeW5peC1oOG1ieDAwdTBtZXItMGVtLmgiCiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3pvb21fbWFwX2lvKHZvaWQpCiB7Ci0Jb21hcDJfc2V0X2dsb2JhbHNfMzQzeCgpOwotCW9tYXAyX21hcF9jb21tb25faW8oKTsKKwlvbWFwMl9zZXRfZ2xvYmFsc18zNnh4KCk7CisJb21hcDM0eHhfbWFwX2NvbW1vbl9pbygpOwogfQogCiBzdGF0aWMgc3RydWN0IG9tYXBfYm9hcmRfY29uZmlnX2tlcm5lbCB6b29tX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CkBAIC01MSwxMSArNTIsMjQgQEAKICNkZWZpbmUgYm9hcmRfbXV4CU5VTEwKICNlbmRpZgogCitzdGF0aWMgc3RydWN0IGVoY2lfaGNkX29tYXBfcGxhdGZvcm1fZGF0YSBlaGNpX3BkYXRhIF9faW5pdGNvbnN0ID0geworCS5wb3J0X21vZGVbMF0JCT0gRUhDSV9IQ0RfT01BUF9NT0RFX1VOS05PV04sCisJLnBvcnRfbW9kZVsxXQkJPSBFSENJX0hDRF9PTUFQX01PREVfUEhZLAorCS5wb3J0X21vZGVbMl0JCT0gRUhDSV9IQ0RfT01BUF9NT0RFX1VOS05PV04sCisJLnBoeV9yZXNldAkJPSB0cnVlLAorCS5yZXNldF9ncGlvX3BvcnRbMF0JPSAtRUlOVkFMLAorCS5yZXNldF9ncGlvX3BvcnRbMV0JPSA2NCwKKwkucmVzZXRfZ3Bpb19wb3J0WzJdCT0gLUVJTlZBTCwKK307CisKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwX3pvb21faW5pdCh2b2lkKQogewogCW9tYXAzX211eF9pbml0KGJvYXJkX211eCwgT01BUF9QQUNLQUdFX0NCUCk7CiAJem9vbV9wZXJpcGhlcmFsc19pbml0KCk7CiAJem9vbV9kZWJ1Z2JvYXJkX2luaXQoKTsKKworCW9tYXBfbXV4X2luaXRfZ3Bpbyg2NCwgT01BUF9QSU5fT1VUUFVUKTsKKwl1c2JfZWhjaV9pbml0KCZlaGNpX3BkYXRhKTsKIH0KIAogTUFDSElORV9TVEFSVChPTUFQX1pPT00zLCAiT01BUCBab29tMyBib2FyZCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X2FwbGwuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfYXBsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzZDcyNDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X2FwbGwuYwpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIE9NQVAyeHh4IEFQTEwgY2xvY2sgY29udHJvbCBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0czoKKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqIFBhdWwgV2FsbXNsZXkKKyAqCisgKiBCYXNlZCBvbiBlYXJsaWVyIHdvcmsgYnkgVHV1a2thIFRpa2thbmVuLCBUb255IExpbmRncmVuLAorICogR29yZG9uIE1jTnV0dCBhbmQgUmlkZ2VSdW4sIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjdW5kZWYgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9wcmNtLmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgImNsb2NrMnh4eC5oIgorI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCisKKy8qIENNX0NMS0VOX1BMTC5FTl97NTQsOTZ9TV9QTEwgb3B0aW9ucyAoMjRYWCkgKi8KKyNkZWZpbmUgRU5fQVBMTF9TVE9QUEVECQkJMAorI2RlZmluZSBFTl9BUExMX0xPQ0tFRAkJCTMKKworLyogQ01fQ0xLU0VMMV9QTEwuQVBMTFNfQ0xLSU4gb3B0aW9ucyAoMjRYWCkgKi8KKyNkZWZpbmUgQVBMTFNfQ0xLSU5fMTlfMk1IWgkJMAorI2RlZmluZSBBUExMU19DTEtJTl8xM01IWgkJMgorI2RlZmluZSBBUExMU19DTEtJTl8xMk1IWgkJMworCit2b2lkIF9faW9tZW0gKmNtX2lkbGVzdF9wbGw7CisKKy8qIFByaXZhdGUgZnVuY3Rpb25zICovCisKKy8qIEVuYWJsZSBhbiBBUExMIGlmIG9mZiAqLworc3RhdGljIGludCBvbWFwMl9jbGtfYXBsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrLCB1MzIgc3RhdHVzX21hc2spCit7CisJdTMyIGN2YWwsIGFwbGxfbWFzazsKKworCWFwbGxfbWFzayA9IEVOX0FQTExfTE9DS0VEIDw8IGNsay0+ZW5hYmxlX2JpdDsKKworCWN2YWwgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLRU4pOworCisJaWYgKChjdmFsICYgYXBsbF9tYXNrKSA9PSBhcGxsX21hc2spCisJCXJldHVybiAwOyAgIC8qIGFwbGwgYWxyZWFkeSBlbmFibGVkICovCisKKwljdmFsICY9IH5hcGxsX21hc2s7CisJY3ZhbCB8PSBhcGxsX21hc2s7CisJY21fd3JpdGVfbW9kX3JlZyhjdmFsLCBQTExfTU9ELCBDTV9DTEtFTik7CisKKwlvbWFwMl9jbV93YWl0X2lkbGVzdChjbV9pZGxlc3RfcGxsLCBzdGF0dXNfbWFzaywKKwkJCSAgICAgT01BUDI0WFhfQ01fSURMRVNUX1ZBTCwgY2xrLT5uYW1lKTsKKworCS8qCisJICogUkVWSVNJVDogU2hvdWxkIHdlIHJldHVybiBhbiBlcnJvciBjb2RlIGlmIG9tYXAyX3dhaXRfY2xvY2tfcmVhZHkoKQorCSAqIGZhaWxzPworCSAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXAyX2Nsa19hcGxsOTZfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gb21hcDJfY2xrX2FwbGxfZW5hYmxlKGNsaywgT01BUDI0WFhfU1RfOTZNX0FQTEwpOworfQorCitzdGF0aWMgaW50IG9tYXAyX2Nsa19hcGxsNTRfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gb21hcDJfY2xrX2FwbGxfZW5hYmxlKGNsaywgT01BUDI0WFhfU1RfNTRNX0FQTEwpOworfQorCisvKiBTdG9wIEFQTEwgKi8KK3N0YXRpYyB2b2lkIG9tYXAyX2Nsa19hcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBjdmFsOworCisJY3ZhbCA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtFTik7CisJY3ZhbCAmPSB+KEVOX0FQTExfTE9DS0VEIDw8IGNsay0+ZW5hYmxlX2JpdCk7CisJY21fd3JpdGVfbW9kX3JlZyhjdmFsLCBQTExfTU9ELCBDTV9DTEtFTik7Cit9CisKKy8qIFB1YmxpYyBkYXRhICovCisKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2FwbGw5NiA9IHsKKwkuZW5hYmxlCQk9IG9tYXAyX2Nsa19hcGxsOTZfZW5hYmxlLAorCS5kaXNhYmxlCT0gb21hcDJfY2xrX2FwbGxfZGlzYWJsZSwKK307CisKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2FwbGw1NCA9IHsKKwkuZW5hYmxlCQk9IG9tYXAyX2Nsa19hcGxsNTRfZW5hYmxlLAorCS5kaXNhYmxlCT0gb21hcDJfY2xrX2FwbGxfZGlzYWJsZSwKK307CisKKy8qIFB1YmxpYyBmdW5jdGlvbnMgKi8KKwordTMyIG9tYXAyeHh4X2dldF9hcGxsX2Nsa2luKHZvaWQpCit7CisJdTMyIGFwbGxzLCBzcmF0ZSA9IDA7CisKKwlhcGxscyA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtTRUwxKTsKKwlhcGxscyAmPSBPTUFQMjRYWF9BUExMU19DTEtJTl9NQVNLOworCWFwbGxzID4+PSBPTUFQMjRYWF9BUExMU19DTEtJTl9TSElGVDsKKworCWlmIChhcGxscyA9PSBBUExMU19DTEtJTl8xOV8yTUhaKQorCQlzcmF0ZSA9IDE5MjAwMDAwOworCWVsc2UgaWYgKGFwbGxzID09IEFQTExTX0NMS0lOXzEzTUhaKQorCQlzcmF0ZSA9IDEzMDAwMDAwOworCWVsc2UgaWYgKGFwbGxzID09IEFQTExTX0NMS0lOXzEyTUhaKQorCQlzcmF0ZSA9IDEyMDAwMDAwOworCisJcmV0dXJuIHNyYXRlOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X2RwbGxjb3JlLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X2RwbGxjb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE5MDQ4NDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X2RwbGxjb3JlLmMKQEAgLTAsMCArMSwxNzMgQEAKKy8qCisgKiBEUExMICsgQ09SRV9DTEsgY29tcG9zaXRlIGNsb2NrIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3RzOgorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICogUGF1bCBXYWxtc2xleQorICoKKyAqIEJhc2VkIG9uIGVhcmxpZXIgd29yayBieSBUdXVra2EgVGlra2FuZW4sIFRvbnkgTGluZGdyZW4sCisgKiBHb3Jkb24gTWNOdXR0IGFuZCBSaWRnZVJ1biwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogWFhYIFRoZSBEUExMIGFuZCBDT1JFIGNsb2NrcyBzaG91bGQgYmUgc3BsaXQgaW50byB0d28gc2VwYXJhdGUgY2xvY2sKKyAqIHR5cGVzLgorICovCisjdW5kZWYgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L3NyYW0uaD4KKyNpbmNsdWRlIDxwbGF0L3NkcmMuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY2xvY2syeHh4LmgiCisjaW5jbHVkZSAib3BwMnh4eC5oIgorI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCisKKy8qICNkZWZpbmUgRE9XTl9WQVJJQUJMRV9EUExMIDEgKi8JCS8qIEV4cGVyaW1lbnRhbCAqLworCisvKioKKyAqIG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlIC0gcmV0dXJuIHRoZSBDT1JFX0NMSyByYXRlCisgKiBAY2xrOiBwb2ludGVyIHRvIHRoZSBjb21iaW5lZCBkcGxsX2NrICsgY29yZV9jayAoY3VycmVudGx5ICJkcGxsX2NrIikKKyAqCisgKiBSZXR1cm5zIHRoZSBDT1JFX0NMSyByYXRlLiAgQ09SRV9DTEsgY2FuIGhhdmUgb25lIG9mIHRocmVlIHJhdGUKKyAqIHNvdXJjZXMgb24gT01BUDJ4eHg6IHRoZSBEUExMIENMS09VVCByYXRlLCBEUExMIENMS09VVFgyLCBvciAzMktIegorICogKHRoZSBsYXR0ZXIgaXMgdW51c3VhbCkuICBUaGlzIGN1cnJlbnRseSBzaG91bGQgYmUgY2FsbGVkIHdpdGgKKyAqIHN0cnVjdCBjbGsgKmRwbGxfY2ssIHdoaWNoIGlzIGEgY29tcG9zaXRlIGNsb2NrIG9mIGRwbGxfY2sgYW5kCisgKiBjb3JlX2NrLgorICovCit1bnNpZ25lZCBsb25nIG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlsb25nIGxvbmcgY29yZV9jbGs7CisJdTMyIHY7CisKKwljb3JlX2NsayA9IG9tYXAyX2dldF9kcGxsX3JhdGUoY2xrKTsKKworCXYgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMik7CisJdiAmPSBPTUFQMjRYWF9DT1JFX0NMS19TUkNfTUFTSzsKKworCWlmICh2ID09IENPUkVfQ0xLX1NSQ18zMkspCisJCWNvcmVfY2xrID0gMzI3Njg7CisJZWxzZQorCQljb3JlX2NsayAqPSB2OworCisJcmV0dXJuIGNvcmVfY2xrOworfQorCisvKgorICogVXNlcyB0aGUgY3VycmVudCBwcmNtIHNldCB0byB0ZWxsIGlmIGEgcmF0ZSBpcyB2YWxpZC4KKyAqIFlvdSBjYW4gZ28gc2xvd2VyLCBidXQgbm90IGZhc3RlciB3aXRoaW4gYSBnaXZlbiByYXRlIHNldC4KKyAqLworc3RhdGljIGxvbmcgb21hcDJfZHBsbGNvcmVfcm91bmRfcmF0ZSh1bnNpZ25lZCBsb25nIHRhcmdldF9yYXRlKQoreworCXUzMiBoaWdoLCBsb3csIGNvcmVfY2xrX3NyYzsKKworCWNvcmVfY2xrX3NyYyA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtTRUwyKTsKKwljb3JlX2Nsa19zcmMgJj0gT01BUDI0WFhfQ09SRV9DTEtfU1JDX01BU0s7CisKKwlpZiAoY29yZV9jbGtfc3JjID09IENPUkVfQ0xLX1NSQ19EUExMKSB7CS8qIERQTEwgY2xvY2tvdXQgKi8KKwkJaGlnaCA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQgKiAyOworCQlsb3cgPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkOworCX0gZWxzZSB7CQkJCS8qIERQTEwgY2xvY2tvdXQgeCAyICovCisJCWhpZ2ggPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkOworCQlsb3cgPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkIC8gMjsKKwl9CisKKyNpZmRlZiBET1dOX1ZBUklBQkxFX0RQTEwKKwlpZiAodGFyZ2V0X3JhdGUgPiBoaWdoKQorCQlyZXR1cm4gaGlnaDsKKwllbHNlCisJCXJldHVybiB0YXJnZXRfcmF0ZTsKKyNlbHNlCisJaWYgKHRhcmdldF9yYXRlID4gbG93KQorCQlyZXR1cm4gaGlnaDsKKwllbHNlCisJCXJldHVybiBsb3c7CisjZW5kaWYKKworfQorCit1bnNpZ25lZCBsb25nIG9tYXAyX2RwbGxjb3JlX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKGNsayk7Cit9CisKK2ludCBvbWFwMl9yZXByb2dyYW1fZHBsbGNvcmUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIGN1cl9yYXRlLCBsb3csIG11bHQsIGRpdiwgdmFsaWRfcmF0ZSwgZG9uZV9yYXRlOworCXUzMiBieXBhc3MgPSAwOworCXN0cnVjdCBwcmNtX2NvbmZpZyB0bXBzZXQ7CisJY29uc3Qgc3RydWN0IGRwbGxfZGF0YSAqZGQ7CisKKwljdXJfcmF0ZSA9IG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKGRjbGspOworCW11bHQgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMik7CisJbXVsdCAmPSBPTUFQMjRYWF9DT1JFX0NMS19TUkNfTUFTSzsKKworCWlmICgocmF0ZSA9PSAoY3VyX3JhdGUgLyAyKSkgJiYgKG11bHQgPT0gMikpIHsKKwkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oQ09SRV9DTEtfU1JDX0RQTEwsIDEpOworCX0gZWxzZSBpZiAoKHJhdGUgPT0gKGN1cl9yYXRlICogMikpICYmIChtdWx0ID09IDEpKSB7CisJCW9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKENPUkVfQ0xLX1NSQ19EUExMX1gyLCAxKTsKKwl9IGVsc2UgaWYgKHJhdGUgIT0gY3VyX3JhdGUpIHsKKwkJdmFsaWRfcmF0ZSA9IG9tYXAyX2RwbGxjb3JlX3JvdW5kX3JhdGUocmF0ZSk7CisJCWlmICh2YWxpZF9yYXRlICE9IHJhdGUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpZiAobXVsdCA9PSAxKQorCQkJbG93ID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZDsKKwkJZWxzZQorCQkJbG93ID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZCAvIDI7CisKKwkJZGQgPSBjbGstPmRwbGxfZGF0YTsKKwkJaWYgKCFkZCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCXRtcHNldC5jbV9jbGtzZWwxX3BsbCA9IF9fcmF3X3JlYWRsKGRkLT5tdWx0X2RpdjFfcmVnKTsKKwkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsICY9IH4oZGQtPm11bHRfbWFzayB8CisJCQkJCSAgIGRkLT5kaXYxX21hc2spOworCQlkaXYgPSAoKGN1cnJfcHJjbV9zZXQtPnh0YWxfc3BlZWQgLyAxMDAwMDAwKSAtIDEpOworCQl0bXBzZXQuY21fY2xrc2VsMl9wbGwgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMik7CisJCXRtcHNldC5jbV9jbGtzZWwyX3BsbCAmPSB+T01BUDI0WFhfQ09SRV9DTEtfU1JDX01BU0s7CisJCWlmIChyYXRlID4gbG93KSB7CisJCQl0bXBzZXQuY21fY2xrc2VsMl9wbGwgfD0gQ09SRV9DTEtfU1JDX0RQTExfWDI7CisJCQltdWx0ID0gKChyYXRlIC8gMikgLyAxMDAwMDAwKTsKKwkJCWRvbmVfcmF0ZSA9IENPUkVfQ0xLX1NSQ19EUExMX1gyOworCQl9IGVsc2UgeworCQkJdG1wc2V0LmNtX2Nsa3NlbDJfcGxsIHw9IENPUkVfQ0xLX1NSQ19EUExMOworCQkJbXVsdCA9IChyYXRlIC8gMTAwMDAwMCk7CisJCQlkb25lX3JhdGUgPSBDT1JFX0NMS19TUkNfRFBMTDsKKwkJfQorCQl0bXBzZXQuY21fY2xrc2VsMV9wbGwgfD0gKGRpdiA8PCBfX2ZmcyhkZC0+bXVsdF9tYXNrKSk7CisJCXRtcHNldC5jbV9jbGtzZWwxX3BsbCB8PSAobXVsdCA8PCBfX2ZmcyhkZC0+ZGl2MV9tYXNrKSk7CisKKwkJLyogV29yc3QgY2FzZSAqLworCQl0bXBzZXQuYmFzZV9zZHJjX3JmciA9IFNEUkNfUkZSX0NUUkxfQllQQVNTOworCisJCWlmIChyYXRlID09IGN1cnJfcHJjbV9zZXQtPnh0YWxfc3BlZWQpCS8qIElmIGFza2luZyBmb3IgMS0xICovCisJCQlieXBhc3MgPSAxOworCisJCS8qIEZvciBvbWFwMnh4eF9zZHJjX2luaXRfcGFyYW1zKCkgKi8KKwkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOworCisJCS8qIEZvcmNlIGRsbCBsb2NrIG1vZGUgKi8KKwkJb21hcDJfc2V0X3ByY20odG1wc2V0LmNtX2Nsa3NlbDFfcGxsLCB0bXBzZXQuYmFzZV9zZHJjX3JmciwKKwkJCSAgICAgICBieXBhc3MpOworCisJCS8qIEVycmF0YTogcmV0IGRsbCBlbnRyeSBzdGF0ZSAqLworCQlvbWFwMnh4eF9zZHJjX2luaXRfcGFyYW1zKG9tYXAyeHh4X3NkcmNfZGxsX2lzX3VubG9ja2VkKCkpOworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShkb25lX3JhdGUsIDApOworCX0KKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X29zYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9vc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTY3YmU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9vc2MuYwpAQCAtMCwwICsxLDYyIEBACisvKgorICogT01BUDJ4eHggb3NjX2Nsay1zcGVjaWZpYyBjbG9jayBjb2RlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdHM6CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogQmFzZWQgb24gZWFybGllciB3b3JrIGJ5IFR1dWtrYSBUaWtrYW5lbiwgVG9ueSBMaW5kZ3JlbiwKKyAqIEdvcmRvbiBNY051dHQgYW5kIFJpZGdlUnVuLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI3VuZGVmIERFQlVHCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgImNsb2NrMnh4eC5oIgorI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKKworc3RhdGljIGludCBvbWFwMl9lbmFibGVfb3NjX2NrKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcGNjOworCisJcGNjID0gX19yYXdfcmVhZGwocHJjbV9jbGtzcmNfY3RybCk7CisKKwlfX3Jhd193cml0ZWwocGNjICYgfk9NQVBfQVVUT0VYVENMS01PREVfTUFTSywgcHJjbV9jbGtzcmNfY3RybCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb21hcDJfZGlzYWJsZV9vc2NfY2soc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBwY2M7CisKKwlwY2MgPSBfX3Jhd19yZWFkbChwcmNtX2Nsa3NyY19jdHJsKTsKKworCV9fcmF3X3dyaXRlbChwY2MgfCBPTUFQX0FVVE9FWFRDTEtNT0RFX01BU0ssIHByY21fY2xrc3JjX2N0cmwpOworfQorCitjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vc2NjayA9IHsKKwkuZW5hYmxlCQk9IG9tYXAyX2VuYWJsZV9vc2NfY2ssCisJLmRpc2FibGUJPSBvbWFwMl9kaXNhYmxlX29zY19jaywKK307CisKK3Vuc2lnbmVkIGxvbmcgb21hcDJfb3NjX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBvbWFwMnh4eF9nZXRfYXBsbF9jbGtpbigpICogb21hcDJ4eHhfZ2V0X3N5c2Nsa2RpdigpOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QyeHh4X3N5cy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9zeXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjJiNWE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF9zeXMuYwpAQCAtMCwwICsxLDUwIEBACisvKgorICogT01BUDJ4eHggc3lzX2Nsay1zcGVjaWZpYyBjbG9jayBjb2RlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdHM6CisgKiBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogQmFzZWQgb24gZWFybGllciB3b3JrIGJ5IFR1dWtrYSBUaWtrYW5lbiwgVG9ueSBMaW5kZ3JlbiwKKyAqIEdvcmRvbiBNY051dHQgYW5kIFJpZGdlUnVuLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI3VuZGVmIERFQlVHCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgImNsb2NrMnh4eC5oIgorI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKKwordm9pZCBfX2lvbWVtICpwcmNtX2Nsa3NyY19jdHJsOworCit1MzIgb21hcDJ4eHhfZ2V0X3N5c2Nsa2Rpdih2b2lkKQoreworCXUzMiBkaXY7CisKKwlkaXYgPSBfX3Jhd19yZWFkbChwcmNtX2Nsa3NyY19jdHJsKTsKKwlkaXYgJj0gT01BUF9TWVNDTEtESVZfTUFTSzsKKwlkaXYgPj49IE9NQVBfU1lTQ0xLRElWX1NISUZUOworCisJcmV0dXJuIGRpdjsKK30KKwordW5zaWduZWQgbG9uZyBvbWFwMnh4eF9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gb21hcDJ4eHhfZ2V0X3N5c2Nsa2RpdigpOworfQorCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0Mnh4eF92aXJ0X3ByY21fc2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IxZWFjNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xrdDJ4eHhfdmlydF9wcmNtX3NldC5jCkBAIC0wLDAgKzEsMjU0IEBACisvKgorICogT01BUDJ4eHggRFZGUyB2aXJ0dWFsIGNsb2NrIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3RzOgorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICogUGF1bCBXYWxtc2xleQorICoKKyAqIEJhc2VkIG9uIGVhcmxpZXIgd29yayBieSBUdXVra2EgVGlra2FuZW4sIFRvbnkgTGluZGdyZW4sCisgKiBHb3Jkb24gTWNOdXR0IGFuZCBSaWRnZVJ1biwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogWFhYIFNvbWUgb2YgdGhpcyBjb2RlIHNob3VsZCBiZSByZXBsYWNlYWJsZSBieSB0aGUgdXBjb21pbmcgT1BQIGxheWVyCisgKiBjb2RlLiAgSG93ZXZlciwgc29tZSBub3Rpb24gb2YgInJhdGUgc2V0IiBpcyBwcm9iYWJseSBzdGlsbCBuZWNlc3NhcnkKKyAqIGZvciBPTUFQMnh4eCBhdCBsZWFzdC4gIFJhdGUgc2V0cyBzaG91bGQgYmUgZ2VuZXJhbGl6ZWQgc28gdGhleSBjYW4gYmUKKyAqIHVzZWQgZm9yIGFueSBPTUFQIGNoaXAsIG5vdCBqdXN0IE9NQVAyeHh4LiAgSW4gcGFydGljdWxhciwgUmljaGFyZCBXb29kcnVmZgorICogaGFzIGluIHRoZSBwYXN0IGV4cHJlc3NlZCBhIHByZWZlcmVuY2UgdG8gdXNlIHJhdGUgc2V0cyBmb3IgT1BQIGNoYW5nZXMsCisgKiByYXRoZXIgdGhhbiBkeW5hbWljYWxseSByZWNhbGN1bGF0aW5nIHRoZSBjbG9jayB0cmVlLCBzbyBpZiBzb21lb25lIHdhbnRzCisgKiB0aGlzIGJhZGx5IGVub3VnaCB0byB3cml0ZSB0aGUgY29kZSB0byBoYW5kbGUgaXQsIHdlIHNob3VsZCBzdXBwb3J0IGl0CisgKiBhcyBhbiBvcHRpb24uCisgKi8KKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L3NyYW0uaD4KKyNpbmNsdWRlIDxwbGF0L3NkcmMuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY2xvY2syeHh4LmgiCisjaW5jbHVkZSAib3BwMnh4eC5oIgorI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCisKK2NvbnN0IHN0cnVjdCBwcmNtX2NvbmZpZyAqY3Vycl9wcmNtX3NldDsKK2NvbnN0IHN0cnVjdCBwcmNtX2NvbmZpZyAqcmF0ZV90YWJsZTsKKworLyoqCisgKiBvbWFwMl90YWJsZV9tcHVfcmVjYWxjIC0ganVzdCByZXR1cm4gdGhlIE1QVSBzcGVlZAorICogQGNsazogdmlydF9wcmNtX3NldCBzdHJ1Y3QgY2xrCisgKgorICogU2V0IHZpcnRfcHJjbV9zZXQncyByYXRlIHRvIHRoZSBtcHVfc3BlZWQgZmllbGQgb2YgdGhlIGN1cnJlbnQgUFJDTSBzZXQuCisgKi8KK3Vuc2lnbmVkIGxvbmcgb21hcDJfdGFibGVfbXB1X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGN1cnJfcHJjbV9zZXQtPm1wdV9zcGVlZDsKK30KKworLyoKKyAqIExvb2sgZm9yIGEgcmF0ZSBlcXVhbCBvciBsZXNzIHRoYW4gdGhlIHRhcmdldCByYXRlIGdpdmVuIGEgY29uZmlndXJhdGlvbiBzZXQuCisgKgorICogV2hhdCdzIG5vdCBlbnRpcmVseSBjbGVhciBpcyAid2hpY2giIGZpZWxkIHJlcHJlc2VudHMgdGhlIGtleSBmaWVsZC4KKyAqIFNvbWUgbWlnaHQgYXJndWUgTDMtRERSLCBvdGhlcnMgQVJNLCBvdGhlcnMgSVZBLiBUaGlzIGNvZGUgaXMgc2ltcGxlIGFuZAorICoganVzdCB1c2VzIHRoZSBBUk0gcmF0ZXMuCisgKi8KK2xvbmcgb21hcDJfcm91bmRfdG9fdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwljb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKnB0cjsKKwlsb25nIGhpZ2hlc3RfcmF0ZTsKKwlsb25nIHN5c19ja19yYXRlOworCisJc3lzX2NrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoc2Nsayk7CisKKwloaWdoZXN0X3JhdGUgPSAtRUlOVkFMOworCisJZm9yIChwdHIgPSByYXRlX3RhYmxlOyBwdHItPm1wdV9zcGVlZDsgcHRyKyspIHsKKwkJaWYgKCEocHRyLT5mbGFncyAmIGNwdV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHRyLT54dGFsX3NwZWVkICE9IHN5c19ja19yYXRlKQorCQkJY29udGludWU7CisKKwkJaGlnaGVzdF9yYXRlID0gcHRyLT5tcHVfc3BlZWQ7CisKKwkJLyogQ2FuIGNoZWNrIG9ubHkgYWZ0ZXIgeHRhbCBmcmVxdWVuY3kgY2hlY2sgKi8KKwkJaWYgKHB0ci0+bXB1X3NwZWVkIDw9IHJhdGUpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGhpZ2hlc3RfcmF0ZTsKK30KKworLyogU2V0cyBiYXNpYyBjbG9ja3MgYmFzZWQgb24gdGhlIHNwZWNpZmllZCByYXRlICovCitpbnQgb21hcDJfc2VsZWN0X3RhYmxlX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIGN1cl9yYXRlLCBkb25lX3JhdGUsIGJ5cGFzcyA9IDAsIHRtcDsKKwljb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207CisJdW5zaWduZWQgbG9uZyBmb3VuZF9zcGVlZCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlsb25nIHN5c19ja19yYXRlOworCisJc3lzX2NrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoc2Nsayk7CisKKwlmb3IgKHByY20gPSByYXRlX3RhYmxlOyBwcmNtLT5tcHVfc3BlZWQ7IHByY20rKykgeworCQlpZiAoIShwcmNtLT5mbGFncyAmIGNwdV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwcmNtLT54dGFsX3NwZWVkICE9IHN5c19ja19yYXRlKQorCQkJY29udGludWU7CisKKwkJaWYgKHByY20tPm1wdV9zcGVlZCA8PSByYXRlKSB7CisJCQlmb3VuZF9zcGVlZCA9IHByY20tPm1wdV9zcGVlZDsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFmb3VuZF9zcGVlZCkgeworCQlwcmludGsoS0VSTl9JTkZPICJDb3VsZCBub3Qgc2V0IE1QVSByYXRlIHRvICVsdU1IelxuIiwKKwkJICAgICAgIHJhdGUgLyAxMDAwMDAwKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY3Vycl9wcmNtX3NldCA9IHByY207CisJY3VyX3JhdGUgPSBvbWFwMnh4eF9jbGtfZ2V0X2NvcmVfcmF0ZShkY2xrKTsKKworCWlmIChwcmNtLT5kcGxsX3NwZWVkID09IGN1cl9yYXRlIC8gMikgeworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTCwgMSk7CisJfSBlbHNlIGlmIChwcmNtLT5kcGxsX3NwZWVkID09IGN1cl9yYXRlICogMikgeworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7CisJfSBlbHNlIGlmIChwcmNtLT5kcGxsX3NwZWVkICE9IGN1cl9yYXRlKSB7CisJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCQlpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBwcmNtLT54dGFsX3NwZWVkKQorCQkJYnlwYXNzID0gMTsKKworCQlpZiAoKHByY20tPmNtX2Nsa3NlbDJfcGxsICYgT01BUDI0WFhfQ09SRV9DTEtfU1JDX01BU0spID09CisJCSAgICBDT1JFX0NMS19TUkNfRFBMTF9YMikKKwkJCWRvbmVfcmF0ZSA9IENPUkVfQ0xLX1NSQ19EUExMX1gyOworCQllbHNlCisJCQlkb25lX3JhdGUgPSBDT1JFX0NMS19TUkNfRFBMTDsKKworCQkvKiBNUFUgZGl2aWRlciAqLworCQljbV93cml0ZV9tb2RfcmVnKHByY20tPmNtX2Nsa3NlbF9tcHUsIE1QVV9NT0QsIENNX0NMS1NFTCk7CisKKwkJLyogZHNwICsgaXZhMSBkaXYoMjQyMCksIGl2YTIuMSgyNDMwKSAqLworCQljbV93cml0ZV9tb2RfcmVnKHByY20tPmNtX2Nsa3NlbF9kc3AsCisJCQkJIE9NQVAyNFhYX0RTUF9NT0QsIENNX0NMS1NFTCk7CisKKwkJY21fd3JpdGVfbW9kX3JlZyhwcmNtLT5jbV9jbGtzZWxfZ2Z4LCBHRlhfTU9ELCBDTV9DTEtTRUwpOworCisJCS8qIE1ham9yIHN1YnN5c3RlbSBkaXZpZGVycyAqLworCQl0bXAgPSBjbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0NMS1NFTDEpICYgT01BUDI0WFhfQ0xLU0VMX0RTUzJfTUFTSzsKKwkJY21fd3JpdGVfbW9kX3JlZyhwcmNtLT5jbV9jbGtzZWwxX2NvcmUgfCB0bXAsIENPUkVfTU9ELAorCQkJCSBDTV9DTEtTRUwxKTsKKworCQlpZiAoY3B1X2lzX29tYXAyNDMwKCkpCisJCQljbV93cml0ZV9tb2RfcmVnKHByY20tPmNtX2Nsa3NlbF9tZG0sCisJCQkJCSBPTUFQMjQzMF9NRE1fTU9ELCBDTV9DTEtTRUwpOworCisJCS8qIHgyIHRvIGVudGVyIG9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXMoKSAqLworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7CisKKwkJb21hcDJfc2V0X3ByY20ocHJjbS0+Y21fY2xrc2VsMV9wbGwsIHByY20tPmJhc2Vfc2RyY19yZnIsCisJCQkgICAgICAgYnlwYXNzKTsKKworCQlvbWFwMnh4eF9zZHJjX2luaXRfcGFyYW1zKG9tYXAyeHh4X3NkcmNfZGxsX2lzX3VubG9ja2VkKCkpOworCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShkb25lX3JhdGUsIDApOworCisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmIENPTkZJR19DUFVfRlJFUQorLyoKKyAqIFdhbGsgUFJDTSByYXRlIHRhYmxlIGFuZCBmaWxsb3V0IGNwdWZyZXEgZnJlcV90YWJsZQorICogWFhYIFRoaXMgc2hvdWxkIGJlIHJlcGxhY2VkIGJ5IGFuIE9QUCBsYXllciBpbiB0aGUgbmVhciBmdXR1cmUKKyAqLworc3RhdGljIHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqZnJlcV90YWJsZTsKKwordm9pZCBvbWFwMl9jbGtfaW5pdF9jcHVmcmVxX3RhYmxlKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqKnRhYmxlKQoreworCWNvbnN0IHN0cnVjdCBwcmNtX2NvbmZpZyAqcHJjbTsKKwlsb25nIHN5c19ja19yYXRlOworCWludCBpID0gMDsKKwlpbnQgdGJsX3N6ID0gMDsKKworCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCisJCXJldHVybjsKKworCXN5c19ja19yYXRlID0gY2xrX2dldF9yYXRlKHNjbGspOworCisJZm9yIChwcmNtID0gcmF0ZV90YWJsZTsgcHJjbS0+bXB1X3NwZWVkOyBwcmNtKyspIHsKKwkJaWYgKCEocHJjbS0+ZmxhZ3MgJiBjcHVfbWFzaykpCisJCQljb250aW51ZTsKKwkJaWYgKHByY20tPnh0YWxfc3BlZWQgIT0gc3lzX2NrX3JhdGUpCisJCQljb250aW51ZTsKKworCQkvKiBkb24ndCBwdXQgYnlwYXNzIHJhdGVzIGluIHRhYmxlICovCisJCWlmIChwcmNtLT5kcGxsX3NwZWVkID09IHByY20tPnh0YWxfc3BlZWQpCisJCQljb250aW51ZTsKKworCQl0Ymxfc3orKzsKKwl9CisKKwkvKgorCSAqIFhYWCBFbnN1cmUgdGhhdCB3ZSdyZSBkb2luZyB3aGF0IENQVUZyZXEgZXhwZWN0cyBmb3IgdGhpcyBlcnJvcgorCSAqIGNhc2UgYW5kIHRoZSBmb2xsb3dpbmcgb25lCisJICovCisJaWYgKHRibF9zeiA9PSAwKSB7CisJCXByX3dhcm5pbmcoIiVzOiBubyBtYXRjaGluZyBlbnRyaWVzIGluIHJhdGVfdGFibGVcbiIsCisJCQkgICBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBJbmNsdWRlIHRoZSBDUFVGUkVRX1RBQkxFX0VORCB0ZXJtaW5hdG9yIGVudHJ5ICovCisJdGJsX3N6Kys7CisKKwlmcmVxX3RhYmxlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlKSAqIHRibF9zeiwKKwkJCSAgICAgR0ZQX0FUT01JQyk7CisJaWYgKCFmcmVxX3RhYmxlKSB7CisJCXByX2VycigiJXM6IGNvdWxkIG5vdCBremFsbG9jIGZyZXF1ZW5jeSB0YWJsZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJZm9yIChwcmNtID0gcmF0ZV90YWJsZTsgcHJjbS0+bXB1X3NwZWVkOyBwcmNtKyspIHsKKwkJaWYgKCEocHJjbS0+ZmxhZ3MgJiBjcHVfbWFzaykpCisJCQljb250aW51ZTsKKwkJaWYgKHByY20tPnh0YWxfc3BlZWQgIT0gc3lzX2NrX3JhdGUpCisJCQljb250aW51ZTsKKworCQkvKiBkb24ndCBwdXQgYnlwYXNzIHJhdGVzIGluIHRhYmxlICovCisJCWlmIChwcmNtLT5kcGxsX3NwZWVkID09IHByY20tPnh0YWxfc3BlZWQpCisJCQljb250aW51ZTsKKworCQlmcmVxX3RhYmxlW2ldLmluZGV4ID0gaTsKKwkJZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgPSBwcmNtLT5tcHVfc3BlZWQgLyAxMDAwOworCQlpKys7CisJfQorCisJZnJlcV90YWJsZVtpXS5pbmRleCA9IGk7CisJZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgPSBDUFVGUkVRX1RBQkxFX0VORDsKKworCSp0YWJsZSA9ICZmcmVxX3RhYmxlWzBdOworfQorCit2b2lkIG9tYXAyX2Nsa19leGl0X2NwdWZyZXFfdGFibGUoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICoqdGFibGUpCit7CisJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkKKwkJcmV0dXJuOworCisJa2ZyZWUoZnJlcV90YWJsZSk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0MzR4eF9kcGxsM20yLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3QzNHh4X2RwbGwzbTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmIxZTM3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0MzR4eF9kcGxsM20yLmMKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBPTUFQMzR4eCBNMiBkaXZpZGVyIGNsb2NrIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBQYXVsIFdhbG1zbGV5CisgKiBKb3VuaSBIw7ZnYW5kZXIKKyAqCisgKiBQYXJ0cyBvZiB0aGlzIGNvZGUgYXJlIGJhc2VkIG9uIGNvZGUgd3JpdHRlbiBieQorICogUmljaGFyZCBXb29kcnVmZiwgVG9ueSBMaW5kZ3JlbiwgVHV1a2thIFRpa2thbmVuLCBLYXJ0aGlrIERhc3UKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjdW5kZWYgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L3NyYW0uaD4KKyNpbmNsdWRlIDxwbGF0L3NkcmMuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY2xvY2szeHh4LmgiCisjaW5jbHVkZSAiY2xvY2szNHh4LmgiCisjaW5jbHVkZSAic2RyYy5oIgorCisjZGVmaW5lIENZQ0xFU19QRVJfTUhaCQkJMTAwMDAwMAorCisvKgorICogQ09SRSBEUExMIChEUExMMykgTTIgZGl2aWRlciByYXRlIHByb2dyYW1taW5nIGZ1bmN0aW9ucworICoKKyAqIFRoZXNlIGNhbGwgaW50byBTUkFNIGNvZGUgdG8gZG8gdGhlIGFjdHVhbCBDTSB3cml0ZXMsIHNpbmNlIHRoZSBTRFJBTQorICogaXMgY2xvY2tlZCBmcm9tIERQTEwzLgorICovCisKKy8qKgorICogb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlIC0gc2V0IENPUkUgRFBMTCBNMiBkaXZpZGVyCisgKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgRFBMTCB0byBzZXQKKyAqIEByYXRlOiByb3VuZGVkIHRhcmdldCByYXRlCisgKgorICogUHJvZ3JhbSB0aGUgRFBMTCBNMiBkaXZpZGVyIHdpdGggdGhlIHJvdW5kZWQgdGFyZ2V0IHJhdGUuICBSZXR1cm5zCisgKiAtRUlOVkFMIHVwb24gZXJyb3IsIG9yIDAgdXBvbiBzdWNjZXNzLgorICovCitpbnQgb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiBuZXdfZGl2ID0gMDsKKwl1MzIgdW5sb2NrX2RsbCA9IDA7CisJdTMyIGM7CisJdW5zaWduZWQgbG9uZyB2YWxpZHJhdGUsIHNkcmNyYXRlLCBfbXB1cmF0ZTsKKwlzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqc2RyY19jczA7CisJc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNkcmNfY3MxOworCWludCByZXQ7CisKKwlpZiAoIWNsayB8fCAhcmF0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2YWxpZHJhdGUgPSBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZV9kaXYoY2xrLCByYXRlLCAmbmV3X2Rpdik7CisJaWYgKHZhbGlkcmF0ZSAhPSByYXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNkcmNyYXRlID0gc2RyY19pY2tfcC0+cmF0ZTsKKwlpZiAocmF0ZSA+IGNsay0+cmF0ZSkKKwkJc2RyY3JhdGUgPDw9ICgocmF0ZSAvIGNsay0+cmF0ZSkgPj4gMSk7CisJZWxzZQorCQlzZHJjcmF0ZSA+Pj0gKChjbGstPnJhdGUgLyByYXRlKSA+PiAxKTsKKworCXJldCA9IG9tYXAyX3NkcmNfZ2V0X3BhcmFtcyhzZHJjcmF0ZSwgJnNkcmNfY3MwLCAmc2RyY19jczEpOworCWlmIChyZXQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHNkcmNyYXRlIDwgTUlOX1NEUkNfRExMX0xPQ0tfRlJFUSkgeworCQlwcl9kZWJ1ZygiY2xvY2s6IHdpbGwgdW5sb2NrIFNEUkMgRExMXG4iKTsKKwkJdW5sb2NrX2RsbCA9IDE7CisJfQorCisJLyoKKwkgKiBYWFggVGhpcyBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgd2hlbiB0aGUgQ1BVIGZyZXF1ZW5jeSBjaGFuZ2VzCisJICovCisJX21wdXJhdGUgPSBhcm1fZmNrX3AtPnJhdGUgLyBDWUNMRVNfUEVSX01IWjsKKwljID0gKF9tcHVyYXRlIDw8IFNEUkNfTVBVUkFURV9TQ0FMRSkgPj4gU0RSQ19NUFVSQVRFX0JBU0VfU0hJRlQ7CisJYyArPSAxOyAgLyogZm9yIHNhZmV0eSAqLworCWMgKj0gU0RSQ19NUFVSQVRFX0xPT1BTOworCWMgPj49IFNEUkNfTVBVUkFURV9TQ0FMRTsKKwlpZiAoYyA9PSAwKQorCQljID0gMTsKKworCXByX2RlYnVnKCJjbG9jazogY2hhbmdpbmcgQ09SRSBEUExMIHJhdGUgZnJvbSAlbHUgdG8gJWx1XG4iLCBjbGstPnJhdGUsCisJCSB2YWxpZHJhdGUpOworCXByX2RlYnVnKCJjbG9jazogU0RSQyBDUzAgdGltaW5nIHBhcmFtcyB1c2VkOiIKKwkJICIgUkZSICUwOHggQ1RSTEEgJTA4eCBDVFJMQiAlMDh4IE1SICUwOHhcbiIsCisJCSBzZHJjX2NzMC0+cmZyX2N0cmwsIHNkcmNfY3MwLT5hY3RpbV9jdHJsYSwKKwkJIHNkcmNfY3MwLT5hY3RpbV9jdHJsYiwgc2RyY19jczAtPm1yKTsKKwlpZiAoc2RyY19jczEpCisJCXByX2RlYnVnKCJjbG9jazogU0RSQyBDUzEgdGltaW5nIHBhcmFtcyB1c2VkOiAiCisJCSAiIFJGUiAlMDh4IENUUkxBICUwOHggQ1RSTEIgJTA4eCBNUiAlMDh4XG4iLAorCQkgc2RyY19jczEtPnJmcl9jdHJsLCBzZHJjX2NzMS0+YWN0aW1fY3RybGEsCisJCSBzZHJjX2NzMS0+YWN0aW1fY3RybGIsIHNkcmNfY3MxLT5tcik7CisKKwlpZiAoc2RyY19jczEpCisJCW9tYXAzX2NvbmZpZ3VyZV9jb3JlX2RwbGwoCisJCQkJICBuZXdfZGl2LCB1bmxvY2tfZGxsLCBjLCByYXRlID4gY2xrLT5yYXRlLAorCQkJCSAgc2RyY19jczAtPnJmcl9jdHJsLCBzZHJjX2NzMC0+YWN0aW1fY3RybGEsCisJCQkJICBzZHJjX2NzMC0+YWN0aW1fY3RybGIsIHNkcmNfY3MwLT5tciwKKwkJCQkgIHNkcmNfY3MxLT5yZnJfY3RybCwgc2RyY19jczEtPmFjdGltX2N0cmxhLAorCQkJCSAgc2RyY19jczEtPmFjdGltX2N0cmxiLCBzZHJjX2NzMS0+bXIpOworCWVsc2UKKwkJb21hcDNfY29uZmlndXJlX2NvcmVfZHBsbCgKKwkJCQkgIG5ld19kaXYsIHVubG9ja19kbGwsIGMsIHJhdGUgPiBjbGstPnJhdGUsCisJCQkJICBzZHJjX2NzMC0+cmZyX2N0cmwsIHNkcmNfY3MwLT5hY3RpbV9jdHJsYSwKKwkJCQkgIHNkcmNfY3MwLT5hY3RpbV9jdHJsYiwgc2RyY19jczAtPm1yLAorCQkJCSAgMCwgMCwgMCwgMCk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0X2Nsa3NlbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0X2Nsa3NlbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MDgxMmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3RfY2xrc2VsLmMKQEAgLTAsMCArMSw0MDkgQEAKKy8qCisgKiBjbGt0X2Nsa3NlbC5jIC0gT01BUDIvMy80IGNsa3NlbCBjbG9jayBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0czoKKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqIFBhdWwgV2FsbXNsZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFhYWCBBdCBzb21lIHBvaW50IHRoZXNlIGNsa3NlbCBjbG9ja3Mgc2hvdWxkIGJlIHNwbGl0IGludG8KKyAqICJkaXZpZGVyIiBjbG9ja3MgYW5kICJtdXgiIGNsb2NrcyB0byBiZXR0ZXIgbWF0Y2ggdGhlIGhhcmR3YXJlLgorICoKKyAqIFhYWCBDdXJyZW50bHkgdGhlc2UgY2xvY2tzIGFyZSBvbmx5IHVzZWQgaW4gdGhlIE9NQVAyLzMvNCBjb2RlLCBidXQKKyAqIG1hbnkgb2YgdGhlIE9NQVAxIGNsb2NrcyBzaG91bGQgYmUgY29udmVydGlibGUgdG8gdXNlIHRoaXMKKyAqIG1lY2hhbmlzbS4KKyAqLworI3VuZGVmIERFQlVHCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCisKKy8qIFByaXZhdGUgZnVuY3Rpb25zICovCisKKy8qKgorICogX29tYXAyX2dldF9jbGtzZWxfYnlfcGFyZW50IC0gcmV0dXJuIGNsa3NlbCBzdHJ1Y3QgZm9yIGEgZ2l2ZW4gY2xrICYgcGFyZW50CisgKiBAY2xrOiBPTUFQIHN0cnVjdCBjbGsgcHRyIHRvIGluc3BlY3QKKyAqIEBzcmNfY2xrOiBPTUFQIHN0cnVjdCBjbGsgcHRyIG9mIHRoZSBwYXJlbnQgY2xrIHRvIHNlYXJjaCBmb3IKKyAqCisgKiBTY2FuIHRoZSBzdHJ1Y3QgY2xrc2VsIGFycmF5IGFzc29jaWF0ZWQgd2l0aCB0aGUgY2xvY2sgdG8gZmluZAorICogdGhlIGVsZW1lbnQgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdXBwbGllZCBwYXJlbnQgY2xvY2sgYWRkcmVzcy4KKyAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgY2xrc2VsIG9uIHN1Y2Nlc3Mgb3IgTlVMTCBvbiBlcnJvci4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgKl9vbWFwMl9nZXRfY2xrc2VsX2J5X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssCisJCQkJCQkJc3RydWN0IGNsayAqc3JjX2NsaykKK3sKKwljb25zdCBzdHJ1Y3QgY2xrc2VsICpjbGtzOworCisJaWYgKCFjbGstPmNsa3NlbCkKKwkJcmV0dXJuIE5VTEw7CisKKwlmb3IgKGNsa3MgPSBjbGstPmNsa3NlbDsgY2xrcy0+cGFyZW50OyBjbGtzKyspIHsKKwkJaWYgKGNsa3MtPnBhcmVudCA9PSBzcmNfY2xrKQorCQkJYnJlYWs7IC8qIEZvdW5kIHRoZSByZXF1ZXN0ZWQgcGFyZW50ICovCisJfQorCisJaWYgKCFjbGtzLT5wYXJlbnQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjbG9jazogQ291bGQgbm90IGZpbmQgcGFyZW50IGNsb2NrICVzIGluICIKKwkJICAgICAgICJjbGtzZWwgYXJyYXkgb2YgY2xvY2sgJXNcbiIsIHNyY19jbGstPm5hbWUsCisJCSAgICAgICBjbGstPm5hbWUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gY2xrczsKK30KKworLyoKKyAqIENvbnZlcnRzIGVuY29kZWQgY29udHJvbCByZWdpc3RlciBhZGRyZXNzIGludG8gYSBmdWxsIGFkZHJlc3MKKyAqIE9uIGVycm9yLCB0aGUgcmV0dXJuIHZhbHVlIChwYXJlbnRfZGl2KSB3aWxsIGJlIDAuCisgKi8KK3N0YXRpYyB1MzIgX29tYXAyX2Nsa3NlbF9nZXRfc3JjX2ZpZWxkKHN0cnVjdCBjbGsgKnNyY19jbGssIHN0cnVjdCBjbGsgKmNsaywKKwkJCQkgICAgICAgdTMyICpmaWVsZF92YWwpCit7CisJY29uc3Qgc3RydWN0IGNsa3NlbCAqY2xrczsKKwljb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgKmNsa3I7CisKKwljbGtzID0gX29tYXAyX2dldF9jbGtzZWxfYnlfcGFyZW50KGNsaywgc3JjX2Nsayk7CisJaWYgKCFjbGtzKQorCQlyZXR1cm4gMDsKKworCWZvciAoY2xrciA9IGNsa3MtPnJhdGVzOyBjbGtyLT5kaXY7IGNsa3IrKykgeworCQlpZiAoY2xrci0+ZmxhZ3MgJiBjcHVfbWFzayAmJiBjbGtyLT5mbGFncyAmIERFRkFVTFRfUkFURSkKKwkJCWJyZWFrOyAvKiBGb3VuZCB0aGUgZGVmYXVsdCByYXRlIGZvciB0aGlzIHBsYXRmb3JtICovCisJfQorCisJaWYgKCFjbGtyLT5kaXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjbG9jazogQ291bGQgbm90IGZpbmQgZGVmYXVsdCByYXRlIGZvciAiCisJCSAgICAgICAiY2xvY2sgJXMgcGFyZW50ICVzXG4iLCBjbGstPm5hbWUsCisJCSAgICAgICBzcmNfY2xrLT5wYXJlbnQtPm5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuLiAgQWRkIGEgY2xrc2VsIG1hc2sgdG8gdGhlIHN0cnVjdCBjbGsuICovCisJV0FSTl9PTihjbGstPmNsa3NlbF9tYXNrID09IDApOworCisJKmZpZWxkX3ZhbCA9IGNsa3ItPnZhbDsKKworCXJldHVybiBjbGtyLT5kaXY7Cit9CisKKworLyogUHVibGljIGZ1bmN0aW9ucyAqLworCisvKioKKyAqIG9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCAtIHNldCBhIGNsa3NlbCBjbGsncyBwYXJlbnQgZmllbGQgZnJvbSB0aGUgaGFyZHdhcmUKKyAqIEBjbGs6IE9NQVAgY2xvY2sgc3RydWN0IHB0ciB0byB1c2UKKyAqCisgKiBHaXZlbiBhIHBvaW50ZXIgdG8gYSBzb3VyY2Utc2VsZWN0YWJsZSBzdHJ1Y3QgY2xrLCByZWFkIHRoZSBoYXJkd2FyZQorICogcmVnaXN0ZXIgYW5kIGRldGVybWluZSB3aGF0IGl0cyBwYXJlbnQgaXMgY3VycmVudGx5IHNldCB0by4gIFVwZGF0ZSB0aGUKKyAqIGNsay0+cGFyZW50IGZpZWxkIHdpdGggdGhlIGFwcHJvcHJpYXRlIGNsayBwdHIuCisgKi8KK3ZvaWQgb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50KHN0cnVjdCBjbGsgKmNsaykKK3sKKwljb25zdCBzdHJ1Y3QgY2xrc2VsICpjbGtzOworCWNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSAqY2xrcjsKKwl1MzIgciwgZm91bmQgPSAwOworCisJaWYgKCFjbGstPmNsa3NlbCkKKwkJcmV0dXJuOworCisJciA9IF9fcmF3X3JlYWRsKGNsay0+Y2xrc2VsX3JlZykgJiBjbGstPmNsa3NlbF9tYXNrOworCXIgPj49IF9fZmZzKGNsay0+Y2xrc2VsX21hc2spOworCisJZm9yIChjbGtzID0gY2xrLT5jbGtzZWw7IGNsa3MtPnBhcmVudCAmJiAhZm91bmQ7IGNsa3MrKykgeworCQlmb3IgKGNsa3IgPSBjbGtzLT5yYXRlczsgY2xrci0+ZGl2ICYmICFmb3VuZDsgY2xrcisrKSB7CisJCQlpZiAoKGNsa3ItPmZsYWdzICYgY3B1X21hc2spICYmIChjbGtyLT52YWwgPT0gcikpIHsKKwkJCQlpZiAoY2xrLT5wYXJlbnQgIT0gY2xrcy0+cGFyZW50KSB7CisJCQkJCXByX2RlYnVnKCJjbG9jazogaW5pdGVkICVzIHBhcmVudCAiCisJCQkJCQkgInRvICVzICh3YXMgJXMpXG4iLAorCQkJCQkJIGNsay0+bmFtZSwgY2xrcy0+cGFyZW50LT5uYW1lLAorCQkJCQkJICgoY2xrLT5wYXJlbnQpID8KKwkJCQkJCSAgY2xrLT5wYXJlbnQtPm5hbWUgOiAiTlVMTCIpKTsKKwkJCQkJY2xrX3JlcGFyZW50KGNsaywgY2xrcy0+cGFyZW50KTsKKwkJCQl9OworCQkJCWZvdW5kID0gMTsKKwkJCX0KKwkJfQorCX0KKworCWlmICghZm91bmQpCisJCXByaW50ayhLRVJOX0VSUiAiY2xvY2s6IGluaXQgcGFyZW50OiBjb3VsZCBub3QgZmluZCAiCisJCSAgICAgICAicmVndmFsICUweCBmb3IgY2xvY2sgJXNcbiIsIHIsICBjbGstPm5hbWUpOworCisJcmV0dXJuOworfQorCisvKgorICogVXNlZCBmb3IgY2xvY2tzIHRoYXQgYXJlIHBhcnQgb2YgQ0xLU0VMX3h5eiBnb3Zlcm5lZCBjbG9ja3MuCisgKiBSRVZJU0lUOiBNYXliZSBjaGFuZ2UgdG8gdXNlIGNsay0+ZW5hYmxlKCkgZnVuY3Rpb25zIGxpa2Ugb24gb21hcDE/CisgKi8KK3Vuc2lnbmVkIGxvbmcgb21hcDJfY2xrc2VsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyByYXRlOworCXUzMiBkaXYgPSAwOworCisJcHJfZGVidWcoImNsb2NrOiByZWNhbGMnaW5nIGNsa3NlbCBjbGsgJXNcbiIsIGNsay0+bmFtZSk7CisKKwlkaXYgPSBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3IoY2xrKTsKKwlpZiAoZGl2ID09IDApCisJCXJldHVybiBjbGstPnJhdGU7CisKKwlyYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXY7CisKKwlwcl9kZWJ1ZygiY2xvY2s6IG5ldyBjbG9jayByYXRlIGlzICVsZCAoZGl2ICVkKVxuIiwgcmF0ZSwgZGl2KTsKKworCXJldHVybiByYXRlOworfQorCisvKioKKyAqIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlX2RpdiAtIGZpbmQgZGl2aXNvciBmb3IgdGhlIGdpdmVuIGNsb2NrIGFuZCByYXRlCisgKiBAY2xrOiBPTUFQIHN0cnVjdCBjbGsgdG8gdXNlCisgKiBAdGFyZ2V0X3JhdGU6IGRlc2lyZWQgY2xvY2sgcmF0ZQorICogQG5ld19kaXY6IHB0ciB0byB3aGVyZSB3ZSBzaG91bGQgc3RvcmUgdGhlIGRpdmlzb3IKKyAqCisgKiBGaW5kcyAnYmVzdCcgZGl2aWRlciB2YWx1ZSBpbiBhbiBhcnJheSBiYXNlZCBvbiB0aGUgc291cmNlIGFuZCB0YXJnZXQKKyAqIHJhdGVzLiAgVGhlIGRpdmlkZXIgYXJyYXkgbXVzdCBiZSBzb3J0ZWQgd2l0aCBzbWFsbGVzdCBkaXZpZGVyIGZpcnN0LgorICogTm90ZSB0aGF0IHRoaXMgd2lsbCBub3Qgd29yayBmb3IgY2xvY2tzIHdoaWNoIGFyZSBwYXJ0IG9mIENPTkZJR19QQVJUSUNJUEFOVCwKKyAqIHRoZXkgYXJlIG9ubHkgc2V0dGFibGUgYXMgcGFydCBvZiB2aXJ0dWFsX3ByY20gc2V0LgorICoKKyAqIFJldHVybnMgdGhlIHJvdW5kZWQgY2xvY2sgcmF0ZSBvciByZXR1cm5zIDB4ZmZmZmZmZmYgb24gZXJyb3IuCisgKi8KK3UzMiBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZV9kaXYoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHRhcmdldF9yYXRlLAorCQkJCXUzMiAqbmV3X2RpdikKK3sKKwl1bnNpZ25lZCBsb25nIHRlc3RfcmF0ZTsKKwljb25zdCBzdHJ1Y3QgY2xrc2VsICpjbGtzOworCWNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSAqY2xrcjsKKwl1MzIgbGFzdF9kaXYgPSAwOworCisJcHJfZGVidWcoImNsb2NrOiBjbGtzZWxfcm91bmRfcmF0ZV9kaXY6ICVzIHRhcmdldF9yYXRlICVsZFxuIiwKKwkJIGNsay0+bmFtZSwgdGFyZ2V0X3JhdGUpOworCisJKm5ld19kaXYgPSAxOworCisJY2xrcyA9IF9vbWFwMl9nZXRfY2xrc2VsX2J5X3BhcmVudChjbGssIGNsay0+cGFyZW50KTsKKwlpZiAoIWNsa3MpCisJCXJldHVybiB+MDsKKworCWZvciAoY2xrciA9IGNsa3MtPnJhdGVzOyBjbGtyLT5kaXY7IGNsa3IrKykgeworCQlpZiAoIShjbGtyLT5mbGFncyAmIGNwdV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNhbml0eSBjaGVjayAqLworCQlpZiAoY2xrci0+ZGl2IDw9IGxhc3RfZGl2KQorCQkJcHJfZXJyKCJjbG9jazogY2xrc2VsX3JhdGUgdGFibGUgbm90IHNvcnRlZCAiCisJCQkgICAgICAgImZvciBjbG9jayAlcyIsIGNsay0+bmFtZSk7CisKKwkJbGFzdF9kaXYgPSBjbGtyLT5kaXY7CisKKwkJdGVzdF9yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBjbGtyLT5kaXY7CisKKwkJaWYgKHRlc3RfcmF0ZSA8PSB0YXJnZXRfcmF0ZSkKKwkJCWJyZWFrOyAvKiBmb3VuZCBpdCAqLworCX0KKworCWlmICghY2xrci0+ZGl2KSB7CisJCXByX2VycigiY2xvY2s6IENvdWxkIG5vdCBmaW5kIGRpdmlzb3IgZm9yIHRhcmdldCAiCisJCSAgICAgICAicmF0ZSAlbGQgZm9yIGNsb2NrICVzIHBhcmVudCAlc1xuIiwgdGFyZ2V0X3JhdGUsCisJCSAgICAgICBjbGstPm5hbWUsIGNsay0+cGFyZW50LT5uYW1lKTsKKwkJcmV0dXJuIH4wOworCX0KKworCSpuZXdfZGl2ID0gY2xrci0+ZGl2OworCisJcHJfZGVidWcoImNsb2NrOiBuZXdfZGl2ID0gJWQsIG5ld19yYXRlID0gJWxkXG4iLCAqbmV3X2RpdiwKKwkJIChjbGstPnBhcmVudC0+cmF0ZSAvIGNsa3ItPmRpdikpOworCisJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gY2xrci0+ZGl2OworfQorCisvKioKKyAqIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlIC0gZmluZCByb3VuZGVkIHJhdGUgZm9yIHRoZSBnaXZlbiBjbG9jayBhbmQgcmF0ZQorICogQGNsazogT01BUCBzdHJ1Y3QgY2xrIHRvIHVzZQorICogQHRhcmdldF9yYXRlOiBkZXNpcmVkIGNsb2NrIHJhdGUKKyAqCisgKiBDb21wYXRpYmlsaXR5IHdyYXBwZXIgZm9yIE9NQVAgY2xvY2sgZnJhbWV3b3JrCisgKiBGaW5kcyBiZXN0IHRhcmdldCByYXRlIGJhc2VkIG9uIHRoZSBzb3VyY2UgY2xvY2sgYW5kIHBvc3NpYmxlIGRpdmlkZXJzLgorICogcmF0ZXMuIFRoZSBkaXZpZGVyIGFycmF5IG11c3QgYmUgc29ydGVkIHdpdGggc21hbGxlc3QgZGl2aWRlciBmaXJzdC4KKyAqIE5vdGUgdGhhdCB0aGlzIHdpbGwgbm90IHdvcmsgZm9yIGNsb2NrcyB3aGljaCBhcmUgcGFydCBvZiBDT05GSUdfUEFSVElDSVBBTlQsCisgKiB0aGV5IGFyZSBvbmx5IHNldHRhYmxlIGFzIHBhcnQgb2YgdmlydHVhbF9wcmNtIHNldC4KKyAqCisgKiBSZXR1cm5zIHRoZSByb3VuZGVkIGNsb2NrIHJhdGUgb3IgcmV0dXJucyAweGZmZmZmZmZmIG9uIGVycm9yLgorICovCitsb25nIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSkKK3sKKwl1MzIgbmV3X2RpdjsKKworCXJldHVybiBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZV9kaXYoY2xrLCB0YXJnZXRfcmF0ZSwgJm5ld19kaXYpOworfQorCisKKy8qIEdpdmVuIGEgY2xvY2sgYW5kIGEgcmF0ZSBhcHBseSBhIGNsb2NrIHNwZWNpZmljIHJvdW5kaW5nIGZ1bmN0aW9uICovCitsb25nIG9tYXAyX2Nsa19yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWlmIChjbGstPnJvdW5kX3JhdGUpCisJCXJldHVybiBjbGstPnJvdW5kX3JhdGUoY2xrLCByYXRlKTsKKworCXJldHVybiBjbGstPnJhdGU7Cit9CisKKy8qKgorICogb21hcDJfY2xrc2VsX3RvX2Rpdmlzb3IoKSAtIHR1cm4gY2xrc2VsIGZpZWxkIHZhbHVlIGludG8gaW50ZWdlciBkaXZpZGVyCisgKiBAY2xrOiBPTUFQIHN0cnVjdCBjbGsgdG8gdXNlCisgKiBAZmllbGRfdmFsOiByZWdpc3RlciBmaWVsZCB2YWx1ZSB0byBmaW5kCisgKgorICogR2l2ZW4gYSBzdHJ1Y3QgY2xrIG9mIGEgcmF0ZS1zZWxlY3RhYmxlIGNsa3NlbCBjbG9jaywgYW5kIGEgcmVnaXN0ZXIgZmllbGQKKyAqIHZhbHVlIHRvIHNlYXJjaCBmb3IsIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgY2xvY2sgZGl2aXNvci4gIFRoZSByZWdpc3RlcgorICogZmllbGQgdmFsdWUgc2hvdWxkIGJlIHByZS1tYXNrZWQgYW5kIHNoaWZ0ZWQgZG93biBzbyB0aGUgTFNCIGlzIGF0IGJpdCAwCisgKiBiZWZvcmUgY2FsbGluZy4gIFJldHVybnMgMCBvbiBlcnJvcgorICovCit1MzIgb21hcDJfY2xrc2VsX3RvX2Rpdmlzb3Ioc3RydWN0IGNsayAqY2xrLCB1MzIgZmllbGRfdmFsKQoreworCWNvbnN0IHN0cnVjdCBjbGtzZWwgKmNsa3M7CisJY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlICpjbGtyOworCisJY2xrcyA9IF9vbWFwMl9nZXRfY2xrc2VsX2J5X3BhcmVudChjbGssIGNsay0+cGFyZW50KTsKKwlpZiAoIWNsa3MpCisJCXJldHVybiAwOworCisJZm9yIChjbGtyID0gY2xrcy0+cmF0ZXM7IGNsa3ItPmRpdjsgY2xrcisrKSB7CisJCWlmICgoY2xrci0+ZmxhZ3MgJiBjcHVfbWFzaykgJiYgKGNsa3ItPnZhbCA9PSBmaWVsZF92YWwpKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFjbGtyLT5kaXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjbG9jazogQ291bGQgbm90IGZpbmQgZmllbGR2YWwgJWQgZm9yICIKKwkJICAgICAgICJjbG9jayAlcyBwYXJlbnQgJXNcbiIsIGZpZWxkX3ZhbCwgY2xrLT5uYW1lLAorCQkgICAgICAgY2xrLT5wYXJlbnQtPm5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gY2xrci0+ZGl2OworfQorCisvKioKKyAqIG9tYXAyX2Rpdmlzb3JfdG9fY2xrc2VsKCkgLSB0dXJuIGNsa3NlbCBpbnRlZ2VyIGRpdmlzb3IgaW50byBhIGZpZWxkIHZhbHVlCisgKiBAY2xrOiBPTUFQIHN0cnVjdCBjbGsgdG8gdXNlCisgKiBAZGl2OiBpbnRlZ2VyIGRpdmlzb3IgdG8gc2VhcmNoIGZvcgorICoKKyAqIEdpdmVuIGEgc3RydWN0IGNsayBvZiBhIHJhdGUtc2VsZWN0YWJsZSBjbGtzZWwgY2xvY2ssIGFuZCBhIGNsb2NrIGRpdmlzb3IsCisgKiBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIGZpZWxkIHZhbHVlLiAgVGhlIHJldHVybiByZWdpc3RlciB2YWx1ZSBpcworICogdGhlIHZhbHVlIGJlZm9yZSBsZWZ0LXNoaWZ0aW5nLiAgUmV0dXJucyB+MCBvbiBlcnJvcgorICovCit1MzIgb21hcDJfZGl2aXNvcl90b19jbGtzZWwoc3RydWN0IGNsayAqY2xrLCB1MzIgZGl2KQoreworCWNvbnN0IHN0cnVjdCBjbGtzZWwgKmNsa3M7CisJY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlICpjbGtyOworCisJLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCVdBUk5fT04oZGl2ID09IDApOworCisJY2xrcyA9IF9vbWFwMl9nZXRfY2xrc2VsX2J5X3BhcmVudChjbGssIGNsay0+cGFyZW50KTsKKwlpZiAoIWNsa3MpCisJCXJldHVybiB+MDsKKworCWZvciAoY2xrciA9IGNsa3MtPnJhdGVzOyBjbGtyLT5kaXY7IGNsa3IrKykgeworCQlpZiAoKGNsa3ItPmZsYWdzICYgY3B1X21hc2spICYmIChjbGtyLT5kaXYgPT0gZGl2KSkKKwkJCWJyZWFrOworCX0KKworCWlmICghY2xrci0+ZGl2KSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2xvY2s6IENvdWxkIG5vdCBmaW5kIGRpdmlzb3IgJWQgZm9yICIKKwkJICAgICAgICJjbG9jayAlcyBwYXJlbnQgJXNcbiIsIGRpdiwgY2xrLT5uYW1lLAorCQkgICAgICAgY2xrLT5wYXJlbnQtPm5hbWUpOworCQlyZXR1cm4gfjA7CisJfQorCisJcmV0dXJuIGNsa3ItPnZhbDsKK30KKworLyoqCisgKiBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3IgLSBnZXQgY3VycmVudCBkaXZpZGVyIGFwcGxpZWQgdG8gcGFyZW50IGNsb2NrLgorICogQGNsazogT01BUCBzdHJ1Y3QgY2xrIHRvIHVzZS4KKyAqCisgKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIGRpdmlzb3IgdXBvbiBzdWNjZXNzIG9yIDAgb24gZXJyb3IuCisgKi8KK3UzMiBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3Ioc3RydWN0IGNsayAqY2xrKQoreworCXUzMiB2OworCisJaWYgKCFjbGstPmNsa3NlbF9tYXNrKQorCQlyZXR1cm4gMDsKKworCXYgPSBfX3Jhd19yZWFkbChjbGstPmNsa3NlbF9yZWcpICYgY2xrLT5jbGtzZWxfbWFzazsKKwl2ID4+PSBfX2ZmcyhjbGstPmNsa3NlbF9tYXNrKTsKKworCXJldHVybiBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcihjbGssIHYpOworfQorCitpbnQgb21hcDJfY2xrc2VsX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXUzMiB2LCBmaWVsZF92YWwsIHZhbGlkcmF0ZSwgbmV3X2RpdiA9IDA7CisKKwlpZiAoIWNsay0+Y2xrc2VsX21hc2spCisJCXJldHVybiAtRUlOVkFMOworCisJdmFsaWRyYXRlID0gb21hcDJfY2xrc2VsX3JvdW5kX3JhdGVfZGl2KGNsaywgcmF0ZSwgJm5ld19kaXYpOworCWlmICh2YWxpZHJhdGUgIT0gcmF0ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmaWVsZF92YWwgPSBvbWFwMl9kaXZpc29yX3RvX2Nsa3NlbChjbGssIG5ld19kaXYpOworCWlmIChmaWVsZF92YWwgPT0gfjApCisJCXJldHVybiAtRUlOVkFMOworCisJdiA9IF9fcmF3X3JlYWRsKGNsay0+Y2xrc2VsX3JlZyk7CisJdiAmPSB+Y2xrLT5jbGtzZWxfbWFzazsKKwl2IHw9IGZpZWxkX3ZhbCA8PCBfX2ZmcyhjbGstPmNsa3NlbF9tYXNrKTsKKwlfX3Jhd193cml0ZWwodiwgY2xrLT5jbGtzZWxfcmVnKTsKKwl2ID0gX19yYXdfcmVhZGwoY2xrLT5jbGtzZWxfcmVnKTsgLyogT0NQIGJhcnJpZXIgKi8KKworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gbmV3X2RpdjsKKworCXJldHVybiAwOworfQorCitpbnQgb21hcDJfY2xrc2VsX3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpuZXdfcGFyZW50KQoreworCXUzMiBmaWVsZF92YWwsIHYsIHBhcmVudF9kaXY7CisKKwlpZiAoIWNsay0+Y2xrc2VsKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBhcmVudF9kaXYgPSBfb21hcDJfY2xrc2VsX2dldF9zcmNfZmllbGQobmV3X3BhcmVudCwgY2xrLCAmZmllbGRfdmFsKTsKKwlpZiAoIXBhcmVudF9kaXYpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogU2V0IG5ldyBzb3VyY2UgdmFsdWUgKHByZXZpb3VzIGRpdmlkZXJzIGlmIGFueSBpbiBlZmZlY3QpICovCisJdiA9IF9fcmF3X3JlYWRsKGNsay0+Y2xrc2VsX3JlZyk7CisJdiAmPSB+Y2xrLT5jbGtzZWxfbWFzazsKKwl2IHw9IGZpZWxkX3ZhbCA8PCBfX2ZmcyhjbGstPmNsa3NlbF9tYXNrKTsKKwlfX3Jhd193cml0ZWwodiwgY2xrLT5jbGtzZWxfcmVnKTsKKwl2ID0gX19yYXdfcmVhZGwoY2xrLT5jbGtzZWxfcmVnKTsgICAgLyogT0NQIGJhcnJpZXIgKi8KKworCWNsa19yZXBhcmVudChjbGssIG5ld19wYXJlbnQpOworCisJLyogQ0xLU0VMIGNsb2NrcyBmb2xsb3cgdGhlaXIgcGFyZW50cycgcmF0ZXMsIGRpdmlkZWQgYnkgYSBkaXZpc29yICovCisJY2xrLT5yYXRlID0gbmV3X3BhcmVudC0+cmF0ZTsKKworCWlmIChwYXJlbnRfZGl2ID4gMCkKKwkJY2xrLT5yYXRlIC89IHBhcmVudF9kaXY7CisKKwlwcl9kZWJ1ZygiY2xvY2s6IHNldCBwYXJlbnQgb2YgJXMgdG8gJXMgKG5ldyByYXRlICVsZClcbiIsCisJCSBjbGstPm5hbWUsIGNsay0+cGFyZW50LT5uYW1lLCBjbGstPnJhdGUpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsa3RfZHBsbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0X2RwbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2U1MTJlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbGt0X2RwbGwuYwpAQCAtMCwwICsxLDM4NiBAQAorLyoKKyAqIE9NQVAyLzMvNCBEUExMIGNsb2NrIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3RzOgorICogUmljaGFyZCBXb29kcnVmZiA8ci13b29kcnVmZjJAdGkuY29tPgorICogUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCisKKy8qIERQTEwgcmF0ZSByb3VuZGluZzogbWluaW11bSBEUExMIG11bHRpcGxpZXIsIGRpdmlkZXIgdmFsdWVzICovCisjZGVmaW5lIERQTExfTUlOX01VTFRJUExJRVIJCTIKKyNkZWZpbmUgRFBMTF9NSU5fRElWSURFUgkJMQorCisvKiBQb3NzaWJsZSBlcnJvciByZXN1bHRzIGZyb20gX2RwbGxfdGVzdF9tdWx0ICovCisjZGVmaW5lIERQTExfTVVMVF9VTkRFUkZMT1cJCS0xCisKKy8qCisgKiBTY2FsZSBmYWN0b3IgdG8gbWl0aWdhdGUgcm91bmRvZmYgZXJyb3JzIGluIERQTEwgcmF0ZSByb3VuZGluZy4KKyAqIFRoZSBoaWdoZXIgdGhlIHNjYWxlIGZhY3RvciwgdGhlIGdyZWF0ZXIgdGhlIHJpc2sgb2YgYXJpdGhtZXRpYyBvdmVyZmxvdywKKyAqIGJ1dCB0aGUgY2xvc2VyIHRoZSByb3VuZGVkIHJhdGUgdG8gdGhlIHRhcmdldCByYXRlLiAgRFBMTF9TQ0FMRV9GQUNUT1IKKyAqIG11c3QgYmUgYSBwb3dlciBvZiBEUExMX1NDQUxFX0JBU0UuCisgKi8KKyNkZWZpbmUgRFBMTF9TQ0FMRV9GQUNUT1IJCTY0CisjZGVmaW5lIERQTExfU0NBTEVfQkFTRQkJCTIKKyNkZWZpbmUgRFBMTF9ST1VORElOR19WQUwJCSgoRFBMTF9TQ0FMRV9CQVNFIC8gMikgKiBcCisJCQkJCSAoRFBMTF9TQ0FMRV9GQUNUT1IgLyBEUExMX1NDQUxFX0JBU0UpKQorCisvKiBEUExMIHZhbGlkIEZpbnQgZnJlcXVlbmN5IGJhbmQgbGltaXRzIC0gZnJvbSAzNHh4IFRSTSBTZWN0aW9uIDQuNy42LjIgKi8KKyNkZWZpbmUgRFBMTF9GSU5UX0JBTkQxX01JTgkJNzUwMDAwCisjZGVmaW5lIERQTExfRklOVF9CQU5EMV9NQVgJCTIxMDAwMDAKKyNkZWZpbmUgRFBMTF9GSU5UX0JBTkQyX01JTgkJNzUwMDAwMAorI2RlZmluZSBEUExMX0ZJTlRfQkFORDJfTUFYCQkyMTAwMDAwMAorCisvKiBfZHBsbF90ZXN0X2ZpbnQoKSByZXR1cm4gY29kZXMgKi8KKyNkZWZpbmUgRFBMTF9GSU5UX1VOREVSRkxPVwkJLTEKKyNkZWZpbmUgRFBMTF9GSU5UX0lOVkFMSUQJCS0yCisKKy8qIFByaXZhdGUgZnVuY3Rpb25zICovCisKKy8qCisgKiBfZHBsbF90ZXN0X2ZpbnQgLSB0ZXN0IHdoZXRoZXIgYW4gRmludCB2YWx1ZSBpcyB2YWxpZCBmb3IgdGhlIERQTEwKKyAqIEBjbGs6IERQTEwgc3RydWN0IGNsayB0byB0ZXN0CisgKiBAbjogZGl2aWRlciB2YWx1ZSAoTikgdG8gdGVzdAorICoKKyAqIFRlc3RzIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIGRpdmlkZXIgQG4gd2lsbCByZXN1bHQgaW4gYSB2YWxpZCBEUExMCisgKiBpbnRlcm5hbCBjbG9jayBmcmVxdWVuY3kgRmludC4gU2VlIHRoZSAzNHh4IFRSTSA0LjcuNi4yICJEUExMIEppdHRlcgorICogQ29ycmVjdGlvbiIuICBSZXR1cm5zIDAgaWYgT0ssIC0xIGlmIHRoZSBlbmNsb3NpbmcgbG9vcCBjYW4gdGVybWluYXRlCisgKiAoYXNzdW1pbmcgdGhhdCBpdCBpcyBjb3VudGluZyBOIHVwd2FyZHMpLCBvciAtMiBpZiB0aGUgZW5jbG9zaW5nIGxvb3AKKyAqIHNob3VsZCBza2lwIHRvIHRoZSBuZXh0IGl0ZXJhdGlvbiAoYWdhaW4gYXNzdW1pbmcgTiBpcyBpbmNyZWFzaW5nKS4KKyAqLworc3RhdGljIGludCBfZHBsbF90ZXN0X2ZpbnQoc3RydWN0IGNsayAqY2xrLCB1OCBuKQoreworCXN0cnVjdCBkcGxsX2RhdGEgKmRkOworCWxvbmcgZmludDsKKwlpbnQgcmV0ID0gMDsKKworCWRkID0gY2xrLT5kcGxsX2RhdGE7CisKKwkvKiBEUExMIGRpdmlkZXIgbXVzdCByZXN1bHQgaW4gYSB2YWxpZCBqaXR0ZXIgY29ycmVjdGlvbiB2YWwgKi8KKwlmaW50ID0gY2xrLT5wYXJlbnQtPnJhdGUgLyAobiArIDEpOworCWlmIChmaW50IDwgRFBMTF9GSU5UX0JBTkQxX01JTikgeworCisJCXByX2RlYnVnKCJyZWplY3Rpbmcgbj0lZCBkdWUgdG8gRmludCBmYWlsdXJlLCAiCisJCQkgImxvd2VyaW5nIG1heF9kaXZpZGVyXG4iLCBuKTsKKwkJZGQtPm1heF9kaXZpZGVyID0gbjsKKwkJcmV0ID0gRFBMTF9GSU5UX1VOREVSRkxPVzsKKworCX0gZWxzZSBpZiAoZmludCA+IERQTExfRklOVF9CQU5EMV9NQVggJiYKKwkJICAgZmludCA8IERQTExfRklOVF9CQU5EMl9NSU4pIHsKKworCQlwcl9kZWJ1ZygicmVqZWN0aW5nIG49JWQgZHVlIHRvIEZpbnQgZmFpbHVyZVxuIiwgbik7CisJCXJldCA9IERQTExfRklOVF9JTlZBTElEOworCisJfSBlbHNlIGlmIChmaW50ID4gRFBMTF9GSU5UX0JBTkQyX01BWCkgeworCisJCXByX2RlYnVnKCJyZWplY3Rpbmcgbj0lZCBkdWUgdG8gRmludCBmYWlsdXJlLCAiCisJCQkgImJvb3N0aW5nIG1pbl9kaXZpZGVyXG4iLCBuKTsKKwkJZGQtPm1pbl9kaXZpZGVyID0gbjsKKwkJcmV0ID0gRFBMTF9GSU5UX0lOVkFMSUQ7CisKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfZHBsbF9jb21wdXRlX25ld19yYXRlKHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgbSwgdW5zaWduZWQgaW50IG4pCit7CisJdW5zaWduZWQgbG9uZyBsb25nIG51bTsKKworCW51bSA9ICh1bnNpZ25lZCBsb25nIGxvbmcpcGFyZW50X3JhdGUgKiBtOworCWRvX2RpdihudW0sIG4pOworCXJldHVybiBudW07Cit9CisKKy8qCisgKiBfZHBsbF90ZXN0X211bHQgLSB0ZXN0IGEgRFBMTCBtdWx0aXBsaWVyIHZhbHVlCisgKiBAbTogcG9pbnRlciB0byB0aGUgRFBMTCBtIChtdWx0aXBsaWVyKSB2YWx1ZSB1bmRlciB0ZXN0CisgKiBAbjogY3VycmVudCBEUExMIG4gKGRpdmlkZXIpIHZhbHVlIHVuZGVyIHRlc3QKKyAqIEBuZXdfcmF0ZTogcG9pbnRlciB0byBzdG9yYWdlIGZvciB0aGUgcmVzdWx0aW5nIHJvdW5kZWQgcmF0ZQorICogQHRhcmdldF9yYXRlOiB0aGUgZGVzaXJlZCBEUExMIHJhdGUKKyAqIEBwYXJlbnRfcmF0ZTogdGhlIERQTEwncyBwYXJlbnQgY2xvY2sgcmF0ZQorICoKKyAqIFRoaXMgY29kZSB0ZXN0cyBhIERQTEwgbXVsdGlwbGllciB2YWx1ZSwgZW5zdXJpbmcgdGhhdCB0aGUKKyAqIHJlc3VsdGluZyByYXRlIHdpbGwgbm90IGJlIGhpZ2hlciB0aGFuIHRoZSB0YXJnZXRfcmF0ZSwgYW5kIHRoYXQKKyAqIHRoZSBtdWx0aXBsaWVyIHZhbHVlIGl0c2VsZiBpcyB2YWxpZCBmb3IgdGhlIERQTEwuICBJbml0aWFsbHksIHRoZQorICogaW50ZWdlciBwb2ludGVkIHRvIGJ5IHRoZSBtIGFyZ3VtZW50IHNob3VsZCBiZSBwcmVzY2FsZWQgYnkKKyAqIG11bHRpcGx5aW5nIGJ5IERQTExfU0NBTEVfRkFDVE9SLiAgVGhlIGNvZGUgd2lsbCByZXBsYWNlIHRoaXMgd2l0aAorICogYSBub24tc2NhbGVkIG0gdXBvbiByZXR1cm4uICBUaGlzIG5vbi1zY2FsZWQgbSB3aWxsIHJlc3VsdCBpbiBhCisgKiBuZXdfcmF0ZSBhcyBjbG9zZSBhcyBwb3NzaWJsZSB0byB0YXJnZXRfcmF0ZSAoYnV0IG5vdCBncmVhdGVyIHRoYW4KKyAqIHRhcmdldF9yYXRlKSBnaXZlbiB0aGUgY3VycmVudCAocGFyZW50X3JhdGUsIG4sIHByZXNjYWxlZCBtKQorICogdHJpcGxlLiBSZXR1cm5zIERQTExfTVVMVF9VTkRFUkZMT1cgaW4gdGhlIGV2ZW50IHRoYXQgdGhlCisgKiBub24tc2NhbGVkIG0gYXR0ZW1wdGVkIHRvIHVuZGVyZmxvdywgd2hpY2ggY2FuIGFsbG93IHRoZSBjYWxsaW5nCisgKiBmdW5jdGlvbiB0byBiYWlsIG91dCBlYXJseTsgb3IgMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQgX2RwbGxfdGVzdF9tdWx0KGludCAqbSwgaW50IG4sIHVuc2lnbmVkIGxvbmcgKm5ld19yYXRlLAorCQkJICAgdW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUpCit7CisJaW50IHIgPSAwLCBjYXJyeSA9IDA7CisKKwkvKiBVbnNjYWxlIG0gYW5kIHJvdW5kIGlmIG5lY2Vzc2FyeSAqLworCWlmICgqbSAlIERQTExfU0NBTEVfRkFDVE9SID49IERQTExfUk9VTkRJTkdfVkFMKQorCQljYXJyeSA9IDE7CisJKm0gPSAoKm0gLyBEUExMX1NDQUxFX0ZBQ1RPUikgKyBjYXJyeTsKKworCS8qCisJICogVGhlIG5ldyByYXRlIG11c3QgYmUgPD0gdGhlIHRhcmdldCByYXRlIHRvIGF2b2lkIHByb2dyYW1taW5nCisJICogYSByYXRlIHRoYXQgaXMgaW1wb3NzaWJsZSBmb3IgdGhlIGhhcmR3YXJlIHRvIGhhbmRsZQorCSAqLworCSpuZXdfcmF0ZSA9IF9kcGxsX2NvbXB1dGVfbmV3X3JhdGUocGFyZW50X3JhdGUsICptLCBuKTsKKwlpZiAoKm5ld19yYXRlID4gdGFyZ2V0X3JhdGUpIHsKKwkJKCptKS0tOworCQkqbmV3X3JhdGUgPSAwOworCX0KKworCS8qIEd1YXJkIGFnYWluc3QgbSB1bmRlcmZsb3cgKi8KKwlpZiAoKm0gPCBEUExMX01JTl9NVUxUSVBMSUVSKSB7CisJCSptID0gRFBMTF9NSU5fTVVMVElQTElFUjsKKwkJKm5ld19yYXRlID0gMDsKKwkJciA9IERQTExfTVVMVF9VTkRFUkZMT1c7CisJfQorCisJaWYgKCpuZXdfcmF0ZSA9PSAwKQorCQkqbmV3X3JhdGUgPSBfZHBsbF9jb21wdXRlX25ld19yYXRlKHBhcmVudF9yYXRlLCAqbSwgbik7CisKKwlyZXR1cm4gcjsKK30KKworLyogUHVibGljIGZ1bmN0aW9ucyAqLworCit2b2lkIG9tYXAyX2luaXRfZHBsbF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiB2OworCXN0cnVjdCBkcGxsX2RhdGEgKmRkOworCisJZGQgPSBjbGstPmRwbGxfZGF0YTsKKwlpZiAoIWRkKQorCQlyZXR1cm47CisKKwkvKiBSZXR1cm4gYnlwYXNzIHJhdGUgaWYgRFBMTCBpcyBieXBhc3NlZCAqLworCXYgPSBfX3Jhd19yZWFkbChkZC0+Y29udHJvbF9yZWcpOworCXYgJj0gZGQtPmVuYWJsZV9tYXNrOworCXYgPj49IF9fZmZzKGRkLT5lbmFibGVfbWFzayk7CisKKwkvKiBSZXBhcmVudCBpbiBjYXNlIHRoZSBkcGxsIGlzIGluIGJ5cGFzcyAqLworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlpZiAodiA9PSBPTUFQMlhYWF9FTl9EUExMX0xQQllQQVNTIHx8CisJCSAgICB2ID09IE9NQVAyWFhYX0VOX0RQTExfRlJCWVBBU1MpCisJCQljbGtfcmVwYXJlbnQoY2xrLCBkZC0+Y2xrX2J5cGFzcyk7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQlpZiAodiA9PSBPTUFQM1hYWF9FTl9EUExMX0xQQllQQVNTIHx8CisJCSAgICB2ID09IE9NQVAzWFhYX0VOX0RQTExfRlJCWVBBU1MpCisJCQljbGtfcmVwYXJlbnQoY2xrLCBkZC0+Y2xrX2J5cGFzcyk7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkgeworCQlpZiAodiA9PSBPTUFQNFhYWF9FTl9EUExMX0xQQllQQVNTIHx8CisJCSAgICB2ID09IE9NQVA0WFhYX0VOX0RQTExfRlJCWVBBU1MgfHwKKwkJICAgIHYgPT0gT01BUDRYWFhfRU5fRFBMTF9NTkJZUEFTUykKKwkJCWNsa19yZXBhcmVudChjbGssIGRkLT5jbGtfYnlwYXNzKTsKKwl9CisJcmV0dXJuOworfQorCisvKioKKyAqIG9tYXAyX2dldF9kcGxsX3JhdGUgLSByZXR1cm5zIHRoZSBjdXJyZW50IERQTEwgQ0xLT1VUIHJhdGUKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiBhIERQTEwKKyAqCisgKiBEUExMcyBjYW4gYmUgbG9ja2VkIG9yIGJ5cGFzc2VkIC0gYmFzaWNhbGx5LCBlbmFibGVkIG9yIGRpc2FibGVkLgorICogV2hlbiBsb2NrZWQsIHRoZSBEUExMIG91dHB1dCBkZXBlbmRzIG9uIHRoZSBNIGFuZCBOIHZhbHVlcy4gIFdoZW4KKyAqIGJ5cGFzc2VkLCBvbiBPTUFQMnh4eCwgdGhlIG91dHB1dCByYXRlIGlzIGVpdGhlciB0aGUgMzJLaUh6IGNsb2NrCisgKiBvciBzeXNfY2xrLiAgQnlwYXNzIHJhdGVzIG9uIE9NQVAzIGRlcGVuZCBvbiB0aGUgRFBMTDogRFBMTHMgMSBhbmQKKyAqIDIgYXJlIGJ5cGFzc2VkIHdpdGggZHBsbDFfZmNsayBhbmQgZHBsbDJfZmNsayByZXNwZWN0aXZlbHkKKyAqIChnZW5lcmF0ZWQgYnkgRFBMTDMpLCB3aGlsZSBEUExMIDMsIDQsIGFuZCA1IGJ5cGFzcyByYXRlcyBhcmUgc3lzX2Nsay4KKyAqIFJldHVybnMgdGhlIGN1cnJlbnQgRFBMTCBDTEtPVVQgcmF0ZSAoKm5vdCogQ0xLT1VUWDIpIGlmIHRoZSBEUExMIGlzCisgKiBsb2NrZWQsIG9yIHRoZSBhcHByb3ByaWF0ZSBieXBhc3MgcmF0ZSBpZiB0aGUgRFBMTCBpcyBieXBhc3NlZCwgb3IgMAorICogaWYgdGhlIGNsb2NrIEBjbGsgaXMgbm90IGEgRFBMTC4KKyAqLwordTMyIG9tYXAyX2dldF9kcGxsX3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCWxvbmcgbG9uZyBkcGxsX2NsazsKKwl1MzIgZHBsbF9tdWx0LCBkcGxsX2RpdiwgdjsKKwlzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKworCWRkID0gY2xrLT5kcGxsX2RhdGE7CisJaWYgKCFkZCkKKwkJcmV0dXJuIDA7CisKKwkvKiBSZXR1cm4gYnlwYXNzIHJhdGUgaWYgRFBMTCBpcyBieXBhc3NlZCAqLworCXYgPSBfX3Jhd19yZWFkbChkZC0+Y29udHJvbF9yZWcpOworCXYgJj0gZGQtPmVuYWJsZV9tYXNrOworCXYgPj49IF9fZmZzKGRkLT5lbmFibGVfbWFzayk7CisKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJaWYgKHYgPT0gT01BUDJYWFhfRU5fRFBMTF9MUEJZUEFTUyB8fAorCQkgICAgdiA9PSBPTUFQMlhYWF9FTl9EUExMX0ZSQllQQVNTKQorCQkJcmV0dXJuIGRkLT5jbGtfYnlwYXNzLT5yYXRlOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJaWYgKHYgPT0gT01BUDNYWFhfRU5fRFBMTF9MUEJZUEFTUyB8fAorCQkgICAgdiA9PSBPTUFQM1hYWF9FTl9EUExMX0ZSQllQQVNTKQorCQkJcmV0dXJuIGRkLT5jbGtfYnlwYXNzLT5yYXRlOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJaWYgKHYgPT0gT01BUDRYWFhfRU5fRFBMTF9MUEJZUEFTUyB8fAorCQkgICAgdiA9PSBPTUFQNFhYWF9FTl9EUExMX0ZSQllQQVNTIHx8CisJCSAgICB2ID09IE9NQVA0WFhYX0VOX0RQTExfTU5CWVBBU1MpCisJCQlyZXR1cm4gZGQtPmNsa19ieXBhc3MtPnJhdGU7CisJfQorCisJdiA9IF9fcmF3X3JlYWRsKGRkLT5tdWx0X2RpdjFfcmVnKTsKKwlkcGxsX211bHQgPSB2ICYgZGQtPm11bHRfbWFzazsKKwlkcGxsX211bHQgPj49IF9fZmZzKGRkLT5tdWx0X21hc2spOworCWRwbGxfZGl2ID0gdiAmIGRkLT5kaXYxX21hc2s7CisJZHBsbF9kaXYgPj49IF9fZmZzKGRkLT5kaXYxX21hc2spOworCisJZHBsbF9jbGsgPSAobG9uZyBsb25nKWRkLT5jbGtfcmVmLT5yYXRlICogZHBsbF9tdWx0OworCWRvX2RpdihkcGxsX2NsaywgZHBsbF9kaXYgKyAxKTsKKworCXJldHVybiBkcGxsX2NsazsKK30KKworLyogRFBMTCByYXRlIHJvdW5kaW5nIGNvZGUgKi8KKworLyoqCisgKiBvbWFwMl9kcGxsX3NldF9yYXRlX3RvbGVyYW5jZTogc2V0IHRoZSBlcnJvciB0b2xlcmFuY2UgZHVyaW5nIHJhdGUgcm91bmRpbmcKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiB0aGUgRFBMTAorICogQHRvbGVyYW5jZTogbWF4aW11bSByYXRlIGVycm9yIHRvbGVyYW5jZQorICoKKyAqIFNldCB0aGUgbWF4aW11bSBEUExMIHJhdGUgZXJyb3IgdG9sZXJhbmNlIGZvciB0aGUgcmF0ZSByb3VuZGluZworICogYWxnb3JpdGhtLiAgVGhlIHJhdGUgdG9sZXJhbmNlIGlzIGFuIGF0dGVtcHQgdG8gYmFsYW5jZSBEUExMIHBvd2VyCisgKiBzYXZpbmcgKHRoZSBsZWFzdCBkaXZpZGVyIHZhbHVlICJuIikgdnMuIHJhdGUgZmlkZWxpdHkgKHRoZSBsZWFzdAorICogZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBkZXNpcmVkIERQTEwgdGFyZ2V0IHJhdGUgYW5kIHRoZSByb3VuZGVkCisgKiByYXRlIG91dCBvZiB0aGUgYWxnb3JpdGhtKS4gIFNvLCBpbmNyZWFzaW5nIHRoZSB0b2xlcmFuY2UgaXMgbGlrZWx5CisgKiB0byBkZWNyZWFzZSBEUExMIHBvd2VyIGNvbnN1bXB0aW9uIGFuZCBpbmNyZWFzZSBEUExMIHJhdGUgZXJyb3IuCisgKiBSZXR1cm5zIC1FSU5WQUwgaWYgcHJvdmlkZWQgYSBudWxsIGNsb2NrIHB0ciBvciBhIGNsayB0aGF0IGlzIG5vdCBhCisgKiBEUExMOyBvciAwIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IG9tYXAyX2RwbGxfc2V0X3JhdGVfdG9sZXJhbmNlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgaW50IHRvbGVyYW5jZSkKK3sKKwlpZiAoIWNsayB8fCAhY2xrLT5kcGxsX2RhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJY2xrLT5kcGxsX2RhdGEtPnJhdGVfdG9sZXJhbmNlID0gdG9sZXJhbmNlOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogb21hcDJfZHBsbF9yb3VuZF9yYXRlIC0gcm91bmQgYSB0YXJnZXQgcmF0ZSBmb3IgYW4gT01BUCBEUExMCisgKiBAY2xrOiBzdHJ1Y3QgY2xrICogZm9yIGEgRFBMTAorICogQHRhcmdldF9yYXRlOiBkZXNpcmVkIERQTEwgY2xvY2sgcmF0ZQorICoKKyAqIEdpdmVuIGEgRFBMTCwgYSBkZXNpcmVkIHRhcmdldCByYXRlLCBhbmQgYSByYXRlIHRvbGVyYW5jZSwgcm91bmQKKyAqIHRoZSB0YXJnZXQgcmF0ZSB0byBhIHBvc3NpYmxlLCBwcm9ncmFtbWFibGUgcmF0ZSBmb3IgdGhpcyBEUExMLgorICogUmF0ZSB0b2xlcmFuY2UgaXMgYXNzdW1lZCB0byBiZSBzZXQgYnkgdGhlIGNhbGxlciBiZWZvcmUgdGhpcworICogZnVuY3Rpb24gaXMgY2FsbGVkLiAgQXR0ZW1wdHMgdG8gc2VsZWN0IHRoZSBtaW5pbXVtIHBvc3NpYmxlIG4KKyAqIHdpdGhpbiB0aGUgdG9sZXJhbmNlIHRvIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbi4gIFN0b3JlcyB0aGUKKyAqIGNvbXB1dGVkIChtLCBuKSBpbiB0aGUgRFBMTCdzIGRwbGxfZGF0YSBzdHJ1Y3R1cmUgc28gc2V0X3JhdGUoKQorICogd2lsbCBub3QgbmVlZCB0byBjYWxsIHRoaXMgKGV4cGVuc2l2ZSkgZnVuY3Rpb24gYWdhaW4uICBSZXR1cm5zIH4wCisgKiBpZiB0aGUgdGFyZ2V0IHJhdGUgY2Fubm90IGJlIHJvdW5kZWQsIGVpdGhlciBiZWNhdXNlIHRoZSByYXRlIGlzCisgKiB0b28gbG93IG9yIGJlY2F1c2UgdGhlIHJhdGUgdG9sZXJhbmNlIGlzIHNldCB0b28gdGlnaHRseTsgb3IgdGhlCisgKiByb3VuZGVkIHJhdGUgdXBvbiBzdWNjZXNzLgorICovCitsb25nIG9tYXAyX2RwbGxfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUpCit7CisJaW50IG0sIG4sIHIsIGUsIHNjYWxlZF9tYXhfbTsKKwl1bnNpZ25lZCBsb25nIHNjYWxlZF9ydF9ycCwgbmV3X3JhdGU7CisJaW50IG1pbl9lID0gLTEsIG1pbl9lX20gPSAtMSwgbWluX2VfbiA9IC0xOworCXN0cnVjdCBkcGxsX2RhdGEgKmRkOworCisJaWYgKCFjbGsgfHwgIWNsay0+ZHBsbF9kYXRhKQorCQlyZXR1cm4gfjA7CisKKwlkZCA9IGNsay0+ZHBsbF9kYXRhOworCisJcHJfZGVidWcoImNsb2NrOiBzdGFydGluZyBEUExMIHJvdW5kX3JhdGUgZm9yIGNsb2NrICVzLCB0YXJnZXQgcmF0ZSAiCisJCSAiJWxkXG4iLCBjbGstPm5hbWUsIHRhcmdldF9yYXRlKTsKKworCXNjYWxlZF9ydF9ycCA9IHRhcmdldF9yYXRlIC8gKGRkLT5jbGtfcmVmLT5yYXRlIC8gRFBMTF9TQ0FMRV9GQUNUT1IpOworCXNjYWxlZF9tYXhfbSA9IGRkLT5tYXhfbXVsdGlwbGllciAqIERQTExfU0NBTEVfRkFDVE9SOworCisJZGQtPmxhc3Rfcm91bmRlZF9yYXRlID0gMDsKKworCWZvciAobiA9IGRkLT5taW5fZGl2aWRlcjsgbiA8PSBkZC0+bWF4X2RpdmlkZXI7IG4rKykgeworCisJCS8qIElzIHRoZSAoaW5wdXQgY2xrLCBkaXZpZGVyKSBwYWlyIHZhbGlkIGZvciB0aGUgRFBMTD8gKi8KKwkJciA9IF9kcGxsX3Rlc3RfZmludChjbGssIG4pOworCQlpZiAociA9PSBEUExMX0ZJTlRfVU5ERVJGTE9XKQorCQkJYnJlYWs7CisJCWVsc2UgaWYgKHIgPT0gRFBMTF9GSU5UX0lOVkFMSUQpCisJCQljb250aW51ZTsKKworCQkvKiBDb21wdXRlIHRoZSBzY2FsZWQgRFBMTCBtdWx0aXBsaWVyLCBiYXNlZCBvbiB0aGUgZGl2aWRlciAqLworCQltID0gc2NhbGVkX3J0X3JwICogbjsKKworCQkvKgorCQkgKiBTaW5jZSB3ZSdyZSBjb3VudGluZyBuIHVwLCBhIG0gb3ZlcmZsb3cgbWVhbnMgd2UKKwkJICogY2FuIGJhaWwgb3V0IGNvbXBsZXRlbHkgKHNpbmNlIGFzIG4gaW5jcmVhc2VzIGluCisJCSAqIHRoZSBuZXh0IGl0ZXJhdGlvbiwgdGhlcmUncyBubyB3YXkgdGhhdCBtIGNhbgorCQkgKiBpbmNyZWFzZSBiZXlvbmQgdGhlIGN1cnJlbnQgbSkKKwkJICovCisJCWlmIChtID4gc2NhbGVkX21heF9tKQorCQkJYnJlYWs7CisKKwkJciA9IF9kcGxsX3Rlc3RfbXVsdCgmbSwgbiwgJm5ld19yYXRlLCB0YXJnZXRfcmF0ZSwKKwkJCQkgICAgZGQtPmNsa19yZWYtPnJhdGUpOworCisJCS8qIG0gY2FuJ3QgYmUgc2V0IGxvdyBlbm91Z2ggZm9yIHRoaXMgbiAtIHRyeSB3aXRoIGEgbGFyZ2VyIG4gKi8KKwkJaWYgKHIgPT0gRFBMTF9NVUxUX1VOREVSRkxPVykKKwkJCWNvbnRpbnVlOworCisJCWUgPSB0YXJnZXRfcmF0ZSAtIG5ld19yYXRlOworCQlwcl9kZWJ1ZygiY2xvY2s6IG4gPSAlZDogbSA9ICVkOiByYXRlIGVycm9yIGlzICVkICIKKwkJCSAiKG5ld19yYXRlID0gJWxkKVxuIiwgbiwgbSwgZSwgbmV3X3JhdGUpOworCisJCWlmIChtaW5fZSA9PSAtMSB8fAorCQkgICAgbWluX2UgPj0gKGludCkoYWJzKGUpIC0gZGQtPnJhdGVfdG9sZXJhbmNlKSkgeworCQkJbWluX2UgPSBlOworCQkJbWluX2VfbSA9IG07CisJCQltaW5fZV9uID0gbjsKKworCQkJcHJfZGVidWcoImNsb2NrOiBmb3VuZCBuZXcgbGVhc3QgZXJyb3IgJWRcbiIsIG1pbl9lKTsKKworCQkJLyogV2UgZm91bmQgZ29vZCBzZXR0aW5ncyAtLSBiYWlsIG91dCBub3cgKi8KKwkJCWlmIChtaW5fZSA8PSBkZC0+cmF0ZV90b2xlcmFuY2UpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAobWluX2UgPCAwKSB7CisJCXByX2RlYnVnKCJjbG9jazogZXJyb3I6IHRhcmdldCByYXRlIG9yIHRvbGVyYW5jZSB0b28gbG93XG4iKTsKKwkJcmV0dXJuIH4wOworCX0KKworCWRkLT5sYXN0X3JvdW5kZWRfbSA9IG1pbl9lX207CisJZGQtPmxhc3Rfcm91bmRlZF9uID0gbWluX2VfbjsKKwlkZC0+bGFzdF9yb3VuZGVkX3JhdGUgPSBfZHBsbF9jb21wdXRlX25ld19yYXRlKGRkLT5jbGtfcmVmLT5yYXRlLAorCQkJCQkJICAgICAgIG1pbl9lX20sICBtaW5fZV9uKTsKKworCXByX2RlYnVnKCJjbG9jazogZmluYWwgbGVhc3QgZXJyb3I6IGUgPSAlZCwgbSA9ICVkLCBuID0gJWRcbiIsCisJCSBtaW5fZSwgbWluX2VfbSwgbWluX2Vfbik7CisJcHJfZGVidWcoImNsb2NrOiBmaW5hbCByYXRlOiAlbGQgICh0YXJnZXQgcmF0ZTogJWxkKVxuIiwKKwkJIGRkLT5sYXN0X3JvdW5kZWRfcmF0ZSwgdGFyZ2V0X3JhdGUpOworCisJcmV0dXJuIGRkLT5sYXN0X3JvdW5kZWRfcmF0ZTsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCmluZGV4IDc1OWM3MmEuLmE2ZDBiMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKQEAgLTIsNyArMiw3IEBACiAgKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNS0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqICBDb250YWN0czoKICAqICBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CkBAIC0xNCwxMSArMTQsMTAgQEAKICAqLwogI3VuZGVmIERFQlVHCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CkBAIC0yOCwxMCArMjcsNyBAQAogI2luY2x1ZGUgPHBsYXQvY2xvY2tkb21haW4uaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvcHJjbS5oPgotI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgogCi0jaW5jbHVkZSA8cGxhdC9zZHJjLmg+Ci0jaW5jbHVkZSAic2RyYy5oIgogI2luY2x1ZGUgImNsb2NrLmgiCiAjaW5jbHVkZSAicHJtLmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgpAQCAtMzksMTQwICszNSw0NCBAQAogI2luY2x1ZGUgImNtLXJlZ2JpdHMtMjR4eC5oIgogI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgogCi0vKiBEUExMIHJhdGUgcm91bmRpbmc6IG1pbmltdW0gRFBMTCBtdWx0aXBsaWVyLCBkaXZpZGVyIHZhbHVlcyAqLwotI2RlZmluZSBEUExMX01JTl9NVUxUSVBMSUVSCQkxCi0jZGVmaW5lIERQTExfTUlOX0RJVklERVIJCTEKLQotLyogUG9zc2libGUgZXJyb3IgcmVzdWx0cyBmcm9tIF9kcGxsX3Rlc3RfbXVsdCAqLwotI2RlZmluZSBEUExMX01VTFRfVU5ERVJGTE9XCQktMQotCi0vKgotICogU2NhbGUgZmFjdG9yIHRvIG1pdGlnYXRlIHJvdW5kb2ZmIGVycm9ycyBpbiBEUExMIHJhdGUgcm91bmRpbmcuCi0gKiBUaGUgaGlnaGVyIHRoZSBzY2FsZSBmYWN0b3IsIHRoZSBncmVhdGVyIHRoZSByaXNrIG9mIGFyaXRobWV0aWMgb3ZlcmZsb3csCi0gKiBidXQgdGhlIGNsb3NlciB0aGUgcm91bmRlZCByYXRlIHRvIHRoZSB0YXJnZXQgcmF0ZS4gIERQTExfU0NBTEVfRkFDVE9SCi0gKiBtdXN0IGJlIGEgcG93ZXIgb2YgRFBMTF9TQ0FMRV9CQVNFLgotICovCi0jZGVmaW5lIERQTExfU0NBTEVfRkFDVE9SCQk2NAotI2RlZmluZSBEUExMX1NDQUxFX0JBU0UJCQkyCi0jZGVmaW5lIERQTExfUk9VTkRJTkdfVkFMCQkoKERQTExfU0NBTEVfQkFTRSAvIDIpICogXAotCQkJCQkgKERQTExfU0NBTEVfRkFDVE9SIC8gRFBMTF9TQ0FMRV9CQVNFKSkKLQotLyogRFBMTCB2YWxpZCBGaW50IGZyZXF1ZW5jeSBiYW5kIGxpbWl0cyAtIGZyb20gMzR4eCBUUk0gU2VjdGlvbiA0LjcuNi4yICovCi0jZGVmaW5lIERQTExfRklOVF9CQU5EMV9NSU4JCTc1MDAwMAotI2RlZmluZSBEUExMX0ZJTlRfQkFORDFfTUFYCQkyMTAwMDAwCi0jZGVmaW5lIERQTExfRklOVF9CQU5EMl9NSU4JCTc1MDAwMDAKLSNkZWZpbmUgRFBMTF9GSU5UX0JBTkQyX01BWAkJMjEwMDAwMDAKLQotLyogX2RwbGxfdGVzdF9maW50KCkgcmV0dXJuIGNvZGVzICovCi0jZGVmaW5lIERQTExfRklOVF9VTkRFUkZMT1cJCS0xCi0jZGVmaW5lIERQTExfRklOVF9JTlZBTElECQktMgotCiB1OCBjcHVfbWFzazsKIAotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBPTUFQMi8zLzQgc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIE9NQVAyKyBzcGVjaWZpYyBjbG9jayBmdW5jdGlvbnMKKyAqLwogCi12b2lkIG9tYXAyX2luaXRfZHBsbF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQotewotCXUzMiB2OwotCXN0cnVjdCBkcGxsX2RhdGEgKmRkOwotCi0JZGQgPSBjbGstPmRwbGxfZGF0YTsKLQlpZiAoIWRkKQotCQlyZXR1cm47Ci0KLQkvKiBSZXR1cm4gYnlwYXNzIHJhdGUgaWYgRFBMTCBpcyBieXBhc3NlZCAqLwotCXYgPSBfX3Jhd19yZWFkbChkZC0+Y29udHJvbF9yZWcpOwotCXYgJj0gZGQtPmVuYWJsZV9tYXNrOwotCXYgPj49IF9fZmZzKGRkLT5lbmFibGVfbWFzayk7Ci0KLQkvKiBSZXBhcmVudCBpbiBjYXNlIHRoZSBkcGxsIGlzIGluIGJ5cGFzcyAqLwotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCQlpZiAodiA9PSBPTUFQMlhYWF9FTl9EUExMX0xQQllQQVNTIHx8Ci0JCSAgICB2ID09IE9NQVAyWFhYX0VOX0RQTExfRlJCWVBBU1MpCi0JCQljbGtfcmVwYXJlbnQoY2xrLCBkZC0+Y2xrX2J5cGFzcyk7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewotCQlpZiAodiA9PSBPTUFQM1hYWF9FTl9EUExMX0xQQllQQVNTIHx8Ci0JCSAgICB2ID09IE9NQVAzWFhYX0VOX0RQTExfRlJCWVBBU1MpCi0JCQljbGtfcmVwYXJlbnQoY2xrLCBkZC0+Y2xrX2J5cGFzcyk7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewotCQlpZiAodiA9PSBPTUFQNFhYWF9FTl9EUExMX0xQQllQQVNTIHx8Ci0JCSAgICB2ID09IE9NQVA0WFhYX0VOX0RQTExfRlJCWVBBU1MgfHwKLQkJICAgIHYgPT0gT01BUDRYWFhfRU5fRFBMTF9NTkJZUEFTUykKLQkJCWNsa19yZXBhcmVudChjbGssIGRkLT5jbGtfYnlwYXNzKTsKLQl9Ci0JcmV0dXJuOwotfQorLyogUHJpdmF0ZSBmdW5jdGlvbnMgKi8KIAogLyoqCi0gKiBfb21hcDJ4eHhfY2xrX2NvbW1pdCAtIGNvbW1pdCBjbG9jayBwYXJlbnQvcmF0ZSBjaGFuZ2VzIGluIGhhcmR3YXJlCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICoKKyAqIF9vbWFwMl9tb2R1bGVfd2FpdF9yZWFkeSAtIHdhaXQgZm9yIGFuIE9NQVAgbW9kdWxlIHRvIGxlYXZlIElETEUKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiBiZWxvbmdpbmcgdG8gdGhlIG1vZHVsZQogICoKLSAqIElmIEBjbGsgaGFzIHRoZSBERUxBWUVEX0FQUCBmbGFnIHNldCwgbWVhbmluZyB0aGF0IHBhcmVudC9yYXRlIGNoYW5nZXMKLSAqIGRvbid0IHRha2UgZWZmZWN0IHVudGlsIHRoZSBWQUxJRF9DT05GSUcgYml0IGlzIHdyaXR0ZW4sIHdyaXRlIHRoZQotICogVkFMSURfQ09ORklHIGJpdCBhbmQgd2FpdCBmb3IgdGhlIHdyaXRlIHRvIGNvbXBsZXRlLiAgTm8gcmV0dXJuIHZhbHVlLgorICogSWYgdGhlIG5lY2Vzc2FyeSBjbG9ja3MgZm9yIHRoZSBPTUFQIGhhcmR3YXJlIElQIGJsb2NrIHRoYXQKKyAqIGNvcnJlc3BvbmRzIHRvIGNsb2NrIEBjbGsgYXJlIGVuYWJsZWQsIHRoZW4gd2FpdCBmb3IgdGhlIG1vZHVsZSB0bworICogaW5kaWNhdGUgcmVhZGluZXNzIChpLmUuLCB0byBsZWF2ZSBJRExFKS4gIFRoaXMgY29kZSBkb2VzIG5vdAorICogYmVsb25nIGluIHRoZSBjbG9jayBjb2RlIGFuZCB3aWxsIGJlIG1vdmVkIGluIHRoZSBtZWRpdW0gdGVybSB0bworICogbW9kdWxlLWRlcGVuZGVudCBjb2RlLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi1zdGF0aWMgdm9pZCBfb21hcDJ4eHhfY2xrX2NvbW1pdChzdHJ1Y3QgY2xrICpjbGspCitzdGF0aWMgdm9pZCBfb21hcDJfbW9kdWxlX3dhaXRfcmVhZHkoc3RydWN0IGNsayAqY2xrKQogewotCWlmICghY3B1X2lzX29tYXAyNHh4KCkpCi0JCXJldHVybjsKKwl2b2lkIF9faW9tZW0gKmNvbXBhbmlvbl9yZWcsICppZGxlc3RfcmVnOworCXU4IG90aGVyX2JpdCwgaWRsZXN0X2JpdCwgaWRsZXN0X3ZhbDsKIAotCWlmICghKGNsay0+ZmxhZ3MgJiBERUxBWUVEX0FQUCkpCi0JCXJldHVybjsKLQotCXBybV93cml0ZV9tb2RfcmVnKE9NQVAyNFhYX1ZBTElEX0NPTkZJRywgT01BUDI0WFhfR1JfTU9ELAotCQlPTUFQMl9QUkNNX0NMS0NGR19DVFJMX09GRlNFVCk7Ci0JLyogT0NQIGJhcnJpZXIgKi8KLQlwcm1fcmVhZF9tb2RfcmVnKE9NQVAyNFhYX0dSX01PRCwgT01BUDJfUFJDTV9DTEtDRkdfQ1RSTF9PRkZTRVQpOwotfQotCi0vKgotICogX2RwbGxfdGVzdF9maW50IC0gdGVzdCB3aGV0aGVyIGFuIEZpbnQgdmFsdWUgaXMgdmFsaWQgZm9yIHRoZSBEUExMCi0gKiBAY2xrOiBEUExMIHN0cnVjdCBjbGsgdG8gdGVzdAotICogQG46IGRpdmlkZXIgdmFsdWUgKE4pIHRvIHRlc3QKLSAqCi0gKiBUZXN0cyB3aGV0aGVyIGEgcGFydGljdWxhciBkaXZpZGVyIEBuIHdpbGwgcmVzdWx0IGluIGEgdmFsaWQgRFBMTAotICogaW50ZXJuYWwgY2xvY2sgZnJlcXVlbmN5IEZpbnQuIFNlZSB0aGUgMzR4eCBUUk0gNC43LjYuMiAiRFBMTCBKaXR0ZXIKLSAqIENvcnJlY3Rpb24iLiAgUmV0dXJucyAwIGlmIE9LLCAtMSBpZiB0aGUgZW5jbG9zaW5nIGxvb3AgY2FuIHRlcm1pbmF0ZQotICogKGFzc3VtaW5nIHRoYXQgaXQgaXMgY291bnRpbmcgTiB1cHdhcmRzKSwgb3IgLTIgaWYgdGhlIGVuY2xvc2luZyBsb29wCi0gKiBzaG91bGQgc2tpcCB0byB0aGUgbmV4dCBpdGVyYXRpb24gKGFnYWluIGFzc3VtaW5nIE4gaXMgaW5jcmVhc2luZykuCi0gKi8KLXN0YXRpYyBpbnQgX2RwbGxfdGVzdF9maW50KHN0cnVjdCBjbGsgKmNsaywgdTggbikKLXsKLQlzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKLQlsb25nIGZpbnQ7Ci0JaW50IHJldCA9IDA7Ci0KLQlkZCA9IGNsay0+ZHBsbF9kYXRhOwotCi0JLyogRFBMTCBkaXZpZGVyIG11c3QgcmVzdWx0IGluIGEgdmFsaWQgaml0dGVyIGNvcnJlY3Rpb24gdmFsICovCi0JZmludCA9IGNsay0+cGFyZW50LT5yYXRlIC8gKG4gKyAxKTsKLQlpZiAoZmludCA8IERQTExfRklOVF9CQU5EMV9NSU4pIHsKLQotCQlwcl9kZWJ1ZygicmVqZWN0aW5nIG49JWQgZHVlIHRvIEZpbnQgZmFpbHVyZSwgIgotCQkJICJsb3dlcmluZyBtYXhfZGl2aWRlclxuIiwgbik7Ci0JCWRkLT5tYXhfZGl2aWRlciA9IG47Ci0JCXJldCA9IERQTExfRklOVF9VTkRFUkZMT1c7Ci0KLQl9IGVsc2UgaWYgKGZpbnQgPiBEUExMX0ZJTlRfQkFORDFfTUFYICYmCi0JCSAgIGZpbnQgPCBEUExMX0ZJTlRfQkFORDJfTUlOKSB7Ci0KLQkJcHJfZGVidWcoInJlamVjdGluZyBuPSVkIGR1ZSB0byBGaW50IGZhaWx1cmVcbiIsIG4pOwotCQlyZXQgPSBEUExMX0ZJTlRfSU5WQUxJRDsKLQotCX0gZWxzZSBpZiAoZmludCA+IERQTExfRklOVF9CQU5EMl9NQVgpIHsKLQotCQlwcl9kZWJ1ZygicmVqZWN0aW5nIG49JWQgZHVlIHRvIEZpbnQgZmFpbHVyZSwgIgotCQkJICJib29zdGluZyBtaW5fZGl2aWRlclxuIiwgbik7Ci0JCWRkLT5taW5fZGl2aWRlciA9IG47Ci0JCXJldCA9IERQTExfRklOVF9JTlZBTElEOwotCisJLyogTm90IGFsbCBtb2R1bGVzIGhhdmUgbXVsdGlwbGUgY2xvY2tzIHRoYXQgdGhlaXIgSURMRVNUIGRlcGVuZHMgb24gKi8KKwlpZiAoY2xrLT5vcHMtPmZpbmRfY29tcGFuaW9uKSB7CisJCWNsay0+b3BzLT5maW5kX2NvbXBhbmlvbihjbGssICZjb21wYW5pb25fcmVnLCAmb3RoZXJfYml0KTsKKwkJaWYgKCEoX19yYXdfcmVhZGwoY29tcGFuaW9uX3JlZykgJiAoMSA8PCBvdGhlcl9iaXQpKSkKKwkJCXJldHVybjsKIAl9CiAKLQlyZXR1cm4gcmV0OworCWNsay0+b3BzLT5maW5kX2lkbGVzdChjbGssICZpZGxlc3RfcmVnLCAmaWRsZXN0X2JpdCwgJmlkbGVzdF92YWwpOworCisJb21hcDJfY21fd2FpdF9pZGxlc3QoaWRsZXN0X3JlZywgKDEgPDwgaWRsZXN0X2JpdCksIGlkbGVzdF92YWwsCisJCQkgICAgIGNsay0+bmFtZSk7CiB9CiAKKy8qIFB1YmxpYyBmdW5jdGlvbnMgKi8KKwogLyoqCiAgKiBvbWFwMl9pbml0X2Nsa19jbGtkbSAtIGxvb2sgdXAgYSBjbG9ja2RvbWFpbiBuYW1lLCBzdG9yZSBwb2ludGVyIGluIGNsawogICogQGNsazogT01BUCBjbG9jayBzdHJ1Y3QgcHRyIHRvIHVzZQpAQCAtMTgxLDcgKzgxLDYgQEAKICAqIGNsb2NrZG9tYWluIHBvaW50ZXIsIGFuZCBzYXZlIGl0IGludG8gdGhlIHN0cnVjdCBjbGsuICBJbnRlbmRlZCB0byBiZQogICogY2FsbGVkIGR1cmluZyBjbGtfcmVnaXN0ZXIoKS4gIE5vIHJldHVybiB2YWx1ZS4KICAqLwotI2lmbmRlZiBDT05GSUdfQVJDSF9PTUFQNCAvKiBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBjbGtkbSBmL3cgaXMgaW4gcGxhY2UgKi8KIHZvaWQgb21hcDJfaW5pdF9jbGtfY2xrZG0oc3RydWN0IGNsayAqY2xrKQogewogCXN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG07CkBAIC0xOTksMTE3ICs5OCw2IEBACiAJCQkgImNsa2RtICVzXG4iLCBjbGstPm5hbWUsIGNsay0+Y2xrZG1fbmFtZSk7CiAJfQogfQotI2VuZGlmCi0KLS8qKgotICogb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50IC0gc2V0IGEgY2xrc2VsIGNsaydzIHBhcmVudCBmaWVsZCBmcm9tIHRoZSBoYXJkd2FyZQotICogQGNsazogT01BUCBjbG9jayBzdHJ1Y3QgcHRyIHRvIHVzZQotICoKLSAqIEdpdmVuIGEgcG9pbnRlciB0byBhIHNvdXJjZS1zZWxlY3RhYmxlIHN0cnVjdCBjbGssIHJlYWQgdGhlIGhhcmR3YXJlCi0gKiByZWdpc3RlciBhbmQgZGV0ZXJtaW5lIHdoYXQgaXRzIHBhcmVudCBpcyBjdXJyZW50bHkgc2V0IHRvLiAgVXBkYXRlIHRoZQotICogY2xrLT5wYXJlbnQgZmllbGQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgY2xrIHB0ci4KLSAqLwotdm9pZCBvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQotewotCWNvbnN0IHN0cnVjdCBjbGtzZWwgKmNsa3M7Ci0JY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlICpjbGtyOwotCXUzMiByLCBmb3VuZCA9IDA7Ci0KLQlpZiAoIWNsay0+Y2xrc2VsKQotCQlyZXR1cm47Ci0KLQlyID0gX19yYXdfcmVhZGwoY2xrLT5jbGtzZWxfcmVnKSAmIGNsay0+Y2xrc2VsX21hc2s7Ci0JciA+Pj0gX19mZnMoY2xrLT5jbGtzZWxfbWFzayk7Ci0KLQlmb3IgKGNsa3MgPSBjbGstPmNsa3NlbDsgY2xrcy0+cGFyZW50ICYmICFmb3VuZDsgY2xrcysrKSB7Ci0JCWZvciAoY2xrciA9IGNsa3MtPnJhdGVzOyBjbGtyLT5kaXYgJiYgIWZvdW5kOyBjbGtyKyspIHsKLQkJCWlmICgoY2xrci0+ZmxhZ3MgJiBjcHVfbWFzaykgJiYgKGNsa3ItPnZhbCA9PSByKSkgewotCQkJCWlmIChjbGstPnBhcmVudCAhPSBjbGtzLT5wYXJlbnQpIHsKLQkJCQkJcHJfZGVidWcoImNsb2NrOiBpbml0ZWQgJXMgcGFyZW50ICIKLQkJCQkJCSAidG8gJXMgKHdhcyAlcylcbiIsCi0JCQkJCQkgY2xrLT5uYW1lLCBjbGtzLT5wYXJlbnQtPm5hbWUsCi0JCQkJCQkgKChjbGstPnBhcmVudCkgPwotCQkJCQkJICBjbGstPnBhcmVudC0+bmFtZSA6ICJOVUxMIikpOwotCQkJCQljbGtfcmVwYXJlbnQoY2xrLCBjbGtzLT5wYXJlbnQpOwotCQkJCX07Ci0JCQkJZm91bmQgPSAxOwotCQkJfQotCQl9Ci0JfQotCi0JaWYgKCFmb3VuZCkKLQkJcHJpbnRrKEtFUk5fRVJSICJjbG9jazogaW5pdCBwYXJlbnQ6IGNvdWxkIG5vdCBmaW5kICIKLQkJICAgICAgICJyZWd2YWwgJTB4IGZvciBjbG9jayAlc1xuIiwgciwgIGNsay0+bmFtZSk7Ci0KLQlyZXR1cm47Ci19Ci0KLS8qKgotICogb21hcDJfZ2V0X2RwbGxfcmF0ZSAtIHJldHVybnMgdGhlIGN1cnJlbnQgRFBMTCBDTEtPVVQgcmF0ZQotICogQGNsazogc3RydWN0IGNsayAqIG9mIGEgRFBMTAotICoKLSAqIERQTExzIGNhbiBiZSBsb2NrZWQgb3IgYnlwYXNzZWQgLSBiYXNpY2FsbHksIGVuYWJsZWQgb3IgZGlzYWJsZWQuCi0gKiBXaGVuIGxvY2tlZCwgdGhlIERQTEwgb3V0cHV0IGRlcGVuZHMgb24gdGhlIE0gYW5kIE4gdmFsdWVzLiAgV2hlbgotICogYnlwYXNzZWQsIG9uIE9NQVAyeHh4LCB0aGUgb3V0cHV0IHJhdGUgaXMgZWl0aGVyIHRoZSAzMktpSHogY2xvY2sKLSAqIG9yIHN5c19jbGsuICBCeXBhc3MgcmF0ZXMgb24gT01BUDMgZGVwZW5kIG9uIHRoZSBEUExMOiBEUExMcyAxIGFuZAotICogMiBhcmUgYnlwYXNzZWQgd2l0aCBkcGxsMV9mY2xrIGFuZCBkcGxsMl9mY2xrIHJlc3BlY3RpdmVseQotICogKGdlbmVyYXRlZCBieSBEUExMMyksIHdoaWxlIERQTEwgMywgNCwgYW5kIDUgYnlwYXNzIHJhdGVzIGFyZSBzeXNfY2xrLgotICogUmV0dXJucyB0aGUgY3VycmVudCBEUExMIENMS09VVCByYXRlICgqbm90KiBDTEtPVVRYMikgaWYgdGhlIERQTEwgaXMKLSAqIGxvY2tlZCwgb3IgdGhlIGFwcHJvcHJpYXRlIGJ5cGFzcyByYXRlIGlmIHRoZSBEUExMIGlzIGJ5cGFzc2VkLCBvciAwCi0gKiBpZiB0aGUgY2xvY2sgQGNsayBpcyBub3QgYSBEUExMLgotICovCi11MzIgb21hcDJfZ2V0X2RwbGxfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JbG9uZyBsb25nIGRwbGxfY2xrOwotCXUzMiBkcGxsX211bHQsIGRwbGxfZGl2LCB2OwotCXN0cnVjdCBkcGxsX2RhdGEgKmRkOwotCi0JZGQgPSBjbGstPmRwbGxfZGF0YTsKLQlpZiAoIWRkKQotCQlyZXR1cm4gMDsKLQotCS8qIFJldHVybiBieXBhc3MgcmF0ZSBpZiBEUExMIGlzIGJ5cGFzc2VkICovCi0JdiA9IF9fcmF3X3JlYWRsKGRkLT5jb250cm9sX3JlZyk7Ci0JdiAmPSBkZC0+ZW5hYmxlX21hc2s7Ci0JdiA+Pj0gX19mZnMoZGQtPmVuYWJsZV9tYXNrKTsKLQotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCQlpZiAodiA9PSBPTUFQMlhYWF9FTl9EUExMX0xQQllQQVNTIHx8Ci0JCSAgICB2ID09IE9NQVAyWFhYX0VOX0RQTExfRlJCWVBBU1MpCi0JCQlyZXR1cm4gZGQtPmNsa19ieXBhc3MtPnJhdGU7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewotCQlpZiAodiA9PSBPTUFQM1hYWF9FTl9EUExMX0xQQllQQVNTIHx8Ci0JCSAgICB2ID09IE9NQVAzWFhYX0VOX0RQTExfRlJCWVBBU1MpCi0JCQlyZXR1cm4gZGQtPmNsa19ieXBhc3MtPnJhdGU7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewotCQlpZiAodiA9PSBPTUFQNFhYWF9FTl9EUExMX0xQQllQQVNTIHx8Ci0JCSAgICB2ID09IE9NQVA0WFhYX0VOX0RQTExfRlJCWVBBU1MgfHwKLQkJICAgIHYgPT0gT01BUDRYWFhfRU5fRFBMTF9NTkJZUEFTUykKLQkJCXJldHVybiBkZC0+Y2xrX2J5cGFzcy0+cmF0ZTsKLQl9Ci0KLQl2ID0gX19yYXdfcmVhZGwoZGQtPm11bHRfZGl2MV9yZWcpOwotCWRwbGxfbXVsdCA9IHYgJiBkZC0+bXVsdF9tYXNrOwotCWRwbGxfbXVsdCA+Pj0gX19mZnMoZGQtPm11bHRfbWFzayk7Ci0JZHBsbF9kaXYgPSB2ICYgZGQtPmRpdjFfbWFzazsKLQlkcGxsX2RpdiA+Pj0gX19mZnMoZGQtPmRpdjFfbWFzayk7Ci0KLQlkcGxsX2NsayA9IChsb25nIGxvbmcpZGQtPmNsa19yZWYtPnJhdGUgKiBkcGxsX211bHQ7Ci0JZG9fZGl2KGRwbGxfY2xrLCBkcGxsX2RpdiArIDEpOwotCi0JcmV0dXJuIGRwbGxfY2xrOwotfQotCi0vKgotICogVXNlZCBmb3IgY2xvY2tzIHRoYXQgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgcGFyZW50IGNsb2NrLAotICogZGl2aWRlZCBieSBzb21lIGZhY3RvcgotICovCi11bnNpZ25lZCBsb25nIG9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlXQVJOX09OKCFjbGstPmZpeGVkX2Rpdik7Ci0KLQlyZXR1cm4gY2xrLT5wYXJlbnQtPnJhdGUgLyBjbGstPmZpeGVkX2RpdjsKLX0KIAogLyoqCiAgKiBvbWFwMl9jbGtfZGZsdF9maW5kX2NvbXBhbmlvbiAtIGZpbmQgY29tcGFuaW9uIGNsb2NrIHRvIEBjbGsKQEAgLTM1MSw3ICsxMzksOCBAQAogICogb21hcDJfY2xrX2RmbHRfZmluZF9pZGxlc3QgLSBmaW5kIENNX0lETEVTVCByZWcgdmEsIGJpdCBzaGlmdCBmb3IgQGNsawogICogQGNsazogc3RydWN0IGNsayAqIHRvIGZpbmQgSURMRVNUIGluZm8gZm9yCiAgKiBAaWRsZXN0X3JlZzogdm9pZCBfX2lvbWVtICoqIHRvIHJldHVybiB0aGUgQ01fSURMRVNUIHZhIGluCi0gKiBAaWRsZXN0X2JpdDogdTggKiogdG8gcmV0dXJuIHRoZSBDTV9JRExFU1QgYml0IHNoaWZ0IGluCisgKiBAaWRsZXN0X2JpdDogdTggKiB0byByZXR1cm4gdGhlIENNX0lETEVTVCBiaXQgc2hpZnQgaW4KKyAqIEBpZGxlc3RfdmFsOiB1OCAqIHRvIHJldHVybiB0aGUgaWRsZSBzdGF0dXMgaW5kaWNhdG9yCiAgKgogICogUmV0dXJuIHRoZSBDTV9JRExFU1QgcmVnaXN0ZXIgYWRkcmVzcyBhbmQgYml0IHNoaWZ0IGNvcnJlc3BvbmRpbmcKICAqIHRvIHRoZSBtb2R1bGUgdGhhdCAib3ducyIgdGhpcyBjbG9jay4gIFRoaXMgZGVmYXVsdCBjb2RlIGFzc3VtZXMKQEAgLTM2MSw0MCArMTUwLDI2IEBACiAgKiBDTV9JRExFU1QyKS4gIFRoaXMgaXMgbm90IHRydWUgZm9yIGFsbCBtb2R1bGVzLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCiB2b2lkIG9tYXAyX2Nsa19kZmx0X2ZpbmRfaWRsZXN0KHN0cnVjdCBjbGsgKmNsaywgdm9pZCBfX2lvbWVtICoqaWRsZXN0X3JlZywKLQkJCQl1OCAqaWRsZXN0X2JpdCkKKwkJCQl1OCAqaWRsZXN0X2JpdCwgdTggKmlkbGVzdF92YWwpCiB7CiAJdTMyIHI7CiAKIAlyID0gKCgoX19mb3JjZSB1MzIpY2xrLT5lbmFibGVfcmVnICYgfjB4ZjApIHwgMHgyMCk7CiAJKmlkbGVzdF9yZWcgPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilyOwogCSppZGxlc3RfYml0ID0gY2xrLT5lbmFibGVfYml0OwotfQogCi0vKioKLSAqIG9tYXAyX21vZHVsZV93YWl0X3JlYWR5IC0gd2FpdCBmb3IgYW4gT01BUCBtb2R1bGUgdG8gbGVhdmUgSURMRQotICogQGNsazogc3RydWN0IGNsayAqIGJlbG9uZ2luZyB0byB0aGUgbW9kdWxlCi0gKgotICogSWYgdGhlIG5lY2Vzc2FyeSBjbG9ja3MgZm9yIHRoZSBPTUFQIGhhcmR3YXJlIElQIGJsb2NrIHRoYXQKLSAqIGNvcnJlc3BvbmRzIHRvIGNsb2NrIEBjbGsgYXJlIGVuYWJsZWQsIHRoZW4gd2FpdCBmb3IgdGhlIG1vZHVsZSB0bwotICogaW5kaWNhdGUgcmVhZGluZXNzIChpLmUuLCB0byBsZWF2ZSBJRExFKS4gIFRoaXMgY29kZSBkb2VzIG5vdAotICogYmVsb25nIGluIHRoZSBjbG9jayBjb2RlIGFuZCB3aWxsIGJlIG1vdmVkIGluIHRoZSBtZWRpdW0gdGVybSB0bwotICogbW9kdWxlLWRlcGVuZGVudCBjb2RlLiAgTm8gcmV0dXJuIHZhbHVlLgotICovCi1zdGF0aWMgdm9pZCBvbWFwMl9tb2R1bGVfd2FpdF9yZWFkeShzdHJ1Y3QgY2xrICpjbGspCi17Ci0Jdm9pZCBfX2lvbWVtICpjb21wYW5pb25fcmVnLCAqaWRsZXN0X3JlZzsKLQl1OCBvdGhlcl9iaXQsIGlkbGVzdF9iaXQ7CisJLyoKKwkgKiAyNHh4IHVzZXMgMCB0byBpbmRpY2F0ZSBub3QgcmVhZHksIGFuZCAxIHRvIGluZGljYXRlIHJlYWR5LgorCSAqIDM0eHggcmV2ZXJzZXMgdGhpcywganVzdCB0byBrZWVwIHVzIG9uIG91ciB0b2VzCisJICogQU0zNXh4IHVzZXMgYm90aCwgZGVwZW5kaW5nIG9uIHRoZSBtb2R1bGUuCisJICovCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCQkqaWRsZXN0X3ZhbCA9IE9NQVAyNFhYX0NNX0lETEVTVF9WQUw7CisJZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCSppZGxlc3RfdmFsID0gT01BUDM0WFhfQ01fSURMRVNUX1ZBTDsKKwllbHNlCisJCUJVRygpOwogCi0JLyogTm90IGFsbCBtb2R1bGVzIGhhdmUgbXVsdGlwbGUgY2xvY2tzIHRoYXQgdGhlaXIgSURMRVNUIGRlcGVuZHMgb24gKi8KLQlpZiAoY2xrLT5vcHMtPmZpbmRfY29tcGFuaW9uKSB7Ci0JCWNsay0+b3BzLT5maW5kX2NvbXBhbmlvbihjbGssICZjb21wYW5pb25fcmVnLCAmb3RoZXJfYml0KTsKLQkJaWYgKCEoX19yYXdfcmVhZGwoY29tcGFuaW9uX3JlZykgJiAoMSA8PCBvdGhlcl9iaXQpKSkKLQkJCXJldHVybjsKLQl9Ci0KLQljbGstPm9wcy0+ZmluZF9pZGxlc3QoY2xrLCAmaWRsZXN0X3JlZywgJmlkbGVzdF9iaXQpOwotCi0Jb21hcDJfY21fd2FpdF9pZGxlc3QoaWRsZXN0X3JlZywgKDEgPDwgaWRsZXN0X2JpdCksIGNsay0+bmFtZSk7CiB9CiAKIGludCBvbWFwMl9kZmx0X2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQpAQCAtNDE2LDcgKzE5MSw3IEBACiAJdiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7IC8qIE9DUCBiYXJyaWVyICovCiAKIAlpZiAoY2xrLT5vcHMtPmZpbmRfaWRsZXN0KQotCQlvbWFwMl9tb2R1bGVfd2FpdF9yZWFkeShjbGspOworCQlfb21hcDJfbW9kdWxlX3dhaXRfcmVhZHkoY2xrKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDU2LDMzNiArMjMxLDEwOCBAQAogCS5kaXNhYmxlCT0gb21hcDJfZGZsdF9jbGtfZGlzYWJsZSwKIH07CiAKLS8qIEVuYWJsZXMgY2xvY2sgd2l0aG91dCBjb25zaWRlcmluZyBwYXJlbnQgZGVwZW5kZW5jaWVzIG9yIHVzZSBjb3VudAotICogUkVWSVNJVDogTWF5YmUgY2hhbmdlIHRoaXMgdG8gdXNlIGNsay0+ZW5hYmxlIGxpa2Ugb24gb21hcDE/CisvKioKKyAqIG9tYXAyX2Nsa19kaXNhYmxlIC0gZGlzYWJsZSBhIGNsb2NrLCBpZiB0aGUgc3lzdGVtIGlzIG5vdCB1c2luZyBpdAorICogQGNsazogc3RydWN0IGNsayAqIHRvIGRpc2FibGUKKyAqCisgKiBEZWNyZW1lbnRzIHRoZSB1c2Vjb3VudCBvbiBzdHJ1Y3QgY2xrIEBjbGsuICBJZiB0aGVyZSBhcmUgbm8gdXNlcnMKKyAqIGxlZnQsIGNhbGwgdGhlIGNsa29wcy1zcGVjaWZpYyBjbG9jayBkaXNhYmxlIGZ1bmN0aW9uIHRvIGRpc2FibGUgaXQKKyAqIGluIGhhcmR3YXJlLiAgSWYgdGhlIGNsb2NrIGlzIHBhcnQgb2YgYSBjbG9ja2RvbWFpbiAod2hpY2ggdGhleSBhbGwKKyAqIHNob3VsZCBiZSksIHJlcXVlc3QgdGhhdCB0aGUgY2xvY2tkb21haW4gYmUgZGlzYWJsZWQuICAoSXQgdG9vIGhhcworICogYSB1c2Vjb3VudCwgYW5kIHNvIHdpbGwgbm90IGJlIGRpc2FibGVkIGluIHRoZSBoYXJkd2FyZSB1bnRpbCBpdCBubworICogbG9uZ2VyIGhhcyBhbnkgdXNlcnMuKSAgSWYgdGhlIGNsb2NrIGhhcyBhIHBhcmVudCBjbG9jayAobW9zdCBvZgorICogdGhlbSBkbyksIHRoZW4gY2FsbCBvdXJzZWx2ZXMsIHJlY3Vyc2luZyBvbiB0aGUgcGFyZW50IGNsb2NrLiAgVGhpcworICogY2FuIGNhdXNlIGFuIGVudGlyZSBicmFuY2ggb2YgdGhlIGNsb2NrIHRyZWUgdG8gYmUgcG93ZXJlZCBvZmYgYnkKKyAqIHNpbXBseSBkaXNhYmxpbmcgb25lIGNsb2NrLiAgSW50ZW5kZWQgdG8gYmUgY2FsbGVkIHdpdGggdGhlIGNsb2NrZndfbG9jaworICogc3BpbmxvY2sgaGVsZC4gIE5vIHJldHVybiB2YWx1ZS4KICAqLwotc3RhdGljIGludCBfb21hcDJfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIGNsay0+b3BzLT5lbmFibGUoY2xrKTsKLX0KLQotLyogRGlzYWJsZXMgY2xvY2sgd2l0aG91dCBjb25zaWRlcmluZyBwYXJlbnQgZGVwZW5kZW5jaWVzIG9yIHVzZSBjb3VudCAqLwotc3RhdGljIHZvaWQgX29tYXAyX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQljbGstPm9wcy0+ZGlzYWJsZShjbGspOwotfQotCiB2b2lkIG9tYXAyX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlpZiAoY2xrLT51c2Vjb3VudCA+IDAgJiYgISgtLWNsay0+dXNlY291bnQpKSB7Ci0JCV9vbWFwMl9jbGtfZGlzYWJsZShjbGspOwotCQlpZiAoY2xrLT5wYXJlbnQpCi0JCQlvbWFwMl9jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7Ci0jaWZuZGVmIENPTkZJR19BUkNIX09NQVA0IC8qIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIGNsa2RtIGYvdyBpcyBpbiBwbGFjZSAqLwotCQlpZiAoY2xrLT5jbGtkbSkKLQkJCW9tYXAyX2Nsa2RtX2Nsa19kaXNhYmxlKGNsay0+Y2xrZG0sIGNsayk7Ci0jZW5kaWYKLQorCWlmIChjbGstPnVzZWNvdW50ID09IDApIHsKKwkJV0FSTigxLCAiY2xvY2s6ICVzOiBvbWFwMl9jbGtfZGlzYWJsZSgpIGNhbGxlZCwgYnV0IHVzZWNvdW50ICIKKwkJICAgICAiYWxyZWFkeSAwPyIsIGNsay0+bmFtZSk7CisJCXJldHVybjsKIAl9Ci19CiAKLWludCBvbWFwMl9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpbnQgcmV0ID0gMDsKKwlwcl9kZWJ1ZygiY2xvY2s6ICVzOiBkZWNyZW1lbnRpbmcgdXNlY291bnRcbiIsIGNsay0+bmFtZSk7CiAKLQlpZiAoY2xrLT51c2Vjb3VudCsrID09IDApIHsKLSNpZm5kZWYgQ09ORklHX0FSQ0hfT01BUDQgLyogRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgY2xrZG0gZi93IGlzIGluIHBsYWNlICovCi0JCWlmIChjbGstPmNsa2RtKQotCQkJb21hcDJfY2xrZG1fY2xrX2VuYWJsZShjbGstPmNsa2RtLCBjbGspOwotI2VuZGlmCisJY2xrLT51c2Vjb3VudC0tOwogCi0JCWlmIChjbGstPnBhcmVudCkgewotCQkJcmV0ID0gb21hcDJfY2xrX2VuYWJsZShjbGstPnBhcmVudCk7Ci0JCQlpZiAocmV0KQotCQkJCWdvdG8gZXJyOwotCQl9CisJaWYgKGNsay0+dXNlY291bnQgPiAwKQorCQlyZXR1cm47CiAKLQkJcmV0ID0gX29tYXAyX2Nsa19lbmFibGUoY2xrKTsKLQkJaWYgKHJldCkgewotCQkJaWYgKGNsay0+cGFyZW50KQotCQkJCW9tYXAyX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKKwlwcl9kZWJ1ZygiY2xvY2s6ICVzOiBkaXNhYmxpbmcgaW4gaGFyZHdhcmVcbiIsIGNsay0+bmFtZSk7CiAKLQkJCWdvdG8gZXJyOwotCQl9Ci0JfQotCXJldHVybiByZXQ7CisJY2xrLT5vcHMtPmRpc2FibGUoY2xrKTsKIAotZXJyOgotI2lmbmRlZiBDT05GSUdfQVJDSF9PTUFQNCAvKiBGSVhNRTogUmVtb3ZlIHRoaXMgb25jZSBjbGtkbSBmL3cgaXMgaW4gcGxhY2UgKi8KIAlpZiAoY2xrLT5jbGtkbSkKIAkJb21hcDJfY2xrZG1fY2xrX2Rpc2FibGUoY2xrLT5jbGtkbSwgY2xrKTsKLSNlbmRpZgotCWNsay0+dXNlY291bnQtLTsKLQlyZXR1cm4gcmV0OwotfQogCi0vKgotICogVXNlZCBmb3IgY2xvY2tzIHRoYXQgYXJlIHBhcnQgb2YgQ0xLU0VMX3h5eiBnb3Zlcm5lZCBjbG9ja3MuCi0gKiBSRVZJU0lUOiBNYXliZSBjaGFuZ2UgdG8gdXNlIGNsay0+ZW5hYmxlKCkgZnVuY3Rpb25zIGxpa2Ugb24gb21hcDE/Ci0gKi8KLXVuc2lnbmVkIGxvbmcgb21hcDJfY2xrc2VsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyByYXRlOwotCXUzMiBkaXYgPSAwOwotCi0JcHJfZGVidWcoImNsb2NrOiByZWNhbGMnaW5nIGNsa3NlbCBjbGsgJXNcbiIsIGNsay0+bmFtZSk7Ci0KLQlkaXYgPSBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3IoY2xrKTsKLQlpZiAoZGl2ID09IDApCi0JCXJldHVybiBjbGstPnJhdGU7Ci0KLQlyYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXY7Ci0KLQlwcl9kZWJ1ZygiY2xvY2s6IG5ldyBjbG9jayByYXRlIGlzICVsZCAoZGl2ICVkKVxuIiwgcmF0ZSwgZGl2KTsKLQotCXJldHVybiByYXRlOworCWlmIChjbGstPnBhcmVudCkKKwkJb21hcDJfY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOwogfQogCiAvKioKLSAqIG9tYXAyX2dldF9jbGtzZWxfYnlfcGFyZW50IC0gcmV0dXJuIGNsa3NlbCBzdHJ1Y3QgZm9yIGEgZ2l2ZW4gY2xrICYgcGFyZW50Ci0gKiBAY2xrOiBPTUFQIHN0cnVjdCBjbGsgcHRyIHRvIGluc3BlY3QKLSAqIEBzcmNfY2xrOiBPTUFQIHN0cnVjdCBjbGsgcHRyIG9mIHRoZSBwYXJlbnQgY2xrIHRvIHNlYXJjaCBmb3IKKyAqIG9tYXAyX2Nsa19lbmFibGUgLSByZXF1ZXN0IHRoYXQgdGhlIHN5c3RlbSBlbmFibGUgYSBjbG9jaworICogQGNsazogc3RydWN0IGNsayAqIHRvIGVuYWJsZQogICoKLSAqIFNjYW4gdGhlIHN0cnVjdCBjbGtzZWwgYXJyYXkgYXNzb2NpYXRlZCB3aXRoIHRoZSBjbG9jayB0byBmaW5kCi0gKiB0aGUgZWxlbWVudCBhc3NvY2lhdGVkIHdpdGggdGhlIHN1cHBsaWVkIHBhcmVudCBjbG9jayBhZGRyZXNzLgotICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBjbGtzZWwgb24gc3VjY2VzcyBvciBOVUxMIG9uIGVycm9yLgorICogSW5jcmVtZW50cyB0aGUgdXNlY291bnQgb24gc3RydWN0IGNsayBAY2xrLiAgSWYgdGhlcmUgd2VyZSBubyB1c2VycworICogcHJldmlvdXNseSwgdGhlbiByZWN1cnNlIHVwIHRoZSBjbG9jayB0cmVlLCBlbmFibGluZyBhbGwgb2YgdGhlCisgKiBjbG9jaydzIHBhcmVudHMgYW5kIGFsbCBvZiB0aGUgcGFyZW50IGNsb2NrZG9tYWlucywgYW5kIGZpbmFsbHksCisgKiBlbmFibGluZyBAY2xrJ3MgY2xvY2tkb21haW4sIGFuZCBAY2xrIGl0c2VsZi4gIEludGVuZGVkIHRvIGJlCisgKiBjYWxsZWQgd2l0aCB0aGUgY2xvY2tmd19sb2NrIHNwaW5sb2NrIGhlbGQuICBSZXR1cm5zIDAgdXBvbiBzdWNjZXNzCisgKiBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgdXBvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCAqb21hcDJfZ2V0X2Nsa3NlbF9ieV9wYXJlbnQoc3RydWN0IGNsayAqY2xrLAotCQkJCQkJICAgICAgIHN0cnVjdCBjbGsgKnNyY19jbGspCitpbnQgb21hcDJfY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCiB7Ci0JY29uc3Qgc3RydWN0IGNsa3NlbCAqY2xrczsKKwlpbnQgcmV0OwogCi0JaWYgKCFjbGstPmNsa3NlbCkKLQkJcmV0dXJuIE5VTEw7CisJcHJfZGVidWcoImNsb2NrOiAlczogaW5jcmVtZW50aW5nIHVzZWNvdW50XG4iLCBjbGstPm5hbWUpOwogCi0JZm9yIChjbGtzID0gY2xrLT5jbGtzZWw7IGNsa3MtPnBhcmVudDsgY2xrcysrKSB7Ci0JCWlmIChjbGtzLT5wYXJlbnQgPT0gc3JjX2NsaykKLQkJCWJyZWFrOyAvKiBGb3VuZCB0aGUgcmVxdWVzdGVkIHBhcmVudCAqLwotCX0KKwljbGstPnVzZWNvdW50Kys7CiAKLQlpZiAoIWNsa3MtPnBhcmVudCkgewotCQlwcmludGsoS0VSTl9FUlIgImNsb2NrOiBDb3VsZCBub3QgZmluZCBwYXJlbnQgY2xvY2sgJXMgaW4gIgotCQkgICAgICAgImNsa3NlbCBhcnJheSBvZiBjbG9jayAlc1xuIiwgc3JjX2Nsay0+bmFtZSwKLQkJICAgICAgIGNsay0+bmFtZSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCXJldHVybiBjbGtzOwotfQotCi0vKioKLSAqIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlX2RpdiAtIGZpbmQgZGl2aXNvciBmb3IgdGhlIGdpdmVuIGNsb2NrIGFuZCByYXRlCi0gKiBAY2xrOiBPTUFQIHN0cnVjdCBjbGsgdG8gdXNlCi0gKiBAdGFyZ2V0X3JhdGU6IGRlc2lyZWQgY2xvY2sgcmF0ZQotICogQG5ld19kaXY6IHB0ciB0byB3aGVyZSB3ZSBzaG91bGQgc3RvcmUgdGhlIGRpdmlzb3IKLSAqCi0gKiBGaW5kcyAnYmVzdCcgZGl2aWRlciB2YWx1ZSBpbiBhbiBhcnJheSBiYXNlZCBvbiB0aGUgc291cmNlIGFuZCB0YXJnZXQKLSAqIHJhdGVzLiAgVGhlIGRpdmlkZXIgYXJyYXkgbXVzdCBiZSBzb3J0ZWQgd2l0aCBzbWFsbGVzdCBkaXZpZGVyIGZpcnN0LgotICogTm90ZSB0aGF0IHRoaXMgd2lsbCBub3Qgd29yayBmb3IgY2xvY2tzIHdoaWNoIGFyZSBwYXJ0IG9mIENPTkZJR19QQVJUSUNJUEFOVCwKLSAqIHRoZXkgYXJlIG9ubHkgc2V0dGFibGUgYXMgcGFydCBvZiB2aXJ0dWFsX3ByY20gc2V0LgotICoKLSAqIFJldHVybnMgdGhlIHJvdW5kZWQgY2xvY2sgcmF0ZSBvciByZXR1cm5zIDB4ZmZmZmZmZmYgb24gZXJyb3IuCi0gKi8KLXUzMiBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZV9kaXYoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHRhcmdldF9yYXRlLAotCQkJCXUzMiAqbmV3X2RpdikKLXsKLQl1bnNpZ25lZCBsb25nIHRlc3RfcmF0ZTsKLQljb25zdCBzdHJ1Y3QgY2xrc2VsICpjbGtzOwotCWNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSAqY2xrcjsKLQl1MzIgbGFzdF9kaXYgPSAwOwotCi0JcHJfZGVidWcoImNsb2NrOiBjbGtzZWxfcm91bmRfcmF0ZV9kaXY6ICVzIHRhcmdldF9yYXRlICVsZFxuIiwKLQkJIGNsay0+bmFtZSwgdGFyZ2V0X3JhdGUpOwotCi0JKm5ld19kaXYgPSAxOwotCi0JY2xrcyA9IG9tYXAyX2dldF9jbGtzZWxfYnlfcGFyZW50KGNsaywgY2xrLT5wYXJlbnQpOwotCWlmICghY2xrcykKLQkJcmV0dXJuIH4wOwotCi0JZm9yIChjbGtyID0gY2xrcy0+cmF0ZXM7IGNsa3ItPmRpdjsgY2xrcisrKSB7Ci0JCWlmICghKGNsa3ItPmZsYWdzICYgY3B1X21hc2spKQotCQkgICAgY29udGludWU7Ci0KLQkJLyogU2FuaXR5IGNoZWNrICovCi0JCWlmIChjbGtyLT5kaXYgPD0gbGFzdF9kaXYpCi0JCQlwcl9lcnIoImNsb2NrOiBjbGtzZWxfcmF0ZSB0YWJsZSBub3Qgc29ydGVkICIKLQkJCSAgICAgICAiZm9yIGNsb2NrICVzIiwgY2xrLT5uYW1lKTsKLQotCQlsYXN0X2RpdiA9IGNsa3ItPmRpdjsKLQotCQl0ZXN0X3JhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGNsa3ItPmRpdjsKLQotCQlpZiAodGVzdF9yYXRlIDw9IHRhcmdldF9yYXRlKQotCQkJYnJlYWs7IC8qIGZvdW5kIGl0ICovCi0JfQotCi0JaWYgKCFjbGtyLT5kaXYpIHsKLQkJcHJfZXJyKCJjbG9jazogQ291bGQgbm90IGZpbmQgZGl2aXNvciBmb3IgdGFyZ2V0ICIKLQkJICAgICAgICJyYXRlICVsZCBmb3IgY2xvY2sgJXMgcGFyZW50ICVzXG4iLCB0YXJnZXRfcmF0ZSwKLQkJICAgICAgIGNsay0+bmFtZSwgY2xrLT5wYXJlbnQtPm5hbWUpOwotCQlyZXR1cm4gfjA7Ci0JfQotCi0JKm5ld19kaXYgPSBjbGtyLT5kaXY7Ci0KLQlwcl9kZWJ1ZygiY2xvY2s6IG5ld19kaXYgPSAlZCwgbmV3X3JhdGUgPSAlbGRcbiIsICpuZXdfZGl2LAotCQkgKGNsay0+cGFyZW50LT5yYXRlIC8gY2xrci0+ZGl2KSk7Ci0KLQlyZXR1cm4gKGNsay0+cGFyZW50LT5yYXRlIC8gY2xrci0+ZGl2KTsKLX0KLQotLyoqCi0gKiBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSAtIGZpbmQgcm91bmRlZCByYXRlIGZvciB0aGUgZ2l2ZW4gY2xvY2sgYW5kIHJhdGUKLSAqIEBjbGs6IE9NQVAgc3RydWN0IGNsayB0byB1c2UKLSAqIEB0YXJnZXRfcmF0ZTogZGVzaXJlZCBjbG9jayByYXRlCi0gKgotICogQ29tcGF0aWJpbGl0eSB3cmFwcGVyIGZvciBPTUFQIGNsb2NrIGZyYW1ld29yawotICogRmluZHMgYmVzdCB0YXJnZXQgcmF0ZSBiYXNlZCBvbiB0aGUgc291cmNlIGNsb2NrIGFuZCBwb3NzaWJsZSBkaXZpZGVycy4KLSAqIHJhdGVzLiBUaGUgZGl2aWRlciBhcnJheSBtdXN0IGJlIHNvcnRlZCB3aXRoIHNtYWxsZXN0IGRpdmlkZXIgZmlyc3QuCi0gKiBOb3RlIHRoYXQgdGhpcyB3aWxsIG5vdCB3b3JrIGZvciBjbG9ja3Mgd2hpY2ggYXJlIHBhcnQgb2YgQ09ORklHX1BBUlRJQ0lQQU5ULAotICogdGhleSBhcmUgb25seSBzZXR0YWJsZSBhcyBwYXJ0IG9mIHZpcnR1YWxfcHJjbSBzZXQuCi0gKgotICogUmV0dXJucyB0aGUgcm91bmRlZCBjbG9jayByYXRlIG9yIHJldHVybnMgMHhmZmZmZmZmZiBvbiBlcnJvci4KLSAqLwotbG9uZyBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUpCi17Ci0JdTMyIG5ld19kaXY7Ci0KLQlyZXR1cm4gb21hcDJfY2xrc2VsX3JvdW5kX3JhdGVfZGl2KGNsaywgdGFyZ2V0X3JhdGUsICZuZXdfZGl2KTsKLX0KLQotCi0vKiBHaXZlbiBhIGNsb2NrIGFuZCBhIHJhdGUgYXBwbHkgYSBjbG9jayBzcGVjaWZpYyByb3VuZGluZyBmdW5jdGlvbiAqLwotbG9uZyBvbWFwMl9jbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQlpZiAoY2xrLT5yb3VuZF9yYXRlKQotCQlyZXR1cm4gY2xrLT5yb3VuZF9yYXRlKGNsaywgcmF0ZSk7Ci0KLQlpZiAoY2xrLT5mbGFncyAmIFJBVEVfRklYRUQpCi0JCXByaW50ayhLRVJOX0VSUiAiY2xvY2s6IGdlbmVyaWMgb21hcDJfY2xrX3JvdW5kX3JhdGUgY2FsbGVkICIKLQkJICAgICAgICJvbiBmaXhlZC1yYXRlIGNsb2NrICVzXG4iLCBjbGstPm5hbWUpOwotCi0JcmV0dXJuIGNsay0+cmF0ZTsKLX0KLQotLyoqCi0gKiBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcigpIC0gdHVybiBjbGtzZWwgZmllbGQgdmFsdWUgaW50byBpbnRlZ2VyIGRpdmlkZXIKLSAqIEBjbGs6IE9NQVAgc3RydWN0IGNsayB0byB1c2UKLSAqIEBmaWVsZF92YWw6IHJlZ2lzdGVyIGZpZWxkIHZhbHVlIHRvIGZpbmQKLSAqCi0gKiBHaXZlbiBhIHN0cnVjdCBjbGsgb2YgYSByYXRlLXNlbGVjdGFibGUgY2xrc2VsIGNsb2NrLCBhbmQgYSByZWdpc3RlciBmaWVsZAotICogdmFsdWUgdG8gc2VhcmNoIGZvciwgZmluZCB0aGUgY29ycmVzcG9uZGluZyBjbG9jayBkaXZpc29yLiAgVGhlIHJlZ2lzdGVyCi0gKiBmaWVsZCB2YWx1ZSBzaG91bGQgYmUgcHJlLW1hc2tlZCBhbmQgc2hpZnRlZCBkb3duIHNvIHRoZSBMU0IgaXMgYXQgYml0IDAKLSAqIGJlZm9yZSBjYWxsaW5nLiAgUmV0dXJucyAwIG9uIGVycm9yCi0gKi8KLXUzMiBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcihzdHJ1Y3QgY2xrICpjbGssIHUzMiBmaWVsZF92YWwpCi17Ci0JY29uc3Qgc3RydWN0IGNsa3NlbCAqY2xrczsKLQljb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgKmNsa3I7Ci0KLQljbGtzID0gb21hcDJfZ2V0X2Nsa3NlbF9ieV9wYXJlbnQoY2xrLCBjbGstPnBhcmVudCk7Ci0JaWYgKCFjbGtzKQorCWlmIChjbGstPnVzZWNvdW50ID4gMSkKIAkJcmV0dXJuIDA7CiAKLQlmb3IgKGNsa3IgPSBjbGtzLT5yYXRlczsgY2xrci0+ZGl2OyBjbGtyKyspIHsKLQkJaWYgKChjbGtyLT5mbGFncyAmIGNwdV9tYXNrKSAmJiAoY2xrci0+dmFsID09IGZpZWxkX3ZhbCkpCi0JCQlicmVhazsKKwlwcl9kZWJ1ZygiY2xvY2s6ICVzOiBlbmFibGluZyBpbiBoYXJkd2FyZVxuIiwgY2xrLT5uYW1lKTsKKworCWlmIChjbGstPnBhcmVudCkgeworCQlyZXQgPSBvbWFwMl9jbGtfZW5hYmxlKGNsay0+cGFyZW50KTsKKwkJaWYgKHJldCkgeworCQkJV0FSTigxLCAiY2xvY2s6ICVzOiBjb3VsZCBub3QgZW5hYmxlIHBhcmVudCAlczogJWRcbiIsCisJCQkgICAgIGNsay0+bmFtZSwgY2xrLT5wYXJlbnQtPm5hbWUsIHJldCk7CisJCQlnb3RvIG9jZV9lcnIxOworCQl9CiAJfQogCi0JaWYgKCFjbGtyLT5kaXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjbG9jazogQ291bGQgbm90IGZpbmQgZmllbGR2YWwgJWQgZm9yICIKLQkJICAgICAgICJjbG9jayAlcyBwYXJlbnQgJXNcbiIsIGZpZWxkX3ZhbCwgY2xrLT5uYW1lLAotCQkgICAgICAgY2xrLT5wYXJlbnQtPm5hbWUpOwotCQlyZXR1cm4gMDsKKwlpZiAoY2xrLT5jbGtkbSkgeworCQlyZXQgPSBvbWFwMl9jbGtkbV9jbGtfZW5hYmxlKGNsay0+Y2xrZG0sIGNsayk7CisJCWlmIChyZXQpIHsKKwkJCVdBUk4oMSwgImNsb2NrOiAlczogY291bGQgbm90IGVuYWJsZSBjbG9ja2RvbWFpbiAlczogIgorCQkJICAgICAiJWRcbiIsIGNsay0+bmFtZSwgY2xrLT5jbGtkbS0+bmFtZSwgcmV0KTsKKwkJCWdvdG8gb2NlX2VycjI7CisJCX0KIAl9CiAKLQlyZXR1cm4gY2xrci0+ZGl2OwotfQotCi0vKioKLSAqIG9tYXAyX2Rpdmlzb3JfdG9fY2xrc2VsKCkgLSB0dXJuIGNsa3NlbCBpbnRlZ2VyIGRpdmlzb3IgaW50byBhIGZpZWxkIHZhbHVlCi0gKiBAY2xrOiBPTUFQIHN0cnVjdCBjbGsgdG8gdXNlCi0gKiBAZGl2OiBpbnRlZ2VyIGRpdmlzb3IgdG8gc2VhcmNoIGZvcgotICoKLSAqIEdpdmVuIGEgc3RydWN0IGNsayBvZiBhIHJhdGUtc2VsZWN0YWJsZSBjbGtzZWwgY2xvY2ssIGFuZCBhIGNsb2NrIGRpdmlzb3IsCi0gKiBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyIGZpZWxkIHZhbHVlLiAgVGhlIHJldHVybiByZWdpc3RlciB2YWx1ZSBpcwotICogdGhlIHZhbHVlIGJlZm9yZSBsZWZ0LXNoaWZ0aW5nLiAgUmV0dXJucyB+MCBvbiBlcnJvcgotICovCi11MzIgb21hcDJfZGl2aXNvcl90b19jbGtzZWwoc3RydWN0IGNsayAqY2xrLCB1MzIgZGl2KQotewotCWNvbnN0IHN0cnVjdCBjbGtzZWwgKmNsa3M7Ci0JY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlICpjbGtyOwotCi0JLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwotCVdBUk5fT04oZGl2ID09IDApOwotCi0JY2xrcyA9IG9tYXAyX2dldF9jbGtzZWxfYnlfcGFyZW50KGNsaywgY2xrLT5wYXJlbnQpOwotCWlmICghY2xrcykKLQkJcmV0dXJuIH4wOwotCi0JZm9yIChjbGtyID0gY2xrcy0+cmF0ZXM7IGNsa3ItPmRpdjsgY2xrcisrKSB7Ci0JCWlmICgoY2xrci0+ZmxhZ3MgJiBjcHVfbWFzaykgJiYgKGNsa3ItPmRpdiA9PSBkaXYpKQotCQkJYnJlYWs7CisJcmV0ID0gY2xrLT5vcHMtPmVuYWJsZShjbGspOworCWlmIChyZXQpIHsKKwkJV0FSTigxLCAiY2xvY2s6ICVzOiBjb3VsZCBub3QgZW5hYmxlOiAlZFxuIiwgY2xrLT5uYW1lLCByZXQpOworCQlnb3RvIG9jZV9lcnIzOwogCX0KIAotCWlmICghY2xrci0+ZGl2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2xvY2s6IENvdWxkIG5vdCBmaW5kIGRpdmlzb3IgJWQgZm9yICIKLQkJICAgICAgICJjbG9jayAlcyBwYXJlbnQgJXNcbiIsIGRpdiwgY2xrLT5uYW1lLAotCQkgICAgICAgY2xrLT5wYXJlbnQtPm5hbWUpOwotCQlyZXR1cm4gfjA7Ci0JfQotCi0JcmV0dXJuIGNsa3ItPnZhbDsKLX0KLQotLyoqCi0gKiBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3IgLSBnZXQgY3VycmVudCBkaXZpZGVyIGFwcGxpZWQgdG8gcGFyZW50IGNsb2NrLgotICogQGNsazogT01BUCBzdHJ1Y3QgY2xrIHRvIHVzZS4KLSAqCi0gKiBSZXR1cm5zIHRoZSBpbnRlZ2VyIGRpdmlzb3IgdXBvbiBzdWNjZXNzIG9yIDAgb24gZXJyb3IuCi0gKi8KLXUzMiBvbWFwMl9jbGtzZWxfZ2V0X2Rpdmlzb3Ioc3RydWN0IGNsayAqY2xrKQotewotCXUzMiB2OwotCi0JaWYgKCFjbGstPmNsa3NlbF9tYXNrKQotCQlyZXR1cm4gMDsKLQotCXYgPSBfX3Jhd19yZWFkbChjbGstPmNsa3NlbF9yZWcpICYgY2xrLT5jbGtzZWxfbWFzazsKLQl2ID4+PSBfX2ZmcyhjbGstPmNsa3NlbF9tYXNrKTsKLQotCXJldHVybiBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcihjbGssIHYpOwotfQotCi1pbnQgb21hcDJfY2xrc2VsX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXUzMiB2LCBmaWVsZF92YWwsIHZhbGlkcmF0ZSwgbmV3X2RpdiA9IDA7Ci0KLQlpZiAoIWNsay0+Y2xrc2VsX21hc2spCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdmFsaWRyYXRlID0gb21hcDJfY2xrc2VsX3JvdW5kX3JhdGVfZGl2KGNsaywgcmF0ZSwgJm5ld19kaXYpOwotCWlmICh2YWxpZHJhdGUgIT0gcmF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlmaWVsZF92YWwgPSBvbWFwMl9kaXZpc29yX3RvX2Nsa3NlbChjbGssIG5ld19kaXYpOwotCWlmIChmaWVsZF92YWwgPT0gfjApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdiA9IF9fcmF3X3JlYWRsKGNsay0+Y2xrc2VsX3JlZyk7Ci0JdiAmPSB+Y2xrLT5jbGtzZWxfbWFzazsKLQl2IHw9IGZpZWxkX3ZhbCA8PCBfX2ZmcyhjbGstPmNsa3NlbF9tYXNrKTsKLQlfX3Jhd193cml0ZWwodiwgY2xrLT5jbGtzZWxfcmVnKTsKLQl2ID0gX19yYXdfcmVhZGwoY2xrLT5jbGtzZWxfcmVnKTsgLyogT0NQIGJhcnJpZXIgKi8KLQotCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gbmV3X2RpdjsKLQotCV9vbWFwMnh4eF9jbGtfY29tbWl0KGNsayk7Ci0KIAlyZXR1cm4gMDsKLX0KIAorb2NlX2VycjM6CisJaWYgKGNsay0+Y2xrZG0pCisJCW9tYXAyX2Nsa2RtX2Nsa19kaXNhYmxlKGNsay0+Y2xrZG0sIGNsayk7CitvY2VfZXJyMjoKKwlpZiAoY2xrLT5wYXJlbnQpCisJCW9tYXAyX2Nsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKK29jZV9lcnIxOgorCWNsay0+dXNlY291bnQtLTsKKworCXJldHVybiByZXQ7Cit9CiAKIC8qIFNldCB0aGUgY2xvY2sgcmF0ZSBmb3IgYSBjbG9jayBzb3VyY2UgKi8KIGludCBvbWFwMl9jbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCkBAIC03OTQsMTEgKzM0MSw2IEBACiAKIAlwcl9kZWJ1ZygiY2xvY2s6IHNldF9yYXRlIGZvciBjbG9jayAlcyB0byByYXRlICVsZFxuIiwgY2xrLT5uYW1lLCByYXRlKTsKIAotCS8qIENPTkZJR19QQVJUSUNJUEFOVCBjbG9ja3MgYXJlIGNoYW5nZWQgb25seSBpbiBzZXRzIHZpYSB0aGUKLQkgICByYXRlIHRhYmxlIG1lY2hhbmlzbSwgZHJpdmVuIGJ5IG1wdV9zcGVlZCAgKi8KLQlpZiAoY2xrLT5mbGFncyAmIENPTkZJR19QQVJUSUNJUEFOVCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkvKiBkcGxsX2NrLCBjb3JlX2NrLCB2aXJ0X3ByY21fc2V0OyBwbHVzIGFsbCBjbGtzZWwgY2xvY2tzICovCiAJaWYgKGNsay0+c2V0X3JhdGUpCiAJCXJldCA9IGNsay0+c2V0X3JhdGUoY2xrLCByYXRlKTsKQEAgLTgwNiwyNzAgKzM0OCwzMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qCi0gKiBDb252ZXJ0cyBlbmNvZGVkIGNvbnRyb2wgcmVnaXN0ZXIgYWRkcmVzcyBpbnRvIGEgZnVsbCBhZGRyZXNzCi0gKiBPbiBlcnJvciwgdGhlIHJldHVybiB2YWx1ZSAocGFyZW50X2Rpdikgd2lsbCBiZSAwLgotICovCi1zdGF0aWMgdTMyIF9vbWFwMl9jbGtzZWxfZ2V0X3NyY19maWVsZChzdHJ1Y3QgY2xrICpzcmNfY2xrLCBzdHJ1Y3QgY2xrICpjbGssCi0JCQkJICAgICAgIHUzMiAqZmllbGRfdmFsKQotewotCWNvbnN0IHN0cnVjdCBjbGtzZWwgKmNsa3M7Ci0JY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlICpjbGtyOwotCi0JY2xrcyA9IG9tYXAyX2dldF9jbGtzZWxfYnlfcGFyZW50KGNsaywgc3JjX2Nsayk7Ci0JaWYgKCFjbGtzKQotCQlyZXR1cm4gMDsKLQotCWZvciAoY2xrciA9IGNsa3MtPnJhdGVzOyBjbGtyLT5kaXY7IGNsa3IrKykgewotCQlpZiAoY2xrci0+ZmxhZ3MgJiBjcHVfbWFzayAmJiBjbGtyLT5mbGFncyAmIERFRkFVTFRfUkFURSkKLQkJCWJyZWFrOyAvKiBGb3VuZCB0aGUgZGVmYXVsdCByYXRlIGZvciB0aGlzIHBsYXRmb3JtICovCi0JfQotCi0JaWYgKCFjbGtyLT5kaXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjbG9jazogQ291bGQgbm90IGZpbmQgZGVmYXVsdCByYXRlIGZvciAiCi0JCSAgICAgICAiY2xvY2sgJXMgcGFyZW50ICVzXG4iLCBjbGstPm5hbWUsCi0JCSAgICAgICBzcmNfY2xrLT5wYXJlbnQtPm5hbWUpOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuLiAgQWRkIGEgY2xrc2VsIG1hc2sgdG8gdGhlIHN0cnVjdCBjbGsuICovCi0JV0FSTl9PTihjbGstPmNsa3NlbF9tYXNrID09IDApOwotCi0JKmZpZWxkX3ZhbCA9IGNsa3ItPnZhbDsKLQotCXJldHVybiBjbGtyLT5kaXY7Ci19Ci0KIGludCBvbWFwMl9jbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKm5ld19wYXJlbnQpCiB7Ci0JdTMyIGZpZWxkX3ZhbCwgdiwgcGFyZW50X2RpdjsKLQotCWlmIChjbGstPmZsYWdzICYgQ09ORklHX1BBUlRJQ0lQQU5UKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWlmICghY2xrLT5jbGtzZWwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcGFyZW50X2RpdiA9IF9vbWFwMl9jbGtzZWxfZ2V0X3NyY19maWVsZChuZXdfcGFyZW50LCBjbGssICZmaWVsZF92YWwpOwotCWlmICghcGFyZW50X2RpdikKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNsay0+cGFyZW50ID09IG5ld19wYXJlbnQpCisJCXJldHVybiAwOwogCi0JLyogU2V0IG5ldyBzb3VyY2UgdmFsdWUgKHByZXZpb3VzIGRpdmlkZXJzIGlmIGFueSBpbiBlZmZlY3QpICovCi0JdiA9IF9fcmF3X3JlYWRsKGNsay0+Y2xrc2VsX3JlZyk7Ci0JdiAmPSB+Y2xrLT5jbGtzZWxfbWFzazsKLQl2IHw9IGZpZWxkX3ZhbCA8PCBfX2ZmcyhjbGstPmNsa3NlbF9tYXNrKTsKLQlfX3Jhd193cml0ZWwodiwgY2xrLT5jbGtzZWxfcmVnKTsKLQl2ID0gX19yYXdfcmVhZGwoY2xrLT5jbGtzZWxfcmVnKTsgICAgLyogT0NQIGJhcnJpZXIgKi8KLQotCV9vbWFwMnh4eF9jbGtfY29tbWl0KGNsayk7Ci0KLQljbGtfcmVwYXJlbnQoY2xrLCBuZXdfcGFyZW50KTsKLQotCS8qIENMS1NFTCBjbG9ja3MgZm9sbG93IHRoZWlyIHBhcmVudHMnIHJhdGVzLCBkaXZpZGVkIGJ5IGEgZGl2aXNvciAqLwotCWNsay0+cmF0ZSA9IG5ld19wYXJlbnQtPnJhdGU7Ci0KLQlpZiAocGFyZW50X2RpdiA+IDApCi0JCWNsay0+cmF0ZSAvPSBwYXJlbnRfZGl2OwotCi0JcHJfZGVidWcoImNsb2NrOiBzZXQgcGFyZW50IG9mICVzIHRvICVzIChuZXcgcmF0ZSAlbGQpXG4iLAotCQkgY2xrLT5uYW1lLCBjbGstPnBhcmVudC0+bmFtZSwgY2xrLT5yYXRlKTsKLQotCXJldHVybiAwOworCXJldHVybiBvbWFwMl9jbGtzZWxfc2V0X3BhcmVudChjbGssIG5ld19wYXJlbnQpOwogfQogCi0vKiBEUExMIHJhdGUgcm91bmRpbmcgY29kZSAqLworLyogT01BUDMvNCBub24tQ09SRSBEUExMIGNsa29wcyAqLwogCi0vKioKLSAqIG9tYXAyX2RwbGxfc2V0X3JhdGVfdG9sZXJhbmNlOiBzZXQgdGhlIGVycm9yIHRvbGVyYW5jZSBkdXJpbmcgcmF0ZSByb3VuZGluZwotICogQGNsazogc3RydWN0IGNsayAqIG9mIHRoZSBEUExMCi0gKiBAdG9sZXJhbmNlOiBtYXhpbXVtIHJhdGUgZXJyb3IgdG9sZXJhbmNlCi0gKgotICogU2V0IHRoZSBtYXhpbXVtIERQTEwgcmF0ZSBlcnJvciB0b2xlcmFuY2UgZm9yIHRoZSByYXRlIHJvdW5kaW5nCi0gKiBhbGdvcml0aG0uICBUaGUgcmF0ZSB0b2xlcmFuY2UgaXMgYW4gYXR0ZW1wdCB0byBiYWxhbmNlIERQTEwgcG93ZXIKLSAqIHNhdmluZyAodGhlIGxlYXN0IGRpdmlkZXIgdmFsdWUgIm4iKSB2cy4gcmF0ZSBmaWRlbGl0eSAodGhlIGxlYXN0Ci0gKiBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGRlc2lyZWQgRFBMTCB0YXJnZXQgcmF0ZSBhbmQgdGhlIHJvdW5kZWQKLSAqIHJhdGUgb3V0IG9mIHRoZSBhbGdvcml0aG0pLiAgU28sIGluY3JlYXNpbmcgdGhlIHRvbGVyYW5jZSBpcyBsaWtlbHkKLSAqIHRvIGRlY3JlYXNlIERQTEwgcG93ZXIgY29uc3VtcHRpb24gYW5kIGluY3JlYXNlIERQTEwgcmF0ZSBlcnJvci4KLSAqIFJldHVybnMgLUVJTlZBTCBpZiBwcm92aWRlZCBhIG51bGwgY2xvY2sgcHRyIG9yIGEgY2xrIHRoYXQgaXMgbm90IGEKLSAqIERQTEw7IG9yIDAgdXBvbiBzdWNjZXNzLgotICovCi1pbnQgb21hcDJfZHBsbF9zZXRfcmF0ZV90b2xlcmFuY2Uoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBpbnQgdG9sZXJhbmNlKQotewotCWlmICghY2xrIHx8ICFjbGstPmRwbGxfZGF0YSkKLQkJcmV0dXJuIC1FSU5WQUw7CisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKIAotCWNsay0+ZHBsbF9kYXRhLT5yYXRlX3RvbGVyYW5jZSA9IHRvbGVyYW5jZTsKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAzX25vbmNvcmVfZHBsbF9vcHMgPSB7CisJLmVuYWJsZQkJPSBvbWFwM19ub25jb3JlX2RwbGxfZW5hYmxlLAorCS5kaXNhYmxlCT0gb21hcDNfbm9uY29yZV9kcGxsX2Rpc2FibGUsCit9OwogCi0JcmV0dXJuIDA7Ci19CisjZW5kaWYKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX2RwbGxfY29tcHV0ZV9uZXdfcmF0ZSh1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlLAotCQkJCQkgICAgdW5zaWduZWQgaW50IG0sIHVuc2lnbmVkIGludCBuKQotewotCXVuc2lnbmVkIGxvbmcgbG9uZyBudW07Ci0KLQludW0gPSAodW5zaWduZWQgbG9uZyBsb25nKXBhcmVudF9yYXRlICogbTsKLQlkb19kaXYobnVtLCBuKTsKLQlyZXR1cm4gbnVtOwotfQogCiAvKgotICogX2RwbGxfdGVzdF9tdWx0IC0gdGVzdCBhIERQTEwgbXVsdGlwbGllciB2YWx1ZQotICogQG06IHBvaW50ZXIgdG8gdGhlIERQTEwgbSAobXVsdGlwbGllcikgdmFsdWUgdW5kZXIgdGVzdAotICogQG46IGN1cnJlbnQgRFBMTCBuIChkaXZpZGVyKSB2YWx1ZSB1bmRlciB0ZXN0Ci0gKiBAbmV3X3JhdGU6IHBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgdGhlIHJlc3VsdGluZyByb3VuZGVkIHJhdGUKLSAqIEB0YXJnZXRfcmF0ZTogdGhlIGRlc2lyZWQgRFBMTCByYXRlCi0gKiBAcGFyZW50X3JhdGU6IHRoZSBEUExMJ3MgcGFyZW50IGNsb2NrIHJhdGUKLSAqCi0gKiBUaGlzIGNvZGUgdGVzdHMgYSBEUExMIG11bHRpcGxpZXIgdmFsdWUsIGVuc3VyaW5nIHRoYXQgdGhlCi0gKiByZXN1bHRpbmcgcmF0ZSB3aWxsIG5vdCBiZSBoaWdoZXIgdGhhbiB0aGUgdGFyZ2V0X3JhdGUsIGFuZCB0aGF0Ci0gKiB0aGUgbXVsdGlwbGllciB2YWx1ZSBpdHNlbGYgaXMgdmFsaWQgZm9yIHRoZSBEUExMLiAgSW5pdGlhbGx5LCB0aGUKLSAqIGludGVnZXIgcG9pbnRlZCB0byBieSB0aGUgbSBhcmd1bWVudCBzaG91bGQgYmUgcHJlc2NhbGVkIGJ5Ci0gKiBtdWx0aXBseWluZyBieSBEUExMX1NDQUxFX0ZBQ1RPUi4gIFRoZSBjb2RlIHdpbGwgcmVwbGFjZSB0aGlzIHdpdGgKLSAqIGEgbm9uLXNjYWxlZCBtIHVwb24gcmV0dXJuLiAgVGhpcyBub24tc2NhbGVkIG0gd2lsbCByZXN1bHQgaW4gYQotICogbmV3X3JhdGUgYXMgY2xvc2UgYXMgcG9zc2libGUgdG8gdGFyZ2V0X3JhdGUgKGJ1dCBub3QgZ3JlYXRlciB0aGFuCi0gKiB0YXJnZXRfcmF0ZSkgZ2l2ZW4gdGhlIGN1cnJlbnQgKHBhcmVudF9yYXRlLCBuLCBwcmVzY2FsZWQgbSkKLSAqIHRyaXBsZS4gUmV0dXJucyBEUExMX01VTFRfVU5ERVJGTE9XIGluIHRoZSBldmVudCB0aGF0IHRoZQotICogbm9uLXNjYWxlZCBtIGF0dGVtcHRlZCB0byB1bmRlcmZsb3csIHdoaWNoIGNhbiBhbGxvdyB0aGUgY2FsbGluZwotICogZnVuY3Rpb24gdG8gYmFpbCBvdXQgZWFybHk7IG9yIDAgdXBvbiBzdWNjZXNzLgorICogT01BUDIrIGNsb2NrIHJlc2V0IGFuZCBpbml0IGZ1bmN0aW9ucwogICovCi1zdGF0aWMgaW50IF9kcGxsX3Rlc3RfbXVsdChpbnQgKm0sIGludCBuLCB1bnNpZ25lZCBsb25nICpuZXdfcmF0ZSwKLQkJCSAgIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUsCi0JCQkgICB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQotewotCWludCByID0gMCwgY2FycnkgPSAwOwotCi0JLyogVW5zY2FsZSBtIGFuZCByb3VuZCBpZiBuZWNlc3NhcnkgKi8KLQlpZiAoKm0gJSBEUExMX1NDQUxFX0ZBQ1RPUiA+PSBEUExMX1JPVU5ESU5HX1ZBTCkKLQkJY2FycnkgPSAxOwotCSptID0gKCptIC8gRFBMTF9TQ0FMRV9GQUNUT1IpICsgY2Fycnk7Ci0KLQkvKgotCSAqIFRoZSBuZXcgcmF0ZSBtdXN0IGJlIDw9IHRoZSB0YXJnZXQgcmF0ZSB0byBhdm9pZCBwcm9ncmFtbWluZwotCSAqIGEgcmF0ZSB0aGF0IGlzIGltcG9zc2libGUgZm9yIHRoZSBoYXJkd2FyZSB0byBoYW5kbGUKLQkgKi8KLQkqbmV3X3JhdGUgPSBfZHBsbF9jb21wdXRlX25ld19yYXRlKHBhcmVudF9yYXRlLCAqbSwgbik7Ci0JaWYgKCpuZXdfcmF0ZSA+IHRhcmdldF9yYXRlKSB7Ci0JCSgqbSktLTsKLQkJKm5ld19yYXRlID0gMDsKLQl9Ci0KLQkvKiBHdWFyZCBhZ2FpbnN0IG0gdW5kZXJmbG93ICovCi0JaWYgKCptIDwgRFBMTF9NSU5fTVVMVElQTElFUikgewotCQkqbSA9IERQTExfTUlOX01VTFRJUExJRVI7Ci0JCSpuZXdfcmF0ZSA9IDA7Ci0JCXIgPSBEUExMX01VTFRfVU5ERVJGTE9XOwotCX0KLQotCWlmICgqbmV3X3JhdGUgPT0gMCkKLQkJKm5ld19yYXRlID0gX2RwbGxfY29tcHV0ZV9uZXdfcmF0ZShwYXJlbnRfcmF0ZSwgKm0sIG4pOwotCi0JcmV0dXJuIHI7Ci19Ci0KLS8qKgotICogb21hcDJfZHBsbF9yb3VuZF9yYXRlIC0gcm91bmQgYSB0YXJnZXQgcmF0ZSBmb3IgYW4gT01BUCBEUExMCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogZm9yIGEgRFBMTAotICogQHRhcmdldF9yYXRlOiBkZXNpcmVkIERQTEwgY2xvY2sgcmF0ZQotICoKLSAqIEdpdmVuIGEgRFBMTCwgYSBkZXNpcmVkIHRhcmdldCByYXRlLCBhbmQgYSByYXRlIHRvbGVyYW5jZSwgcm91bmQKLSAqIHRoZSB0YXJnZXQgcmF0ZSB0byBhIHBvc3NpYmxlLCBwcm9ncmFtbWFibGUgcmF0ZSBmb3IgdGhpcyBEUExMLgotICogUmF0ZSB0b2xlcmFuY2UgaXMgYXNzdW1lZCB0byBiZSBzZXQgYnkgdGhlIGNhbGxlciBiZWZvcmUgdGhpcwotICogZnVuY3Rpb24gaXMgY2FsbGVkLiAgQXR0ZW1wdHMgdG8gc2VsZWN0IHRoZSBtaW5pbXVtIHBvc3NpYmxlIG4KLSAqIHdpdGhpbiB0aGUgdG9sZXJhbmNlIHRvIHJlZHVjZSBwb3dlciBjb25zdW1wdGlvbi4gIFN0b3JlcyB0aGUKLSAqIGNvbXB1dGVkIChtLCBuKSBpbiB0aGUgRFBMTCdzIGRwbGxfZGF0YSBzdHJ1Y3R1cmUgc28gc2V0X3JhdGUoKQotICogd2lsbCBub3QgbmVlZCB0byBjYWxsIHRoaXMgKGV4cGVuc2l2ZSkgZnVuY3Rpb24gYWdhaW4uICBSZXR1cm5zIH4wCi0gKiBpZiB0aGUgdGFyZ2V0IHJhdGUgY2Fubm90IGJlIHJvdW5kZWQsIGVpdGhlciBiZWNhdXNlIHRoZSByYXRlIGlzCi0gKiB0b28gbG93IG9yIGJlY2F1c2UgdGhlIHJhdGUgdG9sZXJhbmNlIGlzIHNldCB0b28gdGlnaHRseTsgb3IgdGhlCi0gKiByb3VuZGVkIHJhdGUgdXBvbiBzdWNjZXNzLgotICovCi1sb25nIG9tYXAyX2RwbGxfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUpCi17Ci0JaW50IG0sIG4sIHIsIGUsIHNjYWxlZF9tYXhfbTsKLQl1bnNpZ25lZCBsb25nIHNjYWxlZF9ydF9ycCwgbmV3X3JhdGU7Ci0JaW50IG1pbl9lID0gLTEsIG1pbl9lX20gPSAtMSwgbWluX2VfbiA9IC0xOwotCXN0cnVjdCBkcGxsX2RhdGEgKmRkOwotCi0JaWYgKCFjbGsgfHwgIWNsay0+ZHBsbF9kYXRhKQotCQlyZXR1cm4gfjA7Ci0KLQlkZCA9IGNsay0+ZHBsbF9kYXRhOwotCi0JcHJfZGVidWcoImNsb2NrOiBzdGFydGluZyBEUExMIHJvdW5kX3JhdGUgZm9yIGNsb2NrICVzLCB0YXJnZXQgcmF0ZSAiCi0JCSAiJWxkXG4iLCBjbGstPm5hbWUsIHRhcmdldF9yYXRlKTsKLQotCXNjYWxlZF9ydF9ycCA9IHRhcmdldF9yYXRlIC8gKGRkLT5jbGtfcmVmLT5yYXRlIC8gRFBMTF9TQ0FMRV9GQUNUT1IpOwotCXNjYWxlZF9tYXhfbSA9IGRkLT5tYXhfbXVsdGlwbGllciAqIERQTExfU0NBTEVfRkFDVE9SOwotCi0JZGQtPmxhc3Rfcm91bmRlZF9yYXRlID0gMDsKLQotCWZvciAobiA9IGRkLT5taW5fZGl2aWRlcjsgbiA8PSBkZC0+bWF4X2RpdmlkZXI7IG4rKykgewotCi0JCS8qIElzIHRoZSAoaW5wdXQgY2xrLCBkaXZpZGVyKSBwYWlyIHZhbGlkIGZvciB0aGUgRFBMTD8gKi8KLQkJciA9IF9kcGxsX3Rlc3RfZmludChjbGssIG4pOwotCQlpZiAociA9PSBEUExMX0ZJTlRfVU5ERVJGTE9XKQotCQkJYnJlYWs7Ci0JCWVsc2UgaWYgKHIgPT0gRFBMTF9GSU5UX0lOVkFMSUQpCi0JCQljb250aW51ZTsKLQotCQkvKiBDb21wdXRlIHRoZSBzY2FsZWQgRFBMTCBtdWx0aXBsaWVyLCBiYXNlZCBvbiB0aGUgZGl2aWRlciAqLwotCQltID0gc2NhbGVkX3J0X3JwICogbjsKLQotCQkvKgotCQkgKiBTaW5jZSB3ZSdyZSBjb3VudGluZyBuIHVwLCBhIG0gb3ZlcmZsb3cgbWVhbnMgd2UKLQkJICogY2FuIGJhaWwgb3V0IGNvbXBsZXRlbHkgKHNpbmNlIGFzIG4gaW5jcmVhc2VzIGluCi0JCSAqIHRoZSBuZXh0IGl0ZXJhdGlvbiwgdGhlcmUncyBubyB3YXkgdGhhdCBtIGNhbgotCQkgKiBpbmNyZWFzZSBiZXlvbmQgdGhlIGN1cnJlbnQgbSkKLQkJICovCi0JCWlmIChtID4gc2NhbGVkX21heF9tKQotCQkJYnJlYWs7Ci0KLQkJciA9IF9kcGxsX3Rlc3RfbXVsdCgmbSwgbiwgJm5ld19yYXRlLCB0YXJnZXRfcmF0ZSwKLQkJCQkgICAgZGQtPmNsa19yZWYtPnJhdGUpOwotCi0JCS8qIG0gY2FuJ3QgYmUgc2V0IGxvdyBlbm91Z2ggZm9yIHRoaXMgbiAtIHRyeSB3aXRoIGEgbGFyZ2VyIG4gKi8KLQkJaWYgKHIgPT0gRFBMTF9NVUxUX1VOREVSRkxPVykKLQkJCWNvbnRpbnVlOwotCi0JCWUgPSB0YXJnZXRfcmF0ZSAtIG5ld19yYXRlOwotCQlwcl9kZWJ1ZygiY2xvY2s6IG4gPSAlZDogbSA9ICVkOiByYXRlIGVycm9yIGlzICVkICIKLQkJCSAiKG5ld19yYXRlID0gJWxkKVxuIiwgbiwgbSwgZSwgbmV3X3JhdGUpOwotCi0JCWlmIChtaW5fZSA9PSAtMSB8fAotCQkgICAgbWluX2UgPj0gKGludCkoYWJzKGUpIC0gZGQtPnJhdGVfdG9sZXJhbmNlKSkgewotCQkJbWluX2UgPSBlOwotCQkJbWluX2VfbSA9IG07Ci0JCQltaW5fZV9uID0gbjsKLQotCQkJcHJfZGVidWcoImNsb2NrOiBmb3VuZCBuZXcgbGVhc3QgZXJyb3IgJWRcbiIsIG1pbl9lKTsKLQotCQkJLyogV2UgZm91bmQgZ29vZCBzZXR0aW5ncyAtLSBiYWlsIG91dCBub3cgKi8KLQkJCWlmIChtaW5fZSA8PSBkZC0+cmF0ZV90b2xlcmFuY2UpCi0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAobWluX2UgPCAwKSB7Ci0JCXByX2RlYnVnKCJjbG9jazogZXJyb3I6IHRhcmdldCByYXRlIG9yIHRvbGVyYW5jZSB0b28gbG93XG4iKTsKLQkJcmV0dXJuIH4wOwotCX0KLQotCWRkLT5sYXN0X3JvdW5kZWRfbSA9IG1pbl9lX207Ci0JZGQtPmxhc3Rfcm91bmRlZF9uID0gbWluX2VfbjsKLQlkZC0+bGFzdF9yb3VuZGVkX3JhdGUgPSBfZHBsbF9jb21wdXRlX25ld19yYXRlKGRkLT5jbGtfcmVmLT5yYXRlLAotCQkJCQkJICAgICAgIG1pbl9lX20sICBtaW5fZV9uKTsKLQotCXByX2RlYnVnKCJjbG9jazogZmluYWwgbGVhc3QgZXJyb3I6IGUgPSAlZCwgbSA9ICVkLCBuID0gJWRcbiIsCi0JCSBtaW5fZSwgbWluX2VfbSwgbWluX2Vfbik7Ci0JcHJfZGVidWcoImNsb2NrOiBmaW5hbCByYXRlOiAlbGQgICh0YXJnZXQgcmF0ZTogJWxkKVxuIiwKLQkJIGRkLT5sYXN0X3JvdW5kZWRfcmF0ZSwgdGFyZ2V0X3JhdGUpOwotCi0JcmV0dXJuIGRkLT5sYXN0X3JvdW5kZWRfcmF0ZTsKLX0KLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBPbWFwMiBjbG9jayByZXNldCBhbmQgaW5pdCBmdW5jdGlvbnMKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNpZmRlZiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MKIHZvaWQgb21hcDJfY2xrX2Rpc2FibGVfdW51c2VkKHN0cnVjdCBjbGsgKmNsaykKQEAgLTEwODYsOSArMzkwLDExMCBAQAogCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgewogCQlvbWFwMl9jbGtfZW5hYmxlKGNsayk7CiAJCW9tYXAyX2Nsa19kaXNhYmxlKGNsayk7Ci0JfSBlbHNlCi0JCV9vbWFwMl9jbGtfZGlzYWJsZShjbGspOworCX0gZWxzZSB7CisJCWNsay0+b3BzLT5kaXNhYmxlKGNsayk7CisJfQogCWlmIChjbGstPmNsa2RtICE9IE5VTEwpCiAJCXB3cmRtX2Nsa2RtX3N0YXRlX3N3aXRjaChjbGstPmNsa2RtKTsKIH0KICNlbmRpZgorCisvKioKKyAqIG9tYXAyX2Nsa19zd2l0Y2hfbXB1cmF0ZV9hdF9ib290IC0gc3dpdGNoIEFSTSBNUFUgcmF0ZSBieSBib290LXRpbWUgYXJndW1lbnQKKyAqIEBtcHVyYXRlX2NrX25hbWU6IGNsayBuYW1lIG9mIHRoZSBjbG9jayB0byBjaGFuZ2UgcmF0ZQorICoKKyAqIENoYW5nZSB0aGUgQVJNIE1QVSBjbG9jayByYXRlIHRvIHRoZSByYXRlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZAorICogbGluZSwgaWYgb25lIHdhcyBzcGVjaWZpZWQuICBAbXB1cmF0ZV9ja19uYW1lIHNob3VsZCBiZQorICogInZpcnRfcHJjbV9zZXQiIG9uIE9NQVAyeHh4IGFuZCAiZHBsbDFfY2siIG9uIE9NQVAzNHh4L09NQVAzNnh4LgorICogWFhYIERvZXMgbm90IGhhbmRsZSB2b2x0YWdlIHNjYWxpbmcgLSBvbiBPTUFQMnh4eCB0aGlzIGlzIGN1cnJlbnRseQorICogaGFuZGxlZCBieSB0aGUgdmlydF9wcmNtX3NldCBjbG9jaywgYnV0IHRoaXMgc2hvdWxkIGJlIGhhbmRsZWQgYnkKKyAqIHRoZSBPUFAgbGF5ZXIuICBYWFggVGhpcyBpcyBpbnRlbmRlZCB0byBiZSBoYW5kbGVkIGJ5IHRoZSBPUFAgbGF5ZXIKKyAqIGNvZGUgaW4gdGhlIG5lYXIgZnV0dXJlIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZSBjbG9jayBjb2RlLgorICogUmV0dXJucyAtRUlOVkFMIGlmICdtcHVyYXRlJyBpcyB6ZXJvIG9yIGlmIGNsa19zZXRfcmF0ZSgpIHJlamVjdHMKKyAqIHRoZSByYXRlLCAtRU5PRU5UIGlmIHRoZSBzdHJ1Y3QgY2xrIHJlZmVycmVkIHRvIGJ5IEBtcHVyYXRlX2NrX25hbWUKKyAqIGNhbm5vdCBiZSBmb3VuZCwgb3IgMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBfX2luaXQgb21hcDJfY2xrX3N3aXRjaF9tcHVyYXRlX2F0X2Jvb3QoY29uc3QgY2hhciAqbXB1cmF0ZV9ja19uYW1lKQoreworCXN0cnVjdCBjbGsgKm1wdXJhdGVfY2s7CisJaW50IHI7CisKKwlpZiAoIW1wdXJhdGUpCisJCXJldHVybiAtRUlOVkFMOworCisJbXB1cmF0ZV9jayA9IGNsa19nZXQoTlVMTCwgbXB1cmF0ZV9ja19uYW1lKTsKKwlpZiAoV0FSTihJU19FUlIobXB1cmF0ZV9jayksICJGYWlsZWQgdG8gZ2V0ICVzLlxuIiwgbXB1cmF0ZV9ja19uYW1lKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlyID0gY2xrX3NldF9yYXRlKG1wdXJhdGVfY2ssIG1wdXJhdGUpOworCWlmIChJU19FUlJfVkFMVUUocikpIHsKKwkJV0FSTigxLCAiY2xvY2s6ICVzOiB1bmFibGUgdG8gc2V0IE1QVSByYXRlIHRvICVkOiAlZFxuIiwKKwkJICAgICBtcHVyYXRlX2NrLT5uYW1lLCBtcHVyYXRlLCByKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2FsaWJyYXRlX2RlbGF5KCk7CisJcmVjYWxjdWxhdGVfcm9vdF9jbG9ja3MoKTsKKworCWNsa19wdXQobXB1cmF0ZV9jayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBvbWFwMl9jbGtfcHJpbnRfbmV3X3JhdGVzIC0gcHJpbnQgc3VtbWFyeSBvZiBjdXJyZW50IGNsb2NrIHRyZWUgcmF0ZXMKKyAqIEBoZmNsa2luX2NrX25hbWU6IGNsayBuYW1lIGZvciB0aGUgb2ZmLWNoaXAgSEYgb3NjaWxsYXRvcgorICogQGNvcmVfY2tfbmFtZTogY2xrIG5hbWUgZm9yIHRoZSBvbi1jaGlwIENPUkVfQ0xLCisgKiBAbXB1X2NrX25hbWU6IGNsayBuYW1lIGZvciB0aGUgQVJNIE1QVSBjbG9jaworICoKKyAqIFByaW50cyBhIHNob3J0IG1lc3NhZ2UgdG8gdGhlIGNvbnNvbGUgd2l0aCB0aGUgSEZDTEtJTiBvc2NpbGxhdG9yCisgKiByYXRlLCB0aGUgcmF0ZSBvZiB0aGUgQ09SRSBjbG9jaywgYW5kIHRoZSByYXRlIG9mIHRoZSBBUk0gTVBVIGNsb2NrLgorICogQ2FsbGVkIGJ5IHRoZSBib290LXRpbWUgTVBVIHJhdGUgc3dpdGNoaW5nIGNvZGUuICAgWFhYIFRoaXMgaXMgaW50ZW5kZWQKKyAqIHRvIGJlIGhhbmRsZWQgYnkgdGhlIE9QUCBsYXllciBjb2RlIGluIHRoZSBuZWFyIGZ1dHVyZSBhbmQgc2hvdWxkIGJlCisgKiByZW1vdmVkIGZyb20gdGhlIGNsb2NrIGNvZGUuICBObyByZXR1cm4gdmFsdWUuCisgKi8KK3ZvaWQgX19pbml0IG9tYXAyX2Nsa19wcmludF9uZXdfcmF0ZXMoY29uc3QgY2hhciAqaGZjbGtpbl9ja19uYW1lLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKmNvcmVfY2tfbmFtZSwKKwkJCQkgICAgICBjb25zdCBjaGFyICptcHVfY2tfbmFtZSkKK3sKKwlzdHJ1Y3QgY2xrICpoZmNsa2luX2NrLCAqY29yZV9jaywgKm1wdV9jazsKKwl1bnNpZ25lZCBsb25nIGhmY2xraW5fcmF0ZTsKKworCW1wdV9jayA9IGNsa19nZXQoTlVMTCwgbXB1X2NrX25hbWUpOworCWlmIChXQVJOKElTX0VSUihtcHVfY2spLCAiY2xvY2s6IGZhaWxlZCB0byBnZXQgJXMuXG4iLCBtcHVfY2tfbmFtZSkpCisJCXJldHVybjsKKworCWNvcmVfY2sgPSBjbGtfZ2V0KE5VTEwsIGNvcmVfY2tfbmFtZSk7CisJaWYgKFdBUk4oSVNfRVJSKGNvcmVfY2spLCAiY2xvY2s6IGZhaWxlZCB0byBnZXQgJXMuXG4iLCBjb3JlX2NrX25hbWUpKQorCQlyZXR1cm47CisKKwloZmNsa2luX2NrID0gY2xrX2dldChOVUxMLCBoZmNsa2luX2NrX25hbWUpOworCWlmIChXQVJOKElTX0VSUihoZmNsa2luX2NrKSwgIkZhaWxlZCB0byBnZXQgJXMuXG4iLCBoZmNsa2luX2NrX25hbWUpKQorCQlyZXR1cm47CisKKwloZmNsa2luX3JhdGUgPSBjbGtfZ2V0X3JhdGUoaGZjbGtpbl9jayk7CisKKwlwcl9pbmZvKCJTd2l0Y2hlZCB0byBuZXcgY2xvY2tpbmcgcmF0ZSAoQ3J5c3RhbC9Db3JlL01QVSk6ICIKKwkJIiVsZC4lMDFsZC8lbGQvJWxkIE1IelxuIiwKKwkJKGhmY2xraW5fcmF0ZSAvIDEwMDAwMDApLAorCQkoKGhmY2xraW5fcmF0ZSAvIDEwMDAwMCkgJSAxMCksCisJCShjbGtfZ2V0X3JhdGUoY29yZV9jaykgLyAxMDAwMDAwKSwKKwkJKGNsa19nZXRfcmF0ZShtcHVfY2spIC8gMTAwMDAwMCkpOworfQorCisvKiBDb21tb24gZGF0YSAqLworCitzdHJ1Y3QgY2xrX2Z1bmN0aW9ucyBvbWFwMl9jbGtfZnVuY3Rpb25zID0geworCS5jbGtfZW5hYmxlCQk9IG9tYXAyX2Nsa19lbmFibGUsCisJLmNsa19kaXNhYmxlCQk9IG9tYXAyX2Nsa19kaXNhYmxlLAorCS5jbGtfcm91bmRfcmF0ZQkJPSBvbWFwMl9jbGtfcm91bmRfcmF0ZSwKKwkuY2xrX3NldF9yYXRlCQk9IG9tYXAyX2Nsa19zZXRfcmF0ZSwKKwkuY2xrX3NldF9wYXJlbnQJCT0gb21hcDJfY2xrX3NldF9wYXJlbnQsCisJLmNsa19kaXNhYmxlX3VudXNlZAk9IG9tYXAyX2Nsa19kaXNhYmxlX3VudXNlZCwKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKwkvKiBUaGVzZSB3aWxsIGJlIHJlbW92ZWQgd2hlbiB0aGUgT1BQIGNvZGUgaXMgaW50ZWdyYXRlZCAqLworCS5jbGtfaW5pdF9jcHVmcmVxX3RhYmxlCT0gb21hcDJfY2xrX2luaXRfY3B1ZnJlcV90YWJsZSwKKwkuY2xrX2V4aXRfY3B1ZnJlcV90YWJsZQk9IG9tYXAyX2Nsa19leGl0X2NwdWZyZXFfdGFibGUsCisjZW5kaWYKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaAppbmRleCA5M2M0OGRmLi5hZDhhMWY3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCkBAIC00Nyw3ICs0NywxMCBAQAogI2RlZmluZSBEUExMX0xPV19QT1dFUl9CWVBBU1MJMHg1CiAjZGVmaW5lIERQTExfTE9DS0VECQkweDcKIAotaW50IG9tYXAyX2Nsa19pbml0KHZvaWQpOworLyogRFBMTCBUeXBlIGFuZCBEQ08gU2VsZWN0aW9uIEZsYWdzICovCisjZGVmaW5lIERQTExfSl9UWVBFCQkweDEKKyNkZWZpbmUgRFBMTF9OT19EQ09fU0VMCQkweDIKKwogaW50IG9tYXAyX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKTsKIHZvaWQgb21hcDJfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKTsKIGxvbmcgb21hcDJfY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwpAQCAtNzgsMjMgKzgxLDUzIEBACiAJCQkJdTMyICpuZXdfZGl2KTsKIHUzMiBvbWFwMl9jbGtzZWxfdG9fZGl2aXNvcihzdHJ1Y3QgY2xrICpjbGssIHUzMiBmaWVsZF92YWwpOwogdTMyIG9tYXAyX2Rpdmlzb3JfdG9fY2xrc2VsKHN0cnVjdCBjbGsgKmNsaywgdTMyIGRpdik7Ci11bnNpZ25lZCBsb25nIG9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CiBsb25nIG9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyB0YXJnZXRfcmF0ZSk7CiBpbnQgb21hcDJfY2xrc2VsX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK2ludCBvbWFwMl9jbGtzZWxfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKm5ld19wYXJlbnQpOwogdTMyIG9tYXAyX2dldF9kcGxsX3JhdGUoc3RydWN0IGNsayAqY2xrKTsKIHZvaWQgb21hcDJfaW5pdF9kcGxsX3BhcmVudChzdHJ1Y3QgY2xrICpjbGspOwogaW50IG9tYXAyX3dhaXRfY2xvY2tfcmVhZHkodm9pZCBfX2lvbWVtICpyZWcsIHUzMiBjdmFsLCBjb25zdCBjaGFyICpuYW1lKTsKLXZvaWQgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCh2b2lkKTsKKworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKK3ZvaWQgb21hcDJ4eHhfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgb21hcDJ4eHhfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCh2b2lkKQoreworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwordm9pZCBvbWFwM19jbGtfcHJlcGFyZV9mb3JfcmVib290KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwM19jbGtfcHJlcGFyZV9mb3JfcmVib290KHZvaWQpCit7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVA0Cit2b2lkIG9tYXA0X2Nsa19wcmVwYXJlX2Zvcl9yZWJvb3Qodm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXA0X2Nsa19wcmVwYXJlX2Zvcl9yZWJvb3Qodm9pZCkKK3sKK30KKyNlbmRpZgorCiBpbnQgb21hcDJfZGZsdF9jbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsayk7CiB2b2lkIG9tYXAyX2RmbHRfY2xrX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKTsKIHZvaWQgb21hcDJfY2xrX2RmbHRfZmluZF9jb21wYW5pb24oc3RydWN0IGNsayAqY2xrLCB2b2lkIF9faW9tZW0gKipvdGhlcl9yZWcsCiAJCQkJICAgdTggKm90aGVyX2JpdCk7CiB2b2lkIG9tYXAyX2Nsa19kZmx0X2ZpbmRfaWRsZXN0KHN0cnVjdCBjbGsgKmNsaywgdm9pZCBfX2lvbWVtICoqaWRsZXN0X3JlZywKLQkJCQl1OCAqaWRsZXN0X2JpdCk7CisJCQkJdTggKmlkbGVzdF9iaXQsIHU4ICppZGxlc3RfdmFsKTsKK2ludCBvbWFwMl9jbGtfc3dpdGNoX21wdXJhdGVfYXRfYm9vdChjb25zdCBjaGFyICptcHVyYXRlX2NrX25hbWUpOwordm9pZCBvbWFwMl9jbGtfcHJpbnRfbmV3X3JhdGVzKGNvbnN0IGNoYXIgKmhmY2xraW5fY2tfbmFtZSwKKwkJCSAgICAgICBjb25zdCBjaGFyICpjb3JlX2NrX25hbWUsCisJCQkgICAgICAgY29uc3QgY2hhciAqbXB1X2NrX25hbWUpOwogCiBleHRlcm4gdTggY3B1X21hc2s7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vbWFwMl9kZmx0X3dhaXQ7CitleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfZHVtbXk7CiBleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDJfZGZsdDsKIAogZXh0ZXJuIHN0cnVjdCBjbGtfZnVuY3Rpb25zIG9tYXAyX2Nsa19mdW5jdGlvbnM7CkBAIC0xMDQsNSArMTM3LDE0IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGdwdF9zeXNfcmF0ZXNbXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZ2Z4X2wzX3JhdGVzW107CiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSAmJiBkZWZpbmVkKENPTkZJR19DUFVfRlJFUSkKK2V4dGVybiB2b2lkIG9tYXAyX2Nsa19pbml0X2NwdWZyZXFfdGFibGUoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICoqdGFibGUpOworZXh0ZXJuIHZvaWQgb21hcDJfY2xrX2V4aXRfY3B1ZnJlcV90YWJsZShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKip0YWJsZSk7CisjZWxzZQorI2RlZmluZSBvbWFwMl9jbGtfaW5pdF9jcHVmcmVxX3RhYmxlCTAKKyNkZWZpbmUgb21hcDJfY2xrX2V4aXRfY3B1ZnJlcV90YWJsZQkwCisjZW5kaWYKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAzX25vbmNvcmVfZHBsbF9vcHM7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0MjBfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0MjBfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxMmFmOTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjQyMF9kYXRhLmMKQEAgLTAsMCArMSwxOTEwIEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNDIwX2RhdGEuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogIENvbnRhY3RzOgorICogIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqICBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjaW5jbHVkZSA8cGxhdC9jbGtkZXZfb21hcC5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJjbG9jazJ4eHguaCIKKyNpbmNsdWRlICJvcHAyeHh4LmgiCisjaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCisjaW5jbHVkZSAic2RyYy5oIgorCisjZGVmaW5lIE9NQVBfQ01fUkVHQUREUiAgICAgICAgICAgICAgICAgT01BUDI0MjBfQ01fUkVHQUREUgorCisvKgorICogMjQyMCBjbG9jayB0cmVlLgorICoKKyAqIE5PVEU6SW4gbWFueSBjYXNlcyBoZXJlIHdlIGFyZSBhc3NpZ25pbmcgYSAnZGVmYXVsdCcgcGFyZW50LglJbiBtYW55CisgKgljYXNlcyB0aGUgcGFyZW50IGlzIHNlbGVjdGFibGUuCVRoZSBnZXQvc2V0IHBhcmVudCBjYWxscyB3aWxsIGFsc28KKyAqCXN3aXRjaCBzb3VyY2VzLgorICoKKyAqCU1hbnkgc29tZSBjbG9ja3Mgc2F5IGFsd2F5c19lbmFibGVkLCBidXQgdGhleSBjYW4gYmUgYXV0byBpZGxlZCBmb3IKKyAqCXBvd2VyIHNhdmluZ3MuIFRoZXkgd2lsbCBhbHdheXMgYmUgYXZhaWxhYmxlIHVwb24gY2xvY2sgcmVxdWVzdC4KKyAqCisgKglTZXZlcmFsIHNvdXJjZXMgYXJlIGdpdmVuIGluaXRpYWwgcmF0ZXMgd2hpY2ggbWF5IGJlIHdyb25nLCB0aGlzIHdpbGwKKyAqCWJlIGZpeGVkIHVwIGluIHRoZSBpbml0IGZ1bmMuCisgKgorICoJVGhpbmdzIGFyZSBicm9hZGx5IHNlcGFyYXRlZCBiZWxvdyBieSBjbG9jayBkb21haW5zLiBJdCBpcworICoJbm90ZXdvcnRoeSB0aGF0IG1vc3QgcGVyaWZlcmFscyBoYXZlIGRlcGVuZGVuY2llcyBvbiBtdWx0aXBsZSBjbG9jaworICoJZG9tYWlucy4gTWFueSBnZXQgdGhlaXIgaW50ZXJmYWNlIGNsb2NrcyBmcm9tIHRoZSBMNCBkb21haW4sIGJ1dCBnZXQKKyAqCWZ1bmN0aW9uYWwgY2xvY2tzIGZyb20gZml4ZWQgc291cmNlcyBvciBvdGhlciBjb3JlIGRvbWFpbiBkZXJpdmVkCisgKgljbG9ja3MuCisgKi8KKworLyogQmFzZSBleHRlcm5hbCBpbnB1dCBjbG9ja3MgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfMzJrX2NrID0geworCS5uYW1lCQk9ICJmdW5jXzMya19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJhdGUJCT0gMzIwMDAsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzZWN1cmVfMzJrX2NrID0geworCS5uYW1lCQk9ICJzZWN1cmVfMzJrX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSAzMjc2OCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKK307CisKKy8qIFR5cGljYWwgMTIvMTNNSHogaW4gc3RhbmRhbG9uZSBtb2RlLCB3aWxsIGJlIDI2TWh6IGluIGNoYXNzaXMgbW9kZSAqLworc3RhdGljIHN0cnVjdCBjbGsgb3NjX2NrID0gewkJLyogKCoxMiwgKjEzLCAxOS4yLCAqMjYsIDM4LjQpTUh6ICovCisJLm5hbWUJCT0gIm9zY19jayIsCisJLm9wcwkJPSAmY2xrb3BzX29zY2NrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX29zY19jbGtfcmVjYWxjLAorfTsKKworLyogV2l0aG91dCBtb2RlbSBsaWtlbHkgMTJNSHosIHdpdGggbW9kZW0gbGlrZWx5IDEzTUh6ICovCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2sgPSB7CQkvKiAoKjEyLCAqMTMsIDE5LjIsIDI2LCAzOC40KU1IeiAqLworCS5uYW1lCQk9ICJzeXNfY2siLAkJLyogfiByZWZfY2xrIGFsc28gKi8KKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZvc2NfY2ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJ4eHhfc3lzX2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhbHRfY2sgPSB7CQkvKiBUeXBpY2FsIDU0TSBvciA0OE0sIG1heSBub3QgZXhpc3QgKi8KKwkubmFtZQkJPSAiYWx0X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSA1NDAwMDAwMCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKK307CisKKy8qCisgKiBBbmFsb2cgZG9tYWluIHJvb3Qgc291cmNlIGNsb2NrcworICovCisKKy8qIGRwbGxfY2ssIGlzIGJyb2tlbiBvdXQgaW4gdG8gc3BlY2lhbCBjYXNlcyB0aHJvdWdoIGNsa3NlbCAqLworLyogUkVWSVNJVDogUmF0ZSBjaGFuZ2VzIG9uIGRwbGxfY2sgdHJpZ2dlciBhIGZ1bGwgc2V0IGNoYW5nZS4JLi4uCisgKiBkZWFsIHdpdGggdGhpcworICovCisKK3N0YXRpYyBzdHJ1Y3QgZHBsbF9kYXRhIGRwbGxfZGQgPSB7CisJLm11bHRfZGl2MV9yZWcJCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAorCS5tdWx0X21hc2sJCT0gT01BUDI0WFhfRFBMTF9NVUxUX01BU0ssCisJLmRpdjFfbWFzawkJPSBPTUFQMjRYWF9EUExMX0RJVl9NQVNLLAorCS5jbGtfYnlwYXNzCQk9ICZzeXNfY2ssCisJLmNsa19yZWYJCT0gJnN5c19jaywKKwkuY29udHJvbF9yZWcJCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX21hc2sJCT0gT01BUDI0WFhfRU5fRFBMTF9NQVNLLAorCS5tYXhfbXVsdGlwbGllcgkJPSAxMDIzLAorCS5taW5fZGl2aWRlcgkJPSAxLAorCS5tYXhfZGl2aWRlcgkJPSAxNiwKKwkucmF0ZV90b2xlcmFuY2UJCT0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCit9OworCisvKgorICogWFhYIENhbm5vdCBhZGQgcm91bmRfcmF0ZSBoZXJlIHlldCwgYXMgdGhpcyBpcyBzdGlsbCBhIGNvbXBvc2l0ZSBjbG9jaywKKyAqIG5vdCBqdXN0IGEgRFBMTAorICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsX2NrID0geworCS5uYW1lCQk9ICJkcGxsX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCQkvKiBDYW4gYmUgZnVuY18zMmsgYWxzbyAqLworCS5kcGxsX2RhdGEJPSAmZHBsbF9kZCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9kcGxsY29yZV9yZWNhbGMsCisJLnNldF9yYXRlCT0gJm9tYXAyX3JlcHJvZ3JhbV9kcGxsY29yZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFwbGw5Nl9jayA9IHsKKwkubmFtZQkJPSAiYXBsbDk2X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfYXBsbDk2LAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkucmF0ZQkJPSA5NjAwMDAwMCwKKwkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fOTZNX1BMTF9TSElGVCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFwbGw1NF9jayA9IHsKKwkubmFtZQkJPSAiYXBsbDU0X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfYXBsbDU0LAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkucmF0ZQkJPSA1NDAwMDAwMCwKKwkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fNTRNX1BMTF9TSElGVCwKK307CisKKy8qCisgKiBQUkNNIGRpZ2l0YWwgYmFzZSBzb3VyY2VzCisgKi8KKworLyogZnVuY181NG1fY2sgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBmdW5jXzU0bV9hcGxsNTRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBmdW5jXzU0bV9hbHRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZnVuY181NG1fY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmFwbGw1NF9jaywgLnJhdGVzID0gZnVuY181NG1fYXBsbDU0X3JhdGVzLCB9LAorCXsgLnBhcmVudCA9ICZhbHRfY2ssCS5yYXRlcyA9IGZ1bmNfNTRtX2FsdF9yYXRlcywgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzU0bV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY181NG1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmFwbGw1NF9jaywJLyogY2FuIGFsc28gYmUgYWx0X2NsayAqLworCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfNTRNX1NPVVJDRSwKKwkuY2xrc2VsCQk9IGZ1bmNfNTRtX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY29yZV9jayA9IHsKKwkubmFtZQkJPSAiY29yZV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZHBsbF9jaywJCS8qIGNhbiBhbHNvIGJlIDMyayAqLworCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzk2bV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY185Nm1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmFwbGw5Nl9jaywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogZnVuY180OG1fY2sgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBmdW5jXzQ4bV9hcGxsOTZfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAyLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBmdW5jXzQ4bV9hbHRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZnVuY180OG1fY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmFwbGw5Nl9jaywJLnJhdGVzID0gZnVuY180OG1fYXBsbDk2X3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmFsdF9jaywgLnJhdGVzID0gZnVuY180OG1fYWx0X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzQ4bV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY180OG1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmFwbGw5Nl9jaywJIC8qIDk2TSBvciBBbHQgKi8KKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYXzQ4TV9TT1VSQ0UsCisJLmNsa3NlbAkJPSBmdW5jXzQ4bV9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzEybV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY18xMm1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5maXhlZF9kaXYJPSA0LAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXBfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCit9OworCisvKiBTZWN1cmUgdGltZXIsIG9ubHkgYXZhaWxhYmxlIGluIHNlY3VyZSBtb2RlICovCitzdGF0aWMgc3RydWN0IGNsayB3ZHQxX29zY19jayA9IHsKKwkubmFtZQkJPSAiY2tfd2R0MV9vc2MiLAorCS5vcHMJCT0gJmNsa29wc19udWxsLCAvKiBSTUs6IG1pc3Npbmc/ICovCisJLnBhcmVudAkJPSAmb3NjX2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogVGhlIGNvbW1vbl9jbGtvdXQqIGNsa3NlbF9yYXRlIHN0cnVjdHMgYXJlIGNvbW1vbiB0bworICogc3lzX2Nsa291dCwgc3lzX2Nsa291dF9zcmMsIHN5c19jbGtvdXQyLCBhbmQgc3lzX2Nsa291dDJfc3JjLgorICogc3lzX2Nsa291dDJfKiBhcmUgMjQyMC1vbmx5LCBzbyB0aGUKKyAqIGNsa3NlbF9yYXRlIGZsYWdzIGZpZWxkcyBhcmUgaW5hY2N1cmF0ZSBmb3IgdGhvc2UgY2xvY2tzLiBUaGlzIGlzCisgKiBoYXJtbGVzcyBzaW5jZSBhY2Nlc3MgdG8gdGhvc2UgY2xvY2tzIGFyZSBnYXRlZCBieSB0aGUgc3RydWN0IGNsaworICogZmxhZ3MgZmllbGRzLCB3aGljaCBtYXJrIHRoZW0gYXMgMjQyMC1vbmx5LgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfc3JjX2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfc3JjX3N5c19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29tbW9uX2Nsa291dF9zcmNfOTZtX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjb21tb25fY2xrb3V0X3NyY181NG1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBjb21tb25fY2xrb3V0X3NyY19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywJICAucmF0ZXMgPSBjb21tb25fY2xrb3V0X3NyY19jb3JlX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAucmF0ZXMgPSBjb21tb25fY2xrb3V0X3NyY19zeXNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZnVuY185Nm1fY2ssIC5yYXRlcyA9IGNvbW1vbl9jbGtvdXRfc3JjXzk2bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZmdW5jXzU0bV9jaywgLnJhdGVzID0gY29tbW9uX2Nsa291dF9zcmNfNTRtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0X3NyYyA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dF9zcmMiLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUDI0MjBfUFJDTV9DTEtPVVRfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0NMS09VVF9FTl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDI0MjBfUFJDTV9DTEtPVVRfQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtPVVRfU09VUkNFX01BU0ssCisJLmNsa3NlbAkJPSBjb21tb25fY2xrb3V0X3NyY19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzeXNfY2xrb3V0X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZzeXNfY2xrb3V0X3NyYywgLnJhdGVzID0gY29tbW9uX2Nsa291dF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dCA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dCIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmc3lzX2Nsa291dF9zcmMsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmNsa3NlbF9yZWcJPSBPTUFQMjQyMF9QUkNNX0NMS09VVF9DVFJMLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS09VVF9ESVZfTUFTSywKKwkuY2xrc2VsCQk9IHN5c19jbGtvdXRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworLyogSW4gMjQzMCwgbmV3IGluIDI0MjAgRVMyICovCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0Ml9zcmMgPSB7CisJLm5hbWUJCT0gInN5c19jbGtvdXQyX3NyYyIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQMjQyMF9QUkNNX0NMS09VVF9DVFJMLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfQ0xLT1VUMl9FTl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDI0MjBfUFJDTV9DTEtPVVRfQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjQyMF9DTEtPVVQyX1NPVVJDRV9NQVNLLAorCS5jbGtzZWwJCT0gY29tbW9uX2Nsa291dF9zcmNfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3lzX2Nsa291dDJfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJnN5c19jbGtvdXQyX3NyYywgLnJhdGVzID0gY29tbW9uX2Nsa291dF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyogSW4gMjQzMCwgbmV3IGluIDI0MjAgRVMyICovCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0MiA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dDIiLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnN5c19jbGtvdXQyX3NyYywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkuY2xrc2VsX3JlZwk9IE9NQVAyNDIwX1BSQ01fQ0xLT1VUX0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0MjBfQ0xLT1VUMl9ESVZfTUFTSywKKwkuY2xrc2VsCQk9IHN5c19jbGtvdXQyX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVtdWxfY2sgPSB7CisJLm5hbWUJCT0gImVtdWxfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUDI0MjBfUFJDTV9DTEtFTVVMX0NUUkwsCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTVVMQVRJT05fRU5fU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKworfTsKKworLyoKKyAqIE1QVSBjbG9jayBkb21haW4KKyAqCUNsb2NrczoKKyAqCQlNUFVfRkNMSywgTVBVX0lDTEsKKyAqCQlJTlRfTV9GQ0xLLCBJTlRfTV9JX0NMSworICoKKyAqIC0gSW5kaXZpZHVhbCBjbG9ja3MgYXJlIGhhcmR3YXJlIG1hbmFnZWQuCisgKiAtIEJhc2UgZGl2aWRlciBjb21lcyBmcm9tOiBDTV9DTEtTRUxfTVBVCisgKgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG1wdV9jb3JlX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBtcHVfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IG1wdV9jb3JlX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBtcHVfY2sgPSB7CS8qIENvbnRyb2wgY3B1ICovCisJLm5hbWUJCT0gIm1wdV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuY2xrZG1fbmFtZQk9ICJtcHVfY2xrZG0iLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfTVBVX01BU0ssCisJLmNsa3NlbAkJPSBtcHVfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKgorICogRFNQICgyNDIwLVVNQStJVkExKSBjbG9jayBkb21haW4KKyAqIENsb2NrczoKKyAqCTI0MjA6IFVNQV9GQ0xLLCBVTUFfSUNMSywgSVZBX01QVSwgSVZBX0NPUAorICoKKyAqIFdvbid0IGJlIHRvbyBzcGVjaWZpYyBoZXJlLiBUaGUgY29yZSBjbG9jayBjb21lcyBpbnRvIHRoaXMgYmxvY2sKKyAqIGl0IGlzIGRpdmlkZWQgdGhlbiB0ZWUnZWQuIE9uZSBicmFuY2ggZ29lcyBkaXJlY3RseSB0byB4eXogZW5hYmxlCisgKiBjb250cm9scy4gVGhlIG90aGVyIGJyYW5jaCBnZXRzIGZ1cnRoZXIgZGl2aWRlZCBieSAyIHRoZW4gcG9zc2libHkKKyAqIHJvdXRlZCBpbnRvIGEgc3luY2hyb25pemVyIGFuZCBvdXQgb2YgY2xvY2tzIGFiYy4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3BfZmNrX2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3BfZmNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBkc3BfZmNrX2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9mY2sgPSB7CisJLm5hbWUJCT0gImRzcF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuY2xrZG1fbmFtZQk9ICJkc3BfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9DTV9GQ0xLRU5fRFNQX0VOX0RTUF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1BfTUFTSywKKwkuY2xrc2VsCQk9IGRzcF9mY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBEU1AgaW50ZXJmYWNlIGNsb2NrICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRzcF9pcmF0ZV9pY2tfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRzcF9pcmF0ZV9pY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmRzcF9mY2ssIC5yYXRlcyA9IGRzcF9pcmF0ZV9pY2tfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKKy8qIFRoaXMgY2xvY2sgZG9lcyBub3QgZXhpc3QgYXMgc3VjaCBpbiB0aGUgVFJNLiAqLworc3RhdGljIHN0cnVjdCBjbGsgZHNwX2lyYXRlX2ljayA9IHsKKwkubmFtZQkJPSAiZHNwX2lyYXRlX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZHNwX2ZjaywKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1BfSUZfTUFTSywKKwkuY2xrc2VsCQk9IGRzcF9pcmF0ZV9pY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiAyNDIwIG9ubHkgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9pY2sgPSB7CisJLm5hbWUJCT0gImRzcF9pY2siLAkgLyogYXBwYXJlbnRseSBpcGkgYW5kIGlzcCAqLworCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZHNwX2lyYXRlX2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fRFNQX0lQSV9TSElGVCwJICAgICAgLyogZm9yIGlwaSAqLworfTsKKworLyoKKyAqIFRoZSBJVkExIGlzIGFuIEFSTTcgY29yZSBvbiB0aGUgMjQyMCB0aGF0IGhhcyBub3RoaW5nIHRvIGRvIHdpdGgKKyAqIHRoZSBDNTR4LCBidXQgd2hpY2ggaXMgY29udGFpbmVkIGluIHRoZSBEU1AgcG93ZXJkb21haW4uICBEb2VzIG5vdAorICogZXhpc3Qgb24gbGF0ZXIgT01BUHMuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGl2YTFfaWZjayA9IHsKKwkubmFtZQkJPSAiaXZhMV9pZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmNsa2RtX25hbWUJPSAiaXZhMV9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0lWQV9DT1BfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjQyMF9DTEtTRUxfSVZBX01BU0ssCisJLmNsa3NlbAkJPSBkc3BfZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogSVZBMSBtcHUvaW50L2kvZiBjbG9ja3MgYXJlIC8yIG9mIHBhcmVudCAqLworc3RhdGljIHN0cnVjdCBjbGsgaXZhMV9tcHVfaW50X2lmY2sgPSB7CisJLm5hbWUJCT0gIml2YTFfbXB1X2ludF9pZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJml2YTFfaWZjaywKKwkuY2xrZG1fbmFtZQk9ICJpdmExX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSVZBX01QVV9TSElGVCwKKwkuZml4ZWRfZGl2CT0gMiwKKwkucmVjYWxjCQk9ICZvbWFwX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjLAorfTsKKworLyoKKyAqIEwzIGNsb2NrIGRvbWFpbgorICogTDMgY2xvY2tzIGFyZSB1c2VkIGZvciBib3RoIGludGVyZmFjZSBhbmQgZnVuY3Rpb25hbCBjbG9ja3MgdG8KKyAqIG11bHRpcGxlIGVudGl0aWVzLiBTb21lIG9mIHRoZXNlIGNsb2NrcyBhcmUgY29tcGxldGVseSBtYW5hZ2VkCisgKiBieSBoYXJkd2FyZSwgYW5kIHNvbWUgb3RoZXJzIGFsbG93IHNvZnR3YXJlIGNvbnRyb2wuIEhhcmR3YXJlCisgKiBtYW5hZ2VkIG9uZXMgZ2VuZXJhbCBhcmUgYmFzZWQgb24gZGlyZWN0bHkgQ0xLX1JFUSBzaWduYWxzIGFuZAorICogdmFyaW91cyBhdXRvIGlkbGUgc2V0dGluZ3MuIFRoZSBmdW5jdGlvbmFsIHNwZWMgc2V0cyBtYW55IG9mIHRoZXNlCisgKiBhcyAndGllLWhpZ2gnIGZvciB0aGVpciBlbmFibGVzLgorICoKKyAqIEktQ0xPQ0tTOgorICoJTDMtSW50ZXJjb25uZWN0LCBTTVMsIEdQTUMsIFNEUkMsIE9DTV9SQU0sIE9DTV9ST00sIFNETUEKKyAqCUNBTSwgSFMtVVNCLgorICogRi1DTE9DSworICoJU1NJLgorICoKKyAqIEdQTUMgbWVtb3JpZXMgYW5kIFNEUkMgaGF2ZSB0aW1pbmcgYW5kIGNsb2NrIHNlbnNpdGl2ZSByZWdpc3RlcnMgd2hpY2gKKyAqIG1heSB2ZXJ5IHdlbGwgbmVlZCBub3RpZmljYXRpb24gd2hlbiB0aGUgY2xvY2sgY2hhbmdlcy4gQ3VycmVudGx5IGZvciBsb3cKKyAqIG9wZXJhdGluZyBwb2ludHMsIHRoZXNlIGFyZSB0YWtlbiBjYXJlIG9mIGluIHNsZWVwLlMuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29yZV9sM19jb3JlX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSAxNiwgLnZhbCA9IDE2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGNvcmVfbDNfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IGNvcmVfbDNfY29yZV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY29yZV9sM19jayA9IHsJLyogVXNlZCBmb3IgaWNrIGFuZCBmY2ssIGludGVyY29ubmVjdCAqLworCS5uYW1lCQk9ICJjb3JlX2wzX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfTDNfTUFTSywKKwkuY2xrc2VsCQk9IGNvcmVfbDNfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiB1c2JfbDRfaWNrICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHVzYl9sNF9pY2tfY29yZV9sM19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdXNiX2w0X2lja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9sM19jaywgLnJhdGVzID0gdXNiX2w0X2lja19jb3JlX2wzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworLyogSXQgaXMgdW5jbGVhciBmcm9tIFRSTSB3aGV0aGVyIHVzYl9sNF9pY2sgaXMgcmVhbGx5IGluIEwzIG9yIEw0IGNsa2RtICovCitzdGF0aWMgc3RydWN0IGNsayB1c2JfbDRfaWNrID0gewkvKiBGUy1VU0IgaW50ZXJmYWNlIGNsb2NrICovCisJLm5hbWUJCT0gInVzYl9sNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VU0JfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9VU0JfTUFTSywKKwkuY2xrc2VsCQk9IHVzYl9sNF9pY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKgorICogTDQgY2xvY2sgbWFuYWdlbWVudCBkb21haW4KKyAqCisgKiBUaGlzIGRvbWFpbiBjb250YWlucyBsb3RzIG9mIGludGVyZmFjZSBjbG9ja3MgZnJvbSB0aGUgTDQgaW50ZXJmYWNlLCBzb21lCisgKiBmdW5jdGlvbmFsIGNsb2Nrcy4JRml4ZWQgQVBMTCBmdW5jdGlvbmFsIHNvdXJjZSBjbG9ja3MgYXJlIG1hbmFnZWQgaW4KKyAqIHRoaXMgZG9tYWluLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGw0X2NvcmVfbDNfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbDRfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNvcmVfbDNfY2ssIC5yYXRlcyA9IGw0X2NvcmVfbDNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGw0X2NrID0gewkJLyogdXNlZCBib3RoIGFzIGFuIGljayBhbmQgZmNrICovCisJLm5hbWUJCT0gImw0X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfTDRfTUFTSywKKwkuY2xrc2VsCQk9IGw0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyoKKyAqIFNTSSBpcyBpbiBMMyBtYW5hZ2VtZW50IGRvbWFpbiwgaXRzIGRpcmVjdCBwYXJlbnQgaXMgY29yZSBub3QgbDMsCisgKiBtYW55IGNvcmUgcG93ZXIgZG9tYWluIGVudGl0aWVzIGFyZSBncm91cGVkIGludG8gdGhlIEwzIGNsb2NrCisgKiBkb21haW4uCisgKiBTU0lfU1NSX0ZDTEssIFNTSV9TU1RfRkNMSywgU1NJX0w0X0lDTEsKKyAqCisgKiBzc3IgPSBjb3JlLzEvMi8zLzQvNSwgc3N0ID0gMS8yIHNzci4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBzc2lfc3NyX3NzdF9mY2tfY29yZV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3NpX3Nzcl9zc3RfZmNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBzc2lfc3NyX3NzdF9mY2tfY29yZV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3NpX3Nzcl9zc3RfZmNrID0geworCS5uYW1lCQk9ICJzc2lfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fU1NJX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfU1NJX01BU0ssCisJLmNsa3NlbAkJPSBzc2lfc3NyX3NzdF9mY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKgorICogUHJlc3VtYWJseSB0aGlzIGlzIHRoZSBzYW1lIGFzIFNTSV9JQ0xLLgorICogVFJNIGNvbnRyYWRpY3RzIGl0c2VsZiBvbiB3aGF0IGNsb2NrZG9tYWluIFNTSV9JQ0xLIGlzIGluCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9sNF9pY2sgPSB7CisJLm5hbWUJCT0gInNzaV9sNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fU1NJX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisKKy8qCisgKiBHRlggY2xvY2sgZG9tYWluCisgKglDbG9ja3M6CisgKiBHRlhfRkNMSywgR0ZYX0lDTEsKKyAqIEdGWF9DRzEoMmQpLCBHRlhfQ0cyKDNkKQorICoKKyAqIEdGWF9GQ0xLIHJ1bnMgZnJvbSBMMywgYW5kIGlzIGRpdmlkZWQgYnkgKDEsMiwzLDQpCisgKiBUaGUgMmQgYW5kIDNkIGNsb2NrcyBydW4gYXQgYSBoYXJkd2FyZSBkZXRlcm1pbmVkCisgKiBkaXZpZGVkIHZhbHVlIG9mIGZjbGsuCisgKgorICovCisKKy8qIFRoaXMgY2xrc2VsIHN0cnVjdCBpcyBzaGFyZWQgYmV0d2VlbiBnZnhfM2RfZmNrIGFuZCBnZnhfMmRfZmNrICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBnZnhfZmNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2wzX2NrLCAucmF0ZXMgPSBnZnhfbDNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBnZnhfM2RfZmNrID0geworCS5uYW1lCQk9ICJnZnhfM2RfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmNsa2RtX25hbWUJPSAiZ2Z4X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fM0RfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQX0NMS1NFTF9HRlhfTUFTSywKKwkuY2xrc2VsCQk9IGdmeF9mY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4XzJkX2ZjayA9IHsKKwkubmFtZQkJPSAiZ2Z4XzJkX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5jbGtkbV9uYW1lCT0gImdmeF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOXzJEX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUF9DTEtTRUxfR0ZYX01BU0ssCisJLmNsa3NlbAkJPSBnZnhfZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2ljayA9IHsKKwkubmFtZQkJPSAiZ2Z4X2ljayIsCQkvKiBGcm9tIGwzICovCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5jbGtkbV9uYW1lCT0gImdmeF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVBfRU5fR0ZYX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogRFNTIGNsb2NrIGRvbWFpbgorICogQ0xPQ0tzOgorICogRFNTX0w0X0lDTEssIERTU19MM19JQ0xLLAorICogRFNTX0NMSzEsIERTU19DTEsyLCBEU1NfNTRNSHpfQ0xLCisgKgorICogRFNTIGlzIGJvdGggaW5pdGlhdG9yIGFuZCB0YXJnZXQuCisgKi8KKy8qIFhYWCBBZGQgUkFURV9OT1RfVkFMSURBVEVEICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNzMV9mY2tfc3lzX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3MxX2Zja19jb3JlX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDUsIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDksIC52YWwgPSA5LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAxNiwgLnZhbCA9IDE2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRzczFfZmNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZzeXNfY2ssICAucmF0ZXMgPSBkc3MxX2Zja19zeXNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gZHNzMV9mY2tfY29yZV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzc19pY2sgPSB7CQkvKiBFbmFibGVzIGJvdGggTDMsTDQgSUNMSydzICovCisJLm5hbWUJCT0gImRzc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAkvKiByZWFsbHkgYm90aCBsMyBhbmQgbDQgKi8KKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzczFfZmNrID0geworCS5uYW1lCQk9ICJkc3MxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmY29yZV9jaywJCS8qIENvcmUgb3Igc3lzICovCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9EU1MxX1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1MxX01BU0ssCisJLmNsa3NlbAkJPSBkc3MxX2Zja19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNzMl9mY2tfc3lzX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3MyX2Zja180OG1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3MyX2Zja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgIC5yYXRlcyA9IGRzczJfZmNrX3N5c19yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZmdW5jXzQ4bV9jaywgLnJhdGVzID0gZHNzMl9mY2tfNDhtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3MyX2ZjayA9IHsJCS8qIEFsdCBjbGsgdXNlZCBpbiBwb3dlciBtYW5hZ2VtZW50ICovCisJLm5hbWUJCT0gImRzczJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCQkvKiBmaXhlZCBhdCBzeXNfY2sgb3IgNDhNSHogKi8KKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzJfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0RTUzJfTUFTSywKKwkuY2xrc2VsCQk9IGRzczJfZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzXzU0bV9mY2sgPSB7CS8qIEFsdCBjbGsgdXNlZCBpbiBwb3dlciBtYW5hZ2VtZW50ICovCisJLm5hbWUJCT0gImRzc181NG1fZmNrIiwJLyogNTRtIHR2IGNsayAqLworCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9UVl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIENPUkUgcG93ZXIgZG9tYWluIElDTEsgJiBGQ0xLIGRlZmluZXMuCisgKiBNYW55IG9mIHRoZSB0aGVzZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHBvc3NpYmxlIHBhcmVudC4gRW50cmllcworICogaGVyZSB3aWxsIGxpa2VseSBoYXZlIGFuIEw0IGludGVyZmFjZSBwYXJlbnQsIGFuZCBtYXkgaGF2ZSBtdWx0aXBsZQorICogZnVuY3Rpb25hbCBjbG9jayBwYXJlbnRzLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGdwdF9hbHRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwMjR4eF9ncHRfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmZ1bmNfMzJrX2NrLCAucmF0ZXMgPSBncHRfMzJrX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAucmF0ZXMgPSBncHRfc3lzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmFsdF9jaywJICAucmF0ZXMgPSBncHRfYWx0X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMV9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUMV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfaWNrID0geworCS5uYW1lCQk9ICJncHQyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQyX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0Ml9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUMl9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19pY2sgPSB7CisJLm5hbWUJCT0gImdwdDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDNfZmNrID0geworCS5uYW1lCQk9ICJncHQzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQzX1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQzX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ0X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0NF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDRfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDRfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDRfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfaWNrID0geworCS5uYW1lCQk9ICJncHQ1X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ1X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ1X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0NV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNV9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUNV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDZfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDZfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDZfZmNrID0geworCS5uYW1lCQk9ICJncHQ2X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ2X1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQ2X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0N19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUN19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19mY2sgPSB7CisJLm5hbWUJCT0gImdwdDdfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDdfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDdfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfaWNrID0geworCS5uYW1lCQk9ICJncHQ4X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ4X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ4X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0OF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOF9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUOF9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDlfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDlfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDlfZmNrID0geworCS5uYW1lCQk9ICJncHQ5X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ5X1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQ5X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMF9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDEwX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfZmNrID0geworCS5uYW1lCQk9ICJncHQxMF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTBfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDEwX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDExX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfZmNrID0geworCS5uYW1lCQk9ICJncHQxMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTFfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDExX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMl9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDEyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfZmNrID0geworCS5uYW1lCQk9ICJncHQxMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmc2VjdXJlXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUMTJfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwMV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DQlNQMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ljayA9IHsKKwkubmFtZQkJPSAibWNic3AyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ0JTUDJfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMl9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfaWNrID0geworCS5uYW1lCQk9ICJtY3NwaTFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DU1BJMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ZjayA9IHsKKwkubmFtZQkJPSAibWNzcGkxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ1NQSTFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9pY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfZmNrID0geworCS5uYW1lCQk9ICJtY3NwaTJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DU1BJMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfaWNrID0geworCS5uYW1lCQk9ICJ1YXJ0MV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxX2ZjayA9IHsKKwkubmFtZQkJPSAidWFydDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9pY2sgPSB7CisJLm5hbWUJCT0gInVhcnQyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfZmNrID0geworCS5uYW1lCQk9ICJ1YXJ0Ml9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDJfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2ljayA9IHsKKwkubmFtZQkJPSAidWFydDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQzX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19mY2sgPSB7CisJLm5hbWUJCT0gInVhcnQzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUM19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3Bpb3NfaWNrID0geworCS5uYW1lCQk9ICJncGlvc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUElPU19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3Bpb3NfZmNrID0geworCS5uYW1lCQk9ICJncGlvc19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUElPU19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXB1X3dkdF9pY2sgPSB7CisJLm5hbWUJCT0gIm1wdV93ZHRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVBVX1dEVF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXB1X3dkdF9mY2sgPSB7CisJLm5hbWUJCT0gIm1wdV93ZHRfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVBVX1dEVF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3luY18zMmtfaWNrID0geworCS5uYW1lCQk9ICJzeW5jXzMya19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fMzJLU1lOQ19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0MV9pY2sgPSB7CisJLm5hbWUJCT0gIndkdDFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fV0RUMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgb21hcGN0cmxfaWNrID0geworCS5uYW1lCQk9ICJvbWFwY3RybF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fT01BUENUUkxfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9pY2sgPSB7CisJLm5hbWUJCT0gImNhbV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0NBTV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIGNhbV9mY2sgY29udHJvbHMgYm90aCBDQU1fTUNMSyBhbmQgQ0FNX0ZDTEsuICBJdCBzaG91bGQgcHJvYmFibHkgYmUKKyAqIHNwbGl0IGludG8gdHdvIHNlcGFyYXRlIGNsb2Nrcywgc2luY2UgdGhlIHBhcmVudCBjbG9ja3MgYXJlIGRpZmZlcmVudAorICogYW5kIHRoZSBjbG9ja2RvbWFpbnMgYXJlIGFsc28gZGlmZmVyZW50LgorICovCitzdGF0aWMgc3RydWN0IGNsayBjYW1fZmNrID0geworCS5uYW1lCQk9ICJjYW1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9DQU1fU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1haWxib3hlc19pY2sgPSB7CisJLm5hbWUJCT0gIm1haWxib3hlc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUFJTEJPWEVTX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQ0X2ljayA9IHsKKwkubmFtZQkJPSAid2R0NF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fV0RUNF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0NF9mY2sgPSB7CisJLm5hbWUJCT0gIndkdDRfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1dEVDRfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfaWNrID0geworCS5uYW1lCQk9ICJ3ZHQzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9XRFQzX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQzX2ZjayA9IHsKKwkubmFtZQkJPSAid2R0M19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fV0RUM19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXNwcm9faWNrID0geworCS5uYW1lCQk9ICJtc3Byb19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVNQUk9fU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ZjayA9IHsKKwkubmFtZQkJPSAibXNwcm9fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01TUFJPX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNfaWNrID0geworCS5uYW1lCQk9ICJtbWNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX01NQ19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jX2ZjayA9IHsKKwkubmFtZQkJPSAibW1jX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9NTUNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZhY19pY2sgPSB7CisJLm5hbWUJCT0gImZhY19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fRkFDX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmYWNfZmNrID0geworCS5uYW1lCQk9ICJmYWNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0ZBQ19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZWFjX2ljayA9IHsKKwkubmFtZQkJPSAiZWFjX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9FQUNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVhY19mY2sgPSB7CisJLm5hbWUJCT0gImVhY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fRUFDX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBoZHFfaWNrID0geworCS5uYW1lCQk9ICJoZHFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0hEUV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ZjayA9IHsKKwkubmFtZQkJPSAiaGRxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9IRFFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfaWNrID0geworCS5uYW1lCQk9ICJpMmMyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JMkMyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9pY2sgPSB7CisJLm5hbWUJCT0gImkyYzFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0kyQzFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfZmNrID0geworCS5uYW1lCQk9ICJpMmMxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JMkMxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncG1jX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3BtY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLCAvKiBSTUs6IG1pc3Npbmc/ICovCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNkbWFfZmNrID0geworCS5uYW1lCQk9ICJzZG1hX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzZG1hX2ljayA9IHsKKwkubmFtZQkJPSAic2RtYV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLCAvKiBSTUs6IG1pc3Npbmc/ICovCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZseW5xX2ljayA9IHsKKwkubmFtZQkJPSAidmx5bnFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fVkxZTlFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdmx5bnFfZmNrXzk2bV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdmx5bnFfZmNrX2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKKwl7IC5kaXYgPSA5LCAudmFsID0gOSwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMTIsIC52YWwgPSAxMiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSAxNiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMTgsIC52YWwgPSAxOCwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB2bHlucV9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmZ1bmNfOTZtX2NrLCAucmF0ZXMgPSB2bHlucV9mY2tfOTZtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmNvcmVfY2ssCSAgLnJhdGVzID0gdmx5bnFfZmNrX2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZseW5xX2ZjayA9IHsKKwkubmFtZQkJPSAidmx5bnFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX1ZMWU5RX1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNDIwX0NMS1NFTF9WTFlOUV9NQVNLLAorCS5jbGtzZWwJCT0gdmx5bnFfZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZGVzX2ljayA9IHsKKwkubmFtZQkJPSAiZGVzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9ERVNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNoYV9pY2sgPSB7CisJLm5hbWUJCT0gInNoYV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fU0hBX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBybmdfaWNrID0geworCS5uYW1lCQk9ICJybmdfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1JOR19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYWVzX2ljayA9IHsKKwkubmFtZQkJPSAiYWVzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9BRVNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBrYV9pY2sgPSB7CisJLm5hbWUJCT0gInBrYV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fUEtBX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfZmNrID0geworCS5uYW1lCQk9ICJ1c2JfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VTQl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIFRoaXMgY2xvY2sgaXMgYSBjb21wb3NpdGUgY2xvY2sgd2hpY2ggZG9lcyBlbnRpcmUgc2V0IGNoYW5nZXMgdGhlbgorICogZm9yY2VzIGEgcmViYWxhbmNlLiBJdCBrZXlzIG9uIHRoZSBNUFUgc3BlZWQsIGJ1dCBpdCByZWFsbHkgY291bGQKKyAqIGJlIGFueSBrZXkgc3BlZWQgcGFydCBvZiBhIHNldCBpbiB0aGUgcmF0ZSB0YWJsZS4KKyAqCisgKiB0byByZWFsbHkgY2hhbmdlIGEgc2V0LCB5b3UgbmVlZCBtZW1vcnkgdGFibGUgc2V0cyB3aGljaCBnZXQgY2hhbmdlZAorICogaW4gc3JhbSwgcHJlLW5vdGlmaWVycyAmIHBvc3Qgbm90aWZpZXJzLCBjaGFuZ2luZyB0aGUgdG9wIHNldCwgd2l0aG91dAorICogaGF2aW5nIGxvdyBsZXZlbCBkaXNwbGF5IHJlY2FsYydzIHdvbid0IHdvcmsuLi4gdGhpcyBpcyB3aHkgZHBtIG5vdGlmaWVycworICogd29yaywgaXNyJ3Mgb2ZmLCB3YWxrIGEgbGlzdCBvZiBjbG9ja3MgYWxyZWFkeSBfb2ZmXyBhbmQgbm90IG1lc3Npbmcgd2l0aAorICogdGhlIGJ1cy4KKyAqCisgKiBUaGlzIGNsb2NrIHNob3VsZCBoYXZlIG5vIHBhcmVudC4gSXQgZW1ib2RpZXMgdGhlIGVudGlyZSB1cHBlciBsZXZlbAorICogYWN0aXZlIHNldC4gQSBwYXJlbnQgd2lsbCBtZXNzIHVwIHNvbWUgb2YgdGhlIGluaXQgYWxzby4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgdmlydF9wcmNtX3NldCA9IHsKKwkubmFtZQkJPSAidmlydF9wcmNtX3NldCIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmbXB1X2NrLAkvKiBJbmRleGVkIGJ5IG1wdSBzcGVlZCwgbm8gcGFyZW50ICovCisJLnJlY2FsYwkJPSAmb21hcDJfdGFibGVfbXB1X3JlY2FsYywJLyogc2V0cyBhcmUga2V5ZWQgb24gbXB1IHJhdGUgKi8KKwkuc2V0X3JhdGUJPSAmb21hcDJfc2VsZWN0X3RhYmxlX3JhdGUsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfcm91bmRfdG9fdGFibGVfcmF0ZSwKK307CisKKworLyoKKyAqIGNsa2RldiBpbnRlZ3JhdGlvbgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9jbGsgb21hcDI0MjBfY2xrc1tdID0geworCS8qIGV4dGVybmFsIHJvb3Qgc291cmNlcyAqLworCUNMSyhOVUxMLAkiZnVuY18zMmtfY2siLAkmZnVuY18zMmtfY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkic2VjdXJlXzMya19jayIsICZzZWN1cmVfMzJrX2NrLCBDS18yNDJYKSwKKwlDTEsoTlVMTCwJIm9zY19jayIsCSZvc2NfY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkic3lzX2NrIiwJJnN5c19jaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJhbHRfY2siLAkmYWx0X2NrLAlDS18yNDJYKSwKKwkvKiBpbnRlcm5hbCBhbmFsb2cgc291cmNlcyAqLworCUNMSyhOVUxMLAkiZHBsbF9jayIsCSZkcGxsX2NrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJImFwbGw5Nl9jayIsCSZhcGxsOTZfY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiYXBsbDU0X2NrIiwJJmFwbGw1NF9jaywJQ0tfMjQyWCksCisJLyogaW50ZXJuYWwgcHJjbSByb290IHNvdXJjZXMgKi8KKwlDTEsoTlVMTCwJImZ1bmNfNTRtX2NrIiwJJmZ1bmNfNTRtX2NrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJImNvcmVfY2siLAkmY29yZV9jaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJmdW5jXzk2bV9jayIsCSZmdW5jXzk2bV9jaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJmdW5jXzQ4bV9jayIsCSZmdW5jXzQ4bV9jaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJmdW5jXzEybV9jayIsCSZmdW5jXzEybV9jaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJja193ZHQxX29zYyIsCSZ3ZHQxX29zY19jaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzeXNfY2xrb3V0X3NyYyIsICZzeXNfY2xrb3V0X3NyYywgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzeXNfY2xrb3V0IiwJJnN5c19jbGtvdXQsCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkic3lzX2Nsa291dDJfc3JjIiwgJnN5c19jbGtvdXQyX3NyYywgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzeXNfY2xrb3V0MiIsCSZzeXNfY2xrb3V0MiwJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJlbXVsX2NrIiwJJmVtdWxfY2ssCUNLXzI0MlgpLAorCS8qIG1wdSBkb21haW4gY2xvY2tzICovCisJQ0xLKE5VTEwsCSJtcHVfY2siLAkmbXB1X2NrLAlDS18yNDJYKSwKKwkvKiBkc3AgZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkiZHNwX2ZjayIsCSZkc3BfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJImRzcF9pcmF0ZV9pY2siLCAmZHNwX2lyYXRlX2ljaywgQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJkc3BfaWNrIiwJJmRzcF9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiaXZhMV9pZmNrIiwJJml2YTFfaWZjaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJpdmExX21wdV9pbnRfaWZjayIsICZpdmExX21wdV9pbnRfaWZjaywgQ0tfMjQyWCksCisJLyogR0ZYIGRvbWFpbiBjbG9ja3MgKi8KKwlDTEsoTlVMTCwJImdmeF8zZF9mY2siLAkmZ2Z4XzNkX2ZjaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJnZnhfMmRfZmNrIiwJJmdmeF8yZF9mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ2Z4X2ljayIsCSZnZnhfaWNrLAlDS18yNDJYKSwKKwkvKiBEU1MgZG9tYWluIGNsb2NrcyAqLworCUNMSygib21hcGRzcyIsCSJpY2siLAkJJmRzc19pY2ssCUNLXzI0MlgpLAorCUNMSygib21hcGRzcyIsCSJkc3MxX2ZjayIsCSZkc3MxX2ZjaywJQ0tfMjQyWCksCisJQ0xLKCJvbWFwZHNzIiwJImRzczJfZmNrIiwJJmRzczJfZmNrLAlDS18yNDJYKSwKKwlDTEsoIm9tYXBkc3MiLAkidHZfZmNrIiwJJmRzc181NG1fZmNrLAlDS18yNDJYKSwKKwkvKiBMMyBkb21haW4gY2xvY2tzICovCisJQ0xLKE5VTEwsCSJjb3JlX2wzX2NrIiwJJmNvcmVfbDNfY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkic3NpX2ZjayIsCSZzc2lfc3NyX3NzdF9mY2ssIENLXzI0MlgpLAorCUNMSyhOVUxMLAkidXNiX2w0X2ljayIsCSZ1c2JfbDRfaWNrLAlDS18yNDJYKSwKKwkvKiBMNCBkb21haW4gY2xvY2tzICovCisJQ0xLKE5VTEwsCSJsNF9jayIsCSZsNF9jaywJCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkic3NpX2w0X2ljayIsCSZzc2lfbDRfaWNrLAlDS18yNDJYKSwKKwkvKiB2aXJ0dWFsIG1ldGEtZ3JvdXAgY2xvY2sgKi8KKwlDTEsoTlVMTCwJInZpcnRfcHJjbV9zZXQiLCAmdmlydF9wcmNtX3NldCwgQ0tfMjQyWCksCisJLyogZ2VuZXJhbCBsNCBpbnRlcmZhY2UgY2ssIG11bHRpLXBhcmVudCBmdW5jdGlvbmFsIGNsayAqLworCUNMSyhOVUxMLAkiZ3B0MV9pY2siLAkmZ3B0MV9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0MV9mY2siLAkmZ3B0MV9mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0Ml9pY2siLAkmZ3B0Ml9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0Ml9mY2siLAkmZ3B0Ml9mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0M19pY2siLAkmZ3B0M19pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0M19mY2siLAkmZ3B0M19mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0NF9pY2siLAkmZ3B0NF9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0NF9mY2siLAkmZ3B0NF9mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0NV9pY2siLAkmZ3B0NV9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0NV9mY2siLAkmZ3B0NV9mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0Nl9pY2siLAkmZ3B0Nl9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0Nl9mY2siLAkmZ3B0Nl9mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0N19pY2siLAkmZ3B0N19pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0N19mY2siLAkmZ3B0N19mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0OF9pY2siLAkmZ3B0OF9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0OF9mY2siLAkmZ3B0OF9mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0OV9pY2siLAkmZ3B0OV9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0OV9mY2siLAkmZ3B0OV9mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0MTBfaWNrIiwJJmdwdDEwX2ljaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQxMF9mY2siLAkmZ3B0MTBfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDExX2ljayIsCSZncHQxMV9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3B0MTFfZmNrIiwJJmdwdDExX2ZjaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncHQxMl9pY2siLAkmZ3B0MTJfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwdDEyX2ZjayIsCSZncHQxMl9mY2ssCUNLXzI0MlgpLAorCUNMSygib21hcC1tY2JzcC4xIiwgImljayIsCSZtY2JzcDFfaWNrLAlDS18yNDJYKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsICJmY2siLAkmbWNic3AxX2ZjaywJQ0tfMjQyWCksCisJQ0xLKCJvbWFwLW1jYnNwLjIiLCAiaWNrIiwJJm1jYnNwMl9pY2ssCUNLXzI0MlgpLAorCUNMSygib21hcC1tY2JzcC4yIiwgImZjayIsCSZtY2JzcDJfZmNrLAlDS18yNDJYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjEiLCAiaWNrIiwJJm1jc3BpMV9pY2ssCUNLXzI0MlgpLAorCUNMSygib21hcDJfbWNzcGkuMSIsICJmY2siLAkmbWNzcGkxX2ZjaywJQ0tfMjQyWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4yIiwgImljayIsCSZtY3NwaTJfaWNrLAlDS18yNDJYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjIiLCAiZmNrIiwJJm1jc3BpMl9mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkidWFydDFfaWNrIiwJJnVhcnQxX2ljaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ1YXJ0MV9mY2siLAkmdWFydDFfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVhcnQyX2ljayIsCSZ1YXJ0Ml9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkidWFydDJfZmNrIiwJJnVhcnQyX2ZjaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJ1YXJ0M19pY2siLAkmdWFydDNfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVhcnQzX2ZjayIsCSZ1YXJ0M19mY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZ3Bpb3NfaWNrIiwJJmdwaW9zX2ljaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJncGlvc19mY2siLAkmZ3Bpb3NfZmNrLAlDS18yNDJYKSwKKwlDTEsoIm9tYXBfd2R0IiwJImljayIsCQkmbXB1X3dkdF9pY2ssCUNLXzI0MlgpLAorCUNMSygib21hcF93ZHQiLAkiZmNrIiwJCSZtcHVfd2R0X2ZjaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJzeW5jXzMya19pY2siLAkmc3luY18zMmtfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJIndkdDFfaWNrIiwJJndkdDFfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJIm9tYXBjdHJsX2ljayIsCSZvbWFwY3RybF9pY2ssCUNLXzI0MlgpLAorCUNMSygib21hcDI0eHhjYW0iLCAiZmNrIiwJJmNhbV9mY2ssCUNLXzI0MlgpLAorCUNMSygib21hcDI0eHhjYW0iLCAiaWNrIiwJJmNhbV9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkibWFpbGJveGVzX2ljayIsICZtYWlsYm94ZXNfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJIndkdDRfaWNrIiwJJndkdDRfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJIndkdDRfZmNrIiwJJndkdDRfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJIndkdDNfaWNrIiwJJndkdDNfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJIndkdDNfZmNrIiwJJndkdDNfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJIm1zcHJvX2ljayIsCSZtc3Byb19pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkibXNwcm9fZmNrIiwJJm1zcHJvX2ZjaywJQ0tfMjQyWCksCisJQ0xLKCJtbWNpLW9tYXAuMCIsICJpY2siLAkmbW1jX2ljaywJQ0tfMjQyWCksCisJQ0xLKCJtbWNpLW9tYXAuMCIsICJmY2siLAkmbW1jX2ZjaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJmYWNfaWNrIiwJJmZhY19pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkiZmFjX2ZjayIsCSZmYWNfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJImVhY19pY2siLAkmZWFjX2ljaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJlYWNfZmNrIiwJJmVhY19mY2ssCUNLXzI0MlgpLAorCUNMSygib21hcF9oZHEuMCIsICJpY2siLAkmaGRxX2ljaywJQ0tfMjQyWCksCisJQ0xLKCJvbWFwX2hkcS4xIiwgImZjayIsCSZoZHFfZmNrLAlDS18yNDJYKSwKKwlDTEsoImkyY19vbWFwLjEiLCAiaWNrIiwJJmkyYzFfaWNrLAlDS18yNDJYKSwKKwlDTEsoImkyY19vbWFwLjEiLCAiZmNrIiwJJmkyYzFfZmNrLAlDS18yNDJYKSwKKwlDTEsoImkyY19vbWFwLjIiLCAiaWNrIiwJJmkyYzJfaWNrLAlDS18yNDJYKSwKKwlDTEsoImkyY19vbWFwLjIiLCAiZmNrIiwJJmkyYzJfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJImdwbWNfZmNrIiwJJmdwbWNfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJInNkbWFfZmNrIiwJJnNkbWFfZmNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJInNkbWFfaWNrIiwJJnNkbWFfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJInZseW5xX2ljayIsCSZ2bHlucV9pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkidmx5bnFfZmNrIiwJJnZseW5xX2ZjaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJkZXNfaWNrIiwJJmRlc19pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkic2hhX2ljayIsCSZzaGFfaWNrLAlDS18yNDJYKSwKKwlDTEsoIm9tYXBfcm5nIiwJImljayIsCQkmcm5nX2ljaywJQ0tfMjQyWCksCisJQ0xLKE5VTEwsCSJhZXNfaWNrIiwJJmFlc19pY2ssCUNLXzI0MlgpLAorCUNMSyhOVUxMLAkicGthX2ljayIsCSZwa2FfaWNrLAlDS18yNDJYKSwKKwlDTEsoTlVMTCwJInVzYl9mY2siLAkmdXNiX2ZjaywJQ0tfMjQyWCksCit9OworCisvKgorICogaW5pdCBjb2RlCisgKi8KKworaW50IF9faW5pdCBvbWFwMjQyMF9jbGtfaW5pdCh2b2lkKQoreworCWNvbnN0IHN0cnVjdCBwcmNtX2NvbmZpZyAqcHJjbTsKKwlzdHJ1Y3Qgb21hcF9jbGsgKmM7CisJdTMyIGNsa3JhdGU7CisKKwlwcmNtX2Nsa3NyY19jdHJsID0gT01BUDI0MjBfUFJDTV9DTEtTUkNfQ1RSTDsKKwljbV9pZGxlc3RfcGxsID0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCk7CisJY3B1X21hc2sgPSBSQVRFX0lOXzI0Mlg7CisJcmF0ZV90YWJsZSA9IG9tYXAyNDIwX3JhdGVfdGFibGU7CisKKwljbGtfaW5pdCgmb21hcDJfY2xrX2Z1bmN0aW9ucyk7CisKKwlmb3IgKGMgPSBvbWFwMjQyMF9jbGtzOyBjIDwgb21hcDI0MjBfY2xrcyArIEFSUkFZX1NJWkUob21hcDI0MjBfY2xrcyk7CisJICAgICBjKyspCisJCWNsa19wcmVpbml0KGMtPmxrLmNsayk7CisKKwlvc2NfY2sucmF0ZSA9IG9tYXAyX29zY19jbGtfcmVjYWxjKCZvc2NfY2spOworCXByb3BhZ2F0ZV9yYXRlKCZvc2NfY2spOworCXN5c19jay5yYXRlID0gb21hcDJ4eHhfc3lzX2Nsa19yZWNhbGMoJnN5c19jayk7CisJcHJvcGFnYXRlX3JhdGUoJnN5c19jayk7CisKKwlmb3IgKGMgPSBvbWFwMjQyMF9jbGtzOyBjIDwgb21hcDI0MjBfY2xrcyArIEFSUkFZX1NJWkUob21hcDI0MjBfY2xrcyk7CisJICAgICBjKyspIHsKKwkJY2xrZGV2X2FkZCgmYy0+bGspOworCQljbGtfcmVnaXN0ZXIoYy0+bGsuY2xrKTsKKwkJb21hcDJfaW5pdF9jbGtfY2xrZG0oYy0+bGsuY2xrKTsKKwl9CisKKwkvKiBDaGVjayB0aGUgTVBVIHJhdGUgc2V0IGJ5IGJvb3Rsb2FkZXIgKi8KKwljbGtyYXRlID0gb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoJmRwbGxfY2spOworCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7CisJCWlmICghKHByY20tPmZsYWdzICYgY3B1X21hc2spKQorCQkJY29udGludWU7CisJCWlmIChwcmNtLT54dGFsX3NwZWVkICE9IHN5c19jay5yYXRlKQorCQkJY29udGludWU7CisJCWlmIChwcmNtLT5kcGxsX3NwZWVkIDw9IGNsa3JhdGUpCisJCQlicmVhazsKKwl9CisJY3Vycl9wcmNtX3NldCA9IHByY207CisKKwlyZWNhbGN1bGF0ZV9yb290X2Nsb2NrcygpOworCisJcHJfaW5mbygiQ2xvY2tpbmcgcmF0ZSAoQ3J5c3RhbC9EUExML01QVSk6ICVsZC4lMDFsZC8lbGQvJWxkIE1IelxuIiwKKwkJKHN5c19jay5yYXRlIC8gMTAwMDAwMCksIChzeXNfY2sucmF0ZSAvIDEwMDAwMCkgJSAxMCwKKwkJKGRwbGxfY2sucmF0ZSAvIDEwMDAwMDApLCAobXB1X2NrLnJhdGUgLyAxMDAwMDAwKSkgOworCisJLyoKKwkgKiBPbmx5IGVuYWJsZSB0aG9zZSBjbG9ja3Mgd2Ugd2lsbCBuZWVkLCBsZXQgdGhlIGRyaXZlcnMKKwkgKiBlbmFibGUgb3RoZXIgY2xvY2tzIGFzIG5lY2Vzc2FyeQorCSAqLworCWNsa19lbmFibGVfaW5pdF9jbG9ja3MoKTsKKworCS8qIEF2b2lkIHNsZWVwaW5nIHNsZWVwaW5nIGR1cmluZyBvbWFwMl9jbGtfcHJlcGFyZV9mb3JfcmVib290KCkgKi8KKwl2Y2xrID0gY2xrX2dldChOVUxMLCAidmlydF9wcmNtX3NldCIpOworCXNjbGsgPSBjbGtfZ2V0KE5VTEwsICJzeXNfY2siKTsKKwlkY2xrID0gY2xrX2dldChOVUxMLCAiZHBsbF9jayIpOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNDMwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjQzMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZDBjY2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjQzMC5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBjbG9jazI0MzAuYyAtIE9NQVAyNDMwLXNwZWNpZmljIGNsb2NrIGludGVncmF0aW9uIGNvZGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0czoKKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqIFBhdWwgV2FsbXNsZXkKKyAqCisgKiBCYXNlZCBvbiBlYXJsaWVyIHdvcmsgYnkgVHV1a2thIFRpa2thbmVuLCBUb255IExpbmRncmVuLAorICogR29yZG9uIE1jTnV0dCBhbmQgUmlkZ2VSdW4sIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjdW5kZWYgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgImNsb2NrMnh4eC5oIgorI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCisKKy8qKgorICogb21hcDI0MzBfY2xrX2kyY2hzX2ZpbmRfaWRsZXN0IC0gcmV0dXJuIENNX0lETEVTVCBpbmZvIGZvciAyNDMwIEkyQ0hTCisgKiBAY2xrOiBzdHJ1Y3QgY2xrICogYmVpbmcgZW5hYmxlZAorICogQGlkbGVzdF9yZWc6IHZvaWQgX19pb21lbSAqKiB0byBzdG9yZSBDTV9JRExFU1QgcmVnIGFkZHJlc3MgaW50bworICogQGlkbGVzdF9iaXQ6IHBvaW50ZXIgdG8gYSB1OCB0byBzdG9yZSB0aGUgQ01fSURMRVNUIGJpdCBzaGlmdCBpbnRvCisgKiBAaWRsZXN0X3ZhbDogcG9pbnRlciB0byBhIHU4IHRvIHN0b3JlIHRoZSBDTV9JRExFU1QgaW5kaWNhdG9yCisgKgorICogT01BUDI0MzAgSTJDSFMgQ01fSURMRVNUIGJpdHMgYXJlIGluIENNX0lETEVTVDFfQ09SRSwgYnV0IHRoZQorICogQ01fKkNMS0VOIGJpdHMgYXJlIGluIENNX3tJLEZ9Q0xLRU4yX0NPUkUuICBUaGlzIGN1c3RvbSBmdW5jdGlvbgorICogcGFzc2VzIGJhY2sgdGhlIGNvcnJlY3QgQ01fSURMRVNUIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIEkyQ0hTCisgKiBtb2R1bGVzLiAgTm8gcmV0dXJuIHZhbHVlLgorICovCitzdGF0aWMgdm9pZCBvbWFwMjQzMF9jbGtfaTJjaHNfZmluZF9pZGxlc3Qoc3RydWN0IGNsayAqY2xrLAorCQkJCQkgICB2b2lkIF9faW9tZW0gKippZGxlc3RfcmVnLAorCQkJCQkgICB1OCAqaWRsZXN0X2JpdCwKKwkJCQkJICAgdTggKmlkbGVzdF92YWwpCit7CisJKmlkbGVzdF9yZWcgPSBPTUFQMjQzMF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JRExFU1QpOworCSppZGxlc3RfYml0ID0gY2xrLT5lbmFibGVfYml0OworCSppZGxlc3RfdmFsID0gT01BUDI0WFhfQ01fSURMRVNUX1ZBTDsKK30KKworLyogMjQzMCBJMkNIUyBoYXMgbm9uLXN0YW5kYXJkIElETEVTVCByZWdpc3RlciAqLworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDI0MzBfaTJjaHNfd2FpdCA9IHsKKwkuZW5hYmxlCQk9IG9tYXAyX2RmbHRfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9IG9tYXAyX2RmbHRfY2xrX2Rpc2FibGUsCisJLmZpbmRfaWRsZXN0CT0gb21hcDI0MzBfY2xrX2kyY2hzX2ZpbmRfaWRsZXN0LAorCS5maW5kX2NvbXBhbmlvbiA9IG9tYXAyX2Nsa19kZmx0X2ZpbmRfY29tcGFuaW9uLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNDMwX2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syNDMwX2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDM4YjZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazI0MzBfZGF0YS5jCkBAIC0wLDAgKzEsMjAwOCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMjQzMF9kYXRhLmMKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqICBDb250YWN0czoKKyAqICBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+CisgKiAgUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2luY2x1ZGUgPHBsYXQvY2xrZGV2X29tYXAuaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY2xvY2syeHh4LmgiCisjaW5jbHVkZSAib3BwMnh4eC5oIgorI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgorI2luY2x1ZGUgImNtLXJlZ2JpdHMtMjR4eC5oIgorI2luY2x1ZGUgInNkcmMuaCIKKworI2RlZmluZSBPTUFQX0NNX1JFR0FERFIJCQlPTUFQMjQzMF9DTV9SRUdBRERSCisKKy8qCisgKiAyNDMwIGNsb2NrIHRyZWUuCisgKgorICogTk9URTpJbiBtYW55IGNhc2VzIGhlcmUgd2UgYXJlIGFzc2lnbmluZyBhICdkZWZhdWx0JyBwYXJlbnQuCUluIG1hbnkKKyAqCWNhc2VzIHRoZSBwYXJlbnQgaXMgc2VsZWN0YWJsZS4JVGhlIGdldC9zZXQgcGFyZW50IGNhbGxzIHdpbGwgYWxzbworICoJc3dpdGNoIHNvdXJjZXMuCisgKgorICoJTWFueSBzb21lIGNsb2NrcyBzYXkgYWx3YXlzX2VuYWJsZWQsIGJ1dCB0aGV5IGNhbiBiZSBhdXRvIGlkbGVkIGZvcgorICoJcG93ZXIgc2F2aW5ncy4gVGhleSB3aWxsIGFsd2F5cyBiZSBhdmFpbGFibGUgdXBvbiBjbG9jayByZXF1ZXN0LgorICoKKyAqCVNldmVyYWwgc291cmNlcyBhcmUgZ2l2ZW4gaW5pdGlhbCByYXRlcyB3aGljaCBtYXkgYmUgd3JvbmcsIHRoaXMgd2lsbAorICoJYmUgZml4ZWQgdXAgaW4gdGhlIGluaXQgZnVuYy4KKyAqCisgKglUaGluZ3MgYXJlIGJyb2FkbHkgc2VwYXJhdGVkIGJlbG93IGJ5IGNsb2NrIGRvbWFpbnMuIEl0IGlzCisgKglub3Rld29ydGh5IHRoYXQgbW9zdCBwZXJpZmVyYWxzIGhhdmUgZGVwZW5kZW5jaWVzIG9uIG11bHRpcGxlIGNsb2NrCisgKglkb21haW5zLiBNYW55IGdldCB0aGVpciBpbnRlcmZhY2UgY2xvY2tzIGZyb20gdGhlIEw0IGRvbWFpbiwgYnV0IGdldAorICoJZnVuY3Rpb25hbCBjbG9ja3MgZnJvbSBmaXhlZCBzb3VyY2VzIG9yIG90aGVyIGNvcmUgZG9tYWluIGRlcml2ZWQKKyAqCWNsb2Nrcy4KKyAqLworCisvKiBCYXNlIGV4dGVybmFsIGlucHV0IGNsb2NrcyAqLworc3RhdGljIHN0cnVjdCBjbGsgZnVuY18zMmtfY2sgPSB7CisJLm5hbWUJCT0gImZ1bmNfMzJrX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSAzMjAwMCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNlY3VyZV8zMmtfY2sgPSB7CisJLm5hbWUJCT0gInNlY3VyZV8zMmtfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yYXRlCQk9IDMyNzY4LAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorfTsKKworLyogVHlwaWNhbCAxMi8xM01IeiBpbiBzdGFuZGFsb25lIG1vZGUsIHdpbGwgYmUgMjZNaHogaW4gY2hhc3NpcyBtb2RlICovCitzdGF0aWMgc3RydWN0IGNsayBvc2NfY2sgPSB7CQkvKiAoKjEyLCAqMTMsIDE5LjIsICoyNiwgMzguNClNSHogKi8KKwkubmFtZQkJPSAib3NjX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb3NjY2ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfb3NjX2Nsa19yZWNhbGMsCit9OworCisvKiBXaXRob3V0IG1vZGVtIGxpa2VseSAxMk1Ieiwgd2l0aCBtb2RlbSBsaWtlbHkgMTNNSHogKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jayA9IHsJCS8qICgqMTIsICoxMywgMTkuMiwgMjYsIDM4LjQpTUh6ICovCisJLm5hbWUJCT0gInN5c19jayIsCQkvKiB+IHJlZl9jbGsgYWxzbyAqLworCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJm9zY19jaywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMnh4eF9zeXNfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFsdF9jayA9IHsJCS8qIFR5cGljYWwgNTRNIG9yIDQ4TSwgbWF5IG5vdCBleGlzdCAqLworCS5uYW1lCQk9ICJhbHRfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yYXRlCQk9IDU0MDAwMDAwLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorfTsKKworLyoKKyAqIEFuYWxvZyBkb21haW4gcm9vdCBzb3VyY2UgY2xvY2tzCisgKi8KKworLyogZHBsbF9jaywgaXMgYnJva2VuIG91dCBpbiB0byBzcGVjaWFsIGNhc2VzIHRocm91Z2ggY2xrc2VsICovCisvKiBSRVZJU0lUOiBSYXRlIGNoYW5nZXMgb24gZHBsbF9jayB0cmlnZ2VyIGEgZnVsbCBzZXQgY2hhbmdlLgkuLi4KKyAqIGRlYWwgd2l0aCB0aGlzCisgKi8KKworc3RhdGljIHN0cnVjdCBkcGxsX2RhdGEgZHBsbF9kZCA9IHsKKwkubXVsdF9kaXYxX3JlZwkJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCisJLm11bHRfbWFzawkJPSBPTUFQMjRYWF9EUExMX01VTFRfTUFTSywKKwkuZGl2MV9tYXNrCQk9IE9NQVAyNFhYX0RQTExfRElWX01BU0ssCisJLmNsa19ieXBhc3MJCT0gJnN5c19jaywKKwkuY2xrX3JlZgkJPSAmc3lzX2NrLAorCS5jb250cm9sX3JlZwkJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfbWFzawkJPSBPTUFQMjRYWF9FTl9EUExMX01BU0ssCisJLm1heF9tdWx0aXBsaWVyCQk9IDEwMjMsCisJLm1pbl9kaXZpZGVyCQk9IDEsCisJLm1heF9kaXZpZGVyCQk9IDE2LAorCS5yYXRlX3RvbGVyYW5jZQkJPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKK307CisKKy8qCisgKiBYWFggQ2Fubm90IGFkZCByb3VuZF9yYXRlIGhlcmUgeWV0LCBhcyB0aGlzIGlzIHN0aWxsIGEgY29tcG9zaXRlIGNsb2NrLAorICogbm90IGp1c3QgYSBEUExMCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY2sgPSB7CisJLm5hbWUJCT0gImRwbGxfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnN5c19jaywJCS8qIENhbiBiZSBmdW5jXzMyayBhbHNvICovCisJLmRwbGxfZGF0YQk9ICZkcGxsX2RkLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2RwbGxjb3JlX3JlY2FsYywKKwkuc2V0X3JhdGUJPSAmb21hcDJfcmVwcm9ncmFtX2RwbGxjb3JlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXBsbDk2X2NrID0geworCS5uYW1lCQk9ICJhcGxsOTZfY2siLAorCS5vcHMJCT0gJmNsa29wc19hcGxsOTYsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5yYXRlCQk9IDk2MDAwMDAwLAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl85Nk1fUExMX1NISUZULAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXBsbDU0X2NrID0geworCS5uYW1lCQk9ICJhcGxsNTRfY2siLAorCS5vcHMJCT0gJmNsa29wc19hcGxsNTQsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5yYXRlCQk9IDU0MDAwMDAwLAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl81NE1fUExMX1NISUZULAorfTsKKworLyoKKyAqIFBSQ00gZGlnaXRhbCBiYXNlIHNvdXJjZXMKKyAqLworCisvKiBmdW5jXzU0bV9jayAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfNTRtX2FwbGw1NF9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfNTRtX2FsdF9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBmdW5jXzU0bV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmYXBsbDU0X2NrLCAucmF0ZXMgPSBmdW5jXzU0bV9hcGxsNTRfcmF0ZXMsIH0sCisJeyAucGFyZW50ID0gJmFsdF9jaywJLnJhdGVzID0gZnVuY181NG1fYWx0X3JhdGVzLCB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfNTRtX2NrID0geworCS5uYW1lCQk9ICJmdW5jXzU0bV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmYXBsbDU0X2NrLAkvKiBjYW4gYWxzbyBiZSBhbHRfY2xrICovCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF81NE1fU09VUkNFLAorCS5jbGtzZWwJCT0gZnVuY181NG1fY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjb3JlX2NrID0geworCS5uYW1lCQk9ICJjb3JlX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsX2NrLAkJLyogY2FuIGFsc28gYmUgMzJrICovCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIGZ1bmNfOTZtX2NrICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfOTZtX2FwbGw5Nl9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfOTZtX2FsdF9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBmdW5jXzk2bV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmYXBsbDk2X2NrLAkucmF0ZXMgPSBmdW5jXzk2bV9hcGxsOTZfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmYWx0X2NrLAkucmF0ZXMgPSBmdW5jXzk2bV9hbHRfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfOTZtX2NrID0geworCS5uYW1lCQk9ICJmdW5jXzk2bV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmYXBsbDk2X2NrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0MzBfOTZNX1NPVVJDRSwKKwkuY2xrc2VsCQk9IGZ1bmNfOTZtX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogZnVuY180OG1fY2sgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBmdW5jXzQ4bV9hcGxsOTZfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAyLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBmdW5jXzQ4bV9hbHRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZnVuY180OG1fY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmFwbGw5Nl9jaywJLnJhdGVzID0gZnVuY180OG1fYXBsbDk2X3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmFsdF9jaywgLnJhdGVzID0gZnVuY180OG1fYWx0X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzQ4bV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY180OG1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmFwbGw5Nl9jaywJIC8qIDk2TSBvciBBbHQgKi8KKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYXzQ4TV9TT1VSQ0UsCisJLmNsa3NlbAkJPSBmdW5jXzQ4bV9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmdW5jXzEybV9jayA9IHsKKwkubmFtZQkJPSAiZnVuY18xMm1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5maXhlZF9kaXYJPSA0LAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXBfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCit9OworCisvKiBTZWN1cmUgdGltZXIsIG9ubHkgYXZhaWxhYmxlIGluIHNlY3VyZSBtb2RlICovCitzdGF0aWMgc3RydWN0IGNsayB3ZHQxX29zY19jayA9IHsKKwkubmFtZQkJPSAiY2tfd2R0MV9vc2MiLAorCS5vcHMJCT0gJmNsa29wc19udWxsLCAvKiBSTUs6IG1pc3Npbmc/ICovCisJLnBhcmVudAkJPSAmb3NjX2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogVGhlIGNvbW1vbl9jbGtvdXQqIGNsa3NlbF9yYXRlIHN0cnVjdHMgYXJlIGNvbW1vbiB0bworICogc3lzX2Nsa291dCwgc3lzX2Nsa291dF9zcmMsIHN5c19jbGtvdXQyLCBhbmQgc3lzX2Nsa291dDJfc3JjLgorICogc3lzX2Nsa291dDJfKiBhcmUgMjQyMC1vbmx5LCBzbyB0aGUKKyAqIGNsa3NlbF9yYXRlIGZsYWdzIGZpZWxkcyBhcmUgaW5hY2N1cmF0ZSBmb3IgdGhvc2UgY2xvY2tzLiBUaGlzIGlzCisgKiBoYXJtbGVzcyBzaW5jZSBhY2Nlc3MgdG8gdGhvc2UgY2xvY2tzIGFyZSBnYXRlZCBieSB0aGUgc3RydWN0IGNsaworICogZmxhZ3MgZmllbGRzLCB3aGljaCBtYXJrIHRoZW0gYXMgMjQyMC1vbmx5LgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfc3JjX2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfc3JjX3N5c19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29tbW9uX2Nsa291dF9zcmNfOTZtX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjb21tb25fY2xrb3V0X3NyY181NG1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBjb21tb25fY2xrb3V0X3NyY19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywJICAucmF0ZXMgPSBjb21tb25fY2xrb3V0X3NyY19jb3JlX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAucmF0ZXMgPSBjb21tb25fY2xrb3V0X3NyY19zeXNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZnVuY185Nm1fY2ssIC5yYXRlcyA9IGNvbW1vbl9jbGtvdXRfc3JjXzk2bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZmdW5jXzU0bV9jaywgLnJhdGVzID0gY29tbW9uX2Nsa291dF9zcmNfNTRtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0X3NyYyA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dF9zcmMiLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUDI0MzBfUFJDTV9DTEtPVVRfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0NMS09VVF9FTl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDI0MzBfUFJDTV9DTEtPVVRfQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtPVVRfU09VUkNFX01BU0ssCisJLmNsa3NlbAkJPSBjb21tb25fY2xrb3V0X3NyY19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzeXNfY2xrb3V0X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZzeXNfY2xrb3V0X3NyYywgLnJhdGVzID0gY29tbW9uX2Nsa291dF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dCA9IHsKKwkubmFtZQkJPSAic3lzX2Nsa291dCIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmc3lzX2Nsa291dF9zcmMsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmNsa3NlbF9yZWcJPSBPTUFQMjQzMF9QUkNNX0NMS09VVF9DVFJMLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS09VVF9ESVZfTUFTSywKKwkuY2xrc2VsCQk9IHN5c19jbGtvdXRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZW11bF9jayA9IHsKKwkubmFtZQkJPSAiZW11bF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQMjQzMF9QUkNNX0NMS0VNVUxfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VNVUxBVElPTl9FTl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorCit9OworCisvKgorICogTVBVIGNsb2NrIGRvbWFpbgorICoJQ2xvY2tzOgorICoJCU1QVV9GQ0xLLCBNUFVfSUNMSworICoJCUlOVF9NX0ZDTEssIElOVF9NX0lfQ0xLCisgKgorICogLSBJbmRpdmlkdWFsIGNsb2NrcyBhcmUgaGFyZHdhcmUgbWFuYWdlZC4KKyAqIC0gQmFzZSBkaXZpZGVyIGNvbWVzIGZyb206IENNX0NMS1NFTF9NUFUKKyAqCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgbXB1X2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG1wdV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gbXB1X2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wdV9jayA9IHsJLyogQ29udHJvbCBjcHUgKi8KKwkubmFtZQkJPSAibXB1X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5jbGtkbV9uYW1lCT0gIm1wdV9jbGtkbSIsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9NUFVfTUFTSywKKwkuY2xrc2VsCQk9IG1wdV9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qCisgKiBEU1AgKDI0MzAtSVZBMi4xKSBjbG9jayBkb21haW4KKyAqIENsb2NrczoKKyAqCTI0MzA6IElWQTIuMV9GQ0xLIChyZWFsbHkganVzdCBEU1BfRkNMSyksIElWQTIuMV9JQ0xLCisgKgorICogV29uJ3QgYmUgdG9vIHNwZWNpZmljIGhlcmUuIFRoZSBjb3JlIGNsb2NrIGNvbWVzIGludG8gdGhpcyBibG9jaworICogaXQgaXMgZGl2aWRlZCB0aGVuIHRlZSdlZC4gT25lIGJyYW5jaCBnb2VzIGRpcmVjdGx5IHRvIHh5eiBlbmFibGUKKyAqIGNvbnRyb2xzLiBUaGUgb3RoZXIgYnJhbmNoIGdldHMgZnVydGhlciBkaXZpZGVkIGJ5IDIgdGhlbiBwb3NzaWJseQorICogcm91dGVkIGludG8gYSBzeW5jaHJvbml6ZXIgYW5kIG91dCBvZiBjbG9ja3MgYWJjLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRzcF9mY2tfY29yZV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3BfZmNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBkc3BfZmNrX2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9mY2sgPSB7CisJLm5hbWUJCT0gImRzcF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuY2xrZG1fbmFtZQk9ICJkc3BfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9DTV9GQ0xLRU5fRFNQX0VOX0RTUF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1BfTUFTSywKKwkuY2xrc2VsCQk9IGRzcF9mY2tfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBEU1AgaW50ZXJmYWNlIGNsb2NrICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRzcF9pcmF0ZV9pY2tfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3BfaXJhdGVfaWNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZkc3BfZmNrLCAucmF0ZXMgPSBkc3BfaXJhdGVfaWNrX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCisvKiBUaGlzIGNsb2NrIGRvZXMgbm90IGV4aXN0IGFzIHN1Y2ggaW4gdGhlIFRSTS4gKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9pcmF0ZV9pY2sgPSB7CisJLm5hbWUJCT0gImRzcF9pcmF0ZV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRzcF9mY2ssCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfRFNQX0lGX01BU0ssCisJLmNsa3NlbAkJPSBkc3BfaXJhdGVfaWNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogMjQzMCBvbmx5IC0gRU5fRFNQIGNvbnRyb2xzIGJvdGggZHNwIGZjbGsgYW5kIGljbGsgb24gMjQzMCAqLworc3RhdGljIHN0cnVjdCBjbGsgaXZhMl8xX2ljayA9IHsKKwkubmFtZQkJPSAiaXZhMl8xX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZkc3BfaXJhdGVfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9DTV9GQ0xLRU5fRFNQX0VOX0RTUF9TSElGVCwKK307CisKKy8qCisgKiBMMyBjbG9jayBkb21haW4KKyAqIEwzIGNsb2NrcyBhcmUgdXNlZCBmb3IgYm90aCBpbnRlcmZhY2UgYW5kIGZ1bmN0aW9uYWwgY2xvY2tzIHRvCisgKiBtdWx0aXBsZSBlbnRpdGllcy4gU29tZSBvZiB0aGVzZSBjbG9ja3MgYXJlIGNvbXBsZXRlbHkgbWFuYWdlZAorICogYnkgaGFyZHdhcmUsIGFuZCBzb21lIG90aGVycyBhbGxvdyBzb2Z0d2FyZSBjb250cm9sLiBIYXJkd2FyZQorICogbWFuYWdlZCBvbmVzIGdlbmVyYWwgYXJlIGJhc2VkIG9uIGRpcmVjdGx5IENMS19SRVEgc2lnbmFscyBhbmQKKyAqIHZhcmlvdXMgYXV0byBpZGxlIHNldHRpbmdzLiBUaGUgZnVuY3Rpb25hbCBzcGVjIHNldHMgbWFueSBvZiB0aGVzZQorICogYXMgJ3RpZS1oaWdoJyBmb3IgdGhlaXIgZW5hYmxlcy4KKyAqCisgKiBJLUNMT0NLUzoKKyAqCUwzLUludGVyY29ubmVjdCwgU01TLCBHUE1DLCBTRFJDLCBPQ01fUkFNLCBPQ01fUk9NLCBTRE1BCisgKglDQU0sIEhTLVVTQi4KKyAqIEYtQ0xPQ0sKKyAqCVNTSS4KKyAqCisgKiBHUE1DIG1lbW9yaWVzIGFuZCBTRFJDIGhhdmUgdGltaW5nIGFuZCBjbG9jayBzZW5zaXRpdmUgcmVnaXN0ZXJzIHdoaWNoCisgKiBtYXkgdmVyeSB3ZWxsIG5lZWQgbm90aWZpY2F0aW9uIHdoZW4gdGhlIGNsb2NrIGNoYW5nZXMuIEN1cnJlbnRseSBmb3IgbG93CisgKiBvcGVyYXRpbmcgcG9pbnRzLCB0aGVzZSBhcmUgdGFrZW4gY2FyZSBvZiBpbiBzbGVlcC5TLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvcmVfbDNfY29yZV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgY29yZV9sM19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gY29yZV9sM19jb3JlX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBjb3JlX2wzX2NrID0gewkvKiBVc2VkIGZvciBpY2sgYW5kIGZjaywgaW50ZXJjb25uZWN0ICovCisJLm5hbWUJCT0gImNvcmVfbDNfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9MM19NQVNLLAorCS5jbGtzZWwJCT0gY29yZV9sM19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIHVzYl9sNF9pY2sgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdXNiX2w0X2lja19jb3JlX2wzX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB1c2JfbDRfaWNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2wzX2NrLCAucmF0ZXMgPSB1c2JfbDRfaWNrX2NvcmVfbDNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCisvKiBJdCBpcyB1bmNsZWFyIGZyb20gVFJNIHdoZXRoZXIgdXNiX2w0X2ljayBpcyByZWFsbHkgaW4gTDMgb3IgTDQgY2xrZG0gKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9sNF9pY2sgPSB7CS8qIEZTLVVTQiBpbnRlcmZhY2UgY2xvY2sgKi8KKwkubmFtZQkJPSAidXNiX2w0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VTQl9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX1VTQl9NQVNLLAorCS5jbGtzZWwJCT0gdXNiX2w0X2lja19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qCisgKiBMNCBjbG9jayBtYW5hZ2VtZW50IGRvbWFpbgorICoKKyAqIFRoaXMgZG9tYWluIGNvbnRhaW5zIGxvdHMgb2YgaW50ZXJmYWNlIGNsb2NrcyBmcm9tIHRoZSBMNCBpbnRlcmZhY2UsIHNvbWUKKyAqIGZ1bmN0aW9uYWwgY2xvY2tzLglGaXhlZCBBUExMIGZ1bmN0aW9uYWwgc291cmNlIGNsb2NrcyBhcmUgbWFuYWdlZCBpbgorICogdGhpcyBkb21haW4uCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgbDRfY29yZV9sM19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBsNF9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9sM19jaywgLnJhdGVzID0gbDRfY29yZV9sM19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbDRfY2sgPSB7CQkvKiB1c2VkIGJvdGggYXMgYW4gaWNrIGFuZCBmY2sgKi8KKwkubmFtZQkJPSAibDRfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9MNF9NQVNLLAorCS5jbGtzZWwJCT0gbDRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKgorICogU1NJIGlzIGluIEwzIG1hbmFnZW1lbnQgZG9tYWluLCBpdHMgZGlyZWN0IHBhcmVudCBpcyBjb3JlIG5vdCBsMywKKyAqIG1hbnkgY29yZSBwb3dlciBkb21haW4gZW50aXRpZXMgYXJlIGdyb3VwZWQgaW50byB0aGUgTDMgY2xvY2sKKyAqIGRvbWFpbi4KKyAqIFNTSV9TU1JfRkNMSywgU1NJX1NTVF9GQ0xLLCBTU0lfTDRfSUNMSworICoKKyAqIHNzciA9IGNvcmUvMS8yLzMvNC81LCBzc3QgPSAxLzIgc3NyLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHNzaV9zc3Jfc3N0X2Zja19jb3JlX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDUsIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHNzaV9zc3Jfc3N0X2Zja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gc3NpX3Nzcl9zc3RfZmNrX2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9zc3Jfc3N0X2ZjayA9IHsKKwkubmFtZQkJPSAic3NpX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1NTSV9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX1NTSV9NQVNLLAorCS5jbGtzZWwJCT0gc3NpX3Nzcl9zc3RfZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyoKKyAqIFByZXN1bWFibHkgdGhpcyBpcyB0aGUgc2FtZSBhcyBTU0lfSUNMSy4KKyAqIFRSTSBjb250cmFkaWN0cyBpdHNlbGYgb24gd2hhdCBjbG9ja2RvbWFpbiBTU0lfSUNMSyBpcyBpbgorICovCitzdGF0aWMgc3RydWN0IGNsayBzc2lfbDRfaWNrID0geworCS5uYW1lCQk9ICJzc2lfbDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1NTSV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworCisvKgorICogR0ZYIGNsb2NrIGRvbWFpbgorICoJQ2xvY2tzOgorICogR0ZYX0ZDTEssIEdGWF9JQ0xLCisgKiBHRlhfQ0cxKDJkKSwgR0ZYX0NHMigzZCkKKyAqCisgKiBHRlhfRkNMSyBydW5zIGZyb20gTDMsIGFuZCBpcyBkaXZpZGVkIGJ5ICgxLDIsMyw0KQorICogVGhlIDJkIGFuZCAzZCBjbG9ja3MgcnVuIGF0IGEgaGFyZHdhcmUgZGV0ZXJtaW5lZAorICogZGl2aWRlZCB2YWx1ZSBvZiBmY2xrLgorICoKKyAqLworCisvKiBUaGlzIGNsa3NlbCBzdHJ1Y3QgaXMgc2hhcmVkIGJldHdlZW4gZ2Z4XzNkX2ZjayBhbmQgZ2Z4XzJkX2ZjayAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZ2Z4X2Zja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9sM19jaywgLnJhdGVzID0gZ2Z4X2wzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4XzNkX2ZjayA9IHsKKwkubmFtZQkJPSAiZ2Z4XzNkX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5jbGtkbV9uYW1lCT0gImdmeF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOXzNEX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUF9DTEtTRUxfR0ZYX01BU0ssCisJLmNsa3NlbAkJPSBnZnhfZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF8yZF9mY2sgPSB7CisJLm5hbWUJCT0gImdmeF8yZF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuY2xrZG1fbmFtZQk9ICJnZnhfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8yRF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVBfQ0xLU0VMX0dGWF9NQVNLLAorCS5jbGtzZWwJCT0gZ2Z4X2Zja19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9pY2sgPSB7CisJLm5hbWUJCT0gImdmeF9pY2siLAkJLyogRnJvbSBsMyAqLworCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sM19jaywKKwkuY2xrZG1fbmFtZQk9ICJnZnhfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQX0VOX0dGWF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIE1vZGVtIGNsb2NrIGRvbWFpbiAoMjQzMCkKKyAqCUNMT0NLUzoKKyAqCQlNRE1fT1NDX0NMSworICoJCU1ETV9JQ0xLCisgKiBUaGVzZSBjbG9ja3MgYXJlIHVzYWJsZSBpbiBjaGFzc2lzIG1vZGUgb25seS4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBtZG1faWNrX2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNDNYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfSwKKwl7IC5kaXYgPSA5LCAudmFsID0gOSwgLmZsYWdzID0gUkFURV9JTl8yNDNYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBtZG1faWNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBtZG1faWNrX2NvcmVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1kbV9pY2sgPSB7CQkvKiB1c2VkIGJvdGggYXMgYSBpY2sgYW5kIGZjayAqLworCS5uYW1lCQk9ICJtZG1faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmNsa2RtX25hbWUJPSAibWRtX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjQzMF9NRE1fTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfQ01fSUNMS0VOX01ETV9FTl9NRE1fU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0MzBfTURNX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjQzMF9DTEtTRUxfTURNX01BU0ssCisJLmNsa3NlbAkJPSBtZG1faWNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWRtX29zY19jayA9IHsKKwkubmFtZQkJPSAibWRtX29zY19jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZvc2NfY2ssCisJLmNsa2RtX25hbWUJPSAibWRtX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjQzMF9NRE1fTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fT1NDX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogRFNTIGNsb2NrIGRvbWFpbgorICogQ0xPQ0tzOgorICogRFNTX0w0X0lDTEssIERTU19MM19JQ0xLLAorICogRFNTX0NMSzEsIERTU19DTEsyLCBEU1NfNTRNSHpfQ0xLCisgKgorICogRFNTIGlzIGJvdGggaW5pdGlhdG9yIGFuZCB0YXJnZXQuCisgKi8KKy8qIFhYWCBBZGQgUkFURV9OT1RfVkFMSURBVEVEICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNzMV9mY2tfc3lzX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3MxX2Zja19jb3JlX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDUsIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCisJeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAorCXsgLmRpdiA9IDksIC52YWwgPSA5LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKKwl7IC5kaXYgPSAxNiwgLnZhbCA9IDE2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRzczFfZmNrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZzeXNfY2ssICAucmF0ZXMgPSBkc3MxX2Zja19zeXNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gZHNzMV9mY2tfY29yZV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzc19pY2sgPSB7CQkvKiBFbmFibGVzIGJvdGggTDMsTDQgSUNMSydzICovCisJLm5hbWUJCT0gImRzc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAkvKiByZWFsbHkgYm90aCBsMyBhbmQgbDQgKi8KKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRzczFfZmNrID0geworCS5uYW1lCQk9ICJkc3MxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmY29yZV9jaywJCS8qIENvcmUgb3Igc3lzICovCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9EU1MxX1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1MxX01BU0ssCisJLmNsa3NlbAkJPSBkc3MxX2Zja19jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNzMl9mY2tfc3lzX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3MyX2Zja180OG1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3MyX2Zja19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgIC5yYXRlcyA9IGRzczJfZmNrX3N5c19yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZmdW5jXzQ4bV9jaywgLnJhdGVzID0gZHNzMl9mY2tfNDhtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3MyX2ZjayA9IHsJCS8qIEFsdCBjbGsgdXNlZCBpbiBwb3dlciBtYW5hZ2VtZW50ICovCisJLm5hbWUJCT0gImRzczJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCQkvKiBmaXhlZCBhdCBzeXNfY2sgb3IgNDhNSHogKi8KKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzJfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0RTUzJfTUFTSywKKwkuY2xrc2VsCQk9IGRzczJfZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzXzU0bV9mY2sgPSB7CS8qIEFsdCBjbGsgdXNlZCBpbiBwb3dlciBtYW5hZ2VtZW50ICovCisJLm5hbWUJCT0gImRzc181NG1fZmNrIiwJLyogNTRtIHR2IGNsayAqLworCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY181NG1fY2ssCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9UVl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIENPUkUgcG93ZXIgZG9tYWluIElDTEsgJiBGQ0xLIGRlZmluZXMuCisgKiBNYW55IG9mIHRoZSB0aGVzZSBjYW4gaGF2ZSBtb3JlIHRoYW4gb25lIHBvc3NpYmxlIHBhcmVudC4gRW50cmllcworICogaGVyZSB3aWxsIGxpa2VseSBoYXZlIGFuIEw0IGludGVyZmFjZSBwYXJlbnQsIGFuZCBtYXkgaGF2ZSBtdWx0aXBsZQorICogZnVuY3Rpb25hbCBjbG9jayBwYXJlbnRzLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGdwdF9hbHRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwMjR4eF9ncHRfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmZ1bmNfMzJrX2NrLCAucmF0ZXMgPSBncHRfMzJrX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19jaywJICAucmF0ZXMgPSBncHRfc3lzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmFsdF9jaywJICAucmF0ZXMgPSBncHRfYWx0X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMV9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUMV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfaWNrID0geworCS5uYW1lCQk9ICJncHQyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQyX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0Ml9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUMl9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19pY2sgPSB7CisJLm5hbWUJCT0gImdwdDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDNfZmNrID0geworCS5uYW1lCQk9ICJncHQzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQzX1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQzX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ0X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0NF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDRfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDRfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDRfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfaWNrID0geworCS5uYW1lCQk9ICJncHQ1X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ1X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ1X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0NV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNV9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUNV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDZfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDZfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDZfZmNrID0geworCS5uYW1lCQk9ICJncHQ2X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ2X1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQ2X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0N19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUN19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19mY2sgPSB7CisJLm5hbWUJCT0gImdwdDdfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDdfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDdfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfaWNrID0geworCS5uYW1lCQk9ICJncHQ4X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ4X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ4X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0OF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOF9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUOF9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDlfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDlfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDlfZmNrID0geworCS5uYW1lCQk9ICJncHQ5X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ5X1NISUZULAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQ5X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMF9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDEwX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfZmNrID0geworCS5uYW1lCQk9ICJncHQxMF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTBfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDEwX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMV9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDExX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfZmNrID0geworCS5uYW1lCQk9ICJncHQxMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTFfU0hJRlQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCisJLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDExX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMl9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDEyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfZmNrID0geworCS5uYW1lCQk9ICJncHQxMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmc2VjdXJlXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQxMl9TSElGVCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUMTJfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwMV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DQlNQMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ljayA9IHsKKwkubmFtZQkJPSAibWNic3AyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ0JTUDJfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMl9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DQlNQM19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AzX2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3AzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNF9pY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A0X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDRfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01DQlNQNF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3A1X2ljayA9IHsKKwkubmFtZQkJPSAibWNic3A1X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ0JTUDVfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNV9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwNV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A1X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfaWNrID0geworCS5uYW1lCQk9ICJtY3NwaTFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DU1BJMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ZjayA9IHsKKwkubmFtZQkJPSAibWNzcGkxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQ1NQSTFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9pY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfZmNrID0geworCS5uYW1lCQk9ICJtY3NwaTJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01DU1BJMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkzX2ljayA9IHsKKwkubmFtZQkJPSAibWNzcGkzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NQ1NQSTNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpM19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNTUEkzX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9pY2sgPSB7CisJLm5hbWUJCT0gInVhcnQxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfZmNrID0geworCS5uYW1lCQk9ICJ1YXJ0MV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ljayA9IHsKKwkubmFtZQkJPSAidWFydDJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9mY2sgPSB7CisJLm5hbWUJCT0gInVhcnQyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfaWNrID0geworCS5uYW1lCQk9ICJ1YXJ0M19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2ZjayA9IHsKKwkubmFtZQkJPSAidWFydDNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQzX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvc19pY2sgPSB7CisJLm5hbWUJCT0gImdwaW9zX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvc19mY2sgPSB7CisJLm5hbWUJCT0gImdwaW9zX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzMya19jaywKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtcHVfd2R0X2ljayA9IHsKKwkubmFtZQkJPSAibXB1X3dkdF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NUFVfV0RUX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtcHVfd2R0X2ZjayA9IHsKKwkubmFtZQkJPSAibXB1X3dkdF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NUFVfV0RUX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzeW5jXzMya19pY2sgPSB7CisJLm5hbWUJCT0gInN5bmNfMzJrX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8zMktTWU5DX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQxX2ljayA9IHsKKwkubmFtZQkJPSAid2R0MV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9XRFQxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBvbWFwY3RybF9pY2sgPSB7CisJLm5hbWUJCT0gIm9tYXBjdHJsX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9PTUFQQ1RSTF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaWNyX2ljayA9IHsKKwkubmFtZQkJPSAiaWNyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0lDUl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2FtX2ljayA9IHsKKwkubmFtZQkJPSAiY2FtX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fQ0FNX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogY2FtX2ZjayBjb250cm9scyBib3RoIENBTV9NQ0xLIGFuZCBDQU1fRkNMSy4gIEl0IHNob3VsZCBwcm9iYWJseSBiZQorICogc3BsaXQgaW50byB0d28gc2VwYXJhdGUgY2xvY2tzLCBzaW5jZSB0aGUgcGFyZW50IGNsb2NrcyBhcmUgZGlmZmVyZW50CisgKiBhbmQgdGhlIGNsb2NrZG9tYWlucyBhcmUgYWxzbyBkaWZmZXJlbnQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9mY2sgPSB7CisJLm5hbWUJCT0gImNhbV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0NBTV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWFpbGJveGVzX2ljayA9IHsKKwkubmFtZQkJPSAibWFpbGJveGVzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQUlMQk9YRVNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDRfaWNrID0geworCS5uYW1lCQk9ICJ3ZHQ0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9XRFQ0X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQ0X2ZjayA9IHsKKwkubmFtZQkJPSAid2R0NF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fV0RUNF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbXNwcm9faWNrID0geworCS5uYW1lCQk9ICJtc3Byb19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVNQUk9fU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ZjayA9IHsKKwkubmFtZQkJPSAibXNwcm9fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX01TUFJPX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBmYWNfaWNrID0geworCS5uYW1lCQk9ICJmYWNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0ZBQ19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZmFjX2ZjayA9IHsKKwkubmFtZQkJPSAiZmFjX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9GQUNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhkcV9pY2sgPSB7CisJLm5hbWUJCT0gImhkcV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fSERRX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBoZHFfZmNrID0geworCS5uYW1lCQk9ICJoZHFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0hEUV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyoKKyAqIFhYWCBUaGlzIGlzIG1hcmtlZCBhcyBhIDI0MjAtb25seSBkZWZpbmUsIGJ1dCBpdCBjbGFpbXMgdG8gYmUgcHJlc2VudAorICogb24gMjQzMCBhbHNvLiAgRG91YmxlLWNoZWNrLgorICovCitzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ljayA9IHsKKwkubmFtZQkJPSAiaTJjMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjaHMyX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjaHMyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyNDMwX2kyY2hzX3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fSTJDSFMyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogWFhYIFRoaXMgaXMgbWFya2VkIGFzIGEgMjQyMC1vbmx5IGRlZmluZSwgYnV0IGl0IGNsYWltcyB0byBiZSBwcmVzZW50CisgKiBvbiAyNDMwIGFsc28uICBEb3VibGUtY2hlY2suCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfaWNrID0geworCS5uYW1lCQk9ICJpMmMxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JMkMxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmNoczFfZmNrID0geworCS5uYW1lCQk9ICJpMmNoczFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDI0MzBfaTJjaHNfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9JMkNIUzFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwbWNfZmNrID0geworCS5uYW1lCQk9ICJncG1jX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2RtYV9mY2sgPSB7CisJLm5hbWUJCT0gInNkbWFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLworCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNkbWFfaWNrID0geworCS5uYW1lCQk9ICJzZG1hX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2RyY19pY2sgPSB7CisJLm5hbWUJCT0gInNkcmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMyksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9TRFJDX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkZXNfaWNrID0geworCS5uYW1lCQk9ICJkZXNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RFU19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2hhX2ljayA9IHsKKwkubmFtZQkJPSAic2hhX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9TSEFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHJuZ19pY2sgPSB7CisJLm5hbWUJCT0gInJuZ19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fUk5HX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhZXNfaWNrID0geworCS5uYW1lCQk9ICJhZXNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0FFU19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGthX2ljayA9IHsKKwkubmFtZQkJPSAicGthX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9QS0FfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9mY2sgPSB7CisJLm5hbWUJCT0gInVzYl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVVNCX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2Joc19pY2sgPSB7CisJLm5hbWUJCT0gInVzYmhzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX1VTQkhTX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczFfaWNrID0geworCS5uYW1lCQk9ICJtbWNoczFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMxX2ZjayA9IHsKKwkubmFtZQkJPSAibW1jaHMxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIUzFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMl9pY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFMyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczJfZmNrID0geworCS5uYW1lCQk9ICJtbWNoczJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfaWNrID0geworCS5uYW1lCQk9ICJncGlvNV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDRfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fR1BJTzVfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW81X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3BpbzVfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0dQSU81X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtZG1faW50Y19pY2sgPSB7CisJLm5hbWUJCT0gIm1kbV9pbnRjX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZsNF9jaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NRE1fSU5UQ19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHNkYjFfZmNrID0geworCS5uYW1lCQk9ICJtbWNoc2RiMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTU1DSFNEQjFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzZGIyX2ZjayA9IHsKKwkubmFtZQkJPSAibW1jaHNkYjJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTREIyX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogVGhpcyBjbG9jayBpcyBhIGNvbXBvc2l0ZSBjbG9jayB3aGljaCBkb2VzIGVudGlyZSBzZXQgY2hhbmdlcyB0aGVuCisgKiBmb3JjZXMgYSByZWJhbGFuY2UuIEl0IGtleXMgb24gdGhlIE1QVSBzcGVlZCwgYnV0IGl0IHJlYWxseSBjb3VsZAorICogYmUgYW55IGtleSBzcGVlZCBwYXJ0IG9mIGEgc2V0IGluIHRoZSByYXRlIHRhYmxlLgorICoKKyAqIHRvIHJlYWxseSBjaGFuZ2UgYSBzZXQsIHlvdSBuZWVkIG1lbW9yeSB0YWJsZSBzZXRzIHdoaWNoIGdldCBjaGFuZ2VkCisgKiBpbiBzcmFtLCBwcmUtbm90aWZpZXJzICYgcG9zdCBub3RpZmllcnMsIGNoYW5naW5nIHRoZSB0b3Agc2V0LCB3aXRob3V0CisgKiBoYXZpbmcgbG93IGxldmVsIGRpc3BsYXkgcmVjYWxjJ3Mgd29uJ3Qgd29yay4uLiB0aGlzIGlzIHdoeSBkcG0gbm90aWZpZXJzCisgKiB3b3JrLCBpc3IncyBvZmYsIHdhbGsgYSBsaXN0IG9mIGNsb2NrcyBhbHJlYWR5IF9vZmZfIGFuZCBub3QgbWVzc2luZyB3aXRoCisgKiB0aGUgYnVzLgorICoKKyAqIFRoaXMgY2xvY2sgc2hvdWxkIGhhdmUgbm8gcGFyZW50LiBJdCBlbWJvZGllcyB0aGUgZW50aXJlIHVwcGVyIGxldmVsCisgKiBhY3RpdmUgc2V0LiBBIHBhcmVudCB3aWxsIG1lc3MgdXAgc29tZSBvZiB0aGUgaW5pdCBhbHNvLgorICovCitzdGF0aWMgc3RydWN0IGNsayB2aXJ0X3ByY21fc2V0ID0geworCS5uYW1lCQk9ICJ2aXJ0X3ByY21fc2V0IiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZtcHVfY2ssCS8qIEluZGV4ZWQgYnkgbXB1IHNwZWVkLCBubyBwYXJlbnQgKi8KKwkucmVjYWxjCQk9ICZvbWFwMl90YWJsZV9tcHVfcmVjYWxjLAkvKiBzZXRzIGFyZSBrZXllZCBvbiBtcHUgcmF0ZSAqLworCS5zZXRfcmF0ZQk9ICZvbWFwMl9zZWxlY3RfdGFibGVfcmF0ZSwKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9yb3VuZF90b190YWJsZV9yYXRlLAorfTsKKworCisvKgorICogY2xrZGV2IGludGVncmF0aW9uCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2NsayBvbWFwMjQzMF9jbGtzW10gPSB7CisJLyogZXh0ZXJuYWwgcm9vdCBzb3VyY2VzICovCisJQ0xLKE5VTEwsCSJmdW5jXzMya19jayIsCSZmdW5jXzMya19jaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJzZWN1cmVfMzJrX2NrIiwgJnNlY3VyZV8zMmtfY2ssIENLXzI0M1gpLAorCUNMSyhOVUxMLAkib3NjX2NrIiwJJm9zY19jaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJzeXNfY2siLAkmc3lzX2NrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImFsdF9jayIsCSZhbHRfY2ssCUNLXzI0M1gpLAorCS8qIGludGVybmFsIGFuYWxvZyBzb3VyY2VzICovCisJQ0xLKE5VTEwsCSJkcGxsX2NrIiwJJmRwbGxfY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiYXBsbDk2X2NrIiwJJmFwbGw5Nl9jaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJhcGxsNTRfY2siLAkmYXBsbDU0X2NrLAlDS18yNDNYKSwKKwkvKiBpbnRlcm5hbCBwcmNtIHJvb3Qgc291cmNlcyAqLworCUNMSyhOVUxMLAkiZnVuY181NG1fY2siLAkmZnVuY181NG1fY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiY29yZV9jayIsCSZjb3JlX2NrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImZ1bmNfOTZtX2NrIiwJJmZ1bmNfOTZtX2NrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImZ1bmNfNDhtX2NrIiwJJmZ1bmNfNDhtX2NrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImZ1bmNfMTJtX2NrIiwJJmZ1bmNfMTJtX2NrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImNrX3dkdDFfb3NjIiwJJndkdDFfb3NjX2NrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJInN5c19jbGtvdXRfc3JjIiwgJnN5c19jbGtvdXRfc3JjLCBDS18yNDNYKSwKKwlDTEsoTlVMTCwJInN5c19jbGtvdXQiLAkmc3lzX2Nsa291dCwJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJlbXVsX2NrIiwJJmVtdWxfY2ssCUNLXzI0M1gpLAorCS8qIG1wdSBkb21haW4gY2xvY2tzICovCisJQ0xLKE5VTEwsCSJtcHVfY2siLAkmbXB1X2NrLAlDS18yNDNYKSwKKwkvKiBkc3AgZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkiZHNwX2ZjayIsCSZkc3BfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImRzcF9pcmF0ZV9pY2siLCAmZHNwX2lyYXRlX2ljaywgQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJpdmEyXzFfaWNrIiwJJml2YTJfMV9pY2ssCUNLXzI0M1gpLAorCS8qIEdGWCBkb21haW4gY2xvY2tzICovCisJQ0xLKE5VTEwsCSJnZnhfM2RfZmNrIiwJJmdmeF8zZF9mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZ2Z4XzJkX2ZjayIsCSZnZnhfMmRfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdmeF9pY2siLAkmZ2Z4X2ljaywJQ0tfMjQzWCksCisJLyogTW9kZW0gZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkibWRtX2ljayIsCSZtZG1faWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJIm1kbV9vc2NfY2siLAkmbWRtX29zY19jaywJQ0tfMjQzWCksCisJLyogRFNTIGRvbWFpbiBjbG9ja3MgKi8KKwlDTEsoIm9tYXBkc3MiLAkiaWNrIiwJCSZkc3NfaWNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXBkc3MiLAkiZHNzMV9mY2siLAkmZHNzMV9mY2ssCUNLXzI0M1gpLAorCUNMSygib21hcGRzcyIsCSJkc3MyX2ZjayIsCSZkc3MyX2ZjaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwZHNzIiwJInR2X2ZjayIsCSZkc3NfNTRtX2ZjaywJQ0tfMjQzWCksCisJLyogTDMgZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkiY29yZV9sM19jayIsCSZjb3JlX2wzX2NrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJInNzaV9mY2siLAkmc3NpX3Nzcl9zc3RfZmNrLCBDS18yNDNYKSwKKwlDTEsoTlVMTCwJInVzYl9sNF9pY2siLAkmdXNiX2w0X2ljaywJQ0tfMjQzWCksCisJLyogTDQgZG9tYWluIGNsb2NrcyAqLworCUNMSyhOVUxMLAkibDRfY2siLAkmbDRfY2ssCQlDS18yNDNYKSwKKwlDTEsoTlVMTCwJInNzaV9sNF9pY2siLAkmc3NpX2w0X2ljaywJQ0tfMjQzWCksCisJLyogdmlydHVhbCBtZXRhLWdyb3VwIGNsb2NrICovCisJQ0xLKE5VTEwsCSJ2aXJ0X3ByY21fc2V0IiwgJnZpcnRfcHJjbV9zZXQsIENLXzI0M1gpLAorCS8qIGdlbmVyYWwgbDQgaW50ZXJmYWNlIGNrLCBtdWx0aS1wYXJlbnQgZnVuY3Rpb25hbCBjbGsgKi8KKwlDTEsoTlVMTCwJImdwdDFfaWNrIiwJJmdwdDFfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDFfZmNrIiwJJmdwdDFfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDJfaWNrIiwJJmdwdDJfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDJfZmNrIiwJJmdwdDJfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDNfaWNrIiwJJmdwdDNfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDNfZmNrIiwJJmdwdDNfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDRfaWNrIiwJJmdwdDRfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDRfZmNrIiwJJmdwdDRfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDVfaWNrIiwJJmdwdDVfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDVfZmNrIiwJJmdwdDVfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDZfaWNrIiwJJmdwdDZfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDZfZmNrIiwJJmdwdDZfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDdfaWNrIiwJJmdwdDdfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDdfZmNrIiwJJmdwdDdfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDhfaWNrIiwJJmdwdDhfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDhfZmNrIiwJJmdwdDhfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDlfaWNrIiwJJmdwdDlfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDlfZmNrIiwJJmdwdDlfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDEwX2ljayIsCSZncHQxMF9pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MTBfZmNrIiwJJmdwdDEwX2ZjaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJncHQxMV9pY2siLAkmZ3B0MTFfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwdDExX2ZjayIsCSZncHQxMV9mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MTJfaWNrIiwJJmdwdDEyX2ljaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJncHQxMl9mY2siLAkmZ3B0MTJfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsICJpY2siLAkmbWNic3AxX2ljaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjEiLCAiZmNrIiwJJm1jYnNwMV9mY2ssCUNLXzI0M1gpLAorCUNMSygib21hcC1tY2JzcC4yIiwgImljayIsCSZtY2JzcDJfaWNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMiIsICJmY2siLAkmbWNic3AyX2ZjaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjMiLCAiaWNrIiwJJm1jYnNwM19pY2ssCUNLXzI0M1gpLAorCUNMSygib21hcC1tY2JzcC4zIiwgImZjayIsCSZtY2JzcDNfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuNCIsICJpY2siLAkmbWNic3A0X2ljaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjQiLCAiZmNrIiwJJm1jYnNwNF9mY2ssCUNLXzI0M1gpLAorCUNMSygib21hcC1tY2JzcC41IiwgImljayIsCSZtY2JzcDVfaWNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuNSIsICJmY2siLAkmbWNic3A1X2ZjaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4xIiwgImljayIsCSZtY3NwaTFfaWNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjEiLCAiZmNrIiwJJm1jc3BpMV9mY2ssCUNLXzI0M1gpLAorCUNMSygib21hcDJfbWNzcGkuMiIsICJpY2siLAkmbWNzcGkyX2ljaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4yIiwgImZjayIsCSZtY3NwaTJfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjMiLCAiaWNrIiwJJm1jc3BpM19pY2ssCUNLXzI0M1gpLAorCUNMSygib21hcDJfbWNzcGkuMyIsICJmY2siLAkmbWNzcGkzX2ZjaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJ1YXJ0MV9pY2siLAkmdWFydDFfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJInVhcnQxX2ZjayIsCSZ1YXJ0MV9mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkidWFydDJfaWNrIiwJJnVhcnQyX2ljaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJ1YXJ0Ml9mY2siLAkmdWFydDJfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJInVhcnQzX2ljayIsCSZ1YXJ0M19pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkidWFydDNfZmNrIiwJJnVhcnQzX2ZjaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJncGlvc19pY2siLAkmZ3Bpb3NfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJImdwaW9zX2ZjayIsCSZncGlvc19mY2ssCUNLXzI0M1gpLAorCUNMSygib21hcF93ZHQiLAkiaWNrIiwJCSZtcHVfd2R0X2ljaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwX3dkdCIsCSJmY2siLAkJJm1wdV93ZHRfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJInN5bmNfMzJrX2ljayIsCSZzeW5jXzMya19pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkid2R0MV9pY2siLAkmd2R0MV9pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkib21hcGN0cmxfaWNrIiwJJm9tYXBjdHJsX2ljaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJpY3JfaWNrIiwJJmljcl9pY2ssCUNLXzI0M1gpLAorCUNMSygib21hcDI0eHhjYW0iLCAiZmNrIiwJJmNhbV9mY2ssCUNLXzI0M1gpLAorCUNMSygib21hcDI0eHhjYW0iLCAiaWNrIiwJJmNhbV9pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkibWFpbGJveGVzX2ljayIsICZtYWlsYm94ZXNfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJIndkdDRfaWNrIiwJJndkdDRfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJIndkdDRfZmNrIiwJJndkdDRfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJIm1zcHJvX2ljayIsCSZtc3Byb19pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkibXNwcm9fZmNrIiwJJm1zcHJvX2ZjaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJmYWNfaWNrIiwJJmZhY19pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZmFjX2ZjayIsCSZmYWNfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm9tYXBfaGRxLjAiLCAiaWNrIiwJJmhkcV9pY2ssCUNLXzI0M1gpLAorCUNMSygib21hcF9oZHEuMSIsICJmY2siLAkmaGRxX2ZjaywJQ0tfMjQzWCksCisJQ0xLKCJpMmNfb21hcC4xIiwgImljayIsCSZpMmMxX2ljaywJQ0tfMjQzWCksCisJQ0xLKCJpMmNfb21hcC4xIiwgImZjayIsCSZpMmNoczFfZmNrLAlDS18yNDNYKSwKKwlDTEsoImkyY19vbWFwLjIiLCAiaWNrIiwJJmkyYzJfaWNrLAlDS18yNDNYKSwKKwlDTEsoImkyY19vbWFwLjIiLCAiZmNrIiwJJmkyY2hzMl9mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZ3BtY19mY2siLAkmZ3BtY19mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkic2RtYV9mY2siLAkmc2RtYV9mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkic2RtYV9pY2siLAkmc2RtYV9pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkic2RyY19pY2siLAkmc2RyY19pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZGVzX2ljayIsCSZkZXNfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJInNoYV9pY2siLAkmc2hhX2ljaywJQ0tfMjQzWCksCisJQ0xLKCJvbWFwX3JuZyIsCSJpY2siLAkJJnJuZ19pY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiYWVzX2ljayIsCSZhZXNfaWNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJInBrYV9pY2siLAkmcGthX2ljaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJ1c2JfZmNrIiwJJnVzYl9mY2ssCUNLXzI0M1gpLAorCUNMSygibXVzYl9oZHJjIiwJImljayIsCSZ1c2Joc19pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLCAiaWNrIiwJJm1tY2hzMV9pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLCAiZmNrIiwJJm1tY2hzMV9mY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjEiLCAiaWNrIiwJJm1tY2hzMl9pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjEiLCAiZmNrIiwJJm1tY2hzMl9mY2ssCUNLXzI0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzVfaWNrIiwJJmdwaW81X2ljaywJQ0tfMjQzWCksCisJQ0xLKE5VTEwsCSJncGlvNV9mY2siLAkmZ3BpbzVfZmNrLAlDS18yNDNYKSwKKwlDTEsoTlVMTCwJIm1kbV9pbnRjX2ljayIsCSZtZG1faW50Y19pY2ssCUNLXzI0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLCAibW1jaHNkYl9mY2siLAkmbW1jaHNkYjFfZmNrLAlDS18yNDNYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4xIiwgIm1tY2hzZGJfZmNrIiwgCSZtbWNoc2RiMl9mY2ssCUNLXzI0M1gpLAorfTsKKworLyoKKyAqIGluaXQgY29kZQorICovCisKK2ludCBfX2luaXQgb21hcDI0MzBfY2xrX2luaXQodm9pZCkKK3sKKwljb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207CisJc3RydWN0IG9tYXBfY2xrICpjOworCXUzMiBjbGtyYXRlOworCisJcHJjbV9jbGtzcmNfY3RybCA9IE9NQVAyNDMwX1BSQ01fQ0xLU1JDX0NUUkw7CisJY21faWRsZXN0X3BsbCA9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpOworCWNwdV9tYXNrID0gUkFURV9JTl8yNDNYOworCXJhdGVfdGFibGUgPSBvbWFwMjQzMF9yYXRlX3RhYmxlOworCisJY2xrX2luaXQoJm9tYXAyX2Nsa19mdW5jdGlvbnMpOworCisJZm9yIChjID0gb21hcDI0MzBfY2xrczsgYyA8IG9tYXAyNDMwX2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAyNDMwX2Nsa3MpOworCSAgICAgYysrKQorCQljbGtfcHJlaW5pdChjLT5say5jbGspOworCisJb3NjX2NrLnJhdGUgPSBvbWFwMl9vc2NfY2xrX3JlY2FsYygmb3NjX2NrKTsKKwlwcm9wYWdhdGVfcmF0ZSgmb3NjX2NrKTsKKwlzeXNfY2sucmF0ZSA9IG9tYXAyeHh4X3N5c19jbGtfcmVjYWxjKCZzeXNfY2spOworCXByb3BhZ2F0ZV9yYXRlKCZzeXNfY2spOworCisJZm9yIChjID0gb21hcDI0MzBfY2xrczsgYyA8IG9tYXAyNDMwX2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAyNDMwX2Nsa3MpOworCSAgICAgYysrKSB7CisJCWNsa2Rldl9hZGQoJmMtPmxrKTsKKwkJY2xrX3JlZ2lzdGVyKGMtPmxrLmNsayk7CisJCW9tYXAyX2luaXRfY2xrX2Nsa2RtKGMtPmxrLmNsayk7CisJfQorCisJLyogQ2hlY2sgdGhlIE1QVSByYXRlIHNldCBieSBib290bG9hZGVyICovCisJY2xrcmF0ZSA9IG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKCZkcGxsX2NrKTsKKwlmb3IgKHByY20gPSByYXRlX3RhYmxlOyBwcmNtLT5tcHVfc3BlZWQ7IHByY20rKykgeworCQlpZiAoIShwcmNtLT5mbGFncyAmIGNwdV9tYXNrKSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHJjbS0+eHRhbF9zcGVlZCAhPSBzeXNfY2sucmF0ZSkKKwkJCWNvbnRpbnVlOworCQlpZiAocHJjbS0+ZHBsbF9zcGVlZCA8PSBjbGtyYXRlKQorCQkJYnJlYWs7CisJfQorCWN1cnJfcHJjbV9zZXQgPSBwcmNtOworCisJcmVjYWxjdWxhdGVfcm9vdF9jbG9ja3MoKTsKKworCXByX2luZm8oIkNsb2NraW5nIHJhdGUgKENyeXN0YWwvRFBMTC9NUFUpOiAlbGQuJTAxbGQvJWxkLyVsZCBNSHpcbiIsCisJCShzeXNfY2sucmF0ZSAvIDEwMDAwMDApLCAoc3lzX2NrLnJhdGUgLyAxMDAwMDApICUgMTAsCisJCShkcGxsX2NrLnJhdGUgLyAxMDAwMDAwKSwgKG1wdV9jay5yYXRlIC8gMTAwMDAwMCkpIDsKKworCS8qCisJICogT25seSBlbmFibGUgdGhvc2UgY2xvY2tzIHdlIHdpbGwgbmVlZCwgbGV0IHRoZSBkcml2ZXJzCisJICogZW5hYmxlIG90aGVyIGNsb2NrcyBhcyBuZWNlc3NhcnkKKwkgKi8KKwljbGtfZW5hYmxlX2luaXRfY2xvY2tzKCk7CisKKwkvKiBBdm9pZCBzbGVlcGluZyBzbGVlcGluZyBkdXJpbmcgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCgpICovCisJdmNsayA9IGNsa19nZXQoTlVMTCwgInZpcnRfcHJjbV9zZXQiKTsKKwlzY2xrID0gY2xrX2dldChOVUxMLCAic3lzX2NrIik7CisJZGNsayA9IGNsa19nZXQoTlVMTCwgImRwbGxfY2siKTsKKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMnh4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazJ4eHguYwppbmRleCA1NDIwMzU2Li44MGJiMGYwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMnh4eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syeHh4LmMKQEAgLTEsMTUgKzEsMTUgQEAKIC8qCi0gKiAgbGludXgvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCisgKiBjbG9jazJ4eHguYyAtIE9NQVAyeHh4LXNwZWNpZmljIGNsb2NrIGludGVncmF0aW9uIGNvZGUKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCiAgKgotICogIENvbnRhY3RzOgotICogIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KLSAqICBQYXVsIFdhbG1zbGV5CisgKiBDb250YWN0czoKKyAqIFJpY2hhcmQgV29vZHJ1ZmYgPHItd29vZHJ1ZmYyQHRpLmNvbT4KKyAqIFBhdWwgV2FsbXNsZXkKICAqCi0gKiAgQmFzZWQgb24gZWFybGllciB3b3JrIGJ5IFR1dWtrYSBUaWtrYW5lbiwgVG9ueSBMaW5kZ3JlbiwKLSAqICBHb3Jkb24gTWNOdXR0IGFuZCBSaWRnZVJ1biwgSW5jLgorICogQmFzZWQgb24gZWFybGllciB3b3JrIGJ5IFR1dWtrYSBUaWtrYW5lbiwgVG9ueSBMaW5kZ3JlbiwKKyAqIEdvcmRvbiBNY051dHQgYW5kIFJpZGdlUnVuLCBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xNyw1NjggKzE3LDI4IEBACiAgKi8KICN1bmRlZiBERUJVRwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KLSNpbmNsdWRlIDxwbGF0L3NyYW0uaD4KLSNpbmNsdWRlIDxwbGF0L3ByY20uaD4KLSNpbmNsdWRlIDxwbGF0L2Nsa2Rldl9vbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL2RpdjY0Lmg+Ci0jaW5jbHVkZSA8YXNtL2Nsa2Rldi5oPgogCi0jaW5jbHVkZSA8cGxhdC9zZHJjLmg+CiAjaW5jbHVkZSAiY2xvY2suaCIKICNpbmNsdWRlICJjbG9jazJ4eHguaCIKLSNpbmNsdWRlICJvcHAyeHh4LmgiCi0jaW5jbHVkZSAicHJtLmgiCi0jaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgogI2luY2x1ZGUgImNtLmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCiAKLQotLyogQ01fQ0xLRU5fUExMLkVOX3s1NCw5Nn1NX1BMTCBvcHRpb25zICgyNFhYKSAqLwotI2RlZmluZSBFTl9BUExMX1NUT1BQRUQJCQkwCi0jZGVmaW5lIEVOX0FQTExfTE9DS0VECQkJMwotCi0vKiBDTV9DTEtTRUwxX1BMTC5BUExMU19DTEtJTiBvcHRpb25zICgyNFhYKSAqLwotI2RlZmluZSBBUExMU19DTEtJTl8xOV8yTUhaCQkwCi0jZGVmaW5lIEFQTExTX0NMS0lOXzEzTUhaCQkyCi0jZGVmaW5lIEFQTExTX0NMS0lOXzEyTUhaCQkzCi0KLS8qICNkZWZpbmUgRE9XTl9WQVJJQUJMRV9EUExMIDEgKi8JCS8qIEV4cGVyaW1lbnRhbCAqLwotCi1jb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKmN1cnJfcHJjbV9zZXQ7Ci1jb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKnJhdGVfdGFibGU7Ci0KIHN0cnVjdCBjbGsgKnZjbGssICpzY2xrLCAqZGNsazsKIAotdm9pZCBfX2lvbWVtICpwcmNtX2Nsa3NyY19jdHJsOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8qCiAgKiBPbWFwMjR4eCBzcGVjaWZpYyBjbG9jayBmdW5jdGlvbnMKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLS8qKgotICogb21hcDI0MzBfY2xrX2kyY2hzX2ZpbmRfaWRsZXN0IC0gcmV0dXJuIENNX0lETEVTVCBpbmZvIGZvciAyNDMwIEkyQ0hTCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogYmVpbmcgZW5hYmxlZAotICogQGlkbGVzdF9yZWc6IHZvaWQgX19pb21lbSAqKiB0byBzdG9yZSBDTV9JRExFU1QgcmVnIGFkZHJlc3MgaW50bwotICogQGlkbGVzdF9iaXQ6IHBvaW50ZXIgdG8gYSB1OCB0byBzdG9yZSB0aGUgQ01fSURMRVNUIGJpdCBzaGlmdCBpbnRvCi0gKgotICogT01BUDI0MzAgSTJDSFMgQ01fSURMRVNUIGJpdHMgYXJlIGluIENNX0lETEVTVDFfQ09SRSwgYnV0IHRoZQotICogQ01fKkNMS0VOIGJpdHMgYXJlIGluIENNX3tJLEZ9Q0xLRU4yX0NPUkUuICBUaGlzIGN1c3RvbSBmdW5jdGlvbgotICogcGFzc2VzIGJhY2sgdGhlIGNvcnJlY3QgQ01fSURMRVNUIHJlZ2lzdGVyIGFkZHJlc3MgZm9yIEkyQ0hTCi0gKiBtb2R1bGVzLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi1zdGF0aWMgdm9pZCBvbWFwMjQzMF9jbGtfaTJjaHNfZmluZF9pZGxlc3Qoc3RydWN0IGNsayAqY2xrLAotCQkJCQkgICB2b2lkIF9faW9tZW0gKippZGxlc3RfcmVnLAotCQkJCQkgICB1OCAqaWRsZXN0X2JpdCkKLXsKLQkqaWRsZXN0X3JlZyA9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSURMRVNUKTsKLQkqaWRsZXN0X2JpdCA9IGNsay0+ZW5hYmxlX2JpdDsKLX0KLQotLyogMjQzMCBJMkNIUyBoYXMgbm9uLXN0YW5kYXJkIElETEVTVCByZWdpc3RlciAqLwotY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDI0MzBfaTJjaHNfd2FpdCA9IHsKLQkuZW5hYmxlCQk9IG9tYXAyX2RmbHRfY2xrX2VuYWJsZSwKLQkuZGlzYWJsZQk9IG9tYXAyX2RmbHRfY2xrX2Rpc2FibGUsCi0JLmZpbmRfaWRsZXN0CT0gb21hcDI0MzBfY2xrX2kyY2hzX2ZpbmRfaWRsZXN0LAotCS5maW5kX2NvbXBhbmlvbiA9IG9tYXAyX2Nsa19kZmx0X2ZpbmRfY29tcGFuaW9uLAotfTsKLQotLyoqCi0gKiBvbWFwMnh4eF9jbGtfZ2V0X2NvcmVfcmF0ZSAtIHJldHVybiB0aGUgQ09SRV9DTEsgcmF0ZQotICogQGNsazogcG9pbnRlciB0byB0aGUgY29tYmluZWQgZHBsbF9jayArIGNvcmVfY2sgKGN1cnJlbnRseSAiZHBsbF9jayIpCi0gKgotICogUmV0dXJucyB0aGUgQ09SRV9DTEsgcmF0ZS4gIENPUkVfQ0xLIGNhbiBoYXZlIG9uZSBvZiB0aHJlZSByYXRlCi0gKiBzb3VyY2VzIG9uIE9NQVAyeHh4OiB0aGUgRFBMTCBDTEtPVVQgcmF0ZSwgRFBMTCBDTEtPVVRYMiwgb3IgMzJLSHoKLSAqICh0aGUgbGF0dGVyIGlzIHVudXN1YWwpLiAgVGhpcyBjdXJyZW50bHkgc2hvdWxkIGJlIGNhbGxlZCB3aXRoCi0gKiBzdHJ1Y3QgY2xrICpkcGxsX2NrLCB3aGljaCBpcyBhIGNvbXBvc2l0ZSBjbG9jayBvZiBkcGxsX2NrIGFuZAotICogY29yZV9jay4KLSAqLwotdW5zaWduZWQgbG9uZyBvbWFwMnh4eF9jbGtfZ2V0X2NvcmVfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JbG9uZyBsb25nIGNvcmVfY2xrOwotCXUzMiB2OwotCi0JY29yZV9jbGsgPSBvbWFwMl9nZXRfZHBsbF9yYXRlKGNsayk7Ci0KLQl2ID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDIpOwotCXYgJj0gT01BUDI0WFhfQ09SRV9DTEtfU1JDX01BU0s7Ci0KLQlpZiAodiA9PSBDT1JFX0NMS19TUkNfMzJLKQotCQljb3JlX2NsayA9IDMyNzY4OwotCWVsc2UKLQkJY29yZV9jbGsgKj0gdjsKLQotCXJldHVybiBjb3JlX2NsazsKLX0KLQotc3RhdGljIGludCBvbWFwMl9lbmFibGVfb3NjX2NrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1MzIgcGNjOwotCi0JcGNjID0gX19yYXdfcmVhZGwocHJjbV9jbGtzcmNfY3RybCk7Ci0KLQlfX3Jhd193cml0ZWwocGNjICYgfk9NQVBfQVVUT0VYVENMS01PREVfTUFTSywgcHJjbV9jbGtzcmNfY3RybCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgb21hcDJfZGlzYWJsZV9vc2NfY2soc3RydWN0IGNsayAqY2xrKQotewotCXUzMiBwY2M7Ci0KLQlwY2MgPSBfX3Jhd19yZWFkbChwcmNtX2Nsa3NyY19jdHJsKTsKLQotCV9fcmF3X3dyaXRlbChwY2MgfCBPTUFQX0FVVE9FWFRDTEtNT0RFX01BU0ssIHByY21fY2xrc3JjX2N0cmwpOwotfQotCi1jb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vc2NjayA9IHsKLQkuZW5hYmxlCQk9IG9tYXAyX2VuYWJsZV9vc2NfY2ssCi0JLmRpc2FibGUJPSBvbWFwMl9kaXNhYmxlX29zY19jaywKLX07Ci0KLSNpZmRlZiBPTERfQ0sKLS8qIFJlY2FsY3VsYXRlIFNZU1RfQ0xLICovCi1zdGF0aWMgdm9pZCBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdTMyIGRpdiA9IFBSQ01fQ0xLU1JDX0NUUkw7Ci0JZGl2ICY9ICgxIDw8IDcpIHwgKDEgPDwgNik7CS8qIFRlc3QgaWYgZXh0IGNsayBkaXZpZGVkIGJ5IDEgb3IgMiAqLwotCWRpdiA+Pj0gY2xrLT5yYXRlX29mZnNldDsKLQljbGstPnJhdGUgPSAoY2xrLT5wYXJlbnQtPnJhdGUgLyBkaXYpOwotCXByb3BhZ2F0ZV9yYXRlKGNsayk7Ci19Ci0jZW5kaWYJLyogT0xEX0NLICovCi0KLS8qIEVuYWJsZSBhbiBBUExMIGlmIG9mZiAqLwotc3RhdGljIGludCBvbWFwMl9jbGtfYXBsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrLCB1MzIgc3RhdHVzX21hc2spCi17Ci0JdTMyIGN2YWwsIGFwbGxfbWFzazsKLQotCWFwbGxfbWFzayA9IEVOX0FQTExfTE9DS0VEIDw8IGNsay0+ZW5hYmxlX2JpdDsKLQotCWN2YWwgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLRU4pOwotCi0JaWYgKChjdmFsICYgYXBsbF9tYXNrKSA9PSBhcGxsX21hc2spCi0JCXJldHVybiAwOyAgIC8qIGFwbGwgYWxyZWFkeSBlbmFibGVkICovCi0KLQljdmFsICY9IH5hcGxsX21hc2s7Ci0JY3ZhbCB8PSBhcGxsX21hc2s7Ci0JY21fd3JpdGVfbW9kX3JlZyhjdmFsLCBQTExfTU9ELCBDTV9DTEtFTik7Ci0KLQlvbWFwMl9jbV93YWl0X2lkbGVzdChPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwgc3RhdHVzX21hc2ssCi0JCQkgICAgIGNsay0+bmFtZSk7Ci0KLQkvKgotCSAqIFJFVklTSVQ6IFNob3VsZCB3ZSByZXR1cm4gYW4gZXJyb3IgY29kZSBpZiBvbWFwMl93YWl0X2Nsb2NrX3JlYWR5KCkKLQkgKiBmYWlscz8KLQkgKi8KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvbWFwMl9jbGtfYXBsbDk2X2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIG9tYXAyX2Nsa19hcGxsX2VuYWJsZShjbGssIE9NQVAyNFhYX1NUXzk2TV9BUExMKTsKLX0KLQotc3RhdGljIGludCBvbWFwMl9jbGtfYXBsbDU0X2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIG9tYXAyX2Nsa19hcGxsX2VuYWJsZShjbGssIE9NQVAyNFhYX1NUXzU0TV9BUExMKTsKLX0KLQotLyogU3RvcCBBUExMICovCi1zdGF0aWMgdm9pZCBvbWFwMl9jbGtfYXBsbF9kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1MzIgY3ZhbDsKLQotCWN2YWwgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLRU4pOwotCWN2YWwgJj0gfihFTl9BUExMX0xPQ0tFRCA8PCBjbGstPmVuYWJsZV9iaXQpOwotCWNtX3dyaXRlX21vZF9yZWcoY3ZhbCwgUExMX01PRCwgQ01fQ0xLRU4pOwotfQotCi1jb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19hcGxsOTYgPSB7Ci0JLmVuYWJsZQkJPSBvbWFwMl9jbGtfYXBsbDk2X2VuYWJsZSwKLQkuZGlzYWJsZQk9IG9tYXAyX2Nsa19hcGxsX2Rpc2FibGUsCi19OwotCi1jb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19hcGxsNTQgPSB7Ci0JLmVuYWJsZQkJPSBvbWFwMl9jbGtfYXBsbDU0X2VuYWJsZSwKLQkuZGlzYWJsZQk9IG9tYXAyX2Nsa19hcGxsX2Rpc2FibGUsCi19OwotCi0vKgotICogVXNlcyB0aGUgY3VycmVudCBwcmNtIHNldCB0byB0ZWxsIGlmIGEgcmF0ZSBpcyB2YWxpZC4KLSAqIFlvdSBjYW4gZ28gc2xvd2VyLCBidXQgbm90IGZhc3RlciB3aXRoaW4gYSBnaXZlbiByYXRlIHNldC4KLSAqLwotbG9uZyBvbWFwMl9kcGxsY29yZV9yb3VuZF9yYXRlKHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3JhdGUpCi17Ci0JdTMyIGhpZ2gsIGxvdywgY29yZV9jbGtfc3JjOwotCi0JY29yZV9jbGtfc3JjID0gY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0NMS1NFTDIpOwotCWNvcmVfY2xrX3NyYyAmPSBPTUFQMjRYWF9DT1JFX0NMS19TUkNfTUFTSzsKLQotCWlmIChjb3JlX2Nsa19zcmMgPT0gQ09SRV9DTEtfU1JDX0RQTEwpIHsJLyogRFBMTCBjbG9ja291dCAqLwotCQloaWdoID0gY3Vycl9wcmNtX3NldC0+ZHBsbF9zcGVlZCAqIDI7Ci0JCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQ7Ci0JfSBlbHNlIHsJCQkJLyogRFBMTCBjbG9ja291dCB4IDIgKi8KLQkJaGlnaCA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQ7Ci0JCWxvdyA9IGN1cnJfcHJjbV9zZXQtPmRwbGxfc3BlZWQgLyAyOwotCX0KLQotI2lmZGVmIERPV05fVkFSSUFCTEVfRFBMTAotCWlmICh0YXJnZXRfcmF0ZSA+IGhpZ2gpCi0JCXJldHVybiBoaWdoOwotCWVsc2UKLQkJcmV0dXJuIHRhcmdldF9yYXRlOwotI2Vsc2UKLQlpZiAodGFyZ2V0X3JhdGUgPiBsb3cpCi0JCXJldHVybiBoaWdoOwotCWVsc2UKLQkJcmV0dXJuIGxvdzsKLSNlbmRpZgotCi19Ci0KLXVuc2lnbmVkIGxvbmcgb21hcDJfZHBsbGNvcmVfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoY2xrKTsKLX0KLQotaW50IG9tYXAyX3JlcHJvZ3JhbV9kcGxsY29yZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1MzIgY3VyX3JhdGUsIGxvdywgbXVsdCwgZGl2LCB2YWxpZF9yYXRlLCBkb25lX3JhdGU7Ci0JdTMyIGJ5cGFzcyA9IDA7Ci0Jc3RydWN0IHByY21fY29uZmlnIHRtcHNldDsKLQljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKLQotCWN1cl9yYXRlID0gb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoZGNsayk7Ci0JbXVsdCA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtTRUwyKTsKLQltdWx0ICY9IE9NQVAyNFhYX0NPUkVfQ0xLX1NSQ19NQVNLOwotCi0JaWYgKChyYXRlID09IChjdXJfcmF0ZSAvIDIpKSAmJiAobXVsdCA9PSAyKSkgewotCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTCwgMSk7Ci0JfSBlbHNlIGlmICgocmF0ZSA9PSAoY3VyX3JhdGUgKiAyKSkgJiYgKG11bHQgPT0gMSkpIHsKLQkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOwotCX0gZWxzZSBpZiAocmF0ZSAhPSBjdXJfcmF0ZSkgewotCQl2YWxpZF9yYXRlID0gb21hcDJfZHBsbGNvcmVfcm91bmRfcmF0ZShyYXRlKTsKLQkJaWYgKHZhbGlkX3JhdGUgIT0gcmF0ZSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmIChtdWx0ID09IDEpCi0JCQlsb3cgPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkOwotCQllbHNlCi0JCQlsb3cgPSBjdXJyX3ByY21fc2V0LT5kcGxsX3NwZWVkIC8gMjsKLQotCQlkZCA9IGNsay0+ZHBsbF9kYXRhOwotCQlpZiAoIWRkKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsID0gX19yYXdfcmVhZGwoZGQtPm11bHRfZGl2MV9yZWcpOwotCQl0bXBzZXQuY21fY2xrc2VsMV9wbGwgJj0gfihkZC0+bXVsdF9tYXNrIHwKLQkJCQkJICAgZGQtPmRpdjFfbWFzayk7Ci0JCWRpdiA9ICgoY3Vycl9wcmNtX3NldC0+eHRhbF9zcGVlZCAvIDEwMDAwMDApIC0gMSk7Ci0JCXRtcHNldC5jbV9jbGtzZWwyX3BsbCA9IGNtX3JlYWRfbW9kX3JlZyhQTExfTU9ELCBDTV9DTEtTRUwyKTsKLQkJdG1wc2V0LmNtX2Nsa3NlbDJfcGxsICY9IH5PTUFQMjRYWF9DT1JFX0NMS19TUkNfTUFTSzsKLQkJaWYgKHJhdGUgPiBsb3cpIHsKLQkJCXRtcHNldC5jbV9jbGtzZWwyX3BsbCB8PSBDT1JFX0NMS19TUkNfRFBMTF9YMjsKLQkJCW11bHQgPSAoKHJhdGUgLyAyKSAvIDEwMDAwMDApOwotCQkJZG9uZV9yYXRlID0gQ09SRV9DTEtfU1JDX0RQTExfWDI7Ci0JCX0gZWxzZSB7Ci0JCQl0bXBzZXQuY21fY2xrc2VsMl9wbGwgfD0gQ09SRV9DTEtfU1JDX0RQTEw7Ci0JCQltdWx0ID0gKHJhdGUgLyAxMDAwMDAwKTsKLQkJCWRvbmVfcmF0ZSA9IENPUkVfQ0xLX1NSQ19EUExMOwotCQl9Ci0JCXRtcHNldC5jbV9jbGtzZWwxX3BsbCB8PSAoZGl2IDw8IF9fZmZzKGRkLT5tdWx0X21hc2spKTsKLQkJdG1wc2V0LmNtX2Nsa3NlbDFfcGxsIHw9IChtdWx0IDw8IF9fZmZzKGRkLT5kaXYxX21hc2spKTsKLQotCQkvKiBXb3JzdCBjYXNlICovCi0JCXRtcHNldC5iYXNlX3NkcmNfcmZyID0gU0RSQ19SRlJfQ1RSTF9CWVBBU1M7Ci0KLQkJaWYgKHJhdGUgPT0gY3Vycl9wcmNtX3NldC0+eHRhbF9zcGVlZCkJLyogSWYgYXNraW5nIGZvciAxLTEgKi8KLQkJCWJ5cGFzcyA9IDE7Ci0KLQkJLyogRm9yIG9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXMoKSAqLwotCQlvbWFwMnh4eF9zZHJjX3JlcHJvZ3JhbShDT1JFX0NMS19TUkNfRFBMTF9YMiwgMSk7Ci0KLQkJLyogRm9yY2UgZGxsIGxvY2sgbW9kZSAqLwotCQlvbWFwMl9zZXRfcHJjbSh0bXBzZXQuY21fY2xrc2VsMV9wbGwsIHRtcHNldC5iYXNlX3NkcmNfcmZyLAotCQkJICAgICAgIGJ5cGFzcyk7Ci0KLQkJLyogRXJyYXRhOiByZXQgZGxsIGVudHJ5IHN0YXRlICovCi0JCW9tYXAyeHh4X3NkcmNfaW5pdF9wYXJhbXMob21hcDJ4eHhfc2RyY19kbGxfaXNfdW5sb2NrZWQoKSk7Ci0JCW9tYXAyeHh4X3NkcmNfcmVwcm9ncmFtKGRvbmVfcmF0ZSwgMCk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogb21hcDJfdGFibGVfbXB1X3JlY2FsYyAtIGp1c3QgcmV0dXJuIHRoZSBNUFUgc3BlZWQKLSAqIEBjbGs6IHZpcnRfcHJjbV9zZXQgc3RydWN0IGNsawotICoKLSAqIFNldCB2aXJ0X3ByY21fc2V0J3MgcmF0ZSB0byB0aGUgbXB1X3NwZWVkIGZpZWxkIG9mIHRoZSBjdXJyZW50IFBSQ00gc2V0LgotICovCi11bnNpZ25lZCBsb25nIG9tYXAyX3RhYmxlX21wdV9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBjdXJyX3ByY21fc2V0LT5tcHVfc3BlZWQ7Ci19Ci0KLS8qCi0gKiBMb29rIGZvciBhIHJhdGUgZXF1YWwgb3IgbGVzcyB0aGFuIHRoZSB0YXJnZXQgcmF0ZSBnaXZlbiBhIGNvbmZpZ3VyYXRpb24gc2V0LgotICoKLSAqIFdoYXQncyBub3QgZW50aXJlbHkgY2xlYXIgaXMgIndoaWNoIiBmaWVsZCByZXByZXNlbnRzIHRoZSBrZXkgZmllbGQuCi0gKiBTb21lIG1pZ2h0IGFyZ3VlIEwzLUREUiwgb3RoZXJzIEFSTSwgb3RoZXJzIElWQS4gVGhpcyBjb2RlIGlzIHNpbXBsZSBhbmQKLSAqIGp1c3QgdXNlcyB0aGUgQVJNIHJhdGVzLgotICovCi1sb25nIG9tYXAyX3JvdW5kX3RvX3RhYmxlX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JY29uc3Qgc3RydWN0IHByY21fY29uZmlnICpwdHI7Ci0JbG9uZyBoaWdoZXN0X3JhdGU7Ci0JbG9uZyBzeXNfY2tfcmF0ZTsKLQotCXN5c19ja19yYXRlID0gY2xrX2dldF9yYXRlKHNjbGspOwotCi0JaGlnaGVzdF9yYXRlID0gLUVJTlZBTDsKLQotCWZvciAocHRyID0gcmF0ZV90YWJsZTsgcHRyLT5tcHVfc3BlZWQ7IHB0cisrKSB7Ci0JCWlmICghKHB0ci0+ZmxhZ3MgJiBjcHVfbWFzaykpCi0JCQljb250aW51ZTsKLQkJaWYgKHB0ci0+eHRhbF9zcGVlZCAhPSBzeXNfY2tfcmF0ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWhpZ2hlc3RfcmF0ZSA9IHB0ci0+bXB1X3NwZWVkOwotCi0JCS8qIENhbiBjaGVjayBvbmx5IGFmdGVyIHh0YWwgZnJlcXVlbmN5IGNoZWNrICovCi0JCWlmIChwdHItPm1wdV9zcGVlZCA8PSByYXRlKQotCQkJYnJlYWs7Ci0JfQotCXJldHVybiBoaWdoZXN0X3JhdGU7Ci19Ci0KLS8qIFNldHMgYmFzaWMgY2xvY2tzIGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgcmF0ZSAqLwotaW50IG9tYXAyX3NlbGVjdF90YWJsZV9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXUzMiBjdXJfcmF0ZSwgZG9uZV9yYXRlLCBieXBhc3MgPSAwLCB0bXA7Ci0JY29uc3Qgc3RydWN0IHByY21fY29uZmlnICpwcmNtOwotCXVuc2lnbmVkIGxvbmcgZm91bmRfc3BlZWQgPSAwOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JbG9uZyBzeXNfY2tfcmF0ZTsKLQotCXN5c19ja19yYXRlID0gY2xrX2dldF9yYXRlKHNjbGspOwotCi0JZm9yIChwcmNtID0gcmF0ZV90YWJsZTsgcHJjbS0+bXB1X3NwZWVkOyBwcmNtKyspIHsKLQkJaWYgKCEocHJjbS0+ZmxhZ3MgJiBjcHVfbWFzaykpCi0JCQljb250aW51ZTsKLQotCQlpZiAocHJjbS0+eHRhbF9zcGVlZCAhPSBzeXNfY2tfcmF0ZSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChwcmNtLT5tcHVfc3BlZWQgPD0gcmF0ZSkgewotCQkJZm91bmRfc3BlZWQgPSBwcmNtLT5tcHVfc3BlZWQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmICghZm91bmRfc3BlZWQpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ291bGQgbm90IHNldCBNUFUgcmF0ZSB0byAlbHVNSHpcbiIsCi0JCSAgICAgICByYXRlIC8gMTAwMDAwMCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWN1cnJfcHJjbV9zZXQgPSBwcmNtOwotCWN1cl9yYXRlID0gb21hcDJ4eHhfY2xrX2dldF9jb3JlX3JhdGUoZGNsayk7Ci0KLQlpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBjdXJfcmF0ZSAvIDIpIHsKLQkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oQ09SRV9DTEtfU1JDX0RQTEwsIDEpOwotCX0gZWxzZSBpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBjdXJfcmF0ZSAqIDIpIHsKLQkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOwotCX0gZWxzZSBpZiAocHJjbS0+ZHBsbF9zcGVlZCAhPSBjdXJfcmF0ZSkgewotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQkJaWYgKHByY20tPmRwbGxfc3BlZWQgPT0gcHJjbS0+eHRhbF9zcGVlZCkKLQkJCWJ5cGFzcyA9IDE7Ci0KLQkJaWYgKChwcmNtLT5jbV9jbGtzZWwyX3BsbCAmIE9NQVAyNFhYX0NPUkVfQ0xLX1NSQ19NQVNLKSA9PQotCQkgICAgQ09SRV9DTEtfU1JDX0RQTExfWDIpCi0JCQlkb25lX3JhdGUgPSBDT1JFX0NMS19TUkNfRFBMTF9YMjsKLQkJZWxzZQotCQkJZG9uZV9yYXRlID0gQ09SRV9DTEtfU1JDX0RQTEw7Ci0KLQkJLyogTVBVIGRpdmlkZXIgKi8KLQkJY21fd3JpdGVfbW9kX3JlZyhwcmNtLT5jbV9jbGtzZWxfbXB1LCBNUFVfTU9ELCBDTV9DTEtTRUwpOwotCi0JCS8qIGRzcCArIGl2YTEgZGl2KDI0MjApLCBpdmEyLjEoMjQzMCkgKi8KLQkJY21fd3JpdGVfbW9kX3JlZyhwcmNtLT5jbV9jbGtzZWxfZHNwLAotCQkJCSBPTUFQMjRYWF9EU1BfTU9ELCBDTV9DTEtTRUwpOwotCi0JCWNtX3dyaXRlX21vZF9yZWcocHJjbS0+Y21fY2xrc2VsX2dmeCwgR0ZYX01PRCwgQ01fQ0xLU0VMKTsKLQotCQkvKiBNYWpvciBzdWJzeXN0ZW0gZGl2aWRlcnMgKi8KLQkJdG1wID0gY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBDTV9DTEtTRUwxKSAmIE9NQVAyNFhYX0NMS1NFTF9EU1MyX01BU0s7Ci0JCWNtX3dyaXRlX21vZF9yZWcocHJjbS0+Y21fY2xrc2VsMV9jb3JlIHwgdG1wLCBDT1JFX01PRCwKLQkJCQkgQ01fQ0xLU0VMMSk7Ci0KLQkJaWYgKGNwdV9pc19vbWFwMjQzMCgpKQotCQkJY21fd3JpdGVfbW9kX3JlZyhwcmNtLT5jbV9jbGtzZWxfbWRtLAotCQkJCQkgT01BUDI0MzBfTURNX01PRCwgQ01fQ0xLU0VMKTsKLQotCQkvKiB4MiB0byBlbnRlciBvbWFwMnh4eF9zZHJjX2luaXRfcGFyYW1zKCkgKi8KLQkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oQ09SRV9DTEtfU1JDX0RQTExfWDIsIDEpOwotCi0JCW9tYXAyX3NldF9wcmNtKHByY20tPmNtX2Nsa3NlbDFfcGxsLCBwcmNtLT5iYXNlX3NkcmNfcmZyLAotCQkJICAgICAgIGJ5cGFzcyk7Ci0KLQkJb21hcDJ4eHhfc2RyY19pbml0X3BhcmFtcyhvbWFwMnh4eF9zZHJjX2RsbF9pc191bmxvY2tlZCgpKTsKLQkJb21hcDJ4eHhfc2RyY19yZXByb2dyYW0oZG9uZV9yYXRlLCAwKTsKLQotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLSNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKLS8qCi0gKiBXYWxrIFBSQ00gcmF0ZSB0YWJsZSBhbmQgZmlsbG91dCBjcHVmcmVxIGZyZXFfdGFibGUKLSAqIFhYWCBUaGlzIHNob3VsZCBiZSByZXBsYWNlZCBieSBhbiBPUFAgbGF5ZXIgaW4gdGhlIG5lYXIgZnV0dXJlCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKmZyZXFfdGFibGU7Ci0KLXZvaWQgb21hcDJfY2xrX2luaXRfY3B1ZnJlcV90YWJsZShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKip0YWJsZSkKLXsKLQljb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207Ci0JbG9uZyBzeXNfY2tfcmF0ZTsKLQlpbnQgaSA9IDA7Ci0JaW50IHRibF9zeiA9IDA7Ci0KLQlzeXNfY2tfcmF0ZSA9IGNsa19nZXRfcmF0ZShzY2xrKTsKLQotCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7Ci0JCWlmICghKHByY20tPmZsYWdzICYgY3B1X21hc2spKQotCQkJY29udGludWU7Ci0JCWlmIChwcmNtLT54dGFsX3NwZWVkICE9IHN5c19ja19yYXRlKQotCQkJY29udGludWU7Ci0KLQkJLyogZG9uJ3QgcHV0IGJ5cGFzcyByYXRlcyBpbiB0YWJsZSAqLwotCQlpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBwcmNtLT54dGFsX3NwZWVkKQotCQkJY29udGludWU7Ci0KLQkJdGJsX3N6Kys7Ci0JfQotCi0JLyoKLQkgKiBYWFggRW5zdXJlIHRoYXQgd2UncmUgZG9pbmcgd2hhdCBDUFVGcmVxIGV4cGVjdHMgZm9yIHRoaXMgZXJyb3IKLQkgKiBjYXNlIGFuZCB0aGUgZm9sbG93aW5nIG9uZQotCSAqLwotCWlmICh0Ymxfc3ogPT0gMCkgewotCQlwcl93YXJuaW5nKCIlczogbm8gbWF0Y2hpbmcgZW50cmllcyBpbiByYXRlX3RhYmxlXG4iLAotCQkJICAgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCi0JLyogSW5jbHVkZSB0aGUgQ1BVRlJFUV9UQUJMRV9FTkQgdGVybWluYXRvciBlbnRyeSAqLwotCXRibF9zeisrOwotCi0JZnJlcV90YWJsZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSkgKiB0Ymxfc3osCi0JCQkgICAgIEdGUF9BVE9NSUMpOwotCWlmICghZnJlcV90YWJsZSkgewotCQlwcl9lcnIoIiVzOiBjb3VsZCBub3Qga3phbGxvYyBmcmVxdWVuY3kgdGFibGVcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQotCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7Ci0JCWlmICghKHByY20tPmZsYWdzICYgY3B1X21hc2spKQotCQkJY29udGludWU7Ci0JCWlmIChwcmNtLT54dGFsX3NwZWVkICE9IHN5c19ja19yYXRlKQotCQkJY29udGludWU7Ci0KLQkJLyogZG9uJ3QgcHV0IGJ5cGFzcyByYXRlcyBpbiB0YWJsZSAqLwotCQlpZiAocHJjbS0+ZHBsbF9zcGVlZCA9PSBwcmNtLT54dGFsX3NwZWVkKQotCQkJY29udGludWU7Ci0KLQkJZnJlcV90YWJsZVtpXS5pbmRleCA9IGk7Ci0JCWZyZXFfdGFibGVbaV0uZnJlcXVlbmN5ID0gcHJjbS0+bXB1X3NwZWVkIC8gMTAwMDsKLQkJaSsrOwotCX0KLQotCWZyZXFfdGFibGVbaV0uaW5kZXggPSBpOwotCWZyZXFfdGFibGVbaV0uZnJlcXVlbmN5ID0gQ1BVRlJFUV9UQUJMRV9FTkQ7Ci0KLQkqdGFibGUgPSAmZnJlcV90YWJsZVswXTsKLX0KLQotdm9pZCBvbWFwMl9jbGtfZXhpdF9jcHVmcmVxX3RhYmxlKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqKnRhYmxlKQotewotCWtmcmVlKGZyZXFfdGFibGUpOwotfQotCi0jZW5kaWYKLQotc3RydWN0IGNsa19mdW5jdGlvbnMgb21hcDJfY2xrX2Z1bmN0aW9ucyA9IHsKLQkuY2xrX2VuYWJsZQkJPSBvbWFwMl9jbGtfZW5hYmxlLAotCS5jbGtfZGlzYWJsZQkJPSBvbWFwMl9jbGtfZGlzYWJsZSwKLQkuY2xrX3JvdW5kX3JhdGUJCT0gb21hcDJfY2xrX3JvdW5kX3JhdGUsCi0JLmNsa19zZXRfcmF0ZQkJPSBvbWFwMl9jbGtfc2V0X3JhdGUsCi0JLmNsa19zZXRfcGFyZW50CQk9IG9tYXAyX2Nsa19zZXRfcGFyZW50LAotCS5jbGtfZGlzYWJsZV91bnVzZWQJPSBvbWFwMl9jbGtfZGlzYWJsZV91bnVzZWQsCi0jaWZkZWYJQ09ORklHX0NQVV9GUkVRCi0JLmNsa19pbml0X2NwdWZyZXFfdGFibGUJPSBvbWFwMl9jbGtfaW5pdF9jcHVmcmVxX3RhYmxlLAotCS5jbGtfZXhpdF9jcHVmcmVxX3RhYmxlCT0gb21hcDJfY2xrX2V4aXRfY3B1ZnJlcV90YWJsZSwKLSNlbmRpZgotfTsKLQotc3RhdGljIHUzMiBvbWFwMl9nZXRfYXBsbF9jbGtpbih2b2lkKQotewotCXUzMiBhcGxscywgc3JhdGUgPSAwOwotCi0JYXBsbHMgPSBjbV9yZWFkX21vZF9yZWcoUExMX01PRCwgQ01fQ0xLU0VMMSk7Ci0JYXBsbHMgJj0gT01BUDI0WFhfQVBMTFNfQ0xLSU5fTUFTSzsKLQlhcGxscyA+Pj0gT01BUDI0WFhfQVBMTFNfQ0xLSU5fU0hJRlQ7Ci0KLQlpZiAoYXBsbHMgPT0gQVBMTFNfQ0xLSU5fMTlfMk1IWikKLQkJc3JhdGUgPSAxOTIwMDAwMDsKLQllbHNlIGlmIChhcGxscyA9PSBBUExMU19DTEtJTl8xM01IWikKLQkJc3JhdGUgPSAxMzAwMDAwMDsKLQllbHNlIGlmIChhcGxscyA9PSBBUExMU19DTEtJTl8xMk1IWikKLQkJc3JhdGUgPSAxMjAwMDAwMDsKLQotCXJldHVybiBzcmF0ZTsKLX0KLQotc3RhdGljIHUzMiBvbWFwMl9nZXRfc3lzY2xrZGl2KHZvaWQpCi17Ci0JdTMyIGRpdjsKLQotCWRpdiA9IF9fcmF3X3JlYWRsKHByY21fY2xrc3JjX2N0cmwpOwotCWRpdiAmPSBPTUFQX1NZU0NMS0RJVl9NQVNLOwotCWRpdiA+Pj0gT01BUF9TWVNDTEtESVZfU0hJRlQ7Ci0KLQlyZXR1cm4gZGl2OwotfQotCi11bnNpZ25lZCBsb25nIG9tYXAyX29zY19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gb21hcDJfZ2V0X2FwbGxfY2xraW4oKSAqIG9tYXAyX2dldF9zeXNjbGtkaXYoKTsKLX0KLQotdW5zaWduZWQgbG9uZyBvbWFwMl9zeXNfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlIC8gb21hcDJfZ2V0X3N5c2Nsa2RpdigpOwotfQogCiAvKgogICogU2V0IGNsb2NrcyBmb3IgYnlwYXNzIG1vZGUgZm9yIHJlYm9vdCB0byB3b3JrLgogICovCi12b2lkIG9tYXAyX2Nsa19wcmVwYXJlX2Zvcl9yZWJvb3Qodm9pZCkKK3ZvaWQgb21hcDJ4eHhfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCh2b2lkKQogewogCXUzMiByYXRlOwogCkBAIC01OTAsMzcgKzUwLDI0IEBACiB9CiAKIC8qCi0gKiBTd2l0Y2ggdGhlIE1QVSByYXRlIGlmIHNwZWNpZmllZCBvbiBjbWRsaW5lLgotICogV2UgY2Fubm90IGRvIHRoaXMgZWFybHkgdW50aWwgY21kbGluZSBpcyBwYXJzZWQuCisgKiBTd2l0Y2ggdGhlIE1QVSByYXRlIGlmIHNwZWNpZmllZCBvbiBjbWRsaW5lLiAgV2UgY2Fubm90IGRvIHRoaXMKKyAqIGVhcmx5IHVudGlsIGNtZGxpbmUgaXMgcGFyc2VkLiAgWFhYIFRoaXMgc2hvdWxkIGJlIHJlbW92ZWQgZnJvbSB0aGUKKyAqIGNsb2NrIGNvZGUgYW5kIGhhbmRsZWQgYnkgdGhlIE9QUCBsYXllciBjb2RlIGluIHRoZSBuZWFyIGZ1dHVyZS4KICAqLwotc3RhdGljIGludCBfX2luaXQgb21hcDJfY2xrX2FyY2hfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgb21hcDJ4eHhfY2xrX2FyY2hfaW5pdCh2b2lkKQogewotCXN0cnVjdCBjbGsgKnZpcnRfcHJjbV9zZXQsICpzeXNfY2ssICpkcGxsX2NrLCAqbXB1X2NrOwotCXVuc2lnbmVkIGxvbmcgc3lzX2NrX3JhdGU7CisJaW50IHJldDsKIAotCWlmICghbXB1cmF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkKKwkJcmV0dXJuIDA7CiAKLQl2aXJ0X3ByY21fc2V0ID0gY2xrX2dldChOVUxMLCAidmlydF9wcmNtX3NldCIpOwotCXN5c19jayA9IGNsa19nZXQoTlVMTCwgInN5c19jayIpOwotCWRwbGxfY2sgPSBjbGtfZ2V0KE5VTEwsICJkcGxsX2NrIik7Ci0JbXB1X2NrID0gY2xrX2dldChOVUxMLCAibXB1X2NrIik7CisJcmV0ID0gb21hcDJfY2xrX3N3aXRjaF9tcHVyYXRlX2F0X2Jvb3QoInZpcnRfcHJjbV9zZXQiKTsKKwlpZiAoIXJldCkKKwkJb21hcDJfY2xrX3ByaW50X25ld19yYXRlcygic3lzX2NrIiwgImRwbGxfY2siLCAibXB1X2NrIik7CiAKLQlpZiAoY2xrX3NldF9yYXRlKHZpcnRfcHJjbV9zZXQsIG1wdXJhdGUpKQotCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkIG5vdCBmaW5kIG1hdGNoaW5nIE1QVSByYXRlXG4iKTsKLQotCXJlY2FsY3VsYXRlX3Jvb3RfY2xvY2tzKCk7Ci0KLQlzeXNfY2tfcmF0ZSA9IGNsa19nZXRfcmF0ZShzeXNfY2spOwotCi0JcHJfaW5mbygiU3dpdGNoZWQgdG8gbmV3IGNsb2NraW5nIHJhdGUgKENyeXN0YWwvRFBMTC9NUFUpOiAiCi0JCSIlbGQuJTAxbGQvJWxkLyVsZCBNSHpcbiIsCi0JCShzeXNfY2tfcmF0ZSAvIDEwMDAwMDApLCAoc3lzX2NrX3JhdGUgLyAxMDAwMDApICUgMTAsCi0JCShjbGtfZ2V0X3JhdGUoZHBsbF9jaykgLyAxMDAwMDAwKSwKLQkJKGNsa19nZXRfcmF0ZShtcHVfY2spIC8gMTAwMDAwMCkpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KLWFyY2hfaW5pdGNhbGwob21hcDJfY2xrX2FyY2hfaW5pdCk7CisKK2FyY2hfaW5pdGNhbGwob21hcDJ4eHhfY2xrX2FyY2hfaW5pdCk7CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazJ4eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syeHh4LmgKaW5kZXggZTM1ZWZkZS4uNmE2NThiOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazJ4eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMnh4eC5oCkBAIC0xLDM1ICsxLDM4IEBACiAvKgogICogT01BUDIgY2xvY2sgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgbWFjcm9zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KICAqLwogCi0jaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DS18yNFhYX0gKLSNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLXzI0WFhfSAorI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0syWFhYX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLMlhYWF9ICiAKIHVuc2lnbmVkIGxvbmcgb21hcDJfdGFibGVfbXB1X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwogaW50IG9tYXAyX3NlbGVjdF90YWJsZV9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKIGxvbmcgb21hcDJfcm91bmRfdG9fdGFibGVfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci11bnNpZ25lZCBsb25nIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7Cit1bnNpZ25lZCBsb25nIG9tYXAyeHh4X3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CiB1bnNpZ25lZCBsb25nIG9tYXAyX29zY19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7Ci11bnNpZ25lZCBsb25nIG9tYXAyX3N5c19jbGtfcmVjYWxjKHN0cnVjdCBjbGsgKmNsayk7CiB1bnNpZ25lZCBsb25nIG9tYXAyX2RwbGxjb3JlX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwogaW50IG9tYXAyX3JlcHJvZ3JhbV9kcGxsY29yZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CiB1bnNpZ25lZCBsb25nIG9tYXAyeHh4X2Nsa19nZXRfY29yZV9yYXRlKHN0cnVjdCBjbGsgKmNsayk7Cit1MzIgb21hcDJ4eHhfZ2V0X2FwbGxfY2xraW4odm9pZCk7Cit1MzIgb21hcDJ4eHhfZ2V0X3N5c2Nsa2Rpdih2b2lkKTsKK3ZvaWQgb21hcDJ4eHhfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCh2b2lkKTsKIAotLyogUkVWSVNJVDogVGhlc2Ugc2hvdWxkIGJlIHNldCBkeW5hbWljYWxseSBmb3IgQ09ORklHX01VTFRJX09NQVAyICovCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MjAKLSNkZWZpbmUgT01BUF9DTV9SRUdBRERSCQkJT01BUDI0MjBfQ01fUkVHQUREUgotI2RlZmluZSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMCU9NQVAyNDIwX1BSQ01fQ0xLT1VUX0NUUkwKLSNkZWZpbmUgT01BUDI0WFhfUFJDTV9DTEtFTVVMX0NUUkwJT01BUDI0MjBfUFJDTV9DTEtFTVVMX0NUUkwKK2ludCBvbWFwMjQyMF9jbGtfaW5pdCh2b2lkKTsKICNlbHNlCi0jZGVmaW5lIE9NQVBfQ01fUkVHQUREUgkJCU9NQVAyNDMwX0NNX1JFR0FERFIKLSNkZWZpbmUgT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTAlPTUFQMjQzMF9QUkNNX0NMS09VVF9DVFJMCi0jZGVmaW5lIE9NQVAyNFhYX1BSQ01fQ0xLRU1VTF9DVFJMCU9NQVAyNDMwX1BSQ01fQ0xLRU1VTF9DVFJMCisjZGVmaW5lIG9tYXAyNDIwX2Nsa19pbml0KCkJMAogI2VuZGlmCiAKLWV4dGVybiB2b2lkIF9faW9tZW0gKnByY21fY2xrc3JjX2N0cmw7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKK2ludCBvbWFwMjQzMF9jbGtfaW5pdCh2b2lkKTsKKyNlbHNlCisjZGVmaW5lIG9tYXAyNDMwX2Nsa19pbml0KCkJMAorI2VuZGlmCisKK2V4dGVybiB2b2lkIF9faW9tZW0gKnByY21fY2xrc3JjX2N0cmwsICpjbV9pZGxlc3RfcGxsOwogCiBleHRlcm4gc3RydWN0IGNsayAqZGNsazsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazJ4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazJ4eHhfZGF0YS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5N2RjN2NmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2syeHh4X2RhdGEuYworKysgL2Rldi9udWxsCkBAIC0xLDIzMDkgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMnh4eF9kYXRhLmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqICBDb250YWN0czoKLSAqICBSaWNoYXJkIFdvb2RydWZmIDxyLXdvb2RydWZmMkB0aS5jb20+Ci0gKiAgUGF1bCBXYWxtc2xleQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotCi0jaW5jbHVkZSA8cGxhdC9jbGtkZXZfb21hcC5oPgotCi0jaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJjbG9jazJ4eHguaCIKLSNpbmNsdWRlICJvcHAyeHh4LmgiCi0jaW5jbHVkZSAicHJtLmgiCi0jaW5jbHVkZSAiY20uaCIKLSNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCi0jaW5jbHVkZSAiY20tcmVnYml0cy0yNHh4LmgiCi0jaW5jbHVkZSAic2RyYy5oIgotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIDI0eHggY2xvY2sgdHJlZS4KLSAqCi0gKiBOT1RFOkluIG1hbnkgY2FzZXMgaGVyZSB3ZSBhcmUgYXNzaWduaW5nIGEgJ2RlZmF1bHQnIHBhcmVudC4JSW4gbWFueQotICoJY2FzZXMgdGhlIHBhcmVudCBpcyBzZWxlY3RhYmxlLglUaGUgZ2V0L3NldCBwYXJlbnQgY2FsbHMgd2lsbCBhbHNvCi0gKglzd2l0Y2ggc291cmNlcy4KLSAqCi0gKglNYW55IHNvbWUgY2xvY2tzIHNheSBhbHdheXNfZW5hYmxlZCwgYnV0IHRoZXkgY2FuIGJlIGF1dG8gaWRsZWQgZm9yCi0gKglwb3dlciBzYXZpbmdzLiBUaGV5IHdpbGwgYWx3YXlzIGJlIGF2YWlsYWJsZSB1cG9uIGNsb2NrIHJlcXVlc3QuCi0gKgotICoJU2V2ZXJhbCBzb3VyY2VzIGFyZSBnaXZlbiBpbml0aWFsIHJhdGVzIHdoaWNoIG1heSBiZSB3cm9uZywgdGhpcyB3aWxsCi0gKgliZSBmaXhlZCB1cCBpbiB0aGUgaW5pdCBmdW5jLgotICoKLSAqCVRoaW5ncyBhcmUgYnJvYWRseSBzZXBhcmF0ZWQgYmVsb3cgYnkgY2xvY2sgZG9tYWlucy4gSXQgaXMKLSAqCW5vdGV3b3J0aHkgdGhhdCBtb3N0IHBlcmlmZXJhbHMgaGF2ZSBkZXBlbmRlbmNpZXMgb24gbXVsdGlwbGUgY2xvY2sKLSAqCWRvbWFpbnMuIE1hbnkgZ2V0IHRoZWlyIGludGVyZmFjZSBjbG9ja3MgZnJvbSB0aGUgTDQgZG9tYWluLCBidXQgZ2V0Ci0gKglmdW5jdGlvbmFsIGNsb2NrcyBmcm9tIGZpeGVkIHNvdXJjZXMgb3Igb3RoZXIgY29yZSBkb21haW4gZGVyaXZlZAotICoJY2xvY2tzLgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotLyogQmFzZSBleHRlcm5hbCBpbnB1dCBjbG9ja3MgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfMzJrX2NrID0gewotCS5uYW1lCQk9ICJmdW5jXzMya19jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJhdGUJCT0gMzIwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQsCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzZWN1cmVfMzJrX2NrID0gewotCS5uYW1lCQk9ICJzZWN1cmVfMzJrX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmF0ZQkJPSAzMjc2OCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLX07Ci0KLS8qIFR5cGljYWwgMTIvMTNNSHogaW4gc3RhbmRhbG9uZSBtb2RlLCB3aWxsIGJlIDI2TWh6IGluIGNoYXNzaXMgbW9kZSAqLwotc3RhdGljIHN0cnVjdCBjbGsgb3NjX2NrID0gewkJLyogKCoxMiwgKjEzLCAxOS4yLCAqMjYsIDM4LjQpTUh6ICovCi0JLm5hbWUJCT0gIm9zY19jayIsCi0JLm9wcwkJPSAmY2xrb3BzX29zY2NrLAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX29zY19jbGtfcmVjYWxjLAotfTsKLQotLyogV2l0aG91dCBtb2RlbSBsaWtlbHkgMTJNSHosIHdpdGggbW9kZW0gbGlrZWx5IDEzTUh6ICovCi1zdGF0aWMgc3RydWN0IGNsayBzeXNfY2sgPSB7CQkvKiAoKjEyLCAqMTMsIDE5LjIsIDI2LCAzOC40KU1IeiAqLwotCS5uYW1lCQk9ICJzeXNfY2siLAkJLyogfiByZWZfY2xrIGFsc28gKi8KLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZvc2NfY2ssCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfc3lzX2Nsa19yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhbHRfY2sgPSB7CQkvKiBUeXBpY2FsIDU0TSBvciA0OE0sIG1heSBub3QgZXhpc3QgKi8KLQkubmFtZQkJPSAiYWx0X2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmF0ZQkJPSA1NDAwMDAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLX07Ci0KLS8qCi0gKiBBbmFsb2cgZG9tYWluIHJvb3Qgc291cmNlIGNsb2NrcwotICovCi0KLS8qIGRwbGxfY2ssIGlzIGJyb2tlbiBvdXQgaW4gdG8gc3BlY2lhbCBjYXNlcyB0aHJvdWdoIGNsa3NlbCAqLwotLyogUkVWSVNJVDogUmF0ZSBjaGFuZ2VzIG9uIGRwbGxfY2sgdHJpZ2dlciBhIGZ1bGwgc2V0IGNoYW5nZS4JLi4uCi0gKiBkZWFsIHdpdGggdGhpcwotICovCi0KLXN0YXRpYyBzdHJ1Y3QgZHBsbF9kYXRhIGRwbGxfZGQgPSB7Ci0JLm11bHRfZGl2MV9yZWcJCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAotCS5tdWx0X21hc2sJCT0gT01BUDI0WFhfRFBMTF9NVUxUX01BU0ssCi0JLmRpdjFfbWFzawkJPSBPTUFQMjRYWF9EUExMX0RJVl9NQVNLLAotCS5jbGtfYnlwYXNzCQk9ICZzeXNfY2ssCi0JLmNsa19yZWYJCT0gJnN5c19jaywKLQkuY29udHJvbF9yZWcJCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX21hc2sJCT0gT01BUDI0WFhfRU5fRFBMTF9NQVNLLAotCS5tYXhfbXVsdGlwbGllcgkJPSAxMDI0LAotCS5taW5fZGl2aWRlcgkJPSAxLAotCS5tYXhfZGl2aWRlcgkJPSAxNiwKLQkucmF0ZV90b2xlcmFuY2UJCT0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCi19OwotCi0vKgotICogWFhYIENhbm5vdCBhZGQgcm91bmRfcmF0ZSBoZXJlIHlldCwgYXMgdGhpcyBpcyBzdGlsbCBhIGNvbXBvc2l0ZSBjbG9jaywKLSAqIG5vdCBqdXN0IGEgRFBMTAotICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsX2NrID0gewotCS5uYW1lCQk9ICJkcGxsX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCQkvKiBDYW4gYmUgZnVuY18zMmsgYWxzbyAqLwotCS5kcGxsX2RhdGEJPSAmZHBsbF9kZCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9kcGxsY29yZV9yZWNhbGMsCi0JLnNldF9yYXRlCT0gJm9tYXAyX3JlcHJvZ3JhbV9kcGxsY29yZSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGFwbGw5Nl9jayA9IHsKLQkubmFtZQkJPSAiYXBsbDk2X2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfYXBsbDk2LAotCS5wYXJlbnQJCT0gJnN5c19jaywKLQkucmF0ZQkJPSA5NjAwMDAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCB8IEVOQUJMRV9PTl9JTklULAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOXzk2TV9QTExfU0hJRlQsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhcGxsNTRfY2sgPSB7Ci0JLm5hbWUJCT0gImFwbGw1NF9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX2FwbGw1NCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLnJhdGUJCT0gNTQwMDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQgfCBFTkFCTEVfT05fSU5JVCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl81NE1fUExMX1NISUZULAotfTsKLQotLyoKLSAqIFBSQ00gZGlnaXRhbCBiYXNlIHNvdXJjZXMKLSAqLwotCi0vKiBmdW5jXzU0bV9jayAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfNTRtX2FwbGw1NF9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfNTRtX2FsdF9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBmdW5jXzU0bV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmYXBsbDU0X2NrLCAucmF0ZXMgPSBmdW5jXzU0bV9hcGxsNTRfcmF0ZXMsIH0sCi0JeyAucGFyZW50ID0gJmFsdF9jaywJLnJhdGVzID0gZnVuY181NG1fYWx0X3JhdGVzLCB9LAotCXsgLnBhcmVudCA9IE5VTEwgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGZ1bmNfNTRtX2NrID0gewotCS5uYW1lCQk9ICJmdW5jXzU0bV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmYXBsbDU0X2NrLAkvKiBjYW4gYWxzbyBiZSBhbHRfY2xrICovCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF81NE1fU09VUkNFLAotCS5jbGtzZWwJCT0gZnVuY181NG1fY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjb3JlX2NrID0gewotCS5uYW1lCQk9ICJjb3JlX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsX2NrLAkJLyogY2FuIGFsc28gYmUgMzJrICovCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIGZ1bmNfOTZtX2NrICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfOTZtX2FwbGw5Nl9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGZ1bmNfOTZtX2FsdF9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBmdW5jXzk2bV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmYXBsbDk2X2NrLAkucmF0ZXMgPSBmdW5jXzk2bV9hcGxsOTZfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmYWx0X2NrLAkucmF0ZXMgPSBmdW5jXzk2bV9hbHRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLS8qIFRoZSBwYXJlbnQgb2YgdGhpcyBjbG9jayBpcyBub3Qgc2VsZWN0YWJsZSBvbiAyNDIwLiAqLwotc3RhdGljIHN0cnVjdCBjbGsgZnVuY185Nm1fY2sgPSB7Ci0JLm5hbWUJCT0gImZ1bmNfOTZtX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZhcGxsOTZfY2ssCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjQzMF85Nk1fU09VUkNFLAotCS5jbGtzZWwJCT0gZnVuY185Nm1fY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQotfTsKLQotLyogZnVuY180OG1fY2sgKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBmdW5jXzQ4bV9hcGxsOTZfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAyLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBmdW5jXzQ4bV9hbHRfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZnVuY180OG1fY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmFwbGw5Nl9jaywJLnJhdGVzID0gZnVuY180OG1fYXBsbDk2X3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmFsdF9jaywgLnJhdGVzID0gZnVuY180OG1fYWx0X3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBmdW5jXzQ4bV9jayA9IHsKLQkubmFtZQkJPSAiZnVuY180OG1fY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmFwbGw5Nl9jaywJIC8qIDk2TSBvciBBbHQgKi8KLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYXzQ4TV9TT1VSQ0UsCi0JLmNsa3NlbAkJPSBmdW5jXzQ4bV9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBmdW5jXzEybV9jayA9IHsKLQkubmFtZQkJPSAiZnVuY18xMm1fY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAotCS5maXhlZF9kaXYJPSA0LAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjLAotfTsKLQotLyogU2VjdXJlIHRpbWVyLCBvbmx5IGF2YWlsYWJsZSBpbiBzZWN1cmUgbW9kZSAqLwotc3RhdGljIHN0cnVjdCBjbGsgd2R0MV9vc2NfY2sgPSB7Ci0JLm5hbWUJCT0gImNrX3dkdDFfb3NjIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLwotCS5wYXJlbnQJCT0gJm9zY19jaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyoKLSAqIFRoZSBjb21tb25fY2xrb3V0KiBjbGtzZWxfcmF0ZSBzdHJ1Y3RzIGFyZSBjb21tb24gdG8KLSAqIHN5c19jbGtvdXQsIHN5c19jbGtvdXRfc3JjLCBzeXNfY2xrb3V0MiwgYW5kIHN5c19jbGtvdXQyX3NyYy4KLSAqIHN5c19jbGtvdXQyXyogYXJlIDI0MjAtb25seSwgc28gdGhlCi0gKiBjbGtzZWxfcmF0ZSBmbGFncyBmaWVsZHMgYXJlIGluYWNjdXJhdGUgZm9yIHRob3NlIGNsb2Nrcy4gVGhpcyBpcwotICogaGFybWxlc3Mgc2luY2UgYWNjZXNzIHRvIHRob3NlIGNsb2NrcyBhcmUgZ2F0ZWQgYnkgdGhlIHN0cnVjdCBjbGsKLSAqIGZsYWdzIGZpZWxkcywgd2hpY2ggbWFyayB0aGVtIGFzIDI0MjAtb25seS4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjb21tb25fY2xrb3V0X3NyY19jb3JlX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjb21tb25fY2xrb3V0X3NyY19zeXNfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9jbGtvdXRfc3JjXzk2bV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29tbW9uX2Nsa291dF9zcmNfNTRtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgY29tbW9uX2Nsa291dF9zcmNfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfY2ssCSAgLnJhdGVzID0gY29tbW9uX2Nsa291dF9zcmNfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgLnJhdGVzID0gY29tbW9uX2Nsa291dF9zcmNfc3lzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmZ1bmNfOTZtX2NrLCAucmF0ZXMgPSBjb21tb25fY2xrb3V0X3NyY185Nm1fcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZnVuY181NG1fY2ssIC5yYXRlcyA9IGNvbW1vbl9jbGtvdXRfc3JjXzU0bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dF9zcmMgPSB7Ci0JLm5hbWUJCT0gInN5c19jbGtvdXRfc3JjIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLT1VUX0NUUkwsCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9DTEtPVVRfRU5fU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLT1VUX0NUUkwsCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLT1VUX1NPVVJDRV9NQVNLLAotCS5jbGtzZWwJCT0gY29tbW9uX2Nsa291dF9zcmNfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjb21tb25fY2xrb3V0X3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSA0LCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gOCwgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDE2LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3lzX2Nsa291dF9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2Nsa291dF9zcmMsIC5yYXRlcyA9IGNvbW1vbl9jbGtvdXRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jbGtvdXQgPSB7Ci0JLm5hbWUJCT0gInN5c19jbGtvdXQiLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJnN5c19jbGtvdXRfc3JjLAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5jbGtzZWxfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtPVVRfRElWX01BU0ssCi0JLmNsa3NlbAkJPSBzeXNfY2xrb3V0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLS8qIEluIDI0MzAsIG5ldyBpbiAyNDIwIEVTMiAqLwotc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dDJfc3JjID0gewotCS5uYW1lCQk9ICJzeXNfY2xrb3V0Ml9zcmMiLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUDI0WFhfUFJDTV9DTEtPVVRfQ1RSTCwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0NMS09VVDJfRU5fU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLT1VUX0NUUkwsCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0MjBfQ0xLT1VUMl9TT1VSQ0VfTUFTSywKLQkuY2xrc2VsCQk9IGNvbW1vbl9jbGtvdXRfc3JjX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHN5c19jbGtvdXQyX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZzeXNfY2xrb3V0Ml9zcmMsIC5yYXRlcyA9IGNvbW1vbl9jbGtvdXRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLS8qIEluIDI0MzAsIG5ldyBpbiAyNDIwIEVTMiAqLwotc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dDIgPSB7Ci0JLm5hbWUJCT0gInN5c19jbGtvdXQyIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZzeXNfY2xrb3V0Ml9zcmMsCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLmNsa3NlbF9yZWcJPSBPTUFQMjRYWF9QUkNNX0NMS09VVF9DVFJMLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNDIwX0NMS09VVDJfRElWX01BU0ssCi0JLmNsa3NlbAkJPSBzeXNfY2xrb3V0Ml9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBlbXVsX2NrID0gewotCS5uYW1lCQk9ICJlbXVsX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZmdW5jXzU0bV9jaywKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVAyNFhYX1BSQ01fQ0xLRU1VTF9DVFJMLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU1VTEFUSU9OX0VOX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0KLX07Ci0KLS8qCi0gKiBNUFUgY2xvY2sgZG9tYWluCi0gKglDbG9ja3M6Ci0gKgkJTVBVX0ZDTEssIE1QVV9JQ0xLCi0gKgkJSU5UX01fRkNMSywgSU5UX01fSV9DTEsKLSAqCi0gKiAtIEluZGl2aWR1YWwgY2xvY2tzIGFyZSBoYXJkd2FyZSBtYW5hZ2VkLgotICogLSBCYXNlIGRpdmlkZXIgY29tZXMgZnJvbTogQ01fQ0xLU0VMX01QVQotICoKLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBtcHVfY29yZV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbXB1X2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBtcHVfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbXB1X2NrID0gewkvKiBDb250cm9sIGNwdSAqLwotCS5uYW1lCQk9ICJtcHVfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmZsYWdzCQk9IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAotCS5jbGtkbV9uYW1lCT0gIm1wdV9jbGtkbSIsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9NUFVfTUFTSywKLQkuY2xrc2VsCQk9IG1wdV9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi0vKgotICogRFNQICgyNDMwLUlWQTIuMSkgKDI0MjAtVU1BK0lWQTEpIGNsb2NrIGRvbWFpbgotICogQ2xvY2tzOgotICoJMjQzMDogSVZBMi4xX0ZDTEsgKHJlYWxseSBqdXN0IERTUF9GQ0xLKSwgSVZBMi4xX0lDTEsKLSAqCTI0MjA6IFVNQV9GQ0xLLCBVTUFfSUNMSywgSVZBX01QVSwgSVZBX0NPUAotICoKLSAqIFdvbid0IGJlIHRvbyBzcGVjaWZpYyBoZXJlLiBUaGUgY29yZSBjbG9jayBjb21lcyBpbnRvIHRoaXMgYmxvY2sKLSAqIGl0IGlzIGRpdmlkZWQgdGhlbiB0ZWUnZWQuIE9uZSBicmFuY2ggZ29lcyBkaXJlY3RseSB0byB4eXogZW5hYmxlCi0gKiBjb250cm9scy4gVGhlIG90aGVyIGJyYW5jaCBnZXRzIGZ1cnRoZXIgZGl2aWRlZCBieSAyIHRoZW4gcG9zc2libHkKLSAqIHJvdXRlZCBpbnRvIGEgc3luY2hyb25pemVyIGFuZCBvdXQgb2YgY2xvY2tzIGFiYy4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3BfZmNrX2NvcmVfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3BfZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBkc3BfZmNrX2NvcmVfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzcF9mY2sgPSB7Ci0JLm5hbWUJCT0gImRzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9jaywKLQkuZmxhZ3MJCT0gREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCi0JLmNsa2RtX25hbWUJPSAiZHNwX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfQ01fRkNMS0VOX0RTUF9FTl9EU1BfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfRFNQX01BU0ssCi0JLmNsa3NlbAkJPSBkc3BfZmNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLS8qIERTUCBpbnRlcmZhY2UgY2xvY2sgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNwX2lyYXRlX2lja19yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjQzWCB9LAotCXsgLmRpdiA9IDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRzcF9pcmF0ZV9pY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmRzcF9mY2ssIC5yYXRlcyA9IGRzcF9pcmF0ZV9pY2tfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLS8qIFRoaXMgY2xvY2sgZG9lcyBub3QgZXhpc3QgYXMgc3VjaCBpbiB0aGUgVFJNLiAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHNwX2lyYXRlX2ljayA9IHsKLQkubmFtZQkJPSAiZHNwX2lyYXRlX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHNwX2ZjaywKLQkuZmxhZ3MJCT0gREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfRFNQX0lGX01BU0ssCi0JLmNsa3NlbAkJPSBkc3BfaXJhdGVfaWNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQkgICAgICA9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLS8qIDI0MjAgb25seSAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHNwX2ljayA9IHsKLQkubmFtZQkJPSAiZHNwX2ljayIsCSAvKiBhcHBhcmVudGx5IGlwaSBhbmQgaXNwICovCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZkc3BfaXJhdGVfaWNrLAotCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fRFNQX0lQSV9TSElGVCwJICAgICAgLyogZm9yIGlwaSAqLwotfTsKLQotLyogMjQzMCBvbmx5IC0gRU5fRFNQIGNvbnRyb2xzIGJvdGggZHNwIGZjbGsgYW5kIGljbGsgb24gMjQzMCAqLwotc3RhdGljIHN0cnVjdCBjbGsgaXZhMl8xX2ljayA9IHsKLQkubmFtZQkJPSAiaXZhMl8xX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZkc3BfaXJhdGVfaWNrLAotCS5mbGFncwkJPSBERUxBWUVEX0FQUCB8IENPTkZJR19QQVJUSUNJUEFOVCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjRYWF9EU1BfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfQ01fRkNMS0VOX0RTUF9FTl9EU1BfU0hJRlQsCi19OwotCi0vKgotICogVGhlIElWQTEgaXMgYW4gQVJNNyBjb3JlIG9uIHRoZSAyNDIwIHRoYXQgaGFzIG5vdGhpbmcgdG8gZG8gd2l0aAotICogdGhlIEM1NHgsIGJ1dCB3aGljaCBpcyBjb250YWluZWQgaW4gdGhlIERTUCBwb3dlcmRvbWFpbi4gIERvZXMgbm90Ci0gKiBleGlzdCBvbiBsYXRlciBPTUFQcy4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgaXZhMV9pZmNrID0gewotCS5uYW1lCQk9ICJpdmExX2lmY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9jaywKLQkuZmxhZ3MJCT0gQ09ORklHX1BBUlRJQ0lQQU5UIHwgREVMQVlFRF9BUFAsCi0JLmNsa2RtX25hbWUJPSAiaXZhMV9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0lWQV9DT1BfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjQyMF9DTEtTRUxfSVZBX01BU0ssCi0JLmNsa3NlbAkJPSBkc3BfZmNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLS8qIElWQTEgbXB1L2ludC9pL2YgY2xvY2tzIGFyZSAvMiBvZiBwYXJlbnQgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGl2YTFfbXB1X2ludF9pZmNrID0gewotCS5uYW1lCQk9ICJpdmExX21wdV9pbnRfaWZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZpdmExX2lmY2ssCi0JLmNsa2RtX25hbWUJPSAiaXZhMV9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0lWQV9NUFVfU0hJRlQsCi0JLmZpeGVkX2Rpdgk9IDIsCi0JLnJlY2FsYwkJPSAmb21hcDJfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCi19OwotCi0vKgotICogTDMgY2xvY2sgZG9tYWluCi0gKiBMMyBjbG9ja3MgYXJlIHVzZWQgZm9yIGJvdGggaW50ZXJmYWNlIGFuZCBmdW5jdGlvbmFsIGNsb2NrcyB0bwotICogbXVsdGlwbGUgZW50aXRpZXMuIFNvbWUgb2YgdGhlc2UgY2xvY2tzIGFyZSBjb21wbGV0ZWx5IG1hbmFnZWQKLSAqIGJ5IGhhcmR3YXJlLCBhbmQgc29tZSBvdGhlcnMgYWxsb3cgc29mdHdhcmUgY29udHJvbC4gSGFyZHdhcmUKLSAqIG1hbmFnZWQgb25lcyBnZW5lcmFsIGFyZSBiYXNlZCBvbiBkaXJlY3RseSBDTEtfUkVRIHNpZ25hbHMgYW5kCi0gKiB2YXJpb3VzIGF1dG8gaWRsZSBzZXR0aW5ncy4gVGhlIGZ1bmN0aW9uYWwgc3BlYyBzZXRzIG1hbnkgb2YgdGhlc2UKLSAqIGFzICd0aWUtaGlnaCcgZm9yIHRoZWlyIGVuYWJsZXMuCi0gKgotICogSS1DTE9DS1M6Ci0gKglMMy1JbnRlcmNvbm5lY3QsIFNNUywgR1BNQywgU0RSQywgT0NNX1JBTSwgT0NNX1JPTSwgU0RNQQotICoJQ0FNLCBIUy1VU0IuCi0gKiBGLUNMT0NLCi0gKglTU0kuCi0gKgotICogR1BNQyBtZW1vcmllcyBhbmQgU0RSQyBoYXZlIHRpbWluZyBhbmQgY2xvY2sgc2Vuc2l0aXZlIHJlZ2lzdGVycyB3aGljaAotICogbWF5IHZlcnkgd2VsbCBuZWVkIG5vdGlmaWNhdGlvbiB3aGVuIHRoZSBjbG9jayBjaGFuZ2VzLiBDdXJyZW50bHkgZm9yIGxvdwotICogb3BlcmF0aW5nIHBvaW50cywgdGhlc2UgYXJlIHRha2VuIGNhcmUgb2YgaW4gc2xlZXAuUy4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjb3JlX2wzX2NvcmVfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDEyLCAudmFsID0gMTIsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDE2LCAudmFsID0gMTYsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgY29yZV9sM19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gY29yZV9sM19jb3JlX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjb3JlX2wzX2NrID0gewkvKiBVc2VkIGZvciBpY2sgYW5kIGZjaywgaW50ZXJjb25uZWN0ICovCi0JLm5hbWUJCT0gImNvcmVfbDNfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmZsYWdzCQk9IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfTDNfTUFTSywKLQkuY2xrc2VsCQk9IGNvcmVfbDNfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQotfTsKLQotLyogdXNiX2w0X2ljayAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSB1c2JfbDRfaWNrX2NvcmVfbDNfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHVzYl9sNF9pY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfbDNfY2ssIC5yYXRlcyA9IHVzYl9sNF9pY2tfY29yZV9sM19yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfSwKLX07Ci0KLS8qIEl0IGlzIHVuY2xlYXIgZnJvbSBUUk0gd2hldGhlciB1c2JfbDRfaWNrIGlzIHJlYWxseSBpbiBMMyBvciBMNCBjbGtkbSAqLwotc3RhdGljIHN0cnVjdCBjbGsgdXNiX2w0X2ljayA9IHsJLyogRlMtVVNCIGludGVyZmFjZSBjbG9jayAqLwotCS5uYW1lCQk9ICJ1c2JfbDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmZsYWdzCQk9IERFTEFZRURfQVBQIHwgQ09ORklHX1BBUlRJQ0lQQU5ULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VTQl9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX1VTQl9NQVNLLAotCS5jbGtzZWwJCT0gdXNiX2w0X2lja19jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi0vKgotICogTDQgY2xvY2sgbWFuYWdlbWVudCBkb21haW4KLSAqCi0gKiBUaGlzIGRvbWFpbiBjb250YWlucyBsb3RzIG9mIGludGVyZmFjZSBjbG9ja3MgZnJvbSB0aGUgTDQgaW50ZXJmYWNlLCBzb21lCi0gKiBmdW5jdGlvbmFsIGNsb2Nrcy4JRml4ZWQgQVBMTCBmdW5jdGlvbmFsIHNvdXJjZSBjbG9ja3MgYXJlIG1hbmFnZWQgaW4KLSAqIHRoaXMgZG9tYWluLgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGw0X2NvcmVfbDNfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbDRfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfbDNfY2ssIC5yYXRlcyA9IGw0X2NvcmVfbDNfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGw0X2NrID0gewkJLyogdXNlZCBib3RoIGFzIGFuIGljayBhbmQgZmNrICovCi0JLm5hbWUJCT0gImw0X2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAotCS5mbGFncwkJPSBERUxBWUVEX0FQUCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0w0X01BU0ssCi0JLmNsa3NlbAkJPSBsNF9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi0vKgotICogU1NJIGlzIGluIEwzIG1hbmFnZW1lbnQgZG9tYWluLCBpdHMgZGlyZWN0IHBhcmVudCBpcyBjb3JlIG5vdCBsMywKLSAqIG1hbnkgY29yZSBwb3dlciBkb21haW4gZW50aXRpZXMgYXJlIGdyb3VwZWQgaW50byB0aGUgTDMgY2xvY2sKLSAqIGRvbWFpbi4KLSAqIFNTSV9TU1JfRkNMSywgU1NJX1NTVF9GQ0xLLCBTU0lfTDRfSUNMSwotICoKLSAqIHNzciA9IGNvcmUvMS8yLzMvNC81LCBzc3QgPSAxLzIgc3NyLgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHNzaV9zc3Jfc3N0X2Zja19jb3JlX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDUsIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfSwKLQl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCi0JeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3NpX3Nzcl9zc3RfZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBzc2lfc3NyX3NzdF9mY2tfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc3NpX3Nzcl9zc3RfZmNrID0gewotCS5uYW1lCQk9ICJzc2lfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmZsYWdzCQk9IERFTEFZRURfQVBQLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1NTSV9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX1NTSV9NQVNLLAotCS5jbGtzZWwJCT0gc3NpX3Nzcl9zc3RfZmNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLS8qCi0gKiBQcmVzdW1hYmx5IHRoaXMgaXMgdGhlIHNhbWUgYXMgU1NJX0lDTEsuCi0gKiBUUk0gY29udHJhZGljdHMgaXRzZWxmIG9uIHdoYXQgY2xvY2tkb21haW4gU1NJX0lDTEsgaXMgaW4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgc3NpX2w0X2ljayA9IHsKLQkubmFtZQkJPSAic3NpX2w0X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9TU0lfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLQotLyoKLSAqIEdGWCBjbG9jayBkb21haW4KLSAqCUNsb2NrczoKLSAqIEdGWF9GQ0xLLCBHRlhfSUNMSwotICogR0ZYX0NHMSgyZCksIEdGWF9DRzIoM2QpCi0gKgotICogR0ZYX0ZDTEsgcnVucyBmcm9tIEwzLCBhbmQgaXMgZGl2aWRlZCBieSAoMSwyLDMsNCkKLSAqIFRoZSAyZCBhbmQgM2QgY2xvY2tzIHJ1biBhdCBhIGhhcmR3YXJlIGRldGVybWluZWQKLSAqIGRpdmlkZWQgdmFsdWUgb2YgZmNsay4KLSAqCi0gKi8KLS8qIFhYWCBSRVZJU0lUOiBHRlggY2xvY2sgaXMgcGFydCBvZiBDT05GSUdfUEFSVElDSVBBTlQsIG5vPyBkb3VibGVjaGVjay4gKi8KLQotLyogVGhpcyBjbGtzZWwgc3RydWN0IGlzIHNoYXJlZCBiZXR3ZWVuIGdmeF8zZF9mY2sgYW5kIGdmeF8yZF9mY2sgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGdmeF9mY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfbDNfY2ssIC5yYXRlcyA9IGdmeF9sM19yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF8zZF9mY2sgPSB7Ci0JLm5hbWUJCT0gImdmeF8zZF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuY2xrZG1fbmFtZQk9ICJnZnhfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8zRF9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVBfQ0xLU0VMX0dGWF9NQVNLLAotCS5jbGtzZWwJCT0gZ2Z4X2Zja19jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBnZnhfMmRfZmNrID0gewotCS5uYW1lCQk9ICJnZnhfMmRfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmNsa2RtX25hbWUJPSAiZ2Z4X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fMkRfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQX0NMS1NFTF9HRlhfTUFTSywKLQkuY2xrc2VsCQk9IGdmeF9mY2tfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2ljayA9IHsKLQkubmFtZQkJPSAiZ2Z4X2ljayIsCQkvKiBGcm9tIGwzICovCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAotCS5jbGtkbV9uYW1lCT0gImdmeF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVBfRU5fR0ZYX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKgotICogTW9kZW0gY2xvY2sgZG9tYWluICgyNDMwKQotICoJQ0xPQ0tTOgotICoJCU1ETV9PU0NfQ0xLCi0gKgkJTURNX0lDTEsKLSAqIFRoZXNlIGNsb2NrcyBhcmUgdXNhYmxlIGluIGNoYXNzaXMgbW9kZSBvbmx5LgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG1kbV9pY2tfY29yZV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfSwKLQl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8yNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjQzWCB9LAotCXsgLmRpdiA9IDksIC52YWwgPSA5LCAuZmxhZ3MgPSBSQVRFX0lOXzI0M1ggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG1kbV9pY2tfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IG1kbV9pY2tfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWRtX2ljayA9IHsJCS8qIHVzZWQgYm90aCBhcyBhIGljayBhbmQgZmNrICovCi0JLm5hbWUJCT0gIm1kbV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9jaywKLQkuZmxhZ3MJCT0gREVMQVlFRF9BUFAgfCBDT05GSUdfUEFSVElDSVBBTlQsCi0JLmNsa2RtX25hbWUJPSAibWRtX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMjQzMF9NRE1fTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfQ01fSUNMS0VOX01ETV9FTl9NRE1fU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0MzBfTURNX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjQzMF9DTEtTRUxfTURNX01BU0ssCi0JLmNsa3NlbAkJPSBtZG1faWNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1kbV9vc2NfY2sgPSB7Ci0JLm5hbWUJCT0gIm1kbV9vc2NfY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmb3NjX2NrLAotCS5jbGtkbV9uYW1lCT0gIm1kbV9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDI0MzBfTURNX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX09TQ19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyoKLSAqIERTUyBjbG9jayBkb21haW4KLSAqIENMT0NLczoKLSAqIERTU19MNF9JQ0xLLCBEU1NfTDNfSUNMSywKLSAqIERTU19DTEsxLCBEU1NfQ0xLMiwgRFNTXzU0TUh6X0NMSwotICoKLSAqIERTUyBpcyBib3RoIGluaXRpYXRvciBhbmQgdGFyZ2V0LgotICovCi0vKiBYWFggQWRkIFJBVEVfTk9UX1ZBTElEQVRFRCAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRzczFfZmNrX3N5c19yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNzMV9mY2tfY29yZV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSA1LCAudmFsID0gNSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB9LAotCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0WFggfSwKLQl7IC5kaXYgPSA5LCAudmFsID0gOSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMTIsIC52YWwgPSAxMiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIH0sCi0JeyAuZGl2ID0gMTYsIC52YWwgPSAxNiwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3MxX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLCAgLnJhdGVzID0gZHNzMV9mY2tfc3lzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IGRzczFfZmNrX2NvcmVfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3NfaWNrID0gewkJLyogRW5hYmxlcyBib3RoIEwzLEw0IElDTEsncyAqLwotCS5uYW1lCQk9ICJkc3NfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZsNF9jaywJLyogcmVhbGx5IGJvdGggbDMgYW5kIGw0ICovCi0JLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9EU1MxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3MxX2ZjayA9IHsKLQkubmFtZQkJPSAiZHNzMV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJmNvcmVfY2ssCQkvKiBDb3JlIG9yIHN5cyAqLwotCS5mbGFncwkJPSBERUxBWUVEX0FQUCwKLQkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0RTUzFfU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0RTUzFfTUFTSywKLQkuY2xrc2VsCQk9IGRzczFfZmNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZHNzMl9mY2tfc3lzX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkc3MyX2Zja180OG1fcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8yNFhYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkc3MyX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgIC5yYXRlcyA9IGRzczJfZmNrX3N5c19yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZmdW5jXzQ4bV9jaywgLnJhdGVzID0gZHNzMl9mY2tfNDhtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkc3MyX2ZjayA9IHsJCS8qIEFsdCBjbGsgdXNlZCBpbiBwb3dlciBtYW5hZ2VtZW50ICovCi0JLm5hbWUJCT0gImRzczJfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCQkvKiBmaXhlZCBhdCBzeXNfY2sgb3IgNDhNSHogKi8KLQkuZmxhZ3MJCT0gREVMQVlFRF9BUFAsCi0JLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9EU1MyX1NISUZULAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9EU1MyX01BU0ssCi0JLmNsa3NlbAkJPSBkc3MyX2Zja19jbGtzZWwsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzc181NG1fZmNrID0gewkvKiBBbHQgY2xrIHVzZWQgaW4gcG93ZXIgbWFuYWdlbWVudCAqLwotCS5uYW1lCQk9ICJkc3NfNTRtX2ZjayIsCS8qIDU0bSB0diBjbGsgKi8KLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfNTRtX2NrLAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVFZfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qCi0gKiBDT1JFIHBvd2VyIGRvbWFpbiBJQ0xLICYgRkNMSyBkZWZpbmVzLgotICogTWFueSBvZiB0aGUgdGhlc2UgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBwb3NzaWJsZSBwYXJlbnQuIEVudHJpZXMKLSAqIGhlcmUgd2lsbCBsaWtlbHkgaGF2ZSBhbiBMNCBpbnRlcmZhY2UgcGFyZW50LCBhbmQgbWF5IGhhdmUgbXVsdGlwbGUKLSAqIGZ1bmN0aW9uYWwgY2xvY2sgcGFyZW50cy4KLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBncHRfYWx0X3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMjRYWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb21hcDI0eHhfZ3B0X2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZmdW5jXzMya19jaywgLnJhdGVzID0gZ3B0XzMya19yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgLnJhdGVzID0gZ3B0X3N5c19yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZhbHRfY2ssCSAgLnJhdGVzID0gZ3B0X2FsdF9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfaWNrID0gewotCS5uYW1lCQk9ICJncHQxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDFfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfZmNrID0gewotCS5uYW1lCQk9ICJncHQxX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDFfU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDFfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQyX2ljayA9IHsKLQkubmFtZQkJPSAiZ3B0Ml9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDJfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDJfU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDJfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDNfaWNrID0gewotCS5uYW1lCQk9ICJncHQzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQzX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0M19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUM19TSElGVCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUM19NQVNLLAotCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDRfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDRfZmNrID0gewotCS5uYW1lCQk9ICJncHQ0X2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ0X1NISUZULAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQ0X01BU0ssCi0JLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ1X2ljayA9IHsKLQkubmFtZQkJPSAiZ3B0NV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDVfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDVfU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDVfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDZfaWNrID0gewotCS5uYW1lCQk9ICJncHQ2X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ2X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ2X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0Nl9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUNl9TSElGVCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUNl9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDdfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDdfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDdfZmNrID0gewotCS5uYW1lCQk9ICJncHQ3X2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ3X1NISUZULAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQ3X01BU0ssCi0JLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ4X2ljayA9IHsKLQkubmFtZQkJPSAiZ3B0OF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOF9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDhfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDhfU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDhfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAyNHh4X2dwdF9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDlfaWNrID0gewotCS5uYW1lCQk9ICJncHQ5X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9HUFQ5X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ5X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0OV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUOV9TSElGVCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwyKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMjRYWF9DTEtTRUxfR1BUOV9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfaWNrID0gewotCS5uYW1lCQk9ICJncHQxMF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTBfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEwX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0MTBfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDEwX1NISUZULAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQxMF9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfaWNrID0gewotCS5uYW1lCQk9ICJncHQxMV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTFfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDExX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0MTFfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQVDExX1NISUZULAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDIpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNFhYX0NMS1NFTF9HUFQxMV9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDI0eHhfZ3B0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfaWNrID0gewotCS5uYW1lCQk9ICJncHQxMl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTJfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0MTJfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnNlY3VyZV8zMmtfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fR1BUMTJfU0hJRlQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMMiksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDI0WFhfQ0xLU0VMX0dQVDEyX01BU0ssCi0JLmNsa3NlbAkJPSBvbWFwMjR4eF9ncHRfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDEsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDEsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AyX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNCU1AyX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDMsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1AzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDMsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1AzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A0X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDQsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A0X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDUsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A1X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDUsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNCU1A1X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfaWNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDEsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfZmNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDEsCi0JLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfaWNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkyX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfZmNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTUNTUEkyX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfaWNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDMsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNTUEkzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfZmNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDMsCi0JLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fTUNTUEkzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9pY2sgPSB7Ci0JLm5hbWUJCT0gInVhcnQxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUMV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfZmNrID0gewotCS5uYW1lCQk9ICJ1YXJ0MV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDFfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ljayA9IHsKLQkubmFtZQkJPSAidWFydDJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQyX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9mY2sgPSB7Ci0JLm5hbWUJCT0gInVhcnQyX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9VQVJUMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfaWNrID0gewotCS5uYW1lCQk9ICJ1YXJ0M19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fVUFSVDNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2ZjayA9IHsKLQkubmFtZQkJPSAidWFydDNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VBUlQzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncGlvc19pY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW9zX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncGlvc19mY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW9zX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0dQSU9TX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtcHVfd2R0X2ljayA9IHsKLQkubmFtZQkJPSAibXB1X3dkdF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NUFVfV0RUX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtcHVfd2R0X2ZjayA9IHsKLQkubmFtZQkJPSAibXB1X3dkdF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NUFVfV0RUX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzeW5jXzMya19pY2sgPSB7Ci0JLm5hbWUJCT0gInN5bmNfMzJrX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl8zMktTWU5DX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB3ZHQxX2ljayA9IHsKLQkubmFtZQkJPSAid2R0MV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9XRFQxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBvbWFwY3RybF9pY2sgPSB7Ci0JLm5hbWUJCT0gIm9tYXBjdHJsX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9PTUFQQ1RSTF9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaWNyX2ljayA9IHsKLQkubmFtZQkJPSAiaWNyX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0lDUl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2FtX2ljayA9IHsKLQkubmFtZQkJPSAiY2FtX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fQ0FNX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKgotICogY2FtX2ZjayBjb250cm9scyBib3RoIENBTV9NQ0xLIGFuZCBDQU1fRkNMSy4gIEl0IHNob3VsZCBwcm9iYWJseSBiZQotICogc3BsaXQgaW50byB0d28gc2VwYXJhdGUgY2xvY2tzLCBzaW5jZSB0aGUgcGFyZW50IGNsb2NrcyBhcmUgZGlmZmVyZW50Ci0gKiBhbmQgdGhlIGNsb2NrZG9tYWlucyBhcmUgYWxzbyBkaWZmZXJlbnQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9mY2sgPSB7Ci0JLm5hbWUJCT0gImNhbV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0NBTV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWFpbGJveGVzX2ljayA9IHsKLQkubmFtZQkJPSAibWFpbGJveGVzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NQUlMQk9YRVNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDRfaWNrID0gewotCS5uYW1lCQk9ICJ3ZHQ0X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9XRFQ0X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB3ZHQ0X2ZjayA9IHsKLQkubmFtZQkJPSAid2R0NF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY18zMmtfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fV0RUNF9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgd2R0M19pY2sgPSB7Ci0JLm5hbWUJCT0gIndkdDNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX1dEVDNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfZmNrID0gewotCS5uYW1lCQk9ICJ3ZHQzX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9XRFQzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtc3Byb19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1zcHJvX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9NU1BST19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbXNwcm9fZmNrID0gewotCS5uYW1lCQk9ICJtc3Byb19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fTVNQUk9fU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fTU1DX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtbWNfZmNrID0gewotCS5uYW1lCQk9ICJtbWNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX01NQ19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZmFjX2ljayA9IHsKLQkubmFtZQkJPSAiZmFjX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9GQUNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGZhY19mY2sgPSB7Ci0JLm5hbWUJCT0gImZhY19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fRkFDX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBlYWNfaWNrID0gewotCS5uYW1lCQk9ICJlYWNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX0VBQ19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZWFjX2ZjayA9IHsKLQkubmFtZQkJPSAiZWFjX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9FQUNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGhkcV9pY2sgPSB7Ci0JLm5hbWUJCT0gImhkcV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fSERRX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBoZHFfZmNrID0gewotCS5uYW1lCQk9ICJoZHFfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMTJtX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX0hEUV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9pY2sgPSB7Ci0JLm5hbWUJCT0gImkyY19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9mY2sgPSB7Ci0JLm5hbWUJCT0gImkyY19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmZnVuY18xMm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MjBfRU5fSTJDMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjaHMyX2ZjayA9IHsKLQkubmFtZQkJPSAiaTJjX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyNDMwX2kyY2hzX3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0ZDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fSTJDSFMyX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpMmMxX2ljayA9IHsKLQkubmFtZQkJPSAiaTJjX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMSwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JMkMxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpMmMxX2ZjayA9IHsKLQkubmFtZQkJPSAiaTJjX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMSwKLQkucGFyZW50CQk9ICZmdW5jXzEybV9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9JMkMxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpMmNoczFfZmNrID0gewotCS5uYW1lCQk9ICJpMmNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDI0MzBfaTJjaHNfd2FpdCwKLQkuaWQJCT0gMSwKLQkucGFyZW50CQk9ICZmdW5jXzk2bV9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9JMkNIUzFfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwbWNfZmNrID0gewotCS5uYW1lCQk9ICJncG1jX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KLQkucGFyZW50CQk9ICZjb3JlX2wzX2NrLAotCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2RtYV9mY2sgPSB7Ci0JLm5hbWUJCT0gInNkbWFfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLwotCS5wYXJlbnQJCT0gJmNvcmVfbDNfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNkbWFfaWNrID0gewotCS5uYW1lCQk9ICJzZG1hX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsIC8qIFJNSzogbWlzc2luZz8gKi8KLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdmx5bnFfaWNrID0gewotCS5uYW1lCQk9ICJ2bHlucV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQyMF9FTl9WTFlOUV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSB2bHlucV9mY2tfOTZtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSB2bHlucV9mY2tfY29yZV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCi0JeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8yNDJYIH0sCi0JeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMjQyWCB9LAotCXsgLmRpdiA9IDksIC52YWwgPSA5LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSAxNiwgLnZhbCA9IDE2LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAxOCwgLnZhbCA9IDE4LCAuZmxhZ3MgPSBSQVRFX0lOXzI0MlggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHZseW5xX2Zja19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZnVuY185Nm1fY2ssIC5yYXRlcyA9IHZseW5xX2Zja185Nm1fcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmY29yZV9jaywJICAucmF0ZXMgPSB2bHlucV9mY2tfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdmx5bnFfZmNrID0gewotCS5uYW1lCQk9ICJ2bHlucV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZnVuY185Nm1fY2ssCi0JLmZsYWdzCQk9IERFTEFZRURfQVBQLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDIwX0VOX1ZMWU5RX1NISUZULAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyNDIwX0NMS1NFTF9WTFlOUV9NQVNLLAotCS5jbGtzZWwJCT0gdmx5bnFfZmNrX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNkcmNfaWNrID0gewotCS5uYW1lCQk9ICJzZHJjX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjMpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fU0RSQ19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZGVzX2ljayA9IHsKLQkubmFtZQkJPSAiZGVzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9ERVNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNoYV9pY2sgPSB7Ci0JLm5hbWUJCT0gInNoYV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fU0hBX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBybmdfaWNrID0gewotCS5uYW1lCQk9ICJybmdfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9JQ0xLRU40KSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1JOR19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYWVzX2ljayA9IHsKLQkubmFtZQkJPSAiYWVzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fSUNMS0VONCksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjRYWF9FTl9BRVNfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBrYV9pY2sgPSB7Ci0JLm5hbWUJCT0gInBrYV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyNFhYX0NNX0lDTEtFTjQpLAotCS5lbmFibGVfYml0CT0gT01BUDI0WFhfRU5fUEtBX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2JfZmNrID0gewotCS5uYW1lCQk9ICJ1c2JfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfNDhtX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNFhYX0VOX1VTQl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiaHNfaWNrID0gewotCS5uYW1lCQk9ICJ1c2Joc19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9sM19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9VU0JIU19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMxX2ljayA9IHsKLQkubmFtZQkJPSAibW1jaHNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMxX2ZjayA9IHsKLQkubmFtZQkJPSAibW1jaHNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ljayA9IHsKLQkubmFtZQkJPSAibW1jaHNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ZjayA9IHsKLQkubmFtZQkJPSAibW1jaHNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX01NQ0hTMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfaWNrID0gewotCS5uYW1lCQk9ICJncGlvNV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDRfY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDI0MzBfRU5fR1BJTzVfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW81X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3BpbzVfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmZ1bmNfMzJrX2NrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMjRYWF9DTV9GQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAyNDMwX0VOX0dQSU81X1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtZG1faW50Y19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1kbV9pbnRjX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NRE1fSU5UQ19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHNkYjFfZmNrID0gewotCS5uYW1lCQk9ICJtbWNoc2RiX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIU0RCMV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHNkYjJfZmNrID0gewotCS5uYW1lCQk9ICJtbWNoc2RiX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMSwKLQkucGFyZW50CQk9ICZmdW5jXzMya19jaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDI0WFhfQ01fRkNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMjQzMF9FTl9NTUNIU0RCMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyoKLSAqIFRoaXMgY2xvY2sgaXMgYSBjb21wb3NpdGUgY2xvY2sgd2hpY2ggZG9lcyBlbnRpcmUgc2V0IGNoYW5nZXMgdGhlbgotICogZm9yY2VzIGEgcmViYWxhbmNlLiBJdCBrZXlzIG9uIHRoZSBNUFUgc3BlZWQsIGJ1dCBpdCByZWFsbHkgY291bGQKLSAqIGJlIGFueSBrZXkgc3BlZWQgcGFydCBvZiBhIHNldCBpbiB0aGUgcmF0ZSB0YWJsZS4KLSAqCi0gKiB0byByZWFsbHkgY2hhbmdlIGEgc2V0LCB5b3UgbmVlZCBtZW1vcnkgdGFibGUgc2V0cyB3aGljaCBnZXQgY2hhbmdlZAotICogaW4gc3JhbSwgcHJlLW5vdGlmaWVycyAmIHBvc3Qgbm90aWZpZXJzLCBjaGFuZ2luZyB0aGUgdG9wIHNldCwgd2l0aG91dAotICogaGF2aW5nIGxvdyBsZXZlbCBkaXNwbGF5IHJlY2FsYydzIHdvbid0IHdvcmsuLi4gdGhpcyBpcyB3aHkgZHBtIG5vdGlmaWVycwotICogd29yaywgaXNyJ3Mgb2ZmLCB3YWxrIGEgbGlzdCBvZiBjbG9ja3MgYWxyZWFkeSBfb2ZmXyBhbmQgbm90IG1lc3Npbmcgd2l0aAotICogdGhlIGJ1cy4KLSAqCi0gKiBUaGlzIGNsb2NrIHNob3VsZCBoYXZlIG5vIHBhcmVudC4gSXQgZW1ib2RpZXMgdGhlIGVudGlyZSB1cHBlciBsZXZlbAotICogYWN0aXZlIHNldC4gQSBwYXJlbnQgd2lsbCBtZXNzIHVwIHNvbWUgb2YgdGhlIGluaXQgYWxzby4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgdmlydF9wcmNtX3NldCA9IHsKLQkubmFtZQkJPSAidmlydF9wcmNtX3NldCIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLmZsYWdzCQk9IERFTEFZRURfQVBQLAotCS5wYXJlbnQJCT0gJm1wdV9jaywJLyogSW5kZXhlZCBieSBtcHUgc3BlZWQsIG5vIHBhcmVudCAqLwotCS5yZWNhbGMJCT0gJm9tYXAyX3RhYmxlX21wdV9yZWNhbGMsCS8qIHNldHMgYXJlIGtleWVkIG9uIG1wdSByYXRlICovCi0JLnNldF9yYXRlCT0gJm9tYXAyX3NlbGVjdF90YWJsZV9yYXRlLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX3JvdW5kX3RvX3RhYmxlX3JhdGUsCi19OwotCi0KLS8qCi0gKiBjbGtkZXYgaW50ZWdyYXRpb24KLSAqLwotCi1zdGF0aWMgc3RydWN0IG9tYXBfY2xrIG9tYXAyNHh4X2Nsa3NbXSA9IHsKLQkvKiBleHRlcm5hbCByb290IHNvdXJjZXMgKi8KLQlDTEsoTlVMTCwJImZ1bmNfMzJrX2NrIiwJJmZ1bmNfMzJrX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJzZWN1cmVfMzJrX2NrIiwgJnNlY3VyZV8zMmtfY2ssIENLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJIm9zY19jayIsCSZvc2NfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInN5c19jayIsCSZzeXNfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImFsdF9jayIsCSZhbHRfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQkvKiBpbnRlcm5hbCBhbmFsb2cgc291cmNlcyAqLwotCUNMSyhOVUxMLAkiZHBsbF9jayIsCSZkcGxsX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJhcGxsOTZfY2siLAkmYXBsbDk2X2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJhcGxsNTRfY2siLAkmYXBsbDU0X2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JLyogaW50ZXJuYWwgcHJjbSByb290IHNvdXJjZXMgKi8KLQlDTEsoTlVMTCwJImZ1bmNfNTRtX2NrIiwJJmZ1bmNfNTRtX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJjb3JlX2NrIiwJJmNvcmVfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImZ1bmNfOTZtX2NrIiwJJmZ1bmNfOTZtX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJmdW5jXzQ4bV9jayIsCSZmdW5jXzQ4bV9jaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZnVuY18xMm1fY2siLAkmZnVuY18xMm1fY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImNrX3dkdDFfb3NjIiwJJndkdDFfb3NjX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJzeXNfY2xrb3V0X3NyYyIsICZzeXNfY2xrb3V0X3NyYywgQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkic3lzX2Nsa291dCIsCSZzeXNfY2xrb3V0LAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJzeXNfY2xrb3V0Ml9zcmMiLCAmc3lzX2Nsa291dDJfc3JjLCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInN5c19jbGtvdXQyIiwJJnN5c19jbGtvdXQyLAlDS18yNDJYKSwKLQlDTEsoTlVMTCwJImVtdWxfY2siLAkmZW11bF9jaywJQ0tfMjQyWCksCi0JLyogbXB1IGRvbWFpbiBjbG9ja3MgKi8KLQlDTEsoTlVMTCwJIm1wdV9jayIsCSZtcHVfY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQkvKiBkc3AgZG9tYWluIGNsb2NrcyAqLwotCUNMSyhOVUxMLAkiZHNwX2ZjayIsCSZkc3BfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJkc3BfaXJhdGVfaWNrIiwgJmRzcF9pcmF0ZV9pY2ssIENLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImRzcF9pY2siLAkmZHNwX2ljaywJQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJpdmEyXzFfaWNrIiwJJml2YTJfMV9pY2ssCUNLXzI0M1gpLAotCUNMSyhOVUxMLAkiaXZhMV9pZmNrIiwJJml2YTFfaWZjaywJQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJpdmExX21wdV9pbnRfaWZjayIsICZpdmExX21wdV9pbnRfaWZjaywgQ0tfMjQyWCksCi0JLyogR0ZYIGRvbWFpbiBjbG9ja3MgKi8KLQlDTEsoTlVMTCwJImdmeF8zZF9mY2siLAkmZ2Z4XzNkX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ2Z4XzJkX2ZjayIsCSZnZnhfMmRfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJnZnhfaWNrIiwJJmdmeF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQkvKiBNb2RlbSBkb21haW4gY2xvY2tzICovCi0JQ0xLKE5VTEwsCSJtZG1faWNrIiwJJm1kbV9pY2ssCUNLXzI0M1gpLAotCUNMSyhOVUxMLAkibWRtX29zY19jayIsCSZtZG1fb3NjX2NrLAlDS18yNDNYKSwKLQkvKiBEU1MgZG9tYWluIGNsb2NrcyAqLwotCUNMSygib21hcGRzcyIsCSJpY2siLAkJJmRzc19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXBkc3MiLAkiZHNzMV9mY2siLAkmZHNzMV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXBkc3MiLAkiZHNzMl9mY2siLAkmZHNzMl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXBkc3MiLAkidHZfZmNrIiwJJmRzc181NG1fZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JLyogTDMgZG9tYWluIGNsb2NrcyAqLwotCUNMSyhOVUxMLAkiY29yZV9sM19jayIsCSZjb3JlX2wzX2NrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJzc2lfZmNrIiwJJnNzaV9zc3Jfc3N0X2ZjaywgQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkidXNiX2w0X2ljayIsCSZ1c2JfbDRfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JLyogTDQgZG9tYWluIGNsb2NrcyAqLwotCUNMSyhOVUxMLAkibDRfY2siLAkmbDRfY2ssCQlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJzc2lfbDRfaWNrIiwJJnNzaV9sNF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQkvKiB2aXJ0dWFsIG1ldGEtZ3JvdXAgY2xvY2sgKi8KLQlDTEsoTlVMTCwJInZpcnRfcHJjbV9zZXQiLCAmdmlydF9wcmNtX3NldCwgQ0tfMjQzWCB8IENLXzI0MlgpLAotCS8qIGdlbmVyYWwgbDQgaW50ZXJmYWNlIGNrLCBtdWx0aS1wYXJlbnQgZnVuY3Rpb25hbCBjbGsgKi8KLQlDTEsoTlVMTCwJImdwdDFfaWNrIiwJJmdwdDFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJncHQxX2ZjayIsCSZncHQxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ3B0Ml9pY2siLAkmZ3B0Ml9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDJfZmNrIiwJJmdwdDJfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJncHQzX2ljayIsCSZncHQzX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ3B0M19mY2siLAkmZ3B0M19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDRfaWNrIiwJJmdwdDRfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJncHQ0X2ZjayIsCSZncHQ0X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ3B0NV9pY2siLAkmZ3B0NV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDVfZmNrIiwJJmdwdDVfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJncHQ2X2ljayIsCSZncHQ2X2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ3B0Nl9mY2siLAkmZ3B0Nl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDdfaWNrIiwJJmdwdDdfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJncHQ3X2ZjayIsCSZncHQ3X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ3B0OF9pY2siLAkmZ3B0OF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDhfZmNrIiwJJmdwdDhfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJncHQ5X2ljayIsCSZncHQ5X2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkiZ3B0OV9mY2siLAkmZ3B0OV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDEwX2ljayIsCSZncHQxMF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDEwX2ZjayIsCSZncHQxMF9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDExX2ljayIsCSZncHQxMV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDExX2ZjayIsCSZncHQxMV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDEyX2ljayIsCSZncHQxMl9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwdDEyX2ZjayIsCSZncHQxMl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXAtbWNic3AuMSIsICJpY2siLAkmbWNic3AxX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcC1tY2JzcC4xIiwgImZjayIsCSZtY2JzcDFfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjIiLCAiaWNrIiwJJm1jYnNwMl9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXAtbWNic3AuMiIsICJmY2siLAkmbWNic3AyX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcC1tY2JzcC4zIiwgImljayIsCSZtY2JzcDNfaWNrLAlDS18yNDNYKSwKLQlDTEsoIm9tYXAtbWNic3AuMyIsICJmY2siLAkmbWNic3AzX2ZjaywJQ0tfMjQzWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjQiLCAiaWNrIiwJJm1jYnNwNF9pY2ssCUNLXzI0M1gpLAotCUNMSygib21hcC1tY2JzcC40IiwgImZjayIsCSZtY2JzcDRfZmNrLAlDS18yNDNYKSwKLQlDTEsoIm9tYXAtbWNic3AuNSIsICJpY2siLAkmbWNic3A1X2ljaywJQ0tfMjQzWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjUiLCAiZmNrIiwJJm1jYnNwNV9mY2ssCUNLXzI0M1gpLAotCUNMSygib21hcDJfbWNzcGkuMSIsICJpY2siLAkmbWNzcGkxX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcDJfbWNzcGkuMSIsICJmY2siLAkmbWNzcGkxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcDJfbWNzcGkuMiIsICJpY2siLAkmbWNzcGkyX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcDJfbWNzcGkuMiIsICJmY2siLAkmbWNzcGkyX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcDJfbWNzcGkuMyIsICJpY2siLAkmbWNzcGkzX2ljaywJQ0tfMjQzWCksCi0JQ0xLKCJvbWFwMl9tY3NwaS4zIiwgImZjayIsCSZtY3NwaTNfZmNrLAlDS18yNDNYKSwKLQlDTEsoTlVMTCwJInVhcnQxX2ljayIsCSZ1YXJ0MV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInVhcnQxX2ZjayIsCSZ1YXJ0MV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInVhcnQyX2ljayIsCSZ1YXJ0Ml9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInVhcnQyX2ZjayIsCSZ1YXJ0Ml9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInVhcnQzX2ljayIsCSZ1YXJ0M19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInVhcnQzX2ZjayIsCSZ1YXJ0M19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwaW9zX2ljayIsCSZncGlvc19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImdwaW9zX2ZjayIsCSZncGlvc19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXBfd2R0IiwJImljayIsCQkmbXB1X3dkdF9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXBfd2R0IiwJImZjayIsCQkmbXB1X3dkdF9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInN5bmNfMzJrX2ljayIsCSZzeW5jXzMya19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJIndkdDFfaWNrIiwJJndkdDFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJvbWFwY3RybF9pY2siLAkmb21hcGN0cmxfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJpY3JfaWNrIiwJJmljcl9pY2ssCUNLXzI0M1gpLAotCUNMSygib21hcDI0eHhjYW0iLCAiZmNrIiwJJmNhbV9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm9tYXAyNHh4Y2FtIiwgImljayIsCSZjYW1faWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJtYWlsYm94ZXNfaWNrIiwgJm1haWxib3hlc19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJIndkdDRfaWNrIiwJJndkdDRfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJ3ZHQ0X2ZjayIsCSZ3ZHQ0X2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkid2R0M19pY2siLAkmd2R0M19pY2ssCUNLXzI0MlgpLAotCUNMSyhOVUxMLAkid2R0M19mY2siLAkmd2R0M19mY2ssCUNLXzI0MlgpLAotCUNMSyhOVUxMLAkibXNwcm9faWNrIiwJJm1zcHJvX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkibXNwcm9fZmNrIiwJJm1zcHJvX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygibW1jaS1vbWFwLjAiLCAiaWNrIiwJJm1tY19pY2ssCUNLXzI0MlgpLAotCUNMSygibW1jaS1vbWFwLjAiLCAiZmNrIiwJJm1tY19mY2ssCUNLXzI0MlgpLAotCUNMSyhOVUxMLAkiZmFjX2ljayIsCSZmYWNfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJmYWNfZmNrIiwJJmZhY19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImVhY19pY2siLAkmZWFjX2ljaywJQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJlYWNfZmNrIiwJJmVhY19mY2ssCUNLXzI0MlgpLAotCUNMSygib21hcF9oZHEuMCIsICJpY2siLAkmaGRxX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygib21hcF9oZHEuMSIsICJmY2siLAkmaGRxX2ZjaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSygiaTJjX29tYXAuMSIsICJpY2siLAkmaTJjMV9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoImkyY19vbWFwLjEiLCAiZmNrIiwJJmkyYzFfZmNrLAlDS18yNDJYKSwKLQlDTEsoImkyY19vbWFwLjEiLCAiZmNrIiwJJmkyY2hzMV9mY2ssCUNLXzI0M1gpLAotCUNMSygiaTJjX29tYXAuMiIsICJpY2siLAkmaTJjMl9pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoImkyY19vbWFwLjIiLCAiZmNrIiwJJmkyYzJfZmNrLAlDS18yNDJYKSwKLQlDTEsoImkyY19vbWFwLjIiLCAiZmNrIiwJJmkyY2hzMl9mY2ssCUNLXzI0M1gpLAotCUNMSyhOVUxMLAkiZ3BtY19mY2siLAkmZ3BtY19mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJInNkbWFfZmNrIiwJJnNkbWFfZmNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJzZG1hX2ljayIsCSZzZG1hX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkidmx5bnFfaWNrIiwJJnZseW5xX2ljaywJQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJ2bHlucV9mY2siLAkmdmx5bnFfZmNrLAlDS18yNDJYKSwKLQlDTEsoTlVMTCwJInNkcmNfaWNrIiwJJnNkcmNfaWNrLAlDS18yNDNYKSwKLQlDTEsoTlVMTCwJImRlc19pY2siLAkmZGVzX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkic2hhX2ljayIsCSZzaGFfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKCJvbWFwX3JuZyIsCSJpY2siLAkJJnJuZ19pY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoTlVMTCwJImFlc19pY2siLAkmYWVzX2ljaywJQ0tfMjQzWCB8IENLXzI0MlgpLAotCUNMSyhOVUxMLAkicGthX2ljayIsCSZwa2FfaWNrLAlDS18yNDNYIHwgQ0tfMjQyWCksCi0JQ0xLKE5VTEwsCSJ1c2JfZmNrIiwJJnVzYl9mY2ssCUNLXzI0M1ggfCBDS18yNDJYKSwKLQlDTEsoIm11c2JfaGRyYyIsCSJpY2siLAkmdXNiaHNfaWNrLAlDS18yNDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4wIiwgImljayIsCSZtbWNoczFfaWNrLAlDS18yNDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4wIiwgImZjayIsCSZtbWNoczFfZmNrLAlDS18yNDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4xIiwgImljayIsCSZtbWNoczJfaWNrLAlDS18yNDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4xIiwgImZjayIsCSZtbWNoczJfZmNrLAlDS18yNDNYKSwKLQlDTEsoTlVMTCwJImdwaW81X2ljayIsCSZncGlvNV9pY2ssCUNLXzI0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzVfZmNrIiwJJmdwaW81X2ZjaywJQ0tfMjQzWCksCi0JQ0xLKE5VTEwsCSJtZG1faW50Y19pY2siLAkmbWRtX2ludGNfaWNrLAlDS18yNDNYKSwKLQlDTEsoIm1tY2ktb21hcC1ocy4wIiwgIm1tY2hzZGJfZmNrIiwJJm1tY2hzZGIxX2ZjaywJQ0tfMjQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMSIsICJtbWNoc2RiX2ZjayIsIAkmbW1jaHNkYjJfZmNrLAlDS18yNDNYKSwKLX07Ci0KLS8qCi0gKiBpbml0IGNvZGUKLSAqLwotCi1pbnQgX19pbml0IG9tYXAyX2Nsa19pbml0KHZvaWQpCi17Ci0JY29uc3Qgc3RydWN0IHByY21fY29uZmlnICpwcmNtOwotCXN0cnVjdCBvbWFwX2NsayAqYzsKLQl1MzIgY2xrcmF0ZTsKLQl1MTYgY3B1X2Nsa2ZsZzsKLQotCWlmIChjcHVfaXNfb21hcDI0MngoKSkgewotCQlwcmNtX2Nsa3NyY19jdHJsID0gT01BUDI0MjBfUFJDTV9DTEtTUkNfQ1RSTDsKLQkJY3B1X21hc2sgPSBSQVRFX0lOXzI0Mlg7Ci0JCWNwdV9jbGtmbGcgPSBDS18yNDJYOwotCQlyYXRlX3RhYmxlID0gb21hcDI0MjBfcmF0ZV90YWJsZTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMjQzMCgpKSB7Ci0JCXByY21fY2xrc3JjX2N0cmwgPSBPTUFQMjQzMF9QUkNNX0NMS1NSQ19DVFJMOwotCQljcHVfbWFzayA9IFJBVEVfSU5fMjQzWDsKLQkJY3B1X2Nsa2ZsZyA9IENLXzI0M1g7Ci0JCXJhdGVfdGFibGUgPSBvbWFwMjQzMF9yYXRlX3RhYmxlOwotCX0KLQotCWNsa19pbml0KCZvbWFwMl9jbGtfZnVuY3Rpb25zKTsKLQotCWZvciAoYyA9IG9tYXAyNHh4X2Nsa3M7IGMgPCBvbWFwMjR4eF9jbGtzICsgQVJSQVlfU0laRShvbWFwMjR4eF9jbGtzKTsgYysrKQotCQljbGtfcHJlaW5pdChjLT5say5jbGspOwotCi0Jb3NjX2NrLnJhdGUgPSBvbWFwMl9vc2NfY2xrX3JlY2FsYygmb3NjX2NrKTsKLQlwcm9wYWdhdGVfcmF0ZSgmb3NjX2NrKTsKLQlzeXNfY2sucmF0ZSA9IG9tYXAyX3N5c19jbGtfcmVjYWxjKCZzeXNfY2spOwotCXByb3BhZ2F0ZV9yYXRlKCZzeXNfY2spOwotCi0JZm9yIChjID0gb21hcDI0eHhfY2xrczsgYyA8IG9tYXAyNHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAyNHh4X2Nsa3MpOyBjKyspCi0JCWlmIChjLT5jcHUgJiBjcHVfY2xrZmxnKSB7Ci0JCQljbGtkZXZfYWRkKCZjLT5sayk7Ci0JCQljbGtfcmVnaXN0ZXIoYy0+bGsuY2xrKTsKLQkJCW9tYXAyX2luaXRfY2xrX2Nsa2RtKGMtPmxrLmNsayk7Ci0JCX0KLQotCS8qIENoZWNrIHRoZSBNUFUgcmF0ZSBzZXQgYnkgYm9vdGxvYWRlciAqLwotCWNsa3JhdGUgPSBvbWFwMnh4eF9jbGtfZ2V0X2NvcmVfcmF0ZSgmZHBsbF9jayk7Ci0JZm9yIChwcmNtID0gcmF0ZV90YWJsZTsgcHJjbS0+bXB1X3NwZWVkOyBwcmNtKyspIHsKLQkJaWYgKCEocHJjbS0+ZmxhZ3MgJiBjcHVfbWFzaykpCi0JCQljb250aW51ZTsKLQkJaWYgKHByY20tPnh0YWxfc3BlZWQgIT0gc3lzX2NrLnJhdGUpCi0JCQljb250aW51ZTsKLQkJaWYgKHByY20tPmRwbGxfc3BlZWQgPD0gY2xrcmF0ZSkKLQkJCWJyZWFrOwotCX0KLQljdXJyX3ByY21fc2V0ID0gcHJjbTsKLQotCXJlY2FsY3VsYXRlX3Jvb3RfY2xvY2tzKCk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJDbG9ja2luZyByYXRlIChDcnlzdGFsL0RQTEwvTVBVKTogIgotCSAgICAgICAiJWxkLiUwMWxkLyVsZC8lbGQgTUh6XG4iLAotCSAgICAgICAoc3lzX2NrLnJhdGUgLyAxMDAwMDAwKSwgKHN5c19jay5yYXRlIC8gMTAwMDAwKSAlIDEwLAotCSAgICAgICAoZHBsbF9jay5yYXRlIC8gMTAwMDAwMCksIChtcHVfY2sucmF0ZSAvIDEwMDAwMDApKSA7Ci0KLQkvKgotCSAqIE9ubHkgZW5hYmxlIHRob3NlIGNsb2NrcyB3ZSB3aWxsIG5lZWQsIGxldCB0aGUgZHJpdmVycwotCSAqIGVuYWJsZSBvdGhlciBjbG9ja3MgYXMgbmVjZXNzYXJ5Ci0JICovCi0JY2xrX2VuYWJsZV9pbml0X2Nsb2NrcygpOwotCi0JLyogQXZvaWQgc2xlZXBpbmcgc2xlZXBpbmcgZHVyaW5nIG9tYXAyX2Nsa19wcmVwYXJlX2Zvcl9yZWJvb3QoKSAqLwotCXZjbGsgPSBjbGtfZ2V0KE5VTEwsICJ2aXJ0X3ByY21fc2V0Iik7Ci0Jc2NsayA9IGNsa19nZXQoTlVMTCwgInN5c19jayIpOwotCWRjbGsgPSBjbGtfZ2V0KE5VTEwsICJkcGxsX2NrIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmMKaW5kZXggZDQyMTdiOS4uNmZlYmQ1ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5jCkBAIC0yLDEzICsyLDE0IEBACiAgKiBPTUFQMy1zcGVjaWZpYyBjbG9jayBmcmFtZXdvcmsgZnVuY3Rpb25zCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKLSAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQotICogVGVzdGluZyBhbmQgaW50ZWdyYXRpb24gZml4ZXMgYnkgSm91bmkgSMO2Z2FuZGVyCisgKiBQYXVsIFdhbG1zbGV5CisgKiBKb3VuaSBIw7ZnYW5kZXIKICAqCiAgKiBQYXJ0cyBvZiB0aGlzIGNvZGUgYXJlIGJhc2VkIG9uIGNvZGUgd3JpdHRlbiBieQotICogUmljaGFyZCBXb29kcnVmZiwgVG9ueSBMaW5kZ3JlbiwgVHV1a2thIFRpa2thbmVuLCBLYXJ0aGlrIERhc3UKKyAqIFJpY2hhcmQgV29vZHJ1ZmYsIFRvbnkgTGluZGdyZW4sIFR1dWtrYSBUaWtrYW5lbiwgS2FydGhpayBEYXN1LAorICogUnVzc2VsbCBLaW5nCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xNiw0OSArMTcsMjMgQEAKICAqLwogI3VuZGVmIERFQlVHCiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvbGltaXRzLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAKLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KLSNpbmNsdWRlIDxwbGF0L3NyYW0uaD4KLSNpbmNsdWRlIDxwbGF0L3NkcmMuaD4KLSNpbmNsdWRlIDxhc20vZGl2NjQuaD4KLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CiAKICNpbmNsdWRlICJjbG9jay5oIgogI2luY2x1ZGUgImNsb2NrMzR4eC5oIgotI2luY2x1ZGUgInNkcmMuaCIKLSNpbmNsdWRlICJwcm0uaCIKLSNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCiAjaW5jbHVkZSAiY20uaCIKICNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKIAotI2RlZmluZSBDWUNMRVNfUEVSX01IWgkJCTEwMDAwMDAKLQotLyoKLSAqIERQTEw1X0ZSRVFfRk9SX1VTQkhPU1Q6IFVTQkhPU1QgYW5kIFVTQlRMTCBhcmUgdGhlIG9ubHkgY2xvY2tzCi0gKiB0aGF0IGFyZSBzb3VyY2VkIGJ5IERQTEw1LCBhbmQgYm90aCBvZiB0aGVzZSByZXF1aXJlIHRoaXMgY2xvY2sKLSAqIHRvIGJlIGF0IDEyMCBNSHogZm9yIHByb3BlciBvcGVyYXRpb24uCi0gKi8KLSNkZWZpbmUgRFBMTDVfRlJFUV9GT1JfVVNCSE9TVAkJMTIwMDAwMDAwCi0KLS8qIG5lZWRlZCBieSBvbWFwM19jb3JlX2RwbGxfbTJfc2V0X3JhdGUoKSAqLwotc3RydWN0IGNsayAqc2RyY19pY2tfcCwgKmFybV9mY2tfcDsKLQogLyoqCiAgKiBvbWFwMzQzMGVzMl9jbGtfc3NpX2ZpbmRfaWRsZXN0IC0gcmV0dXJuIENNX0lETEVTVCBpbmZvIGZvciBTU0kKICAqIEBjbGs6IHN0cnVjdCBjbGsgKiBiZWluZyBlbmFibGVkCiAgKiBAaWRsZXN0X3JlZzogdm9pZCBfX2lvbWVtICoqIHRvIHN0b3JlIENNX0lETEVTVCByZWcgYWRkcmVzcyBpbnRvCiAgKiBAaWRsZXN0X2JpdDogcG9pbnRlciB0byBhIHU4IHRvIHN0b3JlIHRoZSBDTV9JRExFU1QgYml0IHNoaWZ0IGludG8KKyAqIEBpZGxlc3RfdmFsOiBwb2ludGVyIHRvIGEgdTggdG8gc3RvcmUgdGhlIENNX0lETEVTVCBpbmRpY2F0b3IKICAqCiAgKiBUaGUgT01BUDM0MzBFUzIgU1NJIHRhcmdldCBDTV9JRExFU1QgYml0IGlzIGF0IGEgZGlmZmVyZW50IHNoaWZ0CiAgKiBmcm9tIHRoZSBDTV97SSxGfUNMS0VOIGJpdC4gIFBhc3MgYmFjayB0aGUgY29ycmVjdCBpbmZvIHZpYQpAQCAtNjYsMTMgKzQxLDE1IEBACiAgKi8KIHN0YXRpYyB2b2lkIG9tYXAzNDMwZXMyX2Nsa19zc2lfZmluZF9pZGxlc3Qoc3RydWN0IGNsayAqY2xrLAogCQkJCQkgICAgdm9pZCBfX2lvbWVtICoqaWRsZXN0X3JlZywKLQkJCQkJICAgIHU4ICppZGxlc3RfYml0KQorCQkJCQkgICAgdTggKmlkbGVzdF9iaXQsCisJCQkJCSAgICB1OCAqaWRsZXN0X3ZhbCkKIHsKIAl1MzIgcjsKIAogCXIgPSAoKChfX2ZvcmNlIHUzMiljbGstPmVuYWJsZV9yZWcgJiB+MHhmMCkgfCAweDIwKTsKIAkqaWRsZXN0X3JlZyA9IChfX2ZvcmNlIHZvaWQgX19pb21lbSAqKXI7CiAJKmlkbGVzdF9iaXQgPSBPTUFQMzQzMEVTMl9TVF9TU0lfSURMRV9TSElGVDsKKwkqaWRsZXN0X3ZhbCA9IE9NQVAzNFhYX0NNX0lETEVTVF9WQUw7CiB9CiAKIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAzNDMwZXMyX3NzaV93YWl0ID0gewpAQCAtODcsNiArNjQsNyBAQAogICogQGNsazogc3RydWN0IGNsayAqIGJlaW5nIGVuYWJsZWQKICAqIEBpZGxlc3RfcmVnOiB2b2lkIF9faW9tZW0gKiogdG8gc3RvcmUgQ01fSURMRVNUIHJlZyBhZGRyZXNzIGludG8KICAqIEBpZGxlc3RfYml0OiBwb2ludGVyIHRvIGEgdTggdG8gc3RvcmUgdGhlIENNX0lETEVTVCBiaXQgc2hpZnQgaW50bworICogQGlkbGVzdF92YWw6IHBvaW50ZXIgdG8gYSB1OCB0byBzdG9yZSB0aGUgQ01fSURMRVNUIGluZGljYXRvcgogICoKICAqIFNvbWUgT01BUCBtb2R1bGVzIG9uIE9NQVAzIEVTMisgY2hpcHMgaGF2ZSBib3RoIGluaXRpYXRvciBhbmQKICAqIHRhcmdldCBJRExFU1QgYml0cy4gIEZvciBvdXIgcHVycG9zZXMsIHdlIGFyZSBjb25jZXJuZWQgd2l0aCB0aGUKQEAgLTk3LDcgKzc1LDggQEAKICAqLwogc3RhdGljIHZvaWQgb21hcDM0MzBlczJfY2xrX2Rzc191c2Job3N0X2ZpbmRfaWRsZXN0KHN0cnVjdCBjbGsgKmNsaywKIAkJCQkJCSAgICB2b2lkIF9faW9tZW0gKippZGxlc3RfcmVnLAotCQkJCQkJICAgIHU4ICppZGxlc3RfYml0KQorCQkJCQkJICAgIHU4ICppZGxlc3RfYml0LAorCQkJCQkJICAgIHU4ICppZGxlc3RfdmFsKQogewogCXUzMiByOwogCkBAIC0xMDUsNiArODQsNyBAQAogCSppZGxlc3RfcmVnID0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopcjsKIAkvKiBVU0JIT1NUX0lETEUgaGFzIHNhbWUgc2hpZnQgKi8KIAkqaWRsZXN0X2JpdCA9IE9NQVAzNDMwRVMyX1NUX0RTU19JRExFX1NISUZUOworCSppZGxlc3RfdmFsID0gT01BUDM0WFhfQ01fSURMRVNUX1ZBTDsKIH0KIAogY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdCA9IHsKQEAgLTExOSw2ICs5OSw3IEBACiAgKiBAY2xrOiBzdHJ1Y3QgY2xrICogYmVpbmcgZW5hYmxlZAogICogQGlkbGVzdF9yZWc6IHZvaWQgX19pb21lbSAqKiB0byBzdG9yZSBDTV9JRExFU1QgcmVnIGFkZHJlc3MgaW50bwogICogQGlkbGVzdF9iaXQ6IHBvaW50ZXIgdG8gYSB1OCB0byBzdG9yZSB0aGUgQ01fSURMRVNUIGJpdCBzaGlmdCBpbnRvCisgKiBAaWRsZXN0X3ZhbDogcG9pbnRlciB0byBhIHU4IHRvIHN0b3JlIHRoZSBDTV9JRExFU1QgaW5kaWNhdG9yCiAgKgogICogVGhlIE9NQVAzNDMwRVMyIEhTT1RHVVNCIHRhcmdldCBDTV9JRExFU1QgYml0IGlzIGF0IGEgZGlmZmVyZW50CiAgKiBzaGlmdCBmcm9tIHRoZSBDTV97SSxGfUNMS0VOIGJpdC4gIFBhc3MgYmFjayB0aGUgY29ycmVjdCBpbmZvIHZpYQpAQCAtMTI2LDEzICsxMDcsMTUgQEAKICAqLwogc3RhdGljIHZvaWQgb21hcDM0MzBlczJfY2xrX2hzb3RndXNiX2ZpbmRfaWRsZXN0KHN0cnVjdCBjbGsgKmNsaywKIAkJCQkJCSB2b2lkIF9faW9tZW0gKippZGxlc3RfcmVnLAotCQkJCQkJIHU4ICppZGxlc3RfYml0KQorCQkJCQkJIHU4ICppZGxlc3RfYml0LAorCQkJCQkJIHU4ICppZGxlc3RfdmFsKQogewogCXUzMiByOwogCiAJciA9ICgoKF9fZm9yY2UgdTMyKWNsay0+ZW5hYmxlX3JlZyAmIH4weGYwKSB8IDB4MjApOwogCSppZGxlc3RfcmVnID0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopcjsKIAkqaWRsZXN0X2JpdCA9IE9NQVAzNDMwRVMyX1NUX0hTT1RHVVNCX0lETEVfU0hJRlQ7CisJKmlkbGVzdF92YWwgPSBPTUFQMzRYWF9DTV9JRExFU1RfVkFMOwogfQogCiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vbWFwMzQzMGVzMl9oc290Z3VzYl93YWl0ID0gewpAQCAtMTQxLDIxMyArMTI0LDMgQEAKIAkuZmluZF9pZGxlc3QJPSBvbWFwMzQzMGVzMl9jbGtfaHNvdGd1c2JfZmluZF9pZGxlc3QsCiAJLmZpbmRfY29tcGFuaW9uID0gb21hcDJfY2xrX2RmbHRfZmluZF9jb21wYW5pb24sCiB9OwotCi1jb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19ub25jb3JlX2RwbGxfb3BzID0gewotCS5lbmFibGUJCT0gb21hcDNfbm9uY29yZV9kcGxsX2VuYWJsZSwKLQkuZGlzYWJsZQk9IG9tYXAzX25vbmNvcmVfZHBsbF9kaXNhYmxlLAotfTsKLQotaW50IG9tYXAzX2RwbGw0X3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCS8qCi0JICogQWNjb3JkaW5nIHRvIHRoZSAxMi01IENEUCBjb2RlIGZyb20gVEksICJMaW1pdGF0aW9uIDIuNSIKLQkgKiBvbiAzNDMwRVMxIHByZXZlbnRzIHVzIGZyb20gY2hhbmdpbmcgRFBMTCBtdWx0aXBsaWVycyBvciBkaXZpZGVycwotCSAqIG9uIERQTEw0LgotCSAqLwotCWlmIChvbWFwX3JldigpID09IE9NQVAzNDMwX1JFVl9FUzFfMCkgewotCQlwcmludGsoS0VSTl9FUlIgImNsb2NrOiBEUExMNCBjYW5ub3QgY2hhbmdlIHJhdGUgZHVlIHRvICIKLQkJICAgICAgICJzaWxpY29uICdMaW1pdGF0aW9uIDIuNScgb24gMzQzMEVTMS5cbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JcmV0dXJuIG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZShjbGssIHJhdGUpOwotfQotCi0KLS8qCi0gKiBDT1JFIERQTEwgKERQTEwzKSByYXRlIHByb2dyYW1taW5nIGZ1bmN0aW9ucwotICoKLSAqIFRoZXNlIGNhbGwgaW50byBTUkFNIGNvZGUgdG8gZG8gdGhlIGFjdHVhbCBDTSB3cml0ZXMsIHNpbmNlIHRoZSBTRFJBTQotICogaXMgY2xvY2tlZCBmcm9tIERQTEwzLgotICovCi0KLS8qKgotICogb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlIC0gc2V0IENPUkUgRFBMTCBNMiBkaXZpZGVyCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgRFBMTCB0byBzZXQKLSAqIEByYXRlOiByb3VuZGVkIHRhcmdldCByYXRlCi0gKgotICogUHJvZ3JhbSB0aGUgRFBMTCBNMiBkaXZpZGVyIHdpdGggdGhlIHJvdW5kZWQgdGFyZ2V0IHJhdGUuICBSZXR1cm5zCi0gKiAtRUlOVkFMIHVwb24gZXJyb3IsIG9yIDAgdXBvbiBzdWNjZXNzLgotICovCi1pbnQgb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXUzMiBuZXdfZGl2ID0gMDsKLQl1MzIgdW5sb2NrX2RsbCA9IDA7Ci0JdTMyIGM7Ci0JdW5zaWduZWQgbG9uZyB2YWxpZHJhdGUsIHNkcmNyYXRlLCBfbXB1cmF0ZTsKLQlzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqc2RyY19jczA7Ci0Jc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNkcmNfY3MxOwotCWludCByZXQ7Ci0KLQlpZiAoIWNsayB8fCAhcmF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl2YWxpZHJhdGUgPSBvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZV9kaXYoY2xrLCByYXRlLCAmbmV3X2Rpdik7Ci0JaWYgKHZhbGlkcmF0ZSAhPSByYXRlKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNkcmNyYXRlID0gc2RyY19pY2tfcC0+cmF0ZTsKLQlpZiAocmF0ZSA+IGNsay0+cmF0ZSkKLQkJc2RyY3JhdGUgPDw9ICgocmF0ZSAvIGNsay0+cmF0ZSkgPj4gMSk7Ci0JZWxzZQotCQlzZHJjcmF0ZSA+Pj0gKChjbGstPnJhdGUgLyByYXRlKSA+PiAxKTsKLQotCXJldCA9IG9tYXAyX3NkcmNfZ2V0X3BhcmFtcyhzZHJjcmF0ZSwgJnNkcmNfY3MwLCAmc2RyY19jczEpOwotCWlmIChyZXQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKHNkcmNyYXRlIDwgTUlOX1NEUkNfRExMX0xPQ0tfRlJFUSkgewotCQlwcl9kZWJ1ZygiY2xvY2s6IHdpbGwgdW5sb2NrIFNEUkMgRExMXG4iKTsKLQkJdW5sb2NrX2RsbCA9IDE7Ci0JfQotCi0JLyoKLQkgKiBYWFggVGhpcyBvbmx5IG5lZWRzIHRvIGJlIGRvbmUgd2hlbiB0aGUgQ1BVIGZyZXF1ZW5jeSBjaGFuZ2VzCi0JICovCi0JX21wdXJhdGUgPSBhcm1fZmNrX3AtPnJhdGUgLyBDWUNMRVNfUEVSX01IWjsKLQljID0gKF9tcHVyYXRlIDw8IFNEUkNfTVBVUkFURV9TQ0FMRSkgPj4gU0RSQ19NUFVSQVRFX0JBU0VfU0hJRlQ7Ci0JYyArPSAxOyAgLyogZm9yIHNhZmV0eSAqLwotCWMgKj0gU0RSQ19NUFVSQVRFX0xPT1BTOwotCWMgPj49IFNEUkNfTVBVUkFURV9TQ0FMRTsKLQlpZiAoYyA9PSAwKQotCQljID0gMTsKLQotCXByX2RlYnVnKCJjbG9jazogY2hhbmdpbmcgQ09SRSBEUExMIHJhdGUgZnJvbSAlbHUgdG8gJWx1XG4iLCBjbGstPnJhdGUsCi0JCSB2YWxpZHJhdGUpOwotCXByX2RlYnVnKCJjbG9jazogU0RSQyBDUzAgdGltaW5nIHBhcmFtcyB1c2VkOiIKLQkJICIgUkZSICUwOHggQ1RSTEEgJTA4eCBDVFJMQiAlMDh4IE1SICUwOHhcbiIsCi0JCSBzZHJjX2NzMC0+cmZyX2N0cmwsIHNkcmNfY3MwLT5hY3RpbV9jdHJsYSwKLQkJIHNkcmNfY3MwLT5hY3RpbV9jdHJsYiwgc2RyY19jczAtPm1yKTsKLQlpZiAoc2RyY19jczEpCi0JCXByX2RlYnVnKCJjbG9jazogU0RSQyBDUzEgdGltaW5nIHBhcmFtcyB1c2VkOiAiCi0JCSAiIFJGUiAlMDh4IENUUkxBICUwOHggQ1RSTEIgJTA4eCBNUiAlMDh4XG4iLAotCQkgc2RyY19jczEtPnJmcl9jdHJsLCBzZHJjX2NzMS0+YWN0aW1fY3RybGEsCi0JCSBzZHJjX2NzMS0+YWN0aW1fY3RybGIsIHNkcmNfY3MxLT5tcik7Ci0KLQlpZiAoc2RyY19jczEpCi0JCW9tYXAzX2NvbmZpZ3VyZV9jb3JlX2RwbGwoCi0JCQkJICBuZXdfZGl2LCB1bmxvY2tfZGxsLCBjLCByYXRlID4gY2xrLT5yYXRlLAotCQkJCSAgc2RyY19jczAtPnJmcl9jdHJsLCBzZHJjX2NzMC0+YWN0aW1fY3RybGEsCi0JCQkJICBzZHJjX2NzMC0+YWN0aW1fY3RybGIsIHNkcmNfY3MwLT5tciwKLQkJCQkgIHNkcmNfY3MxLT5yZnJfY3RybCwgc2RyY19jczEtPmFjdGltX2N0cmxhLAotCQkJCSAgc2RyY19jczEtPmFjdGltX2N0cmxiLCBzZHJjX2NzMS0+bXIpOwotCWVsc2UKLQkJb21hcDNfY29uZmlndXJlX2NvcmVfZHBsbCgKLQkJCQkgIG5ld19kaXYsIHVubG9ja19kbGwsIGMsIHJhdGUgPiBjbGstPnJhdGUsCi0JCQkJICBzZHJjX2NzMC0+cmZyX2N0cmwsIHNkcmNfY3MwLT5hY3RpbV9jdHJsYSwKLQkJCQkgIHNkcmNfY3MwLT5hY3RpbV9jdHJsYiwgc2RyY19jczAtPm1yLAotCQkJCSAgMCwgMCwgMCwgMCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogQ29tbW9uIGNsb2NrIGNvZGUgKi8KLQotLyoKLSAqIEFzIGl0IGlzIHN0cnVjdHVyZWQgbm93LCB0aGlzIHdpbGwgcHJldmVudCBhbiBPTUFQMi8zIG11bHRpYm9vdAotICoga2VybmVsIGZyb20gY29tcGlsaW5nLiAgVGhpcyB3aWxsIG5lZWQgZnVydGhlciBhdHRlbnRpb24uCi0gKi8KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQotCi1zdHJ1Y3QgY2xrX2Z1bmN0aW9ucyBvbWFwMl9jbGtfZnVuY3Rpb25zID0gewotCS5jbGtfZW5hYmxlCQk9IG9tYXAyX2Nsa19lbmFibGUsCi0JLmNsa19kaXNhYmxlCQk9IG9tYXAyX2Nsa19kaXNhYmxlLAotCS5jbGtfcm91bmRfcmF0ZQkJPSBvbWFwMl9jbGtfcm91bmRfcmF0ZSwKLQkuY2xrX3NldF9yYXRlCQk9IG9tYXAyX2Nsa19zZXRfcmF0ZSwKLQkuY2xrX3NldF9wYXJlbnQJCT0gb21hcDJfY2xrX3NldF9wYXJlbnQsCi0JLmNsa19kaXNhYmxlX3VudXNlZAk9IG9tYXAyX2Nsa19kaXNhYmxlX3VudXNlZCwKLX07Ci0KLS8qCi0gKiBTZXQgY2xvY2tzIGZvciBieXBhc3MgbW9kZSBmb3IgcmVib290IHRvIHdvcmsuCi0gKi8KLXZvaWQgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCh2b2lkKQotewotCS8qIFJFVklTSVQ6IE5vdCByZWFkeSBmb3IgMzQzeCAqLwotI2lmIDAKLQl1MzIgcmF0ZTsKLQotCWlmICh2Y2xrID09IE5VTEwgfHwgc2NsayA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlyYXRlID0gY2xrX2dldF9yYXRlKHNjbGspOwotCWNsa19zZXRfcmF0ZSh2Y2xrLCByYXRlKTsKLSNlbmRpZgotfQotCi12b2lkIG9tYXAzX2Nsa19sb2NrX2RwbGw1KHZvaWQpCi17Ci0Jc3RydWN0IGNsayAqZHBsbDVfY2xrOwotCXN0cnVjdCBjbGsgKmRwbGw1X20yX2NsazsKLQotCWRwbGw1X2NsayA9IGNsa19nZXQoTlVMTCwgImRwbGw1X2NrIik7Ci0JY2xrX3NldF9yYXRlKGRwbGw1X2NsaywgRFBMTDVfRlJFUV9GT1JfVVNCSE9TVCk7Ci0JY2xrX2VuYWJsZShkcGxsNV9jbGspOwotCi0JLyogRW5hYmxlIGF1dG9pZGxlIHRvIGFsbG93IGl0IHRvIGVudGVyIGxvdyBwb3dlciBieXBhc3MgKi8KLQlvbWFwM19kcGxsX2FsbG93X2lkbGUoZHBsbDVfY2xrKTsKLQotCS8qIFByb2dyYW0gZHBsbDVfbTJfY2xrIGRpdmlkZXIgZm9yIG5vIGRpdmlzaW9uICovCi0JZHBsbDVfbTJfY2xrID0gY2xrX2dldChOVUxMLCAiZHBsbDVfbTJfY2siKTsKLQljbGtfZW5hYmxlKGRwbGw1X20yX2Nsayk7Ci0JY2xrX3NldF9yYXRlKGRwbGw1X20yX2NsaywgRFBMTDVfRlJFUV9GT1JfVVNCSE9TVCk7Ci0KLQljbGtfZGlzYWJsZShkcGxsNV9tMl9jbGspOwotCWNsa19kaXNhYmxlKGRwbGw1X2Nsayk7Ci0JcmV0dXJuOwotfQotCi0vKiBSRVZJU0lUOiBNb3ZlIHRoaXMgaW5pdCBzdHVmZiBvdXQgaW50byBjbG9jay5jICovCi0KLS8qCi0gKiBTd2l0Y2ggdGhlIE1QVSByYXRlIGlmIHNwZWNpZmllZCBvbiBjbWRsaW5lLgotICogV2UgY2Fubm90IGRvIHRoaXMgZWFybHkgdW50aWwgY21kbGluZSBpcyBwYXJzZWQuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IG9tYXAyX2Nsa19hcmNoX2luaXQodm9pZCkKLXsKLQlzdHJ1Y3QgY2xrICpvc2Nfc3lzX2NrLCAqZHBsbDFfY2ssICphcm1fZmNrLCAqY29yZV9jazsKLQl1bnNpZ25lZCBsb25nIG9zY19zeXNfcmF0ZTsKLQotCWlmICghbXB1cmF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBYWFggdGVzdCB0aGVzZSBmb3Igc3VjY2VzcyAqLwotCWRwbGwxX2NrID0gY2xrX2dldChOVUxMLCAiZHBsbDFfY2siKTsKLQlhcm1fZmNrID0gY2xrX2dldChOVUxMLCAiYXJtX2ZjayIpOwotCWNvcmVfY2sgPSBjbGtfZ2V0KE5VTEwsICJjb3JlX2NrIik7Ci0Jb3NjX3N5c19jayA9IGNsa19nZXQoTlVMTCwgIm9zY19zeXNfY2siKTsKLQotCS8qIFJFVklTSVQ6IG5vdCB5ZXQgcmVhZHkgZm9yIDM0M3ggKi8KLQlpZiAoY2xrX3NldF9yYXRlKGRwbGwxX2NrLCBtcHVyYXRlKSkKLQkJcHJpbnRrKEtFUk5fRVJSICIqKiogVW5hYmxlIHRvIHNldCBNUFUgcmF0ZVxuIik7Ci0KLQlyZWNhbGN1bGF0ZV9yb290X2Nsb2NrcygpOwotCi0Jb3NjX3N5c19yYXRlID0gY2xrX2dldF9yYXRlKG9zY19zeXNfY2spOwotCi0JcHJfaW5mbygiU3dpdGNoZWQgdG8gbmV3IGNsb2NraW5nIHJhdGUgKENyeXN0YWwvQ29yZS9NUFUpOiAiCi0JCSIlbGQuJTAxbGQvJWxkLyVsZCBNSHpcbiIsCi0JCShvc2Nfc3lzX3JhdGUgLyAxMDAwMDAwKSwKLQkJKChvc2Nfc3lzX3JhdGUgLyAxMDAwMDApICUgMTApLAotCQkoY2xrX2dldF9yYXRlKGNvcmVfY2spIC8gMTAwMDAwMCksCi0JCShjbGtfZ2V0X3JhdGUoYXJtX2ZjaykgLyAxMDAwMDAwKSk7Ci0KLQljYWxpYnJhdGVfZGVsYXkoKTsKLQotCXJldHVybiAwOwotfQotYXJjaF9pbml0Y2FsbChvbWFwMl9jbGtfYXJjaF9pbml0KTsKLQotCi0jZW5kaWYKLQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM0eHguaAppbmRleCA5YTJjMDdlLi42MjhlOGRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4LmgKQEAgLTEsMjQgKzEsMTUgQEAKIC8qCi0gKiBPTUFQMyBjbG9jayBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBtYWNyb3MKKyAqIE9NQVAzNHh4IGNsb2NrIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIG1hY3JvcwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIE5va2lhIENvcnBvcmF0aW9uCiAgKi8KIAotI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0tfMzRYWF9ICi0jZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DS18zNFhYX0gKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLMzRYWF9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DSzM0WFhfSAogCi1pbnQgb21hcDNfZHBsbDRfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpOwotaW50IG9tYXAzX2NvcmVfZHBsbF9tMl9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7Ci12b2lkIG9tYXAzX2Nsa19sb2NrX2RwbGw1KHZvaWQpOwotCi1leHRlcm4gc3RydWN0IGNsayAqc2RyY19pY2tfcDsKLWV4dGVybiBzdHJ1Y3QgY2xrICphcm1fZmNrX3A7Ci0KLS8qIE9NQVAzNHh4LXNwZWNpZmljIGNsa29wcyAqLwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAzNDMwZXMyX3NzaV93YWl0OwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX29tYXAzNDMwZXMyX2hzb3RndXNiX3dhaXQ7CiBleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdDsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19ub25jb3JlX2RwbGxfb3BzOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4X2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNHh4X2RhdGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzQ5MzBlMy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzR4eF9kYXRhLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMjg5ICswLDAgQEAKLS8qCi0gKiBPTUFQMyBjbG9jayBkYXRhCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IE5va2lhIENvcnBvcmF0aW9uCi0gKgotICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5Ci0gKiBXaXRoIG1hbnkgZGV2aWNlIGNsb2NrIGZpeGVzIGJ5IEtldmluIEhpbG1hbiBhbmQgSm91bmkgSMO2Z2FuZGVyCi0gKiBEUExMIGJ5cGFzcyBjbG9jayBzdXBwb3J0IGFkZGVkIGJ5IFJvbWFuIFRlcmVzaG9ua292Ci0gKgotICovCi0KLS8qCi0gKiBWaXJ0dWFsIGNsb2NrcyBhcmUgaW50cm9kdWNlZCBhcyBjb252ZW5pZW50IHRvb2xzLgotICogVGhleSBhcmUgc291cmNlcyBmb3Igb3RoZXIgY2xvY2tzIGFuZCBub3Qgc3VwcG9zZWQKLSAqIHRvIGJlIHJlcXVlc3RlZCBmcm9tIGRyaXZlcnMgZGlyZWN0bHkuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotCi0jaW5jbHVkZSA8cGxhdC9jb250cm9sLmg+Ci0jaW5jbHVkZSA8cGxhdC9jbGtkZXZfb21hcC5oPgotCi0jaW5jbHVkZSAiY2xvY2suaCIKLSNpbmNsdWRlICJjbG9jazM0eHguaCIKLSNpbmNsdWRlICJjbS5oIgotI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgotI2luY2x1ZGUgInBybS5oIgotI2luY2x1ZGUgInBybS1yZWdiaXRzLTM0eHguaCIKLQotLyoKLSAqIGNsb2NrcwotICovCi0KLSNkZWZpbmUgT01BUF9DTV9SRUdBRERSCQlPTUFQMzRYWF9DTV9SRUdBRERSCi0KLS8qIE1heGltdW0gRFBMTCBtdWx0aXBsaWVyLCBkaXZpZGVyIHZhbHVlcyBmb3IgT01BUDMgKi8KLSNkZWZpbmUgT01BUDNfTUFYX0RQTExfTVVMVAkJMjA0OAotI2RlZmluZSBPTUFQM19NQVhfRFBMTF9ESVYJCTEyOAotCi0vKgotICogRFBMTDEgc3VwcGxpZXMgY2xvY2sgdG8gdGhlIE1QVS4KLSAqIERQTEwyIHN1cHBsaWVzIGNsb2NrIHRvIHRoZSBJVkEyLgotICogRFBMTDMgc3VwcGxpZXMgQ09SRSBkb21haW4gY2xvY2tzLgotICogRFBMTDQgc3VwcGxpZXMgcGVyaXBoZXJhbCBjbG9ja3MuCi0gKiBEUExMNSBzdXBwbGllcyBvdGhlciBwZXJpcGhlcmFsIGNsb2NrcyAoVVNCSE9TVCwgVVNJTSkuCi0gKi8KLQotLyogRm9yd2FyZCBkZWNsYXJhdGlvbnMgZm9yIERQTEwgYnlwYXNzIGNsb2NrcyAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDFfZmNrOwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJfZmNrOwotCi0vKiBQUk0gQ0xPQ0tTICovCi0KLS8qIEFjY29yZGluZyB0byB0aW1lcjMyay5jLCB0aGlzIGlzIGEgMzI3NjhIeiBjbG9jaywgbm90IGEgMzIwMDBIeiBjbG9jay4gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfMzJrX2ZjayA9IHsKLQkubmFtZQkJPSAib21hcF8zMmtfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmF0ZQkJPSAzMjc2OCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNlY3VyZV8zMmtfZmNrID0gewotCS5uYW1lCQk9ICJzZWN1cmVfMzJrX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJhdGUJCT0gMzI3NjgsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQsCi19OwotCi0vKiBWaXJ0dWFsIHNvdXJjZSBjbG9ja3MgZm9yIG9zY19zeXNfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMTJtX2NrID0gewotCS5uYW1lCQk9ICJ2aXJ0XzEybV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJhdGUJCT0gMTIwMDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB2aXJ0XzEzbV9jayA9IHsKLQkubmFtZQkJPSAidmlydF8xM21fY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5yYXRlCQk9IDEzMDAwMDAwLAotCS5mbGFncwkJPSBSQVRFX0ZJWEVELAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdmlydF8xNl84bV9jayA9IHsKLQkubmFtZQkJPSAidmlydF8xNl84bV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJhdGUJCT0gMTY4MDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB2aXJ0XzE5XzJtX2NrID0gewotCS5uYW1lCQk9ICJ2aXJ0XzE5XzJtX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmF0ZQkJPSAxOTIwMDAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMjZtX2NrID0gewotCS5uYW1lCQk9ICJ2aXJ0XzI2bV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnJhdGUJCT0gMjYwMDAwMDAsCi0JLmZsYWdzCQk9IFJBVEVfRklYRUQsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB2aXJ0XzM4XzRtX2NrID0gewotCS5uYW1lCQk9ICJ2aXJ0XzM4XzRtX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucmF0ZQkJPSAzODQwMDAwMCwKLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb3NjX3N5c18xMm1fcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9zY19zeXNfMTNtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvc2Nfc3lzXzE2XzhtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDUsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvc2Nfc3lzXzE5XzJtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvc2Nfc3lzXzI2bV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb3NjX3N5c18zOF80bV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG9zY19zeXNfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnZpcnRfMTJtX2NrLCAgIC5yYXRlcyA9IG9zY19zeXNfMTJtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJnZpcnRfMTNtX2NrLCAgIC5yYXRlcyA9IG9zY19zeXNfMTNtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJnZpcnRfMTZfOG1fY2ssIC5yYXRlcyA9IG9zY19zeXNfMTZfOG1fcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmdmlydF8xOV8ybV9jaywgLnJhdGVzID0gb3NjX3N5c18xOV8ybV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZ2aXJ0XzI2bV9jaywgICAucmF0ZXMgPSBvc2Nfc3lzXzI2bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZ2aXJ0XzM4XzRtX2NrLCAucmF0ZXMgPSBvc2Nfc3lzXzM4XzRtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9LAotfTsKLQotLyogT3NjaWxsYXRvciBjbG9jayAqLwotLyogMTIsIDEzLCAxNi44LCAxOS4yLCAyNiwgb3IgMzguNCBNSHogKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG9zY19zeXNfY2sgPSB7Ci0JLm5hbWUJCT0gIm9zY19zeXNfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQMzQzMF9QUk1fQ0xLU0VMLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NZU19DTEtJTl9TRUxfTUFTSywKLQkuY2xrc2VsCQk9IG9zY19zeXNfY2xrc2VsLAotCS8qIFJFVklTSVQ6IGRlYWwgd2l0aCBhdXRvZXh0Y2xrbW9kZT8gKi8KLQkuZmxhZ3MJCT0gUkFURV9GSVhFRCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYyX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHN5c19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmb3NjX3N5c19jaywgLnJhdGVzID0gZGl2Ml9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotLyogTGF0ZW5jeTogdGhpcyBjbG9jayBpcyBvbmx5IGVuYWJsZWQgYWZ0ZXIgUFJNX0NMS1NFVFVQLlNFVFVQX1RJTUUgKi8KLS8qIEZlZWRzIERQTExzIC0gZGl2aWRlZCBmaXJzdCBieSBQUk1fQ0xLU1JDX0NUUkwuU1lTQ0xLRElWPyAqLwotc3RhdGljIHN0cnVjdCBjbGsgc3lzX2NrID0gewotCS5uYW1lCQk9ICJzeXNfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm9zY19zeXNfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVAzNDMwX1BSTV9DTEtTUkNfQ1RSTCwKLQkuY2xrc2VsX21hc2sJPSBPTUFQX1NZU0NMS0RJVl9NQVNLLAotCS5jbGtzZWwJCT0gc3lzX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc3lzX2FsdGNsayA9IHsKLQkubmFtZQkJPSAic3lzX2FsdGNsayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi19OwotCi0vKiBPcHRpb25hbCBleHRlcm5hbCBjbG9jayBpbnB1dCBmb3Igc29tZSBNY0JTUHMgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwX2Nsa3MgPSB7Ci0JLm5hbWUJCT0gIm1jYnNwX2Nsa3MiLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotfTsKLQotLyogUFJNIEVYVEVSTkFMIENMT0NLIE9VVFBVVCAqLwotCi1zdGF0aWMgc3RydWN0IGNsayBzeXNfY2xrb3V0MSA9IHsKLQkubmFtZQkJPSAic3lzX2Nsa291dDEiLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJm9zY19zeXNfY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQMzQzMF9QUk1fQ0xLT1VUX0NUUkwsCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9DTEtPVVRfRU5fU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIERQTExTICovCi0KLS8qIENNIENMT0NLUyAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjE2X2RwbGxfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gNSwgLnZhbCA9IDUsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA3LCAudmFsID0gNywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDksIC52YWwgPSA5LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxMCwgLnZhbCA9IDEwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxMSwgLnZhbCA9IDExLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxMywgLnZhbCA9IDEzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxNCwgLnZhbCA9IDE0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxNSwgLnZhbCA9IDE1LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxNiwgLnZhbCA9IDE2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLS8qIERQTEwxICovCi0vKiBNUFUgY2xvY2sgc291cmNlICovCi0vKiBUeXBlOiBEUExMICovCi1zdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsMV9kZCA9IHsKLQkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCksCi0JLm11bHRfbWFzawk9IE9NQVAzNDMwX01QVV9EUExMX01VTFRfTUFTSywKLQkuZGl2MV9tYXNrCT0gT01BUDM0MzBfTVBVX0RQTExfRElWX01BU0ssCi0JLmNsa19ieXBhc3MJPSAmZHBsbDFfZmNrLAotCS5jbGtfcmVmCT0gJnN5c19jaywKLQkuZnJlcXNlbF9tYXNrCT0gT01BUDM0MzBfTVBVX0RQTExfRlJFUVNFTF9NQVNLLAotCS5jb250cm9sX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9DTEtFTl9QTEwpLAotCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwX0VOX01QVV9EUExMX01BU0ssCi0JLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX0JZUEFTUykgfCAoMSA8PCBEUExMX0xPQ0tFRCksCi0JLmF1dG9fcmVjYWxfYml0CT0gT01BUDM0MzBfRU5fTVBVX0RQTExfRFJJRlRHVUFSRF9TSElGVCwKLQkucmVjYWxfZW5fYml0CT0gT01BUDM0MzBfTVBVX0RQTExfUkVDQUxfRU5fU0hJRlQsCi0JLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwX01QVV9EUExMX1NUX1NISUZULAotCS5hdXRvaWRsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fQVVUT0lETEVfUExMKSwKLQkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwX0FVVE9fTVBVX0RQTExfTUFTSywKLQkuaWRsZXN0X3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9JRExFU1RfUExMKSwKLQkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9NUFVfQ0xLX01BU0ssCi0JLm1heF9tdWx0aXBsaWVyID0gT01BUDNfTUFYX0RQTExfTVVMVCwKLQkubWluX2RpdmlkZXIJPSAxLAotCS5tYXhfZGl2aWRlcgk9IE9NQVAzX01BWF9EUExMX0RJViwKLQkucmF0ZV90b2xlcmFuY2UgPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwxX2NrID0gewotCS5uYW1lCQk9ICJkcGxsMV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmc3lzX2NrLAotCS5kcGxsX2RhdGEJPSAmZHBsbDFfZGQsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCi0JLmNsa2RtX25hbWUJPSAiZHBsbDFfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAotfTsKLQotLyoKLSAqIFRoaXMgdmlydHVhbCBjbG9jayBwcm92aWRlcyB0aGUgQ0xLT1VUWDIgb3V0cHV0IGZyb20gdGhlIERQTEwgaWYgdGhlCi0gKiBEUExMIGlzbid0IGJ5cGFzc2VkLgotICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsMV94Ml9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDFfeDJfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGwxX2NrLAotCS5jbGtkbV9uYW1lCT0gImRwbGwxX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCi19OwotCi0vKiBPbiBEUExMMSwgdW5saWtlIG90aGVyIERQTExzLCB0aGUgZGl2aWRlciBpcyBkb3duc3RyZWFtIGZyb20gQ0xLT1VUWDIgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjE2X2RwbGwxX3gybTJfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmRwbGwxX3gyX2NrLCAucmF0ZXMgPSBkaXYxNl9kcGxsX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi0vKgotICogRG9lcyBub3QgZXhpc3QgaW4gdGhlIFRSTSAtIG5lZWRlZCB0byBzZXBhcmF0ZSB0aGUgTTIgZGl2aWRlciBmcm9tCi0gKiBieXBhc3Mgc2VsZWN0aW9uIGluIG1wdV9jawotICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsMV94Mm0yX2NrID0gewotCS5uYW1lCQk9ICJkcGxsMV94Mm0yX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsMV94Ml9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDJfUExMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9NUFVfRFBMTF9DTEtPVVRfRElWX01BU0ssCi0JLmNsa3NlbAkJPSBkaXYxNl9kcGxsMV94Mm0yX2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsMV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIERQTEwyICovCi0vKiBJVkEyIGNsb2NrIHNvdXJjZSAqLwotLyogVHlwZTogRFBMTCAqLwotCi1zdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsMl9kZCA9IHsKLQkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMV9QTEwpLAotCS5tdWx0X21hc2sJPSBPTUFQMzQzMF9JVkEyX0RQTExfTVVMVF9NQVNLLAotCS5kaXYxX21hc2sJPSBPTUFQMzQzMF9JVkEyX0RQTExfRElWX01BU0ssCi0JLmNsa19ieXBhc3MJPSAmZHBsbDJfZmNrLAotCS5jbGtfcmVmCT0gJnN5c19jaywKLQkuZnJlcXNlbF9tYXNrCT0gT01BUDM0MzBfSVZBMl9EUExMX0ZSRVFTRUxfTUFTSywKLQkuY29udHJvbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAzNDMwX0NNX0NMS0VOX1BMTCksCi0JLmVuYWJsZV9tYXNrCT0gT01BUDM0MzBfRU5fSVZBMl9EUExMX01BU0ssCi0JLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX1NUT1ApIHwgKDEgPDwgRFBMTF9MT0NLRUQpIHwKLQkJCQkoMSA8PCBEUExMX0xPV19QT1dFUl9CWVBBU1MpLAotCS5hdXRvX3JlY2FsX2JpdAk9IE9NQVAzNDMwX0VOX0lWQTJfRFBMTF9EUklGVEdVQVJEX1NISUZULAotCS5yZWNhbF9lbl9iaXQJPSBPTUFQMzQzMF9QUk1fSVJRRU5BQkxFX01QVV9JVkEyX0RQTExfUkVDQUxfRU5fU0hJRlQsCi0JLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwX1BSTV9JUlFTVEFUVVNfTVBVX0lWQTJfRFBMTF9TVF9TSElGVCwKLQkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9BVVRPSURMRV9QTEwpLAotCS5hdXRvaWRsZV9tYXNrCT0gT01BUDM0MzBfQVVUT19JVkEyX0RQTExfTUFTSywKLQkuaWRsZXN0X3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgT01BUDM0MzBfQ01fSURMRVNUX1BMTCksCi0JLmlkbGVzdF9tYXNrCT0gT01BUDM0MzBfU1RfSVZBMl9DTEtfTUFTSywKLQkubWF4X211bHRpcGxpZXIgPSBPTUFQM19NQVhfRFBMTF9NVUxULAotCS5taW5fZGl2aWRlcgk9IDEsCi0JLm1heF9kaXZpZGVyCT0gT01BUDNfTUFYX0RQTExfRElWLAotCS5yYXRlX3RvbGVyYW5jZSA9IERFRkFVTFRfRFBMTF9SQVRFX1RPTEVSQU5DRQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGwyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbm9uY29yZV9kcGxsX29wcywKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLmRwbGxfZGF0YQk9ICZkcGxsMl9kZCwKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsMl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYxNl9kcGxsMl9tMngyX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZkcGxsMl9jaywgLnJhdGVzID0gZGl2MTZfZHBsbF9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotLyoKLSAqIFRoZSBUUk0gaXMgY29uZmxpY3RlZCBvbiB3aGV0aGVyIElWQTIgY2xvY2sgY29tZXMgZnJvbSBEUExMMiBDTEtPVVQKLSAqIG9yIENMS09VVFgyLiBDTEtPVVQgc2VlbXMgbW9zdCBwbGF1c2libGUuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwyX20yX2NrID0gewotCS5uYW1lCQk9ICJkcGxsMl9tMl9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHBsbDJfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwKLQkJCQkJICBPTUFQMzQzMF9DTV9DTEtTRUwyX1BMTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfSVZBMl9EUExMX0NMS09VVF9ESVZfTUFTSywKLQkuY2xrc2VsCQk9IGRpdjE2X2RwbGwyX20yeDJfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImRwbGwyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyoKLSAqIERQTEwzCi0gKiBTb3VyY2UgY2xvY2sgZm9yIGFsbCBpbnRlcmZhY2VzIGFuZCBmb3Igc29tZSBkZXZpY2UgZmNsa3MKLSAqIFJFVklTSVQ6IEFsc28gc3VwcG9ydHMgZmFzdCByZWxvY2sgYnlwYXNzIC0gbm90IGluY2x1ZGVkIGJlbG93Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgZHBsbF9kYXRhIGRwbGwzX2RkID0gewotCS5tdWx0X2RpdjFfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAotCS5tdWx0X21hc2sJPSBPTUFQMzQzMF9DT1JFX0RQTExfTVVMVF9NQVNLLAotCS5kaXYxX21hc2sJPSBPTUFQMzQzMF9DT1JFX0RQTExfRElWX01BU0ssCi0JLmNsa19ieXBhc3MJPSAmc3lzX2NrLAotCS5jbGtfcmVmCT0gJnN5c19jaywKLQkuZnJlcXNlbF9tYXNrCT0gT01BUDM0MzBfQ09SRV9EUExMX0ZSRVFTRUxfTUFTSywKLQkuY29udHJvbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAotCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwX0VOX0NPUkVfRFBMTF9NQVNLLAotCS5hdXRvX3JlY2FsX2JpdAk9IE9NQVAzNDMwX0VOX0NPUkVfRFBMTF9EUklGVEdVQVJEX1NISUZULAotCS5yZWNhbF9lbl9iaXQJPSBPTUFQMzQzMF9DT1JFX0RQTExfUkVDQUxfRU5fU0hJRlQsCi0JLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwX0NPUkVfRFBMTF9TVF9TSElGVCwKLQkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0FVVE9JRExFKSwKLQkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwX0FVVE9fQ09SRV9EUExMX01BU0ssCi0JLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKLQkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9DT1JFX0NMS19NQVNLLAotCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCi0JLm1pbl9kaXZpZGVyCT0gMSwKLQkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCi0JLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsM19jayA9IHsKLQkubmFtZQkJPSAiZHBsbDNfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJnN5c19jaywKLQkuZHBsbF9kYXRhCT0gJmRwbGwzX2RkLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCi19OwotCi0vKgotICogVGhpcyB2aXJ0dWFsIGNsb2NrIHByb3ZpZGVzIHRoZSBDTEtPVVRYMiBvdXRwdXQgZnJvbSB0aGUgRFBMTCBpZiB0aGUKLSAqIERQTEwgaXNuJ3QgYnlwYXNzZWQKLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfeDJfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGwzX3gyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsM19jaywKLQkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYzMV9kcGxsM19yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKLQl7IC5kaXYgPSA1LCAudmFsID0gNSwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyIH0sCi0JeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDcsIC52YWwgPSA3LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKLQl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyIH0sCi0JeyAuZGl2ID0gOSwgLnZhbCA9IDksIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDEwLCAudmFsID0gMTAsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDExLCAudmFsID0gMTEsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDEyLCAudmFsID0gMTIsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDEzLCAudmFsID0gMTMsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDE0LCAudmFsID0gMTQsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDE1LCAudmFsID0gMTUsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDE2LCAudmFsID0gMTYsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDE3LCAudmFsID0gMTcsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDE4LCAudmFsID0gMTgsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDE5LCAudmFsID0gMTksIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDIwLCAudmFsID0gMjAsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDIxLCAudmFsID0gMjEsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDIyLCAudmFsID0gMjIsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDIzLCAudmFsID0gMjMsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDI0LCAudmFsID0gMjQsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDI1LCAudmFsID0gMjUsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDI2LCAudmFsID0gMjYsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDI3LCAudmFsID0gMjcsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDI4LCAudmFsID0gMjgsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDI5LCAudmFsID0gMjksIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDMwLCAudmFsID0gMzAsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDMxLCAudmFsID0gMzEsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAotCXsgLmRpdiA9IDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjMxX2RwbGwzbTJfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmRwbGwzX2NrLCAucmF0ZXMgPSBkaXYzMV9kcGxsM19yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotLyogRFBMTDMgb3V0cHV0IE0yIC0gcHJpbWFyeSBjb250cm9sIHBvaW50IGZvciBDT1JFIHNwZWVkICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsM19tMl9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDNfbTJfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGwzX2NrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ09SRV9EUExMX0NMS09VVF9ESVZfTUFTSywKLQkuY2xrc2VsCQk9IGRpdjMxX2RwbGwzbTJfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkuc2V0X3JhdGUJPSAmb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjb3JlX2NrID0gewotCS5uYW1lCQk9ICJjb3JlX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsM19tMl9jaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfbTJ4Ml9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDNfbTJ4Ml9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHBsbDNfbTJfY2ssCi0JLmNsa2RtX25hbWUJPSAiZHBsbDNfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKLX07Ci0KLS8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGl2MTZfZHBsbDNfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmRwbGwzX2NrLCAucmF0ZXMgPSBkaXYxNl9kcGxsX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi0vKiBUaGlzIHZpcnR1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDNfbTN4Ml9jayAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfbTNfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGwzX20zX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsM19jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0RJVl9EUExMM19NQVNLLAotCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDNfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsM19tM3gyX2NrID0gewotCS5uYW1lCQk9ICJkcGxsM19tM3gyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmRwbGwzX20zX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0VNVV9DT1JFX1NISUZULAotCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAotCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBlbXVfY29yZV9hbHdvbl9jayA9IHsKLQkubmFtZQkJPSAiZW11X2NvcmVfYWx3b25fY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGwzX20zeDJfY2ssCi0JLmNsa2RtX25hbWUJPSAiZHBsbDNfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBEUExMNCAqLwotLyogU3VwcGxpZXMgOTZNSHosIDU0TWh6IFRWIERBQywgRFNTIGZjbGssIENBTSBzZW5zb3IgY2xvY2ssIGVtdWwgdHJhY2UgY2xrICovCi0vKiBUeXBlOiBEUExMICovCi1zdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsNF9kZCA9IHsKLQkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwyKSwKLQkubXVsdF9tYXNrCT0gT01BUDM0MzBfUEVSSVBIX0RQTExfTVVMVF9NQVNLLAotCS5kaXYxX21hc2sJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9ESVZfTUFTSywKLQkuY2xrX2J5cGFzcwk9ICZzeXNfY2ssCi0JLmNsa19yZWYJPSAmc3lzX2NrLAotCS5mcmVxc2VsX21hc2sJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9GUkVRU0VMX01BU0ssCi0JLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX21hc2sJPSBPTUFQMzQzMF9FTl9QRVJJUEhfRFBMTF9NQVNLLAotCS5tb2RlcwkJPSAoMSA8PCBEUExMX0xPV19QT1dFUl9TVE9QKSB8ICgxIDw8IERQTExfTE9DS0VEKSwKLQkuYXV0b19yZWNhbF9iaXQJPSBPTUFQMzQzMF9FTl9QRVJJUEhfRFBMTF9EUklGVEdVQVJEX1NISUZULAotCS5yZWNhbF9lbl9iaXQJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9SRUNBTF9FTl9TSElGVCwKLQkucmVjYWxfc3RfYml0CT0gT01BUDM0MzBfUEVSSVBIX0RQTExfU1RfU0hJRlQsCi0JLmF1dG9pZGxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9BVVRPSURMRSksCi0JLmF1dG9pZGxlX21hc2sJPSBPTUFQMzQzMF9BVVRPX1BFUklQSF9EUExMX01BU0ssCi0JLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUKSwKLQkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMF9TVF9QRVJJUEhfQ0xLX01BU0ssCi0JLm1heF9tdWx0aXBsaWVyID0gT01BUDNfTUFYX0RQTExfTVVMVCwKLQkubWluX2RpdmlkZXIJPSAxLAotCS5tYXhfZGl2aWRlcgk9IE9NQVAzX01BWF9EUExMX0RJViwKLQkucmF0ZV90b2xlcmFuY2UgPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X2NrID0gewotCS5uYW1lCQk9ICJkcGxsNF9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX25vbmNvcmVfZHBsbF9vcHMsCi0JLnBhcmVudAkJPSAmc3lzX2NrLAotCS5kcGxsX2RhdGEJPSAmZHBsbDRfZGQsCi0JLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAotCS5zZXRfcmF0ZQk9ICZvbWFwM19kcGxsNF9zZXRfcmF0ZSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCi19OwotCi0vKgotICogVGhpcyB2aXJ0dWFsIGNsb2NrIHByb3ZpZGVzIHRoZSBDTEtPVVRYMiBvdXRwdXQgZnJvbSB0aGUgRFBMTCBpZiB0aGUKLSAqIERQTEwgaXNuJ3QgYnlwYXNzZWQgLS0KLSAqIFhYWCBkb2VzIHRoaXMgc2VydmUgYW55IGRvd25zdHJlYW0gY2xvY2tzPwotICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF94Ml9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDRfeDJfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAotCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYxNl9kcGxsNF9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZHBsbDRfY2ssIC5yYXRlcyA9IGRpdjE2X2RwbGxfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLS8qIFRoaXMgdmlydHVhbCBjbG9jayBpcyB0aGUgc291cmNlIGZvciBkcGxsNF9tMngyX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tMl9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDRfbTJfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMyksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfRElWXzk2TV9NQVNLLAotCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tMngyX2NrID0gewotCS5uYW1lCQk9ICJkcGxsNF9tMngyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmRwbGw0X20yX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROXzk2TV9TSElGVCwKLQkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAotfTsKLQotLyoKLSAqIERQTEw0IGdlbmVyYXRlcyBEUExMNF9NMlgyX0NMSyB3aGljaCBpcyB0aGVuIHJvdXRlZCBpbnRvIHRoZSBQUk0gYXMKLSAqIFBSTV85Nk1fQUxXT05fKEYpQ0xLLiAgVHdvIGNsb2NrcyB0aGVuIGVtZXJnZSBmcm9tIHRoZSBQUk06Ci0gKiA5Nk1fQUxXT05fRkNMSyAoY2FsbGVkICJvbWFwXzk2bV9hbHdvbl9mY2siIGJlbG93KSBhbmQKLSAqIENNXzk2S18oRilDTEsuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfOTZtX2Fsd29uX2ZjayA9IHsKLQkubmFtZQkJPSAib21hcF85Nm1fYWx3b25fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsNF9tMngyX2NrLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjbV85Nm1fZmNrID0gewotCS5uYW1lCQk9ICJjbV85Nm1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZvbWFwXzk2bV9hbHdvbl9mY2ssCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF85Nm1fZHBsbF9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF85Nm1fc3lzX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb21hcF85Nm1fZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZjbV85Nm1fZmNrLCAucmF0ZXMgPSBvbWFwXzk2bV9kcGxsX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJnN5c19jaywJIC5yYXRlcyA9IG9tYXBfOTZtX3N5c19yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgb21hcF85Nm1fZmNrID0gewotCS5uYW1lCQk9ICJvbWFwXzk2bV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJnN5c19jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NPVVJDRV85Nk1fTUFTSywKLQkuY2xrc2VsCQk9IG9tYXBfOTZtX2Zja19jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIFRoaXMgdmlydHVhbCBjbG9jayBpcyB0aGUgc291cmNlIGZvciBkcGxsNF9tM3gyX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tM19jayA9IHsKLQkubmFtZQkJPSAiZHBsbDRfbTNfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfVFZfTUFTSywKLQkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTN4Ml9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDRfbTN4Ml9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZkcGxsNF9tM19jaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9QV1JETl9UVl9TSElGVCwKLQkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzU0bV9kNG0zeDJfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9tYXBfNTRtX2FsdF9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG9tYXBfNTRtX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZkcGxsNF9tM3gyX2NrLCAucmF0ZXMgPSBvbWFwXzU0bV9kNG0zeDJfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmc3lzX2FsdGNsaywgICAgLnJhdGVzID0gb21hcF81NG1fYWx0X3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBvbWFwXzU0bV9mY2sgPSB7Ci0JLm5hbWUJCT0gIm9tYXBfNTRtX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TT1VSQ0VfNTRNX01BU0ssCi0JLmNsa3NlbAkJPSBvbWFwXzU0bV9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF80OG1fY205Nm1fcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAyLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9tYXBfNDhtX2FsdF9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG9tYXBfNDhtX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZjbV85Nm1fZmNrLCAucmF0ZXMgPSBvbWFwXzQ4bV9jbTk2bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZzeXNfYWx0Y2xrLCAucmF0ZXMgPSBvbWFwXzQ4bV9hbHRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfNDhtX2ZjayA9IHsKLQkubmFtZQkJPSAib21hcF80OG1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NPVVJDRV80OE1fTUFTSywKLQkuY2xrc2VsCQk9IG9tYXBfNDhtX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgb21hcF8xMm1fZmNrID0gewotCS5uYW1lCQk9ICJvbWFwXzEybV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm9tYXBfNDhtX2ZjaywKLQkuZml4ZWRfZGl2CT0gNCwKLQkucmVjYWxjCQk9ICZvbWFwMl9maXhlZF9kaXZpc29yX3JlY2FsYywKLX07Ci0KLS8qIFRoaXMgdmlyc3R1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDRfbTR4Ml9jayAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTRfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGw0X200X2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsNF9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0RTUzFfTUFTSywKLQkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAotfTsKLQotLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNHgyX2NrID0gewotCS5uYW1lCQk9ICJkcGxsNF9tNHgyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmRwbGw0X200X2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0NBTV9TSElGVCwKLQkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAotfTsKLQotLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X201eDJfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X201X2NrID0gewotCS5uYW1lCQk9ICJkcGxsNF9tNV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHBsbDRfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9DQU1fTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9DQU1fTUFTSywKLQkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCi1zdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNXgyX2NrID0gewotCS5uYW1lCQk9ICJkcGxsNF9tNXgyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmRwbGw0X201X2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0NBTV9TSElGVCwKLQkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAotfTsKLQotLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X202eDJfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X202X2NrID0gewotCS5uYW1lCQk9ICJkcGxsNF9tNl9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHBsbDRfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9ESVZfRFBMTDRfTUFTSywKLQkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLwotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTZ4Ml9jayA9IHsKLQkubmFtZQkJPSAiZHBsbDRfbTZ4Ml9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZkcGxsNF9tNl9jaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9QV1JETl9FTVVfUEVSSVBIX1NISUZULAotCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAotCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBlbXVfcGVyX2Fsd29uX2NrID0gewotCS5uYW1lCQk9ICJlbXVfcGVyX2Fsd29uX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZkcGxsNF9tNngyX2NrLAotCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogRFBMTDUgKi8KLS8qIFN1cHBsaWVzIDEyME1IeiBjbG9jaywgVVNJTSBzb3VyY2UgY2xvY2sgKi8KLS8qIFR5cGU6IERQTEwgKi8KLS8qIDM0MzBFUzIgb25seSAqLwotc3RhdGljIHN0cnVjdCBkcGxsX2RhdGEgZHBsbDVfZGQgPSB7Ci0JLm11bHRfZGl2MV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgT01BUDM0MzBFUzJfQ01fQ0xLU0VMNCksCi0JLm11bHRfbWFzawk9IE9NQVAzNDMwRVMyX1BFUklQSDJfRFBMTF9NVUxUX01BU0ssCi0JLmRpdjFfbWFzawk9IE9NQVAzNDMwRVMyX1BFUklQSDJfRFBMTF9ESVZfTUFTSywKLQkuY2xrX2J5cGFzcwk9ICZzeXNfY2ssCi0JLmNsa19yZWYJPSAmc3lzX2NrLAotCS5mcmVxc2VsX21hc2sJPSBPTUFQMzQzMEVTMl9QRVJJUEgyX0RQTExfRlJFUVNFTF9NQVNLLAotCS5jb250cm9sX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBPTUFQMzQzMEVTMl9DTV9DTEtFTjIpLAotCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwRVMyX0VOX1BFUklQSDJfRFBMTF9NQVNLLAotCS5tb2RlcwkJPSAoMSA8PCBEUExMX0xPV19QT1dFUl9TVE9QKSB8ICgxIDw8IERQTExfTE9DS0VEKSwKLQkuYXV0b19yZWNhbF9iaXQJPSBPTUFQMzQzMEVTMl9FTl9QRVJJUEgyX0RQTExfRFJJRlRHVUFSRF9TSElGVCwKLQkucmVjYWxfZW5fYml0CT0gT01BUDM0MzBFUzJfU05EX1BFUklQSF9EUExMX1JFQ0FMX0VOX1NISUZULAotCS5yZWNhbF9zdF9iaXQJPSBPTUFQMzQzMEVTMl9TTkRfUEVSSVBIX0RQTExfU1RfU0hJRlQsCi0JLmF1dG9pZGxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBPTUFQMzQzMEVTMl9DTV9BVVRPSURMRTJfUExMKSwKLQkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwRVMyX0FVVE9fUEVSSVBIMl9EUExMX01BU0ssCi0JLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fSURMRVNUMiksCi0JLmlkbGVzdF9tYXNrCT0gT01BUDM0MzBFUzJfU1RfUEVSSVBIMl9DTEtfTUFTSywKLQkubWF4X211bHRpcGxpZXIgPSBPTUFQM19NQVhfRFBMTF9NVUxULAotCS5taW5fZGl2aWRlcgk9IDEsCi0JLm1heF9kaXZpZGVyCT0gT01BUDNfTUFYX0RQTExfRElWLAotCS5yYXRlX3RvbGVyYW5jZSA9IERFRkFVTFRfRFBMTF9SQVRFX1RPTEVSQU5DRQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDVfY2sgPSB7Ci0JLm5hbWUJCT0gImRwbGw1X2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfbm9uY29yZV9kcGxsX29wcywKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLmRwbGxfZGF0YQk9ICZkcGxsNV9kZCwKLQkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCi0JLnNldF9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSwKLQkuY2xrZG1fbmFtZQk9ICJkcGxsNV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYxNl9kcGxsNV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZHBsbDVfY2ssIC5yYXRlcyA9IGRpdjE2X2RwbGxfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw1X20yX2NrID0gewotCS5uYW1lCQk9ICJkcGxsNV9tMl9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHBsbDVfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBPTUFQMzQzMEVTMl9DTV9DTEtTRUw1KSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMEVTMl9ESVZfMTIwTV9NQVNLLAotCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDVfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImRwbGw1X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyogQ00gRVhURVJOQUwgQ0xPQ0sgT1VUUFVUUyAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNsa291dDJfc3JjX2NvcmVfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNsa291dDJfc3JjX3N5c19yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY2xrb3V0Ml9zcmNfOTZtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjbGtvdXQyX3NyY181NG1fcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBjbGtvdXQyX3NyY19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmY29yZV9jaywJCS5yYXRlcyA9IGNsa291dDJfc3JjX2NvcmVfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmc3lzX2NrLAkJLnJhdGVzID0gY2xrb3V0Ml9zcmNfc3lzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmNtXzk2bV9mY2ssCS5yYXRlcyA9IGNsa291dDJfc3JjXzk2bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZvbWFwXzU0bV9mY2ssCS5yYXRlcyA9IGNsa291dDJfc3JjXzU0bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrb3V0Ml9zcmNfY2sgPSB7Ci0JLm5hbWUJCT0gImNsa291dDJfc3JjX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUDM0MzBfQ01fQ0xLT1VUX0NUUkwsCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9DTEtPVVQyX0VOX1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUDM0MzBfQ01fQ0xLT1VUX0NUUkwsCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLT1VUMlNPVVJDRV9NQVNLLAotCS5jbGtzZWwJCT0gY2xrb3V0Ml9zcmNfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHN5c19jbGtvdXQyX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA0LCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gOCwgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDE2LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3lzX2Nsa291dDJfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNsa291dDJfc3JjX2NrLCAucmF0ZXMgPSBzeXNfY2xrb3V0Ml9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jbGtvdXQyID0gewotCS5uYW1lCQk9ICJzeXNfY2xrb3V0MiIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVAzNDMwX0NNX0NMS09VVF9DVFJMLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS09VVDJfRElWX01BU0ssCi0JLmNsa3NlbAkJPSBzeXNfY2xrb3V0Ml9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIENNIE9VVFBVVCBDTE9DS1MgKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgY29yZXgyX2ZjayA9IHsKLQkubmFtZQkJPSAiY29yZXgyX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHBsbDNfbTJ4Ml9jaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogRFBMTCBwb3dlciBkb21haW4gY2xvY2sgY29udHJvbHMgKi8KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXY0X3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMCB9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXY0X2NvcmVfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfY2ssIC5yYXRlcyA9IGRpdjRfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLS8qCi0gKiBSRVZJU0lUOiBBcmUgdGhlc2UgaW4gRFBMTCBwb3dlciBkb21haW4gb3IgQ00gcG93ZXIgZG9tYWluPyBkb2NzCi0gKiBtYXkgYmUgaW5jb25zaXN0ZW50IGhlcmU/Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwxX2ZjayA9IHsKLQkubmFtZQkJPSAiZHBsbDFfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZjb3JlX2NrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMV9QTEwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX01QVV9DTEtfU1JDX01BU0ssCi0JLmNsa3NlbAkJPSBkaXY0X2NvcmVfY2xrc2VsLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtcHVfY2sgPSB7Ci0JLm5hbWUJCT0gIm1wdV9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmZHBsbDFfeDJtMl9jaywKLQkuY2xrZG1fbmFtZQk9ICJtcHVfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBhcm1fZmNrIGlzIGRpdmlkZWQgYnkgdHdvIHdoZW4gRFBMTDEgbG9ja2VkOyBvdGhlcndpc2UsIHBhc3N0aHJvdWdoIG1wdV9jayAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBhcm1fZmNrX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBhcm1fZmNrX2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZtcHVfY2ssIC5yYXRlcyA9IGFybV9mY2tfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGFybV9mY2sgPSB7Ci0JLm5hbWUJCT0gImFybV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm1wdV9jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0lETEVTVF9QTEwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX1NUX01QVV9DTEtfTUFTSywKLQkuY2xrc2VsCQk9IGFybV9mY2tfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gIm1wdV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIFhYWCBXaGF0IGFib3V0IG5lb25fY2xrZG0gPyAqLwotCi0vKgotICogUkVWSVNJVDogVGhpcyBjbG9jayBpcyBuZXZlciBzcGVjaWZpY2FsbHkgZGVmaW5lZCBpbiB0aGUgMzQzMCBUUk0sCi0gKiBhbHRob3VnaCBpdCBpcyByZWZlcmVuY2VkIC0gc28gdGhpcyBpcyBhIGd1ZXNzCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGVtdV9tcHVfYWx3b25fY2sgPSB7Ci0JLm5hbWUJCT0gImVtdV9tcHVfYWx3b25fY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm1wdV9jaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHBsbDJfZmNrID0gewotCS5uYW1lCQk9ICJkcGxsMl9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMV9QTEwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0lWQTJfQ0xLX1NSQ19NQVNLLAotCS5jbGtzZWwJCT0gZGl2NF9jb3JlX2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaXZhMl9jayA9IHsKLQkubmFtZQkJPSAiaXZhMl9jayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZkcGxsMl9tMl9jaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NNX0ZDTEtFTl9JVkEyX0VOX0lWQTJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiaXZhMl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIENvbW1vbiBpbnRlcmZhY2UgY2xvY2tzICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjJfY29yZV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gZGl2Ml9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbDNfaWNrID0gewotCS5uYW1lCQk9ICJsM19pY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmNvcmVfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfTDNfTUFTSywKLQkuY2xrc2VsCQk9IGRpdjJfY29yZV9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjJfbDNfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmwzX2ljaywgLnJhdGVzID0gZGl2Ml9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbDRfaWNrID0gewotCS5uYW1lCQk9ICJsNF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmwzX2ljaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9MNF9NQVNLLAotCS5jbGtzZWwJCT0gZGl2Ml9sM19jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGl2Ml9sNF9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmbDRfaWNrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBybV9pY2sgPSB7Ci0JLm5hbWUJCT0gInJtX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmbDRfaWNrLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1JNX01BU0ssCi0JLmNsa3NlbAkJPSBkaXYyX2w0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyogR0ZYIHBvd2VyIGRvbWFpbiAqLwotCi0vKiBHRlggY2xvY2tzIGFyZSBpbiAzNDMwRVMxIG9ubHkuIDM0MzBFUzIgYW5kIGxhdGVyIHVzZXMgdGhlIFNHWCBpbnN0ZWFkICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGdmeF9sM19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmbDNfaWNrLCAucmF0ZXMgPSBnZnhfbDNfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLS8qIFZpcnR1YWwgcGFyZW50IGNsb2NrIGZvciBnZnhfbDNfaWNrIGFuZCBnZnhfbDNfZmNrICovCi1zdGF0aWMgc3RydWN0IGNsayBnZnhfbDNfY2sgPSB7Ci0JLm5hbWUJCT0gImdmeF9sM19jayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsM19pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVBfRU5fR0ZYX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBnZnhfbDNfZmNrID0gewotCS5uYW1lCQk9ICJnZnhfbDNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZnZnhfbDNfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVBfQ0xLU0VMX0dGWF9NQVNLLAotCS5jbGtzZWwJCT0gZ2Z4X2wzX2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19pY2sgPSB7Ci0JLm5hbWUJCT0gImdmeF9sM19pY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmdmeF9sM19jaywKLQkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9jZzFfY2sgPSB7Ci0JLm5hbWUJCT0gImdmeF9jZzFfY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmZ2Z4X2wzX2ZjaywgLyogUkVWSVNJVDogY29ycmVjdD8gKi8KLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fMkRfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiZ2Z4XzM0MzBlczFfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBnZnhfY2cyX2NrID0gewotCS5uYW1lCQk9ICJnZnhfY2cyX2NrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmdmeF9sM19mY2ssIC8qIFJFVklTSVQ6IGNvcnJlY3Q/ICovCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoR0ZYX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOXzNEX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImdmeF8zNDMwZXMxX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogU0dYIHBvd2VyIGRvbWFpbiAtIDM0MzBFUzIgb25seSAqLwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHNneF9jb3JlX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMywgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA2LCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBzZ3hfOTZtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzZ3hfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfY2ssCSAucmF0ZXMgPSBzZ3hfY29yZV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZjbV85Nm1fZmNrLCAucmF0ZXMgPSBzZ3hfOTZtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2d4X2ZjayA9IHsKLQkubmFtZQkJPSAic2d4X2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1NHWF9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9DTV9GQ0xLRU5fU0dYX0VOX1NHWF9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9TR1hfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMyX0NMS1NFTF9TR1hfTUFTSywKLQkuY2xrc2VsCQk9IHNneF9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAic2d4X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc2d4X2ljayA9IHsKLQkubmFtZQkJPSAic2d4X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsM19pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfU0dYX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0NNX0lDTEtFTl9TR1hfRU5fU0dYX1NISUZULAotCS5jbGtkbV9uYW1lCT0gInNneF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIENPUkUgcG93ZXIgZG9tYWluICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGQyZF8yNm1fZmNrID0gewotCS5uYW1lCQk9ICJkMmRfMjZtX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fRDJEX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImQyZF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1vZGVtX2ZjayA9IHsKLQkubmFtZQkJPSAibW9kZW1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnN5c19jaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NT0RFTV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJkMmRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzYWQyZF9pY2sgPSB7Ci0JLm5hbWUJCT0gInNhZDJkX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsM19pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU0FEMkRfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiZDJkX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWFkMmRfaWNrID0gewotCS5uYW1lCQk9ICJtYWQyZF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmbDNfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4zKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01BRDJEX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImQyZF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG9tYXAzNDN4X2dwdF9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmb21hcF8zMmtfZmNrLCAucmF0ZXMgPSBncHRfMzJrX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJnN5c19jaywJICAgLnJhdGVzID0gZ3B0X3N5c19yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEx9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQxMF9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDEwX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxMF9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMTBfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDExX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0MTFfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnN5c19jaywKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDExX1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQxMV9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY3BlZnVzZV9mY2sgPSB7Ci0JLm5hbWUJCT0gImNwZWZ1c2VfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTjMpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fQ1BFRlVTRV9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdHNfZmNrID0gewotCS5uYW1lCQk9ICJ0c19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJm9tYXBfMzJrX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDM0MzBFUzJfQ01fRkNMS0VOMyksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9UU19TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNidGxsX2ZjayA9IHsKLQkubmFtZQkJPSAidXNidGxsX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLnBhcmVudAkJPSAmZHBsbDVfbTJfY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTjMpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCVExMX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBDT1JFIDk2TSBGQ0xLLWRlcml2ZWQgY2xvY2tzICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfOTZtX2ZjayA9IHsKLQkubmFtZQkJPSAiY29yZV85Nm1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZvbWFwXzk2bV9mY2ssCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzM19mY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY2hzX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMiwKLQkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fTU1DM19TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ZjayA9IHsKLQkubmFtZQkJPSAibW1jaHNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NTUMyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtc3Byb19mY2sgPSB7Ci0JLm5hbWUJCT0gIm1zcHJvX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTVNQUk9fU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9mY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY2hzX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTU1DMV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaTJjM19mY2sgPSB7Ci0JLm5hbWUJCT0gImkyY19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDMsCi0JLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfZmNrID0gewotCS5uYW1lCQk9ICJpMmNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAyLAotCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBpMmMxX2ZjayA9IHsKLQkubmFtZQkJPSAiaTJjX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMSwKLQkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDMV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyoKLSAqIE1DQlNQIDEgJiA1IGdldCB0aGVpciA5Nk1IeiBjbG9jayBmcm9tIGNvcmVfOTZtX2ZjazsKLSAqIE1DQlNQIDIsIDMsIDQgZ2V0IHRoZWlyIDk2TUh6IGNsb2NrIGZyb20gcGVyXzk2bV9mY2suCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29tbW9uX21jYnNwXzk2bV9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY29tbW9uX21jYnNwX21jYnNwX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbWNic3BfMTVfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmVfOTZtX2ZjaywgLnJhdGVzID0gY29tbW9uX21jYnNwXzk2bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZtY2JzcF9jbGtzLCAgIC5yYXRlcyA9IGNvbW1vbl9tY2JzcF9tY2JzcF9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfQotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNic3A1X2ZjayA9IHsKLQkubmFtZQkJPSAibWNic3BfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSA1LAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A1X1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKE9NQVAzNDNYX0NPTlRST0xfREVWQ09ORjEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyX01DQlNQNV9DTEtTX01BU0ssCi0JLmNsa3NlbAkJPSBtY2JzcF8xNV9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMV9mY2sgPSB7Ci0JLm5hbWUJCT0gIm1jYnNwX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMSwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQMV9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVAzNDNYX0NUUkxfUkVHQUREUihPTUFQMl9DT05UUk9MX0RFVkNPTkYwKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMl9NQ0JTUDFfQ0xLU19NQVNLLAotCS5jbGtzZWwJCT0gbWNic3BfMTVfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi0vKiBDT1JFXzQ4TV9GQ0stZGVyaXZlZCBjbG9ja3MgKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgY29yZV80OG1fZmNrID0gewotCS5uYW1lCQk9ICJjb3JlXzQ4bV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm9tYXBfNDhtX2ZjaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNzcGk0X2ZjayA9IHsKLQkubmFtZQkJPSAibWNzcGlfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSA0LAotCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTRfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19mY2sgPSB7Ci0JLm5hbWUJCT0gIm1jc3BpX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMywKLQkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkzX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfZmNrID0gewotCS5uYW1lCQk9ICJtY3NwaV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDIsCi0JLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJMl9TSElGVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ZjayA9IHsKLQkubmFtZQkJPSAibWNzcGlfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTFfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ZjayA9IHsKLQkubmFtZQkJPSAidWFydDJfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUMl9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfZmNrID0gewotCS5uYW1lCQk9ICJ1YXJ0MV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQxX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBmc2hvc3R1c2JfZmNrID0gewotCS5uYW1lCQk9ICJmc2hvc3R1c2JfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl9GU0hPU1RVU0JfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIENPUkVfMTJNX0ZDSyBiYXNlZCBjbG9ja3MgKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgY29yZV8xMm1fZmNrID0gewotCS5uYW1lCQk9ICJjb3JlXzEybV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm9tYXBfMTJtX2ZjaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ZjayA9IHsKLQkubmFtZQkJPSAiaGRxX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlXzEybV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSERRX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBEUExMMy1kZXJpdmVkIGNsb2NrICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgc3NpX3Nzcl9jb3JleDJfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAwIH0KLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHNzaV9zc3JfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmNvcmV4Ml9mY2ssIC5yYXRlcyA9IHNzaV9zc3JfY29yZXgyX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9Ci19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzc2lfc3NyX2Zja18zNDMwZXMxID0gewotCS5uYW1lCQk9ICJzc2lfc3NyX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TU0lfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1NTSV9NQVNLLAotCS5jbGtzZWwJCT0gc3NpX3Nzcl9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9zc3JfZmNrXzM0MzBlczIgPSB7Ci0JLm5hbWUJCT0gInNzaV9zc3JfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfc3NpX3dhaXQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TU0lfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1NTSV9NQVNLLAotCS5jbGtzZWwJCT0gc3NpX3Nzcl9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9zc3RfZmNrXzM0MzBlczEgPSB7Ci0JLm5hbWUJCT0gInNzaV9zc3RfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZzc2lfc3NyX2Zja18zNDMwZXMxLAotCS5maXhlZF9kaXYJPSAyLAotCS5yZWNhbGMJCT0gJm9tYXAyX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgc3NpX3NzdF9mY2tfMzQzMGVzMiA9IHsKLQkubmFtZQkJPSAic3NpX3NzdF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJnNzaV9zc3JfZmNrXzM0MzBlczIsCi0JLmZpeGVkX2Rpdgk9IDIsCi0JLnJlY2FsYwkJPSAmb21hcDJfZml4ZWRfZGl2aXNvcl9yZWNhbGMsCi19OwotCi0KLQotLyogQ09SRV9MM19JQ0sgYmFzZWQgY2xvY2tzICovCi0KLS8qCi0gKiBYWFggbXVzdCBhZGQgY2xrX2VuYWJsZS9jbGtfZGlzYWJsZSBmb3IgdGhlc2UgaWYgc3RhbmRhcmQgY29kZSB3b24ndAotICogaGFuZGxlIGl0Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfbDNfaWNrID0gewotCS5uYW1lCQk9ICJjb3JlX2wzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmbDNfaWNrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBoc290Z3VzYl9pY2tfMzQzMGVzMSA9IHsKLQkubmFtZQkJPSAiaHNvdGd1c2JfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IU09UR1VTQl9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaHNvdGd1c2JfaWNrXzM0MzBlczIgPSB7Ci0JLm5hbWUJCT0gImhzb3RndXNiX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAzNDMwZXMyX2hzb3RndXNiX3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9sM19pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSFNPVEdVU0JfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNkcmNfaWNrID0gewotCS5uYW1lCQk9ICJzZHJjX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TRFJDX1NISUZULAotCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BtY19mY2sgPSB7Ci0JLm5hbWUJCT0gImdwbWNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKLQkuZmxhZ3MJCT0gRU5BQkxFX09OX0lOSVQsIC8qIGh1aD8gKi8KLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogU0VDVVJJVFlfTDNfSUNLIGJhc2VkIGNsb2NrcyAqLwotCi1zdGF0aWMgc3RydWN0IGNsayBzZWN1cml0eV9sM19pY2sgPSB7Ci0JLm5hbWUJCT0gInNlY3VyaXR5X2wzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmbDNfaWNrLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBwa2FfaWNrID0gewotCS5uYW1lCQk9ICJwa2FfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2wzX2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9QS0FfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIENPUkVfTDRfSUNLIGJhc2VkIGNsb2NrcyAqLwotCi1zdGF0aWMgc3RydWN0IGNsayBjb3JlX2w0X2ljayA9IHsKLQkubmFtZQkJPSAiY29yZV9sNF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJmw0X2ljaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNidGxsX2ljayA9IHsKLQkubmFtZQkJPSAidXNidGxsX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMyksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JUTExfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzM19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY2hzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMiwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9NTUMzX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBJbnRlcnN5c3RlbSBDb21tdW5pY2F0aW9uIFJlZ2lzdGVycyAtIGNoYXNzaXMgbW9kZSBvbmx5ICovCi1zdGF0aWMgc3RydWN0IGNsayBpY3JfaWNrID0gewotCS5uYW1lCQk9ICJpY3JfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0lDUl9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYWVzMl9pY2sgPSB7Ci0JLm5hbWUJCT0gImFlczJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0FFUzJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNoYTEyX2ljayA9IHsKLQkubmFtZQkJPSAic2hhMTJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NIQTEyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkZXMyX2ljayA9IHsKLQkubmFtZQkJPSAiZGVzMl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fREVTMl9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ljayA9IHsKLQkubmFtZQkJPSAibW1jaHNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9pY2sgPSB7Ci0JLm5hbWUJCT0gIm1tY2hzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NTUMxX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtc3Byb19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1zcHJvX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NU1BST19TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaGRxX2ljayA9IHsKLQkubmFtZQkJPSAiaGRxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IRFFfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpNF9pY2sgPSB7Ci0JLm5hbWUJCT0gIm1jc3BpX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gNCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTRfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19pY2sgPSB7Ci0JLm5hbWUJCT0gIm1jc3BpX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMywKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9pY2sgPSB7Ci0JLm5hbWUJCT0gIm1jc3BpX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMiwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMV9pY2sgPSB7Ci0JLm5hbWUJCT0gIm1jc3BpX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMSwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTFfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzNfaWNrID0gewotCS5uYW1lCQk9ICJpMmNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAzLAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzJfaWNrID0gewotCS5uYW1lCQk9ICJpMmNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAyLAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfaWNrID0gewotCS5uYW1lCQk9ICJpMmNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAxLAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzFfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ljayA9IHsKLQkubmFtZQkJPSAidWFydDJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9pY2sgPSB7Ci0JLm5hbWUJCT0gInVhcnQxX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUMV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfaWNrID0gewotCS5uYW1lCQk9ICJncHQxMV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTFfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEwX2ljayA9IHsKLQkubmFtZQkJPSAiZ3B0MTBfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDEwX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDUsCi0JLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A1X1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDEsCi0JLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1AxX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBmYWNfaWNrID0gewotCS5uYW1lCQk9ICJmYWNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOX0ZBQ19TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWFpbGJveGVzX2ljayA9IHsKLQkubmFtZQkJPSAibWFpbGJveGVzX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQUlMQk9YRVNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBjdHJsX2ljayA9IHsKLQkubmFtZQkJPSAib21hcGN0cmxfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX09NQVBDVFJMX1NISUZULAotCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogU1NJX0w0X0lDSyBiYXNlZCBjbG9ja3MgKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgc3NpX2w0X2ljayA9IHsKLQkubmFtZQkJPSAic3NpX2w0X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmbDRfaWNrLAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzc2lfaWNrXzM0MzBlczEgPSB7Ci0JLm5hbWUJCT0gInNzaV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJnNzaV9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU1NJX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzc2lfaWNrXzM0MzBlczIgPSB7Ci0JLm5hbWUJCT0gInNzaV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMzQzMGVzMl9zc2lfd2FpdCwKLQkucGFyZW50CQk9ICZzc2lfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NTSV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogUkVWSVNJVDogVGVjaG5pY2FsbHkgdGhlIFRSTSBjbGFpbXMgdGhhdCB0aGlzIGlzIENPUkVfQ0xLIGJhc2VkLAotICogYnV0IGw0X2ljayBtYWtlcyBtb3JlIHNlbnNlIHRvIG1lICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHVzYl9sNF9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmbDRfaWNrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdXNiX2w0X2ljayA9IHsKLQkubmFtZQkJPSAidXNiX2w0X2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9pY2ssCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl9GU0hPU1RVU0JfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBFUzFfQ0xLU0VMX0ZTSE9TVFVTQl9NQVNLLAotCS5jbGtzZWwJCT0gdXNiX2w0X2Nsa3NlbCwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotLyogU0VDVVJJVFlfTDRfSUNLMiBiYXNlZCBjbG9ja3MgKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgc2VjdXJpdHlfbDRfaWNrMiA9IHsKLQkubmFtZQkJPSAic2VjdXJpdHlfbDRfaWNrMiIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLnBhcmVudAkJPSAmbDRfaWNrLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBhZXMxX2ljayA9IHsKLQkubmFtZQkJPSAiYWVzMV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmc2VjdXJpdHlfbDRfaWNrMiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9BRVMxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBybmdfaWNrID0gewotCS5uYW1lCQk9ICJybmdfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2w0X2ljazIsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fUk5HX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBzaGExMV9pY2sgPSB7Ci0JLm5hbWUJCT0gInNoYTExX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZzZWN1cml0eV9sNF9pY2syLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NIQTExX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBkZXMxX2ljayA9IHsKLQkubmFtZQkJPSAiZGVzMV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmc2VjdXJpdHlfbDRfaWNrMiwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9ERVMxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBEU1MgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzczFfYWx3b25fZmNrXzM0MzBlczEgPSB7Ci0JLm5hbWUJCT0gImRzczFfYWx3b25fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZkcGxsNF9tNHgyX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9EU1MxX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzczFfYWx3b25fZmNrXzM0MzBlczIgPSB7Ci0JLm5hbWUJCT0gImRzczFfYWx3b25fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdCwKLQkucGFyZW50CQk9ICZkcGxsNF9tNHgyX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9EU1MxX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzc190dl9mY2sgPSB7Ci0JLm5hbWUJCT0gImRzc190dl9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJm9tYXBfNTRtX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVFZfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZHNzXzk2bV9mY2sgPSB7Ci0JLm5hbWUJCT0gImRzc185Nm1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZvbWFwXzk2bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1RWX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzczJfYWx3b25fZmNrID0gewotCS5uYW1lCQk9ICJkc3MyX2Fsd29uX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLnBhcmVudAkJPSAmc3lzX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9EU1MyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzc19pY2tfMzQzMGVzMSA9IHsKLQkvKiBIYW5kbGVzIGJvdGggTDMgYW5kIEw0IGNsb2NrcyAqLwotCS5uYW1lCQk9ICJkc3NfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZsNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NNX0lDTEtFTl9EU1NfRU5fRFNTX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGRzc19pY2tfMzQzMGVzMiA9IHsKLQkvKiBIYW5kbGVzIGJvdGggTDMgYW5kIEw0IGNsb2NrcyAqLwotCS5uYW1lCQk9ICJkc3NfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NNX0lDTEtFTl9EU1NfRU5fRFNTX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImRzc19jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLS8qIENBTSAqLwotCi1zdGF0aWMgc3RydWN0IGNsayBjYW1fbWNsayA9IHsKLQkubmFtZQkJPSAiY2FtX21jbGsiLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJmRwbGw0X201eDJfY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfQ0FNX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0NBTV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJjYW1fY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjYW1faWNrID0gewotCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCi0JLm5hbWUJCT0gImNhbV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJmw0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9DQU1fTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fQ0FNX1NISUZULAotCS5jbGtkbV9uYW1lCT0gImNhbV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNzaTJfOTZtX2ZjayA9IHsKLQkubmFtZQkJPSAiY3NpMl85Nm1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfQ0FNX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0NTSTJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAiY2FtX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogVVNCSE9TVCAtIDM0MzBFUzIgb25seSAqLwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2Job3N0XzEyMG1fZmNrID0gewotCS5uYW1lCQk9ICJ1c2Job3N0XzEyMG1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZkcGxsNV9tMl9jaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1QyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB1c2Job3N0XzQ4bV9mY2sgPSB7Ci0JLm5hbWUJCT0gInVzYmhvc3RfNDhtX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAzNDMwZXMyX2Rzc191c2Job3N0X3dhaXQsCi0JLnBhcmVudAkJPSAmb21hcF80OG1fZmNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCSE9TVDFfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAidXNiaG9zdF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhvc3RfaWNrID0gewotCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCi0JLm5hbWUJCT0gInVzYmhvc3RfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdCwKLQkucGFyZW50CQk9ICZsNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JIT1NUX1NISUZULAotCS5jbGtkbV9uYW1lCT0gInVzYmhvc3RfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBXS1VQICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdXNpbV85Nm1fcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAyLCAgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDQsICAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gOCwgIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAxMCwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdXNpbV8xMjBtX3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gNCwgIC52YWwgPSA3LAkuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSA4LCAgLnZhbCA9IDgsCS5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDE2LCAudmFsID0gOSwJLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMjAsIC52YWwgPSAxMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdXNpbV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmb21hcF85Nm1fZmNrLAkucmF0ZXMgPSB1c2ltXzk2bV9yYXRlcyB9LAotCXsgLnBhcmVudCA9ICZkcGxsNV9tMl9jaywJLnJhdGVzID0gdXNpbV8xMjBtX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJnN5c19jaywJCS5yYXRlcyA9IGRpdjJfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0sCi19OwotCi0vKiAzNDMwRVMyIG9ubHkgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzaW1fZmNrID0gewotCS5uYW1lCQk9ICJ1c2ltX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNJTU9DUF9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMEVTMl9DTEtTRUxfVVNJTU9DUF9NQVNLLAotCS5jbGtzZWwJCT0gdXNpbV9jbGtzZWwsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIFhYWCBzaG91bGQgZ3B0MSdzIGNsa3NlbCBoYXZlIHdrdXBfMzJrX2ZjayBhcyB0aGUgMzJrIG9wdD8gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDFfZmNrID0gewotCS5uYW1lCQk9ICJncHQxX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMV9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMV9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgd2t1cF8zMmtfZmNrID0gewotCS5uYW1lCQk9ICJ3a3VwXzMya19mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm9tYXBfMzJrX2ZjaywKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzFfZGJjayA9IHsKLQkubmFtZQkJPSAiZ3BpbzFfZGJjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLnBhcmVudAkJPSAmd2t1cF8zMmtfZmNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzFfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDJfZmNrID0gewotCS5uYW1lCQk9ICJ3ZHQyX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZ3a3VwXzMya19mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB3a3VwX2w0X2ljayA9IHsKLQkubmFtZQkJPSAid2t1cF9sNF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJnN5c19jaywKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogMzQzMEVTMiBvbmx5ICovCi0vKiBOZXZlciBzcGVjaWZpY2FsbHkgbmFtZWQgaW4gdGhlIFRSTSwgc28gd2UgaGF2ZSB0byBpbmZlciBhIGxpa2VseSBuYW1lICovCi1zdGF0aWMgc3RydWN0IGNsayB1c2ltX2ljayA9IHsKLQkubmFtZQkJPSAidXNpbV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0lNT0NQX1NISUZULAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB3ZHQyX2ljayA9IHsKLQkubmFtZQkJPSAid2R0Ml9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQyX1NISUZULAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB3ZHQxX2ljayA9IHsKLQkubmFtZQkJPSAid2R0MV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQxX1NISUZULAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncGlvMV9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW8xX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZ3a3VwX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8xX1NISUZULAotCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBvbWFwXzMya3N5bmNfaWNrID0gewotCS5uYW1lCQk9ICJvbWFwXzMya3N5bmNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fMzJLU1lOQ19TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogWFhYIFRoaXMgY2xvY2sgbm8gbG9uZ2VyIGV4aXN0cyBpbiAzNDMwIFRSTSByZXYgRiAqLwotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfaWNrID0gewotCS5uYW1lCQk9ICJncHQxMl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxMl9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDFfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMV9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotCi0KLS8qIFBFUiBjbG9jayBkb21haW4gKi8KLQotc3RhdGljIHN0cnVjdCBjbGsgcGVyXzk2bV9mY2sgPSB7Ci0JLm5hbWUJCT0gInBlcl85Nm1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZvbWFwXzk2bV9hbHdvbl9mY2ssCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcGVyXzQ4bV9mY2sgPSB7Ci0JLm5hbWUJCT0gInBlcl80OG1fZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfZmNrID0gewotCS5uYW1lCQk9ICJ1YXJ0M19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyXzQ4bV9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQzX1NISUZULAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfZmNrID0gewotCS5uYW1lCQk9ICJncHQyX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQyX1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDJfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDNfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDNfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUM19NQVNLLAotCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ0X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0NF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNF9TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQ0X01BU0ssCi0JLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfZmNrID0gewotCS5uYW1lCQk9ICJncHQ1X2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ1X1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDVfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDZfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDZfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUNl9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncHQ3X2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0N19mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUN19TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9DTEtTRUwpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQ3X01BU0ssCi0JLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfZmNrID0gewotCS5uYW1lCQk9ICJncHQ4X2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ4X1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDhfTUFTSywKLQkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9mY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDlfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDlfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUOV9NQVNLLAotCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBwZXJfMzJrX2Fsd29uX2ZjayA9IHsKLQkubmFtZQkJPSAicGVyXzMya19hbHdvbl9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5wYXJlbnQJCT0gJm9tYXBfMzJrX2ZjaywKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncGlvNl9kYmNrID0gewotCS5uYW1lCQk9ICJncGlvNl9kYmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzZfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfZGJjayA9IHsKLQkubmFtZQkJPSAiZ3BpbzVfZGJjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU81X1NISUZULAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW80X2RiY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW80X2RiY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAotCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNF9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBncGlvM19kYmNrID0gewotCS5uYW1lCQk9ICJncGlvM19kYmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKLQkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzJfZGJjayA9IHsKLQkubmFtZQkJPSAiZ3BpbzJfZGJjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCi0JLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU8yX1NISUZULAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHdkdDNfZmNrID0gewotCS5uYW1lCQk9ICJ3ZHQzX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fV0RUM19TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBwZXJfbDRfaWNrID0gewotCS5uYW1lCQk9ICJwZXJfbDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZsNF9pY2ssCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzZfaWNrID0gewotCS5uYW1lCQk9ICJncGlvNl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzZfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfaWNrID0gewotCS5uYW1lCQk9ICJncGlvNV9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzVfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzRfaWNrID0gewotCS5uYW1lCQk9ICJncGlvNF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzRfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzNfaWNrID0gewotCS5uYW1lCQk9ICJncGlvM19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzJfaWNrID0gewotCS5uYW1lCQk9ICJncGlvMl9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgd2R0M19pY2sgPSB7Ci0JLm5hbWUJCT0gIndkdDNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgdWFydDNfaWNrID0gewotCS5uYW1lCQk9ICJ1YXJ0M19pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0OV9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDlfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDlfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDhfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDhfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0N19pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDdfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDdfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDZfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDZfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDVfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDVfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDRfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0M19pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDNfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDNfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9pY2sgPSB7Ci0JLm5hbWUJCT0gImdwdDJfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDJfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ljayA9IHsKLQkubmFtZQkJPSAibWNic3BfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAyLAotCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQMl9TSElGVCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfaWNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9pY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDMsCi0JLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1AzX1NISUZULAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNF9pY2sgPSB7Ci0JLm5hbWUJCT0gIm1jYnNwX2ljayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gNCwKLQkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDRfU0hJRlQsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgbWNic3BfMjM0X2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZwZXJfOTZtX2ZjaywgIC5yYXRlcyA9IGNvbW1vbl9tY2JzcF85Nm1fcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmbWNic3BfY2xrcywgICAucmF0ZXMgPSBjb21tb25fbWNic3BfbWNic3BfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMl9mY2sgPSB7Ci0JLm5hbWUJCT0gIm1jYnNwX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkuaWQJCT0gMiwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDJfU0hJRlQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDJfQ09OVFJPTF9ERVZDT05GMCksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1AyX0NMS1NfTUFTSywKLQkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgbWNic3AzX2ZjayA9IHsKLQkubmFtZQkJPSAibWNic3BfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAotCS5pZAkJPSAzLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKLQkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQM19TSElGVCwKLQkuY2xrc2VsX3JlZwk9IE9NQVAzNDNYX0NUUkxfUkVHQUREUihPTUFQMzQzWF9DT05UUk9MX0RFVkNPTkYxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMl9NQ0JTUDNfQ0xLU19NQVNLLAotCS5jbGtzZWwJCT0gbWNic3BfMjM0X2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfZmNrID0gewotCS5uYW1lCQk9ICJtY2JzcF9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLmlkCQk9IDQsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNCU1A0X1NISUZULAotCS5jbGtzZWxfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKE9NQVAzNDNYX0NPTlRST0xfREVWQ09ORjEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAyX01DQlNQNF9DTEtTX01BU0ssCi0JLmNsa3NlbAkJPSBtY2JzcF8yMzRfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLS8qIEVNVSBjbG9ja3MgKi8KLQotLyogTW9yZSBpbmZvcm1hdGlvbjogQVJNIENvcnRleC1BOCBUZWNobmljYWwgUmVmZXJlbmNlIE1hbnVhbCwgc2VjdCAxMC4xICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZW11X3NyY19zeXNfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBlbXVfc3JjX2NvcmVfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBlbXVfc3JjX3Blcl9yYXRlc1tdID0gewotCXsgLmRpdiA9IDEsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGVtdV9zcmNfbXB1X3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGVtdV9zcmNfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJnN5c19jaywJCS5yYXRlcyA9IGVtdV9zcmNfc3lzX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gJmVtdV9jb3JlX2Fsd29uX2NrLCAucmF0ZXMgPSBlbXVfc3JjX2NvcmVfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZW11X3Blcl9hbHdvbl9jaywJLnJhdGVzID0gZW11X3NyY19wZXJfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSAmZW11X21wdV9hbHdvbl9jaywJLnJhdGVzID0gZW11X3NyY19tcHVfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0sCi19OwotCi0vKgotICogTGlrZSB0aGUgY2xrb3V0X3NyYyBjbG9ja3MsIGVtdV9zcmNfY2xrIGlzIGEgdmlydHVhbCBjbG9jaywgZXhpc3Rpbmcgb25seQotICogdG8gc3dpdGNoIHRoZSBzb3VyY2Ugb2Ygc29tZSBvZiB0aGUgRU1VIGNsb2Nrcy4KLSAqIFhYWCBBcmUgdGhlcmUgQ0xLRU4gYml0cyBmb3IgdGhlc2UgRU1VIGNsa3M/Ci0gKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGVtdV9zcmNfY2sgPSB7Ci0JLm5hbWUJCT0gImVtdV9zcmNfY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfTVVYX0NUUkxfTUFTSywKLQkuY2xrc2VsCQk9IGVtdV9zcmNfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgcGNsa19lbXVfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgcGNsa19lbXVfY2xrc2VsW10gPSB7Ci0JeyAucGFyZW50ID0gJmVtdV9zcmNfY2ssIC5yYXRlcyA9IHBjbGtfZW11X3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgcGNsa19mY2sgPSB7Ci0JLm5hbWUJCT0gInBjbGtfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAotCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAotCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9QQ0xLX01BU0ssCi0JLmNsa3NlbAkJPSBwY2xrX2VtdV9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBwY2xreDJfZW11X3JhdGVzW10gPSB7Ci0JeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAotCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCi0JeyAuZGl2ID0gMCB9LAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgcGNsa3gyX2VtdV9jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmZW11X3NyY19jaywgLnJhdGVzID0gcGNsa3gyX2VtdV9yYXRlcyB9LAotCXsgLnBhcmVudCA9IE5VTEwgfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHBjbGt4Ml9mY2sgPSB7Ci0JLm5hbWUJCT0gInBjbGt4Ml9mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1BDTEtYMl9NQVNLLAotCS5jbGtzZWwJCT0gcGNsa3gyX2VtdV9jbGtzZWwsCi0JLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgYXRjbGtfZW11X2Nsa3NlbFtdID0gewotCXsgLnBhcmVudCA9ICZlbXVfc3JjX2NrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCi0JeyAucGFyZW50ID0gTlVMTCB9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgYXRjbGtfZmNrID0gewotCS5uYW1lCQk9ICJhdGNsa19mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0FUQ0xLX01BU0ssCi0JLmNsa3NlbAkJPSBhdGNsa19lbXVfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHRyYWNlY2xrX3NyY19mY2sgPSB7Ci0JLm5hbWUJCT0gInRyYWNlY2xrX3NyY19mY2siLAotCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCi0JLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCi0JLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfVFJBQ0VfTVVYX0NUUkxfTUFTSywKLQkuY2xrc2VsCQk9IGVtdV9zcmNfY2xrc2VsLAotCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCi0JLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgdHJhY2VjbGtfcmF0ZXNbXSA9IHsKLQl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCi0JeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAotCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKLQl7IC5kaXYgPSAwIH0sCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB0cmFjZWNsa19jbGtzZWxbXSA9IHsKLQl7IC5wYXJlbnQgPSAmdHJhY2VjbGtfc3JjX2ZjaywgLnJhdGVzID0gdHJhY2VjbGtfcmF0ZXMgfSwKLQl7IC5wYXJlbnQgPSBOVUxMIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayB0cmFjZWNsa19mY2sgPSB7Ci0JLm5hbWUJCT0gInRyYWNlY2xrX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKLQkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKLQkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfVFJBQ0VDTEtfTUFTSywKLQkuY2xrc2VsCQk9IHRyYWNlY2xrX2Nsa3NlbCwKLQkuY2xrZG1fbmFtZQk9ICJlbXVfY2xrZG0iLAotCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi19OwotCi0vKiBTUiBjbG9ja3MgKi8KLQotLyogU21hcnRSZWZsZXggZmNsayAoVkREMSkgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNyMV9mY2sgPSB7Ci0JLm5hbWUJCT0gInNyMV9mY2siLAotCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCi0JLnBhcmVudAkJPSAmc3lzX2NrLAotCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9GQ0xLRU4pLAotCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU1IxX1NISUZULAotCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi19OwotCi0vKiBTbWFydFJlZmxleCBmY2xrIChWREQyKSAqLwotc3RhdGljIHN0cnVjdCBjbGsgc3IyX2ZjayA9IHsKLQkubmFtZQkJPSAic3IyX2ZjayIsCi0JLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKLQkucGFyZW50CQk9ICZzeXNfY2ssCi0JLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCi0JLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TUjJfU0hJRlQsCi0JLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHNyX2w0X2ljayA9IHsKLQkubmFtZQkJPSAic3JfbDRfaWNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwgLyogUk1LOiBtaXNzaW5nPyAqLwotCS5wYXJlbnQJCT0gJmw0X2ljaywKLQkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotLyogU0VDVVJFXzMyS19GQ0sgY2xvY2tzICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEyX2ZjayA9IHsKLQkubmFtZQkJPSAiZ3B0MTJfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZzZWN1cmVfMzJrX2ZjaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgd2R0MV9mY2sgPSB7Ci0JLm5hbWUJCT0gIndkdDFfZmNrIiwKLQkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkucGFyZW50CQk9ICZzZWN1cmVfMzJrX2ZjaywKLQkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotfTsKLQotCi0vKgotICogY2xrZGV2Ci0gKi8KLQotc3RhdGljIHN0cnVjdCBvbWFwX2NsayBvbWFwMzR4eF9jbGtzW10gPSB7Ci0JQ0xLKE5VTEwsCSJvbWFwXzMya19mY2siLAkmb21hcF8zMmtfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInZpcnRfMTJtX2NrIiwJJnZpcnRfMTJtX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInZpcnRfMTNtX2NrIiwJJnZpcnRfMTNtX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInZpcnRfMTZfOG1fY2siLCAmdmlydF8xNl84bV9jaywgQ0tfMzQzMEVTMiksCi0JQ0xLKE5VTEwsCSJ2aXJ0XzE5XzJtX2NrIiwgJnZpcnRfMTlfMm1fY2ssIENLXzM0M1gpLAotCUNMSyhOVUxMLAkidmlydF8yNm1fY2siLAkmdmlydF8yNm1fY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkidmlydF8zOF80bV9jayIsICZ2aXJ0XzM4XzRtX2NrLCBDS18zNDNYKSwKLQlDTEsoTlVMTCwJIm9zY19zeXNfY2siLAkmb3NjX3N5c19jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzeXNfY2siLAkmc3lzX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInN5c19hbHRjbGsiLAkmc3lzX2FsdGNsaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJtY2JzcF9jbGtzIiwJJm1jYnNwX2Nsa3MsCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkic3lzX2Nsa291dDEiLAkmc3lzX2Nsa291dDEsCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDFfY2siLAkmZHBsbDFfY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDFfeDJfY2siLAkmZHBsbDFfeDJfY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDFfeDJtMl9jayIsICZkcGxsMV94Mm0yX2NrLCBDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGwyX2NrIiwJJmRwbGwyX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGwyX20yX2NrIiwJJmRwbGwyX20yX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGwzX2NrIiwJJmRwbGwzX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImNvcmVfY2siLAkmY29yZV9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsM194Ml9jayIsCSZkcGxsM194Ml9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsM19tMl9jayIsCSZkcGxsM19tMl9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsM19tMngyX2NrIiwgJmRwbGwzX20yeDJfY2ssIENLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDNfbTNfY2siLAkmZHBsbDNfbTNfY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDNfbTN4Ml9jayIsICZkcGxsM19tM3gyX2NrLCBDS18zNDNYKSwKLQlDTEsoImV0YiIsCSJlbXVfY29yZV9hbHdvbl9jayIsICZlbXVfY29yZV9hbHdvbl9jaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsNF9jayIsCSZkcGxsNF9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsNF94Ml9jayIsCSZkcGxsNF94Ml9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJvbWFwXzk2bV9hbHdvbl9mY2siLCAmb21hcF85Nm1fYWx3b25fZmNrLCBDS18zNDNYKSwKLQlDTEsoTlVMTCwJIm9tYXBfOTZtX2ZjayIsCSZvbWFwXzk2bV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiY21fOTZtX2ZjayIsCSZjbV85Nm1fZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJIm9tYXBfNTRtX2ZjayIsCSZvbWFwXzU0bV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkib21hcF80OG1fZmNrIiwJJm9tYXBfNDhtX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJvbWFwXzEybV9mY2siLAkmb21hcF8xMm1fZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGw0X20yX2NrIiwJJmRwbGw0X20yX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGw0X20yeDJfY2siLCAmZHBsbDRfbTJ4Ml9jaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsNF9tM19jayIsCSZkcGxsNF9tM19jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsNF9tM3gyX2NrIiwgJmRwbGw0X20zeDJfY2ssIENLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDRfbTRfY2siLAkmZHBsbDRfbTRfY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDRfbTR4Ml9jayIsICZkcGxsNF9tNHgyX2NrLCBDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGw0X201X2NrIiwJJmRwbGw0X201X2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGw0X201eDJfY2siLCAmZHBsbDRfbTV4Ml9jaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsNF9tNl9jayIsCSZkcGxsNF9tNl9jaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsNF9tNngyX2NrIiwgJmRwbGw0X202eDJfY2ssIENLXzM0M1gpLAotCUNMSygiZXRiIiwJImVtdV9wZXJfYWx3b25fY2siLCAmZW11X3Blcl9hbHdvbl9jaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkcGxsNV9jayIsCSZkcGxsNV9jaywJQ0tfMzQzMEVTMiksCi0JQ0xLKE5VTEwsCSJkcGxsNV9tMl9jayIsCSZkcGxsNV9tMl9jaywJQ0tfMzQzMEVTMiksCi0JQ0xLKE5VTEwsCSJjbGtvdXQyX3NyY19jayIsICZjbGtvdXQyX3NyY19jaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzeXNfY2xrb3V0MiIsCSZzeXNfY2xrb3V0MiwJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJjb3JleDJfZmNrIiwJJmNvcmV4Ml9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZHBsbDFfZmNrIiwJJmRwbGwxX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJtcHVfY2siLAkmbXB1X2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImFybV9mY2siLAkmYXJtX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKCJldGIiLAkiZW11X21wdV9hbHdvbl9jayIsICZlbXVfbXB1X2Fsd29uX2NrLCBDS18zNDNYKSwKLQlDTEsoTlVMTCwJImRwbGwyX2ZjayIsCSZkcGxsMl9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiaXZhMl9jayIsCSZpdmEyX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImwzX2ljayIsCSZsM19pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkibDRfaWNrIiwJJmw0X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJybV9pY2siLAkmcm1faWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdmeF9sM19jayIsCSZnZnhfbDNfY2ssCUNLXzM0MzBFUzEpLAotCUNMSyhOVUxMLAkiZ2Z4X2wzX2ZjayIsCSZnZnhfbDNfZmNrLAlDS18zNDMwRVMxKSwKLQlDTEsoTlVMTCwJImdmeF9sM19pY2siLAkmZ2Z4X2wzX2ljaywJQ0tfMzQzMEVTMSksCi0JQ0xLKE5VTEwsCSJnZnhfY2cxX2NrIiwJJmdmeF9jZzFfY2ssCUNLXzM0MzBFUzEpLAotCUNMSyhOVUxMLAkiZ2Z4X2NnMl9jayIsCSZnZnhfY2cyX2NrLAlDS18zNDMwRVMxKSwKLQlDTEsoTlVMTCwJInNneF9mY2siLAkmc2d4X2ZjaywJQ0tfMzQzMEVTMiksCi0JQ0xLKE5VTEwsCSJzZ3hfaWNrIiwJJnNneF9pY2ssCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkiZDJkXzI2bV9mY2siLAkmZDJkXzI2bV9mY2ssCUNLXzM0MzBFUzEpLAotCUNMSyhOVUxMLAkibW9kZW1fZmNrIiwJJm1vZGVtX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzYWQyZF9pY2siLAkmc2FkMmRfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJIm1hZDJkX2ljayIsCSZtYWQyZF9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0MTBfZmNrIiwJJmdwdDEwX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQxMV9mY2siLAkmZ3B0MTFfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImNwZWZ1c2VfZmNrIiwJJmNwZWZ1c2VfZmNrLAlDS18zNDMwRVMyKSwKLQlDTEsoTlVMTCwJInRzX2ZjayIsCSZ0c19mY2ssCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkidXNidGxsX2ZjayIsCSZ1c2J0bGxfZmNrLAlDS18zNDMwRVMyKSwKLQlDTEsoTlVMTCwJImNvcmVfOTZtX2ZjayIsCSZjb3JlXzk2bV9mY2ssCUNLXzM0M1gpLAotCUNMSygibW1jaS1vbWFwLWhzLjIiLAkiZmNrIiwJJm1tY2hzM19mY2ssCUNLXzM0MzBFUzIpLAotCUNMSygibW1jaS1vbWFwLWhzLjEiLAkiZmNrIiwJJm1tY2hzMl9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkibXNwcm9fZmNrIiwJJm1zcHJvX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMCIsCSJmY2siLAkmbW1jaHMxX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKCJpMmNfb21hcC4zIiwgImZjayIsCSZpMmMzX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKCJpMmNfb21hcC4yIiwgImZjayIsCSZpMmMyX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKCJpMmNfb21hcC4xIiwgImZjayIsCSZpMmMxX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjUiLCAiZmNrIiwJJm1jYnNwNV9mY2ssCUNLXzM0M1gpLAotCUNMSygib21hcC1tY2JzcC4xIiwgImZjayIsCSZtY2JzcDFfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImNvcmVfNDhtX2ZjayIsCSZjb3JlXzQ4bV9mY2ssCUNLXzM0M1gpLAotCUNMSygib21hcDJfbWNzcGkuNCIsICJmY2siLAkmbWNzcGk0X2ZjaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwMl9tY3NwaS4zIiwgImZjayIsCSZtY3NwaTNfZmNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXAyX21jc3BpLjIiLCAiZmNrIiwJJm1jc3BpMl9mY2ssCUNLXzM0M1gpLAotCUNMSygib21hcDJfbWNzcGkuMSIsICJmY2siLAkmbWNzcGkxX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ1YXJ0Ml9mY2siLAkmdWFydDJfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInVhcnQxX2ZjayIsCSZ1YXJ0MV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZnNob3N0dXNiX2ZjayIsICZmc2hvc3R1c2JfZmNrLCBDS18zNDMwRVMxKSwKLQlDTEsoTlVMTCwJImNvcmVfMTJtX2ZjayIsCSZjb3JlXzEybV9mY2ssCUNLXzM0M1gpLAotCUNMSygib21hcF9oZHEuMCIsICJmY2siLAkmaGRxX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzc2lfc3NyX2ZjayIsCSZzc2lfc3NyX2Zja18zNDMwZXMxLAlDS18zNDMwRVMxKSwKLQlDTEsoTlVMTCwJInNzaV9zc3JfZmNrIiwJJnNzaV9zc3JfZmNrXzM0MzBlczIsCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkic3NpX3NzdF9mY2siLAkmc3NpX3NzdF9mY2tfMzQzMGVzMSwJQ0tfMzQzMEVTMSksCi0JQ0xLKE5VTEwsCSJzc2lfc3N0X2ZjayIsCSZzc2lfc3N0X2Zja18zNDMwZXMyLAlDS18zNDMwRVMyKSwKLQlDTEsoTlVMTCwJImNvcmVfbDNfaWNrIiwJJmNvcmVfbDNfaWNrLAlDS18zNDNYKSwKLQlDTEsoIm11c2JfaGRyYyIsCSJpY2siLAkmaHNvdGd1c2JfaWNrXzM0MzBlczEsCUNLXzM0MzBFUzEpLAotCUNMSygibXVzYl9oZHJjIiwJImljayIsCSZoc290Z3VzYl9pY2tfMzQzMGVzMiwJQ0tfMzQzMEVTMiksCi0JQ0xLKE5VTEwsCSJzZHJjX2ljayIsCSZzZHJjX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncG1jX2ZjayIsCSZncG1jX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzZWN1cml0eV9sM19pY2siLCAmc2VjdXJpdHlfbDNfaWNrLCBDS18zNDNYKSwKLQlDTEsoTlVMTCwJInBrYV9pY2siLAkmcGthX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJjb3JlX2w0X2ljayIsCSZjb3JlX2w0X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ1c2J0bGxfaWNrIiwJJnVzYnRsbF9pY2ssCUNLXzM0MzBFUzIpLAotCUNMSygibW1jaS1vbWFwLWhzLjIiLAkiaWNrIiwJJm1tY2hzM19pY2ssCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkiaWNyX2ljayIsCSZpY3JfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImFlczJfaWNrIiwJJmFlczJfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInNoYTEyX2ljayIsCSZzaGExMl9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZGVzMl9pY2siLAkmZGVzMl9pY2ssCUNLXzM0M1gpLAotCUNMSygibW1jaS1vbWFwLWhzLjEiLAkiaWNrIiwJJm1tY2hzMl9pY2ssCUNLXzM0M1gpLAotCUNMSygibW1jaS1vbWFwLWhzLjAiLAkiaWNrIiwJJm1tY2hzMV9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkibXNwcm9faWNrIiwJJm1zcHJvX2ljaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwX2hkcS4wIiwgImljayIsCSZoZHFfaWNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXAyX21jc3BpLjQiLCAiaWNrIiwJJm1jc3BpNF9pY2ssCUNLXzM0M1gpLAotCUNMSygib21hcDJfbWNzcGkuMyIsICJpY2siLAkmbWNzcGkzX2ljaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwMl9tY3NwaS4yIiwgImljayIsCSZtY3NwaTJfaWNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXAyX21jc3BpLjEiLCAiaWNrIiwJJm1jc3BpMV9pY2ssCUNLXzM0M1gpLAotCUNMSygiaTJjX29tYXAuMyIsICJpY2siLAkmaTJjM19pY2ssCUNLXzM0M1gpLAotCUNMSygiaTJjX29tYXAuMiIsICJpY2siLAkmaTJjMl9pY2ssCUNLXzM0M1gpLAotCUNMSygiaTJjX29tYXAuMSIsICJpY2siLAkmaTJjMV9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkidWFydDJfaWNrIiwJJnVhcnQyX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ1YXJ0MV9pY2siLAkmdWFydDFfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdwdDExX2ljayIsCSZncHQxMV9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0MTBfaWNrIiwJJmdwdDEwX2ljaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjUiLCAiaWNrIiwJJm1jYnNwNV9pY2ssCUNLXzM0M1gpLAotCUNMSygib21hcC1tY2JzcC4xIiwgImljayIsCSZtY2JzcDFfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImZhY19pY2siLAkmZmFjX2ljaywJQ0tfMzQzMEVTMSksCi0JQ0xLKE5VTEwsCSJtYWlsYm94ZXNfaWNrIiwgJm1haWxib3hlc19pY2ssIENLXzM0M1gpLAotCUNMSyhOVUxMLAkib21hcGN0cmxfaWNrIiwJJm9tYXBjdHJsX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzc2lfbDRfaWNrIiwJJnNzaV9sNF9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkic3NpX2ljayIsCSZzc2lfaWNrXzM0MzBlczEsCUNLXzM0MzBFUzEpLAotCUNMSyhOVUxMLAkic3NpX2ljayIsCSZzc2lfaWNrXzM0MzBlczIsCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkidXNiX2w0X2ljayIsCSZ1c2JfbDRfaWNrLAlDS18zNDMwRVMxKSwKLQlDTEsoTlVMTCwJInNlY3VyaXR5X2w0X2ljazIiLCAmc2VjdXJpdHlfbDRfaWNrMiwgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJhZXMxX2ljayIsCSZhZXMxX2ljaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwX3JuZyIsCSJpY2siLAkJJnJuZ19pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkic2hhMTFfaWNrIiwJJnNoYTExX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJkZXMxX2ljayIsCSZkZXMxX2ljaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwZHNzIiwJImRzczFfZmNrIiwJJmRzczFfYWx3b25fZmNrXzM0MzBlczEsIENLXzM0MzBFUzEpLAotCUNMSygib21hcGRzcyIsCSJkc3MxX2ZjayIsCSZkc3MxX2Fsd29uX2Zja18zNDMwZXMyLCBDS18zNDMwRVMyKSwKLQlDTEsoIm9tYXBkc3MiLAkidHZfZmNrIiwJJmRzc190dl9mY2ssCUNLXzM0M1gpLAotCUNMSygib21hcGRzcyIsCSJ2aWRlb19mY2siLAkmZHNzXzk2bV9mY2ssCUNLXzM0M1gpLAotCUNMSygib21hcGRzcyIsCSJkc3MyX2ZjayIsCSZkc3MyX2Fsd29uX2ZjaywgQ0tfMzQzWCksCi0JQ0xLKCJvbWFwZHNzIiwJImljayIsCQkmZHNzX2lja18zNDMwZXMxLAlDS18zNDMwRVMxKSwKLQlDTEsoIm9tYXBkc3MiLAkiaWNrIiwJCSZkc3NfaWNrXzM0MzBlczIsCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkiY2FtX21jbGsiLAkmY2FtX21jbGssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiY2FtX2ljayIsCSZjYW1faWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImNzaTJfOTZtX2ZjayIsCSZjc2kyXzk2bV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkidXNiaG9zdF8xMjBtX2ZjayIsICZ1c2Job3N0XzEyMG1fZmNrLCBDS18zNDMwRVMyKSwKLQlDTEsoTlVMTCwJInVzYmhvc3RfNDhtX2ZjayIsICZ1c2Job3N0XzQ4bV9mY2ssIENLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkidXNiaG9zdF9pY2siLAkmdXNiaG9zdF9pY2ssCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkidXNpbV9mY2siLAkmdXNpbV9mY2ssCUNLXzM0MzBFUzIpLAotCUNMSyhOVUxMLAkiZ3B0MV9mY2siLAkmZ3B0MV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkid2t1cF8zMmtfZmNrIiwJJndrdXBfMzJrX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncGlvMV9kYmNrIiwJJmdwaW8xX2RiY2ssCUNLXzM0M1gpLAotCUNMSygib21hcF93ZHQiLAkiZmNrIiwJCSZ3ZHQyX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ3a3VwX2w0X2ljayIsCSZ3a3VwX2w0X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ1c2ltX2ljayIsCSZ1c2ltX2ljaywJQ0tfMzQzMEVTMiksCi0JQ0xLKCJvbWFwX3dkdCIsCSJpY2siLAkJJndkdDJfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJIndkdDFfaWNrIiwJJndkdDFfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdwaW8xX2ljayIsCSZncGlvMV9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkib21hcF8zMmtzeW5jX2ljayIsICZvbWFwXzMya3N5bmNfaWNrLCBDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdwdDEyX2ljayIsCSZncHQxMl9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3B0MV9pY2siLAkmZ3B0MV9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkicGVyXzk2bV9mY2siLAkmcGVyXzk2bV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkicGVyXzQ4bV9mY2siLAkmcGVyXzQ4bV9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkidWFydDNfZmNrIiwJJnVhcnQzX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQyX2ZjayIsCSZncHQyX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQzX2ZjayIsCSZncHQzX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ0X2ZjayIsCSZncHQ0X2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ1X2ZjayIsCSZncHQ1X2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ2X2ZjayIsCSZncHQ2X2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ3X2ZjayIsCSZncHQ3X2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ4X2ZjayIsCSZncHQ4X2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ5X2ZjayIsCSZncHQ5X2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJwZXJfMzJrX2Fsd29uX2ZjayIsICZwZXJfMzJrX2Fsd29uX2ZjaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncGlvNl9kYmNrIiwJJmdwaW82X2RiY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzVfZGJjayIsCSZncGlvNV9kYmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdwaW80X2RiY2siLAkmZ3BpbzRfZGJjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncGlvM19kYmNrIiwJJmdwaW8zX2RiY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzJfZGJjayIsCSZncGlvMl9kYmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJIndkdDNfZmNrIiwJJndkdDNfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInBlcl9sNF9pY2siLAkmcGVyX2w0X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncGlvNl9pY2siLAkmZ3BpbzZfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdwaW81X2ljayIsCSZncGlvNV9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzRfaWNrIiwJJmdwaW80X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncGlvM19pY2siLAkmZ3BpbzNfaWNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJImdwaW8yX2ljayIsCSZncGlvMl9pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkid2R0M19pY2siLAkmd2R0M19pY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkidWFydDNfaWNrIiwJJnVhcnQzX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ5X2ljayIsCSZncHQ5X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ4X2ljayIsCSZncHQ4X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ3X2ljayIsCSZncHQ3X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ2X2ljayIsCSZncHQ2X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ1X2ljayIsCSZncHQ1X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQ0X2ljayIsCSZncHQ0X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQzX2ljayIsCSZncHQzX2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQyX2ljayIsCSZncHQyX2ljaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjIiLCAiaWNrIiwJJm1jYnNwMl9pY2ssCUNLXzM0M1gpLAotCUNMSygib21hcC1tY2JzcC4zIiwgImljayIsCSZtY2JzcDNfaWNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXAtbWNic3AuNCIsICJpY2siLAkmbWNic3A0X2ljaywJQ0tfMzQzWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjIiLCAiZmNrIiwJJm1jYnNwMl9mY2ssCUNLXzM0M1gpLAotCUNMSygib21hcC1tY2JzcC4zIiwgImZjayIsCSZtY2JzcDNfZmNrLAlDS18zNDNYKSwKLQlDTEsoIm9tYXAtbWNic3AuNCIsICJmY2siLAkmbWNic3A0X2ZjaywJQ0tfMzQzWCksCi0JQ0xLKCJldGIiLAkiZW11X3NyY19jayIsCSZlbXVfc3JjX2NrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInBjbGtfZmNrIiwJJnBjbGtfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInBjbGt4Ml9mY2siLAkmcGNsa3gyX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJhdGNsa19mY2siLAkmYXRjbGtfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInRyYWNlY2xrX3NyY19mY2siLCAmdHJhY2VjbGtfc3JjX2ZjaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJ0cmFjZWNsa19mY2siLAkmdHJhY2VjbGtfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJInNyMV9mY2siLAkmc3IxX2ZjaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzcjJfZmNrIiwJJnNyMl9mY2ssCUNLXzM0M1gpLAotCUNMSyhOVUxMLAkic3JfbDRfaWNrIiwJJnNyX2w0X2ljaywJQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJzZWN1cmVfMzJrX2ZjayIsICZzZWN1cmVfMzJrX2ZjaywgQ0tfMzQzWCksCi0JQ0xLKE5VTEwsCSJncHQxMl9mY2siLAkmZ3B0MTJfZmNrLAlDS18zNDNYKSwKLQlDTEsoTlVMTCwJIndkdDFfZmNrIiwJJndkdDFfZmNrLAlDS18zNDNYKSwKLX07Ci0KLQotaW50IF9faW5pdCBvbWFwMl9jbGtfaW5pdCh2b2lkKQotewotCS8qIHN0cnVjdCBwcmNtX2NvbmZpZyAqcHJjbTsgKi8KLQlzdHJ1Y3Qgb21hcF9jbGsgKmM7Ci0JLyogdTMyIGNsa3JhdGU7ICovCi0JdTMyIGNwdV9jbGtmbGc7Ci0KLQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKLQkJY3B1X21hc2sgPSBSQVRFX0lOXzM0M1g7Ci0JCWNwdV9jbGtmbGcgPSBDS18zNDNYOwotCi0JCS8qCi0JCSAqIFVwZGF0ZSB0aGlzIGlmIHRoZXJlIGFyZSBmdXJ0aGVyIGNsb2NrIGNoYW5nZXMgYmV0d2VlbiBFUzIKLQkJICogYW5kIHByb2R1Y3Rpb24gcGFydHMKLQkJICovCi0JCWlmIChvbWFwX3JldigpID09IE9NQVAzNDMwX1JFVl9FUzFfMCkgewotCQkJLyogTm8gMzQzMEVTMS1vbmx5IHJhdGVzIGV4aXN0LCBzbyBubyBSQVRFX0lOXzM0MzBFUzEgKi8KLQkJCWNwdV9jbGtmbGcgfD0gQ0tfMzQzMEVTMTsKLQkJfSBlbHNlIHsKLQkJCWNwdV9tYXNrIHw9IFJBVEVfSU5fMzQzMEVTMjsKLQkJCWNwdV9jbGtmbGcgfD0gQ0tfMzQzMEVTMjsKLQkJfQotCX0KLQotCWNsa19pbml0KCZvbWFwMl9jbGtfZnVuY3Rpb25zKTsKLQotCWZvciAoYyA9IG9tYXAzNHh4X2Nsa3M7IGMgPCBvbWFwMzR4eF9jbGtzICsgQVJSQVlfU0laRShvbWFwMzR4eF9jbGtzKTsgYysrKQotCQljbGtfcHJlaW5pdChjLT5say5jbGspOwotCi0JZm9yIChjID0gb21hcDM0eHhfY2xrczsgYyA8IG9tYXAzNHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAzNHh4X2Nsa3MpOyBjKyspCi0JCWlmIChjLT5jcHUgJiBjcHVfY2xrZmxnKSB7Ci0JCQljbGtkZXZfYWRkKCZjLT5sayk7Ci0JCQljbGtfcmVnaXN0ZXIoYy0+bGsuY2xrKTsKLQkJCW9tYXAyX2luaXRfY2xrX2Nsa2RtKGMtPmxrLmNsayk7Ci0JCX0KLQotCS8qIFJFVklTSVQ6IE5vdCB5ZXQgcmVhZHkgZm9yIE9NQVAzICovCi0jaWYgMAotCS8qIENoZWNrIHRoZSBNUFUgcmF0ZSBzZXQgYnkgYm9vdGxvYWRlciAqLwotCWNsa3JhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlXzI0eHgoJmRwbGxfY2spOwotCWZvciAocHJjbSA9IHJhdGVfdGFibGU7IHByY20tPm1wdV9zcGVlZDsgcHJjbSsrKSB7Ci0JCWlmICghKHByY20tPmZsYWdzICYgY3B1X21hc2spKQotCQkJY29udGludWU7Ci0JCWlmIChwcmNtLT54dGFsX3NwZWVkICE9IHN5c19jay5yYXRlKQotCQkJY29udGludWU7Ci0JCWlmIChwcmNtLT5kcGxsX3NwZWVkIDw9IGNsa3JhdGUpCi0JCQlicmVhazsKLQl9Ci0JY3Vycl9wcmNtX3NldCA9IHByY207Ci0jZW5kaWYKLQotCXJlY2FsY3VsYXRlX3Jvb3RfY2xvY2tzKCk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJDbG9ja2luZyByYXRlIChDcnlzdGFsL0NvcmUvTVBVKTogIgotCSAgICAgICAiJWxkLiUwMWxkLyVsZC8lbGQgTUh6XG4iLAotCSAgICAgICAob3NjX3N5c19jay5yYXRlIC8gMTAwMDAwMCksIChvc2Nfc3lzX2NrLnJhdGUgLyAxMDAwMDApICUgMTAsCi0JICAgICAgIChjb3JlX2NrLnJhdGUgLyAxMDAwMDAwKSwgKGFybV9mY2sucmF0ZSAvIDEwMDAwMDApKTsKLQotCS8qCi0JICogT25seSBlbmFibGUgdGhvc2UgY2xvY2tzIHdlIHdpbGwgbmVlZCwgbGV0IHRoZSBkcml2ZXJzCi0JICogZW5hYmxlIG90aGVyIGNsb2NrcyBhcyBuZWNlc3NhcnkKLQkgKi8KLQljbGtfZW5hYmxlX2luaXRfY2xvY2tzKCk7Ci0KLQkvKgotCSAqIExvY2sgRFBMTDUgYW5kIHB1dCBpdCBpbiBhdXRvaWRsZS4KLQkgKi8KLQlpZiAob21hcF9yZXYoKSA+PSBPTUFQMzQzMF9SRVZfRVMyXzApCi0JCW9tYXAzX2Nsa19sb2NrX2RwbGw1KCk7Ci0KLQkvKiBBdm9pZCBzbGVlcGluZyBkdXJpbmcgb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlKCkgKi8KLQlzZHJjX2lja19wID0gY2xrX2dldChOVUxMLCAic2RyY19pY2siKTsKLQlhcm1fZmNrX3AgPSBjbGtfZ2V0KE5VTEwsICJhcm1fZmNrIik7Ci0KLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNTE3LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzUxNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0OTZhOTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzUxNy5jCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogT01BUDM1MTcvMzUwNS1zcGVjaWZpYyBjbG9jayBmcmFtZXdvcmsgZnVuY3Rpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBSYW5qaXRoIExvaGl0aGFrc2hhbgorICogUGF1bCBXYWxtc2xleQorICoKKyAqIFBhcnRzIG9mIHRoaXMgY29kZSBhcmUgYmFzZWQgb24gY29kZSB3cml0dGVuIGJ5CisgKiBSaWNoYXJkIFdvb2RydWZmLCBUb255IExpbmRncmVuLCBUdXVra2EgVGlra2FuZW4sIEthcnRoaWsgRGFzdSwKKyAqIFJ1c3NlbGwgS2luZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyN1bmRlZiBERUJVRworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY2xvY2szNTE3LmgiCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKKworLyoKKyAqIEluIEFNMzV4eCBJUFNTLCB0aGUge0lDSyxGQ0t9IGVuYWJsZSBiaXRzIGZvciBtb2R1bGVzIGFyZSBleHBvcnRlZAorICogaW4gdGhlIHNhbWUgcmVnaXN0ZXIgYXQgYSBiaXQgb2Zmc2V0IG9mIDB4OC4gVGhlIEVOX0FDSyBmb3IgSUNLIGlzCisgKiBhdCBhbiBvZmZzZXQgb2YgNCBmcm9tIElDSyBlbmFibGUgYml0LgorICovCisjZGVmaW5lIEFNMzVYWF9JUFNTX0lDS19NQVNLCQkJMHhGCisjZGVmaW5lIEFNMzVYWF9JUFNTX0lDS19FTl9BQ0tfT0ZGU0VUIAkJMHg0CisjZGVmaW5lIEFNMzVYWF9JUFNTX0lDS19GQ0tfT0ZGU0VUCQkweDgKKyNkZWZpbmUgQU0zNVhYX0lQU1NfQ0xLX0lETEVTVF9WQUwJCTAKKworLyoqCisgKiBhbTM1eHhfY2xrX2ZpbmRfaWRsZXN0IC0gcmV0dXJuIGNsb2NrIEFDSyBpbmZvIGZvciBBTTM1WFggSVBTUworICogQGNsazogc3RydWN0IGNsayAqIGJlaW5nIGVuYWJsZWQKKyAqIEBpZGxlc3RfcmVnOiB2b2lkIF9faW9tZW0gKiogdG8gc3RvcmUgQ01fSURMRVNUIHJlZyBhZGRyZXNzIGludG8KKyAqIEBpZGxlc3RfYml0OiBwb2ludGVyIHRvIGEgdTggdG8gc3RvcmUgdGhlIENNX0lETEVTVCBiaXQgc2hpZnQgaW50bworICogQGlkbGVzdF92YWw6IHBvaW50ZXIgdG8gYSB1OCB0byBzdG9yZSB0aGUgQ01fSURMRVNUIGluZGljYXRvcgorICoKKyAqIFRoZSBpbnRlcmZhY2UgY2xvY2tzIG9uIEFNMzV4eCBJUFNTIHJlZmxlY3RzIHRoZSBjbG9jayBpZGxlIHN0YXR1cworICogaW4gdGhlIGVuYWJsZSByZWdpc3RlciBpdHNlbCBhdCBhIGJpdCBvZmZzZXQgb2YgNCBmcm9tIHRoZSBlbmFibGUKKyAqIGJpdC4gQSB2YWx1ZSBvZiAxIGluZGljYXRlcyB0aGF0IGNsb2NrIGlzIGVuYWJsZWQuCisgKi8KK3N0YXRpYyB2b2lkIGFtMzV4eF9jbGtfZmluZF9pZGxlc3Qoc3RydWN0IGNsayAqY2xrLAorCQkJCQkgICAgdm9pZCBfX2lvbWVtICoqaWRsZXN0X3JlZywKKwkJCQkJICAgIHU4ICppZGxlc3RfYml0LAorCQkJCQkgICAgdTggKmlkbGVzdF92YWwpCit7CisJKmlkbGVzdF9yZWcgPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKikoY2xrLT5lbmFibGVfcmVnKTsKKwkqaWRsZXN0X2JpdCA9IGNsay0+ZW5hYmxlX2JpdCArIEFNMzVYWF9JUFNTX0lDS19FTl9BQ0tfT0ZGU0VUOworCSppZGxlc3RfdmFsID0gQU0zNVhYX0lQU1NfQ0xLX0lETEVTVF9WQUw7Cit9CisKKy8qKgorICogYW0zNXh4X2Nsa19maW5kX2NvbXBhbmlvbiAtIGZpbmQgY29tcGFuaW9uIGNsb2NrIHRvIEBjbGsKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiB0byBmaW5kIHRoZSBjb21wYW5pb24gY2xvY2sgb2YKKyAqIEBvdGhlcl9yZWc6IHZvaWQgX19pb21lbSAqKiB0byByZXR1cm4gdGhlIGNvbXBhbmlvbiBjbG9jayBDTV8qQ0xLRU4gdmEgaW4KKyAqIEBvdGhlcl9iaXQ6IHU4ICoqIHRvIHJldHVybiB0aGUgY29tcGFuaW9uIGNsb2NrIGJpdCBzaGlmdCBpbgorICoKKyAqIFNvbWUgY2xvY2tzIGRvbid0IGhhdmUgY29tcGFuaW9uIGNsb2Nrcy4gIEZvciBleGFtcGxlLCBtb2R1bGVzIHdpdGgKKyAqIG9ubHkgYW4gaW50ZXJmYWNlIGNsb2NrIChzdWNoIGFzIEhFQ0MpIGRvbid0IGhhdmUgYSBjb21wYW5pb24KKyAqIGNsb2NrLiAgUmlnaHQgbm93LCB0aGlzIGNvZGUgcmVsaWVzIG9uIHRoZSBoYXJkd2FyZSBleHBvcnRpbmcgYSBiaXQKKyAqIGluIHRoZSBjb3JyZWN0IGNvbXBhbmlvbiByZWdpc3RlciB0aGF0IGluZGljYXRlcyB0aGF0IHRoZQorICogbm9uZXhpc3RlbnQgJ2NvbXBhbmlvbiBjbG9jaycgaXMgYWN0aXZlLiAgRnV0dXJlIHBhdGNoZXMgd2lsbAorICogYXNzb2NpYXRlIHRoaXMgdHlwZSBvZiBjb2RlIHdpdGggcGVyLW1vZHVsZSBkYXRhIHN0cnVjdHVyZXMgdG8KKyAqIGF2b2lkIHRoaXMgaXNzdWUsIGFuZCByZW1vdmUgdGhlIGNhc3RzLiAgTm8gcmV0dXJuIHZhbHVlLgorICovCitzdGF0aWMgdm9pZCBhbTM1eHhfY2xrX2ZpbmRfY29tcGFuaW9uKHN0cnVjdCBjbGsgKmNsaywgdm9pZCBfX2lvbWVtICoqb3RoZXJfcmVnLAorCQkJCQkgICAgdTggKm90aGVyX2JpdCkKK3sKKwkqb3RoZXJfcmVnID0gKF9fZm9yY2Ugdm9pZCBfX2lvbWVtICopKGNsay0+ZW5hYmxlX3JlZyk7CisJaWYgKGNsay0+ZW5hYmxlX2JpdCAmIEFNMzVYWF9JUFNTX0lDS19NQVNLKQorCQkqb3RoZXJfYml0ID0gY2xrLT5lbmFibGVfYml0ICsgQU0zNVhYX0lQU1NfSUNLX0ZDS19PRkZTRVQ7CisJZWxzZQorCQkqb3RoZXJfYml0ID0gY2xrLT5lbmFibGVfYml0IC0gQU0zNVhYX0lQU1NfSUNLX0ZDS19PRkZTRVQ7Cit9CisKK2NvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX2FtMzV4eF9pcHNzX21vZHVsZV93YWl0ID0geworCS5lbmFibGUJCT0gb21hcDJfZGZsdF9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gb21hcDJfZGZsdF9jbGtfZGlzYWJsZSwKKwkuZmluZF9pZGxlc3QJPSBhbTM1eHhfY2xrX2ZpbmRfaWRsZXN0LAorCS5maW5kX2NvbXBhbmlvbgk9IGFtMzV4eF9jbGtfZmluZF9jb21wYW5pb24sCit9OworCisvKioKKyAqIGFtMzV4eF9jbGtfaXBzc19maW5kX2lkbGVzdCAtIHJldHVybiBDTV9JRExFU1QgaW5mbyBmb3IgSVBTUworICogQGNsazogc3RydWN0IGNsayAqIGJlaW5nIGVuYWJsZWQKKyAqIEBpZGxlc3RfcmVnOiB2b2lkIF9faW9tZW0gKiogdG8gc3RvcmUgQ01fSURMRVNUIHJlZyBhZGRyZXNzIGludG8KKyAqIEBpZGxlc3RfYml0OiBwb2ludGVyIHRvIGEgdTggdG8gc3RvcmUgdGhlIENNX0lETEVTVCBiaXQgc2hpZnQgaW50bworICogQGlkbGVzdF92YWw6IHBvaW50ZXIgdG8gYSB1OCB0byBzdG9yZSB0aGUgQ01fSURMRVNUIGluZGljYXRvcgorICoKKyAqIFRoZSBJUFNTIHRhcmdldCBDTV9JRExFU1QgYml0IGlzIGF0IGEgZGlmZmVyZW50IHNoaWZ0IGZyb20gdGhlCisgKiBDTV97SSxGfUNMS0VOIGJpdC4gIFBhc3MgYmFjayB0aGUgY29ycmVjdCBpbmZvIHZpYSBAaWRsZXN0X3JlZworICogYW5kIEBpZGxlc3RfYml0LiAgTm8gcmV0dXJuIHZhbHVlLgorICovCitzdGF0aWMgdm9pZCBhbTM1eHhfY2xrX2lwc3NfZmluZF9pZGxlc3Qoc3RydWN0IGNsayAqY2xrLAorCQkJCQkgICAgdm9pZCBfX2lvbWVtICoqaWRsZXN0X3JlZywKKwkJCQkJICAgIHU4ICppZGxlc3RfYml0LAorCQkJCQkgICAgdTggKmlkbGVzdF92YWwpCit7CisJdTMyIHI7CisKKwlyID0gKCgoX19mb3JjZSB1MzIpY2xrLT5lbmFibGVfcmVnICYgfjB4ZjApIHwgMHgyMCk7CisJKmlkbGVzdF9yZWcgPSAoX19mb3JjZSB2b2lkIF9faW9tZW0gKilyOworCSppZGxlc3RfYml0ID0gQU0zNVhYX1NUX0lQU1NfU0hJRlQ7CisJKmlkbGVzdF92YWwgPSBPTUFQMzRYWF9DTV9JRExFU1RfVkFMOworfQorCitjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19hbTM1eHhfaXBzc193YWl0ID0geworCS5lbmFibGUJCT0gb21hcDJfZGZsdF9jbGtfZW5hYmxlLAorCS5kaXNhYmxlCT0gb21hcDJfZGZsdF9jbGtfZGlzYWJsZSwKKwkuZmluZF9pZGxlc3QJPSBhbTM1eHhfY2xrX2lwc3NfZmluZF9pZGxlc3QsCisJLmZpbmRfY29tcGFuaW9uCT0gb21hcDJfY2xrX2RmbHRfZmluZF9jb21wYW5pb24sCit9OworCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNTE3LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzUxNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNWU1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzUxNy5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiBPTUFQMzUxNy8zNTA1IGNsb2NrIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIG1hY3JvcworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0szNTE3X0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLMzUxN19ICisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19hbTM1eHhfaXBzc19tb2R1bGVfd2FpdDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19hbTM1eHhfaXBzc193YWl0OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNnh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzZ4eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNWUyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrMzZ4eC5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBPTUFQMzZ4eC1zcGVjaWZpYyBjbGtvcHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIE1pa2UgVHVycXVldHRlCisgKiBWaWpheWt1bWFyIEdOCisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogUGFydHMgb2YgdGhpcyBjb2RlIGFyZSBiYXNlZCBvbiBjb2RlIHdyaXR0ZW4gYnkKKyAqIFJpY2hhcmQgV29vZHJ1ZmYsIFRvbnkgTGluZGdyZW4sIFR1dWtrYSBUaWtrYW5lbiwgS2FydGhpayBEYXN1LAorICogUnVzc2VsbCBLaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI3VuZGVmIERFQlVHCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorCisjaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJjbG9jazM2eHguaCIKKworCisvKioKKyAqIG9tYXAzNnh4X3B3cmRuX2Nsa19lbmFibGVfd2l0aF9oc2Rpdl9yZXN0b3JlIC0gZW5hYmxlIGNsb2NrcyBzdWZmZXJpbmcKKyAqICAgICAgICAgZnJvbSBIU0RpdmlkZXIgUFdSRE4gcHJvYmxlbSBJbXBsZW1lbnRzIEVycmF0YSBJRDogaTU1Ni4KKyAqIEBjbGs6IERQTEwgb3V0cHV0IHN0cnVjdCBjbGsKKyAqCisgKiAzNjMwIG9ubHk6IGRwbGwzX20zX2NrLCBkcGxsNF9tMl9jaywgZHBsbDRfbTNfY2ssIGRwbGw0X200X2NrLAorICogZHBsbDRfbTVfY2sgJiBkcGxsNF9tNl9jayBkaXZpZGVycyBnZXRzIGxvYWRlZCB3aXRoIHJlc2V0CisgKiB2YWx1ZWFmdGVyIHRoZWlyIHJlc3BlY3RpdmUgUFdSRE4gYml0cyBhcmUgc2V0LiAgQW55IGR1bW15IHdyaXRlCisgKiAoQW55IG90aGVyIHZhbHVlIGRpZmZlcmVudCBmcm9tIHRoZSBSZWFkIHZhbHVlKSB0byB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgQ01fQ0xLU0VMIHJlZ2lzdGVyIHdpbGwgcmVmcmVzaCB0aGUgZGl2aWRlcnMuCisgKi8KK3N0YXRpYyBpbnQgb21hcDM2eHhfcHdyZG5fY2xrX2VuYWJsZV93aXRoX2hzZGl2X3Jlc3RvcmUoc3RydWN0IGNsayAqY2xrKQoreworCXUzMiBkdW1teV92LCBvcmlnX3YsIGNsa3NlbF9zaGlmdDsKKwlpbnQgcmV0OworCisJLyogQ2xlYXIgUFdSRE4gYml0IG9mIEhTRElWSURFUiAqLworCXJldCA9IG9tYXAyX2RmbHRfY2xrX2VuYWJsZShjbGspOworCisJLyogUmVzdG9yZSB0aGUgZGl2aWRlcnMgKi8KKwlpZiAoIXJldCkgeworCQljbGtzZWxfc2hpZnQgPSBfX2ZmcyhjbGstPnBhcmVudC0+Y2xrc2VsX21hc2spOworCQlvcmlnX3YgPSBfX3Jhd19yZWFkbChjbGstPnBhcmVudC0+Y2xrc2VsX3JlZyk7CisJCWR1bW15X3YgPSBvcmlnX3Y7CisKKwkJLyogV3JpdGUgYW55IG90aGVyIHZhbHVlIGRpZmZlcmVudCBmcm9tIHRoZSBSZWFkIHZhbHVlICovCisJCWR1bW15X3YgXj0gKDEgPDwgY2xrc2VsX3NoaWZ0KTsKKwkJX19yYXdfd3JpdGVsKGR1bW15X3YsIGNsay0+cGFyZW50LT5jbGtzZWxfcmVnKTsKKworCQkvKiBXcml0ZSB0aGUgb3JpZ2luYWwgZGl2aWRlciAqLworCQlfX3Jhd193cml0ZWwob3JpZ192LCBjbGstPnBhcmVudC0+Y2xrc2VsX3JlZyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfb21hcDM2eHhfcHdyZG5fd2l0aF9oc2Rpdl93YWl0X3Jlc3RvcmUgPSB7CisJLmVuYWJsZQkJPSBvbWFwMzZ4eF9wd3Jkbl9jbGtfZW5hYmxlX3dpdGhfaHNkaXZfcmVzdG9yZSwKKwkuZGlzYWJsZQk9IG9tYXAyX2RmbHRfY2xrX2Rpc2FibGUsCisJLmZpbmRfY29tcGFuaW9uCT0gb21hcDJfY2xrX2RmbHRfZmluZF9jb21wYW5pb24sCisJLmZpbmRfaWRsZXN0CT0gb21hcDJfY2xrX2RmbHRfZmluZF9pZGxlc3QsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazM2eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNnh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdkZWU1YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szNnh4LmgKQEAgLTAsMCArMSwxMyBAQAorLyoKKyAqIE9NQVAzNnh4IGNsb2NrIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIG1hY3JvcworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0szNlhYX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLMzZYWF9ICisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2xrb3BzIGNsa29wc19vbWFwMzZ4eF9wd3Jkbl93aXRoX2hzZGl2X3dhaXRfcmVzdG9yZTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDQ3YzRkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHguYwpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIE9NQVAzLXNwZWNpZmljIGNsb2NrIGZyYW1ld29yayBmdW5jdGlvbnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBQYXVsIFdhbG1zbGV5CisgKiBKb3VuaSBIw7ZnYW5kZXIKKyAqCisgKiBQYXJ0cyBvZiB0aGlzIGNvZGUgYXJlIGJhc2VkIG9uIGNvZGUgd3JpdHRlbiBieQorICogUmljaGFyZCBXb29kcnVmZiwgVG9ueSBMaW5kZ3JlbiwgVHV1a2thIFRpa2thbmVuLCBLYXJ0aGlrIERhc3UKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjdW5kZWYgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKworI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY2xvY2szeHh4LmgiCisjaW5jbHVkZSAicHJtLmgiCisjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgorI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCisKKy8qCisgKiBEUExMNV9GUkVRX0ZPUl9VU0JIT1NUOiBVU0JIT1NUIGFuZCBVU0JUTEwgYXJlIHRoZSBvbmx5IGNsb2NrcworICogdGhhdCBhcmUgc291cmNlZCBieSBEUExMNSwgYW5kIGJvdGggb2YgdGhlc2UgcmVxdWlyZSB0aGlzIGNsb2NrCisgKiB0byBiZSBhdCAxMjAgTUh6IGZvciBwcm9wZXIgb3BlcmF0aW9uLgorICovCisjZGVmaW5lIERQTEw1X0ZSRVFfRk9SX1VTQkhPU1QJCTEyMDAwMDAwMAorCisvKiBuZWVkZWQgYnkgb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlKCkgKi8KK3N0cnVjdCBjbGsgKnNkcmNfaWNrX3AsICphcm1fZmNrX3A7CisKK2ludCBvbWFwM19kcGxsNF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwkvKgorCSAqIEFjY29yZGluZyB0byB0aGUgMTItNSBDRFAgY29kZSBmcm9tIFRJLCAiTGltaXRhdGlvbiAyLjUiCisJICogb24gMzQzMEVTMSBwcmV2ZW50cyB1cyBmcm9tIGNoYW5naW5nIERQTEwgbXVsdGlwbGllcnMgb3IgZGl2aWRlcnMKKwkgKiBvbiBEUExMNC4KKwkgKi8KKwlpZiAob21hcF9yZXYoKSA9PSBPTUFQMzQzMF9SRVZfRVMxXzApIHsKKwkJcHJfZXJyKCJjbG9jazogRFBMTDQgY2Fubm90IGNoYW5nZSByYXRlIGR1ZSB0byAiCisJCSAgICAgICAic2lsaWNvbiAnTGltaXRhdGlvbiAyLjUnIG9uIDM0MzBFUzEuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZShjbGssIHJhdGUpOworfQorCit2b2lkIF9faW5pdCBvbWFwM19jbGtfbG9ja19kcGxsNSh2b2lkKQoreworCXN0cnVjdCBjbGsgKmRwbGw1X2NsazsKKwlzdHJ1Y3QgY2xrICpkcGxsNV9tMl9jbGs7CisKKwlkcGxsNV9jbGsgPSBjbGtfZ2V0KE5VTEwsICJkcGxsNV9jayIpOworCWNsa19zZXRfcmF0ZShkcGxsNV9jbGssIERQTEw1X0ZSRVFfRk9SX1VTQkhPU1QpOworCWNsa19lbmFibGUoZHBsbDVfY2xrKTsKKworCS8qIEVuYWJsZSBhdXRvaWRsZSB0byBhbGxvdyBpdCB0byBlbnRlciBsb3cgcG93ZXIgYnlwYXNzICovCisJb21hcDNfZHBsbF9hbGxvd19pZGxlKGRwbGw1X2Nsayk7CisKKwkvKiBQcm9ncmFtIGRwbGw1X20yX2NsayBkaXZpZGVyIGZvciBubyBkaXZpc2lvbiAqLworCWRwbGw1X20yX2NsayA9IGNsa19nZXQoTlVMTCwgImRwbGw1X20yX2NrIik7CisJY2xrX2VuYWJsZShkcGxsNV9tMl9jbGspOworCWNsa19zZXRfcmF0ZShkcGxsNV9tMl9jbGssIERQTEw1X0ZSRVFfRk9SX1VTQkhPU1QpOworCisJY2xrX2Rpc2FibGUoZHBsbDVfbTJfY2xrKTsKKwljbGtfZGlzYWJsZShkcGxsNV9jbGspOworCXJldHVybjsKK30KKworLyogQ29tbW9uIGNsb2NrIGNvZGUgKi8KKworLyoKKyAqIFN3aXRjaCB0aGUgTVBVIHJhdGUgaWYgc3BlY2lmaWVkIG9uIGNtZGxpbmUuICBXZSBjYW5ub3QgZG8gdGhpcworICogZWFybHkgdW50aWwgY21kbGluZSBpcyBwYXJzZWQuICBYWFggVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIHRoZQorICogY2xvY2sgY29kZSBhbmQgaGFuZGxlZCBieSB0aGUgT1BQIGxheWVyIGNvZGUgaW4gdGhlIG5lYXIgZnV0dXJlLgorICovCitzdGF0aWMgaW50IF9faW5pdCBvbWFwM3h4eF9jbGtfYXJjaF9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCisJCXJldHVybiAwOworCisJcmV0ID0gb21hcDJfY2xrX3N3aXRjaF9tcHVyYXRlX2F0X2Jvb3QoImRwbGwxX2NrIik7CisJaWYgKCFyZXQpCisJCW9tYXAyX2Nsa19wcmludF9uZXdfcmF0ZXMoIm9zY19zeXNfY2siLCAiYXJtX2ZjayIsICJjb3JlX2NrIik7CisKKwlyZXR1cm4gcmV0OworfQorCithcmNoX2luaXRjYWxsKG9tYXAzeHh4X2Nsa19hcmNoX2luaXQpOworCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2szeHh4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYmVlYWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eC5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBPTUFQMy1jb21tb24gY2xvY2sgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgbWFjcm9zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0szWFhYX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLM1hYWF9ICisKK2ludCBvbWFwM3h4eF9jbGtfaW5pdCh2b2lkKTsKK2ludCBvbWFwM19kcGxsNF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitpbnQgb21hcDNfY29yZV9kcGxsX20yX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKTsKK3ZvaWQgb21hcDNfY2xrX2xvY2tfZHBsbDUodm9pZCk7CisKK2V4dGVybiBzdHJ1Y3QgY2xrICpzZHJjX2lja19wOworZXh0ZXJuIHN0cnVjdCBjbGsgKmFybV9mY2tfcDsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBjbGtvcHMgY2xrb3BzX25vbmNvcmVfZHBsbF9vcHM7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazN4eHhfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1MTUzYjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrM3h4eF9kYXRhLmMKQEAgLTAsMCArMSwzNjAxIEBACisvKgorICogT01BUDMgY2xvY2sgZGF0YQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQorICogV2l0aCBtYW55IGRldmljZSBjbG9jayBmaXhlcyBieSBLZXZpbiBIaWxtYW4gYW5kIEpvdW5pIEjDtmdhbmRlcgorICogRFBMTCBieXBhc3MgY2xvY2sgc3VwcG9ydCBhZGRlZCBieSBSb21hbiBUZXJlc2hvbmtvdgorICoKKyAqLworCisvKgorICogVmlydHVhbCBjbG9ja3MgYXJlIGludHJvZHVjZWQgYXMgY29udmVuaWVudCB0b29scy4KKyAqIFRoZXkgYXJlIHNvdXJjZXMgZm9yIG90aGVyIGNsb2NrcyBhbmQgbm90IHN1cHBvc2VkCisgKiB0byBiZSByZXF1ZXN0ZWQgZnJvbSBkcml2ZXJzIGRpcmVjdGx5LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisKKyNpbmNsdWRlIDxwbGF0L2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsa2Rldl9vbWFwLmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgImNsb2NrM3h4eC5oIgorI2luY2x1ZGUgImNsb2NrMzR4eC5oIgorI2luY2x1ZGUgImNsb2NrMzZ4eC5oIgorI2luY2x1ZGUgImNsb2NrMzUxNy5oIgorCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTM0eHguaCIKKyNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCisKKy8qCisgKiBjbG9ja3MKKyAqLworCisjZGVmaW5lIE9NQVBfQ01fUkVHQUREUgkJT01BUDM0WFhfQ01fUkVHQUREUgorCisvKiBNYXhpbXVtIERQTEwgbXVsdGlwbGllciwgZGl2aWRlciB2YWx1ZXMgZm9yIE9NQVAzICovCisjZGVmaW5lIE9NQVAzX01BWF9EUExMX01VTFQJCTIwNDcKKyNkZWZpbmUgT01BUDM2MzBfTUFYX0pUWVBFX0RQTExfTVVMVAk0MDk1CisjZGVmaW5lIE9NQVAzX01BWF9EUExMX0RJVgkJMTI4CisKKy8qCisgKiBEUExMMSBzdXBwbGllcyBjbG9jayB0byB0aGUgTVBVLgorICogRFBMTDIgc3VwcGxpZXMgY2xvY2sgdG8gdGhlIElWQTIuCisgKiBEUExMMyBzdXBwbGllcyBDT1JFIGRvbWFpbiBjbG9ja3MuCisgKiBEUExMNCBzdXBwbGllcyBwZXJpcGhlcmFsIGNsb2Nrcy4KKyAqIERQTEw1IHN1cHBsaWVzIG90aGVyIHBlcmlwaGVyYWwgY2xvY2tzIChVU0JIT1NULCBVU0lNKS4KKyAqLworCisvKiBGb3J3YXJkIGRlY2xhcmF0aW9ucyBmb3IgRFBMTCBieXBhc3MgY2xvY2tzICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsMV9mY2s7CitzdGF0aWMgc3RydWN0IGNsayBkcGxsMl9mY2s7CisKKy8qIFBSTSBDTE9DS1MgKi8KKworLyogQWNjb3JkaW5nIHRvIHRpbWVyMzJrLmMsIHRoaXMgaXMgYSAzMjc2OEh6IGNsb2NrLCBub3QgYSAzMjAwMEh6IGNsb2NrLiAqLworc3RhdGljIHN0cnVjdCBjbGsgb21hcF8zMmtfZmNrID0geworCS5uYW1lCQk9ICJvbWFwXzMya19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yYXRlCQk9IDMyNzY4LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2VjdXJlXzMya19mY2sgPSB7CisJLm5hbWUJCT0gInNlY3VyZV8zMmtfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSAzMjc2OCwKK307CisKKy8qIFZpcnR1YWwgc291cmNlIGNsb2NrcyBmb3Igb3NjX3N5c19jayAqLworc3RhdGljIHN0cnVjdCBjbGsgdmlydF8xMm1fY2sgPSB7CisJLm5hbWUJCT0gInZpcnRfMTJtX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSAxMjAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMTNtX2NrID0geworCS5uYW1lCQk9ICJ2aXJ0XzEzbV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJhdGUJCT0gMTMwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2aXJ0XzE2XzhtX2NrID0geworCS5uYW1lCQk9ICJ2aXJ0XzE2XzhtX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSAxNjgwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMTlfMm1fY2sgPSB7CisJLm5hbWUJCT0gInZpcnRfMTlfMm1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yYXRlCQk9IDE5MjAwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdmlydF8yNm1fY2sgPSB7CisJLm5hbWUJCT0gInZpcnRfMjZtX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucmF0ZQkJPSAyNjAwMDAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHZpcnRfMzhfNG1fY2sgPSB7CisJLm5hbWUJCT0gInZpcnRfMzhfNG1fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yYXRlCQk9IDM4NDAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvc2Nfc3lzXzEybV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb3NjX3N5c18xM21fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9zY19zeXNfMTZfOG1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gNSwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9zY19zeXNfMTlfMm1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9zY19zeXNfMjZtX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvc2Nfc3lzXzM4XzRtX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgb3NjX3N5c19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmdmlydF8xMm1fY2ssICAgLnJhdGVzID0gb3NjX3N5c18xMm1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmdmlydF8xM21fY2ssICAgLnJhdGVzID0gb3NjX3N5c18xM21fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmdmlydF8xNl84bV9jaywgLnJhdGVzID0gb3NjX3N5c18xNl84bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZ2aXJ0XzE5XzJtX2NrLCAucmF0ZXMgPSBvc2Nfc3lzXzE5XzJtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnZpcnRfMjZtX2NrLCAgIC5yYXRlcyA9IG9zY19zeXNfMjZtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnZpcnRfMzhfNG1fY2ssIC5yYXRlcyA9IG9zY19zeXNfMzhfNG1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCisvKiBPc2NpbGxhdG9yIGNsb2NrICovCisvKiAxMiwgMTMsIDE2LjgsIDE5LjIsIDI2LCBvciAzOC40IE1IeiAqLworc3RhdGljIHN0cnVjdCBjbGsgb3NjX3N5c19jayA9IHsKKwkubmFtZQkJPSAib3NjX3N5c19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVAzNDMwX1BSTV9DTEtTRUwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1lTX0NMS0lOX1NFTF9NQVNLLAorCS5jbGtzZWwJCT0gb3NjX3N5c19jbGtzZWwsCisJLyogUkVWSVNJVDogZGVhbCB3aXRoIGF1dG9leHRjbGttb2RlPyAqLworCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjJfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3lzX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZvc2Nfc3lzX2NrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCisvKiBMYXRlbmN5OiB0aGlzIGNsb2NrIGlzIG9ubHkgZW5hYmxlZCBhZnRlciBQUk1fQ0xLU0VUVVAuU0VUVVBfVElNRSAqLworLyogRmVlZHMgRFBMTHMgLSBkaXZpZGVkIGZpcnN0IGJ5IFBSTV9DTEtTUkNfQ1RSTC5TWVNDTEtESVY/ICovCitzdGF0aWMgc3RydWN0IGNsayBzeXNfY2sgPSB7CisJLm5hbWUJCT0gInN5c19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmb3NjX3N5c19jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDM0MzBfUFJNX0NMS1NSQ19DVFJMLAorCS5jbGtzZWxfbWFzawk9IE9NQVBfU1lTQ0xLRElWX01BU0ssCisJLmNsa3NlbAkJPSBzeXNfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzeXNfYWx0Y2xrID0geworCS5uYW1lCQk9ICJzeXNfYWx0Y2xrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKK307CisKKy8qIE9wdGlvbmFsIGV4dGVybmFsIGNsb2NrIGlucHV0IGZvciBzb21lIE1jQlNQcyAqLworc3RhdGljIHN0cnVjdCBjbGsgbWNic3BfY2xrcyA9IHsKKwkubmFtZQkJPSAibWNic3BfY2xrcyIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCit9OworCisvKiBQUk0gRVhURVJOQUwgQ0xPQ0sgT1VUUFVUICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHN5c19jbGtvdXQxID0geworCS5uYW1lCQk9ICJzeXNfY2xrb3V0MSIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmb3NjX3N5c19jaywKKwkuZW5hYmxlX3JlZwk9IE9NQVAzNDMwX1BSTV9DTEtPVVRfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NMS09VVF9FTl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogRFBMTFMgKi8KKworLyogQ00gQ0xPQ0tTICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZGl2MTZfZHBsbF9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMywgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA1LCAudmFsID0gNSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gNiwgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDcsIC52YWwgPSA3LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gOSwgLnZhbCA9IDksIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDEwLCAudmFsID0gMTAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDExLCAudmFsID0gMTEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDEyLCAudmFsID0gMTIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDEzLCAudmFsID0gMTMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDE0LCAudmFsID0gMTQsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDE1LCAudmFsID0gMTUsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDE2LCAudmFsID0gMTYsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYzMl9kcGxsNF9yYXRlc18zNjMwW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzZYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM2WFggfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMzZYWCB9LAorCXsgLmRpdiA9IDUsIC52YWwgPSA1LCAuZmxhZ3MgPSBSQVRFX0lOXzM2WFggfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gNywgLnZhbCA9IDcsIC5mbGFncyA9IFJBVEVfSU5fMzZYWCB9LAorCXsgLmRpdiA9IDgsIC52YWwgPSA4LCAuZmxhZ3MgPSBSQVRFX0lOXzM2WFggfSwKKwl7IC5kaXYgPSA5LCAudmFsID0gOSwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTAsIC52YWwgPSAxMCwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTEsIC52YWwgPSAxMSwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTIsIC52YWwgPSAxMiwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTMsIC52YWwgPSAxMywgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTQsIC52YWwgPSAxNCwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTUsIC52YWwgPSAxNSwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSAxNiwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTcsIC52YWwgPSAxNywgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTgsIC52YWwgPSAxOCwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMTksIC52YWwgPSAxOSwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjAsIC52YWwgPSAyMCwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjEsIC52YWwgPSAyMSwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjIsIC52YWwgPSAyMiwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjMsIC52YWwgPSAyMywgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjQsIC52YWwgPSAyNCwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjUsIC52YWwgPSAyNSwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjYsIC52YWwgPSAyNiwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjcsIC52YWwgPSAyNywgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjgsIC52YWwgPSAyOCwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMjksIC52YWwgPSAyOSwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMzAsIC52YWwgPSAzMCwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMzEsIC52YWwgPSAzMSwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMzIsIC52YWwgPSAzMiwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCisvKiBEUExMMSAqLworLyogTVBVIGNsb2NrIHNvdXJjZSAqLworLyogVHlwZTogRFBMTCAqLworc3RhdGljIHN0cnVjdCBkcGxsX2RhdGEgZHBsbDFfZGQgPSB7CisJLm11bHRfZGl2MV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fQ0xLU0VMMV9QTEwpLAorCS5tdWx0X21hc2sJPSBPTUFQMzQzMF9NUFVfRFBMTF9NVUxUX01BU0ssCisJLmRpdjFfbWFzawk9IE9NQVAzNDMwX01QVV9EUExMX0RJVl9NQVNLLAorCS5jbGtfYnlwYXNzCT0gJmRwbGwxX2ZjaywKKwkuY2xrX3JlZgk9ICZzeXNfY2ssCisJLmZyZXFzZWxfbWFzawk9IE9NQVAzNDMwX01QVV9EUExMX0ZSRVFTRUxfTUFTSywKKwkuY29udHJvbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fQ0xLRU5fUExMKSwKKwkuZW5hYmxlX21hc2sJPSBPTUFQMzQzMF9FTl9NUFVfRFBMTF9NQVNLLAorCS5tb2RlcwkJPSAoMSA8PCBEUExMX0xPV19QT1dFUl9CWVBBU1MpIHwgKDEgPDwgRFBMTF9MT0NLRUQpLAorCS5hdXRvX3JlY2FsX2JpdAk9IE9NQVAzNDMwX0VOX01QVV9EUExMX0RSSUZUR1VBUkRfU0hJRlQsCisJLnJlY2FsX2VuX2JpdAk9IE9NQVAzNDMwX01QVV9EUExMX1JFQ0FMX0VOX1NISUZULAorCS5yZWNhbF9zdF9iaXQJPSBPTUFQMzQzMF9NUFVfRFBMTF9TVF9TSElGVCwKKwkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAzNDMwX0NNX0FVVE9JRExFX1BMTCksCisJLmF1dG9pZGxlX21hc2sJPSBPTUFQMzQzMF9BVVRPX01QVV9EUExMX01BU0ssCisJLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fSURMRVNUX1BMTCksCisJLmlkbGVzdF9tYXNrCT0gT01BUDM0MzBfU1RfTVBVX0NMS19NQVNLLAorCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCisJLm1pbl9kaXZpZGVyCT0gMSwKKwkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCisJLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsMV9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDFfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkuZHBsbF9kYXRhCT0gJmRwbGwxX2RkLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAorCS5jbGtkbV9uYW1lCT0gImRwbGwxX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKK307CisKKy8qCisgKiBUaGlzIHZpcnR1YWwgY2xvY2sgcHJvdmlkZXMgdGhlIENMS09VVFgyIG91dHB1dCBmcm9tIHRoZSBEUExMIGlmIHRoZQorICogRFBMTCBpc24ndCBieXBhc3NlZC4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDFfeDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGwxX3gyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsMV9jaywKKwkuY2xrZG1fbmFtZQk9ICJkcGxsMV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAorfTsKKworLyogT24gRFBMTDEsIHVubGlrZSBvdGhlciBEUExMcywgdGhlIGRpdmlkZXIgaXMgZG93bnN0cmVhbSBmcm9tIENMS09VVFgyICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYxNl9kcGxsMV94Mm0yX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZkcGxsMV94Ml9jaywgLnJhdGVzID0gZGl2MTZfZHBsbF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyoKKyAqIERvZXMgbm90IGV4aXN0IGluIHRoZSBUUk0gLSBuZWVkZWQgdG8gc2VwYXJhdGUgdGhlIE0yIGRpdmlkZXIgZnJvbQorICogYnlwYXNzIHNlbGVjdGlvbiBpbiBtcHVfY2sKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDFfeDJtMl9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDFfeDJtMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZHBsbDFfeDJfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwyX1BMTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfTVBVX0RQTExfQ0xLT1VUX0RJVl9NQVNLLAorCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDFfeDJtMl9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiZHBsbDFfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBEUExMMiAqLworLyogSVZBMiBjbG9jayBzb3VyY2UgKi8KKy8qIFR5cGU6IERQTEwgKi8KKworc3RhdGljIHN0cnVjdCBkcGxsX2RhdGEgZHBsbDJfZGQgPSB7CisJLm11bHRfZGl2MV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDFfUExMKSwKKwkubXVsdF9tYXNrCT0gT01BUDM0MzBfSVZBMl9EUExMX01VTFRfTUFTSywKKwkuZGl2MV9tYXNrCT0gT01BUDM0MzBfSVZBMl9EUExMX0RJVl9NQVNLLAorCS5jbGtfYnlwYXNzCT0gJmRwbGwyX2ZjaywKKwkuY2xrX3JlZgk9ICZzeXNfY2ssCisJLmZyZXFzZWxfbWFzawk9IE9NQVAzNDMwX0lWQTJfRFBMTF9GUkVRU0VMX01BU0ssCisJLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9DTEtFTl9QTEwpLAorCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwX0VOX0lWQTJfRFBMTF9NQVNLLAorCS5tb2RlcwkJPSAoMSA8PCBEUExMX0xPV19QT1dFUl9TVE9QKSB8ICgxIDw8IERQTExfTE9DS0VEKSB8CisJCQkJKDEgPDwgRFBMTF9MT1dfUE9XRVJfQllQQVNTKSwKKwkuYXV0b19yZWNhbF9iaXQJPSBPTUFQMzQzMF9FTl9JVkEyX0RQTExfRFJJRlRHVUFSRF9TSElGVCwKKwkucmVjYWxfZW5fYml0CT0gT01BUDM0MzBfUFJNX0lSUUVOQUJMRV9NUFVfSVZBMl9EUExMX1JFQ0FMX0VOX1NISUZULAorCS5yZWNhbF9zdF9iaXQJPSBPTUFQMzQzMF9QUk1fSVJRU1RBVFVTX01QVV9JVkEyX0RQTExfU1RfU0hJRlQsCisJLmF1dG9pZGxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9JVkEyX01PRCwgT01BUDM0MzBfQ01fQVVUT0lETEVfUExMKSwKKwkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwX0FVVE9fSVZBMl9EUExMX01BU0ssCisJLmlkbGVzdF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAzNDMwX0NNX0lETEVTVF9QTEwpLAorCS5pZGxlc3RfbWFzawk9IE9NQVAzNDMwX1NUX0lWQTJfQ0xLX01BU0ssCisJLm1heF9tdWx0aXBsaWVyID0gT01BUDNfTUFYX0RQTExfTVVMVCwKKwkubWluX2RpdmlkZXIJPSAxLAorCS5tYXhfZGl2aWRlcgk9IE9NQVAzX01BWF9EUExMX0RJViwKKwkucmF0ZV90b2xlcmFuY2UgPSBERUZBVUxUX0RQTExfUkFURV9UT0xFUkFOQ0UKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwyX2NrID0geworCS5uYW1lCQk9ICJkcGxsMl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAzX25vbmNvcmVfZHBsbF9vcHMsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5kcGxsX2RhdGEJPSAmZHBsbDJfZGQsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGl2MTZfZHBsbDJfbTJ4Ml9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbDJfY2ssIC5yYXRlcyA9IGRpdjE2X2RwbGxfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKKy8qCisgKiBUaGUgVFJNIGlzIGNvbmZsaWN0ZWQgb24gd2hldGhlciBJVkEyIGNsb2NrIGNvbWVzIGZyb20gRFBMTDIgQ0xLT1VUCisgKiBvciBDTEtPVVRYMi4gQ0xLT1VUIHNlZW1zIG1vc3QgcGxhdXNpYmxlLgorICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsMl9tMl9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDJfbTJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGwyX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsCisJCQkJCSAgT01BUDM0MzBfQ01fQ0xLU0VMMl9QTEwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0lWQTJfRFBMTF9DTEtPVVRfRElWX01BU0ssCisJLmNsa3NlbAkJPSBkaXYxNl9kcGxsMl9tMngyX2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsMl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qCisgKiBEUExMMworICogU291cmNlIGNsb2NrIGZvciBhbGwgaW50ZXJmYWNlcyBhbmQgZm9yIHNvbWUgZGV2aWNlIGZjbGtzCisgKiBSRVZJU0lUOiBBbHNvIHN1cHBvcnRzIGZhc3QgcmVsb2NrIGJ5cGFzcyAtIG5vdCBpbmNsdWRlZCBiZWxvdworICovCitzdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsM19kZCA9IHsKKwkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKKwkubXVsdF9tYXNrCT0gT01BUDM0MzBfQ09SRV9EUExMX01VTFRfTUFTSywKKwkuZGl2MV9tYXNrCT0gT01BUDM0MzBfQ09SRV9EUExMX0RJVl9NQVNLLAorCS5jbGtfYnlwYXNzCT0gJnN5c19jaywKKwkuY2xrX3JlZgk9ICZzeXNfY2ssCisJLmZyZXFzZWxfbWFzawk9IE9NQVAzNDMwX0NPUkVfRFBMTF9GUkVRU0VMX01BU0ssCisJLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX21hc2sJPSBPTUFQMzQzMF9FTl9DT1JFX0RQTExfTUFTSywKKwkuYXV0b19yZWNhbF9iaXQJPSBPTUFQMzQzMF9FTl9DT1JFX0RQTExfRFJJRlRHVUFSRF9TSElGVCwKKwkucmVjYWxfZW5fYml0CT0gT01BUDM0MzBfQ09SRV9EUExMX1JFQ0FMX0VOX1NISUZULAorCS5yZWNhbF9zdF9iaXQJPSBPTUFQMzQzMF9DT1JFX0RQTExfU1RfU0hJRlQsCisJLmF1dG9pZGxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9BVVRPSURMRSksCisJLmF1dG9pZGxlX21hc2sJPSBPTUFQMzQzMF9BVVRPX0NPUkVfRFBMTF9NQVNLLAorCS5pZGxlc3RfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCksCisJLmlkbGVzdF9tYXNrCT0gT01BUDM0MzBfU1RfQ09SRV9DTEtfTUFTSywKKwkubWF4X211bHRpcGxpZXIgPSBPTUFQM19NQVhfRFBMTF9NVUxULAorCS5taW5fZGl2aWRlcgk9IDEsCisJLm1heF9kaXZpZGVyCT0gT01BUDNfTUFYX0RQTExfRElWLAorCS5yYXRlX3RvbGVyYW5jZSA9IERFRkFVTFRfRFBMTF9SQVRFX1RPTEVSQU5DRQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfY2sgPSB7CisJLm5hbWUJCT0gImRwbGwzX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmRwbGxfZGF0YQk9ICZkcGxsM19kZCwKKwkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDNfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAorfTsKKworLyoKKyAqIFRoaXMgdmlydHVhbCBjbG9jayBwcm92aWRlcyB0aGUgQ0xLT1VUWDIgb3V0cHV0IGZyb20gdGhlIERQTEwgaWYgdGhlCisgKiBEUExMIGlzbid0IGJ5cGFzc2VkCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwzX3gyX2NrID0geworCS5uYW1lCQk9ICJkcGxsM194Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZHBsbDNfY2ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDNfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZGl2MzFfZHBsbDNfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSA0LCAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyIH0sCisJeyAuZGl2ID0gNSwgLnZhbCA9IDUsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSA3LCAudmFsID0gNywgLmZsYWdzID0gUkFURV9JTl8zNDMwRVMyIH0sCisJeyAuZGl2ID0gOCwgLnZhbCA9IDgsIC5mbGFncyA9IFJBVEVfSU5fMzQzMEVTMiB9LAorCXsgLmRpdiA9IDksIC52YWwgPSA5LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxMCwgLnZhbCA9IDEwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxMSwgLnZhbCA9IDExLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxMiwgLnZhbCA9IDEyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxMywgLnZhbCA9IDEzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxNCwgLnZhbCA9IDE0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxNSwgLnZhbCA9IDE1LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxNiwgLnZhbCA9IDE2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxNywgLnZhbCA9IDE3LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxOCwgLnZhbCA9IDE4LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAxOSwgLnZhbCA9IDE5LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyMCwgLnZhbCA9IDIwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyMSwgLnZhbCA9IDIxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyMiwgLnZhbCA9IDIyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyMywgLnZhbCA9IDIzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyNCwgLnZhbCA9IDI0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyNSwgLnZhbCA9IDI1LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyNiwgLnZhbCA9IDI2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyNywgLnZhbCA9IDI3LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyOCwgLnZhbCA9IDI4LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAyOSwgLnZhbCA9IDI5LCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAzMCwgLnZhbCA9IDMwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAzMSwgLnZhbCA9IDMxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0MzBFUzIgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYzMV9kcGxsM20yX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZkcGxsM19jaywgLnJhdGVzID0gZGl2MzFfZHBsbDNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKKy8qIERQTEwzIG91dHB1dCBNMiAtIHByaW1hcnkgY29udHJvbCBwb2ludCBmb3IgQ09SRSBzcGVlZCAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfbTJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGwzX20yX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsM19jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NPUkVfRFBMTF9DTEtPVVRfRElWX01BU0ssCisJLmNsa3NlbAkJPSBkaXYzMV9kcGxsM20yX2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCisJLnNldF9yYXRlCT0gJm9tYXAzX2NvcmVfZHBsbF9tMl9zZXRfcmF0ZSwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY29yZV9jayA9IHsKKwkubmFtZQkJPSAiY29yZV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZHBsbDNfbTJfY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwzX20yeDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGwzX20yeDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGwzX20yX2NrLAorCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCit9OworCisvKiBUaGUgUFdSRE4gYml0IGlzIGFwcGFyZW50bHkgb25seSBhdmFpbGFibGUgb24gMzQzMEVTMiBhbmQgYWJvdmUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjE2X2RwbGwzX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZkcGxsM19jaywgLnJhdGVzID0gZGl2MTZfZHBsbF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGwzX20zeDJfY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGwzX20zX2NrID0geworCS5uYW1lCQk9ICJkcGxsM19tM19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZHBsbDNfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9ESVZfRFBMTDNfTUFTSywKKwkuY2xrc2VsCQk9IGRpdjE2X2RwbGwzX2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDNfbTN4Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDNfbTN4Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZkcGxsM19tM19jaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9QV1JETl9FTVVfQ09SRV9TSElGVCwKKwkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsM19jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZW11X2NvcmVfYWx3b25fY2sgPSB7CisJLm5hbWUJCT0gImVtdV9jb3JlX2Fsd29uX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsM19tM3gyX2NrLAorCS5jbGtkbV9uYW1lCT0gImRwbGwzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogRFBMTDQgKi8KKy8qIFN1cHBsaWVzIDk2TUh6LCA1NE1oeiBUViBEQUMsIERTUyBmY2xrLCBDQU0gc2Vuc29yIGNsb2NrLCBlbXVsIHRyYWNlIGNsayAqLworLyogVHlwZTogRFBMTCAqLworc3RhdGljIHN0cnVjdCBkcGxsX2RhdGEgZHBsbDRfZGQ7CitzdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsNF9kZF8zNHh4IF9faW5pdGRhdGEgPSB7CisJLm11bHRfZGl2MV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMiksCisJLm11bHRfbWFzawk9IE9NQVAzNDMwX1BFUklQSF9EUExMX01VTFRfTUFTSywKKwkuZGl2MV9tYXNrCT0gT01BUDM0MzBfUEVSSVBIX0RQTExfRElWX01BU0ssCisJLmNsa19ieXBhc3MJPSAmc3lzX2NrLAorCS5jbGtfcmVmCT0gJnN5c19jaywKKwkuZnJlcXNlbF9tYXNrCT0gT01BUDM0MzBfUEVSSVBIX0RQTExfRlJFUVNFTF9NQVNLLAorCS5jb250cm9sX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCisJLmVuYWJsZV9tYXNrCT0gT01BUDM0MzBfRU5fUEVSSVBIX0RQTExfTUFTSywKKwkubW9kZXMJCT0gKDEgPDwgRFBMTF9MT1dfUE9XRVJfU1RPUCkgfCAoMSA8PCBEUExMX0xPQ0tFRCksCisJLmF1dG9fcmVjYWxfYml0CT0gT01BUDM0MzBfRU5fUEVSSVBIX0RQTExfRFJJRlRHVUFSRF9TSElGVCwKKwkucmVjYWxfZW5fYml0CT0gT01BUDM0MzBfUEVSSVBIX0RQTExfUkVDQUxfRU5fU0hJRlQsCisJLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwX1BFUklQSF9EUExMX1NUX1NISUZULAorCS5hdXRvaWRsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQVVUT0lETEUpLAorCS5hdXRvaWRsZV9tYXNrCT0gT01BUDM0MzBfQVVUT19QRVJJUEhfRFBMTF9NQVNLLAorCS5pZGxlc3RfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0lETEVTVCksCisJLmlkbGVzdF9tYXNrCT0gT01BUDM0MzBfU1RfUEVSSVBIX0NMS19NQVNLLAorCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCisJLm1pbl9kaXZpZGVyCT0gMSwKKwkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCisJLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCit9OworCitzdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsNF9kZF8zNjMwIF9faW5pdGRhdGEgPSB7CisJLm11bHRfZGl2MV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMiksCisJLm11bHRfbWFzawk9IE9NQVAzNjMwX1BFUklQSF9EUExMX01VTFRfTUFTSywKKwkuZGl2MV9tYXNrCT0gT01BUDM0MzBfUEVSSVBIX0RQTExfRElWX01BU0ssCisJLmNsa19ieXBhc3MJPSAmc3lzX2NrLAorCS5jbGtfcmVmCT0gJnN5c19jaywKKwkuY29udHJvbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfbWFzawk9IE9NQVAzNDMwX0VOX1BFUklQSF9EUExMX01BU0ssCisJLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX1NUT1ApIHwgKDEgPDwgRFBMTF9MT0NLRUQpLAorCS5hdXRvX3JlY2FsX2JpdAk9IE9NQVAzNDMwX0VOX1BFUklQSF9EUExMX0RSSUZUR1VBUkRfU0hJRlQsCisJLnJlY2FsX2VuX2JpdAk9IE9NQVAzNDMwX1BFUklQSF9EUExMX1JFQ0FMX0VOX1NISUZULAorCS5yZWNhbF9zdF9iaXQJPSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9TVF9TSElGVCwKKwkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0FVVE9JRExFKSwKKwkuYXV0b2lkbGVfbWFzawk9IE9NQVAzNDMwX0FVVE9fUEVSSVBIX0RQTExfTUFTSywKKwkuaWRsZXN0X3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QpLAorCS5pZGxlc3RfbWFzawk9IE9NQVAzNDMwX1NUX1BFUklQSF9DTEtfTUFTSywKKwkubWF4X211bHRpcGxpZXIgPSBPTUFQMzYzMF9NQVhfSlRZUEVfRFBMTF9NVUxULAorCS5taW5fZGl2aWRlcgk9IDEsCisJLm1heF9kaXZpZGVyCT0gT01BUDNfTUFYX0RQTExfRElWLAorCS5yYXRlX3RvbGVyYW5jZSA9IERFRkFVTFRfRFBMTF9SQVRFX1RPTEVSQU5DRSwKKwkuZmxhZ3MJCT0gRFBMTF9KX1RZUEUKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X2NrID0geworCS5uYW1lCQk9ICJkcGxsNF9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAzX25vbmNvcmVfZHBsbF9vcHMsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5kcGxsX2RhdGEJPSAmZHBsbDRfZGQsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAorCS5zZXRfcmF0ZQk9ICZvbWFwM19kcGxsNF9zZXRfcmF0ZSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCit9OworCisvKgorICogVGhpcyB2aXJ0dWFsIGNsb2NrIHByb3ZpZGVzIHRoZSBDTEtPVVRYMiBvdXRwdXQgZnJvbSB0aGUgRFBMTCBpZiB0aGUKKyAqIERQTEwgaXNuJ3QgYnlwYXNzZWQgLS0KKyAqIFhYWCBkb2VzIHRoaXMgc2VydmUgYW55IGRvd25zdHJlYW0gY2xvY2tzPworICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF94Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDRfeDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYxNl9kcGxsNF9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbDRfY2ssIC5yYXRlcyA9IGRpdjE2X2RwbGxfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjMyX2RwbGw0X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZkcGxsNF9jaywgLnJhdGVzID0gZGl2MzJfZHBsbDRfcmF0ZXNfMzYzMCB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X20yeDJfY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X20yX2NrOworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tMl9ja18zNHh4IF9faW5pdGRhdGEgPSB7CisJLm5hbWUJCT0gImRwbGw0X20yX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDMpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0RJVl85Nk1fTUFTSywKKwkuY2xrc2VsCQk9IGRpdjE2X2RwbGw0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X20yX2NrXzM2MzAgX19pbml0ZGF0YSAgPSB7CisJLm5hbWUJCT0gImRwbGw0X20yX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIE9NQVAzNDMwX0NNX0NMS1NFTDMpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNjMwX0RJVl85Nk1fTUFTSywKKwkuY2xrc2VsCQk9IGRpdjMyX2RwbGw0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIFRoZSBQV1JETiBiaXQgaXMgYXBwYXJlbnRseSBvbmx5IGF2YWlsYWJsZSBvbiAzNDMwRVMyIGFuZCBhYm92ZSAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTJ4Ml9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDRfbTJ4Ml9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZkcGxsNF9tMl9jaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9QV1JETl85Nk1fU0hJRlQsCisJLmZsYWdzCQk9IElOVkVSVF9FTkFCTEUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKK307CisKKy8qCisgKiBEUExMNCBnZW5lcmF0ZXMgRFBMTDRfTTJYMl9DTEsgd2hpY2ggaXMgdGhlbiByb3V0ZWQgaW50byB0aGUgUFJNIGFzCisgKiBQUk1fOTZNX0FMV09OXyhGKUNMSy4gIFR3byBjbG9ja3MgdGhlbiBlbWVyZ2UgZnJvbSB0aGUgUFJNOgorICogOTZNX0FMV09OX0ZDTEsgKGNhbGxlZCAib21hcF85Nm1fYWx3b25fZmNrIiBiZWxvdykgYW5kCisgKiBDTV85NktfKEYpQ0xLLgorICovCisKKy8qIEFkZGluZyAxOTJNSHogQ2xvY2sgbm9kZSBuZWVkZWQgYnkgU0dYICovCitzdGF0aWMgc3RydWN0IGNsayBvbWFwXzE5Mm1fYWx3b25fZmNrID0geworCS5uYW1lCQk9ICJvbWFwXzE5Mm1fYWx3b25fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9tMngyX2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9tYXBfOTZtX2Fsd29uX2Zja19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM2WFggfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNlhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzk2bV9hbHdvbl9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJm9tYXBfMTkybV9hbHdvbl9mY2ssIC5yYXRlcyA9IG9tYXBfOTZtX2Fsd29uX2Zja19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzk2bV9kcGxsX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzk2bV9zeXNfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBvbWFwXzk2bV9hbHdvbl9mY2sgPSB7CisJLm5hbWUJCT0gIm9tYXBfOTZtX2Fsd29uX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZHBsbDRfbTJ4Ml9jaywKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgb21hcF85Nm1fYWx3b25fZmNrXzM2MzAgPSB7CisJLm5hbWUJCT0gIm9tYXBfOTZtX2Fsd29uX2ZjayIsCisJLnBhcmVudAkJPSAmb21hcF8xOTJtX2Fsd29uX2ZjaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM2MzBfQ0xLU0VMXzk2TV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcF85Nm1fYWx3b25fZmNrX2Nsa3NlbAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY21fOTZtX2ZjayA9IHsKKwkubmFtZQkJPSAiY21fOTZtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmb21hcF85Nm1fYWx3b25fZmNrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzk2bV9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmNtXzk2bV9mY2ssIC5yYXRlcyA9IG9tYXBfOTZtX2RwbGxfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkgLnJhdGVzID0gb21hcF85Nm1fc3lzX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBvbWFwXzk2bV9mY2sgPSB7CisJLm5hbWUJCT0gIm9tYXBfOTZtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU09VUkNFXzk2TV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcF85Nm1fZmNrX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X20zeDJfY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X20zX2NrOworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tM19ja18zNHh4IF9faW5pdGRhdGEgPSB7CisJLm5hbWUJCT0gImRwbGw0X20zX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1RWX01BU0ssCisJLmNsa3NlbAkJPSBkaXYxNl9kcGxsNF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tM19ja18zNjMwIF9faW5pdGRhdGEgPSB7CisJLm5hbWUJCT0gImRwbGw0X20zX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM2MzBfQ0xLU0VMX1RWX01BU0ssCisJLmNsa3NlbAkJPSBkaXYzMl9kcGxsNF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBUaGUgUFdSRE4gYml0IGlzIGFwcGFyZW50bHkgb25seSBhdmFpbGFibGUgb24gMzQzMEVTMiBhbmQgYWJvdmUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X20zeDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGw0X20zeDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZHBsbDRfbTNfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfUFdSRE5fVFZfU0hJRlQsCisJLmZsYWdzCQk9IElOVkVSVF9FTkFCTEUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgb21hcF81NG1fZDRtM3gyX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzU0bV9hbHRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzU0bV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZHBsbDRfbTN4Ml9jaywgLnJhdGVzID0gb21hcF81NG1fZDRtM3gyX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJnN5c19hbHRjbGssICAgIC5yYXRlcyA9IG9tYXBfNTRtX2FsdF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgb21hcF81NG1fZmNrID0geworCS5uYW1lCQk9ICJvbWFwXzU0bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU09VUkNFXzU0TV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcF81NG1fY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIG9tYXBfNDhtX2NtOTZtX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMiwgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBvbWFwXzQ4bV9hbHRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwXzQ4bV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY21fOTZtX2ZjaywgLnJhdGVzID0gb21hcF80OG1fY205Nm1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3lzX2FsdGNsaywgLnJhdGVzID0gb21hcF80OG1fYWx0X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBvbWFwXzQ4bV9mY2sgPSB7CisJLm5hbWUJCT0gIm9tYXBfNDhtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9TT1VSQ0VfNDhNX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwXzQ4bV9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfMTJtX2ZjayA9IHsKKwkubmFtZQkJPSAib21hcF8xMm1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCisJLmZpeGVkX2Rpdgk9IDQsCisJLnJlY2FsYwkJPSAmb21hcF9maXhlZF9kaXZpc29yX3JlY2FsYywKK307CisKKy8qIFRoaXMgdmlyc3R1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDRfbTR4Ml9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTRfY2s7CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X200X2NrXzM0eHggX19pbml0ZGF0YSA9IHsKKwkubmFtZQkJPSAiZHBsbDRfbTRfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfRFNTMV9NQVNLLAorCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNF9ja18zNjMwIF9faW5pdGRhdGEgPSB7CisJLm5hbWUJCT0gImRwbGw0X200X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM2MzBfQ0xLU0VMX0RTUzFfTUFTSywKKwkuY2xrc2VsCQk9IGRpdjMyX2RwbGw0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorfTsKKworLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNHgyX2NrID0geworCS5uYW1lCQk9ICJkcGxsNF9tNHgyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmRwbGw0X200X2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0NBTV9TSElGVCwKKwkuZmxhZ3MJCT0gSU5WRVJUX0VOQUJMRSwKKwkuY2xrZG1fbmFtZQk9ICJkcGxsNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDNfY2xrb3V0eDJfcmVjYWxjLAorfTsKKworLyogVGhpcyB2aXJ0dWFsIGNsb2NrIGlzIHRoZSBzb3VyY2UgZm9yIGRwbGw0X201eDJfY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X201X2NrOworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNV9ja18zNHh4IF9faW5pdGRhdGEgPSB7CisJLm5hbWUJCT0gImRwbGw0X201X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0NBTV9NQVNLLAorCS5jbGtzZWwJCT0gZGl2MTZfZHBsbDRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNV9ja18zNjMwIF9faW5pdGRhdGEgPSB7CisJLm5hbWUJCT0gImRwbGw0X201X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM2MzBfQ0xLU0VMX0NBTV9NQVNLLAorCS5jbGtzZWwJCT0gZGl2MzJfZHBsbDRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKKwkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBUaGUgUFdSRE4gYml0IGlzIGFwcGFyZW50bHkgb25seSBhdmFpbGFibGUgb24gMzQzMEVTMiBhbmQgYWJvdmUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X201eDJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGw0X201eDJfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZHBsbDRfbTVfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoUExMX01PRCwgQ01fQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfUFdSRE5fQ0FNX1NISUZULAorCS5mbGFncwkJPSBJTlZFUlRfRU5BQkxFLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwM19jbGtvdXR4Ml9yZWNhbGMsCit9OworCisvKiBUaGlzIHZpcnR1YWwgY2xvY2sgaXMgdGhlIHNvdXJjZSBmb3IgZHBsbDRfbTZ4Ml9jayAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDRfbTZfY2s7CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRwbGw0X202X2NrXzM0eHggX19pbml0ZGF0YSA9IHsKKwkubmFtZQkJPSAiZHBsbDRfbTZfY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGw0X2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfRElWX0RQTEw0X01BU0ssCisJLmNsa3NlbAkJPSBkaXYxNl9kcGxsNF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNl9ja18zNjMwIF9faW5pdGRhdGEgPSB7CisJLm5hbWUJCT0gImRwbGw0X202X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNF9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNjMwX0RJVl9EUExMNF9NQVNLLAorCS5jbGtzZWwJCT0gZGl2MzJfZHBsbDRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImRwbGw0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogVGhlIFBXUkROIGJpdCBpcyBhcHBhcmVudGx5IG9ubHkgYXZhaWxhYmxlIG9uIDM0MzBFUzIgYW5kIGFib3ZlICovCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNF9tNngyX2NrID0geworCS5uYW1lCQk9ICJkcGxsNF9tNngyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmRwbGw0X202X2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIENNX0NMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX1BXUkROX0VNVV9QRVJJUEhfU0hJRlQsCisJLmZsYWdzCQk9IElOVkVSVF9FTkFCTEUsCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAzX2Nsa291dHgyX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVtdV9wZXJfYWx3b25fY2sgPSB7CisJLm5hbWUJCT0gImVtdV9wZXJfYWx3b25fY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmRwbGw0X202eDJfY2ssCisJLmNsa2RtX25hbWUJPSAiZHBsbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBEUExMNSAqLworLyogU3VwcGxpZXMgMTIwTUh6IGNsb2NrLCBVU0lNIHNvdXJjZSBjbG9jayAqLworLyogVHlwZTogRFBMTCAqLworLyogMzQzMEVTMiBvbmx5ICovCitzdGF0aWMgc3RydWN0IGRwbGxfZGF0YSBkcGxsNV9kZCA9IHsKKwkubXVsdF9kaXYxX3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBPTUFQMzQzMEVTMl9DTV9DTEtTRUw0KSwKKwkubXVsdF9tYXNrCT0gT01BUDM0MzBFUzJfUEVSSVBIMl9EUExMX01VTFRfTUFTSywKKwkuZGl2MV9tYXNrCT0gT01BUDM0MzBFUzJfUEVSSVBIMl9EUExMX0RJVl9NQVNLLAorCS5jbGtfYnlwYXNzCT0gJnN5c19jaywKKwkuY2xrX3JlZgk9ICZzeXNfY2ssCisJLmZyZXFzZWxfbWFzawk9IE9NQVAzNDMwRVMyX1BFUklQSDJfRFBMTF9GUkVRU0VMX01BU0ssCisJLmNvbnRyb2xfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIE9NQVAzNDMwRVMyX0NNX0NMS0VOMiksCisJLmVuYWJsZV9tYXNrCT0gT01BUDM0MzBFUzJfRU5fUEVSSVBIMl9EUExMX01BU0ssCisJLm1vZGVzCQk9ICgxIDw8IERQTExfTE9XX1BPV0VSX1NUT1ApIHwgKDEgPDwgRFBMTF9MT0NLRUQpLAorCS5hdXRvX3JlY2FsX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1BFUklQSDJfRFBMTF9EUklGVEdVQVJEX1NISUZULAorCS5yZWNhbF9lbl9iaXQJPSBPTUFQMzQzMEVTMl9TTkRfUEVSSVBIX0RQTExfUkVDQUxfRU5fU0hJRlQsCisJLnJlY2FsX3N0X2JpdAk9IE9NQVAzNDMwRVMyX1NORF9QRVJJUEhfRFBMTF9TVF9TSElGVCwKKwkuYXV0b2lkbGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIE9NQVAzNDMwRVMyX0NNX0FVVE9JRExFMl9QTEwpLAorCS5hdXRvaWRsZV9tYXNrCT0gT01BUDM0MzBFUzJfQVVUT19QRVJJUEgyX0RQTExfTUFTSywKKwkuaWRsZXN0X3JlZwk9IE9NQVBfQ01fUkVHQUREUihQTExfTU9ELCBDTV9JRExFU1QyKSwKKwkuaWRsZXN0X21hc2sJPSBPTUFQMzQzMEVTMl9TVF9QRVJJUEgyX0NMS19NQVNLLAorCS5tYXhfbXVsdGlwbGllciA9IE9NQVAzX01BWF9EUExMX01VTFQsCisJLm1pbl9kaXZpZGVyCT0gMSwKKwkubWF4X2RpdmlkZXIJPSBPTUFQM19NQVhfRFBMTF9ESVYsCisJLnJhdGVfdG9sZXJhbmNlID0gREVGQVVMVF9EUExMX1JBVEVfVE9MRVJBTkNFCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsNV9jayA9IHsKKwkubmFtZQkJPSAiZHBsbDVfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwM19ub25jb3JlX2RwbGxfb3BzLAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkuZHBsbF9kYXRhCT0gJmRwbGw1X2RkLAorCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKKwkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAorCS5jbGtkbV9uYW1lCT0gImRwbGw1X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjE2X2RwbGw1X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZkcGxsNV9jaywgLnJhdGVzID0gZGl2MTZfZHBsbF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDVfbTJfY2sgPSB7CisJLm5hbWUJCT0gImRwbGw1X20yX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsNV9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFBMTF9NT0QsIE9NQVAzNDMwRVMyX0NNX0NMS1NFTDUpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMyX0RJVl8xMjBNX01BU0ssCisJLmNsa3NlbAkJPSBkaXYxNl9kcGxsNV9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiZHBsbDVfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBDTSBFWFRFUk5BTCBDTE9DSyBPVVRQVVRTICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY2xrb3V0Ml9zcmNfY29yZV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgY2xrb3V0Ml9zcmNfc3lzX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBjbGtvdXQyX3NyY185Nm1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNsa291dDJfc3JjXzU0bV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGNsa291dDJfc3JjX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2NrLAkJLnJhdGVzID0gY2xrb3V0Ml9zcmNfY29yZV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfY2ssCQkucmF0ZXMgPSBjbGtvdXQyX3NyY19zeXNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmY21fOTZtX2ZjaywJLnJhdGVzID0gY2xrb3V0Ml9zcmNfOTZtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJm9tYXBfNTRtX2ZjaywJLnJhdGVzID0gY2xrb3V0Ml9zcmNfNTRtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBjbGtvdXQyX3NyY19jayA9IHsKKwkubmFtZQkJPSAiY2xrb3V0Ml9zcmNfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQMzQzMF9DTV9DTEtPVVRfQ1RSTCwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0NMS09VVDJfRU5fU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQMzQzMF9DTV9DTEtPVVRfQ1RSTCwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtPVVQyU09VUkNFX01BU0ssCisJLmNsa3NlbAkJPSBjbGtvdXQyX3NyY19jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiY29yZV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgc3lzX2Nsa291dDJfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzeXNfY2xrb3V0Ml9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY2xrb3V0Ml9zcmNfY2ssIC5yYXRlcyA9IHN5c19jbGtvdXQyX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3lzX2Nsa291dDIgPSB7CisJLm5hbWUJCT0gInN5c19jbGtvdXQyIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUDM0MzBfQ01fQ0xLT1VUX0NUUkwsCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLT1VUMl9ESVZfTUFTSywKKwkuY2xrc2VsCQk9IHN5c19jbGtvdXQyX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogQ00gT1VUUFVUIENMT0NLUyAqLworCitzdGF0aWMgc3RydWN0IGNsayBjb3JleDJfZmNrID0geworCS5uYW1lCQk9ICJjb3JleDJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsM19tMngyX2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBEUExMIHBvd2VyIGRvbWFpbiBjbG9jayBjb250cm9scyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjRfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRpdjRfY29yZV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywgLnJhdGVzID0gZGl2NF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyoKKyAqIFJFVklTSVQ6IEFyZSB0aGVzZSBpbiBEUExMIHBvd2VyIGRvbWFpbiBvciBDTSBwb3dlciBkb21haW4/IGRvY3MKKyAqIG1heSBiZSBpbmNvbnNpc3RlbnQgaGVyZT8KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHBsbDFfZmNrID0geworCS5uYW1lCQk9ICJkcGxsMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmNvcmVfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihNUFVfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfTVBVX0NMS19TUkNfTUFTSywKKwkuY2xrc2VsCQk9IGRpdjRfY29yZV9jbGtzZWwsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1wdV9jayA9IHsKKwkubmFtZQkJPSAibXB1X2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZkcGxsMV94Mm0yX2NrLAorCS5jbGtkbV9uYW1lCT0gIm1wdV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIGFybV9mY2sgaXMgZGl2aWRlZCBieSB0d28gd2hlbiBEUExMMSBsb2NrZWQ7IG90aGVyd2lzZSwgcGFzc3Rocm91Z2ggbXB1X2NrICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGFybV9mY2tfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGFybV9mY2tfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJm1wdV9jaywgLnJhdGVzID0gYXJtX2Zja19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYXJtX2ZjayA9IHsKKwkubmFtZQkJPSAiYXJtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmbXB1X2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDM0MzBfQ01fSURMRVNUX1BMTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfU1RfTVBVX0NMS19NQVNLLAorCS5jbGtzZWwJCT0gYXJtX2Zja19jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAibXB1X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogWFhYIFdoYXQgYWJvdXQgbmVvbl9jbGtkbSA/ICovCisKKy8qCisgKiBSRVZJU0lUOiBUaGlzIGNsb2NrIGlzIG5ldmVyIHNwZWNpZmljYWxseSBkZWZpbmVkIGluIHRoZSAzNDMwIFRSTSwKKyAqIGFsdGhvdWdoIGl0IGlzIHJlZmVyZW5jZWQgLSBzbyB0aGlzIGlzIGEgZ3Vlc3MKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZW11X21wdV9hbHdvbl9jayA9IHsKKwkubmFtZQkJPSAiZW11X21wdV9hbHdvbl9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmbXB1X2NrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkcGxsMl9mY2sgPSB7CisJLm5hbWUJCT0gImRwbGwyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBPTUFQMzQzMF9DTV9DTEtTRUwxX1BMTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfSVZBMl9DTEtfU1JDX01BU0ssCisJLmNsa3NlbAkJPSBkaXY0X2NvcmVfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpdmEyX2NrID0geworCS5uYW1lCQk9ICJpdmEyX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmRwbGwyX20yX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0lWQTJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfQ01fRkNMS0VOX0lWQTJfRU5fSVZBMl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJpdmEyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogQ29tbW9uIGludGVyZmFjZSBjbG9ja3MgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGl2Ml9jb3JlX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlX2NrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBsM19pY2sgPSB7CisJLm5hbWUJCT0gImwzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmY29yZV9jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9MM19NQVNLLAorCS5jbGtzZWwJCT0gZGl2Ml9jb3JlX2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZGl2Ml9sM19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmbDNfaWNrLCAucmF0ZXMgPSBkaXYyX3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBsNF9pY2sgPSB7CisJLm5hbWUJCT0gImw0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmbDNfaWNrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0w0X01BU0ssCisJLmNsa3NlbAkJPSBkaXYyX2wzX2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXYyX2w0X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZsNF9pY2ssIC5yYXRlcyA9IGRpdjJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHJtX2ljayA9IHsKKwkubmFtZQkJPSAicm1faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZsNF9pY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfUk1fTUFTSywKKwkuY2xrc2VsCQk9IGRpdjJfbDRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBHRlggcG93ZXIgZG9tYWluICovCisKKy8qIEdGWCBjbG9ja3MgYXJlIGluIDM0MzBFUzEgb25seS4gMzQzMEVTMiBhbmQgbGF0ZXIgdXNlcyB0aGUgU0dYIGluc3RlYWQgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZ2Z4X2wzX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZsM19pY2ssIC5yYXRlcyA9IGdmeF9sM19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworLyogVmlydHVhbCBwYXJlbnQgY2xvY2sgZm9yIGdmeF9sM19pY2sgYW5kIGdmeF9sM19mY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19jayA9IHsKKwkubmFtZQkJPSAiZ2Z4X2wzX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmwzX2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUF9FTl9HRlhfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9sM19mY2sgPSB7CisJLm5hbWUJCT0gImdmeF9sM19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmdmeF9sM19jaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUF9DTEtTRUxfR0ZYX01BU0ssCisJLmNsa3NlbAkJPSBnZnhfbDNfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImdmeF8zNDMwZXMxX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2wzX2ljayA9IHsKKwkubmFtZQkJPSAiZ2Z4X2wzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmZ2Z4X2wzX2NrLAorCS5jbGtkbV9uYW1lCT0gImdmeF8zNDMwZXMxX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2NnMV9jayA9IHsKKwkubmFtZQkJPSAiZ2Z4X2NnMV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZnZnhfbDNfZmNrLCAvKiBSRVZJU0lUOiBjb3JyZWN0PyAqLworCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKEdGWF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMV9FTl8yRF9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJnZnhfMzQzMGVzMV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9jZzJfY2sgPSB7CisJLm5hbWUJCT0gImdmeF9jZzJfY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmZ2Z4X2wzX2ZjaywgLyogUkVWSVNJVDogY29ycmVjdD8gKi8KKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihHRlhfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fM0RfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiZ2Z4XzM0MzBlczFfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBTR1ggcG93ZXIgZG9tYWluIC0gMzQzMEVTMiBvbmx5ICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgc2d4X2NvcmVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAyLCAudmFsID0gNSwgLmZsYWdzID0gUkFURV9JTl8zNlhYIH0sCisJeyAuZGl2ID0gMywgLnZhbCA9IDAsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDQsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA2LCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBzZ3hfMTkybV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsICAudmFsID0gNCwgLmZsYWdzID0gUkFURV9JTl8zNlhYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBzZ3hfY29yZXgyX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMywgLnZhbCA9IDYsIC5mbGFncyA9IFJBVEVfSU5fMzZYWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDUsIC52YWwgPSA3LCAuZmxhZ3MgPSBSQVRFX0lOXzM2WFggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHNneF85Nm1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAgLnZhbCA9IDMsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHNneF9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmY29yZV9jaywJIC5yYXRlcyA9IHNneF9jb3JlX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmNtXzk2bV9mY2ssIC5yYXRlcyA9IHNneF85Nm1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmb21hcF8xOTJtX2Fsd29uX2ZjaywgLnJhdGVzID0gc2d4XzE5Mm1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmY29yZXgyX2ZjaywgLnJhdGVzID0gc2d4X2NvcmV4Ml9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2d4X2ZjayA9IHsKKwkubmFtZQkJPSAic2d4X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1NHWF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9DTV9GQ0xLRU5fU0dYX0VOX1NHWF9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9TR1hfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMyX0NMS1NFTF9TR1hfTUFTSywKKwkuY2xrc2VsCQk9IHNneF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAic2d4X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCisJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNneF9pY2sgPSB7CisJLm5hbWUJCT0gInNneF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDNfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1NHWF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9DTV9JQ0xLRU5fU0dYX0VOX1NHWF9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJzZ3hfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBDT1JFIHBvd2VyIGRvbWFpbiAqLworCitzdGF0aWMgc3RydWN0IGNsayBkMmRfMjZtX2ZjayA9IHsKKwkubmFtZQkJPSAiZDJkXzI2bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOX0QyRF9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJkMmRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtb2RlbV9mY2sgPSB7CisJLm5hbWUJCT0gIm1vZGVtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTU9ERU1fU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiZDJkX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2FkMmRfaWNrID0geworCS5uYW1lCQk9ICJzYWQyZF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmbDNfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NBRDJEX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImQyZF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1hZDJkX2ljayA9IHsKKwkubmFtZQkJPSAibWFkMmRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmwzX2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMyksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQUQyRF9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJkMmRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBvbWFwMzQzeF9ncHRfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJm9tYXBfMzJrX2ZjaywgLnJhdGVzID0gZ3B0XzMya19yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZzeXNfY2ssCSAgIC5yYXRlcyA9IGdwdF9zeXNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfZmNrID0geworCS5uYW1lCQk9ICJncHQxMF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTBfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDEwX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxMV9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDExX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxMV9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMTFfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNwZWZ1c2VfZmNrID0geworCS5uYW1lCQk9ICJjcGVmdXNlX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX0NQRUZVU0VfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRzX2ZjayA9IHsKKwkubmFtZQkJPSAidHNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZvbWFwXzMya19mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTjMpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVFNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYnRsbF9mY2sgPSB7CisJLm5hbWUJCT0gInVzYnRsbF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmRwbGw1X20yX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMzQzMEVTMl9DTV9GQ0xLRU4zKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQlRMTF9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogQ09SRSA5Nk0gRkNMSy1kZXJpdmVkIGNsb2NrcyAqLworCitzdGF0aWMgc3RydWN0IGNsayBjb3JlXzk2bV9mY2sgPSB7CisJLm5hbWUJCT0gImNvcmVfOTZtX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmb21hcF85Nm1fZmNrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczNfZmNrID0geworCS5uYW1lCQk9ICJtbWNoczNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9NTUMzX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczJfZmNrID0geworCS5uYW1lCQk9ICJtbWNoczJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NTUMyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtc3Byb19mY2sgPSB7CisJLm5hbWUJCT0gIm1zcHJvX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTVNQUk9fU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY2hzMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1tY2hzMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzNfZmNrID0geworCS5uYW1lCQk9ICJpMmMzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlXzk2bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDM19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9mY2sgPSB7CisJLm5hbWUJCT0gImkyYzJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMxX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjMV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV85Nm1fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qCisgKiBNQ0JTUCAxICYgNSBnZXQgdGhlaXIgOTZNSHogY2xvY2sgZnJvbSBjb3JlXzk2bV9mY2s7CisgKiBNQ0JTUCAyLCAzLCA0IGdldCB0aGVpciA5Nk1IeiBjbG9jayBmcm9tIHBlcl85Nm1fZmNrLgorICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9tY2JzcF85Nm1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGNvbW1vbl9tY2JzcF9tY2JzcF9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG1jYnNwXzE1X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JlXzk2bV9mY2ssIC5yYXRlcyA9IGNvbW1vbl9tY2JzcF85Nm1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmbWNic3BfY2xrcywgICAucmF0ZXMgPSBjb21tb25fbWNic3BfbWNic3BfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNV9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwNV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDVfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDM0M1hfQ09OVFJPTF9ERVZDT05GMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1A1X0NMS1NfTUFTSywKKwkuY2xrc2VsCQk9IG1jYnNwXzE1X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AxX2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3AxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQMV9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVAzNDNYX0NUUkxfUkVHQUREUihPTUFQMl9DT05UUk9MX0RFVkNPTkYwKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMl9NQ0JTUDFfQ0xLU19NQVNLLAorCS5jbGtzZWwJCT0gbWNic3BfMTVfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBDT1JFXzQ4TV9GQ0stZGVyaXZlZCBjbG9ja3MgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgY29yZV80OG1fZmNrID0geworCS5uYW1lCQk9ICJjb3JlXzQ4bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJm9tYXBfNDhtX2ZjaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGk0X2ZjayA9IHsKKwkubmFtZQkJPSAibWNzcGk0X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEk0X1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfZmNrID0geworCS5uYW1lCQk9ICJtY3NwaTNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTNfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV80OG1fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ZjayA9IHsKKwkubmFtZQkJPSAibWNzcGkxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkxX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0Ml9mY2sgPSB7CisJLm5hbWUJCT0gInVhcnQyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQxX2ZjayA9IHsKKwkubmFtZQkJPSAidWFydDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfNDhtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fRkNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUMV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZnNob3N0dXNiX2ZjayA9IHsKKwkubmFtZQkJPSAiZnNob3N0dXNiX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fRlNIT1NUVVNCX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBDT1JFXzEyTV9GQ0sgYmFzZWQgY2xvY2tzICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfMTJtX2ZjayA9IHsKKwkubmFtZQkJPSAiY29yZV8xMm1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZvbWFwXzEybV9mY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhkcV9mY2sgPSB7CisJLm5hbWUJCT0gImhkcV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV8xMm1fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9GQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0hEUV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogRFBMTDMtZGVyaXZlZCBjbG9jayAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHNzaV9zc3JfY29yZXgyX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDEsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA4LCAudmFsID0gOCwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMCB9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBzc2lfc3NyX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZjb3JleDJfZmNrLCAucmF0ZXMgPSBzc2lfc3NyX2NvcmV4Ml9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3NpX3Nzcl9mY2tfMzQzMGVzMSA9IHsKKwkubmFtZQkJPSAic3NpX3Nzcl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU1NJX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9TU0lfTUFTSywKKwkuY2xrc2VsCQk9IHNzaV9zc3JfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzc2lfc3NyX2Zja18zNDMwZXMyID0geworCS5uYW1lCQk9ICJzc2lfc3NyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAzNDMwZXMyX3NzaV93YWl0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0ZDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU1NJX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9TU0lfTUFTSywKKwkuY2xrc2VsCQk9IHNzaV9zc3JfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzc2lfc3N0X2Zja18zNDMwZXMxID0geworCS5uYW1lCQk9ICJzc2lfc3N0X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmc3NpX3Nzcl9mY2tfMzQzMGVzMSwKKwkuZml4ZWRfZGl2CT0gMiwKKwkucmVjYWxjCQk9ICZvbWFwX2ZpeGVkX2Rpdmlzb3JfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3NpX3NzdF9mY2tfMzQzMGVzMiA9IHsKKwkubmFtZQkJPSAic3NpX3NzdF9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnNzaV9zc3JfZmNrXzM0MzBlczIsCisJLmZpeGVkX2Rpdgk9IDIsCisJLnJlY2FsYwkJPSAmb21hcF9maXhlZF9kaXZpc29yX3JlY2FsYywKK307CisKKworCisvKiBDT1JFX0wzX0lDSyBiYXNlZCBjbG9ja3MgKi8KKworLyoKKyAqIFhYWCBtdXN0IGFkZCBjbGtfZW5hYmxlL2Nsa19kaXNhYmxlIGZvciB0aGVzZSBpZiBzdGFuZGFyZCBjb2RlIHdvbid0CisgKiBoYW5kbGUgaXQKKyAqLworc3RhdGljIHN0cnVjdCBjbGsgY29yZV9sM19pY2sgPSB7CisJLm5hbWUJCT0gImNvcmVfbDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZsM19pY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhzb3RndXNiX2lja18zNDMwZXMxID0geworCS5uYW1lCQk9ICJoc290Z3VzYl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0hTT1RHVVNCX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBoc290Z3VzYl9pY2tfMzQzMGVzMiA9IHsKKwkubmFtZQkJPSAiaHNvdGd1c2JfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfaHNvdGd1c2Jfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9IU09UR1VTQl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc2RyY19pY2sgPSB7CisJLm5hbWUJCT0gInNkcmNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NEUkNfU0hJRlQsCisJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncG1jX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3BtY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmNvcmVfbDNfaWNrLAorCS5mbGFncwkJPSBFTkFCTEVfT05fSU5JVCwgLyogaHVoPyAqLworCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBTRUNVUklUWV9MM19JQ0sgYmFzZWQgY2xvY2tzICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNlY3VyaXR5X2wzX2ljayA9IHsKKwkubmFtZQkJPSAic2VjdXJpdHlfbDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZsM19pY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBrYV9pY2sgPSB7CisJLm5hbWUJCT0gInBrYV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmc2VjdXJpdHlfbDNfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1BLQV9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogQ09SRV9MNF9JQ0sgYmFzZWQgY2xvY2tzICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNvcmVfbDRfaWNrID0geworCS5uYW1lCQk9ICJjb3JlX2w0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmbDRfaWNrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2J0bGxfaWNrID0geworCS5uYW1lCQk9ICJ1c2J0bGxfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4zKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQlRMTF9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMzX2ljayA9IHsKKwkubmFtZQkJPSAibW1jaHMzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9NTUMzX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBJbnRlcnN5c3RlbSBDb21tdW5pY2F0aW9uIFJlZ2lzdGVycyAtIGNoYXNzaXMgbW9kZSBvbmx5ICovCitzdGF0aWMgc3RydWN0IGNsayBpY3JfaWNrID0geworCS5uYW1lCQk9ICJpY3JfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0lDUl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgYWVzMl9pY2sgPSB7CisJLm5hbWUJCT0gImFlczJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0FFUzJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNoYTEyX2ljayA9IHsKKwkubmFtZQkJPSAic2hhMTJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NIQTEyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkZXMyX2ljayA9IHsKKwkubmFtZQkJPSAiZGVzMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fREVTMl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbW1jaHMyX2ljayA9IHsKKwkubmFtZQkJPSAibW1jaHMyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NTUMyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtbWNoczFfaWNrID0geworCS5uYW1lCQk9ICJtbWNoczFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01NQzFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1zcHJvX2ljayA9IHsKKwkubmFtZQkJPSAibXNwcm9faWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01TUFJPX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBoZHFfaWNrID0geworCS5uYW1lCQk9ICJoZHFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0hEUV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGk0X2ljayA9IHsKKwkubmFtZQkJPSAibWNzcGk0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTRfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19pY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpM19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fTUNTUEkzX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY3NwaTJfaWNrID0geworCS5uYW1lCQk9ICJtY3NwaTJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DU1BJMl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ljayA9IHsKKwkubmFtZQkJPSAibWNzcGkxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ1NQSTFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzNfaWNrID0geworCS5uYW1lCQk9ICJpMmMzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9JMkMzX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ljayA9IHsKKwkubmFtZQkJPSAiaTJjMl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fSTJDMl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9pY2sgPSB7CisJLm5hbWUJCT0gImkyYzFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0kyQzFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ljayA9IHsKKwkubmFtZQkJPSAidWFydDJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1VBUlQyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9pY2sgPSB7CisJLm5hbWUJCT0gInVhcnQxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUMV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfaWNrID0geworCS5uYW1lCQk9ICJncHQxMV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMTFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDEwX2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0MTBfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDEwX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDVfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDVfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQNV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AxX2ljayA9IHsKKwkubmFtZQkJPSAibWNic3AxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGZhY19pY2sgPSB7CisJLm5hbWUJCT0gImZhY19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzFfRU5fRkFDX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtYWlsYm94ZXNfaWNrID0geworCS5uYW1lCQk9ICJtYWlsYm94ZXNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmNvcmVfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01BSUxCT1hFU19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2w0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgb21hcGN0cmxfaWNrID0geworCS5uYW1lCQk9ICJvbWFwY3RybF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmY29yZV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fT01BUENUUkxfU0hJRlQsCisJLmZsYWdzCQk9IEVOQUJMRV9PTl9JTklULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBTU0lfTDRfSUNLIGJhc2VkIGNsb2NrcyAqLworCitzdGF0aWMgc3RydWN0IGNsayBzc2lfbDRfaWNrID0geworCS5uYW1lCQk9ICJzc2lfbDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZsNF9pY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9pY2tfMzQzMGVzMSA9IHsKKwkubmFtZQkJPSAic3NpX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmc3NpX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TU0lfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNzaV9pY2tfMzQzMGVzMiA9IHsKKwkubmFtZQkJPSAic3NpX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAzNDMwZXMyX3NzaV93YWl0LAorCS5wYXJlbnQJCT0gJnNzaV9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjEpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU1NJX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBSRVZJU0lUOiBUZWNobmljYWxseSB0aGUgVFJNIGNsYWltcyB0aGF0IHRoaXMgaXMgQ09SRV9DTEsgYmFzZWQsCisgKiBidXQgbDRfaWNrIG1ha2VzIG1vcmUgc2Vuc2UgdG8gbWUgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdXNiX2w0X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZsNF9pY2ssIC5yYXRlcyA9IGRpdjJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1c2JfbDRfaWNrID0geworCS5uYW1lCQk9ICJ1c2JfbDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4xKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMxX0VOX0ZTSE9TVFVTQl9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMEVTMV9DTEtTRUxfRlNIT1NUVVNCX01BU0ssCisJLmNsa3NlbAkJPSB1c2JfbDRfY2xrc2VsLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCisvKiBTRUNVUklUWV9MNF9JQ0syIGJhc2VkIGNsb2NrcyAqLworCitzdGF0aWMgc3RydWN0IGNsayBzZWN1cml0eV9sNF9pY2syID0geworCS5uYW1lCQk9ICJzZWN1cml0eV9sNF9pY2syIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkucGFyZW50CQk9ICZsNF9pY2ssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFlczFfaWNrID0geworCS5uYW1lCQk9ICJhZXMxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZzZWN1cml0eV9sNF9pY2syLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0FFUzFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHJuZ19pY2sgPSB7CisJLm5hbWUJCT0gInJuZ19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmc2VjdXJpdHlfbDRfaWNrMiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9STkdfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNoYTExX2ljayA9IHsKKwkubmFtZQkJPSAic2hhMTFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnNlY3VyaXR5X2w0X2ljazIsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoQ09SRV9NT0QsIENNX0lDTEtFTjIpLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fU0hBMTFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRlczFfaWNrID0geworCS5uYW1lCQk9ICJkZXMxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZzZWN1cml0eV9sNF9pY2syLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JQ0xLRU4yKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0RFUzFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIERTUyAqLworc3RhdGljIHN0cnVjdCBjbGsgZHNzMV9hbHdvbl9mY2tfMzQzMGVzMSA9IHsKKwkubmFtZQkJPSAiZHNzMV9hbHdvbl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmRwbGw0X200eDJfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0RTUzFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzMV9hbHdvbl9mY2tfMzQzMGVzMiA9IHsKKwkubmFtZQkJPSAiZHNzMV9hbHdvbl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMzQzMGVzMl9kc3NfdXNiaG9zdF93YWl0LAorCS5wYXJlbnQJCT0gJmRwbGw0X200eDJfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0RTUzFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzX3R2X2ZjayA9IHsKKwkubmFtZQkJPSAiZHNzX3R2X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmb21hcF81NG1fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0RTU19NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9UVl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJkc3NfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBkc3NfOTZtX2ZjayA9IHsKKwkubmFtZQkJPSAiZHNzXzk2bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJm9tYXBfOTZtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVFZfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzMl9hbHdvbl9mY2sgPSB7CisJLm5hbWUJCT0gImRzczJfYWx3b25fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRFNTX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0RTUzJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzX2lja18zNDMwZXMxID0geworCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCisJLm5hbWUJCT0gImRzc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfQ01fSUNMS0VOX0RTU19FTl9EU1NfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZHNzX2lja18zNDMwZXMyID0geworCS8qIEhhbmRsZXMgYm90aCBMMyBhbmQgTDQgY2xvY2tzICovCisJLm5hbWUJCT0gImRzc19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMzQzMGVzMl9kc3NfdXNiaG9zdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfQ01fSUNMS0VOX0RTU19FTl9EU1NfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiZHNzX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworLyogQ0FNICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9tY2xrID0geworCS5uYW1lCQk9ICJjYW1fbWNsayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmZHBsbDRfbTV4Ml9jaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9DQU1fTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fQ0FNX1NISUZULAorCS5jbGtkbV9uYW1lCT0gImNhbV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNhbV9pY2sgPSB7CisJLyogSGFuZGxlcyBib3RoIEwzIGFuZCBMNCBjbG9ja3MgKi8KKwkubmFtZQkJPSAiY2FtX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9DQU1fU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY2FtX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY3NpMl85Nm1fZmNrID0geworCS5uYW1lCQk9ICJjc2kyXzk2bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmNvcmVfOTZtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9DQU1fTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fQ1NJMl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJjYW1fY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBVU0JIT1NUIC0gMzQzMEVTMiBvbmx5ICovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhvc3RfMTIwbV9mY2sgPSB7CisJLm5hbWUJCT0gInVzYmhvc3RfMTIwbV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJmRwbGw1X20yX2NrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBFUzJfRU5fVVNCSE9TVDJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAidXNiaG9zdF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYmhvc3RfNDhtX2ZjayA9IHsKKwkubmFtZQkJPSAidXNiaG9zdF80OG1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDM0MzBlczJfZHNzX3VzYmhvc3Rfd2FpdCwKKwkucGFyZW50CQk9ICZvbWFwXzQ4bV9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0JIT1NUMV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJ1c2Job3N0X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdXNiaG9zdF9pY2sgPSB7CisJLyogSGFuZGxlcyBib3RoIEwzIGFuZCBMNCBjbG9ja3MgKi8KKwkubmFtZQkJPSAidXNiaG9zdF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMzQzMGVzMl9kc3NfdXNiaG9zdF93YWl0LAorCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTQkhPU1RfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAidXNiaG9zdF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIFdLVVAgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSB1c2ltXzk2bV9yYXRlc1tdID0geworCXsgLmRpdiA9IDIsICAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gNCwgIC52YWwgPSA0LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSA4LCAgLnZhbCA9IDUsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDEwLCAudmFsID0gNiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSB1c2ltXzEyMG1fcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSA0LCAgLnZhbCA9IDcsCS5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDgsICAudmFsID0gOCwJLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gMTYsIC52YWwgPSA5LAkuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAyMCwgLnZhbCA9IDEwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB1c2ltX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZvbWFwXzk2bV9mY2ssCS5yYXRlcyA9IHVzaW1fOTZtX3JhdGVzIH0sCisJeyAucGFyZW50ID0gJmRwbGw1X20yX2NrLAkucmF0ZXMgPSB1c2ltXzEyMG1fcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkJLnJhdGVzID0gZGl2Ml9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKKy8qIDM0MzBFUzIgb25seSAqLworc3RhdGljIHN0cnVjdCBjbGsgdXNpbV9mY2sgPSB7CisJLm5hbWUJCT0gInVzaW1fZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMEVTMl9FTl9VU0lNT0NQX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwRVMyX0NMS1NFTF9VU0lNT0NQX01BU0ssCisJLmNsa3NlbAkJPSB1c2ltX2Nsa3NlbCwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogWFhYIHNob3VsZCBncHQxJ3MgY2xrc2VsIGhhdmUgd2t1cF8zMmtfZmNrIGFzIHRoZSAzMmsgb3B0PyAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MV9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDFfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxX1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQxX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3a3VwXzMya19mY2sgPSB7CisJLm5hbWUJCT0gIndrdXBfMzJrX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmb21hcF8zMmtfZmNrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvMV9kYmNrID0geworCS5uYW1lCQk9ICJncGlvMV9kYmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZ3a3VwXzMya19mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPMV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJ3a3VwX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0Ml9mY2sgPSB7CisJLm5hbWUJCT0gIndkdDJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJndrdXBfMzJrX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdrdXBfbDRfaWNrID0geworCS5uYW1lCQk9ICJ3a3VwX2w0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiAzNDMwRVMyIG9ubHkgKi8KKy8qIE5ldmVyIHNwZWNpZmljYWxseSBuYW1lZCBpbiB0aGUgVFJNLCBzbyB3ZSBoYXZlIHRvIGluZmVyIGEgbGlrZWx5IG5hbWUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzaW1faWNrID0geworCS5uYW1lCQk9ICJ1c2ltX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZ3a3VwX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwRVMyX0VOX1VTSU1PQ1BfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDJfaWNrID0geworCS5uYW1lCQk9ICJ3ZHQyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZ3a3VwX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDFfaWNrID0geworCS5uYW1lCQk9ICJ3ZHQxX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZ3a3VwX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1dEVDFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8xX2ljayA9IHsKKwkubmFtZQkJPSAiZ3BpbzFfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJndrdXBfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKFdLVVBfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzFfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAid2t1cF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9tYXBfMzJrc3luY19pY2sgPSB7CisJLm5hbWUJCT0gIm9tYXBfMzJrc3luY19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl8zMktTWU5DX1NISUZULAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBYWFggVGhpcyBjbG9jayBubyBsb25nZXIgZXhpc3RzIGluIDM0MzAgVFJNIHJldiBGICovCitzdGF0aWMgc3RydWN0IGNsayBncHQxMl9pY2sgPSB7CisJLm5hbWUJCT0gImdwdDEyX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZ3a3VwX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDEyX1NISUZULAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQxX2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0MV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmd2t1cF9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQxX1NISUZULAorCS5jbGtkbV9uYW1lCT0gIndrdXBfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisKKworLyogUEVSIGNsb2NrIGRvbWFpbiAqLworCitzdGF0aWMgc3RydWN0IGNsayBwZXJfOTZtX2ZjayA9IHsKKwkubmFtZQkJPSAicGVyXzk2bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJm9tYXBfOTZtX2Fsd29uX2ZjaywKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwZXJfNDhtX2ZjayA9IHsKKwkubmFtZQkJPSAicGVyXzQ4bV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJm9tYXBfNDhtX2ZjaywKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19mY2sgPSB7CisJLm5hbWUJCT0gInVhcnQzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZwZXJfNDhtX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fVUFSVDNfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Ml9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDJfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUMl9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQzX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0M19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUM19TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQzX01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDRfZmNrID0geworCS5uYW1lCQk9ICJncHQ0X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ0X1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDRfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0NV9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDVfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDVfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUNV9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ2X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0Nl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNl9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQ2X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDdfZmNrID0geworCS5uYW1lCQk9ICJncHQ3X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUFQ3X1NISUZULAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NFTCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX0dQVDdfTUFTSywKKwkuY2xrc2VsCQk9IG9tYXAzNDN4X2dwdF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0OF9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDhfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQVDhfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fQ0xLU0VMKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfR1BUOF9NQVNLLAorCS5jbGtzZWwJCT0gb21hcDM0M3hfZ3B0X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ5X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0OV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUOV9TSElGVCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9DTEtTRUwpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9HUFQ5X01BU0ssCisJLmNsa3NlbAkJPSBvbWFwMzQzeF9ncHRfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBlcl8zMmtfYWx3b25fZmNrID0geworCS5uYW1lCQk9ICJwZXJfMzJrX2Fsd29uX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnBhcmVudAkJPSAmb21hcF8zMmtfZmNrLAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW82X2RiY2sgPSB7CisJLm5hbWUJCT0gImdwaW82X2RiY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNV9kYmNrID0geworCS5uYW1lCQk9ICJncGlvNV9kYmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzVfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzRfZGJjayA9IHsKKwkubmFtZQkJPSAiZ3BpbzRfZGJjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmcGVyXzMya19hbHdvbl9mY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX0dQSU80X1NISUZULAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8zX2RiY2sgPSB7CisJLm5hbWUJCT0gImdwaW8zX2RiY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPM19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvMl9kYmNrID0geworCS5uYW1lCQk9ICJncGlvMl9kYmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKKwkucGFyZW50CQk9ICZwZXJfMzJrX2Fsd29uX2ZjaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9GQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BJTzJfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgd2R0M19mY2sgPSB7CisJLm5hbWUJCT0gIndkdDNfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnBlcl8zMmtfYWx3b25fZmNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9XRFQzX1NISUZULAorCS5jbGtkbV9uYW1lCT0gInBlcl9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBlcl9sNF9pY2sgPSB7CisJLm5hbWUJCT0gInBlcl9sNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJmw0X2ljaywKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNl9pY2sgPSB7CisJLm5hbWUJCT0gImdwaW82X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNV9pY2sgPSB7CisJLm5hbWUJCT0gImdwaW81X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvNF9pY2sgPSB7CisJLm5hbWUJCT0gImdwaW80X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPNF9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvM19pY2sgPSB7CisJLm5hbWUJCT0gImdwaW8zX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPM19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncGlvMl9pY2sgPSB7CisJLm5hbWUJCT0gImdwaW8yX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9HUElPMl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQzX2ljayA9IHsKKwkubmFtZQkJPSAid2R0M19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fV0RUM19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19pY2sgPSB7CisJLm5hbWUJCT0gInVhcnQzX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZwZXJfbDRfaWNrLAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0lDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9VQVJUM19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ5X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0OV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUOV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ4X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0OF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUOF9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0N19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUN19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ2X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0Nl9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ1X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0NV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNV9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQ0X2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0NF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUNF9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQzX2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0M19pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUM19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBncHQyX2ljayA9IHsKKwkubmFtZQkJPSAiZ3B0Ml9pY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0X3dhaXQsCisJLnBhcmVudAkJPSAmcGVyX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9QRVJfTU9ELCBDTV9JQ0xLRU4pLAorCS5lbmFibGVfYml0CT0gT01BUDM0MzBfRU5fR1BUMl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDJfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDJfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQMl9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQM19TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfaWNrID0geworCS5uYW1lCQk9ICJtY2JzcDRfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnBlcl9sNF9pY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwgQ01fSUNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX01DQlNQNF9TSElGVCwKKwkuY2xrZG1fbmFtZQk9ICJwZXJfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBtY2JzcF8yMzRfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJnBlcl85Nm1fZmNrLCAgLnJhdGVzID0gY29tbW9uX21jYnNwXzk2bV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZtY2JzcF9jbGtzLCAgIC5yYXRlcyA9IGNvbW1vbl9tY2JzcF9tY2JzcF9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfQorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3AyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDJfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDJfQ09OVFJPTF9ERVZDT05GMCksCisJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1AyX0NMS1NfTUFTSywKKwkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AzX2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3AzX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDNfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDM0M1hfQ09OVFJPTF9ERVZDT05GMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1AzX0NMS1NfTUFTSywKKwkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgbWNic3A0X2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3A0X2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5lbmFibGVfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX1BFUl9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9NQ0JTUDRfU0hJRlQsCisJLmNsa3NlbF9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoT01BUDM0M1hfQ09OVFJPTF9ERVZDT05GMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDJfTUNCU1A0X0NMS1NfTUFTSywKKwkuY2xrc2VsCQk9IG1jYnNwXzIzNF9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAicGVyX2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworLyogRU1VIGNsb2NrcyAqLworCisvKiBNb3JlIGluZm9ybWF0aW9uOiBBUk0gQ29ydGV4LUE4IFRlY2huaWNhbCBSZWZlcmVuY2UgTWFudWFsLCBzZWN0IDEwLjEgKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBlbXVfc3JjX3N5c19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAwLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGVtdV9zcmNfY29yZV9yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGVtdV9zcmNfcGVyX3JhdGVzW10gPSB7CisJeyAuZGl2ID0gMSwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB8IERFRkFVTFRfUkFURSB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgZW11X3NyY19tcHVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZW11X3NyY19jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmc3lzX2NrLAkJLnJhdGVzID0gZW11X3NyY19zeXNfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSAmZW11X2NvcmVfYWx3b25fY2ssIC5yYXRlcyA9IGVtdV9zcmNfY29yZV9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZlbXVfcGVyX2Fsd29uX2NrLAkucmF0ZXMgPSBlbXVfc3JjX3Blcl9yYXRlcyB9LAorCXsgLnBhcmVudCA9ICZlbXVfbXB1X2Fsd29uX2NrLAkucmF0ZXMgPSBlbXVfc3JjX21wdV9yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKKy8qCisgKiBMaWtlIHRoZSBjbGtvdXRfc3JjIGNsb2NrcywgZW11X3NyY19jbGsgaXMgYSB2aXJ0dWFsIGNsb2NrLCBleGlzdGluZyBvbmx5CisgKiB0byBzd2l0Y2ggdGhlIHNvdXJjZSBvZiBzb21lIG9mIHRoZSBFTVUgY2xvY2tzLgorICogWFhYIEFyZSB0aGVyZSBDTEtFTiBiaXRzIGZvciB0aGVzZSBFTVUgY2xrcz8KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZW11X3NyY19jayA9IHsKKwkubmFtZQkJPSAiZW11X3NyY19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9NVVhfQ1RSTF9NQVNLLAorCS5jbGtzZWwJCT0gZW11X3NyY19jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBwY2xrX2VtdV9yYXRlc1tdID0geworCXsgLmRpdiA9IDIsIC52YWwgPSAyLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAzLCAudmFsID0gMywgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDYsIC52YWwgPSA2LCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBwY2xrX2VtdV9jbGtzZWxbXSA9IHsKKwl7IC5wYXJlbnQgPSAmZW11X3NyY19jaywgLnJhdGVzID0gcGNsa19lbXVfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBwY2xrX2ZjayA9IHsKKwkubmFtZQkJPSAicGNsa19mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCisJLmNsa3NlbF9yZWcJPSBPTUFQX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU0VMMSksCisJLmNsa3NlbF9tYXNrCT0gT01BUDM0MzBfQ0xLU0VMX1BDTEtfTUFTSywKKwkuY2xrc2VsCQk9IHBjbGtfZW11X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJlbXVfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIHBjbGt4Ml9lbXVfcmF0ZXNbXSA9IHsKKwl7IC5kaXYgPSAxLCAudmFsID0gMSwgLmZsYWdzID0gUkFURV9JTl8zNDNYIHwgREVGQVVMVF9SQVRFIH0sCisJeyAuZGl2ID0gMiwgLnZhbCA9IDIsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDMsIC52YWwgPSAzLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfSwKKwl7IC5kaXYgPSAwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBwY2xreDJfZW11X2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZlbXVfc3JjX2NrLCAucmF0ZXMgPSBwY2xreDJfZW11X3JhdGVzIH0sCisJeyAucGFyZW50ID0gTlVMTCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGNsa3gyX2ZjayA9IHsKKwkubmFtZQkJPSAicGNsa3gyX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfUENMS1gyX01BU0ssCisJLmNsa3NlbAkJPSBwY2xreDJfZW11X2Nsa3NlbCwKKwkuY2xrZG1fbmFtZQk9ICJlbXVfY2xrZG0iLAorCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBhdGNsa19lbXVfY2xrc2VsW10gPSB7CisJeyAucGFyZW50ID0gJmVtdV9zcmNfY2ssIC5yYXRlcyA9IGRpdjJfcmF0ZXMgfSwKKwl7IC5wYXJlbnQgPSBOVUxMIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBhdGNsa19mY2sgPSB7CisJLm5hbWUJCT0gImF0Y2xrX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9DTEtTRUxfQVRDTEtfTUFTSywKKwkuY2xrc2VsCQk9IGF0Y2xrX2VtdV9jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgdHJhY2VjbGtfc3JjX2ZjayA9IHsKKwkubmFtZQkJPSAidHJhY2VjbGtfc3JjX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKKwkuY2xrc2VsX3JlZwk9IE9NQVBfQ01fUkVHQUREUihPTUFQMzQzMF9FTVVfTU9ELCBDTV9DTEtTRUwxKSwKKwkuY2xrc2VsX21hc2sJPSBPTUFQMzQzMF9UUkFDRV9NVVhfQ1RSTF9NQVNLLAorCS5jbGtzZWwJCT0gZW11X3NyY19jbGtzZWwsCisJLmNsa2RtX25hbWUJPSAiZW11X2Nsa2RtIiwKKwkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSB0cmFjZWNsa19yYXRlc1tdID0geworCXsgLmRpdiA9IDEsIC52YWwgPSAxLCAuZmxhZ3MgPSBSQVRFX0lOXzM0M1ggfCBERUZBVUxUX1JBVEUgfSwKKwl7IC5kaXYgPSAyLCAudmFsID0gMiwgLmZsYWdzID0gUkFURV9JTl8zNDNYIH0sCisJeyAuZGl2ID0gNCwgLnZhbCA9IDQsIC5mbGFncyA9IFJBVEVfSU5fMzQzWCB9LAorCXsgLmRpdiA9IDAgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHRyYWNlY2xrX2Nsa3NlbFtdID0geworCXsgLnBhcmVudCA9ICZ0cmFjZWNsa19zcmNfZmNrLCAucmF0ZXMgPSB0cmFjZWNsa19yYXRlcyB9LAorCXsgLnBhcmVudCA9IE5VTEwgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIHRyYWNlY2xrX2ZjayA9IHsKKwkubmFtZQkJPSAidHJhY2VjbGtfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfbnVsbCwKKwkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LAorCS5jbGtzZWxfcmVnCT0gT01BUF9DTV9SRUdBRERSKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpLAorCS5jbGtzZWxfbWFzawk9IE9NQVAzNDMwX0NMS1NFTF9UUkFDRUNMS19NQVNLLAorCS5jbGtzZWwJCT0gdHJhY2VjbGtfY2xrc2VsLAorCS5jbGtkbV9uYW1lCT0gImVtdV9jbGtkbSIsCisJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKK307CisKKy8qIFNSIGNsb2NrcyAqLworCisvKiBTbWFydFJlZmxleCBmY2xrIChWREQxKSAqLworc3RhdGljIHN0cnVjdCBjbGsgc3IxX2ZjayA9IHsKKwkubmFtZQkJPSAic3IxX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZzeXNfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQX0NNX1JFR0FERFIoV0tVUF9NT0QsIENNX0ZDTEtFTiksCisJLmVuYWJsZV9iaXQJPSBPTUFQMzQzMF9FTl9TUjFfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKy8qIFNtYXJ0UmVmbGV4IGZjbGsgKFZERDIpICovCitzdGF0aWMgc3RydWN0IGNsayBzcjJfZmNrID0geworCS5uYW1lCQk9ICJzcjJfZmNrIiwKKwkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdF93YWl0LAorCS5wYXJlbnQJCT0gJnN5c19jaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihXS1VQX01PRCwgQ01fRkNMS0VOKSwKKwkuZW5hYmxlX2JpdAk9IE9NQVAzNDMwX0VOX1NSMl9TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgc3JfbDRfaWNrID0geworCS5uYW1lCQk9ICJzcl9sNF9pY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLCAvKiBSTUs6IG1pc3Npbmc/ICovCisJLnBhcmVudAkJPSAmbDRfaWNrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDRfY2xrZG0iLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBTRUNVUkVfMzJLX0ZDSyBjbG9ja3MgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTJfZmNrID0geworCS5uYW1lCQk9ICJncHQxMl9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnNlY3VyZV8zMmtfZmNrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB3ZHQxX2ZjayA9IHsKKwkubmFtZQkJPSAid2R0MV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19udWxsLAorCS5wYXJlbnQJCT0gJnNlY3VyZV8zMmtfZmNrLAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKiBDbG9ja3MgZm9yIEFNMzVYWCAqLworc3RhdGljIHN0cnVjdCBjbGsgaXBzc19pY2sgPSB7CisJLm5hbWUJCT0gImlwc3NfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfYW0zNXh4X2lwc3Nfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2wzX2ljaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBBTTM1WFhfRU5fSVBTU19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgZW1hY19pY2sgPSB7CisJLm5hbWUJCT0gImVtYWNfaWNrIiwKKwkub3BzCQk9ICZjbGtvcHNfYW0zNXh4X2lwc3NfbW9kdWxlX3dhaXQsCisJLnBhcmVudAkJPSAmaXBzc19pY2ssCisJLmNsa2RtX25hbWUJPSAiY29yZV9sM19jbGtkbSIsCisJLmVuYWJsZV9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoQU0zNVhYX0NPTlRST0xfSVBTU19DTEtfQ1RSTCksCisJLmVuYWJsZV9iaXQJPSBBTTM1WFhfQ1BHTUFDX1ZCVVNQX0NMS19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcm1paV9jayA9IHsKKwkubmFtZQkJPSAicm1paV9jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJhdGUJCT0gNTAwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBlbWFjX2ZjayA9IHsKKwkubmFtZQkJPSAiZW1hY19mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJnJtaWlfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoQU0zNVhYX0NPTlRST0xfSVBTU19DTEtfQ1RSTCksCisJLmVuYWJsZV9iaXQJPSBBTTM1WFhfQ1BHTUFDX0ZDTEtfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhzb3RndXNiX2lja19hbTM1eHggPSB7CisJLm5hbWUJCT0gImhzb3RndXNiX2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX2FtMzV4eF9pcHNzX21vZHVsZV93YWl0LAorCS5wYXJlbnQJCT0gJmlwc3NfaWNrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKEFNMzVYWF9DT05UUk9MX0lQU1NfQ0xLX0NUUkwpLAorCS5lbmFibGVfYml0CT0gQU0zNVhYX1VTQk9UR19WQlVTUF9DTEtfU0hJRlQsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGhzb3RndXNiX2Zja19hbTM1eHggPSB7CisJLm5hbWUJCT0gImhzb3RndXNiX2ZjayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKEFNMzVYWF9DT05UUk9MX0lQU1NfQ0xLX0NUUkwpLAorCS5lbmFibGVfYml0CT0gQU0zNVhYX1VTQk9UR19GQ0xLX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBoZWNjX2NrID0geworCS5uYW1lCQk9ICJoZWNjX2NrIiwKKwkub3BzCQk9ICZjbGtvcHNfYW0zNXh4X2lwc3NfbW9kdWxlX3dhaXQsCisJLnBhcmVudAkJPSAmc3lzX2NrLAorCS5jbGtkbV9uYW1lCT0gImNvcmVfbDNfY2xrZG0iLAorCS5lbmFibGVfcmVnCT0gT01BUDM0M1hfQ1RSTF9SRUdBRERSKEFNMzVYWF9DT05UUk9MX0lQU1NfQ0xLX0NUUkwpLAorCS5lbmFibGVfYml0CT0gQU0zNVhYX0hFQ0NfVkJVU1BfQ0xLX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2cGZlX2ljayA9IHsKKwkubmFtZQkJPSAidnBmZV9pY2siLAorCS5vcHMJCT0gJmNsa29wc19hbTM1eHhfaXBzc19tb2R1bGVfd2FpdCwKKwkucGFyZW50CQk9ICZpcHNzX2ljaywKKwkuY2xrZG1fbmFtZQk9ICJjb3JlX2wzX2Nsa2RtIiwKKwkuZW5hYmxlX3JlZwk9IE9NQVAzNDNYX0NUUkxfUkVHQUREUihBTTM1WFhfQ09OVFJPTF9JUFNTX0NMS19DVFJMKSwKKwkuZW5hYmxlX2JpdAk9IEFNMzVYWF9WUEZFX1ZCVVNQX0NMS19TSElGVCwKKwkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgcGNsa19jayA9IHsKKwkubmFtZQkJPSAicGNsa19jayIsCisJLm9wcwkJPSAmY2xrb3BzX251bGwsCisJLnJhdGUJCT0gMjcwMDAwMDAsCit9OworCitzdGF0aWMgc3RydWN0IGNsayB2cGZlX2ZjayA9IHsKKwkubmFtZQkJPSAidnBmZV9mY2siLAorCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAorCS5wYXJlbnQJCT0gJnBjbGtfY2ssCisJLmVuYWJsZV9yZWcJPSBPTUFQMzQzWF9DVFJMX1JFR0FERFIoQU0zNVhYX0NPTlRST0xfSVBTU19DTEtfQ1RSTCksCisJLmVuYWJsZV9iaXQJPSBBTTM1WFhfVlBGRV9GQ0xLX1NISUZULAorCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCit9OworCisvKgorICogVGhlIFVBUlQxLzIgZnVuY3Rpb25hbCBjbG9jayBhY3RzIGFzIHRoZSBmdW5jdGlvbmFsCisgKiBjbG9jayBmb3IgVUFSVDQuIE5vIHNlcGFyYXRlIGZjbGsgY29udHJvbCBhdmFpbGFibGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQ0X2lja19hbTM1eHggPSB7CisJLm5hbWUJCT0gInVhcnQ0X2ljayIsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHRfd2FpdCwKKwkucGFyZW50CQk9ICZjb3JlX2w0X2ljaywKKwkuZW5hYmxlX3JlZwk9IE9NQVBfQ01fUkVHQUREUihDT1JFX01PRCwgQ01fSUNMS0VOMSksCisJLmVuYWJsZV9iaXQJPSBBTTM1WFhfRU5fVUFSVDRfU0hJRlQsCisJLmNsa2RtX25hbWUJPSAiY29yZV9sNF9jbGtkbSIsCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKK307CisKKworLyoKKyAqIGNsa2RldgorICovCisKKy8qIFhYWCBBdCBzb21lIHBvaW50IHdlIHNob3VsZCByZW5hbWUgdGhpcyBmaWxlIHRvIGNsb2NrM3h4eF9kYXRhLmMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9jbGsgb21hcDN4eHhfY2xrc1tdID0geworCUNMSyhOVUxMLAkib21hcF8zMmtfZmNrIiwJJm9tYXBfMzJrX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJ2aXJ0XzEybV9jayIsCSZ2aXJ0XzEybV9jaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJ2aXJ0XzEzbV9jayIsCSZ2aXJ0XzEzbV9jaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJ2aXJ0XzE2XzhtX2NrIiwgJnZpcnRfMTZfOG1fY2ssIENLXzM0MzBFUzIgfCBDS19BTTM1WFgpLAorCUNMSyhOVUxMLAkidmlydF8xOV8ybV9jayIsICZ2aXJ0XzE5XzJtX2NrLCBDS18zWFhYKSwKKwlDTEsoTlVMTCwJInZpcnRfMjZtX2NrIiwJJnZpcnRfMjZtX2NrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJInZpcnRfMzhfNG1fY2siLCAmdmlydF8zOF80bV9jaywgQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJvc2Nfc3lzX2NrIiwJJm9zY19zeXNfY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkic3lzX2NrIiwJJnN5c19jaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJzeXNfYWx0Y2xrIiwJJnN5c19hbHRjbGssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkibWNic3BfY2xrcyIsCSZtY2JzcF9jbGtzLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJInN5c19jbGtvdXQxIiwJJnN5c19jbGtvdXQxLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGwxX2NrIiwJJmRwbGwxX2NrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGwxX3gyX2NrIiwJJmRwbGwxX3gyX2NrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGwxX3gybTJfY2siLCAmZHBsbDFfeDJtMl9jaywgQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJkcGxsMl9jayIsCSZkcGxsMl9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsMl9tMl9jayIsCSZkcGxsMl9tMl9jaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJkcGxsM19jayIsCSZkcGxsM19jaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJjb3JlX2NrIiwJJmNvcmVfY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDNfeDJfY2siLAkmZHBsbDNfeDJfY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDNfbTJfY2siLAkmZHBsbDNfbTJfY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDNfbTJ4Ml9jayIsICZkcGxsM19tMngyX2NrLCBDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGwzX20zX2NrIiwJJmRwbGwzX20zX2NrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGwzX20zeDJfY2siLCAmZHBsbDNfbTN4Ml9jaywgQ0tfM1hYWCksCisJQ0xLKCJldGIiLAkiZW11X2NvcmVfYWx3b25fY2siLCAmZW11X2NvcmVfYWx3b25fY2ssIENLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDRfY2siLAkmZHBsbDRfY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDRfeDJfY2siLAkmZHBsbDRfeDJfY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkib21hcF8xOTJtX2Fsd29uX2ZjayIsICZvbWFwXzE5Mm1fYWx3b25fZmNrLCBDS18zNlhYKSwKKwlDTEsoTlVMTCwJIm9tYXBfOTZtX2Fsd29uX2ZjayIsICZvbWFwXzk2bV9hbHdvbl9mY2ssIENLXzNYWFgpLAorCUNMSyhOVUxMLAkib21hcF85Nm1fZmNrIiwJJm9tYXBfOTZtX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJjbV85Nm1fZmNrIiwJJmNtXzk2bV9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkib21hcF81NG1fZmNrIiwJJm9tYXBfNTRtX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJvbWFwXzQ4bV9mY2siLAkmb21hcF80OG1fZmNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJIm9tYXBfMTJtX2ZjayIsCSZvbWFwXzEybV9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDRfbTJfY2siLAkmZHBsbDRfbTJfY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDRfbTJ4Ml9jayIsICZkcGxsNF9tMngyX2NrLCBDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGw0X20zX2NrIiwJJmRwbGw0X20zX2NrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGw0X20zeDJfY2siLCAmZHBsbDRfbTN4Ml9jaywgQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tNF9jayIsCSZkcGxsNF9tNF9jaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJkcGxsNF9tNHgyX2NrIiwgJmRwbGw0X200eDJfY2ssIENLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDRfbTVfY2siLAkmZHBsbDRfbTVfY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDRfbTV4Ml9jayIsICZkcGxsNF9tNXgyX2NrLCBDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGw0X202X2NrIiwJJmRwbGw0X202X2NrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGw0X202eDJfY2siLCAmZHBsbDRfbTZ4Ml9jaywgQ0tfM1hYWCksCisJQ0xLKCJldGIiLAkiZW11X3Blcl9hbHdvbl9jayIsICZlbXVfcGVyX2Fsd29uX2NrLCBDS18zWFhYKSwKKwlDTEsoTlVMTCwJImRwbGw1X2NrIiwJJmRwbGw1X2NrLAlDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKKwlDTEsoTlVMTCwJImRwbGw1X20yX2NrIiwJJmRwbGw1X20yX2NrLAlDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKKwlDTEsoTlVMTCwJImNsa291dDJfc3JjX2NrIiwgJmNsa291dDJfc3JjX2NrLCBDS18zWFhYKSwKKwlDTEsoTlVMTCwJInN5c19jbGtvdXQyIiwJJnN5c19jbGtvdXQyLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImNvcmV4Ml9mY2siLAkmY29yZXgyX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJkcGxsMV9mY2siLAkmZHBsbDFfZmNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJIm1wdV9jayIsCSZtcHVfY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiYXJtX2ZjayIsCSZhcm1fZmNrLAlDS18zWFhYKSwKKwlDTEsoImV0YiIsCSJlbXVfbXB1X2Fsd29uX2NrIiwgJmVtdV9tcHVfYWx3b25fY2ssIENLXzNYWFgpLAorCUNMSyhOVUxMLAkiZHBsbDJfZmNrIiwJJmRwbGwyX2ZjaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJpdmEyX2NrIiwJJml2YTJfY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkibDNfaWNrIiwJJmwzX2ljaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJsNF9pY2siLAkmbDRfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJInJtX2ljayIsCSZybV9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ2Z4X2wzX2NrIiwJJmdmeF9sM19jaywJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJnZnhfbDNfZmNrIiwJJmdmeF9sM19mY2ssCUNLXzM0MzBFUzEpLAorCUNMSyhOVUxMLAkiZ2Z4X2wzX2ljayIsCSZnZnhfbDNfaWNrLAlDS18zNDMwRVMxKSwKKwlDTEsoTlVMTCwJImdmeF9jZzFfY2siLAkmZ2Z4X2NnMV9jaywJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJnZnhfY2cyX2NrIiwJJmdmeF9jZzJfY2ssCUNLXzM0MzBFUzEpLAorCUNMSyhOVUxMLAkic2d4X2ZjayIsCSZzZ3hfZmNrLAlDS18zNDMwRVMyIHwgQ0tfMzUxNyksCisJQ0xLKE5VTEwsCSJzZ3hfaWNrIiwJJnNneF9pY2ssCUNLXzM0MzBFUzIgfCBDS18zNTE3KSwKKwlDTEsoTlVMTCwJImQyZF8yNm1fZmNrIiwJJmQyZF8yNm1fZmNrLAlDS18zNDMwRVMxKSwKKwlDTEsoTlVMTCwJIm1vZGVtX2ZjayIsCSZtb2RlbV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic2FkMmRfaWNrIiwJJnNhZDJkX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJtYWQyZF9pY2siLAkmbWFkMmRfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImdwdDEwX2ZjayIsCSZncHQxMF9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0MTFfZmNrIiwJJmdwdDExX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJjcGVmdXNlX2ZjayIsCSZjcGVmdXNlX2ZjaywJQ0tfMzQzMEVTMiB8IENLX0FNMzVYWCksCisJQ0xLKE5VTEwsCSJ0c19mY2siLAkmdHNfZmNrLAlDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKKwlDTEsoTlVMTCwJInVzYnRsbF9mY2siLAkmdXNidGxsX2ZjaywJQ0tfMzQzMEVTMiB8IENLX0FNMzVYWCksCisJQ0xLKE5VTEwsCSJjb3JlXzk2bV9mY2siLAkmY29yZV85Nm1fZmNrLAlDS18zWFhYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4yIiwJImZjayIsCSZtbWNoczNfZmNrLAlDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4xIiwJImZjayIsCSZtbWNoczJfZmNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJIm1zcHJvX2ZjayIsCSZtc3Byb19mY2ssCUNLXzM0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjAiLAkiZmNrIiwJJm1tY2hzMV9mY2ssCUNLXzNYWFgpLAorCUNMSygiaTJjX29tYXAuMyIsICJmY2siLAkmaTJjM19mY2ssCUNLXzNYWFgpLAorCUNMSygiaTJjX29tYXAuMiIsICJmY2siLAkmaTJjMl9mY2ssCUNLXzNYWFgpLAorCUNMSygiaTJjX29tYXAuMSIsICJmY2siLAkmaTJjMV9mY2ssCUNLXzNYWFgpLAorCUNMSygib21hcC1tY2JzcC41IiwgImZjayIsCSZtY2JzcDVfZmNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsICJmY2siLAkmbWNic3AxX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJjb3JlXzQ4bV9mY2siLAkmY29yZV80OG1fZmNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjQiLCAiZmNrIiwJJm1jc3BpNF9mY2ssCUNLXzNYWFgpLAorCUNMSygib21hcDJfbWNzcGkuMyIsICJmY2siLAkmbWNzcGkzX2ZjaywJQ0tfM1hYWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4yIiwgImZjayIsCSZtY3NwaTJfZmNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjEiLCAiZmNrIiwJJm1jc3BpMV9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkidWFydDJfZmNrIiwJJnVhcnQyX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJ1YXJ0MV9mY2siLAkmdWFydDFfZmNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImZzaG9zdHVzYl9mY2siLCAmZnNob3N0dXNiX2ZjaywgQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJjb3JlXzEybV9mY2siLAkmY29yZV8xMm1fZmNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXBfaGRxLjAiLCAiZmNrIiwJJmhkcV9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkic3NpX3Nzcl9mY2siLAkmc3NpX3Nzcl9mY2tfMzQzMGVzMSwJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJzc2lfc3NyX2ZjayIsCSZzc2lfc3NyX2Zja18zNDMwZXMyLAlDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJInNzaV9zc3RfZmNrIiwJJnNzaV9zc3RfZmNrXzM0MzBlczEsCUNLXzM0MzBFUzEpLAorCUNMSyhOVUxMLAkic3NpX3NzdF9mY2siLAkmc3NpX3NzdF9mY2tfMzQzMGVzMiwJQ0tfMzQzMEVTMiksCisJQ0xLKE5VTEwsCSJjb3JlX2wzX2ljayIsCSZjb3JlX2wzX2ljaywJQ0tfM1hYWCksCisJQ0xLKCJtdXNiX2hkcmMiLAkiaWNrIiwJJmhzb3RndXNiX2lja18zNDMwZXMxLAlDS18zNDMwRVMxKSwKKwlDTEsoIm11c2JfaGRyYyIsCSJpY2siLAkmaHNvdGd1c2JfaWNrXzM0MzBlczIsCUNLXzM0MzBFUzIpLAorCUNMSyhOVUxMLAkic2RyY19pY2siLAkmc2RyY19pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3BtY19mY2siLAkmZ3BtY19mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkic2VjdXJpdHlfbDNfaWNrIiwgJnNlY3VyaXR5X2wzX2ljaywgQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJwa2FfaWNrIiwJJnBrYV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiY29yZV9sNF9pY2siLAkmY29yZV9sNF9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkidXNidGxsX2ljayIsCSZ1c2J0bGxfaWNrLAlDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4yIiwJImljayIsCSZtbWNoczNfaWNrLAlDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKKwlDTEsoTlVMTCwJImljcl9pY2siLAkmaWNyX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJhZXMyX2ljayIsCSZhZXMyX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJzaGExMl9pY2siLAkmc2hhMTJfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImRlczJfaWNrIiwJJmRlczJfaWNrLAlDS18zNDNYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4xIiwJImljayIsCSZtbWNoczJfaWNrLAlDS18zWFhYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4wIiwJImljayIsCSZtbWNoczFfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJIm1zcHJvX2ljayIsCSZtc3Byb19pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcF9oZHEuMCIsICJpY2siLAkmaGRxX2ljaywJQ0tfM1hYWCksCisJQ0xLKCJvbWFwMl9tY3NwaS40IiwgImljayIsCSZtY3NwaTRfaWNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjMiLCAiaWNrIiwJJm1jc3BpM19pY2ssCUNLXzNYWFgpLAorCUNMSygib21hcDJfbWNzcGkuMiIsICJpY2siLAkmbWNzcGkyX2ljaywJQ0tfM1hYWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4xIiwgImljayIsCSZtY3NwaTFfaWNrLAlDS18zWFhYKSwKKwlDTEsoImkyY19vbWFwLjMiLCAiaWNrIiwJJmkyYzNfaWNrLAlDS18zWFhYKSwKKwlDTEsoImkyY19vbWFwLjIiLCAiaWNrIiwJJmkyYzJfaWNrLAlDS18zWFhYKSwKKwlDTEsoImkyY19vbWFwLjEiLCAiaWNrIiwJJmkyYzFfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJInVhcnQyX2ljayIsCSZ1YXJ0Ml9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkidWFydDFfaWNrIiwJJnVhcnQxX2ljaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJncHQxMV9pY2siLAkmZ3B0MTFfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImdwdDEwX2ljayIsCSZncHQxMF9pY2ssCUNLXzNYWFgpLAorCUNMSygib21hcC1tY2JzcC41IiwgImljayIsCSZtY2JzcDVfaWNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsICJpY2siLAkmbWNic3AxX2ljaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJmYWNfaWNrIiwJJmZhY19pY2ssCUNLXzM0MzBFUzEpLAorCUNMSyhOVUxMLAkibWFpbGJveGVzX2ljayIsICZtYWlsYm94ZXNfaWNrLCBDS18zNDNYKSwKKwlDTEsoTlVMTCwJIm9tYXBjdHJsX2ljayIsCSZvbWFwY3RybF9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkic3NpX2w0X2ljayIsCSZzc2lfbDRfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNzaV9pY2siLAkmc3NpX2lja18zNDMwZXMxLAlDS18zNDMwRVMxKSwKKwlDTEsoTlVMTCwJInNzaV9pY2siLAkmc3NpX2lja18zNDMwZXMyLAlDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJInVzYl9sNF9pY2siLAkmdXNiX2w0X2ljaywJQ0tfMzQzMEVTMSksCisJQ0xLKE5VTEwsCSJzZWN1cml0eV9sNF9pY2syIiwgJnNlY3VyaXR5X2w0X2ljazIsIENLXzM0M1gpLAorCUNMSyhOVUxMLAkiYWVzMV9pY2siLAkmYWVzMV9pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcF9ybmciLAkiaWNrIiwJCSZybmdfaWNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNoYTExX2ljayIsCSZzaGExMV9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkiZGVzMV9pY2siLAkmZGVzMV9pY2ssCUNLXzM0M1gpLAorCUNMSygib21hcGRzcyIsCSJkc3MxX2ZjayIsCSZkc3MxX2Fsd29uX2Zja18zNDMwZXMxLCBDS18zNDMwRVMxKSwKKwlDTEsoIm9tYXBkc3MiLAkiZHNzMV9mY2siLAkmZHNzMV9hbHdvbl9mY2tfMzQzMGVzMiwgQ0tfMzQzMEVTMiB8IENLX0FNMzVYWCksCisJQ0xLKCJvbWFwZHNzIiwJInR2X2ZjayIsCSZkc3NfdHZfZmNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXBkc3MiLAkidmlkZW9fZmNrIiwJJmRzc185Nm1fZmNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXBkc3MiLAkiZHNzMl9mY2siLAkmZHNzMl9hbHdvbl9mY2ssIENLXzNYWFgpLAorCUNMSygib21hcGRzcyIsCSJpY2siLAkJJmRzc19pY2tfMzQzMGVzMSwJQ0tfMzQzMEVTMSksCisJQ0xLKCJvbWFwZHNzIiwJImljayIsCQkmZHNzX2lja18zNDMwZXMyLAlDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKKwlDTEsoTlVMTCwJImNhbV9tY2xrIiwJJmNhbV9tY2xrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJImNhbV9pY2siLAkmY2FtX2ljaywJQ0tfMzQzWCksCisJQ0xLKE5VTEwsCSJjc2kyXzk2bV9mY2siLAkmY3NpMl85Nm1fZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInVzYmhvc3RfMTIwbV9mY2siLCAmdXNiaG9zdF8xMjBtX2ZjaywgQ0tfMzQzMEVTMiB8IENLX0FNMzVYWCksCisJQ0xLKE5VTEwsCSJ1c2Job3N0XzQ4bV9mY2siLCAmdXNiaG9zdF80OG1fZmNrLCBDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKKwlDTEsoTlVMTCwJInVzYmhvc3RfaWNrIiwJJnVzYmhvc3RfaWNrLAlDS18zNDMwRVMyIHwgQ0tfQU0zNVhYKSwKKwlDTEsoTlVMTCwJInVzaW1fZmNrIiwJJnVzaW1fZmNrLAlDS18zNDMwRVMyKSwKKwlDTEsoTlVMTCwJImdwdDFfZmNrIiwJJmdwdDFfZmNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJIndrdXBfMzJrX2ZjayIsCSZ3a3VwXzMya19mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3BpbzFfZGJjayIsCSZncGlvMV9kYmNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXBfd2R0IiwJImZjayIsCQkmd2R0Ml9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkid2t1cF9sNF9pY2siLAkmd2t1cF9sNF9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkidXNpbV9pY2siLAkmdXNpbV9pY2ssCUNLXzM0MzBFUzIpLAorCUNMSygib21hcF93ZHQiLAkiaWNrIiwJCSZ3ZHQyX2ljaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJ3ZHQxX2ljayIsCSZ3ZHQxX2ljaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJncGlvMV9pY2siLAkmZ3BpbzFfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJIm9tYXBfMzJrc3luY19pY2siLCAmb21hcF8zMmtzeW5jX2ljaywgQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJncHQxMl9pY2siLAkmZ3B0MTJfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImdwdDFfaWNrIiwJJmdwdDFfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJInBlcl85Nm1fZmNrIiwJJnBlcl85Nm1fZmNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJInBlcl80OG1fZmNrIiwJJnBlcl80OG1fZmNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJInVhcnQzX2ZjayIsCSZ1YXJ0M19mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0Ml9mY2siLAkmZ3B0Ml9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0M19mY2siLAkmZ3B0M19mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0NF9mY2siLAkmZ3B0NF9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0NV9mY2siLAkmZ3B0NV9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0Nl9mY2siLAkmZ3B0Nl9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0N19mY2siLAkmZ3B0N19mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0OF9mY2siLAkmZ3B0OF9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0OV9mY2siLAkmZ3B0OV9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkicGVyXzMya19hbHdvbl9mY2siLCAmcGVyXzMya19hbHdvbl9mY2ssIENLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3BpbzZfZGJjayIsCSZncGlvNl9kYmNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImdwaW81X2RiY2siLAkmZ3BpbzVfZGJjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJncGlvNF9kYmNrIiwJJmdwaW80X2RiY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3BpbzNfZGJjayIsCSZncGlvM19kYmNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImdwaW8yX2RiY2siLAkmZ3BpbzJfZGJjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJ3ZHQzX2ZjayIsCSZ3ZHQzX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJwZXJfbDRfaWNrIiwJJnBlcl9sNF9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3BpbzZfaWNrIiwJJmdwaW82X2ljaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJncGlvNV9pY2siLAkmZ3BpbzVfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJImdwaW80X2ljayIsCSZncGlvNF9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3BpbzNfaWNrIiwJJmdwaW8zX2ljaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJncGlvMl9pY2siLAkmZ3BpbzJfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJIndkdDNfaWNrIiwJJndkdDNfaWNrLAlDS18zWFhYKSwKKwlDTEsoTlVMTCwJInVhcnQzX2ljayIsCSZ1YXJ0M19pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0OV9pY2siLAkmZ3B0OV9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0OF9pY2siLAkmZ3B0OF9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0N19pY2siLAkmZ3B0N19pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0Nl9pY2siLAkmZ3B0Nl9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0NV9pY2siLAkmZ3B0NV9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0NF9pY2siLAkmZ3B0NF9pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0M19pY2siLAkmZ3B0M19pY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0Ml9pY2siLAkmZ3B0Ml9pY2ssCUNLXzNYWFgpLAorCUNMSygib21hcC1tY2JzcC4yIiwgImljayIsCSZtY2JzcDJfaWNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXAtbWNic3AuMyIsICJpY2siLAkmbWNic3AzX2ljaywJQ0tfM1hYWCksCisJQ0xLKCJvbWFwLW1jYnNwLjQiLCAiaWNrIiwJJm1jYnNwNF9pY2ssCUNLXzNYWFgpLAorCUNMSygib21hcC1tY2JzcC4yIiwgImZjayIsCSZtY2JzcDJfZmNrLAlDS18zWFhYKSwKKwlDTEsoIm9tYXAtbWNic3AuMyIsICJmY2siLAkmbWNic3AzX2ZjaywJQ0tfM1hYWCksCisJQ0xLKCJvbWFwLW1jYnNwLjQiLCAiZmNrIiwJJm1jYnNwNF9mY2ssCUNLXzNYWFgpLAorCUNMSygiZXRiIiwJImVtdV9zcmNfY2siLAkmZW11X3NyY19jaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJwY2xrX2ZjayIsCSZwY2xrX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJwY2xreDJfZmNrIiwJJnBjbGt4Ml9mY2ssCUNLXzNYWFgpLAorCUNMSyhOVUxMLAkiYXRjbGtfZmNrIiwJJmF0Y2xrX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJ0cmFjZWNsa19zcmNfZmNrIiwgJnRyYWNlY2xrX3NyY19mY2ssIENLXzNYWFgpLAorCUNMSyhOVUxMLAkidHJhY2VjbGtfZmNrIiwJJnRyYWNlY2xrX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJzcjFfZmNrIiwJJnNyMV9mY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic3IyX2ZjayIsCSZzcjJfZmNrLAlDS18zNDNYKSwKKwlDTEsoTlVMTCwJInNyX2w0X2ljayIsCSZzcl9sNF9pY2ssCUNLXzM0M1gpLAorCUNMSyhOVUxMLAkic2VjdXJlXzMya19mY2siLCAmc2VjdXJlXzMya19mY2ssIENLXzNYWFgpLAorCUNMSyhOVUxMLAkiZ3B0MTJfZmNrIiwJJmdwdDEyX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJ3ZHQxX2ZjayIsCSZ3ZHQxX2ZjaywJQ0tfM1hYWCksCisJQ0xLKE5VTEwsCSJpcHNzX2ljayIsCSZpcHNzX2ljaywJQ0tfQU0zNVhYKSwKKwlDTEsoTlVMTCwJInJtaWlfY2siLAkmcm1paV9jaywJQ0tfQU0zNVhYKSwKKwlDTEsoTlVMTCwJInBjbGtfY2siLAkmcGNsa19jaywJQ0tfQU0zNVhYKSwKKwlDTEsoImRhdmluY2lfZW1hYyIsCSJpY2siLAkJJmVtYWNfaWNrLAlDS19BTTM1WFgpLAorCUNMSygiZGF2aW5jaV9lbWFjIiwJImZjayIsCQkmZW1hY19mY2ssCUNLX0FNMzVYWCksCisJQ0xLKCJ2cGZlLWNhcHR1cmUiLAkibWFzdGVyIiwJJnZwZmVfaWNrLAlDS19BTTM1WFgpLAorCUNMSygidnBmZS1jYXB0dXJlIiwJInNsYXZlIiwJJnZwZmVfZmNrLAlDS19BTTM1WFgpLAorCUNMSygibXVzYl9oZHJjIiwJImljayIsCQkmaHNvdGd1c2JfaWNrX2FtMzV4eCwJQ0tfQU0zNVhYKSwKKwlDTEsoIm11c2JfaGRyYyIsCSJmY2siLAkJJmhzb3RndXNiX2Zja19hbTM1eHgsCUNLX0FNMzVYWCksCisJQ0xLKE5VTEwsCSJoZWNjX2NrIiwJJmhlY2NfY2ssCUNLX0FNMzVYWCksCisJQ0xLKE5VTEwsCSJ1YXJ0NF9pY2siLAkmdWFydDRfaWNrX2FtMzV4eCwJQ0tfQU0zNVhYKSwKK307CisKKworaW50IF9faW5pdCBvbWFwM3h4eF9jbGtfaW5pdCh2b2lkKQoreworCXN0cnVjdCBvbWFwX2NsayAqYzsKKwl1MzIgY3B1X2Nsa2ZsZyA9IENLXzNYWFg7CisKKwlpZiAoY3B1X2lzX29tYXAzNTE3KCkpIHsKKwkJY3B1X21hc2sgPSBSQVRFX0lOXzM0M1ggfCBSQVRFX0lOXzM0MzBFUzI7CisJCWNwdV9jbGtmbGcgfD0gQ0tfMzUxNzsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzUwNSgpKSB7CisJCWNwdV9tYXNrID0gUkFURV9JTl8zNDNYIHwgUkFURV9JTl8zNDMwRVMyOworCQljcHVfY2xrZmxnIHw9IENLXzM1MDU7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQljcHVfbWFzayA9IFJBVEVfSU5fMzQzWDsKKwkJY3B1X2Nsa2ZsZyB8PSBDS18zNDNYOworCisJCS8qCisJCSAqIFVwZGF0ZSB0aGlzIGlmIHRoZXJlIGFyZSBmdXJ0aGVyIGNsb2NrIGNoYW5nZXMgYmV0d2VlbiBFUzIKKwkJICogYW5kIHByb2R1Y3Rpb24gcGFydHMKKwkJICovCisJCWlmIChvbWFwX3JldigpID09IE9NQVAzNDMwX1JFVl9FUzFfMCkgeworCQkJLyogTm8gMzQzMEVTMS1vbmx5IHJhdGVzIGV4aXN0LCBzbyBubyBSQVRFX0lOXzM0MzBFUzEgKi8KKwkJCWNwdV9jbGtmbGcgfD0gQ0tfMzQzMEVTMTsKKwkJfSBlbHNlIHsKKwkJCWNwdV9tYXNrIHw9IFJBVEVfSU5fMzQzMEVTMjsKKwkJCWNwdV9jbGtmbGcgfD0gQ0tfMzQzMEVTMjsKKwkJfQorCX0KKwlpZiAob21hcDNfaGFzXzE5Mm1oel9jbGsoKSkKKwkJb21hcF85Nm1fYWx3b25fZmNrID0gb21hcF85Nm1fYWx3b25fZmNrXzM2MzA7CisKKwlpZiAoY3B1X2lzX29tYXAzNjMwKCkpIHsKKwkJY3B1X21hc2sgfD0gUkFURV9JTl8zNlhYOworCQljcHVfY2xrZmxnIHw9IENLXzM2WFg7CisKKwkJLyoKKwkJICogWFhYIFRoaXMgdHlwZSBvZiBkeW5hbWljIHJld3JpdGluZyBvZiB0aGUgY2xvY2sgdHJlZSBpcworCQkgKiBkZXByZWNhdGVkIGFuZCBzaG91bGQgYmUgcmV2aXNlZCBzb29uLgorCQkgKi8KKwkJZHBsbDRfbTJfY2sgPSBkcGxsNF9tMl9ja18zNjMwOworCQlkcGxsNF9tM19jayA9IGRwbGw0X20zX2NrXzM2MzA7CisJCWRwbGw0X200X2NrID0gZHBsbDRfbTRfY2tfMzYzMDsKKwkJZHBsbDRfbTVfY2sgPSBkcGxsNF9tNV9ja18zNjMwOworCQlkcGxsNF9tNl9jayA9IGRwbGw0X202X2NrXzM2MzA7CisKKwkJLyoKKwkJICogRm9yIDM2MzA6IG92ZXJyaWRlIGNsa29wc19vbWFwMl9kZmx0X3dhaXQgZm9yIHRoZQorCQkgKiBjbG9ja3MgYWZmZWN0ZWQgZnJvbSBQV1JETiByZXNldCBMaW1pdGF0aW9uCisJCSAqLworCQlkcGxsM19tM3gyX2NrLm9wcyA9CisJCQkJJmNsa29wc19vbWFwMzZ4eF9wd3Jkbl93aXRoX2hzZGl2X3dhaXRfcmVzdG9yZTsKKwkJZHBsbDRfbTJ4Ml9jay5vcHMgPQorCQkJCSZjbGtvcHNfb21hcDM2eHhfcHdyZG5fd2l0aF9oc2Rpdl93YWl0X3Jlc3RvcmU7CisJCWRwbGw0X20zeDJfY2sub3BzID0KKwkJCQkmY2xrb3BzX29tYXAzNnh4X3B3cmRuX3dpdGhfaHNkaXZfd2FpdF9yZXN0b3JlOworCQlkcGxsNF9tNHgyX2NrLm9wcyA9CisJCQkJJmNsa29wc19vbWFwMzZ4eF9wd3Jkbl93aXRoX2hzZGl2X3dhaXRfcmVzdG9yZTsKKwkJZHBsbDRfbTV4Ml9jay5vcHMgPQorCQkJCSZjbGtvcHNfb21hcDM2eHhfcHdyZG5fd2l0aF9oc2Rpdl93YWl0X3Jlc3RvcmU7CisJCWRwbGw0X202eDJfY2sub3BzID0KKwkJCQkmY2xrb3BzX29tYXAzNnh4X3B3cmRuX3dpdGhfaHNkaXZfd2FpdF9yZXN0b3JlOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFhYWCBUaGlzIHR5cGUgb2YgZHluYW1pYyByZXdyaXRpbmcgb2YgdGhlIGNsb2NrIHRyZWUgaXMKKwkJICogZGVwcmVjYXRlZCBhbmQgc2hvdWxkIGJlIHJldmlzZWQgc29vbi4KKwkJICovCisJCWRwbGw0X20yX2NrID0gZHBsbDRfbTJfY2tfMzR4eDsKKwkJZHBsbDRfbTNfY2sgPSBkcGxsNF9tM19ja18zNHh4OworCQlkcGxsNF9tNF9jayA9IGRwbGw0X200X2NrXzM0eHg7CisJCWRwbGw0X201X2NrID0gZHBsbDRfbTVfY2tfMzR4eDsKKwkJZHBsbDRfbTZfY2sgPSBkcGxsNF9tNl9ja18zNHh4OworCX0KKworCWlmIChjcHVfaXNfb21hcDM2MzAoKSkKKwkJZHBsbDRfZGQgPSBkcGxsNF9kZF8zNjMwOworCWVsc2UKKwkJZHBsbDRfZGQgPSBkcGxsNF9kZF8zNHh4OworCisJY2xrX2luaXQoJm9tYXAyX2Nsa19mdW5jdGlvbnMpOworCisJZm9yIChjID0gb21hcDN4eHhfY2xrczsgYyA8IG9tYXAzeHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAzeHh4X2Nsa3MpOworCSAgICAgYysrKQorCQljbGtfcHJlaW5pdChjLT5say5jbGspOworCisJZm9yIChjID0gb21hcDN4eHhfY2xrczsgYyA8IG9tYXAzeHh4X2Nsa3MgKyBBUlJBWV9TSVpFKG9tYXAzeHh4X2Nsa3MpOworCSAgICAgYysrKQorCQlpZiAoYy0+Y3B1ICYgY3B1X2Nsa2ZsZykgeworCQkJY2xrZGV2X2FkZCgmYy0+bGspOworCQkJY2xrX3JlZ2lzdGVyKGMtPmxrLmNsayk7CisJCQlvbWFwMl9pbml0X2Nsa19jbGtkbShjLT5say5jbGspOworCQl9CisKKwlyZWNhbGN1bGF0ZV9yb290X2Nsb2NrcygpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQ2xvY2tpbmcgcmF0ZSAoQ3J5c3RhbC9Db3JlL01QVSk6ICIKKwkgICAgICAgIiVsZC4lMDFsZC8lbGQvJWxkIE1IelxuIiwKKwkgICAgICAgKG9zY19zeXNfY2sucmF0ZSAvIDEwMDAwMDApLCAob3NjX3N5c19jay5yYXRlIC8gMTAwMDAwKSAlIDEwLAorCSAgICAgICAoY29yZV9jay5yYXRlIC8gMTAwMDAwMCksIChhcm1fZmNrLnJhdGUgLyAxMDAwMDAwKSk7CisKKwkvKgorCSAqIE9ubHkgZW5hYmxlIHRob3NlIGNsb2NrcyB3ZSB3aWxsIG5lZWQsIGxldCB0aGUgZHJpdmVycworCSAqIGVuYWJsZSBvdGhlciBjbG9ja3MgYXMgbmVjZXNzYXJ5CisJICovCisJY2xrX2VuYWJsZV9pbml0X2Nsb2NrcygpOworCisJLyoKKwkgKiBMb2NrIERQTEw1IGFuZCBwdXQgaXQgaW4gYXV0b2lkbGUuCisJICovCisJaWYgKG9tYXBfcmV2KCkgPj0gT01BUDM0MzBfUkVWX0VTMl8wKQorCQlvbWFwM19jbGtfbG9ja19kcGxsNSgpOworCisJLyogQXZvaWQgc2xlZXBpbmcgZHVyaW5nIG9tYXAzX2NvcmVfZHBsbF9tMl9zZXRfcmF0ZSgpICovCisJc2RyY19pY2tfcCA9IGNsa19nZXQoTlVMTCwgInNkcmNfaWNrIik7CisJYXJtX2Zja19wID0gY2xrX2dldChOVUxMLCAiYXJtX2ZjayIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHguYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTM3MDg2OC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIE9NQVA0LXNwZWNpZmljIGNsb2NrIGZyYW1ld29yayBmdW5jdGlvbnMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqCi0gKiBSYWplbmRyYSBOYXlhayAocm5heWFrQHRpLmNvbSkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgImNsb2NrLmgiCi0KLXN0cnVjdCBjbGtfZnVuY3Rpb25zIG9tYXAyX2Nsa19mdW5jdGlvbnMgPSB7Ci0JLmNsa19lbmFibGUJCT0gb21hcDJfY2xrX2VuYWJsZSwKLQkuY2xrX2Rpc2FibGUJCT0gb21hcDJfY2xrX2Rpc2FibGUsCi0JLmNsa19yb3VuZF9yYXRlCQk9IG9tYXAyX2Nsa19yb3VuZF9yYXRlLAotCS5jbGtfc2V0X3JhdGUJCT0gb21hcDJfY2xrX3NldF9yYXRlLAotCS5jbGtfc2V0X3BhcmVudAkJPSBvbWFwMl9jbGtfc2V0X3BhcmVudCwKLQkuY2xrX2Rpc2FibGVfdW51c2VkCT0gb21hcDJfY2xrX2Rpc2FibGVfdW51c2VkLAotfTsKLQotY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfbm9uY29yZV9kcGxsX29wcyA9IHsKLQkuZW5hYmxlCQk9ICZvbWFwM19ub25jb3JlX2RwbGxfZW5hYmxlLAotCS5kaXNhYmxlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9kaXNhYmxlLAotfTsKLQotdm9pZCBvbWFwMl9jbGtfcHJlcGFyZV9mb3JfcmVib290KHZvaWQpCi17Ci0JcmV0dXJuOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4LmgKaW5kZXggNTliOWNlZC4uNmJlMTA5NSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eC5oCkBAIC0yLDE0ICsyLDE5IEBACiAgKiBPTUFQNCBjbG9jayBmdW5jdGlvbiBwcm90b3R5cGVzIGFuZCBtYWNyb3MKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICovCiAKLSNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLXzQ0WFhfSAotI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0tfNDRYWF9ICisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DSzQ0WFhfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0s0NFhYX0gKIAotI2RlZmluZSBPTUFQNDQzMF9NQVhfRFBMTF9NVUxUCTIwNDgKKy8qCisgKiBYWFggTWlzc2luZyB2YWx1ZXMgZm9yIHRoZSBPTUFQNCBEUExMX1VTQgorICogWFhYIE1pc3NpbmcgbWluX211bHRpcGxpZXIgdmFsdWVzIGZvciBhbGwgT01BUDQgRFBMTHMKKyAqLworI2RlZmluZSBPTUFQNDQzMF9NQVhfRFBMTF9NVUxUCTIwNDcKICNkZWZpbmUgT01BUDQ0MzBfTUFYX0RQTExfRElWCTEyOAogCi1leHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfbm9uY29yZV9kcGxsX29wczsKK2ludCBvbWFwNHh4eF9jbGtfaW5pdCh2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eF9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrNDR4eF9kYXRhLmMKaW5kZXggOWQ4ODJiYy4uMjhiMTA3OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jazQ0eHhfZGF0YS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2s0NHh4X2RhdGEuYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgKiBPTUFQNCBDbG9jayBkYXRhCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFBhdWwgV2FsbXNsZXkgKHBhdWxAcHdzYW4uY29tKQogICogUmFqZW5kcmEgTmF5YWsgKHJuYXlha0B0aS5jb20pCkBAIC0yMCw3ICsyMCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9jbGsuaD4KIAogI2luY2x1ZGUgPHBsYXQvY29udHJvbC5oPgpAQCAtMzksNDIgKzM5LDM2IEBACiAJLm5hbWUJCT0gImV4dGFsdF9jbGtpbl9jayIsCiAJLnJhdGUJCT0gNTkwMDAwMDAsCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwIHwgQUxXQVlTX0VOQUJMRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBwYWRfY2xrc19jayA9IHsKIAkubmFtZQkJPSAicGFkX2Nsa3NfY2siLAogCS5yYXRlCQk9IDEyMDAwMDAwLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCB8IEFMV0FZU19FTkFCTEVELAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgcGFkX3NsaW1idXNfY29yZV9jbGtzX2NrID0gewogCS5uYW1lCQk9ICJwYWRfc2xpbWJ1c19jb3JlX2Nsa3NfY2siLAogCS5yYXRlCQk9IDEyMDAwMDAwLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCB8IEFMV0FZU19FTkFCTEVELAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgc2VjdXJlXzMya19jbGtfc3JjX2NrID0gewogCS5uYW1lCQk9ICJzZWN1cmVfMzJrX2Nsa19zcmNfY2siLAogCS5yYXRlCQk9IDMyNzY4LAogCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCB8IEFMV0FZU19FTkFCTEVELAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgc2xpbWJ1c19jbGsgPSB7CiAJLm5hbWUJCT0gInNsaW1idXNfY2xrIiwKIAkucmF0ZQkJPSAxMjAwMDAwMCwKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAgfCBBTFdBWVNfRU5BQkxFRCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHN5c18zMmtfY2sgPSB7CiAJLm5hbWUJCT0gInN5c18zMmtfY2siLAogCS5yYXRlCQk9IDMyNzY4LAogCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCB8IEFMV0FZU19FTkFCTEVELAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdmlydF8xMjAwMDAwMF9jayA9IHsKQEAgLTE3OSwzNSArMTczLDMwIEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfU1lTX0NMS1NFTF9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwIHwgQUxXQVlTX0VOQUJMRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB1dG1pX3BoeV9jbGtvdXRfY2sgPSB7CiAJLm5hbWUJCT0gInV0bWlfcGh5X2Nsa291dF9jayIsCiAJLnJhdGUJCT0gMTIwMDAwMDAsCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwIHwgQUxXQVlTX0VOQUJMRUQsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayB4Y2xrNjBtaHNwMV9jayA9IHsKIAkubmFtZQkJPSAieGNsazYwbWhzcDFfY2siLAogCS5yYXRlCQk9IDEyMDAwMDAwLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCB8IEFMV0FZU19FTkFCTEVELAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgeGNsazYwbWhzcDJfY2sgPSB7CiAJLm5hbWUJCT0gInhjbGs2MG1oc3AyX2NrIiwKIAkucmF0ZQkJPSAxMjAwMDAwMCwKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAgfCBBTFdBWVNfRU5BQkxFRCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHhjbGs2MG1vdGdfY2sgPSB7CiAJLm5hbWUJCT0gInhjbGs2MG1vdGdfY2siLAogCS5yYXRlCQk9IDYwMDAwMDAwLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCB8IEFMV0FZU19FTkFCTEVELAogfTsKIAogLyogTW9kdWxlIGNsb2NrcyBhbmQgRFBMTCBvdXRwdXRzICovCkBAIC0yMzMsNyArMjIyLDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgYWJlX2RwbGxfcmVmY2xrX211eF9zZWxbXSA9IHsKQEAgLTI1MSw3ICsyMzksNiBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF8wXzBfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIC8qIERQTExfQUJFICovCkBAIC0yNzksMTEgKzI2NiwxMCBAQAogCS5wYXJlbnQJCT0gJmFiZV9kcGxsX3JlZmNsa19tdXhfY2ssCiAJLmRwbGxfZGF0YQk9ICZkcGxsX2FiZV9kZCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9kcGxsX3BhcmVudCwKLQkub3BzCQk9ICZjbGtvcHNfbm9uY29yZV9kcGxsX29wcywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDNfbm9uY29yZV9kcGxsX29wcywKIAkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsX2FiZV9tMngyX2NrID0gewpAQCAtMjkxLDcgKzI3Nyw2IEBACiAJLnBhcmVudAkJPSAmZHBsbF9hYmVfY2ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBhYmVfMjRtX2ZjbGsgPSB7CkBAIC0yOTksNyArMjg0LDYgQEAKIAkucGFyZW50CQk9ICZkcGxsX2FiZV9tMngyX2NrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYzXzF0bzRfcmF0ZXNbXSA9IHsKQEAgLTMyNCw3ICszMDgsNiBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBhZXNzX2ZjbGtfZGl2W10gPSB7CkBAIC0zNDIsNyArMzI1LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYzMV8xdG8zMV9yYXRlc1tdID0gewpAQCAtMzk1LDcgKzM3Nyw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGNvcmVfaHNkX2J5cF9jbGtfbXV4X3NlbFtdID0gewpAQCAtNDEzLDcgKzM5NCw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfRFBMTF9CWVBfQ0xLU0VMX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiAvKiBEUExMX0NPUkUgKi8KQEAgLTQ0Myw3ICs0MjMsNiBAQAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2RwbGxfcGFyZW50LAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRwbGxfY29yZV9tNl9kaXZbXSA9IHsKQEAgLTQ2MSw3ICs0NDAsNiBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkYmdjbGtfbXV4X3NlbFtdID0gewpAQCAtNDc1LDcgKzQ1Myw2IEBACiAJLnBhcmVudAkJPSAmc3lzX2Nsa2luX2NrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9jb3JlX20yX2NrID0gewpAQCAtNDg4LDcgKzQ2NSw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRkcnBoeV9jayA9IHsKQEAgLTQ5Niw3ICs0NzIsNiBAQAogCS5wYXJlbnQJCT0gJmRwbGxfY29yZV9tMl9jaywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY29yZV9tNV9jayA9IHsKQEAgLTUwOSw3ICs0ODQsNiBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkaXZfY29yZV9kaXZbXSA9IHsKQEAgLTUyNyw3ICs1MDEsNiBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjRfMXRvOF9yYXRlc1tdID0gewpAQCAtNTUzLDcgKzUyNiw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRpdl9tcHVfaHNfY2xrID0gewpAQCAtNTY2LDcgKzUzOCw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY29yZV9tNF9jayA9IHsKQEAgLTU3OSw3ICs1NTAsNiBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkbGxfY2xrX2Rpdl9jayA9IHsKQEAgLTU4Nyw3ICs1NTcsNiBAQAogCS5wYXJlbnQJCT0gJmRwbGxfY29yZV9tNF9jaywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfYWJlX20yX2NrID0gewpAQCAtNjAwLDcgKzU2OSw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGRwbGxfY29yZV9tM19jayA9IHsKQEAgLTYxMyw3ICs1ODEsNiBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsX2NvcmVfbTdfY2sgPSB7CkBAIC02MjYsNyArNTkzLDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgaXZhX2hzZF9ieXBfY2xrX211eF9zZWxbXSA9IHsKQEAgLTY0MCw3ICs2MDYsNiBAQAogCS5wYXJlbnQJCT0gJmRwbGxfc3lzX3JlZl9jbGssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiAvKiBEUExMX0lWQSAqLwpAQCAtNjY4LDExICs2MzMsMTAgQEAKIAkucGFyZW50CQk9ICZkcGxsX3N5c19yZWZfY2xrLAogCS5kcGxsX2RhdGEJPSAmZHBsbF9pdmFfZGQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfZHBsbF9wYXJlbnQsCi0JLm9wcwkJPSAmY2xrb3BzX25vbmNvcmVfZHBsbF9vcHMsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAzX25vbmNvcmVfZHBsbF9vcHMsCiAJLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHBsbF9pdmFfbTRfZGl2W10gPSB7CkBAIC02OTAsNyArNjU0LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9pdmFfbTVfY2sgPSB7CkBAIC03MDMsNyArNjY2LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogLyogRFBMTF9NUFUgKi8KQEAgLTczMSwxMSArNjkzLDEwIEBACiAJLnBhcmVudAkJPSAmZHBsbF9zeXNfcmVmX2NsaywKIAkuZHBsbF9kYXRhCT0gJmRwbGxfbXB1X2RkLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2RwbGxfcGFyZW50LAotCS5vcHMJCT0gJmNsa29wc19ub25jb3JlX2RwbGxfb3BzLAorCS5vcHMJCT0gJmNsa29wc19vbWFwM19ub25jb3JlX2RwbGxfb3BzLAogCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRwbGxfbXB1X20yX2RpdltdID0gewpAQCAtNzUzLDcgKzcxNCw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBlcl9oc19jbGtfZGl2X2NrID0gewpAQCAtNzYxLDcgKzcyMSw2IEBACiAJLnBhcmVudAkJPSAmZHBsbF9hYmVfbTNfY2ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBwZXJfaHNkX2J5cF9jbGtfbXV4X3NlbFtdID0gewpAQCAtNzc5LDcgKzczOCw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfRFBMTF9CWVBfQ0xLU0VMX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiAvKiBEUExMX1BFUiAqLwpAQCAtODA3LDExICs3NjUsMTAgQEAKIAkucGFyZW50CQk9ICZkcGxsX3N5c19yZWZfY2xrLAogCS5kcGxsX2RhdGEJPSAmZHBsbF9wZXJfZGQsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfZHBsbF9wYXJlbnQsCi0JLm9wcwkJPSAmY2xrb3BzX25vbmNvcmVfZHBsbF9vcHMsCisJLm9wcwkJPSAmY2xrb3BzX29tYXAzX25vbmNvcmVfZHBsbF9vcHMsCiAJLnJlY2FsYwkJPSAmb21hcDNfZHBsbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfZHBsbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHBsbF9wZXJfbTJfZGl2W10gPSB7CkBAIC04MjksNyArNzg2LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9wZXJfbTJ4Ml9jayA9IHsKQEAgLTgzNyw3ICs3OTMsNiBAQAogCS5wYXJlbnQJCT0gJmRwbGxfcGVyX2NrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9wZXJfbTNfY2sgPSB7CkBAIC04NTAsNyArODA1LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9wZXJfbTRfY2sgPSB7CkBAIC04NjMsNyArODE3LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9wZXJfbTVfY2sgPSB7CkBAIC04NzYsNyArODI5LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9wZXJfbTZfY2sgPSB7CkBAIC04ODksNyArODQxLDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZHBsbF9wZXJfbTdfY2sgPSB7CkBAIC05MDIsNyArODUzLDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogLyogRFBMTF9VTklQUk8gKi8KQEAgLTkzMCwxMSArODgwLDEwIEBACiAJLnBhcmVudAkJPSAmZHBsbF9zeXNfcmVmX2NsaywKIAkuZHBsbF9kYXRhCT0gJmRwbGxfdW5pcHJvX2RkLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2RwbGxfcGFyZW50LAotCS5vcHMJCT0gJmNsa29wc19ub25jb3JlX2RwbGxfb3BzLAorCS5vcHMJCT0gJmNsa29wc19vbWFwM19ub25jb3JlX2RwbGxfb3BzLAogCS5yZWNhbGMJCT0gJm9tYXAzX2RwbGxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2RwbGxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGRwbGxfdW5pcHJvX20yeDJfZGl2W10gPSB7CkBAIC05NTIsNyArOTAxLDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgdXNiX2hzX2Nsa19kaXZfY2sgPSB7CkBAIC05NjAsNyArOTA4LDYgQEAKIAkucGFyZW50CQk9ICZkcGxsX2FiZV9tM19jaywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIC8qIERQTExfVVNCICovCkBAIC05ODAsNiArOTI3LDcgQEAKIAkubWF4X211bHRpcGxpZXIJPSBPTUFQNDQzMF9NQVhfRFBMTF9NVUxULAogCS5tYXhfZGl2aWRlcgk9IE9NQVA0NDMwX01BWF9EUExMX0RJViwKIAkubWluX2RpdmlkZXIJPSAxLAorCS5mbGFncwkJPSBEUExMX0pfVFlQRSB8IERQTExfTk9fRENPX1NFTAogfTsKIAogCkBAIC05ODgsMTEgKzkzNiwxMCBAQAogCS5wYXJlbnQJCT0gJmRwbGxfc3lzX3JlZl9jbGssCiAJLmRwbGxfZGF0YQk9ICZkcGxsX3VzYl9kZCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9kcGxsX3BhcmVudCwKLQkub3BzCQk9ICZjbGtvcHNfbm9uY29yZV9kcGxsX29wcywKKwkub3BzCQk9ICZjbGtvcHNfb21hcDNfbm9uY29yZV9kcGxsX29wcywKIAkucmVjYWxjCQk9ICZvbWFwM19kcGxsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9kcGxsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBkcGxsX3VzYl9jbGtkY29sZG9fY2sgPSB7CkBAIC0xMDAwLDcgKzk0Nyw2IEBACiAJLnBhcmVudAkJPSAmZHBsbF91c2JfY2ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBkcGxsX3VzYl9tMl9kaXZbXSA9IHsKQEAgLTEwMTgsNyArOTY0LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZHVjYXRpX2Nsa19tdXhfc2VsW10gPSB7CkBAIC0xMDM2LDcgKzk4MSw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMXzBfMF9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZnVuY18xMm1fZmNsayA9IHsKQEAgLTEwNDQsNyArOTg4LDYgQEAKIAkucGFyZW50CQk9ICZkcGxsX3Blcl9tMngyX2NrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZnVuY18yNG1fY2xrID0gewpAQCAtMTA1Miw3ICs5OTUsNiBAQAogCS5wYXJlbnQJCT0gJmRwbGxfcGVyX20yX2NrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZnVuY18yNG1jX2ZjbGsgPSB7CkBAIC0xMDYwLDcgKzEwMDIsNiBAQAogCS5wYXJlbnQJCT0gJmRwbGxfcGVyX20yeDJfY2ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjJfNHRvOF9yYXRlc1tdID0gewpAQCAtMTA4NCw3ICsxMDI1LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgZnVuY180OG1jX2ZjbGsgPSB7CkBAIC0xMDkyLDcgKzEwMzIsNiBAQAogCS5wYXJlbnQJCT0gJmRwbGxfcGVyX20yeDJfY2ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbF9yYXRlIGRpdjJfMnRvNF9yYXRlc1tdID0gewpAQCAtMTExNiw3ICsxMDU1LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZnVuY185Nm1fZmNsa19kaXZbXSA9IHsKQEAgLTExMzQsNyArMTA3Miw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGhzbW1jNl9mY2xrX3NlbFtdID0gewpAQCAtMTE0OCw3ICsxMDg1LDYgQEAKIAkucGFyZW50CQk9ICZmdW5jXzY0bV9mY2xrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYyXzF0bzhfcmF0ZXNbXSA9IHsKQEAgLTExNzIsNyArMTEwOCw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGwzX2Rpdl9kaXZbXSA9IHsKQEAgLTExOTAsNyArMTEyNSw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGw0X2Rpdl9kaXZbXSA9IHsKQEAgLTEyMDgsNyArMTE0Miw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGxwX2Nsa19kaXZfY2sgPSB7CkBAIC0xMjE2LDcgKzExNDksNiBAQAogCS5wYXJlbnQJCT0gJmRwbGxfYWJlX20yeDJfY2ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBsNF93a3VwX2Nsa19tdXhfc2VsW10gPSB7CkBAIC0xMjM0LDcgKzExNjYsNiBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF8wXzBfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHBlcl9hYmVfbmNfZmNsa19kaXZbXSA9IHsKQEAgLTEyNTIsNyArMTE4Myw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIG1jYXNwMl9mY2xrX3NlbFtdID0gewpAQCAtMTI2Niw3ICsxMTk2LDYgQEAKIAkucGFyZW50CQk9ICZmdW5jXzk2bV9mY2xrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNhc3AzX2ZjbGsgPSB7CkBAIC0xMjc0LDcgKzEyMDMsNiBAQAogCS5wYXJlbnQJCT0gJmZ1bmNfOTZtX2ZjbGssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBvY3BfYWJlX2ljbGsgPSB7CkBAIC0xMjgyLDcgKzEyMTAsNiBAQAogCS5wYXJlbnQJCT0gJmFlc3NfZmNsaywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBlcl9hYmVfMjRtX2ZjbGsgPSB7CkBAIC0xMjkwLDcgKzEyMTcsNiBAQAogCS5wYXJlbnQJCT0gJmRwbGxfYWJlX20yX2NrLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgcG1kX3N0bV9jbG9ja19tdXhfc2VsW10gPSB7CkBAIC0xMzA1LDcgKzEyMzEsNiBAQAogCS5wYXJlbnQJCT0gJnN5c19jbGtpbl9jaywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHBtZF90cmFjZV9jbGtfbXV4X2NrID0gewpAQCAtMTMxMyw3ICsxMjM4LDYgQEAKIAkucGFyZW50CQk9ICZzeXNfY2xraW5fY2ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBzeWNfY2xrX2Rpdl9jayA9IHsKQEAgLTEzMjYsMTMgKzEyNTAsMTIgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogLyogTGVhZiBjbG9ja3MgY29udHJvbGxlZCBieSBtb2R1bGVzICovCiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGFlczFfY2sgPSB7Ci0JLm5hbWUJCT0gImFlczFfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgYWVzMV9mY2sgPSB7CisJLm5hbWUJCT0gImFlczFfZmNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0U0VDX0FFUzFfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMTM0MSw4ICsxMjY0LDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgYWVzMl9jayA9IHsKLQkubmFtZQkJPSAiYWVzMl9jayIsCitzdGF0aWMgc3RydWN0IGNsayBhZXMyX2ZjayA9IHsKKwkubmFtZQkJPSAiYWVzMl9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRTRUNfQUVTMl9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0xMzUxLDggKzEyNzQsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBhZXNzX2NrID0gewotCS5uYW1lCQk9ICJhZXNzX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGFlc3NfZmNrID0geworCS5uYW1lCQk9ICJhZXNzX2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX0FFU1NfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMTM2MSw4ICsxMjg0LDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgY3VzdF9lZnVzZV9jayA9IHsKLQkubmFtZQkJPSAiY3VzdF9lZnVzZV9jayIsCitzdGF0aWMgc3RydWN0IGNsayBjdXN0X2VmdXNlX2ZjayA9IHsKKwkubmFtZQkJPSAiY3VzdF9lZnVzZV9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fQ0VGVVNFX0NFRlVTRV9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0xMzcxLDggKzEyOTQsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBkZXMzZGVzX2NrID0gewotCS5uYW1lCQk9ICJkZXMzZGVzX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGRlczNkZXNfZmNrID0geworCS5uYW1lCQk9ICJkZXMzZGVzX2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFNFQ19ERVMzREVTX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTEzOTcsNyArMTMyMCw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX0lOVEVSTkFMX1NPVVJDRV9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZnVuY19kbWljX2FiZV9nZmNsa19zZWxbXSA9IHsKQEAgLTE0MDcsOSArMTMyOSw5IEBACiAJeyAucGFyZW50ID0gTlVMTCB9LAogfTsKIAotLyogTWVyZ2VkIGZ1bmNfZG1pY19hYmVfZ2ZjbGsgaW50byBkbWljX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBkbWljX2NrID0gewotCS5uYW1lCQk9ICJkbWljX2NrIiwKKy8qIE1lcmdlZCBmdW5jX2RtaWNfYWJlX2dmY2xrIGludG8gZG1pYyAqLworc3RhdGljIHN0cnVjdCBjbGsgZG1pY19mY2sgPSB7CisJLm5hbWUJCT0gImRtaWNfZmNrIiwKIAkucGFyZW50CQk9ICZkbWljX3N5bmNfbXV4X2NrLAogCS5jbGtzZWwJCT0gZnVuY19kbWljX2FiZV9nZmNsa19zZWwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE0MTcsMTQgKzEzMzksMTMgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfU09VUkNFX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX0RNSUNfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAogCS5jbGtkbV9uYW1lCT0gImFiZV9jbGtkbSIsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBkc3NfY2sgPSB7Ci0JLm5hbWUJCT0gImRzc19jayIsCitzdGF0aWMgc3RydWN0IGNsayBkc3NfZmNrID0geworCS5uYW1lCQk9ICJkc3NfZmNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0RTU19EU1NfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMTQzMyw4ICsxMzU0LDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZHVjYXRpX2NrID0gewotCS5uYW1lCQk9ICJkdWNhdGlfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgZHVjYXRpX2ljayA9IHsKKwkubmFtZQkJPSAiZHVjYXRpX2ljayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9EVUNBVElfRFVDQVRJX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKQEAgLTE0NDMsOCArMTM2NCw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGVtaWYxX2NrID0gewotCS5uYW1lCQk9ICJlbWlmMV9jayIsCitzdGF0aWMgc3RydWN0IGNsayBlbWlmMV9pY2sgPSB7CisJLm5hbWUJCT0gImVtaWYxX2ljayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9NRU1JRl9FTUlGXzFfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfSFdDVFJMLApAQCAtMTQ1Myw4ICsxMzc0LDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZW1pZjJfY2sgPSB7Ci0JLm5hbWUJCT0gImVtaWYyX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGVtaWYyX2ljayA9IHsKKwkubmFtZQkJPSAiZW1pZjJfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX01FTUlGX0VNSUZfMl9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCkBAIC0xNDY4LDkgKzEzODksOSBAQAogCXsgLnBhcmVudCA9IE5VTEwgfSwKIH07CiAKLS8qIE1lcmdlZCBmZGlmX2ZjbGsgaW50byBmZGlmX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBmZGlmX2NrID0gewotCS5uYW1lCQk9ICJmZGlmX2NrIiwKKy8qIE1lcmdlZCBmZGlmX2ZjbGsgaW50byBmZGlmICovCitzdGF0aWMgc3RydWN0IGNsayBmZGlmX2ZjayA9IHsKKwkubmFtZQkJPSAiZmRpZl9mY2siLAogCS5wYXJlbnQJCT0gJmRwbGxfcGVyX200X2NrLAogCS5jbGtzZWwJCT0gZmRpZl9mY2xrX2RpdiwKIAkuY2xrc2VsX3JlZwk9IE9NQVA0NDMwX0NNX0NBTV9GRElGX0NMS0NUUkwsCkBAIC0xNDc5LDcgKzE0MDAsNiBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9DQU1fRkRJRl9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAiaXNzX2Nsa2RtIiwKQEAgLTE1MDAsNyArMTQyMCw2IEBACiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKIAkucm91bmRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfcm91bmRfcmF0ZSwKIAkuc2V0X3JhdGUJPSAmb21hcDJfY2xrc2VsX3NldF9yYXRlLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHNneF9jbGtfbXV4X3NlbFtdID0gewpAQCAtMTUwOSw5ICsxNDI4LDkgQEAKIAl7IC5wYXJlbnQgPSBOVUxMIH0sCiB9OwogCi0vKiBNZXJnZWQgc2d4X2Nsa19tdXggaW50byBnZnhfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdmeF9jayA9IHsKLQkubmFtZQkJPSAiZ2Z4X2NrIiwKKy8qIE1lcmdlZCBzZ3hfY2xrX211eCBpbnRvIGdmeCAqLworc3RhdGljIHN0cnVjdCBjbGsgZ2Z4X2ZjayA9IHsKKwkubmFtZQkJPSAiZ2Z4X2ZjayIsCiAJLnBhcmVudAkJPSAmZHBsbF9jb3JlX203X2NrLAogCS5jbGtzZWwJCT0gc2d4X2Nsa19tdXhfc2VsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xNTE5LDE0ICsxNDM4LDEzIEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX1NHWF9GQ0xLX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9HRlhfR0ZYX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKIAkuY2xrZG1fbmFtZQk9ICJsM19nZnhfY2xrZG0iLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzFfY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW8xX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8xX2ljayA9IHsKKwkubmFtZQkJPSAiZ3BpbzFfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX1dLVVBfR1BJTzFfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfSFdDVFJMLApAQCAtMTUzNSw4ICsxNDUzLDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzJfY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW8yX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8yX2ljayA9IHsKKwkubmFtZQkJPSAiZ3BpbzJfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0dQSU8yX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKQEAgLTE1NDUsOCArMTQ2Myw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW8zX2NrID0gewotCS5uYW1lCQk9ICJncGlvM19jayIsCitzdGF0aWMgc3RydWN0IGNsayBncGlvM19pY2sgPSB7CisJLm5hbWUJCT0gImdwaW8zX2ljayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9HUElPM19DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCkBAIC0xNTU1LDggKzE0NzMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBncGlvNF9jayA9IHsKLQkubmFtZQkJPSAiZ3BpbzRfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzRfaWNrID0geworCS5uYW1lCQk9ICJncGlvNF9pY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfR1BJTzRfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfSFdDVFJMLApAQCAtMTU2NSw4ICsxNDgzLDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgZ3BpbzVfY2sgPSB7Ci0JLm5hbWUJCT0gImdwaW81X2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwaW81X2ljayA9IHsKKwkubmFtZQkJPSAiZ3BpbzVfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0dQSU81X0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKQEAgLTE1NzUsOCArMTQ5Myw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwaW82X2NrID0gewotCS5uYW1lCQk9ICJncGlvNl9jayIsCitzdGF0aWMgc3RydWN0IGNsayBncGlvNl9pY2sgPSB7CisJLm5hbWUJCT0gImdwaW82X2ljayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9HUElPNl9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCkBAIC0xNTg1LDggKzE1MDMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBncG1jX2NrID0gewotCS5uYW1lCQk9ICJncG1jX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwbWNfaWNrID0geworCS5uYW1lCQk9ICJncG1jX2ljayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MM18yX0dQTUNfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfSFdDVFJMLApAQCAtMTYwMSw5ICsxNTE5LDEyIEBACiAJeyAucGFyZW50ID0gTlVMTCB9LAogfTsKIAotLyogTWVyZ2VkIGRtdDFfY2xrX211eCBpbnRvIGdwdGltZXIxX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBncHRpbWVyMV9jayA9IHsKLQkubmFtZQkJPSAiZ3B0aW1lcjFfY2siLAorLyoKKyAqIE1lcmdlZCBkbXQxX2Nsa19tdXggaW50byBncHRpbWVyMQorICogZ3B0aW1lcjEgcmVuYW1lZCB0ZW1wb3JhcmlseSBpbnRvIGdwdDEgdG8gbWF0Y2ggT01BUDMgY29udmVudGlvbgorICovCitzdGF0aWMgc3RydWN0IGNsayBncHQxX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0MV9mY2siLAogCS5wYXJlbnQJCT0gJnN5c19jbGtpbl9jaywKIAkuY2xrc2VsCQk9IGRtdDFfY2xrX211eF9zZWwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE2MTEsMTUgKzE1MzIsMTcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX1dLVVBfVElNRVIxX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKIAkuY2xrZG1fbmFtZQk9ICJsNF93a3VwX2Nsa2RtIiwKIH07CiAKLS8qIE1lcmdlZCBjbTJfZG0xMF9tdXggaW50byBncHRpbWVyMTBfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdGltZXIxMF9jayA9IHsKLQkubmFtZQkJPSAiZ3B0aW1lcjEwX2NrIiwKKy8qCisgKiBNZXJnZWQgY20yX2RtMTBfbXV4IGludG8gZ3B0aW1lcjEwCisgKiBncHRpbWVyMTAgcmVuYW1lZCB0ZW1wb3JhcmlseSBpbnRvIGdwdDEwIHRvIG1hdGNoIE9NQVAzIGNvbnZlbnRpb24KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTBfZmNrID0geworCS5uYW1lCQk9ICJncHQxMF9mY2siLAogCS5wYXJlbnQJCT0gJnN5c19jbGtpbl9jaywKIAkuY2xrc2VsCQk9IGRtdDFfY2xrX211eF9zZWwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE2MjcsMTUgKzE1NTAsMTcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVIxMF9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKIH07CiAKLS8qIE1lcmdlZCBjbTJfZG0xMV9tdXggaW50byBncHRpbWVyMTFfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdGltZXIxMV9jayA9IHsKLQkubmFtZQkJPSAiZ3B0aW1lcjExX2NrIiwKKy8qCisgKiBNZXJnZWQgY20yX2RtMTFfbXV4IGludG8gZ3B0aW1lcjExCisgKiBncHRpbWVyMTEgcmVuYW1lZCB0ZW1wb3JhcmlseSBpbnRvIGdwdDExIHRvIG1hdGNoIE9NQVAzIGNvbnZlbnRpb24KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0MTFfZmNrID0geworCS5uYW1lCQk9ICJncHQxMV9mY2siLAogCS5wYXJlbnQJCT0gJnN5c19jbGtpbl9jaywKIAkuY2xrc2VsCQk9IGRtdDFfY2xrX211eF9zZWwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE2NDMsMTUgKzE1NjgsMTcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVIxMV9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKIH07CiAKLS8qIE1lcmdlZCBjbTJfZG0yX211eCBpbnRvIGdwdGltZXIyX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBncHRpbWVyMl9jayA9IHsKLQkubmFtZQkJPSAiZ3B0aW1lcjJfY2siLAorLyoKKyAqIE1lcmdlZCBjbTJfZG0yX211eCBpbnRvIGdwdGltZXIyCisgKiBncHRpbWVyMiByZW5hbWVkIHRlbXBvcmFyaWx5IGludG8gZ3B0MiB0byBtYXRjaCBPTUFQMyBjb252ZW50aW9uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDJfZmNrID0geworCS5uYW1lCQk9ICJncHQyX2ZjayIsCiAJLnBhcmVudAkJPSAmc3lzX2Nsa2luX2NrLAogCS5jbGtzZWwJCT0gZG10MV9jbGtfbXV4X3NlbCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMTY1OSwxNSArMTU4NiwxNyBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfRE1USU1FUjJfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAogCS5jbGtkbV9uYW1lCT0gImw0X3Blcl9jbGtkbSIsCiB9OwogCi0vKiBNZXJnZWQgY20yX2RtM19tdXggaW50byBncHRpbWVyM19jayAqLwotc3RhdGljIHN0cnVjdCBjbGsgZ3B0aW1lcjNfY2sgPSB7Ci0JLm5hbWUJCT0gImdwdGltZXIzX2NrIiwKKy8qCisgKiBNZXJnZWQgY20yX2RtM19tdXggaW50byBncHRpbWVyMworICogZ3B0aW1lcjMgcmVuYW1lZCB0ZW1wb3JhcmlseSBpbnRvIGdwdDMgdG8gbWF0Y2ggT01BUDMgY29udmVudGlvbgorICovCitzdGF0aWMgc3RydWN0IGNsayBncHQzX2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0M19mY2siLAogCS5wYXJlbnQJCT0gJnN5c19jbGtpbl9jaywKIAkuY2xrc2VsCQk9IGRtdDFfY2xrX211eF9zZWwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE2NzUsMTUgKzE2MDQsMTcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0RNVElNRVIzX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKIAkuY2xrZG1fbmFtZQk9ICJsNF9wZXJfY2xrZG0iLAogfTsKIAotLyogTWVyZ2VkIGNtMl9kbTRfbXV4IGludG8gZ3B0aW1lcjRfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdGltZXI0X2NrID0gewotCS5uYW1lCQk9ICJncHRpbWVyNF9jayIsCisvKgorICogTWVyZ2VkIGNtMl9kbTRfbXV4IGludG8gZ3B0aW1lcjQKKyAqIGdwdGltZXI0IHJlbmFtZWQgdGVtcG9yYXJpbHkgaW50byBncHQ0IHRvIG1hdGNoIE9NQVAzIGNvbnZlbnRpb24KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0NF9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDRfZmNrIiwKIAkucGFyZW50CQk9ICZzeXNfY2xraW5fY2ssCiAJLmNsa3NlbAkJPSBkbXQxX2Nsa19tdXhfc2VsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xNjkxLDcgKzE2MjIsNiBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfRE1USU1FUjRfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAogCS5jbGtkbV9uYW1lCT0gImw0X3Blcl9jbGtkbSIsCkBAIC0xNzAzLDkgKzE2MzMsMTIgQEAKIAl7IC5wYXJlbnQgPSBOVUxMIH0sCiB9OwogCi0vKiBNZXJnZWQgdGltZXI1X3N5bmNfbXV4IGludG8gZ3B0aW1lcjVfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdGltZXI1X2NrID0gewotCS5uYW1lCQk9ICJncHRpbWVyNV9jayIsCisvKgorICogTWVyZ2VkIHRpbWVyNV9zeW5jX211eCBpbnRvIGdwdGltZXI1CisgKiBncHRpbWVyNSByZW5hbWVkIHRlbXBvcmFyaWx5IGludG8gZ3B0NSB0byBtYXRjaCBPTUFQMyBjb252ZW50aW9uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDVfZmNrID0geworCS5uYW1lCQk9ICJncHQ1X2ZjayIsCiAJLnBhcmVudAkJPSAmc3ljX2Nsa19kaXZfY2ssCiAJLmNsa3NlbAkJPSB0aW1lcjVfc3luY19tdXhfc2VsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xNzEzLDE1ICsxNjQ2LDE3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX1RJTUVSNV9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAiYWJlX2Nsa2RtIiwKIH07CiAKLS8qIE1lcmdlZCB0aW1lcjZfc3luY19tdXggaW50byBncHRpbWVyNl9jayAqLwotc3RhdGljIHN0cnVjdCBjbGsgZ3B0aW1lcjZfY2sgPSB7Ci0JLm5hbWUJCT0gImdwdGltZXI2X2NrIiwKKy8qCisgKiBNZXJnZWQgdGltZXI2X3N5bmNfbXV4IGludG8gZ3B0aW1lcjYKKyAqIGdwdGltZXI2IHJlbmFtZWQgdGVtcG9yYXJpbHkgaW50byBncHQ2IHRvIG1hdGNoIE9NQVAzIGNvbnZlbnRpb24KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgZ3B0Nl9mY2sgPSB7CisJLm5hbWUJCT0gImdwdDZfZmNrIiwKIAkucGFyZW50CQk9ICZzeWNfY2xrX2Rpdl9jaywKIAkuY2xrc2VsCQk9IHRpbWVyNV9zeW5jX211eF9zZWwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE3MjksMTUgKzE2NjQsMTcgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNMV9BQkVfVElNRVI2X0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKIAkuY2xrZG1fbmFtZQk9ICJhYmVfY2xrZG0iLAogfTsKIAotLyogTWVyZ2VkIHRpbWVyN19zeW5jX211eCBpbnRvIGdwdGltZXI3X2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBncHRpbWVyN19jayA9IHsKLQkubmFtZQkJPSAiZ3B0aW1lcjdfY2siLAorLyoKKyAqIE1lcmdlZCB0aW1lcjdfc3luY19tdXggaW50byBncHRpbWVyNworICogZ3B0aW1lcjcgcmVuYW1lZCB0ZW1wb3JhcmlseSBpbnRvIGdwdDcgdG8gbWF0Y2ggT01BUDMgY29udmVudGlvbgorICovCitzdGF0aWMgc3RydWN0IGNsayBncHQ3X2ZjayA9IHsKKwkubmFtZQkJPSAiZ3B0N19mY2siLAogCS5wYXJlbnQJCT0gJnN5Y19jbGtfZGl2X2NrLAogCS5jbGtzZWwJCT0gdGltZXI1X3N5bmNfbXV4X3NlbCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMTc0NSwxNSArMTY4MiwxNyBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ00xX0FCRV9USU1FUjdfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAogCS5jbGtkbV9uYW1lCT0gImFiZV9jbGtkbSIsCiB9OwogCi0vKiBNZXJnZWQgdGltZXI4X3N5bmNfbXV4IGludG8gZ3B0aW1lcjhfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIGdwdGltZXI4X2NrID0gewotCS5uYW1lCQk9ICJncHRpbWVyOF9jayIsCisvKgorICogTWVyZ2VkIHRpbWVyOF9zeW5jX211eCBpbnRvIGdwdGltZXI4CisgKiBncHRpbWVyOCByZW5hbWVkIHRlbXBvcmFyaWx5IGludG8gZ3B0OCB0byBtYXRjaCBPTUFQMyBjb252ZW50aW9uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDhfZmNrID0geworCS5uYW1lCQk9ICJncHQ4X2ZjayIsCiAJLnBhcmVudAkJPSAmc3ljX2Nsa19kaXZfY2ssCiAJLmNsa3NlbAkJPSB0aW1lcjVfc3luY19tdXhfc2VsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xNzYxLDE1ICsxNzAwLDE3IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX1RJTUVSOF9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAiYWJlX2Nsa2RtIiwKIH07CiAKLS8qIE1lcmdlZCBjbTJfZG05X211eCBpbnRvIGdwdGltZXI5X2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBncHRpbWVyOV9jayA9IHsKLQkubmFtZQkJPSAiZ3B0aW1lcjlfY2siLAorLyoKKyAqIE1lcmdlZCBjbTJfZG05X211eCBpbnRvIGdwdGltZXI5CisgKiBncHRpbWVyOSByZW5hbWVkIHRlbXBvcmFyaWx5IGludG8gZ3B0OSB0byBtYXRjaCBPTUFQMyBjb252ZW50aW9uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGdwdDlfZmNrID0geworCS5uYW1lCQk9ICJncHQ5X2ZjayIsCiAJLnBhcmVudAkJPSAmc3lzX2Nsa2luX2NrLAogCS5jbGtzZWwJCT0gZG10MV9jbGtfbXV4X3NlbCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMTc3NywxNCArMTcxOCwxMyBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfRE1USU1FUjlfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAogCS5jbGtkbV9uYW1lCT0gImw0X3Blcl9jbGtkbSIsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBoZHExd19jayA9IHsKLQkubmFtZQkJPSAiaGRxMXdfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgaGRxMXdfZmNrID0geworCS5uYW1lCQk9ICJoZHExd19mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfSERRMVdfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMTc5Myw5ICsxNzMzLDkgQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotLyogTWVyZ2VkIGhzaV9mY2xrIGludG8gaHNpX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBoc2lfY2sgPSB7Ci0JLm5hbWUJCT0gImhzaV9jayIsCisvKiBNZXJnZWQgaHNpX2ZjbGsgaW50byBoc2kgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIGhzaV9pY2sgPSB7CisJLm5hbWUJCT0gImhzaV9pY2siLAogCS5wYXJlbnQJCT0gJmRwbGxfcGVyX20yeDJfY2ssCiAJLmNsa3NlbAkJPSBwZXJfc2d4X2ZjbGtfZGl2LAogCS5jbGtzZWxfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTklUX0hTSV9DTEtDVFJMLApAQCAtMTgwNCwxNCArMTc0NCwxMyBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MM0lOSVRfSFNJX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKIAkuY2xrZG1fbmFtZQk9ICJsM19pbml0X2Nsa2RtIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzFfY2sgPSB7Ci0JLm5hbWUJCT0gImkyYzFfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgaTJjMV9mY2sgPSB7CisJLm5hbWUJCT0gImkyYzFfZmNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0kyQzFfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMTgyMCw4ICsxNzU5LDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgaTJjMl9jayA9IHsKLQkubmFtZQkJPSAiaTJjMl9jayIsCitzdGF0aWMgc3RydWN0IGNsayBpMmMyX2ZjayA9IHsKKwkubmFtZQkJPSAiaTJjMl9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfSTJDMl9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0xODMwLDggKzE3NjksOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBpMmMzX2NrID0gewotCS5uYW1lCQk9ICJpMmMzX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyYzNfZmNrID0geworCS5uYW1lCQk9ICJpMmMzX2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9JMkMzX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTE4NDAsOCArMTc3OSw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGkyYzRfY2sgPSB7Ci0JLm5hbWUJCT0gImkyYzRfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgaTJjNF9mY2sgPSB7CisJLm5hbWUJCT0gImkyYzRfZmNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX0kyQzRfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMTg1MCw4ICsxNzg5LDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgaXNzX2NrID0gewotCS5uYW1lCQk9ICJpc3NfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgaXNzX2ZjayA9IHsKKwkubmFtZQkJPSAiaXNzX2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9DQU1fSVNTX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTE4NjAsOCArMTc5OSw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIGl2YWhkX2NrID0gewotCS5uYW1lCQk9ICJpdmFoZF9jayIsCitzdGF0aWMgc3RydWN0IGNsayBpdmFoZF9pY2sgPSB7CisJLm5hbWUJCT0gIml2YWhkX2ljayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9JVkFIRF9JVkFIRF9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCkBAIC0xODcwLDggKzE4MDksOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBrZXlib2FyZF9jayA9IHsKLQkubmFtZQkJPSAia2V5Ym9hcmRfY2siLAorc3RhdGljIHN0cnVjdCBjbGsga2V5Ym9hcmRfZmNrID0geworCS5uYW1lCQk9ICJrZXlib2FyZF9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fV0tVUF9LRVlCT0FSRF9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0xODgwLDggKzE4MTksOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBsM19pbnN0cl9pbnRlcmNvbm5lY3RfY2sgPSB7Ci0JLm5hbWUJCT0gImwzX2luc3RyX2ludGVyY29ubmVjdF9jayIsCitzdGF0aWMgc3RydWN0IGNsayBsM19pbnN0cl9pbnRlcmNvbm5lY3RfaWNrID0geworCS5uYW1lCQk9ICJsM19pbnN0cl9pbnRlcmNvbm5lY3RfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0wzSU5TVFJfTDNfSU5TVFJfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfSFdDVFJMLApAQCAtMTg5MCw4ICsxODI5LDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgbDNfaW50ZXJjb25uZWN0XzNfY2sgPSB7Ci0JLm5hbWUJCT0gImwzX2ludGVyY29ubmVjdF8zX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIGwzX2ludGVyY29ubmVjdF8zX2ljayA9IHsKKwkubmFtZQkJPSAibDNfaW50ZXJjb25uZWN0XzNfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0wzSU5TVFJfTDNfM19DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCkBAIC0xOTA5LDcgKzE4NDgsNiBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9JTlRFUk5BTF9TT1VSQ0VfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGZ1bmNfbWNhc3BfYWJlX2dmY2xrX3NlbFtdID0gewpAQCAtMTkxOSw5ICsxODU3LDkgQEAKIAl7IC5wYXJlbnQgPSBOVUxMIH0sCiB9OwogCi0vKiBNZXJnZWQgZnVuY19tY2FzcF9hYmVfZ2ZjbGsgaW50byBtY2FzcF9jayAqLwotc3RhdGljIHN0cnVjdCBjbGsgbWNhc3BfY2sgPSB7Ci0JLm5hbWUJCT0gIm1jYXNwX2NrIiwKKy8qIE1lcmdlZCBmdW5jX21jYXNwX2FiZV9nZmNsayBpbnRvIG1jYXNwICovCitzdGF0aWMgc3RydWN0IGNsayBtY2FzcF9mY2sgPSB7CisJLm5hbWUJCT0gIm1jYXNwX2ZjayIsCiAJLnBhcmVudAkJPSAmbWNhc3Bfc3luY19tdXhfY2ssCiAJLmNsa3NlbAkJPSBmdW5jX21jYXNwX2FiZV9nZmNsa19zZWwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE5MjksNyArMTg2Nyw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX1NPVVJDRV9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ00xX0FCRV9NQ0FTUF9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAiYWJlX2Nsa2RtIiwKQEAgLTE5NDQsNyArMTg4MSw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX0lOVEVSTkFMX1NPVVJDRV9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgZnVuY19tY2JzcDFfZ2ZjbGtfc2VsW10gPSB7CkBAIC0xOTU0LDkgKzE4OTAsOSBAQAogCXsgLnBhcmVudCA9IE5VTEwgfSwKIH07CiAKLS8qIE1lcmdlZCBmdW5jX21jYnNwMV9nZmNsayBpbnRvIG1jYnNwMV9jayAqLwotc3RhdGljIHN0cnVjdCBjbGsgbWNic3AxX2NrID0gewotCS5uYW1lCQk9ICJtY2JzcDFfY2siLAorLyogTWVyZ2VkIGZ1bmNfbWNic3AxX2dmY2xrIGludG8gbWNic3AxICovCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDFfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDFfZmNrIiwKIAkucGFyZW50CQk9ICZtY2JzcDFfc3luY19tdXhfY2ssCiAJLmNsa3NlbAkJPSBmdW5jX21jYnNwMV9nZmNsa19zZWwsCiAJLmluaXQJCT0gJm9tYXAyX2luaXRfY2xrc2VsX3BhcmVudCwKQEAgLTE5NjQsNyArMTkwMCw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX1NPVVJDRV9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ00xX0FCRV9NQ0JTUDFfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAogCS5jbGtkbV9uYW1lCT0gImFiZV9jbGtkbSIsCkBAIC0xOTc5LDcgKzE5MTQsNiBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9JTlRFUk5BTF9TT1VSQ0VfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIGZ1bmNfbWNic3AyX2dmY2xrX3NlbFtdID0gewpAQCAtMTk4OSw5ICsxOTIzLDkgQEAKIAl7IC5wYXJlbnQgPSBOVUxMIH0sCiB9OwogCi0vKiBNZXJnZWQgZnVuY19tY2JzcDJfZ2ZjbGsgaW50byBtY2JzcDJfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwMl9jayA9IHsKLQkubmFtZQkJPSAibWNic3AyX2NrIiwKKy8qIE1lcmdlZCBmdW5jX21jYnNwMl9nZmNsayBpbnRvIG1jYnNwMiAqLworc3RhdGljIHN0cnVjdCBjbGsgbWNic3AyX2ZjayA9IHsKKwkubmFtZQkJPSAibWNic3AyX2ZjayIsCiAJLnBhcmVudAkJPSAmbWNic3AyX3N5bmNfbXV4X2NrLAogCS5jbGtzZWwJCT0gZnVuY19tY2JzcDJfZ2ZjbGtfc2VsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0xOTk5LDcgKzE5MzMsNiBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9TT1VSQ0VfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNMV9BQkVfTUNCU1AyX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKIAkuY2xrZG1fbmFtZQk9ICJhYmVfY2xrZG0iLApAQCAtMjAxNCw3ICsxOTQ3LDYgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfSU5URVJOQUxfU09VUkNFX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCBmdW5jX21jYnNwM19nZmNsa19zZWxbXSA9IHsKQEAgLTIwMjQsOSArMTk1Niw5IEBACiAJeyAucGFyZW50ID0gTlVMTCB9LAogfTsKIAotLyogTWVyZ2VkIGZ1bmNfbWNic3AzX2dmY2xrIGludG8gbWNic3AzX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBtY2JzcDNfY2sgPSB7Ci0JLm5hbWUJCT0gIm1jYnNwM19jayIsCisvKiBNZXJnZWQgZnVuY19tY2JzcDNfZ2ZjbGsgaW50byBtY2JzcDMgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwM19mY2sgPSB7CisJLm5hbWUJCT0gIm1jYnNwM19mY2siLAogCS5wYXJlbnQJCT0gJm1jYnNwM19zeW5jX211eF9jaywKIAkuY2xrc2VsCQk9IGZ1bmNfbWNic3AzX2dmY2xrX3NlbCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMjAzNCw3ICsxOTY2LDYgQEAKIAkuY2xrc2VsX21hc2sJPSBPTUFQNDQzMF9DTEtTRUxfU09VUkNFX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTTFfQUJFX01DQlNQM19DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAiYWJlX2Nsa2RtIiwKQEAgLTIwNDksNyArMTk4MCw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX0lOVEVSTkFMX1NPVVJDRV9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgcGVyX21jYnNwNF9nZmNsa19zZWxbXSA9IHsKQEAgLTIwNTgsOSArMTk4OCw5IEBACiAJeyAucGFyZW50ID0gTlVMTCB9LAogfTsKIAotLyogTWVyZ2VkIHBlcl9tY2JzcDRfZ2ZjbGsgaW50byBtY2JzcDRfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jYnNwNF9jayA9IHsKLQkubmFtZQkJPSAibWNic3A0X2NrIiwKKy8qIE1lcmdlZCBwZXJfbWNic3A0X2dmY2xrIGludG8gbWNic3A0ICovCitzdGF0aWMgc3RydWN0IGNsayBtY2JzcDRfZmNrID0geworCS5uYW1lCQk9ICJtY2JzcDRfZmNrIiwKIAkucGFyZW50CQk9ICZtY2JzcDRfc3luY19tdXhfY2ssCiAJLmNsa3NlbAkJPSBwZXJfbWNic3A0X2dmY2xrX3NlbCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMjA2OCwxNCArMTk5OCwxMyBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9TT1VSQ0VfMjRfMjRfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX01DQlNQNF9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAibDRfcGVyX2Nsa2RtIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMV9jayA9IHsKLQkubmFtZQkJPSAibWNzcGkxX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpMV9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfTUNTUEkxX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIwODQsOCArMjAxMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9jayA9IHsKLQkubmFtZQkJPSAibWNzcGkyX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpMl9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfTUNTUEkyX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIwOTQsOCArMjAyMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19jayA9IHsKLQkubmFtZQkJPSAibWNzcGkzX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpM19mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpM19mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfTUNTUEkzX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIxMDQsOCArMjAzMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpNF9jayA9IHsKLQkubmFtZQkJPSAibWNzcGk0X2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpNF9mY2sgPSB7CisJLm5hbWUJCT0gIm1jc3BpNF9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfTUNTUEk0X0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIxMTQsOSArMjA0Myw5IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLS8qIE1lcmdlZCBoc21tYzFfZmNsayBpbnRvIG1tYzFfY2sgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzFfY2sgPSB7Ci0JLm5hbWUJCT0gIm1tYzFfY2siLAorLyogTWVyZ2VkIGhzbW1jMV9mY2xrIGludG8gbW1jMSAqLworc3RhdGljIHN0cnVjdCBjbGsgbW1jMV9mY2sgPSB7CisJLm5hbWUJCT0gIm1tYzFfZmNrIiwKIAkucGFyZW50CQk9ICZmdW5jXzY0bV9mY2xrLAogCS5jbGtzZWwJCT0gaHNtbWM2X2ZjbGtfc2VsLAogCS5pbml0CQk9ICZvbWFwMl9pbml0X2Nsa3NlbF9wYXJlbnQsCkBAIC0yMTI0LDE1ICsyMDUzLDE0IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MM0lOSVRfTU1DMV9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCiAJLmNsa2RtX25hbWUJPSAibDNfaW5pdF9jbGtkbSIsCiB9OwogCi0vKiBNZXJnZWQgaHNtbWMyX2ZjbGsgaW50byBtbWMyX2NrICovCi1zdGF0aWMgc3RydWN0IGNsayBtbWMyX2NrID0gewotCS5uYW1lCQk9ICJtbWMyX2NrIiwKKy8qIE1lcmdlZCBoc21tYzJfZmNsayBpbnRvIG1tYzIgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tYzJfZmNrID0geworCS5uYW1lCQk9ICJtbWMyX2ZjayIsCiAJLnBhcmVudAkJPSAmZnVuY182NG1fZmNsaywKIAkuY2xrc2VsCQk9IGhzbW1jNl9mY2xrX3NlbCwKIAkuaW5pdAkJPSAmb21hcDJfaW5pdF9jbGtzZWxfcGFyZW50LApAQCAtMjE0MCwxNCArMjA2OCwxMyBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTklUX01NQzJfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLAogCS5jbGtkbV9uYW1lCT0gImwzX2luaXRfY2xrZG0iLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgbW1jM19jayA9IHsKLQkubmFtZQkJPSAibW1jM19jayIsCitzdGF0aWMgc3RydWN0IGNsayBtbWMzX2ZjayA9IHsKKwkubmFtZQkJPSAibW1jM19mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfTU1DU0QzX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIxNTYsOCArMjA4Myw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tYzRfY2sgPSB7Ci0JLm5hbWUJCT0gIm1tYzRfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgbW1jNF9mY2sgPSB7CisJLm5hbWUJCT0gIm1tYzRfZmNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX01NQ1NENF9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0yMTY2LDggKzIwOTMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBtbWM1X2NrID0gewotCS5uYW1lCQk9ICJtbWM1X2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tYzVfZmNrID0geworCS5uYW1lCQk9ICJtbWM1X2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9NTUNTRDVfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMjE3Niw4ICsyMTAzLDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgb2NwX3dwMV9jayA9IHsKLQkubmFtZQkJPSAib2NwX3dwMV9jayIsCitzdGF0aWMgc3RydWN0IGNsayBvY3Bfd3AxX2ljayA9IHsKKwkubmFtZQkJPSAib2NwX3dwMV9pY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTlNUUl9PQ1BfV1AxX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKQEAgLTIxODYsOCArMjExMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBkbV9jayA9IHsKLQkubmFtZQkJPSAicGRtX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBkbV9mY2sgPSB7CisJLm5hbWUJCT0gInBkbV9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ00xX0FCRV9QRE1fQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMjE5Niw4ICsyMTIzLDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgcGthZWlwMjlfY2sgPSB7Ci0JLm5hbWUJCT0gInBrYWVpcDI5X2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBrYWVpcDI5X2ZjayA9IHsKKwkubmFtZQkJPSAicGthZWlwMjlfZmNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0U0VDX1BLQUVJUDI5X0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIyMDYsOCArMjEzMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHJuZ19jayA9IHsKLQkubmFtZQkJPSAicm5nX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIHJuZ19pY2sgPSB7CisJLm5hbWUJCT0gInJuZ19pY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRTRUNfUk5HX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKQEAgLTIyMTYsOCArMjE0Myw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNoYTJtZDUxX2NrID0gewotCS5uYW1lCQk9ICJzaGEybWQ1MV9jayIsCitzdGF0aWMgc3RydWN0IGNsayBzaGEybWQ1MV9mY2sgPSB7CisJLm5hbWUJCT0gInNoYTJtZDUxX2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFNFQ19TSEEyTUQ1MV9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0yMjI2LDggKzIxNTMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBzbDJfY2sgPSB7Ci0JLm5hbWUJCT0gInNsMl9jayIsCitzdGF0aWMgc3RydWN0IGNsayBzbDJfaWNrID0geworCS5uYW1lCQk9ICJzbDJfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0lWQUhEX1NMMl9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCkBAIC0yMjM2LDggKzIxNjMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBzbGltYnVzMV9jayA9IHsKLQkubmFtZQkJPSAic2xpbWJ1czFfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgc2xpbWJ1czFfZmNrID0geworCS5uYW1lCQk9ICJzbGltYnVzMV9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ00xX0FCRV9TTElNQlVTX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIyNDYsOCArMjE3Myw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNsaW1idXMyX2NrID0gewotCS5uYW1lCQk9ICJzbGltYnVzMl9jayIsCitzdGF0aWMgc3RydWN0IGNsayBzbGltYnVzMl9mY2sgPSB7CisJLm5hbWUJCT0gInNsaW1idXMyX2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9TTElNQlVTMl9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0yMjU2LDggKzIxODMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayBzcl9jb3JlX2NrID0gewotCS5uYW1lCQk9ICJzcl9jb3JlX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNyX2NvcmVfZmNrID0geworCS5uYW1lCQk9ICJzcl9jb3JlX2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9BTFdPTl9TUl9DT1JFX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIyNjYsOCArMjE5Myw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNyX2l2YV9jayA9IHsKLQkubmFtZQkJPSAic3JfaXZhX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNyX2l2YV9mY2sgPSB7CisJLm5hbWUJCT0gInNyX2l2YV9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fQUxXT05fU1JfSVZBX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIyNzYsOCArMjIwMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNyX21wdV9jayA9IHsKLQkubmFtZQkJPSAic3JfbXB1X2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNyX21wdV9mY2sgPSB7CisJLm5hbWUJCT0gInNyX21wdV9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fQUxXT05fU1JfTVBVX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIyODYsOCArMjIxMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHRlc2xhX2NrID0gewotCS5uYW1lCQk9ICJ0ZXNsYV9jayIsCitzdGF0aWMgc3RydWN0IGNsayB0ZXNsYV9pY2sgPSB7CisJLm5hbWUJCT0gInRlc2xhX2ljayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9URVNMQV9URVNMQV9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9IV0NUUkwsCkBAIC0yMjk2LDggKzIyMjMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0MV9jayA9IHsKLQkubmFtZQkJPSAidWFydDFfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgdWFydDFfZmNrID0geworCS5uYW1lCQk9ICJ1YXJ0MV9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfVUFSVDFfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMjMwNiw4ICsyMjMzLDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgdWFydDJfY2sgPSB7Ci0JLm5hbWUJCT0gInVhcnQyX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQyX2ZjayA9IHsKKwkubmFtZQkJPSAidWFydDJfZmNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0w0UEVSX1VBUlQyX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIzMTYsOCArMjI0Myw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVhcnQzX2NrID0gewotCS5uYW1lCQk9ICJ1YXJ0M19jayIsCitzdGF0aWMgc3RydWN0IGNsayB1YXJ0M19mY2sgPSB7CisJLm5hbWUJCT0gInVhcnQzX2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9MNFBFUl9VQVJUM19DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0yMzI2LDggKzIyNTMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayB1YXJ0NF9jayA9IHsKLQkubmFtZQkJPSAidWFydDRfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgdWFydDRfZmNrID0geworCS5uYW1lCQk9ICJ1YXJ0NF9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDRQRVJfVUFSVDRfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMjMzNiw4ICsyMjYzLDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgdW5pcHJvMV9jayA9IHsKLQkubmFtZQkJPSAidW5pcHJvMV9jayIsCitzdGF0aWMgc3RydWN0IGNsayB1bmlwcm8xX2ZjayA9IHsKKwkubmFtZQkJPSAidW5pcHJvMV9mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTklUX1VOSVBSTzFfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMjM0Niw4ICsyMjczLDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgdXNiX2hvc3RfY2sgPSB7Ci0JLm5hbWUJCT0gInVzYl9ob3N0X2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9ob3N0X2ZjayA9IHsKKwkubmFtZQkJPSAidXNiX2hvc3RfZmNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0yMzU2LDggKzIyODMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayB1c2JfaG9zdF9mc19jayA9IHsKLQkubmFtZQkJPSAidXNiX2hvc3RfZnNfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgdXNiX2hvc3RfZnNfZmNrID0geworCS5uYW1lCQk9ICJ1c2JfaG9zdF9mc19mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ01fTDNJTklUX1VTQl9IT1NUX0ZTX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTIzNjYsOCArMjI5Myw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl9vdGdfY2sgPSB7Ci0JLm5hbWUJCT0gInVzYl9vdGdfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgdXNiX290Z19pY2sgPSB7CisJLm5hbWUJCT0gInVzYl9vdGdfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0wzSU5JVF9VU0JfT1RHX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKQEAgLTIzNzYsOCArMjMwMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYl90bGxfY2sgPSB7Ci0JLm5hbWUJCT0gInVzYl90bGxfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgdXNiX3RsbF9pY2sgPSB7CisJLm5hbWUJCT0gInVzYl90bGxfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0wzSU5JVF9VU0JfVExMX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKQEAgLTIzODYsOCArMjMxMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYnBoeW9jcDJzY3BfY2sgPSB7Ci0JLm5hbWUJCT0gInVzYnBoeW9jcDJzY3BfY2siLAorc3RhdGljIHN0cnVjdCBjbGsgdXNicGh5b2NwMnNjcF9pY2sgPSB7CisJLm5hbWUJCT0gInVzYnBoeW9jcDJzY3BfaWNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX0wzSU5JVF9VU0JQSFlPQ1AyU0NQX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX0hXQ1RSTCwKQEAgLTIzOTYsOCArMjMyMyw4IEBACiAJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzaW1fY2sgPSB7Ci0JLm5hbWUJCT0gInVzaW1fY2siLAorc3RhdGljIHN0cnVjdCBjbGsgdXNpbV9mY2sgPSB7CisJLm5hbWUJCT0gInVzaW1fZmNrIiwKIAkub3BzCQk9ICZjbGtvcHNfb21hcDJfZGZsdCwKIAkuZW5hYmxlX3JlZwk9IE9NQVA0NDMwX0NNX1dLVVBfVVNJTV9DTEtDVFJMLAogCS5lbmFibGVfYml0CT0gT01BUDQ0MzBfTU9EVUxFTU9ERV9TV0NUUkwsCkBAIC0yNDA2LDggKzIzMzMsOCBAQAogCS5yZWNhbGMJCT0gJmZvbGxvd3BhcmVudF9yZWNhbGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsayB3ZHQyX2NrID0gewotCS5uYW1lCQk9ICJ3ZHQyX2NrIiwKK3N0YXRpYyBzdHJ1Y3QgY2xrIHdkdDJfZmNrID0geworCS5uYW1lCQk9ICJ3ZHQyX2ZjayIsCiAJLm9wcwkJPSAmY2xrb3BzX29tYXAyX2RmbHQsCiAJLmVuYWJsZV9yZWcJPSBPTUFQNDQzMF9DTV9XS1VQX1dEVDJfQ0xLQ1RSTCwKIAkuZW5hYmxlX2JpdAk9IE9NQVA0NDMwX01PRFVMRU1PREVfU1dDVFJMLApAQCAtMjQxNiw4ICsyMzQzLDggQEAKIAkucmVjYWxjCQk9ICZmb2xsb3dwYXJlbnRfcmVjYWxjLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGsgd2R0M19jayA9IHsKLQkubmFtZQkJPSAid2R0M19jayIsCitzdGF0aWMgc3RydWN0IGNsayB3ZHQzX2ZjayA9IHsKKwkubmFtZQkJPSAid2R0M19mY2siLAogCS5vcHMJCT0gJmNsa29wc19vbWFwMl9kZmx0LAogCS5lbmFibGVfcmVnCT0gT01BUDQ0MzBfQ00xX0FCRV9XRFQzX0NMS0NUUkwsCiAJLmVuYWJsZV9iaXQJPSBPTUFQNDQzMF9NT0RVTEVNT0RFX1NXQ1RSTCwKQEAgLTI0NDIsNyArMjM2OSw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMXzYwTV9NQVNLLAogCS5vcHMJCT0gJmNsa29wc19udWxsLAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgc3RtX2Nsa19kaXZfZGl2W10gPSB7CkBAIC0yNDYwLDcgKzIzODYsNiBAQAogCS5yZWNhbGMJCT0gJm9tYXAyX2Nsa3NlbF9yZWNhbGMsCiAJLnJvdW5kX3JhdGUJPSAmb21hcDJfY2xrc2VsX3JvdW5kX3JhdGUsCiAJLnNldF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9zZXRfcmF0ZSwKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGNsa3NlbCB0cmFjZV9jbGtfZGl2X2RpdltdID0gewpAQCAtMjQ3OCw3ICsyNDAzLDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWxfcmF0ZSBkaXYyXzE0dG8xOF9yYXRlc1tdID0gewpAQCAtMjUwMiw3ICsyNDI2LDYgQEAKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAogCS5yb3VuZF9yYXRlCT0gJm9tYXAyX2Nsa3NlbF9yb3VuZF9yYXRlLAogCS5zZXRfcmF0ZQk9ICZvbWFwMl9jbGtzZWxfc2V0X3JhdGUsCi0JLmZsYWdzCQk9IENMT0NLX0lOX09NQVA0NDMwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtzZWwgdXRtaV9wMV9nZmNsa19zZWxbXSA9IHsKQEAgLTI1MjAsNyArMjQ0Myw2IEBACiAJLmNsa3NlbF9tYXNrCT0gT01BUDQ0MzBfQ0xLU0VMX1VUTUlfUDFfTUFTSywKIAkub3BzCQk9ICZjbGtvcHNfbnVsbCwKIAkucmVjYWxjCQk9ICZvbWFwMl9jbGtzZWxfcmVjYWxjLAotCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQNDQzMCwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY2xrc2VsIHV0bWlfcDJfZ2ZjbGtfc2VsW10gPSB7CkBAIC0yNTM4LDcgKzI0NjAsNiBAQAogCS5jbGtzZWxfbWFzawk9IE9NQVA0NDMwX0NMS1NFTF9VVE1JX1AyX01BU0ssCiAJLm9wcwkJPSAmY2xrb3BzX251bGwsCiAJLnJlY2FsYwkJPSAmb21hcDJfY2xrc2VsX3JlY2FsYywKLQkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDQ0MzAsCiB9OwogCiAvKgpAQCAtMjYzMSwxMDYgKzI1NTIsMTM5IEBACiAJQ0xLKE5VTEwsCSJwbWRfc3RtX2Nsb2NrX211eF9jayIsCQkmcG1kX3N0bV9jbG9ja19tdXhfY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkicG1kX3RyYWNlX2Nsa19tdXhfY2siLAkJJnBtZF90cmFjZV9jbGtfbXV4X2NrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJInN5Y19jbGtfZGl2X2NrIiwJCSZzeWNfY2xrX2Rpdl9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJhZXMxX2NrIiwJCQkmYWVzMV9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJhZXMyX2NrIiwJCQkmYWVzMl9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJhZXNzX2NrIiwJCQkmYWVzc19jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJjdXN0X2VmdXNlX2NrIiwJCSZjdXN0X2VmdXNlX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImRlczNkZXNfY2siLAkJCSZkZXMzZGVzX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImFlczFfZmNrIiwJCQkmYWVzMV9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiYWVzMl9mY2siLAkJCSZhZXMyX2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJhZXNzX2ZjayIsCQkJJmFlc3NfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImN1c3RfZWZ1c2VfZmNrIiwJCSZjdXN0X2VmdXNlX2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkZXMzZGVzX2ZjayIsCQkJJmRlczNkZXNfZmNrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJImRtaWNfc3luY19tdXhfY2siLAkJJmRtaWNfc3luY19tdXhfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZG1pY19jayIsCQkJJmRtaWNfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZHNzX2NrIiwJCQkmZHNzX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImR1Y2F0aV9jayIsCQkJJmR1Y2F0aV9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJlbWlmMV9jayIsCQkJJmVtaWYxX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImVtaWYyX2NrIiwJCQkmZW1pZjJfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZmRpZl9jayIsCQkJJmZkaWZfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZG1pY19mY2siLAkJCSZkbWljX2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkc3NfZmNrIiwJCQkmZHNzX2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJkdWNhdGlfaWNrIiwJCQkmZHVjYXRpX2ljaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJlbWlmMV9pY2siLAkJCSZlbWlmMV9pY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZW1pZjJfaWNrIiwJCQkmZW1pZjJfaWNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImZkaWZfZmNrIiwJCQkmZmRpZl9mY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkicGVyX3NneF9mY2xrIiwJCQkmcGVyX3NneF9mY2xrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImdmeF9jayIsCQkJJmdmeF9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJncGlvMV9jayIsCQkJJmdwaW8xX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImdwaW8yX2NrIiwJCQkmZ3BpbzJfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzNfY2siLAkJCSZncGlvM19jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJncGlvNF9jayIsCQkJJmdwaW80X2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImdwaW81X2NrIiwJCQkmZ3BpbzVfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZ3BpbzZfY2siLAkJCSZncGlvNl9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJncG1jX2NrIiwJCQkmZ3BtY19jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJncHRpbWVyMV9jayIsCQkJJmdwdGltZXIxX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImdwdGltZXIxMF9jayIsCQkJJmdwdGltZXIxMF9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJncHRpbWVyMTFfY2siLAkJCSZncHRpbWVyMTFfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZ3B0aW1lcjJfY2siLAkJCSZncHRpbWVyMl9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJncHRpbWVyM19jayIsCQkJJmdwdGltZXIzX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImdwdGltZXI0X2NrIiwJCQkmZ3B0aW1lcjRfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZ3B0aW1lcjVfY2siLAkJCSZncHRpbWVyNV9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJncHRpbWVyNl9jayIsCQkJJmdwdGltZXI2X2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImdwdGltZXI3X2NrIiwJCQkmZ3B0aW1lcjdfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiZ3B0aW1lcjhfY2siLAkJCSZncHRpbWVyOF9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJncHRpbWVyOV9jayIsCQkJJmdwdGltZXI5X2NrLAlDS180NDNYKSwKLQlDTEsoIm9tYXAyX2hkcS4wIiwJImljayIsCQkJCSZoZHExd19jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJoc2lfY2siLAkJCSZoc2lfY2ssCUNLXzQ0M1gpLAotCUNMSygiaTJjX29tYXAuMSIsCSJpY2siLAkJCQkmaTJjMV9jaywJQ0tfNDQzWCksCi0JQ0xLKCJpMmNfb21hcC4yIiwJImljayIsCQkJCSZpMmMyX2NrLAlDS180NDNYKSwKLQlDTEsoImkyY19vbWFwLjMiLAkiaWNrIiwJCQkJJmkyYzNfY2ssCUNLXzQ0M1gpLAotCUNMSygiaTJjX29tYXAuNCIsCSJpY2siLAkJCQkmaTJjNF9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJpc3NfY2siLAkJCSZpc3NfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkiaXZhaGRfY2siLAkJCSZpdmFoZF9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJrZXlib2FyZF9jayIsCQkJJmtleWJvYXJkX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJImwzX2luc3RyX2ludGVyY29ubmVjdF9jayIsCSZsM19pbnN0cl9pbnRlcmNvbm5lY3RfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkibDNfaW50ZXJjb25uZWN0XzNfY2siLAkJJmwzX2ludGVyY29ubmVjdF8zX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdmeF9mY2siLAkJCSZnZnhfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwaW8xX2ljayIsCQkJJmdwaW8xX2ljaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncGlvMl9pY2siLAkJCSZncGlvMl9pY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzNfaWNrIiwJCQkmZ3BpbzNfaWNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwaW80X2ljayIsCQkJJmdwaW80X2ljaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncGlvNV9pY2siLAkJCSZncGlvNV9pY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzZfaWNrIiwJCQkmZ3BpbzZfaWNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwbWNfaWNrIiwJCQkmZ3BtY19pY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MV9mY2siLAkJCSZncHQxX2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHQxMF9mY2siLAkJCSZncHQxMF9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3B0MTFfZmNrIiwJCQkmZ3B0MTFfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwdDJfZmNrIiwJCQkmZ3B0Ml9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3B0M19mY2siLAkJCSZncHQzX2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHQ0X2ZjayIsCQkJJmdwdDRfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwdDVfZmNrIiwJCQkmZ3B0NV9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3B0Nl9mY2siLAkJCSZncHQ2X2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHQ3X2ZjayIsCQkJJmdwdDdfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwdDhfZmNrIiwJCQkmZ3B0OF9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3B0OV9mY2siLAkJCSZncHQ5X2ZjaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwMl9oZHEuMCIsCSJmY2siLAkJCQkmaGRxMXdfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImhzaV9pY2siLAkJCSZoc2lfaWNrLAlDS180NDNYKSwKKwlDTEsoImkyY19vbWFwLjEiLAkiZmNrIiwJCQkJJmkyYzFfZmNrLAlDS180NDNYKSwKKwlDTEsoImkyY19vbWFwLjIiLAkiZmNrIiwJCQkJJmkyYzJfZmNrLAlDS180NDNYKSwKKwlDTEsoImkyY19vbWFwLjMiLAkiZmNrIiwJCQkJJmkyYzNfZmNrLAlDS180NDNYKSwKKwlDTEsoImkyY19vbWFwLjQiLAkiZmNrIiwJCQkJJmkyYzRfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImlzc19mY2siLAkJCSZpc3NfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJIml2YWhkX2ljayIsCQkJJml2YWhkX2ljaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJrZXlib2FyZF9mY2siLAkJCSZrZXlib2FyZF9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkibDNfaW5zdHJfaW50ZXJjb25uZWN0X2ljayIsCSZsM19pbnN0cl9pbnRlcmNvbm5lY3RfaWNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImwzX2ludGVyY29ubmVjdF8zX2ljayIsCSZsM19pbnRlcmNvbm5lY3RfM19pY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkibWNhc3Bfc3luY19tdXhfY2siLAkJJm1jYXNwX3N5bmNfbXV4X2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJIm1jYXNwX2NrIiwJCQkmbWNhc3BfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkibWNhc3BfZmNrIiwJCQkmbWNhc3BfZmNrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJIm1jYnNwMV9zeW5jX211eF9jayIsCQkmbWNic3AxX3N5bmNfbXV4X2NrLAlDS180NDNYKSwKLQlDTEsoIm9tYXAtbWNic3AuMSIsCSJmY2siLAkJCQkmbWNic3AxX2NrLAlDS180NDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMSIsCSJmY2siLAkJCQkmbWNic3AxX2ZjaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJtY2JzcDJfc3luY19tdXhfY2siLAkJJm1jYnNwMl9zeW5jX211eF9jaywJQ0tfNDQzWCksCi0JQ0xLKCJvbWFwLW1jYnNwLjIiLAkiZmNrIiwJCQkJJm1jYnNwMl9jaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjIiLAkiZmNrIiwJCQkJJm1jYnNwMl9mY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkibWNic3AzX3N5bmNfbXV4X2NrIiwJCSZtY2JzcDNfc3luY19tdXhfY2ssCUNLXzQ0M1gpLAotCUNMSygib21hcC1tY2JzcC4zIiwJImZjayIsCQkJCSZtY2JzcDNfY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcC1tY2JzcC4zIiwJImZjayIsCQkJCSZtY2JzcDNfZmNrLAlDS180NDNYKSwKIAlDTEsoTlVMTCwJIm1jYnNwNF9zeW5jX211eF9jayIsCQkmbWNic3A0X3N5bmNfbXV4X2NrLAlDS180NDNYKSwKLQlDTEsoIm9tYXAtbWNic3AuNCIsCSJmY2siLAkJCQkmbWNic3A0X2NrLAlDS180NDNYKSwKLQlDTEsoIm9tYXAyX21jc3BpLjEiLAkiZmNrIiwJCQkJJm1jc3BpMV9jaywJQ0tfNDQzWCksCi0JQ0xLKCJvbWFwMl9tY3NwaS4yIiwJImZjayIsCQkJCSZtY3NwaTJfY2ssCUNLXzQ0M1gpLAotCUNMSygib21hcDJfbWNzcGkuMyIsCSJmY2siLAkJCQkmbWNzcGkzX2NrLAlDS180NDNYKSwKLQlDTEsoIm9tYXAyX21jc3BpLjQiLAkiZmNrIiwJCQkJJm1jc3BpNF9jaywJQ0tfNDQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMCIsCSJmY2siLAkJCQkmbW1jMV9jaywJQ0tfNDQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMSIsCSJmY2siLAkJCQkmbW1jMl9jaywJQ0tfNDQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMiIsCSJmY2siLAkJCQkmbW1jM19jaywJQ0tfNDQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuMyIsCSJmY2siLAkJCQkmbW1jNF9jaywJQ0tfNDQzWCksCi0JQ0xLKCJtbWNpLW9tYXAtaHMuNCIsCSJmY2siLAkJCQkmbW1jNV9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJvY3Bfd3AxX2NrIiwJCQkmb2NwX3dwMV9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJwZG1fY2siLAkJCSZwZG1fY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkicGthZWlwMjlfY2siLAkJCSZwa2FlaXAyOV9jaywJQ0tfNDQzWCksCi0JQ0xLKCJvbWFwX3JuZyIsCSJpY2siLAkJCQkmcm5nX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJInNoYTJtZDUxX2NrIiwJCQkmc2hhMm1kNTFfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkic2wyX2NrIiwJCQkmc2wyX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJInNsaW1idXMxX2NrIiwJCQkmc2xpbWJ1czFfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkic2xpbWJ1czJfY2siLAkJCSZzbGltYnVzMl9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJzcl9jb3JlX2NrIiwJCQkmc3JfY29yZV9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJzcl9pdmFfY2siLAkJCSZzcl9pdmFfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkic3JfbXB1X2NrIiwJCQkmc3JfbXB1X2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJInRlc2xhX2NrIiwJCQkmdGVzbGFfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkidWFydDFfY2siLAkJCSZ1YXJ0MV9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJ1YXJ0Ml9jayIsCQkJJnVhcnQyX2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJInVhcnQzX2NrIiwJCQkmdWFydDNfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkidWFydDRfY2siLAkJCSZ1YXJ0NF9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJ1bmlwcm8xX2NrIiwJCQkmdW5pcHJvMV9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJ1c2JfaG9zdF9jayIsCQkJJnVzYl9ob3N0X2NrLAlDS180NDNYKSwKLQlDTEsoTlVMTCwJInVzYl9ob3N0X2ZzX2NrIiwJCSZ1c2JfaG9zdF9mc19jaywJQ0tfNDQzWCksCi0JQ0xLKCJtdXNiX2hkcmMiLAkiaWNrIiwJCQkJJnVzYl9vdGdfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkidXNiX3RsbF9jayIsCQkJJnVzYl90bGxfY2ssCUNLXzQ0M1gpLAotCUNMSyhOVUxMLAkidXNicGh5b2NwMnNjcF9jayIsCQkmdXNicGh5b2NwMnNjcF9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJ1c2ltX2NrIiwJCQkmdXNpbV9jaywJQ0tfNDQzWCksCi0JQ0xLKCJvbWFwX3dkdCIsCSJmY2siLAkJCQkmd2R0Ml9jaywJQ0tfNDQzWCksCi0JQ0xLKE5VTEwsCSJ3ZHQzX2NrIiwJCQkmd2R0M19jaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjQiLAkiZmNrIiwJCQkJJm1jYnNwNF9mY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcDJfbWNzcGkuMSIsCSJmY2siLAkJCQkmbWNzcGkxX2ZjaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwMl9tY3NwaS4yIiwJImZjayIsCQkJCSZtY3NwaTJfZmNrLAlDS180NDNYKSwKKwlDTEsoIm9tYXAyX21jc3BpLjMiLAkiZmNrIiwJCQkJJm1jc3BpM19mY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcDJfbWNzcGkuNCIsCSJmY2siLAkJCQkmbWNzcGk0X2ZjaywJQ0tfNDQzWCksCisJQ0xLKCJtbWNpLW9tYXAtaHMuMCIsCSJmY2siLAkJCQkmbW1jMV9mY2ssCUNLXzQ0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjEiLAkiZmNrIiwJCQkJJm1tYzJfZmNrLAlDS180NDNYKSwKKwlDTEsoIm1tY2ktb21hcC1ocy4yIiwJImZjayIsCQkJCSZtbWMzX2ZjaywJQ0tfNDQzWCksCisJQ0xLKCJtbWNpLW9tYXAtaHMuMyIsCSJmY2siLAkJCQkmbW1jNF9mY2ssCUNLXzQ0M1gpLAorCUNMSygibW1jaS1vbWFwLWhzLjQiLAkiZmNrIiwJCQkJJm1tYzVfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJIm9jcF93cDFfaWNrIiwJCQkmb2NwX3dwMV9pY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkicGRtX2ZjayIsCQkJJnBkbV9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkicGthZWlwMjlfZmNrIiwJCQkmcGthZWlwMjlfZmNrLAlDS180NDNYKSwKKwlDTEsoIm9tYXBfcm5nIiwJImljayIsCQkJCSZybmdfaWNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInNoYTJtZDUxX2ZjayIsCQkJJnNoYTJtZDUxX2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJzbDJfaWNrIiwJCQkmc2wyX2ljaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJzbGltYnVzMV9mY2siLAkJCSZzbGltYnVzMV9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkic2xpbWJ1czJfZmNrIiwJCQkmc2xpbWJ1czJfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInNyX2NvcmVfZmNrIiwJCQkmc3JfY29yZV9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkic3JfaXZhX2ZjayIsCQkJJnNyX2l2YV9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkic3JfbXB1X2ZjayIsCQkJJnNyX21wdV9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidGVzbGFfaWNrIiwJCQkmdGVzbGFfaWNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInVhcnQxX2ZjayIsCQkJJnVhcnQxX2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJ1YXJ0Ml9mY2siLAkJCSZ1YXJ0Ml9mY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidWFydDNfZmNrIiwJCQkmdWFydDNfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInVhcnQ0X2ZjayIsCQkJJnVhcnQ0X2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJ1bmlwcm8xX2ZjayIsCQkJJnVuaXBybzFfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInVzYl9ob3N0X2ZjayIsCQkJJnVzYl9ob3N0X2ZjaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJ1c2JfaG9zdF9mc19mY2siLAkJJnVzYl9ob3N0X2ZzX2ZjaywJQ0tfNDQzWCksCisJQ0xLKCJtdXNiX2hkcmMiLAkiaWNrIiwJCQkJJnVzYl9vdGdfaWNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInVzYl90bGxfaWNrIiwJCQkmdXNiX3RsbF9pY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidXNicGh5b2NwMnNjcF9pY2siLAkJJnVzYnBoeW9jcDJzY3BfaWNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJInVzaW1fZmNrIiwJCQkmdXNpbV9mY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcF93ZHQiLAkiZmNrIiwJCQkJJndkdDJfZmNrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJIndkdDNfZmNrIiwJCQkmd2R0M19mY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkib3RnXzYwbV9nZmNsa19jayIsCQkmb3RnXzYwbV9nZmNsa19jaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJzdG1fY2xrX2Rpdl9jayIsCQkmc3RtX2Nsa19kaXZfY2ssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkidHJhY2VfY2xrX2Rpdl9jayIsCQkmdHJhY2VfY2xrX2Rpdl9jaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJ1c2ltX2ZjbGsiLAkJCSZ1c2ltX2ZjbGssCUNLXzQ0M1gpLAogCUNMSyhOVUxMLAkidXRtaV9wMV9nZmNsa19jayIsCQkmdXRtaV9wMV9nZmNsa19jaywJQ0tfNDQzWCksCiAJQ0xLKE5VTEwsCSJ1dG1pX3AyX2dmY2xrX2NrIiwJCSZ1dG1pX3AyX2dmY2xrX2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwaW8xX2RiY2siLAkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncGlvMl9kYmNrIiwJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzNfZGJjayIsCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwaW80X2RiY2siLAkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncGlvNV9kYmNrIiwJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3BpbzZfZGJjayIsCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwbWNfY2siLAkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHQxX2ljayIsCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwdDJfaWNrIiwJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3B0M19pY2siLAkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHQ0X2ljayIsCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwdDVfaWNrIiwJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3B0Nl9pY2siLAkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHQ3X2ljayIsCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoTlVMTCwJImdwdDhfaWNrIiwJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkiZ3B0OV9pY2siLAkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHQxMF9pY2siLAkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKE5VTEwsCSJncHQxMV9pY2siLAkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJpMmNfb21hcC4xIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJpMmNfb21hcC4yIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJpMmNfb21hcC4zIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJpMmNfb21hcC40IiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjEiLAkiaWNrIiwJCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoIm9tYXAtbWNic3AuMiIsCSJpY2siLAkJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcC1tY2JzcC4zIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwLW1jYnNwLjQiLAkiaWNrIiwJCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoIm9tYXAtbWNzcGkuMSIsCSJpY2siLAkJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcC1tY3NwaS4yIiwJImljayIsCQkJCSZkdW1teV9jaywJQ0tfNDQzWCksCisJQ0xLKCJvbWFwLW1jc3BpLjMiLAkiaWNrIiwJCQkJJmR1bW15X2NrLAlDS180NDNYKSwKKwlDTEsoIm9tYXAtbWNzcGkuNCIsCSJpY2siLAkJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidWFydDFfaWNrIiwJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidWFydDJfaWNrIiwJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidWFydDNfaWNrIiwJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSyhOVUxMLAkidWFydDRfaWNrIiwJCQkmZHVtbXlfY2ssCUNLXzQ0M1gpLAorCUNMSygib21hcF93ZHQiLAkiaWNrIiwJCQkJJmR1bW15X2NrLAlDS180NDNYKSwKIH07CiAKLWludCBfX2luaXQgb21hcDJfY2xrX2luaXQodm9pZCkKK2ludCBfX2luaXQgb21hcDR4eHhfY2xrX2luaXQodm9pZCkKIHsKLQkvKiBzdHJ1Y3QgcHJjbV9jb25maWcgKnByY207ICovCiAJc3RydWN0IG9tYXBfY2xrICpjOwotCS8qIHUzMiBjbGtyYXRlOyAqLwogCXUzMiBjcHVfY2xrZmxnOwogCiAJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CkBAIC0yNzQ5LDkgKzI3MDMsNyBAQAogCQlpZiAoYy0+Y3B1ICYgY3B1X2Nsa2ZsZykgewogCQkJY2xrZGV2X2FkZCgmYy0+bGspOwogCQkJY2xrX3JlZ2lzdGVyKGMtPmxrLmNsayk7Ci0JCQkvKiBUT0RPCiAJCQlvbWFwMl9pbml0X2Nsa19jbGtkbShjLT5say5jbGspOwotCQkJKi8KIAkJfQogCiAJcmVjYWxjdWxhdGVfcm9vdF9jbG9ja3MoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW4uYwppbmRleCBkZDI4NWYwLi5iODdhZDY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWluLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbi5jCkBAIC0xLDEwICsxLDExIEBACiAvKgotICogT01BUDIvMyBjbG9ja2RvbWFpbiBmcmFtZXdvcmsgZnVuY3Rpb25zCisgKiBPTUFQMi8zLzQgY2xvY2tkb21haW4gZnJhbWV3b3JrIGZ1bmN0aW9ucwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleSBhbmQgSm91bmkgSMO2Z2FuZGVyCisgKiBBZGRlZCBPTUFQNCBzcGVjaWZpYyBzdXBwb3J0IGJ5IEFiaGlqaXQgUGFnYXJlIDxhYmhpaml0cGFnYXJlQHRpLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTI2LDE0NiArMjcsMjQgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogCi0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgotCiAjaW5jbHVkZSAicHJtLmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgogI2luY2x1ZGUgImNtLmgiCiAKKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CiAjaW5jbHVkZSA8cGxhdC9wb3dlcmRvbWFpbi5oPgogI2luY2x1ZGUgPHBsYXQvY2xvY2tkb21haW4uaD4KKyNpbmNsdWRlIDxwbGF0L3ByY20uaD4KIAogLyogY2xrZG1fbGlzdCBjb250YWlucyBhbGwgcmVnaXN0ZXJlZCBzdHJ1Y3QgY2xvY2tkb21haW5zICovCiBzdGF0aWMgTElTVF9IRUFEKGNsa2RtX2xpc3QpOwogCi0vKiBjbGtkbV9tdXRleCBwcm90ZWN0cyBjbGtkbV9saXN0IGFkZCBhbmQgZGVsIG9wcyAqLwotc3RhdGljIERFRklORV9NVVRFWChjbGtkbV9tdXRleCk7Ci0KLS8qIGFycmF5IG9mIHBvd2VyZG9tYWluIGRlcHMgdG8gYmUgYWRkZWQvcmVtb3ZlZCB3aGVuIGNsa2RtIGluIGh3c3VwIG1vZGUgKi8KLXN0YXRpYyBzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqYXV0b2RlcHM7CisvKiBhcnJheSBvZiBjbG9ja2RvbWFpbiBkZXBzIHRvIGJlIGFkZGVkL3JlbW92ZWQgd2hlbiBjbGtkbSBpbiBod3N1cCBtb2RlICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2F1dG9kZXAgKmF1dG9kZXBzOwogCiAKIC8qIFByaXZhdGUgZnVuY3Rpb25zICovCiAKLS8qCi0gKiBfYXV0b2RlcF9sb29rdXAgLSByZXNvbHZlIGF1dG9kZXAgcHdyZG0gbmFtZXMgdG8gcHdyZG0gcG9pbnRlcnM7IHN0b3JlCi0gKiBAYXV0b2RlcDogc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgKiB0byByZXNvbHZlCi0gKgotICogUmVzb2x2ZSBhdXRvZGVwIHBvd2VyZG9tYWluIG5hbWVzIHRvIHBvd2VyZG9tYWluIHBvaW50ZXJzIHZpYQotICogcHdyZG1fbG9va3VwKCkgYW5kIHN0b3JlIHRoZSBwb2ludGVycyBpbiB0aGUgYXV0b2RlcCBzdHJ1Y3R1cmUuICBBbgotICogImF1dG9kZXAiIGlzIGEgcG93ZXJkb21haW4gc2xlZXAvd2FrZXVwIGRlcGVuZGVuY3kgdGhhdCBpcwotICogYXV0b21hdGljYWxseSBhZGRlZCBhbmQgcmVtb3ZlZCB3aGVuZXZlciBjbG9ja3MgaW4gdGhlIGFzc29jaWF0ZWQKLSAqIGNsb2NrZG9tYWluIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIChyZXNwZWN0aXZlbHkpIHdoZW4gdGhlCi0gKiBjbG9ja2RvbWFpbiBpcyBpbiBoYXJkd2FyZS1zdXBlcnZpc2VkIG1vZGUuCU1lYW50IHRvIGJlIGNhbGxlZAotICogb25jZSBhdCBjbG9ja2RvbWFpbiBsYXllciBpbml0aWFsaXphdGlvbiwgc2luY2UgdGhlc2Ugc2hvdWxkIHJlbWFpbgotICogZml4ZWQgZm9yIGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUuICBObyByZXR1cm4gdmFsdWUuCi0gKi8KLXN0YXRpYyB2b2lkIF9hdXRvZGVwX2xvb2t1cChzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqYXV0b2RlcCkKLXsKLQlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtOwotCi0JaWYgKCFhdXRvZGVwKQotCQlyZXR1cm47Ci0KLQlpZiAoIW9tYXBfY2hpcF9pcyhhdXRvZGVwLT5vbWFwX2NoaXApKQotCQlyZXR1cm47Ci0KLQlwd3JkbSA9IHB3cmRtX2xvb2t1cChhdXRvZGVwLT5wd3JkbS5uYW1lKTsKLQlpZiAoIXB3cmRtKSB7Ci0JCXByX2VycigiY2xvY2tkb21haW46IGF1dG9kZXBzOiBwb3dlcmRvbWFpbiAlcyBkb2VzIG5vdCBleGlzdFxuIiwKLQkJCSBhdXRvZGVwLT5wd3JkbS5uYW1lKTsKLQkJcHdyZG0gPSBFUlJfUFRSKC1FTk9FTlQpOwotCX0KLQlhdXRvZGVwLT5wd3JkbS5wdHIgPSBwd3JkbTsKLX0KLQotLyoKLSAqIF9jbGtkbV9hZGRfYXV0b2RlcHMgLSBhZGQgYXV0byBzbGVlcGRlcHMvd2tkZXBzIHRvIGNsa2RtIHVwb24gY2xvY2sgZW5hYmxlCi0gKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCi0gKgotICogQWRkIHRoZSAiYXV0b2RlcCIgc2xlZXAgJiB3YWtldXAgZGVwZW5kZW5jaWVzIHRvIGNsb2NrZG9tYWluICdjbGtkbScKLSAqIGluIGhhcmR3YXJlLXN1cGVydmlzZWQgbW9kZS4gIE1lYW50IHRvIGJlIGNhbGxlZCBmcm9tIGNsb2NrIGZyYW1ld29yawotICogd2hlbiBhIGNsb2NrIGluc2lkZSBjbG9ja2RvbWFpbiAnY2xrZG0nIGlzIGVuYWJsZWQuCU5vIHJldHVybiB2YWx1ZS4KLSAqLwotc3RhdGljIHZvaWQgX2Nsa2RtX2FkZF9hdXRvZGVwcyhzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQotewotCXN0cnVjdCBjbGtkbV9wd3JkbV9hdXRvZGVwICphdXRvZGVwOwotCi0JZm9yIChhdXRvZGVwID0gYXV0b2RlcHM7IGF1dG9kZXAtPnB3cmRtLnB0cjsgYXV0b2RlcCsrKSB7Ci0JCWlmIChJU19FUlIoYXV0b2RlcC0+cHdyZG0ucHRyKSkKLQkJCWNvbnRpbnVlOwotCi0JCWlmICghb21hcF9jaGlwX2lzKGF1dG9kZXAtPm9tYXBfY2hpcCkpCi0JCQljb250aW51ZTsKLQotCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGFkZGluZyAlcyBzbGVlcGRlcC93a2RlcCBmb3IgIgotCQkJICJwd3JkbSAlc1xuIiwgYXV0b2RlcC0+cHdyZG0ucHRyLT5uYW1lLAotCQkJIGNsa2RtLT5wd3JkbS5wdHItPm5hbWUpOwotCi0JCXB3cmRtX2FkZF9zbGVlcGRlcChjbGtkbS0+cHdyZG0ucHRyLCBhdXRvZGVwLT5wd3JkbS5wdHIpOwotCQlwd3JkbV9hZGRfd2tkZXAoY2xrZG0tPnB3cmRtLnB0ciwgYXV0b2RlcC0+cHdyZG0ucHRyKTsKLQl9Ci19Ci0KLS8qCi0gKiBfY2xrZG1fYWRkX2F1dG9kZXBzIC0gcmVtb3ZlIGF1dG8gc2xlZXBkZXBzL3drZGVwcyBmcm9tIGNsa2RtCi0gKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCi0gKgotICogUmVtb3ZlIHRoZSAiYXV0b2RlcCIgc2xlZXAgJiB3YWtldXAgZGVwZW5kZW5jaWVzIGZyb20gY2xvY2tkb21haW4gJ2Nsa2RtJwotICogaW4gaGFyZHdhcmUtc3VwZXJ2aXNlZCBtb2RlLiAgTWVhbnQgdG8gYmUgY2FsbGVkIGZyb20gY2xvY2sgZnJhbWV3b3JrCi0gKiB3aGVuIGEgY2xvY2sgaW5zaWRlIGNsb2NrZG9tYWluICdjbGtkbScgaXMgZGlzYWJsZWQuICBObyByZXR1cm4gdmFsdWUuCi0gKi8KLXN0YXRpYyB2b2lkIF9jbGtkbV9kZWxfYXV0b2RlcHMoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKLXsKLQlzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqYXV0b2RlcDsKLQotCWZvciAoYXV0b2RlcCA9IGF1dG9kZXBzOyBhdXRvZGVwLT5wd3JkbS5wdHI7IGF1dG9kZXArKykgewotCQlpZiAoSVNfRVJSKGF1dG9kZXAtPnB3cmRtLnB0cikpCi0JCQljb250aW51ZTsKLQotCQlpZiAoIW9tYXBfY2hpcF9pcyhhdXRvZGVwLT5vbWFwX2NoaXApKQotCQkJY29udGludWU7Ci0KLQkJcHJfZGVidWcoImNsb2NrZG9tYWluOiByZW1vdmluZyAlcyBzbGVlcGRlcC93a2RlcCBmb3IgIgotCQkJICJwd3JkbSAlc1xuIiwgYXV0b2RlcC0+cHdyZG0ucHRyLT5uYW1lLAotCQkJIGNsa2RtLT5wd3JkbS5wdHItPm5hbWUpOwotCi0JCXB3cmRtX2RlbF9zbGVlcGRlcChjbGtkbS0+cHdyZG0ucHRyLCBhdXRvZGVwLT5wd3JkbS5wdHIpOwotCQlwd3JkbV9kZWxfd2tkZXAoY2xrZG0tPnB3cmRtLnB0ciwgYXV0b2RlcC0+cHdyZG0ucHRyKTsKLQl9Ci19Ci0KLS8qCi0gKiBfb21hcDJfY2xrZG1fc2V0X2h3c3VwIC0gc2V0IHRoZSBod3N1cCBpZGxlIHRyYW5zaXRpb24gYml0Ci0gKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCi0gKiBAZW5hYmxlOiBpbnQgMCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZQotICoKLSAqIEludGVybmFsIGhlbHBlciBmb3IgYWN0dWFsbHkgc3dpdGNoaW5nIHRoZSBiaXQgdGhhdCBjb250cm9scyBod3N1cAotICogaWRsZSB0cmFuc2l0aW9ucyBmb3IgY2xrZG0uCi0gKi8KLXN0YXRpYyB2b2lkIF9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwgaW50IGVuYWJsZSkKLXsKLQl1MzIgdjsKLQotCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewotCQlpZiAoZW5hYmxlKQotCQkJdiA9IE9NQVAyNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTzsKLQkJZWxzZQotCQkJdiA9IE9NQVAyNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE87Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewotCQlpZiAoZW5hYmxlKQotCQkJdiA9IE9NQVAzNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTzsKLQkJZWxzZQotCQkJdiA9IE9NQVAzNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE87Ci0JfSBlbHNlIHsKLQkJQlVHKCk7Ci0JfQotCi0JY21fcm13X21vZF9yZWdfYml0cyhjbGtkbS0+Y2xrdHJjdHJsX21hc2ssCi0JCQkgICAgdiA8PCBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spLAotCQkJICAgIGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywgQ01fQ0xLU1RDVFJMKTsKLX0KLQogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiAqX2Nsa2RtX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sICp0ZW1wX2Nsa2RtOwpAQCAtMTg1LDQ3ICs2NCwxNiBAQAogCXJldHVybiBjbGtkbTsKIH0KIAotCi0vKiBQdWJsaWMgZnVuY3Rpb25zICovCi0KIC8qKgotICogY2xrZG1faW5pdCAtIHNldCB1cCB0aGUgY2xvY2tkb21haW4gbGF5ZXIKLSAqIEBjbGtkbXM6IG9wdGlvbmFsIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgY2xvY2tkb21haW5zIHRvIHJlZ2lzdGVyCi0gKiBAaW5pdF9hdXRvZGVwczogb3B0aW9uYWwgcG9pbnRlciB0byBhbiBhcnJheSBvZiBhdXRvZGVwcyB0byByZWdpc3RlcgotICoKLSAqIFNldCB1cCBpbnRlcm5hbCBzdGF0ZS4gIElmIGEgcG9pbnRlciB0byBhbiBhcnJheSBvZiBjbG9ja2RvbWFpbnMKLSAqIHdhcyBzdXBwbGllZCwgbG9vcCB0aHJvdWdoIHRoZSBsaXN0IG9mIGNsb2NrZG9tYWlucywgcmVnaXN0ZXIgYWxsCi0gKiB0aGF0IGFyZSBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgcGxhdGZvcm0uCVNpbWlsYXJseSwgaWYgYQotICogcG9pbnRlciB0byBhbiBhcnJheSBvZiBjbG9ja2RvbWFpbi1wb3dlcmRvbWFpbiBhdXRvZGVwZW5kZW5jaWVzIHdhcwotICogcHJvdmlkZWQsIHJlZ2lzdGVyIHRob3NlLiAgTm8gcmV0dXJuIHZhbHVlLgotICovCi12b2lkIGNsa2RtX2luaXQoc3RydWN0IGNsb2NrZG9tYWluICoqY2xrZG1zLAotCQlzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqaW5pdF9hdXRvZGVwcykKLXsKLQlzdHJ1Y3QgY2xvY2tkb21haW4gKipjID0gTlVMTDsKLQlzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCAqYXV0b2RlcCA9IE5VTEw7Ci0KLQlpZiAoY2xrZG1zKQotCQlmb3IgKGMgPSBjbGtkbXM7ICpjOyBjKyspCi0JCQljbGtkbV9yZWdpc3RlcigqYyk7Ci0KLQlhdXRvZGVwcyA9IGluaXRfYXV0b2RlcHM7Ci0JaWYgKGF1dG9kZXBzKQotCQlmb3IgKGF1dG9kZXAgPSBhdXRvZGVwczsgYXV0b2RlcC0+cHdyZG0ucHRyOyBhdXRvZGVwKyspCi0JCQlfYXV0b2RlcF9sb29rdXAoYXV0b2RlcCk7Ci19Ci0KLS8qKgotICogY2xrZG1fcmVnaXN0ZXIgLSByZWdpc3RlciBhIGNsb2NrZG9tYWluCisgKiBfY2xrZG1fcmVnaXN0ZXIgLSByZWdpc3RlciBhIGNsb2NrZG9tYWluCiAgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqIHRvIHJlZ2lzdGVyCiAgKgogICogQWRkcyBhIGNsb2NrZG9tYWluIHRvIHRoZSBpbnRlcm5hbCBjbG9ja2RvbWFpbiBsaXN0LgogICogUmV0dXJucyAtRUlOVkFMIGlmIGdpdmVuIGEgbnVsbCBwb2ludGVyLCAtRUVYSVNUIGlmIGEgY2xvY2tkb21haW4gaXMKICAqIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB0aGUgcHJvdmlkZWQgbmFtZSwgb3IgMCB1cG9uIHN1Y2Nlc3MuCiAgKi8KLWludCBjbGtkbV9yZWdpc3RlcihzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQorc3RhdGljIGludCBfY2xrZG1fcmVnaXN0ZXIoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKIAlzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtOwogCiAJaWYgKCFjbGtkbSB8fCAhY2xrZG0tPm5hbWUpCkBAIC0yNDIsNTUgKzkwLDMxMCBAQAogCX0KIAljbGtkbS0+cHdyZG0ucHRyID0gcHdyZG07CiAKLQltdXRleF9sb2NrKCZjbGtkbV9tdXRleCk7CiAJLyogVmVyaWZ5IHRoYXQgdGhlIGNsb2NrZG9tYWluIGlzIG5vdCBhbHJlYWR5IHJlZ2lzdGVyZWQgKi8KLQlpZiAoX2Nsa2RtX2xvb2t1cChjbGtkbS0+bmFtZSkpIHsKLQkJcmV0ID0gLUVFWElTVDsKLQkJZ290byBjcl91bmxvY2s7Ci0JfQorCWlmIChfY2xrZG1fbG9va3VwKGNsa2RtLT5uYW1lKSkKKwkJcmV0dXJuIC1FRVhJU1Q7CiAKIAlsaXN0X2FkZCgmY2xrZG0tPm5vZGUsICZjbGtkbV9saXN0KTsKIAogCXB3cmRtX2FkZF9jbGtkbShwd3JkbSwgY2xrZG0pOwogCiAJcHJfZGVidWcoImNsb2NrZG9tYWluOiByZWdpc3RlcmVkICVzXG4iLCBjbGtkbS0+bmFtZSk7Ci0JcmV0ID0gMDsKIAotY3JfdW5sb2NrOgotCW11dGV4X3VubG9jaygmY2xrZG1fbXV0ZXgpOworCXJldHVybiAwOworfQogCi0JcmV0dXJuIHJldDsKKy8qIF9jbGtkbV9kZXBzX2xvb2t1cCAtIGxvb2sgdXAgdGhlIHNwZWNpZmllZCBjbG9ja2RvbWFpbiBpbiBhIGNsa2RtIGxpc3QgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwICpfY2xrZG1fZGVwc19sb29rdXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwKKwkJCQkJICAgIHN0cnVjdCBjbGtkbV9kZXAgKmRlcHMpCit7CisJc3RydWN0IGNsa2RtX2RlcCAqY2Q7CisKKwlpZiAoIWNsa2RtIHx8ICFkZXBzIHx8ICFvbWFwX2NoaXBfaXMoY2xrZG0tPm9tYXBfY2hpcCkpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJZm9yIChjZCA9IGRlcHM7IGNkLT5jbGtkbV9uYW1lOyBjZCsrKSB7CisJCWlmICghb21hcF9jaGlwX2lzKGNkLT5vbWFwX2NoaXApKQorCQkJY29udGludWU7CisKKwkJaWYgKCFjZC0+Y2xrZG0gJiYgY2QtPmNsa2RtX25hbWUpCisJCQljZC0+Y2xrZG0gPSBfY2xrZG1fbG9va3VwKGNkLT5jbGtkbV9uYW1lKTsKKworCQlpZiAoY2QtPmNsa2RtID09IGNsa2RtKQorCQkJYnJlYWs7CisJfQorCisJaWYgKCFjZC0+Y2xrZG1fbmFtZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7CisKKwlyZXR1cm4gY2Q7Cit9CisKKy8qCisgKiBfYXV0b2RlcF9sb29rdXAgLSByZXNvbHZlIGF1dG9kZXAgY2xrZG0gbmFtZXMgdG8gY2xrZG0gcG9pbnRlcnM7IHN0b3JlCisgKiBAYXV0b2RlcDogc3RydWN0IGNsa2RtX2F1dG9kZXAgKiB0byByZXNvbHZlCisgKgorICogUmVzb2x2ZSBhdXRvZGVwIGNsb2NrZG9tYWluIG5hbWVzIHRvIGNsb2NrZG9tYWluIHBvaW50ZXJzIHZpYQorICogY2xrZG1fbG9va3VwKCkgYW5kIHN0b3JlIHRoZSBwb2ludGVycyBpbiB0aGUgYXV0b2RlcCBzdHJ1Y3R1cmUuICBBbgorICogImF1dG9kZXAiIGlzIGEgY2xvY2tkb21haW4gc2xlZXAvd2FrZXVwIGRlcGVuZGVuY3kgdGhhdCBpcworICogYXV0b21hdGljYWxseSBhZGRlZCBhbmQgcmVtb3ZlZCB3aGVuZXZlciBjbG9ja3MgaW4gdGhlIGFzc29jaWF0ZWQKKyAqIGNsb2NrZG9tYWluIGFyZSBlbmFibGVkIG9yIGRpc2FibGVkIChyZXNwZWN0aXZlbHkpIHdoZW4gdGhlCisgKiBjbG9ja2RvbWFpbiBpcyBpbiBoYXJkd2FyZS1zdXBlcnZpc2VkIG1vZGUuCU1lYW50IHRvIGJlIGNhbGxlZAorICogb25jZSBhdCBjbG9ja2RvbWFpbiBsYXllciBpbml0aWFsaXphdGlvbiwgc2luY2UgdGhlc2Ugc2hvdWxkIHJlbWFpbgorICogZml4ZWQgZm9yIGEgcGFydGljdWxhciBhcmNoaXRlY3R1cmUuICBObyByZXR1cm4gdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIF9hdXRvZGVwX2xvb2t1cChzdHJ1Y3QgY2xrZG1fYXV0b2RlcCAqYXV0b2RlcCkKK3sKKwlzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtOworCisJaWYgKCFhdXRvZGVwKQorCQlyZXR1cm47CisKKwlpZiAoIW9tYXBfY2hpcF9pcyhhdXRvZGVwLT5vbWFwX2NoaXApKQorCQlyZXR1cm47CisKKwljbGtkbSA9IGNsa2RtX2xvb2t1cChhdXRvZGVwLT5jbGtkbS5uYW1lKTsKKwlpZiAoIWNsa2RtKSB7CisJCXByX2VycigiY2xvY2tkb21haW46IGF1dG9kZXBzOiBjbG9ja2RvbWFpbiAlcyBkb2VzIG5vdCBleGlzdFxuIiwKKwkJCSBhdXRvZGVwLT5jbGtkbS5uYW1lKTsKKwkJY2xrZG0gPSBFUlJfUFRSKC1FTk9FTlQpOworCX0KKwlhdXRvZGVwLT5jbGtkbS5wdHIgPSBjbGtkbTsKK30KKworLyoKKyAqIF9jbGtkbV9hZGRfYXV0b2RlcHMgLSBhZGQgYXV0byBzbGVlcGRlcHMvd2tkZXBzIHRvIGNsa2RtIHVwb24gY2xvY2sgZW5hYmxlCisgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCisgKgorICogQWRkIHRoZSAiYXV0b2RlcCIgc2xlZXAgJiB3YWtldXAgZGVwZW5kZW5jaWVzIHRvIGNsb2NrZG9tYWluICdjbGtkbScKKyAqIGluIGhhcmR3YXJlLXN1cGVydmlzZWQgbW9kZS4gIE1lYW50IHRvIGJlIGNhbGxlZCBmcm9tIGNsb2NrIGZyYW1ld29yaworICogd2hlbiBhIGNsb2NrIGluc2lkZSBjbG9ja2RvbWFpbiAnY2xrZG0nIGlzIGVuYWJsZWQuCU5vIHJldHVybiB2YWx1ZS4KKyAqLworc3RhdGljIHZvaWQgX2Nsa2RtX2FkZF9hdXRvZGVwcyhzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQoreworCXN0cnVjdCBjbGtkbV9hdXRvZGVwICphdXRvZGVwOworCisJaWYgKCFhdXRvZGVwcykKKwkJcmV0dXJuOworCisJZm9yIChhdXRvZGVwID0gYXV0b2RlcHM7IGF1dG9kZXAtPmNsa2RtLnB0cjsgYXV0b2RlcCsrKSB7CisJCWlmIChJU19FUlIoYXV0b2RlcC0+Y2xrZG0ucHRyKSkKKwkJCWNvbnRpbnVlOworCisJCWlmICghb21hcF9jaGlwX2lzKGF1dG9kZXAtPm9tYXBfY2hpcCkpCisJCQljb250aW51ZTsKKworCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGFkZGluZyAlcyBzbGVlcGRlcC93a2RlcCBmb3IgIgorCQkJICJjbGtkbSAlc1xuIiwgYXV0b2RlcC0+Y2xrZG0ucHRyLT5uYW1lLAorCQkJIGNsa2RtLT5uYW1lKTsKKworCQljbGtkbV9hZGRfc2xlZXBkZXAoY2xrZG0sIGF1dG9kZXAtPmNsa2RtLnB0cik7CisJCWNsa2RtX2FkZF93a2RlcChjbGtkbSwgYXV0b2RlcC0+Y2xrZG0ucHRyKTsKKwl9Cit9CisKKy8qCisgKiBfY2xrZG1fYWRkX2F1dG9kZXBzIC0gcmVtb3ZlIGF1dG8gc2xlZXBkZXBzL3drZGVwcyBmcm9tIGNsa2RtCisgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCisgKgorICogUmVtb3ZlIHRoZSAiYXV0b2RlcCIgc2xlZXAgJiB3YWtldXAgZGVwZW5kZW5jaWVzIGZyb20gY2xvY2tkb21haW4gJ2Nsa2RtJworICogaW4gaGFyZHdhcmUtc3VwZXJ2aXNlZCBtb2RlLiAgTWVhbnQgdG8gYmUgY2FsbGVkIGZyb20gY2xvY2sgZnJhbWV3b3JrCisgKiB3aGVuIGEgY2xvY2sgaW5zaWRlIGNsb2NrZG9tYWluICdjbGtkbScgaXMgZGlzYWJsZWQuICBObyByZXR1cm4gdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIF9jbGtkbV9kZWxfYXV0b2RlcHMoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwlzdHJ1Y3QgY2xrZG1fYXV0b2RlcCAqYXV0b2RlcDsKKworCWlmICghYXV0b2RlcHMpCisJCXJldHVybjsKKworCWZvciAoYXV0b2RlcCA9IGF1dG9kZXBzOyBhdXRvZGVwLT5jbGtkbS5wdHI7IGF1dG9kZXArKykgeworCQlpZiAoSVNfRVJSKGF1dG9kZXAtPmNsa2RtLnB0cikpCisJCQljb250aW51ZTsKKworCQlpZiAoIW9tYXBfY2hpcF9pcyhhdXRvZGVwLT5vbWFwX2NoaXApKQorCQkJY29udGludWU7CisKKwkJcHJfZGVidWcoImNsb2NrZG9tYWluOiByZW1vdmluZyAlcyBzbGVlcGRlcC93a2RlcCBmb3IgIgorCQkJICJjbGtkbSAlc1xuIiwgYXV0b2RlcC0+Y2xrZG0ucHRyLT5uYW1lLAorCQkJIGNsa2RtLT5uYW1lKTsKKworCQljbGtkbV9kZWxfc2xlZXBkZXAoY2xrZG0sIGF1dG9kZXAtPmNsa2RtLnB0cik7CisJCWNsa2RtX2RlbF93a2RlcChjbGtkbSwgYXV0b2RlcC0+Y2xrZG0ucHRyKTsKKwl9Cit9CisKKy8qCisgKiBfb21hcDJfY2xrZG1fc2V0X2h3c3VwIC0gc2V0IHRoZSBod3N1cCBpZGxlIHRyYW5zaXRpb24gYml0CisgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCisgKiBAZW5hYmxlOiBpbnQgMCB0byBkaXNhYmxlLCAxIHRvIGVuYWJsZQorICoKKyAqIEludGVybmFsIGhlbHBlciBmb3IgYWN0dWFsbHkgc3dpdGNoaW5nIHRoZSBiaXQgdGhhdCBjb250cm9scyBod3N1cAorICogaWRsZSB0cmFuc2l0aW9ucyBmb3IgY2xrZG0uCisgKi8KK3N0YXRpYyB2b2lkIF9vbWFwMl9jbGtkbV9zZXRfaHdzdXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwgaW50IGVuYWJsZSkKK3sKKwl1MzIgYml0cywgdjsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlpZiAoZW5hYmxlKQorCQkJYml0cyA9IE9NQVAyNFhYX0NMS1NUQ1RSTF9FTkFCTEVfQVVUTzsKKwkJZWxzZQorCQkJYml0cyA9IE9NQVAyNFhYX0NMS1NUQ1RSTF9ESVNBQkxFX0FVVE87CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSB8IGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCWlmIChlbmFibGUpCisJCQliaXRzID0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPOworCQllbHNlCisJCQliaXRzID0gT01BUDM0WFhfQ0xLU1RDVFJMX0RJU0FCTEVfQVVUTzsKKwl9IGVsc2UgeworCQlCVUcoKTsKKwl9CisKKwliaXRzID0gYml0cyA8PCBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spOworCisJdiA9IF9fcmF3X3JlYWRsKGNsa2RtLT5jbGtzdGN0cmxfcmVnKTsKKwl2ICY9IH4oY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKKwl2IHw9IGJpdHM7CisJX19yYXdfd3JpdGVsKHYsIGNsa2RtLT5jbGtzdGN0cmxfcmVnKTsKKwogfQogCiAvKioKLSAqIGNsa2RtX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIGEgY2xvY2tkb21haW4KLSAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICogdG8gdW5yZWdpc3RlcgorICogX2luaXRfd2tkZXBfdXNlY291bnQgLSBpbml0aWFsaXplIHdrZGVwIHVzZWNvdW50cyB0byBtYXRjaCBoYXJkd2FyZQorICogQGNsa2RtOiBjbG9ja2RvbWFpbiB0byBpbml0aWFsaXplIHdrZGVwIHVzZWNvdW50cwogICoKLSAqIFJlbW92ZXMgYSBjbG9ja2RvbWFpbiBmcm9tIHRoZSBpbnRlcm5hbCBjbG9ja2RvbWFpbiBsaXN0LiAgUmV0dXJucwotICogLUVJTlZBTCBpZiBjbGtkbSBhcmd1bWVudCBpcyBOVUxMLgorICogSW5pdGlhbGl6ZSB0aGUgd2FrZXVwIGRlcGVuZGVuY3kgdXNlY291bnQgdmFyaWFibGVzIGZvciBjbG9ja2RvbWFpbiBAY2xrZG0uCisgKiBJZiBhIHdha2V1cCBkZXBlbmRlbmN5IGlzIHByZXNlbnQgaW4gdGhlIGhhcmR3YXJlLCB0aGUgdXNlY291bnQgd2lsbCBiZQorICogc2V0IHRvIDE7IG90aGVyd2lzZSwgaXQgd2lsbCBiZSBzZXQgdG8gMC4gIFNvZnR3YXJlIHNob3VsZCBjbGVhciBhbGwKKyAqIHNvZnR3YXJlIHdha2V1cCBkZXBlbmRlbmNpZXMgcHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uIGlmIGl0IHdpc2hlcworICogdG8gZW5zdXJlIHRoYXQgYWxsIHVzZWNvdW50cyBzdGFydCBhdCAwLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCi1pbnQgY2xrZG1fdW5yZWdpc3RlcihzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQorc3RhdGljIHZvaWQgX2luaXRfd2tkZXBfdXNlY291bnQoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKIHsKLQlpZiAoIWNsa2RtKQotCQlyZXR1cm4gLUVJTlZBTDsKKwl1MzIgdjsKKwlzdHJ1Y3QgY2xrZG1fZGVwICpjZDsKIAotCXB3cmRtX2RlbF9jbGtkbShjbGtkbS0+cHdyZG0ucHRyLCBjbGtkbSk7CisJaWYgKCFjbGtkbS0+d2tkZXBfc3JjcykKKwkJcmV0dXJuOwogCi0JbXV0ZXhfbG9jaygmY2xrZG1fbXV0ZXgpOwotCWxpc3RfZGVsKCZjbGtkbS0+bm9kZSk7Ci0JbXV0ZXhfdW5sb2NrKCZjbGtkbV9tdXRleCk7CisJZm9yIChjZCA9IGNsa2RtLT53a2RlcF9zcmNzOyBjZC0+Y2xrZG1fbmFtZTsgY2QrKykgeworCQlpZiAoIW9tYXBfY2hpcF9pcyhjZC0+b21hcF9jaGlwKSkKKwkJCWNvbnRpbnVlOwogCi0JcHJfZGVidWcoImNsb2NrZG9tYWluOiB1bnJlZ2lzdGVyZWQgJXNcbiIsIGNsa2RtLT5uYW1lKTsKKwkJaWYgKCFjZC0+Y2xrZG0gJiYgY2QtPmNsa2RtX25hbWUpCisJCQljZC0+Y2xrZG0gPSBfY2xrZG1fbG9va3VwKGNkLT5jbGtkbV9uYW1lKTsKIAotCXJldHVybiAwOworCQlpZiAoIWNkLT5jbGtkbSkgeworCQkJV0FSTighY2QtPmNsa2RtLCAiY2xvY2tkb21haW46ICVzOiB3a2RlcCBjbGtkbSAlcyBub3QgIgorCQkJICAgICAiZm91bmRcbiIsIGNsa2RtLT5uYW1lLCBjZC0+Y2xrZG1fbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXYgPSBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsCisJCQkJCSAgICBQTV9XS0RFUCwKKwkJCQkJICAgICgxIDw8IGNkLT5jbGtkbS0+ZGVwX2JpdCkpOworCisJCWlmICh2KQorCQkJcHJfZGVidWcoImNsb2NrZG9tYWluOiAlczogd2FrZXVwIGRlcGVuZGVuY3kgYWxyZWFkeSAiCisJCQkJICJzZXQgdG8gd2FrZSB1cCB3aGVuICVzIHdha2VzXG4iLAorCQkJCSBjbGtkbS0+bmFtZSwgY2QtPmNsa2RtLT5uYW1lKTsKKworCQlhdG9taWNfc2V0KCZjZC0+d2tkZXBfdXNlY291bnQsICh2KSA/IDEgOiAwKTsKKwl9Cit9CisKKy8qKgorICogX2luaXRfc2xlZXBkZXBfdXNlY291bnQgLSBpbml0aWFsaXplIHNsZWVwZGVwIHVzZWNvdW50cyB0byBtYXRjaCBoYXJkd2FyZQorICogQGNsa2RtOiBjbG9ja2RvbWFpbiB0byBpbml0aWFsaXplIHNsZWVwZGVwIHVzZWNvdW50cworICoKKyAqIEluaXRpYWxpemUgdGhlIHNsZWVwIGRlcGVuZGVuY3kgdXNlY291bnQgdmFyaWFibGVzIGZvciBjbG9ja2RvbWFpbiBAY2xrZG0uCisgKiBJZiBhIHNsZWVwIGRlcGVuZGVuY3kgaXMgcHJlc2VudCBpbiB0aGUgaGFyZHdhcmUsIHRoZSB1c2Vjb3VudCB3aWxsIGJlCisgKiBzZXQgdG8gMTsgb3RoZXJ3aXNlLCBpdCB3aWxsIGJlIHNldCB0byAwLiAgU29mdHdhcmUgc2hvdWxkIGNsZWFyIGFsbAorICogc29mdHdhcmUgc2xlZXAgZGVwZW5kZW5jaWVzIHByaW9yIHRvIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBpZiBpdCB3aXNoZXMKKyAqIHRvIGVuc3VyZSB0aGF0IGFsbCB1c2Vjb3VudHMgc3RhcnQgYXQgMC4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLworc3RhdGljIHZvaWQgX2luaXRfc2xlZXBkZXBfdXNlY291bnQoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwl1MzIgdjsKKwlzdHJ1Y3QgY2xrZG1fZGVwICpjZDsKKworCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCisJCXJldHVybjsKKworCWlmICghY2xrZG0tPnNsZWVwZGVwX3NyY3MpCisJCXJldHVybjsKKworCWZvciAoY2QgPSBjbGtkbS0+c2xlZXBkZXBfc3JjczsgY2QtPmNsa2RtX25hbWU7IGNkKyspIHsKKwkJaWYgKCFvbWFwX2NoaXBfaXMoY2QtPm9tYXBfY2hpcCkpCisJCQljb250aW51ZTsKKworCQlpZiAoIWNkLT5jbGtkbSAmJiBjZC0+Y2xrZG1fbmFtZSkKKwkJCWNkLT5jbGtkbSA9IF9jbGtkbV9sb29rdXAoY2QtPmNsa2RtX25hbWUpOworCisJCWlmICghY2QtPmNsa2RtKSB7CisJCQlXQVJOKCFjZC0+Y2xrZG0sICJjbG9ja2RvbWFpbjogJXM6IHNsZWVwZGVwIGNsa2RtICVzICIKKwkJCSAgICAgIm5vdCBmb3VuZFxuIiwgY2xrZG0tPm5hbWUsIGNkLT5jbGtkbV9uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdiA9IHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwkJCQkJICAgIE9NQVAzNDMwX0NNX1NMRUVQREVQLAorCQkJCQkgICAgKDEgPDwgY2QtPmNsa2RtLT5kZXBfYml0KSk7CisKKwkJaWYgKHYpCisJCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46ICVzOiBzbGVlcCBkZXBlbmRlbmN5IGFscmVhZHkgIgorCQkJCSAic2V0IHRvIHByZXZlbnQgZnJvbSBpZGxpbmcgdW50aWwgJXMgIgorCQkJCSAiaWRsZXNcbiIsIGNsa2RtLT5uYW1lLCBjZC0+Y2xrZG0tPm5hbWUpOworCisJCWF0b21pY19zZXQoJmNkLT5zbGVlcGRlcF91c2Vjb3VudCwgKHYpID8gMSA6IDApOworCX0KK307CisKKy8qIFB1YmxpYyBmdW5jdGlvbnMgKi8KKworLyoqCisgKiBjbGtkbV9pbml0IC0gc2V0IHVwIHRoZSBjbG9ja2RvbWFpbiBsYXllcgorICogQGNsa2Rtczogb3B0aW9uYWwgcG9pbnRlciB0byBhbiBhcnJheSBvZiBjbG9ja2RvbWFpbnMgdG8gcmVnaXN0ZXIKKyAqIEBpbml0X2F1dG9kZXBzOiBvcHRpb25hbCBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGF1dG9kZXBzIHRvIHJlZ2lzdGVyCisgKgorICogU2V0IHVwIGludGVybmFsIHN0YXRlLiAgSWYgYSBwb2ludGVyIHRvIGFuIGFycmF5IG9mIGNsb2NrZG9tYWlucworICogQGNsa2RtcyB3YXMgc3VwcGxpZWQsIGxvb3AgdGhyb3VnaCB0aGUgbGlzdCBvZiBjbG9ja2RvbWFpbnMsCisgKiByZWdpc3RlciBhbGwgdGhhdCBhcmUgYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IHBsYXRmb3JtLiBTaW1pbGFybHksCisgKiBpZiBhIHBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgY2xvY2tkb21haW4gYXV0b2RlcGVuZGVuY2llcworICogQGluaXRfYXV0b2RlcHMgd2FzIHByb3ZpZGVkLCByZWdpc3RlciB0aG9zZS4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLwordm9pZCBjbGtkbV9pbml0KHN0cnVjdCBjbG9ja2RvbWFpbiAqKmNsa2RtcywKKwkJc3RydWN0IGNsa2RtX2F1dG9kZXAgKmluaXRfYXV0b2RlcHMpCit7CisJc3RydWN0IGNsb2NrZG9tYWluICoqYyA9IE5VTEw7CisJc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTsKKwlzdHJ1Y3QgY2xrZG1fYXV0b2RlcCAqYXV0b2RlcCA9IE5VTEw7CisKKwlpZiAoY2xrZG1zKQorCQlmb3IgKGMgPSBjbGtkbXM7ICpjOyBjKyspCisJCQlfY2xrZG1fcmVnaXN0ZXIoKmMpOworCisJYXV0b2RlcHMgPSBpbml0X2F1dG9kZXBzOworCWlmIChhdXRvZGVwcykKKwkJZm9yIChhdXRvZGVwID0gYXV0b2RlcHM7IGF1dG9kZXAtPmNsa2RtLnB0cjsgYXV0b2RlcCsrKQorCQkJX2F1dG9kZXBfbG9va3VwKGF1dG9kZXApOworCisJLyoKKwkgKiBFbnN1cmUgdGhhdCB0aGUgKmRlcF91c2Vjb3VudCByZWdpc3RlcnMgcmVmbGVjdCB0aGUgY3VycmVudAorCSAqIHN0YXRlIG9mIHRoZSBQUkNNLgorCSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2xrZG0sICZjbGtkbV9saXN0LCBub2RlKSB7CisJCV9pbml0X3drZGVwX3VzZWNvdW50KGNsa2RtKTsKKwkJX2luaXRfc2xlZXBkZXBfdXNlY291bnQoY2xrZG0pOworCX0KIH0KIAogLyoqCiAgKiBjbGtkbV9sb29rdXAgLSBsb29rIHVwIGEgY2xvY2tkb21haW4gYnkgbmFtZSwgcmV0dXJuIGEgcG9pbnRlcgogICogQG5hbWU6IG5hbWUgb2YgY2xvY2tkb21haW4KICAqCi0gKiBGaW5kIGEgcmVnaXN0ZXJlZCBjbG9ja2RvbWFpbiBieSBpdHMgbmFtZS4gIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZQotICogc3RydWN0IGNsb2NrZG9tYWluIGlmIGZvdW5kLCBvciBOVUxMIG90aGVyd2lzZS4KKyAqIEZpbmQgYSByZWdpc3RlcmVkIGNsb2NrZG9tYWluIGJ5IGl0cyBuYW1lIEBuYW1lLiAgUmV0dXJucyBhIHBvaW50ZXIKKyAqIHRvIHRoZSBzdHJ1Y3QgY2xvY2tkb21haW4gaWYgZm91bmQsIG9yIE5VTEwgb3RoZXJ3aXNlLgogICovCiBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQogewpAQCAtMzAxLDE0ICs0MDQsMTIgQEAKIAogCWNsa2RtID0gTlVMTDsKIAotCW11dGV4X2xvY2soJmNsa2RtX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRlbXBfY2xrZG0sICZjbGtkbV9saXN0LCBub2RlKSB7CiAJCWlmICghc3RyY21wKG5hbWUsIHRlbXBfY2xrZG0tPm5hbWUpKSB7CiAJCQljbGtkbSA9IHRlbXBfY2xrZG07CiAJCQlicmVhazsKIAkJfQogCX0KLQltdXRleF91bmxvY2soJmNsa2RtX211dGV4KTsKIAogCXJldHVybiBjbGtkbTsKIH0KQEAgLTMxNyw4ICs0MTgsOCBAQAogICogY2xrZG1fZm9yX2VhY2ggLSBjYWxsIGZ1bmN0aW9uIG9uIGVhY2ggcmVnaXN0ZXJlZCBjbG9ja2RvbWFpbgogICogQGZuOiBjYWxsYmFjayBmdW5jdGlvbiAqCiAgKgotICogQ2FsbCB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gZm9yIGVhY2ggcmVnaXN0ZXJlZCBjbG9ja2RvbWFpbi4KLSAqIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBjYW4gcmV0dXJuIGFueXRoaW5nIGJ1dCAwIHRvIGJhaWwKKyAqIENhbGwgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIEBmbiBmb3IgZWFjaCByZWdpc3RlcmVkIGNsb2NrZG9tYWluLgorICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIEBmbiBjYW4gcmV0dXJuIGFueXRoaW5nIGJ1dCAwIHRvIGJhaWwKICAqIG91dCBlYXJseSBmcm9tIHRoZSBpdGVyYXRvci4gIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aAogICogdGhlIGNsa2RtX211dGV4IGhlbGQsIHNvIG5vIGNsb2NrZG9tYWluIHN0cnVjdHVyZSBtYW5pcHVsYXRpb24KICAqIGZ1bmN0aW9ucyBzaG91bGQgYmUgY2FsbGVkIGZyb20gdGhlIGNhbGxiYWNrLCBhbHRob3VnaCBoYXJkd2FyZQpAQCAtMzM2LDEzICs0MzcsMTEgQEAKIAlpZiAoIWZuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW11dGV4X2xvY2soJmNsa2RtX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsa2RtLCAmY2xrZG1fbGlzdCwgbm9kZSkgewogCQlyZXQgPSAoKmZuKShjbGtkbSwgdXNlcik7CiAJCWlmIChyZXQpCiAJCQlicmVhazsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZjbGtkbV9tdXRleCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzUzLDcgKzQ1Miw3IEBACiAgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCiAgKgogICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgc3RydWN0IHBvd2VyZG9tYWluIHRoYXQgdGhlIHNwZWNpZmllZCBjbG9ja2RvbWFpbgotICogJ2Nsa2RtJyBleGlzdHMgaW4sIG9yIHJldHVybnMgTlVMTCBpZiBjbGtkbSBhcmd1bWVudCBpcyBOVUxMLgorICogQGNsa2RtIGV4aXN0cyBpbiwgb3IgcmV0dXJucyBOVUxMIGlmIEBjbGtkbSBpcyBOVUxMLgogICovCiBzdHJ1Y3QgcG93ZXJkb21haW4gKmNsa2RtX2dldF9wd3JkbShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQogewpAQCAtMzY3LDExICs0NjYsMzA5IEBACiAvKiBIYXJkd2FyZSBjbG9ja2RvbWFpbiBjb250cm9sICovCiAKIC8qKgotICogb21hcDJfY2xrZG1fY2xrdHJjdHJsX3JlYWQgLSByZWFkIHRoZSBjbGtkbSdzIGN1cnJlbnQgc3RhdGUgdHJhbnNpdGlvbiBtb2RlCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgYSBjbG9ja2RvbWFpbgorICogY2xrZG1fYWRkX3drZGVwIC0gYWRkIGEgd2FrZXVwIGRlcGVuZGVuY3kgZnJvbSBjbGtkbTIgdG8gY2xrZG0xCisgKiBAY2xrZG0xOiB3YWtlIHRoaXMgc3RydWN0IGNsb2NrZG9tYWluICogdXAgKGRlcGVuZGVudCkKKyAqIEBjbGtkbTI6IHdoZW4gdGhpcyBzdHJ1Y3QgY2xvY2tkb21haW4gKiB3YWtlcyB1cCAoc291cmNlKQogICoKLSAqIFJldHVybiB0aGUgY2xvY2tkb21haW4ncyBjdXJyZW50IHN0YXRlIHRyYW5zaXRpb24gbW9kZSBmcm9tIHRoZQotICogY29ycmVzcG9uZGluZyBkb21haW4gQ01fQ0xLU1RDVFJMIHJlZ2lzdGVyLglSZXR1cm5zIC1FSU5WQUwgaWYgY2xrCisgKiBXaGVuIHRoZSBjbG9ja2RvbWFpbiByZXByZXNlbnRlZCBieSBAY2xrZG0yIHdha2VzIHVwLCB3YWtlIHVwCisgKiBAY2xrZG0xLiBJbXBsZW1lbnRlZCBpbiBoYXJkd2FyZSBvbiB0aGUgT01BUCwgdGhpcyBmZWF0dXJlIGlzCisgKiBkZXNpZ25lZCB0byByZWR1Y2Ugd2FrZXVwIGxhdGVuY3kgb2YgdGhlIGRlcGVuZGVudCBjbG9ja2RvbWFpbiBAY2xrZG0xLgorICogUmV0dXJucyAtRUlOVkFMIGlmIHByZXNlbnRlZCB3aXRoIGludmFsaWQgY2xvY2tkb21haW4gcG9pbnRlcnMsCisgKiAtRU5PRU5UIGlmIEBjbGtkbTIgY2Fubm90IHdha2UgdXAgY2xrZG0xIGluIGhhcmR3YXJlLCBvciAwIHVwb24KKyAqIHN1Y2Nlc3MuCisgKi8KK2ludCBjbGtkbV9hZGRfd2tkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKQoreworCXN0cnVjdCBjbGtkbV9kZXAgKmNkOworCisJaWYgKCFjbGtkbTEgfHwgIWNsa2RtMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljZCA9IF9jbGtkbV9kZXBzX2xvb2t1cChjbGtkbTIsIGNsa2RtMS0+d2tkZXBfc3Jjcyk7CisJaWYgKElTX0VSUihjZCkpIHsKKwkJcHJfZGVidWcoImNsb2NrZG9tYWluOiBoYXJkd2FyZSBjYW5ub3Qgc2V0L2NsZWFyIHdha2UgdXAgb2YgIgorCQkJICIlcyB3aGVuICVzIHdha2VzIHVwXG4iLCBjbGtkbTEtPm5hbWUsIGNsa2RtMi0+bmFtZSk7CisJCXJldHVybiBQVFJfRVJSKGNkKTsKKwl9CisKKwlpZiAoYXRvbWljX2luY19yZXR1cm4oJmNkLT53a2RlcF91c2Vjb3VudCkgPT0gMSkgeworCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGhhcmR3YXJlIHdpbGwgd2FrZSB1cCAlcyB3aGVuICVzIHdha2VzICIKKwkJCSAidXBcbiIsIGNsa2RtMS0+bmFtZSwgY2xrZG0yLT5uYW1lKTsKKworCQlwcm1fc2V0X21vZF9yZWdfYml0cygoMSA8PCBjbGtkbTItPmRlcF9iaXQpLAorCQkJCSAgICAgY2xrZG0xLT5wd3JkbS5wdHItPnByY21fb2ZmcywgUE1fV0tERVApOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNsa2RtX2RlbF93a2RlcCAtIHJlbW92ZSBhIHdha2V1cCBkZXBlbmRlbmN5IGZyb20gY2xrZG0yIHRvIGNsa2RtMQorICogQGNsa2RtMTogd2FrZSB0aGlzIHN0cnVjdCBjbG9ja2RvbWFpbiAqIHVwIChkZXBlbmRlbnQpCisgKiBAY2xrZG0yOiB3aGVuIHRoaXMgc3RydWN0IGNsb2NrZG9tYWluICogd2FrZXMgdXAgKHNvdXJjZSkKKyAqCisgKiBSZW1vdmUgYSB3YWtldXAgZGVwZW5kZW5jeSBjYXVzaW5nIEBjbGtkbTEgdG8gd2FrZSB1cCB3aGVuIEBjbGtkbTIKKyAqIHdha2VzIHVwLiAgUmV0dXJucyAtRUlOVkFMIGlmIHByZXNlbnRlZCB3aXRoIGludmFsaWQgY2xvY2tkb21haW4KKyAqIHBvaW50ZXJzLCAtRU5PRU5UIGlmIEBjbGtkbTIgY2Fubm90IHdha2UgdXAgY2xrZG0xIGluIGhhcmR3YXJlLCBvcgorICogMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBjbGtkbV9kZWxfd2tkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKQoreworCXN0cnVjdCBjbGtkbV9kZXAgKmNkOworCisJaWYgKCFjbGtkbTEgfHwgIWNsa2RtMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljZCA9IF9jbGtkbV9kZXBzX2xvb2t1cChjbGtkbTIsIGNsa2RtMS0+d2tkZXBfc3Jjcyk7CisJaWYgKElTX0VSUihjZCkpIHsKKwkJcHJfZGVidWcoImNsb2NrZG9tYWluOiBoYXJkd2FyZSBjYW5ub3Qgc2V0L2NsZWFyIHdha2UgdXAgb2YgIgorCQkJICIlcyB3aGVuICVzIHdha2VzIHVwXG4iLCBjbGtkbTEtPm5hbWUsIGNsa2RtMi0+bmFtZSk7CisJCXJldHVybiBQVFJfRVJSKGNkKTsKKwl9CisKKwlpZiAoYXRvbWljX2RlY19yZXR1cm4oJmNkLT53a2RlcF91c2Vjb3VudCkgPT0gMCkgeworCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGhhcmR3YXJlIHdpbGwgbm8gbG9uZ2VyIHdha2UgdXAgJXMgIgorCQkJICJhZnRlciAlcyB3YWtlcyB1cFxuIiwgY2xrZG0xLT5uYW1lLCBjbGtkbTItPm5hbWUpOworCisJCXBybV9jbGVhcl9tb2RfcmVnX2JpdHMoKDEgPDwgY2xrZG0yLT5kZXBfYml0KSwKKwkJCQkgICAgICAgY2xrZG0xLT5wd3JkbS5wdHItPnByY21fb2ZmcywgUE1fV0tERVApOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNsa2RtX3JlYWRfd2tkZXAgLSByZWFkIHdha2V1cCBkZXBlbmRlbmN5IHN0YXRlIGZyb20gY2xrZG0yIHRvIGNsa2RtMQorICogQGNsa2RtMTogd2FrZSB0aGlzIHN0cnVjdCBjbG9ja2RvbWFpbiAqIHVwIChkZXBlbmRlbnQpCisgKiBAY2xrZG0yOiB3aGVuIHRoaXMgc3RydWN0IGNsb2NrZG9tYWluICogd2FrZXMgdXAgKHNvdXJjZSkKKyAqCisgKiBSZXR1cm4gMSBpZiBhIGhhcmR3YXJlIHdha2V1cCBkZXBlbmRlbmN5IGV4aXN0cyB3aGVyZWluIEBjbGtkbTEgd2lsbCBiZQorICogYXdva2VuIHdoZW4gQGNsa2RtMiB3YWtlcyB1cDsgMCBpZiBkZXBlbmRlbmN5IGlzIG5vdCBzZXQ7IC1FSU5WQUwKKyAqIGlmIGVpdGhlciBjbG9ja2RvbWFpbiBwb2ludGVyIGlzIGludmFsaWQ7IG9yIC1FTk9FTlQgaWYgdGhlIGhhcmR3YXJlCisgKiBpcyBpbmNhcGFibGUuCisgKgorICogUkVWSVNJVDogQ3VycmVudGx5IHRoaXMgZnVuY3Rpb24gb25seSByZXByZXNlbnRzIHNvZnR3YXJlLWNvbnRyb2xsYWJsZQorICogd2FrZXVwIGRlcGVuZGVuY2llcy4gIFdha2V1cCBkZXBlbmRlbmNpZXMgZml4ZWQgaW4gaGFyZHdhcmUgYXJlIG5vdAorICogeWV0IGhhbmRsZWQgaGVyZS4KKyAqLworaW50IGNsa2RtX3JlYWRfd2tkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKQoreworCXN0cnVjdCBjbGtkbV9kZXAgKmNkOworCisJaWYgKCFjbGtkbTEgfHwgIWNsa2RtMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljZCA9IF9jbGtkbV9kZXBzX2xvb2t1cChjbGtkbTIsIGNsa2RtMS0+d2tkZXBfc3Jjcyk7CisJaWYgKElTX0VSUihjZCkpIHsKKwkJcHJfZGVidWcoImNsb2NrZG9tYWluOiBoYXJkd2FyZSBjYW5ub3Qgc2V0L2NsZWFyIHdha2UgdXAgb2YgIgorCQkJICIlcyB3aGVuICVzIHdha2VzIHVwXG4iLCBjbGtkbTEtPm5hbWUsIGNsa2RtMi0+bmFtZSk7CisJCXJldHVybiBQVFJfRVJSKGNkKTsKKwl9CisKKwkvKiBYWFggSXQncyBmYXN0ZXIgdG8gcmV0dXJuIHRoZSBhdG9taWMgd2tkZXBfdXNlY291bnQgKi8KKwlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQoY2xrZG0xLT5wd3JkbS5wdHItPnByY21fb2ZmcywgUE1fV0tERVAsCisJCQkJICAgICAgICgxIDw8IGNsa2RtMi0+ZGVwX2JpdCkpOworfQorCisvKioKKyAqIGNsa2RtX2NsZWFyX2FsbF93a2RlcHMgLSByZW1vdmUgYWxsIHdha2V1cCBkZXBlbmRlbmNpZXMgZnJvbSB0YXJnZXQgY2xrZG0KKyAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICogdG8gcmVtb3ZlIGFsbCB3YWtldXAgZGVwZW5kZW5jaWVzIGZyb20KKyAqCisgKiBSZW1vdmUgYWxsIGludGVyLWNsb2NrZG9tYWluIHdha2V1cCBkZXBlbmRlbmNpZXMgdGhhdCBjb3VsZCBjYXVzZQorICogQGNsa2RtIHRvIHdha2UuICBJbnRlbmRlZCB0byBiZSB1c2VkIGR1cmluZyBib290IHRvIGluaXRpYWxpemUgdGhlCisgKiBQUkNNIHRvIGEga25vd24gc3RhdGUsIGFmdGVyIGFsbCBjbG9ja2RvbWFpbnMgYXJlIHB1dCBpbnRvIHN3c3VwIGlkbGUKKyAqIGFuZCB3b2tlbiB1cC4gIFJldHVybnMgLUVJTlZBTCBpZiBAY2xrZG0gcG9pbnRlciBpcyBpbnZhbGlkLCBvcgorICogMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBjbGtkbV9jbGVhcl9hbGxfd2tkZXBzKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pCit7CisJc3RydWN0IGNsa2RtX2RlcCAqY2Q7CisJdTMyIG1hc2sgPSAwOworCisJaWYgKCFjbGtkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGNkID0gY2xrZG0tPndrZGVwX3NyY3M7IGNkICYmIGNkLT5jbGtkbV9uYW1lOyBjZCsrKSB7CisJCWlmICghb21hcF9jaGlwX2lzKGNkLT5vbWFwX2NoaXApKQorCQkJY29udGludWU7CisKKwkJLyogUFJNIGFjY2Vzc2VzIGFyZSBzbG93LCBzbyBtaW5pbWl6ZSB0aGVtICovCisJCW1hc2sgfD0gMSA8PCBjZC0+Y2xrZG0tPmRlcF9iaXQ7CisJCWF0b21pY19zZXQoJmNkLT53a2RlcF91c2Vjb3VudCwgMCk7CisJfQorCisJcHJtX2NsZWFyX21vZF9yZWdfYml0cyhtYXNrLCBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIFBNX1dLREVQKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNsa2RtX2FkZF9zbGVlcGRlcCAtIGFkZCBhIHNsZWVwIGRlcGVuZGVuY3kgZnJvbSBjbGtkbTIgdG8gY2xrZG0xCisgKiBAY2xrZG0xOiBwcmV2ZW50IHRoaXMgc3RydWN0IGNsb2NrZG9tYWluICogZnJvbSBzbGVlcGluZyAoZGVwZW5kZW50KQorICogQGNsa2RtMjogd2hlbiB0aGlzIHN0cnVjdCBjbG9ja2RvbWFpbiAqIGlzIGFjdGl2ZSAoc291cmNlKQorICoKKyAqIFByZXZlbnQgQGNsa2RtMSBmcm9tIGF1dG9tYXRpY2FsbHkgZ29pbmcgaW5hY3RpdmUgKGFuZCB0aGVuIHRvCisgKiByZXRlbnRpb24gb3Igb2ZmKSBpZiBAY2xrZG0yIGlzIGFjdGl2ZS4gIFJldHVybnMgLUVJTlZBTCBpZgorICogcHJlc2VudGVkIHdpdGggaW52YWxpZCBjbG9ja2RvbWFpbiBwb2ludGVycyBvciBjYWxsZWQgb24gYSBtYWNoaW5lCisgKiB0aGF0IGRvZXMgbm90IHN1cHBvcnQgc29mdHdhcmUtY29uZmlndXJhYmxlIGhhcmR3YXJlIHNsZWVwCisgKiBkZXBlbmRlbmNpZXMsIC1FTk9FTlQgaWYgdGhlIHNwZWNpZmllZCBkZXBlbmRlbmN5IGNhbm5vdCBiZSBzZXQgaW4KKyAqIGhhcmR3YXJlLCBvciAwIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IGNsa2RtX2FkZF9zbGVlcGRlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTIpCit7CisJc3RydWN0IGNsa2RtX2RlcCAqY2Q7CisKKwlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghY2xrZG0xIHx8ICFjbGtkbTIpCisJCXJldHVybiAtRUlOVkFMOworCisJY2QgPSBfY2xrZG1fZGVwc19sb29rdXAoY2xrZG0yLCBjbGtkbTEtPnNsZWVwZGVwX3NyY3MpOworCWlmIChJU19FUlIoY2QpKSB7CisJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogaGFyZHdhcmUgY2Fubm90IHNldC9jbGVhciBzbGVlcCAiCisJCQkgImRlcGVuZGVuY3kgYWZmZWN0aW5nICVzIGZyb20gJXNcbiIsIGNsa2RtMS0+bmFtZSwKKwkJCSBjbGtkbTItPm5hbWUpOworCQlyZXR1cm4gUFRSX0VSUihjZCk7CisJfQorCisJaWYgKGF0b21pY19pbmNfcmV0dXJuKCZjZC0+c2xlZXBkZXBfdXNlY291bnQpID09IDEpIHsKKwkJcHJfZGVidWcoImNsb2NrZG9tYWluOiB3aWxsIHByZXZlbnQgJXMgZnJvbSBzbGVlcGluZyBpZiAlcyAiCisJCQkgImlzIGFjdGl2ZVxuIiwgY2xrZG0xLT5uYW1lLCBjbGtkbTItPm5hbWUpOworCisJCWNtX3NldF9tb2RfcmVnX2JpdHMoKDEgPDwgY2xrZG0yLT5kZXBfYml0KSwKKwkJCQkgICAgY2xrZG0xLT5wd3JkbS5wdHItPnByY21fb2ZmcywKKwkJCQkgICAgT01BUDM0MzBfQ01fU0xFRVBERVApOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNsa2RtX2RlbF9zbGVlcGRlcCAtIHJlbW92ZSBhIHNsZWVwIGRlcGVuZGVuY3kgZnJvbSBjbGtkbTIgdG8gY2xrZG0xCisgKiBAY2xrZG0xOiBwcmV2ZW50IHRoaXMgc3RydWN0IGNsb2NrZG9tYWluICogZnJvbSBzbGVlcGluZyAoZGVwZW5kZW50KQorICogQGNsa2RtMjogd2hlbiB0aGlzIHN0cnVjdCBjbG9ja2RvbWFpbiAqIGlzIGFjdGl2ZSAoc291cmNlKQorICoKKyAqIEFsbG93IEBjbGtkbTEgdG8gYXV0b21hdGljYWxseSBnbyBpbmFjdGl2ZSAoYW5kIHRoZW4gdG8gcmV0ZW50aW9uIG9yCisgKiBvZmYpLCBpbmRlcGVuZGVudCBvZiB0aGUgYWN0aXZpdHkgc3RhdGUgb2YgQGNsa2RtMi4gIFJldHVybnMgLUVJTlZBTAorICogaWYgcHJlc2VudGVkIHdpdGggaW52YWxpZCBjbG9ja2RvbWFpbiBwb2ludGVycyBvciBjYWxsZWQgb24gYSBtYWNoaW5lCisgKiB0aGF0IGRvZXMgbm90IHN1cHBvcnQgc29mdHdhcmUtY29uZmlndXJhYmxlIGhhcmR3YXJlIHNsZWVwIGRlcGVuZGVuY2llcywKKyAqIC1FTk9FTlQgaWYgdGhlIHNwZWNpZmllZCBkZXBlbmRlbmN5IGNhbm5vdCBiZSBjbGVhcmVkIGluIGhhcmR3YXJlLCBvcgorICogMCB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBjbGtkbV9kZWxfc2xlZXBkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKQoreworCXN0cnVjdCBjbGtkbV9kZXAgKmNkOworCisJaWYgKCFjcHVfaXNfb21hcDM0eHgoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWNsa2RtMSB8fCAhY2xrZG0yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNkID0gX2Nsa2RtX2RlcHNfbG9va3VwKGNsa2RtMiwgY2xrZG0xLT5zbGVlcGRlcF9zcmNzKTsKKwlpZiAoSVNfRVJSKGNkKSkgeworCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgc2xlZXAgIgorCQkJICJkZXBlbmRlbmN5IGFmZmVjdGluZyAlcyBmcm9tICVzXG4iLCBjbGtkbTEtPm5hbWUsCisJCQkgY2xrZG0yLT5uYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIoY2QpOworCX0KKworCWlmIChhdG9taWNfZGVjX3JldHVybigmY2QtPnNsZWVwZGVwX3VzZWNvdW50KSA9PSAwKSB7CisJCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogd2lsbCBubyBsb25nZXIgcHJldmVudCAlcyBmcm9tICIKKwkJCSAic2xlZXBpbmcgaWYgJXMgaXMgYWN0aXZlXG4iLCBjbGtkbTEtPm5hbWUsCisJCQkgY2xrZG0yLT5uYW1lKTsKKworCQljbV9jbGVhcl9tb2RfcmVnX2JpdHMoKDEgPDwgY2xrZG0yLT5kZXBfYml0KSwKKwkJCQkgICAgICBjbGtkbTEtPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCSAgICAgIE9NQVAzNDMwX0NNX1NMRUVQREVQKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBjbGtkbV9yZWFkX3NsZWVwZGVwIC0gcmVhZCBzbGVlcCBkZXBlbmRlbmN5IHN0YXRlIGZyb20gY2xrZG0yIHRvIGNsa2RtMQorICogQGNsa2RtMTogcHJldmVudCB0aGlzIHN0cnVjdCBjbG9ja2RvbWFpbiAqIGZyb20gc2xlZXBpbmcgKGRlcGVuZGVudCkKKyAqIEBjbGtkbTI6IHdoZW4gdGhpcyBzdHJ1Y3QgY2xvY2tkb21haW4gKiBpcyBhY3RpdmUgKHNvdXJjZSkKKyAqCisgKiBSZXR1cm4gMSBpZiBhIGhhcmR3YXJlIHNsZWVwIGRlcGVuZGVuY3kgZXhpc3RzIHdoZXJlaW4gQGNsa2RtMSB3aWxsCisgKiBub3QgYmUgYWxsb3dlZCB0byBhdXRvbWF0aWNhbGx5IGdvIGluYWN0aXZlIGlmIEBjbGtkbTIgaXMgYWN0aXZlOworICogMCBpZiBAY2xrZG0xJ3MgYXV0b21hdGljIHBvd2VyIHN0YXRlIGluYWN0aXZpdHkgdHJhbnNpdGlvbiBpcyBpbmRlcGVuZGVudAorICogb2YgQGNsa2RtMidzOyAtRUlOVkFMIGlmIGVpdGhlciBjbG9ja2RvbWFpbiBwb2ludGVyIGlzIGludmFsaWQgb3IgY2FsbGVkCisgKiBvbiBhIG1hY2hpbmUgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHNvZnR3YXJlLWNvbmZpZ3VyYWJsZSBoYXJkd2FyZSBzbGVlcAorICogZGVwZW5kZW5jaWVzOyBvciAtRU5PRU5UIGlmIHRoZSBoYXJkd2FyZSBpcyBpbmNhcGFibGUuCisgKgorICogUkVWSVNJVDogQ3VycmVudGx5IHRoaXMgZnVuY3Rpb24gb25seSByZXByZXNlbnRzIHNvZnR3YXJlLWNvbnRyb2xsYWJsZQorICogc2xlZXAgZGVwZW5kZW5jaWVzLglTbGVlcCBkZXBlbmRlbmNpZXMgZml4ZWQgaW4gaGFyZHdhcmUgYXJlIG5vdAorICogeWV0IGhhbmRsZWQgaGVyZS4KKyAqLworaW50IGNsa2RtX3JlYWRfc2xlZXBkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKQoreworCXN0cnVjdCBjbGtkbV9kZXAgKmNkOworCisJaWYgKCFjcHVfaXNfb21hcDM0eHgoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoIWNsa2RtMSB8fCAhY2xrZG0yKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNkID0gX2Nsa2RtX2RlcHNfbG9va3VwKGNsa2RtMiwgY2xrZG0xLT5zbGVlcGRlcF9zcmNzKTsKKwlpZiAoSVNfRVJSKGNkKSkgeworCQlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgc2xlZXAgIgorCQkJICJkZXBlbmRlbmN5IGFmZmVjdGluZyAlcyBmcm9tICVzXG4iLCBjbGtkbTEtPm5hbWUsCisJCQkgY2xrZG0yLT5uYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIoY2QpOworCX0KKworCS8qIFhYWCBJdCdzIGZhc3RlciB0byByZXR1cm4gdGhlIGF0b21pYyBzbGVlcGRlcF91c2Vjb3VudCAqLworCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChjbGtkbTEtPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJCSAgICAgICBPTUFQMzQzMF9DTV9TTEVFUERFUCwKKwkJCQkgICAgICAgKDEgPDwgY2xrZG0yLT5kZXBfYml0KSk7Cit9CisKKy8qKgorICogY2xrZG1fY2xlYXJfYWxsX3NsZWVwZGVwcyAtIHJlbW92ZSBhbGwgc2xlZXAgZGVwZW5kZW5jaWVzIGZyb20gdGFyZ2V0IGNsa2RtCisgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqIHRvIHJlbW92ZSBhbGwgc2xlZXAgZGVwZW5kZW5jaWVzIGZyb20KKyAqCisgKiBSZW1vdmUgYWxsIGludGVyLWNsb2NrZG9tYWluIHNsZWVwIGRlcGVuZGVuY2llcyB0aGF0IGNvdWxkIHByZXZlbnQKKyAqIEBjbGtkbSBmcm9tIGlkbGluZy4gIEludGVuZGVkIHRvIGJlIHVzZWQgZHVyaW5nIGJvb3QgdG8gaW5pdGlhbGl6ZSB0aGUKKyAqIFBSQ00gdG8gYSBrbm93biBzdGF0ZSwgYWZ0ZXIgYWxsIGNsb2NrZG9tYWlucyBhcmUgcHV0IGludG8gc3dzdXAgaWRsZQorICogYW5kIHdva2VuIHVwLiAgUmV0dXJucyAtRUlOVkFMIGlmIEBjbGtkbSBwb2ludGVyIGlzIGludmFsaWQsIG9yCisgKiAwIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IGNsa2RtX2NsZWFyX2FsbF9zbGVlcGRlcHMoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkKK3sKKwlzdHJ1Y3QgY2xrZG1fZGVwICpjZDsKKwl1MzIgbWFzayA9IDA7CisKKwlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghY2xrZG0pCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChjZCA9IGNsa2RtLT5zbGVlcGRlcF9zcmNzOyBjZCAmJiBjZC0+Y2xrZG1fbmFtZTsgY2QrKykgeworCQlpZiAoIW9tYXBfY2hpcF9pcyhjZC0+b21hcF9jaGlwKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFBSTSBhY2Nlc3NlcyBhcmUgc2xvdywgc28gbWluaW1pemUgdGhlbSAqLworCQltYXNrIHw9IDEgPDwgY2QtPmNsa2RtLT5kZXBfYml0OworCQlhdG9taWNfc2V0KCZjZC0+c2xlZXBkZXBfdXNlY291bnQsIDApOworCX0KKworCXBybV9jbGVhcl9tb2RfcmVnX2JpdHMobWFzaywgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLAorCQkJICAgICAgIE9NQVAzNDMwX0NNX1NMRUVQREVQKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG9tYXAyX2Nsa2RtX2Nsa3RyY3RybF9yZWFkIC0gcmVhZCB0aGUgY2xrZG0ncyBjdXJyZW50IHN0YXRlIHRyYW5zaXRpb24gbW9kZQorICogQGNsa2RtOiBzdHJ1Y3QgY2xrZG0gKiBvZiBhIGNsb2NrZG9tYWluCisgKgorICogUmV0dXJuIHRoZSBjbG9ja2RvbWFpbiBAY2xrZG0gY3VycmVudCBzdGF0ZSB0cmFuc2l0aW9uIG1vZGUgZnJvbSB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgZG9tYWluIENNX0NMS1NUQ1RSTCByZWdpc3Rlci4JUmV0dXJucyAtRUlOVkFMIGlmIEBjbGtkbQogICogaXMgTlVMTCBvciB0aGUgY3VycmVudCBtb2RlIHVwb24gc3VjY2Vzcy4KICAqLwogc3RhdGljIGludCBvbWFwMl9jbGtkbV9jbGt0cmN0cmxfcmVhZChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQpAQCAtMzgxLDcgKzc3OCw3IEBACiAJaWYgKCFjbGtkbSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl2ID0gY21fcmVhZF9tb2RfcmVnKGNsa2RtLT5wd3JkbS5wdHItPnByY21fb2ZmcywgQ01fQ0xLU1RDVFJMKTsKKwl2ID0gX19yYXdfcmVhZGwoY2xrZG0tPmNsa3N0Y3RybF9yZWcpOwogCXYgJj0gY2xrZG0tPmNsa3RyY3RybF9tYXNrOwogCXYgPj49IF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzayk7CiAKQEAgLTM5Myw3ICs3OTAsNyBAQAogICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgogICoKICAqIEluc3RydWN0IHRoZSBDTSB0byBmb3JjZSBhIHNsZWVwIHRyYW5zaXRpb24gb24gdGhlIHNwZWNpZmllZAotICogY2xvY2tkb21haW4gJ2Nsa2RtJy4gIFJldHVybnMgLUVJTlZBTCBpZiBjbGsgaXMgTlVMTCBvciBpZgorICogY2xvY2tkb21haW4gQGNsa2RtLiAgUmV0dXJucyAtRUlOVkFMIGlmIEBjbGtkbSBpcyBOVUxMIG9yIGlmCiAgKiBjbG9ja2RvbWFpbiBkb2VzIG5vdCBzdXBwb3J0IHNvZnR3YXJlLWluaXRpYXRlZCBzbGVlcDsgMCB1cG9uCiAgKiBzdWNjZXNzLgogICovCkBAIC00MTMsMTUgKzgxMCwxNyBAQAogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewogCiAJCWNtX3NldF9tb2RfcmVnX2JpdHMoT01BUDI0WFhfRk9SQ0VTVEFURSwKLQkJCQkgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CisJCQkgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBPTUFQMl9QTV9QV1NUQ1RSTCk7CiAKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSB8IGNwdV9pc19vbWFwNDR4eCgpKSB7CiAKLQkJdTMyIHYgPSAoT01BUDM0WFhfQ0xLU1RDVFJMX0ZPUkNFX1NMRUVQIDw8CisJCXUzMiBiaXRzID0gKE9NQVAzNFhYX0NMS1NUQ1RSTF9GT1JDRV9TTEVFUCA8PAogCQkJIF9fZmZzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaykpOwogCi0JCWNtX3Jtd19tb2RfcmVnX2JpdHMoY2xrZG0tPmNsa3RyY3RybF9tYXNrLCB2LAotCQkJCSAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIENNX0NMS1NUQ1RSTCk7CisJCXUzMiB2ID0gX19yYXdfcmVhZGwoY2xrZG0tPmNsa3N0Y3RybF9yZWcpOworCQl2ICY9IH4oY2xrZG0tPmNsa3RyY3RybF9tYXNrKTsKKwkJdiB8PSBiaXRzOworCQlfX3Jhd193cml0ZWwodiwgY2xrZG0tPmNsa3N0Y3RybF9yZWcpOwogCiAJfSBlbHNlIHsKIAkJQlVHKCk7CkBAIC00MzUsNyArODM0LDcgQEAKICAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKICAqCiAgKiBJbnN0cnVjdCB0aGUgQ00gdG8gZm9yY2UgYSB3YWtldXAgdHJhbnNpdGlvbiBvbiB0aGUgc3BlY2lmaWVkCi0gKiBjbG9ja2RvbWFpbiAnY2xrZG0nLiAgUmV0dXJucyAtRUlOVkFMIGlmIGNsa2RtIGlzIE5VTEwgb3IgaWYgdGhlCisgKiBjbG9ja2RvbWFpbiBAY2xrZG0uICBSZXR1cm5zIC1FSU5WQUwgaWYgQGNsa2RtIGlzIE5VTEwgb3IgaWYgdGhlCiAgKiBjbG9ja2RvbWFpbiBkb2VzIG5vdCBzdXBwb3J0IHNvZnR3YXJlLWNvbnRyb2xsZWQgd2FrZXVwOyAwIHVwb24KICAqIHN1Y2Nlc3MuCiAgKi8KQEAgLTQ1NSwxNSArODU0LDE3IEBACiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAKIAkJY21fY2xlYXJfbW9kX3JlZ19iaXRzKE9NQVAyNFhYX0ZPUkNFU1RBVEUsCi0JCQkJICAgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CisJCQkgICAgICBjbGtkbS0+cHdyZG0ucHRyLT5wcmNtX29mZnMsIE9NQVAyX1BNX1BXU1RDVFJMKTsKIAotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpIHwgY3B1X2lzX29tYXA0NHh4KCkpIHsKIAotCQl1MzIgdiA9IChPTUFQMzRYWF9DTEtTVENUUkxfRk9SQ0VfV0FLRVVQIDw8CisJCXUzMiBiaXRzID0gKE9NQVAzNFhYX0NMS1NUQ1RSTF9GT1JDRV9XQUtFVVAgPDwKIAkJCSBfX2ZmcyhjbGtkbS0+Y2xrdHJjdHJsX21hc2spKTsKIAotCQljbV9ybXdfbW9kX3JlZ19iaXRzKGNsa2RtLT5jbGt0cmN0cmxfbWFzaywgdiwKLQkJCQkgICAgY2xrZG0tPnB3cmRtLnB0ci0+cHJjbV9vZmZzLCBDTV9DTEtTVENUUkwpOworCQl1MzIgdiA9IF9fcmF3X3JlYWRsKGNsa2RtLT5jbGtzdGN0cmxfcmVnKTsKKwkJdiAmPSB+KGNsa2RtLT5jbGt0cmN0cmxfbWFzayk7CisJCXYgfD0gYml0czsKKwkJX19yYXdfd3JpdGVsKHYsIGNsa2RtLT5jbGtzdGN0cmxfcmVnKTsKIAogCX0gZWxzZSB7CiAJCUJVRygpOwpAQCAtNDc2LDcgKzg3Nyw3IEBACiAgKiBvbWFwMl9jbGtkbV9hbGxvd19pZGxlIC0gZW5hYmxlIGh3c3VwIGlkbGUgdHJhbnNpdGlvbnMgZm9yIGNsa2RtCiAgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqCiAgKgotICogQWxsb3cgdGhlIGhhcmR3YXJlIHRvIGF1dG9tYXRpY2FsbHkgc3dpdGNoIHRoZSBjbG9ja2RvbWFpbiBpbnRvCisgKiBBbGxvdyB0aGUgaGFyZHdhcmUgdG8gYXV0b21hdGljYWxseSBzd2l0Y2ggdGhlIGNsb2NrZG9tYWluIEBjbGtkbSBpbnRvCiAgKiBhY3RpdmUgb3IgaWRsZSBzdGF0ZXMsIGFzIG5lZWRlZCBieSBkb3duc3RyZWFtIGNsb2Nrcy4gIElmIHRoZQogICogY2xvY2tkb21haW4gaGFzIGFueSBkb3duc3RyZWFtIGNsb2NrcyBlbmFibGVkIGluIHRoZSBjbG9jawogICogZnJhbWV3b3JrLCB3a2RlcC9zbGVlcGRlcCBhdXRvZGVwZW5kZW5jaWVzIGFyZSBhZGRlZDsgdGhpcyBpcyBzbwpAQCAtNDk2LDggKzg5NywxNyBAQAogCXByX2RlYnVnKCJjbG9ja2RvbWFpbjogZW5hYmxpbmcgYXV0b21hdGljIGlkbGUgdHJhbnNpdGlvbnMgZm9yICVzXG4iLAogCQkgY2xrZG0tPm5hbWUpOwogCi0JaWYgKGF0b21pY19yZWFkKCZjbGtkbS0+dXNlY291bnQpID4gMCkKLQkJX2Nsa2RtX2FkZF9hdXRvZGVwcyhjbGtkbSk7CisJLyoKKwkgKiBYWFggVGhpcyBzaG91bGQgYmUgcmVtb3ZlZCBvbmNlIFRJIGFkZHMgd2FrZXVwL3NsZWVwCisJICogZGVwZW5kZW5jeSBjb2RlIGFuZCBkYXRhIGZvciBPTUFQNC4KKwkgKi8KKwlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJV0FSTl9PTkNFKDEsICJjbG9ja2RvbWFpbjogT01BUDQgd2FrZXVwL3NsZWVwIGRlcGVuZGVuY3kgIgorCQkJICAic3VwcG9ydCBpcyBub3QgeWV0IGltcGxlbWVudGVkXG4iKTsKKwl9IGVsc2UgeworCQlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPiAwKQorCQkJX2Nsa2RtX2FkZF9hdXRvZGVwcyhjbGtkbSk7CisJfQogCiAJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMSk7CiAKQEAgLTUwOSw4ICs5MTksOCBAQAogICogQGNsa2RtOiBzdHJ1Y3QgY2xvY2tkb21haW4gKgogICoKICAqIFByZXZlbnQgdGhlIGhhcmR3YXJlIGZyb20gYXV0b21hdGljYWxseSBzd2l0Y2hpbmcgdGhlIGNsb2NrZG9tYWluCi0gKiBpbnRvIGluYWN0aXZlIG9yIGlkbGUgc3RhdGVzLiAgSWYgdGhlIGNsb2NrZG9tYWluIGhhcyBkb3duc3RyZWFtCi0gKiBjbG9ja3MgZW5hYmxlZCBpbiB0aGUgY2xvY2sgZnJhbWV3b3JrLCB3a2RlcC9zbGVlcGRlcAorICogQGNsa2RtIGludG8gaW5hY3RpdmUgb3IgaWRsZSBzdGF0ZXMuICBJZiB0aGUgY2xvY2tkb21haW4gaGFzCisgKiBkb3duc3RyZWFtIGNsb2NrcyBlbmFibGVkIGluIHRoZSBjbG9jayBmcmFtZXdvcmssIHdrZGVwL3NsZWVwZGVwCiAgKiBhdXRvZGVwZW5kZW5jaWVzIGFyZSByZW1vdmVkLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCiB2b2lkIG9tYXAyX2Nsa2RtX2RlbnlfaWRsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQpAQCAtNTI5LDggKzkzOSwxNyBAQAogCiAJX29tYXAyX2Nsa2RtX3NldF9od3N1cChjbGtkbSwgMCk7CiAKLQlpZiAoYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPiAwKQotCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKKwkvKgorCSAqIFhYWCBUaGlzIHNob3VsZCBiZSByZW1vdmVkIG9uY2UgVEkgYWRkcyB3YWtldXAvc2xlZXAKKwkgKiBkZXBlbmRlbmN5IGNvZGUgYW5kIGRhdGEgZm9yIE9NQVA0LgorCSAqLworCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgeworCQlXQVJOX09OQ0UoMSwgImNsb2NrZG9tYWluOiBPTUFQNCB3YWtldXAvc2xlZXAgZGVwZW5kZW5jeSAiCisJCQkgICJzdXBwb3J0IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWRcbiIpOworCX0gZWxzZSB7CisJCWlmIChhdG9taWNfcmVhZCgmY2xrZG0tPnVzZWNvdW50KSA+IDApCisJCQlfY2xrZG1fZGVsX2F1dG9kZXBzKGNsa2RtKTsKKwl9CiB9CiAKIApAQCAtNTQxLDE0ICs5NjAsMTQgQEAKICAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKICAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiB0aGUgZW5hYmxlZCBkb3duc3RyZWFtIGNsb2NrCiAgKgotICogSW5jcmVtZW50IHRoZSB1c2Vjb3VudCBvZiB0aGlzIGNsb2NrZG9tYWluICdjbGtkbScgYW5kIGVuc3VyZSB0aGF0Ci0gKiBpdCBpcyBhd2FrZS4gIEludGVuZGVkIHRvIGJlIGNhbGxlZCBieSBjbGtfZW5hYmxlKCkgY29kZS4gIElmIHRoZQotICogY2xvY2tkb21haW4gaXMgaW4gc29mdHdhcmUtc3VwZXJ2aXNlZCBpZGxlIG1vZGUsIGZvcmNlIHRoZQotICogY2xvY2tkb21haW4gdG8gd2FrZS4gIElmIHRoZSBjbG9ja2RvbWFpbiBpcyBpbiBoYXJkd2FyZS1zdXBlcnZpc2VkCi0gKiBpZGxlIG1vZGUsIGFkZCBjbGtkbS1wd3JkbSBhdXRvZGVwZW5kZW5jaWVzLCB0byBlbnN1cmUgdGhhdCBkZXZpY2VzCi0gKiBpbiB0aGUgY2xvY2tkb21haW4gY2FuIGJlIHJlYWQgZnJvbS93cml0dGVuIHRvIGJ5IG9uLWNoaXAgcHJvY2Vzc29ycy4KLSAqIFJldHVybnMgLUVJTlZBTCBpZiBwYXNzZWQgbnVsbCBwb2ludGVyczsgcmV0dXJucyAwIHVwb24gc3VjY2VzcyBvcgotICogaWYgdGhlIGNsb2NrZG9tYWluIGlzIGluIGh3c3VwIGlkbGUgbW9kZS4KKyAqIEluY3JlbWVudCB0aGUgdXNlY291bnQgb2YgdGhlIGNsb2NrZG9tYWluIEBjbGtkbSBhbmQgZW5zdXJlIHRoYXQgaXQKKyAqIGlzIGF3YWtlIGJlZm9yZSBAY2xrIGlzIGVuYWJsZWQuICBJbnRlbmRlZCB0byBiZSBjYWxsZWQgYnkKKyAqIGNsa19lbmFibGUoKSBjb2RlLiAgSWYgdGhlIGNsb2NrZG9tYWluIGlzIGluIHNvZnR3YXJlLXN1cGVydmlzZWQKKyAqIGlkbGUgbW9kZSwgZm9yY2UgdGhlIGNsb2NrZG9tYWluIHRvIHdha2UuICBJZiB0aGUgY2xvY2tkb21haW4gaXMgaW4KKyAqIGhhcmR3YXJlLXN1cGVydmlzZWQgaWRsZSBtb2RlLCBhZGQgY2xrZG0tcHdyZG0gYXV0b2RlcGVuZGVuY2llcywgdG8KKyAqIGVuc3VyZSB0aGF0IGRldmljZXMgaW4gdGhlIGNsb2NrZG9tYWluIGNhbiBiZSByZWFkIGZyb20vd3JpdHRlbiB0bworICogYnkgb24tY2hpcCBwcm9jZXNzb3JzLiAgUmV0dXJucyAtRUlOVkFMIGlmIHBhc3NlZCBudWxsIHBvaW50ZXJzOworICogcmV0dXJucyAwIHVwb24gc3VjY2VzcyBvciBpZiB0aGUgY2xvY2tkb21haW4gaXMgaW4gaHdzdXAgaWRsZSBtb2RlLgogICovCiBpbnQgb21hcDJfY2xrZG1fY2xrX2VuYWJsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCBzdHJ1Y3QgY2xrICpjbGspCiB7CkBAIC01NTksNyArOTc4LDcgQEAKIAkgKiBkb3duc3RyZWFtIGNsb2NrcyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzPwogCSAqLwogCi0JaWYgKCFjbGtkbSB8fCAhY2xrIHx8ICFjbGtkbS0+Y2xrdHJjdHJsX21hc2spCisJaWYgKCFjbGtkbSB8fCAhY2xrKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChhdG9taWNfaW5jX3JldHVybigmY2xrZG0tPnVzZWNvdW50KSA+IDEpCkBAIC01NzAsNiArOTg5LDkgQEAKIAlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGNsa2RtICVzOiBjbGsgJXMgbm93IGVuYWJsZWRcbiIsIGNsa2RtLT5uYW1lLAogCQkgY2xrLT5uYW1lKTsKIAorCWlmICghY2xrZG0tPmNsa3N0Y3RybF9yZWcpCisJCXJldHVybiAwOworCiAJdiA9IG9tYXAyX2Nsa2RtX2Nsa3RyY3RybF9yZWFkKGNsa2RtKTsKIAogCWlmICgoY3B1X2lzX29tYXAzNHh4KCkgJiYgdiA9PSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8pIHx8CkBAIC01OTMsMTMgKzEwMTUsMTQgQEAKICAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICoKICAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiB0aGUgZGlzYWJsZWQgZG93bnN0cmVhbSBjbG9jawogICoKLSAqIERlY3JlbWVudCB0aGUgdXNlY291bnQgb2YgdGhpcyBjbG9ja2RvbWFpbiAnY2xrZG0nLiBJbnRlbmRlZCB0byBiZQotICogY2FsbGVkIGJ5IGNsa19kaXNhYmxlKCkgY29kZS4gIElmIHRoZSB1c2Vjb3VudCBnb2VzIHRvIDAsIHB1dCB0aGUKLSAqIGNsb2NrZG9tYWluIHRvIHNsZWVwIChzb2Z0d2FyZS1zdXBlcnZpc2VkIG1vZGUpIG9yIHJlbW92ZSB0aGUKLSAqIGNsa2RtLXB3cmRtIGF1dG9kZXBlbmRlbmNpZXMgKGhhcmR3YXJlLXN1cGVydmlzZWQgbW9kZSkuICBSZXR1cm5zCi0gKiAtRUlOVkFMIGlmIHBhc3NlZCBudWxsIHBvaW50ZXJzOyAtRVJBTkdFIGlmIHRoZSBjbGtkbSB1c2Vjb3VudAotICogdW5kZXJmbG93cyBhbmQgZGVidWdnaW5nIGlzIGVuYWJsZWQ7IG9yIHJldHVybnMgMCB1cG9uIHN1Y2Nlc3Mgb3IKLSAqIGlmIHRoZSBjbG9ja2RvbWFpbiBpcyBpbiBod3N1cCBpZGxlIG1vZGUuCisgKiBEZWNyZW1lbnQgdGhlIHVzZWNvdW50IG9mIHRoaXMgY2xvY2tkb21haW4gQGNsa2RtIHdoZW4gQGNsayBpcworICogZGlzYWJsZWQuICBJbnRlbmRlZCB0byBiZSBjYWxsZWQgYnkgY2xrX2Rpc2FibGUoKSBjb2RlLiAgSWYgdGhlCisgKiBjbG9ja2RvbWFpbiB1c2Vjb3VudCBnb2VzIHRvIDAsIHB1dCB0aGUgY2xvY2tkb21haW4gdG8gc2xlZXAKKyAqIChzb2Z0d2FyZS1zdXBlcnZpc2VkIG1vZGUpIG9yIHJlbW92ZSB0aGUgY2xrZG0gYXV0b2RlcGVuZGVuY2llcworICogKGhhcmR3YXJlLXN1cGVydmlzZWQgbW9kZSkuICBSZXR1cm5zIC1FSU5WQUwgaWYgcGFzc2VkIG51bGwKKyAqIHBvaW50ZXJzOyAtRVJBTkdFIGlmIHRoZSBAY2xrZG0gdXNlY291bnQgdW5kZXJmbG93cyBhbmQgZGVidWdnaW5nCisgKiBpcyBlbmFibGVkOyBvciByZXR1cm5zIDAgdXBvbiBzdWNjZXNzIG9yIGlmIHRoZSBjbG9ja2RvbWFpbiBpcyBpbgorICogaHdzdXAgaWRsZSBtb2RlLgogICovCiBpbnQgb21hcDJfY2xrZG1fY2xrX2Rpc2FibGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwgc3RydWN0IGNsayAqY2xrKQogewpAQCAtNjEwLDcgKzEwMzMsNyBAQAogCSAqIGRvd25zdHJlYW0gY2xvY2tzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXM/CiAJICovCiAKLQlpZiAoIWNsa2RtIHx8ICFjbGsgfHwgIWNsa2RtLT5jbGt0cmN0cmxfbWFzaykKKwlpZiAoIWNsa2RtIHx8ICFjbGspCiAJCXJldHVybiAtRUlOVkFMOwogCiAjaWZkZWYgREVCVUcKQEAgLTYyOCw2ICsxMDUxLDkgQEAKIAlwcl9kZWJ1ZygiY2xvY2tkb21haW46IGNsa2RtICVzOiBjbGsgJXMgbm93IGRpc2FibGVkXG4iLCBjbGtkbS0+bmFtZSwKIAkJIGNsay0+bmFtZSk7CiAKKwlpZiAoIWNsa2RtLT5jbGtzdGN0cmxfcmVnKQorCQlyZXR1cm4gMDsKKwogCXYgPSBvbWFwMl9jbGtkbV9jbGt0cmN0cmxfcmVhZChjbGtkbSk7CiAKIAlpZiAoKGNwdV9pc19vbWFwMzR4eCgpICYmIHYgPT0gT01BUDM0WFhfQ0xLU1RDVFJMX0VOQUJMRV9BVVRPKSB8fApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnMuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zLmgKaW5kZXggYzRlZTA3Ni4uOGZjMTlmZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnMuaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrZG9tYWlucy5oCkBAIC0xLDE2ICsxLDQyMCBAQAogLyoKICAqIE9NQVAyLzMgY2xvY2tkb21haW5zCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKLSAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQorICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5IGFuZCBKb3VuaSBIw7ZnYW5kZXIKKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgY2xvY2tkb21haW5zIGFuZCBjbG9ja2RvbWFpbiB3YWtldXAvc2xlZXAKKyAqIGRlcGVuZGVuY2llcyBmb3IgdGhlIE9NQVAyLzMgY2hpcHMuICBTb21lIG5vdGVzOgorICoKKyAqIEEgdXNlZnVsIHZhbGlkYXRpb24gcnVsZSBmb3Igc3RydWN0IGNsb2NrZG9tYWluOiBBbnkgY2xvY2tkb21haW4KKyAqIHJlZmVyZW5jZWQgYnkgYSB3a2RlcF9zcmNzIG9yIHNsZWVwZGVwX3NyY3MgYXJyYXkgbXVzdCBoYXZlIGEKKyAqIGRlcF9iaXQgYXNzaWduZWQuICBTbyB3a2RlcF9zcmNzL3NsZWVwZGVwX3NyY3MgYXJlIHJlYWxseSBqdXN0CisgKiBzb2Z0d2FyZS1jb250cm9sbGFibGUgZGVwZW5kZW5jaWVzLiAgTm9uLXNvZnR3YXJlLWNvbnRyb2xsYWJsZQorICogZGVwZW5kZW5jaWVzIGRvIGV4aXN0LCBidXQgdGhleSBhcmUgbm90IGVuY29kZWQgYmVsb3cgKHlldCkuCisgKgorICogMjR4eCBkb2VzIG5vdCBzdXBwb3J0IHByb2dyYW1tYWJsZSBzbGVlcCBkZXBlbmRlbmNpZXMgKFNMRUVQREVQKQorICoKKyAqIFRoZSBvdmVybHktc3BlY2lmaWMgZGVwX2JpdCBuYW1lcyBhcmUgZHVlIHRvIGEgYml0IG5hbWUgY29sbGlzaW9uCisgKiB3aXRoIENNX0ZDTEtFTl97RFNQLElWQTJ9LiAgVGhlIERTUC9JVkEyIFBNX1dLREVQIGFuZCBDTV9TTEVFUERFUCBzaGlmdAorICogdmFsdWUgYXJlIHRoZSBzYW1lIGZvciBhbGwgcG93ZXJkb21haW5zOiAyCisgKgorICogWFhYIHNob3VsZCBkZXBfYml0IGJlIGEgbWFzaywgc28gd2UgY2FuIHRlc3QgdG8gc2VlIGlmIGl0IGlzIDAgYXMgYQorICogc2FuaXR5IGNoZWNrPworICogWFhYIGVuY29kZSBoYXJkd2FyZSBmaXhlZCB3YWtldXAgZGVwZW5kZW5jaWVzIC0tIGVzcC4gZm9yIDM0MzAgQ09SRQorICovCisKKy8qCisgKiBUby1EbyBMaXN0CisgKiAtPiBQb3J0IHRoZSBTbGVlcC9XYWtldXAgZGVwZW5kZW5jaWVzIGZvciB0aGUgZG9tYWlucworICogICAgZnJvbSB0aGUgUG93ZXIgZG9tYWluIGZyYW1ld29yawogICovCiAKICNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLRE9NQUlOU19ICiAjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9DTE9DS0RPTUFJTlNfSAogCiAjaW5jbHVkZSA8cGxhdC9jbG9ja2RvbWFpbi5oPgorI2luY2x1ZGUgImNtLmgiCisjaW5jbHVkZSAicHJtLmgiCisKKy8qCisgKiBDbG9ja2RvbWFpbiBkZXBlbmRlbmNpZXMgZm9yIHdrZGVwcy9zbGVlcGRlcHMKKyAqCisgKiBYWFggSGFyZHdhcmUgZGVwZW5kZW5jaWVzIChlLmcuLCBkZXBlbmRlbmNpZXMgdGhhdCBjYW5ub3QgYmUKKyAqIGNoYW5nZWQgaW4gc29mdHdhcmUpIGFyZSBub3QgaW5jbHVkZWQgaGVyZSB5ZXQsIGJ1dCBzaG91bGQgYmUuCisgKi8KKworLyogT01BUDIvMy1jb21tb24gd2FrZXVwIGRlcGVuZGVuY2llcyAqLworCisvKgorICogMjQyMC8yNDMwIFBNX1dLREVQX0dGWDogQ09SRSwgTVBVLCBXS1VQCisgKiAzNDMwRVMxIFBNX1dLREVQX0dGWDogYWRkcyBJVkEyLCByZW1vdmVzIENPUkUKKyAqIDM0MzBFUzIgUE1fV0tERVBfU0dYOiBhZGRzIElWQTIsIHJlbW92ZXMgQ09SRQorICogVGhlc2UgY2FuIHNoYXJlIGRhdGEgc2luY2UgdGhleSB3aWxsIG5ldmVyIGJlIHByZXNlbnQgc2ltdWx0YW5lb3VzbHkKKyAqIG9uIHRoZSBzYW1lIGRldmljZS4KKyAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgZ2Z4X3NneF93a2RlcHNbXSA9IHsKKwl7CisJCS5jbGtkbV9uYW1lID0gImNvcmVfbDNfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiY29yZV9sNF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJpdmEyX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIm1wdV9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwKKwkJCQkJICAgIENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCB8CisJCQkJCSAgICBDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisKKy8qIDI0WFgtc3BlY2lmaWMgcG9zc2libGUgZGVwZW5kZW5jaWVzICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgorCisvKiBXYWtldXAgZGVwZW5kZW5jeSBzb3VyY2UgYXJyYXlzICovCisKKy8qIDI0MjAvMjQzMCBQTV9XS0RFUF9EU1A6IENPUkUsIE1QVSwgV0tVUCAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgZHNwXzI0eHhfd2tkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2wzX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gImNvcmVfbDRfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworLyoKKyAqIDI0MjAgUE1fV0tERVBfTVBVOiBDT1JFLCBEU1AsIFdLVVAKKyAqIDI0MzAgYWRkcyBNRE0KKyAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgbXB1XzI0eHhfd2tkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2wzX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gImNvcmVfbDRfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiZHNwX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAibWRtX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKy8qCisgKiAyNDIwIFBNX1dLREVQX0NPUkU6IERTUCwgR0ZYLCBNUFUsIFdLVVAKKyAqIDI0MzAgYWRkcyBNRE0KKyAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgY29yZV8yNHh4X3drZGVwc1tdID0geworCXsKKwkJLmNsa2RtX25hbWUgPSAiZHNwX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gImdmeF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAid2t1cF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJtZG1fY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworI2VuZGlmCisKKworLyogMjQzMC1zcGVjaWZpYyBwb3NzaWJsZSB3YWtldXAgZGVwZW5kZW5jaWVzICovCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQzMAorCisvKiAyNDMwIFBNX1dLREVQX01ETTogQ09SRSwgTVBVLCBXS1VQICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBtZG1fMjQzMF93a2RlcHNbXSA9IHsKKwl7CisJCS5jbGtkbV9uYW1lID0gImNvcmVfbDNfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiY29yZV9sNF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAid2t1cF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQorCX0sCisJeyBOVUxMIH0sCit9OworCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDI0MzAgKi8KKworCisvKiBPTUFQMy1zcGVjaWZpYyBwb3NzaWJsZSBkZXBlbmRlbmNpZXMgKi8KKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCisKKy8qIDM0MzA6IFBNX1dLREVQX1BFUjogQ09SRSwgSVZBMiwgTVBVLCBXS1VQICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBwZXJfd2tkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2wzX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gImNvcmVfbDRfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiaXZhMl9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAid2t1cF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisvKiAzNDMwRVMyOiBQTV9XS0RFUF9VU0JIT1NUOiBDT1JFLCBJVkEyLCBNUFUsIFdLVVAgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIHVzYmhvc3Rfd2tkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2wzX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gImNvcmVfbDRfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiaXZhMl9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAid2t1cF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisvKiAzNDMwIFBNX1dLREVQX01QVTogQ09SRSwgSVZBMiwgRFNTLCBQRVIgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIG1wdV8zeHh4X3drZGVwc1tdID0geworCXsKKwkJLmNsa2RtX25hbWUgPSAiY29yZV9sM19jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2w0X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIml2YTJfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiZHNzX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gInBlcl9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisvKiAzNDMwIFBNX1dLREVQX0lWQTI6IENPUkUsIE1QVSwgV0tVUCwgRFNTLCBQRVIgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIGl2YTJfd2tkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJjb3JlX2wzX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gImNvcmVfbDRfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiZHNzX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gInBlcl9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisKKy8qIDM0MzAgUE1fV0tERVBfQ0FNOiBJVkEyLCBNUFUsIFdLVVAgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIGNhbV93a2RlcHNbXSA9IHsKKwl7CisJCS5jbGtkbV9uYW1lID0gIml2YTJfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAibXB1X2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7CisJCS5jbGtkbV9uYW1lID0gIndrdXBfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworLyogMzQzMCBQTV9XS0RFUF9EU1M6IElWQTIsIE1QVSwgV0tVUCAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgZHNzX3drZGVwc1tdID0geworCXsKKwkJLmNsa2RtX25hbWUgPSAiaXZhMl9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAid2t1cF9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisvKiAzNDMwOiBQTV9XS0RFUF9ORU9OOiBNUFUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrZG1fZGVwIG5lb25fd2tkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworCisvKiBTbGVlcCBkZXBlbmRlbmN5IHNvdXJjZSBhcnJheXMgZm9yIE9NQVAzLXNwZWNpZmljIGNsa2RtcyAqLworCisvKiAzNDMwOiBDTV9TTEVFUERFUF9EU1M6IE1QVSwgSVZBICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBkc3Nfc2xlZXBkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiaXZhMl9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisvKiAzNDMwOiBDTV9TTEVFUERFUF9QRVI6IE1QVSwgSVZBICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBwZXJfc2xlZXBkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsKKwkJLmNsa2RtX25hbWUgPSAiaXZhMl9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisvKiAzNDMwRVMyOiBDTV9TTEVFUERFUF9VU0JIT1NUOiBNUFUsIElWQSAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgdXNiaG9zdF9zbGVlcGRlcHNbXSA9IHsKKwl7CisJCS5jbGtkbV9uYW1lID0gIm1wdV9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeworCQkuY2xrZG1fbmFtZSA9ICJpdmEyX2Nsa2RtIiwKKwkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCisJfSwKKwl7IE5VTEwgfSwKK307CisKKy8qIDM0MzA6IENNX1NMRUVQREVQX0NBTTogTVBVICovCitzdGF0aWMgc3RydWN0IGNsa2RtX2RlcCBjYW1fc2xlZXBkZXBzW10gPSB7CisJeworCQkuY2xrZG1fbmFtZSA9ICJtcHVfY2xrZG0iLAorCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKKwl9LAorCXsgTlVMTCB9LAorfTsKKworLyoKKyAqIDM0MzBFUzE6IENNX1NMRUVQREVQX0dGWDogTVBVCisgKiAzNDMwRVMyOiBDTV9TTEVFUERFUF9TR1g6IE1QVQorICogVGhlc2UgY2FuIHNoYXJlIGRhdGEgc2luY2UgdGhleSB3aWxsIG5ldmVyIGJlIHByZXNlbnQgc2ltdWx0YW5lb3VzbHkKKyAqIG9uIHRoZSBzYW1lIGRldmljZS4KKyAqLworc3RhdGljIHN0cnVjdCBjbGtkbV9kZXAgZ2Z4X3NneF9zbGVlcGRlcHNbXSA9IHsKKwl7CisJCS5jbGtkbV9uYW1lID0gIm1wdV9jbGtkbSIsCisJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorCX0sCisJeyBOVUxMIH0sCit9OworCisjZW5kaWYgLyogQ09ORklHX0FSQ0hfT01BUDMgKi8KKwogCiAvKgogICogT01BUDIvMy1jb21tb24gY2xvY2tkb21haW5zCkBAIC0yMSwxMCArNDI1LDEzIEBACiAgKiBzeXNfY2xrb3V0L3N5c19jbGtvdXQyLgogICovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorCiAvKiBUaGlzIGlzIGFuIGltcGxpY2l0IGNsb2NrZG9tYWluIC0gaXQgaXMgbmV2ZXIgZGVmaW5lZCBhcyBzdWNoIGluIFRSTSAqLwogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiB3a3VwX2Nsa2RtID0gewogCS5uYW1lCQk9ICJ3a3VwX2Nsa2RtIiwKIAkucHdyZG0JCT0geyAubmFtZSA9ICJ3a3VwX3B3cmRtIiB9LAorCS5kZXBfYml0CT0gT01BUF9FTl9XS1VQX1NISUZULAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwgQ0hJUF9JU19PTUFQMzQzMCksCiB9OwogCkBAIC00MCw2ICs0NDcsOCBAQAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwgQ0hJUF9JU19PTUFQMzQzMCksCiB9OwogCisjZW5kaWYKKwogLyoKICAqIDI0MjAtb25seSBjbG9ja2RvbWFpbnMKICAqLwpAQCAtNTAsNiArNDU5LDggQEAKIAkubmFtZQkJPSAibXB1X2Nsa2RtIiwKIAkucHdyZG0JCT0geyAubmFtZSA9ICJtcHVfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKKwkuY2xrc3RjdHJsX3JlZyAgPSBPTUFQMjQyMF9DTV9SRUdBRERSKE1QVV9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLndrZGVwX3NyY3MJPSBtcHVfMjR4eF93a2RlcHMsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX01QVV9NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKSwKIH07CkBAIC01OCwxMSArNDY5LDY0IEBACiAJLm5hbWUJCT0gIml2YTFfY2xrZG0iLAogCS5wd3JkbQkJPSB7IC5uYW1lID0gImRzcF9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGtzdGN0cmxfcmVnICA9IE9NQVAyNDIwX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwKKwkJCQkJCSBPTUFQMl9DTV9DTEtTVENUUkwpLAorCS5kZXBfYml0CT0gT01BUDI0WFhfUE1fV0tERVBfTVBVX0VOX0RTUF9TSElGVCwKKwkud2tkZXBfc3Jjcwk9IGRzcF8yNHh4X3drZGVwcywKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjQyMF9BVVRPU1RBVEVfSVZBX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAogfTsKIAotI2VuZGlmICAvKiBDT05GSUdfQVJDSF9PTUFQMjQyMCAqLworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkc3BfMjQyMF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZHNwX2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJkc3BfcHdyZG0iIH0sCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrc3RjdHJsX3JlZyAgPSBPTUFQMjQyMF9DTV9SRUdBRERSKE9NQVAyNFhYX0RTUF9NT0QsCisJCQkJCQkgT01BUDJfQ01fQ0xLU1RDVFJMKSwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNQX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBnZnhfMjQyMF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZ2Z4X2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJnZnhfcHdyZG0iIH0sCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrc3RjdHJsX3JlZyAgPSBPTUFQMjQyMF9DTV9SRUdBRERSKEdGWF9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLndrZGVwX3NyY3MJPSBnZnhfc2d4X3drZGVwcywKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfR0ZYX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjb3JlX2wzXzI0MjBfY2xrZG0gPSB7CisJLm5hbWUJCT0gImNvcmVfbDNfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKKwkuY2xrc3RjdHJsX3JlZyAgPSBPTUFQMjQyMF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpLAorCS53a2RlcF9zcmNzCT0gY29yZV8yNHh4X3drZGVwcywKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfTDNfTUFTSywKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNvcmVfbDRfMjQyMF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiY29yZV9sNF9jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5jbGtzdGN0cmxfcmVnICA9IE9NQVAyNDIwX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLndrZGVwX3NyY3MJPSBjb3JlXzI0eHhfd2tkZXBzLAorCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9MNF9NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHNzXzI0MjBfY2xrZG0gPSB7CisJLm5hbWUJCT0gImRzc19jbGtkbSIsCisJLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5jbGtzdGN0cmxfcmVnICA9IE9NQVAyNDIwX0NNX1JFR0FERFIoQ09SRV9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0RTU19NQVNLLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKSwKK307CisKKyNlbmRpZiAgIC8qIENPTkZJR19BUkNIX09NQVAyNDIwICovCiAKIAogLyoKQEAgLTc1LDgwICs1MzksMTA1IEBACiAJLm5hbWUJCT0gIm1wdV9jbGtkbSIsCiAJLnB3cmRtCQk9IHsgLm5hbWUgPSAibXB1X3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3N0Y3RybF9yZWcgID0gT01BUDI0MzBfQ01fUkVHQUREUihNUFVfTU9ELAorCQkJCQkJIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLndrZGVwX3NyY3MJPSBtcHVfMjR4eF93a2RlcHMsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX01QVV9NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKIH07CiAKKy8qIEFub3RoZXIgY2FzZSBvZiBiaXQgbmFtZSBjb2xsaXNpb25zIGJldHdlZW4gc2V2ZXJhbCByZWdpc3RlcnM6IEVOX01ETSAqLwogc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBtZG1fY2xrZG0gPSB7CiAJLm5hbWUJCT0gIm1kbV9jbGtkbSIsCiAJLnB3cmRtCQk9IHsgLm5hbWUgPSAibWRtX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3N0Y3RybF9yZWcgID0gT01BUDI0MzBfQ01fUkVHQUREUihPTUFQMjQzMF9NRE1fTU9ELAorCQkJCQkJIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLmRlcF9iaXQJPSBPTUFQMjQzMF9QTV9XS0RFUF9NUFVfRU5fTURNX1NISUZULAorCS53a2RlcF9zcmNzCT0gbWRtXzI0MzBfd2tkZXBzLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNDMwX0FVVE9TVEFURV9NRE1fTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCksCiB9OwogCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRzcF8yNDMwX2Nsa2RtID0geworCS5uYW1lCQk9ICJkc3BfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImRzcF9wd3JkbSIgfSwKKwkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGtzdGN0cmxfcmVnICA9IE9NQVAyNDMwX0NNX1JFR0FERFIoT01BUDI0WFhfRFNQX01PRCwKKwkJCQkJCSBPTUFQMl9DTV9DTEtTVENUUkwpLAorCS5kZXBfYml0CT0gT01BUDI0WFhfUE1fV0tERVBfTVBVX0VOX0RTUF9TSElGVCwKKwkud2tkZXBfc3Jjcwk9IGRzcF8yNHh4X3drZGVwcywKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNQX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBnZnhfMjQzMF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZ2Z4X2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJnZnhfcHdyZG0iIH0sCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrc3RjdHJsX3JlZyAgPSBPTUFQMjQzMF9DTV9SRUdBRERSKEdGWF9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLndrZGVwX3NyY3MJPSBnZnhfc2d4X3drZGVwcywKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfR0ZYX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKworLyoKKyAqIFhYWCBhZGQgdXNlY291bnRpbmcgZm9yIGNsa2RtIGRlcGVuZGVuY2llcywgb3RoZXJ3aXNlIHRoZSBwcmVzZW5jZQorICogb2YgYSBzaW5nbGUgZGVwIGJpdCBmb3IgY29yZV9sM18yNHh4X2Nsa2RtIGFuZCBjb3JlX2w0XzI0eHhfY2xrZG0KKyAqIGNvdWxkIGNhdXNlIHRyb3VibGUKKyAqLworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjb3JlX2wzXzI0MzBfY2xrZG0gPSB7CisJLm5hbWUJCT0gImNvcmVfbDNfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKKwkuY2xrc3RjdHJsX3JlZyAgPSBPTUFQMjQzMF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpLAorCS5kZXBfYml0CT0gT01BUDI0WFhfRU5fQ09SRV9TSElGVCwKKwkud2tkZXBfc3Jjcwk9IGNvcmVfMjR4eF93a2RlcHMsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0wzX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKworLyoKKyAqIFhYWCBhZGQgdXNlY291bnRpbmcgZm9yIGNsa2RtIGRlcGVuZGVuY2llcywgb3RoZXJ3aXNlIHRoZSBwcmVzZW5jZQorICogb2YgYSBzaW5nbGUgZGVwIGJpdCBmb3IgY29yZV9sM18yNHh4X2Nsa2RtIGFuZCBjb3JlX2w0XzI0eHhfY2xrZG0KKyAqIGNvdWxkIGNhdXNlIHRyb3VibGUKKyAqLworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBjb3JlX2w0XzI0MzBfY2xrZG0gPSB7CisJLm5hbWUJCT0gImNvcmVfbDRfY2xrZG0iLAorCS5wd3JkbQkJPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCisJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUCwKKwkuY2xrc3RjdHJsX3JlZyAgPSBPTUFQMjQzMF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpLAorCS5kZXBfYml0CT0gT01BUDI0WFhfRU5fQ09SRV9TSElGVCwKKwkud2tkZXBfc3Jjcwk9IGNvcmVfMjR4eF93a2RlcHMsCisJLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0w0X01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkc3NfMjQzMF9jbGtkbSA9IHsKKwkubmFtZQkJPSAiZHNzX2Nsa2RtIiwKKwkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAorCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCisJLmNsa3N0Y3RybF9yZWcgID0gT01BUDI0MzBfQ01fUkVHQUREUihDT1JFX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKSwKKwkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMjRYWF9BVVRPU1RBVEVfRFNTX01BU0ssCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKwogI2VuZGlmICAgIC8qIENPTkZJR19BUkNIX09NQVAyNDMwICovCiAKIAogLyoKLSAqIDI0WFgtb25seSBjbG9ja2RvbWFpbnMKKyAqIE9NQVAzIGNsb2NrZG9tYWlucwogICovCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAKLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHNwX2Nsa2RtID0gewotCS5uYW1lCQk9ICJkc3BfY2xrZG0iLAotCS5wd3JkbQkJPSB7IC5uYW1lID0gImRzcF9wd3JkbSIgfSwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAotCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9EU1BfTUFTSywKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGdmeF8yNHh4X2Nsa2RtID0gewotCS5uYW1lCQk9ICJnZnhfY2xrZG0iLAotCS5wd3JkbQkJPSB7IC5uYW1lID0gImdmeF9wd3JkbSIgfSwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAotCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9HRlhfTUFTSywKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNvcmVfbDNfMjR4eF9jbGtkbSA9IHsKLQkubmFtZQkJPSAiY29yZV9sM19jbGtkbSIsCi0JLnB3cmRtCQk9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKLQkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQLAotCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAyNFhYX0FVVE9TVEFURV9MM19NQVNLLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sNF8yNHh4X2Nsa2RtID0gewotCS5uYW1lCQk9ICJjb3JlX2w0X2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAotCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCi0JLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0w0X01BU0ssCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBkc3NfMjR4eF9jbGtkbSA9IHsKLQkubmFtZQkJPSAiZHNzX2Nsa2RtIiwKLQkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAotCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCi0JLmNsa3RyY3RybF9tYXNrID0gT01BUDI0WFhfQVVUT1NUQVRFX0RTU19NQVNLLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKLX07Ci0KLSNlbmRpZiAgIC8qIENPTkZJR19BUkNIX09NQVAyNFhYICovCi0KLQotLyoKLSAqIDM0eHggY2xvY2tkb21haW5zCi0gKi8KLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCi0KLXN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1XzM0eHhfY2xrZG0gPSB7CitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG1wdV8zeHh4X2Nsa2RtID0gewogCS5uYW1lCQk9ICJtcHVfY2xrZG0iLAogCS5wd3JkbQkJPSB7IC5uYW1lID0gIm1wdV9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQIHwgQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCwKKwkuY2xrc3RjdHJsX3JlZwk9IE9NQVAzNFhYX0NNX1JFR0FERFIoTVBVX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKSwKKwkuZGVwX2JpdAk9IE9NQVAzNDMwX0VOX01QVV9TSElGVCwKKwkud2tkZXBfc3Jjcwk9IG1wdV8zeHh4X3drZGVwcywKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfTVBVX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAogfTsKQEAgLTE1Nyw2ICs2NDYsOSBAQAogCS5uYW1lCQk9ICJuZW9uX2Nsa2RtIiwKIAkucHdyZG0JCT0geyAubmFtZSA9ICJuZW9uX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3N0Y3RybF9yZWcJPSBPTUFQMzRYWF9DTV9SRUdBRERSKE9NQVAzNDMwX05FT05fTU9ELAorCQkJCQkJIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLndrZGVwX3NyY3MJPSBuZW9uX3drZGVwcywKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfTkVPTl9NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKIH07CkBAIC0xNjUsNiArNjU3LDEwIEBACiAJLm5hbWUJCT0gIml2YTJfY2xrZG0iLAogCS5wd3JkbQkJPSB7IC5uYW1lID0gIml2YTJfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrc3RjdHJsX3JlZwk9IE9NQVAzNFhYX0NNX1JFR0FERFIoT01BUDM0MzBfSVZBMl9NT0QsCisJCQkJCQkgT01BUDJfQ01fQ0xLU1RDVFJMKSwKKwkuZGVwX2JpdAk9IE9NQVAzNDMwX1BNX1dLREVQX01QVV9FTl9JVkEyX1NISUZULAorCS53a2RlcF9zcmNzCT0gaXZhMl93a2RlcHMsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX0lWQTJfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCiB9OwpAQCAtMTczLDYgKzY2OSw5IEBACiAJLm5hbWUJCT0gImdmeF9jbGtkbSIsCiAJLnB3cmRtCQk9IHsgLm5hbWUgPSAiZ2Z4X3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3N0Y3RybF9yZWcJPSBPTUFQMzRYWF9DTV9SRUdBRERSKEdGWF9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLndrZGVwX3NyY3MJPSBnZnhfc2d4X3drZGVwcywKKwkuc2xlZXBkZXBfc3Jjcwk9IGdmeF9zZ3hfc2xlZXBkZXBzLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwRVMxX0NMS1RSQ1RSTF9HRlhfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMEVTMSksCiB9OwpAQCAtMTgxLDYgKzY4MCwxMCBAQAogCS5uYW1lCQk9ICJzZ3hfY2xrZG0iLAogCS5wd3JkbQkJPSB7IC5uYW1lID0gInNneF9wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGtzdGN0cmxfcmVnCT0gT01BUDM0WFhfQ01fUkVHQUREUihPTUFQMzQzMEVTMl9TR1hfTU9ELAorCQkJCQkJIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLndrZGVwX3NyY3MJPSBnZnhfc2d4X3drZGVwcywKKwkuc2xlZXBkZXBfc3Jjcwk9IGdmeF9zZ3hfc2xlZXBkZXBzLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwRVMyX0NMS1RSQ1RSTF9TR1hfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9HRV9PTUFQMzQzMEVTMiksCiB9OwpAQCAtMTk2LDMwICs2OTksNTEgQEAKIAkubmFtZQkJPSAiZDJkX2Nsa2RtIiwKIAkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3N0Y3RybF9yZWcJPSBPTUFQMzRYWF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwRVMxX0NMS1RSQ1RSTF9EMkRfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNvcmVfbDNfMzR4eF9jbGtkbSA9IHsKKy8qCisgKiBYWFggYWRkIHVzZWNvdW50aW5nIGZvciBjbGtkbSBkZXBlbmRlbmNpZXMsIG90aGVyd2lzZSB0aGUgcHJlc2VuY2UKKyAqIG9mIGEgc2luZ2xlIGRlcCBiaXQgZm9yIGNvcmVfbDNfM3h4eF9jbGtkbSBhbmQgY29yZV9sNF8zeHh4X2Nsa2RtCisgKiBjb3VsZCBjYXVzZSB0cm91YmxlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sM18zeHh4X2Nsa2RtID0gewogCS5uYW1lCQk9ICJjb3JlX2wzX2Nsa2RtIiwKIAkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCisJLmNsa3N0Y3RybF9yZWcJPSBPTUFQMzRYWF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpLAorCS5kZXBfYml0CT0gT01BUDM0MzBfRU5fQ09SRV9TSElGVCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfTDNfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGNvcmVfbDRfMzR4eF9jbGtkbSA9IHsKKy8qCisgKiBYWFggYWRkIHVzZWNvdW50aW5nIGZvciBjbGtkbSBkZXBlbmRlbmNpZXMsIG90aGVyd2lzZSB0aGUgcHJlc2VuY2UKKyAqIG9mIGEgc2luZ2xlIGRlcCBiaXQgZm9yIGNvcmVfbDNfM3h4eF9jbGtkbSBhbmQgY29yZV9sNF8zeHh4X2Nsa2RtCisgKiBjb3VsZCBjYXVzZSB0cm91YmxlCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gY29yZV9sNF8zeHh4X2Nsa2RtID0gewogCS5uYW1lCQk9ICJjb3JlX2w0X2Nsa2RtIiwKIAkucHdyZG0JCT0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVAsCisJLmNsa3N0Y3RybF9yZWcJPSBPTUFQMzRYWF9DTV9SRUdBRERSKENPUkVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpLAorCS5kZXBfYml0CT0gT01BUDM0MzBfRU5fQ09SRV9TSElGVCwKIAkuY2xrdHJjdHJsX21hc2sgPSBPTUFQMzQzMF9DTEtUUkNUUkxfTDRfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRzc18zNHh4X2Nsa2RtID0geworLyogQW5vdGhlciBjYXNlIG9mIGJpdCBuYW1lIGNvbGxpc2lvbnMgYmV0d2VlbiBzZXZlcmFsIHJlZ2lzdGVyczogRU5fRFNTICovCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGRzc18zeHh4X2Nsa2RtID0gewogCS5uYW1lCQk9ICJkc3NfY2xrZG0iLAogCS5wd3JkbQkJPSB7IC5uYW1lID0gImRzc19wd3JkbSIgfSwKIAkuZmxhZ3MJCT0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5jbGtzdGN0cmxfcmVnCT0gT01BUDM0WFhfQ01fUkVHQUREUihPTUFQMzQzMF9EU1NfTU9ELAorCQkJCQkJIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLmRlcF9iaXQJPSBPTUFQMzQzMF9QTV9XS0RFUF9NUFVfRU5fRFNTX1NISUZULAorCS53a2RlcF9zcmNzCT0gZHNzX3drZGVwcywKKwkuc2xlZXBkZXBfc3Jjcwk9IGRzc19zbGVlcGRlcHMsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX0RTU19NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKIH07CkBAIC0yMjgsNiArNzUyLDEwIEBACiAJLm5hbWUJCT0gImNhbV9jbGtkbSIsCiAJLnB3cmRtCQk9IHsgLm5hbWUgPSAiY2FtX3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3N0Y3RybF9yZWcJPSBPTUFQMzRYWF9DTV9SRUdBRERSKE9NQVAzNDMwX0NBTV9NT0QsCisJCQkJCQkgT01BUDJfQ01fQ0xLU1RDVFJMKSwKKwkud2tkZXBfc3Jjcwk9IGNhbV93a2RlcHMsCisJLnNsZWVwZGVwX3NyY3MJPSBjYW1fc2xlZXBkZXBzLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9DQU1fTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCiB9OwpAQCAtMjM2LDYgKzc2NCwxMCBAQAogCS5uYW1lCQk9ICJ1c2Job3N0X2Nsa2RtIiwKIAkucHdyZG0JCT0geyAubmFtZSA9ICJ1c2Job3N0X3B3cmRtIiB9LAogCS5mbGFncwkJPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLmNsa3N0Y3RybF9yZWcJPSBPTUFQMzRYWF9DTV9SRUdBRERSKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELAorCQkJCQkJIE9NQVAyX0NNX0NMS1NUQ1RSTCksCisJLndrZGVwX3NyY3MJPSB1c2Job3N0X3drZGVwcywKKwkuc2xlZXBkZXBfc3Jjcwk9IHVzYmhvc3Rfc2xlZXBkZXBzLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwRVMyX0NMS1RSQ1RSTF9VU0JIT1NUX01BU0ssCiAJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfR0VfT01BUDM0MzBFUzIpLAogfTsKQEAgLTI0NCw2ICs3NzYsMTEgQEAKIAkubmFtZQkJPSAicGVyX2Nsa2RtIiwKIAkucHdyZG0JCT0geyAubmFtZSA9ICJwZXJfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkuY2xrc3RjdHJsX3JlZwk9IE9NQVAzNFhYX0NNX1JFR0FERFIoT01BUDM0MzBfUEVSX01PRCwKKwkJCQkJCSBPTUFQMl9DTV9DTEtTVENUUkwpLAorCS5kZXBfYml0CT0gT01BUDM0MzBfRU5fUEVSX1NISUZULAorCS53a2RlcF9zcmNzCT0gcGVyX3drZGVwcywKKwkuc2xlZXBkZXBfc3Jjcwk9IHBlcl9zbGVlcGRlcHMsCiAJLmNsa3RyY3RybF9tYXNrID0gT01BUDM0MzBfQ0xLVFJDVFJMX1BFUl9NQVNLLAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKIH07CkBAIC0yNTYsNiArNzkzLDggQEAKIAkubmFtZQkJPSAiZW11X2Nsa2RtIiwKIAkucHdyZG0JCT0geyAubmFtZSA9ICJlbXVfcHdyZG0iIH0sCiAJLmZsYWdzCQk9IC8qIENMS0RNX0NBTl9FTkFCTEVfQVVUTyB8ICAqL0NMS0RNX0NBTl9TV1NVUCwKKwkuY2xrc3RjdHJsX3JlZwk9IE9NQVAzNFhYX0NNX1JFR0FERFIoT01BUDM0MzBfRU1VX01PRCwKKwkJCQkJCSBPTUFQMl9DTV9DTEtTVENUUkwpLAogCS5jbGt0cmN0cmxfbWFzayA9IE9NQVAzNDMwX0NMS1RSQ1RSTF9FTVVfTUFTSywKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCiB9OwpAQCAtMjkwLDY0ICs4MjksNzAgQEAKIAkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9HRV9PTUFQMzQzMEVTMiksCiB9OwogCi0jZW5kaWYgICAvKiBDT05GSUdfQVJDSF9PTUFQMzRYWCAqLworI2VuZGlmICAgLyogQ09ORklHX0FSQ0hfT01BUDMgKi8KKworI2luY2x1ZGUgImNsb2NrZG9tYWluczQ0eHguaCIKIAogLyoKLSAqIENsb2NrZG9tYWluLXBvd2VyZG9tYWluIGh3c3VwIGRlcGVuZGVuY2llcyAoMzRYWCBvbmx5KQorICogQ2xvY2tkb21haW4gaHdzdXAgZGVwZW5kZW5jaWVzIChPTUFQMyBvbmx5KQogICovCiAKLXN0YXRpYyBzdHJ1Y3QgY2xrZG1fcHdyZG1fYXV0b2RlcCBjbGtkbV9wd3JkbV9hdXRvZGVwc1tdID0geworc3RhdGljIHN0cnVjdCBjbGtkbV9hdXRvZGVwIGNsa2RtX2F1dG9kZXBzW10gPSB7CiAJewotCQkucHdyZG0JICAgPSB7IC5uYW1lID0gIm1wdV9wd3JkbSIgfSwKKwkJLmNsa2RtCSAgID0geyAubmFtZSA9ICJtcHVfY2xrZG0iIH0sCiAJCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQogCX0sCiAJewotCQkucHdyZG0JICAgPSB7IC5uYW1lID0gIml2YTJfcHdyZG0iIH0sCisJCS5jbGtkbQkgICA9IHsgLm5hbWUgPSAiaXZhMl9jbGtkbSIgfSwKIAkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCiAJfSwKIAl7Ci0JCS5wd3JkbQkgICA9IHsgLm5hbWUgPSBOVUxMIH0sCisJCS5jbGtkbQkgICA9IHsgLm5hbWUgPSBOVUxMIH0sCiAJfQogfTsKIAogLyoKLSAqCisgKiBMaXN0IG9mIGNsb2NrZG9tYWluIHBvaW50ZXJzIHBlciBwbGF0Zm9ybQogICovCiAKIHN0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsb2NrZG9tYWluc19vbWFwW10gPSB7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogCSZ3a3VwX2Nsa2RtLAogCSZjbV9jbGtkbSwKIAkmcHJtX2Nsa2RtLAorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQyMAogCSZtcHVfMjQyMF9jbGtkbSwKIAkmaXZhMV8yNDIwX2Nsa2RtLAorCSZkc3BfMjQyMF9jbGtkbSwKKwkmZ2Z4XzI0MjBfY2xrZG0sCisJJmNvcmVfbDNfMjQyMF9jbGtkbSwKKwkmY29yZV9sNF8yNDIwX2Nsa2RtLAorCSZkc3NfMjQyMF9jbGtkbSwKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKIAkmbXB1XzI0MzBfY2xrZG0sCiAJJm1kbV9jbGtkbSwKKwkmZHNwXzI0MzBfY2xrZG0sCisJJmdmeF8yNDMwX2Nsa2RtLAorCSZjb3JlX2wzXzI0MzBfY2xrZG0sCisJJmNvcmVfbDRfMjQzMF9jbGtkbSwKKwkmZHNzXzI0MzBfY2xrZG0sCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCi0JJmRzcF9jbGtkbSwKLQkmZ2Z4XzI0eHhfY2xrZG0sCi0JJmNvcmVfbDNfMjR4eF9jbGtkbSwKLQkmY29yZV9sNF8yNHh4X2Nsa2RtLAotCSZkc3NfMjR4eF9jbGtkbSwKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDM0WFgKLQkmbXB1XzM0eHhfY2xrZG0sCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKKwkmbXB1XzN4eHhfY2xrZG0sCiAJJm5lb25fY2xrZG0sCiAJJml2YTJfY2xrZG0sCiAJJmdmeF8zNDMwZXMxX2Nsa2RtLAogCSZzZ3hfY2xrZG0sCiAJJmQyZF9jbGtkbSwKLQkmY29yZV9sM18zNHh4X2Nsa2RtLAotCSZjb3JlX2w0XzM0eHhfY2xrZG0sCi0JJmRzc18zNHh4X2Nsa2RtLAorCSZjb3JlX2wzXzN4eHhfY2xrZG0sCisJJmNvcmVfbDRfM3h4eF9jbGtkbSwKKwkmZHNzXzN4eHhfY2xrZG0sCiAJJmNhbV9jbGtkbSwKIAkmdXNiaG9zdF9jbGtkbSwKIAkmcGVyX2Nsa2RtLApAQCAtMzU5LDYgKzkwNCwzMyBAQAogCSZkcGxsNV9jbGtkbSwKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKKwkmbDRfY2VmdXNlXzQ0eHhfY2xrZG0sCisJJmw0X2NmZ180NHh4X2Nsa2RtLAorCSZ0ZXNsYV80NHh4X2Nsa2RtLAorCSZsM19nZnhfNDR4eF9jbGtkbSwKKwkmaXZhaGRfNDR4eF9jbGtkbSwKKwkmbDRfc2VjdXJlXzQ0eHhfY2xrZG0sCisJJmw0X3Blcl80NHh4X2Nsa2RtLAorCSZhYmVfNDR4eF9jbGtkbSwKKwkmbDNfaW5zdHJfNDR4eF9jbGtkbSwKKwkmbDNfaW5pdF80NHh4X2Nsa2RtLAorCSZtcHVzc180NHh4X2Nsa2RtLAorCSZtcHUwXzQ0eHhfY2xrZG0sCisJJm1wdTFfNDR4eF9jbGtkbSwKKwkmbDNfZW1pZl80NHh4X2Nsa2RtLAorCSZsNF9hb180NHh4X2Nsa2RtLAorCSZkdWNhdGlfNDR4eF9jbGtkbSwKKwkmbDNfMl80NHh4X2Nsa2RtLAorCSZsM18xXzQ0eHhfY2xrZG0sCisJJmwzX2QyZF80NHh4X2Nsa2RtLAorCSZpc3NfNDR4eF9jbGtkbSwKKwkmbDNfZHNzXzQ0eHhfY2xrZG0sCisJJmw0X3drdXBfNDR4eF9jbGtkbSwKKwkmZW11X3N5c180NHh4X2Nsa2RtLAorCSZsM19kbWFfNDR4eF9jbGtkbSwKKyNlbmRpZgorCiAJTlVMTCwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zNDR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9ja2RvbWFpbnM0NHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM4YWFlZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2tkb21haW5zNDR4eC5oCkBAIC0wLDAgKzEsMjUwIEBACisvKgorICogT01BUDQgQ2xvY2sgZG9tYWlucyBmcmFtZXdvcmsKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIEFiaGlqaXQgUGFnYXJlIChhYmhpaml0cGFnYXJlQHRpLmNvbSkKKyAqIEJlbm9pdCBDb3Vzc29uIChiLWNvdXNzb25AdGkuY29tKQorICoKKyAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHRoZSBPTUFQIGhhcmR3YXJlIGRhdGFiYXNlcy4KKyAqIFdlIHJlc3BlY3RmdWxseSBhc2sgdGhhdCBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGlzIGZpbGUgYmUgY29vcmRpbmF0ZWQKKyAqIHdpdGggdGhlIHB1YmxpYyBsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZyBtYWlsaW5nIGxpc3QgYW5kIHRoZQorICogYXV0aG9ycyBhYm92ZSB0byBlbnN1cmUgdGhhdCB0aGUgYXV0b2dlbmVyYXRpb24gc2NyaXB0cyBhcmUga2VwdAorICogdXAtdG8tZGF0ZSB3aXRoIHRoZSBmaWxlIGNvbnRlbnRzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworLyoKKyAqIFRvLURvIExpc3QKKyAqIC0+IFBvcHVsYXRlIHRoZSBTbGVlcC9XYWtldXAgZGVwZW5kZW5jaWVzIGZvciB0aGUgZG9tYWlucworICovCisKKyNpZm5kZWYgX19BUkNIX0FSTV9NQUNIX09NQVAyX0NMT0NLRE9NQUlOUzQ0WFhfSAorI2RlZmluZSBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfQ0xPQ0tET01BSU5TNDRYWF9ICisKKyNpbmNsdWRlIDxwbGF0L2Nsb2NrZG9tYWluLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGw0X2NlZnVzZV80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gImw0X2NlZnVzZV9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJjZWZ1c2VfcHdyZG0iIH0sCisJLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX0NFRlVTRV9DTEtTVENUUkwsCisJLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQIHwgQ0xLRE1fQ0FOX0hXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsNF9jZmdfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsNF9jZmdfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKKwkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fTDRDRkdfQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiB0ZXNsYV80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gInRlc2xhX2Nsa2RtIiwKKwkucHdyZG0JCSAgPSB7IC5uYW1lID0gInRlc2xhX3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9URVNMQV9DTEtTVENUUkwsCisJLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGwzX2dmeF80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gImwzX2dmeF9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJnZnhfcHdyZG0iIH0sCisJLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX0dGWF9DTEtTVENUUkwsCisJLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGl2YWhkXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAiaXZhaGRfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiaXZhaGRfcHdyZG0iIH0sCisJLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX0lWQUhEX0NMS1NUQ1RSTCwKKwkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAorCS5mbGFncwkJICA9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbDRfc2VjdXJlXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAibDRfc2VjdXJlX2Nsa2RtIiwKKwkucHdyZG0JCSAgPSB7IC5uYW1lID0gImw0cGVyX3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9MNFNFQ19DTEtTVENUUkwsCisJLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGw0X3Blcl80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gImw0X3Blcl9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJsNHBlcl9wd3JkbSIgfSwKKwkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fTDRQRVJfQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBhYmVfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJhYmVfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiYWJlX3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTTFfQUJFX0NMS1NUQ1RSTCwKKwkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAorCS5mbGFncwkJICA9IENMS0RNX0NBTl9IV1NVUF9TV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbDNfaW5zdHJfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsM19pbnN0cl9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9MM0lOU1RSX0NMS1NUQ1RSTCwKKwkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsM19pbml0XzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAibDNfaW5pdF9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJsM2luaXRfcHdyZG0iIH0sCisJLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX0wzSU5JVF9DTEtTVENUUkwsCisJLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIG1wdXNzXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAibXB1c3NfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAibXB1X3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9NUFVfQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCB8IENMS0RNX0NBTl9IV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1MF80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gIm1wdTBfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiY3B1MF9wd3JkbSIgfSwKKwkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fUERBX0NQVTBfQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCB8IENMS0RNX0NBTl9IV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbXB1MV80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gIm1wdTFfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiY3B1MV9wd3JkbSIgfSwKKwkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fUERBX0NQVTFfQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCB8IENMS0RNX0NBTl9IV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbDNfZW1pZl80NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gImwzX2VtaWZfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKKwkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fTUVNSUZfQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCB8IENMS0RNX0NBTl9IV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbDRfYW9fNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsNF9hb19jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJhbHdheXNfb25fY29yZV9wd3JkbSIgfSwKKwkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fQUxXT05fQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0ZPUkNFX1dBS0VVUCB8IENMS0RNX0NBTl9IV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZHVjYXRpXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAiZHVjYXRpX2Nsa2RtIiwKKwkucHdyZG0JCSAgPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCisJLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX0RVQ0FUSV9DTEtTVENUUkwsCisJLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fSFdTVVBfU1dTVVAsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrZG9tYWluIGwzXzJfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsM18yX2Nsa2RtIiwKKwkucHdyZG0JCSAgPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCisJLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX0wzXzJfQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsM18xXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAibDNfMV9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJjb3JlX3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9MM18xX0NMS1NUQ1RSTCwKKwkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAorCS5mbGFncwkJICA9IENMS0RNX0NBTl9IV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gbDNfZDJkXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAibDNfZDJkX2Nsa2RtIiwKKwkucHdyZG0JCSAgPSB7IC5uYW1lID0gImNvcmVfcHdyZG0iIH0sCisJLmNsa3N0Y3RybF9yZWcJICA9IE9NQVA0NDMwX0NNX0QyRF9DTEtTVENUUkwsCisJLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQIHwgQ0xLRE1fQ0FOX0hXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBpc3NfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJpc3NfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiY2FtX3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9DQU1fQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsM19kc3NfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsM19kc3NfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiZHNzX3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9EU1NfQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQX1NXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsNF93a3VwXzQ0eHhfY2xrZG0gPSB7CisJLm5hbWUJCSAgPSAibDRfd2t1cF9jbGtkbSIsCisJLnB3cmRtCQkgID0geyAubmFtZSA9ICJ3a3VwX3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9XS1VQX0NMS1NUQ1RSTCwKKwkuY2xrdHJjdHJsX21hc2sJICA9IE9NQVA0NDMwX0NMS1RSQ1RSTF9NQVNLLAorCS5mbGFncwkJICA9IENMS0RNX0NBTl9IV1NVUCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gZW11X3N5c180NHh4X2Nsa2RtID0geworCS5uYW1lCQkgID0gImVtdV9zeXNfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiZW11X3B3cmRtIiB9LAorCS5jbGtzdGN0cmxfcmVnCSAgPSBPTUFQNDQzMF9DTV9FTVVfQ0xLU1RDVFJMLAorCS5jbGt0cmN0cmxfbWFzawkgID0gT01BUDQ0MzBfQ0xLVFJDVFJMX01BU0ssCisJLmZsYWdzCQkgID0gQ0xLRE1fQ0FOX0hXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiBsM19kbWFfNDR4eF9jbGtkbSA9IHsKKwkubmFtZQkJICA9ICJsM19kbWFfY2xrZG0iLAorCS5wd3JkbQkJICA9IHsgLm5hbWUgPSAiY29yZV9wd3JkbSIgfSwKKwkuY2xrc3RjdHJsX3JlZwkgID0gT01BUDQ0MzBfQ01fU0RNQV9DTEtTVENUUkwsCisJLmNsa3RyY3RybF9tYXNrCSAgPSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSywKKwkuZmxhZ3MJCSAgPSBDTEtETV9DQU5fRk9SQ0VfV0FLRVVQIHwgQ0xLRE1fQ0FOX0hXU1VQLAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorfTsKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTM0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy0zNHh4LmgKaW5kZXggNjkyM2RlYi4uYTNhM2NhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTM0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMzR4eC5oCkBAIC01NSw3ICs1NSw3IEBACiAvKiBCaXRzIHNwZWNpZmljIHRvIGVhY2ggcmVnaXN0ZXIgKi8KIAogLyogQ01fRkNMS0VOX0lWQTIgKi8KLSNkZWZpbmUgT01BUDM0MzBfQ01fRkNMS0VOX0lWQTJfRU5fSVZBMgkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVAzNDMwX0NNX0ZDTEtFTl9JVkEyX0VOX0lWQTJfTUFTSwkJKDEgPDwgMCkKICNkZWZpbmUgT01BUDM0MzBfQ01fRkNMS0VOX0lWQTJfRU5fSVZBMl9TSElGVAkJMAogCiAvKiBDTV9DTEtFTl9QTExfSVZBMiAqLwpAQCAtMTY4LDYgKzE2OCwxMiBAQAogI2RlZmluZSBPTUFQMzQzMF9FTl9TRFJDCQkJCSgxIDw8IDEpCiAjZGVmaW5lIE9NQVAzNDMwX0VOX1NEUkNfU0hJRlQJCQkJMQogCisvKiBBTTM1WFggc3BlY2lmaWMgQ01fSUNMS0VOMV9DT1JFIGJpdHMgKi8KKyNkZWZpbmUgQU0zNVhYX0VOX0lQU1NfTUFTSwkJCQkoMSA8PCA0KQorI2RlZmluZSBBTTM1WFhfRU5fSVBTU19TSElGVAkJCQk0CisjZGVmaW5lIEFNMzVYWF9FTl9VQVJUNF9NQVNLCQkJKDEgPDwgMjMpCisjZGVmaW5lIEFNMzVYWF9FTl9VQVJUNF9TSElGVAkJCQkyMworCiAvKiBDTV9JQ0xLRU4yX0NPUkUgKi8KICNkZWZpbmUgT01BUDM0MzBfRU5fUEtBCQkJCQkoMSA8PCA0KQogI2RlZmluZSBPTUFQMzQzMF9FTl9QS0FfU0hJRlQJCQkJNApAQCAtMjIwLDYgKzIyNiwxMCBAQAogI2RlZmluZSBPTUFQMzQzMF9TVF9TU0lfU1REQllfU0hJRlQJCQkwCiAjZGVmaW5lIE9NQVAzNDMwX1NUX1NTSV9TVERCWV9NQVNLCQkJKDEgPDwgMCkKIAorLyogQU0zNXh4IHNwZWNpZmljIENNX0lETEVTVDFfQ09SRSBiaXRzICovCisjZGVmaW5lIEFNMzVYWF9TVF9JUFNTX1NISUZUCQkJCTUKKyNkZWZpbmUgQU0zNVhYX1NUX0lQU1NfTUFTSyAJCQkJKDEgPDwgNSkKKwogLyogQ01fSURMRVNUMl9DT1JFICovCiAjZGVmaW5lIE9NQVAzNDMwX1NUX1BLQV9TSElGVAkJCQk0CiAjZGVmaW5lIE9NQVAzNDMwX1NUX1BLQV9NQVNLCQkJCSgxIDw8IDQpCkBAIC0zMzYsNiArMzQ2LDggQEAKICNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX0w0X01BU0sJCQkJKDB4MyA8PCAyKQogI2RlZmluZSBPTUFQMzQzMF9DTEtTRUxfTDNfU0hJRlQJCQkwCiAjZGVmaW5lIE9NQVAzNDMwX0NMS1NFTF9MM19NQVNLCQkJCSgweDMgPDwgMCkKKyNkZWZpbmUgT01BUDM2MzBfQ0xLU0VMXzk2TV9TSElGVAkJCTEyCisjZGVmaW5lIE9NQVAzNjMwX0NMS1NFTF85Nk1fTUFTSwkJCSgweDMgPDwgMTIpCiAKIC8qIENNX0NMS1NUQ1RSTF9DT1JFICovCiAjZGVmaW5lIE9NQVAzNDMwRVMxX0NMS1RSQ1RSTF9EMkRfU0hJRlQJCQk0CkBAIC0zNzksNiArMzkxLDEwIEBACiAjZGVmaW5lIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTl9TR1hfRU5fU0dYX1NISUZUCQkxCiAjZGVmaW5lIE9NQVAzNDMwRVMyX0NNX0ZDTEtFTl9TR1hfRU5fU0dYX01BU0sJCSgxIDw8IDEpCiAKKy8qIENNX0lETEVTVF9TR1ggKi8KKyNkZWZpbmUgT01BUDM0MzBFUzJfU1RfU0dYX1NISUZUCQkJMQorI2RlZmluZSBPTUFQMzQzMEVTMl9TVF9TR1hfTUFTSwkJCQkoMSA8PCAxKQorCiAvKiBDTV9JQ0xLRU5fU0dYICovCiAjZGVmaW5lIE9NQVAzNDMwRVMyX0NNX0lDTEtFTl9TR1hfRU5fU0dYX1NISUZUCQkwCiAjZGVmaW5lIE9NQVAzNDMwRVMyX0NNX0lDTEtFTl9TR1hfRU5fU0dYX01BU0sJCSgxIDw8IDApCkBAIC01MTcsMTIgKzUzMywxOCBAQAogLyogQ01fQ0xLU0VMMl9QTEwgKi8KICNkZWZpbmUgT01BUDM0MzBfUEVSSVBIX0RQTExfTVVMVF9TSElGVAkJCTgKICNkZWZpbmUgT01BUDM0MzBfUEVSSVBIX0RQTExfTVVMVF9NQVNLCQkJKDB4N2ZmIDw8IDgpCisjZGVmaW5lIE9NQVAzNjMwX1BFUklQSF9EUExMX01VTFRfTUFTSwkJCSgweGZmZiA8PCA4KQogI2RlZmluZSBPTUFQMzQzMF9QRVJJUEhfRFBMTF9ESVZfU0hJRlQJCQkwCiAjZGVmaW5lIE9NQVAzNDMwX1BFUklQSF9EUExMX0RJVl9NQVNLCQkJKDB4N2YgPDwgMCkKKyNkZWZpbmUgT01BUDM2MzBfUEVSSVBIX0RQTExfRENPX1NFTF9TSElGVAkJMjEKKyNkZWZpbmUgT01BUDM2MzBfUEVSSVBIX0RQTExfRENPX1NFTF9NQVNLCQkoMHg3IDw8IDIxKQorI2RlZmluZSBPTUFQMzYzMF9QRVJJUEhfRFBMTF9TRF9ESVZfU0hJRlQJCTI0CisjZGVmaW5lIE9NQVAzNjMwX1BFUklQSF9EUExMX1NEX0RJVl9NQVNLCQkoMHhmZiA8PCAyNCkKIAogLyogQ01fQ0xLU0VMM19QTEwgKi8KICNkZWZpbmUgT01BUDM0MzBfRElWXzk2TV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVAzNDMwX0RJVl85Nk1fTUFTSwkJCQkoMHgxZiA8PCAwKQorI2RlZmluZSBPTUFQMzYzMF9ESVZfOTZNX01BU0sJCQkJKDB4M2YgPDwgMCkKIAogLyogQ01fQ0xLU0VMNF9QTEwgKi8KICNkZWZpbmUgT01BUDM0MzBFUzJfUEVSSVBIMl9EUExMX01VTFRfU0hJRlQJCTgKQEAgLTU2OSw4ICs1OTEsMTAgQEAKIC8qIENNX0NMS1NFTF9EU1MgKi8KICNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX1RWX1NISUZUCQkJOAogI2RlZmluZSBPTUFQMzQzMF9DTEtTRUxfVFZfTUFTSwkJCQkoMHgxZiA8PCA4KQorI2RlZmluZSBPTUFQMzYzMF9DTEtTRUxfVFZfTUFTSwkJCQkoMHgzZiA8PCA4KQogI2RlZmluZSBPTUFQMzQzMF9DTEtTRUxfRFNTMV9TSElGVAkJCTAKICNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX0RTUzFfTUFTSwkJCSgweDFmIDw8IDApCisjZGVmaW5lIE9NQVAzNjMwX0NMS1NFTF9EU1MxX01BU0sJCQkoMHgzZiA8PCAwKQogCiAvKiBDTV9TTEVFUERFUF9EU1Mgc3BlY2lmaWMgYml0cyAqLwogCkBAIC01OTgsNiArNjIyLDcgQEAKIC8qIENNX0NMS1NFTF9DQU0gKi8KICNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX0NBTV9TSElGVAkJCTAKICNkZWZpbmUgT01BUDM0MzBfQ0xLU0VMX0NBTV9NQVNLCQkJKDB4MWYgPDwgMCkKKyNkZWZpbmUgT01BUDM2MzBfQ0xLU0VMX0NBTV9NQVNLCQkJKDB4M2YgPDwgMCkKIAogLyogQ01fU0xFRVBERVBfQ0FNIHNwZWNpZmljIGJpdHMgKi8KIApAQCAtNjkzLDYgKzcxOCw3IEBACiAvKiBDTV9DTEtTRUwxX0VNVSAqLwogI2RlZmluZSBPTUFQMzQzMF9ESVZfRFBMTDRfU0hJRlQJCQkyNAogI2RlZmluZSBPTUFQMzQzMF9ESVZfRFBMTDRfTUFTSwkJCQkoMHgxZiA8PCAyNCkKKyNkZWZpbmUgT01BUDM2MzBfRElWX0RQTEw0X01BU0sJCQkJKDB4M2YgPDwgMjQpCiAjZGVmaW5lIE9NQVAzNDMwX0RJVl9EUExMM19TSElGVAkJCTE2CiAjZGVmaW5lIE9NQVAzNDMwX0RJVl9EUExMM19NQVNLCQkJCSgweDFmIDw8IDE2KQogI2RlZmluZSBPTUFQMzQzMF9DTEtTRUxfVFJBQ0VDTEtfU0hJRlQJCQkxMQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTQ0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY20tcmVnYml0cy00NHh4LmgKaW5kZXggMGU2N2Y3NS4uYWM4NDU4ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS1yZWdiaXRzLTQ0eHguaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtNDR4eC5oCkBAIC0yNiw3ICsyNiw3IEBACiAKIAogLyogVXNlZCBieSBDTV9MM18xX0RZTkFNSUNERVAsIENNX01QVV9EWU5BTUlDREVQLCBDTV9URVNMQV9EWU5BTUlDREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX0FCRV9EWU5ERVBfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfQUJFX0RZTkRFUF9TSElGVAkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX0FCRV9EWU5ERVBfTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQogCiAvKgpAQCAtMzQsMTUgKzM0LDE1IEBACiAgKiBDTV9MM0lOSVRfU1RBVElDREVQLCBDTV9TRE1BX1NUQVRJQ0RFUF9SRVNUT1JFLCBDTV9NUFVfU1RBVElDREVQLAogICogQ01fVEVTTEFfU1RBVElDREVQCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQUJFX1NUQVRERVBfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfQUJFX1NUQVRERVBfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9BQkVfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qIFVzZWQgYnkgQ01fTDRDRkdfRFlOQU1JQ0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9BTFdPTkNPUkVfRFlOREVQX1NISUZUCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9BTFdPTkNPUkVfRFlOREVQX1NISUZUCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX0FMV09OQ09SRV9EWU5ERVBfTUFTSwkJCQlCSVRGSUVMRCgxNiwgMTYpCiAKIC8qIFVzZWQgYnkgQ01fRFVDQVRJX1NUQVRJQ0RFUCwgQ01fTVBVX1NUQVRJQ0RFUCwgQ01fVEVTTEFfU1RBVElDREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX0FMV09OQ09SRV9TVEFUREVQX1NISUZUCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX0FMV09OQ09SRV9TVEFUREVQX1NISUZUCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfQUxXT05DT1JFX1NUQVRERVBfTUFTSwkJCQlCSVRGSUVMRCgxNiwgMTYpCiAKIC8qCkBAIC01MCwzNzEgKzUwLDM3MSBAQAogICogQ01fQVVUT0lETEVfRFBMTF9DT1JFX1JFU1RPUkUsIENNX0FVVE9JRExFX0RQTExfQUJFLCBDTV9BVVRPSURMRV9EUExMX0NPUkUsCiAgKiBDTV9BVVRPSURMRV9EUExMX0REUlBIWSwgQ01fQVVUT0lETEVfRFBMTF9JVkEsIENNX0FVVE9JRExFX0RQTExfTVBVCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQVVUT19EUExMX01PREVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfQVVUT19EUExMX01PREVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9BVVRPX0RQTExfTU9ERV9NQVNLCQkJCUJJVEZJRUxEKDAsIDIpCiAKIC8qIFVzZWQgYnkgQ01fTDRDRkdfRFlOQU1JQ0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9DRUZVU0VfRFlOREVQX1NISUZUCQkJCSgxIDw8IDE3KQorI2RlZmluZSBPTUFQNDQzMF9DRUZVU0VfRFlOREVQX1NISUZUCQkJCTE3CiAjZGVmaW5lIE9NQVA0NDMwX0NFRlVTRV9EWU5ERVBfTUFTSwkJCQlCSVRGSUVMRCgxNywgMTcpCiAKIC8qIFVzZWQgYnkgQ01fRFVDQVRJX1NUQVRJQ0RFUCwgQ01fTVBVX1NUQVRJQ0RFUCwgQ01fVEVTTEFfU1RBVElDREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX0NFRlVTRV9TVEFUREVQX1NISUZUCQkJCSgxIDw8IDE3KQorI2RlZmluZSBPTUFQNDQzMF9DRUZVU0VfU1RBVERFUF9TSElGVAkJCQkxNwogI2RlZmluZSBPTUFQNDQzMF9DRUZVU0VfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDE3LCAxNykKIAogLyogVXNlZCBieSBDTTFfQUJFX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9BQkVfMjRNX0dGQ0xLX1NISUZUCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQUJFXzI0TV9HRkNMS19TSElGVAkJMTMKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQUJFXzI0TV9HRkNMS19NQVNLCQkJQklURklFTEQoMTMsIDEzKQogCiAvKiBVc2VkIGJ5IENNMV9BQkVfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FCRV9BTFdPTl8zMktfQ0xLX1NISUZUCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQUJFX0FMV09OXzMyS19DTEtfU0hJRlQJCTEyCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FCRV9BTFdPTl8zMktfQ0xLX01BU0sJCUJJVEZJRUxEKDEyLCAxMikKIAogLyogVXNlZCBieSBDTV9XS1VQX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9BQkVfTFBfQ0xLX1NISUZUCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQUJFX0xQX0NMS19TSElGVAkJCTkKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQUJFX0xQX0NMS19NQVNLCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBDTTFfQUJFX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9BQkVfU1lTQ0xLX1NISUZUCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FCRV9TWVNDTEtfU0hJRlQJCQkxMQogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9BQkVfU1lTQ0xLX01BU0sJCQlCSVRGSUVMRCgxMSwgMTEpCiAKIC8qIFVzZWQgYnkgQ00xX0FCRV9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQUJFX1gyX0NMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FCRV9YMl9DTEtfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0FCRV9YMl9DTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fTUVNSUZfQ0xLU1RDVFJMLCBDTV9NRU1JRl9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9BU1lOQ19ETExfQ0xLX1NISUZUCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQVNZTkNfRExMX0NMS19TSElGVAkJMTEKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQVNZTkNfRExMX0NMS19NQVNLCQkJQklURklFTEQoMTEsIDExKQogCiAvKiBVc2VkIGJ5IENNX01FTUlGX0NMS1NUQ1RSTCwgQ01fTUVNSUZfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQVNZTkNfUEhZMV9DTEtfU0hJRlQJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9BU1lOQ19QSFkxX0NMS19TSElGVAkJMTIKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQVNZTkNfUEhZMV9DTEtfTUFTSwkJQklURklFTEQoMTIsIDEyKQogCiAvKiBVc2VkIGJ5IENNX01FTUlGX0NMS1NUQ1RSTCwgQ01fTUVNSUZfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQVNZTkNfUEhZMl9DTEtfU0hJRlQJCSgxIDw8IDEzKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9BU1lOQ19QSFkyX0NMS19TSElGVAkJMTMKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQVNZTkNfUEhZMl9DTEtfTUFTSwkJQklURklFTEQoMTMsIDEzKQogCiAvKiBVc2VkIGJ5IENNX0NBTV9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQ0FNX1BIWV9DVFJMX0dDTEtfU0hJRlQJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0NBTV9QSFlfQ1RSTF9HQ0xLX1NISUZUCQk5CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0NBTV9QSFlfQ1RSTF9HQ0xLX01BU0sJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgQ01fRU1VX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9DT1JFX0RQTExfRU1VX0NMS19TSElGVAkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQ09SRV9EUExMX0VNVV9DTEtfU0hJRlQJCTkKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQ09SRV9EUExMX0VNVV9DTEtfTUFTSwkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBDTV9DRUZVU0VfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0NVU1RfRUZVU0VfU1lTX0NMS19TSElGVAkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfQ1VTVF9FRlVTRV9TWVNfQ0xLX1NISUZUCQk5CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0NVU1RfRUZVU0VfU1lTX0NMS19NQVNLCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IENNX01FTUlGX0NMS1NUQ1RSTCwgQ01fTUVNSUZfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRExMX0NMS19TSElGVAkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RMTF9DTEtfU0hJRlQJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RMTF9DTEtfTUFTSwkJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgQ01fTDRQRVJfQ0xLU1RDVFJMLCBDTV9MNFBFUl9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETVQxMF9HRkNMS19TSElGVAkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RNVDEwX0dGQ0xLX1NISUZUCQkJOQogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9ETVQxMF9HRkNMS19NQVNLCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBDTV9MNFBFUl9DTEtTVENUUkwsIENNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RNVDExX0dGQ0xLX1NISUZUCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RNVDExX0dGQ0xLX1NISUZUCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRE1UMTFfR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBDTV9MNFBFUl9DTEtTVENUUkwsIENNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RNVDJfR0ZDTEtfU0hJRlQJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRE1UMl9HRkNMS19TSElGVAkJCTExCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RNVDJfR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDExLCAxMSkKIAogLyogVXNlZCBieSBDTV9MNFBFUl9DTEtTVENUUkwsIENNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RNVDNfR0ZDTEtfU0hJRlQJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRE1UM19HRkNMS19TSElGVAkJCTEyCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RNVDNfR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDEyLCAxMikKIAogLyogVXNlZCBieSBDTV9MNFBFUl9DTEtTVENUUkwsIENNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RNVDRfR0ZDTEtfU0hJRlQJCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRE1UNF9HRkNMS19TSElGVAkJCTEzCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RNVDRfR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDEzLCAxMykKIAogLyogVXNlZCBieSBDTV9MNFBFUl9DTEtTVENUUkwsIENNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RNVDlfR0ZDTEtfU0hJRlQJCQkoMSA8PCAxNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRE1UOV9HRkNMS19TSElGVAkJCTE0CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RNVDlfR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDE0LCAxNCkKIAogLyogVXNlZCBieSBDTV9EU1NfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RTU19BTFdPTl9TWVNfQ0xLX1NISUZUCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRFNTX0FMV09OX1NZU19DTEtfU0hJRlQJCTEwCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RTU19BTFdPTl9TWVNfQ0xLX01BU0sJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBDTV9EU1NfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RTU19GQ0xLX1NISUZUCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRFNTX0ZDTEtfU0hJRlQJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0RTU19GQ0xLX01BU0sJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IENNX0RVQ0FUSV9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRFVDQVRJX0dDTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9EVUNBVElfR0NMS19TSElGVAkJCTgKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRFVDQVRJX0dDTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0VNQUNfNTBNSFpfQ0xLX1NISUZUCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRU1BQ181ME1IWl9DTEtfU0hJRlQJCTEwCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0VNQUNfNTBNSFpfQ0xLX01BU0sJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBDTV9FTVVfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0VNVV9TWVNfQ0xLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRU1VX1NZU19DTEtfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0VNVV9TWVNfQ0xLX01BU0sJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX0NBTV9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRkRJRl9HRkNMS19TSElGVAkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9GRElGX0dGQ0xLX1NISUZUCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRkRJRl9HRkNMS19NQVNLCQkJQklURklFTEQoMTAsIDEwKQogCiAvKiBVc2VkIGJ5IENNX0w0UEVSX0NMS1NUQ1RSTCwgQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRlVOQ18xMk1fR0ZDTEtfU0hJRlQJCSgxIDw8IDE1KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9GVU5DXzEyTV9HRkNMS19TSElGVAkJMTUKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRlVOQ18xMk1fR0ZDTEtfTUFTSwkJQklURklFTEQoMTUsIDE1KQogCiAvKiBVc2VkIGJ5IENNMV9BQkVfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0ZVTkNfMjRNX0dGQ0xLX1NISUZUCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfRlVOQ18yNE1fR0ZDTEtfU0hJRlQJCTEwCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0ZVTkNfMjRNX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBDTV9EU1NfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0hETUlfUEhZXzQ4TUhaX0dGQ0xLX1NISUZUCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSERNSV9QSFlfNDhNSFpfR0ZDTEtfU0hJRlQJCTExCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0hETUlfUEhZXzQ4TUhaX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDExLCAxMSkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfQ0xLU1RDVFJMLCBDTV9MM0lOSVRfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSFNJQ19QMV80ODBNX0dGQ0xLX1NISUZUCQkoMSA8PCAyMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSFNJQ19QMV80ODBNX0dGQ0xLX1NISUZUCQkyMAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9IU0lDX1AxXzQ4ME1fR0ZDTEtfTUFTSwkJQklURklFTEQoMjAsIDIwKQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9IU0lDX1AxX0dGQ0xLX1NISUZUCQkoMSA8PCAyNikKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSFNJQ19QMV9HRkNMS19TSElGVAkJMjYKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSFNJQ19QMV9HRkNMS19NQVNLCQkJQklURklFTEQoMjYsIDI2KQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9IU0lDX1AyXzQ4ME1fR0ZDTEtfU0hJRlQJCSgxIDw8IDIxKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9IU0lDX1AyXzQ4ME1fR0ZDTEtfU0hJRlQJCTIxCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0hTSUNfUDJfNDgwTV9HRkNMS19NQVNLCQlCSVRGSUVMRCgyMSwgMjEpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0hTSUNfUDJfR0ZDTEtfU0hJRlQJCSgxIDw8IDI3KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9IU0lDX1AyX0dGQ0xLX1NISUZUCQkyNwogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9IU0lDX1AyX0dGQ0xLX01BU0sJCQlCSVRGSUVMRCgyNywgMjcpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUXzMyS19HRkNMS19TSElGVAkJKDEgPDwgMzEpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfMzJLX0dGQ0xLX1NISUZUCQkzMQogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUXzMyS19HRkNMS19NQVNLCQlCSVRGSUVMRCgzMSwgMzEpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfNDhNQ19HRkNMS19TSElGVAkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfNDhNQ19HRkNMS19TSElGVAkJMTMKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF80OE1DX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDEzLCAxMykKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfQ0xLU1RDVFJMLCBDTV9MM0lOSVRfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF80OE1fR0ZDTEtfU0hJRlQJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUXzQ4TV9HRkNMS19TSElGVAkJMTIKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF80OE1fR0ZDTEtfTUFTSwkJQklURklFTEQoMTIsIDEyKQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUXzYwTV9QMV9HRkNMS19TSElGVAkJKDEgPDwgMjgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfNjBNX1AxX0dGQ0xLX1NISUZUCQkyOAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUXzYwTV9QMV9HRkNMS19NQVNLCQlCSVRGSUVMRCgyOCwgMjgpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfNjBNX1AyX0dGQ0xLX1NISUZUCQkoMSA8PCAyOSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF82ME1fUDJfR0ZDTEtfU0hJRlQJCTI5CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfNjBNX1AyX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDI5LCAyOSkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfQ0xLU1RDVFJMLCBDTV9MM0lOSVRfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF85Nk1fR0ZDTEtfU0hJRlQJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUXzk2TV9HRkNMS19TSElGVAkJMTEKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF85Nk1fR0ZDTEtfTUFTSwkJQklURklFTEQoMTEsIDExKQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUX0hTSV9HRkNMS19TSElGVAkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfSFNJX0dGQ0xLX1NISUZUCQkxNgogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUX0hTSV9HRkNMS19NQVNLCQlCSVRGSUVMRCgxNiwgMTYpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfSFNNTUMxX0dGQ0xLX1NISUZUCQkoMSA8PCAxNykKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF9IU01NQzFfR0ZDTEtfU0hJRlQJCTE3CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfSFNNTUMxX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDE3LCAxNykKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfQ0xLU1RDVFJMLCBDTV9MM0lOSVRfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF9IU01NQzJfR0ZDTEtfU0hJRlQJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUX0hTTU1DMl9HRkNMS19TSElGVAkJMTgKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSU5JVF9IU01NQzJfR0ZDTEtfTUFTSwkJQklURklFTEQoMTgsIDE4KQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUX0hTTU1DNl9HRkNMS19TSElGVAkJKDEgPDwgMTkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lOSVRfSFNNTUM2X0dGQ0xLX1NISUZUCQkxOQogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JTklUX0hTTU1DNl9HRkNMS19NQVNLCQlCSVRGSUVMRCgxOSwgMTkpCiAKIC8qIFVzZWQgYnkgQ01fQ0FNX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JU1NfR0NMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lTU19HQ0xLX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9JU1NfR0NMS19NQVNLCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9JVkFIRF9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfSVZBSERfUk9PVF9DTEtfU0hJRlQJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lWQUhEX1JPT1RfQ0xLX1NISUZUCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0lWQUhEX1JPT1RfQ0xLX01BU0sJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzSU5JVF9EUExMX0FMV09OX0NMS19TSElGVAkoMSA8PCAxNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNJTklUX0RQTExfQUxXT05fQ0xLX1NISUZUCTE0CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzSU5JVF9EUExMX0FMV09OX0NMS19NQVNLCQlCSVRGSUVMRCgxNCwgMTQpCiAKIC8qIFVzZWQgYnkgQ01fTDNfMV9DTEtTVENUUkwsIENNX0wzXzFfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfMV9HSUNMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzXzFfR0lDTEtfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzXzFfR0lDTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fTDNfMl9DTEtTVENUUkwsIENNX0wzXzJfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfMl9HSUNMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzXzJfR0lDTEtfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzXzJfR0lDTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fRDJEX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19EMkRfR0lDTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19EMkRfR0lDTEtfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX0QyRF9HSUNMS19NQVNLCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9TRE1BX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19ETUFfR0lDTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19ETUFfR0lDTEtfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX0RNQV9HSUNMS19NQVNLCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9EU1NfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX0RTU19HSUNMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX0RTU19HSUNMS19TSElGVAkJCTgKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfRFNTX0dJQ0xLX01BU0sJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX01FTUlGX0NMS1NUQ1RSTCwgQ01fTUVNSUZfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfRU1JRl9HSUNMS19TSElGVAkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfRU1JRl9HSUNMS19TSElGVAkJOAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19FTUlGX0dJQ0xLX01BU0sJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX0dGWF9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfR0ZYX0dJQ0xLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfR0ZYX0dJQ0xLX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19HRlhfR0lDTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX0lOSVRfR0lDTEtfU0hJRlQJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0wzX0lOSVRfR0lDTEtfU0hJRlQJCTgKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfSU5JVF9HSUNMS19NQVNLCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9MM0lOU1RSX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19JTlNUUl9HSUNMS19TSElGVAkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfSU5TVFJfR0lDTEtfU0hJRlQJCTgKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfSU5TVFJfR0lDTEtfTUFTSwkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9MNFNFQ19DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfU0VDVVJFX0dJQ0xLX1NISUZUCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MM19TRUNVUkVfR0lDTEtfU0hJRlQJCTgKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDNfU0VDVVJFX0dJQ0xLX01BU0sJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fQUxXT05fQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0w0X0FPX0lDTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9BT19JQ0xLX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9BT19JQ0xLX01BU0sJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX0NFRlVTRV9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfQ0VGVVNFX0dJQ0xLX1NISUZUCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9DRUZVU0VfR0lDTEtfU0hJRlQJCTgKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfQ0VGVVNFX0dJQ0xLX01BU0sJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fTDRDRkdfQ0xLU1RDVFJMLCBDTV9MNENGR19DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9DRkdfR0lDTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9DRkdfR0lDTEtfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0w0X0NGR19HSUNMS19NQVNLCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9EMkRfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0w0X0QyRF9HSUNMS19TSElGVAkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0w0X0QyRF9HSUNMS19TSElGVAkJCTkKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfRDJEX0dJQ0xLX01BU0sJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9DTEtTVENUUkwsIENNX0wzSU5JVF9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9JTklUX0dJQ0xLX1NISUZUCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9JTklUX0dJQ0xLX1NISUZUCQk5CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0w0X0lOSVRfR0lDTEtfTUFTSwkJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgQ01fTDRQRVJfQ0xLU1RDVFJMLCBDTV9MNFBFUl9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9QRVJfR0lDTEtfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9QRVJfR0lDTEtfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0w0X1BFUl9HSUNMS19NQVNLCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9MNFNFQ19DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfU0VDVVJFX0dJQ0xLX1NISUZUCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9MNF9TRUNVUkVfR0lDTEtfU0hJRlQJCTkKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfU0VDVVJFX0dJQ0xLX01BU0sJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgQ01fV0tVUF9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTDRfV0tVUF9HSUNMS19TSElGVAkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0w0X1dLVVBfR0lDTEtfU0hJRlQJCTEyCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX0w0X1dLVVBfR0lDTEtfTUFTSwkJCUJJVEZJRUxEKDEyLCAxMikKIAogLyogVXNlZCBieSBDTV9NUFVfQ0xLU1RDVFJMLCBDTV9NUFVfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTVBVX0RQTExfQ0xLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfTVBVX0RQTExfQ0xLX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9NUFVfRFBMTF9DTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ00xX0FCRV9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfT0NQX0FCRV9HSUNMS19TSElGVAkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfT0NQX0FCRV9HSUNMS19TSElGVAkJOQogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9PQ1BfQUJFX0dJQ0xLX01BU0sJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IENNX0w0UEVSX0NMS1NUQ1RSTCwgQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSXzI0TUNfR0ZDTEtfU0hJRlQJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfMjRNQ19HRkNMS19TSElGVAkJMTYKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSXzI0TUNfR0ZDTEtfTUFTSwkJQklURklFTEQoMTYsIDE2KQogCiAvKiBVc2VkIGJ5IENNX0w0UEVSX0NMS1NUQ1RSTCwgQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSXzMyS19HRkNMS19TSElGVAkJKDEgPDwgMTcpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl8zMktfR0ZDTEtfU0hJRlQJCTE3CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl8zMktfR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDE3LCAxNykKIAogLyogVXNlZCBieSBDTV9MNFBFUl9DTEtTVENUUkwsIENNX0w0UEVSX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl80OE1fR0ZDTEtfU0hJRlQJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfNDhNX0dGQ0xLX1NISUZUCQkxOAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfNDhNX0dGQ0xLX01BU0sJCQlCSVRGSUVMRCgxOCwgMTgpCiAKIC8qIFVzZWQgYnkgQ01fTDRQRVJfQ0xLU1RDVFJMLCBDTV9MNFBFUl9DTEtTVENUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfOTZNX0dGQ0xLX1NISUZUCQkoMSA8PCAxOSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSXzk2TV9HRkNMS19TSElGVAkJMTkKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSXzk2TV9HRkNMS19NQVNLCQkJQklURklFTEQoMTksIDE5KQogCiAvKiBVc2VkIGJ5IENNX0w0UEVSX0NMS1NUQ1RSTCwgQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSX0FCRV8yNE1fR0ZDTEtfU0hJRlQJCSgxIDw8IDI1KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QRVJfQUJFXzI0TV9HRkNMS19TSElGVAkJMjUKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSX0FCRV8yNE1fR0ZDTEtfTUFTSwkJQklURklFTEQoMjUsIDI1KQogCiAvKiBVc2VkIGJ5IENNX0VNVV9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSX0RQTExfRU1VX0NMS19TSElGVAkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9EUExMX0VNVV9DTEtfU0hJRlQJCTEwCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9EUExMX0VNVV9DTEtfTUFTSwkJQklURklFTEQoMTAsIDEwKQogCiAvKiBVc2VkIGJ5IENNX0w0UEVSX0NMS1NUQ1RSTCwgQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSX01DQVNQMl9HRkNMS19TSElGVAkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9NQ0FTUDJfR0ZDTEtfU0hJRlQJCTIwCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9NQ0FTUDJfR0ZDTEtfTUFTSwkJQklURklFTEQoMjAsIDIwKQogCiAvKiBVc2VkIGJ5IENNX0w0UEVSX0NMS1NUQ1RSTCwgQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSX01DQVNQM19HRkNMS19TSElGVAkJKDEgPDwgMjEpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9NQ0FTUDNfR0ZDTEtfU0hJRlQJCTIxCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9NQ0FTUDNfR0ZDTEtfTUFTSwkJQklURklFTEQoMjEsIDIxKQogCiAvKiBVc2VkIGJ5IENNX0w0UEVSX0NMS1NUQ1RSTCwgQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSX01DQlNQNF9HRkNMS19TSElGVAkJKDEgPDwgMjIpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9NQ0JTUDRfR0ZDTEtfU0hJRlQJCTIyCiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9NQ0JTUDRfR0ZDTEtfTUFTSwkJQklURklFTEQoMjIsIDIyKQogCiAvKiBVc2VkIGJ5IENNX0w0UEVSX0NMS1NUQ1RSTCwgQ01fTDRQRVJfQ0xLU1RDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfUEVSX1NZU19HRkNMS19TSElGVAkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9TWVNfR0ZDTEtfU0hJRlQJCTI0CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BFUl9TWVNfR0ZDTEtfTUFTSwkJCUJJVEZJRUxEKDI0LCAyNCkKIAogLyogVXNlZCBieSBDTV9NRU1JRl9DTEtTVENUUkwsIENNX01FTUlGX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1BIWV9ST09UX0NMS19TSElGVAkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QSFlfUk9PVF9DTEtfU0hJRlQJCQkxMAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9QSFlfUk9PVF9DTEtfTUFTSwkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBDTV9HRlhfQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1NHWF9HRkNMS19TSElGVAkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1NHWF9HRkNMS19TSElGVAkJCTkKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfU0dYX0dGQ0xLX01BU0sJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IENNX0FMV09OX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9TUl9DT1JFX1NZU0NMS19TSElGVAkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1NSX0NPUkVfU1lTQ0xLX1NISUZUCQkxMQogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9TUl9DT1JFX1NZU0NMS19NQVNLCQlCSVRGSUVMRCgxMSwgMTEpCiAKIC8qIFVzZWQgYnkgQ01fQUxXT05fQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1NSX0lWQV9TWVNDTEtfU0hJRlQJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9TUl9JVkFfU1lTQ0xLX1NISUZUCQkxMAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9TUl9JVkFfU1lTQ0xLX01BU0sJCQlCSVRGSUVMRCgxMCwgMTApCiAKIC8qIFVzZWQgYnkgQ01fQUxXT05fQ0xLU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1NSX01QVV9TWVNDTEtfU0hJRlQJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1NSX01QVV9TWVNDTEtfU0hJRlQJCTkKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfU1JfTVBVX1NZU0NMS19NQVNLCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBDTV9XS1VQX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9TWVNfQ0xLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfU1lTX0NMS19TSElGVAkJCTgKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfU1lTX0NMS19NQVNLCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9URVNMQV9DTEtTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfVEVTTEFfUk9PVF9DTEtfU0hJRlQJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1RFU0xBX1JPT1RfQ0xLX1NISUZUCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1RFU0xBX1JPT1RfQ0xLX01BU0sJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1RMTF9DSDBfR0ZDTEtfU0hJRlQJCSgxIDw8IDIyKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9UTExfQ0gwX0dGQ0xLX1NISUZUCQkyMgogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9UTExfQ0gwX0dGQ0xLX01BU0sJCQlCSVRGSUVMRCgyMiwgMjIpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1RMTF9DSDFfR0ZDTEtfU0hJRlQJCSgxIDw8IDIzKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9UTExfQ0gxX0dGQ0xLX1NISUZUCQkyMwogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9UTExfQ0gxX0dGQ0xLX01BU0sJCQlCSVRGSUVMRCgyMywgMjMpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1RMTF9DSDJfR0ZDTEtfU0hJRlQJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9UTExfQ0gyX0dGQ0xLX1NISUZUCQkyNAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9UTExfQ0gyX0dGQ0xLX01BU0sJCQlCSVRGSUVMRCgyNCwgMjQpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1VTQl9EUExMX0hTX0NMS19TSElGVAkJKDEgPDwgMTUpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1VTQl9EUExMX0hTX0NMS19TSElGVAkJMTUKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfVVNCX0RQTExfSFNfQ0xLX01BU0sJCUJJVEZJRUxEKDE1LCAxNSkKIAogLyogVXNlZCBieSBDTV9XS1VQX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9VU0lNX0dGQ0xLX1NISUZUCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1VTSU1fR0ZDTEtfU0hJRlQJCQkxMAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9VU0lNX0dGQ0xLX01BU0sJCQlCSVRGSUVMRCgxMCwgMTApCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1VUTUlfUDNfR0ZDTEtfU0hJRlQJCSgxIDw8IDMwKQorI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9VVE1JX1AzX0dGQ0xLX1NISUZUCQkzMAogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9VVE1JX1AzX0dGQ0xLX01BU0sJCQlCSVRGSUVMRCgzMCwgMzApCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX0NMS1NUQ1RSTCwgQ01fTDNJTklUX0NMS1NUQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1VUTUlfUk9PVF9HRkNMS19TSElGVAkJKDEgPDwgMjUpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1VUTUlfUk9PVF9HRkNMS19TSElGVAkJMjUKICNkZWZpbmUgT01BUDQ0MzBfQ0xLQUNUSVZJVFlfVVRNSV9ST09UX0dGQ0xLX01BU0sJCUJJVEZJRUxEKDI1LCAyNSkKIAogLyogVXNlZCBieSBDTV9XS1VQX0NMS1NUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9XS1VQXzMyS19HRkNMS19TSElGVAkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX0NMS0FDVElWSVRZX1dLVVBfMzJLX0dGQ0xLX1NISUZUCQkxMQogI2RlZmluZSBPTUFQNDQzMF9DTEtBQ1RJVklUWV9XS1VQXzMyS19HRkNMS19NQVNLCQlCSVRGSUVMRCgxMSwgMTEpCiAKIC8qCkBAIC00MjYsNyArNDI2LDcgQEAKICAqIENNMV9BQkVfVElNRVI1X0NMS0NUUkwsIENNMV9BQkVfVElNRVI2X0NMS0NUUkwsIENNMV9BQkVfVElNRVI3X0NMS0NUUkwsCiAgKiBDTTFfQUJFX1RJTUVSOF9DTEtDVFJMCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1NISUZUCQkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1NISUZUCQkJCQkyNAogI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfTUFTSwkJCQkJQklURklFTEQoMjQsIDI0KQogCiAvKgpAQCAtNDM0LDQzICs0MzQsNDMgQEAKICAqIENNX0RQTExfU1lTX1JFRl9DTEtTRUwsIENNX0w0X1dLVVBfQ0xLU0VMLCBDTV9DTEtTRUxfRFVDQVRJX0lTU19ST09ULAogICogQ01fQ0xLU0VMX1VTQl82ME1IWgogICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF8wXzBfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMXzBfMF9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF8wXzBfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBSZW5hbWVkIGZyb20gQ0xLU0VMIFVzZWQgYnkgQ01fQllQQ0xLX0RQTExfSVZBLCBDTV9CWVBDTEtfRFBMTF9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMXzBfMV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfMF8xX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMXzBfMV9NQVNLCQkJCUJJVEZJRUxEKDAsIDEpCiAKIC8qIFJlbmFtZWQgZnJvbSBDTEtTRUwgVXNlZCBieSBDTV9MM0lOSVRfSFNJX0NMS0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMXzI0XzI1X1NISUZUCQkJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfMjRfMjVfU0hJRlQJCQkJMjQKICNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMXzI0XzI1X01BU0sJCQkJQklURklFTEQoMjQsIDI1KQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9VU0JfT1RHX0NMS0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMXzYwTV9TSElGVAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMXzYwTV9TSElGVAkJCQkyNAogI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfNjBNX01BU0sJCQkJQklURklFTEQoMjQsIDI0KQogCiAvKiBVc2VkIGJ5IENNMV9BQkVfQUVTU19DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9BRVNTX0ZDTEtfU0hJRlQJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9BRVNTX0ZDTEtfU0hJRlQJCQkJMjQKICNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0FFU1NfRkNMS19NQVNLCQkJCUJJVEZJRUxEKDI0LCAyNCkKIAogLyogVXNlZCBieSBDTV9DTEtTRUxfQ09SRV9SRVNUT1JFLCBDTV9DTEtTRUxfQ09SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfQ09SRV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfQ09SRV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9DT1JFX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogUmVuYW1lZCBmcm9tIENMS1NFTF9DT1JFIFVzZWQgYnkgQ01fU0hBRE9XX0ZSRVFfQ09ORklHMiAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfQ09SRV8xXzFfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0NPUkVfMV8xX1NISUZUCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0NPUkVfMV8xX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBDTV9XS1VQX1VTSU1fQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfRElWX1NISUZUCQkJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfRElWX1NISUZUCQkJCTI0CiAjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9ESVZfTUFTSwkJCQlCSVRGSUVMRCgyNCwgMjQpCiAKIC8qIFVzZWQgYnkgQ01fQ0FNX0ZESUZfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfRkNMS19TSElGVAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0ZDTEtfU0hJRlQJCQkJMjQKICNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0ZDTEtfTUFTSwkJCQlCSVRGSUVMRCgyNCwgMjUpCiAKIC8qIFVzZWQgYnkgQ01fTDRQRVJfTUNCU1A0X0NMS0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0lOVEVSTkFMX1NPVVJDRV9TSElGVAkJCSgxIDw8IDI1KQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfSU5URVJOQUxfU09VUkNFX1NISUZUCQkJMjUKICNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0lOVEVSTkFMX1NPVVJDRV9NQVNLCQkJQklURklFTEQoMjUsIDI1KQogCiAvKgpAQCAtNDc4LDU4ICs0NzgsNTggQEAKICAqIENNMV9BQkVfTUNBU1BfQ0xLQ1RSTCwgQ00xX0FCRV9NQ0JTUDFfQ0xLQ1RSTCwgQ00xX0FCRV9NQ0JTUDJfQ0xLQ1RSTCwKICAqIENNMV9BQkVfTUNCU1AzX0NMS0NUUkwKICAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfSU5URVJOQUxfU09VUkNFX0NNMV9BQkVfRE1JQ19TSElGVAkoMSA8PCAyNikKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0lOVEVSTkFMX1NPVVJDRV9DTTFfQUJFX0RNSUNfU0hJRlQJMjYKICNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0lOVEVSTkFMX1NPVVJDRV9DTTFfQUJFX0RNSUNfTUFTSwlCSVRGSUVMRCgyNiwgMjcpCiAKIC8qIFVzZWQgYnkgQ01fQ0xLU0VMX0NPUkVfUkVTVE9SRSwgQ01fQ0xLU0VMX0NPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0wzX1NISUZUCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9MM19TSElGVAkJCQk0CiAjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9MM19NQVNLCQkJCQlCSVRGSUVMRCg0LCA0KQogCiAvKiBSZW5hbWVkIGZyb20gQ0xLU0VMX0wzIFVzZWQgYnkgQ01fU0hBRE9XX0ZSRVFfQ09ORklHMiAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfTDNfU0hBRE9XX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9MM19TSEFET1dfU0hJRlQJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfTDNfU0hBRE9XX01BU0sJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBDTV9DTEtTRUxfQ09SRV9SRVNUT1JFLCBDTV9DTEtTRUxfQ09SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfTDRfU0hJRlQJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0w0X1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX0w0X01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fQ0xLU0VMX0FCRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfT1BQX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9PUFBfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfT1BQX01BU0sJCQkJQklURklFTEQoMCwgMSkKIAogLyogVXNlZCBieSBDTV9HRlhfR0ZYX0NMS0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1BFUl8xOTJNX1NISUZUCQkJCSgxIDw8IDI1KQorI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfUEVSXzE5Mk1fU0hJRlQJCQkJMjUKICNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1BFUl8xOTJNX01BU0sJCQkJQklURklFTEQoMjUsIDI2KQogCiAvKiBVc2VkIGJ5IENNX0VNVV9ERUJVR1NTX0NMS0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1BNRF9TVE1fQ0xLX1NISUZUCQkJKDEgPDwgMjcpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9QTURfU1RNX0NMS19TSElGVAkJCTI3CiAjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9QTURfU1RNX0NMS19NQVNLCQkJQklURklFTEQoMjcsIDI5KQogCiAvKiBVc2VkIGJ5IENNX0VNVV9ERUJVR1NTX0NMS0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1BNRF9UUkFDRV9DTEtfU0hJRlQJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1BNRF9UUkFDRV9DTEtfU0hJRlQJCQkyNAogI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfUE1EX1RSQUNFX0NMS19NQVNLCQkJQklURklFTEQoMjQsIDI2KQogCiAvKiBVc2VkIGJ5IENNX0dGWF9HRlhfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfU0dYX0ZDTEtfU0hJRlQJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9TR1hfRkNMS19TSElGVAkJCQkyNAogI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfU0dYX0ZDTEtfTUFTSwkJCQlCSVRGSUVMRCgyNCwgMjQpCiAKIC8qCiAgKiBVc2VkIGJ5IENNMV9BQkVfRE1JQ19DTEtDVFJMLCBDTTFfQUJFX01DQVNQX0NMS0NUUkwsIENNMV9BQkVfTUNCU1AxX0NMS0NUUkwsCiAgKiBDTTFfQUJFX01DQlNQMl9DTEtDVFJMLCBDTTFfQUJFX01DQlNQM19DTEtDVFJMCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1NPVVJDRV9TSElGVAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1NPVVJDRV9TSElGVAkJCQkyNAogI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfU09VUkNFX01BU0sJCQkJQklURklFTEQoMjQsIDI1KQogCiAvKiBSZW5hbWVkIGZyb20gQ0xLU0VMX1NPVVJDRSBVc2VkIGJ5IENNX0w0UEVSX01DQlNQNF9DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9TT1VSQ0VfMjRfMjRfU0hJRlQJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1NPVVJDRV8yNF8yNF9TSElGVAkJCTI0CiAjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9TT1VSQ0VfMjRfMjRfTUFTSwkJCUJJVEZJRUxEKDI0LCAyNCkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTCwgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9DTEtTRUxfVVRNSV9QMV9TSElGVAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1VUTUlfUDFfU0hJRlQJCQkJMjQKICNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1VUTUlfUDFfTUFTSwkJCQlCSVRGSUVMRCgyNCwgMjQpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkwsIENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLU0VMX1VUTUlfUDJfU0hJRlQJCQkJKDEgPDwgMjUpCisjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9VVE1JX1AyX1NISUZUCQkJCTI1CiAjZGVmaW5lIE9NQVA0NDMwX0NMS1NFTF9VVE1JX1AyX01BU0sJCQkJQklURklFTEQoMjUsIDI1KQogCiAvKgpAQCAtNTQ0LDIzICs1NDQsMjMgQEAKICAqIENNX0lWQUhEX0NMS1NUQ1RSTCwgQ01fRFNTX0NMS1NUQ1RSTCwgQ01fTVBVX0NMS1NUQ1RSTCwgQ01fVEVTTEFfQ0xLU1RDVFJMLAogICogQ00xX0FCRV9DTEtTVENUUkwsIENNX01QVV9DTEtTVENUUkxfUkVTVE9SRQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0NMS1RSQ1RSTF9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9DTEtUUkNUUkxfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9DTEtUUkNUUkxfTUFTSwkJCQkJQklURklFTEQoMCwgMSkKIAogLyogVXNlZCBieSBDTV9FTVVfT1ZFUlJJREVfRFBMTF9DT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NPUkVfRFBMTF9FTVVfRElWX1NISUZUCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfQ09SRV9EUExMX0VNVV9ESVZfU0hJRlQJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0NPUkVfRFBMTF9FTVVfRElWX01BU0sJCQkJQklURklFTEQoMCwgNikKIAogLyogVXNlZCBieSBDTV9FTVVfT1ZFUlJJREVfRFBMTF9DT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX0NPUkVfRFBMTF9FTVVfTVVMVF9TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0NPUkVfRFBMTF9FTVVfTVVMVF9TSElGVAkJCTgKICNkZWZpbmUgT01BUDQ0MzBfQ09SRV9EUExMX0VNVV9NVUxUX01BU0sJCQlCSVRGSUVMRCg4LCAxOCkKIAogLyogVXNlZCBieSBDTV9MM18yX0RZTkFNSUNERVAsIENNX0w0Q0ZHX0RZTkFNSUNERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRDJEX0RZTkRFUF9TSElGVAkJCQkoMSA8PCAxOCkKKyNkZWZpbmUgT01BUDQ0MzBfRDJEX0RZTkRFUF9TSElGVAkJCQkxOAogI2RlZmluZSBPTUFQNDQzMF9EMkRfRFlOREVQX01BU0sJCQkJQklURklFTEQoMTgsIDE4KQogCiAvKiBVc2VkIGJ5IENNX01QVV9TVEFUSUNERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRDJEX1NUQVRERVBfU0hJRlQJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVA0NDMwX0QyRF9TVEFUREVQX1NISUZUCQkJCTE4CiAjZGVmaW5lIE9NQVA0NDMwX0QyRF9TVEFUREVQX01BU0sJCQkJQklURklFTEQoMTgsIDE4KQogCiAvKgpAQCAtNTcwLDE5ICs1NzAsMTkgQEAKICAqIENNX1NTQ19ERUxUQU1TVEVQX0RQTExfRERSUEhZLCBDTV9TU0NfREVMVEFNU1RFUF9EUExMX0lWQSwKICAqIENNX1NTQ19ERUxUQU1TVEVQX0RQTExfTVBVCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfREVMVEFNU1RFUF9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9ERUxUQU1TVEVQX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfREVMVEFNU1RFUF9NQVNLCQkJCUJJVEZJRUxEKDAsIDE5KQogCiAvKiBVc2VkIGJ5IENNX1NIQURPV19GUkVRX0NPTkZJRzFfUkVTVE9SRSwgQ01fU0hBRE9XX0ZSRVFfQ09ORklHMSAqLwotI2RlZmluZSBPTUFQNDQzMF9ETExfT1ZFUlJJREVfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfRExMX09WRVJSSURFX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfRExMX09WRVJSSURFX01BU0sJCQkJQklURklFTEQoMiwgMikKIAogLyogUmVuYW1lZCBmcm9tIERMTF9PVkVSUklERSBVc2VkIGJ5IENNX0RMTF9DVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0RMTF9PVkVSUklERV8wXzBfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfRExMX09WRVJSSURFXzBfMF9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0RMTF9PVkVSUklERV8wXzBfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IENNX1NIQURPV19GUkVRX0NPTkZJRzFfUkVTVE9SRSwgQ01fU0hBRE9XX0ZSRVFfQ09ORklHMSAqLwotI2RlZmluZSBPTUFQNDQzMF9ETExfUkVTRVRfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfRExMX1JFU0VUX1NISUZUCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfRExMX1JFU0VUX01BU0sJCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qCkBAIC01OTAsNDAgKzU5MCw0MCBAQAogICogQ01fQ0xLU0VMX0RQTExfQ09SRV9SRVNUT1JFLCBDTV9DTEtTRUxfRFBMTF9BQkUsIENNX0NMS1NFTF9EUExMX0NPUkUsCiAgKiBDTV9DTEtTRUxfRFBMTF9ERFJQSFksIENNX0NMS1NFTF9EUExMX0lWQSwgQ01fQ0xLU0VMX0RQTExfTVBVCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9CWVBfQ0xLU0VMX1NISUZUCQkJCSgxIDw8IDIzKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0JZUF9DTEtTRUxfU0hJRlQJCQkJMjMKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9CWVBfQ0xLU0VMX01BU0sJCQkJQklURklFTEQoMjMsIDIzKQogCiAvKiBVc2VkIGJ5IENNX0NMS0RDT0xET19EUExMX1VTQiAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS0RDT0xET19HQVRFX0NUUkxfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS0RDT0xET19HQVRFX0NUUkxfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLRENPTERPX0dBVEVfQ1RSTF9NQVNLCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9DTEtTRUxfRFBMTF9DT1JFX1JFU1RPUkUsIENNX0NMS1NFTF9EUExMX0NPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRISUZfQ0xLU0VMX1NISUZUCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0NMS1NFTF9TSElGVAkJCTIwCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0NMS1NFTF9NQVNLCQkJQklURklFTEQoMjAsIDIwKQogCiAvKgogICogVXNlZCBieSBDTV9ESVZfTTNfRFBMTF9QRVIsIENNX0RJVl9NM19EUExMX0NPUkVfUkVTVE9SRSwgQ01fRElWX00zX0RQTExfQUJFLAogICogQ01fRElWX00zX0RQTExfQ09SRQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0RJVl9TSElGVAkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0RJVl9TSElGVAkJCTAKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRISUZfRElWX01BU0sJCQlCSVRGSUVMRCgwLCA0KQogCiAvKgogICogVXNlZCBieSBDTV9ESVZfTTNfRFBMTF9QRVIsIENNX0RJVl9NM19EUExMX0NPUkVfUkVTVE9SRSwgQ01fRElWX00zX0RQTExfQUJFLAogICogQ01fRElWX00zX0RQTExfQ09SRQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0RJVkNIQUNLX1NISUZUCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRISUZfRElWQ0hBQ0tfU0hJRlQJCQk1CiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0RJVkNIQUNLX01BU0sJCQlCSVRGSUVMRCg1LCA1KQogCiAvKgogICogVXNlZCBieSBDTV9ESVZfTTNfRFBMTF9QRVIsIENNX0RJVl9NM19EUExMX0NPUkVfUkVTVE9SRSwgQ01fRElWX00zX0RQTExfQUJFLAogICogQ01fRElWX00zX0RQTExfQ09SRQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0dBVEVfQ1RSTF9TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUSElGX0dBVEVfQ1RSTF9TSElGVAkJCTgKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRISUZfR0FURV9DVFJMX01BU0sJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX0RJVl9NMl9EUExMX1BFUiwgQ01fRElWX00yX0RQTExfVU5JUFJPLCBDTV9ESVZfTTJfRFBMTF9BQkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRYMl9HQVRFX0NUUkxfU0hJRlQJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRYMl9HQVRFX0NUUkxfU0hJRlQJCQkxMAogI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVFgyX0dBVEVfQ1RSTF9NQVNLCQkJQklURklFTEQoMTAsIDEwKQogCiAvKgpAQCAtNjMxLDExICs2MzEsMTEgQEAKICAqIENNX0RJVl9NMl9EUExMX0NPUkVfUkVTVE9SRSwgQ01fRElWX00yX0RQTExfQUJFLCBDTV9ESVZfTTJfRFBMTF9DT1JFLAogICogQ01fRElWX00yX0RQTExfRERSUEhZLCBDTV9ESVZfTTJfRFBMTF9NUFUKICAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVF9ESVZfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWX01BU0sJCQkJQklURklFTEQoMCwgNCkKIAogLyogUmVuYW1lZCBmcm9tIERQTExfQ0xLT1VUX0RJViBVc2VkIGJ5IENNX0RJVl9NMl9EUExMX1VTQiAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVF9ESVZfMF82X1NISUZUCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWXzBfNl9TSElGVAkJCTAKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWXzBfNl9NQVNLCQkJQklURklFTEQoMCwgNikKIAogLyoKQEAgLTY0MywxMSArNjQzLDExIEBACiAgKiBDTV9ESVZfTTJfRFBMTF9DT1JFX1JFU1RPUkUsIENNX0RJVl9NMl9EUExMX0FCRSwgQ01fRElWX00yX0RQTExfQ09SRSwKICAqIENNX0RJVl9NMl9EUExMX0REUlBIWSwgQ01fRElWX00yX0RQTExfTVBVCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWQ0hBQ0tfU0hJRlQJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVF9ESVZDSEFDS19TSElGVAkJCTUKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRfRElWQ0hBQ0tfTUFTSwkJCUJJVEZJRUxEKDUsIDUpCiAKIC8qIFJlbmFtZWQgZnJvbSBEUExMX0NMS09VVF9ESVZDSEFDSyBVc2VkIGJ5IENNX0RJVl9NMl9EUExMX1VTQiAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVF9ESVZDSEFDS19NMl9VU0JfU0hJRlQJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUX0RJVkNIQUNLX00yX1VTQl9TSElGVAkJNwogI2RlZmluZSBPTUFQNDQzMF9EUExMX0NMS09VVF9ESVZDSEFDS19NMl9VU0JfTUFTSwkJQklURklFTEQoNywgNykKIAogLyoKQEAgLTY1NSwyMyArNjU1LDIzIEBACiAgKiBDTV9ESVZfTTJfRFBMTF9BQkUsIENNX0RJVl9NMl9EUExMX0NPUkUsIENNX0RJVl9NMl9EUExMX0REUlBIWSwKICAqIENNX0RJVl9NMl9EUExMX01QVQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUX0dBVEVfQ1RSTF9TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ0xLT1VUX0dBVEVfQ1RSTF9TSElGVAkJCTgKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DTEtPVVRfR0FURV9DVFJMX01BU0sJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX1NIQURPV19GUkVRX0NPTkZJRzFfUkVTVE9SRSwgQ01fU0hBRE9XX0ZSRVFfQ09ORklHMSAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX0NPUkVfRFBMTF9FTl9TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ09SRV9EUExMX0VOX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9EUExMX0NPUkVfRFBMTF9FTl9NQVNLCQkJCUJJVEZJRUxEKDgsIDEwKQogCiAvKiBVc2VkIGJ5IENNX1NIQURPV19GUkVRX0NPTkZJRzFfUkVTVE9SRSwgQ01fU0hBRE9XX0ZSRVFfQ09ORklHMSAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX0NPUkVfTTJfRElWX1NISUZUCQkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0NPUkVfTTJfRElWX1NISUZUCQkJCTExCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ09SRV9NMl9ESVZfTUFTSwkJCQlCSVRGSUVMRCgxMSwgMTUpCiAKIC8qIFVzZWQgYnkgQ01fU0hBRE9XX0ZSRVFfQ09ORklHMiAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX0NPUkVfTTVfRElWX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ09SRV9NNV9ESVZfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9EUExMX0NPUkVfTTVfRElWX01BU0sJCQkJQklURklFTEQoMywgNykKIAogLyogVXNlZCBieSBDTV9TSEFET1dfRlJFUV9DT05GSUcxX1JFU1RPUkUsIENNX1NIQURPV19GUkVRX0NPTkZJRzEgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DT1JFX1NZU19SRUZfQ0xLU0VMX1NISUZUCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DT1JFX1NZU19SRUZfQ0xLU0VMX1NISUZUCQkJMQogI2RlZmluZSBPTUFQNDQzMF9EUExMX0NPUkVfU1lTX1JFRl9DTEtTRUxfTUFTSwkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qCkBAIC02NzksMTEgKzY3OSwxMSBAQAogICogQ01fQ0xLU0VMX0RQTExfQ09SRV9SRVNUT1JFLCBDTV9DTEtTRUxfRFBMTF9BQkUsIENNX0NMS1NFTF9EUExMX0NPUkUsCiAgKiBDTV9DTEtTRUxfRFBMTF9ERFJQSFksIENNX0NMS1NFTF9EUExMX0lWQSwgQ01fQ0xLU0VMX0RQTExfTVBVCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9ESVZfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfRElWX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfRElWX01BU0sJCQkJCUJJVEZJRUxEKDAsIDYpCiAKIC8qIFJlbmFtZWQgZnJvbSBEUExMX0RJViBVc2VkIGJ5IENNX0NMS1NFTF9EUExMX1VTQiAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX0RJVl8wXzdfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9ESVZfMF83X1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9ESVZfMF83X01BU0sJCQkJQklURklFTEQoMCwgNykKIAogLyoKQEAgLTY5MSwxMSArNjkxLDExIEBACiAgKiBDTV9DTEtNT0RFX0RQTExfQ09SRV9SRVNUT1JFLCBDTV9DTEtNT0RFX0RQTExfQUJFLCBDTV9DTEtNT0RFX0RQTExfQ09SRSwKICAqIENNX0NMS01PREVfRFBMTF9ERFJQSFksIENNX0NMS01PREVfRFBMTF9JVkEsIENNX0NMS01PREVfRFBMTF9NUFUKICAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX0RSSUZUR1VBUkRfRU5fU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0RSSUZUR1VBUkRfRU5fU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfRFJJRlRHVUFSRF9FTl9NQVNLCQkJQklURklFTEQoOCwgOCkKIAogLyogUmVuYW1lZCBmcm9tIERQTExfRFJJRlRHVUFSRF9FTiBVc2VkIGJ5IENNX0NMS01PREVfRFBMTF9VTklQUk8gKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9EUklGVEdVQVJEX0VOXzNfM19TSElGVAkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfRFJJRlRHVUFSRF9FTl8zXzNfU0hJRlQJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfRFJJRlRHVUFSRF9FTl8zXzNfTUFTSwkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qCkBAIC03MDMsNyArNzAzLDcgQEAKICAqIENNX0NMS01PREVfRFBMTF9DT1JFX1JFU1RPUkUsIENNX0NMS01PREVfRFBMTF9BQkUsIENNX0NMS01PREVfRFBMTF9DT1JFLAogICogQ01fQ0xLTU9ERV9EUExMX0REUlBIWSwgQ01fQ0xLTU9ERV9EUExMX0lWQSwgQ01fQ0xLTU9ERV9EUExMX01QVQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfRU5fU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfRU5fU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9FTl9NQVNLCQkJCQlCSVRGSUVMRCgwLCAyKQogCiAvKgpAQCAtNzExLDcgKzcxMSw3IEBACiAgKiBDTV9DTEtNT0RFX0RQTExfQ09SRV9SRVNUT1JFLCBDTV9DTEtNT0RFX0RQTExfQUJFLCBDTV9DTEtNT0RFX0RQTExfQ09SRSwKICAqIENNX0NMS01PREVfRFBMTF9ERFJQSFksIENNX0NMS01PREVfRFBMTF9JVkEsIENNX0NMS01PREVfRFBMTF9NUFUKICAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX0xQTU9ERV9FTl9TSElGVAkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9MUE1PREVfRU5fU0hJRlQJCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9MUE1PREVfRU5fTUFTSwkJCQlCSVRGSUVMRCgxMCwgMTApCiAKIC8qCkBAIC03MTksMTEgKzcxOSwxMSBAQAogICogQ01fQ0xLU0VMX0RQTExfQ09SRV9SRVNUT1JFLCBDTV9DTEtTRUxfRFBMTF9BQkUsIENNX0NMS1NFTF9EUExMX0NPUkUsCiAgKiBDTV9DTEtTRUxfRFBMTF9ERFJQSFksIENNX0NMS1NFTF9EUExMX0lWQSwgQ01fQ0xLU0VMX0RQTExfTVBVCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9NVUxUX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfTVVMVF9TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfTVVMVF9NQVNLCQkJCQlCSVRGSUVMRCg4LCAxOCkKIAogLyogUmVuYW1lZCBmcm9tIERQTExfTVVMVCBVc2VkIGJ5IENNX0NMS1NFTF9EUExMX1VTQiAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX01VTFRfVVNCX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfTVVMVF9VU0JfU0hJRlQJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9EUExMX01VTFRfVVNCX01BU0sJCQkJQklURklFTEQoOCwgMTkpCiAKIC8qCkBAIC03MzEsMTEgKzczMSwxMSBAQAogICogQ01fQ0xLTU9ERV9EUExMX0NPUkVfUkVTVE9SRSwgQ01fQ0xLTU9ERV9EUExMX0FCRSwgQ01fQ0xLTU9ERV9EUExMX0NPUkUsCiAgKiBDTV9DTEtNT0RFX0RQTExfRERSUEhZLCBDTV9DTEtNT0RFX0RQTExfSVZBLCBDTV9DTEtNT0RFX0RQTExfTVBVCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9SRUdNNFhFTl9TSElGVAkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9SRUdNNFhFTl9TSElGVAkJCQkxMQogI2RlZmluZSBPTUFQNDQzMF9EUExMX1JFR000WEVOX01BU0sJCQkJQklURklFTEQoMTEsIDExKQogCiAvKiBVc2VkIGJ5IENNX0NMS1NFTF9EUExMX1VTQiAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX1NEX0RJVl9TSElGVAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9TRF9ESVZfU0hJRlQJCQkJMjQKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9TRF9ESVZfTUFTSwkJCQlCSVRGSUVMRCgyNCwgMzEpCiAKIC8qCkBAIC03NDMsNyArNzQzLDcgQEAKICAqIENNX0NMS01PREVfRFBMTF9DT1JFX1JFU1RPUkUsIENNX0NMS01PREVfRFBMTF9BQkUsIENNX0NMS01PREVfRFBMTF9DT1JFLAogICogQ01fQ0xLTU9ERV9EUExMX0REUlBIWSwgQ01fQ0xLTU9ERV9EUExMX0lWQSwgQ01fQ0xLTU9ERV9EUExMX01QVQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfU1NDX0FDS19TSElGVAkJCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9TU0NfQUNLX1NISUZUCQkJCTEzCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfU1NDX0FDS19NQVNLCQkJCUJJVEZJRUxEKDEzLCAxMykKIAogLyoKQEAgLTc1MSw3ICs3NTEsNyBAQAogICogQ01fQ0xLTU9ERV9EUExMX0NPUkVfUkVTVE9SRSwgQ01fQ0xLTU9ERV9EUExMX0FCRSwgQ01fQ0xLTU9ERV9EUExMX0NPUkUsCiAgKiBDTV9DTEtNT0RFX0RQTExfRERSUEhZLCBDTV9DTEtNT0RFX0RQTExfSVZBLCBDTV9DTEtNT0RFX0RQTExfTVBVCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9TU0NfRE9XTlNQUkVBRF9TSElGVAkJCSgxIDw8IDE0KQorI2RlZmluZSBPTUFQNDQzMF9EUExMX1NTQ19ET1dOU1BSRUFEX1NISUZUCQkJMTQKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9TU0NfRE9XTlNQUkVBRF9NQVNLCQkJQklURklFTEQoMTQsIDE0KQogCiAvKgpAQCAtNzU5LDE1NCArNzU5LDE1NCBAQAogICogQ01fQ0xLTU9ERV9EUExMX0NPUkVfUkVTVE9SRSwgQ01fQ0xLTU9ERV9EUExMX0FCRSwgQ01fQ0xLTU9ERV9EUExMX0NPUkUsCiAgKiBDTV9DTEtNT0RFX0RQTExfRERSUEhZLCBDTV9DTEtNT0RFX0RQTExfSVZBLCBDTV9DTEtNT0RFX0RQTExfTVBVCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9TU0NfRU5fU0hJRlQJCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfU1NDX0VOX1NISUZUCQkJCTEyCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfU1NDX0VOX01BU0sJCQkJQklURklFTEQoMTIsIDEyKQogCiAvKiBVc2VkIGJ5IENNX0wzXzJfRFlOQU1JQ0RFUCwgQ01fTDRDRkdfRFlOQU1JQ0RFUCwgQ01fTDRQRVJfRFlOQU1JQ0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9EU1NfRFlOREVQX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0RTU19EWU5ERVBfU0hJRlQJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9EU1NfRFlOREVQX01BU0sJCQkJQklURklFTEQoOCwgOCkKIAogLyoKICAqIFVzZWQgYnkgQ01fRFVDQVRJX1NUQVRJQ0RFUCwgQ01fU0RNQV9TVEFUSUNERVAsIENNX1NETUFfU1RBVElDREVQX1JFU1RPUkUsCiAgKiBDTV9NUFVfU1RBVElDREVQCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFNTX1NUQVRERVBfU0hJRlQJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfRFNTX1NUQVRERVBfU0hJRlQJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9EU1NfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fTDNfMl9EWU5BTUlDREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX0RVQ0FUSV9EWU5ERVBfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX0RZTkRFUF9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0RVQ0FUSV9EWU5ERVBfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IENNX1NETUFfU1RBVElDREVQLCBDTV9TRE1BX1NUQVRJQ0RFUF9SRVNUT1JFLCBDTV9NUFVfU1RBVElDREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX0RVQ0FUSV9TVEFUREVQX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0RVQ0FUSV9TVEFUREVQX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX1NUQVRERVBfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IENNX1NIQURPV19GUkVRX0NPTkZJRzFfUkVTVE9SRSwgQ01fU0hBRE9XX0ZSRVFfQ09ORklHMSAqLwotI2RlZmluZSBPTUFQNDQzMF9GUkVRX1VQREFURV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9GUkVRX1VQREFURV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0ZSRVFfVVBEQVRFX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBDTV9MM18yX0RZTkFNSUNERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfR0ZYX0RZTkRFUF9TSElGVAkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfR0ZYX0RZTkRFUF9TSElGVAkJCQkxMAogI2RlZmluZSBPTUFQNDQzMF9HRlhfRFlOREVQX01BU0sJCQkJQklURklFTEQoMTAsIDEwKQogCiAvKiBVc2VkIGJ5IENNX0RVQ0FUSV9TVEFUSUNERVAsIENNX01QVV9TVEFUSUNERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfR0ZYX1NUQVRERVBfU0hJRlQJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0dGWF9TVEFUREVQX1NISUZUCQkJCTEwCiAjZGVmaW5lIE9NQVA0NDMwX0dGWF9TVEFUREVQX01BU0sJCQkJQklURklFTEQoMTAsIDEwKQogCiAvKiBVc2VkIGJ5IENNX1NIQURPV19GUkVRX0NPTkZJRzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfR1BNQ19GUkVRX1VQREFURV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9HUE1DX0ZSRVFfVVBEQVRFX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfR1BNQ19GUkVRX1VQREFURV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RJVl9NNF9EUExMX1BFUiwgQ01fRElWX000X0RQTExfQ09SRV9SRVNUT1JFLAogICogQ01fRElWX000X0RQTExfQ09SRSwgQ01fRElWX000X0RQTExfRERSUEhZLCBDTV9ESVZfTTRfRFBMTF9JVkEKICAqLwotI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMV9ESVZfU0hJRlQJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMV9ESVZfU0hJRlQJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQxX0RJVl9NQVNLCQkJQklURklFTEQoMCwgNCkKIAogLyoKICAqIFVzZWQgYnkgQ01fRElWX000X0RQTExfUEVSLCBDTV9ESVZfTTRfRFBMTF9DT1JFX1JFU1RPUkUsCiAgKiBDTV9ESVZfTTRfRFBMTF9DT1JFLCBDTV9ESVZfTTRfRFBMTF9ERFJQSFksIENNX0RJVl9NNF9EUExMX0lWQQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQxX0RJVkNIQUNLX1NISUZUCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMV9ESVZDSEFDS19TSElGVAkJNQogI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMV9ESVZDSEFDS19NQVNLCQlCSVRGSUVMRCg1LCA1KQogCiAvKgogICogVXNlZCBieSBDTV9ESVZfTTRfRFBMTF9QRVIsIENNX0RJVl9NNF9EUExMX0NPUkVfUkVTVE9SRSwKICAqIENNX0RJVl9NNF9EUExMX0NPUkUsIENNX0RJVl9NNF9EUExMX0REUlBIWSwgQ01fRElWX000X0RQTExfSVZBCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDFfR0FURV9DVFJMX1NISUZUCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMV9HQVRFX0NUUkxfU0hJRlQJCTgKICNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDFfR0FURV9DVFJMX01BU0sJCUJJVEZJRUxEKDgsIDgpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RJVl9NNF9EUExMX1BFUiwgQ01fRElWX000X0RQTExfQ09SRV9SRVNUT1JFLAogICogQ01fRElWX000X0RQTExfQ09SRSwgQ01fRElWX000X0RQTExfRERSUEhZLCBDTV9ESVZfTTRfRFBMTF9JVkEKICAqLwotI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMV9QV0ROX1NISUZUCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQxX1BXRE5fU0hJRlQJCQkxMgogI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMV9QV0ROX01BU0sJCQlCSVRGSUVMRCgxMiwgMTIpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RJVl9NNV9EUExMX1BFUiwgQ01fRElWX001X0RQTExfQ09SRV9SRVNUT1JFLAogICogQ01fRElWX001X0RQTExfQ09SRSwgQ01fRElWX001X0RQTExfRERSUEhZLCBDTV9ESVZfTTVfRFBMTF9JVkEKICAqLwotI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMl9ESVZfU0hJRlQJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMl9ESVZfU0hJRlQJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQyX0RJVl9NQVNLCQkJQklURklFTEQoMCwgNCkKIAogLyoKICAqIFVzZWQgYnkgQ01fRElWX001X0RQTExfUEVSLCBDTV9ESVZfTTVfRFBMTF9DT1JFX1JFU1RPUkUsCiAgKiBDTV9ESVZfTTVfRFBMTF9DT1JFLCBDTV9ESVZfTTVfRFBMTF9ERFJQSFksIENNX0RJVl9NNV9EUExMX0lWQQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQyX0RJVkNIQUNLX1NISUZUCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMl9ESVZDSEFDS19TSElGVAkJNQogI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMl9ESVZDSEFDS19NQVNLCQlCSVRGSUVMRCg1LCA1KQogCiAvKgogICogVXNlZCBieSBDTV9ESVZfTTVfRFBMTF9QRVIsIENNX0RJVl9NNV9EUExMX0NPUkVfUkVTVE9SRSwKICAqIENNX0RJVl9NNV9EUExMX0NPUkUsIENNX0RJVl9NNV9EUExMX0REUlBIWSwgQ01fRElWX001X0RQTExfSVZBCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDJfR0FURV9DVFJMX1NISUZUCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMl9HQVRFX0NUUkxfU0hJRlQJCTgKICNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDJfR0FURV9DVFJMX01BU0sJCUJJVEZJRUxEKDgsIDgpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RJVl9NNV9EUExMX1BFUiwgQ01fRElWX001X0RQTExfQ09SRV9SRVNUT1JFLAogICogQ01fRElWX001X0RQTExfQ09SRSwgQ01fRElWX001X0RQTExfRERSUEhZLCBDTV9ESVZfTTVfRFBMTF9JVkEKICAqLwotI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMl9QV0ROX1NISUZUCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQyX1BXRE5fU0hJRlQJCQkxMgogI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUMl9QV0ROX01BU0sJCQlCSVRGSUVMRCgxMiwgMTIpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RJVl9NNl9EUExMX1BFUiwgQ01fRElWX002X0RQTExfQ09SRV9SRVNUT1JFLAogICogQ01fRElWX002X0RQTExfQ09SRSwgQ01fRElWX002X0RQTExfRERSUEhZCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDNfRElWX1NISUZUCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDNfRElWX1NISUZUCQkJMAogI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUM19ESVZfTUFTSwkJCUJJVEZJRUxEKDAsIDQpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RJVl9NNl9EUExMX1BFUiwgQ01fRElWX002X0RQTExfQ09SRV9SRVNUT1JFLAogICogQ01fRElWX002X0RQTExfQ09SRSwgQ01fRElWX002X0RQTExfRERSUEhZCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDNfRElWQ0hBQ0tfU0hJRlQJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQzX0RJVkNIQUNLX1NISUZUCQk1CiAjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQzX0RJVkNIQUNLX01BU0sJCUJJVEZJRUxEKDUsIDUpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RJVl9NNl9EUExMX1BFUiwgQ01fRElWX002X0RQTExfQ09SRV9SRVNUT1JFLAogICogQ01fRElWX002X0RQTExfQ09SRSwgQ01fRElWX002X0RQTExfRERSUEhZCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDNfR0FURV9DVFJMX1NISUZUCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUM19HQVRFX0NUUkxfU0hJRlQJCTgKICNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDNfR0FURV9DVFJMX01BU0sJCUJJVEZJRUxEKDgsIDgpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RJVl9NNl9EUExMX1BFUiwgQ01fRElWX002X0RQTExfQ09SRV9SRVNUT1JFLAogICogQ01fRElWX002X0RQTExfQ09SRSwgQ01fRElWX002X0RQTExfRERSUEhZCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDNfUFdETl9TSElGVAkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUM19QV0ROX1NISUZUCQkJMTIKICNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDNfUFdETl9NQVNLCQkJQklURklFTEQoMTIsIDEyKQogCiAvKgogICogVXNlZCBieSBDTV9ESVZfTTdfRFBMTF9QRVIsIENNX0RJVl9NN19EUExMX0NPUkVfUkVTVE9SRSwKICAqIENNX0RJVl9NN19EUExMX0NPUkUKICAqLwotI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUNF9ESVZfU0hJRlQJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUNF9ESVZfU0hJRlQJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQ0X0RJVl9NQVNLCQkJQklURklFTEQoMCwgNCkKIAogLyoKICAqIFVzZWQgYnkgQ01fRElWX003X0RQTExfUEVSLCBDTV9ESVZfTTdfRFBMTF9DT1JFX1JFU1RPUkUsCiAgKiBDTV9ESVZfTTdfRFBMTF9DT1JFCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDRfRElWQ0hBQ0tfU0hJRlQJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQ0X0RJVkNIQUNLX1NISUZUCQk1CiAjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQ0X0RJVkNIQUNLX01BU0sJCUJJVEZJRUxEKDUsIDUpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RJVl9NN19EUExMX1BFUiwgQ01fRElWX003X0RQTExfQ09SRV9SRVNUT1JFLAogICogQ01fRElWX003X0RQTExfQ09SRQogICovCi0jZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQ0X0dBVEVfQ1RSTF9TSElGVAkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfSFNESVZJREVSX0NMS09VVDRfR0FURV9DVFJMX1NISUZUCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQ0X0dBVEVfQ1RSTF9NQVNLCQlCSVRGSUVMRCg4LCA4KQogCiAvKgogICogVXNlZCBieSBDTV9ESVZfTTdfRFBMTF9QRVIsIENNX0RJVl9NN19EUExMX0NPUkVfUkVTVE9SRSwKICAqIENNX0RJVl9NN19EUExMX0NPUkUKICAqLwotI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUNF9QV0ROX1NISUZUCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX0hTRElWSURFUl9DTEtPVVQ0X1BXRE5fU0hJRlQJCQkxMgogI2RlZmluZSBPTUFQNDQzMF9IU0RJVklERVJfQ0xLT1VUNF9QV0ROX01BU0sJCQlCSVRGSUVMRCgxMiwgMTIpCiAKIC8qCkBAIC05NjIsMjIgKzk2MiwyMiBAQAogICogQ00xX0FCRV9USU1FUjZfQ0xLQ1RSTCwgQ00xX0FCRV9USU1FUjdfQ0xLQ1RSTCwgQ00xX0FCRV9USU1FUjhfQ0xLQ1RSTCwKICAqIENNMV9BQkVfV0RUM19DTEtDVFJMLCBDTV9DTTFfUFJPRklMSU5HX0NMS0NUUkwKICAqLwotI2RlZmluZSBPTUFQNDQzMF9JRExFU1RfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9JRExFU1RfU0hJRlQJCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX0lETEVTVF9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMTcpCiAKIC8qIFVzZWQgYnkgQ01fRFVDQVRJX0RZTkFNSUNERVAsIENNX0wzXzJfRFlOQU1JQ0RFUCwgQ01fTDRDRkdfRFlOQU1JQ0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9JU1NfRFlOREVQX1NISUZUCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0lTU19EWU5ERVBfU0hJRlQJCQkJOQogI2RlZmluZSBPTUFQNDQzMF9JU1NfRFlOREVQX01BU0sJCQkJQklURklFTEQoOSwgOSkKIAogLyoKICAqIFVzZWQgYnkgQ01fRFVDQVRJX1NUQVRJQ0RFUCwgQ01fU0RNQV9TVEFUSUNERVAsIENNX1NETUFfU1RBVElDREVQX1JFU1RPUkUsCiAgKiBDTV9NUFVfU1RBVElDREVQLCBDTV9URVNMQV9TVEFUSUNERVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9JU1NfU1RBVERFUF9TSElGVAkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9JU1NfU1RBVERFUF9TSElGVAkJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX0lTU19TVEFUREVQX01BU0sJCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBDTV9MM18yX0RZTkFNSUNERVAsIENNX1RFU0xBX0RZTkFNSUNERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSVZBSERfRFlOREVQX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX0lWQUhEX0RZTkRFUF9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX0lWQUhEX0RZTkRFUF9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qCkBAIC05ODYsMjUgKzk4NiwyNSBAQAogICogQ01fU0RNQV9TVEFUSUNERVBfUkVTVE9SRSwgQ01fRFNTX1NUQVRJQ0RFUCwgQ01fTVBVX1NUQVRJQ0RFUCwKICAqIENNX1RFU0xBX1NUQVRJQ0RFUAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0lWQUhEX1NUQVRERVBfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfSVZBSERfU1RBVERFUF9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX0lWQUhEX1NUQVRERVBfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IENNX0wzXzJfRFlOQU1JQ0RFUCwgQ01fTDRDRkdfRFlOQU1JQ0RFUCwgQ01fTDRQRVJfRFlOQU1JQ0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9MM0lOSVRfRFlOREVQX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX0wzSU5JVF9EWU5ERVBfU0hJRlQJCQkJNwogI2RlZmluZSBPTUFQNDQzMF9MM0lOSVRfRFlOREVQX01BU0sJCQkJQklURklFTEQoNywgNykKIAogLyoKICAqIFVzZWQgYnkgQ01fRDJEX1NUQVRJQ0RFUCwgQ01fRFVDQVRJX1NUQVRJQ0RFUCwgQ01fU0RNQV9TVEFUSUNERVAsCiAgKiBDTV9TRE1BX1NUQVRJQ0RFUF9SRVNUT1JFLCBDTV9NUFVfU1RBVElDREVQLCBDTV9URVNMQV9TVEFUSUNERVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9MM0lOSVRfU1RBVERFUF9TSElGVAkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9MM0lOSVRfU1RBVERFUF9TSElGVAkJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX0wzSU5JVF9TVEFUREVQX01BU0sJCQkJQklURklFTEQoNywgNykKIAogLyoKICAqIFVzZWQgYnkgQ01fTDNfMl9EWU5BTUlDREVQLCBDTV9MNENGR19EWU5BTUlDREVQLCBDTV9MM0lOSVRfRFlOQU1JQ0RFUCwKICAqIENNX0RTU19EWU5BTUlDREVQLCBDTV9NUFVfRFlOQU1JQ0RFUCwgQ01fVEVTTEFfRFlOQU1JQ0RFUAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0wzXzFfRFlOREVQX1NISUZUCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX0wzXzFfRFlOREVQX1NISUZUCQkJCTUKICNkZWZpbmUgT01BUDQ0MzBfTDNfMV9EWU5ERVBfTUFTSwkJCQlCSVRGSUVMRCg1LCA1KQogCiAvKgpAQCAtMTAxMyw3ICsxMDEzLDcgQEAKICAqIENNX1NETUFfU1RBVElDREVQX1JFU1RPUkUsIENNX0lWQUhEX1NUQVRJQ0RFUCwgQ01fRFNTX1NUQVRJQ0RFUCwKICAqIENNX01QVV9TVEFUSUNERVAsIENNX1RFU0xBX1NUQVRJQ0RFUAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0wzXzFfU1RBVERFUF9TSElGVAkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9MM18xX1NUQVRERVBfU0hJRlQJCQkJNQogI2RlZmluZSBPTUFQNDQzMF9MM18xX1NUQVRERVBfTUFTSwkJCQlCSVRGSUVMRCg1LCA1KQogCiAvKgpAQCAtMTAyMiw3ICsxMDIyLDcgQEAKICAqIENNX0dGWF9EWU5BTUlDREVQLCBDTV9MNFNFQ19EWU5BTUlDREVQLCBDTV9MM0lOSVRfRFlOQU1JQ0RFUCwKICAqIENNX0NBTV9EWU5BTUlDREVQLCBDTV9JVkFIRF9EWU5BTUlDREVQCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTDNfMl9EWU5ERVBfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfTDNfMl9EWU5ERVBfU0hJRlQJCQkJNgogI2RlZmluZSBPTUFQNDQzMF9MM18yX0RZTkRFUF9NQVNLCQkJCUJJVEZJRUxEKDYsIDYpCiAKIC8qCkBAIC0xMDMxLDExICsxMDMxLDExIEBACiAgKiBDTV9TRE1BX1NUQVRJQ0RFUF9SRVNUT1JFLCBDTV9JVkFIRF9TVEFUSUNERVAsIENNX0RTU19TVEFUSUNERVAsCiAgKiBDTV9NUFVfU1RBVElDREVQLCBDTV9URVNMQV9TVEFUSUNERVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9MM18yX1NUQVRERVBfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfTDNfMl9TVEFUREVQX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfTDNfMl9TVEFUREVQX01BU0sJCQkJQklURklFTEQoNiwgNikKIAogLyogVXNlZCBieSBDTV9MM18xX0RZTkFNSUNERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTDRDRkdfRFlOREVQX1NISUZUCQkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9MNENGR19EWU5ERVBfU0hJRlQJCQkJMTIKICNkZWZpbmUgT01BUDQ0MzBfTDRDRkdfRFlOREVQX01BU0sJCQkJQklURklFTEQoMTIsIDEyKQogCiAvKgpAQCAtMTA0MywxMSArMTA0MywxMSBAQAogICogQ01fTDNJTklUX1NUQVRJQ0RFUCwgQ01fU0RNQV9TVEFUSUNERVBfUkVTVE9SRSwgQ01fTVBVX1NUQVRJQ0RFUCwKICAqIENNX1RFU0xBX1NUQVRJQ0RFUAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0w0Q0ZHX1NUQVRERVBfU0hJRlQJCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX0w0Q0ZHX1NUQVRERVBfU0hJRlQJCQkJMTIKICNkZWZpbmUgT01BUDQ0MzBfTDRDRkdfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDEyLCAxMikKIAogLyogVXNlZCBieSBDTV9MM18yX0RZTkFNSUNERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTDRQRVJfRFlOREVQX1NISUZUCQkJCSgxIDw8IDEzKQorI2RlZmluZSBPTUFQNDQzMF9MNFBFUl9EWU5ERVBfU0hJRlQJCQkJMTMKICNkZWZpbmUgT01BUDQ0MzBfTDRQRVJfRFlOREVQX01BU0sJCQkJQklURklFTEQoMTMsIDEzKQogCiAvKgpAQCAtMTA1NSwzNiArMTA1NSwzNiBAQAogICogQ01fTDRTRUNfU1RBVElDREVQLCBDTV9MM0lOSVRfU1RBVElDREVQLCBDTV9TRE1BX1NUQVRJQ0RFUF9SRVNUT1JFLAogICogQ01fTVBVX1NUQVRJQ0RFUCwgQ01fVEVTTEFfU1RBVElDREVQCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTDRQRVJfU1RBVERFUF9TSElGVAkJCQkoMSA8PCAxMykKKyNkZWZpbmUgT01BUDQ0MzBfTDRQRVJfU1RBVERFUF9TSElGVAkJCQkxMwogI2RlZmluZSBPTUFQNDQzMF9MNFBFUl9TVEFUREVQX01BU0sJCQkJQklURklFTEQoMTMsIDEzKQogCiAvKiBVc2VkIGJ5IENNX0wzXzJfRFlOQU1JQ0RFUCwgQ01fTDRQRVJfRFlOQU1JQ0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9MNFNFQ19EWU5ERVBfU0hJRlQJCQkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVA0NDMwX0w0U0VDX0RZTkRFUF9TSElGVAkJCQkxNAogI2RlZmluZSBPTUFQNDQzMF9MNFNFQ19EWU5ERVBfTUFTSwkJCQlCSVRGSUVMRCgxNCwgMTQpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RVQ0FUSV9TVEFUSUNERVAsIENNX1NETUFfU1RBVElDREVQLCBDTV9MM0lOSVRfU1RBVElDREVQLAogICogQ01fU0RNQV9TVEFUSUNERVBfUkVTVE9SRSwgQ01fTVBVX1NUQVRJQ0RFUAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0w0U0VDX1NUQVRERVBfU0hJRlQJCQkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVA0NDMwX0w0U0VDX1NUQVRERVBfU0hJRlQJCQkJMTQKICNkZWZpbmUgT01BUDQ0MzBfTDRTRUNfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDE0LCAxNCkKIAogLyogVXNlZCBieSBDTV9MNENGR19EWU5BTUlDREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX0w0V0tVUF9EWU5ERVBfU0hJRlQJCQkJKDEgPDwgMTUpCisjZGVmaW5lIE9NQVA0NDMwX0w0V0tVUF9EWU5ERVBfU0hJRlQJCQkJMTUKICNkZWZpbmUgT01BUDQ0MzBfTDRXS1VQX0RZTkRFUF9NQVNLCQkJCUJJVEZJRUxEKDE1LCAxNSkKIAogLyoKICAqIFVzZWQgYnkgQ01fRFVDQVRJX1NUQVRJQ0RFUCwgQ01fU0RNQV9TVEFUSUNERVAsIENNX0wzSU5JVF9TVEFUSUNERVAsCiAgKiBDTV9TRE1BX1NUQVRJQ0RFUF9SRVNUT1JFLCBDTV9NUFVfU1RBVElDREVQLCBDTV9URVNMQV9TVEFUSUNERVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9MNFdLVVBfU1RBVERFUF9TSElGVAkJCQkoMSA8PCAxNSkKKyNkZWZpbmUgT01BUDQ0MzBfTDRXS1VQX1NUQVRERVBfU0hJRlQJCQkJMTUKICNkZWZpbmUgT01BUDQ0MzBfTDRXS1VQX1NUQVRERVBfTUFTSwkJCQlCSVRGSUVMRCgxNSwgMTUpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0QyRF9EWU5BTUlDREVQLCBDTV9MM18xX0RZTkFNSUNERVAsIENNX0w0Q0ZHX0RZTkFNSUNERVAsCiAgKiBDTV9NUFVfRFlOQU1JQ0RFUAogICovCi0jZGVmaW5lIE9NQVA0NDMwX01FTUlGX0RZTkRFUF9TSElGVAkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9NRU1JRl9EWU5ERVBfU0hJRlQJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9NRU1JRl9EWU5ERVBfTUFTSwkJCQlCSVRGSUVMRCg0LCA0KQogCiAvKgpAQCAtMTA5Myw3ICsxMDkzLDcgQEAKICAqIENNX1NETUFfU1RBVElDREVQX1JFU1RPUkUsIENNX0lWQUhEX1NUQVRJQ0RFUCwgQ01fRFNTX1NUQVRJQ0RFUCwKICAqIENNX01QVV9TVEFUSUNERVAsIENNX1RFU0xBX1NUQVRJQ0RFUAogICovCi0jZGVmaW5lIE9NQVA0NDMwX01FTUlGX1NUQVRERVBfU0hJRlQJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfTUVNSUZfU1RBVERFUF9TSElGVAkJCQk0CiAjZGVmaW5lIE9NQVA0NDMwX01FTUlGX1NUQVRERVBfTUFTSwkJCQlCSVRGSUVMRCg0LCA0KQogCiAvKgpAQCAtMTEwMyw3ICsxMTAzLDcgQEAKICAqIENNX1NTQ19NT0RGUkVRRElWX0RQTExfRERSUEhZLCBDTV9TU0NfTU9ERlJFUURJVl9EUExMX0lWQSwKICAqIENNX1NTQ19NT0RGUkVRRElWX0RQTExfTVBVCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTU9ERlJFUURJVl9FWFBPTkVOVF9TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX01PREZSRVFESVZfRVhQT05FTlRfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX01PREZSRVFESVZfRVhQT05FTlRfTUFTSwkJCUJJVEZJRUxEKDgsIDEwKQogCiAvKgpAQCAtMTExMyw3ICsxMTEzLDcgQEAKICAqIENNX1NTQ19NT0RGUkVRRElWX0RQTExfRERSUEhZLCBDTV9TU0NfTU9ERlJFUURJVl9EUExMX0lWQSwKICAqIENNX1NTQ19NT0RGUkVRRElWX0RQTExfTVBVCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTU9ERlJFUURJVl9NQU5USVNTQV9TSElGVAkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX01PREZSRVFESVZfTUFOVElTU0FfU0hJRlQJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX01PREZSRVFESVZfTUFOVElTU0FfTUFTSwkJCUJJVEZJRUxEKDAsIDYpCiAKIC8qCkBAIC0xMTY5LDIzICsxMTY5LDIzIEBACiAgKiBDTTFfQUJFX1RJTUVSNl9DTEtDVFJMLCBDTTFfQUJFX1RJTUVSN19DTEtDVFJMLCBDTTFfQUJFX1RJTUVSOF9DTEtDVFJMLAogICogQ00xX0FCRV9XRFQzX0NMS0NUUkwsIENNX0NNMV9QUk9GSUxJTkdfQ0xLQ1RSTAogICovCi0jZGVmaW5lIE9NQVA0NDMwX01PRFVMRU1PREVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfTU9EVUxFTU9ERV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX01PRFVMRU1PREVfTUFTSwkJCQlCSVRGSUVMRCgwLCAxKQogCiAvKiBVc2VkIGJ5IENNX0RTU19EU1NfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fNDhNSFpfQ0xLX1NISUZUCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOXzQ4TUhaX0NMS19TSElGVAkJCTkKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOXzQ4TUhaX0NMS19NQVNLCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBDTV9XS1VQX0JBTkRHQVBfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fQkdBUF8zMktfU0hJRlQJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fQkdBUF8zMktfU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9CR0FQXzMyS19NQVNLCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfVVNCUEhZT0NQMlNDUF9DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9DTEszMktfU0hJRlQJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0NMSzMyS19TSElGVAkJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9DTEszMktfTUFTSwkJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IENNX0NBTV9JU1NfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fQ1RSTENMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9DVFJMQ0xLX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fQ1RSTENMS19NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qCkBAIC0xMTk1LDExOSArMTE5NSwxMTkgQEAKICAqIENNX0w0UEVSX0dQSU8zX0NMS0NUUkxfUkVTVE9SRSwgQ01fTDRQRVJfR1BJTzRfQ0xLQ1RSTF9SRVNUT1JFLAogICogQ01fTDRQRVJfR1BJTzVfQ0xLQ1RSTF9SRVNUT1JFLCBDTV9MNFBFUl9HUElPNl9DTEtDVFJMX1JFU1RPUkUKICAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fREJDTEtfU0hJRlQJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0RCQ0xLX1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0RCQ0xLX01BU0sJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9NRU1JRl9ETExfQ0xLQ1RSTCwgQ01fTUVNSUZfRExMX0hfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRExMX0NMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9ETExfQ0xLX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRExMX0NMS19NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fRFNTX0RTU19DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9EU1NDTEtfU0hJRlQJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0RTU0NMS19TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9EU1NDTEtfTUFTSwkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNMV9BQkVfU0xJTUJVU19DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9GQ0xLMF9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRkNMSzBfU0hJRlQJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRkNMSzBfTUFTSwkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNMV9BQkVfU0xJTUJVU19DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9GQ0xLMV9TSElGVAkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRkNMSzFfU0hJRlQJCQkJOQogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRkNMSzFfTUFTSwkJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IENNMV9BQkVfU0xJTUJVU19DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9GQ0xLMl9TSElGVAkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0ZDTEsyX1NISUZUCQkJCTEwCiAjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9GQ0xLMl9NQVNLCQkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTCwgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRlVOQzQ4TUNMS19TSElGVAkJCSgxIDw8IDE1KQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fRlVOQzQ4TUNMS19TSElGVAkJCTE1CiAjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9GVU5DNDhNQ0xLX01BU0sJCQlCSVRGSUVMRCgxNSwgMTUpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkwsIENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0hTSUM0ODBNX1AxX0NMS19TSElGVAkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9IU0lDNDgwTV9QMV9DTEtfU0hJRlQJCTEzCiAjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9IU0lDNDgwTV9QMV9DTEtfTUFTSwkJCUJJVEZJRUxEKDEzLCAxMykKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTCwgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fSFNJQzQ4ME1fUDJfQ0xLX1NISUZUCQkoMSA8PCAxNCkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0hTSUM0ODBNX1AyX0NMS19TSElGVAkJMTQKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0hTSUM0ODBNX1AyX0NMS19NQVNLCQkJQklURklFTEQoMTQsIDE0KQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMLCBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9IU0lDNjBNX1AxX0NMS19TSElGVAkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fSFNJQzYwTV9QMV9DTEtfU0hJRlQJCQkxMQogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fSFNJQzYwTV9QMV9DTEtfTUFTSwkJCUJJVEZJRUxEKDExLCAxMSkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTCwgQ01fTDNJTklUX1VTQl9IT1NUX0NMS0NUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fSFNJQzYwTV9QMl9DTEtfU0hJRlQJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0hTSUM2ME1fUDJfQ0xLX1NISUZUCQkJMTIKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX0hTSUM2ME1fUDJfQ0xLX01BU0sJCQlCSVRGSUVMRCgxMiwgMTIpCiAKIC8qIFVzZWQgYnkgQ01fTDRQRVJfU0xJTUJVUzJfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fUEVSMjRNQ19HRkNMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9QRVIyNE1DX0dGQ0xLX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fUEVSMjRNQ19HRkNMS19NQVNLCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9MNFBFUl9TTElNQlVTMl9DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9QRVJBQkUyNE1fR0ZDTEtfU0hJRlQJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9QRVJBQkUyNE1fR0ZDTEtfU0hJRlQJCTkKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1BFUkFCRTI0TV9HRkNMS19NQVNLCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfVVNCUEhZT0NQMlNDUF9DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9QSFlfNDhNX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1BIWV80OE1fU0hJRlQJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9QSFlfNDhNX01BU0sJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9MNFBFUl9TTElNQlVTMl9DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9TTElNQlVTX0NMS19TSElGVAkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fU0xJTUJVU19DTEtfU0hJRlQJCQkxMAogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fU0xJTUJVU19DTEtfTUFTSwkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogUmVuYW1lZCBmcm9tIE9QVEZDTEtFTl9TTElNQlVTX0NMSyBVc2VkIGJ5IENNMV9BQkVfU0xJTUJVU19DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9TTElNQlVTX0NMS18xMV8xMV9TSElGVAkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9TTElNQlVTX0NMS18xMV8xMV9TSElGVAkJMTEKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1NMSU1CVVNfQ0xLXzExXzExX01BU0sJCUJJVEZJRUxEKDExLCAxMSkKIAogLyogVXNlZCBieSBDTV9EU1NfRFNTX0NMS0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1NZU19DTEtfU0hJRlQJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1NZU19DTEtfU0hJRlQJCQkxMAogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fU1lTX0NMS19NQVNLCQkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBDTV9EU1NfRFNTX0NMS0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1RWX0NMS19TSElGVAkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1RWX0NMS19TSElGVAkJCQkxMQogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVFZfQ0xLX01BU0sJCQkJQklURklFTEQoMTEsIDExKQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9VTklQUk8xX0NMS0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1RYUEhZQ0xLX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1RYUEhZQ0xLX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVFhQSFlDTEtfTUFTSwkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgQ01fTDNJTklUX1VTQl9UTExfQ0xLQ1RSTCwgQ01fTDNJTklUX1VTQl9UTExfQ0xLQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VU0JfQ0gwX0NMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VU0JfQ0gwX0NMS19TSElGVAkJCTgKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1VTQl9DSDBfQ0xLX01BU0sJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9VU0JfVExMX0NMS0NUUkwsIENNX0wzSU5JVF9VU0JfVExMX0NMS0NUUkxfUkVTVE9SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVVNCX0NIMV9DTEtfU0hJRlQJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVVNCX0NIMV9DTEtfU0hJRlQJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VU0JfQ0gxX0NMS19NQVNLCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfVVNCX1RMTF9DTEtDVFJMLCBDTV9MM0lOSVRfVVNCX1RMTF9DTEtDVFJMX1JFU1RPUkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1VTQl9DSDJfQ0xLX1NISUZUCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VU0JfQ0gyX0NMS19TSElGVAkJCTEwCiAjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VU0JfQ0gyX0NMS19NQVNLCQkJQklURklFTEQoMTAsIDEwKQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMLCBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VVE1JX1AxX0NMS19TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VVE1JX1AxX0NMS19TSElGVAkJCTgKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1VUTUlfUDFfQ0xLX01BU0sJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMLCBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VVE1JX1AyX0NMS19TSElGVAkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VVE1JX1AyX0NMS19TSElGVAkJCTkKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1VUTUlfUDJfQ0xLX01BU0sJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMLCBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTF9SRVNUT1JFICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9VVE1JX1AzX0NMS19TSElGVAkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVVRNSV9QM19DTEtfU0hJRlQJCQkxMAogI2RlZmluZSBPTUFQNDQzMF9PUFRGQ0xLRU5fVVRNSV9QM19DTEtfTUFTSwkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBDTV9MM0lOSVRfVVNCX09UR19DTEtDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9YQ0xLX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX09QVEZDTEtFTl9YQ0xLX1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfT1BURkNMS0VOX1hDTEtfTUFTSwkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IENNX0VNVV9PVkVSUklERV9EUExMX1BFUiwgQ01fRU1VX09WRVJSSURFX0RQTExfQ09SRSAqLwotI2RlZmluZSBPTUFQNDQzMF9PVkVSUklERV9FTkFCTEVfU0hJRlQJCQkJKDEgPDwgMTkpCisjZGVmaW5lIE9NQVA0NDMwX09WRVJSSURFX0VOQUJMRV9TSElGVAkJCQkxOQogI2RlZmluZSBPTUFQNDQzMF9PVkVSUklERV9FTkFCTEVfTUFTSwkJCQlCSVRGSUVMRCgxOSwgMTkpCiAKIC8qIFVzZWQgYnkgQ01fQ0xLU0VMX0FCRSAqLwotI2RlZmluZSBPTUFQNDQzMF9QQURfQ0xLU19HQVRFX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1BBRF9DTEtTX0dBVEVfU0hJRlQJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9QQURfQ0xLU19HQVRFX01BU0sJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBDTV9DT1JFX0RWRlNfQ1VSUkVOVCwgQ01fSVZBX0RWRlNfQ1VSUkVOVCAqLwotI2RlZmluZSBPTUFQNDQzMF9QRVJGX0NVUlJFTlRfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUEVSRl9DVVJSRU5UX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfUEVSRl9DVVJSRU5UX01BU0sJCQkJQklURklFTEQoMCwgNykKIAogLyoKQEAgLTEzMTUsNjYgKzEzMTUsNjYgQEAKICAqIENNX0NPUkVfRFZGU19QRVJGNCwgQ01fSVZBX0RWRlNfUEVSRl9BQkUsIENNX0lWQV9EVkZTX1BFUkZfSVZBSEQsCiAgKiBDTV9JVkFfRFZGU19QRVJGX1RFU0xBCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUEVSRl9SRVFfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1BFUkZfUkVRX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1BFUkZfUkVRX01BU0sJCQkJCUJJVEZJRUxEKDAsIDcpCiAKIC8qIFVzZWQgYnkgQ01fRU1VX09WRVJSSURFX0RQTExfUEVSICovCi0jZGVmaW5lIE9NQVA0NDMwX1BFUl9EUExMX0VNVV9ESVZfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUEVSX0RQTExfRU1VX0RJVl9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1BFUl9EUExMX0VNVV9ESVZfTUFTSwkJCQlCSVRGSUVMRCgwLCA2KQogCiAvKiBVc2VkIGJ5IENNX0VNVV9PVkVSUklERV9EUExMX1BFUiAqLwotI2RlZmluZSBPTUFQNDQzMF9QRVJfRFBMTF9FTVVfTVVMVF9TSElGVAkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1BFUl9EUExMX0VNVV9NVUxUX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9QRVJfRFBMTF9FTVVfTVVMVF9NQVNLCQkJCUJJVEZJRUxEKDgsIDE4KQogCiAvKiBVc2VkIGJ5IENNX1JFU1RPUkVfU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUEhBU0UxX0NPTVBMRVRFRF9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9QSEFTRTFfQ09NUExFVEVEX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfUEhBU0UxX0NPTVBMRVRFRF9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgQ01fUkVTVE9SRV9TVCAqLwotI2RlZmluZSBPTUFQNDQzMF9QSEFTRTJBX0NPTVBMRVRFRF9TSElGVAkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1BIQVNFMkFfQ09NUExFVEVEX1NISUZUCQkJMQogI2RlZmluZSBPTUFQNDQzMF9QSEFTRTJBX0NPTVBMRVRFRF9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgQ01fUkVTVE9SRV9TVCAqLwotI2RlZmluZSBPTUFQNDQzMF9QSEFTRTJCX0NPTVBMRVRFRF9TSElGVAkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1BIQVNFMkJfQ09NUExFVEVEX1NISUZUCQkJMgogI2RlZmluZSBPTUFQNDQzMF9QSEFTRTJCX0NPTVBMRVRFRF9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgQ01fRU1VX0RFQlVHU1NfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9QTURfU1RNX01VWF9DVFJMX1NISUZUCQkJCSgxIDw8IDIwKQorI2RlZmluZSBPTUFQNDQzMF9QTURfU1RNX01VWF9DVFJMX1NISUZUCQkJCTIwCiAjZGVmaW5lIE9NQVA0NDMwX1BNRF9TVE1fTVVYX0NUUkxfTUFTSwkJCQlCSVRGSUVMRCgyMCwgMjEpCiAKIC8qIFVzZWQgYnkgQ01fRU1VX0RFQlVHU1NfQ0xLQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9QTURfVFJBQ0VfTVVYX0NUUkxfU0hJRlQJCQkoMSA8PCAyMikKKyNkZWZpbmUgT01BUDQ0MzBfUE1EX1RSQUNFX01VWF9DVFJMX1NISUZUCQkJMjIKICNkZWZpbmUgT01BUDQ0MzBfUE1EX1RSQUNFX01VWF9DVFJMX01BU0sJCQlCSVRGSUVMRCgyMiwgMjMpCiAKIC8qIFVzZWQgYnkgQ01fRFlOX0RFUF9QUkVTQ0FMICovCi0jZGVmaW5lIE9NQVA0NDMwX1BSRVNDQUxfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1BSRVNDQUxfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfUFJFU0NBTF9NQVNLCQkJCQlCSVRGSUVMRCgwLCA1KQogCiAvKiBVc2VkIGJ5IFJFVklTSU9OX0NNMiwgUkVWSVNJT05fQ00xICovCi0jZGVmaW5lIE9NQVA0NDMwX1JFVl9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUkVWX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1JFVl9NQVNLCQkJCQlCSVRGSUVMRCgwLCA3KQogCiAvKgogICogVXNlZCBieSBDTV9MM0lOSVRfVVNCX0hPU1RfQ0xLQ1RSTCwgQ01fTDNJTklUX1VTQl9UTExfQ0xLQ1RSTCwKICAqIENNX0wzSU5JVF9VU0JfSE9TVF9DTEtDVFJMX1JFU1RPUkUsIENNX0wzSU5JVF9VU0JfVExMX0NMS0NUUkxfUkVTVE9SRQogICovCi0jZGVmaW5lIE9NQVA0NDMwX1NBUl9NT0RFX1NISUZUCQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9TQVJfTU9ERV9TSElGVAkJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9TQVJfTU9ERV9NQVNLCQkJCQlCSVRGSUVMRCg0LCA0KQogCiAvKiBVc2VkIGJ5IENNX1NDQUxFX0ZDTEsgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU0NBTEVfRkNMS19TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9TQ0FMRV9GQ0xLX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfU0NBTEVfRkNMS19NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgQ01fTDRDRkdfRFlOQU1JQ0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9TRE1BX0RZTkRFUF9TSElGVAkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDQ0MzBfU0RNQV9EWU5ERVBfU0hJRlQJCQkJMTEKICNkZWZpbmUgT01BUDQ0MzBfU0RNQV9EWU5ERVBfTUFTSwkJCQlCSVRGSUVMRCgxMSwgMTEpCiAKIC8qIFVzZWQgYnkgQ01fRFVDQVRJX1NUQVRJQ0RFUCwgQ01fTVBVX1NUQVRJQ0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9TRE1BX1NUQVRERVBfU0hJRlQJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX1NETUFfU1RBVERFUF9TSElGVAkJCQkxMQogI2RlZmluZSBPTUFQNDQzMF9TRE1BX1NUQVRERVBfTUFTSwkJCQlCSVRGSUVMRCgxMSwgMTEpCiAKIC8qIFVzZWQgYnkgQ01fQ0xLU0VMX0FCRSAqLwotI2RlZmluZSBPTUFQNDQzMF9TTElNQlVTX0NMS19HQVRFX1NISUZUCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9TTElNQlVTX0NMS19HQVRFX1NISUZUCQkJCTEwCiAjZGVmaW5lIE9NQVA0NDMwX1NMSU1CVVNfQ0xLX0dBVEVfTUFTSwkJCQlCSVRGSUVMRCgxMCwgMTApCiAKIC8qCkBAIC0xMzkwLDcgKzEzOTAsNyBAQAogICogQ01fSVZBSERfSVZBSERfQ0xLQ1RSTCwgQ01fRFNTX0RFSVNTX0NMS0NUUkwsIENNX0RTU19EU1NfQ0xLQ1RSTCwKICAqIENNX01QVV9NUFVfQ0xLQ1RSTCwgQ01fVEVTTEFfVEVTTEFfQ0xLQ1RSTCwgQ00xX0FCRV9BRVNTX0NMS0NUUkwKICAqLwotI2RlZmluZSBPTUFQNDQzMF9TVEJZU1RfU0hJRlQJCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQNDQzMF9TVEJZU1RfU0hJRlQJCQkJCTE4CiAjZGVmaW5lIE9NQVA0NDMwX1NUQllTVF9NQVNLCQkJCQlCSVRGSUVMRCgxOCwgMTgpCiAKIC8qCkBAIC0xMzk4LDExICsxMzk4LDExIEBACiAgKiBDTV9JRExFU1RfRFBMTF9BQkUsIENNX0lETEVTVF9EUExMX0NPUkUsIENNX0lETEVTVF9EUExMX0REUlBIWSwKICAqIENNX0lETEVTVF9EUExMX0lWQSwgQ01fSURMRVNUX0RQTExfTVBVCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU1RfRFBMTF9DTEtfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfU1RfRFBMTF9DTEtfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9TVF9EUExMX0NMS19NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgQ01fQ0xLRENPTERPX0RQTExfVVNCICovCi0jZGVmaW5lIE9NQVA0NDMwX1NUX0RQTExfQ0xLRENPTERPX1NISUZUCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfU1RfRFBMTF9DTEtEQ09MRE9fU0hJRlQJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX1NUX0RQTExfQ0xLRENPTERPX01BU0sJCQkJQklURklFTEQoOSwgOSkKIAogLyoKQEAgLTE0MTAsNTggKzE0MTAsNTggQEAKICAqIENNX0RJVl9NMl9EUExMX0FCRSwgQ01fRElWX00yX0RQTExfQ09SRSwgQ01fRElWX00yX0RQTExfRERSUEhZLAogICogQ01fRElWX00yX0RQTExfTVBVCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU1RfRFBMTF9DTEtPVVRfU0hJRlQJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfU1RfRFBMTF9DTEtPVVRfU0hJRlQJCQkJOQogI2RlZmluZSBPTUFQNDQzMF9TVF9EUExMX0NMS09VVF9NQVNLCQkJCUJJVEZJRUxEKDksIDkpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RJVl9NM19EUExMX1BFUiwgQ01fRElWX00zX0RQTExfQ09SRV9SRVNUT1JFLCBDTV9ESVZfTTNfRFBMTF9BQkUsCiAgKiBDTV9ESVZfTTNfRFBMTF9DT1JFCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU1RfRFBMTF9DTEtPVVRISUZfU0hJRlQJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9TVF9EUExMX0NMS09VVEhJRl9TSElGVAkJCTkKICNkZWZpbmUgT01BUDQ0MzBfU1RfRFBMTF9DTEtPVVRISUZfTUFTSwkJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IENNX0RJVl9NMl9EUExMX1BFUiwgQ01fRElWX00yX0RQTExfVU5JUFJPLCBDTV9ESVZfTTJfRFBMTF9BQkUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU1RfRFBMTF9DTEtPVVRYMl9TSElGVAkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDQ0MzBfU1RfRFBMTF9DTEtPVVRYMl9TSElGVAkJCQkxMQogI2RlZmluZSBPTUFQNDQzMF9TVF9EUExMX0NMS09VVFgyX01BU0sJCQkJQklURklFTEQoMTEsIDExKQogCiAvKgogICogVXNlZCBieSBDTV9ESVZfTTRfRFBMTF9QRVIsIENNX0RJVl9NNF9EUExMX0NPUkVfUkVTVE9SRSwKICAqIENNX0RJVl9NNF9EUExMX0NPUkUsIENNX0RJVl9NNF9EUExMX0REUlBIWSwgQ01fRElWX000X0RQTExfSVZBCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU1RfSFNESVZJREVSX0NMS09VVDFfU0hJRlQJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9TVF9IU0RJVklERVJfQ0xLT1VUMV9TSElGVAkJCTkKICNkZWZpbmUgT01BUDQ0MzBfU1RfSFNESVZJREVSX0NMS09VVDFfTUFTSwkJCUJJVEZJRUxEKDksIDkpCiAKIC8qCiAgKiBVc2VkIGJ5IENNX0RJVl9NNV9EUExMX1BFUiwgQ01fRElWX001X0RQTExfQ09SRV9SRVNUT1JFLAogICogQ01fRElWX001X0RQTExfQ09SRSwgQ01fRElWX001X0RQTExfRERSUEhZLCBDTV9ESVZfTTVfRFBMTF9JVkEKICAqLwotI2RlZmluZSBPTUFQNDQzMF9TVF9IU0RJVklERVJfQ0xLT1VUMl9TSElGVAkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX1NUX0hTRElWSURFUl9DTEtPVVQyX1NISUZUCQkJOQogI2RlZmluZSBPTUFQNDQzMF9TVF9IU0RJVklERVJfQ0xLT1VUMl9NQVNLCQkJQklURklFTEQoOSwgOSkKIAogLyoKICAqIFVzZWQgYnkgQ01fRElWX002X0RQTExfUEVSLCBDTV9ESVZfTTZfRFBMTF9DT1JFX1JFU1RPUkUsCiAgKiBDTV9ESVZfTTZfRFBMTF9DT1JFLCBDTV9ESVZfTTZfRFBMTF9ERFJQSFkKICAqLwotI2RlZmluZSBPTUFQNDQzMF9TVF9IU0RJVklERVJfQ0xLT1VUM19TSElGVAkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX1NUX0hTRElWSURFUl9DTEtPVVQzX1NISUZUCQkJOQogI2RlZmluZSBPTUFQNDQzMF9TVF9IU0RJVklERVJfQ0xLT1VUM19NQVNLCQkJQklURklFTEQoOSwgOSkKIAogLyoKICAqIFVzZWQgYnkgQ01fRElWX003X0RQTExfUEVSLCBDTV9ESVZfTTdfRFBMTF9DT1JFX1JFU1RPUkUsCiAgKiBDTV9ESVZfTTdfRFBMTF9DT1JFCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU1RfSFNESVZJREVSX0NMS09VVDRfU0hJRlQJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9TVF9IU0RJVklERVJfQ0xLT1VUNF9TSElGVAkJCTkKICNkZWZpbmUgT01BUDQ0MzBfU1RfSFNESVZJREVSX0NMS09VVDRfTUFTSwkJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgQ01fU1lTX0NMS1NFTCAqLwotI2RlZmluZSBPTUFQNDQzMF9TWVNfQ0xLU0VMX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1NZU19DTEtTRUxfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9TWVNfQ0xLU0VMX01BU0sJCQkJQklURklFTEQoMCwgMikKIAogLyogVXNlZCBieSBDTV9MNENGR19EWU5BTUlDREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0RZTkRFUF9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9URVNMQV9EWU5ERVBfU0hJRlQJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9URVNMQV9EWU5ERVBfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IENNX0RVQ0FUSV9TVEFUSUNERVAsIENNX01QVV9TVEFUSUNERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfU1RBVERFUF9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9URVNMQV9TVEFUREVQX1NISUZUCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfU1RBVERFUF9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qCkBAIC0xNDY5LDYgKzE0NjksNiBAQAogICogQ01fTDNfMV9EWU5BTUlDREVQLCBDTV9MM18yX0RZTkFNSUNERVAsIENNX0w0Q0ZHX0RZTkFNSUNERVAsCiAgKiBDTV9MNFBFUl9EWU5BTUlDREVQLCBDTV9NUFVfRFlOQU1JQ0RFUCwgQ01fVEVTTEFfRFlOQU1JQ0RFUAogICovCi0jZGVmaW5lIE9NQVA0NDMwX1dJTkRPV1NJWkVfU0hJRlQJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX1dJTkRPV1NJWkVfU0hJRlQJCQkJMjQKICNkZWZpbmUgT01BUDQ0MzBfV0lORE9XU0laRV9NQVNLCQkJCUJJVEZJRUxEKDI0LCAyNykKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbS5oCmluZGV4IDkwYTQwODYuLjk0NzI4YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY20uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2NtLmgKQEAgLTY3LDcgKzY3LDggQEAKICNkZWZpbmUgQ01fQ0xLU0VMCQkJCQkweDAwNDAKICNkZWZpbmUgQ01fQ0xLU0VMMQkJCQkJQ01fQ0xLU0VMCiAjZGVmaW5lIENNX0NMS1NFTDIJCQkJCTB4MDA0NAotI2RlZmluZSBDTV9DTEtTVENUUkwJCQkJCTB4MDA0OAorI2RlZmluZSBPTUFQMl9DTV9DTEtTVENUUkwJCQkJMHgwMDQ4CisjZGVmaW5lIE9NQVA0X0NNX0NMS1NUQ1RSTAkJCQkweDAwMDAKIAogCiAvKiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgcmVnaXN0ZXJzICovCkBAIC04OCw3ICs4OSw3IEBACiAjZGVmaW5lIE9NQVAzNDMwX0NNX0NMS1NFTDFfUExMCQkJCUNNX0NMS1NFTAogI2RlZmluZSBPTUFQMzQzMF9DTV9DTEtTRUwyX1BMTAkJCQlDTV9DTEtTRUwyCiAjZGVmaW5lIE9NQVAzNDMwX0NNX1NMRUVQREVQCQkJCUNNX0NMS1NFTDIKLSNkZWZpbmUgT01BUDM0MzBfQ01fQ0xLU0VMMwkJCQlDTV9DTEtTVENUUkwKKyNkZWZpbmUgT01BUDM0MzBfQ01fQ0xLU0VMMwkJCQlPTUFQMl9DTV9DTEtTVENUUkwKICNkZWZpbmUgT01BUDM0MzBfQ01fQ0xLU1RTVAkJCQkweDAwNGMKICNkZWZpbmUgT01BUDM0MzBFUzJfQ01fQ0xLU0VMNAkJCQkweDAwNGMKICNkZWZpbmUgT01BUDM0MzBFUzJfQ01fQ0xLU0VMNQkJCQkweDAwNTAKQEAgLTEzOCw1ICsxMzksOCBAQAogLyogQ01fSURMRVNUX0dGWCAqLwogI2RlZmluZSBPTUFQX1NUX0dGWAkJCQkJKDEgPDwgMCkKIAorLyogQ01fSURMRVNUIGluZGljYXRvciAqLworI2RlZmluZSBPTUFQMjRYWF9DTV9JRExFU1RfVkFMCQkwCisjZGVmaW5lIE9NQVAzNFhYX0NNX0lETEVTVF9WQUwJCTEKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NvbnRyb2wuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29udHJvbC5jCmluZGV4IGNkZDFmMzUuLjQzZjhhMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY29udHJvbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY29udHJvbC5jCkBAIC0xNDAsNyArMTQwLDExIEBACiAKIHZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzX2NvbnRyb2woc3RydWN0IG9tYXBfZ2xvYmFscyAqb21hcDJfZ2xvYmFscykKIHsKLQlvbWFwMl9jdHJsX2Jhc2UgPSBvbWFwMl9nbG9iYWxzLT5jdHJsOworCS8qIFN0YXRpYyBtYXBwaW5nLCBuZXZlciByZWxlYXNlZCAqLworCWlmIChvbWFwMl9nbG9iYWxzLT5jdHJsKSB7CisJCW9tYXAyX2N0cmxfYmFzZSA9IGlvcmVtYXAob21hcDJfZ2xvYmFscy0+Y3RybCwgU1pfNEspOworCQlXQVJOX09OKCFvbWFwMl9jdHJsX2Jhc2UpOworCX0KIH0KIAogdm9pZCBfX2lvbWVtICpvbWFwX2N0cmxfYmFzZV9nZXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY3B1aWRsZTM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvY3B1aWRsZTM0eHguYwppbmRleCAxMmYwY2JmLi4zZDNkMDM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2NwdWlkbGUzNHh4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jcHVpZGxlMzR4eC5jCkBAIC00NSw2ICs0NSw4IEBACiAjZGVmaW5lIE9NQVAzX1NUQVRFX0M2IDUgLyogQzYgLSBNUFUgT0ZGICsgQ29yZSBSRVQgKi8KICNkZWZpbmUgT01BUDNfU1RBVEVfQzcgNiAvKiBDNyAtIE1QVSBPRkYgKyBDb3JlIE9GRiAqLwogCisjZGVmaW5lIE9NQVAzX1NUQVRFX01BWCBPTUFQM19TVEFURV9DNworCiBzdHJ1Y3Qgb21hcDNfcHJvY2Vzc29yX2N4IHsKIAl1OCB2YWxpZDsKIAl1OCB0eXBlOwpAQCAtNjAsNiArNjIsMzAgQEAKIHN0cnVjdCBvbWFwM19wcm9jZXNzb3JfY3ggY3VycmVudF9jeF9zdGF0ZTsKIHN0cnVjdCBwb3dlcmRvbWFpbiAqbXB1X3BkLCAqY29yZV9wZDsKIAorLyoKKyAqIFRoZSBsYXRlbmNpZXMvdGhyZXNob2xkcyBmb3IgdmFyaW91cyBDIHN0YXRlcyBoYXZlCisgKiB0byBiZSBjb25maWd1cmVkIGZyb20gdGhlIHJlc3BlY3RpdmUgYm9hcmQgZmlsZXMuCisgKiBUaGVzZSBhcmUgc29tZSBkZWZhdWx0IHZhbHVlcyAod2hpY2ggbWlnaHQgbm90IHByb3ZpZGUKKyAqIHRoZSBiZXN0IHBvd2VyIHNhdmluZ3MpIHVzZWQgb24gYm9hcmRzIHdoaWNoIGRvIG5vdAorICogcGFzcyB0aGVzZSBkZXRhaWxzIGZyb20gdGhlIGJvYXJkIGZpbGUuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgY3B1aWRsZV9wYXJhbXMgY3B1aWRsZV9wYXJhbXNfdGFibGVbXSA9IHsKKwkvKiBDMSAqLworCXsxLCAyLCAyLCA1fSwKKwkvKiBDMiAqLworCXsxLCAxMCwgMTAsIDMwfSwKKwkvKiBDMyAqLworCXsxLCA1MCwgNTAsIDMwMH0sCisJLyogQzQgKi8KKwl7MSwgMTUwMCwgMTgwMCwgNDAwMH0sCisJLyogQzUgKi8KKwl7MSwgMjUwMCwgNzUwMCwgMTIwMDB9LAorCS8qIEM2ICovCisJezEsIDMwMDAsIDg1MDAsIDE1MDAwfSwKKwkvKiBDNyAqLworCXsxLCAxMDAwMCwgMzAwMDAsIDMwMDAwMH0sCit9OworCiBzdGF0aWMgaW50IG9tYXAzX2lkbGVfYm1fY2hlY2sodm9pZCkKIHsKIAlpZiAoIW9tYXAzX2Nhbl9zbGVlcCgpKQpAQCAtMTA0LDEzICsxMzAsNiBAQAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJbG9jYWxfZmlxX2Rpc2FibGUoKTsKIAotCWlmICghZW5hYmxlX29mZl9tb2RlKSB7Ci0JCWlmIChtcHVfc3RhdGUgPCBQV1JETV9QT1dFUl9SRVQpCi0JCQltcHVfc3RhdGUgPSBQV1JETV9QT1dFUl9SRVQ7Ci0JCWlmIChjb3JlX3N0YXRlIDwgUFdSRE1fUE9XRVJfUkVUKQotCQkJY29yZV9zdGF0ZSA9IFBXUkRNX1BPV0VSX1JFVDsKLQl9Ci0KIAlwd3JkbV9zZXRfbmV4dF9wd3JzdChtcHVfcGQsIG1wdV9zdGF0ZSk7CiAJcHdyZG1fc2V0X25leHRfcHdyc3QoY29yZV9wZCwgY29yZV9zdGF0ZSk7CiAKQEAgLTE0MSw2ICsxNjAsNjcgQEAKIH0KIAogLyoqCisgKiBuZXh0X3ZhbGlkX3N0YXRlIC0gRmluZCBuZXh0IHZhbGlkIGMtc3RhdGUKKyAqIEBkZXY6IGNwdWlkbGUgZGV2aWNlCisgKiBAc3RhdGU6IEN1cnJlbnRseSBzZWxlY3RlZCBjLXN0YXRlCisgKgorICogSWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgdmFsaWQsIGl0IGlzIHJldHVybmVkIGJhY2sgdG8gdGhlIGNhbGxlci4KKyAqIEVsc2UsIHRoaXMgZnVuY3Rpb24gc2VhcmNoZXMgZm9yIGEgbG93ZXIgYy1zdGF0ZSB3aGljaCBpcyBzdGlsbAorICogdmFsaWQgKGFzIGRlZmluZWQgaW4gb21hcDNfcG93ZXJfc3RhdGVzW10pLgorICovCitzdGF0aWMgc3RydWN0IGNwdWlkbGVfc3RhdGUgKm5leHRfdmFsaWRfc3RhdGUoc3RydWN0IGNwdWlkbGVfZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqY3VycikKK3sKKwlzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqbmV4dCA9IE5VTEw7CisJc3RydWN0IG9tYXAzX3Byb2Nlc3Nvcl9jeCAqY3g7CisKKwljeCA9IChzdHJ1Y3Qgb21hcDNfcHJvY2Vzc29yX2N4ICopY3B1aWRsZV9nZXRfc3RhdGVkYXRhKGN1cnIpOworCisJLyogQ2hlY2sgaWYgY3VycmVudCBzdGF0ZSBpcyB2YWxpZCAqLworCWlmIChjeC0+dmFsaWQpIHsKKwkJcmV0dXJuIGN1cnI7CisJfSBlbHNlIHsKKwkJdTggaWR4ID0gT01BUDNfU1RBVEVfTUFYOworCisJCS8qCisJCSAqIFJlYWNoIHRoZSBjdXJyZW50IHN0YXRlIHN0YXJ0aW5nIGF0IGhpZ2hlc3QgQy1zdGF0ZQorCQkgKi8KKwkJZm9yICg7IGlkeCA+PSBPTUFQM19TVEFURV9DMTsgaWR4LS0pIHsKKwkJCWlmICgmZGV2LT5zdGF0ZXNbaWR4XSA9PSBjdXJyKSB7CisJCQkJbmV4dCA9ICZkZXYtPnN0YXRlc1tpZHhdOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogU2hvdWxkIG5ldmVyIGhpdCB0aGlzIGNvbmRpdGlvbi4KKwkJICovCisJCVdBUk5fT04obmV4dCA9PSBOVUxMKTsKKworCQkvKgorCQkgKiBEcm9wIHRvIG5leHQgdmFsaWQgc3RhdGUuCisJCSAqIFN0YXJ0IHNlYXJjaCBmcm9tIHRoZSBuZXh0IChsb3dlcikgc3RhdGUuCisJCSAqLworCQlpZHgtLTsKKwkJZm9yICg7IGlkeCA+PSBPTUFQM19TVEFURV9DMTsgaWR4LS0pIHsKKwkJCXN0cnVjdCBvbWFwM19wcm9jZXNzb3JfY3ggKmN4OworCisJCQljeCA9IGNwdWlkbGVfZ2V0X3N0YXRlZGF0YSgmZGV2LT5zdGF0ZXNbaWR4XSk7CisJCQlpZiAoY3gtPnZhbGlkKSB7CisJCQkJbmV4dCA9ICZkZXYtPnN0YXRlc1tpZHhdOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCS8qCisJCSAqIEMxIGFuZCBDMiBhcmUgYWx3YXlzIHZhbGlkLgorCQkgKiBTbywgbm8gbmVlZCB0byBjaGVjayBmb3IgJ25leHQ9PU5VTEwnIG91dHNpZGUgdGhpcyBsb29wLgorCQkgKi8KKwl9CisKKwlyZXR1cm4gbmV4dDsKK30KKworLyoqCiAgKiBvbWFwM19lbnRlcl9pZGxlX2JtIC0gQ2hlY2tzIGZvciBhbnkgYnVzIGFjdGl2aXR5CiAgKiBAZGV2OiBjcHVpZGxlIGRldmljZQogICogQHN0YXRlOiBUaGUgdGFyZ2V0IHN0YXRlIHRvIGJlIHByb2dyYW1tZWQKQEAgLTE1Miw3ICsyMzIsNyBAQAogc3RhdGljIGludCBvbWFwM19lbnRlcl9pZGxlX2JtKHN0cnVjdCBjcHVpZGxlX2RldmljZSAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBjcHVpZGxlX3N0YXRlICpzdGF0ZSkKIHsKLQlzdHJ1Y3QgY3B1aWRsZV9zdGF0ZSAqbmV3X3N0YXRlID0gc3RhdGU7CisJc3RydWN0IGNwdWlkbGVfc3RhdGUgKm5ld19zdGF0ZSA9IG5leHRfdmFsaWRfc3RhdGUoZGV2LCBzdGF0ZSk7CiAKIAlpZiAoKHN0YXRlLT5mbGFncyAmIENQVUlETEVfRkxBR19DSEVDS19CTSkgJiYgb21hcDNfaWRsZV9ibV9jaGVjaygpKSB7CiAJCUJVR19PTighZGV2LT5zYWZlX3N0YXRlKTsKQEAgLTE2NSw2ICsyNDUsNTAgQEAKIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdWlkbGVfZGV2aWNlLCBvbWFwM19pZGxlX2Rldik7CiAKKy8qKgorICogb21hcDNfY3B1aWRsZV91cGRhdGVfc3RhdGVzIC0gVXBkYXRlIHRoZSBjcHVpZGxlIHN0YXRlcy4KKyAqCisgKiBDdXJyZW50bHksIHRoaXMgZnVuY3Rpb24gdG9nZ2xlcyB0aGUgdmFsaWRpdHkgb2YgaWRsZSBzdGF0ZXMgYmFzZWQgdXBvbgorICogdGhlIGZsYWcgJ2VuYWJsZV9vZmZfbW9kZScuIFdoZW4gdGhlIGZsYWcgaXMgc2V0IGFsbCBzdGF0ZXMgYXJlIHZhbGlkLgorICogRWxzZSwgc3RhdGVzIGxlYWRpbmcgdG8gT0ZGIHN0YXRlIHNldCB0byBiZSBpbnZhbGlkLgorICovCit2b2lkIG9tYXAzX2NwdWlkbGVfdXBkYXRlX3N0YXRlcyh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gT01BUDNfU1RBVEVfQzE7IGkgPCBPTUFQM19NQVhfU1RBVEVTOyBpKyspIHsKKwkJc3RydWN0IG9tYXAzX3Byb2Nlc3Nvcl9jeCAqY3ggPSAmb21hcDNfcG93ZXJfc3RhdGVzW2ldOworCisJCWlmIChlbmFibGVfb2ZmX21vZGUpIHsKKwkJCWN4LT52YWxpZCA9IDE7CisJCX0gZWxzZSB7CisJCQlpZiAoKGN4LT5tcHVfc3RhdGUgPT0gUFdSRE1fUE9XRVJfT0ZGKSB8fAorCQkJCShjeC0+Y29yZV9zdGF0ZQk9PSBQV1JETV9QT1dFUl9PRkYpKQorCQkJCWN4LT52YWxpZCA9IDA7CisJCX0KKwl9Cit9CisKK3ZvaWQgb21hcDNfcG1faW5pdF9jcHVpZGxlKHN0cnVjdCBjcHVpZGxlX3BhcmFtcyAqY3B1aWRsZV9ib2FyZF9wYXJhbXMpCit7CisJaW50IGk7CisKKwlpZiAoIWNwdWlkbGVfYm9hcmRfcGFyYW1zKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSBPTUFQM19TVEFURV9DMTsgaSA8IE9NQVAzX01BWF9TVEFURVM7IGkrKykgeworCQljcHVpZGxlX3BhcmFtc190YWJsZVtpXS52YWxpZCA9CisJCQljcHVpZGxlX2JvYXJkX3BhcmFtc1tpXS52YWxpZDsKKwkJY3B1aWRsZV9wYXJhbXNfdGFibGVbaV0uc2xlZXBfbGF0ZW5jeSA9CisJCQljcHVpZGxlX2JvYXJkX3BhcmFtc1tpXS5zbGVlcF9sYXRlbmN5OworCQljcHVpZGxlX3BhcmFtc190YWJsZVtpXS53YWtlX2xhdGVuY3kgPQorCQkJY3B1aWRsZV9ib2FyZF9wYXJhbXNbaV0ud2FrZV9sYXRlbmN5OworCQljcHVpZGxlX3BhcmFtc190YWJsZVtpXS50aHJlc2hvbGQgPQorCQkJY3B1aWRsZV9ib2FyZF9wYXJhbXNbaV0udGhyZXNob2xkOworCX0KKwlyZXR1cm47Cit9CisKIC8qIG9tYXAzX2luaXRfcG93ZXJfc3RhdGVzIC0gSW5pdGlhbGlzZXMgdGhlIE9NQVAzIHNwZWNpZmljIEMgc3RhdGVzLgogICoKICAqIEJlbG93IGlzIHRoZSBkZXNjaXB0aW9uIG9mIGVhY2ggQyBzdGF0ZS4KQEAgLTE3OSw3NSArMzAzLDEwMyBAQAogdm9pZCBvbWFwX2luaXRfcG93ZXJfc3RhdGVzKHZvaWQpCiB7CiAJLyogQzEgLiBNUFUgV0ZJICsgQ29yZSBhY3RpdmUgKi8KLQlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzFdLnZhbGlkID0gMTsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzFdLnZhbGlkID0KKwkJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0MxXS52YWxpZDsKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzFdLnR5cGUgPSBPTUFQM19TVEFURV9DMTsKLQlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzFdLnNsZWVwX2xhdGVuY3kgPSAyOwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMV0ud2FrZXVwX2xhdGVuY3kgPSAyOwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMV0udGhyZXNob2xkID0gNTsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzFdLnNsZWVwX2xhdGVuY3kgPQorCQkJY3B1aWRsZV9wYXJhbXNfdGFibGVbT01BUDNfU1RBVEVfQzFdLnNsZWVwX2xhdGVuY3k7CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MxXS53YWtldXBfbGF0ZW5jeSA9CisJCQljcHVpZGxlX3BhcmFtc190YWJsZVtPTUFQM19TVEFURV9DMV0ud2FrZV9sYXRlbmN5OworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMV0udGhyZXNob2xkID0KKwkJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0MxXS50aHJlc2hvbGQ7CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MxXS5tcHVfc3RhdGUgPSBQV1JETV9QT1dFUl9PTjsKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzFdLmNvcmVfc3RhdGUgPSBQV1JETV9QT1dFUl9PTjsKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzFdLmZsYWdzID0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQ7CiAKIAkvKiBDMiAuIE1QVSBXRkkgKyBDb3JlIGluYWN0aXZlICovCi0Jb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MyXS52YWxpZCA9IDE7CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MyXS52YWxpZCA9CisJCQljcHVpZGxlX3BhcmFtc190YWJsZVtPTUFQM19TVEFURV9DMl0udmFsaWQ7CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MyXS50eXBlID0gT01BUDNfU1RBVEVfQzI7Ci0Jb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MyXS5zbGVlcF9sYXRlbmN5ID0gMTA7Ci0Jb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MyXS53YWtldXBfbGF0ZW5jeSA9IDEwOwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMl0udGhyZXNob2xkID0gMzA7CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MyXS5zbGVlcF9sYXRlbmN5ID0KKwkJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0MyXS5zbGVlcF9sYXRlbmN5OworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMl0ud2FrZXVwX2xhdGVuY3kgPQorCQkJY3B1aWRsZV9wYXJhbXNfdGFibGVbT01BUDNfU1RBVEVfQzJdLndha2VfbGF0ZW5jeTsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzJdLnRocmVzaG9sZCA9CisJCQljcHVpZGxlX3BhcmFtc190YWJsZVtPTUFQM19TVEFURV9DMl0udGhyZXNob2xkOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DMl0ubXB1X3N0YXRlID0gUFdSRE1fUE9XRVJfT047CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MyXS5jb3JlX3N0YXRlID0gUFdSRE1fUE9XRVJfT047CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MyXS5mbGFncyA9IENQVUlETEVfRkxBR19USU1FX1ZBTElEOwogCiAJLyogQzMgLiBNUFUgQ1NXUiArIENvcmUgaW5hY3RpdmUgKi8KLQlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzNdLnZhbGlkID0gMTsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzNdLnZhbGlkID0KKwkJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0MzXS52YWxpZDsKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzNdLnR5cGUgPSBPTUFQM19TVEFURV9DMzsKLQlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzNdLnNsZWVwX2xhdGVuY3kgPSA1MDsKLQlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzNdLndha2V1cF9sYXRlbmN5ID0gNTA7Ci0Jb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MzXS50aHJlc2hvbGQgPSAzMDA7CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0MzXS5zbGVlcF9sYXRlbmN5ID0KKwkJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0MzXS5zbGVlcF9sYXRlbmN5OworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DM10ud2FrZXVwX2xhdGVuY3kgPQorCQkJY3B1aWRsZV9wYXJhbXNfdGFibGVbT01BUDNfU1RBVEVfQzNdLndha2VfbGF0ZW5jeTsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzNdLnRocmVzaG9sZCA9CisJCQljcHVpZGxlX3BhcmFtc190YWJsZVtPTUFQM19TVEFURV9DM10udGhyZXNob2xkOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DM10ubXB1X3N0YXRlID0gUFdSRE1fUE9XRVJfUkVUOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DM10uY29yZV9zdGF0ZSA9IFBXUkRNX1BPV0VSX09OOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DM10uZmxhZ3MgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8CiAJCQkJQ1BVSURMRV9GTEFHX0NIRUNLX0JNOwogCiAJLyogQzQgLiBNUFUgT0ZGICsgQ29yZSBpbmFjdGl2ZSAqLwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNF0udmFsaWQgPSAxOworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNF0udmFsaWQgPQorCQkJY3B1aWRsZV9wYXJhbXNfdGFibGVbT01BUDNfU1RBVEVfQzRdLnZhbGlkOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNF0udHlwZSA9IE9NQVAzX1NUQVRFX0M0OwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNF0uc2xlZXBfbGF0ZW5jeSA9IDE1MDA7Ci0Jb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M0XS53YWtldXBfbGF0ZW5jeSA9IDE4MDA7Ci0Jb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M0XS50aHJlc2hvbGQgPSA0MDAwOworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNF0uc2xlZXBfbGF0ZW5jeSA9CisJCQljcHVpZGxlX3BhcmFtc190YWJsZVtPTUFQM19TVEFURV9DNF0uc2xlZXBfbGF0ZW5jeTsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzRdLndha2V1cF9sYXRlbmN5ID0KKwkJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0M0XS53YWtlX2xhdGVuY3k7CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M0XS50aHJlc2hvbGQgPQorCQkJY3B1aWRsZV9wYXJhbXNfdGFibGVbT01BUDNfU1RBVEVfQzRdLnRocmVzaG9sZDsKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzRdLm1wdV9zdGF0ZSA9IFBXUkRNX1BPV0VSX09GRjsKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzRdLmNvcmVfc3RhdGUgPSBQV1JETV9QT1dFUl9PTjsKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzRdLmZsYWdzID0gQ1BVSURMRV9GTEFHX1RJTUVfVkFMSUQgfAogCQkJCUNQVUlETEVfRkxBR19DSEVDS19CTTsKIAogCS8qIEM1IC4gTVBVIENTV1IgKyBDb3JlIENTV1IqLwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNV0udmFsaWQgPSAxOworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNV0udmFsaWQgPQorCQkJY3B1aWRsZV9wYXJhbXNfdGFibGVbT01BUDNfU1RBVEVfQzVdLnZhbGlkOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNV0udHlwZSA9IE9NQVAzX1NUQVRFX0M1OwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNV0uc2xlZXBfbGF0ZW5jeSA9IDI1MDA7Ci0Jb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M1XS53YWtldXBfbGF0ZW5jeSA9IDc1MDA7Ci0Jb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M1XS50aHJlc2hvbGQgPSAxMjAwMDsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzVdLnNsZWVwX2xhdGVuY3kgPQorCQkJY3B1aWRsZV9wYXJhbXNfdGFibGVbT01BUDNfU1RBVEVfQzVdLnNsZWVwX2xhdGVuY3k7CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M1XS53YWtldXBfbGF0ZW5jeSA9CisJCQljcHVpZGxlX3BhcmFtc190YWJsZVtPTUFQM19TVEFURV9DNV0ud2FrZV9sYXRlbmN5OworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNV0udGhyZXNob2xkID0KKwkJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0M1XS50aHJlc2hvbGQ7CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M1XS5tcHVfc3RhdGUgPSBQV1JETV9QT1dFUl9SRVQ7CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M1XS5jb3JlX3N0YXRlID0gUFdSRE1fUE9XRVJfUkVUOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNV0uZmxhZ3MgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8CiAJCQkJQ1BVSURMRV9GTEFHX0NIRUNLX0JNOwogCiAJLyogQzYgLiBNUFUgT0ZGICsgQ29yZSBDU1dSICovCi0Jb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M2XS52YWxpZCA9IDE7CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M2XS52YWxpZCA9CisJCQljcHVpZGxlX3BhcmFtc190YWJsZVtPTUFQM19TVEFURV9DNl0udmFsaWQ7CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M2XS50eXBlID0gT01BUDNfU1RBVEVfQzY7Ci0Jb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M2XS5zbGVlcF9sYXRlbmN5ID0gMzAwMDsKLQlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzZdLndha2V1cF9sYXRlbmN5ID0gODUwMDsKLQlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzZdLnRocmVzaG9sZCA9IDE1MDAwOworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DNl0uc2xlZXBfbGF0ZW5jeSA9CisJCQljcHVpZGxlX3BhcmFtc190YWJsZVtPTUFQM19TVEFURV9DNl0uc2xlZXBfbGF0ZW5jeTsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzZdLndha2V1cF9sYXRlbmN5ID0KKwkJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0M2XS53YWtlX2xhdGVuY3k7CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M2XS50aHJlc2hvbGQgPQorCQkJY3B1aWRsZV9wYXJhbXNfdGFibGVbT01BUDNfU1RBVEVfQzZdLnRocmVzaG9sZDsKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzZdLm1wdV9zdGF0ZSA9IFBXUkRNX1BPV0VSX09GRjsKIAlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzZdLmNvcmVfc3RhdGUgPSBQV1JETV9QT1dFUl9SRVQ7CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M2XS5mbGFncyA9IENQVUlETEVfRkxBR19USU1FX1ZBTElEIHwKIAkJCQlDUFVJRExFX0ZMQUdfQ0hFQ0tfQk07CiAKIAkvKiBDNyAuIE1QVSBPRkYgKyBDb3JlIE9GRiAqLwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DN10udmFsaWQgPSAxOworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DN10udmFsaWQgPQorCQkJY3B1aWRsZV9wYXJhbXNfdGFibGVbT01BUDNfU1RBVEVfQzddLnZhbGlkOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DN10udHlwZSA9IE9NQVAzX1NUQVRFX0M3OwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DN10uc2xlZXBfbGF0ZW5jeSA9IDEwMDAwOwotCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DN10ud2FrZXVwX2xhdGVuY3kgPSAzMDAwMDsKLQlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzddLnRocmVzaG9sZCA9IDMwMDAwMDsKKwlvbWFwM19wb3dlcl9zdGF0ZXNbT01BUDNfU1RBVEVfQzddLnNsZWVwX2xhdGVuY3kgPQorCQkJY3B1aWRsZV9wYXJhbXNfdGFibGVbT01BUDNfU1RBVEVfQzddLnNsZWVwX2xhdGVuY3k7CisJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M3XS53YWtldXBfbGF0ZW5jeSA9CisJCQljcHVpZGxlX3BhcmFtc190YWJsZVtPTUFQM19TVEFURV9DN10ud2FrZV9sYXRlbmN5OworCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DN10udGhyZXNob2xkID0KKwkJCWNwdWlkbGVfcGFyYW1zX3RhYmxlW09NQVAzX1NUQVRFX0M3XS50aHJlc2hvbGQ7CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M3XS5tcHVfc3RhdGUgPSBQV1JETV9QT1dFUl9PRkY7CiAJb21hcDNfcG93ZXJfc3RhdGVzW09NQVAzX1NUQVRFX0M3XS5jb3JlX3N0YXRlID0gUFdSRE1fUE9XRVJfT0ZGOwogCW9tYXAzX3Bvd2VyX3N0YXRlc1tPTUFQM19TVEFURV9DN10uZmxhZ3MgPSBDUFVJRExFX0ZMQUdfVElNRV9WQUxJRCB8CkBAIC0zMDIsNiArNDU0LDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJZGV2LT5zdGF0ZV9jb3VudCA9IGNvdW50OwogCisJb21hcDNfY3B1aWRsZV91cGRhdGVfc3RhdGVzKCk7CisKIAlpZiAoY3B1aWRsZV9yZWdpc3Rlcl9kZXZpY2UoZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDUFVpZGxlIHJlZ2lzdGVyIGRldmljZSBmYWlsZWRcbiIsCiAJCSAgICAgICBfX2Z1bmNfXyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZGV2aWNlcy5jCmluZGV4IDE4YWQ5MzE2Li4yM2U0ZDc3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RldmljZXMuYwpAQCAtMTQxLDcgKzE0MSw3IEBACiAjZGVmaW5lIE1CT1hfUkVHX1NJWkUgICAweDEyMAogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcF9tYm94X3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvbWFwMl9tYm94X3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0CQk9IE9NQVAyNFhYX01BSUxCT1hfQkFTRSwKIAkJLmVuZAkJPSBPTUFQMjRYWF9NQUlMQk9YX0JBU0UgKyBNQk9YX1JFR19TSVpFIC0gMSwKQEAgLTE1NiwxMCArMTU2LDE0IEBACiAJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKK3N0YXRpYyBpbnQgb21hcDJfbWJveF9yZXNvdXJjZXNfc3ogPSBBUlJBWV9TSVpFKG9tYXAyX21ib3hfcmVzb3VyY2VzKTsKKyNlbHNlCisjZGVmaW5lIG9tYXAyX21ib3hfcmVzb3VyY2VzCQlOVUxMCisjZGVmaW5lIG9tYXAyX21ib3hfcmVzb3VyY2VzX3N6CQkwCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIG9tYXBfbWJveF9yZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcDNfbWJveF9yZXNvdXJjZXNbXSA9IHsKIAl7CiAJCS5zdGFydAkJPSBPTUFQMzRYWF9NQUlMQk9YX0JBU0UsCiAJCS5lbmQJCT0gT01BUDM0WFhfTUFJTEJPWF9CQVNFICsgTUJPWF9SRUdfU0laRSAtIDEsCkBAIC0xNzAsMTIgKzE3NCwxNiBAQAogCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CitzdGF0aWMgaW50IG9tYXAzX21ib3hfcmVzb3VyY2VzX3N6ID0gQVJSQVlfU0laRShvbWFwM19tYm94X3Jlc291cmNlcyk7CisjZWxzZQorI2RlZmluZSBvbWFwM19tYm94X3Jlc291cmNlcwkJTlVMTAorI2RlZmluZSBvbWFwM19tYm94X3Jlc291cmNlc19zegkJMAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAogCiAjZGVmaW5lIE9NQVA0X01CT1hfUkVHX1NJWkUJMHgxMzAKLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugb21hcF9tYm94X3Jlc291cmNlc1tdID0geworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvbWFwNF9tYm94X3Jlc291cmNlc1tdID0gewogCXsKIAkJLnN0YXJ0ICAgICAgICAgID0gT01BUDQ0WFhfTUFJTEJPWF9CQVNFLAogCQkuZW5kICAgICAgICAgICAgPSBPTUFQNDRYWF9NQUlMQk9YX0JBU0UgKwpAQCAtMTgzLDEwICsxOTEsMTQgQEAKIAkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAl7Ci0JCS5zdGFydCAgICAgICAgICA9IElOVF80NFhYX01BSUxfVTBfTVBVLAorCQkuc3RhcnQgICAgICAgICAgPSBPTUFQNDRYWF9JUlFfTUFJTF9VMCwKIAkJLmZsYWdzICAgICAgICAgID0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CitzdGF0aWMgaW50IG9tYXA0X21ib3hfcmVzb3VyY2VzX3N6ID0gQVJSQVlfU0laRShvbWFwNF9tYm94X3Jlc291cmNlcyk7CisjZWxzZQorI2RlZmluZSBvbWFwNF9tYm94X3Jlc291cmNlcwkJTlVMTAorI2RlZmluZSBvbWFwNF9tYm94X3Jlc291cmNlc19zegkJMAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG1ib3hfZGV2aWNlID0gewpAQCAtMTk2LDkgKzIwOCwxNSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgb21hcF9pbml0X21ib3godm9pZCkKIHsKLQlpZiAoY3B1X2lzX29tYXAyNDIwKCkgfHwgY3B1X2lzX29tYXAzNDMwKCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpIHsKLQkJbWJveF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUob21hcF9tYm94X3Jlc291cmNlcyk7Ci0JCW1ib3hfZGV2aWNlLnJlc291cmNlID0gb21hcF9tYm94X3Jlc291cmNlczsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJbWJveF9kZXZpY2UucmVzb3VyY2UgPSBvbWFwMl9tYm94X3Jlc291cmNlczsKKwkJbWJveF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IG9tYXAyX21ib3hfcmVzb3VyY2VzX3N6OworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwkJbWJveF9kZXZpY2UucmVzb3VyY2UgPSBvbWFwM19tYm94X3Jlc291cmNlczsKKwkJbWJveF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IG9tYXAzX21ib3hfcmVzb3VyY2VzX3N6OworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJbWJveF9kZXZpY2UucmVzb3VyY2UgPSBvbWFwNF9tYm94X3Jlc291cmNlczsKKwkJbWJveF9kZXZpY2UubnVtX3Jlc291cmNlcyA9IG9tYXA0X21ib3hfcmVzb3VyY2VzX3N6OwogCX0gZWxzZSB7CiAJCXByX2VycigiJXM6IHBsYXRmb3JtIG5vdCBzdXBwb3J0ZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuOwpAQCAtNDkyLDcgKzUxMCwxMiBAQAogICoqLwogc3RhdGljIHZvaWQgX19pbml0IG9tYXBfaHNtbWNfcmVzZXQodm9pZCkKIHsKLQl1MzIgaSwgbnJfY29udHJvbGxlcnMgPSBjcHVfaXNfb21hcDQ0eHgoKSA/IE9NQVA0NFhYX05SX01NQyA6CisJdTMyIGksIG5yX2NvbnRyb2xsZXJzOworCisJaWYgKGNwdV9pc19vbWFwMjQyeCgpKQorCQlyZXR1cm47CisKKwlucl9jb250cm9sbGVycyA9IGNwdV9pc19vbWFwNDR4eCgpID8gT01BUDQ0WFhfTlJfTU1DIDoKIAkJKGNwdV9pc19vbWFwMzR4eCgpID8gT01BUDM0WFhfTlJfTU1DIDogT01BUDI0WFhfTlJfTU1DKTsKIAogCWZvciAoaSA9IDA7IGkgPCBucl9jb250cm9sbGVyczsgaSsrKSB7CkBAIC02OTcsMTMgKzcyMCwxMyBAQAogCQkJaWYgKCFjcHVfaXNfb21hcDQ0eHgoKSkKIAkJCQlyZXR1cm47CiAJCQliYXNlID0gT01BUDRfTU1DNF9CQVNFICsgT01BUDRfTU1DX1JFR19PRkZTRVQ7Ci0JCQlpcnEgPSBJTlRfNDRYWF9NTUM0X0lSUTsKKwkJCWlycSA9IE9NQVA0NFhYX0lSUV9NTUM0OwogCQkJYnJlYWs7CiAJCWNhc2UgNDoKIAkJCWlmICghY3B1X2lzX29tYXA0NHh4KCkpCiAJCQkJcmV0dXJuOwogCQkJYmFzZSA9IE9NQVA0X01NQzVfQkFTRSArIE9NQVA0X01NQ19SRUdfT0ZGU0VUOwotCQkJaXJxID0gSU5UXzQ0WFhfTU1DNV9JUlE7CisJCQlpcnEgPSBPTUFQNDRYWF9JUlFfTU1DNDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJY29udGludWU7CkBAIC03MTUsNyArNzM4LDcgQEAKIAkJfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkgewogCQkJaWYgKGkgPCAzKSB7CiAJCQkJYmFzZSArPSBPTUFQNF9NTUNfUkVHX09GRlNFVDsKLQkJCQlpcnEgKz0gSVJRX0dJQ19TVEFSVDsKKwkJCQlpcnEgKz0gT01BUDQ0WFhfSVJRX0dJQ19TVEFSVDsKIAkJCX0KIAkJCXNpemUgPSBPTUFQNF9IU01NQ19TSVpFOwogCQkJbmFtZSA9ICJtbWNpLW9tYXAtaHMiOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9kcGxsLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGwuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjYwNTViNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGwuYworKysgL2Rldi9udWxsCkBAIC0xLDUzOCArMCwwIEBACi0vKgotICogT01BUDMvNCAtIHNwZWNpZmljIERQTEwgY29udHJvbCBmdW5jdGlvbnMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgotICoKLSAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQotICogVGVzdGluZyBhbmQgaW50ZWdyYXRpb24gZml4ZXMgYnkgSm91bmkgSMODwrZnYW5kZXIKLSAqCi0gKiBQYXJ0cyBvZiB0aGlzIGNvZGUgYXJlIGJhc2VkIG9uIGNvZGUgd3JpdHRlbiBieQotICogUmljaGFyZCBXb29kcnVmZiwgVG9ueSBMaW5kZ3JlbiwgVHV1a2thIFRpa2thbmVuLCBLYXJ0aGlrIERhc3UKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvbGltaXRzLmg+Ci0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgotI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KLSNpbmNsdWRlIDxwbGF0L3NyYW0uaD4KLSNpbmNsdWRlIDxhc20vZGl2NjQuaD4KLSNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+Ci0KLSNpbmNsdWRlICJjbG9jay5oIgotI2luY2x1ZGUgInBybS5oIgotI2luY2x1ZGUgInBybS1yZWdiaXRzLTM0eHguaCIKLSNpbmNsdWRlICJjbS5oIgotI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgotCi0vKiBDTV9BVVRPSURMRV9QTEwqLkFVVE9fKiBiaXQgdmFsdWVzICovCi0jZGVmaW5lIERQTExfQVVUT0lETEVfRElTQUJMRQkJCTB4MAotI2RlZmluZSBEUExMX0FVVE9JRExFX0xPV19QT1dFUl9TVE9QCQkweDEKLQotI2RlZmluZSBNQVhfRFBMTF9XQUlUX1RSSUVTCQkxMDAwMDAwCi0KLQotLyoqCi0gKiBvbWFwM19kcGxsX3JlY2FsYyAtIHJlY2FsY3VsYXRlIERQTEwgcmF0ZQotICogQGNsazogRFBMTCBzdHJ1Y3QgY2xrCi0gKgotICogUmVjYWxjdWxhdGUgYW5kIHByb3BhZ2F0ZSB0aGUgRFBMTCByYXRlLgotICovCi11bnNpZ25lZCBsb25nIG9tYXAzX2RwbGxfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gb21hcDJfZ2V0X2RwbGxfcmF0ZShjbGspOwotfQotCi0vKiBfb21hcDNfZHBsbF93cml0ZV9jbGtlbiAtIHdyaXRlIGNsa2VuX2JpdHMgYXJnIHRvIGEgRFBMTCdzIGVuYWJsZSBiaXRzICovCi1zdGF0aWMgdm9pZCBfb21hcDNfZHBsbF93cml0ZV9jbGtlbihzdHJ1Y3QgY2xrICpjbGssIHU4IGNsa2VuX2JpdHMpCi17Ci0JY29uc3Qgc3RydWN0IGRwbGxfZGF0YSAqZGQ7Ci0JdTMyIHY7Ci0KLQlkZCA9IGNsay0+ZHBsbF9kYXRhOwotCi0JdiA9IF9fcmF3X3JlYWRsKGRkLT5jb250cm9sX3JlZyk7Ci0JdiAmPSB+ZGQtPmVuYWJsZV9tYXNrOwotCXYgfD0gY2xrZW5fYml0cyA8PCBfX2ZmcyhkZC0+ZW5hYmxlX21hc2spOwotCV9fcmF3X3dyaXRlbCh2LCBkZC0+Y29udHJvbF9yZWcpOwotfQotCi0vKiBfb21hcDNfd2FpdF9kcGxsX3N0YXR1czogd2FpdCBmb3IgYSBEUExMIHRvIGVudGVyIGEgc3BlY2lmaWMgc3RhdGUgKi8KLXN0YXRpYyBpbnQgX29tYXAzX3dhaXRfZHBsbF9zdGF0dXMoc3RydWN0IGNsayAqY2xrLCB1OCBzdGF0ZSkKLXsKLQljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKLQlpbnQgaSA9IDA7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQlkZCA9IGNsay0+ZHBsbF9kYXRhOwotCi0Jc3RhdGUgPDw9IF9fZmZzKGRkLT5pZGxlc3RfbWFzayk7Ci0KLQl3aGlsZSAoKChfX3Jhd19yZWFkbChkZC0+aWRsZXN0X3JlZykgJiBkZC0+aWRsZXN0X21hc2spICE9IHN0YXRlKSAmJgotCSAgICAgICBpIDwgTUFYX0RQTExfV0FJVF9UUklFUykgewotCQlpKys7Ci0JCXVkZWxheSgxKTsKLQl9Ci0KLQlpZiAoaSA9PSBNQVhfRFBMTF9XQUlUX1RSSUVTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2xvY2s6ICVzIGZhaWxlZCB0cmFuc2l0aW9uIHRvICclcydcbiIsCi0JCSAgICAgICBjbGstPm5hbWUsIChzdGF0ZSkgPyAibG9ja2VkIiA6ICJieXBhc3NlZCIpOwotCX0gZWxzZSB7Ci0JCXByX2RlYnVnKCJjbG9jazogJXMgdHJhbnNpdGlvbiB0byAnJXMnIGluICVkIGxvb3BzXG4iLAotCQkJIGNsay0+bmFtZSwgKHN0YXRlKSA/ICJsb2NrZWQiIDogImJ5cGFzc2VkIiwgaSk7Ci0KLQkJcmV0ID0gMDsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKiBGcm9tIDM0MzAgVFJNIEVTMiA0LjcuNi4yICovCi1zdGF0aWMgdTE2IF9vbWFwM19kcGxsX2NvbXB1dGVfZnJlcXNlbChzdHJ1Y3QgY2xrICpjbGssIHU4IG4pCi17Ci0JdW5zaWduZWQgbG9uZyBmaW50OwotCXUxNiBmID0gMDsKLQotCWZpbnQgPSBjbGstPmRwbGxfZGF0YS0+Y2xrX3JlZi0+cmF0ZSAvIG47Ci0KLQlwcl9kZWJ1ZygiY2xvY2s6IGZpbnQgaXMgJWx1XG4iLCBmaW50KTsKLQotCWlmIChmaW50ID49IDc1MDAwMCAmJiBmaW50IDw9IDEwMDAwMDApCi0JCWYgPSAweDM7Ci0JZWxzZSBpZiAoZmludCA+IDEwMDAwMDAgJiYgZmludCA8PSAxMjUwMDAwKQotCQlmID0gMHg0OwotCWVsc2UgaWYgKGZpbnQgPiAxMjUwMDAwICYmIGZpbnQgPD0gMTUwMDAwMCkKLQkJZiA9IDB4NTsKLQllbHNlIGlmIChmaW50ID4gMTUwMDAwMCAmJiBmaW50IDw9IDE3NTAwMDApCi0JCWYgPSAweDY7Ci0JZWxzZSBpZiAoZmludCA+IDE3NTAwMDAgJiYgZmludCA8PSAyMTAwMDAwKQotCQlmID0gMHg3OwotCWVsc2UgaWYgKGZpbnQgPiA3NTAwMDAwICYmIGZpbnQgPD0gMTAwMDAwMDApCi0JCWYgPSAweEI7Ci0JZWxzZSBpZiAoZmludCA+IDEwMDAwMDAwICYmIGZpbnQgPD0gMTI1MDAwMDApCi0JCWYgPSAweEM7Ci0JZWxzZSBpZiAoZmludCA+IDEyNTAwMDAwICYmIGZpbnQgPD0gMTUwMDAwMDApCi0JCWYgPSAweEQ7Ci0JZWxzZSBpZiAoZmludCA+IDE1MDAwMDAwICYmIGZpbnQgPD0gMTc1MDAwMDApCi0JCWYgPSAweEU7Ci0JZWxzZSBpZiAoZmludCA+IDE3NTAwMDAwICYmIGZpbnQgPD0gMjEwMDAwMDApCi0JCWYgPSAweEY7Ci0JZWxzZQotCQlwcl9kZWJ1ZygiY2xvY2s6IHVua25vd24gZnJlcXNlbCBzZXR0aW5nIGZvciAlZFxuIiwgbik7Ci0KLQlyZXR1cm4gZjsKLX0KLQotLyogTm9uLUNPUkUgRFBMTCAoZS5nLiwgRFBMTHMgdGhhdCBkbyBub3QgY29udHJvbCBTRFJDKSBjbG9jayBmdW5jdGlvbnMgKi8KLQotLyoKLSAqIF9vbWFwM19ub25jb3JlX2RwbGxfbG9jayAtIGluc3RydWN0IGEgRFBMTCB0byBsb2NrIGFuZCB3YWl0IGZvciByZWFkaW5lc3MKLSAqIEBjbGs6IHBvaW50ZXIgdG8gYSBEUExMIHN0cnVjdCBjbGsKLSAqCi0gKiBJbnN0cnVjdHMgYSBub24tQ09SRSBEUExMIHRvIGxvY2suICBXYWl0cyBmb3IgdGhlIERQTEwgdG8gcmVwb3J0Ci0gKiByZWFkaW5lc3MgYmVmb3JlIHJldHVybmluZy4gIFdpbGwgc2F2ZSBhbmQgcmVzdG9yZSB0aGUgRFBMTCdzCi0gKiBhdXRvaWRsZSBzdGF0ZSBhY3Jvc3MgdGhlIGVuYWJsZSwgcGVyIHRoZSBDRFAgY29kZS4gIElmIHRoZSBEUExMCi0gKiBsb2NrZWQgc3VjY2Vzc2Z1bGx5LCByZXR1cm4gMDsgaWYgdGhlIERQTEwgZGlkIG5vdCBsb2NrIGluIHRoZSB0aW1lCi0gKiBhbGxvdHRlZCwgb3IgRFBMTDMgd2FzIHBhc3NlZCBpbiwgcmV0dXJuIC1FSU5WQUwuCi0gKi8KLXN0YXRpYyBpbnQgX29tYXAzX25vbmNvcmVfZHBsbF9sb2NrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1OCBhaTsKLQlpbnQgcjsKLQotCXByX2RlYnVnKCJjbG9jazogbG9ja2luZyBEUExMICVzXG4iLCBjbGstPm5hbWUpOwotCi0JYWkgPSBvbWFwM19kcGxsX2F1dG9pZGxlX3JlYWQoY2xrKTsKLQotCW9tYXAzX2RwbGxfZGVueV9pZGxlKGNsayk7Ci0KLQlfb21hcDNfZHBsbF93cml0ZV9jbGtlbihjbGssIERQTExfTE9DS0VEKTsKLQotCXIgPSBfb21hcDNfd2FpdF9kcGxsX3N0YXR1cyhjbGssIDEpOwotCi0JaWYgKGFpKQotCQlvbWFwM19kcGxsX2FsbG93X2lkbGUoY2xrKTsKLQotCXJldHVybiByOwotfQotCi0vKgotICogX29tYXAzX25vbmNvcmVfZHBsbF9ieXBhc3MgLSBpbnN0cnVjdCBhIERQTEwgdG8gYnlwYXNzIGFuZCB3YWl0IGZvciByZWFkaW5lc3MKLSAqIEBjbGs6IHBvaW50ZXIgdG8gYSBEUExMIHN0cnVjdCBjbGsKLSAqCi0gKiBJbnN0cnVjdHMgYSBub24tQ09SRSBEUExMIHRvIGVudGVyIGxvdy1wb3dlciBieXBhc3MgbW9kZS4gIEluCi0gKiBieXBhc3MgbW9kZSwgdGhlIERQTEwncyByYXRlIGlzIHNldCBlcXVhbCB0byBpdHMgcGFyZW50IGNsb2NrJ3MKLSAqIHJhdGUuICBXYWl0cyBmb3IgdGhlIERQTEwgdG8gcmVwb3J0IHJlYWRpbmVzcyBiZWZvcmUgcmV0dXJuaW5nLgotICogV2lsbCBzYXZlIGFuZCByZXN0b3JlIHRoZSBEUExMJ3MgYXV0b2lkbGUgc3RhdGUgYWNyb3NzIHRoZSBlbmFibGUsCi0gKiBwZXIgdGhlIENEUCBjb2RlLiAgSWYgdGhlIERQTEwgZW50ZXJlZCBieXBhc3MgbW9kZSBzdWNjZXNzZnVsbHksCi0gKiByZXR1cm4gMDsgaWYgdGhlIERQTEwgZGlkIG5vdCBlbnRlciBieXBhc3MgaW4gdGhlIHRpbWUgYWxsb3R0ZWQsIG9yCi0gKiBEUExMMyB3YXMgcGFzc2VkIGluLCBvciB0aGUgRFBMTCBkb2VzIG5vdCBzdXBwb3J0IGxvdy1wb3dlciBieXBhc3MsCi0gKiByZXR1cm4gLUVJTlZBTC4KLSAqLwotc3RhdGljIGludCBfb21hcDNfbm9uY29yZV9kcGxsX2J5cGFzcyhzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaW50IHI7Ci0JdTggYWk7Ci0KLQlpZiAoIShjbGstPmRwbGxfZGF0YS0+bW9kZXMgJiAoMSA8PCBEUExMX0xPV19QT1dFUl9CWVBBU1MpKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwcl9kZWJ1ZygiY2xvY2s6IGNvbmZpZ3VyaW5nIERQTEwgJXMgZm9yIGxvdy1wb3dlciBieXBhc3NcbiIsCi0JCSBjbGstPm5hbWUpOwotCi0JYWkgPSBvbWFwM19kcGxsX2F1dG9pZGxlX3JlYWQoY2xrKTsKLQotCV9vbWFwM19kcGxsX3dyaXRlX2Nsa2VuKGNsaywgRFBMTF9MT1dfUE9XRVJfQllQQVNTKTsKLQotCXIgPSBfb21hcDNfd2FpdF9kcGxsX3N0YXR1cyhjbGssIDApOwotCi0JaWYgKGFpKQotCQlvbWFwM19kcGxsX2FsbG93X2lkbGUoY2xrKTsKLQllbHNlCi0JCW9tYXAzX2RwbGxfZGVueV9pZGxlKGNsayk7Ci0KLQlyZXR1cm4gcjsKLX0KLQotLyoKLSAqIF9vbWFwM19ub25jb3JlX2RwbGxfc3RvcCAtIGluc3RydWN0IGEgRFBMTCB0byBzdG9wCi0gKiBAY2xrOiBwb2ludGVyIHRvIGEgRFBMTCBzdHJ1Y3QgY2xrCi0gKgotICogSW5zdHJ1Y3RzIGEgbm9uLUNPUkUgRFBMTCB0byBlbnRlciBsb3ctcG93ZXIgc3RvcC4gV2lsbCBzYXZlIGFuZAotICogcmVzdG9yZSB0aGUgRFBMTCdzIGF1dG9pZGxlIHN0YXRlIGFjcm9zcyB0aGUgc3RvcCwgcGVyIHRoZSBDRFAKLSAqIGNvZGUuICBJZiBEUExMMyB3YXMgcGFzc2VkIGluLCBvciB0aGUgRFBMTCBkb2VzIG5vdCBzdXBwb3J0Ci0gKiBsb3ctcG93ZXIgc3RvcCwgcmV0dXJuIC1FSU5WQUw7IG90aGVyd2lzZSwgcmV0dXJuIDAuCi0gKi8KLXN0YXRpYyBpbnQgX29tYXAzX25vbmNvcmVfZHBsbF9zdG9wKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1OCBhaTsKLQotCWlmICghKGNsay0+ZHBsbF9kYXRhLT5tb2RlcyAmICgxIDw8IERQTExfTE9XX1BPV0VSX1NUT1ApKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwcl9kZWJ1ZygiY2xvY2s6IHN0b3BwaW5nIERQTEwgJXNcbiIsIGNsay0+bmFtZSk7Ci0KLQlhaSA9IG9tYXAzX2RwbGxfYXV0b2lkbGVfcmVhZChjbGspOwotCi0JX29tYXAzX2RwbGxfd3JpdGVfY2xrZW4oY2xrLCBEUExMX0xPV19QT1dFUl9TVE9QKTsKLQotCWlmIChhaSkKLQkJb21hcDNfZHBsbF9hbGxvd19pZGxlKGNsayk7Ci0JZWxzZQotCQlvbWFwM19kcGxsX2RlbnlfaWRsZShjbGspOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogb21hcDNfbm9uY29yZV9kcGxsX2VuYWJsZSAtIGluc3RydWN0IGEgRFBMTCB0byBlbnRlciBieXBhc3Mgb3IgbG9jayBtb2RlCi0gKiBAY2xrOiBwb2ludGVyIHRvIGEgRFBMTCBzdHJ1Y3QgY2xrCi0gKgotICogSW5zdHJ1Y3RzIGEgbm9uLUNPUkUgRFBMTCB0byBlbmFibGUsIGUuZy4sIHRvIGVudGVyIGJ5cGFzcyBvciBsb2NrLgotICogVGhlIGNob2ljZSBvZiBtb2RlcyBkZXBlbmRzIG9uIHRoZSBEUExMJ3MgcHJvZ3JhbW1lZCByYXRlOiBpZiBpdCBpcwotICogdGhlIHNhbWUgYXMgdGhlIERQTEwncyBwYXJlbnQgY2xvY2ssIGl0IHdpbGwgZW50ZXIgYnlwYXNzOwotICogb3RoZXJ3aXNlLCBpdCB3aWxsIGVudGVyIGxvY2suICBUaGlzIGNvZGUgd2lsbCB3YWl0IGZvciB0aGUgRFBMTCB0bwotICogaW5kaWNhdGUgcmVhZGluZXNzIGJlZm9yZSByZXR1cm5pbmcsIHVubGVzcyB0aGUgRFBMTCB0YWtlcyB0b28gbG9uZwotICogdG8gZW50ZXIgdGhlIHRhcmdldCBzdGF0ZS4gIEludGVuZGVkIHRvIGJlIHVzZWQgYXMgdGhlIHN0cnVjdCBjbGsncwotICogZW5hYmxlIGZ1bmN0aW9uLiAgSWYgRFBMTDMgd2FzIHBhc3NlZCBpbiwgb3IgdGhlIERQTEwgZG9lcyBub3QKLSAqIHN1cHBvcnQgbG93LXBvd2VyIHN0b3AsIG9yIGlmIHRoZSBEUExMIHRvb2sgdG9vIGxvbmcgdG8gZW50ZXIKLSAqIGJ5cGFzcyBvciBsb2NrLCByZXR1cm4gLUVJTlZBTDsgb3RoZXJ3aXNlLCByZXR1cm4gMC4KLSAqLwotaW50IG9tYXAzX25vbmNvcmVfZHBsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQotewotCWludCByOwotCXN0cnVjdCBkcGxsX2RhdGEgKmRkOwotCi0JZGQgPSBjbGstPmRwbGxfZGF0YTsKLQlpZiAoIWRkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChjbGstPnJhdGUgPT0gZGQtPmNsa19ieXBhc3MtPnJhdGUpIHsKLQkJV0FSTl9PTihjbGstPnBhcmVudCAhPSBkZC0+Y2xrX2J5cGFzcyk7Ci0JCXIgPSBfb21hcDNfbm9uY29yZV9kcGxsX2J5cGFzcyhjbGspOwotCX0gZWxzZSB7Ci0JCVdBUk5fT04oY2xrLT5wYXJlbnQgIT0gZGQtPmNsa19yZWYpOwotCQlyID0gX29tYXAzX25vbmNvcmVfZHBsbF9sb2NrKGNsayk7Ci0JfQotCS8qCi0JICpGSVhNRTogdGhpcyBpcyBkdWJpb3VzIC0gaWYgY2xrLT5yYXRlIGhhcyBjaGFuZ2VkLCB3aGF0IGFib3V0Ci0JICogcHJvcGFnYXRpbmc/Ci0JICovCi0JaWYgKCFyKQotCQljbGstPnJhdGUgPSBvbWFwMl9nZXRfZHBsbF9yYXRlKGNsayk7Ci0KLQlyZXR1cm4gcjsKLX0KLQotLyoqCi0gKiBvbWFwM19ub25jb3JlX2RwbGxfZGlzYWJsZSAtIGluc3RydWN0IGEgRFBMTCB0byBlbnRlciBsb3ctcG93ZXIgc3RvcAotICogQGNsazogcG9pbnRlciB0byBhIERQTEwgc3RydWN0IGNsawotICoKLSAqIEluc3RydWN0cyBhIG5vbi1DT1JFIERQTEwgdG8gZW50ZXIgbG93LXBvd2VyIHN0b3AuICBUaGlzIGZ1bmN0aW9uIGlzCi0gKiBpbnRlbmRlZCBmb3IgdXNlIGluIHN0cnVjdCBjbGtvcHMuICBObyByZXR1cm4gdmFsdWUuCi0gKi8KLXZvaWQgb21hcDNfbm9uY29yZV9kcGxsX2Rpc2FibGUoc3RydWN0IGNsayAqY2xrKQotewotCV9vbWFwM19ub25jb3JlX2RwbGxfc3RvcChjbGspOwotfQotCi0KLS8qIE5vbi1DT1JFIERQTEwgcmF0ZSBzZXQgY29kZSAqLwotCi0vKgotICogb21hcDNfbm9uY29yZV9kcGxsX3Byb2dyYW0gLSBzZXQgbm9uLWNvcmUgRFBMTCBNLE4gdmFsdWVzIGRpcmVjdGx5Ci0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgRFBMTCB0byBzZXQKLSAqIEBtOiBEUExMIG11bHRpcGxpZXIgdG8gc2V0Ci0gKiBAbjogRFBMTCBkaXZpZGVyIHRvIHNldAotICogQGZyZXFzZWw6IEZSRVFTRUwgdmFsdWUgdG8gc2V0Ci0gKgotICogUHJvZ3JhbSB0aGUgRFBMTCB3aXRoIHRoZSBzdXBwbGllZCBNLCBOIHZhbHVlcywgYW5kIHdhaXQgZm9yIHRoZSBEUExMIHRvCi0gKiBsb2NrLi4gIFJldHVybnMgLUVJTlZBTCB1cG9uIGVycm9yLCBvciAwIHVwb24gc3VjY2Vzcy4KLSAqLwotaW50IG9tYXAzX25vbmNvcmVfZHBsbF9wcm9ncmFtKHN0cnVjdCBjbGsgKmNsaywgdTE2IG0sIHU4IG4sIHUxNiBmcmVxc2VsKQotewotCXN0cnVjdCBkcGxsX2RhdGEgKmRkID0gY2xrLT5kcGxsX2RhdGE7Ci0JdTMyIHY7Ci0KLQkvKiAzNDMwIEVTMiBUUk06IDQuNy42LjkgRFBMTCBQcm9ncmFtbWluZyBTZXF1ZW5jZSAqLwotCV9vbWFwM19ub25jb3JlX2RwbGxfYnlwYXNzKGNsayk7Ci0KLQkvKiBTZXQgaml0dGVyIGNvcnJlY3Rpb24gKi8KLQlpZiAoIWNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCXYgPSBfX3Jhd19yZWFkbChkZC0+Y29udHJvbF9yZWcpOwotCQl2ICY9IH5kZC0+ZnJlcXNlbF9tYXNrOwotCQl2IHw9IGZyZXFzZWwgPDwgX19mZnMoZGQtPmZyZXFzZWxfbWFzayk7Ci0JCV9fcmF3X3dyaXRlbCh2LCBkZC0+Y29udHJvbF9yZWcpOwotCX0KLQotCS8qIFNldCBEUExMIG11bHRpcGxpZXIsIGRpdmlkZXIgKi8KLQl2ID0gX19yYXdfcmVhZGwoZGQtPm11bHRfZGl2MV9yZWcpOwotCXYgJj0gfihkZC0+bXVsdF9tYXNrIHwgZGQtPmRpdjFfbWFzayk7Ci0JdiB8PSBtIDw8IF9fZmZzKGRkLT5tdWx0X21hc2spOwotCXYgfD0gKG4gLSAxKSA8PCBfX2ZmcyhkZC0+ZGl2MV9tYXNrKTsKLQlfX3Jhd193cml0ZWwodiwgZGQtPm11bHRfZGl2MV9yZWcpOwotCi0JLyogV2UgbGV0IHRoZSBjbG9jayBmcmFtZXdvcmsgc2V0IHRoZSBvdGhlciBvdXRwdXQgZGl2aWRlcnMgbGF0ZXIgKi8KLQotCS8qIFJFVklTSVQ6IFNldCByYW1wLXVwIGRlbGF5PyAqLwotCi0JX29tYXAzX25vbmNvcmVfZHBsbF9sb2NrKGNsayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBvbWFwM19ub25jb3JlX2RwbGxfc2V0X3JhdGUgLSBzZXQgbm9uLWNvcmUgRFBMTCByYXRlCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgRFBMTCB0byBzZXQKLSAqIEByYXRlOiByb3VuZGVkIHRhcmdldCByYXRlCi0gKgotICogU2V0IHRoZSBEUExMIENMS09VVCB0byB0aGUgdGFyZ2V0IHJhdGUuICBJZiB0aGUgRFBMTCBjYW4gZW50ZXIKLSAqIGxvdy1wb3dlciBieXBhc3MsIGFuZCB0aGUgdGFyZ2V0IHJhdGUgaXMgdGhlIGJ5cGFzcyBzb3VyY2UgY2xvY2sKLSAqIHJhdGUsIHRoZW4gY29uZmlndXJlIHRoZSBEUExMIGZvciBieXBhc3MuICBPdGhlcndpc2UsIHJvdW5kIHRoZQotICogdGFyZ2V0IHJhdGUgaWYgaXQgaGFzbid0IGJlZW4gZG9uZSBhbHJlYWR5LCB0aGVuIHByb2dyYW0gYW5kIGxvY2sKLSAqIHRoZSBEUExMLiAgUmV0dXJucyAtRUlOVkFMIHVwb24gZXJyb3IsIG9yIDAgdXBvbiBzdWNjZXNzLgotICovCi1pbnQgb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXN0cnVjdCBjbGsgKm5ld19wYXJlbnQgPSBOVUxMOwotCXUxNiBmcmVxc2VsID0gMDsKLQlzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKLQlpbnQgcmV0OwotCi0JaWYgKCFjbGsgfHwgIXJhdGUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZGQgPSBjbGstPmRwbGxfZGF0YTsKLQlpZiAoIWRkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChyYXRlID09IG9tYXAyX2dldF9kcGxsX3JhdGUoY2xrKSkKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIEVuc3VyZSBib3RoIHRoZSBieXBhc3MgYW5kIHJlZiBjbG9ja3MgYXJlIGVuYWJsZWQgcHJpb3IgdG8KLQkgKiBkb2luZyBhbnl0aGluZzsgd2UgbmVlZCB0aGUgYnlwYXNzIGNsb2NrIHJ1bm5pbmcgdG8gcmVwcm9ncmFtCi0JICogdGhlIERQTEwuCi0JICovCi0Jb21hcDJfY2xrX2VuYWJsZShkZC0+Y2xrX2J5cGFzcyk7Ci0Jb21hcDJfY2xrX2VuYWJsZShkZC0+Y2xrX3JlZik7Ci0KLQlpZiAoZGQtPmNsa19ieXBhc3MtPnJhdGUgPT0gcmF0ZSAmJgotCSAgICAoY2xrLT5kcGxsX2RhdGEtPm1vZGVzICYgKDEgPDwgRFBMTF9MT1dfUE9XRVJfQllQQVNTKSkpIHsKLQkJcHJfZGVidWcoImNsb2NrOiAlczogc2V0IHJhdGU6IGVudGVyaW5nIGJ5cGFzcy5cbiIsIGNsay0+bmFtZSk7Ci0KLQkJcmV0ID0gX29tYXAzX25vbmNvcmVfZHBsbF9ieXBhc3MoY2xrKTsKLQkJaWYgKCFyZXQpCi0JCQluZXdfcGFyZW50ID0gZGQtPmNsa19ieXBhc3M7Ci0JfSBlbHNlIHsKLQkJaWYgKGRkLT5sYXN0X3JvdW5kZWRfcmF0ZSAhPSByYXRlKQotCQkJb21hcDJfZHBsbF9yb3VuZF9yYXRlKGNsaywgcmF0ZSk7Ci0KLQkJaWYgKGRkLT5sYXN0X3JvdW5kZWRfcmF0ZSA9PSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJLyogTm8gZnJlcXNlbCBvbiBPTUFQNCAqLwotCQlpZiAoIWNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCQlmcmVxc2VsID0gX29tYXAzX2RwbGxfY29tcHV0ZV9mcmVxc2VsKGNsaywKLQkJCQkJCWRkLT5sYXN0X3JvdW5kZWRfbik7Ci0JCQlpZiAoIWZyZXFzZWwpCi0JCQkJV0FSTl9PTigxKTsKLQkJfQotCi0JCXByX2RlYnVnKCJjbG9jazogJXM6IHNldCByYXRlOiBsb2NraW5nIHJhdGUgdG8gJWx1LlxuIiwKLQkJCSBjbGstPm5hbWUsIHJhdGUpOwotCi0JCXJldCA9IG9tYXAzX25vbmNvcmVfZHBsbF9wcm9ncmFtKGNsaywgZGQtPmxhc3Rfcm91bmRlZF9tLAotCQkJCQkJIGRkLT5sYXN0X3JvdW5kZWRfbiwgZnJlcXNlbCk7Ci0JCWlmICghcmV0KQotCQkJbmV3X3BhcmVudCA9IGRkLT5jbGtfcmVmOwotCX0KLQlpZiAoIXJldCkgewotCQkvKgotCQkgKiBTd2l0Y2ggdGhlIHBhcmVudCBjbG9jayBpbiB0aGUgaGVpcmFyY2h5LCBhbmQgbWFrZSBzdXJlCi0JCSAqIHRoYXQgdGhlIG5ldyBwYXJlbnQncyB1c2Vjb3VudCBpcyBjb3JyZWN0LiAgTm90ZTogd2UKLQkJICogZW5hYmxlIHRoZSBuZXcgcGFyZW50IGJlZm9yZSBkaXNhYmxpbmcgdGhlIG9sZCB0byBhdm9pZAotCQkgKiBhbnkgdW5uZWNlc3NhcnkgaGFyZHdhcmUgZGlzYWJsZS0+ZW5hYmxlIHRyYW5zaXRpb25zLgotCQkgKi8KLQkJaWYgKGNsay0+dXNlY291bnQpIHsKLQkJCW9tYXAyX2Nsa19lbmFibGUobmV3X3BhcmVudCk7Ci0JCQlvbWFwMl9jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7Ci0JCX0KLQkJY2xrX3JlcGFyZW50KGNsaywgbmV3X3BhcmVudCk7Ci0JCWNsay0+cmF0ZSA9IHJhdGU7Ci0JfQotCW9tYXAyX2Nsa19kaXNhYmxlKGRkLT5jbGtfcmVmKTsKLQlvbWFwMl9jbGtfZGlzYWJsZShkZC0+Y2xrX2J5cGFzcyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogRFBMTCBhdXRvaWRsZSByZWFkL3NldCBjb2RlICovCi0KLS8qKgotICogb21hcDNfZHBsbF9hdXRvaWRsZV9yZWFkIC0gcmVhZCBhIERQTEwncyBhdXRvaWRsZSBiaXRzCi0gKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgdGhlIERQTEwgdG8gcmVhZAotICoKLSAqIFJldHVybiB0aGUgRFBMTCdzIGF1dG9pZGxlIGJpdHMsIHNoaWZ0ZWQgZG93biB0byBiaXQgMC4gIFJldHVybnMKLSAqIC1FSU5WQUwgaWYgcGFzc2VkIGEgbnVsbCBwb2ludGVyIG9yIGlmIHRoZSBzdHJ1Y3QgY2xrIGRvZXMgbm90Ci0gKiBhcHBlYXIgdG8gcmVmZXIgdG8gYSBEUExMLgotICovCi11MzIgb21hcDNfZHBsbF9hdXRvaWRsZV9yZWFkKHN0cnVjdCBjbGsgKmNsaykKLXsKLQljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKLQl1MzIgdjsKLQotCWlmICghY2xrIHx8ICFjbGstPmRwbGxfZGF0YSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkZCA9IGNsay0+ZHBsbF9kYXRhOwotCi0JdiA9IF9fcmF3X3JlYWRsKGRkLT5hdXRvaWRsZV9yZWcpOwotCXYgJj0gZGQtPmF1dG9pZGxlX21hc2s7Ci0JdiA+Pj0gX19mZnMoZGQtPmF1dG9pZGxlX21hc2spOwotCi0JcmV0dXJuIHY7Ci19Ci0KLS8qKgotICogb21hcDNfZHBsbF9hbGxvd19pZGxlIC0gZW5hYmxlIERQTEwgYXV0b2lkbGUgYml0cwotICogQGNsazogc3RydWN0IGNsayAqIG9mIHRoZSBEUExMIHRvIG9wZXJhdGUgb24KLSAqCi0gKiBFbmFibGUgRFBMTCBhdXRvbWF0aWMgaWRsZSBjb250cm9sLiAgVGhpcyBhdXRvbWF0aWMgaWRsZSBtb2RlCi0gKiBzd2l0Y2hpbmcgdGFrZXMgZWZmZWN0IG9ubHkgd2hlbiB0aGUgRFBMTCBpcyBsb2NrZWQsIGF0IGxlYXN0IG9uCi0gKiBPTUFQMzQzMC4gIFRoZSBEUExMIHdpbGwgZW50ZXIgbG93LXBvd2VyIHN0b3Agd2hlbiBpdHMgZG93bnN0cmVhbQotICogY2xvY2tzIGFyZSBnYXRlZC4gIE5vIHJldHVybiB2YWx1ZS4KLSAqLwotdm9pZCBvbWFwM19kcGxsX2FsbG93X2lkbGUoc3RydWN0IGNsayAqY2xrKQotewotCWNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgKmRkOwotCXUzMiB2OwotCi0JaWYgKCFjbGsgfHwgIWNsay0+ZHBsbF9kYXRhKQotCQlyZXR1cm47Ci0KLQlkZCA9IGNsay0+ZHBsbF9kYXRhOwotCi0JLyoKLQkgKiBSRVZJU0lUOiBDT1JFIERQTEwgY2FuIG9wdGlvbmFsbHkgZW50ZXIgbG93LXBvd2VyIGJ5cGFzcwotCSAqIGJ5IHdyaXRpbmcgMHg1IGluc3RlYWQgb2YgMHgxLiAgQWRkIHNvbWUgbWVjaGFuaXNtIHRvCi0JICogb3B0aW9uYWxseSBlbnRlciB0aGlzIG1vZGUuCi0JICovCi0JdiA9IF9fcmF3X3JlYWRsKGRkLT5hdXRvaWRsZV9yZWcpOwotCXYgJj0gfmRkLT5hdXRvaWRsZV9tYXNrOwotCXYgfD0gRFBMTF9BVVRPSURMRV9MT1dfUE9XRVJfU1RPUCA8PCBfX2ZmcyhkZC0+YXV0b2lkbGVfbWFzayk7Ci0JX19yYXdfd3JpdGVsKHYsIGRkLT5hdXRvaWRsZV9yZWcpOwotfQotCi0vKioKLSAqIG9tYXAzX2RwbGxfZGVueV9pZGxlIC0gcHJldmVudCBEUExMIGZyb20gYXV0b21hdGljYWxseSBpZGxpbmcKLSAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiB0aGUgRFBMTCB0byBvcGVyYXRlIG9uCi0gKgotICogRGlzYWJsZSBEUExMIGF1dG9tYXRpYyBpZGxlIGNvbnRyb2wuICBObyByZXR1cm4gdmFsdWUuCi0gKi8KLXZvaWQgb21hcDNfZHBsbF9kZW55X2lkbGUoc3RydWN0IGNsayAqY2xrKQotewotCWNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgKmRkOwotCXUzMiB2OwotCi0JaWYgKCFjbGsgfHwgIWNsay0+ZHBsbF9kYXRhKQotCQlyZXR1cm47Ci0KLQlkZCA9IGNsay0+ZHBsbF9kYXRhOwotCi0JdiA9IF9fcmF3X3JlYWRsKGRkLT5hdXRvaWRsZV9yZWcpOwotCXYgJj0gfmRkLT5hdXRvaWRsZV9tYXNrOwotCXYgfD0gRFBMTF9BVVRPSURMRV9ESVNBQkxFIDw8IF9fZmZzKGRkLT5hdXRvaWRsZV9tYXNrKTsKLQlfX3Jhd193cml0ZWwodiwgZGQtPmF1dG9pZGxlX3JlZyk7Ci0KLX0KLQotLyogQ2xvY2sgY29udHJvbCBmb3IgRFBMTCBvdXRwdXRzICovCi0KLS8qKgotICogb21hcDNfY2xrb3V0eDJfcmVjYWxjIC0gcmVjYWxjdWxhdGUgRFBMTCBYMiBvdXRwdXQgdmlydHVhbCBjbG9jayByYXRlCi0gKiBAY2xrOiBEUExMIG91dHB1dCBzdHJ1Y3QgY2xrCi0gKgotICogVXNpbmcgcGFyZW50IGNsb2NrIERQTEwgZGF0YSwgbG9vayB1cCBEUExMIHN0YXRlLiAgSWYgbG9ja2VkLCBzZXQgb3VyCi0gKiByYXRlIHRvIHRoZSBkcGxsX2NsayAqIDI7IG90aGVyd2lzZSwganVzdCB1c2UgZHBsbF9jbGsuCi0gKi8KLXVuc2lnbmVkIGxvbmcgb21hcDNfY2xrb3V0eDJfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKLQl1bnNpZ25lZCBsb25nIHJhdGU7Ci0JdTMyIHY7Ci0Jc3RydWN0IGNsayAqcGNsazsKLQotCS8qIFdhbGsgdXAgdGhlIHBhcmVudHMgb2YgY2xrLCBsb29raW5nIGZvciBhIERQTEwgKi8KLQlwY2xrID0gY2xrLT5wYXJlbnQ7Ci0Jd2hpbGUgKHBjbGsgJiYgIXBjbGstPmRwbGxfZGF0YSkKLQkJcGNsayA9IHBjbGstPnBhcmVudDsKLQotCS8qIGNsayBkb2VzIG5vdCBoYXZlIGEgRFBMTCBhcyBhIHBhcmVudD8gKi8KLQlXQVJOX09OKCFwY2xrKTsKLQotCWRkID0gcGNsay0+ZHBsbF9kYXRhOwotCi0JV0FSTl9PTighZGQtPmVuYWJsZV9tYXNrKTsKLQotCXYgPSBfX3Jhd19yZWFkbChkZC0+Y29udHJvbF9yZWcpICYgZGQtPmVuYWJsZV9tYXNrOwotCXYgPj49IF9fZmZzKGRkLT5lbmFibGVfbWFzayk7Ci0JaWYgKHYgIT0gT01BUDNYWFhfRU5fRFBMTF9MT0NLRUQpCi0JCXJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZTsKLQllbHNlCi0JCXJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAqIDI7Ci0JcmV0dXJuIHJhdGU7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGwzeHh4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGwzeHh4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMyY2NkOTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2RwbGwzeHh4LmMKQEAgLTAsMCArMSw1OTkgQEAKKy8qCisgKiBPTUFQMy80IC0gc3BlY2lmaWMgRFBMTCBjb250cm9sIGZ1bmN0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQorICogVGVzdGluZyBhbmQgaW50ZWdyYXRpb24gZml4ZXMgYnkgSm91bmkgSMO2Z2FuZGVyCisgKgorICogMzZ4eCBzdXBwb3J0IGFkZGVkIGJ5IFZpc2h3YW5hdGggQlMsIFJpY2hhcmQgV29vZHJ1ZmYsIGFuZCBOaXNoYW50aAorICogTWVub24KKyAqCisgKiBQYXJ0cyBvZiB0aGlzIGNvZGUgYXJlIGJhc2VkIG9uIGNvZGUgd3JpdHRlbiBieQorICogUmljaGFyZCBXb29kcnVmZiwgVG9ueSBMaW5kZ3JlbiwgVHV1a2thIFRpa2thbmVuLCBLYXJ0aGlrIERhc3UKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vY2xrZGV2Lmg+CisKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgInBybS5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTM0eHguaCIKKyNpbmNsdWRlICJjbS5oIgorI2luY2x1ZGUgImNtLXJlZ2JpdHMtMzR4eC5oIgorCisvKiBDTV9BVVRPSURMRV9QTEwqLkFVVE9fKiBiaXQgdmFsdWVzICovCisjZGVmaW5lIERQTExfQVVUT0lETEVfRElTQUJMRQkJCTB4MAorI2RlZmluZSBEUExMX0FVVE9JRExFX0xPV19QT1dFUl9TVE9QCQkweDEKKworI2RlZmluZSBNQVhfRFBMTF9XQUlUX1RSSUVTCQkxMDAwMDAwCisKKy8qIFByaXZhdGUgZnVuY3Rpb25zICovCisKKy8qIF9vbWFwM19kcGxsX3dyaXRlX2Nsa2VuIC0gd3JpdGUgY2xrZW5fYml0cyBhcmcgdG8gYSBEUExMJ3MgZW5hYmxlIGJpdHMgKi8KK3N0YXRpYyB2b2lkIF9vbWFwM19kcGxsX3dyaXRlX2Nsa2VuKHN0cnVjdCBjbGsgKmNsaywgdTggY2xrZW5fYml0cykKK3sKKwljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKwl1MzIgdjsKKworCWRkID0gY2xrLT5kcGxsX2RhdGE7CisKKwl2ID0gX19yYXdfcmVhZGwoZGQtPmNvbnRyb2xfcmVnKTsKKwl2ICY9IH5kZC0+ZW5hYmxlX21hc2s7CisJdiB8PSBjbGtlbl9iaXRzIDw8IF9fZmZzKGRkLT5lbmFibGVfbWFzayk7CisJX19yYXdfd3JpdGVsKHYsIGRkLT5jb250cm9sX3JlZyk7Cit9CisKKy8qIF9vbWFwM193YWl0X2RwbGxfc3RhdHVzOiB3YWl0IGZvciBhIERQTEwgdG8gZW50ZXIgYSBzcGVjaWZpYyBzdGF0ZSAqLworc3RhdGljIGludCBfb21hcDNfd2FpdF9kcGxsX3N0YXR1cyhzdHJ1Y3QgY2xrICpjbGssIHU4IHN0YXRlKQoreworCWNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgKmRkOworCWludCBpID0gMDsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCWRkID0gY2xrLT5kcGxsX2RhdGE7CisKKwlzdGF0ZSA8PD0gX19mZnMoZGQtPmlkbGVzdF9tYXNrKTsKKworCXdoaWxlICgoKF9fcmF3X3JlYWRsKGRkLT5pZGxlc3RfcmVnKSAmIGRkLT5pZGxlc3RfbWFzaykgIT0gc3RhdGUpICYmCisJICAgICAgIGkgPCBNQVhfRFBMTF9XQUlUX1RSSUVTKSB7CisJCWkrKzsKKwkJdWRlbGF5KDEpOworCX0KKworCWlmIChpID09IE1BWF9EUExMX1dBSVRfVFJJRVMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjbG9jazogJXMgZmFpbGVkIHRyYW5zaXRpb24gdG8gJyVzJ1xuIiwKKwkJICAgICAgIGNsay0+bmFtZSwgKHN0YXRlKSA/ICJsb2NrZWQiIDogImJ5cGFzc2VkIik7CisJfSBlbHNlIHsKKwkJcHJfZGVidWcoImNsb2NrOiAlcyB0cmFuc2l0aW9uIHRvICclcycgaW4gJWQgbG9vcHNcbiIsCisJCQkgY2xrLT5uYW1lLCAoc3RhdGUpID8gImxvY2tlZCIgOiAiYnlwYXNzZWQiLCBpKTsKKworCQlyZXQgPSAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisKKy8qIEZyb20gMzQzMCBUUk0gRVMyIDQuNy42LjIgKi8KK3N0YXRpYyB1MTYgX29tYXAzX2RwbGxfY29tcHV0ZV9mcmVxc2VsKHN0cnVjdCBjbGsgKmNsaywgdTggbikKK3sKKwl1bnNpZ25lZCBsb25nIGZpbnQ7CisJdTE2IGYgPSAwOworCisJZmludCA9IGNsay0+ZHBsbF9kYXRhLT5jbGtfcmVmLT5yYXRlIC8gbjsKKworCXByX2RlYnVnKCJjbG9jazogZmludCBpcyAlbHVcbiIsIGZpbnQpOworCisJaWYgKGZpbnQgPj0gNzUwMDAwICYmIGZpbnQgPD0gMTAwMDAwMCkKKwkJZiA9IDB4MzsKKwllbHNlIGlmIChmaW50ID4gMTAwMDAwMCAmJiBmaW50IDw9IDEyNTAwMDApCisJCWYgPSAweDQ7CisJZWxzZSBpZiAoZmludCA+IDEyNTAwMDAgJiYgZmludCA8PSAxNTAwMDAwKQorCQlmID0gMHg1OworCWVsc2UgaWYgKGZpbnQgPiAxNTAwMDAwICYmIGZpbnQgPD0gMTc1MDAwMCkKKwkJZiA9IDB4NjsKKwllbHNlIGlmIChmaW50ID4gMTc1MDAwMCAmJiBmaW50IDw9IDIxMDAwMDApCisJCWYgPSAweDc7CisJZWxzZSBpZiAoZmludCA+IDc1MDAwMDAgJiYgZmludCA8PSAxMDAwMDAwMCkKKwkJZiA9IDB4QjsKKwllbHNlIGlmIChmaW50ID4gMTAwMDAwMDAgJiYgZmludCA8PSAxMjUwMDAwMCkKKwkJZiA9IDB4QzsKKwllbHNlIGlmIChmaW50ID4gMTI1MDAwMDAgJiYgZmludCA8PSAxNTAwMDAwMCkKKwkJZiA9IDB4RDsKKwllbHNlIGlmIChmaW50ID4gMTUwMDAwMDAgJiYgZmludCA8PSAxNzUwMDAwMCkKKwkJZiA9IDB4RTsKKwllbHNlIGlmIChmaW50ID4gMTc1MDAwMDAgJiYgZmludCA8PSAyMTAwMDAwMCkKKwkJZiA9IDB4RjsKKwllbHNlCisJCXByX2RlYnVnKCJjbG9jazogdW5rbm93biBmcmVxc2VsIHNldHRpbmcgZm9yICVkXG4iLCBuKTsKKworCXJldHVybiBmOworfQorCisvKgorICogX29tYXAzX25vbmNvcmVfZHBsbF9sb2NrIC0gaW5zdHJ1Y3QgYSBEUExMIHRvIGxvY2sgYW5kIHdhaXQgZm9yIHJlYWRpbmVzcworICogQGNsazogcG9pbnRlciB0byBhIERQTEwgc3RydWN0IGNsaworICoKKyAqIEluc3RydWN0cyBhIG5vbi1DT1JFIERQTEwgdG8gbG9jay4gIFdhaXRzIGZvciB0aGUgRFBMTCB0byByZXBvcnQKKyAqIHJlYWRpbmVzcyBiZWZvcmUgcmV0dXJuaW5nLiAgV2lsbCBzYXZlIGFuZCByZXN0b3JlIHRoZSBEUExMJ3MKKyAqIGF1dG9pZGxlIHN0YXRlIGFjcm9zcyB0aGUgZW5hYmxlLCBwZXIgdGhlIENEUCBjb2RlLiAgSWYgdGhlIERQTEwKKyAqIGxvY2tlZCBzdWNjZXNzZnVsbHksIHJldHVybiAwOyBpZiB0aGUgRFBMTCBkaWQgbm90IGxvY2sgaW4gdGhlIHRpbWUKKyAqIGFsbG90dGVkLCBvciBEUExMMyB3YXMgcGFzc2VkIGluLCByZXR1cm4gLUVJTlZBTC4KKyAqLworc3RhdGljIGludCBfb21hcDNfbm9uY29yZV9kcGxsX2xvY2soc3RydWN0IGNsayAqY2xrKQoreworCXU4IGFpOworCWludCByOworCisJcHJfZGVidWcoImNsb2NrOiBsb2NraW5nIERQTEwgJXNcbiIsIGNsay0+bmFtZSk7CisKKwlhaSA9IG9tYXAzX2RwbGxfYXV0b2lkbGVfcmVhZChjbGspOworCisJb21hcDNfZHBsbF9kZW55X2lkbGUoY2xrKTsKKworCV9vbWFwM19kcGxsX3dyaXRlX2Nsa2VuKGNsaywgRFBMTF9MT0NLRUQpOworCisJciA9IF9vbWFwM193YWl0X2RwbGxfc3RhdHVzKGNsaywgMSk7CisKKwlpZiAoYWkpCisJCW9tYXAzX2RwbGxfYWxsb3dfaWRsZShjbGspOworCisJcmV0dXJuIHI7Cit9CisKKy8qCisgKiBfb21hcDNfbm9uY29yZV9kcGxsX2J5cGFzcyAtIGluc3RydWN0IGEgRFBMTCB0byBieXBhc3MgYW5kIHdhaXQgZm9yIHJlYWRpbmVzcworICogQGNsazogcG9pbnRlciB0byBhIERQTEwgc3RydWN0IGNsaworICoKKyAqIEluc3RydWN0cyBhIG5vbi1DT1JFIERQTEwgdG8gZW50ZXIgbG93LXBvd2VyIGJ5cGFzcyBtb2RlLiAgSW4KKyAqIGJ5cGFzcyBtb2RlLCB0aGUgRFBMTCdzIHJhdGUgaXMgc2V0IGVxdWFsIHRvIGl0cyBwYXJlbnQgY2xvY2sncworICogcmF0ZS4gIFdhaXRzIGZvciB0aGUgRFBMTCB0byByZXBvcnQgcmVhZGluZXNzIGJlZm9yZSByZXR1cm5pbmcuCisgKiBXaWxsIHNhdmUgYW5kIHJlc3RvcmUgdGhlIERQTEwncyBhdXRvaWRsZSBzdGF0ZSBhY3Jvc3MgdGhlIGVuYWJsZSwKKyAqIHBlciB0aGUgQ0RQIGNvZGUuICBJZiB0aGUgRFBMTCBlbnRlcmVkIGJ5cGFzcyBtb2RlIHN1Y2Nlc3NmdWxseSwKKyAqIHJldHVybiAwOyBpZiB0aGUgRFBMTCBkaWQgbm90IGVudGVyIGJ5cGFzcyBpbiB0aGUgdGltZSBhbGxvdHRlZCwgb3IKKyAqIERQTEwzIHdhcyBwYXNzZWQgaW4sIG9yIHRoZSBEUExMIGRvZXMgbm90IHN1cHBvcnQgbG93LXBvd2VyIGJ5cGFzcywKKyAqIHJldHVybiAtRUlOVkFMLgorICovCitzdGF0aWMgaW50IF9vbWFwM19ub25jb3JlX2RwbGxfYnlwYXNzKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpbnQgcjsKKwl1OCBhaTsKKworCWlmICghKGNsay0+ZHBsbF9kYXRhLT5tb2RlcyAmICgxIDw8IERQTExfTE9XX1BPV0VSX0JZUEFTUykpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByX2RlYnVnKCJjbG9jazogY29uZmlndXJpbmcgRFBMTCAlcyBmb3IgbG93LXBvd2VyIGJ5cGFzc1xuIiwKKwkJIGNsay0+bmFtZSk7CisKKwlhaSA9IG9tYXAzX2RwbGxfYXV0b2lkbGVfcmVhZChjbGspOworCisJX29tYXAzX2RwbGxfd3JpdGVfY2xrZW4oY2xrLCBEUExMX0xPV19QT1dFUl9CWVBBU1MpOworCisJciA9IF9vbWFwM193YWl0X2RwbGxfc3RhdHVzKGNsaywgMCk7CisKKwlpZiAoYWkpCisJCW9tYXAzX2RwbGxfYWxsb3dfaWRsZShjbGspOworCWVsc2UKKwkJb21hcDNfZHBsbF9kZW55X2lkbGUoY2xrKTsKKworCXJldHVybiByOworfQorCisvKgorICogX29tYXAzX25vbmNvcmVfZHBsbF9zdG9wIC0gaW5zdHJ1Y3QgYSBEUExMIHRvIHN0b3AKKyAqIEBjbGs6IHBvaW50ZXIgdG8gYSBEUExMIHN0cnVjdCBjbGsKKyAqCisgKiBJbnN0cnVjdHMgYSBub24tQ09SRSBEUExMIHRvIGVudGVyIGxvdy1wb3dlciBzdG9wLiBXaWxsIHNhdmUgYW5kCisgKiByZXN0b3JlIHRoZSBEUExMJ3MgYXV0b2lkbGUgc3RhdGUgYWNyb3NzIHRoZSBzdG9wLCBwZXIgdGhlIENEUAorICogY29kZS4gIElmIERQTEwzIHdhcyBwYXNzZWQgaW4sIG9yIHRoZSBEUExMIGRvZXMgbm90IHN1cHBvcnQKKyAqIGxvdy1wb3dlciBzdG9wLCByZXR1cm4gLUVJTlZBTDsgb3RoZXJ3aXNlLCByZXR1cm4gMC4KKyAqLworc3RhdGljIGludCBfb21hcDNfbm9uY29yZV9kcGxsX3N0b3Aoc3RydWN0IGNsayAqY2xrKQoreworCXU4IGFpOworCisJaWYgKCEoY2xrLT5kcGxsX2RhdGEtPm1vZGVzICYgKDEgPDwgRFBMTF9MT1dfUE9XRVJfU1RPUCkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByX2RlYnVnKCJjbG9jazogc3RvcHBpbmcgRFBMTCAlc1xuIiwgY2xrLT5uYW1lKTsKKworCWFpID0gb21hcDNfZHBsbF9hdXRvaWRsZV9yZWFkKGNsayk7CisKKwlfb21hcDNfZHBsbF93cml0ZV9jbGtlbihjbGssIERQTExfTE9XX1BPV0VSX1NUT1ApOworCisJaWYgKGFpKQorCQlvbWFwM19kcGxsX2FsbG93X2lkbGUoY2xrKTsKKwllbHNlCisJCW9tYXAzX2RwbGxfZGVueV9pZGxlKGNsayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBsb29rdXBfZGNvX3NkZGl2IC0gIFNldCBqLXR5cGUgRFBMTDQgY29tcGVuc2F0aW9uIHZhcmlhYmxlcworICogQGNsazogcG9pbnRlciB0byBhIERQTEwgc3RydWN0IGNsaworICogQGRjbzogZGlnaXRhbCBjb250cm9sIG9zY2lsbGF0b3Igc2VsZWN0b3IKKyAqIEBzZF9kaXY6IHRhcmdldCBzaWdtYS1kZWx0YSBkaXZpZGVyCisgKiBAbTogRFBMTCBtdWx0aXBsaWVyIHRvIHNldAorICogQG46IERQTEwgZGl2aWRlciB0byBzZXQKKyAqCisgKiBTZWUgMzZ4eCBUUk0gc2VjdGlvbiAzLjUuMy4zLjMuMiAiVHlwZSBCIERQTEwgKExvdy1KaXR0ZXIpIgorICoKKyAqIFhYWCBUaGlzIGNvZGUgaXMgbm90IG5lZWRlZCBmb3IgMzQzMC9BTTM1eHg7IGNhbiBpdCBiZSBvcHRpbWl6ZWQKKyAqIG91dCBpbiBub24tbXVsdGktT01BUCBidWlsZHMgZm9yIHRob3NlIGNoaXBzPworICovCitzdGF0aWMgdm9pZCBsb29rdXBfZGNvX3NkZGl2KHN0cnVjdCBjbGsgKmNsaywgdTggKmRjbywgdTggKnNkX2RpdiwgdTE2IG0sCisJCQkgICAgIHU4IG4pCit7CisJdW5zaWduZWQgbG9uZyBmaW50LCBjbGtpbnAsIHNkOyAvKiB3YXRjaCBvdXQgZm9yIG92ZXJmbG93ICovCisJaW50IG1vZDEsIG1vZDI7CisKKwljbGtpbnAgPSBjbGstPnBhcmVudC0+cmF0ZTsKKwlmaW50ID0gKGNsa2lucCAvIG4pICogbTsKKworCWlmIChmaW50IDwgMTAwMDAwMDAwMCkKKwkJKmRjbyA9IDI7CisJZWxzZQorCQkqZGNvID0gNDsKKwkvKgorCSAqIHRhcmdldCBzaWdtYS1kZWx0YSB0byBuZWFyIDI1ME1IegorCSAqIHNkID0gY2VpbFsobS8obisxKSkgKiAoY2xraW5wX01IeiAvIDI1MCldCisJICovCisJY2xraW5wIC89IDEwMDAwMDsgLyogc2hpZnQgZnJvbSBNSHogdG8gMTAqSHogZm9yIDM4LjQgYW5kIDE5LjIgKi8KKwltb2QxID0gKGNsa2lucCAqIG0pICUgKDI1MCAqIG4pOworCXNkID0gKGNsa2lucCAqIG0pIC8gKDI1MCAqIG4pOworCW1vZDIgPSBzZCAlIDEwOworCXNkIC89IDEwOworCisJaWYgKG1vZDEgfHwgbW9kMikKKwkJc2QrKzsKKwkqc2RfZGl2ID0gc2Q7Cit9CisKKy8qCisgKiBfb21hcDNfbm9uY29yZV9kcGxsX3Byb2dyYW0gLSBzZXQgbm9uLWNvcmUgRFBMTCBNLE4gdmFsdWVzIGRpcmVjdGx5CisgKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgRFBMTCB0byBzZXQKKyAqIEBtOiBEUExMIG11bHRpcGxpZXIgdG8gc2V0CisgKiBAbjogRFBMTCBkaXZpZGVyIHRvIHNldAorICogQGZyZXFzZWw6IEZSRVFTRUwgdmFsdWUgdG8gc2V0CisgKgorICogUHJvZ3JhbSB0aGUgRFBMTCB3aXRoIHRoZSBzdXBwbGllZCBNLCBOIHZhbHVlcywgYW5kIHdhaXQgZm9yIHRoZSBEUExMIHRvCisgKiBsb2NrLi4gIFJldHVybnMgLUVJTlZBTCB1cG9uIGVycm9yLCBvciAwIHVwb24gc3VjY2Vzcy4KKyAqLworc3RhdGljIGludCBvbWFwM19ub25jb3JlX2RwbGxfcHJvZ3JhbShzdHJ1Y3QgY2xrICpjbGssIHUxNiBtLCB1OCBuLCB1MTYgZnJlcXNlbCkKK3sKKwlzdHJ1Y3QgZHBsbF9kYXRhICpkZCA9IGNsay0+ZHBsbF9kYXRhOworCXUzMiB2OworCisJLyogMzQzMCBFUzIgVFJNOiA0LjcuNi45IERQTEwgUHJvZ3JhbW1pbmcgU2VxdWVuY2UgKi8KKwlfb21hcDNfbm9uY29yZV9kcGxsX2J5cGFzcyhjbGspOworCisJLyoKKwkgKiBTZXQgaml0dGVyIGNvcnJlY3Rpb24uIE5vIGppdHRlciBjb3JyZWN0aW9uIGZvciBPTUFQNCBhbmQgMzYzMAorCSAqIHNpbmNlIGZyZXFzZWwgZmllbGQgaXMgbm8gbG9uZ2VyIHByZXNlbnQKKwkgKi8KKwlpZiAoIWNwdV9pc19vbWFwNDR4eCgpICYmICFjcHVfaXNfb21hcDM2MzAoKSkgeworCQl2ID0gX19yYXdfcmVhZGwoZGQtPmNvbnRyb2xfcmVnKTsKKwkJdiAmPSB+ZGQtPmZyZXFzZWxfbWFzazsKKwkJdiB8PSBmcmVxc2VsIDw8IF9fZmZzKGRkLT5mcmVxc2VsX21hc2spOworCQlfX3Jhd193cml0ZWwodiwgZGQtPmNvbnRyb2xfcmVnKTsKKwl9CisKKwkvKiBTZXQgRFBMTCBtdWx0aXBsaWVyLCBkaXZpZGVyICovCisJdiA9IF9fcmF3X3JlYWRsKGRkLT5tdWx0X2RpdjFfcmVnKTsKKwl2ICY9IH4oZGQtPm11bHRfbWFzayB8IGRkLT5kaXYxX21hc2spOworCXYgfD0gbSA8PCBfX2ZmcyhkZC0+bXVsdF9tYXNrKTsKKwl2IHw9IChuIC0gMSkgPDwgX19mZnMoZGQtPmRpdjFfbWFzayk7CisKKwkvKgorCSAqIFhYWCBUaGlzIGNvZGUgaXMgbm90IG5lZWRlZCBmb3IgMzQzMC9BTTM1WFg7IGNhbiBpdCBiZSBvcHRpbWl6ZWQKKwkgKiBvdXQgaW4gbm9uLW11bHRpLU9NQVAgYnVpbGRzIGZvciB0aG9zZSBjaGlwcz8KKwkgKi8KKwlpZiAoKGRkLT5mbGFncyAmIERQTExfSl9UWVBFKSAmJiAhKGRkLT5mbGFncyAmIERQTExfTk9fRENPX1NFTCkpIHsKKwkJdTggZGNvLCBzZF9kaXY7CisJCWxvb2t1cF9kY29fc2RkaXYoY2xrLCAmZGNvLCAmc2RfZGl2LCBtLCBuKTsKKwkJLyogWFhYIFRoaXMgcHJvYmFibHkgd2lsbCBuZWVkIHJldmlzaW9uIGZvciBPTUFQNCAqLworCQl2ICY9IH4oT01BUDM2MzBfUEVSSVBIX0RQTExfRENPX1NFTF9NQVNLCisJCQl8IE9NQVAzNjMwX1BFUklQSF9EUExMX1NEX0RJVl9NQVNLKTsKKwkJdiB8PSBkY28gPDwgX19mZnMoT01BUDM2MzBfUEVSSVBIX0RQTExfRENPX1NFTF9NQVNLKTsKKwkJdiB8PSBzZF9kaXYgPDwgX19mZnMoT01BUDM2MzBfUEVSSVBIX0RQTExfU0RfRElWX01BU0spOworCX0KKworCV9fcmF3X3dyaXRlbCh2LCBkZC0+bXVsdF9kaXYxX3JlZyk7CisKKwkvKiBXZSBsZXQgdGhlIGNsb2NrIGZyYW1ld29yayBzZXQgdGhlIG90aGVyIG91dHB1dCBkaXZpZGVycyBsYXRlciAqLworCisJLyogUkVWSVNJVDogU2V0IHJhbXAtdXAgZGVsYXk/ICovCisKKwlfb21hcDNfbm9uY29yZV9kcGxsX2xvY2soY2xrKTsKKworCXJldHVybiAwOworfQorCisvKiBQdWJsaWMgZnVuY3Rpb25zICovCisKKy8qKgorICogb21hcDNfZHBsbF9yZWNhbGMgLSByZWNhbGN1bGF0ZSBEUExMIHJhdGUKKyAqIEBjbGs6IERQTEwgc3RydWN0IGNsaworICoKKyAqIFJlY2FsY3VsYXRlIGFuZCBwcm9wYWdhdGUgdGhlIERQTEwgcmF0ZS4KKyAqLwordW5zaWduZWQgbG9uZyBvbWFwM19kcGxsX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIG9tYXAyX2dldF9kcGxsX3JhdGUoY2xrKTsKK30KKworLyogTm9uLUNPUkUgRFBMTCAoZS5nLiwgRFBMTHMgdGhhdCBkbyBub3QgY29udHJvbCBTRFJDKSBjbG9jayBmdW5jdGlvbnMgKi8KKworLyoqCisgKiBvbWFwM19ub25jb3JlX2RwbGxfZW5hYmxlIC0gaW5zdHJ1Y3QgYSBEUExMIHRvIGVudGVyIGJ5cGFzcyBvciBsb2NrIG1vZGUKKyAqIEBjbGs6IHBvaW50ZXIgdG8gYSBEUExMIHN0cnVjdCBjbGsKKyAqCisgKiBJbnN0cnVjdHMgYSBub24tQ09SRSBEUExMIHRvIGVuYWJsZSwgZS5nLiwgdG8gZW50ZXIgYnlwYXNzIG9yIGxvY2suCisgKiBUaGUgY2hvaWNlIG9mIG1vZGVzIGRlcGVuZHMgb24gdGhlIERQTEwncyBwcm9ncmFtbWVkIHJhdGU6IGlmIGl0IGlzCisgKiB0aGUgc2FtZSBhcyB0aGUgRFBMTCdzIHBhcmVudCBjbG9jaywgaXQgd2lsbCBlbnRlciBieXBhc3M7CisgKiBvdGhlcndpc2UsIGl0IHdpbGwgZW50ZXIgbG9jay4gIFRoaXMgY29kZSB3aWxsIHdhaXQgZm9yIHRoZSBEUExMIHRvCisgKiBpbmRpY2F0ZSByZWFkaW5lc3MgYmVmb3JlIHJldHVybmluZywgdW5sZXNzIHRoZSBEUExMIHRha2VzIHRvbyBsb25nCisgKiB0byBlbnRlciB0aGUgdGFyZ2V0IHN0YXRlLiAgSW50ZW5kZWQgdG8gYmUgdXNlZCBhcyB0aGUgc3RydWN0IGNsaydzCisgKiBlbmFibGUgZnVuY3Rpb24uICBJZiBEUExMMyB3YXMgcGFzc2VkIGluLCBvciB0aGUgRFBMTCBkb2VzIG5vdAorICogc3VwcG9ydCBsb3ctcG93ZXIgc3RvcCwgb3IgaWYgdGhlIERQTEwgdG9vayB0b28gbG9uZyB0byBlbnRlcgorICogYnlwYXNzIG9yIGxvY2ssIHJldHVybiAtRUlOVkFMOyBvdGhlcndpc2UsIHJldHVybiAwLgorICovCitpbnQgb21hcDNfbm9uY29yZV9kcGxsX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IHI7CisJc3RydWN0IGRwbGxfZGF0YSAqZGQ7CisKKwlkZCA9IGNsay0+ZHBsbF9kYXRhOworCWlmICghZGQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNsay0+cmF0ZSA9PSBkZC0+Y2xrX2J5cGFzcy0+cmF0ZSkgeworCQlXQVJOX09OKGNsay0+cGFyZW50ICE9IGRkLT5jbGtfYnlwYXNzKTsKKwkJciA9IF9vbWFwM19ub25jb3JlX2RwbGxfYnlwYXNzKGNsayk7CisJfSBlbHNlIHsKKwkJV0FSTl9PTihjbGstPnBhcmVudCAhPSBkZC0+Y2xrX3JlZik7CisJCXIgPSBfb21hcDNfbm9uY29yZV9kcGxsX2xvY2soY2xrKTsKKwl9CisJLyoKKwkgKkZJWE1FOiB0aGlzIGlzIGR1YmlvdXMgLSBpZiBjbGstPnJhdGUgaGFzIGNoYW5nZWQsIHdoYXQgYWJvdXQKKwkgKiBwcm9wYWdhdGluZz8KKwkgKi8KKwlpZiAoIXIpCisJCWNsay0+cmF0ZSA9IG9tYXAyX2dldF9kcGxsX3JhdGUoY2xrKTsKKworCXJldHVybiByOworfQorCisvKioKKyAqIG9tYXAzX25vbmNvcmVfZHBsbF9kaXNhYmxlIC0gaW5zdHJ1Y3QgYSBEUExMIHRvIGVudGVyIGxvdy1wb3dlciBzdG9wCisgKiBAY2xrOiBwb2ludGVyIHRvIGEgRFBMTCBzdHJ1Y3QgY2xrCisgKgorICogSW5zdHJ1Y3RzIGEgbm9uLUNPUkUgRFBMTCB0byBlbnRlciBsb3ctcG93ZXIgc3RvcC4gIFRoaXMgZnVuY3Rpb24gaXMKKyAqIGludGVuZGVkIGZvciB1c2UgaW4gc3RydWN0IGNsa29wcy4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLwordm9pZCBvbWFwM19ub25jb3JlX2RwbGxfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJX29tYXAzX25vbmNvcmVfZHBsbF9zdG9wKGNsayk7Cit9CisKKworLyogTm9uLUNPUkUgRFBMTCByYXRlIHNldCBjb2RlICovCisKKy8qKgorICogb21hcDNfbm9uY29yZV9kcGxsX3NldF9yYXRlIC0gc2V0IG5vbi1jb3JlIERQTEwgcmF0ZQorICogQGNsazogc3RydWN0IGNsayAqIG9mIERQTEwgdG8gc2V0CisgKiBAcmF0ZTogcm91bmRlZCB0YXJnZXQgcmF0ZQorICoKKyAqIFNldCB0aGUgRFBMTCBDTEtPVVQgdG8gdGhlIHRhcmdldCByYXRlLiAgSWYgdGhlIERQTEwgY2FuIGVudGVyCisgKiBsb3ctcG93ZXIgYnlwYXNzLCBhbmQgdGhlIHRhcmdldCByYXRlIGlzIHRoZSBieXBhc3Mgc291cmNlIGNsb2NrCisgKiByYXRlLCB0aGVuIGNvbmZpZ3VyZSB0aGUgRFBMTCBmb3IgYnlwYXNzLiAgT3RoZXJ3aXNlLCByb3VuZCB0aGUKKyAqIHRhcmdldCByYXRlIGlmIGl0IGhhc24ndCBiZWVuIGRvbmUgYWxyZWFkeSwgdGhlbiBwcm9ncmFtIGFuZCBsb2NrCisgKiB0aGUgRFBMTC4gIFJldHVybnMgLUVJTlZBTCB1cG9uIGVycm9yLCBvciAwIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IG9tYXAzX25vbmNvcmVfZHBsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlzdHJ1Y3QgY2xrICpuZXdfcGFyZW50ID0gTlVMTDsKKwl1MTYgZnJlcXNlbCA9IDA7CisJc3RydWN0IGRwbGxfZGF0YSAqZGQ7CisJaW50IHJldDsKKworCWlmICghY2xrIHx8ICFyYXRlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRkID0gY2xrLT5kcGxsX2RhdGE7CisJaWYgKCFkZCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocmF0ZSA9PSBvbWFwMl9nZXRfZHBsbF9yYXRlKGNsaykpCisJCXJldHVybiAwOworCisJLyoKKwkgKiBFbnN1cmUgYm90aCB0aGUgYnlwYXNzIGFuZCByZWYgY2xvY2tzIGFyZSBlbmFibGVkIHByaW9yIHRvCisJICogZG9pbmcgYW55dGhpbmc7IHdlIG5lZWQgdGhlIGJ5cGFzcyBjbG9jayBydW5uaW5nIHRvIHJlcHJvZ3JhbQorCSAqIHRoZSBEUExMLgorCSAqLworCW9tYXAyX2Nsa19lbmFibGUoZGQtPmNsa19ieXBhc3MpOworCW9tYXAyX2Nsa19lbmFibGUoZGQtPmNsa19yZWYpOworCisJaWYgKGRkLT5jbGtfYnlwYXNzLT5yYXRlID09IHJhdGUgJiYKKwkgICAgKGNsay0+ZHBsbF9kYXRhLT5tb2RlcyAmICgxIDw8IERQTExfTE9XX1BPV0VSX0JZUEFTUykpKSB7CisJCXByX2RlYnVnKCJjbG9jazogJXM6IHNldCByYXRlOiBlbnRlcmluZyBieXBhc3MuXG4iLCBjbGstPm5hbWUpOworCisJCXJldCA9IF9vbWFwM19ub25jb3JlX2RwbGxfYnlwYXNzKGNsayk7CisJCWlmICghcmV0KQorCQkJbmV3X3BhcmVudCA9IGRkLT5jbGtfYnlwYXNzOworCX0gZWxzZSB7CisJCWlmIChkZC0+bGFzdF9yb3VuZGVkX3JhdGUgIT0gcmF0ZSkKKwkJCW9tYXAyX2RwbGxfcm91bmRfcmF0ZShjbGssIHJhdGUpOworCisJCWlmIChkZC0+bGFzdF9yb3VuZGVkX3JhdGUgPT0gMCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCS8qIE5vIGZyZXFzZWwgb24gT01BUDQgYW5kIE9NQVAzNjMwICovCisJCWlmICghY3B1X2lzX29tYXA0NHh4KCkgJiYgIWNwdV9pc19vbWFwMzYzMCgpKSB7CisJCQlmcmVxc2VsID0gX29tYXAzX2RwbGxfY29tcHV0ZV9mcmVxc2VsKGNsaywKKwkJCQkJCWRkLT5sYXN0X3JvdW5kZWRfbik7CisJCQlpZiAoIWZyZXFzZWwpCisJCQkJV0FSTl9PTigxKTsKKwkJfQorCisJCXByX2RlYnVnKCJjbG9jazogJXM6IHNldCByYXRlOiBsb2NraW5nIHJhdGUgdG8gJWx1LlxuIiwKKwkJCSBjbGstPm5hbWUsIHJhdGUpOworCisJCXJldCA9IG9tYXAzX25vbmNvcmVfZHBsbF9wcm9ncmFtKGNsaywgZGQtPmxhc3Rfcm91bmRlZF9tLAorCQkJCQkJIGRkLT5sYXN0X3JvdW5kZWRfbiwgZnJlcXNlbCk7CisJCWlmICghcmV0KQorCQkJbmV3X3BhcmVudCA9IGRkLT5jbGtfcmVmOworCX0KKwlpZiAoIXJldCkgeworCQkvKgorCQkgKiBTd2l0Y2ggdGhlIHBhcmVudCBjbG9jayBpbiB0aGUgaGVpcmFyY2h5LCBhbmQgbWFrZSBzdXJlCisJCSAqIHRoYXQgdGhlIG5ldyBwYXJlbnQncyB1c2Vjb3VudCBpcyBjb3JyZWN0LiAgTm90ZTogd2UKKwkJICogZW5hYmxlIHRoZSBuZXcgcGFyZW50IGJlZm9yZSBkaXNhYmxpbmcgdGhlIG9sZCB0byBhdm9pZAorCQkgKiBhbnkgdW5uZWNlc3NhcnkgaGFyZHdhcmUgZGlzYWJsZS0+ZW5hYmxlIHRyYW5zaXRpb25zLgorCQkgKi8KKwkJaWYgKGNsay0+dXNlY291bnQpIHsKKwkJCW9tYXAyX2Nsa19lbmFibGUobmV3X3BhcmVudCk7CisJCQlvbWFwMl9jbGtfZGlzYWJsZShjbGstPnBhcmVudCk7CisJCX0KKwkJY2xrX3JlcGFyZW50KGNsaywgbmV3X3BhcmVudCk7CisJCWNsay0+cmF0ZSA9IHJhdGU7CisJfQorCW9tYXAyX2Nsa19kaXNhYmxlKGRkLT5jbGtfcmVmKTsKKwlvbWFwMl9jbGtfZGlzYWJsZShkZC0+Y2xrX2J5cGFzcyk7CisKKwlyZXR1cm4gMDsKK30KKworLyogRFBMTCBhdXRvaWRsZSByZWFkL3NldCBjb2RlICovCisKKy8qKgorICogb21hcDNfZHBsbF9hdXRvaWRsZV9yZWFkIC0gcmVhZCBhIERQTEwncyBhdXRvaWRsZSBiaXRzCisgKiBAY2xrOiBzdHJ1Y3QgY2xrICogb2YgdGhlIERQTEwgdG8gcmVhZAorICoKKyAqIFJldHVybiB0aGUgRFBMTCdzIGF1dG9pZGxlIGJpdHMsIHNoaWZ0ZWQgZG93biB0byBiaXQgMC4gIFJldHVybnMKKyAqIC1FSU5WQUwgaWYgcGFzc2VkIGEgbnVsbCBwb2ludGVyIG9yIGlmIHRoZSBzdHJ1Y3QgY2xrIGRvZXMgbm90CisgKiBhcHBlYXIgdG8gcmVmZXIgdG8gYSBEUExMLgorICovCit1MzIgb21hcDNfZHBsbF9hdXRvaWRsZV9yZWFkKHN0cnVjdCBjbGsgKmNsaykKK3sKKwljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKwl1MzIgdjsKKworCWlmICghY2xrIHx8ICFjbGstPmRwbGxfZGF0YSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkZCA9IGNsay0+ZHBsbF9kYXRhOworCisJdiA9IF9fcmF3X3JlYWRsKGRkLT5hdXRvaWRsZV9yZWcpOworCXYgJj0gZGQtPmF1dG9pZGxlX21hc2s7CisJdiA+Pj0gX19mZnMoZGQtPmF1dG9pZGxlX21hc2spOworCisJcmV0dXJuIHY7Cit9CisKKy8qKgorICogb21hcDNfZHBsbF9hbGxvd19pZGxlIC0gZW5hYmxlIERQTEwgYXV0b2lkbGUgYml0cworICogQGNsazogc3RydWN0IGNsayAqIG9mIHRoZSBEUExMIHRvIG9wZXJhdGUgb24KKyAqCisgKiBFbmFibGUgRFBMTCBhdXRvbWF0aWMgaWRsZSBjb250cm9sLiAgVGhpcyBhdXRvbWF0aWMgaWRsZSBtb2RlCisgKiBzd2l0Y2hpbmcgdGFrZXMgZWZmZWN0IG9ubHkgd2hlbiB0aGUgRFBMTCBpcyBsb2NrZWQsIGF0IGxlYXN0IG9uCisgKiBPTUFQMzQzMC4gIFRoZSBEUExMIHdpbGwgZW50ZXIgbG93LXBvd2VyIHN0b3Agd2hlbiBpdHMgZG93bnN0cmVhbQorICogY2xvY2tzIGFyZSBnYXRlZC4gIE5vIHJldHVybiB2YWx1ZS4KKyAqLwordm9pZCBvbWFwM19kcGxsX2FsbG93X2lkbGUoc3RydWN0IGNsayAqY2xrKQoreworCWNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgKmRkOworCXUzMiB2OworCisJaWYgKCFjbGsgfHwgIWNsay0+ZHBsbF9kYXRhKQorCQlyZXR1cm47CisKKwlkZCA9IGNsay0+ZHBsbF9kYXRhOworCisJLyoKKwkgKiBSRVZJU0lUOiBDT1JFIERQTEwgY2FuIG9wdGlvbmFsbHkgZW50ZXIgbG93LXBvd2VyIGJ5cGFzcworCSAqIGJ5IHdyaXRpbmcgMHg1IGluc3RlYWQgb2YgMHgxLiAgQWRkIHNvbWUgbWVjaGFuaXNtIHRvCisJICogb3B0aW9uYWxseSBlbnRlciB0aGlzIG1vZGUuCisJICovCisJdiA9IF9fcmF3X3JlYWRsKGRkLT5hdXRvaWRsZV9yZWcpOworCXYgJj0gfmRkLT5hdXRvaWRsZV9tYXNrOworCXYgfD0gRFBMTF9BVVRPSURMRV9MT1dfUE9XRVJfU1RPUCA8PCBfX2ZmcyhkZC0+YXV0b2lkbGVfbWFzayk7CisJX19yYXdfd3JpdGVsKHYsIGRkLT5hdXRvaWRsZV9yZWcpOworfQorCisvKioKKyAqIG9tYXAzX2RwbGxfZGVueV9pZGxlIC0gcHJldmVudCBEUExMIGZyb20gYXV0b21hdGljYWxseSBpZGxpbmcKKyAqIEBjbGs6IHN0cnVjdCBjbGsgKiBvZiB0aGUgRFBMTCB0byBvcGVyYXRlIG9uCisgKgorICogRGlzYWJsZSBEUExMIGF1dG9tYXRpYyBpZGxlIGNvbnRyb2wuICBObyByZXR1cm4gdmFsdWUuCisgKi8KK3ZvaWQgb21hcDNfZHBsbF9kZW55X2lkbGUoc3RydWN0IGNsayAqY2xrKQoreworCWNvbnN0IHN0cnVjdCBkcGxsX2RhdGEgKmRkOworCXUzMiB2OworCisJaWYgKCFjbGsgfHwgIWNsay0+ZHBsbF9kYXRhKQorCQlyZXR1cm47CisKKwlkZCA9IGNsay0+ZHBsbF9kYXRhOworCisJdiA9IF9fcmF3X3JlYWRsKGRkLT5hdXRvaWRsZV9yZWcpOworCXYgJj0gfmRkLT5hdXRvaWRsZV9tYXNrOworCXYgfD0gRFBMTF9BVVRPSURMRV9ESVNBQkxFIDw8IF9fZmZzKGRkLT5hdXRvaWRsZV9tYXNrKTsKKwlfX3Jhd193cml0ZWwodiwgZGQtPmF1dG9pZGxlX3JlZyk7CisKK30KKworLyogQ2xvY2sgY29udHJvbCBmb3IgRFBMTCBvdXRwdXRzICovCisKKy8qKgorICogb21hcDNfY2xrb3V0eDJfcmVjYWxjIC0gcmVjYWxjdWxhdGUgRFBMTCBYMiBvdXRwdXQgdmlydHVhbCBjbG9jayByYXRlCisgKiBAY2xrOiBEUExMIG91dHB1dCBzdHJ1Y3QgY2xrCisgKgorICogVXNpbmcgcGFyZW50IGNsb2NrIERQTEwgZGF0YSwgbG9vayB1cCBEUExMIHN0YXRlLiAgSWYgbG9ja2VkLCBzZXQgb3VyCisgKiByYXRlIHRvIHRoZSBkcGxsX2NsayAqIDI7IG90aGVyd2lzZSwganVzdCB1c2UgZHBsbF9jbGsuCisgKi8KK3Vuc2lnbmVkIGxvbmcgb21hcDNfY2xrb3V0eDJfcmVjYWxjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwljb25zdCBzdHJ1Y3QgZHBsbF9kYXRhICpkZDsKKwl1bnNpZ25lZCBsb25nIHJhdGU7CisJdTMyIHY7CisJc3RydWN0IGNsayAqcGNsazsKKworCS8qIFdhbGsgdXAgdGhlIHBhcmVudHMgb2YgY2xrLCBsb29raW5nIGZvciBhIERQTEwgKi8KKwlwY2xrID0gY2xrLT5wYXJlbnQ7CisJd2hpbGUgKHBjbGsgJiYgIXBjbGstPmRwbGxfZGF0YSkKKwkJcGNsayA9IHBjbGstPnBhcmVudDsKKworCS8qIGNsayBkb2VzIG5vdCBoYXZlIGEgRFBMTCBhcyBhIHBhcmVudD8gKi8KKwlXQVJOX09OKCFwY2xrKTsKKworCWRkID0gcGNsay0+ZHBsbF9kYXRhOworCisJV0FSTl9PTighZGQtPmVuYWJsZV9tYXNrKTsKKworCXYgPSBfX3Jhd19yZWFkbChkZC0+Y29udHJvbF9yZWcpICYgZGQtPmVuYWJsZV9tYXNrOworCXYgPj49IF9fZmZzKGRkLT5lbmFibGVfbWFzayk7CisJaWYgKCh2ICE9IE9NQVAzWFhYX0VOX0RQTExfTE9DS0VEKSB8fCAoZGQtPmZsYWdzICYgRFBMTF9KX1RZUEUpKQorCQlyYXRlID0gY2xrLT5wYXJlbnQtPnJhdGU7CisJZWxzZQorCQlyYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgKiAyOworCXJldHVybiByYXRlOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9lbXUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZW11LmMKaW5kZXggZWMwZDk4NC4uOWM0NDJlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9lbXUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2VtdS5jCkBAIC01Niw2ICs1Niw5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGVtdV9pbml0KHZvaWQpCiB7CisJaWYgKCFjcHVfaXNfb21hcDM0eHgoKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlhbWJhX2RldmljZV9yZWdpc3Rlcigmb21hcDNfZXRiX2RldmljZSwgJmlvbWVtX3Jlc291cmNlKTsKIAlhbWJhX2RldmljZV9yZWdpc3Rlcigmb21hcDNfZXRtX2RldmljZSwgJmlvbWVtX3Jlc291cmNlKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLW5hbmQuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1uYW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRkNzRmMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy1uYW5kLmMKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBncG1jLW5hbmQuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cworICogVmltYWwgU2luZ2ggPHZpbWFsc2luZ2hAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgorCisjaW5jbHVkZSA8cGxhdC9uYW5kLmg+CisjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgorI2luY2x1ZGUgPHBsYXQvZ3BtYy5oPgorCisjZGVmaW5lIFdSX1JEX1BJTl9NT05JVE9SSU5HCTB4MDA2MDAwMDAKKworc3RhdGljIHN0cnVjdCBvbWFwX25hbmRfcGxhdGZvcm1fZGF0YSAqZ3BtY19uYW5kX2RhdGE7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZ3BtY19uYW5kX3Jlc291cmNlID0geworCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGdwbWNfbmFuZF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIm9tYXAyLW5hbmQiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmZ3BtY19uYW5kX3Jlc291cmNlLAorfTsKKworc3RhdGljIGludCBvbWFwMl9uYW5kX2dwbWNfcmV0aW1lKHZvaWQpCit7CisJc3RydWN0IGdwbWNfdGltaW5ncyB0OworCWludCBlcnI7CisKKwltZW1zZXQoJnQsIDAsIHNpemVvZih0KSk7CisJdC5zeW5jX2NsayA9IGdwbWNfcm91bmRfbnNfdG9fdGlja3MoZ3BtY19uYW5kX2RhdGEtPmdwbWNfdC0+c3luY19jbGspOworCXQuY3Nfb24gPSBncG1jX3JvdW5kX25zX3RvX3RpY2tzKGdwbWNfbmFuZF9kYXRhLT5ncG1jX3QtPmNzX29uKTsKKwl0LmFkdl9vbiA9IGdwbWNfcm91bmRfbnNfdG9fdGlja3MoZ3BtY19uYW5kX2RhdGEtPmdwbWNfdC0+YWR2X29uKTsKKworCS8qIFJlYWQgKi8KKwl0LmFkdl9yZF9vZmYgPSBncG1jX3JvdW5kX25zX3RvX3RpY2tzKAorCQkJCWdwbWNfbmFuZF9kYXRhLT5ncG1jX3QtPmFkdl9yZF9vZmYpOworCXQub2Vfb24gID0gdC5hZHZfb247CisJdC5hY2Nlc3MgPSBncG1jX3JvdW5kX25zX3RvX3RpY2tzKGdwbWNfbmFuZF9kYXRhLT5ncG1jX3QtPmFjY2Vzcyk7CisJdC5vZV9vZmYgPSBncG1jX3JvdW5kX25zX3RvX3RpY2tzKGdwbWNfbmFuZF9kYXRhLT5ncG1jX3QtPm9lX29mZik7CisJdC5jc19yZF9vZmYgPSBncG1jX3JvdW5kX25zX3RvX3RpY2tzKGdwbWNfbmFuZF9kYXRhLT5ncG1jX3QtPmNzX3JkX29mZik7CisJdC5yZF9jeWNsZSAgPSBncG1jX3JvdW5kX25zX3RvX3RpY2tzKGdwbWNfbmFuZF9kYXRhLT5ncG1jX3QtPnJkX2N5Y2xlKTsKKworCS8qIFdyaXRlICovCisJdC5hZHZfd3Jfb2ZmID0gZ3BtY19yb3VuZF9uc190b190aWNrcygKKwkJCQlncG1jX25hbmRfZGF0YS0+Z3BtY190LT5hZHZfd3Jfb2ZmKTsKKwl0LndlX29uICA9IHQub2Vfb247CisJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJICAgIHQud3JfZGF0YV9tdXhfYnVzID0JZ3BtY19yb3VuZF9uc190b190aWNrcygKKwkJCQlncG1jX25hbmRfZGF0YS0+Z3BtY190LT53cl9kYXRhX211eF9idXMpOworCSAgICB0LndyX2FjY2VzcyA9IGdwbWNfcm91bmRfbnNfdG9fdGlja3MoCisJCQkJZ3BtY19uYW5kX2RhdGEtPmdwbWNfdC0+d3JfYWNjZXNzKTsKKwl9CisJdC53ZV9vZmYgPSBncG1jX3JvdW5kX25zX3RvX3RpY2tzKGdwbWNfbmFuZF9kYXRhLT5ncG1jX3QtPndlX29mZik7CisJdC5jc193cl9vZmYgPSBncG1jX3JvdW5kX25zX3RvX3RpY2tzKGdwbWNfbmFuZF9kYXRhLT5ncG1jX3QtPmNzX3dyX29mZik7CisJdC53cl9jeWNsZSAgPSBncG1jX3JvdW5kX25zX3RvX3RpY2tzKGdwbWNfbmFuZF9kYXRhLT5ncG1jX3QtPndyX2N5Y2xlKTsKKworCS8qIENvbmZpZ3VyZSBHUE1DICovCisJZ3BtY19jc193cml0ZV9yZWcoZ3BtY19uYW5kX2RhdGEtPmNzLCBHUE1DX0NTX0NPTkZJRzEsCisJCQlHUE1DX0NPTkZJRzFfREVWSUNFU0laRShncG1jX25hbmRfZGF0YS0+ZGV2c2l6ZSkgfAorCQkJR1BNQ19DT05GSUcxX0RFVklDRVRZUEVfTkFORCk7CisKKwllcnIgPSBncG1jX2NzX3NldF90aW1pbmdzKGdwbWNfbmFuZF9kYXRhLT5jcywgJnQpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBncG1jX25hbmRfc2V0dXAodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZ3BtY19uYW5kX2RldmljZS5kZXY7CisKKwkvKiBTZXQgdGltaW5ncyBpbiBHUE1DICovCisJaWYgKG9tYXAyX25hbmRfZ3BtY19yZXRpbWUoKSA8IDApIHsKKwkJZGV2X2VycihkZXYsICJVbmFibGUgdG8gc2V0IGdwbWMgdGltaW5nc1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgX19pbml0IGdwbWNfbmFuZF9pbml0KHN0cnVjdCBvbWFwX25hbmRfcGxhdGZvcm1fZGF0YSAqX25hbmRfZGF0YSkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCWludCBlcnIJPSAwOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZncG1jX25hbmRfZGV2aWNlLmRldjsKKworCWdwbWNfbmFuZF9kYXRhID0gX25hbmRfZGF0YTsKKwlncG1jX25hbmRfZGF0YS0+bmFuZF9zZXR1cCA9IGdwbWNfbmFuZF9zZXR1cDsKKwlncG1jX25hbmRfZGV2aWNlLmRldi5wbGF0Zm9ybV9kYXRhID0gZ3BtY19uYW5kX2RhdGE7CisKKwllcnIgPSBncG1jX2NzX3JlcXVlc3QoZ3BtY19uYW5kX2RhdGEtPmNzLCBOQU5EX0lPX1NJWkUsCisJCQkJJmdwbWNfbmFuZF9kYXRhLT5waHlzX2Jhc2UpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiQ2Fubm90IHJlcXVlc3QgR1BNQyBDU1xuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gZ3BtY19uYW5kX3NldHVwKCk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihkZXYsICJOQU5EIHBsYXRmb3JtIHNldHVwIGZhaWxlZDogJWRcbiIsIGVycik7CisJCXJldHVybiBlcnI7CisJfQorCisJLyogRW5hYmxlIFJEIFBJTiBNb25pdG9yaW5nIFJlZyAqLworCWlmIChncG1jX25hbmRfZGF0YS0+ZGV2X3JlYWR5KSB7CisJCXZhbCAgPSBncG1jX2NzX3JlYWRfcmVnKGdwbWNfbmFuZF9kYXRhLT5jcywKKwkJCQkJCSBHUE1DX0NTX0NPTkZJRzEpOworCQl2YWwgfD0gV1JfUkRfUElOX01PTklUT1JJTkc7CisJCWdwbWNfY3Nfd3JpdGVfcmVnKGdwbWNfbmFuZF9kYXRhLT5jcywKKwkJCQkJCUdQTUNfQ1NfQ09ORklHMSwgdmFsKTsKKwl9CisKKwllcnIgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmdwbWNfbmFuZF9kZXZpY2UpOworCWlmIChlcnIgPCAwKSB7CisJCWRldl9lcnIoZGV2LCAiVW5hYmxlIHRvIHJlZ2lzdGVyIE5BTkQgZGV2aWNlXG4iKTsKKwkJZ290byBvdXRfZnJlZV9jczsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2ZyZWVfY3M6CisJZ3BtY19jc19mcmVlKGdwbWNfbmFuZF9kYXRhLT5jcyk7CisKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYwppbmRleCA3MDI3Y2RjLi41YmMzY2EwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2dwbWMuYwpAQCAtNTUyLDkgKzU1MiwxMCBAQAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCiBzdGF0aWMgc3RydWN0IG9tYXAzX2dwbWNfcmVncyBncG1jX2NvbnRleHQ7CiAKLXZvaWQgb21hcDNfZ3BtY19zYXZlX2NvbnRleHQoKQordm9pZCBvbWFwM19ncG1jX3NhdmVfY29udGV4dCh2b2lkKQogewogCWludCBpOworCiAJZ3BtY19jb250ZXh0LnN5c2NvbmZpZyA9IGdwbWNfcmVhZF9yZWcoR1BNQ19TWVNDT05GSUcpOwogCWdwbWNfY29udGV4dC5pcnFlbmFibGUgPSBncG1jX3JlYWRfcmVnKEdQTUNfSVJRRU5BQkxFKTsKIAlncG1jX2NvbnRleHQudGltZW91dF9jdHJsID0gZ3BtY19yZWFkX3JlZyhHUE1DX1RJTUVPVVRfQ09OVFJPTCk7CkBAIC01ODMsOSArNTg0LDEwIEBACiAJfQogfQogCi12b2lkIG9tYXAzX2dwbWNfcmVzdG9yZV9jb250ZXh0KCkKK3ZvaWQgb21hcDNfZ3BtY19yZXN0b3JlX2NvbnRleHQodm9pZCkKIHsKIAlpbnQgaTsKKwogCWdwbWNfd3JpdGVfcmVnKEdQTUNfU1lTQ09ORklHLCBncG1jX2NvbnRleHQuc3lzY29uZmlnKTsKIAlncG1jX3dyaXRlX3JlZyhHUE1DX0lSUUVOQUJMRSwgZ3BtY19jb250ZXh0LmlycWVuYWJsZSk7CiAJZ3BtY193cml0ZV9yZWcoR1BNQ19USU1FT1VUX0NPTlRST0wsIGdwbWNfY29udGV4dC50aW1lb3V0X2N0cmwpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9oc21tYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhZDIyOTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmMKQEAgLTAsMCArMSwyNjYgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUZXhhcyBJbnN0cnVtZW50cworICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IFRleGFzIEluc3RydW1lbnRzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxwbGF0L2NvbnRyb2wuaD4KKyNpbmNsdWRlIDxwbGF0L21tYy5oPgorI2luY2x1ZGUgPHBsYXQvb21hcC1wbS5oPgorCisjaW5jbHVkZSAiaHNtbWMuaCIKKworI2lmIGRlZmluZWQoQ09ORklHX01NQ19PTUFQX0hTKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9IU19NT0RVTEUpCisKK3N0YXRpYyB1MTYgY29udHJvbF9wYmlhc19vZmZzZXQ7CitzdGF0aWMgdTE2IGNvbnRyb2xfZGV2Y29uZjFfb2Zmc2V0OworCisjZGVmaW5lIEhTTU1DX05BTUVfTEVOCTkKKworc3RhdGljIHN0cnVjdCBoc21tY19jb250cm9sbGVyIHsKKwljaGFyCQkJCW5hbWVbSFNNTUNfTkFNRV9MRU4gKyAxXTsKK30gaHNtbWNbT01BUDM0WFhfTlJfTU1DXTsKKworI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpICYmIGRlZmluZWQoQ09ORklHX1BNKQorCitzdGF0aWMgaW50IGhzbW1jX2dldF9jb250ZXh0X2xvc3Moc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBvbWFwX3BtX2dldF9kZXZfY29udGV4dF9sb3NzX2NvdW50KGRldik7Cit9CisKKyNlbHNlCisjZGVmaW5lIGhzbW1jX2dldF9jb250ZXh0X2xvc3MgTlVMTAorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGhzbW1jMV9iZWZvcmVfc2V0X3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LAorCQkJCSAgaW50IHBvd2VyX29uLCBpbnQgdmRkKQoreworCXUzMiByZWcsIHByb2dfaW87CisJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKworCWlmIChtbWMtPnNsb3RzWzBdLnJlbXV4KQorCQltbWMtPnNsb3RzWzBdLnJlbXV4KGRldiwgc2xvdCwgcG93ZXJfb24pOworCisJLyoKKwkgKiBBc3N1bWUgd2UgcG93ZXIgYm90aCBPTUFQIFZNTUMxIChmb3IgQ01ELCBDTEssIERBVDAuLjMpIGFuZCB0aGUKKwkgKiBjYXJkIHdpdGggVmNjIHJlZ3VsYXRvciAoZnJvbSB0d2w0MDMwIG9yIHdoYXRldmVyKS4gIE9NQVAgaGFzIGJvdGgKKwkgKiAxLjhWIGFuZCAzLjBWIG1vZGVzLCBjb250cm9sbGVkIGJ5IHRoZSBQQklBUyByZWdpc3Rlci4KKwkgKgorCSAqIEluIDgtYml0IG1vZGVzLCBPTUFQIFZNTUMxQSAoZm9yIERBVDQuLjcpIG5lZWRzIGEgc3VwcGx5LCB3aGljaAorCSAqIGlzIG1vc3QgbmF0dXJhbGx5IFRXTCBWU0lNOyB0aG9zZSBwaW5zIGFsc28gdXNlIFBCSUFTLgorCSAqCisJICogRklYTUUgaGFuZGxlIFZNTUMxQSBhcyBuZWVkZWQgLi4uCisJICovCisJaWYgKHBvd2VyX29uKSB7CisJCWlmIChjcHVfaXNfb21hcDI0MzAoKSkgeworCQkJcmVnID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyNDNYX0NPTlRST0xfREVWQ09ORjEpOworCQkJaWYgKCgxIDw8IHZkZCkgPj0gTU1DX1ZERF8zMF8zMSkKKwkJCQlyZWcgfD0gT01BUDI0M1hfTU1DMV9BQ1RJVkVfT1ZFUldSSVRFOworCQkJZWxzZQorCQkJCXJlZyAmPSB+T01BUDI0M1hfTU1DMV9BQ1RJVkVfT1ZFUldSSVRFOworCQkJb21hcF9jdHJsX3dyaXRlbChyZWcsIE9NQVAyNDNYX0NPTlRST0xfREVWQ09ORjEpOworCQl9CisKKwkJaWYgKG1tYy0+c2xvdHNbMF0uaW50ZXJuYWxfY2xvY2spIHsKKwkJCXJlZyA9IG9tYXBfY3RybF9yZWFkbChPTUFQMl9DT05UUk9MX0RFVkNPTkYwKTsKKwkJCXJlZyB8PSBPTUFQMl9NTUNTRElPMUFEUENMS0lTRUw7CisJCQlvbWFwX2N0cmxfd3JpdGVsKHJlZywgT01BUDJfQ09OVFJPTF9ERVZDT05GMCk7CisJCX0KKworCQlyZWcgPSBvbWFwX2N0cmxfcmVhZGwoY29udHJvbF9wYmlhc19vZmZzZXQpOworCQlpZiAoY3B1X2lzX29tYXAzNjMwKCkpIHsKKwkJCS8qIFNldCBNTUMgSS9PIHRvIDUyTWh6ICovCisJCQlwcm9nX2lvID0gb21hcF9jdHJsX3JlYWRsKE9NQVAzNDNYX0NPTlRST0xfUFJPR19JTzEpOworCQkJcHJvZ19pbyB8PSBPTUFQMzYzMF9QUkdfU0RNTUMxX1NQRUVEQ1RSTDsKKwkJCW9tYXBfY3RybF93cml0ZWwocHJvZ19pbywgT01BUDM0M1hfQ09OVFJPTF9QUk9HX0lPMSk7CisJCX0gZWxzZSB7CisJCQlyZWcgfD0gT01BUDJfUEJJQVNTUEVFRENUUkwwOworCQl9CisJCXJlZyAmPSB+T01BUDJfUEJJQVNMSVRFUFdSRE5aMDsKKwkJb21hcF9jdHJsX3dyaXRlbChyZWcsIGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKKwl9IGVsc2UgeworCQlyZWcgPSBvbWFwX2N0cmxfcmVhZGwoY29udHJvbF9wYmlhc19vZmZzZXQpOworCQlyZWcgJj0gfk9NQVAyX1BCSUFTTElURVBXUkROWjA7CisJCW9tYXBfY3RybF93cml0ZWwocmVnLCBjb250cm9sX3BiaWFzX29mZnNldCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoc21tYzFfYWZ0ZXJfc2V0X3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LAorCQkJCSBpbnQgcG93ZXJfb24sIGludCB2ZGQpCit7CisJdTMyIHJlZzsKKworCS8qIDEwMG1zIGRlbGF5IHJlcXVpcmVkIGZvciBQQklBUyBjb25maWd1cmF0aW9uICovCisJbXNsZWVwKDEwMCk7CisKKwlpZiAocG93ZXJfb24pIHsKKwkJcmVnID0gb21hcF9jdHJsX3JlYWRsKGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKKwkJcmVnIHw9IChPTUFQMl9QQklBU0xJVEVQV1JETlowIHwgT01BUDJfUEJJQVNTUEVFRENUUkwwKTsKKwkJaWYgKCgxIDw8IHZkZCkgPD0gTU1DX1ZERF8xNjVfMTk1KQorCQkJcmVnICY9IH5PTUFQMl9QQklBU0xJVEVWTU9ERTA7CisJCWVsc2UKKwkJCXJlZyB8PSBPTUFQMl9QQklBU0xJVEVWTU9ERTA7CisJCW9tYXBfY3RybF93cml0ZWwocmVnLCBjb250cm9sX3BiaWFzX29mZnNldCk7CisJfSBlbHNlIHsKKwkJcmVnID0gb21hcF9jdHJsX3JlYWRsKGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKKwkJcmVnIHw9IChPTUFQMl9QQklBU1NQRUVEQ1RSTDAgfCBPTUFQMl9QQklBU0xJVEVQV1JETlowIHwKKwkJCU9NQVAyX1BCSUFTTElURVZNT0RFMCk7CisJCW9tYXBfY3RybF93cml0ZWwocmVnLCBjb250cm9sX3BiaWFzX29mZnNldCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBoc21tYzIzX2JlZm9yZV9zZXRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsCisJCQkJICAgaW50IHBvd2VyX29uLCBpbnQgdmRkKQoreworCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlpZiAobW1jLT5zbG90c1swXS5yZW11eCkKKwkJbW1jLT5zbG90c1swXS5yZW11eChkZXYsIHNsb3QsIHBvd2VyX29uKTsKKworCWlmIChwb3dlcl9vbikgeworCQkvKiBPbmx5IE1NQzIgc3VwcG9ydHMgYSBDTEtJTiAqLworCQlpZiAobW1jLT5zbG90c1swXS5pbnRlcm5hbF9jbG9jaykgeworCQkJdTMyIHJlZzsKKworCQkJcmVnID0gb21hcF9jdHJsX3JlYWRsKGNvbnRyb2xfZGV2Y29uZjFfb2Zmc2V0KTsKKwkJCXJlZyB8PSBPTUFQMl9NTUNTRElPMkFEUENMS0lTRUw7CisJCQlvbWFwX2N0cmxfd3JpdGVsKHJlZywgY29udHJvbF9kZXZjb25mMV9vZmZzZXQpOworCQl9CisJfQorfQorCitzdGF0aWMgc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKmhzbW1jX2RhdGFbT01BUDM0WFhfTlJfTU1DXSBfX2luaXRkYXRhOworCit2b2lkIF9faW5pdCBvbWFwMl9oc21tY19pbml0KHN0cnVjdCBvbWFwMl9oc21tY19pbmZvICpjb250cm9sbGVycykKK3sKKwlzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyAqYzsKKwlpbnQgbnJfaHNtbWMgPSBBUlJBWV9TSVpFKGhzbW1jX2RhdGEpOworCWludCBpOworCisJaWYgKGNwdV9pc19vbWFwMjQzMCgpKSB7CisJCWNvbnRyb2xfcGJpYXNfb2Zmc2V0ID0gT01BUDI0M1hfQ09OVFJPTF9QQklBU19MSVRFOworCQljb250cm9sX2RldmNvbmYxX29mZnNldCA9IE9NQVAyNDNYX0NPTlRST0xfREVWQ09ORjE7CisJfSBlbHNlIHsKKwkJY29udHJvbF9wYmlhc19vZmZzZXQgPSBPTUFQMzQzWF9DT05UUk9MX1BCSUFTX0xJVEU7CisJCWNvbnRyb2xfZGV2Y29uZjFfb2Zmc2V0ID0gT01BUDM0M1hfQ09OVFJPTF9ERVZDT05GMTsKKwl9CisKKwlmb3IgKGMgPSBjb250cm9sbGVyczsgYy0+bW1jOyBjKyspIHsKKwkJc3RydWN0IGhzbW1jX2NvbnRyb2xsZXIgKmhjID0gaHNtbWMgKyBjLT5tbWMgLSAxOworCQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gaHNtbWNfZGF0YVtjLT5tbWMgLSAxXTsKKworCQlpZiAoIWMtPm1tYyB8fCBjLT5tbWMgPiBucl9oc21tYykgeworCQkJcHJfZGVidWcoIk1NQyVkOiBubyBzdWNoIGNvbnRyb2xsZXJcbiIsIGMtPm1tYyk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobW1jKSB7CisJCQlwcl9kZWJ1ZygiTU1DJWQ6IGFscmVhZHkgY29uZmlndXJlZFxuIiwgYy0+bW1jKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJbW1jID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEpLAorCQkJICAgICAgR0ZQX0tFUk5FTCk7CisJCWlmICghbW1jKSB7CisJCQlwcl9lcnIoIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1tYyBkZXZpY2UhXG4iKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWlmIChjLT5uYW1lKQorCQkJc3RybmNweShoYy0+bmFtZSwgYy0+bmFtZSwgSFNNTUNfTkFNRV9MRU4pOworCQllbHNlCisJCQlzbnByaW50ZihoYy0+bmFtZSwgQVJSQVlfU0laRShoYy0+bmFtZSksCisJCQkJIm1tYyVpc2xvdCVpIiwgYy0+bW1jLCAxKTsKKwkJbW1jLT5zbG90c1swXS5uYW1lID0gaGMtPm5hbWU7CisJCW1tYy0+bnJfc2xvdHMgPSAxOworCQltbWMtPnNsb3RzWzBdLndpcmVzID0gYy0+d2lyZXM7CisJCW1tYy0+c2xvdHNbMF0uaW50ZXJuYWxfY2xvY2sgPSAhYy0+ZXh0X2Nsb2NrOworCQltbWMtPmRtYV9tYXNrID0gMHhmZmZmZmZmZjsKKworCQltbWMtPmdldF9jb250ZXh0X2xvc3NfY291bnQgPSBoc21tY19nZXRfY29udGV4dF9sb3NzOworCisJCW1tYy0+c2xvdHNbMF0uc3dpdGNoX3BpbiA9IGMtPmdwaW9fY2Q7CisJCW1tYy0+c2xvdHNbMF0uZ3Bpb193cCA9IGMtPmdwaW9fd3A7CisKKwkJbW1jLT5zbG90c1swXS5yZW11eCA9IGMtPnJlbXV4OworCisJCWlmIChjLT5jb3Zlcl9vbmx5KQorCQkJbW1jLT5zbG90c1swXS5jb3ZlciA9IDE7CisKKwkJaWYgKGMtPm5vbnJlbW92YWJsZSkKKwkJCW1tYy0+c2xvdHNbMF0ubm9ucmVtb3ZhYmxlID0gMTsKKworCQlpZiAoYy0+cG93ZXJfc2F2aW5nKQorCQkJbW1jLT5zbG90c1swXS5wb3dlcl9zYXZpbmcgPSAxOworCisJCWlmIChjLT5ub19vZmYpCisJCQltbWMtPnNsb3RzWzBdLm5vX29mZiA9IDE7CisKKwkJaWYgKGMtPnZjY19hdXhfZGlzYWJsZV9pc19zbGVlcCkKKwkJCW1tYy0+c2xvdHNbMF0udmNjX2F1eF9kaXNhYmxlX2lzX3NsZWVwID0gMTsKKworCQkvKiBOT1RFOiAgTU1DIHNsb3RzIHNob3VsZCBoYXZlIGEgVmNjIHJlZ3VsYXRvciBzZXQgdXAuCisJCSAqIFRoaXMgbWF5IGJlIGZyb20gYSBUV0w0MDMwLWZhbWlseSBjaGlwLCBhbm90aGVyCisJCSAqIGNvbnRyb2xsYWJsZSByZWd1bGF0b3IsIG9yIGEgZml4ZWQgc3VwcGx5LgorCQkgKgorCQkgKiB0ZW1wb3JhcnkgSEFDSzogb2NyX21hc2sgaW5zdGVhZCBvZiBmaXhlZCBzdXBwbHkKKwkJICovCisJCW1tYy0+c2xvdHNbMF0ub2NyX21hc2sgPSBjLT5vY3JfbWFzazsKKworCQlzd2l0Y2ggKGMtPm1tYykgeworCQljYXNlIDE6CisJCQkvKiBvbi1jaGlwIGxldmVsIHNoaWZ0aW5nIHZpYSBQQklBUzAvUEJJQVMxICovCisJCQltbWMtPnNsb3RzWzBdLmJlZm9yZV9zZXRfcmVnID0gaHNtbWMxX2JlZm9yZV9zZXRfcmVnOworCQkJbW1jLT5zbG90c1swXS5hZnRlcl9zZXRfcmVnID0gaHNtbWMxX2FmdGVyX3NldF9yZWc7CisKKwkJCS8qIE9tYXAzNjMwIEhTTU1DMSBzdXBwb3J0cyBvbmx5IDQtYml0ICovCisJCQlpZiAoY3B1X2lzX29tYXAzNjMwKCkgJiYgYy0+d2lyZXMgPiA0KSB7CisJCQkJYy0+d2lyZXMgPSA0OworCQkJCW1tYy0+c2xvdHNbMF0ud2lyZXMgPSBjLT53aXJlczsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlpZiAoYy0+ZXh0X2Nsb2NrKQorCQkJCWMtPnRyYW5zY2VpdmVyID0gMTsKKwkJCWlmIChjLT50cmFuc2NlaXZlciAmJiBjLT53aXJlcyA+IDQpCisJCQkJYy0+d2lyZXMgPSA0OworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSAzOgorCQkJLyogb2ZmLWNoaXAgbGV2ZWwgc2hpZnRpbmcsIG9yIG5vbmUgKi8KKwkJCW1tYy0+c2xvdHNbMF0uYmVmb3JlX3NldF9yZWcgPSBoc21tYzIzX2JlZm9yZV9zZXRfcmVnOworCQkJbW1jLT5zbG90c1swXS5hZnRlcl9zZXRfcmVnID0gTlVMTDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJfZXJyKCJNTUMlZCBjb25maWd1cmF0aW9uIG5vdCBzdXBwb3J0ZWQhXG4iLCBjLT5tbWMpOworCQkJa2ZyZWUobW1jKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWhzbW1jX2RhdGFbYy0+bW1jIC0gMV0gPSBtbWM7CisJfQorCisJb21hcDJfaW5pdF9tbWMoaHNtbWNfZGF0YSwgT01BUDM0WFhfTlJfTU1DKTsKKworCS8qIHBhc3MgdGhlIGRldmljZSBub2RlcyBiYWNrIHRvIGJvYXJkIHNldHVwIGNvZGUgKi8KKwlmb3IgKGMgPSBjb250cm9sbGVyczsgYy0+bW1jOyBjKyspIHsKKwkJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGhzbW1jX2RhdGFbYy0+bW1jIC0gMV07CisKKwkJaWYgKCFjLT5tbWMgfHwgYy0+bW1jID4gbnJfaHNtbWMpCisJCQljb250aW51ZTsKKwkJYy0+ZGV2ID0gbW1jLT5kZXY7CisJfQorCitkb25lOgorCWZvciAoaSA9IDA7IGkgPCBucl9oc21tYzsgaSsrKQorCQlrZnJlZShoc21tY19kYXRhW2ldKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL2hzbW1jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZmMGJhOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaHNtbWMuaApAQCAtMCwwICsxLDM4IEBACisvKgorICogTU1DIGRlZmluaXRpb25zIGZvciBPTUFQMgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworc3RydWN0IG9tYXAyX2hzbW1jX2luZm8geworCXU4CW1tYzsJCS8qIGNvbnRyb2xsZXIgMS8yLzMgKi8KKwl1OAl3aXJlczsJCS8qIDEvNC84IHdpcmVzICovCisJYm9vbAl0cmFuc2NlaXZlcjsJLyogTU1DLTIgb3B0aW9uICovCisJYm9vbAlleHRfY2xvY2s7CS8qIHVzZSBleHRlcm5hbCBwaW4gZm9yIGlucHV0IGNsb2NrICovCisJYm9vbAljb3Zlcl9vbmx5OwkvKiBObyBjYXJkIGRldGVjdCAtIGp1c3QgY292ZXIgc3dpdGNoICovCisJYm9vbAlub25yZW1vdmFibGU7CS8qIE5vbnJlbW92YWJsZSBlLmcuIGVNTUMgKi8KKwlib29sCXBvd2VyX3NhdmluZzsJLyogVHJ5IHRvIHNsZWVwIG9yIHBvd2VyIG9mZiB3aGVuIHBvc3NpYmxlICovCisJYm9vbAlub19vZmY7CQkvKiBwb3dlcl9zYXZpbmcgYW5kIHBvd2VyIGlzIG5vdCB0byBnbyBvZmYgKi8KKwlib29sCXZjY19hdXhfZGlzYWJsZV9pc19zbGVlcDsgLyogUmVndWxhdG9yIG9mZiByZW1hcHBlZCB0byBzbGVlcCAqLworCWludAlncGlvX2NkOwkvKiBvciAtRUlOVkFMICovCisJaW50CWdwaW9fd3A7CS8qIG9yIC1FSU5WQUwgKi8KKwljaGFyCSpuYW1lOwkJLyogb3IgTlVMTCBmb3IgZGVmYXVsdCAqLworCXN0cnVjdCBkZXZpY2UgKmRldjsJLyogcmV0dXJuZWQ6IHBvaW50ZXIgdG8gbW1jIGFkYXB0ZXIgKi8KKwlpbnQJb2NyX21hc2s7CS8qIHRlbXBvcmFyeSBIQUNLICovCisJLyogUmVtdXggKHBhZCBjb25maWd1YXRpb24pIHdoZW4gcG93ZXJpbmcgb24vb2ZmICovCisJdm9pZCAoKnJlbXV4KShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgcG93ZXJfb24pOworfTsKKworI2lmIGRlZmluZWQoQ09ORklHX01NQ19PTUFQX0hTKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9IU19NT0RVTEUpCisKK3ZvaWQgb21hcDJfaHNtbWNfaW5pdChzdHJ1Y3Qgb21hcDJfaHNtbWNfaW5mbyAqKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX2hzbW1jX2luaXQoc3RydWN0IG9tYXAyX2hzbW1jX2luZm8gKmluZm8pCit7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pMmMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaTJjLmMKaW5kZXggNzg5Y2E4Yy4uNzk1MWFlMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pMmMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2kyYy5jCkBAIC0yNSw5ICsyNSw3IEBACiAKICNpbmNsdWRlICJtdXguaCIKIAotaW50IF9faW5pdCBvbWFwX3JlZ2lzdGVyX2kyY19idXMoaW50IGJ1c19pZCwgdTMyIGNsa3JhdGUsCi0JCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBjb25zdCAqaW5mbywKLQkJCSAgdW5zaWduZWQgbGVuKQordm9pZCBfX2luaXQgb21hcDJfaTJjX211eF9waW5zKGludCBidXNfaWQpCiB7CiAJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAJCWNvbnN0IGludCBvbWFwMjR4eF9waW5zW11bMl0gPSB7CkBAIC01MSw2ICs0OSw0IEBACiAJCXNwcmludGYobXV4X25hbWUsICJpMmMlaV9zZGEuaTJjJWlfc2RhIiwgYnVzX2lkLCBidXNfaWQpOwogCQlvbWFwX211eF9pbml0X3NpZ25hbChtdXhfbmFtZSwgT01BUF9QSU5fSU5QVVQpOwogCX0KLQotCXJldHVybiBvbWFwX3BsYXRfcmVnaXN0ZXJfaTJjX2J1cyhidXNfaWQsIGNsa3JhdGUsIGluZm8sIGxlbik7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lkLmMKaW5kZXggM2Q2NWM1MC4uMzdiOGExYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaWQuYwpAQCAtNTcsNiArNTcsOCBAQAogCQl2YWwgPSBvbWFwX2N0cmxfcmVhZGwoT01BUDI0WFhfQ09OVFJPTF9TVEFUVVMpOwogCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKIAkJdmFsID0gb21hcF9jdHJsX3JlYWRsKE9NQVAzNDNYX0NPTlRST0xfU1RBVFVTKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCXZhbCA9IG9tYXBfY3RybF9yZWFkbChPTUFQNDRYWF9DT05UUk9MX1NUQVRVUyk7CiAJfSBlbHNlIHsKIAkJcHJfZXJyKCJDYW5ub3QgZGV0ZWN0IG9tYXAgdHlwZSFcbiIpOwogCQlnb3RvIG91dDsKQEAgLTE3NSw2ICsxNzcsOCBAQAogCU9NQVAzX0NIRUNLX0ZFQVRVUkUoc3RhdHVzLCBTR1gpOwogCU9NQVAzX0NIRUNLX0ZFQVRVUkUoc3RhdHVzLCBORU9OKTsKIAlPTUFQM19DSEVDS19GRUFUVVJFKHN0YXR1cywgSVNQKTsKKwlpZiAoY3B1X2lzX29tYXAzNjMwKCkpCisJCW9tYXAzX2ZlYXR1cmVzIHw9IE9NQVAzX0hBU18xOTJNSFpfQ0xLOwogCiAJLyoKIAkgKiBUT0RPOiBHZXQgYWRkaXRpb25hbCBpbmZvICh3aGVyZSBhcHBsaWNhYmxlKQpAQCAtMjgxLDYgKzI4NSw3IEBACiAKIAlpZiAoKGhhd2tleWUgPT0gMHhiODUyKSAmJiAocmV2ID09IDB4MCkpIHsKIAkJb21hcF9yZXZpc2lvbiA9IE9NQVA0NDMwX1JFVl9FUzFfMDsKKwkJb21hcF9jaGlwLm9jIHw9IENISVBfSVNfT01BUDQ0MzBFUzE7CiAJCXByX2luZm8oIk9NQVAlMDR4ICVzXG4iLCBvbWFwX3JldigpID4+IDE2LCByZXZfbmFtZSk7CiAJCXJldHVybjsKIAl9CkBAIC0zNTgsNiArMzYzLDcgQEAKIAlPTUFQM19TSE9XX0ZFQVRVUkUoc2d4KTsKIAlPTUFQM19TSE9XX0ZFQVRVUkUobmVvbik7CiAJT01BUDNfU0hPV19GRUFUVVJFKGlzcCk7CisJT01BUDNfU0hPV19GRUFUVVJFKDE5Mm1oel9jbGspOwogCiAJcHJpbnRrKCIpXG4iKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2FtMzV4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvYW0zNXh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTcwNWY5NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2FtMzV4eC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qOgorICogQWRkcmVzcyBtYXBwaW5ncyBhbmQgYmFzZSBhZGRyZXNzIGZvciBBTTM1WFggc3BlY2lmaWMgaW50ZXJjb25uZWN0cworICogYW5kIHBlcmlwaGVyYWxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIEF1dGhvcjogU3JpcmFtYWtyaXNobmFuIDxzcmtAdGkuY29tPgorICoJICAgVmFpYmhhdiBIaXJlbWF0aCA8aHZhaWJoYXZAdGkuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9BTTM1WFhfSAorI2RlZmluZSBfX0FTTV9BUkNIX0FNMzVYWF9ICisKKy8qCisgKiBCYXNlIGFkZHJlc3NlcworICoJTm90ZTogT01BUDM0MzAgSVZBMiBtZW1vcnkgc3BhY2UgaXMgYmVpbmcgdXNlZCBmb3IgQU0zNXh4IElQU1MgbW9kdWxlcworICovCisjZGVmaW5lIEFNMzVYWF9JUFNTX0VNQUNfQkFTRQkJMHg1QzAwMDAwMAorI2RlZmluZSBBTTM1WFhfSVBTU19VU0JPVEdTU19CQVNFCTB4NUMwNDAwMDAKKyNkZWZpbmUgQU0zNVhYX0lQU1NfSEVDQ19CQVNFCQkweDVDMDUwMDAwCisjZGVmaW5lIEFNMzVYWF9JUFNTX1ZQRkVfQkFTRQkJMHg1QzA2MDAwMAorCisjZW5kaWYgLyogIF9fQVNNX0FSQ0hfQU0zNVhYX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2JvYXJkLXNkcC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvYm9hcmQtc2RwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY1MTY5YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2JvYXJkLXNkcC5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiAgYm9hcmQtc2RwLmgKKyAqCisgKiAgSW5mb3JtYXRpb24gc3RydWN0dXJlcyBmb3IgU0RQLXNwZWNpZmljIGJvYXJkIGNvbmZpZyBkYXRhCisgKgorICogIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICogIENvcHlyaWdodCAoQykgMjAwOSBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKworc3RydWN0IGZsYXNoX3BhcnRpdGlvbnMgeworCXN0cnVjdCBtdGRfcGFydGl0aW9uICpwYXJ0czsKKwlpbnQgbnJfcGFydHM7Cit9OworCitleHRlcm4gdm9pZCBzZHBfZmxhc2hfaW5pdChzdHJ1Y3QgZmxhc2hfcGFydGl0aW9ucyBbXSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCA4Njk3OWQ3Li40YTYzYTJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTExLDMyICsxMSwxMDcgQEAKICAqCiAqLwogCisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgorCisjaW5jbHVkZSA8cGxhdC9zZXJpYWwuaD4KKworI2RlZmluZSBVQVJUX09GRlNFVChhZGRyKQkoKGFkZHIpICYgMHgwMGZmZmZmZikKKworCQkucHVzaHNlY3Rpb24gLmRhdGEKK29tYXBfdWFydF9waHlzOgkud29yZAkwCitvbWFwX3VhcnRfdmlydDoJLndvcmQJMAorb21hcF91YXJ0X2xzcjoJLndvcmQJMAorCQkucG9wc2VjdGlvbgorCisJCS8qCisJCSAqIE5vdGUgdGhhdCB0aGlzIGNvZGUgd29uJ3Qgd29yayBpZiB0aGUgYm9vdGxvYWRlciBwYXNzZXMKKwkJICogYSB3cm9uZyBtYWNoaW5lIElEIG51bWJlciBpbiByMS4gVG8gZGVidWcsIGp1c3QgaGFyZGNvZGUKKwkJICogdGhlIGRlc2lyZWQgVUFSVCBwaHlzIGFuZCB2aXJ0IGFkZHJlc3NlcyB0ZW1wb3JhcmlseSBpbnRvCisJCSAqIHRoZSBvbWFwX3VhcnRfcGh5cyBhbmQgb21hcF91YXJ0X3ZpcnQgYWJvdmUuCisJCSAqLwogCQkubWFjcm8JYWRkcnVhcnQsIHJ4LCB0bXAKKworCQkvKiBVc2Ugb21hcF91YXJ0X3BoeXMvdmlydCBpZiBhbHJlYWR5IGNvbmZpZ3VyZWQgKi8KKzEwOgkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKKwkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPworCQlsZHJlcQlccngsID1vbWFwX3VhcnRfcGh5cwlAIHBoeXNpY2FsIGJhc2UgYWRkcmVzcworCQlsZHJuZQlccngsID1vbWFwX3VhcnRfdmlydAlAIHZpcnR1YWwgYmFzZSBhZGRyZXNzCisJCWxkcglccngsIFtccngsICMwXQorCQljbXAJXHJ4LCAjMAkJCUAgaXMgcG9ydCBjb25maWd1cmVkPworCQlibmUJOTlmCQkJQCBhbHJlYWR5IGNvbmZpZ3VyZWQKKworCQkvKiBDaGVjayBVQVJUMSBzY3JhdGNocGFkIHJlZ2lzdGVyIGZvciB1YXJ0IHRvIHVzZSAqLwogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAogCQl0c3QJXHJ4LCAjMQkJCUAgTU1VIGVuYWJsZWQ/Ci0jaWZkZWYgIENPTkZJR19BUkNIX09NQVAyCiAJCW1vdmVxCVxyeCwgIzB4NDgwMDAwMDAJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKIAkJbW92bmUJXHJ4LCAjMHhmYTAwMDAwMAlAIHZpcnR1YWwgYmFzZQotCQlvcnIJXHJ4LCBccngsICMweDAwMDZhMDAwCi0jaWZkZWYgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIKLQkJYWRkCVxyeCwgXHJ4LCAjMHgwMDAwMjAwMAlAIFVBUlQgMgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMKLQkJYWRkCVxyeCwgXHJ4LCAjMHgwMDAwNDAwMAlAIFVBUlQgMwotI2VuZGlmCisJCW9ycglccngsIFxyeCwgIzB4MDAwNmEwMDAJQCB1YXJ0MSBvbiBvbWFwMi8zLzQKKwkJbGRyYglccngsIFtccngsICMoVUFSVF9TQ1IgPDwgT01BUF9QT1JUX1NISUZUKV0gQCBzY3JhdGNocGFkCiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCi0JCW1vdmVxCVxyeCwgIzB4NDgwMDAwMDAJQCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MKLQkJbW92bmUJXHJ4LCAjMHhmYTAwMDAwMAlAIHZpcnR1YWwgYmFzZQotCQlvcnIJXHJ4LCBccngsICMweDAwMDZhMDAwCi0jaWZkZWYgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIKLQkJYWRkCVxyeCwgXHJ4LCAjMHgwMDAwMjAwMAlAIFVBUlQgMgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDMKLQkJYWRkCVxyeCwgXHJ4LCAjMHgwMGZiMDAwMAlAIFVBUlQgMwotCQlhZGQJXHJ4LCBccngsICMweDAwMDA2MDAwCi0jZW5kaWYKLSNlbmRpZgorCQkvKiBTZWxlY3QgdGhlIFVBUlQgdG8gdXNlIGJhc2VkIG9uIHRoZSBVQVJUMSBzY3JhdGNocGFkIHZhbHVlICovCisJCWNtcAlccngsICMwCQkJQCBubyBwb3J0IGNvbmZpZ3VyZWQ/CisJCWJlcQkyMWYJCQlAIGlmIG5vbmUsIHRyeSB0byB1c2UgVUFSVDEKKwkJY21wCVxyeCwgI09NQVAyVUFSVDEJQCBPTUFQMi8zLzRVQVJUMQorCQliZXEJMjFmCQkJQCBjb25maWd1cmUgT01BUDIvMy80VUFSVDEKKwkJY21wCVxyeCwgI09NQVAyVUFSVDIJQCBPTUFQMi8zLzRVQVJUMgorCQliZXEJMjJmCQkJQCBjb25maWd1cmUgT01BUDIvMy80VUFSVDIKKwkJY21wCVxyeCwgI09NQVAyVUFSVDMJQCBvbmx5IG9uIDI0eHgKKwkJYmVxCTIzZgkJCUAgY29uZmlndXJlIE9NQVAyVUFSVDMKKwkJY21wCVxyeCwgI09NQVAzVUFSVDMJQCBvbmx5IG9uIDM0eHgKKwkJYmVxCTMzZgkJCUAgY29uZmlndXJlIE9NQVAzVUFSVDMKKwkJY21wCVxyeCwgI09NQVA0VUFSVDMJQCBvbmx5IG9uIDQ0eHgKKwkJYmVxCTQzZgkJCUAgY29uZmlndXJlIE9NQVA0VUFSVDMKKwkJY21wCVxyeCwgI09NQVAzVUFSVDQJQCBvbmx5IG9uIDM2eHgKKwkJYmVxCTM0ZgkJCUAgY29uZmlndXJlIE9NQVAzVUFSVDQKKwkJY21wCVxyeCwgI09NQVA0VUFSVDQJQCBvbmx5IG9uIDQ0eHgKKwkJYmVxCTQ0ZgkJCUAgY29uZmlndXJlIE9NQVA0VUFSVDQKKwkJY21wCVxyeCwgI1pPT01fVUFSVAkJQCBvbmx5IG9uIHpvb20yLzMKKwkJYmVxCTk1ZgkJCUAgY29uZmlndXJlIFpPT01fVUFSVAorCisJCS8qIENvbmZpZ3VyZSB0aGUgVUFSVCBvZmZzZXQgZnJvbSB0aGUgcGh5cy92aXJ0IGJhc2UgKi8KKzIxOgkJbW92CVxyeCwgI1VBUlRfT0ZGU0VUKE9NQVAyX1VBUlQxX0JBU0UpCUAgb21hcDIvMy80CisJCWIJOThmCisyMjoJCW1vdglccngsICNVQVJUX09GRlNFVChPTUFQMl9VQVJUMl9CQVNFKQlAIG9tYXAyLzMvNAorCQliCTk4ZgorMjM6CQltb3YJXHJ4LCAjVUFSVF9PRkZTRVQoT01BUDJfVUFSVDNfQkFTRSkKKwkJYgk5OGYKKzMzOgkJbW92CVxyeCwgI1VBUlRfT0ZGU0VUKE9NQVAzX1VBUlQxX0JBU0UpCisJCWFkZAlccngsIFxyeCwgIzB4MDBmYjAwMDAKKwkJYWRkCVxyeCwgXHJ4LCAjMHgwMDAwNjAwMAkJQCBPTUFQM19VQVJUM19CQVNFCisJCWIJOThmCiszNDoJCW1vdglccngsICNVQVJUX09GRlNFVChPTUFQM19VQVJUMV9CQVNFKQorCQlhZGQJXHJ4LCBccngsICMweDAwZmIwMDAwCisJCWFkZAlccngsIFxyeCwgIzB4MDAwMjgwMDAJCUAgT01BUDNfVUFSVDRfQkFTRQorCQliCTk4ZgorNDM6CQltb3YJXHJ4LCAjVUFSVF9PRkZTRVQoT01BUDRfVUFSVDNfQkFTRSkKKwkJYgk5OGYKKzQ0OgkJbW92CVxyeCwgI1VBUlRfT0ZGU0VUKE9NQVA0X1VBUlQ0X0JBU0UpCisJCWIJOThmCis5NToJCW1vdglccngsICNaT09NX1VBUlRfQkFTRQorCQlsZHIJXHRtcCwgPW9tYXBfdWFydF9waHlzCisJCXN0cglccngsIFtcdG1wLCAjMF0KKwkJbW92CVxyeCwgI1pPT01fVUFSVF9WSVJUCisJCWxkcglcdG1wLCA9b21hcF91YXJ0X3ZpcnQKKwkJc3RyCVxyeCwgW1x0bXAsICMwXQorCQltb3YJXHJ4LCAjKFVBUlRfTFNSIDw8IFpPT01fUE9SVF9TSElGVCkKKwkJbGRyCVx0bXAsID1vbWFwX3VhcnRfbHNyCisJCXN0cglccngsIFtcdG1wLCAjMF0KKwkJYgkxMGIKKworCQkvKiBTdG9yZSBib3RoIHBoeXMgYW5kIHZpcnQgYWRkcmVzcyBmb3IgdGhlIHVhcnQgKi8KKzk4OgkJYWRkCVxyeCwgXHJ4LCAjMHg0ODAwMDAwMAlAIHBoeXMgYmFzZQorCQlsZHIJXHRtcCwgPW9tYXBfdWFydF9waHlzCisJCXN0cglccngsIFtcdG1wLCAjMF0KKwkJc3ViCVxyeCwgXHJ4LCAjMHg0ODAwMDAwMAlAIHBoeXMgYmFzZQorCQlhZGQJXHJ4LCBccngsICMweGZhMDAwMDAwCUAgdmlydCBiYXNlCisJCWxkcglcdG1wLCA9b21hcF91YXJ0X3ZpcnQKKwkJc3RyCVxyeCwgW1x0bXAsICMwXQorCQltb3YJXHJ4LCAjKFVBUlRfTFNSIDw8IE9NQVBfUE9SVF9TSElGVCkKKwkJbGRyCVx0bXAsID1vbWFwX3VhcnRfbHNyCisJCXN0cglccngsIFtcdG1wLCAjMF0KKworCQliCTEwYgorOTk6CiAJCS5lbmRtCiAKIAkJLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4CkBAIC00NCwxNSArMTE5LDEyIEBACiAJCS5lbmRtCiAKIAkJLm1hY3JvCWJ1c3l1YXJ0LHJkLHJ4Ci0xMDAxOgkJbGRyYglccmQsIFtccngsICMoMHg1IDw8IDIpXQlAIE9NQVAtMTUxMCBhbmQgZnJpZW5kcwotCQlhbmQJXHJkLCBccmQsICMweDYwCi0JCXRlcQlccmQsICMweDYwCi0JCWJlcQkxMDAyZgotCQlsZHJiCVxyZCwgW1xyeCwgIygweDUgPDwgMCldCUAgT01BUC03MzAgb25seQotCQlhbmQJXHJkLCBccmQsICMweDYwCi0JCXRlcQlccmQsICMweDYwCisxMDAxOgkJbGRyCVxyZCwgPW9tYXBfdWFydF9sc3IKKwkJbGRyCVxyZCwgW1xyZCwgIzBdCisJCWxkcmIJXHJkLCBbXHJ4LCBccmRdCisJCWFuZAlccmQsIFxyZCwgIyhVQVJUX0xTUl9URU1UIHwgVUFSVF9MU1JfVEhSRSkKKwkJdGVxCVxyZCwgIyhVQVJUX0xTUl9URU1UIHwgVUFSVF9MU1JfVEhSRSkKIAkJYm5lCTEwMDFiCi0xMDAyOgogCQkuZW5kbQogCiAJCS5tYWNybwl3YWl0dWFydCxyZCxyeApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKaW5kZXggYzdmMTcyMC4uZmYyNWM3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0xNyw0NiArMTcsMTM0IEBACiAKICNpbmNsdWRlIDxwbGF0L29tYXAyNHh4Lmg+CiAjaW5jbHVkZSA8cGxhdC9vbWFwMzR4eC5oPgotCi0vKiBSRVZJU0lUOiBUaGlzIHNob3VsZCBiZSBzZXQgZHluYW1pY2FsbHkgaWYgQ09ORklHX01VTFRJX09NQVAyIGlzIHNlbGVjdGVkICovCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQyMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkKLSNkZWZpbmUgT01BUDJfVkFfSUNfQkFTRQkJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMjRYWF9JQ19CQVNFKQotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKLSNkZWZpbmUgT01BUDJfVkFfSUNfQkFTRQkJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMzRYWF9JQ19CQVNFKQotI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKICNpbmNsdWRlIDxwbGF0L29tYXA0NHh4Lmg+Ci0jZW5kaWYKLSNkZWZpbmUgSU5UQ1BTX1NJUl9JUlFfT0ZGU0VUCTB4MDA0MAkJLyogQWN0aXZlIGludGVycnVwdCBvZmZzZXQgKi8KLSNkZWZpbmUJQUNUSVZFSVJRX01BU0sJCTB4N2YJCS8qIEFjdGl2ZSBpbnRlcnJ1cHQgYml0cyAqLworCisjaW5jbHVkZSA8cGxhdC9tdWx0aS5oPgorCisjZGVmaW5lIE9NQVAyX0lSUV9CQVNFCQlPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAyNFhYX0lDX0JBU0UpCisjZGVmaW5lIE9NQVAzX0lSUV9CQVNFCQlPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAzNFhYX0lDX0JBU0UpCisjZGVmaW5lIE9NQVA0X0lSUV9CQVNFCQlPTUFQMl9MNF9JT19BRERSRVNTKE9NQVA0NFhYX0dJQ19DUFVfQkFTRSkKKyNkZWZpbmUgSU5UQ1BTX1NJUl9JUlFfT0ZGU0VUCTB4MDA0MAkvKiBvbWFwMi8zIGFjdGl2ZSBpbnRlcnJ1cHQgb2Zmc2V0ICovCisjZGVmaW5lCUFDVElWRUlSUV9NQVNLCQkweDdmCS8qIG9tYXAyLzMgYWN0aXZlIGludGVycnVwdCBiaXRzICovCiAKIAkJLm1hY3JvCWRpc2FibGVfZmlxCiAJCS5lbmRtCiAKLQkJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAotCQkuZW5kbQotCiAJCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgogCQkuZW5kbQogCi0jaWZuZGVmIENPTkZJR19BUkNIX09NQVA0CisvKgorICogVW5vcHRpbWl6ZWQgaXJxIGZ1bmN0aW9ucyBmb3IgbXVsdGktb21hcDIsIDMgYW5kIDQKKyAqLworCisjaWZkZWYgTVVMVElfT01BUDIKKwkJLnB1c2hzZWN0aW9uIC5kYXRhCitvbWFwX2lycV9iYXNlOgkud29yZAkwCisJCS5wb3BzZWN0aW9uCisKKwkJLyogQ29uZmlndXJlIHRoZSBpbnRlcnJ1cHQgYmFzZSBvbiB0aGUgZmlyc3QgaW50ZXJydXB0ICovCisJCS5tYWNybyAgZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKzk6CisJCWxkcglcYmFzZSwgPW9tYXBfaXJxX2Jhc2UJQCBpcnEgYmFzZSBhZGRyZXNzCisJCWxkcglcYmFzZSwgW1xiYXNlLCAjMF0JQCBpcnEgYmFzZSB2YWx1ZQorCQljbXAJXGJhc2UsICMwCQlAIGFscmVhZHkgY29uZmlndXJlZD8KKwkJYm5lCTk5OTdmCQkJQCBub3RoaW5nIHRvIGRvCisKKwkJbXJjCXAxNSwgMCwgXHRtcCwgYzAsIGMwLCAwCUAgZ2V0IHByb2Nlc3NvciByZXZpc2lvbgorCQlhbmQJXHRtcCwgXHRtcCwgIzB4MDAwZjAwMDAJQCBvbmx5IGNoZWNrIGFyY2hpdGVjdHVyZQorCQljbXAJXHRtcCwgIzB4MDAwNjAwMDAJQCBpcyB2Nj8KKwkJYmVxCTI0MDBmCQkJQCBmb3VuZCB2NiBzbyBpdCdzIG9tYXAyNHh4CisJCW1yYwlwMTUsIDAsIFx0bXAsIGMwLCBjMCwgMAlAIGdldCBwcm9jZXNzb3IgcmV2aXNpb24KKwkJYW5kCVx0bXAsIFx0bXAsICMweDAwMDAwMGYwCUAgY2hlY2sgY29ydGV4IDggb3IgOQorCQljbXAJXHRtcCwgIzB4MDAwMDAwODAJQCBjb3J0ZXggQS04PworCQliZXEJMzQwMGYJCQlAIGZvdW5kIEEtOCBzbyBpdCdzIG9tYXAzNHh4CisJCWNtcAlcdG1wLCAjMHgwMDAwMDA5MAlAIGNvcnRleCBBLTk/CisJCWJlcQk0NDAwZgkJCUAgZm91bmQgQS05IHNvIGl0J3Mgb21hcDQ0eHgKKzI0MDA6CQlsZHIJXGJhc2UsID1PTUFQMl9JUlFfQkFTRQorCQlsZHIJXHRtcCwgPW9tYXBfaXJxX2Jhc2UKKwkJc3RyCVxiYXNlLCBbXHRtcCwgIzBdCisJCWIJOWIKKzM0MDA6CQlsZHIJXGJhc2UsID1PTUFQM19JUlFfQkFTRQorCQlsZHIJXHRtcCwgPW9tYXBfaXJxX2Jhc2UKKwkJc3RyCVxiYXNlLCBbXHRtcCwgIzBdCisJCWIJOWIKKzQ0MDA6CQlsZHIJXGJhc2UsID1PTUFQNF9JUlFfQkFTRQorCQlsZHIJXHRtcCwgPW9tYXBfaXJxX2Jhc2UKKwkJc3RyCVxiYXNlLCBbXHRtcCwgIzBdCisJCWIJOWIKKzk5OTc6CisJCS5lbmRtCisKKwkJLyogQ2hlY2sgdGhlIHBlbmRpbmcgaW50ZXJydXB0cy4gTm90ZSB0aGF0IGJhc2UgYWxyZWFkeSBzZXQgKi8KIAkJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAotCQlsZHIJXGJhc2UsID1PTUFQMl9WQV9JQ19CQVNFCisJCXRzdAlcYmFzZSwgIzB4MTAwCQlAIGdpYyBhZGRyZXNzPworCQlibmUJNDQwMWYJCQlAIGZvdW5kIGdpYworCisJCS8qIEhhbmRsZSBvbWFwMiBhbmQgb21hcDMgKi8KIAkJbGRyCVxpcnFuciwgW1xiYXNlLCAjMHg5OF0gLyogSVJRIHBlbmRpbmcgcmVnIDEgKi8KIAkJY21wCVxpcnFuciwgIzB4MAotCQlibmUJMjIyMmYKKwkJYm5lCTk5OThmCiAJCWxkcglcaXJxbnIsIFtcYmFzZSwgIzB4YjhdIC8qIElSUSBwZW5kaW5nIHJlZyAyICovCiAJCWNtcAlcaXJxbnIsICMweDAKLQkJYm5lCTIyMjJmCisJCWJuZQk5OTk4ZgogCQlsZHIJXGlycW5yLCBbXGJhc2UsICMweGQ4XSAvKiBJUlEgcGVuZGluZyByZWcgMyAqLwogCQljbXAJXGlycW5yLCAjMHgwCi0yMjIyOgorOTk5ODoKKwkJbGRybmUJXGlycW5yLCBbXGJhc2UsICNJTlRDUFNfU0lSX0lSUV9PRkZTRVRdCisJCWFuZAlcaXJxbnIsIFxpcnFuciwgI0FDVElWRUlSUV9NQVNLIC8qIENsZWFyIHNwdXJpb3VzIGJpdHMgKi8KKwkJYgk5OTk5ZgorCisJCS8qIEhhbmRsZSBvbWFwNCAqLworNDQwMToJCWxkciAgICAgXGlycXN0YXQsIFtcYmFzZSwgI0dJQ19DUFVfSU5UQUNLXQorCQlsZHIgICAgIFx0bXAsID0xMDIxCisJCWJpYyAgICAgXGlycW5yLCBcaXJxc3RhdCwgIzB4MWMwMAorCQljbXAgICAgIFxpcnFuciwgIzI5CisJCWNtcGNjICAgXGlycW5yLCBcaXJxbnIKKwkJY21wbmUgICBcaXJxbnIsIFx0bXAKKwkJY21wY3MgICBcaXJxbnIsIFxpcnFucgorOTk5OToKKwkJLmVuZG0KKworCisjZWxzZQkvKiBNVUxUSV9PTUFQMiAqLworCisKKy8qCisgKiBPcHRpbWl6ZWQgaXJxIGZ1bmN0aW9ucyBmb3Igb21hcDIsIDMgYW5kIDQKKyAqLworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKKwkJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCisJCWxkcglcYmFzZSwgPU9NQVAyX0lSUV9CQVNFCisjZWxzZQorCQlsZHIJXGJhc2UsID1PTUFQM19JUlFfQkFTRQorI2VuZGlmCisJCS5lbmRtCisKKwkJLyogQ2hlY2sgdGhlIHBlbmRpbmcgaW50ZXJydXB0cy4gTm90ZSB0aGF0IGJhc2UgYWxyZWFkeSBzZXQgKi8KKwkJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCQlsZHIJXGlycW5yLCBbXGJhc2UsICMweDk4XSAvKiBJUlEgcGVuZGluZyByZWcgMSAqLworCQljbXAJXGlycW5yLCAjMHgwCisJCWJuZQk5OTk5ZgorCQlsZHIJXGlycW5yLCBbXGJhc2UsICMweGI4XSAvKiBJUlEgcGVuZGluZyByZWcgMiAqLworCQljbXAJXGlycW5yLCAjMHgwCisJCWJuZQk5OTk5ZgorCQlsZHIJXGlycW5yLCBbXGJhc2UsICMweGQ4XSAvKiBJUlEgcGVuZGluZyByZWcgMyAqLworCQljbXAJXGlycW5yLCAjMHgwCis5OTk5OgogCQlsZHJuZQlcaXJxbnIsIFtcYmFzZSwgI0lOVENQU19TSVJfSVJRX09GRlNFVF0KIAkJYW5kCVxpcnFuciwgXGlycW5yLCAjQUNUSVZFSVJRX01BU0sgLyogQ2xlYXIgc3B1cmlvdXMgYml0cyAqLwogCiAJCS5lbmRtCi0jZWxzZQotI2RlZmluZSBPTUFQNDRYWF9WQV9HSUNfQ1BVX0JBU0UJT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQNDRYWF9HSUNfQ1BVX0JBU0UpCisjZW5kaWYKKworCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKKworCQkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisJCWxkciAgICAgXGJhc2UsID1PTUFQNF9JUlFfQkFTRQorCQkuZW5kbQogCiAJCS8qCiAJCSAqIFRoZSBpbnRlcnJ1cHQgbnVtYmVyaW5nIHNjaGVtZSBpcyBkZWZpbmVkIGluIHRoZQpAQCAtNzgsNyArMTY2LDYgQEAKIAkJICogdmFsaWQgcmFuZ2UgZm9yIGFuIElSUSAoMzAtMTAyMCBpbmNsdXNpdmUpLgogCQkgKi8KIAkJLm1hY3JvICBnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKLQkJbGRyICAgICBcYmFzZSwgPU9NQVA0NFhYX1ZBX0dJQ19DUFVfQkFTRQogCQlsZHIgICAgIFxpcnFzdGF0LCBbXGJhc2UsICNHSUNfQ1BVX0lOVEFDS10KIAogCQlsZHIgICAgIFx0bXAsID0xMDIxCkBAIC0xMTksNiArMjA2LDcgQEAKIAkJY21wCVx0bXAsICMwCiAJCS5lbmRtCiAjZW5kaWYKKyNlbmRpZgkvKiBNVUxUSV9PTUFQMiAqLwogCiAJCS5tYWNybwlpcnFfcHJpb190YWJsZQogCQkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9pby5jCmluZGV4IDVhNzk5NjQuLjQwMmU4ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvaW8uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lvLmMKQEAgLTM1LDcgKzM1LDkgQEAKICNpbmNsdWRlIDxwbGF0L3NlcmlhbC5oPgogI2luY2x1ZGUgPHBsYXQvdnJhbS5oPgogCi0jaW5jbHVkZSAiY2xvY2suaCIKKyNpbmNsdWRlICJjbG9jazJ4eHguaCIKKyNpbmNsdWRlICJjbG9jazN4eHguaCIKKyNpbmNsdWRlICJjbG9jazQ0eHguaCIKIAogI2luY2x1ZGUgPHBsYXQvb21hcC1wbS5oPgogI2luY2x1ZGUgPHBsYXQvcG93ZXJkb21haW4uaD4KQEAgLTQ0LDE2ICs0NiwxMyBAQAogI2luY2x1ZGUgPHBsYXQvY2xvY2tkb21haW4uaD4KICNpbmNsdWRlICJjbG9ja2RvbWFpbnMuaCIKICNpbmNsdWRlIDxwbGF0L29tYXBfaHdtb2QuaD4KLSNpbmNsdWRlICJvbWFwX2h3bW9kXzI0MjAuaCIKLSNpbmNsdWRlICJvbWFwX2h3bW9kXzI0MzAuaCIKLSNpbmNsdWRlICJvbWFwX2h3bW9kXzM0eHguaCIKIAogLyoKICAqIFRoZSBtYWNoaW5lIHNwZWNpZmljIGNvZGUgbWF5IHByb3ZpZGUgdGhlIGV4dHJhIG1hcHBpbmcgYmVzaWRlcyB0aGUKICAqIGRlZmF1bHQgbWFwcGluZyBwcm92aWRlZCBoZXJlLgogICovCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXAyNHh4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLnZpcnR1YWwJPSBMM18yNFhYX1ZJUlQsCkBAIC0xMjMsNyArMTIyLDcgQEAKICNlbmRpZgogI2VuZGlmCiAKLSNpZmRlZglDT05GSUdfQVJDSF9PTUFQMzRYWAorI2lmZGVmCUNPTkZJR19BUkNIX09NQVAzCiBzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG9tYXAzNHh4X2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKIAkJLnZpcnR1YWwJPSBMM18zNFhYX1ZJUlQsCkBAIC0xMzgsMTIgKzEzNyw2IEBACiAJCS50eXBlCQk9IE1UX0RFVklDRQogCX0sCiAJewotCQkudmlydHVhbAk9IEw0X1dLXzM0WFhfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEw0X1dLXzM0WFhfUEhZUyksCi0JCS5sZW5ndGgJCT0gTDRfV0tfMzRYWF9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9LAotCXsKIAkJLnZpcnR1YWwJPSBPTUFQMzRYWF9HUE1DX1ZJUlQsCiAJCS5wZm4JCT0gX19waHlzX3RvX3BmbihPTUFQMzRYWF9HUE1DX1BIWVMpLAogCQkubGVuZ3RoCQk9IE9NQVAzNFhYX0dQTUNfU0laRSwKQEAgLTE5MCwxMiArMTgzLDYgQEAKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0sCiAJewotCQkudmlydHVhbAk9IEw0X1dLXzQ0WFhfVklSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEw0X1dLXzQ0WFhfUEhZUyksCi0JCS5sZW5ndGgJCT0gTDRfV0tfNDRYWF9TSVpFLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UsCi0JfSwKLQl7CiAJCS52aXJ0dWFsCT0gT01BUDQ0WFhfR1BNQ19WSVJULAogCQkucGZuCQk9IF9fcGh5c190b19wZm4oT01BUDQ0WFhfR1BNQ19QSFlTKSwKIAkJLmxlbmd0aAkJPSBPTUFQNDRYWF9HUE1DX1NJWkUsCkBAIC0yMzQsMjUgKzIyMSw4IEBACiB9OwogI2VuZGlmCiAKLXZvaWQgX19pbml0IG9tYXAyX21hcF9jb21tb25faW8odm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBfb21hcDJfbWFwX2NvbW1vbl9pbyh2b2lkKQogewotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MjApCi0JaW90YWJsZV9pbml0KG9tYXAyNHh4X2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDI0eHhfaW9fZGVzYykpOwotCWlvdGFibGVfaW5pdChvbWFwMjQyeF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAyNDJ4X2lvX2Rlc2MpKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkKLQlpb3RhYmxlX2luaXQob21hcDI0eHhfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwMjR4eF9pb19kZXNjKSk7Ci0JaW90YWJsZV9pbml0KG9tYXAyNDN4X2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDI0M3hfaW9fZGVzYykpOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQotCWlvdGFibGVfaW5pdChvbWFwMzR4eF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAzNHh4X2lvX2Rlc2MpKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKLQlpb3RhYmxlX2luaXQob21hcDQ0eHhfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwNDR4eF9pb19kZXNjKSk7Ci0jZW5kaWYKIAkvKiBOb3JtYWxseSBkZXZpY2VtYXBzX2luaXQoKSB3b3VsZCBmbHVzaCBjYWNoZXMgYW5kIHRsYiBhZnRlcgogCSAqIG1kZXNjLT5tYXBfaW8oKSwgYnV0IHdlIG11c3QgYWxzbyBkbyBpdCBoZXJlIGJlY2F1c2Ugb2YgdGhlIENQVQogCSAqIHJldmlzaW9uIGNoZWNrIGJlbG93LgpAQCAtMjY2LDYgKzIzNiw0MCBAQAogCW9tYXBfdnJhbV9yZXNlcnZlX3NkcmFtKCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQyMAordm9pZCBfX2luaXQgb21hcDI0MnhfbWFwX2NvbW1vbl9pbygpCit7CisJaW90YWJsZV9pbml0KG9tYXAyNHh4X2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDI0eHhfaW9fZGVzYykpOworCWlvdGFibGVfaW5pdChvbWFwMjQyeF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAyNDJ4X2lvX2Rlc2MpKTsKKwlfb21hcDJfbWFwX2NvbW1vbl9pbygpOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQzMAordm9pZCBfX2luaXQgb21hcDI0M3hfbWFwX2NvbW1vbl9pbygpCit7CisJaW90YWJsZV9pbml0KG9tYXAyNHh4X2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDI0eHhfaW9fZGVzYykpOworCWlvdGFibGVfaW5pdChvbWFwMjQzeF9pb19kZXNjLCBBUlJBWV9TSVpFKG9tYXAyNDN4X2lvX2Rlc2MpKTsKKwlfb21hcDJfbWFwX2NvbW1vbl9pbygpOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwordm9pZCBfX2luaXQgb21hcDM0eHhfbWFwX2NvbW1vbl9pbygpCit7CisJaW90YWJsZV9pbml0KG9tYXAzNHh4X2lvX2Rlc2MsIEFSUkFZX1NJWkUob21hcDM0eHhfaW9fZGVzYykpOworCV9vbWFwMl9tYXBfY29tbW9uX2lvKCk7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVA0Cit2b2lkIF9faW5pdCBvbWFwNDR4eF9tYXBfY29tbW9uX2lvKCkKK3sKKwlpb3RhYmxlX2luaXQob21hcDQ0eHhfaW9fZGVzYywgQVJSQVlfU0laRShvbWFwNDR4eF9pb19kZXNjKSk7CisJX29tYXAyX21hcF9jb21tb25faW8oKTsKK30KKyNlbmRpZgorCiAvKgogICogb21hcDJfaW5pdF9yZXByb2dyYW1fc2RyYyAtIHJlcHJvZ3JhbSBTRFJDIHRpbWluZyBwYXJhbWV0ZXJzCiAgKgpAQCAtMzAzLDI0ICszMDcsMzEgQEAKIHZvaWQgX19pbml0IG9tYXAyX2luaXRfY29tbW9uX2h3KHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzZHJjX2NzMCwKIAkJCQkgc3RydWN0IG9tYXBfc2RyY19wYXJhbXMgKnNkcmNfY3MxKQogewotCXN0cnVjdCBvbWFwX2h3bW9kICoqaHdtb2RzID0gTlVMTDsKKwlwd3JkbV9pbml0KHBvd2VyZG9tYWluc19vbWFwKTsKKwljbGtkbV9pbml0KGNsb2NrZG9tYWluc19vbWFwLCBjbGtkbV9hdXRvZGVwcyk7CisjaWZuZGVmIENPTkZJR19BUkNIX09NQVA0IC8qIEZJWE1FOiBSZW1vdmUgdGhpcyBvbmNlIHRoZSBjbGtkZXYgaXMgcmVhZHkgKi8KKwlpZiAoY3B1X2lzX29tYXAyNDJ4KCkpCisJCW9tYXAyNDIwX2h3bW9kX2luaXQoKTsKKwllbHNlIGlmIChjcHVfaXNfb21hcDI0M3goKSkKKwkJb21hcDI0MzBfaHdtb2RfaW5pdCgpOworCWVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKQorCQlvbWFwM3h4eF9od21vZF9pbml0KCk7CisJb21hcDJfbXV4X2luaXQoKTsKKwkvKiBUaGUgT1BQIHRhYmxlcyBoYXZlIHRvIGJlIHJlZ2lzdGVyZWQgYmVmb3JlIGEgY2xrIGluaXQgKi8KKwlvbWFwX3BtX2lmX2Vhcmx5X2luaXQobXB1X29wcHMsIGRzcF9vcHBzLCBsM19vcHBzKTsKKyNlbmRpZgogCiAJaWYgKGNwdV9pc19vbWFwMjQyMCgpKQotCQlod21vZHMgPSBvbWFwMjQyMF9od21vZHM7CisJCW9tYXAyNDIwX2Nsa19pbml0KCk7CiAJZWxzZSBpZiAoY3B1X2lzX29tYXAyNDMwKCkpCi0JCWh3bW9kcyA9IG9tYXAyNDMwX2h3bW9kczsKKwkJb21hcDI0MzBfY2xrX2luaXQoKTsKIAllbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkKLQkJaHdtb2RzID0gb21hcDM0eHhfaHdtb2RzOworCQlvbWFwM3h4eF9jbGtfaW5pdCgpOworCWVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKQorCQlvbWFwNHh4eF9jbGtfaW5pdCgpOworCWVsc2UKKwkJcHJfZXJyKCJDb3VsZCBub3QgaW5pdCBjbG9jayBmcmFtZXdvcmsgLSB1bmtub3duIENQVVxuIik7CiAKLSNpZm5kZWYgQ09ORklHX0FSQ0hfT01BUDQgLyogRklYTUU6IFJlbW92ZSB0aGlzIG9uY2UgdGhlIGNsa2RldiBpcyByZWFkeSAqLwotCS8qIFRoZSBPUFAgdGFibGVzIGhhdmUgdG8gYmUgcmVnaXN0ZXJlZCBiZWZvcmUgYSBjbGsgaW5pdCAqLwotCW9tYXBfaHdtb2RfaW5pdChod21vZHMpOwotCW9tYXAyX211eF9pbml0KCk7Ci0Jb21hcF9wbV9pZl9lYXJseV9pbml0KG1wdV9vcHBzLCBkc3Bfb3BwcywgbDNfb3Bwcyk7Ci0JcHdyZG1faW5pdChwb3dlcmRvbWFpbnNfb21hcCk7Ci0JY2xrZG1faW5pdChjbG9ja2RvbWFpbnNfb21hcCwgY2xrZG1fcHdyZG1fYXV0b2RlcHMpOwotI2VuZGlmCi0Jb21hcDJfY2xrX2luaXQoKTsKIAlvbWFwX3NlcmlhbF9lYXJseV9pbml0KCk7CiAjaWZuZGVmIENPTkZJR19BUkNIX09NQVA0CiAJb21hcF9od21vZF9sYXRlX2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbWFpbGJveC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMKaW5kZXggMjgxYWI2My4uNTJhOTgxYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tYWlsYm94LmMKQEAgLTQwLDYgKzQwLDkgQEAKICNkZWZpbmUgQVVUT0lETEUJKDEgPDwgMCkKICNkZWZpbmUgU09GVFJFU0VUCSgxIDw8IDEpCiAjZGVmaW5lIFNNQVJUSURMRQkoMiA8PCAzKQorI2RlZmluZSBPTUFQNF9TT0ZUUkVTRVQJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDRfTk9JRExFCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0X1NNQVJUSURMRQkoMiA8PCAyKQogCiAvKiBTWVNTVEFUVVM6IHJlZ2lzdGVyIGJpdCBkZWZpbml0aW9uICovCiAjZGVmaW5lIFJFU0VURE9ORQkoMSA8PCAwKQpAQCAtOTMsMjkgKzk2LDQ3IEBACiAKIAltYm94X2lja19oYW5kbGUgPSBjbGtfZ2V0KE5VTEwsICJtYWlsYm94ZXNfaWNrIik7CiAJaWYgKElTX0VSUihtYm94X2lja19oYW5kbGUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGdldCBtYWlsYm94ZXNfaWNrOiAlZFxuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZ2V0IG1haWxib3hlc19pY2s6ICVsZFxuIiwKIAkJCVBUUl9FUlIobWJveF9pY2tfaGFuZGxlKSk7CiAJCXJldHVybiBQVFJfRVJSKG1ib3hfaWNrX2hhbmRsZSk7CiAJfQogCWNsa19lbmFibGUobWJveF9pY2tfaGFuZGxlKTsKIAotCW1ib3hfd3JpdGVfcmVnKFNPRlRSRVNFVCwgTUFJTEJPWF9TWVNDT05GSUcpOwotCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygyMCk7Ci0JZG8gewotCQlsID0gbWJveF9yZWFkX3JlZyhNQUlMQk9YX1NZU1NUQVRVUyk7Ci0JCWlmIChsICYgUkVTRVRET05FKQotCQkJYnJlYWs7Ci0JfSB3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpOworCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgeworCQltYm94X3dyaXRlX3JlZyhPTUFQNF9TT0ZUUkVTRVQsIE1BSUxCT1hfU1lTQ09ORklHKTsKKwkJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwKTsKKwkJZG8geworCQkJbCA9IG1ib3hfcmVhZF9yZWcoTUFJTEJPWF9TWVNDT05GSUcpOworCQkJaWYgKCEobCAmIE9NQVA0X1NPRlRSRVNFVCkpCisJCQkJYnJlYWs7CisJCX0gd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKTsKIAotCWlmICghKGwgJiBSRVNFVERPTkUpKSB7Ci0JCXByX2VycigiQ2FuJ3QgdGFrZSBtbXUgb3V0IG9mIHJlc2V0XG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWlmIChsICYgT01BUDRfU09GVFJFU0VUKSB7CisJCQlwcl9lcnIoIkNhbid0IHRha2UgbWFpbGJveCBvdXQgb2YgcmVzZXRcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKwl9IGVsc2UgeworCQltYm94X3dyaXRlX3JlZyhTT0ZUUkVTRVQsIE1BSUxCT1hfU1lTQ09ORklHKTsKKwkJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwKTsKKwkJZG8geworCQkJbCA9IG1ib3hfcmVhZF9yZWcoTUFJTEJPWF9TWVNTVEFUVVMpOworCQkJaWYgKGwgJiBSRVNFVERPTkUpCisJCQkJYnJlYWs7CisJCX0gd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKTsKKworCQlpZiAoIShsICYgUkVTRVRET05FKSkgeworCQkJcHJfZXJyKCJDYW4ndCB0YWtlIG1haWxib3ggb3V0IG9mIHJlc2V0XG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CiAJfQogCiAJbCA9IG1ib3hfcmVhZF9yZWcoTUFJTEJPWF9SRVZJU0lPTik7CiAJcHJfaW5mbygib21hcCBtYWlsYm94IHJldiAlZC4lZFxuIiwgKGwgJiAweGYwKSA+PiA0LCAobCAmIDB4MGYpKTsKIAotCWwgPSBTTUFSVElETEUgfCBBVVRPSURMRTsKKwlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCisJCWwgPSBPTUFQNF9TTUFSVElETEU7CisJZWxzZQorCQlsID0gU01BUlRJRExFIHwgQVVUT0lETEU7CiAJbWJveF93cml0ZV9yZWcobCwgTUFJTEJPWF9TWVNDT05GSUcpOwogCiAJb21hcDJfbWJveF9lbmFibGVfaXJxKG1ib3gsIElSUV9SWCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21jYnNwLmMKaW5kZXggYmFhNDUxNy4uYmU4ZmNlMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tY2JzcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbWNic3AuYwpAQCAtNjUsOSArNjUsMTEgQEAKIAl9LAogfTsKICNkZWZpbmUgT01BUDI0MjBfTUNCU1BfUERBVEFfU1oJCUFSUkFZX1NJWkUob21hcDI0MjBfbWNic3BfcGRhdGEpCisjZGVmaW5lIE9NQVAyNDIwX01DQlNQX1JFR19OVU0JCShPTUFQX01DQlNQX1JFR19SQ0NSIC8gc2l6ZW9mKHUzMikgKyAxKQogI2Vsc2UKICNkZWZpbmUgb21hcDI0MjBfbWNic3BfcGRhdGEJCU5VTEwKICNkZWZpbmUgT01BUDI0MjBfTUNCU1BfUERBVEFfU1oJCTAKKyNkZWZpbmUgT01BUDI0MjBfTUNCU1BfUkVHX05VTQkJMAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQzMApAQCAtMTE0LDEyICsxMTYsMTQgQEAKIAl9LAogfTsKICNkZWZpbmUgT01BUDI0MzBfTUNCU1BfUERBVEFfU1oJCUFSUkFZX1NJWkUob21hcDI0MzBfbWNic3BfcGRhdGEpCisjZGVmaW5lIE9NQVAyNDMwX01DQlNQX1JFR19OVU0JCShPTUFQX01DQlNQX1JFR19SQ0NSIC8gc2l6ZW9mKHUzMikgKyAxKQogI2Vsc2UKICNkZWZpbmUgb21hcDI0MzBfbWNic3BfcGRhdGEJCU5VTEwKICNkZWZpbmUgT01BUDI0MzBfTUNCU1BfUERBVEFfU1oJCTAKKyNkZWZpbmUgT01BUDI0MzBfTUNCU1BfUkVHX05VTQkJMAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCiBzdGF0aWMgc3RydWN0IG9tYXBfbWNic3BfcGxhdGZvcm1fZGF0YSBvbWFwMzR4eF9tY2JzcF9wZGF0YVtdID0gewogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQMV9CQVNFLApAQCAtMTMyLDYgKzEzNiw3IEBACiAJfSwKIAl7CiAJCS5waHlzX2Jhc2UJPSBPTUFQMzRYWF9NQ0JTUDJfQkFTRSwKKwkJLnBoeXNfYmFzZV9zdAk9IE9NQVAzNFhYX01DQlNQMl9TVF9CQVNFLAogCQkuZG1hX3J4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AyX1JYLAogCQkuZG1hX3R4X3N5bmMJPSBPTUFQMjRYWF9ETUFfTUNCU1AyX1RYLAogCQkucnhfaXJxCQk9IElOVF8yNFhYX01DQlNQMl9JUlFfUlgsCkBAIC0xNDEsNiArMTQ2LDcgQEAKIAl9LAogCXsKIAkJLnBoeXNfYmFzZQk9IE9NQVAzNFhYX01DQlNQM19CQVNFLAorCQkucGh5c19iYXNlX3N0CT0gT01BUDM0WFhfTUNCU1AzX1NUX0JBU0UsCiAJCS5kbWFfcnhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDNfUlgsCiAJCS5kbWFfdHhfc3luYwk9IE9NQVAyNFhYX0RNQV9NQ0JTUDNfVFgsCiAJCS5yeF9pcnEJCT0gSU5UXzI0WFhfTUNCU1AzX0lSUV9SWCwKQEAgLTE2OCw5ICsxNzQsMTEgQEAKIAl9LAogfTsKICNkZWZpbmUgT01BUDM0WFhfTUNCU1BfUERBVEFfU1oJCUFSUkFZX1NJWkUob21hcDM0eHhfbWNic3BfcGRhdGEpCisjZGVmaW5lIE9NQVAzNFhYX01DQlNQX1JFR19OVU0JCShPTUFQX01DQlNQX1JFR19SQ0NSIC8gc2l6ZW9mKHUzMikgKyAxKQogI2Vsc2UKICNkZWZpbmUgb21hcDM0eHhfbWNic3BfcGRhdGEJCU5VTEwKICNkZWZpbmUgT01BUDM0WFhfTUNCU1BfUERBVEFfU1oJCTAKKyNkZWZpbmUgT01BUDM0WFhfTUNCU1BfUkVHX05VTQkJMAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tY2JzcF9wbGF0Zm9ybV9kYXRhIG9tYXA0NHh4X21jYnNwX3BkYXRhW10gPSB7CkBAIC0yMDgsMTcgKzIxNiwyMyBAQAogCX0sCiB9OwogI2RlZmluZSBPTUFQNDRYWF9NQ0JTUF9QREFUQV9TWgkJQVJSQVlfU0laRShvbWFwNDR4eF9tY2JzcF9wZGF0YSkKKyNkZWZpbmUgT01BUDQ0WFhfTUNCU1BfUkVHX05VTQkJKE9NQVBfTUNCU1BfUkVHX1JDQ1IgLyBzaXplb2YodTMyKSArIDEpCiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXAyX21jYnNwX2luaXQodm9pZCkKIHsKLQlpZiAoY3B1X2lzX29tYXAyNDIwKCkpCisJaWYgKGNwdV9pc19vbWFwMjQyMCgpKSB7CiAJCW9tYXBfbWNic3BfY291bnQgPSBPTUFQMjQyMF9NQ0JTUF9QREFUQV9TWjsKLQlpZiAoY3B1X2lzX29tYXAyNDMwKCkpCisJCW9tYXBfbWNic3BfY2FjaGVfc2l6ZSA9IE9NQVAyNDIwX01DQlNQX1JFR19OVU0gKiBzaXplb2YodTE2KTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMjQzMCgpKSB7CiAJCW9tYXBfbWNic3BfY291bnQgPSBPTUFQMjQzMF9NQ0JTUF9QREFUQV9TWjsKLQlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCW9tYXBfbWNic3BfY2FjaGVfc2l6ZSA9IE9NQVAyNDMwX01DQlNQX1JFR19OVU0gKiBzaXplb2YodTMyKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCW9tYXBfbWNic3BfY291bnQgPSBPTUFQMzRYWF9NQ0JTUF9QREFUQV9TWjsKLQlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCisJCW9tYXBfbWNic3BfY2FjaGVfc2l6ZSA9IE9NQVAzNFhYX01DQlNQX1JFR19OVU0gKiBzaXplb2YodTMyKTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CiAJCW9tYXBfbWNic3BfY291bnQgPSBPTUFQNDRYWF9NQ0JTUF9QREFUQV9TWjsKKwkJb21hcF9tY2JzcF9jYWNoZV9zaXplID0gT01BUDQ0WFhfTUNCU1BfUkVHX05VTSAqIHNpemVvZih1MzIpOworCX0KIAogCW1jYnNwX3B0ciA9IGt6YWxsb2Mob21hcF9tY2JzcF9jb3VudCAqIHNpemVvZihzdHJ1Y3Qgb21hcF9tY2JzcCAqKSwKIAkJCQkJCQkJR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhZmU5ZGQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTQyICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLW9tYXAyL21tYy10d2w0MDMwLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBUZXhhcyBJbnN0cnVtZW50cwotICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uCi0gKiBBdXRob3I6IFRleGFzIEluc3RydW1lbnRzCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxwbGF0L2NvbnRyb2wuaD4KLSNpbmNsdWRlIDxwbGF0L21tYy5oPgotI2luY2x1ZGUgPHBsYXQvYm9hcmQuaD4KLQotI2luY2x1ZGUgIm1tYy10d2w0MDMwLmgiCi0KLQotI2lmIGRlZmluZWQoQ09ORklHX1JFR1VMQVRPUikgJiYgXAotCShkZWZpbmVkKENPTkZJR19NTUNfT01BUF9IUykgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfSFNfTU9EVUxFKSkKLQotc3RhdGljIHUxNiBjb250cm9sX3BiaWFzX29mZnNldDsKLXN0YXRpYyB1MTYgY29udHJvbF9kZXZjb25mMV9vZmZzZXQ7Ci0KLSNkZWZpbmUgSFNNTUNfTkFNRV9MRU4JOQotCi1zdGF0aWMgc3RydWN0IHR3bF9tbWNfY29udHJvbGxlciB7Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEJKm1tYzsKLQkvKiBWY2MgPT0gY29uZmlndXJlZCBzdXBwbHkKLQkgKiBWY2NfYWx0ID09IG9wdGlvbmFsCi0JICogICAtCU1NQzEsIHN1cHBseSBmb3IgREFUNC4uREFUNwotCSAqICAgLQlNTUMyL01NQzIsIGV4dGVybmFsIGxldmVsIHNoaWZ0ZXIgdm9sdGFnZSBzdXBwbHksIGZvcgotCSAqCWNoaXAgKFNESU8sIGVNTUMsIGV0Yykgb3IgdHJhbnNjZWl2ZXIgKE1NQzIgb25seSkKLQkgKi8KLQlzdHJ1Y3QgcmVndWxhdG9yCQkqdmNjOwotCXN0cnVjdCByZWd1bGF0b3IJCSp2Y2NfYXV4OwotCWNoYXIJCQkJbmFtZVtIU01NQ19OQU1FX0xFTiArIDFdOwotfSBoc21tY1tPTUFQMzRYWF9OUl9NTUNdOwotCi1zdGF0aWMgaW50IHR3bF9tbWNfY2FyZF9kZXRlY3QoaW50IGlycSkKLXsKLQl1bnNpZ25lZCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaHNtbWMpOyBpKyspIHsKLQkJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYzsKLQotCQltbWMgPSBoc21tY1tpXS5tbWM7Ci0JCWlmICghbW1jKQotCQkJY29udGludWU7Ci0JCWlmIChpcnEgIT0gbW1jLT5zbG90c1swXS5jYXJkX2RldGVjdF9pcnEpCi0JCQljb250aW51ZTsKLQotCQkvKiBOT1RFOiBhc3N1bWVzIGNhcmQgZGV0ZWN0IHNpZ25hbCBpcyBhY3RpdmUtbG93ICovCi0JCXJldHVybiAhZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAobW1jLT5zbG90c1swXS5zd2l0Y2hfcGluKTsKLQl9Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLXN0YXRpYyBpbnQgdHdsX21tY19nZXRfcm8oc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkKLXsKLQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCi0JLyogTk9URTogYXNzdW1lcyB3cml0ZSBwcm90ZWN0IHNpZ25hbCBpcyBhY3RpdmUtaGlnaCAqLwotCXJldHVybiBncGlvX2dldF92YWx1ZV9jYW5zbGVlcChtbWMtPnNsb3RzWzBdLmdwaW9fd3ApOwotfQotCi1zdGF0aWMgaW50IHR3bF9tbWNfZ2V0X2NvdmVyX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpCi17Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQotCS8qIE5PVEU6IGFzc3VtZXMgY2FyZCBkZXRlY3Qgc2lnbmFsIGlzIGFjdGl2ZS1sb3cgKi8KLQlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKG1tYy0+c2xvdHNbMF0uc3dpdGNoX3Bpbik7Ci19Ci0KLS8qCi0gKiBNTUMgU2xvdCBJbml0aWFsaXphdGlvbi4KLSAqLwotc3RhdGljIGludCB0d2xfbW1jX2xhdGVfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQlpbnQgcmV0ID0gMDsKLQlpbnQgaTsKLQotCS8qIE1NQy9TRC9TRElPIGRvZXNuJ3QgcmVxdWlyZSBhIGNhcmQgZGV0ZWN0IHN3aXRjaCAqLwotCWlmIChncGlvX2lzX3ZhbGlkKG1tYy0+c2xvdHNbMF0uc3dpdGNoX3BpbikpIHsKLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG1tYy0+c2xvdHNbMF0uc3dpdGNoX3BpbiwgIm1tY19jZCIpOwotCQlpZiAocmV0KQotCQkJZ290byBkb25lOwotCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChtbWMtPnNsb3RzWzBdLnN3aXRjaF9waW4pOwotCQlpZiAocmV0KQotCQkJZ290byBlcnI7Ci0JfQotCi0JLyogcmVxdWlyZSBhdCBsZWFzdCBtYWluIHJlZ3VsYXRvciAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGhzbW1jKTsgaSsrKSB7Ci0JCWlmIChoc21tY1tpXS5uYW1lID09IG1tYy0+c2xvdHNbMF0ubmFtZSkgewotCQkJc3RydWN0IHJlZ3VsYXRvciAqcmVnOwotCi0JCQloc21tY1tpXS5tbWMgPSBtbWM7Ci0KLQkJCXJlZyA9IHJlZ3VsYXRvcl9nZXQoZGV2LCAidm1tYyIpOwotCQkJaWYgKElTX0VSUihyZWcpKSB7Ci0JCQkJZGV2X2RiZyhkZXYsICJ2bW1jIHJlZ3VsYXRvciBtaXNzaW5nXG4iKTsKLQkJCQkvKiBIQUNLOiB1bnRpbCBmaXhlZC5jIHJlZ3VsYXRvciBpcyB1c2FibGUsCi0JCQkJICogd2UgZG9uJ3QgcmVxdWlyZSBhIG1haW4gcmVndWxhdG9yCi0JCQkJICogZm9yIE1NQzIgb3IgTU1DMwotCQkJCSAqLwotCQkJCWlmIChpICE9IDApCi0JCQkJCWJyZWFrOwotCQkJCXJldCA9IFBUUl9FUlIocmVnKTsKLQkJCQloc21tY1tpXS52Y2MgPSBOVUxMOwotCQkJCWdvdG8gZXJyOwotCQkJfQotCQkJaHNtbWNbaV0udmNjID0gcmVnOwotCQkJbW1jLT5zbG90c1swXS5vY3JfbWFzayA9IG1tY19yZWd1bGF0b3JfZ2V0X29jcm1hc2socmVnKTsKLQotCQkJLyogYWxsb3cgYW4gYXV4IHJlZ3VsYXRvciAqLwotCQkJcmVnID0gcmVndWxhdG9yX2dldChkZXYsICJ2bW1jX2F1eCIpOwotCQkJaHNtbWNbaV0udmNjX2F1eCA9IElTX0VSUihyZWcpID8gTlVMTCA6IHJlZzsKLQotCQkJLyogVUdMWSBIQUNLOiAgd29ya2Fyb3VuZCByZWd1bGF0b3IgZnJhbWV3b3JrIGJ1Z3MuCi0JCQkgKiBXaGVuIHRoZSBib290bG9hZGVyIGxlYXZlcyBhIHN1cHBseSBhY3RpdmUsIGl0J3MKLQkJCSAqIGluaXRpYWxpemVkIHdpdGggemVybyB1c2Vjb3VudCAuLi4gYW5kIHdlIGNhbid0Ci0JCQkgKiBkaXNhYmxlIGl0IHdpdGhvdXQgZmlyc3QgZW5hYmxpbmcgaXQuICBVbnRpbCB0aGUKLQkJCSAqIGZyYW1ld29yayBpcyBmaXhlZCwgd2UgbmVlZCBhIHdvcmthcm91bmQgbGlrZSB0aGlzCi0JCQkgKiAod2hpY2ggaXMgc2FmZSBmb3IgTU1DLCBidXQgbm90IGluIGdlbmVyYWwpLgotCQkJICovCi0JCQlpZiAocmVndWxhdG9yX2lzX2VuYWJsZWQoaHNtbWNbaV0udmNjKSA+IDApIHsKLQkJCQlyZWd1bGF0b3JfZW5hYmxlKGhzbW1jW2ldLnZjYyk7Ci0JCQkJcmVndWxhdG9yX2Rpc2FibGUoaHNtbWNbaV0udmNjKTsKLQkJCX0KLQkJCWlmIChoc21tY1tpXS52Y2NfYXV4KSB7Ci0JCQkJaWYgKHJlZ3VsYXRvcl9pc19lbmFibGVkKHJlZykgPiAwKSB7Ci0JCQkJCXJlZ3VsYXRvcl9lbmFibGUocmVnKTsKLQkJCQkJcmVndWxhdG9yX2Rpc2FibGUocmVnKTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycjoKLQlncGlvX2ZyZWUobW1jLT5zbG90c1swXS5zd2l0Y2hfcGluKTsKLWRvbmU6Ci0JbW1jLT5zbG90c1swXS5jYXJkX2RldGVjdF9pcnEgPSAwOwotCW1tYy0+c2xvdHNbMF0uY2FyZF9kZXRlY3QgPSBOVUxMOwotCi0JZGV2X2VycihkZXYsICJlcnIgJWQgY29uZmlndXJpbmcgY2FyZCBkZXRlY3RcbiIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHZvaWQgdHdsX21tY19jbGVhbnVwKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCWludCBpOwotCi0JZ3Bpb19mcmVlKG1tYy0+c2xvdHNbMF0uc3dpdGNoX3Bpbik7Ci0JZm9yKGkgPSAwOyBpIDwgQVJSQVlfU0laRShoc21tYyk7IGkrKykgewotCQlyZWd1bGF0b3JfcHV0KGhzbW1jW2ldLnZjYyk7Ci0JCXJlZ3VsYXRvcl9wdXQoaHNtbWNbaV0udmNjX2F1eCk7Ci0JfQotfQotCi0jaWZkZWYgQ09ORklHX1BNCi0KLXN0YXRpYyBpbnQgdHdsX21tY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpCi17Ci0Jc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGRldi0+cGxhdGZvcm1fZGF0YTsKLQotCWRpc2FibGVfaXJxKG1tYy0+c2xvdHNbMF0uY2FyZF9kZXRlY3RfaXJxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0d2xfbW1jX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KQotewotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0KLQllbmFibGVfaXJxKG1tYy0+c2xvdHNbMF0uY2FyZF9kZXRlY3RfaXJxKTsKLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UKLSNkZWZpbmUgdHdsX21tY19zdXNwZW5kCU5VTEwKLSNkZWZpbmUgdHdsX21tY19yZXN1bWUJTlVMTAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSAmJiBkZWZpbmVkKENPTkZJR19QTSkKLQotc3RhdGljIGludCB0d2w0MDMwX21tY19nZXRfY29udGV4dF9sb3NzKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQkvKiBGSVhNRTogUE0gRFBTIG5vdCBpbXBsZW1lbnRlZCB5ZXQgKi8KLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UKLSNkZWZpbmUgdHdsNDAzMF9tbWNfZ2V0X2NvbnRleHRfbG9zcyBOVUxMCi0jZW5kaWYKLQotc3RhdGljIGludCB0d2xfbW1jMV9zZXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uLAotCQkJCWludCB2ZGQpCi17Ci0JdTMyIHJlZywgcHJvZ19pbzsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgdHdsX21tY19jb250cm9sbGVyICpjID0gJmhzbW1jWzBdOwotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0KLQkvKgotCSAqIEFzc3VtZSB3ZSBwb3dlciBib3RoIE9NQVAgVk1NQzEgKGZvciBDTUQsIENMSywgREFUMC4uMykgYW5kIHRoZQotCSAqIGNhcmQgd2l0aCBWY2MgcmVndWxhdG9yIChmcm9tIHR3bDQwMzAgb3Igd2hhdGV2ZXIpLiAgT01BUCBoYXMgYm90aAotCSAqIDEuOFYgYW5kIDMuMFYgbW9kZXMsIGNvbnRyb2xsZWQgYnkgdGhlIFBCSUFTIHJlZ2lzdGVyLgotCSAqCi0JICogSW4gOC1iaXQgbW9kZXMsIE9NQVAgVk1NQzFBIChmb3IgREFUNC4uNykgbmVlZHMgYSBzdXBwbHksIHdoaWNoCi0JICogaXMgbW9zdCBuYXR1cmFsbHkgVFdMIFZTSU07IHRob3NlIHBpbnMgYWxzbyB1c2UgUEJJQVMuCi0JICoKLQkgKiBGSVhNRSBoYW5kbGUgVk1NQzFBIGFzIG5lZWRlZCAuLi4KLQkgKi8KLQlpZiAocG93ZXJfb24pIHsKLQkJaWYgKGNwdV9pc19vbWFwMjQzMCgpKSB7Ci0JCQlyZWcgPSBvbWFwX2N0cmxfcmVhZGwoT01BUDI0M1hfQ09OVFJPTF9ERVZDT05GMSk7Ci0JCQlpZiAoKDEgPDwgdmRkKSA+PSBNTUNfVkREXzMwXzMxKQotCQkJCXJlZyB8PSBPTUFQMjQzWF9NTUMxX0FDVElWRV9PVkVSV1JJVEU7Ci0JCQllbHNlCi0JCQkJcmVnICY9IH5PTUFQMjQzWF9NTUMxX0FDVElWRV9PVkVSV1JJVEU7Ci0JCQlvbWFwX2N0cmxfd3JpdGVsKHJlZywgT01BUDI0M1hfQ09OVFJPTF9ERVZDT05GMSk7Ci0JCX0KLQotCQlpZiAobW1jLT5zbG90c1swXS5pbnRlcm5hbF9jbG9jaykgewotCQkJcmVnID0gb21hcF9jdHJsX3JlYWRsKE9NQVAyX0NPTlRST0xfREVWQ09ORjApOwotCQkJcmVnIHw9IE9NQVAyX01NQ1NESU8xQURQQ0xLSVNFTDsKLQkJCW9tYXBfY3RybF93cml0ZWwocmVnLCBPTUFQMl9DT05UUk9MX0RFVkNPTkYwKTsKLQkJfQotCi0JCXJlZyA9IG9tYXBfY3RybF9yZWFkbChjb250cm9sX3BiaWFzX29mZnNldCk7Ci0JCWlmIChjcHVfaXNfb21hcDM2MzAoKSkgewotCQkJLyogU2V0IE1NQyBJL08gdG8gNTJNaHogKi8KLQkJCXByb2dfaW8gPSBvbWFwX2N0cmxfcmVhZGwoT01BUDM0M1hfQ09OVFJPTF9QUk9HX0lPMSk7Ci0JCQlwcm9nX2lvIHw9IE9NQVAzNjMwX1BSR19TRE1NQzFfU1BFRURDVFJMOwotCQkJb21hcF9jdHJsX3dyaXRlbChwcm9nX2lvLCBPTUFQMzQzWF9DT05UUk9MX1BST0dfSU8xKTsKLQkJfSBlbHNlIHsKLQkJCXJlZyB8PSBPTUFQMl9QQklBU1NQRUVEQ1RSTDA7Ci0JCX0KLQkJcmVnICY9IH5PTUFQMl9QQklBU0xJVEVQV1JETlowOwotCQlvbWFwX2N0cmxfd3JpdGVsKHJlZywgY29udHJvbF9wYmlhc19vZmZzZXQpOwotCi0JCXJldCA9IG1tY19yZWd1bGF0b3Jfc2V0X29jcihjLT52Y2MsIHZkZCk7Ci0KLQkJLyogMTAwbXMgZGVsYXkgcmVxdWlyZWQgZm9yIFBCSUFTIGNvbmZpZ3VyYXRpb24gKi8KLQkJbXNsZWVwKDEwMCk7Ci0JCXJlZyA9IG9tYXBfY3RybF9yZWFkbChjb250cm9sX3BiaWFzX29mZnNldCk7Ci0JCXJlZyB8PSAoT01BUDJfUEJJQVNMSVRFUFdSRE5aMCB8IE9NQVAyX1BCSUFTU1BFRURDVFJMMCk7Ci0JCWlmICgoMSA8PCB2ZGQpIDw9IE1NQ19WRERfMTY1XzE5NSkKLQkJCXJlZyAmPSB+T01BUDJfUEJJQVNMSVRFVk1PREUwOwotCQllbHNlCi0JCQlyZWcgfD0gT01BUDJfUEJJQVNMSVRFVk1PREUwOwotCQlvbWFwX2N0cmxfd3JpdGVsKHJlZywgY29udHJvbF9wYmlhc19vZmZzZXQpOwotCX0gZWxzZSB7Ci0JCXJlZyA9IG9tYXBfY3RybF9yZWFkbChjb250cm9sX3BiaWFzX29mZnNldCk7Ci0JCXJlZyAmPSB+T01BUDJfUEJJQVNMSVRFUFdSRE5aMDsKLQkJb21hcF9jdHJsX3dyaXRlbChyZWcsIGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKLQotCQlyZXQgPSBtbWNfcmVndWxhdG9yX3NldF9vY3IoYy0+dmNjLCAwKTsKLQotCQkvKiAxMDBtcyBkZWxheSByZXF1aXJlZCBmb3IgUEJJQVMgY29uZmlndXJhdGlvbiAqLwotCQltc2xlZXAoMTAwKTsKLQkJcmVnID0gb21hcF9jdHJsX3JlYWRsKGNvbnRyb2xfcGJpYXNfb2Zmc2V0KTsKLQkJcmVnIHw9IChPTUFQMl9QQklBU1NQRUVEQ1RSTDAgfCBPTUFQMl9QQklBU0xJVEVQV1JETlowIHwKLQkJCU9NQVAyX1BCSUFTTElURVZNT0RFMCk7Ci0JCW9tYXBfY3RybF93cml0ZWwocmVnLCBjb250cm9sX3BiaWFzX29mZnNldCk7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCB0d2xfbW1jMjNfc2V0X3Bvd2VyKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbiwgaW50IHZkZCkKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgdHdsX21tY19jb250cm9sbGVyICpjID0gTlVMTDsKLQlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOwotCWludCBpOwotCi0JZm9yIChpID0gMTsgaSA8IEFSUkFZX1NJWkUoaHNtbWMpOyBpKyspIHsKLQkJaWYgKG1tYyA9PSBoc21tY1tpXS5tbWMpIHsKLQkJCWMgPSAmaHNtbWNbaV07Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChjID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogSWYgd2UgZG9uJ3Qgc2VlIGEgVmNjIHJlZ3VsYXRvciwgYXNzdW1lIGl0J3MgYSBmaXhlZAotCSAqIHZvbHRhZ2UgYWx3YXlzLW9uIHJlZ3VsYXRvci4KLQkgKi8KLQlpZiAoIWMtPnZjYykKLQkJcmV0dXJuIDA7Ci0KLQkvKgotCSAqIEFzc3VtZSBWY2MgcmVndWxhdG9yIGlzIHVzZWQgb25seSB0byBwb3dlciB0aGUgY2FyZCAuLi4gT01BUAotCSAqIFZERFMgaXMgdXNlZCB0byBwb3dlciB0aGUgcGlucywgb3B0aW9uYWxseSB3aXRoIGEgdHJhbnNjZWl2ZXIgdG8KLQkgKiBzdXBwb3J0IGNhcmRzIHVzaW5nIHZvbHRhZ2VzIG90aGVyIHRoYW4gVkREUyAoMS44ViBub21pbmFsKS4gIFdoZW4gYQotCSAqIHRyYW5zY2VpdmVyIGlzIHVzZWQsIERBVDMuLjcgYXJlIG11eGVkIGFzIHRyYW5zY2VpdmVyIGNvbnRyb2wgcGlucy4KLQkgKgotCSAqIEluIHNvbWUgY2FzZXMgdGhpcyByZWd1bGF0b3Igd29uJ3Qgc3VwcG9ydCBlbmFibGUvZGlzYWJsZTsKLQkgKiBlLmcuIGl0J3MgYSBmaXhlZCByYWlsIGZvciBhIFdMQU4gY2hpcC4KLQkgKgotCSAqIEluIG90aGVyIGNhc2VzIHZjY19hdXggc3dpdGNoZXMgaW50ZXJmYWNlIHBvd2VyLiAgRXhhbXBsZSwgZm9yCi0JICogZU1NQyBjYXJkcyBpdCByZXByZXNlbnRzIFZjY1EuICBTb21ldGltZXMgdHJhbnNjZWl2ZXJzIG9yIFNESU8KLQkgKiBjaGlwcy9jYXJkcyBuZWVkIGFuIGludGVyZmFjZSB2b2x0YWdlIHJhaWwgdG9vLgotCSAqLwotCWlmIChwb3dlcl9vbikgewotCQkvKiBvbmx5IE1NQzIgc3VwcG9ydHMgYSBDTEtJTiAqLwotCQlpZiAobW1jLT5zbG90c1swXS5pbnRlcm5hbF9jbG9jaykgewotCQkJdTMyIHJlZzsKLQotCQkJcmVnID0gb21hcF9jdHJsX3JlYWRsKGNvbnRyb2xfZGV2Y29uZjFfb2Zmc2V0KTsKLQkJCXJlZyB8PSBPTUFQMl9NTUNTRElPMkFEUENMS0lTRUw7Ci0JCQlvbWFwX2N0cmxfd3JpdGVsKHJlZywgY29udHJvbF9kZXZjb25mMV9vZmZzZXQpOwotCQl9Ci0JCXJldCA9IG1tY19yZWd1bGF0b3Jfc2V0X29jcihjLT52Y2MsIHZkZCk7Ci0JCS8qIGVuYWJsZSBpbnRlcmZhY2Ugdm9sdGFnZSByYWlsLCBpZiBuZWVkZWQgKi8KLQkJaWYgKHJldCA9PSAwICYmIGMtPnZjY19hdXgpIHsKLQkJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoYy0+dmNjX2F1eCk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlyZXQgPSBtbWNfcmVndWxhdG9yX3NldF9vY3IoYy0+dmNjLCAwKTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChjLT52Y2NfYXV4ICYmIChyZXQgPSByZWd1bGF0b3JfaXNfZW5hYmxlZChjLT52Y2NfYXV4KSkgPiAwKQotCQkJcmV0ID0gcmVndWxhdG9yX2Rpc2FibGUoYy0+dmNjX2F1eCk7Ci0JCWlmIChyZXQgPT0gMCkKLQkJCXJldCA9IG1tY19yZWd1bGF0b3Jfc2V0X29jcihjLT52Y2MsIDApOwotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgdHdsX21tYzFfc2V0X3NsZWVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBzbGVlcCwgaW50IHZkZCwKLQkJCSAgICAgIGludCBjYXJkc2xlZXApCi17Ci0Jc3RydWN0IHR3bF9tbWNfY29udHJvbGxlciAqYyA9ICZoc21tY1swXTsKLQlpbnQgbW9kZSA9IHNsZWVwID8gUkVHVUxBVE9SX01PREVfU1RBTkRCWSA6IFJFR1VMQVRPUl9NT0RFX05PUk1BTDsKLQotCXJldHVybiByZWd1bGF0b3Jfc2V0X21vZGUoYy0+dmNjLCBtb2RlKTsKLX0KLQotc3RhdGljIGludCB0d2xfbW1jMjNfc2V0X3NsZWVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBzbGVlcCwgaW50IHZkZCwKLQkJCSAgICAgICBpbnQgY2FyZHNsZWVwKQotewotCXN0cnVjdCB0d2xfbW1jX2NvbnRyb2xsZXIgKmMgPSBOVUxMOwotCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0JaW50IGksIGVyciwgbW9kZTsKLQotCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKGhzbW1jKTsgaSsrKSB7Ci0JCWlmIChtbWMgPT0gaHNtbWNbaV0ubW1jKSB7Ci0JCQljID0gJmhzbW1jW2ldOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoYyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qCi0JICogSWYgd2UgZG9uJ3Qgc2VlIGEgVmNjIHJlZ3VsYXRvciwgYXNzdW1lIGl0J3MgYSBmaXhlZAotCSAqIHZvbHRhZ2UgYWx3YXlzLW9uIHJlZ3VsYXRvci4KLQkgKi8KLQlpZiAoIWMtPnZjYykKLQkJcmV0dXJuIDA7Ci0KLQltb2RlID0gc2xlZXAgPyBSRUdVTEFUT1JfTU9ERV9TVEFOREJZIDogUkVHVUxBVE9SX01PREVfTk9STUFMOwotCi0JaWYgKCFjLT52Y2NfYXV4KQotCQlyZXR1cm4gcmVndWxhdG9yX3NldF9tb2RlKGMtPnZjYywgbW9kZSk7Ci0KLQlpZiAoY2FyZHNsZWVwKSB7Ci0JCS8qIFZDQyBjYW4gYmUgdHVybmVkIG9mZiBpZiBjYXJkIGlzIGFzbGVlcCAqLwotCQlzdHJ1Y3QgcmVndWxhdG9yICp2Y2NfYXV4ID0gYy0+dmNjX2F1eDsKLQotCQljLT52Y2NfYXV4ID0gTlVMTDsKLQkJaWYgKHNsZWVwKQotCQkJZXJyID0gdHdsX21tYzIzX3NldF9wb3dlcihkZXYsIHNsb3QsIDAsIDApOwotCQllbHNlCi0JCQllcnIgPSB0d2xfbW1jMjNfc2V0X3Bvd2VyKGRldiwgc2xvdCwgMSwgdmRkKTsKLQkJYy0+dmNjX2F1eCA9IHZjY19hdXg7Ci0JfSBlbHNlCi0JCWVyciA9IHJlZ3VsYXRvcl9zZXRfbW9kZShjLT52Y2MsIG1vZGUpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0JcmV0dXJuIHJlZ3VsYXRvcl9zZXRfbW9kZShjLT52Y2NfYXV4LCBtb2RlKTsKLX0KLQotc3RhdGljIHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICpoc21tY19kYXRhW09NQVAzNFhYX05SX01NQ10gX19pbml0ZGF0YTsKLQotdm9pZCBfX2luaXQgdHdsNDAzMF9tbWNfaW5pdChzdHJ1Y3QgdHdsNDAzMF9oc21tY19pbmZvICpjb250cm9sbGVycykKLXsKLQlzdHJ1Y3QgdHdsNDAzMF9oc21tY19pbmZvICpjOwotCWludCBucl9oc21tYyA9IEFSUkFZX1NJWkUoaHNtbWNfZGF0YSk7Ci0JaW50IGk7Ci0KLQlpZiAoY3B1X2lzX29tYXAyNDMwKCkpIHsKLQkJY29udHJvbF9wYmlhc19vZmZzZXQgPSBPTUFQMjQzWF9DT05UUk9MX1BCSUFTX0xJVEU7Ci0JCWNvbnRyb2xfZGV2Y29uZjFfb2Zmc2V0ID0gT01BUDI0M1hfQ09OVFJPTF9ERVZDT05GMTsKLQkJbnJfaHNtbWMgPSAyOwotCX0gZWxzZSB7Ci0JCWNvbnRyb2xfcGJpYXNfb2Zmc2V0ID0gT01BUDM0M1hfQ09OVFJPTF9QQklBU19MSVRFOwotCQljb250cm9sX2RldmNvbmYxX29mZnNldCA9IE9NQVAzNDNYX0NPTlRST0xfREVWQ09ORjE7Ci0JfQotCi0JZm9yIChjID0gY29udHJvbGxlcnM7IGMtPm1tYzsgYysrKSB7Ci0JCXN0cnVjdCB0d2xfbW1jX2NvbnRyb2xsZXIgKnR3bCA9IGhzbW1jICsgYy0+bW1jIC0gMTsKLQkJc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKm1tYyA9IGhzbW1jX2RhdGFbYy0+bW1jIC0gMV07Ci0KLQkJaWYgKCFjLT5tbWMgfHwgYy0+bW1jID4gbnJfaHNtbWMpIHsKLQkJCXByX2RlYnVnKCJNTUMlZDogbm8gc3VjaCBjb250cm9sbGVyXG4iLCBjLT5tbWMpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKG1tYykgewotCQkJcHJfZGVidWcoIk1NQyVkOiBhbHJlYWR5IGNvbmZpZ3VyZWRcbiIsIGMtPm1tYyk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCW1tYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbW1jKSB7Ci0JCQlwcl9lcnIoIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIG1tYyBkZXZpY2UhXG4iKTsKLQkJCWdvdG8gZG9uZTsKLQkJfQotCi0JCWlmIChjLT5uYW1lKQotCQkJc3RybmNweSh0d2wtPm5hbWUsIGMtPm5hbWUsIEhTTU1DX05BTUVfTEVOKTsKLQkJZWxzZQotCQkJc25wcmludGYodHdsLT5uYW1lLCBBUlJBWV9TSVpFKHR3bC0+bmFtZSksCi0JCQkJIm1tYyVpc2xvdCVpIiwgYy0+bW1jLCAxKTsKLQkJbW1jLT5zbG90c1swXS5uYW1lID0gdHdsLT5uYW1lOwotCQltbWMtPm5yX3Nsb3RzID0gMTsKLQkJbW1jLT5zbG90c1swXS53aXJlcyA9IGMtPndpcmVzOwotCQltbWMtPnNsb3RzWzBdLmludGVybmFsX2Nsb2NrID0gIWMtPmV4dF9jbG9jazsKLQkJbW1jLT5kbWFfbWFzayA9IDB4ZmZmZmZmZmY7Ci0JCW1tYy0+aW5pdCA9IHR3bF9tbWNfbGF0ZV9pbml0OwotCi0JCS8qIG5vdGU6IHR3bDQwMzAgY2FyZCBkZXRlY3QgR1BJT3MgY2FuIGRpc2FibGUgVk1NQ3ggLi4uICovCi0JCWlmIChncGlvX2lzX3ZhbGlkKGMtPmdwaW9fY2QpKSB7Ci0JCQltbWMtPmNsZWFudXAgPSB0d2xfbW1jX2NsZWFudXA7Ci0JCQltbWMtPnN1c3BlbmQgPSB0d2xfbW1jX3N1c3BlbmQ7Ci0JCQltbWMtPnJlc3VtZSA9IHR3bF9tbWNfcmVzdW1lOwotCi0JCQltbWMtPnNsb3RzWzBdLnN3aXRjaF9waW4gPSBjLT5ncGlvX2NkOwotCQkJbW1jLT5zbG90c1swXS5jYXJkX2RldGVjdF9pcnEgPSBncGlvX3RvX2lycShjLT5ncGlvX2NkKTsKLQkJCWlmIChjLT5jb3Zlcl9vbmx5KQotCQkJCW1tYy0+c2xvdHNbMF0uZ2V0X2NvdmVyX3N0YXRlID0gdHdsX21tY19nZXRfY292ZXJfc3RhdGU7Ci0JCQllbHNlCi0JCQkJbW1jLT5zbG90c1swXS5jYXJkX2RldGVjdCA9IHR3bF9tbWNfY2FyZF9kZXRlY3Q7Ci0JCX0gZWxzZQotCQkJbW1jLT5zbG90c1swXS5zd2l0Y2hfcGluID0gLUVJTlZBTDsKLQotCQltbWMtPmdldF9jb250ZXh0X2xvc3NfY291bnQgPQotCQkJCXR3bDQwMzBfbW1jX2dldF9jb250ZXh0X2xvc3M7Ci0KLQkJLyogd3JpdGUgcHJvdGVjdCBub3JtYWxseSB1c2VzIGFuIE9NQVAgZ3BpbyAqLwotCQlpZiAoZ3Bpb19pc192YWxpZChjLT5ncGlvX3dwKSkgewotCQkJZ3Bpb19yZXF1ZXN0KGMtPmdwaW9fd3AsICJtbWNfd3AiKTsKLQkJCWdwaW9fZGlyZWN0aW9uX2lucHV0KGMtPmdwaW9fd3ApOwotCi0JCQltbWMtPnNsb3RzWzBdLmdwaW9fd3AgPSBjLT5ncGlvX3dwOwotCQkJbW1jLT5zbG90c1swXS5nZXRfcm8gPSB0d2xfbW1jX2dldF9ybzsKLQkJfSBlbHNlCi0JCQltbWMtPnNsb3RzWzBdLmdwaW9fd3AgPSAtRUlOVkFMOwotCi0JCWlmIChjLT5ub25yZW1vdmFibGUpCi0JCQltbWMtPnNsb3RzWzBdLm5vbnJlbW92YWJsZSA9IDE7Ci0KLQkJaWYgKGMtPnBvd2VyX3NhdmluZykKLQkJCW1tYy0+c2xvdHNbMF0ucG93ZXJfc2F2aW5nID0gMTsKLQotCQkvKiBOT1RFOiAgTU1DIHNsb3RzIHNob3VsZCBoYXZlIGEgVmNjIHJlZ3VsYXRvciBzZXQgdXAuCi0JCSAqIFRoaXMgbWF5IGJlIGZyb20gYSBUV0w0MDMwLWZhbWlseSBjaGlwLCBhbm90aGVyCi0JCSAqIGNvbnRyb2xsYWJsZSByZWd1bGF0b3IsIG9yIGEgZml4ZWQgc3VwcGx5LgotCQkgKgotCQkgKiB0ZW1wb3JhcnkgSEFDSzogb2NyX21hc2sgaW5zdGVhZCBvZiBmaXhlZCBzdXBwbHkKLQkJICovCi0JCW1tYy0+c2xvdHNbMF0ub2NyX21hc2sgPSBjLT5vY3JfbWFzazsKLQotCQlzd2l0Y2ggKGMtPm1tYykgewotCQljYXNlIDE6Ci0JCQkvKiBvbi1jaGlwIGxldmVsIHNoaWZ0aW5nIHZpYSBQQklBUzAvUEJJQVMxICovCi0JCQltbWMtPnNsb3RzWzBdLnNldF9wb3dlciA9IHR3bF9tbWMxX3NldF9wb3dlcjsKLQkJCW1tYy0+c2xvdHNbMF0uc2V0X3NsZWVwID0gdHdsX21tYzFfc2V0X3NsZWVwOwotCi0JCQkvKiBPbWFwMzYzMCBIU01NQzEgc3VwcG9ydHMgb25seSA0LWJpdCAqLwotCQkJaWYgKGNwdV9pc19vbWFwMzYzMCgpICYmIGMtPndpcmVzID4gNCkgewotCQkJCWMtPndpcmVzID0gNDsKLQkJCQltbWMtPnNsb3RzWzBdLndpcmVzID0gYy0+d2lyZXM7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSAyOgotCQkJaWYgKGMtPmV4dF9jbG9jaykKLQkJCQljLT50cmFuc2NlaXZlciA9IDE7Ci0JCQlpZiAoYy0+dHJhbnNjZWl2ZXIgJiYgYy0+d2lyZXMgPiA0KQotCQkJCWMtPndpcmVzID0gNDsKLQkJCS8qIEZBTExUSFJPVUdIICovCi0JCWNhc2UgMzoKLQkJCS8qIG9mZi1jaGlwIGxldmVsIHNoaWZ0aW5nLCBvciBub25lICovCi0JCQltbWMtPnNsb3RzWzBdLnNldF9wb3dlciA9IHR3bF9tbWMyM19zZXRfcG93ZXI7Ci0JCQltbWMtPnNsb3RzWzBdLnNldF9zbGVlcCA9IHR3bF9tbWMyM19zZXRfc2xlZXA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByX2VycigiTU1DJWQgY29uZmlndXJhdGlvbiBub3Qgc3VwcG9ydGVkIVxuIiwgYy0+bW1jKTsKLQkJCWtmcmVlKG1tYyk7Ci0JCQljb250aW51ZTsKLQkJfQotCQloc21tY19kYXRhW2MtPm1tYyAtIDFdID0gbW1jOwotCX0KLQotCW9tYXAyX2luaXRfbW1jKGhzbW1jX2RhdGEsIE9NQVAzNFhYX05SX01NQyk7Ci0KLQkvKiBwYXNzIHRoZSBkZXZpY2Ugbm9kZXMgYmFjayB0byBib2FyZCBzZXR1cCBjb2RlICovCi0JZm9yIChjID0gY29udHJvbGxlcnM7IGMtPm1tYzsgYysrKSB7Ci0JCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBoc21tY19kYXRhW2MtPm1tYyAtIDFdOwotCi0JCWlmICghYy0+bW1jIHx8IGMtPm1tYyA+IG5yX2hzbW1jKQotCQkJY29udGludWU7Ci0JCWMtPmRldiA9IG1tYy0+ZGV2OwotCX0KLQotZG9uZToKLQlmb3IgKGkgPSAwOyBpIDwgbnJfaHNtbWM7IGkrKykKLQkJa2ZyZWUoaHNtbWNfZGF0YVtpXSk7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tbWMtdHdsNDAzMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDdlNjg1Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbW1jLXR3bDQwMzAuaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qCi0gKiBNTUMgZGVmaW5pdGlvbnMgZm9yIE9NQVAyCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi1zdHJ1Y3QgdHdsNDAzMF9oc21tY19pbmZvIHsKLQl1OAltbWM7CQkvKiBjb250cm9sbGVyIDEvMi8zICovCi0JdTgJd2lyZXM7CQkvKiAxLzQvOCB3aXJlcyAqLwotCWJvb2wJdHJhbnNjZWl2ZXI7CS8qIE1NQy0yIG9wdGlvbiAqLwotCWJvb2wJZXh0X2Nsb2NrOwkvKiB1c2UgZXh0ZXJuYWwgcGluIGZvciBpbnB1dCBjbG9jayAqLwotCWJvb2wJY292ZXJfb25seTsJLyogTm8gY2FyZCBkZXRlY3QgLSBqdXN0IGNvdmVyIHN3aXRjaCAqLwotCWJvb2wJbm9ucmVtb3ZhYmxlOwkvKiBOb25yZW1vdmFibGUgZS5nLiBlTU1DICovCi0JYm9vbAlwb3dlcl9zYXZpbmc7CS8qIFRyeSB0byBzbGVlcCBvciBwb3dlciBvZmYgd2hlbiBwb3NzaWJsZSAqLwotCWludAlncGlvX2NkOwkvKiBvciAtRUlOVkFMICovCi0JaW50CWdwaW9fd3A7CS8qIG9yIC1FSU5WQUwgKi8KLQljaGFyCSpuYW1lOwkJLyogb3IgTlVMTCBmb3IgZGVmYXVsdCAqLwotCXN0cnVjdCBkZXZpY2UgKmRldjsJLyogcmV0dXJuZWQ6IHBvaW50ZXIgdG8gbW1jIGFkYXB0ZXIgKi8KLQlpbnQJb2NyX21hc2s7CS8qIHRlbXBvcmFyeSBIQUNLICovCi19OwotCi0jaWYgZGVmaW5lZChDT05GSUdfUkVHVUxBVE9SKSAmJiBcCi0JKGRlZmluZWQoQ09ORklHX01NQ19PTUFQKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9NT0RVTEUpIHx8IFwKLQkgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfSFMpIHx8IGRlZmluZWQoQ09ORklHX01NQ19PTUFQX0hTX01PRFVMRSkpCi0KLXZvaWQgdHdsNDAzMF9tbWNfaW5pdChzdHJ1Y3QgdHdsNDAzMF9oc21tY19pbmZvICopOwotCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdHdsNDAzMF9tbWNfaW5pdChzdHJ1Y3QgdHdsNDAzMF9oc21tY19pbmZvICppbmZvKQotewotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCmluZGV4IDVmZWY3M2YuLmI0Y2E4NGUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwpAQCAtNzUsNyArNzUsNyBAQAogCX0KIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpICYmIGRlZmluZWQoQ09ORklHX09NQVBfTVVYKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpICYmIGRlZmluZWQoQ09ORklHX09NQVBfTVVYKQogCiBzdGF0aWMgc3RydWN0IG9tYXBfbXV4X2NmZyBhcmNoX211eF9jZmc7CiAKQEAgLTM2OSw3ICszNjksNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDM0WFgKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwogc3RhdGljIExJU1RfSEVBRChtdXhtb2Rlcyk7CiBzdGF0aWMgREVGSU5FX01VVEVYKG11eG1vZGVfbXV0ZXgpOwogCkBAIC05ODMsNiArOTgzLDM4IEBACiAJfQogfQogCisjaWZkZWYgQ09ORklHX09NQVBfTVVYCisKK3N0YXRpYyB2b2lkIG9tYXBfbXV4X2luaXRfcGFja2FnZShzdHJ1Y3Qgb21hcF9tdXggKnN1cGVyc2V0LAorCQkJCSAgc3RydWN0IG9tYXBfbXV4ICpwYWNrYWdlX3N1YnNldCwKKwkJCQkgIHN0cnVjdCBvbWFwX2JhbGwgKnBhY2thZ2VfYmFsbHMpCit7CisJaWYgKHBhY2thZ2Vfc3Vic2V0KQorCQlvbWFwX211eF9wYWNrYWdlX2ZpeHVwKHBhY2thZ2Vfc3Vic2V0LCBzdXBlcnNldCk7CisJaWYgKHBhY2thZ2VfYmFsbHMpCisJCW9tYXBfbXV4X3BhY2thZ2VfaW5pdF9iYWxscyhwYWNrYWdlX2JhbGxzLCBzdXBlcnNldCk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfbXV4X2luaXRfc2lnbmFscyhzdHJ1Y3Qgb21hcF9ib2FyZF9tdXggKmJvYXJkX211eCkKK3sKKwlvbWFwX211eF9zZXRfY21kbGluZV9zaWduYWxzKCk7CisJb21hcF9tdXhfd3JpdGVfYXJyYXkoYm9hcmRfbXV4KTsKK30KKworI2Vsc2UKKworc3RhdGljIHZvaWQgb21hcF9tdXhfaW5pdF9wYWNrYWdlKHN0cnVjdCBvbWFwX211eCAqc3VwZXJzZXQsCisJCQkJICBzdHJ1Y3Qgb21hcF9tdXggKnBhY2thZ2Vfc3Vic2V0LAorCQkJCSAgc3RydWN0IG9tYXBfYmFsbCAqcGFja2FnZV9iYWxscykKK3sKK30KKworc3RhdGljIHZvaWQgb21hcF9tdXhfaW5pdF9zaWduYWxzKHN0cnVjdCBvbWFwX2JvYXJkX211eCAqYm9hcmRfbXV4KQoreworfQorCisjZW5kaWYKKwogaW50IF9faW5pdCBvbWFwX211eF9pbml0KHUzMiBtdXhfcGJhc2UsIHUzMiBtdXhfc2l6ZSwKIAkJCQlzdHJ1Y3Qgb21hcF9tdXggKnN1cGVyc2V0LAogCQkJCXN0cnVjdCBvbWFwX211eCAqcGFja2FnZV9zdWJzZXQsCkBAIC05OTksMjIgKzEwMzEsMTIgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0jaWZkZWYgQ09ORklHX09NQVBfTVVYCi0JaWYgKHBhY2thZ2Vfc3Vic2V0KQotCQlvbWFwX211eF9wYWNrYWdlX2ZpeHVwKHBhY2thZ2Vfc3Vic2V0LCBzdXBlcnNldCk7Ci0JaWYgKHBhY2thZ2VfYmFsbHMpCi0JCW9tYXBfbXV4X3BhY2thZ2VfaW5pdF9iYWxscyhwYWNrYWdlX2JhbGxzLCBzdXBlcnNldCk7Ci0jZW5kaWYKLQorCW9tYXBfbXV4X2luaXRfcGFja2FnZShzdXBlcnNldCwgcGFja2FnZV9zdWJzZXQsIHBhY2thZ2VfYmFsbHMpOwogCW9tYXBfbXV4X2luaXRfbGlzdChzdXBlcnNldCk7Ci0KLSNpZmRlZiBDT05GSUdfT01BUF9NVVgKLQlvbWFwX211eF9zZXRfY21kbGluZV9zaWduYWxzKCk7Ci0Jb21hcF9tdXhfd3JpdGVfYXJyYXkoYm9hcmRfbXV4KTsKLSNlbmRpZgorCW9tYXBfbXV4X2luaXRfc2lnbmFscyhib2FyZF9tdXgpOwogCiAJcmV0dXJuIDA7CiB9CiAKLSNlbmRpZgkvKiBDT05GSUdfQVJDSF9PTUFQMzRYWCAqLworI2VuZGlmCS8qIENPTkZJR19BUkNIX09NQVAzICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5oCmluZGV4IGY4YzJlN2EuLjQ4MGFiYzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguaApAQCAtMTAyLDcgKzEwMiw3IEBACiAJdTE2CXZhbHVlOwogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTVVYKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmIGRlZmluZWQoQ09ORklHX09NQVBfTVVYKSAmJiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogCiAvKioKICAqIG9tYXBfbXV4X2luaXRfZ3BpbyAtIGluaXRpYWxpemUgYSBzaWduYWwgYmFzZWQgb24gdGhlIEdQSU8gbnVtYmVyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2QuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jCmluZGV4IDQ3OGFlNTguLmM2NjQ5NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZC5jCkBAIC04NCwxNyArODQsMTYgQEAKICAqLwogc3RhdGljIGludCBfdXBkYXRlX3N5c2NfY2FjaGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQogewotCWlmICghb2gtPnN5c2NvbmZpZykgewotCQlXQVJOKCFvaC0+c3lzY29uZmlnLCAib21hcF9od21vZDogJXM6IGNhbm5vdCByZWFkICIKLQkJICAgICAiT0NQX1NZU0NPTkZJRzogbm90IGRlZmluZWQgb24gaHdtb2RcbiIsIG9oLT5uYW1lKTsKKwlpZiAoIW9oLT5jbGFzcy0+c3lzYykgeworCQlXQVJOKDEsICJvbWFwX2h3bW9kOiAlczogY2Fubm90IHJlYWQgT0NQX1NZU0NPTkZJRzogbm90IGRlZmluZWQgb24gaHdtb2QncyBjbGFzc1xuIiwgb2gtPm5hbWUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBYWFggZW5zdXJlIG1vZHVsZSBpbnRlcmZhY2UgY2xvY2sgaXMgdXAgKi8KIAotCW9oLT5fc3lzY19jYWNoZSA9IG9tYXBfaHdtb2RfcmVhZGwob2gsIG9oLT5zeXNjb25maWctPnN5c2Nfb2Zmcyk7CisJb2gtPl9zeXNjX2NhY2hlID0gb21hcF9od21vZF9yZWFkbChvaCwgb2gtPmNsYXNzLT5zeXNjLT5zeXNjX29mZnMpOwogCi0JaWYgKCEob2gtPnN5c2NvbmZpZy0+c3lzY19mbGFncyAmIFNZU0NfTk9fQ0FDSEUpKQorCWlmICghKG9oLT5jbGFzcy0+c3lzYy0+c3lzY19mbGFncyAmIFNZU0NfTk9fQ0FDSEUpKQogCQlvaC0+X2ludF9mbGFncyB8PSBfSFdNT0RfU1lTQ09ORklHX0xPQURFRDsKIAogCXJldHVybiAwOwpAQCAtMTA1LDE0ICsxMDQsMTMgQEAKICAqIEB2OiBPQ1BfU1lTQ09ORklHIHZhbHVlIHRvIHdyaXRlCiAgKiBAb2g6IHN0cnVjdCBvbWFwX2h3bW9kICoKICAqCi0gKiBXcml0ZSBAdiBpbnRvIHRoZSBtb2R1bGUgT0NQX1NZU0NPTkZJRyByZWdpc3RlciwgaWYgaXQgaGFzIG9uZS4gIE5vCi0gKiByZXR1cm4gdmFsdWUuCisgKiBXcml0ZSBAdiBpbnRvIHRoZSBtb2R1bGUgY2xhc3MnIE9DUF9TWVNDT05GSUcgcmVnaXN0ZXIsIGlmIGl0IGhhcworICogb25lLiAgTm8gcmV0dXJuIHZhbHVlLgogICovCiBzdGF0aWMgdm9pZCBfd3JpdGVfc3lzY29uZmlnKHUzMiB2LCBzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCiB7Ci0JaWYgKCFvaC0+c3lzY29uZmlnKSB7Ci0JCVdBUk4oIW9oLT5zeXNjb25maWcsICJvbWFwX2h3bW9kOiAlczogY2Fubm90IHdyaXRlICIKLQkJICAgICAiT0NQX1NZU0NPTkZJRzogbm90IGRlZmluZWQgb24gaHdtb2RcbiIsIG9oLT5uYW1lKTsKKwlpZiAoIW9oLT5jbGFzcy0+c3lzYykgeworCQlXQVJOKDEsICJvbWFwX2h3bW9kOiAlczogY2Fubm90IHdyaXRlIE9DUF9TWVNDT05GSUc6IG5vdCBkZWZpbmVkIG9uIGh3bW9kJ3MgY2xhc3NcbiIsIG9oLT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTIwLDcgKzExOCw3IEBACiAKIAlpZiAob2gtPl9zeXNjX2NhY2hlICE9IHYpIHsKIAkJb2gtPl9zeXNjX2NhY2hlID0gdjsKLQkJb21hcF9od21vZF93cml0ZWwodiwgb2gsIG9oLT5zeXNjb25maWctPnN5c2Nfb2Zmcyk7CisJCW9tYXBfaHdtb2Rfd3JpdGVsKHYsIG9oLCBvaC0+Y2xhc3MtPnN5c2MtPnN5c2Nfb2Zmcyk7CiAJfQogfQogCkBAIC0xMzcsMTIgKzEzNSwyMyBAQAogc3RhdGljIGludCBfc2V0X21hc3Rlcl9zdGFuZGJ5bW9kZShzdHJ1Y3Qgb21hcF9od21vZCAqb2gsIHU4IHN0YW5kYnltb2RlLAogCQkJCSAgIHUzMiAqdikKIHsKLQlpZiAoIW9oLT5zeXNjb25maWcgfHwKLQkgICAgIShvaC0+c3lzY29uZmlnLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfTUlETEVNT0RFKSkKKwl1MzIgbXN0YW5kYnlfbWFzazsKKwl1OCBtc3RhbmRieV9zaGlmdDsKKworCWlmICghb2gtPmNsYXNzLT5zeXNjIHx8CisJICAgICEob2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfTUlETEVNT0RFKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkqdiAmPSB+U1lTQ19NSURMRU1PREVfTUFTSzsKLQkqdiB8PSBfX2ZmcyhzdGFuZGJ5bW9kZSkgPDwgU1lTQ19NSURMRU1PREVfU0hJRlQ7CisJaWYgKCFvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmllbGRzKSB7CisJCVdBUk4oMSwgIm9tYXBfaHdtb2Q6ICVzOiBvZmZzZXQgc3RydWN0IGZvciBzeXNjb25maWcgbm90IHByb3ZpZGVkIGluIGNsYXNzXG4iLCBvaC0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1zdGFuZGJ5X3NoaWZ0ID0gb2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZpZWxkcy0+bWlkbGVfc2hpZnQ7CisJbXN0YW5kYnlfbWFzayA9ICgweDMgPDwgbXN0YW5kYnlfc2hpZnQpOworCisJKnYgJj0gfm1zdGFuZGJ5X21hc2s7CisJKnYgfD0gX19mZnMoc3RhbmRieW1vZGUpIDw8IG1zdGFuZGJ5X3NoaWZ0OwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTksMTIgKzE2OCwyMyBAQAogICovCiBzdGF0aWMgaW50IF9zZXRfc2xhdmVfaWRsZW1vZGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB1OCBpZGxlbW9kZSwgdTMyICp2KQogewotCWlmICghb2gtPnN5c2NvbmZpZyB8fAotCSAgICAhKG9oLT5zeXNjb25maWctPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19TSURMRU1PREUpKQorCXUzMiBzaWRsZV9tYXNrOworCXU4IHNpZGxlX3NoaWZ0OworCisJaWYgKCFvaC0+Y2xhc3MtPnN5c2MgfHwKKwkgICAgIShvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19TSURMRU1PREUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCSp2ICY9IH5TWVNDX1NJRExFTU9ERV9NQVNLOwotCSp2IHw9IF9fZmZzKGlkbGVtb2RlKSA8PCBTWVNDX1NJRExFTU9ERV9TSElGVDsKKwlpZiAoIW9oLT5jbGFzcy0+c3lzYy0+c3lzY19maWVsZHMpIHsKKwkJV0FSTigxLCAib21hcF9od21vZDogJXM6IG9mZnNldCBzdHJ1Y3QgZm9yIHN5c2NvbmZpZyBub3QgcHJvdmlkZWQgaW4gY2xhc3NcbiIsIG9oLT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc2lkbGVfc2hpZnQgPSBvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmllbGRzLT5zaWRsZV9zaGlmdDsKKwlzaWRsZV9tYXNrID0gKDB4MyA8PCBzaWRsZV9zaGlmdCk7CisKKwkqdiAmPSB+c2lkbGVfbWFzazsKKwkqdiB8PSBfX2ZmcyhpZGxlbW9kZSkgPDwgc2lkbGVfc2hpZnQ7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE4MiwxMiArMjAyLDIzIEBACiAgKi8KIHN0YXRpYyBpbnQgX3NldF9jbG9ja2FjdGl2aXR5KHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdTggY2xvY2thY3QsIHUzMiAqdikKIHsKLQlpZiAoIW9oLT5zeXNjb25maWcgfHwKLQkgICAgIShvaC0+c3lzY29uZmlnLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfQ0xPQ0tBQ1RJVklUWSkpCisJdTMyIGNsa2FjdF9tYXNrOworCXU4ICBjbGthY3Rfc2hpZnQ7CisKKwlpZiAoIW9oLT5jbGFzcy0+c3lzYyB8fAorCSAgICAhKG9oLT5jbGFzcy0+c3lzYy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX0NMT0NLQUNUSVZJVFkpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCSp2ICY9IH5TWVNDX0NMT0NLQUNUSVZJVFlfTUFTSzsKLQkqdiB8PSBjbG9ja2FjdCA8PCBTWVNDX0NMT0NLQUNUSVZJVFlfU0hJRlQ7CisJaWYgKCFvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmllbGRzKSB7CisJCVdBUk4oMSwgIm9tYXBfaHdtb2Q6ICVzOiBvZmZzZXQgc3RydWN0IGZvciBzeXNjb25maWcgbm90IHByb3ZpZGVkIGluIGNsYXNzXG4iLCBvaC0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNsa2FjdF9zaGlmdCA9IG9oLT5jbGFzcy0+c3lzYy0+c3lzY19maWVsZHMtPmNsa2FjdF9zaGlmdDsKKwljbGthY3RfbWFzayA9ICgweDMgPDwgY2xrYWN0X3NoaWZ0KTsKKworCSp2ICY9IH5jbGthY3RfbWFzazsKKwkqdiB8PSBjbG9ja2FjdCA8PCBjbGthY3Rfc2hpZnQ7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIwMiwxMSArMjMzLDIwIEBACiAgKi8KIHN0YXRpYyBpbnQgX3NldF9zb2Z0cmVzZXQoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB1MzIgKnYpCiB7Ci0JaWYgKCFvaC0+c3lzY29uZmlnIHx8Ci0JICAgICEob2gtPnN5c2NvbmZpZy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX1NPRlRSRVNFVCkpCisJdTMyIHNvZnRyc3RfbWFzazsKKworCWlmICghb2gtPmNsYXNzLT5zeXNjIHx8CisJICAgICEob2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfU09GVFJFU0VUKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkqdiB8PSBTWVNDX1NPRlRSRVNFVF9NQVNLOworCWlmICghb2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZpZWxkcykgeworCQlXQVJOKDEsICJvbWFwX2h3bW9kOiAlczogb2Zmc2V0IHN0cnVjdCBmb3Igc3lzY29uZmlnIG5vdCBwcm92aWRlZCBpbiBjbGFzc1xuIiwgb2gtPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzb2Z0cnN0X21hc2sgPSAoMHgxIDw8IG9oLT5jbGFzcy0+c3lzYy0+c3lzY19maWVsZHMtPnNyc3Rfc2hpZnQpOworCisJKnYgfD0gc29mdHJzdF9tYXNrOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMjcsMTIgKzI2NywyMyBAQAogc3RhdGljIGludCBfc2V0X21vZHVsZV9hdXRvaWRsZShzdHJ1Y3Qgb21hcF9od21vZCAqb2gsIHU4IGF1dG9pZGxlLAogCQkJCXUzMiAqdikKIHsKLQlpZiAoIW9oLT5zeXNjb25maWcgfHwKLQkgICAgIShvaC0+c3lzY29uZmlnLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfQVVUT0lETEUpKQorCXUzMiBhdXRvaWRsZV9tYXNrOworCXU4IGF1dG9pZGxlX3NoaWZ0OworCisJaWYgKCFvaC0+Y2xhc3MtPnN5c2MgfHwKKwkgICAgIShvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19BVVRPSURMRSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JKnYgJj0gflNZU0NfQVVUT0lETEVfTUFTSzsKLQkqdiB8PSBhdXRvaWRsZSA8PCBTWVNDX0FVVE9JRExFX1NISUZUOworCWlmICghb2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZpZWxkcykgeworCQlXQVJOKDEsICJvbWFwX2h3bW9kOiAlczogb2Zmc2V0IHN0cnVjdCBmb3Igc3lzY29uZmlnIG5vdCBwcm92aWRlZCBpbiBjbGFzc1xuIiwgb2gtPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlhdXRvaWRsZV9zaGlmdCA9IG9oLT5jbGFzcy0+c3lzYy0+c3lzY19maWVsZHMtPmF1dG9pZGxlX3NoaWZ0OworCWF1dG9pZGxlX21hc2sgPSAoMHgzIDw8IGF1dG9pZGxlX3NoaWZ0KTsKKworCSp2ICY9IH5hdXRvaWRsZV9tYXNrOworCSp2IHw9IGF1dG9pZGxlIDw8IGF1dG9pZGxlX3NoaWZ0OwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNDYsMTQgKzI5NywyMSBAQAogICovCiBzdGF0aWMgaW50IF9lbmFibGVfd2FrZXVwKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKIHsKLQl1MzIgdjsKKwl1MzIgdiwgd2FrZXVwX21hc2s7CiAKLQlpZiAoIW9oLT5zeXNjb25maWcgfHwKLQkgICAgIShvaC0+c3lzY29uZmlnLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfRU5BV0FLRVVQKSkKKwlpZiAoIW9oLT5jbGFzcy0+c3lzYyB8fAorCSAgICAhKG9oLT5jbGFzcy0+c3lzYy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX0VOQVdBS0VVUCkpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKCFvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmllbGRzKSB7CisJCVdBUk4oMSwgIm9tYXBfaHdtb2Q6ICVzOiBvZmZzZXQgc3RydWN0IGZvciBzeXNjb25maWcgbm90IHByb3ZpZGVkIGluIGNsYXNzXG4iLCBvaC0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdha2V1cF9tYXNrID0gKDB4MSA8PCBvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmllbGRzLT5lbndrdXBfc2hpZnQpOworCiAJdiA9IG9oLT5fc3lzY19jYWNoZTsKLQl2IHw9IFNZU0NfRU5BV0FLRVVQX01BU0s7CisJdiB8PSB3YWtldXBfbWFzazsKIAlfd3JpdGVfc3lzY29uZmlnKHYsIG9oKTsKIAogCS8qIFhYWCB0ZXN0IHB3cmRtX2dldF93a2VuIGZvciB0aGlzIGh3bW9kJ3Mgc3Vic3lzdGVtICovCkBAIC0yNzIsMTQgKzMzMCwyMSBAQAogICovCiBzdGF0aWMgaW50IF9kaXNhYmxlX3dha2V1cChzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCiB7Ci0JdTMyIHY7CisJdTMyIHYsIHdha2V1cF9tYXNrOwogCi0JaWYgKCFvaC0+c3lzY29uZmlnIHx8Ci0JICAgICEob2gtPnN5c2NvbmZpZy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX0VOQVdBS0VVUCkpCisJaWYgKCFvaC0+Y2xhc3MtPnN5c2MgfHwKKwkgICAgIShvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19FTkFXQUtFVVApKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICghb2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZpZWxkcykgeworCQlXQVJOKDEsICJvbWFwX2h3bW9kOiAlczogb2Zmc2V0IHN0cnVjdCBmb3Igc3lzY29uZmlnIG5vdCBwcm92aWRlZCBpbiBjbGFzc1xuIiwgb2gtPm5hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl3YWtldXBfbWFzayA9ICgweDEgPDwgb2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZpZWxkcy0+ZW53a3VwX3NoaWZ0KTsKKwogCXYgPSBvaC0+X3N5c2NfY2FjaGU7Ci0JdiAmPSB+U1lTQ19FTkFXQUtFVVBfTUFTSzsKKwl2ICY9IH53YWtldXBfbWFzazsKIAlfd3JpdGVfc3lzY29uZmlnKHYsIG9oKTsKIAogCS8qIFhYWCB0ZXN0IHB3cmRtX2dldF93a2VuIGZvciB0aGlzIGh3bW9kJ3Mgc3Vic3lzdGVtICovCkBAIC0yOTksMTUgKzM2NCwxNCBAQAogICogYmUgYWNjZXNzZWQgYnkgdGhlIElWQSwgdGhlcmUgc2hvdWxkIGJlIGEgc2xlZXBkZXAgYmV0d2VlbiB0aGUgSVZBCiAgKiBpbml0aWF0b3IgYW5kIHRoZSBtb2R1bGUpLiAgT25seSBhcHBsaWVzIHRvIG1vZHVsZXMgaW4gc21hcnQtaWRsZQogICogbW9kZS4gIFJldHVybnMgLUVJTlZBTCB1cG9uIGVycm9yIG9yIHBhc3NlcyBhbG9uZwotICogcHdyZG1fYWRkX3NsZWVwZGVwKCkgdmFsdWUgdXBvbiBzdWNjZXNzLgorICogY2xrZG1fYWRkX3NsZWVwZGVwKCkgdmFsdWUgdXBvbiBzdWNjZXNzLgogICovCiBzdGF0aWMgaW50IF9hZGRfaW5pdGlhdG9yX2RlcChzdHJ1Y3Qgb21hcF9od21vZCAqb2gsIHN0cnVjdCBvbWFwX2h3bW9kICppbml0X29oKQogewogCWlmICghb2gtPl9jbGspCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHB3cmRtX2FkZF9zbGVlcGRlcChvaC0+X2Nsay0+Y2xrZG0tPnB3cmRtLnB0ciwKLQkJCQkgIGluaXRfb2gtPl9jbGstPmNsa2RtLT5wd3JkbS5wdHIpOworCXJldHVybiBjbGtkbV9hZGRfc2xlZXBkZXAob2gtPl9jbGstPmNsa2RtLCBpbml0X29oLT5fY2xrLT5jbGtkbSk7CiB9CiAKIC8qKgpAQCAtMzIwLDE1ICszODQsMTQgQEAKICAqIGJlIGFjY2Vzc2VkIGJ5IHRoZSBJVkEsIHRoZXJlIHNob3VsZCBiZSBubyBzbGVlcGRlcCBiZXR3ZWVuIHRoZSBJVkEKICAqIGluaXRpYXRvciBhbmQgdGhlIG1vZHVsZSkuICBPbmx5IGFwcGxpZXMgdG8gbW9kdWxlcyBpbiBzbWFydC1pZGxlCiAgKiBtb2RlLiAgUmV0dXJucyAtRUlOVkFMIHVwb24gZXJyb3Igb3IgcGFzc2VzIGFsb25nCi0gKiBwd3JkbV9hZGRfc2xlZXBkZXAoKSB2YWx1ZSB1cG9uIHN1Y2Nlc3MuCisgKiBjbGtkbV9kZWxfc2xlZXBkZXAoKSB2YWx1ZSB1cG9uIHN1Y2Nlc3MuCiAgKi8KIHN0YXRpYyBpbnQgX2RlbF9pbml0aWF0b3JfZGVwKHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgc3RydWN0IG9tYXBfaHdtb2QgKmluaXRfb2gpCiB7CiAJaWYgKCFvaC0+X2NsaykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gcHdyZG1fZGVsX3NsZWVwZGVwKG9oLT5fY2xrLT5jbGtkbS0+cHdyZG0ucHRyLAotCQkJCSAgaW5pdF9vaC0+X2Nsay0+Y2xrZG0tPnB3cmRtLnB0cik7CisJcmV0dXJuIGNsa2RtX2RlbF9zbGVlcGRlcChvaC0+X2Nsay0+Y2xrZG0sIGluaXRfb2gtPl9jbGstPmNsa2RtKTsKIH0KIAogLyoqCkBAIC0zNDQsMTggKzQwNywxOCBAQAogCXN0cnVjdCBjbGsgKmM7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAoIW9oLT5jbGtkZXZfY29uX2lkKQorCWlmICghb2gtPm1haW5fY2xrKQogCQlyZXR1cm4gMDsKIAotCWMgPSBjbGtfZ2V0X3N5cyhvaC0+Y2xrZGV2X2Rldl9pZCwgb2gtPmNsa2Rldl9jb25faWQpOwotCVdBUk4oSVNfRVJSKGMpLCAib21hcF9od21vZDogJXM6IGNhbm5vdCBjbGtfZ2V0IG1haW5fY2xrICVzLiVzXG4iLAotCSAgICAgb2gtPm5hbWUsIG9oLT5jbGtkZXZfZGV2X2lkLCBvaC0+Y2xrZGV2X2Nvbl9pZCk7CisJYyA9IG9tYXBfY2xrX2dldF9ieV9uYW1lKG9oLT5tYWluX2Nsayk7CisJV0FSTihJU19FUlIoYyksICJvbWFwX2h3bW9kOiAlczogY2Fubm90IGNsa19nZXQgbWFpbl9jbGsgJXNcbiIsCisJICAgICBvaC0+bmFtZSwgb2gtPm1haW5fY2xrKTsKIAlpZiAoSVNfRVJSKGMpKQogCQlyZXQgPSAtRUlOVkFMOwogCW9oLT5fY2xrID0gYzsKIAogCVdBUk4oIWMtPmNsa2RtLCAib21hcF9od21vZDogJXM6IG1pc3NpbmcgY2xvY2tkb21haW4gZm9yICVzLlxuIiwKLQkgICAgIG9oLT5jbGtkZXZfY29uX2lkLCBjLT5uYW1lKTsKKwkgICAgIG9oLT5tYWluX2NsaywgYy0+bmFtZSk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzc4LDEzICs0NDEsMTIgQEAKIAkJcmV0dXJuIDA7CiAKIAlmb3IgKGkgPSAwLCBvcyA9ICpvaC0+c2xhdmVzOyBpIDwgb2gtPnNsYXZlc19jbnQ7IGkrKywgb3MrKykgewotCQlpZiAoIW9zLT5jbGtkZXZfY29uX2lkKQorCQlpZiAoIW9zLT5jbGspCiAJCQljb250aW51ZTsKIAotCQljID0gY2xrX2dldF9zeXMob3MtPmNsa2Rldl9kZXZfaWQsIG9zLT5jbGtkZXZfY29uX2lkKTsKKwkJYyA9IG9tYXBfY2xrX2dldF9ieV9uYW1lKG9zLT5jbGspOwogCQlXQVJOKElTX0VSUihjKSwgIm9tYXBfaHdtb2Q6ICVzOiBjYW5ub3QgY2xrX2dldCAiCi0JCSAgICAgImludGVyZmFjZV9jbGsgJXMuJXNcbiIsIG9oLT5uYW1lLAotCQkgICAgIG9zLT5jbGtkZXZfZGV2X2lkLCBvcy0+Y2xrZGV2X2Nvbl9pZCk7CisJCSAgICAgImludGVyZmFjZV9jbGsgJXNcbiIsIG9oLT5uYW1lLCBvcy0+Y2xrKTsKIAkJaWYgKElTX0VSUihjKSkKIAkJCXJldCA9IC1FSU5WQUw7CiAJCW9zLT5fY2xrID0gYzsKQEAgLTQwOCwxMCArNDcwLDkgQEAKIAlpbnQgcmV0ID0gMDsKIAogCWZvciAoaSA9IG9oLT5vcHRfY2xrc19jbnQsIG9jID0gb2gtPm9wdF9jbGtzOyBpID4gMDsgaS0tLCBvYysrKSB7Ci0JCWMgPSBjbGtfZ2V0X3N5cyhvYy0+Y2xrZGV2X2Rldl9pZCwgb2MtPmNsa2Rldl9jb25faWQpOworCQljID0gb21hcF9jbGtfZ2V0X2J5X25hbWUob2MtPmNsayk7CiAJCVdBUk4oSVNfRVJSKGMpLCAib21hcF9od21vZDogJXM6IGNhbm5vdCBjbGtfZ2V0IG9wdF9jbGsgIgotCQkgICAgICIlcy4lc1xuIiwgb2gtPm5hbWUsIG9jLT5jbGtkZXZfZGV2X2lkLAotCQkgICAgIG9jLT5jbGtkZXZfY29uX2lkKTsKKwkJICAgICAiJXNcbiIsIG9oLT5uYW1lLCBvYy0+Y2xrKTsKIAkJaWYgKElTX0VSUihjKSkKIAkJCXJldCA9IC1FSU5WQUw7CiAJCW9jLT5fY2xrID0gYzsKQEAgLTU2OCwyNyArNjI5LDI4IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9zeXNjX2VuYWJsZShzdHJ1Y3Qgb21hcF9od21vZCAqb2gpCiB7Ci0JdTggaWRsZW1vZGU7CisJdTggaWRsZW1vZGUsIHNmOwogCXUzMiB2OwogCi0JaWYgKCFvaC0+c3lzY29uZmlnKQorCWlmICghb2gtPmNsYXNzLT5zeXNjKQogCQlyZXR1cm47CiAKIAl2ID0gb2gtPl9zeXNjX2NhY2hlOworCXNmID0gb2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZsYWdzOwogCi0JaWYgKG9oLT5zeXNjb25maWctPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19TSURMRU1PREUpIHsKKwlpZiAoc2YgJiBTWVNDX0hBU19TSURMRU1PREUpIHsKIAkJaWRsZW1vZGUgPSAob2gtPmZsYWdzICYgSFdNT0RfU1dTVVBfU0lETEUpID8KIAkJCUhXTU9EX0lETEVNT0RFX05PIDogSFdNT0RfSURMRU1PREVfU01BUlQ7CiAJCV9zZXRfc2xhdmVfaWRsZW1vZGUob2gsIGlkbGVtb2RlLCAmdik7CiAJfQogCi0JaWYgKG9oLT5zeXNjb25maWctPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19NSURMRU1PREUpIHsKKwlpZiAoc2YgJiBTWVNDX0hBU19NSURMRU1PREUpIHsKIAkJaWRsZW1vZGUgPSAob2gtPmZsYWdzICYgSFdNT0RfU1dTVVBfTVNUQU5EQlkpID8KIAkJCUhXTU9EX0lETEVNT0RFX05PIDogSFdNT0RfSURMRU1PREVfU01BUlQ7CiAJCV9zZXRfbWFzdGVyX3N0YW5kYnltb2RlKG9oLCBpZGxlbW9kZSwgJnYpOwogCX0KIAotCWlmIChvaC0+c3lzY29uZmlnLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfQVVUT0lETEUpIHsKKwlpZiAoc2YgJiBTWVNDX0hBU19BVVRPSURMRSkgewogCQlpZGxlbW9kZSA9IChvaC0+ZmxhZ3MgJiBIV01PRF9OT19PQ1BfQVVUT0lETEUpID8KIAkJCTAgOiAxOwogCQlfc2V0X21vZHVsZV9hdXRvaWRsZShvaCwgaWRsZW1vZGUsICZ2KTsKQEAgLTYwMSw5ICs2NjMsOSBAQAogCSAqIGNhbGxpbmcgaW50byB0aGlzIGNvZGUuICBCdXQgdGhpcyBtdXN0IHdhaXQgdW50aWwgdGhlCiAJICogY2xvY2sgc3RydWN0dXJlcyBhcmUgdGFnZ2VkIHdpdGggb21hcF9od21vZCBlbnRyaWVzCiAJICovCi0JaWYgKG9oLT5mbGFncyAmIEhXTU9EX1NFVF9ERUZBVUxUX0NMT0NLQUNUICYmCi0JICAgIG9oLT5zeXNjb25maWctPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19DTE9DS0FDVElWSVRZKQotCQlfc2V0X2Nsb2NrYWN0aXZpdHkob2gsIG9oLT5zeXNjb25maWctPmNsb2NrYWN0LCAmdik7CisJaWYgKChvaC0+ZmxhZ3MgJiBIV01PRF9TRVRfREVGQVVMVF9DTE9DS0FDVCkgJiYKKwkgICAgKHNmICYgU1lTQ19IQVNfQ0xPQ0tBQ1RJVklUWSkpCisJCV9zZXRfY2xvY2thY3Rpdml0eShvaCwgb2gtPmNsYXNzLT5zeXNjLT5jbG9ja2FjdCwgJnYpOwogCiAJX3dyaXRlX3N5c2NvbmZpZyh2LCBvaCk7CiB9CkBAIC02MTksMjEgKzY4MSwyMiBAQAogICovCiBzdGF0aWMgdm9pZCBfc3lzY19pZGxlKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKIHsKLQl1OCBpZGxlbW9kZTsKKwl1OCBpZGxlbW9kZSwgc2Y7CiAJdTMyIHY7CiAKLQlpZiAoIW9oLT5zeXNjb25maWcpCisJaWYgKCFvaC0+Y2xhc3MtPnN5c2MpCiAJCXJldHVybjsKIAogCXYgPSBvaC0+X3N5c2NfY2FjaGU7CisJc2YgPSBvaC0+Y2xhc3MtPnN5c2MtPnN5c2NfZmxhZ3M7CiAKLQlpZiAob2gtPnN5c2NvbmZpZy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX1NJRExFTU9ERSkgeworCWlmIChzZiAmIFNZU0NfSEFTX1NJRExFTU9ERSkgewogCQlpZGxlbW9kZSA9IChvaC0+ZmxhZ3MgJiBIV01PRF9TV1NVUF9TSURMRSkgPwogCQkJSFdNT0RfSURMRU1PREVfRk9SQ0UgOiBIV01PRF9JRExFTU9ERV9TTUFSVDsKIAkJX3NldF9zbGF2ZV9pZGxlbW9kZShvaCwgaWRsZW1vZGUsICZ2KTsKIAl9CiAKLQlpZiAob2gtPnN5c2NvbmZpZy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX01JRExFTU9ERSkgeworCWlmIChzZiAmIFNZU0NfSEFTX01JRExFTU9ERSkgewogCQlpZGxlbW9kZSA9IChvaC0+ZmxhZ3MgJiBIV01PRF9TV1NVUF9NU1RBTkRCWSkgPwogCQkJSFdNT0RfSURMRU1PREVfRk9SQ0UgOiBIV01PRF9JRExFTU9ERV9TTUFSVDsKIAkJX3NldF9tYXN0ZXJfc3RhbmRieW1vZGUob2gsIGlkbGVtb2RlLCAmdik7CkBAIC02NTIsMTkgKzcxNSwyMSBAQAogc3RhdGljIHZvaWQgX3N5c2Nfc2h1dGRvd24oc3RydWN0IG9tYXBfaHdtb2QgKm9oKQogewogCXUzMiB2OworCXU4IHNmOwogCi0JaWYgKCFvaC0+c3lzY29uZmlnKQorCWlmICghb2gtPmNsYXNzLT5zeXNjKQogCQlyZXR1cm47CiAKIAl2ID0gb2gtPl9zeXNjX2NhY2hlOworCXNmID0gb2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZsYWdzOwogCi0JaWYgKG9oLT5zeXNjb25maWctPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19TSURMRU1PREUpCisJaWYgKHNmICYgU1lTQ19IQVNfU0lETEVNT0RFKQogCQlfc2V0X3NsYXZlX2lkbGVtb2RlKG9oLCBIV01PRF9JRExFTU9ERV9GT1JDRSwgJnYpOwogCi0JaWYgKG9oLT5zeXNjb25maWctPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19NSURMRU1PREUpCisJaWYgKHNmICYgU1lTQ19IQVNfTUlETEVNT0RFKQogCQlfc2V0X21hc3Rlcl9zdGFuZGJ5bW9kZShvaCwgSFdNT0RfSURMRU1PREVfRk9SQ0UsICZ2KTsKIAotCWlmIChvaC0+c3lzY29uZmlnLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfQVVUT0lETEUpCisJaWYgKHNmICYgU1lTQ19IQVNfQVVUT0lETEUpCiAJCV9zZXRfbW9kdWxlX2F1dG9pZGxlKG9oLCAxLCAmdik7CiAKIAlfd3JpdGVfc3lzY29uZmlnKHYsIG9oKTsKQEAgLTc4MSw5ICs4NDYsOSBAQAogCXUzMiByLCB2OwogCWludCBjID0gMDsKIAotCWlmICghb2gtPnN5c2NvbmZpZyB8fAotCSAgICAhKG9oLT5zeXNjb25maWctPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19TT0ZUUkVTRVQpIHx8Ci0JICAgIChvaC0+c3lzY29uZmlnLT5zeXNjX2ZsYWdzICYgU1lTU19NSVNTSU5HKSkKKwlpZiAoIW9oLT5jbGFzcy0+c3lzYyB8fAorCSAgICAhKG9oLT5jbGFzcy0+c3lzYy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX1NPRlRSRVNFVCkgfHwKKwkgICAgKG9oLT5jbGFzcy0+c3lzYy0+c3lzY19mbGFncyAmIFNZU1NfTUlTU0lORykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogY2xvY2tzIG11c3QgYmUgb24gZm9yIHRoaXMgb3BlcmF0aW9uICovCkBAIC04MDEsNyArODY2LDcgQEAKIAkJcmV0dXJuIHI7CiAJX3dyaXRlX3N5c2NvbmZpZyh2LCBvaCk7CiAKLQlvbWFwX3Rlc3RfdGltZW91dCgob21hcF9od21vZF9yZWFkbChvaCwgb2gtPnN5c2NvbmZpZy0+c3lzc19vZmZzKSAmCisJb21hcF90ZXN0X3RpbWVvdXQoKG9tYXBfaHdtb2RfcmVhZGwob2gsIG9oLT5jbGFzcy0+c3lzYy0+c3lzc19vZmZzKSAmCiAJCQkgICBTWVNTX1JFU0VURE9ORV9NQVNLKSwKIAkJCSAgTUFYX01PRFVMRV9SRVNFVF9XQUlULCBjKTsKIApAQCAtODQ3LDcgKzkxMiw3IEBACiAJX2FkZF9pbml0aWF0b3JfZGVwKG9oLCBtcHVfb2gpOwogCV9lbmFibGVfY2xvY2tzKG9oKTsKIAotCWlmIChvaC0+c3lzY29uZmlnKSB7CisJaWYgKG9oLT5jbGFzcy0+c3lzYykgewogCQlpZiAoIShvaC0+X2ludF9mbGFncyAmIF9IV01PRF9TWVNDT05GSUdfTE9BREVEKSkKIAkJCV91cGRhdGVfc3lzY19jYWNoZShvaCk7CiAJCV9zeXNjX2VuYWJsZShvaCk7CkBAIC04NzgsNyArOTQzLDcgQEAKIAogCXByX2RlYnVnKCJvbWFwX2h3bW9kOiAlczogaWRsaW5nXG4iLCBvaC0+bmFtZSk7CiAKLQlpZiAob2gtPnN5c2NvbmZpZykKKwlpZiAob2gtPmNsYXNzLT5zeXNjKQogCQlfc3lzY19pZGxlKG9oKTsKIAlfZGVsX2luaXRpYXRvcl9kZXAob2gsIG1wdV9vaCk7CiAJX2Rpc2FibGVfY2xvY2tzKG9oKTsKQEAgLTkwOCw3ICs5NzMsNyBAQAogCiAJcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiBkaXNhYmxpbmdcbiIsIG9oLT5uYW1lKTsKIAotCWlmIChvaC0+c3lzY29uZmlnKQorCWlmIChvaC0+Y2xhc3MtPnN5c2MpCiAJCV9zeXNjX3NodXRkb3duKG9oKTsKIAlfZGVsX2luaXRpYXRvcl9kZXAob2gsIG1wdV9vaCk7CiAJLyogWFhYIHdoYXQgYWJvdXQgdGhlIG90aGVyIHN5c3RlbSBpbml0aWF0b3JzIGhlcmU/IERNQSwgdGVzbGEsIGQyZCAqLwpAQCAtOTY4LDcgKzEwMzMsNyBAQAogCQkgKiBfZW5hYmxlKCkgZnVuY3Rpb24gc2hvdWxkIGJlIHNwbGl0IHRvIGF2b2lkIHRoZQogCQkgKiByZXdyaXRlIG9mIHRoZSBPQ1BfU1lTQ09ORklHIHJlZ2lzdGVyLgogCQkgKi8KLQkJaWYgKG9oLT5zeXNjb25maWcpIHsKKwkJaWYgKG9oLT5jbGFzcy0+c3lzYykgewogCQkJX3VwZGF0ZV9zeXNjX2NhY2hlKG9oKTsKIAkJCV9zeXNjX2VuYWJsZShvaCk7CiAJCX0KQEAgLTk5NCwxMyArMTA1OSwzMyBAQAogCV9fcmF3X3dyaXRlbCh2LCBvaC0+X3J0X3ZhICsgcmVnX29mZnMpOwogfQogCitpbnQgb21hcF9od21vZF9zZXRfc2xhdmVfaWRsZW1vZGUoc3RydWN0IG9tYXBfaHdtb2QgKm9oLCB1OCBpZGxlbW9kZSkKK3sKKwl1MzIgdjsKKwlpbnQgcmV0dmFsID0gMDsKKworCWlmICghb2gpCisJCXJldHVybiAtRUlOVkFMOworCisJdiA9IG9oLT5fc3lzY19jYWNoZTsKKworCXJldHZhbCA9IF9zZXRfc2xhdmVfaWRsZW1vZGUob2gsIGlkbGVtb2RlLCAmdik7CisJaWYgKCFyZXR2YWwpCisJCV93cml0ZV9zeXNjb25maWcodiwgb2gpOworCisJcmV0dXJuIHJldHZhbDsKK30KKwogLyoqCiAgKiBvbWFwX2h3bW9kX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYSBzdHJ1Y3Qgb21hcF9od21vZAogICogQG9oOiBzdHJ1Y3Qgb21hcF9od21vZCAqCiAgKgotICogUmVnaXN0ZXJzIHRoZSBvbWFwX2h3bW9kIEBvaC4gIFJldHVybnMgLUVFWElTVCBpZiBhbiBvbWFwX2h3bW9kIGFscmVhZHkKLSAqIGhhcyBiZWVuIHJlZ2lzdGVyZWQgYnkgdGhlIHNhbWUgbmFtZTsgLUVJTlZBTCBpZiB0aGUgb21hcF9od21vZCBpcyBpbiB0aGUKLSAqIHdyb25nIHN0YXRlLCBvciAwIG9uIHN1Y2Nlc3MuCisgKiBSZWdpc3RlcnMgdGhlIG9tYXBfaHdtb2QgQG9oLiAgUmV0dXJucyAtRUVYSVNUIGlmIGFuIG9tYXBfaHdtb2QKKyAqIGFscmVhZHkgaGFzIGJlZW4gcmVnaXN0ZXJlZCBieSB0aGUgc2FtZSBuYW1lOyAtRUlOVkFMIGlmIHRoZQorICogb21hcF9od21vZCBpcyBpbiB0aGUgd3Jvbmcgc3RhdGUsIGlmIEBvaCBpcyBOVUxMLCBpZiB0aGUKKyAqIG9tYXBfaHdtb2QncyBjbGFzcyBmaWVsZCBpcyBOVUxMOyBpZiB0aGUgb21hcF9od21vZCBpcyBtaXNzaW5nIGEKKyAqIG5hbWUsIG9yIGlmIHRoZSBvbWFwX2h3bW9kJ3MgY2xhc3MgaXMgbWlzc2luZyBhIG5hbWU7IG9yIDAgdXBvbgorICogc3VjY2Vzcy4KICAqCiAgKiBYWFggVGhlIGRhdGEgc2hvdWxkIGJlIGNvcGllZCBpbnRvIGJvb3RtZW0sIHNvIHRoZSBvcmlnaW5hbCBkYXRhCiAgKiBzaG91bGQgYmUgbWFya2VkIF9faW5pdGRhdGEgYW5kIGZyZWVkIGFmdGVyIGluaXQuICBUaGlzIHdvdWxkIGFsbG93CkBAIC0xMDEyLDcgKzEwOTcsOCBAQAogewogCWludCByZXQsIG1zX2lkOwogCi0JaWYgKCFvaCB8fCAob2gtPl9zdGF0ZSAhPSBfSFdNT0RfU1RBVEVfVU5LTk9XTikpCisJaWYgKCFvaCB8fCAhb2gtPm5hbWUgfHwgIW9oLT5jbGFzcyB8fCAhb2gtPmNsYXNzLT5uYW1lIHx8CisJICAgIChvaC0+X3N0YXRlICE9IF9IV01PRF9TVEFURV9VTktOT1dOKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZvbWFwX2h3bW9kX211dGV4KTsKQEAgLTEyODUsNyArMTM3MSw3IEBACiB7CiAJQlVHX09OKCFvaCk7CiAKLQlpZiAoIW9oLT5zeXNjb25maWcgfHwgIW9oLT5zeXNjb25maWctPnN5c2NfZmxhZ3MpIHsKKwlpZiAoIW9oLT5jbGFzcy0+c3lzYyB8fCAhb2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZsYWdzKSB7CiAJCVdBUk4oMSwgIm9tYXBfZGV2aWNlOiAlczogT0NQIGJhcnJpZXIgaW1wb3NzaWJsZSBkdWUgdG8gIgogCQkgICAgICAiZGV2aWNlIGNvbmZpZ3VyYXRpb25cbiIsIG9oLT5uYW1lKTsKIAkJcmV0dXJuOwpAQCAtMTI5NSw3ICsxMzgxLDcgQEAKIAkgKiBGb3JjZXMgcG9zdGVkIHdyaXRlcyB0byBjb21wbGV0ZSBvbiB0aGUgT0NQIHRocmVhZCBoYW5kbGluZwogCSAqIHJlZ2lzdGVyIHdyaXRlcwogCSAqLwotCW9tYXBfaHdtb2RfcmVhZGwob2gsIG9oLT5zeXNjb25maWctPnN5c2Nfb2Zmcyk7CisJb21hcF9od21vZF9yZWFkbChvaCwgb2gtPmNsYXNzLT5zeXNjLT5zeXNjX29mZnMpOwogfQogCiAvKioKQEAgLTE0ODgsOCArMTU3NCw4IEBACiAgKi8KIGludCBvbWFwX2h3bW9kX2VuYWJsZV93YWtldXAoc3RydWN0IG9tYXBfaHdtb2QgKm9oKQogewotCWlmICghb2gtPnN5c2NvbmZpZyB8fAotCSAgICAhKG9oLT5zeXNjb25maWctPnN5c2NfZmxhZ3MgJiBTWVNDX0hBU19FTkFXQUtFVVApKQorCWlmICghb2gtPmNsYXNzLT5zeXNjIHx8CisJICAgICEob2gtPmNsYXNzLT5zeXNjLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfRU5BV0FLRVVQKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZvbWFwX2h3bW9kX211dGV4KTsKQEAgLTE1MTMsOCArMTU5OSw4IEBACiAgKi8KIGludCBvbWFwX2h3bW9kX2Rpc2FibGVfd2FrZXVwKHN0cnVjdCBvbWFwX2h3bW9kICpvaCkKIHsKLQlpZiAoIW9oLT5zeXNjb25maWcgfHwKLQkgICAgIShvaC0+c3lzY29uZmlnLT5zeXNjX2ZsYWdzICYgU1lTQ19IQVNfRU5BV0FLRVVQKSkKKwlpZiAoIW9oLT5jbGFzcy0+c3lzYyB8fAorCSAgICAhKG9oLT5jbGFzcy0+c3lzYy0+c3lzY19mbGFncyAmIFNZU0NfSEFTX0VOQVdBS0VVUCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmb21hcF9od21vZF9tdXRleCk7CkBAIC0xNTIzLDMgKzE2MDksNTIgQEAKIAogCXJldHVybiAwOwogfQorCisvKioKKyAqIG9tYXBfaHdtb2RfZm9yX2VhY2hfYnlfY2xhc3MgLSBjYWxsIEBmbiBmb3IgZWFjaCBod21vZCBvZiBjbGFzcyBAY2xhc3NuYW1lCisgKiBAY2xhc3NuYW1lOiBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBuYW1lIHRvIHNlYXJjaCBmb3IKKyAqIEBmbjogY2FsbGJhY2sgZnVuY3Rpb24gcG9pbnRlciB0byBjYWxsIGZvciBlYWNoIGh3bW9kIGluIGNsYXNzIEBjbGFzc25hbWUKKyAqIEB1c2VyOiBhcmJpdHJhcnkgY29udGV4dCBkYXRhIHRvIHBhc3MgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKgorICogRm9yIGVhY2ggb21hcF9od21vZCBvZiBjbGFzcyBAY2xhc3NuYW1lLCBjYWxsIEBmbi4gIFRha2VzCisgKiBvbWFwX2h3bW9kX211dGV4IHRvIHByZXZlbnQgdGhlIGh3bW9kIGxpc3QgZnJvbSBjaGFuZ2luZyBkdXJpbmcgdGhlCisgKiBpdGVyYXRpb24uICBJZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gcmV0dXJucyBzb21ldGhpbmcgb3RoZXIgdGhhbgorICogemVybywgdGhlIGl0ZXJhdG9yIGlzIHRlcm1pbmF0ZWQsIGFuZCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24ncyByZXR1cm4KKyAqIHZhbHVlIGlzIHBhc3NlZCBiYWNrIHRvIHRoZSBjYWxsZXIuICBSZXR1cm5zIDAgdXBvbiBzdWNjZXNzLCAtRUlOVkFMCisgKiBpZiBAY2xhc3NuYW1lIG9yIEBmbiBhcmUgTlVMTCwgb3IgcGFzc2VzIGJhY2sgdGhlIGVycm9yIGNvZGUgZnJvbSBAZm4uCisgKi8KK2ludCBvbWFwX2h3bW9kX2Zvcl9lYWNoX2J5X2NsYXNzKGNvbnN0IGNoYXIgKmNsYXNzbmFtZSwKKwkJCQkgaW50ICgqZm4pKHN0cnVjdCBvbWFwX2h3bW9kICpvaCwKKwkJCQkJICAgdm9pZCAqdXNlciksCisJCQkJIHZvaWQgKnVzZXIpCit7CisJc3RydWN0IG9tYXBfaHdtb2QgKnRlbXBfb2g7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWNsYXNzbmFtZSB8fCAhZm4pCisJCXJldHVybiAtRUlOVkFMOworCisJcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiBsb29raW5nIGZvciBtb2R1bGVzIG9mIGNsYXNzICVzXG4iLAorCQkgX19mdW5jX18sIGNsYXNzbmFtZSk7CisKKwltdXRleF9sb2NrKCZvbWFwX2h3bW9kX211dGV4KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkodGVtcF9vaCwgJm9tYXBfaHdtb2RfbGlzdCwgbm9kZSkgeworCQlpZiAoIXN0cmNtcCh0ZW1wX29oLT5jbGFzcy0+bmFtZSwgY2xhc3NuYW1lKSkgeworCQkJcHJfZGVidWcoIm9tYXBfaHdtb2Q6ICVzOiAlczogY2FsbGluZyBjYWxsYmFjayBmblxuIiwKKwkJCQkgX19mdW5jX18sIHRlbXBfb2gtPm5hbWUpOworCQkJcmV0ID0gKCpmbikodGVtcF9vaCwgdXNlcik7CisJCQlpZiAocmV0KQorCQkJCWJyZWFrOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZvbWFwX2h3bW9kX211dGV4KTsKKworCWlmIChyZXQpCisJCXByX2RlYnVnKCJvbWFwX2h3bW9kOiAlczogaXRlcmF0b3IgdGVybWluYXRlZCBlYXJseTogJWRcbiIsCisJCQkgX19mdW5jX18sIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQyMC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MjAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTljYTFiOS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQyMC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQxICswLDAgQEAKLS8qCi0gKiBvbWFwX2h3bW9kXzI0MjAuaCAtIGhhcmR3YXJlIG1vZHVsZXMgcHJlc2VudCBvbiB0aGUgT01BUDI0MjAgY2hpcHMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KLSAqIFBhdWwgV2FsbXNsZXkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFhYWCBoYW5kbGUgY3Jvc3NiYXIvc2hhcmVkIGxpbmsgZGlmZmVyZW5jZSBmb3IgTDM/Ci0gKgotICovCi0jaWZuZGVmIF9fQVJDSF9BUk1fUExBVF9PTUFQX0lOQ0xVREVfTUFDSF9PTUFQX0hXTU9EMjQyMF9ICi0jZGVmaW5lIF9fQVJDSF9BUk1fUExBVF9PTUFQX0lOQ0xVREVfTUFDSF9PTUFQX0hXTU9EMjQyMF9ICi0KLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQyMAotCi0jaW5jbHVkZSA8cGxhdC9vbWFwX2h3bW9kLmg+Ci0jaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0jaW5jbHVkZSA8cGxhdC9jcHUuaD4KLSNpbmNsdWRlIDxwbGF0L2RtYS5oPgotCi0jaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgotCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfbXB1X2h3bW9kOwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2wzX2h3bW9kOwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2w0X2NvcmVfaHdtb2Q7Ci0KLS8qIEwzIC0+IEw0X0NPUkUgaW50ZXJmYWNlICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2wzX19sNF9jb3JlID0gewotCS5tYXN0ZXIJPSAmb21hcDI0MjBfbDNfaHdtb2QsCi0JLnNsYXZlCT0gJm9tYXAyNDIwX2w0X2NvcmVfaHdtb2QsCi0JLnVzZXIJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogTVBVIC0+IEwzIGludGVyZmFjZSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQyMF9tcHVfX2wzID0gewotCS5tYXN0ZXIgPSAmb21hcDI0MjBfbXB1X2h3bW9kLAotCS5zbGF2ZQk9ICZvbWFwMjQyMF9sM19od21vZCwKLQkudXNlcgk9IE9DUF9VU0VSX01QVSwKLX07Ci0KLS8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEwzIGludGVyY29ubmVjdCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfbDNfc2xhdmVzW10gPSB7Ci0JJm9tYXAyNDIwX21wdV9fbDMsCi19OwotCi0vKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDMgaW50ZXJjb25uZWN0ICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF9sM19tYXN0ZXJzW10gPSB7Ci0JJm9tYXAyNDIwX2wzX19sNF9jb3JlLAotfTsKLQotLyogTDMgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9sM19od21vZCA9IHsKLQkubmFtZQkJPSAibDNfaHdtb2QiLAotCS5tYXN0ZXJzCT0gb21hcDI0MjBfbDNfbWFzdGVycywKLQkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX2wzX21hc3RlcnMpLAotCS5zbGF2ZXMJCT0gb21hcDI0MjBfbDNfc2xhdmVzLAotCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9sM19zbGF2ZXMpLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKQotfTsKLQotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2w0X3drdXBfaHdtb2Q7Ci0KLS8qIEw0X0NPUkUgLT4gTDRfV0tVUCBpbnRlcmZhY2UgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MjBfbDRfY29yZV9fbDRfd2t1cCA9IHsKLQkubWFzdGVyCT0gJm9tYXAyNDIwX2w0X2NvcmVfaHdtb2QsCi0JLnNsYXZlCT0gJm9tYXAyNDIwX2w0X3drdXBfaHdtb2QsCi0JLnVzZXIJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogU2xhdmUgaW50ZXJmYWNlcyBvbiB0aGUgTDRfQ09SRSBpbnRlcmNvbm5lY3QgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX2w0X2NvcmVfc2xhdmVzW10gPSB7Ci0JJm9tYXAyNDIwX2wzX19sNF9jb3JlLAotfTsKLQotLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEw0X0NPUkUgaW50ZXJjb25uZWN0ICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF9sNF9jb3JlX21hc3RlcnNbXSA9IHsKLQkmb21hcDI0MjBfbDRfY29yZV9fbDRfd2t1cCwKLX07Ci0KLS8qIEw0IENPUkUgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9sNF9jb3JlX2h3bW9kID0gewotCS5uYW1lCQk9ICJsNF9jb3JlX2h3bW9kIiwKLQkubWFzdGVycwk9IG9tYXAyNDIwX2w0X2NvcmVfbWFzdGVycywKLQkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX2w0X2NvcmVfbWFzdGVycyksCi0JLnNsYXZlcwkJPSBvbWFwMjQyMF9sNF9jb3JlX3NsYXZlcywKLQkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfbDRfY29yZV9zbGF2ZXMpLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKQotfTsKLQotLyogU2xhdmUgaW50ZXJmYWNlcyBvbiB0aGUgTDRfV0tVUCBpbnRlcmNvbm5lY3QgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX2w0X3drdXBfc2xhdmVzW10gPSB7Ci0JJm9tYXAyNDIwX2w0X2NvcmVfX2w0X3drdXAsCi19OwotCi0vKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDRfV0tVUCBpbnRlcmNvbm5lY3QgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX2w0X3drdXBfbWFzdGVyc1tdID0gewotfTsKLQotLyogTDQgV0tVUCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2w0X3drdXBfaHdtb2QgPSB7Ci0JLm5hbWUJCT0gImw0X3drdXBfaHdtb2QiLAotCS5tYXN0ZXJzCT0gb21hcDI0MjBfbDRfd2t1cF9tYXN0ZXJzLAotCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfbDRfd2t1cF9tYXN0ZXJzKSwKLQkuc2xhdmVzCQk9IG9tYXAyNDIwX2w0X3drdXBfc2xhdmVzLAotCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9sNF93a3VwX3NsYXZlcyksCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApCi19OwotCi0vKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTVBVIGRldmljZSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfbXB1X21hc3RlcnNbXSA9IHsKLQkmb21hcDI0MjBfbXB1X19sMywKLX07Ci0KLS8qIE1QVSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX21wdV9od21vZCA9IHsKLQkubmFtZQkJPSAibXB1X2h3bW9kIiwKLQkuY2xrZGV2X2Rldl9pZAk9IE5VTEwsCi0JLmNsa2Rldl9jb25faWQJPSAibXB1X2NrIiwKLQkubWFzdGVycwk9IG9tYXAyNDIwX21wdV9tYXN0ZXJzLAotCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfbXB1X21hc3RlcnMpLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKSwKLX07Ci0KLXN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvbWFwX2h3bW9kICpvbWFwMjQyMF9od21vZHNbXSA9IHsKLQkmb21hcDI0MjBfbDNfaHdtb2QsCi0JJm9tYXAyNDIwX2w0X2NvcmVfaHdtb2QsCi0JJm9tYXAyNDIwX2w0X3drdXBfaHdtb2QsCi0JJm9tYXAyNDIwX21wdV9od21vZCwKLQlOVUxMLAotfTsKLQotI2Vsc2UKLSMgZGVmaW5lIG9tYXAyNDIwX2h3bW9kcwkJMAotI2VuZGlmCi0KLSNlbmRpZgotCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDIwX2RhdGEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDIwX2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjdlZTI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MjBfZGF0YS5jCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogb21hcF9od21vZF8yNDIwX2RhdGEuYyAtIGhhcmR3YXJlIG1vZHVsZXMgcHJlc2VudCBvbiB0aGUgT01BUDI0MjAgY2hpcHMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICogUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogWFhYIGhhbmRsZSBjcm9zc2Jhci9zaGFyZWQgbGluayBkaWZmZXJlbmNlIGZvciBMMz8KKyAqIFhYWCB0aGVzZSBzaG91bGQgYmUgbWFya2VkIGluaXRkYXRhIGZvciBtdWx0aS1PTUFQIGtlcm5lbHMKKyAqLworI2luY2x1ZGUgPHBsYXQvb21hcF9od21vZC5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9kbWEuaD4KKworI2luY2x1ZGUgIm9tYXBfaHdtb2RfY29tbW9uX2RhdGEuaCIKKworI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKKworLyoKKyAqIE9NQVAyNDIwIGhhcmR3YXJlIG1vZHVsZSBpbnRlZ3JhdGlvbiBkYXRhCisgKgorICogQUxsIG9mIHRoZSBkYXRhIGluIHRoaXMgc2VjdGlvbiBzaG91bGQgYmUgYXV0b2dlbmVyYXRhYmxlIGZyb20gdGhlCisgKiBUSSBoYXJkd2FyZSBkYXRhYmFzZSBvciBvdGhlciB0ZWNobmljYWwgZG9jdW1lbnRhdGlvbi4gIERhdGEgdGhhdAorICogaXMgZHJpdmVyLXNwZWNpZmljIG9yIGRyaXZlci1rZXJuZWwgaW50ZWdyYXRpb24tc3BlY2lmaWMgYmVsb25ncworICogZWxzZXdoZXJlLgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9tcHVfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfbDNfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfbDRfY29yZV9od21vZDsKKworLyogTDMgLT4gTDRfQ09SRSBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MjBfbDNfX2w0X2NvcmUgPSB7CisJLm1hc3Rlcgk9ICZvbWFwMjQyMF9sM19od21vZCwKKwkuc2xhdmUJPSAmb21hcDI0MjBfbDRfY29yZV9od21vZCwKKwkudXNlcgk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBNUFUgLT4gTDMgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX21wdV9fbDMgPSB7CisJLm1hc3RlciA9ICZvbWFwMjQyMF9tcHVfaHdtb2QsCisJLnNsYXZlCT0gJm9tYXAyNDIwX2wzX2h3bW9kLAorCS51c2VyCT0gT0NQX1VTRVJfTVBVLAorfTsKKworLyogU2xhdmUgaW50ZXJmYWNlcyBvbiB0aGUgTDMgaW50ZXJjb25uZWN0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF9sM19zbGF2ZXNbXSA9IHsKKwkmb21hcDI0MjBfbXB1X19sMywKK307CisKKy8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBMMyBpbnRlcmNvbm5lY3QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX2wzX21hc3RlcnNbXSA9IHsKKwkmb21hcDI0MjBfbDNfX2w0X2NvcmUsCit9OworCisvKiBMMyAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2wzX2h3bW9kID0geworCS5uYW1lCQk9ICJsM19od21vZCIsCisJLmNsYXNzCQk9ICZsM19od21vZF9jbGFzcywKKwkubWFzdGVycwk9IG9tYXAyNDIwX2wzX21hc3RlcnMsCisJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9sM19tYXN0ZXJzKSwKKwkuc2xhdmVzCQk9IG9tYXAyNDIwX2wzX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfbDNfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCkKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQyMF9sNF93a3VwX2h3bW9kOworCisvKiBMNF9DT1JFIC0+IEw0X1dLVVAgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDIwX2w0X2NvcmVfX2w0X3drdXAgPSB7CisJLm1hc3Rlcgk9ICZvbWFwMjQyMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQk9ICZvbWFwMjQyMF9sNF93a3VwX2h3bW9kLAorCS51c2VyCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEw0X0NPUkUgaW50ZXJjb25uZWN0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF9sNF9jb3JlX3NsYXZlc1tdID0geworCSZvbWFwMjQyMF9sM19fbDRfY29yZSwKK307CisKKy8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBMNF9DT1JFIGludGVyY29ubmVjdCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MjBfbDRfY29yZV9tYXN0ZXJzW10gPSB7CisJJm9tYXAyNDIwX2w0X2NvcmVfX2w0X3drdXAsCit9OworCisvKiBMNCBDT1JFICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfbDRfY29yZV9od21vZCA9IHsKKwkubmFtZQkJPSAibDRfY29yZV9od21vZCIsCisJLmNsYXNzCQk9ICZsNF9od21vZF9jbGFzcywKKwkubWFzdGVycwk9IG9tYXAyNDIwX2w0X2NvcmVfbWFzdGVycywKKwkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX2w0X2NvcmVfbWFzdGVycyksCisJLnNsYXZlcwkJPSBvbWFwMjQyMF9sNF9jb3JlX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MjBfbDRfY29yZV9zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDIwKQorfTsKKworLyogU2xhdmUgaW50ZXJmYWNlcyBvbiB0aGUgTDRfV0tVUCBpbnRlcmNvbm5lY3QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX2w0X3drdXBfc2xhdmVzW10gPSB7CisJJm9tYXAyNDIwX2w0X2NvcmVfX2w0X3drdXAsCit9OworCisvKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDRfV0tVUCBpbnRlcmNvbm5lY3QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDIwX2w0X3drdXBfbWFzdGVyc1tdID0geworfTsKKworLyogTDQgV0tVUCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDIwX2w0X3drdXBfaHdtb2QgPSB7CisJLm5hbWUJCT0gImw0X3drdXBfaHdtb2QiLAorCS5jbGFzcwkJPSAmbDRfaHdtb2RfY2xhc3MsCisJLm1hc3RlcnMJPSBvbWFwMjQyMF9sNF93a3VwX21hc3RlcnMsCisJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9sNF93a3VwX21hc3RlcnMpLAorCS5zbGF2ZXMJCT0gb21hcDI0MjBfbDRfd2t1cF9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDIwX2w0X3drdXBfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQyMCkKK307CisKKy8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBNUFUgZGV2aWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQyMF9tcHVfbWFzdGVyc1tdID0geworCSZvbWFwMjQyMF9tcHVfX2wzLAorfTsKKworLyogTVBVICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MjBfbXB1X2h3bW9kID0geworCS5uYW1lCQk9ICJtcHVfaHdtb2QiLAorCS5jbGFzcwkJPSAmbXB1X2h3bW9kX2NsYXNzLAorCS5tYWluX2Nsawk9ICJtcHVfY2siLAorCS5tYXN0ZXJzCT0gb21hcDI0MjBfbXB1X21hc3RlcnMsCisJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwMjQyMF9tcHVfbWFzdGVycyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MjApLAorfTsKKworc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9tYXBfaHdtb2QgKm9tYXAyNDIwX2h3bW9kc1tdID0geworCSZvbWFwMjQyMF9sM19od21vZCwKKwkmb21hcDI0MjBfbDRfY29yZV9od21vZCwKKwkmb21hcDI0MjBfbDRfd2t1cF9od21vZCwKKwkmb21hcDI0MjBfbXB1X2h3bW9kLAorCU5VTEwsCit9OworCitpbnQgX19pbml0IG9tYXAyNDIwX2h3bW9kX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb21hcF9od21vZF9pbml0KG9tYXAyNDIwX2h3bW9kcyk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzAuaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8yNDMwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDU5YTIwOGIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzAuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0MyArMCwwIEBACi0vKgotICogb21hcF9od21vZF8yNDMwLmggLSBoYXJkd2FyZSBtb2R1bGVzIHByZXNlbnQgb24gdGhlIE9NQVAyNDMwIGNoaXBzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCi0gKiBQYXVsIFdhbG1zbGV5Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBYWFggaGFuZGxlIGNyb3NzYmFyL3NoYXJlZCBsaW5rIGRpZmZlcmVuY2UgZm9yIEwzPwotICoKLSAqLwotI2lmbmRlZiBfX0FSQ0hfQVJNX1BMQVRfT01BUF9JTkNMVURFX01BQ0hfT01BUF9IV01PRDI0MzBfSAotI2RlZmluZSBfX0FSQ0hfQVJNX1BMQVRfT01BUF9JTkNMVURFX01BQ0hfT01BUF9IV01PRDI0MzBfSAotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKLQotI2luY2x1ZGUgPHBsYXQvb21hcF9od21vZC5oPgotI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0jaW5jbHVkZSA8cGxhdC9kbWEuaD4KLQotI2luY2x1ZGUgInBybS1yZWdiaXRzLTI0eHguaCIKLQotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21wdV9od21vZDsKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9sM19od21vZDsKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9sNF9jb3JlX2h3bW9kOwotCi0vKiBMMyAtPiBMNF9DT1JFIGludGVyZmFjZSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sM19fbDRfY29yZSA9IHsKLQkubWFzdGVyCT0gJm9tYXAyNDMwX2wzX2h3bW9kLAotCS5zbGF2ZQk9ICZvbWFwMjQzMF9sNF9jb3JlX2h3bW9kLAotCS51c2VyCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKLX07Ci0KLS8qIE1QVSAtPiBMMyBpbnRlcmZhY2UgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbXB1X19sMyA9IHsKLQkubWFzdGVyID0gJm9tYXAyNDMwX21wdV9od21vZCwKLQkuc2xhdmUJPSAmb21hcDI0MzBfbDNfaHdtb2QsCi0JLnVzZXIJPSBPQ1BfVVNFUl9NUFUsCi19OwotCi0vKiBTbGF2ZSBpbnRlcmZhY2VzIG9uIHRoZSBMMyBpbnRlcmNvbm5lY3QgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX2wzX3NsYXZlc1tdID0gewotCSZvbWFwMjQzMF9tcHVfX2wzLAotfTsKLQotLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEwzIGludGVyY29ubmVjdCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfbDNfbWFzdGVyc1tdID0gewotCSZvbWFwMjQzMF9sM19fbDRfY29yZSwKLX07Ci0KLS8qIEwzICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbDNfaHdtb2QgPSB7Ci0JLm5hbWUJCT0gImwzX2h3bW9kIiwKLQkubWFzdGVycwk9IG9tYXAyNDMwX2wzX21hc3RlcnMsCi0JLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9sM19tYXN0ZXJzKSwKLQkuc2xhdmVzCQk9IG9tYXAyNDMwX2wzX3NsYXZlcywKLQkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbDNfc2xhdmVzKSwKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCkKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9sNF93a3VwX2h3bW9kOwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21tYzFfaHdtb2Q7Ci1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbW1jMl9od21vZDsKLQotLyogTDRfQ09SRSAtPiBMNF9XS1VQIGludGVyZmFjZSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sNF9jb3JlX19sNF93a3VwID0gewotCS5tYXN0ZXIJPSAmb21hcDI0MzBfbDRfY29yZV9od21vZCwKLQkuc2xhdmUJPSAmb21hcDI0MzBfbDRfd2t1cF9od21vZCwKLQkudXNlcgk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCi19OwotCi0vKiBTbGF2ZSBpbnRlcmZhY2VzIG9uIHRoZSBMNF9DT1JFIGludGVyY29ubmVjdCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfbDRfY29yZV9zbGF2ZXNbXSA9IHsKLQkmb21hcDI0MzBfbDNfX2w0X2NvcmUsCi19OwotCi0vKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDRfQ09SRSBpbnRlcmNvbm5lY3QgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX2w0X2NvcmVfbWFzdGVyc1tdID0gewotCSZvbWFwMjQzMF9sNF9jb3JlX19sNF93a3VwLAotfTsKLQotLyogTDQgQ09SRSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2w0X2NvcmVfaHdtb2QgPSB7Ci0JLm5hbWUJCT0gImw0X2NvcmVfaHdtb2QiLAotCS5tYXN0ZXJzCT0gb21hcDI0MzBfbDRfY29yZV9tYXN0ZXJzLAotCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbDRfY29yZV9tYXN0ZXJzKSwKLQkuc2xhdmVzCQk9IG9tYXAyNDMwX2w0X2NvcmVfc2xhdmVzLAotCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9sNF9jb3JlX3NsYXZlcyksCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApCi19OwotCi0vKiBTbGF2ZSBpbnRlcmZhY2VzIG9uIHRoZSBMNF9XS1VQIGludGVyY29ubmVjdCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfbDRfd2t1cF9zbGF2ZXNbXSA9IHsKLQkmb21hcDI0MzBfbDRfY29yZV9fbDRfd2t1cCwKLX07Ci0KLS8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBMNF9XS1VQIGludGVyY29ubmVjdCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfbDRfd2t1cF9tYXN0ZXJzW10gPSB7Ci19OwotCi0vKiBMNCBXS1VQICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbDRfd2t1cF9od21vZCA9IHsKLQkubmFtZQkJPSAibDRfd2t1cF9od21vZCIsCi0JLm1hc3RlcnMJPSBvbWFwMjQzMF9sNF93a3VwX21hc3RlcnMsCi0JLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9sNF93a3VwX21hc3RlcnMpLAotCS5zbGF2ZXMJCT0gb21hcDI0MzBfbDRfd2t1cF9zbGF2ZXMsCi0JLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2w0X3drdXBfc2xhdmVzKSwKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCkKLX07Ci0KLS8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBNUFUgZGV2aWNlICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9tcHVfbWFzdGVyc1tdID0gewotCSZvbWFwMjQzMF9tcHVfX2wzLAotfTsKLQotLyogTVBVICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbXB1X2h3bW9kID0gewotCS5uYW1lCQk9ICJtcHVfaHdtb2QiLAotCS5jbGtkZXZfZGV2X2lkCT0gTlVMTCwKLQkuY2xrZGV2X2Nvbl9pZAk9ICJtcHVfY2siLAotCS5tYXN0ZXJzCT0gb21hcDI0MzBfbXB1X21hc3RlcnMsCi0JLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9tcHVfbWFzdGVycyksCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAotfTsKLQotc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9tYXBfaHdtb2QgKm9tYXAyNDMwX2h3bW9kc1tdID0gewotCSZvbWFwMjQzMF9sM19od21vZCwKLQkmb21hcDI0MzBfbDRfY29yZV9od21vZCwKLQkmb21hcDI0MzBfbDRfd2t1cF9od21vZCwKLQkmb21hcDI0MzBfbXB1X2h3bW9kLAotCU5VTEwsCi19OwotCi0jZWxzZQotIyBkZWZpbmUgb21hcDI0MzBfaHdtb2RzCQkwCi0jZW5kaWYKLQotI2VuZGlmCi0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzBfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzI0MzBfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MWJkODIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfMjQzMF9kYXRhLmMKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBvbWFwX2h3bW9kXzI0MzBfZGF0YS5jIC0gaGFyZHdhcmUgbW9kdWxlcyBwcmVzZW50IG9uIHRoZSBPTUFQMjQzMCBjaGlwcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBYWFggaGFuZGxlIGNyb3NzYmFyL3NoYXJlZCBsaW5rIGRpZmZlcmVuY2UgZm9yIEwzPworICogWFhYIHRoZXNlIHNob3VsZCBiZSBtYXJrZWQgaW5pdGRhdGEgZm9yIG11bHRpLU9NQVAga2VybmVscworICovCisjaW5jbHVkZSA8cGxhdC9vbWFwX2h3bW9kLmg+CisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RtYS5oPgorCisjaW5jbHVkZSAib21hcF9od21vZF9jb21tb25fZGF0YS5oIgorCisjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMjR4eC5oIgorCisvKgorICogT01BUDI0MzAgaGFyZHdhcmUgbW9kdWxlIGludGVncmF0aW9uIGRhdGEKKyAqCisgKiBBTGwgb2YgdGhlIGRhdGEgaW4gdGhpcyBzZWN0aW9uIHNob3VsZCBiZSBhdXRvZ2VuZXJhdGFibGUgZnJvbSB0aGUKKyAqIFRJIGhhcmR3YXJlIGRhdGFiYXNlIG9yIG90aGVyIHRlY2huaWNhbCBkb2N1bWVudGF0aW9uLiAgRGF0YSB0aGF0CisgKiBpcyBkcml2ZXItc3BlY2lmaWMgb3IgZHJpdmVyLWtlcm5lbCBpbnRlZ3JhdGlvbi1zcGVjaWZpYyBiZWxvbmdzCisgKiBlbHNld2hlcmUuCisgKi8KKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX21wdV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9sM19od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9sNF9jb3JlX2h3bW9kOworCisvKiBMMyAtPiBMNF9DT1JFIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMjQzMF9sM19fbDRfY29yZSA9IHsKKwkubWFzdGVyCT0gJm9tYXAyNDMwX2wzX2h3bW9kLAorCS5zbGF2ZQk9ICZvbWFwMjQzMF9sNF9jb3JlX2h3bW9kLAorCS51c2VyCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIE1QVSAtPiBMMyBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDI0MzBfbXB1X19sMyA9IHsKKwkubWFzdGVyID0gJm9tYXAyNDMwX21wdV9od21vZCwKKwkuc2xhdmUJPSAmb21hcDI0MzBfbDNfaHdtb2QsCisJLnVzZXIJPSBPQ1BfVVNFUl9NUFUsCit9OworCisvKiBTbGF2ZSBpbnRlcmZhY2VzIG9uIHRoZSBMMyBpbnRlcmNvbm5lY3QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX2wzX3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9tcHVfX2wzLAorfTsKKworLyogTWFzdGVyIGludGVyZmFjZXMgb24gdGhlIEwzIGludGVyY29ubmVjdCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfbDNfbWFzdGVyc1tdID0geworCSZvbWFwMjQzMF9sM19fbDRfY29yZSwKK307CisKKy8qIEwzICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbDNfaHdtb2QgPSB7CisJLm5hbWUJCT0gImwzX2h3bW9kIiwKKwkuY2xhc3MJCT0gJmwzX2h3bW9kX2NsYXNzLAorCS5tYXN0ZXJzCT0gb21hcDI0MzBfbDNfbWFzdGVycywKKwkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2wzX21hc3RlcnMpLAorCS5zbGF2ZXMJCT0gb21hcDI0MzBfbDNfc2xhdmVzLAorCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9sM19zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKQorfTsKKworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2w0X3drdXBfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbW1jMV9od21vZDsKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMjQzMF9tbWMyX2h3bW9kOworCisvKiBMNF9DT1JFIC0+IEw0X1dLVVAgaW50ZXJmYWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAyNDMwX2w0X2NvcmVfX2w0X3drdXAgPSB7CisJLm1hc3Rlcgk9ICZvbWFwMjQzMF9sNF9jb3JlX2h3bW9kLAorCS5zbGF2ZQk9ICZvbWFwMjQzMF9sNF93a3VwX2h3bW9kLAorCS51c2VyCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEw0X0NPUkUgaW50ZXJjb25uZWN0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9sNF9jb3JlX3NsYXZlc1tdID0geworCSZvbWFwMjQzMF9sM19fbDRfY29yZSwKK307CisKKy8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBMNF9DT1JFIGludGVyY29ubmVjdCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDI0MzBfbDRfY29yZV9tYXN0ZXJzW10gPSB7CisJJm9tYXAyNDMwX2w0X2NvcmVfX2w0X3drdXAsCit9OworCisvKiBMNCBDT1JFICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbDRfY29yZV9od21vZCA9IHsKKwkubmFtZQkJPSAibDRfY29yZV9od21vZCIsCisJLmNsYXNzCQk9ICZsNF9od21vZF9jbGFzcywKKwkubWFzdGVycwk9IG9tYXAyNDMwX2w0X2NvcmVfbWFzdGVycywKKwkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2w0X2NvcmVfbWFzdGVycyksCisJLnNsYXZlcwkJPSBvbWFwMjQzMF9sNF9jb3JlX3NsYXZlcywKKwkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDI0MzBfbDRfY29yZV9zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKQorfTsKKworLyogU2xhdmUgaW50ZXJmYWNlcyBvbiB0aGUgTDRfV0tVUCBpbnRlcmNvbm5lY3QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX2w0X3drdXBfc2xhdmVzW10gPSB7CisJJm9tYXAyNDMwX2w0X2NvcmVfX2w0X3drdXAsCit9OworCisvKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDRfV0tVUCBpbnRlcmNvbm5lY3QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAyNDMwX2w0X3drdXBfbWFzdGVyc1tdID0geworfTsKKworLyogTDQgV0tVUCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAyNDMwX2w0X3drdXBfaHdtb2QgPSB7CisJLm5hbWUJCT0gImw0X3drdXBfaHdtb2QiLAorCS5jbGFzcwkJPSAmbDRfaHdtb2RfY2xhc3MsCisJLm1hc3RlcnMJPSBvbWFwMjQzMF9sNF93a3VwX21hc3RlcnMsCisJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9sNF93a3VwX21hc3RlcnMpLAorCS5zbGF2ZXMJCT0gb21hcDI0MzBfbDRfd2t1cF9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAyNDMwX2w0X3drdXBfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCkKK307CisKKy8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBNUFUgZGV2aWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMjQzMF9tcHVfbWFzdGVyc1tdID0geworCSZvbWFwMjQzMF9tcHVfX2wzLAorfTsKKworLyogTVBVICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDI0MzBfbXB1X2h3bW9kID0geworCS5uYW1lCQk9ICJtcHVfaHdtb2QiLAorCS5jbGFzcwkJPSAmbXB1X2h3bW9kX2NsYXNzLAorCS5tYWluX2Nsawk9ICJtcHVfY2siLAorCS5tYXN0ZXJzCT0gb21hcDI0MzBfbXB1X21hc3RlcnMsCisJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwMjQzMF9tcHVfbWFzdGVycyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApLAorfTsKKworc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9tYXBfaHdtb2QgKm9tYXAyNDMwX2h3bW9kc1tdID0geworCSZvbWFwMjQzMF9sM19od21vZCwKKwkmb21hcDI0MzBfbDRfY29yZV9od21vZCwKKwkmb21hcDI0MzBfbDRfd2t1cF9od21vZCwKKwkmb21hcDI0MzBfbXB1X2h3bW9kLAorCU5VTEwsCit9OworCitpbnQgX19pbml0IG9tYXAyNDMwX2h3bW9kX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb21hcF9od21vZF9pbml0KG9tYXAyNDMwX2h3bW9kcyk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzM0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF8zNHh4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2MDc2YjkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzM0eHguaAorKysgL2Rldi9udWxsCkBAIC0xLDE2OCArMCwwIEBACi0vKgotICogb21hcF9od21vZF8zNHh4LmggLSBoYXJkd2FyZSBtb2R1bGVzIHByZXNlbnQgb24gdGhlIE9NQVAzNHh4IGNoaXBzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCi0gKiBQYXVsIFdhbG1zbGV5Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKi8KLSNpZm5kZWYgX19BUkNIX0FSTV9QTEFUX09NQVBfSU5DTFVERV9NQUNIX09NQVBfSFdNT0QzNFhYX0gKLSNkZWZpbmUgX19BUkNIX0FSTV9QTEFUX09NQVBfSU5DTFVERV9NQUNIX09NQVBfSFdNT0QzNFhYX0gKLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzNFhYCi0KLSNpbmNsdWRlIDxwbGF0L29tYXBfaHdtb2QuaD4KLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgotI2luY2x1ZGUgPHBsYXQvZG1hLmg+Ci0KLSNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCi0KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMzR4eF9tcHVfaHdtb2Q7Ci1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDM0eHhfbDNfaHdtb2Q7Ci1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDM0eHhfbDRfY29yZV9od21vZDsKLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwMzR4eF9sNF9wZXJfaHdtb2Q7Ci0KLS8qIEwzIC0+IEw0X0NPUkUgaW50ZXJmYWNlICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzNHh4X2wzX19sNF9jb3JlID0gewotCS5tYXN0ZXIJPSAmb21hcDM0eHhfbDNfaHdtb2QsCi0JLnNsYXZlCT0gJm9tYXAzNHh4X2w0X2NvcmVfaHdtb2QsCi0JLnVzZXIJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAotfTsKLQotLyogTDMgLT4gTDRfUEVSIGludGVyZmFjZSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMzR4eF9sM19fbDRfcGVyID0gewotCS5tYXN0ZXIgPSAmb21hcDM0eHhfbDNfaHdtb2QsCi0JLnNsYXZlCT0gJm9tYXAzNHh4X2w0X3Blcl9od21vZCwKLQkudXNlcgk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCi19OwotCi0vKiBNUFUgLT4gTDMgaW50ZXJmYWNlICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmIG9tYXAzNHh4X21wdV9fbDMgPSB7Ci0JLm1hc3RlciA9ICZvbWFwMzR4eF9tcHVfaHdtb2QsCi0JLnNsYXZlCT0gJm9tYXAzNHh4X2wzX2h3bW9kLAotCS51c2VyCT0gT0NQX1VTRVJfTVBVLAotfTsKLQotLyogU2xhdmUgaW50ZXJmYWNlcyBvbiB0aGUgTDMgaW50ZXJjb25uZWN0ICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMzR4eF9sM19zbGF2ZXNbXSA9IHsKLQkmb21hcDM0eHhfbXB1X19sMywKLX07Ci0KLS8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBMMyBpbnRlcmNvbm5lY3QgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzNHh4X2wzX21hc3RlcnNbXSA9IHsKLQkmb21hcDM0eHhfbDNfX2w0X2NvcmUsCi0JJm9tYXAzNHh4X2wzX19sNF9wZXIsCi19OwotCi0vKiBMMyAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzNHh4X2wzX2h3bW9kID0gewotCS5uYW1lCQk9ICJsM19od21vZCIsCi0JLm1hc3RlcnMJPSBvbWFwMzR4eF9sM19tYXN0ZXJzLAotCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDM0eHhfbDNfbWFzdGVycyksCi0JLnNsYXZlcwkJPSBvbWFwMzR4eF9sM19zbGF2ZXMsCi0JLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzNHh4X2wzX3NsYXZlcyksCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi19OwotCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDM0eHhfbDRfd2t1cF9od21vZDsKLQotLyogTDRfQ09SRSAtPiBMNF9XS1VQIGludGVyZmFjZSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwMzR4eF9sNF9jb3JlX19sNF93a3VwID0gewotCS5tYXN0ZXIJPSAmb21hcDM0eHhfbDRfY29yZV9od21vZCwKLQkuc2xhdmUJPSAmb21hcDM0eHhfbDRfd2t1cF9od21vZCwKLQkudXNlcgk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCi19OwotCi0vKiBTbGF2ZSBpbnRlcmZhY2VzIG9uIHRoZSBMNF9DT1JFIGludGVyY29ubmVjdCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDM0eHhfbDRfY29yZV9zbGF2ZXNbXSA9IHsKLQkmb21hcDM0eHhfbDNfX2w0X2NvcmUsCi19OwotCi0vKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDRfQ09SRSBpbnRlcmNvbm5lY3QgKi8KLXN0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzNHh4X2w0X2NvcmVfbWFzdGVyc1tdID0gewotCSZvbWFwMzR4eF9sNF9jb3JlX19sNF93a3VwLAotfTsKLQotLyogTDQgQ09SRSAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzNHh4X2w0X2NvcmVfaHdtb2QgPSB7Ci0JLm5hbWUJCT0gImw0X2NvcmVfaHdtb2QiLAotCS5tYXN0ZXJzCT0gb21hcDM0eHhfbDRfY29yZV9tYXN0ZXJzLAotCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDM0eHhfbDRfY29yZV9tYXN0ZXJzKSwKLQkuc2xhdmVzCQk9IG9tYXAzNHh4X2w0X2NvcmVfc2xhdmVzLAotCS5zbGF2ZXNfY250CT0gQVJSQVlfU0laRShvbWFwMzR4eF9sNF9jb3JlX3NsYXZlcyksCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi19OwotCi0vKiBTbGF2ZSBpbnRlcmZhY2VzIG9uIHRoZSBMNF9QRVIgaW50ZXJjb25uZWN0ICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMzR4eF9sNF9wZXJfc2xhdmVzW10gPSB7Ci0JJm9tYXAzNHh4X2wzX19sNF9wZXIsCi19OwotCi0vKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDRfUEVSIGludGVyY29ubmVjdCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDM0eHhfbDRfcGVyX21hc3RlcnNbXSA9IHsKLX07Ci0KLS8qIEw0IFBFUiAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzNHh4X2w0X3Blcl9od21vZCA9IHsKLQkubmFtZQkJPSAibDRfcGVyX2h3bW9kIiwKLQkubWFzdGVycwk9IG9tYXAzNHh4X2w0X3Blcl9tYXN0ZXJzLAotCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDM0eHhfbDRfcGVyX21hc3RlcnMpLAotCS5zbGF2ZXMJCT0gb21hcDM0eHhfbDRfcGVyX3NsYXZlcywKLQkuc2xhdmVzX2NudAk9IEFSUkFZX1NJWkUob21hcDM0eHhfbDRfcGVyX3NsYXZlcyksCi0JLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi19OwotCi0vKiBTbGF2ZSBpbnRlcmZhY2VzIG9uIHRoZSBMNF9XS1VQIGludGVyY29ubmVjdCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDM0eHhfbDRfd2t1cF9zbGF2ZXNbXSA9IHsKLQkmb21hcDM0eHhfbDRfY29yZV9fbDRfd2t1cCwKLX07Ci0KLS8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBMNF9XS1VQIGludGVyY29ubmVjdCAqLwotc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDM0eHhfbDRfd2t1cF9tYXN0ZXJzW10gPSB7Ci19OwotCi0vKiBMNCBXS1VQICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDM0eHhfbDRfd2t1cF9od21vZCA9IHsKLQkubmFtZQkJPSAibDRfd2t1cF9od21vZCIsCi0JLm1hc3RlcnMJPSBvbWFwMzR4eF9sNF93a3VwX21hc3RlcnMsCi0JLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwMzR4eF9sNF93a3VwX21hc3RlcnMpLAotCS5zbGF2ZXMJCT0gb21hcDM0eHhfbDRfd2t1cF9zbGF2ZXMsCi0JLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzNHh4X2w0X3drdXBfc2xhdmVzKSwKLQkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLX07Ci0KLS8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBNUFUgZGV2aWNlICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwMzR4eF9tcHVfbWFzdGVyc1tdID0gewotCSZvbWFwMzR4eF9tcHVfX2wzLAotfTsKLQotLyogTVBVICovCi1zdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDM0eHhfbXB1X2h3bW9kID0gewotCS5uYW1lCQk9ICJtcHVfaHdtb2QiLAotCS5jbGtkZXZfZGV2X2lkCT0gTlVMTCwKLQkuY2xrZGV2X2Nvbl9pZAk9ICJhcm1fZmNrIiwKLQkubWFzdGVycwk9IG9tYXAzNHh4X21wdV9tYXN0ZXJzLAotCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDM0eHhfbXB1X21hc3RlcnMpLAotCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKLX07Ci0KLXN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvbWFwX2h3bW9kICpvbWFwMzR4eF9od21vZHNbXSA9IHsKLQkmb21hcDM0eHhfbDNfaHdtb2QsCi0JJm9tYXAzNHh4X2w0X2NvcmVfaHdtb2QsCi0JJm9tYXAzNHh4X2w0X3Blcl9od21vZCwKLQkmb21hcDM0eHhfbDRfd2t1cF9od21vZCwKLQkmb21hcDM0eHhfbXB1X2h3bW9kLAotCU5VTEwsCi19OwotCi0jZWxzZQotIyBkZWZpbmUgb21hcDM0eHhfaHdtb2RzCQkwCi0jZW5kaWYKLQotI2VuZGlmCi0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzN4eHhfZGF0YS5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kXzN4eHhfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkNjA4NDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfM3h4eF9kYXRhLmMKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiBvbWFwX2h3bW9kXzN4eHhfZGF0YS5jIC0gaGFyZHdhcmUgbW9kdWxlcyBwcmVzZW50IG9uIHRoZSBPTUFQM3h4eCBjaGlwcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKiBQYXVsIFdhbG1zbGV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGUgZGF0YSBpbiB0aGlzIGZpbGUgc2hvdWxkIGJlIGNvbXBsZXRlbHkgYXV0b2dlbmVyYXRhYmxlIGZyb20KKyAqIHRoZSBUSSBoYXJkd2FyZSBkYXRhYmFzZSBvciBvdGhlciB0ZWNobmljYWwgZG9jdW1lbnRhdGlvbi4KKyAqCisgKiBYWFggdGhlc2Ugc2hvdWxkIGJlIG1hcmtlZCBpbml0ZGF0YSBmb3IgbXVsdGktT01BUCBrZXJuZWxzCisgKi8KKyNpbmNsdWRlIDxwbGF0L29tYXBfaHdtb2QuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZG1hLmg+CisKKyNpbmNsdWRlICJvbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmgiCisKKyNpbmNsdWRlICJwcm0tcmVnYml0cy0zNHh4LmgiCisKKy8qCisgKiBPTUFQM3h4eCBoYXJkd2FyZSBtb2R1bGUgaW50ZWdyYXRpb24gZGF0YQorICoKKyAqIEFMbCBvZiB0aGUgZGF0YSBpbiB0aGlzIHNlY3Rpb24gc2hvdWxkIGJlIGF1dG9nZW5lcmF0YWJsZSBmcm9tIHRoZQorICogVEkgaGFyZHdhcmUgZGF0YWJhc2Ugb3Igb3RoZXIgdGVjaG5pY2FsIGRvY3VtZW50YXRpb24uICBEYXRhIHRoYXQKKyAqIGlzIGRyaXZlci1zcGVjaWZpYyBvciBkcml2ZXIta2VybmVsIGludGVncmF0aW9uLXNwZWNpZmljIGJlbG9uZ3MKKyAqIGVsc2V3aGVyZS4KKyAqLworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbXB1X2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2wzX2h3bW9kOworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2w0X2NvcmVfaHdtb2Q7CitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbDRfcGVyX2h3bW9kOworCisvKiBMMyAtPiBMNF9DT1JFIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwM3h4eF9sM19fbDRfY29yZSA9IHsKKwkubWFzdGVyCT0gJm9tYXAzeHh4X2wzX2h3bW9kLAorCS5zbGF2ZQk9ICZvbWFwM3h4eF9sNF9jb3JlX2h3bW9kLAorCS51c2VyCT0gT0NQX1VTRVJfTVBVIHwgT0NQX1VTRVJfU0RNQSwKK307CisKKy8qIEwzIC0+IEw0X1BFUiBpbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgb21hcDN4eHhfbDNfX2w0X3BlciA9IHsKKwkubWFzdGVyID0gJm9tYXAzeHh4X2wzX2h3bW9kLAorCS5zbGF2ZQk9ICZvbWFwM3h4eF9sNF9wZXJfaHdtb2QsCisJLnVzZXIJPSBPQ1BfVVNFUl9NUFUgfCBPQ1BfVVNFUl9TRE1BLAorfTsKKworLyogTVBVIC0+IEwzIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwM3h4eF9tcHVfX2wzID0geworCS5tYXN0ZXIgPSAmb21hcDN4eHhfbXB1X2h3bW9kLAorCS5zbGF2ZQk9ICZvbWFwM3h4eF9sM19od21vZCwKKwkudXNlcgk9IE9DUF9VU0VSX01QVSwKK307CisKKy8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEwzIGludGVyY29ubmVjdCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfbDNfc2xhdmVzW10gPSB7CisJJm9tYXAzeHh4X21wdV9fbDMsCit9OworCisvKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDMgaW50ZXJjb25uZWN0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9sM19tYXN0ZXJzW10gPSB7CisJJm9tYXAzeHh4X2wzX19sNF9jb3JlLAorCSZvbWFwM3h4eF9sM19fbDRfcGVyLAorfTsKKworLyogTDMgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZCBvbWFwM3h4eF9sM19od21vZCA9IHsKKwkubmFtZQkJPSAibDNfaHdtb2QiLAorCS5jbGFzcwkJPSAmbDNfaHdtb2RfY2xhc3MsCisJLm1hc3RlcnMJPSBvbWFwM3h4eF9sM19tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbDNfbWFzdGVycyksCisJLnNsYXZlcwkJPSBvbWFwM3h4eF9sM19zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2wzX3NsYXZlcyksCisJLm9tYXBfY2hpcAk9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCit9OworCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbDRfd2t1cF9od21vZDsKKworLyogTDRfQ09SRSAtPiBMNF9XS1VQIGludGVyZmFjZSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiBvbWFwM3h4eF9sNF9jb3JlX19sNF93a3VwID0geworCS5tYXN0ZXIJPSAmb21hcDN4eHhfbDRfY29yZV9od21vZCwKKwkuc2xhdmUJPSAmb21hcDN4eHhfbDRfd2t1cF9od21vZCwKKwkudXNlcgk9IE9DUF9VU0VSX01QVSB8IE9DUF9VU0VSX1NETUEsCit9OworCisvKiBTbGF2ZSBpbnRlcmZhY2VzIG9uIHRoZSBMNF9DT1JFIGludGVyY29ubmVjdCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kX29jcF9pZiAqb21hcDN4eHhfbDRfY29yZV9zbGF2ZXNbXSA9IHsKKwkmb21hcDN4eHhfbDNfX2w0X2NvcmUsCit9OworCisvKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDRfQ09SRSBpbnRlcmNvbm5lY3QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X2w0X2NvcmVfbWFzdGVyc1tdID0geworCSZvbWFwM3h4eF9sNF9jb3JlX19sNF93a3VwLAorfTsKKworLyogTDQgQ09SRSAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2w0X2NvcmVfaHdtb2QgPSB7CisJLm5hbWUJCT0gImw0X2NvcmVfaHdtb2QiLAorCS5jbGFzcwkJPSAmbDRfaHdtb2RfY2xhc3MsCisJLm1hc3RlcnMJPSBvbWFwM3h4eF9sNF9jb3JlX21hc3RlcnMsCisJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9sNF9jb3JlX21hc3RlcnMpLAorCS5zbGF2ZXMJCT0gb21hcDN4eHhfbDRfY29yZV9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2w0X2NvcmVfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKK307CisKKy8qIFNsYXZlIGludGVyZmFjZXMgb24gdGhlIEw0X1BFUiBpbnRlcmNvbm5lY3QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X2w0X3Blcl9zbGF2ZXNbXSA9IHsKKwkmb21hcDN4eHhfbDNfX2w0X3BlciwKK307CisKKy8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBMNF9QRVIgaW50ZXJjb25uZWN0ICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9sNF9wZXJfbWFzdGVyc1tdID0geworfTsKKworLyogTDQgUEVSICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbDRfcGVyX2h3bW9kID0geworCS5uYW1lCQk9ICJsNF9wZXJfaHdtb2QiLAorCS5jbGFzcwkJPSAmbDRfaHdtb2RfY2xhc3MsCisJLm1hc3RlcnMJPSBvbWFwM3h4eF9sNF9wZXJfbWFzdGVycywKKwkubWFzdGVyc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2w0X3Blcl9tYXN0ZXJzKSwKKwkuc2xhdmVzCQk9IG9tYXAzeHh4X2w0X3Blcl9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2w0X3Blcl9zbGF2ZXMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQorfTsKKworLyogU2xhdmUgaW50ZXJmYWNlcyBvbiB0aGUgTDRfV0tVUCBpbnRlcmNvbm5lY3QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X2w0X3drdXBfc2xhdmVzW10gPSB7CisJJm9tYXAzeHh4X2w0X2NvcmVfX2w0X3drdXAsCit9OworCisvKiBNYXN0ZXIgaW50ZXJmYWNlcyBvbiB0aGUgTDRfV0tVUCBpbnRlcmNvbm5lY3QgKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9od21vZF9vY3BfaWYgKm9tYXAzeHh4X2w0X3drdXBfbWFzdGVyc1tdID0geworfTsKKworLyogTDQgV0tVUCAqLworc3RhdGljIHN0cnVjdCBvbWFwX2h3bW9kIG9tYXAzeHh4X2w0X3drdXBfaHdtb2QgPSB7CisJLm5hbWUJCT0gImw0X3drdXBfaHdtb2QiLAorCS5jbGFzcwkJPSAmbDRfaHdtb2RfY2xhc3MsCisJLm1hc3RlcnMJPSBvbWFwM3h4eF9sNF93a3VwX21hc3RlcnMsCisJLm1hc3RlcnNfY250CT0gQVJSQVlfU0laRShvbWFwM3h4eF9sNF93a3VwX21hc3RlcnMpLAorCS5zbGF2ZXMJCT0gb21hcDN4eHhfbDRfd2t1cF9zbGF2ZXMsCisJLnNsYXZlc19jbnQJPSBBUlJBWV9TSVpFKG9tYXAzeHh4X2w0X3drdXBfc2xhdmVzKSwKKwkub21hcF9jaGlwCT0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKK307CisKKy8qIE1hc3RlciBpbnRlcmZhY2VzIG9uIHRoZSBNUFUgZGV2aWNlICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmICpvbWFwM3h4eF9tcHVfbWFzdGVyc1tdID0geworCSZvbWFwM3h4eF9tcHVfX2wzLAorfTsKKworLyogTVBVICovCitzdGF0aWMgc3RydWN0IG9tYXBfaHdtb2Qgb21hcDN4eHhfbXB1X2h3bW9kID0geworCS5uYW1lCQk9ICJtcHVfaHdtb2QiLAorCS5jbGFzcwkJPSAmbXB1X2h3bW9kX2NsYXNzLAorCS5tYWluX2Nsawk9ICJhcm1fZmNrIiwKKwkubWFzdGVycwk9IG9tYXAzeHh4X21wdV9tYXN0ZXJzLAorCS5tYXN0ZXJzX2NudAk9IEFSUkFZX1NJWkUob21hcDN4eHhfbXB1X21hc3RlcnMpLAorCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKK307CisKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvbWFwX2h3bW9kICpvbWFwM3h4eF9od21vZHNbXSA9IHsKKwkmb21hcDN4eHhfbDNfaHdtb2QsCisJJm9tYXAzeHh4X2w0X2NvcmVfaHdtb2QsCisJJm9tYXAzeHh4X2w0X3Blcl9od21vZCwKKwkmb21hcDN4eHhfbDRfd2t1cF9od21vZCwKKwkmb21hcDN4eHhfbXB1X2h3bW9kLAorCU5VTEwsCit9OworCitpbnQgX19pbml0IG9tYXAzeHh4X2h3bW9kX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb21hcF9od21vZF9pbml0KG9tYXAzeHh4X2h3bW9kcyk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL29tYXBfaHdtb2RfY29tbW9uX2RhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTgwYjkxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmMKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIG9tYXBfaHdtb2QgY29tbW9uIGRhdGEgc3RydWN0dXJlcworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogVGhhcmEgR29waW5hdGggPHRoYXJhQHRpLmNvbT4KKyAqIEJlbm/DrnQgQ291c3NvbgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICogUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBkYXRhL3N0cnVjdHVyZXMgYXJlIHRvIGJlIHVzZWQgd2hpbGUgZGVmaW5pbmcgT01BUCBvbi1jaGlwIG1vZHVsZQorICogZGF0YSBhbmQgdGhlaXIgaW50ZWdyYXRpb24gd2l0aCBvdGhlciBPTUFQIG1vZHVsZXMgYW5kIExpbnV4LgorICovCisKKyNpbmNsdWRlIDxwbGF0L29tYXBfaHdtb2QuaD4KKworI2luY2x1ZGUgIm9tYXBfaHdtb2RfY29tbW9uX2RhdGEuaCIKKworLyoqCisgKiBzdHJ1Y3Qgb21hcF9od21vZF9zeXNjX3R5cGUxIC0gVFlQRTEgc3lzY29uZmlnIHNjaGVtZS4KKyAqCisgKiBUbyBiZSB1c2VkIGJ5IGh3bW9kIHN0cnVjdHVyZSB0byBzcGVjaWZ5IHRoZSBzeXNjb25maWcgb2Zmc2V0cworICogaWYgdGhlIGRldmljZSBpcCBpcyBjb21wbGlhbnQgd2l0aCB0aGUgb3JpZ2luYWwgUFJDTSBwcm90b2NvbAorICogZGVmaW5lZCBmb3IgT01BUDI0MjAuCisgKi8KK3N0cnVjdCBvbWFwX2h3bW9kX3N5c2NfZmllbGRzIG9tYXBfaHdtb2Rfc3lzY190eXBlMSA9IHsKKwkubWlkbGVfc2hpZnQJPSBTWVNDX1RZUEUxX01JRExFTU9ERV9TSElGVCwKKwkuY2xrYWN0X3NoaWZ0CT0gU1lTQ19UWVBFMV9DTE9DS0FDVElWSVRZX1NISUZULAorCS5zaWRsZV9zaGlmdAk9IFNZU0NfVFlQRTFfU0lETEVNT0RFX1NISUZULAorCS5lbndrdXBfc2hpZnQJPSBTWVNDX1RZUEUxX0VOQVdBS0VVUF9TSElGVCwKKwkuc3JzdF9zaGlmdAk9IFNZU0NfVFlQRTFfU09GVFJFU0VUX1NISUZULAorCS5hdXRvaWRsZV9zaGlmdAk9IFNZU0NfVFlQRTFfQVVUT0lETEVfU0hJRlQsCit9OworCisvKioKKyAqIHN0cnVjdCBvbWFwX2h3bW9kX3N5c2NfdHlwZTIgLSBUWVBFMiBzeXNjb25maWcgc2NoZW1lLgorICoKKyAqIFRvIGJlIHVzZWQgYnkgaHdtb2Qgc3RydWN0dXJlIHRvIHNwZWNpZnkgdGhlIHN5c2NvbmZpZyBvZmZzZXRzIGlmIHRoZQorICogZGV2aWNlIGlwIGlzIGNvbXBsaWFudCB3aXRoIHRoZSBuZXcgUFJDTSBwcm90b2NvbCBkZWZpbmVkIGZvciBuZXcKKyAqIE9NQVA0IElQcy4KKyAqLworc3RydWN0IG9tYXBfaHdtb2Rfc3lzY19maWVsZHMgb21hcF9od21vZF9zeXNjX3R5cGUyID0geworCS5taWRsZV9zaGlmdAk9IFNZU0NfVFlQRTJfTUlETEVNT0RFX1NISUZULAorCS5zaWRsZV9zaGlmdAk9IFNZU0NfVFlQRTJfU0lETEVNT0RFX1NISUZULAorCS5zcnN0X3NoaWZ0CT0gU1lTQ19UWVBFMl9TT0ZUUkVTRVRfU0hJRlQsCit9OworCisKKy8qCisgKiBvbWFwX2h3bW9kIGNsYXNzIGRhdGEKKyAqLworCitzdHJ1Y3Qgb21hcF9od21vZF9jbGFzcyBsM19od21vZF9jbGFzcyA9IHsKKwkubmFtZSA9ICJsMyIKK307CisKK3N0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIGw0X2h3bW9kX2NsYXNzID0geworCS5uYW1lID0gImw0IgorfTsKKworc3RydWN0IG9tYXBfaHdtb2RfY2xhc3MgbXB1X2h3bW9kX2NsYXNzID0geworCS5uYW1lID0gIm1wdSIKK307CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF9jb21tb25fZGF0YS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9vbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY0NWEyOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb21hcF9od21vZF9jb21tb25fZGF0YS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBvbWFwX2h3bW9kX2NvbW1vbl9kYXRhLmggLSBPTUFQIGh3bW9kIGNvbW1vbiBtYWNyb3MgYW5kIGRlY2xhcmF0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICogUGF1bCBXYWxtc2xleQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogQmVub8OudCBDb3Vzc29uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfT01BUF9IV01PRF9DT01NT05fREFUQV9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9PTUFQX0hXTU9EX0NPTU1PTl9EQVRBX0gKKworI2luY2x1ZGUgPHBsYXQvb21hcF9od21vZC5oPgorCisvKiBPTUFQIGh3bW9kIGNsYXNzZXMgLSBmb3J3YXJkIGRlY2xhcmF0aW9ucyAqLworZXh0ZXJuIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIGwzX2h3bW9kX2NsYXNzOworZXh0ZXJuIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIGw0X2h3bW9kX2NsYXNzOworZXh0ZXJuIHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIG1wdV9od21vZF9jbGFzczsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL29wcDJ4eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvb3BwMnh4eC5oCmluZGV4IGVkNmRmMDQuLjM4YjczMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvb3BwMnh4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvb3BwMnh4eC5oCkBAIC00MTcsNyArNDE3LDEyIEBACiAKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwcmNtX2NvbmZpZyBvbWFwMjQyMF9yYXRlX3RhYmxlW107CisKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjQzMAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwcmNtX2NvbmZpZyBvbWFwMjQzMF9yYXRlX3RhYmxlW107CisjZWxzZQorI2RlZmluZSBvbWFwMjQzMF9yYXRlX3RhYmxlCU5VTEwKKyNlbmRpZgogZXh0ZXJuIGNvbnN0IHN0cnVjdCBwcmNtX2NvbmZpZyAqcmF0ZV90YWJsZTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgcHJjbV9jb25maWcgKmN1cnJfcHJjbV9zZXQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0tZGVidWcuYwppbmRleCBhMDg2NjI2Li5jMThmN2YyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLWRlYnVnLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS1kZWJ1Zy5jCkBAIC02Nyw5ICs2Nyw5IEBACiAjaWYgMAogCQkvKiBNUFUgKi8KIAkJRFVNUF9QUk1fTU9EX1JFRyhPQ1BfTU9ELCBPTUFQMl9QUk1fSVJRRU5BQkxFX01QVV9PRkZTRVQpOwotCQlEVU1QX0NNX01PRF9SRUcoTVBVX01PRCwgQ01fQ0xLU1RDVFJMKTsKLQkJRFVNUF9QUk1fTU9EX1JFRyhNUFVfTU9ELCBQTV9QV1NUQ1RSTCk7Ci0JCURVTVBfUFJNX01PRF9SRUcoTVBVX01PRCwgUE1fUFdTVFNUKTsKKwkJRFVNUF9DTV9NT0RfUkVHKE1QVV9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CisJCURVTVBfUFJNX01PRF9SRUcoTVBVX01PRCwgT01BUDJfUE1fUFdTVENUUkwpOworCQlEVU1QX1BSTV9NT0RfUkVHKE1QVV9NT0QsIE9NQVAyX1BNX1BXU1RTVCk7CiAJCURVTVBfUFJNX01PRF9SRUcoTVBVX01PRCwgUE1fV0tERVApOwogI2VuZGlmCiAjaWYgMApAQCAtOTMsNyArOTMsNyBAQAogCQlEVU1QX0NNX01PRF9SRUcoV0tVUF9NT0QsIENNX0lDTEtFTik7CiAJCURVTVBfQ01fTU9EX1JFRyhQTExfTU9ELCBDTV9DTEtFTik7CiAJCURVTVBfQ01fTU9EX1JFRyhQTExfTU9ELCBDTV9BVVRPSURMRSk7Ci0JCURVTVBfUFJNX01PRF9SRUcoQ09SRV9NT0QsIFBNX1BXU1RTVCk7CisJCURVTVBfUFJNX01PRF9SRUcoQ09SRV9NT0QsIE9NQVAyX1BNX1BXU1RTVCk7CiAjZW5kaWYKICNpZiAwCiAJCS8qIERTUCAqLwpAQCAtMTAzLDExICsxMDMsMTEgQEAKIAkJCURVTVBfQ01fTU9EX1JFRyhPTUFQMjRYWF9EU1BfTU9ELCBDTV9JRExFU1QpOwogCQkJRFVNUF9DTV9NT0RfUkVHKE9NQVAyNFhYX0RTUF9NT0QsIENNX0FVVE9JRExFKTsKIAkJCURVTVBfQ01fTU9EX1JFRyhPTUFQMjRYWF9EU1BfTU9ELCBDTV9DTEtTRUwpOwotCQkJRFVNUF9DTV9NT0RfUkVHKE9NQVAyNFhYX0RTUF9NT0QsIENNX0NMS1NUQ1RSTCk7Ci0JCQlEVU1QX1BSTV9NT0RfUkVHKE9NQVAyNFhYX0RTUF9NT0QsIFJNX1JTVENUUkwpOwotCQkJRFVNUF9QUk1fTU9EX1JFRyhPTUFQMjRYWF9EU1BfTU9ELCBSTV9SU1RTVCk7Ci0JCQlEVU1QX1BSTV9NT0RfUkVHKE9NQVAyNFhYX0RTUF9NT0QsIFBNX1BXU1RDVFJMKTsKLQkJCURVTVBfUFJNX01PRF9SRUcoT01BUDI0WFhfRFNQX01PRCwgUE1fUFdTVFNUKTsKKwkJCURVTVBfQ01fTU9EX1JFRyhPTUFQMjRYWF9EU1BfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOworCQkJRFVNUF9QUk1fTU9EX1JFRyhPTUFQMjRYWF9EU1BfTU9ELCBPTUFQMl9STV9SU1RDVFJMKTsKKwkJCURVTVBfUFJNX01PRF9SRUcoT01BUDI0WFhfRFNQX01PRCwgT01BUDJfUk1fUlNUU1QpOworCQkJRFVNUF9QUk1fTU9EX1JFRyhPTUFQMjRYWF9EU1BfTU9ELCBPTUFQMl9QTV9QV1NUQ1RSTCk7CisJCQlEVU1QX1BSTV9NT0RfUkVHKE9NQVAyNFhYX0RTUF9NT0QsIE9NQVAyX1BNX1BXU1RTVCk7CiAJCX0KICNlbmRpZgogCX0gZWxzZSB7CkBAIC0zODUsNiArMzg1LDExIEBACiAJCXNlcV9wcmludGYocywgIiwlczolZCIsIHB3cmRtX3N0YXRlX25hbWVzW2ldLAogCQkJcHdyZG0tPnN0YXRlX2NvdW50ZXJbaV0pOwogCisJc2VxX3ByaW50ZihzLCAiLFJFVC1MT0dJQy1PRkY6JWQiLCBwd3JkbS0+cmV0X2xvZ2ljX29mZl9jb3VudGVyKTsKKwlmb3IgKGkgPSAwOyBpIDwgcHdyZG0tPmJhbmtzOyBpKyspCisJCXNlcV9wcmludGYocywgIixSRVQtTUVNQkFOSyVkLU9GRjolZCIsIGkgKyAxLAorCQkJCXB3cmRtLT5yZXRfbWVtX29mZl9jb3VudGVyW2ldKTsKKwogCXNlcV9wcmludGYocywgIlxuIik7CiAKIAlyZXR1cm4gMDsKQEAgLTU3Nyw3ICs1ODIsNyBAQAogCSh2b2lkKSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJ0aW1lIiwgU19JUlVHTywKIAkJZCwgKHZvaWQgKilERUJVR19GSUxFX1RJTUVSUywgJmRlYnVnX2ZvcHMpOwogCi0JcHdyZG1fZm9yX2VhY2hfbm9sb2NrKHB3cmRtc19zZXR1cCwgKHZvaWQgKilkKTsKKwlwd3JkbV9mb3JfZWFjaChwd3JkbXNfc2V0dXAsICh2b2lkICopZCk7CiAKIAlwbV9kYmdfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJyZWdpc3RlcnMiLCBkKTsKIAlpZiAoSVNfRVJSKHBtX2RiZ19kaXIpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbS5oCmluZGV4IDdhOWMyZDAuLmJkNjQ2NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG0uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtLmgKQEAgLTIzLDYgKzIzLDIyIEBACiBleHRlcm4gaW50IHNldF9wd3JkbV9zdGF0ZShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1MzIgc3RhdGUpOwogZXh0ZXJuIGludCBvbWFwM19pZGxlX2luaXQodm9pZCk7CiAKK3N0cnVjdCBjcHVpZGxlX3BhcmFtcyB7CisJdTggIHZhbGlkOworCXUzMiBzbGVlcF9sYXRlbmN5OworCXUzMiB3YWtlX2xhdGVuY3k7CisJdTMyIHRocmVzaG9sZDsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19QTSkgJiYgZGVmaW5lZChDT05GSUdfQ1BVX0lETEUpCitleHRlcm4gdm9pZCBvbWFwM19wbV9pbml0X2NwdWlkbGUoc3RydWN0IGNwdWlkbGVfcGFyYW1zICpjcHVpZGxlX2JvYXJkX3BhcmFtcyk7CisjZWxzZQorc3RhdGljCitpbmxpbmUgdm9pZCBvbWFwM19wbV9pbml0X2NwdWlkbGUoc3RydWN0IGNwdWlkbGVfcGFyYW1zICpjcHVpZGxlX2JvYXJkX3BhcmFtcykKK3sKK30KKyNlbmRpZgorCiBleHRlcm4gaW50IG9tYXAzX3BtX2dldF9zdXNwZW5kX3N0YXRlKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOwogZXh0ZXJuIGludCBvbWFwM19wbV9zZXRfc3VzcGVuZF9zdGF0ZShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCBpbnQgc3RhdGUpOwogCkBAIC0zNyw2ICs1MywxMCBAQAogI2RlZmluZSBvbWFwMl9wbV9kZWJ1ZwkJCQkwCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9JRExFKQorZXh0ZXJuIHZvaWQgb21hcDNfY3B1aWRsZV91cGRhdGVfc3RhdGVzKHZvaWQpOworI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19QTV9ERUJVRykgJiYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCiBleHRlcm4gdm9pZCBwbV9kYmdfdXBkYXRlX3RpbWUoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgaW50IHByZXYpOwogZXh0ZXJuIGludCBwbV9kYmdfcmVnc2V0X3NhdmUoaW50IHJlZ19zZXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTI0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0yNHh4LmMKaW5kZXggY2JhMDViOS4uMzc0Mjk5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTI0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMjR4eC5jCkBAIC01NywxMSArNTcsOCBAQAogc3RhdGljIHZvaWQgKCpvbWFwMl9zcmFtX3N1c3BlbmQpKHUzMiBkbGxjdHJsLCB2b2lkIF9faW9tZW0gKnNkcmNfZGxsYV9jdHJsLAogCQkJCSAgdm9pZCBfX2lvbWVtICpzZHJjX3Bvd2VyKTsKIAotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiAqbXB1X3B3cmRtOwotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiAqY29yZV9wd3JkbTsKLQotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiAqZHNwX2Nsa2RtOwotc3RhdGljIHN0cnVjdCBjbG9ja2RvbWFpbiAqZ2Z4X2Nsa2RtOworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiAqbXB1X3B3cmRtLCAqY29yZV9wd3JkbTsKK3N0YXRpYyBzdHJ1Y3QgY2xvY2tkb21haW4gKmRzcF9jbGtkbSwgKm1wdV9jbGtkbSwgKndrdXBfY2xrZG0sICpnZnhfY2xrZG07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrICpvc2NfY2ssICplbXVsX2NrOwogCkBAIC0yMTksMTEgKzIxNiwxMiBAQAogCQkvKiBUcnkgdG8gZW50ZXIgTVBVIHJldGVudGlvbiAqLwogCQlwcm1fd3JpdGVfbW9kX3JlZygoMHgwMSA8PCBPTUFQX1BPV0VSU1RBVEVfU0hJRlQpIHwKIAkJCQkgIE9NQVBfTE9HSUNSRVRTVEFURSwKLQkJCQkgIE1QVV9NT0QsIFBNX1BXU1RDVFJMKTsKKwkJCQkgIE1QVV9NT0QsIE9NQVAyX1BNX1BXU1RDVFJMKTsKIAl9IGVsc2UgewogCQkvKiBCbG9jayBNUFUgcmV0ZW50aW9uICovCiAKLQkJcHJtX3dyaXRlX21vZF9yZWcoT01BUF9MT0dJQ1JFVFNUQVRFLCBNUFVfTU9ELCBQTV9QV1NUQ1RSTCk7CisJCXBybV93cml0ZV9tb2RfcmVnKE9NQVBfTE9HSUNSRVRTVEFURSwgTVBVX01PRCwKKwkJCQkJCSBPTUFQMl9QTV9QV1NUQ1RSTCk7CiAJCW9ubHlfaWRsZSA9IDE7CiAJfQogCkBAIC0zMzMsOSArMzMxLDE3IEBACiAJLnZhbGlkCQk9IHN1c3BlbmRfdmFsaWRfb25seV9tZW0sCiB9OwogCi1zdGF0aWMgaW50IF9wbV9jbGtkbV9lbmFibGVfaHdzdXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSwgdm9pZCAqdW51c2VkKQorLyogWFhYIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIHNoYXJlYWJsZSBiZXR3ZWVuIE9NQVAyeHh4IGFuZCBPTUFQMyAqLworc3RhdGljIGludCBfX2luaXQgY2xrZG1zX3NldHVwKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIHZvaWQgKnVudXNlZCkKIHsKLQlvbWFwMl9jbGtkbV9hbGxvd19pZGxlKGNsa2RtKTsKKwljbGtkbV9jbGVhcl9hbGxfd2tkZXBzKGNsa2RtKTsKKwljbGtkbV9jbGVhcl9hbGxfc2xlZXBkZXBzKGNsa2RtKTsKKworCWlmIChjbGtkbS0+ZmxhZ3MgJiBDTEtETV9DQU5fRU5BQkxFX0FVVE8pCisJCW9tYXAyX2Nsa2RtX2FsbG93X2lkbGUoY2xrZG0pOworCWVsc2UgaWYgKGNsa2RtLT5mbGFncyAmIENMS0RNX0NBTl9GT1JDRV9TTEVFUCAmJgorCQkgYXRvbWljX3JlYWQoJmNsa2RtLT51c2Vjb3VudCkgPT0gMCkKKwkJb21hcDJfY2xrZG1fc2xlZXAoY2xrZG0pOwogCXJldHVybiAwOwogfQogCkBAIC0zNDgsMTQgKzM1NCw2IEBACiAJcHJtX3dyaXRlX21vZF9yZWcoT01BUDI0WFhfQVVUT0lETEUsIE9DUF9NT0QsCiAJCQkgIE9NQVAyX1BSQ01fU1lTQ09ORklHX09GRlNFVCk7CiAKLQkvKiBTZXQgYWxsIGRvbWFpbiB3YWtldXAgZGVwZW5kZW5jaWVzICovCi0JcHJtX3dyaXRlX21vZF9yZWcoT01BUF9FTl9XS1VQX01BU0ssIE1QVV9NT0QsIFBNX1dLREVQKTsKLQlwcm1fd3JpdGVfbW9kX3JlZygwLCBPTUFQMjRYWF9EU1BfTU9ELCBQTV9XS0RFUCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcoMCwgR0ZYX01PRCwgUE1fV0tERVApOwotCXBybV93cml0ZV9tb2RfcmVnKDAsIENPUkVfTU9ELCBQTV9XS0RFUCk7Ci0JaWYgKGNwdV9pc19vbWFwMjQzMCgpKQotCQlwcm1fd3JpdGVfbW9kX3JlZygwLCBPTUFQMjQzMF9NRE1fTU9ELCBQTV9XS0RFUCk7Ci0KIAkvKgogCSAqIFNldCBDT1JFIHBvd2VyZG9tYWluIG1lbW9yeSBiYW5rcyB0byByZXRhaW4gdGhlaXIgY29udGVudHMKIAkgKiBkdXJpbmcgUkVURU5USU9OCkBAIC0zODQsOCArMzgyLDEyIEBACiAJcHdyZG1fc2V0X25leHRfcHdyc3QocHdyZG0sIFBXUkRNX1BPV0VSX09GRik7CiAJb21hcDJfY2xrZG1fc2xlZXAoZ2Z4X2Nsa2RtKTsKIAotCS8qIEVuYWJsZSBjbG9ja2RvbWFpbiBoYXJkd2FyZS1zdXBlcnZpc2VkIGNvbnRyb2wgZm9yIGFsbCBjbGtkbXMgKi8KLQljbGtkbV9mb3JfZWFjaChfcG1fY2xrZG1fZW5hYmxlX2h3c3VwLCBOVUxMKTsKKwkvKgorCSAqIENsZWFyIGNsb2NrZG9tYWluIHdha2V1cCBkZXBlbmRlbmNpZXMgYW5kIGVuYWJsZQorCSAqIGhhcmR3YXJlLXN1cGVydmlzZWQgaWRsZSBmb3IgYWxsIGNsa2RtcworCSAqLworCWNsa2RtX2Zvcl9lYWNoKGNsa2Rtc19zZXR1cCwgTlVMTCk7CisJY2xrZG1fYWRkX3drZGVwKG1wdV9jbGtkbSwgd2t1cF9jbGtkbSk7CiAKIAkvKiBFbmFibGUgY2xvY2sgYXV0b2lkbGUgZm9yIGFsbCBkb21haW5zICovCiAJY21fd3JpdGVfbW9kX3JlZyhPTUFQMjRYWF9BVVRPX0NBTSB8CkBAIC00ODEsNyArNDgzLDcgQEAKIAlsID0gcHJtX3JlYWRfbW9kX3JlZyhPQ1BfTU9ELCBPTUFQMl9QUkNNX1JFVklTSU9OX09GRlNFVCk7CiAJcHJpbnRrKEtFUk5fSU5GTyAiUFJDTSByZXZpc2lvbiAlZC4lZFxuIiwgKGwgPj4gNCkgJiAweDBmLCBsICYgMHgwZik7CiAKLQkvKiBMb29rIHVwIGltcG9ydGFudCBwb3dlcmRvbWFpbnMsIGNsb2NrZG9tYWlucyAqLworCS8qIExvb2sgdXAgaW1wb3J0YW50IHBvd2VyZG9tYWlucyAqLwogCiAJbXB1X3B3cmRtID0gcHdyZG1fbG9va3VwKCJtcHVfcHdyZG0iKTsKIAlpZiAoIW1wdV9wd3JkbSkKQEAgLTQ5MSw5ICs0OTMsMTkgQEAKIAlpZiAoIWNvcmVfcHdyZG0pCiAJCXByX2VycigiUE06IGNvcmVfcHdyZG0gbm90IGZvdW5kXG4iKTsKIAorCS8qIExvb2sgdXAgaW1wb3J0YW50IGNsb2NrZG9tYWlucyAqLworCisJbXB1X2Nsa2RtID0gY2xrZG1fbG9va3VwKCJtcHVfY2xrZG0iKTsKKwlpZiAoIW1wdV9jbGtkbSkKKwkJcHJfZXJyKCJQTTogbXB1X2Nsa2RtIG5vdCBmb3VuZFxuIik7CisKKwl3a3VwX2Nsa2RtID0gY2xrZG1fbG9va3VwKCJ3a3VwX2Nsa2RtIik7CisJaWYgKCF3a3VwX2Nsa2RtKQorCQlwcl9lcnIoIlBNOiB3a3VwX2Nsa2RtIG5vdCBmb3VuZFxuIik7CisKIAlkc3BfY2xrZG0gPSBjbGtkbV9sb29rdXAoImRzcF9jbGtkbSIpOwogCWlmICghZHNwX2Nsa2RtKQotCQlwcl9lcnIoIlBNOiBtcHVfY2xrZG0gbm90IGZvdW5kXG4iKTsKKwkJcHJfZXJyKCJQTTogZHNwX2Nsa2RtIG5vdCBmb3VuZFxuIik7CiAKIAlnZnhfY2xrZG0gPSBjbGtkbV9sb29rdXAoImdmeF9jbGtkbSIpOwogCWlmICghZ2Z4X2Nsa2RtKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG0zNHh4LmMKaW5kZXggOTEwYTdhYy4uZmVlMmVmYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wbTM0eHguYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BtMzR4eC5jCkBAIC02ODUsMTAgKzY4NSwxMCBAQAogCXBybV93cml0ZV9tb2RfcmVnKE9NQVAzNDMwX1JTVDFfSVZBMiB8CiAJCQkgIE9NQVAzNDMwX1JTVDJfSVZBMiB8CiAJCQkgIE9NQVAzNDMwX1JTVDNfSVZBMiwKLQkJCSAgT01BUDM0MzBfSVZBMl9NT0QsIFJNX1JTVENUUkwpOworCQkJICBPTUFQMzQzMF9JVkEyX01PRCwgT01BUDJfUk1fUlNUQ1RSTCk7CiAKIAkvKiBFbmFibGUgSVZBMiBjbG9jayAqLwotCWNtX3dyaXRlX21vZF9yZWcoT01BUDM0MzBfQ01fRkNMS0VOX0lWQTJfRU5fSVZBMiwKKwljbV93cml0ZV9tb2RfcmVnKE9NQVAzNDMwX0NNX0ZDTEtFTl9JVkEyX0VOX0lWQTJfTUFTSywKIAkJCSBPTUFQMzQzMF9JVkEyX01PRCwgQ01fRkNMS0VOKTsKIAogCS8qIFNldCBJVkEyIGJvb3QgbW9kZSB0byAnaWRsZScgKi8KQEAgLTY5Niw3ICs2OTYsNyBAQAogCQkJIE9NQVAzNDNYX0NPTlRST0xfSVZBMl9CT09UTU9EKTsKIAogCS8qIFVuLXJlc2V0IElWQTIgKi8KLQlwcm1fd3JpdGVfbW9kX3JlZygwLCBPTUFQMzQzMF9JVkEyX01PRCwgUk1fUlNUQ1RSTCk7CisJcHJtX3dyaXRlX21vZF9yZWcoMCwgT01BUDM0MzBfSVZBMl9NT0QsIE9NQVAyX1JNX1JTVENUUkwpOwogCiAJLyogRGlzYWJsZSBJVkEyIGNsb2NrICovCiAJY21fd3JpdGVfbW9kX3JlZygwLCBPTUFQMzQzMF9JVkEyX01PRCwgQ01fRkNMS0VOKTsKQEAgLTcwNSw3ICs3MDUsNyBAQAogCXBybV93cml0ZV9tb2RfcmVnKE9NQVAzNDMwX1JTVDFfSVZBMiB8CiAJCQkgIE9NQVAzNDMwX1JTVDJfSVZBMiB8CiAJCQkgIE9NQVAzNDMwX1JTVDNfSVZBMiwKLQkJCSAgT01BUDM0MzBfSVZBMl9NT0QsIFJNX1JTVENUUkwpOworCQkJICBPTUFQMzQzMF9JVkEyX01PRCwgT01BUDJfUk1fUlNUQ1RSTCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbWFwM19kMmRfaWRsZSh2b2lkKQpAQCAtNzI4LDggKzcyOCw4IEBACiAJLyogcmVzZXQgbW9kZW0gKi8KIAlwcm1fd3JpdGVfbW9kX3JlZyhPTUFQMzQzMF9STV9SU1RDVFJMX0NPUkVfTU9ERU1fU1dfUlNUUFdST04gfAogCQkJICBPTUFQMzQzMF9STV9SU1RDVFJMX0NPUkVfTU9ERU1fU1dfUlNULAotCQkJICBDT1JFX01PRCwgUk1fUlNUQ1RSTCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcoMCwgQ09SRV9NT0QsIFJNX1JTVENUUkwpOworCQkJICBDT1JFX01PRCwgT01BUDJfUk1fUlNUQ1RSTCk7CisJcHJtX3dyaXRlX21vZF9yZWcoMCwgQ09SRV9NT0QsIE9NQVAyX1JNX1JTVENUUkwpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgcHJjbV9zZXR1cF9yZWdzKHZvaWQpCkBAIC05MTYsMTMgKzkxNiwxMyBAQAogCXBybV93cml0ZV9tb2RfcmVnKDAsIE9NQVAzNDMwX1BFUl9NT0QsIE9NQVAzNDMwX1BNX0lWQUdSUFNFTCk7CiAKIAkvKiBDbGVhciBhbnkgcGVuZGluZyAncmVzZXQnIGZsYWdzICovCi0JcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgTVBVX01PRCwgUk1fUlNUU1QpOwotCXBybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIENPUkVfTU9ELCBSTV9SU1RTVCk7Ci0JcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgT01BUDM0MzBfUEVSX01PRCwgUk1fUlNUU1QpOwotCXBybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIE9NQVAzNDMwX0VNVV9NT0QsIFJNX1JTVFNUKTsKLQlwcm1fd3JpdGVfbW9kX3JlZygweGZmZmZmZmZmLCBPTUFQMzQzMF9ORU9OX01PRCwgUk1fUlNUU1QpOwotCXBybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIE9NQVAzNDMwX0RTU19NT0QsIFJNX1JTVFNUKTsKLQlwcm1fd3JpdGVfbW9kX3JlZygweGZmZmZmZmZmLCBPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwgUk1fUlNUU1QpOworCXBybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIE1QVV9NT0QsIE9NQVAyX1JNX1JTVFNUKTsKKwlwcm1fd3JpdGVfbW9kX3JlZygweGZmZmZmZmZmLCBDT1JFX01PRCwgT01BUDJfUk1fUlNUU1QpOworCXBybV93cml0ZV9tb2RfcmVnKDB4ZmZmZmZmZmYsIE9NQVAzNDMwX1BFUl9NT0QsIE9NQVAyX1JNX1JTVFNUKTsKKwlwcm1fd3JpdGVfbW9kX3JlZygweGZmZmZmZmZmLCBPTUFQMzQzMF9FTVVfTU9ELCBPTUFQMl9STV9SU1RTVCk7CisJcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgT01BUDM0MzBfTkVPTl9NT0QsIE9NQVAyX1JNX1JTVFNUKTsKKwlwcm1fd3JpdGVfbW9kX3JlZygweGZmZmZmZmZmLCBPTUFQMzQzMF9EU1NfTU9ELCBPTUFQMl9STV9SU1RTVCk7CisJcHJtX3dyaXRlX21vZF9yZWcoMHhmZmZmZmZmZiwgT01BUDM0MzBFUzJfVVNCSE9TVF9NT0QsIE9NQVAyX1JNX1JTVFNUKTsKIAogCS8qIENsZWFyIGFueSBwZW5kaW5nIFBSQ00gaW50ZXJydXB0cyAqLwogCXBybV93cml0ZV9tb2RfcmVnKDAsIE9DUF9NT0QsIE9NQVAzX1BSTV9JUlFTVEFUVVNfTVBVX09GRlNFVCk7CkBAIC05NDEsNiArOTQxLDEwIEBACiAJZWxzZQogCQlzdGF0ZSA9IFBXUkRNX1BPV0VSX1JFVDsKIAorI2lmZGVmIENPTkZJR19DUFVfSURMRQorCW9tYXAzX2NwdWlkbGVfdXBkYXRlX3N0YXRlcygpOworI2VuZGlmCisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB3cnN0LCAmcHdyc3RfbGlzdCwgbm9kZSkgewogCQlwd3JzdC0+bmV4dF9zdGF0ZSA9IHN0YXRlOwogCQlzZXRfcHdyZG1fc3RhdGUocHdyc3QtPnB3cmRtLCBzdGF0ZSk7CkBAIC05OTgsNiArMTAwMiw5IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGNsa2Rtc19zZXR1cChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtLCB2b2lkICp1bnVzZWQpCiB7CisJY2xrZG1fY2xlYXJfYWxsX3drZGVwcyhjbGtkbSk7CisJY2xrZG1fY2xlYXJfYWxsX3NsZWVwZGVwcyhjbGtkbSk7CisKIAlpZiAoY2xrZG0tPmZsYWdzICYgQ0xLRE1fQ0FOX0VOQUJMRV9BVVRPKQogCQlvbWFwMl9jbGtkbV9hbGxvd19pZGxlKGNsa2RtKTsKIAllbHNlIGlmIChjbGtkbS0+ZmxhZ3MgJiBDTEtETV9DQU5fRk9SQ0VfU0xFRVAgJiYKQEAgLTEwMTgsNiArMTAyNSw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBvbWFwM19wbV9pbml0KHZvaWQpCiB7CiAJc3RydWN0IHBvd2VyX3N0YXRlICpwd3JzdCwgKnRtcDsKKwlzdHJ1Y3QgY2xvY2tkb21haW4gKm5lb25fY2xrZG0sICpwZXJfY2xrZG0sICptcHVfY2xrZG0sICpjb3JlX2Nsa2RtOwogCWludCByZXQ7CiAKIAlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQpAQCAtMTA1Nyw2ICsxMDY1LDExIEBACiAJY29yZV9wd3JkbSA9IHB3cmRtX2xvb2t1cCgiY29yZV9wd3JkbSIpOwogCWNhbV9wd3JkbSA9IHB3cmRtX2xvb2t1cCgiY2FtX3B3cmRtIik7CiAKKwluZW9uX2Nsa2RtID0gY2xrZG1fbG9va3VwKCJuZW9uX2Nsa2RtIik7CisJbXB1X2Nsa2RtID0gY2xrZG1fbG9va3VwKCJtcHVfY2xrZG0iKTsKKwlwZXJfY2xrZG0gPSBjbGtkbV9sb29rdXAoInBlcl9jbGtkbSIpOworCWNvcmVfY2xrZG0gPSBjbGtkbV9sb29rdXAoImNvcmVfY2xrZG0iKTsKKwogCW9tYXBfcHVzaF9zcmFtX2lkbGUoKTsKICNpZmRlZiBDT05GSUdfU1VTUEVORAogCXN1c3BlbmRfc2V0X29wcygmb21hcF9wbV9vcHMpOwpAQCAtMTA2NSwxNCArMTA3OCwxNCBAQAogCXBtX2lkbGUgPSBvbWFwM19wbV9pZGxlOwogCW9tYXAzX2lkbGVfaW5pdCgpOwogCi0JcHdyZG1fYWRkX3drZGVwKG5lb25fcHdyZG0sIG1wdV9wd3JkbSk7CisJY2xrZG1fYWRkX3drZGVwKG5lb25fY2xrZG0sIG1wdV9jbGtkbSk7CiAJLyoKIAkgKiBSRVZJU0lUOiBUaGlzIHdrZGVwIGlzIG9ubHkgbmVjZXNzYXJ5IHdoZW4gR1BJTzItNiBhcmUgZW5hYmxlZCBmb3IKIAkgKiBJTy1wYWQgd2FrZXVwLiAgT3RoZXJ3aXNlIGl0IHdpbGwgdW5uZWNlc3NhcmlseSB3YXN0ZSBwb3dlcgogCSAqIHdha2luZyB1cCBQRVIgd2l0aCBldmVyeSBDT1JFIHdha2V1cCAtIHNlZQogCSAqIGh0dHA6Ly9tYXJjLmluZm8vP2w9bGludXgtb21hcCZtPTEyMTg1MjE1MDcxMDA2MiZ3PTIKIAkqLwotCXB3cmRtX2FkZF93a2RlcChwZXJfcHdyZG0sIGNvcmVfcHdyZG0pOworCWNsa2RtX2FkZF93a2RlcChwZXJfY2xrZG0sIGNvcmVfY2xrZG0pOwogCiAJaWYgKG9tYXBfdHlwZSgpICE9IE9NQVAyX0RFVklDRV9UWVBFX0dQKSB7CiAJCW9tYXAzX3NlY3VyZV9yYW1fc3RvcmFnZSA9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWluLmMKaW5kZXggMjZiM2YzZS4uOWEwZmIzOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW4uYwpAQCAtMiwxMCArMiwxMiBAQAogICogT01BUCBwb3dlcmRvbWFpbiBjb250cm9sCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQogICoKKyAqIEFkZGVkIE9NQVA0IHNwZWNpZmljIHN1cHBvcnQgYnkgQWJoaWppdCBQYWdhcmUgPGFiaGlqaXRwYWdhcmVAdGkuY29tPgorICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCkBAIC0yNiwxMiArMjgsMTUgQEAKIAogI2luY2x1ZGUgImNtLmgiCiAjaW5jbHVkZSAiY20tcmVnYml0cy0zNHh4LmgiCisjaW5jbHVkZSAiY20tcmVnYml0cy00NHh4LmgiCiAjaW5jbHVkZSAicHJtLmgiCiAjaW5jbHVkZSAicHJtLXJlZ2JpdHMtMzR4eC5oIgorI2luY2x1ZGUgInBybS1yZWdiaXRzLTQ0eHguaCIKIAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CiAjaW5jbHVkZSA8cGxhdC9wb3dlcmRvbWFpbi5oPgogI2luY2x1ZGUgPHBsYXQvY2xvY2tkb21haW4uaD4KKyNpbmNsdWRlIDxwbGF0L3ByY20uaD4KIAogI2luY2x1ZGUgInBtLmgiCiAKQEAgLTQwLDI5ICs0NSw0MyBAQAogCVBXUkRNX1NUQVRFX1BSRVYsCiB9OwogCisvKiBWYXJpYWJsZSBob2xkaW5nIHZhbHVlIG9mIHRoZSBDUFUgZGVwZW5kZW50IFBXUlNUQ1RSTCBSZWdpc3RlciBPZmZzZXQgKi8KK3N0YXRpYyB1MTYgcHdyc3RjdHJsX3JlZ19vZmZzOworCisvKiBWYXJpYWJsZSBob2xkaW5nIHZhbHVlIG9mIHRoZSBDUFUgZGVwZW5kZW50IFBXUlNUU1QgUmVnaXN0ZXIgT2Zmc2V0ICovCitzdGF0aWMgdTE2IHB3cnN0c3RfcmVnX29mZnM7CisKKy8qIE9NQVAzIGFuZCBPTUFQNCBzcGVjaWZpYyByZWdpc3RlciBiaXQgaW5pdGlhbGlzYXRpb25zCisgKiBOb3RpY2UgdGhhdCB0aGUgbmFtZXMgaGVyZSBhcmUgbm90IGFjY29yZGluZyB0byBlYWNoIHBvd2VyCisgKiBkb21haW4gYnV0IHRoZSBiaXQgbWFwcGluZyB1c2VkIGFwcGxpZXMgdG8gYWxsIG9mIHRoZW0KKyAqLworCisvKiBPTUFQMyBhbmQgT01BUDQgTWVtb3J5IE9uc3RhdGUgTWFza3MgKGNvbW1vbiBhY3Jvc3MgYWxsIHBvd2VyIGRvbWFpbnMpICovCisjZGVmaW5lIE9NQVBfTUVNMF9PTlNUQVRFX01BU0sgT01BUDM0MzBfU0hBUkVETDFDQUNIRUZMQVRPTlNUQVRFX01BU0sKKyNkZWZpbmUgT01BUF9NRU0xX09OU1RBVEVfTUFTSyBPTUFQMzQzMF9MMUZMQVRNRU1PTlNUQVRFX01BU0sKKyNkZWZpbmUgT01BUF9NRU0yX09OU1RBVEVfTUFTSyBPTUFQMzQzMF9TSEFSRURMMkNBQ0hFRkxBVE9OU1RBVEVfTUFTSworI2RlZmluZSBPTUFQX01FTTNfT05TVEFURV9NQVNLIE9NQVAzNDMwX0wyRkxBVE1FTU9OU1RBVEVfTUFTSworI2RlZmluZSBPTUFQX01FTTRfT05TVEFURV9NQVNLIE9NQVA0NDMwX09DUF9OUkVUX0JBTktfT05TVEFURV9NQVNLCisKKy8qIE9NQVAzIGFuZCBPTUFQNCBNZW1vcnkgUmV0c3RhdGUgTWFza3MgKGNvbW1vbiBhY3Jvc3MgYWxsIHBvd2VyIGRvbWFpbnMpICovCisjZGVmaW5lIE9NQVBfTUVNMF9SRVRTVEFURV9NQVNLIE9NQVAzNDMwX1NIQVJFREwxQ0FDSEVGTEFUUkVUU1RBVEUKKyNkZWZpbmUgT01BUF9NRU0xX1JFVFNUQVRFX01BU0sgT01BUDM0MzBfTDFGTEFUTUVNUkVUU1RBVEUKKyNkZWZpbmUgT01BUF9NRU0yX1JFVFNUQVRFX01BU0sgT01BUDM0MzBfU0hBUkVETDJDQUNIRUZMQVRSRVRTVEFURQorI2RlZmluZSBPTUFQX01FTTNfUkVUU1RBVEVfTUFTSyBPTUFQMzQzMF9MMkZMQVRNRU1SRVRTVEFURQorI2RlZmluZSBPTUFQX01FTTRfUkVUU1RBVEVfTUFTSyBPTUFQNDQzMF9PQ1BfTlJFVF9CQU5LX1JFVFNUQVRFX01BU0sKKworLyogT01BUDMgYW5kIE9NQVA0IE1lbW9yeSBTdGF0dXMgYml0cyAqLworI2RlZmluZSBPTUFQX01FTTBfU1RBVEVTVF9NQVNLIE9NQVAzNDMwX1NIQVJFREwxQ0FDSEVGTEFUU1RBVEVTVF9NQVNLCisjZGVmaW5lIE9NQVBfTUVNMV9TVEFURVNUX01BU0sgT01BUDM0MzBfTDFGTEFUTUVNU1RBVEVTVF9NQVNLCisjZGVmaW5lIE9NQVBfTUVNMl9TVEFURVNUX01BU0sgT01BUDM0MzBfU0hBUkVETDJDQUNIRUZMQVRTVEFURVNUX01BU0sKKyNkZWZpbmUgT01BUF9NRU0zX1NUQVRFU1RfTUFTSyBPTUFQMzQzMF9MMkZMQVRNRU1TVEFURVNUX01BU0sKKyNkZWZpbmUgT01BUF9NRU00X1NUQVRFU1RfTUFTSyBPTUFQNDQzMF9PQ1BfTlJFVF9CQU5LX1NUQVRFU1RfTUFTSworCiAvKiBwd3JkbV9saXN0IGNvbnRhaW5zIGFsbCByZWdpc3RlcmVkIHN0cnVjdCBwb3dlcmRvbWFpbnMgKi8KIHN0YXRpYyBMSVNUX0hFQUQocHdyZG1fbGlzdCk7CiAKLS8qCi0gKiBwd3JkbV9yd2xvY2sgcHJvdGVjdHMgcHdyZG1fbGlzdCBhZGQgYW5kIGRlbCBvcHMgLSBhbHNvIHJldXNlZCB0bwotICogcHJvdGVjdCBwd3JkbV9jbGtkbXNbXSBkdXJpbmcgY2xrZG0gYWRkL2RlbCBvcHMKLSAqLwotc3RhdGljIERFRklORV9SV0xPQ0socHdyZG1fcndsb2NrKTsKLQotCiAvKiBQcml2YXRlIGZ1bmN0aW9ucyAqLwogCi1zdGF0aWMgdTMyIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHMxNiBkb21haW4sIHMxNiBpZHgsIHUzMiBtYXNrKQotewotCXUzMiB2OwotCi0JdiA9IHBybV9yZWFkX21vZF9yZWcoZG9tYWluLCBpZHgpOwotCXYgJj0gbWFzazsKLQl2ID4+PSBfX2ZmcyhtYXNrKTsKLQotCXJldHVybiB2OwotfQotCiBzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluICpfcHdyZG1fbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgKnRlbXBfcHdyZG07CkBAIC03OSwzMiArOTgsNjMgQEAKIAlyZXR1cm4gcHdyZG07CiB9CiAKLS8qIF9wd3JkbV9kZXBzX2xvb2t1cCAtIGxvb2sgdXAgdGhlIHNwZWNpZmllZCBwb3dlcmRvbWFpbiBpbiBhIHB3cmRtIGxpc3QgKi8KLXN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gKl9wd3JkbV9kZXBzX2xvb2t1cChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLAotCQkJCQkgICAgICBzdHJ1Y3QgcHdyZG1fZGVwICpkZXBzKQorLyoqCisgKiBfcHdyZG1fcmVnaXN0ZXIgLSByZWdpc3RlciBhIHBvd2VyZG9tYWluCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIHJlZ2lzdGVyCisgKgorICogQWRkcyBhIHBvd2VyZG9tYWluIHRvIHRoZSBpbnRlcm5hbCBwb3dlcmRvbWFpbiBsaXN0LiAgUmV0dXJucworICogLUVJTlZBTCBpZiBnaXZlbiBhIG51bGwgcG9pbnRlciwgLUVFWElTVCBpZiBhIHBvd2VyZG9tYWluIGlzCisgKiBhbHJlYWR5IHJlZ2lzdGVyZWQgYnkgdGhlIHByb3ZpZGVkIG5hbWUsIG9yIDAgdXBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IF9wd3JkbV9yZWdpc3RlcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQogewotCXN0cnVjdCBwd3JkbV9kZXAgKnBkOworCWludCBpOwogCi0JaWYgKCFwd3JkbSB8fCAhZGVwcyB8fCAhb21hcF9jaGlwX2lzKHB3cmRtLT5vbWFwX2NoaXApKQotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZvciAocGQgPSBkZXBzOyBwZC0+cHdyZG1fbmFtZTsgcGQrKykgeworCWlmICghb21hcF9jaGlwX2lzKHB3cmRtLT5vbWFwX2NoaXApKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAoIW9tYXBfY2hpcF9pcyhwZC0+b21hcF9jaGlwKSkKLQkJCWNvbnRpbnVlOworCWlmIChfcHdyZG1fbG9va3VwKHB3cmRtLT5uYW1lKSkKKwkJcmV0dXJuIC1FRVhJU1Q7CiAKLQkJaWYgKCFwZC0+cHdyZG0gJiYgcGQtPnB3cmRtX25hbWUpCi0JCQlwZC0+cHdyZG0gPSBwd3JkbV9sb29rdXAocGQtPnB3cmRtX25hbWUpOworCWxpc3RfYWRkKCZwd3JkbS0+bm9kZSwgJnB3cmRtX2xpc3QpOwogCi0JCWlmIChwZC0+cHdyZG0gPT0gcHdyZG0pCi0JCQlicmVhazsKKwkvKiBJbml0aWFsaXplIHRoZSBwb3dlcmRvbWFpbidzIHN0YXRlIGNvdW50ZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgUFdSRE1fTUFYX1BXUlNUUzsgaSsrKQorCQlwd3JkbS0+c3RhdGVfY291bnRlcltpXSA9IDA7CiAKKwlwd3JkbS0+cmV0X2xvZ2ljX29mZl9jb3VudGVyID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgcHdyZG0tPmJhbmtzOyBpKyspCisJCXB3cmRtLT5yZXRfbWVtX29mZl9jb3VudGVyW2ldID0gMDsKKworCXB3cmRtX3dhaXRfdHJhbnNpdGlvbihwd3JkbSk7CisJcHdyZG0tPnN0YXRlID0gcHdyZG1fcmVhZF9wd3JzdChwd3JkbSk7CisJcHdyZG0tPnN0YXRlX2NvdW50ZXJbcHdyZG0tPnN0YXRlXSA9IDE7CisKKwlwcl9kZWJ1ZygicG93ZXJkb21haW46IHJlZ2lzdGVyZWQgJXNcbiIsIHB3cmRtLT5uYW1lKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfdXBkYXRlX2xvZ2ljX21lbWJhbmtfY291bnRlcnMoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKK3sKKwlpbnQgaTsKKwl1OCBwcmV2X2xvZ2ljX3B3cnN0LCBwcmV2X21lbV9wd3JzdDsKKworCXByZXZfbG9naWNfcHdyc3QgPSBwd3JkbV9yZWFkX3ByZXZfbG9naWNfcHdyc3QocHdyZG0pOworCWlmICgocHdyZG0tPnB3cnN0c19sb2dpY19yZXQgPT0gUFdSU1RTX09GRl9SRVQpICYmCisJICAgIChwcmV2X2xvZ2ljX3B3cnN0ID09IFBXUkRNX1BPV0VSX09GRikpCisJCXB3cmRtLT5yZXRfbG9naWNfb2ZmX2NvdW50ZXIrKzsKKworCWZvciAoaSA9IDA7IGkgPCBwd3JkbS0+YmFua3M7IGkrKykgeworCQlwcmV2X21lbV9wd3JzdCA9IHB3cmRtX3JlYWRfcHJldl9tZW1fcHdyc3QocHdyZG0sIGkpOworCisJCWlmICgocHdyZG0tPnB3cnN0c19tZW1fcmV0W2ldID09IFBXUlNUU19PRkZfUkVUKSAmJgorCQkgICAgKHByZXZfbWVtX3B3cnN0ID09IFBXUkRNX1BPV0VSX09GRikpCisJCQlwd3JkbS0+cmV0X21lbV9vZmZfY291bnRlcltpXSsrOwogCX0KLQotCWlmICghcGQtPnB3cmRtX25hbWUpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwotCi0JcmV0dXJuIHBkLT5wd3JkbTsKIH0KIAogc3RhdGljIGludCBfcHdyZG1fc3RhdGVfc3dpdGNoKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIGludCBmbGFnKQpAQCAtMTI2LDYgKzE3Niw4IEBACiAJCXByZXYgPSBwd3JkbV9yZWFkX3ByZXZfcHdyc3QocHdyZG0pOwogCQlpZiAocHdyZG0tPnN0YXRlICE9IHByZXYpCiAJCQlwd3JkbS0+c3RhdGVfY291bnRlcltwcmV2XSsrOworCQlpZiAocHJldiA9PSBQV1JETV9QT1dFUl9SRVQpCisJCQlfdXBkYXRlX2xvZ2ljX21lbWJhbmtfY291bnRlcnMocHdyZG0pOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTE1NCwxMzQgKzIwNiw3MSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgX19pbml0IHZvaWQgX3B3cmRtX3NldHVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgUFdSRE1fTUFYX1BXUlNUUzsgaSsrKQotCQlwd3JkbS0+c3RhdGVfY291bnRlcltpXSA9IDA7Ci0KLQlwd3JkbV93YWl0X3RyYW5zaXRpb24ocHdyZG0pOwotCXB3cmRtLT5zdGF0ZSA9IHB3cmRtX3JlYWRfcHdyc3QocHdyZG0pOwotCXB3cmRtLT5zdGF0ZV9jb3VudGVyW3B3cmRtLT5zdGF0ZV0gPSAxOwotCi19Ci0KIC8qIFB1YmxpYyBmdW5jdGlvbnMgKi8KIAogLyoqCiAgKiBwd3JkbV9pbml0IC0gc2V0IHVwIHRoZSBwb3dlcmRvbWFpbiBsYXllcgorICogQHB3cmRtX2xpc3Q6IGFycmF5IG9mIHN0cnVjdCBwb3dlcmRvbWFpbiBwb2ludGVycyB0byByZWdpc3RlcgogICoKLSAqIExvb3AgdGhyb3VnaCB0aGUgbGlzdCBvZiBwb3dlcmRvbWFpbnMsIHJlZ2lzdGVyaW5nIGFsbCB0aGF0IGFyZQotICogYXZhaWxhYmxlIG9uIHRoZSBjdXJyZW50IENQVS4gSWYgcHdyZG1fbGlzdCBpcyBzdXBwbGllZCBhbmQgbm90Ci0gKiBudWxsLCBhbGwgb2YgdGhlIHJlZmVyZW5jZWQgcG93ZXJkb21haW5zIHdpbGwgYmUgcmVnaXN0ZXJlZC4gIE5vCi0gKiByZXR1cm4gdmFsdWUuCisgKiBMb29wIHRocm91Z2ggdGhlIGFycmF5IG9mIHBvd2VyZG9tYWlucyBAcHdyZG1fbGlzdCwgcmVnaXN0ZXJpbmcgYWxsCisgKiB0aGF0IGFyZSBhdmFpbGFibGUgb24gdGhlIGN1cnJlbnQgQ1BVLiBJZiBwd3JkbV9saXN0IGlzIHN1cHBsaWVkCisgKiBhbmQgbm90IG51bGwsIGFsbCBvZiB0aGUgcmVmZXJlbmNlZCBwb3dlcmRvbWFpbnMgd2lsbCBiZQorICogcmVnaXN0ZXJlZC4gIE5vIHJldHVybiB2YWx1ZS4gIFhYWCBwd3JkbV9saXN0IGlzIG5vdCByZWFsbHkgYQorICogImxpc3QiOyBpdCBpcyBhbiBhcnJheS4gIFJlbmFtZSBhcHByb3ByaWF0ZWx5LgogICovCiB2b2lkIHB3cmRtX2luaXQoc3RydWN0IHBvd2VyZG9tYWluICoqcHdyZG1fbGlzdCkKIHsKIAlzdHJ1Y3QgcG93ZXJkb21haW4gKipwID0gTlVMTDsKIAorCWlmIChjcHVfaXNfb21hcDI0eHgoKSB8IGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCXB3cnN0Y3RybF9yZWdfb2ZmcyA9IE9NQVAyX1BNX1BXU1RDVFJMOworCQlwd3JzdHN0X3JlZ19vZmZzID0gT01BUDJfUE1fUFdTVFNUOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJcHdyc3RjdHJsX3JlZ19vZmZzID0gT01BUDRfUE1fUFdTVENUUkw7CisJCXB3cnN0c3RfcmVnX29mZnMgPSBPTUFQNF9QTV9QV1NUU1Q7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJQb3dlciBEb21haW4gc3RydWN0IG5vdCBzdXBwb3J0ZWQgZm9yICIgXAorCQkJCQkJCSJ0aGlzIENQVVxuIik7CisJCXJldHVybjsKKwl9CisKIAlpZiAocHdyZG1fbGlzdCkgewotCQlmb3IgKHAgPSBwd3JkbV9saXN0OyAqcDsgcCsrKSB7Ci0JCQlwd3JkbV9yZWdpc3RlcigqcCk7Ci0JCQlfcHdyZG1fc2V0dXAoKnApOwotCQl9CisJCWZvciAocCA9IHB3cmRtX2xpc3Q7ICpwOyBwKyspCisJCQlfcHdyZG1fcmVnaXN0ZXIoKnApOwogCX0KIH0KIAogLyoqCi0gKiBwd3JkbV9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgcG93ZXJkb21haW4KLSAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gcmVnaXN0ZXIKLSAqCi0gKiBBZGRzIGEgcG93ZXJkb21haW4gdG8gdGhlIGludGVybmFsIHBvd2VyZG9tYWluIGxpc3QuICBSZXR1cm5zCi0gKiAtRUlOVkFMIGlmIGdpdmVuIGEgbnVsbCBwb2ludGVyLCAtRUVYSVNUIGlmIGEgcG93ZXJkb21haW4gaXMKLSAqIGFscmVhZHkgcmVnaXN0ZXJlZCBieSB0aGUgcHJvdmlkZWQgbmFtZSwgb3IgMCB1cG9uIHN1Y2Nlc3MuCi0gKi8KLWludCBwd3JkbV9yZWdpc3RlcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldCA9IC1FSU5WQUw7Ci0KLQlpZiAoIXB3cmRtKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghb21hcF9jaGlwX2lzKHB3cmRtLT5vbWFwX2NoaXApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7Ci0JaWYgKF9wd3JkbV9sb29rdXAocHdyZG0tPm5hbWUpKSB7Ci0JCXJldCA9IC1FRVhJU1Q7Ci0JCWdvdG8gcHJfdW5sb2NrOwotCX0KLQotCWxpc3RfYWRkKCZwd3JkbS0+bm9kZSwgJnB3cmRtX2xpc3QpOwotCi0JcHJfZGVidWcoInBvd2VyZG9tYWluOiByZWdpc3RlcmVkICVzXG4iLCBwd3JkbS0+bmFtZSk7Ci0JcmV0ID0gMDsKLQotcHJfdW5sb2NrOgotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogcHdyZG1fdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgYSBwb3dlcmRvbWFpbgotICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byB1bnJlZ2lzdGVyCi0gKgotICogUmVtb3ZlcyBhIHBvd2VyZG9tYWluIGZyb20gdGhlIGludGVybmFsIHBvd2VyZG9tYWluIGxpc3QuICBSZXR1cm5zCi0gKiAtRUlOVkFMIGlmIHB3cmRtIGFyZ3VtZW50IGlzIE5VTEwuCi0gKi8KLWludCBwd3JkbV91bnJlZ2lzdGVyKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghcHdyZG0pCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKLQlsaXN0X2RlbCgmcHdyZG0tPm5vZGUpOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKLQotCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogdW5yZWdpc3RlcmVkICVzXG4iLCBwd3JkbS0+bmFtZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCiAgKiBwd3JkbV9sb29rdXAgLSBsb29rIHVwIGEgcG93ZXJkb21haW4gYnkgbmFtZSwgcmV0dXJuIGEgcG9pbnRlcgogICogQG5hbWU6IG5hbWUgb2YgcG93ZXJkb21haW4KICAqCi0gKiBGaW5kIGEgcmVnaXN0ZXJlZCBwb3dlcmRvbWFpbiBieSBpdHMgbmFtZS4gIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZQotICogc3RydWN0IHBvd2VyZG9tYWluIGlmIGZvdW5kLCBvciBOVUxMIG90aGVyd2lzZS4KKyAqIEZpbmQgYSByZWdpc3RlcmVkIHBvd2VyZG9tYWluIGJ5IGl0cyBuYW1lIEBuYW1lLiAgUmV0dXJucyBhIHBvaW50ZXIKKyAqIHRvIHRoZSBzdHJ1Y3QgcG93ZXJkb21haW4gaWYgZm91bmQsIG9yIE5VTEwgb3RoZXJ3aXNlLgogICovCiBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtX2xvb2t1cChjb25zdCBjaGFyICpuYW1lKQogewogCXN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghbmFtZSkKIAkJcmV0dXJuIE5VTEw7CiAKLQlyZWFkX2xvY2tfaXJxc2F2ZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7CiAJcHdyZG0gPSBfcHdyZG1fbG9va3VwKG5hbWUpOwotCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHB3cmRtOwogfQogCiAvKioKLSAqIHB3cmRtX2Zvcl9lYWNoX25vbG9jayAtIGNhbGwgZnVuY3Rpb24gb24gZWFjaCByZWdpc3RlcmVkIGNsb2NrZG9tYWluCisgKiBwd3JkbV9mb3JfZWFjaCAtIGNhbGwgZnVuY3Rpb24gb24gZWFjaCByZWdpc3RlcmVkIGNsb2NrZG9tYWluCiAgKiBAZm46IGNhbGxiYWNrIGZ1bmN0aW9uICoKICAqCi0gKiBDYWxsIHRoZSBzdXBwbGllZCBmdW5jdGlvbiBmb3IgZWFjaCByZWdpc3RlcmVkIHBvd2VyZG9tYWluLiAgVGhlCi0gKiBjYWxsYmFjayBmdW5jdGlvbiBjYW4gcmV0dXJuIGFueXRoaW5nIGJ1dCAwIHRvIGJhaWwgb3V0IGVhcmx5IGZyb20KLSAqIHRoZSBpdGVyYXRvci4gIFJldHVybnMgdGhlIGxhc3QgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiwgd2hpY2gKLSAqIHNob3VsZCBiZSAwIGZvciBzdWNjZXNzIG9yIGFueXRoaW5nIGVsc2UgdG8gaW5kaWNhdGUgZmFpbHVyZTsgb3IgLUVJTlZBTCBpZgotICogdGhlIGZ1bmN0aW9uIHBvaW50ZXIgaXMgbnVsbC4KKyAqIENhbGwgdGhlIHN1cHBsaWVkIGZ1bmN0aW9uIEBmbiBmb3IgZWFjaCByZWdpc3RlcmVkIHBvd2VyZG9tYWluLgorICogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIEBmbiBjYW4gcmV0dXJuIGFueXRoaW5nIGJ1dCAwIHRvIGJhaWwgb3V0CisgKiBlYXJseSBmcm9tIHRoZSBpdGVyYXRvci4gIFJldHVybnMgdGhlIGxhc3QgcmV0dXJuIHZhbHVlIG9mIHRoZQorICogY2FsbGJhY2sgZnVuY3Rpb24sIHdoaWNoIHNob3VsZCBiZSAwIGZvciBzdWNjZXNzIG9yIGFueXRoaW5nIGVsc2UKKyAqIHRvIGluZGljYXRlIGZhaWx1cmU7IG9yIC1FSU5WQUwgaWYgdGhlIGZ1bmN0aW9uIHBvaW50ZXIgaXMgbnVsbC4KICAqLwotaW50IHB3cmRtX2Zvcl9lYWNoX25vbG9jayhpbnQgKCpmbikoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdXNlciksCi0JCQkJdm9pZCAqdXNlcikKK2ludCBwd3JkbV9mb3JfZWFjaChpbnQgKCpmbikoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdXNlciksCisJCSAgIHZvaWQgKnVzZXIpCiB7CiAJc3RydWN0IHBvd2VyZG9tYWluICp0ZW1wX3B3cmRtOwogCWludCByZXQgPSAwOwpAQCAtMjk5LDQwICsyODgsMTcgQEAKIH0KIAogLyoqCi0gKiBwd3JkbV9mb3JfZWFjaCAtIGNhbGwgZnVuY3Rpb24gb24gZWFjaCByZWdpc3RlcmVkIGNsb2NrZG9tYWluCi0gKiBAZm46IGNhbGxiYWNrIGZ1bmN0aW9uICoKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBzYW1lIGFzICdwd3JkbV9mb3JfZWFjaF9ub2xvY2soKScsIGJ1dCBrZWVwcyB0aGUKLSAqICZwd3JkbV9yd2xvY2sgbG9ja2VkIGZvciByZWFkaW5nLCBzbyBubyBwb3dlcmRvbWFpbiBzdHJ1Y3R1cmUgbWFuaXB1bGF0aW9uCi0gKiBmdW5jdGlvbnMgc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBjYWxsYmFjaywgYWx0aG91Z2ggaGFyZHdhcmUgcG93ZXJkb21haW4KLSAqIGNvbnRyb2wgZnVuY3Rpb25zIGFyZSBmaW5lLgotICovCi1pbnQgcHdyZG1fZm9yX2VhY2goaW50ICgqZm4pKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHZvaWQgKnVzZXIpLAotCQkJdm9pZCAqdXNlcikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQ7Ci0KLQlyZWFkX2xvY2tfaXJxc2F2ZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7Ci0JcmV0ID0gcHdyZG1fZm9yX2VhY2hfbm9sb2NrKGZuLCB1c2VyKTsKLQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgogICogcHdyZG1fYWRkX2Nsa2RtIC0gYWRkIGEgY2xvY2tkb21haW4gdG8gYSBwb3dlcmRvbWFpbgogICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBhZGQgdGhlIGNsb2NrZG9tYWluIHRvCiAgKiBAY2xrZG06IHN0cnVjdCBjbG9ja2RvbWFpbiAqIHRvIGFzc29jaWF0ZSB3aXRoIGEgcG93ZXJkb21haW4KICAqCi0gKiBBc3NvY2lhdGUgdGhlIGNsb2NrZG9tYWluICdjbGtkbScgd2l0aCBhIHBvd2VyZG9tYWluICdwd3JkbScuICBUaGlzCisgKiBBc3NvY2lhdGUgdGhlIGNsb2NrZG9tYWluIEBjbGtkbSB3aXRoIGEgcG93ZXJkb21haW4gQHB3cmRtLiAgVGhpcwogICogZW5hYmxlcyB0aGUgdXNlIG9mIHB3cmRtX2Zvcl9lYWNoX2Nsa2RtKCkuICBSZXR1cm5zIC1FSU5WQUwgaWYKICAqIHByZXNlbnRlZCB3aXRoIGludmFsaWQgcG9pbnRlcnM7IC1FTk9NRU0gaWYgbWVtb3J5IGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQ7CiAgKiBvciAwIHVwb24gc3VjY2Vzcy4KICAqLwogaW50IHB3cmRtX2FkZF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAKQEAgLTM0Miw4ICszMDgsNiBAQAogCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogYXNzb2NpYXRpbmcgY2xvY2tkb21haW4gJXMgd2l0aCBwb3dlcmRvbWFpbiAiCiAJCSAiJXNcbiIsIGNsa2RtLT5uYW1lLCBwd3JkbS0+bmFtZSk7CiAKLQl3cml0ZV9sb2NrX2lycXNhdmUoJnB3cmRtX3J3bG9jaywgZmxhZ3MpOwotCiAJZm9yIChpID0gMDsgaSA8IFBXUkRNX01BWF9DTEtETVM7IGkrKykgewogCQlpZiAoIXB3cmRtLT5wd3JkbV9jbGtkbXNbaV0pCiAJCQlicmVhazsKQEAgLTM2OCw4ICszMzIsNiBAQAogCXJldCA9IDA7CiAKIHBhY19leGl0OgotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM3OCwxNCArMzQwLDEzIEBACiAgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIGFkZCB0aGUgY2xvY2tkb21haW4gdG8KICAqIEBjbGtkbTogc3RydWN0IGNsb2NrZG9tYWluICogdG8gYXNzb2NpYXRlIHdpdGggYSBwb3dlcmRvbWFpbgogICoKLSAqIERpc3NvY2lhdGUgdGhlIGNsb2NrZG9tYWluICdjbGtkbScgZnJvbSB0aGUgcG93ZXJkb21haW4KLSAqICdwd3JkbScuIFJldHVybnMgLUVJTlZBTCBpZiBwcmVzZW50ZWQgd2l0aCBpbnZhbGlkIHBvaW50ZXJzOwotICogLUVOT0VOVCBpZiB0aGUgY2xrZG0gd2FzIG5vdCBhc3NvY2lhdGVkIHdpdGggdGhlIHBvd2VyZG9tYWluLCBvciAwCi0gKiB1cG9uIHN1Y2Nlc3MuCisgKiBEaXNzb2NpYXRlIHRoZSBjbG9ja2RvbWFpbiBAY2xrZG0gZnJvbSB0aGUgcG93ZXJkb21haW4KKyAqIEBwd3JkbS4gUmV0dXJucyAtRUlOVkFMIGlmIHByZXNlbnRlZCB3aXRoIGludmFsaWQgcG9pbnRlcnM7IC1FTk9FTlQKKyAqIGlmIEBjbGtkbSB3YXMgbm90IGFzc29jaWF0ZWQgd2l0aCB0aGUgcG93ZXJkb21haW4sIG9yIDAgdXBvbgorICogc3VjY2Vzcy4KICAqLwogaW50IHB3cmRtX2RlbF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCBzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IC1FSU5WQUw7CiAJaW50IGk7CiAKQEAgLTM5NSw4ICszNTYsNiBAQAogCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogZGlzc29jaWF0aW5nIGNsb2NrZG9tYWluICVzIGZyb20gcG93ZXJkb21haW4gIgogCQkgIiVzXG4iLCBjbGtkbS0+bmFtZSwgcHdyZG0tPm5hbWUpOwogCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKLQogCWZvciAoaSA9IDA7IGkgPCBQV1JETV9NQVhfQ0xLRE1TOyBpKyspCiAJCWlmIChwd3JkbS0+cHdyZG1fY2xrZG1zW2ldID09IGNsa2RtKQogCQkJYnJlYWs7CkBAIC00MTMsOCArMzcyLDYgQEAKIAlyZXQgPSAwOwogCiBwZGNfZXhpdDoKLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCkBAIC00MjMsMjU5ICszODAsMzQgQEAKICAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gaXRlcmF0ZSBvdmVyCiAgKiBAZm46IGNhbGxiYWNrIGZ1bmN0aW9uICoKICAqCi0gKiBDYWxsIHRoZSBzdXBwbGllZCBmdW5jdGlvbiBmb3IgZWFjaCBjbG9ja2RvbWFpbiBpbiB0aGUgcG93ZXJkb21haW4KLSAqICdwd3JkbScuICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gY2FuIHJldHVybiBhbnl0aGluZyBidXQgMCB0byBiYWlsCi0gKiBvdXQgZWFybHkgZnJvbSB0aGUgaXRlcmF0b3IuICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGgKLSAqIHRoZSBwd3JkbV9yd2xvY2sgaGVsZCBmb3IgcmVhZGluZywgc28gbm8gcG93ZXJkb21haW4gc3RydWN0dXJlCi0gKiBtYW5pcHVsYXRpb24gZnVuY3Rpb25zIHNob3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgY2FsbGJhY2ssIGFsdGhvdWdoCi0gKiBoYXJkd2FyZSBwb3dlcmRvbWFpbiBjb250cm9sIGZ1bmN0aW9ucyBhcmUgZmluZS4gIFJldHVybnMgLUVJTlZBTAotICogaWYgcHJlc2VudGVkIHdpdGggaW52YWxpZCBwb2ludGVyczsgb3IgcGFzc2VzIGFsb25nIHRoZSBsYXN0IHJldHVybgotICogdmFsdWUgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCB3aGljaCBzaG91bGQgYmUgMCBmb3Igc3VjY2VzcyBvcgotICogYW55dGhpbmcgZWxzZSB0byBpbmRpY2F0ZSBmYWlsdXJlLgorICogQ2FsbCB0aGUgc3VwcGxpZWQgZnVuY3Rpb24gQGZuIGZvciBlYWNoIGNsb2NrZG9tYWluIGluIHRoZSBwb3dlcmRvbWFpbgorICogQHB3cmRtLiAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiByZXR1cm4gYW55dGhpbmcgYnV0IDAgdG8gYmFpbAorICogb3V0IGVhcmx5IGZyb20gdGhlIGl0ZXJhdG9yLiAgUmV0dXJucyAtRUlOVkFMIGlmIHByZXNlbnRlZCB3aXRoCisgKiBpbnZhbGlkIHBvaW50ZXJzOyBvciBwYXNzZXMgYWxvbmcgdGhlIGxhc3QgcmV0dXJuIHZhbHVlIG9mIHRoZQorICogY2FsbGJhY2sgZnVuY3Rpb24sIHdoaWNoIHNob3VsZCBiZSAwIGZvciBzdWNjZXNzIG9yIGFueXRoaW5nIGVsc2UKKyAqIHRvIGluZGljYXRlIGZhaWx1cmUuCiAgKi8KIGludCBwd3JkbV9mb3JfZWFjaF9jbGtkbShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLAogCQkJIGludCAoKmZuKShzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLAogCQkJCSAgIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldCA9IDA7CiAJaW50IGk7CiAKIAlpZiAoIWZuKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJlYWRfbG9ja19pcnFzYXZlKCZwd3JkbV9yd2xvY2ssIGZsYWdzKTsKLQogCWZvciAoaSA9IDA7IGkgPCBQV1JETV9NQVhfQ0xLRE1TICYmICFyZXQ7IGkrKykKIAkJcmV0ID0gKCpmbikocHdyZG0sIHB3cmRtLT5wd3JkbV9jbGtkbXNbaV0pOwogCi0JcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmcHdyZG1fcndsb2NrLCBmbGFncyk7Ci0KIAlyZXR1cm4gcmV0OwogfQogCi0KLS8qKgotICogcHdyZG1fYWRkX3drZGVwIC0gYWRkIGEgd2FrZXVwIGRlcGVuZGVuY3kgZnJvbSBwd3JkbTIgdG8gcHdyZG0xCi0gKiBAcHdyZG0xOiB3YWtlIHRoaXMgc3RydWN0IHBvd2VyZG9tYWluICogdXAgKGRlcGVuZGVudCkKLSAqIEBwd3JkbTI6IHdoZW4gdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiB3YWtlcyB1cCAoc291cmNlKQotICoKLSAqIFdoZW4gdGhlIHBvd2VyZG9tYWluIHJlcHJlc2VudGVkIGJ5IHB3cmRtMiB3YWtlcyB1cCAoZHVlIHRvIGFuCi0gKiBpbnRlcnJ1cHQpLCB3YWtlIHVwIHB3cmRtMS4JSW1wbGVtZW50ZWQgaW4gaGFyZHdhcmUgb24gdGhlIE9NQVAsCi0gKiB0aGlzIGZlYXR1cmUgaXMgZGVzaWduZWQgdG8gcmVkdWNlIHdha2V1cCBsYXRlbmN5IG9mIHRoZSBkZXBlbmRlbnQKLSAqIHBvd2VyZG9tYWluLiAgUmV0dXJucyAtRUlOVkFMIGlmIHByZXNlbnRlZCB3aXRoIGludmFsaWQgcG93ZXJkb21haW4KLSAqIHBvaW50ZXJzLCAtRU5PRU5UIGlmIHB3cmRtMiBjYW5ub3Qgd2FrZSB1cCBwd3JkbTEgaW4gaGFyZHdhcmUsIG9yCi0gKiAwIHVwb24gc3VjY2Vzcy4KLSAqLwotaW50IHB3cmRtX2FkZF93a2RlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpCi17Ci0Jc3RydWN0IHBvd2VyZG9tYWluICpwOwotCi0JaWYgKCFwd3JkbTEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcCA9IF9wd3JkbV9kZXBzX2xvb2t1cChwd3JkbTIsIHB3cmRtMS0+d2tkZXBfc3Jjcyk7Ci0JaWYgKElTX0VSUihwKSkgewotCQlwcl9kZWJ1ZygicG93ZXJkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgd2FrZSB1cCBvZiAiCi0JCQkgIiVzIHdoZW4gJXMgd2FrZXMgdXBcbiIsIHB3cmRtMS0+bmFtZSwgcHdyZG0yLT5uYW1lKTsKLQkJcmV0dXJuIFBUUl9FUlIocCk7Ci0JfQotCi0JcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSB3aWxsIHdha2UgdXAgJXMgd2hlbiAlcyB3YWtlcyB1cFxuIiwKLQkJIHB3cmRtMS0+bmFtZSwgcHdyZG0yLT5uYW1lKTsKLQotCXBybV9zZXRfbW9kX3JlZ19iaXRzKCgxIDw8IHB3cmRtMi0+ZGVwX2JpdCksCi0JCQkgICAgIHB3cmRtMS0+cHJjbV9vZmZzLCBQTV9XS0RFUCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBwd3JkbV9kZWxfd2tkZXAgLSByZW1vdmUgYSB3YWtldXAgZGVwZW5kZW5jeSBmcm9tIHB3cmRtMiB0byBwd3JkbTEKLSAqIEBwd3JkbTE6IHdha2UgdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiB1cCAoZGVwZW5kZW50KQotICogQHB3cmRtMjogd2hlbiB0aGlzIHN0cnVjdCBwb3dlcmRvbWFpbiAqIHdha2VzIHVwIChzb3VyY2UpCi0gKgotICogUmVtb3ZlIGEgd2FrZXVwIGRlcGVuZGVuY3kgdGhhdCBjYXVzZXMgcHdyZG0xIHRvIHdha2UgdXAgd2hlbiBwd3JkbTIKLSAqIHdha2VzIHVwLiAgUmV0dXJucyAtRUlOVkFMIGlmIHByZXNlbnRlZCB3aXRoIGludmFsaWQgcG93ZXJkb21haW4KLSAqIHBvaW50ZXJzLCAtRU5PRU5UIGlmIHB3cmRtMiBjYW5ub3Qgd2FrZSB1cCBwd3JkbTEgaW4gaGFyZHdhcmUsIG9yCi0gKiAwIHVwb24gc3VjY2Vzcy4KLSAqLwotaW50IHB3cmRtX2RlbF93a2RlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpCi17Ci0Jc3RydWN0IHBvd2VyZG9tYWluICpwOwotCi0JaWYgKCFwd3JkbTEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcCA9IF9wd3JkbV9kZXBzX2xvb2t1cChwd3JkbTIsIHB3cmRtMS0+d2tkZXBfc3Jjcyk7Ci0JaWYgKElTX0VSUihwKSkgewotCQlwcl9kZWJ1ZygicG93ZXJkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgd2FrZSB1cCBvZiAiCi0JCQkgIiVzIHdoZW4gJXMgd2FrZXMgdXBcbiIsIHB3cmRtMS0+bmFtZSwgcHdyZG0yLT5uYW1lKTsKLQkJcmV0dXJuIFBUUl9FUlIocCk7Ci0JfQotCi0JcHJfZGVidWcoInBvd2VyZG9tYWluOiBoYXJkd2FyZSB3aWxsIG5vIGxvbmdlciB3YWtlIHVwICVzIGFmdGVyICVzICIKLQkJICJ3YWtlcyB1cFxuIiwgcHdyZG0xLT5uYW1lLCBwd3JkbTItPm5hbWUpOwotCi0JcHJtX2NsZWFyX21vZF9yZWdfYml0cygoMSA8PCBwd3JkbTItPmRlcF9iaXQpLAotCQkJICAgICAgIHB3cmRtMS0+cHJjbV9vZmZzLCBQTV9XS0RFUCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoqCi0gKiBwd3JkbV9yZWFkX3drZGVwIC0gcmVhZCB3YWtldXAgZGVwZW5kZW5jeSBzdGF0ZSBmcm9tIHB3cmRtMiB0byBwd3JkbTEKLSAqIEBwd3JkbTE6IHdha2UgdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiB1cCAoZGVwZW5kZW50KQotICogQHB3cmRtMjogd2hlbiB0aGlzIHN0cnVjdCBwb3dlcmRvbWFpbiAqIHdha2VzIHVwIChzb3VyY2UpCi0gKgotICogUmV0dXJuIDEgaWYgYSBoYXJkd2FyZSB3YWtldXAgZGVwZW5kZW5jeSBleGlzdHMgd2hlcmVpbiBwd3JkbTEgd2lsbCBiZQotICogYXdva2VuIHdoZW4gcHdyZG0yIHdha2VzIHVwOyAwIGlmIGRlcGVuZGVuY3kgaXMgbm90IHNldDsgLUVJTlZBTAotICogaWYgZWl0aGVyIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgaW52YWxpZDsgb3IgLUVOT0VOVCBpZiB0aGUgaGFyZHdhcmUKLSAqIGlzIGluY2FwYWJsZS4KLSAqCi0gKiBSRVZJU0lUOiBDdXJyZW50bHkgdGhpcyBmdW5jdGlvbiBvbmx5IHJlcHJlc2VudHMgc29mdHdhcmUtY29udHJvbGxhYmxlCi0gKiB3YWtldXAgZGVwZW5kZW5jaWVzLiAgV2FrZXVwIGRlcGVuZGVuY2llcyBmaXhlZCBpbiBoYXJkd2FyZSBhcmUgbm90Ci0gKiB5ZXQgaGFuZGxlZCBoZXJlLgotICovCi1pbnQgcHdyZG1fcmVhZF93a2RlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpCi17Ci0Jc3RydWN0IHBvd2VyZG9tYWluICpwOwotCi0JaWYgKCFwd3JkbTEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcCA9IF9wd3JkbV9kZXBzX2xvb2t1cChwd3JkbTIsIHB3cmRtMS0+d2tkZXBfc3Jjcyk7Ci0JaWYgKElTX0VSUihwKSkgewotCQlwcl9kZWJ1ZygicG93ZXJkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgd2FrZSB1cCBvZiAiCi0JCQkgIiVzIHdoZW4gJXMgd2FrZXMgdXBcbiIsIHB3cmRtMS0+bmFtZSwgcHdyZG0yLT5uYW1lKTsKLQkJcmV0dXJuIFBUUl9FUlIocCk7Ci0JfQotCi0JcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtMS0+cHJjbV9vZmZzLCBQTV9XS0RFUCwKLQkJCQkJKDEgPDwgcHdyZG0yLT5kZXBfYml0KSk7Ci19Ci0KLS8qKgotICogcHdyZG1fYWRkX3NsZWVwZGVwIC0gYWRkIGEgc2xlZXAgZGVwZW5kZW5jeSBmcm9tIHB3cmRtMiB0byBwd3JkbTEKLSAqIEBwd3JkbTE6IHByZXZlbnQgdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiBmcm9tIHNsZWVwaW5nIChkZXBlbmRlbnQpCi0gKiBAcHdyZG0yOiB3aGVuIHRoaXMgc3RydWN0IHBvd2VyZG9tYWluICogaXMgYWN0aXZlIChzb3VyY2UpCi0gKgotICogUHJldmVudCBwd3JkbTEgZnJvbSBhdXRvbWF0aWNhbGx5IGdvaW5nIGluYWN0aXZlIChhbmQgdGhlbiB0bwotICogcmV0ZW50aW9uIG9yIG9mZikgaWYgcHdyZG0yIGlzIHN0aWxsIGFjdGl2ZS4JIFJldHVybnMgLUVJTlZBTCBpZgotICogcHJlc2VudGVkIHdpdGggaW52YWxpZCBwb3dlcmRvbWFpbiBwb2ludGVycyBvciBjYWxsZWQgb24gYSBtYWNoaW5lCi0gKiB0aGF0IGRvZXMgbm90IHN1cHBvcnQgc29mdHdhcmUtY29uZmlndXJhYmxlIGhhcmR3YXJlIHNsZWVwIGRlcGVuZGVuY2llcywKLSAqIC1FTk9FTlQgaWYgdGhlIHNwZWNpZmllZCBkZXBlbmRlbmN5IGNhbm5vdCBiZSBzZXQgaW4gaGFyZHdhcmUsIG9yCi0gKiAwIHVwb24gc3VjY2Vzcy4KLSAqLwotaW50IHB3cmRtX2FkZF9zbGVlcGRlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpCi17Ci0Jc3RydWN0IHBvd2VyZG9tYWluICpwOwotCi0JaWYgKCFjcHVfaXNfb21hcDM0eHgoKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIXB3cmRtMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwID0gX3B3cmRtX2RlcHNfbG9va3VwKHB3cmRtMiwgcHdyZG0xLT5zbGVlcGRlcF9zcmNzKTsKLQlpZiAoSVNfRVJSKHApKSB7Ci0JCXByX2RlYnVnKCJwb3dlcmRvbWFpbjogaGFyZHdhcmUgY2Fubm90IHNldC9jbGVhciBzbGVlcCAiCi0JCQkgImRlcGVuZGVuY3kgYWZmZWN0aW5nICVzIGZyb20gJXNcbiIsIHB3cmRtMS0+bmFtZSwKLQkJCSBwd3JkbTItPm5hbWUpOwotCQlyZXR1cm4gUFRSX0VSUihwKTsKLQl9Ci0KLQlwcl9kZWJ1ZygicG93ZXJkb21haW46IHdpbGwgcHJldmVudCAlcyBmcm9tIHNsZWVwaW5nIGlmICVzIGlzIGFjdGl2ZVxuIiwKLQkJIHB3cmRtMS0+bmFtZSwgcHdyZG0yLT5uYW1lKTsKLQotCWNtX3NldF9tb2RfcmVnX2JpdHMoKDEgPDwgcHdyZG0yLT5kZXBfYml0KSwKLQkJCSAgICBwd3JkbTEtPnByY21fb2ZmcywgT01BUDM0MzBfQ01fU0xFRVBERVApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogcHdyZG1fZGVsX3NsZWVwZGVwIC0gcmVtb3ZlIGEgc2xlZXAgZGVwZW5kZW5jeSBmcm9tIHB3cmRtMiB0byBwd3JkbTEKLSAqIEBwd3JkbTE6IHByZXZlbnQgdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiBmcm9tIHNsZWVwaW5nIChkZXBlbmRlbnQpCi0gKiBAcHdyZG0yOiB3aGVuIHRoaXMgc3RydWN0IHBvd2VyZG9tYWluICogaXMgYWN0aXZlIChzb3VyY2UpCi0gKgotICogQWxsb3cgcHdyZG0xIHRvIGF1dG9tYXRpY2FsbHkgZ28gaW5hY3RpdmUgKGFuZCB0aGVuIHRvIHJldGVudGlvbiBvcgotICogb2ZmKSwgaW5kZXBlbmRlbnQgb2YgdGhlIGFjdGl2aXR5IHN0YXRlIG9mIHB3cmRtMi4gIFJldHVybnMgLUVJTlZBTAotICogaWYgcHJlc2VudGVkIHdpdGggaW52YWxpZCBwb3dlcmRvbWFpbiBwb2ludGVycyBvciBjYWxsZWQgb24gYSBtYWNoaW5lCi0gKiB0aGF0IGRvZXMgbm90IHN1cHBvcnQgc29mdHdhcmUtY29uZmlndXJhYmxlIGhhcmR3YXJlIHNsZWVwIGRlcGVuZGVuY2llcywKLSAqIC1FTk9FTlQgaWYgdGhlIHNwZWNpZmllZCBkZXBlbmRlbmN5IGNhbm5vdCBiZSBjbGVhcmVkIGluIGhhcmR3YXJlLCBvcgotICogMCB1cG9uIHN1Y2Nlc3MuCi0gKi8KLWludCBwd3JkbV9kZWxfc2xlZXBkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKQotewotCXN0cnVjdCBwb3dlcmRvbWFpbiAqcDsKLQotCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCFwd3JkbTEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcCA9IF9wd3JkbV9kZXBzX2xvb2t1cChwd3JkbTIsIHB3cmRtMS0+c2xlZXBkZXBfc3Jjcyk7Ci0JaWYgKElTX0VSUihwKSkgewotCQlwcl9kZWJ1ZygicG93ZXJkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgc2xlZXAgIgotCQkJICJkZXBlbmRlbmN5IGFmZmVjdGluZyAlcyBmcm9tICVzXG4iLCBwd3JkbTEtPm5hbWUsCi0JCQkgcHdyZG0yLT5uYW1lKTsKLQkJcmV0dXJuIFBUUl9FUlIocCk7Ci0JfQotCi0JcHJfZGVidWcoInBvd2VyZG9tYWluOiB3aWxsIG5vIGxvbmdlciBwcmV2ZW50ICVzIGZyb20gc2xlZXBpbmcgaWYgIgotCQkgIiVzIGlzIGFjdGl2ZVxuIiwgcHdyZG0xLT5uYW1lLCBwd3JkbTItPm5hbWUpOwotCi0JY21fY2xlYXJfbW9kX3JlZ19iaXRzKCgxIDw8IHB3cmRtMi0+ZGVwX2JpdCksCi0JCQkgICAgICBwd3JkbTEtPnByY21fb2ZmcywgT01BUDM0MzBfQ01fU0xFRVBERVApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogcHdyZG1fcmVhZF9zbGVlcGRlcCAtIHJlYWQgc2xlZXAgZGVwZW5kZW5jeSBzdGF0ZSBmcm9tIHB3cmRtMiB0byBwd3JkbTEKLSAqIEBwd3JkbTE6IHByZXZlbnQgdGhpcyBzdHJ1Y3QgcG93ZXJkb21haW4gKiBmcm9tIHNsZWVwaW5nIChkZXBlbmRlbnQpCi0gKiBAcHdyZG0yOiB3aGVuIHRoaXMgc3RydWN0IHBvd2VyZG9tYWluICogaXMgYWN0aXZlIChzb3VyY2UpCi0gKgotICogUmV0dXJuIDEgaWYgYSBoYXJkd2FyZSBzbGVlcCBkZXBlbmRlbmN5IGV4aXN0cyB3aGVyZWluIHB3cmRtMSB3aWxsCi0gKiBub3QgYmUgYWxsb3dlZCB0byBhdXRvbWF0aWNhbGx5IGdvIGluYWN0aXZlIGlmIHB3cmRtMiBpcyBhY3RpdmU7Ci0gKiAwIGlmIHB3cmRtMSdzIGF1dG9tYXRpYyBwb3dlciBzdGF0ZSBpbmFjdGl2aXR5IHRyYW5zaXRpb24gaXMgaW5kZXBlbmRlbnQKLSAqIG9mIHB3cmRtMidzOyAtRUlOVkFMIGlmIGVpdGhlciBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIGludmFsaWQgb3IgY2FsbGVkCi0gKiBvbiBhIG1hY2hpbmUgdGhhdCBkb2VzIG5vdCBzdXBwb3J0IHNvZnR3YXJlLWNvbmZpZ3VyYWJsZSBoYXJkd2FyZSBzbGVlcAotICogZGVwZW5kZW5jaWVzOyBvciAtRU5PRU5UIGlmIHRoZSBoYXJkd2FyZSBpcyBpbmNhcGFibGUuCi0gKgotICogUkVWSVNJVDogQ3VycmVudGx5IHRoaXMgZnVuY3Rpb24gb25seSByZXByZXNlbnRzIHNvZnR3YXJlLWNvbnRyb2xsYWJsZQotICogc2xlZXAgZGVwZW5kZW5jaWVzLglTbGVlcCBkZXBlbmRlbmNpZXMgZml4ZWQgaW4gaGFyZHdhcmUgYXJlIG5vdAotICogeWV0IGhhbmRsZWQgaGVyZS4KLSAqLwotaW50IHB3cmRtX3JlYWRfc2xlZXBkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKQotewotCXN0cnVjdCBwb3dlcmRvbWFpbiAqcDsKLQotCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JaWYgKCFwd3JkbTEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcCA9IF9wd3JkbV9kZXBzX2xvb2t1cChwd3JkbTIsIHB3cmRtMS0+c2xlZXBkZXBfc3Jjcyk7Ci0JaWYgKElTX0VSUihwKSkgewotCQlwcl9kZWJ1ZygicG93ZXJkb21haW46IGhhcmR3YXJlIGNhbm5vdCBzZXQvY2xlYXIgc2xlZXAgIgotCQkJICJkZXBlbmRlbmN5IGFmZmVjdGluZyAlcyBmcm9tICVzXG4iLCBwd3JkbTEtPm5hbWUsCi0JCQkgcHdyZG0yLT5uYW1lKTsKLQkJcmV0dXJuIFBUUl9FUlIocCk7Ci0JfQotCi0JcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtMS0+cHJjbV9vZmZzLCBPTUFQMzQzMF9DTV9TTEVFUERFUCwKLQkJCQkJKDEgPDwgcHdyZG0yLT5kZXBfYml0KSk7Ci19Ci0KIC8qKgogICogcHdyZG1fZ2V0X21lbV9iYW5rX2NvdW50IC0gZ2V0IG51bWJlciBvZiBtZW1vcnkgYmFua3MgaW4gdGhpcyBwb3dlcmRvbWFpbgogICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKgogICoKLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGNvbnRyb2xsYWJsZSBtZW1vcnkgYmFua3MgaW4gcG93ZXJkb21haW4gcHdyZG0sCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBjb250cm9sbGFibGUgbWVtb3J5IGJhbmtzIGluIHBvd2VyZG9tYWluIEBwd3JkbSwKICAqIHN0YXJ0aW5nIHdpdGggMS4gIFJldHVybnMgLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsLgogICovCiBpbnQgcHdyZG1fZ2V0X21lbV9iYW5rX2NvdW50KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCkBAIC02OTEsNyArNDIzLDcgQEAKICAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gc2V0CiAgKiBAcHdyc3Q6IG9uZSBvZiB0aGUgUFdSRE1fUE9XRVJfKiBtYWNyb3MKICAqCi0gKiBTZXQgdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgbmV4dCBwb3dlciBzdGF0ZSB0byBwd3JzdC4gIFRoZSBwb3dlcmRvbWFpbgorICogU2V0IHRoZSBwb3dlcmRvbWFpbiBAcHdyZG0ncyBuZXh0IHBvd2VyIHN0YXRlIHRvIEBwd3JzdC4gIFRoZSBwb3dlcmRvbWFpbgogICogbWF5IG5vdCBlbnRlciB0aGlzIHN0YXRlIGltbWVkaWF0ZWx5IGlmIHRoZSBwcmVjb25kaXRpb25zIGZvciB0aGlzIHN0YXRlCiAgKiBoYXZlIG5vdCBiZWVuIHNhdGlzZmllZC4gIFJldHVybnMgLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcwogICogbnVsbCBvciBpZiB0aGUgcG93ZXIgc3RhdGUgaXMgaW52YWxpZCBmb3IgdGhlIHBvd2VyZG9taW4sIG9yIHJldHVybnMgMApAQCAtNzEwLDcgKzQ0Miw3IEBACiAKIAlwcm1fcm13X21vZF9yZWdfYml0cyhPTUFQX1BPV0VSU1RBVEVfTUFTSywKIAkJCSAgICAgKHB3cnN0IDw8IE9NQVBfUE9XRVJTVEFURV9TSElGVCksCi0JCQkgICAgIHB3cmRtLT5wcmNtX29mZnMsIFBNX1BXU1RDVFJMKTsKKwkJCSAgICAgcHdyZG0tPnByY21fb2ZmcywgcHdyc3RjdHJsX3JlZ19vZmZzKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzE5LDcgKzQ1MSw3IEBACiAgKiBwd3JkbV9yZWFkX25leHRfcHdyc3QgLSBnZXQgbmV4dCBwb3dlcmRvbWFpbiBwb3dlciBzdGF0ZQogICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgcG93ZXIgc3RhdGUKICAqCi0gKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgbmV4dCBwb3dlciBzdGF0ZS4gIFJldHVybnMgLUVJTlZBTAorICogUmV0dXJuIHRoZSBwb3dlcmRvbWFpbiBAcHdyZG0ncyBuZXh0IHBvd2VyIHN0YXRlLiAgUmV0dXJucyAtRUlOVkFMCiAgKiBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsIG9yIHJldHVybnMgdGhlIG5leHQgcG93ZXIgc3RhdGUKICAqIHVwb24gc3VjY2Vzcy4KICAqLwpAQCAtNzI4LDE1ICs0NjAsMTUgQEAKIAlpZiAoIXB3cmRtKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCwKLQkJCQkJT01BUF9QT1dFUlNUQVRFX01BU0spOworCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLAorCQkJCSBwd3JzdGN0cmxfcmVnX29mZnMsIE9NQVBfUE9XRVJTVEFURV9NQVNLKTsKIH0KIAogLyoqCiAgKiBwd3JkbV9yZWFkX3B3cnN0IC0gZ2V0IGN1cnJlbnQgcG93ZXJkb21haW4gcG93ZXIgc3RhdGUKICAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gZ2V0IHBvd2VyIHN0YXRlCiAgKgotICogUmV0dXJuIHRoZSBwb3dlcmRvbWFpbiBwd3JkbSdzIGN1cnJlbnQgcG93ZXIgc3RhdGUuCVJldHVybnMgLUVJTlZBTAorICogUmV0dXJuIHRoZSBwb3dlcmRvbWFpbiBAcHdyZG0ncyBjdXJyZW50IHBvd2VyIHN0YXRlLglSZXR1cm5zIC1FSU5WQUwKICAqIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwgb3IgcmV0dXJucyB0aGUgY3VycmVudCBwb3dlciBzdGF0ZQogICogdXBvbiBzdWNjZXNzLgogICovCkBAIC03NDUsMTUgKzQ3NywxNSBAQAogCWlmICghcHdyZG0pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsIFBNX1BXU1RTVCwKLQkJCQkJT01BUF9QT1dFUlNUQVRFU1RfTUFTSyk7CisJcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsCisJCQkJIHB3cnN0c3RfcmVnX29mZnMsIE9NQVBfUE9XRVJTVEFURVNUX01BU0spOwogfQogCiAvKioKICAqIHB3cmRtX3JlYWRfcHJldl9wd3JzdCAtIGdldCBwcmV2aW91cyBwb3dlcmRvbWFpbiBwb3dlciBzdGF0ZQogICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgcHJldmlvdXMgcG93ZXIgc3RhdGUKICAqCi0gKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgcHJldmlvdXMgcG93ZXIgc3RhdGUuICBSZXR1cm5zIC1FSU5WQUwKKyAqIFJldHVybiB0aGUgcG93ZXJkb21haW4gQHB3cmRtJ3MgcHJldmlvdXMgcG93ZXIgc3RhdGUuICBSZXR1cm5zIC1FSU5WQUwKICAqIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwgb3IgcmV0dXJucyB0aGUgcHJldmlvdXMgcG93ZXIgc3RhdGUKICAqIHVwb24gc3VjY2Vzcy4KICAqLwpAQCAtNzcxLDExICs1MDMsMTEgQEAKICAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gc2V0CiAgKiBAcHdyc3Q6IG9uZSBvZiB0aGUgUFdSRE1fUE9XRVJfKiBtYWNyb3MKICAqCi0gKiBTZXQgdGhlIG5leHQgcG93ZXIgc3RhdGUgdGhhdCB0aGUgbG9naWMgcG9ydGlvbiBvZiB0aGUgcG93ZXJkb21haW4KLSAqIHB3cmRtIHdpbGwgZW50ZXIgd2hlbiB0aGUgcG93ZXJkb21haW4gZW50ZXJzIHJldGVudGlvbi4gIFRoaXMgd2lsbAotICogYmUgZWl0aGVyIFJFVEVOVElPTiBvciBPRkYsIGlmIHN1cHBvcnRlZC4gIFJldHVybnMgLUVJTlZBTCBpZiB0aGUKLSAqIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciB0aGUgdGFyZ2V0IHBvd2VyIHN0YXRlIGlzIG5vdCBub3QKLSAqIHN1cHBvcnRlZCwgb3IgcmV0dXJucyAwIHVwb24gc3VjY2Vzcy4KKyAqIFNldCB0aGUgbmV4dCBwb3dlciBzdGF0ZSBAcHdyc3QgdGhhdCB0aGUgbG9naWMgcG9ydGlvbiBvZiB0aGUKKyAqIHBvd2VyZG9tYWluIEBwd3JkbSB3aWxsIGVudGVyIHdoZW4gdGhlIHBvd2VyZG9tYWluIGVudGVycyByZXRlbnRpb24uCisgKiBUaGlzIHdpbGwgYmUgZWl0aGVyIFJFVEVOVElPTiBvciBPRkYsIGlmIHN1cHBvcnRlZC4gIFJldHVybnMKKyAqIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciB0aGUgdGFyZ2V0IHBvd2VyCisgKiBzdGF0ZSBpcyBub3Qgbm90IHN1cHBvcnRlZCwgb3IgcmV0dXJucyAwIHVwb24gc3VjY2Vzcy4KICAqLwogaW50IHB3cmRtX3NldF9sb2dpY19yZXRzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBwd3JzdCkKIHsKQEAgLTc5Niw3ICs1MjgsNyBAQAogCSAqLwogCXBybV9ybXdfbW9kX3JlZ19iaXRzKE9NQVAzNDMwX0xPR0lDTDFDQUNIRVJFVFNUQVRFLAogCQkJICAgICAocHdyc3QgPDwgX19mZnMoT01BUDM0MzBfTE9HSUNMMUNBQ0hFUkVUU1RBVEUpKSwKLQkJCSAgICAgcHdyZG0tPnByY21fb2ZmcywgUE1fUFdTVENUUkwpOworCQkJCSBwd3JkbS0+cHJjbV9vZmZzLCBwd3JzdGN0cmxfcmVnX29mZnMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04MDcsMTMgKzUzOSwxNCBAQAogICogQGJhbms6IG1lbW9yeSBiYW5rIG51bWJlciB0byBzZXQgKDAtMykKICAqIEBwd3JzdDogb25lIG9mIHRoZSBQV1JETV9QT1dFUl8qIG1hY3JvcwogICoKLSAqIFNldCB0aGUgbmV4dCBwb3dlciBzdGF0ZSB0aGF0IG1lbW9yeSBiYW5rIHggb2YgdGhlIHBvd2VyZG9tYWluCi0gKiBwd3JkbSB3aWxsIGVudGVyIHdoZW4gdGhlIHBvd2VyZG9tYWluIGVudGVycyB0aGUgT04gc3RhdGUuICBCYW5rCi0gKiB3aWxsIGJlIGEgbnVtYmVyIGZyb20gMCB0byAzLCBhbmQgcmVwcmVzZW50cyBkaWZmZXJlbnQgdHlwZXMgb2YKLSAqIG1lbW9yeSwgZGVwZW5kaW5nIG9uIHRoZSBwb3dlcmRvbWFpbi4gIFJldHVybnMgLUVJTlZBTCBpZiB0aGUKLSAqIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciB0aGUgdGFyZ2V0IHBvd2VyIHN0YXRlIGlzIG5vdCBub3QKLSAqIHN1cHBvcnRlZCBmb3IgdGhpcyBtZW1vcnkgYmFuaywgLUVFWElTVCBpZiB0aGUgdGFyZ2V0IG1lbW9yeSBiYW5rCi0gKiBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgY29udHJvbGxhYmxlLCBvciByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLgorICogU2V0IHRoZSBuZXh0IHBvd2VyIHN0YXRlIEBwd3JzdCB0aGF0IG1lbW9yeSBiYW5rIEBiYW5rIG9mIHRoZQorICogcG93ZXJkb21haW4gQHB3cmRtIHdpbGwgZW50ZXIgd2hlbiB0aGUgcG93ZXJkb21haW4gZW50ZXJzIHRoZSBPTgorICogc3RhdGUuICBAYmFuayB3aWxsIGJlIGEgbnVtYmVyIGZyb20gMCB0byAzLCBhbmQgcmVwcmVzZW50cyBkaWZmZXJlbnQKKyAqIHR5cGVzIG9mIG1lbW9yeSwgZGVwZW5kaW5nIG9uIHRoZSBwb3dlcmRvbWFpbi4gIFJldHVybnMgLUVJTlZBTCBpZgorICogdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciB0aGUgdGFyZ2V0IHBvd2VyIHN0YXRlIGlzIG5vdAorICogbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBtZW1vcnkgYmFuaywgLUVFWElTVCBpZiB0aGUgdGFyZ2V0IG1lbW9yeQorICogYmFuayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgY29udHJvbGxhYmxlLCBvciByZXR1cm5zIDAgdXBvbgorICogc3VjY2Vzcy4KICAqLwogaW50IHB3cmRtX3NldF9tZW1fb25zdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rLCB1OCBwd3JzdCkKIHsKQEAgLTgzOSwxNiArNTcyLDE5IEBACiAJICovCiAJc3dpdGNoIChiYW5rKSB7CiAJY2FzZSAwOgotCQltID0gT01BUDM0MzBfU0hBUkVETDFDQUNIRUZMQVRPTlNUQVRFX01BU0s7CisJCW0gPSBPTUFQX01FTTBfT05TVEFURV9NQVNLOwogCQlicmVhazsKIAljYXNlIDE6Ci0JCW0gPSBPTUFQMzQzMF9MMUZMQVRNRU1PTlNUQVRFX01BU0s7CisJCW0gPSBPTUFQX01FTTFfT05TVEFURV9NQVNLOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCW0gPSBPTUFQMzQzMF9TSEFSRURMMkNBQ0hFRkxBVE9OU1RBVEVfTUFTSzsKKwkJbSA9IE9NQVBfTUVNMl9PTlNUQVRFX01BU0s7CiAJCWJyZWFrOwogCWNhc2UgMzoKLQkJbSA9IE9NQVAzNDMwX0wyRkxBVE1FTU9OU1RBVEVfTUFTSzsKKwkJbSA9IE9NQVBfTUVNM19PTlNUQVRFX01BU0s7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJbSA9IE9NQVBfTUVNNF9PTlNUQVRFX01BU0s7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVdBUk5fT04oMSk7IC8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KQEAgLTg1Niw3ICs1OTIsNyBAQAogCX0KIAogCXBybV9ybXdfbW9kX3JlZ19iaXRzKG0sIChwd3JzdCA8PCBfX2ZmcyhtKSksCi0JCQkgICAgIHB3cmRtLT5wcmNtX29mZnMsIFBNX1BXU1RDVFJMKTsKKwkJCSAgICAgcHdyZG0tPnByY21fb2ZmcywgcHdyc3RjdHJsX3JlZ19vZmZzKTsKIAogCXJldHVybiAwOwogfQpAQCAtODY3LDE0ICs2MDMsMTUgQEAKICAqIEBiYW5rOiBtZW1vcnkgYmFuayBudW1iZXIgdG8gc2V0ICgwLTMpCiAgKiBAcHdyc3Q6IG9uZSBvZiB0aGUgUFdSRE1fUE9XRVJfKiBtYWNyb3MKICAqCi0gKiBTZXQgdGhlIG5leHQgcG93ZXIgc3RhdGUgdGhhdCBtZW1vcnkgYmFuayB4IG9mIHRoZSBwb3dlcmRvbWFpbgotICogcHdyZG0gd2lsbCBlbnRlciB3aGVuIHRoZSBwb3dlcmRvbWFpbiBlbnRlcnMgdGhlIFJFVEVOVElPTiBzdGF0ZS4KLSAqIEJhbmsgd2lsbCBiZSBhIG51bWJlciBmcm9tIDAgdG8gMywgYW5kIHJlcHJlc2VudHMgZGlmZmVyZW50IHR5cGVzCi0gKiBvZiBtZW1vcnksIGRlcGVuZGluZyBvbiB0aGUgcG93ZXJkb21haW4uICBwd3JzdCB3aWxsIGJlIGVpdGhlcgotICogUkVURU5USU9OIG9yIE9GRiwgaWYgc3VwcG9ydGVkLiBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluCi0gKiBwb2ludGVyIGlzIG51bGwgb3IgdGhlIHRhcmdldCBwb3dlciBzdGF0ZSBpcyBub3Qgbm90IHN1cHBvcnRlZCBmb3IKLSAqIHRoaXMgbWVtb3J5IGJhbmssIC1FRVhJU1QgaWYgdGhlIHRhcmdldCBtZW1vcnkgYmFuayBkb2VzIG5vdCBleGlzdAotICogb3IgaXMgbm90IGNvbnRyb2xsYWJsZSwgb3IgcmV0dXJucyAwIHVwb24gc3VjY2Vzcy4KKyAqIFNldCB0aGUgbmV4dCBwb3dlciBzdGF0ZSBAcHdyc3QgdGhhdCBtZW1vcnkgYmFuayBAYmFuayBvZiB0aGUKKyAqIHBvd2VyZG9tYWluIEBwd3JkbSB3aWxsIGVudGVyIHdoZW4gdGhlIHBvd2VyZG9tYWluIGVudGVycyB0aGUKKyAqIFJFVEVOVElPTiBzdGF0ZS4gIEJhbmsgd2lsbCBiZSBhIG51bWJlciBmcm9tIDAgdG8gMywgYW5kIHJlcHJlc2VudHMKKyAqIGRpZmZlcmVudCB0eXBlcyBvZiBtZW1vcnksIGRlcGVuZGluZyBvbiB0aGUgcG93ZXJkb21haW4uICBAcHdyc3QKKyAqIHdpbGwgYmUgZWl0aGVyIFJFVEVOVElPTiBvciBPRkYsIGlmIHN1cHBvcnRlZC4gIFJldHVybnMgLUVJTlZBTCBpZgorICogdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciB0aGUgdGFyZ2V0IHBvd2VyIHN0YXRlIGlzIG5vdAorICogbm90IHN1cHBvcnRlZCBmb3IgdGhpcyBtZW1vcnkgYmFuaywgLUVFWElTVCBpZiB0aGUgdGFyZ2V0IG1lbW9yeQorICogYmFuayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgY29udHJvbGxhYmxlLCBvciByZXR1cm5zIDAgdXBvbgorICogc3VjY2Vzcy4KICAqLwogaW50IHB3cmRtX3NldF9tZW1fcmV0c3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuaywgdTggcHdyc3QpCiB7CkBAIC05MDAsMTYgKzYzNywxOSBAQAogCSAqLwogCXN3aXRjaCAoYmFuaykgewogCWNhc2UgMDoKLQkJbSA9IE9NQVAzNDMwX1NIQVJFREwxQ0FDSEVGTEFUUkVUU1RBVEU7CisJCW0gPSBPTUFQX01FTTBfUkVUU1RBVEVfTUFTSzsKIAkJYnJlYWs7CiAJY2FzZSAxOgotCQltID0gT01BUDM0MzBfTDFGTEFUTUVNUkVUU1RBVEU7CisJCW0gPSBPTUFQX01FTTFfUkVUU1RBVEVfTUFTSzsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQltID0gT01BUDM0MzBfU0hBUkVETDJDQUNIRUZMQVRSRVRTVEFURTsKKwkJbSA9IE9NQVBfTUVNMl9SRVRTVEFURV9NQVNLOwogCQlicmVhazsKIAljYXNlIDM6Ci0JCW0gPSBPTUFQMzQzMF9MMkZMQVRNRU1SRVRTVEFURTsKKwkJbSA9IE9NQVBfTUVNM19SRVRTVEFURV9NQVNLOworCQlicmVhazsKKwljYXNlIDQ6CisJCW0gPSBPTUFQX01FTTRfUkVUU1RBVEVfTUFTSzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJV0FSTl9PTigxKTsgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwpAQCAtOTE3LDcgKzY1Nyw3IEBACiAJfQogCiAJcHJtX3Jtd19tb2RfcmVnX2JpdHMobSwgKHB3cnN0IDw8IF9fZmZzKG0pKSwgcHdyZG0tPnByY21fb2ZmcywKLQkJCSAgICAgUE1fUFdTVENUUkwpOworCQkJICAgICBwd3JzdGN0cmxfcmVnX29mZnMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC05MjYsMjcgKzY2NiwyNyBAQAogICogcHdyZG1fcmVhZF9sb2dpY19wd3JzdCAtIGdldCBjdXJyZW50IHBvd2VyZG9tYWluIGxvZ2ljIHJldGVudGlvbiBwb3dlciBzdGF0ZQogICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgY3VycmVudCBsb2dpYyByZXRlbnRpb24gcG93ZXIgc3RhdGUKICAqCi0gKiBSZXR1cm4gdGhlIGN1cnJlbnQgcG93ZXIgc3RhdGUgdGhhdCB0aGUgbG9naWMgcG9ydGlvbiBvZgotICogcG93ZXJkb21haW4gcHdyZG0gd2lsbCBlbnRlcgotICogUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwgb3IgcmV0dXJucyB0aGUKLSAqIGN1cnJlbnQgbG9naWMgcmV0ZW50aW9uIHBvd2VyIHN0YXRlIHVwb24gc3VjY2Vzcy4KKyAqIFJldHVybiB0aGUgcG93ZXIgc3RhdGUgdGhhdCB0aGUgbG9naWMgcG9ydGlvbiBvZiBwb3dlcmRvbWFpbiBAcHdyZG0KKyAqIHdpbGwgZW50ZXIgd2hlbiB0aGUgcG93ZXJkb21haW4gZW50ZXJzIHJldGVudGlvbi4gIFJldHVybnMgLUVJTlZBTAorICogaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciByZXR1cm5zIHRoZSBsb2dpYyByZXRlbnRpb24KKyAqIHBvd2VyIHN0YXRlIHVwb24gc3VjY2Vzcy4KICAqLwogaW50IHB3cmRtX3JlYWRfbG9naWNfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKIHsKIAlpZiAoIXB3cmRtKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJldHVybiBwcm1fcmVhZF9tb2RfYml0c19zaGlmdChwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUU1QsCi0JCQkJCU9NQVAzNDMwX0xPR0lDU1RBVEVTVCk7CisJcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsCisJCQkJIHB3cnN0c3RfcmVnX29mZnMsIE9NQVAzNDMwX0xPR0lDU1RBVEVTVCk7CiB9CiAKIC8qKgogICogcHdyZG1fcmVhZF9wcmV2X2xvZ2ljX3B3cnN0IC0gZ2V0IHByZXZpb3VzIHBvd2VyZG9tYWluIGxvZ2ljIHBvd2VyIHN0YXRlCiAgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIGdldCBwcmV2aW91cyBsb2dpYyBwb3dlciBzdGF0ZQogICoKLSAqIFJldHVybiB0aGUgcG93ZXJkb21haW4gcHdyZG0ncyBsb2dpYyBwb3dlciBzdGF0ZS4gIFJldHVybnMgLUVJTlZBTAotICogaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciByZXR1cm5zIHRoZSBwcmV2aW91cyBsb2dpYwotICogcG93ZXIgc3RhdGUgdXBvbiBzdWNjZXNzLgorICogUmV0dXJuIHRoZSBwb3dlcmRvbWFpbiBAcHdyZG0ncyBwcmV2aW91cyBsb2dpYyBwb3dlciBzdGF0ZS4gIFJldHVybnMKKyAqIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciByZXR1cm5zIHRoZSBwcmV2aW91cworICogbG9naWMgcG93ZXIgc3RhdGUgdXBvbiBzdWNjZXNzLgogICovCiBpbnQgcHdyZG1fcmVhZF9wcmV2X2xvZ2ljX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCiB7CkBAIC05NjQsMTIgKzcwNCwzNSBAQAogfQogCiAvKioKKyAqIHB3cmRtX3JlYWRfbG9naWNfcmV0c3QgLSBnZXQgbmV4dCBwb3dlcmRvbWFpbiBsb2dpYyBwb3dlciBzdGF0ZQorICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgbmV4dCBsb2dpYyBwb3dlciBzdGF0ZQorICoKKyAqIFJldHVybiB0aGUgcG93ZXJkb21haW4gcHdyZG0ncyBsb2dpYyBwb3dlciBzdGF0ZS4gIFJldHVybnMgLUVJTlZBTAorICogaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciByZXR1cm5zIHRoZSBuZXh0IGxvZ2ljCisgKiBwb3dlciBzdGF0ZSB1cG9uIHN1Y2Nlc3MuCisgKi8KK2ludCBwd3JkbV9yZWFkX2xvZ2ljX3JldHN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCit7CisJaWYgKCFwd3JkbSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIFRoZSByZWdpc3RlciBiaXQgbmFtZXMgYmVsb3cgbWF5IG5vdCBjb3JyZXNwb25kIHRvIHRoZQorCSAqIGFjdHVhbCBuYW1lcyBvZiB0aGUgYml0cyBpbiBlYWNoIHBvd2VyZG9tYWluJ3MgcmVnaXN0ZXIsCisJICogYnV0IHRoZSB0eXBlIG9mIHZhbHVlIHJldHVybmVkIGlzIHRoZSBzYW1lIGZvciBlYWNoCisJICogcG93ZXJkb21haW4uCisJICovCisJcmV0dXJuIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHB3cmRtLT5wcmNtX29mZnMsIHB3cnN0Y3RybF9yZWdfb2ZmcywKKwkJCQkJT01BUDM0MzBfTE9HSUNTVEFURVNUKTsKK30KKworLyoqCiAgKiBwd3JkbV9yZWFkX21lbV9wd3JzdCAtIGdldCBjdXJyZW50IG1lbW9yeSBiYW5rIHBvd2VyIHN0YXRlCiAgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIGdldCBjdXJyZW50IG1lbW9yeSBiYW5rIHBvd2VyIHN0YXRlCiAgKiBAYmFuazogbWVtb3J5IGJhbmsgbnVtYmVyICgwLTMpCiAgKgotICogUmV0dXJuIHRoZSBwb3dlcmRvbWFpbiBwd3JkbSdzIGN1cnJlbnQgbWVtb3J5IHBvd2VyIHN0YXRlIGZvciBiYW5rCi0gKiB4LiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwsIC1FRVhJU1QgaWYKKyAqIFJldHVybiB0aGUgcG93ZXJkb21haW4gQHB3cmRtJ3MgY3VycmVudCBtZW1vcnkgcG93ZXIgc3RhdGUgZm9yIGJhbmsKKyAqIEBiYW5rLiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwsIC1FRVhJU1QgaWYKICAqIHRoZSB0YXJnZXQgbWVtb3J5IGJhbmsgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGNvbnRyb2xsYWJsZSwgb3IKICAqIHJldHVybnMgdGhlIGN1cnJlbnQgbWVtb3J5IHBvd2VyIHN0YXRlIHVwb24gc3VjY2Vzcy4KICAqLwpAQCAtOTk0LDIzICs3NTcsMjcgQEAKIAkgKi8KIAlzd2l0Y2ggKGJhbmspIHsKIAljYXNlIDA6Ci0JCW0gPSBPTUFQMzQzMF9TSEFSRURMMUNBQ0hFRkxBVFNUQVRFU1RfTUFTSzsKKwkJbSA9IE9NQVBfTUVNMF9TVEFURVNUX01BU0s7CiAJCWJyZWFrOwogCWNhc2UgMToKLQkJbSA9IE9NQVAzNDMwX0wxRkxBVE1FTVNUQVRFU1RfTUFTSzsKKwkJbSA9IE9NQVBfTUVNMV9TVEFURVNUX01BU0s7CiAJCWJyZWFrOwogCWNhc2UgMjoKLQkJbSA9IE9NQVAzNDMwX1NIQVJFREwyQ0FDSEVGTEFUU1RBVEVTVF9NQVNLOworCQltID0gT01BUF9NRU0yX1NUQVRFU1RfTUFTSzsKIAkJYnJlYWs7CiAJY2FzZSAzOgotCQltID0gT01BUDM0MzBfTDJGTEFUTUVNU1RBVEVTVF9NQVNLOworCQltID0gT01BUF9NRU0zX1NUQVRFU1RfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQltID0gT01BUF9NRU00X1NUQVRFU1RfTUFTSzsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJV0FSTl9PTigxKTsgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLwogCQlyZXR1cm4gLUVFWElTVDsKIAl9CiAKLQlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0tPnByY21fb2ZmcywgUE1fUFdTVFNULCBtKTsKKwlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0tPnByY21fb2ZmcywKKwkJCQkJIHB3cnN0c3RfcmVnX29mZnMsIG0pOwogfQogCiAvKioKQEAgLTEwMTgsMTAgKzc4NSwxMSBAQAogICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKiB0byBnZXQgcHJldmlvdXMgbWVtb3J5IGJhbmsgcG93ZXIgc3RhdGUKICAqIEBiYW5rOiBtZW1vcnkgYmFuayBudW1iZXIgKDAtMykKICAqCi0gKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIHB3cmRtJ3MgcHJldmlvdXMgbWVtb3J5IHBvd2VyIHN0YXRlIGZvciBiYW5rCi0gKiB4LiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwsIC1FRVhJU1QgaWYKLSAqIHRoZSB0YXJnZXQgbWVtb3J5IGJhbmsgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGNvbnRyb2xsYWJsZSwgb3IKLSAqIHJldHVybnMgdGhlIHByZXZpb3VzIG1lbW9yeSBwb3dlciBzdGF0ZSB1cG9uIHN1Y2Nlc3MuCisgKiBSZXR1cm4gdGhlIHBvd2VyZG9tYWluIEBwd3JkbSdzIHByZXZpb3VzIG1lbW9yeSBwb3dlciBzdGF0ZSBmb3IKKyAqIGJhbmsgQGJhbmsuICBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCwKKyAqIC1FRVhJU1QgaWYgdGhlIHRhcmdldCBtZW1vcnkgYmFuayBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QKKyAqIGNvbnRyb2xsYWJsZSwgb3IgcmV0dXJucyB0aGUgcHJldmlvdXMgbWVtb3J5IHBvd2VyIHN0YXRlIHVwb24KKyAqIHN1Y2Nlc3MuCiAgKi8KIGludCBwd3JkbV9yZWFkX3ByZXZfbWVtX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmspCiB7CkBAIC0xMDY1LDEzICs4MzMsNjMgQEAKIH0KIAogLyoqCisgKiBwd3JkbV9yZWFkX21lbV9yZXRzdCAtIGdldCBuZXh0IG1lbW9yeSBiYW5rIHBvd2VyIHN0YXRlCisgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIGdldCBtZXh0IG1lbW9yeSBiYW5rIHBvd2VyIHN0YXRlCisgKiBAYmFuazogbWVtb3J5IGJhbmsgbnVtYmVyICgwLTMpCisgKgorICogUmV0dXJuIHRoZSBwb3dlcmRvbWFpbiBwd3JkbSdzIG5leHQgbWVtb3J5IHBvd2VyIHN0YXRlIGZvciBiYW5rCisgKiB4LiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwsIC1FRVhJU1QgaWYKKyAqIHRoZSB0YXJnZXQgbWVtb3J5IGJhbmsgZG9lcyBub3QgZXhpc3Qgb3IgaXMgbm90IGNvbnRyb2xsYWJsZSwgb3IKKyAqIHJldHVybnMgdGhlIG5leHQgbWVtb3J5IHBvd2VyIHN0YXRlIHVwb24gc3VjY2Vzcy4KKyAqLworaW50IHB3cmRtX3JlYWRfbWVtX3JldHN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IGJhbmspCit7CisJdTMyIG07CisKKwlpZiAoIXB3cmRtKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChwd3JkbS0+YmFua3MgPCAoYmFuayArIDEpKQorCQlyZXR1cm4gLUVFWElTVDsKKworCS8qCisJICogVGhlIHJlZ2lzdGVyIGJpdCBuYW1lcyBiZWxvdyBtYXkgbm90IGNvcnJlc3BvbmQgdG8gdGhlCisJICogYWN0dWFsIG5hbWVzIG9mIHRoZSBiaXRzIGluIGVhY2ggcG93ZXJkb21haW4ncyByZWdpc3RlciwKKwkgKiBidXQgdGhlIHR5cGUgb2YgdmFsdWUgcmV0dXJuZWQgaXMgdGhlIHNhbWUgZm9yIGVhY2gKKwkgKiBwb3dlcmRvbWFpbi4KKwkgKi8KKwlzd2l0Y2ggKGJhbmspIHsKKwljYXNlIDA6CisJCW0gPSBPTUFQX01FTTBfUkVUU1RBVEVfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQltID0gT01BUF9NRU0xX1JFVFNUQVRFX01BU0s7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbSA9IE9NQVBfTUVNMl9SRVRTVEFURV9NQVNLOworCQlicmVhazsKKwljYXNlIDM6CisJCW0gPSBPTUFQX01FTTNfUkVUU1RBVEVfTUFTSzsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQltID0gT01BUF9NRU00X1JFVFNUQVRFX01BU0s7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsgLyogc2hvdWxkIG5ldmVyIGhhcHBlbiAqLworCQlyZXR1cm4gLUVFWElTVDsKKwl9CisKKwlyZXR1cm4gcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQocHdyZG0tPnByY21fb2ZmcywKKwkJCQkJcHdyc3RjdHJsX3JlZ19vZmZzLCBtKTsKK30KKworLyoqCiAgKiBwd3JkbV9jbGVhcl9hbGxfcHJldl9wd3JzdCAtIGNsZWFyIHByZXZpb3VzIHBvd2Vyc3RhdGUgcmVnaXN0ZXIgZm9yIGEgcHdyZG0KICAqIEBwd3JkbTogc3RydWN0IHBvd2VyZG9tYWluICogdG8gY2xlYXIKICAqCi0gKiBDbGVhciB0aGUgcG93ZXJkb21haW4ncyBwcmV2aW91cyBwb3dlciBzdGF0ZSByZWdpc3Rlci4gIENsZWFycyB0aGUKLSAqIGVudGlyZSByZWdpc3RlciwgaW5jbHVkaW5nIGxvZ2ljIGFuZCBtZW1vcnkgYmFuayBwcmV2aW91cyBwb3dlciBzdGF0ZXMuCi0gKiBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCwgb3IgcmV0dXJucyAwIHVwb24KLSAqIHN1Y2Nlc3MuCisgKiBDbGVhciB0aGUgcG93ZXJkb21haW4ncyBwcmV2aW91cyBwb3dlciBzdGF0ZSByZWdpc3RlciBAcHdyZG0uCisgKiBDbGVhcnMgdGhlIGVudGlyZSByZWdpc3RlciwgaW5jbHVkaW5nIGxvZ2ljIGFuZCBtZW1vcnkgYmFuaworICogcHJldmlvdXMgcG93ZXIgc3RhdGVzLiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyCisgKiBpcyBudWxsLCBvciByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLgogICovCiBpbnQgcHdyZG1fY2xlYXJfYWxsX3ByZXZfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKIHsKQEAgLTEwOTYsMTEgKzkxNCwxMSBAQAogICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKgogICoKICAqIEVuYWJsZSBhdXRvbWF0aWMgY29udGV4dCBzYXZlLWFuZC1yZXN0b3JlIHVwb24gcG93ZXIgc3RhdGUgY2hhbmdlCi0gKiBmb3Igc29tZSBkZXZpY2VzIGluIGEgcG93ZXJkb21haW4uICBXYXJuaW5nOiB0aGlzIG9ubHkgYWZmZWN0cyBhCi0gKiBzdWJzZXQgb2YgZGV2aWNlcyBpbiBhIHBvd2VyZG9tYWluOyBjaGVjayB0aGUgVFJNIGNsb3NlbHkuICBSZXR1cm5zCi0gKiAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwgb3IgaWYgdGhlIHBvd2VyZG9tYWluCi0gKiBkb2VzIG5vdCBzdXBwb3J0IGF1dG9tYXRpYyBzYXZlLWFuZC1yZXN0b3JlLCBvciByZXR1cm5zIDAgdXBvbgotICogc3VjY2Vzcy4KKyAqIGZvciBzb21lIGRldmljZXMgaW4gdGhlIHBvd2VyZG9tYWluIEBwd3JkbS4gIFdhcm5pbmc6IHRoaXMgb25seQorICogYWZmZWN0cyBhIHN1YnNldCBvZiBkZXZpY2VzIGluIGEgcG93ZXJkb21haW47IGNoZWNrIHRoZSBUUk0KKyAqIGNsb3NlbHkuICBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluIHBvaW50ZXIgaXMgbnVsbCBvciBpZgorICogdGhlIHBvd2VyZG9tYWluIGRvZXMgbm90IHN1cHBvcnQgYXV0b21hdGljIHNhdmUtYW5kLXJlc3RvcmUsIG9yCisgKiByZXR1cm5zIDAgdXBvbiBzdWNjZXNzLgogICovCiBpbnQgcHdyZG1fZW5hYmxlX2hkd3Jfc2FyKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pCiB7CkBAIC0xMTE0LDcgKzkzMiw3IEBACiAJCSBwd3JkbS0+bmFtZSk7CiAKIAlwcm1fcm13X21vZF9yZWdfYml0cygwLCAxIDw8IE9NQVAzNDMwRVMyX1NBVkVBTkRSRVNUT1JFX1NISUZULAotCQkJICAgICBwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUQ1RSTCk7CisJCQkgICAgIHB3cmRtLT5wcmNtX29mZnMsIHB3cnN0Y3RybF9yZWdfb2Zmcyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExMjQsMTEgKzk0MiwxMSBAQAogICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKgogICoKICAqIERpc2FibGUgYXV0b21hdGljIGNvbnRleHQgc2F2ZS1hbmQtcmVzdG9yZSB1cG9uIHBvd2VyIHN0YXRlIGNoYW5nZQotICogZm9yIHNvbWUgZGV2aWNlcyBpbiBhIHBvd2VyZG9tYWluLiAgV2FybmluZzogdGhpcyBvbmx5IGFmZmVjdHMgYQotICogc3Vic2V0IG9mIGRldmljZXMgaW4gYSBwb3dlcmRvbWFpbjsgY2hlY2sgdGhlIFRSTSBjbG9zZWx5LiAgUmV0dXJucwotICogLUVJTlZBTCBpZiB0aGUgcG93ZXJkb21haW4gcG9pbnRlciBpcyBudWxsIG9yIGlmIHRoZSBwb3dlcmRvbWFpbgotICogZG9lcyBub3Qgc3VwcG9ydCBhdXRvbWF0aWMgc2F2ZS1hbmQtcmVzdG9yZSwgb3IgcmV0dXJucyAwIHVwb24KLSAqIHN1Y2Nlc3MuCisgKiBmb3Igc29tZSBkZXZpY2VzIGluIHRoZSBwb3dlcmRvbWFpbiBAcHdyZG0uICBXYXJuaW5nOiB0aGlzIG9ubHkKKyAqIGFmZmVjdHMgYSBzdWJzZXQgb2YgZGV2aWNlcyBpbiBhIHBvd2VyZG9tYWluOyBjaGVjayB0aGUgVFJNCisgKiBjbG9zZWx5LiAgUmV0dXJucyAtRUlOVkFMIGlmIHRoZSBwb3dlcmRvbWFpbiBwb2ludGVyIGlzIG51bGwgb3IgaWYKKyAqIHRoZSBwb3dlcmRvbWFpbiBkb2VzIG5vdCBzdXBwb3J0IGF1dG9tYXRpYyBzYXZlLWFuZC1yZXN0b3JlLCBvcgorICogcmV0dXJucyAwIHVwb24gc3VjY2Vzcy4KICAqLwogaW50IHB3cmRtX2Rpc2FibGVfaGR3cl9zYXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKIHsKQEAgLTExNDIsNyArOTYwLDcgQEAKIAkJIHB3cmRtLT5uYW1lKTsKIAogCXBybV9ybXdfbW9kX3JlZ19iaXRzKDEgPDwgT01BUDM0MzBFUzJfU0FWRUFORFJFU1RPUkVfU0hJRlQsIDAsCi0JCQkgICAgIHB3cmRtLT5wcmNtX29mZnMsIFBNX1BXU1RDVFJMKTsKKwkJCSAgICAgcHdyZG0tPnByY21fb2ZmcywgcHdyc3RjdHJsX3JlZ19vZmZzKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTE1MSw3ICs5NjksNyBAQAogICogcHdyZG1faGFzX2hkd3Jfc2FyIC0gdGVzdCB3aGV0aGVyIHBvd2VyZG9tYWluIHN1cHBvcnRzIGhhcmR3YXJlIFNBUgogICogQHB3cmRtOiBzdHJ1Y3QgcG93ZXJkb21haW4gKgogICoKLSAqIFJldHVybnMgMSBpZiBwb3dlcmRvbWFpbiAncHdyZG0nIHN1cHBvcnRzIGhhcmR3YXJlIHNhdmUtYW5kLXJlc3RvcmUKKyAqIFJldHVybnMgMSBpZiBwb3dlcmRvbWFpbiBAcHdyZG0gc3VwcG9ydHMgaGFyZHdhcmUgc2F2ZS1hbmQtcmVzdG9yZQogICogZm9yIHNvbWUgZGV2aWNlcywgb3IgMCBpZiBpdCBkb2VzIG5vdC4KICAqLwogYm9vbCBwd3JkbV9oYXNfaGR3cl9zYXIoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSkKQEAgLTExNjMsNyArOTgxLDcgQEAKICAqIHB3cmRtX3dhaXRfdHJhbnNpdGlvbiAtIHdhaXQgZm9yIHBvd2VyZG9tYWluIHBvd2VyIHRyYW5zaXRpb24gdG8gZmluaXNoCiAgKiBAcHdyZG06IHN0cnVjdCBwb3dlcmRvbWFpbiAqIHRvIHdhaXQgZm9yCiAgKgotICogSWYgdGhlIHBvd2VyZG9tYWluIHB3cmRtIGlzIGluIHRoZSBwcm9jZXNzIG9mIGEgc3RhdGUgdHJhbnNpdGlvbiwKKyAqIElmIHRoZSBwb3dlcmRvbWFpbiBAcHdyZG0gaXMgaW4gdGhlIHByb2Nlc3Mgb2YgYSBzdGF0ZSB0cmFuc2l0aW9uLAogICogc3BpbiB1bnRpbCBpdCBjb21wbGV0ZXMgdGhlIHBvd2VyIHRyYW5zaXRpb24sIG9yIHVudGlsIGFuIGl0ZXJhdGlvbgogICogYmFpbG91dCB2YWx1ZSBpcyByZWFjaGVkLiBSZXR1cm5zIC1FSU5WQUwgaWYgdGhlIHBvd2VyZG9tYWluCiAgKiBwb2ludGVyIGlzIG51bGwsIC1FQUdBSU4gaWYgdGhlIGJhaWxvdXQgdmFsdWUgd2FzIHJlYWNoZWQsIG9yCkBAIC0xMTgzLDEwICsxMDAxLDEwIEBACiAJICovCiAKIAkvKiBYWFggSXMgdGhpcyB1ZGVsYXkoKSB2YWx1ZSBtZWFuaW5nZnVsPyAqLwotCXdoaWxlICgocHJtX3JlYWRfbW9kX3JlZyhwd3JkbS0+cHJjbV9vZmZzLCBQTV9QV1NUU1QpICYKKwl3aGlsZSAoKHBybV9yZWFkX21vZF9yZWcocHdyZG0tPnByY21fb2ZmcywgcHdyc3RzdF9yZWdfb2ZmcykgJgogCQlPTUFQX0lOVFJBTlNJVElPTikgJiYKIAkgICAgICAgKGMrKyA8IFBXUkRNX1RSQU5TSVRJT05fQkFJTE9VVCkpCi0JCXVkZWxheSgxKTsKKwkJCXVkZWxheSgxKTsKIAogCWlmIChjID4gUFdSRE1fVFJBTlNJVElPTl9CQUlMT1VUKSB7CiAJCXByaW50ayhLRVJOX0VSUiAicG93ZXJkb21haW46IHdhaXRlZCB0b28gbG9uZyBmb3IgIgpAQCAtMTIxMywxMiArMTAzMSw2IEBACiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KLWludCBwd3JkbV9jbGtfc3RhdGVfc3dpdGNoKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpZiAoY2xrICE9IE5VTEwgJiYgY2xrLT5jbGtkbSAhPSBOVUxMKQotCQlyZXR1cm4gcHdyZG1fY2xrZG1fc3RhdGVfc3dpdGNoKGNsay0+Y2xrZG0pOwotCXJldHVybiAtRUlOVkFMOwotfQogCiBpbnQgcHdyZG1fcHJlX3RyYW5zaXRpb24odm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zLmggYi9hcmNoL2FybS9tYWNoLW9tYXAyL3Bvd2VyZG9tYWlucy5oCmluZGV4IDA1N2IyZTMuLjEwNWNiY2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMuaApAQCAtMSw4ICsxLDggQEAKIC8qCiAgKiBPTUFQMi8zIGNvbW1vbiBwb3dlcmRvbWFpbiBkZWZpbml0aW9ucwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy04IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CiAgKiBEZWJ1Z2dpbmcgYW5kIGludGVncmF0aW9uIGZpeGVzIGJ5IEpvdW5pIEjDtmdhbmRlcgpAQCAtMTIsMjYgKzEyLDIxIEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCisvKgorICogVG8gRG8gTGlzdAorICogLT4gTW92ZSB0aGUgU2xlZXAvV2FrZXVwIGRlcGVuZGVuY2llcyBmcm9tIFBvd2VyIERvbWFpbiBmcmFtZXdvcmsgdG8KKyAqICAgIENsb2NrIERvbWFpbiBGcmFtZXdvcmsKKyAqLworCiAjaWZuZGVmIEFSQ0hfQVJNX01BQ0hfT01BUDJfUE9XRVJET01BSU5TCiAjZGVmaW5lIEFSQ0hfQVJNX01BQ0hfT01BUDJfUE9XRVJET01BSU5TCiAKIC8qCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgYWxsIG9mIHRoZSBwb3dlcmRvbWFpbnMgdGhhdCBoYXZlIHNvbWUgZWxlbWVudAotICogb2Ygc29mdHdhcmUgY29udHJvbCBmb3IgdGhlIE9NQVAyNHh4IGFuZCBPTUFQMzRYWCBjaGlwcy4KLSAqCi0gKiBBIGZldyBub3RlczoKKyAqIG9mIHNvZnR3YXJlIGNvbnRyb2wgZm9yIHRoZSBPTUFQMjR4eCBhbmQgT01BUDM0eHggY2hpcHMuCiAgKgogICogVGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0aW5nIG9mIHBvd2VyZG9tYWlucyBvbiB0aGUgY2hpcHM7IG9ubHkKICAqIHBvd2VyZG9tYWlucyB0aGF0IGNhbiBiZSBjb250cm9sbGVkIGluIHNvZnR3YXJlLgotICoKLSAqIEEgdXNlZnVsIHZhbGlkYXRpb24gcnVsZSBmb3Igc3RydWN0IHBvd2VyZG9tYWluOgotICogQW55IHBvd2VyZG9tYWluIHJlZmVyZW5jZWQgYnkgYSB3a2RlcF9zcmNzIG9yIHNsZWVwZGVwX3NyY3MgYXJyYXkKLSAqIG11c3QgaGF2ZSBhIGRlcF9iaXQgYXNzaWduZWQuICBTbyB3a2RlcF9zcmNzL3NsZWVwZGVwX3NyY3MgYXJlIHJlYWxseQotICoganVzdCBzb2Z0d2FyZS1jb250cm9sbGFibGUgZGVwZW5kZW5jaWVzLiAgTm9uLXNvZnR3YXJlLWNvbnRyb2xsYWJsZQotICogZGVwZW5kZW5jaWVzIGRvIGV4aXN0LCBidXQgdGhleSBhcmUgbm90IGVuY29kZWQgYmVsb3cgKHlldCkuCi0gKgotICogMjR4eCBkb2VzIG5vdCBzdXBwb3J0IHByb2dyYW1tYWJsZSBzbGVlcCBkZXBlbmRlbmNpZXMgKFNMRUVQREVQKQotICoKICAqLwogCiAvKgpAQCAtNDEsMjYgKzM2LDE3IEBACiAgKgogICogT24gdGhlIDI0MjAsIHRoaXMgaXMgYSAnQzU1IERTUCBjYWxsZWQsIHNpbXBseSwgdGhlIERTUC4gIEl0cwogICogcG93ZXJkb21haW4gaXMgY2FsbGVkIHRoZSAiRFNQIHBvd2VyIGRvbWFpbi4iICBPbiB0aGUgMjQzMCwgdGhlCi0gKiBvbi1ib2FyZCBEU1AgaXMgYSAnQzY0IERTUCwgbm93IGNhbGxlZCB0aGUgSVZBMiBvciBJVkEyLjEuICBJdHMKLSAqIHBvd2VyZG9tYWluIGlzIHN0aWxsIGNhbGxlZCB0aGUgIkRTUCBwb3dlciBkb21haW4uIglPbiB0aGUgMzQzMCwKLSAqIHRoZSBEU1AgaXMgYSAnQzY0IERTUCBsaWtlIHRoZSAyNDMwLCBhbHNvIGtub3duIGFzIHRoZSBJVkEyOyBidXQKLSAqIGl0cyBwb3dlcmRvbWFpbiBpcyBub3cgY2FsbGVkIHRoZSAiSVZBMiBwb3dlciBkb21haW4uIgorICogb24tYm9hcmQgRFNQIGlzIGEgJ0M2NCBEU1AsIG5vdyBjYWxsZWQgKGFsb25nIHdpdGggaXRzIGhhcmR3YXJlCisgKiBhY2NlbGVyYXRvcnMpIHRoZSBJVkEyIG9yIElWQTIuMS4gIEl0cyBwb3dlcmRvbWFpbiBpcyBzdGlsbCBjYWxsZWQKKyAqIHRoZSAiRFNQIHBvd2VyIGRvbWFpbi4iIE9uIHRoZSAzNDMwLCB0aGUgRFNQIGlzIGEgJ0M2NCBEU1AgbGlrZSB0aGUKKyAqIDI0MzAsIGFsc28ga25vd24gYXMgdGhlIElWQTI7IGJ1dCBpdHMgcG93ZXJkb21haW4gaXMgbm93IGNhbGxlZCB0aGUKKyAqICJJVkEyIHBvd2VyIGRvbWFpbi4iCiAgKgogICogVGhlIDI0MjAgYWxzbyBoYXMgc29tZXRoaW5nIGNhbGxlZCB0aGUgSVZBLCB3aGljaCBpcyBhIHNlcGFyYXRlIEFSTQogICogY29yZSwgYW5kIGhhcyBub3RoaW5nIHRvIGRvIHdpdGggdGhlIERTUC9JVkEyLgogICoKICAqIElkZWFsbHkgdGhlIERTUC9JVkEyIGNvdWxkIGp1c3QgYmUgdGhlIHNhbWUgcG93ZXJkb21haW4sIGJ1dCB0aGUgUFJDTQogICogYWRkcmVzcyBvZmZzZXQgaXMgZGlmZmVyZW50IGJldHdlZW4gdGhlIEM1NSBhbmQgQzY0IERTUHMuCi0gKgotICogVGhlIG92ZXJseS1zcGVjaWZpYyBkZXBfYml0IG5hbWVzIGFyZSBkdWUgdG8gYSBiaXQgbmFtZSBjb2xsaXNpb24KLSAqIHdpdGggQ01fRkNMS0VOX3tEU1AsSVZBMn0uICBUaGUgRFNQL0lWQTIgUE1fV0tERVAgYW5kIENNX1NMRUVQREVQIHNoaWZ0Ci0gKiB2YWx1ZSBhcmUgdGhlIHNhbWUgZm9yIGFsbCBwb3dlcmRvbWFpbnM6IDIKLSAqLwotCi0vKgotICogWFhYIHNob3VsZCBkZXBfYml0IGJlIGEgbWFzaywgc28gd2UgY2FuIHRlc3QgdG8gc2VlIGlmIGl0IGlzIDAgYXMgYQotICogc2FuaXR5IGNoZWNrPwotICogWFhYIGVuY29kZSBoYXJkd2FyZSBmaXhlZCB3YWtldXAgZGVwZW5kZW5jaWVzIC0tIGVzcC4gZm9yIDM0MzAgQ09SRQogICovCiAKICNpbmNsdWRlIDxwbGF0L3Bvd2VyZG9tYWluLmg+CkBAIC02OCw2OSArNTQsMjMgQEAKICNpbmNsdWRlICJwcmNtLWNvbW1vbi5oIgogI2luY2x1ZGUgInBybS5oIgogI2luY2x1ZGUgImNtLmgiCi0KLS8qIE9NQVAyLzMtY29tbW9uIHBvd2VyZG9tYWlucyBhbmQgd2FrZXVwIGRlcGVuZGVuY2llcyAqLwotCi0vKgotICogMjQyMC8yNDMwIFBNX1dLREVQX0dGWDogQ09SRSwgTVBVLCBXS1VQCi0gKiAzNDMwRVMxIFBNX1dLREVQX0dGWDogYWRkcyBJVkEyLCByZW1vdmVzIENPUkUKLSAqIDM0MzBFUzIgUE1fV0tERVBfU0dYOiBhZGRzIElWQTIsIHJlbW92ZXMgQ09SRQotICovCi1zdGF0aWMgc3RydWN0IHB3cmRtX2RlcCBnZnhfc2d4X3drZGVwc1tdID0gewotCXsKLQkJLnB3cmRtX25hbWUgPSAiY29yZV9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQotCX0sCi0JewotCQkucHdyZG1fbmFtZSA9ICJpdmEyX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwKLQkJCQkJICAgIENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5wd3JkbV9uYW1lID0gIndrdXBfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCB8Ci0JCQkJCSAgICBDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JeyBOVUxMIH0sCi19OwotCi0vKgotICogMzQzMDogQ01fU0xFRVBERVBfQ0FNOiBNUFUKLSAqIDM0MzBFUzE6IENNX1NMRUVQREVQX0dGWDogTVBVCi0gKiAzNDMwRVMyOiBDTV9TTEVFUERFUF9TR1g6IE1QVQotICovCi1zdGF0aWMgc3RydWN0IHB3cmRtX2RlcCBjYW1fZ2Z4X3NsZWVwZGVwc1tdID0gewotCXsKLQkJLnB3cmRtX25hbWUgPSAibXB1X3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7IE5VTEwgfSwKLX07Ci0KLQogI2luY2x1ZGUgInBvd2VyZG9tYWluczI0eHguaCIKICNpbmNsdWRlICJwb3dlcmRvbWFpbnMzNHh4LmgiCisjaW5jbHVkZSAicG93ZXJkb21haW5zNDR4eC5oIgogCisvKiBPTUFQMi8zLWNvbW1vbiBwb3dlcmRvbWFpbnMgKi8KIAotLyoKLSAqIE9NQVAyLzMgY29tbW9uIHBvd2VyZG9tYWlucwotICovCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKIAogLyoKICAqIFRoZSBHRlggcG93ZXJkb21haW4gaXMgbm90IHByZXNlbnQgb24gMzQzMEVTMiwgYnV0IGN1cnJlbnRseSB3ZSBkbyBub3QKICAqIGhhdmUgYSBtYWNybyB0byBmaWx0ZXIgaXQgb3V0IGF0IGNvbXBpbGUtdGltZS4KICAqLwotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBnZnhfcHdyZG0gPSB7CitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGdmeF9vbWFwMl9wd3JkbSA9IHsKIAkubmFtZQkJICA9ICJnZnhfcHdyZG0iLAogCS5wcmNtX29mZnMJICA9IEdGWF9NT0QsCiAJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCB8CiAJCQkJCSAgIENISVBfSVNfT01BUDM0MzBFUzEpLAotCS53a2RlcF9zcmNzCSAgPSBnZnhfc2d4X3drZGVwcywKLQkuc2xlZXBkZXBfc3JjcwkgID0gY2FtX2dmeF9zbGVlcGRlcHMsCiAJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAogCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAogCS5iYW5rcwkJICA9IDEsCkBAIC0xNDIsMjIgKzgyLDI0IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gd2t1cF9wd3JkbSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gd2t1cF9vbWFwMl9wd3JkbSA9IHsKIAkubmFtZQkJPSAid2t1cF9wd3JkbSIsCiAJLnByY21fb2Zmcwk9IFdLVVBfTU9ELAogCS5vbWFwX2NoaXAJPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYIHwgQ0hJUF9JU19PTUFQMzQzMCksCi0JLmRlcF9iaXQJPSBPTUFQX0VOX1dLVVBfU0hJRlQsCiB9OwogCisjZW5kaWYKIAogCiAvKiBBcyBwb3dlcmRvbWFpbnMgYXJlIGFkZGVkIG9yIHJlbW92ZWQgYWJvdmUsIHRoaXMgbGlzdCBtdXN0IGFsc28gYmUgY2hhbmdlZCAqLwogc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiAqcG93ZXJkb21haW5zX29tYXBbXSBfX2luaXRkYXRhID0gewogCi0JJmdmeF9wd3JkbSwKLQkmd2t1cF9wd3JkbSwKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorCSZ3a3VwX29tYXAyX3B3cmRtLAorCSZnZnhfb21hcDJfcHdyZG0sCisjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKIAkmZHNwX3B3cmRtLAogCSZtcHVfMjR4eF9wd3JkbSwKIAkmY29yZV8yNHh4X3B3cmRtLApAQCAtMTY3LDEyICsxMDksMTIgQEAKIAkmbWRtX3B3cmRtLAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCiAJJml2YTJfcHdyZG0sCi0JJm1wdV8zNHh4X3B3cmRtLAorCSZtcHVfM3h4eF9wd3JkbSwKIAkmbmVvbl9wd3JkbSwKLQkmY29yZV8zNHh4X3ByZV9lczNfMV9wd3JkbSwKLQkmY29yZV8zNHh4X2VzM18xX3B3cmRtLAorCSZjb3JlXzN4eHhfcHJlX2VzM18xX3B3cmRtLAorCSZjb3JlXzN4eHhfZXMzXzFfcHdyZG0sCiAJJmNhbV9wd3JkbSwKIAkmZHNzX3B3cmRtLAogCSZwZXJfcHdyZG0sCkBAIC0xODYsNiArMTI4LDI0IEBACiAJJmRwbGw1X3B3cmRtLAogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAorCSZjb3JlXzQ0eHhfcHdyZG0sCisJJmdmeF80NHh4X3B3cmRtLAorCSZhYmVfNDR4eF9wd3JkbSwKKwkmZHNzXzQ0eHhfcHdyZG0sCisJJnRlc2xhXzQ0eHhfcHdyZG0sCisJJndrdXBfNDR4eF9wd3JkbSwKKwkmY3B1MF80NHh4X3B3cmRtLAorCSZjcHUxXzQ0eHhfcHdyZG0sCisJJmVtdV80NHh4X3B3cmRtLAorCSZtcHVfNDR4eF9wd3JkbSwKKwkmaXZhaGRfNDR4eF9wd3JkbSwKKwkmY2FtXzQ0eHhfcHdyZG0sCisJJmwzaW5pdF80NHh4X3B3cmRtLAorCSZsNHBlcl80NHh4X3B3cmRtLAorCSZhbHdheXNfb25fY29yZV80NHh4X3B3cmRtLAorCSZjZWZ1c2VfNDR4eF9wd3JkbSwKKyNlbmRpZgogCU5VTEwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMjR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMyNHh4LmgKaW5kZXggYmQyNDlhNC4uNzc1MDkzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMyNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMyNHh4LmgKQEAgLTIsNyArMiw3IEBACiAgKiBPTUFQMjRYWCBwb3dlcmRvbWFpbiBkZWZpbml0aW9ucwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KICAqCiAgKiBXcml0dGVuIGJ5IFBhdWwgV2FsbXNsZXkKICAqIERlYnVnZ2luZyBhbmQgaW50ZWdyYXRpb24gZml4ZXMgYnkgSm91bmkgSMO2Z2FuZGVyCkBAIC0zMCw4MyArMzAsNyBAQAogCiAvKiAyNFhYIHBvd2VyZG9tYWlucyBhbmQgZGVwZW5kZW5jaWVzICovCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAotCi0KLS8qIFdha2V1cCBkZXBlbmRlbmN5IHNvdXJjZSBhcnJheXMgKi8KLQotLyoKLSAqIDI0MjAvMjQzMCBQTV9XS0RFUF9EU1A6IENPUkUsIE1QVSwgV0tVUAotICogMjQzMCBQTV9XS0RFUF9NRE06IHNhbWUgYXMgYWJvdmUKLSAqLwotc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgZHNwX21kbV8yNHh4X3drZGVwc1tdID0gewotCXsKLQkJLnB3cmRtX25hbWUgPSAiY29yZV9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQotCX0sCi0JewotCQkucHdyZG1fbmFtZSA9ICJtcHVfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKLQl9LAotCXsKLQkJLnB3cmRtX25hbWUgPSAid2t1cF9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQotCX0sCi0JeyBOVUxMIH0sCi19OwotCi0vKgotICogMjQyMCBQTV9XS0RFUF9NUFU6IENPUkUsIERTUCwgV0tVUAotICogMjQzMCBhZGRzIE1ETQotICovCi1zdGF0aWMgc3RydWN0IHB3cmRtX2RlcCBtcHVfMjR4eF93a2RlcHNbXSA9IHsKLQl7Ci0JCS5wd3JkbV9uYW1lID0gImNvcmVfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKLQl9LAotCXsKLQkJLnB3cmRtX25hbWUgPSAiZHNwX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCi0JfSwKLQl7Ci0JCS5wd3JkbV9uYW1lID0gIndrdXBfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKLQl9LAotCXsKLQkJLnB3cmRtX25hbWUgPSAibWRtX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0MzApCi0JfSwKLQl7IE5VTEwgfSwKLX07Ci0KLS8qCi0gKiAyNDIwIFBNX1dLREVQX0NPUkU6IERTUCwgR0ZYLCBNUFUsIFdLVVAKLSAqIDI0MzAgYWRkcyBNRE0KLSAqLwotc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgY29yZV8yNHh4X3drZGVwc1tdID0gewotCXsKLQkJLnB3cmRtX25hbWUgPSAiZHNwX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpCi0JfSwKLQl7Ci0JCS5wd3JkbV9uYW1lID0gImdmeF9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQotCX0sCi0JewotCQkucHdyZG1fbmFtZSA9ICJtcHVfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjRYWCkKLQl9LAotCXsKLQkJLnB3cmRtX25hbWUgPSAid2t1cF9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKQotCX0sCi0JewotCQkucHdyZG1fbmFtZSA9ICJtZG1fcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMjQzMCkKLQl9LAotCXsgTlVMTCB9LAotfTsKLQorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCiAKIC8qIFBvd2VyZG9tYWlucyAqLwogCkBAIC0xMTQsOCArMzgsNiBAQAogCS5uYW1lCQkgID0gImRzcF9wd3JkbSIsCiAJLnByY21fb2ZmcwkgID0gT01BUDI0WFhfRFNQX01PRCwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKLQkuZGVwX2JpdAkgID0gT01BUDI0WFhfUE1fV0tERVBfTVBVX0VOX0RTUF9TSElGVCwKLQkud2tkZXBfc3JjcwkgID0gZHNwX21kbV8yNHh4X3drZGVwcywKIAkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCiAJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCiAJLmJhbmtzCQkgID0gMSwKQEAgLTEzMSw4ICs1Myw2IEBACiAJLm5hbWUJCSAgPSAibXB1X3B3cmRtIiwKIAkucHJjbV9vZmZzCSAgPSBNUFVfTU9ELAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDI0WFgpLAotCS5kZXBfYml0CSAgPSBPTUFQMjRYWF9FTl9NUFVfU0hJRlQsCi0JLndrZGVwX3NyY3MJICA9IG1wdV8yNHh4X3drZGVwcywKIAkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCiAJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKIAkuYmFua3MJCSAgPSAxLApAQCAtMTQ4LDkgKzY4LDcgQEAKIAkubmFtZQkJICA9ICJjb3JlX3B3cmRtIiwKIAkucHJjbV9vZmZzCSAgPSBDT1JFX01PRCwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNFhYKSwKLQkud2tkZXBfc3JjcwkgID0gY29yZV8yNHh4X3drZGVwcywKIAkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCi0JLmRlcF9iaXQJICA9IE9NQVAyNFhYX0VOX0NPUkVfU0hJRlQsCiAJLmJhbmtzCQkgID0gMywKIAkucHdyc3RzX21lbV9yZXQJICA9IHsKIAkJWzBdID0gUFdSU1RTX09GRl9SRVQsCSAvKiBNRU0xUkVUU1RBVEUgKi8KQEAgLTE2NCw3ICs4Miw3IEBACiAJfSwKIH07CiAKLSNlbmRpZgkgICAvKiBDT05GSUdfQVJDSF9PTUFQMjRYWCAqLworI2VuZGlmCSAgIC8qIENPTkZJR19BUkNIX09NQVAyICovCiAKIAogCkBAIC0xNzYsMTMgKzk0LDEwIEBACiAKIC8qIFhYWCAyNDMwIEtJTExET01BSU5XS1VQIGJpdD8gIE5vIGN1cnJlbnQgdXNlcnMgYXBwYXJlbnRseSAqLwogCi0vKiBBbm90aGVyIGNhc2Ugb2YgYml0IG5hbWUgY29sbGlzaW9ucyBiZXR3ZWVuIHNldmVyYWwgcmVnaXN0ZXJzOiBFTl9NRE0gKi8KIHN0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gbWRtX3B3cmRtID0gewogCS5uYW1lCQkgID0gIm1kbV9wd3JkbSIsCiAJLnByY21fb2ZmcwkgID0gT01BUDI0MzBfTURNX01PRCwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAyNDMwKSwKLQkuZGVwX2JpdAkgID0gT01BUDI0MzBfUE1fV0tERVBfTVBVX0VOX01ETV9TSElGVCwKLQkud2tkZXBfc3JjcwkgID0gZHNwX21kbV8yNHh4X3drZGVwcywKIAkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCiAJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCiAJLmJhbmtzCQkgID0gMSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zMzR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzNHh4LmgKaW5kZXggNTg4ZjdlMC4uYmQ4NzExMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzNHh4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnMzNHh4LmgKQEAgLTEsOCArMSw4IEBACiAvKgotICogT01BUDM0WFggcG93ZXJkb21haW4gZGVmaW5pdGlvbnMKKyAqIE9NQVAzIHBvd2VyZG9tYWluIGRlZmluaXRpb25zCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA4IE5va2lhIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgogICoKICAqIFdyaXR0ZW4gYnkgUGF1bCBXYWxtc2xleQogICogRGVidWdnaW5nIGFuZCBpbnRlZ3JhdGlvbiBmaXhlcyBieSBKb3VuaSBIw7ZnYW5kZXIKQEAgLTMyLDEyOCArMzIsNyBAQAogICogMzRYWC1zcGVjaWZpYyBwb3dlcmRvbWFpbnMsIGRlcGVuZGVuY2llcwogICovCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAotCi0vKgotICogMzQzMDogUE1fV0tERVBfe1BFUixVU0JIT1NUfTogQ09SRSwgSVZBMiwgTVBVLCBXS1VQCi0gKiAoVVNCSE9TVCBpcyBFUzIgb25seSkKLSAqLwotc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgcGVyX3VzYmhvc3Rfd2tkZXBzW10gPSB7Ci0JewotCQkucHdyZG1fbmFtZSA9ICJjb3JlX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5wd3JkbV9uYW1lID0gIml2YTJfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsKLQkJLnB3cmRtX25hbWUgPSAibXB1X3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5wd3JkbV9uYW1lID0gIndrdXBfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsgTlVMTCB9LAotfTsKLQotLyoKLSAqIDM0MzAgUE1fV0tERVBfTVBVOiBDT1JFLCBJVkEyLCBEU1MsIFBFUgotICovCi1zdGF0aWMgc3RydWN0IHB3cmRtX2RlcCBtcHVfMzR4eF93a2RlcHNbXSA9IHsKLQl7Ci0JCS5wd3JkbV9uYW1lID0gImNvcmVfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsKLQkJLnB3cmRtX25hbWUgPSAiaXZhMl9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JewotCQkucHdyZG1fbmFtZSA9ICJkc3NfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsKLQkJLnB3cmRtX25hbWUgPSAicGVyX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7IE5VTEwgfSwKLX07Ci0KLS8qCi0gKiAzNDMwIFBNX1dLREVQX0lWQTI6IENPUkUsIE1QVSwgV0tVUCwgRFNTLCBQRVIKLSAqLwotc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgaXZhMl93a2RlcHNbXSA9IHsKLQl7Ci0JCS5wd3JkbV9uYW1lID0gImNvcmVfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsKLQkJLnB3cmRtX25hbWUgPSAibXB1X3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5wd3JkbV9uYW1lID0gIndrdXBfcHdyZG0iLAotCQkub21hcF9jaGlwID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCkKLQl9LAotCXsKLQkJLnB3cmRtX25hbWUgPSAiZHNzX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5wd3JkbV9uYW1lID0gInBlcl9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JeyBOVUxMIH0sCi19OwotCi0KLS8qIDM0MzAgUE1fV0tERVBfe0NBTSxEU1N9OiBJVkEyLCBNUFUsIFdLVVAgKi8KLXN0YXRpYyBzdHJ1Y3QgcHdyZG1fZGVwIGNhbV9kc3Nfd2tkZXBzW10gPSB7Ci0JewotCQkucHdyZG1fbmFtZSA9ICJpdmEyX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7Ci0JCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JewotCQkucHdyZG1fbmFtZSA9ICJ3a3VwX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7IE5VTEwgfSwKLX07Ci0KLS8qIDM0MzA6IFBNX1dLREVQX05FT046IE1QVSAqLwotc3RhdGljIHN0cnVjdCBwd3JkbV9kZXAgbmVvbl93a2RlcHNbXSA9IHsKLQl7Ci0JCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JeyBOVUxMIH0sCi19OwotCi0KLS8qIFNsZWVwIGRlcGVuZGVuY3kgc291cmNlIGFycmF5cyBmb3IgMzR4eC1zcGVjaWZpYyBwd3JkbXMgLSAzNFhYIG9ubHkgKi8KLQotLyoKLSAqIDM0MzA6IENNX1NMRUVQREVQX3tEU1MsUEVSfTogTVBVLCBJVkEKLSAqIDM0MzBFUzI6IENNX1NMRUVQREVQX1VTQkhPU1Q6IE1QVSwgSVZBCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcHdyZG1fZGVwIGRzc19wZXJfdXNiaG9zdF9zbGVlcGRlcHNbXSA9IHsKLQl7Ci0JCS5wd3JkbV9uYW1lID0gIm1wdV9wd3JkbSIsCi0JCS5vbWFwX2NoaXAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKQotCX0sCi0JewotCQkucHdyZG1fbmFtZSA9ICJpdmEyX3B3cmRtIiwKLQkJLm9tYXBfY2hpcCA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApCi0JfSwKLQl7IE5VTEwgfSwKLX07Ci0KKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwogCiAvKgogICogUG93ZXJkb21haW5zCkBAIC0xNjMsOCArNDIsNiBAQAogCS5uYW1lCQkgID0gIml2YTJfcHdyZG0iLAogCS5wcmNtX29mZnMJICA9IE9NQVAzNDMwX0lWQTJfTU9ELAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAotCS5kZXBfYml0CSAgPSBPTUFQMzQzMF9QTV9XS0RFUF9NUFVfRU5fSVZBMl9TSElGVCwKLQkud2tkZXBfc3JjcwkgID0gaXZhMl93a2RlcHMsCiAJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAogCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX09GRl9SRVQsCiAJLmJhbmtzCQkgID0gNCwKQEAgLTE4MiwxMiArNTksMTAgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBtcHVfMzR4eF9wd3JkbSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gbXB1XzN4eHhfcHdyZG0gPSB7CiAJLm5hbWUJCSAgPSAibXB1X3B3cmRtIiwKIAkucHJjbV9vZmZzCSAgPSBNUFVfTU9ELAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzApLAotCS5kZXBfYml0CSAgPSBPTUFQMzQzMF9FTl9NUFVfU0hJRlQsCi0JLndrZGVwX3NyY3MJICA9IG1wdV8zNHh4X3drZGVwcywKIAkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCiAJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKIAkuZmxhZ3MJCSAgPSBQV1JETV9IQVNfTVBVX1FVSVJLLApAQCAtMjAwLDE1ICs3NSwxNCBAQAogCX0sCiB9OwogCi0vKiBObyB3a2RlcHMgb3Igc2xlZXBkZXBzIGZvciAzNHh4IGNvcmUgYXBwYXJlbnRseSAqLwotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBjb3JlXzM0eHhfcHJlX2VzM18xX3B3cmRtID0geworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBjb3JlXzN4eHhfcHJlX2VzM18xX3B3cmRtID0gewogCS5uYW1lCQkgID0gImNvcmVfcHdyZG0iLAogCS5wcmNtX29mZnMJICA9IENPUkVfTU9ELAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDM0MzBFUzEgfAogCQkJCQkgICBDSElQX0lTX09NQVAzNDMwRVMyIHwKIAkJCQkJICAgQ0hJUF9JU19PTUFQMzQzMEVTM18wKSwKIAkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCi0JLmRlcF9iaXQJICA9IE9NQVAzNDMwX0VOX0NPUkVfU0hJRlQsCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKIAkuYmFua3MJCSAgPSAyLAogCS5wd3JzdHNfbWVtX3JldAkgID0gewogCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVCwJIC8qIE1FTTFSRVRTVEFURSAqLwpAQCAtMjIwLDEzICs5NCwxMiBAQAogCX0sCiB9OwogCi0vKiBObyB3a2RlcHMgb3Igc2xlZXBkZXBzIGZvciAzNHh4IGNvcmUgYXBwYXJlbnRseSAqLwotc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBjb3JlXzM0eHhfZXMzXzFfcHdyZG0gPSB7CitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNvcmVfM3h4eF9lczNfMV9wd3JkbSA9IHsKIAkubmFtZQkJICA9ICJjb3JlX3B3cmRtIiwKIAkucHJjbV9vZmZzCSAgPSBDT1JFX01PRCwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMzXzEpLAogCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKLQkuZGVwX2JpdAkgID0gT01BUDM0MzBfRU5fQ09SRV9TSElGVCwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAogCS5mbGFncwkJICA9IFBXUkRNX0hBU19IRFdSX1NBUiwgLyogZm9yIFVTQlRMTCBvbmx5ICovCiAJLmJhbmtzCQkgID0gMiwKIAkucHdyc3RzX21lbV9yZXQJICA9IHsKQEAgLTIzOSwxNCArMTEyLDEwIEBACiAJfSwKIH07CiAKLS8qIEFub3RoZXIgY2FzZSBvZiBiaXQgbmFtZSBjb2xsaXNpb25zIGJldHdlZW4gc2V2ZXJhbCByZWdpc3RlcnM6IEVOX0RTUyAqLwogc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBkc3NfcHdyZG0gPSB7CiAJLm5hbWUJCSAgPSAiZHNzX3B3cmRtIiwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKIAkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMF9EU1NfTU9ELAotCS5kZXBfYml0CSAgPSBPTUFQMzQzMF9QTV9XS0RFUF9NUFVfRU5fRFNTX1NISUZULAotCS53a2RlcF9zcmNzCSAgPSBjYW1fZHNzX3drZGVwcywKLQkuc2xlZXBkZXBfc3JjcwkgID0gZHNzX3Blcl91c2Job3N0X3NsZWVwZGVwcywKIAkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCiAJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9SRVQsCiAJLmJhbmtzCQkgID0gMSwKQEAgLTI2Nyw4ICsxMzYsNiBAQAogCS5uYW1lCQkgID0gInNneF9wd3JkbSIsCiAJLnByY21fb2ZmcwkgID0gT01BUDM0MzBFUzJfU0dYX01PRCwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0dFX09NQVAzNDMwRVMyKSwKLQkud2tkZXBfc3JjcwkgID0gZ2Z4X3NneF93a2RlcHMsCi0JLnNsZWVwZGVwX3NyY3MJICA9IGNhbV9nZnhfc2xlZXBkZXBzLAogCS8qIFhYWCBUaGlzIGlzIGFjY3VyYXRlIGZvciAzNDMwIFNHWCwgYnV0IHdoYXQgYWJvdXQgR0ZYPyAqLwogCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX09OLAogCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULApAQCAtMjg1LDggKzE1Miw2IEBACiAJLm5hbWUJCSAgPSAiY2FtX3B3cmRtIiwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKIAkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMF9DQU1fTU9ELAotCS53a2RlcF9zcmNzCSAgPSBjYW1fZHNzX3drZGVwcywKLQkuc2xlZXBkZXBfc3JjcwkgID0gY2FtX2dmeF9zbGVlcGRlcHMsCiAJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAogCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAogCS5iYW5rcwkJICA9IDEsCkBAIC0zMDIsOSArMTY3LDYgQEAKIAkubmFtZQkJICA9ICJwZXJfcHdyZG0iLAogCS5wcmNtX29mZnMJICA9IE9NQVAzNDMwX1BFUl9NT0QsCiAJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQMzQzMCksCi0JLmRlcF9iaXQJICA9IE9NQVAzNDMwX0VOX1BFUl9TSElGVCwKLQkud2tkZXBfc3JjcwkgID0gcGVyX3VzYmhvc3Rfd2tkZXBzLAotCS5zbGVlcGRlcF9zcmNzCSAgPSBkc3NfcGVyX3VzYmhvc3Rfc2xlZXBkZXBzLAogCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKIAkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAogCS5iYW5rcwkJICA9IDEsCkBAIC0zMjYsNyArMTg4LDYgQEAKIAkubmFtZQkJICA9ICJuZW9uX3B3cmRtIiwKIAkucHJjbV9vZmZzCSAgPSBPTUFQMzQzMF9ORU9OX01PRCwKIAkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVAzNDMwKSwKLQkud2tkZXBfc3JjcwkgID0gbmVvbl93a2RlcHMsCiAJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAogCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAogfTsKQEAgLTMzNSw4ICsxOTYsNiBAQAogCS5uYW1lCQkgID0gInVzYmhvc3RfcHdyZG0iLAogCS5wcmNtX29mZnMJICA9IE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELAogCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfR0VfT01BUDM0MzBFUzIpLAotCS53a2RlcF9zcmNzCSAgPSBwZXJfdXNiaG9zdF93a2RlcHMsCi0JLnNsZWVwZGVwX3NyY3MJICA9IGRzc19wZXJfdXNiaG9zdF9zbGVlcGRlcHMsCiAJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAogCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfUkVULAogCS8qCkBAIC0zODYsNyArMjQ1LDcgQEAKIH07CiAKIAotI2VuZGlmICAgIC8qIENPTkZJR19BUkNIX09NQVAzNFhYICovCisjZW5kaWYgICAgLyogQ09ORklHX0FSQ0hfT01BUDMgKi8KIAogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zNDR4eC5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wb3dlcmRvbWFpbnM0NHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEwMTUxNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcG93ZXJkb21haW5zNDR4eC5oCkBAIC0wLDAgKzEsMzEwIEBACisvKgorICogT01BUDQgUG93ZXIgZG9tYWlucyBmcmFtZXdvcmsKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIEFiaGlqaXQgUGFnYXJlIChhYmhpaml0cGFnYXJlQHRpLmNvbSkKKyAqIEJlbm9pdCBDb3Vzc29uIChiLWNvdXNzb25AdGkuY29tKQorICogUGF1bCBXYWxtc2xleQorICoKKyAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHRoZSBPTUFQIGhhcmR3YXJlIGRhdGFiYXNlcy4KKyAqIFdlIHJlc3BlY3RmdWxseSBhc2sgdGhhdCBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGlzIGZpbGUgYmUgY29vcmRpbmF0ZWQKKyAqIHdpdGggdGhlIHB1YmxpYyBsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZyBtYWlsaW5nIGxpc3QgYW5kIHRoZQorICogYXV0aG9ycyBhYm92ZSB0byBlbnN1cmUgdGhhdCB0aGUgYXV0b2dlbmVyYXRpb24gc2NyaXB0cyBhcmUga2VwdAorICogdXAtdG8tZGF0ZSB3aXRoIHRoZSBmaWxlIGNvbnRlbnRzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfUE9XRVJET01BSU5TNDRYWF9ICisjZGVmaW5lIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9QT1dFUkRPTUFJTlM0NFhYX0gKKworI2luY2x1ZGUgPHBsYXQvcG93ZXJkb21haW4uaD4KKworI2luY2x1ZGUgInByY20tY29tbW9uLmgiCisjaW5jbHVkZSAiY20uaCIKKyNpbmNsdWRlICJjbS1yZWdiaXRzLTQ0eHguaCIKKyNpbmNsdWRlICJwcm0uaCIKKyNpbmNsdWRlICJwcm0tcmVnYml0cy00NHh4LmgiCisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorCisvKiBjb3JlXzQ0eHhfcHdyZG06IENPUkUgcG93ZXIgZG9tYWluICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNvcmVfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJjb3JlX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQNDQzMF9QUk1fQ09SRV9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKKwkuYmFua3MJCSAgPSA1LAorCS5wd3JzdHNfbWVtX3JldAk9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT0ZGLAkvKiBjb3JlX25yZXRfYmFuayAqLworCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogY29yZV9vY21yYW0gKi8KKwkJWzJdID0gUFdSRE1fUE9XRVJfUkVULAkvKiBjb3JlX290aGVyX2JhbmsgKi8KKwkJWzNdID0gUFdSU1RTX09GRl9SRVQsCS8qIGR1Y2F0aV9sMnJhbSAqLworCQlbNF0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogZHVjYXRpX3VuaWNhY2hlICovCisJfSwKKwkucHdyc3RzX21lbV9vbgk9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIGNvcmVfbnJldF9iYW5rICovCisJCVsxXSA9IFBXUlNUU19PRkZfUkVULAkvKiBjb3JlX29jbXJhbSAqLworCQlbMl0gPSBQV1JETV9QT1dFUl9PTiwJLyogY29yZV9vdGhlcl9iYW5rICovCisJCVszXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBkdWNhdGlfbDJyYW0gKi8KKwkJWzRdID0gUFdSRE1fUE9XRVJfT04sCS8qIGR1Y2F0aV91bmljYWNoZSAqLworCX0sCit9OworCisvKiBnZnhfNDR4eF9wd3JkbTogM0QgYWNjZWxlcmF0b3IgcG93ZXIgZG9tYWluICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGdmeF80NHh4X3B3cmRtID0geworCS5uYW1lCQkgID0gImdmeF9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDQ0MzBfUFJNX0dGWF9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfT04sCisJLmJhbmtzCQkgID0gMSwKKwkucHdyc3RzX21lbV9yZXQJPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogZ2Z4X21lbSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBnZnhfbWVtICovCisJfSwKK307CisKKy8qIGFiZV80NHh4X3B3cmRtOiBBdWRpbyBiYWNrIGVuZCBwb3dlciBkb21haW4gKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gYWJlXzQ0eHhfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAiYWJlX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQNDQzMF9QUk1fQUJFX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JETV9QT1dFUl9PRkYsCisJLmJhbmtzCQkgID0gMiwKKwkucHdyc3RzX21lbV9yZXQJPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwJLyogYWVzc21lbSAqLworCQlbMV0gPSBQV1JETV9QT1dFUl9PRkYsCS8qIHBlcmlwaG1lbSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBhZXNzbWVtICovCisJCVsxXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBwZXJpcGhtZW0gKi8KKwl9LAorfTsKKworLyogZHNzXzQ0eHhfcHdyZG06IERpc3BsYXkgc3Vic3lzdGVtIHBvd2VyIGRvbWFpbiAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBkc3NfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJkc3NfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9EU1NfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PRkYsCS8qIGRzc19tZW0gKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogZHNzX21lbSAqLworCX0sCit9OworCisvKiB0ZXNsYV80NHh4X3B3cmRtOiBUZXNsYSBwcm9jZXNzb3IgcG93ZXIgZG9tYWluICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIHRlc2xhXzQ0eHhfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAidGVzbGFfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9URVNMQV9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSU1RTX09GRl9SRVQsCisJLmJhbmtzCQkgID0gMywKKwkucHdyc3RzX21lbV9yZXQJPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX1JFVCwJLyogdGVzbGFfZWRtYSAqLworCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogdGVzbGFfbDEgKi8KKwkJWzJdID0gUFdSU1RTX09GRl9SRVQsCS8qIHRlc2xhX2wyICovCisJfSwKKwkucHdyc3RzX21lbV9vbgk9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIHRlc2xhX2VkbWEgKi8KKwkJWzFdID0gUFdSRE1fUE9XRVJfT04sCS8qIHRlc2xhX2wxICovCisJCVsyXSA9IFBXUkRNX1BPV0VSX09OLAkvKiB0ZXNsYV9sMiAqLworCX0sCit9OworCisvKiB3a3VwXzQ0eHhfcHdyZG06IFdha2UtdXAgcG93ZXIgZG9tYWluICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIHdrdXBfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJ3a3VwX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQNDQzMF9QUk1fV0tVUF9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUkRNX1BPV0VSX09OLAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PRkYsCS8qIHdrdXBfYmFuayAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiB3a3VwX2JhbmsgKi8KKwl9LAorfTsKKworLyogY3B1MF80NHh4X3B3cmRtOiBNUFUwIHByb2Nlc3NvciBhbmQgTmVvbiBjb3Byb2Nlc3NvciBwb3dlciBkb21haW4gKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gY3B1MF80NHh4X3B3cmRtID0geworCS5uYW1lCQkgID0gImNwdTBfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX0NISVJPTlNTX0NISVJPTlNTX0NQVTBfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX1JFVF9PTiwKKwkucHdyc3RzX2xvZ2ljX3JldCA9IFBXUlNUU19PRkZfUkVULAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CT0geworCQlbMF0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogY3B1MF9sMSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBjcHUwX2wxICovCisJfSwKK307CisKKy8qIGNwdTFfNDR4eF9wd3JkbTogTVBVMSBwcm9jZXNzb3IgYW5kIE5lb24gY29wcm9jZXNzb3IgcG93ZXIgZG9tYWluICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNwdTFfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJjcHUxX3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQNDQzMF9DSElST05TU19DSElST05TU19DUFUxX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAk9IHsKKwkJWzBdID0gUFdSU1RTX09GRl9SRVQsCS8qIGNwdTFfbDEgKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogY3B1MV9sMSAqLworCX0sCit9OworCisvKiBlbXVfNDR4eF9wd3JkbTogRW11bGF0aW9uIHBvd2VyIGRvbWFpbiAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBlbXVfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJlbXVfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9FTVVfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX09OLAorCS5iYW5rcwkJICA9IDEsCisJLnB3cnN0c19tZW1fcmV0CT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PRkYsCS8qIGVtdV9iYW5rICovCisJfSwKKwkucHdyc3RzX21lbV9vbgk9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT04sCS8qIGVtdV9iYW5rICovCisJfSwKK307CisKKy8qIG1wdV80NHh4X3B3cmRtOiBNb2RlbmEgcHJvY2Vzc29yIGFuZCB0aGUgTmVvbiBjb3Byb2Nlc3NvciBwb3dlciBkb21haW4gKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gbXB1XzQ0eHhfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAibXB1X3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQNDQzMF9QUk1fTVBVX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKKwkuYmFua3MJCSAgPSAzLAorCS5wd3JzdHNfbWVtX3JldAk9IHsKKwkJWzBdID0gUFdSU1RTX09GRl9SRVQsCS8qIG1wdV9sMSAqLworCQlbMV0gPSBQV1JTVFNfT0ZGX1JFVCwJLyogbXB1X2wyICovCisJCVsyXSA9IFBXUkRNX1BPV0VSX1JFVCwJLyogbXB1X3JhbSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBtcHVfbDEgKi8KKwkJWzFdID0gUFdSRE1fUE9XRVJfT04sCS8qIG1wdV9sMiAqLworCQlbMl0gPSBQV1JETV9QT1dFUl9PTiwJLyogbXB1X3JhbSAqLworCX0sCit9OworCisvKiBpdmFoZF80NHh4X3B3cmRtOiBJVkEtSEQgcG93ZXIgZG9tYWluICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGl2YWhkXzQ0eHhfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAiaXZhaGRfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9JVkFIRF9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfUkVUX09OLAorCS5wd3JzdHNfbG9naWNfcmV0ID0gUFdSRE1fUE9XRVJfT0ZGLAorCS5iYW5rcwkJICA9IDQsCisJLnB3cnN0c19tZW1fcmV0CT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PRkYsCS8qIGh3YV9tZW0gKi8KKwkJWzFdID0gUFdSU1RTX09GRl9SRVQsCS8qIHNsMl9tZW0gKi8KKwkJWzJdID0gUFdSU1RTX09GRl9SRVQsCS8qIHRjbTFfbWVtICovCisJCVszXSA9IFBXUlNUU19PRkZfUkVULAkvKiB0Y20yX21lbSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBod2FfbWVtICovCisJCVsxXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBzbDJfbWVtICovCisJCVsyXSA9IFBXUkRNX1BPV0VSX09OLAkvKiB0Y20xX21lbSAqLworCQlbM10gPSBQV1JETV9QT1dFUl9PTiwJLyogdGNtMl9tZW0gKi8KKwl9LAorfTsKKworLyogY2FtXzQ0eHhfcHdyZG06IENhbWVyYSBzdWJzeXN0ZW0gcG93ZXIgZG9tYWluICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGNhbV80NHh4X3B3cmRtID0geworCS5uYW1lCQkgID0gImNhbV9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDQ0MzBfUFJNX0NBTV9NT0QsCisJLm9tYXBfY2hpcAkgID0gT01BUF9DSElQX0lOSVQoQ0hJUF9JU19PTUFQNDQzMCksCisJLnB3cnN0cwkJICA9IFBXUlNUU19PRkZfT04sCisJLmJhbmtzCQkgID0gMSwKKwkucHdyc3RzX21lbV9yZXQJPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09GRiwJLyogY2FtX21lbSAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBjYW1fbWVtICovCisJfSwKK307CisKKy8qIGwzaW5pdF80NHh4X3B3cmRtOiBMMyBpbml0YXRvcnMgcGhlcmlwaGVyYWxzIHBvd2VyIGRvbWFpbiAgKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gbDNpbml0XzQ0eHhfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAibDNpbml0X3B3cmRtIiwKKwkucHJjbV9vZmZzCSAgPSBPTUFQNDQzMF9QUk1fTDNJTklUX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKKwkuYmFua3MJCSAgPSAxLAorCS5wd3JzdHNfbWVtX3JldAk9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT0ZGLAkvKiBsM2luaXRfYmFuazEgKi8KKwl9LAorCS5wd3JzdHNfbWVtX29uCT0geworCQlbMF0gPSBQV1JETV9QT1dFUl9PTiwJLyogbDNpbml0X2JhbmsxICovCisJfSwKK307CisKKy8qIGw0cGVyXzQ0eHhfcHdyZG06IFRhcmdldCBwZXJpcGhlcmFscyBwb3dlciBkb21haW4gKi8KK3N0YXRpYyBzdHJ1Y3QgcG93ZXJkb21haW4gbDRwZXJfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJsNHBlcl9wd3JkbSIsCisJLnByY21fb2ZmcwkgID0gT01BUDQ0MzBfUFJNX0w0UEVSX01PRCwKKwkub21hcF9jaGlwCSAgPSBPTUFQX0NISVBfSU5JVChDSElQX0lTX09NQVA0NDMwKSwKKwkucHdyc3RzCQkgID0gUFdSU1RTX09GRl9SRVRfT04sCisJLnB3cnN0c19sb2dpY19yZXQgPSBQV1JTVFNfT0ZGX1JFVCwKKwkuYmFua3MJCSAgPSAyLAorCS5wd3JzdHNfbWVtX3JldAk9IHsKKwkJWzBdID0gUFdSRE1fUE9XRVJfT0ZGLAkvKiBub25yZXRhaW5lZF9iYW5rICovCisJCVsxXSA9IFBXUkRNX1BPV0VSX1JFVCwJLyogcmV0YWluZWRfYmFuayAqLworCX0sCisJLnB3cnN0c19tZW1fb24JPSB7CisJCVswXSA9IFBXUkRNX1BPV0VSX09OLAkvKiBub25yZXRhaW5lZF9iYW5rICovCisJCVsxXSA9IFBXUkRNX1BPV0VSX09OLAkvKiByZXRhaW5lZF9iYW5rICovCisJfSwKK307CisKKy8qCisgKiBhbHdheXNfb25fY29yZV80NHh4X3B3cmRtOiBBbHdheXMgT04gbG9naWMgdGhhdCBzaXRzIGluIFZERF9DT1JFIHZvbHRhZ2UKKyAqIGRvbWFpbgorICovCitzdGF0aWMgc3RydWN0IHBvd2VyZG9tYWluIGFsd2F5c19vbl9jb3JlXzQ0eHhfcHdyZG0gPSB7CisJLm5hbWUJCSAgPSAiYWx3YXlzX29uX2NvcmVfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9BTFdBWVNfT05fTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorCS5wd3JzdHMJCSAgPSBQV1JETV9QT1dFUl9PTiwKK307CisKKy8qIGNlZnVzZV80NHh4X3B3cmRtOiBDdXN0b21lciBlZnVzZSBjb250cm9sbGVyIHBvd2VyIGRvbWFpbiAqLworc3RhdGljIHN0cnVjdCBwb3dlcmRvbWFpbiBjZWZ1c2VfNDR4eF9wd3JkbSA9IHsKKwkubmFtZQkJICA9ICJjZWZ1c2VfcHdyZG0iLAorCS5wcmNtX29mZnMJICA9IE9NQVA0NDMwX1BSTV9DRUZVU0VfTU9ELAorCS5vbWFwX2NoaXAJICA9IE9NQVBfQ0hJUF9JTklUKENISVBfSVNfT01BUDQ0MzApLAorCS5wd3JzdHMJCSAgPSBQV1JTVFNfT0ZGX09OLAorfTsKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgcG93ZXIgZG9tYWlucyBhcmUgbm90IHVuZGVyIFNXIGNvbnRyb2wKKyAqCisgKiBhbHdheXNfb25faXZhCisgKiBhbHdheXNfb25fbXB1CisgKiBzdGRlZnVzZQorICovCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS1jb21tb24uaAppbmRleCA2MWFjMmE0Li45MGY2MDNkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20tY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLWNvbW1vbi5oCkBAIC0xMTksNiArMTE5LDE1IEBACiAjZGVmaW5lIE9NQVA0NDMwX0NISVJPTlNTX0NISVJPTlNTX0NQVTBfTU9ECQkweDA0MDAKICNkZWZpbmUgT01BUDQ0MzBfQ0hJUk9OU1NfQ0hJUk9OU1NfQ1BVMV9NT0QJCTB4MDgwMAogCisvKiBCYXNlIEFkZHJlc3NlcyBmb3IgdGhlIE9NQVA0ICovCisKKyNkZWZpbmUgT01BUDQ0MzBfQ00xX0JBU0UJCTB4NGEwMDQwMDAKKyNkZWZpbmUgT01BUDQ0MzBfQ00yX0JBU0UJCTB4NGEwMDgwMDAKKyNkZWZpbmUgT01BUDQ0MzBfUFJNX0JBU0UJCTB4NGEzMDYwMDAKKyNkZWZpbmUgT01BUDQ0MzBfU0NSTV9CQVNFCQkweDRhMzBhMDAwCisjZGVmaW5lIE9NQVA0NDMwX0NISVJPTlNTX0JBU0UJCTB4NDgyNDMwMDAKKworCiAvKiAyNFhYIHJlZ2lzdGVyIGJpdHMgc2hhcmVkIGJldHdlZW4gQ00gJiBQUk0gcmVnaXN0ZXJzICovCiAKIC8qIENNX0ZDTEtFTjFfQ09SRSwgQ01fSUNMS0VOMV9DT1JFLCBQTV9XS0VOMV9DT1JFIHNoYXJlZCBiaXRzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5jCmluZGV4IGNmNDY2ZWEuLjgxODcyYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJjbS5jCkBAIC0xMSw2ICsxMSw3IEBACiAgKiBSYWplbmRyYSBOYXlhayA8cm5heWFrQHRpLmNvbT4KICAqCiAgKiBTb21lIHBpZWNlcyBvZiBjb2RlIENvcHlyaWdodCAoQykgMjAwNSBUZXhhcyBJbnN0cnVtZW50cywgSW5jLgorICogVXBncmFkZWQgd2l0aCBPTUFQNCBzdXBwb3J0IGJ5IEFiaGlqaXQgUGFnYXJlIDxhYmhpaml0cGFnYXJlQHRpLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTI4LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxwbGF0L2NvbnRyb2wuaD4KIAogI2luY2x1ZGUgImNsb2NrLmgiCisjaW5jbHVkZSAiY2xvY2syeHh4LmgiCiAjaW5jbHVkZSAiY20uaCIKICNpbmNsdWRlICJwcm0uaCIKICNpbmNsdWRlICJwcm0tcmVnYml0cy0yNHh4LmgiCkBAIC0xMjEsMTkgKzEyMywyNSBAQAogdTMyIG9tYXBfcHJjbV9nZXRfcmVzZXRfc291cmNlcyh2b2lkKQogewogCS8qIFhYWCBUaGlzIHByZXN1bWFibHkgbmVlZHMgbW9kaWZpY2F0aW9uIGZvciAzNFhYICovCi0JcmV0dXJuIHBybV9yZWFkX21vZF9yZWcoV0tVUF9NT0QsIFJNX1JTVFNUKSAmIDB4N2Y7CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpIHwgY3B1X2lzX29tYXAzNHh4KCkpCisJCXJldHVybiBwcm1fcmVhZF9tb2RfcmVnKFdLVVBfTU9ELCBPTUFQMl9STV9SU1RTVCkgJiAweDdmOworCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKKwkJcmV0dXJuIHBybV9yZWFkX21vZF9yZWcoV0tVUF9NT0QsIE9NQVA0X1JNX1JTVFNUKSAmIDB4N2Y7CisKKwlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9wcmNtX2dldF9yZXNldF9zb3VyY2VzKTsKIAogLyogUmVzZXRzIGNsb2NrIHJhdGVzIGFuZCByZWJvb3RzIHRoZSBzeXN0ZW0uIE9ubHkgY2FsbGVkIGZyb20gc3lzdGVtLmggKi8KIHZvaWQgb21hcF9wcmNtX2FyY2hfcmVzZXQoY2hhciBtb2RlKQogewotCXMxNiBwcmNtX29mZnM7Ci0Jb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCgpOworCXMxNiBwcmNtX29mZnMgPSAwOwogCi0JaWYgKGNwdV9pc19vbWFwMjR4eCgpKQorCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlvbWFwMnh4eF9jbGtfcHJlcGFyZV9mb3JfcmVib290KCk7CisKIAkJcHJjbV9vZmZzID0gV0tVUF9NT0Q7Ci0JZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCXUzMiBsOwogCiAJCXByY21fb2ZmcyA9IE9NQVAzNDMwX0dSX01PRDsKQEAgLTE0NCwxMCArMTUyLDE3IEBACiAJCSAqIGNmLiBPTUFQMzR4eCBUUk0sIEluaXRpYWxpemF0aW9uIC8gU29mdHdhcmUgQm9vdGluZwogCQkgKiBDb25maWd1cmF0aW9uLiAqLwogCQlvbWFwX3dyaXRlbChsLCBPTUFQMzQzWF9TQ1JBVENIUEFEICsgNCk7Ci0JfSBlbHNlCisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkKKwkJcHJjbV9vZmZzID0gT01BUDQ0MzBfUFJNX0RFVklDRV9NT0Q7CisJZWxzZQogCQlXQVJOX09OKDEpOwogCi0JcHJtX3NldF9tb2RfcmVnX2JpdHMoT01BUF9SU1RfRFBMTDMsIHByY21fb2ZmcywgUk1fUlNUQ1RSTCk7CisJaWYgKGNwdV9pc19vbWFwMjR4eCgpIHwgY3B1X2lzX29tYXAzNHh4KCkpCisJCXBybV9zZXRfbW9kX3JlZ19iaXRzKE9NQVBfUlNUX0RQTEwzLCBwcmNtX29mZnMsCisJCQkJCQkgT01BUDJfUk1fUlNUQ1RSTCk7CisJaWYgKGNwdV9pc19vbWFwNDR4eCgpKQorCQlwcm1fc2V0X21vZF9yZWdfYml0cyhPTUFQX1JTVF9EUExMMywgcHJjbV9vZmZzLAorCQkJCQkJIE9NQVA0X1JNX1JTVENUUkwpOwogfQogCiBzdGF0aWMgaW5saW5lIHUzMiBfX29tYXBfcHJjbV9yZWFkKHZvaWQgX19pb21lbSAqYmFzZSwgczE2IG1vZHVsZSwgdTE2IHJlZykKQEAgLTE4OCw2ICsyMDMsMTggQEAKIAlyZXR1cm4gdjsKIH0KIAorLyogUmVhZCBhIFBSTSByZWdpc3RlciwgQU5EIGl0LCBhbmQgc2hpZnQgdGhlIHJlc3VsdCBkb3duIHRvIGJpdCAwICovCit1MzIgcHJtX3JlYWRfbW9kX2JpdHNfc2hpZnQoczE2IGRvbWFpbiwgczE2IGlkeCwgdTMyIG1hc2spCit7CisJdTMyIHY7CisKKwl2ID0gcHJtX3JlYWRfbW9kX3JlZyhkb21haW4sIGlkeCk7CisJdiAmPSBtYXNrOworCXYgPj49IF9fZmZzKG1hc2spOworCisJcmV0dXJuIHY7Cit9CisKIC8qIFJlYWQgYSByZWdpc3RlciBpbiBhIENNIG1vZHVsZSAqLwogdTMyIGNtX3JlYWRfbW9kX3JlZyhzMTYgbW9kdWxlLCB1MTYgaWR4KQogewpAQCAtMjE3LDI2ICsyNDQsMjIgQEAKICAqIG9tYXAyX2NtX3dhaXRfaWRsZXN0IC0gd2FpdCBmb3IgSURMRVNUIGJpdCB0byBpbmRpY2F0ZSBtb2R1bGUgcmVhZGluZXNzCiAgKiBAcmVnOiBwaHlzaWNhbCBhZGRyZXNzIG9mIG1vZHVsZSBJRExFU1QgcmVnaXN0ZXIKICAqIEBtYXNrOiB2YWx1ZSB0byBtYXNrIGFnYWluc3QgdG8gZGV0ZXJtaW5lIGlmIHRoZSBtb2R1bGUgaXMgYWN0aXZlCisgKiBAaWRsZXN0OiBpZGxlIHN0YXRlIGluZGljYXRvciAoMCBvciAxKSBmb3IgdGhlIGNsb2NrCiAgKiBAbmFtZTogbmFtZSBvZiB0aGUgY2xvY2sgKGZvciBwcmludGspCiAgKgogICogUmV0dXJucyAxIGlmIHRoZSBtb2R1bGUgaW5kaWNhdGVkIHJlYWRpbmVzcyBpbiB0aW1lLCBvciAwIGlmIGl0CiAgKiBmYWlsZWQgdG8gZW5hYmxlIGluIHJvdWdobHkgTUFYX01PRFVMRV9FTkFCTEVfV0FJVCBtaWNyb3NlY29uZHMuCiAgKi8KLWludCBvbWFwMl9jbV93YWl0X2lkbGVzdCh2b2lkIF9faW9tZW0gKnJlZywgdTMyIG1hc2ssIGNvbnN0IGNoYXIgKm5hbWUpCitpbnQgb21hcDJfY21fd2FpdF9pZGxlc3Qodm9pZCBfX2lvbWVtICpyZWcsIHUzMiBtYXNrLCB1OCBpZGxlc3QsCisJCQkJY29uc3QgY2hhciAqbmFtZSkKIHsKIAlpbnQgaSA9IDA7CiAJaW50IGVuYSA9IDA7CiAKLQkvKgotCSAqIDI0eHggdXNlcyAwIHRvIGluZGljYXRlIG5vdCByZWFkeSwgYW5kIDEgdG8gaW5kaWNhdGUgcmVhZHkuCi0JICogMzR4eCByZXZlcnNlcyB0aGlzLCBqdXN0IHRvIGtlZXAgdXMgb24gb3VyIHRvZXMKLQkgKi8KLQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpCi0JCWVuYSA9IG1hc2s7Ci0JZWxzZSBpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJaWYgKGlkbGVzdCkKIAkJZW5hID0gMDsKIAllbHNlCi0JCUJVRygpOworCQllbmEgPSBtYXNrOwogCiAJLyogV2FpdCBmb3IgbG9jayAqLwogCW9tYXBfdGVzdF90aW1lb3V0KCgoX19yYXdfcmVhZGwocmVnKSAmIG1hc2spID09IGVuYSksCkBAIC0yNTQsOSArMjc3LDE5IEBACiAKIHZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzX3ByY20oc3RydWN0IG9tYXBfZ2xvYmFscyAqb21hcDJfZ2xvYmFscykKIHsKLQlwcm1fYmFzZSA9IG9tYXAyX2dsb2JhbHMtPnBybTsKLQljbV9iYXNlID0gb21hcDJfZ2xvYmFscy0+Y207Ci0JY20yX2Jhc2UgPSBvbWFwMl9nbG9iYWxzLT5jbTI7CisJLyogU3RhdGljIG1hcHBpbmcsIG5ldmVyIHJlbGVhc2VkICovCisJaWYgKG9tYXAyX2dsb2JhbHMtPnBybSkgeworCQlwcm1fYmFzZSA9IGlvcmVtYXAob21hcDJfZ2xvYmFscy0+cHJtLCBTWl84Syk7CisJCVdBUk5fT04oIXBybV9iYXNlKTsKKwl9CisJaWYgKG9tYXAyX2dsb2JhbHMtPmNtKSB7CisJCWNtX2Jhc2UgPSBpb3JlbWFwKG9tYXAyX2dsb2JhbHMtPmNtLCBTWl84Syk7CisJCVdBUk5fT04oIWNtX2Jhc2UpOworCX0KKwlpZiAob21hcDJfZ2xvYmFscy0+Y20yKSB7CisJCWNtMl9iYXNlID0gaW9yZW1hcChvbWFwMl9nbG9iYWxzLT5jbTIsIFNaXzhLKTsKKwkJV0FSTl9PTighY20yX2Jhc2UpOworCX0KIH0KIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCkBAIC0yODAsNyArMzEzLDcgQEAKIAlwcmNtX2NvbnRleHQuZW11X2NtX2Nsa3NlbCA9CiAJCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0VNVV9NT0QsIENNX0NMS1NFTDEpOwogCXByY21fY29udGV4dC5lbXVfY21fY2xrc3RjdHJsID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfRU1VX01PRCwgQ01fQ0xLU1RDVFJMKTsKKwkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfRU1VX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKTsKIAlwcmNtX2NvbnRleHQucGxsX2NtX2F1dG9pZGxlMiA9CiAJCQkgY21fcmVhZF9tb2RfcmVnKFBMTF9NT0QsIENNX0FVVE9JRExFMik7CiAJcHJjbV9jb250ZXh0LnBsbF9jbV9jbGtzZWw0ID0KQEAgLTMzMywyMyArMzY2LDI1IEBACiAJcHJjbV9jb250ZXh0Lm1wdV9jbV9hdXRvaWRsZTIgPQogCQkJIGNtX3JlYWRfbW9kX3JlZyhNUFVfTU9ELCBDTV9BVVRPSURMRTIpOwogCXByY21fY29udGV4dC5pdmEyX2NtX2Nsa3N0Y3RybCA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX0lWQTJfTU9ELCBDTV9DTEtTVENUUkwpOworCQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9JVkEyX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKTsKIAlwcmNtX2NvbnRleHQubXB1X2NtX2Nsa3N0Y3RybCA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKE1QVV9NT0QsIENNX0NMS1NUQ1RSTCk7CisJCQkgY21fcmVhZF9tb2RfcmVnKE1QVV9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CiAJcHJjbV9jb250ZXh0LmNvcmVfY21fY2xrc3RjdHJsID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0NMS1NUQ1RSTCk7CisJCQkgY21fcmVhZF9tb2RfcmVnKENPUkVfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOwogCXByY21fY29udGV4dC5zZ3hfY21fY2xrc3RjdHJsID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBFUzJfU0dYX01PRCwgQ01fQ0xLU1RDVFJMKTsKKwkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBFUzJfU0dYX01PRCwKKwkJCQkJCU9NQVAyX0NNX0NMS1NUQ1RSTCk7CiAJcHJjbV9jb250ZXh0LmRzc19jbV9jbGtzdGN0cmwgPQotCQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9EU1NfTU9ELCBDTV9DTEtTVENUUkwpOworCQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMF9EU1NfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOwogCXByY21fY29udGV4dC5jYW1fY21fY2xrc3RjdHJsID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfQ0FNX01PRCwgQ01fQ0xLU1RDVFJMKTsKKwkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfQ0FNX01PRCwgT01BUDJfQ01fQ0xLU1RDVFJMKTsKIAlwcmNtX2NvbnRleHQucGVyX2NtX2Nsa3N0Y3RybCA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX1BFUl9NT0QsIENNX0NMS1NUQ1RSTCk7CisJCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX1BFUl9NT0QsIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CiAJcHJjbV9jb250ZXh0Lm5lb25fY21fY2xrc3RjdHJsID0KLQkJCSBjbV9yZWFkX21vZF9yZWcoT01BUDM0MzBfTkVPTl9NT0QsIENNX0NMS1NUQ1RSTCk7CisJCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX05FT05fTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOwogCXByY21fY29udGV4dC51c2Job3N0X2NtX2Nsa3N0Y3RybCA9Ci0JCQkgY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9DTEtTVENUUkwpOworCQkJIGNtX3JlYWRfbW9kX3JlZyhPTUFQMzQzMEVTMl9VU0JIT1NUX01PRCwKKwkJCQkJCU9NQVAyX0NNX0NMS1NUQ1RSTCk7CiAJcHJjbV9jb250ZXh0LmNvcmVfY21fYXV0b2lkbGUxID0KIAkJCSBjbV9yZWFkX21vZF9yZWcoQ09SRV9NT0QsIENNX0FVVE9JRExFMSk7CiAJcHJjbV9jb250ZXh0LmNvcmVfY21fYXV0b2lkbGUyID0KQEAgLTQzMiw3ICs0NjcsNyBAQAogCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LmVtdV9jbV9jbGtzZWwsIE9NQVAzNDMwX0VNVV9NT0QsCiAJCQkJCSBDTV9DTEtTRUwxKTsKIAljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5lbXVfY21fY2xrc3RjdHJsLCBPTUFQMzQzMF9FTVVfTU9ELAotCQkJCQkgQ01fQ0xLU1RDVFJMKTsKKwkJCQkJIE9NQVAyX0NNX0NMS1NUQ1RSTCk7CiAJY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQucGxsX2NtX2F1dG9pZGxlMiwgUExMX01PRCwKIAkJCQkJIENNX0FVVE9JRExFMik7CiAJY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQucGxsX2NtX2Nsa3NlbDQsIFBMTF9NT0QsCkBAIC00NzgsMjIgKzUxMywyMyBAQAogCQkJCQlDTV9BVVRPSURMRTIpOwogCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0Lm1wdV9jbV9hdXRvaWRsZTIsIE1QVV9NT0QsIENNX0FVVE9JRExFMik7CiAJY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQuaXZhMl9jbV9jbGtzdGN0cmwsIE9NQVAzNDMwX0lWQTJfTU9ELAotCQkJCQlDTV9DTEtTVENUUkwpOwotCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0Lm1wdV9jbV9jbGtzdGN0cmwsIE1QVV9NT0QsIENNX0NMS1NUQ1RSTCk7CisJCQkJCU9NQVAyX0NNX0NMS1NUQ1RSTCk7CisJY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQubXB1X2NtX2Nsa3N0Y3RybCwgTVBVX01PRCwKKwkJCQkJT01BUDJfQ01fQ0xLU1RDVFJMKTsKIAljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5jb3JlX2NtX2Nsa3N0Y3RybCwgQ09SRV9NT0QsCi0JCQkJCUNNX0NMS1NUQ1RSTCk7CisJCQkJCU9NQVAyX0NNX0NMS1NUQ1RSTCk7CiAJY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQuc2d4X2NtX2Nsa3N0Y3RybCwgT01BUDM0MzBFUzJfU0dYX01PRCwKLQkJCQkJQ01fQ0xLU1RDVFJMKTsKKwkJCQkJT01BUDJfQ01fQ0xLU1RDVFJMKTsKIAljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5kc3NfY21fY2xrc3RjdHJsLCBPTUFQMzQzMF9EU1NfTU9ELAotCQkJCQlDTV9DTEtTVENUUkwpOworCQkJCQlPTUFQMl9DTV9DTEtTVENUUkwpOwogCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LmNhbV9jbV9jbGtzdGN0cmwsIE9NQVAzNDMwX0NBTV9NT0QsCi0JCQkJCUNNX0NMS1NUQ1RSTCk7CisJCQkJCU9NQVAyX0NNX0NMS1NUQ1RSTCk7CiAJY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQucGVyX2NtX2Nsa3N0Y3RybCwgT01BUDM0MzBfUEVSX01PRCwKLQkJCQkJQ01fQ0xLU1RDVFJMKTsKKwkJCQkJT01BUDJfQ01fQ0xLU1RDVFJMKTsKIAljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5uZW9uX2NtX2Nsa3N0Y3RybCwgT01BUDM0MzBfTkVPTl9NT0QsCi0JCQkJCUNNX0NMS1NUQ1RSTCk7CisJCQkJCU9NQVAyX0NNX0NMS1NUQ1RSTCk7CiAJY21fd3JpdGVfbW9kX3JlZyhwcmNtX2NvbnRleHQudXNiaG9zdF9jbV9jbGtzdGN0cmwsCi0JCQkJCU9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBDTV9DTEtTVENUUkwpOworCQkJCU9NQVAzNDMwRVMyX1VTQkhPU1RfTU9ELCBPTUFQMl9DTV9DTEtTVENUUkwpOwogCWNtX3dyaXRlX21vZF9yZWcocHJjbV9jb250ZXh0LmNvcmVfY21fYXV0b2lkbGUxLCBDT1JFX01PRCwKIAkJCQkJQ01fQVVUT0lETEUxKTsKIAljbV93cml0ZV9tb2RfcmVnKHByY21fY29udGV4dC5jb3JlX2NtX2F1dG9pZGxlMiwgQ09SRV9NT0QsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS1yZWdiaXRzLTQ0eHguaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtNDR4eC5oCmluZGV4IDMwMWM4MTAuLjU5N2JlNGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtNDR4eC5oCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLXJlZ2JpdHMtNDR4eC5oCkBAIC0yOSw0MTIgKzI5LDQxMiBAQAogICogVXNlZCBieSBQUk1fTERPX1NSQU1fQ09SRV9TRVRVUCwgUFJNX0xET19TUkFNX0lWQV9TRVRVUCwKICAqIFBSTV9MRE9fU1JBTV9NUFVfU0VUVVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9BQkJPRkZfQUNUX0VYUE9SVF9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9BQkJPRkZfQUNUX0VYUE9SVF9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX0FCQk9GRl9BQ1RfRVhQT1JUX01BU0sJCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qCiAgKiBVc2VkIGJ5IFBSTV9MRE9fU1JBTV9DT1JFX1NFVFVQLCBQUk1fTERPX1NSQU1fSVZBX1NFVFVQLAogICogUFJNX0xET19TUkFNX01QVV9TRVRVUAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0FCQk9GRl9TTEVFUF9FWFBPUlRfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfQUJCT0ZGX1NMRUVQX0VYUE9SVF9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX0FCQk9GRl9TTEVFUF9FWFBPUlRfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9BQkJfSVZBX0RPTkVfRU5fU0hJRlQJCQkJCSgxIDw8IDMxKQorI2RlZmluZSBPTUFQNDQzMF9BQkJfSVZBX0RPTkVfRU5fU0hJRlQJCQkJCTMxCiAjZGVmaW5lIE9NQVA0NDMwX0FCQl9JVkFfRE9ORV9FTl9NQVNLCQkJCQlCSVRGSUVMRCgzMSwgMzEpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX0FCQl9JVkFfRE9ORV9TVF9TSElGVAkJCQkJKDEgPDwgMzEpCisjZGVmaW5lIE9NQVA0NDMwX0FCQl9JVkFfRE9ORV9TVF9TSElGVAkJCQkJMzEKICNkZWZpbmUgT01BUDQ0MzBfQUJCX0lWQV9ET05FX1NUX01BU0sJCQkJCUJJVEZJRUxEKDMxLCAzMSkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX01QVV8yICovCi0jZGVmaW5lIE9NQVA0NDMwX0FCQl9NUFVfRE9ORV9FTl9TSElGVAkJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDQ0MzBfQUJCX01QVV9ET05FX0VOX1NISUZUCQkJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX0FCQl9NUFVfRE9ORV9FTl9NQVNLCQkJCQlCSVRGSUVMRCg3LCA3KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfTVBVXzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQUJCX01QVV9ET05FX1NUX1NISUZUCQkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9BQkJfTVBVX0RPTkVfU1RfU0hJRlQJCQkJCTcKICNkZWZpbmUgT01BUDQ0MzBfQUJCX01QVV9ET05FX1NUX01BU0sJCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUFJNX0xET19BQkJfSVZBX1NFVFVQLCBQUk1fTERPX0FCQl9NUFVfU0VUVVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQUNUSVZFX0ZCQl9TRUxfU0hJRlQJCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX0FDVElWRV9GQkJfU0VMX1NISUZUCQkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX0FDVElWRV9GQkJfU0VMX01BU0sJCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgUFJNX0xET19BQkJfSVZBX1NFVFVQLCBQUk1fTERPX0FCQl9NUFVfU0VUVVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQUNUSVZFX1JCQl9TRUxfU0hJRlQJCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX0FDVElWRV9SQkJfU0VMX1NISUZUCQkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX0FDVElWRV9SQkJfU0VMX01BU0sJCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9BRVNTTUVNX09OU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9BRVNTTUVNX09OU1RBVEVfU0hJRlQJCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX0FFU1NNRU1fT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMTcpCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9BRVNTTUVNX1JFVFNUQVRFX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9BRVNTTUVNX1JFVFNUQVRFX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0FFU1NNRU1fUkVUU1RBVEVfTUFTSwkJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBQTV9BQkVfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9BRVNTTUVNX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0FFU1NNRU1fU1RBVEVTVF9TSElGVAkJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9BRVNTTUVNX1NUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoNCwgNSkKIAogLyoKICAqIFVzZWQgYnkgUFJNX0xET19TUkFNX0NPUkVfU0VUVVAsIFBSTV9MRE9fU1JBTV9JVkFfU0VUVVAsCiAgKiBQUk1fTERPX1NSQU1fTVBVX1NFVFVQCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQUlQT0ZGX1NISUZUCQkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQUlQT0ZGX1NISUZUCQkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9BSVBPRkZfTUFTSwkJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUFJNX1ZPTFRDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0FVVE9fQ1RSTF9WRERfQ09SRV9MX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0FVVE9fQ1RSTF9WRERfQ09SRV9MX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfQVVUT19DVFJMX1ZERF9DT1JFX0xfTUFTSwkJCQlCSVRGSUVMRCgwLCAxKQogCiAvKiBVc2VkIGJ5IFBSTV9WT0xUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9BVVRPX0NUUkxfVkREX0lWQV9MX1NISUZUCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0FVVE9fQ1RSTF9WRERfSVZBX0xfU0hJRlQJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9BVVRPX0NUUkxfVkREX0lWQV9MX01BU0sJCQkJQklURklFTEQoNCwgNSkKIAogLyogVXNlZCBieSBQUk1fVk9MVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQVVUT19DVFJMX1ZERF9NUFVfTF9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9BVVRPX0NUUkxfVkREX01QVV9MX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfQVVUT19DVFJMX1ZERF9NUFVfTF9NQVNLCQkJCUJJVEZJRUxEKDIsIDMpCiAKIC8qIFVzZWQgYnkgUE1fQ0FNX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DQU1fTUVNX09OU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9DQU1fTUVNX09OU1RBVEVfU0hJRlQJCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX0NBTV9NRU1fT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMTcpCiAKIC8qIFVzZWQgYnkgUE1fQ0FNX1BXUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0FNX01FTV9TVEFURVNUX1NISUZUCQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9DQU1fTUVNX1NUQVRFU1RfU0hJRlQJCQkJCTQKICNkZWZpbmUgT01BUDQ0MzBfQ0FNX01FTV9TVEFURVNUX01BU0sJCQkJCUJJVEZJRUxEKDQsIDUpCiAKIC8qIFVzZWQgYnkgUFJNX0NMS1JFUUNUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ0xLUkVRX0NPTkRfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0NMS1JFUV9DT05EX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0NMS1JFUV9DT05EX01BU0sJCQkJCUJJVEZJRUxEKDAsIDIpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX1ZBTF9TTVBTX1JBX0NNRCAqLwotI2RlZmluZSBPTUFQNDQzMF9DTURSQV9WRERfQ09SRV9MX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9DTURSQV9WRERfQ09SRV9MX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0NNRFJBX1ZERF9DT1JFX0xfTUFTSwkJCQkJQklURklFTEQoMCwgNykKIAogLyogVXNlZCBieSBQUk1fVkNfVkFMX1NNUFNfUkFfQ01EICovCi0jZGVmaW5lIE9NQVA0NDMwX0NNRFJBX1ZERF9JVkFfTF9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfQ01EUkFfVkREX0lWQV9MX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0NNRFJBX1ZERF9JVkFfTF9NQVNLCQkJCQlCSVRGSUVMRCg4LCAxNSkKIAogLyogVXNlZCBieSBQUk1fVkNfVkFMX1NNUFNfUkFfQ01EICovCi0jZGVmaW5lIE9NQVA0NDMwX0NNRFJBX1ZERF9NUFVfTF9TSElGVAkJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX0NNRFJBX1ZERF9NUFVfTF9TSElGVAkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfQ01EUkFfVkREX01QVV9MX01BU0sJCQkJCUJJVEZJRUxEKDE2LCAyMykKIAogLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0NIQU5ORUwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ01EX1ZERF9DT1JFX0xfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0NNRF9WRERfQ09SRV9MX1NISUZUCQkJCQk0CiAjZGVmaW5lIE9NQVA0NDMwX0NNRF9WRERfQ09SRV9MX01BU0sJCQkJCUJJVEZJRUxEKDQsIDQpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX0NGR19DSEFOTkVMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NNRF9WRERfSVZBX0xfU0hJRlQJCQkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9DTURfVkREX0lWQV9MX1NISUZUCQkJCQkxMgogI2RlZmluZSBPTUFQNDQzMF9DTURfVkREX0lWQV9MX01BU0sJCQkJCUJJVEZJRUxEKDEyLCAxMikKIAogLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0NIQU5ORUwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ01EX1ZERF9NUFVfTF9TSElGVAkJCQkJKDEgPDwgMTcpCisjZGVmaW5lIE9NQVA0NDMwX0NNRF9WRERfTVBVX0xfU0hJRlQJCQkJCTE3CiAjZGVmaW5lIE9NQVA0NDMwX0NNRF9WRERfTVBVX0xfTUFTSwkJCQkJQklURklFTEQoMTcsIDE3KQogCiAvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NPUkVfT0NNUkFNX09OU1RBVEVfU0hJRlQJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVA0NDMwX0NPUkVfT0NNUkFNX09OU1RBVEVfU0hJRlQJCQkJMTgKICNkZWZpbmUgT01BUDQ0MzBfQ09SRV9PQ01SQU1fT05TVEFURV9NQVNLCQkJCUJJVEZJRUxEKDE4LCAxOSkKIAogLyogVXNlZCBieSBQTV9DT1JFX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9DT1JFX09DTVJBTV9SRVRTVEFURV9TSElGVAkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9DT1JFX09DTVJBTV9SRVRTVEFURV9TSElGVAkJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX0NPUkVfT0NNUkFNX1JFVFNUQVRFX01BU0sJCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBQTV9DT1JFX1BXUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ09SRV9PQ01SQU1fU1RBVEVTVF9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9DT1JFX09DTVJBTV9TVEFURVNUX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfQ09SRV9PQ01SQU1fU1RBVEVTVF9NQVNLCQkJCUJJVEZJRUxEKDYsIDcpCiAKIC8qIFVzZWQgYnkgUE1fQ09SRV9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfQ09SRV9PVEhFUl9CQU5LX09OU1RBVEVfU0hJRlQJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX0NPUkVfT1RIRVJfQkFOS19PTlNUQVRFX1NISUZUCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX0NPUkVfT1RIRVJfQkFOS19PTlNUQVRFX01BU0sJCQkJQklURklFTEQoMTYsIDE3KQogCiAvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0NPUkVfT1RIRVJfQkFOS19SRVRTVEFURV9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9DT1JFX09USEVSX0JBTktfUkVUU1RBVEVfU0hJRlQJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9DT1JFX09USEVSX0JBTktfUkVUU1RBVEVfTUFTSwkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9DT1JFX09USEVSX0JBTktfU1RBVEVTVF9TSElGVAkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9DT1JFX09USEVSX0JBTktfU1RBVEVTVF9TSElGVAkJCQk0CiAjZGVmaW5lIE9NQVA0NDMwX0NPUkVfT1RIRVJfQkFOS19TVEFURVNUX01BU0sJCQkJQklURklFTEQoNCwgNSkKIAogLyogVXNlZCBieSBQUk1fVkNfVkFMX0JZUEFTUyAqLwotI2RlZmluZSBPTUFQNDQzMF9EQVRBX1NISUZUCQkJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX0RBVEFfU0hJRlQJCQkJCQkxNgogI2RlZmluZSBPTUFQNDQzMF9EQVRBX01BU0sJCQkJCQlCSVRGSUVMRCgxNiwgMjMpCiAKIC8qIFVzZWQgYnkgUFJNX0RFVklDRV9PRkZfQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9ERVZJQ0VfT0ZGX0VOQUJMRV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9ERVZJQ0VfT0ZGX0VOQUJMRV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0RFVklDRV9PRkZfRU5BQkxFX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX0NGR19JMkNfTU9ERSAqLwotI2RlZmluZSBPTUFQNDQzMF9ERklMVEVSRU5fU0hJRlQJCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX0RGSUxURVJFTl9TSElGVAkJCQkJNgogI2RlZmluZSBPTUFQNDQzMF9ERklMVEVSRU5fTUFTSwkJCQkJCUJJVEZJRUxEKDYsIDYpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9NUFUsIFBSTV9JUlFFTkFCTEVfVEVTTEEgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9BQkVfUkVDQUxfRU5fU0hJRlQJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9BQkVfUkVDQUxfRU5fU0hJRlQJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9EUExMX0FCRV9SRUNBTF9FTl9NQVNLCQkJCQlCSVRGSUVMRCg0LCA0KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfTVBVLCBQUk1fSVJRU1RBVFVTX1RFU0xBICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfQUJFX1JFQ0FMX1NUX1NISUZUCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQUJFX1JFQ0FMX1NUX1NISUZUCQkJCTQKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9BQkVfUkVDQUxfU1RfTUFTSwkJCQkJQklURklFTEQoNCwgNCkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9DT1JFX1JFQ0FMX0VOX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ09SRV9SRUNBTF9FTl9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfQ09SRV9SRUNBTF9FTl9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfQ09SRV9SRUNBTF9TVF9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0NPUkVfUkVDQUxfU1RfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9EUExMX0NPUkVfUkVDQUxfU1RfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfRERSUEhZX1JFQ0FMX0VOX1NISUZUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfRERSUEhZX1JFQ0FMX0VOX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9ERFJQSFlfUkVDQUxfRU5fTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfRERSUEhZX1JFQ0FMX1NUX1NISUZUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfRERSUEhZX1JFQ0FMX1NUX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9ERFJQSFlfUkVDQUxfU1RfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSwgUFJNX0lSUUVOQUJMRV9URVNMQSAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX0lWQV9SRUNBTF9FTl9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX0lWQV9SRUNBTF9FTl9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfSVZBX1JFQ0FMX0VOX01BU0sJCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVLCBQUk1fSVJRU1RBVFVTX1RFU0xBICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfSVZBX1JFQ0FMX1NUX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfSVZBX1JFQ0FMX1NUX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9JVkFfUkVDQUxfU1RfTUFTSwkJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX01QVV9SRUNBTF9FTl9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX01QVV9SRUNBTF9FTl9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfTVBVX1JFQ0FMX0VOX01BU0sJCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9NUFVfUkVDQUxfU1RfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9NUFVfUkVDQUxfU1RfU0hJRlQJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9EUExMX01QVV9SRUNBTF9TVF9NQVNLCQkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX1BFUl9SRUNBTF9FTl9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9EUExMX1BFUl9SRUNBTF9FTl9TSElGVAkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfUEVSX1JFQ0FMX0VOX01BU0sJCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfUEVSX1JFQ0FMX1NUX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfUEVSX1JFQ0FMX1NUX1NISUZUCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9QRVJfUkVDQUxfU1RfTUFTSwkJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFBMTF9VTklQUk9fUkVDQUxfRU5fU0hJRlQJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDQ0MzBfRFBMTF9VTklQUk9fUkVDQUxfRU5fU0hJRlQJCQkJNwogI2RlZmluZSBPTUFQNDQzMF9EUExMX1VOSVBST19SRUNBTF9FTl9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfVU5JUFJPX1JFQ0FMX1NUX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfVU5JUFJPX1JFQ0FMX1NUX1NISUZUCQkJCTcKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9VTklQUk9fUkVDQUxfU1RfTUFTSwkJCQlCSVRGSUVMRCg3LCA3KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX0RQTExfVVNCX1JFQ0FMX0VOX1NISUZUCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX0RQTExfVVNCX1JFQ0FMX0VOX1NISUZUCQkJCTUKICNkZWZpbmUgT01BUDQ0MzBfRFBMTF9VU0JfUkVDQUxfRU5fTUFTSwkJCQkJQklURklFTEQoNSwgNSkKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9EUExMX1VTQl9SRUNBTF9TVF9TSElGVAkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9EUExMX1VTQl9SRUNBTF9TVF9TSElGVAkJCQk1CiAjZGVmaW5lIE9NQVA0NDMwX0RQTExfVVNCX1JFQ0FMX1NUX01BU0sJCQkJCUJJVEZJRUxEKDUsIDUpCiAKIC8qIFVzZWQgYnkgUE1fRFNTX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9EU1NfTUVNX09OU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9EU1NfTUVNX09OU1RBVEVfU0hJRlQJCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX0RTU19NRU1fT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMTcpCiAKIC8qIFVzZWQgYnkgUE1fRFNTX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9EU1NfTUVNX1JFVFNUQVRFX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9EU1NfTUVNX1JFVFNUQVRFX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0RTU19NRU1fUkVUU1RBVEVfTUFTSwkJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBQTV9EU1NfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9EU1NfTUVNX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0RTU19NRU1fU1RBVEVTVF9TSElGVAkJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9EU1NfTUVNX1NUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoNCwgNSkKIAogLyogVXNlZCBieSBQTV9DT1JFX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfTDJSQU1fT05TVEFURV9TSElGVAkJCQkoMSA8PCAyMCkKKyNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX0wyUkFNX09OU1RBVEVfU0hJRlQJCQkJMjAKICNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX0wyUkFNX09OU1RBVEVfTUFTSwkJCQlCSVRGSUVMRCgyMCwgMjEpCiAKIC8qIFVzZWQgYnkgUE1fQ09SRV9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX0wyUkFNX1JFVFNUQVRFX1NISUZUCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfTDJSQU1fUkVUU1RBVEVfU0hJRlQJCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX0wyUkFNX1JFVFNUQVRFX01BU0sJCQkJQklURklFTEQoMTAsIDEwKQogCiAvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfTDJSQU1fU1RBVEVTVF9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfTDJSQU1fU1RBVEVTVF9TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0RVQ0FUSV9MMlJBTV9TVEFURVNUX01BU0sJCQkJQklURklFTEQoOCwgOSkKIAogLyogVXNlZCBieSBQTV9DT1JFX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfVU5JQ0FDSEVfT05TVEFURV9TSElGVAkJCQkoMSA8PCAyMikKKyNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX1VOSUNBQ0hFX09OU1RBVEVfU0hJRlQJCQkJMjIKICNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX1VOSUNBQ0hFX09OU1RBVEVfTUFTSwkJCQlCSVRGSUVMRCgyMiwgMjMpCiAKIC8qIFVzZWQgYnkgUE1fQ09SRV9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX1VOSUNBQ0hFX1JFVFNUQVRFX1NISUZUCQkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfVU5JQ0FDSEVfUkVUU1RBVEVfU0hJRlQJCQkJMTEKICNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX1VOSUNBQ0hFX1JFVFNUQVRFX01BU0sJCQkJQklURklFTEQoMTEsIDExKQogCiAvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9EVUNBVElfVU5JQ0FDSEVfU1RBVEVTVF9TSElGVAkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX1VOSUNBQ0hFX1NUQVRFU1RfU0hJRlQJCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfRFVDQVRJX1VOSUNBQ0hFX1NUQVRFU1RfTUFTSwkJCQlCSVRGSUVMRCgxMCwgMTEpCiAKIC8qIFVzZWQgYnkgUk1fTVBVX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX0VNVUxBVElPTl9SU1RfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0VNVUxBVElPTl9SU1RfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfRU1VTEFUSU9OX1JTVF9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9SU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9FTVVMQVRJT05fUlNUMVNUX1NISUZUCQkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9FTVVMQVRJT05fUlNUMVNUX1NISUZUCQkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX0VNVUxBVElPTl9SU1QxU1RfTUFTSwkJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBSTV9EVUNBVElfUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRU1VTEFUSU9OX1JTVDJTVF9TSElGVAkJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfRU1VTEFUSU9OX1JTVDJTVF9TSElGVAkJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9FTVVMQVRJT05fUlNUMlNUX01BU0sJCQkJCUJJVEZJRUxEKDQsIDQpCiAKIC8qIFVzZWQgYnkgUk1fSVZBSERfUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRU1VTEFUSU9OX1NFUTFfUlNUMVNUX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX0VNVUxBVElPTl9TRVExX1JTVDFTVF9TSElGVAkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX0VNVUxBVElPTl9TRVExX1JTVDFTVF9NQVNLCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qIFVzZWQgYnkgUk1fSVZBSERfUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRU1VTEFUSU9OX1NFUTJfUlNUMlNUX1NISUZUCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0VNVUxBVElPTl9TRVEyX1JTVDJTVF9TSElGVAkJCQk0CiAjZGVmaW5lIE9NQVA0NDMwX0VNVUxBVElPTl9TRVEyX1JTVDJTVF9NQVNLCQkJCUJJVEZJRUxEKDQsIDQpCiAKIC8qIFVzZWQgYnkgUE1fRU1VX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9FTVVfQkFOS19PTlNUQVRFX1NISUZUCQkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfRU1VX0JBTktfT05TVEFURV9TSElGVAkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfRU1VX0JBTktfT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMTcpCiAKIC8qIFVzZWQgYnkgUE1fRU1VX1BXUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRU1VX0JBTktfU1RBVEVTVF9TSElGVAkJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfRU1VX0JBTktfU1RBVEVTVF9TSElGVAkJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9FTVVfQkFOS19TVEFURVNUX01BU0sJCQkJCUJJVEZJRUxEKDQsIDUpCiAKIC8qCiAgKiBVc2VkIGJ5IFBSTV9MRE9fU1JBTV9DT1JFX1NFVFVQLCBQUk1fTERPX1NSQU1fSVZBX1NFVFVQLAogICogUFJNX0xET19TUkFNX01QVV9TRVRVUCwgUFJNX1NSQU1fV0tVUF9TRVRVUAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0VOQUJMRV9SVEFfRVhQT1JUX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0VOQUJMRV9SVEFfRVhQT1JUX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfRU5BQkxFX1JUQV9FWFBPUlRfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyoKICAqIFVzZWQgYnkgUFJNX0xET19TUkFNX0NPUkVfU0VUVVAsIFBSTV9MRE9fU1JBTV9JVkFfU0VUVVAsCiAgKiBQUk1fTERPX1NSQU1fTVBVX1NFVFVQCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRU5GVU5DMV9TSElGVAkJCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX0VORlVOQzFfU0hJRlQJCQkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX0VORlVOQzFfTUFTSwkJCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qCiAgKiBVc2VkIGJ5IFBSTV9MRE9fU1JBTV9DT1JFX1NFVFVQLCBQUk1fTERPX1NSQU1fSVZBX1NFVFVQLAogICogUFJNX0xET19TUkFNX01QVV9TRVRVUAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0VORlVOQzNfU0hJRlQJCQkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9FTkZVTkMzX1NISUZUCQkJCQkJNQogI2RlZmluZSBPTUFQNDQzMF9FTkZVTkMzX01BU0sJCQkJCQlCSVRGSUVMRCg1LCA1KQogCiAvKgogICogVXNlZCBieSBQUk1fTERPX1NSQU1fQ09SRV9TRVRVUCwgUFJNX0xET19TUkFNX0lWQV9TRVRVUCwKICAqIFBSTV9MRE9fU1JBTV9NUFVfU0VUVVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9FTkZVTkM0X1NISUZUCQkJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfRU5GVU5DNF9TSElGVAkJCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfRU5GVU5DNF9NQVNLCQkJCQkJQklURklFTEQoNiwgNikKIAogLyoKICAqIFVzZWQgYnkgUFJNX0xET19TUkFNX0NPUkVfU0VUVVAsIFBSTV9MRE9fU1JBTV9JVkFfU0VUVVAsCiAgKiBQUk1fTERPX1NSQU1fTVBVX1NFVFVQCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRU5GVU5DNV9TSElGVAkJCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX0VORlVOQzVfU0hJRlQJCQkJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX0VORlVOQzVfTUFTSwkJCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUFJNX1ZQX0NPUkVfQ09ORklHLCBQUk1fVlBfSVZBX0NPTkZJRywgUFJNX1ZQX01QVV9DT05GSUcgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRVJST1JHQUlOX1NISUZUCQkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfRVJST1JHQUlOX1NISUZUCQkJCQkxNgogI2RlZmluZSBPTUFQNDQzMF9FUlJPUkdBSU5fTUFTSwkJCQkJCUJJVEZJRUxEKDE2LCAyMykKIAogLyogVXNlZCBieSBQUk1fVlBfQ09SRV9DT05GSUcsIFBSTV9WUF9JVkFfQ09ORklHLCBQUk1fVlBfTVBVX0NPTkZJRyAqLwotI2RlZmluZSBPTUFQNDQzMF9FUlJPUk9GRlNFVF9TSElGVAkJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX0VSUk9ST0ZGU0VUX1NISUZUCQkJCQkyNAogI2RlZmluZSBPTUFQNDQzMF9FUlJPUk9GRlNFVF9NQVNLCQkJCQlCSVRGSUVMRCgyNCwgMzEpCiAKIC8qIFVzZWQgYnkgUFJNX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX0VYVEVSTkFMX1dBUk1fUlNUX1NISUZUCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX0VYVEVSTkFMX1dBUk1fUlNUX1NISUZUCQkJCTUKICNkZWZpbmUgT01BUDQ0MzBfRVhURVJOQUxfV0FSTV9SU1RfTUFTSwkJCQkJQklURklFTEQoNSwgNSkKIAogLyogVXNlZCBieSBQUk1fVlBfQ09SRV9DT05GSUcsIFBSTV9WUF9JVkFfQ09ORklHLCBQUk1fVlBfTVBVX0NPTkZJRyAqLwotI2RlZmluZSBPTUFQNDQzMF9GT1JDRVVQREFURV9TSElGVAkJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfRk9SQ0VVUERBVEVfU0hJRlQJCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfRk9SQ0VVUERBVEVfTUFTSwkJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQUk1fVlBfQ09SRV9WT0xUQUdFLCBQUk1fVlBfSVZBX1ZPTFRBR0UsIFBSTV9WUF9NUFVfVk9MVEFHRSAqLwotI2RlZmluZSBPTUFQNDQzMF9GT1JDRVVQREFURVdBSVRfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0ZPUkNFVVBEQVRFV0FJVF9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9GT1JDRVVQREFURVdBSVRfTUFTSwkJCQkJQklURklFTEQoOCwgMzEpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfVEVTTEEgKi8KLSNkZWZpbmUgT01BUDQ0MzBfRk9SQ0VXS1VQX0VOX1NISUZUCQkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfRk9SQ0VXS1VQX0VOX1NISUZUCQkJCQkxMAogI2RlZmluZSBPTUFQNDQzMF9GT1JDRVdLVVBfRU5fTUFTSwkJCQkJQklURklFTEQoMTAsIDEwKQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfRFVDQVRJLCBQUk1fSVJRU1RBVFVTX1RFU0xBICovCi0jZGVmaW5lIE9NQVA0NDMwX0ZPUkNFV0tVUF9TVF9TSElGVAkJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0ZPUkNFV0tVUF9TVF9TSElGVAkJCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfRk9SQ0VXS1VQX1NUX01BU0sJCQkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBQTV9HRlhfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0dGWF9NRU1fT05TVEFURV9TSElGVAkJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX0dGWF9NRU1fT05TVEFURV9TSElGVAkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfR0ZYX01FTV9PTlNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDE2LCAxNykKIAogLyogVXNlZCBieSBQTV9HRlhfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9HRlhfTUVNX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0dGWF9NRU1fU1RBVEVTVF9TSElGVAkJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9HRlhfTUVNX1NUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoNCwgNSkKIAogLyogVXNlZCBieSBQUk1fUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfR0xPQkFMX0NPTERfUlNUX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9HTE9CQUxfQ09MRF9SU1RfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfR0xPQkFMX0NPTERfUlNUX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUFJNX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX0dMT0JBTF9XQVJNX1NXX1JTVF9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9HTE9CQUxfV0FSTV9TV19SU1RfU0hJRlQJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9HTE9CQUxfV0FSTV9TV19SU1RfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBSTV9JT19QTUNUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfR0xPQkFMX1dVRU5fU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9HTE9CQUxfV1VFTl9TSElGVAkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfR0xPQkFMX1dVRU5fTUFTSwkJCQkJQklURklFTEQoMTYsIDE2KQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfSTJDX01PREUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSFNNQ09ERV9TSElGVAkJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0hTTUNPREVfU0hJRlQJCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX0hTTUNPREVfTUFTSwkJCQkJCUJJVEZJRUxEKDAsIDIpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX0NGR19JMkNfTU9ERSAqLwotI2RlZmluZSBPTUFQNDQzMF9IU01PREVFTl9TSElGVAkJCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX0hTTU9ERUVOX1NISUZUCQkJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9IU01PREVFTl9NQVNLCQkJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0kyQ19DTEsgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSFNTQ0xIX1NISUZUCQkJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX0hTU0NMSF9TSElGVAkJCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX0hTU0NMSF9NQVNLCQkJCQkJQklURklFTEQoMTYsIDIzKQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfSTJDX0NMSyAqLwotI2RlZmluZSBPTUFQNDQzMF9IU1NDTExfU0hJRlQJCQkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfSFNTQ0xMX1NISUZUCQkJCQkJMjQKICNkZWZpbmUgT01BUDQ0MzBfSFNTQ0xMX01BU0sJCQkJCQlCSVRGSUVMRCgyNCwgMzEpCiAKIC8qIFVzZWQgYnkgUE1fSVZBSERfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0hXQV9NRU1fT05TVEFURV9TSElGVAkJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX0hXQV9NRU1fT05TVEFURV9TSElGVAkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfSFdBX01FTV9PTlNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDE2LCAxNykKIAogLyogVXNlZCBieSBQTV9JVkFIRF9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSFdBX01FTV9SRVRTVEFURV9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfSFdBX01FTV9SRVRTVEFURV9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9IV0FfTUVNX1JFVFNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUE1fSVZBSERfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9IV0FfTUVNX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX0hXQV9NRU1fU1RBVEVTVF9TSElGVAkJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9IV0FfTUVNX1NUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoNCwgNSkKIAogLyogVXNlZCBieSBSTV9NUFVfUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSUNFQ1JVU0hFUl9NUFVfUlNUX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX0lDRUNSVVNIRVJfTVBVX1JTVF9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX0lDRUNSVVNIRVJfTVBVX1JTVF9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUk1fRFVDQVRJX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX0lDRUNSVVNIRVJfUlNUMVNUX1NISUZUCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX0lDRUNSVVNIRVJfUlNUMVNUX1NISUZUCQkJCTUKICNkZWZpbmUgT01BUDQ0MzBfSUNFQ1JVU0hFUl9SU1QxU1RfTUFTSwkJCQkJQklURklFTEQoNSwgNSkKIAogLyogVXNlZCBieSBSTV9EVUNBVElfUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSUNFQ1JVU0hFUl9SU1QyU1RfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfSUNFQ1JVU0hFUl9SU1QyU1RfU0hJRlQJCQkJNgogI2RlZmluZSBPTUFQNDQzMF9JQ0VDUlVTSEVSX1JTVDJTVF9NQVNLCQkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFJNX0lWQUhEX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX0lDRUNSVVNIRVJfU0VRMV9SU1QxU1RfU0hJRlQJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDQ0MzBfSUNFQ1JVU0hFUl9TRVExX1JTVDFTVF9TSElGVAkJCQk1CiAjZGVmaW5lIE9NQVA0NDMwX0lDRUNSVVNIRVJfU0VRMV9SU1QxU1RfTUFTSwkJCQlCSVRGSUVMRCg1LCA1KQogCiAvKiBVc2VkIGJ5IFJNX0lWQUhEX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX0lDRUNSVVNIRVJfU0VRMl9SU1QyU1RfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfSUNFQ1JVU0hFUl9TRVEyX1JTVDJTVF9TSElGVAkJCQk2CiAjZGVmaW5lIE9NQVA0NDMwX0lDRUNSVVNIRVJfU0VRMl9SU1QyU1RfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBSTV9SU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9JQ0VQSUNLX1JTVF9TSElGVAkJCQkJKDEgPDwgOSkKKyNkZWZpbmUgT01BUDQ0MzBfSUNFUElDS19SU1RfU0hJRlQJCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfSUNFUElDS19SU1RfTUFTSwkJCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBQUk1fVlBfQ09SRV9DT05GSUcsIFBSTV9WUF9JVkFfQ09ORklHLCBQUk1fVlBfTVBVX0NPTkZJRyAqLwotI2RlZmluZSBPTUFQNDQzMF9JTklUVkREX1NISUZUCQkJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfSU5JVFZERF9TSElGVAkJCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfSU5JVFZERF9NQVNLCQkJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQUk1fVlBfQ09SRV9DT05GSUcsIFBSTV9WUF9JVkFfQ09ORklHLCBQUk1fVlBfTVBVX0NPTkZJRyAqLwotI2RlZmluZSBPTUFQNDQzMF9JTklUVk9MVEFHRV9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfSU5JVFZPTFRBR0VfU0hJRlQJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfSU5JVFZPTFRBR0VfTUFTSwkJCQkJQklURklFTEQoOCwgMTUpCiAKIC8qCkBAIC00NDIsNDcgKzQ0Miw0NyBAQAogICogUE1fQUJFX1BXUlNUU1QsIFBNX0dGWF9QV1JTVFNULCBQTV9NUFVfUFdSU1RTVCwgUE1fQ0VGVVNFX1BXUlNUU1QsCiAgKiBQTV9EU1NfUFdSU1RTVCwgUE1fTDRQRVJfUFdSU1RTVCwgUE1fVEVTTEFfUFdSU1RTVCwgUE1fSVZBSERfUFdSU1RTVAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0lOVFJBTlNJVElPTl9TSElGVAkJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX0lOVFJBTlNJVElPTl9TSElGVAkJCQkJMjAKICNkZWZpbmUgT01BUDQ0MzBfSU5UUkFOU0lUSU9OX01BU0sJCQkJCUJJVEZJRUxEKDIwLCAyMCkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSU9fRU5fU0hJRlQJCQkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9JT19FTl9TSElGVAkJCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfSU9fRU5fTUFTSwkJCQkJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgUFJNX0lPX1BNQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9JT19PTl9TVEFUVVNfU0hJRlQJCQkJCSgxIDw8IDUpCisjZGVmaW5lIE9NQVA0NDMwX0lPX09OX1NUQVRVU19TSElGVAkJCQkJNQogI2RlZmluZSBPTUFQNDQzMF9JT19PTl9TVEFUVVNfTUFTSwkJCQkJQklURklFTEQoNSwgNSkKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSU9fU1RfU0hJRlQJCQkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9JT19TVF9TSElGVAkJCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfSU9fU1RfTUFTSwkJCQkJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgUFJNX0lPX1BNQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9JU09DTEtfT1ZFUlJJREVfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0lTT0NMS19PVkVSUklERV9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9JU09DTEtfT1ZFUlJJREVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQUk1fSU9fUE1DVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX0lTT0NMS19TVEFUVVNfU0hJRlQJCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX0lTT0NMS19TVEFUVVNfU0hJRlQJCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfSVNPQ0xLX1NUQVRVU19NQVNLCQkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBSTV9JT19QTUNUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfSVNPT1ZSX0VYVEVORF9TSElGVAkJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfSVNPT1ZSX0VYVEVORF9TSElGVAkJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9JU09PVlJfRVhURU5EX01BU0sJCQkJCUJJVEZJRUxEKDQsIDQpCiAKIC8qIFVzZWQgYnkgUFJNX0lPX0NPVU5UICovCi0jZGVmaW5lIE9NQVA0NDMwX0lTT18yX09OX1RJTUVfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX0lTT18yX09OX1RJTUVfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfSVNPXzJfT05fVElNRV9NQVNLCQkJCQlCSVRGSUVMRCgwLCA3KQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTDNJTklUX0JBTksxX09OU1RBVEVfU0hJRlQJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX0wzSU5JVF9CQU5LMV9PTlNUQVRFX1NISUZUCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX0wzSU5JVF9CQU5LMV9PTlNUQVRFX01BU0sJCQkJQklURklFTEQoMTYsIDE3KQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTDNJTklUX0JBTksxX1JFVFNUQVRFX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0wzSU5JVF9CQU5LMV9SRVRTVEFURV9TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0wzSU5JVF9CQU5LMV9SRVRTVEFURV9NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX1BXUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTDNJTklUX0JBTksxX1NUQVRFU1RfU0hJRlQJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfTDNJTklUX0JBTksxX1NUQVRFU1RfU0hJRlQJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9MM0lOSVRfQkFOSzFfU1RBVEVTVF9NQVNLCQkJCUJJVEZJRUxEKDQsIDUpCiAKIC8qCkBAIC00OTAsNyArNDkwLDcgQEAKICAqIFBNX01QVV9QV1JTVENUUkwsIFBNX0RTU19QV1JTVENUUkwsIFBNX0w0UEVSX1BXUlNUQ1RSTCwgUE1fVEVTTEFfUFdSU1RDVFJMLAogICogUE1fSVZBSERfUFdSU1RDVFJMCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9HSUNSRVRTVEFURV9TSElGVAkJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfTE9HSUNSRVRTVEFURV9TSElGVAkJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9MT0dJQ1JFVFNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qCkBAIC00OTgsNyArNDk4LDcgQEAKICAqIFBNX0FCRV9QV1JTVFNULCBQTV9HRlhfUFdSU1RTVCwgUE1fTVBVX1BXUlNUU1QsIFBNX0NFRlVTRV9QV1JTVFNULAogICogUE1fRFNTX1BXUlNUU1QsIFBNX0w0UEVSX1BXUlNUU1QsIFBNX1RFU0xBX1BXUlNUU1QsIFBNX0lWQUhEX1BXUlNUU1QKICAqLwotI2RlZmluZSBPTUFQNDQzMF9MT0dJQ1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX0xPR0lDU1RBVEVTVF9TSElGVAkJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9MT0dJQ1NUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoMiwgMikKIAogLyoKQEAgLTUzNyw3ICs1MzcsNyBAQAogICogUk1fTDRQRVJfU0xJTUJVUzJfQ09OVEVYVCwgUk1fTDRTRUNfUEtBRUlQMjlfQ09OVEVYVCwKICAqIFJNX1RFU0xBX1RFU0xBX0NPTlRFWFQsIFJNX0lWQUhEX0lWQUhEX0NPTlRFWFQsIFJNX0lWQUhEX1NMMl9DT05URVhUCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9TVENPTlRFWFRfREZGX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9MT1NUQ09OVEVYVF9ERkZfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfTE9TVENPTlRFWFRfREZGX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qCkBAIC01NTgsNTggKzU1OCw1OCBAQAogICogUk1fTDRTRUNfQUVTMl9DT05URVhULCBSTV9MNFNFQ19DUllQVE9ETUFfQ09OVEVYVCwgUk1fTDRTRUNfREVTM0RFU19DT05URVhULAogICogUk1fTDRTRUNfUk5HX0NPTlRFWFQsIFJNX0w0U0VDX1NIQTJNRDUxX0NPTlRFWFQsIFJNX1RFU0xBX1RFU0xBX0NPTlRFWFQKICAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUQ09OVEVYVF9SRkZfU0hJRlQJCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RDT05URVhUX1JGRl9TSElGVAkJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9MT1NUQ09OVEVYVF9SRkZfTUFTSwkJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBSTV9BQkVfQUVTU19DT05URVhUICovCi0jZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fQUVTU01FTV9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9BRVNTTUVNX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fQUVTU01FTV9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IFJNX0NBTV9GRElGX0NPTlRFWFQsIFJNX0NBTV9JU1NfQ09OVEVYVCAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0NBTV9NRU1fU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fQ0FNX01FTV9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0NBTV9NRU1fTUFTSwkJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBSTV9MM0lOU1RSX09DUF9XUDFfQ09OVEVYVCAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0NPUkVfTlJFVF9CQU5LX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fQ09SRV9OUkVUX0JBTktfU0hJRlQJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0NPUkVfTlJFVF9CQU5LX01BU0sJCQkJQklURklFTEQoOCwgOCkKIAogLyogUmVuYW1lZCBmcm9tIExPU1RNRU1fQ09SRV9OUkVUX0JBTksgVXNlZCBieSBSTV9NRU1JRl9ETU1fQ09OVEVYVCAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0NPUkVfTlJFVF9CQU5LXzlfOV9TSElGVAkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fQ09SRV9OUkVUX0JBTktfOV85X1NISUZUCQkJOQogI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0NPUkVfTlJFVF9CQU5LXzlfOV9NQVNLCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBSTV9MM18yX09DTUNfUkFNX0NPTlRFWFQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9DT1JFX09DTVJBTV9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0NPUkVfT0NNUkFNX1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9DT1JFX09DTVJBTV9NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qCiAgKiBVc2VkIGJ5IFJNX0QyRF9NT0RFTV9JQ1JfQ09OVEVYVCwgUk1fTUVNSUZfRE1NX0NPTlRFWFQsCiAgKiBSTV9TRE1BX1NETUFfQ09OVEVYVAogICovCi0jZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fQ09SRV9PVEhFUl9CQU5LX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fQ09SRV9PVEhFUl9CQU5LX1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9DT1JFX09USEVSX0JBTktfTUFTSwkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IFJNX0RTU19ERUlTU19DT05URVhULCBSTV9EU1NfRFNTX0NPTlRFWFQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9EU1NfTUVNX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0RTU19NRU1fU0hJRlQJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9EU1NfTUVNX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUk1fRFVDQVRJX0RVQ0FUSV9DT05URVhUICovCi0jZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fRFVDQVRJX0wyUkFNX1NISUZUCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fRFVDQVRJX0wyUkFNX1NISUZUCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9EVUNBVElfTDJSQU1fTUFTSwkJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9EVUNBVElfQ09OVEVYVCAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0RVQ0FUSV9VTklDQUNIRV9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0RVQ0FUSV9VTklDQUNIRV9TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fRFVDQVRJX1VOSUNBQ0hFX01BU0sJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBSTV9FTVVfREVCVUdTU19DT05URVhUICovCi0jZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fRU1VX0JBTktfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fRU1VX0JBTktfU0hJRlQJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9FTVVfQkFOS19NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IFJNX0dGWF9HRlhfQ09OVEVYVCAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0dGWF9NRU1fU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fR0ZYX01FTV9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0dGWF9NRU1fTUFTSwkJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBSTV9JVkFIRF9JVkFIRF9DT05URVhUICovCi0jZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fSFdBX01FTV9TSElGVAkJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fSFdBX01FTV9TSElGVAkJCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9IV0FfTUVNX01BU0sJCQkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyoKQEAgLTYxOSwxOSArNjE5LDE5IEBACiAgKiBSTV9MM0lOSVRfVFBQU1NfQ09OVEVYVCwgUk1fTDNJTklUX1VOSVBSTzFfQ09OVEVYVCwKICAqIFJNX0wzSU5JVF9VU0JfT1RHX0NPTlRFWFQsIFJNX0wzSU5JVF9YSFBJX0NPTlRFWFQKICAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0wzSU5JVF9CQU5LMV9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX0wzSU5JVF9CQU5LMV9TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fTDNJTklUX0JBTksxX01BU0sJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBSTV9NUFVfTVBVX0NPTlRFWFQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9NUFVfTDFfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fTVBVX0wxX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fTVBVX0wxX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUk1fTVBVX01QVV9DT05URVhUICovCi0jZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fTVBVX0wyX1NISUZUCQkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX01QVV9MMl9TSElGVAkJCQkJOQogI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX01QVV9MMl9NQVNLCQkJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IFJNX01QVV9NUFVfQ09OVEVYVCAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX01QVV9SQU1fU0hJRlQJCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX01QVV9SQU1fU0hJRlQJCQkJCTEwCiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fTVBVX1JBTV9NQVNLCQkJCQlCSVRGSUVMRCgxMCwgMTApCiAKIC8qCkBAIC02MzksMTQgKzYzOSwxNCBAQAogICogUk1fTDRQRVJfTUNCU1A0X0NPTlRFWFQsIFJNX0w0UEVSX01NQ1NEM19DT05URVhULCBSTV9MNFBFUl9NTUNTRDRfQ09OVEVYVCwKICAqIFJNX0w0UEVSX01NQ1NENV9DT05URVhULCBSTV9MNFBFUl9TTElNQlVTMl9DT05URVhULCBSTV9MNFNFQ19QS0FFSVAyOV9DT05URVhUCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9OT05SRVRBSU5FRF9CQU5LX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fTk9OUkVUQUlORURfQkFOS19TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fTk9OUkVUQUlORURfQkFOS19NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qCiAgKiBVc2VkIGJ5IFJNX0FCRV9ETUlDX0NPTlRFWFQsIFJNX0FCRV9NQ0JTUDFfQ09OVEVYVCwgUk1fQUJFX01DQlNQMl9DT05URVhULAogICogUk1fQUJFX01DQlNQM19DT05URVhULCBSTV9BQkVfUERNX0NPTlRFWFQsIFJNX0FCRV9TTElNQlVTX0NPTlRFWFQKICAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1BFUklIUE1FTV9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1BFUklIUE1FTV9TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fUEVSSUhQTUVNX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qCkBAIC02NTQsMzUgKzY1NCwzNSBAQAogICogUk1fTDRQRVJfVUFSVDJfQ09OVEVYVCwgUk1fTDRQRVJfVUFSVDNfQ09OVEVYVCwgUk1fTDRQRVJfVUFSVDRfQ09OVEVYVCwKICAqIFJNX0w0U0VDX0NSWVBUT0RNQV9DT05URVhUCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9SRVRBSU5FRF9CQU5LX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fUkVUQUlORURfQkFOS19TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fUkVUQUlORURfQkFOS19NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUk1fSVZBSERfU0wyX0NPTlRFWFQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9TTDJfTUVNX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1NMMl9NRU1fU0hJRlQJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9TTDJfTUVNX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUk1fSVZBSERfSVZBSERfQ09OVEVYVCAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1RDTTFfTUVNX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1RDTTFfTUVNX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fVENNMV9NRU1fTUFTSwkJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBSTV9JVkFIRF9JVkFIRF9DT05URVhUICovCi0jZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fVENNMl9NRU1fU0hJRlQJCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fVENNMl9NRU1fU0hJRlQJCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9UQ00yX01FTV9NQVNLCQkJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IFJNX1RFU0xBX1RFU0xBX0NPTlRFWFQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9URVNMQV9FRE1BX1NISUZUCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1RFU0xBX0VETUFfU0hJRlQJCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9URVNMQV9FRE1BX01BU0sJCQkJQklURklFTEQoMTAsIDEwKQogCiAvKiBVc2VkIGJ5IFJNX1RFU0xBX1RFU0xBX0NPTlRFWFQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9URVNMQV9MMV9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9URVNMQV9MMV9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1RFU0xBX0wxX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUk1fVEVTTEFfVEVTTEFfQ09OVEVYVCAqLwotI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1RFU0xBX0wyX1NISUZUCQkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9MT1NUTUVNX1RFU0xBX0wyX1NISUZUCQkJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fVEVTTEFfTDJfTUFTSwkJCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBSTV9XS1VQX1NBUlJBTV9DT05URVhUICovCi0jZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fV0tVUF9CQU5LX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX0xPU1RNRU1fV0tVUF9CQU5LX1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfTE9TVE1FTV9XS1VQX0JBTktfTUFTSwkJCQkJQklURklFTEQoOCwgOCkKIAogLyoKQEAgLTY5MCwxNjQgKzY5MCwxNjQgQEAKICAqIFBNX0FCRV9QV1JTVENUUkwsIFBNX0dGWF9QV1JTVENUUkwsIFBNX01QVV9QV1JTVENUUkwsIFBNX0NFRlVTRV9QV1JTVENUUkwsCiAgKiBQTV9EU1NfUFdSU1RDVFJMLCBQTV9MNFBFUl9QV1JTVENUUkwsIFBNX1RFU0xBX1BXUlNUQ1RSTCwgUE1fSVZBSERfUFdSU1RDVFJMCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTE9XUE9XRVJTVEFURUNIQU5HRV9TSElGVAkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9MT1dQT1dFUlNUQVRFQ0hBTkdFX1NISUZUCQkJCTQKICNkZWZpbmUgT01BUDQ0MzBfTE9XUE9XRVJTVEFURUNIQU5HRV9NQVNLCQkJCUJJVEZJRUxEKDQsIDQpCiAKIC8qIFVzZWQgYnkgUE1fQ09SRV9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTUVNT1JZQ0hBTkdFX1NISUZUCQkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9NRU1PUllDSEFOR0VfU0hJRlQJCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfTUVNT1JZQ0hBTkdFX01BU0sJCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qIFVzZWQgYnkgUFJNX01PREVNX0lGX0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTU9ERU1fUkVBRFlfU0hJRlQJCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX01PREVNX1JFQURZX1NISUZUCQkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX01PREVNX1JFQURZX01BU0sJCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUFJNX01PREVNX0lGX0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTU9ERU1fU0hVVERPV05fSVJRX1NISUZUCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX01PREVNX1NIVVRET1dOX0lSUV9TSElGVAkJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX01PREVNX1NIVVRET1dOX0lSUV9NQVNLCQkJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgUFJNX01PREVNX0lGX0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTU9ERU1fU0xFRVBfU1RfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9NT0RFTV9TTEVFUF9TVF9TSElGVAkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfTU9ERU1fU0xFRVBfU1RfTUFTSwkJCQkJQklURklFTEQoMTYsIDE2KQogCiAvKiBVc2VkIGJ5IFBSTV9NT0RFTV9JRl9DVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX01PREVNX1dBS0VfSVJRX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9NT0RFTV9XQUtFX0lSUV9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9NT0RFTV9XQUtFX0lSUV9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IFBNX01QVV9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTVBVX0wxX09OU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9NUFVfTDFfT05TVEFURV9TSElGVAkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfTVBVX0wxX09OU1RBVEVfTUFTSwkJCQkJQklURklFTEQoMTYsIDE3KQogCiAvKiBVc2VkIGJ5IFBNX01QVV9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTVBVX0wxX1JFVFNUQVRFX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9NUFVfTDFfUkVUU1RBVEVfU0hJRlQJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfTVBVX0wxX1JFVFNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUE1fTVBVX1BXUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTVBVX0wxX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX01QVV9MMV9TVEFURVNUX1NISUZUCQkJCQk0CiAjZGVmaW5lIE9NQVA0NDMwX01QVV9MMV9TVEFURVNUX01BU0sJCQkJCUJJVEZJRUxEKDQsIDUpCiAKIC8qIFVzZWQgYnkgUE1fTVBVX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9NUFVfTDJfT05TVEFURV9TSElGVAkJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVA0NDMwX01QVV9MMl9PTlNUQVRFX1NISUZUCQkJCQkxOAogI2RlZmluZSBPTUFQNDQzMF9NUFVfTDJfT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxOCwgMTkpCiAKIC8qIFVzZWQgYnkgUE1fTVBVX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9NUFVfTDJfUkVUU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX01QVV9MMl9SRVRTVEFURV9TSElGVAkJCQkJOQogI2RlZmluZSBPTUFQNDQzMF9NUFVfTDJfUkVUU1RBVEVfTUFTSwkJCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBQTV9NUFVfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9NUFVfTDJfU1RBVEVTVF9TSElGVAkJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfTVBVX0wyX1NUQVRFU1RfU0hJRlQJCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfTVBVX0wyX1NUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoNiwgNykKIAogLyogVXNlZCBieSBQTV9NUFVfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX01QVV9SQU1fT05TVEFURV9TSElGVAkJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX01QVV9SQU1fT05TVEFURV9TSElGVAkJCQkJMjAKICNkZWZpbmUgT01BUDQ0MzBfTVBVX1JBTV9PTlNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDIwLCAyMSkKIAogLyogVXNlZCBieSBQTV9NUFVfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX01QVV9SQU1fUkVUU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDEwKQorI2RlZmluZSBPTUFQNDQzMF9NUFVfUkFNX1JFVFNUQVRFX1NISUZUCQkJCQkxMAogI2RlZmluZSBPTUFQNDQzMF9NUFVfUkFNX1JFVFNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBQTV9NUFVfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9NUFVfUkFNX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX01QVV9SQU1fU1RBVEVTVF9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9NUFVfUkFNX1NUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoOCwgOSkKIAogLyogVXNlZCBieSBQUk1fUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfTVBVX1NFQ1VSSVRZX1ZJT0xfUlNUX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX01QVV9TRUNVUklUWV9WSU9MX1JTVF9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX01QVV9TRUNVUklUWV9WSU9MX1JTVF9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgUFJNX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX01QVV9XRFRfUlNUX1NISUZUCQkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9NUFVfV0RUX1JTVF9TSElGVAkJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9NUFVfV0RUX1JTVF9NQVNLCQkJCQlCSVRGSUVMRCgzLCAzKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9OT05SRVRBSU5FRF9CQU5LX09OU1RBVEVfU0hJRlQJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVA0NDMwX05PTlJFVEFJTkVEX0JBTktfT05TVEFURV9TSElGVAkJCQkxOAogI2RlZmluZSBPTUFQNDQzMF9OT05SRVRBSU5FRF9CQU5LX09OU1RBVEVfTUFTSwkJCQlCSVRGSUVMRCgxOCwgMTkpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX05PTlJFVEFJTkVEX0JBTktfUkVUU1RBVEVfU0hJRlQJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9OT05SRVRBSU5FRF9CQU5LX1JFVFNUQVRFX1NISUZUCQkJOQogI2RlZmluZSBPTUFQNDQzMF9OT05SRVRBSU5FRF9CQU5LX1JFVFNUQVRFX01BU0sJCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9QV1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX05PTlJFVEFJTkVEX0JBTktfU1RBVEVTVF9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9OT05SRVRBSU5FRF9CQU5LX1NUQVRFU1RfU0hJRlQJCQkJNgogI2RlZmluZSBPTUFQNDQzMF9OT05SRVRBSU5FRF9CQU5LX1NUQVRFU1RfTUFTSwkJCQlCSVRGSUVMRCg2LCA3KQogCiAvKiBVc2VkIGJ5IFBNX0NPUkVfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX09DUF9OUkVUX0JBTktfT05TVEFURV9TSElGVAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfT0NQX05SRVRfQkFOS19PTlNUQVRFX1NISUZUCQkJCTI0CiAjZGVmaW5lIE9NQVA0NDMwX09DUF9OUkVUX0JBTktfT05TVEFURV9NQVNLCQkJCUJJVEZJRUxEKDI0LCAyNSkKIAogLyogVXNlZCBieSBQTV9DT1JFX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9PQ1BfTlJFVF9CQU5LX1JFVFNUQVRFX1NISUZUCQkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9PQ1BfTlJFVF9CQU5LX1JFVFNUQVRFX1NISUZUCQkJCTEyCiAjZGVmaW5lIE9NQVA0NDMwX09DUF9OUkVUX0JBTktfUkVUU1RBVEVfTUFTSwkJCQlCSVRGSUVMRCgxMiwgMTIpCiAKIC8qIFVzZWQgYnkgUE1fQ09SRV9QV1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX09DUF9OUkVUX0JBTktfU1RBVEVTVF9TSElGVAkJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDQ0MzBfT0NQX05SRVRfQkFOS19TVEFURVNUX1NISUZUCQkJCTEyCiAjZGVmaW5lIE9NQVA0NDMwX09DUF9OUkVUX0JBTktfU1RBVEVTVF9NQVNLCQkJCUJJVEZJRUxEKDEyLCAxMykKIAogLyoKICAqIFVzZWQgYnkgUFJNX1ZDX1ZBTF9DTURfVkREX0NPUkVfTCwgUFJNX1ZDX1ZBTF9DTURfVkREX0lWQV9MLAogICogUFJNX1ZDX1ZBTF9DTURfVkREX01QVV9MCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT0ZGX1NISUZUCQkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfT0ZGX1NISUZUCQkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9PRkZfTUFTSwkJCQkJCUJJVEZJRUxEKDAsIDcpCiAKIC8qIFVzZWQgYnkgUFJNX0xET19CQU5ER0FQX0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT0ZGX0VOQUJMRV9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfT0ZGX0VOQUJMRV9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9PRkZfRU5BQkxFX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qCiAgKiBVc2VkIGJ5IFBSTV9WQ19WQUxfQ01EX1ZERF9DT1JFX0wsIFBSTV9WQ19WQUxfQ01EX1ZERF9JVkFfTCwKICAqIFBSTV9WQ19WQUxfQ01EX1ZERF9NUFVfTAogICovCi0jZGVmaW5lIE9NQVA0NDMwX09OX1NISUZUCQkJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX09OX1NISUZUCQkJCQkJMjQKICNkZWZpbmUgT01BUDQ0MzBfT05fTUFTSwkJCQkJCUJJVEZJRUxEKDI0LCAzMSkKIAogLyoKICAqIFVzZWQgYnkgUFJNX1ZDX1ZBTF9DTURfVkREX0NPUkVfTCwgUFJNX1ZDX1ZBTF9DTURfVkREX0lWQV9MLAogICogUFJNX1ZDX1ZBTF9DTURfVkREX01QVV9MCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT05MUF9TSElGVAkJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9PTkxQX1NISUZUCQkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfT05MUF9NQVNLCQkJCQkJQklURklFTEQoMTYsIDIzKQogCiAvKiBVc2VkIGJ5IFBSTV9MRE9fQUJCX0lWQV9DVFJMLCBQUk1fTERPX0FCQl9NUFVfQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9PUFBfQ0hBTkdFX1NISUZUCQkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9PUFBfQ0hBTkdFX1NISUZUCQkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX09QUF9DSEFOR0VfTUFTSwkJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQUk1fTERPX0FCQl9JVkFfQ1RSTCwgUFJNX0xET19BQkJfTVBVX0NUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfT1BQX1NFTF9TSElGVAkJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX09QUF9TRUxfU0hJRlQJCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX09QUF9TRUxfTUFTSwkJCQkJCUJJVEZJRUxEKDAsIDEpCiAKIC8qIFVzZWQgYnkgUFJNX1NSQU1fQ09VTlQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUENIQVJHRUNOVF9WQUxVRV9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUENIQVJHRUNOVF9WQUxVRV9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9QQ0hBUkdFQ05UX1ZBTFVFX01BU0sJCQkJCUJJVEZJRUxEKDAsIDUpCiAKIC8qIFVzZWQgYnkgUFJNX1BTQ09OX0NPVU5UICovCi0jZGVmaW5lIE9NQVA0NDMwX1BDSEFSR0VfVElNRV9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUENIQVJHRV9USU1FX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1BDSEFSR0VfVElNRV9NQVNLCQkJCQlCSVRGSUVMRCgwLCA3KQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUEVSSVBITUVNX09OU1RBVEVfU0hJRlQJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX1BFUklQSE1FTV9PTlNUQVRFX1NISUZUCQkJCTIwCiAjZGVmaW5lIE9NQVA0NDMwX1BFUklQSE1FTV9PTlNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDIwLCAyMSkKIAogLyogVXNlZCBieSBQTV9BQkVfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1BFUklQSE1FTV9SRVRTVEFURV9TSElGVAkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfUEVSSVBITUVNX1JFVFNUQVRFX1NISUZUCQkJCTEwCiAjZGVmaW5lIE9NQVA0NDMwX1BFUklQSE1FTV9SRVRTVEFURV9NQVNLCQkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBQTV9BQkVfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9QRVJJUEhNRU1fU1RBVEVTVF9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9QRVJJUEhNRU1fU1RBVEVTVF9TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1BFUklQSE1FTV9TVEFURVNUX01BU0sJCQkJCUJJVEZJRUxEKDgsIDkpCiAKIC8qIFVzZWQgYnkgUFJNX1BIQVNFMV9DTkRQICovCi0jZGVmaW5lIE9NQVA0NDMwX1BIQVNFMV9DTkRQX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9QSEFTRTFfQ05EUF9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9QSEFTRTFfQ05EUF9NQVNLCQkJCQlCSVRGSUVMRCgwLCAzMSkKIAogLyogVXNlZCBieSBQUk1fUEhBU0UyQV9DTkRQICovCi0jZGVmaW5lIE9NQVA0NDMwX1BIQVNFMkFfQ05EUF9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUEhBU0UyQV9DTkRQX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1BIQVNFMkFfQ05EUF9NQVNLCQkJCQlCSVRGSUVMRCgwLCAzMSkKIAogLyogVXNlZCBieSBQUk1fUEhBU0UyQl9DTkRQICovCi0jZGVmaW5lIE9NQVA0NDMwX1BIQVNFMkJfQ05EUF9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUEhBU0UyQl9DTkRQX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1BIQVNFMkJfQ05EUF9NQVNLCQkJCQlCSVRGSUVMRCgwLCAzMSkKIAogLyogVXNlZCBieSBQUk1fUFNDT05fQ09VTlQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUE9OT1VUXzJfUEdPT0RJTl9USU1FX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1BPTk9VVF8yX1BHT09ESU5fVElNRV9TSElGVAkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1BPTk9VVF8yX1BHT09ESU5fVElNRV9NQVNLCQkJCUJJVEZJRUxEKDgsIDE1KQogCiAvKgpAQCAtODU2LDcgKzg1Niw3IEBACiAgKiBQTV9DRUZVU0VfUFdSU1RDVFJMLCBQTV9EU1NfUFdSU1RDVFJMLCBQTV9MNFBFUl9QV1JTVENUUkwsCiAgKiBQTV9URVNMQV9QV1JTVENUUkwsIFBNX0lWQUhEX1BXUlNUQ1RSTAogICovCi0jZGVmaW5lIE9NQVA0NDMwX1BPV0VSU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1BPV0VSU1RBVEVfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfUE9XRVJTVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAxKQogCiAvKgpAQCAtODY0LDM1ICs4NjQsMzUgQEAKICAqIFBNX0FCRV9QV1JTVFNULCBQTV9HRlhfUFdSU1RTVCwgUE1fTVBVX1BXUlNUU1QsIFBNX0NFRlVTRV9QV1JTVFNULAogICogUE1fRFNTX1BXUlNUU1QsIFBNX0w0UEVSX1BXUlNUU1QsIFBNX1RFU0xBX1BXUlNUU1QsIFBNX0lWQUhEX1BXUlNUU1QKICAqLwotI2RlZmluZSBPTUFQNDQzMF9QT1dFUlNUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1BPV0VSU1RBVEVTVF9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9QT1dFUlNUQVRFU1RfTUFTSwkJCQkJQklURklFTEQoMCwgMSkKIAogLyogVXNlZCBieSBQUk1fUFdSUkVRQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9QV1JSRVFfQ09ORF9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUFdSUkVRX0NPTkRfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfUFdSUkVRX0NPTkRfTUFTSwkJCQkJQklURklFTEQoMCwgMSkKIAogLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0NIQU5ORUwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUkFDRU5fVkREX0NPUkVfTF9TSElGVAkJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfUkFDRU5fVkREX0NPUkVfTF9TSElGVAkJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9SQUNFTl9WRERfQ09SRV9MX01BU0sJCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX0NGR19DSEFOTkVMICovCi0jZGVmaW5lIE9NQVA0NDMwX1JBQ0VOX1ZERF9JVkFfTF9TSElGVAkJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX1JBQ0VOX1ZERF9JVkFfTF9TSElGVAkJCQkJMTEKICNkZWZpbmUgT01BUDQ0MzBfUkFDRU5fVkREX0lWQV9MX01BU0sJCQkJCUJJVEZJRUxEKDExLCAxMSkKIAogLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0NIQU5ORUwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUkFDRU5fVkREX01QVV9MX1NISUZUCQkJCQkoMSA8PCAyMCkKKyNkZWZpbmUgT01BUDQ0MzBfUkFDRU5fVkREX01QVV9MX1NISUZUCQkJCQkyMAogI2RlZmluZSBPTUFQNDQzMF9SQUNFTl9WRERfTVBVX0xfTUFTSwkJCQkJQklURklFTEQoMjAsIDIwKQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfQ0hBTk5FTCAqLwotI2RlZmluZSBPTUFQNDQzMF9SQUNfVkREX0NPUkVfTF9TSElGVAkJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfUkFDX1ZERF9DT1JFX0xfU0hJRlQJCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfUkFDX1ZERF9DT1JFX0xfTUFTSwkJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0NIQU5ORUwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUkFDX1ZERF9JVkFfTF9TSElGVAkJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX1JBQ19WRERfSVZBX0xfU0hJRlQJCQkJCTEwCiAjZGVmaW5lIE9NQVA0NDMwX1JBQ19WRERfSVZBX0xfTUFTSwkJCQkJQklURklFTEQoMTAsIDEwKQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfQ0hBTk5FTCAqLwotI2RlZmluZSBPTUFQNDQzMF9SQUNfVkREX01QVV9MX1NISUZUCQkJCQkoMSA8PCAxOSkKKyNkZWZpbmUgT01BUDQ0MzBfUkFDX1ZERF9NUFVfTF9TSElGVAkJCQkJMTkKICNkZWZpbmUgT01BUDQ0MzBfUkFDX1ZERF9NUFVfTF9NQVNLCQkJCQlCSVRGSUVMRCgxOSwgMTkpCiAKIC8qCkBAIC05MDAsNyArOTAwLDcgQEAKICAqIFBSTV9WT0xUU0VUVVBfSVZBX09GRiwgUFJNX1ZPTFRTRVRVUF9JVkFfUkVUX1NMRUVQLCBQUk1fVk9MVFNFVFVQX01QVV9PRkYsCiAgKiBQUk1fVk9MVFNFVFVQX01QVV9SRVRfU0xFRVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9SQU1QX0RPV05fQ09VTlRfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9SQU1QX0RPV05fQ09VTlRfU0hJRlQJCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX1JBTVBfRE9XTl9DT1VOVF9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMjEpCiAKIC8qCkBAIC05MDgsNyArOTA4LDcgQEAKICAqIFBSTV9WT0xUU0VUVVBfSVZBX09GRiwgUFJNX1ZPTFRTRVRVUF9JVkFfUkVUX1NMRUVQLCBQUk1fVk9MVFNFVFVQX01QVV9PRkYsCiAgKiBQUk1fVk9MVFNFVFVQX01QVV9SRVRfU0xFRVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9SQU1QX0RPV05fUFJFU0NBTF9TSElGVAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfUkFNUF9ET1dOX1BSRVNDQUxfU0hJRlQJCQkJMjQKICNkZWZpbmUgT01BUDQ0MzBfUkFNUF9ET1dOX1BSRVNDQUxfTUFTSwkJCQkJQklURklFTEQoMjQsIDI1KQogCiAvKgpAQCAtOTE2LDcgKzkxNiw3IEBACiAgKiBQUk1fVk9MVFNFVFVQX0lWQV9PRkYsIFBSTV9WT0xUU0VUVVBfSVZBX1JFVF9TTEVFUCwgUFJNX1ZPTFRTRVRVUF9NUFVfT0ZGLAogICogUFJNX1ZPTFRTRVRVUF9NUFVfUkVUX1NMRUVQCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUkFNUF9VUF9DT1VOVF9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfUkFNUF9VUF9DT1VOVF9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9SQU1QX1VQX0NPVU5UX01BU0sJCQkJCUJJVEZJRUxEKDAsIDUpCiAKIC8qCkBAIC05MjQsMTI4MiArOTI0LDEyODIgQEAKICAqIFBSTV9WT0xUU0VUVVBfSVZBX09GRiwgUFJNX1ZPTFRTRVRVUF9JVkFfUkVUX1NMRUVQLCBQUk1fVk9MVFNFVFVQX01QVV9PRkYsCiAgKiBQUk1fVk9MVFNFVFVQX01QVV9SRVRfU0xFRVAKICAqLwotI2RlZmluZSBPTUFQNDQzMF9SQU1QX1VQX1BSRVNDQUxfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1JBTVBfVVBfUFJFU0NBTF9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9SQU1QX1VQX1BSRVNDQUxfTUFTSwkJCQkJQklURklFTEQoOCwgOSkKIAogLyogVXNlZCBieSBQUk1fVkNfQ0ZHX0NIQU5ORUwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUkFWX1ZERF9DT1JFX0xfU0hJRlQJCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1JBVl9WRERfQ09SRV9MX1NISUZUCQkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1JBVl9WRERfQ09SRV9MX01BU0sJCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX0NGR19DSEFOTkVMICovCi0jZGVmaW5lIE9NQVA0NDMwX1JBVl9WRERfSVZBX0xfU0hJRlQJCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX1JBVl9WRERfSVZBX0xfU0hJRlQJCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfUkFWX1ZERF9JVkFfTF9NQVNLCQkJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfQ0hBTk5FTCAqLwotI2RlZmluZSBPTUFQNDQzMF9SQVZfVkREX01QVV9MX1NISUZUCQkJCQkoMSA8PCAxOCkKKyNkZWZpbmUgT01BUDQ0MzBfUkFWX1ZERF9NUFVfTF9TSElGVAkJCQkJMTgKICNkZWZpbmUgT01BUDQ0MzBfUkFWX1ZERF9NUFVfTF9NQVNLCQkJCQlCSVRGSUVMRCgxOCwgMTgpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX1ZBTF9CWVBBU1MgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUkVHQUREUl9TSElGVAkJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1JFR0FERFJfU0hJRlQJCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1JFR0FERFJfTUFTSwkJCQkJCUJJVEZJRUxEKDgsIDE1KQogCiAvKgogICogVXNlZCBieSBQUk1fVkNfVkFMX0NNRF9WRERfQ09SRV9MLCBQUk1fVkNfVkFMX0NNRF9WRERfSVZBX0wsCiAgKiBQUk1fVkNfVkFMX0NNRF9WRERfTVBVX0wKICAqLwotI2RlZmluZSBPTUFQNDQzMF9SRVRfU0hJRlQJCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9SRVRfU0hJRlQJCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1JFVF9NQVNLCQkJCQkJQklURklFTEQoOCwgMTUpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1JFVEFJTkVEX0JBTktfT05TVEFURV9TSElGVAkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfUkVUQUlORURfQkFOS19PTlNUQVRFX1NISUZUCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX1JFVEFJTkVEX0JBTktfT05TVEFURV9NQVNLCQkJCUJJVEZJRUxEKDE2LCAxNykKIAogLyogVXNlZCBieSBQTV9MNFBFUl9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUkVUQUlORURfQkFOS19SRVRTVEFURV9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9SRVRBSU5FRF9CQU5LX1JFVFNUQVRFX1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfUkVUQUlORURfQkFOS19SRVRTVEFURV9NQVNLCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9SRVRBSU5FRF9CQU5LX1NUQVRFU1RfU0hJRlQJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfUkVUQUlORURfQkFOS19TVEFURVNUX1NISUZUCQkJCTQKICNkZWZpbmUgT01BUDQ0MzBfUkVUQUlORURfQkFOS19TVEFURVNUX01BU0sJCQkJQklURklFTEQoNCwgNSkKIAogLyoKICAqIFVzZWQgYnkgUFJNX0xET19TUkFNX0NPUkVfQ1RSTCwgUFJNX0xET19TUkFNX0lWQV9DVFJMLAogICogUFJNX0xET19TUkFNX01QVV9DVFJMCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUkVUTU9ERV9FTkFCTEVfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1JFVE1PREVfRU5BQkxFX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1JFVE1PREVfRU5BQkxFX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUkVWSVNJT05fUFJNICovCi0jZGVmaW5lIE9NQVA0NDMwX1JFVl9TSElGVAkJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1JFVl9TSElGVAkJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfUkVWX01BU0sJCQkJCQlCSVRGSUVMRCgwLCA3KQogCiAvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9SU1RDVFJMLCBSTV9URVNMQV9SU1RDVFJMLCBSTV9JVkFIRF9SU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1JTVDFfU0hJRlQJCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9SU1QxX1NISUZUCQkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9SU1QxX01BU0sJCQkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9SU1RTVCwgUk1fVEVTTEFfUlNUU1QsIFJNX0lWQUhEX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX1JTVDFTVF9TSElGVAkJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1JTVDFTVF9TSElGVAkJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfUlNUMVNUX01BU0sJCQkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9SU1RDVFJMLCBSTV9URVNMQV9SU1RDVFJMLCBSTV9JVkFIRF9SU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1JTVDJfU0hJRlQJCQkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9SU1QyX1NISUZUCQkJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9SU1QyX01BU0sJCQkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9SU1RTVCwgUk1fVEVTTEFfUlNUU1QsIFJNX0lWQUhEX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX1JTVDJTVF9TSElGVAkJCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1JTVDJTVF9TSElGVAkJCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfUlNUMlNUX01BU0sJCQkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9SU1RDVFJMLCBSTV9JVkFIRF9SU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1JTVDNfU0hJRlQJCQkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9SU1QzX1NISUZUCQkJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9SU1QzX01BU0sJCQkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFJNX0RVQ0FUSV9SU1RTVCwgUk1fSVZBSERfUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUlNUM1NUX1NISUZUCQkJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfUlNUM1NUX1NISUZUCQkJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9SU1QzU1RfTUFTSwkJCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgUFJNX1JTVFRJTUUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUlNUVElNRTFfU0hJRlQJCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9SU1RUSU1FMV9TSElGVAkJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfUlNUVElNRTFfTUFTSwkJCQkJCUJJVEZJRUxEKDAsIDkpCiAKIC8qIFVzZWQgYnkgUFJNX1JTVFRJTUUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfUlNUVElNRTJfU0hJRlQJCQkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfUlNUVElNRTJfU0hJRlQJCQkJCQkxMAogI2RlZmluZSBPTUFQNDQzMF9SU1RUSU1FMl9NQVNLCQkJCQkJQklURklFTEQoMTAsIDE0KQogCiAvKiBVc2VkIGJ5IFBSTV9SU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1JTVF9HTE9CQUxfQ09MRF9TV19TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9SU1RfR0xPQkFMX0NPTERfU1dfU0hJRlQJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9SU1RfR0xPQkFMX0NPTERfU1dfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBSTV9SU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1JTVF9HTE9CQUxfV0FSTV9TV19TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9SU1RfR0xPQkFMX1dBUk1fU1dfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9SU1RfR0xPQkFMX1dBUk1fU1dfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfQ0hBTk5FTCAqLwotI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfQ09SRV9MX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfQ09SRV9MX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1NBX1ZERF9DT1JFX0xfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyogUmVuYW1lZCBmcm9tIFNBX1ZERF9DT1JFX0wgVXNlZCBieSBQUk1fVkNfU01QU19TQSAqLwotI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfQ09SRV9MXzBfNl9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfQ09SRV9MXzBfNl9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1NBX1ZERF9DT1JFX0xfMF82X01BU0sJCQkJCUJJVEZJRUxEKDAsIDYpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX0NGR19DSEFOTkVMICovCi0jZGVmaW5lIE9NQVA0NDMwX1NBX1ZERF9JVkFfTF9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfU0FfVkREX0lWQV9MX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1NBX1ZERF9JVkFfTF9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBSZW5hbWVkIGZyb20gU0FfVkREX0lWQV9MIFVzZWQgYnkgUFJNX1ZDX1NNUFNfU0EgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU0FfVkREX0lWQV9MX1BSTV9WQ19TTVBTX1NBX1NISUZUCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfU0FfVkREX0lWQV9MX1BSTV9WQ19TTVBTX1NBX1NISUZUCQkJOAogI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfSVZBX0xfUFJNX1ZDX1NNUFNfU0FfTUFTSwkJCUJJVEZJRUxEKDgsIDE0KQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfQ0hBTk5FTCAqLwotI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfTVBVX0xfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfTVBVX0xfU0hJRlQJCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX1NBX1ZERF9NUFVfTF9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMTYpCiAKIC8qIFJlbmFtZWQgZnJvbSBTQV9WRERfTVBVX0wgVXNlZCBieSBQUk1fVkNfU01QU19TQSAqLwotI2RlZmluZSBPTUFQNDQzMF9TQV9WRERfTVBVX0xfUFJNX1ZDX1NNUFNfU0FfU0hJRlQJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfU0FfVkREX01QVV9MX1BSTV9WQ19TTVBTX1NBX1NISUZUCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfU0FfVkREX01QVV9MX1BSTV9WQ19TTVBTX1NBX01BU0sJCQlCSVRGSUVMRCgxNiwgMjIpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX0NGR19JMkNfQ0xLICovCi0jZGVmaW5lIE9NQVA0NDMwX1NDTEhfU0hJRlQJCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9TQ0xIX1NISUZUCQkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9TQ0xIX01BU0sJCQkJCQlCSVRGSUVMRCgwLCA3KQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfSTJDX0NMSyAqLwotI2RlZmluZSBPTUFQNDQzMF9TQ0xMX1NISUZUCQkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfU0NMTF9TSElGVAkJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfU0NMTF9NQVNLCQkJCQkJQklURklFTEQoOCwgMTUpCiAKIC8qIFVzZWQgYnkgUFJNX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX1NFQ1VSRV9XRFRfUlNUX1NISUZUCQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9TRUNVUkVfV0RUX1JTVF9TSElGVAkJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9TRUNVUkVfV0RUX1JTVF9NQVNLCQkJCQlCSVRGSUVMRCg0LCA0KQogCiAvKiBVc2VkIGJ5IFBNX0lWQUhEX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9TTDJfTUVNX09OU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDE4KQorI2RlZmluZSBPTUFQNDQzMF9TTDJfTUVNX09OU1RBVEVfU0hJRlQJCQkJCTE4CiAjZGVmaW5lIE9NQVA0NDMwX1NMMl9NRU1fT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxOCwgMTkpCiAKIC8qIFVzZWQgYnkgUE1fSVZBSERfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1NMMl9NRU1fUkVUU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX1NMMl9NRU1fUkVUU1RBVEVfU0hJRlQJCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfU0wyX01FTV9SRVRTVEFURV9NQVNLCQkJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IFBNX0lWQUhEX1BXUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU0wyX01FTV9TVEFURVNUX1NISUZUCQkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9TTDJfTUVNX1NUQVRFU1RfU0hJRlQJCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfU0wyX01FTV9TVEFURVNUX01BU0sJCQkJCUJJVEZJRUxEKDYsIDcpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX1ZBTF9CWVBBU1MgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU0xBVkVBRERSX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9TTEFWRUFERFJfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfU0xBVkVBRERSX01BU0sJCQkJCQlCSVRGSUVMRCgwLCA2KQogCiAvKiBVc2VkIGJ5IFBSTV9MRE9fQUJCX0lWQV9TRVRVUCwgUFJNX0xET19BQkJfTVBVX1NFVFVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1NMRUVQX1JCQl9TRUxfU0hJRlQJCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1NMRUVQX1JCQl9TRUxfU0hJRlQJCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfU0xFRVBfUkJCX1NFTF9NQVNLCQkJCQlCSVRGSUVMRCgzLCAzKQogCiAvKiBVc2VkIGJ5IFBSTV9TUkFNX0NPVU5UICovCi0jZGVmaW5lIE9NQVA0NDMwX1NMUENOVF9WQUxVRV9TSElGVAkJCQkJKDEgPDwgMTYpCisjZGVmaW5lIE9NQVA0NDMwX1NMUENOVF9WQUxVRV9TSElGVAkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfU0xQQ05UX1ZBTFVFX01BU0sJCQkJCUJJVEZJRUxEKDE2LCAyMykKIAogLyogVXNlZCBieSBQUk1fVlBfQ09SRV9WU1RFUE1BWCwgUFJNX1ZQX0lWQV9WU1RFUE1BWCwgUFJNX1ZQX01QVV9WU1RFUE1BWCAqLwotI2RlZmluZSBPTUFQNDQzMF9TTVBTV0FJVFRJTUVNQVhfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1NNUFNXQUlUVElNRU1BWF9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9TTVBTV0FJVFRJTUVNQVhfTUFTSwkJCQkJQklURklFTEQoOCwgMjMpCiAKIC8qIFVzZWQgYnkgUFJNX1ZQX0NPUkVfVlNURVBNSU4sIFBSTV9WUF9JVkFfVlNURVBNSU4sIFBSTV9WUF9NUFVfVlNURVBNSU4gKi8KLSNkZWZpbmUgT01BUDQ0MzBfU01QU1dBSVRUSU1FTUlOX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9TTVBTV0FJVFRJTUVNSU5fU0hJRlQJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfU01QU1dBSVRUSU1FTUlOX01BU0sJCQkJCUJJVEZJRUxEKDgsIDIzKQogCiAvKiBVc2VkIGJ5IFBSTV9MRE9fQUJCX0lWQV9TRVRVUCwgUFJNX0xET19BQkJfTVBVX1NFVFVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1NSMkVOX1NISUZUCQkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfU1IyRU5fU0hJRlQJCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1NSMkVOX01BU0sJCQkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBSTV9MRE9fQUJCX0lWQV9DVFJMLCBQUk1fTERPX0FCQl9NUFVfQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9TUjJfSU5fVFJBTlNJVElPTl9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9TUjJfSU5fVFJBTlNJVElPTl9TSElGVAkJCQk2CiAjZGVmaW5lIE9NQVA0NDMwX1NSMl9JTl9UUkFOU0lUSU9OX01BU0sJCQkJCUJJVEZJRUxEKDYsIDYpCiAKIC8qIFVzZWQgYnkgUFJNX0xET19BQkJfSVZBX0NUUkwsIFBSTV9MRE9fQUJCX01QVV9DVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1NSMl9TVEFUVVNfU0hJRlQJCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1NSMl9TVEFUVVNfU0hJRlQJCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfU1IyX1NUQVRVU19NQVNLCQkJCQlCSVRGSUVMRCgzLCA0KQogCiAvKiBVc2VkIGJ5IFBSTV9MRE9fQUJCX0lWQV9TRVRVUCwgUFJNX0xET19BQkJfTVBVX1NFVFVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1NSMl9XVENOVF9WQUxVRV9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfU1IyX1dUQ05UX1ZBTFVFX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1NSMl9XVENOVF9WQUxVRV9NQVNLCQkJCQlCSVRGSUVMRCg4LCAxNSkKIAogLyoKICAqIFVzZWQgYnkgUFJNX0xET19TUkFNX0NPUkVfQ1RSTCwgUFJNX0xET19TUkFNX0lWQV9DVFJMLAogICogUFJNX0xET19TUkFNX01QVV9DVFJMCiAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU1JBTUxET19TVEFUVVNfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1NSQU1MRE9fU1RBVFVTX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1NSQU1MRE9fU1RBVFVTX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qCiAgKiBVc2VkIGJ5IFBSTV9MRE9fU1JBTV9DT1JFX0NUUkwsIFBSTV9MRE9fU1JBTV9JVkFfQ1RSTCwKICAqIFBSTV9MRE9fU1JBTV9NUFVfQ1RSTAogICovCi0jZGVmaW5lIE9NQVA0NDMwX1NSQU1fSU5fVFJBTlNJVElPTl9TSElGVAkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9TUkFNX0lOX1RSQU5TSVRJT05fU0hJRlQJCQkJOQogI2RlZmluZSBPTUFQNDQzMF9TUkFNX0lOX1RSQU5TSVRJT05fTUFTSwkJCQlCSVRGSUVMRCg5LCA5KQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19DRkdfSTJDX01PREUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU1JNT0RFRU5fU0hJRlQJCQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9TUk1PREVFTl9TSElGVAkJCQkJCTQKICNkZWZpbmUgT01BUDQ0MzBfU1JNT0RFRU5fTUFTSwkJCQkJCUJJVEZJRUxEKDQsIDQpCiAKIC8qIFVzZWQgYnkgUFJNX1ZPTFRTRVRVUF9XQVJNUkVTRVQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU1RBQkxFX0NPVU5UX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9TVEFCTEVfQ09VTlRfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfU1RBQkxFX0NPVU5UX01BU0sJCQkJCUJJVEZJRUxEKDAsIDUpCiAKIC8qIFVzZWQgYnkgUFJNX1ZPTFRTRVRVUF9XQVJNUkVTRVQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfU1RBQkxFX1BSRVNDQUxfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1NUQUJMRV9QUkVTQ0FMX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1NUQUJMRV9QUkVTQ0FMX01BU0sJCQkJCUJJVEZJRUxEKDgsIDkpCiAKIC8qIFVzZWQgYnkgUE1fSVZBSERfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1RDTTFfTUVNX09OU1RBVEVfU0hJRlQJCQkJCSgxIDw8IDIwKQorI2RlZmluZSBPTUFQNDQzMF9UQ00xX01FTV9PTlNUQVRFX1NISUZUCQkJCQkyMAogI2RlZmluZSBPTUFQNDQzMF9UQ00xX01FTV9PTlNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDIwLCAyMSkKIAogLyogVXNlZCBieSBQTV9JVkFIRF9QV1JTVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVENNMV9NRU1fUkVUU1RBVEVfU0hJRlQJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX1RDTTFfTUVNX1JFVFNUQVRFX1NISUZUCQkJCTEwCiAjZGVmaW5lIE9NQVA0NDMwX1RDTTFfTUVNX1JFVFNUQVRFX01BU0sJCQkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBQTV9JVkFIRF9QV1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX1RDTTFfTUVNX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1RDTTFfTUVNX1NUQVRFU1RfU0hJRlQJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfVENNMV9NRU1fU1RBVEVTVF9NQVNLCQkJCQlCSVRGSUVMRCg4LCA5KQogCiAvKiBVc2VkIGJ5IFBNX0lWQUhEX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9UQ00yX01FTV9PTlNUQVRFX1NISUZUCQkJCQkoMSA8PCAyMikKKyNkZWZpbmUgT01BUDQ0MzBfVENNMl9NRU1fT05TVEFURV9TSElGVAkJCQkJMjIKICNkZWZpbmUgT01BUDQ0MzBfVENNMl9NRU1fT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgyMiwgMjMpCiAKIC8qIFVzZWQgYnkgUE1fSVZBSERfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1RDTTJfTUVNX1JFVFNUQVRFX1NISUZUCQkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9UQ00yX01FTV9SRVRTVEFURV9TSElGVAkJCQkxMQogI2RlZmluZSBPTUFQNDQzMF9UQ00yX01FTV9SRVRTVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxMSwgMTEpCiAKIC8qIFVzZWQgYnkgUE1fSVZBSERfUFdSU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9UQ00yX01FTV9TVEFURVNUX1NISUZUCQkJCQkoMSA8PCAxMCkKKyNkZWZpbmUgT01BUDQ0MzBfVENNMl9NRU1fU1RBVEVTVF9TSElGVAkJCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfVENNMl9NRU1fU1RBVEVTVF9NQVNLCQkJCQlCSVRGSUVMRCgxMCwgMTEpCiAKIC8qIFVzZWQgYnkgUk1fVEVTTEFfUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVEVTTEFTU19FTVVfUlNUU1RfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfVEVTTEFTU19FTVVfUlNUU1RfU0hJRlQJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9URVNMQVNTX0VNVV9SU1RTVF9NQVNLCQkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFJNX1RFU0xBX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0RTUF9FTVVfUkVRX1JTVFNUX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0RTUF9FTVVfUkVRX1JTVFNUX1NISUZUCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfRFNQX0VNVV9SRVFfUlNUU1RfTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQogCiAvKiBVc2VkIGJ5IFBNX1RFU0xBX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9URVNMQV9FRE1BX09OU1RBVEVfU0hJRlQJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0VETUFfT05TVEFURV9TSElGVAkJCQkyMAogI2RlZmluZSBPTUFQNDQzMF9URVNMQV9FRE1BX09OU1RBVEVfTUFTSwkJCQlCSVRGSUVMRCgyMCwgMjEpCiAKIC8qIFVzZWQgYnkgUE1fVEVTTEFfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0VETUFfUkVUU1RBVEVfU0hJRlQJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0VETUFfUkVUU1RBVEVfU0hJRlQJCQkJMTAKICNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfRURNQV9SRVRTVEFURV9NQVNLCQkJCUJJVEZJRUxEKDEwLCAxMCkKIAogLyogVXNlZCBieSBQTV9URVNMQV9QV1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0VETUFfU1RBVEVTVF9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9URVNMQV9FRE1BX1NUQVRFU1RfU0hJRlQJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9URVNMQV9FRE1BX1NUQVRFU1RfTUFTSwkJCQlCSVRGSUVMRCg4LCA5KQogCiAvKiBVc2VkIGJ5IFBNX1RFU0xBX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9URVNMQV9MMV9PTlNUQVRFX1NISUZUCQkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfTDFfT05TVEFURV9TSElGVAkJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfTDFfT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMTcpCiAKIC8qIFVzZWQgYnkgUE1fVEVTTEFfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wxX1JFVFNUQVRFX1NISUZUCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wxX1JFVFNUQVRFX1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfTDFfUkVUU1RBVEVfTUFTSwkJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBQTV9URVNMQV9QV1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wxX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDQpCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wxX1NUQVRFU1RfU0hJRlQJCQkJCTQKICNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfTDFfU1RBVEVTVF9NQVNLCQkJCQlCSVRGSUVMRCg0LCA1KQogCiAvKiBVc2VkIGJ5IFBNX1RFU0xBX1BXUlNUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9URVNMQV9MMl9PTlNUQVRFX1NISUZUCQkJCQkoMSA8PCAxOCkKKyNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfTDJfT05TVEFURV9TSElGVAkJCQkJMTgKICNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfTDJfT05TVEFURV9NQVNLCQkJCQlCSVRGSUVMRCgxOCwgMTkpCiAKIC8qIFVzZWQgYnkgUE1fVEVTTEFfUFdSU1RDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wyX1JFVFNUQVRFX1NISUZUCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wyX1JFVFNUQVRFX1NISUZUCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfTDJfUkVUU1RBVEVfTUFTSwkJCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBQTV9URVNMQV9QV1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wyX1NUQVRFU1RfU0hJRlQJCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX1RFU0xBX0wyX1NUQVRFU1RfU0hJRlQJCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfVEVTTEFfTDJfU1RBVEVTVF9NQVNLCQkJCQlCSVRGSUVMRCg2LCA3KQogCiAvKiBVc2VkIGJ5IFBSTV9WUF9DT1JFX1ZMSU1JVFRPLCBQUk1fVlBfSVZBX1ZMSU1JVFRPLCBQUk1fVlBfTVBVX1ZMSU1JVFRPICovCi0jZGVmaW5lIE9NQVA0NDMwX1RJTUVPVVRfU0hJRlQJCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9USU1FT1VUX1NISUZUCQkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9USU1FT1VUX01BU0sJCQkJCQlCSVRGSUVMRCgwLCAxNSkKIAogLyogVXNlZCBieSBQUk1fVlBfQ09SRV9DT05GSUcsIFBSTV9WUF9JVkFfQ09ORklHLCBQUk1fVlBfTVBVX0NPTkZJRyAqLwotI2RlZmluZSBPTUFQNDQzMF9USU1FT1VURU5fU0hJRlQJCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1RJTUVPVVRFTl9TSElGVAkJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9USU1FT1VURU5fTUFTSwkJCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1RSQU5TSVRJT05fRU5fU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1RSQU5TSVRJT05fRU5fU0hJRlQJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfVFJBTlNJVElPTl9FTl9NQVNLCQkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfRFVDQVRJLCBQUk1fSVJRU1RBVFVTX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9UUkFOU0lUSU9OX1NUX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9UUkFOU0lUSU9OX1NUX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1RSQU5TSVRJT05fU1RfTUFTSwkJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBQUk1fVkNfVkFMX0JZUEFTUyAqLwotI2RlZmluZSBPTUFQNDQzMF9WQUxJRF9TSElGVAkJCQkJCSgxIDw8IDI0KQorI2RlZmluZSBPTUFQNDQzMF9WQUxJRF9TSElGVAkJCQkJCTI0CiAjZGVmaW5lIE9NQVA0NDMwX1ZBTElEX01BU0sJCQkJCQlCSVRGSUVMRCgyNCwgMjQpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZDX0JZUEFTU0FDS19FTl9TSElGVAkJCQkJKDEgPDwgMTQpCisjZGVmaW5lIE9NQVA0NDMwX1ZDX0JZUEFTU0FDS19FTl9TSElGVAkJCQkJMTQKICNkZWZpbmUgT01BUDQ0MzBfVkNfQllQQVNTQUNLX0VOX01BU0sJCQkJCUJJVEZJRUxEKDE0LCAxNCkKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVkNfQllQQVNTQUNLX1NUX1NISUZUCQkJCQkoMSA8PCAxNCkKKyNkZWZpbmUgT01BUDQ0MzBfVkNfQllQQVNTQUNLX1NUX1NISUZUCQkJCQkxNAogI2RlZmluZSBPTUFQNDQzMF9WQ19CWVBBU1NBQ0tfU1RfTUFTSwkJCQkJQklURklFTEQoMTQsIDE0KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9WQ19JVkFfVlBBQ0tfRU5fU0hJRlQJCQkJCSgxIDw8IDMwKQorI2RlZmluZSBPTUFQNDQzMF9WQ19JVkFfVlBBQ0tfRU5fU0hJRlQJCQkJCTMwCiAjZGVmaW5lIE9NQVA0NDMwX1ZDX0lWQV9WUEFDS19FTl9NQVNLCQkJCQlCSVRGSUVMRCgzMCwgMzApCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZDX0lWQV9WUEFDS19TVF9TSElGVAkJCQkJKDEgPDwgMzApCisjZGVmaW5lIE9NQVA0NDMwX1ZDX0lWQV9WUEFDS19TVF9TSElGVAkJCQkJMzAKICNkZWZpbmUgT01BUDQ0MzBfVkNfSVZBX1ZQQUNLX1NUX01BU0sJCQkJCUJJVEZJRUxEKDMwLCAzMCkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX01QVV8yICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZDX01QVV9WUEFDS19FTl9TSElGVAkJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfVkNfTVBVX1ZQQUNLX0VOX1NISUZUCQkJCQk2CiAjZGVmaW5lIE9NQVA0NDMwX1ZDX01QVV9WUEFDS19FTl9NQVNLCQkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfTVBVXzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVkNfTVBVX1ZQQUNLX1NUX1NISUZUCQkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9WQ19NUFVfVlBBQ0tfU1RfU0hJRlQJCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfVkNfTVBVX1ZQQUNLX1NUX01BU0sJCQkJCUJJVEZJRUxEKDYsIDYpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZDX1JBRVJSX0VOX1NISUZUCQkJCQkoMSA8PCAxMikKKyNkZWZpbmUgT01BUDQ0MzBfVkNfUkFFUlJfRU5fU0hJRlQJCQkJCTEyCiAjZGVmaW5lIE9NQVA0NDMwX1ZDX1JBRVJSX0VOX01BU0sJCQkJCUJJVEZJRUxEKDEyLCAxMikKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVkNfUkFFUlJfU1RfU0hJRlQJCQkJCSgxIDw8IDEyKQorI2RlZmluZSBPTUFQNDQzMF9WQ19SQUVSUl9TVF9TSElGVAkJCQkJMTIKICNkZWZpbmUgT01BUDQ0MzBfVkNfUkFFUlJfU1RfTUFTSwkJCQkJQklURklFTEQoMTIsIDEyKQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9WQ19TQUVSUl9FTl9TSElGVAkJCQkJKDEgPDwgMTEpCisjZGVmaW5lIE9NQVA0NDMwX1ZDX1NBRVJSX0VOX1NISUZUCQkJCQkxMQogI2RlZmluZSBPTUFQNDQzMF9WQ19TQUVSUl9FTl9NQVNLCQkJCQlCSVRGSUVMRCgxMSwgMTEpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZDX1NBRVJSX1NUX1NISUZUCQkJCQkoMSA8PCAxMSkKKyNkZWZpbmUgT01BUDQ0MzBfVkNfU0FFUlJfU1RfU0hJRlQJCQkJCTExCiAjZGVmaW5lIE9NQVA0NDMwX1ZDX1NBRVJSX1NUX01BU0sJCQkJCUJJVEZJRUxEKDExLCAxMSkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVkNfVE9FUlJfRU5fU0hJRlQJCQkJCSgxIDw8IDEzKQorI2RlZmluZSBPTUFQNDQzMF9WQ19UT0VSUl9FTl9TSElGVAkJCQkJMTMKICNkZWZpbmUgT01BUDQ0MzBfVkNfVE9FUlJfRU5fTUFTSwkJCQkJQklURklFTEQoMTMsIDEzKQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfRFVDQVRJLCBQUk1fSVJRU1RBVFVTX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9WQ19UT0VSUl9TVF9TSElGVAkJCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVA0NDMwX1ZDX1RPRVJSX1NUX1NISUZUCQkJCQkxMwogI2RlZmluZSBPTUFQNDQzMF9WQ19UT0VSUl9TVF9NQVNLCQkJCQlCSVRGSUVMRCgxMywgMTMpCiAKIC8qIFVzZWQgYnkgUFJNX1ZQX0NPUkVfVkxJTUlUVE8sIFBSTV9WUF9JVkFfVkxJTUlUVE8sIFBSTV9WUF9NUFVfVkxJTUlUVE8gKi8KLSNkZWZpbmUgT01BUDQ0MzBfVkRETUFYX1NISUZUCQkJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX1ZERE1BWF9TSElGVAkJCQkJCTI0CiAjZGVmaW5lIE9NQVA0NDMwX1ZERE1BWF9NQVNLCQkJCQkJQklURklFTEQoMjQsIDMxKQogCiAvKiBVc2VkIGJ5IFBSTV9WUF9DT1JFX1ZMSU1JVFRPLCBQUk1fVlBfSVZBX1ZMSU1JVFRPLCBQUk1fVlBfTVBVX1ZMSU1JVFRPICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZERE1JTl9TSElGVAkJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9WRERNSU5fU0hJRlQJCQkJCQkxNgogI2RlZmluZSBPTUFQNDQzMF9WRERNSU5fTUFTSwkJCQkJCUJJVEZJRUxEKDE2LCAyMykKIAogLyogVXNlZCBieSBQUk1fVk9MVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVkREX0NPUkVfSTJDX0RJU0FCTEVfU0hJRlQJCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX1ZERF9DT1JFX0kyQ19ESVNBQkxFX1NISUZUCQkJCTEyCiAjZGVmaW5lIE9NQVA0NDMwX1ZERF9DT1JFX0kyQ19ESVNBQkxFX01BU0sJCQkJQklURklFTEQoMTIsIDEyKQogCiAvKiBVc2VkIGJ5IFBSTV9SU1RTVCAqLwotI2RlZmluZSBPTUFQNDQzMF9WRERfQ09SRV9WT0xUX01HUl9SU1RfU0hJRlQJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfVkREX0NPUkVfVk9MVF9NR1JfUlNUX1NISUZUCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfVkREX0NPUkVfVk9MVF9NR1JfUlNUX01BU0sJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBQUk1fVk9MVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVkREX0lWQV9JMkNfRElTQUJMRV9TSElGVAkJCQkoMSA8PCAxNCkKKyNkZWZpbmUgT01BUDQ0MzBfVkREX0lWQV9JMkNfRElTQUJMRV9TSElGVAkJCQkxNAogI2RlZmluZSBPTUFQNDQzMF9WRERfSVZBX0kyQ19ESVNBQkxFX01BU0sJCQkJQklURklFTEQoMTQsIDE0KQogCiAvKiBVc2VkIGJ5IFBSTV9WT0xUQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9WRERfSVZBX1BSRVNFTkNFX1NISUZUCQkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9WRERfSVZBX1BSRVNFTkNFX1NISUZUCQkJCQk5CiAjZGVmaW5lIE9NQVA0NDMwX1ZERF9JVkFfUFJFU0VOQ0VfTUFTSwkJCQkJQklURklFTEQoOSwgOSkKIAogLyogVXNlZCBieSBQUk1fUlNUU1QgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVkREX0lWQV9WT0xUX01HUl9SU1RfU0hJRlQJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDQ0MzBfVkREX0lWQV9WT0xUX01HUl9SU1RfU0hJRlQJCQkJNwogI2RlZmluZSBPTUFQNDQzMF9WRERfSVZBX1ZPTFRfTUdSX1JTVF9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUFJNX1ZPTFRDVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZERF9NUFVfSTJDX0RJU0FCTEVfU0hJRlQJCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVA0NDMwX1ZERF9NUFVfSTJDX0RJU0FCTEVfU0hJRlQJCQkJMTMKICNkZWZpbmUgT01BUDQ0MzBfVkREX01QVV9JMkNfRElTQUJMRV9NQVNLCQkJCUJJVEZJRUxEKDEzLCAxMykKIAogLyogVXNlZCBieSBQUk1fVk9MVENUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVkREX01QVV9QUkVTRU5DRV9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfVkREX01QVV9QUkVTRU5DRV9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9WRERfTVBVX1BSRVNFTkNFX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUFJNX1JTVFNUICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZERF9NUFVfVk9MVF9NR1JfUlNUX1NISUZUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX1ZERF9NUFVfVk9MVF9NR1JfUlNUX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfVkREX01QVV9WT0xUX01HUl9SU1RfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBSTV9WQ19WQUxfU01QU19SQV9WT0wgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVk9MUkFfVkREX0NPUkVfTF9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfVk9MUkFfVkREX0NPUkVfTF9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9WT0xSQV9WRERfQ09SRV9MX01BU0sJCQkJCUJJVEZJRUxEKDAsIDcpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX1ZBTF9TTVBTX1JBX1ZPTCAqLwotI2RlZmluZSBPTUFQNDQzMF9WT0xSQV9WRERfSVZBX0xfU0hJRlQJCQkJCSgxIDw8IDgpCisjZGVmaW5lIE9NQVA0NDMwX1ZPTFJBX1ZERF9JVkFfTF9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9WT0xSQV9WRERfSVZBX0xfTUFTSwkJCQkJQklURklFTEQoOCwgMTUpCiAKIC8qIFVzZWQgYnkgUFJNX1ZDX1ZBTF9TTVBTX1JBX1ZPTCAqLwotI2RlZmluZSBPTUFQNDQzMF9WT0xSQV9WRERfTVBVX0xfU0hJRlQJCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9WT0xSQV9WRERfTVBVX0xfU0hJRlQJCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX1ZPTFJBX1ZERF9NUFVfTF9NQVNLCQkJCQlCSVRGSUVMRCgxNiwgMjMpCiAKIC8qIFVzZWQgYnkgUFJNX1ZQX0NPUkVfQ09ORklHLCBQUk1fVlBfSVZBX0NPTkZJRywgUFJNX1ZQX01QVV9DT05GSUcgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBFTkFCTEVfU0hJRlQJCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9WUEVOQUJMRV9TSElGVAkJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfVlBFTkFCTEVfTUFTSwkJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUFJNX1ZQX0NPUkVfU1RBVFVTLCBQUk1fVlBfSVZBX1NUQVRVUywgUFJNX1ZQX01QVV9TVEFUVVMgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBJTklETEVfU0hJRlQJCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9WUElOSURMRV9TSElGVAkJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfVlBJTklETEVfTUFTSwkJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUFJNX1ZQX0NPUkVfVk9MVEFHRSwgUFJNX1ZQX0lWQV9WT0xUQUdFLCBQUk1fVlBfTVBVX1ZPTFRBR0UgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBWT0xUQUdFX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9WUFZPTFRBR0VfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfVlBWT0xUQUdFX01BU0sJCQkJCQlCSVRGSUVMRCgwLCA3KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX0VRVkFMVUVfRU5fU0hJRlQJCQkJKDEgPDwgMjApCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfRVFWQUxVRV9FTl9TSElGVAkJCQkyMAogI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX0VRVkFMVUVfRU5fTUFTSwkJCQlCSVRGSUVMRCgyMCwgMjApCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfRVFWQUxVRV9TVF9TSElGVAkJCQkoMSA8PCAyMCkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9FUVZBTFVFX1NUX1NISUZUCQkJCTIwCiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfRVFWQUxVRV9TVF9NQVNLCQkJCUJJVEZJRUxEKDIwLCAyMCkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9NQVhWRERfRU5fU0hJRlQJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUFYVkREX0VOX1NISUZUCQkJCTE4CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUFYVkREX0VOX01BU0sJCQkJCUJJVEZJRUxEKDE4LCAxOCkKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9NQVhWRERfU1RfU0hJRlQJCQkJKDEgPDwgMTgpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUFYVkREX1NUX1NISUZUCQkJCTE4CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUFYVkREX1NUX01BU0sJCQkJCUJJVEZJRUxEKDE4LCAxOCkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9NSU5WRERfRU5fU0hJRlQJCQkJKDEgPDwgMTcpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUlOVkREX0VOX1NISUZUCQkJCTE3CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUlOVkREX0VOX01BU0sJCQkJCUJJVEZJRUxEKDE3LCAxNykKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9NSU5WRERfU1RfU0hJRlQJCQkJKDEgPDwgMTcpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUlOVkREX1NUX1NISUZUCQkJCTE3CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTUlOVkREX1NUX01BU0sJCQkJCUJJVEZJRUxEKDE3LCAxNykKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9OT1NNUFNBQ0tfRU5fU0hJRlQJCQkJKDEgPDwgMTkpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTk9TTVBTQUNLX0VOX1NISUZUCQkJCTE5CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfTk9TTVBTQUNLX0VOX01BU0sJCQkJQklURklFTEQoMTksIDE5KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfRFVDQVRJLCBQUk1fSVJRU1RBVFVTX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX05PU01QU0FDS19TVF9TSElGVAkJCQkoMSA8PCAxOSkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9OT1NNUFNBQ0tfU1RfU0hJRlQJCQkJMTkKICNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9OT1NNUFNBQ0tfU1RfTUFTSwkJCQlCSVRGSUVMRCgxOSwgMTkpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfT1BQQ0hBTkdFRE9ORV9FTl9TSElGVAkJCQkoMSA8PCAxNikKKyNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9PUFBDSEFOR0VET05FX0VOX1NISUZUCQkJCTE2CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfT1BQQ0hBTkdFRE9ORV9FTl9NQVNLCQkJCUJJVEZJRUxEKDE2LCAxNikKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9PUFBDSEFOR0VET05FX1NUX1NISUZUCQkJCSgxIDw8IDE2KQorI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX09QUENIQU5HRURPTkVfU1RfU0hJRlQJCQkJMTYKICNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9PUFBDSEFOR0VET05FX1NUX01BU0sJCQkJQklURklFTEQoMTYsIDE2KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX1RSQU5YRE9ORV9FTl9TSElGVAkJCQkoMSA8PCAyMSkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9UUkFOWERPTkVfRU5fU0hJRlQJCQkJMjEKICNkZWZpbmUgT01BUDQ0MzBfVlBfQ09SRV9UUkFOWERPTkVfRU5fTUFTSwkJCQlCSVRGSUVMRCgyMSwgMjEpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZQX0NPUkVfVFJBTlhET05FX1NUX1NISUZUCQkJCSgxIDw8IDIxKQorI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX1RSQU5YRE9ORV9TVF9TSElGVAkJCQkyMQogI2RlZmluZSBPTUFQNDQzMF9WUF9DT1JFX1RSQU5YRE9ORV9TVF9NQVNLCQkJCUJJVEZJRUxEKDIxLCAyMSkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX0VRVkFMVUVfRU5fU0hJRlQJCQkJKDEgPDwgMjgpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9FUVZBTFVFX0VOX1NISUZUCQkJCTI4CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9FUVZBTFVFX0VOX01BU0sJCQkJCUJJVEZJRUxEKDI4LCAyOCkKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX0VRVkFMVUVfU1RfU0hJRlQJCQkJKDEgPDwgMjgpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9FUVZBTFVFX1NUX1NISUZUCQkJCTI4CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9FUVZBTFVFX1NUX01BU0sJCQkJCUJJVEZJRUxEKDI4LCAyOCkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX01BWFZERF9FTl9TSElGVAkJCQkJKDEgPDwgMjYpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9NQVhWRERfRU5fU0hJRlQJCQkJCTI2CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9NQVhWRERfRU5fTUFTSwkJCQkJQklURklFTEQoMjYsIDI2KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfRFVDQVRJLCBQUk1fSVJRU1RBVFVTX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfTUFYVkREX1NUX1NISUZUCQkJCQkoMSA8PCAyNikKKyNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX01BWFZERF9TVF9TSElGVAkJCQkJMjYKICNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX01BWFZERF9TVF9NQVNLCQkJCQlCSVRGSUVMRCgyNiwgMjYpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9NSU5WRERfRU5fU0hJRlQJCQkJCSgxIDw8IDI1KQorI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfTUlOVkREX0VOX1NISUZUCQkJCQkyNQogI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfTUlOVkREX0VOX01BU0sJCQkJCUJJVEZJRUxEKDI1LCAyNSkKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX01JTlZERF9TVF9TSElGVAkJCQkJKDEgPDwgMjUpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9NSU5WRERfU1RfU0hJRlQJCQkJCTI1CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9NSU5WRERfU1RfTUFTSwkJCQkJQklURklFTEQoMjUsIDI1KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfRFVDQVRJLCBQUk1fSVJRRU5BQkxFX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfTk9TTVBTQUNLX0VOX1NISUZUCQkJCSgxIDw8IDI3KQorI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfTk9TTVBTQUNLX0VOX1NISUZUCQkJCTI3CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9OT1NNUFNBQ0tfRU5fTUFTSwkJCQlCSVRGSUVMRCgyNywgMjcpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19EVUNBVEksIFBSTV9JUlFTVEFUVVNfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9OT1NNUFNBQ0tfU1RfU0hJRlQJCQkJKDEgPDwgMjcpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9OT1NNUFNBQ0tfU1RfU0hJRlQJCQkJMjcKICNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX05PU01QU0FDS19TVF9NQVNLCQkJCUJJVEZJRUxEKDI3LCAyNykKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX0RVQ0FUSSwgUFJNX0lSUUVOQUJMRV9NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX09QUENIQU5HRURPTkVfRU5fU0hJRlQJCQkJKDEgPDwgMjQpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9PUFBDSEFOR0VET05FX0VOX1NISUZUCQkJCTI0CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9PUFBDSEFOR0VET05FX0VOX01BU0sJCQkJQklURklFTEQoMjQsIDI0KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfRFVDQVRJLCBQUk1fSVJRU1RBVFVTX01QVSAqLwotI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfT1BQQ0hBTkdFRE9ORV9TVF9TSElGVAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX09QUENIQU5HRURPTkVfU1RfU0hJRlQJCQkJMjQKICNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX09QUENIQU5HRURPTkVfU1RfTUFTSwkJCQlCSVRGSUVMRCgyNCwgMjQpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9EVUNBVEksIFBSTV9JUlFFTkFCTEVfTVBVICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9UUkFOWERPTkVfRU5fU0hJRlQJCQkJKDEgPDwgMjkpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX0lWQV9UUkFOWERPTkVfRU5fU0hJRlQJCQkJMjkKICNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX1RSQU5YRE9ORV9FTl9NQVNLCQkJCUJJVEZJRUxEKDI5LCAyOSkKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX0RVQ0FUSSwgUFJNX0lSUVNUQVRVU19NUFUgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX1RSQU5YRE9ORV9TVF9TSElGVAkJCQkoMSA8PCAyOSkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfSVZBX1RSQU5YRE9ORV9TVF9TSElGVAkJCQkyOQogI2RlZmluZSBPTUFQNDQzMF9WUF9JVkFfVFJBTlhET05FX1NUX01BU0sJCQkJQklURklFTEQoMjksIDI5KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfTVBVXzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX0VRVkFMVUVfRU5fU0hJRlQJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX0VRVkFMVUVfRU5fU0hJRlQJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfRVFWQUxVRV9FTl9NQVNLCQkJCQlCSVRGSUVMRCg0LCA0KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfTVBVXzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX0VRVkFMVUVfU1RfU0hJRlQJCQkJKDEgPDwgNCkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX0VRVkFMVUVfU1RfU0hJRlQJCQkJNAogI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfRVFWQUxVRV9TVF9NQVNLCQkJCQlCSVRGSUVMRCg0LCA0KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfTVBVXzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX01BWFZERF9FTl9TSElGVAkJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX01BWFZERF9FTl9TSElGVAkJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTUFYVkREX0VOX01BU0sJCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19NUFVfMiAqLwotI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTUFYVkREX1NUX1NISUZUCQkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTUFYVkREX1NUX1NISUZUCQkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9NQVhWRERfU1RfTUFTSwkJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX01QVV8yICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9NSU5WRERfRU5fU0hJRlQJCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9NSU5WRERfRU5fU0hJRlQJCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX01JTlZERF9FTl9NQVNLCQkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfTVBVXzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX01JTlZERF9TVF9TSElGVAkJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX01JTlZERF9TVF9TSElGVAkJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTUlOVkREX1NUX01BU0sJCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUFJNX0lSUUVOQUJMRV9NUFVfMiAqLwotI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTk9TTVBTQUNLX0VOX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9OT1NNUFNBQ0tfRU5fU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfTk9TTVBTQUNLX0VOX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQUk1fSVJRU1RBVFVTX01QVV8yICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9OT1NNUFNBQ0tfU1RfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX05PU01QU0FDS19TVF9TSElGVAkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9OT1NNUFNBQ0tfU1RfTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFFTkFCTEVfTVBVXzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX09QUENIQU5HRURPTkVfRU5fU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX09QUENIQU5HRURPTkVfRU5fU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfT1BQQ0hBTkdFRE9ORV9FTl9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUFJNX0lSUVNUQVRVU19NUFVfMiAqLwotI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfT1BQQ0hBTkdFRE9ORV9TVF9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfT1BQQ0hBTkdFRE9ORV9TVF9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9PUFBDSEFOR0VET05FX1NUX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQUk1fSVJRRU5BQkxFX01QVV8yICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9UUkFOWERPTkVfRU5fU0hJRlQJCQkJKDEgPDwgNSkKKyNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX1RSQU5YRE9ORV9FTl9TSElGVAkJCQk1CiAjZGVmaW5lIE9NQVA0NDMwX1ZQX01QVV9UUkFOWERPTkVfRU5fTUFTSwkJCQlCSVRGSUVMRCg1LCA1KQogCiAvKiBVc2VkIGJ5IFBSTV9JUlFTVEFUVVNfTVBVXzIgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX1RSQU5YRE9ORV9TVF9TSElGVAkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9WUF9NUFVfVFJBTlhET05FX1NUX1NISUZUCQkJCTUKICNkZWZpbmUgT01BUDQ0MzBfVlBfTVBVX1RSQU5YRE9ORV9TVF9NQVNLCQkJCUJJVEZJRUxEKDUsIDUpCiAKIC8qIFVzZWQgYnkgUFJNX1NSQU1fQ09VTlQgKi8KLSNkZWZpbmUgT01BUDQ0MzBfVlNFVFVQQ05UX1ZBTFVFX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9WU0VUVVBDTlRfVkFMVUVfU0hJRlQJCQkJCTgKICNkZWZpbmUgT01BUDQ0MzBfVlNFVFVQQ05UX1ZBTFVFX01BU0sJCQkJCUJJVEZJRUxEKDgsIDE1KQogCiAvKiBVc2VkIGJ5IFBSTV9WUF9DT1JFX1ZTVEVQTUFYLCBQUk1fVlBfSVZBX1ZTVEVQTUFYLCBQUk1fVlBfTVBVX1ZTVEVQTUFYICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZTVEVQTUFYX1NISUZUCQkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfVlNURVBNQVhfU0hJRlQJCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1ZTVEVQTUFYX01BU0sJCQkJCQlCSVRGSUVMRCgwLCA3KQogCiAvKiBVc2VkIGJ5IFBSTV9WUF9DT1JFX1ZTVEVQTUlOLCBQUk1fVlBfSVZBX1ZTVEVQTUlOLCBQUk1fVlBfTVBVX1ZTVEVQTUlOICovCi0jZGVmaW5lIE9NQVA0NDMwX1ZTVEVQTUlOX1NISUZUCQkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfVlNURVBNSU5fU0hJRlQJCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1ZTVEVQTUlOX01BU0sJCQkJCQlCSVRGSUVMRCgwLCA3KQogCiAvKiBVc2VkIGJ5IFBSTV9NT0RFTV9JRl9DVFJMICovCi0jZGVmaW5lIE9NQVA0NDMwX1dBS0VfTU9ERU1fU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dBS0VfTU9ERU1fU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0FLRV9NT0RFTV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0RTU19EU1NfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ESVNQQ19EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ESVNQQ19EVUNBVElfU0hJRlQJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RJU1BDX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fRFNTX0RTU19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RJU1BDX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RJU1BDX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRElTUENfTVBVX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fRFNTX0RTU19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RJU1BDX1NETUFfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ESVNQQ19TRE1BX1NISUZUCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ESVNQQ19TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRElTUENfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ESVNQQ19URVNMQV9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRElTUENfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9ETUlDX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1JQ19ETUFfU0RNQV9TSElGVAkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RNSUNfRE1BX1NETUFfU0hJRlQJCQkJNwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RNSUNfRE1BX1NETUFfTUFTSwkJCQlCSVRGSUVMRCg3LCA3KQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9ETUlDX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1JQ19ETUFfVEVTTEFfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETUlDX0RNQV9URVNMQV9TSElGVAkJCQk2CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1JQ19ETUFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9ETUlDX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1JQ19JUlFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1JQ19JUlFfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETUlDX0lSUV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9ETUlDX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1JQ19JUlFfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETUlDX0lSUV9URVNMQV9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1JQ19JUlFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0RNVElNRVIxMF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RNVElNRVIxMF9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSMTBfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSMTBfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9ETVRJTUVSMTFfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSMTFfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjExX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjExX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfRE1USU1FUjExX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjExX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RNVElNRVIxMV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RNVElNRVIxMV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0RNVElNRVIyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjJfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjJfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSMl9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0RNVElNRVIzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjNfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjNfRFVDQVRJX1NISUZUCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSM19EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0RNVElNRVIzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjNfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjNfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSM19NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0RNVElNRVI0X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjRfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjRfRFVDQVRJX1NISUZUCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSNF9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0RNVElNRVI0X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjRfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjRfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSNF9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0RNVElNRVI5X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjlfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjlfRFVDQVRJX1NISUZUCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSOV9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0RNVElNRVI5X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjlfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRE1USU1FUjlfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9ETVRJTUVSOV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0RTU19EU1NfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9EU0kxX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCA1KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTFfRFVDQVRJX1NISUZUCQkJCTUKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9EU0kxX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDUsIDUpCiAKIC8qIFVzZWQgYnkgUE1fRFNTX0RTU19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTFfTVBVX1NISUZUCQkJCQkoMSA8PCA0KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTFfTVBVX1NISUZUCQkJCQk0CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRFNJMV9NUFVfTUFTSwkJCQkJQklURklFTEQoNCwgNCkKIAogLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRFNJMV9TRE1BX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRFNJMV9TRE1BX1NISUZUCQkJCTcKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9EU0kxX1NETUFfTUFTSwkJCQkJQklURklFTEQoNywgNykKIAogLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRFNJMV9URVNMQV9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTFfVEVTTEFfU0hJRlQJCQkJNgogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBNX0RTU19EU1NfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9EU0kyX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCA5KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTJfRFVDQVRJX1NISUZUCQkJCTkKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9EU0kyX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDksIDkpCiAKIC8qIFVzZWQgYnkgUE1fRFNTX0RTU19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTJfTVBVX1NISUZUCQkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTJfTVBVX1NISUZUCQkJCQk4CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRFNJMl9NUFVfTUFTSwkJCQkJQklURklFTEQoOCwgOCkKIAogLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRFNJMl9TRE1BX1NISUZUCQkJCSgxIDw8IDExKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTJfU0RNQV9TSElGVAkJCQkxMQogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTJfU0RNQV9NQVNLCQkJCQlCSVRGSUVMRCgxMSwgMTEpCiAKIC8qIFVzZWQgYnkgUE1fRFNTX0RTU19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTJfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMTApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfRFNJMl9URVNMQV9TSElGVAkJCQkxMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0RTSTJfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgxMCwgMTApCiAKIC8qIFVzZWQgYnkgUE1fV0tVUF9HUElPMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8xX0lSUTFfRFVDQVRJX1NISUZUCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPMV9JUlExX0RVQ0FUSV9TSElGVAkJCTEKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPMV9JUlExX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fV0tVUF9HUElPMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8xX0lSUTFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzFfSVJRMV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8xX0lSUTFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9XS1VQX0dQSU8xX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzFfSVJRMl9URVNMQV9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8xX0lSUTJfVEVTTEFfU0hJRlQJCQkJNgogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8xX0lSUTJfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0dQSU8yX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzJfSVJRMV9EVUNBVElfU0hJRlQJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8yX0lSUTFfRFVDQVRJX1NISUZUCQkJMQogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8yX0lSUTFfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPMl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8yX0lSUTFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzJfSVJRMV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8yX0lSUTFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPMl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8yX0lSUTJfVEVTTEFfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPMl9JUlEyX1RFU0xBX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPMl9JUlEyX1RFU0xBX01BU0sJCQkJQklURklFTEQoNiwgNikKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPM19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8zX0lSUTFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzNfSVJRMV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8zX0lSUTFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPM19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU8zX0lSUTJfVEVTTEFfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPM19JUlEyX1RFU0xBX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPM19JUlEyX1RFU0xBX01BU0sJCQkJQklURklFTEQoNiwgNikKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPNF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU80X0lSUTFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzRfSVJRMV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU80X0lSUTFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPNF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU80X0lSUTJfVEVTTEFfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPNF9JUlEyX1RFU0xBX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPNF9JUlEyX1RFU0xBX01BU0sJCQkJQklURklFTEQoNiwgNikKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPNV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU81X0lSUTFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzVfSVJRMV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU81X0lSUTFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPNV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU81X0lSUTJfVEVTTEFfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPNV9JUlEyX1RFU0xBX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPNV9JUlEyX1RFU0xBX01BU0sJCQkJQklURklFTEQoNiwgNikKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPNl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU82X0lSUTFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfR1BJTzZfSVJRMV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU82X0lSUTFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9HUElPNl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0dQSU82X0lSUTJfVEVTTEFfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPNl9JUlEyX1RFU0xBX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9HUElPNl9JUlEyX1RFU0xBX01BU0sJCQkJQklURklFTEQoNiwgNikKIAogLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSERNSURNQV9TRE1BX1NISUZUCQkJCSgxIDw8IDE5KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hETUlETUFfU0RNQV9TSElGVAkJCQkxOQogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hETUlETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDE5LCAxOSkKIAogLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSERNSUlSUV9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMTMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSERNSUlSUV9EVUNBVElfU0hJRlQJCQkJMTMKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9IRE1JSVJRX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEzLCAxMykKIAogLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSERNSUlSUV9NUFVfU0hJRlQJCQkJKDEgPDwgMTIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSERNSUlSUV9NUFVfU0hJRlQJCQkJMTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9IRE1JSVJRX01QVV9NQVNLCQkJCUJJVEZJRUxEKDEyLCAxMikKIAogLyogVXNlZCBieSBQTV9EU1NfRFNTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSERNSUlSUV9URVNMQV9TSElGVAkJCQkoMSA8PCAxNCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9IRE1JSVJRX1RFU0xBX1NISUZUCQkJCTE0CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSERNSUlSUV9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDE0LCAxNCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9IRUNDMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hFQ0MxX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hFQ0MxX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSEVDQzFfTVBVX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfSEVDQzJfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9IRUNDMl9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9IRUNDMl9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hFQ0MyX01QVV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9IU0lfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9IU0lfRFNQX1RFU0xBX1NISUZUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSFNJX0RTUF9URVNMQV9TSElGVAkJCQk2CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSFNJX0RTUF9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDYsIDYpCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX0hTSV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hTSV9NQ1VfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSFNJX01DVV9EVUNBVElfU0hJRlQJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0hTSV9NQ1VfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfSFNJX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSFNJX01DVV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9IU0lfTUNVX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSFNJX01DVV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0kyQzFfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkMxX0RNQV9TRE1BX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMV9ETUFfU0RNQV9TSElGVAkJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMV9ETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfSTJDMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzFfSVJRX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzFfSVJRX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMV9JUlFfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9JMkMxX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMV9JUlFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMV9JUlFfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkMxX0lSUV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0kyQzJfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkMyX0RNQV9TRE1BX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMl9ETUFfU0RNQV9TSElGVAkJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMl9ETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfSTJDMl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzJfSVJRX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzJfSVJRX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMl9JUlFfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9JMkMyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMl9JUlFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDMl9JUlFfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkMyX0lSUV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0kyQzNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkMzX0RNQV9TRE1BX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDM19ETUFfU0RNQV9TSElGVAkJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDM19ETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfSTJDM19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzNfSVJRX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzNfSVJRX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDM19JUlFfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9JMkMzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDM19JUlFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDM19JUlFfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkMzX0lSUV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0kyQzRfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkM0X0RNQV9TRE1BX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDNF9ETUFfU0RNQV9TSElGVAkJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDNF9ETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfSTJDNF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzRfSVJRX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzRfSVJRX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDNF9JUlFfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9JMkM0X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDNF9JUlFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDNF9JUlFfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkM0X0lSUV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX0kyQzVfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9JMkM1X0RNQV9TRE1BX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDNV9ETUFfU0RNQV9TSElGVAkJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDNV9ETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfSTJDNV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzVfSVJRX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX0kyQzVfSVJRX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfSTJDNV9JUlFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9XS1VQX0tFWUJPQVJEX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfS0VZQk9BUkRfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfS0VZQk9BUkRfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9LRVlCT0FSRF9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9NQ0FTUF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMV9ETUFfU0RNQV9TSElGVAkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMV9ETUFfU0RNQV9TSElGVAkJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AxX0RNQV9TRE1BX01BU0sJCQkJQklURklFTEQoNywgNykKIAogLyogVXNlZCBieSBQTV9BQkVfTUNBU1BfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDFfRE1BX1RFU0xBX1NISUZUCQkJCSgxIDw8IDYpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AxX0RNQV9URVNMQV9TSElGVAkJCQk2CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AxX0RNQV9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDYsIDYpCiAKIC8qIFVzZWQgYnkgUE1fQUJFX01DQVNQX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AxX0lSUV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDFfSVJRX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AxX0lSUV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9NQ0FTUF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMV9JUlFfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDFfSVJRX1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDFfSVJRX1RFU0xBX01BU0sJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NQ0FTUDJfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDJfRE1BX1NETUFfU0hJRlQJCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDJfRE1BX1NETUFfU0hJRlQJCQkJNwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMl9ETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTUNBU1AyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AyX0RNQV9URVNMQV9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMl9ETUFfVEVTTEFfU0hJRlQJCQkJNgogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMl9ETUFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01DQVNQMl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMl9JUlFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AyX0lSUV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQMl9JUlFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NQ0FTUDJfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDJfSVJRX1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AyX0lSUV9URVNMQV9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AyX0lSUV9URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTUNBU1AzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AzX0RNQV9TRE1BX1NISUZUCQkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AzX0RNQV9TRE1BX1NISUZUCQkJCTcKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDNfRE1BX1NETUFfTUFTSwkJCQlCSVRGSUVMRCg3LCA3KQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01DQVNQM19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQM19ETUFfVEVTTEFfU0hJRlQJCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDNfRE1BX1RFU0xBX1NISUZUCQkJCTYKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDNfRE1BX1RFU0xBX01BU0sJCQkJQklURklFTEQoNiwgNikKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NQ0FTUDNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDNfSVJRX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQM19JUlFfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0FTUDNfSVJRX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTUNBU1AzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNBU1AzX0lSUV9URVNMQV9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQM19JUlFfVEVTTEFfU0hJRlQJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQVNQM19JUlFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9NQ0JTUDFfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AxX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AxX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fQUJFX01DQlNQMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQMV9TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AxX1NETUFfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQMV9TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9BQkVfTUNCU1AxX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AxX1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AxX1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9NQ0JTUDJfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDJfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AyX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AyX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fQUJFX01DQlNQMl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQMl9TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AyX1NETUFfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQMl9TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9BQkVfTUNCU1AyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AyX1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AyX1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDJfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9NQ0JTUDNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDNfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AzX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AzX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fQUJFX01DQlNQM19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQM19TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AzX1NETUFfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQM19TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9BQkVfTUNCU1AzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AzX1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1AzX1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDNfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01DQlNQNF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQNF9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDRfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDRfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NQ0JTUDRfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDRfU0RNQV9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DQlNQNF9TRE1BX1NISUZUCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDRfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTUNCU1A0X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1A0X1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNCU1A0X1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ0JTUDRfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01DU1BJMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJMV9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTFfRFVDQVRJX1NISUZUCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTFfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NQ1NQSTFfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkxX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkxX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTUNTUEkxX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkxX1NETUFfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTFfU0RNQV9TSElGVAkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkxX1NETUFfTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01DU1BJMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJMV9URVNMQV9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJMV9URVNMQV9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkxX1RFU0xBX01BU0sJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NQ1NQSTJfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTJfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkyX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkyX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTUNTUEkyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkyX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJMl9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJMl9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01DU1BJMl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJMl9TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkyX1NETUFfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJMl9TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NQ1NQSTNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTNfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkzX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkzX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTUNTUEkzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkzX1NETUFfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTNfU0RNQV9TSElGVAkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTUNTUEkzX1NETUFfTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01DU1BJNF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJNF9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTRfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTRfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NQ1NQSTRfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTRfU0RNQV9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01DU1BJNF9TRE1BX1NISUZUCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NQ1NQSTRfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX01NQzFfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMxX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzFfRFVDQVRJX1NISUZUCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMxX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX01NQzFfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMxX01QVV9TSElGVAkJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMxX01QVV9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzFfTVBVX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX01NQzFfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMxX1NETUFfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMxX1NETUFfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzFfU0RNQV9NQVNLCQkJCQlCSVRGSUVMRCgzLCAzKQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9NTUMxX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMV9URVNMQV9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzFfVEVTTEFfU0hJRlQJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9NTUMyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMl9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMyX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMl9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9NTUMyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMl9NUFVfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMl9NUFVfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMyX01QVV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9NTUMyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMl9TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DMl9TRE1BX1NISUZUCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMyX1NETUFfTUFTSwkJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfTU1DMl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzJfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMyX1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUMyX1RFU0xBX01BU0sJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfTU1DNl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzZfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DNl9EVUNBVElfU0hJRlQJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzZfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfTU1DNl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzZfTVBVX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzZfTVBVX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DNl9NUFVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfTU1DNl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQzZfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUM2X1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUM2X1RFU0xBX01BU0sJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NTUNTRDNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUNTRDNfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0QzX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0QzX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTU1DU0QzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0QzX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NEM19NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NEM19NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01NQ1NEM19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NEM19TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0QzX1NETUFfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NEM19TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NTUNTRDRfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUNTRDRfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q0X0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q0X0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTU1DU0Q0X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q0X01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NENF9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NENF9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01NQ1NENF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NENF9TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q0X1NETUFfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NENF9TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9MNFBFUl9NTUNTRDVfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9NTUNTRDVfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q1X0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q1X0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfTU1DU0Q1X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q1X01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NENV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NENV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX01NQ1NENV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NENV9TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfTU1DU0Q1X1NETUFfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX01NQ1NENV9TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfUENJRVNTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfUENJRVNTX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BDSUVTU19NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BDSUVTU19NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9QQ0lFU1NfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9QQ0lFU1NfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9QQ0lFU1NfVEVTTEFfU0hJRlQJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BDSUVTU19URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1BETV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BETV9ETUFfU0RNQV9TSElGVAkJCQkoMSA8PCA3KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BETV9ETUFfU0RNQV9TSElGVAkJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfUERNX0RNQV9TRE1BX01BU0sJCQkJQklURklFTEQoNywgNykKIAogLyogVXNlZCBieSBQTV9BQkVfUERNX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfUERNX0RNQV9URVNMQV9TSElGVAkJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BETV9ETUFfVEVTTEFfU0hJRlQJCQkJNgogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BETV9ETUFfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9QRE1fV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9QRE1fSVJRX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BETV9JUlFfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9QRE1fSVJRX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1BETV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1BETV9JUlFfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9QRE1fSVJRX1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9QRE1fSVJRX1RFU0xBX01BU0sJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQTV9XS1VQX1JUQ19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1JUQ19NUFVfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfUlRDX01QVV9TSElGVAkJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1JUQ19NUFVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfU0FUQV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NBVEFfTVBVX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NBVEFfTVBVX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0FUQV9NUFVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfU0FUQV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NBVEFfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TQVRBX1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TQVRBX1RFU0xBX01BU0sJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQTV9BQkVfU0xJTUJVU19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NMSU1CVVMxX0RNQV9TRE1BX1NISUZUCQkJKDEgPDwgNykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMV9ETUFfU0RNQV9TSElGVAkJCTcKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMV9ETUFfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDcsIDcpCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1NMSU1CVVNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMV9ETUFfVEVTTEFfU0hJRlQJCQkoMSA8PCA2KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NMSU1CVVMxX0RNQV9URVNMQV9TSElGVAkJCTYKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMV9ETUFfVEVTTEFfTUFTSwkJCUJJVEZJRUxEKDYsIDYpCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1NMSU1CVVNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMV9JUlFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzFfSVJRX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzFfSVJRX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1NMSU1CVVNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMV9JUlFfVEVTTEFfU0hJRlQJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NMSU1CVVMxX0lSUV9URVNMQV9TSElGVAkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMV9JUlFfVEVTTEFfTUFTSwkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfU0xJTUJVUzJfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMl9ETUFfU0RNQV9TSElGVAkJCSgxIDw8IDcpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzJfRE1BX1NETUFfU0hJRlQJCQk3CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzJfRE1BX1NETUFfTUFTSwkJCQlCSVRGSUVMRCg3LCA3KQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX1NMSU1CVVMyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzJfRE1BX1RFU0xBX1NISUZUCQkJKDEgPDwgNikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMl9ETUFfVEVTTEFfU0hJRlQJCQk2CiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzJfRE1BX1RFU0xBX01BU0sJCQlCSVRGSUVMRCg2LCA2KQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX1NMSU1CVVMyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzJfSVJRX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NMSU1CVVMyX0lSUV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NMSU1CVVMyX0lSUV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX1NMSU1CVVMyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzJfSVJRX1RFU0xBX1NISUZUCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TTElNQlVTMl9JUlFfVEVTTEFfU0hJRlQJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU0xJTUJVUzJfSVJRX1RFU0xBX01BU0sJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0FMV09OX1NSX0NPUkVfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TUl9DT1JFX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NSX0NPUkVfRFVDQVRJX1NISUZUCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TUl9DT1JFX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fQUxXT05fU1JfQ09SRV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NSX0NPUkVfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU1JfQ09SRV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NSX0NPUkVfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9BTFdPTl9TUl9JVkFfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TUl9JVkFfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU1JfSVZBX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU1JfSVZBX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fQUxXT05fU1JfSVZBX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfU1JfSVZBX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NSX0lWQV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NSX0lWQV9NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0FMV09OX1NSX01QVV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1NSX01QVV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TUl9NUFVfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9TUl9NUFVfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9XS1VQX1RJTUVSMTJfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjEyX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSMTJfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjEyX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fV0tVUF9USU1FUjFfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVIxX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVIxX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1RJTUVSNV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSNV9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjVfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjVfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9BQkVfVElNRVI1X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI1X1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI1X1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjVfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9USU1FUjZfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjZfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI2X01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI2X01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1RJTUVSNl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSNl9URVNMQV9TSElGVAkJCQkoMSA8PCAyKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSNl9URVNMQV9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI2X1RFU0xBX01BU0sJCQkJQklURklFTEQoMiwgMikKIAogLyogVXNlZCBieSBQTV9BQkVfVElNRVI3X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI3X01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSN19NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSN19NUFVfTUFTSwkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0FCRV9USU1FUjdfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjdfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjdfVEVTTEFfU0hJRlQJCQkJMgogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSN19URVNMQV9NQVNLCQkJCUJJVEZJRUxEKDIsIDIpCiAKIC8qIFVzZWQgYnkgUE1fQUJFX1RJTUVSOF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1RJTUVSOF9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjhfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjhfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9BQkVfVElNRVI4X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI4X1RFU0xBX1NISUZUCQkJCSgxIDw8IDIpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVElNRVI4X1RFU0xBX1NISUZUCQkJCTIKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9USU1FUjhfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX1VBUlQxX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDFfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUMV9NUFVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9VQVJUMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQxX1NETUFfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUMV9TRE1BX1NISUZUCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUMV9TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9MNFBFUl9VQVJUMl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQyX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQyX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDJfTVBVX01BU0sJCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfVUFSVDJfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUMl9TRE1BX1NISUZUCQkJCSgxIDw8IDMpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDJfU0RNQV9TSElGVAkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDJfU0RNQV9NQVNLCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfVUFSVDNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUM19EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUM19EVUNBVElfU0hJRlQJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQzX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDRQRVJfVUFSVDNfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUM19NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUM19NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQzX01QVV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX1VBUlQzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDNfU0RNQV9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQzX1NETUFfU0hJRlQJCQkJMwogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQzX1NETUFfTUFTSwkJCQlCSVRGSUVMRCgzLCAzKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX1VBUlQzX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDNfVEVTTEFfU0hJRlQJCQkJKDEgPDwgMikKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUM19URVNMQV9TSElGVAkJCQkyCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDNfVEVTTEFfTUFTSwkJCQlCSVRGSUVMRCgyLCAyKQogCiAvKiBVc2VkIGJ5IFBNX0w0UEVSX1VBUlQ0X1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDRfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVUFSVDRfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUNF9NUFVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MNFBFUl9VQVJUNF9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VBUlQ0X1NETUFfU0hJRlQJCQkJKDEgPDwgMykKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUNF9TRE1BX1NISUZUCQkJCTMKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VQVJUNF9TRE1BX01BU0sJCQkJQklURklFTEQoMywgMykKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfVU5JUFJPMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VOSVBSTzFfRFVDQVRJX1NISUZUCQkJCSgxIDw8IDEpCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVU5JUFJPMV9EVUNBVElfU0hJRlQJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VOSVBSTzFfRFVDQVRJX01BU0sJCQkJQklURklFTEQoMSwgMSkKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfVU5JUFJPMV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VOSVBSTzFfTVBVX1NISUZUCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVU5JUFJPMV9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VOSVBSTzFfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfVVNCX0hPU1RfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfSE9TVF9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfSE9TVF9EVUNBVElfU0hJRlQJCQkJMQogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9IT1NUX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX1VTQl9IT1NUX0ZTX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVVNCX0hPU1RfRlNfRFVDQVRJX1NISUZUCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfSE9TVF9GU19EVUNBVElfU0hJRlQJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVVNCX0hPU1RfRlNfRFVDQVRJX01BU0sJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9VU0JfSE9TVF9GU19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9IT1NUX0ZTX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9IT1NUX0ZTX01QVV9TSElGVAkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVVNCX0hPU1RfRlNfTVBVX01BU0sJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfVVNCX0hPU1RfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfSE9TVF9NUFVfU0hJRlQJCQkJKDEgPDwgMCkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfSE9TVF9NUFVfU0hJRlQJCQkJMAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9IT1NUX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX1VTQl9PVEdfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfT1RHX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9PVEdfRFVDQVRJX1NISUZUCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfT1RHX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX1VTQl9PVEdfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfT1RHX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9PVEdfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfT1RHX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX1VTQl9UTExfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfVExMX0RVQ0FUSV9TSElGVAkJCQkoMSA8PCAxKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9UTExfRFVDQVRJX1NISUZUCQkJCTEKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfVExMX0RVQ0FUSV9NQVNLCQkJCUJJVEZJRUxEKDEsIDEpCiAKIC8qIFVzZWQgYnkgUE1fTDNJTklUX1VTQl9UTExfV0tERVAgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfVExMX01QVV9TSElGVAkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTQl9UTExfTVBVX1NISUZUCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0JfVExMX01QVV9NQVNLCQkJCUJJVEZJRUxEKDAsIDApCiAKIC8qIFVzZWQgYnkgUE1fV0tVUF9VU0lNX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVVNJTV9NUFVfU0hJRlQJCQkJCSgxIDw8IDApCisjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVVNJTV9NUFVfU0hJRlQJCQkJCTAKICNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9VU0lNX01QVV9NQVNLCQkJCQlCSVRGSUVMRCgwLCAwKQogCiAvKiBVc2VkIGJ5IFBNX1dLVVBfVVNJTV9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTSU1fU0RNQV9TSElGVAkJCQkoMSA8PCAzKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1VTSU1fU0RNQV9TSElGVAkJCQkzCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfVVNJTV9TRE1BX01BU0sJCQkJCUJJVEZJRUxEKDMsIDMpCiAKIC8qIFVzZWQgYnkgUE1fV0tVUF9XRFQyX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfV0RUMl9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9XRFQyX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfV0RUMl9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBNX1dLVVBfV0RUMl9XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1dEVDJfTVBVX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1dEVDJfTVBVX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfV0RUMl9NUFVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9BQkVfV0RUM19XS0RFUCAqLwotI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1dEVDNfTVBVX1NISUZUCQkJCQkoMSA8PCAwKQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1dEVDNfTVBVX1NISUZUCQkJCQkwCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfV0RUM19NUFVfTUFTSwkJCQkJQklURklFTEQoMCwgMCkKIAogLyogVXNlZCBieSBQTV9MM0lOSVRfSFNJX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfV0dNX0hTSV9XQUtFX01QVV9TSElGVAkJCQkoMSA8PCA4KQorI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1dHTV9IU0lfV0FLRV9NUFVfU0hJRlQJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9XS1VQREVQX1dHTV9IU0lfV0FLRV9NUFVfTUFTSwkJCQlCSVRGSUVMRCg4LCA4KQogCiAvKiBVc2VkIGJ5IFBNX0wzSU5JVF9YSFBJX1dLREVQICovCi0jZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfWEhQSV9EVUNBVElfU0hJRlQJCQkJKDEgPDwgMSkKKyNkZWZpbmUgT01BUDQ0MzBfV0tVUERFUF9YSFBJX0RVQ0FUSV9TSElGVAkJCQkxCiAjZGVmaW5lIE9NQVA0NDMwX1dLVVBERVBfWEhQSV9EVUNBVElfTUFTSwkJCQlCSVRGSUVMRCgxLCAxKQogCiAvKiBVc2VkIGJ5IFBSTV9JT19QTUNUUkwgKi8KLSNkZWZpbmUgT01BUDQ0MzBfV1VDTEtfQ1RSTF9TSElGVAkJCQkJKDEgPDwgOCkKKyNkZWZpbmUgT01BUDQ0MzBfV1VDTEtfQ1RSTF9TSElGVAkJCQkJOAogI2RlZmluZSBPTUFQNDQzMF9XVUNMS19DVFJMX01BU0sJCQkJCUJJVEZJRUxEKDgsIDgpCiAKIC8qIFVzZWQgYnkgUFJNX0lPX1BNQ1RSTCAqLwotI2RlZmluZSBPTUFQNDQzMF9XVUNMS19TVEFUVVNfU0hJRlQJCQkJCSgxIDw8IDkpCisjZGVmaW5lIE9NQVA0NDMwX1dVQ0xLX1NUQVRVU19TSElGVAkJCQkJOQogI2RlZmluZSBPTUFQNDQzMF9XVUNMS19TVEFUVVNfTUFTSwkJCQkJQklURklFTEQoOSwgOSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvcHJtLmgKaW5kZXggNDBmMDA2Mi4uNWZiYTJhYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcm0uaAorKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3BybS5oCkBAIC0xNzksOSArMTc5LDExIEBACiAKIC8qIFJlZ2lzdGVycyBhcHBlYXJpbmcgb24gYm90aCAyNHh4IGFuZCAzNHh4ICovCiAKLSNkZWZpbmUgUk1fUlNUQ1RSTAkJCQkJMHgwMDUwCi0jZGVmaW5lIFJNX1JTVFRJTUUJCQkJCTB4MDA1NAotI2RlZmluZSBSTV9SU1RTVAkJCQkJMHgwMDU4CisjZGVmaW5lIE9NQVAyX1JNX1JTVENUUkwJCQkJMHgwMDUwCisjZGVmaW5lIE9NQVAyX1JNX1JTVFRJTUUJCQkJMHgwMDU0CisjZGVmaW5lIE9NQVAyX1JNX1JTVFNUCQkJCQkweDAwNTgKKyNkZWZpbmUgT01BUDJfUE1fUFdTVENUUkwJCQkJMHgwMGUwCisjZGVmaW5lIE9NQVAyX1BNX1BXU1RTVAkJCQkJMHgwMGU0CiAKICNkZWZpbmUgUE1fV0tFTgkJCQkJCTB4MDBhMAogI2RlZmluZSBQTV9XS0VOMQkJCQkJUE1fV0tFTgpAQCAtMTkxLDggKzE5Myw2IEBACiAjZGVmaW5lIFBNX0VWR0VOQ1RSTAkJCQkJMHgwMGQ0CiAjZGVmaW5lIFBNX0VWR0VOT05USU0JCQkJCTB4MDBkOAogI2RlZmluZSBQTV9FVkdFTk9GRlRJTQkJCQkJMHgwMGRjCi0jZGVmaW5lIFBNX1BXU1RDVFJMCQkJCQkweDAwZTAKLSNkZWZpbmUgUE1fUFdTVFNUCQkJCQkweDAwZTQKIAogLyogT21hcDIgc3BlY2lmaWMgcmVnaXN0ZXJzICovCiAjZGVmaW5lIE9NQVAyNFhYX1BNX1dLRU4yCQkJCTB4MDBhNApAQCAtMjIwLDYgKzIyMCwxMyBAQAogI2RlZmluZSBPTUFQMzQzMF9QUk1fSVJRU1RBVFVTX0lWQTIJCQkweDAwZjgKICNkZWZpbmUgT01BUDM0MzBfUFJNX0lSUUVOQUJMRV9JVkEyCQkJMHgwMGZjCiAKKy8qIE9tYXA0IHNwZWNpZmljIHJlZ2lzdGVycyAqLworI2RlZmluZSBPTUFQNF9STV9SU1RDVFJMCQkJCTB4MDAwMAorI2RlZmluZSBPTUFQNF9STV9SU1RUSU1FCQkJCTB4MDAwNAorI2RlZmluZSBPTUFQNF9STV9SU1RTVAkJCQkJMHgwMDA4CisjZGVmaW5lIE9NQVA0X1BNX1BXU1RDVFJMCQkJCTB4MDAwMAorI2RlZmluZSBPTUFQNF9QTV9QV1NUU1QJCQkJCTB4MDAwNAorCiAKICNpZm5kZWYgX19BU1NFTUJMRVJfXwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmFtLW51bW9ueXgtbTY1a3h4eHhhbS5oIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJhbS1udW1vbnl4LW02NWt4eHh4YW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDQzNTI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJhbS1udW1vbnl4LW02NWt4eHh4YW0uaApAQCAtMCwwICsxLDUxIEBACisvKgorICogU0RSQyByZWdpc3RlciB2YWx1ZXMgZm9yIHRoZSBOdW1vbnl4IE02NUtYWFhYQU0KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSW50ZWdyYXRpb24gU29mdHdhcmUgYW5kIEVsZWN0cm9uaWMgRW5naW5lZXJpbmcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9TRFJBTV9OVU1PTllYX002NUtYWFhYQU0KKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX1NEUkFNX05VTU9OWVhfTTY1S1hYWFhBTQorCisjaW5jbHVkZSA8cGxhdC9zZHJjLmg+CisKKy8qIE51bW9ueXggIE02NUtYWFhYQU0gKi8KK3N0YXRpYyBzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyBtNjVreHh4eGFtX3NkcmNfcGFyYW1zW10gPSB7CisJWzBdID0geworCQkucmF0ZQkJPSAyMDAwMDAwMDAsCisJCS5hY3RpbV9jdHJsYQk9IDB4ZTMyMWQ0YzYsCisJCS5hY3RpbV9jdHJsYgk9IDB4MDAwMjIzMjgsCisJCS5yZnJfY3RybAk9IDB4MDAwNWU2MDEsCisJCS5tcgkJPSAweDAwMDAwMDMyLAorCX0sCisJWzFdID0geworCQkucmF0ZQkJPSAxNjYwMDAwMDAsCisJCS5hY3RpbV9jdHJsYQk9IDB4YmE5ZGM0ODUsCisJCS5hY3RpbV9jdHJsYgk9IDB4MDAwMjIzMjEsCisJCS5yZnJfY3RybAk9IDB4MDAwNGRjMDEsCisJCS5tcgkJPSAweDAwMDAwMDMyLAorCX0sCisJWzJdID0geworCQkucmF0ZQkJPSAxMzMwMDAwMDAsCisJCS5hY3RpbV9jdHJsYQk9IDB4OWExOWI0ODUsCisJCS5hY3RpbV9jdHJsYgk9IDB4MDAwMjIzMWIsCisJCS5yZnJfY3RybAk9IDB4MDAwM2RlMDEsCisJCS5tcgkJPSAweDAwMDAwMDMyLAorCX0sCisJWzNdID0geworCQkucmF0ZQkJPSA4MzAwMDAwMCwKKwkJLmFjdGltX2N0cmxhCT0gMHg1OTRjYTI0MiwKKwkJLmFjdGltX2N0cmxiCT0gMHgwMDAyMjMxMCwKKwkJLnJmcl9jdHJsCT0gMHgwMDAyNTUwMSwKKwkJLm1yCQk9IDB4MDAwMDAwMzIsCisJfSwKKwlbNF0gPSB7CisJCS5yYXRlCQkJPSAwCisJfSwKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZHJjLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMuYwppbmRleCBjYmZiZDE0Li40YzY1ZjU2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NkcmMuYwpAQCAtMTE5LDggKzExOSwxNSBAQAogCiB2b2lkIF9faW5pdCBvbWFwMl9zZXRfZ2xvYmFsc19zZHJjKHN0cnVjdCBvbWFwX2dsb2JhbHMgKm9tYXAyX2dsb2JhbHMpCiB7Ci0Jb21hcDJfc2RyY19iYXNlID0gb21hcDJfZ2xvYmFscy0+c2RyYzsKLQlvbWFwMl9zbXNfYmFzZSA9IG9tYXAyX2dsb2JhbHMtPnNtczsKKwkvKiBTdGF0aWMgbWFwcGluZywgbmV2ZXIgcmVsZWFzZWQgKi8KKwlpZiAob21hcDJfZ2xvYmFscy0+c2RyYykgeworCQlvbWFwMl9zZHJjX2Jhc2UgPSBpb3JlbWFwKG9tYXAyX2dsb2JhbHMtPnNkcmMsIFNaXzY0Syk7CisJCVdBUk5fT04oIW9tYXAyX3NkcmNfYmFzZSk7CisJfQorCWlmIChvbWFwMl9nbG9iYWxzLT5zbXMpIHsKKwkJb21hcDJfc21zX2Jhc2UgPSBpb3JlbWFwKG9tYXAyX2dsb2JhbHMtPnNtcywgU1pfNjRLKTsKKwkJV0FSTl9PTighb21hcDJfc21zX2Jhc2UpOworCX0KIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zZXJpYWwuYwppbmRleCBlMTBhMDJkLi5iNzliYzg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3NlcmlhbC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvc2VyaWFsLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCiAjaW5jbHVkZSA8cGxhdC9jb21tb24uaD4KICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CkBAIC04MCw3ICs4MSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgc2VyaWFsX3BsYXRmb3JtX2RhdGEwW10gPSB7CiAJewotCQkubWFwYmFzZQk9IE9NQVBfVUFSVDFfQkFTRSwKIAkJLmlycQkJPSA3MiwKIAkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAogCQkuaW90eXBlCQk9IFVQSU9fTUVNLApAQCAtOTMsNyArOTMsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHNlcmlhbF9wbGF0Zm9ybV9kYXRhMVtdID0gewogCXsKLQkJLm1hcGJhc2UJPSBPTUFQX1VBUlQyX0JBU0UsCiAJCS5pcnEJCT0gNzMsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLmlvdHlwZQkJPSBVUElPX01FTSwKQEAgLTEwNiw3ICsxMDUsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHNlcmlhbF9wbGF0Zm9ybV9kYXRhMltdID0gewogCXsKLQkJLm1hcGJhc2UJPSBPTUFQX1VBUlQzX0JBU0UsCiAJCS5pcnEJCT0gNzQsCiAJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKIAkJLmlvdHlwZQkJPSBVUElPX01FTSwKQEAgLTExNywxMCArMTE1LDkgQEAKIAl9CiB9OwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQogc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCBzZXJpYWxfcGxhdGZvcm1fZGF0YTNbXSA9IHsKIAl7Ci0JCS5tYXBiYXNlCT0gT01BUF9VQVJUNF9CQVNFLAogCQkuaXJxCQk9IDcwLAogCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCiAJCS5pb3R5cGUJCT0gVVBJT19NRU0sCkBAIC0xMzAsNyArMTI3LDI2IEBACiAJCS5mbGFncwkJPSAwCiAJfQogfTsKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXAyX3NldF9nbG9iYWxzX3VhcnQ0KHN0cnVjdCBvbWFwX2dsb2JhbHMgKm9tYXAyX2dsb2JhbHMpCit7CisJc2VyaWFsX3BsYXRmb3JtX2RhdGEzWzBdLm1hcGJhc2UgPSBvbWFwMl9nbG9iYWxzLT51YXJ0NF9waHlzOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc191YXJ0NChzdHJ1Y3Qgb21hcF9nbG9iYWxzICpvbWFwMl9nbG9iYWxzKQoreworfQogI2VuZGlmCisKK3ZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzX3VhcnQoc3RydWN0IG9tYXBfZ2xvYmFscyAqb21hcDJfZ2xvYmFscykKK3sKKwlzZXJpYWxfcGxhdGZvcm1fZGF0YTBbMF0ubWFwYmFzZSA9IG9tYXAyX2dsb2JhbHMtPnVhcnQxX3BoeXM7CisJc2VyaWFsX3BsYXRmb3JtX2RhdGExWzBdLm1hcGJhc2UgPSBvbWFwMl9nbG9iYWxzLT51YXJ0Ml9waHlzOworCXNlcmlhbF9wbGF0Zm9ybV9kYXRhMlswXS5tYXBiYXNlID0gb21hcDJfZ2xvYmFscy0+dWFydDNfcGh5czsKKwlpZiAoY3B1X2lzX29tYXAzNjMwKCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpCisJCW9tYXAyX3NldF9nbG9iYWxzX3VhcnQ0KG9tYXAyX2dsb2JhbHMpOworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX3NlcmlhbF9yZWFkX3JlZyhzdHJ1Y3QgdWFydF9wb3J0ICp1cCwKIAkJCQkJICAgaW50IG9mZnNldCkKIHsKQEAgLTE0NSw2ICsxNjEsMTMgQEAKIAlyZXR1cm4gKHVuc2lnbmVkIGludClfX3Jhd19yZWFkYih1cC0+bWVtYmFzZSArIG9mZnNldCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NlcmlhbF93cml0ZV9yZWcoc3RydWN0IHVhcnRfcG9ydCAqdXAsIGludCBvZmZzZXQsCisJCWludCB2YWx1ZSkKK3sKKwlvZmZzZXQgPDw9IHVwLT5yZWdzaGlmdDsKKwlfX3Jhd193cml0ZWIodmFsdWUsIHVwLT5tZW1iYXNlICsgb2Zmc2V0KTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHNlcmlhbF93cml0ZV9yZWcoc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0ICpwLCBpbnQgb2Zmc2V0LAogCQkJCSAgICBpbnQgdmFsdWUpCiB7CkBAIC01NzQsNyArNTk3LDcgQEAKIAkJCX0sCiAJCX0sCiAJfSwKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCiAJewogCQkucGRldiA9IHsKIAkJCS5uYW1lCQkJPSAic2VyaWFsODI1MCIsCkBAIC02MDUsNiArNjI4LDIwIEBACiAJcmV0dXJuIF9fc2VyaWFsX3JlYWRfcmVnKHVwLCBvZmZzZXQpOwogfQogCitzdGF0aWMgdm9pZCBzZXJpYWxfb3V0X292ZXJyaWRlKHN0cnVjdCB1YXJ0X3BvcnQgKnVwLCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJdW5zaWduZWQgaW50IHN0YXR1cywgdG1vdXQgPSAxMDAwMDsKKworCXN0YXR1cyA9IF9fc2VyaWFsX3JlYWRfcmVnKHVwLCBVQVJUX0xTUik7CisJd2hpbGUgKCEoc3RhdHVzICYgVUFSVF9MU1JfVEhSRSkpIHsKKwkJLyogV2FpdCB1cCB0byAxMG1zIGZvciB0aGUgY2hhcmFjdGVyKHMpIHRvIGJlIHNlbnQuICovCisJCWlmICgtLXRtb3V0ID09IDApCisJCQlicmVhazsKKwkJdWRlbGF5KDEpOworCQlzdGF0dXMgPSBfX3NlcmlhbF9yZWFkX3JlZyh1cCwgVUFSVF9MU1IpOworCX0KKwlfX3NlcmlhbF93cml0ZV9yZWcodXAsIG9mZnNldCwgdmFsdWUpOworfQogdm9pZCBfX2luaXQgb21hcF9zZXJpYWxfZWFybHlfaW5pdCh2b2lkKQogewogCWludCBpOwpAQCAtNzAxLDE1ICs3MzgsMTkgQEAKIAkJREVWX0NSRUFURV9GSUxFKGRldiwgJmRldl9hdHRyX3NsZWVwX3RpbWVvdXQpOwogCX0KIAotCQkvKiBvbWFwNDR4eDogTmV2ZXIgcmVhZCBlbXB0eSBVQVJUIGZpZm8KLQkJICogb21hcDN4eHg6IE5ldmVyIHJlYWQgZW1wdHkgVUFSVCBmaWZvIG9uIFVBUlRzCi0JCSAqIHdpdGggSVAgcmV2ID49MHg1MgotCQkgKi8KLQkJaWYgKGNwdV9pc19vbWFwNDR4eCgpKQotCQkJdWFydC0+cC0+c2VyaWFsX2luID0gc2VyaWFsX2luX292ZXJyaWRlOwotCQllbHNlIGlmICgoc2VyaWFsX3JlYWRfcmVnKHVhcnQtPnAsIFVBUlRfT01BUF9NVkVSKSAmIDB4RkYpCi0JCQkJPj0gVUFSVF9PTUFQX05PX0VNUFRZX0ZJRk9fUkVBRF9JUF9SRVYpCi0JCQl1YXJ0LT5wLT5zZXJpYWxfaW4gPSBzZXJpYWxfaW5fb3ZlcnJpZGU7CisJLyoKKwkgKiBvbWFwNDR4eDogTmV2ZXIgcmVhZCBlbXB0eSBVQVJUIGZpZm8KKwkgKiBvbWFwM3h4eDogTmV2ZXIgcmVhZCBlbXB0eSBVQVJUIGZpZm8gb24gVUFSVHMKKwkgKiB3aXRoIElQIHJldiA+PTB4NTIKKwkgKi8KKwlpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJdWFydC0+cC0+c2VyaWFsX2luID0gc2VyaWFsX2luX292ZXJyaWRlOworCQl1YXJ0LT5wLT5zZXJpYWxfb3V0ID0gc2VyaWFsX291dF9vdmVycmlkZTsKKwl9IGVsc2UgaWYgKChzZXJpYWxfcmVhZF9yZWcodWFydC0+cCwgVUFSVF9PTUFQX01WRVIpICYgMHhGRikKKwkJCT49IFVBUlRfT01BUF9OT19FTVBUWV9GSUZPX1JFQURfSVBfUkVWKSB7CisJCXVhcnQtPnAtPnNlcmlhbF9pbiA9IHNlcmlhbF9pbl9vdmVycmlkZTsKKwkJdWFydC0+cC0+c2VyaWFsX291dCA9IHNlcmlhbF9vdXRfb3ZlcnJpZGU7CisJfQogfQogCiAvKioKQEAgLTcyMSw4ICs3NjIsMTMgQEAKICAqLwogdm9pZCBfX2luaXQgb21hcF9zZXJpYWxfaW5pdCh2b2lkKQogewotCWludCBpOworCWludCBpLCBucl9wb3J0czsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG9tYXBfdWFydCk7IGkrKykKKwlpZiAoIShjcHVfaXNfb21hcDM2MzAoKSB8fCBjcHVfaXNfb21hcDQ0MzAoKSkpCisJCW5yX3BvcnRzID0gMzsKKwllbHNlCisJCW5yX3BvcnRzID0gQVJSQVlfU0laRShvbWFwX3VhcnQpOworCisJZm9yIChpID0gMDsgaSA8IG5yX3BvcnRzOyBpKyspCiAJCW9tYXBfc2VyaWFsX2luaXRfcG9ydChpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAzNHh4LlMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3NsZWVwMzR4eC5TCmluZGV4IGMzNjI2ZWEuLmQ1MjJjZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvc2xlZXAzNHh4LlMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9zbGVlcDM0eHguUwpAQCAtMzMsMTIgKzMzLDE0IEBACiAjaW5jbHVkZSAicHJtLmgiCiAjaW5jbHVkZSAic2RyYy5oIgogCisjZGVmaW5lIFNEUkNfU0NSQVRDSFBBRF9TRU1fVgkweGZhMDAyOTFjCisKICNkZWZpbmUgUE1fUFJFUFdTVFNUX0NPUkVfVglPTUFQMzRYWF9QUk1fUkVHQUREUihDT1JFX01PRCwgXAogCQkJCU9NQVAzNDMwX1BNX1BSRVBXU1RTVCkKICNkZWZpbmUgUE1fUFJFUFdTVFNUX0NPUkVfUAkweDQ4MzA2QUU4CiAjZGVmaW5lIFBNX1BSRVBXU1RTVF9NUFVfVglPTUFQMzRYWF9QUk1fUkVHQUREUihNUFVfTU9ELCBcCiAJCQkJT01BUDM0MzBfUE1fUFJFUFdTVFNUKQotI2RlZmluZSBQTV9QV1NUQ1RSTF9NUFVfUAlPTUFQMzQzMF9QUk1fQkFTRSArIE1QVV9NT0QgKyBQTV9QV1NUQ1RSTAorI2RlZmluZSBQTV9QV1NUQ1RSTF9NUFVfUAlPTUFQMzQzMF9QUk1fQkFTRSArIE1QVV9NT0QgKyBPTUFQMl9QTV9QV1NUQ1RSTAogI2RlZmluZSBDTV9JRExFU1QxX0NPUkVfVglPTUFQMzRYWF9DTV9SRUdBRERSKENPUkVfTU9ELCBDTV9JRExFU1QxKQogI2RlZmluZSBTUkFNX0JBU0VfUAkJMHg0MDIwMDAwMAogI2RlZmluZSBDT05UUk9MX1NUQVQJCTB4NDgwMDIyRjAKQEAgLTU3LDYgKzU5LDM3IEBACiAjZGVmaW5lIFNEUkNfRExMQV9TVEFUVVNfVglPTUFQMzRYWF9TRFJDX1JFR0FERFIoU0RSQ19ETExBX1NUQVRVUykKICNkZWZpbmUgU0RSQ19ETExBX0NUUkxfVglPTUFQMzRYWF9TRFJDX1JFR0FERFIoU0RSQ19ETExBX0NUUkwpCiAKKyAgICAgICAgLnRleHQKKy8qIEZ1bmN0aW9uIHRvIGFxdWlyZSB0aGUgc2VtYXBob3JlIGluIHNjcmF0Y2hwYWQgKi8KK0VOVFJZKGxvY2tfc2NyYXRjaHBhZF9zZW0pCisJc3RtZmQJc3AhLCB7bHJ9CUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKK3dhaXRfc2VtOgorCW1vdglyMCwjMQorCWxkcglyMSwgc2RyY19zY3JhdGNocGFkX3NlbQord2FpdF9sb29wOgorCWxkcglyMiwgW3IxXQlAIGxvYWQgdGhlIGxvY2sgdmFsdWUKKwljbXAJcjIsIHIwCQlAIGlzIHRoZSBsb2NrIGZyZWUgPworCWJlcQl3YWl0X2xvb3AJQCBub3QgZnJlZS4uLgorCXN3cAlyMiwgcjAsIFtyMV0JQCBzZW1hcGhvcmUgZnJlZSBzbyBsb2NrIGl0IGFuZCBwcm9jZWVkCisJY21wCXIyLCByMAkJQCBkaWQgd2Ugc3VjY2VlZCA/CisJYmVxCXdhaXRfc2VtCUAgbm8gLSB0cnkgYWdhaW4KKwlsZG1mZAlzcCEsIHtwY30JQCByZXN0b3JlIHJlZ3MgYW5kIHJldHVybgorc2RyY19zY3JhdGNocGFkX3NlbToKKyAgICAgICAgLndvcmQgU0RSQ19TQ1JBVENIUEFEX1NFTV9WCitFTlRSWShsb2NrX3NjcmF0Y2hwYWRfc2VtX3N6KQorICAgICAgICAud29yZCAgIC4gLSBsb2NrX3NjcmF0Y2hwYWRfc2VtCisKKyAgICAgICAgLnRleHQKKy8qIEZ1bmN0aW9uIHRvIHJlbGVhc2UgdGhlIHNjcmF0Y2hwYWQgc2VtYXBob3JlICovCitFTlRSWSh1bmxvY2tfc2NyYXRjaHBhZF9zZW0pCisJc3RtZmQJc3AhLCB7bHJ9CUAgc2F2ZSByZWdpc3RlcnMgb24gc3RhY2sKKwlsZHIJcjMsIHNkcmNfc2NyYXRjaHBhZF9zZW0KKwltb3YJcjIsIzAKKwlzdHIJcjIsW3IzXQorCWxkbWZkCXNwISwge3BjfQlAIHJlc3RvcmUgcmVncyBhbmQgcmV0dXJuCitFTlRSWSh1bmxvY2tfc2NyYXRjaHBhZF9zZW1fc3opCisgICAgICAgIC53b3JkICAgLiAtIHVubG9ja19zY3JhdGNocGFkX3NlbQorCiAJLnRleHQKIC8qIEZ1bmN0aW9uIGNhbGwgdG8gZ2V0IHRoZSByZXN0b3JlIHBvaW50ZXIgZm9yIHJlc3VtZSBmcm9tIE9GRiAqLwogRU5UUlkoZ2V0X3Jlc3RvcmVfcG9pbnRlcikKQEAgLTI1MSw2ICsyODQsMjEgQEAKIAltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNQlAIGRhdGEgbWVtb3J5IGJhcnJpZXIKIAkud29yZAkweEUxNjAwMDcxCQlAIGNhbGwgU01JIG1vbml0b3IgKHNtaSAjMSkKIAorI2lmZGVmIENPTkZJR19PTUFQM19MMl9BVVhfU0VDVVJFX1NBVkVfUkVTVE9SRQorCS8qIFJlc3RvcmUgTDIgYXV4IGNvbnRyb2wgcmVnaXN0ZXIgKi8KKwlAIHNldCBzZXJ2aWNlIElEIGZvciBQUEEKKwltb3YJcjAsICNDT05GSUdfT01BUDNfTDJfQVVYX1NFQ1VSRV9TRVJWSUNFX1NFVF9JRAorCW1vdglyMTIsIHIwCQlAIGNvcHkgc2VydmljZSBJRCBpbiByMTIKKwltb3YJcjEsICMwCQlAIHNldCB0YXNrIElEIGZvciBST00gY29kZSBpbiByMQorCW1vdglyMiwgIzQJCUAgc2V0IHNvbWUgZmxhZ3MgaW4gcjIsIHI2CisJbW92CXI2LCAjMHhmZgorCWxkcglyNCwgc2NyYXRjaHBhZF9iYXNlCisJbGRyCXIzLCBbcjQsICMweEJDXQorCWFkZHMJcjMsIHIzLCAjOAlAIHIzIHBvaW50cyB0byBwYXJhbWV0ZXJzCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJQCBkYXRhIHdyaXRlIGJhcnJpZXIKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNQlAIGRhdGEgbWVtb3J5IGJhcnJpZXIKKwkud29yZAkweEUxNjAwMDcxCQlAIGNhbGwgU01JIG1vbml0b3IgKHNtaSAjMSkKKyNlbmRpZgogCWIJbG9naWNfbDFfcmVzdG9yZQogbDJfaW52X2FwaV9wYXJhbXM6CiAJLndvcmQgICAweDEsIDB4MDAKQEAgLTI2NCw2ICszMTIsMTEgQEAKIAlsZHIJcjAsIFtyMywjNF0KIAltb3YJcjEyLCAjMHgzCiAJLndvcmQgMHhFMTYwMDA3MAlAIENhbGwgU01JIG1vbml0b3IgKHNtaWVxKQorCWxkcglyNCwgc2NyYXRjaHBhZF9iYXNlCisJbGRyCXIzLCBbcjQsIzB4QkNdCisJbGRyCXIwLCBbcjMsIzEyXQorCW1vdglyMTIsICMweDIKKwkud29yZCAweEUxNjAwMDcwCUAgQ2FsbCBTTUkgbW9uaXRvciAoc21pZXEpCiBsb2dpY19sMV9yZXN0b3JlOgogCW1vdglyMSwgIzAKIAkvKiBJbnZhbGlkYXRlIGFsbCBpbnN0cnVjdGlvbiBjYWNoZXMgdG8gUG9VCkBAIC0yNzIsNyArMzI1LDcgQEAKIAogCWxkcglyNCwgc2NyYXRjaHBhZF9iYXNlCiAJbGRyCXIzLCBbcjQsIzB4QkNdCi0JYWRkcwlyMywgcjMsICM4CisJYWRkcwlyMywgcjMsICMxNgogCWxkbWlhCXIzISwge3I0LXI2fQogCW1vdglzcCwgcjQKIAltc3IJc3Bzcl9jeHNmLCByNQpAQCAtMzkxLDcgKzQ0NCw5IEBACiAJbW92CXI4LCByMCAvKiBTdG9yZSBTRFJBTSBhZGRyZXNzIGluIHI4ICovCiAJbXJjCXAxNSwgMCwgcjUsIGMxLCBjMCwgMQlAIFJlYWQgQXV4aWxpYXJ5IENvbnRyb2wgUmVnaXN0ZXIKIAltb3YJcjQsICMweDEJCUAgTnVtYmVyIG9mIHBhcmFtZXRlcnMgZm9yIHJlc3RvcmUgY2FsbAotCXN0bWlhCXI4ISwge3I0LXI1fQorCXN0bWlhCXI4ISwge3I0LXI1fQkJQCBQdXNoIHBhcmFtZXRlcnMgZm9yIHJlc3RvcmUgY2FsbAorCW1yYwlwMTUsIDEsIHI1LCBjOSwgYzAsIDIJQCBSZWFkIEwyIEFVWCBjdHJsIHJlZ2lzdGVyCisJc3RtaWEJcjghLCB7cjQtcjV9CQlAIFB1c2ggcGFyYW1ldGVycyBmb3IgcmVzdG9yZSBjYWxsCiAgICAgICAgIC8qIENoZWNrIHdoYXQgdGhhdCB0YXJnZXQgc2xlZXAgc3RhdGUgaXM6c3RvcmVkIGluIHIxKi8KICAgICAgICAgLyogMSAtIE9ubHkgTDEgYW5kIGxvZ2ljIGxvc3QgKi8KICAgICAgICAgLyogMiAtIE9ubHkgTDIgbG9zdCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1ncC5jCmluZGV4IGNkMDRkZWEuLjc0ZmJlZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItZ3AuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLWdwLmMKQEAgLTg1LDggKzg1LDYgQEAKIAljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgogCQlwZXJpb2QgPSBjbGtfZ2V0X3JhdGUob21hcF9kbV90aW1lcl9nZXRfZmNsayhncHRpbWVyKSkgLyBIWjsKIAkJcGVyaW9kIC09IDE7Ci0JCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkKLQkJCXBlcmlvZCA9IDB4ZmY7CS8qIEZJWE1FOiAqLwogCQlvbWFwX2RtX3RpbWVyX3NldF9sb2FkX3N0YXJ0KGdwdGltZXIsIDEsIDB4ZmZmZmZmZmYgLSBwZXJpb2QpOwogCQlicmVhazsKIAljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CkBAIC0xNTAsOSArMTQ4LDYgQEAKIAkJICAgICAidGltZXItZ3A6IG9tYXBfZG1fdGltZXJfc2V0X3NvdXJjZSgpIGZhaWxlZFxuIik7CiAKIAl0aWNrX3JhdGUgPSBjbGtfZ2V0X3JhdGUob21hcF9kbV90aW1lcl9nZXRfZmNsayhncHRpbWVyKSk7Ci0JaWYgKGNwdV9pc19vbWFwNDR4eCgpKQotCQkvKiBBc3N1bWluZyAzMmtIeiBjbGsgaXMgZHJpdmluZyBHUFQxICovCi0JCXRpY2tfcmF0ZSA9IDMyNzY4OwkvKiBGSVhNRTogKi8KIAogCXByX2luZm8oIk9NQVAgY2xvY2tldmVudCBzb3VyY2U6IEdQVElNRVIlZCBhdCAldSBIelxuIiwKIAkJZ3B0aW1lcl9pZCwgdGlja19yYXRlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItbXB1LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3RpbWVyLW1wdS5jCmluZGV4IGMxYTY1MGEuLjk1NDY4MmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvdGltZXItbXB1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi90aW1lci1tcHUuYwpAQCAtMjgsNyArMjgsNyBAQAogICovCiB2b2lkIF9fY3B1aW5pdCBsb2NhbF90aW1lcl9zZXR1cChzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCiB7Ci0JZXZ0LT5pcnEgPSBJTlRfNDRYWF9MT0NBTFRJTUVSX0lSUTsKKwlldnQtPmlycSA9IE9NQVA0NFhYX0lSUV9MT0NBTFRJTUVSOwogCXR3ZF90aW1lcl9zZXR1cChldnQpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1tdXNiLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3VzYi1tdXNiLmMKaW5kZXggYTgwNDQxZC4uNmQ0MWZhNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi91c2ItbXVzYi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvdXNiLW11c2IuYwpAQCAtNDcsNzAgKzQ3LDExIEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgY2xrX29uOwotCi1zdGF0aWMgaW50IG11c2Jfc2V0X2Nsb2NrKHN0cnVjdCBjbGsgKmNsaywgaW50IHN0YXRlKQotewotCWlmIChzdGF0ZSkgewotCQlpZiAoY2xrX29uID4gMCkKLQkJCXJldHVybiAtRU5PREVWOwotCi0JCWNsa19lbmFibGUoY2xrKTsKLQkJY2xrX29uID0gMTsKLQl9IGVsc2UgewotCQlpZiAoY2xrX29uID09IDApCi0JCQlyZXR1cm4gLUVOT0RFVjsKLQotCQljbGtfZGlzYWJsZShjbGspOwotCQljbGtfb24gPSAwOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IG11c2JfaGRyY19lcHNfYml0cyBtdXNiX2Vwc1tdID0gewotCXsJImVwMV90eCIsIDEwLAl9LAotCXsJImVwMV9yeCIsIDEwLAl9LAotCXsJImVwMl90eCIsIDksCX0sCi0JewkiZXAyX3J4IiwgOSwJfSwKLQl7CSJlcDNfdHgiLCAzLAl9LAotCXsJImVwM19yeCIsIDMsCX0sCi0JewkiZXA0X3R4IiwgMywJfSwKLQl7CSJlcDRfcngiLCAzLAl9LAotCXsJImVwNV90eCIsIDMsCX0sCi0JewkiZXA1X3J4IiwgMywJfSwKLQl7CSJlcDZfdHgiLCAzLAl9LAotCXsJImVwNl9yeCIsIDMsCX0sCi0JewkiZXA3X3R4IiwgMywJfSwKLQl7CSJlcDdfcngiLCAzLAl9LAotCXsJImVwOF90eCIsIDIsCX0sCi0JewkiZXA4X3J4IiwgMiwJfSwKLQl7CSJlcDlfdHgiLCAyLAl9LAotCXsJImVwOV9yeCIsIDIsCX0sCi0JewkiZXAxMF90eCIsIDIsCX0sCi0JewkiZXAxMF9yeCIsIDIsCX0sCi0JewkiZXAxMV90eCIsIDIsCX0sCi0JewkiZXAxMV9yeCIsIDIsCX0sCi0JewkiZXAxMl90eCIsIDIsCX0sCi0JewkiZXAxMl9yeCIsIDIsCX0sCi0JewkiZXAxM190eCIsIDIsCX0sCi0JewkiZXAxM19yeCIsIDIsCX0sCi0JewkiZXAxNF90eCIsIDIsCX0sCi0JewkiZXAxNF9yeCIsIDIsCX0sCi0JewkiZXAxNV90eCIsIDIsCX0sCi0JewkiZXAxNV9yeCIsIDIsCX0sCi19OwotCiBzdGF0aWMgc3RydWN0IG11c2JfaGRyY19jb25maWcgbXVzYl9jb25maWcgPSB7CiAJLm11bHRpcG9pbnQJPSAxLAogCS5keW5fZmlmbwk9IDEsCi0JLnNvZnRfY29uCT0gMSwKLQkuZG1hCQk9IDEsCiAJLm51bV9lcHMJPSAxNiwKLQkuZG1hX2NoYW5uZWxzCT0gNywKLQkuZG1hX3JlcV9jaGFuCT0gKDEgPDwgMCkgfCAoMSA8PCAxKSB8ICgxIDw8IDIpIHwgKDEgPDwgMyksCiAJLnJhbV9iaXRzCT0gMTIsCi0JLmVwc19iaXRzCT0gbXVzYl9lcHMsCiB9OwogCiBzdGF0aWMgc3RydWN0IG11c2JfaGRyY19wbGF0Zm9ybV9kYXRhIG11c2JfcGxhdCA9IHsKQEAgLTEyMiw3ICs2Myw2IEBACiAJLm1vZGUJCT0gTVVTQl9QRVJJUEhFUkFMLAogI2VuZGlmCiAJLyogLmNsb2NrIGlzIHNldCBkeW5hbWljYWxseSAqLwotCS5zZXRfY2xvY2sJPSBtdXNiX3NldF9jbG9jaywKIAkuY29uZmlnCQk9ICZtdXNiX2NvbmZpZywKIAogCS8qIFJFVklTSVQgY2hhcmdlIHB1bXAgb24gVFdMNDAzMCBjYW4gc3VwcGx5IHVwIHRvCkBAIC0xNDYsMjggKzg2LDM0IEBACiAJLnJlc291cmNlCT0gbXVzYl9yZXNvdXJjZXMsCiB9OwogCi12b2lkIF9faW5pdCB1c2JfbXVzYl9pbml0KHZvaWQpCit2b2lkIF9faW5pdCB1c2JfbXVzYl9pbml0KHN0cnVjdCBvbWFwX211c2JfYm9hcmRfZGF0YSAqYm9hcmRfZGF0YSkKIHsKLQlpZiAoY3B1X2lzX29tYXAyNDN4KCkpCisJaWYgKGNwdV9pc19vbWFwMjQzeCgpKSB7CiAJCW11c2JfcmVzb3VyY2VzWzBdLnN0YXJ0ID0gT01BUDI0M1hfSFNfQkFTRTsKLQllbHNlCisJfSBlbHNlIGlmIChjcHVfaXNfb21hcDM0eHgoKSkgewogCQltdXNiX3Jlc291cmNlc1swXS5zdGFydCA9IE9NQVAzNFhYX0hTVVNCX09UR19CQVNFOwotCW11c2JfcmVzb3VyY2VzWzBdLmVuZCA9IG11c2JfcmVzb3VyY2VzWzBdLnN0YXJ0ICsgU1pfOEsgLSAxOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJbXVzYl9yZXNvdXJjZXNbMF0uc3RhcnQgPSBPTUFQNDRYWF9IU1VTQl9PVEdfQkFTRTsKKwkJbXVzYl9yZXNvdXJjZXNbMV0uc3RhcnQgPSBPTUFQNDRYWF9JUlFfSFNfVVNCX01DX047CisJCW11c2JfcmVzb3VyY2VzWzJdLnN0YXJ0ID0gT01BUDQ0WFhfSVJRX0hTX1VTQl9ETUFfTjsKKwl9CisJbXVzYl9yZXNvdXJjZXNbMF0uZW5kID0gbXVzYl9yZXNvdXJjZXNbMF0uc3RhcnQgKyBTWl80SyAtIDE7CiAKIAkvKgogCSAqIFJFVklTSVQ6IFRoaXMgbGluZSBjYW4gYmUgcmVtb3ZlZCBvbmNlIGFsbCB0aGUgcGxhdGZvcm1zIHVzaW5nCiAJICogbXVzYl9jb3JlLmMgaGF2ZSBiZWVuIGNvbnZlcnRlZCB0byB1c2UgdXNlIGNsa2Rldi4KIAkgKi8KIAltdXNiX3BsYXQuY2xvY2sgPSAiaWNrIjsKKwltdXNiX3BsYXQuYm9hcmRfZGF0YSA9IGJvYXJkX2RhdGE7CisJbXVzYl9wbGF0LnBvd2VyID0gYm9hcmRfZGF0YS0+cG93ZXIgPj4gMTsKKwltdXNiX3BsYXQubW9kZSA9IGJvYXJkX2RhdGEtPm1vZGU7CiAKLQlpZiAocGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZtdXNiX2RldmljZSkgPCAwKSB7CisJaWYgKHBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbXVzYl9kZXZpY2UpIDwgMCkKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgSFMtVVNCIChNVVNCKSBkZXZpY2VcbiIpOwotCQlyZXR1cm47Ci0JfQogfQogCiAjZWxzZQotdm9pZCBfX2luaXQgdXNiX211c2JfaW5pdCh2b2lkKQordm9pZCBfX2luaXQgdXNiX211c2JfaW5pdChzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgKmJvYXJkX2RhdGEpCiB7CiB9CiAjZW5kaWYgLyogQ09ORklHX1VTQl9NVVNCX1NPQyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvS2NvbmZpZwppbmRleCBjM2Q1MTNjLi45MDU3MTlhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvS2NvbmZpZwpAQCAtNTcsNiArNTcsMTMgQEAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQogCSAgQnVmZmFsbyBMaW5rc3RhdGlvbiBNaW5pIHBsYXRmb3JtLgogCitjb25maWcgTUFDSF9MSU5LU1RBVElPTl9MU19IR0wKKwlib29sICJCdWZmYWxvIExpbmtzdGF0aW9uIExTLUhHTCIKKwlzZWxlY3QgSTJDX0JPQVJESU5GTworCWhlbHAKKwkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZQorCSAgQnVmZmFsbyBMaW5rc3RhdGlvbiBMUy1IR0wgcGxhdGZvcm0uCisKIGNvbmZpZyBNQUNIX1RTNDA5CiAJYm9vbCAiUU5BUCBUUy00MDkiCiAJaGVscApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L01ha2VmaWxlCmluZGV4IDg5NzcyZmMuLmViNmVhYmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvTWFrZWZpbGUKQEAgLTUsNiArNSw3IEBACiBvYmotJChDT05GSUdfTUFDSF9URVJBU1RBVElPTl9QUk8yKQkrPSB0ZXJhc3RhdGlvbl9wcm8yLXNldHVwLm8KIG9iai0kKENPTkZJR19NQUNIX0xJTktTVEFUSU9OX1BSTykgKz0ga3Vyb2JveF9wcm8tc2V0dXAubwogb2JqLSQoQ09ORklHX01BQ0hfTElOS1NUQVRJT05fTUlOSSkgKz0gbHNtaW5pLXNldHVwLm8KK29iai0kKENPTkZJR19NQUNIX0xJTktTVEFUSU9OX0xTX0hHTCkgKz0gbHNfaGdsLXNldHVwLm8KIG9iai0kKENPTkZJR19NQUNIX0ROUzMyMykJKz0gZG5zMzIzLXNldHVwLm8KIG9iai0kKENPTkZJR19NQUNIX1RTMjA5KQkrPSB0czIwOS1zZXR1cC5vIHRzeDA5LWNvbW1vbi5vCiBvYmotJChDT05GSUdfTUFDSF9UUzQwOSkJKz0gdHM0MDktc2V0dXAubyB0c3gwOS1jb21tb24ubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2NvbW1vbi5jCmluZGV4IGY4N2ZhMTIuLjhkYzJjNzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9jb21tb24uYworKysgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvY29tbW9uLmMKQEAgLTQ4OCw3ICs0ODgsNyBAQAogCS5kZXYJCT0gewogCQkuZG1hX21hc2sJCT0gJm9yaW9uNXhfeG9yX2RtYW1hc2ssCiAJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSyg2NCksCi0JCS5wbGF0Zm9ybV9kYXRhCQk9ICh2b2lkICopJm9yaW9uNXhfeG9yMF9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmb3Jpb241eF94b3IwX2RhdGEsCiAJfSwKIH07CiAKQEAgLTUxNCw3ICs1MTQsNyBAQAogCS5kZXYJCT0gewogCQkuZG1hX21hc2sJCT0gJm9yaW9uNXhfeG9yX2RtYW1hc2ssCiAJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSyg2NCksCi0JCS5wbGF0Zm9ybV9kYXRhCQk9ICh2b2lkICopJm9yaW9uNXhfeG9yMV9kYXRhLAorCQkucGxhdGZvcm1fZGF0YQkJPSAmb3Jpb241eF94b3IxX2RhdGEsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kMm5ldC1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2QybmV0LXNldHVwLmMKaW5kZXggOWQ0YmY3Ni4uNzEzMDkwNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2QybmV0LXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2QybmV0LXNldHVwLmMKQEAgLTE0OSwxMCArMTQ5LDcgQEAKIAogLyoKICAqIFRoZSBibHVlIGZyb250IExFRCBpcyB3aXJlZCB0byB0aGUgQ1BMRCBhbmQgY2FuIGJsaW5rIGluIHJlbGF0aW9uIHdpdGggdGhlCi0gKiBTQVRBIGFjdGl2aXR5LiBUaGlzIGZlYXR1cmUgaXMgZGlzYWJsZWQgdG8gbWFrZSB0aGlzIExFRCBjb21wYXRpYmxlIHdpdGgKLSAqIHRoZSBsZWRzLWdwaW8gZHJpdmVyOiBNUFAxNCBhbmQgTVBQMTUgYXJlIGNvbmZpZ3VyZWQgdG8gYWN0IGxpa2Ugb3V0cHV0Ci0gKiBHUElPJ3MgYW5kIGhhdmUgdG8gc3RheSBpbiBhbiBhY3RpdmUgc3RhdGUuIFRoaXMgaXMgbmVlZGVkIHRvIHNldCB0aGUgYmx1ZQotICogTEVEIGluIGEgImZpeCBvbiIgc3RhdGUgcmVnYXJkbGVzcyBvZiB0aGUgU0FUQSBhY3Rpdml0eS4KKyAqIFNBVEEgYWN0aXZpdHkuCiAgKgogICogVGhlIGZvbGxvd2luZyBhcnJheSBkZXRhaWwgdGhlIGRpZmZlcmVudCBMRUQgcmVnaXN0ZXJzIGFuZCB0aGUgY29tYmluYXRpb24KICAqIG9mIHRoZWlyIHBvc3NpYmxlIHZhbHVlczoKQEAgLTE3MSwxMiArMTY4LDExIEBACiAjZGVmaW5lIEQyTkVUX0dQSU9fUkVEX0xFRAkJNgogI2RlZmluZSBEMk5FVF9HUElPX0JMVUVfTEVEX0JMSU5LX0NUUkwJMTYKICNkZWZpbmUgRDJORVRfR1BJT19CTFVFX0xFRF9PRkYJCTIzCi0jZGVmaW5lIEQyTkVUX0dQSU9fU0FUQTBfQUNUCQkxNAotI2RlZmluZSBEMk5FVF9HUElPX1NBVEExX0FDVAkJMTUKIAogc3RhdGljIHN0cnVjdCBncGlvX2xlZCBkMm5ldF9sZWRzW10gPSB7CiAJewotCQkubmFtZSA9ICJkMm5ldDpibHVlOnBvd2VyIiwKKwkJLm5hbWUgPSAiZDJuZXQ6Ymx1ZTpzYXRhIiwKKwkJLmRlZmF1bHRfdHJpZ2dlciA9ICJkZWZhdWx0LW9uIiwKIAkJLmdwaW8gPSBEMk5FVF9HUElPX0JMVUVfTEVEX09GRiwKIAkJLmFjdGl2ZV9sb3cgPSAxLAogCX0sCkBAIC0yMDEsMjUgKzE5NywyMiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgZDJuZXRfZ3Bpb19sZWRzX2luaXQodm9pZCkKIHsKKwlpbnQgZXJyOworCiAJLyogQ29uZmlndXJlIEdQSU8gb3ZlciBNUFAgbWF4IG51bWJlci4gKi8KIAlvcmlvbl9ncGlvX3NldF92YWxpZChEMk5FVF9HUElPX0JMVUVfTEVEX09GRiwgMSk7CiAKLQlpZiAoZ3Bpb19yZXF1ZXN0KEQyTkVUX0dQSU9fU0FUQTBfQUNULCAiTEVEIFNBVEEwIGFjdGl2aXR5IikgIT0gMCkKLQkJcmV0dXJuOwotCWlmIChncGlvX2RpcmVjdGlvbl9vdXRwdXQoRDJORVRfR1BJT19TQVRBMF9BQ1QsIDEpICE9IDApCi0JCWdvdG8gZXJyX2ZyZWVfMTsKLQlpZiAoZ3Bpb19yZXF1ZXN0KEQyTkVUX0dQSU9fU0FUQTFfQUNULCAiTEVEIFNBVEExIGFjdGl2aXR5IikgIT0gMCkKLQkJZ290byBlcnJfZnJlZV8xOwotCWlmIChncGlvX2RpcmVjdGlvbl9vdXRwdXQoRDJORVRfR1BJT19TQVRBMV9BQ1QsIDEpICE9IDApCi0JCWdvdG8gZXJyX2ZyZWVfMjsKLQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmQybmV0X2dwaW9fbGVkcyk7Ci0JcmV0dXJuOworCS8qIENvbmZpZ3VyZSByZWdpc3RlciBibGlua19jdHJsIHRvIGFsbG93IFNBVEEgYWN0aXZpdHkgTEVEIGJsaW5raW5nLiAqLworCWVyciA9IGdwaW9fcmVxdWVzdChEMk5FVF9HUElPX0JMVUVfTEVEX0JMSU5LX0NUUkwsICJibHVlIExFRCBibGluayIpOworCWlmIChlcnIgPT0gMCkgeworCQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoRDJORVRfR1BJT19CTFVFX0xFRF9CTElOS19DVFJMLCAxKTsKKwkJaWYgKGVycikKKwkJCWdwaW9fZnJlZShEMk5FVF9HUElPX0JMVUVfTEVEX0JMSU5LX0NUUkwpOworCX0KKwlpZiAoZXJyKQorCQlwcl9lcnIoImQybmV0OiBmYWlsZWQgdG8gY29uZmlndXJlIGJsdWUgTEVEIGJsaW5rIEdQSU9cbiIpOwogCi1lcnJfZnJlZV8yOgotCWdwaW9fZnJlZShEMk5FVF9HUElPX1NBVEExX0FDVCk7Ci1lcnJfZnJlZV8xOgotCWdwaW9fZnJlZShEMk5FVF9HUElPX1NBVEEwX0FDVCk7Ci0JcmV0dXJuOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZDJuZXRfZ3Bpb19sZWRzKTsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI4OSw4ICsyODIsOCBAQAogCXsgMTEsIE1QUF9VTlVTRUQgfSwKIAl7IDEyLCBNUFBfR1BJTyB9LAkvKiBTQVRBIDEgcG93ZXIgKi8KIAl7IDEzLCBNUFBfVU5VU0VEIH0sCi0JeyAxNCwgTVBQX0dQSU8gfSwJLyogU0FUQSAwIGFjdGl2ZSAqLwotCXsgMTUsIE1QUF9HUElPIH0sCS8qIFNBVEEgMSBhY3RpdmUgKi8KKwl7IDE0LCBNUFBfU0FUQV9MRUQgfSwJLyogU0FUQSAwIGFjdGl2ZSAqLworCXsgMTUsIE1QUF9TQVRBX0xFRCB9LAkvKiBTQVRBIDEgYWN0aXZlICovCiAJeyAxNiwgTVBQX0dQSU8gfSwJLyogQmx1ZSBmcm9udCBMRUQgYmxpbmsgY29udHJvbCAqLwogCXsgMTcsIE1QUF9VTlVTRUQgfSwKIAl7IDE4LCBNUFBfR1BJTyB9LAkvKiBGcm9udCBidXR0b24gKDAgPSBSZWxlYXNlZCwgMSA9IFB1c2hlZCApICovCkBAIC0zMDEsNiArMjk0LDggQEAKIAkvKiAyNDogSW5oaWJpdCBib2FyZCBwb3dlciBvZmYgKDAgPSBEaXNhYmxlZCwgMSA9IEVuYWJsZWQpICovCiB9OwogCisjZGVmaW5lIEQyTkVUX0dQSU9fSU5ISUJJVF9QT1dFUl9PRkYgICAgMjQKKwogc3RhdGljIHZvaWQgX19pbml0IGQybmV0X2luaXQodm9pZCkKIHsKIAkvKgpAQCAtMzMzLDYgKzMyOCw4IEBACiAKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBkMm5ldF9pMmNfZGV2aWNlcywKIAkJCQlBUlJBWV9TSVpFKGQybmV0X2kyY19kZXZpY2VzKSk7CisKKwlvcmlvbl9ncGlvX3NldF92YWxpZChEMk5FVF9HUElPX0lOSElCSVRfUE9XRVJfT0ZGLCAxKTsKIH0KIAogLyogV2FybmluZzogTGFDaWUgdXNlIGEgd3JvbmcgbWFjaC10eXBlICgweDIwZT01MjYpIGluIHRoZWlyIGJvb3Rsb2FkZXIuICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZG5zMzIzLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvZG5zMzIzLXNldHVwLmMKaW5kZXggOGYxNTlkYi4uNDIxYjgyZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2RuczMyMy1zZXR1cC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9kbnMzMjMtc2V0dXAuYwpAQCAtMzQsNyArMzQsOCBAQAogI2RlZmluZSBETlMzMjNfR1BJT19MRURfUklHSFRfQU1CRVIJMQogI2RlZmluZSBETlMzMjNfR1BJT19MRURfTEVGVF9BTUJFUgkyCiAjZGVmaW5lIEROUzMyM19HUElPX1NZU1RFTV9VUAkJMwotI2RlZmluZSBETlMzMjNfR1BJT19MRURfUE9XRVIJCTUKKyNkZWZpbmUgRE5TMzIzX0dQSU9fTEVEX1BPV0VSMQkJNAorI2RlZmluZSBETlMzMjNfR1BJT19MRURfUE9XRVIyCQk1CiAjZGVmaW5lIEROUzMyM19HUElPX09WRVJURU1QCQk2CiAjZGVmaW5lIEROUzMyM19HUElPX1JUQwkJCTcKICNkZWZpbmUgRE5TMzIzX0dQSU9fUE9XRVJfT0ZGCQk4CkBAIC0yMzcsMTEgKzIzOCwzMSBAQAogICogR1BJTyBMRURzIChzaW1wbGUgLSBkb2Vzbid0IHVzZSBoYXJkd2FyZSBibGlua2luZyBzdXBwb3J0KQogICovCiAKKyNkZWZpbmUgT1JJT05fQkxJTktfSEFMRl9QRVJJT0QgMTAwIC8qIG1zICovCisKK3N0YXRpYyBpbnQgZG5zMzIzX2dwaW9fYmxpbmtfc2V0KHVuc2lnbmVkIGdwaW8sCisJdW5zaWduZWQgbG9uZyAqZGVsYXlfb24sIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZikKK3sKKwlzdGF0aWMgaW50IHZhbHVlID0gMDsKKworCWlmICghKmRlbGF5X29uICYmICEqZGVsYXlfb2ZmKQorCQkqZGVsYXlfb24gPSAqZGVsYXlfb2ZmID0gT1JJT05fQkxJTktfSEFMRl9QRVJJT0Q7CisKKwlpZiAoT1JJT05fQkxJTktfSEFMRl9QRVJJT0QgPT0gKmRlbGF5X29uCisJICAgICYmIE9SSU9OX0JMSU5LX0hBTEZfUEVSSU9EID09ICpkZWxheV9vZmYpIHsKKwkJdmFsdWUgPSAhdmFsdWU7CisJCW9yaW9uX2dwaW9fc2V0X2JsaW5rKGdwaW8sIHZhbHVlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgZG5zMzIzX2xlZHNbXSA9IHsKIAl7CiAJCS5uYW1lID0gInBvd2VyOmJsdWUiLAotCQkuZ3BpbyA9IEROUzMyM19HUElPX0xFRF9QT1dFUiwKLQkJLmRlZmF1bHRfc3RhdGUgPSBMRURTX0dQSU9fREVGU1RBVEVfT04sCisJCS5ncGlvID0gRE5TMzIzX0dQSU9fTEVEX1BPV0VSMiwKKwkJLmRlZmF1bHRfdHJpZ2dlciA9ICJ0aW1lciIsCiAJfSwgewogCQkubmFtZSA9ICJyaWdodDphbWJlciIsCiAJCS5ncGlvID0gRE5TMzIzX0dQSU9fTEVEX1JJR0hUX0FNQkVSLApAQCAtMjU2LDYgKzI3Nyw3IEBACiBzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgZG5zMzIzX2xlZF9kYXRhID0gewogCS5udW1fbGVkcwk9IEFSUkFZX1NJWkUoZG5zMzIzX2xlZHMpLAogCS5sZWRzCQk9IGRuczMyM19sZWRzLAorCS5ncGlvX2JsaW5rX3NldCA9IGRuczMyM19ncGlvX2JsaW5rX3NldCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRuczMyM19ncGlvX2xlZHMgPSB7CkBAIC00MTIsNiArNDM0LDE0IEBACiAJb3Jpb241eF9zZXR1cF9kZXZfYm9vdF93aW4oRE5TMzIzX05PUl9CT09UX0JBU0UsIEROUzMyM19OT1JfQk9PVF9TSVpFKTsKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRuczMyM19ub3JfZmxhc2gpOwogCisJLyogVGhlIDUxODEgcG93ZXIgTEVEIGlzIGFjdGl2ZSBsb3cgYW5kIHJlcXVpcmVzCisJICogRE5TMzIzX0dQSU9fTEVEX1BPV0VSMSB0byBhbHNvIGJlIGxvdy4KKwkgKi8KKwlpZiAoZG5zMzIzX2Rldl9pZCgpID09IE1WODhGNTE4MV9ERVZfSUQpIHsKKwkJZG5zMzIzX2xlZHNbMF0uYWN0aXZlX2xvdyA9IDE7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChETlMzMjNfR1BJT19MRURfUE9XRVIxLCAwKTsKKwl9CisKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmRuczMyM19ncGlvX2xlZHMpOwogCiAJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbnMzMjNfYnV0dG9uX2RldmljZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbHNfaGdsLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbHNfaGdsLXNldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU1NjliZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9sc19oZ2wtc2V0dXAuYwpAQCAtMCwwICsxLDI3NiBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtb3Jpb241eC9sc19oZ2wtc2V0dXAuYworICoKKyAqIE1haW50YWluZXI6IFpodSBRaW5nc2VuIDx6aHVxc0Bjbi5mdWppdHN1LmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9hdGFfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPG1hY2gvb3Jpb241eC5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgIm1wcC5oIgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIExpbmtzdGF0aW9uIExTLUhHTCBJbmZvCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIDI1NksgTk9SIGZsYXNoIERldmljZSBidXMgYm9vdCBjaGlwIHNlbGVjdAorICovCisKKyNkZWZpbmUgTFNfSEdMX05PUl9CT09UX0JBU0UJMHhmNDAwMDAwMAorI2RlZmluZSBMU19IR0xfTk9SX0JPT1RfU0laRQlTWl8yNTZLCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogMjU2S0IgTk9SIEZsYXNoIG9uIEJPT1QgRGV2aWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbHNfaGdsX25vcl9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBsc19oZ2xfbm9yX2ZsYXNoX3Jlc291cmNlID0geworCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCS5zdGFydAk9IExTX0hHTF9OT1JfQk9PVF9CQVNFLAorCS5lbmQJPSBMU19IR0xfTk9SX0JPT1RfQkFTRSArIExTX0hHTF9OT1JfQk9PVF9TSVpFIC0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxzX2hnbF9ub3JfZmxhc2ggPSB7CisJLm5hbWUJCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmxzX2hnbF9ub3JfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCQk9IDEsCisJLnJlc291cmNlCQk9ICZsc19oZ2xfbm9yX2ZsYXNoX3Jlc291cmNlLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFdGhlcm5ldAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBsc19oZ2xfZXRoX2RhdGEgPSB7CisJLnBoeV9hZGRyCT0gOCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogUlRDIDVDMzcyYSBvbiBJMkMgYnVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBfX2luaXRkYXRhIGxzX2hnbF9pMmNfcnRjID0geworCUkyQ19CT0FSRF9JTkZPKCJyczVjMzcyYSIsIDB4MzIpLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBMRURzIGF0dGFjaGVkIHRvIEdQSU8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIExTX0hHTF9HUElPX0xFRF9BTEFSTSAgIDIKKyNkZWZpbmUgTFNfSEdMX0dQSU9fTEVEX0lORk8gICAgMworI2RlZmluZSBMU19IR0xfR1BJT19MRURfRlVOQyAgICAxNworI2RlZmluZSBMU19IR0xfR1BJT19MRURfUFdSICAgICAwCisKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZCBsc19oZ2xfbGVkX3BpbnNbXSA9IHsKKwl7CisJCS5uYW1lCSAgID0gImFsYXJtOnJlZCIsCisJCS5ncGlvCSAgID0gTFNfSEdMX0dQSU9fTEVEX0FMQVJNLAorCQkuYWN0aXZlX2xvdyAgICAgPSAxLAorCX0sIHsKKwkJLm5hbWUJICAgPSAiaW5mbzphbWJlciIsCisJCS5ncGlvCSAgID0gTFNfSEdMX0dQSU9fTEVEX0lORk8sCisJCS5hY3RpdmVfbG93ICAgICA9IDEsCisJfSwgeworCQkubmFtZQkgICA9ICJmdW5jOmJsdWU6dG9wIiwKKwkJLmdwaW8JICAgPSBMU19IR0xfR1BJT19MRURfRlVOQywKKwkJLmFjdGl2ZV9sb3cgICAgID0gMSwKKwl9LCB7CisJCS5uYW1lCSAgID0gInBvd2VyOmJsdWU6Ym90dG9tIiwKKwkJLmdwaW8JICAgPSBMU19IR0xfR1BJT19MRURfUFdSLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgbHNfaGdsX2xlZF9kYXRhID0geworCS5sZWRzCSAgID0gbHNfaGdsX2xlZF9waW5zLAorCS5udW1fbGVkcyAgICAgICA9IEFSUkFZX1NJWkUobHNfaGdsX2xlZF9waW5zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxzX2hnbF9sZWRzID0geworCS5uYW1lICAgPSAibGVkcy1ncGlvIiwKKwkuaWQgICAgID0gLTEsCisJLmRldiAgICA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgID0gJmxzX2hnbF9sZWRfZGF0YSwKKwl9LAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdQSU8gQXR0YWNoZWQgS2V5cworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIExTX0hHTF9HUElPX0tFWV9GVU5DICAgICAgIDE1CisjZGVmaW5lIExTX0hHTF9HUElPX0tFWV9QT1dFUiAgICAgIDgKKyNkZWZpbmUgTFNfSEdMX0dQSU9fS0VZX0FVVE9QT1dFUiAgMTAKKworI2RlZmluZSBMU19IR0xfU1dfUE9XRVIgICAgIDB4MDAKKyNkZWZpbmUgTFNfSEdMX1NXX0FVVE9QT1dFUiAweDAxCisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19rZXlzX2J1dHRvbiBsc19oZ2xfYnV0dG9uc1tdID0geworCXsKKwkJLmNvZGUJICAgPSBLRVlfT1BUSU9OLAorCQkuZ3BpbwkgICA9IExTX0hHTF9HUElPX0tFWV9GVU5DLAorCQkuZGVzYwkgICA9ICJGdW5jdGlvbiBCdXR0b24iLAorCQkuYWN0aXZlX2xvdyAgICAgPSAxLAorCX0sIHsKKwkJLnR5cGUJCT0gRVZfU1csCisJCS5jb2RlCSAgID0gTFNfSEdMX1NXX1BPV0VSLAorCQkuZ3BpbwkgICA9IExTX0hHTF9HUElPX0tFWV9QT1dFUiwKKwkJLmRlc2MJICAgPSAiUG93ZXItb24gU3dpdGNoIiwKKwkJLmFjdGl2ZV9sb3cgICAgID0gMSwKKwl9LCB7CisJCS50eXBlCQk9IEVWX1NXLAorCQkuY29kZQkgICA9IExTX0hHTF9TV19BVVRPUE9XRVIsCisJCS5ncGlvCSAgID0gTFNfSEdMX0dQSU9fS0VZX0FVVE9QT1dFUiwKKwkJLmRlc2MJICAgPSAiUG93ZXItYXV0byBTd2l0Y2giLAorCQkuYWN0aXZlX2xvdyAgICAgPSAxLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGxzX2hnbF9idXR0b25fZGF0YSA9IHsKKwkuYnV0dG9ucwk9IGxzX2hnbF9idXR0b25zLAorCS5uYnV0dG9ucyAgICAgICA9IEFSUkFZX1NJWkUobHNfaGdsX2J1dHRvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbHNfaGdsX2J1dHRvbl9kZXZpY2UgPSB7CisJLm5hbWUJICAgPSAiZ3Bpby1rZXlzIiwKKwkuaWQJICAgICA9IC0xLAorCS5udW1fcmVzb3VyY2VzICA9IDAsCisJLmRldgkgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhICA9ICZsc19oZ2xfYnV0dG9uX2RhdGEsCisJfSwKK307CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBTQVRBCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBzdHJ1Y3QgbXZfc2F0YV9wbGF0Zm9ybV9kYXRhIGxzX2hnbF9zYXRhX2RhdGEgPSB7CisJLm5fcG9ydHMJPSAyLAorfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIExpbmtzdGF0aW9uIExTLUhHTCBzcGVjaWZpYyBwb3dlciBvZmYgbWV0aG9kOiByZWJvb3QKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIE9uIHRoZSBMaW5rc3RhdGlvbiBMUy1IR0wsIHRoZSBzaHV0ZG93biBwcm9jZXNzIGlzIGZvbGxvd2luZzoKKyAqIC0gVXNlcmxhbmQgbW9uaXRvcnMga2V5IGV2ZW50cyB1bnRpbCB0aGUgcG93ZXIgc3dpdGNoIGdvZXMgdG8gb2ZmIHBvc2l0aW9uCisgKiAtIFRoZSBib2FyZCByZWJvb3RzCisgKiAtIFUtYm9vdCBzdGFydHMgYW5kIGdvZXMgaW50byBhbiBpZGxlIG1vZGUgd2FpdGluZyBmb3IgdGhlIHVzZXIKKyAqICAgdG8gbW92ZSB0aGUgc3dpdGNoIHRvIE9OIHBvc2l0aW9uCisgKi8KKworc3RhdGljIHZvaWQgbHNfaGdsX3Bvd2VyX29mZih2b2lkKQoreworCWFybV9tYWNoaW5lX3Jlc3RhcnQoJ2gnLCBOVUxMKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdlbmVyYWwgU2V0dXAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIExTX0hHTF9HUElPX1VTQl9QT1dFUgk5CisjZGVmaW5lIExTX0hHTF9HUElPX0FVVE9fUE9XRVIJMTAKKyNkZWZpbmUgTFNfSEdMX0dQSU9fUE9XRVIJICAgIDgKKworI2RlZmluZSBMU19IR0xfR1BJT19IRERfUE9XRVIJMQorCitzdGF0aWMgc3RydWN0IG9yaW9uNXhfbXBwX21vZGUgbHNfaGdsX21wcF9tb2Rlc1tdIF9faW5pdGRhdGEgPSB7CisJeyAgMCwgTVBQX0dQSU8gfSwgLyogTEVEX1BXUiAqLworCXsgIDEsIE1QUF9HUElPIH0sIC8qIEhERF9QV1IgKi8KKwl7ICAyLCBNUFBfR1BJTyB9LCAvKiBMRURfQUxBUk0gKi8KKwl7ICAzLCBNUFBfR1BJTyB9LCAvKiBMRURfSU5GTyAqLworCXsgIDQsIE1QUF9VTlVTRUQgfSwKKwl7ICA1LCBNUFBfVU5VU0VEIH0sCisJeyAgNiwgTVBQX0dQSU8gfSwgLyogRkFOX0xDSyAqLworCXsgIDcsIE1QUF9HUElPIH0sIC8qIElOSVQgKi8KKwl7ICA4LCBNUFBfR1BJTyB9LCAvKiBQT1dFUiAqLworCXsgIDksIE1QUF9HUElPIH0sIC8qIFVTQl9QV1IgKi8KKwl7IDEwLCBNUFBfR1BJTyB9LCAvKiBBVVRPX1BPV0VSICovCisJeyAxMSwgTVBQX1VOVVNFRCB9LCAvKiBMRURfRVRIIChkdW1teSkgKi8KKwl7IDEyLCBNUFBfVU5VU0VEIH0sCisJeyAxMywgTVBQX1VOVVNFRCB9LAorCXsgMTQsIE1QUF9VTlVTRUQgfSwKKwl7IDE1LCBNUFBfR1BJTyB9LCAvKiBGVU5DICovCisJeyAxNiwgTVBQX1VOVVNFRCB9LAorCXsgMTcsIE1QUF9HUElPIH0sIC8qIExFRF9GVU5DICovCisJeyAxOCwgTVBQX1VOVVNFRCB9LAorCXsgMTksIE1QUF9VTlVTRUQgfSwKKwl7IC0xIH0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgbHNfaGdsX2luaXQodm9pZCkKK3sKKwkvKgorCSAqIFNldHVwIGJhc2ljIE9yaW9uIGZ1bmN0aW9ucy4gTmVlZCB0byBiZSBjYWxsZWQgZWFybHkuCisJICovCisJb3Jpb241eF9pbml0KCk7CisKKwlvcmlvbjV4X21wcF9jb25mKGxzX2hnbF9tcHBfbW9kZXMpOworCisJLyoKKwkgKiBDb25maWd1cmUgcGVyaXBoZXJhbHMuCisJICovCisJb3Jpb241eF9laGNpMF9pbml0KCk7CisJb3Jpb241eF9laGNpMV9pbml0KCk7CisJb3Jpb241eF9ldGhfaW5pdCgmbHNfaGdsX2V0aF9kYXRhKTsKKwlvcmlvbjV4X2kyY19pbml0KCk7CisJb3Jpb241eF9zYXRhX2luaXQoJmxzX2hnbF9zYXRhX2RhdGEpOworCW9yaW9uNXhfdWFydDBfaW5pdCgpOworCW9yaW9uNXhfeG9yX2luaXQoKTsKKworCW9yaW9uNXhfc2V0dXBfZGV2X2Jvb3Rfd2luKExTX0hHTF9OT1JfQk9PVF9CQVNFLAorCQkJCSAgIExTX0hHTF9OT1JfQk9PVF9TSVpFKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmxzX2hnbF9ub3JfZmxhc2gpOworCisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZsc19oZ2xfYnV0dG9uX2RldmljZSk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmxzX2hnbF9sZWRzKTsKKworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDAsICZsc19oZ2xfaTJjX3J0YywgMSk7CisKKwkvKiBlbmFibGUgVVNCIHBvd2VyICovCisJZ3Bpb19zZXRfdmFsdWUoTFNfSEdMX0dQSU9fVVNCX1BPV0VSLCAxKTsKKworCS8qIHJlZ2lzdGVyIHBvd2VyLW9mZiBtZXRob2QgKi8KKwlwbV9wb3dlcl9vZmYgPSBsc19oZ2xfcG93ZXJfb2ZmOworCisJcHJfaW5mbygiJXM6IGZpbmlzaGVkXG4iLCBfX2Z1bmNfXyk7Cit9CisKK01BQ0hJTkVfU1RBUlQoTElOS1NUQVRJT05fTFNfSEdMLCAiQnVmZmFsbyBMaW5rc3RhdGlvbiBMUy1IR0wiKQorCS8qIE1haW50YWluZXI6IFpodSBRaW5nc2VuIDx6aHVxc0Bjbi5mdWppc3R1LmNvbT4gKi8KKwkucGh5c19pbwk9IE9SSU9ONVhfUkVHU19QSFlTX0JBU0UsCisJLmlvX3BnX29mZnN0CT0gKChPUklPTjVYX1JFR1NfVklSVF9CQVNFKSA+PiAxOCkgJiAweEZGRkMsCisJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKKwkuaW5pdF9tYWNoaW5lCT0gbHNfaGdsX2luaXQsCisJLm1hcF9pbwkJPSBvcmlvbjV4X21hcF9pbywKKwkuaW5pdF9pcnEJPSBvcmlvbjV4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmb3Jpb241eF90aW1lciwKKwkuZml4dXAJCT0gdGFnX2ZpeHVwX21lbTMyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb3Jpb241eC9sc21pbmktc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtb3Jpb241eC9sc21pbmktc2V0dXAuYwppbmRleCBjOWJmNmI4Li5jNzA0ZjA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9yaW9uNXgvbHNtaW5pLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vcmlvbjV4L2xzbWluaS1zZXR1cC5jCkBAIC0xMSw3ICsxMSw2IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvbXY2NDN4eF9ldGguaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CkBAIC0xOSwxMiArMTgsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2F0YV9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxtYWNoL29yaW9uNXguaD4KICNpbmNsdWRlICJjb21tb24uaCIKICNpbmNsdWRlICJtcHAuaCIKLSNpbmNsdWRlICJpbmNsdWRlL21hY2gvc3lzdGVtLmgiCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogTGlua3N0YXRpb24gTWluaSBJbmZvCkBAIC0xODYsNyArMTg2LDcgQEAKIAogc3RhdGljIHZvaWQgbHNtaW5pX3Bvd2VyX29mZih2b2lkKQogewotCWFyY2hfcmVzZXQoMCwgTlVMTCk7CisJYXJtX21hY2hpbmVfcmVzdGFydCgnaCcsIE5VTEwpOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXB4YS9LY29uZmlnCmluZGV4IGRlZTkyMTguLjM4ZmJkMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvS2NvbmZpZwpAQCAtMTE1LDYgKzExNSwxMSBAQAogCXNlbGVjdCBDUFVfUFhBMzEwCiAJc2VsZWN0IEhBVkVfUFdNCiAKK2NvbmZpZyBNQUNIX0NBUEM3MTE3CisJYm9vbCAiRW1iZWRpYW4gQ0FQQy03MTE3IGV2YWx1YXRpb24ga2l0IGJhc2VkIG9uIHRoZSBNWE0tOHgxMCBDb00iCisJc2VsZWN0IENQVV9QWEEzMjAKKwlzZWxlY3QgUFhBM3h4CisKIGNvbmZpZyBBUkNIX0dVTVNUSVgKIAlib29sICJHdW1zdGl4IFhTY2FsZSAyNTUgYm9hcmRzIgogCXNlbGVjdCBQWEEyNXgKQEAgLTQxNyw2ICs0MjIsMjQgQEAKIAkgIFNheSBZIGhlcmUgaWYgeW91IGludGVuZCB0byBydW4gdGhpcyBrZXJuZWwgb24gUGFsbSBUcmVvIDY4MAogCSAgc21hcnRwaG9uZS4KIAorY29uZmlnIE1BQ0hfUkFVTUZFTERfUkMKKwlib29sICJSYXVtZmVsZCBDb250cm9sbGVyIgorCXNlbGVjdCBQWEEzeHgKKwlzZWxlY3QgQ1BVX1BYQTMwMAorCXNlbGVjdCBIQVZFX1BXTQorCitjb25maWcgTUFDSF9SQVVNRkVMRF9DT05ORUNUT1IKKwlib29sICJSYXVtZmVsZCBDb25uZWN0b3IiCisJc2VsZWN0IFBYQTN4eAorCXNlbGVjdCBDUFVfUFhBMzAwCisJc2VsZWN0IFBYQV9TU1AKKworY29uZmlnIE1BQ0hfUkFVTUZFTERfU1BFQUtFUgorCWJvb2wgIlJhdW1mZWxkIFNwZWFrZXIiCisJc2VsZWN0IFBYQTN4eAorCXNlbGVjdCBDUFVfUFhBMzAwCisJc2VsZWN0IFBYQV9TU1AKKwogY29uZmlnIFBYQV9TSEFSUFNMCiAJYm9vbCAiU0hBUlAgWmF1cnVzIFNMLTU2MDAsIFNMLUM3eHggYW5kIFNMLUN4eDAwIE1vZGVscyIKIAlzZWxlY3QgU0hBUlBfU0NPT1AKQEAgLTQzNSw2ICs0NTgsNyBAQAogY29uZmlnIENPUkdJX1NTUF9ERVBSRUNBVEVECiAJYm9vbAogCXNlbGVjdCBQWEFfU1NQCisJc2VsZWN0IFBYQV9TU1BfTEVHQUNZCiAJaGVscAogCSAgVGhpcyBvcHRpb24gd2lsbCBpbmNsdWRlIGNvcmdpX3NzcC5jIGFuZCBjb3JnaV9sY2QuYwogCSAgdGhhdCBjb3JnaV90cy5jIGFuZCBvdGhlciBsZWdhY3kgZHJpdmVycyAoY29yZ2lfYmwuYwpAQCAtNDQ2LDYgKzQ3MCw3IEBACiAJc2VsZWN0IFBYQTI1eAogCXNlbGVjdCBTSEFSUF9MT0NPTU8KIAlzZWxlY3QgUFhBX1NTUAorCXNlbGVjdCBQWEFfSEFWRV9CT0FSRF9JUlFTCiAKIGNvbmZpZyBNQUNIX0NPUkdJCiAJYm9vbCAiRW5hYmxlIFNoYXJwIFNMLUM3MDAgKENvcmdpKSBTdXBwb3J0IgpAQCAtNDkyLDYgKzUxNywxMSBAQAogCXNlbGVjdCBQWEEyNXgKIAlzZWxlY3QgUFhBX0hBVkVfQk9BUkRfSVJRUwogCitjb25maWcgTUFDSF9JQ09OVFJPTAorCWJvb2wgIlRNVCBpQ29udHJvbC9TYWZlVENhbSBiYXNlZCBvbiB0aGUgTVhNLTh4MTAgQ29NIgorCXNlbGVjdCBDUFVfUFhBMzIwCisJc2VsZWN0IFBYQTN4eAorCiBjb25maWcgQVJDSF9QWEFfRVNFUklFUwogCWJvb2wgIlBYQSBiYXNlZCBUb3NoaWJhIGUtc2VyaWVzIFBEQXMiCiAJc2VsZWN0IFBYQTI1eApAQCAtNjI5LDYgKzY1OSwxMSBAQAogCWhlbHAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBQWEEyeHggU1NQIHBvcnRzCiAKK2NvbmZpZyBQWEFfU1NQX0xFR0FDWQorCWJvb2wKKwloZWxwCisJICBTdXBwb3J0IG9mIGxlZ2FjeSBTU1AgQVBJCisKIGNvbmZpZyBUT1NBX0JUCiAJdHJpc3RhdGUgIkNvbnRyb2wgdGhlIHN0YXRlIG9mIGJ1aWx0LWluIGJsdWV0b290aCBjaGlwIG9uIFNoYXJwIFNMLTYwMDAiCiAJZGVwZW5kcyBvbiBNQUNIX1RPU0EKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKaW5kZXggZjY0YWZkYS4uODZiYzg3YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvTWFrZWZpbGUKQEAgLTQ4LDYgKzQ4LDcgQEAKIGVuZGlmCiBvYmotJChDT05GSUdfTUFDSF9FTV9YMjcwKQkrPSBlbS14MjcwLm8KIG9iai0kKENPTkZJR19NQUNIX0NNX1gzMDApICAgICAgKz0gY20teDMwMC5vCitvYmotJChDT05GSUdfTUFDSF9DQVBDNzExNykgICAgICs9IGNhcGM3MTE3Lm8gbXhtOHgxMC5vCiBvYmotJChDT05GSUdfQVJDSF9HVU1TVElYKQkrPSBndW1zdGl4Lm8KIG9iai0kKENPTkZJR19HVU1TVElYX0FNMjAwRVBEKQkrPSBhbTIwMGVwZC5vCiBvYmotJChDT05GSUdfR1VNU1RJWF9BTTMwMEVQRCkJKz0gYW0zMDBlcGQubwpAQCAtODIsNiArODMsNyBAQAogb2JqLSQoQ09ORklHX0NPUkdJX1NTUF9ERVBSRUNBVEVEKQkrPSBjb3JnaV9zc3AubyBjb3JnaV9sY2Qubwogb2JqLSQoQ09ORklHX01BQ0hfUE9PRExFKQkrPSBwb29kbGUubwogb2JqLSQoQ09ORklHX01BQ0hfVE9TQSkJCSs9IHRvc2Eubworb2JqLSQoQ09ORklHX01BQ0hfSUNPTlRST0wpICAgICArPSBpY29udHJvbC5vIG14bTh4MTAubwogb2JqLSQoQ09ORklHX0FSQ0hfUFhBX0VTRVJJRVMpCSs9IGVzZXJpZXMubwogb2JqLSQoQ09ORklHX01BQ0hfRTMzMCkJCSs9IGUzMzAubwogb2JqLSQoQ09ORklHX01BQ0hfRTM1MCkJCSs9IGUzNTAubwpAQCAtODksNiArOTEsOSBAQAogb2JqLSQoQ09ORklHX01BQ0hfRTc1MCkJCSs9IGU3NTAubwogb2JqLSQoQ09ORklHX01BQ0hfRTQwMCkJCSs9IGU0MDAubwogb2JqLSQoQ09ORklHX01BQ0hfRTgwMCkJCSs9IGU4MDAubworb2JqLSQoQ09ORklHX01BQ0hfUkFVTUZFTERfUkMpCQkrPSByYXVtZmVsZC5vCitvYmotJChDT05GSUdfTUFDSF9SQVVNRkVMRF9DT05ORUNUT1IpCSs9IHJhdW1mZWxkLm8KK29iai0kKENPTkZJR19NQUNIX1JBVU1GRUxEX1NQRUFLRVIpCSs9IHJhdW1mZWxkLm8KIAogIyBTdXBwb3J0IGZvciBibGlua3kgbGlnaHRzCiBsZWQteSA6PSBsZWRzLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2FtMzAwZXBkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9hbTMwMGVwZC5jCmluZGV4IDRiZDEwYTEuLjk5M2Q3NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2FtMzAwZXBkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvYW0zMDBlcGQuYwpAQCAtMjg4LDcgKzI4OCw3IEBACiB9CiAKIG1vZHVsZV9wYXJhbShwYW5lbF90eXBlLCB1aW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocGFuZWxfdHlwZSwgIlNlbGVjdCB0aGUgcGFuZWwgdHlwZTogNiwgOCwgOTciKTsKK01PRFVMRV9QQVJNX0RFU0MocGFuZWxfdHlwZSwgIlNlbGVjdCB0aGUgcGFuZWwgdHlwZTogMzcsIDYsIDk3Iik7CiAKIE1PRFVMRV9ERVNDUklQVElPTigiYm9hcmQgZHJpdmVyIGZvciBhbTMwMCBlcGQga2l0Iik7CiBNT0RVTEVfQVVUSE9SKCJKYXlhIEt1bWFyIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9iYWxsb29uMy5jIGIvYXJjaC9hcm0vbWFjaC1weGEvYmFsbG9vbjMuYwppbmRleCBiOGNkMDdjLi5mM2I1YWNlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9iYWxsb29uMy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2JhbGxvb24zLmMKQEAgLTEzMiw2ICsxMzIsMTQgQEAKIAkJImVuYWJsZWRcbiIsIF9fZnVuY19fLCBCQUxMT09OM19BVVhfTklSUSk7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGJhbGxvb24zX2FjOTdfcGluX2NvbmZpZ1tdID0geworCUdQSU8yOF9BQzk3X0JJVENMSywKKwlHUElPMjlfQUM5N19TREFUQV9JTl8wLAorCUdQSU8zMF9BQzk3X1NEQVRBX09VVCwKKwlHUElPMzFfQUM5N19TWU5DLAorCUdQSU8xMTNfQUM5N19uUkVTRVQsCit9OworCiBzdGF0aWMgdm9pZCBiYWxsb29uM19iYWNrbGlnaHRfcG93ZXIoaW50IG9uKQogewogCXByX2RlYnVnKCIlczogcG93ZXIgaXMgJXNcbiIsIF9fZnVuY19fLCBvbiA/ICJvbiIgOiAib2ZmIik7CkBAIC0xNDAsMjYgKzE0OCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJhbGxvb24zX2xjZF9waW5fY29uZmlnW10gPSB7CiAJLyogTENEIC0gMTZicHAgQWN0aXZlIFRGVCAqLwotCUdQSU81OF9MQ0RfTEREXzAsCi0JR1BJTzU5X0xDRF9MRERfMSwKLQlHUElPNjBfTENEX0xERF8yLAotCUdQSU82MV9MQ0RfTEREXzMsCi0JR1BJTzYyX0xDRF9MRERfNCwKLQlHUElPNjNfTENEX0xERF81LAotCUdQSU82NF9MQ0RfTEREXzYsCi0JR1BJTzY1X0xDRF9MRERfNywKLQlHUElPNjZfTENEX0xERF84LAotCUdQSU82N19MQ0RfTEREXzksCi0JR1BJTzY4X0xDRF9MRERfMTAsCi0JR1BJTzY5X0xDRF9MRERfMTEsCi0JR1BJTzcwX0xDRF9MRERfMTIsCi0JR1BJTzcxX0xDRF9MRERfMTMsCi0JR1BJTzcyX0xDRF9MRERfMTQsCi0JR1BJTzczX0xDRF9MRERfMTUsCi0JR1BJTzc0X0xDRF9GQ0xLLAotCUdQSU83NV9MQ0RfTENMSywKLQlHUElPNzZfTENEX1BDTEssCi0JR1BJTzc3X0xDRF9CSUFTLAorCUdQSU94eF9MQ0RfVEZUXzE2QlBQLAogCiAJR1BJTzk5X0dQSU8sCQkvKiBCYWNrbGlnaHQgKi8KIH07CkBAIC0zMTEsOCArMzAwLDEwIEBACiAJcHhhX3NldF9zdHVhcnRfaW5mbyhOVUxMKTsKIAogCXB4YV9zZXRfaTJjX2luZm8oTlVMTCk7Ci0JaWYgKGJhbGxvb24zX2hhcyhCQUxMT09OM19GRUFUVVJFX0FVRElPKSkKKwlpZiAoYmFsbG9vbjNfaGFzKEJBTExPT04zX0ZFQVRVUkVfQVVESU8pKSB7CisJCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGJhbGxvb24zX2FjOTdfcGluX2NvbmZpZykpOwogCQlweGFfc2V0X2FjOTdfaW5mbyhOVUxMKTsKKwl9CiAKIAlpZiAoYmFsbG9vbjNfaGFzKEJBTExPT04zX0ZFQVRVUkVfVE9QUE9MWSkpIHsKIAkJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoYmFsbG9vbjNfbGNkX3Bpbl9jb25maWcpKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NhcGM3MTE3LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jYXBjNzExNy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZTU0NDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jYXBjNzExNy5jCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogbGludXgvYXJjaC9hcm0vbWFjaC1weGEvY2FwYzcxMTcuYworICoKKyAqIFN1cHBvcnQgZm9yIHRoZSBFbWJlZGlhbiBDQVBDLTcxMTcgRXZhbHVhdGlvbiBLaXQKKyAqIGJhc2VkIG9uIHRoZSBFbWJlZGlhbiBNWE0tOHgxMCBDb21wdXRlciBvbiBNb2R1bGUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRW1iZWRpYW4gSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRNVCBTZXJ2aWNlcyAmIFN1cHBsaWVzIChQdHkpIEx0ZC4KKyAqCisgKiAyMDA3LTA5LTA0OiBlcmljIG1pYW8gPGVyaWMueS5taWFvQGdtYWlsLmNvbT4KKyAqICAgICAgICAgICAgIHJld3JpdGUgdG8gYWxpZ24gd2l0aCBsYXRlc3Qga2VybmVsCisgKgorICogMjAxMC0wMS0wOTogRWR3aW4gUGVlciA8ZXBlZXJAdG10c2VydmljZXMuY28uemE+CisgKiAgICAgICAgICAgICBIZW5uaWUgdmFuIGRlciBNZXJ3ZSA8aHZkbWVyd2VAdG10c2VydmljZXMuY28uemE+CisgKiAgICAgICAgICAgICByZXdvcmsgZm9yIHVwc3RyZWFtIG1lcmdlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYXRhX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMzIwLmg+CisjaW5jbHVkZSA8bWFjaC9teG04eDEwLmg+CisKKyNpbmNsdWRlICJnZW5lcmljLmgiCisKKy8qIElERSAoUEFUQSkgU3VwcG9ydCAqLworc3RhdGljIHN0cnVjdCBwYXRhX3BsYXRmb3JtX2luZm8gcGF0YV9wbGF0Zm9ybV9kYXRhID0geworCS5pb3BvcnRfc2hpZnQgPSAxCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNhcGM3MTE3X2lkZV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJICAgICAgIC5zdGFydCA9IDB4MTEwMDAwMjAsCisJICAgICAgIC5lbmQgPSAweDExMDAwMDNmLAorCSAgICAgICAuZmxhZ3MgPSBJT1JFU09VUkNFX01FTQorCX0sCisJWzFdID0geworCSAgICAgICAuc3RhcnQgPSAweDExMDAwMDFjLAorCSAgICAgICAuZW5kID0gMHgxMTAwMDAxYywKKwkgICAgICAgLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0KKwl9LAorCVsyXSA9IHsKKwkgICAgICAgLnN0YXJ0ID0gZ3Bpb190b19pcnEobWZwX3RvX2dwaW8oTUZQX1BJTl9HUElPNzYpKSwKKwkgICAgICAgLmVuZCA9IGdwaW9fdG9faXJxKG1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzc2KSksCisJICAgICAgIC5mbGFncyA9IElPUkVTT1VSQ0VfSVJRIHwgSVJRRl9UUklHR0VSX1JJU0lORworCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNhcGM3MTE3X2lkZV9kZXZpY2UgPSB7CisJLm5hbWUgPSAicGF0YV9wbGF0Zm9ybSIsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGNhcGM3MTE3X2lkZV9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSA9IGNhcGM3MTE3X2lkZV9yZXNvdXJjZXMsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcGF0YV9wbGF0Zm9ybV9kYXRhLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSB+MAkJLyogZ3J1bWJsZSAqLworCX0KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBjYXBjNzExN19pZGVfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmY2FwYzcxMTdfaWRlX2RldmljZSk7Cit9CisKKy8qIFRJMTZDNzUyIFVBUlQgc3VwcG9ydCAqLworI2RlZmluZQlUSTE2Qzc1Ml9GTEFHUwkJKFVQRl9CT09UX0FVVE9DT05GIHwgXAorCQkJCQlVUEZfSU9SRU1BUCB8IFwKKwkJCQkJVVBGX0JVR0dZX1VBUlQgfCBcCisJCQkJCVVQRl9TS0lQX1RFU1QpCisjZGVmaW5lCVRJMTZDNzUyX1VBUlRDTEsJKDIyMTE4NDAwKQorc3RhdGljIHN0cnVjdCBwbGF0X3NlcmlhbDgyNTBfcG9ydCB0aTE2Yzc1Ml9wbGF0Zm9ybV9kYXRhW10gPSB7CisJWzBdID0geworCSAgICAgICAubWFwYmFzZSA9IDB4MTQwMDAwMDAsCisJICAgICAgIC5pcnEgPSBncGlvX3RvX2lycShtZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU83OCkpLAorCSAgICAgICAuaXJxZmxhZ3MgPSBJUlFGX1RSSUdHRVJfUklTSU5HLAorCSAgICAgICAuZmxhZ3MgPSBUSTE2Qzc1Ml9GTEFHUywKKwkgICAgICAgLmlvdHlwZSA9IFVQSU9fTUVNLAorCSAgICAgICAucmVnc2hpZnQgPSAxLAorCSAgICAgICAudWFydGNsayA9IFRJMTZDNzUyX1VBUlRDTEsKKwl9LAorCVsxXSA9IHsKKwkgICAgICAgLm1hcGJhc2UgPSAweDE0MDAwMDQwLAorCSAgICAgICAuaXJxID0gZ3Bpb190b19pcnEobWZwX3RvX2dwaW8oTUZQX1BJTl9HUElPNzkpKSwKKwkgICAgICAgLmlycWZsYWdzID0gSVJRRl9UUklHR0VSX1JJU0lORywKKwkgICAgICAgLmZsYWdzID0gVEkxNkM3NTJfRkxBR1MsCisJICAgICAgIC5pb3R5cGUgPSBVUElPX01FTSwKKwkgICAgICAgLnJlZ3NoaWZ0ID0gMSwKKwkgICAgICAgLnVhcnRjbGsgPSBUSTE2Qzc1Ml9VQVJUQ0xLCisJfSwKKwlbMl0gPSB7CisJICAgICAgIC5tYXBiYXNlID0gMHgxNDAwMDA4MCwKKwkgICAgICAgLmlycSA9IGdwaW9fdG9faXJxKG1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzgwKSksCisJICAgICAgIC5pcnFmbGFncyA9IElSUUZfVFJJR0dFUl9SSVNJTkcsCisJICAgICAgIC5mbGFncyA9IFRJMTZDNzUyX0ZMQUdTLAorCSAgICAgICAuaW90eXBlID0gVVBJT19NRU0sCisJICAgICAgIC5yZWdzaGlmdCA9IDEsCisJICAgICAgIC51YXJ0Y2xrID0gVEkxNkM3NTJfVUFSVENMSworCX0sCisJWzNdID0geworCSAgICAgICAubWFwYmFzZSA9IDB4MTQwMDAwYzAsCisJICAgICAgIC5pcnEgPSBncGlvX3RvX2lycShtZnBfdG9fZ3BpbyhNRlBfUElOX0dQSU84MSkpLAorCSAgICAgICAuaXJxZmxhZ3MgPSBJUlFGX1RSSUdHRVJfUklTSU5HLAorCSAgICAgICAuZmxhZ3MgPSBUSTE2Qzc1Ml9GTEFHUywKKwkgICAgICAgLmlvdHlwZSA9IFVQSU9fTUVNLAorCSAgICAgICAucmVnc2hpZnQgPSAxLAorCSAgICAgICAudWFydGNsayA9IFRJMTZDNzUyX1VBUlRDTEsKKwl9LAorCVs0XSA9IHsKKwkgICAgICAgLyogZW5kIG9mIGFycmF5ICovCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdGkxNmM3NTJfZGV2aWNlID0geworCS5uYW1lID0gInNlcmlhbDgyNTAiLAorCS5pZCA9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9IHRpMTZjNzUyX3BsYXRmb3JtX2RhdGEKKwl9Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgY2FwYzcxMTdfdWFydHNfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmdGkxNmM3NTJfZGV2aWNlKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGNhcGM3MTE3X2luaXQodm9pZCkKK3sKKwkvKiBJbml0IENvTSAqLworCW14bV84eDEwX2JhcmVib25lc19pbml0KCk7CisKKwkvKiBJbml0IGV2YWx1YXRpb24gYm9hcmQgcGVyaXBoZXJhbHMgKi8KKwlteG1fOHgxMF9hYzk3X2luaXQoKTsKKwlteG1fOHgxMF91c2JfaG9zdF9pbml0KCk7CisJbXhtXzh4MTBfbW1jX2luaXQoKTsKKworCWNhcGM3MTE3X3VhcnRzX2luaXQoKTsKKwljYXBjNzExN19pZGVfaW5pdCgpOworfQorCitNQUNISU5FX1NUQVJUKENBUEM3MTE3LAorCSAgICAgICJFbWJlZGlhbiBDQVBDLTcxMTcgZXZhbHVhdGlvbiBraXQgYmFzZWQgb24gdGhlIE1YTS04eDEwIENvTSIpCisJLnBoeXNfaW8gPSAweDQwMDAwMDAwLAorCS5ib290X3BhcmFtcyA9IDB4YTAwMDAxMDAsCisJLmlvX3BnX29mZnN0ID0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLm1hcF9pbyA9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxID0gcHhhM3h4X2luaXRfaXJxLAorCS50aW1lciA9ICZweGFfdGltZXIsCisJLmluaXRfbWFjaGluZSA9IGNhcGM3MTE3X2luaXQKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjU1LmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjU1LmMKaW5kZXggMjUzZmQ3Ni4uZjFhNzcwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDI1NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNTUuYwpAQCAtNTAsMjYgKzUwLDcgQEAKIAlHUElPNDdfU1RVQVJUX1RYRCwKIAogCS8qIExDRCAqLwotCUdQSU81OF9MQ0RfTEREXzAsCi0JR1BJTzU5X0xDRF9MRERfMSwKLQlHUElPNjBfTENEX0xERF8yLAotCUdQSU82MV9MQ0RfTEREXzMsCi0JR1BJTzYyX0xDRF9MRERfNCwKLQlHUElPNjNfTENEX0xERF81LAotCUdQSU82NF9MQ0RfTEREXzYsCi0JR1BJTzY1X0xDRF9MRERfNywKLQlHUElPNjZfTENEX0xERF84LAotCUdQSU82N19MQ0RfTEREXzksCi0JR1BJTzY4X0xDRF9MRERfMTAsCi0JR1BJTzY5X0xDRF9MRERfMTEsCi0JR1BJTzcwX0xDRF9MRERfMTIsCi0JR1BJTzcxX0xDRF9MRERfMTMsCi0JR1BJTzcyX0xDRF9MRERfMTQsCi0JR1BJTzczX0xDRF9MRERfMTUsCi0JR1BJTzc0X0xDRF9GQ0xLLAotCUdQSU83NV9MQ0RfTENMSywKLQlHUElPNzZfTENEX1BDTEssCi0JR1BJTzc3X0xDRF9CSUFTLAorCUdQSU94eF9MQ0RfVEZUXzE2QlBQLAogCiAJLyogU1NQMSAqLwogCUdQSU8yM19TU1AxX1NDTEssCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14MjcwLmMKaW5kZXggZWVhNzhiNi4uYTk5MjZiYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY20teDI3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyNzAuYwpAQCAtNzEsMjYgKzcxLDcgQEAKIAlHUElPMTExX01NQ19EQVRfMywKIAogCS8qIExDRCAqLwotCUdQSU81OF9MQ0RfTEREXzAsCi0JR1BJTzU5X0xDRF9MRERfMSwKLQlHUElPNjBfTENEX0xERF8yLAotCUdQSU82MV9MQ0RfTEREXzMsCi0JR1BJTzYyX0xDRF9MRERfNCwKLQlHUElPNjNfTENEX0xERF81LAotCUdQSU82NF9MQ0RfTEREXzYsCi0JR1BJTzY1X0xDRF9MRERfNywKLQlHUElPNjZfTENEX0xERF84LAotCUdQSU82N19MQ0RfTEREXzksCi0JR1BJTzY4X0xDRF9MRERfMTAsCi0JR1BJTzY5X0xDRF9MRERfMTEsCi0JR1BJTzcwX0xDRF9MRERfMTIsCi0JR1BJTzcxX0xDRF9MRERfMTMsCi0JR1BJTzcyX0xDRF9MRERfMTQsCi0JR1BJTzczX0xDRF9MRERfMTUsCi0JR1BJTzc0X0xDRF9GQ0xLLAotCUdQSU83NV9MQ0RfTENMSywKLQlHUElPNzZfTENEX1BDTEssCi0JR1BJTzc3X0xDRF9CSUFTLAorCUdQSU94eF9MQ0RfVEZUXzE2QlBQLAogCiAJLyogSTJDICovCiAJR1BJTzExN19JMkNfU0NMLApAQCAtMTk1LDMzICsxNzYsNTcgQEAKIAl9LAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgc2F2ZV9sY2RfcmVnc1sxMF07CitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbXgyNzBfbWFyYXRob25fb25bXSA9IHsKKwlHUElPNThfR1BJTywKKwlHUElPNTlfR1BJTywKKwlHUElPNjBfR1BJTywKKwlHUElPNjFfR1BJTywKKwlHUElPNjJfR1BJTywKKwlHUElPNjNfR1BJTywKKwlHUElPNjRfR1BJTywKKwlHUElPNjVfR1BJTywKKwlHUElPNjZfR1BJTywKKwlHUElPNjdfR1BJTywKKwlHUElPNjhfR1BJTywKKwlHUElPNjlfR1BJTywKKwlHUElPNzBfR1BJTywKKwlHUElPNzFfR1BJTywKKwlHUElPNzJfR1BJTywKKwlHUElPNzNfR1BJTywKKwlHUElPNzRfR1BJTywKKwlHUElPNzVfR1BJTywKKwlHUElPNzZfR1BJTywKKwlHUElPNzdfR1BJTywKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNteDI3MF9tYXJhdGhvbl9vZmZbXSA9IHsKKwlHUElPeHhfTENEX1RGVF8xNkJQUCwKK307CiAKIHN0YXRpYyBpbnQgY214MjcwX21hcmF0aG9uX3Byb2JlKHN0cnVjdCBmYl9pbmZvICpmYikKIHsKLQkvKiBzYXZlIFBYQS0yNzAgcGluIHNldHRpbmdzIGJlZm9yZSBlbmFibGluZyAyNzAwRyAqLwotCXNhdmVfbGNkX3JlZ3NbMF0gPSBHUERSMTsKLQlzYXZlX2xjZF9yZWdzWzFdID0gR1BEUjI7Ci0Jc2F2ZV9sY2RfcmVnc1syXSA9IEdBRlIxX1U7Ci0Jc2F2ZV9sY2RfcmVnc1szXSA9IEdBRlIyX0w7Ci0Jc2F2ZV9sY2RfcmVnc1s0XSA9IEdBRlIyX1U7CisJaW50IGdwaW8sIGVycjsKIAotCS8qIERpc2FibGUgUFhBLTI3MCBvbi1jaGlwIGNvbnRyb2xsZXIgZHJpdmluZyBwaW5zICovCi0JR1BEUjEgJj0gfigweGZjMDAwMDAwKTsKLQlHUERSMiAmPSB+KDB4MDBjMDNmZmYpOwotCUdBRlIxX1UgJj0gfigweGZmZjAwMDAwKTsKLQlHQUZSMl9MICY9IH4oMHgwZmZmZmZmZik7Ci0JR0FGUjJfVSAmPSB+KDB4MDAwMGYwMDApOworCWZvciAoZ3BpbyA9IDU4OyBncGlvIDw9IDc3OyBncGlvKyspIHsKKwkJZXJyID0gZ3Bpb19yZXF1ZXN0KGdwaW8sICJMQ0QiKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCWdwaW9fZGlyZWN0aW9uX2lucHV0KGdwaW8pOworCX0KKworCXB4YTJ4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKGNteDI3MF9tYXJhdGhvbl9vbikpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNteDI3MF9tYXJhdGhvbl9yZW1vdmUoc3RydWN0IGZiX2luZm8gKmZiKQogewotCUdQRFIxID0gICBzYXZlX2xjZF9yZWdzWzBdOwotCUdQRFIyID0gICBzYXZlX2xjZF9yZWdzWzFdOwotCUdBRlIxX1UgPSBzYXZlX2xjZF9yZWdzWzJdOwotCUdBRlIyX0wgPSBzYXZlX2xjZF9yZWdzWzNdOwotCUdBRlIyX1UgPSBzYXZlX2xjZF9yZWdzWzRdOworCWludCBncGlvOworCisJcHhhMnh4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUoY214MjcwX21hcmF0aG9uX29mZikpOworCisJZm9yIChncGlvID0gNTg7IGdwaW8gPD0gNzc7IGdwaW8rKykKKwkJZ3Bpb19mcmVlKGdwaW8pOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyeHgtcGNpLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jbS14Mnh4LXBjaS5jCmluZGV4IDc4NzNmYTMuLjE2MWZjMmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2NtLXgyeHgtcGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvY20teDJ4eC1wY2kuYwpAQCAtNTksNyArNTksNyBAQAogc3RhdGljIHZvaWQgY214Mnh4X2l0ODE1Ml9pcnFfZGVtdXgodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQogewogCS8qIGNsZWFyIG91ciBwYXJlbnQgaXJxICovCi0JR0VEUihjbXgyeHhfaXQ4MTUyX2lycV9ncGlvKSA9IEdQSU9fYml0KGNteDJ4eF9pdDgxNTJfaXJxX2dwaW8pOworCWRlc2MtPmNoaXAtPmFjayhpcnEpOwogCiAJaXQ4MTUyX2lycV9kZW11eChpcnEsIGRlc2MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2lfc3NwLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYwppbmRleCBhNWVlNzA3Li4xZDliYzExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaV9zc3AuYwpAQCAtMjA0LDcgKzIwNCw3IEBACiAJc3NwX21hY2hpbmZvID0gbWFjaGluZm87CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGNvcmdpX3NzcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjb3JnaV9zc3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCByZXQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2U3NDAuYwppbmRleCA5NGIyM2E5Li5kNTc4MDIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lNzQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc0MC5jCkBAIC0xMzQsNiArMTM0LDEyIEBACiAJLyogSXJEQSAqLwogCUdQSU8zOF9HUElPIHwgTUZQX0xQTV9EUklWRV9ISUdILAogCisJLyogQUM5NyAqLworCUdQSU8yOF9BQzk3X0JJVENMSywKKwlHUElPMjlfQUM5N19TREFUQV9JTl8wLAorCUdQSU8zMF9BQzk3X1NEQVRBX09VVCwKKwlHUElPMzFfQUM5N19TWU5DLAorCiAJLyogQXVkaW8gcG93ZXIgY29udHJvbCAqLwogCUdQSU8xNl9HUElPLCAgLyogQUM5NyBjb2RlYyBBVkREMiBzdXBwbHkgKGFuYWxvZ3VlIHBvd2VyKSAqLwogCUdQSU80MF9HUElPLCAgLyogTWljIGFtcCBwb3dlciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvZTc1MC5jCmluZGV4IDVlY2NiY2UuLmFmODNjYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2U3NTAuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9lNzUwLmMKQEAgLTEzMiw2ICsxMzIsMTIgQEAKIAkvKiBJckRBICovCiAJR1BJTzM4X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0hJR0gsCiAKKwkvKiBBQzk3ICovCisJR1BJTzI4X0FDOTdfQklUQ0xLLAorCUdQSU8yOV9BQzk3X1NEQVRBX0lOXzAsCisJR1BJTzMwX0FDOTdfU0RBVEFfT1VULAorCUdQSU8zMV9BQzk3X1NZTkMsCisKIAkvKiBBdWRpbyBwb3dlciBjb250cm9sICovCiAJR1BJTzRfR1BJTywgIC8qIEhlYWRwaG9uZSBhbXAgcG93ZXIgKi8KIAlHUElPN19HUElPLCAgLyogU3BlYWtlciBhbXAgcG93ZXIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2U4MDAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2U4MDAuYwppbmRleCBhYWQxMjliLi44ZWE5N2JmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lODAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZTgwMC5jCkBAIC0zNSw2ICszNSwxNCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gZTgwMCBMQ0QgZGVmaW5pdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBlODAwX3Bpbl9jb25maWdbXSBfX2luaXRkYXRhID0geworCS8qIEFDOTcgKi8KKwlHUElPMjhfQUM5N19CSVRDTEssCisJR1BJTzI5X0FDOTdfU0RBVEFfSU5fMCwKKwlHUElPMzBfQUM5N19TREFUQV9PVVQsCisJR1BJTzMxX0FDOTdfU1lOQywKK307CisKIHN0YXRpYyBzdHJ1Y3QgdzEwMF9nZW5fcmVncyBlODAwX2xjZF9yZWdzID0gewogCS5sY2RfZm9ybWF0ID0gICAgICAgICAgICAweDAwMDA4MDAzLAogCS5sY2RkX2NudGwxID0gICAgICAgICAgICAweDAyYTAwMDAwLApAQCAtMTk1LDYgKzIwMyw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBlODAwX2luaXQodm9pZCkKIHsKKwlweGEyeHhfbWZwX2NvbmZpZyhBUlJBWV9BTkRfU0laRShlODAwX3Bpbl9jb25maWcpKTsKIAlweGFfc2V0X2ZmdWFydF9pbmZvKE5VTEwpOwogCXB4YV9zZXRfYnR1YXJ0X2luZm8oTlVMTCk7CiAJcHhhX3NldF9zdHVhcnRfaW5mbyhOVUxMKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2VtLXgyNzAuYwppbmRleCBjOGEwMWJjLi5hYWIwNGYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9lbS14MjcwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvZW0teDI3MC5jCkBAIC0xMDksMjYgKzEwOSw3IEBACiAJR1BJTzExMV9NTUNfREFUXzMsCiAKIAkvKiBMQ0QgKi8KLQlHUElPNThfTENEX0xERF8wLAotCUdQSU81OV9MQ0RfTEREXzEsCi0JR1BJTzYwX0xDRF9MRERfMiwKLQlHUElPNjFfTENEX0xERF8zLAotCUdQSU82Ml9MQ0RfTEREXzQsCi0JR1BJTzYzX0xDRF9MRERfNSwKLQlHUElPNjRfTENEX0xERF82LAotCUdQSU82NV9MQ0RfTEREXzcsCi0JR1BJTzY2X0xDRF9MRERfOCwKLQlHUElPNjdfTENEX0xERF85LAotCUdQSU82OF9MQ0RfTEREXzEwLAotCUdQSU82OV9MQ0RfTEREXzExLAotCUdQSU83MF9MQ0RfTEREXzEyLAotCUdQSU83MV9MQ0RfTEREXzEzLAotCUdQSU83Ml9MQ0RfTEREXzE0LAotCUdQSU83M19MQ0RfTEREXzE1LAotCUdQSU83NF9MQ0RfRkNMSywKLQlHUElPNzVfTENEX0xDTEssCi0JR1BJTzc2X0xDRF9QQ0xLLAotCUdQSU83N19MQ0RfQklBUywKKwlHUElPeHhfTENEX1RGVF8xNkJQUCwKIAogCS8qIFFDSSAqLwogCUdQSU84NF9DSUZfRlYsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pY29udHJvbC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaWNvbnRyb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzExMzdmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaWNvbnRyb2wuYwpAQCAtMCwwICsxLDIwMiBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtcHhhL2ljb250cm9sLmMKKyAqCisgKiBTdXBwb3J0IGZvciB0aGUgaUNvbnRyb2wgYW5kIFNhZmVUY2FtIHBsYXRmb3JtcyBmcm9tIFRNVCBTZXJ2aWNlcworICogdXNpbmcgdGhlIEVtYmVkaWFuIE1YTS04eDEwIENvbXB1dGVyIG9uIE1vZHVsZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBUTVQgU2VydmljZXMgJiBTdXBwbGllcyAoUHR5KSBMdGQuCisgKgorICogMjAxMC0wMS0yMSBIZW5uaWUgdmFuIGRlciBNZXJ2ZSA8aHZkbWVyd2VAdG10c2Vydmllcy5jby56YT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2luY2x1ZGUgPG1hY2gvcHhhMzIwLmg+CisjaW5jbHVkZSA8bWFjaC9teG04eDEwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bWFjaC9weGEyeHhfc3BpLmg+CisjaW5jbHVkZSA8bGludXgvY2FuL3BsYXRmb3JtL21jcDI1MXguaD4KKworI2luY2x1ZGUgImdlbmVyaWMuaCIKKworI2RlZmluZSBJQ09OVFJPTF9NQ1AyNTF4X25DUzEJKDE1KQorI2RlZmluZSBJQ09OVFJPTF9NQ1AyNTF4X25DUzIJKDE2KQorI2RlZmluZSBJQ09OVFJPTF9NQ1AyNTF4X25DUzMJKDE3KQorI2RlZmluZSBJQ09OVFJPTF9NQ1AyNTF4X25DUzQJKDI0KQorCisjZGVmaW5lIElDT05UUk9MX01DUDI1MXhfbklSUTEJKDc0KQorI2RlZmluZSBJQ09OVFJPTF9NQ1AyNTF4X25JUlEyCSg3NSkKKyNkZWZpbmUgSUNPTlRST0xfTUNQMjUxeF9uSVJRMwkoNzYpCisjZGVmaW5lIElDT05UUk9MX01DUDI1MXhfbklSUTQJKDc3KQorCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCBtY3AyNTF4X2NoaXBfaW5mbzEgPSB7CisJLnR4X3RocmVzaG9sZCAgID0gOCwKKwkucnhfdGhyZXNob2xkICAgPSAxMjgsCisJLmRtYV9idXJzdF9zaXplID0gOCwKKwkudGltZW91dCAgICAgICAgPSAyMzUsCisJLmdwaW9fY3MgICAgICAgID0gSUNPTlRST0xfTUNQMjUxeF9uQ1MxCit9OworCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCBtY3AyNTF4X2NoaXBfaW5mbzIgPSB7CisJLnR4X3RocmVzaG9sZCAgID0gOCwKKwkucnhfdGhyZXNob2xkICAgPSAxMjgsCisJLmRtYV9idXJzdF9zaXplID0gOCwKKwkudGltZW91dCAgICAgICAgPSAyMzUsCisJLmdwaW9fY3MgICAgICAgID0gSUNPTlRST0xfTUNQMjUxeF9uQ1MyCit9OworCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCBtY3AyNTF4X2NoaXBfaW5mbzMgPSB7CisJLnR4X3RocmVzaG9sZCAgID0gOCwKKwkucnhfdGhyZXNob2xkICAgPSAxMjgsCisJLmRtYV9idXJzdF9zaXplID0gOCwKKwkudGltZW91dCAgICAgICAgPSAyMzUsCisJLmdwaW9fY3MgICAgICAgID0gSUNPTlRST0xfTUNQMjUxeF9uQ1MzCit9OworCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfY2hpcCBtY3AyNTF4X2NoaXBfaW5mbzQgPSB7CisJLnR4X3RocmVzaG9sZCAgID0gOCwKKwkucnhfdGhyZXNob2xkICAgPSAxMjgsCisJLmRtYV9idXJzdF9zaXplID0gOCwKKwkudGltZW91dCAgICAgICAgPSAyMzUsCisJLmdwaW9fY3MgICAgICAgID0gSUNPTlRST0xfTUNQMjUxeF9uQ1M0Cit9OworCitzdGF0aWMgc3RydWN0IG1jcDI1MXhfcGxhdGZvcm1fZGF0YSBtY3AyNTF4X2luZm8gPSB7CisJLm9zY2lsbGF0b3JfZnJlcXVlbmN5ID0gMTZFNiwKKwkubW9kZWwgICAgICAgICAgICAgICAgPSBDQU5fTUNQMjUxWF9NQ1AyNTE1LAorCS5ib2FyZF9zcGVjaWZpY19zZXR1cCA9IE5VTEwsCisJLnBvd2VyX2VuYWJsZSAgICAgICAgID0gTlVMTCwKKwkudHJhbnNjZWl2ZXJfZW5hYmxlICAgPSBOVUxMCit9OworCitzdGF0aWMgc3RydWN0IHNwaV9ib2FyZF9pbmZvIG1jcDI1MXhfYm9hcmRfaW5mb1tdID0geworCXsKKwkJLm1vZGFsaWFzICAgICAgICA9ICJtY3AyNTF4IiwKKwkJLm1heF9zcGVlZF9oeiAgICA9IDY1MDAwMDAsCisJCS5idXNfbnVtICAgICAgICAgPSAzLAorCQkuY2hpcF9zZWxlY3QgICAgID0gMCwKKwkJLnBsYXRmb3JtX2RhdGEgICA9ICZtY3AyNTF4X2luZm8sCisJCS5jb250cm9sbGVyX2RhdGEgPSAmbWNwMjUxeF9jaGlwX2luZm8xLAorCQkuaXJxICAgICAgICAgICAgID0gZ3Bpb190b19pcnEoSUNPTlRST0xfTUNQMjUxeF9uSVJRMSkKKwl9LAorCXsKKwkJLm1vZGFsaWFzICAgICAgICA9ICJtY3AyNTF4IiwKKwkJLm1heF9zcGVlZF9oeiAgICA9IDY1MDAwMDAsCisJCS5idXNfbnVtICAgICAgICAgPSAzLAorCQkuY2hpcF9zZWxlY3QgICAgID0gMSwKKwkJLnBsYXRmb3JtX2RhdGEgICA9ICZtY3AyNTF4X2luZm8sCisJCS5jb250cm9sbGVyX2RhdGEgPSAmbWNwMjUxeF9jaGlwX2luZm8yLAorCQkuaXJxICAgICAgICAgICAgID0gZ3Bpb190b19pcnEoSUNPTlRST0xfTUNQMjUxeF9uSVJRMikKKwl9LAorCXsKKwkJLm1vZGFsaWFzICAgICAgICA9ICJtY3AyNTF4IiwKKwkJLm1heF9zcGVlZF9oeiAgICA9IDY1MDAwMDAsCisJCS5idXNfbnVtICAgICAgICAgPSA0LAorCQkuY2hpcF9zZWxlY3QgICAgID0gMCwKKwkJLnBsYXRmb3JtX2RhdGEgICA9ICZtY3AyNTF4X2luZm8sCisJCS5jb250cm9sbGVyX2RhdGEgPSAmbWNwMjUxeF9jaGlwX2luZm8zLAorCQkuaXJxICAgICAgICAgICAgID0gZ3Bpb190b19pcnEoSUNPTlRST0xfTUNQMjUxeF9uSVJRMykKKwl9LAorCXsKKwkJLm1vZGFsaWFzICAgICAgICA9ICJtY3AyNTF4IiwKKwkJLm1heF9zcGVlZF9oeiAgICA9IDY1MDAwMDAsCisJCS5idXNfbnVtICAgICAgICAgPSA0LAorCQkuY2hpcF9zZWxlY3QgICAgID0gMSwKKwkJLnBsYXRmb3JtX2RhdGEgICA9ICZtY3AyNTF4X2luZm8sCisJCS5jb250cm9sbGVyX2RhdGEgPSAmbWNwMjUxeF9jaGlwX2luZm80LAorCQkuaXJxICAgICAgICAgICAgID0gZ3Bpb190b19pcnEoSUNPTlRST0xfTUNQMjUxeF9uSVJRNCkKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfbWFzdGVyIHB4YV9zc3AzX3NwaV9tYXN0ZXJfaW5mbyA9IHsKKwkuY2xvY2tfZW5hYmxlICAgPSBDS0VOX1NTUDMsCisJLm51bV9jaGlwc2VsZWN0ID0gMiwKKwkuZW5hYmxlX2RtYSAgICAgPSAxCit9OworCitzdGF0aWMgc3RydWN0IHB4YTJ4eF9zcGlfbWFzdGVyIHB4YV9zc3A0X3NwaV9tYXN0ZXJfaW5mbyA9IHsKKwkuY2xvY2tfZW5hYmxlICAgPSBDS0VOX1NTUDQsCisJLm51bV9jaGlwc2VsZWN0ID0gMiwKKwkuZW5hYmxlX2RtYSAgICAgPSAxCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YV9zcGlfc3NwMyA9IHsKKwkubmFtZSAgICAgICAgICA9ICJweGEyeHgtc3BpIiwKKwkuaWQgICAgICAgICAgICA9IDMsCisJLmRldiAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnB4YV9zc3AzX3NwaV9tYXN0ZXJfaW5mbywKKwl9Cit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YV9zcGlfc3NwNCA9IHsKKwkubmFtZSAgICAgICAgICA9ICJweGEyeHgtc3BpIiwKKwkuaWQgICAgICAgICAgICA9IDQsCisJLmRldiAgICAgICAgICAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnB4YV9zc3A0X3NwaV9tYXN0ZXJfaW5mbywKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqaWNvbnRyb2xfc3BpX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZweGFfc3BpX3NzcDMsCisJJnB4YV9zcGlfc3NwNCwKK307CisKK3N0YXRpYyBtZnBfY2ZnX3QgbWZwX2Nhbl9jZmdbXSBfX2luaXRkYXRhID0geworCS8qIENBTiBDUyBsaW5lcyAqLworCUdQSU8xNV9HUElPLAorCUdQSU8xNl9HUElPLAorCUdQSU8xN19HUElPLAorCUdQSU8yNF9HUElPLAorCisJLyogU1BJIChTU1AzKSBsaW5lcyAqLworCUdQSU84OV9TU1AzX1NDTEssCisJR1BJTzkxX1NTUDNfVFhELAorCUdQSU85Ml9TU1AzX1JYRCwKKworCS8qIFNQSSAoU1NQNCkgbGluZXMgKi8KKwlHUElPOTNfU1NQNF9TQ0xLLAorCUdQSU85NV9TU1A0X1RYRCwKKwlHUElPOTZfU1NQNF9SWEQsCisKKwkvKiBDQU4gbklSUSBsaW5lcyAqLworCUdQSU83NF9HUElPIHwgTUZQX0xQTV9FREdFX1JJU0UsCisJR1BJTzc1X0dQSU8gfCBNRlBfTFBNX0VER0VfUklTRSwKKwlHUElPNzZfR1BJTyB8IE1GUF9MUE1fRURHRV9SSVNFLAorCUdQSU83N19HUElPIHwgTUZQX0xQTV9FREdFX1JJU0UKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpY29udHJvbF9jYW5faW5pdCh2b2lkKQoreworCXB4YTN4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKG1mcF9jYW5fY2ZnKSk7CisJcGxhdGZvcm1fYWRkX2RldmljZXMoQVJSQVlfQU5EX1NJWkUoaWNvbnRyb2xfc3BpX2RldmljZXMpKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhBUlJBWV9BTkRfU0laRShtY3AyNTF4X2JvYXJkX2luZm8pKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGljb250cm9sX2luaXQodm9pZCkKK3sKKwlteG1fOHgxMF9iYXJlYm9uZXNfaW5pdCgpOworCW14bV84eDEwX3VzYl9ob3N0X2luaXQoKTsKKwlteG1fOHgxMF9tbWNfaW5pdCgpOworCisJaWNvbnRyb2xfY2FuX2luaXQoKTsKK30KKworTUFDSElORV9TVEFSVChJQ09OVFJPTCwgImlDb250cm9sL1NhZmVUY2FtIGJvYXJkcyB1c2luZyBFbWJlZGlhbiBNWE0tOHgxMCBDb00iKQorCS5waHlzX2lvCT0gMHg0MDAwMDAwMCwKKwkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEJPSBweGEzeHhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZweGFfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IGljb250cm9sX2luaXQKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pZHAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jCmluZGV4IDVjOWUxMWQuLmJjNzhjNGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2lkcC5jCkBAIC00NywyNSArNDcsNyBAQAogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpZHBfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CiAJLyogTENEICovCi0JR1BJTzU4X0xDRF9MRERfMCwKLQlHUElPNTlfTENEX0xERF8xLAotCUdQSU82MF9MQ0RfTEREXzIsCi0JR1BJTzYxX0xDRF9MRERfMywKLQlHUElPNjJfTENEX0xERF80LAotCUdQSU82M19MQ0RfTEREXzUsCi0JR1BJTzY0X0xDRF9MRERfNiwKLQlHUElPNjVfTENEX0xERF83LAotCUdQSU82Nl9MQ0RfTEREXzgsCi0JR1BJTzY3X0xDRF9MRERfOSwKLQlHUElPNjhfTENEX0xERF8xMCwKLQlHUElPNjlfTENEX0xERF8xMSwKLQlHUElPNzBfTENEX0xERF8xMiwKLQlHUElPNzFfTENEX0xERF8xMywKLQlHUElPNzJfTENEX0xERF8xNCwKLQlHUElPNzNfTENEX0xERF8xNSwKLQlHUElPNzRfTENEX0ZDTEssCi0JR1BJTzc1X0xDRF9MQ0xLLAotCUdQSU83Nl9MQ0RfUENMSywKKwlHUElPeHhfTENEX0RTVE5fMTZCUFAsCiAKIAkvKiBCVFVBUlQgKi8KIAlHUElPNDJfQlRVQVJUX1JYRCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2ltb3RlMi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvaW1vdGUyLmMKaW5kZXggNWIwODYyZC4uYjJmODc4YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW1vdGUyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW1vdGUyLmMKQEAgLTY0LDcgKzY0LDYgQEAKIAlHUElPMTE2X0dQSU8sCQkJLyogQ0NfQ0NBICovCiAJR1BJTzBfR1BJTywJCQkvKiBDQ19GSUZPUCAqLwogCUdQSU8xNl9HUElPLAkJCS8qIENDU0ZEICovCi0JR1BJTzM5X0dQSU8sCQkJLyogQ1NuICovCiAJR1BJTzExNV9HUElPLAkJCS8qIFBvd2VyIGVuYWJsZSAqLwogCiAJLyogSTJDICovCkBAIC03Miw3ICs3MSw3IEBACiAJR1BJTzExOF9JMkNfU0RBLAogCiAJLyogU1NQIDMgLSA4MDIuMTUuNCByYWRpbyAqLwotCUdQSU8zOV9HUElPLCAJCQkvKiBDaGlwIFNlbGVjdCAqLworCUdQSU8zOV9HUElPLAkJCS8qIENoaXAgU2VsZWN0ICovCiAJR1BJTzM0X1NTUDNfU0NMSywKIAlHUElPMzVfU1NQM19UWEQsCiAJR1BJTzQxX1NTUDNfUlhELApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2JhbGxvb24zLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvYmFsbG9vbjMuaAppbmRleCBiZmVjMDliLi4xYTc0MTA2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvYmFsbG9vbjMuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvYmFsbG9vbjMuaApAQCAtMTI5LDYgKzEyOSwxNiBAQAogI2RlZmluZSBDUExEX0FST1VUSU5HX0xPT05SMklOVF9CSVQgICAgNgogI2RlZmluZSBDUExEX0FST1VUSU5HX0xPT05SMkVYVF9CSVQgICAgNwogCisvKiBCYWxsb29uMyBJbnRlcnJ1cHRzICovCisjZGVmaW5lIEJBTExPT04zX0lSUSh4KQkJKElSUV9CT0FSRF9TVEFSVCArICh4KSkKKworI2RlZmluZSBCQUxMT09OM19CUF9DRl9OUkRZX0lSUQlCQUxMT09OM19JUlEoMCkKKyNkZWZpbmUgQkFMTE9PTjNfQlBfTlNUU0NIR19JUlEJQkFMTE9PTjNfSVJRKDEpCisKKyNkZWZpbmUgQkFMTE9PTjNfQVVYX05JUlEJSVJRX0dQSU8oQkFMTE9PTjNfR1BJT19BVVhfTklSUSkKKyNkZWZpbmUgQkFMTE9PTjNfQ09ERUNfSVJRCUlSUV9HUElPKEJBTExPT04zX0dQSU9fQ09ERUNfSVJRKQorI2RlZmluZSBCQUxMT09OM19TMF9DRF9JUlEJSVJRX0dQSU8oQkFMTE9PTjNfR1BJT19TMF9DRCkKKwogZXh0ZXJuIGludCBiYWxsb29uM19oYXMoZW51bSBiYWxsb29uM19mZWF0dXJlcyBmZWF0dXJlKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmluZGV4IGU3NDFiZjEuLjc1MTU3NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0zMTQsNyArMzE0LDYgQEAKICNkZWZpbmUgUENJQklPU19NSU5fSU8JCTAKICNkZWZpbmUgUENJQklPU19NSU5fTUVNCQkwCiAjZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKQkxCi0jZGVmaW5lIEhBVkVfQVJDSF9QQ0lfU0VUX0RNQV9NQVNLCTEKICNlbmRpZgogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvaXJxcy5oCmluZGV4IDM2NzdhOWEuLmZmYzgzMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtMTM1LDgyICsxMzUsNiBAQAogI2RlZmluZSBJUlFfQk9BUkRfRU5ECQkoSVJRX0JPQVJEX1NUQVJUICsgMTYpCiAjZW5kaWYKIAotI2RlZmluZSBJUlFfU0ExMTExX1NUQVJUCShJUlFfQk9BUkRfRU5EKQotI2RlZmluZSBJUlFfR1BBSU4wCQkoSVJRX0JPQVJEX0VORCArIDApCi0jZGVmaW5lIElSUV9HUEFJTjEJCShJUlFfQk9BUkRfRU5EICsgMSkKLSNkZWZpbmUgSVJRX0dQQUlOMgkJKElSUV9CT0FSRF9FTkQgKyAyKQotI2RlZmluZSBJUlFfR1BBSU4zCQkoSVJRX0JPQVJEX0VORCArIDMpCi0jZGVmaW5lIElSUV9HUEJJTjAJCShJUlFfQk9BUkRfRU5EICsgNCkKLSNkZWZpbmUgSVJRX0dQQklOMQkJKElSUV9CT0FSRF9FTkQgKyA1KQotI2RlZmluZSBJUlFfR1BCSU4yCQkoSVJRX0JPQVJEX0VORCArIDYpCi0jZGVmaW5lIElSUV9HUEJJTjMJCShJUlFfQk9BUkRfRU5EICsgNykKLSNkZWZpbmUgSVJRX0dQQklONAkJKElSUV9CT0FSRF9FTkQgKyA4KQotI2RlZmluZSBJUlFfR1BCSU41CQkoSVJRX0JPQVJEX0VORCArIDkpCi0jZGVmaW5lIElSUV9HUENJTjAJCShJUlFfQk9BUkRfRU5EICsgMTApCi0jZGVmaW5lIElSUV9HUENJTjEJCShJUlFfQk9BUkRfRU5EICsgMTEpCi0jZGVmaW5lIElSUV9HUENJTjIJCShJUlFfQk9BUkRfRU5EICsgMTIpCi0jZGVmaW5lIElSUV9HUENJTjMJCShJUlFfQk9BUkRfRU5EICsgMTMpCi0jZGVmaW5lIElSUV9HUENJTjQJCShJUlFfQk9BUkRfRU5EICsgMTQpCi0jZGVmaW5lIElSUV9HUENJTjUJCShJUlFfQk9BUkRfRU5EICsgMTUpCi0jZGVmaW5lIElSUV9HUENJTjYJCShJUlFfQk9BUkRfRU5EICsgMTYpCi0jZGVmaW5lIElSUV9HUENJTjcJCShJUlFfQk9BUkRfRU5EICsgMTcpCi0jZGVmaW5lIElSUV9NU1RYSU5UCQkoSVJRX0JPQVJEX0VORCArIDE4KQotI2RlZmluZSBJUlFfTVNSWElOVAkJKElSUV9CT0FSRF9FTkQgKyAxOSkKLSNkZWZpbmUgSVJRX01TU1RPUEVSUklOVAkoSVJRX0JPQVJEX0VORCArIDIwKQotI2RlZmluZSBJUlFfVFBUWElOVAkJKElSUV9CT0FSRF9FTkQgKyAyMSkKLSNkZWZpbmUgSVJRX1RQUlhJTlQJCShJUlFfQk9BUkRfRU5EICsgMjIpCi0jZGVmaW5lIElSUV9UUFNUT1BFUlJJTlQJKElSUV9CT0FSRF9FTkQgKyAyMykKLSNkZWZpbmUgU1NQWE1USU5UCQkoSVJRX0JPQVJEX0VORCArIDI0KQotI2RlZmluZSBTU1BSQ1ZJTlQJCShJUlFfQk9BUkRfRU5EICsgMjUpCi0jZGVmaW5lIFNTUFJPUgkJCShJUlFfQk9BUkRfRU5EICsgMjYpCi0jZGVmaW5lIEFVRFhNVERNQURPTkVBCQkoSVJRX0JPQVJEX0VORCArIDMyKQotI2RlZmluZSBBVURSQ1ZETUFET05FQQkJKElSUV9CT0FSRF9FTkQgKyAzMykKLSNkZWZpbmUgQVVEWE1URE1BRE9ORUIJCShJUlFfQk9BUkRfRU5EICsgMzQpCi0jZGVmaW5lIEFVRFJDVkRNQURPTkVCCQkoSVJRX0JPQVJEX0VORCArIDM1KQotI2RlZmluZSBBVURURlNSCQkJKElSUV9CT0FSRF9FTkQgKyAzNikKLSNkZWZpbmUgQVVEUkZTUgkJCShJUlFfQk9BUkRfRU5EICsgMzcpCi0jZGVmaW5lIEFVRFRVUgkJCShJUlFfQk9BUkRfRU5EICsgMzgpCi0jZGVmaW5lIEFVRFJPUgkJCShJUlFfQk9BUkRfRU5EICsgMzkpCi0jZGVmaW5lIEFVRERUUwkJCShJUlFfQk9BUkRfRU5EICsgNDApCi0jZGVmaW5lIEFVRFJERAkJCShJUlFfQk9BUkRfRU5EICsgNDEpCi0jZGVmaW5lIEFVRFNUTwkJCShJUlFfQk9BUkRfRU5EICsgNDIpCi0jZGVmaW5lIElSUV9VU0JQV1IJCShJUlFfQk9BUkRfRU5EICsgNDMpCi0jZGVmaW5lIElSUV9IQ0lNCQkoSVJRX0JPQVJEX0VORCArIDQ0KQotI2RlZmluZSBJUlFfSENJQlVGRkFDQwkJKElSUV9CT0FSRF9FTkQgKyA0NSkKLSNkZWZpbmUgSVJRX0hDSVJNVFdLUAkJKElSUV9CT0FSRF9FTkQgKyA0NikKLSNkZWZpbmUgSVJRX05IQ0lNRkNJUgkJKElSUV9CT0FSRF9FTkQgKyA0NykKLSNkZWZpbmUgSVJRX1VTQl9QT1JUX1JFU1VNRQkoSVJRX0JPQVJEX0VORCArIDQ4KQotI2RlZmluZSBJUlFfUzBfUkVBRFlfTklOVAkoSVJRX0JPQVJEX0VORCArIDQ5KQotI2RlZmluZSBJUlFfUzFfUkVBRFlfTklOVAkoSVJRX0JPQVJEX0VORCArIDUwKQotI2RlZmluZSBJUlFfUzBfQ0RfVkFMSUQJCShJUlFfQk9BUkRfRU5EICsgNTEpCi0jZGVmaW5lIElSUV9TMV9DRF9WQUxJRAkJKElSUV9CT0FSRF9FTkQgKyA1MikKLSNkZWZpbmUgSVJRX1MwX0JWRDFfU1RTQ0hHCShJUlFfQk9BUkRfRU5EICsgNTMpCi0jZGVmaW5lIElSUV9TMV9CVkQxX1NUU0NIRwkoSVJRX0JPQVJEX0VORCArIDU0KQotCi0jZGVmaW5lIElSUV9MT0NPTU9fU1RBUlQJKElSUV9CT0FSRF9FTkQpCi0jZGVmaW5lIElSUV9MT0NPTU9fS0VZCQkoSVJRX0JPQVJEX0VORCArIDApCi0jZGVmaW5lIElSUV9MT0NPTU9fR1BJTzAJKElSUV9CT0FSRF9FTkQgKyAxKQotI2RlZmluZSBJUlFfTE9DT01PX0dQSU8xCShJUlFfQk9BUkRfRU5EICsgMikKLSNkZWZpbmUgSVJRX0xPQ09NT19HUElPMgkoSVJRX0JPQVJEX0VORCArIDMpCi0jZGVmaW5lIElSUV9MT0NPTU9fR1BJTzMJKElSUV9CT0FSRF9FTkQgKyA0KQotI2RlZmluZSBJUlFfTE9DT01PX0dQSU80CShJUlFfQk9BUkRfRU5EICsgNSkKLSNkZWZpbmUgSVJRX0xPQ09NT19HUElPNQkoSVJRX0JPQVJEX0VORCArIDYpCi0jZGVmaW5lIElSUV9MT0NPTU9fR1BJTzYJKElSUV9CT0FSRF9FTkQgKyA3KQotI2RlZmluZSBJUlFfTE9DT01PX0dQSU83CShJUlFfQk9BUkRfRU5EICsgOCkKLSNkZWZpbmUgSVJRX0xPQ09NT19HUElPOAkoSVJRX0JPQVJEX0VORCArIDkpCi0jZGVmaW5lIElSUV9MT0NPTU9fR1BJTzkJKElSUV9CT0FSRF9FTkQgKyAxMCkKLSNkZWZpbmUgSVJRX0xPQ09NT19HUElPMTAJKElSUV9CT0FSRF9FTkQgKyAxMSkKLSNkZWZpbmUgSVJRX0xPQ09NT19HUElPMTEJKElSUV9CT0FSRF9FTkQgKyAxMikKLSNkZWZpbmUgSVJRX0xPQ09NT19HUElPMTIJKElSUV9CT0FSRF9FTkQgKyAxMykKLSNkZWZpbmUgSVJRX0xPQ09NT19HUElPMTMJKElSUV9CT0FSRF9FTkQgKyAxNCkKLSNkZWZpbmUgSVJRX0xPQ09NT19HUElPMTQJKElSUV9CT0FSRF9FTkQgKyAxNSkKLSNkZWZpbmUgSVJRX0xPQ09NT19HUElPMTUJKElSUV9CT0FSRF9FTkQgKyAxNikKLSNkZWZpbmUgSVJRX0xPQ09NT19MVAkJKElSUV9CT0FSRF9FTkQgKyAxNykKLSNkZWZpbmUgSVJRX0xPQ09NT19TUElfUkZSCShJUlFfQk9BUkRfRU5EICsgMTgpCi0jZGVmaW5lIElSUV9MT0NPTU9fU1BJX1JGVwkoSVJRX0JPQVJEX0VORCArIDE5KQotI2RlZmluZSBJUlFfTE9DT01PX1NQSV9PVlJOCShJUlFfQk9BUkRfRU5EICsgMjApCi0jZGVmaW5lIElSUV9MT0NPTU9fU1BJX1RFTkQJKElSUV9CT0FSRF9FTkQgKyAyMSkKLQogLyoKICAqIEZpZ3VyZSBvdXQgdGhlIE1BWCBJUlEgbnVtYmVyLgogICoKQEAgLTIxOSw4OSArMTQzLDE2IEBACiAgKiBPdGhlcndpc2UsIHdlIGhhdmUgdGhlIHN0YW5kYXJkIElSUXMgb25seS4KICAqLwogI2lmZGVmIENPTkZJR19TQTExMTEKLSNkZWZpbmUgTlJfSVJRUwkJCShJUlFfUzFfQlZEMV9TVFNDSEcgKyAxKQotI2VsaWYgZGVmaW5lZChDT05GSUdfU0hBUlBfTE9DT01PKQotI2RlZmluZSBOUl9JUlFTCQkJKElSUV9MT0NPTU9fU1BJX1RFTkQgKyAxKQorI2RlZmluZSBOUl9JUlFTCQkJKElSUV9CT0FSRF9FTkQgKyA1NSkKICNlbGlmIGRlZmluZWQoQ09ORklHX1BYQV9IQVZFX0JPQVJEX0lSUVMpCiAjZGVmaW5lIE5SX0lSUVMJCQkoSVJRX0JPQVJEX0VORCkKICNlbHNlCiAjZGVmaW5lIE5SX0lSUVMJCQkoSVJRX0JPQVJEX1NUQVJUKQogI2VuZGlmCiAKLS8qCi0gKiBCb2FyZCBzcGVjaWZpYyBJUlFzLiAgRGVmaW5lIHRoZW0gaGVyZS4KLSAqIERvIG5vdCBzdXJyb3VuZCB0aGVtIHdpdGggaWZkZWZzLgotICovCi0jZGVmaW5lIExVQkJPQ0tfSVJRKHgpCQkoSVJRX0JPQVJEX1NUQVJUICsgKHgpKQotI2RlZmluZSBMVUJCT0NLX1NEX0lSUQkJTFVCQk9DS19JUlEoMCkKLSNkZWZpbmUgTFVCQk9DS19TQTExMTFfSVJRCUxVQkJPQ0tfSVJRKDEpCi0jZGVmaW5lIExVQkJPQ0tfVVNCX0lSUQkJTFVCQk9DS19JUlEoMikgIC8qIHVzYiBjb25uZWN0ICovCi0jZGVmaW5lIExVQkJPQ0tfRVRIX0lSUQkJTFVCQk9DS19JUlEoMykKLSNkZWZpbmUgTFVCQk9DS19VQ0IxNDAwX0lSUQlMVUJCT0NLX0lSUSg0KQotI2RlZmluZSBMVUJCT0NLX0JCX0lSUQkJTFVCQk9DS19JUlEoNSkKLSNkZWZpbmUgTFVCQk9DS19VU0JfRElTQ19JUlEJTFVCQk9DS19JUlEoNikgIC8qIHVzYiBkaXNjb25uZWN0ICovCi0jZGVmaW5lIExVQkJPQ0tfTEFTVF9JUlEJTFVCQk9DS19JUlEoNikKLQotI2RlZmluZSBMUEQyNzBfSVJRKHgpCQkoSVJRX0JPQVJEX1NUQVJUICsgKHgpKQotI2RlZmluZSBMUEQyNzBfVVNCQ19JUlEJCUxQRDI3MF9JUlEoMikKLSNkZWZpbmUgTFBEMjcwX0VUSEVSTkVUX0lSUQlMUEQyNzBfSVJRKDMpCi0jZGVmaW5lIExQRDI3MF9BQzk3X0lSUQkJTFBEMjcwX0lSUSg0KQotCi0jZGVmaW5lIE1BSU5TVE9ORV9JUlEoeCkJKElSUV9CT0FSRF9TVEFSVCArICh4KSkKLSNkZWZpbmUgTUFJTlNUT05FX01NQ19JUlEJTUFJTlNUT05FX0lSUSgwKQotI2RlZmluZSBNQUlOU1RPTkVfVVNJTV9JUlEJTUFJTlNUT05FX0lSUSgxKQotI2RlZmluZSBNQUlOU1RPTkVfVVNCQ19JUlEJTUFJTlNUT05FX0lSUSgyKQotI2RlZmluZSBNQUlOU1RPTkVfRVRIRVJORVRfSVJRCU1BSU5TVE9ORV9JUlEoMykKLSNkZWZpbmUgTUFJTlNUT05FX0FDOTdfSVJRCU1BSU5TVE9ORV9JUlEoNCkKLSNkZWZpbmUgTUFJTlNUT05FX1BFTl9JUlEJTUFJTlNUT05FX0lSUSg1KQotI2RlZmluZSBNQUlOU1RPTkVfTVNJTlNfSVJRCU1BSU5TVE9ORV9JUlEoNikKLSNkZWZpbmUgTUFJTlNUT05FX0VYQlJEX0lSUQlNQUlOU1RPTkVfSVJRKDcpCi0jZGVmaW5lIE1BSU5TVE9ORV9TMF9DRF9JUlEJTUFJTlNUT05FX0lSUSg5KQotI2RlZmluZSBNQUlOU1RPTkVfUzBfU1RTQ0hHX0lSUQlNQUlOU1RPTkVfSVJRKDEwKQotI2RlZmluZSBNQUlOU1RPTkVfUzBfSVJRCU1BSU5TVE9ORV9JUlEoMTEpCi0jZGVmaW5lIE1BSU5TVE9ORV9TMV9DRF9JUlEJTUFJTlNUT05FX0lSUSgxMykKLSNkZWZpbmUgTUFJTlNUT05FX1MxX1NUU0NIR19JUlEJTUFJTlNUT05FX0lSUSgxNCkKLSNkZWZpbmUgTUFJTlNUT05FX1MxX0lSUQlNQUlOU1RPTkVfSVJRKDE1KQotCi0vKiBCYWxsb29uMyBJbnRlcnJ1cHRzICovCi0jZGVmaW5lIEJBTExPT04zX0lSUSh4KQkJKElSUV9CT0FSRF9TVEFSVCArICh4KSkKLQotI2RlZmluZSBCQUxMT09OM19CUF9DRl9OUkRZX0lSUQlCQUxMT09OM19JUlEoMCkKLSNkZWZpbmUgQkFMTE9PTjNfQlBfTlNUU0NIR19JUlEJQkFMTE9PTjNfSVJRKDEpCi0KLSNkZWZpbmUgQkFMTE9PTjNfQVVYX05JUlEJSVJRX0dQSU8oQkFMTE9PTjNfR1BJT19BVVhfTklSUSkKLSNkZWZpbmUgQkFMTE9PTjNfQ09ERUNfSVJRCUlSUV9HUElPKEJBTExPT04zX0dQSU9fQ09ERUNfSVJRKQotI2RlZmluZSBCQUxMT09OM19TMF9DRF9JUlEJSVJRX0dQSU8oQkFMTE9PTjNfR1BJT19TMF9DRCkKLQotLyogTG9Db01vIEludGVycnVwdHMgKENPTkZJR19TSEFSUF9MT0NPTU8pICovCi0jZGVmaW5lIElSUV9MT0NPTU9fS0VZX0JBU0UJKElSUV9CT0FSRF9TVEFSVCArIDApCi0jZGVmaW5lIElSUV9MT0NPTU9fR1BJT19CQVNFCShJUlFfQk9BUkRfU1RBUlQgKyAxKQotI2RlZmluZSBJUlFfTE9DT01PX0xUX0JBU0UJKElSUV9CT0FSRF9TVEFSVCArIDIpCi0jZGVmaW5lIElSUV9MT0NPTU9fU1BJX0JBU0UJKElSUV9CT0FSRF9TVEFSVCArIDMpCi0KLS8qIHBoeUNPUkUtUFhBMjcwIChQQ00wMjcpIEludGVycnVwdHMgKi8KLSNkZWZpbmUgUENNMDI3X0lSUSh4KSAgICAgICAgICAoSVJRX0JPQVJEX1NUQVJUICsgKHgpKQotI2RlZmluZSBQQ00wMjdfQlRERVRfSVJRICAgICAgIFBDTTAyN19JUlEoMCkKLSNkZWZpbmUgUENNMDI3X0ZGX1JJX0lSUSAgICAgICBQQ00wMjdfSVJRKDEpCi0jZGVmaW5lIFBDTTAyN19NTUNERVRfSVJRICAgICAgUENNMDI3X0lSUSgyKQotI2RlZmluZSBQQ00wMjdfUE1fNVZfSVJRICAgICAgIFBDTTAyN19JUlEoMykKLQotLyogSVRFODE1MiBpcnFzICovCiAvKiBhZGQgSVQ4MTUyIElSUXMgYmV5b25kIEJPQVJEX0VORCAqLwogI2lmZGVmIENPTkZJR19QQ0lfSE9TVF9JVEU4MTUyCi0jZGVmaW5lIElUODE1Ml9JUlEoeCkgICAoSVJRX0JPQVJEX0VORCArICh4KSkKLQotLyogSVJRLXNvdXJjZXMgaW4gMyBncm91cHMgLSBsb2NhbCBkZXZpY2VzLCBMUEMgKHNlcmlhbCksIGFuZCBleHRlcm5hbCBQQ0kgKi8KLSNkZWZpbmUgSVQ4MTUyX0xEX0lSUV9DT1VOVCAgICAgOQotI2RlZmluZSBJVDgxNTJfTFBfSVJRX0NPVU5UICAgICAxNgotI2RlZmluZSBJVDgxNTJfUERfSVJRX0NPVU5UICAgICAxNQotCi0vKiBQcmlvcml0aWVzOiAqLwotI2RlZmluZSBJVDgxNTJfUERfSVJRKGkpICAgICAgICBJVDgxNTJfSVJRKGkpCi0jZGVmaW5lIElUODE1Ml9MUF9JUlEoaSkgICAgICAgIChJVDgxNTJfSVJRKGkpICsgSVQ4MTUyX1BEX0lSUV9DT1VOVCkKLSNkZWZpbmUgSVQ4MTUyX0xEX0lSUShpKSAgICAgICAgKElUODE1Ml9JUlEoaSkgKyBJVDgxNTJfUERfSVJRX0NPVU5UICsgSVQ4MTUyX0xQX0lSUV9DT1VOVCkKLQotI2RlZmluZSBJVDgxNTJfTEFTVF9JUlEgICAgICAgICBJVDgxNTJfTERfSVJRKElUODE1Ml9MRF9JUlFfQ09VTlQgLSAxKQorI2RlZmluZSBJVDgxNTJfTEFTVF9JUlEgICAgICAgICAoSVJRX0JPQVJEX0VORCArIDQwKQogCiAjaWYgTlJfSVJRUyA8IChJVDgxNTJfTEFTVF9JUlErMSkKICN1bmRlZiBOUl9JUlFTCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbHBkMjcwLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbHBkMjcwLmgKaW5kZXggZjg5ZmI3MS4uMGU2NDQwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2xwZDI3MC5oCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9scGQyNzAuaApAQCAtMzQsNSArMzQsOSBAQAogI2RlZmluZSBMUEQyNzBfSU5UX0VUSEVSTkVUCSgxIDw8IDMpICAvKiBFdGhlcm5ldCBjb250cm9sbGVyIElSUSAqLwogI2RlZmluZSBMUEQyNzBfSU5UX1VTQkMJCSgxIDw8IDIpICAvKiBVU0IgY2xpZW50IGNhYmxlIGRldGVjdGlvbiBJUlEgKi8KIAorI2RlZmluZSBMUEQyNzBfSVJRKHgpCQkoSVJRX0JPQVJEX1NUQVJUICsgKHgpKQorI2RlZmluZSBMUEQyNzBfVVNCQ19JUlEJCUxQRDI3MF9JUlEoMikKKyNkZWZpbmUgTFBEMjcwX0VUSEVSTkVUX0lSUQlMUEQyNzBfSVJRKDMpCisjZGVmaW5lIExQRDI3MF9BQzk3X0lSUQkJTFBEMjcwX0lSUSg0KQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9sdWJib2NrLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbHViYm9jay5oCmluZGV4IDc1MWI3NDguLmEwZDQyNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9sdWJib2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL2x1YmJvY2suaApAQCAtMzQsNiArMzQsMTcgQEAKICNkZWZpbmUgTFVCX0lSUV9TRVRfQ0xSCQlfX0xVQl9SRUcoTFVCQk9DS19GUEdBX1BIWVMgKyAweDBkMCkKICNkZWZpbmUgTFVCX0dQCQkJX19MVUJfUkVHKExVQkJPQ0tfRlBHQV9QSFlTICsgMHgxMDApCiAKKy8qIEJvYXJkIHNwZWNpZmljIElSUXMgKi8KKyNkZWZpbmUgTFVCQk9DS19JUlEoeCkJCShJUlFfQk9BUkRfU1RBUlQgKyAoeCkpCisjZGVmaW5lIExVQkJPQ0tfU0RfSVJRCQlMVUJCT0NLX0lSUSgwKQorI2RlZmluZSBMVUJCT0NLX1NBMTExMV9JUlEJTFVCQk9DS19JUlEoMSkKKyNkZWZpbmUgTFVCQk9DS19VU0JfSVJRCQlMVUJCT0NLX0lSUSgyKSAgLyogdXNiIGNvbm5lY3QgKi8KKyNkZWZpbmUgTFVCQk9DS19FVEhfSVJRCQlMVUJCT0NLX0lSUSgzKQorI2RlZmluZSBMVUJCT0NLX1VDQjE0MDBfSVJRCUxVQkJPQ0tfSVJRKDQpCisjZGVmaW5lIExVQkJPQ0tfQkJfSVJRCQlMVUJCT0NLX0lSUSg1KQorI2RlZmluZSBMVUJCT0NLX1VTQl9ESVNDX0lSUQlMVUJCT0NLX0lSUSg2KSAgLyogdXNiIGRpc2Nvbm5lY3QgKi8KKyNkZWZpbmUgTFVCQk9DS19MQVNUX0lSUQlMVUJCT0NLX0lSUSg2KQorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogZXh0ZXJuIHZvaWQgbHViYm9ja19zZXRfbWlzY193cih1bnNpZ25lZCBpbnQgbWFzaywgdW5zaWduZWQgaW50IHNldCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tYWluc3RvbmUuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tYWluc3RvbmUuaAppbmRleCAzNDYxYzQzLi44NmU2MjNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWFpbnN0b25lLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21haW5zdG9uZS5oCkBAIC0xMTcsNCArMTE3LDIxIEBACiAjZGVmaW5lIE1TVF9QQ01DSUFfUFdSX1ZDQ18zMyAgIDB4OAkgICAvKiB2b2x0YWdlIFZDQyA9IDMuM1YgKi8KICNkZWZpbmUgTVNUX1BDTUNJQV9QV1JfVkNDXzUwICAgMHg0CSAgIC8qIHZvbHRhZ2UgVkNDID0gNS4wViAqLwogCisvKiBib2FyZCBzcGVjaWZpYyBJUlFzICovCisjZGVmaW5lIE1BSU5TVE9ORV9JUlEoeCkJKElSUV9CT0FSRF9TVEFSVCArICh4KSkKKyNkZWZpbmUgTUFJTlNUT05FX01NQ19JUlEJTUFJTlNUT05FX0lSUSgwKQorI2RlZmluZSBNQUlOU1RPTkVfVVNJTV9JUlEJTUFJTlNUT05FX0lSUSgxKQorI2RlZmluZSBNQUlOU1RPTkVfVVNCQ19JUlEJTUFJTlNUT05FX0lSUSgyKQorI2RlZmluZSBNQUlOU1RPTkVfRVRIRVJORVRfSVJRCU1BSU5TVE9ORV9JUlEoMykKKyNkZWZpbmUgTUFJTlNUT05FX0FDOTdfSVJRCU1BSU5TVE9ORV9JUlEoNCkKKyNkZWZpbmUgTUFJTlNUT05FX1BFTl9JUlEJTUFJTlNUT05FX0lSUSg1KQorI2RlZmluZSBNQUlOU1RPTkVfTVNJTlNfSVJRCU1BSU5TVE9ORV9JUlEoNikKKyNkZWZpbmUgTUFJTlNUT05FX0VYQlJEX0lSUQlNQUlOU1RPTkVfSVJRKDcpCisjZGVmaW5lIE1BSU5TVE9ORV9TMF9DRF9JUlEJTUFJTlNUT05FX0lSUSg5KQorI2RlZmluZSBNQUlOU1RPTkVfUzBfU1RTQ0hHX0lSUQlNQUlOU1RPTkVfSVJRKDEwKQorI2RlZmluZSBNQUlOU1RPTkVfUzBfSVJRCU1BSU5TVE9ORV9JUlEoMTEpCisjZGVmaW5lIE1BSU5TVE9ORV9TMV9DRF9JUlEJTUFJTlNUT05FX0lSUSgxMykKKyNkZWZpbmUgTUFJTlNUT05FX1MxX1NUU0NIR19JUlEJTUFJTlNUT05FX0lSUSgxNCkKKyNkZWZpbmUgTUFJTlNUT05FX1MxX0lSUQlNQUlOU1RPTkVfSVJRKDE1KQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMjV4LmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTI1eC5oCmluZGV4IDljNzg3ODUuLmNhZmFkYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMjV4LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEyNXguaApAQCAtMTkwLDQgKzE5MCwzNiBAQAogI2RlZmluZSBHUElPODlfQUM5N19uUkVTRVQJTUZQX0NGR19PVVQoR1BJTzg5LCBBRjAsIERSSVZFX0hJR0gpCiAjZW5kaWYJLyogQ09ORklHX0NQVV9QWEEyNnggKi8KIAorLyogY29tbW9ubHkgdXNlZCBwaW4gY29uZmlndXJhdGlvbnMgKi8KKyNkZWZpbmUgR1BJT3h4X0xDRF8xNkJQUAlcCisJR1BJTzU4X0xDRF9MRERfMCwJXAorCUdQSU81OV9MQ0RfTEREXzEsCVwKKwlHUElPNjBfTENEX0xERF8yLAlcCisJR1BJTzYxX0xDRF9MRERfMywJXAorCUdQSU82Ml9MQ0RfTEREXzQsCVwKKwlHUElPNjNfTENEX0xERF81LAlcCisJR1BJTzY0X0xDRF9MRERfNiwJXAorCUdQSU82NV9MQ0RfTEREXzcsCVwKKwlHUElPNjZfTENEX0xERF84LAlcCisJR1BJTzY3X0xDRF9MRERfOSwJXAorCUdQSU82OF9MQ0RfTEREXzEwLAlcCisJR1BJTzY5X0xDRF9MRERfMTEsCVwKKwlHUElPNzBfTENEX0xERF8xMiwJXAorCUdQSU83MV9MQ0RfTEREXzEzLAlcCisJR1BJTzcyX0xDRF9MRERfMTQsCVwKKwlHUElPNzNfTENEX0xERF8xNQorCisjZGVmaW5lIEdQSU94eF9MQ0RfRFNUTl8xNkJQUAlcCisJR1BJT3h4X0xDRF8xNkJQUCwJXAorCUdQSU83NF9MQ0RfRkNMSywJXAorCUdQSU83NV9MQ0RfTENMSywJXAorCUdQSU83Nl9MQ0RfUENMSworCisjZGVmaW5lIEdQSU94eF9MQ0RfVEZUXzE2QlBQCVwKKwlHUElPeHhfTENEXzE2QlBQLAlcCisJR1BJTzc0X0xDRF9GQ0xLLAlcCisJR1BJTzc1X0xDRF9MQ0xLLAlcCisJR1BJTzc2X0xDRF9QQ0xLLAlcCisJR1BJTzc3X0xDRF9CSUFTCisKICNlbmRpZiAvKiBfX0FTTV9BUkNIX01GUF9QWEEyNVhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEyN3guaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9tZnAtcHhhMjd4LmgKaW5kZXggNjU0M2MwNS4uZWMwZjBiMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL21mcC1weGEyN3guaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvbWZwLXB4YTI3eC5oCkBAIC00MzQsNSArNDM0LDMyIEBACiAjZGVmaW5lIEdQSU8xMTJfbk1TSU5TCQlNRlBfQ0ZHX0lOKEdQSU8xMTIsIEFGMikKICNkZWZpbmUgR1BJTzMyX01TU0NMSwkJTUZQX0NGR19PVVQoR1BJTzMyLCBBRjEsIERSSVZFX0xPVykKIAorLyogY29tbW9ubHkgdXNlZCBwaW4gY29uZmlndXJhdGlvbnMgKi8KKyNkZWZpbmUgR1BJT3h4X0xDRF8xNkJQUAlcCisJR1BJTzU4X0xDRF9MRERfMCwJXAorCUdQSU81OV9MQ0RfTEREXzEsCVwKKwlHUElPNjBfTENEX0xERF8yLAlcCisJR1BJTzYxX0xDRF9MRERfMywJXAorCUdQSU82Ml9MQ0RfTEREXzQsCVwKKwlHUElPNjNfTENEX0xERF81LAlcCisJR1BJTzY0X0xDRF9MRERfNiwJXAorCUdQSU82NV9MQ0RfTEREXzcsCVwKKwlHUElPNjZfTENEX0xERF84LAlcCisJR1BJTzY3X0xDRF9MRERfOSwJXAorCUdQSU82OF9MQ0RfTEREXzEwLAlcCisJR1BJTzY5X0xDRF9MRERfMTEsCVwKKwlHUElPNzBfTENEX0xERF8xMiwJXAorCUdQSU83MV9MQ0RfTEREXzEzLAlcCisJR1BJTzcyX0xDRF9MRERfMTQsCVwKKwlHUElPNzNfTENEX0xERF8xNQorCisjZGVmaW5lIEdQSU94eF9MQ0RfVEZUXzE2QlBQCVwKKwlHUElPeHhfTENEXzE2QlBQLAlcCisJR1BJTzc0X0xDRF9GQ0xLLAlcCisJR1BJTzc1X0xDRF9MQ0xLLAlcCisJR1BJTzc2X0xDRF9QQ0xLLAlcCisJR1BJTzc3X0xDRF9CSUFTCisKKwogZXh0ZXJuIGludCBrZXlwYWRfc2V0X3dha2UodW5zaWduZWQgaW50IG9uKTsKICNlbmRpZiAvKiBfX0FTTV9BUkNIX01GUF9QWEEyN1hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL214bTh4MTAuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9teG04eDEwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZhMTU2NgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9teG04eDEwLmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfX01BQ0hfTVhNXzhYMTBfSAorI2RlZmluZSBfX01BQ0hfTVhNXzhYMTBfSAorCisjZGVmaW5lIE1YTV84WDEwX0VUSF9QSFlTCTB4MTMwMDAwMDAKKworI2lmIGRlZmluZWQoQ09ORklHX01NQykKKworI2RlZmluZSBNWE1fOFgxMF9TRF9uQ0QgKDcyKQorI2RlZmluZSBNWE1fOFgxMF9TRF9XUCAoODQpCisKK2V4dGVybiB2b2lkIG14bV84eDEwX21tY19pbml0KHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBteG1fOHgxMF9tbWNfaW5pdCh2b2lkKSB7fQorI2VuZGlmCisKK2V4dGVybiB2b2lkIG14bV84eDEwX3VzYl9ob3N0X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBteG1fOHgxMF9hYzk3X2luaXQodm9pZCk7CisKK2V4dGVybiB2b2lkIG14bV84eDEwX2JhcmVib25lc19pbml0KHZvaWQpOworCisjZW5kaWYgLyogX19NQUNIX01YTV84WDEwX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wY20wMjcuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9wY20wMjcuaAppbmRleCA0ZGNkMmU4Li4wNDA4MzI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvcGNtMDI3LmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3BjbTAyNy5oCkBAIC0yMyw2ICsyMywxMyBAQAogICogRGVmaW5pdGlvbnMgb2YgQ1BVIGNhcmQgcmVzb3VyY2VzIG9ubHkKICAqLwogCisvKiBwaHlDT1JFLVBYQTI3MCAoUENNMDI3KSBJbnRlcnJ1cHRzICovCisjZGVmaW5lIFBDTTAyN19JUlEoeCkgICAgICAgICAgKElSUV9CT0FSRF9TVEFSVCArICh4KSkKKyNkZWZpbmUgUENNMDI3X0JUREVUX0lSUSAgICAgICBQQ00wMjdfSVJRKDApCisjZGVmaW5lIFBDTTAyN19GRl9SSV9JUlEgICAgICAgUENNMDI3X0lSUSgxKQorI2RlZmluZSBQQ00wMjdfTU1DREVUX0lSUSAgICAgIFBDTTAyN19JUlEoMikKKyNkZWZpbmUgUENNMDI3X1BNXzVWX0lSUSAgICAgICBQQ00wMjdfSVJRKDMpCisKIC8qIEkyQyBSVEMgKi8KICNkZWZpbmUgUENNMDI3X1JUQ19JUlFfR1BJTwkwCiAjZGVmaW5lIFBDTTAyN19SVENfSVJRCQlJUlFfR1BJTyhQQ00wMjdfUlRDX0lSUV9HUElPKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3NzcC5oIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3NzcC5oCmluZGV4IGNiNWNiNzYuLmJlMWJlNWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC9zc3AuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvc3NwLmgKQEAgLTQ2LDYgKzQ2LDcgQEAKIAlpbnQJCWRyY21yX3R4OwogfTsKIAorI2lmZGVmIENPTkZJR19QWEFfU1NQX0xFR0FDWQogLyoKICAqIFNTUCBpbml0aWFsaXNhdGlvbiBmbGFncwogICovCkBAIC03OCw2ICs3OSw3IEBACiBpbnQgc3NwX2luaXQoc3RydWN0IHNzcF9kZXYgKmRldiwgdTMyIHBvcnQsIHUzMiBpbml0X2ZsYWdzKTsKIGludCBzc3BfY29uZmlnKHN0cnVjdCBzc3BfZGV2ICpkZXYsIHUzMiBtb2RlLCB1MzIgZmxhZ3MsIHUzMiBwc3BfZmxhZ3MsIHUzMiBzcGVlZCk7CiB2b2lkIHNzcF9leGl0KHN0cnVjdCBzc3BfZGV2ICpkZXYpOworI2VuZGlmIC8qIENPTkZJR19QWEFfU1NQX0xFR0FDWSAqLwogCiAvKioKICAqIHNzcF93cml0ZV9yZWcgLSBXcml0ZSB0byBhIFNTUCByZWdpc3RlcgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKaW5kZXggMjM3NzM0Yi4uNWVmOTFkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0xMCwyMCArMTAsNDEgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3JlZy5oPgotI2luY2x1ZGUgPG1hY2gvcmVncy11YXJ0Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KIAotI2RlZmluZSBfX1JFRyh4KSAgICAgICAoKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKil4KQorI2RlZmluZSBGRlVBUlRfQkFTRQkoMHg0MDEwMDAwMCkKKyNkZWZpbmUgQlRVQVJUX0JBU0UJKDB4NDAyMDAwMDApCisjZGVmaW5lIFNUVUFSVF9CQVNFCSgweDQwNzAwMDAwKQogCi1zdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqVUFSVCA9IEZGVUFSVDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHVhcnRfYmFzZSA9IEZGVUFSVF9CQVNFOworc3RhdGljIHVuc2lnbmVkIGludCB1YXJ0X3NoaWZ0ID0gMjsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdWFydF9pc19weGEgPSAxOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgdWFydF9yZWFkKGludCBvZmZzZXQpCit7CisJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSh1YXJ0X2Jhc2UgKyAob2Zmc2V0IDw8IHVhcnRfc2hpZnQpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVhcnRfd3JpdGUodW5zaWduZWQgY2hhciB2YWwsIGludCBvZmZzZXQpCit7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKHVhcnRfYmFzZSArIChvZmZzZXQgPDwgdWFydF9zaGlmdCkpID0gdmFsOworfQorCitzdGF0aWMgaW5saW5lIGludCB1YXJ0X2lzX2VuYWJsZWQodm9pZCkKK3sKKwkvKiBhc3N1bWUgZW5hYmxlZCBieSBkZWZhdWx0IGZvciBub24tUFhBIHVhcnRzICovCisJcmV0dXJuIHVhcnRfaXNfcHhhID8gdWFydF9yZWFkKFVBUlRfSUVSKSAmIFVBUlRfSUVSX1VVRSA6IDE7Cit9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdXRjKGNoYXIgYykKIHsKLQlpZiAoIShVQVJUW1VBUlRfSUVSXSAmIElFUl9VVUUpKQorCWlmICghdWFydF9pc19lbmFibGVkKCkpCiAJCXJldHVybjsKLQl3aGlsZSAoIShVQVJUW1VBUlRfTFNSXSAmIExTUl9URFJRKSkKKworCXdoaWxlICghKHVhcnRfcmVhZChVQVJUX0xTUikgJiBVQVJUX0xTUl9USFJFKSkKIAkJYmFycmllcigpOwotCVVBUlRbVUFSVF9UWF0gPSBjOworCisJdWFydF93cml0ZShjLCBVQVJUX1RYKTsKIH0KIAogLyoKQEAgLTM4LDcgKzU5LDEzIEBACiAJaWYgKG1hY2hpbmVfaXNfbGl0dGxldG9uKCkgfHwgbWFjaGluZV9pc19pbnRlbG1vdGUyKCkKIAkgICAgfHwgbWFjaGluZV9pc19jc2I3MjYoKSB8fCBtYWNoaW5lX2lzX3N0YXJnYXRlMigpCiAJICAgIHx8IG1hY2hpbmVfaXNfY21feDMwMCgpIHx8IG1hY2hpbmVfaXNfYmFsbG9vbjMoKSkKLQkJVUFSVCA9IFNUVUFSVDsKKwkJdWFydF9iYXNlID0gU1RVQVJUX0JBU0U7CisKKwlpZiAobWFjaGluZV9pc19hcmNvbV96ZXVzKCkpIHsKKwkJdWFydF9iYXNlID0gMHgxMDAwMDAwMDsJLyogbkNTNCAqLworCQl1YXJ0X3NoaWZ0ID0gMTsKKwkJdWFydF9pc19weGEgPSAwOworCX0KIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC96ZXVzLmggYi9hcmNoL2FybS9tYWNoLXB4YS9pbmNsdWRlL21hY2gvemV1cy5oCmluZGV4IGMzODcwNDYuLjZlMTE5OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2luY2x1ZGUvbWFjaC96ZXVzLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvaW5jbHVkZS9tYWNoL3pldXMuaApAQCAtNTgsNiArNTgsOCBAQAogI2RlZmluZSBaRVVTX0VYVDFfR1BJTyh4KQkoWkVVU19FWFQxX0dQSU9fQkFTRSArICh4KSkKICNkZWZpbmUgWkVVU19VU0VSX0dQSU8oeCkJKFpFVVNfVVNFUl9HUElPX0JBU0UgKyAoeCkpCiAKKyNkZWZpbmUJWkVVU19DQU5fU0hETl9HUElPCVpFVVNfRVhUMV9HUElPKDIpCisKIC8qCiAgKiBDUExEIHJlZ2lzdGVyczoKICAqIE9ubHkgNCByZWdpc3RlcnMsIGJ1dCBzcHJlYWRlZCBvdmVyIGEgMzJNQiBhZGRyZXNzIHNwYWNlLgpAQCAtNjgsNyArNzAsNiBAQAogI2RlZmluZSBaRVVTX0NQTERfVkVSU0lPTgkoWkVVU19DUExEICsgMHgwMDAwKQogI2RlZmluZSBaRVVTX0NQTERfSVNBX0lSUQkoWkVVU19DUExEICsgMHgxMDAwKQogI2RlZmluZSBaRVVTX0NQTERfQ09OVFJPTAkoWkVVU19DUExEICsgMHgyMDAwKQotI2RlZmluZSBaRVVTX0NQTERfRVhUV0RPRwkoWkVVU19DUExEICsgMHgzMDAwKQogCiAvKiBDUExEIHJlZ2lzdGVyIGJpdHMgKi8KICNkZWZpbmUgWkVVU19DUExEX0NPTlRST0xfQ0ZfUlNUICAgICAgICAweDAxCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9scGQyNzAuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2xwZDI3MC5jCmluZGV4IDEzNzNjMjIuLmQyNzk1MDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2xwZDI3MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL2xwZDI3MC5jCkBAIC04Myw2ICs4MywxMCBAQAogCUdQSU84OV9VU0JIMV9QRU4sCiAKIAkvKiBBQzk3ICovCisJR1BJTzI4X0FDOTdfQklUQ0xLLAorCUdQSU8yOV9BQzk3X1NEQVRBX0lOXzAsCisJR1BJTzMwX0FDOTdfU0RBVEFfT1VULAorCUdQSU8zMV9BQzk3X1NZTkMsCiAJR1BJTzQ1X0FDOTdfU1lTQ0xLLAogCiAJR1BJTzFfR1BJTyB8IFdBS0VVUF9PTl9FREdFX0JPVEgsCkBAIC0xMjEsNyArMTI1LDcgQEAKIAogCXBlbmRpbmcgPSBfX3Jhd19yZWFkdyhMUEQyNzBfSU5UX1NUQVRVUykgJiBscGQyNzBfaXJxX2VuYWJsZWQ7CiAJZG8gewotCQlHRURSKDApID0gR1BJT19iaXQoMCk7ICAvKiBjbGVhciB1c2VsZXNzIGVkZ2Ugbm90aWZpY2F0aW9uICovCisJCWRlc2MtPmNoaXAtPmFjayhpcnEpOwkvKiBjbGVhciB1c2VsZXNzIGVkZ2Ugbm90aWZpY2F0aW9uICovCiAJCWlmIChsaWtlbHkocGVuZGluZykpIHsKIAkJCWlycSA9IExQRDI3MF9JUlEoMCkgKyBfX2ZmcyhwZW5kaW5nKTsKIAkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbHViYm9jay5jCmluZGV4IDk4ZWU3ZTUuLjYzZDY1YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL2x1YmJvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9sdWJib2NrLmMKQEAgLTY2LDI2ICs2NiwxNCBAQAogCUdQSU8yNV9TU1AxX1RYRCwKIAlHUElPMjZfU1NQMV9SWEQsCiAKKwkvKiBBQzk3ICovCisJR1BJTzI4X0FDOTdfQklUQ0xLLAorCUdQSU8yOV9BQzk3X1NEQVRBX0lOXzAsCisJR1BJTzMwX0FDOTdfU0RBVEFfT1VULAorCUdQSU8zMV9BQzk3X1NZTkMsCisKIAkvKiBMQ0QgLSAxNmJwcCBEU1ROICovCi0JR1BJTzU4X0xDRF9MRERfMCwKLQlHUElPNTlfTENEX0xERF8xLAotCUdQSU82MF9MQ0RfTEREXzIsCi0JR1BJTzYxX0xDRF9MRERfMywKLQlHUElPNjJfTENEX0xERF80LAotCUdQSU82M19MQ0RfTEREXzUsCi0JR1BJTzY0X0xDRF9MRERfNiwKLQlHUElPNjVfTENEX0xERF83LAotCUdQSU82Nl9MQ0RfTEREXzgsCi0JR1BJTzY3X0xDRF9MRERfOSwKLQlHUElPNjhfTENEX0xERF8xMCwKLQlHUElPNjlfTENEX0xERF8xMSwKLQlHUElPNzBfTENEX0xERF8xMiwKLQlHUElPNzFfTENEX0xERF8xMywKLQlHUElPNzJfTENEX0xERF8xNCwKLQlHUElPNzNfTENEX0xERF8xNSwKLQlHUElPNzRfTENEX0ZDTEssCi0JR1BJTzc1X0xDRF9MQ0xLLAotCUdQSU83Nl9MQ0RfUENMSywKKwlHUElPeHhfTENEX0RTVE5fMTZCUFAsCiAKIAkvKiBCVFVBUlQgKi8KIAlHUElPNDJfQlRVQVJUX1JYRCwKQEAgLTE1OCw3ICsxNDYsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgcGVuZGluZyA9IExVQl9JUlFfU0VUX0NMUiAmIGx1YmJvY2tfaXJxX2VuYWJsZWQ7CiAJZG8gewotCQlHRURSKDApID0gR1BJT19iaXQoMCk7CS8qIGNsZWFyIG91ciBwYXJlbnQgaXJxICovCisJCWRlc2MtPmNoaXAtPmFjayhpcnEpOwkvKiBjbGVhciBvdXIgcGFyZW50IGlycSAqLwogCQlpZiAobGlrZWx5KHBlbmRpbmcpKSB7CiAJCQlpcnEgPSBMVUJCT0NLX0lSUSgwKSArIF9fZmZzKHBlbmRpbmcpOwogCQkJZ2VuZXJpY19oYW5kbGVfaXJxKGlycSk7CkBAIC0yNDAsMTEgKzIyOCwxOCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHNhMTExMV9wbGF0Zm9ybV9kYXRhIHNhMTExMV9pbmZvID0geworCS5pcnFfYmFzZQk9IElSUV9CT0FSRF9FTkQsCit9OworCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzYTExMTFfZGV2aWNlID0gewogCS5uYW1lCQk9ICJzYTExMTEiLAogCS5pZAkJPSAtMSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2ExMTExX3Jlc291cmNlcyksCiAJLnJlc291cmNlCT0gc2ExMTExX3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2ExMTExX2luZm8sCisJfSwKIH07CiAKIC8qIEFEUzc4NDYgaXMgY29ubmVjdGVkIHRocm91Z2ggU1NQIC4uLiBhbmQgaWYgeW91ciBib2FyZCBoYXMgSjUgcG9wdWxhdGVkLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYyBiL2FyY2gvYXJtL21hY2gtcHhhL21hZ2ljaWFuLmMKaW5kZXggMTg5ZjMzMC4uZTgxZGQwYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvbWFnaWNpYW4uYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWdpY2lhbi5jCkBAIC04OCwyNiArODgsNyBAQAogCUdQSU8xMTJfTU1DX0NNRCwKIAogCS8qIExDRCAqLwotCUdQSU81OF9MQ0RfTEREXzAsCi0JR1BJTzU5X0xDRF9MRERfMSwKLQlHUElPNjBfTENEX0xERF8yLAotCUdQSU82MV9MQ0RfTEREXzMsCi0JR1BJTzYyX0xDRF9MRERfNCwKLQlHUElPNjNfTENEX0xERF81LAotCUdQSU82NF9MQ0RfTEREXzYsCi0JR1BJTzY1X0xDRF9MRERfNywKLQlHUElPNjZfTENEX0xERF84LAotCUdQSU82N19MQ0RfTEREXzksCi0JR1BJTzY4X0xDRF9MRERfMTAsCi0JR1BJTzY5X0xDRF9MRERfMTEsCi0JR1BJTzcwX0xDRF9MRERfMTIsCi0JR1BJTzcxX0xDRF9MRERfMTMsCi0JR1BJTzcyX0xDRF9MRERfMTQsCi0JR1BJTzczX0xDRF9MRERfMTUsCi0JR1BJTzc0X0xDRF9GQ0xLLAotCUdQSU83NV9MQ0RfTENMSywKLQlHUElPNzZfTENEX1BDTEssCi0JR1BJTzc3X0xDRF9CSUFTLAorCUdQSU94eF9MQ0RfVEZUXzE2QlBQLAogCiAJLyogUUNJICovCiAJR1BJTzEyX0NJRl9ERF83LApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbWFpbnN0b25lLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYwppbmRleCA4NTFlZTBmLi41NTQzYzY0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9tYWluc3RvbmUuYwpAQCAtNjAsMjYgKzYwLDcgQEAKIAlHUElPMTVfbkNTXzEsCiAKIAkvKiBMQ0QgLSAxNmJwcCBBY3RpdmUgVEZUICovCi0JR1BJTzU4X0xDRF9MRERfMCwKLQlHUElPNTlfTENEX0xERF8xLAotCUdQSU82MF9MQ0RfTEREXzIsCi0JR1BJTzYxX0xDRF9MRERfMywKLQlHUElPNjJfTENEX0xERF80LAotCUdQSU82M19MQ0RfTEREXzUsCi0JR1BJTzY0X0xDRF9MRERfNiwKLQlHUElPNjVfTENEX0xERF83LAotCUdQSU82Nl9MQ0RfTEREXzgsCi0JR1BJTzY3X0xDRF9MRERfOSwKLQlHUElPNjhfTENEX0xERF8xMCwKLQlHUElPNjlfTENEX0xERF8xMSwKLQlHUElPNzBfTENEX0xERF8xMiwKLQlHUElPNzFfTENEX0xERF8xMywKLQlHUElPNzJfTENEX0xERF8xNCwKLQlHUElPNzNfTENEX0xERF8xNSwKLQlHUElPNzRfTENEX0ZDTEssCi0JR1BJTzc1X0xDRF9MQ0xLLAotCUdQSU83Nl9MQ0RfUENMSywKLQlHUElPNzdfTENEX0JJQVMsCisJR1BJT3h4X0xDRF9URlRfMTZCUFAsCiAJR1BJTzE2X1BXTTBfT1VULAkvKiBCYWNrbGlnaHQgKi8KIAogCS8qIE1NQyAqLwpAQCAtMTA3LDYgKzg4LDEwIEBACiAJR1BJTzU3X25JT0lTMTYsCiAKIAkvKiBBQzk3ICovCisJR1BJTzI4X0FDOTdfQklUQ0xLLAorCUdQSU8yOV9BQzk3X1NEQVRBX0lOXzAsCisJR1BJTzMwX0FDOTdfU0RBVEFfT1VULAorCUdQSU8zMV9BQzk3X1NZTkMsCiAJR1BJTzQ1X0FDOTdfU1lTQ0xLLAogCiAJLyogS2V5cGFkICovCkBAIC0xNjIsNyArMTQ3LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHBlbmRpbmcgPSBNU1RfSU5UU0VUQ0xSICYgbWFpbnN0b25lX2lycV9lbmFibGVkOwogCWRvIHsKLQkJR0VEUigwKSA9IEdQSU9fYml0KDApOyAgLyogY2xlYXIgdXNlbGVzcyBlZGdlIG5vdGlmaWNhdGlvbiAqLworCQlkZXNjLT5jaGlwLT5hY2soaXJxKTsJLyogY2xlYXIgdXNlbGVzcyBlZGdlIG5vdGlmaWNhdGlvbiAqLwogCQlpZiAobGlrZWx5KHBlbmRpbmcpKSB7CiAJCQlpcnEgPSBNQUlOU1RPTkVfSVJRKDApICsgX19mZnMocGVuZGluZyk7CiAJCQlnZW5lcmljX2hhbmRsZV9pcnEoaXJxKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYyBiL2FyY2gvYXJtL21hY2gtcHhhL21pb2E3MDEuYwppbmRleCAyNDY2YTQ0Li44NDNmY2NhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9taW9hNzAxLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvbWlvYTcwMS5jCkBAIC04NiwyNSArODYsNyBAQAogCU1JT19DRkdfT1VUKEdQSU8yMl9VU0JfRU5BQkxFLCBBRjAsIERSSVZFX0xPVyksCiAKIAkvKiBMQ0QgKi8KLQlHUElPNThfTENEX0xERF8wLAotCUdQSU81OV9MQ0RfTEREXzEsCi0JR1BJTzYwX0xDRF9MRERfMiwKLQlHUElPNjFfTENEX0xERF8zLAotCUdQSU82Ml9MQ0RfTEREXzQsCi0JR1BJTzYzX0xDRF9MRERfNSwKLQlHUElPNjRfTENEX0xERF82LAotCUdQSU82NV9MQ0RfTEREXzcsCi0JR1BJTzY2X0xDRF9MRERfOCwKLQlHUElPNjdfTENEX0xERF85LAotCUdQSU82OF9MQ0RfTEREXzEwLAotCUdQSU82OV9MQ0RfTEREXzExLAotCUdQSU83MF9MQ0RfTEREXzEyLAotCUdQSU83MV9MQ0RfTEREXzEzLAotCUdQSU83Ml9MQ0RfTEREXzE0LAotCUdQSU83M19MQ0RfTEREXzE1LAotCUdQSU83NF9MQ0RfRkNMSywKLQlHUElPNzVfTENEX0xDTEssCi0JR1BJTzc2X0xDRF9QQ0xLLAorCUdQSU94eF9MQ0RfVEZUXzE2QlBQLAogCiAJLyogUUNJICovCiAJR1BJTzEyX0NJRl9ERF83LApAQCAtMTU1LDYgKzEzNywxMCBAQAogCUdQSU80MV9GRlVBUlRfUlRTLAogCiAJLyogU291bmQgKi8KKwlHUElPMjhfQUM5N19CSVRDTEssCisJR1BJTzI5X0FDOTdfU0RBVEFfSU5fMCwKKwlHUElPMzBfQUM5N19TREFUQV9PVVQsCisJR1BJTzMxX0FDOTdfU1lOQywKIAlHUElPODlfQUM5N19TWVNDTEssCiAJTUlPX0NGR19JTihHUElPMTJfSFBKQUNLX0lOU0VSVCwgQUYwKSwKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvbXhtOHgxMC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvbXhtOHgxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjOWM2ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9teG04eDEwLmMKQEAgLTAsMCArMSw0NzQgQEAKKy8qCisgKiBsaW51eC9hcmNoL2FybS9tYWNoLXB4YS9teG04eDEwLmMKKyAqCisgKiBTdXBwb3J0IGZvciB0aGUgRW1iZWRpYW4gTVhNLTh4MTAgQ29tcHV0ZXIgb24gTW9kdWxlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRW1iZWRpYW4gSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRNVCBTZXJ2aWNlcyAmIFN1cHBsaWVzIChQdHkpIEx0ZC4KKyAqCisgKiAyMDA3LTA5LTA0OiBlcmljIG1pYW8gPGVyaWMueS5taWFvQGdtYWlsLmNvbT4KKyAqICAgICAgICAgICAgIHJld3JpdGUgdG8gYWxpZ24gd2l0aCBsYXRlc3Qga2VybmVsCisgKgorICogMjAxMC0wMS0wOTogRWR3aW4gUGVlciA8ZXBlZXJAdG10c2VydmljZXMuY28uemE+CisgKiAJICAgICAgIEhlbm5pZSB2YW4gZGVyIE1lcndlIDxodmRtZXJ3ZUB0bXRzZXJ2aWNlcy5jby56YT4KKyAqICAgICAgICAgICAgIHJld29yayBmb3IgdXBzdHJlYW0gbWVyZ2UKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtOTAwMC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvaTJjLmg+CisjaW5jbHVkZSA8cGxhdC9weGEzeHhfbmFuZC5oPgorCisjaW5jbHVkZSA8bWFjaC9weGFmYi5oPgorI2luY2x1ZGUgPG1hY2gvbW1jLmg+CisjaW5jbHVkZSA8bWFjaC9vaGNpLmg+CisjaW5jbHVkZSA8bWFjaC9weGEzMjAuaD4KKworI2luY2x1ZGUgPG1hY2gvbXhtOHgxMC5oPgorCisjaW5jbHVkZSAiZGV2aWNlcy5oIgorI2luY2x1ZGUgImdlbmVyaWMuaCIKKworLyogR1BJTyBwaW4gZGVmaW5pdGlvbgorCitFeHRlcm5hbCBkZXZpY2Ugc3R1ZmYgICAtIExlYXZlIHVuY29uZmlndXJlZCBmb3Igbm93Li4uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dQSU8wICAgLSAgIERSRVEgICAgKEV4dGVybmFsIERNQSBSZXF1ZXN0KQorR1BJTzMgICAtICAgbkdDUzIgICAoRXh0ZXJuYWwgQ2hpcCBTZWxlY3QpIFdoZXJlIGlzIG5HQ1MwOyBuR0NTMTsgbkdDUzQ7IG5HQ1M1ID8KK0dQSU80ICAgLSAgIG5HQ1MzCitHUElPMTUgIC0gICBFWFRfR1BJTzEKK0dQSU8xNiAgLSAgIEVYVF9HUElPMgorR1BJTzE3ICAtICAgRVhUX0dQSU8zCitHUElPMjQgIC0gICBFWFRfR1BJTzQKK0dQSU8yNSAgLSAgIEVYVF9HUElPNQorR1BJTzI2ICAtICAgRVhUX0dQSU82CitHUElPMjcgIC0gICBFWFRfR1BJTzcKK0dQSU8yOCAgLSAgIEVYVF9HUElPOAorR1BJTzI5ICAtICAgRVhUX0dQSU85CitHUElPMzAgIC0gICBFWFRfR1BJTzEwCitHUElPMzEgIC0gICBFWFRfR1BJTzExCitHUElPNTcgIC0gICBFWFRfR1BJTzEyCitHUElPNzQgIC0gICBFWFRfSVJRMQorR1BJTzc1ICAtICAgRVhUX0lSUTIKK0dQSU83NiAgLSAgIEVYVF9JUlEzCitHUElPNzcgIC0gICBFWFRfSVJRNAorR1BJTzc4ICAtICAgRVhUX0lSUTUKK0dQSU83OSAgLSAgIEVYVF9JUlE2CitHUElPODAgIC0gICBFWFRfSVJRNworR1BJTzgxICAtICAgRVhUX0lSUTgKK0dQSU84NyAgLSAgIFZDQ0lPX1BXUkVOIChFeHRlcm5hbCBEZXZpY2UgUFdSRU4pCisKK0RhbGxhcyAxLVdpcmUgICAtIExlYXZlIHVuY29uZmlndXJlZCBmb3Igbm93Li4uCistLS0tLS0tLS0tLS0tCitHUElPMF8yIC0gICBEUyAtIDFXaXJlCisKK0V0aGVybmV0CistLS0tLS0tLQorR1BJTzEgICAtICAgRE05MDAwIFBXUgorR1BJTzkgICAtICAgRE05S19uSVJRCitHUElPMzYgIC0gICBETTlLX1JFU0VUCisKK0tleXBhZCAgLSBMZWF2ZSB1bmNvbmZpZ3VyZWQgYnkgZm9yIG5vdy4uLgorLS0tLS0tCitHUElPMV8yIC0gICBLUF9ES0lOMAorR1BJTzVfMiAtICAgS1BfTUtPVVQ3CitHUElPODIgIC0gICBLUF9ES0lOMQorR1BJTzg1ICAtICAgS1BfREtJTjIKK0dQSU84NiAgLSAgIEtQX0RLSU4zCitHUElPMTEzIC0gICBLUF9NS0lOMAorR1BJTzExNCAtICAgS1BfTUtJTjEKK0dQSU8xMTUgLSAgIEtQX01LSU4yCitHUElPMTE2IC0gICBLUF9NS0lOMworR1BJTzExNyAtICAgS1BfTUtJTjQKK0dQSU8xMTggLSAgIEtQX01LSU41CitHUElPMTE5IC0gICBLUF9NS0lONgorR1BJTzEyMCAtICAgS1BfTUtJTjcKK0dQSU8xMjEgLSAgIEtQX01LT1VUMAorR1BJTzEyMiAtICAgS1BfTUtPVVQxCitHUElPMTIyIC0gICBLUF9NS09VVDIKK0dQSU8xMjMgLSAgIEtQX01LT1VUMworR1BJTzEyNCAtICAgS1BfTUtPVVQ0CitHUElPMTI1IC0gICBLUF9NS09VVDUKK0dQSU8xMjcgLSAgIEtQX01LT1VUNgorCitEYXRhIEJ1cyAgICAtIExlYXZlIHVuY29uZmlndXJlZCBmb3Igbm93Li4uCistLS0tLS0tLQorR1BJTzIgICAtICAgbldhaXQgKERhdGEgQnVzKQorCitVU0IgRGV2aWNlCistLS0tLS0tLS0tCitHUElPNF8yIC0gICBVU0JEX1BVTExVUAorR1BJTzEwICAtICAgVVRNX0NMSyAoVVNCIERldmljZSBVVE0gQ2xrKQorR1BJTzQ5ICAtICAgVVNCIDIuMCBEZXZpY2UgVVRNX0RBVEEwCitHUElPNTAgIC0gICBVU0IgMi4wIERldmljZSBVVE1fREFUQTEKK0dQSU81MSAgLSAgIFVTQiAyLjAgRGV2aWNlIFVUTV9EQVRBMgorR1BJTzUyICAtICAgVVNCIDIuMCBEZXZpY2UgVVRNX0RBVEEzCitHUElPNTMgIC0gICBVU0IgMi4wIERldmljZSBVVE1fREFUQTQKK0dQSU81NCAgLSAgIFVTQiAyLjAgRGV2aWNlIFVUTV9EQVRBNQorR1BJTzU1ICAtICAgVVNCIDIuMCBEZXZpY2UgVVRNX0RBVEE2CitHUElPNTYgIC0gICBVU0IgMi4wIERldmljZSBVVE1fREFUQTcKK0dQSU81OCAgLSAgIFVUTV9SWFZBTElEIChVU0IgMi4wIERldmljZSkKK0dQSU81OSAgLSAgIFVUTV9SWEFDVElWRSAoVVNCIDIuMCBEZXZpY2UpCitHUElPNjAgIC0gICBVVE1fUlhFUlJPUgorR1BJTzYxICAtICAgVVRNX09QTU9ERTAKK0dQSU82MiAgLSAgIFVUTV9PUE1PREUxCitHUElPNzEgIC0gICBVU0JEX0lOVCAgICAoVVNCIERldmljZT8pCitHUElPNzMgIC0gICBVVE1fVFhSRUFEWSAoVVNCIDIuMCBEZXZpY2UpCitHUElPODMgIC0gICBVVE1fVFhWQUxJRCAoVVNCIDIuMCBEZXZpY2UpCitHUElPOTggIC0gICBVVE1fUkVTRVQgICAoVVNCIDIuMCBkZXZpY2UpCitHUElPOTkgIC0gICBVVE1fWENWUl9TRUxFQ1QKK0dQSU8xMDAgLSAgIFVUTV9URVJNX1NFTEVDVAorR1BJTzEwMSAtICAgVVRNX1NVU1BFTkRNX1gKK0dQSU8xMDIgLSAgIFVUTV9MSU5FU1RBVEUwCitHUElPMTAzIC0gICBVVE1fTElORVNUQVRFMQorCitDYXJkLUJ1cyBJbnRlcmZhY2UgIC0gTGVhdmUgdW5jb25maWd1cmVkIGZvciBub3cuLi4KKy0tLS0tLS0tLS0tLS0tLS0tLQorR1BJTzUgICAtICAgblBJT1IgKEkvTyBzcGFjZSBvdXRwdXQgZW5hYmxlKQorR1BJTzYgICAtICAgblBJT1cgKEkvTyBzcGFjZSB3cml0ZSBlbmFibGUpCitHUElPNyAgIC0gICBuSU9TMTYgKElucHV0IGZyb20gSS9PIHNwYWNlIHRlbGxpbmcgc2l6ZSBvZiBkYXRhIGJ1cykKK0dQSU84ICAgLSAgIG5QV0FJVCAoSW5wdXQgZm9yIGluc2VydGluZyB3YWl0IHN0YXRlcykKKworTENECistLS0KK0dQSU82XzIgICAgIC0gICBMREQwCitHUElPN18yICAgICAtICAgTEREMQorR1BJTzhfMiAgICAgLSAgIExERDIKK0dQSU85XzIgICAgIC0gICBMREQzCitHUElPMTFfMiAgICAtICAgTERENQorR1BJTzEyXzIgICAgLSAgIExERDYKK0dQSU8xM18yICAgIC0gICBMREQ3CitHUElPMTRfMiAgICAtICAgVlNZTkMKK0dQSU8xNV8yICAgIC0gICBIU1lOQworR1BJTzE2XzIgICAgLSAgIFZDTEsKK0dQSU8xN18yICAgIC0gICBIQ0xLCitHUElPMThfMiAgICAtICAgVkRFTgorR1BJTzYzICAgICAgLSAgIExERDggICAgKENQVSBMQ0QpCitHUElPNjQgICAgICAtICAgTEREOSAgICAoQ1BVIExDRCkKK0dQSU82NSAgICAgIC0gICBMREQxMCAgIChDUFUgTENEKQorR1BJTzY2ICAgICAgLSAgIExERDExICAgKENQVSBMQ0QpCitHUElPNjcgICAgICAtICAgTEREMTIgICAoQ1BVIExDRCkKK0dQSU82OCAgICAgIC0gICBMREQxMyAgIChDUFUgTENEKQorR1BJTzY5ICAgICAgLSAgIExERDE0ICAgKENQVSBMQ0QpCitHUElPNzAgICAgICAtICAgTEREMTUgICAoQ1BVIExDRCkKK0dQSU84OCAgICAgIC0gICBWQ0NMQ0RfUFdSRU4gKExDRCBQYW5lbCBQV1JFTikKK0dQSU85NyAgICAgIC0gICBCQUNLTElHSFRfRU4KK0dQSU8xMDQgICAgIC0gICBMQ0RfUFdSRU4KKworUFdNICAgLSBMZWF2ZSB1bmNvbmZpZ3VyZWQgZm9yIG5vdy4uLgorLS0tCitHUElPMTEgIC0gICBQV00wCitHUElPMTIgIC0gICBQV00xCitHUElPMTMgIC0gICBQV00yCitHUElPMTQgIC0gICBQV00zCisKK1NELUNBUkQKKy0tLS0tLS0KK0dQSU8xOCAgLSAgIFNEREFUQTAKK0dQSU8xOSAgLSAgIFNEREFUQTEKK0dQSU8yMCAgLSAgIFNEREFUQTIKK0dQSU8yMSAgLSAgIFNEREFUQTMKK0dQSU8yMiAgLSAgIFNEQ0xLCitHUElPMjMgIC0gICBTRENNRAorR1BJTzcyICAtICAgU0RfV1AKK0dQSU84NCAgLSAgIFNEX25JUlFfQ0QgIChTRC1DYXJkKQorCitJMkMKKy0tLQorR1BJTzMyICAtICAgSTJDU0NMCitHUElPMzMgIC0gICBJMkNTREEKKworQUM5NworLS0tLQorR1BJTzM1ICAtICAgQUM5N19TREFUQV9JTgorR1BJTzM3ICAtICAgQUM5N19TREFUQV9PVVQKK0dQSU8zOCAgLSAgIEFDOTdfU1lOQworR1BJTzM5ICAtICAgQUM5N19CSVRDTEsKK0dQSU80MCAgLSAgIEFDOTdfblJFU0VUCisKK1VBUlQxCistLS0tLQorR1BJTzQxICAtICAgVUFSVF9SWEQxCitHUElPNDIgIC0gICBVQVJUX1RYRDEKK0dQSU80MyAgLSAgIFVBUlRfQ1RTMQorR1BJTzQ0ICAtICAgVUFSVF9EQ0QxCitHUElPNDUgIC0gICBVQVJUX0RTUjEKK0dQSU80NiAgLSAgIFVBUlRfblJJMQorR1BJTzQ3ICAtICAgVUFSVF9EVFIxCitHUElPNDggIC0gICBVQVJUX1JUUzEKKworVUFSVDIKKy0tLS0tCitHUElPMTA5IC0gICBSVFMyCitHUElPMTEwIC0gICBSWEQyCitHUElPMTExIC0gICBUWEQyCitHUElPMTEyIC0gICBuQ1RTMgorCitVQVJUMworLS0tLS0KK0dQSU8xMDUgLSAgIG5DVFMzCitHUElPMTA2IC0gICBuUlRTMworR1BJTzEwNyAtICAgVFhEMworR1BJTzEwOCAtICAgUlhEMworCitTU1AzICAgIC0gTGVhdmUgdW5jb25maWd1cmVkIGZvciBub3cuLi4KKy0tLS0KK0dQSU84OSAgLSAgIFNTUDNfQ0xLCitHUElPOTAgIC0gICBTU1AzX1NGUk0KK0dQSU85MSAgLSAgIFNTUDNfVFhECitHUElPOTIgIC0gICBTU1AzX1JYRAorCitTU1A0CitHUElPOTMgIC0gICBTU1A0X0NMSworR1BJTzk0ICAtICAgU1NQNF9TRlJNCitHUElPOTUgIC0gICBTU1A0X1RYRAorR1BJTzk2ICAtICAgU1NQNF9SWEQKKyovCisKK3N0YXRpYyBtZnBfY2ZnX3QgbWZwX2NmZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogVVNCICovCisJR1BJTzEwX1VUTV9DTEssCisJR1BJTzQ5X1UyRF9QSFlEQVRBXzAsCisJR1BJTzUwX1UyRF9QSFlEQVRBXzEsCisJR1BJTzUxX1UyRF9QSFlEQVRBXzIsCisJR1BJTzUyX1UyRF9QSFlEQVRBXzMsCisJR1BJTzUzX1UyRF9QSFlEQVRBXzQsCisJR1BJTzU0X1UyRF9QSFlEQVRBXzUsCisJR1BJTzU1X1UyRF9QSFlEQVRBXzYsCisJR1BJTzU2X1UyRF9QSFlEQVRBXzcsCisJR1BJTzU4X1VUTV9SWFZBTElELAorCUdQSU81OV9VVE1fUlhBQ1RJVkUsCisJR1BJTzYwX1UyRF9SWEVSUk9SLAorCUdQSU82MV9VMkRfT1BNT0RFMCwKKwlHUElPNjJfVTJEX09QTU9ERTEsCisJR1BJTzcxX0dQSU8sIC8qIFVTQkRfSU5UICovCisJR1BJTzczX1VUTV9UWFJFQURZLAorCUdQSU84M19VMkRfVFhWQUxJRCwKKwlHUElPOThfVTJEX1JFU0VULAorCUdQSU85OV9VMkRfWENWUl9TRUwsCisJR1BJTzEwMF9VMkRfVEVSTV9TRUwsCisJR1BJTzEwMV9VMkRfU1VTUEVORCwKKwlHUElPMTAyX1VUTV9MSU5FU1RBVEVfMCwKKwlHUElPMTAzX1VUTV9MSU5FU1RBVEVfMSwKKwlHUElPNF8yX0dQSU8gfCBNRlBfUFVMTF9ISUdILCAvKiBVVE1fUFVMTFVQICovCisKKwkvKiBETTkwMDAgKi8KKwlHUElPMV9HUElPLAorCUdQSU85X0dQSU8sCisJR1BJTzM2X0dQSU8sCisKKwkvKiBBQzk3ICovCisJR1BJTzM1X0FDOTdfU0RBVEFfSU5fMCwKKwlHUElPMzdfQUM5N19TREFUQV9PVVQsCisJR1BJTzM4X0FDOTdfU1lOQywKKwlHUElPMzlfQUM5N19CSVRDTEssCisJR1BJTzQwX0FDOTdfbkFDUkVTRVQsCisKKwkvKiBVQVJUUyAqLworCUdQSU80MV9VQVJUMV9SWEQsCisJR1BJTzQyX1VBUlQxX1RYRCwKKwlHUElPNDNfVUFSVDFfQ1RTLAorCUdQSU80NF9VQVJUMV9EQ0QsCisJR1BJTzQ1X1VBUlQxX0RTUiwKKwlHUElPNDZfVUFSVDFfUkksCisJR1BJTzQ3X1VBUlQxX0RUUiwKKwlHUElPNDhfVUFSVDFfUlRTLAorCisJR1BJTzEwOV9VQVJUMl9SVFMsCisJR1BJTzExMF9VQVJUMl9SWEQsCisJR1BJTzExMV9VQVJUMl9UWEQsCisJR1BJTzExMl9VQVJUMl9DVFMsCisKKwlHUElPMTA1X1VBUlQzX0NUUywKKwlHUElPMTA2X1VBUlQzX1JUUywKKwlHUElPMTA3X1VBUlQzX1RYRCwKKwlHUElPMTA4X1VBUlQzX1JYRCwKKworCUdQSU83OF9HUElPLAorCUdQSU83OV9HUElPLAorCUdQSU84MF9HUElPLAorCUdQSU84MV9HUElPLAorCisJLyogSTJDICovCisJR1BJTzMyX0kyQ19TQ0wsCisJR1BJTzMzX0kyQ19TREEsCisKKwkvKiBNTUMgKi8KKwlHUElPMThfTU1DMV9EQVQwLAorCUdQSU8xOV9NTUMxX0RBVDEsCisJR1BJTzIwX01NQzFfREFUMiwKKwlHUElPMjFfTU1DMV9EQVQzLAorCUdQSU8yMl9NTUMxX0NMSywKKwlHUElPMjNfTU1DMV9DTUQsCisJR1BJTzcyX0dQSU8gfCBNRlBfUFVMTF9ISUdILCAvKiBDYXJkIERldGVjdCAqLworCUdQSU84NF9HUElPIHwgTUZQX1BVTExfTE9XLCAvKiBXcml0ZSBQcm90ZWN0ICovCisKKwkvKiBJUlEgKi8KKwlHUElPNzRfR1BJTyB8IE1GUF9MUE1fRURHRV9SSVNFLCAvKiBFWFRfSVJRMSAqLworCUdQSU83NV9HUElPIHwgTUZQX0xQTV9FREdFX1JJU0UsIC8qIEVYVF9JUlEyICovCisJR1BJTzc2X0dQSU8gfCBNRlBfTFBNX0VER0VfUklTRSwgLyogRVhUX0lSUTMgKi8KKwlHUElPNzdfR1BJTyB8IE1GUF9MUE1fRURHRV9SSVNFLCAvKiBFWFRfSVJRNCAqLworCUdQSU83OF9HUElPIHwgTUZQX0xQTV9FREdFX1JJU0UsIC8qIEVYVF9JUlE1ICovCisJR1BJTzc5X0dQSU8gfCBNRlBfTFBNX0VER0VfUklTRSwgLyogRVhUX0lSUTYgKi8KKwlHUElPODBfR1BJTyB8IE1GUF9MUE1fRURHRV9SSVNFLCAvKiBFWFRfSVJRNyAqLworCUdQSU84MV9HUElPIHwgTUZQX0xQTV9FREdFX1JJU0UgIC8qIEVYVF9JUlE4ICovCit9OworCisvKiBNTUMvTUNJIFN1cHBvcnQgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19NTUMpCitzdGF0aWMgc3RydWN0IHB4YW1jaV9wbGF0Zm9ybV9kYXRhIG14bV84eDEwX21jaV9wbGF0Zm9ybV9kYXRhID0geworCS5vY3JfbWFzayA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0LAorCS5kZXRlY3RfZGVsYXkgPSAxLAorCS5ncGlvX2NhcmRfZGV0ZWN0ID0gTVhNXzhYMTBfU0RfbkNELAorCS5ncGlvX2NhcmRfcm8gPSBNWE1fOFgxMF9TRF9XUCwKKwkuZ3Bpb19wb3dlciA9IC0xCit9OworCit2b2lkIF9faW5pdCBteG1fOHgxMF9tbWNfaW5pdCh2b2lkKQoreworCXB4YV9zZXRfbWNpX2luZm8oJm14bV84eDEwX21jaV9wbGF0Zm9ybV9kYXRhKTsKK30KKyNlbmRpZgorCisvKiBVU0IgT3BlbiBIb3N0IENvbnRyb2xlciBJbnRlcmZhY2UgKi8KK3N0YXRpYyBzdHJ1Y3QgcHhhb2hjaV9wbGF0Zm9ybV9kYXRhIG14bV84eDEwX29oY2lfcGxhdGZvcm1fZGF0YSA9IHsKKwkucG9ydF9tb2RlID0gUE1NX05QU19NT0RFLAorCS5mbGFncyA9IEVOQUJMRV9QT1JUX0FMTAorfTsKKwordm9pZCBfX2luaXQgbXhtXzh4MTBfdXNiX2hvc3RfaW5pdCh2b2lkKQoreworCXB4YV9zZXRfb2hjaV9pbmZvKCZteG1fOHgxMF9vaGNpX3BsYXRmb3JtX2RhdGEpOworfQorCisvKiBBQzk3IFNvdW5kIFN1cHBvcnQgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG14bV84eDEwX2FjOTdfZGV2aWNlID0geworCS5uYW1lID0gInB4YTJ4eC1hYzk3IgorfTsKKwordm9pZCBfX2luaXQgbXhtXzh4MTBfYWM5N19pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZteG1fOHgxMF9hYzk3X2RldmljZSk7Cit9CisKKy8qIE5BTkQgZmxhc2ggU3VwcG9ydCAqLworI2lmIGRlZmluZWQoQ09ORklHX01URF9OQU5EX1BYQTN4eCkgfHwgZGVmaW5lZChDT05GSUdfTVREX05BTkRfUFhBM3h4X01PRFVMRSkKKyNkZWZpbmUgTkFORF9CTE9DS19TSVpFIFNaXzEyOEsKKyNkZWZpbmUgTkIoeCkgICAgICAgICAgIChOQU5EX0JMT0NLX1NJWkUgKiAoeCkpCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbXhtXzh4MTBfbmFuZF9wYXJ0aXRpb25zW10gPSB7CisJWzBdID0geworCSAgICAgICAubmFtZSA9ICJib290IiwKKwkgICAgICAgLnNpemUgPSBOQigweDAwMiksCisJICAgICAgIC5vZmZzZXQgPSBOQigweDAwMCksCisJICAgICAgIC5tYXNrX2ZsYWdzID0gTVREX1dSSVRFQUJMRQorCX0sCisJWzFdID0geworCSAgICAgICAubmFtZSA9ICJrZXJuZWwiLAorCSAgICAgICAuc2l6ZSA9IE5CKDB4MDEwKSwKKwkgICAgICAgLm9mZnNldCA9IE5CKDB4MDAyKSwKKwkgICAgICAgLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFCisJfSwKKwlbMl0gPSB7CisJICAgICAgIC5uYW1lID0gInJvb3QiLAorCSAgICAgICAuc2l6ZSA9IE5CKDB4MzZjKSwKKwkgICAgICAgLm9mZnNldCA9IE5CKDB4MDEyKQorCX0sCisJWzNdID0geworCSAgICAgICAubmFtZSA9ICJiYnQiLAorCSAgICAgICAuc2l6ZSA9IE5CKDB4MDgyKSwKKwkgICAgICAgLm9mZnNldCA9IE5CKDB4MzdlKSwKKwkgICAgICAgLm1hc2tfZmxhZ3MgPSBNVERfV1JJVEVBQkxFCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBweGEzeHhfbmFuZF9wbGF0Zm9ybV9kYXRhIG14bV84eDEwX25hbmRfaW5mbyA9IHsKKwkuZW5hYmxlX2FyYml0ZXIgPSAxLAorCS5rZWVwX2NvbmZpZyA9IDEsCisJLnBhcnRzID0gbXhtXzh4MTBfbmFuZF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cyA9IEFSUkFZX1NJWkUobXhtXzh4MTBfbmFuZF9wYXJ0aXRpb25zKQorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG14bV84eDEwX25hbmRfaW5pdCh2b2lkKQoreworCXB4YTN4eF9zZXRfbmFuZF9pbmZvKCZteG1fOHgxMF9uYW5kX2luZm8pOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBteG1fOHgxMF9uYW5kX2luaXQodm9pZCkge30KKyNlbmRpZiAvKiBDT05GSUdfTVREX05BTkRfUFhBM3h4IHx8IENPTkZJR19NVERfTkFORF9QWEEzeHhfTU9EVUxFICovCisKKy8qIEV0aGVybmV0IHN1cHBvcnQ6IERhdmljb20gRE05MDAwICovCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGRtOWtfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCSAgICAgICAuc3RhcnQgPSBNWE1fOFgxMF9FVEhfUEhZUyArIDB4MzAwLAorCSAgICAgICAuZW5kID0gTVhNXzhYMTBfRVRIX1BIWVMgKyAweDMwMCwKKwkgICAgICAgLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0KKwl9LAorCVsxXSA9IHsKKwkgICAgICAgLnN0YXJ0ID0gTVhNXzhYMTBfRVRIX1BIWVMgKyAweDMwOCwKKwkgICAgICAgLmVuZCA9IE1YTV84WDEwX0VUSF9QSFlTICsgMHgzMDgsCisJICAgICAgIC5mbGFncyA9IElPUkVTT1VSQ0VfTUVNCisJfSwKKwlbMl0gPSB7CisJICAgICAgIC5zdGFydCA9IGdwaW9fdG9faXJxKG1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzkpKSwKKwkgICAgICAgLmVuZCA9IGdwaW9fdG9faXJxKG1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzkpKSwKKwkgICAgICAgLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9ISUdIRURHRQorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgZG05MDAwX3BsYXRfZGF0YSBkbTlrX3BsYXRfZGF0YSA9IHsKKwkuZmxhZ3MgPSBETTkwMDBfUExBVEZfMTZCSVRPTkxZCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbTlrX2RldmljZSA9IHsKKwkubmFtZSA9ICJkbTkwMDAiLAorCS5pZCA9IDAsCisJLm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGRtOWtfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgPSBkbTlrX3Jlc291cmNlcywKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZkbTlrX3BsYXRfZGF0YQorCX0KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBteG1fOHgxMF9ldGhlcm5ldF9pbml0KHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZkbTlrX2RldmljZSk7Cit9CisKKy8qIFBYQSBVQVJUcyAqLworc3RhdGljIHZvaWQgX19pbml0IG14bV84eDEwX3VhcnRzX2luaXQodm9pZCkKK3sKKwlweGFfc2V0X2ZmdWFydF9pbmZvKE5VTEwpOworCXB4YV9zZXRfYnR1YXJ0X2luZm8oTlVMTCk7CisJcHhhX3NldF9zdHVhcnRfaW5mbyhOVUxMKTsKK30KKworLyogSTJDIGFuZCBSZWFsIFRpbWUgQ2xvY2sgKi8KK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gX19pbml0ZGF0YSBteG1fOHgxMF9pMmNfZGV2aWNlc1tdID0geworCXsKKwkJSTJDX0JPQVJEX0lORk8oImRzMTMzNyIsIDB4NjgpCisJfQorfTsKKworc3RhdGljIHZvaWQgX19pbml0IG14bV84eDEwX2kyY19pbml0KHZvaWQpCit7CisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgbXhtXzh4MTBfaTJjX2RldmljZXMsCisJCQkJQVJSQVlfU0laRShteG1fOHgxMF9pMmNfZGV2aWNlcykpOworCXB4YV9zZXRfaTJjX2luZm8oTlVMTCk7Cit9CisKK3ZvaWQgX19pbml0IG14bV84eDEwX2JhcmVib25lc19pbml0KHZvaWQpCit7CisJcHhhM3h4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUobWZwX2NmZykpOworCisJbXhtXzh4MTBfdWFydHNfaW5pdCgpOworCW14bV84eDEwX25hbmRfaW5pdCgpOworCW14bV84eDEwX2kyY19pbml0KCk7CisJbXhtXzh4MTBfZXRoZXJuZXRfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbWxkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtbGQuYwppbmRleCBlMTAwYWY3Li5mNzBjNzViIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtbGQuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtbGQuYwpAQCAtODMsMjYgKzgzLDcgQEAKIAlHUElPMTA1X0tQX01LT1VUXzIsCiAKIAkvKiBMQ0QgKi8KLQlHUElPNThfTENEX0xERF8wLAotCUdQSU81OV9MQ0RfTEREXzEsCi0JR1BJTzYwX0xDRF9MRERfMiwKLQlHUElPNjFfTENEX0xERF8zLAotCUdQSU82Ml9MQ0RfTEREXzQsCi0JR1BJTzYzX0xDRF9MRERfNSwKLQlHUElPNjRfTENEX0xERF82LAotCUdQSU82NV9MQ0RfTEREXzcsCi0JR1BJTzY2X0xDRF9MRERfOCwKLQlHUElPNjdfTENEX0xERF85LAotCUdQSU82OF9MQ0RfTEREXzEwLAotCUdQSU82OV9MQ0RfTEREXzExLAotCUdQSU83MF9MQ0RfTEREXzEyLAotCUdQSU83MV9MQ0RfTEREXzEzLAotCUdQSU83Ml9MQ0RfTEREXzE0LAotCUdQSU83M19MQ0RfTEREXzE1LAotCUdQSU83NF9MQ0RfRkNMSywKLQlHUElPNzVfTENEX0xDTEssCi0JR1BJTzc2X0xDRF9QQ0xLLAotCUdQSU83N19MQ0RfQklBUywKKwlHUElPeHhfTENEX1RGVF8xNkJQUCwKIAogCS8qIFBXTSAqLwogCUdQSU8xNl9QV00wX09VVCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10NS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXQ1LmMKaW5kZXggOGZlM2VjMi4uZDkwMmE4MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXQ1LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXQ1LmMKQEAgLTg3LDI2ICs4Nyw3IEBACiAJR1BJTzEwNV9LUF9NS09VVF8yLAogCiAJLyogTENEICovCi0JR1BJTzU4X0xDRF9MRERfMCwKLQlHUElPNTlfTENEX0xERF8xLAotCUdQSU82MF9MQ0RfTEREXzIsCi0JR1BJTzYxX0xDRF9MRERfMywKLQlHUElPNjJfTENEX0xERF80LAotCUdQSU82M19MQ0RfTEREXzUsCi0JR1BJTzY0X0xDRF9MRERfNiwKLQlHUElPNjVfTENEX0xERF83LAotCUdQSU82Nl9MQ0RfTEREXzgsCi0JR1BJTzY3X0xDRF9MRERfOSwKLQlHUElPNjhfTENEX0xERF8xMCwKLQlHUElPNjlfTENEX0xERF8xMSwKLQlHUElPNzBfTENEX0xERF8xMiwKLQlHUElPNzFfTENEX0xERF8xMywKLQlHUElPNzJfTENEX0xERF8xNCwKLQlHUElPNzNfTENEX0xERF8xNSwKLQlHUElPNzRfTENEX0ZDTEssCi0JR1BJTzc1X0xDRF9MQ0xLLAotCUdQSU83Nl9MQ0RfUENMSywKLQlHUElPNzdfTENEX0JJQVMsCisJR1BJT3h4X0xDRF9URlRfMTZCUFAsCiAKIAkvKiBQV00gKi8KIAlHUElPMTZfUFdNMF9PVVQsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGMuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10Yy5jCmluZGV4IGI5OTJmMDcuLjcxN2Q3YTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10Yy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10Yy5jCkBAIC04NCwyNiArODQsNyBAQAogCUdQSU8zNl9HUElPLAkvKiBwdWxsdXAgKi8KIAogCS8qIExDRCAqLwotCUdQSU81OF9MQ0RfTEREXzAsCi0JR1BJTzU5X0xDRF9MRERfMSwKLQlHUElPNjBfTENEX0xERF8yLAotCUdQSU82MV9MQ0RfTEREXzMsCi0JR1BJTzYyX0xDRF9MRERfNCwKLQlHUElPNjNfTENEX0xERF81LAotCUdQSU82NF9MQ0RfTEREXzYsCi0JR1BJTzY1X0xDRF9MRERfNywKLQlHUElPNjZfTENEX0xERF84LAotCUdQSU82N19MQ0RfTEREXzksCi0JR1BJTzY4X0xDRF9MRERfMTAsCi0JR1BJTzY5X0xDRF9MRERfMTEsCi0JR1BJTzcwX0xDRF9MRERfMTIsCi0JR1BJTzcxX0xDRF9MRERfMTMsCi0JR1BJTzcyX0xDRF9MRERfMTQsCi0JR1BJTzczX0xDRF9MRERfMTUsCi0JR1BJTzc0X0xDRF9GQ0xLLAotCUdQSU83NV9MQ0RfTENMSywKLQlHUElPNzZfTENEX1BDTEssCi0JR1BJTzc3X0xDRF9CSUFTLAorCUdQSU94eF9MQ0RfVEZUXzE2QlBQLAogCiAJLyogTUFUUklYIEtFWVBBRCAqLwogCUdQSU8wX0dQSU8gfCBXQUtFVVBfT05fRURHRV9CT1RILAkvKiBpbiAwICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGUyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdGUyLmMKaW5kZXggZGM3MjhkNi4uM2QyODRmZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRlMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10ZTIuYwpAQCAtNzMsMjYgKzczLDcgQEAKIAlHUElPNDdfRklDUF9UWEQsCiAKIAkvKiBMQ0QgKi8KLQlHUElPNThfTENEX0xERF8wLAotCUdQSU81OV9MQ0RfTEREXzEsCi0JR1BJTzYwX0xDRF9MRERfMiwKLQlHUElPNjFfTENEX0xERF8zLAotCUdQSU82Ml9MQ0RfTEREXzQsCi0JR1BJTzYzX0xDRF9MRERfNSwKLQlHUElPNjRfTENEX0xERF82LAotCUdQSU82NV9MQ0RfTEREXzcsCi0JR1BJTzY2X0xDRF9MRERfOCwKLQlHUElPNjdfTENEX0xERF85LAotCUdQSU82OF9MQ0RfTEREXzEwLAotCUdQSU82OV9MQ0RfTEREXzExLAotCUdQSU83MF9MQ0RfTEREXzEyLAotCUdQSU83MV9MQ0RfTEREXzEzLAotCUdQSU83Ml9MQ0RfTEREXzE0LAotCUdQSU83M19MQ0RfTEREXzE1LAotCUdQSU83NF9MQ0RfRkNMSywKLQlHUElPNzVfTENEX0xDTEssCi0JR1BJTzc2X0xDRF9QQ0xLLAotCUdQSU83N19MQ0RfQklBUywKKwlHUElPeHhfTENEX1RGVF8xNkJQUCwKIAogCS8qIEdQSU8gS0VZUyAqLwogCUdQSU81X0dQSU8sCS8qIG5vdGVzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHJlby5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXRyZW8uYwppbmRleCBiNDMzYmI0Li5kOGI0NDY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wYWxtdHJlby5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10cmVvLmMKQEAgLTk5LDI1ICs5OSw3IEBACiAJR1BJTzkzX0tQX0RLSU5fMCB8IFdBS0VVUF9PTl9MRVZFTF9ISUdILAkvKiBIb3RzeW5jIGJ1dHRvbiAqLwogCiAJLyogTENEICovCi0JR1BJTzU4X0xDRF9MRERfMCwKLQlHUElPNTlfTENEX0xERF8xLAotCUdQSU82MF9MQ0RfTEREXzIsCi0JR1BJTzYxX0xDRF9MRERfMywKLQlHUElPNjJfTENEX0xERF80LAotCUdQSU82M19MQ0RfTEREXzUsCi0JR1BJTzY0X0xDRF9MRERfNiwKLQlHUElPNjVfTENEX0xERF83LAotCUdQSU82Nl9MQ0RfTEREXzgsCi0JR1BJTzY3X0xDRF9MRERfOSwKLQlHUElPNjhfTENEX0xERF8xMCwKLQlHUElPNjlfTENEX0xERF8xMSwKLQlHUElPNzBfTENEX0xERF8xMiwKLQlHUElPNzFfTENEX0xERF8xMywKLQlHUElPNzJfTENEX0xERF8xNCwKLQlHUElPNzNfTENEX0xERF8xNSwKLQlHUElPNzRfTENEX0ZDTEssCi0JR1BJTzc1X0xDRF9MQ0xLLAotCUdQSU83Nl9MQ0RfUENMSywKKwlHUElPeHhfTENEX1RGVF8xNkJQUCwKIAogCS8qIFF1aWNrIENhcHR1cmUgSW50ZXJmYWNlICovCiAJR1BJTzg0X0NJRl9GViwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG10eC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXR4LmMKaW5kZXggYjM3YTAyNS4uMDA3YjU4YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXR4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXR4LmMKQEAgLTExMCwyNiArMTEwLDcgQEAKIAlHUElPMTA1X0tQX01LT1VUXzIsCiAKIAkvKiBMQ0QgKi8KLQlHUElPNThfTENEX0xERF8wLAotCUdQSU81OV9MQ0RfTEREXzEsCi0JR1BJTzYwX0xDRF9MRERfMiwKLQlHUElPNjFfTENEX0xERF8zLAotCUdQSU82Ml9MQ0RfTEREXzQsCi0JR1BJTzYzX0xDRF9MRERfNSwKLQlHUElPNjRfTENEX0xERF82LAotCUdQSU82NV9MQ0RfTEREXzcsCi0JR1BJTzY2X0xDRF9MRERfOCwKLQlHUElPNjdfTENEX0xERF85LAotCUdQSU82OF9MQ0RfTEREXzEwLAotCUdQSU82OV9MQ0RfTEREXzExLAotCUdQSU83MF9MQ0RfTEREXzEyLAotCUdQSU83MV9MQ0RfTEREXzEzLAotCUdQSU83Ml9MQ0RfTEREXzE0LAotCUdQSU83M19MQ0RfTEREXzE1LAotCUdQSU83NF9MQ0RfRkNMSywKLQlHUElPNzVfTENEX0xDTEssCi0JR1BJTzc2X0xDRF9QQ0xLLAotCUdQSU83N19MQ0RfQklBUywKKwlHUElPeHhfTENEX1RGVF8xNkJQUCwKIAogCS8qIEZGVUFSVCAqLwogCUdQSU8zNF9GRlVBUlRfUlhELApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGFsbXo3Mi5jCmluZGV4IDFjNWQ2OGEuLjNhNzkyNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3BhbG16NzIuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wYWxtejcyLmMKQEAgLTk1LDI2ICs5NSw4IEBACiAJR1BJTzEwNV9LUF9NS09VVF8yLAogCiAJLyogTENEICovCi0JR1BJTzU4X0xDRF9MRERfMCwKLQlHUElPNTlfTENEX0xERF8xLAotCUdQSU82MF9MQ0RfTEREXzIsCi0JR1BJTzYxX0xDRF9MRERfMywKLQlHUElPNjJfTENEX0xERF80LAotCUdQSU82M19MQ0RfTEREXzUsCi0JR1BJTzY0X0xDRF9MRERfNiwKLQlHUElPNjVfTENEX0xERF83LAotCUdQSU82Nl9MQ0RfTEREXzgsCi0JR1BJTzY3X0xDRF9MRERfOSwKLQlHUElPNjhfTENEX0xERF8xMCwKLQlHUElPNjlfTENEX0xERF8xMSwKLQlHUElPNzBfTENEX0xERF8xMiwKLQlHUElPNzFfTENEX0xERF8xMywKLQlHUElPNzJfTENEX0xERF8xNCwKLQlHUElPNzNfTENEX0xERF8xNSwKLQlHUElPNzRfTENEX0ZDTEssCi0JR1BJTzc1X0xDRF9MQ0xLLAotCUdQSU83Nl9MQ0RfUENMSywKLQlHUElPNzdfTENEX0JJQVMsCisJR1BJT3h4X0xDRF9URlRfMTZCUFAsCisKIAlHUElPMjBfR1BJTywJLyogYmwgcG93ZXIgKi8KIAlHUElPMjFfR1BJTywJLyogTENEIGJvcmRlciBzd2l0Y2ggKi8KIAlHUElPMjJfR1BJTywJLyogTENEIGJvcmRlciBjb2xvciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jIGIvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jCmluZGV4IGQ1MjU1YWUuLjlkMGVjZWExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jCkBAIC01OCw2ICs1OCwxMiBAQAogCS8qIEkyQyAqLwogCUdQSU8xMTdfSTJDX1NDTCwKIAlHUElPMTE4X0kyQ19TREEsCisKKwkvKiBBQzk3ICovCisJR1BJTzI4X0FDOTdfQklUQ0xLLAorCUdQSU8yOV9BQzk3X1NEQVRBX0lOXzAsCisJR1BJTzMwX0FDOTdfU0RBVEFfT1VULAorCUdQSU8zMV9BQzk3X1NZTkMsCiB9OwogCiAvKgpAQCAtMjU5LDggKzI2NSw3IEBACiAJdW5zaWduZWQgbG9uZyBwZW5kaW5nID0gKH5QQ005OTBfSU5UU0VUQ0xSKSAmIHBjbTk5MF9pcnFfZW5hYmxlZDsKIAogCWRvIHsKLQkJR0VEUihQQ005OTBfQ1RSTF9JTlRfSVJRX0dQSU8pID0KLQkJCQkJR1BJT19iaXQoUENNOTkwX0NUUkxfSU5UX0lSUV9HUElPKTsKKwkJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CS8qIGNsZWFyIG91ciBwYXJlbnQgSVJRICovCiAJCWlmIChsaWtlbHkocGVuZGluZykpIHsKIAkJCWlycSA9IFBDTTAyN19JUlEoMCkgKyBfX2ZmcyhwZW5kaW5nKTsKIAkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvcG9vZGxlLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYwppbmRleCBjMmI5MzhhLi5kNThhNTI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9wb29kbGUuYwpAQCAtOTEsMjYgKzkxLDcgQEAKIAlHUElPMzVfRkZVQVJUX0NUUywKIAogCS8qIExDRCAqLwotCUdQSU81OF9MQ0RfTEREXzAsCi0JR1BJTzU5X0xDRF9MRERfMSwKLQlHUElPNjBfTENEX0xERF8yLAotCUdQSU82MV9MQ0RfTEREXzMsCi0JR1BJTzYyX0xDRF9MRERfNCwKLQlHUElPNjNfTENEX0xERF81LAotCUdQSU82NF9MQ0RfTEREXzYsCi0JR1BJTzY1X0xDRF9MRERfNywKLQlHUElPNjZfTENEX0xERF84LAotCUdQSU82N19MQ0RfTEREXzksCi0JR1BJTzY4X0xDRF9MRERfMTAsCi0JR1BJTzY5X0xDRF9MRERfMTEsCi0JR1BJTzcwX0xDRF9MRERfMTIsCi0JR1BJTzcxX0xDRF9MRERfMTMsCi0JR1BJTzcyX0xDRF9MRERfMTQsCi0JR1BJTzczX0xDRF9MRERfMTUsCi0JR1BJTzc0X0xDRF9GQ0xLLAotCUdQSU83NV9MQ0RfTENMSywKLQlHUElPNzZfTENEX1BDTEssCi0JR1BJTzc3X0xDRF9CSUFTLAorCUdQSU94eF9MQ0RfVEZUXzE2QlBQLAogCiAJLyogUEMgQ2FyZCAqLwogCUdQSU80OF9uUE9FLApAQCAtMTkzLDExICsxNzQsMTggQEAKIAl9LAogfTsKIAorc3RhdGljIHN0cnVjdCBsb2NvbW9fcGxhdGZvcm1fZGF0YSBsb2NvbW9faW5mbyA9IHsKKwkuaXJxX2Jhc2UJPSBJUlFfQk9BUkRfU1RBUlQsCit9OworCiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHBvb2RsZV9sb2NvbW9fZGV2aWNlID0gewogCS5uYW1lCQk9ICJsb2NvbW8iLAogCS5pZAkJPSAwLAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShsb2NvbW9fcmVzb3VyY2VzKSwKIAkucmVzb3VyY2UJPSBsb2NvbW9fcmVzb3VyY2VzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZsb2NvbW9faW5mbywKKwl9LAogfTsKIAogRVhQT1JUX1NZTUJPTChwb29kbGVfbG9jb21vX2RldmljZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9weGEyN3guYyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCmluZGV4IGQ3ODMxMjMuLjBhZjM2MTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3B4YTI3eC5jCkBAIC00MCw2ICs0MCwyNSBAQAogfQogRVhQT1JUX1NZTUJPTChweGEyN3hfY2xlYXJfb3RncGgpOwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhYzk3X3Jlc2V0X2NvbmZpZ1tdID0geworCUdQSU85NV9BQzk3X25SRVNFVCwKKwlHUElPOTVfR1BJTywKKwlHUElPMTEzX0FDOTdfblJFU0VULAorCUdQSU8xMTNfR1BJTywKK307CisKK3ZvaWQgcHhhMjd4X2Fzc2VydF9hYzk3cmVzZXQoaW50IHJlc2V0X2dwaW8sIGludCBvbikKK3sKKwlpZiAocmVzZXRfZ3BpbyA9PSAxMTMpCisJCXB4YTJ4eF9tZnBfY29uZmlnKG9uID8gJmFjOTdfcmVzZXRfY29uZmlnWzBdIDoKKwkJCQkgICAgICAgJmFjOTdfcmVzZXRfY29uZmlnWzFdLCAxKTsKKworCWlmIChyZXNldF9ncGlvID09IDk1KQorCQlweGEyeHhfbWZwX2NvbmZpZyhvbiA/ICZhYzk3X3Jlc2V0X2NvbmZpZ1syXSA6CisJCQkJICAgICAgICZhYzk3X3Jlc2V0X2NvbmZpZ1szXSwgMSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChweGEyN3hfYXNzZXJ0X2FjOTdyZXNldCk7CisKIC8qIENyeXN0YWwgY2xvY2s6IDEzTUh6ICovCiAjZGVmaW5lIEJBU0VfQ0xLCTEzMDAwMDAwCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3JhdW1mZWxkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9yYXVtZmVsZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxODRiZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXB4YS9yYXVtZmVsZC5jCkBAIC0wLDAgKzEsMTEwOCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtcHhhL3JhdW1mZWxkLmMKKyAqCisgKiBTdXBwb3J0IGZvciB0aGUgZm9sbG93aW5nIFJhdW1mZWxkIGRldmljZXM6CisgKgorICogCSogQ29udHJvbGxlcgorICogIAkqIENvbm5lY3RvcgorICogIAkqIFNwZWFrZXIgUy9NCisgKgorICogU2VlIGh0dHA6Ly93d3cucmF1bWZlbGQuY29tIGZvciBkZXRhaWxzLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBEYW5pZWwgTWFjayA8ZGFuaWVsQGNhaWFxLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L3JvdGFyeV9lbmNvZGVyLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpb19rZXlzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvZWV0aV90cy5oPgorI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KKyNpbmNsdWRlIDxsaW51eC93MS1ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGlfZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2xpczNsdjAyZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BkYV9wb3dlci5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgorI2luY2x1ZGUgPGxpbnV4L3BkYV9wb3dlci5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYXg4NjYwLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZml4ZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9weGEzeHgtcmVncy5oPgorI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTN4eC5oPgorI2luY2x1ZGUgPG1hY2gvbWZwLXB4YTMwMC5oPgorI2luY2x1ZGUgPG1hY2gvb2hjaS5oPgorI2luY2x1ZGUgPG1hY2gvcHhhZmIuaD4KKyNpbmNsdWRlIDxtYWNoL21tYy5oPgorI2luY2x1ZGUgPHBsYXQvaTJjLmg+CisjaW5jbHVkZSA8cGxhdC9weGEzeHhfbmFuZC5oPgorCisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorI2luY2x1ZGUgImRldmljZXMuaCIKKyNpbmNsdWRlICJjbG9jay5oIgorCisvKiBjb21tb24gR1BJTwlkZWZpbml0aW9ucyAqLworCisvKiBpbnB1dHMgKi8KKyNkZWZpbmUgR1BJT19PTl9PRkYJCSgxNCkKKyNkZWZpbmUgR1BJT19WT0xFTkNfQQkJKDE5KQorI2RlZmluZSBHUElPX1ZPTEVOQ19CCQkoMjApCisjZGVmaW5lIEdQSU9fQ0hBUkdFX0RPTkUJKDIzKQorI2RlZmluZSBHUElPX0NIQVJHRV9JTkQJCSgyNykKKyNkZWZpbmUgR1BJT19UT1VDSF9JUlEJCSgzMikKKyNkZWZpbmUgR1BJT19FVEhfSVJRCQkoNDApCisjZGVmaW5lIEdQSU9fU1BJX01JU08JCSg5OCkKKyNkZWZpbmUgR1BJT19BQ0NFTF9JUlEJCSgxMDQpCisjZGVmaW5lIEdQSU9fUkVTQ1VFX0JPT1QJKDExNSkKKyNkZWZpbmUgR1BJT19ET0NLX0RFVEVDVAkoMTE2KQorI2RlZmluZSBHUElPX0tFWTEJCSgxMTcpCisjZGVmaW5lIEdQSU9fS0VZMgkJKDExOCkKKyNkZWZpbmUgR1BJT19LRVkzCQkoMTE5KQorI2RlZmluZSBHUElPX0NIQVJHRV9VU0JfT0sJKDExMikKKyNkZWZpbmUgR1BJT19DSEFSR0VfRENfT0sJKDEwMSkKKyNkZWZpbmUgR1BJT19DSEFSR0VfVVNCX1NVU1AJKDEwMikKKworLyogb3V0cHV0cyAqLworI2RlZmluZSBHUElPX1NIVVRET1dOX1NVUFBMWQkoMTYpCisjZGVmaW5lIEdQSU9fU0hVVERPV05fQkFUVAkoMTgpCisjZGVmaW5lIEdQSU9fQ0hSR19QRU4yCQkoMzEpCisjZGVmaW5lIEdQSU9fVEZUX1ZBX0VOCQkoMzMpCisjZGVmaW5lIEdQSU9fU1BESUZfQ1MJCSgzNCkKKyNkZWZpbmUgR1BJT19MRUQyCQkoMzUpCisjZGVmaW5lIEdQSU9fTEVEMQkJKDM2KQorI2RlZmluZSBHUElPX1NQRElGX1JFU0VUCSgzOCkKKyNkZWZpbmUgR1BJT19TUElfQ0xLCQkoOTUpCisjZGVmaW5lIEdQSU9fTUNMS19EQUNfQ1MJKDk2KQorI2RlZmluZSBHUElPX1NQSV9NT1NJCQkoOTcpCisjZGVmaW5lIEdQSU9fVzFfUFVMTFVQX0VOQUJMRQkoMTA1KQorI2RlZmluZSBHUElPX0RJU1BMQVlfRU5BQkxFCSgxMDYpCisjZGVmaW5lIEdQSU9fTUNMS19SRVNFVAkJKDExMSkKKyNkZWZpbmUgR1BJT19XMldfUkVTRVQJCSgxMTMpCisjZGVmaW5lIEdQSU9fVzJXX1BETgkJKDExNCkKKyNkZWZpbmUgR1BJT19DT0RFQ19SRVNFVAkoMTIwKQorI2RlZmluZSBHUElPX0FVRElPX1ZBX0VOQUJMRQkoMTI0KQorI2RlZmluZSBHUElPX0FDQ0VMX0NTCQkoMTI1KQorI2RlZmluZSBHUElPX09ORV9XSVJFCQkoMTI2KQorCisvKgorICogR1BJTyBjb25maWd1cmF0aW9ucworICovCitzdGF0aWMgbWZwX2NmZ190IHJhdW1mZWxkX2NvbnRyb2xsZXJfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogVUFSVDEgKi8KKwlHUElPNzdfVUFSVDFfUlhELAorCUdQSU83OF9VQVJUMV9UWEQsCisJR1BJTzc5X1VBUlQxX0NUUywKKwlHUElPODFfVUFSVDFfRFNSLAorCUdQSU84M19VQVJUMV9EVFIsCisJR1BJTzg0X1VBUlQxX1JUUywKKworCS8qIFVBUlQzICovCisJR1BJTzExMF9VQVJUM19SWEQsCisKKwkvKiBVU0IgSG9zdCAqLworCUdQSU8wXzJfVVNCSF9QRU4sCisJR1BJTzFfMl9VU0JIX1BXUiwKKworCS8qIEkyQyAqLworCUdQSU8yMV9JMkNfU0NMIHwgTUZQX0xQTV9GTE9BVCB8IE1GUF9QVUxMX0ZMT0FULAorCUdQSU8yMl9JMkNfU0RBIHwgTUZQX0xQTV9GTE9BVCB8IE1GUF9QVUxMX0ZMT0FULAorCisJLyogU1BJICovCisJR1BJTzM0X0dQSU8sCS8qIFNQRElGX0NTICovCisJR1BJTzk2X0dQSU8sCS8qIE1DTEtfQ1MgKi8KKwlHUElPMTI1X0dQSU8sCS8qIEFDQ0VMX0NTICovCisKKwkvKiBNTUMgKi8KKwlHUElPM19NTUMxX0RBVDAsCisJR1BJTzRfTU1DMV9EQVQxLAorCUdQSU81X01NQzFfREFUMiwKKwlHUElPNl9NTUMxX0RBVDMsCisJR1BJTzdfTU1DMV9DTEssCisJR1BJTzhfTU1DMV9DTUQsCisKKwkvKiBPbmUtd2lyZSAqLworCUdQSU8xMjZfR1BJTyB8IE1GUF9MUE1fRkxPQVQsCisJR1BJTzEwNV9HUElPIHwgTUZQX1BVTExfTE9XIHwgTUZQX0xQTV9QVUxMX0xPVywKKworCS8qIENIUkdfVVNCX09LICovCisJR1BJTzEwMV9HUElPIHwgTUZQX1BVTExfSElHSCwKKwkvKiBDSFJHX1VTQl9PSyAqLworCUdQSU8xMTJfR1BJTyB8IE1GUF9QVUxMX0hJR0gsCisJLyogQ0hSR19VU0JfU1VTUCAqLworCUdQSU8xMDJfR1BJTywKKwkvKiBESVNQTEFZX0VOQUJMRSAqLworCUdQSU8xMDZfR1BJTywKKwkvKiBET0NLX0RFVEVDVCAqLworCUdQSU8xMTZfR1BJTyB8IE1GUF9MUE1fRkxPQVQgfCBNRlBfUFVMTF9GTE9BVCwKKworCS8qIExDRCAqLworCUdQSU81NF9MQ0RfTEREXzAsCisJR1BJTzU1X0xDRF9MRERfMSwKKwlHUElPNTZfTENEX0xERF8yLAorCUdQSU81N19MQ0RfTEREXzMsCisJR1BJTzU4X0xDRF9MRERfNCwKKwlHUElPNTlfTENEX0xERF81LAorCUdQSU82MF9MQ0RfTEREXzYsCisJR1BJTzYxX0xDRF9MRERfNywKKwlHUElPNjJfTENEX0xERF84LAorCUdQSU82M19MQ0RfTEREXzksCisJR1BJTzY0X0xDRF9MRERfMTAsCisJR1BJTzY1X0xDRF9MRERfMTEsCisJR1BJTzY2X0xDRF9MRERfMTIsCisJR1BJTzY3X0xDRF9MRERfMTMsCisJR1BJTzY4X0xDRF9MRERfMTQsCisJR1BJTzY5X0xDRF9MRERfMTUsCisJR1BJTzcwX0xDRF9MRERfMTYsCisJR1BJTzcxX0xDRF9MRERfMTcsCisJR1BJTzcyX0xDRF9GQ0xLLAorCUdQSU83M19MQ0RfTENMSywKKwlHUElPNzRfTENEX1BDTEssCisJR1BJTzc1X0xDRF9CSUFTLAorfTsKKworc3RhdGljIG1mcF9jZmdfdCByYXVtZmVsZF9jb25uZWN0b3JfcGluX2NvbmZpZ1tdIF9faW5pdGRhdGEgPSB7CisJLyogVUFSVDEgKi8KKwlHUElPNzdfVUFSVDFfUlhELAorCUdQSU83OF9VQVJUMV9UWEQsCisJR1BJTzc5X1VBUlQxX0NUUywKKwlHUElPODFfVUFSVDFfRFNSLAorCUdQSU84M19VQVJUMV9EVFIsCisJR1BJTzg0X1VBUlQxX1JUUywKKworCS8qIFVBUlQzICovCisJR1BJTzExMF9VQVJUM19SWEQsCisKKwkvKiBVU0IgSG9zdCAqLworCUdQSU8wXzJfVVNCSF9QRU4sCisJR1BJTzFfMl9VU0JIX1BXUiwKKworCS8qIEkyQyAqLworCUdQSU8yMV9JMkNfU0NMIHwgTUZQX0xQTV9GTE9BVCB8IE1GUF9QVUxMX0ZMT0FULAorCUdQSU8yMl9JMkNfU0RBIHwgTUZQX0xQTV9GTE9BVCB8IE1GUF9QVUxMX0ZMT0FULAorCisJLyogU1BJICovCisJR1BJTzM0X0dQSU8sCS8qIFNQRElGX0NTICovCisJR1BJTzk2X0dQSU8sCS8qIE1DTEtfQ1MgKi8KKwlHUElPMTI1X0dQSU8sCS8qIEFDQ0VMX0NTICovCisKKwkvKiBNTUMgKi8KKwlHUElPM19NTUMxX0RBVDAsCisJR1BJTzRfTU1DMV9EQVQxLAorCUdQSU81X01NQzFfREFUMiwKKwlHUElPNl9NTUMxX0RBVDMsCisJR1BJTzdfTU1DMV9DTEssCisJR1BJTzhfTU1DMV9DTUQsCisKKwkvKiBFdGhlcm5ldCAqLworCUdQSU8xX25DUzIsCQkJLyogQ1MgKi8KKwlHUElPNDBfR1BJTyB8IE1GUF9QVUxMX0hJR0gsCS8qIElSUSAqLworCisJLyogU1NQIGZvciBJMlMgKi8KKwlHUElPODVfU1NQMV9TQ0xLLAorCUdQSU84OV9TU1AxX0VYVENMSywKKwlHUElPODZfU1NQMV9GUk0sCisJR1BJTzg3X1NTUDFfVFhELAorCUdQSU84OF9TU1AxX1JYRCwKKwlHUElPOTBfU1NQMV9TWVNDTEssCisKKwkvKiBTU1AyIGZvciBTL1BESUYgKi8KKwlHUElPMjVfU1NQMl9TQ0xLLAorCUdQSU8yNl9TU1AyX0ZSTSwKKwlHUElPMjdfU1NQMl9UWEQsCisJR1BJTzI5X1NTUDJfRVhUQ0xLLAorCisJLyogTEVEcyAqLworCUdQSU8zNV9HUElPIHwgTUZQX0xQTV9QVUxMX0xPVywKKwlHUElPMzZfR1BJTyB8IE1GUF9MUE1fRFJJVkVfSElHSCwKK307CisKK3N0YXRpYyBtZnBfY2ZnX3QgcmF1bWZlbGRfc3BlYWtlcl9waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwkvKiBVQVJUMSAqLworCUdQSU83N19VQVJUMV9SWEQsCisJR1BJTzc4X1VBUlQxX1RYRCwKKwlHUElPNzlfVUFSVDFfQ1RTLAorCUdQSU84MV9VQVJUMV9EU1IsCisJR1BJTzgzX1VBUlQxX0RUUiwKKwlHUElPODRfVUFSVDFfUlRTLAorCisJLyogVUFSVDMgKi8KKwlHUElPMTEwX1VBUlQzX1JYRCwKKworCS8qIFVTQiBIb3N0ICovCisJR1BJTzBfMl9VU0JIX1BFTiwKKwlHUElPMV8yX1VTQkhfUFdSLAorCisJLyogSTJDICovCisJR1BJTzIxX0kyQ19TQ0wgfCBNRlBfTFBNX0ZMT0FUIHwgTUZQX1BVTExfRkxPQVQsCisJR1BJTzIyX0kyQ19TREEgfCBNRlBfTFBNX0ZMT0FUIHwgTUZQX1BVTExfRkxPQVQsCisKKwkvKiBTUEkgKi8KKwlHUElPMzRfR1BJTywJLyogU1BESUZfQ1MgKi8KKwlHUElPOTZfR1BJTywJLyogTUNMS19DUyAqLworCUdQSU8xMjVfR1BJTywJLyogQUNDRUxfQ1MgKi8KKworCS8qIE1NQyAqLworCUdQSU8zX01NQzFfREFUMCwKKwlHUElPNF9NTUMxX0RBVDEsCisJR1BJTzVfTU1DMV9EQVQyLAorCUdQSU82X01NQzFfREFUMywKKwlHUElPN19NTUMxX0NMSywKKwlHUElPOF9NTUMxX0NNRCwKKworCS8qIEV0aGVybmV0ICovCisJR1BJTzFfbkNTMiwJCQkvKiBDUyAqLworCUdQSU80MF9HUElPIHwgTUZQX1BVTExfSElHSCwJLyogSVJRICovCisKKwkvKiBTU1AgZm9yIEkyUyAqLworCUdQSU84NV9TU1AxX1NDTEssCisJR1BJTzg5X1NTUDFfRVhUQ0xLLAorCUdQSU84Nl9TU1AxX0ZSTSwKKwlHUElPODdfU1NQMV9UWEQsCisJR1BJTzg4X1NTUDFfUlhELAorCUdQSU85MF9TU1AxX1NZU0NMSywKKworCS8qIExFRHMgKi8KKwlHUElPMzVfR1BJTyB8IE1GUF9MUE1fUFVMTF9MT1csCisJR1BJTzM2X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0hJR0gsCit9OworCisvKgorICogU01TQyBMQU45MjIwIEV0aGVybmV0CisgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBQWEEzeHhfQ1MyX1BIWVMsCisJCS5lbmQJPSBQWEEzeHhfQ1MyX1BIWVMgKyAweGZmZmZmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLnN0YXJ0CT0gZ3Bpb190b19pcnEoR1BJT19FVEhfSVJRKSwKKwkJLmVuZAk9IGdwaW9fdG9faXJxKEdQSU9fRVRIX0lSUSksCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBzbXNjOTExeF9wbGF0Zm9ybV9jb25maWcgcmF1bWZlbGRfc21zYzkxMXhfY29uZmlnID0geworCS5waHlfaW50ZXJmYWNlCT0gUEhZX0lOVEVSRkFDRV9NT0RFX01JSSwKKwkuaXJxX3BvbGFyaXR5CT0gU01TQzkxMVhfSVJRX1BPTEFSSVRZX0FDVElWRV9MT1csCisJLmlycV90eXBlCT0gU01TQzkxMVhfSVJRX1RZUEVfT1BFTl9EUkFJTiwKKwkuZmxhZ3MJCT0gU01TQzkxMVhfVVNFXzMyQklUIHwgU01TQzkxMVhfU0FWRV9NQUNfQUREUkVTUywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxeF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNtc2M5MTF4IiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNtYzkxeF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHNtYzkxeF9yZXNvdXJjZXMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnJhdW1mZWxkX3Ntc2M5MTF4X2NvbmZpZywKKwl9Cit9OworCisvKioKKyAqIE5BTkQKKyAqLworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gcmF1bWZlbGRfbmFuZF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAiQm9vdGxvYWRlciIsCisJCS5vZmZzZXQJCT0gMCwKKwkJLnNpemUJCT0gMHhhMDAwMCwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLCAvKiBmb3JjZSByZWFkLW9ubHkgKi8KKwl9LAorCXsKKwkJLm5hbWUJCT0gIkJvb3Rsb2FkZXJFbnZpcm9ubWVudCIsCisJCS5vZmZzZXQJCT0gMHhhMDAwMCwKKwkJLnNpemUJCT0gMHgyMDAwMCwKKwl9LAorCXsKKwkJLm5hbWUJCT0gIkJvb3Rsb2FkZXJTcGxhc2hTY3JlZW4iLAorCQkub2Zmc2V0CQk9IDB4YzAwMDAsCisJCS5zaXplCQk9IDB4NjAwMDAsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJVQkkiLAorCQkub2Zmc2V0CQk9IDB4MTIwMDAwLAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHB4YTN4eF9uYW5kX3BsYXRmb3JtX2RhdGEgcmF1bWZlbGRfbmFuZF9pbmZvID0geworCS5lbmFibGVfYXJiaXRlcgk9IDEsCisJLmtlZXBfY29uZmlnCT0gMSwKKwkucGFydHMJCT0gcmF1bWZlbGRfbmFuZF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUocmF1bWZlbGRfbmFuZF9wYXJ0aXRpb25zKSwKK307CisKKy8qKgorICogVVNCIChPSENJKSBzdXBwb3J0CisgKi8KKworc3RhdGljIHN0cnVjdCBweGFvaGNpX3BsYXRmb3JtX2RhdGEgcmF1bWZlbGRfb2hjaV9pbmZvID0geworCS5wb3J0X21vZGUgICAgICA9IFBNTV9HTE9CQUxfTU9ERSwKKwkuZmxhZ3MJCT0gRU5BQkxFX1BPUlQxLAorfTsKKworLyoqCisgKiBSb3RhcnkgZW5jb2RlciBpbnB1dCBkZXZpY2UKKyAqLworCitzdGF0aWMgc3RydWN0IHJvdGFyeV9lbmNvZGVyX3BsYXRmb3JtX2RhdGEgcmF1bWZlbGRfcm90YXJ5X2VuY29kZXJfaW5mbyA9IHsKKwkuc3RlcHMJCT0gMjQsCisJLmF4aXMJCT0gUkVMX1gsCisJLnJlbGF0aXZlX2F4aXMJPSAxLAorCS5ncGlvX2EJCT0gR1BJT19WT0xFTkNfQSwKKwkuZ3Bpb19iCQk9IEdQSU9fVk9MRU5DX0IsCisJLmludmVydGVkX2EJPSAxLAorCS5pbnZlcnRlZF9iCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJvdGFyeV9lbmNvZGVyX2RldmljZSA9IHsKKwkubmFtZQkJPSAicm90YXJ5LWVuY29kZXIiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZyYXVtZmVsZF9yb3RhcnlfZW5jb2Rlcl9pbmZvLAorCX0KK307CisKKy8qKgorICogR1BJTyBidXR0b25zCisgKi8KKworc3RhdGljIHN0cnVjdCBncGlvX2tleXNfYnV0dG9uIGdwaW9fa2V5c19idXR0b25bXSA9IHsKKwl7CisJCS5jb2RlCQkJPSBLRVlfRjEsCisJCS50eXBlCQkJPSBFVl9LRVksCisJCS5ncGlvCQkJPSBHUElPX0tFWTEsCisJCS5hY3RpdmVfbG93CQk9IDEsCisJCS53YWtldXAJCQk9IDAsCisJCS5kZWJvdW5jZV9pbnRlcnZhbAk9IDUsIC8qIG1zICovCisJCS5kZXNjCQkJPSAiQnV0dG9uIDEiLAorCX0sCisJeworCQkuY29kZQkJCT0gS0VZX0YyLAorCQkudHlwZQkJCT0gRVZfS0VZLAorCQkuZ3BpbwkJCT0gR1BJT19LRVkyLAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkud2FrZXVwCQkJPSAwLAorCQkuZGVib3VuY2VfaW50ZXJ2YWwJPSA1LCAvKiBtcyAqLworCQkuZGVzYwkJCT0gIkJ1dHRvbiAyIiwKKwl9LAorCXsKKwkJLmNvZGUJCQk9IEtFWV9GMywKKwkJLnR5cGUJCQk9IEVWX0tFWSwKKwkJLmdwaW8JCQk9IEdQSU9fS0VZMywKKwkJLmFjdGl2ZV9sb3cJCT0gMSwKKwkJLndha2V1cAkJCT0gMCwKKwkJLmRlYm91bmNlX2ludGVydmFsCT0gNSwgLyogbXMgKi8KKwkJLmRlc2MJCQk9ICJCdXR0b24gMyIsCisJfSwKKwl7CisJCS5jb2RlCQkJPSBLRVlfRjQsCisJCS50eXBlCQkJPSBFVl9LRVksCisJCS5ncGlvCQkJPSBHUElPX1JFU0NVRV9CT09ULAorCQkuYWN0aXZlX2xvdwkJPSAwLAorCQkud2FrZXVwCQkJPSAwLAorCQkuZGVib3VuY2VfaW50ZXJ2YWwJPSA1LCAvKiBtcyAqLworCQkuZGVzYwkJCT0gInJlc2N1ZSBib290IGJ1dHRvbiIsCisJfSwKKwl7CisJCS5jb2RlCQkJPSBLRVlfRjUsCisJCS50eXBlCQkJPSBFVl9LRVksCisJCS5ncGlvCQkJPSBHUElPX0RPQ0tfREVURUNULAorCQkuYWN0aXZlX2xvdwkJPSAxLAorCQkud2FrZXVwCQkJPSAwLAorCQkuZGVib3VuY2VfaW50ZXJ2YWwJPSA1LCAvKiBtcyAqLworCQkuZGVzYwkJCT0gImRvY2sgZGV0ZWN0IiwKKwl9LAorCXsKKwkJLmNvZGUJCQk9IEtFWV9GNiwKKwkJLnR5cGUJCQk9IEVWX0tFWSwKKwkJLmdwaW8JCQk9IEdQSU9fT05fT0ZGLAorCQkuYWN0aXZlX2xvdwkJPSAwLAorCQkud2FrZXVwCQkJPSAwLAorCQkuZGVib3VuY2VfaW50ZXJ2YWwJPSA1LCAvKiBtcyAqLworCQkuZGVzYwkJCT0gIm9uL29mZiBidXR0b24iLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhIGdwaW9fa2V5c19wbGF0Zm9ybV9kYXRhID0geworCS5idXR0b25zCT0gZ3Bpb19rZXlzX2J1dHRvbiwKKwkubmJ1dHRvbnMJPSBBUlJBWV9TSVpFKGdwaW9fa2V5c19idXR0b24pLAorCS5yZXAJCT0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJhdW1mZWxkX2dwaW9fa2V5c19kZXZpY2UgPSB7CisJLm5hbWUJPSAiZ3Bpby1rZXlzIiwKKwkuaWQJPSAtMSwKKwkuZGV2IAk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZ3Bpb19rZXlzX3BsYXRmb3JtX2RhdGEsCisJfQorfTsKKworLyoqCisgKiBHUElPIExFRHMKKyAqLworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkIHJhdW1mZWxkX2xlZHNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJyYXVtZmVsZDoxIiwKKwkJLmdwaW8JCT0gR1BJT19MRUQxLAorCQkuYWN0aXZlX2xvdwk9IDEsCisJCS5kZWZhdWx0X3N0YXRlCT0gTEVEU19HUElPX0RFRlNUQVRFX09OLAorCX0sCisJeworCQkubmFtZQkJPSAicmF1bWZlbGQ6MiIsCisJCS5ncGlvCQk9IEdQSU9fTEVEMiwKKwkJLmFjdGl2ZV9sb3cJPSAwLAorCQkuZGVmYXVsdF9zdGF0ZQk9IExFRFNfR1BJT19ERUZTVEFURV9PRkYsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBncGlvX2xlZF9wbGF0Zm9ybV9kYXRhIHJhdW1mZWxkX2xlZF9wbGF0Zm9ybV9kYXRhID0geworCS5sZWRzCQk9IHJhdW1mZWxkX2xlZHMsCisJLm51bV9sZWRzCT0gQVJSQVlfU0laRShyYXVtZmVsZF9sZWRzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJhdW1mZWxkX2xlZF9kZXZpY2UgPSB7CisJLm5hbWUJPSAibGVkcy1ncGlvIiwKKwkuaWQJPSAtMSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZyYXVtZmVsZF9sZWRfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworLyoqCisgKiBPbmUtd2lyZSAoVzEgYnVzKSBzdXBwb3J0CisgKi8KKworc3RhdGljIHZvaWQgdzFfZW5hYmxlX2V4dGVybmFsX3B1bGx1cChpbnQgZW5hYmxlKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fVzFfUFVMTFVQX0VOQUJMRSwgZW5hYmxlKTsKKwltc2xlZXAoMTAwKTsKK30KKworc3RhdGljIHN0cnVjdCB3MV9ncGlvX3BsYXRmb3JtX2RhdGEgdzFfZ3Bpb19wbGF0Zm9ybV9kYXRhID0geworCS5waW4JCQk9IEdQSU9fT05FX1dJUkUsCisJLmlzX29wZW5fZHJhaW4JCT0gMCwKKwkuZW5hYmxlX2V4dGVybmFsX3B1bGx1cAk9IHcxX2VuYWJsZV9leHRlcm5hbF9wdWxsdXAsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJhdW1mZWxkX3cxX2dwaW9fZGV2aWNlID0geworCS5uYW1lCT0gIncxLWdwaW8iLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJncxX2dwaW9fcGxhdGZvcm1fZGF0YQorCX0KK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCByYXVtZmVsZF93MV9pbml0KHZvaWQpCit7CisJaW50IHJldCA9IGdwaW9fcmVxdWVzdChHUElPX1cxX1BVTExVUF9FTkFCTEUsCisJCQkJIlcxIGV4dGVybmFsIHB1bGx1cCBlbmFibGUiKTsKKworCWlmIChyZXQgPCAwKQorCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX1cxX1BVTExVUF9FTkFCTEVcbiIpOworCWVsc2UKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fVzFfUFVMTFVQX0VOQUJMRSwgMCk7CisKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJhdW1mZWxkX3cxX2dwaW9fZGV2aWNlKTsKK30KKworLyoqCisgKiBGcmFtZWJ1ZmZlciBkZXZpY2UKKyAqLworCisvKiBQV00gY29udHJvbGxlZCBiYWNrbGlnaHQgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fcHdtX2JhY2tsaWdodF9kYXRhIHJhdW1mZWxkX3B3bV9iYWNrbGlnaHRfZGF0YSA9IHsKKwkucHdtX2lkCQk9IDAsCisJLm1heF9icmlnaHRuZXNzCT0gMTAwLAorCS5kZnRfYnJpZ2h0bmVzcwk9IDEwMCwKKwkvKiAxMDAwMCBucyA9IDEwIG1zIF49IDEwMCBrSHogKi8KKwkucHdtX3BlcmlvZF9ucwk9IDEwMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmF1bWZlbGRfcHdtX2JhY2tsaWdodF9kZXZpY2UgPSB7CisJLm5hbWUJPSAicHdtLWJhY2tsaWdodCIsCisJLmRldgk9IHsKKwkJLnBhcmVudAkJPSAmcHhhMjd4X2RldmljZV9wd20wLmRldiwKKwkJLnBsYXRmb3JtX2RhdGEJPSAmcmF1bWZlbGRfcHdtX2JhY2tsaWdodF9kYXRhLAorCX0KK307CisKKy8qIExUMzU5MyBjb250cm9sbGVkIGJhY2tsaWdodCAqLworc3RhdGljIHN0cnVjdCBncGlvX2xlZCByYXVtZmVsZF9sdDM1OTNfbGVkID0geworCS5uYW1lCQk9ICJiYWNrbGlnaHQiLAorCS5ncGlvCQk9IG1mcF90b19ncGlvKE1GUF9QSU5fR1BJTzE3KSwKKwkuZGVmYXVsdF9zdGF0ZQk9IExFRFNfR1BJT19ERUZTVEFURV9PTiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSByYXVtZmVsZF9sdDM1OTNfcGxhdGZvcm1fZGF0YSA9IHsKKwkubGVkcwkJPSAmcmF1bWZlbGRfbHQzNTkzX2xlZCwKKwkubnVtX2xlZHMJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcmF1bWZlbGRfbHQzNTkzX2RldmljZSA9IHsKKwkubmFtZQk9ICJsZWRzLWx0MzU5MyIsCisJLmlkCT0gLTEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmcmF1bWZlbGRfbHQzNTkzX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcHhhZmJfbW9kZV9pbmZvIHNoYXJwX2xxMDQzdDNkeDAyX21vZGUgPSB7CisJLnBpeGNsb2NrCT0gMTExMDAwLAorCS54cmVzCQk9IDQ4MCwKKwkueXJlcwkJPSAyNzIsCisJLmJwcAkJPSAxNiwKKwkuaHN5bmNfbGVuCT0gNCwKKwkubGVmdF9tYXJnaW4JPSAyLAorCS5yaWdodF9tYXJnaW4JPSAxLAorCS52c3luY19sZW4JPSAxLAorCS51cHBlcl9tYXJnaW4JPSAzLAorCS5sb3dlcl9tYXJnaW4JPSAxLAorCS5zeW5jCQk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHB4YWZiX21hY2hfaW5mbyByYXVtZmVsZF9zaGFycF9sY2RfaW5mbyA9IHsKKwkubW9kZXMJCT0gJnNoYXJwX2xxMDQzdDNkeDAyX21vZGUsCisJLm51bV9tb2Rlcwk9IDEsCisJLnZpZGVvX21lbV9zaXplID0gMHg0MDAwMDAsCisJLmxjZF9jb25uCT0gTENEX0NPTE9SX1RGVF8xNkJQUCB8IExDRF9QQ0xLX0VER0VfRkFMTCwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCByYXVtZmVsZF9sY2RfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlzZXRfcHhhX2ZiX2luZm8oJnJhdW1mZWxkX3NoYXJwX2xjZF9pbmZvKTsKKworCS8qIEVhcmxpZXIgZGV2aWNlcyBoYWQgdGhlIGJhY2tsaWdodCByZWd1bGF0b3IgY29udHJvbGxlZAorCSAqIHZpYSBQV00sIGxhdGVyIHZlcnNpb25zIHVzZSBhbm90aGVyIGNvbnRyb2xsZXIgZm9yIHRoYXQgKi8KKwlpZiAoKHN5c3RlbV9yZXYgJiAweGZmKSA8IDIpIHsKKwkJbWZwX2NmZ190IHJhdW1mZWxkX3B3bV9waW5fY29uZmlnID0gR1BJTzE3X1BXTTBfT1VUOworCQlweGEzeHhfbWZwX2NvbmZpZygmcmF1bWZlbGRfcHdtX3Bpbl9jb25maWcsIDEpOworCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJhdW1mZWxkX3B3bV9iYWNrbGlnaHRfZGV2aWNlKTsKKwl9IGVsc2UKKwkJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyYXVtZmVsZF9sdDM1OTNfZGV2aWNlKTsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX1RGVF9WQV9FTiwgImRpc3BsYXkgVkEgZW5hYmxlIik7CisJaWYgKHJldCA8IDApCisJCXByX3dhcm5pbmcoIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fVEZUX1ZBX0VOXG4iKTsKKwllbHNlCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1RGVF9WQV9FTiwgMSk7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19ESVNQTEFZX0VOQUJMRSwgImRpc3BsYXkgZW5hYmxlIik7CisJaWYgKHJldCA8IDApCisJCXByX3dhcm5pbmcoIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fRElTUExBWV9FTkFCTEVcbiIpOworCWVsc2UKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fRElTUExBWV9FTkFCTEUsIDEpOworfQorCisvKioKKyAqIFNQSSBkZXZpY2VzCisgKi8KKworc3RydWN0IHNwaV9ncGlvX3BsYXRmb3JtX2RhdGEgcmF1bWZlbGRfc3BpX3BsYXRmb3JtX2RhdGEgPSB7CisJLnNjawkJPSBHUElPX1NQSV9DTEssCisJLm1vc2kJCT0gR1BJT19TUElfTU9TSSwKKwkubWlzbwkJPSBHUElPX1NQSV9NSVNPLAorCS5udW1fY2hpcHNlbGVjdAk9IDMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSByYXVtZmVsZF9zcGlfZGV2aWNlID0geworCS5uYW1lCT0gInNwaV9ncGlvIiwKKwkuaWQJPSAwLAorCS5kZXYgCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZyYXVtZmVsZF9zcGlfcGxhdGZvcm1fZGF0YSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGxpczNsdjAyZF9wbGF0Zm9ybV9kYXRhIGxpczNfcGRhdGEgPSB7CisJLmNsaWNrX2ZsYWdzIAk9IExJUzNfQ0xJQ0tfU0lOR0xFX1ggfAorCQkJICBMSVMzX0NMSUNLX1NJTkdMRV9ZIHwKKwkJCSAgTElTM19DTElDS19TSU5HTEVfWiwKKwkuaXJxX2NmZwk9IExJUzNfSVJRMV9DTElDSyB8IExJUzNfSVJRMl9DTElDSywKKwkud2FrZXVwX2ZsYWdzCT0gTElTM19XQUtFVVBfWF9MTyB8IExJUzNfV0FLRVVQX1hfSEkgfAorCQkJICBMSVMzX1dBS0VVUF9ZX0xPIHwgTElTM19XQUtFVVBfWV9ISSB8CisJCQkgIExJUzNfV0FLRVVQX1pfTE8gfCBMSVMzX1dBS0VVUF9aX0hJLAorCS53YWtldXBfdGhyZXNoCT0gMTAsCisJLmNsaWNrX3RocmVzaF94ID0gMTAsCisJLmNsaWNrX3RocmVzaF95ID0gMTAsCisJLmNsaWNrX3RocmVzaF96ID0gMTAsCit9OworCisjZGVmaW5lIFNQSV9BSzQxMDQJXAorewkJCVwKKwkubW9kYWxpYXMJPSAiYWs0MTA0IiwJXAorCS5tYXhfc3BlZWRfaHoJPSAxMDAwMCwJXAorCS5idXNfbnVtCT0gMCwJCVwKKwkuY2hpcF9zZWxlY3QJPSAwLAkJXAorCS5jb250cm9sbGVyX2RhdGEgPSAodm9pZCAqKSBHUElPX1NQRElGX0NTLAlcCit9CisKKyNkZWZpbmUgU1BJX0xJUzMJXAorewkJCVwKKwkubW9kYWxpYXMJPSAibGlzM2x2MDJkX3NwaSIsCVwKKwkubWF4X3NwZWVkX2h6CT0gMTAwMDAwMCwJCVwKKwkuYnVzX251bQk9IDAsCQkJXAorCS5jaGlwX3NlbGVjdAk9IDEsCQkJXAorCS5jb250cm9sbGVyX2RhdGEgPSAodm9pZCAqKSBHUElPX0FDQ0VMX0NTLAlcCisJLnBsYXRmb3JtX2RhdGEJPSAmbGlzM19wZGF0YSwJCVwKKwkuaXJxCQk9IGdwaW9fdG9faXJxKEdQSU9fQUNDRUxfSVJRKSwJXAorfQorCisjZGVmaW5lIFNQSV9EQUM3NTEyCVwKK3sJXAorCS5tb2RhbGlhcwk9ICJkYWM3NTEyIiwJCVwKKwkubWF4X3NwZWVkX2h6CT0gMTAwMDAwMCwJCVwKKwkuYnVzX251bQk9IDAsCQkJXAorCS5jaGlwX3NlbGVjdAk9IDIsCQkJXAorCS5jb250cm9sbGVyX2RhdGEgPSAodm9pZCAqKSBHUElPX01DTEtfREFDX0NTLAlcCit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gY29ubmVjdG9yX3NwaV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwlTUElfQUs0MTA0LAorCVNQSV9EQUM3NTEyLAorfTsKKworc3RhdGljIHN0cnVjdCBzcGlfYm9hcmRfaW5mbyBzcGVha2VyX3NwaV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwlTUElfREFDNzUxMiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gY29udHJvbGxlcl9zcGlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJU1BJX0xJUzMsCit9OworCisvKioKKyAqIE1NQyBmb3IgTWFydmVsbCBMaWJlcnRhcyA4Njg4IHZpYSBTRElPCisgKi8KKworc3RhdGljIGludCByYXVtZmVsZF9tY2lfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIGlycV9oYW5kbGVyX3QgaXNyLCB2b2lkICpkYXRhKQoreworCWdwaW9fc2V0X3ZhbHVlKEdQSU9fVzJXX1JFU0VULCAxKTsKKwlncGlvX3NldF92YWx1ZShHUElPX1cyV19QRE4sIDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJhdW1mZWxkX21jaV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlncGlvX3NldF92YWx1ZShHUElPX1cyV19SRVNFVCwgMCk7CisJZ3Bpb19zZXRfdmFsdWUoR1BJT19XMldfUEROLCAwKTsKK30KKworc3RhdGljIHN0cnVjdCBweGFtY2lfcGxhdGZvcm1fZGF0YSByYXVtZmVsZF9tY2lfcGxhdGZvcm1fZGF0YSA9IHsKKwkuaW5pdAkJCT0gcmF1bWZlbGRfbWNpX2luaXQsCisJLmV4aXQJCQk9IHJhdW1mZWxkX21jaV9leGl0LAorCS5kZXRlY3RfZGVsYXkJCT0gMjAsCisJLmdwaW9fY2FyZF9kZXRlY3QJPSAtMSwKKwkuZ3Bpb19jYXJkX3JvCQk9IC0xLAorCS5ncGlvX3Bvd2VyCQk9IC0xLAorfTsKKworLyoKKyAqIEV4dGVybmFsIHBvd2VyIC8gY2hhcmdlIGxvZ2ljCisgKi8KKworc3RhdGljIGludCBwb3dlcl9zdXBwbHlfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHBvd2VyX3N1cHBseV9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKK30KKworc3RhdGljIGludCByYXVtZmVsZF9pc19hY19vbmxpbmUodm9pZCkKK3sKKwlyZXR1cm4gIWdwaW9fZ2V0X3ZhbHVlKEdQSU9fQ0hBUkdFX0RDX09LKTsKK30KKworc3RhdGljIGludCByYXVtZmVsZF9pc191c2Jfb25saW5lKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICpyYXVtZmVsZF9wb3dlcl9zdXBwbGljYW50c1tdID0geyAiZHMyNzYwLWJhdHRlcnkuMCIgfTsKKworc3RhdGljIHN0cnVjdCBwZGFfcG93ZXJfcGRhdGEgcG93ZXJfc3VwcGx5X2luZm8gPSB7CisJLmluaXQJCQk9IHBvd2VyX3N1cHBseV9pbml0LAorCS5pc19hY19vbmxpbmUJCT0gcmF1bWZlbGRfaXNfYWNfb25saW5lLAorCS5pc191c2Jfb25saW5lCQk9IHJhdW1mZWxkX2lzX3VzYl9vbmxpbmUsCisJLmV4aXQJCQk9IHBvd2VyX3N1cHBseV9leGl0LAorCS5zdXBwbGllZF90bwkJPSByYXVtZmVsZF9wb3dlcl9zdXBwbGljYW50cywKKwkubnVtX3N1cHBsaWNhbnRzCT0gQVJSQVlfU0laRShyYXVtZmVsZF9wb3dlcl9zdXBwbGljYW50cykKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcG93ZXJfc3VwcGx5X3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUgID0gImFjIiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfAorCQkJIElPUkVTT1VSQ0VfSVJRX0hJR0hFREdFIHwgSU9SRVNPVVJDRV9JUlFfTE9XRURHRSwKKwkJLnN0YXJ0ID0gR1BJT19DSEFSR0VfRENfT0ssCisJCS5lbmQgICA9IEdQSU9fQ0hBUkdFX0RDX09LLAorCX0sCit9OworCitzdGF0aWMgaXJxcmV0dXJuX3QgY2hhcmdlX2RvbmVfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3k7CisKKwlwc3kgPSBwb3dlcl9zdXBwbHlfZ2V0X2J5X25hbWUoImRzMjc2MC1iYXR0ZXJ5LjAiKTsKKworCWlmIChwc3kpCisJCXBvd2VyX3N1cHBseV9zZXRfYmF0dGVyeV9jaGFyZ2VkKHBzeSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHJhdW1mZWxkX3Bvd2VyX3N1cHBseSA9IHsKKwkubmFtZSA9ICJwZGEtcG93ZXIiLAorCS5pZCAgID0gLTEsCisJLmRldiAgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnBvd2VyX3N1cHBseV9pbmZvLAorCX0sCisJLnJlc291cmNlICAgICAgPSBwb3dlcl9zdXBwbHlfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShwb3dlcl9zdXBwbHlfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCByYXVtZmVsZF9wb3dlcl9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCS8qIFNldCBQRU4yIGhpZ2ggdG8gZW5hYmxlIG1heGltdW0gY2hhcmdlIGN1cnJlbnQgKi8KKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19DSFJHX1BFTjIsICJDSFJHX1BFTjIiKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJfd2FybmluZygiVW5hYmxlIHRvIHJlcXVlc3QgR1BJT19DSFJHX1BFTjJcbiIpOworCWVsc2UKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fQ0hSR19QRU4yLCAxKTsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0NIQVJHRV9EQ19PSywgIkNBQkxFX0RDX09LIik7CisJaWYgKHJldCA8IDApCisJCXByX3dhcm5pbmcoIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fQ0hBUkdFX0RDX09LXG4iKTsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX0NIQVJHRV9VU0JfU1VTUCwgIkNIQVJHRV9VU0JfU1VTUCIpOworCWlmIChyZXQgPCAwKQorCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX0NIQVJHRV9VU0JfU1VTUFxuIik7CisJZWxzZQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19DSEFSR0VfVVNCX1NVU1AsIDApOworCisJcG93ZXJfc3VwcGx5X3Jlc291cmNlc1swXS5zdGFydCA9IGdwaW9fdG9faXJxKEdQSU9fQ0hBUkdFX0RDX09LKTsKKwlwb3dlcl9zdXBwbHlfcmVzb3VyY2VzWzBdLmVuZCA9IGdwaW9fdG9faXJxKEdQSU9fQ0hBUkdFX0RDX09LKTsKKworCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKEdQSU9fQ0hBUkdFX0RPTkUpLAorCQkJJmNoYXJnZV9kb25lX2lycSwgSU9SRVNPVVJDRV9JUlFfTE9XRURHRSwKKwkJCSJjaGFyZ2VfZG9uZSIsIE5VTEwpOworCisJaWYgKHJldCA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byByZWdpc3RlciBpcnEgJWRcbiIsIF9fZnVuY19fLAorCQkJR1BJT19DSEFSR0VfRE9ORSk7CisJZWxzZQorCQlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJhdW1mZWxkX3Bvd2VyX3N1cHBseSk7Cit9CisKKy8qIEZpeGVkIHJlZ3VsYXRvciBmb3IgQVVESU9fVkEsIDAtMDA0OCBtYXBzIHRvIHRoZSBjczQyNzAgY29kZWMgZGV2aWNlICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBhdWRpb192YV9jb25zdW1lcl9zdXBwbHkgPQorCVJFR1VMQVRPUl9TVVBQTFkoInZhIiwgIjAtMDA0OCIpOworCitzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBhdWRpb192YV9pbml0ZGF0YSA9IHsKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSAmYXVkaW9fdmFfY29uc3VtZXJfc3VwcGx5LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSAxLAorCS5jb25zdHJhaW50cyA9IHsKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9TVEFUVVMsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9jb25maWcgYXVkaW9fdmFfY29uZmlnID0geworCS5zdXBwbHlfbmFtZQkJPSAiYXVkaW9fdmEiLAorCS5taWNyb3ZvbHRzCQk9IDUwMDAwMDAsCisJLmdwaW8JCQk9IEdQSU9fQVVESU9fVkFfRU5BQkxFLAorCS5lbmFibGVfaGlnaAkJPSAxLAorCS5lbmFibGVkX2F0X2Jvb3QJPSAwLAorCS5pbml0X2RhdGEJCT0gJmF1ZGlvX3ZhX2luaXRkYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYXVkaW9fdmFfZGV2aWNlID0geworCS5uYW1lCT0gInJlZy1maXhlZC12b2x0YWdlIiwKKwkuaWQJPSAwLAorCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmF1ZGlvX3ZhX2NvbmZpZywKKwl9LAorfTsKKworLyogRHVtbXkgc3VwcGxpZXMgZm9yIENvZGVjJ3MgVkQvVkxDICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBhdWRpb19kdW1teV9zdXBwbGllc1tdID0geworCVJFR1VMQVRPUl9TVVBQTFkoInZkIiwgIjAtMDA0OCIpLAorCVJFR1VMQVRPUl9TVVBQTFkoInZsYyIsICIwLTAwNDgiKSwKK307CisKK3N0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGF1ZGlvX2R1bW15X2luaXRkYXRhID0geworCS5jb25zdW1lcl9zdXBwbGllcyA9IGF1ZGlvX2R1bW15X3N1cHBsaWVzLAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKGF1ZGlvX2R1bW15X3N1cHBsaWVzKSwKKwkuY29uc3RyYWludHMgPSB7CisJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfU1RBVFVTLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnIGF1ZGlvX2R1bW15X2NvbmZpZyA9IHsKKwkuc3VwcGx5X25hbWUJCT0gImF1ZGlvX3ZkIiwKKwkubWljcm92b2x0cwkJPSAzMzAwMDAwLAorCS5ncGlvCQkJPSAtMSwKKwkuaW5pdF9kYXRhCQk9ICZhdWRpb19kdW1teV9pbml0ZGF0YSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGF1ZGlvX3N1cHBseV9kdW1teV9kZXZpY2UgPSB7CisJLm5hbWUJPSAicmVnLWZpeGVkLXZvbHRhZ2UiLAorCS5pZAk9IDEsCisJLmRldgk9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmYXVkaW9fZHVtbXlfY29uZmlnLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXVkaW9fcmVndWxhdG9yX2RldmljZXNbXSA9IHsKKwkmYXVkaW9fdmFfZGV2aWNlLAorCSZhdWRpb19zdXBwbHlfZHVtbXlfZGV2aWNlLAorfTsKKworLyoqCisgKiBSZWd1bGF0b3Igc3VwcG9ydCB2aWEgTUFYODY2MAorICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB2Y2NfbW1jX3N1cHBseSA9CisJUkVHVUxBVE9SX1NVUFBMWSgidm1tYyIsICJweGEyeHgtbWNpLjAiKTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHZjY19tbWNfaW5pdF9kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm1pbl91VgkJCT0gMzMwMDAwMCwKKwkJLm1heF91VgkJCT0gMzMwMDAwMCwKKwkJLnZhbGlkX21vZGVzX21hc2sJPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCS52YWxpZF9vcHNfbWFzawkJPSBSRUdVTEFUT1JfQ0hBTkdFX1NUQVRVUyB8CisJCQkJCSAgUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFIHwKKwkJCQkJICBSRUdVTEFUT1JfQ0hBTkdFX01PREUsCisJfSwKKwkuY29uc3VtZXJfc3VwcGxpZXMgPSAmdmNjX21tY19zdXBwbHksCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IDEsCit9OworCitzdHJ1Y3QgbWF4ODY2MF9zdWJkZXZfZGF0YSBtYXg4NjYwX3Y2X3N1YmRldl9kYXRhID0geworCS5pZAkJPSBNQVg4NjYwX1Y2LAorCS5uYW1lCQk9ICJ2bW1jIiwKKwkucGxhdGZvcm1fZGF0YQk9ICZ2Y2NfbW1jX2luaXRfZGF0YSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF4ODY2MF9wbGF0Zm9ybV9kYXRhIG1heDg2NjBfcGRhdGEgPSB7CisJLnN1YmRldnMgPSAmbWF4ODY2MF92Nl9zdWJkZXZfZGF0YSwKKwkubnVtX3N1YmRldnMgPSAxLAorfTsKKworLyoqCisgKiBJMkMgZGV2aWNlcworICovCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gcmF1bWZlbGRfcHdyaTJjX2JvYXJkX2luZm8gPSB7CisJLnR5cGUJCT0gIm1heDg2NjAiLAorCS5hZGRyCQk9IDB4MzQsCisJLnBsYXRmb3JtX2RhdGEJPSAmbWF4ODY2MF9wZGF0YSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gcmF1bWZlbGRfY29ubmVjdG9yX2kyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgPSB7CisJLnR5cGUJPSAiY3M0MjcwIiwKKwkuYWRkcgk9IDB4NDgsCit9OworCitzdGF0aWMgc3RydWN0IGVldGlfdHNfcGxhdGZvcm1fZGF0YSBlZXRpX3RzX3BkYXRhID0geworCS5pcnFfYWN0aXZlX2hpZ2ggPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyByYXVtZmVsZF9jb250cm9sbGVyX2kyY19ib2FyZF9pbmZvIF9faW5pdGRhdGEgPSB7CisJLnR5cGUJPSAiZWV0aV90cyIsCisJLmFkZHIJPSAweDBhLAorCS5pcnEJPSBncGlvX3RvX2lycShHUElPX1RPVUNIX0lSUSksCisJLnBsYXRmb3JtX2RhdGEgPSAmZWV0aV90c19wZGF0YSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpyYXVtZmVsZF9jb21tb25fZGV2aWNlc1tdID0geworCSZyYXVtZmVsZF9ncGlvX2tleXNfZGV2aWNlLAorCSZyYXVtZmVsZF9sZWRfZGV2aWNlLAorCSZyYXVtZmVsZF9zcGlfZGV2aWNlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHJhdW1mZWxkX2F1ZGlvX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gZ3Bpb19yZXF1ZXN0KEdQSU9fQ09ERUNfUkVTRVQsICJjczQyNzAgcmVzZXQiKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlcXVlc3QgR1BJT19DT0RFQ19SRVNFVFxuIik7CisJZWxzZQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19DT0RFQ19SRVNFVCwgMSk7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19TUERJRl9SRVNFVCwgImFrNDEwNCBzL3BkaWYgcmVzZXQiKTsKKwlpZiAocmV0IDwgMCkKKwkJcHJfd2FybmluZygidW5hYmxlIHRvIHJlcXVlc3QgR1BJT19TUERJRl9SRVNFVFxuIik7CisJZWxzZQorCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19TUERJRl9SRVNFVCwgMSk7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19NQ0xLX1JFU0VULCAiTUNMSyByZXNldCIpOworCWlmIChyZXQgPCAwKQorCQlwcl93YXJuaW5nKCJ1bmFibGUgdG8gcmVxdWVzdCBHUElPX01DTEtfUkVTRVRcbiIpOworCWVsc2UKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fTUNMS19SRVNFVCwgMSk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhBUlJBWV9BTkRfU0laRShhdWRpb19yZWd1bGF0b3JfZGV2aWNlcykpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgcmF1bWZlbGRfY29tbW9uX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJLyogVGhlIG9uL29mZiBidXR0b24gcG9sYXJpdHkgaGFzIGNoYW5nZWQgYWZ0ZXIgcmV2aXNpb24gMSAqLworCWlmICgoc3lzdGVtX3JldiAmIDB4ZmYpID4gMSkgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShncGlvX2tleXNfYnV0dG9uKTsgaSsrKQorCQkJaWYgKCFzdHJjbXAoZ3Bpb19rZXlzX2J1dHRvbltpXS5kZXNjLCAib24vb2ZmIGJ1dHRvbiIpKQorCQkJCWdwaW9fa2V5c19idXR0b25baV0uYWN0aXZlX2xvdyA9IDE7CisJfQorCisJZW5hYmxlX2lycV93YWtlKElSUV9XQUtFVVAwKTsKKworCXB4YTN4eF9zZXRfbmFuZF9pbmZvKCZyYXVtZmVsZF9uYW5kX2luZm8pOworCXB4YTN4eF9zZXRfaTJjX3Bvd2VyX2luZm8oTlVMTCk7CisJcHhhX3NldF9vaGNpX2luZm8oJnJhdW1mZWxkX29oY2lfaW5mbyk7CisJcHhhX3NldF9tY2lfaW5mbygmcmF1bWZlbGRfbWNpX3BsYXRmb3JtX2RhdGEpOworCXB4YV9zZXRfaTJjX2luZm8oTlVMTCk7CisJcHhhX3NldF9mZnVhcnRfaW5mbyhOVUxMKTsKKworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX1cyV19SRVNFVCwgIldpMldpIHJlc2V0Iik7CisJaWYgKHJldCA8IDApCisJCXByX3dhcm5pbmcoIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fVzJXX1JFU0VUXG4iKTsKKwllbHNlCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1cyV19SRVNFVCwgMCk7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19XMldfUEROLCAiV2kyV2kgcG93ZXJ1cCIpOworCWlmIChyZXQgPCAwKQorCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX1cyV19QRE5cbiIpOworCWVsc2UKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fVzJXX1BETiwgMCk7CisKKwkvKiB0aGlzIGNhbiBiZSB1c2VkIHRvIHN3aXRjaCBvZmYgdGhlIGRldmljZSAqLworCXJldCA9IGdwaW9fcmVxdWVzdChHUElPX1NIVVRET1dOX1NVUFBMWSwKKwkJCQkic3VwcGx5IHNodXRkb3duIik7CisJaWYgKHJldCA8IDApCisJCXByX3dhcm5pbmcoIlVuYWJsZSB0byByZXF1ZXN0IEdQSU9fU0hVVERPV05fU1VQUExZXG4iKTsKKwllbHNlCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1NIVVRET1dOX1NVUFBMWSwgMCk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhBUlJBWV9BTkRfU0laRShyYXVtZmVsZF9jb21tb25fZGV2aWNlcykpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsICZyYXVtZmVsZF9wd3JpMmNfYm9hcmRfaW5mbywgMSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCByYXVtZmVsZF9jb250cm9sbGVyX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcHhhM3h4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUocmF1bWZlbGRfY29udHJvbGxlcl9waW5fY29uZmlnKSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyb3RhcnlfZW5jb2Rlcl9kZXZpY2UpOworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKEFSUkFZX0FORF9TSVpFKGNvbnRyb2xsZXJfc3BpX2RldmljZXMpKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCAmcmF1bWZlbGRfY29udHJvbGxlcl9pMmNfYm9hcmRfaW5mbywgMSk7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoR1BJT19TSFVURE9XTl9CQVRULCAiYmF0dGVyeSBzaHV0ZG93biIpOworCWlmIChyZXQgPCAwKQorCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gcmVxdWVzdCBHUElPX1NIVVRET1dOX0JBVFRcbiIpOworCWVsc2UKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fU0hVVERPV05fQkFUVCwgMCk7CisKKwlyYXVtZmVsZF9jb21tb25faW5pdCgpOworCXJhdW1mZWxkX3Bvd2VyX2luaXQoKTsKKwlyYXVtZmVsZF9sY2RfaW5pdCgpOworCXJhdW1mZWxkX3cxX2luaXQoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHJhdW1mZWxkX2Nvbm5lY3Rvcl9pbml0KHZvaWQpCit7CisJcHhhM3h4X21mcF9jb25maWcoQVJSQVlfQU5EX1NJWkUocmF1bWZlbGRfY29ubmVjdG9yX3Bpbl9jb25maWcpKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyhBUlJBWV9BTkRfU0laRShjb25uZWN0b3Jfc3BpX2RldmljZXMpKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCAmcmF1bWZlbGRfY29ubmVjdG9yX2kyY19ib2FyZF9pbmZvLCAxKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc21jOTF4X2RldmljZSk7CisKKwlyYXVtZmVsZF9hdWRpb19pbml0KCk7CisJcmF1bWZlbGRfY29tbW9uX2luaXQoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHJhdW1mZWxkX3NwZWFrZXJfaW5pdCh2b2lkKQoreworCXB4YTN4eF9tZnBfY29uZmlnKEFSUkFZX0FORF9TSVpFKHJhdW1mZWxkX3NwZWFrZXJfcGluX2NvbmZpZykpOworCXNwaV9yZWdpc3Rlcl9ib2FyZF9pbmZvKEFSUkFZX0FORF9TSVpFKHNwZWFrZXJfc3BpX2RldmljZXMpKTsKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCAmcmF1bWZlbGRfY29ubmVjdG9yX2kyY19ib2FyZF9pbmZvLCAxKTsKKworCXBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmc21jOTF4X2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZyb3RhcnlfZW5jb2Rlcl9kZXZpY2UpOworCisJcmF1bWZlbGRfYXVkaW9faW5pdCgpOworCXJhdW1mZWxkX2NvbW1vbl9pbml0KCk7Cit9CisKKy8qIHBoeXNpY2FsIG1lbW9yeSByZWdpb25zICovCisjZGVmaW5lCVJBVU1GRUxEX1NEUkFNX0JBU0UJMHhhMDAwMDAwMAkvKiBTRFJBTSByZWdpb24gKi8KKworI2lmZGVmIENPTkZJR19NQUNIX1JBVU1GRUxEX1JDCitNQUNISU5FX1NUQVJUKFJBVU1GRUxEX1JDLCAiUmF1bWZlbGQgQ29udHJvbGxlciIpCisJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IFJBVU1GRUxEX1NEUkFNX0JBU0UgKyAweDEwMCwKKwkuaW5pdF9tYWNoaW5lCT0gcmF1bWZlbGRfY29udHJvbGxlcl9pbml0LAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEJPSBweGEzeHhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZweGFfdGltZXIsCitNQUNISU5FX0VORAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDSF9SQVVNRkVMRF9DT05ORUNUT1IKK01BQ0hJTkVfU1RBUlQoUkFVTUZFTERfQ09OTkVDVE9SLCAiUmF1bWZlbGQgQ29ubmVjdG9yIikKKwkucGh5c19pbwk9IDB4NDAwMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKGlvX3AydigweDQwMDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gUkFVTUZFTERfU0RSQU1fQkFTRSArIDB4MTAwLAorCS5pbml0X21hY2hpbmUJPSByYXVtZmVsZF9jb25uZWN0b3JfaW5pdCwKKwkubWFwX2lvCQk9IHB4YV9tYXBfaW8sCisJLmluaXRfaXJxCT0gcHhhM3h4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmcHhhX3RpbWVyLAorTUFDSElORV9FTkQKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX01BQ0hfUkFVTUZFTERfU1BFQUtFUgorTUFDSElORV9TVEFSVChSQVVNRkVMRF9TUEVBS0VSLCAiUmF1bWZlbGQgU3BlYWtlciIpCisJLnBoeXNfaW8JPSAweDQwMDAwMDAwLAorCS5pb19wZ19vZmZzdAk9IChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IFJBVU1GRUxEX1NEUkFNX0JBU0UgKyAweDEwMCwKKwkuaW5pdF9tYWNoaW5lCT0gcmF1bWZlbGRfc3BlYWtlcl9pbml0LAorCS5tYXBfaW8JCT0gcHhhX21hcF9pbywKKwkuaW5pdF9pcnEJPSBweGEzeHhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZweGFfdGltZXIsCitNQUNISU5FX0VORAorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9zaGFycHNsX3BtLmMKaW5kZXggNjcyMjlhMS4uNDYzZDg3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvc2hhcnBzbF9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NoYXJwc2xfcG0uYwpAQCAtOTAwLDcgKzkwMCw3IEBACiB9OwogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX19pbml0IHNoYXJwc2xfcG1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNoYXJwc2xfcG1fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgcmV0OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jIGIvYXJjaC9hcm0vbWFjaC1weGEvc3BpdHouYwppbmRleCAyODM1MmMwLi4xOWI1MTA5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS9zcGl0ei5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NwaXR6LmMKQEAgLTU2LDI1ICs1Niw3IEBACiAJR1BJTzgwX25DU180LAkvKiBTQ09PUCAjMSAqLwogCiAJLyogTENEIC0gMTZicHAgQWN0aXZlIFRGVCAqLwotCUdQSU81OF9MQ0RfTEREXzAsCi0JR1BJTzU5X0xDRF9MRERfMSwKLQlHUElPNjBfTENEX0xERF8yLAotCUdQSU82MV9MQ0RfTEREXzMsCi0JR1BJTzYyX0xDRF9MRERfNCwKLQlHUElPNjNfTENEX0xERF81LAotCUdQSU82NF9MQ0RfTEREXzYsCi0JR1BJTzY1X0xDRF9MRERfNywKLQlHUElPNjZfTENEX0xERF84LAotCUdQSU82N19MQ0RfTEREXzksCi0JR1BJTzY4X0xDRF9MRERfMTAsCi0JR1BJTzY5X0xDRF9MRERfMTEsCi0JR1BJTzcwX0xDRF9MRERfMTIsCi0JR1BJTzcxX0xDRF9MRERfMTMsCi0JR1BJTzcyX0xDRF9MRERfMTQsCi0JR1BJTzczX0xDRF9MRERfMTUsCi0JR1BJTzc0X0xDRF9GQ0xLLAotCUdQSU83NV9MQ0RfTENMSywKLQlHUElPNzZfTENEX1BDTEssCisJR1BJT3h4X0xDRF9URlRfMTZCUFAsCiAKIAkvKiBQQyBDYXJkICovCiAJR1BJTzQ4X25QT0UsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9zc3AuYyBiL2FyY2gvYXJtL21hY2gtcHhhL3NzcC5jCmluZGV4IDllYmU2NTguLmE4MWQ2ZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3NzcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3NzcC5jCkBAIC0zNSw2ICszNSw4IEBACiAjaW5jbHVkZSA8bWFjaC9zc3AuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3Mtc3NwLmg+CiAKKyNpZmRlZiBDT05GSUdfUFhBX1NTUF9MRUdBQ1kKKwogI2RlZmluZSBUSU1FT1VUIDEwMDAwMAogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc3NwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCkBAIC0zMDMsNiArMzA1LDcgQEAKIAljbGtfZGlzYWJsZShzc3AtPmNsayk7CiAJc3NwX2ZyZWUoc3NwKTsKIH0KKyNlbmRpZiAvKiBDT05GSUdfUFhBX1NTUF9MRUdBQ1kgKi8KIAogc3RhdGljIERFRklORV9NVVRFWChzc3BfbG9jayk7CiBzdGF0aWMgTElTVF9IRUFEKHNzcF9saXN0KTsKQEAgLTQ4OCw2ICs0OTEsNyBAQAogYXJjaF9pbml0Y2FsbChweGFfc3NwX2luaXQpOwogbW9kdWxlX2V4aXQocHhhX3NzcF9leGl0KTsKIAorI2lmZGVmIENPTkZJR19QWEFfU1NQX0xFR0FDWQogRVhQT1JUX1NZTUJPTChzc3Bfd3JpdGVfd29yZCk7CiBFWFBPUlRfU1lNQk9MKHNzcF9yZWFkX3dvcmQpOwogRVhQT1JUX1NZTUJPTChzc3BfZmx1c2gpOwpAQCAtNDk4LDYgKzUwMiw3IEBACiBFWFBPUlRfU1lNQk9MKHNzcF9pbml0KTsKIEVYUE9SVF9TWU1CT0woc3NwX2V4aXQpOwogRVhQT1JUX1NZTUJPTChzc3BfY29uZmlnKTsKKyNlbmRpZgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlBYQSBTU1AgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJMaWFtIEdpcmR3b29kIik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS90aW1lLmMgYi9hcmNoL2FybS9tYWNoLXB4YS90aW1lLmMKaW5kZXggNzUwYzQ0OC4uMjkzZTQwYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvdGltZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3RpbWUuYwpAQCAtNzYsMTQgKzc2LDEyIEBACiBzdGF0aWMgaW50CiBweGFfb3NtcjBfc2V0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG5leHQsIG9zY3I7CisJdW5zaWduZWQgbG9uZyBuZXh0LCBvc2NyOwogCi0JcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlPSUVSIHw9IE9JRVJfRTA7CiAJbmV4dCA9IE9TQ1IgKyBkZWx0YTsKIAlPU01SMCA9IG5leHQ7CiAJb3NjciA9IE9TQ1I7Ci0JcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXJldHVybiAoc2lnbmVkKShuZXh0IC0gb3NjcikgPD0gTUlOX09TQ1JfREVMVEEgPyAtRVRJTUUgOiAwOwogfQpAQCAtOTEsMjMgKzg5LDE3IEBACiBzdGF0aWMgdm9pZAogcHhhX29zbXIwX3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLCBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpkZXYpCiB7Ci0JdW5zaWduZWQgbG9uZyBpcnFmbGFnczsKLQogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKLQkJcmF3X2xvY2FsX2lycV9zYXZlKGlycWZsYWdzKTsKIAkJT0lFUiAmPSB+T0lFUl9FMDsKIAkJT1NTUiA9IE9TU1JfTTA7Ci0JCXJhd19sb2NhbF9pcnFfcmVzdG9yZShpcnFmbGFncyk7CiAJCWJyZWFrOwogCiAJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKIAkJLyogaW5pdGlhbGl6aW5nLCByZWxlYXNlZCwgb3IgcHJlcGFyaW5nIGZvciBzdXNwZW5kICovCi0JCXJhd19sb2NhbF9pcnFfc2F2ZShpcnFmbGFncyk7CiAJCU9JRVIgJj0gfk9JRVJfRTA7CiAJCU9TU1IgPSBPU1NSX00wOwotCQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoaXJxZmxhZ3MpOwogCQlicmVhazsKIAogCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCmluZGV4IGM4NTRjMTYuLmFkNTUyNzkxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXB4YS90b3NhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdG9zYS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3BkYV9wb3dlci5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9tYXRyaXhfa2V5cGFkLmg+CiAKICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgpAQCAtMTMxLDI0ICsxMzIsMjQgQEAKIAlHUElPNDVfQlRVQVJUX1JUUywKIAogCS8qIEtleWJkICovCi0JR1BJTzU4X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywKLQlHUElPNTlfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAotCUdQSU82MF9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCi0JR1BJTzYxX0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywKLQlHUElPNjJfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAotCUdQSU82M19HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCi0JR1BJTzY0X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywKLQlHUElPNjVfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAotCUdQSU82Nl9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCi0JR1BJTzY3X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywKLQlHUElPNjhfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAotCUdQSU82OV9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCi0JR1BJTzcwX0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywKLQlHUElPNzFfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAotCUdQSU83Ml9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCi0JR1BJTzczX0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywKLQlHUElPNzRfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAotCUdQSU83NV9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCisJR1BJTzU4X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogQ29sdW1uIDAgKi8KKwlHUElPNTlfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBDb2x1bW4gMSAqLworCUdQSU82MF9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIENvbHVtbiAyICovCisJR1BJTzYxX0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogQ29sdW1uIDMgKi8KKwlHUElPNjJfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBDb2x1bW4gNCAqLworCUdQSU82M19HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIENvbHVtbiA1ICovCisJR1BJTzY0X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogQ29sdW1uIDYgKi8KKwlHUElPNjVfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBDb2x1bW4gNyAqLworCUdQSU82Nl9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIENvbHVtbiA4ICovCisJR1BJTzY3X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogQ29sdW1uIDkgKi8KKwlHUElPNjhfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBDb2x1bW4gMTAgKi8KKwlHUElPNjlfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBSb3cgMCAqLworCUdQSU83MF9HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIFJvdyAxICovCisJR1BJTzcxX0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogUm93IDIgKi8KKwlHUElPNzJfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBSb3cgMyAqLworCUdQSU83M19HUElPIHwgTUZQX0xQTV9EUklWRV9MT1csCS8qIFJvdyA0ICovCisJR1BJTzc0X0dQSU8gfCBNRlBfTFBNX0RSSVZFX0xPVywJLyogUm93IDUgKi8KKwlHUElPNzVfR1BJTyB8IE1GUF9MUE1fRFJJVkVfTE9XLAkvKiBSb3cgNiAqLwogCiAJLyogU1BJICovCiAJR1BJTzgxX1NTUDJfQ0xLX09VVCwKQEAgLTQxMSw5ICs0MTIsODcgQEAKIC8qCiAgKiBUb3NhIEtleWJvYXJkCiAgKi8KK3N0YXRpYyBjb25zdCB1aW50MzJfdCB0b3Nha2JkX2tleW1hcFtdID0geworCUtFWSgwLCAyLCBLRVlfVyksCisJS0VZKDAsIDYsIEtFWV9LKSwKKwlLRVkoMCwgNywgS0VZX0JBQ0tTUEFDRSksCisJS0VZKDAsIDgsIEtFWV9QKSwKKwlLRVkoMSwgMSwgS0VZX1EpLAorCUtFWSgxLCAyLCBLRVlfRSksCisJS0VZKDEsIDMsIEtFWV9UKSwKKwlLRVkoMSwgNCwgS0VZX1kpLAorCUtFWSgxLCA2LCBLRVlfTyksCisJS0VZKDEsIDcsIEtFWV9JKSwKKwlLRVkoMSwgOCwgS0VZX0NPTU1BKSwKKwlLRVkoMiwgMSwgS0VZX0EpLAorCUtFWSgyLCAyLCBLRVlfRCksCisJS0VZKDIsIDMsIEtFWV9HKSwKKwlLRVkoMiwgNCwgS0VZX1UpLAorCUtFWSgyLCA2LCBLRVlfTCksCisJS0VZKDIsIDcsIEtFWV9FTlRFUiksCisJS0VZKDIsIDgsIEtFWV9ET1QpLAorCUtFWSgzLCAxLCBLRVlfWiksCisJS0VZKDMsIDIsIEtFWV9DKSwKKwlLRVkoMywgMywgS0VZX1YpLAorCUtFWSgzLCA0LCBLRVlfSiksCisJS0VZKDMsIDUsIFRPU0FfS0VZX0FERFJFU1NCT09LKSwKKwlLRVkoMywgNiwgVE9TQV9LRVlfQ0FOQ0VMKSwKKwlLRVkoMywgNywgVE9TQV9LRVlfQ0VOVEVSKSwKKwlLRVkoMywgOCwgVE9TQV9LRVlfT0spLAorCUtFWSgzLCA5LCBLRVlfTEVGVFNISUZUKSwKKwlLRVkoNCwgMSwgS0VZX1MpLAorCUtFWSg0LCAyLCBLRVlfUiksCisJS0VZKDQsIDMsIEtFWV9CKSwKKwlLRVkoNCwgNCwgS0VZX04pLAorCUtFWSg0LCA1LCBUT1NBX0tFWV9DQUxFTkRBUiksCisJS0VZKDQsIDYsIFRPU0FfS0VZX0hPTUVQQUdFKSwKKwlLRVkoNCwgNywgS0VZX0xFRlRDVFJMKSwKKwlLRVkoNCwgOCwgVE9TQV9LRVlfTElHSFQpLAorCUtFWSg0LCAxMCwgS0VZX1JJR0hUU0hJRlQpLAorCUtFWSg1LCAxLCBLRVlfVEFCKSwKKwlLRVkoNSwgMiwgS0VZX1NMQVNIKSwKKwlLRVkoNSwgMywgS0VZX0gpLAorCUtFWSg1LCA0LCBLRVlfTSksCisJS0VZKDUsIDUsIFRPU0FfS0VZX01FTlUpLAorCUtFWSg1LCA3LCBLRVlfVVApLAorCUtFWSg1LCAxMSwgVE9TQV9LRVlfRk4pLAorCUtFWSg2LCAxLCBLRVlfWCksCisJS0VZKDYsIDIsIEtFWV9GKSwKKwlLRVkoNiwgMywgS0VZX1NQQUNFKSwKKwlLRVkoNiwgNCwgS0VZX0FQT1NUUk9QSEUpLAorCUtFWSg2LCA1LCBUT1NBX0tFWV9NQUlMKSwKKwlLRVkoNiwgNiwgS0VZX0xFRlQpLAorCUtFWSg2LCA3LCBLRVlfRE9XTiksCisJS0VZKDYsIDgsIEtFWV9SSUdIVCksCit9OworCitzdGF0aWMgc3RydWN0IG1hdHJpeF9rZXltYXBfZGF0YSB0b3Nha2JkX2tleW1hcF9kYXRhID0geworCS5rZXltYXAJCT0gdG9zYWtiZF9rZXltYXAsCisJLmtleW1hcF9zaXplCT0gQVJSQVlfU0laRSh0b3Nha2JkX2tleW1hcCksCit9OworCitzdGF0aWMgY29uc3QgaW50IHRvc2FrYmRfY29sX2dwaW9zW10gPQorCQkJeyA1OCwgNTksIDYwLCA2MSwgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywgNjggfTsKK3N0YXRpYyBjb25zdCBpbnQgdG9zYWtiZF9yb3dfZ3Bpb3NbXSA9CisJCQl7IDY5LCA3MCwgNzEsIDcyLCA3MywgNzQsIDc1IH07CisKK3N0YXRpYyBzdHJ1Y3QgbWF0cml4X2tleXBhZF9wbGF0Zm9ybV9kYXRhIHRvc2FrYmRfcGRhdGEgPSB7CisJLmtleW1hcF9kYXRhCQk9ICZ0b3Nha2JkX2tleW1hcF9kYXRhLAorCS5yb3dfZ3Bpb3MJCT0gdG9zYWtiZF9yb3dfZ3Bpb3MsCisJLmNvbF9ncGlvcwkJPSB0b3Nha2JkX2NvbF9ncGlvcywKKwkubnVtX3Jvd19ncGlvcwkJPSBBUlJBWV9TSVpFKHRvc2FrYmRfcm93X2dwaW9zKSwKKwkubnVtX2NvbF9ncGlvcwkJPSBBUlJBWV9TSVpFKHRvc2FrYmRfY29sX2dwaW9zKSwKKwkuY29sX3NjYW5fZGVsYXlfdXMJPSAxMCwKKwkuZGVib3VuY2VfbXMJCT0gMTAsCisJLndha2V1cAkJCT0gMSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRvc2FrYmRfZGV2aWNlID0gewotCS5uYW1lCQk9ICJ0b3NhLWtleWJvYXJkIiwKKwkubmFtZQkJPSAibWF0cml4LWtleXBhZCIsCiAJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YSA9ICZ0b3Nha2JkX3BkYXRhLAorCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGdwaW9fa2V5c19idXR0b24gdG9zYV9ncGlvX2tleXNbXSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMgYi9hcmNoL2FybS9tYWNoLXB4YS90cml6ZXBzNC5jCmluZGV4IDBhYTg1OGUuLjc5N2YyNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3RyaXplcHM0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdHJpemVwczQuYwpAQCAtNzIsMjcgKzcyLDE0IEBACiAJR1BJTzc5X25DU18zLAkJLyogTG9naWMgQ1MgKi8KIAlHUElPMF9HUElPIHwgV0FLRVVQX09OX0VER0VfUklTRSwJLyogTG9naWMgaXJxICovCiAKKwkvKiBBQzk3ICovCisJR1BJTzI4X0FDOTdfQklUQ0xLLAorCUdQSU8yOV9BQzk3X1NEQVRBX0lOXzAsCisJR1BJTzMwX0FDOTdfU0RBVEFfT1VULAorCUdQSU8zMV9BQzk3X1NZTkMsCisKIAkvKiBMQ0QgLSAxNmJwcCBBY3RpdmUgVEZUICovCi0JR1BJTzU4X0xDRF9MRERfMCwKLQlHUElPNTlfTENEX0xERF8xLAotCUdQSU82MF9MQ0RfTEREXzIsCi0JR1BJTzYxX0xDRF9MRERfMywKLQlHUElPNjJfTENEX0xERF80LAotCUdQSU82M19MQ0RfTEREXzUsCi0JR1BJTzY0X0xDRF9MRERfNiwKLQlHUElPNjVfTENEX0xERF83LAotCUdQSU82Nl9MQ0RfTEREXzgsCi0JR1BJTzY3X0xDRF9MRERfOSwKLQlHUElPNjhfTENEX0xERF8xMCwKLQlHUElPNjlfTENEX0xERF8xMSwKLQlHUElPNzBfTENEX0xERF8xMiwKLQlHUElPNzFfTENEX0xERF8xMywKLQlHUElPNzJfTENEX0xERF8xNCwKLQlHUElPNzNfTENEX0xERF8xNSwKLQlHUElPNzRfTENEX0ZDTEssCi0JR1BJTzc1X0xDRF9MQ0xLLAotCUdQSU83Nl9MQ0RfUENMSywKLQlHUElPNzdfTENEX0JJQVMsCisJR1BJT3h4X0xDRF9URlRfMTZCUFAsCiAKIAkvKiBVQVJUICovCiAJR1BJTzlfRkZVQVJUX0NUUywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMgYi9hcmNoL2FybS9tYWNoLXB4YS92aXBlci5jCmluZGV4IDg5ZjI1OGMuLjFkZDEzMzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtcHhhL3ZpcGVyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1weGEvdmlwZXIuYwpAQCAtMjgxLDcgKzI4MSw3IEBACiAJZG8gewogCQkvKiB3ZSdyZSBpbiBhIGNoYWluZWQgaXJxIGhhbmRsZXIsCiAJCSAqIHNvIGFjayB0aGUgaW50ZXJydXB0IGJ5IGhhbmQgKi8KLQkJR0VEUihWSVBFUl9DUExEX0dQSU8pID0gR1BJT19iaXQoVklQRVJfQ1BMRF9HUElPKTsKKwkJZGVzYy0+Y2hpcC0+YWNrKGlycSk7CiAKIAkJaWYgKGxpa2VseShwZW5kaW5nKSkgewogCQkJaXJxID0gdmlwZXJfYml0X3RvX2lycShfX2ZmcyhwZW5kaW5nKSk7CkBAIC03MTEsNiArNzExLDEyIEBACiAJR1BJTzgwX25DU180LAogCUdQSU8zM19uQ1NfNSwKIAorCS8qIEFDOTcgKi8KKwlHUElPMjhfQUM5N19CSVRDTEssCisJR1BJTzI5X0FDOTdfU0RBVEFfSU5fMCwKKwlHUElPMzBfQUM5N19TREFUQV9PVVQsCisJR1BJTzMxX0FDOTdfU1lOQywKKwogCS8qIEZQIEJhY2tsaWdodCAqLwogCUdQSU85X0dQSU8sIAkJCQkvKiBWSVBFUl9CQ0tMSUdIVF9FTl9HUElPICovCiAJR1BJTzEwX0dQSU8sCQkJCS8qIFZJUEVSX0xDRF9FTl9HUElPICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS96ZXVzLmMgYi9hcmNoL2FybS9tYWNoLXB4YS96ZXVzLmMKaW5kZXggNzVmMmEzNy4uMzk4OTZkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvemV1cy5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3pldXMuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy9wY2E5NTN4Lmg+CiAjaW5jbHVkZSA8bGludXgvYXBtLWVtdWxhdGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2Nhbi9wbGF0Zm9ybS9tY3AyNTF4Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KQEAgLTM4NywxMSArMzg4LDQ3IEBACiAJLmVuYWJsZV9kbWEgICAgID0gMSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHB4YTJ4eF9zcGlfc3NwM19kZXZpY2UgPSB7Ci0JLm5hbWUgPSAicHhhMnh4LXNwaSIsCi0JLmlkID0gMywKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZweGEyeHhfc3BpX3NzcDNfbWFzdGVyX2luZm8sCisvKiBDQU4gYnVzIG9uIFNQSSAqLworc3RhdGljIGludCB6ZXVzX21jcDI1MTVfc2V0dXAoc3RydWN0IHNwaV9kZXZpY2UgKnNkZXYpCit7CisJaW50IGVycjsKKworCWVyciA9IGdwaW9fcmVxdWVzdChaRVVTX0NBTl9TSEROX0dQSU8sICJDQU4gc2h1dGRvd24iKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFpFVVNfQ0FOX1NIRE5fR1BJTywgMSk7CisJaWYgKGVycikgeworCQlncGlvX2ZyZWUoWkVVU19DQU5fU0hETl9HUElPKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6ZXVzX21jcDI1MTVfdHJhbnNjZWl2ZXJfZW5hYmxlKGludCBlbmFibGUpCit7CisJZ3Bpb19zZXRfdmFsdWUoWkVVU19DQU5fU0hETl9HUElPLCAhZW5hYmxlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBtY3AyNTF4X3BsYXRmb3JtX2RhdGEgemV1c19tY3AyNTE1X3BkYXRhID0geworCS5vc2NpbGxhdG9yX2ZyZXF1ZW5jeQk9IDE2KjEwMDAqMTAwMCwKKwkubW9kZWwJCQk9IENBTl9NQ1AyNTFYX01DUDI1MTUsCisJLmJvYXJkX3NwZWNpZmljX3NldHVwCT0gemV1c19tY3AyNTE1X3NldHVwLAorCS50cmFuc2NlaXZlcl9lbmFibGUJPSB6ZXVzX21jcDI1MTVfdHJhbnNjZWl2ZXJfZW5hYmxlLAorCS5wb3dlcl9lbmFibGUJCT0gemV1c19tY3AyNTE1X3RyYW5zY2VpdmVyX2VuYWJsZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3BpX2JvYXJkX2luZm8gemV1c19zcGlfYm9hcmRfaW5mb1tdID0geworCVswXSA9IHsKKwkJLm1vZGFsaWFzCT0gIm1jcDI1MXgiLAorCQkucGxhdGZvcm1fZGF0YQk9ICZ6ZXVzX21jcDI1MTVfcGRhdGEsCisJCS5pcnEJCT0gZ3Bpb190b19pcnEoWkVVU19DQU5fR1BJTyksCisJCS5tYXhfc3BlZWRfaHoJPSAxKjEwMDAqMTAwMCwKKwkJLmJ1c19udW0JPSAzLAorCQkubW9kZQkJPSBTUElfTU9ERV8wLAorCQkuY2hpcF9zZWxlY3QJPSAwLAogCX0sCiB9OwogCkBAIC00NTcsMTUgKzQ5NCwyOCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHpldXNfbWF4NjM2OV9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gWkVVU19DUExEX0VYVFdET0dfUEhZUywKKwkuZW5kCQk9IFpFVVNfQ1BMRF9FWFRXRE9HX1BIWVMsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSB6ZXVzX21heDYzNjlfZGV2aWNlID0geworCS5uYW1lCQk9ICJtYXg2MzY5X3dkdCIsCisJLmlkCQk9IC0xLAorCS5yZXNvdXJjZQk9ICZ6ZXVzX21heDYzNjlfcmVzb3VyY2UsCisJLm51bV9yZXNvdXJjZXMJPSAxLAorfTsKKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnpldXNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CiAJJnpldXNfc2VyaWFsX2RldmljZSwKIAkmemV1c19tdGRfZGV2aWNlc1swXSwKIAkmemV1c19kbTlrMF9kZXZpY2UsCiAJJnpldXNfZG05azFfZGV2aWNlLAogCSZ6ZXVzX3NyYW1fZGV2aWNlLAotCSZweGEyeHhfc3BpX3NzcDNfZGV2aWNlLAogCSZ6ZXVzX2xlZHNfZGV2aWNlLAogCSZ6ZXVzX3BjbWNpYV9kZXZpY2UsCisJJnpldXNfbWF4NjM2OV9kZXZpY2UsCiB9OwogCiAvKiBBQyc5NyAqLwpAQCAtNTA5LDcgKzU1OSw5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcHhhb2hjaV9wbGF0Zm9ybV9kYXRhIHpldXNfb2hjaV9wbGF0Zm9ybV9kYXRhID0gewogCS5wb3J0X21vZGUJPSBQTU1fTlBTX01PREUsCi0JLmZsYWdzCQk9IEVOQUJMRV9QT1JUX0FMTCB8IFBPV0VSX0NPTlRST0xfTE9XIHwgUE9XRVJfU0VOU0VfTE9XLAorCS8qIENsZWFyIFBvd2VyIENvbnRyb2wgUG9sYXJpdHkgTG93IGFuZCBzZXQgUG93ZXIgU2Vuc2UKKwkgKiBQb2xhcml0eSBMb3cuIFN1cHBseSBwb3dlciB0byBVU0IgcG9ydHMuICovCisJLmZsYWdzCQk9IEVOQUJMRV9QT1JUX0FMTCB8IFBPV0VSX1NFTlNFX0xPVywKIAkuaW5pdAkJPSB6ZXVzX29oY2lfaW5pdCwKIAkuZXhpdAkJPSB6ZXVzX29oY2lfZXhpdCwKIH07CkBAIC02MjEsMTEgKzY3MywxNSBAQAogCS51ZGNfY29tbWFuZCA9IHpldXNfdWRjX2NvbW1hbmQsCiB9OwogCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgdm9pZCB6ZXVzX3Bvd2VyX29mZih2b2lkKQogewogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJcHhhMjd4X2NwdV9zdXNwZW5kKFBXUk1PREVfREVFUFNMRUVQKTsKIH0KKyNlbHNlCisjZGVmaW5lIHpldXNfcG93ZXJfb2ZmICAgTlVMTAorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfQVBNX0VNVUxBVElPTgogc3RhdGljIHZvaWQgemV1c19nZXRfcG93ZXJfc3RhdHVzKHN0cnVjdCBhcG1fcG93ZXJfaW5mbyAqaW5mbykKQEAgLTcwNiw2ICs3NjIsMTIgQEAKIH07CiAKIHN0YXRpYyBtZnBfY2ZnX3QgemV1c19waW5fY29uZmlnW10gX19pbml0ZGF0YSA9IHsKKwkvKiBBQzk3ICovCisJR1BJTzI4X0FDOTdfQklUQ0xLLAorCUdQSU8yOV9BQzk3X1NEQVRBX0lOXzAsCisJR1BJTzMwX0FDOTdfU0RBVEFfT1VULAorCUdQSU8zMV9BQzk3X1NZTkMsCisKIAlHUElPMTVfbkNTXzEsCiAJR1BJTzc4X25DU18yLAogCUdQSU84MF9uQ1NfNCwKQEAgLTczMSw2ICs3OTMsMTEgQEAKIAlHUElPMTA0X0NJRl9ERF8yLAogCUdQSU8xMDVfQ0lGX0REXzEsCiAKKwlHUElPODFfU1NQM19UWEQsCisJR1BJTzgyX1NTUDNfUlhELAorCUdQSU84M19TU1AzX1NGUk0sCisJR1BJTzg0X1NTUDNfU0NMSywKKwogCUdQSU80OF9uUE9FLAogCUdQSU80OV9uUFdFLAogCUdQSU81MF9uUElPUiwKQEAgLTc4NSw2ICs4NTIsOCBAQAogCXB4YV9zZXRfYWM5N19pbmZvKCZ6ZXVzX2FjOTdfaW5mbyk7CiAJcHhhX3NldF9pMmNfaW5mbyhOVUxMKTsKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBBUlJBWV9BTkRfU0laRSh6ZXVzX2kyY19kZXZpY2VzKSk7CisJcHhhMnh4X3NldF9zcGlfaW5mbygzLCAmcHhhMnh4X3NwaV9zc3AzX21hc3Rlcl9pbmZvKTsKKwlzcGlfcmVnaXN0ZXJfYm9hcmRfaW5mbyh6ZXVzX3NwaV9ib2FyZF9pbmZvLCBBUlJBWV9TSVpFKHpldXNfc3BpX2JvYXJkX2luZm8pKTsKIH0KIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyB6ZXVzX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewpAQCAtODA3LDEyICs4NzYsNiBAQAogCQkudHlwZSAgICA9IE1UX0RFVklDRSwKIAl9LAogCXsKLQkJLnZpcnR1YWwgPSBaRVVTX0NQTERfRVhUV0RPRywKLQkJLnBmbiAgICAgPSBfX3BoeXNfdG9fcGZuKFpFVVNfQ1BMRF9FWFRXRE9HX1BIWVMpLAotCQkubGVuZ3RoICA9IDB4MTAwMCwKLQkJLnR5cGUgICAgPSBNVF9ERVZJQ0UsCi0JfSwKLQl7CiAJCS52aXJ0dWFsID0gWkVVU19QQzEwNElPLAogCQkucGZuICAgICA9IF9fcGh5c190b19wZm4oWkVVU19QQzEwNElPX1BIWVMpLAogCQkubGVuZ3RoICA9IDB4MDA4MDAwMDAsCkBAIC04MzcsNyArOTAwLDcgQEAKIAlQQ0ZSID0gUENGUl9PUERFIHwgUENGUl9EQ19FTiB8IFBDRlJfRlMgfCBQQ0ZSX0ZQOwogfQogCi1NQUNISU5FX1NUQVJUKEFSQ09NX1pFVVMsICJBcmNvbSBaRVVTIikKK01BQ0hJTkVfU1RBUlQoQVJDT01fWkVVUywgIkFyY29tL0V1cm90ZWNoIFpFVVMiKQogCS8qIE1haW50YWluZXI6IE1hcmMgWnluZ2llciA8bWF6QG1pc3RlcmpvbmVzLm9yZz4gKi8KIAkucGh5c19pbwk9IDB4NDAwMDAwMDAsCiAJLmlvX3BnX29mZnN0CT0gKChpb19wMnYoMHg0MDAwMDAwMCkgPj4gMTgpICYgMHhmZmZjKSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYwppbmRleCA2M2I3NTNmLi4wZDhlMDQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSA8bWFjaC9kbWEuaD4KIAogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0jaW5jbHVkZSA8cGxhdC9kbWEtcGxhdC5oPgorI2luY2x1ZGUgPHBsYXQvZG1hLXMzYzI0eHguaD4KIAogI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2gxOTQwLWJsdWV0b290aC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2gxOTQwLWJsdWV0b290aC5jCmluZGV4IGI3ZDFmOGQuLmEzZjNjN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9oMTk0MC1ibHVldG9vdGguYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaDE5NDAtYmx1ZXRvb3RoLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAkuc2V0X2Jsb2NrID0gaDE5NDBidF9zZXRfYmxvY2ssCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBoMTk0MGJ0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBoMTk0MGJ0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHJma2lsbCAqcmZrOwogCWludCByZXQgPSAwOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9ncGlvLWNvcmUuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvZ3Bpby1jb3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4Yjg3OWEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9ncGlvLWNvcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8qIGFyY2gvYXJtL21hY2gtczNjMjQxMDAvaW5jbHVkZS9tYWNoL2dwaW8tY29yZS5oCi0gKgotICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KLSAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogUzNDMjQxMCAtIEdQSU8gY29yZSBzdXBwb3J0Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9HUElPX0NPUkVfSAotI2RlZmluZSBfX0FTTV9BUkNIX0dQSU9fQ09SRV9IIF9fRklMRV9fCi0KLSNpbmNsdWRlIDxwbGF0L2dwaW8tY29yZS5oPgotI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+Ci0KLWV4dGVybiBzdHJ1Y3QgczNjX2dwaW9fY2hpcCBzM2MyNHh4X2dwaW9zW107Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHMzY19ncGlvX2NoaXAgKnMzY19ncGlvbGliX2dldGNoaXAodW5zaWduZWQgaW50IHBpbikKLXsKLQlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcDsKLQotCWlmIChwaW4gPiBTM0MyNDEwX0dQRygxMCkpCi0JCXJldHVybiBOVUxMOwotCi0JY2hpcCA9ICZzM2MyNHh4X2dwaW9zW3Bpbi8zMl07Ci0JcmV0dXJuIChTM0MyNDEwX0dQSU9fT0ZGU0VUKHBpbikgPCBjaGlwLT5jaGlwLm5ncGlvKSA/IGNoaXAgOiBOVUxMOwotfQotCi0jZW5kaWYgLyogX19BU01fQVJDSF9HUElPX0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9ncGlvLXRyYWNrLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL2dwaW8tdHJhY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2IyNTkxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9ncGlvLXRyYWNrLmgKQEAgLTAsMCArMSwzMyBAQAorLyogYXJjaC9hcm0vbWFjaC1zM2MyNDEwMC9pbmNsdWRlL21hY2gvZ3Bpby1jb3JlLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0MyNDEwIC0gR1BJTyBjb3JlIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0dQSU9fQ09SRV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfR1BJT19DT1JFX0ggX19GSUxFX18KKworI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CisKK2V4dGVybiBzdHJ1Y3QgczNjX2dwaW9fY2hpcCBzM2MyNHh4X2dwaW9zW107CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHMzY19ncGlvX2NoaXAgKnMzY19ncGlvbGliX2dldGNoaXAodW5zaWduZWQgaW50IHBpbikKK3sKKwlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcDsKKworCWlmIChwaW4gPiBTM0MyNDEwX0dQRygxMCkpCisJCXJldHVybiBOVUxMOworCisJY2hpcCA9ICZzM2MyNHh4X2dwaW9zW3Bpbi8zMl07CisJcmV0dXJuIChTM0MyNDEwX0dQSU9fT0ZGU0VUKHBpbikgPCBjaGlwLT5jaGlwLm5ncGlvKSA/IGNoaXAgOiBOVUxMOworfQorCisjZW5kaWYgLyogX19BU01fQVJDSF9HUElPX0NPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9wbS1jb3JlLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3BtLWNvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGE4M2IyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9wbS1jb3JlLmgKQEAgLTAsMCArMSw2NCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvcG0tY29yZS5oCisgKgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0MyNHh4IC0gUE0gY29yZSBzdXBwb3J0IGZvciBhcmNoL2FybS9wbGF0LXMzYy9wbS5jCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgczNjX3BtX2RlYnVnX2luaXRfdWFydCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdG1wID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtDT04pOworCisJLyogcmUtc3RhcnQgdWFydCBjbG9ja3MgKi8KKwl0bXAgfD0gUzNDMjQxMF9DTEtDT05fVUFSVDA7CisJdG1wIHw9IFMzQzI0MTBfQ0xLQ09OX1VBUlQxOworCXRtcCB8PSBTM0MyNDEwX0NMS0NPTl9VQVJUMjsKKworCV9fcmF3X3dyaXRlbCh0bXAsIFMzQzI0MTBfQ0xLQ09OKTsKKwl1ZGVsYXkoMTApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgczNjX3BtX2FyY2hfcHJlcGFyZV9pcnFzKHZvaWQpCit7CisJX19yYXdfd3JpdGVsKHMzY19pcnF3YWtlX2ludG1hc2ssIFMzQzI0MTBfSU5UTVNLKTsKKwlfX3Jhd193cml0ZWwoczNjX2lycXdha2VfZWludG1hc2ssIFMzQzI0MTBfRUlOVE1BU0spOworCisJLyogYWNrIGFueSBvdXRzdGFuZGluZyBleHRlcm5hbCBpbnRlcnJ1cHRzIGJlZm9yZSB3ZSBnbyB0byBzbGVlcCAqLworCisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFMzQzI0MTBfRUlOVFBFTkQpLCBTM0MyNDEwX0VJTlRQRU5EKTsKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRQTkQpLCBTM0MyNDEwX0lOVFBORCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFMzQzI0MTBfU1JDUE5EKSwgUzNDMjQxMF9TUkNQTkQpOworCit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfcG1fYXJjaF9zdG9wX2Nsb2Nrcyh2b2lkKQoreworCV9fcmF3X3dyaXRlbCgweDAwLCBTM0MyNDEwX0NMS0NPTik7ICAvKiB0dXJuIG9mZiBjbG9ja3Mgb3ZlciBzbGVlcCAqLworfQorCitzdGF0aWMgdm9pZCBzM2NfcG1fc2hvd19yZXN1bWVfaXJxcyhpbnQgc3RhcnQsIHVuc2lnbmVkIGxvbmcgd2hpY2gsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgbWFzayk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfcG1fYXJjaF9zaG93X3Jlc3VtZV9pcnFzKHZvaWQpCit7CisJUzNDX1BNREJHKCJwb3N0IHNsZWVwOiBJUlFzIDB4JTA4eCwgMHglMDh4XG4iLAorCQkgIF9fcmF3X3JlYWRsKFMzQzI0MTBfU1JDUE5EKSwKKwkJICBfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRQRU5EKSk7CisKKwlzM2NfcG1fc2hvd19yZXN1bWVfaXJxcyhJUlFfRUlOVDAsIF9fcmF3X3JlYWRsKFMzQzI0MTBfU1JDUE5EKSwKKwkJCQlzM2NfaXJxd2FrZV9pbnRtYXNrKTsKKworCXMzY19wbV9zaG93X3Jlc3VtZV9pcnFzKElSUV9FSU5UNC00LCBfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRQRU5EKSwKKwkJCQlzM2NfaXJxd2FrZV9laW50bWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfcG1fYXJjaF91cGRhdGVfdWFydCh2b2lkIF9faW9tZW0gKnJlZ3MsCisJCQkJCSAgIHN0cnVjdCBwbV91YXJ0X3NhdmUgKnNhdmUpCit7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3MtZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8uaAppbmRleCBlYmM4NWM2Li5mZDY3MmYzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3MtZ3Bpby5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1ncGlvLmgKQEAgLTQwNiwzMSArNDA2LDMxIEBACiAjZGVmaW5lIFMzQzI0NDNfR1BFNV9TRDFfQ0xLICAgKDB4MDIgPDwgMTApCiAjZGVmaW5lIFMzQzI0MDBfR1BFNV9FSU5UNSAgICAgKDB4MDIgPDwgMTApCiAjZGVmaW5lIFMzQzI0MDBfR1BFNV9UQ0xLMSAgICAgKDB4MDMgPDwgMTApCisjZGVmaW5lIFMzQzI0NDNfR1BFNV9BQ19CSVRDTEsgKDB4MDMgPDwgMTApCiAKICNkZWZpbmUgUzNDMjQxMF9HUEU2X1NEQ01EICAgICAoMHgwMiA8PCAxMikKICNkZWZpbmUgUzNDMjQ0M19HUEU2X1NEMV9DTUQgICAoMHgwMiA8PCAxMikKLSNkZWZpbmUgUzNDMjQ0M19HUEU2X0FDX0JJVENMSyAoMHgwMyA8PCAxMikKKyNkZWZpbmUgUzNDMjQ0M19HUEU2X0FDX1NESSAgICAoMHgwMyA8PCAxMikKICNkZWZpbmUgUzNDMjQwMF9HUEU2X0VJTlQ2ICAgICAoMHgwMiA8PCAxMikKIAogI2RlZmluZSBTM0MyNDEwX0dQRTdfU0REQVQwICAgICgweDAyIDw8IDE0KQogI2RlZmluZSBTM0MyNDQzX0dQRTVfU0QxX0RBVDAgICgweDAyIDw8IDE0KQotI2RlZmluZSBTM0MyNDQzX0dQRTdfQUNfU0RJICAgICgweDAzIDw8IDE0KQorI2RlZmluZSBTM0MyNDQzX0dQRTdfQUNfU0RPICAgICgweDAzIDw8IDE0KQogI2RlZmluZSBTM0MyNDAwX0dQRTdfRUlOVDcgICAgICgweDAyIDw8IDE0KQogCiAjZGVmaW5lIFMzQzI0MTBfR1BFOF9TRERBVDEgICAgKDB4MDIgPDwgMTYpCiAjZGVmaW5lIFMzQzI0NDNfR1BFOF9TRDFfREFUMSAgKDB4MDIgPDwgMTYpCi0jZGVmaW5lIFMzQzI0NDNfR1BFOF9BQ19TRE8gICAgKDB4MDMgPDwgMTYpCisjZGVmaW5lIFMzQzI0NDNfR1BFOF9BQ19TWU5DICAgKDB4MDMgPDwgMTYpCiAjZGVmaW5lIFMzQzI0MDBfR1BFOF9uWERBQ0swICAgKDB4MDIgPDwgMTYpCiAKICNkZWZpbmUgUzNDMjQxMF9HUEU5X1NEREFUMiAgICAoMHgwMiA8PCAxOCkKICNkZWZpbmUgUzNDMjQ0M19HUEU5X1NEMV9EQVQyICAoMHgwMiA8PCAxOCkKLSNkZWZpbmUgUzNDMjQ0M19HUEU5X0FDX1NZTkMgICAoMHgwMyA8PCAxOCkKKyNkZWZpbmUgUzNDMjQ0M19HUEU5X0FDX25SRVNFVCAoMHgwMyA8PCAxOCkKICNkZWZpbmUgUzNDMjQwMF9HUEU5X25YREFDSzEgICAoMHgwMiA8PCAxOCkKICNkZWZpbmUgUzNDMjQwMF9HUEU5X25YQkFDSyAgICAoMHgwMyA8PCAxOCkKIAogI2RlZmluZSBTM0MyNDEwX0dQRTEwX1NEREFUMyAgICgweDAyIDw8IDIwKQogI2RlZmluZSBTM0MyNDQzX0dQRTEwX1NEMV9EQVQzICgweDAyIDw8IDIwKQotI2RlZmluZSBTM0MyNDQzX0dQRTEwX0FDX25SRVNFVCAoMHgwMyA8PCAyMCkKICNkZWZpbmUgUzNDMjQwMF9HUEUxMF9uWERSRVEwICAoMHgwMiA8PCAyMCkKIAogI2RlZmluZSBTM0MyNDEwX0dQRTExX1NQSU1JU08wICgweDAyIDw8IDIyKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLXMzYzI0NDMtY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvcmVncy1zM2MyNDQzLWNsb2NrLmgKaW5kZXggNjAyNmQwOS4uZDg3ZWJlMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9yZWdzLXMzYzI0NDMtY2xvY2suaAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3MtczNjMjQ0My1jbG9jay5oCkBAIC00MiwyMyArNDIsMTQgQEAKIAogI2RlZmluZSBTM0MyNDQzX1BMTENPTl9PRkYJCSgxPDwyNCkKIAotI2RlZmluZSBTM0MyNDQzX0NMS1NSQ19JMlNfRVhUCQkoMTw8MTQpCi0jZGVmaW5lIFMzQzI0NDNfQ0xLU1JDX0kyU19FUExMRElWCSgwPDwxNCkKLSNkZWZpbmUgUzNDMjQ0M19DTEtTUkNfSTJTX0VQTExSRUYJKDI8PDE0KQotI2RlZmluZSBTM0MyNDQzX0NMS1NSQ19JMlNfRVBMTFJFRjMJKDM8PDE0KQotI2RlZmluZSBTM0MyNDQzX0NMS1NSQ19JMlNfTUFTSwkJKDM8PDE0KQotCiAjZGVmaW5lIFMzQzI0NDNfQ0xLU1JDX0VQTExSRUZfWFRBTAkoMjw8NykKICNkZWZpbmUgUzNDMjQ0M19DTEtTUkNfRVBMTFJFRl9FWFRDTEsJKDM8PDcpCiAjZGVmaW5lIFMzQzI0NDNfQ0xLU1JDX0VQTExSRUZfTVBMTFJFRgkoMDw8NykKICNkZWZpbmUgUzNDMjQ0M19DTEtTUkNfRVBMTFJFRl9NUExMUkVGMgkoMTw8NykKICNkZWZpbmUgUzNDMjQ0M19DTEtTUkNfRVBMTFJFRl9NQVNLCSgzPDw3KQogCi0jZGVmaW5lIFMzQzI0NDNfQ0xLU1JDX0VTWVNDTEtfRVBMTAkoMTw8NikKLSNkZWZpbmUgUzNDMjQ0M19DTEtTUkNfTVNZU0NMS19NUExMCSgxPDw0KQogI2RlZmluZSBTM0MyNDQzX0NMS1NSQ19FWFRDTEtfRElWCSgxPDwzKQogCi0jZGVmaW5lIFMzQzI0NDNfQ0xLRElWMF9EVlMJCSgxPDwxMykKICNkZWZpbmUgUzNDMjQ0M19DTEtESVYwX0hBTEZfSENMSwkoMTw8MykKICNkZWZpbmUgUzNDMjQ0M19DTEtESVYwX0hBTEZfUENMSwkoMTw8MikKIApAQCAtODEsMjggKzcyLDcgQEAKICNkZWZpbmUgUzNDMjQ0M19DTEtESVYwX0FSTURJVl8xMgkoMTM8PDkpCiAjZGVmaW5lIFMzQzI0NDNfQ0xLRElWMF9BUk1ESVZfMTYJKDE1PDw5KQogCi0vKiBTM0MyNDQzX0NMS0RJVjEgKi8KLQotI2RlZmluZSBTM0MyNDQzX0NMS0RJVjFfQ0FNRElWX01BU0sJKDE1PDwyNikKLSNkZWZpbmUgUzNDMjQ0M19DTEtESVYxX0NBTURJVl9TSElGVAkoMjYpCi0KLSNkZWZpbmUgUzNDMjQ0M19DTEtESVYxX0hTU1BJRElWX01BU0sJKDM8PDI0KQotI2RlZmluZSBTM0MyNDQzX0NMS0RJVjFfSFNTUElESVZfU0hJRlQJKDI0KQotCi0jZGVmaW5lIFMzQzI0NDNfQ0xLRElWMV9ESVNQRElWX01BU0sJKDB4ZmY8PDE2KQotI2RlZmluZSBTM0MyNDQzX0NMS0RJVjFfRElTUERJVl9TSElGVAkoMTYpCi0KLSNkZWZpbmUgUzNDMjQ0M19DTEtESVYxX0kyU0RJVl9NQVNLCSgxNTw8MTIpCi0jZGVmaW5lIFMzQzI0NDNfQ0xLRElWMV9JMlNESVZfU0hJRlQJKDEyKQotCi0jZGVmaW5lIFMzQzI0NDNfQ0xLRElWMV9VQVJURElWX01BU0sJKDE1PDw4KQotI2RlZmluZSBTM0MyNDQzX0NMS0RJVjFfVUFSVERJVl9TSElGVAkoOCkKLQotI2RlZmluZSBTM0MyNDQzX0NMS0RJVjFfSFNNTUNESVZfTUFTSwkoMzw8NikKLSNkZWZpbmUgUzNDMjQ0M19DTEtESVYxX0hTTU1DRElWX1NISUZUCSg2KQotCi0jZGVmaW5lIFMzQzI0NDNfQ0xLRElWMV9VU0JIT1NURElWX01BU0sJKDM8PDQpCi0jZGVmaW5lIFMzQzI0NDNfQ0xLRElWMV9VU0JIT1NURElWX1NISUZUICg0KQorLyogUzNDMjQ0M19DTEtESVYxIHJlbW92ZWQsIG9ubHkgdXNlZCBpbiBjbG9jay5jIGNvZGUgKi8KIAogI2RlZmluZSBTM0MyNDQzX0NMS0NPTl9OQU5ECiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvc3BpLWdwaW8uaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvc3BpLWdwaW8uaAppbmRleCA5ODBhMDk5Li5kY2VmMjI4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3NwaS1ncGlvLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9zcGktZ3Bpby5oCkBAIC0zLDcgKzMsNyBAQAogICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKLSAqIFMzQzI0MTAgLSBTUEkgQ29udHJvbGxlciBwbGF0ZnJvbV9kZXZpY2UgaW5mbworICogUzNDMjQxMCAtIFNQSSBDb250cm9sbGVyIHBsYXRmb3JtX2RldmljZSBpbmZvCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3RpbWV4LmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU5Y2ExZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtMCwwICsxLDI0IEBACisvKiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3RpbWV4LmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MyNDEwIC0gdGltZSBwYXJhbWV0ZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9USU1FWF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVElNRVhfSAorCisvKiBDTE9DS19USUNLX1JBVEUgbmVlZHMgdG8gYmUgZXZhbHVhdGFibGUgYnkgdGhlIGNwcCwgc28gbWFraW5nIGl0CisgKiBhIHZhcmlhYmxlIGlzIHVzZWxlc3MuIEl0IHNlZW1zIGFzIGxvbmcgYXMgd2UgbWFrZSBvdXIgdGltZXJzIGFuCisgKiBleGFjdCBtdWx0aXBsZSBvZiBIWiwgYW55IHZhbHVlIHRoYXQgbWFrZXMgYSAxLT4xIGNvcnJlc3BvbmRlbmNlCisgKiBmb3IgdGhlIHRpbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgdG8vZnJvbSBqaWZmaWVzIGlzIGFjY2VwdGFibGUuCisqLworCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURSAxMjAwMDAwMAorCisjZW5kaWYgLyogX19BU01fQVJDSF9USU1FWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxNWIwMDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMCwwICsxLDIwIEBACisvKiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorICoKKyAqIGZyb20gYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMyBTaW10ZWMgRWxlY3Ryb25pY3MgPGxpbnV4QHNpbXRlYy5jby51az4KKyAqCQkgICAgICBodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9TV0xJTlVYLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogUzNDMjQxMCB2bWFsbG9jIGRlZmluaXRpb24KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9WTUFMTE9DX0gKKyNkZWZpbmUgX19BU01fQVJDSF9WTUFMTE9DX0gKKworI2RlZmluZSBWTUFMTE9DX0VORAkgICgweEUwMDAwMDAwKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9WTUFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFtbG01OTAwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbWxtNTkwMC5jCmluZGV4IDA2YTg0YWQuLjcwNDczMTcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFtbG01OTAwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW1sbTU5MDAuYwpAQCAtMTUzLDcgKzE1Myw3IEBACiAJJnMzY19kZXZpY2VfYWRjLAogCSZzM2NfZGV2aWNlX3dkdCwKIAkmczNjX2RldmljZV9pMmMwLAotCSZzM2NfZGV2aWNlX3VzYiwKKwkmczNjX2RldmljZV9vaGNpLAogIAkmczNjX2RldmljZV9ydGMsCiAJJnMzY19kZXZpY2VfdXNiZ2FkZ2V0LAogICAgICAgICAmczNjX2RldmljZV9zZGksCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKaW5kZXggOTcxNjJmZC4uMDJiMWI2MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1iYXN0LmMKQEAgLTU4NCw3ICs1ODQsNyBAQAogLy8gY2F0IC9zeXMvZGV2aWNlcy9wbGF0Zm9ybS9zM2MyNHh4LWFkYy9zM2MtaHdtb24vaW5fMAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYmFzdF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmczNjX2RldmljZV91c2IsCisJJnMzY19kZXZpY2Vfb2hjaSwKIAkmczNjX2RldmljZV9sY2QsCiAJJnMzY19kZXZpY2Vfd2R0LAogCSZzM2NfZGV2aWNlX2kyYzAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtaDE5NDAuYwppbmRleCAxZTM0YWJlLi5mYmVkZDA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1oMTk0MC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWgxOTQwLmMKQEAgLTE5Niw3ICsxOTYsNyBAQAogCS5pZCAgICAgICAgICAgICAgID0gLTEsCiB9OwogCi1zdGF0aWMgc3RydWN0IHMzYzI0eHhfbWNpX3BkYXRhIGgxOTQwX21tY19jZmcgPSB7CitzdGF0aWMgc3RydWN0IHMzYzI0eHhfbWNpX3BkYXRhIGgxOTQwX21tY19jZmcgX19pbml0ZGF0YSA9IHsKIAkuZ3Bpb19kZXRlY3QgICA9IFMzQzI0MTBfR1BGKDUpLAogCS5ncGlvX3dwcm90ZWN0ID0gUzNDMjQxMF9HUEgoOCksCiAJLnNldF9wb3dlciAgICAgPSBOVUxMLApAQCAtMjcyLDcgKzI3Miw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpoMTk0MF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKIAkmczNjX2RldmljZV90cywKLQkmczNjX2RldmljZV91c2IsCisJJnMzY19kZXZpY2Vfb2hjaSwKIAkmczNjX2RldmljZV9sY2QsCiAJJnMzY19kZXZpY2Vfd2R0LAogCSZzM2NfZGV2aWNlX2kyYzAsCkBAIC0zMTEsMTIgKzMxMSwxMSBAQAogCXUzMiB0bXA7CiAKIAlzM2MyNHh4X2ZiX3NldF9wbGF0ZGF0YSgmaDE5NDBfZmJfaW5mbyk7CisJczNjMjR4eF9tY2lfc2V0X3BsYXRkYXRhKCZoMTk0MF9tbWNfY2ZnKTsKICAJczNjMjR4eF91ZGNfc2V0X3BsYXRkYXRhKCZoMTk0MF91ZGNfY2ZnKTsKIAlzM2MyNHh4X3RzX3NldF9wbGF0ZGF0YSgmaDE5NDBfdHNfY2ZnKTsKIAlzM2NfaTJjMF9zZXRfcGxhdGRhdGEoTlVMTCk7CiAKLQlzM2NfZGV2aWNlX3NkaS5kZXYucGxhdGZvcm1fZGF0YSA9ICZoMTk0MF9tbWNfY2ZnOwotCiAJLyogVHVybiBvZmYgc3VzcGVuZCBvbiBib3RoIFVTQiBwb3J0cywgYW5kIHN3aXRjaCB0aGUKIAkgKiBzZWxlY3RhYmxlIFVTQiBwb3J0IHRvIFVTQiBkZXZpY2UgbW9kZS4gKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtbjMwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYwppbmRleCAwNDA1NzEyLi42ODQ3MTBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1uMzAuYwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJJnMzY19kZXZpY2Vfd2R0LAogCSZzM2NfZGV2aWNlX2kyYzAsCiAJJnMzY19kZXZpY2VfaWlzLAotCSZzM2NfZGV2aWNlX3VzYiwKKwkmczNjX2RldmljZV9vaGNpLAogCSZzM2NfZGV2aWNlX3VzYmdhZGdldCwKIAkmbjMwX2J1dHRvbl9kZXZpY2UsCiAJJm4zMF9ibHVlX2xlZCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW90b20uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLW90b20uYwppbmRleCBmNmM3MjYxLi5kOGM3ZjJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1vdG9tLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtb3RvbS5jCkBAIC05Miw3ICs5Miw3IEBACiAvKiBTdGFuZGFyZCBPVE9NIGRldmljZXMgKi8KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm90b20xMV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmczNjX2RldmljZV91c2IsCisJJnMzY19kZXZpY2Vfb2hjaSwKIAkmczNjX2RldmljZV9sY2QsCiAJJnMzY19kZXZpY2Vfd2R0LAogCSZzM2NfZGV2aWNlX2kyYzAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1xdDI0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXF0MjQxMC5jCmluZGV4IGFiMDkyYmMuLjkyYTRlYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXF0MjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXF0MjQxMC5jCkBAIC0yNDYsNyArMjQ2LDcgQEAKIC8qIEJvYXJkIGRldmljZXMgKi8KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnF0MjQxMF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmczNjX2RldmljZV91c2IsCisJJnMzY19kZXZpY2Vfb2hjaSwKIAkmczNjX2RldmljZV9sY2QsCiAJJnMzY19kZXZpY2Vfd2R0LAogCSZzM2NfZGV2aWNlX2kyYzAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0MTAuYwppbmRleCBjNDkxMjZjLi40NTIyMjMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQxMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDEwLmMKQEAgLTg3LDcgKzg3LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzbWRrMjQxMF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmczNjX2RldmljZV91c2IsCisJJnMzY19kZXZpY2Vfb2hjaSwKIAkmczNjX2RldmljZV9sY2QsCiAJJnMzY19kZXZpY2Vfd2R0LAogCSZzM2NfZGV2aWNlX2kyYzAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC10Y3RfaGFtbWVyLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC10Y3RfaGFtbWVyLmMKaW5kZXggOGZkYjA0My4uOTI5MTY0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdGN0X2hhbW1lci5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXRjdF9oYW1tZXIuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJJnMzY19kZXZpY2VfYWRjLAogCSZzM2NfZGV2aWNlX3dkdCwKIAkmczNjX2RldmljZV9pMmMwLAotCSZzM2NfZGV2aWNlX3VzYiwKKwkmczNjX2RldmljZV9vaGNpLAogCSZzM2NfZGV2aWNlX3J0YywKIAkmczNjX2RldmljZV91c2JnYWRnZXQsCiAJJnMzY19kZXZpY2Vfc2RpLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnIxMDAwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12cjEwMDAuYwppbmRleCAwZDYxZmI1Li45MDUxZjBkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12cjEwMDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC12cjEwMDAuYwpAQCAtMzM0LDcgKzMzNCw3IEBACiAvKiBkZXZpY2VzIGZvciB0aGlzIGJvYXJkICovCiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICp2cjEwMDBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnMzY19kZXZpY2VfdXNiLAorCSZzM2NfZGV2aWNlX29oY2ksCiAJJnMzY19kZXZpY2VfbGNkLAogCSZzM2NfZGV2aWNlX3dkdCwKIAkmczNjX2RldmljZV9pMmMwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMKaW5kZXggNmI5ZDBkOC4uMjliZDNkOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jCkBAIC05MSw3ICs5MSw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfaGNkX2luZm8gdXNiX3NpbXRlY19pbmZvID0geworc3RhdGljIHN0cnVjdCBzM2MyNDEwX2hjZF9pbmZvIHVzYl9zaW10ZWNfaW5mbyBfX2luaXRkYXRhID0gewogCS5wb3J0WzBdCT0gewogCQkuZmxhZ3MJPSBTM0NfSENERkxHX1VTRUQKIAl9LApAQCAtMTI3LDYgKzEyNyw2IEBACiAJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzI0MTBfR1BCKDQpLCAxKTsKIAlncGlvX2RpcmVjdGlvbl9pbnB1dChTM0MyNDEwX0dQRygxMCkpOwogCi0JczNjX2RldmljZV91c2IuZGV2LnBsYXRmb3JtX2RhdGEgPSAmdXNiX3NpbXRlY19pbmZvOworCXMzY19vaGNpX3NldF9wbGF0ZGF0YSgmdXNiX3NpbXRlY19pbmZvKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2Nsb2NrLmMKaW5kZXggYTAzN2RmNS4uMGMwNTA1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2Nsb2NrLmMKQEAgLTEyNCw3ICsxMjQsOSBAQAogCS5uYW1lCQk9ICJ1c3lzY2xrIiwKIAkuaWQJCT0gLTEsCiAJLnBhcmVudAkJPSAmY2xrX3h0YWwsCi0JLnNldF9wYXJlbnQJPSBzM2MyNDEyX3NldHBhcmVudF91c3lzY2xrLAorCS5vcHMJCT0gJihzdHJ1Y3QgY2xrX29wcykgeworCQkuc2V0X3BhcmVudAk9IHMzYzI0MTJfc2V0cGFyZW50X3VzeXNjbGssCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tcmVmY2xrID0gewpAQCAtMTk5LDEwICsyMDEsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa191c2JzcmMgPSB7CiAJLm5hbWUJCT0gInVzYnNyYyIsCiAJLmlkCQk9IC0xLAotCS5nZXRfcmF0ZQk9IHMzYzI0MTJfZ2V0cmF0ZV91c2JzcmMsCi0JLnNldF9yYXRlCT0gczNjMjQxMl9zZXRyYXRlX3VzYnNyYywKLQkucm91bmRfcmF0ZQk9IHMzYzI0MTJfcm91bmRyYXRlX3VzYnNyYywKLQkuc2V0X3BhcmVudAk9IHMzYzI0MTJfc2V0cGFyZW50X3VzYnNyYywKKwkub3BzCQk9ICYoc3RydWN0IGNsa19vcHMpIHsKKwkJLmdldF9yYXRlCT0gczNjMjQxMl9nZXRyYXRlX3VzYnNyYywKKwkJLnNldF9yYXRlCT0gczNjMjQxMl9zZXRyYXRlX3VzYnNyYywKKwkJLnJvdW5kX3JhdGUJPSBzM2MyNDEyX3JvdW5kcmF0ZV91c2JzcmMsCisJCS5zZXRfcGFyZW50CT0gczNjMjQxMl9zZXRwYXJlbnRfdXNic3JjLAorCX0sCiB9OwogCiBzdGF0aWMgaW50IHMzYzI0MTJfc2V0cGFyZW50X21zeXNjbGsoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCkBAIC0yMjUsNyArMjI5LDkgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19tc3lzY2xrID0gewogCS5uYW1lCQk9ICJtc3lzY2xrIiwKIAkuaWQJCT0gLTEsCi0JLnNldF9wYXJlbnQJPSBzM2MyNDEyX3NldHBhcmVudF9tc3lzY2xrLAorCS5vcHMJCT0gJihzdHJ1Y3QgY2xrX29wcykgeworCQkuc2V0X3BhcmVudAk9IHMzYzI0MTJfc2V0cGFyZW50X21zeXNjbGssCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgczNjMjQxMl9zZXRwYXJlbnRfYXJtY2xrKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQpAQCAtMjY0LDcgKzI3MCw5IEBACiAJLm5hbWUJCT0gImFybWNsayIsCiAJLmlkCQk9IC0xLAogCS5wYXJlbnQJCT0gJmNsa19tc3lzY2xrLAotCS5zZXRfcGFyZW50CT0gczNjMjQxMl9zZXRwYXJlbnRfYXJtY2xrLAorCS5vcHMJCT0gJihzdHJ1Y3QgY2xrX29wcykgeworCQkuc2V0X3BhcmVudAk9IHMzYzI0MTJfc2V0cGFyZW50X2FybWNsaywKKwl9LAogfTsKIAogLyogdGhlc2UgbmV4dCBjbG9ja3MgaGF2ZSBhbiBkaXZpZGVyIGltbWVkaWF0ZWx5IGFmdGVyIHRoZW0sCkBAIC0zMzcsMTAgKzM0NSwxMiBAQAogc3RhdGljIHN0cnVjdCBjbGsgY2xrX3VhcnQgPSB7CiAJLm5hbWUJCT0gInVhcnRjbGsiLAogCS5pZAkJPSAtMSwKLQkuZ2V0X3JhdGUJPSBzM2MyNDEyX2dldHJhdGVfdWFydCwKLQkuc2V0X3JhdGUJPSBzM2MyNDEyX3NldHJhdGVfdWFydCwKLQkuc2V0X3BhcmVudAk9IHMzYzI0MTJfc2V0cGFyZW50X3VhcnQsCi0JLnJvdW5kX3JhdGUJPSBzM2MyNDEyX3JvdW5kcmF0ZV9jbGtzcmMsCisJLm9wcwkJPSAmKHN0cnVjdCBjbGtfb3BzKSB7CisJCS5nZXRfcmF0ZQk9IHMzYzI0MTJfZ2V0cmF0ZV91YXJ0LAorCQkuc2V0X3JhdGUJPSBzM2MyNDEyX3NldHJhdGVfdWFydCwKKwkJLnNldF9wYXJlbnQJPSBzM2MyNDEyX3NldHBhcmVudF91YXJ0LAorCQkucm91bmRfcmF0ZQk9IHMzYzI0MTJfcm91bmRyYXRlX2Nsa3NyYywKKwl9LAogfTsKIAogc3RhdGljIGludCBzM2MyNDEyX3NldHBhcmVudF9pMnMoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCkBAIC0zODgsMTAgKzM5OCwxMiBAQAogc3RhdGljIHN0cnVjdCBjbGsgY2xrX2kycyA9IHsKIAkubmFtZQkJPSAiaTJzY2xrIiwKIAkuaWQJCT0gLTEsCi0JLmdldF9yYXRlCT0gczNjMjQxMl9nZXRyYXRlX2kycywKLQkuc2V0X3JhdGUJPSBzM2MyNDEyX3NldHJhdGVfaTJzLAotCS5zZXRfcGFyZW50CT0gczNjMjQxMl9zZXRwYXJlbnRfaTJzLAotCS5yb3VuZF9yYXRlCT0gczNjMjQxMl9yb3VuZHJhdGVfY2xrc3JjLAorCS5vcHMJCT0gJihzdHJ1Y3QgY2xrX29wcykgeworCQkuZ2V0X3JhdGUJPSBzM2MyNDEyX2dldHJhdGVfaTJzLAorCQkuc2V0X3JhdGUJPSBzM2MyNDEyX3NldHJhdGVfaTJzLAorCQkuc2V0X3BhcmVudAk9IHMzYzI0MTJfc2V0cGFyZW50X2kycywKKwkJLnJvdW5kX3JhdGUJPSBzM2MyNDEyX3JvdW5kcmF0ZV9jbGtzcmMsCisJfSwKIH07CiAKIHN0YXRpYyBpbnQgczNjMjQxMl9zZXRwYXJlbnRfY2FtKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQpAQCAtNDM4LDEwICs0NTAsMTIgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19jYW0gPSB7CiAJLm5hbWUJCT0gImNhbWlmLXVwbGwiLAkvKiBzYW1lIGFzIDI0NDAgbmFtZSAqLwogCS5pZAkJPSAtMSwKLQkuZ2V0X3JhdGUJPSBzM2MyNDEyX2dldHJhdGVfY2FtLAotCS5zZXRfcmF0ZQk9IHMzYzI0MTJfc2V0cmF0ZV9jYW0sCi0JLnNldF9wYXJlbnQJPSBzM2MyNDEyX3NldHBhcmVudF9jYW0sCi0JLnJvdW5kX3JhdGUJPSBzM2MyNDEyX3JvdW5kcmF0ZV9jbGtzcmMsCisJLm9wcwkJPSAmKHN0cnVjdCBjbGtfb3BzKSB7CisJCS5nZXRfcmF0ZQk9IHMzYzI0MTJfZ2V0cmF0ZV9jYW0sCisJCS5zZXRfcmF0ZQk9IHMzYzI0MTJfc2V0cmF0ZV9jYW0sCisJCS5zZXRfcGFyZW50CT0gczNjMjQxMl9zZXRwYXJlbnRfY2FtLAorCQkucm91bmRfcmF0ZQk9IHMzYzI0MTJfcm91bmRyYXRlX2Nsa3NyYywKKwl9LAogfTsKIAogLyogc3RhbmRhcmQgY2xvY2sgZGVmaW5pdGlvbnMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9kbWEuYwppbmRleCBmOGQxNmZjLi5lODgwNTI0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTIvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL2RtYS5jCkBAIC0yMCw3ICsyMCw3IEBACiAKICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCi0jaW5jbHVkZSA8cGxhdC9kbWEtcGxhdC5oPgorI2luY2x1ZGUgPHBsYXQvZG1hLXMzYzI0eHguaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtaml2ZS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtaml2ZS5jCmluZGV4IGM5ZmEzZmMuLjE0ZjQ3OTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLWppdmUuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC1qaXZlLmMKQEAgLTQ2OCw3ICs0NjgsNyBAQAogLyogVGhlIHBsYXRmb3JtIGRldmljZXMgYmVpbmcgdXNlZC4gKi8KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmppdmVfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnMzY19kZXZpY2VfdXNiLAorCSZzM2NfZGV2aWNlX29oY2ksCiAJJnMzY19kZXZpY2VfcnRjLAogCSZzM2NfZGV2aWNlX3dkdCwKIAkmczNjX2RldmljZV9pMmMwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtc21kazI0MTMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXNtZGsyNDEzLmMKaW5kZXggOWE1ZTQzNDEuLjAzOTIwNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXNtZGsyNDEzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtc21kazI0MTMuYwpAQCAtMTA0LDggKzEwNCw3IEBACiAKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNtZGsyNDEzX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZzM2NfZGV2aWNlX3VzYiwKLQkvLyZzM2NfZGV2aWNlX2xjZCwKKwkmczNjX2RldmljZV9vaGNpLAogCSZzM2NfZGV2aWNlX3dkdCwKIAkmczNjX2RldmljZV9pMmMwLAogCSZzM2NfZGV2aWNlX2lpcywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXZzdG1zLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTIvbWFjaC12c3Rtcy5jCmluZGV4IGE2YmE1OTEuLjNjYTkyNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMi9tYWNoLXZzdG1zLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEyL21hY2gtdnN0bXMuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqdnN0bXNfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnMzY19kZXZpY2VfdXNiLAorCSZzM2NfZGV2aWNlX29oY2ksCiAJJnMzY19kZXZpY2Vfd2R0LAogCSZzM2NfZGV2aWNlX2kyYzAsCiAJJnMzY19kZXZpY2VfaWlzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvS2NvbmZpZwppbmRleCA4MDg3OTM1Li43ZjQ2NTI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvS2NvbmZpZwpAQCAtMTUsMTQgKzE1LDY3IEBACiAJaGVscAogCSAgU3VwcG9ydCBmb3IgUzNDMjQ0MCBTYW1zdW5nIE1vYmlsZSBDUFUgYmFzZWQgc3lzdGVtcy4KIAorY29uZmlnIENQVV9TM0MyNDQyCisJYm9vbAorCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCisJc2VsZWN0IENQVV9BUk05MjBUCisJc2VsZWN0IFMzQzI0MTBfQ0xPQ0sKKwlzZWxlY3QgUzNDMjQxMF9HUElPCisJc2VsZWN0IFMzQzI0MTBfUE0gaWYgUE0KKwlzZWxlY3QgQ1BVX1MzQzI0NFgKKwlzZWxlY3QgQ1BVX0xMU0VSSUFMX1MzQzI0NDAKKwloZWxwCisJICBTdXBwb3J0IGZvciBTM0MyNDQyIFNhbXN1bmcgTW9iaWxlIENQVSBiYXNlZCBzeXN0ZW1zLgorCitjb25maWcgQ1BVX1MzQzI0NFgKKwlib29sCisJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgJiYgKENQVV9TM0MyNDQwIHx8IENQVV9TM0MyNDQyKQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIFMzQzI0NDAgYW5kIFMzQzI0NDIgU2Ftc3VuZyBNb2JpbGUgQ1BVIGJhc2VkIHN5c3RlbXMuCisKKworCitjb25maWcgUzNDMjQ0MF9DUFVGUkVRCisJYm9vbCAiUzNDMjQ0MC9TM0MyNDQyIENQVSBGcmVxdWVuY3kgc2NhbGluZyBzdXBwb3J0IgorCWRlcGVuZHMgb24gQ1BVX0ZSRVFfUzNDMjRYWCAmJiAoQ1BVX1MzQzI0NDAgfHwgQ1BVX1MzQzI0NDIpCisJc2VsZWN0IFMzQzI0MTBfQ1BVRlJFUV9VVElMUworCWRlZmF1bHQgeQorCWhlbHAKKwkgIENQVSBGcmVxdWVuY3kgc2NhbGluZyBzdXBwb3J0IGZvciBTM0MyNDQwIGFuZCBTM0MyNDQyIFNvQyBDUFVzLgorCitjb25maWcgUzNDMjQ0MF9YVEFMXzEyMDAwMDAwCisJYm9vbAorCWhlbHAKKwkgIEluZGljYXRlIHRoYXQgdGhlIGJ1aWxkIG5lZWRzIHRvIHN1cHBvcnQgMTJNSHogc3lzdGVtCisJICBjcnlzdGFsLgorCitjb25maWcgUzNDMjQ0MF9YVEFMXzE2OTM0NDAwCisJYm9vbAorCWhlbHAKKwkgIEluZGljYXRlIHRoYXQgdGhlIGJ1aWxkIG5lZWRzIHRvIHN1cHBvcnQgMTYuOTM0NE1IeiBzeXN0ZW0KKwkgIGNyeXN0YWwuCisKK2NvbmZpZyBTM0MyNDQwX1BMTF8xMjAwMDAwMAorCWJvb2wKKwlkZXBlbmRzIG9uIFMzQzI0NDBfQ1BVRlJFUSAmJiBTM0MyNDQwX1hUQUxfMTIwMDAwMDAKKwlkZWZhdWx0IHkgaWYgQ1BVX0ZSRVFfUzNDMjRYWF9QTEwKKwloZWxwCisJICBQTEwgdGFibGVzIGZvciBTM0MyNDQwIG9yIFMzQzI0NDIgQ1BVcyB3aXRoIDEyTUh6IGNyeXN0YWxzLgorCitjb25maWcgUzNDMjQ0MF9QTExfMTY5MzQ0MDAKKwlib29sCisJZGVwZW5kcyBvbiBTM0MyNDQwX0NQVUZSRVEgJiYgUzNDMjQ0MF9YVEFMXzE2OTM0NDAwCisJZGVmYXVsdCB5IGlmIENQVV9GUkVRX1MzQzI0WFhfUExMCisJaGVscAorCSAgUExMIHRhYmxlcyBmb3IgUzNDMjQ0MCBvciBTM0MyNDQyIENQVXMgd2l0aCAxNi45MzRNSHogY3J5c3RhbHMuCisKIGNvbmZpZyBTM0MyNDQwX0RNQQogCWJvb2wKIAlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMCAmJiBDUFVfUzNDMjQ0MDVCCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgUzNDMjQ0MCBzcGVjaWZpYyBETUEgY29kZTVBCiAKLQotbWVudSAiUzNDMjQ0MCBNYWNoaW5lcyIKK21lbnUgIlMzQzI0NDAgYW5kIFMzQzI0NDIgTWFjaGluZXMiCiAKIGNvbmZpZyBNQUNIX0FOVUJJUwogCWJvb2wgIlNpbXRlYyBFbGVjdHJvbmljcyBBTlVCSVMiCkBAIC0zNyw2ICs5MCwxOCBAQAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBTaW10ZWMgRWxlY3Ryb25pY3MgQU5VQklTCiAJICBkZXZlbG9wbWVudCBzeXN0ZW0KIAorY29uZmlnIE1BQ0hfTkVPMTk3M19HVEEwMgorCWJvb2wgIk9wZW5tb2tvIEdUQTAyIC8gRnJlZXJ1bm5lciBwaG9uZSIKKwlzZWxlY3QgQ1BVX1MzQzI0NDIKKwlzZWxlY3QgTUZEX1BDRjUwNjMzCisJc2VsZWN0IFBDRjUwNjMzX0dQSU8KKwlzZWxlY3QgSTJDCisJc2VsZWN0IFBPV0VSX1NVUFBMWQorCXNlbGVjdCBNQUNIX05FTzE5NzMKKwlzZWxlY3QgUzNDMjQxMF9QV00KKwloZWxwCisJICAgU2F5IFkgaGVyZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBPcGVubW9rbyBHVEEwMiAvIEZyZWVydW5uZXIgR1NNIFBob25lCisKIGNvbmZpZyBNQUNIX09TSVJJUwogCWJvb2wgIlNpbXRlYyBJTTI0NDBEMjAgKE9TSVJJUykgbW9kdWxlIgogCXNlbGVjdCBDUFVfUzNDMjQ0MApAQCAtOTQsMTEgKzE1OSwxNCBAQAogCiBjb25maWcgU01ESzI0NDBfQ1BVMjQ0MAogCWJvb2wgIlNNREsyNDQwIHdpdGggUzNDMjQ0MCBDUFUgbW9kdWxlIgotCWRlcGVuZHMgb24gQVJDSF9TM0MyNDQwCiAJZGVmYXVsdCB5IGlmIEFSQ0hfUzNDMjQ0MAogCXNlbGVjdCBTM0MyNDQwX1hUQUxfMTY5MzQ0MDAKIAlzZWxlY3QgQ1BVX1MzQzI0NDAKIAorY29uZmlnIFNNREsyNDQwX0NQVTI0NDIKKwlib29sICJTTURNMjQ0MCB3aXRoIFMzQzI0NDIgQ1BVIG1vZHVsZSIKKwlzZWxlY3QgQ1BVX1MzQzI0NDIKKwogY29uZmlnIE1BQ0hfQVQyNDQwRVZCCiAJYm9vbCAiQXZhbnRlY2ggQVQyNDQwRVZCIGRldmVsb3BtZW50IGJvYXJkIgogCXNlbGVjdCBDUFVfUzNDMjQ0MApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL01ha2VmaWxlCmluZGV4IDVmMzIyNDUuLmM4NWJhMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvTWFrZWZpbGUKQEAgLTEwLDEwICsxMCwyMCBAQAogb2JqLQkJCQk6PQogCiBvYmotJChDT05GSUdfQ1BVX1MzQzI0NDApCSs9IHMzYzI0NDAubyBkc2Mubworb2JqLSQoQ09ORklHX0NQVV9TM0MyNDQyKQkrPSBzM2MyNDQyLm8KKwogb2JqLSQoQ09ORklHX0NQVV9TM0MyNDQwKQkrPSBpcnEubwogb2JqLSQoQ09ORklHX0NQVV9TM0MyNDQwKQkrPSBjbG9jay5vCiBvYmotJChDT05GSUdfUzNDMjQ0MF9ETUEpCSs9IGRtYS5vCiAKK29iai0kKENPTkZJR19DUFVfUzNDMjQ0WCkJKz0gczNjMjQ0eC5vCitvYmotJChDT05GSUdfQ1BVX1MzQzI0NFgpCSs9IHMzYzI0NHgtaXJxLm8KK29iai0kKENPTkZJR19DUFVfUzNDMjQ0WCkJKz0gczNjMjQ0eC1jbG9jay5vCitvYmotJChDT05GSUdfUzNDMjQ0MF9DUFVGUkVRKQkrPSBzM2MyNDQwLWNwdWZyZXEubworCitvYmotJChDT05GSUdfUzNDMjQ0MF9QTExfMTIwMDAwMDApICs9IHMzYzI0NDAtcGxsLTEyMDAwMDAwLm8KK29iai0kKENPTkZJR19TM0MyNDQwX1BMTF8xNjkzNDQwMCkgKz0gczNjMjQ0MC1wbGwtMTY5MzQ0MDAubworCiAjIE1hY2hpbmUgc3VwcG9ydAogCiBvYmotJChDT05GSUdfTUFDSF9BTlVCSVMpCSs9IG1hY2gtYW51YmlzLm8KQEAgLTIzLDYgKzMzLDcgQEAKIG9iai0kKENPTkZJR19NQUNIX05FWENPREVSXzI0NDApICs9IG1hY2gtbmV4Y29kZXIubwogb2JqLSQoQ09ORklHX01BQ0hfQVQyNDQwRVZCKSArPSBtYWNoLWF0MjQ0MGV2Yi5vCiBvYmotJChDT05GSUdfTUFDSF9NSU5JMjQ0MCkgKz0gbWFjaC1taW5pMjQ0MC5vCitvYmotJChDT05GSUdfTUFDSF9ORU8xOTczX0dUQTAyKSArPSBtYWNoLWd0YTAyLm8KIAogIyBleHRyYSBtYWNoaW5lIHN1cHBvcnQKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvY2xvY2suYwppbmRleCBkMWMyOWIyLi4zZGMyNDI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvY2xvY2suYwpAQCAtOTgsOCArOTgsMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIHMzYzI0NDBfY2xrX2NhbV91cGxsID0gewogCS5uYW1lCQk9ICJjYW1pZi11cGxsIiwKIAkuaWQJCT0gLTEsCi0JLnNldF9yYXRlCT0gczNjMjQ0MF9jYW1pZl91cGxsX3NldHJhdGUsCi0JLnJvdW5kX3JhdGUJPSBzM2MyNDQwX2NhbWlmX3VwbGxfcm91bmQsCisJLm9wcwkJPSAmKHN0cnVjdCBjbGtfb3BzKSB7CisJCS5zZXRfcmF0ZQk9IHMzYzI0NDBfY2FtaWZfdXBsbF9zZXRyYXRlLAorCQkucm91bmRfcmF0ZQk9IHMzYzI0NDBfY2FtaWZfdXBsbF9yb3VuZCwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgczNjMjQ0MF9jbGtfYWM5NyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kbWEuYwppbmRleCBlMDhlMDgxLi4zYjA1MjlmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RtYS5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSA8bWFjaC9tYXAuaD4KICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCi0jaW5jbHVkZSA8cGxhdC9kbWEtcGxhdC5oPgorI2luY2x1ZGUgPHBsYXQvZG1hLXMzYzI0eHguaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RzYy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL2RzYy5jCmluZGV4IDU1NDA0NDIuLjllYTY2ZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9kc2MuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvZHNjLmMKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxtYWNoL3JlZ3MtZHNjLmg+CiAKICNpbmNsdWRlIDxwbGF0L2NwdS5oPgotI2luY2x1ZGUgPHBsYXQvczNjMjQ0MC5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQ0eC5oPgogCiBpbnQgczNjMjQ0MF9zZXRfZHNjKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9pbmNsdWRlL21hY2gvZ3RhMDIuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9pbmNsdWRlL21hY2gvZ3RhMDIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2MyNDQyL2luY2x1ZGUvbWFjaC9ndGEwMi5oCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzI0NDAvaW5jbHVkZS9tYWNoL2d0YTAyLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWFudWJpcy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtYW51YmlzLmMKaW5kZXggNjJhNGMzZS4uYjczZjc4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtYW51YmlzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtYW51YmlzLmMKQEAgLTQwOSw3ICs0MDksNyBAQAogLyogU3RhbmRhcmQgQW51YmlzIGRldmljZXMgKi8KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmFudWJpc19kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmczNjX2RldmljZV91c2IsCisJJnMzY19kZXZpY2Vfb2hjaSwKIAkmczNjX2RldmljZV93ZHQsCiAJJnMzY19kZXZpY2VfYWRjLAogCSZzM2NfZGV2aWNlX2kyYzAsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1hdDI0NDBldmIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWF0MjQ0MGV2Yi5jCmluZGV4IGFhNjkyOTAuLjg0NzI1NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWF0MjQ0MGV2Yi5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLWF0MjQ0MGV2Yi5jCkBAIC0xNjUsNyArMTY1LDcgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBzM2MyNHh4X21jaV9wZGF0YSBhdDI0NDBldmJfbWNpX3BkYXRhID0geworc3RhdGljIHN0cnVjdCBzM2MyNHh4X21jaV9wZGF0YSBhdDI0NDBldmJfbWNpX3BkYXRhIF9faW5pdGRhdGEgPSB7CiAJLmdwaW9fZGV0ZWN0CT0gUzNDMjQxMF9HUEcoMTApLAogfTsKIApAQCAtMjAzLDcgKzIwMyw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXQyNDQwZXZiX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZzM2NfZGV2aWNlX3VzYiwKKwkmczNjX2RldmljZV9vaGNpLAogCSZzM2NfZGV2aWNlX3dkdCwKIAkmczNjX2RldmljZV9hZGMsCiAJJnMzY19kZXZpY2VfaTJjMCwKQEAgLTIxNiw4ICsyMTYsNiBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgYXQyNDQwZXZiX21hcF9pbyh2b2lkKQogewotCXMzY19kZXZpY2Vfc2RpLmRldi5wbGF0Zm9ybV9kYXRhID0gJmF0MjQ0MGV2Yl9tY2lfcGRhdGE7Ci0KIAlzM2MyNHh4X2luaXRfaW8oYXQyNDQwZXZiX2lvZGVzYywgQVJSQVlfU0laRShhdDI0NDBldmJfaW9kZXNjKSk7CiAJczNjMjR4eF9pbml0X2Nsb2NrcygxNjkzNDQwMCk7CiAJczNjMjR4eF9pbml0X3VhcnRzKGF0MjQ0MGV2Yl91YXJ0Y2ZncywgQVJSQVlfU0laRShhdDI0NDBldmJfdWFydGNmZ3MpKTsKQEAgLTIyNiw2ICsyMjQsNyBAQAogc3RhdGljIHZvaWQgX19pbml0IGF0MjQ0MGV2Yl9pbml0KHZvaWQpCiB7CiAJczNjMjR4eF9mYl9zZXRfcGxhdGRhdGEoJmF0MjQ0MGV2Yl9mYl9pbmZvKTsKKwlzM2MyNHh4X21jaV9zZXRfcGxhdGRhdGEoJmF0MjQ0MGV2Yl9tY2lfcGRhdGEpOwogCXMzY19uYW5kX3NldF9wbGF0ZGF0YSgmYXQyNDQwZXZiX25hbmRfaW5mbyk7CiAJczNjX2kyYzBfc2V0X3BsYXRkYXRhKE5VTEwpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1ndGEwMi5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtZ3RhMDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTc5OWM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtZ3RhMDIuYwpAQCAtMCwwICsxLDY0NyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9tYWNoLWd0YTAyLmMKKyAqCisgKiBTM0MyNDQyIE1hY2hpbmUgU3VwcG9ydCBmb3IgT3Blbm1va28gR1RBMDIgLyBGcmVlUnVubmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNi0yMDA5IGJ5IE9wZW5tb2tvLCBJbmMuCisgKiBBdXRob3JzOiBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAb3Blbm1va28ub3JnPgorICogICAgICAgICAgQW5keSBHcmVlbiA8YW5keUBvcGVubW9rby5vcmc+CisgKiAgICAgICAgICBXZXJuZXIgQWxtZXNiZXJnZXIgPHdlcm5lckBvcGVubW9rby5vcmc+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgorCisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9uYW5kLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmRfZWNjLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgorCisjaW5jbHVkZSA8bGludXgvbWZkL3BjZjUwNjMzL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvcGNmNTA2MzMvbWJjLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3BjZjUwNjMzL2FkYy5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9wY2Y1MDYzMy9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3BjZjUwNjMzL3BtaWMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8bWFjaC9yZWdzLWlycS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW9qLmg+CisjaW5jbHVkZSA8bWFjaC9mYi5oPgorCisjaW5jbHVkZSA8bWFjaC9zcGkuaD4KKyNpbmNsdWRlIDxtYWNoL3NwaS1ncGlvLmg+CisjaW5jbHVkZSA8cGxhdC91c2ItY29udHJvbC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1tZW0uaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKKyNpbmNsdWRlIDxtYWNoL2d0YTAyLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9uYW5kLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3BtLmg+CisjaW5jbHVkZSA8cGxhdC91ZGMuaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CisjaW5jbHVkZSA8cGxhdC9paWMuaD4KKworc3RhdGljIHN0cnVjdCBwY2Y1MDYzMyAqZ3RhMDJfcGNmOworCisvKgorICogVGhpcyBnZXRzIGNhbGxlZCBldmVyeSAxbXMgd2hlbiB3ZSBwYW5pY2VkLgorICovCisKK3N0YXRpYyBsb25nIGd0YTAyX3BhbmljX2JsaW5rKGxvbmcgY291bnQpCit7CisJbG9uZyBkZWxheSA9IDA7CisJc3RhdGljIGxvbmcgbGFzdF9ibGluazsKKwlzdGF0aWMgY2hhciBsZWQ7CisKKwkvKiBGYXN0IGJsaW5rOiAyMDBtcyBwZXJpb2QuICovCisJaWYgKGNvdW50IC0gbGFzdF9ibGluayA8IDEwMCkKKwkJcmV0dXJuIDA7CisKKwlsZWQgXj0gMTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1RBMDJfR1BJT19BVVhfTEVELCBsZWQpOworCisJbGFzdF9ibGluayA9IGNvdW50OworCisJcmV0dXJuIGRlbGF5OworfQorCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgZ3RhMDJfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCS52aXJ0dWFsCT0gMHhlMDAwMDAwMCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQzI0MTBfQ1MzICsgMHgwMTAwMDAwMCksCisJCS5sZW5ndGgJCT0gU1pfMU0sCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCit9OworCisjZGVmaW5lIFVDT04gKFMzQzI0MTBfVUNPTl9ERUZBVUxUIHwgUzNDMjQ0M19VQ09OX1JYRVJSX0lSUUVOKQorI2RlZmluZSBVTENPTiAoUzNDMjQxMF9MQ09OX0NTOCB8IFMzQzI0MTBfTENPTl9QTk9ORSB8IFMzQzI0MTBfTENPTl9TVE9QQikKKyNkZWZpbmUgVUZDT04gKFMzQzI0MTBfVUZDT05fUlhUUklHOCB8IFMzQzI0MTBfVUZDT05fRklGT01PREUpCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIGd0YTAyX3VhcnRjZmdzW10gPSB7CisJWzBdID0geworCQkuaHdwb3J0CQk9IDAsCisJCS5mbGFncwkJPSAwLAorCQkudWNvbgkJPSBVQ09OLAorCQkudWxjb24JCT0gVUxDT04sCisJCS51ZmNvbgkJPSBVRkNPTiwKKwl9LAorCVsxXSA9IHsKKwkJLmh3cG9ydAkJPSAxLAorCQkuZmxhZ3MJCT0gMCwKKwkJLnVjb24JCT0gVUNPTiwKKwkJLnVsY29uCQk9IFVMQ09OLAorCQkudWZjb24JCT0gVUZDT04sCisJfSwKKwlbMl0gPSB7CisJCS5od3BvcnQJCT0gMiwKKwkJLmZsYWdzCQk9IDAsCisJCS51Y29uCQk9IFVDT04sCisJCS51bGNvbgkJPSBVTENPTiwKKwkJLnVmY29uCQk9IFVGQ09OLAorCX0sCit9OworCisjaWZkZWYgQ09ORklHX0NIQVJHRVJfUENGNTA2MzMKKy8qCisgKiBPbiBHVEEwMiB0aGUgMUEgY2hhcmdlciBmZWF0dXJlcyBhIDQ4SyByZXNpc3RvciB0byAwViBvbiB0aGUgSUQgcGluLgorICogV2UgdXNlIHRoaXMgdG8gcmVjb2duaXplIHRoYXQgd2UgY2FuIHB1bGwgMUEgZnJvbSB0aGUgVVNCIHNvY2tldC4KKyAqCisgKiBUaGVzZSBjb25zdGFudHMgYXJlIHRoZSBtZWFzdXJlZCBwY2Y1MDYzMyBBREMgbGV2ZWxzIHdpdGggdGhlIDFBCisgKiBjaGFyZ2VyIC8gNDhLIHJlc2lzdG9yLCBhbmQgd2l0aCBubyBwdWxsZG93biByZXNpc3Rvci4KKyAqLworCisjZGVmaW5lIEFEQ19OT01fQ0hHX0RFVEVDVF8xQSA2CisjZGVmaW5lIEFEQ19OT01fQ0hHX0RFVEVDVF9VU0IgNDMKKworc3RhdGljIHZvaWQKK2d0YTAyX2NvbmZpZ3VyZV9wbXVfZm9yX2NoYXJnZXIoc3RydWN0IHBjZjUwNjMzICpwY2YsIHZvaWQgKnVudXNlZCwgaW50IHJlcykKK3sKKwlpbnQgIG1hOworCisJLyogSW50ZXJwcmV0IGNoYXJnZXIgdHlwZSAqLworCWlmIChyZXMgPCAoKEFEQ19OT01fQ0hHX0RFVEVDVF9VU0IgKyBBRENfTk9NX0NIR19ERVRFQ1RfMUEpIC8gMikpIHsKKworCQkvKgorCQkgKiBTYW5pdHkgLSBzdG9wIEdQTyBkcml2aW5nIG91dCBub3cgdGhhdCB3ZSBoYXZlIGEgMUEgY2hhcmdlcgorCQkgKiBHUE8gY29udHJvbHMgVVNCIEhvc3QgcG93ZXIgZ2VuZXJhdGlvbiBvbiBHVEEwMgorCQkgKi8KKwkJcGNmNTA2MzNfZ3Bpb19zZXQocGNmLCBQQ0Y1MDYzM19HUE8sIDApOworCisJCW1hID0gMTAwMDsKKwl9IGVsc2UKKwkJbWEgPSAxMDA7CisKKwlwY2Y1MDYzM19tYmNfdXNiX2N1cmxpbV9zZXQocGNmLCBtYSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGVsYXllZF93b3JrIGd0YTAyX2NoYXJnZXJfd29yazsKK3N0YXRpYyBpbnQgZ3RhMDJfdXNiX3ZidXNfZHJhdzsKKworc3RhdGljIHZvaWQgZ3RhMDJfY2hhcmdlcl93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWlmIChndGEwMl91c2JfdmJ1c19kcmF3KSB7CisJCXBjZjUwNjMzX21iY191c2JfY3VybGltX3NldChndGEwMl9wY2YsIGd0YTAyX3VzYl92YnVzX2RyYXcpOworCQlyZXR1cm47CisJfQorCisjaWZkZWYgQ09ORklHX1BDRjUwNjMzX0FEQworCXBjZjUwNjMzX2FkY19hc3luY19yZWFkKGd0YTAyX3BjZiwKKwkJCQlQQ0Y1MDYzM19BRENDMV9NVVhfQURDSU4xLAorCQkJCVBDRjUwNjMzX0FEQ0MxX0FWRVJBR0VfMTYsCisJCQkJZ3RhMDJfY29uZmlndXJlX3BtdV9mb3JfY2hhcmdlciwKKwkJCQlOVUxMKTsKKyNlbHNlCisJLyoKKwkgKiBJZiB0aGUgUENGNTA2MzMgQURDIGlzIGRpc2FibGVkIHdlIGZhbGxiYWNrIHRvIGEKKwkgKiAxMDBtQSBsaW1pdCBmb3Igc2FmZXR5LgorCSAqLworCXBjZjUwNjMzX21iY191c2JfY3VybGltX3NldChwY2YsIDEwMCk7CisjZW5kaWYKK30KKworI2RlZmluZSBHVEEwMl9DSEFSR0VSX0NPTkZJR1VSRV9USU1FT1VUICgoMzAwMCAqIEhaKSAvIDEwMDApCisKK3N0YXRpYyB2b2lkIGd0YTAyX3BtdV9ldmVudF9jYWxsYmFjayhzdHJ1Y3QgcGNmNTA2MzMgKnBjZiwgaW50IGlycSkKK3sKKwlpZiAoaXJxID09IFBDRjUwNjMzX0lSUV9VU0JJTlMpIHsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZndGEwMl9jaGFyZ2VyX3dvcmssCisJCQkJICAgICAgR1RBMDJfQ0hBUkdFUl9DT05GSUdVUkVfVElNRU9VVCk7CisKKwkJcmV0dXJuOworCX0KKworCWlmIChpcnEgPT0gUENGNTA2MzNfSVJRX1VTQlJFTSkgeworCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmd0YTAyX2NoYXJnZXJfd29yayk7CisJCWd0YTAyX3VzYl92YnVzX2RyYXcgPSAwOworCX0KK30KKworc3RhdGljIHZvaWQgZ3RhMDJfdWRjX3ZidXNfZHJhdyh1bnNpZ25lZCBpbnQgbWEpCit7CisJaWYgKCFndGEwMl9wY2YpCisJCXJldHVybjsKKworCWd0YTAyX3VzYl92YnVzX2RyYXcgPSBtYTsKKworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZ3RhMDJfY2hhcmdlcl93b3JrLAorCQkJICAgICAgR1RBMDJfQ0hBUkdFUl9DT05GSUdVUkVfVElNRU9VVCk7Cit9CisjZWxzZSAvKiAhQ09ORklHX0NIQVJHRVJfUENGNTA2MzMgKi8KKyNkZWZpbmUgZ3RhMDJfcG11X2V2ZW50X2NhbGxiYWNrCU5VTEwKKyNkZWZpbmUgZ3RhMDJfdWRjX3ZidXNfZHJhdwkJTlVMTAorI2VuZGlmCisKKy8qCisgKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHBjNTA2MzMgaXMgcHJvYmVkLCB1bmZvcnR1bmF0ZWx5IHF1aXRlIGxhdGUgaW4gdGhlCisgKiBkYXkgc2luY2UgaXQgaXMgYW4gSTJDIGJ1cyBkZXZpY2UuIEhlcmUgd2UgY2FuIGJlbGF0ZWRseSBkZWZpbmUgc29tZQorICogcGxhdGZvcm0gZGV2aWNlcyB3aXRoIHRoZSBhZHZhbnRhZ2UgdGhhdCB3ZSBjYW4gbWFyayB0aGUgcGNmNTA2MzMgYXMgdGhlCisgKiBwYXJlbnQuIFRoaXMgbWFrZXMgdGhlbSBnZXQgc3VzcGVuZGVkIGFuZCByZXN1bWVkIHdpdGggdGhlaXIgcGFyZW50CisgKiB0aGUgcGNmNTA2MzMgc3RpbGwgYXJvdW5kLgorICovCisKK3N0YXRpYyB2b2lkIGd0YTAyX3BtdV9hdHRhY2hfY2hpbGRfZGV2aWNlcyhzdHJ1Y3QgcGNmNTA2MzMgKnBjZik7CisKKworc3RhdGljIGNoYXIgKmd0YTAyX2JhdHRlcmllc1tdID0geworCSJiYXR0ZXJ5IiwKK307CisKK3N0cnVjdCBwY2Y1MDYzM19wbGF0Zm9ybV9kYXRhIGd0YTAyX3BjZl9wZGF0YSA9IHsKKwkucmVzdW1lcnMgPSB7CisJCVswXSA9CVBDRjUwNjMzX0lOVDFfVVNCSU5TIHwKKwkJCVBDRjUwNjMzX0lOVDFfVVNCUkVNIHwKKwkJCVBDRjUwNjMzX0lOVDFfQUxBUk0sCisJCVsxXSA9CVBDRjUwNjMzX0lOVDJfT05LRVlGLAorCQlbMl0gPQlQQ0Y1MDYzM19JTlQzX09OS0VZMVMsCisJCVszXSA9CVBDRjUwNjMzX0lOVDRfTE9XU1lTIHwKKwkJCVBDRjUwNjMzX0lOVDRfTE9XQkFUIHwKKwkJCVBDRjUwNjMzX0lOVDRfSElHSFRNUCwKKwl9LAorCisJLmJhdHRlcmllcyA9IGd0YTAyX2JhdHRlcmllcywKKwkubnVtX2JhdHRlcmllcyA9IEFSUkFZX1NJWkUoZ3RhMDJfYmF0dGVyaWVzKSwKKworCS5jaGFyZ2VyX3JlZmVyZW5jZV9jdXJyZW50X21hID0gMTAwMCwKKworCS5yZWdfaW5pdF9kYXRhID0geworCQlbUENGNTA2MzNfUkVHVUxBVE9SX0FVVE9dID0geworCQkJLmNvbnN0cmFpbnRzID0geworCQkJCS5taW5fdVYgPSAzMzAwMDAwLAorCQkJCS5tYXhfdVYgPSAzMzAwMDAwLAorCQkJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkJCS5hbHdheXNfb24gPSAxLAorCQkJCS5hcHBseV91ViA9IDEsCisJCQkJLnN0YXRlX21lbSA9IHsKKwkJCQkJLmVuYWJsZWQgPSAxLAorCQkJCX0sCisJCQl9LAorCQl9LAorCQlbUENGNTA2MzNfUkVHVUxBVE9SX0RPV04xXSA9IHsKKwkJCS5jb25zdHJhaW50cyA9IHsKKwkJCQkubWluX3VWID0gMTMwMDAwMCwKKwkJCQkubWF4X3VWID0gMTYwMDAwMCwKKwkJCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKKwkJCQkuYWx3YXlzX29uID0gMSwKKwkJCQkuYXBwbHlfdVYgPSAxLAorCQkJfSwKKwkJfSwKKwkJW1BDRjUwNjMzX1JFR1VMQVRPUl9ET1dOMl0gPSB7CisJCQkuY29uc3RyYWludHMgPSB7CisJCQkJLm1pbl91ViA9IDE4MDAwMDAsCisJCQkJLm1heF91ViA9IDE4MDAwMDAsCisJCQkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkJLmFwcGx5X3VWID0gMSwKKwkJCQkuYWx3YXlzX29uID0gMSwKKwkJCQkuc3RhdGVfbWVtID0geworCQkJCQkuZW5hYmxlZCA9IDEsCisJCQkJfSwKKwkJCX0sCisJCX0sCisJCVtQQ0Y1MDYzM19SRUdVTEFUT1JfSENMRE9dID0geworCQkJLmNvbnN0cmFpbnRzID0geworCQkJCS5taW5fdVYgPSAyMDAwMDAwLAorCQkJCS5tYXhfdVYgPSAzMzAwMDAwLAorCQkJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkJCS52YWxpZF9vcHNfbWFzayA9IFJFR1VMQVRPUl9DSEFOR0VfVk9MVEFHRSwKKwkJCQkuYWx3YXlzX29uID0gMSwKKwkJCX0sCisJCX0sCisJCVtQQ0Y1MDYzM19SRUdVTEFUT1JfTERPMV0gPSB7CisJCQkuY29uc3RyYWludHMgPSB7CisJCQkJLm1pbl91ViA9IDMzMDAwMDAsCisJCQkJLm1heF91ViA9IDMzMDAwMDAsCisJCQkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkJLmFwcGx5X3VWID0gMSwKKwkJCQkuc3RhdGVfbWVtID0geworCQkJCQkuZW5hYmxlZCA9IDAsCisJCQkJfSwKKwkJCX0sCisJCX0sCisJCVtQQ0Y1MDYzM19SRUdVTEFUT1JfTERPMl0gPSB7CisJCQkuY29uc3RyYWludHMgPSB7CisJCQkJLm1pbl91ViA9IDMzMDAwMDAsCisJCQkJLm1heF91ViA9IDMzMDAwMDAsCisJCQkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkJLmFwcGx5X3VWID0gMSwKKwkJCX0sCisJCX0sCisJCVtQQ0Y1MDYzM19SRUdVTEFUT1JfTERPM10gPSB7CisJCQkuY29uc3RyYWludHMgPSB7CisJCQkJLm1pbl91ViA9IDMwMDAwMDAsCisJCQkJLm1heF91ViA9IDMwMDAwMDAsCisJCQkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkJLmFwcGx5X3VWID0gMSwKKwkJCX0sCisJCX0sCisJCVtQQ0Y1MDYzM19SRUdVTEFUT1JfTERPNF0gPSB7CisJCQkuY29uc3RyYWludHMgPSB7CisJCQkJLm1pbl91ViA9IDMyMDAwMDAsCisJCQkJLm1heF91ViA9IDMyMDAwMDAsCisJCQkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkJLmFwcGx5X3VWID0gMSwKKwkJCX0sCisJCX0sCisJCVtQQ0Y1MDYzM19SRUdVTEFUT1JfTERPNV0gPSB7CisJCQkuY29uc3RyYWludHMgPSB7CisJCQkJLm1pbl91ViA9IDMwMDAwMDAsCisJCQkJLm1heF91ViA9IDMwMDAwMDAsCisJCQkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkJLmFwcGx5X3VWID0gMSwKKwkJCQkuc3RhdGVfbWVtID0geworCQkJCQkuZW5hYmxlZCA9IDEsCisJCQkJfSwKKwkJCX0sCisJCX0sCisJCVtQQ0Y1MDYzM19SRUdVTEFUT1JfTERPNl0gPSB7CisJCQkuY29uc3RyYWludHMgPSB7CisJCQkJLm1pbl91ViA9IDMwMDAwMDAsCisJCQkJLm1heF91ViA9IDMwMDAwMDAsCisJCQkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQl9LAorCQl9LAorCQlbUENGNTA2MzNfUkVHVUxBVE9SX01FTUxET10gPSB7CisJCQkuY29uc3RyYWludHMgPSB7CisJCQkJLm1pbl91ViA9IDE4MDAwMDAsCisJCQkJLm1heF91ViA9IDE4MDAwMDAsCisJCQkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCisJCQkJLnN0YXRlX21lbSA9IHsKKwkJCQkJLmVuYWJsZWQgPSAxLAorCQkJCX0sCisJCQl9LAorCQl9LAorCisJfSwKKwkucHJvYmVfZG9uZSA9IGd0YTAyX3BtdV9hdHRhY2hfY2hpbGRfZGV2aWNlcywKKwkubWJjX2V2ZW50X2NhbGxiYWNrID0gZ3RhMDJfcG11X2V2ZW50X2NhbGxiYWNrLAorfTsKKworCisvKiBOT1IgRmxhc2guICovCisKKyNkZWZpbmUgR1RBMDJfRkxBU0hfQkFTRQkweDE4MDAwMDAwIC8qIEdDUzMgKi8KKyNkZWZpbmUgR1RBMDJfRkxBU0hfU0laRQkweDIwMDAwMCAvKiAyTUJ5dGVzICovCisKK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGd0YTAyX25vcl9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBndGEwMl9ub3JfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IEdUQTAyX0ZMQVNIX0JBU0UsCisJLmVuZAkJPSBHVEEwMl9GTEFTSF9CQVNFICsgR1RBMDJfRkxBU0hfU0laRSAtIDEsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZ3RhMDJfbm9yX2ZsYXNoID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZ3RhMDJfbm9yX2ZsYXNoX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSAmZ3RhMDJfbm9yX2ZsYXNoX3Jlc291cmNlLAorCS5udW1fcmVzb3VyY2VzCT0gMSwKK307CisKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2MyNHh4X3B3bV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInMzYzI0eHhfcHdtIiwKKwkubnVtX3Jlc291cmNlcwk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGd0YTAyX2kyY19kZXZzW10gX19pbml0ZGF0YSA9IHsKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJwY2Y1MDYzMyIsIDB4NzMpLAorCQkuaXJxID0gR1RBMDJfSVJRX1BDRjUwNjMzLAorCQkucGxhdGZvcm1fZGF0YSA9ICZndGEwMl9wY2ZfcGRhdGEsCisJfSwKKwl7CisJCUkyQ19CT0FSRF9JTkZPKCJ3bTg3NTMiLCAweDFhKSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX25hbmRfc2V0IF9faW5pdGRhdGEgZ3RhMDJfbmFuZF9zZXRzW10gPSB7CisJWzBdID0geworCQkvKgorCQkgKiBUaGlzIG5hbWUgaXMgYWxzbyBoYXJkLWNvZGVkIGluIHRoZSBib290IGxvYWRlcnMsIHNvCisJCSAqIGNoYW5naW5nIGl0IHdvdWxkIHdvdWxkIHJlcXVpcmUgYWxsIHVzZXJzIHRvIHVwZ3JhZGUKKwkJICogdGhlaXIgYm9vdCBsb2FkZXJzLCBzb21lIG9mIHdoaWNoIGFyZSBzdG9yZWQgaW4gYSBOT1IKKwkJICogdGhhdCBpcyBjb25zaWRlcmVkIHRvIGJlIGltbXV0YWJsZS4KKwkJICovCisJCS5uYW1lCQk9ICJuZW8xOTczLW5hbmQiLAorCQkubnJfY2hpcHMJPSAxLAorCQkuZmxhc2hfYmJ0CT0gMSwKKwl9LAorfTsKKworLyoKKyAqIENob29zZSBhIHNldCBvZiB0aW1pbmdzIGRlcml2ZWQgZnJvbSBTM0NAMjQ0MkIgTUNQNTQKKyAqIGRhdGEgc2hlZXQgKEs1RDJHMTNBQ00tRDA3NSBNQ1AgTWVtb3J5KS4KKyAqLworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCBfX2luaXRkYXRhIGd0YTAyX25hbmRfaW5mbyA9IHsKKwkudGFjbHMJCT0gMCwKKwkudHdycGgwCQk9IDI1LAorCS50d3JwaDEJCT0gMTUsCisJLm5yX3NldHMJPSBBUlJBWV9TSVpFKGd0YTAyX25hbmRfc2V0cyksCisJLnNldHMJCT0gZ3RhMDJfbmFuZF9zZXRzLAorfTsKKworCitzdGF0aWMgdm9pZCBndGEwMl91ZGNfY29tbWFuZChlbnVtIHMzYzI0MTBfdWRjX2NtZF9lIGNtZCkKK3sKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgUzNDMjQxMF9VRENfUF9FTkFCTEU6CisJCXByX2RlYnVnKCIlcyBTM0MyNDEwX1VEQ19QX0VOQUJMRVxuIiwgX19mdW5jX18pOworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1RBMDJfR1BJT19VU0JfUFVMTFVQLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBTM0MyNDEwX1VEQ19QX0RJU0FCTEU6CisJCXByX2RlYnVnKCIlcyBTM0MyNDEwX1VEQ19QX0RJU0FCTEVcbiIsIF9fZnVuY19fKTsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdUQTAyX0dQSU9fVVNCX1BVTExVUCwgMCk7CisJCWJyZWFrOworCWNhc2UgUzNDMjQxMF9VRENfUF9SRVNFVDoKKwkJcHJfZGVidWcoIiVzIFMzQzI0MTBfVURDX1BfUkVTRVRcbiIsIF9fZnVuY19fKTsKKwkJLyogRklYTUU6IERvIHNvbWV0aGluZyBoZXJlLiAqLworCX0KK30KKworLyogR2V0IFBNVSB0byBzZXQgVVNCIGN1cnJlbnQgbGltaXQgYWNjb3JkaW5nbHkuICovCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWRjX21hY2hfaW5mbyBndGEwMl91ZGNfY2ZnID0geworCS52YnVzX2RyYXcJPSBndGEwMl91ZGNfdmJ1c19kcmF3LAorCS51ZGNfY29tbWFuZAk9IGd0YTAyX3VkY19jb21tYW5kLAorCit9OworCisKKworc3RhdGljIHZvaWQgZ3RhMDJfYmxfc2V0X2ludGVuc2l0eShpbnQgaW50ZW5zaXR5KQoreworCXN0cnVjdCBwY2Y1MDYzMyAqcGNmID0gZ3RhMDJfcGNmOworCWludCBvbGRfaW50ZW5zaXR5ID0gcGNmNTA2MzNfcmVnX3JlYWQocGNmLCBQQ0Y1MDYzM19SRUdfTEVET1VUKTsKKworCS8qIFdlIG1hcCA4LWJpdCBpbnRlbnNpdHkgdG8gNi1iaXQgaW50ZW5zaXR5IGluIGhhcmR3YXJlLiAqLworCWludGVuc2l0eSA+Pj0gMjsKKworCS8qCisJICogVGhpcyBjYW4gaGFwcGVuIGR1cmluZywgZWcsIHByaW50IG9mIHBhbmljIG9uIGJsYW5rZWQgY29uc29sZSwKKwkgKiBidXQgd2UgY2FuJ3Qgc2VydmljZSBpMmMgd2l0aG91dCBpbnRlcnJ1cHRzIGFjdGl2ZSwgc28gYWJvcnQuCisJICovCisJaWYgKGluX2F0b21pYygpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiZ3RhMDJfYmxfc2V0X2ludGVuc2l0eSBjYWxsZWQgd2hpbGUgYXRvbWljXG4iKTsKKwkJcmV0dXJuOworCX0KKworCW9sZF9pbnRlbnNpdHkgPSBwY2Y1MDYzM19yZWdfcmVhZChwY2YsIFBDRjUwNjMzX1JFR19MRURPVVQpOworCWlmIChpbnRlbnNpdHkgPT0gb2xkX2ludGVuc2l0eSkKKwkJcmV0dXJuOworCisJLyogV2UgY2FuJ3QgZG8gdGhpcyBhbnl3aGVyZSBlbHNlLiAqLworCXBjZjUwNjMzX3JlZ193cml0ZShwY2YsIFBDRjUwNjMzX1JFR19MRURESU0sIDUpOworCisJaWYgKCEocGNmNTA2MzNfcmVnX3JlYWQocGNmLCBQQ0Y1MDYzM19SRUdfTEVERU5BKSAmIDMpKQorCQlvbGRfaW50ZW5zaXR5ID0gMDsKKworCS8qCisJICogVGhlIFBDRjUwNjMzIGNhbm5vdCBoYW5kbGUgTEVET1VUID0gMCAoZGF0YXNoZWV0IHA2MCkKKwkgKiBpZiBzZWVuLCB5b3UgaGF2ZSB0byByZS1lbmFibGUgdGhlIExFRCB1bml0LgorCSAqLworCWlmICghaW50ZW5zaXR5IHx8ICFvbGRfaW50ZW5zaXR5KQorCQlwY2Y1MDYzM19yZWdfd3JpdGUocGNmLCBQQ0Y1MDYzM19SRUdfTEVERU5BLCAwKTsKKworCS8qIElsbGVnYWwgdG8gc2V0IExFRE9VVCB0byAwLiAqLworCWlmICghaW50ZW5zaXR5KQorCQlwY2Y1MDYzM19yZWdfc2V0X2JpdF9tYXNrKHBjZiwgUENGNTA2MzNfUkVHX0xFRE9VVCwgMHgzZiwgMik7CisJZWxzZQorCQlwY2Y1MDYzM19yZWdfc2V0X2JpdF9tYXNrKHBjZiwgUENGNTA2MzNfUkVHX0xFRE9VVCwgMHgzZiwKKwkJCQkJICBpbnRlbnNpdHkpOworCisJaWYgKGludGVuc2l0eSkKKwkJcGNmNTA2MzNfcmVnX3dyaXRlKHBjZiwgUENGNTA2MzNfUkVHX0xFREVOQSwgMik7CisKK30KKworc3RhdGljIHN0cnVjdCBnZW5lcmljX2JsX2luZm8gZ3RhMDJfYmxfaW5mbyA9IHsKKwkubmFtZQkJCT0gImd0YTAyLWJsIiwKKwkubWF4X2ludGVuc2l0eQkJPSAweGZmLAorCS5kZWZhdWx0X2ludGVuc2l0eQk9IDB4ZmYsCisJLnNldF9ibF9pbnRlbnNpdHkJPSBndGEwMl9ibF9zZXRfaW50ZW5zaXR5LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZ3RhMDJfYmxfZGV2ID0geworCS5uYW1lCQkJPSAiZ2VuZXJpYy1ibCIsCisJLmlkCQkJPSAxLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJmd0YTAyX2JsX2luZm8sCisJfSwKK307CisKKworCisvKiBVU0IgKi8KK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9oY2RfaW5mbyBndGEwMl91c2JfaW5mbyBfX2luaXRkYXRhID0geworCS5wb3J0WzBdCT0geworCQkuZmxhZ3MJPSBTM0NfSENERkxHX1VTRUQsCisJfSwKKwkucG9ydFsxXQk9IHsKKwkJLmZsYWdzCT0gMCwKKwl9LAorfTsKKworCitzdGF0aWMgdm9pZCBfX2luaXQgZ3RhMDJfbWFwX2lvKHZvaWQpCit7CisJczNjMjR4eF9pbml0X2lvKGd0YTAyX2lvZGVzYywgQVJSQVlfU0laRShndGEwMl9pb2Rlc2MpKTsKKwlzM2MyNHh4X2luaXRfY2xvY2tzKDEyMDAwMDAwKTsKKwlzM2MyNHh4X2luaXRfdWFydHMoZ3RhMDJfdWFydGNmZ3MsIEFSUkFZX1NJWkUoZ3RhMDJfdWFydGNmZ3MpKTsKK30KKworCisvKiBUaGVzZSBhcmUgdGhlIGd1eXMgdGhhdCBkb24ndCBuZWVkIHRvIGJlIGNoaWxkcmVuIG9mIFBNVS4gKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmd0YTAyX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzM2NfZGV2aWNlX29oY2ksCisJJnMzY19kZXZpY2Vfd2R0LAorCSZzM2NfZGV2aWNlX3NkaSwKKwkmczNjX2RldmljZV91c2JnYWRnZXQsCisJJnMzY19kZXZpY2VfbmFuZCwKKwkmZ3RhMDJfbm9yX2ZsYXNoLAorCSZzM2MyNHh4X3B3bV9kZXZpY2UsCisJJnMzY19kZXZpY2VfaWlzLAorCSZzM2NfZGV2aWNlX2kyYzAsCit9OworCisvKiBUaGVzZSBndXlzIERPIG5lZWQgdG8gYmUgY2hpbGRyZW4gb2YgUE1VLiAqLworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZ3RhMDJfZGV2aWNlc19wbXVfY2hpbGRyZW5bXSA9IHsKKwkmZ3RhMDJfYmxfZGV2LAorfTsKKworCisvKgorICogVGhpcyBpcyBjYWxsZWQgd2hlbiBwYzUwNjMzIGlzIHByb2JlZCwgcXVpdGUgbGF0ZSBpbiB0aGUgZGF5IHNpbmNlIGl0IGlzIGFuCisgKiBJMkMgYnVzIGRldmljZS4gIEhlcmUgd2UgY2FuIGRlZmluZSBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggdGhlIGFkdmFudGFnZSB0aGF0CisgKiB3ZSBjYW4gbWFyayB0aGUgcGNmNTA2MzMgYXMgdGhlIHBhcmVudC4gIFRoaXMgbWFrZXMgdGhlbSBnZXQgc3VzcGVuZGVkIGFuZAorICogcmVzdW1lZCB3aXRoIHRoZWlyIHBhcmVudCB0aGUgcGNmNTA2MzMgc3RpbGwgYXJvdW5kLiAgQWxsIGRldmljZXMgd2hvc2UKKyAqIG9wZXJhdGlvbiBkZXBlbmRzIG9uIHNvbWV0aGluZyBmcm9tIHBjZjUwNjMzIG11c3QgaGF2ZSB0aGlzIHJlbGF0aW9uc2hpcAorICogbWFkZSBleHBsaWNpdCBsaWtlIHRoaXMsIG9yIHN1c3BlbmQgYW5kIHJlc3VtZSB3aWxsIGJlY29tZSBhbiB1bnJlbGlhYmxlCisgKiBoZWxsd29ybGQuCisgKi8KKworc3RhdGljIHZvaWQgZ3RhMDJfcG11X2F0dGFjaF9jaGlsZF9kZXZpY2VzKHN0cnVjdCBwY2Y1MDYzMyAqcGNmKQoreworCWludCBuOworCisJLyogR3JhYiBhIGNvcHkgb2YgdGhlIG5vdyBwcm9iZWQgUE1VIHBvaW50ZXIuICovCisJZ3RhMDJfcGNmID0gcGNmOworCisJZm9yIChuID0gMDsgbiA8IEFSUkFZX1NJWkUoZ3RhMDJfZGV2aWNlc19wbXVfY2hpbGRyZW4pOyBuKyspCisJCWd0YTAyX2RldmljZXNfcG11X2NoaWxkcmVuW25dLT5kZXYucGFyZW50ID0gcGNmLT5kZXY7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhndGEwMl9kZXZpY2VzX3BtdV9jaGlsZHJlbiwKKwkJCSAgICAgQVJSQVlfU0laRShndGEwMl9kZXZpY2VzX3BtdV9jaGlsZHJlbikpOworfQorCitzdGF0aWMgdm9pZCBndGEwMl9wb3dlcm9mZih2b2lkKQoreworCXBjZjUwNjMzX3JlZ19zZXRfYml0X21hc2soZ3RhMDJfcGNmLCBQQ0Y1MDYzM19SRUdfT09DU0hEV04sIDEsIDEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZ3RhMDJfbWFjaGluZV9pbml0KHZvaWQpCit7CisJLyogU2V0IHRoZSBwYW5pYyBjYWxsYmFjayB0byBtYWtlIEFVWCBMRUQgYmxpbmsgYXQgfjVIei4gKi8KKwlwYW5pY19ibGluayA9IGd0YTAyX3BhbmljX2JsaW5rOworCisJczNjX3BtX2luaXQoKTsKKworI2lmZGVmIENPTkZJR19DSEFSR0VSX1BDRjUwNjMzCisJSU5JVF9ERUxBWUVEX1dPUksoJmd0YTAyX2NoYXJnZXJfd29yaywgZ3RhMDJfY2hhcmdlcl93b3JrZXIpOworI2VuZGlmCisKKwlzM2MyNHh4X3VkY19zZXRfcGxhdGRhdGEoJmd0YTAyX3VkY19jZmcpOworCXMzY19vaGNpX3NldF9wbGF0ZGF0YSgmZ3RhMDJfdXNiX2luZm8pOworCXMzY19uYW5kX3NldF9wbGF0ZGF0YSgmZ3RhMDJfbmFuZF9pbmZvKTsKKwlzM2NfaTJjMF9zZXRfcGxhdGRhdGEoTlVMTCk7CisKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBndGEwMl9pMmNfZGV2cywgQVJSQVlfU0laRShndGEwMl9pMmNfZGV2cykpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoZ3RhMDJfZGV2aWNlcywgQVJSQVlfU0laRShndGEwMl9kZXZpY2VzKSk7CisJcG1fcG93ZXJfb2ZmID0gZ3RhMDJfcG93ZXJvZmY7Cit9CisKKworTUFDSElORV9TVEFSVChORU8xOTczX0dUQTAyLCAiR1RBMDIiKQorCS8qIE1haW50YWluZXI6IE5lbHNvbiBDYXN0aWxsbyA8YXJodWFjb0BmcmVha3MtdW5pZG9zLm5ldD4gKi8KKwkucGh5c19pbwk9IFMzQzI0MTBfUEFfVUFSVCwKKwkuaW9fcGdfb2Zmc3QJPSAoKCh1MzIpUzNDMjRYWF9WQV9VQVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gUzNDMjQxMF9TRFJBTV9QQSArIDB4MTAwLAorCS5tYXBfaW8JCT0gZ3RhMDJfbWFwX2lvLAorCS5pbml0X2lycQk9IHMzYzI0eHhfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IGd0YTAyX21hY2hpbmVfaW5pdCwKKwkudGltZXIJCT0gJnMzYzI0eHhfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbWluaTI0NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW1pbmkyNDQwLmMKaW5kZXggMjA2OGU5MC4uNTcxYjE3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbWluaTI0NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1taW5pMjQ0MC5jCkBAIC01MDYsOSArNTA2LDggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptaW5pMjQ0MF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLQkmczNjX2RldmljZV91c2IsCisJJnMzY19kZXZpY2Vfb2hjaSwKIAkmczNjX2RldmljZV93ZHQsCi0vKgkmczNjX2RldmljZV9hZGMsKi8gLyogQURDIGRvZXNuJ3QgbGlrZSBsaXZpbmcgd2l0aCB0b3VjaHNjcmVlbiAhICovCiAJJnMzY19kZXZpY2VfaTJjMCwKIAkmczNjX2RldmljZV9ydGMsCiAJJnMzY19kZXZpY2VfdXNiZ2FkZ2V0LApAQCAtNTIyLDggKzUyMSw2IEBACiAJJnMzY19kZXZpY2Vfc2RpLAogCSZzM2NfZGV2aWNlX2lpcywKIAkmbWluaTI0NDBfYXVkaW8sCi0vKgkmczNjX2RldmljZV90aW1lclswXSwqLwkvKiBidXp6ZXIgcHdtLCBubyBBUEkgZm9yIGl0ICovCi0JLyogcmVtYWluaW5nIGRldmljZXMgYXJlIG9wdGlvbmFsICovCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgbWluaTI0NDBfbWFwX2lvKHZvaWQpCkBAIC01MzEsOCArNTI4LDYgQEAKIAlzM2MyNHh4X2luaXRfaW8obWluaTI0NDBfaW9kZXNjLCBBUlJBWV9TSVpFKG1pbmkyNDQwX2lvZGVzYykpOwogCXMzYzI0eHhfaW5pdF9jbG9ja3MoMTIwMDAwMDApOwogCXMzYzI0eHhfaW5pdF91YXJ0cyhtaW5pMjQ0MF91YXJ0Y2ZncywgQVJSQVlfU0laRShtaW5pMjQ0MF91YXJ0Y2ZncykpOwotCi0JczNjX2RldmljZV9zZGkuZGV2LnBsYXRmb3JtX2RhdGEgPSAmbWluaTI0NDBfbW1jX2NmZzsKIH0KIAogLyoKQEAgLTY3OCw2ICs2NzMsNyBAQAogCX0KIAogCXMzYzI0eHhfdWRjX3NldF9wbGF0ZGF0YSgmbWluaTI0NDBfdWRjX2NmZyk7CisJczNjMjR4eF9tY2lfc2V0X3BsYXRkYXRhKCZtaW5pMjQ0MF9tbWNfY2ZnKTsKIAlzM2NfbmFuZF9zZXRfcGxhdGRhdGEoJm1pbmkyNDQwX25hbmRfaW5mbyk7CiAJczNjX2kyYzBfc2V0X3BsYXRkYXRhKE5VTEwpOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1uZXhjb2Rlci5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtbmV4Y29kZXIuYwppbmRleCBkNDNlZGVkLi4zNDIwNDE1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1uZXhjb2Rlci5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLW5leGNvZGVyLmMKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlIDxwbGF0L2lpYy5oPgogCiAjaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+Ci0jaW5jbHVkZSA8cGxhdC9zM2MyNDQwLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDR4Lmg+CiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgogI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CkBAIC0xMDYsNyArMTA2LDcgQEAKIC8qIFN0YW5kYXJkIE5leGNvZGVyIGRldmljZXMgKi8KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm5leGNvZGVyX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZzM2NfZGV2aWNlX3VzYiwKKwkmczNjX2RldmljZV9vaGNpLAogCSZzM2NfZGV2aWNlX2xjZCwKIAkmczNjX2RldmljZV93ZHQsCiAJJnMzY19kZXZpY2VfaTJjMCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MzcxNS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtcngzNzE1LmMKaW5kZXggYTk1MmExM2EuLjFlODM2ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MzcxNS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXJ4MzcxNS5jCkBAIC0xNzYsNyArMTc2LDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpyeDM3MTVfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnMzY19kZXZpY2VfdXNiLAorCSZzM2NfZGV2aWNlX29oY2ksCiAJJnMzY19kZXZpY2VfbGNkLAogCSZzM2NfZGV2aWNlX3dkdCwKIAkmczNjX2RldmljZV9pMmMwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtc21kazI0NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9tYWNoLXNtZGsyNDQwLmMKaW5kZXggZWMxM2U3NC4uM2FjM2Q2MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL21hY2gtc21kazI0NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvbWFjaC1zbWRrMjQ0MC5jCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSA8cGxhdC9paWMuaD4KIAogI2luY2x1ZGUgPHBsYXQvczNjMjQxMC5oPgotI2luY2x1ZGUgPHBsYXQvczNjMjQ0MC5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQ0eC5oPgogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgpAQCAtMTUwLDcgKzE1MCw3IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc21kazI0NDBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnMzY19kZXZpY2VfdXNiLAorCSZzM2NfZGV2aWNlX29oY2ksCiAJJnMzY19kZXZpY2VfbGNkLAogCSZzM2NfZGV2aWNlX3dkdCwKIAkmczNjX2RldmljZV9pMmMwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NDAtcGxsLTEyMDAwMDAwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0MC1wbGwtMTIwMDAwMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTA1ZDVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NDAtcGxsLTEyMDAwMDAwLmMKQEAgLTAsMCArMSw5NyBAQAorLyogYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NDAtcGxsLTEyMDAwMDAwLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglWaW5jZW50IFNhbmRlcnMgPHZpbmNlQGFybS5saW51eC5vcmcudWs+CisgKgorICogUzNDMjQ0MC9TM0MyNDQyIENQVSBQTEwgdGFibGVzICgxMk1IeiBDcnlzdGFsKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS1jb3JlLmg+CisKK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgczNjMjQ0MF9wbGxzXzEyW10gX19pbml0ZGF0YSA9IHsKKwl7IC5mcmVxdWVuY3kgPSA3NTAwMDAwMCwJLmluZGV4ID0gUExMVkFMKDB4NzUsIDMsIDMpLCAgfSwgCS8qIEZWY28gNjAwLjAwMDAwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDgwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg5OCwgNCwgMyksICB9LCAJLyogRlZjbyA2NDAuMDAwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gOTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDcwLCAyLCAzKSwgIH0sIAkvKiBGVmNvIDcyMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxMDAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDVjLCAxLCAzKSwgIH0sIAkvKiBGVmNvIDgwMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxMTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDY2LCAxLCAzKSwgIH0sIAkvKiBGVmNvIDg4MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxMjAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDcwLCAxLCAzKSwgIH0sIAkvKiBGVmNvIDk2MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxNTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDc1LCAzLCAyKSwgIH0sIAkvKiBGVmNvIDYwMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxNjAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDk4LCA0LCAyKSwgIH0sIAkvKiBGVmNvIDY0MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxNzAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDRkLCAxLCAyKSwgIH0sIAkvKiBGVmNvIDY4MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxODAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDcwLCAyLCAyKSwgIH0sIAkvKiBGVmNvIDcyMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxOTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDU3LCAxLCAyKSwgIH0sIAkvKiBGVmNvIDc2MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyMDAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDVjLCAxLCAyKSwgIH0sIAkvKiBGVmNvIDgwMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyMTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDg0LCAyLCAyKSwgIH0sIAkvKiBGVmNvIDg0MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyMjAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDY2LCAxLCAyKSwgIH0sIAkvKiBGVmNvIDg4MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyMzAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDZiLCAxLCAyKSwgIH0sIAkvKiBGVmNvIDkyMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyNDAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDcwLCAxLCAyKSwgIH0sIAkvKiBGVmNvIDk2MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzMDAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDc1LCAzLCAxKSwgIH0sIAkvKiBGVmNvIDYwMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzMTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDkzLCA0LCAxKSwgIH0sIAkvKiBGVmNvIDYyMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzMjAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDk4LCA0LCAxKSwgIH0sIAkvKiBGVmNvIDY0MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzMzAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDY2LCAyLCAxKSwgIH0sIAkvKiBGVmNvIDY2MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzNDAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDRkLCAxLCAxKSwgIH0sIAkvKiBGVmNvIDY4MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzNTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweGE3LCA0LCAxKSwgIH0sIAkvKiBGVmNvIDcwMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzNjAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDcwLCAyLCAxKSwgIH0sIAkvKiBGVmNvIDcyMC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzNzAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweGIxLCA0LCAxKSwgIH0sIAkvKiBGVmNvIDc0MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzODAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDU3LCAxLCAxKSwgIH0sIAkvKiBGVmNvIDc2MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzOTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDdhLCAyLCAxKSwgIH0sIAkvKiBGVmNvIDc4MC4wMDAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSA0MDAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDVjLCAxLCAxKSwgIH0sIAkvKiBGVmNvIDgwMC4wMDAwMDAgKi8KK307CisKK3N0YXRpYyBpbnQgczNjMjQ0MF9wbGxzMTJfYWRkKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGNsayAqeHRhbF9jbGs7CisJdW5zaWduZWQgbG9uZyB4dGFsOworCisJeHRhbF9jbGsgPSBjbGtfZ2V0KE5VTEwsICJ4dGFsIik7CisJaWYgKElTX0VSUih4dGFsX2NsaykpCisJCXJldHVybiBQVFJfRVJSKHh0YWxfY2xrKTsKKworCXh0YWwgPSBjbGtfZ2V0X3JhdGUoeHRhbF9jbGspOworCWNsa19wdXQoeHRhbF9jbGspOworCisJaWYgKHh0YWwgPT0gMTIwMDAwMDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgUExMIHRhYmxlIGZvciAxMk1IeiBjcnlzdGFsXG4iKTsKKwkJcmV0dXJuIHMzY19wbGx0YWJfcmVnaXN0ZXIoczNjMjQ0MF9wbGxzXzEyLAorCQkJCQkgICBBUlJBWV9TSVpFKHMzYzI0NDBfcGxsc18xMikpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0MF9wbGxzMTJfZHJ2ID0geworCS5hZGQJPSBzM2MyNDQwX3BsbHMxMl9hZGQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDQwX3BsbF8xMm1oeih2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQwX3N5c2NsYXNzLCAmczNjMjQ0MF9wbGxzMTJfZHJ2KTsKKworfQorCithcmNoX2luaXRjYWxsKHMzYzI0NDBfcGxsXzEybWh6KTsKKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDJfcGxsczEyX2RydiA9IHsKKwkuYWRkCT0gczNjMjQ0MF9wbGxzMTJfYWRkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjQ0Ml9wbGxfMTJtaHoodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQ0Ml9zeXNjbGFzcywgJnMzYzI0NDJfcGxsczEyX2Rydik7CisKK30KKworYXJjaF9pbml0Y2FsbChzM2MyNDQyX3BsbF8xMm1oeik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0MC1wbGwtMTY5MzQ0MDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDQwLXBsbC0xNjkzNDQwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4YThmOTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0MC1wbGwtMTY5MzQ0MDAuYwpAQCAtMCwwICsxLDEyNyBAQAorLyogYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NDAtcGxsLTE2OTM0NDAwLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglWaW5jZW50IFNhbmRlcnMgPHZpbmNlQGFybS5saW51eC5vcmcudWs+CisgKgorICogUzNDMjQ0MC9TM0MyNDQyIENQVSBQTEwgdGFibGVzICgxNi45MzQ0NE1IeiBDcnlzdGFsKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS1jb3JlLmg+CisKK3N0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgczNjMjQ0MF9wbGxzXzE2OTM0NFtdIF9faW5pdGRhdGEgPSB7CisJeyAuZnJlcXVlbmN5ID0gNzgwMTkyMDAsCS5pbmRleCA9IFBMTFZBTCgxMjEsIDUsIDMpLCAJfSwgCS8qIEZWY28gNjI0LjE1MzYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDg0MDY3MjAwLAkuaW5kZXggPSBQTExWQUwoMTMxLCA1LCAzKSwgCX0sIAkvKiBGVmNvIDY3Mi41Mzc2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSA5MDExNTIwMCwJLmluZGV4ID0gUExMVkFMKDE0MSwgNSwgMyksIAl9LCAJLyogRlZjbyA3MjAuOTIxNjAwICovCisJeyAuZnJlcXVlbmN5ID0gOTYxNjMyMDAsCS5pbmRleCA9IFBMTFZBTCgxNTEsIDUsIDMpLCAJfSwgCS8qIEZWY28gNzY5LjMwNTYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDEwMjEzNTYwMCwJLmluZGV4ID0gUExMVkFMKDE4NSwgNiwgMyksIAl9LCAJLyogRlZjbyA4MTcuMDg0ODAwICovCisJeyAuZnJlcXVlbmN5ID0gMTA4MjU5MjAwLAkuaW5kZXggPSBQTExWQUwoMTcxLCA1LCAzKSwgCX0sIAkvKiBGVmNvIDg2Ni4wNzM2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxMTQzMDcyMDAsCS5pbmRleCA9IFBMTFZBTCgxMjcsIDMsIDMpLCAJfSwgCS8qIEZWY28gOTE0LjQ1NzYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDEyMDIzNDI0MCwJLmluZGV4ID0gUExMVkFMKDEzNCwgMywgMyksIAl9LCAJLyogRlZjbyA5NjEuODczOTIwICovCisJeyAuZnJlcXVlbmN5ID0gMTI2MTYxMjgwLAkuaW5kZXggPSBQTExWQUwoMTQxLCAzLCAzKSwgCX0sIAkvKiBGVmNvIDEwMDkuMjkwMjQwICovCisJeyAuZnJlcXVlbmN5ID0gMTMyMDg4MzIwLAkuaW5kZXggPSBQTExWQUwoMTQ4LCAzLCAzKSwgCX0sIAkvKiBGVmNvIDEwNTYuNzA2NTYwICovCisJeyAuZnJlcXVlbmN5ID0gMTM4MDE1MzYwLAkuaW5kZXggPSBQTExWQUwoMTU1LCAzLCAzKSwgCX0sIAkvKiBGVmNvIDExMDQuMTIyODgwICovCisJeyAuZnJlcXVlbmN5ID0gMTQ0Nzg5MTIwLAkuaW5kZXggPSBQTExWQUwoMTYzLCAzLCAzKSwgCX0sIAkvKiBGVmNvIDExNTguMzEyOTYwICovCisJeyAuZnJlcXVlbmN5ID0gMTUwMTAwMzYzLAkuaW5kZXggPSBQTExWQUwoMTg3LCA5LCAyKSwgCX0sIAkvKiBGVmNvIDYwMC40MDE0NTQgKi8KKwl7IC5mcmVxdWVuY3kgPSAxNTYwMzg0MDAsCS5pbmRleCA9IFBMTFZBTCgxMjEsIDUsIDIpLCAJfSwgCS8qIEZWY28gNjI0LjE1MzYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDE2MjA4NjQwMCwJLmluZGV4ID0gUExMVkFMKDEyNiwgNSwgMiksIAl9LCAJLyogRlZjbyA2NDguMzQ1NjAwICovCisJeyAuZnJlcXVlbmN5ID0gMTY4MTM0NDAwLAkuaW5kZXggPSBQTExWQUwoMTMxLCA1LCAyKSwgCX0sIAkvKiBGVmNvIDY3Mi41Mzc2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxNzQwNDgwMDAsCS5pbmRleCA9IFBMTFZBTCgxNzcsIDcsIDIpLCAJfSwgCS8qIEZWY28gNjk2LjE5MjAwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDE4MDIzMDQwMCwJLmluZGV4ID0gUExMVkFMKDE0MSwgNSwgMiksIAl9LCAJLyogRlZjbyA3MjAuOTIxNjAwICovCisJeyAuZnJlcXVlbmN5ID0gMTg2Mjc4NDAwLAkuaW5kZXggPSBQTExWQUwoMTI0LCA0LCAyKSwgCX0sIAkvKiBGVmNvIDc0NS4xMTM2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAxOTIzMjY0MDAsCS5pbmRleCA9IFBMTFZBTCgxNTEsIDUsIDIpLCAJfSwgCS8qIEZWY28gNzY5LjMwNTYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDE5ODEzMjQ4MCwJLmluZGV4ID0gUExMVkFMKDEwOSwgMywgMiksIAl9LCAJLyogRlZjbyA3OTIuNTI5OTIwICovCisJeyAuZnJlcXVlbmN5ID0gMjA0MjcxMjAwLAkuaW5kZXggPSBQTExWQUwoMTg1LCA2LCAyKSwgCX0sIAkvKiBGVmNvIDgxNy4wODQ4MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyMTAyNjg4MDAsCS5pbmRleCA9IFBMTFZBTCgxNDEsIDQsIDIpLCAJfSwgCS8qIEZWY28gODQxLjA3NTIwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDIxNjUxODQwMCwJLmluZGV4ID0gUExMVkFMKDE3MSwgNSwgMiksIAl9LCAJLyogRlZjbyA4NjYuMDczNjAwICovCisJeyAuZnJlcXVlbmN5ID0gMjIyMjY0MDAwLAkuaW5kZXggPSBQTExWQUwoOTcsIDIsIDIpLCAJfSwgCS8qIEZWY28gODg5LjA1NjAwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDIyODYxNDQwMCwJLmluZGV4ID0gUExMVkFMKDEyNywgMywgMiksIAl9LCAJLyogRlZjbyA5MTQuNDU3NjAwICovCisJeyAuZnJlcXVlbmN5ID0gMjM0MjU5MjAwLAkuaW5kZXggPSBQTExWQUwoMTU4LCA0LCAyKSwgCX0sIAkvKiBGVmNvIDkzNy4wMzY4MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyNDA0Njg0ODAsCS5pbmRleCA9IFBMTFZBTCgxMzQsIDMsIDIpLCAJfSwgCS8qIEZWY28gOTYxLjg3MzkyMCAqLworCXsgLmZyZXF1ZW5jeSA9IDI0Njk2MDAwMCwJLmluZGV4ID0gUExMVkFMKDE2NywgNCwgMiksIAl9LCAJLyogRlZjbyA5ODcuODQwMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMjUyMzIyNTYwLAkuaW5kZXggPSBQTExWQUwoMTQxLCAzLCAyKSwgCX0sIAkvKiBGVmNvIDEwMDkuMjkwMjQwICovCisJeyAuZnJlcXVlbmN5ID0gMjU4MjQ5NjAwLAkuaW5kZXggPSBQTExWQUwoMTE0LCAyLCAyKSwgCX0sIAkvKiBGVmNvIDEwMzIuOTk4NDAwICovCisJeyAuZnJlcXVlbmN5ID0gMjY0MTc2NjQwLAkuaW5kZXggPSBQTExWQUwoMTQ4LCAzLCAyKSwgCX0sIAkvKiBGVmNvIDEwNTYuNzA2NTYwICovCisJeyAuZnJlcXVlbmN5ID0gMjcwOTUwNDAwLAkuaW5kZXggPSBQTExWQUwoMTIwLCAyLCAyKSwgCX0sIAkvKiBGVmNvIDEwODMuODAxNjAwICovCisJeyAuZnJlcXVlbmN5ID0gMjc2MDMwNzIwLAkuaW5kZXggPSBQTExWQUwoMTU1LCAzLCAyKSwgCX0sIAkvKiBGVmNvIDExMDQuMTIyODgwICovCisJeyAuZnJlcXVlbmN5ID0gMjgyMjQwMDAwLAkuaW5kZXggPSBQTExWQUwoOTIsIDEsIDIpLCAJfSwgCS8qIEZWY28gMTEyOC45NjAwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyODk1NzgyNDAsCS5pbmRleCA9IFBMTFZBTCgxNjMsIDMsIDIpLCAJfSwgCS8qIEZWY28gMTE1OC4zMTI5NjAgKi8KKwl7IC5mcmVxdWVuY3kgPSAyOTQyMzUyMDAsCS5pbmRleCA9IFBMTFZBTCgxMzEsIDIsIDIpLCAJfSwgCS8qIEZWY28gMTE3Ni45NDA4MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzMDAyMDA3MjcsCS5pbmRleCA9IFBMTFZBTCgxODcsIDksIDEpLCAJfSwgCS8qIEZWY28gNjAwLjQwMTQ1NCAqLworCXsgLmZyZXF1ZW5jeSA9IDMwNjM1ODY5MCwJLmluZGV4ID0gUExMVkFMKDE5MSwgOSwgMSksIAl9LCAJLyogRlZjbyA2MTIuNzE3MzgwICovCisJeyAuZnJlcXVlbmN5ID0gMzEyMDc2ODAwLAkuaW5kZXggPSBQTExWQUwoMTIxLCA1LCAxKSwgCX0sIAkvKiBGVmNvIDYyNC4xNTM2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzMTgzNjY3MjAsCS5pbmRleCA9IFBMTFZBTCg4NiwgMywgMSksIAl9LCAJLyogRlZjbyA2MzYuNzMzNDQwICovCisJeyAuZnJlcXVlbmN5ID0gMzI0MTcyODAwLAkuaW5kZXggPSBQTExWQUwoMTI2LCA1LCAxKSwgCX0sIAkvKiBGVmNvIDY0OC4zNDU2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzMzAyMjA4MDAsCS5pbmRleCA9IFBMTFZBTCgxMDksIDQsIDEpLCAJfSwgCS8qIEZWY28gNjYwLjQ0MTYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDMzNjI2ODgwMCwJLmluZGV4ID0gUExMVkFMKDEzMSwgNSwgMSksIAl9LCAJLyogRlZjbyA2NzIuNTM3NjAwICovCisJeyAuZnJlcXVlbmN5ID0gMzQyMDc0ODgwLAkuaW5kZXggPSBQTExWQUwoOTMsIDMsIDEpLCAJfSwgCS8qIEZWY28gNjg0LjE0OTc2MCAqLworCXsgLmZyZXF1ZW5jeSA9IDM0ODA5NjAwMCwJLmluZGV4ID0gUExMVkFMKDE3NywgNywgMSksIAl9LCAJLyogRlZjbyA2OTYuMTkyMDAwICovCisJeyAuZnJlcXVlbmN5ID0gMzU1NjIyNDAwLAkuaW5kZXggPSBQTExWQUwoMTE4LCA0LCAxKSwgCX0sIAkvKiBGVmNvIDcxMS4yNDQ4MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzNjA0NjA4MDAsCS5pbmRleCA9IFBMTFZBTCgxNDEsIDUsIDEpLCAJfSwgCS8qIEZWY28gNzIwLjkyMTYwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDM2NjIwNjQwMCwJLmluZGV4ID0gUExMVkFMKDE2NSwgNiwgMSksIAl9LCAJLyogRlZjbyA3MzIuNDEyODAwICovCisJeyAuZnJlcXVlbmN5ID0gMzcyNTU2ODAwLAkuaW5kZXggPSBQTExWQUwoMTI0LCA0LCAxKSwgCX0sIAkvKiBGVmNvIDc0NS4xMTM2MDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzNzgyMDE2MDAsCS5pbmRleCA9IFBMTFZBTCgxMjYsIDQsIDEpLCAJfSwgCS8qIEZWY28gNzU2LjQwMzIwMCAqLworCXsgLmZyZXF1ZW5jeSA9IDM4NDY1MjgwMCwJLmluZGV4ID0gUExMVkFMKDE1MSwgNSwgMSksIAl9LCAJLyogRlZjbyA3NjkuMzA1NjAwICovCisJeyAuZnJlcXVlbmN5ID0gMzkxNjA4MDAwLAkuaW5kZXggPSBQTExWQUwoMTc3LCA2LCAxKSwgCX0sIAkvKiBGVmNvIDc4My4yMTYwMDAgKi8KKwl7IC5mcmVxdWVuY3kgPSAzOTYyNjQ5NjAsCS5pbmRleCA9IFBMTFZBTCgxMDksIDMsIDEpLCAJfSwgCS8qIEZWY28gNzkyLjUyOTkyMCAqLworCXsgLmZyZXF1ZW5jeSA9IDQwMjE5MjAwMCwJLmluZGV4ID0gUExMVkFMKDg3LCAyLCAxKSwgCX0sIAkvKiBGVmNvIDgwNC4zODQwMDAgKi8KK307CisKK3N0YXRpYyBpbnQgczNjMjQ0MF9wbGxzMTY5MzQ0X2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBjbGsgKnh0YWxfY2xrOworCXVuc2lnbmVkIGxvbmcgeHRhbDsKKworCXh0YWxfY2xrID0gY2xrX2dldChOVUxMLCAieHRhbCIpOworCWlmIChJU19FUlIoeHRhbF9jbGspKQorCQlyZXR1cm4gUFRSX0VSUih4dGFsX2Nsayk7CisKKwl4dGFsID0gY2xrX2dldF9yYXRlKHh0YWxfY2xrKTsKKwljbGtfcHV0KHh0YWxfY2xrKTsKKworCWlmICh4dGFsID09IDE2OTM0NDAwMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyBQTEwgdGFibGUgZm9yIDE2LjkzNDRNSHogY3J5c3RhbFxuIik7CisJCXJldHVybiBzM2NfcGxsdGFiX3JlZ2lzdGVyKHMzYzI0NDBfcGxsc18xNjkzNDQsCisJCQkJCSAgIEFSUkFZX1NJWkUoczNjMjQ0MF9wbGxzXzE2OTM0NCkpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0MF9wbGxzMTY5MzQ0X2RydiA9IHsKKwkuYWRkCT0gczNjMjQ0MF9wbGxzMTY5MzQ0X2FkZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHMzYzI0NDBfcGxsXzE2OTM0NDAwKHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDBfc3lzY2xhc3MsCisJCQkJICAgICAgJnMzYzI0NDBfcGxsczE2OTM0NF9kcnYpOworCit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQ0MF9wbGxfMTY5MzQ0MDApOworCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0Ml9wbGxzMTY5MzQ0X2RydiA9IHsKKwkuYWRkCT0gczNjMjQ0MF9wbGxzMTY5MzQ0X2FkZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHMzYzI0NDJfcGxsXzE2OTM0NDAwKHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDJfc3lzY2xhc3MsCisJCQkJICAgICAgJnMzYzI0NDJfcGxsczE2OTM0NF9kcnYpOworCit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQ0Ml9wbGxfMTY5MzQ0MDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDQwLmMKaW5kZXggYWMxZjdlYS4uMmI2OGY3ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NDAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0MC5jCkBAIC0yOSw5ICsyOSw5IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2luY2x1ZGUgPHBsYXQvczNjMjQ0MC5oPgogI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDR4Lmg+CiAKIHN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzM2MyNDQwX3N5c2RldiA9IHsKIAkuY2xzCQk9ICZzM2MyNDQwX3N5c2NsYXNzLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NDIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDQyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg4YWQxZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDQyLmMKQEAgLTAsMCArMSwxNjUgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9zM2MyNDQyLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjQ0MiBjb3JlIGFuZCBsb2NrIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CisKKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKworLyogUzNDMjQ0MiBleHRlbmRlZCBjbG9jayBzdXBwb3J0ICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0NDJfY2FtaWZfdXBsbF9yb3VuZChzdHJ1Y3QgY2xrICpjbGssCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwlpbnQgZGl2OworCisJaWYgKHJhdGUgPiBwYXJlbnRfcmF0ZSkKKwkJcmV0dXJuIHBhcmVudF9yYXRlOworCisJZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOworCisJaWYgKGRpdiA9PSAzKQorCQlyZXR1cm4gcGFyZW50X3JhdGUgLyAzOworCisJLyogbm90ZSwgd2UgcmVtb3ZlIHRoZSArLy0gMSBjYWxjdWxhdGlvbnMgZm9yIHRoZSBkaXZpc29yICovCisKKwlkaXYgLz0gMjsKKworCWlmIChkaXYgPCAxKQorCQlkaXYgPSAxOworCWVsc2UgaWYgKGRpdiA+IDE2KQorCQlkaXYgPSAxNjsKKworCXJldHVybiBwYXJlbnRfcmF0ZSAvIChkaXYgKiAyKTsKK30KKworc3RhdGljIGludCBzM2MyNDQyX2NhbWlmX3VwbGxfc2V0cmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGNhbWRpdm4gPSAgX19yYXdfcmVhZGwoUzNDMjQ0MF9DQU1ESVZOKTsKKworCXJhdGUgPSBzM2MyNDQyX2NhbWlmX3VwbGxfcm91bmQoY2xrLCByYXRlKTsKKworCWNhbWRpdm4gJj0gflMzQzI0NDJfQ0FNRElWTl9DQU1DTEtfRElWMzsKKworCWlmIChyYXRlID09IHBhcmVudF9yYXRlKSB7CisJCWNhbWRpdm4gJj0gflMzQzI0NDBfQ0FNRElWTl9DQU1DTEtfU0VMOworCX0gZWxzZSBpZiAoKHBhcmVudF9yYXRlIC8gcmF0ZSkgPT0gMykgeworCQljYW1kaXZuIHw9IFMzQzI0NDBfQ0FNRElWTl9DQU1DTEtfU0VMOworCQljYW1kaXZuIHw9IFMzQzI0NDJfQ0FNRElWTl9DQU1DTEtfRElWMzsKKwl9IGVsc2UgeworCQljYW1kaXZuICY9IH5TM0MyNDQwX0NBTURJVk5fQ0FNQ0xLX01BU0s7CisJCWNhbWRpdm4gfD0gUzNDMjQ0MF9DQU1ESVZOX0NBTUNMS19TRUw7CisJCWNhbWRpdm4gfD0gKCgocGFyZW50X3JhdGUgLyByYXRlKSAvIDIpIC0gMSk7CisJfQorCisJX19yYXdfd3JpdGVsKGNhbWRpdm4sIFMzQzI0NDBfQ0FNRElWTik7CisKKwlyZXR1cm4gMDsKK30KKworLyogRXh0cmEgUzNDMjQ0MiBjbG9ja3MgKi8KKworc3RhdGljIHN0cnVjdCBjbGsgczNjMjQ0Ml9jbGtfY2FtID0geworCS5uYW1lCQk9ICJjYW1pZiIsCisJLmlkCQk9IC0xLAorCS5lbmFibGUJCT0gczNjMjQxMF9jbGtjb25fZW5hYmxlLAorCS5jdHJsYml0CT0gUzNDMjQ0MF9DTEtDT05fQ0FNRVJBLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgczNjMjQ0Ml9jbGtfY2FtX3VwbGwgPSB7CisJLm5hbWUJCT0gImNhbWlmLXVwbGwiLAorCS5pZAkJPSAtMSwKKwkub3BzCQk9ICYoc3RydWN0IGNsa19vcHMpIHsKKwkJLnNldF9yYXRlCT0gczNjMjQ0Ml9jYW1pZl91cGxsX3NldHJhdGUsCisJCS5yb3VuZF9yYXRlCT0gczNjMjQ0Ml9jYW1pZl91cGxsX3JvdW5kLAorCX0sCit9OworCitzdGF0aWMgaW50IHMzYzI0NDJfY2xrX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQoreworCXN0cnVjdCBjbGsgKmNsb2NrX3VwbGw7CisJc3RydWN0IGNsayAqY2xvY2tfaDsKKwlzdHJ1Y3QgY2xrICpjbG9ja19wOworCisJY2xvY2tfcCA9IGNsa19nZXQoTlVMTCwgInBjbGsiKTsKKwljbG9ja19oID0gY2xrX2dldChOVUxMLCAiaGNsayIpOworCWNsb2NrX3VwbGwgPSBjbGtfZ2V0KE5VTEwsICJ1cGxsIik7CisKKwlpZiAoSVNfRVJSKGNsb2NrX3ApIHx8IElTX0VSUihjbG9ja19oKSB8fCBJU19FUlIoY2xvY2tfdXBsbCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTM0MyNDQyOiBGYWlsZWQgdG8gZ2V0IHBhcmVudCBjbG9ja3NcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzM2MyNDQyX2Nsa19jYW0ucGFyZW50ID0gY2xvY2tfaDsKKwlzM2MyNDQyX2Nsa19jYW1fdXBsbC5wYXJlbnQgPSBjbG9ja191cGxsOworCisJczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmczNjMjQ0Ml9jbGtfY2FtKTsKKwlzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZzM2MyNDQyX2Nsa19jYW1fdXBsbCk7CisKKwljbGtfZGlzYWJsZSgmczNjMjQ0Ml9jbGtfY2FtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0Ml9jbGtfZHJpdmVyID0geworCS5hZGQJPSBzM2MyNDQyX2Nsa19hZGQsCit9OworCitzdGF0aWMgX19pbml0IGludCBzM2MyNDQyX2Nsa19pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDJfc3lzY2xhc3MsICZzM2MyNDQyX2Nsa19kcml2ZXIpOworfQorCithcmNoX2luaXRjYWxsKHMzYzI0NDJfY2xrX2luaXQpOworCisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzM2MyNDQyX3N5c2RldiA9IHsKKwkuY2xzCQk9ICZzM2MyNDQyX3N5c2NsYXNzLAorfTsKKworaW50IF9faW5pdCBzM2MyNDQyX2luaXQodm9pZCkKK3sKKwlwcmludGsoIlMzQzI0NDI6IEluaXRpYWxpc2luZyBhcmNoaXRlY3R1cmVcbiIpOworCisJcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmczNjMjQ0Ml9zeXNkZXYpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NHgtY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDR4LWNsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhkOTYxMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDR4LWNsb2NrLmMKQEAgLTAsMCArMSwxMzggQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNHh4LWNsb2NrLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjQ0MC9TM0MyNDQyIENvbW1vbiBjbG9jayBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorCitzdGF0aWMgaW50IHMzYzI0NDBfc2V0cGFyZW50X2FybWNsayhzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwl1bnNpZ25lZCBsb25nIGNhbWRpdm47CisJdW5zaWduZWQgbG9uZyBkdnM7CisKKwlpZiAocGFyZW50ID09ICZjbGtfZikKKwkJZHZzID0gMDsKKwllbHNlIGlmIChwYXJlbnQgPT0gJmNsa19oKQorCQlkdnMgPSBTM0MyNDQwX0NBTURJVk5fRFZTRU47CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNsay0+cGFyZW50ID0gcGFyZW50OworCisJY2FtZGl2biAgPSBfX3Jhd19yZWFkbChTM0MyNDQwX0NBTURJVk4pOworCWNhbWRpdm4gJj0gflMzQzI0NDBfQ0FNRElWTl9EVlNFTjsKKwljYW1kaXZuIHw9IGR2czsKKwlfX3Jhd193cml0ZWwoY2FtZGl2biwgUzNDMjQ0MF9DQU1ESVZOKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNsayBjbGtfYXJtID0geworCS5uYW1lCQk9ICJhcm1jbGsiLAorCS5pZAkJPSAtMSwKKwkub3BzCQk9ICYoc3RydWN0IGNsa19vcHMpIHsKKwkJLnNldF9wYXJlbnQJPSBzM2MyNDQwX3NldHBhcmVudF9hcm1jbGssCisJfSwKK307CisKK3N0YXRpYyBpbnQgczNjMjQ0eF9jbGtfYWRkKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCit7CisJdW5zaWduZWQgbG9uZyBjYW1kaXZuID0gX19yYXdfcmVhZGwoUzNDMjQ0MF9DQU1ESVZOKTsKKwl1bnNpZ25lZCBsb25nIGNsa2Rpdm47CisJc3RydWN0IGNsayAqY2xvY2tfdXBsbDsKKwlpbnQgcmV0OworCisJcHJpbnRrKCJTM0MyNDRYOiBDbG9jayBTdXBwb3J0LCBEVlMgJXNcbiIsCisJICAgICAgIChjYW1kaXZuICYgUzNDMjQ0MF9DQU1ESVZOX0RWU0VOKSA/ICJvbiIgOiAib2ZmIik7CisKKwljbGtfYXJtLnBhcmVudCA9IChjYW1kaXZuICYgUzNDMjQ0MF9DQU1ESVZOX0RWU0VOKSA/ICZjbGtfaCA6ICZjbGtfZjsKKworCXJldCA9IHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa19hcm0pOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUzNDMjRYWDogRmFpbGVkIHRvIGFkZCBhcm1jbGsgKCVkKVxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljbG9ja191cGxsID0gY2xrX2dldChOVUxMLCAidXBsbCIpOworCWlmIChJU19FUlIoY2xvY2tfdXBsbCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTM0MyNDRYOiBGYWlsZWQgdG8gZ2V0IHVwbGwgY2xvY2tcbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwkvKiBjaGVjayByYXRlIG9mIFVQTEwsIGFuZCBpZiBpdCBpcyBuZWFyIDk2TUh6LCB0aGVuIGNoYW5nZQorCSAqIHRvIHVzaW5nIGhhbGYgdGhlIFVQTEwgcmF0ZSBmb3IgdGhlIHN5c3RlbSAqLworCisJaWYgKGNsa19nZXRfcmF0ZShjbG9ja191cGxsKSA+ICg5NCAqIE1IWikpIHsKKwkJY2xrX3VzYl9idXMucmF0ZSA9IGNsa19nZXRfcmF0ZShjbG9ja191cGxsKSAvIDI7CisKKwkJc3Bpbl9sb2NrKCZjbG9ja3NfbG9jayk7CisKKwkJY2xrZGl2biA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLRElWTik7CisJCWNsa2Rpdm4gfD0gUzNDMjQ0MF9DTEtESVZOX1VDTEs7CisJCV9fcmF3X3dyaXRlbChjbGtkaXZuLCBTM0MyNDEwX0NMS0RJVk4pOworCisJCXNwaW5fdW5sb2NrKCZjbG9ja3NfbG9jayk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDQwX2Nsa19kcml2ZXIgPSB7CisJLmFkZAkJPSBzM2MyNDR4X2Nsa19hZGQsCit9OworCitzdGF0aWMgaW50IHMzYzI0NDBfY2xrX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQ0MF9zeXNjbGFzcywgJnMzYzI0NDBfY2xrX2RyaXZlcik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQ0MF9jbGtfaW5pdCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDQyX2Nsa19kcml2ZXIgPSB7CisJLmFkZAkJPSBzM2MyNDR4X2Nsa19hZGQsCit9OworCitzdGF0aWMgaW50IHMzYzI0NDJfY2xrX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQ0Ml9zeXNjbGFzcywgJnMzYzI0NDJfY2xrX2RyaXZlcik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQ0Ml9jbGtfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC1pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDR4LWlycS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC1pcnEuYwpyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1zM2MyNDQwL3MzYzI0NHgtaXJxLmMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0MC9zM2MyNDR4LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNGE5N2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDAvczNjMjQ0eC5jCkBAIC0wLDAgKzEsMTk1IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTYW1zdW5nIFMzQzI0NDAgYW5kIFMzQzI0NDIgTW9iaWxlIENQVSBzdXBwb3J0IChub3QgUzNDMjQ0MykKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLmg+CisKKyNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpb2ouaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZHNjLmg+CisKKyNpbmNsdWRlIDxwbGF0L3MzYzI0MTAuaD4KKyNpbmNsdWRlIDxwbGF0L3MzYzI0NHguaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3BtLmg+CisjaW5jbHVkZSA8cGxhdC9wbGwuaD4KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzM2MyNDR4X2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJSU9ERVNDX0VOVChDTEtQV1IpLAorCUlPREVTQ19FTlQoVElNRVIpLAorCUlPREVTQ19FTlQoV0FUQ0hET0cpLAorfTsKKworLyogdWFydCBpbml0aWFsaXNhdGlvbiAqLworCit2b2lkIF9faW5pdCBzM2MyNDR4X2luaXRfdWFydHMoc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pCit7CisJczNjMjR4eF9pbml0X3VhcnRkZXZzKCJzM2MyNDQwLXVhcnQiLCBzM2MyNDEwX3VhcnRfcmVzb3VyY2VzLCBjZmcsIG5vKTsKK30KKwordm9pZCBfX2luaXQgczNjMjQ0eF9tYXBfaW8odm9pZCkKK3sKKwkvKiByZWdpc3RlciBvdXIgaW8tdGFibGVzICovCisKKwlpb3RhYmxlX2luaXQoczNjMjQ0eF9pb2Rlc2MsIEFSUkFZX1NJWkUoczNjMjQ0eF9pb2Rlc2MpKTsKKworCS8qIHJlbmFtZSBhbnkgcGVyaXBoZXJhbHMgdXNlZCBkaWZmZXJpbmcgZnJvbSB0aGUgczNjMjQxMCAqLworCisJczNjX2RldmljZV9zZGkubmFtZSAgPSAiczNjMjQ0MC1zZGkiOworCXMzY19kZXZpY2VfaTJjMC5uYW1lICA9ICJzM2MyNDQwLWkyYyI7CisJczNjX2RldmljZV9uYW5kLm5hbWUgPSAiczNjMjQ0MC1uYW5kIjsKKwlzM2NfZGV2aWNlX3RzLm5hbWUgPSAiczNjMjQ0MC10cyI7CisJczNjX2RldmljZV91c2JnYWRnZXQubmFtZSA9ICJzM2MyNDQwLXVzYmdhZGdldCI7Cit9CisKK3ZvaWQgX19pbml0X29yX2NwdWZyZXEgczNjMjQ0eF9zZXR1cF9jbG9ja3Modm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICp4dGFsX2NsazsKKwl1bnNpZ25lZCBsb25nIGNsa2RpdjsKKwl1bnNpZ25lZCBsb25nIGNhbWRpdjsKKwl1bnNpZ25lZCBsb25nIHh0YWw7CisJdW5zaWduZWQgbG9uZyBoY2xrLCBmY2xrLCBwY2xrOworCWludCBoZGl2ID0gMTsKKworCXh0YWxfY2xrID0gY2xrX2dldChOVUxMLCAieHRhbCIpOworCXh0YWwgPSBjbGtfZ2V0X3JhdGUoeHRhbF9jbGspOworCWNsa19wdXQoeHRhbF9jbGspOworCisJZmNsayA9IHMzYzI0eHhfZ2V0X3BsbChfX3Jhd19yZWFkbChTM0MyNDEwX01QTExDT04pLCB4dGFsKSAqIDI7CisKKwljbGtkaXYgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0NMS0RJVk4pOworCWNhbWRpdiA9IF9fcmF3X3JlYWRsKFMzQzI0NDBfQ0FNRElWTik7CisKKwkvKiB3b3JrIG91dCBjbG9jayBzY2FsaW5ncyAqLworCisJc3dpdGNoIChjbGtkaXYgJiBTM0MyNDQwX0NMS0RJVk5fSERJVk5fTUFTSykgeworCWNhc2UgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzE6CisJCWhkaXYgPSAxOworCQlicmVhazsKKworCWNhc2UgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzI6CisJCWhkaXYgPSAyOworCQlicmVhazsKKworCWNhc2UgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzRfODoKKwkJaGRpdiA9IChjYW1kaXYgJiBTM0MyNDQwX0NBTURJVk5fSENMSzRfSEFMRikgPyA4IDogNDsKKwkJYnJlYWs7CisKKwljYXNlIFMzQzI0NDBfQ0xLRElWTl9IRElWTl8zXzY6CisJCWhkaXYgPSAoY2FtZGl2ICYgUzNDMjQ0MF9DQU1ESVZOX0hDTEszX0hBTEYpID8gNiA6IDM7CisJCWJyZWFrOworCX0KKworCWhjbGsgPSBmY2xrIC8gaGRpdjsKKwlwY2xrID0gaGNsayAvICgoY2xrZGl2ICYgUzNDMjQ0MF9DTEtESVZOX1BESVZOKSA/IDIgOiAxKTsKKworCS8qIHByaW50IGJyaWVmIHN1bW1hcnkgb2YgY2xvY2tzLCBldGMgKi8KKworCXByaW50aygiUzNDMjQ0WDogY29yZSAlbGQuJTAzbGQgTUh6LCBtZW1vcnkgJWxkLiUwM2xkIE1IeiwgcGVyaXBoZXJhbCAlbGQuJTAzbGQgTUh6XG4iLAorCSAgICAgICBwcmludF9taHooZmNsayksIHByaW50X21oeihoY2xrKSwgcHJpbnRfbWh6KHBjbGspKTsKKworCXMzYzI0eHhfc2V0dXBfY2xvY2tzKGZjbGssIGhjbGssIHBjbGspOworfQorCit2b2lkIF9faW5pdCBzM2MyNDR4X2luaXRfY2xvY2tzKGludCB4dGFsKQoreworCS8qIGluaXRpYWxpc2UgdGhlIGNsb2NrcyBoZXJlLCB0byBhbGxvdyBvdGhlciB0aGluZ3MgbGlrZSB0aGUKKwkgKiBjb25zb2xlIHRvIHVzZSB0aGVtLCBhbmQgdG8gYWRkIG5ldyBvbmVzIGFmdGVyIHRoZSBpbml0aWFsaXNhdGlvbgorCSAqLworCisJczNjMjR4eF9yZWdpc3Rlcl9iYXNlY2xvY2tzKHh0YWwpOworCXMzYzI0NHhfc2V0dXBfY2xvY2tzKCk7CisJczNjMjQxMF9iYXNlY2xrX2FkZCgpOworfQorCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBzM2MyNDR4X3NsZWVwW10gPSB7CisJU0FWRV9JVEVNKFMzQzI0NDBfRFNDMCksCisJU0FWRV9JVEVNKFMzQzI0NDBfRFNDMSksCisJU0FWRV9JVEVNKFMzQzI0NDBfR1BKREFUKSwKKwlTQVZFX0lURU0oUzNDMjQ0MF9HUEpDT04pLAorCVNBVkVfSVRFTShTM0MyNDQwX0dQSlVQKQorfTsKKworc3RhdGljIGludCBzM2MyNDR4X3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXMzY19wbV9kb19zYXZlKHMzYzI0NHhfc2xlZXAsIEFSUkFZX1NJWkUoczNjMjQ0eF9zbGVlcCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0NHhfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJczNjX3BtX2RvX3Jlc3RvcmUoczNjMjQ0eF9zbGVlcCwgQVJSQVlfU0laRShzM2MyNDR4X3NsZWVwKSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIHMzYzI0NHhfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHMzYzI0NHhfcmVzdW1lICBOVUxMCisjZW5kaWYKKworLyogU2luY2UgdGhlIFMzQzI0NDIgYW5kIFMzQzI0NDAgc2hhcmUgIGl0ZW1zLCBwdXQgYm90aCBzeXNjbGFzc2VzIGhlcmUgKi8KKworc3RydWN0IHN5c2Rldl9jbGFzcyBzM2MyNDQwX3N5c2NsYXNzID0geworCS5uYW1lCQk9ICJzM2MyNDQwLWNvcmUiLAorCS5zdXNwZW5kCT0gczNjMjQ0eF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gczNjMjQ0eF9yZXN1bWUKK307CisKK3N0cnVjdCBzeXNkZXZfY2xhc3MgczNjMjQ0Ml9zeXNjbGFzcyA9IHsKKwkubmFtZQkJPSAiczNjMjQ0Mi1jb3JlIiwKKwkuc3VzcGVuZAk9IHMzYzI0NHhfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHMzYzI0NHhfcmVzdW1lCit9OworCisvKiBuZWVkIHRvIHJlZ2lzdGVyIGNsYXNzIGJlZm9yZSB3ZSBhY3R1YWxseSByZWdpc3RlciB0aGUgZGV2aWNlLCBhbmQKKyAqIHdlIGFsc28gbmVlZCB0byBlbnN1cmUgdGhhdCBpdCBoYXMgYmVlbiBpbml0aWFsaXNlZCBiZWZvcmUgYW55IG9mIHRoZQorICogZHJpdmVycyBldmVuIHRyeSB0byB1c2UgaXQgKGV2ZW4gaWYgbm90IG9uIGFuIHMzYzI0NDAgYmFzZWQgc3lzdGVtKQorICogYXMgYSBkcml2ZXIgd2hpY2ggbWF5IHN1cHBvcnQgYm90aCAyNDEwIGFuZCAyNDQwIG1heSB0cnkgYW5kIHVzZSBpdC4KKyovCisKK3N0YXRpYyBpbnQgX19pbml0IHMzYzI0NDBfY29yZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9jbGFzc19yZWdpc3RlcigmczNjMjQ0MF9zeXNjbGFzcyk7Cit9CisKK2NvcmVfaW5pdGNhbGwoczNjMjQ0MF9jb3JlX2luaXQpOworCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDQyX2NvcmVfaW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnMzYzI0NDJfc3lzY2xhc3MpOworfQorCitjb3JlX2luaXRjYWxsKHMzYzI0NDJfY29yZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhkMzgxMTguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwzNyArMCwwIEBACi0jIENvcHlyaWdodCAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcwotIwotIyBMaWNlbnNlZCB1bmRlciBHUEx2MgotCi1jb25maWcgQ1BVX1MzQzI0NDIKLQlib29sCi0JZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKLQlzZWxlY3QgQ1BVX0FSTTkyMFQKLQlzZWxlY3QgUzNDMjQxMF9DTE9DSwotCXNlbGVjdCBTM0MyNDEwX0dQSU8KLQlzZWxlY3QgUzNDMjQxMF9QTSBpZiBQTQotCXNlbGVjdCBDUFVfUzNDMjQ0WAotCXNlbGVjdCBDUFVfTExTRVJJQUxfUzNDMjQ0MAotCWhlbHAKLQkgIFN1cHBvcnQgZm9yIFMzQzI0NDIgU2Ftc3VuZyBNb2JpbGUgQ1BVIGJhc2VkIHN5c3RlbXMuCi0KLQotbWVudSAiUzNDMjQ0MiBNYWNoaW5lcyIKLQotY29uZmlnIFNNREsyNDQwX0NQVTI0NDIKLQlib29sICJTTURNMjQ0MCB3aXRoIFMzQzI0NDIgQ1BVIG1vZHVsZSIKLQlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQ0MAotCXNlbGVjdCBDUFVfUzNDMjQ0MgotCi1jb25maWcgTUFDSF9ORU8xOTczX0dUQTAyCi0JYm9vbCAiT3Blbm1va28gR1RBMDIgLyBGcmVlcnVubmVyIHBob25lIgotCXNlbGVjdCBDUFVfUzNDMjQ0MgotCXNlbGVjdCBNRkRfUENGNTA2MzMKLQlzZWxlY3QgUENGNTA2MzNfR1BJTwotCXNlbGVjdCBJMkMKLQlzZWxlY3QgUE9XRVJfU1VQUExZCi0Jc2VsZWN0IE1BQ0hfTkVPMTk3MwotCXNlbGVjdCBTM0MyNDEwX1BXTQotCWhlbHAKLQkgICBTYXkgWSBoZXJlIGlmIHlvdSBhcmUgdXNpbmcgdGhlIE9wZW5tb2tvIEdUQTAyIC8gRnJlZXJ1bm5lciBHU00gUGhvbmUKLQotZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYTE5MTEzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDE4ICswLDAgQEAKLSMgYXJjaC9hcm0vbWFjaC1zM2MyNDQyL01ha2VmaWxlCi0jCi0jIENvcHlyaWdodCAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcwotIwotIyBMaWNlbnNlZCB1bmRlciBHUEx2MgotCi1vYmoteQkJCQk6PQotb2JqLW0JCQkJOj0KLW9iai1uCQkJCTo9Ci1vYmotCQkJCTo9Ci0KLW9iai0kKENPTkZJR19DUFVfUzNDMjQ0MikJKz0gczNjMjQ0Mi5vCi1vYmotJChDT05GSUdfQ1BVX1MzQzI0NDIpCSs9IGNsb2NrLm8KLQotb2JqLSQoQ09ORklHX01BQ0hfTkVPMTk3M19HVEEwMikgKz0gbWFjaC1ndGEwMi5vCi0KLSMgTWFjaGluZSBzdXBwb3J0Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL2Nsb2NrLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhMWFhMWYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL2Nsb2NrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNTEgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL2Nsb2NrLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogUzNDMjQ0MiBDbG9jayBzdXBwb3J0Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgotCi0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0KLS8qIFMzQzI0NDIgZXh0ZW5kZWQgY2xvY2sgc3VwcG9ydCAqLwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNDQyX2NhbWlmX3VwbGxfcm91bmQoc3RydWN0IGNsayAqY2xrLAotCQkJCQkgICAgICB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JaW50IGRpdjsKLQotCWlmIChyYXRlID4gcGFyZW50X3JhdGUpCi0JCXJldHVybiBwYXJlbnRfcmF0ZTsKLQotCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKLQotCWlmIChkaXYgPT0gMykKLQkJcmV0dXJuIHBhcmVudF9yYXRlIC8gMzsKLQotCS8qIG5vdGUsIHdlIHJlbW92ZSB0aGUgKy8tIDEgY2FsY3VsYXRpb25zIGZvciB0aGUgZGl2aXNvciAqLwotCi0JZGl2IC89IDI7Ci0KLQlpZiAoZGl2IDwgMSkKLQkJZGl2ID0gMTsKLQllbHNlIGlmIChkaXYgPiAxNikKLQkJZGl2ID0gMTY7Ci0KLQlyZXR1cm4gcGFyZW50X3JhdGUgLyAoZGl2ICogMik7Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjQ0Ml9jYW1pZl91cGxsX3NldHJhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JdW5zaWduZWQgbG9uZyBjYW1kaXZuID0gIF9fcmF3X3JlYWRsKFMzQzI0NDBfQ0FNRElWTik7Ci0KLQlyYXRlID0gczNjMjQ0Ml9jYW1pZl91cGxsX3JvdW5kKGNsaywgcmF0ZSk7Ci0KLQljYW1kaXZuICY9IH5TM0MyNDQyX0NBTURJVk5fQ0FNQ0xLX0RJVjM7Ci0KLQlpZiAocmF0ZSA9PSBwYXJlbnRfcmF0ZSkgewotCQljYW1kaXZuICY9IH5TM0MyNDQwX0NBTURJVk5fQ0FNQ0xLX1NFTDsKLQl9IGVsc2UgaWYgKChwYXJlbnRfcmF0ZSAvIHJhdGUpID09IDMpIHsKLQkJY2FtZGl2biB8PSBTM0MyNDQwX0NBTURJVk5fQ0FNQ0xLX1NFTDsKLQkJY2FtZGl2biB8PSBTM0MyNDQyX0NBTURJVk5fQ0FNQ0xLX0RJVjM7Ci0JfSBlbHNlIHsKLQkJY2FtZGl2biAmPSB+UzNDMjQ0MF9DQU1ESVZOX0NBTUNMS19NQVNLOwotCQljYW1kaXZuIHw9IFMzQzI0NDBfQ0FNRElWTl9DQU1DTEtfU0VMOwotCQljYW1kaXZuIHw9ICgoKHBhcmVudF9yYXRlIC8gcmF0ZSkgLyAyKSAtIDEpOwotCX0KLQotCV9fcmF3X3dyaXRlbChjYW1kaXZuLCBTM0MyNDQwX0NBTURJVk4pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIEV4dHJhIFMzQzI0NDIgY2xvY2tzICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHMzYzI0NDJfY2xrX2NhbSA9IHsKLQkubmFtZQkJPSAiY2FtaWYiLAotCS5pZAkJPSAtMSwKLQkuZW5hYmxlCQk9IHMzYzI0MTBfY2xrY29uX2VuYWJsZSwKLQkuY3RybGJpdAk9IFMzQzI0NDBfQ0xLQ09OX0NBTUVSQSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIHMzYzI0NDJfY2xrX2NhbV91cGxsID0gewotCS5uYW1lCQk9ICJjYW1pZi11cGxsIiwKLQkuaWQJCT0gLTEsCi0JLnNldF9yYXRlCT0gczNjMjQ0Ml9jYW1pZl91cGxsX3NldHJhdGUsCi0JLnJvdW5kX3JhdGUJPSBzM2MyNDQyX2NhbWlmX3VwbGxfcm91bmQsCi19OwotCi1zdGF0aWMgaW50IHMzYzI0NDJfY2xrX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQotewotCXN0cnVjdCBjbGsgKmNsb2NrX3VwbGw7Ci0Jc3RydWN0IGNsayAqY2xvY2tfaDsKLQlzdHJ1Y3QgY2xrICpjbG9ja19wOwotCi0JY2xvY2tfcCA9IGNsa19nZXQoTlVMTCwgInBjbGsiKTsKLQljbG9ja19oID0gY2xrX2dldChOVUxMLCAiaGNsayIpOwotCWNsb2NrX3VwbGwgPSBjbGtfZ2V0KE5VTEwsICJ1cGxsIik7Ci0KLQlpZiAoSVNfRVJSKGNsb2NrX3ApIHx8IElTX0VSUihjbG9ja19oKSB8fCBJU19FUlIoY2xvY2tfdXBsbCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJTM0MyNDQyOiBGYWlsZWQgdG8gZ2V0IHBhcmVudCBjbG9ja3NcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlzM2MyNDQyX2Nsa19jYW0ucGFyZW50ID0gY2xvY2tfaDsKLQlzM2MyNDQyX2Nsa19jYW1fdXBsbC5wYXJlbnQgPSBjbG9ja191cGxsOwotCi0JczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmczNjMjQ0Ml9jbGtfY2FtKTsKLQlzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZzM2MyNDQyX2Nsa19jYW1fdXBsbCk7Ci0KLQljbGtfZGlzYWJsZSgmczNjMjQ0Ml9jbGtfY2FtKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0Ml9jbGtfZHJpdmVyID0gewotCS5hZGQJPSBzM2MyNDQyX2Nsa19hZGQsCi19OwotCi1zdGF0aWMgX19pbml0IGludCBzM2MyNDQyX2Nsa19pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDJfc3lzY2xhc3MsICZzM2MyNDQyX2Nsa19kcml2ZXIpOwotfQotCi1hcmNoX2luaXRjYWxsKHMzYzI0NDJfY2xrX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL21hY2gtZ3RhMDIuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9tYWNoLWd0YTAyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiNGEzYTAuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL21hY2gtZ3RhMDIuYworKysgL2Rldi9udWxsCkBAIC0xLDY0OCArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDQyL21hY2gtZ3RhMDIuYwotICoKLSAqIFMzQzI0NDIgTWFjaGluZSBTdXBwb3J0IGZvciBPcGVubW9rbyBHVEEwMiAvIEZyZWVSdW5uZXIuCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA2LTIwMDkgYnkgT3Blbm1va28sIEluYy4KLSAqIEF1dGhvcnM6IEhhcmFsZCBXZWx0ZSA8bGFmb3JnZUBvcGVubW9rby5vcmc+Ci0gKiAgICAgICAgICBBbmR5IEdyZWVuIDxhbmR5QG9wZW5tb2tvLm9yZz4KLSAqICAgICAgICAgIFdlcm5lciBBbG1lc2JlcmdlciA8d2VybmVyQG9wZW5tb2tvLm9yZz4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCi0gKiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKLSAqIE1BIDAyMTExLTEzMDcgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLQotI2luY2x1ZGUgPGxpbnV4L21tYy9ob3N0Lmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9tZmQvcGNmNTA2MzMvY29yZS5oPgotI2luY2x1ZGUgPGxpbnV4L21mZC9wY2Y1MDYzMy9tYmMuaD4KLSNpbmNsdWRlIDxsaW51eC9tZmQvcGNmNTA2MzMvYWRjLmg+Ci0jaW5jbHVkZSA8bGludXgvbWZkL3BjZjUwNjMzL2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9tZmQvcGNmNTA2MzMvcG1pYy5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtaXJxLmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpb2ouaD4KLSNpbmNsdWRlIDxtYWNoL2ZiLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL3NwaS5oPgotI2luY2x1ZGUgPG1hY2gvc3BpLWdwaW8uaD4KLSNpbmNsdWRlIDxwbGF0L3VzYi1jb250cm9sLmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLW1lbS5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLQotI2luY2x1ZGUgPG1hY2gvZ3RhMDIuaD4KLQotI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KLSNpbmNsdWRlIDxwbGF0L25hbmQuaD4KLSNpbmNsdWRlIDxwbGF0L2RldnMuaD4KLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgotI2luY2x1ZGUgPHBsYXQvcG0uaD4KLSNpbmNsdWRlIDxwbGF0L3VkYy5oPgotI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KLSNpbmNsdWRlIDxwbGF0L2lpYy5oPgotCi1zdGF0aWMgc3RydWN0IHBjZjUwNjMzICpndGEwMl9wY2Y7Ci0KLS8qCi0gKiBUaGlzIGdldHMgY2FsbGVkIGV2ZXJ5IDFtcyB3aGVuIHdlIHBhbmljZWQuCi0gKi8KLQotc3RhdGljIGxvbmcgZ3RhMDJfcGFuaWNfYmxpbmsobG9uZyBjb3VudCkKLXsKLQlsb25nIGRlbGF5ID0gMDsKLQlzdGF0aWMgbG9uZyBsYXN0X2JsaW5rOwotCXN0YXRpYyBjaGFyIGxlZDsKLQotCS8qIEZhc3QgYmxpbms6IDIwMG1zIHBlcmlvZC4gKi8KLQlpZiAoY291bnQgLSBsYXN0X2JsaW5rIDwgMTAwKQotCQlyZXR1cm4gMDsKLQotCWxlZCBePSAxOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChHVEEwMl9HUElPX0FVWF9MRUQsIGxlZCk7Ci0KLQlsYXN0X2JsaW5rID0gY291bnQ7Ci0KLQlyZXR1cm4gZGVsYXk7Ci19Ci0KLQotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBndGEwMl9pb2Rlc2NbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwJPSAweGUwMDAwMDAwLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDMjQxMF9DUzMgKyAweDAxMDAwMDAwKSwKLQkJLmxlbmd0aAkJPSBTWl8xTSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfSwKLX07Ci0KLSNkZWZpbmUgVUNPTiAoUzNDMjQxMF9VQ09OX0RFRkFVTFQgfCBTM0MyNDQzX1VDT05fUlhFUlJfSVJRRU4pCi0jZGVmaW5lIFVMQ09OIChTM0MyNDEwX0xDT05fQ1M4IHwgUzNDMjQxMF9MQ09OX1BOT05FIHwgUzNDMjQxMF9MQ09OX1NUT1BCKQotI2RlZmluZSBVRkNPTiAoUzNDMjQxMF9VRkNPTl9SWFRSSUc4IHwgUzNDMjQxMF9VRkNPTl9GSUZPTU9ERSkKLQotc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgZ3RhMDJfdWFydGNmZ3NbXSA9IHsKLQlbMF0gPSB7Ci0JCS5od3BvcnQJCT0gMCwKLQkJLmZsYWdzCQk9IDAsCi0JCS51Y29uCQk9IFVDT04sCi0JCS51bGNvbgkJPSBVTENPTiwKLQkJLnVmY29uCQk9IFVGQ09OLAotCX0sCi0JWzFdID0gewotCQkuaHdwb3J0CQk9IDEsCi0JCS5mbGFncwkJPSAwLAotCQkudWNvbgkJPSBVQ09OLAotCQkudWxjb24JCT0gVUxDT04sCi0JCS51ZmNvbgkJPSBVRkNPTiwKLQl9LAotCVsyXSA9IHsKLQkJLmh3cG9ydAkJPSAyLAotCQkuZmxhZ3MJCT0gMCwKLQkJLnVjb24JCT0gVUNPTiwKLQkJLnVsY29uCQk9IFVMQ09OLAotCQkudWZjb24JCT0gVUZDT04sCi0JfSwKLX07Ci0KLSNpZmRlZiBDT05GSUdfQ0hBUkdFUl9QQ0Y1MDYzMwotLyoKLSAqIE9uIEdUQTAyIHRoZSAxQSBjaGFyZ2VyIGZlYXR1cmVzIGEgNDhLIHJlc2lzdG9yIHRvIDBWIG9uIHRoZSBJRCBwaW4uCi0gKiBXZSB1c2UgdGhpcyB0byByZWNvZ25pemUgdGhhdCB3ZSBjYW4gcHVsbCAxQSBmcm9tIHRoZSBVU0Igc29ja2V0LgotICoKLSAqIFRoZXNlIGNvbnN0YW50cyBhcmUgdGhlIG1lYXN1cmVkIHBjZjUwNjMzIEFEQyBsZXZlbHMgd2l0aCB0aGUgMUEKLSAqIGNoYXJnZXIgLyA0OEsgcmVzaXN0b3IsIGFuZCB3aXRoIG5vIHB1bGxkb3duIHJlc2lzdG9yLgotICovCi0KLSNkZWZpbmUgQURDX05PTV9DSEdfREVURUNUXzFBIDYKLSNkZWZpbmUgQURDX05PTV9DSEdfREVURUNUX1VTQiA0MwotCi1zdGF0aWMgdm9pZAotZ3RhMDJfY29uZmlndXJlX3BtdV9mb3JfY2hhcmdlcihzdHJ1Y3QgcGNmNTA2MzMgKnBjZiwgdm9pZCAqdW51c2VkLCBpbnQgcmVzKQotewotCWludCAgbWE7Ci0KLQkvKiBJbnRlcnByZXQgY2hhcmdlciB0eXBlICovCi0JaWYgKHJlcyA8ICgoQURDX05PTV9DSEdfREVURUNUX1VTQiArIEFEQ19OT01fQ0hHX0RFVEVDVF8xQSkgLyAyKSkgewotCi0JCS8qCi0JCSAqIFNhbml0eSAtIHN0b3AgR1BPIGRyaXZpbmcgb3V0IG5vdyB0aGF0IHdlIGhhdmUgYSAxQSBjaGFyZ2VyCi0JCSAqIEdQTyBjb250cm9scyBVU0IgSG9zdCBwb3dlciBnZW5lcmF0aW9uIG9uIEdUQTAyCi0JCSAqLwotCQlwY2Y1MDYzM19ncGlvX3NldChwY2YsIFBDRjUwNjMzX0dQTywgMCk7Ci0KLQkJbWEgPSAxMDAwOwotCX0gZWxzZQotCQltYSA9IDEwMDsKLQotCXBjZjUwNjMzX21iY191c2JfY3VybGltX3NldChwY2YsIG1hKTsKLX0KLQotc3RhdGljIHN0cnVjdCBkZWxheWVkX3dvcmsgZ3RhMDJfY2hhcmdlcl93b3JrOwotc3RhdGljIGludCBndGEwMl91c2JfdmJ1c19kcmF3OwotCi1zdGF0aWMgdm9pZCBndGEwMl9jaGFyZ2VyX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0JaWYgKGd0YTAyX3VzYl92YnVzX2RyYXcpIHsKLQkJcGNmNTA2MzNfbWJjX3VzYl9jdXJsaW1fc2V0KGd0YTAyX3BjZiwgZ3RhMDJfdXNiX3ZidXNfZHJhdyk7Ci0JCXJldHVybjsKLQl9Ci0KLSNpZmRlZiBDT05GSUdfUENGNTA2MzNfQURDCi0JcGNmNTA2MzNfYWRjX2FzeW5jX3JlYWQoZ3RhMDJfcGNmLAotCQkJCVBDRjUwNjMzX0FEQ0MxX01VWF9BRENJTjEsCi0JCQkJUENGNTA2MzNfQURDQzFfQVZFUkFHRV8xNiwKLQkJCQlndGEwMl9jb25maWd1cmVfcG11X2Zvcl9jaGFyZ2VyLAotCQkJCU5VTEwpOwotI2Vsc2UKLQkvKgotCSAqIElmIHRoZSBQQ0Y1MDYzMyBBREMgaXMgZGlzYWJsZWQgd2UgZmFsbGJhY2sgdG8gYQotCSAqIDEwMG1BIGxpbWl0IGZvciBzYWZldHkuCi0JICovCi0JcGNmNTA2MzNfbWJjX3VzYl9jdXJsaW1fc2V0KHBjZiwgMTAwKTsKLSNlbmRpZgotfQotCi0jZGVmaW5lIEdUQTAyX0NIQVJHRVJfQ09ORklHVVJFX1RJTUVPVVQgKCgzMDAwICogSFopIC8gMTAwMCkKLQotc3RhdGljIHZvaWQgZ3RhMDJfcG11X2V2ZW50X2NhbGxiYWNrKHN0cnVjdCBwY2Y1MDYzMyAqcGNmLCBpbnQgaXJxKQotewotCWlmIChpcnEgPT0gUENGNTA2MzNfSVJRX1VTQklOUykgewotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmd0YTAyX2NoYXJnZXJfd29yaywKLQkJCQkgICAgICBHVEEwMl9DSEFSR0VSX0NPTkZJR1VSRV9USU1FT1VUKTsKLQotCQlyZXR1cm47Ci0JfQotCi0JaWYgKGlycSA9PSBQQ0Y1MDYzM19JUlFfVVNCUkVNKSB7Ci0JCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZ3RhMDJfY2hhcmdlcl93b3JrKTsKLQkJZ3RhMDJfdXNiX3ZidXNfZHJhdyA9IDA7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBndGEwMl91ZGNfdmJ1c19kcmF3KHVuc2lnbmVkIGludCBtYSkKLXsKLQlpZiAoIWd0YTAyX3BjZikKLQkJcmV0dXJuOwotCi0JZ3RhMDJfdXNiX3ZidXNfZHJhdyA9IG1hOwotCi0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZndGEwMl9jaGFyZ2VyX3dvcmssCi0JCQkgICAgICBHVEEwMl9DSEFSR0VSX0NPTkZJR1VSRV9USU1FT1VUKTsKLX0KLSNlbHNlIC8qICFDT05GSUdfQ0hBUkdFUl9QQ0Y1MDYzMyAqLwotI2RlZmluZSBndGEwMl9wbXVfZXZlbnRfY2FsbGJhY2sJTlVMTAotI2RlZmluZSBndGEwMl91ZGNfdmJ1c19kcmF3CQlOVUxMCi0jZW5kaWYKLQotLyoKLSAqIFRoaXMgaXMgY2FsbGVkIHdoZW4gcGM1MDYzMyBpcyBwcm9iZWQsIHVuZm9ydHVuYXRlbHkgcXVpdGUgbGF0ZSBpbiB0aGUKLSAqIGRheSBzaW5jZSBpdCBpcyBhbiBJMkMgYnVzIGRldmljZS4gSGVyZSB3ZSBjYW4gYmVsYXRlZGx5IGRlZmluZSBzb21lCi0gKiBwbGF0Zm9ybSBkZXZpY2VzIHdpdGggdGhlIGFkdmFudGFnZSB0aGF0IHdlIGNhbiBtYXJrIHRoZSBwY2Y1MDYzMyBhcyB0aGUKLSAqIHBhcmVudC4gVGhpcyBtYWtlcyB0aGVtIGdldCBzdXNwZW5kZWQgYW5kIHJlc3VtZWQgd2l0aCB0aGVpciBwYXJlbnQKLSAqIHRoZSBwY2Y1MDYzMyBzdGlsbCBhcm91bmQuCi0gKi8KLQotc3RhdGljIHZvaWQgZ3RhMDJfcG11X2F0dGFjaF9jaGlsZF9kZXZpY2VzKHN0cnVjdCBwY2Y1MDYzMyAqcGNmKTsKLQotCi1zdGF0aWMgY2hhciAqZ3RhMDJfYmF0dGVyaWVzW10gPSB7Ci0JImJhdHRlcnkiLAotfTsKLQotc3RydWN0IHBjZjUwNjMzX3BsYXRmb3JtX2RhdGEgZ3RhMDJfcGNmX3BkYXRhID0gewotCS5yZXN1bWVycyA9IHsKLQkJWzBdID0JUENGNTA2MzNfSU5UMV9VU0JJTlMgfAotCQkJUENGNTA2MzNfSU5UMV9VU0JSRU0gfAotCQkJUENGNTA2MzNfSU5UMV9BTEFSTSwKLQkJWzFdID0JUENGNTA2MzNfSU5UMl9PTktFWUYsCi0JCVsyXSA9CVBDRjUwNjMzX0lOVDNfT05LRVkxUywKLQkJWzNdID0JUENGNTA2MzNfSU5UNF9MT1dTWVMgfAotCQkJUENGNTA2MzNfSU5UNF9MT1dCQVQgfAotCQkJUENGNTA2MzNfSU5UNF9ISUdIVE1QLAotCX0sCi0KLQkuYmF0dGVyaWVzID0gZ3RhMDJfYmF0dGVyaWVzLAotCS5udW1fYmF0dGVyaWVzID0gQVJSQVlfU0laRShndGEwMl9iYXR0ZXJpZXMpLAotCi0JLmNoYXJnZXJfcmVmZXJlbmNlX2N1cnJlbnRfbWEgPSAxMDAwLAotCi0JLnJlZ19pbml0X2RhdGEgPSB7Ci0JCVtQQ0Y1MDYzM19SRUdVTEFUT1JfQVVUT10gPSB7Ci0JCQkuY29uc3RyYWludHMgPSB7Ci0JCQkJLm1pbl91ViA9IDMzMDAwMDAsCi0JCQkJLm1heF91ViA9IDMzMDAwMDAsCi0JCQkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCi0JCQkJLmFsd2F5c19vbiA9IDEsCi0JCQkJLmFwcGx5X3VWID0gMSwKLQkJCQkuc3RhdGVfbWVtID0gewotCQkJCQkuZW5hYmxlZCA9IDEsCi0JCQkJfSwKLQkJCX0sCi0JCX0sCi0JCVtQQ0Y1MDYzM19SRUdVTEFUT1JfRE9XTjFdID0gewotCQkJLmNvbnN0cmFpbnRzID0gewotCQkJCS5taW5fdVYgPSAxMzAwMDAwLAotCQkJCS5tYXhfdVYgPSAxNjAwMDAwLAotCQkJCS52YWxpZF9tb2Rlc19tYXNrID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAotCQkJCS5hbHdheXNfb24gPSAxLAotCQkJCS5hcHBseV91ViA9IDEsCi0JCQl9LAotCQl9LAotCQlbUENGNTA2MzNfUkVHVUxBVE9SX0RPV04yXSA9IHsKLQkJCS5jb25zdHJhaW50cyA9IHsKLQkJCQkubWluX3VWID0gMTgwMDAwMCwKLQkJCQkubWF4X3VWID0gMTgwMDAwMCwKLQkJCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKLQkJCQkuYXBwbHlfdVYgPSAxLAotCQkJCS5hbHdheXNfb24gPSAxLAotCQkJCS5zdGF0ZV9tZW0gPSB7Ci0JCQkJCS5lbmFibGVkID0gMSwKLQkJCQl9LAotCQkJfSwKLQkJfSwKLQkJW1BDRjUwNjMzX1JFR1VMQVRPUl9IQ0xET10gPSB7Ci0JCQkuY29uc3RyYWludHMgPSB7Ci0JCQkJLm1pbl91ViA9IDIwMDAwMDAsCi0JCQkJLm1heF91ViA9IDMzMDAwMDAsCi0JCQkJLnZhbGlkX21vZGVzX21hc2sgPSBSRUdVTEFUT1JfTU9ERV9OT1JNQUwsCi0JCQkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFLAotCQkJCS5hbHdheXNfb24gPSAxLAotCQkJfSwKLQkJfSwKLQkJW1BDRjUwNjMzX1JFR1VMQVRPUl9MRE8xXSA9IHsKLQkJCS5jb25zdHJhaW50cyA9IHsKLQkJCQkubWluX3VWID0gMzMwMDAwMCwKLQkJCQkubWF4X3VWID0gMzMwMDAwMCwKLQkJCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKLQkJCQkuYXBwbHlfdVYgPSAxLAotCQkJCS5zdGF0ZV9tZW0gPSB7Ci0JCQkJCS5lbmFibGVkID0gMCwKLQkJCQl9LAotCQkJfSwKLQkJfSwKLQkJW1BDRjUwNjMzX1JFR1VMQVRPUl9MRE8yXSA9IHsKLQkJCS5jb25zdHJhaW50cyA9IHsKLQkJCQkubWluX3VWID0gMzMwMDAwMCwKLQkJCQkubWF4X3VWID0gMzMwMDAwMCwKLQkJCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKLQkJCQkuYXBwbHlfdVYgPSAxLAotCQkJfSwKLQkJfSwKLQkJW1BDRjUwNjMzX1JFR1VMQVRPUl9MRE8zXSA9IHsKLQkJCS5jb25zdHJhaW50cyA9IHsKLQkJCQkubWluX3VWID0gMzAwMDAwMCwKLQkJCQkubWF4X3VWID0gMzAwMDAwMCwKLQkJCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKLQkJCQkuYXBwbHlfdVYgPSAxLAotCQkJfSwKLQkJfSwKLQkJW1BDRjUwNjMzX1JFR1VMQVRPUl9MRE80XSA9IHsKLQkJCS5jb25zdHJhaW50cyA9IHsKLQkJCQkubWluX3VWID0gMzIwMDAwMCwKLQkJCQkubWF4X3VWID0gMzIwMDAwMCwKLQkJCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKLQkJCQkuYXBwbHlfdVYgPSAxLAotCQkJfSwKLQkJfSwKLQkJW1BDRjUwNjMzX1JFR1VMQVRPUl9MRE81XSA9IHsKLQkJCS5jb25zdHJhaW50cyA9IHsKLQkJCQkubWluX3VWID0gMzAwMDAwMCwKLQkJCQkubWF4X3VWID0gMzAwMDAwMCwKLQkJCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKLQkJCQkuYXBwbHlfdVYgPSAxLAotCQkJCS5zdGF0ZV9tZW0gPSB7Ci0JCQkJCS5lbmFibGVkID0gMSwKLQkJCQl9LAotCQkJfSwKLQkJfSwKLQkJW1BDRjUwNjMzX1JFR1VMQVRPUl9MRE82XSA9IHsKLQkJCS5jb25zdHJhaW50cyA9IHsKLQkJCQkubWluX3VWID0gMzAwMDAwMCwKLQkJCQkubWF4X3VWID0gMzAwMDAwMCwKLQkJCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKLQkJCX0sCi0JCX0sCi0JCVtQQ0Y1MDYzM19SRUdVTEFUT1JfTUVNTERPXSA9IHsKLQkJCS5jb25zdHJhaW50cyA9IHsKLQkJCQkubWluX3VWID0gMTgwMDAwMCwKLQkJCQkubWF4X3VWID0gMTgwMDAwMCwKLQkJCQkudmFsaWRfbW9kZXNfbWFzayA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKLQkJCQkuc3RhdGVfbWVtID0gewotCQkJCQkuZW5hYmxlZCA9IDEsCi0JCQkJfSwKLQkJCX0sCi0JCX0sCi0KLQl9LAotCS5wcm9iZV9kb25lID0gZ3RhMDJfcG11X2F0dGFjaF9jaGlsZF9kZXZpY2VzLAotCS5tYmNfZXZlbnRfY2FsbGJhY2sgPSBndGEwMl9wbXVfZXZlbnRfY2FsbGJhY2ssCi19OwotCi0KLS8qIE5PUiBGbGFzaC4gKi8KLQotI2RlZmluZSBHVEEwMl9GTEFTSF9CQVNFCTB4MTgwMDAwMDAgLyogR0NTMyAqLwotI2RlZmluZSBHVEEwMl9GTEFTSF9TSVpFCTB4MjAwMDAwIC8qIDJNQnl0ZXMgKi8KLQotc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgZ3RhMDJfbm9yX2ZsYXNoX2RhdGEgPSB7Ci0JLndpZHRoCQk9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGd0YTAyX25vcl9mbGFzaF9yZXNvdXJjZSA9IHsKLQkuc3RhcnQJCT0gR1RBMDJfRkxBU0hfQkFTRSwKLQkuZW5kCQk9IEdUQTAyX0ZMQVNIX0JBU0UgKyBHVEEwMl9GTEFTSF9TSVpFIC0gMSwKLQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBndGEwMl9ub3JfZmxhc2ggPSB7Ci0JLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAotCS5pZAkJPSAwLAotCS5kZXYJCT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZndGEwMl9ub3JfZmxhc2hfZGF0YSwKLQl9LAotCS5yZXNvdXJjZQk9ICZndGEwMl9ub3JfZmxhc2hfcmVzb3VyY2UsCi0JLm51bV9yZXNvdXJjZXMJPSAxLAotfTsKLQotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzI0eHhfcHdtX2RldmljZSA9IHsKLQkubmFtZQkJPSAiczNjMjR4eF9wd20iLAotCS5udW1fcmVzb3VyY2VzCT0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gZ3RhMDJfaTJjX2RldnNbXSBfX2luaXRkYXRhID0gewotCXsKLQkJSTJDX0JPQVJEX0lORk8oInBjZjUwNjMzIiwgMHg3MyksCi0JCS5pcnEgPSBHVEEwMl9JUlFfUENGNTA2MzMsCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmd0YTAyX3BjZl9wZGF0YSwKLQl9LAotCXsKLQkJSTJDX0JPQVJEX0lORk8oIndtODc1MyIsIDB4MWEpLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfbmFuZF9zZXQgX19pbml0ZGF0YSBndGEwMl9uYW5kX3NldHNbXSA9IHsKLQlbMF0gPSB7Ci0JCS8qCi0JCSAqIFRoaXMgbmFtZSBpcyBhbHNvIGhhcmQtY29kZWQgaW4gdGhlIGJvb3QgbG9hZGVycywgc28KLQkJICogY2hhbmdpbmcgaXQgd291bGQgd291bGQgcmVxdWlyZSBhbGwgdXNlcnMgdG8gdXBncmFkZQotCQkgKiB0aGVpciBib290IGxvYWRlcnMsIHNvbWUgb2Ygd2hpY2ggYXJlIHN0b3JlZCBpbiBhIE5PUgotCQkgKiB0aGF0IGlzIGNvbnNpZGVyZWQgdG8gYmUgaW1tdXRhYmxlLgotCQkgKi8KLQkJLm5hbWUJCT0gIm5lbzE5NzMtbmFuZCIsCi0JCS5ucl9jaGlwcwk9IDEsCi0JCS5mbGFzaF9iYnQJPSAxLAotCX0sCi19OwotCi0vKgotICogQ2hvb3NlIGEgc2V0IG9mIHRpbWluZ3MgZGVyaXZlZCBmcm9tIFMzQ0AyNDQyQiBNQ1A1NAotICogZGF0YSBzaGVldCAoSzVEMkcxM0FDTS1EMDc1IE1DUCBNZW1vcnkpLgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9uYW5kIF9faW5pdGRhdGEgZ3RhMDJfbmFuZF9pbmZvID0gewotCS50YWNscwkJPSAwLAotCS50d3JwaDAJCT0gMjUsCi0JLnR3cnBoMQkJPSAxNSwKLQkubnJfc2V0cwk9IEFSUkFZX1NJWkUoZ3RhMDJfbmFuZF9zZXRzKSwKLQkuc2V0cwkJPSBndGEwMl9uYW5kX3NldHMsCi19OwotCi0KLXN0YXRpYyB2b2lkIGd0YTAyX3VkY19jb21tYW5kKGVudW0gczNjMjQxMF91ZGNfY21kX2UgY21kKQotewotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTM0MyNDEwX1VEQ19QX0VOQUJMRToKLQkJcHJfZGVidWcoIiVzIFMzQzI0MTBfVURDX1BfRU5BQkxFXG4iLCBfX2Z1bmNfXyk7Ci0JCWdwaW9fZGlyZWN0aW9uX291dHB1dChHVEEwMl9HUElPX1VTQl9QVUxMVVAsIDEpOwotCQlicmVhazsKLQljYXNlIFMzQzI0MTBfVURDX1BfRElTQUJMRToKLQkJcHJfZGVidWcoIiVzIFMzQzI0MTBfVURDX1BfRElTQUJMRVxuIiwgX19mdW5jX18pOwotCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1RBMDJfR1BJT19VU0JfUFVMTFVQLCAwKTsKLQkJYnJlYWs7Ci0JY2FzZSBTM0MyNDEwX1VEQ19QX1JFU0VUOgotCQlwcl9kZWJ1ZygiJXMgUzNDMjQxMF9VRENfUF9SRVNFVFxuIiwgX19mdW5jX18pOwotCQkvKiBGSVhNRTogRG8gc29tZXRoaW5nIGhlcmUuICovCi0JfQotfQotCi0vKiBHZXQgUE1VIHRvIHNldCBVU0IgY3VycmVudCBsaW1pdCBhY2NvcmRpbmdseS4gKi8KLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF91ZGNfbWFjaF9pbmZvIGd0YTAyX3VkY19jZmcgPSB7Ci0JLnZidXNfZHJhdwk9IGd0YTAyX3VkY192YnVzX2RyYXcsCi0JLnVkY19jb21tYW5kCT0gZ3RhMDJfdWRjX2NvbW1hbmQsCi0KLX07Ci0KLQotCi1zdGF0aWMgdm9pZCBndGEwMl9ibF9zZXRfaW50ZW5zaXR5KGludCBpbnRlbnNpdHkpCi17Ci0Jc3RydWN0IHBjZjUwNjMzICpwY2YgPSBndGEwMl9wY2Y7Ci0JaW50IG9sZF9pbnRlbnNpdHkgPSBwY2Y1MDYzM19yZWdfcmVhZChwY2YsIFBDRjUwNjMzX1JFR19MRURPVVQpOwotCi0JLyogV2UgbWFwIDgtYml0IGludGVuc2l0eSB0byA2LWJpdCBpbnRlbnNpdHkgaW4gaGFyZHdhcmUuICovCi0JaW50ZW5zaXR5ID4+PSAyOwotCi0JLyoKLQkgKiBUaGlzIGNhbiBoYXBwZW4gZHVyaW5nLCBlZywgcHJpbnQgb2YgcGFuaWMgb24gYmxhbmtlZCBjb25zb2xlLAotCSAqIGJ1dCB3ZSBjYW4ndCBzZXJ2aWNlIGkyYyB3aXRob3V0IGludGVycnVwdHMgYWN0aXZlLCBzbyBhYm9ydC4KLQkgKi8KLQlpZiAoaW5fYXRvbWljKCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJndGEwMl9ibF9zZXRfaW50ZW5zaXR5IGNhbGxlZCB3aGlsZSBhdG9taWNcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0Jb2xkX2ludGVuc2l0eSA9IHBjZjUwNjMzX3JlZ19yZWFkKHBjZiwgUENGNTA2MzNfUkVHX0xFRE9VVCk7Ci0JaWYgKGludGVuc2l0eSA9PSBvbGRfaW50ZW5zaXR5KQotCQlyZXR1cm47Ci0KLQkvKiBXZSBjYW4ndCBkbyB0aGlzIGFueXdoZXJlIGVsc2UuICovCi0JcGNmNTA2MzNfcmVnX3dyaXRlKHBjZiwgUENGNTA2MzNfUkVHX0xFRERJTSwgNSk7Ci0KLQlpZiAoIShwY2Y1MDYzM19yZWdfcmVhZChwY2YsIFBDRjUwNjMzX1JFR19MRURFTkEpICYgMykpCi0JCW9sZF9pbnRlbnNpdHkgPSAwOwotCi0JLyoKLQkgKiBUaGUgUENGNTA2MzMgY2Fubm90IGhhbmRsZSBMRURPVVQgPSAwIChkYXRhc2hlZXQgcDYwKQotCSAqIGlmIHNlZW4sIHlvdSBoYXZlIHRvIHJlLWVuYWJsZSB0aGUgTEVEIHVuaXQuCi0JICovCi0JaWYgKCFpbnRlbnNpdHkgfHwgIW9sZF9pbnRlbnNpdHkpCi0JCXBjZjUwNjMzX3JlZ193cml0ZShwY2YsIFBDRjUwNjMzX1JFR19MRURFTkEsIDApOwotCi0JLyogSWxsZWdhbCB0byBzZXQgTEVET1VUIHRvIDAuICovCi0JaWYgKCFpbnRlbnNpdHkpCi0JCXBjZjUwNjMzX3JlZ19zZXRfYml0X21hc2socGNmLCBQQ0Y1MDYzM19SRUdfTEVET1VULCAweDNmLCAyKTsKLQllbHNlCi0JCXBjZjUwNjMzX3JlZ19zZXRfYml0X21hc2socGNmLCBQQ0Y1MDYzM19SRUdfTEVET1VULCAweDNmLAotCQkJCQkgIGludGVuc2l0eSk7Ci0KLQlpZiAoaW50ZW5zaXR5KQotCQlwY2Y1MDYzM19yZWdfd3JpdGUocGNmLCBQQ0Y1MDYzM19SRUdfTEVERU5BLCAyKTsKLQotfQotCi1zdGF0aWMgc3RydWN0IGdlbmVyaWNfYmxfaW5mbyBndGEwMl9ibF9pbmZvID0gewotCS5uYW1lCQkJPSAiZ3RhMDItYmwiLAotCS5tYXhfaW50ZW5zaXR5CQk9IDB4ZmYsCi0JLmRlZmF1bHRfaW50ZW5zaXR5CT0gMHhmZiwKLQkuc2V0X2JsX2ludGVuc2l0eQk9IGd0YTAyX2JsX3NldF9pbnRlbnNpdHksCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBndGEwMl9ibF9kZXYgPSB7Ci0JLm5hbWUJCQk9ICJnZW5lcmljLWJsIiwKLQkuaWQJCQk9IDEsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmZ3RhMDJfYmxfaW5mbywKLQl9LAotfTsKLQotCi0KLS8qIFVTQiAqLwotc3RhdGljIHN0cnVjdCBzM2MyNDEwX2hjZF9pbmZvIGd0YTAyX3VzYl9pbmZvID0gewotCS5wb3J0WzBdCT0gewotCQkuZmxhZ3MJPSBTM0NfSENERkxHX1VTRUQsCi0JfSwKLQkucG9ydFsxXQk9IHsKLQkJLmZsYWdzCT0gMCwKLQl9LAotfTsKLQotCi1zdGF0aWMgdm9pZCBfX2luaXQgZ3RhMDJfbWFwX2lvKHZvaWQpCi17Ci0JczNjMjR4eF9pbml0X2lvKGd0YTAyX2lvZGVzYywgQVJSQVlfU0laRShndGEwMl9pb2Rlc2MpKTsKLQlzM2MyNHh4X2luaXRfY2xvY2tzKDEyMDAwMDAwKTsKLQlzM2MyNHh4X2luaXRfdWFydHMoZ3RhMDJfdWFydGNmZ3MsIEFSUkFZX1NJWkUoZ3RhMDJfdWFydGNmZ3MpKTsKLX0KLQotCi0vKiBUaGVzZSBhcmUgdGhlIGd1eXMgdGhhdCBkb24ndCBuZWVkIHRvIGJlIGNoaWxkcmVuIG9mIFBNVS4gKi8KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmd0YTAyX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZzM2NfZGV2aWNlX3VzYiwKLQkmczNjX2RldmljZV93ZHQsCi0JJnMzY19kZXZpY2Vfc2RpLAotCSZzM2NfZGV2aWNlX3VzYmdhZGdldCwKLQkmczNjX2RldmljZV9uYW5kLAotCSZndGEwMl9ub3JfZmxhc2gsCi0JJnMzYzI0eHhfcHdtX2RldmljZSwKLQkmczNjX2RldmljZV9paXMsCi0JJnMzY19kZXZpY2VfaTJjMCwKLX07Ci0KLS8qIFRoZXNlIGd1eXMgRE8gbmVlZCB0byBiZSBjaGlsZHJlbiBvZiBQTVUuICovCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpndGEwMl9kZXZpY2VzX3BtdV9jaGlsZHJlbltdID0gewotCSZndGEwMl9ibF9kZXYsCi19OwotCi0KLS8qCi0gKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHBjNTA2MzMgaXMgcHJvYmVkLCBxdWl0ZSBsYXRlIGluIHRoZSBkYXkgc2luY2UgaXQgaXMgYW4KLSAqIEkyQyBidXMgZGV2aWNlLiAgSGVyZSB3ZSBjYW4gZGVmaW5lIHBsYXRmb3JtIGRldmljZXMgd2l0aCB0aGUgYWR2YW50YWdlIHRoYXQKLSAqIHdlIGNhbiBtYXJrIHRoZSBwY2Y1MDYzMyBhcyB0aGUgcGFyZW50LiAgVGhpcyBtYWtlcyB0aGVtIGdldCBzdXNwZW5kZWQgYW5kCi0gKiByZXN1bWVkIHdpdGggdGhlaXIgcGFyZW50IHRoZSBwY2Y1MDYzMyBzdGlsbCBhcm91bmQuICBBbGwgZGV2aWNlcyB3aG9zZQotICogb3BlcmF0aW9uIGRlcGVuZHMgb24gc29tZXRoaW5nIGZyb20gcGNmNTA2MzMgbXVzdCBoYXZlIHRoaXMgcmVsYXRpb25zaGlwCi0gKiBtYWRlIGV4cGxpY2l0IGxpa2UgdGhpcywgb3Igc3VzcGVuZCBhbmQgcmVzdW1lIHdpbGwgYmVjb21lIGFuIHVucmVsaWFibGUKLSAqIGhlbGx3b3JsZC4KLSAqLwotCi1zdGF0aWMgdm9pZCBndGEwMl9wbXVfYXR0YWNoX2NoaWxkX2RldmljZXMoc3RydWN0IHBjZjUwNjMzICpwY2YpCi17Ci0JaW50IG47Ci0KLQkvKiBHcmFiIGEgY29weSBvZiB0aGUgbm93IHByb2JlZCBQTVUgcG9pbnRlci4gKi8KLQlndGEwMl9wY2YgPSBwY2Y7Ci0KLQlmb3IgKG4gPSAwOyBuIDwgQVJSQVlfU0laRShndGEwMl9kZXZpY2VzX3BtdV9jaGlsZHJlbik7IG4rKykKLQkJZ3RhMDJfZGV2aWNlc19wbXVfY2hpbGRyZW5bbl0tPmRldi5wYXJlbnQgPSBwY2YtPmRldjsKLQotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGd0YTAyX2RldmljZXNfcG11X2NoaWxkcmVuLAotCQkJICAgICBBUlJBWV9TSVpFKGd0YTAyX2RldmljZXNfcG11X2NoaWxkcmVuKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGd0YTAyX3Bvd2Vyb2ZmKHZvaWQpCi17Ci0JcGNmNTA2MzNfcmVnX3NldF9iaXRfbWFzayhndGEwMl9wY2YsIFBDRjUwNjMzX1JFR19PT0NTSERXTiwgMSwgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBndGEwMl9tYWNoaW5lX2luaXQodm9pZCkKLXsKLQkvKiBTZXQgdGhlIHBhbmljIGNhbGxiYWNrIHRvIG1ha2UgQVVYIExFRCBibGluayBhdCB+NUh6LiAqLwotCXBhbmljX2JsaW5rID0gZ3RhMDJfcGFuaWNfYmxpbms7Ci0KLQlzM2NfcG1faW5pdCgpOwotCi0jaWZkZWYgQ09ORklHX0NIQVJHRVJfUENGNTA2MzMKLQlJTklUX0RFTEFZRURfV09SSygmZ3RhMDJfY2hhcmdlcl93b3JrLCBndGEwMl9jaGFyZ2VyX3dvcmtlcik7Ci0jZW5kaWYKLQotCXMzY19kZXZpY2VfdXNiLmRldi5wbGF0Zm9ybV9kYXRhID0gJmd0YTAyX3VzYl9pbmZvOwotCi0JczNjMjR4eF91ZGNfc2V0X3BsYXRkYXRhKCZndGEwMl91ZGNfY2ZnKTsKLQlzM2NfbmFuZF9zZXRfcGxhdGRhdGEoJmd0YTAyX25hbmRfaW5mbyk7Ci0JczNjX2kyYzBfc2V0X3BsYXRkYXRhKE5VTEwpOwotCi0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgZ3RhMDJfaTJjX2RldnMsIEFSUkFZX1NJWkUoZ3RhMDJfaTJjX2RldnMpKTsKLQotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGd0YTAyX2RldmljZXMsIEFSUkFZX1NJWkUoZ3RhMDJfZGV2aWNlcykpOwotCXBtX3Bvd2VyX29mZiA9IGd0YTAyX3Bvd2Vyb2ZmOwotfQotCi0KLU1BQ0hJTkVfU1RBUlQoTkVPMTk3M19HVEEwMiwgIkdUQTAyIikKLQkvKiBNYWludGFpbmVyOiBOZWxzb24gQ2FzdGlsbG8gPGFyaHVhY29AZnJlYWtzLXVuaWRvcy5uZXQ+ICovCi0JLnBoeXNfaW8JPSBTM0MyNDEwX1BBX1VBUlQsCi0JLmlvX3BnX29mZnN0CT0gKCgodTMyKVMzQzI0WFhfVkFfVUFSVCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcwk9IFMzQzI0MTBfU0RSQU1fUEEgKyAweDEwMCwKLQkubWFwX2lvCQk9IGd0YTAyX21hcF9pbywKLQkuaW5pdF9pcnEJPSBzM2MyNHh4X2luaXRfaXJxLAotCS5pbml0X21hY2hpbmUJPSBndGEwMl9tYWNoaW5lX2luaXQsCi0JLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9zM2MyNDQyLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDIvczNjMjQ0Mi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NjYzYmRjLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQ0Mi9zM2MyNDQyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0NDIvczNjMjQ0Mi5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcwotICogICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogU2Ftc3VuZyBTM0MyNDQyIE1vYmlsZSBDUFUgc3VwcG9ydAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KLQotI2luY2x1ZGUgPHBsYXQvczNjMjQ0Mi5oPgotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzM2MyNDQyX3N5c2RldiA9IHsKLQkuY2xzCQk9ICZzM2MyNDQyX3N5c2NsYXNzLAotfTsKLQotaW50IF9faW5pdCBzM2MyNDQyX2luaXQodm9pZCkKLXsKLQlwcmludGsoIlMzQzI0NDI6IEluaXRpYWxpc2luZyBhcmNoaXRlY3R1cmVcbiIpOwotCi0JcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmczNjMjQ0Ml9zeXNkZXYpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvS2NvbmZpZwppbmRleCA0MzE0YzQ0Li42OTgxNDBhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvS2NvbmZpZworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvS2NvbmZpZwpAQCAtNyw2ICs3LDcgQEAKIAlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMAogCXNlbGVjdCBTM0MyNDQzX0RNQSBpZiBTM0MyNDEwX0RNQQogCXNlbGVjdCBDUFVfTExTRVJJQUxfUzNDMjQ0MAorCXNlbGVjdCBTQU1TVU5HX0NMS1NSQwogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHRoZSBTM0MyNDQzIFNvQyBmcm9tIHRoZSBTM0MyNFhYIGxpbmUKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvY2xvY2suYwppbmRleCAyNzg1ZDY5Li42MmNkNGVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvY2xvY2suYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQ0My9jbG9jay5jCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChjKSAyMDA3LCAyMDEwIFNpbXRlYyBFbGVjdHJvbmljcwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKICAqIFMzQzI0NDMgQ2xvY2sgY29udHJvbCBzdXBwb3J0CkBAIC00Miw2ICs0Miw3IEBACiAKICNpbmNsdWRlIDxwbGF0L3MzYzI0NDMuaD4KICNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay1jbGtzcmMuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAvKiBXZSBjdXJyZW50bHkgaGF2ZSB0byBhc3N1bWUgdGhhdCB0aGUgc3lzdGVtIGlzIHJ1bm5pbmcKQEAgLTUzLDE0MSArNTQsNjkgQEAKICAqIHNldCB0aGUgY29ycmVjdCBtdXhpbmcgYXQgaW5pdGlhbGlzYXRpb24KICovCiAKLXN0YXRpYyBpbnQgczNjMjQ0M19jbGtjb25fZW5hYmxlX2goc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQorc3RhdGljIGludCBzM2MyNDQzX2dhdGUodm9pZCBfX2lvbWVtICpyZWcsIHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKIHsKLQl1bnNpZ25lZCBpbnQgY2xvY2tzID0gY2xrLT5jdHJsYml0OwotCXVuc2lnbmVkIGxvbmcgY2xrY29uOwotCi0JY2xrY29uID0gX19yYXdfcmVhZGwoUzNDMjQ0M19IQ0xLQ09OKTsKKwl1MzIgY3RybGJpdCA9IGNsay0+Y3RybGJpdDsKKwl1MzIgY29uID0gX19yYXdfcmVhZGwocmVnKTsKIAogCWlmIChlbmFibGUpCi0JCWNsa2NvbiB8PSBjbG9ja3M7CisJCWNvbiB8PSBjdHJsYml0OwogCWVsc2UKLQkJY2xrY29uICY9IH5jbG9ja3M7CisJCWNvbiAmPSB+Y3RybGJpdDsKIAotCV9fcmF3X3dyaXRlbChjbGtjb24sIFMzQzI0NDNfSENMS0NPTik7Ci0KKwlfX3Jhd193cml0ZWwoY29uLCByZWcpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9oKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gczNjMjQ0M19nYXRlKFMzQzI0NDNfSENMS0NPTiwgY2xrLCBlbmFibGUpOworfQorCiBzdGF0aWMgaW50IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9wKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKIHsKLQl1bnNpZ25lZCBpbnQgY2xvY2tzID0gY2xrLT5jdHJsYml0OwotCXVuc2lnbmVkIGxvbmcgY2xrY29uOwotCi0JY2xrY29uID0gX19yYXdfcmVhZGwoUzNDMjQ0M19QQ0xLQ09OKTsKLQotCWlmIChlbmFibGUpCi0JCWNsa2NvbiB8PSBjbG9ja3M7Ci0JZWxzZQotCQljbGtjb24gJj0gfmNsb2NrczsKLQotCV9fcmF3X3dyaXRlbChjbGtjb24sIFMzQzI0NDNfUENMS0NPTik7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gczNjMjQ0M19nYXRlKFMzQzI0NDNfUENMS0NPTiwgY2xrLCBlbmFibGUpOwogfQogCiBzdGF0aWMgaW50IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9zKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKIHsKLQl1bnNpZ25lZCBpbnQgY2xvY2tzID0gY2xrLT5jdHJsYml0OwotCXVuc2lnbmVkIGxvbmcgY2xrY29uOwotCi0JY2xrY29uID0gX19yYXdfcmVhZGwoUzNDMjQ0M19TQ0xLQ09OKTsKLQotCWlmIChlbmFibGUpCi0JCWNsa2NvbiB8PSBjbG9ja3M7Ci0JZWxzZQotCQljbGtjb24gJj0gfmNsb2NrczsKLQotCV9fcmF3X3dyaXRlbChjbGtjb24sIFMzQzI0NDNfU0NMS0NPTik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjQ0M19yb3VuZHJhdGVfY2xrc3JjKHN0cnVjdCBjbGsgKmNsaywKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyByYXRlLAotCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgbWF4KQotewotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCWludCBkaXY7Ci0KLQlpZiAocmF0ZSA+IHBhcmVudF9yYXRlKQotCQlyZXR1cm4gcGFyZW50X3JhdGU7Ci0KLQkvKiBub3RlLCB3ZSByZW1vdmUgdGhlICsvLSAxIGNhbGN1bGF0aW9ucyBhcyB0aGV5IGNhbmNlbCBvdXQgKi8KLQotCWRpdiA9IChyYXRlIC8gcGFyZW50X3JhdGUpOwotCi0JaWYgKGRpdiA8IDEpCi0JCWRpdiA9IDE7Ci0JZWxzZSBpZiAoZGl2ID4gbWF4KQotCQlkaXYgPSBtYXg7Ci0KLQlyZXR1cm4gcGFyZW50X3JhdGUgLyBkaXY7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0NDNfcm91bmRyYXRlX2Nsa3NyYzQoc3RydWN0IGNsayAqY2xrLAotCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXJldHVybiBzM2MyNDQzX3JvdW5kcmF0ZV9jbGtzcmMoY2xrLCByYXRlLCA0KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjQ0M19yb3VuZHJhdGVfY2xrc3JjMTYoc3RydWN0IGNsayAqY2xrLAotCQkJCQkJdW5zaWduZWQgbG9uZyByYXRlKQotewotCXJldHVybiBzM2MyNDQzX3JvdW5kcmF0ZV9jbGtzcmMoY2xrLCByYXRlLCAxNik7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0NDNfcm91bmRyYXRlX2Nsa3NyYzI1NihzdHJ1Y3QgY2xrICpjbGssCi0JCQkJCQkgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXJldHVybiBzM2MyNDQzX3JvdW5kcmF0ZV9jbGtzcmMoY2xrLCByYXRlLCAyNTYpOworCXJldHVybiBzM2MyNDQzX2dhdGUoUzNDMjQ0M19TQ0xLQ09OLCBjbGssIGVuYWJsZSk7CiB9CiAKIC8qIGNsb2NrIHNlbGVjdGlvbnMgKi8KIAorLyogbXBsbHJlZiBpcyBhIGRpcmVjdCBkZXNjZW5kYW50IG9mIGNsa194dGFsIGJ5IGRlZmF1bHQsIGJ1dCBpdCBpcyBub3QKKyAqIGVsaWRlZCBhcyB0aGUgRVBMTCBjYW4gYmUgZWl0aGVyIHNvdXJjZWQgYnkgdGhlIFhUQUwgb3IgRVhUQ0xLIGFuZCBhcworICogc3VjaCBkaXJlY3RseSBlcXVhdGluZyB0aGUgdHdvIHNvdXJjZSBjbG9ja3MgaXMgaW1wb3NzaWJsZS4KKyAqLwogc3RhdGljIHN0cnVjdCBjbGsgY2xrX21wbGxyZWYgPSB7CiAJLm5hbWUJCT0gIm1wbGxyZWYiLAogCS5wYXJlbnQJCT0gJmNsa194dGFsLAogCS5pZAkJPSAtMSwKIH07CiAKLSNpZiAwCi1zdGF0aWMgc3RydWN0IGNsayBjbGtfbXBsbCA9IHsKLQkubmFtZQkJPSAibXBsbCIsCi0JLnBhcmVudAkJPSAmY2xrX21wbGxyZWYsCi0JLmlkCQk9IC0xLAotfTsKLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IGNsayBjbGtfaTJzX2V4dCA9IHsKIAkubmFtZQkJPSAiaTJzLWV4dCIsCiAJLmlkCQk9IC0xLAogfTsKIAotc3RhdGljIGludCBzM2MyNDQzX3NldHBhcmVudF9lcGxscmVmKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQotewotCXVuc2lnbmVkIGxvbmcgY2xrc3JjID0gX19yYXdfcmVhZGwoUzNDMjQ0M19DTEtTUkMpOworc3RhdGljIHN0cnVjdCBjbGsgKmNsa19lcGxscmVmX3NvdXJjZXNbXSA9IHsKKwlbMF0gPSAmY2xrX21wbGxyZWYsCisJWzFdID0gJmNsa19tcGxscmVmLAorCVsyXSA9ICZjbGtfeHRhbCwKKwlbM10gPSAmY2xrX2V4dCwKK307CiAKLQljbGtzcmMgJj0gflMzQzI0NDNfQ0xLU1JDX0VQTExSRUZfTUFTSzsKLQotCWlmIChwYXJlbnQgPT0gJmNsa194dGFsKQotCQljbGtzcmMgfD0gUzNDMjQ0M19DTEtTUkNfRVBMTFJFRl9YVEFMOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX2V4dCkKLQkJY2xrc3JjIHw9IFMzQzI0NDNfQ0xLU1JDX0VQTExSRUZfRVhUQ0xLOwotCWVsc2UgaWYgKHBhcmVudCAhPSAmY2xrX21wbGxyZWYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JX19yYXdfd3JpdGVsKGNsa3NyYywgUzNDMjQ0M19DTEtTUkMpOwotCWNsay0+cGFyZW50ID0gcGFyZW50OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19lcGxscmVmID0gewotCS5uYW1lCQk9ICJlcGxscmVmIiwKLQkuaWQJCT0gLTEsCi0JLnNldF9wYXJlbnQJPSBzM2MyNDQzX3NldHBhcmVudF9lcGxscmVmLAorc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19lcGxscmVmID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJlcGxscmVmIiwKKwkJLmlkCQk9IC0xLAorCX0sCisJLnNvdXJjZXMgPSAmKHN0cnVjdCBjbGtzcmNfc291cmNlcykgeworCQkuc291cmNlcyA9IGNsa19lcGxscmVmX3NvdXJjZXMsCisJCS5ucl9zb3VyY2VzID0gQVJSQVlfU0laRShjbGtfZXBsbHJlZl9zb3VyY2VzKSwKKwl9LAorCS5yZWdfc3JjID0geyAucmVnID0gUzNDMjQ0M19DTEtTUkMsIC5zaXplID0gMiwgLnNoaWZ0ID0gNyB9LAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjQ0M19nZXRyYXRlX21kaXZjbGsoc3RydWN0IGNsayAqY2xrKQpAQCAtMjA1LDM0ICsxMzQsMjkgQEAKIAkubmFtZQkJPSAibWRpdmNsayIsCiAJLnBhcmVudAkJPSAmY2xrX21wbGxyZWYsCiAJLmlkCQk9IC0xLAotCS5nZXRfcmF0ZQk9IHMzYzI0NDNfZ2V0cmF0ZV9tZGl2Y2xrLAorCS5vcHMJCT0gJihzdHJ1Y3QgY2xrX29wcykgeworCQkuZ2V0X3JhdGUJPSBzM2MyNDQzX2dldHJhdGVfbWRpdmNsaywKKwl9LAogfTsKIAotc3RhdGljIGludCBzM2MyNDQzX3NldHBhcmVudF9tc3lzY2xrKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQotewotCXVuc2lnbmVkIGxvbmcgY2xrc3JjID0gX19yYXdfcmVhZGwoUzNDMjQ0M19DTEtTUkMpOworc3RhdGljIHN0cnVjdCBjbGsgKmNsa19tc3lzY2xrX3NvdXJjZXNbXSA9IHsKKwlbMF0gPSAmY2xrX21wbGxyZWYsCisJWzFdID0gJmNsa19tcGxsLAorCVsyXSA9ICZjbGtfbWRpdmNsaywKKwlbM10gPSAmY2xrX21wbGxyZWYsCit9OwogCi0JY2xrc3JjICY9IH4oUzNDMjQ0M19DTEtTUkNfTVNZU0NMS19NUExMIHwKLQkJICAgIFMzQzI0NDNfQ0xLU1JDX0VYVENMS19ESVYpOwotCi0JaWYgKHBhcmVudCA9PSAmY2xrX21wbGwpCi0JCWNsa3NyYyB8PSBTM0MyNDQzX0NMS1NSQ19NU1lTQ0xLX01QTEw7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZjbGtfbWRpdmNsaykKLQkJY2xrc3JjIHw9IFMzQzI0NDNfQ0xLU1JDX0VYVENMS19ESVY7Ci0JZWxzZSBpZiAocGFyZW50ICE9ICZjbGtfbXBsbHJlZikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlfX3Jhd193cml0ZWwoY2xrc3JjLCBTM0MyNDQzX0NMS1NSQyk7Ci0JY2xrLT5wYXJlbnQgPSBwYXJlbnQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX21zeXNjbGsgPSB7Ci0JLm5hbWUJCT0gIm1zeXNjbGsiLAotCS5wYXJlbnQJCT0gJmNsa194dGFsLAotCS5pZAkJPSAtMSwKLQkuc2V0X3BhcmVudAk9IHMzYzI0NDNfc2V0cGFyZW50X21zeXNjbGssCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX21zeXNjbGsgPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gIm1zeXNjbGsiLAorCQkucGFyZW50CQk9ICZjbGtfeHRhbCwKKwkJLmlkCQk9IC0xLAorCX0sCisJLnNvdXJjZXMgPSAmKHN0cnVjdCBjbGtzcmNfc291cmNlcykgeworCQkuc291cmNlcyA9IGNsa19tc3lzY2xrX3NvdXJjZXMsCisJCS5ucl9zb3VyY2VzID0gQVJSQVlfU0laRShjbGtfbXN5c2Nsa19zb3VyY2VzKSwKKwl9LAorCS5yZWdfc3JjID0geyAucmVnID0gUzNDMjQ0M19DTEtTUkMsIC5zaXplID0gMiwgLnNoaWZ0ID0gMyB9LAogfTsKIAogLyogYXJtZGl2CkBAIC0yNDEsMzkgKzE2NSwxMDUgQEAKICAqIGRpdmlkZXIgdmFsdWVzIGFwcGxpZWQgdG8gaXQgdG8gdGhlbiBiZSBmZWQgaW50byBhcm1jbGsuCiAqLwogCisvKiBhcm1kaXYgZGl2aXNvciB0YWJsZSAqLworCitzdGF0aWMgdW5zaWduZWQgaW50IGFybWRpdlsxNl0gPSB7CisJW1MzQzI0NDNfQ0xLRElWMF9BUk1ESVZfMSA+PiBTM0MyNDQzX0NMS0RJVjBfQVJNRElWX1NISUZUXQk9IDEsCisJW1MzQzI0NDNfQ0xLRElWMF9BUk1ESVZfMiA+PiBTM0MyNDQzX0NMS0RJVjBfQVJNRElWX1NISUZUXQk9IDIsCisJW1MzQzI0NDNfQ0xLRElWMF9BUk1ESVZfMyA+PiBTM0MyNDQzX0NMS0RJVjBfQVJNRElWX1NISUZUXQk9IDMsCisJW1MzQzI0NDNfQ0xLRElWMF9BUk1ESVZfNCA+PiBTM0MyNDQzX0NMS0RJVjBfQVJNRElWX1NISUZUXQk9IDQsCisJW1MzQzI0NDNfQ0xLRElWMF9BUk1ESVZfNiA+PiBTM0MyNDQzX0NMS0RJVjBfQVJNRElWX1NISUZUXQk9IDYsCisJW1MzQzI0NDNfQ0xLRElWMF9BUk1ESVZfOCA+PiBTM0MyNDQzX0NMS0RJVjBfQVJNRElWX1NISUZUXQk9IDgsCisJW1MzQzI0NDNfQ0xLRElWMF9BUk1ESVZfMTIgPj4gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9TSElGVF0JPSAxMiwKKwlbUzNDMjQ0M19DTEtESVYwX0FSTURJVl8xNiA+PiBTM0MyNDQzX0NMS0RJVjBfQVJNRElWX1NISUZUXQk9IDE2LAorfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgczNjMjQ0M19mY2xrX2Rpdih1bnNpZ25lZCBsb25nIGNsa2NvbjApCit7CisJY2xrY29uMCAmPSBTM0MyNDQzX0NMS0RJVjBfQVJNRElWX01BU0s7CisKKwlyZXR1cm4gYXJtZGl2W2Nsa2NvbjAgPj4gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9TSElGVF07Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0NDNfYXJtY2xrX3JvdW5kcmF0ZShzdHJ1Y3QgY2xrICpjbGssCisJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBhcmVudCA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJdW5zaWduZWQgbG9uZyBjYWxjOworCXVuc2lnbmVkIGJlc3QgPSAyNTY7IC8qIGJpZ2dlciB0aGFuIGFueSB2YWx1ZSAqLworCXVuc2lnbmVkIGRpdjsKKwlpbnQgcHRyOworCisJZm9yIChwdHIgPSAwOyBwdHIgPCBBUlJBWV9TSVpFKGFybWRpdik7IHB0cisrKSB7CisJCWRpdiA9IGFybWRpdltwdHJdOworCQljYWxjID0gcGFyZW50IC8gZGl2OworCQlpZiAoY2FsYyA8PSByYXRlICYmIGRpdiA8IGJlc3QpCisJCQliZXN0ID0gZGl2OworCX0KKworCXJldHVybiBwYXJlbnQgLyBiZXN0OworfQorCitzdGF0aWMgaW50IHMzYzI0NDNfYXJtY2xrX3NldHJhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdW5zaWduZWQgbG9uZyBwYXJlbnQgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCXVuc2lnbmVkIGxvbmcgY2FsYzsKKwl1bnNpZ25lZCBkaXY7CisJdW5zaWduZWQgYmVzdCA9IDI1NjsgLyogYmlnZ2VyIHRoYW4gYW55IHZhbHVlICovCisJaW50IHB0cjsKKwlpbnQgdmFsID0gLTE7CisKKwlmb3IgKHB0ciA9IDA7IHB0ciA8IEFSUkFZX1NJWkUoYXJtZGl2KTsgcHRyKyspIHsKKwkJZGl2ID0gYXJtZGl2W3B0cl07CisJCWNhbGMgPSBwYXJlbnQgLyBkaXY7CisJCWlmIChjYWxjIDw9IHJhdGUgJiYgZGl2IDwgYmVzdCkgeworCQkJYmVzdCA9IGRpdjsKKwkJCXZhbCA9IHB0cjsKKwkJfQorCX0KKworCWlmICh2YWwgPj0gMCkgeworCQl1bnNpZ25lZCBsb25nIGNsa2NvbjA7CisKKwkJY2xrY29uMCA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfQ0xLRElWMCk7CisJCWNsa2NvbjAgJj0gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9NQVNLOworCQljbGtjb24wIHw9IHZhbCA8PCBTM0MyNDQzX0NMS0RJVjBfQVJNRElWX1NISUZUOworCQlfX3Jhd193cml0ZWwoY2xrY29uMCwgUzNDMjQ0M19DTEtESVYwKTsKKwl9CisKKwlyZXR1cm4gKHZhbCA9PSAtMSkgPyAtRUlOVkFMIDogMDsKK30KKwogc3RhdGljIHN0cnVjdCBjbGsgY2xrX2FybWRpdiA9IHsKIAkubmFtZQkJPSAiYXJtZGl2IiwKIAkuaWQJCT0gLTEsCi0JLnBhcmVudAkJPSAmY2xrX21zeXNjbGssCisJLnBhcmVudAkJPSAmY2xrX21zeXNjbGsuY2xrLAorCS5vcHMJCT0gJihzdHJ1Y3QgY2xrX29wcykgeworCQkucm91bmRfcmF0ZSA9IHMzYzI0NDNfYXJtY2xrX3JvdW5kcmF0ZSwKKwkJLnNldF9yYXRlID0gczNjMjQ0M19hcm1jbGtfc2V0cmF0ZSwKKwl9LAogfTsKIAogLyogYXJtY2xrCiAgKgotICogdGhpcyBpcyB0aGUgY2xvY2sgZmVkIGludG8gdGhlIEFSTSBjb3JlIGl0c2VsZiwgZWl0aGVyIGZyb20KLSAqIGFybWRpdiBvciBmcm9tIGhjbGsuCisgKiB0aGlzIGlzIHRoZSBjbG9jayBmZWQgaW50byB0aGUgQVJNIGNvcmUgaXRzZWxmLCBmcm9tIGFybWRpdiBvciBmcm9tIGhjbGsuCiAgKi8KIAotc3RhdGljIGludCBzM2MyNDQzX3NldHBhcmVudF9hcm1jbGsoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCi17Ci0JdW5zaWduZWQgbG9uZyBjbGtkaXYwOworc3RhdGljIHN0cnVjdCBjbGsgKmNsa19hcm1fc291cmNlc1tdID0geworCVswXSA9ICZjbGtfYXJtZGl2LAorCVsxXSA9ICZjbGtfaCwKK307CiAKLQljbGtkaXYwID0gX19yYXdfcmVhZGwoUzNDMjQ0M19DTEtESVYwKTsKLQotCWlmIChwYXJlbnQgPT0gJmNsa19hcm1kaXYpCi0JCWNsa2RpdjAgJj0gflMzQzI0NDNfQ0xLRElWMF9EVlM7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZjbGtfaCkKLQkJY2xrZGl2MCB8PSBTM0MyNDQzX0NMS0RJVjBfRFZTOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlfX3Jhd193cml0ZWwoY2xrZGl2MCwgUzNDMjQ0M19DTEtESVYwKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2FybSA9IHsKLQkubmFtZQkJPSAiYXJtY2xrIiwKLQkuaWQJCT0gLTEsCi0JLnNldF9wYXJlbnQJPSBzM2MyNDQzX3NldHBhcmVudF9hcm1jbGssCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX2FybSA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAiYXJtY2xrIiwKKwkJLmlkCQk9IC0xLAorCX0sCisJLnNvdXJjZXMgPSAmKHN0cnVjdCBjbGtzcmNfc291cmNlcykgeworCQkuc291cmNlcyA9IGNsa19hcm1fc291cmNlcywKKwkJLm5yX3NvdXJjZXMgPSBBUlJBWV9TSVpFKGNsa19hcm1fc291cmNlcyksCisJfSwKKwkucmVnX3NyYyA9IHsgLnJlZyA9IFMzQzI0NDNfQ0xLRElWMCwgLnNpemUgPSAxLCAuc2hpZnQgPSAxMyB9LAogfTsKIAogLyogZXN5c2NsawpAQCAtMjgxLDI4ICsyNzEsMjIgQEAKICAqIHRoaXMgaXMgc291cmNlZCBmcm9tIGVpdGhlciB0aGUgRVBMTCBvciB0aGUgRVBMTHJlZiBjbG9jawogKi8KIAotc3RhdGljIGludCBzM2MyNDQzX3NldHBhcmVudF9lc3lzY2xrKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQotewotCXVuc2lnbmVkIGxvbmcgY2xrc3JjID0gX19yYXdfcmVhZGwoUzNDMjQ0M19DTEtTUkMpOworc3RhdGljIHN0cnVjdCBjbGsgKmNsa19zeXNjbGtfc291cmNlc1tdID0geworCVswXSA9ICZjbGtfZXBsbHJlZi5jbGssCisJWzFdID0gJmNsa19lcGxsLAorfTsKIAotCWlmIChwYXJlbnQgPT0gJmNsa19lcGxsKQotCQljbGtzcmMgfD0gUzNDMjQ0M19DTEtTUkNfRVNZU0NMS19FUExMOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX2VwbGxyZWYpCi0JCWNsa3NyYyAmPSB+UzNDMjQ0M19DTEtTUkNfRVNZU0NMS19FUExMOwotCWVsc2UKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlfX3Jhd193cml0ZWwoY2xrc3JjLCBTM0MyNDQzX0NMS1NSQyk7Ci0JY2xrLT5wYXJlbnQgPSBwYXJlbnQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2VzeXNjbGsgPSB7Ci0JLm5hbWUJCT0gImVzeXNjbGsiLAotCS5wYXJlbnQJCT0gJmNsa19lcGxsLAotCS5pZAkJPSAtMSwKLQkuc2V0X3BhcmVudAk9IHMzYzI0NDNfc2V0cGFyZW50X2VzeXNjbGssCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX2VzeXNjbGsgPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gImVzeXNjbGsiLAorCQkucGFyZW50CQk9ICZjbGtfZXBsbCwKKwkJLmlkCQk9IC0xLAorCX0sCisJLnNvdXJjZXMgPSAmKHN0cnVjdCBjbGtzcmNfc291cmNlcykgeworCQkuc291cmNlcyA9IGNsa19zeXNjbGtfc291cmNlcywKKwkJLm5yX3NvdXJjZXMgPSBBUlJBWV9TSVpFKGNsa19zeXNjbGtfc291cmNlcyksCisJfSwKKwkucmVnX3NyYyA9IHsgLnJlZyA9IFMzQzI0NDNfQ0xLU1JDLCAuc2l6ZSA9IDEsIC5zaGlmdCA9IDYgfSwKIH07CiAKIC8qIHVhcnRjbGsKQEAgLTMxMCw4MyArMjk0LDMwIEBACiAgKiBVQVJUIGJhdWQtcmF0ZSBjbG9jayBzb3VyY2VkIGZyb20gZXN5c2NsayB2aWEgYSBkaXZpc29yCiAqLwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNDQzX2dldHJhdGVfdWFydChzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JdW5zaWduZWQgbG9uZyBkaXYgPSBfX3Jhd19yZWFkbChTM0MyNDQzX0NMS0RJVjEpOwotCi0JZGl2ICY9IFMzQzI0NDNfQ0xLRElWMV9VQVJURElWX01BU0s7Ci0JZGl2ID4+PSBTM0MyNDQzX0NMS0RJVjFfVUFSVERJVl9TSElGVDsKLQotCXJldHVybiBwYXJlbnRfcmF0ZSAvIChkaXYgKyAxKTsKLX0KLQotCi1zdGF0aWMgaW50IHMzYzI0NDNfc2V0cmF0ZV91YXJ0KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCXVuc2lnbmVkIGxvbmcgY2xrZGl2biA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfQ0xLRElWMSk7Ci0KLQlyYXRlID0gczNjMjQ0M19yb3VuZHJhdGVfY2xrc3JjMTYoY2xrLCByYXRlKTsKLQlyYXRlID0gcGFyZW50X3JhdGUgLyByYXRlOwotCi0JY2xrZGl2biAmPSB+UzNDMjQ0M19DTEtESVYxX1VBUlRESVZfTUFTSzsKLQljbGtkaXZuIHw9IChyYXRlIC0gMSkgPDwgUzNDMjQ0M19DTEtESVYxX1VBUlRESVZfU0hJRlQ7Ci0KLQlfX3Jhd193cml0ZWwoY2xrZGl2biwgUzNDMjQ0M19DTEtESVYxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX3VhcnQgPSB7Ci0JLm5hbWUJCT0gInVhcnRjbGsiLAotCS5pZAkJPSAtMSwKLQkucGFyZW50CQk9ICZjbGtfZXN5c2NsaywKLQkuZ2V0X3JhdGUJPSBzM2MyNDQzX2dldHJhdGVfdWFydCwKLQkuc2V0X3JhdGUJPSBzM2MyNDQzX3NldHJhdGVfdWFydCwKLQkucm91bmRfcmF0ZQk9IHMzYzI0NDNfcm91bmRyYXRlX2Nsa3NyYzE2LAorc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa191YXJ0ID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJ1YXJ0Y2xrIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfZXN5c2Nsay5jbGssCisJfSwKKwkucmVnX2RpdiA9IHsgLnJlZyA9IFMzQzI0NDNfQ0xLRElWMSwgLnNpemUgPSA0LCAuc2hpZnQgPSA4IH0sCiB9OwogCisKIC8qIGhzc3BpCiAgKgogICogaGlnaC1zcGVlZCBzcGkgY2xvY2ssIHNvdXJjZWQgZnJvbSBlc3lzY2xrCiAqLwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNDQzX2dldHJhdGVfaHNzcGkoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCXVuc2lnbmVkIGxvbmcgZGl2ID0gX19yYXdfcmVhZGwoUzNDMjQ0M19DTEtESVYxKTsKLQotCWRpdiAmPSBTM0MyNDQzX0NMS0RJVjFfSFNTUElESVZfTUFTSzsKLQlkaXYgPj49IFMzQzI0NDNfQ0xLRElWMV9IU1NQSURJVl9TSElGVDsKLQotCXJldHVybiBwYXJlbnRfcmF0ZSAvIChkaXYgKyAxKTsKLX0KLQotCi1zdGF0aWMgaW50IHMzYzI0NDNfc2V0cmF0ZV9oc3NwaShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQl1bnNpZ25lZCBsb25nIGNsa2Rpdm4gPSBfX3Jhd19yZWFkbChTM0MyNDQzX0NMS0RJVjEpOwotCi0JcmF0ZSA9IHMzYzI0NDNfcm91bmRyYXRlX2Nsa3NyYzQoY2xrLCByYXRlKTsKLQlyYXRlID0gcGFyZW50X3JhdGUgLyByYXRlOwotCi0JY2xrZGl2biAmPSB+UzNDMjQ0M19DTEtESVYxX0hTU1BJRElWX01BU0s7Ci0JY2xrZGl2biB8PSAocmF0ZSAtIDEpIDw8IFMzQzI0NDNfQ0xLRElWMV9IU1NQSURJVl9TSElGVDsKLQotCV9fcmF3X3dyaXRlbChjbGtkaXZuLCBTM0MyNDQzX0NMS0RJVjEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBjbGtfaHNzcGkgPSB7Ci0JLm5hbWUJCT0gImhzc3BpIiwKLQkuaWQJCT0gLTEsCi0JLnBhcmVudAkJPSAmY2xrX2VzeXNjbGssCi0JLmN0cmxiaXQJPSBTM0MyNDQzX1NDTEtDT05fSFNTUElDTEssCi0JLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfcywKLQkuZ2V0X3JhdGUJPSBzM2MyNDQzX2dldHJhdGVfaHNzcGksCi0JLnNldF9yYXRlCT0gczNjMjQ0M19zZXRyYXRlX2hzc3BpLAotCS5yb3VuZF9yYXRlCT0gczNjMjQ0M19yb3VuZHJhdGVfY2xrc3JjNCwKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfaHNzcGkgPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gImhzc3BpIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfZXN5c2Nsay5jbGssCisJCS5jdHJsYml0CT0gUzNDMjQ0M19TQ0xLQ09OX0hTU1BJQ0xLLAorCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9zLAorCX0sCisJLnJlZ19kaXYgPSB7IC5yZWcgPSBTM0MyNDQzX0NMS0RJVjEsIC5zaXplID0gMiwgLnNoaWZ0ID0gNCB9LAogfTsKIAogLyogdXNiaG9zdApAQCAtMzk0LDQxICszMjUsMTUgQEAKICAqIHVzYiBob3N0IGJ1cy1jbG9jaywgdXN1YWxseSA0OE1IeiB0byBwcm92aWRlIFVTQiBidXMgY2xvY2sgdGltaW5nCiAqLwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNDQzX2dldHJhdGVfdXNiaG9zdChzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JdW5zaWduZWQgbG9uZyBkaXYgPSBfX3Jhd19yZWFkbChTM0MyNDQzX0NMS0RJVjEpOwotCi0JZGl2ICY9IFMzQzI0NDNfQ0xLRElWMV9VU0JIT1NURElWX01BU0s7Ci0JZGl2ID4+PSBTM0MyNDQzX0NMS0RJVjFfVVNCSE9TVERJVl9TSElGVDsKLQotCXJldHVybiBwYXJlbnRfcmF0ZSAvIChkaXYgKyAxKTsKLX0KLQotc3RhdGljIGludCBzM2MyNDQzX3NldHJhdGVfdXNiaG9zdChzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQl1bnNpZ25lZCBsb25nIGNsa2Rpdm4gPSBfX3Jhd19yZWFkbChTM0MyNDQzX0NMS0RJVjEpOwotCi0JcmF0ZSA9IHMzYzI0NDNfcm91bmRyYXRlX2Nsa3NyYzQoY2xrLCByYXRlKTsKLQlyYXRlID0gcGFyZW50X3JhdGUgLyByYXRlOwotCi0JY2xrZGl2biAmPSB+UzNDMjQ0M19DTEtESVYxX1VTQkhPU1RESVZfTUFTSzsKLQljbGtkaXZuIHw9IChyYXRlIC0gMSkgPDwgUzNDMjQ0M19DTEtESVYxX1VTQkhPU1RESVZfU0hJRlQ7Ci0KLQlfX3Jhd193cml0ZWwoY2xrZGl2biwgUzNDMjQ0M19DTEtESVYxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX3VzYl9idXNfaG9zdCA9IHsKLQkubmFtZQkJPSAidXNiLWJ1cy1ob3N0LXBhcmVudCIsCi0JLmlkCQk9IC0xLAotCS5wYXJlbnQJCT0gJmNsa19lc3lzY2xrLAotCS5jdHJsYml0CT0gUzNDMjQ0M19TQ0xLQ09OX1VTQkhPU1QsCi0JLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfcywKLQkuZ2V0X3JhdGUJPSBzM2MyNDQzX2dldHJhdGVfdXNiaG9zdCwKLQkuc2V0X3JhdGUJPSBzM2MyNDQzX3NldHJhdGVfdXNiaG9zdCwKLQkucm91bmRfcmF0ZQk9IHMzYzI0NDNfcm91bmRyYXRlX2Nsa3NyYzQsCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX3VzYl9idXNfaG9zdCA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAidXNiLWJ1cy1ob3N0LXBhcmVudCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2VzeXNjbGsuY2xrLAorCQkuY3RybGJpdAk9IFMzQzI0NDNfU0NMS0NPTl9VU0JIT1NULAorCQkuZW5hYmxlCQk9IHMzYzI0NDNfY2xrY29uX2VuYWJsZV9zLAorCX0sCisJLnJlZ19kaXYgPSB7IC5yZWcgPSBTM0MyNDQzX0NMS0RJVjEsIC5zaXplID0gMiwgLnNoaWZ0ID0gNCB9LAogfTsKIAogLyogY2xrX2hzbWNjX2RpdgpAQCAtNDM4LDM5ICszNDMsMTMgQEAKICAqIGJlIGZlZCB0byB0aGUgaHNtbWMgYmxvY2sKICovCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0NDNfZ2V0cmF0ZV9oc21tY19kaXYoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCXVuc2lnbmVkIGxvbmcgZGl2ID0gX19yYXdfcmVhZGwoUzNDMjQ0M19DTEtESVYxKTsKLQotCWRpdiAmPSBTM0MyNDQzX0NMS0RJVjFfSFNNTUNESVZfTUFTSzsKLQlkaXYgPj49IFMzQzI0NDNfQ0xLRElWMV9IU01NQ0RJVl9TSElGVDsKLQotCXJldHVybiBwYXJlbnRfcmF0ZSAvIChkaXYgKyAxKTsKLX0KLQotc3RhdGljIGludCBzM2MyNDQzX3NldHJhdGVfaHNtbWNfZGl2KHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCXVuc2lnbmVkIGxvbmcgY2xrZGl2biA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfQ0xLRElWMSk7Ci0KLQlyYXRlID0gczNjMjQ0M19yb3VuZHJhdGVfY2xrc3JjNChjbGssIHJhdGUpOwotCXJhdGUgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7Ci0KLQljbGtkaXZuICY9IH5TM0MyNDQzX0NMS0RJVjFfSFNNTUNESVZfTUFTSzsKLQljbGtkaXZuIHw9IChyYXRlIC0gMSkgPDwgUzNDMjQ0M19DTEtESVYxX0hTTU1DRElWX1NISUZUOwotCi0JX19yYXdfd3JpdGVsKGNsa2Rpdm4sIFMzQzI0NDNfQ0xLRElWMSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19oc21tY19kaXYgPSB7Ci0JLm5hbWUJCT0gImhzbW1jLWRpdiIsCi0JLmlkCQk9IC0xLAotCS5wYXJlbnQJCT0gJmNsa19lc3lzY2xrLAotCS5nZXRfcmF0ZQk9IHMzYzI0NDNfZ2V0cmF0ZV9oc21tY19kaXYsCi0JLnNldF9yYXRlCT0gczNjMjQ0M19zZXRyYXRlX2hzbW1jX2RpdiwKLQkucm91bmRfcmF0ZQk9IHMzYzI0NDNfcm91bmRyYXRlX2Nsa3NyYzQsCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX2hzbW1jX2RpdiA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAiaHNtbWMtZGl2IiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfZXN5c2Nsay5jbGssCisJfSwKKwkucmVnX2RpdiA9IHsgLnJlZyA9IFMzQzI0NDNfQ0xLRElWMSwgLnNpemUgPSAyLCAuc2hpZnQgPSA2IH0sCiB9OwogCiBzdGF0aWMgaW50IHMzYzI0NDNfc2V0cGFyZW50X2hzbW1jKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQpAQCAtNTAzLDgyICszODIsNTUgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19oc21tYyA9IHsKIAkubmFtZQkJPSAiaHNtbWMtaWYiLAogCS5pZAkJPSAtMSwKLQkucGFyZW50CQk9ICZjbGtfaHNtbWNfZGl2LAorCS5wYXJlbnQJCT0gJmNsa19oc21tY19kaXYuY2xrLAogCS5lbmFibGUJCT0gczNjMjQ0M19lbmFibGVfaHNtbWMsCi0JLnNldF9wYXJlbnQJPSBzM2MyNDQzX3NldHBhcmVudF9oc21tYywKKwkub3BzCQk9ICYoc3RydWN0IGNsa19vcHMpIHsKKwkJLnNldF9wYXJlbnQJPSBzM2MyNDQzX3NldHBhcmVudF9oc21tYywKKwl9LAogfTsKIAogLyogaTJzX2VwbGxkaXYKICAqCi0gKiB0aGlzIGNsb2NrIGlzIHRoZSBvdXRwdXQgZnJvbSB0aGUgaTJzIGRpdmlzb3Igb2YgZXN5c2NsaworICogVGhpcyBjbG9jayBpcyB0aGUgb3V0cHV0IGZyb20gdGhlIEkyUyBkaXZpc29yIG9mIEVTWVNDTEssIGFuZCBpcyBzZXBlcmF0ZQorICogZnJvbSB0aGUgbXV4IHRoYXQgY29tZXMgYWZ0ZXIgaXQgKGNhbm5vdCBtZXJnZSBpbnRvIG9uZSBzaW5nbGUgY2xvY2spCiAqLwogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNDQzX2dldHJhdGVfaTJzX2VwbGxkaXYoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCXVuc2lnbmVkIGxvbmcgZGl2ID0gX19yYXdfcmVhZGwoUzNDMjQ0M19DTEtESVYxKTsKLQotCWRpdiAmPSBTM0MyNDQzX0NMS0RJVjFfSTJTRElWX01BU0s7Ci0JZGl2ID4+PSBTM0MyNDQzX0NMS0RJVjFfSTJTRElWX1NISUZUOwotCi0JcmV0dXJuIHBhcmVudF9yYXRlIC8gKGRpdiArIDEpOwotfQotCi1zdGF0aWMgaW50IHMzYzI0NDNfc2V0cmF0ZV9pMnNfZXBsbGRpdihzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQl1bnNpZ25lZCBsb25nIGNsa2Rpdm4gPSBfX3Jhd19yZWFkbChTM0MyNDQzX0NMS0RJVjEpOwotCi0JcmF0ZSA9IHMzYzI0NDNfcm91bmRyYXRlX2Nsa3NyYzE2KGNsaywgcmF0ZSk7Ci0JcmF0ZSA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKLQotCWNsa2Rpdm4gJj0gflMzQzI0NDNfQ0xLRElWMV9JMlNESVZfTUFTSzsKLQljbGtkaXZuIHw9IChyYXRlIC0gMSkgPDwgUzNDMjQ0M19DTEtESVYxX0kyU0RJVl9TSElGVDsKLQotCV9fcmF3X3dyaXRlbChjbGtkaXZuLCBTM0MyNDQzX0NMS0RJVjEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBjbGtfaTJzX2VwbGxkaXYgPSB7Ci0JLm5hbWUJCT0gImkycy1lcGxsZGl2IiwKLQkuaWQJCT0gLTEsCi0JLnBhcmVudAkJPSAmY2xrX2VzeXNjbGssCi0JLmdldF9yYXRlCT0gczNjMjQ0M19nZXRyYXRlX2kyc19lcGxsZGl2LAotCS5zZXRfcmF0ZQk9IHMzYzI0NDNfc2V0cmF0ZV9pMnNfZXBsbGRpdiwKLQkucm91bmRfcmF0ZQk9IHMzYzI0NDNfcm91bmRyYXRlX2Nsa3NyYzE2LAorc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19pMnNfZXBsbGRpdiA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAiaTJzLWVwbGxkaXYiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19lc3lzY2xrLmNsaywKKwl9LAorCS5yZWdfZGl2ID0geyAucmVnID0gUzNDMjQ0M19DTEtESVYxLCAuc2l6ZSA9IDQsIC5zaGlmdCA9IDEyLCB9LAogfTsKIAogLyogaTJzLXJlZgogICoKICAqIGkycyBidXMgcmVmZXJlbmNlIGNsb2NrLCBzZWxlY3RhYmxlIGZyb20gZXh0ZXJuYWwsIGVzeXNjbGsgb3IgZXBsbHJlZgorICoKKyAqIE5vdGUsIHRoaXMgdXNlZCB0byBiZSB0d28gY2xvY2tzLCBidXQgd2FzIGNvbXByZXNzZWQgaW50byBvbmUuCiAqLwogCi1zdGF0aWMgaW50IHMzYzI0NDNfc2V0cGFyZW50X2kycyhzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKLXsKLQl1bnNpZ25lZCBsb25nIGNsa3NyYyA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfQ0xLU1JDKTsKK3N0cnVjdCBjbGsgKmNsa19pMnNfc3JjbGlzdFtdID0geworCVswXSA9ICZjbGtfaTJzX2VwbGxkaXYuY2xrLAorCVsxXSA9ICZjbGtfaTJzX2V4dCwKKwlbMl0gPSAmY2xrX2VwbGxyZWYuY2xrLAorCVszXSA9ICZjbGtfZXBsbHJlZi5jbGssCit9OwogCi0JY2xrc3JjICY9IH5TM0MyNDQzX0NMS1NSQ19JMlNfTUFTSzsKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfaTJzID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJpMnMtaWYiLAorCQkuaWQJCT0gLTEsCisJCS5jdHJsYml0CT0gUzNDMjQ0M19TQ0xLQ09OX0kyU0NMSywKKwkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfcywKIAotCWlmIChwYXJlbnQgPT0gJmNsa19lcGxscmVmKQotCQljbGtzcmMgfD0gUzNDMjQ0M19DTEtTUkNfSTJTX0VQTExSRUY7Ci0JZWxzZSBpZiAocGFyZW50ID09ICZjbGtfaTJzX2V4dCkKLQkJY2xrc3JjIHw9IFMzQzI0NDNfQ0xLU1JDX0kyU19FWFQ7Ci0JZWxzZSBpZiAocGFyZW50ICE9ICZjbGtfaTJzX2VwbGxkaXYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY2xrLT5wYXJlbnQgPSBwYXJlbnQ7Ci0JX19yYXdfd3JpdGVsKGNsa3NyYywgUzNDMjQ0M19DTEtTUkMpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19pMnMgPSB7Ci0JLm5hbWUJCT0gImkycy1pZiIsCi0JLmlkCQk9IC0xLAotCS5wYXJlbnQJCT0gJmNsa19pMnNfZXBsbGRpdiwKLQkuY3RybGJpdAk9IFMzQzI0NDNfU0NMS0NPTl9JMlNDTEssCi0JLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfcywKLQkuc2V0X3BhcmVudAk9IHMzYzI0NDNfc2V0cGFyZW50X2kycywKKwl9LAorCS5zb3VyY2VzID0gJihzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMpIHsKKwkJLnNvdXJjZXMgPSBjbGtfaTJzX3NyY2xpc3QsCisJCS5ucl9zb3VyY2VzID0gQVJSQVlfU0laRShjbGtfaTJzX3NyY2xpc3QpLAorCX0sCisJLnJlZ19zcmMgPSB7IC5yZWcgPSBTM0MyNDQzX0NMS1NSQywgLnNpemUgPSAyLCAuc2hpZnQgPSAxNCB9LAogfTsKIAogLyogY2FtLWlmCkBAIC01ODYsNDEgKzQzOCwxNSBAQAogICogY2FtZXJhIGludGVyZmFjZSBidXMtY2xvY2ssIGRpdmlkZWQgZG93biBmcm9tIGVzeXNjbGsKICovCiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0NDNfZ2V0cmF0ZV9jYW0oc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCXVuc2lnbmVkIGxvbmcgZGl2ID0gX19yYXdfcmVhZGwoUzNDMjQ0M19DTEtESVYxKTsKLQotCWRpdiAgJj0gUzNDMjQ0M19DTEtESVYxX0NBTURJVl9NQVNLOwotCWRpdiA+Pj0gUzNDMjQ0M19DTEtESVYxX0NBTURJVl9TSElGVDsKLQotCXJldHVybiBwYXJlbnRfcmF0ZSAvIChkaXYgKyAxKTsKLX0KLQotc3RhdGljIGludCBzM2MyNDQzX3NldHJhdGVfY2FtKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCXVuc2lnbmVkIGxvbmcgY2xrZGl2MSA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfQ0xLRElWMSk7Ci0KLQlyYXRlID0gczNjMjQ0M19yb3VuZHJhdGVfY2xrc3JjMTYoY2xrLCByYXRlKTsKLQlyYXRlID0gcGFyZW50X3JhdGUgLyByYXRlOwotCi0JY2xrZGl2MSAmPSB+UzNDMjQ0M19DTEtESVYxX0NBTURJVl9NQVNLOwotCWNsa2RpdjEgfD0gKHJhdGUgLSAxKSA8PCBTM0MyNDQzX0NMS0RJVjFfQ0FNRElWX1NISUZUOwotCi0JX19yYXdfd3JpdGVsKGNsa2RpdjEsIFMzQzI0NDNfQ0xLRElWMSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19jYW0gPSB7Ci0JLm5hbWUJCT0gImNhbWlmLXVwbGwiLAkJLyogc2FtZSBhcyAyNDQwIG5hbWUgKi8KLQkuaWQJCT0gLTEsCi0JLnBhcmVudAkJPSAmY2xrX2VzeXNjbGssCi0JLmN0cmxiaXQJPSBTM0MyNDQzX1NDTEtDT05fQ0FNQ0xLLAotCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX3MsCi0JLmdldF9yYXRlCT0gczNjMjQ0M19nZXRyYXRlX2NhbSwKLQkuc2V0X3JhdGUJPSBzM2MyNDQzX3NldHJhdGVfY2FtLAotCS5yb3VuZF9yYXRlCT0gczNjMjQ0M19yb3VuZHJhdGVfY2xrc3JjMTYsCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX2NhbSA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAiY2FtaWYtdXBsbCIsCS8qIHNhbWUgYXMgMjQ0MCBuYW1lICovCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2VzeXNjbGsuY2xrLAorCQkuY3RybGJpdAk9IFMzQzI0NDNfU0NMS0NPTl9DQU1DTEssCisJCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX3MsCisJfSwKKwkucmVnX2RpdiA9IHsgLnJlZyA9IFMzQzI0NDNfQ0xLRElWMSwgLnNpemUgPSA0LCAuc2hpZnQgPSAyNiB9LAogfTsKIAogLyogZGlzcGxheS1pZgpAQCAtNjI4LDQxICs0NTQsMTUgQEAKICAqIGRpc3BsYXkgaW50ZXJmYWNlIGNsb2NrLCBkaXZpZGVkIGZyb20gZXN5c2NsawogKi8KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjMjQ0M19nZXRyYXRlX2Rpc3BsYXkoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCXVuc2lnbmVkIGxvbmcgZGl2ID0gX19yYXdfcmVhZGwoUzNDMjQ0M19DTEtESVYxKTsKLQotCWRpdiAmPSBTM0MyNDQzX0NMS0RJVjFfRElTUERJVl9NQVNLOwotCWRpdiA+Pj0gUzNDMjQ0M19DTEtESVYxX0RJU1BESVZfU0hJRlQ7Ci0KLQlyZXR1cm4gcGFyZW50X3JhdGUgLyAoZGl2ICsgMSk7Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjQ0M19zZXRyYXRlX2Rpc3BsYXkoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JdW5zaWduZWQgbG9uZyBjbGtkaXZuID0gX19yYXdfcmVhZGwoUzNDMjQ0M19DTEtESVYxKTsKLQotCXJhdGUgPSBzM2MyNDQzX3JvdW5kcmF0ZV9jbGtzcmMyNTYoY2xrLCByYXRlKTsKLQlyYXRlID0gcGFyZW50X3JhdGUgLyByYXRlOwotCi0JY2xrZGl2biAmPSB+UzNDMjQ0M19DTEtESVYxX1VBUlRESVZfTUFTSzsKLQljbGtkaXZuIHw9IChyYXRlIC0gMSkgPDwgUzNDMjQ0M19DTEtESVYxX1VBUlRESVZfU0hJRlQ7Ci0KLQlfX3Jhd193cml0ZWwoY2xrZGl2biwgUzNDMjQ0M19DTEtESVYxKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2Rpc3BsYXkgPSB7Ci0JLm5hbWUJCT0gImRpc3BsYXktaWYiLAotCS5pZAkJPSAtMSwKLQkucGFyZW50CQk9ICZjbGtfZXN5c2NsaywKLQkuY3RybGJpdAk9IFMzQzI0NDNfU0NMS0NPTl9ESVNQQ0xLLAotCS5lbmFibGUJCT0gczNjMjQ0M19jbGtjb25fZW5hYmxlX3MsCi0JLmdldF9yYXRlCT0gczNjMjQ0M19nZXRyYXRlX2Rpc3BsYXksCi0JLnNldF9yYXRlCT0gczNjMjQ0M19zZXRyYXRlX2Rpc3BsYXksCi0JLnJvdW5kX3JhdGUJPSBzM2MyNDQzX3JvdW5kcmF0ZV9jbGtzcmMyNTYsCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX2Rpc3BsYXkgPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gImRpc3BsYXktaWYiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19lc3lzY2xrLmNsaywKKwkJLmN0cmxiaXQJPSBTM0MyNDQzX1NDTEtDT05fRElTUENMSywKKwkJLmVuYWJsZQkJPSBzM2MyNDQzX2Nsa2Nvbl9lbmFibGVfcywKKwl9LAorCS5yZWdfZGl2ID0geyAucmVnID0gUzNDMjQ0M19DTEtESVYxLCAuc2l6ZSA9IDgsIC5zaGlmdCA9IDE2IH0sCiB9OwogCiAvKiBwcmVkaXYKQEAgLTY4NCw4ICs0ODQsMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wcmVkaXYgPSB7CiAJLm5hbWUJCT0gInByZWRpdiIsCiAJLmlkCQk9IC0xLAotCS5wYXJlbnQJCT0gJmNsa19tc3lzY2xrLAotCS5nZXRfcmF0ZQk9IHMzYzI0NDNfcHJlZGl2X2dldHJhdGUsCisJLnBhcmVudAkJPSAmY2xrX21zeXNjbGsuY2xrLAorCS5vcHMJCT0gJihzdHJ1Y3QgY2xrX29wcykgeworCQkuZ2V0X3JhdGUJPSBzM2MyNDQzX3ByZWRpdl9nZXRyYXRlLAorCX0sCiB9OwogCiAvKiBzdGFuZGFyZCBjbG9jayBkZWZpbml0aW9ucyAqLwpAQCAtODU3LDcgKzY1OSw3IEBACiAJfSwgewogCQkubmFtZQkJPSAidXNiLWJ1cy1ob3N0IiwKIAkJLmlkCQk9IC0xLAotCQkucGFyZW50CQk9ICZjbGtfdXNiX2J1c19ob3N0LAorCQkucGFyZW50CQk9ICZjbGtfdXNiX2J1c19ob3N0LmNsaywKIAl9LCB7CiAJCS5uYW1lCQk9ICJhYzk3IiwKIAkJLmlkCQk9IC0xLApAQCAtODY4LDEwMyArNjcwLDI2IEBACiAKIC8qIGNsb2NrcyB0byBhZGQgd2hlcmUgd2UgbmVlZCB0byBjaGVjayB0aGVpciBwYXJlbnRhZ2UgKi8KIAotLyogczNjMjQ0M19jbGtfaW5pdHBhcmVudHMKLSAqCi0gKiBJbml0aWFsaXNlIHRoZSBwYXJlbnRzIGZvciB0aGUgY2xvY2tzIHRoYXQgd2UgZ2V0IGF0IHN0YXJ0LXRpbWUKLSovCi0KLXN0YXRpYyBpbnQgX19pbml0IGNsa19pbml0X3NldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCi17Ci0JcHJpbnRrKEtFUk5fREVCVUcgImNsb2NrICVzOiBwYXJlbnQgJXNcbiIsIGNsay0+bmFtZSwgcGFyZW50LT5uYW1lKTsKLQlyZXR1cm4gY2xrX3NldF9wYXJlbnQoY2xrLCBwYXJlbnQpOwotfQorc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIF9faW5pdGRhdGEgKmluaXRfbGlzdFtdID0geworCSZjbGtfZXBsbHJlZiwgLyogc2hvdWxkIGJlIGZpcnN0ICovCisJJmNsa19lc3lzY2xrLAorCSZjbGtfbXN5c2NsaywKKwkmY2xrX2FybSwKKwkmY2xrX2kyc19lcGxsZGl2LAorCSZjbGtfaTJzLAorCSZjbGtfY2FtLAorCSZjbGtfdWFydCwKKwkmY2xrX2Rpc3BsYXksCisJJmNsa19oc21tY19kaXYsCisJJmNsa191c2JfYnVzX2hvc3QsCit9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgczNjMjQ0M19jbGtfaW5pdHBhcmVudHModm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGNsa3NyYyA9IF9fcmF3X3JlYWRsKFMzQzI0NDNfQ0xLU1JDKTsKLQlzdHJ1Y3QgY2xrICpwYXJlbnQ7CisJaW50IHB0cjsKIAotCXN3aXRjaCAoY2xrc3JjICYgUzNDMjQ0M19DTEtTUkNfRVBMTFJFRl9NQVNLKSB7Ci0JY2FzZSBTM0MyNDQzX0NMS1NSQ19FUExMUkVGX0VYVENMSzoKLQkJcGFyZW50ID0gJmNsa19leHQ7Ci0JCWJyZWFrOwotCi0JY2FzZSBTM0MyNDQzX0NMS1NSQ19FUExMUkVGX1hUQUw6Ci0JZGVmYXVsdDoKLQkJcGFyZW50ID0gJmNsa194dGFsOwotCQlicmVhazsKLQotCWNhc2UgUzNDMjQ0M19DTEtTUkNfRVBMTFJFRl9NUExMUkVGOgotCWNhc2UgUzNDMjQ0M19DTEtTUkNfRVBMTFJFRl9NUExMUkVGMjoKLQkJcGFyZW50ID0gJmNsa19tcGxscmVmOwotCQlicmVhazsKLQl9Ci0KLQljbGtfaW5pdF9zZXRfcGFyZW50KCZjbGtfZXBsbHJlZiwgcGFyZW50KTsKLQotCXN3aXRjaCAoY2xrc3JjICYgUzNDMjQ0M19DTEtTUkNfSTJTX01BU0spIHsKLQljYXNlIFMzQzI0NDNfQ0xLU1JDX0kyU19FWFQ6Ci0JCXBhcmVudCA9ICZjbGtfaTJzX2V4dDsKLQkJYnJlYWs7Ci0KLQljYXNlIFMzQzI0NDNfQ0xLU1JDX0kyU19FUExMRElWOgotCWRlZmF1bHQ6Ci0JCXBhcmVudCA9ICZjbGtfaTJzX2VwbGxkaXY7Ci0JCWJyZWFrOwotCi0JY2FzZSBTM0MyNDQzX0NMS1NSQ19JMlNfRVBMTFJFRjoKLQljYXNlIFMzQzI0NDNfQ0xLU1JDX0kyU19FUExMUkVGMzoKLQkJcGFyZW50ID0gJmNsa19lcGxscmVmOwotCX0KLQotCWNsa19pbml0X3NldF9wYXJlbnQoJmNsa19pMnMsICZjbGtfZXBsbHJlZik7Ci0KLQkvKiBlc3lzY2xrIHNvdXJjZSAqLwotCi0JcGFyZW50ID0gKGNsa3NyYyAmIFMzQzI0NDNfQ0xLU1JDX0VTWVNDTEtfRVBMTCkgPwotCQkmY2xrX2VwbGwgOiAmY2xrX2VwbGxyZWY7Ci0KLQljbGtfaW5pdF9zZXRfcGFyZW50KCZjbGtfZXN5c2NsaywgcGFyZW50KTsKLQotCS8qIG1zeXNjbGsgc291cmNlICovCi0KLQlpZiAoY2xrc3JjICYgUzNDMjQ0M19DTEtTUkNfTVNZU0NMS19NUExMKSB7Ci0JCXBhcmVudCA9ICZjbGtfbXBsbDsKLQl9IGVsc2UgewotCQlwYXJlbnQgPSAoY2xrc3JjICYgUzNDMjQ0M19DTEtTUkNfRVhUQ0xLX0RJVikgPwotCQkJJmNsa19tZGl2Y2xrIDogJmNsa19tcGxscmVmOwotCX0KLQotCWNsa19pbml0X3NldF9wYXJlbnQoJmNsa19tc3lzY2xrLCBwYXJlbnQpOwotCi0JLyogYXJtICovCi0KLQlpZiAoX19yYXdfcmVhZGwoUzNDMjQ0M19DTEtESVYwKSAmIFMzQzI0NDNfQ0xLRElWMF9EVlMpCi0JCXBhcmVudCA9ICZjbGtfaDsKLQllbHNlCi0JCXBhcmVudCA9ICZjbGtfYXJtZGl2OwotCi0JY2xrX2luaXRfc2V0X3BhcmVudCgmY2xrX2FybSwgcGFyZW50KTsKLX0KLQotLyogYXJtZGl2IGRpdmlzb3IgdGFibGUgKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCBhcm1kaXZbMTZdID0gewotCVtTM0MyNDQzX0NMS0RJVjBfQVJNRElWXzEgPj4gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9TSElGVF0JPSAxLAotCVtTM0MyNDQzX0NMS0RJVjBfQVJNRElWXzIgPj4gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9TSElGVF0JPSAyLAotCVtTM0MyNDQzX0NMS0RJVjBfQVJNRElWXzMgPj4gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9TSElGVF0JPSAzLAotCVtTM0MyNDQzX0NMS0RJVjBfQVJNRElWXzQgPj4gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9TSElGVF0JPSA0LAotCVtTM0MyNDQzX0NMS0RJVjBfQVJNRElWXzYgPj4gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9TSElGVF0JPSA2LAotCVtTM0MyNDQzX0NMS0RJVjBfQVJNRElWXzggPj4gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9TSElGVF0JPSA4LAotCVtTM0MyNDQzX0NMS0RJVjBfQVJNRElWXzEyID4+IFMzQzI0NDNfQ0xLRElWMF9BUk1ESVZfU0hJRlRdCT0gMTIsCi0JW1MzQzI0NDNfQ0xLRElWMF9BUk1ESVZfMTYgPj4gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9TSElGVF0JPSAxNiwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHMzYzI0NDNfZmNsa19kaXYodW5zaWduZWQgbG9uZyBjbGtjb24wKQotewotCWNsa2NvbjAgJj0gUzNDMjQ0M19DTEtESVYwX0FSTURJVl9NQVNLOwotCi0JcmV0dXJuIGFybWRpdltjbGtjb24wID4+IFMzQzI0NDNfQ0xLRElWMF9BUk1ESVZfU0hJRlRdOworCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShpbml0X2xpc3QpOyBwdHIrKykKKwkJczNjX3NldF9jbGtzcmMoaW5pdF9saXN0W3B0cl0sIHRydWUpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgczNjMjQ0M19nZXRfaGRpdih1bnNpZ25lZCBsb25nIGNsa2NvbjApCkBAIC05NzYsMTUgKzcwMSwxMiBAQAogCiAvKiBjbG9ja3MgdG8gYWRkIHN0cmFpZ2h0IGF3YXkgKi8KIAotc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NbXSBfX2luaXRkYXRhID0gewotCSZjbGtfZXh0LAotCSZjbGtfZXBsbCwKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayAqY2xrc3Jjc1tdIF9faW5pdGRhdGEgPSB7CiAJJmNsa191c2JfYnVzX2hvc3QsCi0JJmNsa191c2JfYnVzLAotCSZjbGtfZXN5c2NsaywKIAkmY2xrX2VwbGxyZWYsCi0JJmNsa19tcGxscmVmLAorCSZjbGtfZXN5c2NsaywKIAkmY2xrX21zeXNjbGssCisJJmNsa19hcm0sCiAJJmNsa191YXJ0LAogCSZjbGtfZGlzcGxheSwKIAkmY2xrX2NhbSwKQEAgLTk5Miw5ICs3MTQsMTUgQEAKIAkmY2xrX2kycywKIAkmY2xrX2hzc3BpLAogCSZjbGtfaHNtbWNfZGl2LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NbXSBfX2luaXRkYXRhID0geworCSZjbGtfZXh0LAorCSZjbGtfZXBsbCwKKwkmY2xrX3VzYl9idXMsCisJJmNsa19tcGxscmVmLAogCSZjbGtfaHNtbWMsCiAJJmNsa19hcm1kaXYsCi0JJmNsa19hcm0sCiAJJmNsa19wcmVkaXYsCiB9OwogCkBAIC0xMDE0LDcgKzc0Miw3IEBACiAJY2xrX3B1dCh4dGFsX2Nsayk7CiAKIAlwbGwgPSBzM2MyNDQzX2dldF9tcGxsKG1wbGxjb24sIHh0YWwpOwotCWNsa19tc3lzY2xrLnJhdGUgPSBwbGw7CisJY2xrX21zeXNjbGsuY2xrLnJhdGUgPSBwbGw7CiAKIAlmY2xrID0gcGxsIC8gczNjMjQ0M19mY2xrX2RpdihjbGtkaXYwKTsKIAloY2xrID0gczNjMjQ0M19wcmVkaXZfZ2V0cmF0ZSgmY2xrX3ByZWRpdik7CkBAIC0xMDU2LDE1ICs3ODQsMTggQEAKIAkJfQogCX0KIAorCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShjbGtzcmNzKTsgcHRyKyspCisJCXMzY19yZWdpc3Rlcl9jbGtzcmMoY2xrc3Jjc1twdHJdLCAxKTsKKwogCWNsa19lcGxsLnJhdGUgPSBzM2MyNDQzX2dldF9lcGxsKGVwbGxjb24sIHh0YWwpOwotCWNsa19lcGxsLnBhcmVudCA9ICZjbGtfZXBsbHJlZjsKLQljbGtfdXNiX2J1cy5wYXJlbnQgPSAmY2xrX3VzYl9idXNfaG9zdDsKKwljbGtfZXBsbC5wYXJlbnQgPSAmY2xrX2VwbGxyZWYuY2xrOworCWNsa191c2JfYnVzLnBhcmVudCA9ICZjbGtfdXNiX2J1c19ob3N0LmNsazsKIAogCS8qIGVuc3VyZSB1c2IgYnVzIGNsb2NrIGlzIHdpdGhpbiBjb3JyZWN0IHJhdGUgb2YgNDhNSHogKi8KIAotCWlmIChjbGtfZ2V0X3JhdGUoJmNsa191c2JfYnVzX2hvc3QpICE9ICg0OCAqIDEwMDAgKiAxMDAwKSkgeworCWlmIChjbGtfZ2V0X3JhdGUoJmNsa191c2JfYnVzX2hvc3QuY2xrKSAhPSAoNDggKiAxMDAwICogMTAwMCkpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiV2FybmluZzogVVNCIGhvc3QgYnVzIG5vdCBhdCA0OE1IelxuIik7Ci0JCWNsa19zZXRfcmF0ZSgmY2xrX3VzYl9idXNfaG9zdCwgNDgqMTAwMCoxMDAwKTsKKwkJY2xrX3NldF9yYXRlKCZjbGtfdXNiX2J1c19ob3N0LmNsaywgNDgqMTAwMCoxMDAwKTsKIAl9CiAKIAlwcmludGsoIlMzQzI0NDM6IGVwbGwgJXMgJWxkLiUwM2xkIE1IeiwgdXNiLWJ1cyAlbGQuJTAzbGQgTUh6XG4iLApAQCAtMTA3NCwxNCArODA1LDcgQEAKIAogCS8qIHJlZ2lzdGVyIGNsb2NrcyBmcm9tIGNsb2NrIGFycmF5ICovCiAKLQljbGtwID0gaW5pdF9jbG9ja3M7Ci0JZm9yIChwdHIgPSAwOyBwdHIgPCBBUlJBWV9TSVpFKGluaXRfY2xvY2tzKTsgcHRyKyssIGNsa3ArKykgewotCQlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKGNsa3ApOwotCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXMgKCVkKVxuIiwKLQkJCSAgICAgICBjbGtwLT5uYW1lLCByZXQpOwotCQl9Ci0JfQorCXMzY19yZWdpc3Rlcl9jbG9ja3MoaW5pdF9jbG9ja3MsIEFSUkFZX1NJWkUoaW5pdF9jbG9ja3MpKTsKIAogCS8qIFdlIG11c3QgYmUgY2FyZWZ1bCBkaXNhYmxpbmcgdGhlIGNsb2NrcyB3ZSBhcmUgbm90IGludGVuZGluZyB0bwogCSAqIGJlIHVzaW5nIGF0IGJvb3QgdGltZSwgYXMgc3Vic3lzdGVtcyBzdWNoIGFzIHRoZSBMQ0Qgd2hpY2ggZG8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQ0My9kbWEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9kbWEuYwppbmRleCAzOTdmM2I1Li4zZjY1ODY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0NDMvZG1hLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL2RtYS5jCkBAIC0yMCw3ICsyMCw3IEBACiAKICNpbmNsdWRlIDxtYWNoL2RtYS5oPgogCi0jaW5jbHVkZSA8cGxhdC9kbWEtcGxhdC5oPgorI2luY2x1ZGUgPHBsYXQvZG1hLXMzYzI0eHguaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiAjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL21hY2gtc21kazI0NDMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQ0My9tYWNoLXNtZGsyNDQzLmMKaW5kZXggMDM5YTQ2Mi4uZTJlMzYyYiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDQzL21hY2gtc21kazI0NDMuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0NDMvbWFjaC1zbWRrMjQ0My5jCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSA8cGxhdC9paWMuaD4KIAogI2luY2x1ZGUgPHBsYXQvczNjMjQxMC5oPgotI2luY2x1ZGUgPHBsYXQvczNjMjQ0MC5oPgorI2luY2x1ZGUgPHBsYXQvczNjMjQ0My5oPgogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgpAQCAtMTA2LDYgKzEwNiw5IEBACiAJJnMzY19kZXZpY2Vfd2R0LAogCSZzM2NfZGV2aWNlX2kyYzAsCiAJJnMzY19kZXZpY2VfaHNtbWMwLAorI2lmZGVmIENPTkZJR19TTkRfU09DX1NNREsyNDQzX1dNOTcxMAorCSZzM2NfZGV2aWNlX2FjOTcsCisjZW5kaWYKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzbWRrMjQ0M19tYXBfaW8odm9pZCkKQEAgLTExOCw2ICsxMjEsMTEgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBzbWRrMjQ0M19tYWNoaW5lX2luaXQodm9pZCkKIHsKIAlzM2NfaTJjMF9zZXRfcGxhdGRhdGEoTlVMTCk7CisKKyNpZmRlZiBDT05GSUdfU05EX1NPQ19TTURLMjQ0M19XTTk3MTAKKwlzM2MyNHh4X2FjOTdfc2V0dXBfZ3BpbyhTM0MyNFhYX0FDOTdfR1BFMCk7CisjZW5kaWYKKwogCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNtZGsyNDQzX2RldmljZXMsIEFSUkFZX1NJWkUoc21kazI0NDNfZGV2aWNlcykpOwogCXNtZGtfbWFjaGluZV9pbml0KCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMyNmMzMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjRhMC9pbmNsdWRlL21hY2gvaW8uaApAQCAtMCwwICsxLDE4IEBACisvKiBhcmNoL2FybS9tYWNoLXMzYzI0YTAvaW5jbHVkZS9tYWNoL2lvLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KKyAqCisgKiBEZWZhdWx0IElPIHJvdXRpbmVzIGZvciBTM0MyNEEwCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKworLyogTm8gY3VycmVudCBJU0EvUENJIGJ1cyBzdXBwb3J0LiAqLworI2RlZmluZSBfX2lvKGEpCQlfX3R5cGVzYWZlX2lvKGEpCisjZGVmaW5lIF9fbWVtX3BjaShhKQkoYSkKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAoMHhGRkZGRkZGRikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjUwYmY2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMzAgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotIwlTaW10ZWMgRWxlY3Ryb25pY3MsIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSMKLSMgTGljZW5zZWQgdW5kZXIgR1BMdjIKLQotIyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBTM0M2NDEwIENQVQotCi1jb25maWcgQ1BVX1MzQzY0MDAKLQlib29sCi0Jc2VsZWN0IENQVV9TM0M2NDAwX0lOSVQKLQlzZWxlY3QgQ1BVX1MzQzY0MDBfQ0xPQ0sKLQloZWxwCi0JICBFbmFibGUgUzNDNjQwMCBDUFUgc3VwcG9ydAotCi1jb25maWcgUzNDNjQwMF9TRVRVUF9TREhDSQotCWJvb2wKLQloZWxwCi0JICBJbnRlcm5hbCBjb25maWd1cmF0aW9uIGZvciBkZWZhdWx0IFNESENJCi0JICBzZXR1cCBmb3IgUzNDNjQwMC4KLQotIyBTMzY0MDAgTWFjY2hpbmUgc3VwcG9ydAotCi1jb25maWcgTUFDSF9TTURLNjQwMAotICAgICAgIGJvb2wgIlNNREs2NDAwIgotCXNlbGVjdCBDUFVfUzNDNjQwMAotCXNlbGVjdCBTM0NfREVWX0hTTU1DCi0Jc2VsZWN0IFMzQ19ERVZfTkFORAotCXNlbGVjdCBTM0M2NDAwX1NFVFVQX1NESENJCi0JaGVscAotCSAgTWFjaGluZSBzdXBwb3J0IGZvciB0aGUgU2Ftc3VuZyBTTURLNjQwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZjFjZTRhLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSMgYXJjaC9hcm0vbWFjaC1zM2M2NDAwL01ha2VmaWxlCi0jCi0jIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0jIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotIwotIyBMaWNlbnNlZCB1bmRlciBHUEx2MgotCi1vYmoteQkJCQk6PQotb2JqLW0JCQkJOj0KLW9iai1uCQkJCTo9Ci1vYmotCQkJCTo9Ci0KLSMgQ29yZSBzdXBwb3J0IGZvciBTM0M2NDAwIHN5c3RlbQotCi1vYmotJChDT05GSUdfQ1BVX1MzQzY0MDApCSs9IHMzYzY0MDAubwotCi0jIHNldHVwIHN1cHBvcnQKLQotb2JqLSQoQ09ORklHX1MzQzY0MDBfU0VUVVBfU0RIQ0kpICs9IHNldHVwLXNkaGNpLm8KLQotIyBNYWNoaW5lIHN1cHBvcnQKLQotb2JqLSQoQ09ORklHX01BQ0hfU01ESzY0MDApCSs9IG1hY2gtc21kazY0MDAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Yzg4ODc1Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworKysgL2Rldi9udWxsCkBAIC0xLDM5ICswLDAgQEAKLS8qIGFyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLS8qIHB1bGwgaW4gdGhlIHJlbGV2YW50IHJlZ2lzdGVyIGFuZCBtYXAgZmlsZXMuICovCi0KLSNpbmNsdWRlIDxtYWNoL21hcC5oPgotI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KLQotCS8qIG5vdGUsIGZvciB0aGUgYm9vdCBwcm9jZXNzIHRvIHdvcmsgd2UgaGF2ZSB0byBrZWVwIHRoZSBVQVJUCi0JICogdmlydHVhbCBhZGRyZXNzIGFsaWduZWQgdG8gYW4gMU1pQiBib3VuZGFyeSBmb3IgdGhlIEwxCi0JICogbWFwcGluZyB0aGUgaGVhZCBjb2RlIG1ha2VzLiBXZSBrZWVwIHRoZSBVQVJUIHZpcnR1YWwgYWRkcmVzcwotCSAqIGFsaWduZWQgYW5kIGFkZCBpbiB0aGUgb2Zmc2V0IHdoZW4gd2UgbG9hZCB0aGUgdmFsdWUgaGVyZS4KLQkgKi8KLQotCS5tYWNybyBhZGRydWFydCwgcngsIHRtcAotCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAotCQl0c3QJXHJ4LCAjMQotCQlsZHJlcQlccngsID0gUzNDX1BBX1VBUlQKLQkJbGRybmUJXHJ4LCA9IChTM0NfVkFfVUFSVCArIFMzQ19QQV9VQVJUICYgMHhmZmZmZikKLSNpZiBDT05GSUdfREVCVUdfUzNDX1VBUlQgIT0gMAotCQlhZGQJXHJ4LCBccngsICMoMHg0MDAgKiBDT05GSUdfREVCVUdfUzNDX1VBUlQpCi0jZW5kaWYKLQkuZW5kbQotCi0vKiBpbmNsdWRlIHRoZSByZXNldCBvZiB0aGUgY29kZSB3aGljaCB3aWxsIGRvIHRoZSB3b3JrLCB3ZSdyZSBvbmx5Ci0gKiBjb21waWxpbmcgZm9yIGEgc2luZ2xlIGNwdSBwcm9jZXNzb3IgdHlwZSBzbyB0aGUgZGVmYXVsdCBvZiBzM2MyNDQwCi0gKiB3aWxsIGJlIGZpbmUgd2l0aCB1cy4KLSAqLwotCi0jaW5jbHVkZSA8cGxhdC9kZWJ1Zy1tYWNyby5TPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZG1hLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3MjM4NjAuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kbWEuaAorKysgL2Rldi9udWxsCkBAIC0xLDcwICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZG1hLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBTM0M2NDAwIC0gRE1BIHN1cHBvcnQKLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfRE1BX0gKLSNkZWZpbmUgX19BU01fQVJDSF9ETUFfSCBfX0ZJTEVfXwotCi0jZGVmaW5lIFMzQ19ETUFfQ0hBTk5FTFMJKDE2KQotCi0vKiBzZWUgbWFjaC1zM2MyNDEwL2RtYS5oIGZvciBub3RlcyBvbiBkbWEgY2hhbm5lbCBudW1iZXJzICovCi0KLS8qIE5vdGUsIGZvciB0aGUgUzNDNjRYWCBhcmNoaXRlY3R1cmUgd2Uga2VlcCB0aGUgRE1BQ0hfCi0gKiBkZWZpbmVzIGluIHRoZSBvcmRlciB0aGV5IGFyZSBhbGxvY2F0ZWQgdG8gW1NdRE1BMC9bU11ETUExCi0gKiBzbyB0aGF0IGlzIGVhc3kgdG8gZG8gREhBQ0hfIC0+IERNQSBjb250cm9sbGVyIGNvbnZlcnNpb24KLSAqLwotZW51bSBkbWFfY2ggewotCS8qIERNQTAvU0RNQTAgKi8KLQlETUFDSF9VQVJUMCA9IDAsCi0JRE1BQ0hfVUFSVDBfU1JDMiwKLQlETUFDSF9VQVJUMSwKLQlETUFDSF9VQVJUMV9TUkMyLAotCURNQUNIX1VBUlQyLAotCURNQUNIX1VBUlQyX1NSQzIsCi0JRE1BQ0hfVUFSVDMsCi0JRE1BQ0hfVUFSVDNfU1JDMiwKLQlETUFDSF9QQ00wX1RYLAotCURNQUNIX1BDTTBfUlgsCi0JRE1BQ0hfSTJTMF9PVVQsCi0JRE1BQ0hfSTJTMF9JTiwKLQlETUFDSF9TUEkwX1RYLAotCURNQUNIX1NQSTBfUlgsCi0JRE1BQ0hfSFNJX0kyU1Y0MF9UWCwKLQlETUFDSF9IU0lfSTJTVjQwX1JYLAotCi0JLyogRE1BMS9TRE1BMSAqLwotCURNQUNIX1BDTTFfVFggPSAxNiwKLQlETUFDSF9QQ00xX1JYLAotCURNQUNIX0kyUzFfT1VULAotCURNQUNIX0kyUzFfSU4sCi0JRE1BQ0hfU1BJMV9UWCwKLQlETUFDSF9TUEkxX1JYLAotCURNQUNIX0FDOTdfUENNT1VULAotCURNQUNIX0FDOTdfUENNSU4sCi0JRE1BQ0hfQUM5N19NSUNJTiwKLQlETUFDSF9QV00sCi0JRE1BQ0hfSVJEQSwKLQlETUFDSF9FWFRFUk5BTCwKLQlETUFDSF9SRVMxLAotCURNQUNIX1JFUzIsCi0JRE1BQ0hfU0VDVVJJVFlfUlgsCS8qIFNETUExIG9ubHkgKi8KLQlETUFDSF9TRUNVUklUWV9UWCwJLyogU0RNQTEgb25seSAqLwotCURNQUNIX01BWAkJLyogdGhlIGVuZCAqLwotfTsKLQotc3RhdGljIF9faW5saW5lX18gYm9vbCBzM2NfZG1hX2hhc19jaXJjdWxhcih2b2lkKQotewotCXJldHVybiB0cnVlOwotfQotCi0jZGVmaW5lIFMzQzI0MTBfRE1BRl9DSVJDVUxBUgkJKDEgPDwgMCkKLQotI2luY2x1ZGUgPHBsYXQvZG1hLmg+Ci0KLSNlbmRpZiAvKiBfX0FTTV9BUkNIX0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZDkwZDIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyogYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCi0gKgotICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KLSAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIHRoZSBTYW1zdW5nIFMzQzY0WFggc2VyaWVzCi0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55Ci0gKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0qLwotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3ZpYy5oPgotI2luY2x1ZGUgPG1hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8cGxhdC9pcnFzLmg+Ci0KLQkubWFjcm8JZGlzYWJsZV9maXEKLQkuZW5kbQotCi0JLm1hY3JvCWdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCi0JbGRyCVxiYXNlLCA9UzNDX1ZBX1ZJQzAKLQkuZW5kbQotCi0JLm1hY3JvCWFyY2hfcmV0X3RvX3VzZXIsIHRtcDEsIHRtcDIKLQkuZW5kbQotCi0JLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAotCi0JQCBjaGVjayB0aGUgdmljMAotCW1vdglcaXJxbnIsICMgUzNDX0lSUV9PRkZTRVQgKyAzMQotCWxkcglcaXJxc3RhdCwgWyBcYmFzZSwgIyBWSUNfSVJRX1NUQVRVUyBdCi0JdGVxCVxpcnFzdGF0LCAjMAotCi0JQCBvdGhlcndpc2UgdHJ5IHZpYzEKLQlhZGRlcQlcdG1wLCBcYmFzZSwgIyhTM0NfVkFfVklDMSAtIFMzQ19WQV9WSUMwKQotCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjMzIKLQlsZHJlcQlcaXJxc3RhdCwgWyBcdG1wLCAjIFZJQ19JUlFfU1RBVFVTIF0KLQl0ZXFlcQlcaXJxc3RhdCwgIzAKLQotCWNsem5lCVxpcnFzdGF0LCBcaXJxc3RhdAotCXN1Ym5lCVxpcnFuciwgXGlycW5yLCBcaXJxc3RhdAotCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2dwaW8tY29yZS5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9ncGlvLWNvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDg5YWFlNi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2dwaW8tY29yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEgKzAsMCBAQAotLyogYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9ncGlvLWNvcmUuaAotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICoKLSAqIFMzQzY0WFggLSBHUElPIGNvcmUgc3VwcG9ydAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfR1BJT19DT1JFX0gKLSNkZWZpbmUgX19BU01fQVJDSF9HUElPX0NPUkVfSCBfX0ZJTEVfXwotCi0vKiBjdXJyZW50bHkgd2UganVzdCBpbmNsdWRlIHRoZSBwbGF0Zm9ybSBzdXBwb3J0ICovCi0jaW5jbHVkZSA8cGxhdC9ncGlvLWNvcmUuaD4KLQotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfR1BJT19DT1JFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4ZTM1ZTguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9ncGlvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5NiArMCwwIEBACi0vKiBhcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2dwaW8uaAotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogUzNDNjQwMCAtIEdQSU8gbGliIHN1cHBvcnQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2RlZmluZSBncGlvX2dldF92YWx1ZQlfX2dwaW9fZ2V0X3ZhbHVlCi0jZGVmaW5lIGdwaW9fc2V0X3ZhbHVlCV9fZ3Bpb19zZXRfdmFsdWUKLSNkZWZpbmUgZ3Bpb19jYW5zbGVlcAlfX2dwaW9fY2Fuc2xlZXAKLSNkZWZpbmUgZ3Bpb190b19pcnEJX19ncGlvX3RvX2lycQotCi0vKiBHUElPIGJhbmsgc2l6ZXMgKi8KLSNkZWZpbmUgUzNDNjRYWF9HUElPX0FfTlIJKDgpCi0jZGVmaW5lIFMzQzY0WFhfR1BJT19CX05SCSg3KQotI2RlZmluZSBTM0M2NFhYX0dQSU9fQ19OUgkoOCkKLSNkZWZpbmUgUzNDNjRYWF9HUElPX0RfTlIJKDUpCi0jZGVmaW5lIFMzQzY0WFhfR1BJT19FX05SCSg1KQotI2RlZmluZSBTM0M2NFhYX0dQSU9fRl9OUgkoMTYpCi0jZGVmaW5lIFMzQzY0WFhfR1BJT19HX05SCSg3KQotI2RlZmluZSBTM0M2NFhYX0dQSU9fSF9OUgkoMTApCi0jZGVmaW5lIFMzQzY0WFhfR1BJT19JX05SCSgxNikKLSNkZWZpbmUgUzNDNjRYWF9HUElPX0pfTlIJKDEyKQotI2RlZmluZSBTM0M2NFhYX0dQSU9fS19OUgkoMTYpCi0jZGVmaW5lIFMzQzY0WFhfR1BJT19MX05SCSgxNSkKLSNkZWZpbmUgUzNDNjRYWF9HUElPX01fTlIJKDYpCi0jZGVmaW5lIFMzQzY0WFhfR1BJT19OX05SCSgxNikKLSNkZWZpbmUgUzNDNjRYWF9HUElPX09fTlIJKDE2KQotI2RlZmluZSBTM0M2NFhYX0dQSU9fUF9OUgkoMTUpCi0jZGVmaW5lIFMzQzY0WFhfR1BJT19RX05SCSg5KQotCi0vKiBHUElPIGJhbmsgbnVtYmVzICovCi0KLS8qIENPTkZJR19TM0NfR1BJT19TUEFDRSBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IGV4dHJhCi0gKiBzcGFjZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIHNvIHRoYXQgYW55IGFjY2lkZW50YWwKLSAqIGNoYW5nZSBmcm9tIG9uZSBncGlvIGJhbmsgdG8gYW5vdGhlciBjYW4gYmUgY2F1Z2h0LgotKi8KLQotI2RlZmluZSBTM0M2NFhYX0dQSU9fTkVYVChfX2dwaW8pIFwKLQkoKF9fZ3BpbyMjX1NUQVJUKSArIChfX2dwaW8jI19OUikgKyBDT05GSUdfUzNDX0dQSU9fU1BBQ0UgKyAxKQotCi1lbnVtIHMzY19ncGlvX251bWJlciB7Ci0JUzNDNjRYWF9HUElPX0FfU1RBUlQgPSAwLAotCVMzQzY0WFhfR1BJT19CX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0EpLAotCVMzQzY0WFhfR1BJT19DX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0IpLAotCVMzQzY0WFhfR1BJT19EX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0MpLAotCVMzQzY0WFhfR1BJT19FX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0QpLAotCVMzQzY0WFhfR1BJT19GX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0UpLAotCVMzQzY0WFhfR1BJT19HX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0YpLAotCVMzQzY0WFhfR1BJT19IX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0cpLAotCVMzQzY0WFhfR1BJT19JX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0gpLAotCVMzQzY0WFhfR1BJT19KX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0kpLAotCVMzQzY0WFhfR1BJT19LX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0opLAotCVMzQzY0WFhfR1BJT19MX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0spLAotCVMzQzY0WFhfR1BJT19NX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0wpLAotCVMzQzY0WFhfR1BJT19OX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX00pLAotCVMzQzY0WFhfR1BJT19PX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX04pLAotCVMzQzY0WFhfR1BJT19QX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX08pLAotCVMzQzY0WFhfR1BJT19RX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX1ApLAotfTsKLQotLyogUzNDNjRYWCBHUElPIG51bWJlciBkZWZpbml0aW9ucy4gKi8KLQotI2RlZmluZSBTM0M2NFhYX0dQQShfbnIpCShTM0M2NFhYX0dQSU9fQV9TVEFSVCArIChfbnIpKQotI2RlZmluZSBTM0M2NFhYX0dQQihfbnIpCShTM0M2NFhYX0dQSU9fQl9TVEFSVCArIChfbnIpKQotI2RlZmluZSBTM0M2NFhYX0dQQyhfbnIpCShTM0M2NFhYX0dQSU9fQ19TVEFSVCArIChfbnIpKQotI2RlZmluZSBTM0M2NFhYX0dQRChfbnIpCShTM0M2NFhYX0dQSU9fRF9TVEFSVCArIChfbnIpKQotI2RlZmluZSBTM0M2NFhYX0dQRShfbnIpCShTM0M2NFhYX0dQSU9fRV9TVEFSVCArIChfbnIpKQotI2RlZmluZSBTM0M2NFhYX0dQRihfbnIpCShTM0M2NFhYX0dQSU9fRl9TVEFSVCArIChfbnIpKQotI2RlZmluZSBTM0M2NFhYX0dQRyhfbnIpCShTM0M2NFhYX0dQSU9fR19TVEFSVCArIChfbnIpKQotI2RlZmluZSBTM0M2NFhYX0dQSChfbnIpCShTM0M2NFhYX0dQSU9fSF9TVEFSVCArIChfbnIpKQotI2RlZmluZSBTM0M2NFhYX0dQSShfbnIpCShTM0M2NFhYX0dQSU9fSV9TVEFSVCArIChfbnIpKQotI2RlZmluZSBTM0M2NFhYX0dQSihfbnIpCShTM0M2NFhYX0dQSU9fSl9TVEFSVCArIChfbnIpKQotI2RlZmluZSBTM0M2NFhYX0dQSyhfbnIpCShTM0M2NFhYX0dQSU9fS19TVEFSVCArIChfbnIpKQotI2RlZmluZSBTM0M2NFhYX0dQTChfbnIpCShTM0M2NFhYX0dQSU9fTF9TVEFSVCArIChfbnIpKQotI2RlZmluZSBTM0M2NFhYX0dQTShfbnIpCShTM0M2NFhYX0dQSU9fTV9TVEFSVCArIChfbnIpKQotI2RlZmluZSBTM0M2NFhYX0dQTihfbnIpCShTM0M2NFhYX0dQSU9fTl9TVEFSVCArIChfbnIpKQotI2RlZmluZSBTM0M2NFhYX0dQTyhfbnIpCShTM0M2NFhYX0dQSU9fT19TVEFSVCArIChfbnIpKQotI2RlZmluZSBTM0M2NFhYX0dQUChfbnIpCShTM0M2NFhYX0dQSU9fUF9TVEFSVCArIChfbnIpKQotI2RlZmluZSBTM0M2NFhYX0dQUShfbnIpCShTM0M2NFhYX0dQSU9fUV9TVEFSVCArIChfbnIpKQotCi0vKiB0aGUgZW5kIG9mIHRoZSBTM0M2NFhYIHNwZWNpZmljIGdwaW9zICovCi0jZGVmaW5lIFMzQzY0WFhfR1BJT19FTkQJKFMzQzY0WFhfR1BRKFMzQzY0WFhfR1BJT19RX05SKSArIDEpCi0jZGVmaW5lIFMzQ19HUElPX0VORAkJUzNDNjRYWF9HUElPX0VORAotCi0vKiBkZWZpbmUgdGhlIG51bWJlciBvZiBncGlvcyB3ZSBuZWVkIHRvIHRoZSBvbmUgYWZ0ZXIgdGhlIEdQUSgpIHJhbmdlICovCi0jZGVmaW5lIEFSQ0hfTlJfR1BJT1MJKFMzQzY0WFhfR1BRKFMzQzY0WFhfR1BJT19RX05SKSArIDEpCi0KLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvaXJxcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0Yzk3ZjlhLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvaXJxcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBTM0M2NDAwIC0gSVJRIGRlZmluaXRpb25zCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX0lSUVNfSAotI2RlZmluZSBfX0FTTV9BUkNIX0lSUVNfSCBfX0ZJTEVfXwotCi0jaW5jbHVkZSA8cGxhdC9pcnFzLmg+Ci0KLSNlbmRpZiAvKiBfX0FTTV9BUkNIX0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL21hcC5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9tYXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTA2ZWUxMy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL21hcC5oCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9tYXAuaAotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogUzNDNjRYWCAtIE1lbW9yeSBtYXAgZGVmaW5pdGlvbnMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX01BUF9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfTUFQX0ggX19GSUxFX18KLQotI2luY2x1ZGUgPHBsYXQvbWFwLWJhc2UuaD4KLQotLyogSFNNTUMgdW5pdHMgKi8KLSNkZWZpbmUgUzNDNjRYWF9QQV9IU01NQyh4KQkoMHg3QzIwMDAwMCArICgoeCkgKiAweDEwMDAwMCkpCi0jZGVmaW5lIFMzQzY0WFhfUEFfSFNNTUMwCVMzQzY0WFhfUEFfSFNNTUMoMCkKLSNkZWZpbmUgUzNDNjRYWF9QQV9IU01NQzEJUzNDNjRYWF9QQV9IU01NQygxKQotI2RlZmluZSBTM0M2NFhYX1BBX0hTTU1DMglTM0M2NFhYX1BBX0hTTU1DKDIpCi0KLSNkZWZpbmUgUzNDX1BBX1VBUlQJCSgweDdGMDA1MDAwKQotI2RlZmluZSBTM0NfUEFfVUFSVDAJCShTM0NfUEFfVUFSVCArIDB4MDApCi0jZGVmaW5lIFMzQ19QQV9VQVJUMQkJKFMzQ19QQV9VQVJUICsgMHg0MDApCi0jZGVmaW5lIFMzQ19QQV9VQVJUMgkJKFMzQ19QQV9VQVJUICsgMHg4MDApCi0jZGVmaW5lIFMzQ19QQV9VQVJUMwkJKFMzQ19QQV9VQVJUICsgMHhDMDApCi0jZGVmaW5lIFMzQ19VQVJUX09GRlNFVAkJKDB4NDAwKQotCi0vKiBTZWUgbm90ZXMgb24gVUFSVCBWQSBtYXBwaW5nIGluIGRlYnVnLW1hY3JvLlMgKi8KLSNkZWZpbmUgUzNDX1ZBX1VBUlR4KHgpCShTM0NfVkFfVUFSVCArIChTM0NfUEFfVUFSVCAmIDB4ZmZmZmYpICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCi0KLSNkZWZpbmUgUzNDX1ZBX1VBUlQwCQlTM0NfVkFfVUFSVHgoMCkKLSNkZWZpbmUgUzNDX1ZBX1VBUlQxCQlTM0NfVkFfVUFSVHgoMSkKLSNkZWZpbmUgUzNDX1ZBX1VBUlQyCQlTM0NfVkFfVUFSVHgoMikKLSNkZWZpbmUgUzNDX1ZBX1VBUlQzCQlTM0NfVkFfVUFSVHgoMykKLQotI2RlZmluZSBTM0M2NFhYX1BBX05BTkQJCSgweDcwMjAwMDAwKQotI2RlZmluZSBTM0M2NFhYX1BBX0ZCCQkoMHg3NzEwMDAwMCkKLSNkZWZpbmUgUzNDNjRYWF9QQV9VU0JfSFNPVEcJKDB4N0MwMDAwMDApCi0jZGVmaW5lIFMzQzY0WFhfUEFfV0FUQ0hET0cJKDB4N0UwMDQwMDApCi0jZGVmaW5lIFMzQzY0WFhfUEFfU1lTQ09OCSgweDdFMDBGMDAwKQotI2RlZmluZSBTM0M2NFhYX1BBX0FDOTcJCSgweDdGMDAxMDAwKQotI2RlZmluZSBTM0M2NFhYX1BBX0lJUzAJCSgweDdGMDAyMDAwKQotI2RlZmluZSBTM0M2NFhYX1BBX0lJUzEJCSgweDdGMDAzMDAwKQotI2RlZmluZSBTM0M2NFhYX1BBX1RJTUVSCSgweDdGMDA2MDAwKQotI2RlZmluZSBTM0M2NFhYX1BBX0lJQzAJCSgweDdGMDA0MDAwKQotI2RlZmluZSBTM0M2NFhYX1BBX1BDTTAJCSgweDdGMDA5MDAwKQotI2RlZmluZSBTM0M2NFhYX1BBX1BDTTEJCSgweDdGMDBBMDAwKQotI2RlZmluZSBTM0M2NFhYX1BBX0lJU1Y0CSgweDdGMDBEMDAwKQotI2RlZmluZSBTM0M2NFhYX1BBX0lJQzEJCSgweDdGMDBGMDAwKQotCi0jZGVmaW5lIFMzQzY0WFhfUEFfR1BJTwkJKDB4N0YwMDgwMDApCi0jZGVmaW5lIFMzQzY0WFhfVkFfR1BJTwkJUzNDX0FERFJfQ1BVKDB4MDAwMDAwMDApCi0jZGVmaW5lIFMzQzY0WFhfU1pfR1BJTwkJU1pfNEsKLQotI2RlZmluZSBTM0M2NFhYX1BBX1NEUkFNCSgweDUwMDAwMDAwKQotI2RlZmluZSBTM0M2NFhYX1BBX1ZJQzAJCSgweDcxMjAwMDAwKQotI2RlZmluZSBTM0M2NFhYX1BBX1ZJQzEJCSgweDcxMzAwMDAwKQotCi0jZGVmaW5lIFMzQzY0WFhfUEFfTU9ERU0JKDB4NzQxMDgwMDApCi0jZGVmaW5lIFMzQzY0WFhfVkFfTU9ERU0JUzNDX0FERFJfQ1BVKDB4MDAxMDAwMDApCi0KLSNkZWZpbmUgUzNDNjRYWF9QQV9VU0JIT1NUCSgweDc0MzAwMDAwKQotCi0jZGVmaW5lIFMzQzY0WFhfUEFfVVNCX0hTUEhZCSgweDdDMTAwMDAwKQotI2RlZmluZSBTM0M2NFhYX1ZBX1VTQl9IU1BIWQlTM0NfQUREUl9DUFUoMHgwMDIwMDAwMCkKLQotLyogcGxhY2UgVklDcyBjbG9zZSB0b2dldGhlciAqLwotI2RlZmluZSBTM0NfVkFfVklDMAkJKFMzQ19WQV9JUlEgKyAweDAwKQotI2RlZmluZSBTM0NfVkFfVklDMQkJKFMzQ19WQV9JUlEgKyAweDEwMDAwKQotCi0vKiBjb21wYXRpYmlsdGl5IGRlZmluZXMuICovCi0jZGVmaW5lIFMzQ19QQV9USU1FUgkJUzNDNjRYWF9QQV9USU1FUgotI2RlZmluZSBTM0NfUEFfSFNNTUMwCQlTM0M2NFhYX1BBX0hTTU1DMAotI2RlZmluZSBTM0NfUEFfSFNNTUMxCQlTM0M2NFhYX1BBX0hTTU1DMQotI2RlZmluZSBTM0NfUEFfSFNNTUMyCQlTM0M2NFhYX1BBX0hTTU1DMgotI2RlZmluZSBTM0NfUEFfSUlDCQlTM0M2NFhYX1BBX0lJQzAKLSNkZWZpbmUgUzNDX1BBX0lJQzEJCVMzQzY0WFhfUEFfSUlDMQotI2RlZmluZSBTM0NfUEFfTkFORAkJUzNDNjRYWF9QQV9OQU5ECi0jZGVmaW5lIFMzQ19QQV9GQgkJUzNDNjRYWF9QQV9GQgotI2RlZmluZSBTM0NfUEFfVVNCSE9TVAkJUzNDNjRYWF9QQV9VU0JIT1NUCi0jZGVmaW5lIFMzQ19QQV9VU0JfSFNPVEcJUzNDNjRYWF9QQV9VU0JfSFNPVEcKLSNkZWZpbmUgUzNDX1ZBX1VTQl9IU1BIWQlTM0M2NFhYX1ZBX1VTQl9IU1BIWQotCi0jZW5kaWYgLyogX19BU01fQVJDSF82NDAwX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNmM3ZjRlLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoKLSAqIFMzQzY0WFggLSBjbG9jayByZWdpc3RlciBjb21wYXRpYmlsaXR5IHdpdGggczNjMjR4eAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaW5jbHVkZSA8cGxhdC9yZWdzLWNsb2NrLmg+Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvdGljay5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC90aWNrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5YzBkYzcuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC90aWNrLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3RpY2suaAotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogUzNDNjRYWCAtIFRpbWVyIHRpY2sgc3VwcG9ydCBkZWZpbml0aW9ucwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfVElDS19ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfVElDS19IIF9fRklMRV9fCi0KLS8qIG5vdGUsIHRoZSB0aW1lciBpbnRlcnJ1dHBzIHR1cm4gdXAgaW4gMiBwbGFjZXMsIHRoZSB2aWMgYW5kIHRoZW4KLSAqIHRoZSB0aW1lciBibG9jay4gV2UgdGFrZSB0aGUgVklDIGFzIHRoZSBiYXNlIGF0IHRoZSBtb21lbnQuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdTMyIHMzYzI0eHhfb3N0aW1lcl9wZW5kaW5nKHZvaWQpCi17Ci0JdTMyIHBlbmQgPSBfX3Jhd19yZWFkbChTM0NfVkFfVklDMCArIFZJQ19SQVdfU1RBVFVTKTsKLQlyZXR1cm4gcGVuZCAmIDEgPDwgKElSUV9USU1FUjRfVklDIC0gUzNDNjRYWF9JUlFfVklDMCgwKSk7Ci19Ci0KLSNkZWZpbmUgVElDS19NQVgJKDB4ZmZmZmZmZmYpCi0KLSNlbmRpZiAvKiBfX0FTTV9BUkNIXzY0MDBfVElDS19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvbWFjaC1zbWRrNjQwMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL21hY2gtc21kazY0MDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIxOTI4NS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvbWFjaC1zbWRrNjQwMC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTYgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2M2NDAwL21hY2gtc21kazY0MDAuYwotICoKLSAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KLQotI2luY2x1ZGUgPHBsYXQvczNjNjQwMC5oPgotI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KLSNpbmNsdWRlIDxwbGF0L2RldnMuaD4KLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgotI2luY2x1ZGUgPHBsYXQvaWljLmg+Ci0KLSNkZWZpbmUgVUNPTiBTM0MyNDEwX1VDT05fREVGQVVMVCB8IFMzQzI0MTBfVUNPTl9VQ0xLCi0jZGVmaW5lIFVMQ09OIFMzQzI0MTBfTENPTl9DUzggfCBTM0MyNDEwX0xDT05fUE5PTkUgfCBTM0MyNDEwX0xDT05fU1RPUEIKLSNkZWZpbmUgVUZDT04gUzNDMjQxMF9VRkNPTl9SWFRSSUc4IHwgUzNDMjQxMF9VRkNPTl9GSUZPTU9ERQotCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBzbWRrNjQwMF91YXJ0Y2Znc1tdIF9faW5pdGRhdGEgPSB7Ci0JWzBdID0gewotCQkuaHdwb3J0CSAgICAgPSAwLAotCQkuZmxhZ3MJICAgICA9IDAsCi0JCS51Y29uCSAgICAgPSAweDNjNSwKLQkJLnVsY29uCSAgICAgPSAweDAzLAotCQkudWZjb24JICAgICA9IDB4NTEsCi0JfSwKLQlbMV0gPSB7Ci0JCS5od3BvcnQJICAgICA9IDEsCi0JCS5mbGFncwkgICAgID0gMCwKLQkJLnVjb24JICAgICA9IDB4M2M1LAotCQkudWxjb24JICAgICA9IDB4MDMsCi0JCS51ZmNvbgkgICAgID0gMHg1MSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzbWRrNjQwMF9pb2Rlc2NbXSA9IHt9OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgc21kazY0MDBfbWFwX2lvKHZvaWQpCi17Ci0JczNjNjR4eF9pbml0X2lvKHNtZGs2NDAwX2lvZGVzYywgQVJSQVlfU0laRShzbWRrNjQwMF9pb2Rlc2MpKTsKLQlzM2MyNHh4X2luaXRfY2xvY2tzKDEyMDAwMDAwKTsKLQlzM2MyNHh4X2luaXRfdWFydHMoc21kazY0MDBfdWFydGNmZ3MsIEFSUkFZX1NJWkUoc21kazY0MDBfdWFydGNmZ3MpKTsKLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNtZGs2NDAwX2RldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZzM2NfZGV2aWNlX2hzbW1jMSwKLQkmczNjX2RldmljZV9pMmMwLAotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpMmNfZGV2c1tdIF9faW5pdGRhdGEgPSB7Ci0JeyBJMkNfQk9BUkRfSU5GTygid204NzUzIiwgMHgxQSksIH0sCi0JeyBJMkNfQk9BUkRfSU5GTygiMjRjMDgiLCAweDUwKSwgfSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzbWRrNjQwMF9tYWNoaW5lX2luaXQodm9pZCkKLXsKLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBpMmNfZGV2cywgQVJSQVlfU0laRShpMmNfZGV2cykpOwotCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNtZGs2NDAwX2RldmljZXMsIEFSUkFZX1NJWkUoc21kazY0MDBfZGV2aWNlcykpOwotfQotCi1NQUNISU5FX1NUQVJUKFNNREs2NDAwLCAiU01ESzY0MDAiKQotCS8qIE1haW50YWluZXI6IEJlbiBEb29rcyA8YmVuQGZsdWZmLm9yZz4gKi8KLQkucGh5c19pbwk9IFMzQ19QQV9VQVJUICYgMHhmZmYwMDAwMCwKLQkuaW9fcGdfb2Zmc3QJPSAoKCh1MzIpUzNDX1ZBX1VBUlQpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMJPSBTM0M2NFhYX1BBX1NEUkFNICsgMHgxMDAsCi0KLQkuaW5pdF9pcnEJPSBzM2M2NDAwX2luaXRfaXJxLAotCS5tYXBfaW8JCT0gc21kazY0MDBfbWFwX2lvLAotCS5pbml0X21hY2hpbmUJPSBzbWRrNjQwMF9tYWNoaW5lX2luaXQsCi0JLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9zM2M2NDAwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0MDAvczNjNjQwMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODc2ZWU1Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9zM2M2NDAwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MiArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0MTAvY3B1LmMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOSBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS5oPgotI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KLSNpbmNsdWRlIDxwbGF0L3JlZ3MtY2xvY2suaD4KLQotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0jaW5jbHVkZSA8cGxhdC9kZXZzLmg+Ci0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgotI2luY2x1ZGUgPHBsYXQvc2RoY2kuaD4KLSNpbmNsdWRlIDxwbGF0L2lpYy1jb3JlLmg+Ci0jaW5jbHVkZSA8cGxhdC9zM2M2NDAwLmg+Ci0KLXZvaWQgX19pbml0IHMzYzY0MDBfbWFwX2lvKHZvaWQpCi17Ci0JLyogc2V0dXAgU0RIQ0kgKi8KLQotCXMzYzY0MDBfZGVmYXVsdF9zZGhjaTAoKTsKLQlzM2M2NDAwX2RlZmF1bHRfc2RoY2kxKCk7Ci0JczNjNjQwMF9kZWZhdWx0X3NkaGNpMigpOwotCi0JLyogdGhlIGkyYyBkZXZpY2VzIGFyZSBkaXJlY3RseSBjb21wYXRpYmxlIHdpdGggczNjMjQ0MCAqLwotCXMzY19pMmMwX3NldG5hbWUoInMzYzI0NDAtaTJjIik7Ci0KLQlzM2NfZGV2aWNlX25hbmQubmFtZSA9ICJzM2M2NDAwLW5hbmQiOwotfQotCi12b2lkIF9faW5pdCBzM2M2NDAwX2luaXRfY2xvY2tzKGludCB4dGFsKQotewotCXByaW50ayhLRVJOX0RFQlVHICIlczogaW5pdGlhbGlzaW5nIGNsb2Nrc1xuIiwgX19mdW5jX18pOwotCXMzYzI0eHhfcmVnaXN0ZXJfYmFzZWNsb2Nrcyh4dGFsKTsKLQlzM2M2NHh4X3JlZ2lzdGVyX2Nsb2NrcygpOwotCXMzYzY0MDBfcmVnaXN0ZXJfY2xvY2tzKFMzQzY0MDBfQ0xLRElWMF9BUk1fTUFTSyk7Ci0JczNjNjQwMF9zZXR1cF9jbG9ja3MoKTsKLX0KLQotdm9pZCBfX2luaXQgczNjNjQwMF9pbml0X2lycSh2b2lkKQotewotCS8qIFZJQzAgZG9lcyBub3QgaGF2ZSBJUlFTIDUuLjcsCi0JICogVklDMSBpcyBmdWxseSBwb3B1bGF0ZWQuICovCi0JczNjNjR4eF9pbml0X2lycSh+MCAmIH4oMHhmIDw8IDUpLCB+MCk7Ci19Ci0KLXN0cnVjdCBzeXNkZXZfY2xhc3MgczNjNjQwMF9zeXNjbGFzcyA9IHsKLQkubmFtZQk9ICJzM2M2NDAwLWNvcmUiLAotfTsKLQotc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIHMzYzY0MDBfc3lzZGV2ID0gewotCS5jbHMJPSAmczNjNjQwMF9zeXNjbGFzcywKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHMzYzY0MDBfY29yZV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHN5c2Rldl9jbGFzc19yZWdpc3RlcigmczNjNjQwMF9zeXNjbGFzcyk7Ci19Ci0KLWNvcmVfaW5pdGNhbGwoczNjNjQwMF9jb3JlX2luaXQpOwotCi1pbnQgX19pbml0IHMzYzY0MDBfaW5pdCh2b2lkKQotewotCXByaW50aygiUzNDNjQwMDogSW5pdGlhbGlzaW5nIGFyY2hpdGVjdHVyZVxuIik7Ci0KLQlyZXR1cm4gc3lzZGV2X3JlZ2lzdGVyKCZzM2M2NDAwX3N5c2Rldik7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvc2V0dXAtc2RoY2kuYyBiL2FyY2gvYXJtL21hY2gtczNjNjQwMC9zZXR1cC1zZGhjaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDM5OTM3Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9zZXR1cC1zZGhjaS5jCisrKyAvZGV2L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL3NldHVwLXNkaGNpLmMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBTM0M2NDEwIC0gSGVscGVyIGZ1bmN0aW9ucyBmb3Igc2V0dGlnbiB1cCBTREhDSSBkZXZpY2UocykgKEhTTU1DKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSA8bGludXgvbW1jL2NhcmQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgotCi0jaW5jbHVkZSA8cGxhdC9yZWdzLXNkaGNpLmg+Ci0jaW5jbHVkZSA8cGxhdC9zZGhjaS5oPgotCi0vKiBjbG9jayBzb3VyY2VzIGZvciB0aGUgbW1jIGJ1cyBjbG9jaywgb3JkZXIgYXMgZm9yIHRoZSBjdHJsMls1Li40XSAqLwotCi1jaGFyICpzM2M2NDAwX2hzbW1jX2Nsa3NyY3NbNF0gPSB7Ci0JWzBdID0gImhzbW1jIiwKLQlbMV0gPSAiaHNtbWMiLAotCVsyXSA9ICJtbWNfYnVzIiwKLQkvKiBbM10gPSAiNDhtIiwgLSBub3RlIG5vdCBzdWNjZXNzZnVsbHkgdXNlZCB5ZXQgKi8KLX07Ci0KLXZvaWQgczNjNjQwMF9zZXR1cF9zZGhjaV9jZmdfY2FyZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCi0JCQkJICB2b2lkIF9faW9tZW0gKnIsCi0JCQkJICBzdHJ1Y3QgbW1jX2lvcyAqaW9zLAotCQkJCSAgc3RydWN0IG1tY19jYXJkICpjYXJkKQotewotCXUzMiBjdHJsMiwgY3RybDM7Ci0KLQljdHJsMiA9IHJlYWRsKHIgKyBTM0NfU0RIQ0lfQ09OVFJPTDIpOwotCWN0cmwyICY9IFMzQ19TREhDSV9DVFJMMl9TRUxCQVNFQ0xLX01BU0s7Ci0JY3RybDIgfD0gKFMzQzY0WFhfU0RIQ0lfQ1RSTDJfRU5TVEFBU1lOQ0NMUiB8Ci0JCSAgUzNDNjRYWF9TREhDSV9DVFJMMl9FTkNNRENORk1TSyB8Ci0JCSAgUzNDX1NESENJX0NUUkwyX0VORkJDTEtSWCB8Ci0JCSAgUzNDX1NESENJX0NUUkwyX0RGQ05UX05PTkUgfAotCQkgIFMzQ19TREhDSV9DVFJMMl9FTkNMS09VVEhPTEQpOwotCi0JaWYgKGlvcy0+Y2xvY2sgPCAyNSAqIDEwMDAwMDApCi0JCWN0cmwzID0gKFMzQ19TREhDSV9DVFJMM19GQ1NFTDMgfAotCQkJIFMzQ19TREhDSV9DVFJMM19GQ1NFTDIgfAotCQkJIFMzQ19TREhDSV9DVFJMM19GQ1NFTDEgfAotCQkJIFMzQ19TREhDSV9DVFJMM19GQ1NFTDApOwotCWVsc2UKLQkJY3RybDMgPSAoUzNDX1NESENJX0NUUkwzX0ZDU0VMMSB8IFMzQ19TREhDSV9DVFJMM19GQ1NFTDApOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IENUUkwgMj0lMDh4LCAzPSUwOHhcbiIsIF9fZnVuY19fLCBjdHJsMiwgY3RybDMpOwotCXdyaXRlbChjdHJsMiwgciArIFMzQ19TREhDSV9DT05UUk9MMik7Ci0Jd3JpdGVsKGN0cmwzLCByICsgUzNDX1NESENJX0NPTlRST0wzKTsKLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTYyZjQ1Ni4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDEwOSArMCwwIEBACi0jIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0jIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotIwotIyBMaWNlbnNlZCB1bmRlciBHUEx2MgotCi0jIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFMzQzY0MTAgQ1BVCi0KLWNvbmZpZyBDUFVfUzNDNjQxMAotCWJvb2wKLQlzZWxlY3QgQ1BVX1MzQzY0MDBfSU5JVAotCXNlbGVjdCBDUFVfUzNDNjQwMF9DTE9DSwotCWhlbHAKLQkgIEVuYWJsZSBTM0M2NDEwIENQVSBzdXBwb3J0Ci0KLWNvbmZpZyBTM0M2NDEwX1NFVFVQX1NESENJCi0JYm9vbAotCXNlbGVjdCBTM0M2NFhYX1NFVFVQX1NESENJX0dQSU8KLQloZWxwCi0JICBJbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb25zIGZvciBTM0M2NDEwIGJhc2VkIFNESENJIHN5c3RlbXMKLQotY29uZmlnIE1BQ0hfQU5XNjQxMAotCWJvb2wgIkEmVzY0MTAiCi0Jc2VsZWN0IENQVV9TM0M2NDEwCi0Jc2VsZWN0IFMzQ19ERVZfRkIKLQlzZWxlY3QgUzNDNjRYWF9TRVRVUF9GQl8yNEJQUAotCWhlbHAKLQkgIE1hY2hpbmUgc3VwcG9ydCBmb3IgdGhlIEEmVzY0MTAKLQotY29uZmlnIE1BQ0hfU01ESzY0MTAKLQlib29sICJTTURLNjQxMCIKLQlzZWxlY3QgQ1BVX1MzQzY0MTAKLQlzZWxlY3QgUzNDX0RFVl9IU01NQwotCXNlbGVjdCBTM0NfREVWX0hTTU1DMQotCXNlbGVjdCBTM0NfREVWX0kyQzEKLQlzZWxlY3QgUzNDX0RFVl9GQgotCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCi0Jc2VsZWN0IFMzQ19ERVZfVVNCX0hTT1RHCi0Jc2VsZWN0IFMzQzY0MTBfU0VUVVBfU0RIQ0kKLQlzZWxlY3QgUzNDNjRYWF9TRVRVUF9JMkMxCi0Jc2VsZWN0IFMzQzY0WFhfU0VUVVBfRkJfMjRCUFAKLQloZWxwCi0JICBNYWNoaW5lIHN1cHBvcnQgZm9yIHRoZSBTYW1zdW5nIFNNREs2NDEwCi0KLSMgQXQgbGVhc3Qgc29tZSBvZiB0aGUgU01ESzY0MTBzIHdlcmUgc2hpcHBlZCB3aXRoIHRoZSBjYXJkIGRldGVjdAotIyBmb3IgdGhlIE1NQy9TRCBzbG90cyBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgaW5wdXQuIFRoaXMgbWVhbnMgdGhhdAotIyBlaXRoZXIgdGhlIGJvYXJkcyBuZWVkIHRvIGJlIGFsdGVyZWQgdG8gaGF2ZSBjaGFubmVsMCB0byBhbiBhbHRlcm5hdGUKLSMgY29uZmlndXJhdGlvbiBvciB0aGF0IG9ubHkgb25lIHNsb3QgY2FuIGJlIHVzZWQuCi0KLWNob2ljZQotCXByb21wdCAiU01ESzY0MTAgTU1DL1NEIHNsb3Qgc2V0dXAiCi0JZGVwZW5kcyBvbiBNQUNIX1NNREs2NDEwCi0KLWNvbmZpZyBTTURLNjQxMF9TRF9DSDAKLQlib29sICJVc2UgY2hhbm5lbCAwIG9ubHkiCi0JZGVwZW5kcyBvbiBNQUNIX1NNREs2NDEwCi0JaGVscAotICAgICAgICAgIFNlbGVjdCBDT043IChjaGFubmVsIDApIGFzIHRoZSBNTUMvU0Qgc2xvdCwgYXMKLQkgIGF0IGxlYXN0IHNvbWUgU01ESzY0MTAgYm9hcmRzIGNvbWUgd2l0aCB0aGUKLQkgIHJlc2lzdG9ycyBmaXR0ZWQgc28gdGhhdCB0aGUgY2FyZCBkZXRlY3RzIGZvcgotCSAgY2hhbm5lbHMgMCBhbmQgMSBhcmUgdGhlIHNhbWUuCi0gICAgICAgCi1jb25maWcgU01ESzY0MTBfU0RfQ0gxCi0JYm9vbCAiVXNlIGNoYW5uZWwgMSBvbmx5IgotCWRlcGVuZHMgb24gTUFDSF9TTURLNjQxMAotCWhlbHAKLSAgICAgICAgICBTZWxlY3QgQ09ONiAoY2hhbm5lbCAxKSBhcyB0aGUgTU1DL1NEIHNsb3QsIGFzCi0JICBhdCBsZWFzdCBzb21lIFNNREs2NDEwIGJvYXJkcyBjb21lIHdpdGggdGhlCi0JICByZXNpc3RvcnMgZml0dGVkIHNvIHRoYXQgdGhlIGNhcmQgZGV0ZWN0cyBmb3IKLQkgIGNoYW5uZWxzIDAgYW5kIDEgYXJlIHRoZSBzYW1lLgotCi1lbmRjaG9pY2UKLQotY29uZmlnIFNNREs2NDEwX1dNMTE5MF9FVjEKLQlib29sICJTdXBwb3J0IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyAxMTkwLUVWMSBQTUlDIGNhcmQiCi0JZGVwZW5kcyBvbiBNQUNIX1NNREs2NDEwCi0Jc2VsZWN0IFJFR1VMQVRPUgotCXNlbGVjdCBSRUdVTEFUT1JfV004MzUwCi0Jc2VsZWN0IFMzQzI0WFhfR1BJT19FWFRSQTY0Ci0Jc2VsZWN0IE1GRF9XTTgzNTBfSTJDCi0Jc2VsZWN0IE1GRF9XTTgzNTBfQ09ORklHX01PREVfMAotCXNlbGVjdCBNRkRfV004MzUwX0NPTkZJR19NT0RFXzMKLQlzZWxlY3QgTUZEX1dNODM1Ml9DT05GSUdfTU9ERV8wCi0JaGVscAotCSAgVGhlIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyAxMTkwLUVWMSBpcyBhIFdNODM1eCBiYXNlZCBQTUlDCi0JICBhbmQgYXVkaW8gZGF1Z2h0ZXJjYXJkIGZvciB0aGUgU2Ftc3VuZyBTTURLNjQxMCByZWZlcmVuY2UKLQkgIHBsYXRmb3JtLiAgRW5hYmxpbmcgdGhpcyBvcHRpb24gd2lsbCBidWlsZCBzdXBwb3J0IGZvciB0aGlzCi0JICBtb2R1bGUgaW50byB0aGUga2VybmVsLiAgVGhlIHByZXNlbmNlIG9mIHRoZSBtb2R1bGUgd2lsbCBiZQotCSAgZGV0ZWN0ZWQgYXQgcnVudGltZSBzbyB0aGUgdGhlIHJlc3VsdGluZyBrZXJuZWwgY2FuIGJlIHVzZWQKLQkgIHdpdGggb3Igd2l0aG91dCB0aGUgMTE5MC1FVjEgZml0dGVkLgotCi1jb25maWcgTUFDSF9OQ1AKLQlib29sICJOQ1AiCi0Jc2VsZWN0IENQVV9TM0M2NDEwCi0Jc2VsZWN0IFMzQ19ERVZfSTJDMQotCXNlbGVjdCBTM0NfREVWX0hTTU1DMQotCXNlbGVjdCBTM0M2NFhYX1NFVFVQX0kyQzEKLQloZWxwCi0gICAgICAgICAgTWFjaGluZSBzdXBwb3J0IGZvciB0aGUgU2Ftc3VuZyBOQ1AKLQotY29uZmlnIE1BQ0hfSE1UCi0JYm9vbCAiQWlyZ29vIEhNVCIKLQlzZWxlY3QgQ1BVX1MzQzY0MTAKLQlzZWxlY3QgUzNDX0RFVl9GQgotCXNlbGVjdCBTM0NfREVWX05BTkQKLQlzZWxlY3QgUzNDX0RFVl9VU0JfSE9TVAotCXNlbGVjdCBTM0M2NFhYX1NFVFVQX0ZCXzI0QlBQCi0Jc2VsZWN0IEhBVkVfUFdNCi0JaGVscAotCSAgTWFjaGluZSBzdXBwb3J0IGZvciB0aGUgQWlyZ29vIEhNVApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZTQ4YzNkLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMgYXJjaC9hcm0vcGxhdC1zM2M2NDEwL01ha2VmaWxlCi0jCi0jIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0jIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotIwotIyBMaWNlbnNlZCB1bmRlciBHUEx2MgotCi1vYmoteQkJCQk6PQotb2JqLW0JCQkJOj0KLW9iai1uCQkJCTo9Ci1vYmotCQkJCTo9Ci0KLSMgQ29yZSBzdXBwb3J0IGZvciBTM0M2NDEwIHN5c3RlbQotCi1vYmotJChDT05GSUdfQ1BVX1MzQzY0MTApCSs9IGNwdS5vCi0KLSMgSGVscGVyIGFuZCBkZXZpY2Ugc3VwcG9ydAotCi1vYmotJChDT05GSUdfUzNDNjQxMF9TRVRVUF9TREhDSSkJKz0gc2V0dXAtc2RoY2kubwotCi0jIG1hY2hpbmUgc3VwcG9ydAotCi1vYmotJChDT05GSUdfTUFDSF9BTlc2NDEwKQkrPSBtYWNoLWFudzY0MTAubwotb2JqLSQoQ09ORklHX01BQ0hfU01ESzY0MTApCSs9IG1hY2gtc21kazY0MTAubwotb2JqLSQoQ09ORklHX01BQ0hfTkNQKQkJKz0gbWFjaC1uY3Aubwotb2JqLSQoQ09ORklHX01BQ0hfSE1UKQkJKz0gbWFjaC1obXQubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL2NwdS5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL2NwdS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MjJjMDg2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9jcHUuYworKysgL2Rldi9udWxsCkBAIC0xLDEwNSArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0MTAvY3B1LmMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLmg+Ci0jaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgotI2luY2x1ZGUgPHBsYXQvcmVncy1jbG9jay5oPgotCi0jaW5jbHVkZSA8cGxhdC9jcHUuaD4KLSNpbmNsdWRlIDxwbGF0L2RldnMuaD4KLSNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8cGxhdC9zZGhjaS5oPgotI2luY2x1ZGUgPHBsYXQvaWljLWNvcmUuaD4KLSNpbmNsdWRlIDxwbGF0L3MzYzY0MDAuaD4KLSNpbmNsdWRlIDxwbGF0L3MzYzY0MTAuaD4KLQotLyogSW5pdGlhbCBJTyBtYXBwaW5ncyAqLwotCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIHMzYzY0MTBfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKLX07Ci0KLS8qIHMzYzY0MTBfbWFwX2lvCi0gKgotICogcmVnaXN0ZXIgdGhlIHN0YW5kYXJkIGNwdSBJTyBhcmVhcwotKi8KLQotdm9pZCBfX2luaXQgczNjNjQxMF9tYXBfaW8odm9pZCkKLXsKLQlpb3RhYmxlX2luaXQoczNjNjQxMF9pb2Rlc2MsIEFSUkFZX1NJWkUoczNjNjQxMF9pb2Rlc2MpKTsKLQotCS8qIGluaXRpYWxpc2UgZGV2aWNlIGluZm9ybWF0aW9uIGVhcmx5ICovCi0JczNjNjQxMF9kZWZhdWx0X3NkaGNpMCgpOwotCXMzYzY0MTBfZGVmYXVsdF9zZGhjaTEoKTsKLQlzM2M2NDEwX2RlZmF1bHRfc2RoY2kyKCk7Ci0KLQkvKiB0aGUgaTJjIGRldmljZXMgYXJlIGRpcmVjdGx5IGNvbXBhdGlibGUgd2l0aCBzM2MyNDQwICovCi0JczNjX2kyYzBfc2V0bmFtZSgiczNjMjQ0MC1pMmMiKTsKLQlzM2NfaTJjMV9zZXRuYW1lKCJzM2MyNDQwLWkyYyIpOwotCi0JczNjX2RldmljZV9uYW5kLm5hbWUgPSAiczNjNjQwMC1uYW5kIjsKLX0KLQotdm9pZCBfX2luaXQgczNjNjQxMF9pbml0X2Nsb2NrcyhpbnQgeHRhbCkKLXsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGluaXRpYWxpc2luZyBjbG9ja3NcbiIsIF9fZnVuY19fKTsKLQlzM2MyNHh4X3JlZ2lzdGVyX2Jhc2VjbG9ja3MoeHRhbCk7Ci0JczNjNjR4eF9yZWdpc3Rlcl9jbG9ja3MoKTsKLQlzM2M2NDAwX3JlZ2lzdGVyX2Nsb2NrcyhTM0M2NDEwX0NMS0RJVjBfQVJNX01BU0spOwotCXMzYzY0MDBfc2V0dXBfY2xvY2tzKCk7Ci19Ci0KLXZvaWQgX19pbml0IHMzYzY0MTBfaW5pdF9pcnEodm9pZCkKLXsKLQkvKiBWSUMwIGlzIG1pc3NpbmcgSVJRNywgVklDMSBpcyBmdWxseSBwb3B1bGF0ZWQuICovCi0JczNjNjR4eF9pbml0X2lycSh+MCAmIH4oMSA8PCA3KSwgfjApOwotfQotCi1zdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzY0MTBfc3lzY2xhc3MgPSB7Ci0JLm5hbWUJPSAiczNjNjQxMC1jb3JlIiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzM2M2NDEwX3N5c2RldiA9IHsKLQkuY2xzCT0gJnMzYzY0MTBfc3lzY2xhc3MsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzM2M2NDEwX2NvcmVfaW5pdCh2b2lkKQotewotCXJldHVybiBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnMzYzY0MTBfc3lzY2xhc3MpOwotfQotCi1jb3JlX2luaXRjYWxsKHMzYzY0MTBfY29yZV9pbml0KTsKLQotaW50IF9faW5pdCBzM2M2NDEwX2luaXQodm9pZCkKLXsKLQlwcmludGsoIlMzQzY0MTA6IEluaXRpYWxpc2luZyBhcmNoaXRlY3R1cmVcbiIpOwotCi0JcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmczNjNjQxMF9zeXNkZXYpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtYW53NjQxMC5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtYW53NjQxMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NjFjY2E2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLWFudzY0MTAuYworKysgL2Rldi9udWxsCkBAIC0xLDI0NSArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1hbnc2NDEwLmMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICogQ29weXJpZ2h0IDIwMDkgS3dhbmd3b28gTGVlCi0gKiAJS3dhbmd3b28gTGVlIDxrd2FuZ3dvby5sZWVAZ21haWwuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9mYi5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2RtOTAwMC5oPgotCi0jaW5jbHVkZSA8dmlkZW8vcGxhdGZvcm1fbGNkLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLWZiLmg+Ci0jaW5jbHVkZSA8bWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCi0jaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgotI2luY2x1ZGUgPHBsYXQvaWljLmg+Ci0jaW5jbHVkZSA8cGxhdC9mYi5oPgotCi0jaW5jbHVkZSA8cGxhdC9zM2M2NDEwLmg+Ci0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgotI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0jaW5jbHVkZSA8cGxhdC9yZWdzLWdwaW8uaD4KLSNpbmNsdWRlIDxwbGF0L3JlZ3MtbW9kZW0uaD4KLQotLyogRE05MDAwICovCi0jZGVmaW5lIEFOVzY0MTBfUEFfRE05MDAwCSgweDE4MDAwMDAwKQotCi0vKiBBIGhhcmR3YXJlIGJ1ZmZlciB0byBjb250cm9sIGV4dGVybmFsIGRldmljZXMgaXMgbWFwcGVkIGF0IDB4MzAwMDAwMDAuCi0gKiBJdCBjYW4gbm90IGJlIHJlYWQuIFNvIGN1cnJlbnQgc3RhdHVzIG11c3QgYmUga2VwdCBpbiBhbnc2NDEwX2V4dGRldl9zdGF0dXMuCi0gKi8KLSNkZWZpbmUgQU5XNjQxMF9WQV9FWFRERVYJUzNDX0FERFIoMHgwMjAwMDAwMCkKLSNkZWZpbmUgQU5XNjQxMF9QQV9FWFRERVYJKDB4MzAwMDAwMDApCi0KLSNkZWZpbmUgQU5XNjQxMF9FTl9ETTkwMDAJKDE8PDExKQotI2RlZmluZSBBTlc2NDEwX0VOX0xDRAkJKDE8PDE0KQotCi1zdGF0aWMgX191MzIgYW53NjQxMF9leHRkZXZfc3RhdHVzOwotCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBhbnc2NDEwX3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKLQlbMF0gPSB7Ci0JCS5od3BvcnQJICAgICA9IDAsCi0JCS5mbGFncwkgICAgID0gMCwKLQkJLnVjb24JICAgICA9IDB4M2M1LAotCQkudWxjb24JICAgICA9IDB4MDMsCi0JCS51ZmNvbgkgICAgID0gMHg1MSwKLQl9LAotCVsxXSA9IHsKLQkJLmh3cG9ydAkgICAgID0gMSwKLQkJLmZsYWdzCSAgICAgPSAwLAotCQkudWNvbgkgICAgID0gMHgzYzUsCi0JCS51bGNvbgkgICAgID0gMHgwMywKLQkJLnVmY29uCSAgICAgPSAweDUxLAotCX0sCi19OwotCi0vKiBmcmFtZWJ1ZmZlciBhbmQgTENEIHNldHVwLiAqLwotc3RhdGljIHZvaWQgX19pbml0IGFudzY0MTBfbGNkX21vZGVfc2V0KHZvaWQpCi17Ci0JdTMyIHRtcDsKLQotCS8qIHNldCB0aGUgTENEIHR5cGUgKi8KLQl0bXAgPSBfX3Jhd19yZWFkbChTM0M2NFhYX1NQQ09OKTsKLQl0bXAgJj0gflMzQzY0WFhfU1BDT05fTENEX1NFTF9NQVNLOwotCXRtcCB8PSBTM0M2NFhYX1NQQ09OX0xDRF9TRUxfUkdCOwotCV9fcmF3X3dyaXRlbCh0bXAsIFMzQzY0WFhfU1BDT04pOwotCi0JLyogcmVtb3ZlIHRoZSBMQ0QgYnlwYXNzICovCi0JdG1wID0gX19yYXdfcmVhZGwoUzNDNjRYWF9NT0RFTV9NSUZQQ09OKTsKLQl0bXAgJj0gfk1JRlBDT05fTENEX0JZUEFTUzsKLQlfX3Jhd193cml0ZWwodG1wLCBTM0M2NFhYX01PREVNX01JRlBDT04pOwotfQotCi0vKiBHUEYxID0gTENEIHBhbmVsIHBvd2VyCi0gKiBHUEY0ID0gTENEIGJhY2tsaWdodCBjb250cm9sCi0gKi8KLXN0YXRpYyB2b2lkIGFudzY0MTBfbGNkX3Bvd2VyX3NldChzdHJ1Y3QgcGxhdF9sY2RfZGF0YSAqcGQsCi0JCQkJICAgdW5zaWduZWQgaW50IHBvd2VyKQotewotCWlmIChwb3dlcikgewotCQlhbnc2NDEwX2V4dGRldl9zdGF0dXMgfD0gKEFOVzY0MTBfRU5fTENEIDw8IDE2KTsKLQkJX19yYXdfd3JpdGVsKGFudzY0MTBfZXh0ZGV2X3N0YXR1cywgQU5XNjQxMF9WQV9FWFRERVYpOwotCi0JCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0M2NFhYX0dQRigxKSwgMSk7Ci0JCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0M2NFhYX0dQRig0KSwgMSk7Ci0JfSBlbHNlIHsKLQkJYW53NjQxMF9leHRkZXZfc3RhdHVzICY9IH4oQU5XNjQxMF9FTl9MQ0QgPDwgMTYpOwotCQlfX3Jhd193cml0ZWwoYW53NjQxMF9leHRkZXZfc3RhdHVzLCBBTlc2NDEwX1ZBX0VYVERFVik7Ci0KLQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzY0WFhfR1BGKDEpLCAwKTsKLQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzY0WFhfR1BGKDQpLCAwKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdF9sY2RfZGF0YSBhbnc2NDEwX2xjZF9wb3dlcl9kYXRhID0gewotCS5zZXRfcG93ZXIJPSBhbnc2NDEwX2xjZF9wb3dlcl9zZXQsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhbnc2NDEwX2xjZF9wb3dlcmRldiA9IHsKLQkubmFtZQkJCT0gInBsYXRmb3JtLWxjZCIsCi0JLmRldi5wYXJlbnQJCT0gJnMzY19kZXZpY2VfZmIuZGV2LAotCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZhbnc2NDEwX2xjZF9wb3dlcl9kYXRhLAotfTsKLQotc3RhdGljIHN0cnVjdCBzM2NfZmJfcGRfd2luIGFudzY0MTBfZmJfd2luMCA9IHsKLQkvKiB0aGlzIGlzIHRvIGVuc3VyZSB3ZSB1c2Ugd2luMCAqLwotCS53aW5fbW9kZQk9IHsKLQkJLnBpeGNsb2NrCT0gNDEwOTQsCi0JCS5sZWZ0X21hcmdpbgk9IDgsCi0JCS5yaWdodF9tYXJnaW4JPSAxMywKLQkJLnVwcGVyX21hcmdpbgk9IDcsCi0JCS5sb3dlcl9tYXJnaW4JPSA1LAotCQkuaHN5bmNfbGVuCT0gMywKLQkJLnZzeW5jX2xlbgk9IDEsCi0JCS54cmVzCQk9IDgwMCwKLQkJLnlyZXMJCT0gNDgwLAotCX0sCi0JLm1heF9icHAJPSAzMiwKLQkuZGVmYXVsdF9icHAJPSAxNiwKLX07Ci0KLS8qIDQwNTU2NiBjbG9ja3MgcGVyIGZyYW1lID0+IDYwSHogcmVmcmVzaCByZXF1aXJlcyAyNDMzMzk2MEh6IGNsb2NrICovCi1zdGF0aWMgc3RydWN0IHMzY19mYl9wbGF0ZGF0YSBhbnc2NDEwX2xjZF9wZGF0YSBfX2luaXRkYXRhID0gewotCS5zZXR1cF9ncGlvCT0gczNjNjR4eF9mYl9ncGlvX3NldHVwXzI0YnBwLAotCS53aW5bMF0JCT0gJmFudzY0MTBfZmJfd2luMCwKLQkudmlkY29uMAk9IFZJRENPTjBfVklET1VUX1JHQiB8IFZJRENPTjBfUE5STU9ERV9SR0IsCi0JLnZpZGNvbjEJPSBWSURDT04xX0lOVl9IU1lOQyB8IFZJRENPTjFfSU5WX1ZTWU5DLAotfTsKLQotLyogRE05MDAwQUVQIDEwLzEwMCBldGhlcm5ldCBjb250cm9sbGVyICovCi1zdGF0aWMgdm9pZCBfX2luaXQgYW53NjQxMF9kbTkwMDBfZW5hYmxlKHZvaWQpCi17Ci0JYW53NjQxMF9leHRkZXZfc3RhdHVzIHw9IChBTlc2NDEwX0VOX0RNOTAwMCA8PCAxNik7Ci0JX19yYXdfd3JpdGVsKGFudzY0MTBfZXh0ZGV2X3N0YXR1cywgQU5XNjQxMF9WQV9FWFRERVYpOwotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGFudzY0MTBfZG05MDAwX3Jlc291cmNlW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgPSBBTlc2NDEwX1BBX0RNOTAwMCwKLQkJLmVuZCAgID0gQU5XNjQxMF9QQV9ETTkwMDAgKyAzLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0ID0gQU5XNjQxMF9QQV9ETTkwMDAgKyA0LAotCQkuZW5kICAgPSBBTlc2NDEwX1BBX0RNOTAwMCArIDQgKyA1MDAsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQgPSBJUlFfRUlOVCgxNSksCi0JCS5lbmQgICA9IElSUV9FSU5UKDE1KSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCBJUlFGX1RSSUdHRVJfSElHSCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBkbTkwMDBfcGxhdF9kYXRhIGFudzY0MTBfZG05MDAwX3BkYXRhID0gewotCS5mbGFncwkgID0gKERNOTAwMF9QTEFURl8xNkJJVE9OTFkgfCBETTkwMDBfUExBVEZfTk9fRUVQUk9NKSwKLQkvKiBkZXZfYWRkciBjYW4gYmUgc2V0IHRvIHByb3ZpZGUgaHdhZGRyLiAqLwotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYW53NjQxMF9kZXZpY2VfZXRoID0gewotCS5uYW1lCT0gImRtOTAwMCIsCi0JLmlkCT0gLTEsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGFudzY0MTBfZG05MDAwX3Jlc291cmNlKSwKLQkucmVzb3VyY2UJPSBhbnc2NDEwX2RtOTAwMF9yZXNvdXJjZSwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YSAgPSAmYW53NjQxMF9kbTkwMDBfcGRhdGEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgYW53NjQxMF9pb2Rlc2NbXSBfX2luaXRkYXRhID0gewotCXsKLQkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylBTlc2NDEwX1ZBX0VYVERFViwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFOVzY0MTBfUEFfRVhUREVWKSwKLQkJLmxlbmd0aAkJPSBTWl82NEssCi0JCS50eXBlCQk9IE1UX0RFVklDRSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmFudzY0MTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnMzY19kZXZpY2VfZmIsCi0JJmFudzY0MTBfbGNkX3Bvd2VyZGV2LAotCSZhbnc2NDEwX2RldmljZV9ldGgsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgYW53NjQxMF9tYXBfaW8odm9pZCkKLXsKLQlzM2M2NHh4X2luaXRfaW8oYW53NjQxMF9pb2Rlc2MsIEFSUkFZX1NJWkUoYW53NjQxMF9pb2Rlc2MpKTsKLQlzM2MyNHh4X2luaXRfY2xvY2tzKDEyMDAwMDAwKTsKLQlzM2MyNHh4X2luaXRfdWFydHMoYW53NjQxMF91YXJ0Y2ZncywgQVJSQVlfU0laRShhbnc2NDEwX3VhcnRjZmdzKSk7Ci0KLQlhbnc2NDEwX2xjZF9tb2RlX3NldCgpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgYW53NjQxMF9tYWNoaW5lX2luaXQodm9pZCkKLXsKLQlzM2NfZmJfc2V0X3BsYXRkYXRhKCZhbnc2NDEwX2xjZF9wZGF0YSk7Ci0KLQlncGlvX3JlcXVlc3QoUzNDNjRYWF9HUEYoMSksICJwYW5lbCBwb3dlciIpOwotCWdwaW9fcmVxdWVzdChTM0M2NFhYX0dQRig0KSwgIkxDRCBiYWNrbGlnaHQiKTsKLQotCWFudzY0MTBfZG05MDAwX2VuYWJsZSgpOwotCi0JcGxhdGZvcm1fYWRkX2RldmljZXMoYW53NjQxMF9kZXZpY2VzLCBBUlJBWV9TSVpFKGFudzY0MTBfZGV2aWNlcykpOwotfQotCi1NQUNISU5FX1NUQVJUKEFOVzY0MTAsICJBJlc2NDEwIikKLQkvKiBNYWludGFpbmVyOiBLd2FuZ3dvbyBMZWUgPGt3YW5nd29vLmxlZUBnbWFpbC5jb20+ICovCi0JLnBoeXNfaW8JPSBTM0NfUEFfVUFSVCAmIDB4ZmZmMDAwMDAsCi0JLmlvX3BnX29mZnN0CT0gKCgodTMyKVMzQ19WQV9VQVJUKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zCT0gUzNDNjRYWF9QQV9TRFJBTSArIDB4MTAwLAotCi0JLmluaXRfaXJxCT0gczNjNjQxMF9pbml0X2lycSwKLQkubWFwX2lvCQk9IGFudzY0MTBfbWFwX2lvLAotCS5pbml0X21hY2hpbmUJPSBhbnc2NDEwX21hY2hpbmVfaW5pdCwKLQkudGltZXIJCT0gJnMzYzI0eHhfdGltZXIsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtaG10LmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1obXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzYxOTQ1Ni4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1obXQuYworKysgL2Rldi9udWxsCkBAIC0xLDI3NiArMCwwIEBACi0vKiBtYWNoLWhtdC5jIC0gUGxhdGZvcm0gY29kZSBmb3IgQWlyZ29vIEhNVAotICoKLSAqIENvcHlyaWdodCAyMDA5IFBldGVyIEtvcnNnYWFyZCA8amFjbWV0QHN1bnNpdGUuZGs+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0qLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9mYi5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9wd21fYmFja2xpZ2h0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgotI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLWZiLmg+Ci0jaW5jbHVkZSA8bWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCi0jaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgotI2luY2x1ZGUgPHBsYXQvaWljLmg+Ci0jaW5jbHVkZSA8cGxhdC9mYi5oPgotI2luY2x1ZGUgPHBsYXQvbmFuZC5oPgotCi0jaW5jbHVkZSA8cGxhdC9zM2M2NDEwLmg+Ci0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgotI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0KLSNkZWZpbmUgVUNPTiBTM0MyNDEwX1VDT05fREVGQVVMVAotI2RlZmluZSBVTENPTiAoUzNDMjQxMF9MQ09OX0NTOCB8IFMzQzI0MTBfTENPTl9QTk9ORSkKLSNkZWZpbmUgVUZDT04gKFMzQzI0MTBfVUZDT05fUlhUUklHOCB8IFMzQzI0MTBfVUZDT05fRklGT01PREUpCi0KLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIGhtdF91YXJ0Y2Znc1tdIF9faW5pdGRhdGEgPSB7Ci0JWzBdID0gewotCQkuaHdwb3J0CSAgICAgPSAwLAotCQkuZmxhZ3MJICAgICA9IDAsCi0JCS51Y29uCSAgICAgPSBVQ09OLAotCQkudWxjb24JICAgICA9IFVMQ09OLAotCQkudWZjb24JICAgICA9IFVGQ09OLAotCX0sCi0JWzFdID0gewotCQkuaHdwb3J0CSAgICAgPSAxLAotCQkuZmxhZ3MJICAgICA9IDAsCi0JCS51Y29uCSAgICAgPSBVQ09OLAotCQkudWxjb24JICAgICA9IFVMQ09OLAotCQkudWZjb24JICAgICA9IFVGQ09OLAotCX0sCi0JWzJdID0gewotCQkuaHdwb3J0CSAgICAgPSAyLAotCQkuZmxhZ3MJICAgICA9IDAsCi0JCS51Y29uCSAgICAgPSBVQ09OLAotCQkudWxjb24JICAgICA9IFVMQ09OLAotCQkudWZjb24JICAgICA9IFVGQ09OLAotCX0sCi19OwotCi1zdGF0aWMgaW50IGhtdF9ibF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZ3Bpb19yZXF1ZXN0KFMzQzY0WFhfR1BCKDQpLCAibGNkIGJhY2tsaWdodCBlbmFibGUiKTsKLQlpZiAoIXJldCkKLQkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzY0WFhfR1BCKDQpLCAwKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgaG10X2JsX25vdGlmeShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBicmlnaHRuZXNzKQotewotCS8qCi0JICogdHJhbnNsYXRlIGZyb20gQ0lFTFVWL0NJRUxBQiBMKi0+YnJpZ2h0bmVzcywgRS5HLiBmcm9tCi0JICogcGVyY2VpdmVkIGx1bWluYW5jZSB0byBsaWdodCBvdXRwdXQuIEFzc3VtZXMgcmFuZ2UgMC4uMjU2MDAKLQkgKi8KLQlpZiAoYnJpZ2h0bmVzcyA8IDB4ODAwKSB7Ci0JCS8qIFkgPSBZbiAqIEwgLyA5MDMuMyAqLwotCQlicmlnaHRuZXNzID0gKDEwMCoyNTYgKiBicmlnaHRuZXNzICsgMjMxMjQ1LzIpIC8gMjMxMjQ1OwotCX0gZWxzZSB7Ci0JCS8qIFkgPSBZbiAqICgoTCArIDE2KSAvIDExNiApXjMgKi8KLQkJaW50IHQgPSAoYnJpZ2h0bmVzcyo0ICsgMTYqMTAyNCArIDU4KS8xMTY7Ci0JCWJyaWdodG5lc3MgPSAyNSAqICgodCAqIHQgKiB0ICsgMHgxMDAwMDAvMikgLyAweDEwMDAwMCk7Ci0JfQotCi0JZ3Bpb19zZXRfdmFsdWUoUzNDNjRYWF9HUEIoNCksIGJyaWdodG5lc3MpOwotCi0JcmV0dXJuIGJyaWdodG5lc3M7Ci19Ci0KLXN0YXRpYyB2b2lkIGhtdF9ibF9leGl0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlncGlvX2ZyZWUoUzNDNjRYWF9HUEIoNCkpOwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX3B3bV9iYWNrbGlnaHRfZGF0YSBobXRfYmFja2xpZ2h0X2RhdGEgPSB7Ci0JLnB3bV9pZAkJPSAxLAotCS5tYXhfYnJpZ2h0bmVzcwk9IDEwMCAqIDI1NiwKLQkuZGZ0X2JyaWdodG5lc3MJPSA0MCAqIDI1NiwKLQkucHdtX3BlcmlvZF9ucwk9IDEwMDAwMDAwMDAgLyAoMTAwICogMjU2ICogMjApLAotCS5pbml0CQk9IGhtdF9ibF9pbml0LAotCS5ub3RpZnkJCT0gaG10X2JsX25vdGlmeSwKLQkuZXhpdAkJPSBobXRfYmxfZXhpdCwKLQotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaG10X2JhY2tsaWdodF9kZXZpY2UgPSB7Ci0JLm5hbWUJCT0gInB3bS1iYWNrbGlnaHQiLAotCS5kZXYJCT0gewotCQkucGFyZW50CT0gJnMzY19kZXZpY2VfdGltZXJbMV0uZGV2LAotCQkucGxhdGZvcm1fZGF0YSA9ICZobXRfYmFja2xpZ2h0X2RhdGEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjX2ZiX3BkX3dpbiBobXRfZmJfd2luMCA9IHsKLQkud2luX21vZGUJPSB7Ci0JCS5waXhjbG9jawk9IDQxMDk0LAotCQkubGVmdF9tYXJnaW4JPSA4LAotCQkucmlnaHRfbWFyZ2luCT0gMTMsCi0JCS51cHBlcl9tYXJnaW4JPSA3LAotCQkubG93ZXJfbWFyZ2luCT0gNSwKLQkJLmhzeW5jX2xlbgk9IDMsCi0JCS52c3luY19sZW4JPSAxLAotCQkueHJlcwkJPSA4MDAsCi0JCS55cmVzCQk9IDQ4MCwKLQl9LAotCS5tYXhfYnBwCT0gMzIsCi0JLmRlZmF1bHRfYnBwCT0gMTYsCi19OwotCi0vKiA0MDU1NjYgY2xvY2tzIHBlciBmcmFtZSA9PiA2MEh6IHJlZnJlc2ggcmVxdWlyZXMgMjQzMzM5NjBIeiBjbG9jayAqLwotc3RhdGljIHN0cnVjdCBzM2NfZmJfcGxhdGRhdGEgaG10X2xjZF9wZGF0YSBfX2luaXRkYXRhID0gewotCS5zZXR1cF9ncGlvCT0gczNjNjR4eF9mYl9ncGlvX3NldHVwXzI0YnBwLAotCS53aW5bMF0JCT0gJmhtdF9mYl93aW4wLAotCS52aWRjb24wCT0gVklEQ09OMF9WSURPVVRfUkdCIHwgVklEQ09OMF9QTlJNT0RFX1JHQiwKLQkudmlkY29uMQk9IFZJRENPTjFfSU5WX0hTWU5DIHwgVklEQ09OMV9JTlZfVlNZTkMsCi19OwotCi1zdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gaG10X25hbmRfcGFydFtdID0gewotCVswXSA9IHsKLQkJLm5hbWUJPSAidWJvb3QiLAotCQkuc2l6ZQk9IFNaXzUxMkssCi0JCS5vZmZzZXQJPSAwLAotCX0sCi0JWzFdID0gewotCQkubmFtZQk9ICJ1Ym9vdC1lbnYxIiwKLQkJLnNpemUJPSBTWl8yNTZLLAotCQkub2Zmc2V0CT0gU1pfNTEySywKLQl9LAotCVsyXSA9IHsKLQkJLm5hbWUJPSAidWJvb3QtZW52MiIsCi0JCS5zaXplCT0gU1pfMjU2SywKLQkJLm9mZnNldAk9IFNaXzUxMksgKyBTWl8yNTZLLAotCX0sCi0JWzNdID0gewotCQkubmFtZQk9ICJrZXJuZWwiLAotCQkuc2l6ZQk9IFNaXzJNLAotCQkub2Zmc2V0CT0gU1pfMU0sCi0JfSwKLQlbNF0gPSB7Ci0JCS5uYW1lCT0gInJvb3RmcyIsCi0JCS5zaXplCT0gTVREUEFSVF9TSVpfRlVMTCwKLQkJLm9mZnNldAk9IFNaXzFNICsgU1pfMk0sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9uYW5kX3NldCBobXRfbmFuZF9zZXRzW10gPSB7Ci0JWzBdID0gewotCQkubmFtZQkJPSAibmFuZCIsCi0JCS5ucl9jaGlwcwk9IDEsCi0JCS5ucl9wYXJ0aXRpb25zCT0gQVJSQVlfU0laRShobXRfbmFuZF9wYXJ0KSwKLQkJLnBhcnRpdGlvbnMJPSBobXRfbmFuZF9wYXJ0LAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCBobXRfbmFuZF9pbmZvID0gewotCS50YWNscwkJPSAyNSwKLQkudHdycGgwCQk9IDU1LAotCS50d3JwaDEJCT0gNDAsCi0JLm5yX3NldHMJPSBBUlJBWV9TSVpFKGhtdF9uYW5kX3NldHMpLAotCS5zZXRzCQk9IGhtdF9uYW5kX3NldHMsCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkIGhtdF9sZWRzW10gPSB7Ci0JeyAvKiBsZWZ0IGZ1bmN0aW9uIGtleXMgKi8KLQkJLm5hbWUJCQk9ICJsZWZ0OmJsdWUiLAotCQkuZ3BpbwkJCT0gUzNDNjRYWF9HUE8oMTIpLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAotCX0sCi0JeyAvKiByaWdodCBmdW5jdGlvbiBrZXlzIC0gcmVkICovCi0JCS5uYW1lCQkJPSAicmlnaHQ6cmVkIiwKLQkJLmdwaW8JCQk9IFMzQzY0WFhfR1BPKDEzKSwKLQl9LAotCXsgLyogcmlnaHQgZnVuY3Rpb24ga2V5cyAtIGdyZWVuICovCi0JCS5uYW1lCQkJPSAicmlnaHQ6Z3JlZW4iLAotCQkuZ3BpbwkJCT0gUzNDNjRYWF9HUE8oMTQpLAotCX0sCi0JeyAvKiByaWdodCBmdW5jdGlvbiBrZXlzIC0gYmx1ZSAqLwotCQkubmFtZQkJCT0gInJpZ2h0OmJsdWUiLAotCQkuZ3BpbwkJCT0gUzNDNjRYWF9HUE8oMTUpLAotCQkuZGVmYXVsdF90cmlnZ2VyCT0gImRlZmF1bHQtb24iLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgaG10X2xlZF9kYXRhID0gewotCS5udW1fbGVkcyA9IEFSUkFZX1NJWkUoaG10X2xlZHMpLAotCS5sZWRzID0gaG10X2xlZHMsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBobXRfbGVkc19kZXZpY2UgPSB7Ci0JLm5hbWUJCQk9ICJsZWRzLWdwaW8iLAotCS5pZAkJCT0gLTEsCi0JLmRldi5wbGF0Zm9ybV9kYXRhCT0gJmhtdF9sZWRfZGF0YSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaG10X2lvZGVzY1tdID0ge307Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpobXRfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnMzY19kZXZpY2VfaTJjMCwKLQkmczNjX2RldmljZV9uYW5kLAotCSZzM2NfZGV2aWNlX2ZiLAotCSZzM2NfZGV2aWNlX3VzYiwKLQkmczNjX2RldmljZV90aW1lclsxXSwKLQkmaG10X2JhY2tsaWdodF9kZXZpY2UsCi0JJmhtdF9sZWRzX2RldmljZSwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBobXRfbWFwX2lvKHZvaWQpCi17Ci0JczNjNjR4eF9pbml0X2lvKGhtdF9pb2Rlc2MsIEFSUkFZX1NJWkUoaG10X2lvZGVzYykpOwotCXMzYzI0eHhfaW5pdF9jbG9ja3MoMTIwMDAwMDApOwotCXMzYzI0eHhfaW5pdF91YXJ0cyhobXRfdWFydGNmZ3MsIEFSUkFZX1NJWkUoaG10X3VhcnRjZmdzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBobXRfbWFjaGluZV9pbml0KHZvaWQpCi17Ci0JczNjX2kyYzBfc2V0X3BsYXRkYXRhKE5VTEwpOwotCXMzY19mYl9zZXRfcGxhdGRhdGEoJmhtdF9sY2RfcGRhdGEpOwotCXMzY19uYW5kX3NldF9wbGF0ZGF0YSgmaG10X25hbmRfaW5mbyk7Ci0KLQlncGlvX3JlcXVlc3QoUzNDNjRYWF9HUEMoNyksICJ1c2IgcG93ZXIiKTsKLQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDNjRYWF9HUEMoNyksIDApOwotCWdwaW9fcmVxdWVzdChTM0M2NFhYX0dQTSgwKSwgInVzYiBwb3dlciIpOwotCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0M2NFhYX0dQTSgwKSwgMSk7Ci0JZ3Bpb19yZXF1ZXN0KFMzQzY0WFhfR1BLKDcpLCAidXNiIHBvd2VyIik7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzY0WFhfR1BLKDcpLCAxKTsKLQlncGlvX3JlcXVlc3QoUzNDNjRYWF9HUEYoMTMpLCAidXNiIHBvd2VyIik7Ci0JZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzY0WFhfR1BGKDEzKSwgMSk7Ci0KLQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhobXRfZGV2aWNlcywgQVJSQVlfU0laRShobXRfZGV2aWNlcykpOwotfQotCi1NQUNISU5FX1NUQVJUKEhNVCwgIkFpcmdvby1ITVQiKQotCS8qIE1haW50YWluZXI6IFBldGVyIEtvcnNnYWFyZCA8amFjbWV0QHN1bnNpdGUuZGs+ICovCi0JLnBoeXNfaW8JPSBTM0NfUEFfVUFSVCAmIDB4ZmZmMDAwMDAsCi0JLmlvX3BnX29mZnN0CT0gKCgodTMyKVMzQ19WQV9VQVJUKSA+PiAxOCkgJiAweGZmZmMsCi0JLmJvb3RfcGFyYW1zCT0gUzNDNjRYWF9QQV9TRFJBTSArIDB4MTAwLAotCS5pbml0X2lycQk9IHMzYzY0MTBfaW5pdF9pcnEsCi0JLm1hcF9pbwkJPSBobXRfbWFwX2lvLAotCS5pbml0X21hY2hpbmUJPSBobXRfbWFjaGluZV9pbml0LAotCS50aW1lcgkJPSAmczNjMjR4eF90aW1lciwKLU1BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1uY3AuYyBiL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLW5jcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWU5YmJmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLW5jcC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA3ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1uY3AuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0KLSNpbmNsdWRlIDx2aWRlby9wbGF0Zm9ybV9sY2QuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtZmIuaD4KLSNpbmNsdWRlIDxtYWNoL21hcC5oPgotCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+Ci0jaW5jbHVkZSA8cGxhdC9paWMuaD4KLSNpbmNsdWRlIDxwbGF0L2ZiLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L3MzYzY0MTAuaD4KLSNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8cGxhdC9kZXZzLmg+Ci0jaW5jbHVkZSA8cGxhdC9jcHUuaD4KLQotI2RlZmluZSBVQ09OIFMzQzI0MTBfVUNPTl9ERUZBVUxUCi0jZGVmaW5lIFVMQ09OIFMzQzI0MTBfTENPTl9DUzggfCBTM0MyNDEwX0xDT05fUE5PTkUKLSNkZWZpbmUgVUZDT04gUzNDMjQxMF9VRkNPTl9SWFRSSUc4IHwgUzNDMjQxMF9VRkNPTl9GSUZPTU9ERQotCi1zdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBuY3BfdWFydGNmZ3NbXSBfX2luaXRkYXRhID0gewotCS8qIFJFVklTSVQ6IE5DUCB1c2VzIG9ubHkgc2VyaWFsIDEsIDIgKi8KLQlbMF0gPSB7Ci0JCS5od3BvcnQJICAgICA9IDAsCi0JCS5mbGFncwkgICAgID0gMCwKLQkJLnVjb24JICAgICA9IFVDT04sCi0JCS51bGNvbgkgICAgID0gVUxDT04sCi0JCS51ZmNvbgkgICAgID0gVUZDT04sCi0JfSwKLQlbMV0gPSB7Ci0JCS5od3BvcnQJICAgICA9IDEsCi0JCS5mbGFncwkgICAgID0gMCwKLQkJLnVjb24JICAgICA9IFVDT04sCi0JCS51bGNvbgkgICAgID0gVUxDT04sCi0JCS51ZmNvbgkgICAgID0gVUZDT04sCi0JfSwKLQlbMl0gPSB7Ci0JCS5od3BvcnQJICAgICA9IDIsCi0JCS5mbGFncwkgICAgID0gMCwKLQkJLnVjb24JICAgICA9IFVDT04sCi0JCS51bGNvbgkgICAgID0gVUxDT04sCi0JCS51ZmNvbgkgICAgID0gVUZDT04sCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpuY3BfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJnMzY19kZXZpY2VfaHNtbWMxLAotCSZzM2NfZGV2aWNlX2kyYzAsCi19OwotCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIG5jcF9pb2Rlc2NbXSBfX2luaXRkYXRhID0ge307Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBuY3BfbWFwX2lvKHZvaWQpCi17Ci0JczNjNjR4eF9pbml0X2lvKG5jcF9pb2Rlc2MsIEFSUkFZX1NJWkUobmNwX2lvZGVzYykpOwotCXMzYzI0eHhfaW5pdF9jbG9ja3MoMTIwMDAwMDApOwotCXMzYzI0eHhfaW5pdF91YXJ0cyhuY3BfdWFydGNmZ3MsIEFSUkFZX1NJWkUobmNwX3VhcnRjZmdzKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBuY3BfbWFjaGluZV9pbml0KHZvaWQpCi17Ci0JczNjX2kyYzBfc2V0X3BsYXRkYXRhKE5VTEwpOwotCi0JcGxhdGZvcm1fYWRkX2RldmljZXMobmNwX2RldmljZXMsIEFSUkFZX1NJWkUobmNwX2RldmljZXMpKTsKLX0KLQotTUFDSElORV9TVEFSVChOQ1AsICJOQ1AiKQotCS8qIE1haW50YWluZXI6IFNhbXN1bmcgRWxlY3Ryb25pY3MgKi8KLQkucGh5c19pbwk9IFMzQ19QQV9VQVJUICYgMHhmZmYwMDAwMCwKLQkuaW9fcGdfb2Zmc3QJPSAoKCh1MzIpUzNDX1ZBX1VBUlQpID4+IDE4KSAmIDB4ZmZmYywKLQkuYm9vdF9wYXJhbXMJPSBTM0M2NFhYX1BBX1NEUkFNICsgMHgxMDAsCi0JLmluaXRfaXJxCT0gczNjNjQxMF9pbml0X2lycSwKLQkubWFwX2lvCQk9IG5jcF9tYXBfaW8sCi0JLmluaXRfbWFjaGluZQk9IG5jcF9tYWNoaW5lX2luaXQsCi0JLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAotTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLXNtZGs2NDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvbWFjaC1zbWRrNjQxMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OTY5ZmU3Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczNjNjQxMC9tYWNoLXNtZGs2NDEwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NTcgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL21hY2gtc21kazY0MTAuYwotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0qLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KLSNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZml4ZWQuaD4KLQotI2lmZGVmIENPTkZJR19TTURLNjQxMF9XTTExOTBfRVYxCi0jaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9jb3JlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9wbWljLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHZpZGVvL3BsYXRmb3JtX2xjZC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvcmVncy1mYi5oPgotI2luY2x1ZGUgPG1hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLQotI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KLSNpbmNsdWRlIDxwbGF0L3JlZ3MtbW9kZW0uaD4KLSNpbmNsdWRlIDxwbGF0L3JlZ3MtZ3Bpby5oPgotI2luY2x1ZGUgPHBsYXQvcmVncy1zeXMuaD4KLSNpbmNsdWRlIDxwbGF0L2lpYy5oPgotI2luY2x1ZGUgPHBsYXQvZmIuaD4KLSNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L3MzYzY0MTAuaD4KLSNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8cGxhdC9kZXZzLmg+Ci0jaW5jbHVkZSA8cGxhdC9jcHUuaD4KLQotI2RlZmluZSBVQ09OIFMzQzI0MTBfVUNPTl9ERUZBVUxUIHwgUzNDMjQxMF9VQ09OX1VDTEsKLSNkZWZpbmUgVUxDT04gUzNDMjQxMF9MQ09OX0NTOCB8IFMzQzI0MTBfTENPTl9QTk9ORSB8IFMzQzI0MTBfTENPTl9TVE9QQgotI2RlZmluZSBVRkNPTiBTM0MyNDEwX1VGQ09OX1JYVFJJRzggfCBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCi0KLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIHNtZGs2NDEwX3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKLQlbMF0gPSB7Ci0JCS5od3BvcnQJICAgICA9IDAsCi0JCS5mbGFncwkgICAgID0gMCwKLQkJLnVjb24JICAgICA9IFVDT04sCi0JCS51bGNvbgkgICAgID0gVUxDT04sCi0JCS51ZmNvbgkgICAgID0gVUZDT04sCi0JfSwKLQlbMV0gPSB7Ci0JCS5od3BvcnQJICAgICA9IDEsCi0JCS5mbGFncwkgICAgID0gMCwKLQkJLnVjb24JICAgICA9IFVDT04sCi0JCS51bGNvbgkgICAgID0gVUxDT04sCi0JCS51ZmNvbgkgICAgID0gVUZDT04sCi0JfSwKLQlbMl0gPSB7Ci0JCS5od3BvcnQJICAgICA9IDIsCi0JCS5mbGFncwkgICAgID0gMCwKLQkJLnVjb24JICAgICA9IFVDT04sCi0JCS51bGNvbgkgICAgID0gVUxDT04sCi0JCS51ZmNvbgkgICAgID0gVUZDT04sCi0JfSwKLQlbM10gPSB7Ci0JCS5od3BvcnQJICAgICA9IDMsCi0JCS5mbGFncwkgICAgID0gMCwKLQkJLnVjb24JICAgICA9IFVDT04sCi0JCS51bGNvbgkgICAgID0gVUxDT04sCi0JCS51ZmNvbgkgICAgID0gVUZDT04sCi0JfSwKLX07Ci0KLS8qIGZyYW1lYnVmZmVyIGFuZCBMQ0Qgc2V0dXAuICovCi0KLS8qIEdQRjE1ID0gTENEIGJhY2tsaWdodCBjb250cm9sCi0gKiBHUEYxMyA9PiBQYW5lbCBwb3dlcgotICogR1BONSA9IExDRCBuUkVTRVQgc2lnbmFsCi0gKiBQV01fVE9VVDEgPT4gYmFja2xpZ2h0IGJyaWdodG5lc3MKLSAqLwotCi1zdGF0aWMgdm9pZCBzbWRrNjQxMF9sY2RfcG93ZXJfc2V0KHN0cnVjdCBwbGF0X2xjZF9kYXRhICpwZCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgcG93ZXIpCi17Ci0JaWYgKHBvd2VyKSB7Ci0JCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0M2NFhYX0dQRigxMyksIDEpOwotCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDNjRYWF9HUEYoMTUpLCAxKTsKLQotCQkvKiBmaXJlIG5SRVNFVCBvbiBwb3dlciB1cCAqLwotCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDNjRYWF9HUE4oNSksIDApOwotCQltc2xlZXAoMTApOwotCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDNjRYWF9HUE4oNSksIDEpOwotCQltc2xlZXAoMSk7Ci0JfSBlbHNlIHsKLQkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzY0WFhfR1BGKDE1KSwgMCk7Ci0JCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0M2NFhYX0dQRigxMyksIDApOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBwbGF0X2xjZF9kYXRhIHNtZGs2NDEwX2xjZF9wb3dlcl9kYXRhID0gewotCS5zZXRfcG93ZXIJPSBzbWRrNjQxMF9sY2RfcG93ZXJfc2V0LAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21kazY0MTBfbGNkX3Bvd2VyZGV2ID0gewotCS5uYW1lCQkJPSAicGxhdGZvcm0tbGNkIiwKLQkuZGV2LnBhcmVudAkJPSAmczNjX2RldmljZV9mYi5kZXYsCi0JLmRldi5wbGF0Zm9ybV9kYXRhCT0gJnNtZGs2NDEwX2xjZF9wb3dlcl9kYXRhLAotfTsKLQotc3RhdGljIHN0cnVjdCBzM2NfZmJfcGRfd2luIHNtZGs2NDEwX2ZiX3dpbjAgPSB7Ci0JLyogdGhpcyBpcyB0byBlbnN1cmUgd2UgdXNlIHdpbjAgKi8KLQkud2luX21vZGUJPSB7Ci0JCS5waXhjbG9jawk9IDQxMDk0LAotCQkubGVmdF9tYXJnaW4JPSA4LAotCQkucmlnaHRfbWFyZ2luCT0gMTMsCi0JCS51cHBlcl9tYXJnaW4JPSA3LAotCQkubG93ZXJfbWFyZ2luCT0gNSwKLQkJLmhzeW5jX2xlbgk9IDMsCi0JCS52c3luY19sZW4JPSAxLAotCQkueHJlcwkJPSA4MDAsCi0JCS55cmVzCQk9IDQ4MCwKLQl9LAotCS5tYXhfYnBwCT0gMzIsCi0JLmRlZmF1bHRfYnBwCT0gMTYsCi19OwotCi0vKiA0MDU1NjYgY2xvY2tzIHBlciBmcmFtZSA9PiA2MEh6IHJlZnJlc2ggcmVxdWlyZXMgMjQzMzM5NjBIeiBjbG9jayAqLwotc3RhdGljIHN0cnVjdCBzM2NfZmJfcGxhdGRhdGEgc21kazY0MTBfbGNkX3BkYXRhIF9faW5pdGRhdGEgPSB7Ci0JLnNldHVwX2dwaW8JPSBzM2M2NHh4X2ZiX2dwaW9fc2V0dXBfMjRicHAsCi0JLndpblswXQkJPSAmc21kazY0MTBfZmJfd2luMCwKLQkudmlkY29uMAk9IFZJRENPTjBfVklET1VUX1JHQiB8IFZJRENPTjBfUE5STU9ERV9SR0IsCi0JLnZpZGNvbjEJPSBWSURDT04xX0lOVl9IU1lOQyB8IFZJRENPTjFfSU5WX1ZTWU5DLAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWRrNjQxMF9zbXNjOTExeF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCA9IDB4MTgwMDAwMDAsCi0JCS5lbmQgICA9IDB4MTgwMDAwMDAgKyBTWl82NEsgLSAxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0ID0gUzNDX0VJTlQoMTApLAotCQkuZW5kICAgPSBTM0NfRUlOVCgxMCksCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRIHwgSVJRX1RZUEVfTEVWRUxfTE9XLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyBzbWRrNjQxMF9zbXNjOTExeF9wZGF0YSA9IHsKLQkuaXJxX3BvbGFyaXR5ICA9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAotCS5pcnFfdHlwZSAgICAgID0gU01TQzkxMVhfSVJRX1RZUEVfT1BFTl9EUkFJTiwKLQkuZmxhZ3MgICAgICAgICA9IFNNU0M5MTFYX1VTRV8zMkJJVCB8IFNNU0M5MTFYX0ZPUkNFX0lOVEVSTkFMX1BIWSwKLQkucGh5X2ludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUksCi19OwotCi0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtZGs2NDEwX3Ntc2M5MTF4ID0gewotCS5uYW1lICAgICAgICAgID0gInNtc2M5MTF4IiwKLQkuaWQgICAgICAgICAgICA9IC0xLAotCS5udW1fcmVzb3VyY2VzID0gQVJSQVlfU0laRShzbWRrNjQxMF9zbXNjOTExeF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZSAgICAgID0gJnNtZGs2NDEwX3Ntc2M5MTF4X3Jlc291cmNlc1swXSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzbWRrNjQxMF9zbXNjOTExeF9wZGF0YSwKLQl9LAotfTsKLQotI2lmZGVmIENPTkZJR19SRUdVTEFUT1IKLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzbWRrNjQxMF9iX3B3cl81dl9jb25zdW1lcnNbXSA9IHsKLQl7Ci0JCS8qIFdNODU4MCAqLwotCQkuc3VwcGx5ID0gIlBWREQiLAotCQkuZGV2X25hbWUgPSAiMC0wMDFiIiwKLQl9LAotCXsKLQkJLyogV004NTgwICovCi0JCS5zdXBwbHkgPSAiQVZERCIsCi0JCS5kZXZfbmFtZSA9ICIwLTAwMWIiLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc21kazY0MTBfYl9wd3JfNXZfZGF0YSA9IHsKLQkuY29uc3RyYWludHMgPSB7Ci0JCS5hbHdheXNfb24gPSAxLAotCX0sCi0JLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoc21kazY0MTBfYl9wd3JfNXZfY29uc3VtZXJzKSwKLQkuY29uc3VtZXJfc3VwcGxpZXMgPSBzbWRrNjQxMF9iX3B3cl81dl9jb25zdW1lcnMsCi19OwotCi1zdGF0aWMgc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnIHNtZGs2NDEwX2JfcHdyXzV2X3BkYXRhID0gewotCS5zdXBwbHlfbmFtZSA9ICJCX1BXUl81ViIsCi0JLm1pY3Jvdm9sdHMgPSA1MDAwMDAwLAotCS5pbml0X2RhdGEgPSAmc21kazY0MTBfYl9wd3JfNXZfZGF0YSwKLQkuZ3BpbyA9IC1FSU5WQUwsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWRrNjQxMF9iX3B3cl81diA9IHsKLQkubmFtZSAgICAgICAgICA9ICJyZWctZml4ZWQtdm9sdGFnZSIsCi0JLmlkICAgICAgICAgICAgPSAtMSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzbWRrNjQxMF9iX3B3cl81dl9wZGF0YSwKLQl9LAotfTsKLSNlbmRpZgotCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIHNtZGs2NDEwX2lvZGVzY1tdID0ge307Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzbWRrNjQxMF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKLSNpZmRlZiBDT05GSUdfU01ESzY0MTBfU0RfQ0gwCi0JJnMzY19kZXZpY2VfaHNtbWMwLAotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1NNREs2NDEwX1NEX0NIMQotCSZzM2NfZGV2aWNlX2hzbW1jMSwKLSNlbmRpZgotCSZzM2NfZGV2aWNlX2kyYzAsCi0JJnMzY19kZXZpY2VfaTJjMSwKLQkmczNjX2RldmljZV9mYiwKLQkmczNjX2RldmljZV91c2IsCi0JJnMzY19kZXZpY2VfdXNiX2hzb3RnLAotCi0jaWZkZWYgQ09ORklHX1JFR1VMQVRPUgotCSZzbWRrNjQxMF9iX3B3cl81diwKLSNlbmRpZgotCSZzbWRrNjQxMF9sY2RfcG93ZXJkZXYsCi0KLQkmc21kazY0MTBfc21zYzkxMXgsCi19OwotCi0jaWZkZWYgQ09ORklHX1NNREs2NDEwX1dNMTE5MF9FVjEKLS8qIFMzQzY0eHggaW50ZXJuYWwgbG9naWMgJiBQTEwgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB3bTgzNTBfZGNkYzFfZGF0YSA9IHsKLQkuY29uc3RyYWludHMgPSB7Ci0JCS5uYW1lID0gIlBWRERfSU5UL1BWRERfUExMIiwKLQkJLm1pbl91ViA9IDEyMDAwMDAsCi0JCS5tYXhfdVYgPSAxMjAwMDAwLAotCQkuYWx3YXlzX29uID0gMSwKLQkJLmFwcGx5X3VWID0gMSwKLQl9LAotfTsKLQotLyogTWVtb3J5ICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgd204MzUwX2RjZGMzX2RhdGEgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubmFtZSA9ICJQVkREX01FTSIsCi0JCS5taW5fdVYgPSAxODAwMDAwLAotCQkubWF4X3VWID0gMTgwMDAwMCwKLQkJLmFsd2F5c19vbiA9IDEsCi0JCS5zdGF0ZV9tZW0gPSB7Ci0JCQkgLnVWID0gMTgwMDAwMCwKLQkJCSAubW9kZSA9IFJFR1VMQVRPUl9NT0RFX05PUk1BTCwKLQkJCSAuZW5hYmxlZCA9IDEsCi0JCSB9LAotCQkuaW5pdGlhbF9zdGF0ZSA9IFBNX1NVU1BFTkRfTUVNLAotCX0sCi19OwotCi0vKiBVU0IsIEVYVCwgUENNLCBBREMvREFDLCBVU0IsIE1NQyAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfY29uc3VtZXJfc3VwcGx5IHdtODM1MF9kY2RjNF9jb25zdW1lcnNbXSA9IHsKLQl7Ci0JCS8qIFdNODU4MCAqLwotCQkuc3VwcGx5ID0gIkRWREQiLAotCQkuZGV2X25hbWUgPSAiMC0wMDFiIiwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHdtODM1MF9kY2RjNF9kYXRhID0gewotCS5jb25zdHJhaW50cyA9IHsKLQkJLm5hbWUgPSAiUFZERF9ISS9QVkREX0VYVC9QVkREX1NZUy9QVkNDTTJNVFYiLAotCQkubWluX3VWID0gMzAwMDAwMCwKLQkJLm1heF91ViA9IDMwMDAwMDAsCi0JCS5hbHdheXNfb24gPSAxLAotCX0sCi0JLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUod204MzUwX2RjZGM0X2NvbnN1bWVycyksCi0JLmNvbnN1bWVyX3N1cHBsaWVzID0gd204MzUwX2RjZGM0X2NvbnN1bWVycywKLX07Ci0KLS8qIEFSTSBjb3JlICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgZGNkYzZfY29uc3VtZXJzW10gPSB7Ci0JewotCQkuc3VwcGx5ID0gInZkZGFybSIsCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHdtODM1MF9kY2RjNl9kYXRhID0gewotCS5jb25zdHJhaW50cyA9IHsKLQkJLm5hbWUgPSAiUFZERF9BUk0iLAotCQkubWluX3VWID0gMTAwMDAwMCwKLQkJLm1heF91ViA9IDEzMDAwMDAsCi0JCS5hbHdheXNfb24gPSAxLAotCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UsCi0JfSwKLQkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRShkY2RjNl9jb25zdW1lcnMpLAotCS5jb25zdW1lcl9zdXBwbGllcyA9IGRjZGM2X2NvbnN1bWVycywKLX07Ci0KLS8qIEFsaXZlICovCi1zdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgd204MzUwX2xkbzFfZGF0YSA9IHsKLQkuY29uc3RyYWludHMgPSB7Ci0JCS5uYW1lID0gIlBWRERfQUxJVkUiLAotCQkubWluX3VWID0gMTIwMDAwMCwKLQkJLm1heF91ViA9IDEyMDAwMDAsCi0JCS5hbHdheXNfb24gPSAxLAotCQkuYXBwbHlfdVYgPSAxLAotCX0sCi19OwotCi0vKiBPVEcgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB3bTgzNTBfbGRvMl9kYXRhID0gewotCS5jb25zdHJhaW50cyA9IHsKLQkJLm5hbWUgPSAiUFZERF9PVEciLAotCQkubWluX3VWID0gMzMwMDAwMCwKLQkJLm1heF91ViA9IDMzMDAwMDAsCi0JCS5hbHdheXNfb24gPSAxLAotCX0sCi19OwotCi0vKiBMQ0QgKi8KLXN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB3bTgzNTBfbGRvM19kYXRhID0gewotCS5jb25zdHJhaW50cyA9IHsKLQkJLm5hbWUgPSAiUFZERF9MQ0QiLAotCQkubWluX3VWID0gMzAwMDAwMCwKLQkJLm1heF91ViA9IDMwMDAwMDAsCi0JCS5hbHdheXNfb24gPSAxLAotCX0sCi19OwotCi0vKiBPVEdpLzExOTAtRVYxIEhQVkREICYgQVZERCAqLwotc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHdtODM1MF9sZG80X2RhdGEgPSB7Ci0JLmNvbnN0cmFpbnRzID0gewotCQkubmFtZSA9ICJQVkREX09UR0kvSFBWREQvQVZERCIsCi0JCS5taW5fdVYgPSAxMjAwMDAwLAotCQkubWF4X3VWID0gMTIwMDAwMCwKLQkJLmFwcGx5X3VWID0gMSwKLQkJLmFsd2F5c19vbiA9IDEsCi0JfSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgewotCWludCByZWd1bGF0b3I7Ci0Jc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRkYXRhOwotfSB3bTExOTBfcmVndWxhdG9yc1tdID0gewotCXsgV004MzUwX0RDRENfMSwgJndtODM1MF9kY2RjMV9kYXRhIH0sCi0JeyBXTTgzNTBfRENEQ18zLCAmd204MzUwX2RjZGMzX2RhdGEgfSwKLQl7IFdNODM1MF9EQ0RDXzQsICZ3bTgzNTBfZGNkYzRfZGF0YSB9LAotCXsgV004MzUwX0RDRENfNiwgJndtODM1MF9kY2RjNl9kYXRhIH0sCi0JeyBXTTgzNTBfTERPXzEsICZ3bTgzNTBfbGRvMV9kYXRhIH0sCi0JeyBXTTgzNTBfTERPXzIsICZ3bTgzNTBfbGRvMl9kYXRhIH0sCi0JeyBXTTgzNTBfTERPXzMsICZ3bTgzNTBfbGRvM19kYXRhIH0sCi0JeyBXTTgzNTBfTERPXzQsICZ3bTgzNTBfbGRvNF9kYXRhIH0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzbWRrNjQxMF93bTgzNTBfaW5pdChzdHJ1Y3Qgd204MzUwICp3bTgzNTApCi17Ci0JaW50IGk7Ci0KLQkvKiBDb25maWd1cmUgdGhlIElSUSBsaW5lICovCi0JczNjX2dwaW9fc2V0cHVsbChTM0M2NFhYX0dQTigxMiksIFMzQ19HUElPX1BVTExfVVApOwotCi0JLyogSW5zdGFudGlhdGUgdGhlIHJlZ3VsYXRvcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTExOTBfcmVndWxhdG9ycyk7IGkrKykKLQkJd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsCi0JCQkJCSAgd20xMTkwX3JlZ3VsYXRvcnNbaV0ucmVndWxhdG9yLAotCQkJCQkgIHdtMTE5MF9yZWd1bGF0b3JzW2ldLmluaXRkYXRhKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHdtODM1MF9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgc21kazY0MTBfd204MzUwX3BkYXRhID0gewotCS5pbml0ID0gc21kazY0MTBfd204MzUwX2luaXQsCi0JLmlycV9oaWdoID0gMSwKLX07Ci0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpMmNfZGV2czBbXSBfX2luaXRkYXRhID0gewotCXsgSTJDX0JPQVJEX0lORk8oIjI0YzA4IiwgMHg1MCksIH0sCi0JeyBJMkNfQk9BUkRfSU5GTygid204NTgwIiwgMHgxYiksIH0sCi0KLSNpZmRlZiBDT05GSUdfU01ESzY0MTBfV00xMTkwX0VWMQotCXsgSTJDX0JPQVJEX0lORk8oIndtODM1MCIsIDB4MWEpLAotCSAgLnBsYXRmb3JtX2RhdGEgPSAmc21kazY0MTBfd204MzUwX3BkYXRhLAotCSAgLmlycSA9IFMzQ19FSU5UKDEyKSwKLQl9LAotI2VuZGlmCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGkyY19kZXZzMVtdIF9faW5pdGRhdGEgPSB7Ci0JeyBJMkNfQk9BUkRfSU5GTygiMjRjMTI4IiwgMHg1NyksIH0sCS8qIFNhbXN1bmcgUzUyNEFEMFhEMSAqLwotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IHNtZGs2NDEwX21hcF9pbyh2b2lkKQotewotCXUzMiB0bXA7Ci0KLQlzM2M2NHh4X2luaXRfaW8oc21kazY0MTBfaW9kZXNjLCBBUlJBWV9TSVpFKHNtZGs2NDEwX2lvZGVzYykpOwotCXMzYzI0eHhfaW5pdF9jbG9ja3MoMTIwMDAwMDApOwotCXMzYzI0eHhfaW5pdF91YXJ0cyhzbWRrNjQxMF91YXJ0Y2ZncywgQVJSQVlfU0laRShzbWRrNjQxMF91YXJ0Y2ZncykpOwotCi0JLyogc2V0IHRoZSBMQ0QgdHlwZSAqLwotCi0JdG1wID0gX19yYXdfcmVhZGwoUzNDNjRYWF9TUENPTik7Ci0JdG1wICY9IH5TM0M2NFhYX1NQQ09OX0xDRF9TRUxfTUFTSzsKLQl0bXAgfD0gUzNDNjRYWF9TUENPTl9MQ0RfU0VMX1JHQjsKLQlfX3Jhd193cml0ZWwodG1wLCBTM0M2NFhYX1NQQ09OKTsKLQotCS8qIHJlbW92ZSB0aGUgbGNkIGJ5cGFzcyAqLwotCXRtcCA9IF9fcmF3X3JlYWRsKFMzQzY0WFhfTU9ERU1fTUlGUENPTik7Ci0JdG1wICY9IH5NSUZQQ09OX0xDRF9CWVBBU1M7Ci0JX19yYXdfd3JpdGVsKHRtcCwgUzNDNjRYWF9NT0RFTV9NSUZQQ09OKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IHNtZGs2NDEwX21hY2hpbmVfaW5pdCh2b2lkKQotewotCXMzY19pMmMwX3NldF9wbGF0ZGF0YShOVUxMKTsKLQlzM2NfaTJjMV9zZXRfcGxhdGRhdGEoTlVMTCk7Ci0JczNjX2ZiX3NldF9wbGF0ZGF0YSgmc21kazY0MTBfbGNkX3BkYXRhKTsKLQotCWdwaW9fcmVxdWVzdChTM0M2NFhYX0dQTig1KSwgIkxDRCBwb3dlciIpOwotCWdwaW9fcmVxdWVzdChTM0M2NFhYX0dQRigxMyksICJMQ0QgcG93ZXIiKTsKLQlncGlvX3JlcXVlc3QoUzNDNjRYWF9HUEYoMTUpLCAiTENEIHBvd2VyIik7Ci0KLQlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBpMmNfZGV2czAsIEFSUkFZX1NJWkUoaTJjX2RldnMwKSk7Ci0JaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMSwgaTJjX2RldnMxLCBBUlJBWV9TSVpFKGkyY19kZXZzMSkpOwotCi0JcGxhdGZvcm1fYWRkX2RldmljZXMoc21kazY0MTBfZGV2aWNlcywgQVJSQVlfU0laRShzbWRrNjQxMF9kZXZpY2VzKSk7Ci19Ci0KLU1BQ0hJTkVfU1RBUlQoU01ESzY0MTAsICJTTURLNjQxMCIpCi0JLyogTWFpbnRhaW5lcjogQmVuIERvb2tzIDxiZW5AZmx1ZmYub3JnPiAqLwotCS5waHlzX2lvCT0gUzNDX1BBX1VBUlQgJiAweGZmZjAwMDAwLAotCS5pb19wZ19vZmZzdAk9ICgoKHUzMilTM0NfVkFfVUFSVCkgPj4gMTgpICYgMHhmZmZjLAotCS5ib290X3BhcmFtcwk9IFMzQzY0WFhfUEFfU0RSQU0gKyAweDEwMCwKLQotCS5pbml0X2lycQk9IHMzYzY0MTBfaW5pdF9pcnEsCi0JLm1hcF9pbwkJPSBzbWRrNjQxMF9tYXBfaW8sCi0JLmluaXRfbWFjaGluZQk9IHNtZGs2NDEwX21hY2hpbmVfaW5pdCwKLQkudGltZXIJCT0gJnMzYzI0eHhfdGltZXIsCi1NQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NDEwL3NldHVwLXNkaGNpLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0MTAvc2V0dXAtc2RoY2kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE2ZDJkOS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzY0MTAvc2V0dXAtc2RoY2kuYworKysgL2Rldi9udWxsCkBAIC0xLDY4ICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjNjQxMC9zZXR1cC1zZGhjaS5jCi0gKgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogUzNDNjQxMCAtIEhlbHBlciBmdW5jdGlvbnMgZm9yIHNldHRpZ24gdXAgU0RIQ0kgZGV2aWNlKHMpIChIU01NQykKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPGxpbnV4L21tYy9jYXJkLmg+Ci0jaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KLQotI2luY2x1ZGUgPHBsYXQvcmVncy1zZGhjaS5oPgotI2luY2x1ZGUgPHBsYXQvc2RoY2kuaD4KLQotLyogY2xvY2sgc291cmNlcyBmb3IgdGhlIG1tYyBidXMgY2xvY2ssIG9yZGVyIGFzIGZvciB0aGUgY3RybDJbNS4uNF0gKi8KLQotY2hhciAqczNjNjQxMF9oc21tY19jbGtzcmNzWzRdID0gewotCVswXSA9ICJoc21tYyIsCi0JWzFdID0gImhzbW1jIiwKLQlbMl0gPSAibW1jX2J1cyIsCi0JLyogWzNdID0gIjQ4bSIsIC0gbm90ZSBub3Qgc3VjY2Vzc2Z1bGx5IHVzZWQgeWV0ICovCi19OwotCi0KLXZvaWQgczNjNjQxMF9zZXR1cF9zZGhjaTBfY2ZnX2NhcmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAotCQkJCSAgICB2b2lkIF9faW9tZW0gKnIsCi0JCQkJICAgIHN0cnVjdCBtbWNfaW9zICppb3MsCi0JCQkJICAgIHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKLXsKLQl1MzIgY3RybDIsIGN0cmwzOwotCi0JLyogZG9uJ3QgbmVlZCB0byBhbHRlciBhbnl0aGluZyBhY29yZGluZyB0byBjYXJkLXR5cGUgKi8KLQotCXdyaXRlbChTM0M2NFhYX1NESENJX0NPTlRST0w0X0RSSVZFXzltQSwgciArIFMzQzY0WFhfU0RIQ0lfQ09OVFJPTDQpOwotCi0JY3RybDIgPSByZWFkbChyICsgUzNDX1NESENJX0NPTlRST0wyKTsKLQljdHJsMiAmPSBTM0NfU0RIQ0lfQ1RSTDJfU0VMQkFTRUNMS19NQVNLOwotCWN0cmwyIHw9IChTM0M2NFhYX1NESENJX0NUUkwyX0VOU1RBQVNZTkNDTFIgfAotCQkgIFMzQzY0WFhfU0RIQ0lfQ1RSTDJfRU5DTURDTkZNU0sgfAotCQkgIFMzQ19TREhDSV9DVFJMMl9FTkZCQ0xLUlggfAotCQkgIFMzQ19TREhDSV9DVFJMMl9ERkNOVF9OT05FIHwKLQkJICBTM0NfU0RIQ0lfQ1RSTDJfRU5DTEtPVVRIT0xEKTsKLQotCWlmIChpb3MtPmNsb2NrIDwgMjUgKiAxMDAwMDAwKQotCQljdHJsMyA9IChTM0NfU0RIQ0lfQ1RSTDNfRkNTRUwzIHwKLQkJCSBTM0NfU0RIQ0lfQ1RSTDNfRkNTRUwyIHwKLQkJCSBTM0NfU0RIQ0lfQ1RSTDNfRkNTRUwxIHwKLQkJCSBTM0NfU0RIQ0lfQ1RSTDNfRkNTRUwwKTsKLQllbHNlCi0JCWN0cmwzID0gKFMzQ19TREhDSV9DVFJMM19GQ1NFTDEgfCBTM0NfU0RIQ0lfQ1RSTDNfRkNTRUwwKTsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBDVFJMIDI9JTA4eCwgMz0lMDh4XG4iLCBfX2Z1bmNfXywgY3RybDIsIGN0cmwzKTsKLQl3cml0ZWwoY3RybDIsIHIgKyBTM0NfU0RIQ0lfQ09OVFJPTDIpOwotCXdyaXRlbChjdHJsMywgciArIFMzQ19TREhDSV9DT05UUk9MMyk7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU5ZGYzOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9LY29uZmlnCkBAIC0wLDAgKzEsMTgwIEBACisjIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisjCVNpbXRlYyBFbGVjdHJvbmljcywgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorIworIyBMaWNlbnNlZCB1bmRlciBHUEx2MgorCisjIHRlbXBvcmFyeSB1bnRpbCB3ZSBjYW4gZWxpbWluYXRlIGFsbCBkcml2ZXJzIHVzaW5nIGl0LgorY29uZmlnIFBMQVRfUzNDNjRYWAorCWJvb2wKKwlkZXBlbmRzIG9uIEFSQ0hfUzNDNjRYWAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIEJhc2UgcGxhdGZvcm0gY29kZSBmb3IgYW55IFNhbXN1bmcgUzNDNjRYWCBkZXZpY2UKKworCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFMzQzY0MTAgQ1BVCisKK2NvbmZpZyBDUFVfUzNDNjQwMAorCWJvb2wKKwloZWxwCisJICBFbmFibGUgUzNDNjQwMCBDUFUgc3VwcG9ydAorCitjb25maWcgQ1BVX1MzQzY0MTAKKwlib29sCisJaGVscAorCSAgRW5hYmxlIFMzQzY0MTAgQ1BVIHN1cHBvcnQKKworY29uZmlnIFMzQzY0WFhfRE1BCisJYm9vbCAiUzNDNjRYWCBETUEiCisJc2VsZWN0IFMzQ19ETUEKKworY29uZmlnIFMzQzY0WFhfU0VUVVBfU0RIQ0kKKwlzZWxlY3QgUzNDNjRYWF9TRVRVUF9TREhDSV9HUElPCisJYm9vbAorCWhlbHAKKwkgIEludGVybmFsIGNvbmZpZ3VyYXRpb24gZm9yIGRlZmF1bHQgU0RIQ0kgc2V0dXAgZm9yIFMzQzY0MDAgYW5kCisJICBTM0M2NDEwIFNvQ3MuCisKKyMgcGxhdGZvcm0gc3BlY2lmaWMgZGV2aWNlIHNldHVwCisKK2NvbmZpZyBTM0M2NFhYX1NFVFVQX0kyQzAKKwlib29sCisJZGVmYXVsdCB5CisJaGVscAorCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIGkyYyBidXMgMC4KKworCSAgTm90ZSwgY3VycmVudGx5IHNpbmNlIGkyYzAgaXMgYWx3YXlzIGNvbXBpbGVkLCB0aGlzIHNldHVwIGhlbHBlcgorCSAgaXMgYWx3YXlzIGNvbXBpbGVkIHdpdGggaXQuCisKK2NvbmZpZyBTM0M2NFhYX1NFVFVQX0kyQzEKKwlib29sCisJaGVscAorCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIGkyYyBidXMgMS4KKworY29uZmlnIFMzQzY0WFhfU0VUVVBfRkJfMjRCUFAKKwlib29sCisJaGVscAorCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIFMzQzY0WFggd2l0aCBhbiAyNGJwcCBSR0IgZGlzcGxheSBoZWxwZXIuCisKK2NvbmZpZyBTM0M2NFhYX1NFVFVQX1NESENJX0dQSU8KKwlib29sCisJaGVscAorCSAgQ29tbW9uIHNldHVwIGNvZGUgZm9yIFMzQzY0WFggU0RIQ0kgR1BJTyBjb25maWd1cmF0aW9ucworCisjIFMzNjQwMCBNYWNjaGluZSBzdXBwb3J0CisKK2NvbmZpZyBNQUNIX1NNREs2NDAwCisgICAgICAgYm9vbCAiU01ESzY0MDAiCisJc2VsZWN0IENQVV9TM0M2NDAwCisJc2VsZWN0IFMzQ19ERVZfSFNNTUMKKwlzZWxlY3QgUzNDX0RFVl9OQU5ECisJc2VsZWN0IFMzQzY0WFhfU0VUVVBfU0RIQ0kKKwloZWxwCisJICBNYWNoaW5lIHN1cHBvcnQgZm9yIHRoZSBTYW1zdW5nIFNNREs2NDAwCisKKyMgUzNDNjQxMCBtYWNoaW5lIHN1cHBvcnQKKworY29uZmlnIE1BQ0hfQU5XNjQxMAorCWJvb2wgIkEmVzY0MTAiCisJc2VsZWN0IENQVV9TM0M2NDEwCisJc2VsZWN0IFMzQ19ERVZfRkIKKwlzZWxlY3QgUzNDNjRYWF9TRVRVUF9GQl8yNEJQUAorCWhlbHAKKwkgIE1hY2hpbmUgc3VwcG9ydCBmb3IgdGhlIEEmVzY0MTAKKworY29uZmlnIE1BQ0hfU01ESzY0MTAKKwlib29sICJTTURLNjQxMCIKKwlzZWxlY3QgQ1BVX1MzQzY0MTAKKwlzZWxlY3QgUzNDX0RFVl9IU01NQworCXNlbGVjdCBTM0NfREVWX0hTTU1DMQorCXNlbGVjdCBTM0NfREVWX0kyQzEKKwlzZWxlY3QgUzNDX0RFVl9GQgorCXNlbGVjdCBTM0NfREVWX1VTQl9IT1NUCisJc2VsZWN0IFMzQ19ERVZfVVNCX0hTT1RHCisJc2VsZWN0IFMzQzY0WFhfU0VUVVBfU0RIQ0kKKwlzZWxlY3QgUzNDNjRYWF9TRVRVUF9JMkMxCisJc2VsZWN0IFMzQzY0WFhfU0VUVVBfRkJfMjRCUFAKKwloZWxwCisJICBNYWNoaW5lIHN1cHBvcnQgZm9yIHRoZSBTYW1zdW5nIFNNREs2NDEwCisKKyMgQXQgbGVhc3Qgc29tZSBvZiB0aGUgU01ESzY0MTBzIHdlcmUgc2hpcHBlZCB3aXRoIHRoZSBjYXJkIGRldGVjdAorIyBmb3IgdGhlIE1NQy9TRCBzbG90cyBjb25uZWN0ZWQgdG8gdGhlIHNhbWUgaW5wdXQuIFRoaXMgbWVhbnMgdGhhdAorIyBlaXRoZXIgdGhlIGJvYXJkcyBuZWVkIHRvIGJlIGFsdGVyZWQgdG8gaGF2ZSBjaGFubmVsMCB0byBhbiBhbHRlcm5hdGUKKyMgY29uZmlndXJhdGlvbiBvciB0aGF0IG9ubHkgb25lIHNsb3QgY2FuIGJlIHVzZWQuCisKK2Nob2ljZQorCXByb21wdCAiU01ESzY0MTAgTU1DL1NEIHNsb3Qgc2V0dXAiCisJZGVwZW5kcyBvbiBNQUNIX1NNREs2NDEwCisKK2NvbmZpZyBTTURLNjQxMF9TRF9DSDAKKwlib29sICJVc2UgY2hhbm5lbCAwIG9ubHkiCisJZGVwZW5kcyBvbiBNQUNIX1NNREs2NDEwCisJaGVscAorICAgICAgICAgIFNlbGVjdCBDT043IChjaGFubmVsIDApIGFzIHRoZSBNTUMvU0Qgc2xvdCwgYXMKKwkgIGF0IGxlYXN0IHNvbWUgU01ESzY0MTAgYm9hcmRzIGNvbWUgd2l0aCB0aGUKKwkgIHJlc2lzdG9ycyBmaXR0ZWQgc28gdGhhdCB0aGUgY2FyZCBkZXRlY3RzIGZvcgorCSAgY2hhbm5lbHMgMCBhbmQgMSBhcmUgdGhlIHNhbWUuCisKK2NvbmZpZyBTTURLNjQxMF9TRF9DSDEKKwlib29sICJVc2UgY2hhbm5lbCAxIG9ubHkiCisJZGVwZW5kcyBvbiBNQUNIX1NNREs2NDEwCisJaGVscAorICAgICAgICAgIFNlbGVjdCBDT042IChjaGFubmVsIDEpIGFzIHRoZSBNTUMvU0Qgc2xvdCwgYXMKKwkgIGF0IGxlYXN0IHNvbWUgU01ESzY0MTAgYm9hcmRzIGNvbWUgd2l0aCB0aGUKKwkgIHJlc2lzdG9ycyBmaXR0ZWQgc28gdGhhdCB0aGUgY2FyZCBkZXRlY3RzIGZvcgorCSAgY2hhbm5lbHMgMCBhbmQgMSBhcmUgdGhlIHNhbWUuCisKK2VuZGNob2ljZQorCitjb25maWcgU01ESzY0MTBfV00xMTkwX0VWMQorCWJvb2wgIlN1cHBvcnQgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIDExOTAtRVYxIFBNSUMgY2FyZCIKKwlkZXBlbmRzIG9uIE1BQ0hfU01ESzY0MTAKKwlzZWxlY3QgUkVHVUxBVE9SCisJc2VsZWN0IFJFR1VMQVRPUl9XTTgzNTAKKwlzZWxlY3QgUzNDMjRYWF9HUElPX0VYVFJBNjQKKwlzZWxlY3QgTUZEX1dNODM1MF9JMkMKKwlzZWxlY3QgTUZEX1dNODM1MF9DT05GSUdfTU9ERV8wCisJc2VsZWN0IE1GRF9XTTgzNTBfQ09ORklHX01PREVfMworCXNlbGVjdCBNRkRfV004MzUyX0NPTkZJR19NT0RFXzAKKwloZWxwCisJICBUaGUgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIDExOTAtRVYxIGlzIGEgV004MzV4IGJhc2VkIFBNSUMKKwkgIGFuZCBhdWRpbyBkYXVnaHRlcmNhcmQgZm9yIHRoZSBTYW1zdW5nIFNNREs2NDEwIHJlZmVyZW5jZQorCSAgcGxhdGZvcm0uICBFbmFibGluZyB0aGlzIG9wdGlvbiB3aWxsIGJ1aWxkIHN1cHBvcnQgZm9yIHRoaXMKKwkgIG1vZHVsZSBpbnRvIHRoZSBrZXJuZWwuICBUaGUgcHJlc2VuY2Ugb2YgdGhlIG1vZHVsZSB3aWxsIGJlCisJICBkZXRlY3RlZCBhdCBydW50aW1lIHNvIHRoZSB0aGUgcmVzdWx0aW5nIGtlcm5lbCBjYW4gYmUgdXNlZAorCSAgd2l0aCBvciB3aXRob3V0IHRoZSAxMTkwLUVWMSBmaXR0ZWQuCisKK2NvbmZpZyBTTURLNjQxMF9XTTExOTJfRVYxCisJYm9vbCAiU3VwcG9ydCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgMTE5Mi1FVjEgUE1JQyBjYXJkIgorCWRlcGVuZHMgb24gTUFDSF9TTURLNjQxMAorCXNlbGVjdCBSRUdVTEFUT1IKKwlzZWxlY3QgUkVHVUxBVE9SX1dNODMxWAorCXNlbGVjdCBTM0MyNFhYX0dQSU9fRVhUUkE2NAorCXNlbGVjdCBNRkRfV004MzFYCisJaGVscAorCSAgVGhlIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyAxMTkyLUVWMSBpcyBhIFdNODMxeCBiYXNlZCBQTUlDCisJICBkYXVnaHRlcmNhcmQgZm9yIHRoZSBTYW1zdW5nIFNNREs2NDEwIHJlZmVyZW5jZSBwbGF0Zm9ybS4KKwkgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHdpbGwgYnVpbGQgc3VwcG9ydCBmb3IgdGhpcyBtb2R1bGUgaW50bworCSAgdGhlIGtlcm5lbC4gIFRoZSBwcmVzZW5jZSBvZiB0aGUgZGF1Z2h0ZXJjYXJkIHdpbGwgYmUKKwkgIGRldGVjdGVkIGF0IHJ1bnRpbWUgc28gdGhlIHRoZSByZXN1bHRpbmcga2VybmVsIGNhbiBiZSB1c2VkCisJICB3aXRoIG9yIHdpdGhvdXQgdGhlIDExOTItRVYxIGZpdHRlZC4KKworY29uZmlnIE1BQ0hfTkNQCisJYm9vbCAiTkNQIgorCXNlbGVjdCBDUFVfUzNDNjQxMAorCXNlbGVjdCBTM0NfREVWX0kyQzEKKwlzZWxlY3QgUzNDX0RFVl9IU01NQzEKKwlzZWxlY3QgUzNDNjRYWF9TRVRVUF9JMkMxCisJaGVscAorICAgICAgICAgIE1hY2hpbmUgc3VwcG9ydCBmb3IgdGhlIFNhbXN1bmcgTkNQCisKK2NvbmZpZyBNQUNIX0hNVAorCWJvb2wgIkFpcmdvbyBITVQiCisJc2VsZWN0IENQVV9TM0M2NDEwCisJc2VsZWN0IFMzQ19ERVZfRkIKKwlzZWxlY3QgUzNDX0RFVl9OQU5ECisJc2VsZWN0IFMzQ19ERVZfVVNCX0hPU1QKKwlzZWxlY3QgUzNDNjRYWF9TRVRVUF9GQl8yNEJQUAorCXNlbGVjdCBIQVZFX1BXTQorCWhlbHAKKwkgIE1hY2hpbmUgc3VwcG9ydCBmb3IgdGhlIEFpcmdvbyBITVQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzU4ZTE1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L01ha2VmaWxlCkBAIC0wLDAgKzEsNjIgQEAKKyMgYXJjaC9hcm0vbWFjaC1zM2M2NHh4L01ha2VmaWxlCisjCisjIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisjIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworIworIyBMaWNlbnNlZCB1bmRlciBHUEx2MgorCitvYmoteQkJCQk6PQorb2JqLW0JCQkJOj0KK29iai1uCQkJCTo9CitvYmotCQkJCTo9CisKKyMgQ29yZSBmaWxlcworb2JqLXkJCQkJKz0gY3B1Lm8KK29iai15CQkJCSs9IGNsb2NrLm8KK29iai15CQkJCSs9IGdwaW9saWIubworCisjIENvcmUgc3VwcG9ydCBmb3IgUzNDNjQwMCBzeXN0ZW0KKworb2JqLSQoQ09ORklHX0NQVV9TM0M2NDAwKQkrPSBzM2M2NDAwLm8KK29iai0kKENPTkZJR19DUFVfUzNDNjQxMCkJKz0gczNjNjQxMC5vCisKK29iai15CQkJCSs9IGlycS5vCitvYmoteQkJCQkrPSBpcnEtZWludC5vCisKKyMgQ1BVIGZyZXF1ZW5jeSBzY2FsaW5nCisKK29iai0kKENPTkZJR19DUFVfRlJFUV9TM0M2NFhYKSAgKz0gY3B1ZnJlcS5vCisKKyMgRE1BIHN1cHBvcnQKKworb2JqLSQoQ09ORklHX1MzQzY0WFhfRE1BKQkrPSBkbWEubworCisjIERldmljZSBzZXR1cAorCitvYmotJChDT05GSUdfUzNDNjRYWF9TRVRVUF9JMkMwKSArPSBzZXR1cC1pMmMwLm8KK29iai0kKENPTkZJR19TM0M2NFhYX1NFVFVQX0kyQzEpICs9IHNldHVwLWkyYzEubworb2JqLSQoQ09ORklHX1MzQzY0WFhfU0VUVVBfU0RIQ0kpICs9IHNldHVwLXNkaGNpLm8KK29iai0kKENPTkZJR19TM0M2NFhYX1NFVFVQX0ZCXzI0QlBQKSArPSBzZXR1cC1mYi0yNGJwcC5vCitvYmotJChDT05GSUdfUzNDNjRYWF9TRVRVUF9TREhDSV9HUElPKSArPSBzZXR1cC1zZGhjaS1ncGlvLm8KKworIyBQTQorCitvYmotJChDT05GSUdfUE0pCQkrPSBwbS5vCitvYmotJChDT05GSUdfUE0pCQkrPSBzbGVlcC5vCitvYmotJChDT05GSUdfUE0pCQkrPSBpcnEtcG0ubworCisjIE1hY2hpbmUgc3VwcG9ydAorCitvYmotJChDT05GSUdfTUFDSF9BTlc2NDEwKQkrPSBtYWNoLWFudzY0MTAubworb2JqLSQoQ09ORklHX01BQ0hfU01ESzY0MDApCSs9IG1hY2gtc21kazY0MDAubworb2JqLSQoQ09ORklHX01BQ0hfU01ESzY0MTApCSs9IG1hY2gtc21kazY0MTAubworb2JqLSQoQ09ORklHX01BQ0hfTkNQKQkJKz0gbWFjaC1uY3Aubworb2JqLSQoQ09ORklHX01BQ0hfSE1UKQkJKz0gbWFjaC1obXQubworCisjIGRldmljZSBzdXBwb3J0CisKK29iai15CQkJCSs9IGRldi11YXJ0Lm8KK29iai15CQkJCSs9IGRldi1ydGMubworb2JqLXkJCQkJKz0gZGV2LWF1ZGlvLm8KK29iai0kKENPTkZJR19TM0NfQURDKQkJKz0gZGV2LWFkYy5vCitvYmotJChDT05GSUdfUzNDNjRYWF9ERVZfU1BJKQkrPSBkZXYtc3BpLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L01ha2VmaWxlLmJvb3QKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjNjQwMC9NYWtlZmlsZS5ib290CnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzY0eHgvTWFrZWZpbGUuYm9vdApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYWMyZTdkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Nsb2NrLmMKQEAgLTAsMCArMSw4MDkgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9jbG9jay5jCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0M2NFhYIEJhc2UgY2xvY2sgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvcmVncy1zeXMuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL3BsbC5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2stY2xrc3JjLmg+CisKKy8qIGZpbl9hcGxsLCBmaW5fbXBsbCBhbmQgZmluX2VwbGwgYXJlIGFsbCB0aGUgc2FtZSBjbG9jaywgd2hpY2ggd2UgY2FsbAorICogZXh0X3h0YWxfbXV4IGZvciB3YW50IG9mIGFuIGFjdHVhbCBuYW1lIGZyb20gdGhlIG1hbnVhbC4KKyovCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19leHRfeHRhbF9tdXggPSB7CisJLm5hbWUJCT0gImV4dF94dGFsIiwKKwkuaWQJCT0gLTEsCit9OworCisjZGVmaW5lIGNsa19maW5fYXBsbCBjbGtfZXh0X3h0YWxfbXV4CisjZGVmaW5lIGNsa19maW5fbXBsbCBjbGtfZXh0X3h0YWxfbXV4CisjZGVmaW5lIGNsa19maW5fZXBsbCBjbGtfZXh0X3h0YWxfbXV4CisKKyNkZWZpbmUgY2xrX2ZvdXRfbXBsbAljbGtfbXBsbAorI2RlZmluZSBjbGtfZm91dF9lcGxsCWNsa19lcGxsCisKK3N0cnVjdCBjbGsgY2xrX2gyID0geworCS5uYW1lCQk9ICJoY2xrMiIsCisJLmlkCQk9IC0xLAorCS5yYXRlCQk9IDAsCit9OworCitzdHJ1Y3QgY2xrIGNsa18yN20gPSB7CisJLm5hbWUJCT0gImNsa18yN20iLAorCS5pZAkJPSAtMSwKKwkucmF0ZQkJPSAyNzAwMDAwMCwKK307CisKK3N0YXRpYyBpbnQgY2xrXzQ4bV9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWw7CisKKwkvKiBjYW4ndCByZWx5IG9uIGNsb2NrIGxvY2ssIHRoaXMgcmVnaXN0ZXIgaGFzIG90aGVyIHVzYWdlcyAqLworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCXZhbCA9IF9fcmF3X3JlYWRsKFMzQzY0WFhfT1RIRVJTKTsKKwlpZiAoZW5hYmxlKQorCQl2YWwgfD0gUzNDNjRYWF9PVEhFUlNfVVNCTUFTSzsKKwllbHNlCisJCXZhbCAmPSB+UzNDNjRYWF9PVEhFUlNfVVNCTUFTSzsKKworCV9fcmF3X3dyaXRlbCh2YWwsIFMzQzY0WFhfT1RIRVJTKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGNsayBjbGtfNDhtID0geworCS5uYW1lCQk9ICJjbGtfNDhtIiwKKwkuaWQJCT0gLTEsCisJLnJhdGUJCT0gNDgwMDAwMDAsCisJLmVuYWJsZQkJPSBjbGtfNDhtX2N0cmwsCit9OworCitzdGF0aWMgaW50IGlubGluZSBzM2M2NHh4X2dhdGUodm9pZCBfX2lvbWVtICpyZWcsCisJCQkJc3RydWN0IGNsayAqY2xrLAorCQkJCWludCBlbmFibGUpCit7CisJdW5zaWduZWQgaW50IGN0cmxiaXQgPSBjbGstPmN0cmxiaXQ7CisJdTMyIGNvbjsKKworCWNvbiA9IF9fcmF3X3JlYWRsKHJlZyk7CisKKwlpZiAoZW5hYmxlKQorCQljb24gfD0gY3RybGJpdDsKKwllbHNlCisJCWNvbiAmPSB+Y3RybGJpdDsKKworCV9fcmF3X3dyaXRlbChjb24sIHJlZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjNjR4eF9wY2xrX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXJldHVybiBzM2M2NHh4X2dhdGUoUzNDX1BDTEtfR0FURSwgY2xrLCBlbmFibGUpOworfQorCitzdGF0aWMgaW50IHMzYzY0eHhfaGNsa19jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gczNjNjR4eF9nYXRlKFMzQ19IQ0xLX0dBVEUsIGNsaywgZW5hYmxlKTsKK30KKworaW50IHMzYzY0eHhfc2Nsa19jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gczNjNjR4eF9nYXRlKFMzQ19TQ0xLX0dBVEUsIGNsaywgZW5hYmxlKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgaW5pdF9jbG9ja3NfZGlzYWJsZVtdID0geworCXsKKwkJLm5hbWUJCT0gIm5hbmQiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCX0sIHsKKwkJLm5hbWUJCT0gImFkYyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX1RTQURDLAorCX0sIHsKKwkJLm5hbWUJCT0gImkyYyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX0lJQywKKwl9LCB7CisJCS5uYW1lCQk9ICJpaXMiLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX0lJUzAsCisJfSwgeworCQkubmFtZQkJPSAiaWlzIiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzY0eHhfcGNsa19jdHJsLAorCQkuY3RybGJpdAk9IFMzQ19DTEtDT05fUENMS19JSVMxLAorCX0sIHsKKyNpZmRlZiBDT05GSUdfQ1BVX1MzQzY0MTAKKwkJLm5hbWUJCT0gImlpcyIsCisJCS5pZAkJPSAtMSwgIC8qIFRoZXJlJ3Mgb25seSBvbmUgSUlTdjQgcG9ydCAqLworCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTM0M2NDEwX0NMS0NPTl9QQ0xLX0lJUzIsCisJfSwgeworI2VuZGlmCisJCS5uYW1lCQk9ICJzcGkiLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX1NQSTAsCisJfSwgeworCQkubmFtZQkJPSAic3BpIiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzY0eHhfcGNsa19jdHJsLAorCQkuY3RybGJpdAk9IFMzQ19DTEtDT05fUENMS19TUEkxLAorCX0sIHsKKwkJLm5hbWUJCT0gInNwaV80OG0iLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrXzQ4bSwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X3NjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1NDTEtfU1BJMF80OCwKKwl9LCB7CisJCS5uYW1lCQk9ICJzcGlfNDhtIiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa180OG0sCisJCS5lbmFibGUJCT0gczNjNjR4eF9zY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9TQ0xLX1NQSTFfNDgsCisJfSwgeworCQkubmFtZQkJPSAiNDhtIiwKKwkJLmlkCQk9IDAsCisJCS5wYXJlbnQJCT0gJmNsa180OG0sCisJCS5lbmFibGUJCT0gczNjNjR4eF9zY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9TQ0xLX01NQzBfNDgsCisJfSwgeworCQkubmFtZQkJPSAiNDhtIiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa180OG0sCisJCS5lbmFibGUJCT0gczNjNjR4eF9zY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9TQ0xLX01NQzFfNDgsCisJfSwgeworCQkubmFtZQkJPSAiNDhtIiwKKwkJLmlkCQk9IDIsCisJCS5wYXJlbnQJCT0gJmNsa180OG0sCisJCS5lbmFibGUJCT0gczNjNjR4eF9zY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9TQ0xLX01NQzJfNDgsCisJfSwgeworCQkubmFtZQkJPSAiZG1hMCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczNjNjR4eF9oY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9IQ0xLX0RNQTAsCisJfSwgeworCQkubmFtZQkJPSAiZG1hMSIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczNjNjR4eF9oY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9IQ0xLX0RNQTEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGluaXRfY2xvY2tzW10gPSB7CisJeworCQkubmFtZQkJPSAibGNkIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X2hjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX0hDTEtfTENELAorCX0sIHsKKwkJLm5hbWUJCT0gImdwaW8iLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHMzYzY0eHhfcGNsa19jdHJsLAorCQkuY3RybGJpdAk9IFMzQ19DTEtDT05fUENMS19HUElPLAorCX0sIHsKKwkJLm5hbWUJCT0gInVzYi1ob3N0IiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X2hjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX0hDTEtfVUhPU1QsCisJfSwgeworCQkubmFtZQkJPSAiaHNtbWMiLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczNjNjR4eF9oY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9IQ0xLX0hTTU1DMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJoc21tYyIsCisJCS5pZAkJPSAxLAorCQkucGFyZW50CQk9ICZjbGtfaCwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X2hjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX0hDTEtfSFNNTUMxLAorCX0sIHsKKwkJLm5hbWUJCT0gImhzbW1jIiwKKwkJLmlkCQk9IDIsCisJCS5wYXJlbnQJCT0gJmNsa19oLAorCQkuZW5hYmxlCQk9IHMzYzY0eHhfaGNsa19jdHJsLAorCQkuY3RybGJpdAk9IFMzQ19DTEtDT05fSENMS19IU01NQzIsCisJfSwgeworCQkubmFtZQkJPSAidGltZXJzIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfUFdNLAorCX0sIHsKKwkJLm5hbWUJCT0gInVhcnQiLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX1VBUlQwLAorCX0sIHsKKwkJLm5hbWUJCT0gInVhcnQiLAorCQkuaWQJCT0gMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX1VBUlQxLAorCX0sIHsKKwkJLm5hbWUJCT0gInVhcnQiLAorCQkuaWQJCT0gMiwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX1VBUlQyLAorCX0sIHsKKwkJLm5hbWUJCT0gInVhcnQiLAorCQkuaWQJCT0gMywKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX1VBUlQzLAorCX0sIHsKKwkJLm5hbWUJCT0gInJ0YyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX1JUQywKKwl9LCB7CisJCS5uYW1lCQk9ICJ3YXRjaGRvZyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3AsCisJCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX1dEVCwKKwl9LCB7CisJCS5uYW1lCQk9ICJhYzk3IiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcCwKKwkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfQUM5NywKKwl9Cit9OworCisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19mb3V0X2FwbGwgPSB7CisJLm5hbWUJCT0gImZvdXRfYXBsbCIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa19zcmNfYXBsbF9saXN0W10gPSB7CisJWzBdID0gJmNsa19maW5fYXBsbCwKKwlbMV0gPSAmY2xrX2ZvdXRfYXBsbCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMgY2xrX3NyY19hcGxsID0geworCS5zb3VyY2VzCT0gY2xrX3NyY19hcGxsX2xpc3QsCisJLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa19zcmNfYXBsbF9saXN0KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfbW91dF9hcGxsID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJtb3V0X2FwbGwiLAorCQkuaWQJCT0gLTEsCisJfSwKKwkucmVnX3NyYwk9IHsgLnJlZyA9IFMzQ19DTEtfU1JDLCAuc2hpZnQgPSAwLCAuc2l6ZSA9IDEgIH0sCisJLnNvdXJjZXMJPSAmY2xrX3NyY19hcGxsLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa19zcmNfZXBsbF9saXN0W10gPSB7CisJWzBdID0gJmNsa19maW5fZXBsbCwKKwlbMV0gPSAmY2xrX2ZvdXRfZXBsbCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMgY2xrX3NyY19lcGxsID0geworCS5zb3VyY2VzCT0gY2xrX3NyY19lcGxsX2xpc3QsCisJLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa19zcmNfZXBsbF9saXN0KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfbW91dF9lcGxsID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJtb3V0X2VwbGwiLAorCQkuaWQJCT0gLTEsCisJfSwKKwkucmVnX3NyYwk9IHsgLnJlZyA9IFMzQ19DTEtfU1JDLCAuc2hpZnQgPSAyLCAuc2l6ZSA9IDEgIH0sCisJLnNvdXJjZXMJPSAmY2xrX3NyY19lcGxsLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa19zcmNfbXBsbF9saXN0W10gPSB7CisJWzBdID0gJmNsa19maW5fbXBsbCwKKwlbMV0gPSAmY2xrX2ZvdXRfbXBsbCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMgY2xrX3NyY19tcGxsID0geworCS5zb3VyY2VzCT0gY2xrX3NyY19tcGxsX2xpc3QsCisJLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa19zcmNfbXBsbF9saXN0KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfbW91dF9tcGxsID0geworCS5jbGsgPSB7CisJCS5uYW1lCQk9ICJtb3V0X21wbGwiLAorCQkuaWQJCT0gLTEsCisJfSwKKwkucmVnX3NyYwk9IHsgLnJlZyA9IFMzQ19DTEtfU1JDLCAuc2hpZnQgPSAxLCAuc2l6ZSA9IDEgIH0sCisJLnNvdXJjZXMJPSAmY2xrX3NyY19tcGxsLAorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBhcm1jbGtfbWFzazsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjNjR4eF9jbGtfYXJtX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCXUzMiBjbGtkaXY7CisKKwkvKiBkaXZpc29yIG1hc2sgc3RhcnRzIGF0IGJpdDAsIHNvIG5vIG5lZWQgdG8gc2hpZnQgKi8KKwljbGtkaXYgPSBfX3Jhd19yZWFkbChTM0NfQ0xLX0RJVjApICYgYXJtY2xrX21hc2s7CisKKwlyZXR1cm4gcmF0ZSAvIChjbGtkaXYgKyAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjNjR4eF9jbGtfYXJtX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLAorCQkJCQkJdW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGxvbmcgcGFyZW50ID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwl1MzIgZGl2OworCisJaWYgKHBhcmVudCA8IHJhdGUpCisJCXJldHVybiBwYXJlbnQ7CisKKwlkaXYgPSAocGFyZW50IC8gcmF0ZSkgLSAxOworCWlmIChkaXYgPiBhcm1jbGtfbWFzaykKKwkJZGl2ID0gYXJtY2xrX21hc2s7CisKKwlyZXR1cm4gcGFyZW50IC8gKGRpdiArIDEpOworfQorCitzdGF0aWMgaW50IHMzYzY0eHhfY2xrX2FybV9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBhcmVudCA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJdTMyIGRpdjsKKwl1MzIgdmFsOworCisJaWYgKHJhdGUgPCBwYXJlbnQgLyAoYXJtY2xrX21hc2sgKyAxKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyYXRlID0gY2xrX3JvdW5kX3JhdGUoY2xrLCByYXRlKTsKKwlkaXYgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gcmF0ZTsKKworCXZhbCA9IF9fcmF3X3JlYWRsKFMzQ19DTEtfRElWMCk7CisJdmFsICY9IH5hcm1jbGtfbWFzazsKKwl2YWwgfD0gKGRpdiAtIDEpOworCV9fcmF3X3dyaXRlbCh2YWwsIFMzQ19DTEtfRElWMCk7CisKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgc3RydWN0IGNsayBjbGtfYXJtID0geworCS5uYW1lCQk9ICJhcm1jbGsiLAorCS5pZAkJPSAtMSwKKwkucGFyZW50CQk9ICZjbGtfbW91dF9hcGxsLmNsaywKKwkub3BzCQk9ICYoc3RydWN0IGNsa19vcHMpIHsKKwkJLmdldF9yYXRlCT0gczNjNjR4eF9jbGtfYXJtX2dldF9yYXRlLAorCQkuc2V0X3JhdGUJPSBzM2M2NHh4X2Nsa19hcm1fc2V0X3JhdGUsCisJCS5yb3VuZF9yYXRlCT0gczNjNjR4eF9jbGtfYXJtX3JvdW5kX3JhdGUsCisJfSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzY0eHhfY2xrX2RvdXRtcGxsX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBwYXJlbnQgaXMgJWxkXG4iLCBfX2Z1bmNfXywgcmF0ZSk7CisKKwlpZiAoX19yYXdfcmVhZGwoUzNDX0NMS19ESVYwKSAmIFMzQzY0MDBfQ0xLRElWMF9NUExMX01BU0spCisJCXJhdGUgLz0gMjsKKworCXJldHVybiByYXRlOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgY2xrX2RvdXRfb3BzID0geworCS5nZXRfcmF0ZQk9IHMzYzY0eHhfY2xrX2RvdXRtcGxsX2dldF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2RvdXRfbXBsbCA9IHsKKwkubmFtZQkJPSAiZG91dF9tcGxsIiwKKwkuaWQJCT0gLTEsCisJLnBhcmVudAkJPSAmY2xrX21vdXRfbXBsbC5jbGssCisJLm9wcwkJPSAmY2xrX2RvdXRfb3BzLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NldF9zcGlfbW1jX2xpc3RbXSA9IHsKKwkmY2xrX21vdXRfZXBsbC5jbGssCisJJmNsa19kb3V0X21wbGwsCisJJmNsa19maW5fZXBsbCwKKwkmY2xrXzI3bSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMgY2xrc2V0X3NwaV9tbWMgPSB7CisJLnNvdXJjZXMJPSBjbGtzZXRfc3BpX21tY19saXN0LAorCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtzZXRfc3BpX21tY19saXN0KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzZXRfaXJkYV9saXN0W10gPSB7CisJJmNsa19tb3V0X2VwbGwuY2xrLAorCSZjbGtfZG91dF9tcGxsLAorCU5VTEwsCisJJmNsa18yN20sCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19zb3VyY2VzIGNsa3NldF9pcmRhID0geworCS5zb3VyY2VzCT0gY2xrc2V0X2lyZGFfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrc2V0X2lyZGFfbGlzdCksCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrc2V0X3VhcnRfbGlzdFtdID0geworCSZjbGtfbW91dF9lcGxsLmNsaywKKwkmY2xrX2RvdXRfbXBsbCwKKwlOVUxMLAorCU5VTEwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMgY2xrc2V0X3VhcnQgPSB7CisJLnNvdXJjZXMJPSBjbGtzZXRfdWFydF9saXN0LAorCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtzZXRfdWFydF9saXN0KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzZXRfdWhvc3RfbGlzdFtdID0geworCSZjbGtfNDhtLAorCSZjbGtfbW91dF9lcGxsLmNsaywKKwkmY2xrX2RvdXRfbXBsbCwKKwkmY2xrX2Zpbl9lcGxsLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfc291cmNlcyBjbGtzZXRfdWhvc3QgPSB7CisJLnNvdXJjZXMJPSBjbGtzZXRfdWhvc3RfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrc2V0X3Vob3N0X2xpc3QpLAorfTsKKworLyogVGhlIHBlcmlwaGVyYWwgY2xvY2tzIGFyZSBhbGwgY29udHJvbGxlZCB2aWEgY2xvY2tzb3VyY2UgZm9sbG93ZWQKKyAqIGJ5IGFuIG9wdGlvbmFsIGRpdmlkZXIgYW5kIGdhdGUgc3RhZ2UuIFdlIGN1cnJlbnRseSByb2xsIHRoaXMgaW50bworICogb25lIGNsb2NrIHdoaWNoIGhpZGVzIHRoZSBpbnRlcm1lZGlhdGUgY2xvY2sgZnJvbSB0aGUgbXV4LgorICoKKyAqIE5vdGUsIHRoZSBKUEVHIGNsb2NrIGNhbiBvbmx5IGJlIGFuIGV2ZW4gZGl2aWRlci4uLgorICoKKyAqIFRoZSBzY2FsZXIgYW5kIExDRCBjbG9ja3MgZGVwZW5kIG9uIHRoZSBTM0M2NFhYIHZlcnNpb24sIGFuZCBhbHNvCisgKiBoYXZlIGEgY29tbW9uIHBhcmVudCBkaXZpc29yIHNvIGFyZSBub3QgaW5jbHVkZWQgaGVyZS4KKyAqLworCisvKiBjbG9ja3MgdGhhdCBmZWVkIG90aGVyIHBhcnRzIG9mIHRoZSBjbG9jayBzb3VyY2UgdHJlZSAqLworCitzdGF0aWMgc3RydWN0IGNsayBjbGtfaWlzX2NkMCA9IHsKKwkubmFtZQkJPSAiaWlzX2NkY2xrMCIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2lpc19jZDEgPSB7CisJLm5hbWUJCT0gImlpc19jZGNsazEiLAorCS5pZAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wY21fY2QgPSB7CisJLm5hbWUJCT0gInBjbV9jZGNsayIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NldF9hdWRpbzBfbGlzdFtdID0geworCVswXSA9ICZjbGtfbW91dF9lcGxsLmNsaywKKwlbMV0gPSAmY2xrX2RvdXRfbXBsbCwKKwlbMl0gPSAmY2xrX2Zpbl9lcGxsLAorCVszXSA9ICZjbGtfaWlzX2NkMCwKKwlbNF0gPSAmY2xrX3BjbV9jZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMgY2xrc2V0X2F1ZGlvMCA9IHsKKwkuc291cmNlcwk9IGNsa3NldF9hdWRpbzBfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrc2V0X2F1ZGlvMF9saXN0KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzZXRfYXVkaW8xX2xpc3RbXSA9IHsKKwlbMF0gPSAmY2xrX21vdXRfZXBsbC5jbGssCisJWzFdID0gJmNsa19kb3V0X21wbGwsCisJWzJdID0gJmNsa19maW5fZXBsbCwKKwlbM10gPSAmY2xrX2lpc19jZDEsCisJWzRdID0gJmNsa19wY21fY2QsCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19zb3VyY2VzIGNsa3NldF9hdWRpbzEgPSB7CisJLnNvdXJjZXMJPSBjbGtzZXRfYXVkaW8xX2xpc3QsCisJLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa3NldF9hdWRpbzFfbGlzdCksCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrc2V0X2NhbWlmX2xpc3RbXSA9IHsKKwkmY2xrX2gyLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfc291cmNlcyBjbGtzZXRfY2FtaWYgPSB7CisJLnNvdXJjZXMJPSBjbGtzZXRfY2FtaWZfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrc2V0X2NhbWlmX2xpc3QpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa3NyY3NbXSA9IHsKKwl7CisJCS5jbGsJPSB7CisJCQkubmFtZQkJPSAibW1jX2J1cyIsCisJCQkuaWQJCT0gMCwKKwkJCS5jdHJsYml0ICAgICAgICA9IFMzQ19DTEtDT05fU0NMS19NTUMwLAorCQkJLmVuYWJsZQkJPSBzM2M2NHh4X3NjbGtfY3RybCwKKwkJfSwKKwkJLnJlZ19zcmMJPSB7IC5yZWcgPSBTM0NfQ0xLX1NSQywgLnNoaWZ0ID0gMTgsIC5zaXplID0gMiAgfSwKKwkJLnJlZ19kaXYJPSB7IC5yZWcgPSBTM0NfQ0xLX0RJVjEsIC5zaGlmdCA9IDAsIC5zaXplID0gNCAgfSwKKwkJLnNvdXJjZXMJPSAmY2xrc2V0X3NwaV9tbWMsCisJfSwgeworCQkuY2xrCT0geworCQkJLm5hbWUJCT0gIm1tY19idXMiLAorCQkJLmlkCQk9IDEsCisJCQkuY3RybGJpdCAgICAgICAgPSBTM0NfQ0xLQ09OX1NDTEtfTU1DMSwKKwkJCS5lbmFibGUJCT0gczNjNjR4eF9zY2xrX2N0cmwsCisJCX0sCisJCS5yZWdfc3JjCT0geyAucmVnID0gUzNDX0NMS19TUkMsIC5zaGlmdCA9IDIwLCAuc2l6ZSA9IDIgIH0sCisJCS5yZWdfZGl2CT0geyAucmVnID0gUzNDX0NMS19ESVYxLCAuc2hpZnQgPSA0LCAuc2l6ZSA9IDQgIH0sCisJCS5zb3VyY2VzCT0gJmNsa3NldF9zcGlfbW1jLAorCX0sIHsKKwkJLmNsawk9IHsKKwkJCS5uYW1lCQk9ICJtbWNfYnVzIiwKKwkJCS5pZAkJPSAyLAorCQkJLmN0cmxiaXQgICAgICAgID0gUzNDX0NMS0NPTl9TQ0xLX01NQzIsCisJCQkuZW5hYmxlCQk9IHMzYzY0eHhfc2Nsa19jdHJsLAorCQl9LAorCQkucmVnX3NyYwk9IHsgLnJlZyA9IFMzQ19DTEtfU1JDLCAuc2hpZnQgPSAyMiwgLnNpemUgPSAyICB9LAorCQkucmVnX2RpdiAJPSB7IC5yZWcgPSBTM0NfQ0xLX0RJVjEsIC5zaGlmdCA9IDgsIC5zaXplID0gNCAgfSwKKwkJLnNvdXJjZXMJPSAmY2xrc2V0X3NwaV9tbWMsCisJfSwgeworCQkuY2xrCT0geworCQkJLm5hbWUJCT0gInVzYi1idXMtaG9zdCIsCisJCQkuaWQJCT0gLTEsCisJCQkuY3RybGJpdCAgICAgICAgPSBTM0NfQ0xLQ09OX1NDTEtfVUhPU1QsCisJCQkuZW5hYmxlCQk9IHMzYzY0eHhfc2Nsa19jdHJsLAorCQl9LAorCQkucmVnX3NyYyAJPSB7IC5yZWcgPSBTM0NfQ0xLX1NSQywgLnNoaWZ0ID0gNSwgLnNpemUgPSAyICB9LAorCQkucmVnX2Rpdgk9IHsgLnJlZyA9IFMzQ19DTEtfRElWMSwgLnNoaWZ0ID0gMjAsIC5zaXplID0gNCAgfSwKKwkJLnNvdXJjZXMJPSAmY2xrc2V0X3Vob3N0LAorCX0sIHsKKwkJLmNsawk9IHsKKwkJCS5uYW1lCQk9ICJ1Y2xrMSIsCisJCQkuaWQJCT0gLTEsCisJCQkuY3RybGJpdCAgICAgICAgPSBTM0NfQ0xLQ09OX1NDTEtfVUFSVCwKKwkJCS5lbmFibGUJCT0gczNjNjR4eF9zY2xrX2N0cmwsCisJCX0sCisJCS5yZWdfc3JjCT0geyAucmVnID0gUzNDX0NMS19TUkMsIC5zaGlmdCA9IDEzLCAuc2l6ZSA9IDEgIH0sCisJCS5yZWdfZGl2CT0geyAucmVnID0gUzNDX0NMS19ESVYyLCAuc2hpZnQgPSAxNiwgLnNpemUgPSA0ICB9LAorCQkuc291cmNlcwk9ICZjbGtzZXRfdWFydCwKKwl9LCB7CisvKiBXaGVyZSBkb2VzIFVDTEswIGNvbWUgZnJvbT8gKi8KKwkJLmNsawk9IHsKKwkJCS5uYW1lCQk9ICJzcGktYnVzIiwKKwkJCS5pZAkJPSAwLAorCQkJLmN0cmxiaXQgICAgICAgID0gUzNDX0NMS0NPTl9TQ0xLX1NQSTAsCisJCQkuZW5hYmxlCQk9IHMzYzY0eHhfc2Nsa19jdHJsLAorCQl9LAorCQkucmVnX3NyYwk9IHsgLnJlZyA9IFMzQ19DTEtfU1JDLCAuc2hpZnQgPSAxNCwgLnNpemUgPSAyICB9LAorCQkucmVnX2Rpdgk9IHsgLnJlZyA9IFMzQ19DTEtfRElWMiwgLnNoaWZ0ID0gMCwgLnNpemUgPSA0ICB9LAorCQkuc291cmNlcwk9ICZjbGtzZXRfc3BpX21tYywKKwl9LCB7CisJCS5jbGsJPSB7CisJCQkubmFtZQkJPSAic3BpLWJ1cyIsCisJCQkuaWQJCT0gMSwKKwkJCS5jdHJsYml0ICAgICAgICA9IFMzQ19DTEtDT05fU0NMS19TUEkxLAorCQkJLmVuYWJsZQkJPSBzM2M2NHh4X3NjbGtfY3RybCwKKwkJfSwKKwkJLnJlZ19zcmMJPSB7IC5yZWcgPSBTM0NfQ0xLX1NSQywgLnNoaWZ0ID0gMTYsIC5zaXplID0gMiAgfSwKKwkJLnJlZ19kaXYJPSB7IC5yZWcgPSBTM0NfQ0xLX0RJVjIsIC5zaGlmdCA9IDQsIC5zaXplID0gNCAgfSwKKwkJLnNvdXJjZXMJPSAmY2xrc2V0X3NwaV9tbWMsCisJfSwgeworCQkuY2xrCT0geworCQkJLm5hbWUJCT0gImF1ZGlvLWJ1cyIsCisJCQkuaWQJCT0gMCwKKwkJCS5jdHJsYml0ICAgICAgICA9IFMzQ19DTEtDT05fU0NMS19BVURJTzAsCisJCQkuZW5hYmxlCQk9IHMzYzY0eHhfc2Nsa19jdHJsLAorCQl9LAorCQkucmVnX3NyYwk9IHsgLnJlZyA9IFMzQ19DTEtfU1JDLCAuc2hpZnQgPSA3LCAuc2l6ZSA9IDMgIH0sCisJCS5yZWdfZGl2CT0geyAucmVnID0gUzNDX0NMS19ESVYyLCAuc2hpZnQgPSA4LCAuc2l6ZSA9IDQgIH0sCisJCS5zb3VyY2VzCT0gJmNsa3NldF9hdWRpbzAsCisJfSwgeworCQkuY2xrCT0geworCQkJLm5hbWUJCT0gImF1ZGlvLWJ1cyIsCisJCQkuaWQJCT0gMSwKKwkJCS5jdHJsYml0ICAgICAgICA9IFMzQ19DTEtDT05fU0NMS19BVURJTzEsCisJCQkuZW5hYmxlCQk9IHMzYzY0eHhfc2Nsa19jdHJsLAorCQl9LAorCQkucmVnX3NyYwk9IHsgLnJlZyA9IFMzQ19DTEtfU1JDLCAuc2hpZnQgPSAxMCwgLnNpemUgPSAzICB9LAorCQkucmVnX2Rpdgk9IHsgLnJlZyA9IFMzQ19DTEtfRElWMiwgLnNoaWZ0ID0gMTIsIC5zaXplID0gNCAgfSwKKwkJLnNvdXJjZXMJPSAmY2xrc2V0X2F1ZGlvMSwKKwl9LCB7CisJCS5jbGsJPSB7CisJCQkubmFtZQkJPSAiaXJkYS1idXMiLAorCQkJLmlkCQk9IDAsCisJCQkuY3RybGJpdCAgICAgICAgPSBTM0NfQ0xLQ09OX1NDTEtfSVJEQSwKKwkJCS5lbmFibGUJCT0gczNjNjR4eF9zY2xrX2N0cmwsCisJCX0sCisJCS5yZWdfc3JjCT0geyAucmVnID0gUzNDX0NMS19TUkMsIC5zaGlmdCA9IDI0LCAuc2l6ZSA9IDIgIH0sCisJCS5yZWdfZGl2CT0geyAucmVnID0gUzNDX0NMS19ESVYyLCAuc2hpZnQgPSAyMCwgLnNpemUgPSA0ICB9LAorCQkuc291cmNlcwk9ICZjbGtzZXRfaXJkYSwKKwl9LCB7CisJCS5jbGsJPSB7CisJCQkubmFtZQkJPSAiY2FtZXJhIiwKKwkJCS5pZAkJPSAtMSwKKwkJCS5jdHJsYml0ICAgICAgICA9IFMzQ19DTEtDT05fU0NMS19DQU0sCisJCQkuZW5hYmxlCQk9IHMzYzY0eHhfc2Nsa19jdHJsLAorCQl9LAorCQkucmVnX2Rpdgk9IHsgLnJlZyA9IFMzQ19DTEtfRElWMCwgLnNoaWZ0ID0gMjAsIC5zaXplID0gNCAgfSwKKwkJLnJlZ19zcmMJPSB7IC5yZWcgPSBOVUxMLCAuc2hpZnQgPSAwLCAuc2l6ZSA9IDAgIH0sCisJCS5zb3VyY2VzCT0gJmNsa3NldF9jYW1pZiwKKwl9LAorfTsKKworLyogQ2xvY2sgaW5pdGlhbGlzYXRpb24gY29kZSAqLworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgKmluaXRfcGFyZW50c1tdID0geworCSZjbGtfbW91dF9hcGxsLAorCSZjbGtfbW91dF9lcGxsLAorCSZjbGtfbW91dF9tcGxsLAorfTsKKworI2RlZmluZSBHRVRfRElWKGNsaywgZmllbGQpICgoKChjbGspICYgZmllbGQjI19NQVNLKSA+PiBmaWVsZCMjX1NISUZUKSArIDEpCisKK3ZvaWQgX19pbml0X29yX2NwdWZyZXEgczNjNjQwMF9zZXR1cF9jbG9ja3Modm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICp4dGFsX2NsazsKKwl1bnNpZ25lZCBsb25nIHh0YWw7CisJdW5zaWduZWQgbG9uZyBmY2xrOworCXVuc2lnbmVkIGxvbmcgaGNsazsKKwl1bnNpZ25lZCBsb25nIGhjbGsyOworCXVuc2lnbmVkIGxvbmcgcGNsazsKKwl1bnNpZ25lZCBsb25nIGVwbGw7CisJdW5zaWduZWQgbG9uZyBhcGxsOworCXVuc2lnbmVkIGxvbmcgbXBsbDsKKwl1bnNpZ25lZCBpbnQgcHRyOworCXUzMiBjbGtkaXYwOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWdpc3RlcmluZyBjbG9ja3NcbiIsIF9fZnVuY19fKTsKKworCWNsa2RpdjAgPSBfX3Jhd19yZWFkbChTM0NfQ0xLX0RJVjApOworCXByaW50ayhLRVJOX0RFQlVHICIlczogY2xrZGl2MCA9ICUwOHhcbiIsIF9fZnVuY19fLCBjbGtkaXYwKTsKKworCXh0YWxfY2xrID0gY2xrX2dldChOVUxMLCAieHRhbCIpOworCUJVR19PTihJU19FUlIoeHRhbF9jbGspKTsKKworCXh0YWwgPSBjbGtfZ2V0X3JhdGUoeHRhbF9jbGspOworCWNsa19wdXQoeHRhbF9jbGspOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB4dGFsIGlzICVsZFxuIiwgX19mdW5jX18sIHh0YWwpOworCisJLyogRm9yIG5vdyBhc3N1bWUgdGhlIG11eCBhbHdheXMgc2VsZWN0cyB0aGUgY3J5c3RhbCAqLworCWNsa19leHRfeHRhbF9tdXgucGFyZW50ID0geHRhbF9jbGs7CisKKwllcGxsID0gczNjNjQwMF9nZXRfZXBsbCh4dGFsKTsKKwltcGxsID0gczNjNjQwMF9nZXRfcGxsKHh0YWwsIF9fcmF3X3JlYWRsKFMzQ19NUExMX0NPTikpOworCWFwbGwgPSBzM2M2NDAwX2dldF9wbGwoeHRhbCwgX19yYXdfcmVhZGwoUzNDX0FQTExfQ09OKSk7CisKKwlmY2xrID0gbXBsbDsKKworCXByaW50ayhLRVJOX0lORk8gIlMzQzY0WFg6IFBMTCBzZXR0aW5ncywgQT0lbGQsIE09JWxkLCBFPSVsZFxuIiwKKwkgICAgICAgYXBsbCwgbXBsbCwgZXBsbCk7CisKKwloY2xrMiA9IG1wbGwgLyBHRVRfRElWKGNsa2RpdjAsIFMzQzY0MDBfQ0xLRElWMF9IQ0xLMik7CisJaGNsayA9IGhjbGsyIC8gR0VUX0RJVihjbGtkaXYwLCBTM0M2NDAwX0NMS0RJVjBfSENMSyk7CisJcGNsayA9IGhjbGsyIC8gR0VUX0RJVihjbGtkaXYwLCBTM0M2NDAwX0NMS0RJVjBfUENMSyk7CisKKwlwcmludGsoS0VSTl9JTkZPICJTM0M2NFhYOiBIQ0xLMj0lbGQsIEhDTEs9JWxkLCBQQ0xLPSVsZFxuIiwKKwkgICAgICAgaGNsazIsIGhjbGssIHBjbGspOworCisJY2xrX2ZvdXRfbXBsbC5yYXRlID0gbXBsbDsKKwljbGtfZm91dF9lcGxsLnJhdGUgPSBlcGxsOworCWNsa19mb3V0X2FwbGwucmF0ZSA9IGFwbGw7CisKKwljbGtfaDIucmF0ZSA9IGhjbGsyOworCWNsa19oLnJhdGUgPSBoY2xrOworCWNsa19wLnJhdGUgPSBwY2xrOworCWNsa19mLnJhdGUgPSBmY2xrOworCisJZm9yIChwdHIgPSAwOyBwdHIgPCBBUlJBWV9TSVpFKGluaXRfcGFyZW50cyk7IHB0cisrKQorCQlzM2Nfc2V0X2Nsa3NyYyhpbml0X3BhcmVudHNbcHRyXSwgdHJ1ZSk7CisKKwlmb3IgKHB0ciA9IDA7IHB0ciA8IEFSUkFZX1NJWkUoY2xrc3Jjcyk7IHB0cisrKQorCQlzM2Nfc2V0X2Nsa3NyYygmY2xrc3Jjc1twdHJdLCB0cnVlKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa3MxW10gX19pbml0ZGF0YSA9IHsKKwkmY2xrX2V4dF94dGFsX211eCwKKwkmY2xrX2lpc19jZDAsCisJJmNsa19paXNfY2QxLAorCSZjbGtfcGNtX2NkLAorCSZjbGtfbW91dF9lcGxsLmNsaywKKwkmY2xrX21vdXRfbXBsbC5jbGssCisJJmNsa19kb3V0X21wbGwsCisJJmNsa19hcm0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJJmNsa19leHQsCisJJmNsa19lcGxsLAorCSZjbGtfMjdtLAorCSZjbGtfNDhtLAorCSZjbGtfaDIsCit9OworCisvKioKKyAqIHMzYzY0eHhfcmVnaXN0ZXJfY2xvY2tzIC0gcmVnaXN0ZXIgY2xvY2tzIGZvciBzM2M2NDAwIGFuZCBzM2M2NDEwCisgKiBAeHRhbDogVGhlIHJhdGUgZm9yIHRoZSBjbG9jayBjcnlzdGFsIGZlZWRpbmcgdGhlIFBMTHMuCisgKiBAYXJtY2xrX2RpdmxpbWl0OiBEaXZpc29yIG1hc2sgZm9yIEFSTUNMSy4KKyAqCisgKiBSZWdpc3RlciB0aGUgY2xvY2tzIGZvciB0aGUgUzNDNjQwMCBhbmQgUzNDNjQxMCBTb0MgcmFuZ2UsIHN1Y2gKKyAqIGFzIEFSTUNMSyBhcyB3ZWxsIGFzIHRoZSBuZWNlc3NhcnkgcGFyZW50IGNsb2Nrcy4KKyAqCisgKiBUaGlzIGNhbGwgZG9lcyBub3Qgc2V0dXAgdGhlIGNsb2Nrcywgd2hpY2ggaXMgbGVmdCB0byB0aGUKKyAqIHMzYzY0MDBfc2V0dXBfY2xvY2tzKCkgY2FsbCB3aGljaCBtYXkgYmUgbmVlZGVkIGJ5IHRoZSBjcHVmcmVxCisgKiBvciByZXN1bWUgY29kZSB0byByZS1zZXQgdGhlIGNsb2NrcyBpZiB0aGUgYm9vdGxvYWRlciBoYXMgY2hhbmdlZAorICogdGhlbS4KKyAqLwordm9pZCBfX2luaXQgczNjNjR4eF9yZWdpc3Rlcl9jbG9ja3ModW5zaWduZWQgbG9uZyB4dGFsLCAKKwkJCQkgICAgdW5zaWduZWQgYXJtY2xrX2RpdmxpbWl0KQoreworCXN0cnVjdCBjbGsgKmNsa3A7CisJaW50IHJldDsKKwlpbnQgcHRyOworCisJYXJtY2xrX21hc2sgPSBhcm1jbGtfZGl2bGltaXQ7CisKKwlzM2MyNHh4X3JlZ2lzdGVyX2Jhc2VjbG9ja3MoeHRhbCk7CisJczNjMjR4eF9yZWdpc3Rlcl9jbG9ja3MoY2xrcywgQVJSQVlfU0laRShjbGtzKSk7CisKKwlzM2NfcmVnaXN0ZXJfY2xvY2tzKGluaXRfY2xvY2tzLCBBUlJBWV9TSVpFKGluaXRfY2xvY2tzKSk7CisKKwljbGtwID0gaW5pdF9jbG9ja3NfZGlzYWJsZTsKKwlmb3IgKHB0ciA9IDA7IHB0ciA8IEFSUkFZX1NJWkUoaW5pdF9jbG9ja3NfZGlzYWJsZSk7IHB0cisrLCBjbGtwKyspIHsKKworCQlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKGNsa3ApOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXMgKCVkKVxuIiwKKwkJCSAgICAgICBjbGtwLT5uYW1lLCByZXQpOworCQl9CisKKwkJKGNsa3AtPmVuYWJsZSkoY2xrcCwgMCk7CisJfQorCisJczNjMjR4eF9yZWdpc3Rlcl9jbG9ja3MoY2xrczEsIEFSUkFZX1NJWkUoY2xrczEpKTsKKwlzM2NfcmVnaXN0ZXJfY2xrc3JjKGNsa3NyY3MsIEFSUkFZX1NJWkUoY2xrc3JjcykpOworCXMzY19wd21jbGtfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2NwdS5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2NwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3NGU0NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvY3B1LmMKQEAgLTAsMCArMSwxNjcgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9jcHUuYworICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDNjRYWCBDUFUgU3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisKKyNpbmNsdWRlIDxtYWNoL3MzYzY0MDAuaD4KKyNpbmNsdWRlIDxtYWNoL3MzYzY0MTAuaD4KKworLyogdGFibGUgb2Ygc3VwcG9ydGVkIENQVXMgKi8KKworc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2M2NDAwW10gPSAiUzNDNjQwMCI7CitzdGF0aWMgY29uc3QgY2hhciBuYW1lX3MzYzY0MTBbXSA9ICJTM0M2NDEwIjsKKworc3RhdGljIHN0cnVjdCBjcHVfdGFibGUgY3B1X2lkc1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkuaWRjb2RlCQk9IDB4MzY0MDAwMDAsCisJCS5pZG1hc2sJCT0gMHhmZmZmZjAwMCwKKwkJLm1hcF9pbwkJPSBzM2M2NDAwX21hcF9pbywKKwkJLmluaXRfY2xvY2tzCT0gczNjNjQwMF9pbml0X2Nsb2NrcywKKwkJLmluaXRfdWFydHMJPSBzM2M2NDAwX2luaXRfdWFydHMsCisJCS5pbml0CQk9IHMzYzY0MDBfaW5pdCwKKwkJLm5hbWUJCT0gbmFtZV9zM2M2NDAwLAorCX0sIHsKKwkJLmlkY29kZQkJPSAweDM2NDEwMTAwLAorCQkuaWRtYXNrCQk9IDB4ZmZmZmZmMDAsCisJCS5tYXBfaW8JCT0gczNjNjQxMF9tYXBfaW8sCisJCS5pbml0X2Nsb2Nrcwk9IHMzYzY0MTBfaW5pdF9jbG9ja3MsCisJCS5pbml0X3VhcnRzCT0gczNjNjQxMF9pbml0X3VhcnRzLAorCQkuaW5pdAkJPSBzM2M2NDEwX2luaXQsCisJCS5uYW1lCQk9IG5hbWVfczNjNjQxMCwKKwl9LAorfTsKKworLyogbWluaW1hbCBJTyBtYXBwaW5nICovCisKKy8qIHNlZSBub3RlcyBvbiB1YXJ0IG1hcCBpbiBhcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgKi8KKyNkZWZpbmUgVUFSVF9PRkZTIChTM0NfUEFfVUFSVCAmIDB4ZmZmZmYpCisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgczNjX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVMzQ19WQV9TWVMsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTM0M2NFhYX1BBX1NZU0NPTiksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzNDX1ZBX01FTSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQzY0WFhfUEFfU1JPTSksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpKFMzQ19WQV9VQVJUICsgVUFSVF9PRkZTKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQ19QQV9VQVJUKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylWQV9WSUMwLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDNjRYWF9QQV9WSUMwKSwKKwkJLmxlbmd0aAkJPSBTWl8xNkssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpVkFfVklDMSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQzY0WFhfUEFfVklDMSksCisJCS5sZW5ndGgJCT0gU1pfMTZLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVMzQ19WQV9USU1FUiwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQ19QQV9USU1FUiksCisJCS5sZW5ndGgJCT0gU1pfMTZLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVMzQzY0WFhfVkFfR1BJTywKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQzY0WFhfUEFfR1BJTyksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzNDNjRYWF9WQV9NT0RFTSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQzY0WFhfUEFfTU9ERU0pLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVMzQ19WQV9XQVRDSERPRywKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQzY0WFhfUEFfV0FUQ0hET0cpLAorCQkubGVuZ3RoCQk9IFNaXzRLLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVMzQ19WQV9VU0JfSFNQSFksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTM0M2NFhYX1BBX1VTQl9IU1BIWSksCisJCS5sZW5ndGgJCT0gU1pfMUssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LAorfTsKKworCitzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzY0eHhfc3lzY2xhc3MgPSB7CisJLm5hbWUJPSAiczNjNjR4eC1jb3JlIiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzM2M2NHh4X3N5c2RldiA9IHsKKwkuY2xzCT0gJnMzYzY0eHhfc3lzY2xhc3MsCit9OworCisvKiB1YXJ0IHJlZ2lzdHJhdGlvbiBwcm9jZXNzICovCisKK3ZvaWQgX19pbml0IHMzYzY0MDBfY29tbW9uX2luaXRfdWFydHMoc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZnLCBpbnQgbm8pCit7CisJczNjMjR4eF9pbml0X3VhcnRkZXZzKCJzM2M2NDAwLXVhcnQiLCBzM2M2NHh4X3VhcnRfcmVzb3VyY2VzLCBjZmcsIG5vKTsKK30KKworLyogcmVhZCBjcHUgaWRlbnRpZmljYXRpb24gY29kZSAqLworCit2b2lkIF9faW5pdCBzM2M2NHh4X2luaXRfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBzaXplKQoreworCXVuc2lnbmVkIGxvbmcgaWRjb2RlOworCisJLyogaW5pdGlhbGlzZSB0aGUgaW8gZGVzY3JpcHRvcnMgd2UgbmVlZCBmb3IgaW5pdGlhbGlzYXRpb24gKi8KKwlpb3RhYmxlX2luaXQoczNjX2lvZGVzYywgQVJSQVlfU0laRShzM2NfaW9kZXNjKSk7CisJaW90YWJsZV9pbml0KG1hY2hfZGVzYywgc2l6ZSk7CisKKwlpZGNvZGUgPSBfX3Jhd19yZWFkbChTM0NfVkFfU1lTICsgMHgxMTgpOworCWlmICghaWRjb2RlKSB7CisJCS8qIFMzQzY0MDAgaGFzIHRoZSBJRCByZWdpc3RlciBpbiBhIGRpZmZlcmVudCBwbGFjZSwKKwkJICogYW5kIG5lZWRzIGEgd3JpdGUgYmVmb3JlIGl0IGNhbiBiZSByZWFkLiAqLworCisJCV9fcmF3X3dyaXRlbCgweDAsIFMzQ19WQV9TWVMgKyAweEExQyk7CisJCWlkY29kZSA9IF9fcmF3X3JlYWRsKFMzQ19WQV9TWVMgKyAweEExQyk7CisJfQorCisJczNjX2luaXRfY3B1KGlkY29kZSwgY3B1X2lkcywgQVJSQVlfU0laRShjcHVfaWRzKSk7Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IHMzYzY0eHhfc3lzZGV2X2luaXQodm9pZCkKK3sKKwlzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnMzYzY0eHhfc3lzY2xhc3MpOworCXJldHVybiBzeXNkZXZfcmVnaXN0ZXIoJnMzYzY0eHhfc3lzZGV2KTsKK30KKworY29yZV9pbml0Y2FsbChzM2M2NHh4X3N5c2Rldl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9jcHVmcmVxLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvY3B1ZnJlcS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9wbGF0LXMzYzY0eHgvY3B1ZnJlcS5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzY0eHgvY3B1ZnJlcS5jCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZGV2LWFkYy5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Rldi1hZGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWZlZjliCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Rldi1hZGMuYwpAQCAtMCwwICsxLDQ2IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZGV2LWFkYy5jCisgKgorICogQ29weXJpZ2h0IDIwMTAgTWF1cnVzIEN1ZWxlbmFlcmUKKyAqCisgKiBTM0M2NHh4IHNlcmllcyBkZXZpY2UgZGVmaW5pdGlvbiBmb3IgQURDIGRldmljZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSA8cGxhdC9hZGMuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY19hZGNfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQzY0WFhfUEFfQURDLAorCQkuZW5kICAgPSBTM0M2NFhYX1BBX0FEQyArIFNaXzI1NiAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfVEMsCisJCS5lbmQgICA9IElSUV9UQywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydCA9IElSUV9BREMsCisJCS5lbmQgICA9IElSUV9BREMsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfYWRjID0geworCS5uYW1lCQk9ICJzM2M2NHh4LWFkYyIsCisJLmlkCQk9IC0xLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzM2NfYWRjX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSBzM2NfYWRjX3Jlc291cmNlLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kZXYtYXVkaW8uYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kZXYtYXVkaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2U5ZTczCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Rldi1hdWRpby5jCkBAIC0wLDAgKzEsMzM1IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYy9kZXYtYXVkaW8uYworICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcworICogICAgICBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2RtYS5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorCisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9hdWRpby5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KKworI2luY2x1ZGUgPG1hY2gvZ3Bpby1iYW5rLWMuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8tYmFuay1kLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLWJhbmstZS5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby1iYW5rLWguaD4KKworc3RhdGljIGludCBzM2M2NHh4X2kyc3YzX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3dpdGNoIChwZGV2LT5pZCkgeworCWNhc2UgMDoKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BEKDApLCBTM0M2NFhYX0dQRDBfSTJTMF9DTEspOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEQoMSksIFMzQzY0WFhfR1BEMV9JMlMwX0NEQ0xLKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BEKDIpLCBTM0M2NFhYX0dQRDJfSTJTMF9MUkNMSyk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRCgzKSwgUzNDNjRYWF9HUEQzX0kyUzBfREkpOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEQoNCksIFMzQzY0WFhfR1BENF9JMlMwX0QwKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoMCksIFMzQzY0WFhfR1BFMF9JMlMxX0NMSyk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRSgxKSwgUzNDNjRYWF9HUEUxX0kyUzFfQ0RDTEspOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoMiksIFMzQzY0WFhfR1BFMl9JMlMxX0xSQ0xLKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BFKDMpLCBTM0M2NFhYX0dQRTNfSTJTMV9ESSk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRSg0KSwgUzNDNjRYWF9HUEU0X0kyUzFfRDApOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0RFQlVHICJJbnZhbGlkIEkyUyBDb250cm9sbGVyIG51bWJlciEiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjNjR4eF9pMnN2NF9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQQyg0KSwgUzNDNjRYWF9HUEM0X0kyU19WNDBfRE8wKTsKKwlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEMoNSksIFMzQzY0WFhfR1BDNV9JMlNfVjQwX0RPMSk7CisJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BDKDcpLCBTM0M2NFhYX0dQQzdfSTJTX1Y0MF9ETzIpOworCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQSCg2KSwgUzNDNjRYWF9HUEg2X0kyU19WNDBfQkNMSyk7CisJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BIKDcpLCBTM0M2NFhYX0dQSDdfSTJTX1Y0MF9DRENMSyk7CisJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BIKDgpLCBTM0M2NFhYX0dQSDhfSTJTX1Y0MF9MUkNMSyk7CisJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BIKDkpLCBTM0M2NFhYX0dQSDlfSTJTX1Y0MF9ESSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2M2NHh4X2lpczBfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQzY0WFhfUEFfSUlTMCwKKwkJLmVuZCAgID0gUzNDNjRYWF9QQV9JSVMwICsgMHgxMDAgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gRE1BQ0hfSTJTMF9PVVQsCisJCS5lbmQgICA9IERNQUNIX0kyUzBfT1VULAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0ID0gRE1BQ0hfSTJTMF9JTiwKKwkJLmVuZCAgID0gRE1BQ0hfSTJTMF9JTiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIHMzY19pMnMwX3BkYXRhID0geworCS5jZmdfZ3BpbyA9IHMzYzY0eHhfaTJzdjNfY2ZnX2dwaW8sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzY0eHhfZGV2aWNlX2lpczAgPSB7CisJLm5hbWUJCSAgPSAiczNjNjR4eC1paXMiLAorCS5pZAkJICA9IDAsCisJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjNjR4eF9paXMwX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJICA9IHMzYzY0eHhfaWlzMF9yZXNvdXJjZSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzM2NfaTJzMF9wZGF0YSwKKwl9LAorfTsKK0VYUE9SVF9TWU1CT0woczNjNjR4eF9kZXZpY2VfaWlzMCk7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjNjR4eF9paXMxX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0M2NFhYX1BBX0lJUzEsCisJCS5lbmQgICA9IFMzQzY0WFhfUEFfSUlTMSArIDB4MTAwIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IERNQUNIX0kyUzFfT1VULAorCQkuZW5kICAgPSBETUFDSF9JMlMxX09VVCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydCA9IERNQUNIX0kyUzFfSU4sCisJCS5lbmQgICA9IERNQUNIX0kyUzFfSU4sCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19hdWRpb19wZGF0YSBzM2NfaTJzMV9wZGF0YSA9IHsKKwkuY2ZnX2dwaW8gPSBzM2M2NHh4X2kyc3YzX2NmZ19ncGlvLAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2M2NHh4X2RldmljZV9paXMxID0geworCS5uYW1lCQkgID0gInMzYzY0eHgtaWlzIiwKKwkuaWQJCSAgPSAxLAorCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzYzY0eHhfaWlzMV9yZXNvdXJjZSksCisJLnJlc291cmNlCSAgPSBzM2M2NHh4X2lpczFfcmVzb3VyY2UsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmczNjX2kyczFfcGRhdGEsCisJfSwKK307CitFWFBPUlRfU1lNQk9MKHMzYzY0eHhfZGV2aWNlX2lpczEpOworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzYzY0eHhfaWlzdjRfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQzY0WFhfUEFfSUlTVjQsCisJCS5lbmQgICA9IFMzQzY0WFhfUEFfSUlTVjQgKyAweDEwMCAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBETUFDSF9IU0lfSTJTVjQwX1RYLAorCQkuZW5kICAgPSBETUFDSF9IU0lfSTJTVjQwX1RYLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0ID0gRE1BQ0hfSFNJX0kyU1Y0MF9SWCwKKwkJLmVuZCAgID0gRE1BQ0hfSFNJX0kyU1Y0MF9SWCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIHMzY19pMnN2NF9wZGF0YSA9IHsKKwkuY2ZnX2dwaW8gPSBzM2M2NHh4X2kyc3Y0X2NmZ19ncGlvLAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2M2NHh4X2RldmljZV9paXN2NCA9IHsKKwkubmFtZQkJICA9ICJzM2M2NHh4LWlpcy12NCIsCisJLmlkCQkgID0gLTEsCisJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjNjR4eF9paXN2NF9yZXNvdXJjZSksCisJLnJlc291cmNlCSAgPSBzM2M2NHh4X2lpc3Y0X3Jlc291cmNlLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhID0gJnMzY19pMnN2NF9wZGF0YSwKKwl9LAorfTsKK0VYUE9SVF9TWU1CT0woczNjNjR4eF9kZXZpY2VfaWlzdjQpOworCisKKy8qIFBDTSBDb250cm9sbGVyIHBsYXRmb3JtX2RldmljZXMgKi8KKworc3RhdGljIGludCBzM2M2NHh4X3BjbV9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN3aXRjaCAocGRldi0+aWQpIHsKKwljYXNlIDA6CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRCgwKSwgUzNDNjRYWF9HUEQwX1BDTTBfU0NMSyk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRCgxKSwgUzNDNjRYWF9HUEQxX1BDTTBfRVhUQ0xLKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BEKDIpLCBTM0M2NFhYX0dQRDJfUENNMF9GU1lOQyk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRCgzKSwgUzNDNjRYWF9HUEQzX1BDTTBfU0lOKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BEKDQpLCBTM0M2NFhYX0dQRDRfUENNMF9TT1VUKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoMCksIFMzQzY0WFhfR1BFMF9QQ00xX1NDTEspOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoMSksIFMzQzY0WFhfR1BFMV9QQ00xX0VYVENMSyk7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRSgyKSwgUzNDNjRYWF9HUEUyX1BDTTFfRlNZTkMpOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoMyksIFMzQzY0WFhfR1BFM19QQ00xX1NJTik7CisJCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRSg0KSwgUzNDNjRYWF9HUEU0X1BDTTFfU09VVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0RFQlVHICJJbnZhbGlkIFBDTSBDb250cm9sbGVyIG51bWJlciEiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjNjR4eF9wY20wX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0M2NFhYX1BBX1BDTTAsCisJCS5lbmQgICA9IFMzQzY0WFhfUEFfUENNMCArIDB4MTAwIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IERNQUNIX1BDTTBfVFgsCisJCS5lbmQgICA9IERNQUNIX1BDTTBfVFgsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAorCX0sCisJWzJdID0geworCQkuc3RhcnQgPSBETUFDSF9QQ00wX1JYLAorCQkuZW5kICAgPSBETUFDSF9QQ00wX1JYLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgczNjX3BjbTBfcGRhdGEgPSB7CisJLmNmZ19ncGlvID0gczNjNjR4eF9wY21fY2ZnX2dwaW8sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzY0eHhfZGV2aWNlX3BjbTAgPSB7CisJLm5hbWUJCSAgPSAic2Ftc3VuZy1wY20iLAorCS5pZAkJICA9IDAsCisJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjNjR4eF9wY20wX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJICA9IHMzYzY0eHhfcGNtMF9yZXNvdXJjZSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzM2NfcGNtMF9wZGF0YSwKKwl9LAorfTsKK0VYUE9SVF9TWU1CT0woczNjNjR4eF9kZXZpY2VfcGNtMCk7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjNjR4eF9wY20xX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0M2NFhYX1BBX1BDTTEsCisJCS5lbmQgICA9IFMzQzY0WFhfUEFfUENNMSArIDB4MTAwIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IERNQUNIX1BDTTFfVFgsCisJCS5lbmQgICA9IERNQUNIX1BDTTFfVFgsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAorCX0sCisJWzJdID0geworCQkuc3RhcnQgPSBETUFDSF9QQ00xX1JYLAorCQkuZW5kICAgPSBETUFDSF9QQ00xX1JYLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgczNjX3BjbTFfcGRhdGEgPSB7CisJLmNmZ19ncGlvID0gczNjNjR4eF9wY21fY2ZnX2dwaW8sCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzY0eHhfZGV2aWNlX3BjbTEgPSB7CisJLm5hbWUJCSAgPSAic2Ftc3VuZy1wY20iLAorCS5pZAkJICA9IDEsCisJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjNjR4eF9wY20xX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJICA9IHMzYzY0eHhfcGNtMV9yZXNvdXJjZSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzM2NfcGNtMV9wZGF0YSwKKwl9LAorfTsKK0VYUE9SVF9TWU1CT0woczNjNjR4eF9kZXZpY2VfcGNtMSk7CisKKy8qIEFDOTcgQ29udHJvbGxlciBwbGF0Zm9ybSBkZXZpY2VzICovCisKK3N0YXRpYyBpbnQgczNjNjR4eF9hYzk3X2NmZ19ncGQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEQoMCksIFMzQzY0WFhfR1BEMF9BQzk3X0JJVENMSyk7CisJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BEKDEpLCBTM0M2NFhYX0dQRDFfQUM5N19uUkVTRVQpOworCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRCgyKSwgUzNDNjRYWF9HUEQyX0FDOTdfU1lOQyk7CisJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BEKDMpLCBTM0M2NFhYX0dQRDNfQUM5N19TREkpOworCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRCg0KSwgUzNDNjRYWF9HUEQ0X0FDOTdfU0RPKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzY0eHhfYWM5N19jZmdfZ3BlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BFKDApLCBTM0M2NFhYX0dQRTBfQUM5N19CSVRDTEspOworCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRSgxKSwgUzNDNjRYWF9HUEUxX0FDOTdfblJFU0VUKTsKKwlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoMiksIFMzQzY0WFhfR1BFMl9BQzk3X1NZTkMpOworCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRSgzKSwgUzNDNjRYWF9HUEUzX0FDOTdfU0RJKTsKKwlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoNCksIFMzQzY0WFhfR1BFNF9BQzk3X1NETyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2M2NHh4X2FjOTdfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQzY0WFhfUEFfQUM5NywKKwkJLmVuZCAgID0gUzNDNjRYWF9QQV9BQzk3ICsgMHgxMDAgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gRE1BQ0hfQUM5N19QQ01PVVQsCisJCS5lbmQgICA9IERNQUNIX0FDOTdfUENNT1VULAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0ID0gRE1BQ0hfQUM5N19QQ01JTiwKKwkJLmVuZCAgID0gRE1BQ0hfQUM5N19QQ01JTiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwlbM10gPSB7CisJCS5zdGFydCA9IERNQUNIX0FDOTdfTUlDSU4sCisJCS5lbmQgICA9IERNQUNIX0FDOTdfTUlDSU4sCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAorCX0sCisJWzRdID0geworCQkuc3RhcnQgPSBJUlFfQUM5NywKKwkJLmVuZCAgID0gSVJRX0FDOTcsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19hdWRpb19wZGF0YSBzM2NfYWM5N19wZGF0YTsKKworc3RhdGljIHU2NCBzM2M2NHh4X2FjOTdfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjNjR4eF9kZXZpY2VfYWM5NyA9IHsKKwkubmFtZQkJICA9ICJzM2MtYWM5NyIsCisJLmlkCQkgID0gLTEsCisJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjNjR4eF9hYzk3X3Jlc291cmNlKSwKKwkucmVzb3VyY2UJICA9IHMzYzY0eHhfYWM5N19yZXNvdXJjZSwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzM2NfYWM5N19wZGF0YSwKKwkJLmRtYV9tYXNrID0gJnMzYzY0eHhfYWM5N19kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgPSBETUFfQklUX01BU0soMzIpLAorCX0sCit9OworRVhQT1JUX1NZTUJPTChzM2M2NHh4X2RldmljZV9hYzk3KTsKKwordm9pZCBfX2luaXQgczNjNjR4eF9hYzk3X3NldHVwX2dwaW8oaW50IG51bSkKK3sKKwlpZiAobnVtID09IFMzQzY0WFhfQUM5N19HUEQpCisJCXMzY19hYzk3X3BkYXRhLmNmZ19ncGlvID0gczNjNjR4eF9hYzk3X2NmZ19ncGQ7CisJZWxzZQorCQlzM2NfYWM5N19wZGF0YS5jZmdfZ3BpbyA9IHMzYzY0eHhfYWM5N19jZmdfZ3BlOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Rldi1ydGMuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kZXYtcnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjllN2EwNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kZXYtcnRjLmMKQEAgLTAsMCArMSw0MyBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2Rldi1ydGMuYworICoKKyAqIENvcHlyaWdodCAyMDA5IGJ5IE1hdXJ1cyBDdWVsZW5hZXJlIDxtY3VlbGVuYWVyZUBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX3J0Y19yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0ID0gUzNDNjRYWF9QQV9SVEMsCisJCS5lbmQgICA9IFMzQzY0WFhfUEFfUlRDICsgMHhmZiwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9SVENfQUxBUk0sCisJCS5lbmQgICA9IElSUV9SVENfQUxBUk0sCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQgPSBJUlFfUlRDX1RJQywKKwkJLmVuZCAgID0gSVJRX1JUQ19USUMsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRCisJfQorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3J0YyA9IHsKKwkubmFtZQkJICA9ICJzM2M2NHh4LXJ0YyIsCisJLmlkCQkgID0gLTEsCisJLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjX3J0Y19yZXNvdXJjZSksCisJLnJlc291cmNlCSAgPSBzM2NfcnRjX3Jlc291cmNlLAorfTsKK0VYUE9SVF9TWU1CT0woczNjX2RldmljZV9ydGMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Rldi1zcGkuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kZXYtc3BpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjljMzJkMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kZXYtc3BpLmMKQEAgLTAsMCArMSwxODIgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9kZXYtc3BpLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBMdGQuCisgKglKYXN3aW5kZXIgU2luZ2ggPGphc3NpLmJyYXJAc2Ftc3VuZy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKworI2luY2x1ZGUgPG1hY2gvZG1hLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8tYmFuay1jLmg+CisjaW5jbHVkZSA8bWFjaC9zcGktY2xvY2tzLmg+CisKKyNpbmNsdWRlIDxwbGF0L3MzYzY0eHgtc3BpLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgorI2luY2x1ZGUgPHBsYXQvaXJxcy5oPgorCitzdGF0aWMgY2hhciAqc3BpX3NyY19jbGtzW10gPSB7CisJW1MzQzY0WFhfU1BJX1NSQ0NMS19QQ0xLXSA9ICJwY2xrIiwKKwlbUzNDNjRYWF9TUElfU1JDQ0xLX1NQSUJVU10gPSAic3BpLWJ1cyIsCisJW1MzQzY0WFhfU1BJX1NSQ0NMS180OE1dID0gInNwaV80OG0iLAorfTsKKworLyogU1BJIENvbnRyb2xsZXIgcGxhdGZvcm1fZGV2aWNlcyAqLworCisvKiBTaW5jZSB3ZSBlbXVsYXRlIG11bHRpLWNzIGNhcGFiaWxpdHksIHdlIGRvIG5vdCB0b3VjaCB0aGUgR1BDLTMsNy4KKyAqIFRoZSBlbXVsYXRlZCBDUyBpcyB0b2dnbGVkIGJ5IGJvYXJkIHNwZWNpZmljIG1lY2hhbmlzbSwgYXMgaXQgY2FuCisgKiBiZSBlaXRoZXIgc29tZSBpbW1lZGlhdGUgR1BJTyBvciBzb21lIHNpZ25hbCBvdXQgb2Ygc29tZSBvdGhlcgorICogY2hpcCBpbiBiZXR3ZWVuIC4uLiBvciBzb21lIHlldCBhbm90aGVyIHdheS4KKyAqIFdlIHNpbXBseSBkbyBub3QgYXNzdW1lIGFueXRoaW5nIGFib3V0IENTLgorICovCitzdGF0aWMgaW50IHMzYzY0eHhfc3BpX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3dpdGNoIChwZGV2LT5pZCkgeworCWNhc2UgMDoKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BDKDApLCBTM0M2NFhYX0dQQzBfU1BJX01JU08wKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BDKDEpLCBTM0M2NFhYX0dQQzFfU1BJX0NMS08pOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEMoMiksIFMzQzY0WFhfR1BDMl9TUElfTU9TSU8pOworCQlzM2NfZ3Bpb19zZXRwdWxsKFMzQzY0WFhfR1BDKDApLCBTM0NfR1BJT19QVUxMX1VQKTsKKwkJczNjX2dwaW9fc2V0cHVsbChTM0M2NFhYX0dQQygxKSwgUzNDX0dQSU9fUFVMTF9VUCk7CisJCXMzY19ncGlvX3NldHB1bGwoUzNDNjRYWF9HUEMoMiksIFMzQ19HUElPX1BVTExfVVApOworCQlicmVhazsKKworCWNhc2UgMToKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BDKDQpLCBTM0M2NFhYX0dQQzRfU1BJX01JU08xKTsKKwkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BDKDUpLCBTM0M2NFhYX0dQQzVfU1BJX0NMSzEpOworCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEMoNiksIFMzQzY0WFhfR1BDNl9TUElfTU9TSTEpOworCQlzM2NfZ3Bpb19zZXRwdWxsKFMzQzY0WFhfR1BDKDQpLCBTM0NfR1BJT19QVUxMX1VQKTsKKwkJczNjX2dwaW9fc2V0cHVsbChTM0M2NFhYX0dQQyg1KSwgUzNDX0dQSU9fUFVMTF9VUCk7CisJCXMzY19ncGlvX3NldHB1bGwoUzNDNjRYWF9HUEMoNiksIFMzQ19HUElPX1BVTExfVVApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkludmFsaWQgU1BJIENvbnRyb2xsZXIgbnVtYmVyISIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2M2NHh4X3NwaTBfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQzY0WFhfUEFfU1BJMCwKKwkJLmVuZCAgID0gUzNDNjRYWF9QQV9TUEkwICsgMHgxMDAgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gRE1BQ0hfU1BJMF9UWCwKKwkJLmVuZCAgID0gRE1BQ0hfU1BJMF9UWCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9ETUEsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydCA9IERNQUNIX1NQSTBfUlgsCisJCS5lbmQgICA9IERNQUNIX1NQSTBfUlgsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAorCX0sCisJWzNdID0geworCQkuc3RhcnQgPSBJUlFfU1BJMCwKKwkJLmVuZCAgID0gSVJRX1NQSTAsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzYzY0eHhfc3BpX2luZm8gczNjNjR4eF9zcGkwX3BkYXRhID0geworCS5jZmdfZ3BpbyA9IHMzYzY0eHhfc3BpX2NmZ19ncGlvLAorCS5maWZvX2x2bF9tYXNrID0gMHg3ZiwKKwkucnhfbHZsX29mZnNldCA9IDEzLAorfTsKKworc3RhdGljIHU2NCBzcGlfZG1hbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjNjR4eF9kZXZpY2Vfc3BpMCA9IHsKKwkubmFtZQkJICA9ICJzM2M2NHh4LXNwaSIsCisJLmlkCQkgID0gMCwKKwkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2M2NHh4X3NwaTBfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQkgID0gczNjNjR4eF9zcGkwX3Jlc291cmNlLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCS5wbGF0Zm9ybV9kYXRhID0gJnMzYzY0eHhfc3BpMF9wZGF0YSwKKwl9LAorfTsKK0VYUE9SVF9TWU1CT0woczNjNjR4eF9kZXZpY2Vfc3BpMCk7CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjNjR4eF9zcGkxX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0M2NFhYX1BBX1NQSTEsCisJCS5lbmQgICA9IFMzQzY0WFhfUEFfU1BJMSArIDB4MTAwIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IERNQUNIX1NQSTFfVFgsCisJCS5lbmQgICA9IERNQUNIX1NQSTFfVFgsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAorCX0sCisJWzJdID0geworCQkuc3RhcnQgPSBETUFDSF9TUEkxX1JYLAorCQkuZW5kICAgPSBETUFDSF9TUEkxX1JYLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKKwl9LAorCVszXSA9IHsKKwkJLnN0YXJ0ID0gSVJRX1NQSTEsCisJCS5lbmQgICA9IElSUV9TUEkxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzM2M2NHh4X3NwaV9pbmZvIHMzYzY0eHhfc3BpMV9wZGF0YSA9IHsKKwkuY2ZnX2dwaW8gPSBzM2M2NHh4X3NwaV9jZmdfZ3BpbywKKwkuZmlmb19sdmxfbWFzayA9IDB4N2YsCisJLnJ4X2x2bF9vZmZzZXQgPSAxMywKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjNjR4eF9kZXZpY2Vfc3BpMSA9IHsKKwkubmFtZQkJICA9ICJzM2M2NHh4LXNwaSIsCisJLmlkCQkgID0gMSwKKwkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2M2NHh4X3NwaTFfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQkgID0gczNjNjR4eF9zcGkxX3Jlc291cmNlLAorCS5kZXYgPSB7CisJCS5kbWFfbWFzawkJPSAmc3BpX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IERNQV9CSVRfTUFTSygzMiksCisJCS5wbGF0Zm9ybV9kYXRhID0gJnMzYzY0eHhfc3BpMV9wZGF0YSwKKwl9LAorfTsKK0VYUE9SVF9TWU1CT0woczNjNjR4eF9kZXZpY2Vfc3BpMSk7CisKK3ZvaWQgX19pbml0IHMzYzY0eHhfc3BpX3NldF9pbmZvKGludCBjbnRybHIsIGludCBzcmNfY2xrX25yLCBpbnQgbnVtX2NzKQoreworCXN0cnVjdCBzM2M2NHh4X3NwaV9pbmZvICpwZDsKKworCS8qIFJlamVjdCBpbnZhbGlkIGNvbmZpZ3VyYXRpb24gKi8KKwlpZiAoIW51bV9jcyB8fCBzcmNfY2xrX25yIDwgMAorCQkJfHwgc3JjX2Nsa19uciA+IFMzQzY0WFhfU1BJX1NSQ0NMS180OE0pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBTUEkgY29uZmlndXJhdGlvblxuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoIChjbnRybHIpIHsKKwljYXNlIDA6CisJCXBkID0gJnMzYzY0eHhfc3BpMF9wZGF0YTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlwZCA9ICZzM2M2NHh4X3NwaTFfcGRhdGE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgU1BJIGNvbnRyb2xsZXIoJWQpXG4iLAorCQkJCQkJCV9fZnVuY19fLCBjbnRybHIpOworCQlyZXR1cm47CisJfQorCisJcGQtPm51bV9jcyA9IG51bV9jczsKKwlwZC0+c3JjX2Nsa19uciA9IHNyY19jbGtfbnI7CisJcGQtPnNyY19jbGtfbmFtZSA9IHNwaV9zcmNfY2xrc1tzcmNfY2xrX25yXTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kZXYtdWFydC5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2Rldi11YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc5N2Y3NAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9kZXYtdWFydC5jCkBAIC0wLDAgKzEsMTQ3IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZGV2LXVhcnQuYworICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogQmFzZSBTM0M2NFhYIFVBUlQgcmVzb3VyY2UgYW5kIGRldmljZSBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisKKy8qIFNlcmlhbCBwb3J0IHJlZ2lzdHJhdGlvbnMgKi8KKworLyogNjR4eCB1YXJ0cyBhcmUgY2xvc2VyIHRvZ2V0aGVyICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjNjR4eF91YXJ0MF9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUzNDX1BBX1VBUlQwLAorCQkuZW5kCT0gUzNDX1BBX1VBUlQwICsgMHgxMDAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9SWDAsCisJCS5lbmQJPSBJUlFfUzNDVUFSVF9SWDAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9UWDAsCisJCS5lbmQJPSBJUlFfUzNDVUFSVF9UWDAsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCisJfSwKKwlbM10gPSB7CisJCS5zdGFydAk9IElSUV9TM0NVQVJUX0VSUjAsCisJCS5lbmQJPSBJUlFfUzNDVUFSVF9FUlIwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzYzY0eHhfdWFydDFfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQ19QQV9VQVJUMSwKKwkJLmVuZCAgID0gUzNDX1BBX1VBUlQxICsgMHgxMDAsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9SWDEsCisJCS5lbmQJPSBJUlFfUzNDVUFSVF9SWDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9UWDEsCisJCS5lbmQJPSBJUlFfUzNDVUFSVF9UWDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCisJfSwKKwlbM10gPSB7CisJCS5zdGFydAk9IElSUV9TM0NVQVJUX0VSUjEsCisJCS5lbmQJPSBJUlFfUzNDVUFSVF9FUlIxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2M2eHhfdWFydDJfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQ19QQV9VQVJUMiwKKwkJLmVuZCAgID0gUzNDX1BBX1VBUlQyICsgMHgxMDAsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9SWDIsCisJCS5lbmQJPSBJUlFfUzNDVUFSVF9SWDIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9UWDIsCisJCS5lbmQJPSBJUlFfUzNDVUFSVF9UWDIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCisJfSwKKwlbM10gPSB7CisJCS5zdGFydAk9IElSUV9TM0NVQVJUX0VSUjIsCisJCS5lbmQJPSBJUlFfUzNDVUFSVF9FUlIyLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2M2NHh4X3VhcnQzX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0NfUEFfVUFSVDMsCisJCS5lbmQgICA9IFMzQ19QQV9VQVJUMyArIDB4MTAwLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1MzQ1VBUlRfUlgzLAorCQkuZW5kCT0gSVJRX1MzQ1VBUlRfUlgzLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1MzQ1VBUlRfVFgzLAorCQkuZW5kCT0gSVJRX1MzQ1VBUlRfVFgzLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKworCX0sCisJWzNdID0geworCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9FUlIzLAorCQkuZW5kCT0gSVJRX1MzQ1VBUlRfRVJSMywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKKworc3RydWN0IHMzYzI0eHhfdWFydF9yZXNvdXJjZXMgczNjNjR4eF91YXJ0X3Jlc291cmNlc1tdIF9faW5pdGRhdGEgPSB7CisJWzBdID0geworCQkucmVzb3VyY2VzCT0gczNjNjR4eF91YXJ0MF9yZXNvdXJjZSwKKwkJLm5yX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczNjNjR4eF91YXJ0MF9yZXNvdXJjZSksCisJfSwKKwlbMV0gPSB7CisJCS5yZXNvdXJjZXMJPSBzM2M2NHh4X3VhcnQxX3Jlc291cmNlLAorCQkubnJfcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzM2M2NHh4X3VhcnQxX3Jlc291cmNlKSwKKwl9LAorCVsyXSA9IHsKKwkJLnJlc291cmNlcwk9IHMzYzZ4eF91YXJ0Ml9yZXNvdXJjZSwKKwkJLm5yX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczNjNnh4X3VhcnQyX3Jlc291cmNlKSwKKwl9LAorCVszXSA9IHsKKwkJLnJlc291cmNlcwk9IHMzYzY0eHhfdWFydDNfcmVzb3VyY2UsCisJCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHMzYzY0eHhfdWFydDNfcmVzb3VyY2UpLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2RtYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MmJkZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZG1hLmMKQEAgLTAsMCArMSw3NDkgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9kbWEuYworICoKKyAqIENvcHlyaWdodCAyMDA5IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDNjRYWCBETUEgY29yZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgorCisjaW5jbHVkZSA8bWFjaC9yZWdzLXN5cy5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3BsMDgwLmg+CisKKy8qIGRtYSBjaGFubmVsIHN0YXRlIGluZm9ybWF0aW9uICovCisKK3N0cnVjdCBzM2M2NHh4X2RtYWMgeworCXN0cnVjdCBzeXNfZGV2aWNlCSBzeXNkZXY7CisJc3RydWN0IGNsawkJKmNsazsKKwl2b2lkIF9faW9tZW0JCSpyZWdzOworCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFubmVsczsKKwllbnVtIGRtYV9jaAkJIGNoYW5iYXNlOworfTsKKworLyogcG9vbCB0byBwcm92aWRlIExMSSBidWZmZXJzICovCitzdGF0aWMgc3RydWN0IGRtYV9wb29sICpkbWFfcG9vbDsKKworLyogRGVidWcgY29uZmlndXJhdGlvbiBhbmQgY29kZSAqLworCitzdGF0aWMgdW5zaWduZWQgY2hhciBkZWJ1Z19zaG93X2J1ZmZzID0gMDsKKworc3RhdGljIHZvaWQgZGJnX3Nob3djaGFuKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuKQoreworCXByX2RlYnVnKCJETUElZDogJTA4eC0+JTA4eCBMICUwOHggQyAlMDh4LCUwOHggUyAlMDh4XG4iLAorCQkgY2hhbi0+bnVtYmVyLAorCQkgcmVhZGwoY2hhbi0+cmVncyArIFBMMDgwX0NIX1NSQ19BRERSKSwKKwkJIHJlYWRsKGNoYW4tPnJlZ3MgKyBQTDA4MF9DSF9EU1RfQUREUiksCisJCSByZWFkbChjaGFuLT5yZWdzICsgUEwwODBfQ0hfTExJKSwKKwkJIHJlYWRsKGNoYW4tPnJlZ3MgKyBQTDA4MF9DSF9DT05UUk9MKSwKKwkJIHJlYWRsKGNoYW4tPnJlZ3MgKyBQTDA4MFNfQ0hfQ09OVFJPTDIpLAorCQkgcmVhZGwoY2hhbi0+cmVncyArIFBMMDgwU19DSF9DT05GSUcpKTsKK30KKworc3RhdGljIHZvaWQgc2hvd19sbGkoc3RydWN0IHBsMDgwc19sbGkgKmxsaSkKK3sKKwlwcl9kZWJ1ZygiTExJWyVwXSAlMDh4LT4lMDh4LCBOTCAlMDh4IEMgJTA4eCwlMDh4XG4iLAorCQkgbGxpLCBsbGktPnNyY19hZGRyLCBsbGktPmRzdF9hZGRyLCBsbGktPm5leHRfbGxpLAorCQkgbGxpLT5jb250cm9sMCwgbGxpLT5jb250cm9sMSk7Cit9CisKK3N0YXRpYyB2b2lkIGRiZ19zaG93YnVmZnMoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IHMzYzY0eHhfZG1hX2J1ZmYgKnB0cjsKKwlzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiAqZW5kOworCisJcHJfZGVidWcoIkRNQSVkOiBidWZmcyBuZXh0ICVwLCBjdXJyICVwLCBlbmQgJXBcbiIsCisJCSBjaGFuLT5udW1iZXIsIGNoYW4tPm5leHQsIGNoYW4tPmN1cnIsIGNoYW4tPmVuZCk7CisKKwlwdHIgPSBjaGFuLT5uZXh0OworCWVuZCA9IGNoYW4tPmVuZDsKKworCWlmIChkZWJ1Z19zaG93X2J1ZmZzKSB7CisJCWZvciAoOyBwdHIgIT0gTlVMTDsgcHRyID0gcHRyLT5uZXh0KSB7CisJCQlwcl9kZWJ1ZygiRE1BJWQ6ICUwOHggIiwKKwkJCQkgY2hhbi0+bnVtYmVyLCBwdHItPmxsaV9kbWEpOworCQkJc2hvd19sbGkocHRyLT5sbGkpOworCQl9CisJfQorfQorCisvKiBFbmQgb2YgRGVidWcgKi8KKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpzM2M2NHh4X2RtYV9tYXBfY2hhbm5lbCh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKK3sKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbjsKKwl1bnNpZ25lZCBpbnQgc3RhcnQsIG9mZnM7CisKKwlzdGFydCA9IDA7CisKKwlpZiAoY2hhbm5lbCA+PSBETUFDSF9QQ00xX1RYKQorCQlzdGFydCA9IDg7CisKKwlmb3IgKG9mZnMgPSAwOyBvZmZzIDwgODsgb2ZmcysrKSB7CisJCWNoYW4gPSAmczNjMjQxMF9jaGFuc1tzdGFydCArIG9mZnNdOworCQlpZiAoIWNoYW4tPmluX3VzZSkKKwkJCWdvdG8gZm91bmQ7CisJfQorCisJcmV0dXJuIE5VTEw7CisKK2ZvdW5kOgorCXMzY19kbWFfY2hhbl9tYXBbY2hhbm5lbF0gPSBjaGFuOworCXJldHVybiBjaGFuOworfQorCitpbnQgczNjMjQxMF9kbWFfY29uZmlnKHVuc2lnbmVkIGludCBjaGFubmVsLCBpbnQgeGZlcnVuaXQpCit7CisJc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSBzM2NfZG1hX2xvb2t1cF9jaGFubmVsKGNoYW5uZWwpOworCisJaWYgKGNoYW4gPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKHhmZXJ1bml0KSB7CisJY2FzZSAxOgorCQljaGFuLT5od193aWR0aCA9IDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJY2hhbi0+aHdfd2lkdGggPSAxOworCQlicmVhazsKKwljYXNlIDQ6CisJCWNoYW4tPmh3X3dpZHRoID0gMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaWxsZWdhbCB3aWR0aCAlZFxuIiwgX19mdW5jX18sIHhmZXJ1bml0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX2NvbmZpZyk7CisKK3N0YXRpYyB2b2lkIHMzYzY0eHhfZG1hX2ZpbGxfbGxpKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuLAorCQkJCSBzdHJ1Y3QgcGwwODBzX2xsaSAqbGxpLAorCQkJCSBkbWFfYWRkcl90IGRhdGEsIGludCBzaXplKQoreworCWRtYV9hZGRyX3Qgc3JjLCBkc3Q7CisJdTMyIGNvbnRyb2wwLCBjb250cm9sMTsKKworCXN3aXRjaCAoY2hhbi0+c291cmNlKSB7CisJY2FzZSBTM0MyNDEwX0RNQVNSQ19IVzoKKwkJc3JjID0gY2hhbi0+ZGV2X2FkZHI7CisJCWRzdCA9IGRhdGE7CisJCWNvbnRyb2wwID0gUEwwODBfQ09OVFJPTF9TUkNfQUhCMjsKKwkJY29udHJvbDAgfD0gUEwwODBfQ09OVFJPTF9EU1RfSU5DUjsKKwkJYnJlYWs7CisKKwljYXNlIFMzQzI0MTBfRE1BU1JDX01FTToKKwkJc3JjID0gZGF0YTsKKwkJZHN0ID0gY2hhbi0+ZGV2X2FkZHI7CisJCWNvbnRyb2wwID0gUEwwODBfQ09OVFJPTF9EU1RfQUhCMjsKKwkJY29udHJvbDAgfD0gUEwwODBfQ09OVFJPTF9TUkNfSU5DUjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJLyogbm90ZSwgd2UgZG8gbm90IGN1cnJlbnRseSBzZXR1cCBhbnkgb2YgdGhlIGJ1cnN0IGNvbnRyb2xzICovCisKKwljb250cm9sMSA9IHNpemUgPj4gY2hhbi0+aHdfd2lkdGg7CS8qIHNpemUgaW4gbm8gb2YgeGZlcnMgKi8KKwljb250cm9sMCB8PSBQTDA4MF9DT05UUk9MX1BST1RfU1lTOwkvKiBhbHdheXMgaW4gcHJpdi4gbW9kZSAqLworCWNvbnRyb2wwIHw9IFBMMDgwX0NPTlRST0xfVENfSVJRX0VOOwkvKiBhbHdheXMgZmlyZSBJUlEgKi8KKwljb250cm9sMCB8PSAodTMyKWNoYW4tPmh3X3dpZHRoIDw8IFBMMDgwX0NPTlRST0xfRFdJRFRIX1NISUZUOworCWNvbnRyb2wwIHw9ICh1MzIpY2hhbi0+aHdfd2lkdGggPDwgUEwwODBfQ09OVFJPTF9TV0lEVEhfU0hJRlQ7CisKKwlsbGktPnNyY19hZGRyID0gc3JjOworCWxsaS0+ZHN0X2FkZHIgPSBkc3Q7CisJbGxpLT5uZXh0X2xsaSA9IDA7CisJbGxpLT5jb250cm9sMCA9IGNvbnRyb2wwOworCWxsaS0+Y29udHJvbDEgPSBjb250cm9sMTsKK30KKworc3RhdGljIHZvaWQgczNjNjR4eF9sbGlfdG9fcmVncyhzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiwKKwkJCQlzdHJ1Y3QgcGwwODBzX2xsaSAqbGxpKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IGNoYW4tPnJlZ3M7CisKKwlwcl9kZWJ1ZygiJXM6IExMSSAlcCA9PiByZWdzXG4iLCBfX2Z1bmNfXywgbGxpKTsKKwlzaG93X2xsaShsbGkpOworCisJd3JpdGVsKGxsaS0+c3JjX2FkZHIsIHJlZ3MgKyBQTDA4MF9DSF9TUkNfQUREUik7CisJd3JpdGVsKGxsaS0+ZHN0X2FkZHIsIHJlZ3MgKyBQTDA4MF9DSF9EU1RfQUREUik7CisJd3JpdGVsKGxsaS0+bmV4dF9sbGksIHJlZ3MgKyBQTDA4MF9DSF9MTEkpOworCXdyaXRlbChsbGktPmNvbnRyb2wwLCByZWdzICsgUEwwODBfQ0hfQ09OVFJPTCk7CisJd3JpdGVsKGxsaS0+Y29udHJvbDEsIHJlZ3MgKyBQTDA4MFNfQ0hfQ09OVFJPTDIpOworfQorCitzdGF0aWMgaW50IHMzYzY0eHhfZG1hX3N0YXJ0KHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBzM2M2NHh4X2RtYWMgKmRtYWMgPSBjaGFuLT5kbWFjOworCXUzMiBjb25maWc7CisJdTMyIGJpdCA9IGNoYW4tPmJpdDsKKworCWRiZ19zaG93Y2hhbihjaGFuKTsKKworCXByX2RlYnVnKCIlczogY2xlYXJpbmcgaW50ZXJydXB0c1xuIiwgX19mdW5jX18pOworCisJLyogY2xlYXIgaW50ZXJydXB0cyAqLworCXdyaXRlbChiaXQsIGRtYWMtPnJlZ3MgKyBQTDA4MF9UQ19DTEVBUik7CisJd3JpdGVsKGJpdCwgZG1hYy0+cmVncyArIFBMMDgwX0VSUl9DTEVBUik7CisKKwlwcl9kZWJ1ZygiJXM6IHN0YXJ0aW5nIGNoYW5uZWxcbiIsIF9fZnVuY19fKTsKKworCWNvbmZpZyA9IHJlYWRsKGNoYW4tPnJlZ3MgKyBQTDA4MFNfQ0hfQ09ORklHKTsKKwljb25maWcgfD0gUEwwODBfQ09ORklHX0VOQUJMRTsKKworCXByX2RlYnVnKCIlczogd3JpdGluZyBjb25maWcgJTA4eFxuIiwgX19mdW5jX18sIGNvbmZpZyk7CisJd3JpdGVsKGNvbmZpZywgY2hhbi0+cmVncyArIFBMMDgwU19DSF9DT05GSUcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjNjR4eF9kbWFfc3RvcChzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbikKK3sKKwl1MzIgY29uZmlnOworCWludCB0aW1lb3V0OworCisJcHJfZGVidWcoIiVzOiBzdG9wcGluZyBjaGFubmVsXG4iLCBfX2Z1bmNfXyk7CisKKwlkYmdfc2hvd2NoYW4oY2hhbik7CisKKwljb25maWcgPSByZWFkbChjaGFuLT5yZWdzICsgUEwwODBTX0NIX0NPTkZJRyk7CisJY29uZmlnIHw9IFBMMDgwX0NPTkZJR19IQUxUOworCXdyaXRlbChjb25maWcsIGNoYW4tPnJlZ3MgKyBQTDA4MFNfQ0hfQ09ORklHKTsKKworCXRpbWVvdXQgPSAxMDAwOworCWRvIHsKKwkJY29uZmlnID0gcmVhZGwoY2hhbi0+cmVncyArIFBMMDgwU19DSF9DT05GSUcpOworCQlwcl9kZWJ1ZygiJXM6ICVkIC0gY29uZmlnICUwOHhcbiIsIF9fZnVuY19fLCB0aW1lb3V0LCBjb25maWcpOworCQlpZiAoY29uZmlnICYgUEwwODBfQ09ORklHX0FDVElWRSkKKwkJCXVkZWxheSgxMCk7CisJCWVsc2UKKwkJCWJyZWFrOworCQl9IHdoaWxlICgtLXRpbWVvdXQgPiAwKTsKKworCWlmIChjb25maWcgJiBQTDA4MF9DT05GSUdfQUNUSVZFKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNoYW5uZWwgc3RpbGwgYWN0aXZlXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWNvbmZpZyA9IHJlYWRsKGNoYW4tPnJlZ3MgKyBQTDA4MFNfQ0hfQ09ORklHKTsKKwljb25maWcgJj0gflBMMDgwX0NPTkZJR19FTkFCTEU7CisJd3JpdGVsKGNvbmZpZywgY2hhbi0+cmVncyArIFBMMDgwU19DSF9DT05GSUcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NHh4X2RtYV9idWZmZmRvbmUoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4sCisJCQkJCSBzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiAqYnVmLAorCQkJCQkgZW51bSBzM2MyNDEwX2RtYV9idWZmcmVzdWx0IHJlc3VsdCkKK3sKKwlpZiAoY2hhbi0+Y2FsbGJhY2tfZm4gIT0gTlVMTCkKKwkJKGNoYW4tPmNhbGxiYWNrX2ZuKShjaGFuLCBidWYtPnB3LCAwLCByZXN1bHQpOworfQorCitzdGF0aWMgdm9pZCBzM2M2NHh4X2RtYV9mcmVlYnVmZihzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiAqYnVmZikKK3sKKwlkbWFfcG9vbF9mcmVlKGRtYV9wb29sLCBidWZmLT5sbGksIGJ1ZmYtPmxsaV9kbWEpOworCWtmcmVlKGJ1ZmYpOworfQorCitzdGF0aWMgaW50IHMzYzY0eHhfZG1hX2ZsdXNoKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuKQoreworCXN0cnVjdCBzM2M2NHh4X2RtYV9idWZmICpidWZmLCAqbmV4dDsKKwl1MzIgY29uZmlnOworCisJZGJnX3Nob3djaGFuKGNoYW4pOworCisJcHJfZGVidWcoIiVzOiBmbHVzaGluZyBjaGFubmVsXG4iLCBfX2Z1bmNfXyk7CisKKwljb25maWcgPSByZWFkbChjaGFuLT5yZWdzICsgUEwwODBTX0NIX0NPTkZJRyk7CisJY29uZmlnICY9IH5QTDA4MF9DT05GSUdfRU5BQkxFOworCXdyaXRlbChjb25maWcsIGNoYW4tPnJlZ3MgKyBQTDA4MFNfQ0hfQ09ORklHKTsKKworCS8qIGR1bXAgYWxsIHRoZSBidWZmZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNoYW5uZWwgKi8KKworCWZvciAoYnVmZiA9IGNoYW4tPmN1cnI7IGJ1ZmYgIT0gTlVMTDsgYnVmZiA9IG5leHQpIHsKKwkJbmV4dCA9IGJ1ZmYtPm5leHQ7CisJCXByX2RlYnVnKCIlczogYnVmZiAlcCAobmV4dCAlcClcbiIsIF9fZnVuY19fLCBidWZmLCBidWZmLT5uZXh0KTsKKworCQlzM2M2NHh4X2RtYV9idWZmZmRvbmUoY2hhbiwgYnVmZiwgUzNDMjQxMF9SRVNfQUJPUlQpOworCQlzM2M2NHh4X2RtYV9mcmVlYnVmZihidWZmKTsKKwl9CisKKwljaGFuLT5jdXJyID0gY2hhbi0+bmV4dCA9IGNoYW4tPmVuZCA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHMzYzI0MTBfZG1hX2N0cmwodW5zaWduZWQgaW50IGNoYW5uZWwsIGVudW0gczNjMjQxMF9jaGFuX29wIG9wKQoreworCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gczNjX2RtYV9sb29rdXBfY2hhbm5lbChjaGFubmVsKTsKKworCVdBUk5fT04oIWNoYW4pOworCWlmICghY2hhbikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSBTM0MyNDEwX0RNQU9QX1NUQVJUOgorCQlyZXR1cm4gczNjNjR4eF9kbWFfc3RhcnQoY2hhbik7CisKKwljYXNlIFMzQzI0MTBfRE1BT1BfU1RPUDoKKwkJcmV0dXJuIHMzYzY0eHhfZG1hX3N0b3AoY2hhbik7CisKKwljYXNlIFMzQzI0MTBfRE1BT1BfRkxVU0g6CisJCXJldHVybiBzM2M2NHh4X2RtYV9mbHVzaChjaGFuKTsKKworCS8qIGJlbGl2ZSBQQVVTRS9SRVNVTUUgYXJlIG5vLW9wcyAqLworCWNhc2UgUzNDMjQxMF9ETUFPUF9QQVVTRToKKwljYXNlIFMzQzI0MTBfRE1BT1BfUkVTVU1FOgorCWNhc2UgUzNDMjQxMF9ETUFPUF9TVEFSVEVEOgorCWNhc2UgUzNDMjQxMF9ETUFPUF9USU1FT1VUOgorCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gLUVOT0VOVDsKK30KK0VYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfY3RybCk7CisKKy8qIHMzYzI0MTBfZG1hX2VucXVlCisgKgorICovCisKK2ludCBzM2MyNDEwX2RtYV9lbnF1ZXVlKHVuc2lnbmVkIGludCBjaGFubmVsLCB2b2lkICppZCwKKwkJCWRtYV9hZGRyX3QgZGF0YSwgaW50IHNpemUpCit7CisJc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSBzM2NfZG1hX2xvb2t1cF9jaGFubmVsKGNoYW5uZWwpOworCXN0cnVjdCBzM2M2NHh4X2RtYV9idWZmICpuZXh0OworCXN0cnVjdCBzM2M2NHh4X2RtYV9idWZmICpidWZmOworCXN0cnVjdCBwbDA4MHNfbGxpICpsbGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0OworCisJV0FSTl9PTighY2hhbik7CisJaWYgKCFjaGFuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWJ1ZmYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiksIEdGUF9BVE9NSUMpOworCWlmICghYnVmZikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBtZW1vcnkgZm9yIGJ1ZmZlclxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlsbGkgPSBkbWFfcG9vbF9hbGxvYyhkbWFfcG9vbCwgR0ZQX0FUT01JQywgJmJ1ZmYtPmxsaV9kbWEpOworCWlmICghbGxpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIG1lbW9yeSBmb3IgbGxpXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2J1ZmY7CisJfQorCisJcHJfZGVidWcoIiVzOiBidWZmICVwLCBkcCAlMDh4IGxsaSAoJXAsICUwOHgpICVkXG4iLAorCQkgX19mdW5jX18sIGJ1ZmYsIGRhdGEsIGxsaSwgKHUzMilidWZmLT5sbGlfZG1hLCBzaXplKTsKKworCWJ1ZmYtPmxsaSA9IGxsaTsKKwlidWZmLT5wdyA9IGlkOworCisJczNjNjR4eF9kbWFfZmlsbF9sbGkoY2hhbiwgbGxpLCBkYXRhLCBzaXplKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWlmICgobmV4dCA9IGNoYW4tPm5leHQpICE9IE5VTEwpIHsKKwkJc3RydWN0IHMzYzY0eHhfZG1hX2J1ZmYgKmVuZCA9IGNoYW4tPmVuZDsKKwkJc3RydWN0IHBsMDgwc19sbGkgKmVuZGxsaSA9IGVuZC0+bGxpOworCisJCXByX2RlYnVnKCJlbnF1aW5nIG9udG8gY2hhbm5lbFxuIik7CisKKwkJZW5kLT5uZXh0ID0gYnVmZjsKKwkJZW5kbGxpLT5uZXh0X2xsaSA9IGJ1ZmYtPmxsaV9kbWE7CisKKwkJaWYgKGNoYW4tPmZsYWdzICYgUzNDMjQxMF9ETUFGX0NJUkNVTEFSKSB7CisJCQlzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiAqY3VyciA9IGNoYW4tPmN1cnI7CisJCQlsbGktPm5leHRfbGxpID0gY3Vyci0+bGxpX2RtYTsKKwkJfQorCisJCWlmIChuZXh0ID09IGNoYW4tPmN1cnIpIHsKKwkJCXdyaXRlbChidWZmLT5sbGlfZG1hLCBjaGFuLT5yZWdzICsgUEwwODBfQ0hfTExJKTsKKwkJCWNoYW4tPm5leHQgPSBidWZmOworCQl9CisKKwkJc2hvd19sbGkoZW5kbGxpKTsKKwkJY2hhbi0+ZW5kID0gYnVmZjsKKwl9IGVsc2UgeworCQlwcl9kZWJ1ZygiZW5xdWluZyBvbnRvIGVtcHR5IGNoYW5uZWxcbiIpOworCisJCWNoYW4tPmN1cnIgPSBidWZmOworCQljaGFuLT5uZXh0ID0gYnVmZjsKKwkJY2hhbi0+ZW5kID0gYnVmZjsKKworCQlzM2M2NHh4X2xsaV90b19yZWdzKGNoYW4sIGxsaSk7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJc2hvd19sbGkobGxpKTsKKworCWRiZ19zaG93Y2hhbihjaGFuKTsKKwlkYmdfc2hvd2J1ZmZzKGNoYW4pOworCXJldHVybiAwOworCitlcnJfYnVmZjoKKwlrZnJlZShidWZmKTsKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX2VucXVldWUpOworCisKK2ludCBzM2MyNDEwX2RtYV9kZXZjb25maWcoaW50IGNoYW5uZWwsCisJCQkgIGVudW0gczNjMjQxMF9kbWFzcmMgc291cmNlLAorCQkJICB1bnNpZ25lZCBsb25nIGRldmFkZHIpCit7CisJc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSBzM2NfZG1hX2xvb2t1cF9jaGFubmVsKGNoYW5uZWwpOworCXUzMiBwZXJpcGhlcmFsOworCXUzMiBjb25maWcgPSAwOworCisJcHJfZGVidWcoIiVzOiBjaGFubmVsICVkLCBzb3VyY2UgJWQsIGRldiAlMDhseCwgY2hhbiAlcFxuIiwKKwkJIF9fZnVuY19fLCBjaGFubmVsLCBzb3VyY2UsIGRldmFkZHIsIGNoYW4pOworCisJV0FSTl9PTighY2hhbik7CisJaWYgKCFjaGFuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXBlcmlwaGVyYWwgPSAoY2hhbi0+cGVyaXBoZXJhbCAmIDB4Zik7CisJY2hhbi0+c291cmNlID0gc291cmNlOworCWNoYW4tPmRldl9hZGRyID0gZGV2YWRkcjsKKworCXByX2RlYnVnKCIlczogcGVyaXBoZXJhbCAlZFxuIiwgX19mdW5jX18sIHBlcmlwaGVyYWwpOworCisJc3dpdGNoIChzb3VyY2UpIHsKKwljYXNlIFMzQzI0MTBfRE1BU1JDX0hXOgorCQljb25maWcgPSAyIDw8IFBMMDgwX0NPTkZJR19GTE9XX0NPTlRST0xfU0hJRlQ7CisJCWNvbmZpZyB8PSBwZXJpcGhlcmFsIDw8IFBMMDgwX0NPTkZJR19TUkNfU0VMX1NISUZUOworCQlicmVhazsKKwljYXNlIFMzQzI0MTBfRE1BU1JDX01FTToKKwkJY29uZmlnID0gMSA8PCBQTDA4MF9DT05GSUdfRkxPV19DT05UUk9MX1NISUZUOworCQljb25maWcgfD0gcGVyaXBoZXJhbCA8PCBQTDA4MF9DT05GSUdfRFNUX1NFTF9TSElGVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYmFkIHNvdXJjZVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBhbGxvdyBUQyBhbmQgRVJSIGludGVycnVwdHMgKi8KKwljb25maWcgfD0gUEwwODBfQ09ORklHX1RDX0lSUV9NQVNLOworCWNvbmZpZyB8PSBQTDA4MF9DT05GSUdfRVJSX0lSUV9NQVNLOworCisJcHJfZGVidWcoIiVzOiBjb25maWcgJTA4eFxuIiwgX19mdW5jX18sIGNvbmZpZyk7CisKKwl3cml0ZWwoY29uZmlnLCBjaGFuLT5yZWdzICsgUEwwODBTX0NIX0NPTkZJRyk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfZGV2Y29uZmlnKTsKKworCitpbnQgczNjMjQxMF9kbWFfZ2V0cG9zaXRpb24odW5zaWduZWQgaW50IGNoYW5uZWwsCisJCQkgICAgZG1hX2FkZHJfdCAqc3JjLCBkbWFfYWRkcl90ICpkc3QpCit7CisJc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSBzM2NfZG1hX2xvb2t1cF9jaGFubmVsKGNoYW5uZWwpOworCisJV0FSTl9PTighY2hhbik7CisJaWYgKCFjaGFuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzcmMgIT0gTlVMTCkKKwkJKnNyYyA9IHJlYWRsKGNoYW4tPnJlZ3MgKyBQTDA4MF9DSF9TUkNfQUREUik7CisKKwlpZiAoZHN0ICE9IE5VTEwpCisJCSpkc3QgPSByZWFkbChjaGFuLT5yZWdzICsgUEwwODBfQ0hfRFNUX0FERFIpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX2dldHBvc2l0aW9uKTsKKworLyogczNjMjQxMF9yZXF1ZXN0X2RtYQorICoKKyAqIGdldCBjb250cm9sIG9mIGFuIGRtYSBjaGFubmVsCisqLworCitpbnQgczNjMjQxMF9kbWFfcmVxdWVzdCh1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwkJCXN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgKmNsaWVudCwKKwkJCXZvaWQgKmRldikKK3sKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJcHJfZGVidWcoImRtYSVkOiBzM2MyNDEwX3JlcXVlc3RfZG1hOiBjbGllbnQ9JXMsIGRldj0lcFxuIiwKKwkJIGNoYW5uZWwsIGNsaWVudC0+bmFtZSwgZGV2KTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWNoYW4gPSBzM2M2NHh4X2RtYV9tYXBfY2hhbm5lbChjaGFubmVsKTsKKwlpZiAoY2hhbiA9PSBOVUxMKSB7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJcmV0dXJuIC1FQlVTWTsKKwl9CisKKwlkYmdfc2hvd2NoYW4oY2hhbik7CisKKwljaGFuLT5jbGllbnQgPSBjbGllbnQ7CisJY2hhbi0+aW5fdXNlID0gMTsKKwljaGFuLT5wZXJpcGhlcmFsID0gY2hhbm5lbDsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworCS8qIG5lZWQgdG8gc2V0dXAgKi8KKworCXByX2RlYnVnKCIlczogY2hhbm5lbCBpbml0aWFsaXNlZCwgJXBcbiIsIF9fZnVuY19fLCBjaGFuKTsKKworCXJldHVybiBjaGFuLT5udW1iZXIgfCBETUFDSF9MT1dfTEVWRUw7Cit9CisKK0VYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfcmVxdWVzdCk7CisKKy8qIHMzYzI0MTBfZG1hX2ZyZWUKKyAqCisgKiByZWxlYXNlIHRoZSBnaXZlbiBjaGFubmVsIGJhY2sgdG8gdGhlIHN5c3RlbSwgd2lsbCBzdG9wIGFuZCBmbHVzaAorICogYW55IG91dHN0YW5kaW5nIHRyYW5zZmVycywgYW5kIGVuc3VyZSB0aGUgY2hhbm5lbCBpcyByZWFkeSBmb3IgdGhlCisgKiBuZXh0IGNsYWltYW50LgorICoKKyAqIE5vdGUsIGFsdGhvdWdoIGEgd2FybmluZyBpcyBjdXJyZW50bHkgcHJpbnRlZCBpZiB0aGUgZnJlZWluZyBjbGllbnQKKyAqIGluZm8gaXMgbm90IHRoZSBzYW1lIGFzIHRoZSByZWdpc3RyYW50J3MgY2xpZW50IGluZm8sIHRoZSBmcmVlIGlzIHN0aWxsCisgKiBhbGxvd2VkIHRvIGdvIHRocm91Z2guCisqLworCitpbnQgczNjMjQxMF9kbWFfZnJlZSh1bnNpZ25lZCBpbnQgY2hhbm5lbCwgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gczNjX2RtYV9sb29rdXBfY2hhbm5lbChjaGFubmVsKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGNoYW4gPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlpZiAoY2hhbi0+Y2xpZW50ICE9IGNsaWVudCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJkbWElZDogcG9zc2libGUgZnJlZSBmcm9tIGRpZmZlcmVudCBjbGllbnQgKGNoYW5uZWwgJXAsIHBhc3NlZCAlcClcbiIsCisJCSAgICAgICBjaGFubmVsLCBjaGFuLT5jbGllbnQsIGNsaWVudCk7CisJfQorCisJLyogc29ydCBvdXQgc3RvcHBpbmcgYW5kIGZyZWVpbmcgdGhlIGNoYW5uZWwgKi8KKworCisJY2hhbi0+Y2xpZW50ID0gTlVMTDsKKwljaGFuLT5pbl91c2UgPSAwOworCisJaWYgKCEoY2hhbm5lbCAmIERNQUNIX0xPV19MRVZFTCkpCisJCXMzY19kbWFfY2hhbl9tYXBbY2hhbm5lbF0gPSBOVUxMOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfZnJlZSk7CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzM2M2NHh4X2RtYV9pcnEoaW50IGlycSwgdm9pZCAqcHcpCit7CisJc3RydWN0IHMzYzY0eHhfZG1hYyAqZG1hYyA9IHB3OworCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuOworCWVudW0gczNjMjQxMF9kbWFfYnVmZnJlc3VsdCByZXM7CisJdTMyIHRjc3RhdCwgZXJyc3RhdDsKKwl1MzIgYml0OworCWludCBvZmZzOworCisJdGNzdGF0ID0gcmVhZGwoZG1hYy0+cmVncyArIFBMMDgwX1RDX1NUQVRVUyk7CisJZXJyc3RhdCA9IHJlYWRsKGRtYWMtPnJlZ3MgKyBQTDA4MF9FUlJfU1RBVFVTKTsKKworCWZvciAob2ZmcyA9IDAsIGJpdCA9IDE7IG9mZnMgPCA4OyBvZmZzKyssIGJpdCA8PD0gMSkgeworCQlzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiAqYnVmZjsKKworCQlpZiAoIShlcnJzdGF0ICYgYml0KSAmJiAhKHRjc3RhdCAmIGJpdCkpCisJCQljb250aW51ZTsKKworCQljaGFuID0gZG1hYy0+Y2hhbm5lbHMgKyBvZmZzOworCQlyZXMgPSBTM0MyNDEwX1JFU19FUlI7CisKKwkJaWYgKHRjc3RhdCAmIGJpdCkgeworCQkJd3JpdGVsKGJpdCwgZG1hYy0+cmVncyArIFBMMDgwX1RDX0NMRUFSKTsKKwkJCXJlcyA9IFMzQzI0MTBfUkVTX09LOworCQl9CisKKwkJaWYgKGVycnN0YXQgJiBiaXQpCisJCQl3cml0ZWwoYml0LCBkbWFjLT5yZWdzICsgUEwwODBfRVJSX0NMRUFSKTsKKworCQkvKiAnbmV4dCcgcG9pbnRzIHRvIHRoZSBidWZmZXIgdGhhdCBpcyBuZXh0IHRvIHRoZQorCQkgKiBjdXJyZW50bHkgYWN0aXZlIGJ1ZmZlci4KKwkJICogRm9yIENJUkNVTEFSIHF1ZXVlcywgJ25leHQnIHdpbGwgYmUgc2FtZSBhcyAnY3VycicKKwkJICogd2hlbiAnZW5kJyBpcyB0aGUgYWN0aXZlIGJ1ZmZlci4KKwkJICovCisJCWJ1ZmYgPSBjaGFuLT5jdXJyOworCQl3aGlsZSAoYnVmZiAmJiBidWZmICE9IGNoYW4tPm5leHQKKwkJCQkmJiBidWZmLT5uZXh0ICE9IGNoYW4tPm5leHQpCisJCQlidWZmID0gYnVmZi0+bmV4dDsKKworCQlpZiAoIWJ1ZmYpCisJCQlCVUcoKTsKKworCQlpZiAoYnVmZiA9PSBjaGFuLT5uZXh0KQorCQkJYnVmZiA9IGNoYW4tPmVuZDsKKworCQlzM2M2NHh4X2RtYV9idWZmZmRvbmUoY2hhbiwgYnVmZiwgcmVzKTsKKworCQkvKiBGcmVlIHRoZSBub2RlIGFuZCB1cGRhdGUgY3VyciwgaWYgbm9uLWNpcmN1bGFyIHF1ZXVlICovCisJCWlmICghKGNoYW4tPmZsYWdzICYgUzNDMjQxMF9ETUFGX0NJUkNVTEFSKSkgeworCQkJY2hhbi0+Y3VyciA9IGJ1ZmYtPm5leHQ7CisJCQlzM2M2NHh4X2RtYV9mcmVlYnVmZihidWZmKTsKKwkJfQorCisJCS8qIFVwZGF0ZSAnbmV4dCcgKi8KKwkJYnVmZiA9IGNoYW4tPm5leHQ7CisJCWlmIChjaGFuLT5uZXh0ID09IGNoYW4tPmVuZCkgeworCQkJY2hhbi0+bmV4dCA9IGNoYW4tPmN1cnI7CisJCQlpZiAoIShjaGFuLT5mbGFncyAmIFMzQzI0MTBfRE1BRl9DSVJDVUxBUikpCisJCQkJY2hhbi0+ZW5kID0gTlVMTDsKKwkJfSBlbHNlIHsKKwkJCWNoYW4tPm5leHQgPSBidWZmLT5uZXh0OworCQl9CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBkbWFfc3lzY2xhc3MgPSB7CisJLm5hbWUJCT0gInMzYzY0eHgtZG1hIiwKK307CisKK3N0YXRpYyBpbnQgczNjNjR4eF9kbWFfaW5pdDEoaW50IGNobm8sIGVudW0gZG1hX2NoIGNoYmFzZSwKKwkJCSAgICAgaW50IGlycSwgdW5zaWduZWQgaW50IGJhc2UpCit7CisJc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNocHRyID0gJnMzYzI0MTBfY2hhbnNbY2hub107CisJc3RydWN0IHMzYzY0eHhfZG1hYyAqZG1hYzsKKwljaGFyIGNsa25hbWVbMTZdOworCXZvaWQgX19pb21lbSAqcmVnczsKKwl2b2lkIF9faW9tZW0gKnJlZ3B0cjsKKwlpbnQgZXJyLCBjaDsKKworCWRtYWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczNjNjR4eF9kbWFjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkbWFjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvYyBtZW1cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZG1hYy0+c3lzZGV2LmlkID0gY2hubyAvIDg7CisJZG1hYy0+c3lzZGV2LmNscyA9ICZkbWFfc3lzY2xhc3M7CisKKwllcnIgPSBzeXNkZXZfcmVnaXN0ZXIoJmRtYWMtPnN5c2Rldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgc3lzZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyX2FsbG9jOworCX0KKworCXJlZ3MgPSBpb3JlbWFwKGJhc2UsIDB4MjAwKTsKKwlpZiAoIXJlZ3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGlvcmVtYXAoKVxuIiwgX19mdW5jX18pOworCQllcnIgPSAtRU5YSU87CisJCWdvdG8gZXJyX2RldjsKKwl9CisKKwlzbnByaW50ZihjbGtuYW1lLCBzaXplb2YoY2xrbmFtZSksICJkbWElZCIsIGRtYWMtPnN5c2Rldi5pZCk7CisKKwlkbWFjLT5jbGsgPSBjbGtfZ2V0KE5VTEwsIGNsa25hbWUpOworCWlmIChJU19FUlIoZG1hYy0+Y2xrKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gZ2V0IGNsb2NrICVzXG4iLCBfX2Z1bmNfXywgY2xrbmFtZSk7CisJCWVyciA9IFBUUl9FUlIoZG1hYy0+Y2xrKTsKKwkJZ290byBlcnJfbWFwOworCX0KKworCWNsa19lbmFibGUoZG1hYy0+Y2xrKTsKKworCWRtYWMtPnJlZ3MgPSByZWdzOworCWRtYWMtPmNoYW5iYXNlID0gY2hiYXNlOworCWRtYWMtPmNoYW5uZWxzID0gY2hwdHI7CisKKwllcnIgPSByZXF1ZXN0X2lycShpcnEsIHMzYzY0eHhfZG1hX2lycSwgMCwgIkRNQSIsIGRtYWMpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBnZXQgaXJxXG4iLCBfX2Z1bmNfXyk7CisJCWdvdG8gZXJyX2NsazsKKwl9CisKKwlyZWdwdHIgPSByZWdzICsgUEwwODBfQ3hfQkFTRSgwKTsKKworCWZvciAoY2ggPSAwOyBjaCA8IDg7IGNoKyssIGNobm8rKywgY2hwdHIrKykgeworCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVnaXN0ZXJpbmcgRE1BICVkICglcClcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgY2hubywgcmVncHRyKTsKKworCQljaHB0ci0+Yml0ID0gMSA8PCBjaDsKKwkJY2hwdHItPm51bWJlciA9IGNobm87CisJCWNocHRyLT5kbWFjID0gZG1hYzsKKwkJY2hwdHItPnJlZ3MgPSByZWdwdHI7CisJCXJlZ3B0ciArPSBQTDAwOF9DeF9TVFJJREU7CisJfQorCisJLyogZm9yIHRoZSBtb21lbnQsIHBlcm1hbmVudGx5IGVuYWJsZSB0aGUgY29udHJvbGxlciAqLworCXdyaXRlbChQTDA4MF9DT05GSUdfRU5BQkxFLCByZWdzICsgUEwwODBfQ09ORklHKTsKKworCXByaW50ayhLRVJOX0lORk8gIlBMMDgwOiBJUlEgJWQsIGF0ICVwXG4iLCBpcnEsIHJlZ3MpOworCisJcmV0dXJuIDA7CisKK2Vycl9jbGs6CisJY2xrX2Rpc2FibGUoZG1hYy0+Y2xrKTsKKwljbGtfcHV0KGRtYWMtPmNsayk7CitlcnJfbWFwOgorCWlvdW5tYXAocmVncyk7CitlcnJfZGV2OgorCXN5c2Rldl91bnJlZ2lzdGVyKCZkbWFjLT5zeXNkZXYpOworZXJyX2FsbG9jOgorCWtmcmVlKGRtYWMpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHMzYzY0eHhfZG1hX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFJlZ2lzdGVyaW5nIERNQSBjaGFubmVsc1xuIiwgX19mdW5jX18pOworCisJZG1hX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoIkRNQS1MTEkiLCBOVUxMLCBzaXplb2Yoc3RydWN0IHBsMDgwc19sbGkpLCAxNiwgMCk7CisJaWYgKCFkbWFfcG9vbCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gY3JlYXRlIHBvb2xcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0ID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZkbWFfc3lzY2xhc3MpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGNyZWF0ZSBzeXNjbGFzc1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBTZXQgYWxsIERNQSBjb25maWd1cmF0aW9uIHRvIGJlIERNQSwgbm90IFNETUEgKi8KKwl3cml0ZWwoMHhmZmZmZmYsIFMzQ19TWVNSRUcoMHgxMTApKTsKKworCS8qIFJlZ2lzdGVyIHN0YW5kYXJkIERNQSBjb250cm9sZXJzICovCisJczNjNjR4eF9kbWFfaW5pdDEoMCwgRE1BQ0hfVUFSVDAsIElSUV9ETUEwLCAweDc1MDAwMDAwKTsKKwlzM2M2NHh4X2RtYV9pbml0MSg4LCBETUFDSF9QQ00xX1RYLCBJUlFfRE1BMSwgMHg3NTEwMDAwMCk7CisKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChzM2M2NHh4X2RtYV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9ncGlvbGliLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZ3Bpb2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZTY3OTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvZ3Bpb2xpYi5jCkBAIC0wLDAgKzEsMjg4IEBACisvKiBhcmNoL2FybS9wbGF0LXMzYzY0eHgvZ3Bpb2xpYi5jCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDNjRYWCAtIEdQSU9saWIgc3VwcG9ydCAKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvZ3Bpby1jb3JlLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmctaGVscGVycy5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CisKKy8qIEdQSU8gYmFuayBzdW1tYXJ5OgorICoKKyAqIEJhbmsJR1BJT3MJU3R5bGUJU2xwQ29uCUV4dEludCBHcm91cAorICogQQk4CTRCaXQJWWVzCTEKKyAqIEIJNwk0Qml0CVllcwkxCisgKiBDCTgJNEJpdAlZZXMJMgorICogRAk1CTRCaXQJWWVzCTMKKyAqIEUJNQk0Qml0CVllcwlOb25lCisgKiBGCTE2CTJCaXQJWWVzCTQgWzFdCisgKiBHCTcJNEJpdAlZZXMJNQorICogSAkxMAk0Qml0WzJdCVllcwk2CisgKiBJCTE2CTJCaXQJWWVzCU5vbmUKKyAqIEoJMTIJMkJpdAlZZXMJTm9uZQorICogSwkxNgk0Qml0WzJdCU5vCU5vbmUKKyAqIEwJMTUJNEJpdFsyXSBObwlOb25lCisgKiBNCTYJNEJpdAlObwlJUlFfRUlOVAorICogTgkxNgkyQml0CU5vCUlSUV9FSU5UCisgKiBPCTE2CTJCaXQJWWVzCTcKKyAqIFAJMTUJMkJpdAlZZXMJOAorICogUQk5CTJCaXQJWWVzCTkKKyAqCisgKiBbMV0gQkFOS0YgcGlucyAxNCwxNSBkbyBub3QgZm9ybSBwYXJ0IG9mIHRoZSBleHRlcm5hbCBpbnRlcnJ1cHQgc291cmNlcworICogWzJdIEJBTksgaGFzIHR3byBjb250cm9sIHJlZ2lzdGVycywgR1B4Q09OMCBhbmQgR1B4Q09OMQorICovCisKK3N0YXRpYyBzdHJ1Y3QgczNjX2dwaW9fY2ZnIGdwaW9fNGJpdF9jZmdfbm9pbnQgPSB7CisJLnNldF9jb25maWcJPSBzM2NfZ3Bpb19zZXRjZmdfczNjNjR4eF80Yml0LAorCS5zZXRfcHVsbAk9IHMzY19ncGlvX3NldHB1bGxfdXBkb3duLAorCS5nZXRfcHVsbAk9IHMzY19ncGlvX2dldHB1bGxfdXBkb3duLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2NfZ3Bpb19jZmcgZ3Bpb180Yml0X2NmZ19laW50MDExMSA9IHsKKwkuY2ZnX2VpbnQJPSA3LAorCS5zZXRfY29uZmlnCT0gczNjX2dwaW9fc2V0Y2ZnX3MzYzY0eHhfNGJpdCwKKwkuc2V0X3B1bGwJPSBzM2NfZ3Bpb19zZXRwdWxsX3VwZG93biwKKwkuZ2V0X3B1bGwJPSBzM2NfZ3Bpb19nZXRwdWxsX3VwZG93biwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2dwaW9fY2ZnIGdwaW9fNGJpdF9jZmdfZWludDAwMTEgPSB7CisJLmNmZ19laW50CT0gMywKKwkuc2V0X2NvbmZpZwk9IHMzY19ncGlvX3NldGNmZ19zM2M2NHh4XzRiaXQsCisJLnNldF9wdWxsCT0gczNjX2dwaW9fc2V0cHVsbF91cGRvd24sCisJLmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF91cGRvd24sCit9OworCitpbnQgczNjNjR4eF9ncGlvMmludF9ncG0oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgcGluKQoreworCXJldHVybiBwaW4gPCA1ID8gSVJRX0VJTlQoMjMpICsgcGluIDogLUVOWElPOworfQorCitzdGF0aWMgc3RydWN0IHMzY19ncGlvX2NoaXAgZ3Bpb180Yml0W10gPSB7CisJeworCQkuYmFzZQk9IFMzQzY0WFhfR1BBX0JBU0UsCisJCS5jb25maWcJPSAmZ3Bpb180Yml0X2NmZ19laW50MDExMSwKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IFMzQzY0WFhfR1BBKDApLAorCQkJLm5ncGlvCT0gUzNDNjRYWF9HUElPX0FfTlIsCisJCQkubGFiZWwJPSAiR1BBIiwKKwkJfSwKKwl9LCB7CisJCS5iYXNlCT0gUzNDNjRYWF9HUEJfQkFTRSwKKwkJLmNvbmZpZwk9ICZncGlvXzRiaXRfY2ZnX2VpbnQwMTExLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzNDNjRYWF9HUEIoMCksCisJCQkubmdwaW8JPSBTM0M2NFhYX0dQSU9fQl9OUiwKKwkJCS5sYWJlbAk9ICJHUEIiLAorCQl9LAorCX0sIHsKKwkJLmJhc2UJPSBTM0M2NFhYX0dQQ19CQVNFLAorCQkuY29uZmlnCT0gJmdwaW9fNGJpdF9jZmdfZWludDAxMTEsCisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBTM0M2NFhYX0dQQygwKSwKKwkJCS5uZ3Bpbwk9IFMzQzY0WFhfR1BJT19DX05SLAorCQkJLmxhYmVsCT0gIkdQQyIsCisJCX0sCisJfSwgeworCQkuYmFzZQk9IFMzQzY0WFhfR1BEX0JBU0UsCisJCS5jb25maWcJPSAmZ3Bpb180Yml0X2NmZ19laW50MDExMSwKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IFMzQzY0WFhfR1BEKDApLAorCQkJLm5ncGlvCT0gUzNDNjRYWF9HUElPX0RfTlIsCisJCQkubGFiZWwJPSAiR1BEIiwKKwkJfSwKKwl9LCB7CisJCS5iYXNlCT0gUzNDNjRYWF9HUEVfQkFTRSwKKwkJLmNvbmZpZwk9ICZncGlvXzRiaXRfY2ZnX25vaW50LAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzNDNjRYWF9HUEUoMCksCisJCQkubmdwaW8JPSBTM0M2NFhYX0dQSU9fRV9OUiwKKwkJCS5sYWJlbAk9ICJHUEUiLAorCQl9LAorCX0sIHsKKwkJLmJhc2UJPSBTM0M2NFhYX0dQR19CQVNFLAorCQkuY29uZmlnCT0gJmdwaW9fNGJpdF9jZmdfZWludDAxMTEsCisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBTM0M2NFhYX0dQRygwKSwKKwkJCS5uZ3Bpbwk9IFMzQzY0WFhfR1BJT19HX05SLAorCQkJLmxhYmVsCT0gIkdQRyIsCisJCX0sCisJfSwgeworCQkuYmFzZQk9IFMzQzY0WFhfR1BNX0JBU0UsCisJCS5jb25maWcJPSAmZ3Bpb180Yml0X2NmZ19laW50MDAxMSwKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IFMzQzY0WFhfR1BNKDApLAorCQkJLm5ncGlvCT0gUzNDNjRYWF9HUElPX01fTlIsCisJCQkubGFiZWwJPSAiR1BNIiwKKwkJCS50b19pcnEgPSBzM2M2NHh4X2dwaW8yaW50X2dwbSwKKwkJfSwKKwl9LAorfTsKKworaW50IHMzYzY0eHhfZ3BpbzJpbnRfZ3BsKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIHBpbikKK3sKKwlyZXR1cm4gcGluID49IDggPyBJUlFfRUlOVCgxNikgKyBwaW4gLSA4IDogLUVOWElPOworfQorCitzdGF0aWMgc3RydWN0IHMzY19ncGlvX2NoaXAgZ3Bpb180Yml0MltdID0geworCXsKKwkJLmJhc2UJPSBTM0M2NFhYX0dQSF9CQVNFICsgMHg0LAorCQkuY29uZmlnCT0gJmdwaW9fNGJpdF9jZmdfZWludDAxMTEsCisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBTM0M2NFhYX0dQSCgwKSwKKwkJCS5uZ3Bpbwk9IFMzQzY0WFhfR1BJT19IX05SLAorCQkJLmxhYmVsCT0gIkdQSCIsCisJCX0sCisJfSwgeworCQkuYmFzZQk9IFMzQzY0WFhfR1BLX0JBU0UgKyAweDQsCisJCS5jb25maWcJPSAmZ3Bpb180Yml0X2NmZ19ub2ludCwKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IFMzQzY0WFhfR1BLKDApLAorCQkJLm5ncGlvCT0gUzNDNjRYWF9HUElPX0tfTlIsCisJCQkubGFiZWwJPSAiR1BLIiwKKwkJfSwKKwl9LCB7CisJCS5iYXNlCT0gUzNDNjRYWF9HUExfQkFTRSArIDB4NCwKKwkJLmNvbmZpZwk9ICZncGlvXzRiaXRfY2ZnX2VpbnQwMDExLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzNDNjRYWF9HUEwoMCksCisJCQkubmdwaW8JPSBTM0M2NFhYX0dQSU9fTF9OUiwKKwkJCS5sYWJlbAk9ICJHUEwiLAorCQkJLnRvX2lycSA9IHMzYzY0eHhfZ3BpbzJpbnRfZ3BsLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19ncGlvX2NmZyBncGlvXzJiaXRfY2ZnX25vaW50ID0geworCS5zZXRfY29uZmlnCT0gczNjX2dwaW9fc2V0Y2ZnX3MzYzI0eHgsCisJLnNldF9wdWxsCT0gczNjX2dwaW9fc2V0cHVsbF91cGRvd24sCisJLmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF91cGRvd24sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19ncGlvX2NmZyBncGlvXzJiaXRfY2ZnX2VpbnQxMCA9IHsKKwkuY2ZnX2VpbnQJPSAyLAorCS5zZXRfY29uZmlnCT0gczNjX2dwaW9fc2V0Y2ZnX3MzYzI0eHgsCisJLnNldF9wdWxsCT0gczNjX2dwaW9fc2V0cHVsbF91cGRvd24sCisJLmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF91cGRvd24sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19ncGlvX2NmZyBncGlvXzJiaXRfY2ZnX2VpbnQxMSA9IHsKKwkuY2ZnX2VpbnQJPSAzLAorCS5zZXRfY29uZmlnCT0gczNjX2dwaW9fc2V0Y2ZnX3MzYzI0eHgsCisJLnNldF9wdWxsCT0gczNjX2dwaW9fc2V0cHVsbF91cGRvd24sCisJLmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF91cGRvd24sCit9OworCitpbnQgczNjNjR4eF9ncGlvMmludF9ncG4oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgcGluKQoreworCXJldHVybiBJUlFfRUlOVCgwKSArIHBpbjsKK30KKworc3RhdGljIHN0cnVjdCBzM2NfZ3Bpb19jaGlwIGdwaW9fMmJpdFtdID0geworCXsKKwkJLmJhc2UJPSBTM0M2NFhYX0dQRl9CQVNFLAorCQkuY29uZmlnCT0gJmdwaW9fMmJpdF9jZmdfZWludDExLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzNDNjRYWF9HUEYoMCksCisJCQkubmdwaW8JPSBTM0M2NFhYX0dQSU9fRl9OUiwKKwkJCS5sYWJlbAk9ICJHUEYiLAorCQl9LAorCX0sIHsKKwkJLmJhc2UJPSBTM0M2NFhYX0dQSV9CQVNFLAorCQkuY29uZmlnCT0gJmdwaW9fMmJpdF9jZmdfbm9pbnQsCisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBTM0M2NFhYX0dQSSgwKSwKKwkJCS5uZ3Bpbwk9IFMzQzY0WFhfR1BJT19JX05SLAorCQkJLmxhYmVsCT0gIkdQSSIsCisJCX0sCisJfSwgeworCQkuYmFzZQk9IFMzQzY0WFhfR1BKX0JBU0UsCisJCS5jb25maWcJPSAmZ3Bpb18yYml0X2NmZ19ub2ludCwKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IFMzQzY0WFhfR1BKKDApLAorCQkJLm5ncGlvCT0gUzNDNjRYWF9HUElPX0pfTlIsCisJCQkubGFiZWwJPSAiR1BKIiwKKwkJfSwKKwl9LCB7CisJCS5iYXNlCT0gUzNDNjRYWF9HUE5fQkFTRSwKKwkJLmNvbmZpZwk9ICZncGlvXzJiaXRfY2ZnX2VpbnQxMCwKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IFMzQzY0WFhfR1BOKDApLAorCQkJLm5ncGlvCT0gUzNDNjRYWF9HUElPX05fTlIsCisJCQkubGFiZWwJPSAiR1BOIiwKKwkJCS50b19pcnEgPSBzM2M2NHh4X2dwaW8yaW50X2dwbiwKKwkJfSwKKwl9LCB7CisJCS5iYXNlCT0gUzNDNjRYWF9HUE9fQkFTRSwKKwkJLmNvbmZpZwk9ICZncGlvXzJiaXRfY2ZnX2VpbnQxMSwKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IFMzQzY0WFhfR1BPKDApLAorCQkJLm5ncGlvCT0gUzNDNjRYWF9HUElPX09fTlIsCisJCQkubGFiZWwJPSAiR1BPIiwKKwkJfSwKKwl9LCB7CisJCS5iYXNlCT0gUzNDNjRYWF9HUFBfQkFTRSwKKwkJLmNvbmZpZwk9ICZncGlvXzJiaXRfY2ZnX2VpbnQxMSwKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IFMzQzY0WFhfR1BQKDApLAorCQkJLm5ncGlvCT0gUzNDNjRYWF9HUElPX1BfTlIsCisJCQkubGFiZWwJPSAiR1BQIiwKKwkJfSwKKwl9LCB7CisJCS5iYXNlCT0gUzNDNjRYWF9HUFFfQkFTRSwKKwkJLmNvbmZpZwk9ICZncGlvXzJiaXRfY2ZnX2VpbnQxMSwKKwkJLmNoaXAJPSB7CisJCQkuYmFzZQk9IFMzQzY0WFhfR1BRKDApLAorCQkJLm5ncGlvCT0gUzNDNjRYWF9HUElPX1FfTlIsCisJCQkubGFiZWwJPSAiR1BRIiwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIF9faW5pdCB2b2lkIHMzYzY0eHhfZ3Bpb2xpYl9hZGRfMmJpdChzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCkKK3sKKwljaGlwLT5wbSA9IF9fZ3Bpb19wbSgmczNjX2dwaW9fcG1fMmJpdCk7Cit9CisKK3N0YXRpYyBfX2luaXQgdm9pZCBzM2M2NHh4X2dwaW9saWJfYWRkKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwcywKKwkJCQkgICAgICAgaW50IG5yX2NoaXBzLAorCQkJCSAgICAgICB2b2lkICgqZm4pKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICopKQoreworCWZvciAoOyBucl9jaGlwcyA+IDA7IG5yX2NoaXBzLS0sIGNoaXBzKyspIHsKKwkJaWYgKGZuKQorCQkJKGZuKShjaGlwcyk7CisJCXMzY19ncGlvbGliX2FkZChjaGlwcyk7CisJfQorfQorCitzdGF0aWMgX19pbml0IGludCBzM2M2NHh4X2dwaW9saWJfaW5pdCh2b2lkKQoreworCXMzYzY0eHhfZ3Bpb2xpYl9hZGQoZ3Bpb180Yml0LCBBUlJBWV9TSVpFKGdwaW9fNGJpdCksCisJCQkgICAgc2Ftc3VuZ19ncGlvbGliX2FkZF80Yml0KTsKKworCXMzYzY0eHhfZ3Bpb2xpYl9hZGQoZ3Bpb180Yml0MiwgQVJSQVlfU0laRShncGlvXzRiaXQyKSwKKwkJCSAgICBzYW1zdW5nX2dwaW9saWJfYWRkXzRiaXQyKTsKKworCXMzYzY0eHhfZ3Bpb2xpYl9hZGQoZ3Bpb18yYml0LCBBUlJBWV9TSVpFKGdwaW9fMmJpdCksCisJCQkgICAgczNjNjR4eF9ncGlvbGliX2FkZF8yYml0KTsKKworCXJldHVybiAwOworfQorCitjb3JlX2luaXRjYWxsKHMzYzY0eHhfZ3Bpb2xpYl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMThhYzUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsMzkgQEAKKy8qIGFyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKy8qIHB1bGwgaW4gdGhlIHJlbGV2YW50IHJlZ2lzdGVyIGFuZCBtYXAgZmlsZXMuICovCisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KKworCS8qIG5vdGUsIGZvciB0aGUgYm9vdCBwcm9jZXNzIHRvIHdvcmsgd2UgaGF2ZSB0byBrZWVwIHRoZSBVQVJUCisJICogdmlydHVhbCBhZGRyZXNzIGFsaWduZWQgdG8gYW4gMU1pQiBib3VuZGFyeSBmb3IgdGhlIEwxCisJICogbWFwcGluZyB0aGUgaGVhZCBjb2RlIG1ha2VzLiBXZSBrZWVwIHRoZSBVQVJUIHZpcnR1YWwgYWRkcmVzcworCSAqIGFsaWduZWQgYW5kIGFkZCBpbiB0aGUgb2Zmc2V0IHdoZW4gd2UgbG9hZCB0aGUgdmFsdWUgaGVyZS4KKwkgKi8KKworCS5tYWNybyBhZGRydWFydCwgcngKKwkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKKwkJdHN0CVxyeCwgIzEKKwkJbGRyZXEJXHJ4LCA9IFMzQ19QQV9VQVJUCisJCWxkcm5lCVxyeCwgPSAoUzNDX1ZBX1VBUlQgKyBTM0NfUEFfVUFSVCAmIDB4ZmZmZmYpCisjaWYgQ09ORklHX0RFQlVHX1MzQ19VQVJUICE9IDAKKwkJYWRkCVxyeCwgXHJ4LCAjKDB4NDAwICogQ09ORklHX0RFQlVHX1MzQ19VQVJUKQorI2VuZGlmCisJLmVuZG0KKworLyogaW5jbHVkZSB0aGUgcmVzZXQgb2YgdGhlIGNvZGUgd2hpY2ggd2lsbCBkbyB0aGUgd29yaywgd2UncmUgb25seQorICogY29tcGlsaW5nIGZvciBhIHNpbmdsZSBjcHUgcHJvY2Vzc29yIHR5cGUgc28gdGhlIGRlZmF1bHQgb2YgczNjMjQ0MAorICogd2lsbCBiZSBmaW5lIHdpdGggdXMuCisgKi8KKworI2luY2x1ZGUgPHBsYXQvZGVidWctbWFjcm8uUz4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZG1hLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNWQ5MjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2RtYS5oCkBAIC0wLDAgKzEsMTI3IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RtYS5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDNjQwMCAtIERNQSBzdXBwb3J0CisgKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0RNQV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfRE1BX0ggX19GSUxFX18KKworI2RlZmluZSBTM0NfRE1BX0NIQU5ORUxTCSgxNikKKworLyogc2VlIG1hY2gtczNjMjQxMC9kbWEuaCBmb3Igbm90ZXMgb24gZG1hIGNoYW5uZWwgbnVtYmVycyAqLworCisvKiBOb3RlLCBmb3IgdGhlIFMzQzY0WFggYXJjaGl0ZWN0dXJlIHdlIGtlZXAgdGhlIERNQUNIXworICogZGVmaW5lcyBpbiB0aGUgb3JkZXIgdGhleSBhcmUgYWxsb2NhdGVkIHRvIFtTXURNQTAvW1NdRE1BMQorICogc28gdGhhdCBpcyBlYXN5IHRvIGRvIERIQUNIXyAtPiBETUEgY29udHJvbGxlciBjb252ZXJzaW9uCisgKi8KK2VudW0gZG1hX2NoIHsKKwkvKiBETUEwL1NETUEwICovCisJRE1BQ0hfVUFSVDAgPSAwLAorCURNQUNIX1VBUlQwX1NSQzIsCisJRE1BQ0hfVUFSVDEsCisJRE1BQ0hfVUFSVDFfU1JDMiwKKwlETUFDSF9VQVJUMiwKKwlETUFDSF9VQVJUMl9TUkMyLAorCURNQUNIX1VBUlQzLAorCURNQUNIX1VBUlQzX1NSQzIsCisJRE1BQ0hfUENNMF9UWCwKKwlETUFDSF9QQ00wX1JYLAorCURNQUNIX0kyUzBfT1VULAorCURNQUNIX0kyUzBfSU4sCisJRE1BQ0hfU1BJMF9UWCwKKwlETUFDSF9TUEkwX1JYLAorCURNQUNIX0hTSV9JMlNWNDBfVFgsCisJRE1BQ0hfSFNJX0kyU1Y0MF9SWCwKKworCS8qIERNQTEvU0RNQTEgKi8KKwlETUFDSF9QQ00xX1RYID0gMTYsCisJRE1BQ0hfUENNMV9SWCwKKwlETUFDSF9JMlMxX09VVCwKKwlETUFDSF9JMlMxX0lOLAorCURNQUNIX1NQSTFfVFgsCisJRE1BQ0hfU1BJMV9SWCwKKwlETUFDSF9BQzk3X1BDTU9VVCwKKwlETUFDSF9BQzk3X1BDTUlOLAorCURNQUNIX0FDOTdfTUlDSU4sCisJRE1BQ0hfUFdNLAorCURNQUNIX0lSREEsCisJRE1BQ0hfRVhURVJOQUwsCisJRE1BQ0hfUkVTMSwKKwlETUFDSF9SRVMyLAorCURNQUNIX1NFQ1VSSVRZX1JYLAkvKiBTRE1BMSBvbmx5ICovCisJRE1BQ0hfU0VDVVJJVFlfVFgsCS8qIFNETUExIG9ubHkgKi8KKwlETUFDSF9NQVgJCS8qIHRoZSBlbmQgKi8KK307CisKK3N0YXRpYyBfX2lubGluZV9fIGJvb2wgczNjX2RtYV9oYXNfY2lyY3VsYXIodm9pZCkKK3sKKwlyZXR1cm4gdHJ1ZTsKK30KKworI2RlZmluZSBTM0MyNDEwX0RNQUZfQ0lSQ1VMQVIJCSgxIDw8IDApCisKKyNpbmNsdWRlIDxwbGF0L2RtYS5oPgorCisjZGVmaW5lIERNQUNIX0xPV19MRVZFTCAoMTw8MjgpIC8qIHVzZSB0aGlzIHRvIHNwZWNpZml5IGhhcmR3YXJlIGNoIG5vICovCisKK3N0cnVjdCBzM2M2NHh4X2RtYV9idWZmOworCisvKiogczNjNjR4eF9kbWFfYnVmZiAtIFMzQzY0WFggRE1BIGJ1ZmZlciBkZXNjcmlwdG9yCisgKiBAbmV4dDogUG9pbnRlciB0byBuZXh0IGJ1ZmZlciBpbiBxdWV1ZSBvciByaW5nLgorICogQHB3OiBDbGllbnQgcHJvdmlkZWQgaWRlbnRpZmllcgorICogQGxsaTogUG9pbnRlciB0byBoYXJkd2FyZSBkZXNjcmlwdG9yIHRoaXMgYnVmZmVyIGlzIGFzc29jaWF0ZWQgd2l0aC4KKyAqIEBsbGlfZG1hOiBIYXJkYXJlIGFkZHJlc3Mgb2YgdGhlIGRlc2NyaXB0b3IuCisgKi8KK3N0cnVjdCBzM2M2NHh4X2RtYV9idWZmIHsKKwlzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiAqbmV4dDsKKworCXZvaWQJCQkqcHc7CisJc3RydWN0IHBsMDgwc19sbGkJKmxsaTsKKwlkbWFfYWRkcl90CQkgbGxpX2RtYTsKK307CisKK3N0cnVjdCBzM2M2NHh4X2RtYWM7CisKK3N0cnVjdCBzM2MyNDEwX2RtYV9jaGFuIHsKKwl1bnNpZ25lZCBjaGFyCQkgbnVtYmVyOyAgICAgIC8qIG51bWJlciBvZiB0aGlzIGRtYSBjaGFubmVsICovCisJdW5zaWduZWQgY2hhcgkJIGluX3VzZTsgICAgICAvKiBjaGFubmVsIGFsbG9jYXRlZCAqLworCXVuc2lnbmVkIGNoYXIJCSBiaXQ7CSAgICAgIC8qIGJpdCBmb3IgZW5hYmxlL2Rpc2FibGUvZXRjICovCisJdW5zaWduZWQgY2hhcgkJIGh3X3dpZHRoOworCXVuc2lnbmVkIGNoYXIJCSBwZXJpcGhlcmFsOworCisJdW5zaWduZWQgaW50CQkgZmxhZ3M7CisJZW51bSBzM2MyNDEwX2RtYXNyYwkgc291cmNlOworCisKKwlkbWFfYWRkcl90CQlkZXZfYWRkcjsKKworCXN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgczNjNjR4eF9kbWFjCSpkbWFjOwkJLyogcG9pbnRlciB0byBjb250cm9sbGVyICovCisKKwl2b2lkIF9faW9tZW0JCSpyZWdzOworCisJLyogY2RyaXZlciBjYWxsYmFja3MgKi8KKwlzM2MyNDEwX2RtYV9jYmZuX3QJIGNhbGxiYWNrX2ZuOwkvKiBidWZmZXIgZG9uZSBjYWxsYmFjayAqLworCXMzYzI0MTBfZG1hX29wZm5fdAkgb3BfZm47CQkvKiBjaGFubmVsIG9wIGNhbGxiYWNrICovCisKKwkvKiBidWZmZXIgbGlzdCBhbmQgaW5mb3JtYXRpb24gKi8KKwlzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZgkqY3VycjsJCS8qIGN1cnJlbnQgZG1hIGJ1ZmZlciAqLworCXN0cnVjdCBzM2M2NHh4X2RtYV9idWZmCSpuZXh0OwkJLyogbmV4dCBidWZmZXIgdG8gbG9hZCAqLworCXN0cnVjdCBzM2M2NHh4X2RtYV9idWZmCSplbmQ7CQkvKiBlbmQgb2YgcXVldWUgKi8KKworCS8qIG5vdGUsIHdoZW4gY2hhbm5lbCBpcyBydW5uaW5nIGluIGNpcmN1bGFyIG1vZGUsIGN1cnIgaXMgdGhlCisJICogZmlyc3QgYnVmZmVyIGVucXVldWVkLCBlbmQgaXMgdGhlIGxhc3QgYW5kIGN1cnIgaXMgd2hlcmUgdGhlCisJICogbGFzdCBidWZmZXItZG9uZSBldmVudCBpcyBzZXQtYXQuIFRoZSBidWZmZXJzIGFyZSBub3QgZnJlZWQKKwkgKiBhbmQgdGhlIGxhc3QgYnVmZmVyIGhhcmR3YXJlIGRlc2NyaXB0b3IgcG9pbnRzIGJhY2sgdG8gdGhlCisJICogZmlyc3QuCisJICovCit9OworCisjaW5jbHVkZSA8cGxhdC9kbWEtY29yZS5oPgorCisjZW5kaWYgLyogX19BU01fQVJDSF9JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMzYyNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMKQEAgLTAsMCArMSwxOCBAQAorLyogYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBMb3ctbGV2ZWwgSVJRIGhlbHBlciBtYWNyb3MgZm9yIHRoZSBTYW1zdW5nIFMzQzY0WFggc2VyaWVzCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisqLworCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKworI2luY2x1ZGUgPGFzbS9lbnRyeS1tYWNyby12aWMyLlM+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1hLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQyMTJlMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZ3Bpby1iYW5rLWEuaApAQCAtMCwwICsxLDQ4IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1hLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogR1BJTyBCYW5rIEEgcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2RlZmluZSBTM0M2NFhYX0dQQUNPTgkJCShTM0M2NFhYX0dQQV9CQVNFICsgMHgwMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEFEQVQJCQkoUzNDNjRYWF9HUEFfQkFTRSArIDB4MDQpCisjZGVmaW5lIFMzQzY0WFhfR1BBUFVECQkJKFMzQzY0WFhfR1BBX0JBU0UgKyAweDA4KQorI2RlZmluZSBTM0M2NFhYX0dQQUNPTlNMUAkJKFMzQzY0WFhfR1BBX0JBU0UgKyAweDBjKQorI2RlZmluZSBTM0M2NFhYX0dQQVBVRFNMUAkJKFMzQzY0WFhfR1BBX0JBU0UgKyAweDEwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BBX0NPTk1BU0soX19ncGlvKQkoMHhmIDw8ICgoX19ncGlvKSAqIDQpKQorI2RlZmluZSBTM0M2NFhYX0dQQV9JTlBVVChfX2dwaW8pCSgweDAgPDwgKChfX2dwaW8pICogNCkpCisjZGVmaW5lIFMzQzY0WFhfR1BBX09VVFBVVChfX2dwaW8pCSgweDEgPDwgKChfX2dwaW8pICogNCkpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEEwX1VBUlRfUlhEMAkJKDB4MDIgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEEwX0VJTlRfRzFfMAkJKDB4MDcgPDwgMCkKKworI2RlZmluZSBTM0M2NFhYX0dQQTFfVUFSVF9UWEQwCQkoMHgwMiA8PCA0KQorI2RlZmluZSBTM0M2NFhYX0dQQTFfRUlOVF9HMV8xCQkoMHgwNyA8PCA0KQorCisjZGVmaW5lIFMzQzY0WFhfR1BBMl9VQVJUX25DVFMwCQkoMHgwMiA8PCA4KQorI2RlZmluZSBTM0M2NFhYX0dQQTJfRUlOVF9HMV8yCQkoMHgwNyA8PCA4KQorCisjZGVmaW5lIFMzQzY0WFhfR1BBM19VQVJUX25SVFMwCQkoMHgwMiA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9HUEEzX0VJTlRfRzFfMwkJKDB4MDcgPDwgMTIpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEE0X1VBUlRfUlhEMQkJKDB4MDIgPDwgMTYpCisjZGVmaW5lIFMzQzY0WFhfR1BBNF9FSU5UX0cxXzQJCSgweDA3IDw8IDE2KQorCisjZGVmaW5lIFMzQzY0WFhfR1BBNV9VQVJUX1RYRDEJCSgweDAyIDw8IDIwKQorI2RlZmluZSBTM0M2NFhYX0dQQTVfRUlOVF9HMV81CQkoMHgwNyA8PCAyMCkKKworI2RlZmluZSBTM0M2NFhYX0dQQTZfVUFSVF9uQ1RTMQkJKDB4MDIgPDwgMjQpCisjZGVmaW5lIFMzQzY0WFhfR1BBNl9FSU5UX0cxXzYJCSgweDA3IDw8IDI0KQorCisjZGVmaW5lIFMzQzY0WFhfR1BBN19VQVJUX25SVFMxCQkoMHgwMiA8PCAyOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEE3X0VJTlRfRzFfNwkJKDB4MDcgPDwgMjgpCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZ3Bpby1iYW5rLWIuaCBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZ3Bpby1iYW5rLWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjMyYzAzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9ncGlvLWJhbmstYi5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZ3Bpby1iYW5rLWIuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIAlCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBHUElPIEJhbmsgQiByZWdpc3RlciBhbmQgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjZGVmaW5lIFMzQzY0WFhfR1BCQ09OCQkJKFMzQzY0WFhfR1BCX0JBU0UgKyAweDAwKQorI2RlZmluZSBTM0M2NFhYX0dQQkRBVAkJCShTM0M2NFhYX0dQQl9CQVNFICsgMHgwNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEJQVUQJCQkoUzNDNjRYWF9HUEJfQkFTRSArIDB4MDgpCisjZGVmaW5lIFMzQzY0WFhfR1BCQ09OU0xQCQkoUzNDNjRYWF9HUEJfQkFTRSArIDB4MGMpCisjZGVmaW5lIFMzQzY0WFhfR1BCUFVEU0xQCQkoUzNDNjRYWF9HUEJfQkFTRSArIDB4MTApCisKKyNkZWZpbmUgUzNDNjRYWF9HUEJfQ09OTUFTSyhfX2dwaW8pCSgweGYgPDwgKChfX2dwaW8pICogNCkpCisjZGVmaW5lIFMzQzY0WFhfR1BCX0lOUFVUKF9fZ3BpbykJKDB4MCA8PCAoKF9fZ3BpbykgKiA0KSkKKyNkZWZpbmUgUzNDNjRYWF9HUEJfT1VUUFVUKF9fZ3BpbykJKDB4MSA8PCAoKF9fZ3BpbykgKiA0KSkKKworI2RlZmluZSBTM0M2NFhYX0dQQjBfVUFSVF9SWEQyCQkoMHgwMiA8PCAwKQorI2RlZmluZSBTM0M2NFhYX0dQQjBfRVhURE1BX1JFUQkJKDB4MDMgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEIwX0lyREFfUlhECQkoMHgwNCA8PCAwKQorI2RlZmluZSBTM0M2NFhYX0dQQjBfQUREUl9DRjAJCSgweDA1IDw8IDApCisjZGVmaW5lIFMzQzY0WFhfR1BCMF9FSU5UX0cxXzgJCSgweDA3IDw8IDApCisKKyNkZWZpbmUgUzNDNjRYWF9HUEIxX1VBUlRfVFhEMgkJKDB4MDIgPDwgNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEIxX0VYVERNQV9BQ0sJCSgweDAzIDw8IDQpCisjZGVmaW5lIFMzQzY0WFhfR1BCMV9JckRBX1RYRAkJKDB4MDQgPDwgNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEIxX0FERFJfQ0YxCQkoMHgwNSA8PCA0KQorI2RlZmluZSBTM0M2NFhYX0dQQjFfRUlOVF9HMV85CQkoMHgwNyA8PCA0KQorCisjZGVmaW5lIFMzQzY0WFhfR1BCMl9VQVJUX1JYRDMJCSgweDAyIDw8IDgpCisjZGVmaW5lIFMzQzY0WFhfR1BCMl9JckRBX1JYRAkJKDB4MDMgPDwgOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEIyX0VYVERNQV9SRVEJCSgweDA0IDw8IDgpCisjZGVmaW5lIFMzQzY0WFhfR1BCMl9BRERSX0NGMgkJKDB4MDUgPDwgOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEIyX0kyQ19TQ0wxCQkoMHgwNiA8PCA4KQorI2RlZmluZSBTM0M2NFhYX0dQQjJfRUlOVF9HMV8xMAkJKDB4MDcgPDwgOCkKKworI2RlZmluZSBTM0M2NFhYX0dQQjNfVUFSVF9UWEQzCQkoMHgwMiA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9HUEIzX0lyREFfVFhECQkoMHgwMyA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9HUEIzX0VYVERNQV9BQ0sJCSgweDA0IDw8IDEyKQorI2RlZmluZSBTM0M2NFhYX0dQQjNfSTJDX1NEQTEJCSgweDA2IDw8IDEyKQorI2RlZmluZSBTM0M2NFhYX0dQQjNfRUlOVF9HMV8xMQkJKDB4MDcgPDwgMTIpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEI0X0lyREFfU0RCVwkJKDB4MDIgPDwgMTYpCisjZGVmaW5lIFMzQzY0WFhfR1BCNF9DQU1fRklFTEQJCSgweDAzIDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX0dQQjRfQ0ZfREFUQV9ESVIJKDB4MDQgPDwgMTYpCisjZGVmaW5lIFMzQzY0WFhfR1BCNF9FSU5UX0cxXzEyCQkoMHgwNyA8PCAxNikKKworI2RlZmluZSBTM0M2NFhYX0dQQjVfSTJDX1NDTDAJCSgweDAyIDw8IDIwKQorI2RlZmluZSBTM0M2NFhYX0dQQjVfRUlOVF9HMV8xMwkJKDB4MDcgPDwgMjApCisKKyNkZWZpbmUgUzNDNjRYWF9HUEI2X0kyQ19TREEwCQkoMHgwMiA8PCAyNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEI2X0VJTlRfRzFfMTQJCSgweDA3IDw8IDI0KQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1jLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIxODlhYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZ3Bpby1iYW5rLWMuaApAQCAtMCwwICsxLDUzIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1jLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogR1BJTyBCYW5rIEMgcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2RlZmluZSBTM0M2NFhYX0dQQ0NPTgkJCShTM0M2NFhYX0dQQ19CQVNFICsgMHgwMCkKKyNkZWZpbmUgUzNDNjRYWF9HUENEQVQJCQkoUzNDNjRYWF9HUENfQkFTRSArIDB4MDQpCisjZGVmaW5lIFMzQzY0WFhfR1BDUFVECQkJKFMzQzY0WFhfR1BDX0JBU0UgKyAweDA4KQorI2RlZmluZSBTM0M2NFhYX0dQQ0NPTlNMUAkJKFMzQzY0WFhfR1BDX0JBU0UgKyAweDBjKQorI2RlZmluZSBTM0M2NFhYX0dQQ1BVRFNMUAkJKFMzQzY0WFhfR1BDX0JBU0UgKyAweDEwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BDX0NPTk1BU0soX19ncGlvKQkoMHhmIDw8ICgoX19ncGlvKSAqIDQpKQorI2RlZmluZSBTM0M2NFhYX0dQQ19JTlBVVChfX2dwaW8pCSgweDAgPDwgKChfX2dwaW8pICogNCkpCisjZGVmaW5lIFMzQzY0WFhfR1BDX09VVFBVVChfX2dwaW8pCSgweDEgPDwgKChfX2dwaW8pICogNCkpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEMwX1NQSV9NSVNPMAkJKDB4MDIgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEMwX0VJTlRfRzJfMAkJKDB4MDcgPDwgMCkKKworI2RlZmluZSBTM0M2NFhYX0dQQzFfU1BJX0NMS08JCSgweDAyIDw8IDQpCisjZGVmaW5lIFMzQzY0WFhfR1BDMV9FSU5UX0cyXzEJCSgweDA3IDw8IDQpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEMyX1NQSV9NT1NJTwkJKDB4MDIgPDwgOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEMyX0VJTlRfRzJfMgkJKDB4MDcgPDwgOCkKKworI2RlZmluZSBTM0M2NFhYX0dQQzNfU1BJX25DU08JCSgweDAyIDw8IDEyKQorI2RlZmluZSBTM0M2NFhYX0dQQzNfRUlOVF9HMl8zCQkoMHgwNyA8PCAxMikKKworI2RlZmluZSBTM0M2NFhYX0dQQzRfU1BJX01JU08xCQkoMHgwMiA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9HUEM0X01NQzJfQ01ECQkoMHgwMyA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9HUEM0X0kyU19WNDBfRE8wCSgweDA1IDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX0dQQzRfRUlOVF9HMl80CQkoMHgwNyA8PCAxNikKKworI2RlZmluZSBTM0M2NFhYX0dQQzVfU1BJX0NMSzEJCSgweDAyIDw8IDIwKQorI2RlZmluZSBTM0M2NFhYX0dQQzVfTU1DMl9DTEsJCSgweDAzIDw8IDIwKQorI2RlZmluZSBTM0M2NFhYX0dQQzVfSTJTX1Y0MF9ETzEJKDB4MDUgPDwgMjApCisjZGVmaW5lIFMzQzY0WFhfR1BDNV9FSU5UX0cyXzUJCSgweDA3IDw8IDIwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BDNl9TUElfTU9TSTEJCSgweDAyIDw8IDI0KQorI2RlZmluZSBTM0M2NFhYX0dQQzZfRUlOVF9HMl82CQkoMHgwNyA8PCAyNCkKKworI2RlZmluZSBTM0M2NFhYX0dQQzdfU1BJX25DUzEJCSgweDAyIDw8IDI4KQorI2RlZmluZSBTM0M2NFhYX0dQQzdfSTJTX1Y0MF9ETzIJKDB4MDUgPDwgMjgpCisjZGVmaW5lIFMzQzY0WFhfR1BDN19FSU5UX0cyXzcJCSgweDA3IDw8IDI4KQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1kLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEwMWNlZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZ3Bpby1iYW5rLWQuaApAQCAtMCwwICsxLDQ5IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1kLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogR1BJTyBCYW5rIEQgcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2RlZmluZSBTM0M2NFhYX0dQRENPTgkJCShTM0M2NFhYX0dQRF9CQVNFICsgMHgwMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEREQVQJCQkoUzNDNjRYWF9HUERfQkFTRSArIDB4MDQpCisjZGVmaW5lIFMzQzY0WFhfR1BEUFVECQkJKFMzQzY0WFhfR1BEX0JBU0UgKyAweDA4KQorI2RlZmluZSBTM0M2NFhYX0dQRENPTlNMUAkJKFMzQzY0WFhfR1BEX0JBU0UgKyAweDBjKQorI2RlZmluZSBTM0M2NFhYX0dQRFBVRFNMUAkJKFMzQzY0WFhfR1BEX0JBU0UgKyAweDEwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BEX0NPTk1BU0soX19ncGlvKQkoMHhmIDw8ICgoX19ncGlvKSAqIDQpKQorI2RlZmluZSBTM0M2NFhYX0dQRF9JTlBVVChfX2dwaW8pCSgweDAgPDwgKChfX2dwaW8pICogNCkpCisjZGVmaW5lIFMzQzY0WFhfR1BEX09VVFBVVChfX2dwaW8pCSgweDEgPDwgKChfX2dwaW8pICogNCkpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEQwX1BDTTBfU0NMSwkJKDB4MDIgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEQwX0kyUzBfQ0xLCQkoMHgwMyA8PCAwKQorI2RlZmluZSBTM0M2NFhYX0dQRDBfQUM5N19CSVRDTEsJKDB4MDQgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEQwX0VJTlRfRzNfMAkJKDB4MDcgPDwgMCkKKworI2RlZmluZSBTM0M2NFhYX0dQRDFfUENNMF9FWFRDTEsJKDB4MDIgPDwgNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEQxX0kyUzBfQ0RDTEsJCSgweDAzIDw8IDQpCisjZGVmaW5lIFMzQzY0WFhfR1BEMV9BQzk3X25SRVNFVAkoMHgwNCA8PCA0KQorI2RlZmluZSBTM0M2NFhYX0dQRDFfRUlOVF9HM18xCQkoMHgwNyA8PCA0KQorCisjZGVmaW5lIFMzQzY0WFhfR1BEMl9QQ00wX0ZTWU5DCQkoMHgwMiA8PCA4KQorI2RlZmluZSBTM0M2NFhYX0dQRDJfSTJTMF9MUkNMSwkJKDB4MDMgPDwgOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEQyX0FDOTdfU1lOQwkJKDB4MDQgPDwgOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEQyX0VJTlRfRzNfMgkJKDB4MDcgPDwgOCkKKworI2RlZmluZSBTM0M2NFhYX0dQRDNfUENNMF9TSU4JCSgweDAyIDw8IDEyKQorI2RlZmluZSBTM0M2NFhYX0dQRDNfSTJTMF9ESQkJKDB4MDMgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfR1BEM19BQzk3X1NESQkJKDB4MDQgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfR1BEM19FSU5UX0czXzMJCSgweDA3IDw8IDEyKQorCisjZGVmaW5lIFMzQzY0WFhfR1BENF9QQ00wX1NPVVQJCSgweDAyIDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX0dQRDRfSTJTMF9EMAkJKDB4MDMgPDwgMTYpCisjZGVmaW5lIFMzQzY0WFhfR1BENF9BQzk3X1NETwkJKDB4MDQgPDwgMTYpCisjZGVmaW5lIFMzQzY0WFhfR1BENF9FSU5UX0czXzQJCSgweDA3IDw8IDE2KQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1lLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1N2FkYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZ3Bpby1iYW5rLWUuaApAQCAtMCwwICsxLDQ0IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1lLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogR1BJTyBCYW5rIEUgcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2RlZmluZSBTM0M2NFhYX0dQRUNPTgkJCShTM0M2NFhYX0dQRV9CQVNFICsgMHgwMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEVEQVQJCQkoUzNDNjRYWF9HUEVfQkFTRSArIDB4MDQpCisjZGVmaW5lIFMzQzY0WFhfR1BFUFVECQkJKFMzQzY0WFhfR1BFX0JBU0UgKyAweDA4KQorI2RlZmluZSBTM0M2NFhYX0dQRUNPTlNMUAkJKFMzQzY0WFhfR1BFX0JBU0UgKyAweDBjKQorI2RlZmluZSBTM0M2NFhYX0dQRVBVRFNMUAkJKFMzQzY0WFhfR1BFX0JBU0UgKyAweDEwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BFX0NPTk1BU0soX19ncGlvKQkoMHhmIDw8ICgoX19ncGlvKSAqIDQpKQorI2RlZmluZSBTM0M2NFhYX0dQRV9JTlBVVChfX2dwaW8pCSgweDAgPDwgKChfX2dwaW8pICogNCkpCisjZGVmaW5lIFMzQzY0WFhfR1BFX09VVFBVVChfX2dwaW8pCSgweDEgPDwgKChfX2dwaW8pICogNCkpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEUwX1BDTTFfU0NMSwkJKDB4MDIgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEUwX0kyUzFfQ0xLCQkoMHgwMyA8PCAwKQorI2RlZmluZSBTM0M2NFhYX0dQRTBfQUM5N19CSVRDTEsJKDB4MDQgPDwgMCkKKworI2RlZmluZSBTM0M2NFhYX0dQRTFfUENNMV9FWFRDTEsJKDB4MDIgPDwgNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEUxX0kyUzFfQ0RDTEsJCSgweDAzIDw8IDQpCisjZGVmaW5lIFMzQzY0WFhfR1BFMV9BQzk3X25SRVNFVAkoMHgwNCA8PCA0KQorCisjZGVmaW5lIFMzQzY0WFhfR1BFMl9QQ00xX0ZTWU5DCQkoMHgwMiA8PCA4KQorI2RlZmluZSBTM0M2NFhYX0dQRTJfSTJTMV9MUkNMSwkJKDB4MDMgPDwgOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEUyX0FDOTdfU1lOQwkJKDB4MDQgPDwgOCkKKworI2RlZmluZSBTM0M2NFhYX0dQRTNfUENNMV9TSU4JCSgweDAyIDw8IDEyKQorI2RlZmluZSBTM0M2NFhYX0dQRTNfSTJTMV9ESQkJKDB4MDMgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfR1BFM19BQzk3X1NESQkJKDB4MDQgPDwgMTIpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEU0X1BDTTFfU09VVAkJKDB4MDIgPDwgMTYpCisjZGVmaW5lIFMzQzY0WFhfR1BFNF9JMlMxX0QwCQkoMHgwMyA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9HUEU0X0FDOTdfU0RPCQkoMHgwNCA8PCAxNikKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9ncGlvLWJhbmstZi5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9ncGlvLWJhbmstZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYWI4ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1mLmgKQEAgLTAsMCArMSw3MSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9ncGlvLWJhbmstZi5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIAlodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIEdQSU8gQmFuayBGIHJlZ2lzdGVyIGFuZCBjb25maWd1cmF0aW9uIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNkZWZpbmUgUzNDNjRYWF9HUEZDT04JCQkoUzNDNjRYWF9HUEZfQkFTRSArIDB4MDApCisjZGVmaW5lIFMzQzY0WFhfR1BGREFUCQkJKFMzQzY0WFhfR1BGX0JBU0UgKyAweDA0KQorI2RlZmluZSBTM0M2NFhYX0dQRlBVRAkJCShTM0M2NFhYX0dQRl9CQVNFICsgMHgwOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEZDT05TTFAJCShTM0M2NFhYX0dQRl9CQVNFICsgMHgwYykKKyNkZWZpbmUgUzNDNjRYWF9HUEZQVURTTFAJCShTM0M2NFhYX0dQRl9CQVNFICsgMHgxMCkKKworI2RlZmluZSBTM0M2NFhYX0dQRl9DT05NQVNLKF9fZ3BpbykJKDB4MyA8PCAoKF9fZ3BpbykgKiAyKSkKKyNkZWZpbmUgUzNDNjRYWF9HUEZfSU5QVVQoX19ncGlvKQkoMHgwIDw8ICgoX19ncGlvKSAqIDIpKQorI2RlZmluZSBTM0M2NFhYX0dQRl9PVVRQVVQoX19ncGlvKQkoMHgxIDw8ICgoX19ncGlvKSAqIDIpKQorCisjZGVmaW5lIFMzQzY0WFhfR1BGMF9DQU1JRl9DTEsJCSgweDAyIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfR1BGMF9FSU5UX0c0XzAJCSgweDAzIDw8IDApCisKKyNkZWZpbmUgUzNDNjRYWF9HUEYxX0NBTUlGX0hSRUYJCSgweDAyIDw8IDIpCisjZGVmaW5lIFMzQzY0WFhfR1BGMV9FSU5UX0c0XzEJCSgweDAzIDw8IDIpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEYyX0NBTUlGX1BDTEsJCSgweDAyIDw8IDQpCisjZGVmaW5lIFMzQzY0WFhfR1BGMl9FSU5UX0c0XzIJCSgweDAzIDw8IDQpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEYzX0NBTUlGX25SU1QJCSgweDAyIDw8IDYpCisjZGVmaW5lIFMzQzY0WFhfR1BGM19FSU5UX0c0XzMJCSgweDAzIDw8IDYpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEY0X0NBTUlGX1ZTWU5DCSgweDAyIDw8IDgpCisjZGVmaW5lIFMzQzY0WFhfR1BGNF9FSU5UX0c0XzQJCSgweDAzIDw8IDgpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEY1X0NBTUlGX1lEQVRBMAkoMHgwMiA8PCAxMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEY1X0VJTlRfRzRfNQkJKDB4MDMgPDwgMTApCisKKyNkZWZpbmUgUzNDNjRYWF9HUEY2X0NBTUlGX1lEQVRBMQkoMHgwMiA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9HUEY2X0VJTlRfRzRfNgkJKDB4MDMgPDwgMTIpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEY3X0NBTUlGX1lEQVRBMgkoMHgwMiA8PCAxNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEY3X0VJTlRfRzRfNwkJKDB4MDMgPDwgMTQpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEY4X0NBTUlGX1lEQVRBMwkoMHgwMiA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9HUEY4X0VJTlRfRzRfOAkJKDB4MDMgPDwgMTYpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEY5X0NBTUlGX1lEQVRBNAkoMHgwMiA8PCAxOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEY5X0VJTlRfRzRfOQkJKDB4MDMgPDwgMTgpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEYxMF9DQU1JRl9ZREFUQTUJKDB4MDIgPDwgMjApCisjZGVmaW5lIFMzQzY0WFhfR1BGMTBfRUlOVF9HNF8xMAkoMHgwMyA8PCAyMCkKKworI2RlZmluZSBTM0M2NFhYX0dQRjExX0NBTUlGX1lEQVRBNgkoMHgwMiA8PCAyMikKKyNkZWZpbmUgUzNDNjRYWF9HUEYxMV9FSU5UX0c0XzExCSgweDAzIDw8IDIyKQorCisjZGVmaW5lIFMzQzY0WFhfR1BGMTJfQ0FNSUZfWURBVEE3CSgweDAyIDw8IDI0KQorI2RlZmluZSBTM0M2NFhYX0dQRjEyX0VJTlRfRzRfMTIJKDB4MDMgPDwgMjQpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEYxM19QV01fRUNMSwkJKDB4MDIgPDwgMjYpCisjZGVmaW5lIFMzQzY0WFhfR1BGMTNfRUlOVF9HNF8xMwkoMHgwMyA8PCAyNikKKworI2RlZmluZSBTM0M2NFhYX0dQRjE0X1BXTV9UT1VUMAkJKDB4MDIgPDwgMjgpCisjZGVmaW5lIFMzQzY0WFhfR1BGMTRfQ0xLT1VUMAkJKDB4MDMgPDwgMjgpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEYxNV9QV01fVE9VVDEJCSgweDAyIDw8IDMwKQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1nLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk0OTU0YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZ3Bpby1iYW5rLWcuaApAQCAtMCwwICsxLDQyIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1nLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogR1BJTyBCYW5rIEcgcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2RlZmluZSBTM0M2NFhYX0dQR0NPTgkJCShTM0M2NFhYX0dQR19CQVNFICsgMHgwMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEdEQVQJCQkoUzNDNjRYWF9HUEdfQkFTRSArIDB4MDQpCisjZGVmaW5lIFMzQzY0WFhfR1BHUFVECQkJKFMzQzY0WFhfR1BHX0JBU0UgKyAweDA4KQorI2RlZmluZSBTM0M2NFhYX0dQR0NPTlNMUAkJKFMzQzY0WFhfR1BHX0JBU0UgKyAweDBjKQorI2RlZmluZSBTM0M2NFhYX0dQR1BVRFNMUAkJKFMzQzY0WFhfR1BHX0JBU0UgKyAweDEwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BHX0NPTk1BU0soX19ncGlvKQkoMHhmIDw8ICgoX19ncGlvKSAqIDQpKQorI2RlZmluZSBTM0M2NFhYX0dQR19JTlBVVChfX2dwaW8pCSgweDAgPDwgKChfX2dwaW8pICogNCkpCisjZGVmaW5lIFMzQzY0WFhfR1BHX09VVFBVVChfX2dwaW8pCSgweDEgPDwgKChfX2dwaW8pICogNCkpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEcwX01NQzBfQ0xLCQkoMHgwMiA8PCAwKQorI2RlZmluZSBTM0M2NFhYX0dQRzBfRUlOVF9HNV8wCQkoMHgwNyA8PCAwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BHMV9NTUMwX0NNRAkJKDB4MDIgPDwgNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEcxX0VJTlRfRzVfMQkJKDB4MDcgPDwgNCkKKworI2RlZmluZSBTM0M2NFhYX0dQRzJfTU1DMF9EQVRBMAkJKDB4MDIgPDwgOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEcyX0VJTlRfRzVfMgkJKDB4MDcgPDwgOCkKKworI2RlZmluZSBTM0M2NFhYX0dQRzNfTU1DMF9EQVRBMQkJKDB4MDIgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfR1BHM19FSU5UX0c1XzMJCSgweDA3IDw8IDEyKQorCisjZGVmaW5lIFMzQzY0WFhfR1BHNF9NTUMwX0RBVEEyCQkoMHgwMiA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9HUEc0X0VJTlRfRzVfNAkJKDB4MDcgPDwgMTYpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEc1X01NQzBfREFUQTMJCSgweDAyIDw8IDIwKQorI2RlZmluZSBTM0M2NFhYX0dQRzVfRUlOVF9HNV81CQkoMHgwNyA8PCAyMCkKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9ncGlvLWJhbmstaC5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9ncGlvLWJhbmstaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNzVhYWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1oLmgKQEAgLTAsMCArMSw3NCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9ncGlvLWJhbmstaC5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIAlodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIEdQSU8gQmFuayBIIHJlZ2lzdGVyIGFuZCBjb25maWd1cmF0aW9uIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNkZWZpbmUgUzNDNjRYWF9HUEhDT04wCQkJKFMzQzY0WFhfR1BIX0JBU0UgKyAweDAwKQorI2RlZmluZSBTM0M2NFhYX0dQSENPTjEJCQkoUzNDNjRYWF9HUEhfQkFTRSArIDB4MDQpCisjZGVmaW5lIFMzQzY0WFhfR1BIREFUCQkJKFMzQzY0WFhfR1BIX0JBU0UgKyAweDA4KQorI2RlZmluZSBTM0M2NFhYX0dQSFBVRAkJCShTM0M2NFhYX0dQSF9CQVNFICsgMHgwYykKKyNkZWZpbmUgUzNDNjRYWF9HUEhDT05TTFAJCShTM0M2NFhYX0dQSF9CQVNFICsgMHgxMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEhQVURTTFAJCShTM0M2NFhYX0dQSF9CQVNFICsgMHgxNCkKKworI2RlZmluZSBTM0M2NFhYX0dQSF9DT05NQVNLKF9fZ3BpbykJKDB4ZiA8PCAoKF9fZ3BpbykgKiA0KSkKKyNkZWZpbmUgUzNDNjRYWF9HUEhfSU5QVVQoX19ncGlvKQkoMHgwIDw8ICgoX19ncGlvKSAqIDQpKQorI2RlZmluZSBTM0M2NFhYX0dQSF9PVVRQVVQoX19ncGlvKQkoMHgxIDw8ICgoX19ncGlvKSAqIDQpKQorCisjZGVmaW5lIFMzQzY0WFhfR1BIMF9NTUMxX0NMSwkJKDB4MDIgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEgwX0tQX0NPTDAJCSgweDA0IDw8IDApCisjZGVmaW5lIFMzQzY0WFhfR1BIMF9FSU5UX0c2XzAJCSgweDA3IDw8IDApCisKKyNkZWZpbmUgUzNDNjRYWF9HUEgxX01NQzFfQ01ECQkoMHgwMiA8PCA0KQorI2RlZmluZSBTM0M2NFhYX0dQSDFfS1BfQ09MMQkJKDB4MDQgPDwgNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEgxX0VJTlRfRzZfMQkJKDB4MDcgPDwgNCkKKworI2RlZmluZSBTM0M2NFhYX0dQSDJfTU1DMV9EQVRBMAkJKDB4MDIgPDwgOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEgyX0tQX0NPTDIJCSgweDA0IDw8IDgpCisjZGVmaW5lIFMzQzY0WFhfR1BIMl9FSU5UX0c2XzIJCSgweDA3IDw8IDgpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEgzX01NQzFfREFUQTEJCSgweDAyIDw8IDEyKQorI2RlZmluZSBTM0M2NFhYX0dQSDNfS1BfQ09MMwkJKDB4MDQgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfR1BIM19FSU5UX0c2XzMJCSgweDA3IDw8IDEyKQorCisjZGVmaW5lIFMzQzY0WFhfR1BINF9NTUMxX0RBVEEyCQkoMHgwMiA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9HUEg0X0tQX0NPTDQJCSgweDA0IDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX0dQSDRfRUlOVF9HNl80CQkoMHgwNyA8PCAxNikKKworI2RlZmluZSBTM0M2NFhYX0dQSDVfTU1DMV9EQVRBMwkJKDB4MDIgPDwgMjApCisjZGVmaW5lIFMzQzY0WFhfR1BINV9LUF9DT0w1CQkoMHgwNCA8PCAyMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEg1X0VJTlRfRzZfNQkJKDB4MDcgPDwgMjApCisKKyNkZWZpbmUgUzNDNjRYWF9HUEg2X01NQzFfREFUQTQJCSgweDAyIDw8IDI0KQorI2RlZmluZSBTM0M2NFhYX0dQSDZfTU1DMl9EQVRBMAkJKDB4MDMgPDwgMjQpCisjZGVmaW5lIFMzQzY0WFhfR1BINl9LUF9DT0w2CQkoMHgwNCA8PCAyNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEg2X0kyU19WNDBfQkNMSwkoMHgwNSA8PCAyNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEg2X0FERFJfQ0YwCQkoMHgwNiA8PCAyNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEg2X0VJTlRfRzZfNgkJKDB4MDcgPDwgMjQpCisKKyNkZWZpbmUgUzNDNjRYWF9HUEg3X01NQzFfREFUQTUJCSgweDAyIDw8IDI4KQorI2RlZmluZSBTM0M2NFhYX0dQSDdfTU1DMl9EQVRBMQkJKDB4MDMgPDwgMjgpCisjZGVmaW5lIFMzQzY0WFhfR1BIN19LUF9DT0w3CQkoMHgwNCA8PCAyOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEg3X0kyU19WNDBfQ0RDTEsJKDB4MDUgPDwgMjgpCisjZGVmaW5lIFMzQzY0WFhfR1BIN19BRERSX0NGMQkJKDB4MDYgPDwgMjgpCisjZGVmaW5lIFMzQzY0WFhfR1BIN19FSU5UX0c2XzcJCSgweDA3IDw8IDI4KQorCisjZGVmaW5lIFMzQzY0WFhfR1BIOF9NTUMxX0RBVEE2CQkoMHgwMiA8PCAgMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEg4X01NQzJfREFUQTIJCSgweDAzIDw8ICAwKQorI2RlZmluZSBTM0M2NFhYX0dQSDhfSTJTX1Y0MF9MUkNMSwkoMHgwNSA8PCAgMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEg4X0FERFJfQ0YyCQkoMHgwNiA8PCAgMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEg4X0VJTlRfRzZfOAkJKDB4MDcgPDwgIDApCisKKyNkZWZpbmUgUzNDNjRYWF9HUEg5X09VVFBVVAkJKDB4MDEgPDwgIDQpCisjZGVmaW5lIFMzQzY0WFhfR1BIOV9NTUMxX0RBVEE3CQkoMHgwMiA8PCAgNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEg5X01NQzJfREFUQTMJCSgweDAzIDw8ICA0KQorI2RlZmluZSBTM0M2NFhYX0dQSDlfSTJTX1Y0MF9ESQkJKDB4MDUgPDwgIDQpCisjZGVmaW5lIFMzQzY0WFhfR1BIOV9FSU5UX0c2XzkJCSgweDA3IDw8ICA0KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9ncGlvLWJhbmstaS5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9ncGlvLWJhbmstaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZWFhNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1pLmgKQEAgLTAsMCArMSw0MCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9ncGlvLWJhbmstaS5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIAlodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIEdQSU8gQmFuayBJIHJlZ2lzdGVyIGFuZCBjb25maWd1cmF0aW9uIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNkZWZpbmUgUzNDNjRYWF9HUElDT04JCQkoUzNDNjRYWF9HUElfQkFTRSArIDB4MDApCisjZGVmaW5lIFMzQzY0WFhfR1BJREFUCQkJKFMzQzY0WFhfR1BJX0JBU0UgKyAweDA0KQorI2RlZmluZSBTM0M2NFhYX0dQSVBVRAkJCShTM0M2NFhYX0dQSV9CQVNFICsgMHgwOCkKKyNkZWZpbmUgUzNDNjRYWF9HUElDT05TTFAJCShTM0M2NFhYX0dQSV9CQVNFICsgMHgwYykKKyNkZWZpbmUgUzNDNjRYWF9HUElQVURTTFAJCShTM0M2NFhYX0dQSV9CQVNFICsgMHgxMCkKKworI2RlZmluZSBTM0M2NFhYX0dQSV9DT05NQVNLKF9fZ3BpbykJKDB4MyA8PCAoKF9fZ3BpbykgKiAyKSkKKyNkZWZpbmUgUzNDNjRYWF9HUElfSU5QVVQoX19ncGlvKQkoMHgwIDw8ICgoX19ncGlvKSAqIDIpKQorI2RlZmluZSBTM0M2NFhYX0dQSV9PVVRQVVQoX19ncGlvKQkoMHgxIDw8ICgoX19ncGlvKSAqIDIpKQorCisjZGVmaW5lIFMzQzY0WFhfR1BJMF9WRDAJCSgweDAyIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfR1BJMV9WRDEJCSgweDAyIDw8IDIpCisjZGVmaW5lIFMzQzY0WFhfR1BJMl9WRDIJCSgweDAyIDw8IDQpCisjZGVmaW5lIFMzQzY0WFhfR1BJM19WRDMJCSgweDAyIDw8IDYpCisjZGVmaW5lIFMzQzY0WFhfR1BJNF9WRDQJCSgweDAyIDw8IDgpCisjZGVmaW5lIFMzQzY0WFhfR1BJNV9WRDUJCSgweDAyIDw8IDEwKQorI2RlZmluZSBTM0M2NFhYX0dQSTZfVkQ2CQkoMHgwMiA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9HUEk3X1ZENwkJKDB4MDIgPDwgMTQpCisjZGVmaW5lIFMzQzY0WFhfR1BJOF9WRDgJCSgweDAyIDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX0dQSTlfVkQ5CQkoMHgwMiA8PCAxOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEkxMF9WRDEwCQkoMHgwMiA8PCAyMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEkxMV9WRDExCQkoMHgwMiA8PCAyMikKKyNkZWZpbmUgUzNDNjRYWF9HUEkxMl9WRDEyCQkoMHgwMiA8PCAyNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEkxM19WRDEzCQkoMHgwMiA8PCAyNikKKyNkZWZpbmUgUzNDNjRYWF9HUEkxNF9WRDE0CQkoMHgwMiA8PCAyOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEkxNV9WRDE1CQkoMHgwMiA8PCAzMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZ3Bpby1iYW5rLWouaCBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZ3Bpby1iYW5rLWouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjI1Y2QwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9ncGlvLWJhbmstai5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZ3Bpby1iYW5rLWouaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIAlCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBHUElPIEJhbmsgSiByZWdpc3RlciBhbmQgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjZGVmaW5lIFMzQzY0WFhfR1BKQ09OCQkJKFMzQzY0WFhfR1BKX0JBU0UgKyAweDAwKQorI2RlZmluZSBTM0M2NFhYX0dQSkRBVAkJCShTM0M2NFhYX0dQSl9CQVNFICsgMHgwNCkKKyNkZWZpbmUgUzNDNjRYWF9HUEpQVUQJCQkoUzNDNjRYWF9HUEpfQkFTRSArIDB4MDgpCisjZGVmaW5lIFMzQzY0WFhfR1BKQ09OU0xQCQkoUzNDNjRYWF9HUEpfQkFTRSArIDB4MGMpCisjZGVmaW5lIFMzQzY0WFhfR1BKUFVEU0xQCQkoUzNDNjRYWF9HUEpfQkFTRSArIDB4MTApCisKKyNkZWZpbmUgUzNDNjRYWF9HUEpfQ09OTUFTSyhfX2dwaW8pCSgweDMgPDwgKChfX2dwaW8pICogMikpCisjZGVmaW5lIFMzQzY0WFhfR1BKX0lOUFVUKF9fZ3BpbykJKDB4MCA8PCAoKF9fZ3BpbykgKiAyKSkKKyNkZWZpbmUgUzNDNjRYWF9HUEpfT1VUUFVUKF9fZ3BpbykJKDB4MSA8PCAoKF9fZ3BpbykgKiAyKSkKKworI2RlZmluZSBTM0M2NFhYX0dQSjBfVkQxNgkJKDB4MDIgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEoxX1ZEMTcJCSgweDAyIDw8IDIpCisjZGVmaW5lIFMzQzY0WFhfR1BKMl9WRDE4CQkoMHgwMiA8PCA0KQorI2RlZmluZSBTM0M2NFhYX0dQSjNfVkQxOQkJKDB4MDIgPDwgNikKKyNkZWZpbmUgUzNDNjRYWF9HUEo0X1ZEMjAJCSgweDAyIDw8IDgpCisjZGVmaW5lIFMzQzY0WFhfR1BKNV9WRDIxCQkoMHgwMiA8PCAxMCkKKyNkZWZpbmUgUzNDNjRYWF9HUEo2X1ZEMjIJCSgweDAyIDw8IDEyKQorI2RlZmluZSBTM0M2NFhYX0dQSjdfVkQyMwkJKDB4MDIgPDwgMTQpCisjZGVmaW5lIFMzQzY0WFhfR1BKOF9MQ0RfSFNZTkMJCSgweDAyIDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX0dQSjlfTENEX1ZTWU5DCQkoMHgwMiA8PCAxOCkKKyNkZWZpbmUgUzNDNjRYWF9HUEoxMF9MQ0RfVkRFTgkJKDB4MDIgPDwgMjApCisjZGVmaW5lIFMzQzY0WFhfR1BKMTFfTENEX1ZDTEsJCSgweDAyIDw8IDIyKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9ncGlvLWJhbmstbi5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9ncGlvLWJhbmstbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwYWVkYTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1uLmgKQEAgLTAsMCArMSw1NCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9ncGlvLWJhbmstbi5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIAlodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIEdQSU8gQmFuayBOIHJlZ2lzdGVyIGFuZCBjb25maWd1cmF0aW9uIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNkZWZpbmUgUzNDNjRYWF9HUE5DT04JCQkoUzNDNjRYWF9HUE5fQkFTRSArIDB4MDApCisjZGVmaW5lIFMzQzY0WFhfR1BOREFUCQkJKFMzQzY0WFhfR1BOX0JBU0UgKyAweDA0KQorI2RlZmluZSBTM0M2NFhYX0dQTlBVRAkJCShTM0M2NFhYX0dQTl9CQVNFICsgMHgwOCkKKworI2RlZmluZSBTM0M2NFhYX0dQTl9DT05NQVNLKF9fZ3BpbykJKDB4MyA8PCAoKF9fZ3BpbykgKiAyKSkKKyNkZWZpbmUgUzNDNjRYWF9HUE5fSU5QVVQoX19ncGlvKQkoMHgwIDw8ICgoX19ncGlvKSAqIDIpKQorI2RlZmluZSBTM0M2NFhYX0dQTl9PVVRQVVQoX19ncGlvKQkoMHgxIDw8ICgoX19ncGlvKSAqIDIpKQorCisjZGVmaW5lIFMzQzY0WFhfR1BOMF9FSU5UMAkJKDB4MDIgPDwgMCkKKyNkZWZpbmUgUzNDNjRYWF9HUE4wX0tQX1JPVzAJCSgweDAzIDw8IDApCisKKyNkZWZpbmUgUzNDNjRYWF9HUE4xX0VJTlQxCQkoMHgwMiA8PCAyKQorI2RlZmluZSBTM0M2NFhYX0dQTjFfS1BfUk9XMQkJKDB4MDMgPDwgMikKKworI2RlZmluZSBTM0M2NFhYX0dQTjJfRUlOVDIJCSgweDAyIDw8IDQpCisjZGVmaW5lIFMzQzY0WFhfR1BOMl9LUF9ST1cyCQkoMHgwMyA8PCA0KQorCisjZGVmaW5lIFMzQzY0WFhfR1BOM19FSU5UMwkJKDB4MDIgPDwgNikKKyNkZWZpbmUgUzNDNjRYWF9HUE4zX0tQX1JPVzMJCSgweDAzIDw8IDYpCisKKyNkZWZpbmUgUzNDNjRYWF9HUE40X0VJTlQ0CQkoMHgwMiA8PCA4KQorI2RlZmluZSBTM0M2NFhYX0dQTjRfS1BfUk9XNAkJKDB4MDMgPDwgOCkKKworI2RlZmluZSBTM0M2NFhYX0dQTjVfRUlOVDUJCSgweDAyIDw8IDEwKQorI2RlZmluZSBTM0M2NFhYX0dQTjVfS1BfUk9XNQkJKDB4MDMgPDwgMTApCisKKyNkZWZpbmUgUzNDNjRYWF9HUE42X0VJTlQ2CQkoMHgwMiA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9HUE42X0tQX1JPVzYJCSgweDAzIDw8IDEyKQorCisjZGVmaW5lIFMzQzY0WFhfR1BON19FSU5UNwkJKDB4MDIgPDwgMTQpCisjZGVmaW5lIFMzQzY0WFhfR1BON19LUF9ST1c3CQkoMHgwMyA8PCAxNCkKKworI2RlZmluZSBTM0M2NFhYX0dQTjhfRUlOVDgJCSgweDAyIDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX0dQTjlfRUlOVDkJCSgweDAyIDw8IDE4KQorI2RlZmluZSBTM0M2NFhYX0dQTjEwX0VJTlQxMAkJKDB4MDIgPDwgMjApCisjZGVmaW5lIFMzQzY0WFhfR1BOMTFfRUlOVDExCQkoMHgwMiA8PCAyMikKKyNkZWZpbmUgUzNDNjRYWF9HUE4xMl9FSU5UMTIJCSgweDAyIDw8IDI0KQorI2RlZmluZSBTM0M2NFhYX0dQTjEzX0VJTlQxMwkJKDB4MDIgPDwgMjYpCisjZGVmaW5lIFMzQzY0WFhfR1BOMTRfRUlOVDE0CQkoMHgwMiA8PCAyOCkKKyNkZWZpbmUgUzNDNjRYWF9HUE4xNV9FSU5UMTUJCSgweDAyIDw8IDMwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9ncGlvLWJhbmstby5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9ncGlvLWJhbmstby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxODY4ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1vLmgKQEAgLTAsMCArMSw3MCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9ncGlvLWJhbmstby5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqIAlodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIEdQSU8gQmFuayBPIHJlZ2lzdGVyIGFuZCBjb25maWd1cmF0aW9uIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNkZWZpbmUgUzNDNjRYWF9HUE9DT04JCQkoUzNDNjRYWF9HUE9fQkFTRSArIDB4MDApCisjZGVmaW5lIFMzQzY0WFhfR1BPREFUCQkJKFMzQzY0WFhfR1BPX0JBU0UgKyAweDA0KQorI2RlZmluZSBTM0M2NFhYX0dQT1BVRAkJCShTM0M2NFhYX0dQT19CQVNFICsgMHgwOCkKKyNkZWZpbmUgUzNDNjRYWF9HUE9DT05TTFAJCShTM0M2NFhYX0dQT19CQVNFICsgMHgwYykKKyNkZWZpbmUgUzNDNjRYWF9HUE9QVURTTFAJCShTM0M2NFhYX0dQT19CQVNFICsgMHgxMCkKKworI2RlZmluZSBTM0M2NFhYX0dQT19DT05NQVNLKF9fZ3BpbykJKDB4MyA8PCAoKF9fZ3BpbykgKiAyKSkKKyNkZWZpbmUgUzNDNjRYWF9HUE9fSU5QVVQoX19ncGlvKQkoMHgwIDw8ICgoX19ncGlvKSAqIDIpKQorI2RlZmluZSBTM0M2NFhYX0dQT19PVVRQVVQoX19ncGlvKQkoMHgxIDw8ICgoX19ncGlvKSAqIDIpKQorCisjZGVmaW5lIFMzQzY0WFhfR1BPMF9NRU0wX25DUzIJCSgweDAyIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfR1BPMF9FSU5UX0c3XzAJCSgweDAzIDw8IDApCisKKyNkZWZpbmUgUzNDNjRYWF9HUE8xX01FTTBfbkNTMwkJKDB4MDIgPDwgMikKKyNkZWZpbmUgUzNDNjRYWF9HUE8xX0VJTlRfRzdfMQkJKDB4MDMgPDwgMikKKworI2RlZmluZSBTM0M2NFhYX0dQTzJfTUVNMF9uQ1M0CQkoMHgwMiA8PCA0KQorI2RlZmluZSBTM0M2NFhYX0dQTzJfRUlOVF9HN18yCQkoMHgwMyA8PCA0KQorCisjZGVmaW5lIFMzQzY0WFhfR1BPM19NRU0wX25DUzUJCSgweDAyIDw8IDYpCisjZGVmaW5lIFMzQzY0WFhfR1BPM19FSU5UX0c3XzMJCSgweDAzIDw8IDYpCisKKyNkZWZpbmUgUzNDNjRYWF9HUE80X0VJTlRfRzdfNAkJKDB4MDMgPDwgOCkKKworI2RlZmluZSBTM0M2NFhYX0dQTzVfRUlOVF9HN181CQkoMHgwMyA8PCAxMCkKKworI2RlZmluZSBTM0M2NFhYX0dQTzZfTUVNMF9BRERSNgkJKDB4MDIgPDwgMTIpCisjZGVmaW5lIFMzQzY0WFhfR1BPNl9FSU5UX0c3XzYJCSgweDAzIDw8IDEyKQorCisjZGVmaW5lIFMzQzY0WFhfR1BPN19NRU0wX0FERFI3CQkoMHgwMiA8PCAxNCkKKyNkZWZpbmUgUzNDNjRYWF9HUE83X0VJTlRfRzdfNwkJKDB4MDMgPDwgMTQpCisKKyNkZWZpbmUgUzNDNjRYWF9HUE84X01FTTBfQUREUjgJCSgweDAyIDw8IDE2KQorI2RlZmluZSBTM0M2NFhYX0dQTzhfRUlOVF9HN184CQkoMHgwMyA8PCAxNikKKworI2RlZmluZSBTM0M2NFhYX0dQTzlfTUVNMF9BRERSOQkJKDB4MDIgPDwgMTgpCisjZGVmaW5lIFMzQzY0WFhfR1BPOV9FSU5UX0c3XzkJCSgweDAzIDw8IDE4KQorCisjZGVmaW5lIFMzQzY0WFhfR1BPMTBfTUVNMF9BRERSMTAJKDB4MDIgPDwgMjApCisjZGVmaW5lIFMzQzY0WFhfR1BPMTBfRUlOVF9HN18xMAkoMHgwMyA8PCAyMCkKKworI2RlZmluZSBTM0M2NFhYX0dQTzExX01FTTBfQUREUjExCSgweDAyIDw8IDIyKQorI2RlZmluZSBTM0M2NFhYX0dQTzExX0VJTlRfRzdfMTEJKDB4MDMgPDwgMjIpCisKKyNkZWZpbmUgUzNDNjRYWF9HUE8xMl9NRU0wX0FERFIxMgkoMHgwMiA8PCAyNCkKKyNkZWZpbmUgUzNDNjRYWF9HUE8xMl9FSU5UX0c3XzEyCSgweDAzIDw8IDI0KQorCisjZGVmaW5lIFMzQzY0WFhfR1BPMTNfTUVNMF9BRERSMTMJKDB4MDIgPDwgMjYpCisjZGVmaW5lIFMzQzY0WFhfR1BPMTNfRUlOVF9HN18xMwkoMHgwMyA8PCAyNikKKworI2RlZmluZSBTM0M2NFhYX0dQTzE0X01FTTBfQUREUjE0CSgweDAyIDw8IDI4KQorI2RlZmluZSBTM0M2NFhYX0dQTzE0X0VJTlRfRzdfMTQJKDB4MDMgPDwgMjgpCisKKyNkZWZpbmUgUzNDNjRYWF9HUE8xNV9NRU0wX0FERFIxNQkoMHgwMiA8PCAzMCkKKyNkZWZpbmUgUzNDNjRYWF9HUE8xNV9FSU5UX0c3XzE1CSgweDAzIDw8IDMwKQorCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1wLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDZiY2ZiNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZ3Bpby1iYW5rLXAuaApAQCAtMCwwICsxLDY5IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2dwaW8tYmFuay1wLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogR1BJTyBCYW5rIFAgcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2RlZmluZSBTM0M2NFhYX0dQUENPTgkJCShTM0M2NFhYX0dQUF9CQVNFICsgMHgwMCkKKyNkZWZpbmUgUzNDNjRYWF9HUFBEQVQJCQkoUzNDNjRYWF9HUFBfQkFTRSArIDB4MDQpCisjZGVmaW5lIFMzQzY0WFhfR1BQUFVECQkJKFMzQzY0WFhfR1BQX0JBU0UgKyAweDA4KQorI2RlZmluZSBTM0M2NFhYX0dQUENPTlNMUAkJKFMzQzY0WFhfR1BQX0JBU0UgKyAweDBjKQorI2RlZmluZSBTM0M2NFhYX0dQUFBVRFNMUAkJKFMzQzY0WFhfR1BQX0JBU0UgKyAweDEwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BQX0NPTk1BU0soX19ncGlvKQkoMHgzIDw8ICgoX19ncGlvKSAqIDIpKQorI2RlZmluZSBTM0M2NFhYX0dQUF9JTlBVVChfX2dwaW8pCSgweDAgPDwgKChfX2dwaW8pICogMikpCisjZGVmaW5lIFMzQzY0WFhfR1BQX09VVFBVVChfX2dwaW8pCSgweDEgPDwgKChfX2dwaW8pICogMikpCisKKyNkZWZpbmUgUzNDNjRYWF9HUFAwX01FTTBfQUREUlYJCSgweDAyIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfR1BQMF9FSU5UX0c4XzAJCSgweDAzIDw8IDApCisKKyNkZWZpbmUgUzNDNjRYWF9HUFAxX01FTTBfU01DTEsJCSgweDAyIDw8IDIpCisjZGVmaW5lIFMzQzY0WFhfR1BQMV9FSU5UX0c4XzEJCSgweDAzIDw8IDIpCisKKyNkZWZpbmUgUzNDNjRYWF9HUFAyX01FTTBfbldBSVQJCSgweDAyIDw8IDQpCisjZGVmaW5lIFMzQzY0WFhfR1BQMl9FSU5UX0c4XzIJCSgweDAzIDw8IDQpCisKKyNkZWZpbmUgUzNDNjRYWF9HUFAzX01FTTBfUkRZMF9BTEUJKDB4MDIgPDwgNikKKyNkZWZpbmUgUzNDNjRYWF9HUFAzX0VJTlRfRzhfMwkJKDB4MDMgPDwgNikKKworI2RlZmluZSBTM0M2NFhYX0dQUDRfTUVNMF9SRFkxX0NMRQkoMHgwMiA8PCA4KQorI2RlZmluZSBTM0M2NFhYX0dQUDRfRUlOVF9HOF80CQkoMHgwMyA8PCA4KQorCisjZGVmaW5lIFMzQzY0WFhfR1BQNV9NRU0wX0lOVHNtMF9GV0UJKDB4MDIgPDwgMTApCisjZGVmaW5lIFMzQzY0WFhfR1BQNV9FSU5UX0c4XzUJCSgweDAzIDw8IDEwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BQNl9NRU0wXyhudWxsKQkoMHgwMiA8PCAxMikKKyNkZWZpbmUgUzNDNjRYWF9HUFA2X0VJTlRfRzhfNgkJKDB4MDMgPDwgMTIpCisKKyNkZWZpbmUgUzNDNjRYWF9HUFA3X01FTTBfSU5Uc20xX0ZSRQkoMHgwMiA8PCAxNCkKKyNkZWZpbmUgUzNDNjRYWF9HUFA3X0VJTlRfRzhfNwkJKDB4MDMgPDwgMTQpCisKKyNkZWZpbmUgUzNDNjRYWF9HUFA4X01FTTBfUlBuX1JuQgkoMHgwMiA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9HUFA4X0VJTlRfRzhfOAkJKDB4MDMgPDwgMTYpCisKKyNkZWZpbmUgUzNDNjRYWF9HUFA5X01FTTBfQVRBX1JFU0VUCSgweDAyIDw8IDE4KQorI2RlZmluZSBTM0M2NFhYX0dQUDlfRUlOVF9HOF85CQkoMHgwMyA8PCAxOCkKKworI2RlZmluZSBTM0M2NFhYX0dQUDEwX01FTTBfQVRBX0lOUEFDSwkoMHgwMiA8PCAyMCkKKyNkZWZpbmUgUzNDNjRYWF9HUFAxMF9FSU5UX0c4XzEwCSgweDAzIDw8IDIwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BQMTFfTUVNMF9BVEFfUkVHCSgweDAyIDw8IDIyKQorI2RlZmluZSBTM0M2NFhYX0dQUDExX0VJTlRfRzhfMTEJKDB4MDMgPDwgMjIpCisKKyNkZWZpbmUgUzNDNjRYWF9HUFAxMl9NRU0wX0FUQV9XRQkoMHgwMiA8PCAyNCkKKyNkZWZpbmUgUzNDNjRYWF9HUFAxMl9FSU5UX0c4XzEyCSgweDAzIDw8IDI0KQorCisjZGVmaW5lIFMzQzY0WFhfR1BQMTNfTUVNMF9BVEFfT0UJKDB4MDIgPDwgMjYpCisjZGVmaW5lIFMzQzY0WFhfR1BQMTNfRUlOVF9HOF8xMwkoMHgwMyA8PCAyNikKKworI2RlZmluZSBTM0M2NFhYX0dQUDE0X01FTTBfQVRBX0NECSgweDAyIDw8IDI4KQorI2RlZmluZSBTM0M2NFhYX0dQUDE0X0VJTlRfRzhfMTQJKDB4MDMgPDwgMjgpCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZ3Bpby1iYW5rLXEuaCBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZ3Bpby1iYW5rLXEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzEyMjIzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9ncGlvLWJhbmstcS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZ3Bpby1iYW5rLXEuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIAlCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBHUElPIEJhbmsgUSByZWdpc3RlciBhbmQgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjZGVmaW5lIFMzQzY0WFhfR1BRQ09OCQkJKFMzQzY0WFhfR1BRX0JBU0UgKyAweDAwKQorI2RlZmluZSBTM0M2NFhYX0dQUURBVAkJCShTM0M2NFhYX0dQUV9CQVNFICsgMHgwNCkKKyNkZWZpbmUgUzNDNjRYWF9HUFFQVUQJCQkoUzNDNjRYWF9HUFFfQkFTRSArIDB4MDgpCisjZGVmaW5lIFMzQzY0WFhfR1BRQ09OU0xQCQkoUzNDNjRYWF9HUFFfQkFTRSArIDB4MGMpCisjZGVmaW5lIFMzQzY0WFhfR1BRUFVEU0xQCQkoUzNDNjRYWF9HUFFfQkFTRSArIDB4MTApCisKKyNkZWZpbmUgUzNDNjRYWF9HUFFfQ09OTUFTSyhfX2dwaW8pCSgweDMgPDwgKChfX2dwaW8pICogMikpCisjZGVmaW5lIFMzQzY0WFhfR1BRX0lOUFVUKF9fZ3BpbykJKDB4MCA8PCAoKF9fZ3BpbykgKiAyKSkKKyNkZWZpbmUgUzNDNjRYWF9HUFFfT1VUUFVUKF9fZ3BpbykJKDB4MSA8PCAoKF9fZ3BpbykgKiAyKSkKKworI2RlZmluZSBTM0M2NFhYX0dQUTBfTUVNMF9BRERSMThfUkFTCSgweDAyIDw8IDApCisjZGVmaW5lIFMzQzY0WFhfR1BRMF9FSU5UX0c5XzAJCSgweDAzIDw8IDApCisKKyNkZWZpbmUgUzNDNjRYWF9HUFExX01FTTBfQUREUjE5X0NBUwkoMHgwMiA8PCAyKQorI2RlZmluZSBTM0M2NFhYX0dQUTFfRUlOVF9HOV8xCQkoMHgwMyA8PCAyKQorCisjZGVmaW5lIFMzQzY0WFhfR1BRMl9FSU5UX0c5XzIJCSgweDAzIDw8IDQpCisKKyNkZWZpbmUgUzNDNjRYWF9HUFEzX0VJTlRfRzlfMwkJKDB4MDMgPDwgNikKKworI2RlZmluZSBTM0M2NFhYX0dQUTRfRUlOVF9HOV80CQkoMHgwMyA8PCA4KQorCisjZGVmaW5lIFMzQzY0WFhfR1BRNV9FSU5UX0c5XzUJCSgweDAzIDw8IDEwKQorCisjZGVmaW5lIFMzQzY0WFhfR1BRNl9FSU5UX0c5XzYJCSgweDAzIDw8IDEyKQorCisjZGVmaW5lIFMzQzY0WFhfR1BRN19NRU0wX0FERFIxN19XRU5ETUMJKDB4MDIgPDwgMTQpCisjZGVmaW5lIFMzQzY0WFhfR1BRN19FSU5UX0c5XzcJCSgweDAzIDw8IDE0KQorCisjZGVmaW5lIFMzQzY0WFhfR1BROF9NRU0wX0FERFIxNl9BUERNQwkoMHgwMiA8PCAxNikKKyNkZWZpbmUgUzNDNjRYWF9HUFE4X0VJTlRfRzlfOAkJKDB4MDMgPDwgMTYpCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ0NmU5OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0wLDAgKzEsMTAwIEBACisvKiBhcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2dwaW8uaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDNjQwMCAtIEdQSU8gbGliIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2RlZmluZSBncGlvX2dldF92YWx1ZQlfX2dwaW9fZ2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fc2V0X3ZhbHVlCV9fZ3Bpb19zZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19jYW5zbGVlcAlfX2dwaW9fY2Fuc2xlZXAKKyNkZWZpbmUgZ3Bpb190b19pcnEJX19ncGlvX3RvX2lycQorCisvKiBHUElPIGJhbmsgc2l6ZXMgKi8KKyNkZWZpbmUgUzNDNjRYWF9HUElPX0FfTlIJKDgpCisjZGVmaW5lIFMzQzY0WFhfR1BJT19CX05SCSg3KQorI2RlZmluZSBTM0M2NFhYX0dQSU9fQ19OUgkoOCkKKyNkZWZpbmUgUzNDNjRYWF9HUElPX0RfTlIJKDUpCisjZGVmaW5lIFMzQzY0WFhfR1BJT19FX05SCSg1KQorI2RlZmluZSBTM0M2NFhYX0dQSU9fRl9OUgkoMTYpCisjZGVmaW5lIFMzQzY0WFhfR1BJT19HX05SCSg3KQorI2RlZmluZSBTM0M2NFhYX0dQSU9fSF9OUgkoMTApCisjZGVmaW5lIFMzQzY0WFhfR1BJT19JX05SCSgxNikKKyNkZWZpbmUgUzNDNjRYWF9HUElPX0pfTlIJKDEyKQorI2RlZmluZSBTM0M2NFhYX0dQSU9fS19OUgkoMTYpCisjZGVmaW5lIFMzQzY0WFhfR1BJT19MX05SCSgxNSkKKyNkZWZpbmUgUzNDNjRYWF9HUElPX01fTlIJKDYpCisjZGVmaW5lIFMzQzY0WFhfR1BJT19OX05SCSgxNikKKyNkZWZpbmUgUzNDNjRYWF9HUElPX09fTlIJKDE2KQorI2RlZmluZSBTM0M2NFhYX0dQSU9fUF9OUgkoMTUpCisjZGVmaW5lIFMzQzY0WFhfR1BJT19RX05SCSg5KQorCisvKiBHUElPIGJhbmsgbnVtYmVzICovCisKKy8qIENPTkZJR19TM0NfR1BJT19TUEFDRSBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IGV4dHJhCisgKiBzcGFjZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIHNvIHRoYXQgYW55IGFjY2lkZW50YWwKKyAqIGNoYW5nZSBmcm9tIG9uZSBncGlvIGJhbmsgdG8gYW5vdGhlciBjYW4gYmUgY2F1Z2h0LgorKi8KKworI2RlZmluZSBTM0M2NFhYX0dQSU9fTkVYVChfX2dwaW8pIFwKKwkoKF9fZ3BpbyMjX1NUQVJUKSArIChfX2dwaW8jI19OUikgKyBDT05GSUdfUzNDX0dQSU9fU1BBQ0UgKyAxKQorCitlbnVtIHMzY19ncGlvX251bWJlciB7CisJUzNDNjRYWF9HUElPX0FfU1RBUlQgPSAwLAorCVMzQzY0WFhfR1BJT19CX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0EpLAorCVMzQzY0WFhfR1BJT19DX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0IpLAorCVMzQzY0WFhfR1BJT19EX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0MpLAorCVMzQzY0WFhfR1BJT19FX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0QpLAorCVMzQzY0WFhfR1BJT19GX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0UpLAorCVMzQzY0WFhfR1BJT19HX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0YpLAorCVMzQzY0WFhfR1BJT19IX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0cpLAorCVMzQzY0WFhfR1BJT19JX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0gpLAorCVMzQzY0WFhfR1BJT19KX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0kpLAorCVMzQzY0WFhfR1BJT19LX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0opLAorCVMzQzY0WFhfR1BJT19MX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0spLAorCVMzQzY0WFhfR1BJT19NX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX0wpLAorCVMzQzY0WFhfR1BJT19OX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX00pLAorCVMzQzY0WFhfR1BJT19PX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX04pLAorCVMzQzY0WFhfR1BJT19QX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX08pLAorCVMzQzY0WFhfR1BJT19RX1NUQVJUID0gUzNDNjRYWF9HUElPX05FWFQoUzNDNjRYWF9HUElPX1ApLAorfTsKKworLyogUzNDNjRYWCBHUElPIG51bWJlciBkZWZpbml0aW9ucy4gKi8KKworI2RlZmluZSBTM0M2NFhYX0dQQShfbnIpCShTM0M2NFhYX0dQSU9fQV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQQihfbnIpCShTM0M2NFhYX0dQSU9fQl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQQyhfbnIpCShTM0M2NFhYX0dQSU9fQ19TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQRChfbnIpCShTM0M2NFhYX0dQSU9fRF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQRShfbnIpCShTM0M2NFhYX0dQSU9fRV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQRihfbnIpCShTM0M2NFhYX0dQSU9fRl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQRyhfbnIpCShTM0M2NFhYX0dQSU9fR19TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQSChfbnIpCShTM0M2NFhYX0dQSU9fSF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQSShfbnIpCShTM0M2NFhYX0dQSU9fSV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQSihfbnIpCShTM0M2NFhYX0dQSU9fSl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQSyhfbnIpCShTM0M2NFhYX0dQSU9fS19TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQTChfbnIpCShTM0M2NFhYX0dQSU9fTF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQTShfbnIpCShTM0M2NFhYX0dQSU9fTV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQTihfbnIpCShTM0M2NFhYX0dQSU9fTl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQTyhfbnIpCShTM0M2NFhYX0dQSU9fT19TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQUChfbnIpCShTM0M2NFhYX0dQSU9fUF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTM0M2NFhYX0dQUShfbnIpCShTM0M2NFhYX0dQSU9fUV9TVEFSVCArIChfbnIpKQorCisvKiB0aGUgZW5kIG9mIHRoZSBTM0M2NFhYIHNwZWNpZmljIGdwaW9zICovCisjZGVmaW5lIFMzQzY0WFhfR1BJT19FTkQJKFMzQzY0WFhfR1BRKFMzQzY0WFhfR1BJT19RX05SKSArIDEpCisjZGVmaW5lIFMzQ19HUElPX0VORAkJUzNDNjRYWF9HUElPX0VORAorCisvKiBkZWZpbmUgdGhlIG51bWJlciBvZiBncGlvcyB3ZSBuZWVkIHRvIHRoZSBvbmUgYWZ0ZXIgdGhlIEdQUSgpIHJhbmdlICovCisjZGVmaW5lIEdQSU9fQk9BUkRfU1RBUlQgKFMzQzY0WFhfR1BRKFMzQzY0WFhfR1BJT19RX05SKSArIDEpCisKKyNkZWZpbmUgQk9BUkRfTlJfR1BJT1MgMTYKKworI2RlZmluZSBBUkNIX05SX0dQSU9TCShHUElPX0JPQVJEX1NUQVJUICsgQk9BUkRfTlJfR1BJT1MpCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9ncGlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU1NzE2ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTAsMCArMSwxOCBAQAorLyogYXJjaC9hcm0vbWFjaC1zM2M2NHh4aW5jbHVkZS9tYWNoL2lvLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KKyAqCisgKiBEZWZhdWx0IElPIHJvdXRpbmVzIGZvciBTM0M2NFhYIGJhc2VkCisgKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKworLyogTm8gY3VycmVudCBJU0EvUENJIGJ1cyBzdXBwb3J0LiAqLworI2RlZmluZSBfX2lvKGEpCQlfX3R5cGVzYWZlX2lvKGEpCisjZGVmaW5lIF9fbWVtX3BjaShhKQkoYSkKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVCAoMHhGRkZGRkZGRikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5YWI0YWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL2lycXMuaApAQCAtMCwwICsxLDIxNiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9pcnFzLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0M2NFhYIC0gSVJRIHN1cHBvcnQKKyAqLworCisjaWZuZGVmIF9fQVNNX01BQ0hfUzNDNjRYWF9JUlFTX0gKKyNkZWZpbmUgX19BU01fTUFDSF9TM0M2NFhYX0lSUVNfSCBfX0ZJTEVfXworCisvKiB3ZSBrZWVwIHRoZSBmaXJzdCBzZXQgb2YgQ1BVIElSUXMgb3V0IG9mIHRoZSByYW5nZSBvZgorICogdGhlIElTQSBzcGFjZSwgc28gdGhhdCB0aGUgUEMxMDQgaGFzIHRoZW0gdG8gaXRzZWxmCisgKiBhbmQgd2UgZG9uJ3QgZW5kIHVwIGhhdmluZyB0byBkbyBob3JyaWJsZSB0aGluZ3MgdG8gdGhlCisgKiBzdGFuZGFyZCBJU0EgZHJpdmVycy4uLi4KKyAqCisgKiBub3RlLCBzaW5jZSB3ZSdyZSB1c2luZyB0aGUgVklDcywgb3VyIHN0YXJ0IG11c3QgYmUgYQorICogbXVsaXRwbGUgb2YgMzIgdG8gYWxsb3cgdGhlIGNvbW1vbiBjb2RlIHRvIHdvcmsKKyAqLworCisjZGVmaW5lIFMzQ19JUlFfT0ZGU0VUCSgzMikKKworI2RlZmluZSBTM0NfSVJRKHgpCSgoeCkgKyBTM0NfSVJRX09GRlNFVCkKKworI2RlZmluZSBJUlFfVklDMF9CQVNFCVMzQ19JUlEoMCkKKyNkZWZpbmUgSVJRX1ZJQzFfQkFTRQlTM0NfSVJRKDMyKQorCisvKiBVQVJUIGludGVycnVwdHMsIGVhY2ggVUFSVCBoYXMgNCBpbnR0ZXJ1cHRzIHBlciBjaGFubmVsIHNvCisgKiB1c2UgdGhlIHNwYWNlIGJldHdlZW4gdGhlIElTQSBhbmQgUzNDIG1haW4gaW50ZXJydXB0cy4gTm90ZSwgdGhlc2UKKyAqIGFyZSBub3QgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIFMzQzI0WFggc2VyaWVzISAqLworCisjZGVmaW5lIElSUV9TM0NVQVJUX0JBU0UwCSgxNikKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfQkFTRTEJKDIwKQorI2RlZmluZSBJUlFfUzNDVUFSVF9CQVNFMgkoMjQpCisjZGVmaW5lIElSUV9TM0NVQVJUX0JBU0UzCSgyOCkKKworI2RlZmluZSBVQVJUX0lSUV9SWEQJCSgwKQorI2RlZmluZSBVQVJUX0lSUV9FUlIJCSgxKQorI2RlZmluZSBVQVJUX0lSUV9UWEQJCSgyKQorI2RlZmluZSBVQVJUX0lSUV9NT0RFTQkJKDMpCisKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfUlgwCQkoSVJRX1MzQ1VBUlRfQkFTRTAgKyBVQVJUX0lSUV9SWEQpCisjZGVmaW5lIElSUV9TM0NVQVJUX1RYMAkJKElSUV9TM0NVQVJUX0JBU0UwICsgVUFSVF9JUlFfVFhEKQorI2RlZmluZSBJUlFfUzNDVUFSVF9FUlIwCShJUlFfUzNDVUFSVF9CQVNFMCArIFVBUlRfSVJRX0VSUikKKworI2RlZmluZSBJUlFfUzNDVUFSVF9SWDEJCShJUlFfUzNDVUFSVF9CQVNFMSArIFVBUlRfSVJRX1JYRCkKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfVFgxCQkoSVJRX1MzQ1VBUlRfQkFTRTEgKyBVQVJUX0lSUV9UWEQpCisjZGVmaW5lIElSUV9TM0NVQVJUX0VSUjEJKElSUV9TM0NVQVJUX0JBU0UxICsgVUFSVF9JUlFfRVJSKQorCisjZGVmaW5lIElSUV9TM0NVQVJUX1JYMgkJKElSUV9TM0NVQVJUX0JBU0UyICsgVUFSVF9JUlFfUlhEKQorI2RlZmluZSBJUlFfUzNDVUFSVF9UWDIJCShJUlFfUzNDVUFSVF9CQVNFMiArIFVBUlRfSVJRX1RYRCkKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfRVJSMgkoSVJRX1MzQ1VBUlRfQkFTRTIgKyBVQVJUX0lSUV9FUlIpCisKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfUlgzCQkoSVJRX1MzQ1VBUlRfQkFTRTMgKyBVQVJUX0lSUV9SWEQpCisjZGVmaW5lIElSUV9TM0NVQVJUX1RYMwkJKElSUV9TM0NVQVJUX0JBU0UzICsgVUFSVF9JUlFfVFhEKQorI2RlZmluZSBJUlFfUzNDVUFSVF9FUlIzCShJUlFfUzNDVUFSVF9CQVNFMyArIFVBUlRfSVJRX0VSUikKKworLyogVklDIGJhc2VkIElSUXMgKi8KKworI2RlZmluZSBTM0M2NFhYX0lSUV9WSUMwKHgpCShJUlFfVklDMF9CQVNFICsgKHgpKQorI2RlZmluZSBTM0M2NFhYX0lSUV9WSUMxKHgpCShJUlFfVklDMV9CQVNFICsgKHgpKQorCisvKiBWSUMwICovCisKKyNkZWZpbmUgSVJRX0VJTlQwXzMJCVMzQzY0WFhfSVJRX1ZJQzAoMCkKKyNkZWZpbmUgSVJRX0VJTlQ0XzExCQlTM0M2NFhYX0lSUV9WSUMwKDEpCisjZGVmaW5lIElSUV9SVENfVElDCQlTM0M2NFhYX0lSUV9WSUMwKDIpCisjZGVmaW5lIElSUV9DQU1JRl9DCQlTM0M2NFhYX0lSUV9WSUMwKDMpCisjZGVmaW5lIElSUV9DQU1JRl9QCQlTM0M2NFhYX0lSUV9WSUMwKDQpCisjZGVmaW5lIElSUV9DQU1JRl9NQwkJUzNDNjRYWF9JUlFfVklDMCg1KQorI2RlZmluZSBJUlFfUzNDNjQxMF9JSUMxCVMzQzY0WFhfSVJRX1ZJQzAoNSkKKyNkZWZpbmUgSVJRX1MzQzY0MTBfSUlTCQlTM0M2NFhYX0lSUV9WSUMwKDYpCisjZGVmaW5lIElSUV9TM0M2NDAwX0NBTUlGX01QCVMzQzY0WFhfSVJRX1ZJQzAoNikKKyNkZWZpbmUgSVJRX0NBTUlGX1dFX0MJCVMzQzY0WFhfSVJRX1ZJQzAoNykKKyNkZWZpbmUgSVJRX1MzQzY0MTBfRzNECQlTM0M2NFhYX0lSUV9WSUMwKDgpCisjZGVmaW5lIElSUV9TM0M2NDAwX0NBTUlGX1dFX1AJUzNDNjRYWF9JUlFfVklDMCg4KQorI2RlZmluZSBJUlFfUE9TVDAJCVMzQzY0WFhfSVJRX1ZJQzAoOSkKKyNkZWZpbmUgSVJRX1JPVEFUT1IJCVMzQzY0WFhfSVJRX1ZJQzAoMTApCisjZGVmaW5lIElSUV8yRAkJCVMzQzY0WFhfSVJRX1ZJQzAoMTEpCisjZGVmaW5lIElSUV9UVkVOQwkJUzNDNjRYWF9JUlFfVklDMCgxMikKKyNkZWZpbmUgSVJRX1NDQUxFUgkJUzNDNjRYWF9JUlFfVklDMCgxMykKKyNkZWZpbmUgSVJRX0JBVEYJCVMzQzY0WFhfSVJRX1ZJQzAoMTQpCisjZGVmaW5lIElSUV9KUEVHCQlTM0M2NFhYX0lSUV9WSUMwKDE1KQorI2RlZmluZSBJUlFfTUZDCQkJUzNDNjRYWF9JUlFfVklDMCgxNikKKyNkZWZpbmUgSVJRX1NETUEwCQlTM0M2NFhYX0lSUV9WSUMwKDE3KQorI2RlZmluZSBJUlFfU0RNQTEJCVMzQzY0WFhfSVJRX1ZJQzAoMTgpCisjZGVmaW5lIElSUV9BUk1fRE1BRVJSCQlTM0M2NFhYX0lSUV9WSUMwKDE5KQorI2RlZmluZSBJUlFfQVJNX0RNQQkJUzNDNjRYWF9JUlFfVklDMCgyMCkKKyNkZWZpbmUgSVJRX0FSTV9ETUFTCQlTM0M2NFhYX0lSUV9WSUMwKDIxKQorI2RlZmluZSBJUlFfS0VZUEFECQlTM0M2NFhYX0lSUV9WSUMwKDIyKQorI2RlZmluZSBJUlFfVElNRVIwX1ZJQwkJUzNDNjRYWF9JUlFfVklDMCgyMykKKyNkZWZpbmUgSVJRX1RJTUVSMV9WSUMJCVMzQzY0WFhfSVJRX1ZJQzAoMjQpCisjZGVmaW5lIElSUV9USU1FUjJfVklDCQlTM0M2NFhYX0lSUV9WSUMwKDI1KQorI2RlZmluZSBJUlFfV0RUCQkJUzNDNjRYWF9JUlFfVklDMCgyNikKKyNkZWZpbmUgSVJRX1RJTUVSM19WSUMJCVMzQzY0WFhfSVJRX1ZJQzAoMjcpCisjZGVmaW5lIElSUV9USU1FUjRfVklDCQlTM0M2NFhYX0lSUV9WSUMwKDI4KQorI2RlZmluZSBJUlFfTENEX0ZJRk8JCVMzQzY0WFhfSVJRX1ZJQzAoMjkpCisjZGVmaW5lIElSUV9MQ0RfVlNZTkMJCVMzQzY0WFhfSVJRX1ZJQzAoMzApCisjZGVmaW5lIElSUV9MQ0RfU1lTVEVNCQlTM0M2NFhYX0lSUV9WSUMwKDMxKQorCisvKiBWSUMxICovCisKKyNkZWZpbmUgSVJRX0VJTlQxMl8xOQkJUzNDNjRYWF9JUlFfVklDMSgwKQorI2RlZmluZSBJUlFfRUlOVDIwXzI3CQlTM0M2NFhYX0lSUV9WSUMxKDEpCisjZGVmaW5lIElSUV9QQ00wCQlTM0M2NFhYX0lSUV9WSUMxKDIpCisjZGVmaW5lIElSUV9QQ00xCQlTM0M2NFhYX0lSUV9WSUMxKDMpCisjZGVmaW5lIElSUV9BQzk3CQlTM0M2NFhYX0lSUV9WSUMxKDQpCisjZGVmaW5lIElSUV9VQVJUMAkJUzNDNjRYWF9JUlFfVklDMSg1KQorI2RlZmluZSBJUlFfVUFSVDEJCVMzQzY0WFhfSVJRX1ZJQzEoNikKKyNkZWZpbmUgSVJRX1VBUlQyCQlTM0M2NFhYX0lSUV9WSUMxKDcpCisjZGVmaW5lIElSUV9VQVJUMwkJUzNDNjRYWF9JUlFfVklDMSg4KQorI2RlZmluZSBJUlFfRE1BMAkJUzNDNjRYWF9JUlFfVklDMSg5KQorI2RlZmluZSBJUlFfRE1BMQkJUzNDNjRYWF9JUlFfVklDMSgxMCkKKyNkZWZpbmUgSVJRX09ORU5BTkQwCQlTM0M2NFhYX0lSUV9WSUMxKDExKQorI2RlZmluZSBJUlFfT05FTkFORDEJCVMzQzY0WFhfSVJRX1ZJQzEoMTIpCisjZGVmaW5lIElSUV9ORkMJCQlTM0M2NFhYX0lSUV9WSUMxKDEzKQorI2RlZmluZSBJUlFfQ0ZDT04JCVMzQzY0WFhfSVJRX1ZJQzEoMTQpCisjZGVmaW5lIElSUV9VU0JICQlTM0M2NFhYX0lSUV9WSUMxKDE1KQorI2RlZmluZSBJUlFfU1BJMAkJUzNDNjRYWF9JUlFfVklDMSgxNikKKyNkZWZpbmUgSVJRX1NQSTEJCVMzQzY0WFhfSVJRX1ZJQzEoMTcpCisjZGVmaW5lIElSUV9JSUMJCQlTM0M2NFhYX0lSUV9WSUMxKDE4KQorI2RlZmluZSBJUlFfSFNJdHgJCVMzQzY0WFhfSVJRX1ZJQzEoMTkpCisjZGVmaW5lIElSUV9IU0lyeAkJUzNDNjRYWF9JUlFfVklDMSgyMCkKKyNkZWZpbmUgSVJRX1JFU0VSVkVECQlTM0M2NFhYX0lSUV9WSUMxKDIxKQorI2RlZmluZSBJUlFfTVNNCQkJUzNDNjRYWF9JUlFfVklDMSgyMikKKyNkZWZpbmUgSVJRX0hPU1RJRgkJUzNDNjRYWF9JUlFfVklDMSgyMykKKyNkZWZpbmUgSVJRX0hTTU1DMAkJUzNDNjRYWF9JUlFfVklDMSgyNCkKKyNkZWZpbmUgSVJRX0hTTU1DMQkJUzNDNjRYWF9JUlFfVklDMSgyNSkKKyNkZWZpbmUgSVJRX0hTTU1DMgkJSVJRX1NQSTEJLyogc2hhcmVkIHdpdGggU1BJMSAqLworI2RlZmluZSBJUlFfT1RHCQkJUzNDNjRYWF9JUlFfVklDMSgyNikKKyNkZWZpbmUgSVJRX0lSREEJCVMzQzY0WFhfSVJRX1ZJQzEoMjcpCisjZGVmaW5lIElSUV9SVENfQUxBUk0JCVMzQzY0WFhfSVJRX1ZJQzEoMjgpCisjZGVmaW5lIElSUV9TRUMJCQlTM0M2NFhYX0lSUV9WSUMxKDI5KQorI2RlZmluZSBJUlFfUEVORE4JCVMzQzY0WFhfSVJRX1ZJQzEoMzApCisjZGVmaW5lIElSUV9UQwkJCUlSUV9QRU5ETgorI2RlZmluZSBJUlFfQURDCQkJUzNDNjRYWF9JUlFfVklDMSgzMSkKKworI2RlZmluZSBTM0M2NFhYX1RJTUVSX0lSUSh4KQlTM0NfSVJRKDY0ICsgKHgpKQorCisjZGVmaW5lIElSUV9USU1FUjAJCVMzQzY0WFhfVElNRVJfSVJRKDApCisjZGVmaW5lIElSUV9USU1FUjEJCVMzQzY0WFhfVElNRVJfSVJRKDEpCisjZGVmaW5lIElSUV9USU1FUjIJCVMzQzY0WFhfVElNRVJfSVJRKDIpCisjZGVmaW5lIElSUV9USU1FUjMJCVMzQzY0WFhfVElNRVJfSVJRKDMpCisjZGVmaW5lIElSUV9USU1FUjQJCVMzQzY0WFhfVElNRVJfSVJRKDQpCisKKy8qIGNvbXBhdGliaWxpdHkgZm9yIGRldmljZSBkZWZpbmVzICovCisKKyNkZWZpbmUgSVJRX0lJQzEJCUlSUV9TM0M2NDEwX0lJQzEKKworLyogU2luY2UgdGhlIElSUV9FSU5UKHgpIGFyZSBhIGxpbmVhciBtYXBwaW5nIG9uIGN1cnJlbnQgczNjNjR4eCBzZXJpZXMKKyAqIHdlIGp1c3QgZGVmaW5lZCB0aGVtIGFzIGFuIElSUV9FSU5UKHgpIG1hY3JvIGZyb20gUzNDX0lSUV9FSU5UX0JBU0UKKyAqIHdoaWNoIHdlIHBsYWNlIGFmdGVyIHRoZSBwYWlyIG9mIFZJQ3MuICovCisKKyNkZWZpbmUgUzNDX0lSUV9FSU5UX0JBU0UJUzNDX0lSUSg2NCs1KQorCisjZGVmaW5lIFMzQ19FSU5UKHgpCQkoKHgpICsgUzNDX0lSUV9FSU5UX0JBU0UpCisjZGVmaW5lIElSUV9FSU5UKHgpCQlTM0NfRUlOVCh4KQorI2RlZmluZSBJUlFfRUlOVF9CSVQoeCkJCSgoeCkgLSBTM0NfRUlOVCgwKSkKKworLyogTmV4dCB0aGUgZXh0ZXJuYWwgaW50ZXJydXB0IGdyb3Vwcy4gVGhlc2UgYXJlIHNpbWlsYXIgdG8gdGhlIElSUV9FSU5UKHgpCisgKiB0aGF0IHRoZXkgYXJlIHNvdXJjZWQgZnJvbSB0aGUgR1BJTyBwaW5zIGJ1dCB3aXRoIGEgZGlmZmVyZW50IHNjaGVtZSBmb3IKKyAqIHByaW9yaXR5IGFuZCBzb3VyY2UgaW5kaWNhdGlvbi4KKyAqCisgKiBUaGUgSVJRX0VJTlQoeCkgY2FuIGJlIHRob3VnaHQgb2YgYXMgJ2dyb3VwIDAnIG9mIHRoZSBhdmFpbGFibGUgR1BJTworICogaW50ZXJydXB0cywgYnV0IGZvciBoaXN0b3JpY2FsIHJlYXNvbnMgdGhleSBhcmUga2VwdCBhcGFydCBmcm9tIHRoZXNlCisgKiBuZXh0IGludGVycnVwdHMuCisgKgorICogVXNlIElSUV9FSU5UX0dST1VQKGdyb3VwLCBvZmZzZXQpIHRvIGdldCB0aGUgbnVtYmVyIGZvciB1c2UgaW4gdGhlCisgKiBtYWNoaW5lIHNwZWNpZmljIHN1cHBvcnQgZmlsZXMuCisgKi8KKworI2RlZmluZSBJUlFfRUlOVF9HUk9VUDFfTlIJKDE1KQorI2RlZmluZSBJUlFfRUlOVF9HUk9VUDJfTlIJKDgpCisjZGVmaW5lIElSUV9FSU5UX0dST1VQM19OUgkoNSkKKyNkZWZpbmUgSVJRX0VJTlRfR1JPVVA0X05SCSgxNCkKKyNkZWZpbmUgSVJRX0VJTlRfR1JPVVA1X05SCSg3KQorI2RlZmluZSBJUlFfRUlOVF9HUk9VUDZfTlIJKDEwKQorI2RlZmluZSBJUlFfRUlOVF9HUk9VUDdfTlIJKDE2KQorI2RlZmluZSBJUlFfRUlOVF9HUk9VUDhfTlIJKDE1KQorI2RlZmluZSBJUlFfRUlOVF9HUk9VUDlfTlIJKDkpCisKKyNkZWZpbmUgSVJRX0VJTlRfR1JPVVBfQkFTRQlTM0NfRUlOVCgyOCkKKyNkZWZpbmUgSVJRX0VJTlRfR1JPVVAxX0JBU0UJKElSUV9FSU5UX0dST1VQX0JBU0UgKyAweDAwKQorI2RlZmluZSBJUlFfRUlOVF9HUk9VUDJfQkFTRQkoSVJRX0VJTlRfR1JPVVAxX0JBU0UgKyBJUlFfRUlOVF9HUk9VUDFfTlIpCisjZGVmaW5lIElSUV9FSU5UX0dST1VQM19CQVNFCShJUlFfRUlOVF9HUk9VUDJfQkFTRSArIElSUV9FSU5UX0dST1VQMl9OUikKKyNkZWZpbmUgSVJRX0VJTlRfR1JPVVA0X0JBU0UJKElSUV9FSU5UX0dST1VQM19CQVNFICsgSVJRX0VJTlRfR1JPVVAzX05SKQorI2RlZmluZSBJUlFfRUlOVF9HUk9VUDVfQkFTRQkoSVJRX0VJTlRfR1JPVVA0X0JBU0UgKyBJUlFfRUlOVF9HUk9VUDRfTlIpCisjZGVmaW5lIElSUV9FSU5UX0dST1VQNl9CQVNFCShJUlFfRUlOVF9HUk9VUDVfQkFTRSArIElSUV9FSU5UX0dST1VQNV9OUikKKyNkZWZpbmUgSVJRX0VJTlRfR1JPVVA3X0JBU0UJKElSUV9FSU5UX0dST1VQNl9CQVNFICsgSVJRX0VJTlRfR1JPVVA2X05SKQorI2RlZmluZSBJUlFfRUlOVF9HUk9VUDhfQkFTRQkoSVJRX0VJTlRfR1JPVVA3X0JBU0UgKyBJUlFfRUlOVF9HUk9VUDdfTlIpCisjZGVmaW5lIElSUV9FSU5UX0dST1VQOV9CQVNFCShJUlFfRUlOVF9HUk9VUDhfQkFTRSArIElSUV9FSU5UX0dST1VQOF9OUikKKworI2RlZmluZSBJUlFfRUlOVF9HUk9VUChncm91cCwgbm8pCShJUlFfRUlOVF9HUk9VUCMjZ3JvdXAjI19CQVNFICsgKG5vKSkKKworLyogRGVmaW5lIGEgZ3JvdXAgb2YgaW50ZXJydXB0cyBmb3IgYm9hcmQtc3BlY2lmaWMgdXNlIChlZywgZm9yIE1GRAorICogaW50ZXJydXB0IGNvbnRyb2xsZXJzKS4gKi8KKyNkZWZpbmUgSVJRX0JPQVJEX1NUQVJUIChJUlFfRUlOVF9HUk9VUDlfQkFTRSArIElSUV9FSU5UX0dST1VQOV9OUiArIDEpCisKKyNpZmRlZiBDT05GSUdfU01ESzY0MTBfV00xMTkwX0VWMQorI2RlZmluZSBJUlFfQk9BUkRfTlIgNjQKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NNREs2NDEwX1dNMTE5Ml9FVjEpCisjZGVmaW5lIElSUV9CT0FSRF9OUiA2NAorI2Vsc2UKKyNkZWZpbmUgSVJRX0JPQVJEX05SIDE2CisjZW5kaWYKKworI2RlZmluZSBJUlFfQk9BUkRfRU5EIChJUlFfQk9BUkRfU1RBUlQgKyBJUlFfQk9BUkRfTlIpCisKKy8qIFNldCB0aGUgZGVmYXVsdCBOUl9JUlFTICovCisKKyNkZWZpbmUgTlJfSVJRUwkoSVJRX0JPQVJEX0VORCArIDEpCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1MzQzY0WFhfSVJRU19IICovCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvbWFwLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL21hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMWMxYzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL21hcC5oCkBAIC0wLDAgKzEsMTA3IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL21hcC5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0M2NFhYIC0gTWVtb3J5IG1hcCBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUFQX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NQVBfSCBfX0ZJTEVfXworCisjaW5jbHVkZSA8cGxhdC9tYXAtYmFzZS5oPgorCisvKgorICogUG9zdC1tdXggQ2hpcCBTZWxlY3QgUmVnaW9ucyBYbTBDU25fCisgKiBUaGVzZSBtYXkgYmUgdXNlZCBieSBTUk9NLCBOQU5EIG9yIENGIGRlcGVuZGluZyBvbiBzZXR0aW5ncworICovCisKKyNkZWZpbmUgUzNDNjRYWF9QQV9YTTBDU04wICgweDEwMDAwMDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX1hNMENTTjEgKDB4MTgwMDAwMDApCisjZGVmaW5lIFMzQzY0WFhfUEFfWE0wQ1NOMiAoMHgyMDAwMDAwMCkKKyNkZWZpbmUgUzNDNjRYWF9QQV9YTTBDU04zICgweDI4MDAwMDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX1hNMENTTjQgKDB4MzAwMDAwMDApCisjZGVmaW5lIFMzQzY0WFhfUEFfWE0wQ1NONSAoMHgzODAwMDAwMCkKKworLyogSFNNTUMgdW5pdHMgKi8KKyNkZWZpbmUgUzNDNjRYWF9QQV9IU01NQyh4KQkoMHg3QzIwMDAwMCArICgoeCkgKiAweDEwMDAwMCkpCisjZGVmaW5lIFMzQzY0WFhfUEFfSFNNTUMwCVMzQzY0WFhfUEFfSFNNTUMoMCkKKyNkZWZpbmUgUzNDNjRYWF9QQV9IU01NQzEJUzNDNjRYWF9QQV9IU01NQygxKQorI2RlZmluZSBTM0M2NFhYX1BBX0hTTU1DMglTM0M2NFhYX1BBX0hTTU1DKDIpCisKKyNkZWZpbmUgUzNDX1BBX1VBUlQJCSgweDdGMDA1MDAwKQorI2RlZmluZSBTM0NfUEFfVUFSVDAJCShTM0NfUEFfVUFSVCArIDB4MDApCisjZGVmaW5lIFMzQ19QQV9VQVJUMQkJKFMzQ19QQV9VQVJUICsgMHg0MDApCisjZGVmaW5lIFMzQ19QQV9VQVJUMgkJKFMzQ19QQV9VQVJUICsgMHg4MDApCisjZGVmaW5lIFMzQ19QQV9VQVJUMwkJKFMzQ19QQV9VQVJUICsgMHhDMDApCisjZGVmaW5lIFMzQ19VQVJUX09GRlNFVAkJKDB4NDAwKQorCisvKiBTZWUgbm90ZXMgb24gVUFSVCBWQSBtYXBwaW5nIGluIGRlYnVnLW1hY3JvLlMgKi8KKyNkZWZpbmUgUzNDX1ZBX1VBUlR4KHgpCShTM0NfVkFfVUFSVCArIChTM0NfUEFfVUFSVCAmIDB4ZmZmZmYpICsgKCh4KSAqIFMzQ19VQVJUX09GRlNFVCkpCisKKyNkZWZpbmUgUzNDX1ZBX1VBUlQwCQlTM0NfVkFfVUFSVHgoMCkKKyNkZWZpbmUgUzNDX1ZBX1VBUlQxCQlTM0NfVkFfVUFSVHgoMSkKKyNkZWZpbmUgUzNDX1ZBX1VBUlQyCQlTM0NfVkFfVUFSVHgoMikKKyNkZWZpbmUgUzNDX1ZBX1VBUlQzCQlTM0NfVkFfVUFSVHgoMykKKworI2RlZmluZSBTM0M2NFhYX1BBX1NST00JCSgweDcwMDAwMDAwKQorCisjZGVmaW5lIFMzQzY0WFhfUEFfTkFORAkJKDB4NzAyMDAwMDApCisjZGVmaW5lIFMzQzY0WFhfUEFfRkIJCSgweDc3MTAwMDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX1VTQl9IU09URwkoMHg3QzAwMDAwMCkKKyNkZWZpbmUgUzNDNjRYWF9QQV9XQVRDSERPRwkoMHg3RTAwNDAwMCkKKyNkZWZpbmUgUzNDNjRYWF9QQV9SVEMJCSgweDdFMDA1MDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX0FEQwkJKDB4N0UwMEIwMDApCisjZGVmaW5lIFMzQzY0WFhfUEFfU1lTQ09OCSgweDdFMDBGMDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX0FDOTcJCSgweDdGMDAxMDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX0lJUzAJCSgweDdGMDAyMDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX0lJUzEJCSgweDdGMDAzMDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX1RJTUVSCSgweDdGMDA2MDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX0lJQzAJCSgweDdGMDA0MDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX1NQSTAJCSgweDdGMDBCMDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX1NQSTEJCSgweDdGMDBDMDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX1BDTTAJCSgweDdGMDA5MDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX1BDTTEJCSgweDdGMDBBMDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX0lJU1Y0CSgweDdGMDBEMDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX0lJQzEJCSgweDdGMDBGMDAwKQorCisjZGVmaW5lIFMzQzY0WFhfUEFfR1BJTwkJKDB4N0YwMDgwMDApCisjZGVmaW5lIFMzQzY0WFhfVkFfR1BJTwkJUzNDX0FERFJfQ1BVKDB4MDAwMDAwMDApCisjZGVmaW5lIFMzQzY0WFhfU1pfR1BJTwkJU1pfNEsKKworI2RlZmluZSBTM0M2NFhYX1BBX1NEUkFNCSgweDUwMDAwMDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX1ZJQzAJCSgweDcxMjAwMDAwKQorI2RlZmluZSBTM0M2NFhYX1BBX1ZJQzEJCSgweDcxMzAwMDAwKQorCisjZGVmaW5lIFMzQzY0WFhfUEFfTU9ERU0JKDB4NzQxMDgwMDApCisjZGVmaW5lIFMzQzY0WFhfVkFfTU9ERU0JUzNDX0FERFJfQ1BVKDB4MDAxMDAwMDApCisKKyNkZWZpbmUgUzNDNjRYWF9QQV9VU0JIT1NUCSgweDc0MzAwMDAwKQorCisjZGVmaW5lIFMzQzY0WFhfUEFfVVNCX0hTUEhZCSgweDdDMTAwMDAwKQorI2RlZmluZSBTM0M2NFhYX1ZBX1VTQl9IU1BIWQlTM0NfQUREUl9DUFUoMHgwMDIwMDAwMCkKKworLyogcGxhY2UgVklDcyBjbG9zZSB0b2dldGhlciAqLworI2RlZmluZSBWQV9WSUMwCQkJKFMzQ19WQV9JUlEgKyAweDAwKQorI2RlZmluZSBWQV9WSUMxCQkJKFMzQ19WQV9JUlEgKyAweDEwMDAwKQorCisvKiBjb21wYXRpYmlsdGl5IGRlZmluZXMuICovCisjZGVmaW5lIFMzQ19QQV9USU1FUgkJUzNDNjRYWF9QQV9USU1FUgorI2RlZmluZSBTM0NfUEFfSFNNTUMwCQlTM0M2NFhYX1BBX0hTTU1DMAorI2RlZmluZSBTM0NfUEFfSFNNTUMxCQlTM0M2NFhYX1BBX0hTTU1DMQorI2RlZmluZSBTM0NfUEFfSFNNTUMyCQlTM0M2NFhYX1BBX0hTTU1DMgorI2RlZmluZSBTM0NfUEFfSUlDCQlTM0M2NFhYX1BBX0lJQzAKKyNkZWZpbmUgUzNDX1BBX0lJQzEJCVMzQzY0WFhfUEFfSUlDMQorI2RlZmluZSBTM0NfUEFfTkFORAkJUzNDNjRYWF9QQV9OQU5ECisjZGVmaW5lIFMzQ19QQV9GQgkJUzNDNjRYWF9QQV9GQgorI2RlZmluZSBTM0NfUEFfVVNCSE9TVAkJUzNDNjRYWF9QQV9VU0JIT1NUCisjZGVmaW5lIFMzQ19QQV9VU0JfSFNPVEcJUzNDNjRYWF9QQV9VU0JfSFNPVEcKKyNkZWZpbmUgUzNDX1ZBX1VTQl9IU1BIWQlTM0M2NFhYX1ZBX1VTQl9IU1BIWQorCisjZW5kaWYgLyogX19BU01fQVJDSF82NDAwX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9tZW1vcnkuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9wbGwuaCBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvcGxsLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcGxsLmgKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvcGxsLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvcG0tY29yZS5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9wbS1jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5ZjIwZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvcG0tY29yZS5oCkBAIC0wLDAgKzEsOTggQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvcG0tY29yZS5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDNjRYWCAtIFBNIGNvcmUgc3VwcG9ydCBmb3IgYXJjaC9hcm0vcGxhdC1zM2MvcG0uYworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfcG1fZGVidWdfaW5pdF91YXJ0KHZvaWQpCit7CisJdTMyIHRtcCA9IF9fcmF3X3JlYWRsKFMzQ19QQ0xLX0dBVEUpOworCisJLyogQXMgYSBub3RlLCBzaW5jZSB0aGUgUzNDNjRYWCBVQVJUcyBnZW5lcmFsbHkgaGF2ZSBtdWx0aXBsZQorCSAqIGNsb2NrIHNvdXJjZXMsIHdlIHNpbXBseSBlbmFibGUgUENMSyBhdCB0aGUgbW9tZW50IGFuZCBob3BlCisJICogdGhhdCB0aGUgcmVzdW1lIHNldHRpbmdzIGZvciB0aGUgVUFSVCBhcmUgc3VpdGFibGUgZm9yIHRoZQorCSAqIHVzZSB3aXRoIFBDTEsuCisJICovCisKKwl0bXAgfD0gUzNDX0NMS0NPTl9QQ0xLX1VBUlQwOworCXRtcCB8PSBTM0NfQ0xLQ09OX1BDTEtfVUFSVDE7CisJdG1wIHw9IFMzQ19DTEtDT05fUENMS19VQVJUMjsKKwl0bXAgfD0gUzNDX0NMS0NPTl9QQ0xLX1VBUlQzOworCisJX19yYXdfd3JpdGVsKHRtcCwgUzNDX1BDTEtfR0FURSk7CisJdWRlbGF5KDEwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHMzY19wbV9hcmNoX3ByZXBhcmVfaXJxcyh2b2lkKQoreworCS8qIFZJQyBzaG91bGQgaGF2ZSBhbHJlYWR5IGJlZW4gdGFrZW4gY2FyZSBvZiAqLworCisJLyogY2xlYXIgYW55IHBlbmRpbmcgRUlOVDAgaW50ZXJydXB0cyAqLworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTM0M2NFhYX0VJTlQwUEVORCksIFMzQzY0WFhfRUlOVDBQRU5EKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHMzY19wbV9hcmNoX3N0b3BfY2xvY2tzKHZvaWQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfcG1fYXJjaF9zaG93X3Jlc3VtZV9pcnFzKHZvaWQpCit7Cit9CisKKy8qIG1ha2UgdGhlc2UgZGVmaW5lcywgd2UgY3VycmVudGx5IGRvIG5vdCBoYXZlIGFueSBuZWVkIHRvIGNoYW5nZQorICogdGhlIElSUSB3YWtlIGNvbnRyb2xzIGRlcGVuZGluZyBvbiB0aGUgQ1BVIHdlIGFyZSBydW5uaW5nIG9uICovCisKKyNkZWZpbmUgczNjX2lycXdha2VfZWludGFsbG93CSgoMSA8PCAyOCkgLSAxKQorI2RlZmluZSBzM2NfaXJxd2FrZV9pbnRhbGxvdwkoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHMzY19wbV9hcmNoX3VwZGF0ZV91YXJ0KHZvaWQgX19pb21lbSAqcmVncywKKwkJCQkJICAgc3RydWN0IHBtX3VhcnRfc2F2ZSAqc2F2ZSkKK3sKKwl1MzIgdWNvbiA9IF9fcmF3X3JlYWRsKHJlZ3MgKyBTM0MyNDEwX1VDT04pOworCXUzMiB1Y29uX2NsayA9IHVjb24gJiBTM0M2NDAwX1VDT05fQ0xLTUFTSzsKKwl1MzIgc2F2ZV9jbGsgPSBzYXZlLT51Y29uICYgUzNDNjQwMF9VQ09OX0NMS01BU0s7CisJdTMyIG5ld191Y29uOworCXUzMiBkZWx0YTsKKworCS8qIFMzQzY0WFggVUFSVCBibG9ja3Mgb25seSBzdXBwb3J0IGxldmVsIGludGVycnVwdHMsIHNvIGVuc3VyZSB0aGF0CisJICogd2hlbiB3ZSByZXN0b3JlIHVudXNlZCBVQVJUIGJsb2NrcyB3ZSBmb3JjZSB0aGUgbGV2ZWwgaW50ZXJydXB0CisJICogc2V0dGlncy4gKi8KKwlzYXZlLT51Y29uIHw9IFMzQzI0MTBfVUNPTl9UWElMRVZFTCB8IFMzQzI0MTBfVUNPTl9SWElMRVZFTDsKKworCS8qIFdlIGhhdmUgYSBjb25zdHJhaW50IG9uIGNoYW5naW5nIHRoZSBjbG9jayB0eXBlIG9mIHRoZSBVQVJUCisJICogYmV0d2VlbiBVQ0xLeCBhbmQgUENMSywgc28gZW5zdXJlIHRoYXQgd2hlbiB3ZSByZXN0b3JlIFVDT04KKwkgKiB0aGF0IHRoZSBDTEsgZmllbGQgaXMgY29ycmVjdGx5IG1vZGlmaWVkIGlmIHRoZSBib290bG9hZGVyCisJICogaGFzIGNoYW5nZWQgYW55dGhpbmcuCisJICovCisJaWYgKHVjb25fY2xrICE9IHNhdmVfY2xrKSB7CisJCW5ld191Y29uID0gc2F2ZS0+dWNvbjsKKwkJZGVsdGEgPSB1Y29uX2NsayBeIHNhdmVfY2xrOworCisJCS8qIGNoYW5nZSBmcm9tIFVDTEt4ID0+IHdyb25nIFBDTEssCisJCSAqIGVpdGhlciBVQ0xLIGNhbiBiZSB0ZXN0ZWQgZm9yIGJ5IGEgYml0LXRlc3QKKwkJICogd2l0aCBVQ0xLMCAqLworCQlpZiAodWNvbl9jbGsgJiBTM0M2NDAwX1VDT05fVUNMSzAgJiYKKwkJICAgICEoc2F2ZV9jbGsgJiBTM0M2NDAwX1VDT05fVUNMSzApICYmCisJCSAgICBkZWx0YSAmIFMzQzY0MDBfVUNPTl9QQ0xLMikgeworCQkJbmV3X3Vjb24gJj0gflMzQzY0MDBfVUNPTl9VQ0xLMDsKKwkJfSBlbHNlIGlmIChkZWx0YSA9PSBTM0M2NDAwX1VDT05fUENMSzIpIHsKKwkJCS8qIGFzIGFuIHByZWNhdXRpb24sIGRvbid0IGNoYW5nZSBmcm9tCisJCQkgKiBQQ0xLMiA9PiBQQ0xLIG9yIHZpY2UtdmVyc2EgKi8KKwkJCW5ld191Y29uIF49IFMzQzY0MDBfVUNPTl9QQ0xLMjsKKwkJfQorCisJCVMzQ19QTURCRygidWNvbiBjaGFuZ2UgJTA0eCA9PiAlMDR4IChzYXZlPSUwNHgpXG4iLAorCQkJICB1Y29uLCBuZXdfdWNvbiwgc2F2ZS0+dWNvbik7CisJCXNhdmUtPnVjb24gPSBuZXdfdWNvbjsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9wd20tY2xvY2suaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9wd20tY2xvY2suaApyZW5hbWUgdG8gYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9wd20tY2xvY2suaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWY2Mjc0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmgKQEAgLTAsMCArMSwxNTYgQEAKKy8qIGFyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1jbG9jay5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0M2NFhYIGNsb2NrIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19QTEFUX1JFR1NfQ0xPQ0tfSAorI2RlZmluZSBfX1BMQVRfUkVHU19DTE9DS19IIF9fRklMRV9fCisKKyNkZWZpbmUgUzNDX0NMS1JFRyh4KQkJKFMzQ19WQV9TWVMgKyAoeCkpCisKKyNkZWZpbmUgUzNDX0FQTExfTE9DSwkJUzNDX0NMS1JFRygweDAwKQorI2RlZmluZSBTM0NfTVBMTF9MT0NLCQlTM0NfQ0xLUkVHKDB4MDQpCisjZGVmaW5lIFMzQ19FUExMX0xPQ0sJCVMzQ19DTEtSRUcoMHgwOCkKKyNkZWZpbmUgUzNDX0FQTExfQ09OCQlTM0NfQ0xLUkVHKDB4MEMpCisjZGVmaW5lIFMzQ19NUExMX0NPTgkJUzNDX0NMS1JFRygweDEwKQorI2RlZmluZSBTM0NfRVBMTF9DT04wCQlTM0NfQ0xLUkVHKDB4MTQpCisjZGVmaW5lIFMzQ19FUExMX0NPTjEJCVMzQ19DTEtSRUcoMHgxOCkKKyNkZWZpbmUgUzNDX0NMS19TUkMJCVMzQ19DTEtSRUcoMHgxQykKKyNkZWZpbmUgUzNDX0NMS19ESVYwCQlTM0NfQ0xLUkVHKDB4MjApCisjZGVmaW5lIFMzQ19DTEtfRElWMQkJUzNDX0NMS1JFRygweDI0KQorI2RlZmluZSBTM0NfQ0xLX0RJVjIJCVMzQ19DTEtSRUcoMHgyOCkKKyNkZWZpbmUgUzNDX0NMS19PVVQJCVMzQ19DTEtSRUcoMHgyQykKKyNkZWZpbmUgUzNDX0hDTEtfR0FURQkJUzNDX0NMS1JFRygweDMwKQorI2RlZmluZSBTM0NfUENMS19HQVRFCQlTM0NfQ0xLUkVHKDB4MzQpCisjZGVmaW5lIFMzQ19TQ0xLX0dBVEUJCVMzQ19DTEtSRUcoMHgzOCkKKyNkZWZpbmUgUzNDX01FTTBfR0FURQkJUzNDX0NMS1JFRygweDNDKQorCisvKiBDTEtESVYwICovCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9QQ0xLX01BU0sJKDB4ZiA8PCAxMikKKyNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX1BDTEtfU0hJRlQJKDEyKQorI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfSENMSzJfTUFTSwkoMHg3IDw8IDkpCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9IQ0xLMl9TSElGVAkoOSkKKyNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX0hDTEtfTUFTSwkoMHgxIDw8IDgpCisjZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9IQ0xLX1NISUZUCSg4KQorI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfTVBMTF9NQVNLCSgweDEgPDwgNCkKKyNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX01QTExfU0hJRlQJKDQpCisKKyNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX0FSTV9NQVNLCSgweDcgPDwgMCkKKyNkZWZpbmUgUzNDNjQxMF9DTEtESVYwX0FSTV9NQVNLCSgweGYgPDwgMCkKKyNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX0FSTV9TSElGVAkoMCkKKworLyogSENMSyBHQVRFIFJlZ2lzdGVycyAqLworI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfM0RTRQkoMTw8MzEpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19VSE9TVAkoMTw8MjkpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19TRUNVUgkoMTw8MjgpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19TRE1BMQkoMTw8MjcpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19TRE1BMAkoMTw8MjYpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19JUk9NCSgxPDwyNSkKKyNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX0REUjEJKDE8PDI0KQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfRERSMAkoMTw8MjMpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19NRU0xCSgxPDwyMikKKyNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX01FTTAJKDE8PDIxKQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfVVNCCSgxPDwyMCkKKyNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX0hTTU1DMgkoMTw8MTkpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19IU01NQzEJKDE8PDE4KQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfSFNNTUMwCSgxPDwxNykKKyNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX01EUAkoMTw8MTYpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19ESE9TVAkoMTw8MTUpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19JSE9TVAkoMTw8MTQpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19ETUExCSgxPDwxMykKKyNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX0RNQTAJKDE8PDEyKQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfSlBFRwkoMTw8MTEpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19DQU1JRgkoMTw8MTApCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19TQ0FMRVIJKDE8PDkpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS18yRAkoMTw8OCkKKyNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX1RWCSgxPDw3KQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfUE9TVDAJKDE8PDUpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19ST1QJKDE8PDQpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19MQ0QJKDE8PDMpCisjZGVmaW5lIFMzQ19DTEtDT05fSENMS19UWklDCSgxPDwyKQorI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfSU5UQwkoMTw8MSkKKyNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX01GQwkoMTw8MCkKKworLyogUENMSyBHQVRFIFJlZ2lzdGVycyAqLworI2RlZmluZSBTM0M2NDEwX0NMS0NPTl9QQ0xLX0kyQzEJKDE8PDI3KQorI2RlZmluZSBTM0M2NDEwX0NMS0NPTl9QQ0xLX0lJUzIJKDE8PDI2KQorI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfU0tFWQkJKDE8PDI0KQorI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfQ0hJUElECQkoMTw8MjMpCisjZGVmaW5lIFMzQ19DTEtDT05fUENMS19TUEkxCQkoMTw8MjIpCisjZGVmaW5lIFMzQ19DTEtDT05fUENMS19TUEkwCQkoMTw8MjEpCisjZGVmaW5lIFMzQ19DTEtDT05fUENMS19IU0lSWAkJKDE8PDIwKQorI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfSFNJVFgJCSgxPDwxOSkKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX0dQSU8JCSgxPDwxOCkKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX0lJQwkJKDE8PDE3KQorI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfSUlTMQkJKDE8PDE2KQorI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfSUlTMAkJKDE8PDE1KQorI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfQUM5NwkJKDE8PDE0KQorI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfVFpQQwkJKDE8PDEzKQorI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfVFNBREMJCSgxPDwxMikKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX0tFWVBBRAkJKDE8PDExKQorI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfSVJEQQkJKDE8PDEwKQorI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfUENNMQkJKDE8PDkpCisjZGVmaW5lIFMzQ19DTEtDT05fUENMS19QQ00wCQkoMTw8OCkKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX1BXTQkJKDE8PDcpCisjZGVmaW5lIFMzQ19DTEtDT05fUENMS19SVEMJCSgxPDw2KQorI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfV0RUCQkoMTw8NSkKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX1VBUlQzCQkoMTw8NCkKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX1VBUlQyCQkoMTw8MykKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX1VBUlQxCQkoMTw8MikKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX1VBUlQwCQkoMTw8MSkKKyNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX01GQwkJKDE8PDApCisKKy8qIFNDTEsgR0FURSBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX1VIT1NUCQkoMTw8MzApCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19NTUMyXzQ4CQkoMTw8MjkpCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19NTUMxXzQ4CQkoMTw8MjgpCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19NTUMwXzQ4CQkoMTw8MjcpCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19NTUMyCQkoMTw8MjYpCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19NTUMxCQkoMTw8MjUpCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19NTUMwCQkoMTw8MjQpCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19TUEkxXzQ4IAkoMTw8MjMpCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19TUEkwXzQ4IAkoMTw8MjIpCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19TUEkxCQkoMTw8MjEpCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19TUEkwCQkoMTw8MjApCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19EQUMyNwkJKDE8PDE5KQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfVFYyNwkJKDE8PDE4KQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfU0NBTEVSMjcJKDE8PDE3KQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfU0NBTEVSCQkoMTw8MTYpCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19MQ0QyNwkJKDE8PDE1KQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfTENECQkoMTw8MTQpCisjZGVmaW5lIFMzQzY0MDBfQ0xLQ09OX1NDTEtfUE9TVDFfMjcJKDE8PDEzKQorI2RlZmluZSBTM0M2NDEwX0NMS0NPTl9GSU1DCQkoMTw8MTMpCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19QT1NUMF8yNwkoMTw8MTIpCisjZGVmaW5lIFMzQzY0MDBfQ0xLQ09OX1NDTEtfUE9TVDEJKDE8PDExKQorI2RlZmluZSBTM0M2NDEwX0NMS0NPTl9TQ0xLX0FVRElPMgkoMTw8MTEpCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19QT1NUMAkJKDE8PDEwKQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfQVVESU8xCQkoMTw8OSkKKyNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX0FVRElPMAkJKDE8PDgpCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19TRUNVUgkJKDE8PDcpCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19JUkRBCQkoMTw8NikKKyNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX1VBUlQJCSgxPDw1KQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfT05FTkFORCAJKDE8PDQpCisjZGVmaW5lIFMzQ19DTEtDT05fU0NMS19NRkMJCSgxPDwzKQorI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfQ0FNCQkoMTw8MikKKyNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX0pQRUcJCSgxPDwxKQorCisvKiBDTEtTUkMgKi8KKworI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19BUExMX01PVVQJKDEgPDwgMCkKKyNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfTVBMTF9NT1VUCSgxIDw8IDEpCisjZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX0VQTExfTU9VVAkoMSA8PCAyKQorI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19BUExMX01PVVRfU0hJRlQJKDApCisjZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX01QTExfTU9VVF9TSElGVAkoMSkKKyNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfRVBMTF9NT1VUX1NISUZUCSgyKQorI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19NRkMJCSgxIDw8IDQpCisKKyNlbmRpZiAvKiBfUExBVF9SRUdTX0NMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvcmVncy1mYi5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9yZWdzLWZiLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvcmVncy1mYi5oCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3JlZ3MtZmIuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLWdwaW8tbWVtcG9ydC5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9yZWdzLWdwaW8tbWVtcG9ydC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtZ3Bpby1tZW1wb3J0LmgKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvcmVncy1ncGlvLW1lbXBvcnQuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLWdwaW8uaCBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvcmVncy1ncGlvLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1ncGlvLmgKcmVuYW1lIHRvIGFyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvcmVncy1ncGlvLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaCBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9yZWdzLWlycS5oCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1tb2RlbS5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9yZWdzLW1vZGVtLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1tb2RlbS5oCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3JlZ3MtbW9kZW0uaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9yZWdzLXNyb20uaCBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvcmVncy1zcm9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU2NzMxYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvcmVncy1zcm9tLmgKQEAgLTAsMCArMSw1OSBAQAorLyogYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLXNyb20uaAorICoKKyAqIENvcHlyaWdodCAyMDA5IEFuZHkgR3JlZW4gPGFuZHlAd2FybWNhdC5jb20+CisgKgorICogUzNDNjRYWCBTUk9NIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19QTEFUX1JFR1NfU1JPTV9ICisjZGVmaW5lIF9fUExBVF9SRUdTX1NST01fSCBfX0ZJTEVfXworCisjZGVmaW5lIFMzQzY0WFhfU1JPTVJFRyh4KQkoUzNDX1ZBX01FTSArICh4KSkKKworI2RlZmluZSBTM0M2NFhYX1NST01fQlcJCVMzQzY0WFhfU1JPTVJFRygwKQorI2RlZmluZSBTM0M2NFhYX1NST01fQkMwCVMzQzY0WFhfU1JPTVJFRyg0KQorI2RlZmluZSBTM0M2NFhYX1NST01fQkMxCVMzQzY0WFhfU1JPTVJFRyg4KQorI2RlZmluZSBTM0M2NFhYX1NST01fQkMyCVMzQzY0WFhfU1JPTVJFRygweGMpCisjZGVmaW5lIFMzQzY0WFhfU1JPTV9CQzMJUzNDNjRYWF9TUk9NUkVHKDB4MTApCisjZGVmaW5lIFMzQzY0WFhfU1JPTV9CQzQJUzNDNjRYWF9TUk9NUkVHKDB4MTQpCisjZGVmaW5lIFMzQzY0WFhfU1JPTV9CQzUJUzNDNjRYWF9TUk9NUkVHKDB4MTgpCisKKy8qCisgKiBvbmUgcmVnaXN0ZXIgQlcgaG9sZHMgNSB4IDQtYml0IHBhY2tlZCBzZXR0aW5ncyBmb3IgTkNTMCAtIE5DUzQKKyAqLworCisjZGVmaW5lIFMzQzY0WFhfU1JPTV9CV19fREFUQVdJRFRIX19TSElGVAkwCisjZGVmaW5lIFMzQzY0WFhfU1JPTV9CV19fV0FJVEVOQUJMRV9fU0hJRlQJMgorI2RlZmluZSBTM0M2NFhYX1NST01fQldfX0JZVEVFTkFCTEVfX1NISUZUCTMKKyNkZWZpbmUgUzNDNjRYWF9TUk9NX0JXX19DU19NQVNLIDB4ZgorCisjZGVmaW5lIFMzQzY0WFhfU1JPTV9CV19fTkNTMF9fU0hJRlQJMAorI2RlZmluZSBTM0M2NFhYX1NST01fQldfX05DUzFfX1NISUZUCTQKKyNkZWZpbmUgUzNDNjRYWF9TUk9NX0JXX19OQ1MyX19TSElGVAk4CisjZGVmaW5lIFMzQzY0WFhfU1JPTV9CV19fTkNTM19fU0hJRlQJMHhjCisjZGVmaW5lIFMzQzY0WFhfU1JPTV9CV19fTkNTNF9fU0hJRlQJMHgxMAorCisvKgorICogYXBwbGllcyB0byBzYW1lIHRvIEJDUzAgLSBCQ1M0CisgKi8KKworI2RlZmluZSBTM0M2NFhYX1NST01fQkNYX19QTUNfX1NISUZUCTAKKyNkZWZpbmUgUzNDNjRYWF9TUk9NX0JDWF9fUE1DX19NQVNLCTMKKyNkZWZpbmUgUzNDNjRYWF9TUk9NX0JDWF9fVEFDUF9fU0hJRlQJNAorI2RlZmluZSBTM0M2NFhYX1NST01fQkNYX19UQUNQX19NQVNLCTB4ZgorI2RlZmluZSBTM0M2NFhYX1NST01fQkNYX19UQ0FIX19TSElGVAk4CisjZGVmaW5lIFMzQzY0WFhfU1JPTV9CQ1hfX1RDQUhfX01BU0sJMHhmCisjZGVmaW5lIFMzQzY0WFhfU1JPTV9CQ1hfX1RDT0hfX1NISUZUCTEyCisjZGVmaW5lIFMzQzY0WFhfU1JPTV9CQ1hfX1RDT0hfX01BU0sJMHhmCisjZGVmaW5lIFMzQzY0WFhfU1JPTV9CQ1hfX1RBQ0NfX1NISUZUCTE2CisjZGVmaW5lIFMzQzY0WFhfU1JPTV9CQ1hfX1RBQ0NfX01BU0sJMHgxZgorI2RlZmluZSBTM0M2NFhYX1NST01fQkNYX19UQ09TX19TSElGVAkyNAorI2RlZmluZSBTM0M2NFhYX1NST01fQkNYX19UQ09TX19NQVNLCTB4ZgorI2RlZmluZSBTM0M2NFhYX1NST01fQkNYX19UQUNTX19TSElGVAkyOAorI2RlZmluZSBTM0M2NFhYX1NST01fQkNYX19UQUNTX19NQVNLCTB4ZgorCisjZW5kaWYgLyogX1BMQVRfUkVHU19TUk9NX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1zeXMuaCBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvcmVncy1zeXMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLXN5cy5oCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3JlZ3Mtc3lzLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcmVncy1zeXNjb24tcG93ZXIuaCBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvcmVncy1zeXNjb24tcG93ZXIuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLXN5c2Nvbi1wb3dlci5oCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3JlZ3Mtc3lzY29uLXBvd2VyLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvczNjNjQwMC5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9zM2M2NDAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg2OTU4ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvczNjNjQwMC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qIGFyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2h0L3MzYzY0MDAuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogSGVhZGVyIGZpbGUgZm9yIHMzYzY0MDAgY3B1IHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworLyogQ29tbW9uIGluaXQgY29kZSBmb3IgUzNDNjQwMCByZWxhdGVkIFNvQ3MgKi8KKworZXh0ZXJuIHZvaWQgczNjNjQwMF9jb21tb25faW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubyk7CitleHRlcm4gdm9pZCBzM2M2NDAwX3NldHVwX2Nsb2Nrcyh2b2lkKTsKKworZXh0ZXJuIHZvaWQgczNjNjR4eF9yZWdpc3Rlcl9jbG9ja3ModW5zaWduZWQgbG9uZyB4dGFsLCB1bnNpZ25lZCBhcm1jbGtfbGltaXQpOworCisjaWZkZWYgQ09ORklHX0NQVV9TM0M2NDAwCisKK2V4dGVybiAgaW50IHMzYzY0MDBfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHMzYzY0MDBfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBzM2M2NDAwX21hcF9pbyh2b2lkKTsKK2V4dGVybiB2b2lkIHMzYzY0MDBfaW5pdF9jbG9ja3MoaW50IHh0YWwpOworCisjZGVmaW5lIHMzYzY0MDBfaW5pdF91YXJ0cyBzM2M2NDAwX2NvbW1vbl9pbml0X3VhcnRzCisKKyNlbHNlCisjZGVmaW5lIHMzYzY0MDBfaW5pdF9jbG9ja3MgTlVMTAorI2RlZmluZSBzM2M2NDAwX2luaXRfdWFydHMgTlVMTAorI2RlZmluZSBzM2M2NDAwX21hcF9pbyBOVUxMCisjZGVmaW5lIHMzYzY0MDBfaW5pdCBOVUxMCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvczNjNjQxMC5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC9zM2M2NDEwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRmMTE0MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvczNjNjQxMC5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGFyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvczNjNjQxMC5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sICBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogSGVhZGVyIGZpbGUgZm9yIHMzYzY0MTAgY3B1IHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmZGVmIENPTkZJR19DUFVfUzNDNjQxMAorCitleHRlcm4gIGludCBzM2M2NDEwX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBzM2M2NDEwX2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgczNjNjQxMF9tYXBfaW8odm9pZCk7CitleHRlcm4gdm9pZCBzM2M2NDEwX2luaXRfY2xvY2tzKGludCB4dGFsKTsKKworI2RlZmluZSBzM2M2NDEwX2luaXRfdWFydHMgczNjNjQwMF9jb21tb25faW5pdF91YXJ0cworCisjZWxzZQorI2RlZmluZSBzM2M2NDEwX2luaXRfY2xvY2tzIE5VTEwKKyNkZWZpbmUgczNjNjQxMF9pbml0X3VhcnRzIE5VTEwKKyNkZWZpbmUgczNjNjQxMF9tYXBfaW8gTlVMTAorI2RlZmluZSBzM2M2NDEwX2luaXQgTlVMTAorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3NwaS1jbG9ja3MuaCBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvc3BpLWNsb2Nrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMGM0M2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3NwaS1jbG9ja3MuaApAQCAtMCwwICsxLDE4IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3NwaS1jbG9ja3MuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIEx0ZC4KKyAqCUphc3dpbmRlciBTaW5naCA8amFzc2kuYnJhckBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19TM0M2NFhYX1BMQVRfU1BJX0NMS1NfSAorI2RlZmluZSBfX1MzQzY0WFhfUExBVF9TUElfQ0xLU19IIF9fRklMRV9fCisKKyNkZWZpbmUgUzNDNjRYWF9TUElfU1JDQ0xLX1BDTEsJCTAKKyNkZWZpbmUgUzNDNjRYWF9TUElfU1JDQ0xLX1NQSUJVUwkxCisjZGVmaW5lIFMzQzY0WFhfU1BJX1NSQ0NMS180OE0JCTIKKworI2VuZGlmIC8qIF9fUzNDNjRYWF9QTEFUX1NQSV9DTEtTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3RpY2suaCBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvdGljay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViZTE4YTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3RpY2suaApAQCAtMCwwICsxLDI5IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3RpY2suaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDNjRYWCAtIFRpbWVyIHRpY2sgc3VwcG9ydCBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVElDS19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVElDS19IIF9fRklMRV9fCisKKy8qIG5vdGUsIHRoZSB0aW1lciBpbnRlcnJ1dHBzIHR1cm4gdXAgaW4gMiBwbGFjZXMsIHRoZSB2aWMgYW5kIHRoZW4KKyAqIHRoZSB0aW1lciBibG9jay4gV2UgdGFrZSB0aGUgVklDIGFzIHRoZSBiYXNlIGF0IHRoZSBtb21lbnQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdTMyIHMzYzI0eHhfb3N0aW1lcl9wZW5kaW5nKHZvaWQpCit7CisJdTMyIHBlbmQgPSBfX3Jhd19yZWFkbChWQV9WSUMwICsgVklDX1JBV19TVEFUVVMpOworCXJldHVybiBwZW5kICYgMSA8PCAoSVJRX1RJTUVSNF9WSUMgLSBTM0M2NFhYX0lSUV9WSUMwKDApKTsKK30KKworI2RlZmluZSBUSUNLX01BWAkoMHhmZmZmZmZmZikKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfNjQwMF9USUNLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjJlOGNkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qIGFyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvdGltZXguaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzY0MDAgLSB0aW1lIHBhcmFtZXRlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1RJTUVYX0gKKyNkZWZpbmUgX19BU01fQVJDSF9USU1FWF9ICisKKy8qIENMT0NLX1RJQ0tfUkFURSBuZWVkcyB0byBiZSBldmFsdWF0YWJsZSBieSB0aGUgY3BwLCBzbyBtYWtpbmcgaXQKKyAqIGEgdmFyaWFibGUgaXMgdXNlbGVzcy4gSXQgc2VlbXMgYXMgbG9uZyBhcyB3ZSBtYWtlIG91ciB0aW1lcnMgYW4KKyAqIGV4YWN0IG11bHRpcGxlIG9mIEhaLCBhbnkgdmFsdWUgdGhhdCBtYWtlcyBhIDEtPjEgY29ycmVzcG9uZGVuY2UKKyAqIGZvciB0aGUgdGltZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyB0by9mcm9tIGppZmZpZXMgaXMgYWNjZXB0YWJsZS4KKyovCisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFIDEyMDAwMDAwCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1RJTUVYX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDExZWYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTAsMCArMSwyMCBAQAorLyogYXJjaC9hcm0vbWFjaC1zM2M2NHh4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKyAqCisgKiBmcm9tIGFyY2gvYXJtL21hY2gtaW9wM3h4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgU2ltdGVjIEVsZWN0cm9uaWNzIDxsaW51eEBzaW10ZWMuY28udWs+CisgKgkJICAgICAgaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvU1dMSU5VWC8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFMzQzY0MDAgdm1hbGxvYyBkZWZpbml0aW9uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVk1BTExPQ19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVk1BTExPQ19ICisKKyNkZWZpbmUgVk1BTExPQ19FTkQJICAoMHhFMDAwMDAwMCkKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVk1BTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaXJxLWVpbnQuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pcnEtZWludC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2ODJkNmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaXJxLWVpbnQuYwpAQCAtMCwwICsxLDIxMyBAQAorLyogYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS1laW50LmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0M2NFhYIC0gSW50ZXJydXB0IGhhbmRsaW5nIGZvciBJUlFfRUlOVCh4KQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3ZpYy5oPgorCisjaW5jbHVkZSA8cGxhdC9yZWdzLWlycXR5cGUuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3BtLmg+CisKKyNkZWZpbmUgZWludF9vZmZzZXQoaXJxKQkoKGlycSkgLSBJUlFfRUlOVCgwKSkKKyNkZWZpbmUgZWludF9pcnFfdG9fYml0KGlycSkJKDEgPDwgZWludF9vZmZzZXQoaXJxKSkKKworc3RhdGljIGlubGluZSB2b2lkIHMzY19pcnFfZWludF9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdTMyIG1hc2s7CisKKwltYXNrID0gX19yYXdfcmVhZGwoUzNDNjRYWF9FSU5UME1BU0spOworCW1hc2sgfD0gZWludF9pcnFfdG9fYml0KGlycSk7CisJX19yYXdfd3JpdGVsKG1hc2ssIFMzQzY0WFhfRUlOVDBNQVNLKTsKK30KKworc3RhdGljIHZvaWQgczNjX2lycV9laW50X3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXUzMiBtYXNrOworCisJbWFzayA9IF9fcmF3X3JlYWRsKFMzQzY0WFhfRUlOVDBNQVNLKTsKKwltYXNrICY9IH5laW50X2lycV90b19iaXQoaXJxKTsKKwlfX3Jhd193cml0ZWwobWFzaywgUzNDNjRYWF9FSU5UME1BU0spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgczNjX2lycV9laW50X2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCV9fcmF3X3dyaXRlbChlaW50X2lycV90b19iaXQoaXJxKSwgUzNDNjRYWF9FSU5UMFBFTkQpOworfQorCitzdGF0aWMgdm9pZCBzM2NfaXJxX2VpbnRfbWFza2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCS8qIGNvbXBpbGVyIHNob3VsZCBpbi1saW5lIHRoZXNlICovCisJczNjX2lycV9laW50X21hc2soaXJxKTsKKwlzM2NfaXJxX2VpbnRfYWNrKGlycSk7Cit9CisKK3N0YXRpYyBpbnQgczNjX2lycV9laW50X3NldF90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQoreworCWludCBvZmZzID0gZWludF9vZmZzZXQoaXJxKTsKKwlpbnQgcGluLCBwaW5fdmFsOworCWludCBzaGlmdDsKKwl1MzIgY3RybCwgbWFzazsKKwl1MzIgbmV3dmFsdWUgPSAwOworCXZvaWQgX19pb21lbSAqcmVnOworCisJaWYgKG9mZnMgPiAyNykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAob2ZmcyA8PSAxNSkKKwkJcmVnID0gUzNDNjRYWF9FSU5UMENPTjA7CisJZWxzZQorCQlyZWcgPSBTM0M2NFhYX0VJTlQwQ09OMTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSVJRX1RZUEVfTk9ORToKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gZWRnZSBzZXR0aW5nIVxuIik7CisJCWJyZWFrOworCisJY2FzZSBJUlFfVFlQRV9FREdFX1JJU0lORzoKKwkJbmV3dmFsdWUgPSBTM0MyNDEwX0VYVElOVF9SSVNFRURHRTsKKwkJYnJlYWs7CisKKwljYXNlIElSUV9UWVBFX0VER0VfRkFMTElORzoKKwkJbmV3dmFsdWUgPSBTM0MyNDEwX0VYVElOVF9GQUxMRURHRTsKKwkJYnJlYWs7CisKKwljYXNlIElSUV9UWVBFX0VER0VfQk9USDoKKwkJbmV3dmFsdWUgPSBTM0MyNDEwX0VYVElOVF9CT1RIRURHRTsKKwkJYnJlYWs7CisKKwljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoKKwkJbmV3dmFsdWUgPSBTM0MyNDEwX0VYVElOVF9MT1dMRVY7CisJCWJyZWFrOworCisJY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgorCQluZXd2YWx1ZSA9IFMzQzI0MTBfRVhUSU5UX0hJTEVWOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiTm8gc3VjaCBpcnEgdHlwZSAlZCIsIHR5cGUpOworCQlyZXR1cm4gLTE7CisJfQorCisJaWYgKG9mZnMgPD0gMTUpCisJCXNoaWZ0ID0gKG9mZnMgLyAyKSAqIDQ7CisJZWxzZQorCQlzaGlmdCA9ICgob2ZmcyAtIDE2KSAvIDIpICogNDsKKwltYXNrID0gMHg3IDw8IHNoaWZ0OworCisJY3RybCA9IF9fcmF3X3JlYWRsKHJlZyk7CisJY3RybCAmPSB+bWFzazsKKwljdHJsIHw9IG5ld3ZhbHVlIDw8IHNoaWZ0OworCV9fcmF3X3dyaXRlbChjdHJsLCByZWcpOworCisJLyogc2V0IHRoZSBHUElPIHBpbiBhcHByb3ByaWF0ZWx5ICovCisKKwlpZiAob2ZmcyA8IDE2KSB7CisJCXBpbiA9IFMzQzY0WFhfR1BOKG9mZnMpOworCQlwaW5fdmFsID0gUzNDX0dQSU9fU0ZOKDIpOworCX0gZWxzZSBpZiAob2ZmcyA8IDIzKSB7CisJCXBpbiA9IFMzQzY0WFhfR1BMKG9mZnMgKyA4IC0gMTYpOworCQlwaW5fdmFsID0gUzNDX0dQSU9fU0ZOKDMpOworCX0gZWxzZSB7CisJCXBpbiA9IFMzQzY0WFhfR1BNKG9mZnMgLSAyMyk7CisJCXBpbl92YWwgPSBTM0NfR1BJT19TRk4oMyk7CisJfQorCisJczNjX2dwaW9fY2ZncGluKHBpbiwgcGluX3ZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzM2NfaXJxX2VpbnQgPSB7CisJLm5hbWUJCT0gInMzYy1laW50IiwKKwkubWFzawkJPSBzM2NfaXJxX2VpbnRfbWFzaywKKwkudW5tYXNrCQk9IHMzY19pcnFfZWludF91bm1hc2ssCisJLm1hc2tfYWNrCT0gczNjX2lycV9laW50X21hc2thY2ssCisJLmFjawkJPSBzM2NfaXJxX2VpbnRfYWNrLAorCS5zZXRfdHlwZQk9IHMzY19pcnFfZWludF9zZXRfdHlwZSwKKwkuc2V0X3dha2UJPSBzM2NfaXJxZXh0X3dha2UsCit9OworCisvKiBzM2NfaXJxX2RlbXV4X2VpbnQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRlbXV4ZXMgdGhlIElSUSBmcm9tIHRoZSBncm91cDAgZXh0ZXJuYWwgaW50ZXJydXB0cywKKyAqIGZyb20gSVJRX0VJTlQoMCkgdG8gSVJRX0VJTlQoMjcpLiBJdCBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmVkIGludG8KKyAqIHRoZSBzcGVjaWZpYyBoYW5kbGVycyBzM2NfaXJxX2RlbXV4X2VpbnRYX1kuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfaXJxX2RlbXV4X2VpbnQodW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgZW5kKQoreworCXUzMiBzdGF0dXMgPSBfX3Jhd19yZWFkbChTM0M2NFhYX0VJTlQwUEVORCk7CisJdTMyIG1hc2sgPSBfX3Jhd19yZWFkbChTM0M2NFhYX0VJTlQwTUFTSyk7CisJdW5zaWduZWQgaW50IGlycTsKKworCXN0YXR1cyAmPSB+bWFzazsKKwlzdGF0dXMgPj49IHN0YXJ0OworCXN0YXR1cyAmPSAoMSA8PCAoZW5kIC0gc3RhcnQgKyAxKSkgLSAxOworCisJZm9yIChpcnEgPSBJUlFfRUlOVChzdGFydCk7IGlycSA8PSBJUlFfRUlOVChlbmQpOyBpcnErKykgeworCQlpZiAoc3RhdHVzICYgMSkKKwkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOworCisJCXN0YXR1cyA+Pj0gMTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfZWludDBfMyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJczNjX2lycV9kZW11eF9laW50KDAsIDMpOworfQorCitzdGF0aWMgdm9pZCBzM2NfaXJxX2RlbXV4X2VpbnQ0XzExKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzM2NfaXJxX2RlbXV4X2VpbnQoNCwgMTEpOworfQorCitzdGF0aWMgdm9pZCBzM2NfaXJxX2RlbXV4X2VpbnQxMl8xOSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJczNjX2lycV9kZW11eF9laW50KDEyLCAxOSk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfZWludDIwXzI3KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzM2NfaXJxX2RlbXV4X2VpbnQoMjAsIDI3KTsKK30KKworc3RhdGljIGludCBfX2luaXQgczNjNjR4eF9pbml0X2lycV9laW50KHZvaWQpCit7CisJaW50IGlycTsKKworCWZvciAoaXJxID0gSVJRX0VJTlQoMCk7IGlycSA8PSBJUlFfRUlOVCgyNyk7IGlycSsrKSB7CisJCXNldF9pcnFfY2hpcChpcnEsICZzM2NfaXJxX2VpbnQpOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKKwkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOworCX0KKworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FSU5UMF8zLCBzM2NfaXJxX2RlbXV4X2VpbnQwXzMpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FSU5UNF8xMSwgczNjX2lycV9kZW11eF9laW50NF8xMSk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VJTlQxMl8xOSwgczNjX2lycV9kZW11eF9laW50MTJfMTkpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FSU5UMjBfMjcsIHMzY19pcnFfZGVtdXhfZWludDIwXzI3KTsKKworCXJldHVybiAwOworfQorCithcmNoX2luaXRjYWxsKHMzYzY0eHhfaW5pdF9pcnFfZWludCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaXJxLXBtLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaXJxLXBtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGExYmVjNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pcnEtcG0uYwpAQCAtMCwwICsxLDExMSBAQAorLyogYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS1wbS5jCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDNjRYWCAtIEludGVycnVwdCBoYW5kbGluZyBQb3dlciBNYW5hZ2VtZW50CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3MtdGltZXIuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZ3Bpby5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgorCisvKiBXZSBoYW5kbGVkIGFsbCB0aGUgSVJRIHR5cGVzIGluIHRoaXMgY29kZSwgdG8gc2F2ZSBoYXZpbmcgdG8gbWFrZSBzZXZlcmFsCisgKiBzbWFsbCBmaWxlcyB0byBoYW5kbGUgZWFjaCBkaWZmZXJlbnQgdHlwZSBzZXBhcmF0ZWx5LiBIYXZpbmcgdGhlIEVJTlRfR1JQCisgKiBjb2RlIGhlcmUgc2hvdWxkbid0IGJlIGFzIG11Y2ggYmxvYXQgYXMgdGhlIElSUSB0YWJsZSBzcGFjZSBuZWVkZWQgd2hlbgorICogdGhleSBhcmUgZW5hYmxlZC4gVGhlIGFkZGVkIGJlbmVmaXQgaXMgd2UgZW5zdXJlIHRoYXQgdGhlc2UgcmVnaXN0ZXJzIGFyZQorICogaW4gdGhlIHNhbWUgc3RhdGUgYXMgd2Ugc3VzcGVuZGVkLgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBpcnFfc2F2ZVtdID0geworCVNBVkVfSVRFTShTM0M2NFhYX1BSSU9SSVRZKSwKKwlTQVZFX0lURU0oUzNDNjRYWF9FSU5UMENPTjApLAorCVNBVkVfSVRFTShTM0M2NFhYX0VJTlQwQ09OMSksCisJU0FWRV9JVEVNKFMzQzY0WFhfRUlOVDBGTFRDT04wKSwKKwlTQVZFX0lURU0oUzNDNjRYWF9FSU5UMEZMVENPTjEpLAorCVNBVkVfSVRFTShTM0M2NFhYX0VJTlQwRkxUQ09OMiksCisJU0FWRV9JVEVNKFMzQzY0WFhfRUlOVDBGTFRDT04zKSwKKwlTQVZFX0lURU0oUzNDNjRYWF9FSU5UME1BU0spLAorCVNBVkVfSVRFTShTM0M2NFhYX1RJTlRfQ1NUQVQpLAorfTsKKworc3RhdGljIHN0cnVjdCBpcnFfZ3JwX3NhdmUgeworCXUzMglmbHRjb247CisJdTMyCWNvbjsKKwl1MzIJbWFzazsKK30gZWludF9ncnBfc2F2ZVs1XTsKKworc3RhdGljIHUzMiBpcnFfdWFydF9tYXNrW0NPTkZJR19TRVJJQUxfU0FNU1VOR19VQVJUU107CisKK3N0YXRpYyBpbnQgczNjNjR4eF9pcnFfcG1fc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGlycV9ncnBfc2F2ZSAqZ3JwID0gZWludF9ncnBfc2F2ZTsKKwlpbnQgaTsKKworCVMzQ19QTURCRygiJXM6IHN1c3BlbmRpbmcgSVJRc1xuIiwgX19mdW5jX18pOworCisJczNjX3BtX2RvX3NhdmUoaXJxX3NhdmUsIEFSUkFZX1NJWkUoaXJxX3NhdmUpKTsKKworCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFM7IGkrKykKKwkJaXJxX3VhcnRfbWFza1tpXSA9IF9fcmF3X3JlYWRsKFMzQ19WQV9VQVJUeChpKSArIFMzQzY0WFhfVUlOVE0pOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZWludF9ncnBfc2F2ZSk7IGkrKywgZ3JwKyspIHsKKwkJZ3JwLT5jb24gPSBfX3Jhd19yZWFkbChTM0M2NFhYX0VJTlQxMkNPTiArIChpICogNCkpOworCQlncnAtPm1hc2sgPSBfX3Jhd19yZWFkbChTM0M2NFhYX0VJTlQxMk1BU0sgKyAoaSAqIDQpKTsKKwkJZ3JwLT5mbHRjb24gPSBfX3Jhd19yZWFkbChTM0M2NFhYX0VJTlQxMkZMVENPTiArIChpICogNCkpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzY0eHhfaXJxX3BtX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpcnFfZ3JwX3NhdmUgKmdycCA9IGVpbnRfZ3JwX3NhdmU7CisJaW50IGk7CisKKwlTM0NfUE1EQkcoIiVzOiByZXN1bWluZyBJUlFzXG4iLCBfX2Z1bmNfXyk7CisKKwlzM2NfcG1fZG9fcmVzdG9yZShpcnFfc2F2ZSwgQVJSQVlfU0laRShpcnFfc2F2ZSkpOworCisJZm9yIChpID0gMDsgaSA8IENPTkZJR19TRVJJQUxfU0FNU1VOR19VQVJUUzsgaSsrKQorCQlfX3Jhd193cml0ZWwoaXJxX3VhcnRfbWFza1tpXSwgUzNDX1ZBX1VBUlR4KGkpICsgUzNDNjRYWF9VSU5UTSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShlaW50X2dycF9zYXZlKTsgaSsrLCBncnArKykgeworCQlfX3Jhd193cml0ZWwoZ3JwLT5jb24sIFMzQzY0WFhfRUlOVDEyQ09OICsgKGkgKiA0KSk7CisJCV9fcmF3X3dyaXRlbChncnAtPm1hc2ssIFMzQzY0WFhfRUlOVDEyTUFTSyArIChpICogNCkpOworCQlfX3Jhd193cml0ZWwoZ3JwLT5mbHRjb24sIFMzQzY0WFhfRUlOVDEyRkxUQ09OICsgKGkgKiA0KSk7CisJfQorCisJUzNDX1BNREJHKCIlczogSVJRIGNvbmZpZ3VyYXRpb24gcmVzdG9yZWRcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzY0eHhfaXJxX2RyaXZlciA9IHsKKwkuc3VzcGVuZCA9IHMzYzY0eHhfaXJxX3BtX3N1c3BlbmQsCisJLnJlc3VtZQkgPSBzM2M2NHh4X2lycV9wbV9yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzM2M2NHh4X2lycV9wbV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzY0eHhfc3lzY2xhc3MsICZzM2M2NHh4X2lycV9kcml2ZXIpOworfQorCithcmNoX2luaXRjYWxsKHMzYzY0eHhfaXJxX3BtX2luaXQpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaXJxLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdhMTQ1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9pcnEuYwpAQCAtMCwwICsxLDY5IEBACisvKiBhcmNoL2FybS9wbGF0LXMzYzY0eHgvaXJxLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0M2NFhYIC0gSW50ZXJydXB0IGhhbmRsaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3ZpYy5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxwbGF0L2lycS12aWMtdGltZXIuaD4KKyNpbmNsdWRlIDxwbGF0L2lycS11YXJ0Lmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKworc3RhdGljIHN0cnVjdCBzM2NfdWFydF9pcnEgdWFydF9pcnFzW10gPSB7CisJWzBdID0geworCQkucmVncwkJPSBTM0NfVkFfVUFSVDAsCisJCS5iYXNlX2lycQk9IElSUV9TM0NVQVJUX0JBU0UwLAorCQkucGFyZW50X2lycQk9IElSUV9VQVJUMCwKKwl9LAorCVsxXSA9IHsKKwkJLnJlZ3MJCT0gUzNDX1ZBX1VBUlQxLAorCQkuYmFzZV9pcnEJPSBJUlFfUzNDVUFSVF9CQVNFMSwKKwkJLnBhcmVudF9pcnEJPSBJUlFfVUFSVDEsCisJfSwKKwlbMl0gPSB7CisJCS5yZWdzCQk9IFMzQ19WQV9VQVJUMiwKKwkJLmJhc2VfaXJxCT0gSVJRX1MzQ1VBUlRfQkFTRTIsCisJCS5wYXJlbnRfaXJxCT0gSVJRX1VBUlQyLAorCX0sCisJWzNdID0geworCQkucmVncwkJPSBTM0NfVkFfVUFSVDMsCisJCS5iYXNlX2lycQk9IElSUV9TM0NVQVJUX0JBU0UzLAorCQkucGFyZW50X2lycQk9IElSUV9VQVJUMywKKwl9LAorfTsKKworCit2b2lkIF9faW5pdCBzM2M2NHh4X2luaXRfaXJxKHUzMiB2aWMwX3ZhbGlkLCB1MzIgdmljMV92YWxpZCkKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGluaXRpYWxpc2luZyBpbnRlcnJ1cHRzXG4iLCBfX2Z1bmNfXyk7CisKKwkvKiBpbml0aWFsaXNlIHRoZSBwYWlyIG9mIFZJQ3MgKi8KKwl2aWNfaW5pdChWQV9WSUMwLCBJUlFfVklDMF9CQVNFLCB2aWMwX3ZhbGlkLCAwKTsKKwl2aWNfaW5pdChWQV9WSUMxLCBJUlFfVklDMV9CQVNFLCB2aWMxX3ZhbGlkLCAwKTsKKworCS8qIGFkZCB0aGUgdGltZXIgc3ViLWlycXMgKi8KKworCXMzY19pbml0X3ZpY190aW1lcl9pcnEoSVJRX1RJTUVSMF9WSUMsIElSUV9USU1FUjApOworCXMzY19pbml0X3ZpY190aW1lcl9pcnEoSVJRX1RJTUVSMV9WSUMsIElSUV9USU1FUjEpOworCXMzY19pbml0X3ZpY190aW1lcl9pcnEoSVJRX1RJTUVSMl9WSUMsIElSUV9USU1FUjIpOworCXMzY19pbml0X3ZpY190aW1lcl9pcnEoSVJRX1RJTUVSM19WSUMsIElSUV9USU1FUjMpOworCXMzY19pbml0X3ZpY190aW1lcl9pcnEoSVJRX1RJTUVSNF9WSUMsIElSUV9USU1FUjQpOworCisJczNjX2luaXRfdWFydF9pcnFzKHVhcnRfaXJxcywgQVJSQVlfU0laRSh1YXJ0X2lycXMpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9tYWNoLWFudzY0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9tYWNoLWFudzY0MTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTBiYjI0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtYW53NjQxMC5jCkBAIC0wLDAgKzEsMjQ1IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1hbnc2NDEwLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICogQ29weXJpZ2h0IDIwMDkgS3dhbmd3b28gTGVlCisgKiAJS3dhbmd3b28gTGVlIDxrd2FuZ3dvby5sZWVAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtOTAwMC5oPgorCisjaW5jbHVkZSA8dmlkZW8vcGxhdGZvcm1fbGNkLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWZiLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvaWljLmg+CisjaW5jbHVkZSA8cGxhdC9mYi5oPgorCisjaW5jbHVkZSA8bWFjaC9zM2M2NDEwLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtbW9kZW0uaD4KKworLyogRE05MDAwICovCisjZGVmaW5lIEFOVzY0MTBfUEFfRE05MDAwCSgweDE4MDAwMDAwKQorCisvKiBBIGhhcmR3YXJlIGJ1ZmZlciB0byBjb250cm9sIGV4dGVybmFsIGRldmljZXMgaXMgbWFwcGVkIGF0IDB4MzAwMDAwMDAuCisgKiBJdCBjYW4gbm90IGJlIHJlYWQuIFNvIGN1cnJlbnQgc3RhdHVzIG11c3QgYmUga2VwdCBpbiBhbnc2NDEwX2V4dGRldl9zdGF0dXMuCisgKi8KKyNkZWZpbmUgQU5XNjQxMF9WQV9FWFRERVYJUzNDX0FERFIoMHgwMjAwMDAwMCkKKyNkZWZpbmUgQU5XNjQxMF9QQV9FWFRERVYJKDB4MzAwMDAwMDApCisKKyNkZWZpbmUgQU5XNjQxMF9FTl9ETTkwMDAJKDE8PDExKQorI2RlZmluZSBBTlc2NDEwX0VOX0xDRAkJKDE8PDE0KQorCitzdGF0aWMgX191MzIgYW53NjQxMF9leHRkZXZfc3RhdHVzOworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBhbnc2NDEwX3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJICAgICA9IDAsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IDB4M2M1LAorCQkudWxjb24JICAgICA9IDB4MDMsCisJCS51ZmNvbgkgICAgID0gMHg1MSwKKwl9LAorCVsxXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMSwKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gMHgzYzUsCisJCS51bGNvbgkgICAgID0gMHgwMywKKwkJLnVmY29uCSAgICAgPSAweDUxLAorCX0sCit9OworCisvKiBmcmFtZWJ1ZmZlciBhbmQgTENEIHNldHVwLiAqLworc3RhdGljIHZvaWQgX19pbml0IGFudzY0MTBfbGNkX21vZGVfc2V0KHZvaWQpCit7CisJdTMyIHRtcDsKKworCS8qIHNldCB0aGUgTENEIHR5cGUgKi8KKwl0bXAgPSBfX3Jhd19yZWFkbChTM0M2NFhYX1NQQ09OKTsKKwl0bXAgJj0gflMzQzY0WFhfU1BDT05fTENEX1NFTF9NQVNLOworCXRtcCB8PSBTM0M2NFhYX1NQQ09OX0xDRF9TRUxfUkdCOworCV9fcmF3X3dyaXRlbCh0bXAsIFMzQzY0WFhfU1BDT04pOworCisJLyogcmVtb3ZlIHRoZSBMQ0QgYnlwYXNzICovCisJdG1wID0gX19yYXdfcmVhZGwoUzNDNjRYWF9NT0RFTV9NSUZQQ09OKTsKKwl0bXAgJj0gfk1JRlBDT05fTENEX0JZUEFTUzsKKwlfX3Jhd193cml0ZWwodG1wLCBTM0M2NFhYX01PREVNX01JRlBDT04pOworfQorCisvKiBHUEYxID0gTENEIHBhbmVsIHBvd2VyCisgKiBHUEY0ID0gTENEIGJhY2tsaWdodCBjb250cm9sCisgKi8KK3N0YXRpYyB2b2lkIGFudzY0MTBfbGNkX3Bvd2VyX3NldChzdHJ1Y3QgcGxhdF9sY2RfZGF0YSAqcGQsCisJCQkJICAgdW5zaWduZWQgaW50IHBvd2VyKQoreworCWlmIChwb3dlcikgeworCQlhbnc2NDEwX2V4dGRldl9zdGF0dXMgfD0gKEFOVzY0MTBfRU5fTENEIDw8IDE2KTsKKwkJX19yYXdfd3JpdGVsKGFudzY0MTBfZXh0ZGV2X3N0YXR1cywgQU5XNjQxMF9WQV9FWFRERVYpOworCisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0M2NFhYX0dQRigxKSwgMSk7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0M2NFhYX0dQRig0KSwgMSk7CisJfSBlbHNlIHsKKwkJYW53NjQxMF9leHRkZXZfc3RhdHVzICY9IH4oQU5XNjQxMF9FTl9MQ0QgPDwgMTYpOworCQlfX3Jhd193cml0ZWwoYW53NjQxMF9leHRkZXZfc3RhdHVzLCBBTlc2NDEwX1ZBX0VYVERFVik7CisKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzY0WFhfR1BGKDEpLCAwKTsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzY0WFhfR1BGKDQpLCAwKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9sY2RfZGF0YSBhbnc2NDEwX2xjZF9wb3dlcl9kYXRhID0geworCS5zZXRfcG93ZXIJPSBhbnc2NDEwX2xjZF9wb3dlcl9zZXQsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBhbnc2NDEwX2xjZF9wb3dlcmRldiA9IHsKKwkubmFtZQkJCT0gInBsYXRmb3JtLWxjZCIsCisJLmRldi5wYXJlbnQJCT0gJnMzY19kZXZpY2VfZmIuZGV2LAorCS5kZXYucGxhdGZvcm1fZGF0YQk9ICZhbnc2NDEwX2xjZF9wb3dlcl9kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2NfZmJfcGRfd2luIGFudzY0MTBfZmJfd2luMCA9IHsKKwkvKiB0aGlzIGlzIHRvIGVuc3VyZSB3ZSB1c2Ugd2luMCAqLworCS53aW5fbW9kZQk9IHsKKwkJLnBpeGNsb2NrCT0gNDEwOTQsCisJCS5sZWZ0X21hcmdpbgk9IDgsCisJCS5yaWdodF9tYXJnaW4JPSAxMywKKwkJLnVwcGVyX21hcmdpbgk9IDcsCisJCS5sb3dlcl9tYXJnaW4JPSA1LAorCQkuaHN5bmNfbGVuCT0gMywKKwkJLnZzeW5jX2xlbgk9IDEsCisJCS54cmVzCQk9IDgwMCwKKwkJLnlyZXMJCT0gNDgwLAorCX0sCisJLm1heF9icHAJPSAzMiwKKwkuZGVmYXVsdF9icHAJPSAxNiwKK307CisKKy8qIDQwNTU2NiBjbG9ja3MgcGVyIGZyYW1lID0+IDYwSHogcmVmcmVzaCByZXF1aXJlcyAyNDMzMzk2MEh6IGNsb2NrICovCitzdGF0aWMgc3RydWN0IHMzY19mYl9wbGF0ZGF0YSBhbnc2NDEwX2xjZF9wZGF0YSBfX2luaXRkYXRhID0geworCS5zZXR1cF9ncGlvCT0gczNjNjR4eF9mYl9ncGlvX3NldHVwXzI0YnBwLAorCS53aW5bMF0JCT0gJmFudzY0MTBfZmJfd2luMCwKKwkudmlkY29uMAk9IFZJRENPTjBfVklET1VUX1JHQiB8IFZJRENPTjBfUE5STU9ERV9SR0IsCisJLnZpZGNvbjEJPSBWSURDT04xX0lOVl9IU1lOQyB8IFZJRENPTjFfSU5WX1ZTWU5DLAorfTsKKworLyogRE05MDAwQUVQIDEwLzEwMCBldGhlcm5ldCBjb250cm9sbGVyICovCitzdGF0aWMgdm9pZCBfX2luaXQgYW53NjQxMF9kbTkwMDBfZW5hYmxlKHZvaWQpCit7CisJYW53NjQxMF9leHRkZXZfc3RhdHVzIHw9IChBTlc2NDEwX0VOX0RNOTAwMCA8PCAxNik7CisJX19yYXdfd3JpdGVsKGFudzY0MTBfZXh0ZGV2X3N0YXR1cywgQU5XNjQxMF9WQV9FWFRERVYpOworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGFudzY0MTBfZG05MDAwX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBBTlc2NDEwX1BBX0RNOTAwMCwKKwkJLmVuZCAgID0gQU5XNjQxMF9QQV9ETTkwMDAgKyAzLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ID0gQU5XNjQxMF9QQV9ETTkwMDAgKyA0LAorCQkuZW5kICAgPSBBTlc2NDEwX1BBX0RNOTAwMCArIDQgKyA1MDAsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzJdID0geworCQkuc3RhcnQgPSBJUlFfRUlOVCgxNSksCisJCS5lbmQgICA9IElSUV9FSU5UKDE1KSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEgfCBJUlFGX1RSSUdHRVJfSElHSCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBkbTkwMDBfcGxhdF9kYXRhIGFudzY0MTBfZG05MDAwX3BkYXRhID0geworCS5mbGFncwkgID0gKERNOTAwMF9QTEFURl8xNkJJVE9OTFkgfCBETTkwMDBfUExBVEZfTk9fRUVQUk9NKSwKKwkvKiBkZXZfYWRkciBjYW4gYmUgc2V0IHRvIHByb3ZpZGUgaHdhZGRyLiAqLworfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgYW53NjQxMF9kZXZpY2VfZXRoID0geworCS5uYW1lCT0gImRtOTAwMCIsCisJLmlkCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGFudzY0MTBfZG05MDAwX3Jlc291cmNlKSwKKwkucmVzb3VyY2UJPSBhbnc2NDEwX2RtOTAwMF9yZXNvdXJjZSwKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YSAgPSAmYW53NjQxMF9kbTkwMDBfcGRhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgYW53NjQxMF9pb2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylBTlc2NDEwX1ZBX0VYVERFViwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFOVzY0MTBfUEFfRVhUREVWKSwKKwkJLmxlbmd0aAkJPSBTWl82NEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmFudzY0MTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnMzY19kZXZpY2VfZmIsCisJJmFudzY0MTBfbGNkX3Bvd2VyZGV2LAorCSZhbnc2NDEwX2RldmljZV9ldGgsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYW53NjQxMF9tYXBfaW8odm9pZCkKK3sKKwlzM2M2NHh4X2luaXRfaW8oYW53NjQxMF9pb2Rlc2MsIEFSUkFZX1NJWkUoYW53NjQxMF9pb2Rlc2MpKTsKKwlzM2MyNHh4X2luaXRfY2xvY2tzKDEyMDAwMDAwKTsKKwlzM2MyNHh4X2luaXRfdWFydHMoYW53NjQxMF91YXJ0Y2ZncywgQVJSQVlfU0laRShhbnc2NDEwX3VhcnRjZmdzKSk7CisKKwlhbnc2NDEwX2xjZF9tb2RlX3NldCgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgYW53NjQxMF9tYWNoaW5lX2luaXQodm9pZCkKK3sKKwlzM2NfZmJfc2V0X3BsYXRkYXRhKCZhbnc2NDEwX2xjZF9wZGF0YSk7CisKKwlncGlvX3JlcXVlc3QoUzNDNjRYWF9HUEYoMSksICJwYW5lbCBwb3dlciIpOworCWdwaW9fcmVxdWVzdChTM0M2NFhYX0dQRig0KSwgIkxDRCBiYWNrbGlnaHQiKTsKKworCWFudzY0MTBfZG05MDAwX2VuYWJsZSgpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoYW53NjQxMF9kZXZpY2VzLCBBUlJBWV9TSVpFKGFudzY0MTBfZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKEFOVzY0MTAsICJBJlc2NDEwIikKKwkvKiBNYWludGFpbmVyOiBLd2FuZ3dvbyBMZWUgPGt3YW5nd29vLmxlZUBnbWFpbC5jb20+ICovCisJLnBoeXNfaW8JPSBTM0NfUEFfVUFSVCAmIDB4ZmZmMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKCgodTMyKVMzQ19WQV9VQVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gUzNDNjRYWF9QQV9TRFJBTSArIDB4MTAwLAorCisJLmluaXRfaXJxCT0gczNjNjQxMF9pbml0X2lycSwKKwkubWFwX2lvCQk9IGFudzY0MTBfbWFwX2lvLAorCS5pbml0X21hY2hpbmUJPSBhbnc2NDEwX21hY2hpbmVfaW5pdCwKKwkudGltZXIJCT0gJnMzYzI0eHhfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtaG10LmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1obXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODc0NDFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtaG10LmMKQEAgLTAsMCArMSwyNzYgQEAKKy8qIG1hY2gtaG10LmMgLSBQbGF0Zm9ybSBjb2RlIGZvciBBaXJnb28gSE1UCisgKgorICogQ29weXJpZ2h0IDIwMDkgUGV0ZXIgS29yc2dhYXJkIDxqYWNtZXRAc3Vuc2l0ZS5kaz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L3B3bV9iYWNrbGlnaHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZmIuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9paWMuaD4KKyNpbmNsdWRlIDxwbGF0L2ZiLmg+CisjaW5jbHVkZSA8cGxhdC9uYW5kLmg+CisKKyNpbmNsdWRlIDxtYWNoL3MzYzY0MTAuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKworI2RlZmluZSBVQ09OIFMzQzI0MTBfVUNPTl9ERUZBVUxUCisjZGVmaW5lIFVMQ09OIChTM0MyNDEwX0xDT05fQ1M4IHwgUzNDMjQxMF9MQ09OX1BOT05FKQorI2RlZmluZSBVRkNPTiAoUzNDMjQxMF9VRkNPTl9SWFRSSUc4IHwgUzNDMjQxMF9VRkNPTl9GSUZPTU9ERSkKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgaG10X3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJICAgICA9IDAsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfSwKKwlbMV0gPSB7CisJCS5od3BvcnQJICAgICA9IDEsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfSwKKwlbMl0gPSB7CisJCS5od3BvcnQJICAgICA9IDIsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfSwKK307CisKK3N0YXRpYyBpbnQgaG10X2JsX2luaXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwlyZXQgPSBncGlvX3JlcXVlc3QoUzNDNjRYWF9HUEIoNCksICJsY2QgYmFja2xpZ2h0IGVuYWJsZSIpOworCWlmICghcmV0KQorCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDNjRYWF9HUEIoNCksIDApOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBobXRfYmxfbm90aWZ5KHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGJyaWdodG5lc3MpCit7CisJLyoKKwkgKiB0cmFuc2xhdGUgZnJvbSBDSUVMVVYvQ0lFTEFCIEwqLT5icmlnaHRuZXNzLCBFLkcuIGZyb20KKwkgKiBwZXJjZWl2ZWQgbHVtaW5hbmNlIHRvIGxpZ2h0IG91dHB1dC4gQXNzdW1lcyByYW5nZSAwLi4yNTYwMAorCSAqLworCWlmIChicmlnaHRuZXNzIDwgMHg4MDApIHsKKwkJLyogWSA9IFluICogTCAvIDkwMy4zICovCisJCWJyaWdodG5lc3MgPSAoMTAwKjI1NiAqIGJyaWdodG5lc3MgKyAyMzEyNDUvMikgLyAyMzEyNDU7CisJfSBlbHNlIHsKKwkJLyogWSA9IFluICogKChMICsgMTYpIC8gMTE2ICleMyAqLworCQlpbnQgdCA9IChicmlnaHRuZXNzKjQgKyAxNioxMDI0ICsgNTgpLzExNjsKKwkJYnJpZ2h0bmVzcyA9IDI1ICogKCh0ICogdCAqIHQgKyAweDEwMDAwMC8yKSAvIDB4MTAwMDAwKTsKKwl9CisKKwlncGlvX3NldF92YWx1ZShTM0M2NFhYX0dQQig0KSwgYnJpZ2h0bmVzcyk7CisKKwlyZXR1cm4gYnJpZ2h0bmVzczsKK30KKworc3RhdGljIHZvaWQgaG10X2JsX2V4aXQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWdwaW9fZnJlZShTM0M2NFhYX0dQQig0KSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fcHdtX2JhY2tsaWdodF9kYXRhIGhtdF9iYWNrbGlnaHRfZGF0YSA9IHsKKwkucHdtX2lkCQk9IDEsCisJLm1heF9icmlnaHRuZXNzCT0gMTAwICogMjU2LAorCS5kZnRfYnJpZ2h0bmVzcwk9IDQwICogMjU2LAorCS5wd21fcGVyaW9kX25zCT0gMTAwMDAwMDAwMCAvICgxMDAgKiAyNTYgKiAyMCksCisJLmluaXQJCT0gaG10X2JsX2luaXQsCisJLm5vdGlmeQkJPSBobXRfYmxfbm90aWZ5LAorCS5leGl0CQk9IGhtdF9ibF9leGl0LAorCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBobXRfYmFja2xpZ2h0X2RldmljZSA9IHsKKwkubmFtZQkJPSAicHdtLWJhY2tsaWdodCIsCisJLmRldgkJPSB7CisJCS5wYXJlbnQJPSAmczNjX2RldmljZV90aW1lclsxXS5kZXYsCisJCS5wbGF0Zm9ybV9kYXRhID0gJmhtdF9iYWNrbGlnaHRfZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzM2NfZmJfcGRfd2luIGhtdF9mYl93aW4wID0geworCS53aW5fbW9kZQk9IHsKKwkJLnBpeGNsb2NrCT0gNDEwOTQsCisJCS5sZWZ0X21hcmdpbgk9IDgsCisJCS5yaWdodF9tYXJnaW4JPSAxMywKKwkJLnVwcGVyX21hcmdpbgk9IDcsCisJCS5sb3dlcl9tYXJnaW4JPSA1LAorCQkuaHN5bmNfbGVuCT0gMywKKwkJLnZzeW5jX2xlbgk9IDEsCisJCS54cmVzCQk9IDgwMCwKKwkJLnlyZXMJCT0gNDgwLAorCX0sCisJLm1heF9icHAJPSAzMiwKKwkuZGVmYXVsdF9icHAJPSAxNiwKK307CisKKy8qIDQwNTU2NiBjbG9ja3MgcGVyIGZyYW1lID0+IDYwSHogcmVmcmVzaCByZXF1aXJlcyAyNDMzMzk2MEh6IGNsb2NrICovCitzdGF0aWMgc3RydWN0IHMzY19mYl9wbGF0ZGF0YSBobXRfbGNkX3BkYXRhIF9faW5pdGRhdGEgPSB7CisJLnNldHVwX2dwaW8JPSBzM2M2NHh4X2ZiX2dwaW9fc2V0dXBfMjRicHAsCisJLndpblswXQkJPSAmaG10X2ZiX3dpbjAsCisJLnZpZGNvbjAJPSBWSURDT04wX1ZJRE9VVF9SR0IgfCBWSURDT04wX1BOUk1PREVfUkdCLAorCS52aWRjb24xCT0gVklEQ09OMV9JTlZfSFNZTkMgfCBWSURDT04xX0lOVl9WU1lOQywKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiBobXRfbmFuZF9wYXJ0W10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJ1Ym9vdCIsCisJCS5zaXplCT0gU1pfNTEySywKKwkJLm9mZnNldAk9IDAsCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lCT0gInVib290LWVudjEiLAorCQkuc2l6ZQk9IFNaXzI1NkssCisJCS5vZmZzZXQJPSBTWl81MTJLLAorCX0sCisJWzJdID0geworCQkubmFtZQk9ICJ1Ym9vdC1lbnYyIiwKKwkJLnNpemUJPSBTWl8yNTZLLAorCQkub2Zmc2V0CT0gU1pfNTEySyArIFNaXzI1NkssCisJfSwKKwlbM10gPSB7CisJCS5uYW1lCT0gImtlcm5lbCIsCisJCS5zaXplCT0gU1pfMk0sCisJCS5vZmZzZXQJPSBTWl8xTSwKKwl9LAorCVs0XSA9IHsKKwkJLm5hbWUJPSAicm9vdGZzIiwKKwkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAorCQkub2Zmc2V0CT0gU1pfMU0gKyBTWl8yTSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX25hbmRfc2V0IGhtdF9uYW5kX3NldHNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCQk9ICJuYW5kIiwKKwkJLm5yX2NoaXBzCT0gMSwKKwkJLm5yX3BhcnRpdGlvbnMJPSBBUlJBWV9TSVpFKGhtdF9uYW5kX3BhcnQpLAorCQkucGFydGl0aW9ucwk9IGhtdF9uYW5kX3BhcnQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9uYW5kIGhtdF9uYW5kX2luZm8gPSB7CisJLnRhY2xzCQk9IDI1LAorCS50d3JwaDAJCT0gNTUsCisJLnR3cnBoMQkJPSA0MCwKKwkubnJfc2V0cwk9IEFSUkFZX1NJWkUoaG10X25hbmRfc2V0cyksCisJLnNldHMJCT0gaG10X25hbmRfc2V0cywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWQgaG10X2xlZHNbXSA9IHsKKwl7IC8qIGxlZnQgZnVuY3Rpb24ga2V5cyAqLworCQkubmFtZQkJCT0gImxlZnQ6Ymx1ZSIsCisJCS5ncGlvCQkJPSBTM0M2NFhYX0dQTygxMiksCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiZGVmYXVsdC1vbiIsCisJfSwKKwl7IC8qIHJpZ2h0IGZ1bmN0aW9uIGtleXMgLSByZWQgKi8KKwkJLm5hbWUJCQk9ICJyaWdodDpyZWQiLAorCQkuZ3BpbwkJCT0gUzNDNjRYWF9HUE8oMTMpLAorCX0sCisJeyAvKiByaWdodCBmdW5jdGlvbiBrZXlzIC0gZ3JlZW4gKi8KKwkJLm5hbWUJCQk9ICJyaWdodDpncmVlbiIsCisJCS5ncGlvCQkJPSBTM0M2NFhYX0dQTygxNCksCisJfSwKKwl7IC8qIHJpZ2h0IGZ1bmN0aW9uIGtleXMgLSBibHVlICovCisJCS5uYW1lCQkJPSAicmlnaHQ6Ymx1ZSIsCisJCS5ncGlvCQkJPSBTM0M2NFhYX0dQTygxNSksCisJCS5kZWZhdWx0X3RyaWdnZXIJPSAiZGVmYXVsdC1vbiIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19sZWRfcGxhdGZvcm1fZGF0YSBobXRfbGVkX2RhdGEgPSB7CisJLm51bV9sZWRzID0gQVJSQVlfU0laRShobXRfbGVkcyksCisJLmxlZHMgPSBobXRfbGVkcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhtdF9sZWRzX2RldmljZSA9IHsKKwkubmFtZQkJCT0gImxlZHMtZ3BpbyIsCisJLmlkCQkJPSAtMSwKKwkuZGV2LnBsYXRmb3JtX2RhdGEJPSAmaG10X2xlZF9kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBobXRfaW9kZXNjW10gPSB7fTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmhtdF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmczNjX2RldmljZV9pMmMwLAorCSZzM2NfZGV2aWNlX25hbmQsCisJJnMzY19kZXZpY2VfZmIsCisJJnMzY19kZXZpY2Vfb2hjaSwKKwkmczNjX2RldmljZV90aW1lclsxXSwKKwkmaG10X2JhY2tsaWdodF9kZXZpY2UsCisJJmhtdF9sZWRzX2RldmljZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBobXRfbWFwX2lvKHZvaWQpCit7CisJczNjNjR4eF9pbml0X2lvKGhtdF9pb2Rlc2MsIEFSUkFZX1NJWkUoaG10X2lvZGVzYykpOworCXMzYzI0eHhfaW5pdF9jbG9ja3MoMTIwMDAwMDApOworCXMzYzI0eHhfaW5pdF91YXJ0cyhobXRfdWFydGNmZ3MsIEFSUkFZX1NJWkUoaG10X3VhcnRjZmdzKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBobXRfbWFjaGluZV9pbml0KHZvaWQpCit7CisJczNjX2kyYzBfc2V0X3BsYXRkYXRhKE5VTEwpOworCXMzY19mYl9zZXRfcGxhdGRhdGEoJmhtdF9sY2RfcGRhdGEpOworCXMzY19uYW5kX3NldF9wbGF0ZGF0YSgmaG10X25hbmRfaW5mbyk7CisKKwlncGlvX3JlcXVlc3QoUzNDNjRYWF9HUEMoNyksICJ1c2IgcG93ZXIiKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDNjRYWF9HUEMoNyksIDApOworCWdwaW9fcmVxdWVzdChTM0M2NFhYX0dQTSgwKSwgInVzYiBwb3dlciIpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0M2NFhYX0dQTSgwKSwgMSk7CisJZ3Bpb19yZXF1ZXN0KFMzQzY0WFhfR1BLKDcpLCAidXNiIHBvd2VyIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzY0WFhfR1BLKDcpLCAxKTsKKwlncGlvX3JlcXVlc3QoUzNDNjRYWF9HUEYoMTMpLCAidXNiIHBvd2VyIik7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzY0WFhfR1BGKDEzKSwgMSk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhobXRfZGV2aWNlcywgQVJSQVlfU0laRShobXRfZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKEhNVCwgIkFpcmdvby1ITVQiKQorCS8qIE1haW50YWluZXI6IFBldGVyIEtvcnNnYWFyZCA8amFjbWV0QHN1bnNpdGUuZGs+ICovCisJLnBoeXNfaW8JPSBTM0NfUEFfVUFSVCAmIDB4ZmZmMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKCgodTMyKVMzQ19WQV9VQVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gUzNDNjRYWF9QQV9TRFJBTSArIDB4MTAwLAorCS5pbml0X2lycQk9IHMzYzY0MTBfaW5pdF9pcnEsCisJLm1hcF9pbwkJPSBobXRfbWFwX2lvLAorCS5pbml0X21hY2hpbmUJPSBobXRfbWFjaGluZV9pbml0LAorCS50aW1lcgkJPSAmczNjMjR4eF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1uY3AuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9tYWNoLW5jcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmNjU3NDcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1uY3AuYwpAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjNjR4eC9tYWNoLW5jcC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKworI2luY2x1ZGUgPHZpZGVvL3BsYXRmb3JtX2xjZC5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1mYi5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L2lpYy5oPgorI2luY2x1ZGUgPHBsYXQvZmIuaD4KKworI2luY2x1ZGUgPG1hY2gvczNjNjQxMC5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorCisjZGVmaW5lIFVDT04gUzNDMjQxMF9VQ09OX0RFRkFVTFQKKyNkZWZpbmUgVUxDT04gUzNDMjQxMF9MQ09OX0NTOCB8IFMzQzI0MTBfTENPTl9QTk9ORQorI2RlZmluZSBVRkNPTiBTM0MyNDEwX1VGQ09OX1JYVFJJRzggfCBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIG5jcF91YXJ0Y2Znc1tdIF9faW5pdGRhdGEgPSB7CisJLyogUkVWSVNJVDogTkNQIHVzZXMgb25seSBzZXJpYWwgMSwgMiAqLworCVswXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMCwKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gVUNPTiwKKwkJLnVsY29uCSAgICAgPSBVTENPTiwKKwkJLnVmY29uCSAgICAgPSBVRkNPTiwKKwl9LAorCVsxXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMSwKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gVUNPTiwKKwkJLnVsY29uCSAgICAgPSBVTENPTiwKKwkJLnVmY29uCSAgICAgPSBVRkNPTiwKKwl9LAorCVsyXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMiwKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gVUNPTiwKKwkJLnVsY29uCSAgICAgPSBVTENPTiwKKwkJLnVmY29uCSAgICAgPSBVRkNPTiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm5jcF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmczNjX2RldmljZV9oc21tYzEsCisJJnMzY19kZXZpY2VfaTJjMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgbmNwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7fTsKKworc3RhdGljIHZvaWQgX19pbml0IG5jcF9tYXBfaW8odm9pZCkKK3sKKwlzM2M2NHh4X2luaXRfaW8obmNwX2lvZGVzYywgQVJSQVlfU0laRShuY3BfaW9kZXNjKSk7CisJczNjMjR4eF9pbml0X2Nsb2NrcygxMjAwMDAwMCk7CisJczNjMjR4eF9pbml0X3VhcnRzKG5jcF91YXJ0Y2ZncywgQVJSQVlfU0laRShuY3BfdWFydGNmZ3MpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IG5jcF9tYWNoaW5lX2luaXQodm9pZCkKK3sKKwlzM2NfaTJjMF9zZXRfcGxhdGRhdGEoTlVMTCk7CisKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhuY3BfZGV2aWNlcywgQVJSQVlfU0laRShuY3BfZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKE5DUCwgIk5DUCIpCisJLyogTWFpbnRhaW5lcjogU2Ftc3VuZyBFbGVjdHJvbmljcyAqLworCS5waHlzX2lvCT0gUzNDX1BBX1VBUlQgJiAweGZmZjAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoKHUzMilTM0NfVkFfVUFSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IFMzQzY0WFhfUEFfU0RSQU0gKyAweDEwMCwKKwkuaW5pdF9pcnEJPSBzM2M2NDEwX2luaXRfaXJxLAorCS5tYXBfaW8JCT0gbmNwX21hcF9pbywKKwkuaW5pdF9tYWNoaW5lCT0gbmNwX21hY2hpbmVfaW5pdCwKKwkudGltZXIJCT0gJnMzYzI0eHhfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtc21kazY0MDAuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9tYWNoLXNtZGs2NDAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdiMTg5OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9tYWNoLXNtZGs2NDAwLmMKQEAgLTAsMCArMSw5NiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L21hY2gtc21kazY0MDAuYworICoKKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KKworI2luY2x1ZGUgPG1hY2gvczNjNjQwMC5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvaWljLmg+CisKKyNkZWZpbmUgVUNPTiBTM0MyNDEwX1VDT05fREVGQVVMVCB8IFMzQzI0MTBfVUNPTl9VQ0xLCisjZGVmaW5lIFVMQ09OIFMzQzI0MTBfTENPTl9DUzggfCBTM0MyNDEwX0xDT05fUE5PTkUgfCBTM0MyNDEwX0xDT05fU1RPUEIKKyNkZWZpbmUgVUZDT04gUzNDMjQxMF9VRkNPTl9SWFRSSUc4IHwgUzNDMjQxMF9VRkNPTl9GSUZPTU9ERQorCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyBzbWRrNjQwMF91YXJ0Y2Znc1tdIF9faW5pdGRhdGEgPSB7CisJWzBdID0geworCQkuaHdwb3J0CSAgICAgPSAwLAorCQkuZmxhZ3MJICAgICA9IDAsCisJCS51Y29uCSAgICAgPSAweDNjNSwKKwkJLnVsY29uCSAgICAgPSAweDAzLAorCQkudWZjb24JICAgICA9IDB4NTEsCisJfSwKKwlbMV0gPSB7CisJCS5od3BvcnQJICAgICA9IDEsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IDB4M2M1LAorCQkudWxjb24JICAgICA9IDB4MDMsCisJCS51ZmNvbgkgICAgID0gMHg1MSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzbWRrNjQwMF9pb2Rlc2NbXSA9IHt9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc21kazY0MDBfbWFwX2lvKHZvaWQpCit7CisJczNjNjR4eF9pbml0X2lvKHNtZGs2NDAwX2lvZGVzYywgQVJSQVlfU0laRShzbWRrNjQwMF9pb2Rlc2MpKTsKKwlzM2MyNHh4X2luaXRfY2xvY2tzKDEyMDAwMDAwKTsKKwlzM2MyNHh4X2luaXRfdWFydHMoc21kazY0MDBfdWFydGNmZ3MsIEFSUkFZX1NJWkUoc21kazY0MDBfdWFydGNmZ3MpKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNtZGs2NDAwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzM2NfZGV2aWNlX2hzbW1jMSwKKwkmczNjX2RldmljZV9pMmMwLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpMmNfZGV2c1tdIF9faW5pdGRhdGEgPSB7CisJeyBJMkNfQk9BUkRfSU5GTygid204NzUzIiwgMHgxQSksIH0sCisJeyBJMkNfQk9BUkRfSU5GTygiMjRjMDgiLCAweDUwKSwgfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzbWRrNjQwMF9tYWNoaW5lX2luaXQodm9pZCkKK3sKKwlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBpMmNfZGV2cywgQVJSQVlfU0laRShpMmNfZGV2cykpOworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNtZGs2NDAwX2RldmljZXMsIEFSUkFZX1NJWkUoc21kazY0MDBfZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKFNNREs2NDAwLCAiU01ESzY0MDAiKQorCS8qIE1haW50YWluZXI6IEJlbiBEb29rcyA8YmVuQGZsdWZmLm9yZz4gKi8KKwkucGh5c19pbwk9IFMzQ19QQV9VQVJUICYgMHhmZmYwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKCh1MzIpUzNDX1ZBX1VBUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBTM0M2NFhYX1BBX1NEUkFNICsgMHgxMDAsCisKKwkuaW5pdF9pcnEJPSBzM2M2NDAwX2luaXRfaXJxLAorCS5tYXBfaW8JCT0gc21kazY0MDBfbWFwX2lvLAorCS5pbml0X21hY2hpbmUJPSBzbWRrNjQwMF9tYWNoaW5lX2luaXQsCisJLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9tYWNoLXNtZGs2NDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1zbWRrNjQxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkNWFmZDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1zbWRrNjQxMC5jCkBAIC0wLDAgKzEsNjY4IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0eHgvbWFjaC1zbWRrNjQxMC5jCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvbGVkcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc21zYzkxMXguaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZml4ZWQuaD4KKworI2lmZGVmIENPTkZJR19TTURLNjQxMF9XTTExOTBfRVYxCisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODM1MC9wbWljLmg+CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TTURLNjQxMF9XTTExOTJfRVYxCisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODMxeC9wZGF0YS5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDx2aWRlby9wbGF0Zm9ybV9sY2QuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtZmIuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLW1vZGVtLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3Mtc3lzLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLXNyb20uaD4KKyNpbmNsdWRlIDxwbGF0L2lpYy5oPgorI2luY2x1ZGUgPHBsYXQvZmIuaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CisKKyNpbmNsdWRlIDxtYWNoL3MzYzY0MTAuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKworI2RlZmluZSBVQ09OIFMzQzI0MTBfVUNPTl9ERUZBVUxUIHwgUzNDMjQxMF9VQ09OX1VDTEsKKyNkZWZpbmUgVUxDT04gUzNDMjQxMF9MQ09OX0NTOCB8IFMzQzI0MTBfTENPTl9QTk9ORSB8IFMzQzI0MTBfTENPTl9TVE9QQgorI2RlZmluZSBVRkNPTiBTM0MyNDEwX1VGQ09OX1JYVFJJRzggfCBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIHNtZGs2NDEwX3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJICAgICA9IDAsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfSwKKwlbMV0gPSB7CisJCS5od3BvcnQJICAgICA9IDEsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfSwKKwlbMl0gPSB7CisJCS5od3BvcnQJICAgICA9IDIsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfSwKKwlbM10gPSB7CisJCS5od3BvcnQJICAgICA9IDMsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfSwKK307CisKKy8qIGZyYW1lYnVmZmVyIGFuZCBMQ0Qgc2V0dXAuICovCisKKy8qIEdQRjE1ID0gTENEIGJhY2tsaWdodCBjb250cm9sCisgKiBHUEYxMyA9PiBQYW5lbCBwb3dlcgorICogR1BONSA9IExDRCBuUkVTRVQgc2lnbmFsCisgKiBQV01fVE9VVDEgPT4gYmFja2xpZ2h0IGJyaWdodG5lc3MKKyAqLworCitzdGF0aWMgdm9pZCBzbWRrNjQxMF9sY2RfcG93ZXJfc2V0KHN0cnVjdCBwbGF0X2xjZF9kYXRhICpwZCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgcG93ZXIpCit7CisJaWYgKHBvd2VyKSB7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0M2NFhYX0dQRigxMyksIDEpOworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDNjRYWF9HUEYoMTUpLCAxKTsKKworCQkvKiBmaXJlIG5SRVNFVCBvbiBwb3dlciB1cCAqLworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDNjRYWF9HUE4oNSksIDApOworCQltc2xlZXAoMTApOworCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQoUzNDNjRYWF9HUE4oNSksIDEpOworCQltc2xlZXAoMSk7CisJfSBlbHNlIHsKKwkJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KFMzQzY0WFhfR1BGKDE1KSwgMCk7CisJCWdwaW9fZGlyZWN0aW9uX291dHB1dChTM0M2NFhYX0dQRigxMyksIDApOworCX0KK30KKworc3RhdGljIHN0cnVjdCBwbGF0X2xjZF9kYXRhIHNtZGs2NDEwX2xjZF9wb3dlcl9kYXRhID0geworCS5zZXRfcG93ZXIJPSBzbWRrNjQxMF9sY2RfcG93ZXJfc2V0LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21kazY0MTBfbGNkX3Bvd2VyZGV2ID0geworCS5uYW1lCQkJPSAicGxhdGZvcm0tbGNkIiwKKwkuZGV2LnBhcmVudAkJPSAmczNjX2RldmljZV9mYi5kZXYsCisJLmRldi5wbGF0Zm9ybV9kYXRhCT0gJnNtZGs2NDEwX2xjZF9wb3dlcl9kYXRhLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2NfZmJfcGRfd2luIHNtZGs2NDEwX2ZiX3dpbjAgPSB7CisJLyogdGhpcyBpcyB0byBlbnN1cmUgd2UgdXNlIHdpbjAgKi8KKwkud2luX21vZGUJPSB7CisJCS5waXhjbG9jawk9IDQxMDk0LAorCQkubGVmdF9tYXJnaW4JPSA4LAorCQkucmlnaHRfbWFyZ2luCT0gMTMsCisJCS51cHBlcl9tYXJnaW4JPSA3LAorCQkubG93ZXJfbWFyZ2luCT0gNSwKKwkJLmhzeW5jX2xlbgk9IDMsCisJCS52c3luY19sZW4JPSAxLAorCQkueHJlcwkJPSA4MDAsCisJCS55cmVzCQk9IDQ4MCwKKwl9LAorCS5tYXhfYnBwCT0gMzIsCisJLmRlZmF1bHRfYnBwCT0gMTYsCit9OworCisvKiA0MDU1NjYgY2xvY2tzIHBlciBmcmFtZSA9PiA2MEh6IHJlZnJlc2ggcmVxdWlyZXMgMjQzMzM5NjBIeiBjbG9jayAqLworc3RhdGljIHN0cnVjdCBzM2NfZmJfcGxhdGRhdGEgc21kazY0MTBfbGNkX3BkYXRhIF9faW5pdGRhdGEgPSB7CisJLnNldHVwX2dwaW8JPSBzM2M2NHh4X2ZiX2dwaW9fc2V0dXBfMjRicHAsCisJLndpblswXQkJPSAmc21kazY0MTBfZmJfd2luMCwKKwkudmlkY29uMAk9IFZJRENPTjBfVklET1VUX1JHQiB8IFZJRENPTjBfUE5STU9ERV9SR0IsCisJLnZpZGNvbjEJPSBWSURDT04xX0lOVl9IU1lOQyB8IFZJRENPTjFfSU5WX1ZTWU5DLAorfTsKKworLyoKKyAqIENvbmZpZ3VyaW5nIEV0aGVybmV0IG9uIFNNREs2NDEwCisgKgorICogQm90aCBDUzg5MDBBIGFuZCBMQU45MTE1IGNoaXBzIHNoYXJlIG9uZSBjaGlwIHNlbGVjdCBtZWRpYXRlZCBieSBDRkc2LgorICogVGhlIGNvbnN0YW50IGFkZHJlc3MgYmVsb3cgY29ycmVzcG9uZHMgdG8gbkNTMQorICoKKyAqICAxKSBTZXQgQ0ZHQjIgcDMgT04gb3RoZXJzIG9mZiwgbm8gb3RoZXIgQ0ZHQiBzZWxlY3RzICJldGhlcm5ldCIKKyAqICAyKSBDRkc2IG5lZWRzIHRvIGJlIHN3aXRjaGVkIHRvICJMQU45MTE1IiBzaWRlCisgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWRrNjQxMF9zbXNjOTExeF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQzY0WFhfUEFfWE0wQ1NOMSwKKwkJLmVuZCAgID0gUzNDNjRYWF9QQV9YTTBDU04xICsgU1pfNjRLIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IFMzQ19FSU5UKDEwKSwKKwkJLmVuZCAgID0gUzNDX0VJTlQoMTApLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSB8IElSUV9UWVBFX0xFVkVMX0xPVywKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzbXNjOTExeF9wbGF0Zm9ybV9jb25maWcgc21kazY0MTBfc21zYzkxMXhfcGRhdGEgPSB7CisJLmlycV9wb2xhcml0eSAgPSBTTVNDOTExWF9JUlFfUE9MQVJJVFlfQUNUSVZFX0xPVywKKwkuaXJxX3R5cGUgICAgICA9IFNNU0M5MTFYX0lSUV9UWVBFX09QRU5fRFJBSU4sCisJLmZsYWdzICAgICAgICAgPSBTTVNDOTExWF9VU0VfMzJCSVQgfCBTTVNDOTExWF9GT1JDRV9JTlRFUk5BTF9QSFksCisJLnBoeV9pbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJLAorfTsKKworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWRrNjQxMF9zbXNjOTExeCA9IHsKKwkubmFtZSAgICAgICAgICA9ICJzbXNjOTExeCIsCisJLmlkICAgICAgICAgICAgPSAtMSwKKwkubnVtX3Jlc291cmNlcyA9IEFSUkFZX1NJWkUoc21kazY0MTBfc21zYzkxMXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UgICAgICA9ICZzbWRrNjQxMF9zbXNjOTExeF9yZXNvdXJjZXNbMF0sCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc21kazY0MTBfc21zYzkxMXhfcGRhdGEsCisJfSwKK307CisKKyNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9jb25zdW1lcl9zdXBwbHkgc21kazY0MTBfYl9wd3JfNXZfY29uc3VtZXJzW10gPSB7CisJeworCQkvKiBXTTg1ODAgKi8KKwkJLnN1cHBseSA9ICJQVkREIiwKKwkJLmRldl9uYW1lID0gIjAtMDAxYiIsCisJfSwKKwl7CisJCS8qIFdNODU4MCAqLworCQkuc3VwcGx5ID0gIkFWREQiLAorCQkuZGV2X25hbWUgPSAiMC0wMDFiIiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNtZGs2NDEwX2JfcHdyXzV2X2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkuYWx3YXlzX29uID0gMSwKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKHNtZGs2NDEwX2JfcHdyXzV2X2NvbnN1bWVycyksCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gc21kazY0MTBfYl9wd3JfNXZfY29uc3VtZXJzLAorfTsKKworc3RhdGljIHN0cnVjdCBmaXhlZF92b2x0YWdlX2NvbmZpZyBzbWRrNjQxMF9iX3B3cl81dl9wZGF0YSA9IHsKKwkuc3VwcGx5X25hbWUgPSAiQl9QV1JfNVYiLAorCS5taWNyb3ZvbHRzID0gNTAwMDAwMCwKKwkuaW5pdF9kYXRhID0gJnNtZGs2NDEwX2JfcHdyXzV2X2RhdGEsCisJLmdwaW8gPSAtRUlOVkFMLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc21kazY0MTBfYl9wd3JfNXYgPSB7CisJLm5hbWUgICAgICAgICAgPSAicmVnLWZpeGVkLXZvbHRhZ2UiLAorCS5pZCAgICAgICAgICAgID0gLTEsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc21kazY0MTBfYl9wd3JfNXZfcGRhdGEsCisJfSwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzbWRrNjQxMF9pb2Rlc2NbXSA9IHt9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc21kazY0MTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisjaWZkZWYgQ09ORklHX1NNREs2NDEwX1NEX0NIMAorCSZzM2NfZGV2aWNlX2hzbW1jMCwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TTURLNjQxMF9TRF9DSDEKKwkmczNjX2RldmljZV9oc21tYzEsCisjZW5kaWYKKwkmczNjX2RldmljZV9pMmMwLAorCSZzM2NfZGV2aWNlX2kyYzEsCisJJnMzY19kZXZpY2VfZmIsCisJJnMzY19kZXZpY2Vfb2hjaSwKKwkmczNjX2RldmljZV91c2JfaHNvdGcsCisJJnMzYzY0eHhfZGV2aWNlX2lpc3Y0LAorCisjaWZkZWYgQ09ORklHX1JFR1VMQVRPUgorCSZzbWRrNjQxMF9iX3B3cl81diwKKyNlbmRpZgorCSZzbWRrNjQxMF9sY2RfcG93ZXJkZXYsCisKKwkmc21kazY0MTBfc21zYzkxMXgsCit9OworCisjaWZkZWYgQ09ORklHX1JFR1VMQVRPUgorLyogQVJNIGNvcmUgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSBzbWRrNjQxMF92ZGRhcm1fY29uc3VtZXJzW10gPSB7CisJeworCQkuc3VwcGx5ID0gInZkZGFybSIsCisJfQorfTsKKworLyogVkREQVJNLCBCVUNLMSBvbiBKNSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNtZGs2NDEwX3ZkZGFybSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlBWRERfQVJNIiwKKwkJLm1pbl91ViA9IDEwMDAwMDAsCisJCS5tYXhfdVYgPSAxMzAwMDAwLAorCQkuYWx3YXlzX29uID0gMSwKKwkJLnZhbGlkX29wc19tYXNrID0gUkVHVUxBVE9SX0NIQU5HRV9WT0xUQUdFLAorCX0sCisJLm51bV9jb25zdW1lcl9zdXBwbGllcyA9IEFSUkFZX1NJWkUoc21kazY0MTBfdmRkYXJtX2NvbnN1bWVycyksCisJLmNvbnN1bWVyX3N1cHBsaWVzID0gc21kazY0MTBfdmRkYXJtX2NvbnN1bWVycywKK307CisKKy8qIFZERF9JTlQsIEJVQ0syIG9uIEo1ICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc21kazY0MTBfdmRkaW50ID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiUFZERF9JTlQiLAorCQkubWluX3VWID0gMTAwMDAwMCwKKwkJLm1heF91ViA9IDEyMDAwMDAsCisJCS5hbHdheXNfb24gPSAxLAorCQkudmFsaWRfb3BzX21hc2sgPSBSRUdVTEFUT1JfQ0hBTkdFX1ZPTFRBR0UsCisJfSwKK307CisKKy8qIFZERF9ISSwgTERPMyBvbiBKNSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNtZGs2NDEwX3ZkZGhpID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiUFZERF9ISSIsCisJCS5hbHdheXNfb24gPSAxLAorCX0sCit9OworCisvKiBWRERfUExMLCBMRE8yIG9uIEo1ICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc21kazY0MTBfdmRkcGxsID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiUFZERF9QTEwiLAorCQkuYWx3YXlzX29uID0gMSwKKwl9LAorfTsKKworLyogVkREX1VIX01NQywgTERPNSBvbiBKNSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNtZGs2NDEwX3ZkZHVoX21tYyA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlBWRERfVUgvUFZERF9NTUMiLAorCQkuYWx3YXlzX29uID0gMSwKKwl9LAorfTsKKworLyogVkNDTTNCVCwgTERPOCBvbiBKNSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNtZGs2NDEwX3ZjY21jM2J0ID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiUFZDQ00zQlQiLAorCQkuYWx3YXlzX29uID0gMSwKKwl9LAorfTsKKworLyogVkNDTTJNVFYsIExETzExIG9uIEo1ICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc21kazY0MTBfdmNjbTJtdHYgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJQVkNDTTJNVFYiLAorCQkuYWx3YXlzX29uID0gMSwKKwl9LAorfTsKKworLyogVkREX0xDRCwgTERPMTIgb24gSjUgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzbWRrNjQxMF92ZGRsY2QgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJQVkREX0xDRCIsCisJCS5hbHdheXNfb24gPSAxLAorCX0sCit9OworCisvKiBWRERfT1RHSSwgTERPOSBvbiBKNSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNtZGs2NDEwX3ZkZG90Z2kgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJQVkREX09UR0kiLAorCQkuYWx3YXlzX29uID0gMSwKKwl9LAorfTsKKworLyogVkREX09URywgTERPMTQgb24gSjUgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSBzbWRrNjQxMF92ZGRvdGcgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJQVkREX09URyIsCisJCS5hbHdheXNfb24gPSAxLAorCX0sCit9OworCisvKiBWRERfQUxJVkUsIExETzE1IG9uIEo1ICovCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgc21kazY0MTBfdmRkYWxpdmUgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJQVkREX0FMSVZFIiwKKwkJLmFsd2F5c19vbiA9IDEsCisJfSwKK307CisKKy8qIFZERF9BVURJTywgVkxET19BVURJTyBvbiBKNSAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHNtZGs2NDEwX3ZkZGF1ZGlvID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiUFZERF9BVURJTyIsCisJCS5hbHdheXNfb24gPSAxLAorCX0sCit9OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU01ESzY0MTBfV00xMTkwX0VWMQorLyogUzNDNjR4eCBpbnRlcm5hbCBsb2dpYyAmIFBMTCAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHdtODM1MF9kY2RjMV9kYXRhID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiUFZERF9JTlQvUFZERF9QTEwiLAorCQkubWluX3VWID0gMTIwMDAwMCwKKwkJLm1heF91ViA9IDEyMDAwMDAsCisJCS5hbHdheXNfb24gPSAxLAorCQkuYXBwbHlfdVYgPSAxLAorCX0sCit9OworCisvKiBNZW1vcnkgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB3bTgzNTBfZGNkYzNfZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlBWRERfTUVNIiwKKwkJLm1pbl91ViA9IDE4MDAwMDAsCisJCS5tYXhfdVYgPSAxODAwMDAwLAorCQkuYWx3YXlzX29uID0gMSwKKwkJLnN0YXRlX21lbSA9IHsKKwkJCSAudVYgPSAxODAwMDAwLAorCQkJIC5tb2RlID0gUkVHVUxBVE9SX01PREVfTk9STUFMLAorCQkJIC5lbmFibGVkID0gMSwKKwkJfSwKKwkJLmluaXRpYWxfc3RhdGUgPSBQTV9TVVNQRU5EX01FTSwKKwl9LAorfTsKKworLyogVVNCLCBFWFQsIFBDTSwgQURDL0RBQywgVVNCLCBNTUMgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB3bTgzNTBfZGNkYzRfY29uc3VtZXJzW10gPSB7CisJeworCQkvKiBXTTg1ODAgKi8KKwkJLnN1cHBseSA9ICJEVkREIiwKKwkJLmRldl9uYW1lID0gIjAtMDAxYiIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YSB3bTgzNTBfZGNkYzRfZGF0YSA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlBWRERfSEkvUFZERF9FWFQvUFZERF9TWVMvUFZDQ00yTVRWIiwKKwkJLm1pbl91ViA9IDMwMDAwMDAsCisJCS5tYXhfdVYgPSAzMDAwMDAwLAorCQkuYWx3YXlzX29uID0gMSwKKwl9LAorCS5udW1fY29uc3VtZXJfc3VwcGxpZXMgPSBBUlJBWV9TSVpFKHdtODM1MF9kY2RjNF9jb25zdW1lcnMpLAorCS5jb25zdW1lcl9zdXBwbGllcyA9IHdtODM1MF9kY2RjNF9jb25zdW1lcnMsCit9OworCisvKiBPVEdpLzExOTAtRVYxIEhQVkREICYgQVZERCAqLworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHdtODM1MF9sZG80X2RhdGEgPSB7CisJLmNvbnN0cmFpbnRzID0geworCQkubmFtZSA9ICJQVkREX09UR0kvSFBWREQvQVZERCIsCisJCS5taW5fdVYgPSAxMjAwMDAwLAorCQkubWF4X3VWID0gMTIwMDAwMCwKKwkJLmFwcGx5X3VWID0gMSwKKwkJLmFsd2F5c19vbiA9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeworCWludCByZWd1bGF0b3I7CisJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRkYXRhOworfSB3bTExOTBfcmVndWxhdG9yc1tdID0geworCXsgV004MzUwX0RDRENfMSwgJndtODM1MF9kY2RjMV9kYXRhIH0sCisJeyBXTTgzNTBfRENEQ18zLCAmd204MzUwX2RjZGMzX2RhdGEgfSwKKwl7IFdNODM1MF9EQ0RDXzQsICZ3bTgzNTBfZGNkYzRfZGF0YSB9LAorCXsgV004MzUwX0RDRENfNiwgJnNtZGs2NDEwX3ZkZGFybSB9LAorCXsgV004MzUwX0xET18xLCAmc21kazY0MTBfdmRkYWxpdmUgfSwKKwl7IFdNODM1MF9MRE9fMiwgJnNtZGs2NDEwX3ZkZG90ZyB9LAorCXsgV004MzUwX0xET18zLCAmc21kazY0MTBfdmRkbGNkIH0sCisJeyBXTTgzNTBfTERPXzQsICZ3bTgzNTBfbGRvNF9kYXRhIH0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzbWRrNjQxMF93bTgzNTBfaW5pdChzdHJ1Y3Qgd204MzUwICp3bTgzNTApCit7CisJaW50IGk7CisKKwkvKiBDb25maWd1cmUgdGhlIElSUSBsaW5lICovCisJczNjX2dwaW9fc2V0cHVsbChTM0M2NFhYX0dQTigxMiksIFMzQ19HUElPX1BVTExfVVApOworCisJLyogSW5zdGFudGlhdGUgdGhlIHJlZ3VsYXRvcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTExOTBfcmVndWxhdG9ycyk7IGkrKykKKwkJd204MzUwX3JlZ2lzdGVyX3JlZ3VsYXRvcih3bTgzNTAsCisJCQkJCSAgd20xMTkwX3JlZ3VsYXRvcnNbaV0ucmVndWxhdG9yLAorCQkJCQkgIHdtMTE5MF9yZWd1bGF0b3JzW2ldLmluaXRkYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHdtODM1MF9wbGF0Zm9ybV9kYXRhIF9faW5pdGRhdGEgc21kazY0MTBfd204MzUwX3BkYXRhID0geworCS5pbml0ID0gc21kazY0MTBfd204MzUwX2luaXQsCisJLmlycV9oaWdoID0gMSwKKwkuaXJxX2Jhc2UgPSBJUlFfQk9BUkRfU1RBUlQsCit9OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU01ESzY0MTBfV00xMTkyX0VWMQorc3RhdGljIHN0cnVjdCBncGlvX2xlZCB3bTExOTJfcG1pY19sZWRzW10gPSB7CisJeworCQkubmFtZSA9ICJQTUlDOnJlZDpwb3dlciIsCisJCS5ncGlvID0gR1BJT19CT0FSRF9TVEFSVCArIDMsCisJCS5kZWZhdWx0X3N0YXRlID0gTEVEU19HUElPX0RFRlNUQVRFX09OLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGdwaW9fbGVkX3BsYXRmb3JtX2RhdGEgd20xMTkyX3BtaWNfbGVkID0geworCS5udW1fbGVkcyA9IEFSUkFZX1NJWkUod20xMTkyX3BtaWNfbGVkcyksCisJLmxlZHMgPSB3bTExOTJfcG1pY19sZWRzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugd20xMTkyX3BtaWNfbGVkX2RldiA9IHsKKwkubmFtZSAgICAgICAgICA9ICJsZWRzLWdwaW8iLAorCS5pZCAgICAgICAgICAgID0gLTEsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEgPSAmd20xMTkyX3BtaWNfbGVkLAorCX0sCit9OworCitzdGF0aWMgaW50IHdtMTE5Ml9wcmVfaW5pdChzdHJ1Y3Qgd204MzF4ICp3bTgzMXgpCit7CisJaW50IHJldDsKKworCS8qIENvbmZpZ3VyZSB0aGUgSVJRIGxpbmUgKi8KKwlzM2NfZ3Bpb19zZXRwdWxsKFMzQzY0WFhfR1BOKDEyKSwgUzNDX0dQSU9fUFVMTF9VUCk7CisKKwlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJndtMTE5Ml9wbWljX2xlZF9kZXYpOworCWlmIChyZXQgIT0gMCkKKwkJZGV2X2Vycih3bTgzMXgtPmRldiwgIkZhaWxlZCB0byBhZGQgUE1JQyBMRUQ6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgd204MzF4X2JhY2tsaWdodF9wZGF0YSB3bTExOTJfYmFja2xpZ2h0X3BkYXRhID0geworCS5pc2luayA9IDEsCisJLm1heF91QSA9IDI3NTU0LAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHdtMTE5Ml9kY2RjMyA9IHsKKwkuY29uc3RyYWludHMgPSB7CisJCS5uYW1lID0gIlBWRERfTUVNL1BWRERfR1BTIiwKKwkJLmFsd2F5c19vbiA9IDEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2NvbnN1bWVyX3N1cHBseSB3bTExOTJfbGRvMV9jb25zdW1lcnNbXSA9IHsKKwl7IC5zdXBwbHkgPSAiRFZERCIsIC5kZXZfbmFtZSA9ICIwLTAwMWIiLCB9LCAgIC8qIFdNODU4MCAqLworfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIHdtMTE5Ml9sZG8xID0geworCS5jb25zdHJhaW50cyA9IHsKKwkJLm5hbWUgPSAiUFZERF9MQ0QvUFZERF9FWFQiLAorCQkuYWx3YXlzX29uID0gMSwKKwl9LAorCS5jb25zdW1lcl9zdXBwbGllcyA9IHdtMTE5Ml9sZG8xX2NvbnN1bWVycywKKwkubnVtX2NvbnN1bWVyX3N1cHBsaWVzID0gQVJSQVlfU0laRSh3bTExOTJfbGRvMV9jb25zdW1lcnMpLAorfTsKKworc3RhdGljIHN0cnVjdCB3bTgzMXhfc3RhdHVzX3BkYXRhIHdtMTE5Ml9sZWQ3X3BkYXRhID0geworCS5uYW1lID0gIkxFRDc6Z3JlZW46IiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgd204MzF4X3N0YXR1c19wZGF0YSB3bTExOTJfbGVkOF9wZGF0YSA9IHsKKwkubmFtZSA9ICJMRUQ4OmdyZWVuOiIsCit9OworCitzdGF0aWMgc3RydWN0IHdtODMxeF9wZGF0YSBzbWRrNjQxMF93bTExOTJfcGRhdGEgPSB7CisJLnByZV9pbml0ID0gd20xMTkyX3ByZV9pbml0LAorCS5pcnFfYmFzZSA9IElSUV9CT0FSRF9TVEFSVCwKKworCS5iYWNrbGlnaHQgPSAmd20xMTkyX2JhY2tsaWdodF9wZGF0YSwKKwkuZGNkYyA9IHsKKwkJJnNtZGs2NDEwX3ZkZGFybSwgIC8qIERDREMxICovCisJCSZzbWRrNjQxMF92ZGRpbnQsICAvKiBEQ0RDMiAqLworCQkmd20xMTkyX2RjZGMzLAorCX0sCisJLmdwaW9fYmFzZSA9IEdQSU9fQk9BUkRfU1RBUlQsCisJLmxkbyA9IHsKKwkJICZ3bTExOTJfbGRvMSwgICAgICAgIC8qIExETzEgKi8KKwkJICZzbWRrNjQxMF92ZGR1aF9tbWMsIC8qIExETzIgKi8KKwkJIE5VTEwsICAgICAgICAgICAgICAgIC8qIExETzMgTkMgKi8KKwkJICZzbWRrNjQxMF92ZGRvdGdpLCAgIC8qIExETzQgKi8KKwkJICZzbWRrNjQxMF92ZGRvdGcsICAgIC8qIExETzUgKi8KKwkJICZzbWRrNjQxMF92ZGRoaSwgICAgIC8qIExETzYgKi8KKwkJICZzbWRrNjQxMF92ZGRhdWRpbywgIC8qIExETzcgKi8KKwkJICZzbWRrNjQxMF92Y2NtMm10diwgIC8qIExETzggKi8KKwkJICZzbWRrNjQxMF92ZGRwbGwsICAgIC8qIExETzkgKi8KKwkJICZzbWRrNjQxMF92Y2NtYzNidCwgIC8qIExETzEwICovCisJCSAmc21kazY0MTBfdmRkYWxpdmUsICAvKiBMRE8xMSAqLworCX0sCisJLnN0YXR1cyA9IHsKKwkJJndtMTE5Ml9sZWQ3X3BkYXRhLAorCQkmd20xMTkyX2xlZDhfcGRhdGEsCisJfSwKK307CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpMmNfZGV2czBbXSBfX2luaXRkYXRhID0geworCXsgSTJDX0JPQVJEX0lORk8oIjI0YzA4IiwgMHg1MCksIH0sCisJeyBJMkNfQk9BUkRfSU5GTygid204NTgwIiwgMHgxYiksIH0sCisKKyNpZmRlZiBDT05GSUdfU01ESzY0MTBfV00xMTkyX0VWMQorCXsgSTJDX0JPQVJEX0lORk8oIndtODMxMiIsIDB4MzQpLAorCSAgLnBsYXRmb3JtX2RhdGEgPSAmc21kazY0MTBfd20xMTkyX3BkYXRhLAorCSAgLmlycSA9IFMzQ19FSU5UKDEyKSwKKwl9LAorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU01ESzY0MTBfV00xMTkwX0VWMQorCXsgSTJDX0JPQVJEX0lORk8oIndtODM1MCIsIDB4MWEpLAorCSAgLnBsYXRmb3JtX2RhdGEgPSAmc21kazY0MTBfd204MzUwX3BkYXRhLAorCSAgLmlycSA9IFMzQ19FSU5UKDEyKSwKKwl9LAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IGkyY19ib2FyZF9pbmZvIGkyY19kZXZzMVtdIF9faW5pdGRhdGEgPSB7CisJeyBJMkNfQk9BUkRfSU5GTygiMjRjMTI4IiwgMHg1NyksIH0sCS8qIFNhbXN1bmcgUzUyNEFEMFhEMSAqLworfTsKKworc3RhdGljIHZvaWQgX19pbml0IHNtZGs2NDEwX21hcF9pbyh2b2lkKQoreworCXUzMiB0bXA7CisKKwlzM2M2NHh4X2luaXRfaW8oc21kazY0MTBfaW9kZXNjLCBBUlJBWV9TSVpFKHNtZGs2NDEwX2lvZGVzYykpOworCXMzYzI0eHhfaW5pdF9jbG9ja3MoMTIwMDAwMDApOworCXMzYzI0eHhfaW5pdF91YXJ0cyhzbWRrNjQxMF91YXJ0Y2ZncywgQVJSQVlfU0laRShzbWRrNjQxMF91YXJ0Y2ZncykpOworCisJLyogc2V0IHRoZSBMQ0QgdHlwZSAqLworCisJdG1wID0gX19yYXdfcmVhZGwoUzNDNjRYWF9TUENPTik7CisJdG1wICY9IH5TM0M2NFhYX1NQQ09OX0xDRF9TRUxfTUFTSzsKKwl0bXAgfD0gUzNDNjRYWF9TUENPTl9MQ0RfU0VMX1JHQjsKKwlfX3Jhd193cml0ZWwodG1wLCBTM0M2NFhYX1NQQ09OKTsKKworCS8qIHJlbW92ZSB0aGUgbGNkIGJ5cGFzcyAqLworCXRtcCA9IF9fcmF3X3JlYWRsKFMzQzY0WFhfTU9ERU1fTUlGUENPTik7CisJdG1wICY9IH5NSUZQQ09OX0xDRF9CWVBBU1M7CisJX19yYXdfd3JpdGVsKHRtcCwgUzNDNjRYWF9NT0RFTV9NSUZQQ09OKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHNtZGs2NDEwX21hY2hpbmVfaW5pdCh2b2lkKQoreworCXUzMiBjczE7CisKKwlzM2NfaTJjMF9zZXRfcGxhdGRhdGEoTlVMTCk7CisJczNjX2kyYzFfc2V0X3BsYXRkYXRhKE5VTEwpOworCXMzY19mYl9zZXRfcGxhdGRhdGEoJnNtZGs2NDEwX2xjZF9wZGF0YSk7CisKKwkvKiBjb25maWd1cmUgbkNTMSB3aWR0aCB0byAxNiBiaXRzICovCisKKwljczEgPSBfX3Jhd19yZWFkbChTM0M2NFhYX1NST01fQlcpICYKKwkJICAgIH4oUzNDNjRYWF9TUk9NX0JXX19DU19NQVNLIDw8IFMzQzY0WFhfU1JPTV9CV19fTkNTMV9fU0hJRlQpOworCWNzMSB8PSAoKDEgPDwgUzNDNjRYWF9TUk9NX0JXX19EQVRBV0lEVEhfX1NISUZUKSB8CisJCSgxIDw8IFMzQzY0WFhfU1JPTV9CV19fV0FJVEVOQUJMRV9fU0hJRlQpIHwKKwkJKDEgPDwgUzNDNjRYWF9TUk9NX0JXX19CWVRFRU5BQkxFX19TSElGVCkpIDw8CisJCQkJCQkgICBTM0M2NFhYX1NST01fQldfX05DUzFfX1NISUZUOworCV9fcmF3X3dyaXRlbChjczEsIFMzQzY0WFhfU1JPTV9CVyk7CisKKwkvKiBzZXQgdGltaW5nIGZvciBuQ1MxIHN1aXRhYmxlIGZvciBldGhlcm5ldCBjaGlwICovCisKKwlfX3Jhd193cml0ZWwoKDAgPDwgUzNDNjRYWF9TUk9NX0JDWF9fUE1DX19TSElGVCkgfAorCQkgICAgICg2IDw8IFMzQzY0WFhfU1JPTV9CQ1hfX1RBQ1BfX1NISUZUKSB8CisJCSAgICAgKDQgPDwgUzNDNjRYWF9TUk9NX0JDWF9fVENBSF9fU0hJRlQpIHwKKwkJICAgICAoMSA8PCBTM0M2NFhYX1NST01fQkNYX19UQ09IX19TSElGVCkgfAorCQkgICAgICgweGUgPDwgUzNDNjRYWF9TUk9NX0JDWF9fVEFDQ19fU0hJRlQpIHwKKwkJICAgICAoNCA8PCBTM0M2NFhYX1NST01fQkNYX19UQ09TX19TSElGVCkgfAorCQkgICAgICgwIDw8IFMzQzY0WFhfU1JPTV9CQ1hfX1RBQ1NfX1NISUZUKSwgUzNDNjRYWF9TUk9NX0JDMSk7CisKKwlncGlvX3JlcXVlc3QoUzNDNjRYWF9HUE4oNSksICJMQ0QgcG93ZXIiKTsKKwlncGlvX3JlcXVlc3QoUzNDNjRYWF9HUEYoMTMpLCAiTENEIHBvd2VyIik7CisJZ3Bpb19yZXF1ZXN0KFMzQzY0WFhfR1BGKDE1KSwgIkxDRCBwb3dlciIpOworCisJaTJjX3JlZ2lzdGVyX2JvYXJkX2luZm8oMCwgaTJjX2RldnMwLCBBUlJBWV9TSVpFKGkyY19kZXZzMCkpOworCWkyY19yZWdpc3Rlcl9ib2FyZF9pbmZvKDEsIGkyY19kZXZzMSwgQVJSQVlfU0laRShpMmNfZGV2czEpKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNtZGs2NDEwX2RldmljZXMsIEFSUkFZX1NJWkUoc21kazY0MTBfZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKFNNREs2NDEwLCAiU01ESzY0MTAiKQorCS8qIE1haW50YWluZXI6IEJlbiBEb29rcyA8YmVuQGZsdWZmLm9yZz4gKi8KKwkucGh5c19pbwk9IFMzQ19QQV9VQVJUICYgMHhmZmYwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKCh1MzIpUzNDX1ZBX1VBUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBTM0M2NFhYX1BBX1NEUkFNICsgMHgxMDAsCisKKwkuaW5pdF9pcnEJPSBzM2M2NDEwX2luaXRfaXJxLAorCS5tYXBfaW8JCT0gc21kazY0MTBfbWFwX2lvLAorCS5pbml0X21hY2hpbmUJPSBzbWRrNjQxMF9tYWNoaW5lX2luaXQsCisJLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9wbS5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjhhYzQ1OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9wbS5jCkBAIC0wLDAgKzEsMTczIEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvcG0uYworICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDNjRYWCBDUFUgUE0gc3VwcG9ydC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPHBsYXQvcG0uaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3Mtc3lzLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3Mtc3lzY29uLXBvd2VyLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW8tbWVtcG9ydC5oPgorCisjaWZkZWYgQ09ORklHX1MzQ19QTV9ERUJVR19MRURfU01ESworI2luY2x1ZGUgPG1hY2gvZ3Bpby1iYW5rLW4uaD4KKwordm9pZCBzM2NfcG1fZGVidWdfc21ka2xlZCh1MzIgc2V0LCB1MzIgY2xlYXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcmVnOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJlZyA9IF9fcmF3X3JlYWRsKFMzQzY0WFhfR1BOQ09OKTsKKwlyZWcgJj0gfihTM0M2NFhYX0dQTl9DT05NQVNLKDEyKSB8IFMzQzY0WFhfR1BOX0NPTk1BU0soMTMpIHwKKwkJIFMzQzY0WFhfR1BOX0NPTk1BU0soMTQpIHwgUzNDNjRYWF9HUE5fQ09OTUFTSygxNSkpOworCXJlZyB8PSBTM0M2NFhYX0dQTl9PVVRQVVQoMTIpIHwgUzNDNjRYWF9HUE5fT1VUUFVUKDEzKSB8CisJICAgICAgIFMzQzY0WFhfR1BOX09VVFBVVCgxNCkgfCBTM0M2NFhYX0dQTl9PVVRQVVQoMTUpOworCV9fcmF3X3dyaXRlbChyZWcsIFMzQzY0WFhfR1BOQ09OKTsKKworCXJlZyA9IF9fcmF3X3JlYWRsKFMzQzY0WFhfR1BOREFUKTsKKwlyZWcgJj0gfihjbGVhciA8PCAxMik7CisJcmVnIHw9IHNldCA8PCAxMjsKKwlfX3Jhd193cml0ZWwocmVnLCBTM0M2NFhYX0dQTkRBVCk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIGNvcmVfc2F2ZVtdID0geworCVNBVkVfSVRFTShTM0NfQVBMTF9MT0NLKSwKKwlTQVZFX0lURU0oUzNDX01QTExfTE9DSyksCisJU0FWRV9JVEVNKFMzQ19FUExMX0xPQ0spLAorCVNBVkVfSVRFTShTM0NfQ0xLX1NSQyksCisJU0FWRV9JVEVNKFMzQ19DTEtfRElWMCksCisJU0FWRV9JVEVNKFMzQ19DTEtfRElWMSksCisJU0FWRV9JVEVNKFMzQ19DTEtfRElWMiksCisJU0FWRV9JVEVNKFMzQ19DTEtfT1VUKSwKKwlTQVZFX0lURU0oUzNDX0hDTEtfR0FURSksCisJU0FWRV9JVEVNKFMzQ19QQ0xLX0dBVEUpLAorCVNBVkVfSVRFTShTM0NfU0NMS19HQVRFKSwKKwlTQVZFX0lURU0oUzNDX01FTTBfR0FURSksCisKKwlTQVZFX0lURU0oUzNDX0VQTExfQ09OMSksCisJU0FWRV9JVEVNKFMzQ19FUExMX0NPTjApLAorCisJU0FWRV9JVEVNKFMzQzY0WFhfTUVNMERSVkNPTiksCisJU0FWRV9JVEVNKFMzQzY0WFhfTUVNMURSVkNPTiksCisKKyNpZm5kZWYgQ09ORklHX0NQVV9GUkVRCisJU0FWRV9JVEVNKFMzQ19BUExMX0NPTiksCisJU0FWRV9JVEVNKFMzQ19NUExMX0NPTiksCisjZW5kaWYKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBtaXNjX3NhdmVbXSA9IHsKKwlTQVZFX0lURU0oUzNDNjRYWF9BSEJfQ09OMCksCisJU0FWRV9JVEVNKFMzQzY0WFhfQUhCX0NPTjEpLAorCVNBVkVfSVRFTShTM0M2NFhYX0FIQl9DT04yKSwKKwkKKwlTQVZFX0lURU0oUzNDNjRYWF9TUENPTiksCisKKwlTQVZFX0lURU0oUzNDNjRYWF9NRU0wQ09OU1RPUCksCisJU0FWRV9JVEVNKFMzQzY0WFhfTUVNMUNPTlNUT1ApLAorCVNBVkVfSVRFTShTM0M2NFhYX01FTTBDT05TTFAwKSwKKwlTQVZFX0lURU0oUzNDNjRYWF9NRU0wQ09OU0xQMSksCisJU0FWRV9JVEVNKFMzQzY0WFhfTUVNMUNPTlNMUCksCit9OworCit2b2lkIHMzY19wbV9jb25maWd1cmVfZXh0aW50KHZvaWQpCit7CisJX19yYXdfd3JpdGVsKHMzY19pcnF3YWtlX2VpbnRtYXNrLCBTM0M2NFhYX0VJTlRfTUFTSyk7Cit9CisKK3ZvaWQgczNjX3BtX3Jlc3RvcmVfY29yZSh2b2lkKQoreworCV9fcmF3X3dyaXRlbCgwLCBTM0M2NFhYX0VJTlRfTUFTSyk7CisKKwlzM2NfcG1fZGVidWdfc21ka2xlZCgxIDw8IDIsIDApOworCisJczNjX3BtX2RvX3Jlc3RvcmVfY29yZShjb3JlX3NhdmUsIEFSUkFZX1NJWkUoY29yZV9zYXZlKSk7CisJczNjX3BtX2RvX3Jlc3RvcmUobWlzY19zYXZlLCBBUlJBWV9TSVpFKG1pc2Nfc2F2ZSkpOworfQorCit2b2lkIHMzY19wbV9zYXZlX2NvcmUodm9pZCkKK3sKKwlzM2NfcG1fZG9fc2F2ZShtaXNjX3NhdmUsIEFSUkFZX1NJWkUobWlzY19zYXZlKSk7CisJczNjX3BtX2RvX3NhdmUoY29yZV9zYXZlLCBBUlJBWV9TSVpFKGNvcmVfc2F2ZSkpOworfQorCisvKiBzaW5jZSBib3RoIHMzYzY0MDAgYW5kIHMzYzY0MTAgc2hhcmUgdGhlIHNhbWUgc2xlZXAgcG0gY2FsbHMsIHdlCisgKiBwdXQgdGhlIHBlci1jcHUgY29kZSBpbiBoZXJlIHVudGlsIGFueSBuZXcgY3B1IGNvbWVzIGFsb25nIGFuZCBjaGFuZ2VzCisgKiB0aGlzLgorICovCisKK3N0YXRpYyB2b2lkIHMzYzY0eHhfY3B1X3N1c3BlbmQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCS8qIHNldCBvdXIgc3RhbmRieSBtZXRob2QgdG8gc2xlZXAgKi8KKworCXRtcCA9IF9fcmF3X3JlYWRsKFMzQzY0WFhfUFdSX0NGRyk7CisJdG1wICY9IH5TM0M2NFhYX1BXUkNGR19DRkdfV0ZJX01BU0s7CisJdG1wIHw9IFMzQzY0WFhfUFdSQ0ZHX0NGR19XRklfU0xFRVA7CisJX19yYXdfd3JpdGVsKHRtcCwgUzNDNjRYWF9QV1JfQ0ZHKTsKKworCS8qIGNsZWFyIGFueSBvbGQgd2FrZXVwICovCisKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoUzNDNjRYWF9XQUtFVVBfU1RBVCksCisJCSAgICAgUzNDNjRYWF9XQUtFVVBfU1RBVCk7CisKKwkvKiBzZXQgdGhlIExFRCBzdGF0ZSB0byAwMTEwIG92ZXIgc2xlZXAgKi8KKwlzM2NfcG1fZGVidWdfc21ka2xlZCgzIDw8IDEsIDB4Zik7CisKKwkvKiBpc3N1ZSB0aGUgc3RhbmRieSBzaWduYWwgaW50byB0aGUgcG0gdW5pdC4gTm90ZSwgd2UKKwkgKiBpc3N1ZSBhIHdyaXRlLWJ1ZmZlciBkcmFpbiBqdXN0IGluIGNhc2UgKi8KKworCXRtcCA9IDA7CisKKwlhc20oImIgMWZcblx0IgorCSAgICAiLmFsaWduIDVcblx0IgorCSAgICAiMTpcblx0IgorCSAgICAibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTAsIDVcblx0IgorCSAgICAibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTAsIDRcblx0IgorCSAgICAibWNyIHAxNSwgMCwgJTAsIGM3LCBjMCwgNCIgOjogInIiICh0bXApKTsKKworCS8qIHdlIHNob3VsZCBuZXZlciBnZXQgcGFzdCBoZXJlICovCisKKwlwYW5pYygic2xlZXAgcmVzdW1lZCB0byBvcmlnaW5hdG9yPyIpOworfQorCitzdGF0aWMgdm9pZCBzM2M2NHh4X3BtX3ByZXBhcmUodm9pZCkKK3sKKwkvKiBzdG9yZSBhZGRyZXNzIG9mIHJlc3VtZS4gKi8KKwlfX3Jhd193cml0ZWwodmlydF90b19waHlzKHMzY19jcHVfcmVzdW1lKSwgUzNDNjRYWF9JTkZPUk0wKTsKKworCS8qIGVuc3VyZSBwcmV2aW91cyB3YWtldXAgc3RhdGUgaXMgY2xlYXJlZCBiZWZvcmUgc2xlZXBpbmcgKi8KKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoUzNDNjRYWF9XQUtFVVBfU1RBVCksIFMzQzY0WFhfV0FLRVVQX1NUQVQpOworfQorCitzdGF0aWMgaW50IHMzYzY0eHhfcG1faW5pdCh2b2lkKQoreworCXBtX2NwdV9wcmVwID0gczNjNjR4eF9wbV9wcmVwYXJlOworCXBtX2NwdV9zbGVlcCA9IHMzYzY0eHhfY3B1X3N1c3BlbmQ7CisJcG1fdWFydF91ZGl2c2xvdCA9IDE7CisJcmV0dXJuIDA7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjNjR4eF9wbV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zM2M2NDAwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvczNjNjQwMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwN2UzNGUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvczNjNjQwMC5jCkBAIC0wLDAgKzEsODkgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjNjR4eC9jcHUuYworICoKKyAqIENvcHlyaWdodCAyMDA5IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9zZGhjaS5oPgorI2luY2x1ZGUgPHBsYXQvaWljLWNvcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3MzYzY0MDAuaD4KKwordm9pZCBfX2luaXQgczNjNjQwMF9tYXBfaW8odm9pZCkKK3sKKwkvKiBzZXR1cCBTREhDSSAqLworCisJczNjNjQwMF9kZWZhdWx0X3NkaGNpMCgpOworCXMzYzY0MDBfZGVmYXVsdF9zZGhjaTEoKTsKKwlzM2M2NDAwX2RlZmF1bHRfc2RoY2kyKCk7CisKKwkvKiB0aGUgaTJjIGRldmljZXMgYXJlIGRpcmVjdGx5IGNvbXBhdGlibGUgd2l0aCBzM2MyNDQwICovCisJczNjX2kyYzBfc2V0bmFtZSgiczNjMjQ0MC1pMmMiKTsKKworCXMzY19kZXZpY2VfbmFuZC5uYW1lID0gInMzYzY0MDAtbmFuZCI7Cit9CisKK3ZvaWQgX19pbml0IHMzYzY0MDBfaW5pdF9jbG9ja3MoaW50IHh0YWwpCit7CisJczNjNjR4eF9yZWdpc3Rlcl9jbG9ja3MoeHRhbCwgUzNDNjQwMF9DTEtESVYwX0FSTV9NQVNLKTsKKwlzM2M2NDAwX3NldHVwX2Nsb2NrcygpOworfQorCit2b2lkIF9faW5pdCBzM2M2NDAwX2luaXRfaXJxKHZvaWQpCit7CisJLyogVklDMCBkb2VzIG5vdCBoYXZlIElSUVMgNS4uNywKKwkgKiBWSUMxIGlzIGZ1bGx5IHBvcHVsYXRlZC4gKi8KKwlzM2M2NHh4X2luaXRfaXJxKH4wICYgfigweGYgPDwgNSksIH4wKTsKK30KKworc3RydWN0IHN5c2Rldl9jbGFzcyBzM2M2NDAwX3N5c2NsYXNzID0geworCS5uYW1lCT0gInMzYzY0MDAtY29yZSIsCit9OworCitzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgczNjNjQwMF9zeXNkZXYgPSB7CisJLmNscwk9ICZzM2M2NDAwX3N5c2NsYXNzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjNjQwMF9jb3JlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZzM2M2NDAwX3N5c2NsYXNzKTsKK30KKworY29yZV9pbml0Y2FsbChzM2M2NDAwX2NvcmVfaW5pdCk7CisKK2ludCBfX2luaXQgczNjNjQwMF9pbml0KHZvaWQpCit7CisJcHJpbnRrKCJTM0M2NDAwOiBJbml0aWFsaXNpbmcgYXJjaGl0ZWN0dXJlXG4iKTsKKworCXJldHVybiBzeXNkZXZfcmVnaXN0ZXIoJnMzYzY0MDBfc3lzZGV2KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zM2M2NDEwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvczNjNjQxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5NjM1ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvczNjNjQxMC5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjNjR4eC9zM2M2NDEwLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9zZGhjaS5oPgorI2luY2x1ZGUgPHBsYXQvaWljLWNvcmUuaD4KKyNpbmNsdWRlIDxtYWNoL3MzYzY0MDAuaD4KKyNpbmNsdWRlIDxtYWNoL3MzYzY0MTAuaD4KKwordm9pZCBfX2luaXQgczNjNjQxMF9tYXBfaW8odm9pZCkKK3sKKwkvKiBpbml0aWFsaXNlIGRldmljZSBpbmZvcm1hdGlvbiBlYXJseSAqLworCXMzYzY0MTBfZGVmYXVsdF9zZGhjaTAoKTsKKwlzM2M2NDEwX2RlZmF1bHRfc2RoY2kxKCk7CisJczNjNjQxMF9kZWZhdWx0X3NkaGNpMigpOworCisJLyogdGhlIGkyYyBkZXZpY2VzIGFyZSBkaXJlY3RseSBjb21wYXRpYmxlIHdpdGggczNjMjQ0MCAqLworCXMzY19pMmMwX3NldG5hbWUoInMzYzI0NDAtaTJjIik7CisJczNjX2kyYzFfc2V0bmFtZSgiczNjMjQ0MC1pMmMiKTsKKworCXMzY19kZXZpY2VfbmFuZC5uYW1lID0gInMzYzY0MDAtbmFuZCI7Cit9CisKK3ZvaWQgX19pbml0IHMzYzY0MTBfaW5pdF9jbG9ja3MoaW50IHh0YWwpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbml0aWFsaXNpbmcgY2xvY2tzXG4iLCBfX2Z1bmNfXyk7CisJczNjNjR4eF9yZWdpc3Rlcl9jbG9ja3MoeHRhbCwgUzNDNjQxMF9DTEtESVYwX0FSTV9NQVNLKTsKKwlzM2M2NDAwX3NldHVwX2Nsb2NrcygpOworfQorCit2b2lkIF9faW5pdCBzM2M2NDEwX2luaXRfaXJxKHZvaWQpCit7CisJLyogVklDMCBpcyBtaXNzaW5nIElSUTcsIFZJQzEgaXMgZnVsbHkgcG9wdWxhdGVkLiAqLworCXMzYzY0eHhfaW5pdF9pcnEofjAgJiB+KDEgPDwgNyksIH4wKTsKK30KKworc3RydWN0IHN5c2Rldl9jbGFzcyBzM2M2NDEwX3N5c2NsYXNzID0geworCS5uYW1lCT0gInMzYzY0MTAtY29yZSIsCit9OworCitzdGF0aWMgc3RydWN0IHN5c19kZXZpY2UgczNjNjQxMF9zeXNkZXYgPSB7CisJLmNscwk9ICZzM2M2NDEwX3N5c2NsYXNzLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjNjQxMF9jb3JlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZzM2M2NDEwX3N5c2NsYXNzKTsKK30KKworY29yZV9pbml0Y2FsbChzM2M2NDEwX2NvcmVfaW5pdCk7CisKK2ludCBfX2luaXQgczNjNjQxMF9pbml0KHZvaWQpCit7CisJcHJpbnRrKCJTM0M2NDEwOiBJbml0aWFsaXNpbmcgYXJjaGl0ZWN0dXJlXG4iKTsKKworCXJldHVybiBzeXNkZXZfcmVnaXN0ZXIoJnMzYzY0MTBfc3lzZGV2KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zZXR1cC1mYi0yNGJwcC5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3NldHVwLWZiLTI0YnBwLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL3BsYXQtczNjNjR4eC9zZXR1cC1mYi0yNGJwcC5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAtZmItMjRicHAuYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3NldHVwLWkyYzAuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1pMmMwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDFiMTFlNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1pMmMwLmMKQEAgLTAsMCArMSwzMSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3NldHVwLWkyYzAuYworICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogQmFzZSBTM0M2NFhYIEkyQyBidXMgMCBncGlvIGNvbmZpZ3VyYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2U7IC8qIGRvbid0IG5lZWQgdGhlIGNvbnRlbnRzICovCisKKyNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8tYmFuay1iLmg+CisjaW5jbHVkZSA8cGxhdC9paWMuaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CisKK3ZvaWQgczNjX2kyYzBfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQQig1KSwgUzNDNjRYWF9HUEI1X0kyQ19TQ0wwKTsKKwlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEIoNiksIFMzQzY0WFhfR1BCNl9JMkNfU0RBMCk7CisJczNjX2dwaW9fc2V0cHVsbChTM0M2NFhYX0dQQig1KSwgUzNDX0dQSU9fUFVMTF9VUCk7CisJczNjX2dwaW9fc2V0cHVsbChTM0M2NFhYX0dQQig2KSwgUzNDX0dQSU9fUFVMTF9VUCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAtaTJjMS5jIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3NldHVwLWkyYzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGNlNTdkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2M2NHh4L3NldHVwLWkyYzEuYwpAQCAtMCwwICsxLDMxIEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvc2V0dXAtaTJjMS5jCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBCYXNlIFMzQzY0WFggSTJDIGJ1cyAxIGdwaW8gY29uZmlndXJhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHBsYXRmb3JtX2RldmljZTsgLyogZG9uJ3QgbmVlZCB0aGUgY29udGVudHMgKi8KKworI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby1iYW5rLWIuaD4KKyNpbmNsdWRlIDxwbGF0L2lpYy5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KKwordm9pZCBzM2NfaTJjMV9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BCKDIpLCBTM0M2NFhYX0dQQjJfSTJDX1NDTDEpOworCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQQigzKSwgUzNDNjRYWF9HUEIzX0kyQ19TREExKTsKKwlzM2NfZ3Bpb19zZXRwdWxsKFMzQzY0WFhfR1BCKDIpLCBTM0NfR1BJT19QVUxMX1VQKTsKKwlzM2NfZ3Bpb19zZXRwdWxsKFMzQzY0WFhfR1BCKDMpLCBTM0NfR1BJT19QVUxMX1VQKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zZXR1cC1zZGhjaS1ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAtc2RoY2ktZ3Bpby5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9wbGF0LXMzYzY0eHgvc2V0dXAtc2RoY2ktZ3Bpby5jCnJlbmFtZSB0byBhcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAtc2RoY2ktZ3Bpby5jCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAtc2RoY2kuYyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zZXR1cC1zZGhjaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhOTQyMDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAtc2RoY2kuYwpAQCAtMCwwICsxLDcyIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2V0dXAtc2RoY2kuYworICoKKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFMzQzY0MDAvUzNDNjQxMCAtIEhlbHBlciBmdW5jdGlvbnMgZm9yIHNldHRpZ24gdXAgU0RIQ0kgZGV2aWNlKHMpIChIU01NQykKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGxpbnV4L21tYy9jYXJkLmg+CisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KKworI2luY2x1ZGUgPHBsYXQvcmVncy1zZGhjaS5oPgorI2luY2x1ZGUgPHBsYXQvc2RoY2kuaD4KKworLyogY2xvY2sgc291cmNlcyBmb3IgdGhlIG1tYyBidXMgY2xvY2ssIG9yZGVyIGFzIGZvciB0aGUgY3RybDJbNS4uNF0gKi8KKworY2hhciAqczNjNjR4eF9oc21tY19jbGtzcmNzWzRdID0geworCVswXSA9ICJoc21tYyIsCisJWzFdID0gImhzbW1jIiwKKwlbMl0gPSAibW1jX2J1cyIsCisJLyogWzNdID0gIjQ4bSIsIC0gbm90ZSBub3Qgc3VjY2Vzc2Z1bGx5IHVzZWQgeWV0ICovCit9OworCit2b2lkIHMzYzY0MDBfc2V0dXBfc2RoY2lfY2ZnX2NhcmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAorCQkJCSAgdm9pZCBfX2lvbWVtICpyLAorCQkJCSAgc3RydWN0IG1tY19pb3MgKmlvcywKKwkJCQkgIHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3sKKwl1MzIgY3RybDIsIGN0cmwzOworCisJY3RybDIgPSByZWFkbChyICsgUzNDX1NESENJX0NPTlRST0wyKTsKKwljdHJsMiAmPSBTM0NfU0RIQ0lfQ1RSTDJfU0VMQkFTRUNMS19NQVNLOworCWN0cmwyIHw9IChTM0M2NFhYX1NESENJX0NUUkwyX0VOU1RBQVNZTkNDTFIgfAorCQkgIFMzQzY0WFhfU0RIQ0lfQ1RSTDJfRU5DTURDTkZNU0sgfAorCQkgIFMzQ19TREhDSV9DVFJMMl9FTkZCQ0xLUlggfAorCQkgIFMzQ19TREhDSV9DVFJMMl9ERkNOVF9OT05FIHwKKwkJICBTM0NfU0RIQ0lfQ1RSTDJfRU5DTEtPVVRIT0xEKTsKKworCWlmIChpb3MtPmNsb2NrIDwgMjUgKiAxMDAwMDAwKQorCQljdHJsMyA9IChTM0NfU0RIQ0lfQ1RSTDNfRkNTRUwzIHwKKwkJCSBTM0NfU0RIQ0lfQ1RSTDNfRkNTRUwyIHwKKwkJCSBTM0NfU0RIQ0lfQ1RSTDNfRkNTRUwxIHwKKwkJCSBTM0NfU0RIQ0lfQ1RSTDNfRkNTRUwwKTsKKwllbHNlCisJCWN0cmwzID0gKFMzQ19TREhDSV9DVFJMM19GQ1NFTDEgfCBTM0NfU0RIQ0lfQ1RSTDNfRkNTRUwwKTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzOiBDVFJMIDI9JTA4eCwgMz0lMDh4XG4iLCBfX2Z1bmNfXywgY3RybDIsIGN0cmwzKTsKKwl3cml0ZWwoY3RybDIsIHIgKyBTM0NfU0RIQ0lfQ09OVFJPTDIpOworCXdyaXRlbChjdHJsMywgciArIFMzQ19TREhDSV9DT05UUk9MMyk7Cit9CisKK3ZvaWQgczNjNjQxMF9zZXR1cF9zZGhjaV9jZmdfY2FyZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJICB2b2lkIF9faW9tZW0gKnIsCisJCQkJICBzdHJ1Y3QgbW1jX2lvcyAqaW9zLAorCQkJCSAgc3RydWN0IG1tY19jYXJkICpjYXJkKQoreworCXdyaXRlbChTM0M2NFhYX1NESENJX0NPTlRST0w0X0RSSVZFXzltQSwgciArIFMzQzY0WFhfU0RIQ0lfQ09OVFJPTDQpOworCisJczNjNjQwMF9zZXR1cF9zZGhjaV9jZmdfY2FyZChkZXYsIHIsIGlvcywgY2FyZCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2xlZXAuUyBiL2FyY2gvYXJtL21hY2gtczNjNjR4eC9zbGVlcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZWY0NDMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzY0eHgvc2xlZXAuUwpAQCAtMCwwICsxLDE0NCBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3NsZWVwLlMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIFMzQzY0WFggQ1BVIHNsZWVwIGNvZGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI3VuZGVmIFMzQzY0WFhfVkFfR1BJTworI2RlZmluZSBTM0M2NFhYX1ZBX0dQSU8gKDB4MCkKKworI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLWJhbmstbi5oPgorCisjZGVmaW5lIExMX1VBUlQgKFMzQ19QQV9VQVJUICsgKDB4NDAwICogQ09ORklHX1MzQ19MT1dMRVZFTF9VQVJUX1BPUlQpKQorCisJLnRleHQKKworCS8qIHMzY19jcHVfc2F2ZQorCSAqCisJICogU2F2ZSBlbm91Z2ggcHJvY2Vzc29yIHN0YXRlIHRvIGFsbG93IHRoZSByZXN0YXJ0IG9mIHRoZSBwbS5jCisJICogY29kZSBhZnRlciByZXN1bWUuCisJICoKKwkgKiBlbnRyeToKKwkgKglyMCA9IHBvaW50ZXIgdG8gdGhlIHNhdmUgYmxvY2sKKwkqLworCitFTlRSWShzM2NfY3B1X3NhdmUpCisJc3RtZmQJc3AhLCB7IHI0IC0gcjEyLCBsciB9CisKKwltcmMJcDE1LCAwLCByNCwgYzEzLCBjMCwgMAlAIEZDU0UvUElECisJbXJjCXAxNSwgMCwgcjUsIGMzLCBjMCwgMAlAIERvbWFpbiBJRAorCW1yYwlwMTUsIDAsIHI2LCBjMiwgYzAsIDAJQCBUcmFuc2xhdGlvbiBUYWJsZSBCQVNFMAorCW1yYwlwMTUsIDAsIHI3LCBjMiwgYzAsIDEJQCBUcmFuc2xhdGlvbiBUYWJsZSBCQVNFMQorCW1yYwlwMTUsIDAsIHI4LCBjMiwgYzAsIDIJQCBUcmFuc2xhdGlvbiBUYWJsZSBDb250cm9sCisJbXJjCXAxNSwgMCwgcjksIGMxLCBjMCwgMAlAIENvbnRyb2wgcmVnaXN0ZXIKKwltcmMJcDE1LCAwLCByMTAsIGMxLCBjMCwgMQlAIEF1eGlsaWFyeSBjb250cm9sIHJlZ2lzdGVyCisJbXJjCXAxNSwgMCwgcjExLCBjMSwgYzAsIDIJQCBDby1wcm9jZXNzb3IgYWNjZXNzIGNvbnRyb2xzCisKKwlzdG1pYQlyMCwgeyByNCAtIHIxMyB9CUAgU2F2ZSBDUCByZWdpc3RlcnMgYW5kIFNQCisKKwlAQCBzYXZlIG91ciBzdGF0ZSB0byByYW0KKwlibAlzM2NfcG1fY2JfZmx1c2hjYWNoZQorCisJQEAgY2FsbCBmaW5hbCBzdXNwZW5kIGNvZGUKKwlsZHIJcjAsID1wbV9jcHVfc2xlZXAKKwlsZHIJcGMsIFtyMF0KKwkKKwlAQCByZXR1cm4gdG8gdGhlIGNhbGxlciwgYWZ0ZXIgdGhlIE1NVSBpcyB0dXJuZWQgb24uCisJQEAgcmVzdG9yZSB0aGUgbGFzdCBiaXRzIG9mIHRoZSBzdGFjayBhbmQgcmV0dXJuLgorcmVzdW1lX3dpdGhfbW11OgorCWxkbWZkCXNwISwgeyByNCAtIHIxMiwgcGMgfQlAIHJldHVybiwgZnJvbSBzcCBmcm9tIHMzY19jcHVfc2F2ZQorCisJLmRhdGEKKworCS8qIHRoZSBuZXh0IGJpdCBpcyBjb2RlLCBidXQgaXQgcmVxdWlyZXMgZWFzeSBhY2Nlc3MgdG8gdGhlCisJICogczNjX3NsZWVwX3NhdmVfcGh5cyBkYXRhIGJlZm9yZSB0aGUgTU1VIGlzIHN3aXRjaGVkIG9uLCBzbworCSAqIHdlIHN0b3JlIHRoZSBjb2RlIHRoYXQgbmVlZHMgdGhpcyB2YXJpYWJsZSBpbiB0aGUgLmRhdGEgd2hlcmUKKwkgKiB0aGUgdmFsdWUgY2FuIGJlIHdyaXR0ZW4gdG8gKHRoZSAudGV4dCBzZWdtZW50IGlzIFJPKS4KKwkqLworCisJLmdsb2JhbAlzM2Nfc2xlZXBfc2F2ZV9waHlzCitzM2Nfc2xlZXBfc2F2ZV9waHlzOgorCS53b3JkCTAKKworCS8qIFNsZWVwIG1hZ2ljLCB0aGUgd29yZCBiZWZvcmUgdGhlIHJlc3VtZSBlbnRyeSBwb2ludCBzbyB0aGF0IHRoZQorCSAqIGJvb3Rsb2FkZXIgY2FuIGNoZWNrIGZvciBhIHJlc3VtZWFibGUgaW1hZ2UuICovCisKKwkud29yZAkweDJiZWRmMDBkCisKKwkvKiBzM2NfY3B1X3JldXNtZQorCSAqCisJICogVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQsIHN0b3JlZCBieSB3aGF0ZXZlciBtZXRob2QgdGhlIGJvb3Rsb2FkZXIKKwkgKiByZXF1aXJlcyB0byBnZXQgdGhlIGtlcm5lbCBydW5uaWduIGFnYWluLiBUaGlzIGNvZGUgZXhwZWN0cyB0byBiZQorCSAqIGVudGVyZWQgd2l0aCBubyBjYWNoZXMgbGl2ZSBhbmQgdGhlIE1NVSBkaXNhYmxlZC4gSXQgd2lsbCB0aGVuCisJICogcmVzdG9yZSB0aGUgTU1VIGFuZCBvdGhlciBiYXNpYyBDUCByZWdpc3RlcnMgc2F2ZWQgYW5kIHJlc3RhcnQKKwkgKiB0aGUga2VybmVsIEMgY29kZSB0byBmaW5pc2ggdGhlIHJlc3VtZSBjb2RlLgorCSovCisKK0VOVFJZKHMzY19jcHVfcmVzdW1lKQorCW1zcgljcHNyX2MsICNQU1JfSV9CSVQgfCBQU1JfRl9CSVQgfCBTVkNfTU9ERQorCWxkcglyMiwgPUxMX1VBUlQJCS8qIGZvciBkZWJ1ZyAqLworCisjaWZkZWYgQ09ORklHX1MzQ19QTV9ERUJVR19MRURfU01ESworCS8qIEluaXRpYWxpc2UgdGhlIEdQSU8gc3RhdGUgaWYgd2UgYXJlIGRlYnVnZ2luZyB2aWEgdGhlIFNNREsgTEVEcywKKwkgKiBhcyB0aGUgdWJvb3QgdmVyc2lvbiBzdXBwbGllZCByZXNldHMgdGhlc2UgdG8gaW5wdXRzIGR1cmluZyB0aGUKKwkgKiByZXN1bWUgY2hlY2tzLgorCSovCisKKwlsZHIJcjMsID1TM0M2NFhYX1BBX0dQSU8KKwlsZHIJcjAsIFsgcjMsICNTM0M2NFhYX0dQTkNPTiBdCisJYmljCXIwLCByMCwgIyhTM0M2NFhYX0dQTl9DT05NQVNLKDEyKSB8IFMzQzY0WFhfR1BOX0NPTk1BU0soMTMpIHwgXAorCQkJICBTM0M2NFhYX0dQTl9DT05NQVNLKDE0KSB8IFMzQzY0WFhfR1BOX0NPTk1BU0soMTUpKQorCW9ycglyMCwgcjAsICMoUzNDNjRYWF9HUE5fT1VUUFVUKDEyKSB8IFMzQzY0WFhfR1BOX09VVFBVVCgxMykgfCBcCisJCQkgIFMzQzY0WFhfR1BOX09VVFBVVCgxNCkgfCBTM0M2NFhYX0dQTl9PVVRQVVQoMTUpKQorCXN0cglyMCwgWyByMywgI1MzQzY0WFhfR1BOQ09OIF0KKworCWxkcglyMCwgWyByMywgI1MzQzY0WFhfR1BOREFUIF0KKwliaWMJcjAsIHIwLCAjMHhmIDw8IDEyCQkJQCBHUE4xMi4uMTUKKwlvcnIJcjAsIHIwLCAjMSA8PCAxNQkJCUAgR1BOMTUKKwlzdHIJcjAsIFsgcjMsICNTM0M2NFhYX0dQTkRBVCBdCisjZW5kaWYKKworCS8qIF9fdjZfc2V0dXAgZnJvbSBhcmNoL2FybS9tbS9wcm9jLXY2LlMsIGVuc3VyZSB0aGF0IHRoZSBjYWNoZXMKKwkgKiBhcmUgdGhvcm91Z2hseSBjbGVhbmVkIGp1c3QgaW4gY2FzZSB0aGUgYm9vdGxvYWRlciBkaWRuJ3QgZG8gaXQKKwkgKiBmb3IgdXMuICovCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAwCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBjYWNoZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTUsIDAJCUAgY2xlYW4raW52YWxpZGF0ZSBjYWNoZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgorCUBAbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgKyBEIFRMQnMKKwlAQG1jcglwMTUsIDAsIHIwLCBjNywgYzcsIDAJCUAgSW52YWxpZGF0ZSBJICsgRCBjYWNoZXMKKworCWxkcglyMCwgczNjX3NsZWVwX3NhdmVfcGh5cworCWxkbWlhCXIwLCB7IHI0IC0gcjEzIH0KKworCW1jcglwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCUAgRkNTRS9QSUQKKwltY3IJcDE1LCAwLCByNSwgYzMsIGMwLCAwCUAgRG9tYWluIElECisJbWNyCXAxNSwgMCwgcjYsIGMyLCBjMCwgMAlAIFRyYW5zbGF0aW9uIFRhYmxlIEJBU0UwCisJbWNyCXAxNSwgMCwgcjcsIGMyLCBjMCwgMQlAIFRyYW5zbGF0aW9uIFRhYmxlIEJBU0UxCisJbWNyCXAxNSwgMCwgcjgsIGMyLCBjMCwgMglAIFRyYW5zbGF0aW9uIFRhYmxlIENvbnRyb2wKKwltY3IJcDE1LCAwLCByMTAsIGMxLCBjMCwgMQlAIEF1eGlsaWFyeSBjb250cm9sIHJlZ2lzdGVyCisKKwltb3YJcjAsICMwCQkJQCByZXN0b3JlIGNvcHJvIGFjY2VzcyBjb250cm9scworCW1jcglwMTUsIDAsIHIxMSwgYzEsIGMwLCAyCUAgQ28tcHJvY2Vzc29yIGFjY2VzcyBjb250cm9scworCW1jciAJcDE1LCAwLCByMCwgYzcsIGM1LCA0CisKKwlsZHIJcjIsID1yZXN1bWVfd2l0aF9tbXUKKwltY3IJcDE1LCAwLCByOSwgYzEsIGMwLCAwCQkvKiB0dXJuIG1tdSBiYWNrIG9uICovCisJbm9wCisJbW92CXBjLCByMgkJCQkvKiBqdW1wIGJhY2sgKi8KKworCS5lbmQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMyOWZmOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9LY29uZmlnCkBAIC0wLDAgKzEsMjEgQEAKKyMgYXJjaC9hcm0vbWFjaC1zNXA2NDQwL0tjb25maWcKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisjCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworIworIyBMaWNlbnNlZCB1bmRlciBHUEx2MgorCitpZiBBUkNIX1M1UDY0NDAKKworY29uZmlnIENQVV9TNVA2NDQwCisJYm9vbAorCWhlbHAKKwkgIEVuYWJsZSBTNVA2NDQwIENQVSBzdXBwb3J0CisKK2NvbmZpZyBNQUNIX1NNREs2NDQwCisJYm9vbCAiU01ESzY0NDAiCisJc2VsZWN0IENQVV9TNVA2NDQwCisJaGVscAorCSAgTWFjaGluZSBzdXBwb3J0IGZvciB0aGUgU2Ftc3VuZyBTTURLNjQ0MAorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhZDg5NGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDAvTWFrZWZpbGUKQEAgLTAsMCArMSwxOSBAQAorIyBhcmNoL2FybS9tYWNoLXM1cDY0NDAvTWFrZWZpbGUKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisjIAkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyMKKyMgTGljZW5zZWQgdW5kZXIgR1BMdjIKKworb2JqLXkJCQkJOj0KK29iai1tCQkJCTo9CitvYmotbgkJCQk6PQorb2JqLQkJCQk6PQorCisjIENvcmUgc3VwcG9ydCBmb3IgUzVQNjQ0MCBzeXN0ZW0KKworb2JqLSQoQ09ORklHX0NQVV9TNVA2NDQwKQkrPSBjcHUubyBpbml0Lm8gY2xvY2subyBncGlvLm8KKworIyBtYWNoaW5lIHN1cHBvcnQKKworb2JqLSQoQ09ORklHX01BQ0hfU01ESzY0NDApCSs9IG1hY2gtc21kazY0NDAubwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDAvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjkwYWExCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL01ha2VmaWxlLmJvb3QKQEAgLTAsMCArMSwyIEBACisgICB6cmVsYWRkci15CTo9IDB4MjAwMDgwMDAKK3BhcmFtc19waHlzLXkJOj0gMHgyMDAwMDEwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2Nsb2NrLmMgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDAvY2xvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjY3MmUxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2Nsb2NrLmMKQEAgLTAsMCArMSw2OTggQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwNjQ0MC9jbG9jay5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTNVA2NDQwIC0gQ2xvY2sgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1LWZyZXEuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLWNsa3NyYy5oPgorI2luY2x1ZGUgPHBsYXQvczVwLWNsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9wbGwuaD4KKyNpbmNsdWRlIDxwbGF0L3M1cDY0NDAuaD4KKworLyogQVBMTCBNdXggb3V0cHV0IGNsb2NrICovCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX21vdXRfYXBsbCA9IHsKKwkuY2xrICAgID0geworCQkubmFtZSAgICAgICAgICAgPSAibW91dF9hcGxsIiwKKwkJLmlkICAgICAgICAgICAgID0gLTEsCisJfSwKKwkuc291cmNlcyAgICAgICAgPSAmY2xrX3NyY19hcGxsLAorCS5yZWdfc3JjICAgICAgICA9IHsgLnJlZyA9IFM1UF9DTEtfU1JDMCwgLnNoaWZ0ID0gMCwgLnNpemUgPSAxIH0sCit9OworCitzdGF0aWMgaW50IHM1cDY0NDBfZXBsbF9lbmFibGUoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGludCBjdHJsYml0ID0gY2xrLT5jdHJsYml0OworCXVuc2lnbmVkIGludCBlcGxsX2NvbiA9IF9fcmF3X3JlYWRsKFM1UF9FUExMX0NPTikgJiB+Y3RybGJpdDsKKworCWlmIChlbmFibGUpCisJCV9fcmF3X3dyaXRlbChlcGxsX2NvbiB8IGN0cmxiaXQsIFM1UF9FUExMX0NPTik7CisJZWxzZQorCQlfX3Jhd193cml0ZWwoZXBsbF9jb24sIFM1UF9FUExMX0NPTik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgczVwNjQ0MF9lcGxsX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrLT5yYXRlOworfQorCitzdGF0aWMgdTMyIGVwbGxfZGl2W11bNV0gPSB7CisJeyAzNjAwMDAwMCwJMCwJNDgsIDEsIDQgfSwKKwl7IDQ4MDAwMDAwLAkwLAkzMiwgMSwgMyB9LAorCXsgNjAwMDAwMDAsCTAsCTQwLCAxLCAzIH0sCisJeyA3MjAwMDAwMCwJMCwJNDgsIDEsIDMgfSwKKwl7IDg0MDAwMDAwLAkwLAkyOCwgMSwgMiB9LAorCXsgOTYwMDAwMDAsCTAsCTMyLCAxLCAyIH0sCisJeyAzMjc2ODAwMCwJNDUyNjQsCTQzLCAxLCA0IH0sCisJeyA0NTE1ODAwMCwJNjkwMywJMzAsIDEsIDMgfSwKKwl7IDQ5MTUyMDAwLAk1MDMzMiwJMzIsIDEsIDMgfSwKKwl7IDY3NzM4MDAwLAkxMDM5OCwJNDUsIDEsIDMgfSwKKwl7IDczNzI4MDAwLAk5OTYxLAk0OSwgMSwgMyB9Cit9OworCitzdGF0aWMgaW50IHM1cDY0NDBfZXBsbF9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgZXBsbF9jb24sIGVwbGxfY29uX2s7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoY2xrLT5yYXRlID09IHJhdGUpCS8qIFJldHVybiBpZiBub3RoaW5nIGNoYW5nZWQgKi8KKwkJcmV0dXJuIDA7CisKKwllcGxsX2NvbiA9IF9fcmF3X3JlYWRsKFM1UF9FUExMX0NPTik7CisJZXBsbF9jb25fayA9IF9fcmF3X3JlYWRsKFM1UF9FUExMX0NPTl9LKTsKKworCWVwbGxfY29uX2sgJj0gfihQTEw5MFhYX0tESVZfTUFTSyk7CisJZXBsbF9jb24gJj0gfihQTEw5MFhYX01ESVZfTUFTSyB8IFBMTDkwWFhfUERJVl9NQVNLIHwgUExMOTBYWF9TRElWX01BU0spOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZXBsbF9kaXYpOyBpKyspIHsKKwkJIGlmIChlcGxsX2RpdltpXVswXSA9PSByYXRlKSB7CisJCQllcGxsX2Nvbl9rIHw9IChlcGxsX2RpdltpXVsxXSA8PCBQTEw5MFhYX0tESVZfU0hJRlQpOworCQkJZXBsbF9jb24gfD0gKGVwbGxfZGl2W2ldWzJdIDw8IFBMTDkwWFhfTURJVl9TSElGVCkgfAorCQkJCSAgICAoZXBsbF9kaXZbaV1bM10gPDwgUExMOTBYWF9QRElWX1NISUZUKSB8CisJCQkJICAgIChlcGxsX2RpdltpXVs0XSA8PCBQTEw5MFhYX1NESVZfU0hJRlQpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGVwbGxfZGl2KSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIENsb2NrIEVQTEwgRnJlcXVlbmN5XG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCV9fcmF3X3dyaXRlbChlcGxsX2NvbiwgUzVQX0VQTExfQ09OKTsKKwlfX3Jhd193cml0ZWwoZXBsbF9jb25faywgUzVQX0VQTExfQ09OX0spOworCisJY2xrLT5yYXRlID0gcmF0ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgczVwNjQ0MF9lcGxsX29wcyA9IHsKKwkuZ2V0X3JhdGUgPSBzNXA2NDQwX2VwbGxfZ2V0X3JhdGUsCisJLnNldF9yYXRlID0gczVwNjQ0MF9lcGxsX3NldF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tb3V0X2VwbGwgPSB7CisJLmNsayAgICA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIm1vdXRfZXBsbCIsCisJCS5pZCAgICAgICAgICAgICA9IC0xLAorCX0sCisJLnNvdXJjZXMgICAgICAgID0gJmNsa19zcmNfZXBsbCwKKwkucmVnX3NyYyAgICAgICAgPSB7IC5yZWcgPSBTNVBfQ0xLX1NSQzAsIC5zaGlmdCA9IDIsIC5zaXplID0gMSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tb3V0X21wbGwgPSB7CisJLmNsayA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIm1vdXRfbXBsbCIsCisJCS5pZCAgICAgICAgICAgICA9IC0xLAorCX0sCisJLnNvdXJjZXMgICAgICAgID0gJmNsa19zcmNfbXBsbCwKKwkucmVnX3NyYyAgICAgICAgPSB7IC5yZWcgPSBTNVBfQ0xLX1NSQzAsIC5zaGlmdCA9IDEsIC5zaXplID0gMSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2hfbG93ID0geworCS5uYW1lCQk9ICJoY2xrX2xvdyIsCisJLmlkCQk9IC0xLAorCS5yYXRlCQk9IDAsCisJLnBhcmVudAkJPSBOVUxMLAorCS5jdHJsYml0CT0gMCwKKwkub3BzCQk9ICZjbGtfb3BzX2RlZl9zZXRyYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX3BfbG93ID0geworCS5uYW1lCQk9ICJwY2xrX2xvdyIsCisJLmlkCQk9IC0xLAorCS5yYXRlCQk9IDAsCisJLnBhcmVudAkJPSBOVUxMLAorCS5jdHJsYml0CT0gMCwKKwkub3BzCQk9ICZjbGtfb3BzX2RlZl9zZXRyYXRlLAorfTsKKworZW51bSBwZXJmX2xldmVsIHsKKwlMMCA9IDUzMioxMDAwLAorCUwxID0gMjY2KjEwMDAsCisJTDIgPSAxMzMqMTAwMCwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgY2xvY2tfdGFibGVbXVszXSA9IHsKKwkvKntBUk1fQ0xLLCBESVZhcm0sIERJVmhjbGt9Ki8KKwl7TDAgKiAxMDAwLCAoMCA8PCBBUk1fRElWX1JBVElPX1NISUZUKSwgKDMgPDwgUzVQX0NMS0RJVjBfSENMS19TSElGVCl9LAorCXtMMSAqIDEwMDAsICgxIDw8IEFSTV9ESVZfUkFUSU9fU0hJRlQpLCAoMSA8PCBTNVBfQ0xLRElWMF9IQ0xLX1NISUZUKX0sCisJe0wyICogMTAwMCwgKDMgPDwgQVJNX0RJVl9SQVRJT19TSElGVCksICgwIDw8IFM1UF9DTEtESVYwX0hDTEtfU0hJRlQpfSwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHM1cDY0NDBfYXJtY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCXUzMiBjbGtkaXY7CisKKwkvKiBkaXZpc29yIG1hc2sgc3RhcnRzIGF0IGJpdDAsIHNvIG5vIG5lZWQgdG8gc2hpZnQgKi8KKwljbGtkaXYgPSBfX3Jhd19yZWFkbChBUk1fQ0xLX0RJVikgJiBBUk1fRElWX01BU0s7CisKKwlyZXR1cm4gcmF0ZSAvIChjbGtkaXYgKyAxKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgczVwNjQ0MF9hcm1jbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssCisJCQkJCQl1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJdTMyIGl0ZXI7CisKKwlmb3IgKGl0ZXIgPSAxIDsgaXRlciA8IEFSUkFZX1NJWkUoY2xvY2tfdGFibGUpIDsgaXRlcisrKSB7CisJCWlmIChyYXRlID4gY2xvY2tfdGFibGVbaXRlcl1bMF0pCisJCQlyZXR1cm4gY2xvY2tfdGFibGVbaXRlci0xXVswXTsKKwl9CisKKwlyZXR1cm4gY2xvY2tfdGFibGVbQVJSQVlfU0laRShjbG9ja190YWJsZSkgLSAxXVswXTsKK30KKworc3RhdGljIGludCBzNXA2NDQwX2FybWNsa19zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1MzIgcm91bmRfdG1wOworCXUzMiBpdGVyOworCXUzMiBjbGtfZGl2MF90bXA7CisJdTMyIGN1cl9yYXRlID0gY2xrLT5vcHMtPmdldF9yYXRlKGNsayk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXJvdW5kX3RtcCA9IGNsay0+b3BzLT5yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisJaWYgKHJvdW5kX3RtcCA9PSBjdXJfcmF0ZSkKKwkJcmV0dXJuIDA7CisKKworCWZvciAoaXRlciA9IDAgOyBpdGVyIDwgQVJSQVlfU0laRShjbG9ja190YWJsZSkgOyBpdGVyKyspIHsKKwkJaWYgKHJvdW5kX3RtcCA9PSBjbG9ja190YWJsZVtpdGVyXVswXSkKKwkJCWJyZWFrOworCX0KKworCWlmIChpdGVyID49IEFSUkFZX1NJWkUoY2xvY2tfdGFibGUpKQorCQlpdGVyID0gQVJSQVlfU0laRShjbG9ja190YWJsZSkgLSAxOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWlmIChjdXJfcmF0ZSA+IHJvdW5kX3RtcCkgeworCQkvKiBGcmVxdWVuY3kgRG93biAqLworCQljbGtfZGl2MF90bXAgPSBfX3Jhd19yZWFkbChBUk1fQ0xLX0RJVikgJiB+KEFSTV9ESVZfTUFTSyk7CisJCWNsa19kaXYwX3RtcCB8PSBjbG9ja190YWJsZVtpdGVyXVsxXTsKKwkJX19yYXdfd3JpdGVsKGNsa19kaXYwX3RtcCwgQVJNX0NMS19ESVYpOworCisJCWNsa19kaXYwX3RtcCA9IF9fcmF3X3JlYWRsKEFSTV9DTEtfRElWKSAmCisJCQkJfihTNVBfQ0xLRElWMF9IQ0xLX01BU0spOworCQljbGtfZGl2MF90bXAgfD0gY2xvY2tfdGFibGVbaXRlcl1bMl07CisJCV9fcmF3X3dyaXRlbChjbGtfZGl2MF90bXAsIEFSTV9DTEtfRElWKTsKKworCisJfSBlbHNlIHsKKwkJLyogRnJlcXVlbmN5IFVwICovCisJCWNsa19kaXYwX3RtcCA9IF9fcmF3X3JlYWRsKEFSTV9DTEtfRElWKSAmCisJCQkJfihTNVBfQ0xLRElWMF9IQ0xLX01BU0spOworCQljbGtfZGl2MF90bXAgfD0gY2xvY2tfdGFibGVbaXRlcl1bMl07CisJCV9fcmF3X3dyaXRlbChjbGtfZGl2MF90bXAsIEFSTV9DTEtfRElWKTsKKworCQljbGtfZGl2MF90bXAgPSBfX3Jhd19yZWFkbChBUk1fQ0xLX0RJVikgJiB+KEFSTV9ESVZfTUFTSyk7CisJCWNsa19kaXYwX3RtcCB8PSBjbG9ja190YWJsZVtpdGVyXVsxXTsKKwkJX19yYXdfd3JpdGVsKGNsa19kaXYwX3RtcCwgQVJNX0NMS19ESVYpOworCQl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJY2xrLT5yYXRlID0gY2xvY2tfdGFibGVbaXRlcl1bMF07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHM1cDY0NDBfY2xrYXJtX29wcyA9IHsKKwkuZ2V0X3JhdGUJPSBzNXA2NDQwX2FybWNsa19nZXRfcmF0ZSwKKwkuc2V0X3JhdGUJPSBzNXA2NDQwX2FybWNsa19zZXRfcmF0ZSwKKwkucm91bmRfcmF0ZQk9IHM1cDY0NDBfYXJtY2xrX3JvdW5kX3JhdGUsCit9OworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzNXA2NDQwX2Nsa19kb3V0bXBsbF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyByYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKworCWlmIChfX3Jhd19yZWFkbChTNVBfQ0xLX0RJVjApICYgUzVQX0NMS0RJVjBfTVBMTF9NQVNLKQorCQlyYXRlIC89IDI7CisKKwlyZXR1cm4gcmF0ZTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2RvdXRfbXBsbCA9IHsKKwkubmFtZQkJPSAiZG91dF9tcGxsIiwKKwkuaWQJCT0gLTEsCisJLnBhcmVudAkJPSAmY2xrX21vdXRfbXBsbC5jbGssCisJLm9wcyAgICAgICAgICAgID0gJihzdHJ1Y3QgY2xrX29wcykgeworCQkuZ2V0X3JhdGUJPSBzNXA2NDQwX2Nsa19kb3V0bXBsbF9nZXRfcmF0ZSwKKwl9LAorfTsKKworaW50IHM1cDY0NDBfY2xrNDhtX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTMyIHZhbDsKKworCS8qIGNhbid0IHJlbHkgb24gY2xvY2sgbG9jaywgdGhpcyByZWdpc3RlciBoYXMgb3RoZXIgdXNhZ2VzICovCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJdmFsID0gX19yYXdfcmVhZGwoUzVQX09USEVSUyk7CisJaWYgKGVuYWJsZSkKKwkJdmFsIHw9IFM1UF9PVEhFUlNfVVNCX1NJR19NQVNLOworCWVsc2UKKwkJdmFsICY9IH5TNVBfT1RIRVJTX1VTQl9TSUdfTUFTSzsKKworCV9fcmF3X3dyaXRlbCh2YWwsIFM1UF9PVEhFUlMpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczVwNjQ0MF9wY2xrX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXJldHVybiBzNXBfZ2F0ZWN0cmwoUzVQX0NMS19HQVRFX1BDTEssIGNsaywgZW5hYmxlKTsKK30KKworc3RhdGljIGludCBzNXA2NDQwX2hjbGswX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXJldHVybiBzNXBfZ2F0ZWN0cmwoUzVQX0NMS19HQVRFX0hDTEswLCBjbGssIGVuYWJsZSk7Cit9CisKK3N0YXRpYyBpbnQgczVwNjQ0MF9oY2xrMV9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gczVwX2dhdGVjdHJsKFM1UF9DTEtfR0FURV9IQ0xLMSwgY2xrLCBlbmFibGUpOworfQorCitzdGF0aWMgaW50IHM1cDY0NDBfc2Nsa19jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gczVwX2dhdGVjdHJsKFM1UF9DTEtfR0FURV9TQ0xLMCwgY2xrLCBlbmFibGUpOworfQorCitzdGF0aWMgaW50IHM1cDY0NDBfbWVtX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXJldHVybiBzNXBfZ2F0ZWN0cmwoUzVQX0NMS19HQVRFX01FTTAsIGNsaywgZW5hYmxlKTsKK30KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY2xvY2tzIHdpbGwgYmUgZGlzYWJsZWQgZHVyaW5nIGNsb2NrIGluaXRpYWxpemF0aW9uLiBJdCBpcworICogcmVjb21tZW5kZWQgdG8ga2VlcCB0aGUgZm9sbG93aW5nIGNsb2NrcyBkaXNhYmxlZCB1bnRpbCB0aGUgZHJpdmVyIHJlcXVlc3RzCisgKiBmb3IgZW5hYmxpbmcgdGhlIGNsb2NrLgorICovCitzdGF0aWMgc3RydWN0IGNsayBpbml0X2Nsb2Nrc19kaXNhYmxlW10gPSB7CisJeworCQkubmFtZQkJPSAibmFuZCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gsCisJCS5lbmFibGUJCT0gczVwNjQ0MF9tZW1fY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBfQ0xLQ09OX01FTTBfSENMS19ORkNPTiwKKwl9LCB7CisJCS5uYW1lCQk9ICJhZGMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wX2xvdywKKwkJLmVuYWJsZQkJPSBzNXA2NDQwX3BjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBfQ0xLQ09OX1BDTEtfVFNBREMsCisJfSwgeworCQkubmFtZQkJPSAiaTJjIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcF9sb3csCisJCS5lbmFibGUJCT0gczVwNjQ0MF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQX0NMS0NPTl9QQ0xLX0lJQzAsCisJfSwgeworCQkubmFtZQkJPSAiaTJzX3Y0MCIsCisJCS5pZAkJPSAwLAorCQkucGFyZW50CQk9ICZjbGtfcF9sb3csCisJCS5lbmFibGUJCT0gczVwNjQ0MF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQX0NMS0NPTl9QQ0xLX0lJUzIsCisJfSwgeworCQkubmFtZQkJPSAic3BpIiwKKwkJLmlkCQk9IDAsCisJCS5wYXJlbnQJCT0gJmNsa19wX2xvdywKKwkJLmVuYWJsZQkJPSBzNXA2NDQwX3BjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBfQ0xLQ09OX1BDTEtfU1BJMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJzcGkiLAorCQkuaWQJCT0gMSwKKwkJLnBhcmVudAkJPSAmY2xrX3BfbG93LAorCQkuZW5hYmxlCQk9IHM1cDY0NDBfcGNsa19jdHJsLAorCQkuY3RybGJpdAk9IFM1UF9DTEtDT05fUENMS19TUEkxLAorCX0sIHsKKwkJLm5hbWUJCT0gInNjbGtfc3BpXzQ4IiwKKwkJLmlkCQk9IDAsCisJCS5wYXJlbnQJCT0gJmNsa180OG0sCisJCS5lbmFibGUJCT0gczVwNjQ0MF9zY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQX0NMS0NPTl9TQ0xLMF9TUEkwXzQ4LAorCX0sIHsKKwkJLm5hbWUJCT0gInNjbGtfc3BpXzQ4IiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa180OG0sCisJCS5lbmFibGUJCT0gczVwNjQ0MF9zY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQX0NMS0NPTl9TQ0xLMF9TUEkxXzQ4LAorCX0sIHsKKwkJLm5hbWUJCT0gIm1tY180OG0iLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrXzQ4bSwKKwkJLmVuYWJsZQkJPSBzNXA2NDQwX3NjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBfQ0xLQ09OX1NDTEswX01NQzBfNDgsCisJfSwgeworCQkubmFtZQkJPSAibW1jXzQ4bSIsCisJCS5pZAkJPSAxLAorCQkucGFyZW50CQk9ICZjbGtfNDhtLAorCQkuZW5hYmxlCQk9IHM1cDY0NDBfc2Nsa19jdHJsLAorCQkuY3RybGJpdAk9IFM1UF9DTEtDT05fU0NMSzBfTU1DMV80OCwKKwl9LCB7CisJCS5uYW1lCQk9ICJtbWNfNDhtIiwKKwkJLmlkCQk9IDIsCisJCS5wYXJlbnQJCT0gJmNsa180OG0sCisJCS5lbmFibGUJCT0gczVwNjQ0MF9zY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQX0NMS0NPTl9TQ0xLMF9NTUMyXzQ4LAorCX0sIHsKKwkJLm5hbWUgICAgCT0gIm90ZyIsCisJCS5pZAkgICAJPSAtMSwKKwkJLnBhcmVudCAgCT0gJmNsa19oX2xvdywKKwkJLmVuYWJsZSAgCT0gczVwNjQ0MF9oY2xrMF9jdHJsLAorCQkuY3RybGJpdCAJPSBTNVBfQ0xLQ09OX0hDTEswX1VTQgorCX0sIHsKKwkJLm5hbWUgICAgCT0gInBvc3QiLAorCQkuaWQJICAgCT0gLTEsCisJCS5wYXJlbnQgIAk9ICZjbGtfaF9sb3csCisJCS5lbmFibGUgIAk9IHM1cDY0NDBfaGNsazBfY3RybCwKKwkJLmN0cmxiaXQgCT0gUzVQX0NMS0NPTl9IQ0xLMF9QT1NUMAorCX0sIHsKKwkJLm5hbWUJCT0gImxjZCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2hfbG93LAorCQkuZW5hYmxlCQk9IHM1cDY0NDBfaGNsazFfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBfQ0xLQ09OX0hDTEsxX0RJU1BDT04sCisJfSwgeworCQkubmFtZQkJPSAiaHNtbWMiLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrX2hfbG93LAorCQkuZW5hYmxlCQk9IHM1cDY0NDBfaGNsazBfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBfQ0xLQ09OX0hDTEswX0hTTU1DMCwKKwl9LCB7CisJCS5uYW1lCQk9ICJoc21tYyIsCisJCS5pZAkJPSAxLAorCQkucGFyZW50CQk9ICZjbGtfaF9sb3csCisJCS5lbmFibGUJCT0gczVwNjQ0MF9oY2xrMF9jdHJsLAorCQkuY3RybGJpdAk9IFM1UF9DTEtDT05fSENMSzBfSFNNTUMxLAorCX0sIHsKKwkJLm5hbWUJCT0gImhzbW1jIiwKKwkJLmlkCQk9IDIsCisJCS5wYXJlbnQJCT0gJmNsa19oX2xvdywKKwkJLmVuYWJsZQkJPSBzNXA2NDQwX2hjbGswX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQX0NMS0NPTl9IQ0xLMF9IU01NQzIsCisJfSwgeworCQkubmFtZQkJPSAicnRjIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcF9sb3csCisJCS5lbmFibGUJCT0gczVwNjQ0MF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQX0NMS0NPTl9QQ0xLX1JUQywKKwl9LCB7CisJCS5uYW1lCQk9ICJ3YXRjaGRvZyIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX3BfbG93LAorCQkuZW5hYmxlCQk9IHM1cDY0NDBfcGNsa19jdHJsLAorCQkuY3RybGJpdAk9IFM1UF9DTEtDT05fUENMS19XRFQsCisJfSwgeworCQkubmFtZQkJPSAidGltZXJzIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcF9sb3csCisJCS5lbmFibGUJCT0gczVwNjQ0MF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQX0NMS0NPTl9QQ0xLX1BXTSwKKwl9Cit9OworCisvKgorICogVGhlIGZvbGxvd2luZyBjbG9ja3Mgd2lsbCBiZSBlbmFibGVkIGR1cmluZyBjbG9jayBpbml0aWFsaXphdGlvbi4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgaW5pdF9jbG9ja3NbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJncGlvIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcF9sb3csCisJCS5lbmFibGUJCT0gczVwNjQ0MF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQX0NMS0NPTl9QQ0xLX0dQSU8sCisJfSwgeworCQkubmFtZQkJPSAidWFydCIsCisJCS5pZAkJPSAwLAorCQkucGFyZW50CQk9ICZjbGtfcF9sb3csCisJCS5lbmFibGUJCT0gczVwNjQ0MF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQX0NMS0NPTl9QQ0xLX1VBUlQwLAorCX0sIHsKKwkJLm5hbWUJCT0gInVhcnQiLAorCQkuaWQJCT0gMSwKKwkJLnBhcmVudAkJPSAmY2xrX3BfbG93LAorCQkuZW5hYmxlCQk9IHM1cDY0NDBfcGNsa19jdHJsLAorCQkuY3RybGJpdAk9IFM1UF9DTEtDT05fUENMS19VQVJUMSwKKwl9LCB7CisJCS5uYW1lCQk9ICJ1YXJ0IiwKKwkJLmlkCQk9IDIsCisJCS5wYXJlbnQJCT0gJmNsa19wX2xvdywKKwkJLmVuYWJsZQkJPSBzNXA2NDQwX3BjbGtfY3RybCwKKwkJLmN0cmxiaXQJPSBTNVBfQ0xLQ09OX1BDTEtfVUFSVDIsCisJfSwgeworCQkubmFtZQkJPSAidWFydCIsCisJCS5pZAkJPSAzLAorCQkucGFyZW50CQk9ICZjbGtfcF9sb3csCisJCS5lbmFibGUJCT0gczVwNjQ0MF9wY2xrX2N0cmwsCisJCS5jdHJsYml0CT0gUzVQX0NMS0NPTl9QQ0xLX1VBUlQzLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19paXNfY2RfdjQwID0geworCS5uYW1lCQk9ICJpaXNfY2RjbGtfdjQwIiwKKwkuaWQJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjbGtfcGNtX2NkID0geworCS5uYW1lCQk9ICJwY21fY2RjbGsiLAorCS5pZAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzZXRfc3BpX21tY19saXN0W10gPSB7CisJJmNsa19tb3V0X2VwbGwuY2xrLAorCSZjbGtfZG91dF9tcGxsLAorCSZjbGtfZmluX2VwbGwsCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19zb3VyY2VzIGNsa3NldF9zcGlfbW1jID0geworCS5zb3VyY2VzCT0gY2xrc2V0X3NwaV9tbWNfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrc2V0X3NwaV9tbWNfbGlzdCksCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrc2V0X3VhcnRfbGlzdFtdID0geworCSZjbGtfbW91dF9lcGxsLmNsaywKKwkmY2xrX2RvdXRfbXBsbAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfc291cmNlcyBjbGtzZXRfdWFydCA9IHsKKwkuc291cmNlcwk9IGNsa3NldF91YXJ0X2xpc3QsCisJLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa3NldF91YXJ0X2xpc3QpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa3NyY3NbXSA9IHsKKwl7CisJCS5jbGsJPSB7CisJCQkubmFtZQkJPSAibW1jX2J1cyIsCisJCQkuaWQJCT0gMCwKKwkJCS5jdHJsYml0ICAgICAgICA9IFM1UF9DTEtDT05fU0NMSzBfTU1DMCwKKwkJCS5lbmFibGUJCT0gczVwNjQ0MF9zY2xrX2N0cmwsCisJCX0sCisJCS5zb3VyY2VzID0gJmNsa3NldF9zcGlfbW1jLAorCQkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UF9DTEtfU1JDMCwgLnNoaWZ0ID0gMTgsIC5zaXplID0gMiB9LAorCQkucmVnX2RpdiA9IHsgLnJlZyA9IFM1UF9DTEtfRElWMSwgLnNoaWZ0ID0gMCwgLnNpemUgPSA0IH0sCisJfSwgeworCQkuY2xrCT0geworCQkJLm5hbWUJCT0gIm1tY19idXMiLAorCQkJLmlkCQk9IDEsCisJCQkuY3RybGJpdCAgICAgICAgPSBTNVBfQ0xLQ09OX1NDTEswX01NQzEsCisJCQkuZW5hYmxlCQk9IHM1cDY0NDBfc2Nsa19jdHJsLAorCQl9LAorCQkuc291cmNlcyA9ICZjbGtzZXRfc3BpX21tYywKKwkJLnJlZ19zcmMgPSB7IC5yZWcgPSBTNVBfQ0xLX1NSQzAsIC5zaGlmdCA9IDIwLCAuc2l6ZSA9IDIgfSwKKwkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTNVBfQ0xLX0RJVjEsIC5zaGlmdCA9IDQsIC5zaXplID0gNCB9LAorCX0sIHsKKwkJLmNsawk9IHsKKwkJCS5uYW1lCQk9ICJtbWNfYnVzIiwKKwkJCS5pZAkJPSAyLAorCQkJLmN0cmxiaXQgICAgICAgID0gUzVQX0NMS0NPTl9TQ0xLMF9NTUMyLAorCQkJLmVuYWJsZQkJPSBzNXA2NDQwX3NjbGtfY3RybCwKKwkJfSwKKwkJLnNvdXJjZXMgPSAmY2xrc2V0X3NwaV9tbWMsCisJCS5yZWdfc3JjID0geyAucmVnID0gUzVQX0NMS19TUkMwLCAuc2hpZnQgPSAyMiwgLnNpemUgPSAyIH0sCisJCS5yZWdfZGl2ID0geyAucmVnID0gUzVQX0NMS19ESVYxLCAuc2hpZnQgPSA4LCAuc2l6ZSA9IDQgfSwKKwl9LCB7CisJCS5jbGsJPSB7CisJCQkubmFtZQkJPSAidWNsazEiLAorCQkJLmlkCQk9IC0xLAorCQkJLmN0cmxiaXQgICAgICAgID0gUzVQX0NMS0NPTl9TQ0xLMF9VQVJULAorCQkJLmVuYWJsZQkJPSBzNXA2NDQwX3NjbGtfY3RybCwKKwkJfSwKKwkJLnNvdXJjZXMgPSAmY2xrc2V0X3VhcnQsCisJCS5yZWdfc3JjID0geyAucmVnID0gUzVQX0NMS19TUkMwLCAuc2hpZnQgPSAxMywgLnNpemUgPSAxIH0sCisJCS5yZWdfZGl2ID0geyAucmVnID0gUzVQX0NMS19ESVYyLCAuc2hpZnQgPSAxNiwgLnNpemUgPSA0IH0sCisJfSwgeworCQkuY2xrCT0geworCQkJLm5hbWUJCT0gInNwaV9lcGxsIiwKKwkJCS5pZAkJPSAwLAorCQkJLmN0cmxiaXQgICAgICAgID0gUzVQX0NMS0NPTl9TQ0xLMF9TUEkwLAorCQkJLmVuYWJsZQkJPSBzNXA2NDQwX3NjbGtfY3RybCwKKwkJfSwKKwkJLnNvdXJjZXMgPSAmY2xrc2V0X3NwaV9tbWMsCisJCS5yZWdfc3JjID0geyAucmVnID0gUzVQX0NMS19TUkMwLCAuc2hpZnQgPSAxNCwgLnNpemUgPSAyIH0sCisJCS5yZWdfZGl2ID0geyAucmVnID0gUzVQX0NMS19ESVYyLCAuc2hpZnQgPSAwLCAuc2l6ZSA9IDQgfSwKKwl9LCB7CisJCS5jbGsJPSB7CisJCQkubmFtZQkJPSAic3BpX2VwbGwiLAorCQkJLmlkCQk9IDEsCisJCQkuY3RybGJpdCAgICAgICAgPSBTNVBfQ0xLQ09OX1NDTEswX1NQSTEsCisJCQkuZW5hYmxlCQk9IHM1cDY0NDBfc2Nsa19jdHJsLAorCQl9LAorCQkuc291cmNlcyA9ICZjbGtzZXRfc3BpX21tYywKKwkJLnJlZ19zcmMgPSB7IC5yZWcgPSBTNVBfQ0xLX1NSQzAsIC5zaGlmdCA9IDE2LCAuc2l6ZSA9IDIgfSwKKwkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTNVBfQ0xLX0RJVjIsIC5zaGlmdCA9IDQsIC5zaXplID0gNCB9LAorCX0KK307CisKKy8qIENsb2NrIGluaXRpYWxpc2F0aW9uIGNvZGUgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayAqaW5pdF9wYXJlbnRzW10gPSB7CisJJmNsa19tb3V0X2FwbGwsCisJJmNsa19tb3V0X2VwbGwsCisJJmNsa19tb3V0X21wbGwsCit9OworCit2b2lkIF9faW5pdF9vcl9jcHVmcmVxIHM1cDY0NDBfc2V0dXBfY2xvY2tzKHZvaWQpCit7CisJc3RydWN0IGNsayAqeHRhbF9jbGs7CisJdW5zaWduZWQgbG9uZyB4dGFsOworCXVuc2lnbmVkIGxvbmcgZmNsazsKKwl1bnNpZ25lZCBsb25nIGhjbGs7CisJdW5zaWduZWQgbG9uZyBoY2xrX2xvdzsKKwl1bnNpZ25lZCBsb25nIHBjbGs7CisJdW5zaWduZWQgbG9uZyBwY2xrX2xvdzsKKwl1bnNpZ25lZCBsb25nIGVwbGw7CisJdW5zaWduZWQgbG9uZyBhcGxsOworCXVuc2lnbmVkIGxvbmcgbXBsbDsKKwl1bnNpZ25lZCBpbnQgcHRyOworCXUzMiBjbGtkaXYwOworCXUzMiBjbGtkaXYzOworCisJLyogU2V0IFM1UDY0NDAgZnVuY3Rpb25zIGZvciBjbGtfZm91dF9lcGxsICovCisJY2xrX2ZvdXRfZXBsbC5lbmFibGUgPSBzNXA2NDQwX2VwbGxfZW5hYmxlOworCWNsa19mb3V0X2VwbGwub3BzID0gJnM1cDY0NDBfZXBsbF9vcHM7CisKKwkvKiBTZXQgUzVQNjQ0MCBmdW5jdGlvbnMgZm9yIGFybSBjbG9jayAqLworCWNsa19hcm0ucGFyZW50ID0gJmNsa19tb3V0X2FwbGwuY2xrOworCWNsa19hcm0ub3BzID0gJnM1cDY0NDBfY2xrYXJtX29wczsKKwljbGtfNDhtLmVuYWJsZSA9IHM1cDY0NDBfY2xrNDhtX2N0cmw7CisKKwljbGtkaXYwID0gX19yYXdfcmVhZGwoUzVQX0NMS19ESVYwKTsKKwljbGtkaXYzID0gX19yYXdfcmVhZGwoUzVQX0NMS19ESVYzKTsKKworCXh0YWxfY2xrID0gY2xrX2dldChOVUxMLCAiZXh0X3h0YWwiKTsKKwlCVUdfT04oSVNfRVJSKHh0YWxfY2xrKSk7CisKKwl4dGFsID0gY2xrX2dldF9yYXRlKHh0YWxfY2xrKTsKKwljbGtfcHV0KHh0YWxfY2xrKTsKKworCWVwbGwgPSBzNXBfZ2V0X3BsbDkweHgoeHRhbCwgX19yYXdfcmVhZGwoUzVQX0VQTExfQ09OKSwKKwkJCQlfX3Jhd19yZWFkbChTNVBfRVBMTF9DT05fSykpOworCW1wbGwgPSBzNXBfZ2V0X3BsbDQ1eHgoeHRhbCwgX19yYXdfcmVhZGwoUzVQX01QTExfQ09OKSwgcGxsXzQ1MDIpOworCWFwbGwgPSBzNXBfZ2V0X3BsbDQ1eHgoeHRhbCwgX19yYXdfcmVhZGwoUzVQX0FQTExfQ09OKSwgcGxsXzQ1MDIpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiUzVQNjQ0MDogUExMIHNldHRpbmdzLCBBPSVsZC4lbGRNSHosIE09JWxkLiVsZE1IeiwiIFwKKwkJCSIgRT0lbGQuJWxkTUh6XG4iLAorCQkJcHJpbnRfbWh6KGFwbGwpLCBwcmludF9taHoobXBsbCksIHByaW50X21oeihlcGxsKSk7CisKKwlmY2xrID0gYXBsbCAvIEdFVF9ESVYoY2xrZGl2MCwgUzVQX0NMS0RJVjBfQVJNKTsKKwloY2xrID0gZmNsayAvIEdFVF9ESVYoY2xrZGl2MCwgUzVQX0NMS0RJVjBfSENMSyk7CisJcGNsayA9IGhjbGsgLyBHRVRfRElWKGNsa2RpdjAsIFM1UF9DTEtESVYwX1BDTEspOworCisJaWYgKF9fcmF3X3JlYWRsKFM1UF9PVEhFUlMpICYgUzVQX09USEVSU19IQ0xLX0xPV19TRUxfTVBMTCkgeworCQkvKiBBc3luY2hyb25vdXMgbW9kZSAqLworCQloY2xrX2xvdyA9IG1wbGwgLyBHRVRfRElWKGNsa2RpdjMsIFM1UF9DTEtESVYzX0hDTEtfTE9XKTsKKwl9IGVsc2UgeworCQkvKiBTeW5jaHJvbm91cyBtb2RlICovCisJCWhjbGtfbG93ID0gYXBsbCAvIEdFVF9ESVYoY2xrZGl2MywgUzVQX0NMS0RJVjNfSENMS19MT1cpOworCX0KKworCXBjbGtfbG93ID0gaGNsa19sb3cgLyBHRVRfRElWKGNsa2RpdjMsIFM1UF9DTEtESVYzX1BDTEtfTE9XKTsKKworCXByaW50ayhLRVJOX0lORk8gIlM1UDY0NDA6IEhDTEs9JWxkLiVsZE1IeiwgSENMS19MT1c9JWxkLiVsZE1IeiwiIFwKKwkJCSIgUENMSz0lbGQuJWxkTUh6LCBQQ0xLX0xPVz0lbGQuJWxkTUh6XG4iLAorCQkJcHJpbnRfbWh6KGhjbGspLCBwcmludF9taHooaGNsa19sb3cpLAorCQkJcHJpbnRfbWh6KHBjbGspLCBwcmludF9taHoocGNsa19sb3cpKTsKKworCWNsa19mb3V0X21wbGwucmF0ZSA9IG1wbGw7CisJY2xrX2ZvdXRfZXBsbC5yYXRlID0gZXBsbDsKKwljbGtfZm91dF9hcGxsLnJhdGUgPSBhcGxsOworCisJY2xrX2YucmF0ZSA9IGZjbGs7CisJY2xrX2gucmF0ZSA9IGhjbGs7CisJY2xrX3AucmF0ZSA9IHBjbGs7CisJY2xrX2hfbG93LnJhdGUgPSBoY2xrX2xvdzsKKwljbGtfcF9sb3cucmF0ZSA9IHBjbGtfbG93OworCisJZm9yIChwdHIgPSAwOyBwdHIgPCBBUlJBWV9TSVpFKGluaXRfcGFyZW50cyk7IHB0cisrKQorCQlzM2Nfc2V0X2Nsa3NyYyhpbml0X3BhcmVudHNbcHRyXSwgdHJ1ZSk7CisKKwlmb3IgKHB0ciA9IDA7IHB0ciA8IEFSUkFZX1NJWkUoY2xrc3Jjcyk7IHB0cisrKQorCQlzM2Nfc2V0X2Nsa3NyYygmY2xrc3Jjc1twdHJdLCB0cnVlKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NbXSBfX2luaXRkYXRhID0geworCSZjbGtfZXh0LAorCSZjbGtfbW91dF9lcGxsLmNsaywKKwkmY2xrX21vdXRfbXBsbC5jbGssCisJJmNsa19kb3V0X21wbGwsCisJJmNsa19paXNfY2RfdjQwLAorCSZjbGtfcGNtX2NkLAorCSZjbGtfcF9sb3csCisJJmNsa19oX2xvdywKK307CisKK3ZvaWQgX19pbml0IHM1cDY0NDBfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCit7CisJc3RydWN0IGNsayAqY2xrcDsKKwlpbnQgcmV0OworCWludCBwdHI7CisKKwlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrcyhjbGtzLCBBUlJBWV9TSVpFKGNsa3MpKTsKKwlpZiAocmV0ID4gMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgJXUgY2xvY2tzXG4iLCByZXQpOworCisJczNjX3JlZ2lzdGVyX2Nsa3NyYyhjbGtzcmNzLCBBUlJBWV9TSVpFKGNsa3NyY3MpKTsKKwlzM2NfcmVnaXN0ZXJfY2xvY2tzKGluaXRfY2xvY2tzLCBBUlJBWV9TSVpFKGluaXRfY2xvY2tzKSk7CisKKwljbGtwID0gaW5pdF9jbG9ja3NfZGlzYWJsZTsKKwlmb3IgKHB0ciA9IDA7IHB0ciA8IEFSUkFZX1NJWkUoaW5pdF9jbG9ja3NfZGlzYWJsZSk7IHB0cisrLCBjbGtwKyspIHsKKworCQlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKGNsa3ApOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXMgKCVkKVxuIiwKKwkJCSAgICAgICBjbGtwLT5uYW1lLCByZXQpOworCQl9CisJCShjbGtwLT5lbmFibGUpKGNsa3AsIDApOworCX0KKworCXMzY19wd21jbGtfaW5pdCgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2NwdS5jIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2NwdS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3OTQxMzFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2NwdS5jCkBAIC0wLDAgKzEsMTE0IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cDY0NDAvY3B1LmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL3Byb2MtZm5zLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L3M1cDY0NDAuaD4KKworc3RhdGljIHZvaWQgczVwNjQ0MF9pZGxlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwlpZiAoIW5lZWRfcmVzY2hlZCgpKSB7CisJCXZhbCA9IF9fcmF3X3JlYWRsKFM1UF9QV1JfQ0ZHKTsKKwkJdmFsICY9IH4oMHgzPDw1KTsKKwkJdmFsIHw9ICgweDE8PDUpOworCQlfX3Jhd193cml0ZWwodmFsLCBTNVBfUFdSX0NGRyk7CisKKwkJY3B1X2RvX2lkbGUoKTsKKwl9CisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCisvKiBzNXA2NDQwX21hcF9pbworICoKKyAqIHJlZ2lzdGVyIHRoZSBzdGFuZGFyZCBjcHUgSU8gYXJlYXMKKyovCisKK3ZvaWQgX19pbml0IHM1cDY0NDBfbWFwX2lvKHZvaWQpCit7CisJLyogaW5pdGlhbGl6ZSBhbnkgZGV2aWNlIGluZm9ybWF0aW9uIGVhcmx5ICovCit9CisKK3ZvaWQgX19pbml0IHM1cDY0NDBfaW5pdF9jbG9ja3MoaW50IHh0YWwpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbml0aWFsaXppbmcgY2xvY2tzXG4iLCBfX2Z1bmNfXyk7CisKKwlzM2MyNHh4X3JlZ2lzdGVyX2Jhc2VjbG9ja3MoeHRhbCk7CisJczVwX3JlZ2lzdGVyX2Nsb2Nrcyh4dGFsKTsKKwlzNXA2NDQwX3JlZ2lzdGVyX2Nsb2NrcygpOworCXM1cDY0NDBfc2V0dXBfY2xvY2tzKCk7Cit9CisKK3ZvaWQgX19pbml0IHM1cDY0NDBfaW5pdF9pcnEodm9pZCkKK3sKKwkvKiBTNVA2NDQwIHN1cHBvcnRzIG9ubHkgMiBWSUMgKi8KKwl1MzIgdmljWzJdOworCisJLyoKKwkgKiBWSUMwIGlzIG1pc3NpbmcgSVJRX1ZJQzBbMywgNCwgOCwgMTAsICgxMi0yMildCisJICogVklDMSBpcyBtaXNzaW5nIElSUSBWSUMxWzEsIDMsIDQsIDEwLCAxMSwgMTIsIDE0LCAxNSwgMjJdCisJICovCisJdmljWzBdID0gMHhmZjgwMGFlNzsKKwl2aWNbMV0gPSAweGZmYmYyM2U1OworCisJczVwX2luaXRfaXJxKHZpYywgQVJSQVlfU0laRSh2aWMpKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgczVwNjQ0MF9zeXNjbGFzcyA9IHsKKwkubmFtZQk9ICJzNXA2NDQwLWNvcmUiLAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIHM1cDY0NDBfc3lzZGV2ID0geworCS5jbHMJPSAmczVwNjQ0MF9zeXNjbGFzcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHM1cDY0NDBfY29yZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9jbGFzc19yZWdpc3RlcigmczVwNjQ0MF9zeXNjbGFzcyk7Cit9CisKK2NvcmVfaW5pdGNhbGwoczVwNjQ0MF9jb3JlX2luaXQpOworCitpbnQgX19pbml0IHM1cDY0NDBfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIlM1UDY0NDA6IEluaXRpYWxpemluZyBhcmNoaXRlY3R1cmVcbiIpOworCisJLyogc2V0IGlkbGUgZnVuY3Rpb24gKi8KKwlwbV9pZGxlID0gczVwNjQ0MF9pZGxlOworCisJcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmczVwNjQ0MF9zeXNkZXYpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2dwaW8uYyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjBlYTc0MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9ncGlvLmMKQEAgLTAsMCArMSwzMjIgQEAKKy8qIGFyY2gvYXJtL21hY2gtczVwNjQ0MC9ncGlvLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqIAkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTNVA2NDQwIC0gR1BJT2xpYiBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNvcmUuaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy1oZWxwZXJzLmg+CisKKy8qIEdQSU8gYmFuayBzdW1tYXJ5OgorKgorKiBCYW5rCUdQSU9zCVN0eWxlCVNscENvbglFeHRJbnQgR3JvdXAKKyogQQk2CTRCaXQJWWVzCTEKKyogQgk3CTRCaXQJWWVzCTEKKyogQwk4CTRCaXQJWWVzCTIKKyogRgkyCTJCaXQJWWVzCTQgWzFdCisqIEcJNwk0Qml0CVllcwk1CisqIEgJMTAJNEJpdFsyXQlZZXMJNgorKiBJCTE2CTJCaXQJWWVzCU5vbmUKKyogSgkxMgkyQml0CVllcwlOb25lCisqIE4JMTYJMkJpdAlObwlJUlFfRUlOVAorKiBQCTgJMkJpdAlZZXMJOAorKiBSCTE1CTRCaXRbMl0JWWVzCTgKKyoKKyogWzFdIEJBTktGIHBpbnMgMTQsMTUgZG8gbm90IGZvcm0gcGFydCBvZiB0aGUgZXh0ZXJuYWwgaW50ZXJydXB0IHNvdXJjZXMKKyogWzJdIEJBTksgaGFzIHR3byBjb250cm9sIHJlZ2lzdGVycywgR1B4Q09OMCBhbmQgR1B4Q09OMQorKi8KKworc3RhdGljIGludCBzNXA2NDQwX2dwaW9saWJfcmJhbmtfNGJpdDJfaW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXN0cnVjdCBzM2NfZ3Bpb19jaGlwICpvdXJjaGlwID0gdG9fczNjX2dwaW8oY2hpcCk7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gb3VyY2hpcC0+YmFzZTsKKwl2b2lkIF9faW9tZW0gKnJlZ2NvbiA9IGJhc2U7CisJdW5zaWduZWQgbG9uZyBjb247CisKKwlzd2l0Y2ggKG9mZnNldCkgeworCWNhc2UgNjoKKwkJb2Zmc2V0ICs9IDE7CisJY2FzZSAwOgorCWNhc2UgMToKKwljYXNlIDI6CisJY2FzZSAzOgorCWNhc2UgNDoKKwljYXNlIDU6CisJCXJlZ2NvbiAtPSA0OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlvZmZzZXQgLT0gNzsKKwkJYnJlYWs7CisJfQorCisJY29uID0gX19yYXdfcmVhZGwocmVnY29uKTsKKwljb24gJj0gfigweGYgPDwgY29uXzRiaXRfc2hpZnQob2Zmc2V0KSk7CisJX19yYXdfd3JpdGVsKGNvbiwgcmVnY29uKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHM1cDY0NDBfZ3Bpb2xpYl9yYmFua180Yml0Ml9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBzM2NfZ3Bpb19jaGlwICpvdXJjaGlwID0gdG9fczNjX2dwaW8oY2hpcCk7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gb3VyY2hpcC0+YmFzZTsKKwl2b2lkIF9faW9tZW0gKnJlZ2NvbiA9IGJhc2U7CisJdW5zaWduZWQgbG9uZyBjb247CisJdW5zaWduZWQgbG9uZyBkYXQ7CisJdW5zaWduZWQgY29uX29mZnNldCAgPSBvZmZzZXQ7CisKKwlzd2l0Y2ggKGNvbl9vZmZzZXQpIHsKKwljYXNlIDY6CisJCWNvbl9vZmZzZXQgKz0gMTsKKwljYXNlIDA6CisJY2FzZSAxOgorCWNhc2UgMjoKKwljYXNlIDM6CisJY2FzZSA0OgorCWNhc2UgNToKKwkJcmVnY29uIC09IDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNvbl9vZmZzZXQgLT0gNzsKKwkJYnJlYWs7CisJfQorCisJY29uID0gX19yYXdfcmVhZGwocmVnY29uKTsKKwljb24gJj0gfigweGYgPDwgY29uXzRiaXRfc2hpZnQoY29uX29mZnNldCkpOworCWNvbiB8PSAweDEgPDwgY29uXzRiaXRfc2hpZnQoY29uX29mZnNldCk7CisKKwlkYXQgPSBfX3Jhd19yZWFkbChiYXNlICsgR1BJT0RBVF9PRkYpOworCWlmICh2YWx1ZSkKKwkJZGF0IHw9IDEgPDwgb2Zmc2V0OworCWVsc2UKKwkJZGF0ICY9IH4oMSA8PCBvZmZzZXQpOworCisJX19yYXdfd3JpdGVsKGNvbiwgcmVnY29uKTsKKwlfX3Jhd193cml0ZWwoZGF0LCBiYXNlICsgR1BJT0RBVF9PRkYpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzNXA2NDQwX2dwaW9fc2V0Y2ZnXzRiaXRfcmJhbmsoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCisJCQkJICAgdW5zaWduZWQgaW50IG9mZiwgdW5zaWduZWQgaW50IGNmZykKK3sKKwl2b2lkIF9faW9tZW0gKnJlZyA9IGNoaXAtPmJhc2U7CisJdW5zaWduZWQgaW50IHNoaWZ0OworCXUzMiBjb247CisKKwlzd2l0Y2ggKG9mZikgeworCWNhc2UgMDoKKwljYXNlIDE6CisJY2FzZSAyOgorCWNhc2UgMzoKKwljYXNlIDQ6CisJY2FzZSA1OgorCQlzaGlmdCA9IChvZmYgJiA3KSAqIDQ7CisJCXJlZyAtPSA0OworCQlicmVhazsKKwljYXNlIDY6CisJCXNoaWZ0ID0gKChvZmYgKyAxKSAmIDcpICogNDsKKwkJcmVnIC09IDQ7CisJZGVmYXVsdDoKKwkJc2hpZnQgPSAoKG9mZiArIDEpICYgNykgKiA0OworCQlicmVhazsKKwl9CisKKwlpZiAoczNjX2dwaW9faXNfY2ZnX3NwZWNpYWwoY2ZnKSkgeworCQljZmcgJj0gMHhmOworCQljZmcgPDw9IHNoaWZ0OworCX0KKworCWNvbiA9IF9fcmF3X3JlYWRsKHJlZyk7CisJY29uICY9IH4oMHhmIDw8IHNoaWZ0KTsKKwljb24gfD0gY2ZnOworCV9fcmF3X3dyaXRlbChjb24sIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzM2NfZ3Bpb19jZmcgczVwNjQ0MF9ncGlvX2NmZ3NbXSA9IHsKKwl7CisJCS5jZmdfZWludAk9IDAsCisJfSwgeworCQkuY2ZnX2VpbnQJPSA3LAorCX0sIHsKKwkJLmNmZ19laW50CT0gMywKKwkJLnNldF9jb25maWcJPSBzNXA2NDQwX2dwaW9fc2V0Y2ZnXzRiaXRfcmJhbmssCisJfSwgeworCQkuY2ZnX2VpbnQJPSAwLAorCQkuc2V0X2NvbmZpZwk9IHMzY19ncGlvX3NldGNmZ19zM2MyNHh4LAorCX0sIHsKKwkJLmNmZ19laW50CT0gMiwKKwkJLnNldF9jb25maWcJPSBzM2NfZ3Bpb19zZXRjZmdfczNjMjR4eCwKKwl9LCB7CisJCS5jZmdfZWludAk9IDMsCisJCS5zZXRfY29uZmlnCT0gczNjX2dwaW9fc2V0Y2ZnX3MzYzI0eHgsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2dwaW9fY2hpcCBzNXA2NDQwX2dwaW9fNGJpdFtdID0geworCXsKKwkJLmJhc2UJPSBTNVA2NDQwX0dQQV9CQVNFLAorCQkuY29uZmlnCT0gJnM1cDY0NDBfZ3Bpb19jZmdzWzFdLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzVQNjQ0MF9HUEEoMCksCisJCQkubmdwaW8JPSBTNVA2NDQwX0dQSU9fQV9OUiwKKwkJCS5sYWJlbAk9ICJHUEEiLAorCQl9LAorCX0sIHsKKwkJLmJhc2UJPSBTNVA2NDQwX0dQQl9CQVNFLAorCQkuY29uZmlnCT0gJnM1cDY0NDBfZ3Bpb19jZmdzWzFdLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzVQNjQ0MF9HUEIoMCksCisJCQkubmdwaW8JPSBTNVA2NDQwX0dQSU9fQl9OUiwKKwkJCS5sYWJlbAk9ICJHUEIiLAorCQl9LAorCX0sIHsKKwkJLmJhc2UJPSBTNVA2NDQwX0dQQ19CQVNFLAorCQkuY29uZmlnCT0gJnM1cDY0NDBfZ3Bpb19jZmdzWzFdLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzVQNjQ0MF9HUEMoMCksCisJCQkubmdwaW8JPSBTNVA2NDQwX0dQSU9fQ19OUiwKKwkJCS5sYWJlbAk9ICJHUEMiLAorCQl9LAorCX0sIHsKKwkJLmJhc2UJPSBTNVA2NDQwX0dQR19CQVNFLAorCQkuY29uZmlnCT0gJnM1cDY0NDBfZ3Bpb19jZmdzWzFdLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzVQNjQ0MF9HUEcoMCksCisJCQkubmdwaW8JPSBTNVA2NDQwX0dQSU9fR19OUiwKKwkJCS5sYWJlbAk9ICJHUEciLAorCQl9LAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzY19ncGlvX2NoaXAgczVwNjQ0MF9ncGlvXzRiaXQyW10gPSB7CisJeworCQkuYmFzZQk9IFM1UDY0NDBfR1BIX0JBU0UgKyAweDQsCisJCS5jb25maWcJPSAmczVwNjQ0MF9ncGlvX2NmZ3NbMV0sCisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBTNVA2NDQwX0dQSCgwKSwKKwkJCS5uZ3Bpbwk9IFM1UDY0NDBfR1BJT19IX05SLAorCQkJLmxhYmVsCT0gIkdQSCIsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2dwaW9fY2hpcCBncGlvX3JiYW5rXzRiaXQyW10gPSB7CisJeworCQkuYmFzZQk9IFM1UDY0NDBfR1BSX0JBU0UgKyAweDQsCisJCS5jb25maWcJPSAmczVwNjQ0MF9ncGlvX2NmZ3NbMl0sCisJCS5jaGlwCT0geworCQkJLmJhc2UJPSBTNVA2NDQwX0dQUigwKSwKKwkJCS5uZ3Bpbwk9IFM1UDY0NDBfR1BJT19SX05SLAorCQkJLmxhYmVsCT0gIkdQUiIsCisJCX0sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjX2dwaW9fY2hpcCBzNXA2NDQwX2dwaW9fMmJpdFtdID0geworCXsKKwkJLmJhc2UJPSBTNVA2NDQwX0dQRl9CQVNFLAorCQkuY29uZmlnCT0gJnM1cDY0NDBfZ3Bpb19jZmdzWzVdLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzVQNjQ0MF9HUEYoMCksCisJCQkubmdwaW8JPSBTNVA2NDQwX0dQSU9fRl9OUiwKKwkJCS5sYWJlbAk9ICJHUEYiLAorCQl9LAorCX0sIHsKKwkJLmJhc2UJPSBTNVA2NDQwX0dQSV9CQVNFLAorCQkuY29uZmlnCT0gJnM1cDY0NDBfZ3Bpb19jZmdzWzNdLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzVQNjQ0MF9HUEkoMCksCisJCQkubmdwaW8JPSBTNVA2NDQwX0dQSU9fSV9OUiwKKwkJCS5sYWJlbAk9ICJHUEkiLAorCQl9LAorCX0sIHsKKwkJLmJhc2UJPSBTNVA2NDQwX0dQSl9CQVNFLAorCQkuY29uZmlnCT0gJnM1cDY0NDBfZ3Bpb19jZmdzWzNdLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzVQNjQ0MF9HUEooMCksCisJCQkubmdwaW8JPSBTNVA2NDQwX0dQSU9fSl9OUiwKKwkJCS5sYWJlbAk9ICJHUEoiLAorCQl9LAorCX0sIHsKKwkJLmJhc2UJPSBTNVA2NDQwX0dQTl9CQVNFLAorCQkuY29uZmlnCT0gJnM1cDY0NDBfZ3Bpb19jZmdzWzRdLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzVQNjQ0MF9HUE4oMCksCisJCQkubmdwaW8JPSBTNVA2NDQwX0dQSU9fTl9OUiwKKwkJCS5sYWJlbAk9ICJHUE4iLAorCQl9LAorCX0sIHsKKwkJLmJhc2UJPSBTNVA2NDQwX0dQUF9CQVNFLAorCQkuY29uZmlnCT0gJnM1cDY0NDBfZ3Bpb19jZmdzWzVdLAorCQkuY2hpcAk9IHsKKwkJCS5iYXNlCT0gUzVQNjQ0MF9HUFAoMCksCisJCQkubmdwaW8JPSBTNVA2NDQwX0dQSU9fUF9OUiwKKwkJCS5sYWJlbAk9ICJHUFAiLAorCQl9LAorCX0sCit9OworCit2b2lkIF9faW5pdCBzNXA2NDQwX2dwaW9saWJfc2V0X2NmZyhzdHJ1Y3QgczNjX2dwaW9fY2ZnICpjaGlwY2ZnLCBpbnQgbnJfY2hpcHMpCit7CisJZm9yICg7IG5yX2NoaXBzID4gMDsgbnJfY2hpcHMtLSwgY2hpcGNmZysrKSB7CisJCWlmICghY2hpcGNmZy0+c2V0X2NvbmZpZykKKwkJCWNoaXBjZmctPnNldF9jb25maWcJPSBzM2NfZ3Bpb19zZXRjZmdfczNjNjR4eF80Yml0OworCQlpZiAoIWNoaXBjZmctPnNldF9wdWxsKQorCQkJY2hpcGNmZy0+c2V0X3B1bGwJPSBzM2NfZ3Bpb19zZXRwdWxsX3VwZG93bjsKKwkJaWYgKCFjaGlwY2ZnLT5nZXRfcHVsbCkKKwkJCWNoaXBjZmctPmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF91cGRvd247CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgczVwNjQ0MF9ncGlvX2FkZF9yYmFua180Yml0MihzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQkJCWludCBucl9jaGlwcykKK3sKKwlmb3IgKDsgbnJfY2hpcHMgPiAwOyBucl9jaGlwcy0tLCBjaGlwKyspIHsKKwkJY2hpcC0+Y2hpcC5kaXJlY3Rpb25faW5wdXQgPSBzNXA2NDQwX2dwaW9saWJfcmJhbmtfNGJpdDJfaW5wdXQ7CisJCWNoaXAtPmNoaXAuZGlyZWN0aW9uX291dHB1dCA9CisJCQkJCXM1cDY0NDBfZ3Bpb2xpYl9yYmFua180Yml0Ml9vdXRwdXQ7CisJCXMzY19ncGlvbGliX2FkZChjaGlwKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHM1cDY0NDBfZ3Bpb2xpYl9pbml0KHZvaWQpCit7CisJc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXBzID0gczVwNjQ0MF9ncGlvXzJiaXQ7CisJaW50IG5yX2NoaXBzID0gQVJSQVlfU0laRShzNXA2NDQwX2dwaW9fMmJpdCk7CisKKwlzNXA2NDQwX2dwaW9saWJfc2V0X2NmZyhzNXA2NDQwX2dwaW9fY2ZncywKKwkJCQlBUlJBWV9TSVpFKHM1cDY0NDBfZ3Bpb19jZmdzKSk7CisKKwlmb3IgKDsgbnJfY2hpcHMgPiAwOyBucl9jaGlwcy0tLCBjaGlwcysrKQorCQlzM2NfZ3Bpb2xpYl9hZGQoY2hpcHMpOworCisJc2Ftc3VuZ19ncGlvbGliX2FkZF80Yml0X2NoaXBzKHM1cDY0NDBfZ3Bpb180Yml0LAorCQkJCUFSUkFZX1NJWkUoczVwNjQ0MF9ncGlvXzRiaXQpKTsKKworCXNhbXN1bmdfZ3Bpb2xpYl9hZGRfNGJpdDJfY2hpcHMoczVwNjQ0MF9ncGlvXzRiaXQyLAorCQkJCUFSUkFZX1NJWkUoczVwNjQ0MF9ncGlvXzRiaXQyKSk7CisKKwlzNXA2NDQwX2dwaW9fYWRkX3JiYW5rXzRiaXQyKGdwaW9fcmJhbmtfNGJpdDIsCisJCQkJQVJSQVlfU0laRShncGlvX3JiYW5rXzRiaXQyKSk7CisKKwlyZXR1cm4gMDsKK30KK2FyY2hfaW5pdGNhbGwoczVwNjQ0MF9ncGlvbGliX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4Y2RiMGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSwzNyBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworLyogcHVsbCBpbiB0aGUgcmVsZXZhbnQgcmVnaXN0ZXIgYW5kIG1hcCBmaWxlcy4gKi8KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorCisJLyogbm90ZSwgZm9yIHRoZSBib290IHByb2Nlc3MgdG8gd29yayB3ZSBoYXZlIHRvIGtlZXAgdGhlIFVBUlQKKwkgKiB2aXJ0dWFsIGFkZHJlc3MgYWxpZ25lZCB0byBhbiAxTWlCIGJvdW5kYXJ5IGZvciB0aGUgTDEKKwkgKiBtYXBwaW5nIHRoZSBoZWFkIGNvZGUgbWFrZXMuIFdlIGtlZXAgdGhlIFVBUlQgdmlydHVhbCBhZGRyZXNzCisJICogYWxpZ25lZCBhbmQgYWRkIGluIHRoZSBvZmZzZXQgd2hlbiB3ZSBsb2FkIHRoZSB2YWx1ZSBoZXJlLgorCSAqLworCisJLm1hY3JvIGFkZHJ1YXJ0LCByeAorCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAorCQl0c3QJXHJ4LCAjMQorCQlsZHJlcQlccngsID0gUzNDX1BBX1VBUlQKKwkJbGRybmUJXHJ4LCA9IFMzQ19WQV9VQVJUCisjaWYgQ09ORklHX0RFQlVHX1MzQ19VQVJUICE9IDAKKwkJYWRkCVxyeCwgXHJ4LCAjKDB4NDAwICogQ09ORklHX0RFQlVHX1MzQ19VQVJUKQorI2VuZGlmCisJLmVuZG0KKworLyogaW5jbHVkZSB0aGUgcmVzZXQgb2YgdGhlIGNvZGUgd2hpY2ggd2lsbCBkbyB0aGUgd29yaywgd2UncmUgb25seQorICogY29tcGlsaW5nIGZvciBhIHNpbmdsZSBjcHUgcHJvY2Vzc29yIHR5cGUgc28gdGhlIGRlZmF1bHQgb2YgczNjMjQ0MAorICogd2lsbCBiZSBmaW5lIHdpdGggdXMuCisgKi8KKworI2luY2x1ZGUgPHBsYXQvZGVidWctbWFjcm8uUz4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjVmMWI5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMTYgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogTG93LWxldmVsIElSUSBoZWxwZXIgbWFjcm9zIGZvciB0aGUgU2Ftc3VuZyBTNVA2NDQwCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPHBsYXQvaXJxcy5oPgorCisjaW5jbHVkZSA8YXNtL2VudHJ5LW1hY3JvLXZpYzIuUz4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvZ3Bpby5oIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjE3ODM4MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvZ3Bpby5oCkBAIC0wLDAgKzEsODAgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvZ3Bpby5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTNVA2NDQwIC0gR1BJTyBsaWIgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfR1BJT19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfR1BJT19IIF9fRklMRV9fCisKKyNkZWZpbmUgZ3Bpb19nZXRfdmFsdWUJX19ncGlvX2dldF92YWx1ZQorI2RlZmluZSBncGlvX3NldF92YWx1ZQlfX2dwaW9fc2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fY2Fuc2xlZXAJX19ncGlvX2NhbnNsZWVwCisjZGVmaW5lIGdwaW9fdG9faXJxCV9fZ3Bpb190b19pcnEKKworLyogR1BJTyBiYW5rIHNpemVzICovCisjZGVmaW5lIFM1UDY0NDBfR1BJT19BX05SCSg2KQorI2RlZmluZSBTNVA2NDQwX0dQSU9fQl9OUgkoNykKKyNkZWZpbmUgUzVQNjQ0MF9HUElPX0NfTlIJKDgpCisjZGVmaW5lIFM1UDY0NDBfR1BJT19GX05SCSgyKQorI2RlZmluZSBTNVA2NDQwX0dQSU9fR19OUgkoNykKKyNkZWZpbmUgUzVQNjQ0MF9HUElPX0hfTlIJKDEwKQorI2RlZmluZSBTNVA2NDQwX0dQSU9fSV9OUgkoMTYpCisjZGVmaW5lIFM1UDY0NDBfR1BJT19KX05SCSgxMikKKyNkZWZpbmUgUzVQNjQ0MF9HUElPX05fTlIJKDE2KQorI2RlZmluZSBTNVA2NDQwX0dQSU9fUF9OUgkoOCkKKyNkZWZpbmUgUzVQNjQ0MF9HUElPX1JfTlIJKDE1KQorCisvKiBHUElPIGJhbmsgbnVtYmVycyAqLworCisvKiBDT05GSUdfUzNDX0dQSU9fU1BBQ0UgYWxsb3dzIHRoZSB1c2VyIHRvIHNlbGVjdCBleHRyYQorICogc3BhY2UgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBzbyB0aGF0IGFueSBhY2NpZGVudGFsCisgKiBjaGFuZ2UgZnJvbSBvbmUgZ3BpbyBiYW5rIHRvIGFub3RoZXIgY2FuIGJlIGNhdWdodC4KKyovCisjZGVmaW5lIFM1UDY0NDBfR1BJT19ORVhUKF9fZ3BpbykgXAorCSgoX19ncGlvIyNfU1RBUlQpICsgKF9fZ3BpbyMjX05SKSArIENPTkZJR19TM0NfR1BJT19TUEFDRSArIDEpCisKK2VudW0gczVwX2dwaW9fbnVtYmVyIHsKKwlTNVA2NDQwX0dQSU9fQV9TVEFSVCA9IDAsCisJUzVQNjQ0MF9HUElPX0JfU1RBUlQgPSBTNVA2NDQwX0dQSU9fTkVYVChTNVA2NDQwX0dQSU9fQSksCisJUzVQNjQ0MF9HUElPX0NfU1RBUlQgPSBTNVA2NDQwX0dQSU9fTkVYVChTNVA2NDQwX0dQSU9fQiksCisJUzVQNjQ0MF9HUElPX0ZfU1RBUlQgPSBTNVA2NDQwX0dQSU9fTkVYVChTNVA2NDQwX0dQSU9fQyksCisJUzVQNjQ0MF9HUElPX0dfU1RBUlQgPSBTNVA2NDQwX0dQSU9fTkVYVChTNVA2NDQwX0dQSU9fRiksCisJUzVQNjQ0MF9HUElPX0hfU1RBUlQgPSBTNVA2NDQwX0dQSU9fTkVYVChTNVA2NDQwX0dQSU9fRyksCisJUzVQNjQ0MF9HUElPX0lfU1RBUlQgPSBTNVA2NDQwX0dQSU9fTkVYVChTNVA2NDQwX0dQSU9fSCksCisJUzVQNjQ0MF9HUElPX0pfU1RBUlQgPSBTNVA2NDQwX0dQSU9fTkVYVChTNVA2NDQwX0dQSU9fSSksCisJUzVQNjQ0MF9HUElPX05fU1RBUlQgPSBTNVA2NDQwX0dQSU9fTkVYVChTNVA2NDQwX0dQSU9fSiksCisJUzVQNjQ0MF9HUElPX1BfU1RBUlQgPSBTNVA2NDQwX0dQSU9fTkVYVChTNVA2NDQwX0dQSU9fTiksCisJUzVQNjQ0MF9HUElPX1JfU1RBUlQgPSBTNVA2NDQwX0dQSU9fTkVYVChTNVA2NDQwX0dQSU9fUCksCit9OworCisvKiBTNVA2NDQwIEdQSU8gbnVtYmVyIGRlZmluaXRpb25zLiAqLworI2RlZmluZSBTNVA2NDQwX0dQQShfbnIpCShTNVA2NDQwX0dQSU9fQV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVA2NDQwX0dQQihfbnIpCShTNVA2NDQwX0dQSU9fQl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVA2NDQwX0dQQyhfbnIpCShTNVA2NDQwX0dQSU9fQ19TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVA2NDQwX0dQRihfbnIpCShTNVA2NDQwX0dQSU9fRl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVA2NDQwX0dQRyhfbnIpCShTNVA2NDQwX0dQSU9fR19TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVA2NDQwX0dQSChfbnIpCShTNVA2NDQwX0dQSU9fSF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVA2NDQwX0dQSShfbnIpCShTNVA2NDQwX0dQSU9fSV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVA2NDQwX0dQSihfbnIpCShTNVA2NDQwX0dQSU9fSl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVA2NDQwX0dQTihfbnIpCShTNVA2NDQwX0dQSU9fTl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVA2NDQwX0dQUChfbnIpCShTNVA2NDQwX0dQSU9fUF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVA2NDQwX0dQUihfbnIpCShTNVA2NDQwX0dQSU9fUl9TVEFSVCArIChfbnIpKQorCisvKiB0aGUgZW5kIG9mIHRoZSBTNVA2NDQwIHNwZWNpZmljIGdwaW9zICovCisjZGVmaW5lIFM1UDY0NDBfR1BJT19FTkQJKFM1UDY0NDBfR1BSKFM1UDY0NDBfR1BJT19SX05SKSArIDEpCisjZGVmaW5lIFMzQ19HUElPX0VORAkJUzVQNjQ0MF9HUElPX0VORAorCisvKiBkZWZpbmUgdGhlIG51bWJlciBvZiBncGlvcyB3ZSBuZWVkIHRvIHRoZSBvbmUgYWZ0ZXIgdGhlIEdQUigpIHJhbmdlICovCisjZGVmaW5lIEFSQ0hfTlJfR1BJT1MJCShTNVA2NDQwX0dQUihTNVA2NDQwX0dQSU9fUl9OUikgKwlcCisJCQkJIENPTkZJR19TQU1TVU5HX0dQSU9fRVhUUkEgKyAxKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgorCisjZW5kaWYgLyogX19BU01fQVJDSF9HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZThiMjZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMTggQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQNjQ0MCAtIEhhcmR3YXJlIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9IIF9fRklMRV9fCisKKy8qIGN1cnJlbnRseSBub3RoaW5nIGhlcmUsIHBsYWNlaG9sZGVyICovCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTJkNjljCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9pby5oCkBAIC0wLDAgKzEsMTggQEAKKy8qIGFyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvaW8uaAorICoKKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgorICoKKyAqIERlZmF1bHQgSU8gcm91dGluZXMgZm9yIFMzQzY0WFggYmFzZWQKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKKyNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSAorCisvKiBObyBjdXJyZW50IElTQS9QQ0kgYnVzIHN1cHBvcnQuICovCisjZGVmaW5lIF9faW8oYSkJCV9fdHlwZXNhZmVfaW8oYSkKKyNkZWZpbmUgX19tZW1fcGNpKGEpCShhKQorCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUICgweEZGRkZGRkZGKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTRiOWI0MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0wLDAgKzEsMTExIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL2lycXMuaAorICoKKyAqIENvcHlyaWdodCAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTNVA2NDQwIC0gSVJRIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9TNVBfSVJRU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUzVQX0lSUVNfSCBfX0ZJTEVfXworCisjaW5jbHVkZSA8cGxhdC9pcnFzLmg+CisKKy8qIFZJQzAgKi8KKworI2RlZmluZSBJUlFfRUlOVDBfMwkJUzVQX0lSUV9WSUMwKDApCisjZGVmaW5lIElSUV9FSU5UNF8xMQkJUzVQX0lSUV9WSUMwKDEpCisjZGVmaW5lIElSUV9SVENfVElDCQlTNVBfSVJRX1ZJQzAoMikKKyNkZWZpbmUgSVJRX0lJQzEJCVM1UF9JUlFfVklDMCg1KQorI2RlZmluZSBJUlFfSTJTVjQwCQlTNVBfSVJRX1ZJQzAoNikKKyNkZWZpbmUgSVJRX0dQUwkJCVM1UF9JUlFfVklDMCg3KQorI2RlZmluZSBJUlFfUE9TVDAJCVM1UF9JUlFfVklDMCg5KQorI2RlZmluZSBJUlFfMkQJCQlTNVBfSVJRX1ZJQzAoMTEpCisjZGVmaW5lIElSUV9USU1FUjBfVklDCQlTNVBfSVJRX1ZJQzAoMjMpCisjZGVmaW5lIElSUV9USU1FUjFfVklDCQlTNVBfSVJRX1ZJQzAoMjQpCisjZGVmaW5lIElSUV9USU1FUjJfVklDCQlTNVBfSVJRX1ZJQzAoMjUpCisjZGVmaW5lIElSUV9XRFQJCQlTNVBfSVJRX1ZJQzAoMjYpCisjZGVmaW5lIElSUV9USU1FUjNfVklDCQlTNVBfSVJRX1ZJQzAoMjcpCisjZGVmaW5lIElSUV9USU1FUjRfVklDCQlTNVBfSVJRX1ZJQzAoMjgpCisjZGVmaW5lIElSUV9ESVNQQ09OMAkJUzVQX0lSUV9WSUMwKDI5KQorI2RlZmluZSBJUlFfRElTUENPTjEJCVM1UF9JUlFfVklDMCgzMCkKKyNkZWZpbmUgSVJRX0RJU1BDT04yCQlTNVBfSVJRX1ZJQzAoMzEpCisKKy8qIFZJQzEgKi8KKworI2RlZmluZSBJUlFfRUlOVDEyXzE1CQlTNVBfSVJRX1ZJQzEoMCkKKyNkZWZpbmUgSVJRX1BDTTAJCVM1UF9JUlFfVklDMSgyKQorI2RlZmluZSBJUlFfVUFSVDAJCVM1UF9JUlFfVklDMSg1KQorI2RlZmluZSBJUlFfVUFSVDEJCVM1UF9JUlFfVklDMSg2KQorI2RlZmluZSBJUlFfVUFSVDIJCVM1UF9JUlFfVklDMSg3KQorI2RlZmluZSBJUlFfVUFSVDMJCVM1UF9JUlFfVklDMSg4KQorI2RlZmluZSBJUlFfRE1BMAkJUzVQX0lSUV9WSUMxKDkpCisjZGVmaW5lIElSUV9ORkMJCQlTNVBfSVJRX1ZJQzEoMTMpCisjZGVmaW5lIElSUV9TUEkwCQlTNVBfSVJRX1ZJQzEoMTYpCisjZGVmaW5lIElSUV9TUEkxCQlTNVBfSVJRX1ZJQzEoMTcpCisjZGVmaW5lIElSUV9JSUMJCQlTNVBfSVJRX1ZJQzEoMTgpCisjZGVmaW5lIElSUV9ESVNQQ09OMwkJUzVQX0lSUV9WSUMxKDE5KQorI2RlZmluZSBJUlFfRklNR1ZHCQlTNVBfSVJRX1ZJQzEoMjApCisjZGVmaW5lIElSUV9FSU5UX0dST1VQUwkJUzVQX0lSUV9WSUMxKDIxKQorI2RlZmluZSBJUlFfUE1VSVJRCQlTNVBfSVJRX1ZJQzEoMjMpCisjZGVmaW5lIElSUV9IU01NQzAJCVM1UF9JUlFfVklDMSgyNCkKKyNkZWZpbmUgSVJRX0hTTU1DMQkJUzVQX0lSUV9WSUMxKDI1KQorI2RlZmluZSBJUlFfSFNNTUMyCQlJUlFfU1BJMQkvKiBzaGFyZWQgd2l0aCBTUEkxICovCisjZGVmaW5lIElSUV9PVEcJCQlTNVBfSVJRX1ZJQzEoMjYpCisjZGVmaW5lIElSUV9EU0kJCQlTNVBfSVJRX1ZJQzEoMjcpCisjZGVmaW5lIElSUV9SVENfQUxBUk0JCVM1UF9JUlFfVklDMSgyOCkKKyNkZWZpbmUgSVJRX1RTSQkJCVM1UF9JUlFfVklDMSgyOSkKKyNkZWZpbmUgSVJRX1BFTkROCQlTNVBfSVJRX1ZJQzEoMzApCisjZGVmaW5lIElSUV9UQwkJCUlSUV9QRU5ETgorI2RlZmluZSBJUlFfQURDCQkJUzVQX0lSUV9WSUMxKDMxKQorCisvKgorICogU2luY2UgdGhlIElSUV9FSU5UKHgpIGFyZSBhIGxpbmVhciBtYXBwaW5nIG9uIHM1cDY0NDAgd2UganVzdCBkZWZpbmVkCisgKiB0aGVtIGFzIGFuIElSUV9FSU5UKHgpIG1hY3JvIGZyb20gUzVQX0lSUV9FSU5UX0JBU0Ugd2hpY2ggd2UgcGxhY2UKKyAqIGFmdGVyIHRoZSBwYWlyIG9mIFZJQ3MuCisgKi8KKworI2RlZmluZSBTNVBfSVJRX0VJTlRfQkFTRQkoUzVQX0lSUV9WSUMxKDMxKSArIDYpCisKKyNkZWZpbmUgUzVQX0VJTlQoeCkJCSgoeCkgKyBTNVBfSVJRX0VJTlRfQkFTRSkKKyNkZWZpbmUgSVJRX0VJTlQoeCkJCVM1UF9FSU5UKHgpCisKKy8qCisgKiBOZXh0IHRoZSBleHRlcm5hbCBpbnRlcnJ1cHQgZ3JvdXBzLiBUaGVzZSBhcmUgc2ltaWxhciB0byB0aGUgSVJRX0VJTlQoeCkKKyAqIHRoYXQgdGhleSBhcmUgc291cmNlZCBmcm9tIHRoZSBHUElPIHBpbnMgYnV0IHdpdGggYSBkaWZmZXJlbnQgc2NoZW1lIGZvcgorICogcHJpb3JpdHkgYW5kIHNvdXJjZSBpbmRpY2F0aW9uLgorICoKKyAqIFRoZSBJUlFfRUlOVCh4KSBjYW4gYmUgdGhvdWdodCBvZiBhcyAnZ3JvdXAgMCcgb2YgdGhlIGF2YWlsYWJsZSBHUElPCisgKiBpbnRlcnJ1cHRzLCBidXQgZm9yIGhpc3RvcmljYWwgcmVhc29ucyB0aGV5IGFyZSBrZXB0IGFwYXJ0IGZyb20gdGhlc2UKKyAqIG5leHQgaW50ZXJydXB0cy4KKyAqCisgKiBVc2UgSVJRX0VJTlRfR1JPVVAoZ3JvdXAsIG9mZnNldCkgdG8gZ2V0IHRoZSBudW1iZXIgZm9yIHVzZSBpbiB0aGUKKyAqIG1hY2hpbmUgc3BlY2lmaWMgc3VwcG9ydCBmaWxlcy4KKyAqLworCisvKiBBY3R1YWxseSwgIzYgYW5kICM3IGFyZSBtaXNzaW5nIGluIHRoZSBFSU5UX0dST1VQMSAqLworI2RlZmluZSBJUlFfRUlOVF9HUk9VUDFfTlIJKDE1KQorI2RlZmluZSBJUlFfRUlOVF9HUk9VUDJfTlIJKDgpCisjZGVmaW5lIElSUV9FSU5UX0dST1VQNV9OUgkoNykKKyNkZWZpbmUgSVJRX0VJTlRfR1JPVVA2X05SCSgxMCkKKy8qIEFjdHVhbGx5LCAjMCwgIzEgYW5kICMyIGFyZSBtaXNzaW5nIGluIHRoZSBFSU5UX0dST1VQOCAqLworI2RlZmluZSBJUlFfRUlOVF9HUk9VUDhfTlIJKDExKQorCisjZGVmaW5lIElSUV9FSU5UX0dST1VQX0JBU0UJUzVQX0VJTlQoMTYpCisjZGVmaW5lIElSUV9FSU5UX0dST1VQMV9CQVNFCShJUlFfRUlOVF9HUk9VUF9CQVNFICsgMCkKKyNkZWZpbmUgSVJRX0VJTlRfR1JPVVAyX0JBU0UJKElSUV9FSU5UX0dST1VQMV9CQVNFICsgSVJRX0VJTlRfR1JPVVAxX05SKQorI2RlZmluZSBJUlFfRUlOVF9HUk9VUDVfQkFTRQkoSVJRX0VJTlRfR1JPVVAyX0JBU0UgKyBJUlFfRUlOVF9HUk9VUDJfTlIpCisjZGVmaW5lIElSUV9FSU5UX0dST1VQNl9CQVNFCShJUlFfRUlOVF9HUk9VUDVfQkFTRSArIElSUV9FSU5UX0dST1VQNV9OUikKKyNkZWZpbmUgSVJRX0VJTlRfR1JPVVA4X0JBU0UJKElSUV9FSU5UX0dST1VQNl9CQVNFICsgSVJRX0VJTlRfR1JPVVA2X05SKQorCisjZGVmaW5lIElSUV9FSU5UX0dST1VQKGdycCwgeCkJKElSUV9FSU5UX0dST1VQIyNncnAjI19CQVNFICsgKHgpKQorCisvKiBTZXQgdGhlIGRlZmF1bHQgTlJfSVJRUyAqLworCisjZGVmaW5lIE5SX0lSUVMJCQkoSVJRX0VJTlRfR1JPVVA4X0JBU0UgKyBJUlFfRUlOVF9HUk9VUDhfTlIgKyAxKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9TNVBfSVJRU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL21hcC5oIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTI0ZTVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtMCwwICsxLDY4IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL21hcC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTNVA2NDQwIC0gTWVtb3J5IG1hcCBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUFQX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NQVBfSCBfX0ZJTEVfXworCisjaW5jbHVkZSA8cGxhdC9tYXAtYmFzZS5oPgorI2luY2x1ZGUgPHBsYXQvbWFwLXM1cC5oPgorCisjZGVmaW5lIFM1UDY0NDBfUEFfQ0hJUElECSgweEUwMDAwMDAwKQorI2RlZmluZSBTNVBfUEFfQ0hJUElECQlTNVA2NDQwX1BBX0NISVBJRAorCisjZGVmaW5lIFM1UDY0NDBfUEFfU1lTQ09OCSgweEUwMTAwMDAwKQorI2RlZmluZSBTNVA2NDQwX1BBX0NMSwkJKFM1UDY0NDBfUEFfU1lTQ09OICsgMHgwKQorI2RlZmluZSBTNVBfUEFfU1lTQ09OCQlTNVA2NDQwX1BBX1NZU0NPTgorCisjZGVmaW5lIFM1UDY0NDBfUEFfR1BJTwkJKDB4RTAzMDgwMDApCisjZGVmaW5lIFM1UF9QQV9HUElPCQlTNVA2NDQwX1BBX0dQSU8KKworI2RlZmluZSBTNVA2NDQwX1BBX1ZJQzAJCSgweEU0MDAwMDAwKQorI2RlZmluZSBTNVBfUEFfVklDMAkJUzVQNjQ0MF9QQV9WSUMwCisKKyNkZWZpbmUgUzVQNjQ0MF9QQV9WSUMxCQkoMHhFNDEwMDAwMCkKKyNkZWZpbmUgUzVQX1BBX1ZJQzEJCVM1UDY0NDBfUEFfVklDMQorCisjZGVmaW5lIFM1UDY0NDBfUEFfVElNRVIJKDB4RUEwMDAwMDApCisjZGVmaW5lIFM1UF9QQV9USU1FUgkJUzVQNjQ0MF9QQV9USU1FUgorCisjZGVmaW5lIFM1UDY0NDBfUEFfUlRDCQkoMHhFQTEwMDAwMCkKKyNkZWZpbmUgUzVQX1BBX1JUQwkJUzVQNjQ0MF9QQV9SVEMKKworI2RlZmluZSBTNVA2NDQwX1BBX1dEVAkJKDB4RUEyMDAwMDApCisjZGVmaW5lIFM1UF9QQV9XRFQJCVM1UDY0NDBfUEFfV0RUCisKKyNkZWZpbmUgUzVQNjQ0MF9QQV9VQVJUCQkoMHhFQzAwMDAwMCkKKworI2RlZmluZSBTNVBfUEFfVUFSVDAJCShTNVA2NDQwX1BBX1VBUlQgKyAweDApCisjZGVmaW5lIFM1UF9QQV9VQVJUMQkJKFM1UDY0NDBfUEFfVUFSVCArIDB4NDAwKQorI2RlZmluZSBTNVBfUEFfVUFSVDIJCShTNVA2NDQwX1BBX1VBUlQgKyAweDgwMCkKKyNkZWZpbmUgUzVQX1BBX1VBUlQzCQkoUzVQNjQ0MF9QQV9VQVJUICsgMHhDMDApCisKKyNkZWZpbmUgUzVQX1NaX1VBUlQJCVNaXzI1NgorCisjZGVmaW5lIFM1UDY0NDBfUEFfSUlDMAkJKDB4RUMxMDQwMDApCisKKyNkZWZpbmUgUzVQNjQ0MF9QQV9IU09URwkoMHhFRDEwMDAwMCkKKworI2RlZmluZSBTNVA2NDQwX1BBX0hTTU1DMAkoMHhFRDgwMDAwMCkKKyNkZWZpbmUgUzVQNjQ0MF9QQV9IU01NQzEJKDB4RUQ5MDAwMDApCisjZGVmaW5lIFM1UDY0NDBfUEFfSFNNTUMyCSgweEVEQTAwMDAwKQorCisjZGVmaW5lIFM1UDY0NDBfUEFfU0RSQU0JKDB4MjAwMDAwMDApCisjZGVmaW5lIFM1UF9QQV9TRFJBTQkJUzVQNjQ0MF9QQV9TRFJBTQorCisvKiBjb21wYXRpYmlsdGl5IGRlZmluZXMuICovCisjZGVmaW5lIFMzQ19QQV9VQVJUCQlTNVA2NDQwX1BBX1VBUlQKKyNkZWZpbmUgUzNDX1BBX0lJQwkJUzVQNjQ0MF9QQV9JSUMwCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjI5MTBjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMCwwICsxLDE5IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTNVA2NDQwIC0gTWVtb3J5IGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICisKKyNkZWZpbmUgUEhZU19PRkZTRVQgICAgIAlVTCgweDIwMDAwMDAwKQorI2RlZmluZSBDT05TSVNURU5UX0RNQV9TSVpFCVNaXzhNCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX01FTU9SWV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9wd20tY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGJiN2M1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9wd20tY2xvY2suaApAQCAtMCwwICsxLDYyIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oCisgKgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQNjQ0MCAtIHB3bSBjbG9jayBhbmQgdGltZXIgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisvKioKKyAqIHB3bV9jZmdfc3JjX2lzX3RjbGsoKSAtIHJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBtdXggY29uZmlnIGlzIGEgdGNsaworICogQGNmZzogVGhlIHRpbWVyIFRDRkcxIHJlZ2lzdGVyIGJpdHMgc2hpZnRlZCBkb3duIHRvIDAuCisgKgorICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24gZnJvbSBUQ0ZHMSBpcyBhIFRDTEsgaW5zdGVhZAorICogYW55IG9mIHRoZSBURElWIGNsb2Nrcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHdtX2NmZ19zcmNfaXNfdGNsayh1bnNpZ25lZCBsb25nIHRjZmcpCit7CisJcmV0dXJuIHRjZmcgPT0gUzNDMjQxMF9UQ0ZHMV9NVVhfVENMSzsKK30KKworLyoqCisgKiB0Y2ZnX3RvX2Rpdmlzb3IoKSAtIGNvbnZlcnQgdGNmZzEgc2V0dGluZyB0byBhIGRpdmlzb3IKKyAqIEB0Y2ZnMTogVGhlIHRjZmcxIHNldHRpbmcsIHNoaWZ0ZWQgZG93bi4KKyAqCisgKiBHZXQgdGhlIGRpdmlzb3IgdmFsdWUgZm9yIHRoZSBnaXZlbiB0Y2ZnMSBzZXR0aW5nLiBXZSBhc3N1bWUgdGhlCisgKiBjYWxsZXIgaGFzIGFscmVhZHkgY2hlY2tlZCB0byBzZWUgaWYgdGhpcyBpcyBub3QgYSBUQ0xLIHNvdXJjZS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjZmdfdG9fZGl2aXNvcih1bnNpZ25lZCBsb25nIHRjZmcxKQoreworCXJldHVybiAxIDw8ICgxICsgdGNmZzEpOworfQorCisvKioKKyAqIHB3bV90ZGl2X2hhc19kaXYxKCkgLSBkb2VzIHRoZSB0ZGl2IHNldHRpbmcgaGF2ZSBhIC8xCisgKgorICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSBhIC8xIGluIHRoZSB0ZGl2IHNldHRpbmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHB3bV90ZGl2X2hhc19kaXYxKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHdtX3RkaXZfZGl2X2JpdHMoKSAtIGNhbGN1bGF0ZSBUQ0ZHMSBkaXZpc29yIHZhbHVlLgorICogQGRpdjogVGhlIGRpdmlzb3IgdG8gY2FsY3VsYXRlIHRoZSBiaXQgaW5mb3JtYXRpb24gZm9yLgorICoKKyAqIFR1cm4gYSBkaXZpc29yIGludG8gdGhlIG5lY2Vzc2FyeSBiaXQgZmllbGQgZm9yIFRDRkcxLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHdtX3RkaXZfZGl2X2JpdHModW5zaWduZWQgaW50IGRpdikKK3sKKwlyZXR1cm4gaWxvZzIoZGl2KSAtIDE7Cit9CisKKyNkZWZpbmUgUzNDX1RDRkcxX01VWF9UQ0xLIFMzQzI0MTBfVENGRzFfTVVYX1RDTEsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc4M2VjYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oCkBAIC0wLDAgKzEsMTMwIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQNjQ0MCAtIENsb2NrIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9SRUdTX0NMT0NLX0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdTX0NMT0NLX0ggX19GSUxFX18KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKyNkZWZpbmUgUzVQX0NMS1JFRyh4KQkJKFMzQ19WQV9TWVMgKyAoeCkpCisKKyNkZWZpbmUgUzVQX0FQTExfTE9DSwkJUzVQX0NMS1JFRygweDAwKQorI2RlZmluZSBTNVBfTVBMTF9MT0NLCQlTNVBfQ0xLUkVHKDB4MDQpCisjZGVmaW5lIFM1UF9FUExMX0xPQ0sJCVM1UF9DTEtSRUcoMHgwOCkKKyNkZWZpbmUgUzVQX0FQTExfQ09OCQlTNVBfQ0xLUkVHKDB4MEMpCisjZGVmaW5lIFM1UF9NUExMX0NPTgkJUzVQX0NMS1JFRygweDEwKQorI2RlZmluZSBTNVBfRVBMTF9DT04JCVM1UF9DTEtSRUcoMHgxNCkKKyNkZWZpbmUgUzVQX0VQTExfQ09OX0sJCVM1UF9DTEtSRUcoMHgxOCkKKyNkZWZpbmUgUzVQX0NMS19TUkMwCQlTNVBfQ0xLUkVHKDB4MUMpCisjZGVmaW5lIFM1UF9DTEtfRElWMAkJUzVQX0NMS1JFRygweDIwKQorI2RlZmluZSBTNVBfQ0xLX0RJVjEJCVM1UF9DTEtSRUcoMHgyNCkKKyNkZWZpbmUgUzVQX0NMS19ESVYyCQlTNVBfQ0xLUkVHKDB4MjgpCisjZGVmaW5lIFM1UF9DTEtfT1VUCQlTNVBfQ0xLUkVHKDB4MkMpCisjZGVmaW5lIFM1UF9DTEtfR0FURV9IQ0xLMAlTNVBfQ0xLUkVHKDB4MzApCisjZGVmaW5lIFM1UF9DTEtfR0FURV9QQ0xLCVM1UF9DTEtSRUcoMHgzNCkKKyNkZWZpbmUgUzVQX0NMS19HQVRFX1NDTEswCVM1UF9DTEtSRUcoMHgzOCkKKyNkZWZpbmUgUzVQX0NMS19HQVRFX01FTTAJUzVQX0NMS1JFRygweDNDKQorI2RlZmluZSBTNVBfQ0xLX0RJVjMJCVM1UF9DTEtSRUcoMHg0MCkKKyNkZWZpbmUgUzVQX0NMS19HQVRFX0hDTEsxCVM1UF9DTEtSRUcoMHg0NCkKKyNkZWZpbmUgUzVQX0NMS19HQVRFX1NDTEsxCVM1UF9DTEtSRUcoMHg0OCkKKyNkZWZpbmUgUzVQX0FIQl9DT04wICAgICAgICAgICAJUzVQX0NMS1JFRygweDEwMCkKKyNkZWZpbmUgUzVQX0NMS19TUkMxICAgICAgICAgICAJUzVQX0NMS1JFRygweDEwQykKKyNkZWZpbmUgUzVQX1NXUkVTRVQJCVM1UF9DTEtSRUcoMHgxMTQpCisjZGVmaW5lIFM1UF9TWVNfSUQJCVM1UF9DTEtSRUcoMHgxMTgpCisjZGVmaW5lIFM1UF9TWVNfT1RIRVJTCQlTNVBfQ0xLUkVHKDB4MTFDKQorI2RlZmluZSBTNVBfTUVNX0NGR19TVEFUCVM1UF9DTEtSRUcoMHgxMkMpCisjZGVmaW5lIFM1UF9QV1JfQ0ZHCQlTNVBfQ0xLUkVHKDB4ODA0KQorI2RlZmluZSBTNVBfRUlOVF9XQUtFVVBfTUFTSwlTNVBfQ0xLUkVHKDB4ODA4KQorI2RlZmluZSBTNVBfTk9STUFMX0NGRwkJUzVQX0NMS1JFRygweDgxMCkKKyNkZWZpbmUgUzVQX1NUT1BfQ0ZHCQlTNVBfQ0xLUkVHKDB4ODE0KQorI2RlZmluZSBTNVBfU0xFRVBfQ0ZHCQlTNVBfQ0xLUkVHKDB4ODE4KQorI2RlZmluZSBTNVBfT1NDX0ZSRVEJCVM1UF9DTEtSRUcoMHg4MjApCisjZGVmaW5lIFM1UF9PU0NfU1RBQkxFCQlTNVBfQ0xLUkVHKDB4ODI0KQorI2RlZmluZSBTNVBfUFdSX1NUQUJMRQkJUzVQX0NMS1JFRygweDgyOCkKKyNkZWZpbmUgUzVQX01UQ19TVEFCTEUJCVM1UF9DTEtSRUcoMHg4MzApCisjZGVmaW5lIFM1UF9PVEhFUlMJCVM1UF9DTEtSRUcoMHg5MDApCisjZGVmaW5lIFM1UF9SU1RfU1RBVAkJUzVQX0NMS1JFRygweDkwNCkKKyNkZWZpbmUgUzVQX1dBS0VVUF9TVEFUCQlTNVBfQ0xLUkVHKDB4OTA4KQorI2RlZmluZSBTNVBfU0xQRU4JCVM1UF9DTEtSRUcoMHg5MzApCisjZGVmaW5lIFM1UF9JTkZPUk0wCQlTNVBfQ0xLUkVHKDB4QTAwKQorI2RlZmluZSBTNVBfSU5GT1JNMQkJUzVQX0NMS1JFRygweEEwNCkKKyNkZWZpbmUgUzVQX0lORk9STTIJCVM1UF9DTEtSRUcoMHhBMDgpCisjZGVmaW5lIFM1UF9JTkZPUk0zCQlTNVBfQ0xLUkVHKDB4QTBDKQorCisvKiBDTEtESVYwICovCisjZGVmaW5lIFM1UF9DTEtESVYwX1BDTEtfTUFTSwkJKDB4ZiA8PCAxMikKKyNkZWZpbmUgUzVQX0NMS0RJVjBfUENMS19TSElGVAkJKDEyKQorI2RlZmluZSBTNVBfQ0xLRElWMF9IQ0xLX01BU0sJCSgweGYgPDwgOCkKKyNkZWZpbmUgUzVQX0NMS0RJVjBfSENMS19TSElGVAkJKDgpCisjZGVmaW5lIFM1UF9DTEtESVYwX01QTExfTUFTSwkJKDB4MSA8PCA0KQorI2RlZmluZSBTNVBfQ0xLRElWMF9BUk1fTUFTSwkJKDB4ZiA8PCAwKQorI2RlZmluZSBTNVBfQ0xLRElWMF9BUk1fU0hJRlQJCSgwKQorCisvKiBDTEtESVYzICovCisjZGVmaW5lIFM1UF9DTEtESVYzX1BDTEtfTE9XX01BU0sJKDB4ZiA8PCAxMikKKyNkZWZpbmUgUzVQX0NMS0RJVjNfUENMS19MT1dfU0hJRlQJKDEyKQorI2RlZmluZSBTNVBfQ0xLRElWM19IQ0xLX0xPV19NQVNLCSgweGYgPDwgOCkKKyNkZWZpbmUgUzVQX0NMS0RJVjNfSENMS19MT1dfU0hJRlQJKDgpCisKKy8qIEhDTEswIEdBVEUgUmVnaXN0ZXJzICovCisjZGVmaW5lIFM1UF9DTEtDT05fSENMSzBfVVNCCQkoMTw8MjApCisjZGVmaW5lIFM1UF9DTEtDT05fSENMSzBfSFNNTUMyCQkoMTw8MTkpCisjZGVmaW5lIFM1UF9DTEtDT05fSENMSzBfSFNNTUMxCQkoMTw8MTgpCisjZGVmaW5lIFM1UF9DTEtDT05fSENMSzBfSFNNTUMwCQkoMTw8MTcpCisjZGVmaW5lIFM1UF9DTEtDT05fSENMSzBfUE9TVDAJCSgxPDw1KQorCisvKiBIQ0xLMSBHQVRFIFJlZ2lzdGVycyAqLworI2RlZmluZSBTNVBfQ0xLQ09OX0hDTEsxX0RJU1BDT04JKDE8PDEpCisKKy8qIFBDTEsgR0FURSBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUzVQX0NMS0NPTl9QQ0xLX0lJUzIJCSgxPDwyNikKKyNkZWZpbmUgUzVQX0NMS0NPTl9QQ0xLX1NQSTEJCSgxPDwyMikKKyNkZWZpbmUgUzVQX0NMS0NPTl9QQ0xLX1NQSTAJCSgxPDwyMSkKKyNkZWZpbmUgUzVQX0NMS0NPTl9QQ0xLX0dQSU8JCSgxPDwxOCkKKyNkZWZpbmUgUzVQX0NMS0NPTl9QQ0xLX0lJQzAJCSgxPDwxNykKKyNkZWZpbmUgUzVQX0NMS0NPTl9QQ0xLX1RTQURDCQkoMTw8MTIpCisjZGVmaW5lIFM1UF9DTEtDT05fUENMS19QV00JCSgxPDw3KQorI2RlZmluZSBTNVBfQ0xLQ09OX1BDTEtfUlRDCQkoMTw8NikKKyNkZWZpbmUgUzVQX0NMS0NPTl9QQ0xLX1dEVAkJKDE8PDUpCisjZGVmaW5lIFM1UF9DTEtDT05fUENMS19VQVJUMwkJKDE8PDQpCisjZGVmaW5lIFM1UF9DTEtDT05fUENMS19VQVJUMgkJKDE8PDMpCisjZGVmaW5lIFM1UF9DTEtDT05fUENMS19VQVJUMQkJKDE8PDIpCisjZGVmaW5lIFM1UF9DTEtDT05fUENMS19VQVJUMAkJKDE8PDEpCisKKy8qIFNDTEswIEdBVEUgUmVnaXN0ZXJzICovCisjZGVmaW5lIFM1UF9DTEtDT05fU0NMSzBfTU1DMl80OAkoMTw8MjkpCisjZGVmaW5lIFM1UF9DTEtDT05fU0NMSzBfTU1DMV80OAkoMTw8MjgpCisjZGVmaW5lIFM1UF9DTEtDT05fU0NMSzBfTU1DMF80OAkoMTw8MjcpCisjZGVmaW5lIFM1UF9DTEtDT05fU0NMSzBfTU1DMgkJKDE8PDI2KQorI2RlZmluZSBTNVBfQ0xLQ09OX1NDTEswX01NQzEJCSgxPDwyNSkKKyNkZWZpbmUgUzVQX0NMS0NPTl9TQ0xLMF9NTUMwCQkoMTw8MjQpCisjZGVmaW5lIFM1UF9DTEtDT05fU0NMSzBfU1BJMV80OCAJKDE8PDIzKQorI2RlZmluZSBTNVBfQ0xLQ09OX1NDTEswX1NQSTBfNDggCSgxPDwyMikKKyNkZWZpbmUgUzVQX0NMS0NPTl9TQ0xLMF9TUEkxCQkoMTw8MjEpCisjZGVmaW5lIFM1UF9DTEtDT05fU0NMSzBfU1BJMAkJKDE8PDIwKQorI2RlZmluZSBTNVBfQ0xLQ09OX1NDTEswX1VBUlQJCSgxPDw1KQorCisvKiBTQ0xLMSBHQVRFIFJlZ2lzdGVycyAqLworCisvKiBNRU0wIEdBVEUgUmVnaXN0ZXJzICovCisjZGVmaW5lIFM1UF9DTEtDT05fTUVNMF9IQ0xLX05GQ09OCSgxPDwyKQorCisvKk9USEVSUyBSZXNnaXN0ZXIgKi8KKyNkZWZpbmUgUzVQX09USEVSU19VU0JfU0lHX01BU0sJCSgxPDwxNikKKyNkZWZpbmUgUzVQX09USEVSU19IQ0xLX0xPV19TRUxfTVBMTAkoMTw8NikKKworLyogQ29tcGF0aWJpbGl0eSBkZWZpbmVzICovCisjZGVmaW5lIEFSTV9DTEtfRElWCQkJUzVQX0NMS19ESVYwCisjZGVmaW5lIEFSTV9ESVZfUkFUSU9fU0hJRlQJCTAKKyNkZWZpbmUgQVJNX0RJVl9NQVNLCQkJKDB4ZiA8PCBBUk1fRElWX1JBVElPX1NISUZUKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9SRUdTX0NMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvcmVncy1ncGlvLmggYi9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL3JlZ3MtZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZmY3NTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL3JlZ3MtZ3Bpby5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvcmVncy1ncGlvLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFM1UDY0NDAgLSBHUElPIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU19HUElPX0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdTX0dQSU9fSCBfX0ZJTEVfXworCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworLyogQmFzZSBhZGRyZXNzZXMgZm9yIGVhY2ggb2YgdGhlIGJhbmtzICovCisjZGVmaW5lIFM1UDY0NDBfR1BBX0JBU0UJCShTNVBfVkFfR1BJTyArIDB4MDAwMCkKKyNkZWZpbmUgUzVQNjQ0MF9HUEJfQkFTRQkJKFM1UF9WQV9HUElPICsgMHgwMDIwKQorI2RlZmluZSBTNVA2NDQwX0dQQ19CQVNFCQkoUzVQX1ZBX0dQSU8gKyAweDAwNDApCisjZGVmaW5lIFM1UDY0NDBfR1BGX0JBU0UJCShTNVBfVkFfR1BJTyArIDB4MDBBMCkKKyNkZWZpbmUgUzVQNjQ0MF9HUEdfQkFTRQkJKFM1UF9WQV9HUElPICsgMHgwMEMwKQorI2RlZmluZSBTNVA2NDQwX0dQSF9CQVNFCQkoUzVQX1ZBX0dQSU8gKyAweDAwRTApCisjZGVmaW5lIFM1UDY0NDBfR1BJX0JBU0UJCShTNVBfVkFfR1BJTyArIDB4MDEwMCkKKyNkZWZpbmUgUzVQNjQ0MF9HUEpfQkFTRQkJKFM1UF9WQV9HUElPICsgMHgwMTIwKQorI2RlZmluZSBTNVA2NDQwX0dQTl9CQVNFCQkoUzVQX1ZBX0dQSU8gKyAweDA4MzApCisjZGVmaW5lIFM1UDY0NDBfR1BQX0JBU0UJCShTNVBfVkFfR1BJTyArIDB4MDE2MCkKKyNkZWZpbmUgUzVQNjQ0MF9HUFJfQkFTRQkJKFM1UF9WQV9HUElPICsgMHgwMjkwKQorI2RlZmluZSBTNVA2NDQwX0VJTlQwQ09OMAkJKFM1UF9WQV9HUElPICsgMHg5MDApCisjZGVmaW5lIFM1UDY0NDBfRUlOVDBGTFRDT04wCQkoUzVQX1ZBX0dQSU8gKyAweDkxMCkKKyNkZWZpbmUgUzVQNjQ0MF9FSU5UMEZMVENPTjEJCShTNVBfVkFfR1BJTyArIDB4OTE0KQorI2RlZmluZSBTNVA2NDQwX0VJTlQwTUFTSwkJKFM1UF9WQV9HUElPICsgMHg5MjApCisjZGVmaW5lIFM1UDY0NDBfRUlOVDBQRU5ECQkoUzVQX1ZBX0dQSU8gKyAweDkyNCkKKworLyogZm9yIExDRCAqLworI2RlZmluZSBTNVA2NDQwX1NQQ09OX0xDRF9TRUxfUkdCCSgxIDw8IDApCisjZGVmaW5lIFM1UDY0NDBfU1BDT05fTENEX1NFTF9NQVNLCSgzIDw8IDApCisKKy8qIFRoZXNlIHNldCBvZiBtYWNyb3MgYXJlIG5vdCByZWFsbHkgdXNlZnVsIGZvciB0aGUKKyAqIEdQRi9HUEkvR1BKL0dQTi9HUFAsCisgKiB1c2VmdWwgZm9yIG90aGVycyBzZXQgb2YgR1BJTydzICg0IGJpdCkKKyAqLworI2RlZmluZSBTNVA2NDQwX0dQSU9fQ09OTUFTSyhfX2dwaW8pCSgweGYgPDwgKChfX2dwaW8pICogNCkpCisjZGVmaW5lIFM1UDY0NDBfR1BJT19JTlBVVChfX2dwaW8pCSgweDAgPDwgKChfX2dwaW8pICogNCkpCisjZGVmaW5lIFM1UDY0NDBfR1BJT19PVVRQVVQoX19ncGlvKQkoMHgxIDw8ICgoX19ncGlvKSAqIDQpKQorCisvKiBVc2UgdGhlc2UgbWFjcm9zIGZvciBHUEYvR1BJL0dQSi9HUE4vR1BQIHNldCBvZiBHUElPICgyIGJpdCkKKyAqICovCisjZGVmaW5lIFM1UDY0NDBfR1BJTzJfQ09OTUFTSyhfX2dwaW8pCSgweDMgPDwgKChfX2dwaW8pICogMikpCisjZGVmaW5lIFM1UDY0NDBfR1BJTzJfSU5QVVQoX19ncGlvKQkoMHgwIDw8ICgoX19ncGlvKSAqIDIpKQorI2RlZmluZSBTNVA2NDQwX0dQSU8yX09VVFBVVChfX2dwaW8pCSgweDEgPDwgKChfX2dwaW8pICogMikpCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1JFR1NfR1BJT19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmggYi9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk2MWY0YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaApAQCAtMCwwICsxLDE5IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFM1UDY0NDAgLSBJUlEgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfSVJRX0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdTX0lSUV9IIF9fRklMRV9fCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUkVHU19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJkZDgxNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTAsMCArMSwyNiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQNjQ0MCAtIHN5c3RlbSBzdXBwb3J0IGhlYWRlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSCBfX0ZJTEVfXworCitzdGF0aWMgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwkvKiBub3RoaW5nIGhlcmUgeWV0ICovCit9CisKK3N0YXRpYyB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCit7CisJLyogbm90aGluZyBoZXJlIHlldCAqLworfQorCisjZW5kaWYgLyogX19BU01fQVJDSF9TWVNURU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC90aWNrLmggYi9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL3RpY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjI1YzdmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC90aWNrLmgKQEAgLTAsMCArMSwyNCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC90aWNrLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFM1UDY0NDAgLSBUaW1lciB0aWNrIHN1cHBvcnQgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1RJQ0tfSAorI2RlZmluZSBfX0FTTV9BUkNIX1RJQ0tfSCBfX0ZJTEVfXworCitzdGF0aWMgaW5saW5lIHUzMiBzM2MyNHh4X29zdGltZXJfcGVuZGluZyh2b2lkKQoreworCXUzMiBwZW5kID0gX19yYXdfcmVhZGwoVkFfVklDMCArIFZJQ19SQVdfU1RBVFVTKTsKKwlyZXR1cm4gcGVuZCAmICgxIDw8IChJUlFfVElNRVI0X1ZJQyAtIFM1UF9JUlFfVklDMCgwKSkpOworfQorCisjZGVmaW5lIFRJQ0tfTUFYCSgweGZmZmZmZmZmKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9USUNLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjJlOGNkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qIGFyY2gvYXJtL21hY2gtczNjNjR4eC9pbmNsdWRlL21hY2gvdGltZXguaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzY0MDAgLSB0aW1lIHBhcmFtZXRlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1RJTUVYX0gKKyNkZWZpbmUgX19BU01fQVJDSF9USU1FWF9ICisKKy8qIENMT0NLX1RJQ0tfUkFURSBuZWVkcyB0byBiZSBldmFsdWF0YWJsZSBieSB0aGUgY3BwLCBzbyBtYWtpbmcgaXQKKyAqIGEgdmFyaWFibGUgaXMgdXNlbGVzcy4gSXQgc2VlbXMgYXMgbG9uZyBhcyB3ZSBtYWtlIG91ciB0aW1lcnMgYW4KKyAqIGV4YWN0IG11bHRpcGxlIG9mIEhaLCBhbnkgdmFsdWUgdGhhdCBtYWtlcyBhIDEtPjEgY29ycmVzcG9uZGVuY2UKKyAqIGZvciB0aGUgdGltZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyB0by9mcm9tIGppZmZpZXMgaXMgYWNjZXB0YWJsZS4KKyovCisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFIDEyMDAwMDAwCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1RJTUVYX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2MxZjYwMGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApAQCAtMCwwICsxLDI0IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQNjQ0MCAtIHVuY29tcHJlc3MgY29kZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPHBsYXQvdW5jb21wcmVzcy5oPgorCitzdGF0aWMgdm9pZCBhcmNoX2RldGVjdF9jcHUodm9pZCkKK3sKKwkvKiB3ZSBkbyBub3QgbmVlZCB0byBkbyBhbnkgY3B1IGRldGVjdGlvbiBoZXJlIGF0IHRoZSBtb21lbnQuICovCit9CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1VOQ09NUFJFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLXM1cDY0NDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmRmMjU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTAsMCArMSwxNyBAQAorLyogYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAxMCBCZW4gRG9va3MgPGJlbi1saW51eEBmbHVmZi5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBTM0M2NDAwIHZtYWxsb2MgZGVmaW5pdGlvbgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1ZNQUxMT0NfSAorI2RlZmluZSBfX0FTTV9BUkNIX1ZNQUxMT0NfSAorCisjZGVmaW5lIFZNQUxMT0NfRU5ECSAgKDB4RTAwMDAwMDApCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1ZNQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luaXQuYyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFmMzcyNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0MC9pbml0LmMKQEAgLTAsMCArMSw1MiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL2luaXQuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQNjQ0MCAtIEluaXQgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9zNXA2NDQwLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfdWFydF9jbGtzcmMgczVwNjQ0MF9zZXJpYWxfY2xvY2tzW10gPSB7CisJWzBdID0geworCQkubmFtZQkJPSAicGNsa19sb3ciLAorCQkuZGl2aXNvcgk9IDEsCisJCS5taW5fYmF1ZAk9IDAsCisJCS5tYXhfYmF1ZAk9IDAsCisJfSwKKwlbMV0gPSB7CisJCS5uYW1lCQk9ICJ1Y2xrMSIsCisJCS5kaXZpc29yCT0gMSwKKwkJLm1pbl9iYXVkCT0gMCwKKwkJLm1heF9iYXVkCT0gMCwKKwl9LAorfTsKKworLyogdWFydCByZWdpc3RyYXRpb24gcHJvY2VzcyAqLwordm9pZCBfX2luaXQgczVwNjQ0MF9jb21tb25faW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubykKK3sKKwlzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICp0Y2ZnID0gY2ZnOworCXUzMiB1Y250OworCisJZm9yICh1Y250ID0gMDsgdWNudCA8IG5vOyB1Y250KyssIHRjZmcrKykgeworCQlpZiAoIXRjZmctPmNsb2NrcykgeworCQkJdGNmZy0+Y2xvY2tzID0gczVwNjQ0MF9zZXJpYWxfY2xvY2tzOworCQkJdGNmZy0+Y2xvY2tzX3NpemUgPSBBUlJBWV9TSVpFKHM1cDY0NDBfc2VyaWFsX2Nsb2Nrcyk7CisJCX0KKwl9CisKKwlzM2MyNHh4X2luaXRfdWFydGRldnMoInMzYzY0MDAtdWFydCIsIHM1cF91YXJ0X3Jlc291cmNlcywgY2ZnLCBubyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0NDAvbWFjaC1zbWRrNjQ0MC5jIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL21hY2gtc21kazY0NDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWU4OGYyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL21hY2gtc21kazY0NDAuYwpAQCAtMCwwICsxLDExMSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXA2NDQwL21hY2gtc21kazY0NDAuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisKKyNpbmNsdWRlIDxwbGF0L3M1cDY0NDAuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3BsbC5oPgorCisjZGVmaW5lIFM1UDY0NDBfVUNPTl9ERUZBVUxUICAgIChTM0MyNDEwX1VDT05fVFhJTEVWRUwgfAlcCisJCQkJUzNDMjQxMF9VQ09OX1JYSUxFVkVMIHwJCVwKKwkJCQlTM0MyNDEwX1VDT05fVFhJUlFNT0RFIHwJXAorCQkJCVMzQzI0MTBfVUNPTl9SWElSUU1PREUgfAlcCisJCQkJUzNDMjQxMF9VQ09OX1JYRklGT19UT0kgfAlcCisJCQkJUzNDMjQ0M19VQ09OX1JYRVJSX0lSUUVOKQorCisjZGVmaW5lIFM1UDY0NDBfVUxDT05fREVGQVVMVAlTM0MyNDEwX0xDT05fQ1M4CisKKyNkZWZpbmUgUzVQNjQ0MF9VRkNPTl9ERUZBVUxUICAgKFMzQzI0MTBfVUZDT05fRklGT01PREUgfAlcCisJCQkJUzNDMjQ0MF9VRkNPTl9UWFRSSUcxNiB8CVwKKwkJCQlTM0MyNDEwX1VGQ09OX1JYVFJJRzgpCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIHNtZGs2NDQwX3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJICAgICA9IDAsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFM1UDY0NDBfVUNPTl9ERUZBVUxULAorCQkudWxjb24JICAgICA9IFM1UDY0NDBfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCSAgICAgPSBTNVA2NDQwX1VGQ09OX0RFRkFVTFQsCisJfSwKKwlbMV0gPSB7CisJCS5od3BvcnQJICAgICA9IDEsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFM1UDY0NDBfVUNPTl9ERUZBVUxULAorCQkudWxjb24JICAgICA9IFM1UDY0NDBfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCSAgICAgPSBTNVA2NDQwX1VGQ09OX0RFRkFVTFQsCisJfSwKKwlbMl0gPSB7CisJCS5od3BvcnQJICAgICA9IDIsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFM1UDY0NDBfVUNPTl9ERUZBVUxULAorCQkudWxjb24JICAgICA9IFM1UDY0NDBfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCSAgICAgPSBTNVA2NDQwX1VGQ09OX0RFRkFVTFQsCisJfSwKKwlbM10gPSB7CisJCS5od3BvcnQJICAgICA9IDMsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFM1UDY0NDBfVUNPTl9ERUZBVUxULAorCQkudWxjb24JICAgICA9IFM1UDY0NDBfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCSAgICAgPSBTNVA2NDQwX1VGQ09OX0RFRkFVTFQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzbWRrNjQ0MF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzbWRrNjQ0MF9tYXBfaW8odm9pZCkKK3sKKwlzNXBfaW5pdF9pbyhOVUxMLCAwLCBTNVBfU1lTX0lEKTsKKwlzM2MyNHh4X2luaXRfY2xvY2tzKDEyMDAwMDAwKTsKKwlzM2MyNHh4X2luaXRfdWFydHMoc21kazY0NDBfdWFydGNmZ3MsIEFSUkFZX1NJWkUoc21kazY0NDBfdWFydGNmZ3MpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHNtZGs2NDQwX21hY2hpbmVfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNtZGs2NDQwX2RldmljZXMsIEFSUkFZX1NJWkUoc21kazY0NDBfZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKFNNREs2NDQwLCAiU01ESzY0NDAiKQorCS8qIE1haW50YWluZXI6IEt1a2ppbiBLaW0gPGtnZW5lLmtpbUBzYW1zdW5nLmNvbT4gKi8KKwkucGh5c19pbwk9IFMzQ19QQV9VQVJUICYgMHhmZmYwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKCh1MzIpUzNDX1ZBX1VBUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBTNVBfUEFfU0RSQU0gKyAweDEwMCwKKworCS5pbml0X2lycQk9IHM1cDY0NDBfaW5pdF9pcnEsCisJLm1hcF9pbwkJPSBzbWRrNjQ0MF9tYXBfaW8sCisJLmluaXRfbWFjaGluZQk9IHNtZGs2NDQwX21hY2hpbmVfaW5pdCwKKwkudGltZXIJCT0gJnMzYzI0eHhfdGltZXIsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjNmNmRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL0tjb25maWcKQEAgLTAsMCArMSwyNCBAQAorIyBhcmNoL2FybS9tYWNoLXM1cDY0NDIvS2NvbmZpZworIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyMJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisjCisjIExpY2Vuc2VkIHVuZGVyIEdQTHYyCisKKyMgQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgUzVQNjQ0MgorCitpZiBBUkNIX1M1UDY0NDIKKworY29uZmlnIENQVV9TNVA2NDQyCisJYm9vbAorCXNlbGVjdCBQTEFUX1M1UAorCWhlbHAKKwkgIEVuYWJsZSBTNVA2NDQyIENQVSBzdXBwb3J0CisKK2NvbmZpZyBNQUNIX1NNREs2NDQyCisJYm9vbCAiU01ESzY0NDIiCisJc2VsZWN0IENQVV9TNVA2NDQyCisJaGVscAorCSAgTWFjaGluZSBzdXBwb3J0IGZvciBTYW1zdW5nIFNNREs2NDQyCisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0NDIvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlMzlhNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9NYWtlZmlsZQpAQCAtMCwwICsxLDE5IEBACisjIGFyY2gvYXJtL21hY2gtczVwNjQ0Mi9NYWtlZmlsZQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyMgCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworIworIyBMaWNlbnNlZCB1bmRlciBHUEx2MgorCitvYmoteQkJCQk6PQorb2JqLW0JCQkJOj0KK29iai1uCQkJCTo9CitvYmotCQkJCTo9CisKKyMgQ29yZSBzdXBwb3J0IGZvciBTNVA2NDQyIHN5c3RlbQorCitvYmotJChDT05GSUdfQ1BVX1M1UDY0NDIpCSs9IGNwdS5vIGluaXQubyBjbG9jay5vCisKKyMgbWFjaGluZSBzdXBwb3J0CisKK29iai0kKENPTkZJR19NQUNIX1NNREs2NDQyKQkrPSBtYWNoLXNtZGs2NDQyLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY5MGFhMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsMiBAQAorICAgenJlbGFkZHIteQk6PSAweDIwMDA4MDAwCitwYXJhbXNfcGh5cy15CTo9IDB4MjAwMDAxMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FhZGJmNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9jbG9jay5jCkBAIC0wLDAgKzEsMzk2IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cDY0NDIvY2xvY2suYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQNjQ0MiAtIENsb2NrIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9wbGwuaD4KKyNpbmNsdWRlIDxwbGF0L3M1cC1jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2stY2xrc3JjLmg+CisjaW5jbHVkZSA8cGxhdC9zNXA2NDQyLmg+CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfbW91dF9hcGxsID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJtb3V0X2FwbGwiLAorCQkuaWQJCT0gLTEsCisJfSwKKwkuc291cmNlcwk9ICZjbGtfc3JjX2FwbGwsCisJLnJlZ19zcmMJPSB7IC5yZWcgPSBTNVBfQ0xLX1NSQzAsIC5zaGlmdCA9IDAsIC5zaXplID0gMSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tb3V0X21wbGwgPSB7CisJLmNsayA9IHsKKwkJLm5hbWUJCT0gIm1vdXRfbXBsbCIsCisJCS5pZAkJPSAtMSwKKwl9LAorCS5zb3VyY2VzCT0gJmNsa19zcmNfbXBsbCwKKwkucmVnX3NyYwk9IHsgLnJlZyA9IFM1UF9DTEtfU1JDMCwgLnNoaWZ0ID0gNCwgLnNpemUgPSAxIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX21vdXRfZXBsbCA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAibW91dF9lcGxsIiwKKwkJLmlkCQk9IC0xLAorCX0sCisJLnNvdXJjZXMJPSAmY2xrX3NyY19lcGxsLAorCS5yZWdfc3JjCT0geyAucmVnID0gUzVQX0NMS19TUkMwLCAuc2hpZnQgPSA4LCAuc2l6ZSA9IDEgfSwKK307CisKKy8qIFBvc3NpYmxlIGNsb2NrIHNvdXJjZXMgZm9yIEFSTSBNdXggKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfc3JjX2FybV9saXN0W10gPSB7CisJWzFdID0gJmNsa19tb3V0X2FwbGwuY2xrLAorCVsyXSA9ICZjbGtfbW91dF9tcGxsLmNsaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMgY2xrX3NyY19hcm0gPSB7CisJLnNvdXJjZXMJPSBjbGtfc3JjX2FybV9saXN0LAorCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtfc3JjX2FybV9saXN0KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfbW91dF9hcm0gPSB7CisJLmNsawk9IHsKKwkJLm5hbWUJCT0gIm1vdXRfYXJtIiwKKwkJLmlkCQk9IC0xLAorCX0sCisJLnNvdXJjZXMJPSAmY2xrX3NyY19hcm0sCisJLnJlZ19zcmMJPSB7IC5yZWcgPSBTNVBfQ0xLX01VWF9TVEFUMCwgLnNoaWZ0ID0gMTYsIC5zaXplID0gMyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2RvdXRfYTJtID0geworCS5uYW1lCQk9ICJkb3V0X2EybSIsCisJLmlkCQk9IC0xLAorCS5wYXJlbnQJCT0gJmNsa19tb3V0X2FwbGwuY2xrLAorfTsKKworLyogUG9zc2libGUgY2xvY2sgc291cmNlcyBmb3IgRDAgTXV4ICovCitzdGF0aWMgc3RydWN0IGNsayAqY2xrX3NyY19kMF9saXN0W10gPSB7CisJWzFdID0gJmNsa19tb3V0X21wbGwuY2xrLAorCVsyXSA9ICZjbGtfZG91dF9hMm0sCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19zb3VyY2VzIGNsa19zcmNfZDAgPSB7CisJLnNvdXJjZXMJPSBjbGtfc3JjX2QwX2xpc3QsCisJLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa19zcmNfZDBfbGlzdCksCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX21vdXRfZDAgPSB7CisJLmNsayA9IHsKKwkJLm5hbWUJCT0gIm1vdXRfZDAiLAorCQkuaWQJCT0gLTEsCisJfSwKKwkuc291cmNlcwk9ICZjbGtfc3JjX2QwLAorCS5yZWdfc3JjCT0geyAucmVnID0gUzVQX0NMS19NVVhfU1RBVDAsIC5zaGlmdCA9IDIwLCAuc2l6ZSA9IDMgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19kb3V0X2FwbGwgPSB7CisJLm5hbWUJCT0gImRvdXRfYXBsbCIsCisJLmlkCQk9IC0xLAorCS5wYXJlbnQJCT0gJmNsa19tb3V0X2FybS5jbGssCit9OworCisvKiBQb3NzaWJsZSBjbG9jayBzb3VyY2VzIGZvciBEMFNZTkMgTXV4ICovCitzdGF0aWMgc3RydWN0IGNsayAqY2xrX3NyY19kMHN5bmNfbGlzdFtdID0geworCVsxXSA9ICZjbGtfbW91dF9kMC5jbGssCisJWzJdID0gJmNsa19kb3V0X2FwbGwsCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19zb3VyY2VzIGNsa19zcmNfZDBzeW5jID0geworCS5zb3VyY2VzCT0gY2xrX3NyY19kMHN5bmNfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrX3NyY19kMHN5bmNfbGlzdCksCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX21vdXRfZDBzeW5jID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJtb3V0X2Qwc3luYyIsCisJCS5pZAkJPSAtMSwKKwl9LAorCS5zb3VyY2VzCT0gJmNsa19zcmNfZDBzeW5jLAorCS5yZWdfc3JjCT0geyAucmVnID0gUzVQX0NMS19NVVhfU1RBVDEsIC5zaGlmdCA9IDI4LCAuc2l6ZSA9IDMgfSwKK307CisKKy8qIFBvc3NpYmxlIGNsb2NrIHNvdXJjZXMgZm9yIEQxIE11eCAqLworc3RhdGljIHN0cnVjdCBjbGsgKmNsa19zcmNfZDFfbGlzdFtdID0geworCVsxXSA9ICZjbGtfbW91dF9tcGxsLmNsaywKKwlbMl0gPSAmY2xrX2RvdXRfYTJtLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfc291cmNlcyBjbGtfc3JjX2QxID0geworCS5zb3VyY2VzCT0gY2xrX3NyY19kMV9saXN0LAorCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtfc3JjX2QxX2xpc3QpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tb3V0X2QxID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJtb3V0X2QxIiwKKwkJLmlkCQk9IC0xLAorCX0sCisJLnNvdXJjZXMJPSAmY2xrX3NyY19kMSwKKwkucmVnX3NyYwk9IHsgLnJlZyA9IFM1UF9DTEtfTVVYX1NUQVQwLCAuc2hpZnQgPSAyNCwgLnNpemUgPSAzIH0sCit9OworCisvKiBQb3NzaWJsZSBjbG9jayBzb3VyY2VzIGZvciBEMVNZTkMgTXV4ICovCitzdGF0aWMgc3RydWN0IGNsayAqY2xrX3NyY19kMXN5bmNfbGlzdFtdID0geworCVsxXSA9ICZjbGtfbW91dF9kMS5jbGssCisJWzJdID0gJmNsa19kb3V0X2FwbGwsCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19zb3VyY2VzIGNsa19zcmNfZDFzeW5jID0geworCS5zb3VyY2VzCT0gY2xrX3NyY19kMXN5bmNfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrX3NyY19kMXN5bmNfbGlzdCksCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX21vdXRfZDFzeW5jID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJtb3V0X2Qxc3luYyIsCisJCS5pZAkJPSAtMSwKKwl9LAorCS5zb3VyY2VzCT0gJmNsa19zcmNfZDFzeW5jLAorCS5yZWdfc3JjCT0geyAucmVnID0gUzVQX0NMS19NVVhfU1RBVDEsIC5zaGlmdCA9IDI0LCAuc2l6ZSA9IDMgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19oY2xrZDAgPSB7CisJLm5hbWUJCT0gImhjbGtkMCIsCisJLmlkCQk9IC0xLAorCS5wYXJlbnQJCT0gJmNsa19tb3V0X2Qwc3luYy5jbGssCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjbGtfaGNsa2QxID0geworCS5uYW1lCQk9ICJoY2xrZDEiLAorCS5pZAkJPSAtMSwKKwkucGFyZW50CQk9ICZjbGtfbW91dF9kMXN5bmMuY2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX3BjbGtkMCA9IHsKKwkubmFtZQkJPSAicGNsa2QwIiwKKwkuaWQJCT0gLTEsCisJLnBhcmVudAkJPSAmY2xrX2hjbGtkMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wY2xrZDEgPSB7CisJLm5hbWUJCT0gInBjbGtkMSIsCisJLmlkCQk9IC0xLAorCS5wYXJlbnQJCT0gJmNsa19oY2xrZDEsCit9OworCitpbnQgczVwNjQ0Ml9jbGtfaXAzX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQoreworCXJldHVybiBzNXBfZ2F0ZWN0cmwoUzVQX0NMS0dBVEVfSVAzLCBjbGssIGVuYWJsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtzcmNzW10gPSB7CisJeworCQkuY2xrCT0geworCQkJLm5hbWUJCT0gImRvdXRfYTJtIiwKKwkJCS5pZAkJPSAtMSwKKwkJCS5wYXJlbnQJCT0gJmNsa19tb3V0X2FwbGwuY2xrLAorCQl9LAorCQkuc291cmNlcyA9ICZjbGtfc3JjX2FwbGwsCisJCS5yZWdfc3JjID0geyAucmVnID0gUzVQX0NMS19TUkMwLCAuc2hpZnQgPSAwLCAuc2l6ZSA9IDEgfSwKKwkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTNVBfQ0xLX0RJVjAsIC5zaGlmdCA9IDQsIC5zaXplID0gMyB9LAorCX0sIHsKKwkJLmNsawk9IHsKKwkJCS5uYW1lCQk9ICJkb3V0X2FwbGwiLAorCQkJLmlkCQk9IC0xLAorCQkJLnBhcmVudAkJPSAmY2xrX21vdXRfYXJtLmNsaywKKwkJfSwKKwkJLnNvdXJjZXMgPSAmY2xrX3NyY19hcm0sCisJCS5yZWdfc3JjID0geyAucmVnID0gUzVQX0NMS19NVVhfU1RBVDAsIC5zaGlmdCA9IDE2LCAuc2l6ZSA9IDMgfSwKKwkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTNVBfQ0xLX0RJVjAsIC5zaGlmdCA9IDAsIC5zaXplID0gMyB9LAorCX0sIHsKKwkJLmNsawk9IHsKKwkJCS5uYW1lCQk9ICJoY2xrZDEiLAorCQkJLmlkCQk9IC0xLAorCQkJLnBhcmVudAkJPSAmY2xrX21vdXRfZDFzeW5jLmNsaywKKwkJfSwKKwkJLnNvdXJjZXMgPSAmY2xrX3NyY19kMXN5bmMsCisJCS5yZWdfc3JjID0geyAucmVnID0gUzVQX0NMS19NVVhfU1RBVDEsIC5zaGlmdCA9IDI0LCAuc2l6ZSA9IDMgfSwKKwkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTNVBfQ0xLX0RJVjAsIC5zaGlmdCA9IDI0LCAuc2l6ZSA9IDQgfSwKKwl9LCB7CisJCS5jbGsJPSB7CisJCQkubmFtZQkJPSAiaGNsa2QwIiwKKwkJCS5pZAkJPSAtMSwKKwkJCS5wYXJlbnQJCT0gJmNsa19tb3V0X2Qwc3luYy5jbGssCisJCX0sCisJCS5zb3VyY2VzID0gJmNsa19zcmNfZDBzeW5jLAorCQkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UF9DTEtfTVVYX1NUQVQxLCAuc2hpZnQgPSAyOCwgLnNpemUgPSAzIH0sCisJCS5yZWdfZGl2ID0geyAucmVnID0gUzVQX0NMS19ESVYwLCAuc2hpZnQgPSAxNiwgLnNpemUgPSA0IH0sCisJfSwgeworCQkuY2xrCT0geworCQkJLm5hbWUJCT0gInBjbGtkMCIsCisJCQkuaWQJCT0gLTEsCisJCQkucGFyZW50CQk9ICZjbGtfaGNsa2QwLAorCQl9LAorCQkuc291cmNlcyA9ICZjbGtfc3JjX2Qwc3luYywKKwkJLnJlZ19zcmMgPSB7IC5yZWcgPSBTNVBfQ0xLX01VWF9TVEFUMSwgLnNoaWZ0ID0gMjgsIC5zaXplID0gMyB9LAorCQkucmVnX2RpdiA9IHsgLnJlZyA9IFM1UF9DTEtfRElWMCwgLnNoaWZ0ID0gMjAsIC5zaXplID0gMyB9LAorCX0sIHsKKwkJLmNsawk9IHsKKwkJCS5uYW1lCQk9ICJwY2xrZDEiLAorCQkJLmlkCQk9IC0xLAorCQkJLnBhcmVudAkJPSAmY2xrX2hjbGtkMSwKKwkJfSwKKwkJLnNvdXJjZXMgPSAmY2xrX3NyY19kMXN5bmMsCisJCS5yZWdfc3JjID0geyAucmVnID0gUzVQX0NMS19NVVhfU1RBVDEsIC5zaGlmdCA9IDI0LCAuc2l6ZSA9IDMgfSwKKwkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTNVBfQ0xLX0RJVjAsIC5zaGlmdCA9IDI4LCAuc2l6ZSA9IDMgfSwKKwl9Cit9OworCisvKiBDbG9jayBpbml0aWFsaXNhdGlvbiBjb2RlICovCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgKmluaXRfcGFyZW50c1tdID0geworCSZjbGtfbW91dF9hcGxsLAorCSZjbGtfbW91dF9tcGxsLAorCSZjbGtfbW91dF9lcGxsLAorCSZjbGtfbW91dF9hcm0sCisJJmNsa19tb3V0X2QwLAorCSZjbGtfbW91dF9kMHN5bmMsCisJJmNsa19tb3V0X2QxLAorCSZjbGtfbW91dF9kMXN5bmMsCit9OworCit2b2lkIF9faW5pdF9vcl9jcHVmcmVxIHM1cDY0NDJfc2V0dXBfY2xvY2tzKHZvaWQpCit7CisJc3RydWN0IGNsayAqcGNsa2QwX2NsazsKKwlzdHJ1Y3QgY2xrICpwY2xrZDFfY2xrOworCisJdW5zaWduZWQgbG9uZyB4dGFsOworCXVuc2lnbmVkIGxvbmcgYXJtOworCXVuc2lnbmVkIGxvbmcgaGNsa2QwID0gMDsKKwl1bnNpZ25lZCBsb25nIGhjbGtkMSA9IDA7CisJdW5zaWduZWQgbG9uZyBwY2xrZDAgPSAwOworCXVuc2lnbmVkIGxvbmcgcGNsa2QxID0gMDsKKworCXVuc2lnbmVkIGxvbmcgYXBsbDsKKwl1bnNpZ25lZCBsb25nIG1wbGw7CisJdW5zaWduZWQgbG9uZyBlcGxsOworCXVuc2lnbmVkIGludCBwdHI7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlZ2lzdGVyaW5nIGNsb2Nrc1xuIiwgX19mdW5jX18pOworCisJeHRhbCA9IGNsa19nZXRfcmF0ZSgmY2xrX3h0YWwpOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB4dGFsIGlzICVsZFxuIiwgX19mdW5jX18sIHh0YWwpOworCisJYXBsbCA9IHM1cF9nZXRfcGxsNDV4eCh4dGFsLCBfX3Jhd19yZWFkbChTNVBfQVBMTF9DT04pLCBwbGxfNDUwOCk7CisJbXBsbCA9IHM1cF9nZXRfcGxsNDV4eCh4dGFsLCBfX3Jhd19yZWFkbChTNVBfTVBMTF9DT04pLCBwbGxfNDUwMik7CisJZXBsbCA9IHM1cF9nZXRfcGxsNDV4eCh4dGFsLCBfX3Jhd19yZWFkbChTNVBfRVBMTF9DT04pLCBwbGxfNDUwMCk7CisKKwlwcmludGsoS0VSTl9JTkZPICJTNVA2NDQwOiBQTEwgc2V0dGluZ3MsIEE9JWxkLCBNPSVsZCwgRT0lbGQiLAorCQkJYXBsbCwgbXBsbCwgZXBsbCk7CisKKwljbGtfZm91dF9hcGxsLnJhdGUgPSBhcGxsOworCWNsa19mb3V0X21wbGwucmF0ZSA9IG1wbGw7CisJY2xrX2ZvdXRfZXBsbC5yYXRlID0gZXBsbDsKKworCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShpbml0X3BhcmVudHMpOyBwdHIrKykKKwkJczNjX3NldF9jbGtzcmMoaW5pdF9wYXJlbnRzW3B0cl0sIHRydWUpOworCisJZm9yIChwdHIgPSAwOyBwdHIgPCBBUlJBWV9TSVpFKGNsa3NyY3MpOyBwdHIrKykKKwkJczNjX3NldF9jbGtzcmMoJmNsa3NyY3NbcHRyXSwgdHJ1ZSk7CisKKwlhcm0gPSBjbGtfZ2V0X3JhdGUoJmNsa19kb3V0X2FwbGwpOworCWhjbGtkMCA9IGNsa19nZXRfcmF0ZSgmY2xrX2hjbGtkMCk7CisJaGNsa2QxID0gY2xrX2dldF9yYXRlKCZjbGtfaGNsa2QxKTsKKworCXBjbGtkMF9jbGsgPSBjbGtfZ2V0KE5VTEwsICJwY2xrZDAiKTsKKwlCVUdfT04oSVNfRVJSKHBjbGtkMF9jbGspKTsKKworCXBjbGtkMCA9IGNsa19nZXRfcmF0ZShwY2xrZDBfY2xrKTsKKwljbGtfcHV0KHBjbGtkMF9jbGspOworCisJcGNsa2QxX2NsayA9IGNsa19nZXQoTlVMTCwgInBjbGtkMSIpOworCUJVR19PTihJU19FUlIocGNsa2QxX2NsaykpOworCisJcGNsa2QxID0gY2xrX2dldF9yYXRlKHBjbGtkMV9jbGspOworCWNsa19wdXQocGNsa2QxX2Nsayk7CisKKwlwcmludGsoS0VSTl9JTkZPICJTNVA2NDQyOiBIQ0xLRDA9JWxkLCBIQ0xLRDE9JWxkLCBQQ0xLRDA9JWxkLCBQQ0xLRDE9JWxkXG4iLAorCQkJaGNsa2QwLCBoY2xrZDEsIHBjbGtkMCwgcGNsa2QxKTsKKworCS8qIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisJY2xrX2YucmF0ZSA9IGFybTsKKwljbGtfaC5yYXRlID0gaGNsa2QxOworCWNsa19wLnJhdGUgPSBwY2xrZDE7CisKKwljbGtfcGNsa2QwLnJhdGUgPSBwY2xrZDA7CisJY2xrX3BjbGtkMS5yYXRlID0gcGNsa2QxOworfQorCitzdGF0aWMgc3RydWN0IGNsayBpbml0X2Nsb2Nrc1tdID0geworCXsKKwkJLm5hbWUJCT0gInN5c3RpbWVyIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcGNsa2QxLAorCQkuZW5hYmxlCQk9IHM1cDY0NDJfY2xrX2lwM19jdHJsLAorCQkuY3RybGJpdAk9ICgxPDwxNiksCisJfSwgeworCQkubmFtZQkJPSAidWFydCIsCisJCS5pZAkJPSAwLAorCQkucGFyZW50CQk9ICZjbGtfcGNsa2QxLAorCQkuZW5hYmxlCQk9IHM1cDY0NDJfY2xrX2lwM19jdHJsLAorCQkuY3RybGJpdAk9ICgxPDwxNyksCisJfSwgeworCQkubmFtZQkJPSAidWFydCIsCisJCS5pZAkJPSAxLAorCQkucGFyZW50CQk9ICZjbGtfcGNsa2QxLAorCQkuZW5hYmxlCQk9IHM1cDY0NDJfY2xrX2lwM19jdHJsLAorCQkuY3RybGJpdAk9ICgxPDwxOCksCisJfSwgeworCQkubmFtZQkJPSAidWFydCIsCisJCS5pZAkJPSAyLAorCQkucGFyZW50CQk9ICZjbGtfcGNsa2QxLAorCQkuZW5hYmxlCQk9IHM1cDY0NDJfY2xrX2lwM19jdHJsLAorCQkuY3RybGJpdAk9ICgxPDwxOSksCisJfSwgeworCQkubmFtZQkJPSAidGltZXJzIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcGNsa2QxLAorCQkuZW5hYmxlCQk9IHM1cDY0NDJfY2xrX2lwM19jdHJsLAorCQkuY3RybGJpdAk9ICgxPDwyMyksCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzW10gX19pbml0ZGF0YSA9IHsKKwkmY2xrX2V4dCwKKwkmY2xrX2VwbGwsCisJJmNsa19tb3V0X2FwbGwuY2xrLAorCSZjbGtfbW91dF9tcGxsLmNsaywKKwkmY2xrX21vdXRfZXBsbC5jbGssCisJJmNsa19tb3V0X2QwLmNsaywKKwkmY2xrX21vdXRfZDBzeW5jLmNsaywKKwkmY2xrX21vdXRfZDEuY2xrLAorCSZjbGtfbW91dF9kMXN5bmMuY2xrLAorCSZjbGtfaGNsa2QwLAorCSZjbGtfcGNsa2QwLAorCSZjbGtfaGNsa2QxLAorCSZjbGtfcGNsa2QxLAorfTsKKwordm9pZCBfX2luaXQgczVwNjQ0Ml9yZWdpc3Rlcl9jbG9ja3Modm9pZCkKK3sKKwlzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrcyhjbGtzLCBBUlJBWV9TSVpFKGNsa3MpKTsKKworCXMzY19yZWdpc3Rlcl9jbGtzcmMoY2xrc3JjcywgQVJSQVlfU0laRShjbGtzcmNzKSk7CisJczNjX3JlZ2lzdGVyX2Nsb2Nrcyhpbml0X2Nsb2NrcywgQVJSQVlfU0laRShpbml0X2Nsb2NrcykpOworCisJczNjX3B3bWNsa19pbml0KCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0NDIvY3B1LmMgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvY3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMyNTI0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9jcHUuYwpAQCAtMCwwICsxLDEyMSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2NwdS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9wcm9jLWZucy5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9zNXA2NDQyLmg+CisKKy8qIEluaXRpYWwgSU8gbWFwcGluZ3MgKi8KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzNXA2NDQyX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UF9WQV9TWVNUSU1FUiwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFM1UDY0NDJfUEFfU1lTVElNRVIpLAorCQkubGVuZ3RoCQk9IFNaXzE2SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylWQV9WSUMyLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzVQNjQ0Ml9QQV9WSUMyKSwKKwkJLmxlbmd0aAkJPSBTWl8xNkssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9Cit9OworCitzdGF0aWMgdm9pZCBzNXA2NDQyX2lkbGUodm9pZCkKK3sKKwlpZiAoIW5lZWRfcmVzY2hlZCgpKQorCQljcHVfZG9faWRsZSgpOworCisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCisvKiBzNXA2NDQyX21hcF9pbworICoKKyAqIHJlZ2lzdGVyIHRoZSBzdGFuZGFyZCBjcHUgSU8gYXJlYXMKKyovCisKK3ZvaWQgX19pbml0IHM1cDY0NDJfbWFwX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KHM1cDY0NDJfaW9kZXNjLCBBUlJBWV9TSVpFKHM1cDY0NDJfaW9kZXNjKSk7Cit9CisKK3ZvaWQgX19pbml0IHM1cDY0NDJfaW5pdF9jbG9ja3MoaW50IHh0YWwpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbml0aWFsaXppbmcgY2xvY2tzXG4iLCBfX2Z1bmNfXyk7CisKKwlzM2MyNHh4X3JlZ2lzdGVyX2Jhc2VjbG9ja3MoeHRhbCk7CisJczVwX3JlZ2lzdGVyX2Nsb2Nrcyh4dGFsKTsKKwlzNXA2NDQyX3JlZ2lzdGVyX2Nsb2NrcygpOworCXM1cDY0NDJfc2V0dXBfY2xvY2tzKCk7Cit9CisKK3ZvaWQgX19pbml0IHM1cDY0NDJfaW5pdF9pcnEodm9pZCkKK3sKKwkvKiBTNVA2NDQyIHN1cHBvcnRzIDMgVklDICovCisJdTMyIHZpY1szXTsKKworCS8qIFZJQzAsIFZJQzEsIGFuZCBWSUMyOiBzb21lIGludGVycnVwdCByZXNlcnZlZCAqLworCXZpY1swXSA9IDB4N2ZlZmZmZmY7CisJdmljWzFdID0gMFg3ZjM4OWM4MTsKKwl2aWNbMl0gPSAwWDFiYmJjZmZmOworCisJczVwX2luaXRfaXJxKHZpYywgQVJSQVlfU0laRSh2aWMpKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgczVwNjQ0Ml9zeXNjbGFzcyA9IHsKKwkubmFtZQk9ICJzNXA2NDQyLWNvcmUiLAorfTsKKworc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIHM1cDY0NDJfc3lzZGV2ID0geworCS5jbHMJPSAmczVwNjQ0Ml9zeXNjbGFzcywKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHM1cDY0NDJfY29yZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9jbGFzc19yZWdpc3RlcigmczVwNjQ0Ml9zeXNjbGFzcyk7Cit9CisKK2NvcmVfaW5pdGNhbGwoczVwNjQ0Ml9jb3JlX2luaXQpOworCitpbnQgX19pbml0IHM1cDY0NDJfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIlM1UDY0NDI6IEluaXRpYWxpemluZyBhcmNoaXRlY3R1cmVcbiIpOworCisJLyogc2V0IGlkbGUgZnVuY3Rpb24gKi8KKwlwbV9pZGxlID0gczVwNjQ0Ml9pZGxlOworCisJcmV0dXJuIHN5c2Rldl9yZWdpc3RlcigmczVwNjQ0Ml9zeXNkZXYpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYWU2OTEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKQEAgLTAsMCArMSwzNiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworLyogcHVsbCBpbiB0aGUgcmVsZXZhbnQgcmVnaXN0ZXIgYW5kIG1hcCBmaWxlcy4gKi8KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorCisJLm1hY3JvIGFkZHJ1YXJ0LCByeAorCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAorCQl0c3QJXHJ4LCAjMQorCQlsZHJlcQlccngsID0gUzNDX1BBX1VBUlQKKwkJbGRybmUJXHJ4LCA9IFMzQ19WQV9VQVJUCisjaWYgQ09ORklHX0RFQlVHX1MzQ19VQVJUICE9IDAKKwkJYWRkCVxyeCwgXHJ4LCAjKDB4NDAwICogQ09ORklHX0RFQlVHX1MzQ19VQVJUKQorI2VuZGlmCisJLmVuZG0KKworI2RlZmluZSBmaWZvX2Z1bGwgZmlmb19mdWxsX3M1cHYyMTAKKyNkZWZpbmUgZmlmb19sZXZlbCBmaWZvX2xldmVsX3M1cHYyMTAKKworLyogaW5jbHVkZSB0aGUgcmVzZXQgb2YgdGhlIGNvZGUgd2hpY2ggd2lsbCBkbyB0aGUgd29yaywgd2UncmUgb25seQorICogY29tcGlsaW5nIGZvciBhIHNpbmdsZSBjcHUgcHJvY2Vzc29yIHR5cGUgc28gdGhlIGRlZmF1bHQgb2YgczNjMjQ0MAorICogd2lsbCBiZSBmaW5lIHdpdGggdXMuCisgKi8KKworI2luY2x1ZGUgPHBsYXQvZGVidWctbWFjcm8uUz4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZDU3NGVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsNDggQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogTG93LWxldmVsIElSUSBoZWxwZXIgbWFjcm9zIGZvciB0aGUgU2Ftc3VuZyBTNVA2NDQyCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxwbGF0L2lycXMuaD4KKworCS5tYWNybwlkaXNhYmxlX2ZpcQorCS5lbmRtCisKKwkubWFjcm8JZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwlsZHIJXGJhc2UsID1WQV9WSUMwCisJLmVuZG0KKworCS5tYWNybwlhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJLmVuZG0KKworCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKworCUAgY2hlY2sgdGhlIHZpYzAKKwltb3YJXGlycW5yLCAjIFM1UF9JUlFfT0ZGU0VUICsgMzEKKwlsZHIJXGlycXN0YXQsIFsgXGJhc2UsICMgVklDX0lSUV9TVEFUVVMgXQorCXRlcQlcaXJxc3RhdCwgIzAKKworCUAgb3RoZXJ3aXNlIHRyeSB2aWMxCisJYWRkZXEJXHRtcCwgXGJhc2UsICMoVkFfVklDMSAtIFZBX1ZJQzApCisJYWRkZXEJXGlycW5yLCBcaXJxbnIsICMzMgorCWxkcmVxCVxpcnFzdGF0LCBbIFx0bXAsICMgVklDX0lSUV9TVEFUVVMgXQorCXRlcWVxCVxpcnFzdGF0LCAjMAorCisJQCBvdGhlcndpc2UgdHJ5IHZpYzIKKwlhZGRlcQlcdG1wLCBcYmFzZSwgIyhWQV9WSUMyIC0gVkFfVklDMCkKKwlhZGRlcQlcaXJxbnIsIFxpcnFuciwgIzMyCisJbGRyZXEJXGlycXN0YXQsIFsgXHRtcCwgIyBWSUNfSVJRX1NUQVRVUyBdCisJdGVxZXEJXGlycXN0YXQsICMwCisKKwljbHpuZQlcaXJxc3RhdCwgXGlycXN0YXQKKwlzdWJuZQlcaXJxbnIsIFxpcnFuciwgXGlycXN0YXQKKwkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODcxNWRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9ncGlvLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvZ3Bpby5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTNVA2NDQyIC0gR1BJTyBsaWIgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfR1BJT19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfR1BJT19IIF9fRklMRV9fCisKKyNkZWZpbmUgZ3Bpb19nZXRfdmFsdWUJX19ncGlvX2dldF92YWx1ZQorI2RlZmluZSBncGlvX3NldF92YWx1ZQlfX2dwaW9fc2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fY2Fuc2xlZXAJX19ncGlvX2NhbnNsZWVwCisjZGVmaW5lIGdwaW9fdG9faXJxCV9fZ3Bpb190b19pcnEKKworLyogR1BJTyBiYW5rIHNpemVzICovCisjZGVmaW5lIFM1UDY0NDJfR1BJT19BMF9OUgkoOCkKKyNkZWZpbmUgUzVQNjQ0Ml9HUElPX0ExX05SCSgyKQorI2RlZmluZSBTNVA2NDQyX0dQSU9fQl9OUgkoNCkKKyNkZWZpbmUgUzVQNjQ0Ml9HUElPX0MwX05SCSg1KQorI2RlZmluZSBTNVA2NDQyX0dQSU9fQzFfTlIJKDUpCisjZGVmaW5lIFM1UDY0NDJfR1BJT19EMF9OUgkoMikKKyNkZWZpbmUgUzVQNjQ0Ml9HUElPX0QxX05SCSg2KQorI2RlZmluZSBTNVA2NDQyX0dQSU9fRTBfTlIJKDgpCisjZGVmaW5lIFM1UDY0NDJfR1BJT19FMV9OUgkoNSkKKyNkZWZpbmUgUzVQNjQ0Ml9HUElPX0YwX05SCSg4KQorI2RlZmluZSBTNVA2NDQyX0dQSU9fRjFfTlIJKDgpCisjZGVmaW5lIFM1UDY0NDJfR1BJT19GMl9OUgkoOCkKKyNkZWZpbmUgUzVQNjQ0Ml9HUElPX0YzX05SCSg2KQorI2RlZmluZSBTNVA2NDQyX0dQSU9fRzBfTlIJKDcpCisjZGVmaW5lIFM1UDY0NDJfR1BJT19HMV9OUgkoNykKKyNkZWZpbmUgUzVQNjQ0Ml9HUElPX0cyX05SCSg3KQorI2RlZmluZSBTNVA2NDQyX0dQSU9fSDBfTlIJKDgpCisjZGVmaW5lIFM1UDY0NDJfR1BJT19IMV9OUgkoOCkKKyNkZWZpbmUgUzVQNjQ0Ml9HUElPX0gyX05SCSg4KQorI2RlZmluZSBTNVA2NDQyX0dQSU9fSDNfTlIJKDgpCisjZGVmaW5lIFM1UDY0NDJfR1BJT19KMF9OUgkoOCkKKyNkZWZpbmUgUzVQNjQ0Ml9HUElPX0oxX05SCSg2KQorI2RlZmluZSBTNVA2NDQyX0dQSU9fSjJfTlIJKDgpCisjZGVmaW5lIFM1UDY0NDJfR1BJT19KM19OUgkoOCkKKyNkZWZpbmUgUzVQNjQ0Ml9HUElPX0o0X05SCSg1KQorCisvKiBHUElPIGJhbmsgbnVtYmVycyAqLworCisvKiBDT05GSUdfUzNDX0dQSU9fU1BBQ0UgYWxsb3dzIHRoZSB1c2VyIHRvIHNlbGVjdCBleHRyYQorICogc3BhY2UgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyBzbyB0aGF0IGFueSBhY2NpZGVudGFsCisgKiBjaGFuZ2UgZnJvbSBvbmUgZ3BpbyBiYW5rIHRvIGFub3RoZXIgY2FuIGJlIGNhdWdodC4KKyovCisKKyNkZWZpbmUgUzVQNjQ0Ml9HUElPX05FWFQoX19ncGlvKSBcCisJKChfX2dwaW8jI19TVEFSVCkgKyAoX19ncGlvIyNfTlIpICsgQ09ORklHX1MzQ19HUElPX1NQQUNFICsgMSkKKworZW51bSBzNXBfZ3Bpb19udW1iZXIgeworCVM1UDY0NDJfR1BJT19BMF9TVEFSVAk9IDAsCisJUzVQNjQ0Ml9HUElPX0ExX1NUQVJUCT0gUzVQNjQ0Ml9HUElPX05FWFQoUzVQNjQ0Ml9HUElPX0EwKSwKKwlTNVA2NDQyX0dQSU9fQl9TVEFSVAk9IFM1UDY0NDJfR1BJT19ORVhUKFM1UDY0NDJfR1BJT19BMSksCisJUzVQNjQ0Ml9HUElPX0MwX1NUQVJUCT0gUzVQNjQ0Ml9HUElPX05FWFQoUzVQNjQ0Ml9HUElPX0IpLAorCVM1UDY0NDJfR1BJT19DMV9TVEFSVAk9IFM1UDY0NDJfR1BJT19ORVhUKFM1UDY0NDJfR1BJT19DMCksCisJUzVQNjQ0Ml9HUElPX0QwX1NUQVJUCT0gUzVQNjQ0Ml9HUElPX05FWFQoUzVQNjQ0Ml9HUElPX0MxKSwKKwlTNVA2NDQyX0dQSU9fRDFfU1RBUlQJPSBTNVA2NDQyX0dQSU9fTkVYVChTNVA2NDQyX0dQSU9fRDApLAorCVM1UDY0NDJfR1BJT19FMF9TVEFSVAk9IFM1UDY0NDJfR1BJT19ORVhUKFM1UDY0NDJfR1BJT19EMSksCisJUzVQNjQ0Ml9HUElPX0UxX1NUQVJUCT0gUzVQNjQ0Ml9HUElPX05FWFQoUzVQNjQ0Ml9HUElPX0UwKSwKKwlTNVA2NDQyX0dQSU9fRjBfU1RBUlQJPSBTNVA2NDQyX0dQSU9fTkVYVChTNVA2NDQyX0dQSU9fRTEpLAorCVM1UDY0NDJfR1BJT19GMV9TVEFSVAk9IFM1UDY0NDJfR1BJT19ORVhUKFM1UDY0NDJfR1BJT19GMCksCisJUzVQNjQ0Ml9HUElPX0YyX1NUQVJUCT0gUzVQNjQ0Ml9HUElPX05FWFQoUzVQNjQ0Ml9HUElPX0YxKSwKKwlTNVA2NDQyX0dQSU9fRjNfU1RBUlQJPSBTNVA2NDQyX0dQSU9fTkVYVChTNVA2NDQyX0dQSU9fRjIpLAorCVM1UDY0NDJfR1BJT19HMF9TVEFSVAk9IFM1UDY0NDJfR1BJT19ORVhUKFM1UDY0NDJfR1BJT19GMyksCisJUzVQNjQ0Ml9HUElPX0cxX1NUQVJUCT0gUzVQNjQ0Ml9HUElPX05FWFQoUzVQNjQ0Ml9HUElPX0cwKSwKKwlTNVA2NDQyX0dQSU9fRzJfU1RBUlQJPSBTNVA2NDQyX0dQSU9fTkVYVChTNVA2NDQyX0dQSU9fRzEpLAorCVM1UDY0NDJfR1BJT19IMF9TVEFSVAk9IFM1UDY0NDJfR1BJT19ORVhUKFM1UDY0NDJfR1BJT19HMiksCisJUzVQNjQ0Ml9HUElPX0gxX1NUQVJUCT0gUzVQNjQ0Ml9HUElPX05FWFQoUzVQNjQ0Ml9HUElPX0gwKSwKKwlTNVA2NDQyX0dQSU9fSDJfU1RBUlQJPSBTNVA2NDQyX0dQSU9fTkVYVChTNVA2NDQyX0dQSU9fSDEpLAorCVM1UDY0NDJfR1BJT19IM19TVEFSVAk9IFM1UDY0NDJfR1BJT19ORVhUKFM1UDY0NDJfR1BJT19IMiksCisJUzVQNjQ0Ml9HUElPX0owX1NUQVJUCT0gUzVQNjQ0Ml9HUElPX05FWFQoUzVQNjQ0Ml9HUElPX0gzKSwKKwlTNVA2NDQyX0dQSU9fSjFfU1RBUlQJPSBTNVA2NDQyX0dQSU9fTkVYVChTNVA2NDQyX0dQSU9fSjApLAorCVM1UDY0NDJfR1BJT19KMl9TVEFSVAk9IFM1UDY0NDJfR1BJT19ORVhUKFM1UDY0NDJfR1BJT19KMSksCisJUzVQNjQ0Ml9HUElPX0ozX1NUQVJUCT0gUzVQNjQ0Ml9HUElPX05FWFQoUzVQNjQ0Ml9HUElPX0oyKSwKKwlTNVA2NDQyX0dQSU9fSjRfU1RBUlQJPSBTNVA2NDQyX0dQSU9fTkVYVChTNVA2NDQyX0dQSU9fSjMpLAorfTsKKworLyogUzVQNjQ0MiBHUElPIG51bWJlciBkZWZpbml0aW9ucy4gKi8KKyNkZWZpbmUgUzVQNjQ0Ml9HUEEwKF9ucikJKFM1UDY0NDJfR1BJT19BMF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVA2NDQyX0dQQTEoX25yKQkoUzVQNjQ0Ml9HUElPX0ExX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UDY0NDJfR1BCKF9ucikJKFM1UDY0NDJfR1BJT19CX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UDY0NDJfR1BDMChfbnIpCShTNVA2NDQyX0dQSU9fQzBfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQNjQ0Ml9HUEMxKF9ucikJKFM1UDY0NDJfR1BJT19DMV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVA2NDQyX0dQRDAoX25yKQkoUzVQNjQ0Ml9HUElPX0QwX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UDY0NDJfR1BEMShfbnIpCShTNVA2NDQyX0dQSU9fRDFfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQNjQ0Ml9HUEUwKF9ucikJKFM1UDY0NDJfR1BJT19FMF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVA2NDQyX0dQRTEoX25yKQkoUzVQNjQ0Ml9HUElPX0UxX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UDY0NDJfR1BGMChfbnIpCShTNVA2NDQyX0dQSU9fRjBfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQNjQ0Ml9HUEYxKF9ucikJKFM1UDY0NDJfR1BJT19GMV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVA2NDQyX0dQRjIoX25yKQkoUzVQNjQ0Ml9HUElPX0YyX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UDY0NDJfR1BGMyhfbnIpCShTNVA2NDQyX0dQSU9fRjNfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQNjQ0Ml9HUEcwKF9ucikJKFM1UDY0NDJfR1BJT19HMF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVA2NDQyX0dQRzEoX25yKQkoUzVQNjQ0Ml9HUElPX0cxX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UDY0NDJfR1BHMihfbnIpCShTNVA2NDQyX0dQSU9fRzJfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQNjQ0Ml9HUEgwKF9ucikJKFM1UDY0NDJfR1BJT19IMF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVA2NDQyX0dQSDEoX25yKQkoUzVQNjQ0Ml9HUElPX0gxX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UDY0NDJfR1BIMihfbnIpCShTNVA2NDQyX0dQSU9fSDJfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQNjQ0Ml9HUEgzKF9ucikJKFM1UDY0NDJfR1BJT19IM19TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVA2NDQyX0dQSjAoX25yKQkoUzVQNjQ0Ml9HUElPX0owX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UDY0NDJfR1BKMShfbnIpCShTNVA2NDQyX0dQSU9fSjFfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQNjQ0Ml9HUEoyKF9ucikJKFM1UDY0NDJfR1BJT19KMl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVA2NDQyX0dQSjMoX25yKQkoUzVQNjQ0Ml9HUElPX0ozX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UDY0NDJfR1BKNChfbnIpCShTNVA2NDQyX0dQSU9fSjRfU1RBUlQgKyAoX25yKSkKKworLyogdGhlIGVuZCBvZiB0aGUgUzVQNjQ0MiBzcGVjaWZpYyBncGlvcyAqLworI2RlZmluZSBTNVA2NDQyX0dQSU9fRU5ECShTNVA2NDQyX0dQSjQoUzVQNjQ0Ml9HUElPX0o0X05SKSArIDEpCisjZGVmaW5lIFMzQ19HUElPX0VORAkJUzVQNjQ0Ml9HUElPX0VORAorCisvKiBkZWZpbmUgdGhlIG51bWJlciBvZiBncGlvcyB3ZSBuZWVkIHRvIHRoZSBvbmUgYWZ0ZXIgdGhlIEdQSjQoKSByYW5nZSAqLworI2RlZmluZSBBUkNIX05SX0dQSU9TCQkoUzVQNjQ0Ml9HUEo0KFM1UDY0NDJfR1BJT19KNF9OUikgKwlcCisJCQkJIENPTkZJR19TQU1TVU5HX0dQSU9fRVhUUkEgKyAxKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgorCisjZW5kaWYgLyogX19BU01fQVJDSF9HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2Q3YjY3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMTggQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQNjQ0MiAtIEhhcmR3YXJlIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9IIF9fRklMRV9fCisKKy8qIGN1cnJlbnRseSBub3RoaW5nIGhlcmUsIHBsYWNlaG9sZGVyICovCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDIxOTVhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9pby5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qIGFyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvaW8uaAorICoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgorICoKKyAqIERlZmF1bHQgSU8gcm91dGluZXMgZm9yIFM1UDY0NDIKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKKyNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSAorCisvKiBObyBjdXJyZW50IElTQS9QQ0kgYnVzIHN1cHBvcnQuICovCisjZGVmaW5lIF9faW8oYSkJCV9fdHlwZXNhZmVfaW8oYSkKKyNkZWZpbmUgX19tZW1fcGNpKGEpCShhKQorCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUICgweEZGRkZGRkZGKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE2NjU4MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0wLDAgKzEsODYgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvaXJxcy5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTNVA2NDQyIC0gSVJRIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9JUlFTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9JUlFTX0ggX19GSUxFX18KKworI2luY2x1ZGUgPHBsYXQvaXJxcy5oPgorCisvKiBWSUMwICovCisjZGVmaW5lIElSUV9FSU5UMTZfMzEgCQlTNVBfSVJRX1ZJQzAoMTYpCisjZGVmaW5lIElSUV9CQVRGIAkJUzVQX0lSUV9WSUMwKDE3KQorI2RlZmluZSBJUlFfTURNQSAJCVM1UF9JUlFfVklDMCgxOCkKKyNkZWZpbmUgSVJRX1BETUEgCQlTNVBfSVJRX1ZJQzAoMTkpCisjZGVmaW5lIElSUV9USU1FUjBfVklDCQlTNVBfSVJRX1ZJQzAoMjEpCisjZGVmaW5lIElSUV9USU1FUjFfVklDCQlTNVBfSVJRX1ZJQzAoMjIpCisjZGVmaW5lIElSUV9USU1FUjJfVklDCQlTNVBfSVJRX1ZJQzAoMjMpCisjZGVmaW5lIElSUV9USU1FUjNfVklDCQlTNVBfSVJRX1ZJQzAoMjQpCisjZGVmaW5lIElSUV9USU1FUjRfVklDCQlTNVBfSVJRX1ZJQzAoMjUpCisjZGVmaW5lIElSUV9TWVNUSU1FUgkJUzVQX0lSUV9WSUMwKDI2KQorI2RlZmluZSBJUlFfV0RUCQkJUzVQX0lSUV9WSUMwKDI3KQorI2RlZmluZSBJUlFfUlRDX0FMQVJNCQlTNVBfSVJRX1ZJQzAoMjgpCisjZGVmaW5lIElSUV9SVENfVElDCQlTNVBfSVJRX1ZJQzAoMjkpCisjZGVmaW5lIElSUV9HUElPSU5UCQlTNVBfSVJRX1ZJQzAoMzApCisKKy8qIFZJQzEgKi8KKyNkZWZpbmUgSVJRX25QTVVJUlEgCQlTNVBfSVJRX1ZJQzEoMCkKKyNkZWZpbmUgSVJRX09ORU5BTkQgCQlTNVBfSVJRX1ZJQzEoNykKKyNkZWZpbmUgSVJRX1VBUlQwIAkJUzVQX0lSUV9WSUMxKDEwKQorI2RlZmluZSBJUlFfVUFSVDEgCQlTNVBfSVJRX1ZJQzEoMTEpCisjZGVmaW5lIElSUV9VQVJUMiAJCVM1UF9JUlFfVklDMSgxMikKKyNkZWZpbmUgSVJRX1NQSTAgCQlTNVBfSVJRX1ZJQzEoMTUpCisjZGVmaW5lIElSUV9JSUMgCQlTNVBfSVJRX1ZJQzEoMTkpCisjZGVmaW5lIElSUV9JSUMxIAkJUzVQX0lSUV9WSUMxKDIwKQorI2RlZmluZSBJUlFfSUlDMiAJCVM1UF9JUlFfVklDMSgyMSkKKyNkZWZpbmUgSVJRX09URyAJCVM1UF9JUlFfVklDMSgyNCkKKyNkZWZpbmUgSVJRX01TTSAJCVM1UF9JUlFfVklDMSgyNSkKKyNkZWZpbmUgSVJRX0hTTU1DMCAJCVM1UF9JUlFfVklDMSgyNikKKyNkZWZpbmUgSVJRX0hTTU1DMSAJCVM1UF9JUlFfVklDMSgyNykKKyNkZWZpbmUgSVJRX0hTTU1DMiAJCVM1UF9JUlFfVklDMSgyOCkKKyNkZWZpbmUgSVJRX0NPTU1SWCAJCVM1UF9JUlFfVklDMSgyOSkKKyNkZWZpbmUgSVJRX0NPTU1UWCAJCVM1UF9JUlFfVklDMSgzMCkKKworLyogVklDMiAqLworI2RlZmluZSBJUlFfTENEMCAJCVM1UF9JUlFfVklDMigwKQorI2RlZmluZSBJUlFfTENEMSAJCVM1UF9JUlFfVklDMigxKQorI2RlZmluZSBJUlFfTENEMiAJCVM1UF9JUlFfVklDMigyKQorI2RlZmluZSBJUlFfTENEMyAJCVM1UF9JUlFfVklDMigzKQorI2RlZmluZSBJUlFfUk9UQVRPUiAJCVM1UF9JUlFfVklDMig0KQorI2RlZmluZSBJUlFfRklNQzAgCQlTNVBfSVJRX1ZJQzIoNSkKKyNkZWZpbmUgSVJRX0ZJTUMxIAkJUzVQX0lSUV9WSUMyKDYpCisjZGVmaW5lIElSUV9GSU1DMiAJCVM1UF9JUlFfVklDMig3KQorI2RlZmluZSBJUlFfSlBFRyAJCVM1UF9JUlFfVklDMig4KQorI2RlZmluZSBJUlFfM0QgCQkJUzVQX0lSUV9WSUMyKDEwKQorI2RlZmluZSBJUlFfTWl4ZXIgCQlTNVBfSVJRX1ZJQzIoMTEpCisjZGVmaW5lIElSUV9NRkMgCQlTNVBfSVJRX1ZJQzIoMTQpCisjZGVmaW5lIElSUV9UVkVOQyAJCVM1UF9JUlFfVklDMigxNSkKKyNkZWZpbmUgSVJRX0kyUzAgCQlTNVBfSVJRX1ZJQzIoMTYpCisjZGVmaW5lIElSUV9JMlMxIAkJUzVQX0lSUV9WSUMyKDE3KQorI2RlZmluZSBJUlFfUlAgCQkJUzVQX0lSUV9WSUMyKDE5KQorI2RlZmluZSBJUlFfUENNMCAJCVM1UF9JUlFfVklDMigyMCkKKyNkZWZpbmUgSVJRX1BDTTEgCQlTNVBfSVJRX1ZJQzIoMjEpCisjZGVmaW5lIElSUV9BREMgCQlTNVBfSVJRX1ZJQzIoMjMpCisjZGVmaW5lIElSUV9QRU5ETiAJCVM1UF9JUlFfVklDMigyNCkKKyNkZWZpbmUgSVJRX0tFWVBBRCAJCVM1UF9JUlFfVklDMigyNSkKKyNkZWZpbmUgSVJRX1NTU19JTlQgCQlTNVBfSVJRX1ZJQzIoMjcpCisjZGVmaW5lIElSUV9TU1NfSEFTSCAJCVM1UF9JUlFfVklDMigyOCkKKyNkZWZpbmUgSVJRX1ZJQ19FTkQgCQlTNVBfSVJRX1ZJQzIoMzEpCisKKyNkZWZpbmUgUzVQX0lSUV9FSU5UX0JBU0UJKElSUV9WSUNfRU5EICsgMSkKKworI2RlZmluZSBJUlFfRUlOVCh4KSAgICAgICAgICAgICAoKHgpIDwgMTYgPyBTNVBfSVJRX1ZJQzAoeCkgOiBcCisJCQkJCShTNVBfSVJRX0VJTlRfQkFTRSArICh4KS0xNikpCisvKiBTZXQgdGhlIGRlZmF1bHQgTlJfSVJRUyAqLworCisjZGVmaW5lIE5SX0lSUVMgCQkoSVJRX0VJTlQoMzEpICsgMSkKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfSVJRU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL21hcC5oIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9tYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODUyNzdkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9tYXAuaApAQCAtMCwwICsxLDU4IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL21hcC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTNVA2NDQyIC0gTWVtb3J5IG1hcCBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUFQX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NQVBfSCBfX0ZJTEVfXworCisjaW5jbHVkZSA8cGxhdC9tYXAtYmFzZS5oPgorI2luY2x1ZGUgPHBsYXQvbWFwLXM1cC5oPgorCisjZGVmaW5lIFM1UDY0NDJfUEFfQ0hJUElECSgweEUwMDAwMDAwKQorI2RlZmluZSBTNVBfUEFfQ0hJUElECQlTNVA2NDQyX1BBX0NISVBJRAorCisjZGVmaW5lIFM1UDY0NDJfUEFfU1lTQ09OCSgweEUwMTAwMDAwKQorI2RlZmluZSBTNVBfUEFfU1lTQ09OCQlTNVA2NDQyX1BBX1NZU0NPTgorCisjZGVmaW5lIFM1UDY0NDJfUEFfR1BJTwkJKDB4RTAyMDAwMDApCisjZGVmaW5lIFM1UF9QQV9HUElPCQlTNVA2NDQyX1BBX0dQSU8KKworI2RlZmluZSBTNVA2NDQyX1BBX1ZJQzAJCSgweEU0MDAwMDAwKQorI2RlZmluZSBTNVBfUEFfVklDMAkJUzVQNjQ0Ml9QQV9WSUMwCisKKyNkZWZpbmUgUzVQNjQ0Ml9QQV9WSUMxCQkoMHhFNDEwMDAwMCkKKyNkZWZpbmUgUzVQX1BBX1ZJQzEJCVM1UDY0NDJfUEFfVklDMQorCisjZGVmaW5lIFM1UDY0NDJfUEFfVklDMgkJKDB4RTQyMDAwMDApCisjZGVmaW5lIFM1UF9QQV9WSUMyCQlTNVA2NDQyX1BBX1ZJQzIKKworI2RlZmluZSBTNVA2NDQyX1BBX1RJTUVSCSgweEVBMDAwMDAwKQorI2RlZmluZSBTNVBfUEFfVElNRVIJCVM1UDY0NDJfUEFfVElNRVIKKworI2RlZmluZSBTNVA2NDQyX1BBX1NZU1RJTUVSICAgCSgweEVBMTAwMDAwKQorCisjZGVmaW5lIFM1UDY0NDJfUEFfVUFSVAkJKDB4RUMwMDAwMDApCisKKyNkZWZpbmUgUzVQX1BBX1VBUlQwCQkoUzVQNjQ0Ml9QQV9VQVJUICsgMHgwKQorI2RlZmluZSBTNVBfUEFfVUFSVDEJCShTNVA2NDQyX1BBX1VBUlQgKyAweDQwMCkKKyNkZWZpbmUgUzVQX1BBX1VBUlQyCQkoUzVQNjQ0Ml9QQV9VQVJUICsgMHg4MDApCisjZGVmaW5lIFM1UF9TWl9VQVJUCQlTWl8yNTYKKworI2RlZmluZSBTNVA2NDQyX1BBX0lJQzAJCSgweEVDMTAwMDAwKQorCisjZGVmaW5lIFM1UDY0NDJfUEFfU0RSQU0JKDB4MjAwMDAwMDApCisjZGVmaW5lIFM1UF9QQV9TRFJBTQkJUzVQNjQ0Ml9QQV9TRFJBTQorCisvKiBjb21wYXRpYmlsdGl5IGRlZmluZXMuICovCisjZGVmaW5lIFMzQ19QQV9VQVJUCQlTNVA2NDQyX1BBX1VBUlQKKyNkZWZpbmUgUzNDX1BBX0lJQwkJUzVQNjQ0Ml9QQV9JSUMwCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX01BUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGRkODc3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApAQCAtMCwwICsxLDE5IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL21lbW9yeS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTNVA2NDQyIC0gTWVtb3J5IGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NRU1PUllfSAorI2RlZmluZSBfX0FTTV9BUkNIX01FTU9SWV9ICisKKyNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4MjAwMDAwMDApCisjZGVmaW5lIENPTlNJU1RFTlRfRE1BX1NJWkUJU1pfOE0KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUVNT1JZX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvcHdtLWNsb2NrLmggYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZTg1MjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvcHdtLWNsb2NrLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIENvcHlyaWdodCAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oCisgKgorICogUzVQNjQ0MiAtIHB3bSBjbG9jayBhbmQgdGltZXIgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfUFdNQ0xLX0gKKyNkZWZpbmUgX19BU01fQVJDSF9QV01DTEtfSCBfX0ZJTEVfXworCisvKioKKyAqIHB3bV9jZmdfc3JjX2lzX3RjbGsoKSAtIHJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBtdXggY29uZmlnIGlzIGEgdGNsaworICogQGNmZzogVGhlIHRpbWVyIFRDRkcxIHJlZ2lzdGVyIGJpdHMgc2hpZnRlZCBkb3duIHRvIDAuCisgKgorICogUmV0dXJuIHRydWUgaWYgdGhlIGdpdmVuIGNvbmZpZ3VyYXRpb24gZnJvbSBUQ0ZHMSBpcyBhIFRDTEsgaW5zdGVhZAorICogYW55IG9mIHRoZSBURElWIGNsb2Nrcy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHdtX2NmZ19zcmNfaXNfdGNsayh1bnNpZ25lZCBsb25nIHRjZmcpCit7CisJcmV0dXJuIHRjZmcgPT0gUzNDMjQxMF9UQ0ZHMV9NVVhfVENMSzsKK30KKworLyoqCisgKiB0Y2ZnX3RvX2Rpdmlzb3IoKSAtIGNvbnZlcnQgdGNmZzEgc2V0dGluZyB0byBhIGRpdmlzb3IKKyAqIEB0Y2ZnMTogVGhlIHRjZmcxIHNldHRpbmcsIHNoaWZ0ZWQgZG93bi4KKyAqCisgKiBHZXQgdGhlIGRpdmlzb3IgdmFsdWUgZm9yIHRoZSBnaXZlbiB0Y2ZnMSBzZXR0aW5nLiBXZSBhc3N1bWUgdGhlCisgKiBjYWxsZXIgaGFzIGFscmVhZHkgY2hlY2tlZCB0byBzZWUgaWYgdGhpcyBpcyBub3QgYSBUQ0xLIHNvdXJjZS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRjZmdfdG9fZGl2aXNvcih1bnNpZ25lZCBsb25nIHRjZmcxKQoreworCXJldHVybiAxIDw8ICgxICsgdGNmZzEpOworfQorCisvKioKKyAqIHB3bV90ZGl2X2hhc19kaXYxKCkgLSBkb2VzIHRoZSB0ZGl2IHNldHRpbmcgaGF2ZSBhIC8xCisgKgorICogUmV0dXJuIHRydWUgaWYgd2UgaGF2ZSBhIC8xIGluIHRoZSB0ZGl2IHNldHRpbmcuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHB3bV90ZGl2X2hhc19kaXYxKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcHdtX3RkaXZfZGl2X2JpdHMoKSAtIGNhbGN1bGF0ZSBUQ0ZHMSBkaXZpc29yIHZhbHVlLgorICogQGRpdjogVGhlIGRpdmlzb3IgdG8gY2FsY3VsYXRlIHRoZSBiaXQgaW5mb3JtYXRpb24gZm9yLgorICoKKyAqIFR1cm4gYSBkaXZpc29yIGludG8gdGhlIG5lY2Vzc2FyeSBiaXQgZmllbGQgZm9yIFRDRkcxLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcHdtX3RkaXZfZGl2X2JpdHModW5zaWduZWQgaW50IGRpdikKK3sKKwlyZXR1cm4gaWxvZzIoZGl2KSAtIDE7Cit9CisKKyNkZWZpbmUgUzNDX1RDRkcxX01VWF9UQ0xLIFMzQzI0MTBfVENGRzFfTVVYX1RDTEsKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUFdNQ0xLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDgzNjBiNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oCkBAIC0wLDAgKzEsMTAzIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQNjQ0MiAtIENsb2NrIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9SRUdTX0NMT0NLX0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdTX0NMT0NLX0ggX19GSUxFX18KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKyNkZWZpbmUgUzVQX0NMS1JFRyh4KQkJKFMzQ19WQV9TWVMgKyAoeCkpCisKKyNkZWZpbmUgUzVQX0FQTExfTE9DSwkJUzVQX0NMS1JFRygweDAwKQorI2RlZmluZSBTNVBfTVBMTF9MT0NLCQlTNVBfQ0xLUkVHKDB4MDgpCisjZGVmaW5lIFM1UF9FUExMX0xPQ0sJCVM1UF9DTEtSRUcoMHgxMCkKKyNkZWZpbmUgUzVQX1ZQTExfTE9DSwkJUzVQX0NMS1JFRygweDIwKQorCisjZGVmaW5lIFM1UF9BUExMX0NPTgkJUzVQX0NMS1JFRygweDEwMCkKKyNkZWZpbmUgUzVQX01QTExfQ09OCQlTNVBfQ0xLUkVHKDB4MTA4KQorI2RlZmluZSBTNVBfRVBMTF9DT04JCVM1UF9DTEtSRUcoMHgxMTApCisjZGVmaW5lIFM1UF9WUExMX0NPTgkJUzVQX0NMS1JFRygweDEyMCkKKworI2RlZmluZSBTNVBfQ0xLX1NSQzAJCVM1UF9DTEtSRUcoMHgyMDApCisjZGVmaW5lIFM1UF9DTEtfU1JDMQkJUzVQX0NMS1JFRygweDIwNCkKKyNkZWZpbmUgUzVQX0NMS19TUkMyCQlTNVBfQ0xLUkVHKDB4MjA4KQorI2RlZmluZSBTNVBfQ0xLX1NSQzMJCVM1UF9DTEtSRUcoMHgyMEMpCisjZGVmaW5lIFM1UF9DTEtfU1JDNAkJUzVQX0NMS1JFRygweDIxMCkKKyNkZWZpbmUgUzVQX0NMS19TUkM1CQlTNVBfQ0xLUkVHKDB4MjE0KQorI2RlZmluZSBTNVBfQ0xLX1NSQzYJCVM1UF9DTEtSRUcoMHgyMTgpCisKKyNkZWZpbmUgUzVQX0NMS19TUkNfTUFTSzAJUzVQX0NMS1JFRygweDI4MCkKKyNkZWZpbmUgUzVQX0NMS19TUkNfTUFTSzEJUzVQX0NMS1JFRygweDI4NCkKKworI2RlZmluZSBTNVBfQ0xLX0RJVjAJCVM1UF9DTEtSRUcoMHgzMDApCisjZGVmaW5lIFM1UF9DTEtfRElWMQkJUzVQX0NMS1JFRygweDMwNCkKKyNkZWZpbmUgUzVQX0NMS19ESVYyCQlTNVBfQ0xLUkVHKDB4MzA4KQorI2RlZmluZSBTNVBfQ0xLX0RJVjMJCVM1UF9DTEtSRUcoMHgzMEMpCisjZGVmaW5lIFM1UF9DTEtfRElWNAkJUzVQX0NMS1JFRygweDMxMCkKKyNkZWZpbmUgUzVQX0NMS19ESVY1CQlTNVBfQ0xLUkVHKDB4MzE0KQorI2RlZmluZSBTNVBfQ0xLX0RJVjYJCVM1UF9DTEtSRUcoMHgzMTgpCisKKyNkZWZpbmUgUzVQX0NMS0dBVEVfSVAzCQlTNVBfQ0xLUkVHKDB4NDZDKQorCisvKiBDTEtfT1VUICovCisjZGVmaW5lIFM1UF9DTEtfT1VUX1NISUZUCSgxMikKKyNkZWZpbmUgUzVQX0NMS19PVVRfTUFTSwkoMHgxRiA8PCBTNVBfQ0xLX09VVF9TSElGVCkKKyNkZWZpbmUgUzVQX0NMS19PVVQJCVM1UF9DTEtSRUcoMHg1MDApCisKKyNkZWZpbmUgUzVQX0NMS19ESVZfU1RBVDAJUzVQX0NMS1JFRygweDEwMDApCisjZGVmaW5lIFM1UF9DTEtfRElWX1NUQVQxCVM1UF9DTEtSRUcoMHgxMDA0KQorCisjZGVmaW5lIFM1UF9DTEtfTVVYX1NUQVQwCVM1UF9DTEtSRUcoMHgxMTAwKQorI2RlZmluZSBTNVBfQ0xLX01VWF9TVEFUMQlTNVBfQ0xLUkVHKDB4MTEwNCkKKworI2RlZmluZSBTNVBfTUROSUVfU0VMCQlTNVBfQ0xLUkVHKDB4NzAwOCkKKworLyogUmVnaXN0ZXIgQml0IGRlZmluaXRpb24gKi8KKyNkZWZpbmUgUzVQX0VQTExfRU4gICAgIAkJKDE8PDMxKQorI2RlZmluZSBTNVBfRVBMTF9NQVNLICAgCQkweGZmZmZmZmZmCisjZGVmaW5lIFM1UF9FUExMVkFMKF9tLCBfcCwgX3MpICAgCSgoX20pIDw8IDE2IHwgKChfcCkgPDwgOCkgfCAoKF9zKSkpCisKKy8qIENMS0RJVjAgKi8KKyNkZWZpbmUgUzVQX0NMS0RJVjBfQVBMTF9TSElGVAkJKDApCisjZGVmaW5lIFM1UF9DTEtESVYwX0FQTExfTUFTSwkJKDB4NyA8PCBTNVBfQ0xLRElWMF9BUExMX1NISUZUKQorI2RlZmluZSBTNVBfQ0xLRElWMF9BMk1fU0hJRlQJCSg0KQorI2RlZmluZSBTNVBfQ0xLRElWMF9BMk1fTUFTSwkJKDB4NyA8PCBTNVBfQ0xLRElWMF9BMk1fU0hJRlQpCisjZGVmaW5lIFM1UF9DTEtESVYwX0QwQ0xLX1NISUZUCQkoMTYpCisjZGVmaW5lIFM1UF9DTEtESVYwX0QwQ0xLX01BU0sJCSgweEYgPDwgUzVQX0NMS0RJVjBfRDBDTEtfU0hJRlQpCisjZGVmaW5lIFM1UF9DTEtESVYwX1AwQ0xLX1NISUZUCQkoMjApCisjZGVmaW5lIFM1UF9DTEtESVYwX1AwQ0xLX01BU0sJCSgweDcgPDwgUzVQX0NMS0RJVjBfUDBDTEtfU0hJRlQpCisjZGVmaW5lIFM1UF9DTEtESVYwX0QxQ0xLX1NISUZUCQkoMjQpCisjZGVmaW5lIFM1UF9DTEtESVYwX0QxQ0xLX01BU0sJCSgweEYgPDwgUzVQX0NMS0RJVjBfRDFDTEtfU0hJRlQpCisjZGVmaW5lIFM1UF9DTEtESVYwX1AxQ0xLX1NISUZUCQkoMjgpCisjZGVmaW5lIFM1UF9DTEtESVYwX1AxQ0xLX01BU0sJCSgweDcgPDwgUzVQX0NMS0RJVjBfUDFDTEtfU0hJRlQpCisKKy8qIENsb2NrIE1VWCBzdGF0dXMgUmVnaXN0ZXJzICovCisjZGVmaW5lIFM1UF9DTEtfTVVYX1NUQVQwX0FQTExfU0hJRlQJKDApCisjZGVmaW5lIFM1UF9DTEtfTVVYX1NUQVQwX0FQTExfTUFTSwkoMHg3IDw8IFM1UF9DTEtfTVVYX1NUQVQwX0FQTExfU0hJRlQpCisjZGVmaW5lIFM1UF9DTEtfTVVYX1NUQVQwX01QTExfU0hJRlQJKDQpCisjZGVmaW5lIFM1UF9DTEtfTVVYX1NUQVQwX01QTExfTUFTSwkoMHg3IDw8IFM1UF9DTEtfTVVYX1NUQVQwX01QTExfU0hJRlQpCisjZGVmaW5lIFM1UF9DTEtfTVVYX1NUQVQwX0VQTExfU0hJRlQJKDgpCisjZGVmaW5lIFM1UF9DTEtfTVVYX1NUQVQwX0VQTExfTUFTSwkoMHg3IDw8IFM1UF9DTEtfTVVYX1NUQVQwX0VQTExfU0hJRlQpCisjZGVmaW5lIFM1UF9DTEtfTVVYX1NUQVQwX1ZQTExfU0hJRlQJKDEyKQorI2RlZmluZSBTNVBfQ0xLX01VWF9TVEFUMF9WUExMX01BU0sJKDB4NyA8PCBTNVBfQ0xLX01VWF9TVEFUMF9WUExMX1NISUZUKQorI2RlZmluZSBTNVBfQ0xLX01VWF9TVEFUMF9NVVhBUk1fU0hJRlQJKDE2KQorI2RlZmluZSBTNVBfQ0xLX01VWF9TVEFUMF9NVVhBUk1fTUFTSwkoMHg3IDw8IFM1UF9DTEtfTVVYX1NUQVQwX01VWEFSTV9TSElGVCkKKyNkZWZpbmUgUzVQX0NMS19NVVhfU1RBVDBfTVVYRDBfU0hJRlQJKDIwKQorI2RlZmluZSBTNVBfQ0xLX01VWF9TVEFUMF9NVVhEMF9NQVNLCSgweDcgPDwgUzVQX0NMS19NVVhfU1RBVDBfTVVYRDBfU0hJRlQpCisjZGVmaW5lIFM1UF9DTEtfTVVYX1NUQVQwX01VWEQxX1NISUZUCSgyNCkKKyNkZWZpbmUgUzVQX0NMS19NVVhfU1RBVDBfTVVYRDFfTUFTSwkoMHg3IDw8IFM1UF9DTEtfTVVYX1NUQVQwX01VWEQxX1NISUZUKQorI2RlZmluZSBTNVBfQ0xLX01VWF9TVEFUMV9EMVNZTkNfU0hJRlQJKDI0KQorI2RlZmluZSBTNVBfQ0xLX01VWF9TVEFUMV9EMVNZTkNfTUFTSwkoMHg3IDw8IFM1UF9DTEtfTVVYX1NUQVQxX0QxU1lOQ19TSElGVCkKKyNkZWZpbmUgUzVQX0NMS19NVVhfU1RBVDFfRDBTWU5DX1NISUZUCSgyOCkKKyNkZWZpbmUgUzVQX0NMS19NVVhfU1RBVDFfRDBTWU5DX01BU0sJKDB4NyA8PCBTNVBfQ0xLX01VWF9TVEFUMV9EMFNZTkNfU0hJRlQpCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1JFR1NfQ0xPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9yZWdzLWlycS5oIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9yZWdzLWlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNzgyYjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKQEAgLTAsMCArMSwxOSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9yZWdzLWlycS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTNVA2NDQyIC0gSVJRIHJlZ2lzdGVyIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9SRUdTX0lSUV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUkVHU19JUlFfSCBfX0ZJTEVfXworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3ZpYy5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1JFR1NfSVJRX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvc3lzdGVtLmggYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiY2Q4ZWQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvc3lzdGVtLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFM1UDY0NDIgLSBzeXN0ZW0gc3VwcG9ydCBoZWFkZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1NZU1RFTV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfU1lTVEVNX0ggX19GSUxFX18KKworc3RhdGljIHZvaWQgYXJjaF9pZGxlKHZvaWQpCit7CisJLyogbm90aGluZyBoZXJlIHlldCAqLworfQorCitzdGF0aWMgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSwgY29uc3QgY2hhciAqY21kKQoreworCS8qIG5vdGhpbmcgaGVyZSB5ZXQgKi8KK30KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfU1lTVEVNX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvdGljay5oIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC90aWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFkNGNhYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvdGljay5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvdGljay5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL3RpY2suaAorICoKKyAqIFM1UDY0NDIgLSBUaW1lciB0aWNrIHN1cHBvcnQgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1RJQ0tfSAorI2RlZmluZSBfX0FTTV9BUkNIX1RJQ0tfSCBfX0ZJTEVfXworCitzdGF0aWMgaW5saW5lIHUzMiBzM2MyNHh4X29zdGltZXJfcGVuZGluZyh2b2lkKQoreworCXUzMiBwZW5kID0gX19yYXdfcmVhZGwoVkFfVklDMCArIFZJQ19SQVdfU1RBVFVTKTsKKwlyZXR1cm4gcGVuZCAmICgxIDw8IChJUlFfVElNRVI0X1ZJQyAtIFM1UF9JUlFfVklDMCgwKSkpOworfQorCisjZGVmaW5lIFRJQ0tfTUFYCSgweGZmZmZmZmZmKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9USUNLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvdGltZXguaCBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjhmMmZjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qIGFyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvdGltZXguaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMy0yMDEwIFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFM1UDY0NDIgLSB0aW1lIHBhcmFtZXRlcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1RJTUVYX0gKKyNkZWZpbmUgX19BU01fQVJDSF9USU1FWF9ICisKKy8qIENMT0NLX1RJQ0tfUkFURSBuZWVkcyB0byBiZSBldmFsdWF0YWJsZSBieSB0aGUgY3BwLCBzbyBtYWtpbmcgaXQKKyAqIGEgdmFyaWFibGUgaXMgdXNlbGVzcy4gSXQgc2VlbXMgYXMgbG9uZyBhcyB3ZSBtYWtlIG91ciB0aW1lcnMgYW4KKyAqIGV4YWN0IG11bHRpcGxlIG9mIEhaLCBhbnkgdmFsdWUgdGhhdCBtYWtlcyBhIDEtPjEgY29ycmVzcG9uZGVuY2UKKyAqIGZvciB0aGUgdGltZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyB0by9mcm9tIGppZmZpZXMgaXMgYWNjZXB0YWJsZS4KKyovCisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFIDEyMDAwMDAwCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1RJTUVYX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFjN2NiZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTNVA2NDQyIC0gdW5jb21wcmVzcyBjb2RlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9VTkNPTVBSRVNTX0gKKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8cGxhdC91bmNvbXByZXNzLmg+CisKK3N0YXRpYyB2b2lkIGFyY2hfZGV0ZWN0X2NwdSh2b2lkKQoreworCS8qIHdlIGRvIG5vdCBuZWVkIHRvIGRvIGFueSBjcHUgZGV0ZWN0aW9uIGhlcmUgYXQgdGhlIG1vbWVudC4gKi8KK30KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtczVwNjQ0Mi9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMzMzMzYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMCwwICsxLDE3IEBACisvKiBhcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorICoKKyAqIENvcHlyaWdodCAyMDEwIEJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFM1UDY0NDIgdm1hbGxvYyBkZWZpbml0aW9uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVk1BTExPQ19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVk1BTExPQ19ICisKKyNkZWZpbmUgVk1BTExPQ19FTkQJICAoMHhFMDAwMDAwMCkKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVk1BTExPQ19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5pdC5jIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODc0YmRiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luaXQuYwpAQCAtMCwwICsxLDQ0IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cDY0NDIvczVwNjQ0Mi1pbml0LmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9zNXA2NDQyLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfdWFydF9jbGtzcmMgczVwNjQ0Ml9zZXJpYWxfY2xvY2tzW10gPSB7CisJWzBdID0geworCQkubmFtZQkJPSAicGNsayIsCisJCS5kaXZpc29yCT0gMSwKKwkJLm1pbl9iYXVkCT0gMCwKKwkJLm1heF9iYXVkCT0gMCwKKwl9LAorfTsKKworLyogdWFydCByZWdpc3RyYXRpb24gcHJvY2VzcyAqLwordm9pZCBfX2luaXQgczVwNjQ0Ml9jb21tb25faW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubykKK3sKKwlzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICp0Y2ZnID0gY2ZnOworCXUzMiB1Y250OworCisJZm9yICh1Y250ID0gMDsgdWNudCA8IG5vOyB1Y250KyssIHRjZmcrKykgeworCQlpZiAoIXRjZmctPmNsb2NrcykgeworCQkJdGNmZy0+Y2xvY2tzID0gczVwNjQ0Ml9zZXJpYWxfY2xvY2tzOworCQkJdGNmZy0+Y2xvY2tzX3NpemUgPSBBUlJBWV9TSVpFKHM1cDY0NDJfc2VyaWFsX2Nsb2Nrcyk7CisJCX0KKwl9CisKKwlzM2MyNHh4X2luaXRfdWFydGRldnMoInM1cHYyMTAtdWFydCIsIHM1cF91YXJ0X3Jlc291cmNlcywgY2ZnLCBubyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cDY0NDIvbWFjaC1zbWRrNjQ0Mi5jIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL21hY2gtc21kazY0NDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDYzMzcxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL21hY2gtc21kazY0NDIuYwpAQCAtMCwwICsxLDkxIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cDY0NDIvbWFjaC1zbWRrNjQ0Mi5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9zNXA2NDQyLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKworLyogRm9sbG93aW5nIGFyZSBkZWZhdWx0IHZhbHVlcyBmb3IgVUNPTiwgVUxDT04gYW5kIFVGQ09OIFVBUlQgcmVnaXN0ZXJzICovCisjZGVmaW5lIFM1UDY0NDJfVUNPTl9ERUZBVUxUCShTM0MyNDEwX1VDT05fVFhJTEVWRUwgfAlcCisJCQkJIFMzQzI0MTBfVUNPTl9SWElMRVZFTCB8CVwKKwkJCQkgUzNDMjQxMF9VQ09OX1RYSVJRTU9ERSB8CVwKKwkJCQkgUzNDMjQxMF9VQ09OX1JYSVJRTU9ERSB8CVwKKwkJCQkgUzNDMjQxMF9VQ09OX1JYRklGT19UT0kgfAlcCisJCQkJIFMzQzI0NDNfVUNPTl9SWEVSUl9JUlFFTikKKworI2RlZmluZSBTNVA2NDQyX1VMQ09OX0RFRkFVTFQJUzNDMjQxMF9MQ09OX0NTOAorCisjZGVmaW5lIFM1UDY0NDJfVUZDT05fREVGQVVMVAkoUzNDMjQxMF9VRkNPTl9GSUZPTU9ERSB8CVwKKwkJCQkgUzVQVjIxMF9VRkNPTl9UWFRSSUc0IHwJXAorCQkJCSBTNVBWMjEwX1VGQ09OX1JYVFJJRzQpCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIHNtZGs2NDQyX3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJCT0gMCwKKwkJLmZsYWdzCQk9IDAsCisJCS51Y29uCQk9IFM1UDY0NDJfVUNPTl9ERUZBVUxULAorCQkudWxjb24JCT0gUzVQNjQ0Ml9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gUzVQNjQ0Ml9VRkNPTl9ERUZBVUxULAorCX0sCisJWzFdID0geworCQkuaHdwb3J0CQk9IDEsCisJCS5mbGFncwkJPSAwLAorCQkudWNvbgkJPSBTNVA2NDQyX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IFM1UDY0NDJfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCQk9IFM1UDY0NDJfVUZDT05fREVGQVVMVCwKKwl9LAorCVsyXSA9IHsKKwkJLmh3cG9ydAkJPSAyLAorCQkuZmxhZ3MJCT0gMCwKKwkJLnVjb24JCT0gUzVQNjQ0Ml9VQ09OX0RFRkFVTFQsCisJCS51bGNvbgkJPSBTNVA2NDQyX1VMQ09OX0RFRkFVTFQsCisJCS51ZmNvbgkJPSBTNVA2NDQyX1VGQ09OX0RFRkFVTFQsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzbWRrNjQ0Ml9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzbWRrNjQ0Ml9tYXBfaW8odm9pZCkKK3sKKwlzNXBfaW5pdF9pbyhOVUxMLCAwLCBTNVBfVkFfQ0hJUElEKTsKKwlzM2MyNHh4X2luaXRfY2xvY2tzKDEyMDAwMDAwKTsKKwlzM2MyNHh4X2luaXRfdWFydHMoc21kazY0NDJfdWFydGNmZ3MsIEFSUkFZX1NJWkUoc21kazY0NDJfdWFydGNmZ3MpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHNtZGs2NDQyX21hY2hpbmVfaW5pdCh2b2lkKQoreworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNtZGs2NDQyX2RldmljZXMsIEFSUkFZX1NJWkUoc21kazY0NDJfZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKFNNREs2NDQyLCAiU01ESzY0NDIiKQorCS8qIE1haW50YWluZXI6IEt1a2ppbiBLaW0gPGtnZW5lLmtpbUBzYW1zdW5nLmNvbT4gKi8KKwkucGh5c19pbwk9IFMzQ19QQV9VQVJUICYgMHhmZmYwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKCh1MzIpUzNDX1ZBX1VBUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSBTNVBfUEFfU0RSQU0gKyAweDEwMCwKKwkuaW5pdF9pcnEJPSBzNXA2NDQyX2luaXRfaXJxLAorCS5tYXBfaW8JCT0gc21kazY0NDJfbWFwX2lvLAorCS5pbml0X21hY2hpbmUJPSBzbWRrNjQ0Ml9tYWNoaW5lX2luaXQsCisJLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvZ3Bpby1jb3JlLmggYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2dwaW8tY29yZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZDI4ZDhlLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvZ3Bpby1jb3JlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMSArMCwwIEBACi0vKiBhcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2dwaW8tY29yZS5oCi0gKgotICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4KLSAqICAgICAgQnl1bmdobyBNaW4gPGJobWluQHNhbXN1bmcuY29tPgotICoKLSAqIFM1UEMxMDAgLSBHUElPIGNvcmUgc3VwcG9ydAotICoKLSAqIEJhc2VkIG9uIG1hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvZ3Bpby1jb3JlLmgKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX0dQSU9fQ09SRV9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfR1BJT19DT1JFX0ggX19GSUxFX18KLQotLyogY3VycmVudGx5IHdlIGp1c3QgaW5jbHVkZSB0aGUgcGxhdGZvcm0gc3VwcG9ydCAqLwotI2luY2x1ZGUgPHBsYXQvZ3Bpby1jb3JlLmg+Ci0KLSNlbmRpZiAvKiBfX0FTTV9BUkNIX0dQSU9fQ09SRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2lvLmggYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE5YWNmNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvaW8uaApAQCAtMCwwICsxLDE4IEBACisvKiBhcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL2lvLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KKyAqCisgKiBEZWZhdWx0IElPIHJvdXRpbmVzIGZvciBTNVBDMTAwIHN5c3RlbXMKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKKyNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSAorCisvKiBObyBjdXJyZW50IElTQS9QQ0kgYnVzIHN1cHBvcnQuICovCisjZGVmaW5lIF9faW8oYSkJCV9fdHlwZXNhZmVfaW8oYSkKKyNkZWZpbmUgX19tZW1fcGNpKGEpCShhKQorCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUICgweEZGRkZGRkZGKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvdGljay5oIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC90aWNrLmgKaW5kZXggZDNkZTBmMy4uZjMzOGM5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC90aWNrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL2luY2x1ZGUvbWFjaC90aWNrLmgKQEAgLTIxLDcgKzIxLDcgQEAKIHN0YXRpYyBpbmxpbmUgdTMyIHMzYzI0eHhfb3N0aW1lcl9wZW5kaW5nKHZvaWQpCiB7CiAJdTMyIHBlbmQgPSBfX3Jhd19yZWFkbChTM0NfVkFfVklDMCArIFZJQ19SQVdfU1RBVFVTKTsKLQlyZXR1cm4gcGVuZCAmIDEgPDwgKElSUV9USU1FUjQgLSBTNVBDMVhYX0lSUV9WSUMwKDApKTsKKwlyZXR1cm4gcGVuZCAmIDEgPDwgKElSUV9USU1FUjRfVklDIC0gUzVQQzFYWF9JUlFfVklDMCgwKSk7CiB9CiAKICNkZWZpbmUgVElDS19NQVgJKDB4ZmZmZmZmZmYpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3RpbWV4LmggYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdmZmIxNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvdGltZXguaApAQCAtMCwwICsxLDI0IEBACisvKiBhcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3RpbWV4LmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0M2NDAwIC0gdGltZSBwYXJhbWV0ZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9USU1FWF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVElNRVhfSAorCisvKiBDTE9DS19USUNLX1JBVEUgbmVlZHMgdG8gYmUgZXZhbHVhdGFibGUgYnkgdGhlIGNwcCwgc28gbWFraW5nIGl0CisgKiBhIHZhcmlhYmxlIGlzIHVzZWxlc3MuIEl0IHNlZW1zIGFzIGxvbmcgYXMgd2UgbWFrZSBvdXIgdGltZXJzIGFuCisgKiBleGFjdCBtdWx0aXBsZSBvZiBIWiwgYW55IHZhbHVlIHRoYXQgbWFrZXMgYSAxLT4xIGNvcnJlc3BvbmRlbmNlCisgKiBmb3IgdGhlIHRpbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgdG8vZnJvbSBqaWZmaWVzIGlzIGFjY2VwdGFibGUuCisqLworCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURSAxMjAwMDAwMAorCisjZW5kaWYgLyogX19BU01fQVJDSF9USU1FWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtczVwYzEwMC9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlOWRmNzkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApAQCAtMCwwICsxLDE3IEBACisvKiBhcmNoL2FybS9tYWNoLXM1cGMxMDAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorICoKKyAqIENvcHlyaWdodCAyMDEwIEJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFMzQzY0MDAgdm1hbGxvYyBkZWZpbml0aW9uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVk1BTExPQ19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVk1BTExPQ19ICisKKyNkZWZpbmUgVk1BTExPQ19FTkQJICAoMHhlMDAwMDAwMFVMKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9WTUFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwYzEwMC9zZXR1cC1zZGhjaS5jIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL3NldHVwLXNkaGNpLmMKaW5kZXggNDM4NTk4Ni4uZWE3ZmYxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL3NldHVwLXNkaGNpLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXBjMTAwL3NldHVwLXNkaGNpLmMKQEAgLTI4LDggKzI4LDggQEAKIGNoYXIgKnM1cGMxMDBfaHNtbWNfY2xrc3Jjc1s0XSA9IHsKIAlbMF0gPSAiaHNtbWMiLAogCVsxXSA9ICJoc21tYyIsCi0JLyogWzJdID0gIm1tY19idXMiLCBub3QgeWV0IHN1Y2Nlc2Z1dWx5IHVzZWQgeWV0ICovCi0JLyogWzNdID0gIjQ4bSIsIC0gbm90ZSBub3Qgc3VjY2VzZnVsbHkgdXNlZCB5ZXQgKi8KKwkvKiBbMl0gPSAibW1jX2J1cyIsIG5vdCB5ZXQgc3VjY2Vzc2Z1bGx5IHVzZWQgeWV0ICovCisJLyogWzNdID0gIjQ4bSIsIC0gbm90ZSBub3Qgc3VjY2Vzc2Z1bGx5IHVzZWQgeWV0ICovCiB9OwogCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9LY29uZmlnIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzM2ExYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9LY29uZmlnCkBAIC0wLDAgKzEsNDAgQEAKKyMgYXJjaC9hcm0vbWFjaC1zNXB2MjEwL0tjb25maWcKKyMKKyMgQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisjCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworIworIyBMaWNlbnNlZCB1bmRlciBHUEx2MgorCisjIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIFM1UFYyMTAvUzVQQzExMAorCitpZiBBUkNIX1M1UFYyMTAKKworY29uZmlnIENQVV9TNVBWMjEwCisJYm9vbAorCXNlbGVjdCBQTEFUX1M1UAorCWhlbHAKKwkgIEVuYWJsZSBTNVBWMjEwIENQVSBzdXBwb3J0CisKK2Nob2ljZQorCXByb21wdCAiU2VsZWN0IG1hY2hpbmUgdHlwZSIKKwlkZXBlbmRzIG9uIEFSQ0hfUzVQVjIxMAorCWRlZmF1bHQgTUFDSF9TTURLVjIxMAorCitjb25maWcgTUFDSF9TTURLVjIxMAorCWJvb2wgIlNNREtWMjEwIgorCXNlbGVjdCBDUFVfUzVQVjIxMAorCXNlbGVjdCBBUkNIX1NQQVJTRU1FTV9FTkFCTEUKKwloZWxwCisJICBNYWNoaW5lIHN1cHBvcnQgZm9yIFNhbXN1bmcgU01ES1YyMTAKKworY29uZmlnIE1BQ0hfU01ES0MxMTAKKwlib29sICJTTURLQzExMCIKKwlzZWxlY3QgQ1BVX1M1UFYyMTAKKwlzZWxlY3QgQVJDSF9TUEFSU0VNRU1fRU5BQkxFCisJaGVscAorCSAgTWFjaGluZSBzdXBwb3J0IGZvciBTYW1zdW5nIFNNREtDMTEwCisJICBTNVBDMTEwKE1DUCkgaXMgb25lIG9mIHBhY2thZ2Ugb3B0aW9uIG9mIFM1UFYyMTAKKworZW5kY2hvaWNlCisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGViZjUxYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9NYWtlZmlsZQpAQCAtMCwwICsxLDIwIEBACisjIGFyY2gvYXJtL21hY2gtczVwdjIxMC9NYWtlZmlsZQorIworIyBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyMgCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworIworIyBMaWNlbnNlZCB1bmRlciBHUEx2MgorCitvYmoteQkJCQk6PQorb2JqLW0JCQkJOj0KK29iai1uCQkJCTo9CitvYmotCQkJCTo9CisKKyMgQ29yZSBzdXBwb3J0IGZvciBTNVBWMjEwIHN5c3RlbQorCitvYmotJChDT05GSUdfQ1BVX1M1UFYyMTApCSs9IGNwdS5vIGluaXQubyBjbG9jay5vCisKKyMgbWFjaGluZSBzdXBwb3J0CisKK29iai0kKENPTkZJR19NQUNIX1NNREtWMjEwKQkrPSBtYWNoLXNtZGt2MjEwLm8KK29iai0kKENPTkZJR19NQUNIX1NNREtDMTEwKQkrPSBtYWNoLXNtZGtjMTEwLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL01ha2VmaWxlLmJvb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY5MGFhMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsMiBAQAorICAgenJlbGFkZHIteQk6PSAweDIwMDA4MDAwCitwYXJhbXNfcGh5cy15CTo9IDB4MjAwMDAxMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NjY2FlMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9jbG9jay5jCkBAIC0wLDAgKzEsNDU0IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYyMTAvY2xvY2suYworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQVjIxMCAtIENsb2NrIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1LWZyZXEuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L3BsbC5oPgorI2luY2x1ZGUgPHBsYXQvczVwLWNsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay1jbGtzcmMuaD4KKyNpbmNsdWRlIDxwbGF0L3M1cHYyMTAuaD4KKworc3RhdGljIGludCBzNXB2MjEwX2Nsa19pcDBfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJcmV0dXJuIHM1cF9nYXRlY3RybChTNVBfQ0xLR0FURV9JUDAsIGNsaywgZW5hYmxlKTsKK30KKworc3RhdGljIGludCBzNXB2MjEwX2Nsa19pcDFfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJcmV0dXJuIHM1cF9nYXRlY3RybChTNVBfQ0xLR0FURV9JUDEsIGNsaywgZW5hYmxlKTsKK30KKworc3RhdGljIGludCBzNXB2MjEwX2Nsa19pcDJfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJcmV0dXJuIHM1cF9nYXRlY3RybChTNVBfQ0xLR0FURV9JUDIsIGNsaywgZW5hYmxlKTsKK30KKworc3RhdGljIGludCBzNXB2MjEwX2Nsa19pcDNfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCit7CisJcmV0dXJuIHM1cF9nYXRlY3RybChTNVBfQ0xLR0FURV9JUDMsIGNsaywgZW5hYmxlKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2gyMDAgPSB7CisJLm5hbWUJCT0gImhjbGsyMDAiLAorCS5pZAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19oMTAwID0geworCS5uYW1lCQk9ICJoY2xrMTAwIiwKKwkuaWQJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjbGtfaDE2NiA9IHsKKwkubmFtZQkJPSAiaGNsazE2NiIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX2gxMzMgPSB7CisJLm5hbWUJCT0gImhjbGsxMzMiLAorCS5pZAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wMTAwID0geworCS5uYW1lCQk9ICJwY2xrMTAwIiwKKwkuaWQJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjbGtfcDgzID0geworCS5uYW1lCQk9ICJwY2xrODMiLAorCS5pZAkJPSAtMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wNjYgPSB7CisJLm5hbWUJCT0gInBjbGs2NiIsCisJLmlkCQk9IC0xLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKnN5c19jbGtzW10gPSB7CisJJmNsa19oMjAwLAorCSZjbGtfaDEwMCwKKwkmY2xrX2gxNjYsCisJJmNsa19oMTMzLAorCSZjbGtfcDEwMCwKKwkmY2xrX3A4MywKKwkmY2xrX3A2NgorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgaW5pdF9jbG9ja3NfZGlzYWJsZVtdID0geworCXsKKwkJLm5hbWUJCT0gInJvdCIsCisJCS5pZAkJPSAtMSwKKwkJLnBhcmVudAkJPSAmY2xrX2gxNjYsCisJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAwX2N0cmwsCisJCS5jdHJsYml0CT0gKDE8PDI5KSwKKwl9LCB7CisJCS5uYW1lCQk9ICJvdGciLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oMTMzLAorCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX2lwMV9jdHJsLAorCQkuY3RybGJpdAk9ICgxPDwxNiksCisJfSwgeworCQkubmFtZQkJPSAidXNiLWhvc3QiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19oMTMzLAorCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX2lwMV9jdHJsLAorCQkuY3RybGJpdAk9ICgxPDwxNyksCisJfSwgeworCQkubmFtZQkJPSAibGNkIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfaDE2NiwKKwkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDFfY3RybCwKKwkJLmN0cmxiaXQJPSAoMTw8MCksCisJfSwgeworCQkubmFtZQkJPSAiY2Zjb24iLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrX2gxMzMsCisJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAxX2N0cmwsCisJCS5jdHJsYml0CT0gKDE8PDI1KSwKKwl9LCB7CisJCS5uYW1lCQk9ICJoc21tYyIsCisJCS5pZAkJPSAwLAorCQkucGFyZW50CQk9ICZjbGtfaDEzMywKKwkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDJfY3RybCwKKwkJLmN0cmxiaXQJPSAoMTw8MTYpLAorCX0sIHsKKwkJLm5hbWUJCT0gImhzbW1jIiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa19oMTMzLAorCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX2lwMl9jdHJsLAorCQkuY3RybGJpdAk9ICgxPDwxNyksCisJfSwgeworCQkubmFtZQkJPSAiaHNtbWMiLAorCQkuaWQJCT0gMiwKKwkJLnBhcmVudAkJPSAmY2xrX2gxMzMsCisJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAyX2N0cmwsCisJCS5jdHJsYml0CT0gKDE8PDE4KSwKKwl9LCB7CisJCS5uYW1lCQk9ICJoc21tYyIsCisJCS5pZAkJPSAzLAorCQkucGFyZW50CQk9ICZjbGtfaDEzMywKKwkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDJfY3RybCwKKwkJLmN0cmxiaXQJPSAoMTw8MTkpLAorCX0sIHsKKwkJLm5hbWUJCT0gInN5c3RpbWVyIiwKKwkJLmlkCQk9IC0xLAorCQkucGFyZW50CQk9ICZjbGtfcDY2LAorCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX2lwM19jdHJsLAorCQkuY3RybGJpdAk9ICgxPDwxNiksCisJfSwgeworCQkubmFtZQkJPSAid2F0Y2hkb2ciLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wNjYsCisJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAzX2N0cmwsCisJCS5jdHJsYml0CT0gKDE8PDIyKSwKKwl9LCB7CisJCS5uYW1lCQk9ICJydGMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wNjYsCisJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAzX2N0cmwsCisJCS5jdHJsYml0CT0gKDE8PDE1KSwKKwl9LCB7CisJCS5uYW1lCQk9ICJpMmMiLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrX3A2NiwKKwkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDNfY3RybCwKKwkJLmN0cmxiaXQJPSAoMTw8NyksCisJfSwgeworCQkubmFtZQkJPSAiaTJjIiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa19wNjYsCisJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAzX2N0cmwsCisJCS5jdHJsYml0CT0gKDE8PDgpLAorCX0sIHsKKwkJLm5hbWUJCT0gImkyYyIsCisJCS5pZAkJPSAyLAorCQkucGFyZW50CQk9ICZjbGtfcDY2LAorCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX2lwM19jdHJsLAorCQkuY3RybGJpdAk9ICgxPDw5KSwKKwl9LCB7CisJCS5uYW1lCQk9ICJzcGkiLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrX3A2NiwKKwkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDNfY3RybCwKKwkJLmN0cmxiaXQJPSAoMTw8MTIpLAorCX0sIHsKKwkJLm5hbWUJCT0gInNwaSIsCisJCS5pZAkJPSAxLAorCQkucGFyZW50CQk9ICZjbGtfcDY2LAorCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX2lwM19jdHJsLAorCQkuY3RybGJpdAk9ICgxPDwxMyksCisJfSwgeworCQkubmFtZQkJPSAic3BpIiwKKwkJLmlkCQk9IDIsCisJCS5wYXJlbnQJCT0gJmNsa19wNjYsCisJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAzX2N0cmwsCisJCS5jdHJsYml0CT0gKDE8PDE0KSwKKwl9LCB7CisJCS5uYW1lCQk9ICJ0aW1lcnMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wNjYsCisJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAzX2N0cmwsCisJCS5jdHJsYml0CT0gKDE8PDIzKSwKKwl9LCB7CisJCS5uYW1lCQk9ICJhZGMiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wNjYsCisJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAzX2N0cmwsCisJCS5jdHJsYml0CT0gKDE8PDI0KSwKKwl9LCB7CisJCS5uYW1lCQk9ICJrZXlwYWQiLAorCQkuaWQJCT0gLTEsCisJCS5wYXJlbnQJCT0gJmNsa19wNjYsCisJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAzX2N0cmwsCisJCS5jdHJsYml0CT0gKDE8PDIxKSwKKwl9LCB7CisJCS5uYW1lCQk9ICJpMnNfdjUwIiwKKwkJLmlkCQk9IDAsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX2lwM19jdHJsLAorCQkuY3RybGJpdAk9ICgxPDw0KSwKKwl9LCB7CisJCS5uYW1lCQk9ICJpMnNfdjMyIiwKKwkJLmlkCQk9IDAsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX2lwM19jdHJsLAorCQkuY3RybGJpdAk9ICgxPDw0KSwKKwl9LCB7CisJCS5uYW1lCQk9ICJpMnNfdjMyIiwKKwkJLmlkCQk9IDEsCisJCS5wYXJlbnQJCT0gJmNsa19wLAorCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX2lwM19jdHJsLAorCQkuY3RybGJpdAk9ICgxPDw0KSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IGNsayBpbml0X2Nsb2Nrc1tdID0geworCXsKKwkJLm5hbWUJCT0gInVhcnQiLAorCQkuaWQJCT0gMCwKKwkJLnBhcmVudAkJPSAmY2xrX3A2NiwKKwkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDNfY3RybCwKKwkJLmN0cmxiaXQJPSAoMTw8NyksCisJfSwgeworCQkubmFtZQkJPSAidWFydCIsCisJCS5pZAkJPSAxLAorCQkucGFyZW50CQk9ICZjbGtfcDY2LAorCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX2lwM19jdHJsLAorCQkuY3RybGJpdAk9ICgxPDw4KSwKKwl9LCB7CisJCS5uYW1lCQk9ICJ1YXJ0IiwKKwkJLmlkCQk9IDIsCisJCS5wYXJlbnQJCT0gJmNsa19wNjYsCisJCS5lbmFibGUJCT0gczVwdjIxMF9jbGtfaXAzX2N0cmwsCisJCS5jdHJsYml0CT0gKDE8PDkpLAorCX0sIHsKKwkJLm5hbWUJCT0gInVhcnQiLAorCQkuaWQJCT0gMywKKwkJLnBhcmVudAkJPSAmY2xrX3A2NiwKKwkJLmVuYWJsZQkJPSBzNXB2MjEwX2Nsa19pcDNfY3RybCwKKwkJLmN0cmxiaXQJPSAoMTw8MTApLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX21vdXRfYXBsbCA9IHsKKwkuY2xrCT0geworCQkubmFtZQkJPSAibW91dF9hcGxsIiwKKwkJLmlkCQk9IC0xLAorCX0sCisJLnNvdXJjZXMJPSAmY2xrX3NyY19hcGxsLAorCS5yZWdfc3JjCT0geyAucmVnID0gUzVQX0NMS19TUkMwLCAuc2hpZnQgPSAwLCAuc2l6ZSA9IDEgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfbW91dF9lcGxsID0geworCS5jbGsJPSB7CisJCS5uYW1lCQk9ICJtb3V0X2VwbGwiLAorCQkuaWQJCT0gLTEsCisJfSwKKwkuc291cmNlcwk9ICZjbGtfc3JjX2VwbGwsCisJLnJlZ19zcmMJPSB7IC5yZWcgPSBTNVBfQ0xLX1NSQzAsIC5zaGlmdCA9IDgsIC5zaXplID0gMSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tb3V0X21wbGwgPSB7CisJLmNsayA9IHsKKwkJLm5hbWUJCT0gIm1vdXRfbXBsbCIsCisJCS5pZAkJPSAtMSwKKwl9LAorCS5zb3VyY2VzCT0gJmNsa19zcmNfbXBsbCwKKwkucmVnX3NyYwk9IHsgLnJlZyA9IFM1UF9DTEtfU1JDMCwgLnNoaWZ0ID0gNCwgLnNpemUgPSAxIH0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqY2xrc2V0X3VhcnRfbGlzdFtdID0geworCVs2XSA9ICZjbGtfbW91dF9tcGxsLmNsaywKKwlbN10gPSAmY2xrX21vdXRfZXBsbC5jbGssCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19zb3VyY2VzIGNsa3NldF91YXJ0ID0geworCS5zb3VyY2VzCT0gY2xrc2V0X3VhcnRfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrc2V0X3VhcnRfbGlzdCksCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrc3Jjc1tdID0geworCXsKKwkJLmNsawk9IHsKKwkJCS5uYW1lCQk9ICJ1Y2xrMSIsCisJCQkuaWQJCT0gLTEsCisJCQkuY3RybGJpdAk9ICgxPDwxNyksCisJCQkuZW5hYmxlCQk9IHM1cHYyMTBfY2xrX2lwM19jdHJsLAorCQl9LAorCQkuc291cmNlcyA9ICZjbGtzZXRfdWFydCwKKwkJLnJlZ19zcmMgPSB7IC5yZWcgPSBTNVBfQ0xLX1NSQzQsIC5zaGlmdCA9IDE2LCAuc2l6ZSA9IDQgfSwKKwkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTNVBfQ0xLX0RJVjQsIC5zaGlmdCA9IDE2LCAuc2l6ZSA9IDQgfSwKKwl9Cit9OworCisvKiBDbG9jayBpbml0aWFsaXNhdGlvbiBjb2RlICovCitzdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgKmluaXRfcGFyZW50c1tdID0geworCSZjbGtfbW91dF9hcGxsLAorCSZjbGtfbW91dF9lcGxsLAorCSZjbGtfbW91dF9tcGxsLAorfTsKKworI2RlZmluZSBHRVRfRElWKGNsaywgZmllbGQpICgoKChjbGspICYgZmllbGQjI19NQVNLKSA+PiBmaWVsZCMjX1NISUZUKSArIDEpCisKK3ZvaWQgX19pbml0X29yX2NwdWZyZXEgczVwdjIxMF9zZXR1cF9jbG9ja3Modm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICp4dGFsX2NsazsKKwl1bnNpZ25lZCBsb25nIHh0YWw7CisJdW5zaWduZWQgbG9uZyBhcm1jbGs7CisJdW5zaWduZWQgbG9uZyBoY2xrMjAwOworCXVuc2lnbmVkIGxvbmcgaGNsazE2NjsKKwl1bnNpZ25lZCBsb25nIGhjbGsxMzM7CisJdW5zaWduZWQgbG9uZyBwY2xrMTAwOworCXVuc2lnbmVkIGxvbmcgcGNsazgzOworCXVuc2lnbmVkIGxvbmcgcGNsazY2OworCXVuc2lnbmVkIGxvbmcgYXBsbDsKKwl1bnNpZ25lZCBsb25nIG1wbGw7CisJdW5zaWduZWQgbG9uZyBlcGxsOworCXVuc2lnbmVkIGludCBwdHI7CisJdTMyIGNsa2RpdjAsIGNsa2RpdjE7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlZ2lzdGVyaW5nIGNsb2Nrc1xuIiwgX19mdW5jX18pOworCisJY2xrZGl2MCA9IF9fcmF3X3JlYWRsKFM1UF9DTEtfRElWMCk7CisJY2xrZGl2MSA9IF9fcmF3X3JlYWRsKFM1UF9DTEtfRElWMSk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGNsa2RpdjAgPSAlMDh4LCBjbGtkaXYxID0gJTA4eFxuIiwKKwkJCQlfX2Z1bmNfXywgY2xrZGl2MCwgY2xrZGl2MSk7CisKKwl4dGFsX2NsayA9IGNsa19nZXQoTlVMTCwgInh0YWwiKTsKKwlCVUdfT04oSVNfRVJSKHh0YWxfY2xrKSk7CisKKwl4dGFsID0gY2xrX2dldF9yYXRlKHh0YWxfY2xrKTsKKwljbGtfcHV0KHh0YWxfY2xrKTsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogeHRhbCBpcyAlbGRcbiIsIF9fZnVuY19fLCB4dGFsKTsKKworCWFwbGwgPSBzNXBfZ2V0X3BsbDQ1eHgoeHRhbCwgX19yYXdfcmVhZGwoUzVQX0FQTExfQ09OKSwgcGxsXzQ1MDgpOworCW1wbGwgPSBzNXBfZ2V0X3BsbDQ1eHgoeHRhbCwgX19yYXdfcmVhZGwoUzVQX01QTExfQ09OKSwgcGxsXzQ1MDIpOworCWVwbGwgPSBzNXBfZ2V0X3BsbDQ1eHgoeHRhbCwgX19yYXdfcmVhZGwoUzVQX0VQTExfQ09OKSwgcGxsXzQ1MDApOworCisJcHJpbnRrKEtFUk5fSU5GTyAiUzVQVjIxMDogUExMIHNldHRpbmdzLCBBPSVsZCwgTT0lbGQsIEU9JWxkIiwKKwkJCWFwbGwsIG1wbGwsIGVwbGwpOworCisJYXJtY2xrID0gYXBsbCAvIEdFVF9ESVYoY2xrZGl2MCwgUzVQX0NMS0RJVjBfQVBMTCk7CisJaWYgKF9fcmF3X3JlYWRsKFM1UF9DTEtfU1JDMCkgJiBTNVBfQ0xLU1JDMF9NVVgyMDBfTUFTSykKKwkJaGNsazIwMCA9IG1wbGwgLyBHRVRfRElWKGNsa2RpdjAsIFM1UF9DTEtESVYwX0hDTEsyMDApOworCWVsc2UKKwkJaGNsazIwMCA9IGFybWNsayAvIEdFVF9ESVYoY2xrZGl2MCwgUzVQX0NMS0RJVjBfSENMSzIwMCk7CisKKwlpZiAoX19yYXdfcmVhZGwoUzVQX0NMS19TUkMwKSAmIFM1UF9DTEtTUkMwX01VWDE2Nl9NQVNLKSB7CisJCWhjbGsxNjYgPSBhcGxsIC8gR0VUX0RJVihjbGtkaXYwLCBTNVBfQ0xLRElWMF9BMk0pOworCQloY2xrMTY2ID0gaGNsazE2NiAvIEdFVF9ESVYoY2xrZGl2MCwgUzVQX0NMS0RJVjBfSENMSzE2Nik7CisJfSBlbHNlCisJCWhjbGsxNjYgPSBtcGxsIC8gR0VUX0RJVihjbGtkaXYwLCBTNVBfQ0xLRElWMF9IQ0xLMTY2KTsKKworCWlmIChfX3Jhd19yZWFkbChTNVBfQ0xLX1NSQzApICYgUzVQX0NMS1NSQzBfTVVYMTMzX01BU0spIHsKKwkJaGNsazEzMyA9IGFwbGwgLyBHRVRfRElWKGNsa2RpdjAsIFM1UF9DTEtESVYwX0EyTSk7CisJCWhjbGsxMzMgPSBoY2xrMTMzIC8gR0VUX0RJVihjbGtkaXYwLCBTNVBfQ0xLRElWMF9IQ0xLMTMzKTsKKwl9IGVsc2UKKwkJaGNsazEzMyA9IG1wbGwgLyBHRVRfRElWKGNsa2RpdjAsIFM1UF9DTEtESVYwX0hDTEsxMzMpOworCisJcGNsazEwMCA9IGhjbGsyMDAgLyBHRVRfRElWKGNsa2RpdjAsIFM1UF9DTEtESVYwX1BDTEsxMDApOworCXBjbGs4MyA9IGhjbGsxNjYgLyBHRVRfRElWKGNsa2RpdjAsIFM1UF9DTEtESVYwX1BDTEs4Myk7CisJcGNsazY2ID0gaGNsazEzMyAvIEdFVF9ESVYoY2xrZGl2MCwgUzVQX0NMS0RJVjBfUENMSzY2KTsKKworCXByaW50ayhLRVJOX0lORk8gIlM1UFYyMTA6IEFSTUNMSz0lbGQsIEhDTEtNPSVsZCwgSENMS0Q9JWxkLCBcCisJCQlIQ0xLUD0lbGQsIFBDTEtNPSVsZCwgUENMS0Q9JWxkLCBQQ0xLUD0lbGRcbiIsCisJICAgICAgIGFybWNsaywgaGNsazIwMCwgaGNsazE2NiwgaGNsazEzMywgcGNsazEwMCwgcGNsazgzLCBwY2xrNjYpOworCisJY2xrX2ZvdXRfYXBsbC5yYXRlID0gYXBsbDsKKwljbGtfZm91dF9tcGxsLnJhdGUgPSBtcGxsOworCWNsa19mb3V0X2VwbGwucmF0ZSA9IGVwbGw7CisKKwljbGtfZi5yYXRlID0gYXJtY2xrOworCWNsa19oLnJhdGUgPSBoY2xrMTMzOworCWNsa19wLnJhdGUgPSBwY2xrNjY7CisJY2xrX3A2Ni5yYXRlID0gcGNsazY2OworCWNsa19wODMucmF0ZSA9IHBjbGs4MzsKKwljbGtfaDEzMy5yYXRlID0gaGNsazEzMzsKKwljbGtfaDE2Ni5yYXRlID0gaGNsazE2NjsKKwljbGtfaDIwMC5yYXRlID0gaGNsazIwMDsKKworCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShpbml0X3BhcmVudHMpOyBwdHIrKykKKwkJczNjX3NldF9jbGtzcmMoaW5pdF9wYXJlbnRzW3B0cl0sIHRydWUpOworCisJZm9yIChwdHIgPSAwOyBwdHIgPCBBUlJBWV9TSVpFKGNsa3NyY3MpOyBwdHIrKykKKwkJczNjX3NldF9jbGtzcmMoJmNsa3NyY3NbcHRyXSwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzW10gX19pbml0ZGF0YSA9IHsKKwkmY2xrX21vdXRfZXBsbC5jbGssCisJJmNsa19tb3V0X21wbGwuY2xrLAorfTsKKwordm9pZCBfX2luaXQgczVwdjIxMF9yZWdpc3Rlcl9jbG9ja3Modm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICpjbGtwOworCWludCByZXQ7CisJaW50IHB0cjsKKworCXJldCA9IHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2tzKGNsa3MsIEFSUkFZX1NJWkUoY2xrcykpOworCWlmIChyZXQgPiAwKQorCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciAldSBjbG9ja3NcbiIsIHJldCk7CisKKwlzM2NfcmVnaXN0ZXJfY2xrc3JjKGNsa3NyY3MsIEFSUkFZX1NJWkUoY2xrc3JjcykpOworCXMzY19yZWdpc3Rlcl9jbG9ja3MoaW5pdF9jbG9ja3MsIEFSUkFZX1NJWkUoaW5pdF9jbG9ja3MpKTsKKworCXJldCA9IHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2tzKHN5c19jbGtzLCBBUlJBWV9TSVpFKHN5c19jbGtzKSk7CisJaWYgKHJldCA+IDApCisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN5c3RlbSBjbG9ja3NcbiIpOworCisJY2xrcCA9IGluaXRfY2xvY2tzX2Rpc2FibGU7CisJZm9yIChwdHIgPSAwOyBwdHIgPCBBUlJBWV9TSVpFKGluaXRfY2xvY2tzX2Rpc2FibGUpOyBwdHIrKywgY2xrcCsrKSB7CisJCXJldCA9IHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soY2xrcCk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBjbG9jayAlcyAoJWQpXG4iLAorCQkJICAgICAgIGNsa3AtPm5hbWUsIHJldCk7CisJCX0KKwkJKGNsa3AtPmVuYWJsZSkoY2xrcCwgMCk7CisJfQorCisJczNjX3B3bWNsa19pbml0KCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvY3B1LmMgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvY3B1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUwZjhmZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9jcHUuYwpAQCAtMCwwICsxLDEyNiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2NwdS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgorCisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKyNpbmNsdWRlIDxwbGF0L2RldnMuaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9zNXB2MjEwLmg+CisKKy8qIEluaXRpYWwgSU8gbWFwcGluZ3MgKi8KKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBzNXB2MjEwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVM1UF9WQV9TWVNUSU1FUiwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFM1UFYyMTBfUEFfU1lTVElNRVIpLAorCQkubGVuZ3RoCQk9IFNaXzFNLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwgeworCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVZBX1ZJQzIsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTNVBWMjEwX1BBX1ZJQzIpLAorCQkubGVuZ3RoCQk9IFNaXzE2SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylWQV9WSUMzLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzVQVjIxMF9QQV9WSUMzKSwKKwkJLmxlbmd0aAkJPSBTWl8xNkssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzVQX1ZBX1NST01DLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzVQVjIxMF9QQV9TUk9NQyksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9Cit9OworCitzdGF0aWMgdm9pZCBzNXB2MjEwX2lkbGUodm9pZCkKK3sKKwlpZiAoIW5lZWRfcmVzY2hlZCgpKQorCQljcHVfZG9faWRsZSgpOworCisJbG9jYWxfaXJxX2VuYWJsZSgpOworfQorCisvKiBzNXB2MjEwX21hcF9pbworICoKKyAqIHJlZ2lzdGVyIHRoZSBzdGFuZGFyZCBjcHUgSU8gYXJlYXMKKyovCisKK3ZvaWQgX19pbml0IHM1cHYyMTBfbWFwX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KHM1cHYyMTBfaW9kZXNjLCBBUlJBWV9TSVpFKHM1cHYyMTBfaW9kZXNjKSk7Cit9CisKK3ZvaWQgX19pbml0IHM1cHYyMTBfaW5pdF9jbG9ja3MoaW50IHh0YWwpCit7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbml0aWFsaXppbmcgY2xvY2tzXG4iLCBfX2Z1bmNfXyk7CisKKwlzM2MyNHh4X3JlZ2lzdGVyX2Jhc2VjbG9ja3MoeHRhbCk7CisJczVwX3JlZ2lzdGVyX2Nsb2Nrcyh4dGFsKTsKKwlzNXB2MjEwX3JlZ2lzdGVyX2Nsb2NrcygpOworCXM1cHYyMTBfc2V0dXBfY2xvY2tzKCk7Cit9CisKK3ZvaWQgX19pbml0IHM1cHYyMTBfaW5pdF9pcnEodm9pZCkKK3sKKwl1MzIgdmljWzRdOwkvKiBTNVBWMjEwIHN1cHBvcnRzIDQgVklDICovCisKKwkvKiBBbGwgdGhlIFZJQ3MgYXJlIGZ1bGx5IHBvcHVsYXRlZC4gKi8KKwl2aWNbMF0gPSB+MDsKKwl2aWNbMV0gPSB+MDsKKwl2aWNbMl0gPSB+MDsKKwl2aWNbM10gPSB+MDsKKworCXM1cF9pbml0X2lycSh2aWMsIEFSUkFZX1NJWkUodmljKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHM1cHYyMTBfc3lzY2xhc3MgPSB7CisJLm5hbWUJPSAiczVwdjIxMC1jb3JlIiwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX2RldmljZSBzNXB2MjEwX3N5c2RldiA9IHsKKwkuY2xzCT0gJnM1cHYyMTBfc3lzY2xhc3MsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzNXB2MjEwX2NvcmVfaW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnM1cHYyMTBfc3lzY2xhc3MpOworfQorCitjb3JlX2luaXRjYWxsKHM1cHYyMTBfY29yZV9pbml0KTsKKworaW50IF9faW5pdCBzNXB2MjEwX2luaXQodm9pZCkKK3sKKwlwcmludGsoS0VSTl9JTkZPICJTNVBWMjEwOiBJbml0aWFsaXppbmcgYXJjaGl0ZWN0dXJlXG4iKTsKKworCS8qIHNldCBpZGxlIGZ1bmN0aW9uICovCisJcG1faWRsZSA9IHM1cHYyMTBfaWRsZTsKKworCXJldHVybiBzeXNkZXZfcmVnaXN0ZXIoJnM1cHYyMTBfc3lzZGV2KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODcyZjVjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsNDIgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1zM2M2NDAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKy8qIHB1bGwgaW4gdGhlIHJlbGV2YW50IHJlZ2lzdGVyIGFuZCBtYXAgZmlsZXMuICovCisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KKworCS8qIG5vdGUsIGZvciB0aGUgYm9vdCBwcm9jZXNzIHRvIHdvcmsgd2UgaGF2ZSB0byBrZWVwIHRoZSBVQVJUCisJICogdmlydHVhbCBhZGRyZXNzIGFsaWduZWQgdG8gYW4gMU1pQiBib3VuZGFyeSBmb3IgdGhlIEwxCisJICogbWFwcGluZyB0aGUgaGVhZCBjb2RlIG1ha2VzLiBXZSBrZWVwIHRoZSBVQVJUIHZpcnR1YWwgYWRkcmVzcworCSAqIGFsaWduZWQgYW5kIGFkZCBpbiB0aGUgb2Zmc2V0IHdoZW4gd2UgbG9hZCB0aGUgdmFsdWUgaGVyZS4KKwkgKi8KKworCS5tYWNybyBhZGRydWFydCwgcngsIHRtcAorCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAorCQl0c3QJXHJ4LCAjMQorCQlsZHJlcQlccngsID0gUzNDX1BBX1VBUlQKKwkJbGRybmUJXHJ4LCA9IFMzQ19WQV9VQVJUCisjaWYgQ09ORklHX0RFQlVHX1MzQ19VQVJUICE9IDAKKwkJYWRkCVxyeCwgXHJ4LCAjKDB4NDAwICogQ09ORklHX0RFQlVHX1MzQ19VQVJUKQorI2VuZGlmCisJLmVuZG0KKworI2RlZmluZSBmaWZvX2Z1bGwgZmlmb19mdWxsX3M1cHYyMTAKKyNkZWZpbmUgZmlmb19sZXZlbCBmaWZvX2xldmVsX3M1cHYyMTAKKworLyogaW5jbHVkZSB0aGUgcmVzZXQgb2YgdGhlIGNvZGUgd2hpY2ggd2lsbCBkbyB0aGUgd29yaywgd2UncmUgb25seQorICogY29tcGlsaW5nIGZvciBhIHNpbmdsZSBjcHUgcHJvY2Vzc29yIHR5cGUgc28gdGhlIGRlZmF1bHQgb2YgczNjMjQ0MAorICogd2lsbCBiZSBmaW5lIHdpdGggdXMuCisgKi8KKworI2luY2x1ZGUgPHBsYXQvZGVidWctbWFjcm8uUz4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYWE0MWFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsNTQgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogTG93LWxldmVsIElSUSBoZWxwZXIgbWFjcm9zIGZvciB0aGUgU2Ftc3VuZyBTNVBWMjEwCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxwbGF0L2lycXMuaD4KKworCS5tYWNybwlkaXNhYmxlX2ZpcQorCS5lbmRtCisKKwkubWFjcm8JZ2V0X2lycW5yX3ByZWFtYmxlLCBiYXNlLCB0bXAKKwlsZHIJXGJhc2UsID1WQV9WSUMwCisJLmVuZG0KKworCS5tYWNybwlhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCisJLmVuZG0KKworCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKworCUAgY2hlY2sgdGhlIHZpYzAKKwltb3YJXGlycW5yLCAjIFM1UF9JUlFfT0ZGU0VUICsgMzEKKwlsZHIJXGlycXN0YXQsIFsgXGJhc2UsICMgVklDX0lSUV9TVEFUVVMgXQorCXRlcQlcaXJxc3RhdCwgIzAKKworCUAgb3RoZXJ3aXNlIHRyeSB2aWMxCisJYWRkZXEJXHRtcCwgXGJhc2UsICMoVkFfVklDMSAtIFZBX1ZJQzApCisJYWRkZXEJXGlycW5yLCBcaXJxbnIsICMzMgorCWxkcmVxCVxpcnFzdGF0LCBbIFx0bXAsICMgVklDX0lSUV9TVEFUVVMgXQorCXRlcWVxCVxpcnFzdGF0LCAjMAorCisJQCBvdGhlcndpc2UgdHJ5IHZpYzIKKwlhZGRlcQlcdG1wLCBcYmFzZSwgIyhWQV9WSUMyIC0gVkFfVklDMCkKKwlhZGRlcQlcaXJxbnIsIFxpcnFuciwgIzMyCisJbGRyZXEJXGlycXN0YXQsIFsgXHRtcCwgIyBWSUNfSVJRX1NUQVRVUyBdCisJdGVxZXEJXGlycXN0YXQsICMwCisKKwlAIG90aGVyd2lzZSB0cnkgdmljMworCWFkZGVxCVx0bXAsIFxiYXNlLCAjKFZBX1ZJQzMgLSBWQV9WSUMwKQorCWFkZGVxCVxpcnFuciwgXGlycW5yLCAjMzIKKwlsZHJlcQlcaXJxc3RhdCwgWyBcdG1wLCAjIFZJQ19JUlFfU1RBVFVTIF0KKwl0ZXFlcQlcaXJxc3RhdCwgIzAKKworCWNsem5lCVxpcnFzdGF0LCBcaXJxc3RhdAorCXN1Ym5lCVxpcnFuciwgXGlycW5yLCBcaXJxc3RhdAorCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL2dwaW8uaCBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzM2IwMjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMCwwICsxLDEyOSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9ncGlvLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFM1UFYyMTAgLSBHUElPIGxpYiBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9HUElPX0gKKyNkZWZpbmUgX19BU01fQVJDSF9HUElPX0ggX19GSUxFX18KKworI2RlZmluZSBncGlvX2dldF92YWx1ZQlfX2dwaW9fZ2V0X3ZhbHVlCisjZGVmaW5lIGdwaW9fc2V0X3ZhbHVlCV9fZ3Bpb19zZXRfdmFsdWUKKyNkZWZpbmUgZ3Bpb19jYW5zbGVlcAlfX2dwaW9fY2Fuc2xlZXAKKyNkZWZpbmUgZ3Bpb190b19pcnEJX19ncGlvX3RvX2lycQorCisvKiBHUElPIGJhbmsgc2l6ZXMgKi8KKyNkZWZpbmUgUzVQVjIxMF9HUElPX0EwX05SCSg4KQorI2RlZmluZSBTNVBWMjEwX0dQSU9fQTFfTlIJKDQpCisjZGVmaW5lIFM1UFYyMTBfR1BJT19CX05SCSg4KQorI2RlZmluZSBTNVBWMjEwX0dQSU9fQzBfTlIJKDUpCisjZGVmaW5lIFM1UFYyMTBfR1BJT19DMV9OUgkoNSkKKyNkZWZpbmUgUzVQVjIxMF9HUElPX0QwX05SCSg0KQorI2RlZmluZSBTNVBWMjEwX0dQSU9fRDFfTlIJKDYpCisjZGVmaW5lIFM1UFYyMTBfR1BJT19FMF9OUgkoOCkKKyNkZWZpbmUgUzVQVjIxMF9HUElPX0UxX05SCSg1KQorI2RlZmluZSBTNVBWMjEwX0dQSU9fRjBfTlIJKDgpCisjZGVmaW5lIFM1UFYyMTBfR1BJT19GMV9OUgkoOCkKKyNkZWZpbmUgUzVQVjIxMF9HUElPX0YyX05SCSg4KQorI2RlZmluZSBTNVBWMjEwX0dQSU9fRjNfTlIJKDYpCisjZGVmaW5lIFM1UFYyMTBfR1BJT19HMF9OUgkoNykKKyNkZWZpbmUgUzVQVjIxMF9HUElPX0cxX05SCSg3KQorI2RlZmluZSBTNVBWMjEwX0dQSU9fRzJfTlIJKDcpCisjZGVmaW5lIFM1UFYyMTBfR1BJT19HM19OUgkoNykKKyNkZWZpbmUgUzVQVjIxMF9HUElPX0gwX05SCSg4KQorI2RlZmluZSBTNVBWMjEwX0dQSU9fSDFfTlIJKDgpCisjZGVmaW5lIFM1UFYyMTBfR1BJT19IMl9OUgkoOCkKKyNkZWZpbmUgUzVQVjIxMF9HUElPX0gzX05SCSg4KQorI2RlZmluZSBTNVBWMjEwX0dQSU9fSV9OUgkoNykKKyNkZWZpbmUgUzVQVjIxMF9HUElPX0owX05SCSg4KQorI2RlZmluZSBTNVBWMjEwX0dQSU9fSjFfTlIJKDYpCisjZGVmaW5lIFM1UFYyMTBfR1BJT19KMl9OUgkoOCkKKyNkZWZpbmUgUzVQVjIxMF9HUElPX0ozX05SCSg4KQorI2RlZmluZSBTNVBWMjEwX0dQSU9fSjRfTlIJKDUpCisKKy8qIEdQSU8gYmFuayBudW1iZXJzICovCisKKy8qIENPTkZJR19TM0NfR1BJT19TUEFDRSBhbGxvd3MgdGhlIHVzZXIgdG8gc2VsZWN0IGV4dHJhCisgKiBzcGFjZSBmb3IgZGVidWdnaW5nIHB1cnBvc2VzIHNvIHRoYXQgYW55IGFjY2lkZW50YWwKKyAqIGNoYW5nZSBmcm9tIG9uZSBncGlvIGJhbmsgdG8gYW5vdGhlciBjYW4gYmUgY2F1Z2h0LgorKi8KKworI2RlZmluZSBTNVBWMjEwX0dQSU9fTkVYVChfX2dwaW8pIFwKKwkoKF9fZ3BpbyMjX1NUQVJUKSArIChfX2dwaW8jI19OUikgKyBDT05GSUdfUzNDX0dQSU9fU1BBQ0UgKyAxKQorCitlbnVtIHM1cF9ncGlvX251bWJlciB7CisJUzVQVjIxMF9HUElPX0EwX1NUQVJUCT0gMCwKKwlTNVBWMjEwX0dQSU9fQTFfU1RBUlQJPSBTNVBWMjEwX0dQSU9fTkVYVChTNVBWMjEwX0dQSU9fQTApLAorCVM1UFYyMTBfR1BJT19CX1NUQVJUIAk9IFM1UFYyMTBfR1BJT19ORVhUKFM1UFYyMTBfR1BJT19BMSksCisJUzVQVjIxMF9HUElPX0MwX1NUQVJUCT0gUzVQVjIxMF9HUElPX05FWFQoUzVQVjIxMF9HUElPX0IpLAorCVM1UFYyMTBfR1BJT19DMV9TVEFSVAk9IFM1UFYyMTBfR1BJT19ORVhUKFM1UFYyMTBfR1BJT19DMCksCisJUzVQVjIxMF9HUElPX0QwX1NUQVJUCT0gUzVQVjIxMF9HUElPX05FWFQoUzVQVjIxMF9HUElPX0MxKSwKKwlTNVBWMjEwX0dQSU9fRDFfU1RBUlQJPSBTNVBWMjEwX0dQSU9fTkVYVChTNVBWMjEwX0dQSU9fRDApLAorCVM1UFYyMTBfR1BJT19FMF9TVEFSVAk9IFM1UFYyMTBfR1BJT19ORVhUKFM1UFYyMTBfR1BJT19EMSksCisJUzVQVjIxMF9HUElPX0UxX1NUQVJUCT0gUzVQVjIxMF9HUElPX05FWFQoUzVQVjIxMF9HUElPX0UwKSwKKwlTNVBWMjEwX0dQSU9fRjBfU1RBUlQJPSBTNVBWMjEwX0dQSU9fTkVYVChTNVBWMjEwX0dQSU9fRTEpLAorCVM1UFYyMTBfR1BJT19GMV9TVEFSVAk9IFM1UFYyMTBfR1BJT19ORVhUKFM1UFYyMTBfR1BJT19GMCksCisJUzVQVjIxMF9HUElPX0YyX1NUQVJUCT0gUzVQVjIxMF9HUElPX05FWFQoUzVQVjIxMF9HUElPX0YxKSwKKwlTNVBWMjEwX0dQSU9fRjNfU1RBUlQJPSBTNVBWMjEwX0dQSU9fTkVYVChTNVBWMjEwX0dQSU9fRjIpLAorCVM1UFYyMTBfR1BJT19HMF9TVEFSVAk9IFM1UFYyMTBfR1BJT19ORVhUKFM1UFYyMTBfR1BJT19GMyksCisJUzVQVjIxMF9HUElPX0cxX1NUQVJUCT0gUzVQVjIxMF9HUElPX05FWFQoUzVQVjIxMF9HUElPX0cwKSwKKwlTNVBWMjEwX0dQSU9fRzJfU1RBUlQJPSBTNVBWMjEwX0dQSU9fTkVYVChTNVBWMjEwX0dQSU9fRzEpLAorCVM1UFYyMTBfR1BJT19HM19TVEFSVAk9IFM1UFYyMTBfR1BJT19ORVhUKFM1UFYyMTBfR1BJT19HMiksCisJUzVQVjIxMF9HUElPX0gwX1NUQVJUCT0gUzVQVjIxMF9HUElPX05FWFQoUzVQVjIxMF9HUElPX0czKSwKKwlTNVBWMjEwX0dQSU9fSDFfU1RBUlQJPSBTNVBWMjEwX0dQSU9fTkVYVChTNVBWMjEwX0dQSU9fSDApLAorCVM1UFYyMTBfR1BJT19IMl9TVEFSVAk9IFM1UFYyMTBfR1BJT19ORVhUKFM1UFYyMTBfR1BJT19IMSksCisJUzVQVjIxMF9HUElPX0gzX1NUQVJUCT0gUzVQVjIxMF9HUElPX05FWFQoUzVQVjIxMF9HUElPX0gyKSwKKwlTNVBWMjEwX0dQSU9fSV9TVEFSVAk9IFM1UFYyMTBfR1BJT19ORVhUKFM1UFYyMTBfR1BJT19IMyksCisJUzVQVjIxMF9HUElPX0owX1NUQVJUCT0gUzVQVjIxMF9HUElPX05FWFQoUzVQVjIxMF9HUElPX0kpLAorCVM1UFYyMTBfR1BJT19KMV9TVEFSVAk9IFM1UFYyMTBfR1BJT19ORVhUKFM1UFYyMTBfR1BJT19KMCksCisJUzVQVjIxMF9HUElPX0oyX1NUQVJUCT0gUzVQVjIxMF9HUElPX05FWFQoUzVQVjIxMF9HUElPX0oxKSwKKwlTNVBWMjEwX0dQSU9fSjNfU1RBUlQJPSBTNVBWMjEwX0dQSU9fTkVYVChTNVBWMjEwX0dQSU9fSjIpLAorCVM1UFYyMTBfR1BJT19KNF9TVEFSVAk9IFM1UFYyMTBfR1BJT19ORVhUKFM1UFYyMTBfR1BJT19KMyksCit9OworCisvKiBTNVBWMjEwIEdQSU8gbnVtYmVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIFM1UFYyMTBfR1BBMChfbnIpCShTNVBWMjEwX0dQSU9fQTBfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQVjIxMF9HUEExKF9ucikJKFM1UFYyMTBfR1BJT19BMV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBWMjEwX0dQQihfbnIpCShTNVBWMjEwX0dQSU9fQl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBWMjEwX0dQQzAoX25yKQkoUzVQVjIxMF9HUElPX0MwX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UFYyMTBfR1BDMShfbnIpCShTNVBWMjEwX0dQSU9fQzFfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQVjIxMF9HUEQwKF9ucikJKFM1UFYyMTBfR1BJT19EMF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBWMjEwX0dQRDEoX25yKQkoUzVQVjIxMF9HUElPX0QxX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UFYyMTBfR1BFMChfbnIpCShTNVBWMjEwX0dQSU9fRTBfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQVjIxMF9HUEUxKF9ucikJKFM1UFYyMTBfR1BJT19FMV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBWMjEwX0dQRjAoX25yKQkoUzVQVjIxMF9HUElPX0YwX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UFYyMTBfR1BGMShfbnIpCShTNVBWMjEwX0dQSU9fRjFfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQVjIxMF9HUEYyKF9ucikJKFM1UFYyMTBfR1BJT19GMl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBWMjEwX0dQRjMoX25yKQkoUzVQVjIxMF9HUElPX0YzX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UFYyMTBfR1BHMChfbnIpCShTNVBWMjEwX0dQSU9fRzBfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQVjIxMF9HUEcxKF9ucikJKFM1UFYyMTBfR1BJT19HMV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBWMjEwX0dQRzIoX25yKQkoUzVQVjIxMF9HUElPX0cyX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UFYyMTBfR1BHMyhfbnIpCShTNVBWMjEwX0dQSU9fRzNfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQVjIxMF9HUEgwKF9ucikJKFM1UFYyMTBfR1BJT19IMF9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBWMjEwX0dQSDEoX25yKQkoUzVQVjIxMF9HUElPX0gxX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UFYyMTBfR1BIMihfbnIpCShTNVBWMjEwX0dQSU9fSDJfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQVjIxMF9HUEgzKF9ucikJKFM1UFYyMTBfR1BJT19IM19TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBWMjEwX0dQSShfbnIpCShTNVBWMjEwX0dQSU9fSV9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBWMjEwX0dQSjAoX25yKQkoUzVQVjIxMF9HUElPX0owX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UFYyMTBfR1BKMShfbnIpCShTNVBWMjEwX0dQSU9fSjFfU1RBUlQgKyAoX25yKSkKKyNkZWZpbmUgUzVQVjIxMF9HUEoyKF9ucikJKFM1UFYyMTBfR1BJT19KMl9TVEFSVCArIChfbnIpKQorI2RlZmluZSBTNVBWMjEwX0dQSjMoX25yKQkoUzVQVjIxMF9HUElPX0ozX1NUQVJUICsgKF9ucikpCisjZGVmaW5lIFM1UFYyMTBfR1BKNChfbnIpCShTNVBWMjEwX0dQSU9fSjRfU1RBUlQgKyAoX25yKSkKKworLyogdGhlIGVuZCBvZiB0aGUgUzVQVjIxMCBzcGVjaWZpYyBncGlvcyAqLworI2RlZmluZSBTNVBWMjEwX0dQSU9fRU5ECShTNVBWMjEwX0dQSjQoUzVQVjIxMF9HUElPX0o0X05SKSArIDEpCisjZGVmaW5lIFMzQ19HUElPX0VORAkJUzVQVjIxMF9HUElPX0VORAorCisvKiBkZWZpbmUgdGhlIG51bWJlciBvZiBncGlvcyB3ZSBuZWVkIHRvIHRoZSBvbmUgYWZ0ZXIgdGhlIEdQSjQoKSByYW5nZSAqLworI2RlZmluZSBBUkNIX05SX0dQSU9TCQkoUzVQVjIxMF9HUEo0KFM1UFYyMTBfR1BJT19KNF9OUikgKwlcCisJCQkJIENPTkZJR19TQU1TVU5HX0dQSU9fRVhUUkEgKyAxKQorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgorCisjZW5kaWYgLyogX19BU01fQVJDSF9HUElPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWRhN2EzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMTggQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQVjIxMCAtIEhhcmR3YXJlIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19BU01fQVJDSF9IQVJEV0FSRV9IIF9fRklMRV9fCisKKy8qIGN1cnJlbnRseSBub3RoaW5nIGhlcmUsIHBsYWNlaG9sZGVyICovCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0hBUkRXQVJFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWI5ZDU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9pby5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvaW8uaAorICoKKyAqIENvcHlyaWdodCAyMDA4LTIwMTAgQmVuIERvb2tzIDxiZW4tbGludXhAZmx1ZmYub3JnPgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogQmFzZWQgb24gYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC9pby5oCisgKgorICogRGVmYXVsdCBJTyByb3V0aW5lcyBmb3IgUzVQVjIxMAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKKyNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSCBfX0ZJTEVfXworCisvKiBObyBjdXJyZW50IElTQS9QQ0kgYnVzIHN1cHBvcnQuICovCisjZGVmaW5lIF9faW8oYSkJCV9fdHlwZXNhZmVfaW8oYSkKKyNkZWZpbmUgX19tZW1fcGNpKGEpCShhKQorCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUICgweEZGRkZGRkZGKQorCisjZW5kaWYgLyogX19BU01fQVJNX0FSQ0hfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9pcnFzLmggYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmM1MTc1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTAsMCArMSwxNDYgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvaXJxcy5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTNVBWMjEwIC0gSVJRIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9JUlFTX0gKKyNkZWZpbmUgX19BU01fQVJDSF9JUlFTX0ggX19GSUxFX18KKworI2luY2x1ZGUgPHBsYXQvaXJxcy5oPgorCisvKiBWSUMwOiBTeXN0ZW0sIERNQSwgVGltZXIgKi8KKworI2RlZmluZSBJUlFfRUlOVDAJCVM1UF9JUlFfVklDMCgwKQorI2RlZmluZSBJUlFfRUlOVDEJCVM1UF9JUlFfVklDMCgxKQorI2RlZmluZSBJUlFfRUlOVDIJCVM1UF9JUlFfVklDMCgyKQorI2RlZmluZSBJUlFfRUlOVDMJCVM1UF9JUlFfVklDMCgzKQorI2RlZmluZSBJUlFfRUlOVDQJCVM1UF9JUlFfVklDMCg0KQorI2RlZmluZSBJUlFfRUlOVDUJCVM1UF9JUlFfVklDMCg1KQorI2RlZmluZSBJUlFfRUlOVDYJCVM1UF9JUlFfVklDMCg2KQorI2RlZmluZSBJUlFfRUlOVDcJCVM1UF9JUlFfVklDMCg3KQorI2RlZmluZSBJUlFfRUlOVDgJCVM1UF9JUlFfVklDMCg4KQorI2RlZmluZSBJUlFfRUlOVDkJCVM1UF9JUlFfVklDMCg5KQorI2RlZmluZSBJUlFfRUlOVDEwCQlTNVBfSVJRX1ZJQzAoMTApCisjZGVmaW5lIElSUV9FSU5UMTEJCVM1UF9JUlFfVklDMCgxMSkKKyNkZWZpbmUgSVJRX0VJTlQxMgkJUzVQX0lSUV9WSUMwKDEyKQorI2RlZmluZSBJUlFfRUlOVDEzCQlTNVBfSVJRX1ZJQzAoMTMpCisjZGVmaW5lIElSUV9FSU5UMTQJCVM1UF9JUlFfVklDMCgxNCkKKyNkZWZpbmUgSVJRX0VJTlQxNQkJUzVQX0lSUV9WSUMwKDE1KQorI2RlZmluZSBJUlFfRUlOVDE2XzMxCQlTNVBfSVJRX1ZJQzAoMTYpCisjZGVmaW5lIElSUV9CQVRGCQlTNVBfSVJRX1ZJQzAoMTcpCisjZGVmaW5lIElSUV9NRE1BCQlTNVBfSVJRX1ZJQzAoMTgpCisjZGVmaW5lIElSUV9QRE1BMAkJUzVQX0lSUV9WSUMwKDE5KQorI2RlZmluZSBJUlFfUERNQTEJCVM1UF9JUlFfVklDMCgyMCkKKyNkZWZpbmUgSVJRX1RJTUVSMF9WSUMJCVM1UF9JUlFfVklDMCgyMSkKKyNkZWZpbmUgSVJRX1RJTUVSMV9WSUMJCVM1UF9JUlFfVklDMCgyMikKKyNkZWZpbmUgSVJRX1RJTUVSMl9WSUMJCVM1UF9JUlFfVklDMCgyMykKKyNkZWZpbmUgSVJRX1RJTUVSM19WSUMJCVM1UF9JUlFfVklDMCgyNCkKKyNkZWZpbmUgSVJRX1RJTUVSNF9WSUMJCVM1UF9JUlFfVklDMCgyNSkKKyNkZWZpbmUgSVJRX1NZU1RJTUVSCQlTNVBfSVJRX1ZJQzAoMjYpCisjZGVmaW5lIElSUV9XRFQJCQlTNVBfSVJRX1ZJQzAoMjcpCisjZGVmaW5lIElSUV9SVENfQUxBUk0JCVM1UF9JUlFfVklDMCgyOCkKKyNkZWZpbmUgSVJRX1JUQ19USUMJCVM1UF9JUlFfVklDMCgyOSkKKyNkZWZpbmUgSVJRX0dQSU9JTlQJCVM1UF9JUlFfVklDMCgzMCkKKyNkZWZpbmUgSVJRX0ZJTUMzCQlTNVBfSVJRX1ZJQzAoMzEpCisKKy8qIFZJQzE6IEFSTSwgUG93ZXIsIE1lbW9yeSwgQ29ubmVjdGl2aXR5LCBTdG9yYWdlICovCisKKyNkZWZpbmUgSVJRX0NPUlRFWDAJCVM1UF9JUlFfVklDMSgwKQorI2RlZmluZSBJUlFfQ09SVEVYMQkJUzVQX0lSUV9WSUMxKDEpCisjZGVmaW5lIElSUV9DT1JURVgyCQlTNVBfSVJRX1ZJQzEoMikKKyNkZWZpbmUgSVJRX0NPUlRFWDMJCVM1UF9JUlFfVklDMSgzKQorI2RlZmluZSBJUlFfQ09SVEVYNAkJUzVQX0lSUV9WSUMxKDQpCisjZGVmaW5lIElSUV9JRU1BUEMJCVM1UF9JUlFfVklDMSg1KQorI2RlZmluZSBJUlFfSUVNSUVDCQlTNVBfSVJRX1ZJQzEoNikKKyNkZWZpbmUgSVJRX09ORU5BTkQJCVM1UF9JUlFfVklDMSg3KQorI2RlZmluZSBJUlFfTkZDCQkJUzVQX0lSUV9WSUMxKDgpCisjZGVmaW5lIElSUV9DRkMJCQlTNVBfSVJRX1ZJQzEoOSkKKyNkZWZpbmUgSVJRX1VBUlQwCQlTNVBfSVJRX1ZJQzEoMTApCisjZGVmaW5lIElSUV9VQVJUMQkJUzVQX0lSUV9WSUMxKDExKQorI2RlZmluZSBJUlFfVUFSVDIJCVM1UF9JUlFfVklDMSgxMikKKyNkZWZpbmUgSVJRX1VBUlQzCQlTNVBfSVJRX1ZJQzEoMTMpCisjZGVmaW5lIElSUV9JSUMJCQlTNVBfSVJRX1ZJQzEoMTQpCisjZGVmaW5lIElSUV9TUEkwCQlTNVBfSVJRX1ZJQzEoMTUpCisjZGVmaW5lIElSUV9TUEkxCQlTNVBfSVJRX1ZJQzEoMTYpCisjZGVmaW5lIElSUV9TUEkyCQlTNVBfSVJRX1ZJQzEoMTcpCisjZGVmaW5lIElSUV9JUkRBCQlTNVBfSVJRX1ZJQzEoMTgpCisjZGVmaW5lIElSUV9DQU4wCQlTNVBfSVJRX1ZJQzEoMTkpCisjZGVmaW5lIElSUV9DQU4xCQlTNVBfSVJRX1ZJQzEoMjApCisjZGVmaW5lIElSUV9IU0lSWAkJUzVQX0lSUV9WSUMxKDIxKQorI2RlZmluZSBJUlFfSFNJVFgJCVM1UF9JUlFfVklDMSgyMikKKyNkZWZpbmUgSVJRX1VIT1NUCQlTNVBfSVJRX1ZJQzEoMjMpCisjZGVmaW5lIElSUV9PVEcJCQlTNVBfSVJRX1ZJQzEoMjQpCisjZGVmaW5lIElSUV9NU00JCQlTNVBfSVJRX1ZJQzEoMjUpCisjZGVmaW5lIElSUV9IU01NQzAJCVM1UF9JUlFfVklDMSgyNikKKyNkZWZpbmUgSVJRX0hTTU1DMQkJUzVQX0lSUV9WSUMxKDI3KQorI2RlZmluZSBJUlFfSFNNTUMyCQlTNVBfSVJRX1ZJQzEoMjgpCisjZGVmaW5lIElSUV9NSVBJQ1NJCQlTNVBfSVJRX1ZJQzEoMjkpCisjZGVmaW5lIElSUV9NSVBJRFNJCQlTNVBfSVJRX1ZJQzEoMzApCisjZGVmaW5lIElSUV9PTkVOQU5EX0FVREkJUzVQX0lSUV9WSUMxKDMxKQorCisvKiBWSUMyOiBNdWx0aW1lZGlhLCBBdWRpbywgU2VjdXJpdHkgKi8KKworI2RlZmluZSBJUlFfTENEMAkJUzVQX0lSUV9WSUMyKDApCisjZGVmaW5lIElSUV9MQ0QxCQlTNVBfSVJRX1ZJQzIoMSkKKyNkZWZpbmUgSVJRX0xDRDIJCVM1UF9JUlFfVklDMigyKQorI2RlZmluZSBJUlFfTENEMwkJUzVQX0lSUV9WSUMyKDMpCisjZGVmaW5lIElSUV9ST1RBVE9SCQlTNVBfSVJRX1ZJQzIoNCkKKyNkZWZpbmUgSVJRX0ZJTUMwCQlTNVBfSVJRX1ZJQzIoNSkKKyNkZWZpbmUgSVJRX0ZJTUMxCQlTNVBfSVJRX1ZJQzIoNikKKyNkZWZpbmUgSVJRX0ZJTUMyCQlTNVBfSVJRX1ZJQzIoNykKKyNkZWZpbmUgSVJRX0pQRUcJCVM1UF9JUlFfVklDMig4KQorI2RlZmluZSBJUlFfMkQJCQlTNVBfSVJRX1ZJQzIoOSkKKyNkZWZpbmUgSVJRXzNECQkJUzVQX0lSUV9WSUMyKDEwKQorI2RlZmluZSBJUlFfTUlYRVIJCVM1UF9JUlFfVklDMigxMSkKKyNkZWZpbmUgSVJRX0hETUkJCVM1UF9JUlFfVklDMigxMikKKyNkZWZpbmUgSVJRX0lJQzEJCVM1UF9JUlFfVklDMigxMykKKyNkZWZpbmUgSVJRX01GQwkJCVM1UF9JUlFfVklDMigxNCkKKyNkZWZpbmUgSVJRX1RWRU5DCQlTNVBfSVJRX1ZJQzIoMTUpCisjZGVmaW5lIElSUV9JMlMwCQlTNVBfSVJRX1ZJQzIoMTYpCisjZGVmaW5lIElSUV9JMlMxCQlTNVBfSVJRX1ZJQzIoMTcpCisjZGVmaW5lIElSUV9JMlMyCQlTNVBfSVJRX1ZJQzIoMTgpCisjZGVmaW5lIElSUV9BQzk3CQlTNVBfSVJRX1ZJQzIoMTkpCisjZGVmaW5lIElSUV9QQ00wCQlTNVBfSVJRX1ZJQzIoMjApCisjZGVmaW5lIElSUV9QQ00xCQlTNVBfSVJRX1ZJQzIoMjEpCisjZGVmaW5lIElSUV9TUERJRgkJUzVQX0lSUV9WSUMyKDIyKQorI2RlZmluZSBJUlFfQURDCQkJUzVQX0lSUV9WSUMyKDIzKQorI2RlZmluZSBJUlFfUEVORE4JCVM1UF9JUlFfVklDMigyNCkKKyNkZWZpbmUgSVJRX1RDCQkJSVJRX1BFTkROCisjZGVmaW5lIElSUV9LRVlQQUQJCVM1UF9JUlFfVklDMigyNSkKKyNkZWZpbmUgSVJRX0NHCQkJUzVQX0lSUV9WSUMyKDI2KQorI2RlZmluZSBJUlFfU0VDCQkJUzVQX0lSUV9WSUMyKDI3KQorI2RlZmluZSBJUlFfU0VDUlgJCVM1UF9JUlFfVklDMigyOCkKKyNkZWZpbmUgSVJRX1NFQ1RYCQlTNVBfSVJRX1ZJQzIoMjkpCisjZGVmaW5lIElSUV9TRE1JUlEJCVM1UF9JUlFfVklDMigzMCkKKyNkZWZpbmUgSVJRX1NETUZJUQkJUzVQX0lSUV9WSUMyKDMxKQorCisvKiBWSUMzOiBFdGMgKi8KKworI2RlZmluZSBJUlFfSVBDCQkJUzVQX0lSUV9WSUMzKDApCisjZGVmaW5lIElSUV9IT1NUSUYJCVM1UF9JUlFfVklDMygxKQorI2RlZmluZSBJUlFfTU1DMwkJUzVQX0lSUV9WSUMzKDIpCisjZGVmaW5lIElSUV9DRUMJCQlTNVBfSVJRX1ZJQzMoMykKKyNkZWZpbmUgSVJRX1RTSQkJCVM1UF9JUlFfVklDMyg0KQorI2RlZmluZSBJUlFfTUROSUUwCQlTNVBfSVJRX1ZJQzMoNSkKKyNkZWZpbmUgSVJRX01ETklFMQkJUzVQX0lSUV9WSUMzKDYpCisjZGVmaW5lIElSUV9NRE5JRTIJCVM1UF9JUlFfVklDMyg3KQorI2RlZmluZSBJUlFfTUROSUUzCQlTNVBfSVJRX1ZJQzMoOCkKKyNkZWZpbmUgSVJRX1ZJQ19FTkQJCVM1UF9JUlFfVklDMygzMSkKKworI2RlZmluZSBTNVBfSVJRX0VJTlRfQkFTRQkoSVJRX1ZJQ19FTkQgKyAxKQorCisjZGVmaW5lIFM1UF9FSU5UKHgpCQkoKHgpICsgUzVQX0lSUV9FSU5UX0JBU0UpCisjZGVmaW5lIElSUV9FSU5UKHgpCQlTNVBfRUlOVCh4KQorCisvKiBTZXQgdGhlIGRlZmF1bHQgTlJfSVJRUyAqLworCisjZGVmaW5lIE5SX0lSUVMgCQkoSVJRX0VJTlQoMzEpICsgMSkKKworI2VuZGlmIC8qIEFTTV9BUkNIX0lSUVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9tYXAuaCBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIyNjk0YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvbWFwLmgKQEAgLTAsMCArMSw2NSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9tYXAuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQVjIxMCAtIE1lbW9yeSBtYXAgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX01BUF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUFQX0ggX19GSUxFX18KKworI2luY2x1ZGUgPHBsYXQvbWFwLWJhc2UuaD4KKyNpbmNsdWRlIDxwbGF0L21hcC1zNXAuaD4KKworI2RlZmluZSBTNVBWMjEwX1BBX0NISVBJRAkoMHhFMDAwMDAwMCkKKyNkZWZpbmUgUzVQX1BBX0NISVBJRAkJUzVQVjIxMF9QQV9DSElQSUQKKworI2RlZmluZSBTNVBWMjEwX1BBX1NZU0NPTgkoMHhFMDEwMDAwMCkKKyNkZWZpbmUgUzVQX1BBX1NZU0NPTgkJUzVQVjIxMF9QQV9TWVNDT04KKworI2RlZmluZSBTNVBWMjEwX1BBX0dQSU8JCSgweEUwMjAwMDAwKQorI2RlZmluZSBTNVBfUEFfR1BJTwkJUzVQVjIxMF9QQV9HUElPCisKKyNkZWZpbmUgUzVQVjIxMF9QQV9JSUMwCQkoMHhFMTgwMDAwMCkKKworI2RlZmluZSBTNVBWMjEwX1BBX1RJTUVSCSgweEUyNTAwMDAwKQorI2RlZmluZSBTNVBfUEFfVElNRVIJCVM1UFYyMTBfUEFfVElNRVIKKworI2RlZmluZSBTNVBWMjEwX1BBX1NZU1RJTUVSCSgweEUyNjAwMDAwKQorCisjZGVmaW5lIFM1UFYyMTBfUEFfVUFSVAkJKDB4RTI5MDAwMDApCisKKyNkZWZpbmUgUzVQX1BBX1VBUlQwCQkoUzVQVjIxMF9QQV9VQVJUICsgMHgwKQorI2RlZmluZSBTNVBfUEFfVUFSVDEJCShTNVBWMjEwX1BBX1VBUlQgKyAweDQwMCkKKyNkZWZpbmUgUzVQX1BBX1VBUlQyCQkoUzVQVjIxMF9QQV9VQVJUICsgMHg4MDApCisjZGVmaW5lIFM1UF9QQV9VQVJUMwkJKFM1UFYyMTBfUEFfVUFSVCArIDB4QzAwKQorCisjZGVmaW5lIFM1UF9TWl9VQVJUCQlTWl8yNTYKKworI2RlZmluZSBTNVBWMjEwX1BBX1NST01DCSgweEU4MDAwMDAwKQorCisjZGVmaW5lIFM1UFYyMTBfUEFfVklDMAkJKDB4RjIwMDAwMDApCisjZGVmaW5lIFM1UF9QQV9WSUMwCQlTNVBWMjEwX1BBX1ZJQzAKKworI2RlZmluZSBTNVBWMjEwX1BBX1ZJQzEJCSgweEYyMTAwMDAwKQorI2RlZmluZSBTNVBfUEFfVklDMQkJUzVQVjIxMF9QQV9WSUMxCisKKyNkZWZpbmUgUzVQVjIxMF9QQV9WSUMyCQkoMHhGMjIwMDAwMCkKKyNkZWZpbmUgUzVQX1BBX1ZJQzIJCVM1UFYyMTBfUEFfVklDMgorCisjZGVmaW5lIFM1UFYyMTBfUEFfVklDMwkJKDB4RjIzMDAwMDApCisjZGVmaW5lIFM1UF9QQV9WSUMzCQlTNVBWMjEwX1BBX1ZJQzMKKworI2RlZmluZSBTNVBWMjEwX1BBX1NEUkFNCSgweDIwMDAwMDAwKQorI2RlZmluZSBTNVBfUEFfU0RSQU0JCVM1UFYyMTBfUEFfU0RSQU0KKworLyogY29tcGF0aWJpbHRpeSBkZWZpbmVzLiAqLworI2RlZmluZSBTM0NfUEFfVUFSVAkJUzVQVjIxMF9QQV9VQVJUCisjZGVmaW5lIFMzQ19QQV9JSUMJCVM1UFYyMTBfUEFfSUlDMAorCisjZW5kaWYgLyogX19BU01fQVJDSF9NQVBfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaCBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc5MTE3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTAsMCArMSwyMyBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQVjIxMCAtIE1lbW9yeSBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKyNkZWZpbmUgX19BU01fQVJDSF9NRU1PUllfSAorCisjZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweDIwMDAwMDAwKQorI2RlZmluZSBDT05TSVNURU5UX0RNQV9TSVpFCShTWl84TSArIFNaXzRNICsgU1pfMk0pCisKKy8qIE1heGltdW0gb2YgMjU2TWlCIGluIG9uZSBiYW5rICovCisjZGVmaW5lIE1BWF9QSFlTTUVNX0JJVFMJMzIKKyNkZWZpbmUgU0VDVElPTl9TSVpFX0JJVFMJMjgKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTUVNT1JZX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvcHdtLWNsb2NrLmggYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5MDI3ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL3B3bS1jbG9jay5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvcHdtLWNsb2NrLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogQmFzZWQgb24gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvbWFjaC9wd20tY2xvY2suaAorICoKKyAqIFM1UFYyMTAgLSBwd20gY2xvY2sgYW5kIHRpbWVyIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1BXTUNMS19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUFdNQ0xLX0ggX19GSUxFX18KKworLyoqCisgKiBwd21fY2ZnX3NyY19pc190Y2xrKCkgLSByZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gbXV4IGNvbmZpZyBpcyBhIHRjbGsKKyAqIEBjZmc6IFRoZSB0aW1lciBUQ0ZHMSByZWdpc3RlciBiaXRzIHNoaWZ0ZWQgZG93biB0byAwLgorICoKKyAqIFJldHVybiB0cnVlIGlmIHRoZSBnaXZlbiBjb25maWd1cmF0aW9uIGZyb20gVENGRzEgaXMgYSBUQ0xLIGluc3RlYWQKKyAqIGFueSBvZiB0aGUgVERJViBjbG9ja3MuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB3bV9jZmdfc3JjX2lzX3RjbGsodW5zaWduZWQgbG9uZyB0Y2ZnKQoreworCXJldHVybiB0Y2ZnID09IFMzQzI0MTBfVENGRzFfTVVYX1RDTEs7Cit9CisKKy8qKgorICogdGNmZ190b19kaXZpc29yKCkgLSBjb252ZXJ0IHRjZmcxIHNldHRpbmcgdG8gYSBkaXZpc29yCisgKiBAdGNmZzE6IFRoZSB0Y2ZnMSBzZXR0aW5nLCBzaGlmdGVkIGRvd24uCisgKgorICogR2V0IHRoZSBkaXZpc29yIHZhbHVlIGZvciB0aGUgZ2l2ZW4gdGNmZzEgc2V0dGluZy4gV2UgYXNzdW1lIHRoZQorICogY2FsbGVyIGhhcyBhbHJlYWR5IGNoZWNrZWQgdG8gc2VlIGlmIHRoaXMgaXMgbm90IGEgVENMSyBzb3VyY2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0Y2ZnX3RvX2Rpdmlzb3IodW5zaWduZWQgbG9uZyB0Y2ZnMSkKK3sKKwlyZXR1cm4gMSA8PCAoMSArIHRjZmcxKTsKK30KKworLyoqCisgKiBwd21fdGRpdl9oYXNfZGl2MSgpIC0gZG9lcyB0aGUgdGRpdiBzZXR0aW5nIGhhdmUgYSAvMQorICoKKyAqIFJldHVybiB0cnVlIGlmIHdlIGhhdmUgYSAvMSBpbiB0aGUgdGRpdiBzZXR0aW5nLgorICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwd21fdGRpdl9oYXNfZGl2MSh2b2lkKQoreworCXJldHVybiAwOworfQorCisvKioKKyAqIHB3bV90ZGl2X2Rpdl9iaXRzKCkgLSBjYWxjdWxhdGUgVENGRzEgZGl2aXNvciB2YWx1ZS4KKyAqIEBkaXY6IFRoZSBkaXZpc29yIHRvIGNhbGN1bGF0ZSB0aGUgYml0IGluZm9ybWF0aW9uIGZvci4KKyAqCisgKiBUdXJuIGEgZGl2aXNvciBpbnRvIHRoZSBuZWNlc3NhcnkgYml0IGZpZWxkIGZvciBUQ0ZHMS4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB3bV90ZGl2X2Rpdl9iaXRzKHVuc2lnbmVkIGludCBkaXYpCit7CisJcmV0dXJuIGlsb2cyKGRpdikgLSAxOworfQorCisjZGVmaW5lIFMzQ19UQ0ZHMV9NVVhfVENMSyBTM0MyNDEwX1RDRkcxX01VWF9UQ0xLCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1BXTUNMS19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvcmVncy1jbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NmUwZTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL3JlZ3MtY2xvY2suaApAQCAtMCwwICsxLDE2OSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9yZWdzLWNsb2NrLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFM1UFYyMTAgLSBDbG9jayByZWdpc3RlciBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU19DTE9DS19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUkVHU19DTE9DS19IIF9fRklMRV9fCisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjZGVmaW5lIFM1UF9DTEtSRUcoeCkJCShTM0NfVkFfU1lTICsgKHgpKQorCisjZGVmaW5lIFM1UF9BUExMX0xPQ0sJCVM1UF9DTEtSRUcoMHgwMCkKKyNkZWZpbmUgUzVQX01QTExfTE9DSwkJUzVQX0NMS1JFRygweDA4KQorI2RlZmluZSBTNVBfRVBMTF9MT0NLCQlTNVBfQ0xLUkVHKDB4MTApCisjZGVmaW5lIFM1UF9WUExMX0xPQ0sJCVM1UF9DTEtSRUcoMHgyMCkKKworI2RlZmluZSBTNVBfQVBMTF9DT04JCVM1UF9DTEtSRUcoMHgxMDApCisjZGVmaW5lIFM1UF9NUExMX0NPTgkJUzVQX0NMS1JFRygweDEwOCkKKyNkZWZpbmUgUzVQX0VQTExfQ09OCQlTNVBfQ0xLUkVHKDB4MTEwKQorI2RlZmluZSBTNVBfVlBMTF9DT04JCVM1UF9DTEtSRUcoMHgxMjApCisKKyNkZWZpbmUgUzVQX0NMS19TUkMwCQlTNVBfQ0xLUkVHKDB4MjAwKQorI2RlZmluZSBTNVBfQ0xLX1NSQzEJCVM1UF9DTEtSRUcoMHgyMDQpCisjZGVmaW5lIFM1UF9DTEtfU1JDMgkJUzVQX0NMS1JFRygweDIwOCkKKyNkZWZpbmUgUzVQX0NMS19TUkMzCQlTNVBfQ0xLUkVHKDB4MjBDKQorI2RlZmluZSBTNVBfQ0xLX1NSQzQJCVM1UF9DTEtSRUcoMHgyMTApCisjZGVmaW5lIFM1UF9DTEtfU1JDNQkJUzVQX0NMS1JFRygweDIxNCkKKyNkZWZpbmUgUzVQX0NMS19TUkM2CQlTNVBfQ0xLUkVHKDB4MjE4KQorCisjZGVmaW5lIFM1UF9DTEtfU1JDX01BU0swCVM1UF9DTEtSRUcoMHgyODApCisjZGVmaW5lIFM1UF9DTEtfU1JDX01BU0sxCVM1UF9DTEtSRUcoMHgyODQpCisKKyNkZWZpbmUgUzVQX0NMS19ESVYwCQlTNVBfQ0xLUkVHKDB4MzAwKQorI2RlZmluZSBTNVBfQ0xLX0RJVjEJCVM1UF9DTEtSRUcoMHgzMDQpCisjZGVmaW5lIFM1UF9DTEtfRElWMgkJUzVQX0NMS1JFRygweDMwOCkKKyNkZWZpbmUgUzVQX0NMS19ESVYzCQlTNVBfQ0xLUkVHKDB4MzBDKQorI2RlZmluZSBTNVBfQ0xLX0RJVjQJCVM1UF9DTEtSRUcoMHgzMTApCisjZGVmaW5lIFM1UF9DTEtfRElWNQkJUzVQX0NMS1JFRygweDMxNCkKKyNkZWZpbmUgUzVQX0NMS19ESVY2CQlTNVBfQ0xLUkVHKDB4MzE4KQorI2RlZmluZSBTNVBfQ0xLX0RJVjcJCVM1UF9DTEtSRUcoMHgzMUMpCisKKyNkZWZpbmUgUzVQX0NMS0dBVEVfTUFJTjAJUzVQX0NMS1JFRygweDQwMCkKKyNkZWZpbmUgUzVQX0NMS0dBVEVfTUFJTjEJUzVQX0NMS1JFRygweDQwNCkKKyNkZWZpbmUgUzVQX0NMS0dBVEVfTUFJTjIJUzVQX0NMS1JFRygweDQwOCkKKworI2RlZmluZSBTNVBfQ0xLR0FURV9QRVJJMAlTNVBfQ0xLUkVHKDB4NDIwKQorI2RlZmluZSBTNVBfQ0xLR0FURV9QRVJJMQlTNVBfQ0xLUkVHKDB4NDI0KQorCisjZGVmaW5lIFM1UF9DTEtHQVRFX1NDTEswCVM1UF9DTEtSRUcoMHg0NDApCisjZGVmaW5lIFM1UF9DTEtHQVRFX1NDTEsxCVM1UF9DTEtSRUcoMHg0NDQpCisjZGVmaW5lIFM1UF9DTEtHQVRFX0lQMAkJUzVQX0NMS1JFRygweDQ2MCkKKyNkZWZpbmUgUzVQX0NMS0dBVEVfSVAxCQlTNVBfQ0xLUkVHKDB4NDY0KQorI2RlZmluZSBTNVBfQ0xLR0FURV9JUDIJCVM1UF9DTEtSRUcoMHg0NjgpCisjZGVmaW5lIFM1UF9DTEtHQVRFX0lQMwkJUzVQX0NMS1JFRygweDQ2QykKKyNkZWZpbmUgUzVQX0NMS0dBVEVfSVA0CQlTNVBfQ0xLUkVHKDB4NDcwKQorCisjZGVmaW5lIFM1UF9DTEtHQVRFX0JMT0NLCVM1UF9DTEtSRUcoMHg0ODApCisjZGVmaW5lIFM1UF9DTEtHQVRFX0JVUzAJUzVQX0NMS1JFRygweDQ4NCkKKyNkZWZpbmUgUzVQX0NMS0dBVEVfQlVTMQlTNVBfQ0xLUkVHKDB4NDg4KQorI2RlZmluZSBTNVBfQ0xLX09VVAkJUzVQX0NMS1JFRygweDUwMCkKKworLyogQ0xLU1JDMCAqLworI2RlZmluZSBTNVBfQ0xLU1JDMF9NVVgyMDBfTUFTSwkJKDB4MTw8MTYpCisjZGVmaW5lIFM1UF9DTEtTUkMwX01VWDE2Nl9NQVNLCQkoMHgxPDwyMCkKKyNkZWZpbmUgUzVQX0NMS1NSQzBfTVVYMTMzX01BU0sJCSgweDE8PDI0KQorCisvKiBDTEtESVYwICovCisjZGVmaW5lIFM1UF9DTEtESVYwX0FQTExfU0hJRlQJCSgwKQorI2RlZmluZSBTNVBfQ0xLRElWMF9BUExMX01BU0sJCSgweDcgPDwgUzVQX0NMS0RJVjBfQVBMTF9TSElGVCkKKyNkZWZpbmUgUzVQX0NMS0RJVjBfQTJNX1NISUZUCQkoNCkKKyNkZWZpbmUgUzVQX0NMS0RJVjBfQTJNX01BU0sJCSgweDcgPDwgUzVQX0NMS0RJVjBfQTJNX1NISUZUKQorI2RlZmluZSBTNVBfQ0xLRElWMF9IQ0xLMjAwX1NISUZUCSg4KQorI2RlZmluZSBTNVBfQ0xLRElWMF9IQ0xLMjAwX01BU0sJKDB4NyA8PCBTNVBfQ0xLRElWMF9IQ0xLMjAwX1NISUZUKQorI2RlZmluZSBTNVBfQ0xLRElWMF9QQ0xLMTAwX1NISUZUCSgxMikKKyNkZWZpbmUgUzVQX0NMS0RJVjBfUENMSzEwMF9NQVNLCSgweDcgPDwgUzVQX0NMS0RJVjBfUENMSzEwMF9TSElGVCkKKyNkZWZpbmUgUzVQX0NMS0RJVjBfSENMSzE2Nl9TSElGVAkoMTYpCisjZGVmaW5lIFM1UF9DTEtESVYwX0hDTEsxNjZfTUFTSwkoMHhGIDw8IFM1UF9DTEtESVYwX0hDTEsxNjZfU0hJRlQpCisjZGVmaW5lIFM1UF9DTEtESVYwX1BDTEs4M19TSElGVAkoMjApCisjZGVmaW5lIFM1UF9DTEtESVYwX1BDTEs4M19NQVNLCQkoMHg3IDw8IFM1UF9DTEtESVYwX1BDTEs4M19TSElGVCkKKyNkZWZpbmUgUzVQX0NMS0RJVjBfSENMSzEzM19TSElGVAkoMjQpCisjZGVmaW5lIFM1UF9DTEtESVYwX0hDTEsxMzNfTUFTSwkoMHhGIDw8IFM1UF9DTEtESVYwX0hDTEsxMzNfU0hJRlQpCisjZGVmaW5lIFM1UF9DTEtESVYwX1BDTEs2Nl9TSElGVAkoMjgpCisjZGVmaW5lIFM1UF9DTEtESVYwX1BDTEs2Nl9NQVNLCQkoMHg3IDw8IFM1UF9DTEtESVYwX1BDTEs2Nl9TSElGVCkKKworLyogUmVnaXN0ZXJzIHJlbGF0ZWQgdG8gcG93ZXIgbWFuYWdlbWVudCAqLworI2RlZmluZSBTNVBfUFdSX0NGRwkJUzVQX0NMS1JFRygweEMwMDApCisjZGVmaW5lIFM1UF9FSU5UX1dBS0VVUF9NQVNLCVM1UF9DTEtSRUcoMHhDMDA0KQorI2RlZmluZSBTNVBfV0FLRVVQX01BU0sgCVM1UF9DTEtSRUcoMHhDMDA4KQorI2RlZmluZSBTNVBfUFdSX01PREUJCVM1UF9DTEtSRUcoMHhDMDBDKQorI2RlZmluZSBTNVBfTk9STUFMX0NGRwkJUzVQX0NMS1JFRygweEMwMTApCisjZGVmaW5lIFM1UF9JRExFX0NGRwkJUzVQX0NMS1JFRygweEMwMjApCisjZGVmaW5lIFM1UF9TVE9QX0NGRwkJUzVQX0NMS1JFRygweEMwMzApCisjZGVmaW5lIFM1UF9TVE9QX01FTV9DRkcJUzVQX0NMS1JFRygweEMwMzQpCisjZGVmaW5lIFM1UF9TTEVFUF9DRkcJCVM1UF9DTEtSRUcoMHhDMDQwKQorCisjZGVmaW5lIFM1UF9PU0NfRlJFUQkJUzVQX0NMS1JFRygweEMxMDApCisjZGVmaW5lIFM1UF9PU0NfU1RBQkxFCQlTNVBfQ0xLUkVHKDB4QzEwNCkKKyNkZWZpbmUgUzVQX1BXUl9TVEFCTEUJCVM1UF9DTEtSRUcoMHhDMTA4KQorI2RlZmluZSBTNVBfTVRDX1NUQUJMRQkJUzVQX0NMS1JFRygweEMxMTApCisjZGVmaW5lIFM1UF9DTEFNUF9TVEFCTEUJUzVQX0NMS1JFRygweEMxMTQpCisKKyNkZWZpbmUgUzVQX1dBS0VVUF9TVEFUCQlTNVBfQ0xLUkVHKDB4QzIwMCkKKyNkZWZpbmUgUzVQX0JMS19QV1JfU1RBVAlTNVBfQ0xLUkVHKDB4QzIwNCkKKworI2RlZmluZSBTNVBfT1RIRVJTCQlTNVBfQ0xLUkVHKDB4RTAwMCkKKyNkZWZpbmUgUzVQX09NX1NUQVQJCVM1UF9DTEtSRUcoMHhFMTAwKQorI2RlZmluZSBTNVBfVVNCX1BIWV9DT05UUk9MCVM1UF9DTEtSRUcoMHhFODBDKQorI2RlZmluZSBTNVBfREFDX0NPTlRST0wJCVM1UF9DTEtSRUcoMHhFODEwKQorCisjZGVmaW5lIFM1UF9JTkZPUk0wCQlTNVBfQ0xLUkVHKDB4RjAwMCkKKyNkZWZpbmUgUzVQX0lORk9STTEJCVM1UF9DTEtSRUcoMHhGMDA0KQorI2RlZmluZSBTNVBfSU5GT1JNMgkJUzVQX0NMS1JFRygweEYwMDgpCisjZGVmaW5lIFM1UF9JTkZPUk0zCQlTNVBfQ0xLUkVHKDB4RjAwQykKKyNkZWZpbmUgUzVQX0lORk9STTQJCVM1UF9DTEtSRUcoMHhGMDEwKQorI2RlZmluZSBTNVBfSU5GT1JNNQkJUzVQX0NMS1JFRygweEYwMTQpCisjZGVmaW5lIFM1UF9JTkZPUk02CQlTNVBfQ0xLUkVHKDB4RjAxOCkKKyNkZWZpbmUgUzVQX0lORk9STTcJCVM1UF9DTEtSRUcoMHhGMDFDKQorCisjZGVmaW5lIFM1UF9SU1RfU1RBVAkJUzVQX0NMS1JFRygweEEwMDApCisjZGVmaW5lIFM1UF9PU0NfQ09OCQlTNVBfQ0xLUkVHKDB4ODAwMCkKKyNkZWZpbmUgUzVQX01JUElfUEhZX0NPTjAJUzVQX0NMS1JFRygweDcyMDApCisjZGVmaW5lIFM1UF9NSVBJX1BIWV9DT04xCVM1UF9DTEtSRUcoMHg3MjA0KQorI2RlZmluZSBTNVBfTUlQSV9DT05UUk9MCVM1UF9DTEtSRUcoMHhFODE0KQorCisjZGVmaW5lIFM1UF9JRExFX0NGR19UTF9NQVNLCSgzIDw8IDMwKQorI2RlZmluZSBTNVBfSURMRV9DRkdfVE1fTUFTSwkoMyA8PCAyOCkKKyNkZWZpbmUgUzVQX0lETEVfQ0ZHX1RMX09OCSgyIDw8IDMwKQorI2RlZmluZSBTNVBfSURMRV9DRkdfVE1fT04JKDIgPDwgMjgpCisjZGVmaW5lIFM1UF9JRExFX0NGR19ESURMRQkoMSA8PCAwKQorCisjZGVmaW5lIFM1UF9DRkdfV0ZJX0NMRUFOCQkofigzIDw8IDgpKQorI2RlZmluZSBTNVBfQ0ZHX1dGSV9JRExFCQkoMSA8PCA4KQorI2RlZmluZSBTNVBfQ0ZHX1dGSV9TVE9QCQkoMiA8PCA4KQorI2RlZmluZSBTNVBfQ0ZHX1dGSV9TTEVFUAkJKDMgPDwgOCkKKworI2RlZmluZSBTNVBfT1RIRVJfU1lTX0lOVAkJMjQKKyNkZWZpbmUgUzVQX09USEVSX1NUQV9UWVBFCQkyMworI2RlZmluZSBTNVBfT1RIRVJfU1lTQ19JTlRPRkYJCSgxIDw8IDApCisjZGVmaW5lIFNUQV9UWVBFX0VYUE9OCQkJMAorI2RlZmluZSBTVEFfVFlQRV9TRlIJCQkxCisKKyNkZWZpbmUgUzVQX1BXUl9TVEFfRVhQX1NDQUxFCQkwCisjZGVmaW5lIFM1UF9QV1JfU1RBX0NOVAkJCTQKKworI2RlZmluZSBTNVBfUFdSX1NUQUJMRV9DT1VOVAkJODU1MDAKKworI2RlZmluZSBTNVBfU0xFRVBfQ0ZHX09TQ19FTgkJKDEgPDwgMCkKKyNkZWZpbmUgUzVQX1NMRUVQX0NGR19VU0JPU0NfRU4JCSgxIDw8IDEpCisKKy8qIE9USEVSUyBSZXNnaXN0ZXIgKi8KKyNkZWZpbmUgUzVQX09USEVSU19VU0JfU0lHX01BU0sJCSgxIDw8IDE2KQorI2RlZmluZSBTNVBfT1RIRVJTX01JUElfRFBIWV9FTgkJKDEgPDwgMjgpCisKKy8qIE1JUEkgKi8KKyNkZWZpbmUgUzVQX01JUElfRFBIWV9FTgkJKDMpCisKKy8qIFM1UF9EQUNfQ09OVFJPTCAqLworI2RlZmluZSBTNVBfREFDX0VOQUJMRQkJCSgxKQorI2RlZmluZSBTNVBfREFDX0RJU0FCTEUJCQkoMCkKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUkVHU19DTE9DS19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmggYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMzYjEwNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvcmVncy1pcnEuaApAQCAtMCwwICsxLDE5IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL3JlZ3MtaXJxLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFM1UFYyMTAgLSBJUlEgcmVnaXN0ZXIgZGVmaW5pdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1JFR1NfSVJRX0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdTX0lSUV9IIF9fRklMRV9fCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUkVHU19JUlFfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNhMDRkNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvc3lzdGVtLmgKQEAgLTAsMCArMSwyNiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQVjIxMCAtIHN5c3RlbSBzdXBwb3J0IGhlYWRlcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSCBfX0ZJTEVfXworCitzdGF0aWMgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwkvKiBub3RoaW5nIGhlcmUgeWV0ICovCit9CisKK3N0YXRpYyB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCit7CisJLyogbm90aGluZyBoZXJlIHlldCAqLworfQorCisjZW5kaWYgLyogX19BU01fQVJDSF9TWVNURU1fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC90aWNrLmggYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL3RpY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTkzYjM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC90aWNrLmgKQEAgLTAsMCArMSwyNiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC90aWNrLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIEJhc2VkIG9uIGFyY2gvYXJtL21hY2gtczNjNjQwMC9pbmNsdWRlL21hY2gvdGljay5oCisgKgorICogUzVQVjIxMCAtIFRpbWVyIHRpY2sgc3VwcG9ydCBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVElDS19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVElDS19IIF9fRklMRV9fCisKK3N0YXRpYyBpbmxpbmUgdTMyIHMzYzI0eHhfb3N0aW1lcl9wZW5kaW5nKHZvaWQpCit7CisJdTMyIHBlbmQgPSBfX3Jhd19yZWFkbChWQV9WSUMwICsgVklDX1JBV19TVEFUVVMpOworCXJldHVybiBwZW5kICYgKDEgPDwgKElSUV9USU1FUjRfVklDIC0gUzVQX0lSUV9WSUMwKDApKSk7Cit9CisKKyNkZWZpbmUgVElDS19NQVgJKDB4ZmZmZmZmZmYpCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1RJQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC90aW1leC5oIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczZGM4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL3RpbWV4LmgKQEAgLTAsMCArMSwyOSBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC90aW1leC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMTAgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL3RpbWV4LmgKKyAqCisgKiBTNVBWMjEwIC0gdGltZSBwYXJhbWV0ZXJzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9USU1FWF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVElNRVhfSCBfX0ZJTEVfXworCisvKiBDTE9DS19USUNLX1JBVEUgbmVlZHMgdG8gYmUgZXZhbHVhdGFibGUgYnkgdGhlIGNwcCwgc28gbWFraW5nIGl0CisgKiBhIHZhcmlhYmxlIGlzIHVzZWxlc3MuIEl0IHNlZW1zIGFzIGxvbmcgYXMgd2UgbWFrZSBvdXIgdGltZXJzIGFuCisgKiBleGFjdCBtdWx0aXBsZSBvZiBIWiwgYW55IHZhbHVlIHRoYXQgbWFrZXMgYSAxLT4xIGNvcnJlc3BvbmRlbmNlCisgKiBmb3IgdGhlIHRpbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgdG8vZnJvbSBqaWZmaWVzIGlzIGFjY2VwdGFibGUuCisqLworCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURSAxMjAwMDAwMAorCisjZW5kaWYgLyogX19BU01fQVJDSF9USU1FWF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZmYyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApAQCAtMCwwICsxLDI0IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQVjIxMCAtIHVuY29tcHJlc3MgY29kZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfVU5DT01QUkVTU19ICisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPHBsYXQvdW5jb21wcmVzcy5oPgorCitzdGF0aWMgdm9pZCBhcmNoX2RldGVjdF9jcHUodm9pZCkKK3sKKwkvKiB3ZSBkbyBub3QgbmVlZCB0byBkbyBhbnkgY3B1IGRldGVjdGlvbiBoZXJlIGF0IHRoZSBtb21lbnQuICovCit9CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX1VOQ09NUFJFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmggYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGY1MTVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKQEAgLTAsMCArMSwyMiBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zNXA2NDQyL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAxMCBCZW4gRG9va3MgPGJlbi1saW51eEBmbHVmZi5vcmc+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBCYXNlZCBvbiBhcmNoL2FybS9tYWNoLXM1cDY0NDIvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorICoKKyAqIFM1UFYyMTAgdm1hbGxvYyBkZWZpbml0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9WTUFMTE9DX0gKKyNkZWZpbmUgX19BU01fQVJDSF9WTUFMTE9DX0ggX19GSUxFX18KKworI2RlZmluZSBWTUFMTE9DX0VORAkgICgweEUwMDAwMDAwKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9WTUFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbml0LmMgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NjVhZTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXM1cHYyMTAvaW5pdC5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczVwdjIxMC9pbml0LmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKworI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9zNXB2MjEwLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfdWFydF9jbGtzcmMgczVwdjIxMF9zZXJpYWxfY2xvY2tzW10gPSB7CisJWzBdID0geworCQkubmFtZQkJPSAicGNsayIsCisJCS5kaXZpc29yCT0gMSwKKwkJLm1pbl9iYXVkCT0gMCwKKwkJLm1heF9iYXVkCT0gMCwKKwl9LAorfTsKKworLyogdWFydCByZWdpc3RyYXRpb24gcHJvY2VzcyAqLwordm9pZCBfX2luaXQgczVwdjIxMF9jb21tb25faW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubykKK3sKKwlzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICp0Y2ZnID0gY2ZnOworCXUzMiB1Y250OworCisJZm9yICh1Y250ID0gMDsgdWNudCA8IG5vOyB1Y250KyssIHRjZmcrKykgeworCQlpZiAoIXRjZmctPmNsb2NrcykgeworCQkJdGNmZy0+Y2xvY2tzID0gczVwdjIxMF9zZXJpYWxfY2xvY2tzOworCQkJdGNmZy0+Y2xvY2tzX3NpemUgPSBBUlJBWV9TSVpFKHM1cHYyMTBfc2VyaWFsX2Nsb2Nrcyk7CisJCX0KKwl9CisKKwlzM2MyNHh4X2luaXRfdWFydGRldnMoInM1cHYyMTAtdWFydCIsIHM1cF91YXJ0X3Jlc291cmNlcywgY2ZnLCBubyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1zbWRrYzExMC5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtc21ka2MxMTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjQ4NjlkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtc21ka2MxMTAuYwpAQCAtMCwwICsxLDk4IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1zbWRrYzExMC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9zNXB2MjEwLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKworLyogRm9sbG93aW5nIGFyZSBkZWZhdWx0IHZhbHVlcyBmb3IgVUNPTiwgVUxDT04gYW5kIFVGQ09OIFVBUlQgcmVnaXN0ZXJzICovCisjZGVmaW5lIFM1UFYyMTBfVUNPTl9ERUZBVUxUCShTM0MyNDEwX1VDT05fVFhJTEVWRUwgfAlcCisJCQkJIFMzQzI0MTBfVUNPTl9SWElMRVZFTCB8CVwKKwkJCQkgUzNDMjQxMF9VQ09OX1RYSVJRTU9ERSB8CVwKKwkJCQkgUzNDMjQxMF9VQ09OX1JYSVJRTU9ERSB8CVwKKwkJCQkgUzNDMjQxMF9VQ09OX1JYRklGT19UT0kgfAlcCisJCQkJIFMzQzI0NDNfVUNPTl9SWEVSUl9JUlFFTikKKworI2RlZmluZSBTNVBWMjEwX1VMQ09OX0RFRkFVTFQJUzNDMjQxMF9MQ09OX0NTOAorCisjZGVmaW5lIFM1UFYyMTBfVUZDT05fREVGQVVMVAkoUzNDMjQxMF9VRkNPTl9GSUZPTU9ERSB8CVwKKwkJCQkgUzVQVjIxMF9VRkNPTl9UWFRSSUc0IHwJXAorCQkJCSBTNVBWMjEwX1VGQ09OX1JYVFJJRzQpCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIHNtZGt2MjEwX3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJCT0gMCwKKwkJLmZsYWdzCQk9IDAsCisJCS51Y29uCQk9IFM1UFYyMTBfVUNPTl9ERUZBVUxULAorCQkudWxjb24JCT0gUzVQVjIxMF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gUzVQVjIxMF9VRkNPTl9ERUZBVUxULAorCX0sCisJWzFdID0geworCQkuaHdwb3J0CQk9IDEsCisJCS5mbGFncwkJPSAwLAorCQkudWNvbgkJPSBTNVBWMjEwX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IFM1UFYyMTBfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCQk9IFM1UFYyMTBfVUZDT05fREVGQVVMVCwKKwl9LAorCVsyXSA9IHsKKwkJLmh3cG9ydAkJPSAyLAorCQkuZmxhZ3MJCT0gMCwKKwkJLnVjb24JCT0gUzVQVjIxMF9VQ09OX0RFRkFVTFQsCisJCS51bGNvbgkJPSBTNVBWMjEwX1VMQ09OX0RFRkFVTFQsCisJCS51ZmNvbgkJPSBTNVBWMjEwX1VGQ09OX0RFRkFVTFQsCisJfSwKKwlbM10gPSB7CisJCS5od3BvcnQJCT0gMywKKwkJLmZsYWdzCQk9IDAsCisJCS51Y29uCQk9IFM1UFYyMTBfVUNPTl9ERUZBVUxULAorCQkudWxjb24JCT0gUzVQVjIxMF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gUzVQVjIxMF9VRkNPTl9ERUZBVUxULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc21ka2MxMTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc21ka2MxMTBfbWFwX2lvKHZvaWQpCit7CisJczVwX2luaXRfaW8oTlVMTCwgMCwgUzVQX1ZBX0NISVBJRCk7CisJczNjMjR4eF9pbml0X2Nsb2NrcygyNDAwMDAwMCk7CisJczNjMjR4eF9pbml0X3VhcnRzKHNtZGt2MjEwX3VhcnRjZmdzLCBBUlJBWV9TSVpFKHNtZGt2MjEwX3VhcnRjZmdzKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzbWRrYzExMF9tYWNoaW5lX2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzbWRrYzExMF9kZXZpY2VzLCBBUlJBWV9TSVpFKHNtZGtjMTEwX2RldmljZXMpKTsKK30KKworTUFDSElORV9TVEFSVChTTURLQzExMCwgIlNNREtDMTEwIikKKwkvKiBNYWludGFpbmVyOiBLdWtqaW4gS2ltIDxrZ2VuZS5raW1Ac2Ftc3VuZy5jb20+ICovCisJLnBoeXNfaW8JPSBTM0NfUEFfVUFSVCAmIDB4ZmZmMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKCgodTMyKVMzQ19WQV9VQVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gUzVQX1BBX1NEUkFNICsgMHgxMDAsCisJLmluaXRfaXJxCT0gczVwdjIxMF9pbml0X2lycSwKKwkubWFwX2lvCQk9IHNtZGtjMTEwX21hcF9pbywKKwkuaW5pdF9tYWNoaW5lCT0gc21ka2MxMTBfbWFjaGluZV9pbml0LAorCS50aW1lcgkJPSAmczNjMjR4eF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1zbWRrdjIxMC5jIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtc21ka3YyMTAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjc4ODMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zNXB2MjEwL21hY2gtc21ka3YyMTAuYwpAQCAtMCwwICsxLDk4IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXM1cHYyMTAvbWFjaC1zbWRrdjIxMC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9zNXB2MjEwLmg+CisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKworLyogRm9sbG93aW5nIGFyZSBkZWZhdWx0IHZhbHVlcyBmb3IgVUNPTiwgVUxDT04gYW5kIFVGQ09OIFVBUlQgcmVnaXN0ZXJzICovCisjZGVmaW5lIFM1UFYyMTBfVUNPTl9ERUZBVUxUCShTM0MyNDEwX1VDT05fVFhJTEVWRUwgfAlcCisJCQkJIFMzQzI0MTBfVUNPTl9SWElMRVZFTCB8CVwKKwkJCQkgUzNDMjQxMF9VQ09OX1RYSVJRTU9ERSB8CVwKKwkJCQkgUzNDMjQxMF9VQ09OX1JYSVJRTU9ERSB8CVwKKwkJCQkgUzNDMjQxMF9VQ09OX1JYRklGT19UT0kgfAlcCisJCQkJIFMzQzI0NDNfVUNPTl9SWEVSUl9JUlFFTikKKworI2RlZmluZSBTNVBWMjEwX1VMQ09OX0RFRkFVTFQJUzNDMjQxMF9MQ09OX0NTOAorCisjZGVmaW5lIFM1UFYyMTBfVUZDT05fREVGQVVMVAkoUzNDMjQxMF9VRkNPTl9GSUZPTU9ERSB8CVwKKwkJCQkgUzVQVjIxMF9VRkNPTl9UWFRSSUc0IHwJXAorCQkJCSBTNVBWMjEwX1VGQ09OX1JYVFJJRzQpCisKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIHNtZGt2MjEwX3VhcnRjZmdzW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJCT0gMCwKKwkJLmZsYWdzCQk9IDAsCisJCS51Y29uCQk9IFM1UFYyMTBfVUNPTl9ERUZBVUxULAorCQkudWxjb24JCT0gUzVQVjIxMF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gUzVQVjIxMF9VRkNPTl9ERUZBVUxULAorCX0sCisJWzFdID0geworCQkuaHdwb3J0CQk9IDEsCisJCS5mbGFncwkJPSAwLAorCQkudWNvbgkJPSBTNVBWMjEwX1VDT05fREVGQVVMVCwKKwkJLnVsY29uCQk9IFM1UFYyMTBfVUxDT05fREVGQVVMVCwKKwkJLnVmY29uCQk9IFM1UFYyMTBfVUZDT05fREVGQVVMVCwKKwl9LAorCVsyXSA9IHsKKwkJLmh3cG9ydAkJPSAyLAorCQkuZmxhZ3MJCT0gMCwKKwkJLnVjb24JCT0gUzVQVjIxMF9VQ09OX0RFRkFVTFQsCisJCS51bGNvbgkJPSBTNVBWMjEwX1VMQ09OX0RFRkFVTFQsCisJCS51ZmNvbgkJPSBTNVBWMjEwX1VGQ09OX0RFRkFVTFQsCisJfSwKKwlbM10gPSB7CisJCS5od3BvcnQJCT0gMywKKwkJLmZsYWdzCQk9IDAsCisJCS51Y29uCQk9IFM1UFYyMTBfVUNPTl9ERUZBVUxULAorCQkudWxjb24JCT0gUzVQVjIxMF9VTENPTl9ERUZBVUxULAorCQkudWZjb24JCT0gUzVQVjIxMF9VRkNPTl9ERUZBVUxULAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc21ka3YyMTBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Cit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc21ka3YyMTBfbWFwX2lvKHZvaWQpCit7CisJczVwX2luaXRfaW8oTlVMTCwgMCwgUzVQX1ZBX0NISVBJRCk7CisJczNjMjR4eF9pbml0X2Nsb2NrcygyNDAwMDAwMCk7CisJczNjMjR4eF9pbml0X3VhcnRzKHNtZGt2MjEwX3VhcnRjZmdzLCBBUlJBWV9TSVpFKHNtZGt2MjEwX3VhcnRjZmdzKSk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzbWRrdjIxMF9tYWNoaW5lX2luaXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzbWRrdjIxMF9kZXZpY2VzLCBBUlJBWV9TSVpFKHNtZGt2MjEwX2RldmljZXMpKTsKK30KKworTUFDSElORV9TVEFSVChTTURLVjIxMCwgIlNNREtWMjEwIikKKwkvKiBNYWludGFpbmVyOiBLdWtqaW4gS2ltIDxrZ2VuZS5raW1Ac2Ftc3VuZy5jb20+ICovCisJLnBoeXNfaW8JPSBTM0NfUEFfVUFSVCAmIDB4ZmZmMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKCgodTMyKVMzQ19WQV9VQVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gUzVQX1BBX1NEUkFNICsgMHgxMDAsCisJLmluaXRfaXJxCT0gczVwdjIxMF9pbml0X2lycSwKKwkubWFwX2lvCQk9IHNtZGt2MjEwX21hcF9pbywKKwkuaW5pdF9tYWNoaW5lCT0gc21ka3YyMTBfbWFjaGluZV9pbml0LAorCS50aW1lcgkJPSAmczNjMjR4eF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9iYWRnZTQuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2JhZGdlNC5jCmluZGV4IDA1MWVjMGYuLjI1OWNiMmMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2JhZGdlNC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2JhZGdlNC5jCkBAIC01MSw2ICs1MSwxMCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHNhMTExMV9wbGF0Zm9ybV9kYXRhIHNhMTExMV9pbmZvID0geworCS5pcnFfYmFzZQk9IElSUV9CT0FSRF9FTkQsCit9OworCiBzdGF0aWMgdTY0IHNhMTExMV9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzYTExMTFfZGV2aWNlID0gewpAQCAtNTksNiArNjMsNyBAQAogCS5kZXYJCT0gewogCQkuZG1hX21hc2sgPSAmc2ExMTExX2RtYW1hc2ssCiAJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmYsCisJCS5wbGF0Zm9ybV9kYXRhID0gJnNhMTExMV9pbmZvLAogCX0sCiAJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNhMTExMV9yZXNvdXJjZXMpLAogCS5yZXNvdXJjZQk9IHNhMTExMV9yZXNvdXJjZXMsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCmluZGV4IDk5ODJjNWMuLjVkNWYzMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCkBAIC0yMzQsNiArMjM0LDEwIEBACiAJfSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgbG9jb21vX3BsYXRmb3JtX2RhdGEgbG9jb21vX2luZm8gPSB7CisJLmlycV9iYXNlCT0gSVJRX0JPQVJEX1NUQVJULAorfTsKKwogc3RydWN0IHBsYXRmb3JtX2RldmljZSBjb2xsaWVfbG9jb21vX2RldmljZSA9IHsKIAkubmFtZQkJPSAibG9jb21vIiwKIAkuaWQJCT0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9jb2xsaWUuaCBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9jb2xsaWUuaAppbmRleCA3MWEwYjNmLi41MmFjZGE3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvY29sbGllLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2NvbGxpZS5oCkBAIC03MiwxMyArNzIsNiBAQAogI2RlZmluZSBDT0xMSUVfSVJRX0dQSU9fR0FfSU5UCQlJUlFfR1BJTzI1CiAjZGVmaW5lIENPTExJRV9JUlFfR1BJT19NQUlOX0JBVF9MT1cJSVJRX0dQSU8yNgogCi0jZGVmaW5lIENPTExJRV9MQ01fSVJRX0dQSU9fUlRTCQlJUlFfTE9DT01PX0dQSU8wCi0jZGVmaW5lIENPTExJRV9MQ01fSVJRX0dQSU9fQ1RTCQlJUlFfTE9DT01PX0dQSU8xCi0jZGVmaW5lIENPTExJRV9MQ01fSVJRX0dQSU9fRFNSCQlJUlFfTE9DT01PX0dQSU8yCi0jZGVmaW5lIENPTExJRV9MQ01fSVJRX0dQSU9fRFRSCQlJUlFfTE9DT01PX0dQSU8zCi0jZGVmaW5lIENPTExJRV9MQ01fSVJRX0dQSU9fblNEX0RFVEVDVAlJUlFfTE9DT01PX0dQSU8xMwotI2RlZmluZSBDT0xMSUVfTENNX0lSUV9HUElPX25TRF9XUAlJUlFfTE9DT01PX0dQSU8xNAotCiAvKiBHUElPJ3Mgb24gdGhlIFRDMzUxNDNBRiAoVG9zaGliYSBBbmFsb2cgRnJvbnRlbmQpICovCiAjZGVmaW5lIENPTExJRV9UQzM1MTQzX0dQSU9fQkFTRQkoR1BJT19NQVggKyAxMykKICNkZWZpbmUgQ09MTElFX1RDMzUxNDNfR1BJT19WRVJTSU9OMCAgICBVQ0JfSU9fMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggYWU4MWY4MC4uOGM4ODQ1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC02OCw5MyArNjgsMTcgQEAKICNkZWZpbmUgSVJRX0JPQVJEX1NUQVJUCQk0OQogI2RlZmluZSBJUlFfQk9BUkRfRU5ECQk2NQogCi0jZGVmaW5lIElSUV9TQTExMTFfU1RBUlQJKElSUV9CT0FSRF9FTkQpCi0jZGVmaW5lIElSUV9HUEFJTjAJCShJUlFfQk9BUkRfRU5EICsgMCkKLSNkZWZpbmUgSVJRX0dQQUlOMQkJKElSUV9CT0FSRF9FTkQgKyAxKQotI2RlZmluZSBJUlFfR1BBSU4yCQkoSVJRX0JPQVJEX0VORCArIDIpCi0jZGVmaW5lIElSUV9HUEFJTjMJCShJUlFfQk9BUkRfRU5EICsgMykKLSNkZWZpbmUgSVJRX0dQQklOMAkJKElSUV9CT0FSRF9FTkQgKyA0KQotI2RlZmluZSBJUlFfR1BCSU4xCQkoSVJRX0JPQVJEX0VORCArIDUpCi0jZGVmaW5lIElSUV9HUEJJTjIJCShJUlFfQk9BUkRfRU5EICsgNikKLSNkZWZpbmUgSVJRX0dQQklOMwkJKElSUV9CT0FSRF9FTkQgKyA3KQotI2RlZmluZSBJUlFfR1BCSU40CQkoSVJRX0JPQVJEX0VORCArIDgpCi0jZGVmaW5lIElSUV9HUEJJTjUJCShJUlFfQk9BUkRfRU5EICsgOSkKLSNkZWZpbmUgSVJRX0dQQ0lOMAkJKElSUV9CT0FSRF9FTkQgKyAxMCkKLSNkZWZpbmUgSVJRX0dQQ0lOMQkJKElSUV9CT0FSRF9FTkQgKyAxMSkKLSNkZWZpbmUgSVJRX0dQQ0lOMgkJKElSUV9CT0FSRF9FTkQgKyAxMikKLSNkZWZpbmUgSVJRX0dQQ0lOMwkJKElSUV9CT0FSRF9FTkQgKyAxMykKLSNkZWZpbmUgSVJRX0dQQ0lONAkJKElSUV9CT0FSRF9FTkQgKyAxNCkKLSNkZWZpbmUgSVJRX0dQQ0lONQkJKElSUV9CT0FSRF9FTkQgKyAxNSkKLSNkZWZpbmUgSVJRX0dQQ0lONgkJKElSUV9CT0FSRF9FTkQgKyAxNikKLSNkZWZpbmUgSVJRX0dQQ0lONwkJKElSUV9CT0FSRF9FTkQgKyAxNykKLSNkZWZpbmUgSVJRX01TVFhJTlQJCShJUlFfQk9BUkRfRU5EICsgMTgpCi0jZGVmaW5lIElSUV9NU1JYSU5UCQkoSVJRX0JPQVJEX0VORCArIDE5KQotI2RlZmluZSBJUlFfTVNTVE9QRVJSSU5UCShJUlFfQk9BUkRfRU5EICsgMjApCi0jZGVmaW5lIElSUV9UUFRYSU5UCQkoSVJRX0JPQVJEX0VORCArIDIxKQotI2RlZmluZSBJUlFfVFBSWElOVAkJKElSUV9CT0FSRF9FTkQgKyAyMikKLSNkZWZpbmUgSVJRX1RQU1RPUEVSUklOVAkoSVJRX0JPQVJEX0VORCArIDIzKQotI2RlZmluZSBTU1BYTVRJTlQJCShJUlFfQk9BUkRfRU5EICsgMjQpCi0jZGVmaW5lIFNTUFJDVklOVAkJKElSUV9CT0FSRF9FTkQgKyAyNSkKLSNkZWZpbmUgU1NQUk9SCQkJKElSUV9CT0FSRF9FTkQgKyAyNikKLSNkZWZpbmUgQVVEWE1URE1BRE9ORUEJCShJUlFfQk9BUkRfRU5EICsgMzIpCi0jZGVmaW5lIEFVRFJDVkRNQURPTkVBCQkoSVJRX0JPQVJEX0VORCArIDMzKQotI2RlZmluZSBBVURYTVRETUFET05FQgkJKElSUV9CT0FSRF9FTkQgKyAzNCkKLSNkZWZpbmUgQVVEUkNWRE1BRE9ORUIJCShJUlFfQk9BUkRfRU5EICsgMzUpCi0jZGVmaW5lIEFVRFRGU1IJCQkoSVJRX0JPQVJEX0VORCArIDM2KQotI2RlZmluZSBBVURSRlNSCQkJKElSUV9CT0FSRF9FTkQgKyAzNykKLSNkZWZpbmUgQVVEVFVSCQkJKElSUV9CT0FSRF9FTkQgKyAzOCkKLSNkZWZpbmUgQVVEUk9SCQkJKElSUV9CT0FSRF9FTkQgKyAzOSkKLSNkZWZpbmUgQVVERFRTCQkJKElSUV9CT0FSRF9FTkQgKyA0MCkKLSNkZWZpbmUgQVVEUkRECQkJKElSUV9CT0FSRF9FTkQgKyA0MSkKLSNkZWZpbmUgQVVEU1RPCQkJKElSUV9CT0FSRF9FTkQgKyA0MikKLSNkZWZpbmUgSVJRX1VTQlBXUgkJKElSUV9CT0FSRF9FTkQgKyA0MykKLSNkZWZpbmUgSVJRX0hDSU0JCShJUlFfQk9BUkRfRU5EICsgNDQpCi0jZGVmaW5lIElSUV9IQ0lCVUZGQUNDCQkoSVJRX0JPQVJEX0VORCArIDQ1KQotI2RlZmluZSBJUlFfSENJUk1UV0tQCQkoSVJRX0JPQVJEX0VORCArIDQ2KQotI2RlZmluZSBJUlFfTkhDSU1GQ0lSCQkoSVJRX0JPQVJEX0VORCArIDQ3KQotI2RlZmluZSBJUlFfVVNCX1BPUlRfUkVTVU1FCShJUlFfQk9BUkRfRU5EICsgNDgpCi0jZGVmaW5lIElSUV9TMF9SRUFEWV9OSU5UCShJUlFfQk9BUkRfRU5EICsgNDkpCi0jZGVmaW5lIElSUV9TMV9SRUFEWV9OSU5UCShJUlFfQk9BUkRfRU5EICsgNTApCi0jZGVmaW5lIElSUV9TMF9DRF9WQUxJRAkJKElSUV9CT0FSRF9FTkQgKyA1MSkKLSNkZWZpbmUgSVJRX1MxX0NEX1ZBTElECQkoSVJRX0JPQVJEX0VORCArIDUyKQotI2RlZmluZSBJUlFfUzBfQlZEMV9TVFNDSEcJKElSUV9CT0FSRF9FTkQgKyA1MykKLSNkZWZpbmUgSVJRX1MxX0JWRDFfU1RTQ0hHCShJUlFfQk9BUkRfRU5EICsgNTQpCi0KLSNkZWZpbmUgSVJRX0xPQ09NT19TVEFSVAkoSVJRX0JPQVJEX0VORCkKLSNkZWZpbmUgSVJRX0xPQ09NT19LRVkJCShJUlFfQk9BUkRfRU5EICsgMCkKLSNkZWZpbmUgSVJRX0xPQ09NT19HUElPMAkoSVJRX0JPQVJEX0VORCArIDEpCi0jZGVmaW5lIElSUV9MT0NPTU9fR1BJTzEJKElSUV9CT0FSRF9FTkQgKyAyKQotI2RlZmluZSBJUlFfTE9DT01PX0dQSU8yCShJUlFfQk9BUkRfRU5EICsgMykKLSNkZWZpbmUgSVJRX0xPQ09NT19HUElPMwkoSVJRX0JPQVJEX0VORCArIDQpCi0jZGVmaW5lIElSUV9MT0NPTU9fR1BJTzQJKElSUV9CT0FSRF9FTkQgKyA1KQotI2RlZmluZSBJUlFfTE9DT01PX0dQSU81CShJUlFfQk9BUkRfRU5EICsgNikKLSNkZWZpbmUgSVJRX0xPQ09NT19HUElPNgkoSVJRX0JPQVJEX0VORCArIDcpCi0jZGVmaW5lIElSUV9MT0NPTU9fR1BJTzcJKElSUV9CT0FSRF9FTkQgKyA4KQotI2RlZmluZSBJUlFfTE9DT01PX0dQSU84CShJUlFfQk9BUkRfRU5EICsgOSkKLSNkZWZpbmUgSVJRX0xPQ09NT19HUElPOQkoSVJRX0JPQVJEX0VORCArIDEwKQotI2RlZmluZSBJUlFfTE9DT01PX0dQSU8xMAkoSVJRX0JPQVJEX0VORCArIDExKQotI2RlZmluZSBJUlFfTE9DT01PX0dQSU8xMQkoSVJRX0JPQVJEX0VORCArIDEyKQotI2RlZmluZSBJUlFfTE9DT01PX0dQSU8xMgkoSVJRX0JPQVJEX0VORCArIDEzKQotI2RlZmluZSBJUlFfTE9DT01PX0dQSU8xMwkoSVJRX0JPQVJEX0VORCArIDE0KQotI2RlZmluZSBJUlFfTE9DT01PX0dQSU8xNAkoSVJRX0JPQVJEX0VORCArIDE1KQotI2RlZmluZSBJUlFfTE9DT01PX0dQSU8xNQkoSVJRX0JPQVJEX0VORCArIDE2KQotI2RlZmluZSBJUlFfTE9DT01PX0xUCQkoSVJRX0JPQVJEX0VORCArIDE3KQotI2RlZmluZSBJUlFfTE9DT01PX1NQSV9SRlIJKElSUV9CT0FSRF9FTkQgKyAxOCkKLSNkZWZpbmUgSVJRX0xPQ09NT19TUElfUkZXCShJUlFfQk9BUkRfRU5EICsgMTkpCi0jZGVmaW5lIElSUV9MT0NPTU9fU1BJX1JFTkQJKElSUV9CT0FSRF9FTkQgKyAyMCkKLSNkZWZpbmUgSVJRX0xPQ09NT19TUElfVEVORAkoSVJRX0JPQVJEX0VORCArIDIxKQotCiAvKgogICogRmlndXJlIG91dCB0aGUgTUFYIElSUSBudW1iZXIuCiAgKgogICogSWYgd2UgaGF2ZSBhbiBTQTExMTEsIHRoZSBtYXggSVJRIGlzIFMxX0JWRDFfU1RTQ0hHKzEuCi0gKiBJZiB3ZSBoYXZlIGFuIExvQ29NbywgdGhlIG1heCBJUlEgaXMgSVJRX0xPQ09NT19TUElfVEVORCsxCisgKiBJZiB3ZSBoYXZlIGFuIExvQ29NbywgdGhlIG1heCBJUlEgaXMgSVJRX0JPQVJEX1NUQVJUICsgNAogICogT3RoZXJ3aXNlLCB3ZSBoYXZlIHRoZSBzdGFuZGFyZCBJUlFzIG9ubHkuCiAgKi8KICNpZmRlZiBDT05GSUdfU0ExMTExCi0jZGVmaW5lIE5SX0lSUVMJCQkoSVJRX1MxX0JWRDFfU1RTQ0hHICsgMSkKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NIQVJQX0xPQ09NTykKLSNkZWZpbmUgTlJfSVJRUwkJCShJUlFfTE9DT01PX1NQSV9URU5EICsgMSkKKyNkZWZpbmUgTlJfSVJRUwkJCShJUlFfQk9BUkRfRU5EICsgNTUpCisjZWxpZiBkZWZpbmVkKENPTkZJR19TSEFSUFNMX0xPQ09NTykKKyNkZWZpbmUgTlJfSVJRUwkJCShJUlFfQk9BUkRfU1RBUlQgKyA0KQogI2Vsc2UKICNkZWZpbmUgTlJfSVJRUwkJCShJUlFfQk9BUkRfU1RBUlQpCiAjZW5kaWYKQEAgLTE2NiwxMCArOTAsMyBAQAogI2RlZmluZSBJUlFfTkVQT05TRVRfU01DOTE5NgkoSVJRX0JPQVJEX1NUQVJUICsgMCkKICNkZWZpbmUgSVJRX05FUE9OU0VUX1VTQVIJKElSUV9CT0FSRF9TVEFSVCArIDEpCiAjZGVmaW5lIElSUV9ORVBPTlNFVF9TQTExMTEJKElSUV9CT0FSRF9TVEFSVCArIDIpCi0KLS8qIExvQ29NbyBJbnRlcnJ1cHRzIChDT05GSUdfU0hBUlBfTE9DT01PKSAqLwotI2RlZmluZSBJUlFfTE9DT01PX0tFWV9CQVNFCShJUlFfQk9BUkRfU1RBUlQgKyAwKQotI2RlZmluZSBJUlFfTE9DT01PX0dQSU9fQkFTRQkoSVJRX0JPQVJEX1NUQVJUICsgMSkKLSNkZWZpbmUgSVJRX0xPQ09NT19MVF9CQVNFCShJUlFfQk9BUkRfU1RBUlQgKyAyKQotI2RlZmluZSBJUlFfTE9DT01PX1NQSV9CQVNFCShJUlFfQk9BUkRfU1RBUlQgKyAzKQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9qb3JuYWRhNzIwLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9qb3JuYWRhNzIwLmMKaW5kZXggMTNlYmQyZC4uZDNlYzYyMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zYTExMDAvam9ybmFkYTcyMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2pvcm5hZGE3MjAuYwpAQCAtMjA4LDYgKzIwOCwxMCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHNhMTExMV9wbGF0Zm9ybV9kYXRhIHNhMTExMV9pbmZvID0geworCS5pcnFfYmFzZQk9IElSUV9CT0FSRF9FTkQsCit9OworCiBzdGF0aWMgdTY0IHNhMTExMV9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzYTExMTFfZGV2aWNlID0gewpAQCAtMjE2LDYgKzIyMCw3IEBACiAJLmRldgkJPSB7CiAJCS5kbWFfbWFzayA9ICZzYTExMTFfZG1hbWFzaywKIAkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc2ExMTExX2luZm8sCiAJfSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2ExMTExX3Jlc291cmNlcyksCiAJLnJlc291cmNlCT0gc2ExMTExX3Jlc291cmNlcywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2pvcm5hZGE3MjBfc3NwLmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9qb3JuYWRhNzIwX3NzcC5jCmluZGV4IDUwNmE1ZTUuLjliNmRlZTVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9qb3JuYWRhNzIwX3NzcC5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2pvcm5hZGE3MjBfc3NwLmMKQEAgLTEzMCw3ICsxMzAsNyBAQAogfTsKIEVYUE9SVF9TWU1CT0woam9ybmFkYV9zc3BfZW5kKTsKIAotc3RhdGljIGludCBfX2luaXQgam9ybmFkYV9zc3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgam9ybmFkYV9zc3BfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCWludCByZXQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMgYi9hcmNoL2FybS9tYWNoLXNhMTEwMC9uZXBvbnNldC5jCmluZGV4IDZjY2QxNzUuLjBiNTA1ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL25lcG9uc2V0LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvbmVwb25zZXQuYwpAQCAtMjQxLDYgKzI0MSwxMCBAQAogCX0sCiB9OwogCitzdGF0aWMgc3RydWN0IHNhMTExMV9wbGF0Zm9ybV9kYXRhIHNhMTExMV9pbmZvID0geworCS5pcnFfYmFzZQk9IElSUV9CT0FSRF9FTkQsCit9OworCiBzdGF0aWMgdTY0IHNhMTExMV9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzYTExMTFfZGV2aWNlID0gewpAQCAtMjQ5LDYgKzI1Myw3IEBACiAJLmRldgkJPSB7CiAJCS5kbWFfbWFzayA9ICZzYTExMTFfZG1hbWFzaywKIAkJLmNvaGVyZW50X2RtYV9tYXNrID0gMHhmZmZmZmZmZiwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmc2ExMTExX2luZm8sCiAJfSwKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2ExMTExX3Jlc291cmNlcyksCiAJLnJlc291cmNlCT0gc2ExMTExX3Jlc291cmNlcywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL3RpbWUuYwppbmRleCBiOWNiYjU2Li43NGI2ZTBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXNhMTEwMC90aW1lLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zYTExMDAvdGltZS5jCkBAIC0zNSwxNCArMzUsMTIgQEAKIHN0YXRpYyBpbnQKIHNhMTEwMF9vc21yMF9zZXRfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLCBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIG5leHQsIG9zY3I7CisJdW5zaWduZWQgbG9uZyBuZXh0LCBvc2NyOwogCi0JcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlPSUVSIHw9IE9JRVJfRTA7CiAJbmV4dCA9IE9TQ1IgKyBkZWx0YTsKIAlPU01SMCA9IG5leHQ7CiAJb3NjciA9IE9TQ1I7Ci0JcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXJldHVybiAoc2lnbmVkKShuZXh0IC0gb3NjcikgPD0gTUlOX09TQ1JfREVMVEEgPyAtRVRJTUUgOiAwOwogfQpAQCAtNTAsMTYgKzQ4LDEyIEBACiBzdGF0aWMgdm9pZAogc2ExMTAwX29zbXIwX3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLCBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIENMT0NLX0VWVF9NT0RFX09ORVNIT1Q6CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9TSFVURE9XTjoKLQkJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJT0lFUiAmPSB+T0lFUl9FMDsKIAkJT1NTUiA9IE9TU1JfTTA7Ci0JCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCWJyZWFrOwogCiAJY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWcgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVjZWI5YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvS2NvbmZpZwpAQCAtMCwwICsxLDg0IEBACitpZiBBUkNIX1NITU9CSUxFCisKK2NvbW1lbnQgIlNILU1vYmlsZSBTeXN0ZW0gVHlwZSIKKworY29uZmlnIEFSQ0hfU0g3MzY3CisJYm9vbCAiU0gtTW9iaWxlIEczIChTSDczNjcpIgorCXNlbGVjdCBDUFVfVjYKKwlzZWxlY3QgSEFWRV9DTEsKKwlzZWxlY3QgQ09NTU9OX0NMS0RFVgorCXNlbGVjdCBHRU5FUklDX1RJTUUKKwlzZWxlY3QgR0VORVJJQ19DTE9DS0VWRU5UUworCitjb25maWcgQVJDSF9TSDczNzcKKwlib29sICJTSC1Nb2JpbGUgRzQgKFNINzM3NykiCisJc2VsZWN0IENQVV9WNworCXNlbGVjdCBIQVZFX0NMSworCXNlbGVjdCBDT01NT05fQ0xLREVWCisJc2VsZWN0IEdFTkVSSUNfVElNRQorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisKK2NvbmZpZyBBUkNIX1NINzM3MgorCWJvb2wgIlNILU1vYmlsZSBBUDQgKFNINzM3MikiCisJc2VsZWN0IENQVV9WNworCXNlbGVjdCBIQVZFX0NMSworCXNlbGVjdCBDT01NT05fQ0xLREVWCisJc2VsZWN0IEdFTkVSSUNfVElNRQorCXNlbGVjdCBHRU5FUklDX0NMT0NLRVZFTlRTCisKK2NvbW1lbnQgIlNILU1vYmlsZSBCb2FyZCBUeXBlIgorCitjb25maWcgTUFDSF9HM0VWTQorCWJvb2wgIkczRVZNIGJvYXJkIgorCWRlcGVuZHMgb24gQVJDSF9TSDczNjcKKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKworY29uZmlnIE1BQ0hfRzRFVk0KKwlib29sICJHNEVWTSBib2FyZCIKKwlkZXBlbmRzIG9uIEFSQ0hfU0g3Mzc3CisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisKK2NvbmZpZyBNQUNIX0FQNEVWQgorCWJvb2wgIkFQNEVWQiBib2FyZCIKKwlkZXBlbmRzIG9uIEFSQ0hfU0g3MzcyCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisKK2NvbW1lbnQgIlNILU1vYmlsZSBTeXN0ZW0gQ29uZmlndXJhdGlvbiIKKworbWVudSAiTWVtb3J5IGNvbmZpZ3VyYXRpb24iCisKK2NvbmZpZyBNRU1PUllfU1RBUlQKKwloZXggIlBoeXNpY2FsIG1lbW9yeSBzdGFydCBhZGRyZXNzIgorCWRlZmF1bHQgIjB4NTAwMDAwMDAiIGlmIE1BQ0hfRzNFVk0KKwlkZWZhdWx0ICIweDQwMDAwMDAwIiBpZiBNQUNIX0c0RVZNCisJZGVmYXVsdCAiMHg0MDAwMDAwMCIgaWYgTUFDSF9BUDRFVkIKKwlkZWZhdWx0ICIweDAwMDAwMDAwIgorCS0tLWhlbHAtLS0KKwkgIFR3ZWFrIHRoaXMgb25seSB3aGVuIHBvcnRpbmcgdG8gYSBuZXcgbWFjaGluZSB3aGljaCBkb2VzIG5vdAorCSAgYWxyZWFkeSBoYXZlIGEgZGVmY29uZmlnLiBDaGFuZ2luZyBpdCBmcm9tIHRoZSBrbm93biBjb3JyZWN0CisJICB2YWx1ZSBvbiBhbnkgb2YgdGhlIGtub3duIHN5c3RlbXMgd2lsbCBvbmx5IGxlYWQgdG8gZGlzYXN0ZXIuCisKK2NvbmZpZyBNRU1PUllfU0laRQorCWhleCAiUGh5c2ljYWwgbWVtb3J5IHNpemUiCisJZGVmYXVsdCAiMHgwODAwMDAwMCIgaWYgTUFDSF9HM0VWTQorCWRlZmF1bHQgIjB4MDgwMDAwMDAiIGlmIE1BQ0hfRzRFVk0KKwlkZWZhdWx0ICIweDEwMDAwMDAwIiBpZiBNQUNIX0FQNEVWQgorCWRlZmF1bHQgIjB4MDQwMDAwMDAiCisJaGVscAorCSAgVGhpcyBzZXRzIHRoZSBkZWZhdWx0IG1lbW9yeSBzaXplIGFzc3VtZWQgYnkgeW91ciBrZXJuZWwuIEl0IGNhbgorCSAgYmUgb3ZlcnJpZGRlbiBhcyBub3JtYWwgYnkgdGhlICdtZW09JyBhcmd1bWVudCBvbiB0aGUga2VybmVsIGNvbW1hbmQKKwkgIGxpbmUuCisKK2VuZG1lbnUKKworbWVudSAiVGltZXIgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24iCisKK2NvbmZpZyBTSF9USU1FUl9DTVQKKwlib29sICJDTVQgdGltZXIgZHJpdmVyIgorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBidWlsZCBvZiB0aGUgQ01UIHRpbWVyIGRyaXZlci4KKworZW5kbWVudQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQzODVkMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUKQEAgLTAsMCArMSwyMiBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKworIyBDb21tb24gb2JqZWN0cworb2JqLXkJCQkJOj0gdGltZXIubyBjb25zb2xlLm8KKworIyBDUFUgb2JqZWN0cworb2JqLSQoQ09ORklHX0FSQ0hfU0g3MzY3KQkrPSBzZXR1cC1zaDczNjcubyBjbG9jay1zaDczNjcubyBpbnRjLXNoNzM2Ny5vCitvYmotJChDT05GSUdfQVJDSF9TSDczNzcpCSs9IHNldHVwLXNoNzM3Ny5vIGNsb2NrLXNoNzM2Ny5vIGludGMtc2g3Mzc3Lm8KK29iai0kKENPTkZJR19BUkNIX1NINzM3MikJKz0gc2V0dXAtc2g3MzcyLm8gY2xvY2stc2g3MzY3Lm8gaW50Yy1zaDczNzIubworCisjIFBpbm11eCBzZXR1cAorcGZjLSQoQ09ORklHX0FSQ0hfU0g3MzY3KQk6PSBwZmMtc2g3MzY3Lm8KK3BmYy0kKENPTkZJR19BUkNIX1NINzM3NykJOj0gcGZjLXNoNzM3Ny5vCitwZmMtJChDT05GSUdfQVJDSF9TSDczNzIpCTo9IHBmYy1zaDczNzIubworb2JqLSQoQ09ORklHX0dFTkVSSUNfR1BJTykJKz0gJChwZmMteSkKKworIyBCb2FyZCBvYmplY3RzCitvYmotJChDT05GSUdfTUFDSF9HM0VWTSkJKz0gYm9hcmQtZzNldm0ubworb2JqLSQoQ09ORklHX01BQ0hfRzRFVk0pCSs9IGJvYXJkLWc0ZXZtLm8KK29iai0kKENPTkZJR19NQUNIX0FQNEVWQikJKz0gYm9hcmQtYXA0ZXZiLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUuYm9vdCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzA4ZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsOSBAQAorX19aUkVMQUREUgk6PSAkKHNoZWxsIC9iaW4vYmFzaCAtYyAncHJpbnRmICIweCUwOHgiIFwKKwkJICAgICAkJFskKENPTkZJR19NRU1PUllfU1RBUlQpICsgMHg4MDAwXScpCisKKyAgIHpyZWxhZGRyLXkgICA6PSAkKF9fWlJFTEFERFIpCisKKyMgVW5zdXBwb3J0ZWQgbGVnYWN5IHN0dWZmCisjCisjcGFyYW1zX3BoeXMteSAoSW5zdGVhZDogUGFzcyBhdGFncyBwb2ludGVyIGluIHIyKQorI2luaXRyZF9waHlzLXkgKEluc3RlYWQ6IFVzZSBjb21waWxlZC1pbiBpbml0cmFtZnMpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWFwNGV2Yi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDQ2M2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1hcDRldmIuYwpAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAqIEFQNEVWQiBib2FyZCBzdXBwb3J0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwICBNYWdudXMgRGFtbQorICogQ29weXJpZ2h0IChDKSAyMDA4ICBZb3NoaWhpcm8gU2hpbW9kYQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvbXRkL210ZC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9wYXJ0aXRpb25zLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3Ntc2M5MTF4Lmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQvc2hfa2V5c2MuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPG1hY2gvc2g3MzcyLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisKKy8qCisgKiBBZGRyZXNzCUludGVyZmFjZQkJQnVzV2lkdGgJbm90ZQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAweDAwMDBfMDAwMAlOT1IgRmxhc2ggUk9NIChNQ1ApCTE2Yml0CQlTVzcgOiBiaXQxID0gT04KKyAqIDB4MDgwMF8wMDAwCXVzZXIgYXJlYQkJLQorICogMHgxMDAwXzAwMDAJTk9SIEZsYXNoIFJPTSAoTUNQKQkxNmJpdAkJU1c3IDogYml0MSA9IE9GRgorICogMHgxNDAwXzAwMDAJRXRoZXIgKExBTjkyMjApCQkxNmJpdAorICogMHgxNjAwXzAwMDAJdXNlciBhcmVhCQktCQljYW5ub3QgdXNlIHdpdGggTkFORAorICogMHgxODAwXzAwMDAJdXNlciBhcmVhCQktCisgKiAweDFBMDBfMDAwMAktCisgKiAweDQwMDBfMDAwMAlMUEREUjItU0RSQU0gKFBPUCkJMzJiaXQKKyAqLworCisvKgorICogTk9SIEZsYXNoIFJPTQorICoKKyAqICBTVzEgIHwgICAgIFNXMiAgICB8IFNXNyAgfCBOT1IgRmxhc2ggUk9NCisgKiAgYml0MSB8IGJpdDEgIGJpdDIgfCBiaXQxIHwgTWVtb3J5IGFsbG9jYXRpb24KKyAqIC0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLQorICogIE9GRiAgfCBPTiAgICAgT0ZGIHwgT04gICB8ICAgIEFyZWEgMAorICogIE9GRiAgfCBPTiAgICAgT0ZGIHwgT0ZGICB8ICAgIEFyZWEgNAorICovCisKKy8qCisgKiBOQU5EIEZsYXNoIFJPTQorICoKKyAqICBTVzEgIHwgICAgIFNXMiAgICB8IFNXNyAgfCBOQU5EIEZsYXNoIFJPTQorICogIGJpdDEgfCBiaXQxICBiaXQyIHwgYml0MiB8IE1lbW9yeSBhbGxvY2F0aW9uCisgKiAtLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBPRkYgIHwgT04gICAgIE9GRiB8IE9OICAgfCAgICBGQ0UgMAorICogIE9GRiAgfCBPTiAgICAgT0ZGIHwgT0ZGICB8ICAgIEZDRSAxCisgKi8KKworLyoKKyAqIFNNU0MgOTIyMAorICoKKyAqICBTVzEJCVNNU0MgOTIyMAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBPTgkJYWNjZXNzIGRpc2FibGUKKyAqICBPRkYJCWFjY2VzcyBlbmFibGUKKyAqLworCisvKgorICogS0VZU0MKKyAqCisgKiBTVzQzCQlLRVlTQworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogT04JCWVuYWJsZQorICogT0ZGCQlkaXNhYmxlCisgKi8KKworLyogTVREICovCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbm9yX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJsb2FkZXIiLAorCQkub2Zmc2V0CQk9IDB4MDAwMDAwMDAsCisJCS5zaXplCQk9IDUxMiAqIDEwMjQsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJib290ZW52IiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IDUxMiAqIDEwMjQsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJrZXJuZWxfcm8iLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gOCAqIDEwMjQgKiAxMDI0LAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJrZXJuZWwiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gOCAqIDEwMjQgKiAxMDI0LAorCX0sCisJeworCQkubmFtZQkJPSAiZGF0YSIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBub3JfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKKwkucGFydHMJCT0gbm9yX2ZsYXNoX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShub3JfZmxhc2hfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5vcl9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0JPSB7CisJCS5zdGFydAk9IDB4MDAwMDAwMDAsCisJCS5lbmQJPSAweDA4MDAwMDAwIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugbm9yX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm5vcl9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5vcl9mbGFzaF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG5vcl9mbGFzaF9yZXNvdXJjZXMsCit9OworCisvKiBTTVNDIDkyMjAgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTExeF9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5zdGFydAk9IDB4MTQwMDAwMDAsCisJCS5lbmQJPSAweDE2MDAwMDAwIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwgeworCQkuc3RhcnQJPSA2LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX0xPV0xFVkVMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNtc2M5MTF4X3BsYXRmb3JtX2NvbmZpZyBzbXNjOTExeF9pbmZvID0geworCS5mbGFncwkJPSBTTVNDOTExWF9VU0VfMTZCSVQgfCBTTVNDOTExWF9TQVZFX01BQ19BRERSRVNTLAorCS5pcnFfcG9sYXJpdHkgICA9IFNNU0M5MTFYX0lSUV9QT0xBUklUWV9BQ1RJVkVfTE9XLAorCS5pcnFfdHlwZSAgICAgICA9IFNNU0M5MTFYX0lSUV9UWVBFX1BVU0hfUFVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNtYzkxMXhfZGV2aWNlID0geworCS5uYW1lICAgICAgICAgICA9ICJzbXNjOTExeCIsCisJLmlkICAgICAgICAgICAgID0gLTEsCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShzbWM5MTF4X3Jlc291cmNlcyksCisJLnJlc291cmNlICAgICAgID0gc21jOTExeF9yZXNvdXJjZXMsCisJLmRldiAgICAgICAgICAgID0geworCQkucGxhdGZvcm1fZGF0YSA9ICZzbXNjOTExeF9pbmZvLAorCX0sCit9OworCisvKiBLRVlTQyAoTmVlZHMgU1c0MyBzZXQgdG8gT04pICovCitzdGF0aWMgc3RydWN0IHNoX2tleXNjX2luZm8ga2V5c2NfaW5mbyA9IHsKKwkubW9kZQkJPSBTSF9LRVlTQ19NT0RFXzEsCisJLnNjYW5fdGltaW5nCT0gMywKKwkuZGVsYXkJCT0gMjUwMCwKKwkua2V5Y29kZXMgPSB7CisJCUtFWV8wLCBLRVlfMSwgS0VZXzIsIEtFWV8zLCBLRVlfNCwKKwkJS0VZXzUsIEtFWV82LCBLRVlfNywgS0VZXzgsIEtFWV85LAorCQlLRVlfQSwgS0VZX0IsIEtFWV9DLCBLRVlfRCwgS0VZX0UsCisJCUtFWV9GLCBLRVlfRywgS0VZX0gsIEtFWV9JLCBLRVlfSiwKKwkJS0VZX0ssIEtFWV9MLCBLRVlfTSwgS0VZX04sIEtFWV9PLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGtleXNjX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiS0VZU0MiLAorCQkuc3RhcnQgID0gMHhlNjFiMDAwMCwKKwkJLmVuZCAgICA9IDB4ZTYxYjAwNjMsCisJCS5mbGFncyAgPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0ICA9IDc5LAorCQkuZmxhZ3MgID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGtleXNjX2RldmljZSA9IHsKKwkubmFtZSAgICAgICAgICAgPSAic2hfa2V5c2MiLAorCS5pZCAgICAgICAgICAgICA9IDAsIC8qICJrZXlzYzAiIGNsb2NrICovCisJLm51bV9yZXNvdXJjZXMgID0gQVJSQVlfU0laRShrZXlzY19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZSAgICAgICA9IGtleXNjX3Jlc291cmNlcywKKwkuZGV2CT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZrZXlzY19pbmZvLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYXA0ZXZiX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZub3JfZmxhc2hfZGV2aWNlLAorCSZzbWM5MTF4X2RldmljZSwKKwkma2V5c2NfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBhcDRldmJfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJLyogY3JlYXRlIGEgMToxIGVudGl0eSBtYXAgZm9yIDB4ZTZ4eHh4eHgKKwkgKiB1c2VkIGJ5IENQR0EsIElOVEMgYW5kIFBGQy4KKwkgKi8KKwl7CisJCS52aXJ0dWFsCT0gMHhlNjAwMDAwMCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKDB4ZTYwMDAwMDApLAorCQkubGVuZ3RoCQk9IDI1NiA8PCAyMCwKKwkJLnR5cGUJCT0gTVRfREVWSUNFX05PTlNIQVJFRAorCX0sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgYXA0ZXZiX21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdChhcDRldmJfaW9fZGVzYywgQVJSQVlfU0laRShhcDRldmJfaW9fZGVzYykpOworCisJLyogc2V0dXAgZWFybHkgZGV2aWNlcywgY2xvY2tzIGFuZCBjb25zb2xlIGhlcmUgYXMgd2VsbCAqLworCXNoNzM3Ml9hZGRfZWFybHlfZGV2aWNlcygpOworCXNoNzM2N19jbG9ja19pbml0KCk7IC8qIHVzZSBnMyBjbG9ja3MgZm9yIG5vdyAqLworCXNobW9iaWxlX3NldHVwX2NvbnNvbGUoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGFwNGV2Yl9pbml0KHZvaWQpCit7CisJc2g3MzcyX3Bpbm11eF9pbml0KCk7CisKKwkvKiBlbmFibGUgU0NJRkEwICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0NJRkEwX1RYRCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0NJRkEwX1JYRCwgTlVMTCk7CisKKwkvKiBlbmFibGUgU01TQzkxMVggKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9DUzVBLAlOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9JUlE2XzM5LAlOVUxMKTsKKworCS8qIGVuYWJsZSBMRUQgMSAtIDQgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19QT1JUMTg1LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19QT1JUMTg2LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19QT1JUMTg3LCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19QT1JUMTg4LCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QT1JUMTg1LCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QT1JUMTg2LCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QT1JUMTg3LCAxKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QT1JUMTg4LCAxKTsKKwlncGlvX2V4cG9ydChHUElPX1BPUlQxODUsIDApOworCWdwaW9fZXhwb3J0KEdQSU9fUE9SVDE4NiwgMCk7CisJZ3Bpb19leHBvcnQoR1BJT19QT1JUMTg3LCAwKTsKKwlncGlvX2V4cG9ydChHUElPX1BPUlQxODgsIDApOworCisJLyogZW5hYmxlIERlYnVnIHN3aXRjaCAoUzYpICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUE9SVDMyLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19QT1JUMzMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX1BPUlQzNCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fUE9SVDM1LCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX1BPUlQzMik7CisJZ3Bpb19kaXJlY3Rpb25faW5wdXQoR1BJT19QT1JUMzMpOworCWdwaW9fZGlyZWN0aW9uX2lucHV0KEdQSU9fUE9SVDM0KTsKKwlncGlvX2RpcmVjdGlvbl9pbnB1dChHUElPX1BPUlQzNSk7CisJZ3Bpb19leHBvcnQoR1BJT19QT1JUMzIsIDApOworCWdwaW9fZXhwb3J0KEdQSU9fUE9SVDMzLCAwKTsKKwlncGlvX2V4cG9ydChHUElPX1BPUlQzNCwgMCk7CisJZ3Bpb19leHBvcnQoR1BJT19QT1JUMzUsIDApOworCisJLyogZW5hYmxlIEtFWVNDICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZT1VUNCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZSU4wXzEzNiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZSU4xXzEzNSwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZSU4yXzEzNCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZSU4zXzEzMywgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fS0VZSU40LCAgICAgTlVMTCk7CisKKwlzaDczNzJfYWRkX3N0YW5kYXJkX2RldmljZXMoKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGFwNGV2Yl9kZXZpY2VzLCBBUlJBWV9TSVpFKGFwNGV2Yl9kZXZpY2VzKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoQVA0RVZCLCAiYXA0ZXZiIikKKwkucGh5c19pbwk9IDB4ZTYwMDAwMDAsCisJLmlvX3BnX29mZnN0CT0gKCgweGU2MDAwMDAwKSA+PiAxOCkgJiAweGZmZmMsCisJLm1hcF9pbwkJPSBhcDRldmJfbWFwX2lvLAorCS5pbml0X2lycQk9IHNoNzM3Ml9pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gYXA0ZXZiX2luaXQsCisJLnRpbWVyCQk9ICZzaG1vYmlsZV90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWczZXZtLmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2JvYXJkLWczZXZtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM2YzlhOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZzNldm0uYwpAQCAtMCwwICsxLDIxMSBAQAorLyoKKyAqIEczRVZNIGJvYXJkIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIE1hZ251cyBEYW1tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggIFlvc2hpaGlybyBTaGltb2RhCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9yOGE2NjU5Ny5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPG1hY2gvc2g3MzY3Lmg+CisjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKworc3RhdGljIHN0cnVjdCBtdGRfcGFydGl0aW9uIG5vcl9mbGFzaF9wYXJ0aXRpb25zW10gPSB7CisJeworCQkubmFtZQkJPSAibG9hZGVyIiwKKwkJLm9mZnNldAkJPSAweDAwMDAwMDAwLAorCQkuc2l6ZQkJPSA1MTIgKiAxMDI0LAorCX0sCisJeworCQkubmFtZQkJPSAiYm9vdGVudiIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSA1MTIgKiAxMDI0LAorCX0sCisJeworCQkubmFtZQkJPSAia2VybmVsX3JvIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IDggKiAxMDI0ICogMTAyNCwKKwkJLm1hc2tfZmxhZ3MJPSBNVERfV1JJVEVBQkxFLAorCX0sCisJeworCQkubmFtZQkJPSAia2VybmVsIiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IDggKiAxMDI0ICogMTAyNCwKKwl9LAorCXsKKwkJLm5hbWUJCT0gImRhdGEiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gTVREUEFSVF9TSVpfRlVMTCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgbm9yX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDIsCisJLnBhcnRzCQk9IG5vcl9mbGFzaF9wYXJ0aXRpb25zLAorCS5ucl9wYXJ0cwk9IEFSUkFZX1NJWkUobm9yX2ZsYXNoX3BhcnRpdGlvbnMpLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBub3JfZmxhc2hfcmVzb3VyY2VzW10gPSB7CisJWzBdCT0geworCQkuc3RhcnQJPSAweDAwMDAwMDAwLAorCQkuZW5kCT0gMHgwODAwMDAwMCAtIDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5vcl9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZub3JfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShub3JfZmxhc2hfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBub3JfZmxhc2hfcmVzb3VyY2VzLAorfTsKKworLyogVVNCSFMgKi8KK3ZvaWQgdXNiX2hvc3RfcG9ydF9wb3dlcihpbnQgcG9ydCwgaW50IHBvd2VyKQoreworCWlmICghcG93ZXIpIC8qIG9ubHkgcG93ZXItb24gc3VwcG9ydGVkIGZvciBub3cgKi8KKwkJcmV0dXJuOworCisJLyogc2V0IFZCT1VUL1BXRU4gYW5kIEVYVExQMCBpbiBEVlNUQ1RSICovCisJX19yYXdfd3JpdGV3KF9fcmF3X3JlYWR3KDB4ZTY4OTAwMDgpIHwgMHg2MDAsIDB4ZTY4OTAwMDgpOworfQorCitzdGF0aWMgc3RydWN0IHI4YTY2NTk3X3BsYXRkYXRhIHVzYl9ob3N0X2RhdGEgPSB7CisJLm9uX2NoaXAgPSAxLAorCS5wb3J0X3Bvd2VyID0gdXNiX2hvc3RfcG9ydF9wb3dlciwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdXNiX2hvc3RfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJVU0JIUyIsCisJCS5zdGFydAk9IDB4ZTY4OTAwMDAsCisJCS5lbmQJPSAweGU2ODkwMGU1LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gNjUsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB1c2JfaG9zdF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInI4YTY2NTk3X2hjZCIsCisJLmlkCQk9IDAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJCT0gJnVzYl9ob3N0X2RhdGEsCisJCS5kbWFfbWFzawkJPSBOVUxMLAorCQkuY29oZXJlbnRfZG1hX21hc2sJPSAweGZmZmZmZmZmLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHVzYl9ob3N0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gdXNiX2hvc3RfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmczZXZtX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZub3JfZmxhc2hfZGV2aWNlLAorCSZ1c2JfaG9zdF9kZXZpY2UsCit9OworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGczZXZtX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCS8qIGNyZWF0ZSBhIDE6MSBlbnRpdHkgbWFwIGZvciAweGU2eHh4eHh4CisJICogdXNlZCBieSBDUEdBLCBJTlRDIGFuZCBQRkMuCisJICovCisJeworCQkudmlydHVhbAk9IDB4ZTYwMDAwMDAsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbigweGU2MDAwMDAwKSwKKwkJLmxlbmd0aAkJPSAyNTYgPDwgMjAsCisJCS50eXBlCQk9IE1UX0RFVklDRV9OT05TSEFSRUQKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGczZXZtX21hcF9pbyh2b2lkKQoreworCWlvdGFibGVfaW5pdChnM2V2bV9pb19kZXNjLCBBUlJBWV9TSVpFKGczZXZtX2lvX2Rlc2MpKTsKKworCS8qIHNldHVwIGVhcmx5IGRldmljZXMsIGNsb2NrcyBhbmQgY29uc29sZSBoZXJlIGFzIHdlbGwgKi8KKwlzaDczNjdfYWRkX2Vhcmx5X2RldmljZXMoKTsKKwlzaDczNjdfY2xvY2tfaW5pdCgpOworCXNobW9iaWxlX3NldHVwX2NvbnNvbGUoKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGczZXZtX2luaXQodm9pZCkKK3sKKwlzaDczNjdfcGlubXV4X2luaXQoKTsKKworCS8qIExpdCBEUzQgTEVEICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUE9SVDIyLCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QT1JUMjIsIDEpOworCWdwaW9fZXhwb3J0KEdQSU9fUE9SVDIyLCAwKTsKKworCS8qIExpdCBEUzggTEVEICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUE9SVDIzLCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QT1JUMjMsIDEpOworCWdwaW9fZXhwb3J0KEdQSU9fUE9SVDIzLCAwKTsKKworCS8qIExpdCBEUzMgTEVEICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUE9SVDI0LCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QT1JUMjQsIDEpOworCWdwaW9fZXhwb3J0KEdQSU9fUE9SVDI0LCAwKTsKKworCS8qIFNDSUZBMSAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NDSUZBMV9UWEQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NDSUZBMV9SWEQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NDSUZBMV9DVFMsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NDSUZBMV9SVFMsIE5VTEwpOworCisJLyogVVNCSFMgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19GTl9WQlVTMCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fUFdFTiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fT1ZDTiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fT1ZDTjIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0VYVExQLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9JRElOLCBOVUxMKTsKKworCS8qIGVuYWJsZSBjbG9jayBpbiBTWU1TVFBDUjIgKi8KKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoMHhlNjE1ODA0OCkgJiB+KDEgPDwgMjIpLCAweGU2MTU4MDQ4KTsKKworCS8qIHNldHVwIFVTQiBwaHkgKi8KKwlfX3Jhd193cml0ZXcoMHgwMzAwLCAweGU2MDU4MTBhKTsJLyogVVNCQ1IxICovCisJX19yYXdfd3JpdGV3KDB4MDBlMCwgMHhlNjA1ODFjMCk7CS8qIENQRkNIICovCisJX19yYXdfd3JpdGV3KDB4NjAxMCwgMHhlNjA1ODFjNik7CS8qIENHUE9TUiAqLworCV9fcmF3X3dyaXRldygweDhhMGEsIDB4ZTYwNTgxMGMpOwkvKiBVU0JDUjIgKi8KKworCXNoNzM2N19hZGRfc3RhbmRhcmRfZGV2aWNlcygpOworCisJcGxhdGZvcm1fYWRkX2RldmljZXMoZzNldm1fZGV2aWNlcywgQVJSQVlfU0laRShnM2V2bV9kZXZpY2VzKSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoRzNFVk0sICJnM2V2bSIpCisJLnBoeXNfaW8JPSAweGU2MDAwMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhlNjAwMDAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5tYXBfaW8JCT0gZzNldm1fbWFwX2lvLAorCS5pbml0X2lycQk9IHNoNzM2N19pbml0X2lycSwKKwkuaW5pdF9tYWNoaW5lCT0gZzNldm1faW5pdCwKKwkudGltZXIJCT0gJnNobW9iaWxlX3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZzRldm0uYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvYm9hcmQtZzRldm0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWNkNjIzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9ib2FyZC1nNGV2bS5jCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogRzRFVk0gYm9hcmQgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgTWFnbnVzIERhbW0KKyAqIENvcHlyaWdodCAoQykgMjAwOCAgWW9zaGloaXJvIFNoaW1vZGEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3I4YTY2NTk3Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9zaDczNzcuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gbm9yX2ZsYXNoX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJsb2FkZXIiLAorCQkub2Zmc2V0CQk9IDB4MDAwMDAwMDAsCisJCS5zaXplCQk9IDUxMiAqIDEwMjQsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJib290ZW52IiwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJCS5zaXplCQk9IDUxMiAqIDEwMjQsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJrZXJuZWxfcm8iLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gOCAqIDEwMjQgKiAxMDI0LAorCQkubWFza19mbGFncwk9IE1URF9XUklURUFCTEUsCisJfSwKKwl7CisJCS5uYW1lCQk9ICJrZXJuZWwiLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwkJLnNpemUJCT0gOCAqIDEwMjQgKiAxMDI0LAorCX0sCisJeworCQkubmFtZQkJPSAiZGF0YSIsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBub3JfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gMiwKKwkucGFydHMJCT0gbm9yX2ZsYXNoX3BhcnRpdGlvbnMsCisJLm5yX3BhcnRzCT0gQVJSQVlfU0laRShub3JfZmxhc2hfcGFydGl0aW9ucyksCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIG5vcl9mbGFzaF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0JPSB7CisJCS5zdGFydAk9IDB4MDAwMDAwMDAsCisJCS5lbmQJPSAweDA4MDAwMDAwIC0gMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugbm9yX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJm5vcl9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG5vcl9mbGFzaF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IG5vcl9mbGFzaF9yZXNvdXJjZXMsCit9OworCisvKiBVU0JIUyAqLwordm9pZCB1c2JfaG9zdF9wb3J0X3Bvd2VyKGludCBwb3J0LCBpbnQgcG93ZXIpCit7CisJaWYgKCFwb3dlcikgLyogb25seSBwb3dlci1vbiBzdXBwb3J0ZWQgZm9yIG5vdyAqLworCQlyZXR1cm47CisKKwkvKiBzZXQgVkJPVVQvUFdFTiBhbmQgRVhUTFAwIGluIERWU1RDVFIgKi8KKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoMHhlNjg5MDAwOCkgfCAweDYwMCwgMHhlNjg5MDAwOCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcjhhNjY1OTdfcGxhdGRhdGEgdXNiX2hvc3RfZGF0YSA9IHsKKwkub25fY2hpcCA9IDEsCisJLnBvcnRfcG93ZXIgPSB1c2JfaG9zdF9wb3J0X3Bvd2VyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1c2JfaG9zdF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIlVTQkhTIiwKKwkJLnN0YXJ0CT0gMHhlNjg5MDAwMCwKKwkJLmVuZAk9IDB4ZTY4OTAwZTUsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSA2NSwKKwkJLmVuZAk9IDY1LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdXNiX2hvc3RfZGV2aWNlID0geworCS5uYW1lCQk9ICJyOGE2NjU5N19oY2QiLAorCS5pZAkJPSAwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCQk9ICZ1c2JfaG9zdF9kYXRhLAorCQkuZG1hX21hc2sJCT0gTlVMTCwKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gMHhmZmZmZmZmZiwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRSh1c2JfaG9zdF9yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHVzYl9ob3N0X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpnNGV2bV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmbm9yX2ZsYXNoX2RldmljZSwKKwkmdXNiX2hvc3RfZGV2aWNlLAorfTsKKworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBnNGV2bV9pb19kZXNjW10gX19pbml0ZGF0YSA9IHsKKwkvKiBjcmVhdGUgYSAxOjEgZW50aXR5IG1hcCBmb3IgMHhlNnh4eHh4eAorCSAqIHVzZWQgYnkgQ1BHQSwgSU5UQyBhbmQgUEZDLgorCSAqLworCXsKKwkJLnZpcnR1YWwJPSAweGU2MDAwMDAwLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oMHhlNjAwMDAwMCksCisJCS5sZW5ndGgJCT0gMjU2IDw8IDIwLAorCQkudHlwZQkJPSBNVF9ERVZJQ0VfTk9OU0hBUkVECisJfSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBnNGV2bV9tYXBfaW8odm9pZCkKK3sKKwlpb3RhYmxlX2luaXQoZzRldm1faW9fZGVzYywgQVJSQVlfU0laRShnNGV2bV9pb19kZXNjKSk7CisKKwkvKiBzZXR1cCBlYXJseSBkZXZpY2VzLCBjbG9ja3MgYW5kIGNvbnNvbGUgaGVyZSBhcyB3ZWxsICovCisJc2g3Mzc3X2FkZF9lYXJseV9kZXZpY2VzKCk7CisJc2g3MzY3X2Nsb2NrX2luaXQoKTsgLyogdXNlIGczIGNsb2NrcyBmb3Igbm93ICovCisJc2htb2JpbGVfc2V0dXBfY29uc29sZSgpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZzRldm1faW5pdCh2b2lkKQoreworCXNoNzM3N19waW5tdXhfaW5pdCgpOworCisJLyogTGl0IERTMTQgTEVEICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUE9SVDEwOSwgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUE9SVDEwOSwgMSk7CisJZ3Bpb19leHBvcnQoR1BJT19QT1JUMTA5LCAxKTsKKworCS8qIExpdCBEUzE1IExFRCAqLworCWdwaW9fcmVxdWVzdChHUElPX1BPUlQxMTAsIE5VTEwpOworCWdwaW9fZGlyZWN0aW9uX291dHB1dChHUElPX1BPUlQxMTAsIDEpOworCWdwaW9fZXhwb3J0KEdQSU9fUE9SVDExMCwgMSk7CisKKwkvKiBMaXQgRFMxNiBMRUQgKi8KKwlncGlvX3JlcXVlc3QoR1BJT19QT1JUMTEyLCBOVUxMKTsKKwlncGlvX2RpcmVjdGlvbl9vdXRwdXQoR1BJT19QT1JUMTEyLCAxKTsKKwlncGlvX2V4cG9ydChHUElPX1BPUlQxMTIsIDEpOworCisJLyogTGl0IERTMTcgTEVEICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fUE9SVDExMywgTlVMTCk7CisJZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KEdQSU9fUE9SVDExMywgMSk7CisJZ3Bpb19leHBvcnQoR1BJT19QT1JUMTEzLCAxKTsKKworCS8qIFVTQkhTICovCisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fVkJVU18wLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9QV0VOLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9PVkNOLCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9PVkNOMiwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fRVhUTFAsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX0lESU4sIE5VTEwpOworCisJLyogZW5hYmxlIGNsb2NrIGluIFNNU1RQQ1IzICovCisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKDB4ZTYxNTAxM2MpICYgfigxIDw8IDIyKSwgMHhlNjE1MDEzYyk7CisKKwkvKiBzZXR1cCBVU0IgcGh5ICovCisJX19yYXdfd3JpdGV3KDB4MDIwMCwgMHhlNjA1ODEwYSk7ICAgICAgIC8qIFVTQkNSMSAqLworCV9fcmF3X3dyaXRldygweDAwZTAsIDB4ZTYwNTgxYzApOyAgICAgICAvKiBDUEZDSCAqLworCV9fcmF3X3dyaXRldygweDYwMTAsIDB4ZTYwNTgxYzYpOyAgICAgICAvKiBDR1BPU1IgKi8KKwlfX3Jhd193cml0ZXcoMHg4YTBhLCAweGU2MDU4MTBjKTsgICAgICAgLyogVVNCQ1IyICovCisKKwlzaDczNzdfYWRkX3N0YW5kYXJkX2RldmljZXMoKTsKKworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKGc0ZXZtX2RldmljZXMsIEFSUkFZX1NJWkUoZzRldm1fZGV2aWNlcykpOworfQorCitNQUNISU5FX1NUQVJUKEc0RVZNLCAiZzRldm0iKQorCS5waHlzX2lvCT0gMHhlNjAwMDAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZTYwMDAwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkubWFwX2lvCQk9IGc0ZXZtX21hcF9pbywKKwkuaW5pdF9pcnEJPSBzaDczNzdfaW5pdF9pcnEsCisJLmluaXRfbWFjaGluZQk9IGc0ZXZtX2luaXQsCisJLnRpbWVyCQk9ICZzaG1vYmlsZV90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2Nsb2NrLXNoNzM2Ny5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNjcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OGJkNTRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jbG9jay1zaDczNjcuYwpAQCAtMCwwICsxLDk2IEBACisvKgorICogUHJlbGltaW5hcnkgY2xvY2sgZnJhbWV3b3JrIHN1cHBvcnQgZm9yIHNoNzM2NworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKK3N0cnVjdCBjbGsgeworCWNvbnN0IGNoYXIgKm5hbWU7CisJdW5zaWduZWQgbG9uZyByYXRlOworfTsKKworI2luY2x1ZGUgPGFzbS9jbGtkZXYuaD4KKworaW50IF9fY2xrX2dldChzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIDE7Cit9CitFWFBPUlRfU1lNQk9MKF9fY2xrX2dldCk7CisKK3ZvaWQgX19jbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKK3sKK30KK0VYUE9SVF9TWU1CT0woX19jbGtfcHV0KTsKKworCitpbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOworCit2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKK30KK0VYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOworCit1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJcmV0dXJuIGNsayA/IGNsay0+cmF0ZSA6IDA7Cit9CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7CisKKy8qIGEgc3RhdGljIHBlcmlwaGVyYWwgY2xvY2sgZm9yIG5vdyAtIGVub3VnaCB0byBnZXQgc2gtc2NpIHdvcmtpbmcgKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrIHBlcmlwaGVyYWxfY2xrID0geworCS5uYW1lCSAgICA9ICJwZXJpcGhlcmFsX2NsayIsCisJLnJhdGUJICAgID0gNDgwMDAwMDAsCit9OworCisvKiBhIHN0YXRpYyByY2xrIGZvciBub3cgLSBlbm91Z2ggdG8gZ2V0IHNoX2NtdCB3b3JraW5nICovCitzdGF0aWMgc3RydWN0IGNsayByX2NsayA9IHsKKwkubmFtZQkgICAgPSAicl9jbGsiLAorCS5yYXRlCSAgICA9IDMyNzY4LAorfTsKKworLyogYSBzdGF0aWMgdXNiMCBmb3Igbm93IC0gZW5vdWdoIHRvIGdldCByOGE2NjU5NyB3b3JraW5nICovCitzdGF0aWMgc3RydWN0IGNsayB1c2IwX2NsayA9IHsKKwkubmFtZQkgICAgPSAidXNiMCIsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19sb29rdXAgbG9va3Vwc1tdID0geworCXsKKwkJLmNsayA9ICZwZXJpcGhlcmFsX2NsaywKKwl9LCB7CisJCS5jbGsgPSAmcl9jbGssCisJfSwgeworCQkuY2xrID0gJnVzYjBfY2xrLAorCX0KK307CisKK3ZvaWQgX19pbml0IHNoNzM2N19jbG9ja19pbml0KHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShsb29rdXBzKTsgaSsrKSB7CisJCWxvb2t1cHNbaV0uY29uX2lkID0gbG9va3Vwc1tpXS5jbGstPm5hbWU7CisJCWNsa2Rldl9hZGQoJmxvb2t1cHNbaV0pOworCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY29uc29sZS5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9jb25zb2xlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQxMWE1YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvY29uc29sZS5jCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBTSC1Nb2JpbGUgQ29uc29sZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxtYWNoL2NvbW1vbi5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCit2b2lkIF9faW5pdCBzaG1vYmlsZV9zZXR1cF9jb25zb2xlKHZvaWQpCit7CisJcGFyc2VfZWFybHlfcGFyYW0oKTsKKworCS8qIExldCBlYXJseXByaW50ayBvdXRwdXQgZWFybHkgY29uc29sZSBtZXNzYWdlcyAqLworCWVhcmx5X3BsYXRmb3JtX2RyaXZlcl9wcm9iZSgiZWFybHlwcmludGsiLCAxLCAxKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvY2xrZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZkMDE2MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2Nsa2Rldi5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX0NMS0RFVl9ICisjZGVmaW5lIF9fQVNNX01BQ0hfQ0xLREVWX0gKKworaW50IF9fY2xrX2dldChzdHJ1Y3QgY2xrICpjbGspOwordm9pZCBfX2Nsa19wdXQoc3RydWN0IGNsayAqY2xrKTsKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfQ0xLREVWX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2NvbW1vbi5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc5MDM2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgX19BUkNIX01BQ0hfQ09NTU9OX0gKKyNkZWZpbmUgX19BUkNIX01BQ0hfQ09NTU9OX0gKKworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgc2htb2JpbGVfdGltZXI7CitleHRlcm4gdm9pZCBzaG1vYmlsZV9zZXR1cF9jb25zb2xlKHZvaWQpOworCitleHRlcm4gdm9pZCBzaDczNjdfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBzaDczNjdfYWRkX2Vhcmx5X2RldmljZXModm9pZCk7CitleHRlcm4gdm9pZCBzaDczNjdfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCk7CitleHRlcm4gdm9pZCBzaDczNjdfY2xvY2tfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHNoNzM2N19waW5tdXhfaW5pdCh2b2lkKTsKKworZXh0ZXJuIHZvaWQgc2g3Mzc3X2luaXRfaXJxKHZvaWQpOworZXh0ZXJuIHZvaWQgc2g3Mzc3X2FkZF9lYXJseV9kZXZpY2VzKHZvaWQpOworZXh0ZXJuIHZvaWQgc2g3Mzc3X2FkZF9zdGFuZGFyZF9kZXZpY2VzKHZvaWQpOworZXh0ZXJuIHZvaWQgc2g3Mzc3X3Bpbm11eF9pbml0KHZvaWQpOworCitleHRlcm4gdm9pZCBzaDczNzJfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBzaDczNzJfYWRkX2Vhcmx5X2RldmljZXModm9pZCk7CitleHRlcm4gdm9pZCBzaDczNzJfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCk7CitleHRlcm4gdm9pZCBzaDczNzJfcGlubXV4X2luaXQodm9pZCk7CisKKyNlbmRpZiAvKiBfX0FSQ0hfTUFDSF9DT01NT05fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvZG1hLmggYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGE4YzE3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvZG1hLmgKQEAgLTAsMCArMSBAQAorLyogZW1wdHkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyODVkMTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKworCS5tYWNybyAgZGlzYWJsZV9maXEKKwkuZW5kbQorCisJLm1hY3JvICBnZXRfaXJxbnJfcHJlYW1ibGUsIGJhc2UsIHRtcAorCWxkciAgICAgXGJhc2UsID1JTlRGTEdBCisJLmVuZG0KKworCS5tYWNybyAgYXJjaF9yZXRfdG9fdXNlciwgdG1wMSwgdG1wMgorCS5lbmRtCisKKwkubWFjcm8gIGdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorCWxkciAgICAgXGlycW5yLCBbXGJhc2VdCisJY21wCVxpcnFuciwgIzAKKwliZXEJMTAwMGYKKwkvKiBpbnRldnQgdG8gaXJxIG51bWJlciAqLworCWxzcglcaXJxbnIsIFxpcnFuciwgIzB4NQorCXN1YnMJXGlycW5yLCBcaXJxbnIsICMxNgorCisxMDAwOgorCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9ncGlvLmggYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9ncGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJjNmJkNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2dwaW8uaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogR2VuZXJpYyBHUElPIEFQSSBhbmQgcGlubXV4IHRhYmxlIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggIE1hZ251cyBEYW1tCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpZm5kZWYgX19BU01fQVJDSF9HUElPX0gKKyNkZWZpbmUgX19BU01fQVJDSF9HUElPX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisKKyNkZWZpbmUgQVJDSF9OUl9HUElPUyAxMDI0CisjaW5jbHVkZSA8bGludXgvc2hfcGZjLmg+CisKKyNpZmRlZiBDT05GSUdfR1BJT0xJQgorCitzdGF0aWMgaW5saW5lIGludCBncGlvX2dldF92YWx1ZSh1bnNpZ25lZCBncGlvKQoreworCXJldHVybiBfX2dwaW9fZ2V0X3ZhbHVlKGdwaW8pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQoreworCV9fZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBncGlvX2NhbnNsZWVwKHVuc2lnbmVkIGdwaW8pCit7CisJcmV0dXJuIF9fZ3Bpb19jYW5zbGVlcChncGlvKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZ3Bpb190b19pcnEodW5zaWduZWQgZ3BpbykKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXJxX3RvX2dwaW8odW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworI2VuZGlmIC8qIENPTkZJR19HUElPTElCICovCisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX0dQSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YwZWYxOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfSEFSRFdBUkVfSAorI2RlZmluZSBfX0FTTV9NQUNIX0hBUkRXQVJFX0gKKworLyogSU5URkxHQSByZWdpc3RlciAtIHVzZWQgYnkgbG93IGxldmVsIGludGVycnVwdCBjb2RlIGluIGVudHJ5LW1hY3JvLlMgKi8KKyNkZWZpbmUgSU5URkxHQQkJCTB4ZTY5ODAwMTgKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfSEFSRFdBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzMzOWZlNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL2lvLmgKQEAgLTAsMCArMSw5IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfSU9fSAorI2RlZmluZSBfX0FTTV9NQUNIX0lPX0gKKworI2RlZmluZSBJT19TUEFDRV9MSU1JVAkJMHhmZmZmZmZmZgorCisjZGVmaW5lIF9faW8oYSkJCQkoKHZvaWQgX19pb21lbSAqKShhKSkKKyNkZWZpbmUgX19tZW1fcGNpKGEpCQkoYSkKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaXJxcy5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvaXJxcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNzliNzIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9pcnFzLmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX0lSUVNfSAorI2RlZmluZSBfX0FTTV9NQUNIX0lSUVNfSAorCisjZGVmaW5lIE5SX0lSUVMgICAgICAgICA1MTIKKyNkZWZpbmUgTlJfSVJRU19MRUdBQ1kgIDgKKworI2RlZmluZSBldnQyaXJxKGV2dCkJCSgoKGV2dCkgPj4gNSkgLSAxNikKKyNkZWZpbmUgaXJxMmV2dChpcnEpCQkoKChpcnEpICsgMTYpIDw8IDUpCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX0lSUVNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvbWVtb3J5LmggYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTg4MTgzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fQVNNX01BQ0hfTUVNT1JZX0gKKyNkZWZpbmUgX19BU01fTUFDSF9NRU1PUllfSAorCisjZGVmaW5lIFBIWVNfT0ZGU0VUCVVMKENPTkZJR19NRU1PUllfU1RBUlQpCisjZGVmaW5lIE1FTV9TSVpFCVVMKENPTkZJR19NRU1PUllfU0laRSkKKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfTUVNT1JZX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3NoNzM2Ny5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvc2g3MzY3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTJkMGRlNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3NoNzM2Ny5oCkBAIC0wLDAgKzEsMzMyIEBACisjaWZuZGVmIF9fQVNNX1NINzM2N19IX18KKyNkZWZpbmUgX19BU01fU0g3MzY3X0hfXworCisvKiBQaW4gRnVuY3Rpb24gQ29udHJvbGxlcjoKKyAqIEdQSU9fRk5feHggLSBHUElPIHVzZWQgdG8gc2VsZWN0IHBpbiBmdW5jdGlvbgorICogR1BJT19QT1JUeHggLSBHUElPIG1hcHBlZCB0byByZWFsIEkvTyBwaW4gb24gQ1BVCisgKi8KK2VudW0geworCS8qIDQ5LTEgLT4gNDktNiAoR1BJTykgKi8KKwlHUElPX1BPUlQwLCBHUElPX1BPUlQxLCBHUElPX1BPUlQyLCBHUElPX1BPUlQzLCBHUElPX1BPUlQ0LAorCUdQSU9fUE9SVDUsIEdQSU9fUE9SVDYsIEdQSU9fUE9SVDcsIEdQSU9fUE9SVDgsIEdQSU9fUE9SVDksCisKKwlHUElPX1BPUlQxMCwgR1BJT19QT1JUMTEsIEdQSU9fUE9SVDEyLCBHUElPX1BPUlQxMywgR1BJT19QT1JUMTQsCisJR1BJT19QT1JUMTUsIEdQSU9fUE9SVDE2LCBHUElPX1BPUlQxNywgR1BJT19QT1JUMTgsIEdQSU9fUE9SVDE5LAorCisJR1BJT19QT1JUMjAsIEdQSU9fUE9SVDIxLCBHUElPX1BPUlQyMiwgR1BJT19QT1JUMjMsIEdQSU9fUE9SVDI0LAorCUdQSU9fUE9SVDI1LCBHUElPX1BPUlQyNiwgR1BJT19QT1JUMjcsIEdQSU9fUE9SVDI4LCBHUElPX1BPUlQyOSwKKworCUdQSU9fUE9SVDMwLCBHUElPX1BPUlQzMSwgR1BJT19QT1JUMzIsIEdQSU9fUE9SVDMzLCBHUElPX1BPUlQzNCwKKwlHUElPX1BPUlQzNSwgR1BJT19QT1JUMzYsIEdQSU9fUE9SVDM3LCBHUElPX1BPUlQzOCwgR1BJT19QT1JUMzksCisKKwlHUElPX1BPUlQ0MCwgR1BJT19QT1JUNDEsIEdQSU9fUE9SVDQyLCBHUElPX1BPUlQ0MywgR1BJT19QT1JUNDQsCisJR1BJT19QT1JUNDUsIEdQSU9fUE9SVDQ2LCBHUElPX1BPUlQ0NywgR1BJT19QT1JUNDgsIEdQSU9fUE9SVDQ5LAorCisJR1BJT19QT1JUNTAsIEdQSU9fUE9SVDUxLCBHUElPX1BPUlQ1MiwgR1BJT19QT1JUNTMsIEdQSU9fUE9SVDU0LAorCUdQSU9fUE9SVDU1LCBHUElPX1BPUlQ1NiwgR1BJT19QT1JUNTcsIEdQSU9fUE9SVDU4LCBHUElPX1BPUlQ1OSwKKworCUdQSU9fUE9SVDYwLCBHUElPX1BPUlQ2MSwgR1BJT19QT1JUNjIsIEdQSU9fUE9SVDYzLCBHUElPX1BPUlQ2NCwKKwlHUElPX1BPUlQ2NSwgR1BJT19QT1JUNjYsIEdQSU9fUE9SVDY3LCBHUElPX1BPUlQ2OCwgR1BJT19QT1JUNjksCisKKwlHUElPX1BPUlQ3MCwgR1BJT19QT1JUNzEsIEdQSU9fUE9SVDcyLCBHUElPX1BPUlQ3MywgR1BJT19QT1JUNzQsCisJR1BJT19QT1JUNzUsIEdQSU9fUE9SVDc2LCBHUElPX1BPUlQ3NywgR1BJT19QT1JUNzgsIEdQSU9fUE9SVDc5LAorCisJR1BJT19QT1JUODAsIEdQSU9fUE9SVDgxLCBHUElPX1BPUlQ4MiwgR1BJT19QT1JUODMsIEdQSU9fUE9SVDg0LAorCUdQSU9fUE9SVDg1LCBHUElPX1BPUlQ4NiwgR1BJT19QT1JUODcsIEdQSU9fUE9SVDg4LCBHUElPX1BPUlQ4OSwKKworCUdQSU9fUE9SVDkwLCBHUElPX1BPUlQ5MSwgR1BJT19QT1JUOTIsIEdQSU9fUE9SVDkzLCBHUElPX1BPUlQ5NCwKKwlHUElPX1BPUlQ5NSwgR1BJT19QT1JUOTYsIEdQSU9fUE9SVDk3LCBHUElPX1BPUlQ5OCwgR1BJT19QT1JUOTksCisKKwlHUElPX1BPUlQxMDAsIEdQSU9fUE9SVDEwMSwgR1BJT19QT1JUMTAyLCBHUElPX1BPUlQxMDMsIEdQSU9fUE9SVDEwNCwKKwlHUElPX1BPUlQxMDUsIEdQSU9fUE9SVDEwNiwgR1BJT19QT1JUMTA3LCBHUElPX1BPUlQxMDgsIEdQSU9fUE9SVDEwOSwKKworCUdQSU9fUE9SVDExMCwgR1BJT19QT1JUMTExLCBHUElPX1BPUlQxMTIsIEdQSU9fUE9SVDExMywgR1BJT19QT1JUMTE0LAorCUdQSU9fUE9SVDExNSwgR1BJT19QT1JUMTE2LCBHUElPX1BPUlQxMTcsIEdQSU9fUE9SVDExOCwgR1BJT19QT1JUMTE5LAorCisJR1BJT19QT1JUMTIwLCBHUElPX1BPUlQxMjEsIEdQSU9fUE9SVDEyMiwgR1BJT19QT1JUMTIzLCBHUElPX1BPUlQxMjQsCisJR1BJT19QT1JUMTI1LCBHUElPX1BPUlQxMjYsIEdQSU9fUE9SVDEyNywgR1BJT19QT1JUMTI4LCBHUElPX1BPUlQxMjksCisKKwlHUElPX1BPUlQxMzAsIEdQSU9fUE9SVDEzMSwgR1BJT19QT1JUMTMyLCBHUElPX1BPUlQxMzMsIEdQSU9fUE9SVDEzNCwKKwlHUElPX1BPUlQxMzUsIEdQSU9fUE9SVDEzNiwgR1BJT19QT1JUMTM3LCBHUElPX1BPUlQxMzgsIEdQSU9fUE9SVDEzOSwKKworCUdQSU9fUE9SVDE0MCwgR1BJT19QT1JUMTQxLCBHUElPX1BPUlQxNDIsIEdQSU9fUE9SVDE0MywgR1BJT19QT1JUMTQ0LAorCUdQSU9fUE9SVDE0NSwgR1BJT19QT1JUMTQ2LCBHUElPX1BPUlQxNDcsIEdQSU9fUE9SVDE0OCwgR1BJT19QT1JUMTQ5LAorCisJR1BJT19QT1JUMTUwLCBHUElPX1BPUlQxNTEsIEdQSU9fUE9SVDE1MiwgR1BJT19QT1JUMTUzLCBHUElPX1BPUlQxNTQsCisJR1BJT19QT1JUMTU1LCBHUElPX1BPUlQxNTYsIEdQSU9fUE9SVDE1NywgR1BJT19QT1JUMTU4LCBHUElPX1BPUlQxNTksCisKKwlHUElPX1BPUlQxNjAsIEdQSU9fUE9SVDE2MSwgR1BJT19QT1JUMTYyLCBHUElPX1BPUlQxNjMsIEdQSU9fUE9SVDE2NCwKKwlHUElPX1BPUlQxNjUsIEdQSU9fUE9SVDE2NiwgR1BJT19QT1JUMTY3LCBHUElPX1BPUlQxNjgsIEdQSU9fUE9SVDE2OSwKKworCUdQSU9fUE9SVDE3MCwgR1BJT19QT1JUMTcxLCBHUElPX1BPUlQxNzIsIEdQSU9fUE9SVDE3MywgR1BJT19QT1JUMTc0LAorCUdQSU9fUE9SVDE3NSwgR1BJT19QT1JUMTc2LCBHUElPX1BPUlQxNzcsIEdQSU9fUE9SVDE3OCwgR1BJT19QT1JUMTc5LAorCisJR1BJT19QT1JUMTgwLCBHUElPX1BPUlQxODEsIEdQSU9fUE9SVDE4MiwgR1BJT19QT1JUMTgzLCBHUElPX1BPUlQxODQsCisJR1BJT19QT1JUMTg1LCBHUElPX1BPUlQxODYsIEdQSU9fUE9SVDE4NywgR1BJT19QT1JUMTg4LCBHUElPX1BPUlQxODksCisKKwlHUElPX1BPUlQxOTAsIEdQSU9fUE9SVDE5MSwgR1BJT19QT1JUMTkyLCBHUElPX1BPUlQxOTMsIEdQSU9fUE9SVDE5NCwKKwlHUElPX1BPUlQxOTUsIEdQSU9fUE9SVDE5NiwgR1BJT19QT1JUMTk3LCBHUElPX1BPUlQxOTgsIEdQSU9fUE9SVDE5OSwKKworCUdQSU9fUE9SVDIwMCwgR1BJT19QT1JUMjAxLCBHUElPX1BPUlQyMDIsIEdQSU9fUE9SVDIwMywgR1BJT19QT1JUMjA0LAorCUdQSU9fUE9SVDIwNSwgR1BJT19QT1JUMjA2LCBHUElPX1BPUlQyMDcsIEdQSU9fUE9SVDIwOCwgR1BJT19QT1JUMjA5LAorCisJR1BJT19QT1JUMjEwLCBHUElPX1BPUlQyMTEsIEdQSU9fUE9SVDIxMiwgR1BJT19QT1JUMjEzLCBHUElPX1BPUlQyMTQsCisJR1BJT19QT1JUMjE1LCBHUElPX1BPUlQyMTYsIEdQSU9fUE9SVDIxNywgR1BJT19QT1JUMjE4LCBHUElPX1BPUlQyMTksCisKKwlHUElPX1BPUlQyMjAsIEdQSU9fUE9SVDIyMSwgR1BJT19QT1JUMjIyLCBHUElPX1BPUlQyMjMsIEdQSU9fUE9SVDIyNCwKKwlHUElPX1BPUlQyMjUsIEdQSU9fUE9SVDIyNiwgR1BJT19QT1JUMjI3LCBHUElPX1BPUlQyMjgsIEdQSU9fUE9SVDIyOSwKKworCUdQSU9fUE9SVDIzMCwgR1BJT19QT1JUMjMxLCBHUElPX1BPUlQyMzIsIEdQSU9fUE9SVDIzMywgR1BJT19QT1JUMjM0LAorCUdQSU9fUE9SVDIzNSwgR1BJT19QT1JUMjM2LCBHUElPX1BPUlQyMzcsIEdQSU9fUE9SVDIzOCwgR1BJT19QT1JUMjM5LAorCisJR1BJT19QT1JUMjQwLCBHUElPX1BPUlQyNDEsIEdQSU9fUE9SVDI0MiwgR1BJT19QT1JUMjQzLCBHUElPX1BPUlQyNDQsCisJR1BJT19QT1JUMjQ1LCBHUElPX1BPUlQyNDYsIEdQSU9fUE9SVDI0NywgR1BJT19QT1JUMjQ4LCBHUElPX1BPUlQyNDksCisKKwlHUElPX1BPUlQyNTAsIEdQSU9fUE9SVDI1MSwgR1BJT19QT1JUMjUyLCBHUElPX1BPUlQyNTMsIEdQSU9fUE9SVDI1NCwKKwlHUElPX1BPUlQyNTUsIEdQSU9fUE9SVDI1NiwgR1BJT19QT1JUMjU3LCBHUElPX1BPUlQyNTgsIEdQSU9fUE9SVDI1OSwKKworCUdQSU9fUE9SVDI2MCwgR1BJT19QT1JUMjYxLCBHUElPX1BPUlQyNjIsIEdQSU9fUE9SVDI2MywgR1BJT19QT1JUMjY0LAorCUdQSU9fUE9SVDI2NSwgR1BJT19QT1JUMjY2LCBHUElPX1BPUlQyNjcsIEdQSU9fUE9SVDI2OCwgR1BJT19QT1JUMjY5LAorCisJR1BJT19QT1JUMjcwLCBHUElPX1BPUlQyNzEsIEdQSU9fUE9SVDI3MiwKKworCS8qIFNwZWNpYWwgUHVsbC11cCAvIFB1bGwtZG93biBGdW5jdGlvbnMgKi8KKwlHUElPX0ZOX1BPUlQ0OF9LRVlJTjBfUFUsIEdQSU9fRk5fUE9SVDQ5X0tFWUlOMV9QVSwKKwlHUElPX0ZOX1BPUlQ1MF9LRVlJTjJfUFUsIEdQSU9fRk5fUE9SVDU1X0tFWUlOM19QVSwKKwlHUElPX0ZOX1BPUlQ1Nl9LRVlJTjRfUFUsIEdQSU9fRk5fUE9SVDU3X0tFWUlONV9QVSwKKwlHUElPX0ZOX1BPUlQ1OF9LRVlJTjZfUFUsCisKKwkvKiA0OS0xIChGTikgKi8KKwlHUElPX0ZOX1ZCVVMwLCBHUElPX0ZOX0NQT1JUMCwgR1BJT19GTl9DUE9SVDEsIEdQSU9fRk5fQ1BPUlQyLAorCUdQSU9fRk5fQ1BPUlQzLCBHUElPX0ZOX0NQT1JUNCwgR1BJT19GTl9DUE9SVDUsIEdQSU9fRk5fQ1BPUlQ2LAorCUdQSU9fRk5fQ1BPUlQ3LCBHUElPX0ZOX0NQT1JUOCwgR1BJT19GTl9DUE9SVDksIEdQSU9fRk5fQ1BPUlQxMCwKKwlHUElPX0ZOX0NQT1JUMTEsIEdQSU9fRk5fU0lOMiwgR1BJT19GTl9DUE9SVDEyLCBHUElPX0ZOX1hDVFMyLAorCUdQSU9fRk5fQ1BPUlQxMywgR1BJT19GTl9SRlNQTzQsIEdQSU9fRk5fQ1BPUlQxNCwgR1BJT19GTl9SRlNQTzUsCisJR1BJT19GTl9DUE9SVDE1LCBHUElPX0ZOX0NQT1JUMTYsIEdQSU9fRk5fQ1BPUlQxNywgR1BJT19GTl9TT1VUMiwKKwlHUElPX0ZOX0NQT1JUMTgsIEdQSU9fRk5fWFJUUzIsIEdQSU9fRk5fQ1BPUlQxOSwgR1BJT19GTl9DUE9SVDIwLAorCUdQSU9fRk5fUkZTUE82LCBHUElPX0ZOX0NQT1JUMjEsIEdQSU9fRk5fU1RBVFVTMCwgR1BJT19GTl9DUE9SVDIyLAorCUdQSU9fRk5fU1RBVFVTMSwgR1BJT19GTl9DUE9SVDIzLCBHUElPX0ZOX1NUQVRVUzIsIEdQSU9fRk5fUkZTUE83LAorCUdQSU9fRk5fTVBPUlQwLCBHUElPX0ZOX01QT1JUMSwgR1BJT19GTl9CX1NZTkxEMSwgR1BJT19GTl9CX1NZTkxEMiwKKwlHUElPX0ZOX1hNQUlOUFMsIEdQSU9fRk5fWERJVlBTLCBHUElPX0ZOX1hJRFJTVCwgR1BJT19GTl9JRENMSywKKwlHUElPX0ZOX0lESU8sIEdQSU9fRk5fU09VVDEsIEdQSU9fRk5fU0NJRkE0X1RYRCwKKwlHUElPX0ZOX00wMl9CRVJEQVQsIEdQSU9fRk5fU0lOMSwgR1BJT19GTl9TQ0lGQTRfUlhELCBHUElPX0ZOX1hXVVAsCisJR1BJT19GTl9YUlRTMSwgR1BJT19GTl9TQ0lGQTRfUlRTLCBHUElPX0ZOX00wM19CRVJDTEssCisJR1BJT19GTl9YQ1RTMSwgR1BJT19GTl9TQ0lGQTRfQ1RTLAorCisJLyogNDktMiAoRk4pICovCisJR1BJT19GTl9IU1VfSVFfQUdDNiwgR1BJT19GTl9NRkcyX0lOMiwgR1BJT19GTl9NU0lPRjJfTUNLMCwKKwlHUElPX0ZOX0hTVV9JUV9BR0M1LCBHUElPX0ZOX01GRzJfSU4xLCBHUElPX0ZOX01TSU9GMl9NQ0sxLAorCUdQSU9fRk5fSFNVX0lRX0FHQzQsIEdQSU9fRk5fTVNJT0YyX1JTWU5DLAorCUdQSU9fRk5fSFNVX0lRX0FHQzMsIEdQSU9fRk5fTUZHMl9PVVQxLCBHUElPX0ZOX01TSU9GMl9SU0NLLAorCUdQSU9fRk5fSFNVX0lRX0FHQzIsIEdQSU9fRk5fUE9SVDQyX0tFWU9VVDAsCisJR1BJT19GTl9IU1VfSVFfQUdDMSwgR1BJT19GTl9QT1JUNDNfS0VZT1VUMSwKKwlHUElPX0ZOX0hTVV9JUV9BR0MwLCBHUElPX0ZOX1BPUlQ0NF9LRVlPVVQyLAorCUdQSU9fRk5fSFNVX0lRX0FHQ19TVCwgR1BJT19GTl9QT1JUNDVfS0VZT1VUMywKKwlHUElPX0ZOX0hTVV9JUV9QRE8sIEdQSU9fRk5fUE9SVDQ2X0tFWU9VVDQsCisJR1BJT19GTl9IU1VfSVFfUFlPLCBHUElPX0ZOX1BPUlQ0N19LRVlPVVQ1LAorCUdQSU9fRk5fSFNVX0VOX1RYTVVYX0czTU8sIEdQSU9fRk5fUE9SVDQ4X0tFWUlOMCwKKwlHUElPX0ZOX0hTVV9JX1RYTVVYX0czTU8sIEdQSU9fRk5fUE9SVDQ5X0tFWUlOMSwKKwlHUElPX0ZOX0hTVV9RX1RYTVVYX0czTU8sIEdQSU9fRk5fUE9SVDUwX0tFWUlOMiwKKwlHUElPX0ZOX0hTVV9TWU8sIEdQSU9fRk5fUE9SVDUxX01TSU9GMl9UU1lOQywKKwlHUElPX0ZOX0hTVV9TRE8sIEdQSU9fRk5fUE9SVDUyX01TSU9GMl9UU0NLLAorCUdQSU9fRk5fSFNVX1RHVFRJX0czTU8sIEdQSU9fRk5fUE9SVDUzX01TSU9GMl9UWEQsCisJR1BJT19GTl9CX1RJTUVfU1RBTVAsIEdQSU9fRk5fUE9SVDU0X01TSU9GMl9SWEQsCisJR1BJT19GTl9IU1VfU0RJLCBHUElPX0ZOX1BPUlQ1NV9LRVlJTjMsCisJR1BJT19GTl9IU1VfU0NPLCBHUElPX0ZOX1BPUlQ1Nl9LRVlJTjQsCisJR1BJT19GTl9IU1VfRFJFUSwgR1BJT19GTl9QT1JUNTdfS0VZSU41LAorCUdQSU9fRk5fSFNVX0RBQ0ssIEdQSU9fRk5fUE9SVDU4X0tFWUlONiwKKwlHUElPX0ZOX0hTVV9DTEs2MU0sIEdQSU9fRk5fUE9SVDU5X01TSU9GMl9TUzEsCisJR1BJT19GTl9IU1VfWFJTVCwgR1BJT19GTl9QT1JUNjBfTVNJT0YyX1NTMiwKKwlHUElPX0ZOX1BDTUNMS08sIEdQSU9fRk5fU1lOQzhLTywgR1BJT19GTl9ETlBDTV9BLCBHUElPX0ZOX1VQUENNX0EsCisJR1BJT19GTl9YVEFMQjFMLAorCUdQSU9fRk5fR1BTX0FHQzEsIEdQSU9fRk5fU0NJRkEwX1JUUywKKwlHUElPX0ZOX0dQU19BR0MyLCBHUElPX0ZOX1NDSUZBMF9TQ0ssCisJR1BJT19GTl9HUFNfQUdDMywgR1BJT19GTl9TQ0lGQTBfVFhELAorCUdQSU9fRk5fR1BTX0FHQzQsIEdQSU9fRk5fU0NJRkEwX1JYRCwKKwlHUElPX0ZOX0dQU19QV1JELCBHUElPX0ZOX1NDSUZBMF9DVFMsCisJR1BJT19GTl9HUFNfSU0sIEdQSU9fRk5fR1BTX0lTLCBHUElPX0ZOX0dQU19RTSwgR1BJT19GTl9HUFNfUVMsCisJR1BJT19GTl9TSVVCT01DLCBHUElPX0ZOX1RQVTJUTzAsCisJR1BJT19GTl9TSVVDS0IsIEdQSU9fRk5fVFBVMlRPMSwKKwlHUElPX0ZOX1NJVUJPTFIsIEdQSU9fRk5fQkJJRjJfVFNZTkMsIEdQSU9fRk5fVFBVMlRPMiwKKwlHUElPX0ZOX1NJVUJPQlQsIEdQSU9fRk5fQkJJRjJfVFNDSywgR1BJT19GTl9UUFUyVE8zLAorCUdQSU9fRk5fU0lVQk9TTEQsIEdQSU9fRk5fQkJJRjJfVFhELCBHUElPX0ZOX1RQVTNUTzAsCisJR1BJT19GTl9TSVVCSUxSLCBHUElPX0ZOX1RQVTNUTzEsCisJR1BJT19GTl9TSVVCSUJULCBHUElPX0ZOX1RQVTNUTzIsCisJR1BJT19GTl9TSVVCSVNMRCwgR1BJT19GTl9UUFUzVE8zLAorCUdQSU9fRk5fTk1JLCBHUElPX0ZOX1RQVTRUTzAsCisJR1BJT19GTl9ETlBDTV9NLCBHUElPX0ZOX1RQVTRUTzEsIEdQSU9fRk5fVFBVNFRPMiwgR1BJT19GTl9UUFU0VE8zLAorCUdQSU9fRk5fSVJRX1RNUEIsCisJR1BJT19GTl9QV0VOLCBHUElPX0ZOX01GRzFfT1VUMSwKKwlHUElPX0ZOX09WQ04sIEdQSU9fRk5fTUZHMV9JTjEsCisJR1BJT19GTl9PVkNOMiwgR1BJT19GTl9NRkcxX0lOMiwKKworCS8qIDQ5LTMgKEZOKSAqLworCUdQSU9fRk5fUkZTUE8xLCBHUElPX0ZOX1JGU1BPMiwgR1BJT19GTl9SRlNQTzMsIEdQSU9fRk5fUE9SVDkzX1ZJT19DS08yLAorCUdQSU9fRk5fVVNCVEVSTSwgR1BJT19GTl9FWFRMUCwgR1BJT19GTl9JRElOLAorCUdQSU9fRk5fU0NJRkE1X0NUUywgR1BJT19GTl9NRkcwX0lOMSwKKwlHUElPX0ZOX1NDSUZBNV9SVFMsIEdQSU9fRk5fTUZHMF9JTjIsCisJR1BJT19GTl9TQ0lGQTVfUlhELAorCUdQSU9fRk5fU0NJRkE1X1RYRCwKKwlHUElPX0ZOX1NDSUZBNV9TQ0ssIEdQSU9fRk5fTUZHMF9PVVQxLAorCUdQSU9fRk5fQTBfRUEwLCBHUElPX0ZOX0JTLAorCUdQSU9fRk5fQTE0X0VBMTQsIEdQSU9fRk5fUE9SVDEwMl9LRVlPVVQwLAorCUdQSU9fRk5fQTE1X0VBMTUsIEdQSU9fRk5fUE9SVDEwM19LRVlPVVQxLCBHUElPX0ZOX0RWX0NMS09MLAorCUdQSU9fRk5fQTE2X0VBMTYsIEdQSU9fRk5fUE9SVDEwNF9LRVlPVVQyLAorCUdQSU9fRk5fRFZfVlNZTkNMLCBHUElPX0ZOX01TSU9GMF9TUzEsCisJR1BJT19GTl9BMTdfRUExNywgR1BJT19GTl9QT1JUMTA1X0tFWU9VVDMsCisJR1BJT19GTl9EVl9IU1lOQ0wsIEdQSU9fRk5fTVNJT0YwX1RTWU5DLAorCUdQSU9fRk5fQTE4X0VBMTgsIEdQSU9fRk5fUE9SVDEwNl9LRVlPVVQ0LAorCUdQSU9fRk5fRFZfREwwLCBHUElPX0ZOX01TSU9GMF9UU0NLLAorCUdQSU9fRk5fQTE5X0VBMTksIEdQSU9fRk5fUE9SVDEwN19LRVlPVVQ1LAorCUdQSU9fRk5fRFZfREwxLCBHUElPX0ZOX01TSU9GMF9UWEQsCisJR1BJT19GTl9BMjBfRUEyMCwgR1BJT19GTl9QT1JUMTA4X0tFWUlOMCwKKwlHUElPX0ZOX0RWX0RMMiwgR1BJT19GTl9NU0lPRjBfUlNDSywKKwlHUElPX0ZOX0EyMV9FQTIxLCBHUElPX0ZOX1BPUlQxMDlfS0VZSU4xLAorCUdQSU9fRk5fRFZfREwzLCBHUElPX0ZOX01TSU9GMF9SU1lOQywKKwlHUElPX0ZOX0EyMl9FQTIyLCBHUElPX0ZOX1BPUlQxMTBfS0VZSU4yLAorCUdQSU9fRk5fRFZfREw0LCBHUElPX0ZOX01TSU9GMF9NQ0swLAorCUdQSU9fRk5fQTIzX0VBMjMsIEdQSU9fRk5fUE9SVDExMV9LRVlJTjMsCisJR1BJT19GTl9EVl9ETDUsIEdQSU9fRk5fTVNJT0YwX01DSzEsCisJR1BJT19GTl9BMjRfRUEyNCwgR1BJT19GTl9QT1JUMTEyX0tFWUlONCwKKwlHUElPX0ZOX0RWX0RMNiwgR1BJT19GTl9NU0lPRjBfUlhELAorCUdQSU9fRk5fQTI1X0VBMjUsIEdQSU9fRk5fUE9SVDExM19LRVlJTjUsCisJR1BJT19GTl9EVl9ETDcsIEdQSU9fRk5fTVNJT0YwX1NTMiwKKwlHUElPX0ZOX0EyNiwgR1BJT19GTl9QT1JUMTEzX0tFWUlONiwgR1BJT19GTl9EVl9DTEtJTCwKKwlHUElPX0ZOX0QwX0VEMF9OQUYwLCBHUElPX0ZOX0QxX0VEMV9OQUYxLCBHUElPX0ZOX0QyX0VEMl9OQUYyLAorCUdQSU9fRk5fRDNfRUQzX05BRjMsIEdQSU9fRk5fRDRfRUQ0X05BRjQsIEdQSU9fRk5fRDVfRUQ1X05BRjUsCisJR1BJT19GTl9ENl9FRDZfTkFGNiwgR1BJT19GTl9EN19FRDdfTkFGNywgR1BJT19GTl9EOF9FRDhfTkFGOCwKKwlHUElPX0ZOX0Q5X0VEOV9OQUY5LCBHUElPX0ZOX0QxMF9FRDEwX05BRjEwLCBHUElPX0ZOX0QxMV9FRDExX05BRjExLAorCUdQSU9fRk5fRDEyX0VEMTJfTkFGMTIsIEdQSU9fRk5fRDEzX0VEMTNfTkFGMTMsCisJR1BJT19GTl9EMTRfRUQxNF9OQUYxNCwgR1BJT19GTl9EMTVfRUQxNV9OQUYxNSwKKwlHUElPX0ZOX0NTNCwgR1BJT19GTl9DUzVBLCBHUElPX0ZOX0NTNUIsIEdQSU9fRk5fRkNFMSwKKwlHUElPX0ZOX0NTNkIsIEdQSU9fRk5fWENTMiwgR1BJT19GTl9GQ0UwLCBHUElPX0ZOX0NTNkEsCisJR1BJT19GTl9EQUNLMCwgR1BJT19GTl9XQUlULCBHUElPX0ZOX0RSRVEwLCBHUElPX0ZOX1JEX1hSRCwKKwlHUElPX0ZOX0EyNywgR1BJT19GTl9SRFdSX1hXRSwgR1BJT19GTl9XRTBfWFdSMF9GV0UsCisJR1BJT19GTl9XRTFfWFdSMSwgR1BJT19GTl9GUkIsIEdQSU9fRk5fQ0tPLAorCUdQSU9fRk5fTkJSU1RPVVQsIEdQSU9fRk5fTkJSU1QsCisKKwkvKiA0OS00IChGTikgKi8KKwlHUElPX0ZOX1JGU1BPMCwgR1BJT19GTl9QT1JUMTQ2X1ZJT19DS08yLCBHUElPX0ZOX1RTVE1ELAorCUdQSU9fRk5fVklPX1ZELCBHUElPX0ZOX1ZJT19IRCwKKwlHUElPX0ZOX1ZJT19EMCwgR1BJT19GTl9WSU9fRDEsIEdQSU9fRk5fVklPX0QyLAorCUdQSU9fRk5fVklPX0QzLCBHUElPX0ZOX1ZJT19ENCwgR1BJT19GTl9WSU9fRDUsCisJR1BJT19GTl9WSU9fRDYsIEdQSU9fRk5fVklPX0Q3LCBHUElPX0ZOX1ZJT19EOCwKKwlHUElPX0ZOX1ZJT19EOSwgR1BJT19GTl9WSU9fRDEwLCBHUElPX0ZOX1ZJT19EMTEsCisJR1BJT19GTl9WSU9fRDEyLCBHUElPX0ZOX1ZJT19EMTMsIEdQSU9fRk5fVklPX0QxNCwKKwlHUElPX0ZOX1ZJT19EMTUsIEdQSU9fRk5fVklPX0NMSywgR1BJT19GTl9WSU9fRklFTEQsCisJR1BJT19GTl9WSU9fQ0tPLAorCUdQSU9fRk5fTUZHM19JTjEsIEdQSU9fRk5fTUZHM19JTjIsCisJR1BJT19GTl9NOV9TTENEX0EwMSwgR1BJT19GTl9NRkczX09VVDEsIEdQSU9fRk5fVFBVMFRPMCwKKwlHUElPX0ZOX00xMF9TTENEX0NLMSwgR1BJT19GTl9NRkc0X0lOMSwgR1BJT19GTl9UUFUwVE8xLAorCUdQSU9fRk5fTTExX1NMQ0RfU08xLCBHUElPX0ZOX01GRzRfSU4yLCBHUElPX0ZOX1RQVTBUTzIsCisJR1BJT19GTl9NMTJfU0xDRF9DRTEsIEdQSU9fRk5fTUZHNF9PVVQxLCBHUElPX0ZOX1RQVTBUTzMsCisJR1BJT19GTl9MQ0REMCwgR1BJT19GTl9QT1JUMTc1X0tFWU9VVDAsIEdQSU9fRk5fRFZfRDAsCisJR1BJT19GTl9TSVVDS0EsIEdQSU9fRk5fTUZHMF9PVVQyLAorCUdQSU9fRk5fTENERDEsIEdQSU9fRk5fUE9SVDE3Nl9LRVlPVVQxLCBHUElPX0ZOX0RWX0QxLAorCUdQSU9fRk5fU0lVQU9MUiwgR1BJT19GTl9CQklGMl9UU1lOQzEsCisJR1BJT19GTl9MQ0REMiwgR1BJT19GTl9QT1JUMTc3X0tFWU9VVDIsIEdQSU9fRk5fRFZfRDIsCisJR1BJT19GTl9TSVVBT0JULCBHUElPX0ZOX0JCSUYyX1RTQ0sxLAorCUdQSU9fRk5fTENERDMsIEdQSU9fRk5fUE9SVDE3OF9LRVlPVVQzLCBHUElPX0ZOX0RWX0QzLAorCUdQSU9fRk5fU0lVQU9TTEQsIEdQSU9fRk5fQkJJRjJfVFhEMSwKKwlHUElPX0ZOX0xDREQ0LCBHUElPX0ZOX1BPUlQxNzlfS0VZT1VUNCwgR1BJT19GTl9EVl9ENCwKKwlHUElPX0ZOX1NJVUFJU1BELCBHUElPX0ZOX01GRzFfT1VUMiwKKwlHUElPX0ZOX0xDREQ1LCBHUElPX0ZOX1BPUlQxODBfS0VZT1VUNSwgR1BJT19GTl9EVl9ENSwKKwlHUElPX0ZOX1NJVUFJTFIsIEdQSU9fRk5fTUZHMl9PVVQyLAorCUdQSU9fRk5fTENERDYsIEdQSU9fRk5fRFZfRDYsCisJR1BJT19GTl9TSVVBSUJULCBHUElPX0ZOX01GRzNfT1VUMiwgR1BJT19GTl9YV1IyLAorCUdQSU9fRk5fTENERDcsIEdQSU9fRk5fRFZfRDcsCisJR1BJT19GTl9TSVVBSVNMRCwgR1BJT19GTl9NRkc0X09VVDIsIEdQSU9fRk5fWFdSMywKKwlHUElPX0ZOX0xDREQ4LCBHUElPX0ZOX0RWX0Q4LCBHUElPX0ZOX0QxNiwgR1BJT19GTl9FRDE2LAorCUdQSU9fRk5fTENERDksIEdQSU9fRk5fRFZfRDksIEdQSU9fRk5fRDE3LCBHUElPX0ZOX0VEMTcsCisJR1BJT19GTl9MQ0REMTAsIEdQSU9fRk5fRFZfRDEwLCBHUElPX0ZOX0QxOCwgR1BJT19GTl9FRDE4LAorCUdQSU9fRk5fTENERDExLCBHUElPX0ZOX0RWX0QxMSwgR1BJT19GTl9EMTksIEdQSU9fRk5fRUQxOSwKKwlHUElPX0ZOX0xDREQxMiwgR1BJT19GTl9EVl9EMTIsIEdQSU9fRk5fRDIwLCBHUElPX0ZOX0VEMjAsCisJR1BJT19GTl9MQ0REMTMsIEdQSU9fRk5fRFZfRDEzLCBHUElPX0ZOX0QyMSwgR1BJT19GTl9FRDIxLAorCUdQSU9fRk5fTENERDE0LCBHUElPX0ZOX0RWX0QxNCwgR1BJT19GTl9EMjIsIEdQSU9fRk5fRUQyMiwKKwlHUElPX0ZOX0xDREQxNSwgR1BJT19GTl9EVl9EMTUsIEdQSU9fRk5fRDIzLCBHUElPX0ZOX0VEMjMsCisJR1BJT19GTl9MQ0REMTYsIEdQSU9fRk5fRFZfSFNZTkMsIEdQSU9fRk5fRDI0LCBHUElPX0ZOX0VEMjQsCisJR1BJT19GTl9MQ0REMTcsIEdQSU9fRk5fRFZfVlNZTkMsIEdQSU9fRk5fRDI1LCBHUElPX0ZOX0VEMjUsCisJR1BJT19GTl9MQ0REMTgsIEdQSU9fRk5fRFJFUTIsIEdQSU9fRk5fTVNJT0YwTF9UU0NLLAorCUdQSU9fRk5fRDI2LCBHUElPX0ZOX0VEMjYsCisJR1BJT19GTl9MQ0REMTksIEdQSU9fRk5fTVNJT0YwTF9UU1lOQywKKwlHUElPX0ZOX0QyNywgR1BJT19GTl9FRDI3LAorCUdQSU9fRk5fTENERDIwLCBHUElPX0ZOX1RTX1NQU1lOQzEsIEdQSU9fRk5fTVNJT0YwTF9NQ0swLAorCUdQSU9fRk5fRDI4LCBHUElPX0ZOX0VEMjgsCisJR1BJT19GTl9MQ0REMjEsIEdQSU9fRk5fVFNfU0RBVDEsIEdQSU9fRk5fTVNJT0YwTF9NQ0sxLAorCUdQSU9fRk5fRDI5LCBHUElPX0ZOX0VEMjksCisJR1BJT19GTl9MQ0REMjIsIEdQSU9fRk5fVFNfU0RFTjEsIEdQSU9fRk5fTVNJT0YwTF9TUzEsCisJR1BJT19GTl9EMzAsIEdQSU9fRk5fRUQzMCwKKwlHUElPX0ZOX0xDREQyMywgR1BJT19GTl9UU19TQ0sxLCBHUElPX0ZOX01TSU9GMExfU1MyLAorCUdQSU9fRk5fRDMxLCBHUElPX0ZOX0VEMzEsCisJR1BJT19GTl9MQ0REQ0ssIEdQSU9fRk5fTENEV1IsIEdQSU9fRk5fRFZfQ0tPLCBHUElPX0ZOX1NJVUFPU1BELAorCUdQSU9fRk5fTENEUkQsIEdQSU9fRk5fREFDSzIsIEdQSU9fRk5fTVNJT0YwTF9SU1lOQywKKworCisJLyogNDktNSAoRk4pICovCisJR1BJT19GTl9MQ0RIU1lOLCBHUElPX0ZOX0xDRENTLCBHUElPX0ZOX0xDRENTMiwgR1BJT19GTl9EQUNLMywKKwlHUElPX0ZOX0xDRERJU1AsIEdQSU9fRk5fTENEUlMsIEdQSU9fRk5fRFJFUTMsIEdQSU9fRk5fTVNJT0YwTF9SU0NLLAorCUdQSU9fRk5fTENEQ1NZTiwgR1BJT19GTl9MQ0RDU1lOMiwgR1BJT19GTl9EVl9DS0ksCisJR1BJT19GTl9MQ0RMQ0xLLCBHUElPX0ZOX0RSRVExLCBHUElPX0ZOX01TSU9GMExfUlhELAorCUdQSU9fRk5fTENERE9OLCBHUElPX0ZOX0xDRERPTjIsIEdQSU9fRk5fREFDSzEsIEdQSU9fRk5fTVNJT0YwTF9UWEQsCisJR1BJT19GTl9WSU9fRFIwLCBHUElPX0ZOX1ZJT19EUjEsIEdQSU9fRk5fVklPX0RSMiwgR1BJT19GTl9WSU9fRFIzLAorCUdQSU9fRk5fVklPX0RSNCwgR1BJT19GTl9WSU9fRFI1LCBHUElPX0ZOX1ZJT19EUjYsIEdQSU9fRk5fVklPX0RSNywKKwlHUElPX0ZOX1ZJT19WRFIsIEdQSU9fRk5fVklPX0hEUiwKKwlHUElPX0ZOX1ZJT19DTEtSLCBHUElPX0ZOX1ZJT19DS09SLAorCUdQSU9fRk5fU0NJRkExX1RYRCwgR1BJT19GTl9HUFNfUEdGQTAsCisJR1BJT19GTl9TQ0lGQTFfU0NLLCBHUElPX0ZOX0dQU19QR0ZBMSwKKwlHUElPX0ZOX1NDSUZBMV9SVFMsIEdQSU9fRk5fR1BTX0VQUFNJTk1PTiwKKwlHUElPX0ZOX1NDSUZBMV9SWEQsIEdQSU9fRk5fU0NJRkExX0NUUywKKwlHUElPX0ZOX01TSU9GMV9UWEQsIEdQSU9fRk5fU0NJRkExX1RYRDIsIEdQSU9fRk5fR1BTX1RYRCwKKwlHUElPX0ZOX01TSU9GMV9UU1lOQywgR1BJT19GTl9TQ0lGQTFfQ1RTMiwgR1BJT19GTl9JMkNfU0RBMiwKKwlHUElPX0ZOX01TSU9GMV9UU0NLLCBHUElPX0ZOX1NDSUZBMV9TQ0syLAorCUdQSU9fRk5fTVNJT0YxX1JYRCwgR1BJT19GTl9TQ0lGQTFfUlhEMiwgR1BJT19GTl9HUFNfUlhELAorCUdQSU9fRk5fTVNJT0YxX1JTQ0ssIEdQSU9fRk5fU0NJRkExX1JUUzIsCisJR1BJT19GTl9NU0lPRjFfUlNZTkMsIEdQSU9fRk5fSTJDX1NDTDIsCisJR1BJT19GTl9NU0lPRjFfTUNLMCwgR1BJT19GTl9NU0lPRjFfTUNLMSwKKwlHUElPX0ZOX01TSU9GMV9TUzEsIEdQSU9fRk5fRURCR1JFUTMsCisJR1BJT19GTl9NU0lPRjFfU1MyLAorCUdQSU9fRk5fUE9SVDIzNl9JUk9VVCwgR1BJT19GTl9JUkRBX09VVCwKKwlHUElPX0ZOX0lSREFfSU4sIEdQSU9fRk5fSVJEQV9GSVJTRUwsCisJR1BJT19GTl9UUFUxVE8wLCBHUElPX0ZOX1RTX1NQU1lOQzMsCisJR1BJT19GTl9UUFUxVE8xLCBHUElPX0ZOX1RTX1NEQVQzLAorCUdQSU9fRk5fVFBVMVRPMiwgR1BJT19GTl9UU19TREVOMywgR1BJT19GTl9QT1JUMjQxX01TSU9GMl9TUzEsCisJR1BJT19GTl9UUFUxVE8zLCBHUElPX0ZOX1BPUlQyNDJfTVNJT0YyX1RTQ0ssCisJR1BJT19GTl9NMTNfQlNXLCBHUElPX0ZOX1BPUlQyNDNfTVNJT0YyX1RTWU5DLAorCUdQSU9fRk5fTTE0X0dTVywgR1BJT19GTl9QT1JUMjQ0X01TSU9GMl9UWEQsCisJR1BJT19GTl9QT1JUMjQ1X0lST1VULCBHUElPX0ZOX00xNV9SU1csCisJR1BJT19GTl9TT1VUMywgR1BJT19GTl9TQ0lGQTJfVFhEMSwKKwlHUElPX0ZOX1NJTjMsIEdQSU9fRk5fU0NJRkEyX1JYRDEsCisJR1BJT19GTl9YUlRTMywgR1BJT19GTl9TQ0lGQTJfUlRTMSwgR1BJT19GTl9QT1JUMjQ4X01TSU9GMl9TUzIsCisJR1BJT19GTl9YQ1RTMywgR1BJT19GTl9TQ0lGQTJfQ1RTMSwgR1BJT19GTl9QT1JUMjQ5X01TSU9GMl9SWEQsCisJR1BJT19GTl9ESU5ULCBHUElPX0ZOX1NDSUZBMl9TQ0sxLCBHUElPX0ZOX1RTX1NDSzMsCisJR1BJT19GTl9TREhJQ0xLMCwgR1BJT19GTl9UQ0syLAorCUdQSU9fRk5fU0RISUNEMCwKKwlHUElPX0ZOX1NESElEMF8wLCBHUElPX0ZOX1RNUzIsCisJR1BJT19GTl9TREhJRDBfMSwgR1BJT19GTl9URE8yLAorCUdQSU9fRk5fU0RISUQwXzIsIEdQSU9fRk5fVERJMiwKKwlHUElPX0ZOX1NESElEMF8zLCBHUElPX0ZOX1JUQ0syLAorCisJLyogNDktNiAoRk4pICovCisJR1BJT19GTl9TREhJQ01EMCwgR1BJT19GTl9UUlNUMiwKKwlHUElPX0ZOX1NESElXUDAsIEdQSU9fRk5fRURCR1JFUTIsCisJR1BJT19GTl9TREhJQ0xLMSwgR1BJT19GTl9UQ0szLAorCUdQSU9fRk5fU0RISUQxXzAsIEdQSU9fRk5fTTExX1NMQ0RfU08yLAorCUdQSU9fRk5fVFNfU1BTWU5DMiwgR1BJT19GTl9UTVMzLAorCUdQSU9fRk5fU0RISUQxXzEsIEdQSU9fRk5fTTlfU0xDRF9BTzIsCisJR1BJT19GTl9UU19TREFUMiwgR1BJT19GTl9URE8zLAorCUdQSU9fRk5fU0RISUQxXzIsIEdQSU9fRk5fTTEwX1NMQ0RfQ0syLAorCUdQSU9fRk5fVFNfU0RFTjIsIEdQSU9fRk5fVERJMywKKwlHUElPX0ZOX1NESElEMV8zLCBHUElPX0ZOX00xMl9TTENEX0NFMiwKKwlHUElPX0ZOX1RTX1NDSzIsIEdQSU9fRk5fUlRDSzMsCisJR1BJT19GTl9TREhJQ01EMSwgR1BJT19GTl9UUlNUMywKKwlHUElPX0ZOX1NESElDTEsyLCBHUElPX0ZOX1NDSUZCX1NDSywKKwlHUElPX0ZOX1NESElEMl8wLCBHUElPX0ZOX1NDSUZCX1RYRCwKKwlHUElPX0ZOX1NESElEMl8xLCBHUElPX0ZOX1NDSUZCX0NUUywKKwlHUElPX0ZOX1NESElEMl8yLCBHUElPX0ZOX1NDSUZCX1JYRCwKKwlHUElPX0ZOX1NESElEMl8zLCBHUElPX0ZOX1NDSUZCX1JUUywKKwlHUElPX0ZOX1NESElDTUQyLAorCUdQSU9fRk5fUkVTRVRPVVRTLAorCUdQSU9fRk5fRElWTE9DSywKK307CisKKyNlbmRpZiAvKiBfX0FTTV9TSDczNjdfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9zaDczNzIuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3NoNzM3Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjMzRmMDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9zaDczNzIuaApAQCAtMCwwICsxLDQzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBSZW5lc2FzIFNvbHV0aW9ucyBDb3JwLgorICoKKyAqIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjaWZuZGVmIF9fQVNNX1NINzM3Ml9IX18KKyNkZWZpbmUgX19BU01fU0g3MzcyX0hfXworCisvKgorICogUGluIEZ1bmN0aW9uIENvbnRyb2xsZXI6CisgKglHUElPX0ZOX3h4IC0gR1BJTyB1c2VkIHRvIHNlbGVjdCBwaW4gZnVuY3Rpb24KKyAqCUdQSU9fUE9SVHh4IC0gR1BJTyBtYXBwZWQgdG8gcmVhbCBJL08gcGluIG9uIENQVQorICovCitlbnVtIHsKKwkvKiBQT1JUICovCisJR1BJT19QT1JUMCwgR1BJT19QT1JUMSwgR1BJT19QT1JUMiwgR1BJT19QT1JUMywgR1BJT19QT1JUNCwKKwlHUElPX1BPUlQ1LCBHUElPX1BPUlQ2LCBHUElPX1BPUlQ3LCBHUElPX1BPUlQ4LCBHUElPX1BPUlQ5LAorCisJR1BJT19QT1JUMTAsIEdQSU9fUE9SVDExLCBHUElPX1BPUlQxMiwgR1BJT19QT1JUMTMsIEdQSU9fUE9SVDE0LAorCUdQSU9fUE9SVDE1LCBHUElPX1BPUlQxNiwgR1BJT19QT1JUMTcsIEdQSU9fUE9SVDE4LCBHUElPX1BPUlQxOSwKKworCUdQSU9fUE9SVDIwLCBHUElPX1BPUlQyMSwgR1BJT19QT1JUMjIsIEdQSU9fUE9SVDIzLCBHUElPX1BPUlQyNCwKKwlHUElPX1BPUlQyNSwgR1BJT19QT1JUMjYsIEdQSU9fUE9SVDI3LCBHUElPX1BPUlQyOCwgR1BJT19QT1JUMjksCisKKwlHUElPX1BPUlQzMCwgR1BJT19QT1JUMzEsIEdQSU9fUE9SVDMyLCBHUElPX1BPUlQzMywgR1BJT19QT1JUMzQsCisJR1BJT19QT1JUMzUsIEdQSU9fUE9SVDM2LCBHUElPX1BPUlQzNywgR1BJT19QT1JUMzgsIEdQSU9fUE9SVDM5LAorCisJR1BJT19QT1JUNDAsIEdQSU9fUE9SVDQxLCBHUElPX1BPUlQ0MiwgR1BJT19QT1JUNDMsIEdQSU9fUE9SVDQ0LAorCUdQSU9fUE9SVDQ1LCBHUElPX1BPUlQ0NiwgR1BJT19QT1JUNDcsIEdQSU9fUE9SVDQ4LCBHUElPX1BPUlQ0OSwKKworCUdQSU9fUE9SVDUwLCBHUElPX1BPUlQ1MSwgR1BJT19QT1JUNTIsIEdQSU9fUE9SVDUzLCBHUElPX1BPUlQ1NCwKKwlHUElPX1BPUlQ1NSwgR1BJT19QT1JUNTYsIEdQSU9fUE9SVDU3LCBHUElPX1BPUlQ1OCwgR1BJT19QT1JUNTksCisKKwlHUElPX1BPUlQ2MCwgR1BJT19QT1JUNjEsIEdQSU9fUE9SVDYyLCBHUElPX1BPUlQ2MywgR1BJT19QT1JUNjQsCisJR1BJT19QT1JUNjUsIEdQSU9fUE9SVDY2LCBHUElPX1BPUlQ2NywgR1BJT19QT1JUNjgsIEdQSU9fUE9SVDY5LAorCisJR1BJT19QT1JUNzAsIEdQSU9fUE9SVDcxLCBHUElPX1BPUlQ3MiwgR1BJT19QT1JUNzMsIEdQSU9fUE9SVDc0LAorCUdQSU9fUE9SVDc1LCBHUElPX1BPUlQ3NiwgR1BJT19QT1JUNzcsIEdQSU9fUE9SVDc4LCBHUElPX1BPUlQ3OSwKKworCUdQSU9fUE9SVDgwLCBHUElPX1BPUlQ4MSwgR1BJT19QT1JUODIsIEdQSU9fUE9SVDgzLCBHUElPX1BPUlQ4NCwKKwlHUElPX1BPUlQ4NSwgR1BJT19QT1JUODYsIEdQSU9fUE9SVDg3LCBHUElPX1BPUlQ4OCwgR1BJT19QT1JUODksCisKKwlHUElPX1BPUlQ5MCwgR1BJT19QT1JUOTEsIEdQSU9fUE9SVDkyLCBHUElPX1BPUlQ5MywgR1BJT19QT1JUOTQsCisJR1BJT19QT1JUOTUsIEdQSU9fUE9SVDk2LCBHUElPX1BPUlQ5NywgR1BJT19QT1JUOTgsIEdQSU9fUE9SVDk5LAorCisJR1BJT19QT1JUMTAwLCBHUElPX1BPUlQxMDEsIEdQSU9fUE9SVDEwMiwgR1BJT19QT1JUMTAzLCBHUElPX1BPUlQxMDQsCisJR1BJT19QT1JUMTA1LCBHUElPX1BPUlQxMDYsIEdQSU9fUE9SVDEwNywgR1BJT19QT1JUMTA4LCBHUElPX1BPUlQxMDksCisKKwlHUElPX1BPUlQxMTAsIEdQSU9fUE9SVDExMSwgR1BJT19QT1JUMTEyLCBHUElPX1BPUlQxMTMsIEdQSU9fUE9SVDExNCwKKwlHUElPX1BPUlQxMTUsIEdQSU9fUE9SVDExNiwgR1BJT19QT1JUMTE3LCBHUElPX1BPUlQxMTgsIEdQSU9fUE9SVDExOSwKKworCUdQSU9fUE9SVDEyMCwgR1BJT19QT1JUMTIxLCBHUElPX1BPUlQxMjIsIEdQSU9fUE9SVDEyMywgR1BJT19QT1JUMTI0LAorCUdQSU9fUE9SVDEyNSwgR1BJT19QT1JUMTI2LCBHUElPX1BPUlQxMjcsIEdQSU9fUE9SVDEyOCwgR1BJT19QT1JUMTI5LAorCisJR1BJT19QT1JUMTMwLCBHUElPX1BPUlQxMzEsIEdQSU9fUE9SVDEzMiwgR1BJT19QT1JUMTMzLCBHUElPX1BPUlQxMzQsCisJR1BJT19QT1JUMTM1LCBHUElPX1BPUlQxMzYsIEdQSU9fUE9SVDEzNywgR1BJT19QT1JUMTM4LCBHUElPX1BPUlQxMzksCisKKwlHUElPX1BPUlQxNDAsIEdQSU9fUE9SVDE0MSwgR1BJT19QT1JUMTQyLCBHUElPX1BPUlQxNDMsIEdQSU9fUE9SVDE0NCwKKwlHUElPX1BPUlQxNDUsIEdQSU9fUE9SVDE0NiwgR1BJT19QT1JUMTQ3LCBHUElPX1BPUlQxNDgsIEdQSU9fUE9SVDE0OSwKKworCUdQSU9fUE9SVDE1MCwgR1BJT19QT1JUMTUxLCBHUElPX1BPUlQxNTIsIEdQSU9fUE9SVDE1MywgR1BJT19QT1JUMTU0LAorCUdQSU9fUE9SVDE1NSwgR1BJT19QT1JUMTU2LCBHUElPX1BPUlQxNTcsIEdQSU9fUE9SVDE1OCwgR1BJT19QT1JUMTU5LAorCisJR1BJT19QT1JUMTYwLCBHUElPX1BPUlQxNjEsIEdQSU9fUE9SVDE2MiwgR1BJT19QT1JUMTYzLCBHUElPX1BPUlQxNjQsCisJR1BJT19QT1JUMTY1LCBHUElPX1BPUlQxNjYsIEdQSU9fUE9SVDE2NywgR1BJT19QT1JUMTY4LCBHUElPX1BPUlQxNjksCisKKwlHUElPX1BPUlQxNzAsIEdQSU9fUE9SVDE3MSwgR1BJT19QT1JUMTcyLCBHUElPX1BPUlQxNzMsIEdQSU9fUE9SVDE3NCwKKwlHUElPX1BPUlQxNzUsIEdQSU9fUE9SVDE3NiwgR1BJT19QT1JUMTc3LCBHUElPX1BPUlQxNzgsIEdQSU9fUE9SVDE3OSwKKworCUdQSU9fUE9SVDE4MCwgR1BJT19QT1JUMTgxLCBHUElPX1BPUlQxODIsIEdQSU9fUE9SVDE4MywgR1BJT19QT1JUMTg0LAorCUdQSU9fUE9SVDE4NSwgR1BJT19QT1JUMTg2LCBHUElPX1BPUlQxODcsIEdQSU9fUE9SVDE4OCwgR1BJT19QT1JUMTg5LAorCisJR1BJT19QT1JUMTkwLAorCisJLyogSVJRICovCisJR1BJT19GTl9JUlEwXzYsCQkvKiBQT1JUICAgNiAqLworCUdQSU9fRk5fSVJRMF8xNjIsCS8qIFBPUlQgMTYyICovCisJR1BJT19GTl9JUlExLAkJLyogUE9SVCAgMTIgKi8KKwlHUElPX0ZOX0lSUTJfNCwJCS8qIFBPUlQgICA0ICovCisJR1BJT19GTl9JUlEyXzUsCQkvKiBQT1JUICAgNSAqLworCUdQSU9fRk5fSVJRM184LAkJLyogUE9SVCAgIDggKi8KKwlHUElPX0ZOX0lSUTNfMTYsCS8qIFBPUlQgIDE2ICovCisJR1BJT19GTl9JUlE0XzE3LAkvKiBQT1JUICAxNyAqLworCUdQSU9fRk5fSVJRNF8xNjMsCS8qIFBPUlQgMTYzICovCisJR1BJT19GTl9JUlE1LAkJLyogUE9SVCAgMTggKi8KKwlHUElPX0ZOX0lSUTZfMzksCS8qIFBPUlQgIDM5ICovCisJR1BJT19GTl9JUlE2XzE2NCwJLyogUE9SVCAxNjQgKi8KKwlHUElPX0ZOX0lSUTdfNDAsCS8qIFBPUlQgIDQwICovCisJR1BJT19GTl9JUlE3XzE2NywJLyogUE9SVCAxNjcgKi8KKwlHUElPX0ZOX0lSUThfNDEsCS8qIFBPUlQgIDQxICovCisJR1BJT19GTl9JUlE4XzE2OCwJLyogUE9SVCAxNjggKi8KKwlHUElPX0ZOX0lSUTlfNDIsCS8qIFBPUlQgIDQyICovCisJR1BJT19GTl9JUlE5XzE2OSwJLyogUE9SVCAxNjkgKi8KKwlHUElPX0ZOX0lSUTEwLAkJLyogUE9SVCAgNjUgKi8KKwlHUElPX0ZOX0lSUTExLAkJLyogUE9SVCAgNjcgKi8KKwlHUElPX0ZOX0lSUTEyXzgwLAkvKiBQT1JUICA4MCAqLworCUdQSU9fRk5fSVJRMTJfMTM3LAkvKiBQT1JUIDEzNyAqLworCUdQSU9fRk5fSVJRMTNfODEsCS8qIFBPUlQgIDgxICovCisJR1BJT19GTl9JUlExM18xNDUsCS8qIFBPUlQgMTQ1ICovCisJR1BJT19GTl9JUlExNF84MiwJLyogUE9SVCAgODIgKi8KKwlHUElPX0ZOX0lSUTE0XzE0NiwJLyogUE9SVCAxNDYgKi8KKwlHUElPX0ZOX0lSUTE1XzgzLAkvKiBQT1JUICA4MyAqLworCUdQSU9fRk5fSVJRMTVfMTQ3LAkvKiBQT1JUIDE0NyAqLworCUdQSU9fRk5fSVJRMTZfODQsCS8qIFBPUlQgIDg0ICovCisJR1BJT19GTl9JUlExNl8xNzAsCS8qIFBPUlQgMTcwICovCisJR1BJT19GTl9JUlExNywJCS8qIFBPUlQgIDg1ICovCisJR1BJT19GTl9JUlExOCwJCS8qIFBPUlQgIDg2ICovCisJR1BJT19GTl9JUlExOSwJCS8qIFBPUlQgIDg3ICovCisJR1BJT19GTl9JUlEyMCwJCS8qIFBPUlQgIDkyICovCisJR1BJT19GTl9JUlEyMSwJCS8qIFBPUlQgIDkzICovCisJR1BJT19GTl9JUlEyMiwJCS8qIFBPUlQgIDk0ICovCisJR1BJT19GTl9JUlEyMywJCS8qIFBPUlQgIDk1ICovCisJR1BJT19GTl9JUlEyNCwJCS8qIFBPUlQgMTEyICovCisJR1BJT19GTl9JUlEyNSwJCS8qIFBPUlQgMTE5ICovCisJR1BJT19GTl9JUlEyNl8xMjEsCS8qIFBPUlQgMTIxICovCisJR1BJT19GTl9JUlEyNl8xNzIsCS8qIFBPUlQgMTcyICovCisJR1BJT19GTl9JUlEyN18xMjIsCS8qIFBPUlQgMTIyICovCisJR1BJT19GTl9JUlEyN18xODAsCS8qIFBPUlQgMTgwICovCisJR1BJT19GTl9JUlEyOF8xMjMsCS8qIFBPUlQgMTIzICovCisJR1BJT19GTl9JUlEyOF8xODEsCS8qIFBPUlQgMTgxICovCisJR1BJT19GTl9JUlEyOV8xMjksCS8qIFBPUlQgMTI5ICovCisJR1BJT19GTl9JUlEyOV8xODIsCS8qIFBPUlQgMTgyICovCisJR1BJT19GTl9JUlEzMF8xMzAsCS8qIFBPUlQgMTMwICovCisJR1BJT19GTl9JUlEzMF8xODMsCS8qIFBPUlQgMTgzICovCisJR1BJT19GTl9JUlEzMV8xMzgsCS8qIFBPUlQgMTM4ICovCisJR1BJT19GTl9JUlEzMV8xODQsCS8qIFBPUlQgMTg0ICovCisKKwkvKgorCSAqIE1TSU9GMAkoUE9SVCAzNiwgMzcsIDM4LCAzOQorCSAqIAkJICAgICAgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSkKKwkgKi8KKwlHUElPX0ZOX01TSU9GMF9UU1lOQywJR1BJT19GTl9NU0lPRjBfVFNDSywKKwlHUElPX0ZOX01TSU9GMF9SWEQsCUdQSU9fRk5fTVNJT0YwX1JTQ0ssCisJR1BJT19GTl9NU0lPRjBfUlNZTkMsCUdQSU9fRk5fTVNJT0YwX01DSzAsCisJR1BJT19GTl9NU0lPRjBfTUNLMSwJR1BJT19GTl9NU0lPRjBfU1MxLAorCUdQSU9fRk5fTVNJT0YwX1NTMiwJR1BJT19GTl9NU0lPRjBfVFhELAorCisJLyoKKwkgKiBNU0lPRjEJKFBPUlQgMzksIDQwLCA0MSwgNDIsIDQzLCA0NAorCSAqIAkJICAgICAgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgOTMpCisJICovCisJR1BJT19GTl9NU0lPRjFfVFNDS18zOSwJR1BJT19GTl9NU0lPRjFfVFNZTkNfNDAsCisJR1BJT19GTl9NU0lPRjFfVFNDS184OCwJR1BJT19GTl9NU0lPRjFfVFNZTkNfODksCisJR1BJT19GTl9NU0lPRjFfVFhEXzQxLAlHUElPX0ZOX01TSU9GMV9SWERfNDIsCisJR1BJT19GTl9NU0lPRjFfVFhEXzkwLAlHUElPX0ZOX01TSU9GMV9SWERfOTEsCisJR1BJT19GTl9NU0lPRjFfU1MxXzQzLAlHUElPX0ZOX01TSU9GMV9TUzJfNDQsCisJR1BJT19GTl9NU0lPRjFfU1MxXzkyLAlHUElPX0ZOX01TSU9GMV9TUzJfOTMsCisJR1BJT19GTl9NU0lPRjFfUlNDSywJR1BJT19GTl9NU0lPRjFfUlNZTkMsCisJR1BJT19GTl9NU0lPRjFfTUNLMCwJR1BJT19GTl9NU0lPRjFfTUNLMSwKKworCS8qCisJICogTVNJT0YyCShQT1JUIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzkKKwkgKgkJICAgICAgMTQ4LCAxNDksIDE1MCwgMTUxKQorCSAqLworCUdQSU9fRk5fTVNJT0YyX1JTQ0ssCUdQSU9fRk5fTVNJT0YyX1JTWU5DLAorCUdQSU9fRk5fTVNJT0YyX01DSzAsCUdQSU9fRk5fTVNJT0YyX01DSzEsCisJR1BJT19GTl9NU0lPRjJfU1MxLAlHUElPX0ZOX01TSU9GMl9TUzIsCisJR1BJT19GTl9NU0lPRjJfVFNZTkMsCUdQSU9fRk5fTVNJT0YyX1RTQ0ssCisJR1BJT19GTl9NU0lPRjJfUlhELAlHUElPX0ZOX01TSU9GMl9UWEQsCisKKwkvKiBNU0lPRjMJKFBPUlQgNzYsIDc3LCA3OCwgNzksIDgwLCA4MSwgODIsIDgzKSAqLworCUdQSU9fRk5fQkJJRjFfUlhELAlHUElPX0ZOX0JCSUYxX1RTWU5DLAorCUdQSU9fRk5fQkJJRjFfVFNDSywJR1BJT19GTl9CQklGMV9UWEQsCisJR1BJT19GTl9CQklGMV9SU0NLLAlHUElPX0ZOX0JCSUYxX1JTWU5DLAorCUdQSU9fRk5fQkJJRjFfRkxPVywJR1BJT19GTl9CQl9SWF9GTE9XX04sCisKKwkvKiBNU0lPRjQJKFBPUlQgMCwgMSwgMiwgMykgKi8KKwlHUElPX0ZOX0JCSUYyX1RTQ0sxLAlHUElPX0ZOX0JCSUYyX1RTWU5DMSwKKwlHUElPX0ZOX0JCSUYyX1RYRDEsCUdQSU9fRk5fQkJJRjJfUlhELAorCisJLyogRlNJCQkoUE9SVCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDE1KSAqLworCUdQSU9fRk5fRlNJQUNLLAkJR1BJT19GTl9GU0lCQ0ssCisJR1BJT19GTl9GU0lBSUxSLAlHUElPX0ZOX0ZTSUFJQlQsCisJR1BJT19GTl9GU0lBSVNMRCwJR1BJT19GTl9GU0lBT01DLAorCUdQSU9fRk5fRlNJQU9MUiwJR1BJT19GTl9GU0lBT0JULAorCUdQSU9fRk5fRlNJQU9TTEQsCUdQSU9fRk5fRlNJQVNQRElGXzExLAorCUdQSU9fRk5fRlNJQVNQRElGXzE1LAorCisJLyogRk1TSQkJKFBPUlQgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDY1KSAqLworCUdQSU9fRk5fRk1TT0NLLAkJR1BJT19GTl9GTVNPT0xSLAorCUdQSU9fRk5fRk1TSU9MUiwJR1BJT19GTl9GTVNPT0JULAorCUdQSU9fRk5fRk1TSU9CVCwJR1BJT19GTl9GTVNPU0xELAorCUdQSU9fRk5fRk1TT0lMUiwJR1BJT19GTl9GTVNJSUxSLAorCUdQSU9fRk5fRk1TT0lCVCwJR1BJT19GTl9GTVNJSUJULAorCUdQSU9fRk5fRk1TSVNMRCwJR1BJT19GTl9GTVNJQ0ssCisKKwkvKiBTQ0lGQTAJKFBPUlQgMTUyLCAxNTMsIDE1NiwgMTU3LCAxNTgpICovCisJR1BJT19GTl9TQ0lGQTBfVFhELAlHUElPX0ZOX1NDSUZBMF9SWEQsCisJR1BJT19GTl9TQ0lGQTBfU0NLLAlHUElPX0ZOX1NDSUZBMF9SVFMsCisJR1BJT19GTl9TQ0lGQTBfQ1RTLAorCisJLyogU0NJRkExCShQT1JUIDE1NCwgMTU1LCAxNTksIDE2MCwgMTYxKSAqLworCUdQSU9fRk5fU0NJRkExX1RYRCwJR1BJT19GTl9TQ0lGQTFfUlhELAorCUdQSU9fRk5fU0NJRkExX1NDSywJR1BJT19GTl9TQ0lGQTFfUlRTLAorCUdQSU9fRk5fU0NJRkExX0NUUywKKworCS8qIFNDSUZBMgkoUE9SVCA5NCwgOTUsIDk2LCA5NywgOTgpICovCisJR1BJT19GTl9TQ0lGQTJfQ1RTMSwJR1BJT19GTl9TQ0lGQTJfUlRTMSwKKwlHUElPX0ZOX1NDSUZBMl9UWEQxLAlHUElPX0ZOX1NDSUZBMl9SWEQxLAorCUdQSU9fRk5fU0NJRkEyX1NDSzEsCisKKwkvKiBTQ0lGQTMJKFBPUlQgNDMsIDQ0LAorCQkJICAgICAxNDAsIDE0MSwgMTQyLCAxNDMsIDE0NCkgKi8KKwlHUElPX0ZOX1NDSUZBM19DVFNfNDMsCUdQSU9fRk5fU0NJRkEzX0NUU18xNDAsCisJR1BJT19GTl9TQ0lGQTNfUlRTXzQ0LAlHUElPX0ZOX1NDSUZBM19SVFNfMTQxLAorCUdQSU9fRk5fU0NJRkEzX1NDSywJR1BJT19GTl9TQ0lGQTNfVFhELAorCUdQSU9fRk5fU0NJRkEzX1JYRCwKKworCS8qIFNDSUZBNAkoUE9SVCA1LCA2KSAqLworCUdQSU9fRk5fU0NJRkE0X1JYRCwJR1BJT19GTl9TQ0lGQTRfVFhELAorCisJLyogU0NJRkE1CShQT1JUIDgsIDEyKSAqLworCUdQSU9fRk5fU0NJRkE1X1JYRCwJR1BJT19GTl9TQ0lGQTVfVFhELAorCisJLyogU0NJRkIJKFBPUlQgMTYyLCAxNjMsIDE2NCwgMTY1LCAxNjYpICovCisJR1BJT19GTl9TQ0lGQl9TQ0ssCUdQSU9fRk5fU0NJRkJfUlRTLAorCUdQSU9fRk5fU0NJRkJfQ1RTLAlHUElPX0ZOX1NDSUZCX1RYRCwKKwlHUElPX0ZOX1NDSUZCX1JYRCwKKworCS8qCisJICogQ0VVCQkoUE9SVCAxNiwgMTcsCisJICoJCSAgICAgIDEwMCwgMTAxLCAxMDIsIDEwMywgMTA0LCAxMDUsIDEwNiwgMTA3LCAxMDgsIDEwOSwKKwkgKgkJICAgICAgMTEwLCAxMTEsIDExMiwgMTEzLCAxMTQsIDExNSwgMTE2LCAxMTcsIDExOCwgMTE5LAorCSAqCQkgICAgICAxMjApCisJICovCisJR1BJT19GTl9WSU9fSEQsCQlHUElPX0ZOX1ZJT19DS08xLAlHUElPX0ZOX1ZJT19DS08yLAorCUdQSU9fRk5fVklPX1ZELAkJR1BJT19GTl9WSU9fQ0xLLAlHUElPX0ZOX1ZJT19GSUVMRCwKKwlHUElPX0ZOX1ZJT19DS08sCisJR1BJT19GTl9WSU9fRDAsCQlHUElPX0ZOX1ZJT19EMSwJCUdQSU9fRk5fVklPX0QyLAorCUdQSU9fRk5fVklPX0QzLAkJR1BJT19GTl9WSU9fRDQsCQlHUElPX0ZOX1ZJT19ENSwKKwlHUElPX0ZOX1ZJT19ENiwJCUdQSU9fRk5fVklPX0Q3LAkJR1BJT19GTl9WSU9fRDgsCisJR1BJT19GTl9WSU9fRDksCQlHUElPX0ZOX1ZJT19EMTAsCUdQSU9fRk5fVklPX0QxMSwKKwlHUElPX0ZOX1ZJT19EMTIsCUdQSU9fRk5fVklPX0QxMywJR1BJT19GTl9WSU9fRDE0LAorCUdQSU9fRk5fVklPX0QxNSwKKworCS8qIFVTQjAJCShQT1JUIDExMywgMTE0LCAxMTUsIDExNiwgMTE3LCAxNjcpICovCisJR1BJT19GTl9JRElOXzAsCQlHUElPX0ZOX0VYVExQXzAsCisJR1BJT19GTl9PVkNOMl8wLAlHUElPX0ZOX1BXRU5fMCwKKwlHUElPX0ZOX09WQ05fMCwJCUdQSU9fRk5fVkJVUzBfMCwKKworCS8qIFVTQjEJCShQT1JUIDE4LCAxMTMsIDExNCwgMTE1LCAxMTYsIDExNywgMTM4LCAxNjIsIDE2OCkgKi8KKwlHUElPX0ZOX0lESU5fMV8xOCwJR1BJT19GTl9JRElOXzFfMTEzLAorCUdQSU9fRk5fUFdFTl8xXzExNSwJR1BJT19GTl9QV0VOXzFfMTM4LAorCUdQSU9fRk5fT1ZDTl8xXzExNCwJR1BJT19GTl9PVkNOXzFfMTYyLAorCUdQSU9fRk5fRVhUTFBfMSwJR1BJT19GTl9PVkNOMl8xLAorCUdQSU9fRk5fVkJVUzBfMSwKKworCS8qIEdQSU8JCShQT1JUIDQxLCA0MiwgNDMsIDQ0KSAqLworCUdQSU9fRk5fR1BJMCwJR1BJT19GTl9HUEkxLAlHUElPX0ZOX0dQTzAsCUdQSU9fRk5fR1BPMSwKKworCS8qCisJICogQlNDCQkoUE9SVCAxOSwKKwkgKgkJICAgICAgMjAsIDIxLCAyMiwgMjUsIDI2LCAyNywgMjgsIDI5LAorCSAqCQkgICAgICAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwKKwkgKgkJICAgICAgNDAsIDQxLCA0MiwgNDMsIDQ0LCA0NSwKKwkgKgkJICAgICAgNjIsIDYzLCA2NCwgNjUsIDY2LCA2NywKKwkgKgkJICAgICAgNzEsIDcyLCA3NCwgNzUpCisJICovCisJR1BJT19GTl9CUywJR1BJT19GTl9XRTEsCisJR1BJT19GTl9DS08sCUdQSU9fRk5fV0FJVCwJR1BJT19GTl9SRFdSLAorCisJR1BJT19GTl9BMCwJR1BJT19GTl9BMSwJR1BJT19GTl9BMiwJR1BJT19GTl9BMywKKwlHUElPX0ZOX0E2LAlHUElPX0ZOX0E3LAlHUElPX0ZOX0E4LAlHUElPX0ZOX0E5LAorCUdQSU9fRk5fQTEwLAlHUElPX0ZOX0ExMSwJR1BJT19GTl9BMTIsCUdQSU9fRk5fQTEzLAorCUdQSU9fRk5fQTE0LAlHUElPX0ZOX0ExNSwJR1BJT19GTl9BMTYsCUdQSU9fRk5fQTE3LAorCUdQSU9fRk5fQTE4LAlHUElPX0ZOX0ExOSwJR1BJT19GTl9BMjAsCUdQSU9fRk5fQTIxLAorCUdQSU9fRk5fQTIyLAlHUElPX0ZOX0EyMywJR1BJT19GTl9BMjQsCUdQSU9fRk5fQTI1LAorCUdQSU9fRk5fQTI2LAorCisJR1BJT19GTl9DUzAsCUdQSU9fRk5fQ1MyLAlHUElPX0ZOX0NTNCwKKwlHUElPX0ZOX0NTNUEsCUdQSU9fRk5fQ1M1QiwJR1BJT19GTl9DUzZBLAorCisJLyoKKwkgKiBCU0MvRkxDVEwJCShQT1JUIDIzLCAyNCwKKwkgKgkJCSAgICAgIDQ2LCA0NywgNDgsIDQ5LAorCSAqCQkJICAgICAgNTAsIDUxLCA1MiwgNTMsIDU0LCA1NSwgNTYsIDU3LCA1OCwgNTksCisJICoJCQkgICAgICA2MCwgNjEsIDY5LCA3MCkKKwkgKi8KKwlHUElPX0ZOX1JEX0ZTQywJCUdQSU9fRk5fV0UwX0ZXRSwKKwlHUElPX0ZOX0E0X0ZPRSwJCUdQSU9fRk5fQTVfRkNERSwKKwlHUElPX0ZOX0QwX05BRjAsCUdQSU9fRk5fRDFfTkFGMSwJR1BJT19GTl9EMl9OQUYyLAorCUdQSU9fRk5fRDNfTkFGMywJR1BJT19GTl9ENF9OQUY0LAlHUElPX0ZOX0Q1X05BRjUsCisJR1BJT19GTl9ENl9OQUY2LAlHUElPX0ZOX0Q3X05BRjcsCUdQSU9fRk5fRDhfTkFGOCwKKwlHUElPX0ZOX0Q5X05BRjksCUdQSU9fRk5fRDEwX05BRjEwLAlHUElPX0ZOX0QxMV9OQUYxMSwKKwlHUElPX0ZOX0QxMl9OQUYxMiwJR1BJT19GTl9EMTNfTkFGMTMsCUdQSU9fRk5fRDE0X05BRjE0LAorCUdQSU9fRk5fRDE1X05BRjE1LAorCisJLyoKKwkgKiBNTUNJRigxKQkJKFBPUlQgODQsIDg1LCA4NiwgODcsIDg4LCA4OSwKKwkgKgkJCSAgICAgIDkwLCA5MSwgOTIsIDk5KQorCSAqLworCUdQSU9fRk5fTU1DRDBfMCwJR1BJT19GTl9NTUNEMF8xLAlHUElPX0ZOX01NQ0QwXzIsCisJR1BJT19GTl9NTUNEMF8zLAlHUElPX0ZOX01NQ0QwXzQsCUdQSU9fRk5fTU1DRDBfNSwKKwlHUElPX0ZOX01NQ0QwXzYsCUdQSU9fRk5fTU1DRDBfNywKKwlHUElPX0ZOX01NQ0NNRDAsCUdQSU9fRk5fTU1DQ0xLMCwKKworCS8qIE1NQ0lGKDIpCQkoUE9SVCA1NCwgNTUsIDU2LCA1NywgNTgsIDU5LCA2MCwgNjEsIDY2LCA2NykgKi8KKwlHUElPX0ZOX01NQ0QxXzAsCUdQSU9fRk5fTU1DRDFfMSwJR1BJT19GTl9NTUNEMV8yLAorCUdQSU9fRk5fTU1DRDFfMywJR1BJT19GTl9NTUNEMV80LAlHUElPX0ZOX01NQ0QxXzUsCisJR1BJT19GTl9NTUNEMV82LAlHUElPX0ZOX01NQ0QxXzcsCisJR1BJT19GTl9NTUNDTEsxLAlHUElPX0ZOX01NQ0NNRDEsCisKKwkvKiBTUFUyCQkoUE9SVCA2NSkgKi8KKwlHUElPX0ZOX1ZJTlRfSSwKKworCS8qIEZMQ1RMCShQT1JUIDY2LCA2OCwgNzMpICovCisJR1BJT19GTl9GQ0UxLAlHUElPX0ZOX0ZDRTAsCUdQSU9fRk5fRlJCLAorCisJLyogSFNJCQkoUE9SVCA3NiwgNzcsIDc4LCA3OSwgODAsIDgxLCA4MiwgODMpICovCisJR1BJT19GTl9HUF9SWF9GTEFHLAlHUElPX0ZOX0dQX1JYX0RBVEEsCUdQSU9fRk5fR1BfVFhfUkVBRFksCisJR1BJT19GTl9HUF9SWF9XQUtFLAlHUElPX0ZOX01QX1RYX0ZMQUcsCUdQSU9fRk5fTVBfVFhfREFUQSwKKwlHUElPX0ZOX01QX1JYX1JFQURZLAlHUElPX0ZOX01QX1RYX1dBS0UsCisKKwkvKgorCSAqIE1GSQkJKFBPUlQgNzYsIDc3LCA3OCwgNzksCisJICoJCSAgICAgIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2LCA4NywgODgsIDg5LAorCSAqCQkgICAgICA5MCwgOTEsIDkyLCA5MywgOTQsIDk1LCA5NiwgOTcsIDk4LCA5OSkKKwkgKi8KKwlHUElPX0ZOX01GSXY2LAkvKiBzZWUgTVNFTDRDUiA2ICovCisJR1BJT19GTl9NRkl2NCwJLyogc2VlIE1TRUw0Q1IgNiAqLworCisJR1BJT19GTl9NRU1DX0NTMCwJCUdQSU9fRk5fTUVNQ19CVVNDTEtfTUVNQ19BMCwKKwlHUElPX0ZOX01FTUNfQ1MxX01FTUNfQTEsCUdQSU9fRk5fTUVNQ19BRFZfTUVNQ19EUkVRMCwKKwlHUElPX0ZOX01FTUNfV0FJVF9NRU1DX0RSRVExLAlHUElPX0ZOX01FTUNfTk9FLAorCUdQSU9fRk5fTUVNQ19OV0UsCQlHUElPX0ZOX01FTUNfSU5ULAorCisJR1BJT19GTl9NRU1DX0FEMCwJR1BJT19GTl9NRU1DX0FEMSwJR1BJT19GTl9NRU1DX0FEMiwKKwlHUElPX0ZOX01FTUNfQUQzLAlHUElPX0ZOX01FTUNfQUQ0LAlHUElPX0ZOX01FTUNfQUQ1LAorCUdQSU9fRk5fTUVNQ19BRDYsCUdQSU9fRk5fTUVNQ19BRDcsCUdQSU9fRk5fTUVNQ19BRDgsCisJR1BJT19GTl9NRU1DX0FEOSwJR1BJT19GTl9NRU1DX0FEMTAsCUdQSU9fRk5fTUVNQ19BRDExLAorCUdQSU9fRk5fTUVNQ19BRDEyLAlHUElPX0ZOX01FTUNfQUQxMywJR1BJT19GTl9NRU1DX0FEMTQsCisJR1BJT19GTl9NRU1DX0FEMTUsCisKKwkvKiBTSU0JCShQT1JUIDk0LCA5NSwgOTgpICovCisJR1BJT19GTl9TSU1fUlNULAlHUElPX0ZOX1NJTV9DTEssCUdQSU9fRk5fU0lNX0QsCisKKwkvKiBUUFUJCShQT1JUIDkzLCA5OSwgMTEyLCAxNjAsIDE2MSkgKi8KKwlHUElPX0ZOX1RQVTBUTzAsCUdQSU9fRk5fVFBVMFRPMSwKKwlHUElPX0ZOX1RQVTBUTzJfOTMsCUdQSU9fRk5fVFBVMFRPMl85OSwKKwlHUElPX0ZOX1RQVTBUTzMsCisKKwkvKiBJMkMyCQkoUE9SVCAxMTAsIDExMSkgKi8KKwlHUElPX0ZOX0kyQ19TQ0wyLAlHUElPX0ZOX0kyQ19TREEyLAorCisJLyogSTJDMygxKQkoUE9SVCAxMTQsIDExNSkgKi8KKwlHUElPX0ZOX0kyQ19TQ0wzLAlHUElPX0ZOX0kyQ19TREEzLAorCisJLyogSTJDMygyKQkoUE9SVCAxMzcsIDE0NSkgKi8KKwlHUElPX0ZOX0kyQ19TQ0wzUywJR1BJT19GTl9JMkNfU0RBM1MsCisKKwkvKiBJMkM0KDIpCShQT1JUIDExNiwgMTE3KSAqLworCUdQSU9fRk5fSTJDX1NDTDQsCUdQSU9fRk5fSTJDX1NEQTQsCisKKwkvKiBJMkM0KDIpCShQT1JUIDE0NiwgMTQ3KSAqLworCUdQSU9fRk5fSTJDX1NDTDRTLAlHUElPX0ZOX0kyQ19TREE0UywKKworCS8qCisJICogS0VZU0MJKFBPUlQgMTIxLCAxMjIsIDEyMywgMTI0LCAxMjUsIDEyNiwgMTI3LCAxMjgsIDEyOSwKKwkgKgkJICAgICAgMTMwLCAxMzEsIDEzMiwgMTMzLCAxMzQsIDEzNSwgMTM2KQorCSAqLworCUdQSU9fRk5fS0VZT1VUMCwJR1BJT19GTl9LRVlJTjBfMTIxLAlHUElPX0ZOX0tFWUlOMF8xMzYsCisJR1BJT19GTl9LRVlPVVQxLAlHUElPX0ZOX0tFWUlOMV8xMjIsCUdQSU9fRk5fS0VZSU4xXzEzNSwKKwlHUElPX0ZOX0tFWU9VVDIsCUdQSU9fRk5fS0VZSU4yXzEyMywJR1BJT19GTl9LRVlJTjJfMTM0LAorCUdQSU9fRk5fS0VZT1VUMywJR1BJT19GTl9LRVlJTjNfMTI0LAlHUElPX0ZOX0tFWUlOM18xMzMsCisJR1BJT19GTl9LRVlPVVQ0LAlHUElPX0ZOX0tFWUlONCwKKwlHUElPX0ZOX0tFWU9VVDUsCUdQSU9fRk5fS0VZSU41LAorCUdQSU9fRk5fS0VZT1VUNiwJR1BJT19GTl9LRVlJTjYsCisJR1BJT19GTl9LRVlPVVQ3LAlHUElPX0ZOX0tFWUlONywKKworCS8qCisJICogTENEQwkJKFBPUlQgICAgICAxMjEsIDEyMiwgMTIzLCAxMjQsIDEyNSwgMTI2LCAxMjcsIDEyOCwgMTI5LAorCSAqCQkgICAgICAxMzAsIDEzMSwgMTMyLCAxMzMsIDEzNCwgMTM1LCAxMzYsIDEzNywgMTM4LCAxMzksCisJICoJCSAgICAgIDE0MCwgMTQxLCAxNDIsIDE0MywgMTQ0LCAxNDUsIDE0NiwgMTQ3LCAxNDgsIDE0OSwKKwkgKgkJICAgICAgMTUwLCAxNTEpCisJICovCisJR1BJT19GTl9MQ0RDMF9TRUxFQ1QsIC8qIExDREMgMCAqLworCUdQSU9fRk5fTENEQzFfU0VMRUNULCAvKiBMQ0RDIDEgKi8KKwlHUElPX0ZOX0xDREhTWU4sCUdQSU9fRk5fTENEQ1MsCUdQSU9fRk5fTENEVlNZTiwKKwlHUElPX0ZOX0xDRERDSywJCUdQSU9fRk5fTENEV1IsCUdQSU9fRk5fTENEUkQsCisJR1BJT19GTl9MQ0RESVNQLAlHUElPX0ZOX0xDRFJTLAlHUElPX0ZOX0xDRExDTEssCisJR1BJT19GTl9MQ0RET04sCisKKwlHUElPX0ZOX0xDREQwLAlHUElPX0ZOX0xDREQxLAlHUElPX0ZOX0xDREQyLAlHUElPX0ZOX0xDREQzLAorCUdQSU9fRk5fTENERDQsCUdQSU9fRk5fTENERDUsCUdQSU9fRk5fTENERDYsCUdQSU9fRk5fTENERDcsCisJR1BJT19GTl9MQ0REOCwJR1BJT19GTl9MQ0REOSwJR1BJT19GTl9MQ0REMTAsCUdQSU9fRk5fTENERDExLAorCUdQSU9fRk5fTENERDEyLAlHUElPX0ZOX0xDREQxMywJR1BJT19GTl9MQ0REMTQsCUdQSU9fRk5fTENERDE1LAorCUdQSU9fRk5fTENERDE2LAlHUElPX0ZOX0xDREQxNywJR1BJT19GTl9MQ0REMTgsCUdQSU9fRk5fTENERDE5LAorCUdQSU9fRk5fTENERDIwLAlHUElPX0ZOX0xDREQyMSwJR1BJT19GTl9MQ0REMjIsCUdQSU9fRk5fTENERDIzLAorCisJLyogSVJEQQkJKFBPUlQgMTM5LCAxNDAsIDE0MSwgMTQyKSAqLworCUdQSU9fRk5fSVJEQV9PVVQsCUdQSU9fRk5fSVJEQV9JTiwJR1BJT19GTl9JUkRBX0ZJUlNFTCwKKwlHUElPX0ZOX0lST1VUXzEzOSwJR1BJT19GTl9JUk9VVF8xNDAsCisKKwkvKiBUU0lGMQkoUE9SVCAxNTYsIDE1NywgMTU4LCAxNTkpICovCisJR1BJT19GTl9UUzBfMVNFTEVDVCwgLyogVFNJRjAgLSAxIHNlbGVjdCAqLworCUdQSU9fRk5fVFMwXzJTRUxFQ1QsIC8qIFRTSUYwIC0gMiBzZWxlY3QgKi8KKwlHUElPX0ZOX1RTMV8xU0VMRUNULCAvKiBUU0lGMSAtIDEgc2VsZWN0ICovCisJR1BJT19GTl9UUzFfMlNFTEVDVCwgLyogVFNJRjEgLSAyIHNlbGVjdCAqLworCisJR1BJT19GTl9UU19TUFNZTkMxLAlHUElPX0ZOX1RTX1NEQVQxLAorCUdQSU9fRk5fVFNfU0RFTjEsCUdQSU9fRk5fVFNfU0NLMSwKKworCS8qIFRTSUYyCShQT1JUIDEzNywgMTQ1LCAxNDYsIDE0NykgKi8KKwlHUElPX0ZOX1RTX1NQU1lOQzIsCUdQSU9fRk5fVFNfU0RBVDIsCisJR1BJT19GTl9UU19TREVOMiwJR1BJT19GTl9UU19TQ0syLAorCisJLyogSERNSQkJKFBPUlQgMTY5LCAxNzApICovCisJR1BJT19GTl9IRE1JX0hQRCwJR1BJT19GTl9IRE1JX0NFQywKKworCS8qIFNESEkwCShQT1JUIDE3MSwgMTcyLCAxNzMsIDE3NCwgMTc1LCAxNzYsIDE3NywgMTc4KSAqLworCUdQSU9fRk5fU0RISUNMSzAsCUdQSU9fRk5fU0RISUNEMCwKKwlHUElPX0ZOX1NESElDTUQwLAlHUElPX0ZOX1NESElXUDAsCisJR1BJT19GTl9TREhJRDBfMCwJR1BJT19GTl9TREhJRDBfMSwKKwlHUElPX0ZOX1NESElEMF8yLAlHUElPX0ZOX1NESElEMF8zLAorCisJLyogU0RISTEJKFBPUlQgMTc5LCAxODAsIDE4MSwgMTgyLCAxODMsIDE4NCkgKi8KKwlHUElPX0ZOX1NESElDTEsxLAlHUElPX0ZOX1NESElDTUQxLAlHUElPX0ZOX1NESElEMV8wLAorCUdQSU9fRk5fU0RISUQxXzEsCUdQSU9fRk5fU0RISUQxXzIsCUdQSU9fRk5fU0RISUQxXzMsCisKKwkvKiBTREhJMgkoUE9SVCAxODUsIDE4NiwgMTg3LCAxODgsIDE4OSwgMTkwKSAqLworCUdQSU9fRk5fU0RISUNMSzIsCUdQSU9fRk5fU0RISUNNRDIsCUdQSU9fRk5fU0RISUQyXzAsCisJR1BJT19GTl9TREhJRDJfMSwJR1BJT19GTl9TREhJRDJfMiwJR1BJT19GTl9TREhJRDJfMywKKworCS8qIFNERU5DCXNlZSBNU0VMNENSIDE5ICovCisJR1BJT19GTl9TREVOQ19DUEcsCisJR1BJT19GTl9TREVOQ19EVl9DTEtJLAorfTsKKworI2VuZGlmIC8qIF9fQVNNX1NINzM3Ml9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3NoNzM3Ny5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvc2g3Mzc3LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU4MGUyMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3NoNzM3Ny5oCkBAIC0wLDAgKzEsMzYwIEBACisjaWZuZGVmIF9fQVNNX1NINzM3N19IX18KKyNkZWZpbmUgX19BU01fU0g3Mzc3X0hfXworCisvKiBQaW4gRnVuY3Rpb24gQ29udHJvbGxlcjoKKyAqIEdQSU9fRk5feHggLSBHUElPIHVzZWQgdG8gc2VsZWN0IHBpbiBmdW5jdGlvbgorICogR1BJT19QT1JUeHggLSBHUElPIG1hcHBlZCB0byByZWFsIEkvTyBwaW4gb24gQ1BVCisgKi8KK2VudW0geworCS8qIDU1LTEgLT4gNTUtNSAoR1BJTykgKi8KKwlHUElPX1BPUlQwLCBHUElPX1BPUlQxLCBHUElPX1BPUlQyLCBHUElPX1BPUlQzLCBHUElPX1BPUlQ0LAorCUdQSU9fUE9SVDUsIEdQSU9fUE9SVDYsIEdQSU9fUE9SVDcsIEdQSU9fUE9SVDgsIEdQSU9fUE9SVDksCisKKwlHUElPX1BPUlQxMCwgR1BJT19QT1JUMTEsIEdQSU9fUE9SVDEyLCBHUElPX1BPUlQxMywgR1BJT19QT1JUMTQsCisJR1BJT19QT1JUMTUsIEdQSU9fUE9SVDE2LCBHUElPX1BPUlQxNywgR1BJT19QT1JUMTgsIEdQSU9fUE9SVDE5LAorCisJR1BJT19QT1JUMjAsIEdQSU9fUE9SVDIxLCBHUElPX1BPUlQyMiwgR1BJT19QT1JUMjMsIEdQSU9fUE9SVDI0LAorCUdQSU9fUE9SVDI1LCBHUElPX1BPUlQyNiwgR1BJT19QT1JUMjcsIEdQSU9fUE9SVDI4LCBHUElPX1BPUlQyOSwKKworCUdQSU9fUE9SVDMwLCBHUElPX1BPUlQzMSwgR1BJT19QT1JUMzIsIEdQSU9fUE9SVDMzLCBHUElPX1BPUlQzNCwKKwlHUElPX1BPUlQzNSwgR1BJT19QT1JUMzYsIEdQSU9fUE9SVDM3LCBHUElPX1BPUlQzOCwgR1BJT19QT1JUMzksCisKKwlHUElPX1BPUlQ0MCwgR1BJT19QT1JUNDEsIEdQSU9fUE9SVDQyLCBHUElPX1BPUlQ0MywgR1BJT19QT1JUNDQsCisJR1BJT19QT1JUNDUsIEdQSU9fUE9SVDQ2LCBHUElPX1BPUlQ0NywgR1BJT19QT1JUNDgsIEdQSU9fUE9SVDQ5LAorCisJR1BJT19QT1JUNTAsIEdQSU9fUE9SVDUxLCBHUElPX1BPUlQ1MiwgR1BJT19QT1JUNTMsIEdQSU9fUE9SVDU0LAorCUdQSU9fUE9SVDU1LCBHUElPX1BPUlQ1NiwgR1BJT19QT1JUNTcsIEdQSU9fUE9SVDU4LCBHUElPX1BPUlQ1OSwKKworCUdQSU9fUE9SVDYwLCBHUElPX1BPUlQ2MSwgR1BJT19QT1JUNjIsIEdQSU9fUE9SVDYzLCBHUElPX1BPUlQ2NCwKKwlHUElPX1BPUlQ2NSwgR1BJT19QT1JUNjYsIEdQSU9fUE9SVDY3LCBHUElPX1BPUlQ2OCwgR1BJT19QT1JUNjksCisKKwlHUElPX1BPUlQ3MCwgR1BJT19QT1JUNzEsIEdQSU9fUE9SVDcyLCBHUElPX1BPUlQ3MywgR1BJT19QT1JUNzQsCisJR1BJT19QT1JUNzUsIEdQSU9fUE9SVDc2LCBHUElPX1BPUlQ3NywgR1BJT19QT1JUNzgsIEdQSU9fUE9SVDc5LAorCisJR1BJT19QT1JUODAsIEdQSU9fUE9SVDgxLCBHUElPX1BPUlQ4MiwgR1BJT19QT1JUODMsIEdQSU9fUE9SVDg0LAorCUdQSU9fUE9SVDg1LCBHUElPX1BPUlQ4NiwgR1BJT19QT1JUODcsIEdQSU9fUE9SVDg4LCBHUElPX1BPUlQ4OSwKKworCUdQSU9fUE9SVDkwLCBHUElPX1BPUlQ5MSwgR1BJT19QT1JUOTIsIEdQSU9fUE9SVDkzLCBHUElPX1BPUlQ5NCwKKwlHUElPX1BPUlQ5NSwgR1BJT19QT1JUOTYsIEdQSU9fUE9SVDk3LCBHUElPX1BPUlQ5OCwgR1BJT19QT1JUOTksCisKKwlHUElPX1BPUlQxMDAsIEdQSU9fUE9SVDEwMSwgR1BJT19QT1JUMTAyLCBHUElPX1BPUlQxMDMsIEdQSU9fUE9SVDEwNCwKKwlHUElPX1BPUlQxMDUsIEdQSU9fUE9SVDEwNiwgR1BJT19QT1JUMTA3LCBHUElPX1BPUlQxMDgsIEdQSU9fUE9SVDEwOSwKKworCUdQSU9fUE9SVDExMCwgR1BJT19QT1JUMTExLCBHUElPX1BPUlQxMTIsIEdQSU9fUE9SVDExMywgR1BJT19QT1JUMTE0LAorCUdQSU9fUE9SVDExNSwgR1BJT19QT1JUMTE2LCBHUElPX1BPUlQxMTcsIEdQSU9fUE9SVDExOCwKKworCUdQSU9fUE9SVDEyOCwgR1BJT19QT1JUMTI5LAorCisJR1BJT19QT1JUMTMwLCBHUElPX1BPUlQxMzEsIEdQSU9fUE9SVDEzMiwgR1BJT19QT1JUMTMzLCBHUElPX1BPUlQxMzQsCisJR1BJT19QT1JUMTM1LCBHUElPX1BPUlQxMzYsIEdQSU9fUE9SVDEzNywgR1BJT19QT1JUMTM4LCBHUElPX1BPUlQxMzksCisKKwlHUElPX1BPUlQxNDAsIEdQSU9fUE9SVDE0MSwgR1BJT19QT1JUMTQyLCBHUElPX1BPUlQxNDMsIEdQSU9fUE9SVDE0NCwKKwlHUElPX1BPUlQxNDUsIEdQSU9fUE9SVDE0NiwgR1BJT19QT1JUMTQ3LCBHUElPX1BPUlQxNDgsIEdQSU9fUE9SVDE0OSwKKworCUdQSU9fUE9SVDE1MCwgR1BJT19QT1JUMTUxLCBHUElPX1BPUlQxNTIsIEdQSU9fUE9SVDE1MywgR1BJT19QT1JUMTU0LAorCUdQSU9fUE9SVDE1NSwgR1BJT19QT1JUMTU2LCBHUElPX1BPUlQxNTcsIEdQSU9fUE9SVDE1OCwgR1BJT19QT1JUMTU5LAorCisJR1BJT19QT1JUMTYwLCBHUElPX1BPUlQxNjEsIEdQSU9fUE9SVDE2MiwgR1BJT19QT1JUMTYzLCBHUElPX1BPUlQxNjQsCisKKwlHUElPX1BPUlQxOTIsIEdQSU9fUE9SVDE5MywgR1BJT19QT1JUMTk0LAorCUdQSU9fUE9SVDE5NSwgR1BJT19QT1JUMTk2LCBHUElPX1BPUlQxOTcsIEdQSU9fUE9SVDE5OCwgR1BJT19QT1JUMTk5LAorCisJR1BJT19QT1JUMjAwLCBHUElPX1BPUlQyMDEsIEdQSU9fUE9SVDIwMiwgR1BJT19QT1JUMjAzLCBHUElPX1BPUlQyMDQsCisJR1BJT19QT1JUMjA1LCBHUElPX1BPUlQyMDYsIEdQSU9fUE9SVDIwNywgR1BJT19QT1JUMjA4LCBHUElPX1BPUlQyMDksCisKKwlHUElPX1BPUlQyMTAsIEdQSU9fUE9SVDIxMSwgR1BJT19QT1JUMjEyLCBHUElPX1BPUlQyMTMsIEdQSU9fUE9SVDIxNCwKKwlHUElPX1BPUlQyMTUsIEdQSU9fUE9SVDIxNiwgR1BJT19QT1JUMjE3LCBHUElPX1BPUlQyMTgsIEdQSU9fUE9SVDIxOSwKKworCUdQSU9fUE9SVDIyMCwgR1BJT19QT1JUMjIxLCBHUElPX1BPUlQyMjIsIEdQSU9fUE9SVDIyMywgR1BJT19QT1JUMjI0LAorCUdQSU9fUE9SVDIyNSwgR1BJT19QT1JUMjI2LCBHUElPX1BPUlQyMjcsIEdQSU9fUE9SVDIyOCwgR1BJT19QT1JUMjI5LAorCisJR1BJT19QT1JUMjMwLCBHUElPX1BPUlQyMzEsIEdQSU9fUE9SVDIzMiwgR1BJT19QT1JUMjMzLCBHUElPX1BPUlQyMzQsCisJR1BJT19QT1JUMjM1LCBHUElPX1BPUlQyMzYsIEdQSU9fUE9SVDIzNywgR1BJT19QT1JUMjM4LCBHUElPX1BPUlQyMzksCisKKwlHUElPX1BPUlQyNDAsIEdQSU9fUE9SVDI0MSwgR1BJT19QT1JUMjQyLCBHUElPX1BPUlQyNDMsIEdQSU9fUE9SVDI0NCwKKwlHUElPX1BPUlQyNDUsIEdQSU9fUE9SVDI0NiwgR1BJT19QT1JUMjQ3LCBHUElPX1BPUlQyNDgsIEdQSU9fUE9SVDI0OSwKKworCUdQSU9fUE9SVDI1MCwgR1BJT19QT1JUMjUxLCBHUElPX1BPUlQyNTIsIEdQSU9fUE9SVDI1MywgR1BJT19QT1JUMjU0LAorCUdQSU9fUE9SVDI1NSwgR1BJT19QT1JUMjU2LCBHUElPX1BPUlQyNTcsIEdQSU9fUE9SVDI1OCwgR1BJT19QT1JUMjU5LAorCisJR1BJT19QT1JUMjYwLCBHUElPX1BPUlQyNjEsIEdQSU9fUE9SVDI2MiwgR1BJT19QT1JUMjYzLCBHUElPX1BPUlQyNjQsCisKKwkvKiBTcGVjaWFsIFB1bGwtdXAgLyBQdWxsLWRvd24gRnVuY3Rpb25zICovCisJR1BJT19GTl9QT1JUNjZfS0VZSU4wX1BVLCBHUElPX0ZOX1BPUlQ2N19LRVlJTjFfUFUsCisJR1BJT19GTl9QT1JUNjhfS0VZSU4yX1BVLCBHUElPX0ZOX1BPUlQ2OV9LRVlJTjNfUFUsCisJR1BJT19GTl9QT1JUNzBfS0VZSU40X1BVLCBHUElPX0ZOX1BPUlQ3MV9LRVlJTjVfUFUsCisJR1BJT19GTl9QT1JUNzJfS0VZSU42X1BVLAorCisJLyogNTUtMSAoRk4pICovCisJR1BJT19GTl9WQlVTXzAsCisJR1BJT19GTl9DUE9SVDAsCisJR1BJT19GTl9DUE9SVDEsCisJR1BJT19GTl9DUE9SVDIsCisJR1BJT19GTl9DUE9SVDMsCisJR1BJT19GTl9DUE9SVDQsCisJR1BJT19GTl9DUE9SVDUsCisJR1BJT19GTl9DUE9SVDYsCisJR1BJT19GTl9DUE9SVDcsCisJR1BJT19GTl9DUE9SVDgsCisJR1BJT19GTl9DUE9SVDksCisJR1BJT19GTl9DUE9SVDEwLAorCUdQSU9fRk5fQ1BPUlQxMSwgR1BJT19GTl9TSU4yLAorCUdQSU9fRk5fQ1BPUlQxMiwgR1BJT19GTl9YQ1RTMiwKKwlHUElPX0ZOX0NQT1JUMTMsIEdQSU9fRk5fUkZTUE80LAorCUdQSU9fRk5fQ1BPUlQxNCwgR1BJT19GTl9SRlNQTzUsCisJR1BJT19GTl9DUE9SVDE1LCBHUElPX0ZOX1NDSUZBMF9TQ0ssIEdQSU9fRk5fR1BTX0FHQzIsCisJR1BJT19GTl9DUE9SVDE2LCBHUElPX0ZOX1NDSUZBMF9UWEQsIEdQSU9fRk5fR1BTX0FHQzMsCisJR1BJT19GTl9DUE9SVDE3X0lDX09FLCBHUElPX0ZOX1NPVVQyLAorCUdQSU9fRk5fQ1BPUlQxOCwgR1BJT19GTl9YUlRTMiwgR1BJT19GTl9QT1JUMTlfVklPX0NLTzIsCisJR1BJT19GTl9DUE9SVDE5X01QT1JUMSwKKwlHUElPX0ZOX0NQT1JUMjAsIEdQSU9fRk5fUkZTUE82LAorCUdQSU9fRk5fQ1BPUlQyMSwgR1BJT19GTl9TVEFUVVMwLAorCUdQSU9fRk5fQ1BPUlQyMiwgR1BJT19GTl9TVEFUVVMxLAorCUdQSU9fRk5fQ1BPUlQyMywgR1BJT19GTl9TVEFUVVMyLCBHUElPX0ZOX1JGU1BPNywKKwlHUElPX0ZOX0JfU1lOTEQxLAorCUdQSU9fRk5fQl9TWU5MRDIsIEdQSU9fRk5fU1lTRU5NU0ssCisJR1BJT19GTl9YTUFJTlBTLAorCUdQSU9fRk5fWERJVlBTLAorCUdQSU9fRk5fWElEUlNULAorCUdQSU9fRk5fSURDTEssIEdQSU9fRk5fSUNfRFAsCisJR1BJT19GTl9JRElPLCBHUElPX0ZOX0lDX0RNLAorCUdQSU9fRk5fU09VVDEsIEdQSU9fRk5fU0NJRkE0X1RYRCwgR1BJT19GTl9NMDJfQkVSREFULAorCUdQSU9fRk5fU0lOMSwgR1BJT19GTl9TQ0lGQTRfUlhELCBHUElPX0ZOX1hXVVAsCisJR1BJT19GTl9YUlRTMSwgR1BJT19GTl9TQ0lGQTRfUlRTLCBHUElPX0ZOX00wM19CRVJDTEssCisJR1BJT19GTl9YQ1RTMSwgR1BJT19GTl9TQ0lGQTRfQ1RTLAorCUdQSU9fRk5fUENNQ0xLTywKKwlHUElPX0ZOX1NZTkM4S08sCisKKwkvKiA1NS0yIChGTikgKi8KKwlHUElPX0ZOX0ROUENNX0EsCisJR1BJT19GTl9VUFBDTV9BLAorCUdQSU9fRk5fVkFDSywKKwlHUElPX0ZOX1hUQUxCMUwsCisJR1BJT19GTl9HUFNfQUdDMSwgR1BJT19GTl9TQ0lGQTBfUlRTLAorCUdQSU9fRk5fR1BTX0FHQzQsIEdQSU9fRk5fU0NJRkEwX1JYRCwKKwlHUElPX0ZOX0dQU19QV1JET1dOLCBHUElPX0ZOX1NDSUZBMF9DVFMsCisJR1BJT19GTl9HUFNfSU0sCisJR1BJT19GTl9HUFNfSVMsCisJR1BJT19GTl9HUFNfUU0sCisJR1BJT19GTl9HUFNfUVMsCisJR1BJT19GTl9GTVNPQ0ssIEdQSU9fRk5fUE9SVDQ5X0lSREFfT1VULCBHUElPX0ZOX1BPUlQ0OV9JUk9VVCwKKwlHUElPX0ZOX0ZNU09PTFIsIEdQSU9fRk5fQkJJRjJfVFNZTkMyLCBHUElPX0ZOX1RQVTJUTzIsIEdQSU9fRk5fSVBPUlQzLAorCUdQSU9fRk5fRk1TSU9MUiwKKwlHUElPX0ZOX0ZNU09PQlQsIEdQSU9fRk5fQkJJRjJfVFNDSzIsIEdQSU9fRk5fVFBVMlRPMywgR1BJT19GTl9PUE9SVDEsCisJR1BJT19GTl9GTVNJT0JULAorCUdQSU9fRk5fRk1TT1NMRCwgR1BJT19GTl9CQklGMl9UWEQyLCBHUElPX0ZOX09QT1JUMiwKKwlHUElPX0ZOX0ZNU09JTFIsIEdQSU9fRk5fUE9SVDUzX0lSREFfSU4sIEdQSU9fRk5fVFBVM1RPMywKKwlHUElPX0ZOX09QT1JUMywgR1BJT19GTl9GTVNJSUxSLAorCUdQSU9fRk5fRk1TT0lCVCwgR1BJT19GTl9QT1JUNTRfSVJEQV9GSVJTRUwsIEdQSU9fRk5fVFBVM1RPMiwKKwlHUElPX0ZOX0ZNU0lJQlQsCisJR1BJT19GTl9GTVNJU0xELCBHUElPX0ZOX01GRzBfT1VUMSwgR1BJT19GTl9UUFUwVE8wLAorCUdQSU9fRk5fQTBfRUEwLCBHUElPX0ZOX0JTLAorCUdQSU9fRk5fQTEyX0VBMTIsIEdQSU9fRk5fUE9SVDU4X1ZJT19DS09SLCBHUElPX0ZOX1RQVTRUTzIsCisJR1BJT19GTl9BMTNfRUExMywgR1BJT19GTl9QT1JUNTlfSVJPVVQsIEdQSU9fRk5fTUZHMF9PVVQyLAorCUdQSU9fRk5fVFBVMFRPMSwKKwlHUElPX0ZOX0ExNF9FQTE0LCBHUElPX0ZOX1BPUlQ2MF9LRVlPVVQ1LAorCUdQSU9fRk5fQTE1X0VBMTUsIEdQSU9fRk5fUE9SVDYxX0tFWU9VVDQsCisJR1BJT19GTl9BMTZfRUExNiwgR1BJT19GTl9QT1JUNjJfS0VZT1VUMywgR1BJT19GTl9NU0lPRjBfU1MxLAorCUdQSU9fRk5fQTE3X0VBMTcsIEdQSU9fRk5fUE9SVDYzX0tFWU9VVDIsIEdQSU9fRk5fTVNJT0YwX1RTWU5DLAorCUdQSU9fRk5fQTE4X0VBMTgsIEdQSU9fRk5fUE9SVDY0X0tFWU9VVDEsIEdQSU9fRk5fTVNJT0YwX1RTQ0ssCisJR1BJT19GTl9BMTlfRUExOSwgR1BJT19GTl9QT1JUNjVfS0VZT1VUMCwgR1BJT19GTl9NU0lPRjBfVFhELAorCUdQSU9fRk5fQTIwX0VBMjAsIEdQSU9fRk5fUE9SVDY2X0tFWUlOMCwgR1BJT19GTl9NU0lPRjBfUlNDSywKKwlHUElPX0ZOX0EyMV9FQTIxLCBHUElPX0ZOX1BPUlQ2N19LRVlJTjEsIEdQSU9fRk5fTVNJT0YwX1JTWU5DLAorCUdQSU9fRk5fQTIyX0VBMjIsIEdQSU9fRk5fUE9SVDY4X0tFWUlOMiwgR1BJT19GTl9NU0lPRjBfTUNLMCwKKwlHUElPX0ZOX0EyM19FQTIzLCBHUElPX0ZOX1BPUlQ2OV9LRVlJTjMsIEdQSU9fRk5fTVNJT0YwX01DSzEsCisJR1BJT19GTl9BMjRfRUEyNCwgR1BJT19GTl9QT1JUNzBfS0VZSU40LCBHUElPX0ZOX01TSU9GMF9SWEQsCisJR1BJT19GTl9BMjVfRUEyNSwgR1BJT19GTl9QT1JUNzFfS0VZSU41LCBHUElPX0ZOX01TSU9GMF9TUzIsCisJR1BJT19GTl9BMjYsIEdQSU9fRk5fUE9SVDcyX0tFWUlONiwKKwlHUElPX0ZOX0QwX0VEMF9OQUYwLAorCUdQSU9fRk5fRDFfRUQxX05BRjEsCisJR1BJT19GTl9EMl9FRDJfTkFGMiwKKwlHUElPX0ZOX0QzX0VEM19OQUYzLAorCUdQSU9fRk5fRDRfRUQ0X05BRjQsCisJR1BJT19GTl9ENV9FRDVfTkFGNSwKKwlHUElPX0ZOX0Q2X0VENl9OQUY2LAorCUdQSU9fRk5fRDdfRUQ3X05BRjcsCisJR1BJT19GTl9EOF9FRDhfTkFGOCwKKwlHUElPX0ZOX0Q5X0VEOV9OQUY5LAorCUdQSU9fRk5fRDEwX0VEMTBfTkFGMTAsCisJR1BJT19GTl9EMTFfRUQxMV9OQUYxMSwKKwlHUElPX0ZOX0QxMl9FRDEyX05BRjEyLAorCUdQSU9fRk5fRDEzX0VEMTNfTkFGMTMsCisJR1BJT19GTl9EMTRfRUQxNF9OQUYxNCwKKwlHUElPX0ZOX0QxNV9FRDE1X05BRjE1LAorCUdQSU9fRk5fQ1M0LAorCUdQSU9fRk5fQ1M1QSwgR1BJT19GTl9GTVNJQ0ssCisJR1BJT19GTl9DUzVCLCBHUElPX0ZOX0ZDRTEsCisKKwkvKiA1NS0zIChGTikgKi8KKwlHUElPX0ZOX0NTNkIsIEdQSU9fRk5fWENTMiwgR1BJT19GTl9DUzZBLCBHUElPX0ZOX0RBQ0swLAorCUdQSU9fRk5fRkNFMCwKKwlHUElPX0ZOX1dBSVQsIEdQSU9fRk5fRFJFUTAsCisJR1BJT19GTl9SRF9YUkQsCisJR1BJT19GTl9XRTBfWFdSMF9GV0UsCisJR1BJT19GTl9XRTFfWFdSMSwKKwlHUElPX0ZOX0ZSQiwKKwlHUElPX0ZOX0NLTywKKwlHUElPX0ZOX05CUlNUT1VULAorCUdQSU9fRk5fTkJSU1QsCisJR1BJT19GTl9HUFNfRVBQU0lOLAorCUdQSU9fRk5fTEFUQ0hQVUxTRSwKKwlHUElPX0ZOX0xURVNJR05BTCwKKwlHUElPX0ZOX0xFR0FDWVNUQVRFLAorCUdQSU9fRk5fVENLT04sCisJR1BJT19GTl9WSU9fVkQsIEdQSU9fRk5fUE9SVDEyOF9LRVlPVVQwLCBHUElPX0ZOX0lQT1JUMCwKKwlHUElPX0ZOX1ZJT19IRCwgR1BJT19GTl9QT1JUMTI5X0tFWU9VVDEsIEdQSU9fRk5fSVBPUlQxLAorCUdQSU9fRk5fVklPX0QwLCBHUElPX0ZOX1BPUlQxMzBfS0VZT1VUMiwgR1BJT19GTl9QT1JUMTMwX01TSU9GMl9SWEQsCisJR1BJT19GTl9WSU9fRDEsIEdQSU9fRk5fUE9SVDEzMV9LRVlPVVQzLCBHUElPX0ZOX1BPUlQxMzFfTVNJT0YyX1NTMSwKKwlHUElPX0ZOX1ZJT19EMiwgR1BJT19GTl9QT1JUMTMyX0tFWU9VVDQsIEdQSU9fRk5fUE9SVDEzMl9NU0lPRjJfU1MyLAorCUdQSU9fRk5fVklPX0QzLCBHUElPX0ZOX1BPUlQxMzNfS0VZT1VUNSwgR1BJT19GTl9QT1JUMTMzX01TSU9GMl9UU1lOQywKKwlHUElPX0ZOX1ZJT19ENCwgR1BJT19GTl9QT1JUMTM0X0tFWUlOMCwgR1BJT19GTl9QT1JUMTM0X01TSU9GMl9UWEQsCisJR1BJT19GTl9WSU9fRDUsIEdQSU9fRk5fUE9SVDEzNV9LRVlJTjEsIEdQSU9fRk5fUE9SVDEzNV9NU0lPRjJfVFNDSywKKwlHUElPX0ZOX1ZJT19ENiwgR1BJT19GTl9QT1JUMTM2X0tFWUlOMiwKKwlHUElPX0ZOX1ZJT19ENywgR1BJT19GTl9QT1JUMTM3X0tFWUlOMywKKwlHUElPX0ZOX1ZJT19EOCwgR1BJT19GTl9NOV9TTENEX0EwMSwgR1BJT19GTl9QT1JUMTM4X0ZTSUFPTUMsCisJR1BJT19GTl9WSU9fRDksIEdQSU9fRk5fTTEwX1NMQ0RfQ0sxLCBHUElPX0ZOX1BPUlQxMzlfRlNJQU9MUiwKKwlHUElPX0ZOX1ZJT19EMTAsIEdQSU9fRk5fTTExX1NMQ0RfU08xLCBHUElPX0ZOX1RQVTBUTzIsCisJR1BJT19GTl9QT1JUMTQwX0ZTSUFPQlQsCisJR1BJT19GTl9WSU9fRDExLCBHUElPX0ZOX00xMl9TTENEX0NFMSwgR1BJT19GTl9UUFUwVE8zLAorCUdQSU9fRk5fUE9SVDE0MV9GU0lBT1NMRCwKKwlHUElPX0ZOX1ZJT19EMTIsIEdQSU9fRk5fTTEzX0JTVywgR1BJT19GTl9QT1JUMTQyX0ZTSUFDSywKKwlHUElPX0ZOX1ZJT19EMTMsIEdQSU9fRk5fTTE0X0dTVywgR1BJT19GTl9QT1JUMTQzX0ZTSUFJTFIsCisJR1BJT19GTl9WSU9fRDE0LCBHUElPX0ZOX00xNV9SU1csIEdQSU9fRk5fUE9SVDE0NF9GU0lBSUJULAorCUdQSU9fRk5fVklPX0QxNSwgR1BJT19GTl9UUFUxVE8zLCBHUElPX0ZOX1BPUlQxNDVfRlNJQUlTTEQsCisJR1BJT19GTl9WSU9fQ0xLLCBHUElPX0ZOX1BPUlQxNDZfS0VZSU40LCBHUElPX0ZOX0lQT1JUMiwKKwlHUElPX0ZOX1ZJT19GSUVMRCwgR1BJT19GTl9QT1JUMTQ3X0tFWUlONSwKKwlHUElPX0ZOX1ZJT19DS08sIEdQSU9fRk5fUE9SVDE0OF9LRVlJTjYsCisJR1BJT19GTl9BMjcsIEdQSU9fRk5fUkRXUl9YV0UsIEdQSU9fRk5fTUZHMF9JTjEsCisJR1BJT19GTl9NRkcwX0lOMiwKKwlHUElPX0ZOX1RTX1NQU1lOQzMsIEdQSU9fRk5fTVNJT0YyX1JTQ0ssCisJR1BJT19GTl9UU19TREFUMywgR1BJT19GTl9NU0lPRjJfUlNZTkMsCisJR1BJT19GTl9UUFUxVE8yLCBHUElPX0ZOX1RTX1NERU4zLCBHUElPX0ZOX1BPUlQxNTNfTVNJT0YyX1NTMSwKKwlHUElPX0ZOX1NPVVQzLCBHUElPX0ZOX1NDSUZBMl9UWEQxLCBHUElPX0ZOX01TSU9GMl9NQ0swLAorCUdQSU9fRk5fU0lOMywgR1BJT19GTl9TQ0lGQTJfUlhEMSwgR1BJT19GTl9NU0lPRjJfTUNLMSwKKwlHUElPX0ZOX1hSVFMzLCBHUElPX0ZOX1NDSUZBMl9SVFMxLCBHUElPX0ZOX1BPUlQxNTZfTVNJT0YyX1NTMiwKKwlHUElPX0ZOX1hDVFMzLCBHUElPX0ZOX1NDSUZBMl9DVFMxLCBHUElPX0ZOX1BPUlQxNTdfTVNJT0YyX1JYRCwKKworCS8qIDU1LTQgKEZOKSAqLworCUdQSU9fRk5fRElOVCwgR1BJT19GTl9TQ0lGQTJfU0NLMSwgR1BJT19GTl9UU19TQ0szLAorCUdQSU9fRk5fUE9SVDE1OV9TQ0lGQl9TQ0ssIEdQSU9fRk5fUE9SVDE1OV9TQ0lGQTVfU0NLLCBHUElPX0ZOX05NSSwKKwlHUElPX0ZOX1BPUlQxNjBfU0NJRkJfVFhELCBHUElPX0ZOX1BPUlQxNjBfU0NJRkE1X1RYRCwgR1BJT19GTl9TT1VUMCwKKwlHUElPX0ZOX1BPUlQxNjFfU0NJRkJfQ1RTLCBHUElPX0ZOX1BPUlQxNjFfU0NJRkE1X0NUUywgR1BJT19GTl9YQ1RTMCwKKwlHUElPX0ZOX01GRzNfSU4yLAorCUdQSU9fRk5fUE9SVDE2Ml9TQ0lGQl9SWEQsIEdQSU9fRk5fUE9SVDE2Ml9TQ0lGQTVfUlhELCBHUElPX0ZOX1NJTjAsCisJR1BJT19GTl9NRkczX0lOMSwKKwlHUElPX0ZOX1BPUlQxNjNfU0NJRkJfUlRTLCBHUElPX0ZOX1BPUlQxNjNfU0NJRkE1X1JUUywgR1BJT19GTl9YUlRTMCwKKwlHUElPX0ZOX01GRzNfT1VUMSwKKwlHUElPX0ZOX1RQVTNUTzAsCisJR1BJT19GTl9MQ0REMCwgR1BJT19GTl9QT1JUMTkyX0tFWU9VVDAsIEdQSU9fRk5fRVhUX0NLSSwKKwlHUElPX0ZOX0xDREQxLCBHUElPX0ZOX1BPUlQxOTNfS0VZT1VUMSwgR1BJT19GTl9QT1JUMTkzX1NDSUZBNV9DVFMsCisJR1BJT19GTl9CQklGMl9UU1lOQzEsCisJR1BJT19GTl9MQ0REMiwgR1BJT19GTl9QT1JUMTk0X0tFWU9VVDIsIEdQSU9fRk5fUE9SVDE5NF9TQ0lGQTVfUlRTLAorCUdQSU9fRk5fQkJJRjJfVFNDSzEsCisJR1BJT19GTl9MQ0REMywgR1BJT19GTl9QT1JUMTk1X0tFWU9VVDMsIEdQSU9fRk5fUE9SVDE5NV9TQ0lGQTVfUlhELAorCUdQSU9fRk5fQkJJRjJfVFhEMSwKKwlHUElPX0ZOX0xDREQ0LCBHUElPX0ZOX1BPUlQxOTZfS0VZT1VUNCwgR1BJT19GTl9QT1JUMTk2X1NDSUZBNV9UWEQsCisJR1BJT19GTl9MQ0RENSwgR1BJT19GTl9QT1JUMTk3X0tFWU9VVDUsIEdQSU9fRk5fUE9SVDE5N19TQ0lGQTVfU0NLLAorCUdQSU9fRk5fTUZHMl9PVVQyLCBHUElPX0ZOX1RQVTJUTzEsCisJR1BJT19GTl9MQ0RENiwgR1BJT19GTl9YV1IyLAorCUdQSU9fRk5fTENERDcsIEdQSU9fRk5fVFBVNFRPMSwgR1BJT19GTl9NRkc0X09VVDIsIEdQSU9fRk5fWFdSMywKKwlHUElPX0ZOX0xDREQ4LCBHUElPX0ZOX1BPUlQyMDBfS0VZSU4wLCBHUElPX0ZOX1ZJT19EUjAsIEdQSU9fRk5fRDE2LAorCUdQSU9fRk5fRUQxNiwKKwlHUElPX0ZOX0xDREQ5LCBHUElPX0ZOX1BPUlQyMDFfS0VZSU4xLCBHUElPX0ZOX1ZJT19EUjEsIEdQSU9fRk5fRDE3LAorCUdQSU9fRk5fRUQxNywKKwlHUElPX0ZOX0xDREQxMCwgR1BJT19GTl9QT1JUMjAyX0tFWUlOMiwgR1BJT19GTl9WSU9fRFIyLCBHUElPX0ZOX0QxOCwKKwlHUElPX0ZOX0VEMTgsCisJR1BJT19GTl9MQ0REMTEsIEdQSU9fRk5fUE9SVDIwM19LRVlJTjMsIEdQSU9fRk5fVklPX0RSMywgR1BJT19GTl9EMTksCisJR1BJT19GTl9FRDE5LAorCUdQSU9fRk5fTENERDEyLCBHUElPX0ZOX1BPUlQyMDRfS0VZSU40LCBHUElPX0ZOX1ZJT19EUjQsIEdQSU9fRk5fRDIwLAorCUdQSU9fRk5fRUQyMCwKKwlHUElPX0ZOX0xDREQxMywgR1BJT19GTl9QT1JUMjA1X0tFWUlONSwgR1BJT19GTl9WSU9fRFI1LCBHUElPX0ZOX0QyMSwKKwlHUElPX0ZOX0VEMjEsCisJR1BJT19GTl9MQ0REMTQsIEdQSU9fRk5fUE9SVDIwNl9LRVlJTjYsIEdQSU9fRk5fVklPX0RSNiwgR1BJT19GTl9EMjIsCisJR1BJT19GTl9FRDIyLAorCUdQSU9fRk5fTENERDE1LCBHUElPX0ZOX1BPUlQyMDdfTVNJT0YwTF9TUzEsIEdQSU9fRk5fUE9SVDIwN19LRVlPVVQwLAorCUdQSU9fRk5fVklPX0RSNywKKwlHUElPX0ZOX0QyMywgR1BJT19GTl9FRDIzLAorCUdQSU9fRk5fTENERDE2LCBHUElPX0ZOX1BPUlQyMDhfTVNJT0YwTF9TUzIsIEdQSU9fRk5fUE9SVDIwOF9LRVlPVVQxLAorCUdQSU9fRk5fVklPX1ZEUiwKKwlHUElPX0ZOX0QyNCwgR1BJT19GTl9FRDI0LAorCUdQSU9fRk5fTENERDE3LCBHUElPX0ZOX1BPUlQyMDlfS0VZT1VUMiwgR1BJT19GTl9WSU9fSERSLCBHUElPX0ZOX0QyNSwKKwlHUElPX0ZOX0VEMjUsCisJR1BJT19GTl9MQ0REMTgsIEdQSU9fRk5fRFJFUTIsIEdQSU9fRk5fUE9SVDIxMF9NU0lPRjBMX1NTMSwgR1BJT19GTl9EMjYsCisJR1BJT19GTl9FRDI2LAorCUdQSU9fRk5fTENERDE5LCBHUElPX0ZOX1BPUlQyMTFfTVNJT0YwTF9TUzIsIEdQSU9fRk5fRDI3LCBHUElPX0ZOX0VEMjcsCisJR1BJT19GTl9MQ0REMjAsIEdQSU9fRk5fVFNfU1BTWU5DMSwgR1BJT19GTl9NU0lPRjBMX01DSzAsIEdQSU9fRk5fRDI4LAorCUdQSU9fRk5fRUQyOCwKKwlHUElPX0ZOX0xDREQyMSwgR1BJT19GTl9UU19TREFUMSwgR1BJT19GTl9NU0lPRjBMX01DSzEsIEdQSU9fRk5fRDI5LAorCUdQSU9fRk5fRUQyOSwKKwlHUElPX0ZOX0xDREQyMiwgR1BJT19GTl9UU19TREVOMSwgR1BJT19GTl9NU0lPRjBMX1JTQ0ssIEdQSU9fRk5fRDMwLAorCUdQSU9fRk5fRUQzMCwKKwlHUElPX0ZOX0xDREQyMywgR1BJT19GTl9UU19TQ0sxLCBHUElPX0ZOX01TSU9GMExfUlNZTkMsIEdQSU9fRk5fRDMxLAorCUdQSU9fRk5fRUQzMSwKKwlHUElPX0ZOX0xDRERDSywgR1BJT19GTl9MQ0RXUiwgR1BJT19GTl9QT1JUMjE2X0tFWU9VVDMsCisJR1BJT19GTl9WSU9fQ0xLUiwKKwlHUElPX0ZOX0xDRFJELCBHUElPX0ZOX0RBQ0syLCBHUElPX0ZOX01TSU9GMExfVFNZTkMsCisJR1BJT19GTl9MQ0RIU1lOLCBHUElPX0ZOX0xDRENTLCBHUElPX0ZOX0xDRENTMiwgR1BJT19GTl9EQUNLMywKKwlHUElPX0ZOX1BPUlQyMThfVklPX0NLT1IsIEdQSU9fRk5fUE9SVDIxOF9LRVlPVVQ0LAorCUdQSU9fRk5fTENERElTUCwgR1BJT19GTl9MQ0RSUywgR1BJT19GTl9EUkVRMywgR1BJT19GTl9NU0lPRjBMX1RTQ0ssCisJR1BJT19GTl9MQ0RWU1lOLCBHUElPX0ZOX0xDRFZTWU4yLCBHUElPX0ZOX1BPUlQyMjBfS0VZT1VUNSwKKwlHUElPX0ZOX0xDRExDTEssIEdQSU9fRk5fRFJFUTEsIEdQSU9fRk5fUFdFTiwgR1BJT19GTl9NU0lPRjBMX1JYRCwKKwlHUElPX0ZOX0xDRERPTiwgR1BJT19GTl9MQ0RET04yLCBHUElPX0ZOX0RBQ0sxLCBHUElPX0ZOX09WQ04sCisJR1BJT19GTl9NU0lPRjBMX1RYRCwKKwlHUElPX0ZOX1NDSUZBMV9UWEQsIEdQSU9fRk5fT1ZDTjIsCisJR1BJT19GTl9FWFRMUCwgR1BJT19GTl9TQ0lGQTFfU0NLLCBHUElPX0ZOX1VTQlRFUk0sCisJR1BJT19GTl9QT1JUMjI2X1ZJT19DS08yLAorCUdQSU9fRk5fU0NJRkExX1JUUywgR1BJT19GTl9JRElOLAorCUdQSU9fRk5fU0NJRkExX1JYRCwKKwlHUElPX0ZOX1NDSUZBMV9DVFMsIEdQSU9fRk5fTUZHMV9JTjEsCisJR1BJT19GTl9NU0lPRjFfVFhELCBHUElPX0ZOX1NDSUZBMl9UWEQyLCBHUElPX0ZOX1BPUlQyMzBfRlNJQU9NQywKKwlHUElPX0ZOX01TSU9GMV9UU1lOQywgR1BJT19GTl9TQ0lGQTJfQ1RTMiwgR1BJT19GTl9QT1JUMjMxX0ZTSUFPTFIsCisJR1BJT19GTl9NU0lPRjFfVFNDSywgR1BJT19GTl9TQ0lGQTJfU0NLMiwgR1BJT19GTl9QT1JUMjMyX0ZTSUFPQlQsCisJR1BJT19GTl9NU0lPRjFfUlhELCBHUElPX0ZOX1NDSUZBMl9SWEQyLCBHUElPX0ZOX0dQU19WQ09UUklHLAorCUdQSU9fRk5fUE9SVDIzM19GU0lBQ0ssCisJR1BJT19GTl9NU0lPRjFfUlNDSywgR1BJT19GTl9TQ0lGQTJfUlRTMiwgR1BJT19GTl9QT1JUMjM0X0ZTSUFPU0xELAorCUdQSU9fRk5fTVNJT0YxX1JTWU5DLCBHUElPX0ZOX09QT1JUMCwgR1BJT19GTl9NRkcxX0lOMiwKKwlHUElPX0ZOX1BPUlQyMzVfRlNJQUlMUiwKKwlHUElPX0ZOX01TSU9GMV9NQ0swLCBHUElPX0ZOX0kyQ19TREEyLCBHUElPX0ZOX1BPUlQyMzZfRlNJQUlCVCwKKwlHUElPX0ZOX01TSU9GMV9NQ0sxLCBHUElPX0ZOX0kyQ19TQ0wyLCBHUElPX0ZOX1BPUlQyMzdfRlNJQUlTTEQsCisJR1BJT19GTl9NU0lPRjFfU1MxLCBHUElPX0ZOX0VEQkdSRVEzLAorCisJLyogNTUtNSAoRk4pICovCisJR1BJT19GTl9NU0lPRjFfU1MyLAorCUdQSU9fRk5fU0NJRkE2X1RYRCwKKwlHUElPX0ZOX1BPUlQyNDFfSVJEQV9PVVQsIEdQSU9fRk5fUE9SVDI0MV9JUk9VVCwgR1BJT19GTl9NRkc0X09VVDEsCisJR1BJT19GTl9UUFU0VE8wLAorCUdQSU9fRk5fUE9SVDI0Ml9JUkRBX0lOLCBHUElPX0ZOX01GRzRfSU4yLAorCUdQSU9fRk5fUE9SVDI0M19JUkRBX0ZJUlNFTCwgR1BJT19GTl9QT1JUMjQzX1ZJT19DS08yLAorCUdQSU9fRk5fUE9SVDI0NF9TQ0lGQTVfQ1RTLCBHUElPX0ZOX01GRzJfSU4xLCBHUElPX0ZOX1BPUlQyNDRfU0NJRkJfQ1RTLAorCUdQSU9fRk5fUE9SVDI0NF9NU0lPRjJfUlhELAorCUdQSU9fRk5fUE9SVDI0NV9TQ0lGQTVfUlRTLCBHUElPX0ZOX01GRzJfSU4yLCBHUElPX0ZOX1BPUlQyNDVfU0NJRkJfUlRTLAorCUdQSU9fRk5fUE9SVDI0NV9NU0lPRjJfVFhELAorCUdQSU9fRk5fUE9SVDI0Nl9TQ0lGQTVfUlhELCBHUElPX0ZOX01GRzFfT1VUMSwKKwlHUElPX0ZOX1BPUlQyNDZfU0NJRkJfUlhELCBHUElPX0ZOX1RQVTFUTzAsCisJR1BJT19GTl9QT1JUMjQ3X1NDSUZBNV9UWEQsIEdQSU9fRk5fTUZHM19PVVQyLAorCUdQSU9fRk5fUE9SVDI0N19TQ0lGQl9UWEQsIEdQSU9fRk5fVFBVM1RPMSwKKwlHUElPX0ZOX1BPUlQyNDhfU0NJRkE1X1NDSywgR1BJT19GTl9NRkcyX09VVDEsCisJR1BJT19GTl9QT1JUMjQ4X1NDSUZCX1NDSywgR1BJT19GTl9UUFUyVE8wLAorCUdQSU9fRk5fUE9SVDI0OF9NU0lPRjJfVFNDSywKKwlHUElPX0ZOX1BPUlQyNDlfSVJPVVQsIEdQSU9fRk5fTUZHNF9JTjEsIEdQSU9fRk5fUE9SVDI0OV9NU0lPRjJfVFNZTkMsCisJR1BJT19GTl9TREhJQ0xLMCwgR1BJT19GTl9UQ0syX1NXQ0xLX01DMCwKKwlHUElPX0ZOX1NESElDRDAsCisJR1BJT19GTl9TREhJRDBfMCwgR1BJT19GTl9UTVMyX1NXRElPX01DMCwKKwlHUElPX0ZOX1NESElEMF8xLCBHUElPX0ZOX1RETzJfU1dPMF9NQzAsCisJR1BJT19GTl9TREhJRDBfMiwgR1BJT19GTl9UREkyLAorCUdQSU9fRk5fU0RISUQwXzMsIEdQSU9fRk5fUlRDSzJfU1dPMV9NQzAsCisJR1BJT19GTl9TREhJQ01EMCwgR1BJT19GTl9UUlNUMiwKKwlHUElPX0ZOX1NESElXUDAsIEdQSU9fRk5fRURCR1JFUTIsCisJR1BJT19GTl9TREhJQ0xLMSwgR1BJT19GTl9UQ0szX1NXQ0xLX01DMSwKKwlHUElPX0ZOX1NESElEMV8wLCBHUElPX0ZOX00xMV9TTENEX1NPMiwgR1BJT19GTl9UU19TUFNZTkMyLAorCUdQSU9fRk5fVE1TM19TV0RJT19NQzEsCisJR1BJT19GTl9TREhJRDFfMSwgR1BJT19GTl9NOV9TTENEX0EwMiwgR1BJT19GTl9UU19TREFUMiwKKwlHUElPX0ZOX1RETzNfU1dPMF9NQzEsCisJR1BJT19GTl9TREhJRDFfMiwgR1BJT19GTl9NMTBfU0xDRF9DSzIsIEdQSU9fRk5fVFNfU0RFTjIsIEdQSU9fRk5fVERJMywKKwlHUElPX0ZOX1NESElEMV8zLCBHUElPX0ZOX00xMl9TTENEX0NFMiwgR1BJT19GTl9UU19TQ0syLAorCUdQSU9fRk5fUlRDSzNfU1dPMV9NQzEsCisJR1BJT19GTl9TREhJQ01EMSwgR1BJT19GTl9UUlNUMywKKwlHUElPX0ZOX1JFU0VUT1VUUywKK307CisKKyNlbmRpZiAvKiBfX0FTTV9TSDczNzdfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3N5c3RlbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YTY4N2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC9zeXN0ZW0uaApAQCAtMCwwICsxLDE0IEBACisjaWZuZGVmIF9fQVNNX0FSQ0hfU1lTVEVNX0gKKyNkZWZpbmUgX19BU01fQVJDSF9TWVNURU1fSAorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCit7CisJY3B1X2RvX2lkbGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlLCBjb25zdCBjaGFyICpjbWQpCit7CisJY3B1X3Jlc2V0KDApOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3RpbWV4LmggYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMGQ4ZDgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC90aW1leC5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX1RJTUVYX0gKKyNkZWZpbmUgX19BU01fTUFDSF9USU1FWF9ICisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkxMTkzMTgwIC8qIHVudXNlZCBpODI1MyBQSVQgdmFsdWUgKi8KKworI2VuZGlmIC8qIF9fQVNNX01BQ0hfVElNRVhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZDc1NTYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX1VOQ09NUFJFU1NfSAorI2RlZmluZSBfX0FTTV9NQUNIX1VOQ09NUFJFU1NfSAorCisvKgorICogVGhpcyBkb2VzIG5vdCBhcHBlbmQgYSBuZXdsaW5lCisgKi8KK3N0YXRpYyB2b2lkIHB1dGMoaW50IGMpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaCh2b2lkKQoreworfQorCitzdGF0aWMgdm9pZCBhcmNoX2RlY29tcF9zZXR1cCh2b2lkKQoreworfQorCisjZGVmaW5lIGFyY2hfZGVjb21wX3dkb2coKQorCisjZW5kaWYgLyogX19BU01fTUFDSF9VTkNPTVBSRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjNjNGYxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbmNsdWRlL21hY2gvdm1hbGxvYy5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBfX0FTTV9NQUNIX1ZNQUxMT0NfSAorI2RlZmluZSBfX0FTTV9NQUNIX1ZNQUxMT0NfSAorCisjZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgIChQQUdFX09GRlNFVCArIDB4MjQwMDAwMDApCisKKyNlbmRpZiAvKiBfX0FTTV9NQUNIX1ZNQUxMT0NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM2Ny5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM2Ny5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNTQ3YjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3MzY3LmMKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisgKiBzaDczNjcgcHJvY2Vzc29yIHN1cHBvcnQgLSBJTlRDIGhhcmR3YXJlIGJsb2NrCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwICBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2hfaW50Yy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCitlbnVtIHsKKwlVTlVTRURfSU5UQ0EgPSAwLAorCisJLyogaW50ZXJydXB0IHNvdXJjZXMgSU5UQ0EgKi8KKwlJUlEwQSwgSVJRMUEsIElSUTJBLCBJUlEzQSwgSVJRNEEsIElSUTVBLCBJUlE2QSwgSVJRN0EsCisJSVJROEEsIElSUTlBLCBJUlExMEEsIElSUTExQSwgSVJRMTJBLCBJUlExM0EsIElSUTE0QSwgSVJRMTVBLAorCURJUkMsCisJQ1JZUFQxX0VSUiwgQ1JZUFQyX1NURCwKKwlJSUMxX0FMSTEsIElJQzFfVEFDS0kxLCBJSUMxX1dBSVRJMSwgSUlDMV9EVEVJMSwKKwlBUk0xMV9JUlFQTVUsIEFSTTExX0NPTU1UWCwgQVJNMTFfQ09NTVJYLAorCUVUTTExX0FDUUNNUCwgRVRNMTFfRlVMTCwKKwlNRklfTUZJTSwgTUZJX01GSVMsCisJQkJJRjEsIEJCSUYyLAorCVVTQkRNQUNfVVNIRE1JLAorCVVTQkhTX1VTSEkwLCBVU0JIU19VU0hJMSwKKwlDTVQxX0NNVDEwLCBDTVQxX0NNVDExLCBDTVQxX0NNVDEyLCBDTVQxX0NNVDEzLCBDTVQyLCBDTVQzLAorCUtFWVNDX0tFWSwKKwlTQ0lGQTAsIFNDSUZBMSwgU0NJRkEyLCBTQ0lGQTMsCisJTVNJT0YyLCBNU0lPRjEsCisJU0NJRkE0LCBTQ0lGQTUsIFNDSUZCLAorCUZMQ1RMX0ZMU1RFSSwgRkxDVExfRkxURU5ESSwgRkxDVExfRkxUUkVRMEksIEZMQ1RMX0ZMVFJFUTFJLAorCVNESEkwX1NESEkwSTAsIFNESEkwX1NESEkwSTEsIFNESEkwX1NESEkwSTIsIFNESEkwX1NESEkwSTMsCisJU0RISTFfU0RISTFJMCwgU0RISTFfU0RISTFJMSwgU0RISTFfU0RISTFJMiwgU0RISTFfU0RISTFJMywKKwlNU1VfTVNVLCBNU1VfTVNVMiwKKwlJUkVNLAorCVNJVSwKKwlTUFUsCisJSVJEQSwKKwlUUFUwLCBUUFUxLCBUUFUyLCBUUFUzLCBUUFU0LAorCUxDUkMsCisJUElOVDEsIFBJTlQyLAorCVRUSTIwLAorCU1JU1RZLAorCURETSwKKwlTREhJMl9TREhJMkkwLCBTREhJMl9TREhJMkkxLCBTREhJMl9TREhJMkkyLCBTREhJMl9TREhJMkkzLAorCVJXRFQwLCBSV0RUMSwKKwlETUFDXzFfREVJMCwgRE1BQ18xX0RFSTEsIERNQUNfMV9ERUkyLCBETUFDXzFfREVJMywKKwlETUFDXzJfREVJNCwgRE1BQ18yX0RFSTUsIERNQUNfMl9EQURFUlIsCisJRE1BQzJfMV9ERUkwLCBETUFDMl8xX0RFSTEsIERNQUMyXzFfREVJMiwgRE1BQzJfMV9ERUkzLAorCURNQUMyXzJfREVJNCwgRE1BQzJfMl9ERUk1LCBETUFDMl8yX0RBREVSUiwKKwlETUFDM18xX0RFSTAsIERNQUMzXzFfREVJMSwgRE1BQzNfMV9ERUkyLCBETUFDM18xX0RFSTMsCisJRE1BQzNfMl9ERUk0LCBETUFDM18yX0RFSTUsIERNQUMzXzJfREFERVJSLAorCisJLyogaW50ZXJydXB0IGdyb3VwcyBJTlRDQSAqLworCURNQUNfMSwgRE1BQ18yLAlETUFDMl8xLCBETUFDMl8yLCBETUFDM18xLCBETUFDM18yLAorCUVUTTExLCBBUk0xMSwgVVNCSFMsIEZMQ1RMLCBJSUMxLCBTREhJMCwgU0RISTEsIFNESEkyLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3ZlY3QgaW50Y2FfdmVjdG9yc1tdID0geworCUlOVENfVkVDVChJUlEwQSwgMHgwMjAwKSwgSU5UQ19WRUNUKElSUTFBLCAweDAyMjApLAorCUlOVENfVkVDVChJUlEyQSwgMHgwMjQwKSwgSU5UQ19WRUNUKElSUTNBLCAweDAyNjApLAorCUlOVENfVkVDVChJUlE0QSwgMHgwMjgwKSwgSU5UQ19WRUNUKElSUTVBLCAweDAyYTApLAorCUlOVENfVkVDVChJUlE2QSwgMHgwMmMwKSwgSU5UQ19WRUNUKElSUTdBLCAweDAyZTApLAorCUlOVENfVkVDVChJUlE4QSwgMHgwMzAwKSwgSU5UQ19WRUNUKElSUTlBLCAweDAzMjApLAorCUlOVENfVkVDVChJUlExMEEsIDB4MDM0MCksIElOVENfVkVDVChJUlExMUEsIDB4MDM2MCksCisJSU5UQ19WRUNUKElSUTEyQSwgMHgwMzgwKSwgSU5UQ19WRUNUKElSUTEzQSwgMHgwM2EwKSwKKwlJTlRDX1ZFQ1QoSVJRMTRBLCAweDAzYzApLCBJTlRDX1ZFQ1QoSVJRMTVBLCAweDAzZTApLAorCUlOVENfVkVDVChESVJDLCAweDA1NjApLAorCUlOVENfVkVDVChDUllQVDFfRVJSLCAweDA1ZTApLAorCUlOVENfVkVDVChDUllQVDJfU1RELCAweDA3MDApLAorCUlOVENfVkVDVChJSUMxX0FMSTEsIDB4MDc4MCksIElOVENfVkVDVChJSUMxX1RBQ0tJMSwgMHgwN2EwKSwKKwlJTlRDX1ZFQ1QoSUlDMV9XQUlUSTEsIDB4MDdjMCksIElOVENfVkVDVChJSUMxX0RURUkxLCAweDA3ZTApLAorCUlOVENfVkVDVChBUk0xMV9JUlFQTVUsIDB4MDgwMCksIElOVENfVkVDVChBUk0xMV9DT01NVFgsIDB4MDg0MCksCisJSU5UQ19WRUNUKEFSTTExX0NPTU1SWCwgMHgwODYwKSwKKwlJTlRDX1ZFQ1QoRVRNMTFfQUNRQ01QLCAweDA4ODApLCBJTlRDX1ZFQ1QoRVRNMTFfRlVMTCwgMHgwOGEwKSwKKwlJTlRDX1ZFQ1QoTUZJX01GSU0sIDB4MDkwMCksIElOVENfVkVDVChNRklfTUZJUywgMHgwOTIwKSwKKwlJTlRDX1ZFQ1QoQkJJRjEsIDB4MDk0MCksIElOVENfVkVDVChCQklGMiwgMHgwOTYwKSwKKwlJTlRDX1ZFQ1QoVVNCRE1BQ19VU0hETUksIDB4MGEwMCksCisJSU5UQ19WRUNUKFVTQkhTX1VTSEkwLCAweDBhMjApLCBJTlRDX1ZFQ1QoVVNCSFNfVVNISTEsIDB4MGE0MCksCisJSU5UQ19WRUNUKENNVDFfQ01UMTAsIDB4MGIwMCksIElOVENfVkVDVChDTVQxX0NNVDExLCAweDBiMjApLAorCUlOVENfVkVDVChDTVQxX0NNVDEyLCAweDBiNDApLCBJTlRDX1ZFQ1QoQ01UMV9DTVQxMywgMHgwYjYwKSwKKwlJTlRDX1ZFQ1QoQ01UMiwgMHgwYjgwKSwgSU5UQ19WRUNUKENNVDMsIDB4MGJhMCksCisJSU5UQ19WRUNUKEtFWVNDX0tFWSwgMHgwYmUwKSwKKwlJTlRDX1ZFQ1QoU0NJRkEwLCAweDBjMDApLCBJTlRDX1ZFQ1QoU0NJRkExLCAweDBjMjApLAorCUlOVENfVkVDVChTQ0lGQTIsIDB4MGM0MCksIElOVENfVkVDVChTQ0lGQTMsIDB4MGM2MCksCisJSU5UQ19WRUNUKE1TSU9GMiwgMHgwYzgwKSwgSU5UQ19WRUNUKE1TSU9GMSwgMHgwZDAwKSwKKwlJTlRDX1ZFQ1QoU0NJRkE0LCAweDBkMjApLCBJTlRDX1ZFQ1QoU0NJRkE1LCAweDBkNDApLAorCUlOVENfVkVDVChTQ0lGQiwgMHgwZDYwKSwKKwlJTlRDX1ZFQ1QoRkxDVExfRkxTVEVJLCAweDBkODApLCBJTlRDX1ZFQ1QoRkxDVExfRkxURU5ESSwgMHgwZGEwKSwKKwlJTlRDX1ZFQ1QoRkxDVExfRkxUUkVRMEksIDB4MGRjMCksIElOVENfVkVDVChGTENUTF9GTFRSRVExSSwgMHgwZGUwKSwKKwlJTlRDX1ZFQ1QoU0RISTBfU0RISTBJMCwgMHgwZTAwKSwgSU5UQ19WRUNUKFNESEkwX1NESEkwSTEsIDB4MGUyMCksCisJSU5UQ19WRUNUKFNESEkwX1NESEkwSTIsIDB4MGU0MCksIElOVENfVkVDVChTREhJMF9TREhJMEkzLCAweDBlNjApLAorCUlOVENfVkVDVChTREhJMV9TREhJMUkwLCAweDBlODApLCBJTlRDX1ZFQ1QoU0RISTFfU0RISTFJMSwgMHgwZWEwKSwKKwlJTlRDX1ZFQ1QoU0RISTFfU0RISTFJMiwgMHgwZWMwKSwgSU5UQ19WRUNUKFNESEkxX1NESEkxSTMsIDB4MGVlMCksCisJSU5UQ19WRUNUKE1TVV9NU1UsIDB4MGYyMCksIElOVENfVkVDVChNU1VfTVNVMiwgMHgwZjQwKSwKKwlJTlRDX1ZFQ1QoSVJFTSwgMHgwZjYwKSwKKwlJTlRDX1ZFQ1QoU0lVLCAweDBmYTApLAorCUlOVENfVkVDVChTUFUsIDB4MGZjMCksCisJSU5UQ19WRUNUKElSREEsIDB4MDQ4MCksCisJSU5UQ19WRUNUKFRQVTAsIDB4MDRhMCksIElOVENfVkVDVChUUFUxLCAweDA0YzApLAorCUlOVENfVkVDVChUUFUyLCAweDA0ZTApLCBJTlRDX1ZFQ1QoVFBVMywgMHgwNTAwKSwKKwlJTlRDX1ZFQ1QoVFBVNCwgMHgwNTIwKSwKKwlJTlRDX1ZFQ1QoTENSQywgMHgwNTQwKSwKKwlJTlRDX1ZFQ1QoUElOVDEsIDB4MTAwMCksIElOVENfVkVDVChQSU5UMiwgMHgxMDIwKSwKKwlJTlRDX1ZFQ1QoVFRJMjAsIDB4MTEwMCksCisJSU5UQ19WRUNUKE1JU1RZLCAweDExMjApLAorCUlOVENfVkVDVChERE0sIDB4MTE0MCksCisJSU5UQ19WRUNUKFNESEkyX1NESEkySTAsIDB4MTIwMCksIElOVENfVkVDVChTREhJMl9TREhJMkkxLCAweDEyMjApLAorCUlOVENfVkVDVChTREhJMl9TREhJMkkyLCAweDEyNDApLCBJTlRDX1ZFQ1QoU0RISTJfU0RISTJJMywgMHgxMjYwKSwKKwlJTlRDX1ZFQ1QoUldEVDAsIDB4MTI4MCksIElOVENfVkVDVChSV0RUMSwgMHgxMmEwKSwKKwlJTlRDX1ZFQ1QoRE1BQ18xX0RFSTAsIDB4MjAwMCksIElOVENfVkVDVChETUFDXzFfREVJMSwgMHgyMDIwKSwKKwlJTlRDX1ZFQ1QoRE1BQ18xX0RFSTIsIDB4MjA0MCksIElOVENfVkVDVChETUFDXzFfREVJMywgMHgyMDYwKSwKKwlJTlRDX1ZFQ1QoRE1BQ18yX0RFSTQsIDB4MjA4MCksIElOVENfVkVDVChETUFDXzJfREVJNSwgMHgyMGEwKSwKKwlJTlRDX1ZFQ1QoRE1BQ18yX0RBREVSUiwgMHgyMGMwKSwKKwlJTlRDX1ZFQ1QoRE1BQzJfMV9ERUkwLCAweDIxMDApLCBJTlRDX1ZFQ1QoRE1BQzJfMV9ERUkxLCAweDIxMjApLAorCUlOVENfVkVDVChETUFDMl8xX0RFSTIsIDB4MjE0MCksIElOVENfVkVDVChETUFDMl8xX0RFSTMsIDB4MjE2MCksCisJSU5UQ19WRUNUKERNQUMyXzJfREVJNCwgMHgyMTgwKSwgSU5UQ19WRUNUKERNQUMyXzJfREVJNSwgMHgyMWEwKSwKKwlJTlRDX1ZFQ1QoRE1BQzJfMl9EQURFUlIsIDB4MjFjMCksCisJSU5UQ19WRUNUKERNQUMzXzFfREVJMCwgMHgyMjAwKSwgSU5UQ19WRUNUKERNQUMzXzFfREVJMSwgMHgyMjIwKSwKKwlJTlRDX1ZFQ1QoRE1BQzNfMV9ERUkyLCAweDIyNDApLCBJTlRDX1ZFQ1QoRE1BQzNfMV9ERUkzLCAweDIyNjApLAorCUlOVENfVkVDVChETUFDM18yX0RFSTQsIDB4MjI4MCksIElOVENfVkVDVChETUFDM18yX0RFSTUsIDB4MjJhMCksCisJSU5UQ19WRUNUKERNQUMzXzJfREFERVJSLCAweDIyYzApLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGludGNhX2dyb3Vwc1tdIF9faW5pdGRhdGEgPSB7CisJSU5UQ19HUk9VUChETUFDXzEsIERNQUNfMV9ERUkwLAorCQkgICBETUFDXzFfREVJMSwgRE1BQ18xX0RFSTIsIERNQUNfMV9ERUkzKSwKKwlJTlRDX0dST1VQKERNQUNfMiwgRE1BQ18yX0RFSTQsCisJCSAgIERNQUNfMl9ERUk1LCBETUFDXzJfREFERVJSKSwKKwlJTlRDX0dST1VQKERNQUMyXzEsIERNQUMyXzFfREVJMCwKKwkJICAgRE1BQzJfMV9ERUkxLCBETUFDMl8xX0RFSTIsIERNQUMyXzFfREVJMyksCisJSU5UQ19HUk9VUChETUFDMl8yLCBETUFDMl8yX0RFSTQsCisJCSAgIERNQUMyXzJfREVJNSwgRE1BQzJfMl9EQURFUlIpLAorCUlOVENfR1JPVVAoRE1BQzNfMSwgRE1BQzNfMV9ERUkwLAorCQkgICBETUFDM18xX0RFSTEsIERNQUMzXzFfREVJMiwgRE1BQzNfMV9ERUkzKSwKKwlJTlRDX0dST1VQKERNQUMzXzIsIERNQUMzXzJfREVJNCwKKwkJICAgRE1BQzNfMl9ERUk1LCBETUFDM18yX0RBREVSUiksCisJSU5UQ19HUk9VUChFVE0xMSwgRVRNMTFfQUNRQ01QLCBFVE0xMV9GVUxMKSwKKwlJTlRDX0dST1VQKEFSTTExLCBBUk0xMV9JUlFQTVUsIEFSTTExX0NPTU1UWCwgQVJNMTFfQ09NTVRYKSwKKwlJTlRDX0dST1VQKFVTQkhTLCBVU0JIU19VU0hJMCwgVVNCSFNfVVNISTEpLAorCUlOVENfR1JPVVAoRkxDVEwsIEZMQ1RMX0ZMU1RFSSwgRkxDVExfRkxURU5ESSwKKwkJICAgRkxDVExfRkxUUkVRMEksIEZMQ1RMX0ZMVFJFUTFJKSwKKwlJTlRDX0dST1VQKElJQzEsIElJQzFfQUxJMSwgSUlDMV9UQUNLSTEsIElJQzFfV0FJVEkxLCBJSUMxX0RURUkxKSwKKwlJTlRDX0dST1VQKFNESEkwLCBTREhJMF9TREhJMEkwLCBTREhJMF9TREhJMEkxLAorCQkgICBTREhJMF9TREhJMEkyLCBTREhJMF9TREhJMEkzKSwKKwlJTlRDX0dST1VQKFNESEkxLCBTREhJMV9TREhJMUkwLCBTREhJMV9TREhJMUkxLAorCQkgICBTREhJMV9TREhJMUkyLCBTREhJMV9TREhJMUkzKSwKKwlJTlRDX0dST1VQKFNESEkyLCBTREhJMl9TREhJMkkwLCBTREhJMl9TREhJMkkxLAorCQkgICBTREhJMl9TREhJMkkyLCBTREhJMl9TREhJMkkzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBpbnRjYV9tYXNrX3JlZ2lzdGVyc1tdID0geworCXsgMHhlNjkwMDA0MCwgMHhlNjkwMDA2MCwgOCwgLyogSU5UTVNLMDBBIC8gSU5UTVNLQ0xSMDBBICovCisJICB7IElSUTBBLCBJUlExQSwgSVJRMkEsIElSUTNBLCBJUlE0QSwgSVJRNUEsIElSUTZBLCBJUlE3QSB9IH0sCisJeyAweGU2OTAwMDQ0LCAweGU2OTAwMDY0LCA4LCAvKiBJTlRNU0sxMEEgLyBJTlRNU0tDTFIxMEEgKi8KKwkgIHsgSVJROEEsIElSUTlBLCBJUlExMEEsIElSUTExQSwgSVJRMTJBLCBJUlExM0EsIElSUTE0QSwgSVJRMTVBIH0gfSwKKwl7IDB4ZTY5NDAwODAsIDB4ZTY5NDAwYzAsIDgsIC8qIElNUjBBIC8gSU1DUjBBICovCisJICB7IERNQUMyXzFfREVJMywgRE1BQzJfMV9ERUkyLCBETUFDMl8xX0RFSTEsIERNQUMyXzFfREVJMCwKKwkgICAgQVJNMTFfSVJRUE1VLCAwLCBBUk0xMV9DT01NVFgsIEFSTTExX0NPTU1SWCB9IH0sCisJeyAweGU2OTQwMDg0LCAweGU2OTQwMGM0LCA4LCAvKiBJTVIxQSAvIElNQ1IxQSAqLworCSAgeyBDUllQVDFfRVJSLCBDUllQVDJfU1RELCBESVJDLCAwLAorCSAgICBETUFDXzFfREVJMywgRE1BQ18xX0RFSTIsIERNQUNfMV9ERUkxLCBETUFDXzFfREVJMCB9IH0sCisJeyAweGU2OTQwMDg4LCAweGU2OTQwMGM4LCA4LCAvKiBJTVIyQSAvIElNQ1IyQSAqLworCSAgeyBQSU5UMSwgUElOVDIsIDAsIDAsCisJICAgIEJCSUYxLCBCQklGMiwgTUZJX01GSVMsIE1GSV9NRklNIH0gfSwKKwl7IDB4ZTY5NDAwOGMsIDB4ZTY5NDAwY2MsIDgsIC8qIElNUjNBIC8gSU1DUjNBICovCisJICB7IERNQUMzXzFfREVJMywgRE1BQzNfMV9ERUkyLCBETUFDM18xX0RFSTEsIERNQUMzXzFfREVJMCwKKwkgICAgRE1BQzNfMl9EQURFUlIsIERNQUMzXzJfREVJNSwgRE1BQzNfMl9ERUk0LCBJUkRBIH0gfSwKKwl7IDB4ZTY5NDAwOTAsIDB4ZTY5NDAwZDAsIDgsIC8qIElNUjRBIC8gSU1DUjRBICovCisJICB7IERETSwgMCwgMCwgMCwKKwkgICAgMCwgMCwgRVRNMTFfRlVMTCwgRVRNMTFfQUNRQ01QIH0gfSwKKwl7IDB4ZTY5NDAwOTQsIDB4ZTY5NDAwZDQsIDgsIC8qIElNUjVBIC8gSU1DUjVBICovCisJICB7IEtFWVNDX0tFWSwgRE1BQ18yX0RBREVSUiwgRE1BQ18yX0RFSTUsIERNQUNfMl9ERUk0LAorCSAgICBTQ0lGQTMsIFNDSUZBMiwgU0NJRkExLCBTQ0lGQTAgfSB9LAorCXsgMHhlNjk0MDA5OCwgMHhlNjk0MDBkOCwgOCwgLyogSU1SNkEgLyBJTUNSNkEgKi8KKwkgIHsgU0NJRkIsIFNDSUZBNSwgU0NJRkE0LCBNU0lPRjEsCisJICAgIDAsIDAsIE1TSU9GMiwgMCB9IH0sCisJeyAweGU2OTQwMDljLCAweGU2OTQwMGRjLCA4LCAvKiBJTVI3QSAvIElNQ1I3QSAqLworCSAgeyBTREhJMF9TREhJMEkzLCBTREhJMF9TREhJMEkyLCBTREhJMF9TREhJMEkxLCBTREhJMF9TREhJMEkwLAorCSAgICBGTENUTF9GTFRSRVExSSwgRkxDVExfRkxUUkVRMEksIEZMQ1RMX0ZMVEVOREksIEZMQ1RMX0ZMU1RFSSB9IH0sCisJeyAweGU2OTQwMGEwLCAweGU2OTQwMGUwLCA4LCAvKiBJTVI4QSAvIElNQ1I4QSAqLworCSAgeyBTREhJMV9TREhJMUkzLCBTREhJMV9TREhJMUkyLCBTREhJMV9TREhJMUkxLCBTREhJMV9TREhJMUkwLAorCSAgICBUVEkyMCwgVVNCRE1BQ19VU0hETUksIFNQVSwgU0lVIH0gfSwKKwl7IDB4ZTY5NDAwYTQsIDB4ZTY5NDAwZTQsIDgsIC8qIElNUjlBIC8gSU1DUjlBICovCisJICB7IENNVDFfQ01UMTMsIENNVDFfQ01UMTIsIENNVDFfQ01UMTEsIENNVDFfQ01UMTAsCisJICAgIENNVDIsIFVTQkhTX1VTSEkxLCBVU0JIU19VU0hJMCwgMCB9IH0sCisJeyAweGU2OTQwMGE4LCAweGU2OTQwMGU4LCA4LCAvKiBJTVIxMEEgLyBJTUNSMTBBICovCisJICB7IDAsIERNQUMyXzJfREFERVJSLCBETUFDMl8yX0RFSTUsIERNQUMyXzJfREVJNCwKKwkgICAgMCwgMCwgMCwgMCB9IH0sCisJeyAweGU2OTQwMGFjLCAweGU2OTQwMGVjLCA4LCAvKiBJTVIxMUEgLyBJTUNSMTFBICovCisJICB7IElJQzFfRFRFSTEsIElJQzFfV0FJVEkxLCBJSUMxX1RBQ0tJMSwgSUlDMV9BTEkxLAorCSAgICBMQ1JDLCBNU1VfTVNVMiwgSVJFTSwgTVNVX01TVSB9IH0sCisJeyAweGU2OTQwMGIwLCAweGU2OTQwMGYwLCA4LCAvKiBJTVIxMkEgLyBJTUNSMTJBICovCisJICB7IDAsIDAsIFRQVTAsIFRQVTEsCisJICAgIFRQVTIsIFRQVTMsIFRQVTQsIDAgfSB9LAorCXsgMHhlNjk0MDBiNCwgMHhlNjk0MDBmNCwgOCwgLyogSU1SMTNBIC8gSU1DUjEzQSAqLworCSAgeyBTREhJMl9TREhJMkkzLCBTREhJMl9TREhJMkkyLCBTREhJMl9TREhJMkkxLCBTREhJMl9TREhJMkkwLAorCSAgICBNSVNUWSwgQ01UMywgUldEVDEsIFJXRFQwIH0gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBpbnRjYV9wcmlvX3JlZ2lzdGVyc1tdID0geworCXsgMHhlNjkwMDAxMCwgMCwgMzIsIDQsIC8qIElOVFBSSTAwQSAqLworCSAgeyBJUlEwQSwgSVJRMUEsIElSUTJBLCBJUlEzQSwgSVJRNEEsIElSUTVBLCBJUlE2QSwgSVJRN0EgfSB9LAorCXsgMHhlNjkwMDAxNCwgMCwgMzIsIDQsIC8qIElOVFBSSTEwQSAqLworCSAgeyBJUlE4QSwgSVJROUEsIElSUTEwQSwgSVJRMTFBLCBJUlExMkEsIElSUTEzQSwgSVJRMTRBLCBJUlExNUEgfSB9LAorCisJeyAweGU2OTQwMDAwLCAwLCAxNiwgNCwgLyogSVBSQUEgKi8geyBETUFDM18xLCBETUFDM18yLCBDTVQyLCBMQ1JDIH0gfSwKKwl7IDB4ZTY5NDAwMDQsIDAsIDE2LCA0LCAvKiBJUFJCQSAqLyB7IElSREEsIEVUTTExLCBCQklGMSwgQkJJRjIgfSB9LAorCXsgMHhlNjk0MDAwOCwgMCwgMTYsIDQsIC8qIElQUkNBICovIHsgQ1JZUFQxX0VSUiwgQ1JZUFQyX1NURCwKKwkJCQkJICAgICAgQ01UMV9DTVQxMSwgQVJNMTEgfSB9LAorCXsgMHhlNjk0MDAwYywgMCwgMTYsIDQsIC8qIElQUkRBICovIHsgUElOVDEsIFBJTlQyLAorCQkJCQkgICAgICBDTVQxX0NNVDEyLCBUUFU0IH0gfSwKKwl7IDB4ZTY5NDAwMTAsIDAsIDE2LCA0LCAvKiBJUFJFQSAqLyB7IERNQUNfMSwgTUZJX01GSVMsCisJCQkJCSAgICAgIE1GSV9NRklNLCBVU0JIUyB9IH0sCisJeyAweGU2OTQwMDE0LCAwLCAxNiwgNCwgLyogSVBSRkEgKi8geyBLRVlTQ19LRVksIERNQUNfMiwKKwkJCQkJICAgICAgMCwgQ01UMV9DTVQxMCB9IH0sCisJeyAweGU2OTQwMDE4LCAwLCAxNiwgNCwgLyogSVBSR0EgKi8geyBTQ0lGQTAsIFNDSUZBMSwKKwkJCQkJICAgICAgU0NJRkEyLCBTQ0lGQTMgfSB9LAorCXsgMHhlNjk0MDAxYywgMCwgMTYsIDQsIC8qIElQUkdIICovIHsgTVNJT0YyLCBVU0JETUFDX1VTSERNSSwKKwkJCQkJICAgICAgRkxDVEwsIFNESEkwIH0gfSwKKwl7IDB4ZTY5NDAwMjAsIDAsIDE2LCA0LCAvKiBJUFJJQSAqLyB7IE1TSU9GMSwgU0NJRkE0LCBNU1VfTVNVLCBJSUMxIH0gfSwKKwl7IDB4ZTY5NDAwMjQsIDAsIDE2LCA0LCAvKiBJUFJKQSAqLyB7IERNQUMyXzEsIERNQUMyXzIsIFNJVSwgVFRJMjAgfSB9LAorCXsgMHhlNjk0MDAyOCwgMCwgMTYsIDQsIC8qIElQUktBICovIHsgMCwgQ01UMV9DTVQxMywgSVJFTSwgU0RISTEgfSB9LAorCXsgMHhlNjk0MDAyYywgMCwgMTYsIDQsIC8qIElQUkxBICovIHsgVFBVMCwgVFBVMSwgVFBVMiwgVFBVMyB9IH0sCisJeyAweGU2OTQwMDMwLCAwLCAxNiwgNCwgLyogSVBSTUEgKi8geyBNSVNUWSwgQ01UMywgUldEVDEsIFJXRFQwIH0gfSwKKwl7IDB4ZTY5NDAwMzQsIDAsIDE2LCA0LCAvKiBJUFJOQSAqLyB7IFNDSUZCLCBTQ0lGQTUsIFNQVSwgRERNIH0gfSwKKwl7IDB4ZTY5NDAwMzgsIDAsIDE2LCA0LCAvKiBJUFJPQSAqLyB7IDAsIDAsIERJUkMsIFNESEkyIH0gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgaW50Y2Ffc2Vuc2VfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKKwl7IDB4ZTY5MDAwMDAsIDE2LCAyLCAvKiBJQ1IxQSAqLworCSAgeyBJUlEwQSwgSVJRMUEsIElSUTJBLCBJUlEzQSwgSVJRNEEsIElSUTVBLCBJUlE2QSwgSVJRN0EgfSB9LAorCXsgMHhlNjkwMDAwNCwgMTYsIDIsIC8qIElDUjJBICovCisJICB7IElSUThBLCBJUlE5QSwgSVJRMTBBLCBJUlExMUEsIElSUTEyQSwgSVJRMTNBLCBJUlExNEEsIElSUTE1QSB9IH0sCit9OworCitzdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgaW50Y2FfYWNrX3JlZ2lzdGVyc1tdIF9faW5pdGRhdGEgPSB7CisJeyAweGU2OTAwMDIwLCAwLCA4LCAvKiBJTlRSRVEwMEEgKi8KKwkgIHsgSVJRMEEsIElSUTFBLCBJUlEyQSwgSVJRM0EsIElSUTRBLCBJUlE1QSwgSVJRNkEsIElSUTdBIH0gfSwKKwl7IDB4ZTY5MDAwMjQsIDAsIDgsIC8qIElOVFJFUTEwQSAqLworCSAgeyBJUlE4QSwgSVJROUEsIElSUTEwQSwgSVJRMTFBLCBJUlExMkEsIElSUTEzQSwgSVJRMTRBLCBJUlExNUEgfSB9LAorfTsKKworc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDX0FDSyhpbnRjYV9kZXNjLCAic2g3MzY3LWludGNhIiwKKwkJCSAgICAgaW50Y2FfdmVjdG9ycywgaW50Y2FfZ3JvdXBzLAorCQkJICAgICBpbnRjYV9tYXNrX3JlZ2lzdGVycywgaW50Y2FfcHJpb19yZWdpc3RlcnMsCisJCQkgICAgIGludGNhX3NlbnNlX3JlZ2lzdGVycywgaW50Y2FfYWNrX3JlZ2lzdGVycyk7CisKK3ZvaWQgX19pbml0IHNoNzM2N19pbml0X2lycSh2b2lkKQoreworCS8qIElOVENBICovCisJcmVnaXN0ZXJfaW50Y19jb250cm9sbGVyKCZpbnRjYV9kZXNjKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczNzIuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczNzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNTdhOTIzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9pbnRjLXNoNzM3Mi5jCkBAIC0wLDAgKzEsMzY5IEBACisvKgorICogc2g3MzcyIHByb2Nlc3NvciBzdXBwb3J0IC0gSU5UQyBoYXJkd2FyZSBibG9jaworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX2ludGMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworZW51bSB7CisJVU5VU0VEX0lOVENBID0gMCwKKworCS8qIGludGVycnVwdCBzb3VyY2VzIElOVENBICovCisJSVJRMEEsIElSUTFBLCBJUlEyQSwgSVJRM0EsIElSUTRBLCBJUlE1QSwgSVJRNkEsIElSUTdBLAorCUlSUThBLCBJUlE5QSwgSVJRMTBBLCBJUlExMUEsIElSUTEyQSwgSVJRMTNBLCBJUlExNEEsIElSUTE1QSwKKwlJUlExNkEsIElSUTE3QSwgSVJRMThBLCBJUlExOUEsIElSUTIwQSwgSVJRMjFBLCBJUlEyMkEsIElSUTIzQSwKKwlJUlEyNEEsIElSUTI1QSwgSVJRMjZBLCBJUlEyN0EsIElSUTI4QSwgSVJRMjlBLCBJUlEzMEEsIElSUTMxQSwKKwlESVJDLAorCUNSWVBUX1NURCwKKwlJSUMxX0FMSTEsIElJQzFfVEFDS0kxLCBJSUMxX1dBSVRJMSwgSUlDMV9EVEVJMSwKKwlBUF9BUk1fSVJRUE1VLCBBUF9BUk1fQ09NTVRYLCBBUF9BUk1fQ09NTVJYLAorCU1GSV9NRklNLCBNRklfTUZJUywKKwlCQklGMSwgQkJJRjIsCisJVVNCSFNETUFDMF9VU0hETUksCisJXzNER19TR1g1NDAsCisJQ01UMV9DTVQxMCwgQ01UMV9DTVQxMSwgQ01UMV9DTVQxMiwgQ01UMV9DTVQxMywgQ01UMiwgQ01UMywKKwlLRVlTQ19LRVksCisJU0NJRkEwLCBTQ0lGQTEsIFNDSUZBMiwgU0NJRkEzLAorCU1TSU9GMiwgTVNJT0YxLAorCVNDSUZBNCwgU0NJRkE1LCBTQ0lGQiwKKwlGTENUTF9GTFNURUksIEZMQ1RMX0ZMVEVOREksIEZMQ1RMX0ZMVFJFUTBJLCBGTENUTF9GTFRSRVExSSwKKwlTREhJMF9TREhJMEkwLCBTREhJMF9TREhJMEkxLCBTREhJMF9TREhJMEkyLCBTREhJMF9TREhJMEkzLAorCVNESEkxX1NESEkxSTAsIFNESEkxX1NESEkxSTEsIFNESEkxX1NESEkxSTIsCisJSVJSRU0sCisJSVJEQSwKKwlUUFUwLAorCVRUSTIwLAorCURETSwKKwlTREhJMl9TREhJMkkwLCBTREhJMl9TREhJMkkxLCBTREhJMl9TREhJMkkyLCBTREhJMl9TREhJMkkzLAorCVJXRFQwLAorCURNQUMxXzFfREVJMCwgRE1BQzFfMV9ERUkxLCBETUFDMV8xX0RFSTIsIERNQUMxXzFfREVJMywKKwlETUFDMV8yX0RFSTQsIERNQUMxXzJfREVJNSwgRE1BQzFfMl9EQURFUlIsCisJRE1BQzJfMV9ERUkwLCBETUFDMl8xX0RFSTEsIERNQUMyXzFfREVJMiwgRE1BQzJfMV9ERUkzLAorCURNQUMyXzJfREVJNCwgRE1BQzJfMl9ERUk1LCBETUFDMl8yX0RBREVSUiwKKwlETUFDM18xX0RFSTAsIERNQUMzXzFfREVJMSwgRE1BQzNfMV9ERUkyLCBETUFDM18xX0RFSTMsCisJRE1BQzNfMl9ERUk0LCBETUFDM18yX0RFSTUsIERNQUMzXzJfREFERVJSLAorCVNIV1lTVEFUX1JULCBTSFdZU1RBVF9IUywgU0hXWVNUQVRfQ09NLAorCUhETUksCisJU1BVMl9TUFUwLCBTUFUyX1NQVTEsCisJRlNJLCBGTVNJLAorCU1JUElfSFNJLAorCUlQTU1VX0lQTU1VRCwKKwlDRUNfMSwgQ0VDXzIsCisJQVBfQVJNX0NUSUlSUSwgQVBfQVJNX0RNQUVYVEVSUklSUSwgQVBfQVJNX0RNQUlSUSwgQVBfQVJNX0RNQVNJUlEsCisJTUZJUzIsCisJQ1BPUlRSMlMsCisJQ01UMTQsIENNVDE1LAorCU1NQ19NTUNfRVJSLCBNTUNfTU1DX05PUiwKKwlJSUM0X0FMSTQsIElJQzRfVEFDS0k0LCBJSUM0X1dBSVRJNCwgSUlDNF9EVEVJNCwKKwlJSUMzX0FMSTMsIElJQzNfVEFDS0kzLCBJSUMzX1dBSVRJMywgSUlDM19EVEVJMywKKwlVU0IwX1VTQjBJMSwgVVNCMF9VU0IwSTAsCisJVVNCMV9VU0IxSTEsIFVTQjFfVVNCMUkwLAorCVVTQkhTRE1BQzFfVVNIRE1JLAorCisJLyogaW50ZXJydXB0IGdyb3VwcyBJTlRDQSAqLworCURNQUMxXzEsIERNQUMxXzIsIERNQUMyXzEsIERNQUMyXzIsIERNQUMzXzEsIERNQUMzXzIsIFNIV1lTVEFULAorCUFQX0FSTTEsIEFQX0FSTTIsIFNQVTIsIEZMQ1RMLCBJSUMxLCBTREhJMCwgU0RISTEsIFNESEkyCit9OworCitzdGF0aWMgc3RydWN0IGludGNfdmVjdCBpbnRjYV92ZWN0b3JzW10gX19pbml0ZGF0YSA9IHsKKwlJTlRDX1ZFQ1QoSVJRMEEsIDB4MDIwMCksIElOVENfVkVDVChJUlExQSwgMHgwMjIwKSwKKwlJTlRDX1ZFQ1QoSVJRMkEsIDB4MDI0MCksIElOVENfVkVDVChJUlEzQSwgMHgwMjYwKSwKKwlJTlRDX1ZFQ1QoSVJRNEEsIDB4MDI4MCksIElOVENfVkVDVChJUlE1QSwgMHgwMmEwKSwKKwlJTlRDX1ZFQ1QoSVJRNkEsIDB4MDJjMCksIElOVENfVkVDVChJUlE3QSwgMHgwMmUwKSwKKwlJTlRDX1ZFQ1QoSVJROEEsIDB4MDMwMCksIElOVENfVkVDVChJUlE5QSwgMHgwMzIwKSwKKwlJTlRDX1ZFQ1QoSVJRMTBBLCAweDAzNDApLCBJTlRDX1ZFQ1QoSVJRMTFBLCAweDAzNjApLAorCUlOVENfVkVDVChJUlExMkEsIDB4MDM4MCksIElOVENfVkVDVChJUlExM0EsIDB4MDNhMCksCisJSU5UQ19WRUNUKElSUTE0QSwgMHgwM2MwKSwgSU5UQ19WRUNUKElSUTE1QSwgMHgwM2UwKSwKKwlJTlRDX1ZFQ1QoSVJRMTZBLCAweDMyMDApLCBJTlRDX1ZFQ1QoSVJRMTdBLCAweDMyMjApLAorCUlOVENfVkVDVChJUlExOEEsIDB4MzI0MCksIElOVENfVkVDVChJUlExOUEsIDB4MzI2MCksCisJSU5UQ19WRUNUKElSUTIwQSwgMHgzMjgwKSwgSU5UQ19WRUNUKElSUTMxQSwgMHgzMmEwKSwKKwlJTlRDX1ZFQ1QoSVJRMjJBLCAweDMyYzApLCBJTlRDX1ZFQ1QoSVJRMjNBLCAweDMyZTApLAorCUlOVENfVkVDVChJUlEyNEEsIDB4MzMwMCksIElOVENfVkVDVChJUlEyNUEsIDB4MzMyMCksCisJSU5UQ19WRUNUKElSUTI2QSwgMHgzMzQwKSwgSU5UQ19WRUNUKElSUTI3QSwgMHgzMzYwKSwKKwlJTlRDX1ZFQ1QoSVJRMjhBLCAweDMzODApLCBJTlRDX1ZFQ1QoSVJRMjlBLCAweDMzYTApLAorCUlOVENfVkVDVChJUlEzMEEsIDB4MzNjMCksIElOVENfVkVDVChJUlEzMUEsIDB4MzNlMCksCisJSU5UQ19WRUNUKERJUkMsIDB4MDU2MCksCisJSU5UQ19WRUNUKENSWVBUX1NURCwgMHgwNzAwKSwKKwlJTlRDX1ZFQ1QoSUlDMV9BTEkxLCAweDA3ODApLCBJTlRDX1ZFQ1QoSUlDMV9UQUNLSTEsIDB4MDdhMCksCisJSU5UQ19WRUNUKElJQzFfV0FJVEkxLCAweDA3YzApLCBJTlRDX1ZFQ1QoSUlDMV9EVEVJMSwgMHgwN2UwKSwKKwlJTlRDX1ZFQ1QoQVBfQVJNX0lSUVBNVSwgMHgwODAwKSwgSU5UQ19WRUNUKEFQX0FSTV9DT01NVFgsIDB4MDg0MCksCisJSU5UQ19WRUNUKEFQX0FSTV9DT01NUlgsIDB4MDg2MCksCisJSU5UQ19WRUNUKE1GSV9NRklNLCAweDA5MDApLCBJTlRDX1ZFQ1QoTUZJX01GSVMsIDB4MDkyMCksCisJSU5UQ19WRUNUKEJCSUYxLCAweDA5NDApLCBJTlRDX1ZFQ1QoQkJJRjIsIDB4MDk2MCksCisJSU5UQ19WRUNUKFVTQkhTRE1BQzBfVVNIRE1JLCAweDBhMDApLAorCUlOVENfVkVDVChfM0RHX1NHWDU0MCwgMHgwYTYwKSwKKwlJTlRDX1ZFQ1QoQ01UMV9DTVQxMCwgMHgwYjAwKSwgSU5UQ19WRUNUKENNVDFfQ01UMTEsIDB4MGIyMCksCisJSU5UQ19WRUNUKENNVDFfQ01UMTIsIDB4MGI0MCksIElOVENfVkVDVChDTVQxX0NNVDEzLCAweDBiNjApLAorCUlOVENfVkVDVChDTVQyLCAweDBiODApLCBJTlRDX1ZFQ1QoQ01UMywgMHgwYmEwKSwKKwlJTlRDX1ZFQ1QoS0VZU0NfS0VZLCAweDBiZTApLAorCUlOVENfVkVDVChTQ0lGQTAsIDB4MGMwMCksIElOVENfVkVDVChTQ0lGQTEsIDB4MGMyMCksCisJSU5UQ19WRUNUKFNDSUZBMiwgMHgwYzQwKSwgSU5UQ19WRUNUKFNDSUZBMywgMHgwYzYwKSwKKwlJTlRDX1ZFQ1QoTVNJT0YyLCAweDBjODApLCBJTlRDX1ZFQ1QoTVNJT0YxLCAweDBkMDApLAorCUlOVENfVkVDVChTQ0lGQTQsIDB4MGQyMCksIElOVENfVkVDVChTQ0lGQTUsIDB4MGQ0MCksCisJSU5UQ19WRUNUKFNDSUZCLCAweDBkNjApLAorCUlOVENfVkVDVChGTENUTF9GTFNURUksIDB4MGQ4MCksIElOVENfVkVDVChGTENUTF9GTFRFTkRJLCAweDBkYTApLAorCUlOVENfVkVDVChGTENUTF9GTFRSRVEwSSwgMHgwZGMwKSwgSU5UQ19WRUNUKEZMQ1RMX0ZMVFJFUTFJLCAweDBkZTApLAorCUlOVENfVkVDVChTREhJMF9TREhJMEkwLCAweDBlMDApLCBJTlRDX1ZFQ1QoU0RISTBfU0RISTBJMSwgMHgwZTIwKSwKKwlJTlRDX1ZFQ1QoU0RISTBfU0RISTBJMiwgMHgwZTQwKSwgSU5UQ19WRUNUKFNESEkwX1NESEkwSTMsIDB4MGU2MCksCisJSU5UQ19WRUNUKFNESEkxX1NESEkxSTAsIDB4MGU4MCksIElOVENfVkVDVChTREhJMV9TREhJMUkxLCAweDBlYTApLAorCUlOVENfVkVDVChTREhJMV9TREhJMUkyLCAweDBlYzApLAorCUlOVENfVkVDVChJUlJFTSwgMHgwZjYwKSwKKwlJTlRDX1ZFQ1QoSVJEQSwgMHgwNDgwKSwKKwlJTlRDX1ZFQ1QoVFBVMCwgMHgwNGEwKSwKKwlJTlRDX1ZFQ1QoVFRJMjAsIDB4MTEwMCksCisJSU5UQ19WRUNUKERETSwgMHgxMTQwKSwKKwlJTlRDX1ZFQ1QoU0RISTJfU0RISTJJMCwgMHgxMjAwKSwgSU5UQ19WRUNUKFNESEkyX1NESEkySTEsIDB4MTIyMCksCisJSU5UQ19WRUNUKFNESEkyX1NESEkySTIsIDB4MTI0MCksIElOVENfVkVDVChTREhJMl9TREhJMkkzLCAweDEyNjApLAorCUlOVENfVkVDVChSV0RUMCwgMHgxMjgwKSwKKwlJTlRDX1ZFQ1QoRE1BQzFfMV9ERUkwLCAweDIwMDApLCBJTlRDX1ZFQ1QoRE1BQzFfMV9ERUkxLCAweDIwMjApLAorCUlOVENfVkVDVChETUFDMV8xX0RFSTIsIDB4MjA0MCksIElOVENfVkVDVChETUFDMV8xX0RFSTMsIDB4MjA2MCksCisJSU5UQ19WRUNUKERNQUMxXzJfREVJNCwgMHgyMDgwKSwgSU5UQ19WRUNUKERNQUMxXzJfREVJNSwgMHgyMGEwKSwKKwlJTlRDX1ZFQ1QoRE1BQzFfMl9EQURFUlIsIDB4MjBjMCksCisJSU5UQ19WRUNUKERNQUMyXzFfREVJMCwgMHgyMTAwKSwgSU5UQ19WRUNUKERNQUMyXzFfREVJMSwgMHgyMTIwKSwKKwlJTlRDX1ZFQ1QoRE1BQzJfMV9ERUkyLCAweDIxNDApLCBJTlRDX1ZFQ1QoRE1BQzJfMV9ERUkzLCAweDIxNjApLAorCUlOVENfVkVDVChETUFDMl8yX0RFSTQsIDB4MjE4MCksIElOVENfVkVDVChETUFDMl8yX0RFSTUsIDB4MjFhMCksCisJSU5UQ19WRUNUKERNQUMyXzJfREFERVJSLCAweDIxYzApLAorCUlOVENfVkVDVChETUFDM18xX0RFSTAsIDB4MjIwMCksIElOVENfVkVDVChETUFDM18xX0RFSTEsIDB4MjIyMCksCisJSU5UQ19WRUNUKERNQUMzXzFfREVJMiwgMHgyMjQwKSwgSU5UQ19WRUNUKERNQUMzXzFfREVJMywgMHgyMjYwKSwKKwlJTlRDX1ZFQ1QoRE1BQzNfMl9ERUk0LCAweDIyODApLCBJTlRDX1ZFQ1QoRE1BQzNfMl9ERUk1LCAweDIyYTApLAorCUlOVENfVkVDVChETUFDM18yX0RBREVSUiwgMHgyMmMwKSwKKwlJTlRDX1ZFQ1QoU0hXWVNUQVRfUlQsIDB4MTMwMCksIElOVENfVkVDVChTSFdZU1RBVF9IUywgMHgxMzIwKSwKKwlJTlRDX1ZFQ1QoU0hXWVNUQVRfQ09NLCAweDEzNDApLAorCUlOVENfVkVDVChIRE1JLCAweDE3ZTApLAorCUlOVENfVkVDVChTUFUyX1NQVTAsIDB4MTgwMCksIElOVENfVkVDVChTUFUyX1NQVTEsIDB4MTgyMCksCisJSU5UQ19WRUNUKEZTSSwgMHgxODQwKSwKKwlJTlRDX1ZFQ1QoRk1TSSwgMHgxODYwKSwKKwlJTlRDX1ZFQ1QoTUlQSV9IU0ksIDB4MThlMCksCisJSU5UQ19WRUNUKElQTU1VX0lQTU1VRCwgMHgxOTIwKSwKKwlJTlRDX1ZFQ1QoQ0VDXzEsIDB4MTk0MCksIElOVENfVkVDVChDRUNfMiwgMHgxOTYwKSwKKwlJTlRDX1ZFQ1QoQVBfQVJNX0NUSUlSUSwgMHgxOTgwKSwKKwlJTlRDX1ZFQ1QoQVBfQVJNX0RNQUVYVEVSUklSUSwgMHgxOWEwKSwKKwlJTlRDX1ZFQ1QoQVBfQVJNX0RNQUlSUSwgMHgxOWMwKSwKKwlJTlRDX1ZFQ1QoQVBfQVJNX0RNQVNJUlEsIDB4MTllMCksCisJSU5UQ19WRUNUKE1GSVMyLCAweDFhMDApLAorCUlOVENfVkVDVChDUE9SVFIyUywgMHgxYTIwKSwKKwlJTlRDX1ZFQ1QoQ01UMTQsIDB4MWE0MCksIElOVENfVkVDVChDTVQxNSwgMHgxYTYwKSwKKwlJTlRDX1ZFQ1QoTU1DX01NQ19FUlIsIDB4MWFjMCksIElOVENfVkVDVChNTUNfTU1DX05PUiwgMHgxYWUwKSwKKwlJTlRDX1ZFQ1QoSUlDNF9BTEk0LCAweDFiMDApLCBJTlRDX1ZFQ1QoSUlDNF9UQUNLSTQsIDB4MWIyMCksCisJSU5UQ19WRUNUKElJQzRfV0FJVEk0LCAweDFiNDApLCBJTlRDX1ZFQ1QoSUlDNF9EVEVJNCwgMHgxYjYwKSwKKwlJTlRDX1ZFQ1QoSUlDM19BTEkzLCAweDFiODApLCBJTlRDX1ZFQ1QoSUlDM19UQUNLSTMsIDB4MWJhMCksCisJSU5UQ19WRUNUKElJQzNfV0FJVEkzLCAweDFiYzApLCBJTlRDX1ZFQ1QoSUlDM19EVEVJMywgMHgxYmUwKSwKKwlJTlRDX1ZFQ1QoVVNCMF9VU0IwSTEsIDB4MWM4MCksIElOVENfVkVDVChVU0IwX1VTQjBJMCwgMHgxY2EwKSwKKwlJTlRDX1ZFQ1QoVVNCMV9VU0IxSTEsIDB4MWNjMCksIElOVENfVkVDVChVU0IxX1VTQjFJMCwgMHgxY2UwKSwKKwlJTlRDX1ZFQ1QoVVNCSFNETUFDMV9VU0hETUksIDB4MWQwMCksCit9OworCitzdGF0aWMgc3RydWN0IGludGNfZ3JvdXAgaW50Y2FfZ3JvdXBzW10gX19pbml0ZGF0YSA9IHsKKwlJTlRDX0dST1VQKERNQUMxXzEsIERNQUMxXzFfREVJMCwKKwkJICAgRE1BQzFfMV9ERUkxLCBETUFDMV8xX0RFSTIsIERNQUMxXzFfREVJMyksCisJSU5UQ19HUk9VUChETUFDMV8yLCBETUFDMV8yX0RFSTQsCisJCSAgIERNQUMxXzJfREVJNSwgRE1BQzFfMl9EQURFUlIpLAorCUlOVENfR1JPVVAoRE1BQzJfMSwgRE1BQzJfMV9ERUkwLAorCQkgICBETUFDMl8xX0RFSTEsIERNQUMyXzFfREVJMiwgRE1BQzJfMV9ERUkzKSwKKwlJTlRDX0dST1VQKERNQUMyXzIsIERNQUMyXzJfREVJNCwKKwkJICAgRE1BQzJfMl9ERUk1LCBETUFDMl8yX0RBREVSUiksCisJSU5UQ19HUk9VUChETUFDM18xLCBETUFDM18xX0RFSTAsCisJCSAgIERNQUMzXzFfREVJMSwgRE1BQzNfMV9ERUkyLCBETUFDM18xX0RFSTMpLAorCUlOVENfR1JPVVAoRE1BQzNfMiwgRE1BQzNfMl9ERUk0LAorCQkgICBETUFDM18yX0RFSTUsIERNQUMzXzJfREFERVJSKSwKKwlJTlRDX0dST1VQKEFQX0FSTTEsIEFQX0FSTV9JUlFQTVUsIEFQX0FSTV9DT01NVFgsIEFQX0FSTV9DT01NUlgpLAorCUlOVENfR1JPVVAoQVBfQVJNMiwgQVBfQVJNX0NUSUlSUSwgQVBfQVJNX0RNQUVYVEVSUklSUSwKKwkJICAgQVBfQVJNX0RNQUlSUSwgQVBfQVJNX0RNQVNJUlEpLAorCUlOVENfR1JPVVAoU1BVMiwgU1BVMl9TUFUwLCBTUFUyX1NQVTEpLAorCUlOVENfR1JPVVAoRkxDVEwsIEZMQ1RMX0ZMU1RFSSwgRkxDVExfRkxURU5ESSwKKwkJICAgRkxDVExfRkxUUkVRMEksIEZMQ1RMX0ZMVFJFUTFJKSwKKwlJTlRDX0dST1VQKElJQzEsIElJQzFfQUxJMSwgSUlDMV9UQUNLSTEsIElJQzFfV0FJVEkxLCBJSUMxX0RURUkxKSwKKwlJTlRDX0dST1VQKFNESEkwLCBTREhJMF9TREhJMEkwLCBTREhJMF9TREhJMEkxLAorCQkgICBTREhJMF9TREhJMEkyLCBTREhJMF9TREhJMEkzKSwKKwlJTlRDX0dST1VQKFNESEkxLCBTREhJMV9TREhJMUkwLCBTREhJMV9TREhJMUkxLAorCQkgICBTREhJMV9TREhJMUkyKSwKKwlJTlRDX0dST1VQKFNESEkyLCBTREhJMl9TREhJMkkwLCBTREhJMl9TREhJMkkxLAorCQkgICBTREhJMl9TREhJMkkyLCBTREhJMl9TREhJMkkzKSwKKwlJTlRDX0dST1VQKFNIV1lTVEFULCBTSFdZU1RBVF9SVCwgU0hXWVNUQVRfSFMsIFNIV1lTVEFUX0NPTSksCit9OworCitzdGF0aWMgc3RydWN0IGludGNfbWFza19yZWcgaW50Y2FfbWFza19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0geworCXsgMHhlNjkwMDA0MCwgMHhlNjkwMDA2MCwgOCwgLyogSU5UTVNLMDBBIC8gSU5UTVNLQ0xSMDBBICovCisJICB7IElSUTBBLCBJUlExQSwgSVJRMkEsIElSUTNBLCBJUlE0QSwgSVJRNUEsIElSUTZBLCBJUlE3QSB9IH0sCisJeyAweGU2OTAwMDQ0LCAweGU2OTAwMDY0LCA4LCAvKiBJTlRNU0sxMEEgLyBJTlRNU0tDTFIxMEEgKi8KKwkgIHsgSVJROEEsIElSUTlBLCBJUlExMEEsIElSUTExQSwgSVJRMTJBLCBJUlExM0EsIElSUTE0QSwgSVJRMTVBIH0gfSwKKwl7IDB4ZTY5MDAwNDgsIDB4ZTY5MDAwNjgsIDgsIC8qIElOVE1TSzIwQSAvIElOVE1TS0NMUjIwQSAqLworCSAgeyBJUlExNkEsIElSUTE3QSwgSVJRMThBLCBJUlExOUEsIElSUTIwQSwgSVJRMjFBLCBJUlEyMkEsIElSUTIzQSB9IH0sCisJeyAweGU2OTAwMDRjLCAweGU2OTAwMDZjLCA4LCAvKiBJTlRNU0szMEEgLyBJTlRNU0tDTFIzMEEgKi8KKwkgIHsgSVJRMjRBLCBJUlEyNUEsIElSUTI2QSwgSVJRMjdBLCBJUlEyOEEsIElSUTI5QSwgSVJRMzBBLCBJUlEzMUEgfSB9LAorCisJeyAweGU2OTQwMDgwLCAweGU2OTQwMGMwLCA4LCAvKiBJTVIwQSAvIElNQ1IwQSAqLworCSAgeyBETUFDMl8xX0RFSTMsIERNQUMyXzFfREVJMiwgRE1BQzJfMV9ERUkxLCBETUFDMl8xX0RFSTAsCisJICAgIEFQX0FSTV9JUlFQTVUsIDAsIEFQX0FSTV9DT01NVFgsIEFQX0FSTV9DT01NUlggfSB9LAorCXsgMHhlNjk0MDA4NCwgMHhlNjk0MDBjNCwgOCwgLyogSU1SMUEgLyBJTUNSMUEgKi8KKwkgIHsgMCwgQ1JZUFRfU1RELCBESVJDLCAwLAorCSAgICBETUFDMV8xX0RFSTMsIERNQUMxXzFfREVJMiwgRE1BQzFfMV9ERUkxLCBETUFDMV8xX0RFSTAgfSB9LAorCXsgMHhlNjk0MDA4OCwgMHhlNjk0MDBjOCwgOCwgLyogSU1SMkEgLyBJTUNSMkEgKi8KKwkgIHsgMCwgMCwgMCwgMCwKKwkgICAgQkJJRjEsIEJCSUYyLCBNRklfTUZJUywgTUZJX01GSU0gfSB9LAorCXsgMHhlNjk0MDA4YywgMHhlNjk0MDBjYywgOCwgLyogSU1SM0EgLyBJTUNSM0EgKi8KKwkgIHsgRE1BQzNfMV9ERUkzLCBETUFDM18xX0RFSTIsIERNQUMzXzFfREVJMSwgRE1BQzNfMV9ERUkwLAorCSAgICBETUFDM18yX0RBREVSUiwgRE1BQzNfMl9ERUk1LCBETUFDM18yX0RFSTQsIElSREEgfSB9LAorCXsgMHhlNjk0MDA5MCwgMHhlNjk0MDBkMCwgOCwgLyogSU1SNEEgLyBJTUNSNEEgKi8KKwkgIHsgRERNLCAwLCAwLCAwLAorCSAgICAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZTY5NDAwOTQsIDB4ZTY5NDAwZDQsIDgsIC8qIElNUjVBIC8gSU1DUjVBICovCisJICB7IEtFWVNDX0tFWSwgRE1BQzFfMl9EQURFUlIsIERNQUMxXzJfREVJNSwgRE1BQzFfMl9ERUk0LAorCSAgICBTQ0lGQTMsIFNDSUZBMiwgU0NJRkExLCBTQ0lGQTAgfSB9LAorCXsgMHhlNjk0MDA5OCwgMHhlNjk0MDBkOCwgOCwgLyogSU1SNkEgLyBJTUNSNkEgKi8KKwkgIHsgU0NJRkIsIFNDSUZBNSwgU0NJRkE0LCBNU0lPRjEsCisJICAgIDAsIDAsIE1TSU9GMiwgMCB9IH0sCisJeyAweGU2OTQwMDljLCAweGU2OTQwMGRjLCA4LCAvKiBJTVI3QSAvIElNQ1I3QSAqLworCSAgeyBTREhJMF9TREhJMEkzLCBTREhJMF9TREhJMEkyLCBTREhJMF9TREhJMEkxLCBTREhJMF9TREhJMEkwLAorCSAgICBGTENUTF9GTFRSRVExSSwgRkxDVExfRkxUUkVRMEksIEZMQ1RMX0ZMVEVOREksIEZMQ1RMX0ZMU1RFSSB9IH0sCisJeyAweGU2OTQwMGEwLCAweGU2OTQwMGUwLCA4LCAvKiBJTVI4QSAvIElNQ1I4QSAqLworCSAgeyAwLCBTREhJMV9TREhJMUkyLCBTREhJMV9TREhJMUkxLCBTREhJMV9TREhJMUkwLAorCSAgICBUVEkyMCwgVVNCSFNETUFDMF9VU0hETUksIDAsIDAgfSB9LAorCXsgMHhlNjk0MDBhNCwgMHhlNjk0MDBlNCwgOCwgLyogSU1SOUEgLyBJTUNSOUEgKi8KKwkgIHsgQ01UMV9DTVQxMywgQ01UMV9DTVQxMiwgQ01UMV9DTVQxMSwgQ01UMV9DTVQxMCwKKwkgICAgQ01UMiwgMCwgMCwgXzNER19TR1g1NDAgfSB9LAorCXsgMHhlNjk0MDBhOCwgMHhlNjk0MDBlOCwgOCwgLyogSU1SMTBBIC8gSU1DUjEwQSAqLworCSAgeyAwLCBETUFDMl8yX0RBREVSUiwgRE1BQzJfMl9ERUk1LCBETUFDMl8yX0RFSTQsCisJICAgIDAsIDAsIDAsIDAgfSB9LAorCXsgMHhlNjk0MDBhYywgMHhlNjk0MDBlYywgOCwgLyogSU1SMTFBIC8gSU1DUjExQSAqLworCSAgeyBJSUMxX0RURUkxLCBJSUMxX1dBSVRJMSwgSUlDMV9UQUNLSTEsIElJQzFfQUxJMSwKKwkgICAgMCwgMCwgSVJSRU0sIDAgfSB9LAorCXsgMHhlNjk0MDBiMCwgMHhlNjk0MDBmMCwgOCwgLyogSU1SMTJBIC8gSU1DUjEyQSAqLworCSAgeyAwLCAwLCBUUFUwLCAwLAorCSAgICAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZTY5NDAwYjQsIDB4ZTY5NDAwZjQsIDgsIC8qIElNUjEzQSAvIElNQ1IxM0EgKi8KKwkgIHsgU0RISTJfU0RISTJJMywgU0RISTJfU0RISTJJMiwgU0RISTJfU0RISTJJMSwgU0RISTJfU0RISTJJMCwKKwkgICAgMCwgQ01UMywgMCwgUldEVDAgfSB9LAorCXsgMHhlNjk1MDA4MCwgMHhlNjk1MDBjMCwgOCwgLyogSU1SMEEzIC8gSU1DUjBBMyAqLworCSAgeyBTSFdZU1RBVF9SVCwgU0hXWVNUQVRfSFMsIFNIV1lTVEFUX0NPTSwgMCwKKwkgICAgMCwgMCwgMCwgMCB9IH0sCisJeyAweGU2OTUwMDkwLCAweGU2OTUwMGQwLCA4LCAvKiBJTVI0QTMgLyBJTUNSNEEzICovCisJICB7IDAsIDAsIDAsIDAsCisJICAgIDAsIDAsIDAsIEhETUkgfSB9LAorCXsgMHhlNjk1MDA5NCwgMHhlNjk1MDBkNCwgOCwgLyogSU1SNUEzIC8gSU1DUjVBMyAqLworCSAgeyBTUFUyX1NQVTAsIFNQVTJfU1BVMSwgRlNJLCBGTVNJLAorCSAgICAwLCAwLCAwLCBNSVBJX0hTSSB9IH0sCisJeyAweGU2OTUwMDk4LCAweGU2OTUwMGQ4LCA4LCAvKiBJTVI2QTMgLyBJTUNSNkEzICovCisJICB7IDAsIElQTU1VX0lQTU1VRCwgQ0VDXzEsIENFQ18yLAorCSAgICBBUF9BUk1fQ1RJSVJRLCBBUF9BUk1fRE1BRVhURVJSSVJRLAorCSAgICBBUF9BUk1fRE1BSVJRLCBBUF9BUk1fRE1BU0lSUSB9IH0sCisJeyAweGU2OTUwMDljLCAweGU2OTUwMGRjLCA4LCAvKiBJTVI3QTMgLyBJTUNSN0EzICovCisJICB7IE1GSVMyLCBDUE9SVFIyUywgQ01UMTQsIENNVDE1LAorCSAgICAwLCAwLCBNTUNfTU1DX0VSUiwgTU1DX01NQ19OT1IgfSB9LAorCXsgMHhlNjk1MDBhMCwgMHhlNjk1MDBlMCwgOCwgLyogSU1SOEEzIC8gSU1DUjhBMyAqLworCSAgeyBJSUM0X0FMSTQsIElJQzRfVEFDS0k0LCBJSUM0X1dBSVRJNCwgSUlDNF9EVEVJNCwKKwkgICAgSUlDM19BTEkzLCBJSUMzX1RBQ0tJMywgSUlDM19XQUlUSTMsIElJQzNfRFRFSTMgfSB9LAorCXsgMHhlNjk1MDBhNCwgMHhlNjk1MDBlNCwgOCwgLyogSU1SOUEzIC8gSU1DUjlBMyAqLworCSAgeyAwLCAwLCAwLCAwLAorCSAgICBVU0IwX1VTQjBJMSwgVVNCMF9VU0IwSTAsIFVTQjFfVVNCMUkxLCBVU0IxX1VTQjFJMCB9IH0sCisJeyAweGU2OTUwMGE4LCAweGU2OTUwMGU4LCA4LCAvKiBJTVIxMEEzIC8gSU1DUjEwQTMgKi8KKwkgIHsgVVNCSFNETUFDMV9VU0hETUksIDAsIDAsIDAsCisJICAgIDAsIDAsIDAsIDAgfSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3ByaW9fcmVnIGludGNhX3ByaW9fcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKKwl7IDB4ZTY5MDAwMTAsIDAsIDMyLCA0LCAvKiBJTlRQUkkwMEEgKi8KKwkgIHsgSVJRMEEsIElSUTFBLCBJUlEyQSwgSVJRM0EsIElSUTRBLCBJUlE1QSwgSVJRNkEsIElSUTdBIH0gfSwKKwl7IDB4ZTY5MDAwMTQsIDAsIDMyLCA0LCAvKiBJTlRQUkkxMEEgKi8KKwkgIHsgSVJROEEsIElSUTlBLCBJUlExMEEsIElSUTExQSwgSVJRMTJBLCBJUlExM0EsIElSUTE0QSwgSVJRMTVBIH0gfSwKKwl7IDB4ZTY5MDAwMTgsIDAsIDMyLCA0LCAvKiBJTlRQUkkyMEEgKi8KKwkgIHsgSVJRMTZBLCBJUlExN0EsIElSUTE4QSwgSVJRMTlBLCBJUlEyMEEsIElSUTIxQSwgSVJRMjJBLCBJUlEyM0EgfSB9LAorCXsgMHhlNjkwMDAxYywgMCwgMzIsIDQsIC8qIElOVFBSSTMwQSAqLworCSAgeyBJUlEyNEEsIElSUTI1QSwgSVJRMjZBLCBJUlEyN0EsIElSUTI4QSwgSVJRMjlBLCBJUlEzMEEsIElSUTMxQSB9IH0sCisKKwl7IDB4ZTY5NDAwMDAsIDAsIDE2LCA0LCAvKiBJUFJBQSAqLyB7IERNQUMzXzEsIERNQUMzXzIsIENNVDIsIDAgfSB9LAorCXsgMHhlNjk0MDAwNCwgMCwgMTYsIDQsIC8qIElQUkJBICovIHsgSVJEQSwgMCwgQkJJRjEsIEJCSUYyIH0gfSwKKwl7IDB4ZTY5NDAwMDgsIDAsIDE2LCA0LCAvKiBJUFJDQSAqLyB7IDAsIENSWVBUX1NURCwKKwkJCQkJICAgICAgQ01UMV9DTVQxMSwgQVBfQVJNMSB9IH0sCisJeyAweGU2OTQwMDBjLCAwLCAxNiwgNCwgLyogSVBSREEgKi8geyAwLCAwLAorCQkJCQkgICAgICBDTVQxX0NNVDEyLCAwIH0gfSwKKwl7IDB4ZTY5NDAwMTAsIDAsIDE2LCA0LCAvKiBJUFJFQSAqLyB7IERNQUMxXzEsIE1GSV9NRklTLAorCQkJCQkgICAgICBNRklfTUZJTSwgMCB9IH0sCisJeyAweGU2OTQwMDE0LCAwLCAxNiwgNCwgLyogSVBSRkEgKi8geyBLRVlTQ19LRVksIERNQUMxXzIsCisJCQkJCSAgICAgIF8zREdfU0dYNTQwLCBDTVQxX0NNVDEwIH0gfSwKKwl7IDB4ZTY5NDAwMTgsIDAsIDE2LCA0LCAvKiBJUFJHQSAqLyB7IFNDSUZBMCwgU0NJRkExLAorCQkJCQkgICAgICBTQ0lGQTIsIFNDSUZBMyB9IH0sCisJeyAweGU2OTQwMDFjLCAwLCAxNiwgNCwgLyogSVBSR0ggKi8geyBNU0lPRjIsIFVTQkhTRE1BQzBfVVNIRE1JLAorCQkJCQkgICAgICBGTENUTCwgU0RISTAgfSB9LAorCXsgMHhlNjk0MDAyMCwgMCwgMTYsIDQsIC8qIElQUklBICovIHsgTVNJT0YxLCBTQ0lGQTQsCisJCQkJCSAgICAgIDAvKiBNU1UgKi8sIElJQzEgfSB9LAorCXsgMHhlNjk0MDAyNCwgMCwgMTYsIDQsIC8qIElQUkpBICovIHsgRE1BQzJfMSwgRE1BQzJfMiwKKwkJCQkJICAgICAgMC8qIE1TVUcgKi8sIFRUSTIwIH0gfSwKKwl7IDB4ZTY5NDAwMjgsIDAsIDE2LCA0LCAvKiBJUFJLQSAqLyB7IDAsIENNVDFfQ01UMTMsIElSUkVNLCBTREhJMSB9IH0sCisJeyAweGU2OTQwMDJjLCAwLCAxNiwgNCwgLyogSVBSTEEgKi8geyBUUFUwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZTY5NDAwMzAsIDAsIDE2LCA0LCAvKiBJUFJNQSAqLyB7IDAsIENNVDMsIDAsIFJXRFQwIH0gfSwKKwl7IDB4ZTY5NDAwMzQsIDAsIDE2LCA0LCAvKiBJUFJOQSAqLyB7IFNDSUZCLCBTQ0lGQTUsIDAsIERETSB9IH0sCisJeyAweGU2OTQwMDM4LCAwLCAxNiwgNCwgLyogSVBST0EgKi8geyAwLCAwLCBESVJDLCBTREhJMiB9IH0sCisJeyAweGU2OTUwMDAwLCAwLCAxNiwgNCwgLyogSVBSQUEzICovIHsgU0hXWVNUQVQsIDAsIDAsIDAgfSB9LAorCXsgMHhlNjk1MDAyNCwgMCwgMTYsIDQsIC8qIElQUkpBMyAqLyB7IDAsIDAsIDAsIEhETUkgfSB9LAorCXsgMHhlNjk1MDAyOCwgMCwgMTYsIDQsIC8qIElQUktBMyAqLyB7IFNQVTIsIDAsIEZTSSwgRk1TSSB9IH0sCisJeyAweGU2OTUwMDJjLCAwLCAxNiwgNCwgLyogSVBSTEEzICovIHsgMCwgMCwgMCwgTUlQSV9IU0kgfSB9LAorCXsgMHhlNjk1MDAzMCwgMCwgMTYsIDQsIC8qIElQUk1BMyAqLyB7IElQTU1VX0lQTU1VRCwgMCwKKwkJCQkJICAgICAgIENFQ18xLCBDRUNfMiB9IH0sCisJeyAweGU2OTUwMDM0LCAwLCAxNiwgNCwgLyogSVBSTkEzICovIHsgQVBfQVJNMiwgMCwgMCwgMCB9IH0sCisJeyAweGU2OTUwMDM4LCAwLCAxNiwgNCwgLyogSVBST0EzICovIHsgTUZJUzIsIENQT1JUUjJTLAorCQkJCQkgICAgICAgQ01UMTQsIENNVDE1IH0gfSwKKwl7IDB4ZTY5NDAwM2MsIDAsIDE2LCA0LCAvKiBJUFJQQTMgKi8geyAwLCAwLAorCQkJCQkgICAgICAgTU1DX01NQ19FUlIsIE1NQ19NTUNfTk9SIH0gfSwKKwl7IDB4ZTY5NDAwNDAsIDAsIDE2LCA0LCAvKiBJUFJRQTMgKi8geyBJSUM0X0FMSTQsIElJQzRfVEFDS0k0LAorCQkJCQkgICAgICAgSUlDNF9XQUlUSTQsIElJQzRfRFRFSTQgfSB9LAorCXsgMHhlNjk0MDA0NCwgMCwgMTYsIDQsIC8qIElQUlJBMyAqLyB7IElJQzNfQUxJMywgSUlDM19UQUNLSTMsCisJCQkJCSAgICAgICBJSUMzX1dBSVRJMywgSUlDM19EVEVJMyB9IH0sCisJeyAweGU2OTQwMDQ4LCAwLCAxNiwgNCwgLyogSVBSU0EzICovIHsgMC8qRVJJKi8sIDAvKlJYSSovLAorCQkJCQkgICAgICAgMC8qVFhJKi8sIDAvKlRFSSovfSB9LAorCXsgMHhlNjk0MDA0YywgMCwgMTYsIDQsIC8qIElQUlRBMyAqLyB7IFVTQjBfVVNCMEkxLCBVU0IwX1VTQjBJMCwKKwkJCQkJICAgICAgIFVTQjFfVVNCMUkxLCBVU0IxX1VTQjFJMCB9IH0sCisJeyAweGU2OTQwMDUwLCAwLCAxNiwgNCwgLyogSVBSVUEzICovIHsgVVNCSFNETUFDMV9VU0hETUksIDAsIDAsIDAgfSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3NlbnNlX3JlZyBpbnRjYV9zZW5zZV9yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0geworCXsgMHhlNjkwMDAwMCwgMzIsIDQsIC8qIElDUjFBICovCisJICB7IElSUTBBLCBJUlExQSwgSVJRMkEsIElSUTNBLCBJUlE0QSwgSVJRNUEsIElSUTZBLCBJUlE3QSB9IH0sCisJeyAweGU2OTAwMDA0LCAzMiwgNCwgLyogSUNSMkEgKi8KKwkgIHsgSVJROEEsIElSUTlBLCBJUlExMEEsIElSUTExQSwgSVJRMTJBLCBJUlExM0EsIElSUTE0QSwgSVJRMTVBIH0gfSwKKwl7IDB4ZTY5MDAwMDgsIDMyLCA0LCAvKiBJQ1IzQSAqLworCSAgeyBJUlExNkEsIElSUTE3QSwgSVJRMThBLCBJUlExOUEsIElSUTIwQSwgSVJRMjFBLCBJUlEyMkEsIElSUTIzQSB9IH0sCisJeyAweGU2OTAwMDBjLCAzMiwgNCwgLyogSUNSNEEgKi8KKwkgIHsgSVJRMjRBLCBJUlEyNUEsIElSUTI2QSwgSVJRMjdBLCBJUlEyOEEsIElSUTI5QSwgSVJRMzBBLCBJUlEzMUEgfSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIGludGNhX2Fja19yZWdpc3RlcnNbXSBfX2luaXRkYXRhID0geworCXsgMHhlNjkwMDAyMCwgMCwgOCwgLyogSU5UUkVRMDBBICovCisJICB7IElSUTBBLCBJUlExQSwgSVJRMkEsIElSUTNBLCBJUlE0QSwgSVJRNUEsIElSUTZBLCBJUlE3QSB9IH0sCisJeyAweGU2OTAwMDI0LCAwLCA4LCAvKiBJTlRSRVExMEEgKi8KKwkgIHsgSVJROEEsIElSUTlBLCBJUlExMEEsIElSUTExQSwgSVJRMTJBLCBJUlExM0EsIElSUTE0QSwgSVJRMTVBIH0gfSwKKwl7IDB4ZTY5MDAwMjgsIDAsIDgsIC8qIElOVFJFUTIwQSAqLworCSAgeyBJUlExNkEsIElSUTE3QSwgSVJRMThBLCBJUlExOUEsIElSUTIwQSwgSVJRMjFBLCBJUlEyMkEsIElSUTIzQSB9IH0sCisJeyAweGU2OTAwMDJjLCAwLCA4LCAvKiBJTlRSRVEzMEEgKi8KKwkgIHsgSVJRMjRBLCBJUlEyNUEsIElSUTI2QSwgSVJRMjdBLCBJUlEyOEEsIElSUTI5QSwgSVJRMzBBLCBJUlEzMUEgfSB9LAorfTsKKworc3RhdGljIERFQ0xBUkVfSU5UQ19ERVNDX0FDSyhpbnRjYV9kZXNjLCAic2g3MzcyLWludGNhIiwKKwkJCSAgICAgaW50Y2FfdmVjdG9ycywgaW50Y2FfZ3JvdXBzLAorCQkJICAgICBpbnRjYV9tYXNrX3JlZ2lzdGVycywgaW50Y2FfcHJpb19yZWdpc3RlcnMsCisJCQkgICAgIGludGNhX3NlbnNlX3JlZ2lzdGVycywgaW50Y2FfYWNrX3JlZ2lzdGVycyk7CisKK3ZvaWQgX19pbml0IHNoNzM3Ml9pbml0X2lycSh2b2lkKQoreworCXJlZ2lzdGVyX2ludGNfY29udHJvbGxlcigmaW50Y2FfZGVzYyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3Mzc3LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL2ludGMtc2g3Mzc3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI1MDIxYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvaW50Yy1zaDczNzcuYwpAQCAtMCwwICsxLDM1MCBAQAorLyoKKyAqIHNoNzM3NyBwcm9jZXNzb3Igc3VwcG9ydCAtIElOVEMgaGFyZHdhcmUgYmxvY2sKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIE1hZ251cyBEYW1tCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zaF9pbnRjLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKK2VudW0geworCVVOVVNFRF9JTlRDQSA9IDAsCisKKwkvKiBpbnRlcnJ1cHQgc291cmNlcyBJTlRDQSAqLworCUlSUTBBLCBJUlExQSwgSVJRMkEsIElSUTNBLCBJUlE0QSwgSVJRNUEsIElSUTZBLCBJUlE3QSwKKwlJUlE4QSwgSVJROUEsIElSUTEwQSwgSVJRMTFBLCBJUlExMkEsIElSUTEzQSwgSVJRMTRBLCBJUlExNUEsCisJSVJRMTZBLCBJUlExN0EsIElSUTE4QSwgSVJRMTlBLCBJUlEyMEEsIElSUTIxQSwgSVJRMjJBLCBJUlEyM0EsCisJSVJRMjRBLCBJUlEyNUEsIElSUTI2QSwgSVJRMjdBLCBJUlEyOEEsIElSUTI5QSwgSVJRMzBBLCBJUlEzMUEsCisJRElSQywKKwlfMkRHLAorCUNSWVBUX1NURCwKKwlJSUMxX0FMSTEsIElJQzFfVEFDS0kxLCBJSUMxX1dBSVRJMSwgSUlDMV9EVEVJMSwKKwlBUF9BUk1fSVJRUE1VLCBBUF9BUk1fQ09NTVRYLCBBUF9BUk1fQ09NTVJYLAorCU1GSV9NRklNLCBNRklfTUZJUywKKwlCQklGMSwgQkJJRjIsCisJVVNCRE1BQ19VU0hETUksCisJVVNCSFNfVVNISTAsIFVTQkhTX1VTSEkxLAorCV8zREdfU0dYNTQwLAorCUNNVDFfQ01UMTAsIENNVDFfQ01UMTEsIENNVDFfQ01UMTIsIENNVDFfQ01UMTMsIENNVDIsIENNVDMsCisJS0VZU0NfS0VZLAorCVNDSUZBMCwgU0NJRkExLCBTQ0lGQTIsIFNDSUZBMywKKwlNU0lPRjIsIE1TSU9GMSwKKwlTQ0lGQTQsIFNDSUZBNSwgU0NJRkIsCisJRkxDVExfRkxTVEVJLCBGTENUTF9GTFRFTkRJLCBGTENUTF9GTFRSRVEwSSwgRkxDVExfRkxUUkVRMUksCisJU0RISTBfU0RISTBJMCwgU0RISTBfU0RISTBJMSwgU0RISTBfU0RISTBJMiwgU0RISTBfU0RISTBJMywKKwlTREhJMV9TREhJMUkwLCBTREhJMV9TREhJMUkxLCBTREhJMV9TREhJMUkyLCBTREhJMV9TREhJMUkzLAorCU1TVV9NU1UsIE1TVV9NU1UyLAorCUlSUkVNLAorCU1TVUcsCisJSVJEQSwKKwlUUFUwLCBUUFUxLCBUUFUyLCBUUFUzLCBUUFU0LAorCUxDUkMsCisJUElOVENBX1BJTlQxLCBQSU5UQ0FfUElOVDIsCisJVFRJMjAsCisJTUlTVFksCisJRERNLAorCVJXRFQwLCBSV0RUMSwKKwlETUFDXzFfREVJMCwgRE1BQ18xX0RFSTEsIERNQUNfMV9ERUkyLCBETUFDXzFfREVJMywKKwlETUFDXzJfREVJNCwgRE1BQ18yX0RFSTUsIERNQUNfMl9EQURFUlIsCisJRE1BQzJfMV9ERUkwLCBETUFDMl8xX0RFSTEsIERNQUMyXzFfREVJMiwgRE1BQzJfMV9ERUkzLAorCURNQUMyXzJfREVJNCwgRE1BQzJfMl9ERUk1LCBETUFDMl8yX0RBREVSUiwKKwlETUFDM18xX0RFSTAsIERNQUMzXzFfREVJMSwgRE1BQzNfMV9ERUkyLCBETUFDM18xX0RFSTMsCisJRE1BQzNfMl9ERUk0LCBETUFDM18yX0RFSTUsIERNQUMzXzJfREFERVJSLAorCVNIV1lTVEFUX1JULCBTSFdZU1RBVF9IUywgU0hXWVNUQVRfQ09NLAorCUlDVVNCX0lDVVNCMCwgSUNVU0JfSUNVU0IxLAorCUlDVURNQ19JQ1VETUMxLCBJQ1VETUNfSUNVRE1DMiwKKwlTUFUyX1NQVTAsIFNQVTJfU1BVMSwKKwlGU0ksCisJRk1TSSwKKwlTQ1VWLAorCUlQTU1VX0lQTU1VQiwKKwlBUF9BUk1fQ1RJSVJRLCBBUF9BUk1fRE1BRVhURVJSSVJRLCBBUF9BUk1fRE1BSVJRLCBBUF9BUk1fRE1BU0lSUSwKKwlNRklTMiwKKwlDUE9SVFIyUywKKwlDTVQxNCwgQ01UMTUsCisJU0NJRkE2LAorCisJLyogaW50ZXJydXB0IGdyb3VwcyBJTlRDQSAqLworCURNQUNfMSwgRE1BQ18yLAlETUFDMl8xLCBETUFDMl8yLCBETUFDM18xLCBETUFDM18yLCBTSFdZU1RBVCwKKwlBUF9BUk0xLCBBUF9BUk0yLCBVU0JIUywgU1BVMiwgRkxDVEwsIElJQzEsIFNESEkwLCBTREhJMSwKKwlJQ1VTQiwgSUNVRE1DCit9OworCitzdGF0aWMgc3RydWN0IGludGNfdmVjdCBpbnRjYV92ZWN0b3JzW10gPSB7CisJSU5UQ19WRUNUKElSUTBBLCAweDAyMDApLCBJTlRDX1ZFQ1QoSVJRMUEsIDB4MDIyMCksCisJSU5UQ19WRUNUKElSUTJBLCAweDAyNDApLCBJTlRDX1ZFQ1QoSVJRM0EsIDB4MDI2MCksCisJSU5UQ19WRUNUKElSUTRBLCAweDAyODApLCBJTlRDX1ZFQ1QoSVJRNUEsIDB4MDJhMCksCisJSU5UQ19WRUNUKElSUTZBLCAweDAyYzApLCBJTlRDX1ZFQ1QoSVJRN0EsIDB4MDJlMCksCisJSU5UQ19WRUNUKElSUThBLCAweDAzMDApLCBJTlRDX1ZFQ1QoSVJROUEsIDB4MDMyMCksCisJSU5UQ19WRUNUKElSUTEwQSwgMHgwMzQwKSwgSU5UQ19WRUNUKElSUTExQSwgMHgwMzYwKSwKKwlJTlRDX1ZFQ1QoSVJRMTJBLCAweDAzODApLCBJTlRDX1ZFQ1QoSVJRMTNBLCAweDAzYTApLAorCUlOVENfVkVDVChJUlExNEEsIDB4MDNjMCksIElOVENfVkVDVChJUlExNUEsIDB4MDNlMCksCisJSU5UQ19WRUNUKElSUTE2QSwgMHgzMjAwKSwgSU5UQ19WRUNUKElSUTE3QSwgMHgzMjIwKSwKKwlJTlRDX1ZFQ1QoSVJRMThBLCAweDMyNDApLCBJTlRDX1ZFQ1QoSVJRMTlBLCAweDMyNjApLAorCUlOVENfVkVDVChJUlEyMEEsIDB4MzI4MCksIElOVENfVkVDVChJUlEzMUEsIDB4MzJhMCksCisJSU5UQ19WRUNUKElSUTIyQSwgMHgzMmMwKSwgSU5UQ19WRUNUKElSUTIzQSwgMHgzMmUwKSwKKwlJTlRDX1ZFQ1QoSVJRMjRBLCAweDMzMDApLCBJTlRDX1ZFQ1QoSVJRMjVBLCAweDMzMjApLAorCUlOVENfVkVDVChJUlEyNkEsIDB4MzM0MCksIElOVENfVkVDVChJUlEyN0EsIDB4MzM2MCksCisJSU5UQ19WRUNUKElSUTI4QSwgMHgzMzgwKSwgSU5UQ19WRUNUKElSUTI5QSwgMHgzM2EwKSwKKwlJTlRDX1ZFQ1QoSVJRMzBBLCAweDMzYzApLCBJTlRDX1ZFQ1QoSVJRMzFBLCAweDMzZTApLAorCUlOVENfVkVDVChESVJDLCAweDA1NjApLAorCUlOVENfVkVDVChfMkRHLCAweDA1ZTApLAorCUlOVENfVkVDVChDUllQVF9TVEQsIDB4MDcwMCksCisJSU5UQ19WRUNUKElJQzFfQUxJMSwgMHgwNzgwKSwgSU5UQ19WRUNUKElJQzFfVEFDS0kxLCAweDA3YTApLAorCUlOVENfVkVDVChJSUMxX1dBSVRJMSwgMHgwN2MwKSwgSU5UQ19WRUNUKElJQzFfRFRFSTEsIDB4MDdlMCksCisJSU5UQ19WRUNUKEFQX0FSTV9JUlFQTVUsIDB4MDgwMCksIElOVENfVkVDVChBUF9BUk1fQ09NTVRYLCAweDA4NDApLAorCUlOVENfVkVDVChBUF9BUk1fQ09NTVJYLCAweDA4NjApLAorCUlOVENfVkVDVChNRklfTUZJTSwgMHgwOTAwKSwgSU5UQ19WRUNUKE1GSV9NRklTLCAweDA5MjApLAorCUlOVENfVkVDVChCQklGMSwgMHgwOTQwKSwgSU5UQ19WRUNUKEJCSUYyLCAweDA5NjApLAorCUlOVENfVkVDVChVU0JETUFDX1VTSERNSSwgMHgwYTAwKSwKKwlJTlRDX1ZFQ1QoVVNCSFNfVVNISTAsIDB4MGEyMCksIElOVENfVkVDVChVU0JIU19VU0hJMSwgMHgwYTQwKSwKKwlJTlRDX1ZFQ1QoXzNER19TR1g1NDAsIDB4MGE2MCksCisJSU5UQ19WRUNUKENNVDFfQ01UMTAsIDB4MGIwMCksIElOVENfVkVDVChDTVQxX0NNVDExLCAweDBiMjApLAorCUlOVENfVkVDVChDTVQxX0NNVDEyLCAweDBiNDApLCBJTlRDX1ZFQ1QoQ01UMV9DTVQxMywgMHgwYjYwKSwKKwlJTlRDX1ZFQ1QoQ01UMiwgMHgwYjgwKSwgSU5UQ19WRUNUKENNVDMsIDB4MGJhMCksCisJSU5UQ19WRUNUKEtFWVNDX0tFWSwgMHgwYmUwKSwKKwlJTlRDX1ZFQ1QoU0NJRkEwLCAweDBjMDApLCBJTlRDX1ZFQ1QoU0NJRkExLCAweDBjMjApLAorCUlOVENfVkVDVChTQ0lGQTIsIDB4MGM0MCksIElOVENfVkVDVChTQ0lGQTMsIDB4MGM2MCksCisJSU5UQ19WRUNUKE1TSU9GMiwgMHgwYzgwKSwgSU5UQ19WRUNUKE1TSU9GMSwgMHgwZDAwKSwKKwlJTlRDX1ZFQ1QoU0NJRkE0LCAweDBkMjApLCBJTlRDX1ZFQ1QoU0NJRkE1LCAweDBkNDApLAorCUlOVENfVkVDVChTQ0lGQiwgMHgwZDYwKSwKKwlJTlRDX1ZFQ1QoRkxDVExfRkxTVEVJLCAweDBkODApLCBJTlRDX1ZFQ1QoRkxDVExfRkxURU5ESSwgMHgwZGEwKSwKKwlJTlRDX1ZFQ1QoRkxDVExfRkxUUkVRMEksIDB4MGRjMCksIElOVENfVkVDVChGTENUTF9GTFRSRVExSSwgMHgwZGUwKSwKKwlJTlRDX1ZFQ1QoU0RISTBfU0RISTBJMCwgMHgwZTAwKSwgSU5UQ19WRUNUKFNESEkwX1NESEkwSTEsIDB4MGUyMCksCisJSU5UQ19WRUNUKFNESEkwX1NESEkwSTIsIDB4MGU0MCksIElOVENfVkVDVChTREhJMF9TREhJMEkzLCAweDBlNjApLAorCUlOVENfVkVDVChTREhJMV9TREhJMUkwLCAweDBlODApLCBJTlRDX1ZFQ1QoU0RISTFfU0RISTFJMSwgMHgwZWEwKSwKKwlJTlRDX1ZFQ1QoU0RISTFfU0RISTFJMiwgMHgwZWMwKSwgSU5UQ19WRUNUKFNESEkxX1NESEkxSTMsIDB4MGVlMCksCisJSU5UQ19WRUNUKE1TVV9NU1UsIDB4MGYyMCksIElOVENfVkVDVChNU1VfTVNVMiwgMHgwZjQwKSwKKwlJTlRDX1ZFQ1QoSVJSRU0sIDB4MGY2MCksCisJSU5UQ19WRUNUKE1TVUcsIDB4MGZhMCksCisJSU5UQ19WRUNUKElSREEsIDB4MDQ4MCksCisJSU5UQ19WRUNUKFRQVTAsIDB4MDRhMCksIElOVENfVkVDVChUUFUxLCAweDA0YzApLAorCUlOVENfVkVDVChUUFUyLCAweDA0ZTApLCBJTlRDX1ZFQ1QoVFBVMywgMHgwNTAwKSwKKwlJTlRDX1ZFQ1QoVFBVNCwgMHgwNTIwKSwKKwlJTlRDX1ZFQ1QoTENSQywgMHgwNTQwKSwKKwlJTlRDX1ZFQ1QoUElOVENBX1BJTlQxLCAweDEwMDApLCBJTlRDX1ZFQ1QoUElOVENBX1BJTlQyLCAweDEwMjApLAorCUlOVENfVkVDVChUVEkyMCwgMHgxMTAwKSwKKwlJTlRDX1ZFQ1QoTUlTVFksIDB4MTEyMCksCisJSU5UQ19WRUNUKERETSwgMHgxMTQwKSwKKwlJTlRDX1ZFQ1QoUldEVDAsIDB4MTI4MCksIElOVENfVkVDVChSV0RUMSwgMHgxMmEwKSwKKwlJTlRDX1ZFQ1QoRE1BQ18xX0RFSTAsIDB4MjAwMCksIElOVENfVkVDVChETUFDXzFfREVJMSwgMHgyMDIwKSwKKwlJTlRDX1ZFQ1QoRE1BQ18xX0RFSTIsIDB4MjA0MCksIElOVENfVkVDVChETUFDXzFfREVJMywgMHgyMDYwKSwKKwlJTlRDX1ZFQ1QoRE1BQ18yX0RFSTQsIDB4MjA4MCksIElOVENfVkVDVChETUFDXzJfREVJNSwgMHgyMGEwKSwKKwlJTlRDX1ZFQ1QoRE1BQ18yX0RBREVSUiwgMHgyMGMwKSwKKwlJTlRDX1ZFQ1QoRE1BQzJfMV9ERUkwLCAweDIxMDApLCBJTlRDX1ZFQ1QoRE1BQzJfMV9ERUkxLCAweDIxMjApLAorCUlOVENfVkVDVChETUFDMl8xX0RFSTIsIDB4MjE0MCksIElOVENfVkVDVChETUFDMl8xX0RFSTMsIDB4MjE2MCksCisJSU5UQ19WRUNUKERNQUMyXzJfREVJNCwgMHgyMTgwKSwgSU5UQ19WRUNUKERNQUMyXzJfREVJNSwgMHgyMWEwKSwKKwlJTlRDX1ZFQ1QoRE1BQzJfMl9EQURFUlIsIDB4MjFjMCksCisJSU5UQ19WRUNUKERNQUMzXzFfREVJMCwgMHgyMjAwKSwgSU5UQ19WRUNUKERNQUMzXzFfREVJMSwgMHgyMjIwKSwKKwlJTlRDX1ZFQ1QoRE1BQzNfMV9ERUkyLCAweDIyNDApLCBJTlRDX1ZFQ1QoRE1BQzNfMV9ERUkzLCAweDIyNjApLAorCUlOVENfVkVDVChETUFDM18yX0RFSTQsIDB4MjI4MCksIElOVENfVkVDVChETUFDM18yX0RFSTUsIDB4MjJhMCksCisJSU5UQ19WRUNUKERNQUMzXzJfREFERVJSLCAweDIyYzApLAorCUlOVENfVkVDVChTSFdZU1RBVF9SVCwgMHgxMzAwKSwgSU5UQ19WRUNUKFNIV1lTVEFUX0hTLCAweDFkMjApLAorCUlOVENfVkVDVChTSFdZU1RBVF9DT00sIDB4MTM0MCksCisJSU5UQ19WRUNUKElDVVNCX0lDVVNCMCwgMHgxNzAwKSwgSU5UQ19WRUNUKElDVVNCX0lDVVNCMSwgMHgxNzIwKSwKKwlJTlRDX1ZFQ1QoSUNVRE1DX0lDVURNQzEsIDB4MTc4MCksIElOVENfVkVDVChJQ1VETUNfSUNVRE1DMiwgMHgxN2EwKSwKKwlJTlRDX1ZFQ1QoU1BVMl9TUFUwLCAweDE4MDApLCBJTlRDX1ZFQ1QoU1BVMl9TUFUxLCAweDE4MjApLAorCUlOVENfVkVDVChGU0ksIDB4MTg0MCksCisJSU5UQ19WRUNUKEZNU0ksIDB4MTg2MCksCisJSU5UQ19WRUNUKFNDVVYsIDB4MTg4MCksCisJSU5UQ19WRUNUKElQTU1VX0lQTU1VQiwgMHgxOTAwKSwKKwlJTlRDX1ZFQ1QoQVBfQVJNX0NUSUlSUSwgMHgxOTgwKSwKKwlJTlRDX1ZFQ1QoQVBfQVJNX0RNQUVYVEVSUklSUSwgMHgxOWEwKSwKKwlJTlRDX1ZFQ1QoQVBfQVJNX0RNQUlSUSwgMHgxOWMwKSwKKwlJTlRDX1ZFQ1QoQVBfQVJNX0RNQVNJUlEsIDB4MTllMCksCisJSU5UQ19WRUNUKE1GSVMyLCAweDFhMDApLAorCUlOVENfVkVDVChDUE9SVFIyUywgMHgxYTIwKSwKKwlJTlRDX1ZFQ1QoQ01UMTQsIDB4MWE0MCksIElOVENfVkVDVChDTVQxNSwgMHgxYTYwKSwKKwlJTlRDX1ZFQ1QoU0NJRkE2LCAweDFhODApLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX2dyb3VwIGludGNhX2dyb3Vwc1tdIF9faW5pdGRhdGEgPSB7CisJSU5UQ19HUk9VUChETUFDXzEsIERNQUNfMV9ERUkwLAorCQkgICBETUFDXzFfREVJMSwgRE1BQ18xX0RFSTIsIERNQUNfMV9ERUkzKSwKKwlJTlRDX0dST1VQKERNQUNfMiwgRE1BQ18yX0RFSTQsCisJCSAgIERNQUNfMl9ERUk1LCBETUFDXzJfREFERVJSKSwKKwlJTlRDX0dST1VQKERNQUMyXzEsIERNQUMyXzFfREVJMCwKKwkJICAgRE1BQzJfMV9ERUkxLCBETUFDMl8xX0RFSTIsIERNQUMyXzFfREVJMyksCisJSU5UQ19HUk9VUChETUFDMl8yLCBETUFDMl8yX0RFSTQsCisJCSAgIERNQUMyXzJfREVJNSwgRE1BQzJfMl9EQURFUlIpLAorCUlOVENfR1JPVVAoRE1BQzNfMSwgRE1BQzNfMV9ERUkwLAorCQkgICBETUFDM18xX0RFSTEsIERNQUMzXzFfREVJMiwgRE1BQzNfMV9ERUkzKSwKKwlJTlRDX0dST1VQKERNQUMzXzIsIERNQUMzXzJfREVJNCwKKwkJICAgRE1BQzNfMl9ERUk1LCBETUFDM18yX0RBREVSUiksCisJSU5UQ19HUk9VUChBUF9BUk0xLCBBUF9BUk1fSVJRUE1VLCBBUF9BUk1fQ09NTVRYLCBBUF9BUk1fQ09NTVRYKSwKKwlJTlRDX0dST1VQKFVTQkhTLCBVU0JIU19VU0hJMCwgVVNCSFNfVVNISTEpLAorCUlOVENfR1JPVVAoU1BVMiwgU1BVMl9TUFUwLCBTUFUyX1NQVTEpLAorCUlOVENfR1JPVVAoRkxDVEwsIEZMQ1RMX0ZMU1RFSSwgRkxDVExfRkxURU5ESSwKKwkJICAgRkxDVExfRkxUUkVRMEksIEZMQ1RMX0ZMVFJFUTFJKSwKKwlJTlRDX0dST1VQKElJQzEsIElJQzFfQUxJMSwgSUlDMV9UQUNLSTEsIElJQzFfV0FJVEkxLCBJSUMxX0RURUkxKSwKKwlJTlRDX0dST1VQKFNESEkwLCBTREhJMF9TREhJMEkwLCBTREhJMF9TREhJMEkxLAorCQkgICBTREhJMF9TREhJMEkyLCBTREhJMF9TREhJMEkzKSwKKwlJTlRDX0dST1VQKFNESEkxLCBTREhJMV9TREhJMUkwLCBTREhJMV9TREhJMUkxLAorCQkgICBTREhJMV9TREhJMUkyLCBTREhJMV9TREhJMUkzKSwKKwlJTlRDX0dST1VQKFNIV1lTVEFULCBTSFdZU1RBVF9SVCwgU0hXWVNUQVRfSFMsIFNIV1lTVEFUX0NPTSksCisJSU5UQ19HUk9VUChJQ1VTQiwgSUNVU0JfSUNVU0IwLCBJQ1VTQl9JQ1VTQjEpLAorCUlOVENfR1JPVVAoSUNVRE1DLCBJQ1VETUNfSUNVRE1DMSwgSUNVRE1DX0lDVURNQzIpLAorfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX21hc2tfcmVnIGludGNhX21hc2tfcmVnaXN0ZXJzW10gPSB7CisJeyAweGU2OTAwMDQwLCAweGU2OTAwMDYwLCA4LCAvKiBJTlRNU0swMEEgLyBJTlRNU0tDTFIwMEEgKi8KKwkgIHsgSVJRMEEsIElSUTFBLCBJUlEyQSwgSVJRM0EsIElSUTRBLCBJUlE1QSwgSVJRNkEsIElSUTdBIH0gfSwKKwl7IDB4ZTY5MDAwNDQsIDB4ZTY5MDAwNjQsIDgsIC8qIElOVE1TSzEwQSAvIElOVE1TS0NMUjEwQSAqLworCSAgeyBJUlE4QSwgSVJROUEsIElSUTEwQSwgSVJRMTFBLCBJUlExMkEsIElSUTEzQSwgSVJRMTRBLCBJUlExNUEgfSB9LAorCXsgMHhlNjkwMDA0OCwgMHhlNjkwMDA2OCwgOCwgLyogSU5UTVNLMjBBIC8gSU5UTVNLQ0xSMjBBICovCisJICB7IElSUTE2QSwgSVJRMTdBLCBJUlExOEEsIElSUTE5QSwgSVJRMjBBLCBJUlEyMUEsIElSUTIyQSwgSVJRMjNBIH0gfSwKKwl7IDB4ZTY5MDAwNGMsIDB4ZTY5MDAwNmMsIDgsIC8qIElOVE1TSzMwQSAvIElOVE1TS0NMUjMwQSAqLworCSAgeyBJUlEyNEEsIElSUTI1QSwgSVJRMjZBLCBJUlEyN0EsIElSUTI4QSwgSVJRMjlBLCBJUlEzMEEsIElSUTMxQSB9IH0sCisKKwl7IDB4ZTY5NDAwODAsIDB4ZTY5NDAwYzAsIDgsIC8qIElNUjBBIC8gSU1DUjBBICovCisJICB7IERNQUMyXzFfREVJMywgRE1BQzJfMV9ERUkyLCBETUFDMl8xX0RFSTEsIERNQUMyXzFfREVJMCwKKwkgICAgQVBfQVJNX0lSUVBNVSwgMCwgQVBfQVJNX0NPTU1UWCwgQVBfQVJNX0NPTU1SWCB9IH0sCisJeyAweGU2OTQwMDg0LCAweGU2OTQwMGM0LCA4LCAvKiBJTVIxQSAvIElNQ1IxQSAqLworCSAgeyBfMkRHLCBDUllQVF9TVEQsIERJUkMsIDAsCisJICAgIERNQUNfMV9ERUkzLCBETUFDXzFfREVJMiwgRE1BQ18xX0RFSTEsIERNQUNfMV9ERUkwIH0gfSwKKwl7IDB4ZTY5NDAwODgsIDB4ZTY5NDAwYzgsIDgsIC8qIElNUjJBIC8gSU1DUjJBICovCisJICB7IFBJTlRDQV9QSU5UMSwgUElOVENBX1BJTlQyLCAwLCAwLAorCSAgICBCQklGMSwgQkJJRjIsIE1GSV9NRklTLCBNRklfTUZJTSB9IH0sCisJeyAweGU2OTQwMDhjLCAweGU2OTQwMGNjLCA4LCAvKiBJTVIzQSAvIElNQ1IzQSAqLworCSAgeyBETUFDM18xX0RFSTMsIERNQUMzXzFfREVJMiwgRE1BQzNfMV9ERUkxLCBETUFDM18xX0RFSTAsCisJICAgIERNQUMzXzJfREFERVJSLCBETUFDM18yX0RFSTUsIERNQUMzXzJfREVJNCwgSVJEQSB9IH0sCisJeyAweGU2OTQwMDkwLCAweGU2OTQwMGQwLCA4LCAvKiBJTVI0QSAvIElNQ1I0QSAqLworCSAgeyBERE0sIDAsIDAsIDAsCisJICAgIDAsIDAsIDAsIDAgfSB9LAorCXsgMHhlNjk0MDA5NCwgMHhlNjk0MDBkNCwgOCwgLyogSU1SNUEgLyBJTUNSNUEgKi8KKwkgIHsgS0VZU0NfS0VZLCBETUFDXzJfREFERVJSLCBETUFDXzJfREVJNSwgRE1BQ18yX0RFSTQsCisJICAgIFNDSUZBMywgU0NJRkEyLCBTQ0lGQTEsIFNDSUZBMCB9IH0sCisJeyAweGU2OTQwMDk4LCAweGU2OTQwMGQ4LCA4LCAvKiBJTVI2QSAvIElNQ1I2QSAqLworCSAgeyBTQ0lGQiwgU0NJRkE1LCBTQ0lGQTQsIE1TSU9GMSwKKwkgICAgMCwgMCwgTVNJT0YyLCAwIH0gfSwKKwl7IDB4ZTY5NDAwOWMsIDB4ZTY5NDAwZGMsIDgsIC8qIElNUjdBIC8gSU1DUjdBICovCisJICB7IFNESEkwX1NESEkwSTMsIFNESEkwX1NESEkwSTIsIFNESEkwX1NESEkwSTEsIFNESEkwX1NESEkwSTAsCisJICAgIEZMQ1RMX0ZMVFJFUTFJLCBGTENUTF9GTFRSRVEwSSwgRkxDVExfRkxURU5ESSwgRkxDVExfRkxTVEVJIH0gfSwKKwl7IDB4ZTY5NDAwYTAsIDB4ZTY5NDAwZTAsIDgsIC8qIElNUjhBIC8gSU1DUjhBICovCisJICB7IFNESEkxX1NESEkxSTMsIFNESEkxX1NESEkxSTIsIFNESEkxX1NESEkxSTEsIFNESEkxX1NESEkxSTAsCisJICAgIFRUSTIwLCBVU0JETUFDX1VTSERNSSwgMCwgTVNVRyB9IH0sCisJeyAweGU2OTQwMGE0LCAweGU2OTQwMGU0LCA4LCAvKiBJTVI5QSAvIElNQ1I5QSAqLworCSAgeyBDTVQxX0NNVDEzLCBDTVQxX0NNVDEyLCBDTVQxX0NNVDExLCBDTVQxX0NNVDEwLAorCSAgICBDTVQyLCBVU0JIU19VU0hJMSwgVVNCSFNfVVNISTAsIF8zREdfU0dYNTQwIH0gfSwKKwl7IDB4ZTY5NDAwYTgsIDB4ZTY5NDAwZTgsIDgsIC8qIElNUjEwQSAvIElNQ1IxMEEgKi8KKwkgIHsgMCwgRE1BQzJfMl9EQURFUlIsIERNQUMyXzJfREVJNSwgRE1BQzJfMl9ERUk0LAorCSAgICAwLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZTY5NDAwYWMsIDB4ZTY5NDAwZWMsIDgsIC8qIElNUjExQSAvIElNQ1IxMUEgKi8KKwkgIHsgSUlDMV9EVEVJMSwgSUlDMV9XQUlUSTEsIElJQzFfVEFDS0kxLCBJSUMxX0FMSTEsCisJICAgIExDUkMsIE1TVV9NU1UyLCBJUlJFTSwgTVNVX01TVSB9IH0sCisJeyAweGU2OTQwMGIwLCAweGU2OTQwMGYwLCA4LCAvKiBJTVIxMkEgLyBJTUNSMTJBICovCisJICB7IDAsIDAsIFRQVTAsIFRQVTEsCisJICAgIFRQVTIsIFRQVTMsIFRQVTQsIDAgfSB9LAorCXsgMHhlNjk0MDBiNCwgMHhlNjk0MDBmNCwgOCwgLyogSU1SMTNBIC8gSU1DUjEzQSAqLworCSAgeyAwLCAwLCAwLCAwLAorCSAgICBNSVNUWSwgQ01UMywgUldEVDEsIFJXRFQwIH0gfSwKKwl7IDB4ZTY5NTAwODAsIDB4ZTY5NTAwYzAsIDgsIC8qIElNUjBBMyAvIElNQ1IwQTMgKi8KKwkgIHsgU0hXWVNUQVRfUlQsIFNIV1lTVEFUX0hTLCBTSFdZU1RBVF9DT00sIDAsCisJICAgIDAsIDAsIDAsIDAgfSB9LAorCXsgMHhlNjk1MDA5MCwgMHhlNjk1MDBkMCwgOCwgLyogSU1SNEEzIC8gSU1DUjRBMyAqLworCSAgeyBJQ1VTQl9JQ1VTQjAsIElDVVNCX0lDVVNCMSwgMCwgMCwKKwkgICAgSUNVRE1DX0lDVURNQzEsIElDVURNQ19JQ1VETUMyLCAwLCAwIH0gfSwKKwl7IDB4ZTY5NTAwOTQsIDB4ZTY5NTAwZDQsIDgsIC8qIElNUjVBMyAvIElNQ1I1QTMgKi8KKwkgIHsgU1BVMl9TUFUwLCBTUFUyX1NQVTEsIEZTSSwgRk1TSSwKKwkgICAgU0NVViwgMCwgMCwgMCB9IH0sCisJeyAweGU2OTUwMDk4LCAweGU2OTUwMGQ4LCA4LCAvKiBJTVI2QTMgLyBJTUNSNkEzICovCisJICB7IElQTU1VX0lQTU1VQiwgMCwgMCwgMCwKKwkgICAgQVBfQVJNX0NUSUlSUSwgQVBfQVJNX0RNQUVYVEVSUklSUSwKKwkgICAgQVBfQVJNX0RNQUlSUSwgQVBfQVJNX0RNQVNJUlEgfSB9LAorCXsgMHhlNjk1MDA5YywgMHhlNjk1MDBkYywgOCwgLyogSU1SN0EzIC8gSU1DUjdBMyAqLworCSAgeyBNRklTMiwgQ1BPUlRSMlMsIENNVDE0LCBDTVQxNSwKKwkgICAgU0NJRkE2LCAwLCAwLCAwIH0gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19wcmlvX3JlZyBpbnRjYV9wcmlvX3JlZ2lzdGVyc1tdID0geworCXsgMHhlNjkwMDAxMCwgMCwgMzIsIDQsIC8qIElOVFBSSTAwQSAqLworCSAgeyBJUlEwQSwgSVJRMUEsIElSUTJBLCBJUlEzQSwgSVJRNEEsIElSUTVBLCBJUlE2QSwgSVJRN0EgfSB9LAorCXsgMHhlNjkwMDAxNCwgMCwgMzIsIDQsIC8qIElOVFBSSTEwQSAqLworCSAgeyBJUlE4QSwgSVJROUEsIElSUTEwQSwgSVJRMTFBLCBJUlExMkEsIElSUTEzQSwgSVJRMTRBLCBJUlExNUEgfSB9LAorCXsgMHhlNjkwMDAxOCwgMCwgMzIsIDQsIC8qIElOVFBSSTEwQSAqLworCSAgeyBJUlExNkEsIElSUTE3QSwgSVJRMThBLCBJUlExOUEsIElSUTIwQSwgSVJRMjFBLCBJUlEyMkEsIElSUTIzQSB9IH0sCisJeyAweGU2OTAwMDFjLCAwLCAzMiwgNCwgLyogSU5UUFJJMzBBICovCisJICB7IElSUTI0QSwgSVJRMjVBLCBJUlEyNkEsIElSUTI3QSwgSVJRMjhBLCBJUlEyOUEsIElSUTMwQSwgSVJRMzFBIH0gfSwKKworCXsgMHhlNjk0MDAwMCwgMCwgMTYsIDQsIC8qIElQUkFBICovIHsgRE1BQzNfMSwgRE1BQzNfMiwgQ01UMiwgTENSQyB9IH0sCisJeyAweGU2OTQwMDA0LCAwLCAxNiwgNCwgLyogSVBSQkEgKi8geyBJUkRBLCAwLCBCQklGMSwgQkJJRjIgfSB9LAorCXsgMHhlNjk0MDAwOCwgMCwgMTYsIDQsIC8qIElQUkNBICovIHsgXzJERywgQ1JZUFRfU1RELAorCQkJCQkgICAgICBDTVQxX0NNVDExLCBBUF9BUk0xIH0gfSwKKwl7IDB4ZTY5NDAwMGMsIDAsIDE2LCA0LCAvKiBJUFJEQSAqLyB7IFBJTlRDQV9QSU5UMSwgUElOVENBX1BJTlQyLAorCQkJCQkgICAgICBDTVQxX0NNVDEyLCBUUFU0IH0gfSwKKwl7IDB4ZTY5NDAwMTAsIDAsIDE2LCA0LCAvKiBJUFJFQSAqLyB7IERNQUNfMSwgTUZJX01GSVMsCisJCQkJCSAgICAgIE1GSV9NRklNLCBVU0JIUyB9IH0sCisJeyAweGU2OTQwMDE0LCAwLCAxNiwgNCwgLyogSVBSRkEgKi8geyBLRVlTQ19LRVksIERNQUNfMiwKKwkJCQkJICAgICAgXzNER19TR1g1NDAsIENNVDFfQ01UMTAgfSB9LAorCXsgMHhlNjk0MDAxOCwgMCwgMTYsIDQsIC8qIElQUkdBICovIHsgU0NJRkEwLCBTQ0lGQTEsCisJCQkJCSAgICAgIFNDSUZBMiwgU0NJRkEzIH0gfSwKKwl7IDB4ZTY5NDAwMWMsIDAsIDE2LCA0LCAvKiBJUFJHSCAqLyB7IE1TSU9GMiwgVVNCRE1BQ19VU0hETUksCisJCQkJCSAgICAgIEZMQ1RMLCBTREhJMCB9IH0sCisJeyAweGU2OTQwMDIwLCAwLCAxNiwgNCwgLyogSVBSSUEgKi8geyBNU0lPRjEsIFNDSUZBNCwgTVNVX01TVSwgSUlDMSB9IH0sCisJeyAweGU2OTQwMDI0LCAwLCAxNiwgNCwgLyogSVBSSkEgKi8geyBETUFDMl8xLCBETUFDMl8yLCBNU1VHLCBUVEkyMCB9IH0sCisJeyAweGU2OTQwMDI4LCAwLCAxNiwgNCwgLyogSVBSS0EgKi8geyAwLCBDTVQxX0NNVDEzLCBJUlJFTSwgU0RISTEgfSB9LAorCXsgMHhlNjk0MDAyYywgMCwgMTYsIDQsIC8qIElQUkxBICovIHsgVFBVMCwgVFBVMSwgVFBVMiwgVFBVMyB9IH0sCisJeyAweGU2OTQwMDMwLCAwLCAxNiwgNCwgLyogSVBSTUEgKi8geyBNSVNUWSwgQ01UMywgUldEVDEsIFJXRFQwIH0gfSwKKwl7IDB4ZTY5NDAwMzQsIDAsIDE2LCA0LCAvKiBJUFJOQSAqLyB7IFNDSUZCLCBTQ0lGQTUsIDAsIERETSB9IH0sCisJeyAweGU2OTQwMDM4LCAwLCAxNiwgNCwgLyogSVBST0EgKi8geyAwLCAwLCBESVJDLCAwIH0gfSwKKwl7IDB4ZTY5NTAwMDAsIDAsIDE2LCA0LCAvKiBJUFJBQTMgKi8geyBTSFdZU1RBVCwgMCwgMCwgMCB9IH0sCisJeyAweGU2OTUwMDIwLCAwLCAxNiwgNCwgLyogSVBSSUEzICovIHsgSUNVU0IsIDAsIDAsIDAgfSB9LAorCXsgMHhlNjk1MDAyNCwgMCwgMTYsIDQsIC8qIElQUkpBMyAqLyB7IElDVURNQywgMCwgMCwgMCB9IH0sCisJeyAweGU2OTUwMDI4LCAwLCAxNiwgNCwgLyogSVBSS0EzICovIHsgU1BVMiwgMCwgRlNJLCBGTVNJIH0gfSwKKwl7IDB4ZTY5NTAwMmMsIDAsIDE2LCA0LCAvKiBJUFJMQTMgKi8geyBTQ1VWLCAwLCAwLCAwIH0gfSwKKwl7IDB4ZTY5NTAwMzAsIDAsIDE2LCA0LCAvKiBJUFJNQTMgKi8geyBJUE1NVV9JUE1NVUIsIDAsIDAsIDAgfSB9LAorCXsgMHhlNjk1MDAzNCwgMCwgMTYsIDQsIC8qIElQUk5BMyAqLyB7IEFQX0FSTTIsIDAsIDAsIDAgfSB9LAorCXsgMHhlNjk1MDAzOCwgMCwgMTYsIDQsIC8qIElQUk9BMyAqLyB7IE1GSVMyLCBDUE9SVFIyUywKKwkJCQkJICAgICAgIENNVDE0LCBDTVQxNSB9IH0sCisJeyAweGU2OTQwMDNjLCAwLCAxNiwgNCwgLyogSVBSUEEzICovIHsgU0NJRkE2LCAwLCAwLCAwIH0gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19zZW5zZV9yZWcgaW50Y2Ffc2Vuc2VfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKKwl7IDB4ZTY5MDAwMDAsIDE2LCAyLCAvKiBJQ1IxQSAqLworCSAgeyBJUlEwQSwgSVJRMUEsIElSUTJBLCBJUlEzQSwgSVJRNEEsIElSUTVBLCBJUlE2QSwgSVJRN0EgfSB9LAorCXsgMHhlNjkwMDAwNCwgMTYsIDIsIC8qIElDUjJBICovCisJICB7IElSUThBLCBJUlE5QSwgSVJRMTBBLCBJUlExMUEsIElSUTEyQSwgSVJRMTNBLCBJUlExNEEsIElSUTE1QSB9IH0sCisJeyAweGU2OTAwMDA4LCAxNiwgMiwgLyogSUNSM0EgKi8KKwkgIHsgSVJRMTZBLCBJUlExN0EsIElSUTE4QSwgSVJRMTlBLCBJUlEyMEEsIElSUTIxQSwgSVJRMjJBLCBJUlEyM0EgfSB9LAorCXsgMHhlNjkwMDAwYywgMTYsIDIsIC8qIElDUjRBICovCisJICB7IElSUTI0QSwgSVJRMjVBLCBJUlEyNkEsIElSUTI3QSwgSVJRMjhBLCBJUlEyOUEsIElSUTMwQSwgSVJRMzFBIH0gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y19tYXNrX3JlZyBpbnRjYV9hY2tfcmVnaXN0ZXJzW10gX19pbml0ZGF0YSA9IHsKKwl7IDB4ZTY5MDAwMjAsIDAsIDgsIC8qIElOVFJFUTAwQSAqLworCSAgeyBJUlEwQSwgSVJRMUEsIElSUTJBLCBJUlEzQSwgSVJRNEEsIElSUTVBLCBJUlE2QSwgSVJRN0EgfSB9LAorCXsgMHhlNjkwMDAyNCwgMCwgOCwgLyogSU5UUkVRMTBBICovCisJICB7IElSUThBLCBJUlE5QSwgSVJRMTBBLCBJUlExMUEsIElSUTEyQSwgSVJRMTNBLCBJUlExNEEsIElSUTE1QSB9IH0sCisJeyAweGU2OTAwMDI4LCAwLCA4LCAvKiBJTlRSRVEyMEEgKi8KKwkgIHsgSVJRMTZBLCBJUlExN0EsIElSUTE4QSwgSVJRMTlBLCBJUlEyMEEsIElSUTIxQSwgSVJRMjJBLCBJUlEyM0EgfSB9LAorCXsgMHhlNjkwMDAyYywgMCwgOCwgLyogSU5UUkVRMzBBICovCisJICB7IElSUTI0QSwgSVJRMjVBLCBJUlEyNkEsIElSUTI3QSwgSVJRMjhBLCBJUlEyOUEsIElSUTMwQSwgSVJRMzFBIH0gfSwKK307CisKK3N0YXRpYyBERUNMQVJFX0lOVENfREVTQ19BQ0soaW50Y2FfZGVzYywgInNoNzM3Ny1pbnRjYSIsCisJCQkgICAgIGludGNhX3ZlY3RvcnMsIGludGNhX2dyb3VwcywKKwkJCSAgICAgaW50Y2FfbWFza19yZWdpc3RlcnMsIGludGNhX3ByaW9fcmVnaXN0ZXJzLAorCQkJICAgICBpbnRjYV9zZW5zZV9yZWdpc3RlcnMsIGludGNhX2Fja19yZWdpc3RlcnMpOworCit2b2lkIF9faW5pdCBzaDczNzdfaW5pdF9pcnEodm9pZCkKK3sKKwlyZWdpc3Rlcl9pbnRjX2NvbnRyb2xsZXIoJmludGNhX2Rlc2MpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wZmMtc2g3MzY3LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3BmYy1zaDczNjcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjg1NTVlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wZmMtc2g3MzY3LmMKQEAgLTAsMCArMSwxODAxIEBACisvKgorICogc2g3MzY3IHByb2Nlc3NvciBzdXBwb3J0IC0gUEZDIGhhcmR3YXJlIGJsb2NrCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwICBNYWdudXMgRGFtbQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3NoNzM2Ny5oPgorCisjZGVmaW5lIF8xKGZuLCBwZngsIHNmeCkgZm4ocGZ4LCBzZngpCisKKyNkZWZpbmUgXzEwKGZuLCBwZngsIHNmeCkJCQkJXAorCV8xKGZuLCBwZngjIzAsIHNmeCksIF8xKGZuLCBwZngjIzEsIHNmeCksCVwKKwlfMShmbiwgcGZ4IyMyLCBzZngpLCBfMShmbiwgcGZ4IyMzLCBzZngpLAlcCisJXzEoZm4sIHBmeCMjNCwgc2Z4KSwgXzEoZm4sIHBmeCMjNSwgc2Z4KSwJXAorCV8xKGZuLCBwZngjIzYsIHNmeCksIF8xKGZuLCBwZngjIzcsIHNmeCksCVwKKwlfMShmbiwgcGZ4IyM4LCBzZngpLCBfMShmbiwgcGZ4IyM5LCBzZngpCisKKyNkZWZpbmUgXzkwKGZuLCBwZngsIHNmeCkJCQkJXAorCV8xMChmbiwgcGZ4IyMxLCBzZngpLCBfMTAoZm4sIHBmeCMjMiwgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyMzLCBzZngpLCBfMTAoZm4sIHBmeCMjNCwgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyM1LCBzZngpLCBfMTAoZm4sIHBmeCMjNiwgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyM3LCBzZngpLCBfMTAoZm4sIHBmeCMjOCwgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyM5LCBzZngpCisKKyNkZWZpbmUgXzI3MyhmbiwgcGZ4LCBzZngpCQlcCisJXzEwKGZuLCBwZngsIHNmeCksIF85MChmbiwgcGZ4LCBzZngpLAkJXAorCV8xMChmbiwgcGZ4IyMxMCwgc2Z4KSwgXzkwKGZuLCBwZngjIzEsIHNmeCksCVwKKwlfMTAoZm4sIHBmeCMjMjAsIHNmeCksIF8xMChmbiwgcGZ4IyMyMSwgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyMyMiwgc2Z4KSwgXzEwKGZuLCBwZngjIzIzLCBzZngpLAlcCisJXzEwKGZuLCBwZngjIzI0LCBzZngpLCBfMTAoZm4sIHBmeCMjMjUsIHNmeCksCVwKKwlfMTAoZm4sIHBmeCMjMjYsIHNmeCksIF8xKGZuLCBwZngjIzI3MCwgc2Z4KSwJXAorCV8xKGZuLCBwZngjIzI3MSwgc2Z4KSwgXzEoZm4sIHBmeCMjMjcyLCBzZngpCisKKyNkZWZpbmUgX1BPUlQocGZ4LCBzZngpIHBmeCMjXyMjc2Z4CisjZGVmaW5lIFBPUlRfMjczKHN0cikgXzI3MyhfUE9SVCwgUE9SVCwgc3RyKQorCitlbnVtIHsKKwlQSU5NVVhfUkVTRVJWRUQgPSAwLAorCisJUElOTVVYX0RBVEFfQkVHSU4sCisJUE9SVF8yNzMoREFUQSksIC8qIFBPUlQwX0RBVEEgLT4gUE9SVDI3Ml9EQVRBICovCisJUElOTVVYX0RBVEFfRU5ELAorCisJUElOTVVYX0lOUFVUX0JFR0lOLAorCVBPUlRfMjczKElOKSwgLyogUE9SVDBfSU4gLT4gUE9SVDI3Ml9JTiAqLworCVBJTk1VWF9JTlBVVF9FTkQsCisKKwlQSU5NVVhfSU5QVVRfUFVMTFVQX0JFR0lOLAorCVBPUlRfMjczKElOX1BVKSwgLyogUE9SVDBfSU5fUFUgLT4gUE9SVDI3Ml9JTl9QVSAqLworCVBJTk1VWF9JTlBVVF9QVUxMVVBfRU5ELAorCisJUElOTVVYX0lOUFVUX1BVTExET1dOX0JFR0lOLAorCVBPUlRfMjczKElOX1BEKSwgLyogUE9SVDBfSU5fUEQgLT4gUE9SVDI3Ml9JTl9QRCAqLworCVBJTk1VWF9JTlBVVF9QVUxMRE9XTl9FTkQsCisKKwlQSU5NVVhfT1VUUFVUX0JFR0lOLAorCVBPUlRfMjczKE9VVCksIC8qIFBPUlQwX09VVCAtPiBQT1JUMjcyX09VVCAqLworCVBJTk1VWF9PVVRQVVRfRU5ELAorCisJUElOTVVYX0ZVTkNUSU9OX0JFR0lOLAorCVBPUlRfMjczKEZOX0lOKSwgLyogUE9SVDBfRk5fSU4gLT4gUE9SVDI3Ml9GTl9JTiAqLworCVBPUlRfMjczKEZOX09VVCksIC8qIFBPUlQwX0ZOX09VVCAtPiBQT1JUMjcyX0ZOX09VVCAqLworCVBPUlRfMjczKEZOMCksIC8qIFBPUlQwX0ZOMCAtPiBQT1JUMjcyX0ZOMCAqLworCVBPUlRfMjczKEZOMSksIC8qIFBPUlQwX0ZOMSAtPiBQT1JUMjcyX0ZOMSAqLworCVBPUlRfMjczKEZOMiksIC8qIFBPUlQwX0ZOMiAtPiBQT1JUMjcyX0ZOMiAqLworCVBPUlRfMjczKEZOMyksIC8qIFBPUlQwX0ZOMyAtPiBQT1JUMjcyX0ZOMyAqLworCVBPUlRfMjczKEZONCksIC8qIFBPUlQwX0ZONCAtPiBQT1JUMjcyX0ZONCAqLworCVBPUlRfMjczKEZONSksIC8qIFBPUlQwX0ZONSAtPiBQT1JUMjcyX0ZONSAqLworCVBPUlRfMjczKEZONiksIC8qIFBPUlQwX0ZONiAtPiBQT1JUMjcyX0ZONiAqLworCVBPUlRfMjczKEZONyksIC8qIFBPUlQwX0ZONyAtPiBQT1JUMjcyX0ZONyAqLworCisJTVNFTEJDUl9NU0VMMl8xLCBNU0VMQkNSX01TRUwyXzAsCisJUElOTVVYX0ZVTkNUSU9OX0VORCwKKworCVBJTk1VWF9NQVJLX0JFR0lOLAorCS8qIFNwZWNpYWwgUHVsbC11cCAvIFB1bGwtZG93biBGdW5jdGlvbnMgKi8KKwlQT1JUNDhfS0VZSU4wX1BVX01BUkssIFBPUlQ0OV9LRVlJTjFfUFVfTUFSSywKKwlQT1JUNTBfS0VZSU4yX1BVX01BUkssIFBPUlQ1NV9LRVlJTjNfUFVfTUFSSywKKwlQT1JUNTZfS0VZSU40X1BVX01BUkssIFBPUlQ1N19LRVlJTjVfUFVfTUFSSywKKwlQT1JUNThfS0VZSU42X1BVX01BUkssCisKKwkvKiA0OS0xICovCisJVkJVUzBfTUFSSywgQ1BPUlQwX01BUkssIENQT1JUMV9NQVJLLCBDUE9SVDJfTUFSSywKKwlDUE9SVDNfTUFSSywgQ1BPUlQ0X01BUkssIENQT1JUNV9NQVJLLCBDUE9SVDZfTUFSSywKKwlDUE9SVDdfTUFSSywgQ1BPUlQ4X01BUkssIENQT1JUOV9NQVJLLCBDUE9SVDEwX01BUkssCisJQ1BPUlQxMV9NQVJLLCBTSU4yX01BUkssIENQT1JUMTJfTUFSSywgWENUUzJfTUFSSywKKwlDUE9SVDEzX01BUkssIFJGU1BPNF9NQVJLLCBDUE9SVDE0X01BUkssIFJGU1BPNV9NQVJLLAorCUNQT1JUMTVfTUFSSywgQ1BPUlQxNl9NQVJLLCBDUE9SVDE3X01BUkssIFNPVVQyX01BUkssCisJQ1BPUlQxOF9NQVJLLCBYUlRTMl9NQVJLLCBDUE9SVDE5X01BUkssIENQT1JUMjBfTUFSSywKKwlSRlNQTzZfTUFSSywgQ1BPUlQyMV9NQVJLLCBTVEFUVVMwX01BUkssIENQT1JUMjJfTUFSSywKKwlTVEFUVVMxX01BUkssIENQT1JUMjNfTUFSSywgU1RBVFVTMl9NQVJLLCBSRlNQTzdfTUFSSywKKwlNUE9SVDBfTUFSSywgTVBPUlQxX01BUkssIEJfU1lOTEQxX01BUkssIEJfU1lOTEQyX01BUkssCisJWE1BSU5QU19NQVJLLCBYRElWUFNfTUFSSywgWElEUlNUX01BUkssIElEQ0xLX01BUkssCisJSURJT19NQVJLLCBTT1VUMV9NQVJLLCBTQ0lGQTRfVFhEX01BUkssCisJTTAyX0JFUkRBVF9NQVJLLCBTSU4xX01BUkssIFNDSUZBNF9SWERfTUFSSywgWFdVUF9NQVJLLAorCVhSVFMxX01BUkssIFNDSUZBNF9SVFNfTUFSSywgTTAzX0JFUkNMS19NQVJLLAorCVhDVFMxX01BUkssIFNDSUZBNF9DVFNfTUFSSywKKworCS8qIDQ5LTIgKi8KKwlIU1VfSVFfQUdDNl9NQVJLLCBNRkcyX0lOMl9NQVJLLCBNU0lPRjJfTUNLMF9NQVJLLAorCUhTVV9JUV9BR0M1X01BUkssIE1GRzJfSU4xX01BUkssIE1TSU9GMl9NQ0sxX01BUkssCisJSFNVX0lRX0FHQzRfTUFSSywgTVNJT0YyX1JTWU5DX01BUkssCisJSFNVX0lRX0FHQzNfTUFSSywgTUZHMl9PVVQxX01BUkssIE1TSU9GMl9SU0NLX01BUkssCisJSFNVX0lRX0FHQzJfTUFSSywgUE9SVDQyX0tFWU9VVDBfTUFSSywKKwlIU1VfSVFfQUdDMV9NQVJLLCBQT1JUNDNfS0VZT1VUMV9NQVJLLAorCUhTVV9JUV9BR0MwX01BUkssIFBPUlQ0NF9LRVlPVVQyX01BUkssCisJSFNVX0lRX0FHQ19TVF9NQVJLLCBQT1JUNDVfS0VZT1VUM19NQVJLLAorCUhTVV9JUV9QRE9fTUFSSywgUE9SVDQ2X0tFWU9VVDRfTUFSSywKKwlIU1VfSVFfUFlPX01BUkssIFBPUlQ0N19LRVlPVVQ1X01BUkssCisJSFNVX0VOX1RYTVVYX0czTU9fTUFSSywgUE9SVDQ4X0tFWUlOMF9NQVJLLAorCUhTVV9JX1RYTVVYX0czTU9fTUFSSywgUE9SVDQ5X0tFWUlOMV9NQVJLLAorCUhTVV9RX1RYTVVYX0czTU9fTUFSSywgUE9SVDUwX0tFWUlOMl9NQVJLLAorCUhTVV9TWU9fTUFSSywgUE9SVDUxX01TSU9GMl9UU1lOQ19NQVJLLAorCUhTVV9TRE9fTUFSSywgUE9SVDUyX01TSU9GMl9UU0NLX01BUkssCisJSFNVX1RHVFRJX0czTU9fTUFSSywgUE9SVDUzX01TSU9GMl9UWERfTUFSSywKKwlCX1RJTUVfU1RBTVBfTUFSSywgUE9SVDU0X01TSU9GMl9SWERfTUFSSywKKwlIU1VfU0RJX01BUkssIFBPUlQ1NV9LRVlJTjNfTUFSSywKKwlIU1VfU0NPX01BUkssIFBPUlQ1Nl9LRVlJTjRfTUFSSywKKwlIU1VfRFJFUV9NQVJLLCBQT1JUNTdfS0VZSU41X01BUkssCisJSFNVX0RBQ0tfTUFSSywgUE9SVDU4X0tFWUlONl9NQVJLLAorCUhTVV9DTEs2MU1fTUFSSywgUE9SVDU5X01TSU9GMl9TUzFfTUFSSywKKwlIU1VfWFJTVF9NQVJLLCBQT1JUNjBfTVNJT0YyX1NTMl9NQVJLLAorCVBDTUNMS09fTUFSSywgU1lOQzhLT19NQVJLLCBETlBDTV9BX01BUkssIFVQUENNX0FfTUFSSywKKwlYVEFMQjFMX01BUkssCisJR1BTX0FHQzFfTUFSSywgU0NJRkEwX1JUU19NQVJLLAorCUdQU19BR0MyX01BUkssIFNDSUZBMF9TQ0tfTUFSSywKKwlHUFNfQUdDM19NQVJLLCBTQ0lGQTBfVFhEX01BUkssCisJR1BTX0FHQzRfTUFSSywgU0NJRkEwX1JYRF9NQVJLLAorCUdQU19QV1JEX01BUkssIFNDSUZBMF9DVFNfTUFSSywKKwlHUFNfSU1fTUFSSywgR1BTX0lTX01BUkssIEdQU19RTV9NQVJLLCBHUFNfUVNfTUFSSywKKwlTSVVCT01DX01BUkssIFRQVTJUTzBfTUFSSywKKwlTSVVDS0JfTUFSSywgVFBVMlRPMV9NQVJLLAorCVNJVUJPTFJfTUFSSywgQkJJRjJfVFNZTkNfTUFSSywgVFBVMlRPMl9NQVJLLAorCVNJVUJPQlRfTUFSSywgQkJJRjJfVFNDS19NQVJLLCBUUFUyVE8zX01BUkssCisJU0lVQk9TTERfTUFSSywgQkJJRjJfVFhEX01BUkssIFRQVTNUTzBfTUFSSywKKwlTSVVCSUxSX01BUkssIFRQVTNUTzFfTUFSSywKKwlTSVVCSUJUX01BUkssIFRQVTNUTzJfTUFSSywKKwlTSVVCSVNMRF9NQVJLLCBUUFUzVE8zX01BUkssCisJTk1JX01BUkssIFRQVTRUTzBfTUFSSywKKwlETlBDTV9NX01BUkssIFRQVTRUTzFfTUFSSywgVFBVNFRPMl9NQVJLLCBUUFU0VE8zX01BUkssCisJSVJRX1RNUEJfTUFSSywKKwlQV0VOX01BUkssIE1GRzFfT1VUMV9NQVJLLAorCU9WQ05fTUFSSywgTUZHMV9JTjFfTUFSSywKKwlPVkNOMl9NQVJLLCBNRkcxX0lOMl9NQVJLLAorCisJLyogNDktMyAqLworCVJGU1BPMV9NQVJLLCBSRlNQTzJfTUFSSywgUkZTUE8zX01BUkssIFBPUlQ5M19WSU9fQ0tPMl9NQVJLLAorCVVTQlRFUk1fTUFSSywgRVhUTFBfTUFSSywgSURJTl9NQVJLLAorCVNDSUZBNV9DVFNfTUFSSywgTUZHMF9JTjFfTUFSSywKKwlTQ0lGQTVfUlRTX01BUkssIE1GRzBfSU4yX01BUkssCisJU0NJRkE1X1JYRF9NQVJLLAorCVNDSUZBNV9UWERfTUFSSywKKwlTQ0lGQTVfU0NLX01BUkssIE1GRzBfT1VUMV9NQVJLLAorCUEwX0VBMF9NQVJLLCBCU19NQVJLLAorCUExNF9FQTE0X01BUkssIFBPUlQxMDJfS0VZT1VUMF9NQVJLLAorCUExNV9FQTE1X01BUkssIFBPUlQxMDNfS0VZT1VUMV9NQVJLLCBEVl9DTEtPTF9NQVJLLAorCUExNl9FQTE2X01BUkssIFBPUlQxMDRfS0VZT1VUMl9NQVJLLAorCURWX1ZTWU5DTF9NQVJLLCBNU0lPRjBfU1MxX01BUkssCisJQTE3X0VBMTdfTUFSSywgUE9SVDEwNV9LRVlPVVQzX01BUkssCisJRFZfSFNZTkNMX01BUkssIE1TSU9GMF9UU1lOQ19NQVJLLAorCUExOF9FQTE4X01BUkssIFBPUlQxMDZfS0VZT1VUNF9NQVJLLAorCURWX0RMMF9NQVJLLCBNU0lPRjBfVFNDS19NQVJLLAorCUExOV9FQTE5X01BUkssIFBPUlQxMDdfS0VZT1VUNV9NQVJLLAorCURWX0RMMV9NQVJLLCBNU0lPRjBfVFhEX01BUkssCisJQTIwX0VBMjBfTUFSSywgUE9SVDEwOF9LRVlJTjBfTUFSSywKKwlEVl9ETDJfTUFSSywgTVNJT0YwX1JTQ0tfTUFSSywKKwlBMjFfRUEyMV9NQVJLLCBQT1JUMTA5X0tFWUlOMV9NQVJLLAorCURWX0RMM19NQVJLLCBNU0lPRjBfUlNZTkNfTUFSSywKKwlBMjJfRUEyMl9NQVJLLCBQT1JUMTEwX0tFWUlOMl9NQVJLLAorCURWX0RMNF9NQVJLLCBNU0lPRjBfTUNLMF9NQVJLLAorCUEyM19FQTIzX01BUkssIFBPUlQxMTFfS0VZSU4zX01BUkssCisJRFZfREw1X01BUkssIE1TSU9GMF9NQ0sxX01BUkssCisJQTI0X0VBMjRfTUFSSywgUE9SVDExMl9LRVlJTjRfTUFSSywKKwlEVl9ETDZfTUFSSywgTVNJT0YwX1JYRF9NQVJLLAorCUEyNV9FQTI1X01BUkssIFBPUlQxMTNfS0VZSU41X01BUkssCisJRFZfREw3X01BUkssIE1TSU9GMF9TUzJfTUFSSywKKwlBMjZfTUFSSywgUE9SVDExM19LRVlJTjZfTUFSSywgRFZfQ0xLSUxfTUFSSywKKwlEMF9FRDBfTkFGMF9NQVJLLCBEMV9FRDFfTkFGMV9NQVJLLCBEMl9FRDJfTkFGMl9NQVJLLAorCUQzX0VEM19OQUYzX01BUkssIEQ0X0VENF9OQUY0X01BUkssIEQ1X0VENV9OQUY1X01BUkssCisJRDZfRUQ2X05BRjZfTUFSSywgRDdfRUQ3X05BRjdfTUFSSywgRDhfRUQ4X05BRjhfTUFSSywKKwlEOV9FRDlfTkFGOV9NQVJLLCBEMTBfRUQxMF9OQUYxMF9NQVJLLCBEMTFfRUQxMV9OQUYxMV9NQVJLLAorCUQxMl9FRDEyX05BRjEyX01BUkssIEQxM19FRDEzX05BRjEzX01BUkssCisJRDE0X0VEMTRfTkFGMTRfTUFSSywgRDE1X0VEMTVfTkFGMTVfTUFSSywKKwlDUzRfTUFSSywgQ1M1QV9NQVJLLCBDUzVCX01BUkssIEZDRTFfTUFSSywKKwlDUzZCX01BUkssIFhDUzJfTUFSSywgRkNFMF9NQVJLLCBDUzZBX01BUkssCisJREFDSzBfTUFSSywgV0FJVF9NQVJLLCBEUkVRMF9NQVJLLCBSRF9YUkRfTUFSSywKKwlBMjdfTUFSSywgUkRXUl9YV0VfTUFSSywgV0UwX1hXUjBfRldFX01BUkssCisJV0UxX1hXUjFfTUFSSywgRlJCX01BUkssIENLT19NQVJLLAorCU5CUlNUT1VUX01BUkssIE5CUlNUX01BUkssCisKKwkvKiA0OS00ICovCisJUkZTUE8wX01BUkssIFBPUlQxNDZfVklPX0NLTzJfTUFSSywgVFNUTURfTUFSSywKKwlWSU9fVkRfTUFSSywgVklPX0hEX01BUkssCisJVklPX0QwX01BUkssIFZJT19EMV9NQVJLLCBWSU9fRDJfTUFSSywKKwlWSU9fRDNfTUFSSywgVklPX0Q0X01BUkssIFZJT19ENV9NQVJLLAorCVZJT19ENl9NQVJLLCBWSU9fRDdfTUFSSywgVklPX0Q4X01BUkssCisJVklPX0Q5X01BUkssIFZJT19EMTBfTUFSSywgVklPX0QxMV9NQVJLLAorCVZJT19EMTJfTUFSSywgVklPX0QxM19NQVJLLCBWSU9fRDE0X01BUkssCisJVklPX0QxNV9NQVJLLCBWSU9fQ0xLX01BUkssIFZJT19GSUVMRF9NQVJLLAorCVZJT19DS09fTUFSSywKKwlNRkczX0lOMV9NQVJLLCBNRkczX0lOMl9NQVJLLAorCU05X1NMQ0RfQTAxX01BUkssIE1GRzNfT1VUMV9NQVJLLCBUUFUwVE8wX01BUkssCisJTTEwX1NMQ0RfQ0sxX01BUkssIE1GRzRfSU4xX01BUkssIFRQVTBUTzFfTUFSSywKKwlNMTFfU0xDRF9TTzFfTUFSSywgTUZHNF9JTjJfTUFSSywgVFBVMFRPMl9NQVJLLAorCU0xMl9TTENEX0NFMV9NQVJLLCBNRkc0X09VVDFfTUFSSywgVFBVMFRPM19NQVJLLAorCUxDREQwX01BUkssIFBPUlQxNzVfS0VZT1VUMF9NQVJLLCBEVl9EMF9NQVJLLAorCVNJVUNLQV9NQVJLLCBNRkcwX09VVDJfTUFSSywKKwlMQ0REMV9NQVJLLCBQT1JUMTc2X0tFWU9VVDFfTUFSSywgRFZfRDFfTUFSSywKKwlTSVVBT0xSX01BUkssIEJCSUYyX1RTWU5DMV9NQVJLLAorCUxDREQyX01BUkssIFBPUlQxNzdfS0VZT1VUMl9NQVJLLCBEVl9EMl9NQVJLLAorCVNJVUFPQlRfTUFSSywgQkJJRjJfVFNDSzFfTUFSSywKKwlMQ0REM19NQVJLLCBQT1JUMTc4X0tFWU9VVDNfTUFSSywgRFZfRDNfTUFSSywKKwlTSVVBT1NMRF9NQVJLLCBCQklGMl9UWEQxX01BUkssCisJTENERDRfTUFSSywgUE9SVDE3OV9LRVlPVVQ0X01BUkssIERWX0Q0X01BUkssCisJU0lVQUlTUERfTUFSSywgTUZHMV9PVVQyX01BUkssCisJTENERDVfTUFSSywgUE9SVDE4MF9LRVlPVVQ1X01BUkssIERWX0Q1X01BUkssCisJU0lVQUlMUl9NQVJLLCBNRkcyX09VVDJfTUFSSywKKwlMQ0RENl9NQVJLLCBEVl9ENl9NQVJLLAorCVNJVUFJQlRfTUFSSywgTUZHM19PVVQyX01BUkssIFhXUjJfTUFSSywKKwlMQ0REN19NQVJLLCBEVl9EN19NQVJLLAorCVNJVUFJU0xEX01BUkssIE1GRzRfT1VUMl9NQVJLLCBYV1IzX01BUkssCisJTENERDhfTUFSSywgRFZfRDhfTUFSSywgRDE2X01BUkssIEVEMTZfTUFSSywKKwlMQ0REOV9NQVJLLCBEVl9EOV9NQVJLLCBEMTdfTUFSSywgRUQxN19NQVJLLAorCUxDREQxMF9NQVJLLCBEVl9EMTBfTUFSSywgRDE4X01BUkssIEVEMThfTUFSSywKKwlMQ0REMTFfTUFSSywgRFZfRDExX01BUkssIEQxOV9NQVJLLCBFRDE5X01BUkssCisJTENERDEyX01BUkssIERWX0QxMl9NQVJLLCBEMjBfTUFSSywgRUQyMF9NQVJLLAorCUxDREQxM19NQVJLLCBEVl9EMTNfTUFSSywgRDIxX01BUkssIEVEMjFfTUFSSywKKwlMQ0REMTRfTUFSSywgRFZfRDE0X01BUkssIEQyMl9NQVJLLCBFRDIyX01BUkssCisJTENERDE1X01BUkssIERWX0QxNV9NQVJLLCBEMjNfTUFSSywgRUQyM19NQVJLLAorCUxDREQxNl9NQVJLLCBEVl9IU1lOQ19NQVJLLCBEMjRfTUFSSywgRUQyNF9NQVJLLAorCUxDREQxN19NQVJLLCBEVl9WU1lOQ19NQVJLLCBEMjVfTUFSSywgRUQyNV9NQVJLLAorCUxDREQxOF9NQVJLLCBEUkVRMl9NQVJLLCBNU0lPRjBMX1RTQ0tfTUFSSywKKwlEMjZfTUFSSywgRUQyNl9NQVJLLAorCUxDREQxOV9NQVJLLCBNU0lPRjBMX1RTWU5DX01BUkssCisJRDI3X01BUkssIEVEMjdfTUFSSywKKwlMQ0REMjBfTUFSSywgVFNfU1BTWU5DMV9NQVJLLCBNU0lPRjBMX01DSzBfTUFSSywKKwlEMjhfTUFSSywgRUQyOF9NQVJLLAorCUxDREQyMV9NQVJLLCBUU19TREFUMV9NQVJLLCBNU0lPRjBMX01DSzFfTUFSSywKKwlEMjlfTUFSSywgRUQyOV9NQVJLLAorCUxDREQyMl9NQVJLLCBUU19TREVOMV9NQVJLLCBNU0lPRjBMX1NTMV9NQVJLLAorCUQzMF9NQVJLLCBFRDMwX01BUkssCisJTENERDIzX01BUkssIFRTX1NDSzFfTUFSSywgTVNJT0YwTF9TUzJfTUFSSywKKwlEMzFfTUFSSywgRUQzMV9NQVJLLAorCUxDRERDS19NQVJLLCBMQ0RXUl9NQVJLLCBEVl9DS09fTUFSSywgU0lVQU9TUERfTUFSSywKKwlMQ0RSRF9NQVJLLCBEQUNLMl9NQVJLLCBNU0lPRjBMX1JTWU5DX01BUkssCisKKwkvKiA0OS01ICovCisJTENESFNZTl9NQVJLLCBMQ0RDU19NQVJLLCBMQ0RDUzJfTUFSSywgREFDSzNfTUFSSywKKwlMQ0RESVNQX01BUkssIExDRFJTX01BUkssIERSRVEzX01BUkssIE1TSU9GMExfUlNDS19NQVJLLAorCUxDRENTWU5fTUFSSywgTENEQ1NZTjJfTUFSSywgRFZfQ0tJX01BUkssCisJTENETENMS19NQVJLLCBEUkVRMV9NQVJLLCBNU0lPRjBMX1JYRF9NQVJLLAorCUxDRERPTl9NQVJLLCBMQ0RET04yX01BUkssIERBQ0sxX01BUkssIE1TSU9GMExfVFhEX01BUkssCisJVklPX0RSMF9NQVJLLCBWSU9fRFIxX01BUkssIFZJT19EUjJfTUFSSywgVklPX0RSM19NQVJLLAorCVZJT19EUjRfTUFSSywgVklPX0RSNV9NQVJLLCBWSU9fRFI2X01BUkssIFZJT19EUjdfTUFSSywKKwlWSU9fVkRSX01BUkssIFZJT19IRFJfTUFSSywKKwlWSU9fQ0xLUl9NQVJLLCBWSU9fQ0tPUl9NQVJLLAorCVNDSUZBMV9UWERfTUFSSywgR1BTX1BHRkEwX01BUkssCisJU0NJRkExX1NDS19NQVJLLCBHUFNfUEdGQTFfTUFSSywKKwlTQ0lGQTFfUlRTX01BUkssIEdQU19FUFBTSU5NT05fTUFSSywKKwlTQ0lGQTFfUlhEX01BUkssIFNDSUZBMV9DVFNfTUFSSywKKwlNU0lPRjFfVFhEX01BUkssIFNDSUZBMV9UWEQyX01BUkssIEdQU19UWERfTUFSSywKKwlNU0lPRjFfVFNZTkNfTUFSSywgU0NJRkExX0NUUzJfTUFSSywgSTJDX1NEQTJfTUFSSywKKwlNU0lPRjFfVFNDS19NQVJLLCBTQ0lGQTFfU0NLMl9NQVJLLAorCU1TSU9GMV9SWERfTUFSSywgU0NJRkExX1JYRDJfTUFSSywgR1BTX1JYRF9NQVJLLAorCU1TSU9GMV9SU0NLX01BUkssIFNDSUZBMV9SVFMyX01BUkssCisJTVNJT0YxX1JTWU5DX01BUkssIEkyQ19TQ0wyX01BUkssCisJTVNJT0YxX01DSzBfTUFSSywgTVNJT0YxX01DSzFfTUFSSywKKwlNU0lPRjFfU1MxX01BUkssIEVEQkdSRVEzX01BUkssCisJTVNJT0YxX1NTMl9NQVJLLAorCVBPUlQyMzZfSVJPVVRfTUFSSywgSVJEQV9PVVRfTUFSSywKKwlJUkRBX0lOX01BUkssIElSREFfRklSU0VMX01BUkssCisJVFBVMVRPMF9NQVJLLCBUU19TUFNZTkMzX01BUkssCisJVFBVMVRPMV9NQVJLLCBUU19TREFUM19NQVJLLAorCVRQVTFUTzJfTUFSSywgVFNfU0RFTjNfTUFSSywgUE9SVDI0MV9NU0lPRjJfU1MxX01BUkssCisJVFBVMVRPM19NQVJLLCBQT1JUMjQyX01TSU9GMl9UU0NLX01BUkssCisJTTEzX0JTV19NQVJLLCBQT1JUMjQzX01TSU9GMl9UU1lOQ19NQVJLLAorCU0xNF9HU1dfTUFSSywgUE9SVDI0NF9NU0lPRjJfVFhEX01BUkssCisJUE9SVDI0NV9JUk9VVF9NQVJLLCBNMTVfUlNXX01BUkssCisJU09VVDNfTUFSSywgU0NJRkEyX1RYRDFfTUFSSywKKwlTSU4zX01BUkssIFNDSUZBMl9SWEQxX01BUkssCisJWFJUUzNfTUFSSywgU0NJRkEyX1JUUzFfTUFSSywgUE9SVDI0OF9NU0lPRjJfU1MyX01BUkssCisJWENUUzNfTUFSSywgU0NJRkEyX0NUUzFfTUFSSywgUE9SVDI0OV9NU0lPRjJfUlhEX01BUkssCisJRElOVF9NQVJLLCBTQ0lGQTJfU0NLMV9NQVJLLCBUU19TQ0szX01BUkssCisJU0RISUNMSzBfTUFSSywgVENLMl9NQVJLLAorCVNESElDRDBfTUFSSywKKwlTREhJRDBfMF9NQVJLLCBUTVMyX01BUkssCisJU0RISUQwXzFfTUFSSywgVERPMl9NQVJLLAorCVNESElEMF8yX01BUkssIFRESTJfTUFSSywKKwlTREhJRDBfM19NQVJLLCBSVENLMl9NQVJLLAorCisJLyogNDktNiAqLworCVNESElDTUQwX01BUkssIFRSU1QyX01BUkssCisJU0RISVdQMF9NQVJLLCBFREJHUkVRMl9NQVJLLAorCVNESElDTEsxX01BUkssIFRDSzNfTUFSSywKKwlTREhJRDFfMF9NQVJLLCBNMTFfU0xDRF9TTzJfTUFSSywKKwlUU19TUFNZTkMyX01BUkssIFRNUzNfTUFSSywKKwlTREhJRDFfMV9NQVJLLCBNOV9TTENEX0FPMl9NQVJLLAorCVRTX1NEQVQyX01BUkssIFRETzNfTUFSSywKKwlTREhJRDFfMl9NQVJLLCBNMTBfU0xDRF9DSzJfTUFSSywKKwlUU19TREVOMl9NQVJLLCBUREkzX01BUkssCisJU0RISUQxXzNfTUFSSywgTTEyX1NMQ0RfQ0UyX01BUkssCisJVFNfU0NLMl9NQVJLLCBSVENLM19NQVJLLAorCVNESElDTUQxX01BUkssIFRSU1QzX01BUkssCisJU0RISUNMSzJfTUFSSywgU0NJRkJfU0NLX01BUkssCisJU0RISUQyXzBfTUFSSywgU0NJRkJfVFhEX01BUkssCisJU0RISUQyXzFfTUFSSywgU0NJRkJfQ1RTX01BUkssCisJU0RISUQyXzJfTUFSSywgU0NJRkJfUlhEX01BUkssCisJU0RISUQyXzNfTUFSSywgU0NJRkJfUlRTX01BUkssCisJU0RISUNNRDJfTUFSSywKKwlSRVNFVE9VVFNfTUFSSywKKwlESVZMT0NLX01BUkssCisJUElOTVVYX01BUktfRU5ELAorfTsKKworI2RlZmluZSBQT1JUX0RBVEFfSShucikgXAorCVBJTk1VWF9EQVRBKFBPUlQjI25yIyNfREFUQSwgUE9SVCMjbnIjI19GTjAsIFBPUlQjI25yIyNfSU4pCisKKyNkZWZpbmUgUE9SVF9EQVRBX0lfUEQobnIpIFwKKwlQSU5NVVhfREFUQShQT1JUIyNuciMjX0RBVEEsIFBPUlQjI25yIyNfRk4wLCBcCisJCSAgICBQT1JUIyNuciMjX0lOLCBQT1JUIyNuciMjX0lOX1BEKQorCisjZGVmaW5lIFBPUlRfREFUQV9JX1BVKG5yKSBcCisJUElOTVVYX0RBVEEoUE9SVCMjbnIjI19EQVRBLCBQT1JUIyNuciMjX0ZOMCwgXAorCQkgICAgUE9SVCMjbnIjI19JTiwgUE9SVCMjbnIjI19JTl9QVSkKKworI2RlZmluZSBQT1JUX0RBVEFfSV9QVV9QRChucikgXAorCVBJTk1VWF9EQVRBKFBPUlQjI25yIyNfREFUQSwgUE9SVCMjbnIjI19GTjAsIFwKKwkJICAgIFBPUlQjI25yIyNfSU4sIFBPUlQjI25yIyNfSU5fUEQsIFBPUlQjI25yIyNfSU5fUFUpCisKKyNkZWZpbmUgUE9SVF9EQVRBX08obnIpIFwKKwlQSU5NVVhfREFUQShQT1JUIyNuciMjX0RBVEEsIFBPUlQjI25yIyNfRk4wLCBQT1JUIyNuciMjX09VVCkKKworI2RlZmluZSBQT1JUX0RBVEFfSU8obnIpIFwKKwlQSU5NVVhfREFUQShQT1JUIyNuciMjX0RBVEEsIFBPUlQjI25yIyNfRk4wLCBQT1JUIyNuciMjX09VVCwgXAorCQkgICAgUE9SVCMjbnIjI19JTikKKworI2RlZmluZSBQT1JUX0RBVEFfSU9fUEQobnIpIFwKKwlQSU5NVVhfREFUQShQT1JUIyNuciMjX0RBVEEsIFBPUlQjI25yIyNfRk4wLCBQT1JUIyNuciMjX09VVCwgXAorCQkgICAgUE9SVCMjbnIjI19JTiwgUE9SVCMjbnIjI19JTl9QRCkKKworI2RlZmluZSBQT1JUX0RBVEFfSU9fUFUobnIpIFwKKwlQSU5NVVhfREFUQShQT1JUIyNuciMjX0RBVEEsIFBPUlQjI25yIyNfRk4wLCBQT1JUIyNuciMjX09VVCwgXAorCQkgICAgUE9SVCMjbnIjI19JTiwgUE9SVCMjbnIjI19JTl9QVSkKKworI2RlZmluZSBQT1JUX0RBVEFfSU9fUFVfUEQobnIpIFwKKwlQSU5NVVhfREFUQShQT1JUIyNuciMjX0RBVEEsIFBPUlQjI25yIyNfRk4wLCBQT1JUIyNuciMjX09VVCwgXAorCQkgICAgUE9SVCMjbnIjI19JTiwgUE9SVCMjbnIjI19JTl9QRCwgUE9SVCMjbnIjI19JTl9QVSkKKworCitzdGF0aWMgcGlubXV4X2VudW1fdCBwaW5tdXhfZGF0YVtdID0geworCisJLyogc3BlY2lmeSB2YWxpZCBwaW4gc3RhdGVzIGZvciBlYWNoIHBpbiBpbiBHUElPIG1vZGUgKi8KKworCS8qIDQ5LTEgKEdQSU8pICovCisJUE9SVF9EQVRBX0lfUEQoMCksCisJUE9SVF9EQVRBX0lfUFUoMSksIFBPUlRfREFUQV9JX1BVKDIpLCBQT1JUX0RBVEFfSV9QVSgzKSwKKwlQT1JUX0RBVEFfSV9QVSg0KSwgUE9SVF9EQVRBX0lfUFUoNSksIFBPUlRfREFUQV9JX1BVKDYpLAorCVBPUlRfREFUQV9JX1BVKDcpLCBQT1JUX0RBVEFfSV9QVSg4KSwgUE9SVF9EQVRBX0lfUFUoOSksCisJUE9SVF9EQVRBX0lfUFUoMTApLCBQT1JUX0RBVEFfSV9QVSgxMSksIFBPUlRfREFUQV9JX1BVKDEyKSwKKwlQT1JUX0RBVEFfSV9QVSgxMyksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDE0KSwgUE9SVF9EQVRBX0lPX1BVX1BEKDE1KSwKKwlQT1JUX0RBVEFfTygxNiksIFBPUlRfREFUQV9PKDE3KSwgUE9SVF9EQVRBX08oMTgpLCBQT1JUX0RBVEFfTygxOSksCisJUE9SVF9EQVRBX08oMjApLCBQT1JUX0RBVEFfTygyMSksIFBPUlRfREFUQV9PKDIyKSwgUE9SVF9EQVRBX08oMjMpLAorCVBPUlRfREFUQV9PKDI0KSwgUE9SVF9EQVRBX08oMjUpLCBQT1JUX0RBVEFfTygyNiksCisJUE9SVF9EQVRBX0lfUEQoMjcpLCBQT1JUX0RBVEFfSV9QRCgyOCksCisJUE9SVF9EQVRBX08oMjkpLCBQT1JUX0RBVEFfTygzMCksIFBPUlRfREFUQV9PKDMxKSwgUE9SVF9EQVRBX08oMzIpLAorCVBPUlRfREFUQV9JT19QVSgzMyksCisJUE9SVF9EQVRBX08oMzQpLAorCVBPUlRfREFUQV9JX1BVKDM1KSwKKwlQT1JUX0RBVEFfTygzNiksCisJUE9SVF9EQVRBX0lfUFVfUEQoMzcpLAorCisJLyogNDktMiAoR1BJTykgKi8KKwlQT1JUX0RBVEFfSU9fUFVfUEQoMzgpLAorCVBPUlRfREFUQV9JT19QRCgzOSksIFBPUlRfREFUQV9JT19QRCg0MCksIFBPUlRfREFUQV9JT19QRCg0MSksCisJUE9SVF9EQVRBX08oNDIpLCBQT1JUX0RBVEFfTyg0MyksIFBPUlRfREFUQV9PKDQ0KSwgUE9SVF9EQVRBX08oNDUpLAorCVBPUlRfREFUQV9PKDQ2KSwgUE9SVF9EQVRBX08oNDcpLAorCVBPUlRfREFUQV9JX1BVX1BEKDQ4KSwgUE9SVF9EQVRBX0lfUFVfUEQoNDkpLCBQT1JUX0RBVEFfSV9QVV9QRCg1MCksCisJUE9SVF9EQVRBX0lPX1BEKDUxKSwgUE9SVF9EQVRBX0lPX1BEKDUyKSwKKwlQT1JUX0RBVEFfTyg1MyksCisJUE9SVF9EQVRBX0lPX1BEKDU0KSwKKwlQT1JUX0RBVEFfSV9QVV9QRCg1NSksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDU2KSwKKwlQT1JUX0RBVEFfSV9QVV9QRCg1NyksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDU4KSwKKwlQT1JUX0RBVEFfTyg1OSksIFBPUlRfREFUQV9PKDYwKSwgUE9SVF9EQVRBX08oNjEpLCBQT1JUX0RBVEFfTyg2MiksCisJUE9SVF9EQVRBX08oNjMpLAorCVBPUlRfREFUQV9JX1BVKDY0KSwKKwlQT1JUX0RBVEFfTyg2NSksIFBPUlRfREFUQV9PKDY2KSwgUE9SVF9EQVRBX08oNjcpLCBQT1JUX0RBVEFfTyg2OCksCisJUE9SVF9EQVRBX0lPX1BEKDY5KSwgUE9SVF9EQVRBX0lPX1BEKDcwKSwKKwlQT1JUX0RBVEFfSV9QRCg3MSksIFBPUlRfREFUQV9JX1BEKDcyKSwgUE9SVF9EQVRBX0lfUEQoNzMpLAorCVBPUlRfREFUQV9JX1BEKDc0KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoNzUpLCBQT1JUX0RBVEFfSU9fUFVfUEQoNzYpLAorCVBPUlRfREFUQV9JT19QRCg3NyksIFBPUlRfREFUQV9JT19QRCg3OCksCisJUE9SVF9EQVRBX08oNzkpLAorCVBPUlRfREFUQV9JT19QRCg4MCksIFBPUlRfREFUQV9JT19QRCg4MSksIFBPUlRfREFUQV9JT19QRCg4MiksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDgzKSwgUE9SVF9EQVRBX0lPX1BVX1BEKDg0KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoODUpLCBQT1JUX0RBVEFfSU9fUFVfUEQoODYpLAorCVBPUlRfREFUQV9JX1BEKDg3KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoODgpLAorCVBPUlRfREFUQV9JX1BVX1BEKDg5KSwgUE9SVF9EQVRBX0lfUFVfUEQoOTApLAorCisJLyogNDktMyAoR1BJTykgKi8KKwlQT1JUX0RBVEFfTyg5MSksIFBPUlRfREFUQV9PKDkyKSwgUE9SVF9EQVRBX08oOTMpLCBQT1JUX0RBVEFfTyg5NCksCisJUE9SVF9EQVRBX0lfUFVfUEQoOTUpLAorCVBPUlRfREFUQV9JT19QVV9QRCg5NiksIFBPUlRfREFUQV9JT19QVV9QRCg5NyksIFBPUlRfREFUQV9JT19QVV9QRCg5OCksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDk5KSwJUE9SVF9EQVRBX0lPX1BVX1BEKDEwMCksCisJUE9SVF9EQVRBX0lPKDEwMSksIFBPUlRfREFUQV9JTygxMDIpLCBQT1JUX0RBVEFfSU8oMTAzKSwKKwlQT1JUX0RBVEFfSU9fUEQoMTA0KSwgUE9SVF9EQVRBX0lPX1BEKDEwNSksIFBPUlRfREFUQV9JT19QRCgxMDYpLAorCVBPUlRfREFUQV9JT19QRCgxMDcpLAorCVBPUlRfREFUQV9JT19QVV9QRCgxMDgpLCBQT1JUX0RBVEFfSU9fUFVfUEQoMTA5KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTEwKSwgUE9SVF9EQVRBX0lPX1BVX1BEKDExMSksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDExMiksIFBPUlRfREFUQV9JT19QVV9QRCgxMTMpLAorCVBPUlRfREFUQV9JT19QVV9QRCgxMTQpLAorCVBPUlRfREFUQV9JT19QVSgxMTUpLCBQT1JUX0RBVEFfSU9fUFUoMTE2KSwgUE9SVF9EQVRBX0lPX1BVKDExNyksCisJUE9SVF9EQVRBX0lPX1BVKDExOCksIFBPUlRfREFUQV9JT19QVSgxMTkpLCBQT1JUX0RBVEFfSU9fUFUoMTIwKSwKKwlQT1JUX0RBVEFfSU9fUFUoMTIxKSwgUE9SVF9EQVRBX0lPX1BVKDEyMiksIFBPUlRfREFUQV9JT19QVSgxMjMpLAorCVBPUlRfREFUQV9JT19QVSgxMjQpLCBQT1JUX0RBVEFfSU9fUFUoMTI1KSwgUE9SVF9EQVRBX0lPX1BVKDEyNiksCisJUE9SVF9EQVRBX0lPX1BVKDEyNyksIFBPUlRfREFUQV9JT19QVSgxMjgpLCBQT1JUX0RBVEFfSU9fUFUoMTI5KSwKKwlQT1JUX0RBVEFfSU9fUFUoMTMwKSwKKwlQT1JUX0RBVEFfTygxMzEpLCBQT1JUX0RBVEFfTygxMzIpLCBQT1JUX0RBVEFfTygxMzMpLAorCVBPUlRfREFUQV9JT19QVSgxMzQpLAorCVBPUlRfREFUQV9PKDEzNSksIFBPUlRfREFUQV9PKDEzNiksCisJUE9SVF9EQVRBX0lfUFVfUEQoMTM3KSwKKwlQT1JUX0RBVEFfSU8oMTM4KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTM5KSwKKwlQT1JUX0RBVEFfSU8oMTQwKSwgUE9SVF9EQVRBX0lPKDE0MSksCisJUE9SVF9EQVRBX0lfUFUoMTQyKSwKKwlQT1JUX0RBVEFfTygxNDMpLCBQT1JUX0RBVEFfTygxNDQpLAorCVBPUlRfREFUQV9JX1BVKDE0NSksCisKKwkvKiA0OS00IChHUElPKSAqLworCVBPUlRfREFUQV9PKDE0NiksCisJUE9SVF9EQVRBX0lfUFVfUEQoMTQ3KSwKKwlQT1JUX0RBVEFfSV9QRCgxNDgpLCBQT1JUX0RBVEFfSV9QRCgxNDkpLAorCVBPUlRfREFUQV9JT19QRCgxNTApLCBQT1JUX0RBVEFfSU9fUEQoMTUxKSwgUE9SVF9EQVRBX0lPX1BEKDE1MiksCisJUE9SVF9EQVRBX0lPX1BEKDE1MyksIFBPUlRfREFUQV9JT19QRCgxNTQpLCBQT1JUX0RBVEFfSU9fUEQoMTU1KSwKKwlQT1JUX0RBVEFfSU9fUEQoMTU2KSwgUE9SVF9EQVRBX0lPX1BEKDE1NyksIFBPUlRfREFUQV9JT19QRCgxNTgpLAorCVBPUlRfREFUQV9JT19QRCgxNTkpLCBQT1JUX0RBVEFfSU9fUEQoMTYwKSwgUE9SVF9EQVRBX0lPX1BEKDE2MSksCisJUE9SVF9EQVRBX0lPX1BEKDE2MiksIFBPUlRfREFUQV9JT19QRCgxNjMpLCBQT1JUX0RBVEFfSU9fUEQoMTY0KSwKKwlQT1JUX0RBVEFfSU9fUEQoMTY1KSwgUE9SVF9EQVRBX0lPX1BEKDE2NiksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDE2NyksCisJUE9SVF9EQVRBX08oMTY4KSwKKwlQT1JUX0RBVEFfSV9QRCgxNjkpLCBQT1JUX0RBVEFfSV9QRCgxNzApLAorCVBPUlRfREFUQV9PKDE3MSksCisJUE9SVF9EQVRBX0lPX1BEKDE3MiksIFBPUlRfREFUQV9JT19QRCgxNzMpLAorCVBPUlRfREFUQV9PKDE3NCksCisJUE9SVF9EQVRBX0lPX1BEKDE3NSksIFBPUlRfREFUQV9JT19QRCgxNzYpLCBQT1JUX0RBVEFfSU9fUEQoMTc3KSwKKwlQT1JUX0RBVEFfSU9fUEQoMTc4KSwgUE9SVF9EQVRBX0lPX1BEKDE3OSksIFBPUlRfREFUQV9JT19QRCgxODApLAorCVBPUlRfREFUQV9JT19QRCgxODEpLCBQT1JUX0RBVEFfSU9fUEQoMTgyKSwgUE9SVF9EQVRBX0lPX1BEKDE4MyksCisJUE9SVF9EQVRBX0lPX1BEKDE4NCksIFBPUlRfREFUQV9JT19QRCgxODUpLCBQT1JUX0RBVEFfSU9fUEQoMTg2KSwKKwlQT1JUX0RBVEFfSU9fUEQoMTg3KSwgUE9SVF9EQVRBX0lPX1BEKDE4OCksIFBPUlRfREFUQV9JT19QRCgxODkpLAorCVBPUlRfREFUQV9JT19QRCgxOTApLCBQT1JUX0RBVEFfSU9fUEQoMTkxKSwgUE9SVF9EQVRBX0lPX1BEKDE5MiksCisJUE9SVF9EQVRBX0lPX1BEKDE5MyksIFBPUlRfREFUQV9JT19QRCgxOTQpLCBQT1JUX0RBVEFfSU9fUEQoMTk1KSwKKwlQT1JUX0RBVEFfSU9fUEQoMTk2KSwgUE9SVF9EQVRBX0lPX1BEKDE5NyksIFBPUlRfREFUQV9JT19QRCgxOTgpLAorCVBPUlRfREFUQV9PKDE5OSksCisJUE9SVF9EQVRBX0lPX1BEKDIwMCksCisKKwkvKiA0OS01IChHUElPKSAqLworCVBPUlRfREFUQV9PKDIwMSksCisJUE9SVF9EQVRBX0lPX1BEKDIwMiksIFBPUlRfREFUQV9JT19QRCgyMDMpLAorCVBPUlRfREFUQV9JKDIwNCksCisJUE9SVF9EQVRBX08oMjA1KSwKKwlQT1JUX0RBVEFfSU9fUEQoMjA2KSwgUE9SVF9EQVRBX0lPX1BEKDIwNyksIFBPUlRfREFUQV9JT19QRCgyMDgpLAorCVBPUlRfREFUQV9JT19QRCgyMDkpLCBQT1JUX0RBVEFfSU9fUEQoMjEwKSwgUE9SVF9EQVRBX0lPX1BEKDIxMSksCisJUE9SVF9EQVRBX0lPX1BEKDIxMiksIFBPUlRfREFUQV9JT19QRCgyMTMpLCBQT1JUX0RBVEFfSU9fUEQoMjE0KSwKKwlQT1JUX0RBVEFfSU9fUEQoMjE1KSwgUE9SVF9EQVRBX0lPX1BEKDIxNiksCisJUE9SVF9EQVRBX08oMjE3KSwKKwlQT1JUX0RBVEFfSV9QVV9QRCgyMTgpLCBQT1JUX0RBVEFfSV9QVV9QRCgyMTkpLAorCVBPUlRfREFUQV9PKDIyMCksIFBPUlRfREFUQV9PKDIyMSksIFBPUlRfREFUQV9PKDIyMiksCisJUE9SVF9EQVRBX0lfUEQoMjIzKSwKKwlQT1JUX0RBVEFfSV9QVV9QRCgyMjQpLAorCVBPUlRfREFUQV9PKDIyNSksCisJUE9SVF9EQVRBX0lPX1BEKDIyNiksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDIyNyksCisJUE9SVF9EQVRBX0lfUEQoMjI4KSwKKwlQT1JUX0RBVEFfSU9fUEQoMjI5KSwgUE9SVF9EQVRBX0lPX1BEKDIzMCksCisJUE9SVF9EQVRBX0lfUFVfUEQoMjMxKSwgUE9SVF9EQVRBX0lfUFVfUEQoMjMyKSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjMzKSwgUE9SVF9EQVRBX0lPX1BVX1BEKDIzNCksCisJUE9SVF9EQVRBX0lfUFVfUEQoMjM1KSwKKwlQT1JUX0RBVEFfTygyMzYpLAorCVBPUlRfREFUQV9JX1BEKDIzNyksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDIzOCksIFBPUlRfREFUQV9JT19QVV9QRCgyMzkpLAorCVBPUlRfREFUQV9JT19QRCgyNDApLCBQT1JUX0RBVEFfSU9fUEQoMjQxKSwKKwlQT1JUX0RBVEFfSU9fUEQoMjQyKSwgUE9SVF9EQVRBX0lPX1BEKDI0MyksCisJUE9SVF9EQVRBX08oMjQ0KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjQ1KSwKKwlQT1JUX0RBVEFfTygyNDYpLAorCVBPUlRfREFUQV9JX1BEKDI0NyksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDI0OCksCisJUE9SVF9EQVRBX0lfUFVfUEQoMjQ5KSwKKwlQT1JUX0RBVEFfSU9fUEQoMjUwKSwgUE9SVF9EQVRBX0lPX1BEKDI1MSksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDI1MiksIFBPUlRfREFUQV9JT19QVV9QRCgyNTMpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNTQpLCBQT1JUX0RBVEFfSU9fUFVfUEQoMjU1KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjU2KSwKKworCS8qIDQ5LTYgKEdQSU8pICovCisJUE9SVF9EQVRBX0lPX1BVX1BEKDI1NyksIFBPUlRfREFUQV9JT19QVV9QRCgyNTgpLAorCVBPUlRfREFUQV9JT19QRCgyNTkpLAorCVBPUlRfREFUQV9JT19QVSgyNjApLCBQT1JUX0RBVEFfSU9fUFUoMjYxKSwgUE9SVF9EQVRBX0lPX1BVKDI2MiksCisJUE9SVF9EQVRBX0lPX1BVKDI2MyksIFBPUlRfREFUQV9JT19QVSgyNjQpLAorCVBPUlRfREFUQV9PKDI2NSksCisJUE9SVF9EQVRBX0lPX1BVKDI2NiksIFBPUlRfREFUQV9JT19QVSgyNjcpLCBQT1JUX0RBVEFfSU9fUFUoMjY4KSwKKwlQT1JUX0RBVEFfSU9fUFUoMjY5KSwgUE9SVF9EQVRBX0lPX1BVKDI3MCksCisJUE9SVF9EQVRBX08oMjcxKSwKKwlQT1JUX0RBVEFfSV9QRCgyNzIpLAorCisJLyogU3BlY2lhbCBQdWxsLXVwIC8gUHVsbC1kb3duIEZ1bmN0aW9ucyAqLworCVBJTk1VWF9EQVRBKFBPUlQ0OF9LRVlJTjBfUFVfTUFSSywgTVNFTEJDUl9NU0VMMl8xLAorCQkgICAgUE9SVDQ4X0ZOMiwgUE9SVDQ4X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQT1JUNDlfS0VZSU4xX1BVX01BUkssIE1TRUxCQ1JfTVNFTDJfMSwKKwkJICAgIFBPUlQ0OV9GTjIsIFBPUlQ0OV9JTl9QVSksCisJUElOTVVYX0RBVEEoUE9SVDUwX0tFWUlOMl9QVV9NQVJLLCBNU0VMQkNSX01TRUwyXzEsCisJCSAgICBQT1JUNTBfRk4yLCBQT1JUNTBfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBPUlQ1NV9LRVlJTjNfUFVfTUFSSywgTVNFTEJDUl9NU0VMMl8xLAorCQkgICAgUE9SVDU1X0ZOMiwgUE9SVDU1X0lOX1BVKSwKKwlQSU5NVVhfREFUQShQT1JUNTZfS0VZSU40X1BVX01BUkssIE1TRUxCQ1JfTVNFTDJfMSwKKwkJICAgIFBPUlQ1Nl9GTjIsIFBPUlQ1Nl9JTl9QVSksCisJUElOTVVYX0RBVEEoUE9SVDU3X0tFWUlONV9QVV9NQVJLLCBNU0VMQkNSX01TRUwyXzEsCisJCSAgICBQT1JUNTdfRk4yLCBQT1JUNTdfSU5fUFUpLAorCVBJTk1VWF9EQVRBKFBPUlQ1OF9LRVlJTjZfUFVfTUFSSywgTVNFTEJDUl9NU0VMMl8xLAorCQkgICAgUE9SVDU4X0ZOMiwgUE9SVDU4X0lOX1BVKSwKKworCS8qIDQ5LTEgKEZOKSAqLworCVBJTk1VWF9EQVRBKFZCVVMwX01BUkssIFBPUlQwX0ZOMSksCisJUElOTVVYX0RBVEEoQ1BPUlQwX01BUkssIFBPUlQxX0ZOMSksCisJUElOTVVYX0RBVEEoQ1BPUlQxX01BUkssIFBPUlQyX0ZOMSksCisJUElOTVVYX0RBVEEoQ1BPUlQyX01BUkssIFBPUlQzX0ZOMSksCisJUElOTVVYX0RBVEEoQ1BPUlQzX01BUkssIFBPUlQ0X0ZOMSksCisJUElOTVVYX0RBVEEoQ1BPUlQ0X01BUkssIFBPUlQ1X0ZOMSksCisJUElOTVVYX0RBVEEoQ1BPUlQ1X01BUkssIFBPUlQ2X0ZOMSksCisJUElOTVVYX0RBVEEoQ1BPUlQ2X01BUkssIFBPUlQ3X0ZOMSksCisJUElOTVVYX0RBVEEoQ1BPUlQ3X01BUkssIFBPUlQ4X0ZOMSksCisJUElOTVVYX0RBVEEoQ1BPUlQ4X01BUkssIFBPUlQ5X0ZOMSksCisJUElOTVVYX0RBVEEoQ1BPUlQ5X01BUkssIFBPUlQxMF9GTjEpLAorCVBJTk1VWF9EQVRBKENQT1JUMTBfTUFSSywgUE9SVDExX0ZOMSksCisJUElOTVVYX0RBVEEoQ1BPUlQxMV9NQVJLLCBQT1JUMTJfRk4xKSwKKwlQSU5NVVhfREFUQShTSU4yX01BUkssIFBPUlQxMl9GTjIpLAorCVBJTk1VWF9EQVRBKENQT1JUMTJfTUFSSywgUE9SVDEzX0ZOMSksCisJUElOTVVYX0RBVEEoWENUUzJfTUFSSywgUE9SVDEzX0ZOMiksCisJUElOTVVYX0RBVEEoQ1BPUlQxM19NQVJLLCBQT1JUMTRfRk4xKSwKKwlQSU5NVVhfREFUQShSRlNQTzRfTUFSSywgUE9SVDE0X0ZOMiksCisJUElOTVVYX0RBVEEoQ1BPUlQxNF9NQVJLLCBQT1JUMTVfRk4xKSwKKwlQSU5NVVhfREFUQShSRlNQTzVfTUFSSywgUE9SVDE1X0ZOMiksCisJUElOTVVYX0RBVEEoQ1BPUlQxNV9NQVJLLCBQT1JUMTZfRk4xKSwKKwlQSU5NVVhfREFUQShDUE9SVDE2X01BUkssIFBPUlQxN19GTjEpLAorCVBJTk1VWF9EQVRBKENQT1JUMTdfTUFSSywgUE9SVDE4X0ZOMSksCisJUElOTVVYX0RBVEEoU09VVDJfTUFSSywgUE9SVDE4X0ZOMiksCisJUElOTVVYX0RBVEEoQ1BPUlQxOF9NQVJLLCBQT1JUMTlfRk4xKSwKKwlQSU5NVVhfREFUQShYUlRTMl9NQVJLLCBQT1JUMTlfRk4xKSwKKwlQSU5NVVhfREFUQShDUE9SVDE5X01BUkssIFBPUlQyMF9GTjEpLAorCVBJTk1VWF9EQVRBKENQT1JUMjBfTUFSSywgUE9SVDIxX0ZOMSksCisJUElOTVVYX0RBVEEoUkZTUE82X01BUkssIFBPUlQyMV9GTjIpLAorCVBJTk1VWF9EQVRBKENQT1JUMjFfTUFSSywgUE9SVDIyX0ZOMSksCisJUElOTVVYX0RBVEEoU1RBVFVTMF9NQVJLLCBQT1JUMjJfRk4yKSwKKwlQSU5NVVhfREFUQShDUE9SVDIyX01BUkssIFBPUlQyM19GTjEpLAorCVBJTk1VWF9EQVRBKFNUQVRVUzFfTUFSSywgUE9SVDIzX0ZOMiksCisJUElOTVVYX0RBVEEoQ1BPUlQyM19NQVJLLCBQT1JUMjRfRk4xKSwKKwlQSU5NVVhfREFUQShTVEFUVVMyX01BUkssIFBPUlQyNF9GTjIpLAorCVBJTk1VWF9EQVRBKFJGU1BPN19NQVJLLCBQT1JUMjRfRk4zKSwKKwlQSU5NVVhfREFUQShNUE9SVDBfTUFSSywgUE9SVDI1X0ZOMSksCisJUElOTVVYX0RBVEEoTVBPUlQxX01BUkssIFBPUlQyNl9GTjEpLAorCVBJTk1VWF9EQVRBKEJfU1lOTEQxX01BUkssIFBPUlQyN19GTjEpLAorCVBJTk1VWF9EQVRBKEJfU1lOTEQyX01BUkssIFBPUlQyOF9GTjEpLAorCVBJTk1VWF9EQVRBKFhNQUlOUFNfTUFSSywgUE9SVDI5X0ZOMSksCisJUElOTVVYX0RBVEEoWERJVlBTX01BUkssIFBPUlQzMF9GTjEpLAorCVBJTk1VWF9EQVRBKFhJRFJTVF9NQVJLLCBQT1JUMzFfRk4xKSwKKwlQSU5NVVhfREFUQShJRENMS19NQVJLLCBQT1JUMzJfRk4xKSwKKwlQSU5NVVhfREFUQShJRElPX01BUkssIFBPUlQzM19GTjEpLAorCVBJTk1VWF9EQVRBKFNPVVQxX01BUkssIFBPUlQzNF9GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZBNF9UWERfTUFSSywgUE9SVDM0X0ZOMiksCisJUElOTVVYX0RBVEEoTTAyX0JFUkRBVF9NQVJLLCBQT1JUMzRfRk4zKSwKKwlQSU5NVVhfREFUQShTSU4xX01BUkssIFBPUlQzNV9GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZBNF9SWERfTUFSSywgUE9SVDM1X0ZOMiksCisJUElOTVVYX0RBVEEoWFdVUF9NQVJLLCBQT1JUMzVfRk4zKSwKKwlQSU5NVVhfREFUQShYUlRTMV9NQVJLLCBQT1JUMzZfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQTRfUlRTX01BUkssIFBPUlQzNl9GTjIpLAorCVBJTk1VWF9EQVRBKE0wM19CRVJDTEtfTUFSSywgUE9SVDM2X0ZOMyksCisJUElOTVVYX0RBVEEoWENUUzFfTUFSSywgUE9SVDM3X0ZOMSksCisJUElOTVVYX0RBVEEoU0NJRkE0X0NUU19NQVJLLCBQT1JUMzdfRk4yKSwKKworCS8qIDQ5LTIgKEZOKSAqLworCVBJTk1VWF9EQVRBKEhTVV9JUV9BR0M2X01BUkssIFBPUlQzOF9GTjEpLAorCVBJTk1VWF9EQVRBKE1GRzJfSU4yX01BUkssIFBPUlQzOF9GTjIpLAorCVBJTk1VWF9EQVRBKE1TSU9GMl9NQ0swX01BUkssIFBPUlQzOF9GTjMpLAorCVBJTk1VWF9EQVRBKEhTVV9JUV9BR0M1X01BUkssIFBPUlQzOV9GTjEpLAorCVBJTk1VWF9EQVRBKE1GRzJfSU4xX01BUkssIFBPUlQzOV9GTjIpLAorCVBJTk1VWF9EQVRBKE1TSU9GMl9NQ0sxX01BUkssIFBPUlQzOV9GTjMpLAorCVBJTk1VWF9EQVRBKEhTVV9JUV9BR0M0X01BUkssIFBPUlQ0MF9GTjEpLAorCVBJTk1VWF9EQVRBKE1TSU9GMl9SU1lOQ19NQVJLLCBQT1JUNDBfRk4zKSwKKwlQSU5NVVhfREFUQShIU1VfSVFfQUdDM19NQVJLLCBQT1JUNDFfRk4xKSwKKwlQSU5NVVhfREFUQShNRkcyX09VVDFfTUFSSywgUE9SVDQxX0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YyX1JTQ0tfTUFSSywgUE9SVDQxX0ZOMyksCisJUElOTVVYX0RBVEEoSFNVX0lRX0FHQzJfTUFSSywgUE9SVDQyX0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDQyX0tFWU9VVDBfTUFSSywgTVNFTEJDUl9NU0VMMl8xLCBQT1JUNDJfRk4yKSwKKwlQSU5NVVhfREFUQShIU1VfSVFfQUdDMV9NQVJLLCBQT1JUNDNfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUNDNfS0VZT1VUMV9NQVJLLCBNU0VMQkNSX01TRUwyXzEsIFBPUlQ0M19GTjIpLAorCVBJTk1VWF9EQVRBKEhTVV9JUV9BR0MwX01BUkssIFBPUlQ0NF9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQ0NF9LRVlPVVQyX01BUkssIE1TRUxCQ1JfTVNFTDJfMSwgUE9SVDQ0X0ZOMiksCisJUElOTVVYX0RBVEEoSFNVX0lRX0FHQ19TVF9NQVJLLCBQT1JUNDVfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUNDVfS0VZT1VUM19NQVJLLCBNU0VMQkNSX01TRUwyXzEsIFBPUlQ0NV9GTjIpLAorCVBJTk1VWF9EQVRBKEhTVV9JUV9QRE9fTUFSSywgUE9SVDQ2X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDQ2X0tFWU9VVDRfTUFSSywgTVNFTEJDUl9NU0VMMl8xLCBQT1JUNDZfRk4yKSwKKwlQSU5NVVhfREFUQShIU1VfSVFfUFlPX01BUkssIFBPUlQ0N19GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQ0N19LRVlPVVQ1X01BUkssIE1TRUxCQ1JfTVNFTDJfMSwgUE9SVDQ3X0ZOMiksCisJUElOTVVYX0RBVEEoSFNVX0VOX1RYTVVYX0czTU9fTUFSSywgUE9SVDQ4X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDQ4X0tFWUlOMF9NQVJLLCBNU0VMQkNSX01TRUwyXzEsIFBPUlQ0OF9GTjIpLAorCVBJTk1VWF9EQVRBKEhTVV9JX1RYTVVYX0czTU9fTUFSSywgUE9SVDQ5X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDQ5X0tFWUlOMV9NQVJLLCBNU0VMQkNSX01TRUwyXzEsIFBPUlQ0OV9GTjIpLAorCVBJTk1VWF9EQVRBKEhTVV9RX1RYTVVYX0czTU9fTUFSSywgUE9SVDUwX0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDUwX0tFWUlOMl9NQVJLLCBNU0VMQkNSX01TRUwyXzEsIFBPUlQ1MF9GTjIpLAorCVBJTk1VWF9EQVRBKEhTVV9TWU9fTUFSSywgUE9SVDUxX0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDUxX01TSU9GMl9UU1lOQ19NQVJLLCBQT1JUNTFfRk4yKSwKKwlQSU5NVVhfREFUQShIU1VfU0RPX01BUkssIFBPUlQ1Ml9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQ1Ml9NU0lPRjJfVFNDS19NQVJLLCBQT1JUNTJfRk4yKSwKKwlQSU5NVVhfREFUQShIU1VfVEdUVElfRzNNT19NQVJLLCBQT1JUNTNfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUNTNfTVNJT0YyX1RYRF9NQVJLLCBQT1JUNTNfRk4yKSwKKwlQSU5NVVhfREFUQShCX1RJTUVfU1RBTVBfTUFSSywgUE9SVDU0X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDU0X01TSU9GMl9SWERfTUFSSywgUE9SVDU0X0ZOMiksCisJUElOTVVYX0RBVEEoSFNVX1NESV9NQVJLLCBQT1JUNTVfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUNTVfS0VZSU4zX01BUkssIE1TRUxCQ1JfTVNFTDJfMSwgUE9SVDU1X0ZOMiksCisJUElOTVVYX0RBVEEoSFNVX1NDT19NQVJLLCBQT1JUNTZfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUNTZfS0VZSU40X01BUkssIE1TRUxCQ1JfTVNFTDJfMSwgUE9SVDU2X0ZOMiksCisJUElOTVVYX0RBVEEoSFNVX0RSRVFfTUFSSywgUE9SVDU3X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDU3X0tFWUlONV9NQVJLLCBNU0VMQkNSX01TRUwyXzEsIFBPUlQ1N19GTjIpLAorCVBJTk1VWF9EQVRBKEhTVV9EQUNLX01BUkssIFBPUlQ1OF9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQ1OF9LRVlJTjZfTUFSSywgTVNFTEJDUl9NU0VMMl8xLCBQT1JUNThfRk4yKSwKKwlQSU5NVVhfREFUQShIU1VfQ0xLNjFNX01BUkssIFBPUlQ1OV9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQ1OV9NU0lPRjJfU1MxX01BUkssIFBPUlQ1OV9GTjIpLAorCVBJTk1VWF9EQVRBKEhTVV9YUlNUX01BUkssIFBPUlQ2MF9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQ2MF9NU0lPRjJfU1MyX01BUkssIFBPUlQ2MF9GTjIpLAorCVBJTk1VWF9EQVRBKFBDTUNMS09fTUFSSywgUE9SVDYxX0ZOMSksCisJUElOTVVYX0RBVEEoU1lOQzhLT19NQVJLLCBQT1JUNjJfRk4xKSwKKwlQSU5NVVhfREFUQShETlBDTV9BX01BUkssIFBPUlQ2M19GTjEpLAorCVBJTk1VWF9EQVRBKFVQUENNX0FfTUFSSywgUE9SVDY0X0ZOMSksCisJUElOTVVYX0RBVEEoWFRBTEIxTF9NQVJLLCBQT1JUNjVfRk4xKSwKKwlQSU5NVVhfREFUQShHUFNfQUdDMV9NQVJLLCBQT1JUNjZfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQTBfUlRTX01BUkssIFBPUlQ2Nl9GTjIpLAorCVBJTk1VWF9EQVRBKEdQU19BR0MyX01BUkssIFBPUlQ2N19GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZBMF9TQ0tfTUFSSywgUE9SVDY3X0ZOMiksCisJUElOTVVYX0RBVEEoR1BTX0FHQzNfTUFSSywgUE9SVDY4X0ZOMSksCisJUElOTVVYX0RBVEEoU0NJRkEwX1RYRF9NQVJLLCBQT1JUNjhfRk4yKSwKKwlQSU5NVVhfREFUQShHUFNfQUdDNF9NQVJLLCBQT1JUNjlfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQTBfUlhEX01BUkssIFBPUlQ2OV9GTjIpLAorCVBJTk1VWF9EQVRBKEdQU19QV1JEX01BUkssIFBPUlQ3MF9GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZBMF9DVFNfTUFSSywgUE9SVDcwX0ZOMiksCisJUElOTVVYX0RBVEEoR1BTX0lNX01BUkssIFBPUlQ3MV9GTjEpLAorCVBJTk1VWF9EQVRBKEdQU19JU19NQVJLLCBQT1JUNzJfRk4xKSwKKwlQSU5NVVhfREFUQShHUFNfUU1fTUFSSywgUE9SVDczX0ZOMSksCisJUElOTVVYX0RBVEEoR1BTX1FTX01BUkssIFBPUlQ3NF9GTjEpLAorCVBJTk1VWF9EQVRBKFNJVUJPTUNfTUFSSywgUE9SVDc1X0ZOMSksCisJUElOTVVYX0RBVEEoVFBVMlRPMF9NQVJLLCBQT1JUNzVfRk4zKSwKKwlQSU5NVVhfREFUQShTSVVDS0JfTUFSSywgUE9SVDc2X0ZOMSksCisJUElOTVVYX0RBVEEoVFBVMlRPMV9NQVJLLCBQT1JUNzZfRk4zKSwKKwlQSU5NVVhfREFUQShTSVVCT0xSX01BUkssIFBPUlQ3N19GTjEpLAorCVBJTk1VWF9EQVRBKEJCSUYyX1RTWU5DX01BUkssIFBPUlQ3N19GTjIpLAorCVBJTk1VWF9EQVRBKFRQVTJUTzJfTUFSSywgUE9SVDc3X0ZOMyksCisJUElOTVVYX0RBVEEoU0lVQk9CVF9NQVJLLCBQT1JUNzhfRk4xKSwKKwlQSU5NVVhfREFUQShCQklGMl9UU0NLX01BUkssIFBPUlQ3OF9GTjIpLAorCVBJTk1VWF9EQVRBKFRQVTJUTzNfTUFSSywgUE9SVDc4X0ZOMyksCisJUElOTVVYX0RBVEEoU0lVQk9TTERfTUFSSywgUE9SVDc5X0ZOMSksCisJUElOTVVYX0RBVEEoQkJJRjJfVFhEX01BUkssIFBPUlQ3OV9GTjIpLAorCVBJTk1VWF9EQVRBKFRQVTNUTzBfTUFSSywgUE9SVDc5X0ZOMyksCisJUElOTVVYX0RBVEEoU0lVQklMUl9NQVJLLCBQT1JUODBfRk4xKSwKKwlQSU5NVVhfREFUQShUUFUzVE8xX01BUkssIFBPUlQ4MF9GTjMpLAorCVBJTk1VWF9EQVRBKFNJVUJJQlRfTUFSSywgUE9SVDgxX0ZOMSksCisJUElOTVVYX0RBVEEoVFBVM1RPMl9NQVJLLCBQT1JUODFfRk4zKSwKKwlQSU5NVVhfREFUQShTSVVCSVNMRF9NQVJLLCBQT1JUODJfRk4xKSwKKwlQSU5NVVhfREFUQShUUFUzVE8zX01BUkssIFBPUlQ4Ml9GTjMpLAorCVBJTk1VWF9EQVRBKE5NSV9NQVJLLCBQT1JUODNfRk4xKSwKKwlQSU5NVVhfREFUQShUUFU0VE8wX01BUkssIFBPUlQ4M19GTjMpLAorCVBJTk1VWF9EQVRBKEROUENNX01fTUFSSywgUE9SVDg0X0ZOMSksCisJUElOTVVYX0RBVEEoVFBVNFRPMV9NQVJLLCBQT1JUODRfRk4zKSwKKwlQSU5NVVhfREFUQShUUFU0VE8yX01BUkssIFBPUlQ4NV9GTjMpLAorCVBJTk1VWF9EQVRBKFRQVTRUTzNfTUFSSywgUE9SVDg2X0ZOMyksCisJUElOTVVYX0RBVEEoSVJRX1RNUEJfTUFSSywgUE9SVDg3X0ZOMSksCisJUElOTVVYX0RBVEEoUFdFTl9NQVJLLCBQT1JUODhfRk4xKSwKKwlQSU5NVVhfREFUQShNRkcxX09VVDFfTUFSSywgUE9SVDg4X0ZOMiksCisJUElOTVVYX0RBVEEoT1ZDTl9NQVJLLCBQT1JUODlfRk4xKSwKKwlQSU5NVVhfREFUQShNRkcxX0lOMV9NQVJLLCBQT1JUODlfRk4yKSwKKwlQSU5NVVhfREFUQShPVkNOMl9NQVJLLCBQT1JUOTBfRk4xKSwKKwlQSU5NVVhfREFUQShNRkcxX0lOMl9NQVJLLCBQT1JUOTBfRk4yKSwKKworCS8qIDQ5LTMgKEZOKSAqLworCVBJTk1VWF9EQVRBKFJGU1BPMV9NQVJLLCBQT1JUOTFfRk4xKSwKKwlQSU5NVVhfREFUQShSRlNQTzJfTUFSSywgUE9SVDkyX0ZOMSksCisJUElOTVVYX0RBVEEoUkZTUE8zX01BUkssIFBPUlQ5M19GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQ5M19WSU9fQ0tPMl9NQVJLLCBQT1JUOTNfRk4yKSwKKwlQSU5NVVhfREFUQShVU0JURVJNX01BUkssIFBPUlQ5NF9GTjEpLAorCVBJTk1VWF9EQVRBKEVYVExQX01BUkssIFBPUlQ5NF9GTjIpLAorCVBJTk1VWF9EQVRBKElESU5fTUFSSywgUE9SVDk1X0ZOMSksCisJUElOTVVYX0RBVEEoU0NJRkE1X0NUU19NQVJLLCBQT1JUOTZfRk4xKSwKKwlQSU5NVVhfREFUQShNRkcwX0lOMV9NQVJLLCBQT1JUOTZfRk4yKSwKKwlQSU5NVVhfREFUQShTQ0lGQTVfUlRTX01BUkssIFBPUlQ5N19GTjEpLAorCVBJTk1VWF9EQVRBKE1GRzBfSU4yX01BUkssIFBPUlQ5N19GTjIpLAorCVBJTk1VWF9EQVRBKFNDSUZBNV9SWERfTUFSSywgUE9SVDk4X0ZOMSksCisJUElOTVVYX0RBVEEoU0NJRkE1X1RYRF9NQVJLLCBQT1JUOTlfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQTVfU0NLX01BUkssIFBPUlQxMDBfRk4xKSwKKwlQSU5NVVhfREFUQShNRkcwX09VVDFfTUFSSywgUE9SVDEwMF9GTjIpLAorCVBJTk1VWF9EQVRBKEEwX0VBMF9NQVJLLCBQT1JUMTAxX0ZOMSksCisJUElOTVVYX0RBVEEoQlNfTUFSSywgUE9SVDEwMV9GTjIpLAorCVBJTk1VWF9EQVRBKEExNF9FQTE0X01BUkssIFBPUlQxMDJfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUMTAyX0tFWU9VVDBfTUFSSywgTVNFTEJDUl9NU0VMMl8wLCBQT1JUMTAyX0ZOMiksCisJUElOTVVYX0RBVEEoQTE1X0VBMTVfTUFSSywgUE9SVDEwM19GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxMDNfS0VZT1VUMV9NQVJLLCBNU0VMQkNSX01TRUwyXzAsIFBPUlQxMDNfRk4yKSwKKwlQSU5NVVhfREFUQShEVl9DTEtPTF9NQVJLLCBQT1JUMTAzX0ZOMyksCisJUElOTVVYX0RBVEEoQTE2X0VBMTZfTUFSSywgUE9SVDEwNF9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxMDRfS0VZT1VUMl9NQVJLLCBNU0VMQkNSX01TRUwyXzAsIFBPUlQxMDRfRk4yKSwKKwlQSU5NVVhfREFUQShEVl9WU1lOQ0xfTUFSSywgUE9SVDEwNF9GTjMpLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9TUzFfTUFSSywgUE9SVDEwNF9GTjQpLAorCVBJTk1VWF9EQVRBKEExN19FQTE3X01BUkssIFBPUlQxMDVfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUMTA1X0tFWU9VVDNfTUFSSywgTVNFTEJDUl9NU0VMMl8wLCBQT1JUMTA1X0ZOMiksCisJUElOTVVYX0RBVEEoRFZfSFNZTkNMX01BUkssIFBPUlQxMDVfRk4zKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfVFNZTkNfTUFSSywgUE9SVDEwNV9GTjQpLAorCVBJTk1VWF9EQVRBKEExOF9FQTE4X01BUkssIFBPUlQxMDZfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUMTA2X0tFWU9VVDRfTUFSSywgTVNFTEJDUl9NU0VMMl8wLCBQT1JUMTA2X0ZOMiksCisJUElOTVVYX0RBVEEoRFZfREwwX01BUkssIFBPUlQxMDZfRk4zKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfVFNDS19NQVJLLCBQT1JUMTA2X0ZONCksCisJUElOTVVYX0RBVEEoQTE5X0VBMTlfTUFSSywgUE9SVDEwN19GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxMDdfS0VZT1VUNV9NQVJLLCBNU0VMQkNSX01TRUwyXzAsIFBPUlQxMDdfRk4yKSwKKwlQSU5NVVhfREFUQShEVl9ETDFfTUFSSywgUE9SVDEwN19GTjMpLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9UWERfTUFSSywgUE9SVDEwN19GTjQpLAorCVBJTk1VWF9EQVRBKEEyMF9FQTIwX01BUkssIFBPUlQxMDhfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUMTA4X0tFWUlOMF9NQVJLLCBNU0VMQkNSX01TRUwyXzAsIFBPUlQxMDhfRk4yKSwKKwlQSU5NVVhfREFUQShEVl9ETDJfTUFSSywgUE9SVDEwOF9GTjMpLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9SU0NLX01BUkssIFBPUlQxMDhfRk40KSwKKwlQSU5NVVhfREFUQShBMjFfRUEyMV9NQVJLLCBQT1JUMTA5X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDEwOV9LRVlJTjFfTUFSSywgTVNFTEJDUl9NU0VMMl8wLCBQT1JUMTA5X0ZOMiksCisJUElOTVVYX0RBVEEoRFZfREwzX01BUkssIFBPUlQxMDlfRk4zKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUlNZTkNfTUFSSywgUE9SVDEwOV9GTjQpLAorCVBJTk1VWF9EQVRBKEEyMl9FQTIyX01BUkssIFBPUlQxMTBfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUMTEwX0tFWUlOMl9NQVJLLCBNU0VMQkNSX01TRUwyXzAsIFBPUlQxMTBfRk4yKSwKKwlQSU5NVVhfREFUQShEVl9ETDRfTUFSSywgUE9SVDExMF9GTjMpLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9NQ0swX01BUkssIFBPUlQxMTBfRk40KSwKKwlQSU5NVVhfREFUQShBMjNfRUEyM19NQVJLLCBQT1JUMTExX0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDExMV9LRVlJTjNfTUFSSywgTVNFTEJDUl9NU0VMMl8wLCBQT1JUMTExX0ZOMiksCisJUElOTVVYX0RBVEEoRFZfREw1X01BUkssIFBPUlQxMTFfRk4zKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfTUNLMV9NQVJLLCBQT1JUMTExX0ZONCksCisJUElOTVVYX0RBVEEoQTI0X0VBMjRfTUFSSywgUE9SVDExMl9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxMTJfS0VZSU40X01BUkssIE1TRUxCQ1JfTVNFTDJfMCwgUE9SVDExMl9GTjIpLAorCVBJTk1VWF9EQVRBKERWX0RMNl9NQVJLLCBQT1JUMTEyX0ZOMyksCisJUElOTVVYX0RBVEEoTVNJT0YwX1JYRF9NQVJLLCBQT1JUMTEyX0ZONCksCisJUElOTVVYX0RBVEEoQTI1X0VBMjVfTUFSSywgUE9SVDExM19GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxMTNfS0VZSU41X01BUkssIE1TRUxCQ1JfTVNFTDJfMCwgUE9SVDExM19GTjIpLAorCVBJTk1VWF9EQVRBKERWX0RMN19NQVJLLCBQT1JUMTEzX0ZOMyksCisJUElOTVVYX0RBVEEoTVNJT0YwX1NTMl9NQVJLLCBQT1JUMTEzX0ZONCksCisJUElOTVVYX0RBVEEoQTI2X01BUkssIFBPUlQxMTRfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUMTEzX0tFWUlONl9NQVJLLCBNU0VMQkNSX01TRUwyXzAsIFBPUlQxMTRfRk4yKSwKKwlQSU5NVVhfREFUQShEVl9DTEtJTF9NQVJLLCBQT1JUMTE0X0ZOMyksCisJUElOTVVYX0RBVEEoRDBfRUQwX05BRjBfTUFSSywgUE9SVDExNV9GTjEpLAorCVBJTk1VWF9EQVRBKEQxX0VEMV9OQUYxX01BUkssIFBPUlQxMTZfRk4xKSwKKwlQSU5NVVhfREFUQShEMl9FRDJfTkFGMl9NQVJLLCBQT1JUMTE3X0ZOMSksCisJUElOTVVYX0RBVEEoRDNfRUQzX05BRjNfTUFSSywgUE9SVDExOF9GTjEpLAorCVBJTk1VWF9EQVRBKEQ0X0VENF9OQUY0X01BUkssIFBPUlQxMTlfRk4xKSwKKwlQSU5NVVhfREFUQShENV9FRDVfTkFGNV9NQVJLLCBQT1JUMTIwX0ZOMSksCisJUElOTVVYX0RBVEEoRDZfRUQ2X05BRjZfTUFSSywgUE9SVDEyMV9GTjEpLAorCVBJTk1VWF9EQVRBKEQ3X0VEN19OQUY3X01BUkssIFBPUlQxMjJfRk4xKSwKKwlQSU5NVVhfREFUQShEOF9FRDhfTkFGOF9NQVJLLCBQT1JUMTIzX0ZOMSksCisJUElOTVVYX0RBVEEoRDlfRUQ5X05BRjlfTUFSSywgUE9SVDEyNF9GTjEpLAorCVBJTk1VWF9EQVRBKEQxMF9FRDEwX05BRjEwX01BUkssIFBPUlQxMjVfRk4xKSwKKwlQSU5NVVhfREFUQShEMTFfRUQxMV9OQUYxMV9NQVJLLCBQT1JUMTI2X0ZOMSksCisJUElOTVVYX0RBVEEoRDEyX0VEMTJfTkFGMTJfTUFSSywgUE9SVDEyN19GTjEpLAorCVBJTk1VWF9EQVRBKEQxM19FRDEzX05BRjEzX01BUkssIFBPUlQxMjhfRk4xKSwKKwlQSU5NVVhfREFUQShEMTRfRUQxNF9OQUYxNF9NQVJLLCBQT1JUMTI5X0ZOMSksCisJUElOTVVYX0RBVEEoRDE1X0VEMTVfTkFGMTVfTUFSSywgUE9SVDEzMF9GTjEpLAorCVBJTk1VWF9EQVRBKENTNF9NQVJLLCBQT1JUMTMxX0ZOMSksCisJUElOTVVYX0RBVEEoQ1M1QV9NQVJLLCBQT1JUMTMyX0ZOMSksCisJUElOTVVYX0RBVEEoQ1M1Ql9NQVJLLCBQT1JUMTMzX0ZOMSksCisJUElOTVVYX0RBVEEoRkNFMV9NQVJLLCBQT1JUMTMzX0ZOMiksCisJUElOTVVYX0RBVEEoQ1M2Ql9NQVJLLCBQT1JUMTM0X0ZOMSksCisJUElOTVVYX0RBVEEoWENTMl9NQVJLLCBQT1JUMTM0X0ZOMiksCisJUElOTVVYX0RBVEEoRkNFMF9NQVJLLCBQT1JUMTM1X0ZOMSksCisJUElOTVVYX0RBVEEoQ1M2QV9NQVJLLCBQT1JUMTM2X0ZOMSksCisJUElOTVVYX0RBVEEoREFDSzBfTUFSSywgUE9SVDEzNl9GTjIpLAorCVBJTk1VWF9EQVRBKFdBSVRfTUFSSywgUE9SVDEzN19GTjEpLAorCVBJTk1VWF9EQVRBKERSRVEwX01BUkssIFBPUlQxMzdfRk4yKSwKKwlQSU5NVVhfREFUQShSRF9YUkRfTUFSSywgUE9SVDEzOF9GTjEpLAorCVBJTk1VWF9EQVRBKEEyN19NQVJLLCBQT1JUMTM5X0ZOMSksCisJUElOTVVYX0RBVEEoUkRXUl9YV0VfTUFSSywgUE9SVDEzOV9GTjIpLAorCVBJTk1VWF9EQVRBKFdFMF9YV1IwX0ZXRV9NQVJLLCBQT1JUMTQwX0ZOMSksCisJUElOTVVYX0RBVEEoV0UxX1hXUjFfTUFSSywgUE9SVDE0MV9GTjEpLAorCVBJTk1VWF9EQVRBKEZSQl9NQVJLLCBQT1JUMTQyX0ZOMSksCisJUElOTVVYX0RBVEEoQ0tPX01BUkssIFBPUlQxNDNfRk4xKSwKKwlQSU5NVVhfREFUQShOQlJTVE9VVF9NQVJLLCBQT1JUMTQ0X0ZOMSksCisJUElOTVVYX0RBVEEoTkJSU1RfTUFSSywgUE9SVDE0NV9GTjEpLAorCisJLyogNDktNCAoRk4pICovCisJUElOTVVYX0RBVEEoUkZTUE8wX01BUkssIFBPUlQxNDZfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUMTQ2X1ZJT19DS08yX01BUkssIFBPUlQxNDZfRk4yKSwKKwlQSU5NVVhfREFUQShUU1RNRF9NQVJLLCBQT1JUMTQ3X0ZOMSksCisJUElOTVVYX0RBVEEoVklPX1ZEX01BUkssIFBPUlQxNDhfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fSERfTUFSSywgUE9SVDE0OV9GTjEpLAorCVBJTk1VWF9EQVRBKFZJT19EMF9NQVJLLCBQT1JUMTUwX0ZOMSksCisJUElOTVVYX0RBVEEoVklPX0QxX01BUkssIFBPUlQxNTFfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fRDJfTUFSSywgUE9SVDE1Ml9GTjEpLAorCVBJTk1VWF9EQVRBKFZJT19EM19NQVJLLCBQT1JUMTUzX0ZOMSksCisJUElOTVVYX0RBVEEoVklPX0Q0X01BUkssIFBPUlQxNTRfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fRDVfTUFSSywgUE9SVDE1NV9GTjEpLAorCVBJTk1VWF9EQVRBKFZJT19ENl9NQVJLLCBQT1JUMTU2X0ZOMSksCisJUElOTVVYX0RBVEEoVklPX0Q3X01BUkssIFBPUlQxNTdfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fRDhfTUFSSywgUE9SVDE1OF9GTjEpLAorCVBJTk1VWF9EQVRBKFZJT19EOV9NQVJLLCBQT1JUMTU5X0ZOMSksCisJUElOTVVYX0RBVEEoVklPX0QxMF9NQVJLLCBQT1JUMTYwX0ZOMSksCisJUElOTVVYX0RBVEEoVklPX0QxMV9NQVJLLCBQT1JUMTYxX0ZOMSksCisJUElOTVVYX0RBVEEoVklPX0QxMl9NQVJLLCBQT1JUMTYyX0ZOMSksCisJUElOTVVYX0RBVEEoVklPX0QxM19NQVJLLCBQT1JUMTYzX0ZOMSksCisJUElOTVVYX0RBVEEoVklPX0QxNF9NQVJLLCBQT1JUMTY0X0ZOMSksCisJUElOTVVYX0RBVEEoVklPX0QxNV9NQVJLLCBQT1JUMTY1X0ZOMSksCisJUElOTVVYX0RBVEEoVklPX0NMS19NQVJLLCBQT1JUMTY2X0ZOMSksCisJUElOTVVYX0RBVEEoVklPX0ZJRUxEX01BUkssIFBPUlQxNjdfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fQ0tPX01BUkssIFBPUlQxNjhfRk4xKSwKKwlQSU5NVVhfREFUQShNRkczX0lOMV9NQVJLLCBQT1JUMTY5X0ZOMiksCisJUElOTVVYX0RBVEEoTUZHM19JTjJfTUFSSywgUE9SVDE3MF9GTjIpLAorCVBJTk1VWF9EQVRBKE05X1NMQ0RfQTAxX01BUkssIFBPUlQxNzFfRk4xKSwKKwlQSU5NVVhfREFUQShNRkczX09VVDFfTUFSSywgUE9SVDE3MV9GTjIpLAorCVBJTk1VWF9EQVRBKFRQVTBUTzBfTUFSSywgUE9SVDE3MV9GTjMpLAorCVBJTk1VWF9EQVRBKE0xMF9TTENEX0NLMV9NQVJLLCBQT1JUMTcyX0ZOMSksCisJUElOTVVYX0RBVEEoTUZHNF9JTjFfTUFSSywgUE9SVDE3Ml9GTjIpLAorCVBJTk1VWF9EQVRBKFRQVTBUTzFfTUFSSywgUE9SVDE3Ml9GTjMpLAorCVBJTk1VWF9EQVRBKE0xMV9TTENEX1NPMV9NQVJLLCBQT1JUMTczX0ZOMSksCisJUElOTVVYX0RBVEEoTUZHNF9JTjJfTUFSSywgUE9SVDE3M19GTjIpLAorCVBJTk1VWF9EQVRBKFRQVTBUTzJfTUFSSywgUE9SVDE3M19GTjMpLAorCVBJTk1VWF9EQVRBKE0xMl9TTENEX0NFMV9NQVJLLCBQT1JUMTc0X0ZOMSksCisJUElOTVVYX0RBVEEoTUZHNF9PVVQxX01BUkssIFBPUlQxNzRfRk4yKSwKKwlQSU5NVVhfREFUQShUUFUwVE8zX01BUkssIFBPUlQxNzRfRk4zKSwKKwlQSU5NVVhfREFUQShMQ0REMF9NQVJLLCBQT1JUMTc1X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDE3NV9LRVlPVVQwX01BUkssIFBPUlQxNzVfRk4yKSwKKwlQSU5NVVhfREFUQShEVl9EMF9NQVJLLCBQT1JUMTc1X0ZOMyksCisJUElOTVVYX0RBVEEoU0lVQ0tBX01BUkssIFBPUlQxNzVfRk40KSwKKwlQSU5NVVhfREFUQShNRkcwX09VVDJfTUFSSywgUE9SVDE3NV9GTjUpLAorCVBJTk1VWF9EQVRBKExDREQxX01BUkssIFBPUlQxNzZfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUMTc2X0tFWU9VVDFfTUFSSywgUE9SVDE3Nl9GTjIpLAorCVBJTk1VWF9EQVRBKERWX0QxX01BUkssIFBPUlQxNzZfRk4zKSwKKwlQSU5NVVhfREFUQShTSVVBT0xSX01BUkssIFBPUlQxNzZfRk40KSwKKwlQSU5NVVhfREFUQShCQklGMl9UU1lOQzFfTUFSSywgUE9SVDE3Nl9GTjUpLAorCVBJTk1VWF9EQVRBKExDREQyX01BUkssIFBPUlQxNzdfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUMTc3X0tFWU9VVDJfTUFSSywgUE9SVDE3N19GTjIpLAorCVBJTk1VWF9EQVRBKERWX0QyX01BUkssIFBPUlQxNzdfRk4zKSwKKwlQSU5NVVhfREFUQShTSVVBT0JUX01BUkssIFBPUlQxNzdfRk40KSwKKwlQSU5NVVhfREFUQShCQklGMl9UU0NLMV9NQVJLLCBQT1JUMTc3X0ZONSksCisJUElOTVVYX0RBVEEoTENERDNfTUFSSywgUE9SVDE3OF9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxNzhfS0VZT1VUM19NQVJLLCBQT1JUMTc4X0ZOMiksCisJUElOTVVYX0RBVEEoRFZfRDNfTUFSSywgUE9SVDE3OF9GTjMpLAorCVBJTk1VWF9EQVRBKFNJVUFPU0xEX01BUkssIFBPUlQxNzhfRk40KSwKKwlQSU5NVVhfREFUQShCQklGMl9UWEQxX01BUkssIFBPUlQxNzhfRk41KSwKKwlQSU5NVVhfREFUQShMQ0RENF9NQVJLLCBQT1JUMTc5X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDE3OV9LRVlPVVQ0X01BUkssIFBPUlQxNzlfRk4yKSwKKwlQSU5NVVhfREFUQShEVl9ENF9NQVJLLCBQT1JUMTc5X0ZOMyksCisJUElOTVVYX0RBVEEoU0lVQUlTUERfTUFSSywgUE9SVDE3OV9GTjQpLAorCVBJTk1VWF9EQVRBKE1GRzFfT1VUMl9NQVJLLCBQT1JUMTc5X0ZONSksCisJUElOTVVYX0RBVEEoTENERDVfTUFSSywgUE9SVDE4MF9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxODBfS0VZT1VUNV9NQVJLLCBQT1JUMTgwX0ZOMiksCisJUElOTVVYX0RBVEEoRFZfRDVfTUFSSywgUE9SVDE4MF9GTjMpLAorCVBJTk1VWF9EQVRBKFNJVUFJTFJfTUFSSywgUE9SVDE4MF9GTjQpLAorCVBJTk1VWF9EQVRBKE1GRzJfT1VUMl9NQVJLLCBQT1JUMTgwX0ZONSksCisJUElOTVVYX0RBVEEoTENERDZfTUFSSywgUE9SVDE4MV9GTjEpLAorCVBJTk1VWF9EQVRBKERWX0Q2X01BUkssIFBPUlQxODFfRk4zKSwKKwlQSU5NVVhfREFUQShTSVVBSUJUX01BUkssIFBPUlQxODFfRk40KSwKKwlQSU5NVVhfREFUQShNRkczX09VVDJfTUFSSywgUE9SVDE4MV9GTjUpLAorCVBJTk1VWF9EQVRBKFhXUjJfTUFSSywgUE9SVDE4MV9GTjcpLAorCVBJTk1VWF9EQVRBKExDREQ3X01BUkssIFBPUlQxODJfRk4xKSwKKwlQSU5NVVhfREFUQShEVl9EN19NQVJLLCBQT1JUMTgyX0ZOMyksCisJUElOTVVYX0RBVEEoU0lVQUlTTERfTUFSSywgUE9SVDE4Ml9GTjQpLAorCVBJTk1VWF9EQVRBKE1GRzRfT1VUMl9NQVJLLCBQT1JUMTgyX0ZONSksCisJUElOTVVYX0RBVEEoWFdSM19NQVJLLCBQT1JUMTgyX0ZONyksCisJUElOTVVYX0RBVEEoTENERDhfTUFSSywgUE9SVDE4M19GTjEpLAorCVBJTk1VWF9EQVRBKERWX0Q4X01BUkssIFBPUlQxODNfRk4zKSwKKwlQSU5NVVhfREFUQShEMTZfTUFSSywgUE9SVDE4M19GTjYpLAorCVBJTk1VWF9EQVRBKEVEMTZfTUFSSywgUE9SVDE4M19GTjcpLAorCVBJTk1VWF9EQVRBKExDREQ5X01BUkssIFBPUlQxODRfRk4xKSwKKwlQSU5NVVhfREFUQShEVl9EOV9NQVJLLCBQT1JUMTg0X0ZOMyksCisJUElOTVVYX0RBVEEoRDE3X01BUkssIFBPUlQxODRfRk42KSwKKwlQSU5NVVhfREFUQShFRDE3X01BUkssIFBPUlQxODRfRk43KSwKKwlQSU5NVVhfREFUQShMQ0REMTBfTUFSSywgUE9SVDE4NV9GTjEpLAorCVBJTk1VWF9EQVRBKERWX0QxMF9NQVJLLCBQT1JUMTg1X0ZOMyksCisJUElOTVVYX0RBVEEoRDE4X01BUkssIFBPUlQxODVfRk42KSwKKwlQSU5NVVhfREFUQShFRDE4X01BUkssIFBPUlQxODVfRk43KSwKKwlQSU5NVVhfREFUQShMQ0REMTFfTUFSSywgUE9SVDE4Nl9GTjEpLAorCVBJTk1VWF9EQVRBKERWX0QxMV9NQVJLLCBQT1JUMTg2X0ZOMyksCisJUElOTVVYX0RBVEEoRDE5X01BUkssIFBPUlQxODZfRk42KSwKKwlQSU5NVVhfREFUQShFRDE5X01BUkssIFBPUlQxODZfRk43KSwKKwlQSU5NVVhfREFUQShMQ0REMTJfTUFSSywgUE9SVDE4N19GTjEpLAorCVBJTk1VWF9EQVRBKERWX0QxMl9NQVJLLCBQT1JUMTg3X0ZOMyksCisJUElOTVVYX0RBVEEoRDIwX01BUkssIFBPUlQxODdfRk42KSwKKwlQSU5NVVhfREFUQShFRDIwX01BUkssIFBPUlQxODdfRk43KSwKKwlQSU5NVVhfREFUQShMQ0REMTNfTUFSSywgUE9SVDE4OF9GTjEpLAorCVBJTk1VWF9EQVRBKERWX0QxM19NQVJLLCBQT1JUMTg4X0ZOMyksCisJUElOTVVYX0RBVEEoRDIxX01BUkssIFBPUlQxODhfRk42KSwKKwlQSU5NVVhfREFUQShFRDIxX01BUkssIFBPUlQxODhfRk43KSwKKwlQSU5NVVhfREFUQShMQ0REMTRfTUFSSywgUE9SVDE4OV9GTjEpLAorCVBJTk1VWF9EQVRBKERWX0QxNF9NQVJLLCBQT1JUMTg5X0ZOMyksCisJUElOTVVYX0RBVEEoRDIyX01BUkssIFBPUlQxODlfRk42KSwKKwlQSU5NVVhfREFUQShFRDIyX01BUkssIFBPUlQxODlfRk43KSwKKwlQSU5NVVhfREFUQShMQ0REMTVfTUFSSywgUE9SVDE5MF9GTjEpLAorCVBJTk1VWF9EQVRBKERWX0QxNV9NQVJLLCBQT1JUMTkwX0ZOMyksCisJUElOTVVYX0RBVEEoRDIzX01BUkssIFBPUlQxOTBfRk42KSwKKwlQSU5NVVhfREFUQShFRDIzX01BUkssIFBPUlQxOTBfRk43KSwKKwlQSU5NVVhfREFUQShMQ0REMTZfTUFSSywgUE9SVDE5MV9GTjEpLAorCVBJTk1VWF9EQVRBKERWX0hTWU5DX01BUkssIFBPUlQxOTFfRk4zKSwKKwlQSU5NVVhfREFUQShEMjRfTUFSSywgUE9SVDE5MV9GTjYpLAorCVBJTk1VWF9EQVRBKEVEMjRfTUFSSywgUE9SVDE5MV9GTjcpLAorCVBJTk1VWF9EQVRBKExDREQxN19NQVJLLCBQT1JUMTkyX0ZOMSksCisJUElOTVVYX0RBVEEoRFZfVlNZTkNfTUFSSywgUE9SVDE5Ml9GTjMpLAorCVBJTk1VWF9EQVRBKEQyNV9NQVJLLCBQT1JUMTkyX0ZONiksCisJUElOTVVYX0RBVEEoRUQyNV9NQVJLLCBQT1JUMTkyX0ZONyksCisJUElOTVVYX0RBVEEoTENERDE4X01BUkssIFBPUlQxOTNfRk4xKSwKKwlQSU5NVVhfREFUQShEUkVRMl9NQVJLLCBQT1JUMTkzX0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YwTF9UU0NLX01BUkssIFBPUlQxOTNfRk41KSwKKwlQSU5NVVhfREFUQShEMjZfTUFSSywgUE9SVDE5M19GTjYpLAorCVBJTk1VWF9EQVRBKEVEMjZfTUFSSywgUE9SVDE5M19GTjcpLAorCVBJTk1VWF9EQVRBKExDREQxOV9NQVJLLCBQT1JUMTk0X0ZOMSksCisJUElOTVVYX0RBVEEoTVNJT0YwTF9UU1lOQ19NQVJLLCBQT1JUMTk0X0ZONSksCisJUElOTVVYX0RBVEEoRDI3X01BUkssIFBPUlQxOTRfRk42KSwKKwlQSU5NVVhfREFUQShFRDI3X01BUkssIFBPUlQxOTRfRk43KSwKKwlQSU5NVVhfREFUQShMQ0REMjBfTUFSSywgUE9SVDE5NV9GTjEpLAorCVBJTk1VWF9EQVRBKFRTX1NQU1lOQzFfTUFSSywgUE9SVDE5NV9GTjIpLAorCVBJTk1VWF9EQVRBKE1TSU9GMExfTUNLMF9NQVJLLCBQT1JUMTk1X0ZONSksCisJUElOTVVYX0RBVEEoRDI4X01BUkssIFBPUlQxOTVfRk42KSwKKwlQSU5NVVhfREFUQShFRDI4X01BUkssIFBPUlQxOTVfRk43KSwKKwlQSU5NVVhfREFUQShMQ0REMjFfTUFSSywgUE9SVDE5Nl9GTjEpLAorCVBJTk1VWF9EQVRBKFRTX1NEQVQxX01BUkssIFBPUlQxOTZfRk4yKSwKKwlQSU5NVVhfREFUQShNU0lPRjBMX01DSzFfTUFSSywgUE9SVDE5Nl9GTjUpLAorCVBJTk1VWF9EQVRBKEQyOV9NQVJLLCBQT1JUMTk2X0ZONiksCisJUElOTVVYX0RBVEEoRUQyOV9NQVJLLCBQT1JUMTk2X0ZONyksCisJUElOTVVYX0RBVEEoTENERDIyX01BUkssIFBPUlQxOTdfRk4xKSwKKwlQSU5NVVhfREFUQShUU19TREVOMV9NQVJLLCBQT1JUMTk3X0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YwTF9TUzFfTUFSSywgUE9SVDE5N19GTjUpLAorCVBJTk1VWF9EQVRBKEQzMF9NQVJLLCBQT1JUMTk3X0ZONiksCisJUElOTVVYX0RBVEEoRUQzMF9NQVJLLCBQT1JUMTk3X0ZONyksCisJUElOTVVYX0RBVEEoTENERDIzX01BUkssIFBPUlQxOThfRk4xKSwKKwlQSU5NVVhfREFUQShUU19TQ0sxX01BUkssIFBPUlQxOThfRk4yKSwKKwlQSU5NVVhfREFUQShNU0lPRjBMX1NTMl9NQVJLLCBQT1JUMTk4X0ZONSksCisJUElOTVVYX0RBVEEoRDMxX01BUkssIFBPUlQxOThfRk42KSwKKwlQSU5NVVhfREFUQShFRDMxX01BUkssIFBPUlQxOThfRk43KSwKKwlQSU5NVVhfREFUQShMQ0REQ0tfTUFSSywgUE9SVDE5OV9GTjEpLAorCVBJTk1VWF9EQVRBKExDRFdSX01BUkssIFBPUlQxOTlfRk4yKSwKKwlQSU5NVVhfREFUQShEVl9DS09fTUFSSywgUE9SVDE5OV9GTjMpLAorCVBJTk1VWF9EQVRBKFNJVUFPU1BEX01BUkssIFBPUlQxOTlfRk40KSwKKwlQSU5NVVhfREFUQShMQ0RSRF9NQVJLLCBQT1JUMjAwX0ZOMSksCisJUElOTVVYX0RBVEEoREFDSzJfTUFSSywgUE9SVDIwMF9GTjIpLAorCVBJTk1VWF9EQVRBKE1TSU9GMExfUlNZTkNfTUFSSywgUE9SVDIwMF9GTjUpLAorCisJLyogNDktNSAoRk4pICovCisJUElOTVVYX0RBVEEoTENESFNZTl9NQVJLLCBQT1JUMjAxX0ZOMSksCisJUElOTVVYX0RBVEEoTENEQ1NfTUFSSywgUE9SVDIwMV9GTjIpLAorCVBJTk1VWF9EQVRBKExDRENTMl9NQVJLLCBQT1JUMjAxX0ZOMyksCisJUElOTVVYX0RBVEEoREFDSzNfTUFSSywgUE9SVDIwMV9GTjQpLAorCVBJTk1VWF9EQVRBKExDRERJU1BfTUFSSywgUE9SVDIwMl9GTjEpLAorCVBJTk1VWF9EQVRBKExDRFJTX01BUkssIFBPUlQyMDJfRk4yKSwKKwlQSU5NVVhfREFUQShEUkVRM19NQVJLLCBQT1JUMjAyX0ZONCksCisJUElOTVVYX0RBVEEoTVNJT0YwTF9SU0NLX01BUkssIFBPUlQyMDJfRk41KSwKKwlQSU5NVVhfREFUQShMQ0RDU1lOX01BUkssIFBPUlQyMDNfRk4xKSwKKwlQSU5NVVhfREFUQShMQ0RDU1lOMl9NQVJLLCBQT1JUMjAzX0ZOMiksCisJUElOTVVYX0RBVEEoRFZfQ0tJX01BUkssIFBPUlQyMDNfRk4zKSwKKwlQSU5NVVhfREFUQShMQ0RMQ0xLX01BUkssIFBPUlQyMDRfRk4xKSwKKwlQSU5NVVhfREFUQShEUkVRMV9NQVJLLCBQT1JUMjA0X0ZOMyksCisJUElOTVVYX0RBVEEoTVNJT0YwTF9SWERfTUFSSywgUE9SVDIwNF9GTjUpLAorCVBJTk1VWF9EQVRBKExDRERPTl9NQVJLLCBQT1JUMjA1X0ZOMSksCisJUElOTVVYX0RBVEEoTENERE9OMl9NQVJLLCBQT1JUMjA1X0ZOMiksCisJUElOTVVYX0RBVEEoREFDSzFfTUFSSywgUE9SVDIwNV9GTjMpLAorCVBJTk1VWF9EQVRBKE1TSU9GMExfVFhEX01BUkssIFBPUlQyMDVfRk41KSwKKwlQSU5NVVhfREFUQShWSU9fRFIwX01BUkssIFBPUlQyMDZfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fRFIxX01BUkssIFBPUlQyMDdfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fRFIyX01BUkssIFBPUlQyMDhfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fRFIzX01BUkssIFBPUlQyMDlfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fRFI0X01BUkssIFBPUlQyMTBfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fRFI1X01BUkssIFBPUlQyMTFfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fRFI2X01BUkssIFBPUlQyMTJfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fRFI3X01BUkssIFBPUlQyMTNfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fVkRSX01BUkssIFBPUlQyMTRfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fSERSX01BUkssIFBPUlQyMTVfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fQ0xLUl9NQVJLLCBQT1JUMjE2X0ZOMSksCisJUElOTVVYX0RBVEEoVklPX0NLT1JfTUFSSywgUE9SVDIxN19GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZBMV9UWERfTUFSSywgUE9SVDIyMF9GTjIpLAorCVBJTk1VWF9EQVRBKEdQU19QR0ZBMF9NQVJLLCBQT1JUMjIwX0ZOMyksCisJUElOTVVYX0RBVEEoU0NJRkExX1NDS19NQVJLLCBQT1JUMjIxX0ZOMiksCisJUElOTVVYX0RBVEEoR1BTX1BHRkExX01BUkssIFBPUlQyMjFfRk4zKSwKKwlQSU5NVVhfREFUQShTQ0lGQTFfUlRTX01BUkssIFBPUlQyMjJfRk4yKSwKKwlQSU5NVVhfREFUQShHUFNfRVBQU0lOTU9OX01BUkssIFBPUlQyMjJfRk4zKSwKKwlQSU5NVVhfREFUQShTQ0lGQTFfUlhEX01BUkssIFBPUlQyMjNfRk4yKSwKKwlQSU5NVVhfREFUQShTQ0lGQTFfQ1RTX01BUkssIFBPUlQyMjRfRk4yKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfVFhEX01BUkssIFBPUlQyMjVfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQTFfVFhEMl9NQVJLLCBQT1JUMjI1X0ZOMiksCisJUElOTVVYX0RBVEEoR1BTX1RYRF9NQVJLLCBQT1JUMjI1X0ZOMyksCisJUElOTVVYX0RBVEEoTVNJT0YxX1RTWU5DX01BUkssIFBPUlQyMjZfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQTFfQ1RTMl9NQVJLLCBQT1JUMjI2X0ZOMiksCisJUElOTVVYX0RBVEEoSTJDX1NEQTJfTUFSSywgUE9SVDIyNl9GTjMpLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9UU0NLX01BUkssIFBPUlQyMjdfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQTFfU0NLMl9NQVJLLCBQT1JUMjI3X0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YxX1JYRF9NQVJLLCBQT1JUMjI4X0ZOMSksCisJUElOTVVYX0RBVEEoU0NJRkExX1JYRDJfTUFSSywgUE9SVDIyOF9GTjIpLAorCVBJTk1VWF9EQVRBKEdQU19SWERfTUFSSywgUE9SVDIyOF9GTjMpLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9SU0NLX01BUkssIFBPUlQyMjlfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQTFfUlRTMl9NQVJLLCBQT1JUMjI5X0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YxX1JTWU5DX01BUkssIFBPUlQyMzBfRk4xKSwKKwlQSU5NVVhfREFUQShJMkNfU0NMMl9NQVJLLCBQT1JUMjMwX0ZOMyksCisJUElOTVVYX0RBVEEoTVNJT0YxX01DSzBfTUFSSywgUE9SVDIzMV9GTjEpLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9NQ0sxX01BUkssIFBPUlQyMzJfRk4xKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfU1MxX01BUkssIFBPUlQyMzNfRk4xKSwKKwlQSU5NVVhfREFUQShFREJHUkVRM19NQVJLLCBQT1JUMjMzX0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YxX1NTMl9NQVJLLCBQT1JUMjM0X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDIzNl9JUk9VVF9NQVJLLCBQT1JUMjM2X0ZOMSksCisJUElOTVVYX0RBVEEoSVJEQV9PVVRfTUFSSywgUE9SVDIzNl9GTjIpLAorCVBJTk1VWF9EQVRBKElSREFfSU5fTUFSSywgUE9SVDIzN19GTjIpLAorCVBJTk1VWF9EQVRBKElSREFfRklSU0VMX01BUkssIFBPUlQyMzhfRk4xKSwKKwlQSU5NVVhfREFUQShUUFUxVE8wX01BUkssIFBPUlQyMzlfRk4zKSwKKwlQSU5NVVhfREFUQShUU19TUFNZTkMzX01BUkssIFBPUlQyMzlfRk40KSwKKwlQSU5NVVhfREFUQShUUFUxVE8xX01BUkssIFBPUlQyNDBfRk4zKSwKKwlQSU5NVVhfREFUQShUU19TREFUM19NQVJLLCBQT1JUMjQwX0ZONCksCisJUElOTVVYX0RBVEEoVFBVMVRPMl9NQVJLLCBQT1JUMjQxX0ZOMyksCisJUElOTVVYX0RBVEEoVFNfU0RFTjNfTUFSSywgUE9SVDI0MV9GTjQpLAorCVBJTk1VWF9EQVRBKFBPUlQyNDFfTVNJT0YyX1NTMV9NQVJLLCBQT1JUMjQxX0ZONSksCisJUElOTVVYX0RBVEEoVFBVMVRPM19NQVJLLCBQT1JUMjQyX0ZOMyksCisJUElOTVVYX0RBVEEoUE9SVDI0Ml9NU0lPRjJfVFNDS19NQVJLLCBQT1JUMjQyX0ZONSksCisJUElOTVVYX0RBVEEoTTEzX0JTV19NQVJLLCBQT1JUMjQzX0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDI0M19NU0lPRjJfVFNZTkNfTUFSSywgUE9SVDI0M19GTjUpLAorCVBJTk1VWF9EQVRBKE0xNF9HU1dfTUFSSywgUE9SVDI0NF9GTjIpLAorCVBJTk1VWF9EQVRBKFBPUlQyNDRfTVNJT0YyX1RYRF9NQVJLLCBQT1JUMjQ0X0ZONSksCisJUElOTVVYX0RBVEEoUE9SVDI0NV9JUk9VVF9NQVJLLCBQT1JUMjQ1X0ZOMSksCisJUElOTVVYX0RBVEEoTTE1X1JTV19NQVJLLCBQT1JUMjQ1X0ZOMiksCisJUElOTVVYX0RBVEEoU09VVDNfTUFSSywgUE9SVDI0Nl9GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZBMl9UWEQxX01BUkssIFBPUlQyNDZfRk4yKSwKKwlQSU5NVVhfREFUQShTSU4zX01BUkssIFBPUlQyNDdfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQTJfUlhEMV9NQVJLLCBQT1JUMjQ3X0ZOMiksCisJUElOTVVYX0RBVEEoWFJUUzNfTUFSSywgUE9SVDI0OF9GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZBMl9SVFMxX01BUkssIFBPUlQyNDhfRk4yKSwKKwlQSU5NVVhfREFUQShQT1JUMjQ4X01TSU9GMl9TUzJfTUFSSywgUE9SVDI0OF9GTjUpLAorCVBJTk1VWF9EQVRBKFhDVFMzX01BUkssIFBPUlQyNDlfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQTJfQ1RTMV9NQVJLLCBQT1JUMjQ5X0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDI0OV9NU0lPRjJfUlhEX01BUkssIFBPUlQyNDlfRk41KSwKKwlQSU5NVVhfREFUQShESU5UX01BUkssIFBPUlQyNTBfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQTJfU0NLMV9NQVJLLCBQT1JUMjUwX0ZOMiksCisJUElOTVVYX0RBVEEoVFNfU0NLM19NQVJLLCBQT1JUMjUwX0ZONCksCisJUElOTVVYX0RBVEEoU0RISUNMSzBfTUFSSywgUE9SVDI1MV9GTjEpLAorCVBJTk1VWF9EQVRBKFRDSzJfTUFSSywgUE9SVDI1MV9GTjIpLAorCVBJTk1VWF9EQVRBKFNESElDRDBfTUFSSywgUE9SVDI1Ml9GTjEpLAorCVBJTk1VWF9EQVRBKFNESElEMF8wX01BUkssIFBPUlQyNTNfRk4xKSwKKwlQSU5NVVhfREFUQShUTVMyX01BUkssIFBPUlQyNTNfRk4yKSwKKwlQSU5NVVhfREFUQShTREhJRDBfMV9NQVJLLCBQT1JUMjU0X0ZOMSksCisJUElOTVVYX0RBVEEoVERPMl9NQVJLLCBQT1JUMjU0X0ZOMiksCisJUElOTVVYX0RBVEEoU0RISUQwXzJfTUFSSywgUE9SVDI1NV9GTjEpLAorCVBJTk1VWF9EQVRBKFRESTJfTUFSSywgUE9SVDI1NV9GTjIpLAorCVBJTk1VWF9EQVRBKFNESElEMF8zX01BUkssIFBPUlQyNTZfRk4xKSwKKwlQSU5NVVhfREFUQShSVENLMl9NQVJLLCBQT1JUMjU2X0ZOMiksCisKKwkvKiA0OS02IChGTikgKi8KKwlQSU5NVVhfREFUQShTREhJQ01EMF9NQVJLLCBQT1JUMjU3X0ZOMSksCisJUElOTVVYX0RBVEEoVFJTVDJfTUFSSywgUE9SVDI1N19GTjIpLAorCVBJTk1VWF9EQVRBKFNESElXUDBfTUFSSywgUE9SVDI1OF9GTjEpLAorCVBJTk1VWF9EQVRBKEVEQkdSRVEyX01BUkssIFBPUlQyNThfRk4yKSwKKwlQSU5NVVhfREFUQShTREhJQ0xLMV9NQVJLLCBQT1JUMjU5X0ZOMSksCisJUElOTVVYX0RBVEEoVENLM19NQVJLLCBQT1JUMjU5X0ZONCksCisJUElOTVVYX0RBVEEoU0RISUQxXzBfTUFSSywgUE9SVDI2MF9GTjEpLAorCVBJTk1VWF9EQVRBKE0xMV9TTENEX1NPMl9NQVJLLCBQT1JUMjYwX0ZOMiksCisJUElOTVVYX0RBVEEoVFNfU1BTWU5DMl9NQVJLLCBQT1JUMjYwX0ZOMyksCisJUElOTVVYX0RBVEEoVE1TM19NQVJLLCBQT1JUMjYwX0ZONCksCisJUElOTVVYX0RBVEEoU0RISUQxXzFfTUFSSywgUE9SVDI2MV9GTjEpLAorCVBJTk1VWF9EQVRBKE05X1NMQ0RfQU8yX01BUkssIFBPUlQyNjFfRk4yKSwKKwlQSU5NVVhfREFUQShUU19TREFUMl9NQVJLLCBQT1JUMjYxX0ZOMyksCisJUElOTVVYX0RBVEEoVERPM19NQVJLLCBQT1JUMjYxX0ZONCksCisJUElOTVVYX0RBVEEoU0RISUQxXzJfTUFSSywgUE9SVDI2Ml9GTjEpLAorCVBJTk1VWF9EQVRBKE0xMF9TTENEX0NLMl9NQVJLLCBQT1JUMjYyX0ZOMiksCisJUElOTVVYX0RBVEEoVFNfU0RFTjJfTUFSSywgUE9SVDI2Ml9GTjMpLAorCVBJTk1VWF9EQVRBKFRESTNfTUFSSywgUE9SVDI2Ml9GTjQpLAorCVBJTk1VWF9EQVRBKFNESElEMV8zX01BUkssIFBPUlQyNjNfRk4xKSwKKwlQSU5NVVhfREFUQShNMTJfU0xDRF9DRTJfTUFSSywgUE9SVDI2M19GTjIpLAorCVBJTk1VWF9EQVRBKFRTX1NDSzJfTUFSSywgUE9SVDI2M19GTjMpLAorCVBJTk1VWF9EQVRBKFJUQ0szX01BUkssIFBPUlQyNjNfRk40KSwKKwlQSU5NVVhfREFUQShTREhJQ01EMV9NQVJLLCBQT1JUMjY0X0ZOMSksCisJUElOTVVYX0RBVEEoVFJTVDNfTUFSSywgUE9SVDI2NF9GTjQpLAorCVBJTk1VWF9EQVRBKFNESElDTEsyX01BUkssIFBPUlQyNjVfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQl9TQ0tfTUFSSywgUE9SVDI2NV9GTjIpLAorCVBJTk1VWF9EQVRBKFNESElEMl8wX01BUkssIFBPUlQyNjZfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQl9UWERfTUFSSywgUE9SVDI2Nl9GTjIpLAorCVBJTk1VWF9EQVRBKFNESElEMl8xX01BUkssIFBPUlQyNjdfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQl9DVFNfTUFSSywgUE9SVDI2N19GTjIpLAorCVBJTk1VWF9EQVRBKFNESElEMl8yX01BUkssIFBPUlQyNjhfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQl9SWERfTUFSSywgUE9SVDI2OF9GTjIpLAorCVBJTk1VWF9EQVRBKFNESElEMl8zX01BUkssIFBPUlQyNjlfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQl9SVFNfTUFSSywgUE9SVDI2OV9GTjIpLAorCVBJTk1VWF9EQVRBKFNESElDTUQyX01BUkssIFBPUlQyNzBfRk4xKSwKKwlQSU5NVVhfREFUQShSRVNFVE9VVFNfTUFSSywgUE9SVDI3MV9GTjEpLAorCVBJTk1VWF9EQVRBKERJVkxPQ0tfTUFSSywgUE9SVDI3Ml9GTjEpLAorfTsKKworI2RlZmluZSBfR1BJT19QT1JUKHBmeCwgc2Z4KSBQSU5NVVhfR1BJTyhHUElPX1BPUlQjI3BmeCwgUE9SVCMjcGZ4IyNfREFUQSkKKyNkZWZpbmUgR1BJT19QT1JUXzI3MygpIF8yNzMoX0dQSU9fUE9SVCwgLCB1bnVzZWQpCisjZGVmaW5lIEdQSU9fRk4oc3RyKSBQSU5NVVhfR1BJTyhHUElPX0ZOXyMjc3RyLCBzdHIjI19NQVJLKQorCitzdGF0aWMgc3RydWN0IHBpbm11eF9ncGlvIHBpbm11eF9ncGlvc1tdID0geworCS8qIDQ5LTEgLT4gNDktNiAoR1BJTykgKi8KKwlHUElPX1BPUlRfMjczKCksCisKKwkvKiBTcGVjaWFsIFB1bGwtdXAgLyBQdWxsLWRvd24gRnVuY3Rpb25zICovCisJR1BJT19GTihQT1JUNDhfS0VZSU4wX1BVKSwgR1BJT19GTihQT1JUNDlfS0VZSU4xX1BVKSwKKwlHUElPX0ZOKFBPUlQ1MF9LRVlJTjJfUFUpLCBHUElPX0ZOKFBPUlQ1NV9LRVlJTjNfUFUpLAorCUdQSU9fRk4oUE9SVDU2X0tFWUlONF9QVSksIEdQSU9fRk4oUE9SVDU3X0tFWUlONV9QVSksCisJR1BJT19GTihQT1JUNThfS0VZSU42X1BVKSwKKworCS8qIDQ5LTEgKEZOKSAqLworCUdQSU9fRk4oVkJVUzApLCBHUElPX0ZOKENQT1JUMCksIEdQSU9fRk4oQ1BPUlQxKSwgR1BJT19GTihDUE9SVDIpLAorCUdQSU9fRk4oQ1BPUlQzKSwgR1BJT19GTihDUE9SVDQpLCBHUElPX0ZOKENQT1JUNSksIEdQSU9fRk4oQ1BPUlQ2KSwKKwlHUElPX0ZOKENQT1JUNyksIEdQSU9fRk4oQ1BPUlQ4KSwgR1BJT19GTihDUE9SVDkpLCBHUElPX0ZOKENQT1JUMTApLAorCUdQSU9fRk4oQ1BPUlQxMSksIEdQSU9fRk4oU0lOMiksIEdQSU9fRk4oQ1BPUlQxMiksIEdQSU9fRk4oWENUUzIpLAorCUdQSU9fRk4oQ1BPUlQxMyksIEdQSU9fRk4oUkZTUE80KSwgR1BJT19GTihDUE9SVDE0KSwgR1BJT19GTihSRlNQTzUpLAorCUdQSU9fRk4oQ1BPUlQxNSksIEdQSU9fRk4oQ1BPUlQxNiksIEdQSU9fRk4oQ1BPUlQxNyksIEdQSU9fRk4oU09VVDIpLAorCUdQSU9fRk4oQ1BPUlQxOCksIEdQSU9fRk4oWFJUUzIpLCBHUElPX0ZOKENQT1JUMTkpLCBHUElPX0ZOKENQT1JUMjApLAorCUdQSU9fRk4oUkZTUE82KSwgR1BJT19GTihDUE9SVDIxKSwgR1BJT19GTihTVEFUVVMwKSwgR1BJT19GTihDUE9SVDIyKSwKKwlHUElPX0ZOKFNUQVRVUzEpLCBHUElPX0ZOKENQT1JUMjMpLCBHUElPX0ZOKFNUQVRVUzIpLCBHUElPX0ZOKFJGU1BPNyksCisJR1BJT19GTihNUE9SVDApLCBHUElPX0ZOKE1QT1JUMSksIEdQSU9fRk4oQl9TWU5MRDEpLCBHUElPX0ZOKEJfU1lOTEQyKSwKKwlHUElPX0ZOKFhNQUlOUFMpLCBHUElPX0ZOKFhESVZQUyksIEdQSU9fRk4oWElEUlNUKSwgR1BJT19GTihJRENMSyksCisJR1BJT19GTihJRElPKSwgR1BJT19GTihTT1VUMSksIEdQSU9fRk4oU0NJRkE0X1RYRCksCisJR1BJT19GTihNMDJfQkVSREFUKSwgR1BJT19GTihTSU4xKSwgR1BJT19GTihTQ0lGQTRfUlhEKSwgR1BJT19GTihYV1VQKSwKKwlHUElPX0ZOKFhSVFMxKSwgR1BJT19GTihTQ0lGQTRfUlRTKSwgR1BJT19GTihNMDNfQkVSQ0xLKSwKKwlHUElPX0ZOKFhDVFMxKSwgR1BJT19GTihTQ0lGQTRfQ1RTKSwKKworCS8qIDQ5LTIgKEZOKSAqLworCUdQSU9fRk4oSFNVX0lRX0FHQzYpLCBHUElPX0ZOKE1GRzJfSU4yKSwgR1BJT19GTihNU0lPRjJfTUNLMCksCisJR1BJT19GTihIU1VfSVFfQUdDNSksIEdQSU9fRk4oTUZHMl9JTjEpLCBHUElPX0ZOKE1TSU9GMl9NQ0sxKSwKKwlHUElPX0ZOKEhTVV9JUV9BR0M0KSwgR1BJT19GTihNU0lPRjJfUlNZTkMpLAorCUdQSU9fRk4oSFNVX0lRX0FHQzMpLCBHUElPX0ZOKE1GRzJfT1VUMSksIEdQSU9fRk4oTVNJT0YyX1JTQ0spLAorCUdQSU9fRk4oSFNVX0lRX0FHQzIpLCBHUElPX0ZOKFBPUlQ0Ml9LRVlPVVQwKSwKKwlHUElPX0ZOKEhTVV9JUV9BR0MxKSwgR1BJT19GTihQT1JUNDNfS0VZT1VUMSksCisJR1BJT19GTihIU1VfSVFfQUdDMCksIEdQSU9fRk4oUE9SVDQ0X0tFWU9VVDIpLAorCUdQSU9fRk4oSFNVX0lRX0FHQ19TVCksIEdQSU9fRk4oUE9SVDQ1X0tFWU9VVDMpLAorCUdQSU9fRk4oSFNVX0lRX1BETyksIEdQSU9fRk4oUE9SVDQ2X0tFWU9VVDQpLAorCUdQSU9fRk4oSFNVX0lRX1BZTyksIEdQSU9fRk4oUE9SVDQ3X0tFWU9VVDUpLAorCUdQSU9fRk4oSFNVX0VOX1RYTVVYX0czTU8pLCBHUElPX0ZOKFBPUlQ0OF9LRVlJTjApLAorCUdQSU9fRk4oSFNVX0lfVFhNVVhfRzNNTyksIEdQSU9fRk4oUE9SVDQ5X0tFWUlOMSksCisJR1BJT19GTihIU1VfUV9UWE1VWF9HM01PKSwgR1BJT19GTihQT1JUNTBfS0VZSU4yKSwKKwlHUElPX0ZOKEhTVV9TWU8pLCBHUElPX0ZOKFBPUlQ1MV9NU0lPRjJfVFNZTkMpLAorCUdQSU9fRk4oSFNVX1NETyksIEdQSU9fRk4oUE9SVDUyX01TSU9GMl9UU0NLKSwKKwlHUElPX0ZOKEhTVV9UR1RUSV9HM01PKSwgR1BJT19GTihQT1JUNTNfTVNJT0YyX1RYRCksCisJR1BJT19GTihCX1RJTUVfU1RBTVApLCBHUElPX0ZOKFBPUlQ1NF9NU0lPRjJfUlhEKSwKKwlHUElPX0ZOKEhTVV9TREkpLCBHUElPX0ZOKFBPUlQ1NV9LRVlJTjMpLAorCUdQSU9fRk4oSFNVX1NDTyksIEdQSU9fRk4oUE9SVDU2X0tFWUlONCksCisJR1BJT19GTihIU1VfRFJFUSksIEdQSU9fRk4oUE9SVDU3X0tFWUlONSksCisJR1BJT19GTihIU1VfREFDSyksIEdQSU9fRk4oUE9SVDU4X0tFWUlONiksCisJR1BJT19GTihIU1VfQ0xLNjFNKSwgR1BJT19GTihQT1JUNTlfTVNJT0YyX1NTMSksCisJR1BJT19GTihIU1VfWFJTVCksIEdQSU9fRk4oUE9SVDYwX01TSU9GMl9TUzIpLAorCUdQSU9fRk4oUENNQ0xLTyksIEdQSU9fRk4oU1lOQzhLTyksIEdQSU9fRk4oRE5QQ01fQSksIEdQSU9fRk4oVVBQQ01fQSksCisJR1BJT19GTihYVEFMQjFMKSwKKwlHUElPX0ZOKEdQU19BR0MxKSwgR1BJT19GTihTQ0lGQTBfUlRTKSwKKwlHUElPX0ZOKEdQU19BR0MyKSwgR1BJT19GTihTQ0lGQTBfU0NLKSwKKwlHUElPX0ZOKEdQU19BR0MzKSwgR1BJT19GTihTQ0lGQTBfVFhEKSwKKwlHUElPX0ZOKEdQU19BR0M0KSwgR1BJT19GTihTQ0lGQTBfUlhEKSwKKwlHUElPX0ZOKEdQU19QV1JEKSwgR1BJT19GTihTQ0lGQTBfQ1RTKSwKKwlHUElPX0ZOKEdQU19JTSksIEdQSU9fRk4oR1BTX0lTKSwgR1BJT19GTihHUFNfUU0pLCBHUElPX0ZOKEdQU19RUyksCisJR1BJT19GTihTSVVCT01DKSwgR1BJT19GTihUUFUyVE8wKSwKKwlHUElPX0ZOKFNJVUNLQiksIEdQSU9fRk4oVFBVMlRPMSksCisJR1BJT19GTihTSVVCT0xSKSwgR1BJT19GTihCQklGMl9UU1lOQyksIEdQSU9fRk4oVFBVMlRPMiksCisJR1BJT19GTihTSVVCT0JUKSwgR1BJT19GTihCQklGMl9UU0NLKSwgR1BJT19GTihUUFUyVE8zKSwKKwlHUElPX0ZOKFNJVUJPU0xEKSwgR1BJT19GTihCQklGMl9UWEQpLCBHUElPX0ZOKFRQVTNUTzApLAorCUdQSU9fRk4oU0lVQklMUiksIEdQSU9fRk4oVFBVM1RPMSksCisJR1BJT19GTihTSVVCSUJUKSwgR1BJT19GTihUUFUzVE8yKSwKKwlHUElPX0ZOKFNJVUJJU0xEKSwgR1BJT19GTihUUFUzVE8zKSwKKwlHUElPX0ZOKE5NSSksIEdQSU9fRk4oVFBVNFRPMCksCisJR1BJT19GTihETlBDTV9NKSwgR1BJT19GTihUUFU0VE8xKSwgR1BJT19GTihUUFU0VE8yKSwgR1BJT19GTihUUFU0VE8zKSwKKwlHUElPX0ZOKElSUV9UTVBCKSwKKwlHUElPX0ZOKFBXRU4pLCBHUElPX0ZOKE1GRzFfT1VUMSksCisJR1BJT19GTihPVkNOKSwgR1BJT19GTihNRkcxX0lOMSksCisJR1BJT19GTihPVkNOMiksIEdQSU9fRk4oTUZHMV9JTjIpLAorCisJLyogNDktMyAoRk4pICovCisJR1BJT19GTihSRlNQTzEpLCBHUElPX0ZOKFJGU1BPMiksIEdQSU9fRk4oUkZTUE8zKSwKKwlHUElPX0ZOKFBPUlQ5M19WSU9fQ0tPMiksCisJR1BJT19GTihVU0JURVJNKSwgR1BJT19GTihFWFRMUCksIEdQSU9fRk4oSURJTiksCisJR1BJT19GTihTQ0lGQTVfQ1RTKSwgR1BJT19GTihNRkcwX0lOMSksCisJR1BJT19GTihTQ0lGQTVfUlRTKSwgR1BJT19GTihNRkcwX0lOMiksCisJR1BJT19GTihTQ0lGQTVfUlhEKSwKKwlHUElPX0ZOKFNDSUZBNV9UWEQpLAorCUdQSU9fRk4oU0NJRkE1X1NDSyksIEdQSU9fRk4oTUZHMF9PVVQxKSwKKwlHUElPX0ZOKEEwX0VBMCksIEdQSU9fRk4oQlMpLAorCUdQSU9fRk4oQTE0X0VBMTQpLCBHUElPX0ZOKFBPUlQxMDJfS0VZT1VUMCksCisJR1BJT19GTihBMTVfRUExNSksIEdQSU9fRk4oUE9SVDEwM19LRVlPVVQxKSwgR1BJT19GTihEVl9DTEtPTCksCisJR1BJT19GTihBMTZfRUExNiksIEdQSU9fRk4oUE9SVDEwNF9LRVlPVVQyKSwKKwlHUElPX0ZOKERWX1ZTWU5DTCksIEdQSU9fRk4oTVNJT0YwX1NTMSksCisJR1BJT19GTihBMTdfRUExNyksIEdQSU9fRk4oUE9SVDEwNV9LRVlPVVQzKSwKKwlHUElPX0ZOKERWX0hTWU5DTCksIEdQSU9fRk4oTVNJT0YwX1RTWU5DKSwKKwlHUElPX0ZOKEExOF9FQTE4KSwgR1BJT19GTihQT1JUMTA2X0tFWU9VVDQpLAorCUdQSU9fRk4oRFZfREwwKSwgR1BJT19GTihNU0lPRjBfVFNDSyksCisJR1BJT19GTihBMTlfRUExOSksIEdQSU9fRk4oUE9SVDEwN19LRVlPVVQ1KSwKKwlHUElPX0ZOKERWX0RMMSksIEdQSU9fRk4oTVNJT0YwX1RYRCksCisJR1BJT19GTihBMjBfRUEyMCksIEdQSU9fRk4oUE9SVDEwOF9LRVlJTjApLAorCUdQSU9fRk4oRFZfREwyKSwgR1BJT19GTihNU0lPRjBfUlNDSyksCisJR1BJT19GTihBMjFfRUEyMSksIEdQSU9fRk4oUE9SVDEwOV9LRVlJTjEpLAorCUdQSU9fRk4oRFZfREwzKSwgR1BJT19GTihNU0lPRjBfUlNZTkMpLAorCUdQSU9fRk4oQTIyX0VBMjIpLCBHUElPX0ZOKFBPUlQxMTBfS0VZSU4yKSwKKwlHUElPX0ZOKERWX0RMNCksIEdQSU9fRk4oTVNJT0YwX01DSzApLAorCUdQSU9fRk4oQTIzX0VBMjMpLCBHUElPX0ZOKFBPUlQxMTFfS0VZSU4zKSwKKwlHUElPX0ZOKERWX0RMNSksIEdQSU9fRk4oTVNJT0YwX01DSzEpLAorCUdQSU9fRk4oQTI0X0VBMjQpLCBHUElPX0ZOKFBPUlQxMTJfS0VZSU40KSwKKwlHUElPX0ZOKERWX0RMNiksIEdQSU9fRk4oTVNJT0YwX1JYRCksCisJR1BJT19GTihBMjVfRUEyNSksIEdQSU9fRk4oUE9SVDExM19LRVlJTjUpLAorCUdQSU9fRk4oRFZfREw3KSwgR1BJT19GTihNU0lPRjBfU1MyKSwKKwlHUElPX0ZOKEEyNiksIEdQSU9fRk4oUE9SVDExM19LRVlJTjYpLCBHUElPX0ZOKERWX0NMS0lMKSwKKwlHUElPX0ZOKEQwX0VEMF9OQUYwKSwgR1BJT19GTihEMV9FRDFfTkFGMSksIEdQSU9fRk4oRDJfRUQyX05BRjIpLAorCUdQSU9fRk4oRDNfRUQzX05BRjMpLCBHUElPX0ZOKEQ0X0VENF9OQUY0KSwgR1BJT19GTihENV9FRDVfTkFGNSksCisJR1BJT19GTihENl9FRDZfTkFGNiksIEdQSU9fRk4oRDdfRUQ3X05BRjcpLCBHUElPX0ZOKEQ4X0VEOF9OQUY4KSwKKwlHUElPX0ZOKEQ5X0VEOV9OQUY5KSwgR1BJT19GTihEMTBfRUQxMF9OQUYxMCksIEdQSU9fRk4oRDExX0VEMTFfTkFGMTEpLAorCUdQSU9fRk4oRDEyX0VEMTJfTkFGMTIpLCBHUElPX0ZOKEQxM19FRDEzX05BRjEzKSwKKwlHUElPX0ZOKEQxNF9FRDE0X05BRjE0KSwgR1BJT19GTihEMTVfRUQxNV9OQUYxNSksCisJR1BJT19GTihDUzQpLCBHUElPX0ZOKENTNUEpLCBHUElPX0ZOKENTNUIpLCBHUElPX0ZOKEZDRTEpLAorCUdQSU9fRk4oQ1M2QiksIEdQSU9fRk4oWENTMiksIEdQSU9fRk4oRkNFMCksIEdQSU9fRk4oQ1M2QSksCisJR1BJT19GTihEQUNLMCksIEdQSU9fRk4oV0FJVCksIEdQSU9fRk4oRFJFUTApLCBHUElPX0ZOKFJEX1hSRCksCisJR1BJT19GTihBMjcpLCBHUElPX0ZOKFJEV1JfWFdFKSwgR1BJT19GTihXRTBfWFdSMF9GV0UpLAorCUdQSU9fRk4oV0UxX1hXUjEpLCBHUElPX0ZOKEZSQiksIEdQSU9fRk4oQ0tPKSwKKwlHUElPX0ZOKE5CUlNUT1VUKSwgR1BJT19GTihOQlJTVCksCisKKwkvKiA0OS00IChGTikgKi8KKwlHUElPX0ZOKFJGU1BPMCksIEdQSU9fRk4oUE9SVDE0Nl9WSU9fQ0tPMiksIEdQSU9fRk4oVFNUTUQpLAorCUdQSU9fRk4oVklPX1ZEKSwgR1BJT19GTihWSU9fSEQpLAorCUdQSU9fRk4oVklPX0QwKSwgR1BJT19GTihWSU9fRDEpLCBHUElPX0ZOKFZJT19EMiksCisJR1BJT19GTihWSU9fRDMpLCBHUElPX0ZOKFZJT19ENCksIEdQSU9fRk4oVklPX0Q1KSwKKwlHUElPX0ZOKFZJT19ENiksIEdQSU9fRk4oVklPX0Q3KSwgR1BJT19GTihWSU9fRDgpLAorCUdQSU9fRk4oVklPX0Q5KSwgR1BJT19GTihWSU9fRDEwKSwgR1BJT19GTihWSU9fRDExKSwKKwlHUElPX0ZOKFZJT19EMTIpLCBHUElPX0ZOKFZJT19EMTMpLCBHUElPX0ZOKFZJT19EMTQpLAorCUdQSU9fRk4oVklPX0QxNSksIEdQSU9fRk4oVklPX0NMSyksIEdQSU9fRk4oVklPX0ZJRUxEKSwKKwlHUElPX0ZOKFZJT19DS08pLAorCUdQSU9fRk4oTUZHM19JTjEpLCBHUElPX0ZOKE1GRzNfSU4yKSwKKwlHUElPX0ZOKE05X1NMQ0RfQTAxKSwgR1BJT19GTihNRkczX09VVDEpLCBHUElPX0ZOKFRQVTBUTzApLAorCUdQSU9fRk4oTTEwX1NMQ0RfQ0sxKSwgR1BJT19GTihNRkc0X0lOMSksIEdQSU9fRk4oVFBVMFRPMSksCisJR1BJT19GTihNMTFfU0xDRF9TTzEpLCBHUElPX0ZOKE1GRzRfSU4yKSwgR1BJT19GTihUUFUwVE8yKSwKKwlHUElPX0ZOKE0xMl9TTENEX0NFMSksIEdQSU9fRk4oTUZHNF9PVVQxKSwgR1BJT19GTihUUFUwVE8zKSwKKwlHUElPX0ZOKExDREQwKSwgR1BJT19GTihQT1JUMTc1X0tFWU9VVDApLCBHUElPX0ZOKERWX0QwKSwKKwlHUElPX0ZOKFNJVUNLQSksIEdQSU9fRk4oTUZHMF9PVVQyKSwKKwlHUElPX0ZOKExDREQxKSwgR1BJT19GTihQT1JUMTc2X0tFWU9VVDEpLCBHUElPX0ZOKERWX0QxKSwKKwlHUElPX0ZOKFNJVUFPTFIpLCBHUElPX0ZOKEJCSUYyX1RTWU5DMSksCisJR1BJT19GTihMQ0REMiksIEdQSU9fRk4oUE9SVDE3N19LRVlPVVQyKSwgR1BJT19GTihEVl9EMiksCisJR1BJT19GTihTSVVBT0JUKSwgR1BJT19GTihCQklGMl9UU0NLMSksCisJR1BJT19GTihMQ0REMyksIEdQSU9fRk4oUE9SVDE3OF9LRVlPVVQzKSwgR1BJT19GTihEVl9EMyksCisJR1BJT19GTihTSVVBT1NMRCksIEdQSU9fRk4oQkJJRjJfVFhEMSksCisJR1BJT19GTihMQ0RENCksIEdQSU9fRk4oUE9SVDE3OV9LRVlPVVQ0KSwgR1BJT19GTihEVl9ENCksCisJR1BJT19GTihTSVVBSVNQRCksIEdQSU9fRk4oTUZHMV9PVVQyKSwKKwlHUElPX0ZOKExDREQ1KSwgR1BJT19GTihQT1JUMTgwX0tFWU9VVDUpLCBHUElPX0ZOKERWX0Q1KSwKKwlHUElPX0ZOKFNJVUFJTFIpLCBHUElPX0ZOKE1GRzJfT1VUMiksCisJR1BJT19GTihMQ0RENiksIEdQSU9fRk4oRFZfRDYpLAorCUdQSU9fRk4oU0lVQUlCVCksIEdQSU9fRk4oTUZHM19PVVQyKSwgR1BJT19GTihYV1IyKSwKKwlHUElPX0ZOKExDREQ3KSwgR1BJT19GTihEVl9ENyksCisJR1BJT19GTihTSVVBSVNMRCksIEdQSU9fRk4oTUZHNF9PVVQyKSwgR1BJT19GTihYV1IzKSwKKwlHUElPX0ZOKExDREQ4KSwgR1BJT19GTihEVl9EOCksIEdQSU9fRk4oRDE2KSwgR1BJT19GTihFRDE2KSwKKwlHUElPX0ZOKExDREQ5KSwgR1BJT19GTihEVl9EOSksIEdQSU9fRk4oRDE3KSwgR1BJT19GTihFRDE3KSwKKwlHUElPX0ZOKExDREQxMCksIEdQSU9fRk4oRFZfRDEwKSwgR1BJT19GTihEMTgpLCBHUElPX0ZOKEVEMTgpLAorCUdQSU9fRk4oTENERDExKSwgR1BJT19GTihEVl9EMTEpLCBHUElPX0ZOKEQxOSksIEdQSU9fRk4oRUQxOSksCisJR1BJT19GTihMQ0REMTIpLCBHUElPX0ZOKERWX0QxMiksIEdQSU9fRk4oRDIwKSwgR1BJT19GTihFRDIwKSwKKwlHUElPX0ZOKExDREQxMyksIEdQSU9fRk4oRFZfRDEzKSwgR1BJT19GTihEMjEpLCBHUElPX0ZOKEVEMjEpLAorCUdQSU9fRk4oTENERDE0KSwgR1BJT19GTihEVl9EMTQpLCBHUElPX0ZOKEQyMiksIEdQSU9fRk4oRUQyMiksCisJR1BJT19GTihMQ0REMTUpLCBHUElPX0ZOKERWX0QxNSksIEdQSU9fRk4oRDIzKSwgR1BJT19GTihFRDIzKSwKKwlHUElPX0ZOKExDREQxNiksIEdQSU9fRk4oRFZfSFNZTkMpLCBHUElPX0ZOKEQyNCksIEdQSU9fRk4oRUQyNCksCisJR1BJT19GTihMQ0REMTcpLCBHUElPX0ZOKERWX1ZTWU5DKSwgR1BJT19GTihEMjUpLCBHUElPX0ZOKEVEMjUpLAorCUdQSU9fRk4oTENERDE4KSwgR1BJT19GTihEUkVRMiksIEdQSU9fRk4oTVNJT0YwTF9UU0NLKSwKKwlHUElPX0ZOKEQyNiksIEdQSU9fRk4oRUQyNiksCisJR1BJT19GTihMQ0REMTkpLCBHUElPX0ZOKE1TSU9GMExfVFNZTkMpLAorCUdQSU9fRk4oRDI3KSwgR1BJT19GTihFRDI3KSwKKwlHUElPX0ZOKExDREQyMCksIEdQSU9fRk4oVFNfU1BTWU5DMSksIEdQSU9fRk4oTVNJT0YwTF9NQ0swKSwKKwlHUElPX0ZOKEQyOCksIEdQSU9fRk4oRUQyOCksCisJR1BJT19GTihMQ0REMjEpLCBHUElPX0ZOKFRTX1NEQVQxKSwgR1BJT19GTihNU0lPRjBMX01DSzEpLAorCUdQSU9fRk4oRDI5KSwgR1BJT19GTihFRDI5KSwKKwlHUElPX0ZOKExDREQyMiksIEdQSU9fRk4oVFNfU0RFTjEpLCBHUElPX0ZOKE1TSU9GMExfU1MxKSwKKwlHUElPX0ZOKEQzMCksIEdQSU9fRk4oRUQzMCksCisJR1BJT19GTihMQ0REMjMpLCBHUElPX0ZOKFRTX1NDSzEpLCBHUElPX0ZOKE1TSU9GMExfU1MyKSwKKwlHUElPX0ZOKEQzMSksIEdQSU9fRk4oRUQzMSksCisJR1BJT19GTihMQ0REQ0spLCBHUElPX0ZOKExDRFdSKSwgR1BJT19GTihEVl9DS08pLCBHUElPX0ZOKFNJVUFPU1BEKSwKKwlHUElPX0ZOKExDRFJEKSwgR1BJT19GTihEQUNLMiksIEdQSU9fRk4oTVNJT0YwTF9SU1lOQyksCisKKwkvKiA0OS01IChGTikgKi8KKwlHUElPX0ZOKExDREhTWU4pLCBHUElPX0ZOKExDRENTKSwgR1BJT19GTihMQ0RDUzIpLCBHUElPX0ZOKERBQ0szKSwKKwlHUElPX0ZOKExDRERJU1ApLCBHUElPX0ZOKExDRFJTKSwgR1BJT19GTihEUkVRMyksIEdQSU9fRk4oTVNJT0YwTF9SU0NLKSwKKwlHUElPX0ZOKExDRENTWU4pLCBHUElPX0ZOKExDRENTWU4yKSwgR1BJT19GTihEVl9DS0kpLAorCUdQSU9fRk4oTENETENMSyksIEdQSU9fRk4oRFJFUTEpLCBHUElPX0ZOKE1TSU9GMExfUlhEKSwKKwlHUElPX0ZOKExDRERPTiksIEdQSU9fRk4oTENERE9OMiksIEdQSU9fRk4oREFDSzEpLCBHUElPX0ZOKE1TSU9GMExfVFhEKSwKKwlHUElPX0ZOKFZJT19EUjApLCBHUElPX0ZOKFZJT19EUjEpLCBHUElPX0ZOKFZJT19EUjIpLCBHUElPX0ZOKFZJT19EUjMpLAorCUdQSU9fRk4oVklPX0RSNCksIEdQSU9fRk4oVklPX0RSNSksIEdQSU9fRk4oVklPX0RSNiksIEdQSU9fRk4oVklPX0RSNyksCisJR1BJT19GTihWSU9fVkRSKSwgR1BJT19GTihWSU9fSERSKSwKKwlHUElPX0ZOKFZJT19DTEtSKSwgR1BJT19GTihWSU9fQ0tPUiksCisJR1BJT19GTihTQ0lGQTFfVFhEKSwgR1BJT19GTihHUFNfUEdGQTApLAorCUdQSU9fRk4oU0NJRkExX1NDSyksIEdQSU9fRk4oR1BTX1BHRkExKSwKKwlHUElPX0ZOKFNDSUZBMV9SVFMpLCBHUElPX0ZOKEdQU19FUFBTSU5NT04pLAorCUdQSU9fRk4oU0NJRkExX1JYRCksIEdQSU9fRk4oU0NJRkExX0NUUyksCisJR1BJT19GTihNU0lPRjFfVFhEKSwgR1BJT19GTihTQ0lGQTFfVFhEMiksIEdQSU9fRk4oR1BTX1RYRCksCisJR1BJT19GTihNU0lPRjFfVFNZTkMpLCBHUElPX0ZOKFNDSUZBMV9DVFMyKSwgR1BJT19GTihJMkNfU0RBMiksCisJR1BJT19GTihNU0lPRjFfVFNDSyksIEdQSU9fRk4oU0NJRkExX1NDSzIpLAorCUdQSU9fRk4oTVNJT0YxX1JYRCksIEdQSU9fRk4oU0NJRkExX1JYRDIpLCBHUElPX0ZOKEdQU19SWEQpLAorCUdQSU9fRk4oTVNJT0YxX1JTQ0spLCBHUElPX0ZOKFNDSUZBMV9SVFMyKSwKKwlHUElPX0ZOKE1TSU9GMV9SU1lOQyksIEdQSU9fRk4oSTJDX1NDTDIpLAorCUdQSU9fRk4oTVNJT0YxX01DSzApLCBHUElPX0ZOKE1TSU9GMV9NQ0sxKSwKKwlHUElPX0ZOKE1TSU9GMV9TUzEpLCBHUElPX0ZOKEVEQkdSRVEzKSwKKwlHUElPX0ZOKE1TSU9GMV9TUzIpLAorCUdQSU9fRk4oUE9SVDIzNl9JUk9VVCksIEdQSU9fRk4oSVJEQV9PVVQpLAorCUdQSU9fRk4oSVJEQV9JTiksIEdQSU9fRk4oSVJEQV9GSVJTRUwpLAorCUdQSU9fRk4oVFBVMVRPMCksIEdQSU9fRk4oVFNfU1BTWU5DMyksCisJR1BJT19GTihUUFUxVE8xKSwgR1BJT19GTihUU19TREFUMyksCisJR1BJT19GTihUUFUxVE8yKSwgR1BJT19GTihUU19TREVOMyksIEdQSU9fRk4oUE9SVDI0MV9NU0lPRjJfU1MxKSwKKwlHUElPX0ZOKFRQVTFUTzMpLCBHUElPX0ZOKFBPUlQyNDJfTVNJT0YyX1RTQ0spLAorCUdQSU9fRk4oTTEzX0JTVyksIEdQSU9fRk4oUE9SVDI0M19NU0lPRjJfVFNZTkMpLAorCUdQSU9fRk4oTTE0X0dTVyksIEdQSU9fRk4oUE9SVDI0NF9NU0lPRjJfVFhEKSwKKwlHUElPX0ZOKFBPUlQyNDVfSVJPVVQpLCBHUElPX0ZOKE0xNV9SU1cpLAorCUdQSU9fRk4oU09VVDMpLCBHUElPX0ZOKFNDSUZBMl9UWEQxKSwKKwlHUElPX0ZOKFNJTjMpLCBHUElPX0ZOKFNDSUZBMl9SWEQxKSwKKwlHUElPX0ZOKFhSVFMzKSwgR1BJT19GTihTQ0lGQTJfUlRTMSksIEdQSU9fRk4oUE9SVDI0OF9NU0lPRjJfU1MyKSwKKwlHUElPX0ZOKFhDVFMzKSwgR1BJT19GTihTQ0lGQTJfQ1RTMSksIEdQSU9fRk4oUE9SVDI0OV9NU0lPRjJfUlhEKSwKKwlHUElPX0ZOKERJTlQpLCBHUElPX0ZOKFNDSUZBMl9TQ0sxKSwgR1BJT19GTihUU19TQ0szKSwKKwlHUElPX0ZOKFNESElDTEswKSwgR1BJT19GTihUQ0syKSwKKwlHUElPX0ZOKFNESElDRDApLAorCUdQSU9fRk4oU0RISUQwXzApLCBHUElPX0ZOKFRNUzIpLAorCUdQSU9fRk4oU0RISUQwXzEpLCBHUElPX0ZOKFRETzIpLAorCUdQSU9fRk4oU0RISUQwXzIpLCBHUElPX0ZOKFRESTIpLAorCUdQSU9fRk4oU0RISUQwXzMpLCBHUElPX0ZOKFJUQ0syKSwKKworCS8qIDQ5LTYgKEZOKSAqLworCUdQSU9fRk4oU0RISUNNRDApLCBHUElPX0ZOKFRSU1QyKSwKKwlHUElPX0ZOKFNESElXUDApLCBHUElPX0ZOKEVEQkdSRVEyKSwKKwlHUElPX0ZOKFNESElDTEsxKSwgR1BJT19GTihUQ0szKSwKKwlHUElPX0ZOKFNESElEMV8wKSwgR1BJT19GTihNMTFfU0xDRF9TTzIpLAorCUdQSU9fRk4oVFNfU1BTWU5DMiksIEdQSU9fRk4oVE1TMyksCisJR1BJT19GTihTREhJRDFfMSksIEdQSU9fRk4oTTlfU0xDRF9BTzIpLAorCUdQSU9fRk4oVFNfU0RBVDIpLCBHUElPX0ZOKFRETzMpLAorCUdQSU9fRk4oU0RISUQxXzIpLCBHUElPX0ZOKE0xMF9TTENEX0NLMiksCisJR1BJT19GTihUU19TREVOMiksIEdQSU9fRk4oVERJMyksCisJR1BJT19GTihTREhJRDFfMyksIEdQSU9fRk4oTTEyX1NMQ0RfQ0UyKSwKKwlHUElPX0ZOKFRTX1NDSzIpLCBHUElPX0ZOKFJUQ0szKSwKKwlHUElPX0ZOKFNESElDTUQxKSwgR1BJT19GTihUUlNUMyksCisJR1BJT19GTihTREhJQ0xLMiksIEdQSU9fRk4oU0NJRkJfU0NLKSwKKwlHUElPX0ZOKFNESElEMl8wKSwgR1BJT19GTihTQ0lGQl9UWEQpLAorCUdQSU9fRk4oU0RISUQyXzEpLCBHUElPX0ZOKFNDSUZCX0NUUyksCisJR1BJT19GTihTREhJRDJfMiksIEdQSU9fRk4oU0NJRkJfUlhEKSwKKwlHUElPX0ZOKFNESElEMl8zKSwgR1BJT19GTihTQ0lGQl9SVFMpLAorCUdQSU9fRk4oU0RISUNNRDIpLAorCUdQSU9fRk4oUkVTRVRPVVRTKSwKKwlHUElPX0ZOKERJVkxPQ0spLAorfTsKKworLyogaGVscGVyIGZvciB0b3AgNCBiaXRzIGluIFBPUlRuQ1IgKi8KKyNkZWZpbmUgUENSSChpbiwgaW5fcGQsIGluX3B1LCBvdXQpCQlcCisJMCwgKG91dCksIChpbiksIDAsCQkJXAorCTAsIDAsIDAsIDAsCQkJCVwKKwkwLCAwLCAoaW5fcGQpLCAwLAkJCVwKKwkwLCAwLCAoaW5fcHUpLCAwCisKKyNkZWZpbmUgUE9SVENSKG5yLCByZWcpCQkJCQkJXAorCXsgUElOTVVYX0NGR19SRUcoIlBPUlQiIG5yICJDUiIsIHJlZywgOCwgNCkgewkJXAorCQlQQ1JIKFBPUlQjI25yIyNfSU4sIFBPUlQjI25yIyNfSU5fUEQsCQlcCisJCSAgICAgUE9SVCMjbnIjI19JTl9QVSwgUE9SVCMjbnIjI19PVVQpLAkJXAorCQlQT1JUIyNuciMjX0ZOMCwgUE9SVCMjbnIjI19GTjEsIFBPUlQjI25yIyNfRk4yLAlcCisJCVBPUlQjI25yIyNfRk4zLAlQT1JUIyNuciMjX0ZONCwgUE9SVCMjbnIjI19GTjUsCVwKKwkJUE9SVCMjbnIjI19GTjYsIFBPUlQjI25yIyNfRk43IH0JCVwKKwl9CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgcGlubXV4X2NvbmZpZ19yZWdzW10gPSB7CisJUE9SVENSKDAsIDB4ZTYwNTAwMDApLCAvKiBQT1JUMENSICovCisJUE9SVENSKDEsIDB4ZTYwNTAwMDEpLCAvKiBQT1JUMUNSICovCisJUE9SVENSKDIsIDB4ZTYwNTAwMDIpLCAvKiBQT1JUMkNSICovCisJUE9SVENSKDMsIDB4ZTYwNTAwMDMpLCAvKiBQT1JUM0NSICovCisJUE9SVENSKDQsIDB4ZTYwNTAwMDQpLCAvKiBQT1JUNENSICovCisJUE9SVENSKDUsIDB4ZTYwNTAwMDUpLCAvKiBQT1JUNUNSICovCisJUE9SVENSKDYsIDB4ZTYwNTAwMDYpLCAvKiBQT1JUNkNSICovCisJUE9SVENSKDcsIDB4ZTYwNTAwMDcpLCAvKiBQT1JUN0NSICovCisJUE9SVENSKDgsIDB4ZTYwNTAwMDgpLCAvKiBQT1JUOENSICovCisJUE9SVENSKDksIDB4ZTYwNTAwMDkpLCAvKiBQT1JUOUNSICovCisKKwlQT1JUQ1IoMTAsIDB4ZTYwNTAwMGEpLCAvKiBQT1JUMTBDUiAqLworCVBPUlRDUigxMSwgMHhlNjA1MDAwYiksIC8qIFBPUlQxMUNSICovCisJUE9SVENSKDEyLCAweGU2MDUwMDBjKSwgLyogUE9SVDEyQ1IgKi8KKwlQT1JUQ1IoMTMsIDB4ZTYwNTAwMGQpLCAvKiBQT1JUMTNDUiAqLworCVBPUlRDUigxNCwgMHhlNjA1MDAwZSksIC8qIFBPUlQxNENSICovCisJUE9SVENSKDE1LCAweGU2MDUwMDBmKSwgLyogUE9SVDE1Q1IgKi8KKwlQT1JUQ1IoMTYsIDB4ZTYwNTAwMTApLCAvKiBQT1JUMTZDUiAqLworCVBPUlRDUigxNywgMHhlNjA1MDAxMSksIC8qIFBPUlQxN0NSICovCisJUE9SVENSKDE4LCAweGU2MDUwMDEyKSwgLyogUE9SVDE4Q1IgKi8KKwlQT1JUQ1IoMTksIDB4ZTYwNTAwMTMpLCAvKiBQT1JUMTlDUiAqLworCisJUE9SVENSKDIwLCAweGU2MDUwMDE0KSwgLyogUE9SVDIwQ1IgKi8KKwlQT1JUQ1IoMjEsIDB4ZTYwNTAwMTUpLCAvKiBQT1JUMjFDUiAqLworCVBPUlRDUigyMiwgMHhlNjA1MDAxNiksIC8qIFBPUlQyMkNSICovCisJUE9SVENSKDIzLCAweGU2MDUwMDE3KSwgLyogUE9SVDIzQ1IgKi8KKwlQT1JUQ1IoMjQsIDB4ZTYwNTAwMTgpLCAvKiBQT1JUMjRDUiAqLworCVBPUlRDUigyNSwgMHhlNjA1MDAxOSksIC8qIFBPUlQyNUNSICovCisJUE9SVENSKDI2LCAweGU2MDUwMDFhKSwgLyogUE9SVDI2Q1IgKi8KKwlQT1JUQ1IoMjcsIDB4ZTYwNTAwMWIpLCAvKiBQT1JUMjdDUiAqLworCVBPUlRDUigyOCwgMHhlNjA1MDAxYyksIC8qIFBPUlQyOENSICovCisJUE9SVENSKDI5LCAweGU2MDUwMDFkKSwgLyogUE9SVDI5Q1IgKi8KKworCVBPUlRDUigzMCwgMHhlNjA1MDAxZSksIC8qIFBPUlQzMENSICovCisJUE9SVENSKDMxLCAweGU2MDUwMDFmKSwgLyogUE9SVDMxQ1IgKi8KKwlQT1JUQ1IoMzIsIDB4ZTYwNTAwMjApLCAvKiBQT1JUMzJDUiAqLworCVBPUlRDUigzMywgMHhlNjA1MDAyMSksIC8qIFBPUlQzM0NSICovCisJUE9SVENSKDM0LCAweGU2MDUwMDIyKSwgLyogUE9SVDM0Q1IgKi8KKwlQT1JUQ1IoMzUsIDB4ZTYwNTAwMjMpLCAvKiBQT1JUMzVDUiAqLworCVBPUlRDUigzNiwgMHhlNjA1MDAyNCksIC8qIFBPUlQzNkNSICovCisJUE9SVENSKDM3LCAweGU2MDUwMDI1KSwgLyogUE9SVDM3Q1IgKi8KKwlQT1JUQ1IoMzgsIDB4ZTYwNTAwMjYpLCAvKiBQT1JUMzhDUiAqLworCVBPUlRDUigzOSwgMHhlNjA1MDAyNyksIC8qIFBPUlQzOUNSICovCisKKwlQT1JUQ1IoNDAsIDB4ZTYwNTAwMjgpLCAvKiBQT1JUNDBDUiAqLworCVBPUlRDUig0MSwgMHhlNjA1MDAyOSksIC8qIFBPUlQ0MUNSICovCisJUE9SVENSKDQyLCAweGU2MDUwMDJhKSwgLyogUE9SVDQyQ1IgKi8KKwlQT1JUQ1IoNDMsIDB4ZTYwNTAwMmIpLCAvKiBQT1JUNDNDUiAqLworCVBPUlRDUig0NCwgMHhlNjA1MDAyYyksIC8qIFBPUlQ0NENSICovCisJUE9SVENSKDQ1LCAweGU2MDUwMDJkKSwgLyogUE9SVDQ1Q1IgKi8KKwlQT1JUQ1IoNDYsIDB4ZTYwNTAwMmUpLCAvKiBQT1JUNDZDUiAqLworCVBPUlRDUig0NywgMHhlNjA1MDAyZiksIC8qIFBPUlQ0N0NSICovCisJUE9SVENSKDQ4LCAweGU2MDUwMDMwKSwgLyogUE9SVDQ4Q1IgKi8KKwlQT1JUQ1IoNDksIDB4ZTYwNTAwMzEpLCAvKiBQT1JUNDlDUiAqLworCisJUE9SVENSKDUwLCAweGU2MDUwMDMyKSwgLyogUE9SVDUwQ1IgKi8KKwlQT1JUQ1IoNTEsIDB4ZTYwNTAwMzMpLCAvKiBQT1JUNTFDUiAqLworCVBPUlRDUig1MiwgMHhlNjA1MDAzNCksIC8qIFBPUlQ1MkNSICovCisJUE9SVENSKDUzLCAweGU2MDUwMDM1KSwgLyogUE9SVDUzQ1IgKi8KKwlQT1JUQ1IoNTQsIDB4ZTYwNTAwMzYpLCAvKiBQT1JUNTRDUiAqLworCVBPUlRDUig1NSwgMHhlNjA1MDAzNyksIC8qIFBPUlQ1NUNSICovCisJUE9SVENSKDU2LCAweGU2MDUwMDM4KSwgLyogUE9SVDU2Q1IgKi8KKwlQT1JUQ1IoNTcsIDB4ZTYwNTAwMzkpLCAvKiBQT1JUNTdDUiAqLworCVBPUlRDUig1OCwgMHhlNjA1MDAzYSksIC8qIFBPUlQ1OENSICovCisJUE9SVENSKDU5LCAweGU2MDUwMDNiKSwgLyogUE9SVDU5Q1IgKi8KKworCVBPUlRDUig2MCwgMHhlNjA1MDAzYyksIC8qIFBPUlQ2MENSICovCisJUE9SVENSKDYxLCAweGU2MDUwMDNkKSwgLyogUE9SVDYxQ1IgKi8KKwlQT1JUQ1IoNjIsIDB4ZTYwNTAwM2UpLCAvKiBQT1JUNjJDUiAqLworCVBPUlRDUig2MywgMHhlNjA1MDAzZiksIC8qIFBPUlQ2M0NSICovCisJUE9SVENSKDY0LCAweGU2MDUwMDQwKSwgLyogUE9SVDY0Q1IgKi8KKwlQT1JUQ1IoNjUsIDB4ZTYwNTAwNDEpLCAvKiBQT1JUNjVDUiAqLworCVBPUlRDUig2NiwgMHhlNjA1MDA0MiksIC8qIFBPUlQ2NkNSICovCisJUE9SVENSKDY3LCAweGU2MDUwMDQzKSwgLyogUE9SVDY3Q1IgKi8KKwlQT1JUQ1IoNjgsIDB4ZTYwNTAwNDQpLCAvKiBQT1JUNjhDUiAqLworCVBPUlRDUig2OSwgMHhlNjA1MDA0NSksIC8qIFBPUlQ2OUNSICovCisKKwlQT1JUQ1IoNzAsIDB4ZTYwNTAwNDYpLCAvKiBQT1JUNzBDUiAqLworCVBPUlRDUig3MSwgMHhlNjA1MDA0NyksIC8qIFBPUlQ3MUNSICovCisJUE9SVENSKDcyLCAweGU2MDUwMDQ4KSwgLyogUE9SVDcyQ1IgKi8KKwlQT1JUQ1IoNzMsIDB4ZTYwNTAwNDkpLCAvKiBQT1JUNzNDUiAqLworCVBPUlRDUig3NCwgMHhlNjA1MDA0YSksIC8qIFBPUlQ3NENSICovCisJUE9SVENSKDc1LCAweGU2MDUwMDRiKSwgLyogUE9SVDc1Q1IgKi8KKwlQT1JUQ1IoNzYsIDB4ZTYwNTAwNGMpLCAvKiBQT1JUNzZDUiAqLworCVBPUlRDUig3NywgMHhlNjA1MDA0ZCksIC8qIFBPUlQ3N0NSICovCisJUE9SVENSKDc4LCAweGU2MDUwMDRlKSwgLyogUE9SVDc4Q1IgKi8KKwlQT1JUQ1IoNzksIDB4ZTYwNTAwNGYpLCAvKiBQT1JUNzlDUiAqLworCisJUE9SVENSKDgwLCAweGU2MDUwMDUwKSwgLyogUE9SVDgwQ1IgKi8KKwlQT1JUQ1IoODEsIDB4ZTYwNTAwNTEpLCAvKiBQT1JUODFDUiAqLworCVBPUlRDUig4MiwgMHhlNjA1MDA1MiksIC8qIFBPUlQ4MkNSICovCisJUE9SVENSKDgzLCAweGU2MDUwMDUzKSwgLyogUE9SVDgzQ1IgKi8KKwlQT1JUQ1IoODQsIDB4ZTYwNTAwNTQpLCAvKiBQT1JUODRDUiAqLworCVBPUlRDUig4NSwgMHhlNjA1MDA1NSksIC8qIFBPUlQ4NUNSICovCisJUE9SVENSKDg2LCAweGU2MDUwMDU2KSwgLyogUE9SVDg2Q1IgKi8KKwlQT1JUQ1IoODcsIDB4ZTYwNTAwNTcpLCAvKiBQT1JUODdDUiAqLworCVBPUlRDUig4OCwgMHhlNjA1MTA1OCksIC8qIFBPUlQ4OENSICovCisJUE9SVENSKDg5LCAweGU2MDUxMDU5KSwgLyogUE9SVDg5Q1IgKi8KKworCVBPUlRDUig5MCwgMHhlNjA1MTA1YSksIC8qIFBPUlQ5MENSICovCisJUE9SVENSKDkxLCAweGU2MDUxMDViKSwgLyogUE9SVDkxQ1IgKi8KKwlQT1JUQ1IoOTIsIDB4ZTYwNTEwNWMpLCAvKiBQT1JUOTJDUiAqLworCVBPUlRDUig5MywgMHhlNjA1MTA1ZCksIC8qIFBPUlQ5M0NSICovCisJUE9SVENSKDk0LCAweGU2MDUxMDVlKSwgLyogUE9SVDk0Q1IgKi8KKwlQT1JUQ1IoOTUsIDB4ZTYwNTEwNWYpLCAvKiBQT1JUOTVDUiAqLworCVBPUlRDUig5NiwgMHhlNjA1MTA2MCksIC8qIFBPUlQ5NkNSICovCisJUE9SVENSKDk3LCAweGU2MDUxMDYxKSwgLyogUE9SVDk3Q1IgKi8KKwlQT1JUQ1IoOTgsIDB4ZTYwNTEwNjIpLCAvKiBQT1JUOThDUiAqLworCVBPUlRDUig5OSwgMHhlNjA1MTA2MyksIC8qIFBPUlQ5OUNSICovCisKKwlQT1JUQ1IoMTAwLCAweGU2MDUxMDY0KSwgLyogUE9SVDEwMENSICovCisJUE9SVENSKDEwMSwgMHhlNjA1MTA2NSksIC8qIFBPUlQxMDFDUiAqLworCVBPUlRDUigxMDIsIDB4ZTYwNTEwNjYpLCAvKiBQT1JUMTAyQ1IgKi8KKwlQT1JUQ1IoMTAzLCAweGU2MDUxMDY3KSwgLyogUE9SVDEwM0NSICovCisJUE9SVENSKDEwNCwgMHhlNjA1MTA2OCksIC8qIFBPUlQxMDRDUiAqLworCVBPUlRDUigxMDUsIDB4ZTYwNTEwNjkpLCAvKiBQT1JUMTA1Q1IgKi8KKwlQT1JUQ1IoMTA2LCAweGU2MDUxMDZhKSwgLyogUE9SVDEwNkNSICovCisJUE9SVENSKDEwNywgMHhlNjA1MTA2YiksIC8qIFBPUlQxMDdDUiAqLworCVBPUlRDUigxMDgsIDB4ZTYwNTEwNmMpLCAvKiBQT1JUMTA4Q1IgKi8KKwlQT1JUQ1IoMTA5LCAweGU2MDUxMDZkKSwgLyogUE9SVDEwOUNSICovCisKKwlQT1JUQ1IoMTEwLCAweGU2MDUxMDZlKSwgLyogUE9SVDExMENSICovCisJUE9SVENSKDExMSwgMHhlNjA1MTA2ZiksIC8qIFBPUlQxMTFDUiAqLworCVBPUlRDUigxMTIsIDB4ZTYwNTEwNzApLCAvKiBQT1JUMTEyQ1IgKi8KKwlQT1JUQ1IoMTEzLCAweGU2MDUxMDcxKSwgLyogUE9SVDExM0NSICovCisJUE9SVENSKDExNCwgMHhlNjA1MTA3MiksIC8qIFBPUlQxMTRDUiAqLworCVBPUlRDUigxMTUsIDB4ZTYwNTEwNzMpLCAvKiBQT1JUMTE1Q1IgKi8KKwlQT1JUQ1IoMTE2LCAweGU2MDUxMDc0KSwgLyogUE9SVDExNkNSICovCisJUE9SVENSKDExNywgMHhlNjA1MTA3NSksIC8qIFBPUlQxMTdDUiAqLworCVBPUlRDUigxMTgsIDB4ZTYwNTEwNzYpLCAvKiBQT1JUMTE4Q1IgKi8KKwlQT1JUQ1IoMTE5LCAweGU2MDUxMDc3KSwgLyogUE9SVDExOUNSICovCisKKwlQT1JUQ1IoMTIwLCAweGU2MDUxMDc4KSwgLyogUE9SVDEyMENSICovCisJUE9SVENSKDEyMSwgMHhlNjA1MTA3OSksIC8qIFBPUlQxMjFDUiAqLworCVBPUlRDUigxMjIsIDB4ZTYwNTEwN2EpLCAvKiBQT1JUMTIyQ1IgKi8KKwlQT1JUQ1IoMTIzLCAweGU2MDUxMDdiKSwgLyogUE9SVDEyM0NSICovCisJUE9SVENSKDEyNCwgMHhlNjA1MTA3YyksIC8qIFBPUlQxMjRDUiAqLworCVBPUlRDUigxMjUsIDB4ZTYwNTEwN2QpLCAvKiBQT1JUMTI1Q1IgKi8KKwlQT1JUQ1IoMTI2LCAweGU2MDUxMDdlKSwgLyogUE9SVDEyNkNSICovCisJUE9SVENSKDEyNywgMHhlNjA1MTA3ZiksIC8qIFBPUlQxMjdDUiAqLworCVBPUlRDUigxMjgsIDB4ZTYwNTEwODApLCAvKiBQT1JUMTI4Q1IgKi8KKwlQT1JUQ1IoMTI5LCAweGU2MDUxMDgxKSwgLyogUE9SVDEyOUNSICovCisKKwlQT1JUQ1IoMTMwLCAweGU2MDUxMDgyKSwgLyogUE9SVDEzMENSICovCisJUE9SVENSKDEzMSwgMHhlNjA1MTA4MyksIC8qIFBPUlQxMzFDUiAqLworCVBPUlRDUigxMzIsIDB4ZTYwNTEwODQpLCAvKiBQT1JUMTMyQ1IgKi8KKwlQT1JUQ1IoMTMzLCAweGU2MDUxMDg1KSwgLyogUE9SVDEzM0NSICovCisJUE9SVENSKDEzNCwgMHhlNjA1MTA4NiksIC8qIFBPUlQxMzRDUiAqLworCVBPUlRDUigxMzUsIDB4ZTYwNTEwODcpLCAvKiBQT1JUMTM1Q1IgKi8KKwlQT1JUQ1IoMTM2LCAweGU2MDUxMDg4KSwgLyogUE9SVDEzNkNSICovCisJUE9SVENSKDEzNywgMHhlNjA1MTA4OSksIC8qIFBPUlQxMzdDUiAqLworCVBPUlRDUigxMzgsIDB4ZTYwNTEwOGEpLCAvKiBQT1JUMTM4Q1IgKi8KKwlQT1JUQ1IoMTM5LCAweGU2MDUxMDhiKSwgLyogUE9SVDEzOUNSICovCisKKwlQT1JUQ1IoMTQwLCAweGU2MDUxMDhjKSwgLyogUE9SVDE0MENSICovCisJUE9SVENSKDE0MSwgMHhlNjA1MTA4ZCksIC8qIFBPUlQxNDFDUiAqLworCVBPUlRDUigxNDIsIDB4ZTYwNTEwOGUpLCAvKiBQT1JUMTQyQ1IgKi8KKwlQT1JUQ1IoMTQzLCAweGU2MDUxMDhmKSwgLyogUE9SVDE0M0NSICovCisJUE9SVENSKDE0NCwgMHhlNjA1MTA5MCksIC8qIFBPUlQxNDRDUiAqLworCVBPUlRDUigxNDUsIDB4ZTYwNTEwOTEpLCAvKiBQT1JUMTQ1Q1IgKi8KKwlQT1JUQ1IoMTQ2LCAweGU2MDUxMDkyKSwgLyogUE9SVDE0NkNSICovCisJUE9SVENSKDE0NywgMHhlNjA1MTA5MyksIC8qIFBPUlQxNDdDUiAqLworCVBPUlRDUigxNDgsIDB4ZTYwNTEwOTQpLCAvKiBQT1JUMTQ4Q1IgKi8KKwlQT1JUQ1IoMTQ5LCAweGU2MDUxMDk1KSwgLyogUE9SVDE0OUNSICovCisKKwlQT1JUQ1IoMTUwLCAweGU2MDUxMDk2KSwgLyogUE9SVDE1MENSICovCisJUE9SVENSKDE1MSwgMHhlNjA1MTA5NyksIC8qIFBPUlQxNTFDUiAqLworCVBPUlRDUigxNTIsIDB4ZTYwNTEwOTgpLCAvKiBQT1JUMTUyQ1IgKi8KKwlQT1JUQ1IoMTUzLCAweGU2MDUxMDk5KSwgLyogUE9SVDE1M0NSICovCisJUE9SVENSKDE1NCwgMHhlNjA1MTA5YSksIC8qIFBPUlQxNTRDUiAqLworCVBPUlRDUigxNTUsIDB4ZTYwNTEwOWIpLCAvKiBQT1JUMTU1Q1IgKi8KKwlQT1JUQ1IoMTU2LCAweGU2MDUxMDljKSwgLyogUE9SVDE1NkNSICovCisJUE9SVENSKDE1NywgMHhlNjA1MTA5ZCksIC8qIFBPUlQxNTdDUiAqLworCVBPUlRDUigxNTgsIDB4ZTYwNTEwOWUpLCAvKiBQT1JUMTU4Q1IgKi8KKwlQT1JUQ1IoMTU5LCAweGU2MDUxMDlmKSwgLyogUE9SVDE1OUNSICovCisKKwlQT1JUQ1IoMTYwLCAweGU2MDUxMGEwKSwgLyogUE9SVDE2MENSICovCisJUE9SVENSKDE2MSwgMHhlNjA1MTBhMSksIC8qIFBPUlQxNjFDUiAqLworCVBPUlRDUigxNjIsIDB4ZTYwNTEwYTIpLCAvKiBQT1JUMTYyQ1IgKi8KKwlQT1JUQ1IoMTYzLCAweGU2MDUxMGEzKSwgLyogUE9SVDE2M0NSICovCisJUE9SVENSKDE2NCwgMHhlNjA1MTBhNCksIC8qIFBPUlQxNjRDUiAqLworCVBPUlRDUigxNjUsIDB4ZTYwNTEwYTUpLCAvKiBQT1JUMTY1Q1IgKi8KKwlQT1JUQ1IoMTY2LCAweGU2MDUxMGE2KSwgLyogUE9SVDE2NkNSICovCisJUE9SVENSKDE2NywgMHhlNjA1MTBhNyksIC8qIFBPUlQxNjdDUiAqLworCVBPUlRDUigxNjgsIDB4ZTYwNTEwYTgpLCAvKiBQT1JUMTY4Q1IgKi8KKwlQT1JUQ1IoMTY5LCAweGU2MDUxMGE5KSwgLyogUE9SVDE2OUNSICovCisKKwlQT1JUQ1IoMTcwLCAweGU2MDUxMGFhKSwgLyogUE9SVDE3MENSICovCisJUE9SVENSKDE3MSwgMHhlNjA1MTBhYiksIC8qIFBPUlQxNzFDUiAqLworCVBPUlRDUigxNzIsIDB4ZTYwNTEwYWMpLCAvKiBQT1JUMTcyQ1IgKi8KKwlQT1JUQ1IoMTczLCAweGU2MDUxMGFkKSwgLyogUE9SVDE3M0NSICovCisJUE9SVENSKDE3NCwgMHhlNjA1MTBhZSksIC8qIFBPUlQxNzRDUiAqLworCVBPUlRDUigxNzUsIDB4ZTYwNTIwYWYpLCAvKiBQT1JUMTc1Q1IgKi8KKwlQT1JUQ1IoMTc2LCAweGU2MDUyMGIwKSwgLyogUE9SVDE3NkNSICovCisJUE9SVENSKDE3NywgMHhlNjA1MjBiMSksIC8qIFBPUlQxNzdDUiAqLworCVBPUlRDUigxNzgsIDB4ZTYwNTIwYjIpLCAvKiBQT1JUMTc4Q1IgKi8KKwlQT1JUQ1IoMTc5LCAweGU2MDUyMGIzKSwgLyogUE9SVDE3OUNSICovCisKKwlQT1JUQ1IoMTgwLCAweGU2MDUyMGI0KSwgLyogUE9SVDE4MENSICovCisJUE9SVENSKDE4MSwgMHhlNjA1MjBiNSksIC8qIFBPUlQxODFDUiAqLworCVBPUlRDUigxODIsIDB4ZTYwNTIwYjYpLCAvKiBQT1JUMTgyQ1IgKi8KKwlQT1JUQ1IoMTgzLCAweGU2MDUyMGI3KSwgLyogUE9SVDE4M0NSICovCisJUE9SVENSKDE4NCwgMHhlNjA1MjBiOCksIC8qIFBPUlQxODRDUiAqLworCVBPUlRDUigxODUsIDB4ZTYwNTIwYjkpLCAvKiBQT1JUMTg1Q1IgKi8KKwlQT1JUQ1IoMTg2LCAweGU2MDUyMGJhKSwgLyogUE9SVDE4NkNSICovCisJUE9SVENSKDE4NywgMHhlNjA1MjBiYiksIC8qIFBPUlQxODdDUiAqLworCVBPUlRDUigxODgsIDB4ZTYwNTIwYmMpLCAvKiBQT1JUMTg4Q1IgKi8KKwlQT1JUQ1IoMTg5LCAweGU2MDUyMGJkKSwgLyogUE9SVDE4OUNSICovCisKKwlQT1JUQ1IoMTkwLCAweGU2MDUyMGJlKSwgLyogUE9SVDE5MENSICovCisJUE9SVENSKDE5MSwgMHhlNjA1MjBiZiksIC8qIFBPUlQxOTFDUiAqLworCVBPUlRDUigxOTIsIDB4ZTYwNTIwYzApLCAvKiBQT1JUMTkyQ1IgKi8KKwlQT1JUQ1IoMTkzLCAweGU2MDUyMGMxKSwgLyogUE9SVDE5M0NSICovCisJUE9SVENSKDE5NCwgMHhlNjA1MjBjMiksIC8qIFBPUlQxOTRDUiAqLworCVBPUlRDUigxOTUsIDB4ZTYwNTIwYzMpLCAvKiBQT1JUMTk1Q1IgKi8KKwlQT1JUQ1IoMTk2LCAweGU2MDUyMGM0KSwgLyogUE9SVDE5NkNSICovCisJUE9SVENSKDE5NywgMHhlNjA1MjBjNSksIC8qIFBPUlQxOTdDUiAqLworCVBPUlRDUigxOTgsIDB4ZTYwNTIwYzYpLCAvKiBQT1JUMTk4Q1IgKi8KKwlQT1JUQ1IoMTk5LCAweGU2MDUyMGM3KSwgLyogUE9SVDE5OUNSICovCisKKwlQT1JUQ1IoMjAwLCAweGU2MDUyMGM4KSwgLyogUE9SVDIwMENSICovCisJUE9SVENSKDIwMSwgMHhlNjA1MjBjOSksIC8qIFBPUlQyMDFDUiAqLworCVBPUlRDUigyMDIsIDB4ZTYwNTIwY2EpLCAvKiBQT1JUMjAyQ1IgKi8KKwlQT1JUQ1IoMjAzLCAweGU2MDUyMGNiKSwgLyogUE9SVDIwM0NSICovCisJUE9SVENSKDIwNCwgMHhlNjA1MjBjYyksIC8qIFBPUlQyMDRDUiAqLworCVBPUlRDUigyMDUsIDB4ZTYwNTIwY2QpLCAvKiBQT1JUMjA1Q1IgKi8KKwlQT1JUQ1IoMjA2LCAweGU2MDUyMGNlKSwgLyogUE9SVDIwNkNSICovCisJUE9SVENSKDIwNywgMHhlNjA1MjBjZiksIC8qIFBPUlQyMDdDUiAqLworCVBPUlRDUigyMDgsIDB4ZTYwNTIwZDApLCAvKiBQT1JUMjA4Q1IgKi8KKwlQT1JUQ1IoMjA5LCAweGU2MDUyMGQxKSwgLyogUE9SVDIwOUNSICovCisKKwlQT1JUQ1IoMjEwLCAweGU2MDUyMGQyKSwgLyogUE9SVDIxMENSICovCisJUE9SVENSKDIxMSwgMHhlNjA1MjBkMyksIC8qIFBPUlQyMTFDUiAqLworCVBPUlRDUigyMTIsIDB4ZTYwNTIwZDQpLCAvKiBQT1JUMjEyQ1IgKi8KKwlQT1JUQ1IoMjEzLCAweGU2MDUyMGQ1KSwgLyogUE9SVDIxM0NSICovCisJUE9SVENSKDIxNCwgMHhlNjA1MjBkNiksIC8qIFBPUlQyMTRDUiAqLworCVBPUlRDUigyMTUsIDB4ZTYwNTIwZDcpLCAvKiBQT1JUMjE1Q1IgKi8KKwlQT1JUQ1IoMjE2LCAweGU2MDUyMGQ4KSwgLyogUE9SVDIxNkNSICovCisJUE9SVENSKDIxNywgMHhlNjA1MjBkOSksIC8qIFBPUlQyMTdDUiAqLworCVBPUlRDUigyMTgsIDB4ZTYwNTIwZGEpLCAvKiBQT1JUMjE4Q1IgKi8KKwlQT1JUQ1IoMjE5LCAweGU2MDUyMGRiKSwgLyogUE9SVDIxOUNSICovCisKKwlQT1JUQ1IoMjIwLCAweGU2MDUyMGRjKSwgLyogUE9SVDIyMENSICovCisJUE9SVENSKDIyMSwgMHhlNjA1MjBkZCksIC8qIFBPUlQyMjFDUiAqLworCVBPUlRDUigyMjIsIDB4ZTYwNTIwZGUpLCAvKiBQT1JUMjIyQ1IgKi8KKwlQT1JUQ1IoMjIzLCAweGU2MDUyMGRmKSwgLyogUE9SVDIyM0NSICovCisJUE9SVENSKDIyNCwgMHhlNjA1MjBlMCksIC8qIFBPUlQyMjRDUiAqLworCVBPUlRDUigyMjUsIDB4ZTYwNTIwZTEpLCAvKiBQT1JUMjI1Q1IgKi8KKwlQT1JUQ1IoMjI2LCAweGU2MDUyMGUyKSwgLyogUE9SVDIyNkNSICovCisJUE9SVENSKDIyNywgMHhlNjA1MjBlMyksIC8qIFBPUlQyMjdDUiAqLworCVBPUlRDUigyMjgsIDB4ZTYwNTIwZTQpLCAvKiBQT1JUMjI4Q1IgKi8KKwlQT1JUQ1IoMjI5LCAweGU2MDUyMGU1KSwgLyogUE9SVDIyOUNSICovCisKKwlQT1JUQ1IoMjMwLCAweGU2MDUyMGU2KSwgLyogUE9SVDIzMENSICovCisJUE9SVENSKDIzMSwgMHhlNjA1MjBlNyksIC8qIFBPUlQyMzFDUiAqLworCVBPUlRDUigyMzIsIDB4ZTYwNTIwZTgpLCAvKiBQT1JUMjMyQ1IgKi8KKwlQT1JUQ1IoMjMzLCAweGU2MDUyMGU5KSwgLyogUE9SVDIzM0NSICovCisJUE9SVENSKDIzNCwgMHhlNjA1MjBlYSksIC8qIFBPUlQyMzRDUiAqLworCVBPUlRDUigyMzUsIDB4ZTYwNTIwZWIpLCAvKiBQT1JUMjM1Q1IgKi8KKwlQT1JUQ1IoMjM2LCAweGU2MDUzMGVjKSwgLyogUE9SVDIzNkNSICovCisJUE9SVENSKDIzNywgMHhlNjA1MzBlZCksIC8qIFBPUlQyMzdDUiAqLworCVBPUlRDUigyMzgsIDB4ZTYwNTMwZWUpLCAvKiBQT1JUMjM4Q1IgKi8KKwlQT1JUQ1IoMjM5LCAweGU2MDUzMGVmKSwgLyogUE9SVDIzOUNSICovCisKKwlQT1JUQ1IoMjQwLCAweGU2MDUzMGYwKSwgLyogUE9SVDI0MENSICovCisJUE9SVENSKDI0MSwgMHhlNjA1MzBmMSksIC8qIFBPUlQyNDFDUiAqLworCVBPUlRDUigyNDIsIDB4ZTYwNTMwZjIpLCAvKiBQT1JUMjQyQ1IgKi8KKwlQT1JUQ1IoMjQzLCAweGU2MDUzMGYzKSwgLyogUE9SVDI0M0NSICovCisJUE9SVENSKDI0NCwgMHhlNjA1MzBmNCksIC8qIFBPUlQyNDRDUiAqLworCVBPUlRDUigyNDUsIDB4ZTYwNTMwZjUpLCAvKiBQT1JUMjQ1Q1IgKi8KKwlQT1JUQ1IoMjQ2LCAweGU2MDUzMGY2KSwgLyogUE9SVDI0NkNSICovCisJUE9SVENSKDI0NywgMHhlNjA1MzBmNyksIC8qIFBPUlQyNDdDUiAqLworCVBPUlRDUigyNDgsIDB4ZTYwNTMwZjgpLCAvKiBQT1JUMjQ4Q1IgKi8KKwlQT1JUQ1IoMjQ5LCAweGU2MDUzMGY5KSwgLyogUE9SVDI0OUNSICovCisKKwlQT1JUQ1IoMjUwLCAweGU2MDUzMGZhKSwgLyogUE9SVDI1MENSICovCisJUE9SVENSKDI1MSwgMHhlNjA1MzBmYiksIC8qIFBPUlQyNTFDUiAqLworCVBPUlRDUigyNTIsIDB4ZTYwNTMwZmMpLCAvKiBQT1JUMjUyQ1IgKi8KKwlQT1JUQ1IoMjUzLCAweGU2MDUzMGZkKSwgLyogUE9SVDI1M0NSICovCisJUE9SVENSKDI1NCwgMHhlNjA1MzBmZSksIC8qIFBPUlQyNTRDUiAqLworCVBPUlRDUigyNTUsIDB4ZTYwNTMwZmYpLCAvKiBQT1JUMjU1Q1IgKi8KKwlQT1JUQ1IoMjU2LCAweGU2MDUzMTAwKSwgLyogUE9SVDI1NkNSICovCisJUE9SVENSKDI1NywgMHhlNjA1MzEwMSksIC8qIFBPUlQyNTdDUiAqLworCVBPUlRDUigyNTgsIDB4ZTYwNTMxMDIpLCAvKiBQT1JUMjU4Q1IgKi8KKwlQT1JUQ1IoMjU5LCAweGU2MDUzMTAzKSwgLyogUE9SVDI1OUNSICovCisKKwlQT1JUQ1IoMjYwLCAweGU2MDUzMTA0KSwgLyogUE9SVDI2MENSICovCisJUE9SVENSKDI2MSwgMHhlNjA1MzEwNSksIC8qIFBPUlQyNjFDUiAqLworCVBPUlRDUigyNjIsIDB4ZTYwNTMxMDYpLCAvKiBQT1JUMjYyQ1IgKi8KKwlQT1JUQ1IoMjYzLCAweGU2MDUzMTA3KSwgLyogUE9SVDI2M0NSICovCisJUE9SVENSKDI2NCwgMHhlNjA1MzEwOCksIC8qIFBPUlQyNjRDUiAqLworCVBPUlRDUigyNjUsIDB4ZTYwNTMxMDkpLCAvKiBQT1JUMjY1Q1IgKi8KKwlQT1JUQ1IoMjY2LCAweGU2MDUzMTBhKSwgLyogUE9SVDI2NkNSICovCisJUE9SVENSKDI2NywgMHhlNjA1MzEwYiksIC8qIFBPUlQyNjdDUiAqLworCVBPUlRDUigyNjgsIDB4ZTYwNTMxMGMpLCAvKiBQT1JUMjY4Q1IgKi8KKwlQT1JUQ1IoMjY5LCAweGU2MDUzMTBkKSwgLyogUE9SVDI2OUNSICovCisKKwlQT1JUQ1IoMjcwLCAweGU2MDUzMTBlKSwgLyogUE9SVDI3MENSICovCisJUE9SVENSKDI3MSwgMHhlNjA1MzEwZiksIC8qIFBPUlQyNzFDUiAqLworCVBPUlRDUigyNzIsIDB4ZTYwNTMxMTApLCAvKiBQT1JUMjcyQ1IgKi8KKworCXsgUElOTVVYX0NGR19SRUcoIk1TRUxCQ1IiLCAweGU2MDU4MDI0LCAzMiwgMSkgeworCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQkwLCAwLAorCQlNU0VMQkNSX01TRUwyXzAsIE1TRUxCQ1JfTVNFTDJfMSwKKwkJMCwgMCwKKwkJMCwgMCB9CisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9kYXRhX3JlZyBwaW5tdXhfZGF0YV9yZWdzW10gPSB7CisJeyBQSU5NVVhfREFUQV9SRUcoIlBPUlRMMDMxXzAwMERSIiwgMHhlNjA1NDAwMCwgMzIpIHsKKwkJUE9SVDMxX0RBVEEsIFBPUlQzMF9EQVRBLCBQT1JUMjlfREFUQSwgUE9SVDI4X0RBVEEsCisJCVBPUlQyN19EQVRBLCBQT1JUMjZfREFUQSwgUE9SVDI1X0RBVEEsIFBPUlQyNF9EQVRBLAorCQlQT1JUMjNfREFUQSwgUE9SVDIyX0RBVEEsIFBPUlQyMV9EQVRBLCBQT1JUMjBfREFUQSwKKwkJUE9SVDE5X0RBVEEsIFBPUlQxOF9EQVRBLCBQT1JUMTdfREFUQSwgUE9SVDE2X0RBVEEsCisJCVBPUlQxNV9EQVRBLCBQT1JUMTRfREFUQSwgUE9SVDEzX0RBVEEsIFBPUlQxMl9EQVRBLAorCQlQT1JUMTFfREFUQSwgUE9SVDEwX0RBVEEsIFBPUlQ5X0RBVEEsIFBPUlQ4X0RBVEEsCisJCVBPUlQ3X0RBVEEsIFBPUlQ2X0RBVEEsIFBPUlQ1X0RBVEEsIFBPUlQ0X0RBVEEsCisJCVBPUlQzX0RBVEEsIFBPUlQyX0RBVEEsIFBPUlQxX0RBVEEsIFBPUlQwX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBPUlRMMDYzXzAzMkRSIiwgMHhlNjA1NDAwNCwgMzIpIHsKKwkJUE9SVDYzX0RBVEEsIFBPUlQ2Ml9EQVRBLCBQT1JUNjFfREFUQSwgUE9SVDYwX0RBVEEsCisJCVBPUlQ1OV9EQVRBLCBQT1JUNThfREFUQSwgUE9SVDU3X0RBVEEsIFBPUlQ1Nl9EQVRBLAorCQlQT1JUNTVfREFUQSwgUE9SVDU0X0RBVEEsIFBPUlQ1M19EQVRBLCBQT1JUNTJfREFUQSwKKwkJUE9SVDUxX0RBVEEsIFBPUlQ1MF9EQVRBLCBQT1JUNDlfREFUQSwgUE9SVDQ4X0RBVEEsCisJCVBPUlQ0N19EQVRBLCBQT1JUNDZfREFUQSwgUE9SVDQ1X0RBVEEsIFBPUlQ0NF9EQVRBLAorCQlQT1JUNDNfREFUQSwgUE9SVDQyX0RBVEEsIFBPUlQ0MV9EQVRBLCBQT1JUNDBfREFUQSwKKwkJUE9SVDM5X0RBVEEsIFBPUlQzOF9EQVRBLCBQT1JUMzdfREFUQSwgUE9SVDM2X0RBVEEsCisJCVBPUlQzNV9EQVRBLCBQT1JUMzRfREFUQSwgUE9SVDMzX0RBVEEsIFBPUlQzMl9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQT1JUTDA5NV8wNjREUiIsIDB4ZTYwNTQwMDgsIDMyKSB7CisJCVBPUlQ5NV9EQVRBLCBQT1JUOTRfREFUQSwgUE9SVDkzX0RBVEEsIFBPUlQ5Ml9EQVRBLAorCQlQT1JUOTFfREFUQSwgUE9SVDkwX0RBVEEsIFBPUlQ4OV9EQVRBLCBQT1JUODhfREFUQSwKKwkJUE9SVDg3X0RBVEEsIFBPUlQ4Nl9EQVRBLCBQT1JUODVfREFUQSwgUE9SVDg0X0RBVEEsCisJCVBPUlQ4M19EQVRBLCBQT1JUODJfREFUQSwgUE9SVDgxX0RBVEEsIFBPUlQ4MF9EQVRBLAorCQlQT1JUNzlfREFUQSwgUE9SVDc4X0RBVEEsIFBPUlQ3N19EQVRBLCBQT1JUNzZfREFUQSwKKwkJUE9SVDc1X0RBVEEsIFBPUlQ3NF9EQVRBLCBQT1JUNzNfREFUQSwgUE9SVDcyX0RBVEEsCisJCVBPUlQ3MV9EQVRBLCBQT1JUNzBfREFUQSwgUE9SVDY5X0RBVEEsIFBPUlQ2OF9EQVRBLAorCQlQT1JUNjdfREFUQSwgUE9SVDY2X0RBVEEsIFBPUlQ2NV9EQVRBLCBQT1JUNjRfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVEQxMjdfMDk2RFIiLCAweGU2MDU1MDA0LCAzMikgeworCQlQT1JUMTI3X0RBVEEsIFBPUlQxMjZfREFUQSwgUE9SVDEyNV9EQVRBLCBQT1JUMTI0X0RBVEEsCisJCVBPUlQxMjNfREFUQSwgUE9SVDEyMl9EQVRBLCBQT1JUMTIxX0RBVEEsIFBPUlQxMjBfREFUQSwKKwkJUE9SVDExOV9EQVRBLCBQT1JUMTE4X0RBVEEsIFBPUlQxMTdfREFUQSwgUE9SVDExNl9EQVRBLAorCQlQT1JUMTE1X0RBVEEsIFBPUlQxMTRfREFUQSwgUE9SVDExM19EQVRBLCBQT1JUMTEyX0RBVEEsCisJCVBPUlQxMTFfREFUQSwgUE9SVDExMF9EQVRBLCBQT1JUMTA5X0RBVEEsIFBPUlQxMDhfREFUQSwKKwkJUE9SVDEwN19EQVRBLCBQT1JUMTA2X0RBVEEsIFBPUlQxMDVfREFUQSwgUE9SVDEwNF9EQVRBLAorCQlQT1JUMTAzX0RBVEEsIFBPUlQxMDJfREFUQSwgUE9SVDEwMV9EQVRBLCBQT1JUMTAwX0RBVEEsCisJCVBPUlQ5OV9EQVRBLCBQT1JUOThfREFUQSwgUE9SVDk3X0RBVEEsIFBPUlQ5Nl9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQT1JURDE1OV8xMjhEUiIsIDB4ZTYwNTUwMDgsIDMyKSB7CisJCVBPUlQxNTlfREFUQSwgUE9SVDE1OF9EQVRBLCBQT1JUMTU3X0RBVEEsIFBPUlQxNTZfREFUQSwKKwkJUE9SVDE1NV9EQVRBLCBQT1JUMTU0X0RBVEEsIFBPUlQxNTNfREFUQSwgUE9SVDE1Ml9EQVRBLAorCQlQT1JUMTUxX0RBVEEsIFBPUlQxNTBfREFUQSwgUE9SVDE0OV9EQVRBLCBQT1JUMTQ4X0RBVEEsCisJCVBPUlQxNDdfREFUQSwgUE9SVDE0Nl9EQVRBLCBQT1JUMTQ1X0RBVEEsIFBPUlQxNDRfREFUQSwKKwkJUE9SVDE0M19EQVRBLCBQT1JUMTQyX0RBVEEsIFBPUlQxNDFfREFUQSwgUE9SVDE0MF9EQVRBLAorCQlQT1JUMTM5X0RBVEEsIFBPUlQxMzhfREFUQSwgUE9SVDEzN19EQVRBLCBQT1JUMTM2X0RBVEEsCisJCVBPUlQxMzVfREFUQSwgUE9SVDEzNF9EQVRBLCBQT1JUMTMzX0RBVEEsIFBPUlQxMzJfREFUQSwKKwkJUE9SVDEzMV9EQVRBLCBQT1JUMTMwX0RBVEEsIFBPUlQxMjlfREFUQSwgUE9SVDEyOF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQT1JUUjE5MV8xNjBEUiIsIDB4ZTYwNTYwMDAsIDMyKSB7CisJCVBPUlQxOTFfREFUQSwgUE9SVDE5MF9EQVRBLCBQT1JUMTg5X0RBVEEsIFBPUlQxODhfREFUQSwKKwkJUE9SVDE4N19EQVRBLCBQT1JUMTg2X0RBVEEsIFBPUlQxODVfREFUQSwgUE9SVDE4NF9EQVRBLAorCQlQT1JUMTgzX0RBVEEsIFBPUlQxODJfREFUQSwgUE9SVDE4MV9EQVRBLCBQT1JUMTgwX0RBVEEsCisJCVBPUlQxNzlfREFUQSwgUE9SVDE3OF9EQVRBLCBQT1JUMTc3X0RBVEEsIFBPUlQxNzZfREFUQSwKKwkJUE9SVDE3NV9EQVRBLCBQT1JUMTc0X0RBVEEsIFBPUlQxNzNfREFUQSwgUE9SVDE3Ml9EQVRBLAorCQlQT1JUMTcxX0RBVEEsIFBPUlQxNzBfREFUQSwgUE9SVDE2OV9EQVRBLCBQT1JUMTY4X0RBVEEsCisJCVBPUlQxNjdfREFUQSwgUE9SVDE2Nl9EQVRBLCBQT1JUMTY1X0RBVEEsIFBPUlQxNjRfREFUQSwKKwkJUE9SVDE2M19EQVRBLCBQT1JUMTYyX0RBVEEsIFBPUlQxNjFfREFUQSwgUE9SVDE2MF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQT1JUUjIyM18xOTJEUiIsIDB4ZTYwNTYwMDQsIDMyKSB7CisJCVBPUlQyMjNfREFUQSwgUE9SVDIyMl9EQVRBLCBQT1JUMjIxX0RBVEEsIFBPUlQyMjBfREFUQSwKKwkJUE9SVDIxOV9EQVRBLCBQT1JUMjE4X0RBVEEsIFBPUlQyMTdfREFUQSwgUE9SVDIxNl9EQVRBLAorCQlQT1JUMjE1X0RBVEEsIFBPUlQyMTRfREFUQSwgUE9SVDIxM19EQVRBLCBQT1JUMjEyX0RBVEEsCisJCVBPUlQyMTFfREFUQSwgUE9SVDIxMF9EQVRBLCBQT1JUMjA5X0RBVEEsIFBPUlQyMDhfREFUQSwKKwkJUE9SVDIwN19EQVRBLCBQT1JUMjA2X0RBVEEsIFBPUlQyMDVfREFUQSwgUE9SVDIwNF9EQVRBLAorCQlQT1JUMjAzX0RBVEEsIFBPUlQyMDJfREFUQSwgUE9SVDIwMV9EQVRBLCBQT1JUMjAwX0RBVEEsCisJCVBPUlQxOTlfREFUQSwgUE9SVDE5OF9EQVRBLCBQT1JUMTk3X0RBVEEsIFBPUlQxOTZfREFUQSwKKwkJUE9SVDE5NV9EQVRBLCBQT1JUMTk0X0RBVEEsIFBPUlQxOTNfREFUQSwgUE9SVDE5Ml9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQT1JUVTI1NV8yMjREUiIsIDB4ZTYwNTcwMDAsIDMyKSB7CisJCVBPUlQyNTVfREFUQSwgUE9SVDI1NF9EQVRBLCBQT1JUMjUzX0RBVEEsIFBPUlQyNTJfREFUQSwKKwkJUE9SVDI1MV9EQVRBLCBQT1JUMjUwX0RBVEEsIFBPUlQyNDlfREFUQSwgUE9SVDI0OF9EQVRBLAorCQlQT1JUMjQ3X0RBVEEsIFBPUlQyNDZfREFUQSwgUE9SVDI0NV9EQVRBLCBQT1JUMjQ0X0RBVEEsCisJCVBPUlQyNDNfREFUQSwgUE9SVDI0Ml9EQVRBLCBQT1JUMjQxX0RBVEEsIFBPUlQyNDBfREFUQSwKKwkJUE9SVDIzOV9EQVRBLCBQT1JUMjM4X0RBVEEsIFBPUlQyMzdfREFUQSwgUE9SVDIzNl9EQVRBLAorCQlQT1JUMjM1X0RBVEEsIFBPUlQyMzRfREFUQSwgUE9SVDIzM19EQVRBLCBQT1JUMjMyX0RBVEEsCisJCVBPUlQyMzFfREFUQSwgUE9SVDIzMF9EQVRBLCBQT1JUMjI5X0RBVEEsIFBPUlQyMjhfREFUQSwKKwkJUE9SVDIyN19EQVRBLCBQT1JUMjI2X0RBVEEsIFBPUlQyMjVfREFUQSwgUE9SVDIyNF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQT1JUVTI4N18yNTZEUiIsIDB4ZTYwNTcwMDQsIDMyKSB7CisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIDAsCisJCTAsIDAsIDAsIFBPUlQyNzJfREFUQSwKKwkJUE9SVDI3MV9EQVRBLCBQT1JUMjcwX0RBVEEsIFBPUlQyNjlfREFUQSwgUE9SVDI2OF9EQVRBLAorCQlQT1JUMjY3X0RBVEEsIFBPUlQyNjZfREFUQSwgUE9SVDI2NV9EQVRBLCBQT1JUMjY0X0RBVEEsCisJCVBPUlQyNjNfREFUQSwgUE9SVDI2Ml9EQVRBLCBQT1JUMjYxX0RBVEEsIFBPUlQyNjBfREFUQSwKKwkJUE9SVDI1OV9EQVRBLCBQT1JUMjU4X0RBVEEsIFBPUlQyNTdfREFUQSwgUE9SVDI1Nl9EQVRBIH0KKwl9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2luZm8gc2g3MzY3X3Bpbm11eF9pbmZvID0geworCS5uYW1lID0gInNoNzM2N19wZmMiLAorCS5yZXNlcnZlZF9pZCA9IFBJTk1VWF9SRVNFUlZFRCwKKwkuZGF0YSA9IHsgUElOTVVYX0RBVEFfQkVHSU4sIFBJTk1VWF9EQVRBX0VORCB9LAorCS5pbnB1dCA9IHsgUElOTVVYX0lOUFVUX0JFR0lOLCBQSU5NVVhfSU5QVVRfRU5EIH0sCisJLmlucHV0X3B1ID0geyBQSU5NVVhfSU5QVVRfUFVMTFVQX0JFR0lOLCBQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCB9LAorCS5pbnB1dF9wZCA9IHsgUElOTVVYX0lOUFVUX1BVTExET1dOX0JFR0lOLCBQSU5NVVhfSU5QVVRfUFVMTERPV05fRU5EIH0sCisJLm91dHB1dCA9IHsgUElOTVVYX09VVFBVVF9CRUdJTiwgUElOTVVYX09VVFBVVF9FTkQgfSwKKwkubWFyayA9IHsgUElOTVVYX01BUktfQkVHSU4sIFBJTk1VWF9NQVJLX0VORCB9LAorCS5mdW5jdGlvbiA9IHsgUElOTVVYX0ZVTkNUSU9OX0JFR0lOLCBQSU5NVVhfRlVOQ1RJT05fRU5EIH0sCisKKwkuZmlyc3RfZ3BpbyA9IEdQSU9fUE9SVDAsCisJLmxhc3RfZ3BpbyA9IEdQSU9fRk5fRElWTE9DSywKKworCS5ncGlvcyA9IHBpbm11eF9ncGlvcywKKwkuY2ZnX3JlZ3MgPSBwaW5tdXhfY29uZmlnX3JlZ3MsCisJLmRhdGFfcmVncyA9IHBpbm11eF9kYXRhX3JlZ3MsCisKKwkuZ3Bpb19kYXRhID0gcGlubXV4X2RhdGEsCisJLmdwaW9fZGF0YV9zaXplID0gQVJSQVlfU0laRShwaW5tdXhfZGF0YSksCit9OworCit2b2lkIHNoNzM2N19waW5tdXhfaW5pdCh2b2lkKQoreworCXJlZ2lzdGVyX3Bpbm11eCgmc2g3MzY3X3Bpbm11eF9pbmZvKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcGZjLXNoNzM3Mi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wZmMtc2g3MzcyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU1N2QwOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvcGZjLXNoNzM3Mi5jCkBAIC0wLDAgKzEsMTYzNyBAQAorLyoKKyAqIHNoNzM3MiBwcm9jZXNzb3Igc3VwcG9ydCAtIFBGQyBoYXJkd2FyZSBibG9jaworICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgS3VuaW5vcmkgTW9yaW1vdG8gPG1vcmltb3RvLmt1bmlub3JpQHJlbmVzYXMuY29tPgorICoKKyAqIEJhc2VkIG9uCisgKiBzaDczNjcgcHJvY2Vzc29yIHN1cHBvcnQgLSBQRkMgaGFyZHdhcmUgYmxvY2sKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgTWFnbnVzIERhbW0KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bWFjaC9zaDczNzIuaD4KKworI2RlZmluZSBfMShmbiwgcGZ4LCBzZngpIGZuKHBmeCwgc2Z4KQorCisjZGVmaW5lIF8xMChmbiwgcGZ4LCBzZngpCQkJCVwKKwlfMShmbiwgcGZ4IyMwLCBzZngpLCBfMShmbiwgcGZ4IyMxLCBzZngpLAlcCisJXzEoZm4sIHBmeCMjMiwgc2Z4KSwgXzEoZm4sIHBmeCMjMywgc2Z4KSwJXAorCV8xKGZuLCBwZngjIzQsIHNmeCksIF8xKGZuLCBwZngjIzUsIHNmeCksCVwKKwlfMShmbiwgcGZ4IyM2LCBzZngpLCBfMShmbiwgcGZ4IyM3LCBzZngpLAlcCisJXzEoZm4sIHBmeCMjOCwgc2Z4KSwgXzEoZm4sIHBmeCMjOSwgc2Z4KQorCisjZGVmaW5lIF84MChmbiwgcGZ4LCBzZngpCQkJCVwKKwlfMTAoZm4sIHBmeCMjMSwgc2Z4KSwJXzEwKGZuLCBwZngjIzIsIHNmeCksCVwKKwlfMTAoZm4sIHBmeCMjMywgc2Z4KSwJXzEwKGZuLCBwZngjIzQsIHNmeCksCVwKKwlfMTAoZm4sIHBmeCMjNSwgc2Z4KSwJXzEwKGZuLCBwZngjIzYsIHNmeCksCVwKKwlfMTAoZm4sIHBmeCMjNywgc2Z4KSwJXzEwKGZuLCBwZngjIzgsIHNmeCkKKworI2RlZmluZSBfMTkwKGZuLCBwZngsIHNmeCkgXAorCV8xMChmbiwgcGZ4LCBzZngpLCBfODAoZm4sIHBmeCwgc2Z4KSwgXzEwKGZuLCBwZngjIzksIHNmeCksIFwKKwlfMTAoZm4sIHBmeCMjMTAsIHNmeCksIF84MChmbiwgcGZ4IyMxLCBzZngpLCBfMShmbiwgcGZ4IyMxOTAsIHNmeCkKKworI2RlZmluZSBfUE9SVChwZngsIHNmeCkgcGZ4IyNfIyNzZngKKyNkZWZpbmUgUE9SVF9BTEwoc3RyKSBfMTkwKF9QT1JULCBQT1JULCBzdHIpCisKK2VudW0geworCVBJTk1VWF9SRVNFUlZFRCA9IDAsCisKKwkvKiBQT1JUMF9EQVRBIC0+IFBPUlQxOTBfREFUQSAqLworCVBJTk1VWF9EQVRBX0JFR0lOLAorCVBPUlRfQUxMKERBVEEpLAorCVBJTk1VWF9EQVRBX0VORCwKKworCS8qIFBPUlQwX0lOIC0+IFBPUlQxOTBfSU4gKi8KKwlQSU5NVVhfSU5QVVRfQkVHSU4sCisJUE9SVF9BTEwoSU4pLAorCVBJTk1VWF9JTlBVVF9FTkQsCisKKwkvKiBQT1JUMF9JTl9QVSAtPiBQT1JUMTkwX0lOX1BVICovCisJUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwKKwlQT1JUX0FMTChJTl9QVSksCisJUElOTVVYX0lOUFVUX1BVTExVUF9FTkQsCisKKwkvKiBQT1JUMF9JTl9QRCAtPiBQT1JUMTkwX0lOX1BEICovCisJUElOTVVYX0lOUFVUX1BVTExET1dOX0JFR0lOLAorCVBPUlRfQUxMKElOX1BEKSwKKwlQSU5NVVhfSU5QVVRfUFVMTERPV05fRU5ELAorCisJLyogUE9SVDBfT1VUIC0+IFBPUlQxOTBfT1VUICovCisJUElOTVVYX09VVFBVVF9CRUdJTiwKKwlQT1JUX0FMTChPVVQpLAorCVBJTk1VWF9PVVRQVVRfRU5ELAorCisJUElOTVVYX0ZVTkNUSU9OX0JFR0lOLAorCVBPUlRfQUxMKEZOX0lOKSwJLyogUE9SVDBfRk5fSU4JLT4gUE9SVDE5MF9GTl9JTiAqLworCVBPUlRfQUxMKEZOX09VVCksCS8qIFBPUlQwX0ZOX09VVAktPiBQT1JUMTkwX0ZOX09VVCAqLworCVBPUlRfQUxMKEZOMCksCQkvKiBQT1JUMF9GTjAJLT4gUE9SVDE5MF9GTjAgKi8KKwlQT1JUX0FMTChGTjEpLAkJLyogUE9SVDBfRk4xCS0+IFBPUlQxOTBfRk4xICovCisJUE9SVF9BTEwoRk4yKSwJCS8qIFBPUlQwX0ZOMgktPiBQT1JUMTkwX0ZOMiAqLworCVBPUlRfQUxMKEZOMyksCQkvKiBQT1JUMF9GTjMJLT4gUE9SVDE5MF9GTjMgKi8KKwlQT1JUX0FMTChGTjQpLAkJLyogUE9SVDBfRk40CS0+IFBPUlQxOTBfRk40ICovCisJUE9SVF9BTEwoRk41KSwJCS8qIFBPUlQwX0ZONQktPiBQT1JUMTkwX0ZONSAqLworCVBPUlRfQUxMKEZONiksCQkvKiBQT1JUMF9GTjYJLT4gUE9SVDE5MF9GTjYgKi8KKwlQT1JUX0FMTChGTjcpLAkJLyogUE9SVDBfRk43CS0+IFBPUlQxOTBfRk43ICovCisKKwlNU0VMMUNSXzMxXzAsCU1TRUwxQ1JfMzFfMSwKKwlNU0VMMUNSXzMwXzAsCU1TRUwxQ1JfMzBfMSwKKwlNU0VMMUNSXzI5XzAsCU1TRUwxQ1JfMjlfMSwKKwlNU0VMMUNSXzI4XzAsCU1TRUwxQ1JfMjhfMSwKKwlNU0VMMUNSXzI3XzAsCU1TRUwxQ1JfMjdfMSwKKwlNU0VMMUNSXzI2XzAsCU1TRUwxQ1JfMjZfMSwKKwlNU0VMMUNSXzE2XzAsCU1TRUwxQ1JfMTZfMSwKKwlNU0VMMUNSXzE1XzAsCU1TRUwxQ1JfMTVfMSwKKwlNU0VMMUNSXzE0XzAsCU1TRUwxQ1JfMTRfMSwKKwlNU0VMMUNSXzEzXzAsCU1TRUwxQ1JfMTNfMSwKKwlNU0VMMUNSXzEyXzAsCU1TRUwxQ1JfMTJfMSwKKwlNU0VMMUNSXzlfMCwJTVNFTDFDUl85XzEsCisJTVNFTDFDUl84XzAsCU1TRUwxQ1JfOF8xLAorCU1TRUwxQ1JfN18wLAlNU0VMMUNSXzdfMSwKKwlNU0VMMUNSXzZfMCwJTVNFTDFDUl82XzEsCisJTVNFTDFDUl80XzAsCU1TRUwxQ1JfNF8xLAorCU1TRUwxQ1JfM18wLAlNU0VMMUNSXzNfMSwKKwlNU0VMMUNSXzJfMCwJTVNFTDFDUl8yXzEsCisJTVNFTDFDUl8wXzAsCU1TRUwxQ1JfMF8xLAorCisJTVNFTDNDUl8yN18wLAlNU0VMM0NSXzI3XzEsCisJTVNFTDNDUl8yNl8wLAlNU0VMM0NSXzI2XzEsCisJTVNFTDNDUl8yMV8wLAlNU0VMM0NSXzIxXzEsCisJTVNFTDNDUl8yMF8wLAlNU0VMM0NSXzIwXzEsCisJTVNFTDNDUl8xNV8wLAlNU0VMM0NSXzE1XzEsCisJTVNFTDNDUl85XzAsCU1TRUwzQ1JfOV8xLAorCU1TRUwzQ1JfNl8wLAlNU0VMM0NSXzZfMSwKKworCU1TRUw0Q1JfMTlfMCwJTVNFTDRDUl8xOV8xLAorCU1TRUw0Q1JfMThfMCwJTVNFTDRDUl8xOF8xLAorCU1TRUw0Q1JfMTdfMCwJTVNFTDRDUl8xN18xLAorCU1TRUw0Q1JfMTZfMCwJTVNFTDRDUl8xNl8xLAorCU1TRUw0Q1JfMTVfMCwJTVNFTDRDUl8xNV8xLAorCU1TRUw0Q1JfMTRfMCwJTVNFTDRDUl8xNF8xLAorCU1TRUw0Q1JfMTBfMCwJTVNFTDRDUl8xMF8xLAorCU1TRUw0Q1JfNl8wLAlNU0VMNENSXzZfMSwKKwlNU0VMNENSXzRfMCwJTVNFTDRDUl80XzEsCisJTVNFTDRDUl8xXzAsCU1TRUw0Q1JfMV8xLAorCVBJTk1VWF9GVU5DVElPTl9FTkQsCisKKwlQSU5NVVhfTUFSS19CRUdJTiwKKworCS8qIElSUSAqLworCUlSUTBfNl9NQVJLLAlJUlEwXzE2Ml9NQVJLLAlJUlExX01BUkssCUlSUTJfNF9NQVJLLAorCUlSUTJfNV9NQVJLLAlJUlEzXzhfTUFSSywJSVJRM18xNl9NQVJLLAlJUlE0XzE3X01BUkssCisJSVJRNF8xNjNfTUFSSywJSVJRNV9NQVJLLAlJUlE2XzM5X01BUkssCUlSUTZfMTY0X01BUkssCisJSVJRN180MF9NQVJLLAlJUlE3XzE2N19NQVJLLAlJUlE4XzQxX01BUkssCUlSUThfMTY4X01BUkssCisJSVJROV80Ml9NQVJLLAlJUlE5XzE2OV9NQVJLLAlJUlExMF9NQVJLLAlJUlExMV9NQVJLLAorCUlSUTEyXzgwX01BUkssCUlSUTEyXzEzN19NQVJLLAlJUlExM184MV9NQVJLLAlJUlExM18xNDVfTUFSSywKKwlJUlExNF84Ml9NQVJLLAlJUlExNF8xNDZfTUFSSywJSVJRMTVfODNfTUFSSywJSVJRMTVfMTQ3X01BUkssCisJSVJRMTZfODRfTUFSSywJSVJRMTZfMTcwX01BUkssCUlSUTE3X01BUkssCUlSUTE4X01BUkssCisJSVJRMTlfTUFSSywJSVJRMjBfTUFSSywJSVJRMjFfTUFSSywJSVJRMjJfTUFSSywKKwlJUlEyM19NQVJLLAlJUlEyNF9NQVJLLAlJUlEyNV9NQVJLLAlJUlEyNl8xMjFfTUFSSywKKwlJUlEyNl8xNzJfTUFSSywJSVJRMjdfMTIyX01BUkssCUlSUTI3XzE4MF9NQVJLLAlJUlEyOF8xMjNfTUFSSywKKwlJUlEyOF8xODFfTUFSSywJSVJRMjlfMTI5X01BUkssCUlSUTI5XzE4Ml9NQVJLLAlJUlEzMF8xMzBfTUFSSywKKwlJUlEzMF8xODNfTUFSSywJSVJRMzFfMTM4X01BUkssCUlSUTMxXzE4NF9NQVJLLAorCisJLyogTVNJT0YwICovCisJTVNJT0YwX1RTWU5DX01BUkssCU1TSU9GMF9UU0NLX01BUkssCU1TSU9GMF9SWERfTUFSSywKKwlNU0lPRjBfUlNDS19NQVJLLAlNU0lPRjBfUlNZTkNfTUFSSywJTVNJT0YwX01DSzBfTUFSSywKKwlNU0lPRjBfTUNLMV9NQVJLLAlNU0lPRjBfU1MxX01BUkssCU1TSU9GMF9TUzJfTUFSSywKKwlNU0lPRjBfVFhEX01BUkssCisKKwkvKiBNU0lPRjEgKi8KKwlNU0lPRjFfVFNDS18zOV9NQVJLLAlNU0lPRjFfVFNZTkNfNDBfTUFSSywKKwlNU0lPRjFfVFNDS184OF9NQVJLLAlNU0lPRjFfVFNZTkNfODlfTUFSSywKKwlNU0lPRjFfVFhEXzQxX01BUkssCU1TSU9GMV9SWERfNDJfTUFSSywKKwlNU0lPRjFfVFhEXzkwX01BUkssCU1TSU9GMV9SWERfOTFfTUFSSywKKwlNU0lPRjFfU1MxXzQzX01BUkssCU1TSU9GMV9TUzJfNDRfTUFSSywKKwlNU0lPRjFfU1MxXzkyX01BUkssCU1TSU9GMV9TUzJfOTNfTUFSSywKKwlNU0lPRjFfUlNDS19NQVJLLAlNU0lPRjFfUlNZTkNfTUFSSywKKwlNU0lPRjFfTUNLMF9NQVJLLAlNU0lPRjFfTUNLMV9NQVJLLAorCisJLyogTVNJT0YyICovCisJTVNJT0YyX1JTQ0tfTUFSSywJTVNJT0YyX1JTWU5DX01BUkssCU1TSU9GMl9NQ0swX01BUkssCisJTVNJT0YyX01DSzFfTUFSSywJTVNJT0YyX1NTMV9NQVJLLAlNU0lPRjJfU1MyX01BUkssCisJTVNJT0YyX1RTWU5DX01BUkssCU1TSU9GMl9UU0NLX01BUkssCU1TSU9GMl9SWERfTUFSSywKKwlNU0lPRjJfVFhEX01BUkssCisKKwkvKiBNU0lPRjMgKi8KKwlCQklGMV9SWERfTUFSSywJCUJCSUYxX1RTWU5DX01BUkssCUJCSUYxX1RTQ0tfTUFSSywKKwlCQklGMV9UWERfTUFSSywJCUJCSUYxX1JTQ0tfTUFSSywJQkJJRjFfUlNZTkNfTUFSSywKKwlCQklGMV9GTE9XX01BUkssCUJCX1JYX0ZMT1dfTl9NQVJLLAorCisJLyogTVNJT0Y0ICovCisJQkJJRjJfVFNDSzFfTUFSSywJQkJJRjJfVFNZTkMxX01BUkssCisJQkJJRjJfVFhEMV9NQVJLLAlCQklGMl9SWERfTUFSSywKKworCS8qIEZTSSAqLworCUZTSUFDS19NQVJLLAlGU0lCQ0tfTUFSSywJCUZTSUFJTFJfTUFSSywJRlNJQUlCVF9NQVJLLAorCUZTSUFJU0xEX01BUkssCUZTSUFPTUNfTUFSSywJCUZTSUFPTFJfTUFSSywJRlNJQU9CVF9NQVJLLAorCUZTSUFPU0xEX01BUkssCUZTSUFTUERJRl8xMV9NQVJLLAlGU0lBU1BESUZfMTVfTUFSSywKKworCS8qIEZNU0kgKi8KKwlGTVNPQ0tfTUFSSywJRk1TT09MUl9NQVJLLAlGTVNJT0xSX01BUkssCUZNU09PQlRfTUFSSywKKwlGTVNJT0JUX01BUkssCUZNU09TTERfTUFSSywJRk1TT0lMUl9NQVJLLAlGTVNJSUxSX01BUkssCisJRk1TT0lCVF9NQVJLLAlGTVNJSUJUX01BUkssCUZNU0lTTERfTUFSSywJRk1TSUNLX01BUkssCisKKwkvKiBTQ0lGQTAgKi8KKwlTQ0lGQTBfVFhEX01BUkssCVNDSUZBMF9SWERfTUFSSywJU0NJRkEwX1NDS19NQVJLLAorCVNDSUZBMF9SVFNfTUFSSywJU0NJRkEwX0NUU19NQVJLLAorCisJLyogU0NJRkExICovCisJU0NJRkExX1RYRF9NQVJLLAlTQ0lGQTFfUlhEX01BUkssCVNDSUZBMV9TQ0tfTUFSSywKKwlTQ0lGQTFfUlRTX01BUkssCVNDSUZBMV9DVFNfTUFSSywKKworCS8qIFNDSUZBMiAqLworCVNDSUZBMl9DVFMxX01BUkssCVNDSUZBMl9SVFMxX01BUkssCVNDSUZBMl9UWEQxX01BUkssCisJU0NJRkEyX1JYRDFfTUFSSywJU0NJRkEyX1NDSzFfTUFSSywKKworCS8qIFNDSUZBMyAqLworCVNDSUZBM19DVFNfNDNfTUFSSywJU0NJRkEzX0NUU18xNDBfTUFSSywJU0NJRkEzX1JUU180NF9NQVJLLAorCVNDSUZBM19SVFNfMTQxX01BUkssCVNDSUZBM19TQ0tfTUFSSywJU0NJRkEzX1RYRF9NQVJLLAorCVNDSUZBM19SWERfTUFSSywKKworCS8qIFNDSUZBNCAqLworCVNDSUZBNF9SWERfTUFSSywJU0NJRkE0X1RYRF9NQVJLLAorCisJLyogU0NJRkE1ICovCisJU0NJRkE1X1JYRF9NQVJLLAlTQ0lGQTVfVFhEX01BUkssCisKKwkvKiBTQ0lGQiAqLworCVNDSUZCX1NDS19NQVJLLAlTQ0lGQl9SVFNfTUFSSywJU0NJRkJfQ1RTX01BUkssCisJU0NJRkJfVFhEX01BUkssCVNDSUZCX1JYRF9NQVJLLAorCisJLyogQ0VVICovCisJVklPX0hEX01BUkssCVZJT19DS08xX01BUkssCVZJT19DS08yX01BUkssCVZJT19WRF9NQVJLLAorCVZJT19DTEtfTUFSSywJVklPX0ZJRUxEX01BUkssCVZJT19DS09fTUFSSywKKwlWSU9fRDBfTUFSSywJVklPX0QxX01BUkssCVZJT19EMl9NQVJLLAlWSU9fRDNfTUFSSywKKwlWSU9fRDRfTUFSSywJVklPX0Q1X01BUkssCVZJT19ENl9NQVJLLAlWSU9fRDdfTUFSSywKKwlWSU9fRDhfTUFSSywJVklPX0Q5X01BUkssCVZJT19EMTBfTUFSSywJVklPX0QxMV9NQVJLLAorCVZJT19EMTJfTUFSSywJVklPX0QxM19NQVJLLAlWSU9fRDE0X01BUkssCVZJT19EMTVfTUFSSywKKworCS8qIFVTQjAgKi8KKwlJRElOXzBfTUFSSywJRVhUTFBfMF9NQVJLLAlPVkNOMl8wX01BUkssCVBXRU5fMF9NQVJLLAorCU9WQ05fMF9NQVJLLAlWQlVTMF8wX01BUkssCisKKwkvKiBVU0IxICovCisJSURJTl8xXzE4X01BUkssCQlJRElOXzFfMTEzX01BUkssCisJUFdFTl8xXzExNV9NQVJLLAlQV0VOXzFfMTM4X01BUkssCisJT1ZDTl8xXzExNF9NQVJLLAlPVkNOXzFfMTYyX01BUkssCisJRVhUTFBfMV9NQVJLLAkJT1ZDTjJfMV9NQVJLLAorCVZCVVMwXzFfTUFSSywKKworCS8qIEdQSU8gKi8KKwlHUEkwX01BUkssCUdQSTFfTUFSSywJR1BPMF9NQVJLLAlHUE8xX01BUkssCisKKwkvKiBCU0MgKi8KKwlCU19NQVJLLAlXRTFfTUFSSywKKwlDS09fTUFSSywJV0FJVF9NQVJLLAlSRFdSX01BUkssCisKKwlBMF9NQVJLLAlBMV9NQVJLLAlBMl9NQVJLLAlBM19NQVJLLAorCUE2X01BUkssCUE3X01BUkssCUE4X01BUkssCUE5X01BUkssCisJQTEwX01BUkssCUExMV9NQVJLLAlBMTJfTUFSSywJQTEzX01BUkssCisJQTE0X01BUkssCUExNV9NQVJLLAlBMTZfTUFSSywJQTE3X01BUkssCisJQTE4X01BUkssCUExOV9NQVJLLAlBMjBfTUFSSywJQTIxX01BUkssCisJQTIyX01BUkssCUEyM19NQVJLLAlBMjRfTUFSSywJQTI1X01BUkssCisJQTI2X01BUkssCisKKwlDUzBfTUFSSywJQ1MyX01BUkssCUNTNF9NQVJLLAorCUNTNUFfTUFSSywJQ1M1Ql9NQVJLLAlDUzZBX01BUkssCisKKwkvKiBCU0MvRkxDVEwgKi8KKwlSRF9GU0NfTUFSSywJV0UwX0ZXRV9NQVJLLAlBNF9GT0VfTUFSSywJQTVfRkNERV9NQVJLLAorCUQwX05BRjBfTUFSSywJRDFfTkFGMV9NQVJLLAlEMl9OQUYyX01BUkssCUQzX05BRjNfTUFSSywKKwlENF9OQUY0X01BUkssCUQ1X05BRjVfTUFSSywJRDZfTkFGNl9NQVJLLAlEN19OQUY3X01BUkssCisJRDhfTkFGOF9NQVJLLAlEOV9OQUY5X01BUkssCUQxMF9OQUYxMF9NQVJLLAlEMTFfTkFGMTFfTUFSSywKKwlEMTJfTkFGMTJfTUFSSywJRDEzX05BRjEzX01BUkssCUQxNF9OQUYxNF9NQVJLLAlEMTVfTkFGMTVfTUFSSywKKworCS8qIE1NQ0lGKDEpICovCisJTU1DRDBfMF9NQVJLLAlNTUNEMF8xX01BUkssCU1NQ0QwXzJfTUFSSywJTU1DRDBfM19NQVJLLAorCU1NQ0QwXzRfTUFSSywJTU1DRDBfNV9NQVJLLAlNTUNEMF82X01BUkssCU1NQ0QwXzdfTUFSSywKKwlNTUNDTUQwX01BUkssCU1NQ0NMSzBfTUFSSywKKworCS8qIE1NQ0lGKDIpICovCisJTU1DRDFfMF9NQVJLLAlNTUNEMV8xX01BUkssCU1NQ0QxXzJfTUFSSywJTU1DRDFfM19NQVJLLAorCU1NQ0QxXzRfTUFSSywJTU1DRDFfNV9NQVJLLAlNTUNEMV82X01BUkssCU1NQ0QxXzdfTUFSSywKKwlNTUNDTEsxX01BUkssCU1NQ0NNRDFfTUFSSywKKworCS8qIFNQVTIgKi8KKwlWSU5UX0lfTUFSSywKKworCS8qIEZMQ1RMICovCisJRkNFMV9NQVJLLAlGQ0UwX01BUkssCUZSQl9NQVJLLAorCisJLyogSFNJICovCisJR1BfUlhfRkxBR19NQVJLLAlHUF9SWF9EQVRBX01BUkssCUdQX1RYX1JFQURZX01BUkssCisJR1BfUlhfV0FLRV9NQVJLLAlNUF9UWF9GTEFHX01BUkssCU1QX1RYX0RBVEFfTUFSSywKKwlNUF9SWF9SRUFEWV9NQVJLLAlNUF9UWF9XQUtFX01BUkssCisKKwkvKiBNRkkgKi8KKwlNRkl2Nl9NQVJLLAorCU1GSXY0X01BUkssCisKKwlNRU1DX0NTMF9NQVJLLAkJCU1FTUNfQlVTQ0xLX01FTUNfQTBfTUFSSywKKwlNRU1DX0NTMV9NRU1DX0ExX01BUkssCQlNRU1DX0FEVl9NRU1DX0RSRVEwX01BUkssCisJTUVNQ19XQUlUX01FTUNfRFJFUTFfTUFSSywJTUVNQ19OT0VfTUFSSywKKwlNRU1DX05XRV9NQVJLLAkJCU1FTUNfSU5UX01BUkssCisKKwlNRU1DX0FEMF9NQVJLLAlNRU1DX0FEMV9NQVJLLAlNRU1DX0FEMl9NQVJLLAorCU1FTUNfQUQzX01BUkssCU1FTUNfQUQ0X01BUkssCU1FTUNfQUQ1X01BUkssCisJTUVNQ19BRDZfTUFSSywJTUVNQ19BRDdfTUFSSywJTUVNQ19BRDhfTUFSSywKKwlNRU1DX0FEOV9NQVJLLAlNRU1DX0FEMTBfTUFSSywJTUVNQ19BRDExX01BUkssCisJTUVNQ19BRDEyX01BUkssCU1FTUNfQUQxM19NQVJLLAlNRU1DX0FEMTRfTUFSSywKKwlNRU1DX0FEMTVfTUFSSywKKworCS8qIFNJTSAqLworCVNJTV9SU1RfTUFSSywJU0lNX0NMS19NQVJLLAlTSU1fRF9NQVJLLAorCisJLyogVFBVICovCisJVFBVMFRPMF9NQVJLLAkJVFBVMFRPMV9NQVJLLAorCVRQVTBUTzJfOTNfTUFSSywJVFBVMFRPMl85OV9NQVJLLAorCVRQVTBUTzNfTUFSSywKKworCS8qIEkyQzIgKi8KKwlJMkNfU0NMMl9NQVJLLAlJMkNfU0RBMl9NQVJLLAorCisJLyogSTJDMygxKSAqLworCUkyQ19TQ0wzX01BUkssCUkyQ19TREEzX01BUkssCisKKwkvKiBJMkMzKDIpICovCisJSTJDX1NDTDNTX01BUkssCUkyQ19TREEzU19NQVJLLAorCisJLyogSTJDNCgyKSAqLworCUkyQ19TQ0w0X01BUkssCUkyQ19TREE0X01BUkssCisKKwkvKiBJMkM0KDIpICovCisJSTJDX1NDTDRTX01BUkssCUkyQ19TREE0U19NQVJLLAorCisJLyogS0VZU0MgKi8KKwlLRVlPVVQwX01BUkssCUtFWUlOMF8xMjFfTUFSSywJS0VZSU4wXzEzNl9NQVJLLAorCUtFWU9VVDFfTUFSSywJS0VZSU4xXzEyMl9NQVJLLAlLRVlJTjFfMTM1X01BUkssCisJS0VZT1VUMl9NQVJLLAlLRVlJTjJfMTIzX01BUkssCUtFWUlOMl8xMzRfTUFSSywKKwlLRVlPVVQzX01BUkssCUtFWUlOM18xMjRfTUFSSywJS0VZSU4zXzEzM19NQVJLLAorCUtFWU9VVDRfTUFSSywJS0VZSU40X01BUkssCisJS0VZT1VUNV9NQVJLLAlLRVlJTjVfTUFSSywKKwlLRVlPVVQ2X01BUkssCUtFWUlONl9NQVJLLAorCUtFWU9VVDdfTUFSSywJS0VZSU43X01BUkssCisKKwkvKiBMQ0RDICovCisJTENEQzBfU0VMRUNUX01BUkssCisJTENEQzFfU0VMRUNUX01BUkssCisJTENESFNZTl9NQVJLLAlMQ0RDU19NQVJLLAlMQ0RWU1lOX01BUkssCUxDRERDS19NQVJLLAorCUxDRFdSX01BUkssCUxDRFJEX01BUkssCUxDRERJU1BfTUFSSywJTENEUlNfTUFSSywKKwlMQ0RMQ0xLX01BUkssCUxDRERPTl9NQVJLLAorCisJTENERDBfTUFSSywJTENERDFfTUFSSywJTENERDJfTUFSSywJTENERDNfTUFSSywKKwlMQ0RENF9NQVJLLAlMQ0RENV9NQVJLLAlMQ0RENl9NQVJLLAlMQ0REN19NQVJLLAorCUxDREQ4X01BUkssCUxDREQ5X01BUkssCUxDREQxMF9NQVJLLAlMQ0REMTFfTUFSSywKKwlMQ0REMTJfTUFSSywJTENERDEzX01BUkssCUxDREQxNF9NQVJLLAlMQ0REMTVfTUFSSywKKwlMQ0REMTZfTUFSSywJTENERDE3X01BUkssCUxDREQxOF9NQVJLLAlMQ0REMTlfTUFSSywKKwlMQ0REMjBfTUFSSywJTENERDIxX01BUkssCUxDREQyMl9NQVJLLAlMQ0REMjNfTUFSSywKKworCS8qIElSREEgKi8KKwlJUkRBX09VVF9NQVJLLAlJUkRBX0lOX01BUkssCUlSREFfRklSU0VMX01BUkssCisJSVJPVVRfMTM5X01BUkssCUlST1VUXzE0MF9NQVJLLAorCisJLyogVFNJRjEgKi8KKwlUUzBfMVNFTEVDVF9NQVJLLAorCVRTMF8yU0VMRUNUX01BUkssCisJVFMxXzFTRUxFQ1RfTUFSSywKKwlUUzFfMlNFTEVDVF9NQVJLLAorCisJVFNfU1BTWU5DMV9NQVJLLAlUU19TREFUMV9NQVJLLAorCVRTX1NERU4xX01BUkssCQlUU19TQ0sxX01BUkssCisKKwkvKiBUU0lGMiAqLworCVRTX1NQU1lOQzJfTUFSSywJVFNfU0RBVDJfTUFSSywKKwlUU19TREVOMl9NQVJLLAkJVFNfU0NLMl9NQVJLLAorCisJLyogSERNSSAqLworCUhETUlfSFBEX01BUkssCUhETUlfQ0VDX01BUkssCisKKwkvKiBTREhJMCAqLworCVNESElDTEswX01BUkssCVNESElDRDBfTUFSSywKKwlTREhJQ01EMF9NQVJLLAlTREhJV1AwX01BUkssCisJU0RISUQwXzBfTUFSSywJU0RISUQwXzFfTUFSSywKKwlTREhJRDBfMl9NQVJLLAlTREhJRDBfM19NQVJLLAorCisJLyogU0RISTEgKi8KKwlTREhJQ0xLMV9NQVJLLAlTREhJQ01EMV9NQVJLLAlTREhJRDFfMF9NQVJLLAorCVNESElEMV8xX01BUkssCVNESElEMV8yX01BUkssCVNESElEMV8zX01BUkssCisKKwkvKiBTREhJMiAqLworCVNESElDTEsyX01BUkssCVNESElDTUQyX01BUkssCVNESElEMl8wX01BUkssCisJU0RISUQyXzFfTUFSSywJU0RISUQyXzJfTUFSSywJU0RISUQyXzNfTUFSSywKKworCS8qIFNERU5DICovCisJU0RFTkNfQ1BHX01BUkssCisJU0RFTkNfRFZfQ0xLSV9NQVJLLAorCisJUElOTVVYX01BUktfRU5ELAorfTsKKworLyogUE9SVF9EQVRBX0lfUEQobnIpICovCisjZGVmaW5lIF9JX19fRChucikJCQkgICAgIFwKKwlQSU5NVVhfREFUQShQT1JUIyNuciMjX0RBVEEsIFBPUlQjI25yIyNfRk4wLCBcCisJCSAgICBQT1JUIyNuciMjX0lOLCBQT1JUIyNuciMjX0lOX1BEKQorCisvKiBQT1JUX0RBVEFfSV9QVShucikgKi8KKyNkZWZpbmUgX0lfX1VfKG5yKQkJCSAgICAgXAorCVBJTk1VWF9EQVRBKFBPUlQjI25yIyNfREFUQSwgUE9SVCMjbnIjI19GTjAsIFwKKwkJICAgIFBPUlQjI25yIyNfSU4sIFBPUlQjI25yIyNfSU5fUFUpCisKKy8qIFBPUlRfREFUQV9JX1BVX1BEKG5yKSAqLworI2RlZmluZSBfSV9fVUQobnIpCQkJICAgICBcCisJUElOTVVYX0RBVEEoUE9SVCMjbnIjI19EQVRBLCBQT1JUIyNuciMjX0ZOMCwgXAorCQkgICAgUE9SVCMjbnIjI19JTiwgUE9SVCMjbnIjI19JTl9QRCwgUE9SVCMjbnIjI19JTl9QVSkKKworLyogUE9SVF9EQVRBX08obnIpICovCisjZGVmaW5lIF9fT19fXyhucikJCQkJCQkJXAorCVBJTk1VWF9EQVRBKFBPUlQjI25yIyNfREFUQSwgUE9SVCMjbnIjI19GTjAsIFBPUlQjI25yIyNfT1VUKQorCisvKiBQT1JUX0RBVEFfSU8obnIpICovCisjZGVmaW5lIF9JT19fXyhucikJCQkJICAgICBcCisJUElOTVVYX0RBVEEoUE9SVCMjbnIjI19EQVRBLCBQT1JUIyNuciMjX0ZOMCwgUE9SVCMjbnIjI19PVVQsIFwKKwkJICAgIFBPUlQjI25yIyNfSU4pCisKKy8qIFBPUlRfREFUQV9JT19QRChucikgKi8KKyNkZWZpbmUgX0lPX19EKG5yKQkJCQkJICAgICBcCisJUElOTVVYX0RBVEEoUE9SVCMjbnIjI19EQVRBLCBQT1JUIyNuciMjX0ZOMCwgUE9SVCMjbnIjI19PVVQsIFwKKwkJICAgIFBPUlQjI25yIyNfSU4sIFBPUlQjI25yIyNfSU5fUEQpCisKKy8qIFBPUlRfREFUQV9JT19QVShucikgKi8KKyNkZWZpbmUgX0lPX1VfKG5yKQkJCQkJICAgICBcCisJUElOTVVYX0RBVEEoUE9SVCMjbnIjI19EQVRBLCBQT1JUIyNuciMjX0ZOMCwgUE9SVCMjbnIjI19PVVQsIFwKKwkJICAgIFBPUlQjI25yIyNfSU4sIFBPUlQjI25yIyNfSU5fUFUpCisKKy8qIFBPUlRfREFUQV9JT19QVV9QRChucikgKi8KKyNkZWZpbmUgX0lPX1VEKG5yKQkJCQkJICAgICBcCisJUElOTVVYX0RBVEEoUE9SVCMjbnIjI19EQVRBLCBQT1JUIyNuciMjX0ZOMCwgUE9SVCMjbnIjI19PVVQsIFwKKwkJICAgIFBPUlQjI25yIyNfSU4sIFBPUlQjI25yIyNfSU5fUEQsIFBPUlQjI25yIyNfSU5fUFUpCisKKworc3RhdGljIHBpbm11eF9lbnVtX3QgcGlubXV4X2RhdGFbXSA9IHsKKworCS8qIHNwZWNpZnkgdmFsaWQgcGluIHN0YXRlcyBmb3IgZWFjaCBwaW4gaW4gR1BJTyBtb2RlICovCisKKwlfSU9fX0QoMCksIF9JT19fRCgxKSwgX19PX19fKDIpLCBfSV9fX0QoMyksIF9JX19fRCg0KSwKKwlfSV9fX0QoNSksIF9JT19VRCg2KSwgX0lfX19EKDcpLCBfSU9fX0QoOCksIF9fT19fXyg5KSwKKworCV9fT19fXygxMCksIF9fT19fXygxMSksIF9JT19VRCgxMiksIF9JT19fRCgxMyksIF9JT19fRCgxNCksCisJX19PX19fKDE1KSwgX0lPX19EKDE2KSwgX0lPX19EKDE3KSwgX0lfX19EKDE4KSwgX0lPX19fKDE5KSwKKworCV9JT19fXygyMCksIF9JT19fXygyMSksIF9JT19fXygyMiksIF9JT19fXygyMyksIF9JT19fXygyNCksCisJX0lPX19fKDI1KSwgX0lPX19fKDI2KSwgX0lPX19fKDI3KSwgX0lPX19fKDI4KSwgX0lPX19fKDI5KSwKKworCV9JT19fXygzMCksIF9JT19fXygzMSksIF9JT19fXygzMiksIF9JT19fXygzMyksIF9JT19fXygzNCksCisJX0lPX19fKDM1KSwgX0lPX19fKDM2KSwgX0lPX19fKDM3KSwgX0lPX19fKDM4KSwgX0lPX19fKDM5KSwKKworCV9JT19fXyg0MCksIF9JT19fXyg0MSksIF9JT19fXyg0MiksIF9JT19fXyg0MyksIF9JT19fXyg0NCksCisJX0lPX19fKDQ1KSwgX0lPX1VfKDQ2KSwgX0lPX1VfKDQ3KSwgX0lPX1VfKDQ4KSwgX0lPX1VfKDQ5KSwKKworCV9JT19VXyg1MCksIF9JT19VXyg1MSksIF9JT19VXyg1MiksIF9JT19VXyg1MyksIF9JT19VXyg1NCksCisJX0lPX1VfKDU1KSwgX0lPX1VfKDU2KSwgX0lPX1VfKDU3KSwgX0lPX1VfKDU4KSwgX0lPX1VfKDU5KSwKKworCV9JT19VXyg2MCksIF9JT19VXyg2MSksIF9JT19fXyg2MiksIF9fT19fXyg2MyksIF9fT19fXyg2NCksCisJX0lPX1VfKDY1KSwgX19PX19fKDY2KSwgX0lPX1VfKDY3KSwgX19PX19fKDY4KSwgX0lPX19fKDY5KSwgLyo2Nj8qLworCisJX0lPX19fKDcwKSwgX0lPX19fKDcxKSwgX19PX19fKDcyKSwgX0lfX1VfKDczKSwgX0lfX1VEKDc0KSwKKwlfSU9fVUQoNzUpLCBfSU9fVUQoNzYpLCBfSU9fVUQoNzcpLCBfSU9fVUQoNzgpLCBfSU9fVUQoNzkpLAorCisJX0lPX1VEKDgwKSwgX0lPX1VEKDgxKSwgX0lPX1VEKDgyKSwgX0lPX1VEKDgzKSwgX0lPX1VEKDg0KSwKKwlfSU9fVUQoODUpLCBfSU9fVUQoODYpLCBfSU9fVUQoODcpLCBfSU9fVUQoODgpLCBfSU9fVUQoODkpLAorCisJX0lPX1VEKDkwKSwgX0lPX1VEKDkxKSwgX0lPX1VEKDkyKSwgX0lPX1VEKDkzKSwgX0lPX1VEKDk0KSwKKwlfSU9fVUQoOTUpLCBfSU9fVV8oOTYpLCBfSU9fVUQoOTcpLCBfSU9fVUQoOTgpLCBfX09fX18oOTkpLCAvKjk5PyovCisKKwlfSU9fX0QoMTAwKSwgX0lPX19EKDEwMSksIF9JT19fRCgxMDIpLCBfSU9fX0QoMTAzKSwgX0lPX19EKDEwNCksCisJX0lPX19EKDEwNSksIF9JT19VXygxMDYpLCBfSU9fVV8oMTA3KSwgX0lPX1VfKDEwOCksIF9JT19VXygxMDkpLAorCisJX0lPX1VfKDExMCksIF9JT19VXygxMTEpLCBfSU9fX0QoMTEyKSwgX0lPX19EKDExMyksIF9JT19VXygxMTQpLAorCV9JT19VXygxMTUpLCBfSU9fVV8oMTE2KSwgX0lPX1VfKDExNyksIF9JT19VXygxMTgpLCBfSU9fVV8oMTE5KSwKKworCV9JT19VXygxMjApLCBfSU9fX0QoMTIxKSwgX0lPX19EKDEyMiksIF9JT19fRCgxMjMpLCBfSU9fX0QoMTI0KSwKKwlfSU9fX0QoMTI1KSwgX0lPX19EKDEyNiksIF9JT19fRCgxMjcpLCBfSU9fX0QoMTI4KSwgX0lPX1VEKDEyOSksCisKKwlfSU9fVUQoMTMwKSwgX0lPX1VEKDEzMSksIF9JT19VRCgxMzIpLCBfSU9fVUQoMTMzKSwgX0lPX1VEKDEzNCksCisJX0lPX1VEKDEzNSksIF9JT19fRCgxMzYpLCBfSU9fX0QoMTM3KSwgX0lPX19EKDEzOCksIF9JT19fRCgxMzkpLAorCisJX0lPX19EKDE0MCksIF9JT19fRCgxNDEpLCBfSU9fX0QoMTQyKSwgX0lPX1VEKDE0MyksIF9JT19fRCgxNDQpLAorCV9JT19fRCgxNDUpLCBfSU9fX0QoMTQ2KSwgX0lPX19EKDE0NyksIF9JT19fRCgxNDgpLCBfSU9fX0QoMTQ5KSwKKworCV9JT19fRCgxNTApLCBfSU9fX0QoMTUxKSwgX0lPX1VEKDE1MiksIF9JX19fRCgxNTMpLCBfSU9fVUQoMTU0KSwKKwlfSV9fX0QoMTU1KSwgX0lPX19EKDE1NiksIF9JT19fRCgxNTcpLCBfSV9fX0QoMTU4KSwgX0lPX19EKDE1OSksCisKKwlfX09fX18oMTYwKSwgX0lPX19EKDE2MSksIF9JT19fRCgxNjIpLCBfSU9fX0QoMTYzKSwgX0lfX19EKDE2NCksCisJX0lPX19EKDE2NSksIF9JX19fRCgxNjYpLCBfSV9fX0QoMTY3KSwgX0lfX19EKDE2OCksIF9JX19fRCgxNjkpLAorCisJX0lfX19EKDE3MCksIF9fT19fXygxNzEpLCBfSU9fVUQoMTcyKSwgX0lPX1VEKDE3MyksIF9JT19VRCgxNzQpLAorCV9JT19VRCgxNzUpLCBfSU9fVUQoMTc2KSwgX0lPX1VEKDE3NyksIF9JT19VRCgxNzgpLCBfX09fX18oMTc5KSwKKworCV9JT19VRCgxODApLCBfSU9fVUQoMTgxKSwgX0lPX1VEKDE4MiksIF9JT19VRCgxODMpLCBfSU9fVUQoMTg0KSwKKwlfX09fX18oMTg1KSwgX0lPX1VEKDE4NiksIF9JT19VRCgxODcpLCBfSU9fVUQoMTg4KSwgX0lPX1VEKDE4OSksCisKKwlfSU9fVUQoMTkwKSwKKworCS8qIElSUSAqLworCVBJTk1VWF9EQVRBKElSUTBfNl9NQVJLLAlQT1JUNl9GTjAsIAlNU0VMMUNSXzBfMCksCisJUElOTVVYX0RBVEEoSVJRMF8xNjJfTUFSSywJUE9SVDE2Ml9GTjAsCU1TRUwxQ1JfMF8xKSwKKwlQSU5NVVhfREFUQShJUlExX01BUkssCQlQT1JUMTJfRk4wKSwKKwlQSU5NVVhfREFUQShJUlEyXzRfTUFSSywJUE9SVDRfRk4wLAlNU0VMMUNSXzJfMCksCisJUElOTVVYX0RBVEEoSVJRMl81X01BUkssCVBPUlQ1X0ZOMCwJTVNFTDFDUl8yXzEpLAorCVBJTk1VWF9EQVRBKElSUTNfOF9NQVJLLAlQT1JUOF9GTjAsCU1TRUwxQ1JfM18wKSwKKwlQSU5NVVhfREFUQShJUlEzXzE2X01BUkssCVBPUlQxNl9GTjAsCU1TRUwxQ1JfM18xKSwKKwlQSU5NVVhfREFUQShJUlE0XzE3X01BUkssCVBPUlQxN19GTjAsCU1TRUwxQ1JfNF8wKSwKKwlQSU5NVVhfREFUQShJUlE0XzE2M19NQVJLLAlQT1JUMTYzX0ZOMCwJTVNFTDFDUl80XzEpLAorCVBJTk1VWF9EQVRBKElSUTVfTUFSSywJCVBPUlQxOF9GTjApLAorCVBJTk1VWF9EQVRBKElSUTZfMzlfTUFSSywJUE9SVDM5X0ZOMCwJTVNFTDFDUl82XzApLAorCVBJTk1VWF9EQVRBKElSUTZfMTY0X01BUkssCVBPUlQxNjRfRk4wLAlNU0VMMUNSXzZfMSksCisJUElOTVVYX0RBVEEoSVJRN180MF9NQVJLLAlQT1JUNDBfRk4wLAlNU0VMMUNSXzdfMSksCisJUElOTVVYX0RBVEEoSVJRN18xNjdfTUFSSywJUE9SVDE2N19GTjAsCU1TRUwxQ1JfN18wKSwKKwlQSU5NVVhfREFUQShJUlE4XzQxX01BUkssCVBPUlQ0MV9GTjAsCU1TRUwxQ1JfOF8xKSwKKwlQSU5NVVhfREFUQShJUlE4XzE2OF9NQVJLLAlQT1JUMTY4X0ZOMCwJTVNFTDFDUl84XzApLAorCVBJTk1VWF9EQVRBKElSUTlfNDJfTUFSSywJUE9SVDQyX0ZOMCwJTVNFTDFDUl85XzApLAorCVBJTk1VWF9EQVRBKElSUTlfMTY5X01BUkssCVBPUlQxNjlfRk4wLAlNU0VMMUNSXzlfMSksCisJUElOTVVYX0RBVEEoSVJRMTBfTUFSSywJCVBPUlQ2NV9GTjAsCU1TRUwxQ1JfOV8xKSwKKwlQSU5NVVhfREFUQShJUlExMV9NQVJLLAkJUE9SVDY3X0ZOMCksCisJUElOTVVYX0RBVEEoSVJRMTJfODBfTUFSSywJUE9SVDgwX0ZOMCwJTVNFTDFDUl8xMl8wKSwKKwlQSU5NVVhfREFUQShJUlExMl8xMzdfTUFSSywJUE9SVDEzN19GTjAsCU1TRUwxQ1JfMTJfMSksCisJUElOTVVYX0RBVEEoSVJRMTNfODFfTUFSSywJUE9SVDgxX0ZOMCwJTVNFTDFDUl8xM18wKSwKKwlQSU5NVVhfREFUQShJUlExM18xNDVfTUFSSywJUE9SVDE0NV9GTjAsCU1TRUwxQ1JfMTNfMSksCisJUElOTVVYX0RBVEEoSVJRMTRfODJfTUFSSywJUE9SVDgyX0ZOMCwJTVNFTDFDUl8xNF8wKSwKKwlQSU5NVVhfREFUQShJUlExNF8xNDZfTUFSSywJUE9SVDE0Nl9GTjAsCU1TRUwxQ1JfMTRfMSksCisJUElOTVVYX0RBVEEoSVJRMTVfODNfTUFSSywJUE9SVDgzX0ZOMCwJTVNFTDFDUl8xNV8wKSwKKwlQSU5NVVhfREFUQShJUlExNV8xNDdfTUFSSywJUE9SVDE0N19GTjAsCU1TRUwxQ1JfMTVfMSksCisJUElOTVVYX0RBVEEoSVJRMTZfODRfTUFSSywJUE9SVDg0X0ZOMCwJTVNFTDFDUl8xNl8wKSwKKwlQSU5NVVhfREFUQShJUlExNl8xNzBfTUFSSywJUE9SVDE3MF9GTjAsCU1TRUwxQ1JfMTZfMSksCisJUElOTVVYX0RBVEEoSVJRMTdfTUFSSywJCVBPUlQ4NV9GTjApLAorCVBJTk1VWF9EQVRBKElSUTE4X01BUkssCQlQT1JUODZfRk4wKSwKKwlQSU5NVVhfREFUQShJUlExOV9NQVJLLAkJUE9SVDg3X0ZOMCksCisJUElOTVVYX0RBVEEoSVJRMjBfTUFSSywJCVBPUlQ5Ml9GTjApLAorCVBJTk1VWF9EQVRBKElSUTIxX01BUkssCQlQT1JUOTNfRk4wKSwKKwlQSU5NVVhfREFUQShJUlEyMl9NQVJLLAkJUE9SVDk0X0ZOMCksCisJUElOTVVYX0RBVEEoSVJRMjNfTUFSSywJCVBPUlQ5NV9GTjApLAorCVBJTk1VWF9EQVRBKElSUTI0X01BUkssCQlQT1JUMTEyX0ZOMCksCisJUElOTVVYX0RBVEEoSVJRMjVfTUFSSywJCVBPUlQxMTlfRk4wKSwKKwlQSU5NVVhfREFUQShJUlEyNl8xMjFfTUFSSywJUE9SVDEyMV9GTjAsCU1TRUwxQ1JfMjZfMSksCisJUElOTVVYX0RBVEEoSVJRMjZfMTcyX01BUkssCVBPUlQxNzJfRk4wLAlNU0VMMUNSXzI2XzApLAorCVBJTk1VWF9EQVRBKElSUTI3XzEyMl9NQVJLLAlQT1JUMTIyX0ZOMCwJTVNFTDFDUl8yN18xKSwKKwlQSU5NVVhfREFUQShJUlEyN18xODBfTUFSSywJUE9SVDE4MF9GTjAsCU1TRUwxQ1JfMjdfMCksCisJUElOTVVYX0RBVEEoSVJRMjhfMTIzX01BUkssCVBPUlQxMjNfRk4wLAlNU0VMMUNSXzI4XzEpLAorCVBJTk1VWF9EQVRBKElSUTI4XzE4MV9NQVJLLAlQT1JUMTgxX0ZOMCwJTVNFTDFDUl8yOF8wKSwKKwlQSU5NVVhfREFUQShJUlEyOV8xMjlfTUFSSywJUE9SVDEyOV9GTjAsCU1TRUwxQ1JfMjlfMSksCisJUElOTVVYX0RBVEEoSVJRMjlfMTgyX01BUkssCVBPUlQxODJfRk4wLAlNU0VMMUNSXzI5XzApLAorCVBJTk1VWF9EQVRBKElSUTMwXzEzMF9NQVJLLAlQT1JUMTMwX0ZOMCwJTVNFTDFDUl8zMF8xKSwKKwlQSU5NVVhfREFUQShJUlEzMF8xODNfTUFSSywJUE9SVDE4M19GTjAsCU1TRUwxQ1JfMzBfMCksCisJUElOTVVYX0RBVEEoSVJRMzFfMTM4X01BUkssCVBPUlQxMzhfRk4wLAlNU0VMMUNSXzMxXzEpLAorCVBJTk1VWF9EQVRBKElSUTMxXzE4NF9NQVJLLAlQT1JUMTg0X0ZOMCwJTVNFTDFDUl8zMV8wKSwKKworCS8qIEZ1bmN0aW9uIDEgKi8KKwlQSU5NVVhfREFUQShCQklGMl9UU0NLMV9NQVJLLAkJUE9SVDBfRk4xKSwKKwlQSU5NVVhfREFUQShCQklGMl9UU1lOQzFfTUFSSywJCVBPUlQxX0ZOMSksCisJUElOTVVYX0RBVEEoQkJJRjJfVFhEMV9NQVJLLAkJUE9SVDJfRk4xKSwKKwlQSU5NVVhfREFUQShCQklGMl9SWERfTUFSSywJCVBPUlQzX0ZOMSksCisJUElOTVVYX0RBVEEoRlNJQUNLX01BUkssCQlQT1JUNF9GTjEpLAorCVBJTk1VWF9EQVRBKEZTSUFJTFJfTUFSSywJCVBPUlQ1X0ZOMSksCisJUElOTVVYX0RBVEEoRlNJQUlCVF9NQVJLLAkJUE9SVDZfRk4xKSwKKwlQSU5NVVhfREFUQShGU0lBSVNMRF9NQVJLLAkJUE9SVDdfRk4xKSwKKwlQSU5NVVhfREFUQShGU0lBT01DX01BUkssCQlQT1JUOF9GTjEpLAorCVBJTk1VWF9EQVRBKEZTSUFPTFJfTUFSSywJCVBPUlQ5X0ZOMSksCisJUElOTVVYX0RBVEEoRlNJQU9CVF9NQVJLLAkJUE9SVDEwX0ZOMSksCisJUElOTVVYX0RBVEEoRlNJQU9TTERfTUFSSywJCVBPUlQxMV9GTjEpLAorCVBJTk1VWF9EQVRBKEZNU09DS19NQVJLLAkJUE9SVDEyX0ZOMSksCisJUElOTVVYX0RBVEEoRk1TT09MUl9NQVJLLAkJUE9SVDEzX0ZOMSksCisJUElOTVVYX0RBVEEoRk1TT09CVF9NQVJLLAkJUE9SVDE0X0ZOMSksCisJUElOTVVYX0RBVEEoRk1TT1NMRF9NQVJLLAkJUE9SVDE1X0ZOMSksCisJUElOTVVYX0RBVEEoRk1TT0lMUl9NQVJLLAkJUE9SVDE2X0ZOMSksCisJUElOTVVYX0RBVEEoRk1TT0lCVF9NQVJLLAkJUE9SVDE3X0ZOMSksCisJUElOTVVYX0RBVEEoRk1TSVNMRF9NQVJLLAkJUE9SVDE4X0ZOMSksCisJUElOTVVYX0RBVEEoQTBfTUFSSywJCQlQT1JUMTlfRk4xKSwKKwlQSU5NVVhfREFUQShBMV9NQVJLLAkJCVBPUlQyMF9GTjEpLAorCVBJTk1VWF9EQVRBKEEyX01BUkssCQkJUE9SVDIxX0ZOMSksCisJUElOTVVYX0RBVEEoQTNfTUFSSywJCQlQT1JUMjJfRk4xKSwKKwlQSU5NVVhfREFUQShBNF9GT0VfTUFSSywJCVBPUlQyM19GTjEpLAorCVBJTk1VWF9EQVRBKEE1X0ZDREVfTUFSSywJCVBPUlQyNF9GTjEpLAorCVBJTk1VWF9EQVRBKEE2X01BUkssCQkJUE9SVDI1X0ZOMSksCisJUElOTVVYX0RBVEEoQTdfTUFSSywJCQlQT1JUMjZfRk4xKSwKKwlQSU5NVVhfREFUQShBOF9NQVJLLAkJCVBPUlQyN19GTjEpLAorCVBJTk1VWF9EQVRBKEE5X01BUkssCQkJUE9SVDI4X0ZOMSksCisJUElOTVVYX0RBVEEoQTEwX01BUkssCQkJUE9SVDI5X0ZOMSksCisJUElOTVVYX0RBVEEoQTExX01BUkssCQkJUE9SVDMwX0ZOMSksCisJUElOTVVYX0RBVEEoQTEyX01BUkssCQkJUE9SVDMxX0ZOMSksCisJUElOTVVYX0RBVEEoQTEzX01BUkssCQkJUE9SVDMyX0ZOMSksCisJUElOTVVYX0RBVEEoQTE0X01BUkssCQkJUE9SVDMzX0ZOMSksCisJUElOTVVYX0RBVEEoQTE1X01BUkssCQkJUE9SVDM0X0ZOMSksCisJUElOTVVYX0RBVEEoQTE2X01BUkssCQkJUE9SVDM1X0ZOMSksCisJUElOTVVYX0RBVEEoQTE3X01BUkssCQkJUE9SVDM2X0ZOMSksCisJUElOTVVYX0RBVEEoQTE4X01BUkssCQkJUE9SVDM3X0ZOMSksCisJUElOTVVYX0RBVEEoQTE5X01BUkssCQkJUE9SVDM4X0ZOMSksCisJUElOTVVYX0RBVEEoQTIwX01BUkssCQkJUE9SVDM5X0ZOMSksCisJUElOTVVYX0RBVEEoQTIxX01BUkssCQkJUE9SVDQwX0ZOMSksCisJUElOTVVYX0RBVEEoQTIyX01BUkssCQkJUE9SVDQxX0ZOMSksCisJUElOTVVYX0RBVEEoQTIzX01BUkssCQkJUE9SVDQyX0ZOMSksCisJUElOTVVYX0RBVEEoQTI0X01BUkssCQkJUE9SVDQzX0ZOMSksCisJUElOTVVYX0RBVEEoQTI1X01BUkssCQkJUE9SVDQ0X0ZOMSksCisJUElOTVVYX0RBVEEoQTI2X01BUkssCQkJUE9SVDQ1X0ZOMSksCisJUElOTVVYX0RBVEEoRDBfTkFGMF9NQVJLLAkJUE9SVDQ2X0ZOMSksCisJUElOTVVYX0RBVEEoRDFfTkFGMV9NQVJLLAkJUE9SVDQ3X0ZOMSksCisJUElOTVVYX0RBVEEoRDJfTkFGMl9NQVJLLAkJUE9SVDQ4X0ZOMSksCisJUElOTVVYX0RBVEEoRDNfTkFGM19NQVJLLAkJUE9SVDQ5X0ZOMSksCisJUElOTVVYX0RBVEEoRDRfTkFGNF9NQVJLLAkJUE9SVDUwX0ZOMSksCisJUElOTVVYX0RBVEEoRDVfTkFGNV9NQVJLLAkJUE9SVDUxX0ZOMSksCisJUElOTVVYX0RBVEEoRDZfTkFGNl9NQVJLLAkJUE9SVDUyX0ZOMSksCisJUElOTVVYX0RBVEEoRDdfTkFGN19NQVJLLAkJUE9SVDUzX0ZOMSksCisJUElOTVVYX0RBVEEoRDhfTkFGOF9NQVJLLAkJUE9SVDU0X0ZOMSksCisJUElOTVVYX0RBVEEoRDlfTkFGOV9NQVJLLAkJUE9SVDU1X0ZOMSksCisJUElOTVVYX0RBVEEoRDEwX05BRjEwX01BUkssCQlQT1JUNTZfRk4xKSwKKwlQSU5NVVhfREFUQShEMTFfTkFGMTFfTUFSSywJCVBPUlQ1N19GTjEpLAorCVBJTk1VWF9EQVRBKEQxMl9OQUYxMl9NQVJLLAkJUE9SVDU4X0ZOMSksCisJUElOTVVYX0RBVEEoRDEzX05BRjEzX01BUkssCQlQT1JUNTlfRk4xKSwKKwlQSU5NVVhfREFUQShEMTRfTkFGMTRfTUFSSywJCVBPUlQ2MF9GTjEpLAorCVBJTk1VWF9EQVRBKEQxNV9OQUYxNV9NQVJLLAkJUE9SVDYxX0ZOMSksCisJUElOTVVYX0RBVEEoQ1MwX01BUkssCQkJUE9SVDYyX0ZOMSksCisJUElOTVVYX0RBVEEoQ1MyX01BUkssCQkJUE9SVDYzX0ZOMSksCisJUElOTVVYX0RBVEEoQ1M0X01BUkssCQkJUE9SVDY0X0ZOMSksCisJUElOTVVYX0RBVEEoQ1M1QV9NQVJLLAkJCVBPUlQ2NV9GTjEpLAorCVBJTk1VWF9EQVRBKENTNUJfTUFSSywJCQlQT1JUNjZfRk4xKSwKKwlQSU5NVVhfREFUQShDUzZBX01BUkssCQkJUE9SVDY3X0ZOMSksCisJUElOTVVYX0RBVEEoRkNFMF9NQVJLLAkJCVBPUlQ2OF9GTjEpLAorCVBJTk1VWF9EQVRBKFJEX0ZTQ19NQVJLLAkJUE9SVDY5X0ZOMSksCisJUElOTVVYX0RBVEEoV0UwX0ZXRV9NQVJLLAkJUE9SVDcwX0ZOMSksCisJUElOTVVYX0RBVEEoV0UxX01BUkssCQkJUE9SVDcxX0ZOMSksCisJUElOTVVYX0RBVEEoQ0tPX01BUkssCQkJUE9SVDcyX0ZOMSksCisJUElOTVVYX0RBVEEoRlJCX01BUkssCQkJUE9SVDczX0ZOMSksCisJUElOTVVYX0RBVEEoV0FJVF9NQVJLLAkJCVBPUlQ3NF9GTjEpLAorCVBJTk1VWF9EQVRBKFJEV1JfTUFSSywJCQlQT1JUNzVfRk4xKSwKKwlQSU5NVVhfREFUQShNRU1DX0FEMF9NQVJLLAkJUE9SVDc2X0ZOMSksCisJUElOTVVYX0RBVEEoTUVNQ19BRDFfTUFSSywJCVBPUlQ3N19GTjEpLAorCVBJTk1VWF9EQVRBKE1FTUNfQUQyX01BUkssCQlQT1JUNzhfRk4xKSwKKwlQSU5NVVhfREFUQShNRU1DX0FEM19NQVJLLAkJUE9SVDc5X0ZOMSksCisJUElOTVVYX0RBVEEoTUVNQ19BRDRfTUFSSywJCVBPUlQ4MF9GTjEpLAorCVBJTk1VWF9EQVRBKE1FTUNfQUQ1X01BUkssCQlQT1JUODFfRk4xKSwKKwlQSU5NVVhfREFUQShNRU1DX0FENl9NQVJLLAkJUE9SVDgyX0ZOMSksCisJUElOTVVYX0RBVEEoTUVNQ19BRDdfTUFSSywJCVBPUlQ4M19GTjEpLAorCVBJTk1VWF9EQVRBKE1FTUNfQUQ4X01BUkssCQlQT1JUODRfRk4xKSwKKwlQSU5NVVhfREFUQShNRU1DX0FEOV9NQVJLLAkJUE9SVDg1X0ZOMSksCisJUElOTVVYX0RBVEEoTUVNQ19BRDEwX01BUkssCQlQT1JUODZfRk4xKSwKKwlQSU5NVVhfREFUQShNRU1DX0FEMTFfTUFSSywJCVBPUlQ4N19GTjEpLAorCVBJTk1VWF9EQVRBKE1FTUNfQUQxMl9NQVJLLAkJUE9SVDg4X0ZOMSksCisJUElOTVVYX0RBVEEoTUVNQ19BRDEzX01BUkssCQlQT1JUODlfRk4xKSwKKwlQSU5NVVhfREFUQShNRU1DX0FEMTRfTUFSSywJCVBPUlQ5MF9GTjEpLAorCVBJTk1VWF9EQVRBKE1FTUNfQUQxNV9NQVJLLAkJUE9SVDkxX0ZOMSksCisJUElOTVVYX0RBVEEoTUVNQ19DUzBfTUFSSywJCVBPUlQ5Ml9GTjEpLAorCVBJTk1VWF9EQVRBKE1FTUNfQlVTQ0xLX01FTUNfQTBfTUFSSywJUE9SVDkzX0ZOMSksCisJUElOTVVYX0RBVEEoTUVNQ19DUzFfTUVNQ19BMV9NQVJLLAlQT1JUOTRfRk4xKSwKKwlQSU5NVVhfREFUQShNRU1DX0FEVl9NRU1DX0RSRVEwX01BUkssCVBPUlQ5NV9GTjEpLAorCVBJTk1VWF9EQVRBKE1FTUNfV0FJVF9NRU1DX0RSRVExX01BUkssCVBPUlQ5Nl9GTjEpLAorCVBJTk1VWF9EQVRBKE1FTUNfTk9FX01BUkssCQlQT1JUOTdfRk4xKSwKKwlQSU5NVVhfREFUQShNRU1DX05XRV9NQVJLLAkJUE9SVDk4X0ZOMSksCisJUElOTVVYX0RBVEEoTUVNQ19JTlRfTUFSSywJCVBPUlQ5OV9GTjEpLAorCVBJTk1VWF9EQVRBKFZJT19WRF9NQVJLLAkJUE9SVDEwMF9GTjEpLAorCVBJTk1VWF9EQVRBKFZJT19IRF9NQVJLLAkJUE9SVDEwMV9GTjEpLAorCVBJTk1VWF9EQVRBKFZJT19EMF9NQVJLLAkJUE9SVDEwMl9GTjEpLAorCVBJTk1VWF9EQVRBKFZJT19EMV9NQVJLLAkJUE9SVDEwM19GTjEpLAorCVBJTk1VWF9EQVRBKFZJT19EMl9NQVJLLAkJUE9SVDEwNF9GTjEpLAorCVBJTk1VWF9EQVRBKFZJT19EM19NQVJLLAkJUE9SVDEwNV9GTjEpLAorCVBJTk1VWF9EQVRBKFZJT19ENF9NQVJLLAkJUE9SVDEwNl9GTjEpLAorCVBJTk1VWF9EQVRBKFZJT19ENV9NQVJLLAkJUE9SVDEwN19GTjEpLAorCVBJTk1VWF9EQVRBKFZJT19ENl9NQVJLLAkJUE9SVDEwOF9GTjEpLAorCVBJTk1VWF9EQVRBKFZJT19EN19NQVJLLAkJUE9SVDEwOV9GTjEpLAorCVBJTk1VWF9EQVRBKFZJT19EOF9NQVJLLAkJUE9SVDExMF9GTjEpLAorCVBJTk1VWF9EQVRBKFZJT19EOV9NQVJLLAkJUE9SVDExMV9GTjEpLAorCVBJTk1VWF9EQVRBKFZJT19EMTBfTUFSSywJCVBPUlQxMTJfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fRDExX01BUkssCQlQT1JUMTEzX0ZOMSksCisJUElOTVVYX0RBVEEoVklPX0QxMl9NQVJLLAkJUE9SVDExNF9GTjEpLAorCVBJTk1VWF9EQVRBKFZJT19EMTNfTUFSSywJCVBPUlQxMTVfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fRDE0X01BUkssCQlQT1JUMTE2X0ZOMSksCisJUElOTVVYX0RBVEEoVklPX0QxNV9NQVJLLAkJUE9SVDExN19GTjEpLAorCVBJTk1VWF9EQVRBKFZJT19DTEtfTUFSSywJCVBPUlQxMThfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fRklFTERfTUFSSywJCVBPUlQxMTlfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fQ0tPX01BUkssCQlQT1JUMTIwX0ZOMSksCisJUElOTVVYX0RBVEEoTENERDBfTUFSSywJCQlQT1JUMTIxX0ZOMSksCisJUElOTVVYX0RBVEEoTENERDFfTUFSSywJCQlQT1JUMTIyX0ZOMSksCisJUElOTVVYX0RBVEEoTENERDJfTUFSSywJCQlQT1JUMTIzX0ZOMSksCisJUElOTVVYX0RBVEEoTENERDNfTUFSSywJCQlQT1JUMTI0X0ZOMSksCisJUElOTVVYX0RBVEEoTENERDRfTUFSSywJCQlQT1JUMTI1X0ZOMSksCisJUElOTVVYX0RBVEEoTENERDVfTUFSSywJCQlQT1JUMTI2X0ZOMSksCisJUElOTVVYX0RBVEEoTENERDZfTUFSSywJCQlQT1JUMTI3X0ZOMSksCisJUElOTVVYX0RBVEEoTENERDdfTUFSSywJCQlQT1JUMTI4X0ZOMSksCisJUElOTVVYX0RBVEEoTENERDhfTUFSSywJCQlQT1JUMTI5X0ZOMSksCisJUElOTVVYX0RBVEEoTENERDlfTUFSSywJCQlQT1JUMTMwX0ZOMSksCisJUElOTVVYX0RBVEEoTENERDEwX01BUkssCQlQT1JUMTMxX0ZOMSksCisJUElOTVVYX0RBVEEoTENERDExX01BUkssCQlQT1JUMTMyX0ZOMSksCisJUElOTVVYX0RBVEEoTENERDEyX01BUkssCQlQT1JUMTMzX0ZOMSksCisJUElOTVVYX0RBVEEoTENERDEzX01BUkssCQlQT1JUMTM0X0ZOMSksCisJUElOTVVYX0RBVEEoTENERDE0X01BUkssCQlQT1JUMTM1X0ZOMSksCisJUElOTVVYX0RBVEEoTENERDE1X01BUkssCQlQT1JUMTM2X0ZOMSksCisJUElOTVVYX0RBVEEoTENERDE2X01BUkssCQlQT1JUMTM3X0ZOMSksCisJUElOTVVYX0RBVEEoTENERDE3X01BUkssCQlQT1JUMTM4X0ZOMSksCisJUElOTVVYX0RBVEEoTENERDE4X01BUkssCQlQT1JUMTM5X0ZOMSksCisJUElOTVVYX0RBVEEoTENERDE5X01BUkssCQlQT1JUMTQwX0ZOMSksCisJUElOTVVYX0RBVEEoTENERDIwX01BUkssCQlQT1JUMTQxX0ZOMSksCisJUElOTVVYX0RBVEEoTENERDIxX01BUkssCQlQT1JUMTQyX0ZOMSksCisJUElOTVVYX0RBVEEoTENERDIyX01BUkssCQlQT1JUMTQzX0ZOMSksCisJUElOTVVYX0RBVEEoTENERDIzX01BUkssCQlQT1JUMTQ0X0ZOMSksCisJUElOTVVYX0RBVEEoTENESFNZTl9NQVJLLAkJUE9SVDE0NV9GTjEpLAorCVBJTk1VWF9EQVRBKExDRFZTWU5fTUFSSywJCVBPUlQxNDZfRk4xKSwKKwlQSU5NVVhfREFUQShMQ0REQ0tfTUFSSywJCVBPUlQxNDdfRk4xKSwKKwlQSU5NVVhfREFUQShMQ0RSRF9NQVJLLAkJCVBPUlQxNDhfRk4xKSwKKwlQSU5NVVhfREFUQShMQ0RESVNQX01BUkssCQlQT1JUMTQ5X0ZOMSksCisJUElOTVVYX0RBVEEoTENETENMS19NQVJLLAkJUE9SVDE1MF9GTjEpLAorCVBJTk1VWF9EQVRBKExDRERPTl9NQVJLLAkJUE9SVDE1MV9GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZBMF9UWERfTUFSSywJCVBPUlQxNTJfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQTBfUlhEX01BUkssCQlQT1JUMTUzX0ZOMSksCisJUElOTVVYX0RBVEEoU0NJRkExX1RYRF9NQVJLLAkJUE9SVDE1NF9GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZBMV9SWERfTUFSSywJCVBPUlQxNTVfRk4xKSwKKwlQSU5NVVhfREFUQShUU19TUFNZTkMxX01BUkssCQlQT1JUMTU2X0ZOMSksCisJUElOTVVYX0RBVEEoVFNfU0RBVDFfTUFSSywJCVBPUlQxNTdfRk4xKSwKKwlQSU5NVVhfREFUQShUU19TREVOMV9NQVJLLAkJUE9SVDE1OF9GTjEpLAorCVBJTk1VWF9EQVRBKFRTX1NDSzFfTUFSSywJCVBPUlQxNTlfRk4xKSwKKwlQSU5NVVhfREFUQShUUFUwVE8wX01BUkssCQlQT1JUMTYwX0ZOMSksCisJUElOTVVYX0RBVEEoVFBVMFRPMV9NQVJLLAkJUE9SVDE2MV9GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZCX1NDS19NQVJLLAkJUE9SVDE2Ml9GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZCX1JUU19NQVJLLAkJUE9SVDE2M19GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZCX0NUU19NQVJLLAkJUE9SVDE2NF9GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZCX1RYRF9NQVJLLAkJUE9SVDE2NV9GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZCX1JYRF9NQVJLLAkJUE9SVDE2Nl9GTjEpLAorCVBJTk1VWF9EQVRBKFZCVVMwXzBfTUFSSywJCVBPUlQxNjdfRk4xKSwKKwlQSU5NVVhfREFUQShWQlVTMF8xX01BUkssCQlQT1JUMTY4X0ZOMSksCisJUElOTVVYX0RBVEEoSERNSV9IUERfTUFSSywJCVBPUlQxNjlfRk4xKSwKKwlQSU5NVVhfREFUQShIRE1JX0NFQ19NQVJLLAkJUE9SVDE3MF9GTjEpLAorCVBJTk1VWF9EQVRBKFNESElDTEswX01BUkssCQlQT1JUMTcxX0ZOMSksCisJUElOTVVYX0RBVEEoU0RISUNEMF9NQVJLLAkJUE9SVDE3Ml9GTjEpLAorCVBJTk1VWF9EQVRBKFNESElEMF8wX01BUkssCQlQT1JUMTczX0ZOMSksCisJUElOTVVYX0RBVEEoU0RISUQwXzFfTUFSSywJCVBPUlQxNzRfRk4xKSwKKwlQSU5NVVhfREFUQShTREhJRDBfMl9NQVJLLAkJUE9SVDE3NV9GTjEpLAorCVBJTk1VWF9EQVRBKFNESElEMF8zX01BUkssCQlQT1JUMTc2X0ZOMSksCisJUElOTVVYX0RBVEEoU0RISUNNRDBfTUFSSywJCVBPUlQxNzdfRk4xKSwKKwlQSU5NVVhfREFUQShTREhJV1AwX01BUkssCQlQT1JUMTc4X0ZOMSksCisJUElOTVVYX0RBVEEoU0RISUNMSzFfTUFSSywJCVBPUlQxNzlfRk4xKSwKKwlQSU5NVVhfREFUQShTREhJRDFfMF9NQVJLLAkJUE9SVDE4MF9GTjEpLAorCVBJTk1VWF9EQVRBKFNESElEMV8xX01BUkssCQlQT1JUMTgxX0ZOMSksCisJUElOTVVYX0RBVEEoU0RISUQxXzJfTUFSSywJCVBPUlQxODJfRk4xKSwKKwlQSU5NVVhfREFUQShTREhJRDFfM19NQVJLLAkJUE9SVDE4M19GTjEpLAorCVBJTk1VWF9EQVRBKFNESElDTUQxX01BUkssCQlQT1JUMTg0X0ZOMSksCisJUElOTVVYX0RBVEEoU0RISUNMSzJfTUFSSywJCVBPUlQxODVfRk4xKSwKKwlQSU5NVVhfREFUQShTREhJRDJfMF9NQVJLLAkJUE9SVDE4Nl9GTjEpLAorCVBJTk1VWF9EQVRBKFNESElEMl8xX01BUkssCQlQT1JUMTg3X0ZOMSksCisJUElOTVVYX0RBVEEoU0RISUQyXzJfTUFSSywJCVBPUlQxODhfRk4xKSwKKwlQSU5NVVhfREFUQShTREhJRDJfM19NQVJLLAkJUE9SVDE4OV9GTjEpLAorCVBJTk1VWF9EQVRBKFNESElDTUQyX01BUkssCQlQT1JUMTkwX0ZOMSksCisKKwkvKiBGdW5jdGlvbiAyICovCisJUElOTVVYX0RBVEEoRlNJQkNLX01BUkssCQlQT1JUNF9GTjIpLAorCVBJTk1VWF9EQVRBKFNDSUZBNF9SWERfTUFSSywJCVBPUlQ1X0ZOMiksCisJUElOTVVYX0RBVEEoU0NJRkE0X1RYRF9NQVJLLAkJUE9SVDZfRk4yKSwKKwlQSU5NVVhfREFUQShTQ0lGQTVfUlhEX01BUkssCQlQT1JUOF9GTjIpLAorCVBJTk1VWF9EQVRBKEZTSUFTUERJRl8xMV9NQVJLLAkJUE9SVDExX0ZOMiksCisJUElOTVVYX0RBVEEoU0NJRkE1X1RYRF9NQVJLLAkJUE9SVDEyX0ZOMiksCisJUElOTVVYX0RBVEEoRk1TSU9MUl9NQVJLLAkJUE9SVDEzX0ZOMiksCisJUElOTVVYX0RBVEEoRk1TSU9CVF9NQVJLLAkJUE9SVDE0X0ZOMiksCisJUElOTVVYX0RBVEEoRlNJQVNQRElGXzE1X01BUkssCQlQT1JUMTVfRk4yKSwKKwlQSU5NVVhfREFUQShGTVNJSUxSX01BUkssCQlQT1JUMTZfRk4yKSwKKwlQSU5NVVhfREFUQShGTVNJSUJUX01BUkssCQlQT1JUMTdfRk4yKSwKKwlQSU5NVVhfREFUQShCU19NQVJLLAkJCVBPUlQxOV9GTjIpLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9UU1lOQ19NQVJLLAkJUE9SVDM2X0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1RTQ0tfTUFSSywJCVBPUlQzN19GTjIpLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9SWERfTUFSSywJCVBPUlQzOF9GTjIpLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9SU0NLX01BUkssCQlQT1JUMzlfRk4yKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfUlNZTkNfTUFSSywJCVBPUlQ0MF9GTjIpLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9NQ0swX01BUkssCQlQT1JUNDFfRk4yKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfTUNLMV9NQVJLLAkJUE9SVDQyX0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1NTMV9NQVJLLAkJUE9SVDQzX0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1NTMl9NQVJLLAkJUE9SVDQ0X0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1RYRF9NQVJLLAkJUE9SVDQ1X0ZOMiksCisJUElOTVVYX0RBVEEoRk1TSUNLX01BUkssCQlQT1JUNjVfRk4yKSwKKwlQSU5NVVhfREFUQShGQ0UxX01BUkssCQkJUE9SVDY2X0ZOMiksCisJUElOTVVYX0RBVEEoQkJJRjFfUlhEX01BUkssCQlQT1JUNzZfRk4yKSwKKwlQSU5NVVhfREFUQShCQklGMV9UU1lOQ19NQVJLLAkJUE9SVDc3X0ZOMiksCisJUElOTVVYX0RBVEEoQkJJRjFfVFNDS19NQVJLLAkJUE9SVDc4X0ZOMiksCisJUElOTVVYX0RBVEEoQkJJRjFfVFhEX01BUkssCQlQT1JUNzlfRk4yKSwKKwlQSU5NVVhfREFUQShCQklGMV9SU0NLX01BUkssCQlQT1JUODBfRk4yKSwKKwlQSU5NVVhfREFUQShCQklGMV9SU1lOQ19NQVJLLAkJUE9SVDgxX0ZOMiksCisJUElOTVVYX0RBVEEoQkJJRjFfRkxPV19NQVJLLAkJUE9SVDgyX0ZOMiksCisJUElOTVVYX0RBVEEoQkJfUlhfRkxPV19OX01BUkssCQlQT1JUODNfRk4yKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfUlNDS19NQVJLLAkJUE9SVDg0X0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YxX1JTWU5DX01BUkssCQlQT1JUODVfRk4yKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfTUNLMF9NQVJLLAkJUE9SVDg2X0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YxX01DSzFfTUFSSywJCVBPUlQ4N19GTjIpLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9UU0NLXzg4X01BUkssCVBPUlQ4OF9GTjIsIE1TRUw0Q1JfMTBfMSksCisJUElOTVVYX0RBVEEoTVNJT0YxX1RTWU5DXzg5X01BUkssCVBPUlQ4OV9GTjIsIE1TRUw0Q1JfMTBfMSksCisJUElOTVVYX0RBVEEoTVNJT0YxX1RYRF85MF9NQVJLLAkJUE9SVDkwX0ZOMiwgTVNFTDRDUl8xMF8xKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfUlhEXzkxX01BUkssCQlQT1JUOTFfRk4yLCBNU0VMNENSXzEwXzEpLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9TUzFfOTJfTUFSSywJCVBPUlQ5Ml9GTjIsIE1TRUw0Q1JfMTBfMSksCisJUElOTVVYX0RBVEEoTVNJT0YxX1NTMl85M19NQVJLLAkJUE9SVDkzX0ZOMiwgTVNFTDRDUl8xMF8xKSwKKwlQSU5NVVhfREFUQShTQ0lGQTJfQ1RTMV9NQVJLLAkJUE9SVDk0X0ZOMiksCisJUElOTVVYX0RBVEEoU0NJRkEyX1JUUzFfTUFSSywJCVBPUlQ5NV9GTjIpLAorCVBJTk1VWF9EQVRBKFNDSUZBMl9UWEQxX01BUkssCQlQT1JUOTZfRk4yKSwKKwlQSU5NVVhfREFUQShTQ0lGQTJfUlhEMV9NQVJLLAkJUE9SVDk3X0ZOMiksCisJUElOTVVYX0RBVEEoU0NJRkEyX1NDSzFfTUFSSywJCVBPUlQ5OF9GTjIpLAorCVBJTk1VWF9EQVRBKEkyQ19TQ0wyX01BUkssCQlQT1JUMTEwX0ZOMiksCisJUElOTVVYX0RBVEEoSTJDX1NEQTJfTUFSSywJCVBPUlQxMTFfRk4yKSwKKwlQSU5NVVhfREFUQShJMkNfU0NMM19NQVJLLAkJUE9SVDExNF9GTjIsIE1TRUw0Q1JfMTZfMSksCisJUElOTVVYX0RBVEEoSTJDX1NEQTNfTUFSSywJCVBPUlQxMTVfRk4yLCBNU0VMNENSXzE2XzEpLAorCVBJTk1VWF9EQVRBKEkyQ19TQ0w0X01BUkssCQlQT1JUMTE2X0ZOMiwgTVNFTDRDUl8xN18xKSwKKwlQSU5NVVhfREFUQShJMkNfU0RBNF9NQVJLLAkJUE9SVDExN19GTjIsIE1TRUw0Q1JfMTdfMSksCisJUElOTVVYX0RBVEEoTVNJT0YyX1JTQ0tfTUFSSywJCVBPUlQxMzRfRk4yKSwKKwlQSU5NVVhfREFUQShNU0lPRjJfUlNZTkNfTUFSSywJCVBPUlQxMzVfRk4yKSwKKwlQSU5NVVhfREFUQShNU0lPRjJfTUNLMF9NQVJLLAkJUE9SVDEzNl9GTjIpLAorCVBJTk1VWF9EQVRBKE1TSU9GMl9NQ0sxX01BUkssCQlQT1JUMTM3X0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YyX1NTMV9NQVJLLAkJUE9SVDEzOF9GTjIpLAorCVBJTk1VWF9EQVRBKE1TSU9GMl9TUzJfTUFSSywJCVBPUlQxMzlfRk4yKSwKKwlQSU5NVVhfREFUQShTQ0lGQTNfQ1RTXzE0MF9NQVJLLAlQT1JUMTQwX0ZOMiwgTVNFTDNDUl85XzEpLAorCVBJTk1VWF9EQVRBKFNDSUZBM19SVFNfMTQxX01BUkssCVBPUlQxNDFfRk4yKSwKKwlQSU5NVVhfREFUQShTQ0lGQTNfU0NLX01BUkssCQlQT1JUMTQyX0ZOMiksCisJUElOTVVYX0RBVEEoU0NJRkEzX1RYRF9NQVJLLAkJUE9SVDE0M19GTjIpLAorCVBJTk1VWF9EQVRBKFNDSUZBM19SWERfTUFSSywJCVBPUlQxNDRfRk4yKSwKKwlQSU5NVVhfREFUQShNU0lPRjJfVFNZTkNfTUFSSywJCVBPUlQxNDhfRk4yKSwKKwlQSU5NVVhfREFUQShNU0lPRjJfVFNDS19NQVJLLAkJUE9SVDE0OV9GTjIpLAorCVBJTk1VWF9EQVRBKE1TSU9GMl9SWERfTUFSSywJCVBPUlQxNTBfRk4yKSwKKwlQSU5NVVhfREFUQShNU0lPRjJfVFhEX01BUkssCQlQT1JUMTUxX0ZOMiksCisJUElOTVVYX0RBVEEoU0NJRkEwX1NDS19NQVJLLAkJUE9SVDE1Nl9GTjIpLAorCVBJTk1VWF9EQVRBKFNDSUZBMF9SVFNfTUFSSywJCVBPUlQxNTdfRk4yKSwKKwlQSU5NVVhfREFUQShTQ0lGQTBfQ1RTX01BUkssCQlQT1JUMTU4X0ZOMiksCisJUElOTVVYX0RBVEEoU0NJRkExX1NDS19NQVJLLAkJUE9SVDE1OV9GTjIpLAorCVBJTk1VWF9EQVRBKFNDSUZBMV9SVFNfTUFSSywJCVBPUlQxNjBfRk4yKSwKKwlQSU5NVVhfREFUQShTQ0lGQTFfQ1RTX01BUkssCQlQT1JUMTYxX0ZOMiksCisKKwkvKiBGdW5jdGlvbiAzICovCisJUElOTVVYX0RBVEEoVklPX0NLTzFfTUFSSywJCVBPUlQxNl9GTjMpLAorCVBJTk1VWF9EQVRBKFZJT19DS08yX01BUkssCQlQT1JUMTdfRk4zKSwKKwlQSU5NVVhfREFUQShJRElOXzFfMThfTUFSSywJCVBPUlQxOF9GTjMsIE1TRUw0Q1JfMTRfMSksCisJUElOTVVYX0RBVEEoTVNJT0YxX1RTQ0tfMzlfTUFSSywJUE9SVDM5X0ZOMywgTVNFTDRDUl8xMF8wKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfVFNZTkNfNDBfTUFSSywJUE9SVDQwX0ZOMywgTVNFTDRDUl8xMF8wKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfVFhEXzQxX01BUkssCQlQT1JUNDFfRk4zLCBNU0VMNENSXzEwXzApLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9SWERfNDJfTUFSSywJCVBPUlQ0Ml9GTjMsIE1TRUw0Q1JfMTBfMCksCisJUElOTVVYX0RBVEEoTVNJT0YxX1NTMV80M19NQVJLLAkJUE9SVDQzX0ZOMywgTVNFTDRDUl8xMF8wKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfU1MyXzQ0X01BUkssCQlQT1JUNDRfRk4zLCBNU0VMNENSXzEwXzApLAorCVBJTk1VWF9EQVRBKE1NQ0QxXzBfTUFSSywJCVBPUlQ1NF9GTjMsIE1TRUw0Q1JfMTVfMSksCisJUElOTVVYX0RBVEEoTU1DRDFfMV9NQVJLLAkJUE9SVDU1X0ZOMywgTVNFTDRDUl8xNV8xKSwKKwlQSU5NVVhfREFUQShNTUNEMV8yX01BUkssCQlQT1JUNTZfRk4zLCBNU0VMNENSXzE1XzEpLAorCVBJTk1VWF9EQVRBKE1NQ0QxXzNfTUFSSywJCVBPUlQ1N19GTjMsIE1TRUw0Q1JfMTVfMSksCisJUElOTVVYX0RBVEEoTU1DRDFfNF9NQVJLLAkJUE9SVDU4X0ZOMywgTVNFTDRDUl8xNV8xKSwKKwlQSU5NVVhfREFUQShNTUNEMV81X01BUkssCQlQT1JUNTlfRk4zLCBNU0VMNENSXzE1XzEpLAorCVBJTk1VWF9EQVRBKE1NQ0QxXzZfTUFSSywJCVBPUlQ2MF9GTjMsIE1TRUw0Q1JfMTVfMSksCisJUElOTVVYX0RBVEEoTU1DRDFfN19NQVJLLAkJUE9SVDYxX0ZOMywgTVNFTDRDUl8xNV8xKSwKKwlQSU5NVVhfREFUQShWSU5UX0lfTUFSSywJCVBPUlQ2NV9GTjMpLAorCVBJTk1VWF9EQVRBKE1NQ0NMSzFfTUFSSywJCVBPUlQ2Nl9GTjMsIE1TRUw0Q1JfMTVfMSksCisJUElOTVVYX0RBVEEoTU1DQ01EMV9NQVJLLAkJUE9SVDY3X0ZOMywgTVNFTDRDUl8xNV8xKSwKKwlQSU5NVVhfREFUQShUUFUwVE8yXzkzX01BUkssCQlQT1JUOTNfRk4zKSwKKwlQSU5NVVhfREFUQShUUFUwVE8yXzk5X01BUkssCQlQT1JUOTlfRk4zKSwKKwlQSU5NVVhfREFUQShUUFUwVE8zX01BUkssCQlQT1JUMTEyX0ZOMyksCisJUElOTVVYX0RBVEEoSURJTl8wX01BUkssCQlQT1JUMTEzX0ZOMyksCisJUElOTVVYX0RBVEEoRVhUTFBfMF9NQVJLLAkJUE9SVDExNF9GTjMpLAorCVBJTk1VWF9EQVRBKE9WQ04yXzBfTUFSSywJCVBPUlQxMTVfRk4zKSwKKwlQSU5NVVhfREFUQShQV0VOXzBfTUFSSywJCVBPUlQxMTZfRk4zKSwKKwlQSU5NVVhfREFUQShPVkNOXzBfTUFSSywJCVBPUlQxMTdfRk4zKSwKKwlQSU5NVVhfREFUQShLRVlPVVQ3X01BUkssCQlQT1JUMTIxX0ZOMyksCisJUElOTVVYX0RBVEEoS0VZT1VUNl9NQVJLLAkJUE9SVDEyMl9GTjMpLAorCVBJTk1VWF9EQVRBKEtFWU9VVDVfTUFSSywJCVBPUlQxMjNfRk4zKSwKKwlQSU5NVVhfREFUQShLRVlPVVQ0X01BUkssCQlQT1JUMTI0X0ZOMyksCisJUElOTVVYX0RBVEEoS0VZT1VUM19NQVJLLAkJUE9SVDEyNV9GTjMpLAorCVBJTk1VWF9EQVRBKEtFWU9VVDJfTUFSSywJCVBPUlQxMjZfRk4zKSwKKwlQSU5NVVhfREFUQShLRVlPVVQxX01BUkssCQlQT1JUMTI3X0ZOMyksCisJUElOTVVYX0RBVEEoS0VZT1VUMF9NQVJLLAkJUE9SVDEyOF9GTjMpLAorCVBJTk1VWF9EQVRBKEtFWUlON19NQVJLLAkJUE9SVDEyOV9GTjMpLAorCVBJTk1VWF9EQVRBKEtFWUlONl9NQVJLLAkJUE9SVDEzMF9GTjMpLAorCVBJTk1VWF9EQVRBKEtFWUlONV9NQVJLLAkJUE9SVDEzMV9GTjMpLAorCVBJTk1VWF9EQVRBKEtFWUlONF9NQVJLLAkJUE9SVDEzMl9GTjMpLAorCVBJTk1VWF9EQVRBKEtFWUlOM18xMzNfTUFSSywJCVBPUlQxMzNfRk4zLCBNU0VMNENSXzE4XzApLAorCVBJTk1VWF9EQVRBKEtFWUlOMl8xMzRfTUFSSywJCVBPUlQxMzRfRk4zLCBNU0VMNENSXzE4XzApLAorCVBJTk1VWF9EQVRBKEtFWUlOMV8xMzVfTUFSSywJCVBPUlQxMzVfRk4zLCBNU0VMNENSXzE4XzApLAorCVBJTk1VWF9EQVRBKEtFWUlOMF8xMzZfTUFSSywJCVBPUlQxMzZfRk4zLCBNU0VMNENSXzE4XzApLAorCVBJTk1VWF9EQVRBKFRTX1NQU1lOQzJfTUFSSywJCVBPUlQxMzdfRk4zKSwKKwlQSU5NVVhfREFUQShJUk9VVF8xMzlfTUFSSywJCVBPUlQxMzlfRk4zKSwKKwlQSU5NVVhfREFUQShJUkRBX09VVF9NQVJLLAkJUE9SVDE0MF9GTjMpLAorCVBJTk1VWF9EQVRBKElSREFfSU5fTUFSSywJCVBPUlQxNDFfRk4zKSwKKwlQSU5NVVhfREFUQShJUkRBX0ZJUlNFTF9NQVJLLAkJUE9SVDE0Ml9GTjMpLAorCVBJTk1VWF9EQVRBKFRTX1NEQVQyX01BUkssCQlQT1JUMTQ1X0ZOMyksCisJUElOTVVYX0RBVEEoVFNfU0RFTjJfTUFSSywJCVBPUlQxNDZfRk4zKSwKKwlQSU5NVVhfREFUQShUU19TQ0syX01BUkssCQlQT1JUMTQ3X0ZOMyksCisKKwkvKiBGdW5jdGlvbiA0ICovCisJUElOTVVYX0RBVEEoU0NJRkEzX0NUU180M19NQVJLLAlQT1JUNDNfRk40LCBNU0VMM0NSXzlfMCksCisJUElOTVVYX0RBVEEoU0NJRkEzX1JUU180NF9NQVJLLAlQT1JUNDRfRk40KSwKKwlQSU5NVVhfREFUQShHUF9SWF9GTEFHX01BUkssCVBPUlQ3Nl9GTjQpLAorCVBJTk1VWF9EQVRBKEdQX1JYX0RBVEFfTUFSSywJUE9SVDc3X0ZONCksCisJUElOTVVYX0RBVEEoR1BfVFhfUkVBRFlfTUFSSywJUE9SVDc4X0ZONCksCisJUElOTVVYX0RBVEEoR1BfUlhfV0FLRV9NQVJLLAlQT1JUNzlfRk40KSwKKwlQSU5NVVhfREFUQShNUF9UWF9GTEFHX01BUkssCVBPUlQ4MF9GTjQpLAorCVBJTk1VWF9EQVRBKE1QX1RYX0RBVEFfTUFSSywJUE9SVDgxX0ZONCksCisJUElOTVVYX0RBVEEoTVBfUlhfUkVBRFlfTUFSSywJUE9SVDgyX0ZONCksCisJUElOTVVYX0RBVEEoTVBfVFhfV0FLRV9NQVJLLAlQT1JUODNfRk40KSwKKwlQSU5NVVhfREFUQShNTUNEMF8wX01BUkssCVBPUlQ4NF9GTjQsIE1TRUw0Q1JfMTVfMCksCisJUElOTVVYX0RBVEEoTU1DRDBfMV9NQVJLLAlQT1JUODVfRk40LCBNU0VMNENSXzE1XzApLAorCVBJTk1VWF9EQVRBKE1NQ0QwXzJfTUFSSywJUE9SVDg2X0ZONCwgTVNFTDRDUl8xNV8wKSwKKwlQSU5NVVhfREFUQShNTUNEMF8zX01BUkssCVBPUlQ4N19GTjQsIE1TRUw0Q1JfMTVfMCksCisJUElOTVVYX0RBVEEoTU1DRDBfNF9NQVJLLAlQT1JUODhfRk40LCBNU0VMNENSXzE1XzApLAorCVBJTk1VWF9EQVRBKE1NQ0QwXzVfTUFSSywJUE9SVDg5X0ZONCwgTVNFTDRDUl8xNV8wKSwKKwlQSU5NVVhfREFUQShNTUNEMF82X01BUkssCVBPUlQ5MF9GTjQsIE1TRUw0Q1JfMTVfMCksCisJUElOTVVYX0RBVEEoTU1DRDBfN19NQVJLLAlQT1JUOTFfRk40LCBNU0VMNENSXzE1XzApLAorCVBJTk1VWF9EQVRBKE1NQ0NNRDBfTUFSSywJUE9SVDkyX0ZONCwgTVNFTDRDUl8xNV8wKSwKKwlQSU5NVVhfREFUQShTSU1fUlNUX01BUkssCVBPUlQ5NF9GTjQpLAorCVBJTk1VWF9EQVRBKFNJTV9DTEtfTUFSSywJUE9SVDk1X0ZONCksCisJUElOTVVYX0RBVEEoU0lNX0RfTUFSSywJCVBPUlQ5OF9GTjQpLAorCVBJTk1VWF9EQVRBKE1NQ0NMSzBfTUFSSywJUE9SVDk5X0ZONCwgTVNFTDRDUl8xNV8wKSwKKwlQSU5NVVhfREFUQShJRElOXzFfMTEzX01BUkssCVBPUlQxMTNfRk40LCBNU0VMNENSXzE0XzApLAorCVBJTk1VWF9EQVRBKE9WQ05fMV8xMTRfTUFSSywJUE9SVDExNF9GTjQsIE1TRUw0Q1JfMTRfMCksCisJUElOTVVYX0RBVEEoUFdFTl8xXzExNV9NQVJLLAlQT1JUMTE1X0ZONCksCisJUElOTVVYX0RBVEEoRVhUTFBfMV9NQVJLLAlQT1JUMTE2X0ZONCksCisJUElOTVVYX0RBVEEoT1ZDTjJfMV9NQVJLLAlQT1JUMTE3X0ZONCksCisJUElOTVVYX0RBVEEoS0VZSU4wXzEyMV9NQVJLLAlQT1JUMTIxX0ZONCwgTVNFTDRDUl8xOF8xKSwKKwlQSU5NVVhfREFUQShLRVlJTjFfMTIyX01BUkssCVBPUlQxMjJfRk40LCBNU0VMNENSXzE4XzEpLAorCVBJTk1VWF9EQVRBKEtFWUlOMl8xMjNfTUFSSywJUE9SVDEyM19GTjQsIE1TRUw0Q1JfMThfMSksCisJUElOTVVYX0RBVEEoS0VZSU4zXzEyNF9NQVJLLAlQT1JUMTI0X0ZONCwgTVNFTDRDUl8xOF8xKSwKKwlQSU5NVVhfREFUQShQV0VOXzFfMTM4X01BUkssCVBPUlQxMzhfRk40KSwKKwlQSU5NVVhfREFUQShJUk9VVF8xNDBfTUFSSywJUE9SVDE0MF9GTjQpLAorCVBJTk1VWF9EQVRBKExDRENTX01BUkssCQlQT1JUMTQ1X0ZONCksCisJUElOTVVYX0RBVEEoTENEV1JfTUFSSywJCVBPUlQxNDdfRk40KSwKKwlQSU5NVVhfREFUQShMQ0RSU19NQVJLLAkJUE9SVDE0OV9GTjQpLAorCVBJTk1VWF9EQVRBKE9WQ05fMV8xNjJfTUFSSywJUE9SVDE2Ml9GTjQsIE1TRUw0Q1JfMTRfMSksCisKKwkvKiBGdW5jdGlvbiA1ICovCisJUElOTVVYX0RBVEEoR1BJMF9NQVJLLAkJUE9SVDQxX0ZONSksCisJUElOTVVYX0RBVEEoR1BJMV9NQVJLLAkJUE9SVDQyX0ZONSksCisJUElOTVVYX0RBVEEoR1BPMF9NQVJLLAkJUE9SVDQzX0ZONSksCisJUElOTVVYX0RBVEEoR1BPMV9NQVJLLAkJUE9SVDQ0X0ZONSksCisJUElOTVVYX0RBVEEoSTJDX1NDTDNTX01BUkssCVBPUlQxMzdfRk41LCBNU0VMNENSXzE2XzApLAorCVBJTk1VWF9EQVRBKEkyQ19TREEzU19NQVJLLAlQT1JUMTQ1X0ZONSwgTVNFTDRDUl8xNl8wKSwKKwlQSU5NVVhfREFUQShJMkNfU0NMNFNfTUFSSywJUE9SVDE0Nl9GTjUsIE1TRUw0Q1JfMTdfMCksCisJUElOTVVYX0RBVEEoSTJDX1NEQTRTX01BUkssCVBPUlQxNDdfRk41LCBNU0VMNENSXzE3XzApLAorCisJLyogRnVuY3Rpb24gc2VsZWN0ICovCisJUElOTVVYX0RBVEEoTENEQzBfU0VMRUNUX01BUkssCU1TRUwzQ1JfNl8wKSwKKwlQSU5NVVhfREFUQShMQ0RDMV9TRUxFQ1RfTUFSSywJTVNFTDNDUl82XzEpLAorCisJUElOTVVYX0RBVEEoVFMwXzFTRUxFQ1RfTUFSSywJTVNFTDNDUl8yMV8wLCBNU0VMM0NSXzIwXzApLAorCVBJTk1VWF9EQVRBKFRTMF8yU0VMRUNUX01BUkssCU1TRUwzQ1JfMjFfMCwgTVNFTDNDUl8yMF8xKSwKKwlQSU5NVVhfREFUQShUUzFfMVNFTEVDVF9NQVJLLAlNU0VMM0NSXzI3XzAsIE1TRUwzQ1JfMjZfMCksCisJUElOTVVYX0RBVEEoVFMxXzJTRUxFQ1RfTUFSSywJTVNFTDNDUl8yN18wLCBNU0VMM0NSXzI2XzEpLAorCisJUElOTVVYX0RBVEEoU0RFTkNfQ1BHX01BUkssCU1TRUw0Q1JfMTlfMCksCisJUElOTVVYX0RBVEEoU0RFTkNfRFZfQ0xLSV9NQVJLLAlNU0VMNENSXzE5XzEpLAorCisJUElOTVVYX0RBVEEoTUZJdjZfTUFSSywJCU1TRUw0Q1JfNl8wKSwKKwlQSU5NVVhfREFUQShNRkl2NF9NQVJLLAkJTVNFTDRDUl82XzEpLAorfTsKKworI2RlZmluZSBfR1BJT19QT1JUKHBmeCwgc2Z4KSBQSU5NVVhfR1BJTyhHUElPX1BPUlQjI3BmeCwgUE9SVCMjcGZ4IyNfREFUQSkKKyNkZWZpbmUgR1BJT19QT1JUX0FMTCgpIF8xOTAoX0dQSU9fUE9SVCwgLCB1bnVzZWQpCisjZGVmaW5lIEdQSU9fRk4oc3RyKSBQSU5NVVhfR1BJTyhHUElPX0ZOXyMjc3RyLCBzdHIjI19NQVJLKQorCitzdGF0aWMgc3RydWN0IHBpbm11eF9ncGlvIHBpbm11eF9ncGlvc1tdID0geworCisJLyogUE9SVCAqLworCUdQSU9fUE9SVF9BTEwoKSwKKworCS8qIElSUSAqLworCUdQSU9fRk4oSVJRMF82KSwJR1BJT19GTihJUlEwXzE2MiksCUdQSU9fRk4oSVJRMSksCisJR1BJT19GTihJUlEyXzQpLAlHUElPX0ZOKElSUTJfNSksCUdQSU9fRk4oSVJRM184KSwKKwlHUElPX0ZOKElSUTNfMTYpLAlHUElPX0ZOKElSUTRfMTcpLAlHUElPX0ZOKElSUTRfMTYzKSwKKwlHUElPX0ZOKElSUTUpLAkJR1BJT19GTihJUlE2XzM5KSwJR1BJT19GTihJUlE2XzE2NCksCisJR1BJT19GTihJUlE3XzQwKSwJR1BJT19GTihJUlE3XzE2NyksCUdQSU9fRk4oSVJROF80MSksCisJR1BJT19GTihJUlE4XzE2OCksCUdQSU9fRk4oSVJROV80MiksCUdQSU9fRk4oSVJROV8xNjkpLAorCUdQSU9fRk4oSVJRMTApLAkJR1BJT19GTihJUlExMSksCQlHUElPX0ZOKElSUTEyXzgwKSwKKwlHUElPX0ZOKElSUTEyXzEzNyksCUdQSU9fRk4oSVJRMTNfODEpLAlHUElPX0ZOKElSUTEzXzE0NSksCisJR1BJT19GTihJUlExNF84MiksCUdQSU9fRk4oSVJRMTRfMTQ2KSwJR1BJT19GTihJUlExNV84MyksCisJR1BJT19GTihJUlExNV8xNDcpLAlHUElPX0ZOKElSUTE2Xzg0KSwJR1BJT19GTihJUlExNl8xNzApLAorCUdQSU9fRk4oSVJRMTcpLAkJR1BJT19GTihJUlExOCksCQlHUElPX0ZOKElSUTE5KSwKKwlHUElPX0ZOKElSUTIwKSwJCUdQSU9fRk4oSVJRMjEpLAkJR1BJT19GTihJUlEyMiksCisJR1BJT19GTihJUlEyMyksCQlHUElPX0ZOKElSUTI0KSwJCUdQSU9fRk4oSVJRMjUpLAorCUdQSU9fRk4oSVJRMjZfMTIxKSwJR1BJT19GTihJUlEyNl8xNzIpLAlHUElPX0ZOKElSUTI3XzEyMiksCisJR1BJT19GTihJUlEyN18xODApLAlHUElPX0ZOKElSUTI4XzEyMyksCUdQSU9fRk4oSVJRMjhfMTgxKSwKKwlHUElPX0ZOKElSUTI5XzEyOSksCUdQSU9fRk4oSVJRMjlfMTgyKSwJR1BJT19GTihJUlEzMF8xMzApLAorCUdQSU9fRk4oSVJRMzBfMTgzKSwJR1BJT19GTihJUlEzMV8xMzgpLAlHUElPX0ZOKElSUTMxXzE4NCksCisKKwkvKiBNU0lPRjAgKi8KKwlHUElPX0ZOKE1TSU9GMF9UU1lOQyksCUdQSU9fRk4oTVNJT0YwX1RTQ0spLAlHUElPX0ZOKE1TSU9GMF9SWEQpLAorCUdQSU9fRk4oTVNJT0YwX1JTQ0spLAlHUElPX0ZOKE1TSU9GMF9SU1lOQyksCUdQSU9fRk4oTVNJT0YwX01DSzApLAorCUdQSU9fRk4oTVNJT0YwX01DSzEpLAlHUElPX0ZOKE1TSU9GMF9TUzEpLAlHUElPX0ZOKE1TSU9GMF9TUzIpLAorCUdQSU9fRk4oTVNJT0YwX1RYRCksCisKKwkvKiBNU0lPRjEgKi8KKwlHUElPX0ZOKE1TSU9GMV9UU0NLXzM5KSwJR1BJT19GTihNU0lPRjFfVFNDS184OCksCisJR1BJT19GTihNU0lPRjFfVFNZTkNfNDApLAlHUElPX0ZOKE1TSU9GMV9UU1lOQ184OSksCisJR1BJT19GTihNU0lPRjFfVFhEXzQxKSwJCUdQSU9fRk4oTVNJT0YxX1RYRF85MCksCisJR1BJT19GTihNU0lPRjFfUlhEXzQyKSwJCUdQSU9fRk4oTVNJT0YxX1JYRF85MSksCisJR1BJT19GTihNU0lPRjFfU1MxXzQzKSwJCUdQSU9fRk4oTVNJT0YxX1NTMV85MiksCisJR1BJT19GTihNU0lPRjFfU1MyXzQ0KSwJCUdQSU9fRk4oTVNJT0YxX1NTMl85MyksCisJR1BJT19GTihNU0lPRjFfUlNDSyksCQlHUElPX0ZOKE1TSU9GMV9SU1lOQyksCisJR1BJT19GTihNU0lPRjFfTUNLMCksCQlHUElPX0ZOKE1TSU9GMV9NQ0sxKSwKKworCS8qIE1TSU9GMiAqLworCUdQSU9fRk4oTVNJT0YyX1JTQ0spLAlHUElPX0ZOKE1TSU9GMl9SU1lOQyksCUdQSU9fRk4oTVNJT0YyX01DSzApLAorCUdQSU9fRk4oTVNJT0YyX01DSzEpLAlHUElPX0ZOKE1TSU9GMl9TUzEpLAlHUElPX0ZOKE1TSU9GMl9TUzIpLAorCUdQSU9fRk4oTVNJT0YyX1RTWU5DKSwJR1BJT19GTihNU0lPRjJfVFNDSyksCUdQSU9fRk4oTVNJT0YyX1JYRCksCisJR1BJT19GTihNU0lPRjJfVFhEKSwKKworCS8qIE1TSU9GMyAqLworCUdQSU9fRk4oQkJJRjFfUlhEKSwJR1BJT19GTihCQklGMV9UU1lOQyksCUdQSU9fRk4oQkJJRjFfVFNDSyksCisJR1BJT19GTihCQklGMV9UWEQpLAlHUElPX0ZOKEJCSUYxX1JTQ0spLAlHUElPX0ZOKEJCSUYxX1JTWU5DKSwKKwlHUElPX0ZOKEJCSUYxX0ZMT1cpLAlHUElPX0ZOKEJCX1JYX0ZMT1dfTiksCisKKwkvKiBNU0lPRjQgKi8KKwlHUElPX0ZOKEJCSUYyX1RTQ0sxKSwJR1BJT19GTihCQklGMl9UU1lOQzEpLAorCUdQSU9fRk4oQkJJRjJfVFhEMSksCUdQSU9fRk4oQkJJRjJfUlhEKSwKKworCS8qIEZTSSAqLworCUdQSU9fRk4oRlNJQUNLKSwJR1BJT19GTihGU0lCQ0spLAlHUElPX0ZOKEZTSUFJTFIpLAorCUdQSU9fRk4oRlNJQUlCVCksCUdQSU9fRk4oRlNJQUlTTEQpLAlHUElPX0ZOKEZTSUFPTUMpLAorCUdQSU9fRk4oRlNJQU9MUiksCUdQSU9fRk4oRlNJQU9CVCksCUdQSU9fRk4oRlNJQU9TTEQpLAorCUdQSU9fRk4oRlNJQVNQRElGXzExKSwJR1BJT19GTihGU0lBU1BESUZfMTUpLAorCisJLyogRk1TSSAqLworCUdQSU9fRk4oRk1TT0NLKSwJR1BJT19GTihGTVNPT0xSKSwJR1BJT19GTihGTVNJT0xSKSwKKwlHUElPX0ZOKEZNU09PQlQpLAlHUElPX0ZOKEZNU0lPQlQpLAlHUElPX0ZOKEZNU09TTEQpLAorCUdQSU9fRk4oRk1TT0lMUiksCUdQSU9fRk4oRk1TSUlMUiksCUdQSU9fRk4oRk1TT0lCVCksCisJR1BJT19GTihGTVNJSUJUKSwJR1BJT19GTihGTVNJU0xEKSwJR1BJT19GTihGTVNJQ0spLAorCisJLyogU0NJRkEwICovCisJR1BJT19GTihTQ0lGQTBfVFhEKSwJR1BJT19GTihTQ0lGQTBfUlhEKSwJR1BJT19GTihTQ0lGQTBfU0NLKSwKKwlHUElPX0ZOKFNDSUZBMF9SVFMpLAlHUElPX0ZOKFNDSUZBMF9DVFMpLAorCisJLyogU0NJRkExICovCisJR1BJT19GTihTQ0lGQTFfVFhEKSwJR1BJT19GTihTQ0lGQTFfUlhEKSwJR1BJT19GTihTQ0lGQTFfU0NLKSwKKwlHUElPX0ZOKFNDSUZBMV9SVFMpLAlHUElPX0ZOKFNDSUZBMV9DVFMpLAorCisJLyogU0NJRkEyICovCisJR1BJT19GTihTQ0lGQTJfQ1RTMSksCUdQSU9fRk4oU0NJRkEyX1JUUzEpLAlHUElPX0ZOKFNDSUZBMl9UWEQxKSwKKwlHUElPX0ZOKFNDSUZBMl9SWEQxKSwJR1BJT19GTihTQ0lGQTJfU0NLMSksCisKKwkvKiBTQ0lGQTMgKi8KKwlHUElPX0ZOKFNDSUZBM19DVFNfNDMpLAkJR1BJT19GTihTQ0lGQTNfQ1RTXzE0MCksCisJR1BJT19GTihTQ0lGQTNfUlRTXzQ0KSwJCUdQSU9fRk4oU0NJRkEzX1JUU18xNDEpLAorCUdQSU9fRk4oU0NJRkEzX1NDSyksCQlHUElPX0ZOKFNDSUZBM19UWEQpLAorCUdQSU9fRk4oU0NJRkEzX1JYRCksCisKKwkvKiBTQ0lGQTQgKi8KKwlHUElPX0ZOKFNDSUZBNF9SWEQpLAlHUElPX0ZOKFNDSUZBNF9UWEQpLAorCisJLyogU0NJRkE1ICovCisJR1BJT19GTihTQ0lGQTVfUlhEKSwJR1BJT19GTihTQ0lGQTVfVFhEKSwKKworCS8qIFNDSUZCICovCisJR1BJT19GTihTQ0lGQl9TQ0spLAlHUElPX0ZOKFNDSUZCX1JUUyksCUdQSU9fRk4oU0NJRkJfQ1RTKSwKKwlHUElPX0ZOKFNDSUZCX1RYRCksCUdQSU9fRk4oU0NJRkJfUlhEKSwKKworCS8qIENFVSAqLworCUdQSU9fRk4oVklPX0hEKSwJR1BJT19GTihWSU9fQ0tPMSksCUdQSU9fRk4oVklPX0NLTzIpLAorCUdQSU9fRk4oVklPX1ZEKSwJR1BJT19GTihWSU9fQ0xLKSwJR1BJT19GTihWSU9fRklFTEQpLAorCUdQSU9fRk4oVklPX0NLTyksCUdQSU9fRk4oVklPX0QwKSwJR1BJT19GTihWSU9fRDEpLAorCUdQSU9fRk4oVklPX0QyKSwJR1BJT19GTihWSU9fRDMpLAlHUElPX0ZOKFZJT19ENCksCisJR1BJT19GTihWSU9fRDUpLAlHUElPX0ZOKFZJT19ENiksCUdQSU9fRk4oVklPX0Q3KSwKKwlHUElPX0ZOKFZJT19EOCksCUdQSU9fRk4oVklPX0Q5KSwJR1BJT19GTihWSU9fRDEwKSwKKwlHUElPX0ZOKFZJT19EMTEpLAlHUElPX0ZOKFZJT19EMTIpLAlHUElPX0ZOKFZJT19EMTMpLAorCUdQSU9fRk4oVklPX0QxNCksCUdQSU9fRk4oVklPX0QxNSksCisKKwkvKiBVU0IwICovCisJR1BJT19GTihJRElOXzApLAlHUElPX0ZOKEVYVExQXzApLAlHUElPX0ZOKE9WQ04yXzApLAorCUdQSU9fRk4oUFdFTl8wKSwJR1BJT19GTihPVkNOXzApLAlHUElPX0ZOKFZCVVMwXzApLAorCisJLyogVVNCMSAqLworCUdQSU9fRk4oSURJTl8xXzE4KSwJR1BJT19GTihJRElOXzFfMTEzKSwKKwlHUElPX0ZOKE9WQ05fMV8xMTQpLAlHUElPX0ZOKE9WQ05fMV8xNjIpLAorCUdQSU9fRk4oUFdFTl8xXzExNSksCUdQSU9fRk4oUFdFTl8xXzEzOCksCisJR1BJT19GTihFWFRMUF8xKSwJR1BJT19GTihPVkNOMl8xKSwKKwlHUElPX0ZOKFZCVVMwXzEpLAorCisJLyogR1BJTyAqLworCUdQSU9fRk4oR1BJMCksCUdQSU9fRk4oR1BJMSksCUdQSU9fRk4oR1BPMCksCUdQSU9fRk4oR1BPMSksCisKKwkvKiBCU0MgKi8KKwlHUElPX0ZOKEJTKSwJR1BJT19GTihXRTEpLAlHUElPX0ZOKENLTyksCisJR1BJT19GTihXQUlUKSwJR1BJT19GTihSRFdSKSwKKworCUdQSU9fRk4oQTApLAlHUElPX0ZOKEExKSwJR1BJT19GTihBMiksCisJR1BJT19GTihBMyksCUdQSU9fRk4oQTYpLAlHUElPX0ZOKEE3KSwKKwlHUElPX0ZOKEE4KSwJR1BJT19GTihBOSksCUdQSU9fRk4oQTEwKSwKKwlHUElPX0ZOKEExMSksCUdQSU9fRk4oQTEyKSwJR1BJT19GTihBMTMpLAorCUdQSU9fRk4oQTE0KSwJR1BJT19GTihBMTUpLAlHUElPX0ZOKEExNiksCisJR1BJT19GTihBMTcpLAlHUElPX0ZOKEExOCksCUdQSU9fRk4oQTE5KSwKKwlHUElPX0ZOKEEyMCksCUdQSU9fRk4oQTIxKSwJR1BJT19GTihBMjIpLAorCUdQSU9fRk4oQTIzKSwJR1BJT19GTihBMjQpLAlHUElPX0ZOKEEyNSksCisJR1BJT19GTihBMjYpLAorCisJR1BJT19GTihDUzApLAlHUElPX0ZOKENTMiksCUdQSU9fRk4oQ1M0KSwKKwlHUElPX0ZOKENTNUEpLAlHUElPX0ZOKENTNUIpLAlHUElPX0ZOKENTNkEpLAorCisJLyogQlNDL0ZMQ1RMICovCisJR1BJT19GTihSRF9GU0MpLAlHUElPX0ZOKFdFMF9GV0UpLAlHUElPX0ZOKEE0X0ZPRSksCisJR1BJT19GTihBNV9GQ0RFKSwJR1BJT19GTihEMF9OQUYwKSwJR1BJT19GTihEMV9OQUYxKSwKKwlHUElPX0ZOKEQyX05BRjIpLAlHUElPX0ZOKEQzX05BRjMpLAlHUElPX0ZOKEQ0X05BRjQpLAorCUdQSU9fRk4oRDVfTkFGNSksCUdQSU9fRk4oRDZfTkFGNiksCUdQSU9fRk4oRDdfTkFGNyksCisJR1BJT19GTihEOF9OQUY4KSwJR1BJT19GTihEOV9OQUY5KSwJR1BJT19GTihEMTBfTkFGMTApLAorCUdQSU9fRk4oRDExX05BRjExKSwJR1BJT19GTihEMTJfTkFGMTIpLAlHUElPX0ZOKEQxM19OQUYxMyksCisJR1BJT19GTihEMTRfTkFGMTQpLAlHUElPX0ZOKEQxNV9OQUYxNSksCisKKwkvKiBNTUNJRigxKSAqLworCUdQSU9fRk4oTU1DRDBfMCksCUdQSU9fRk4oTU1DRDBfMSksCUdQSU9fRk4oTU1DRDBfMiksCisJR1BJT19GTihNTUNEMF8zKSwJR1BJT19GTihNTUNEMF80KSwJR1BJT19GTihNTUNEMF81KSwKKwlHUElPX0ZOKE1NQ0QwXzYpLAlHUElPX0ZOKE1NQ0QwXzcpLAlHUElPX0ZOKE1NQ0NNRDApLAorCUdQSU9fRk4oTU1DQ0xLMCksCisKKwkvKiBNTUNJRigyKSAqLworCUdQSU9fRk4oTU1DRDFfMCksCUdQSU9fRk4oTU1DRDFfMSksCUdQSU9fRk4oTU1DRDFfMiksCisJR1BJT19GTihNTUNEMV8zKSwJR1BJT19GTihNTUNEMV80KSwJR1BJT19GTihNTUNEMV81KSwKKwlHUElPX0ZOKE1NQ0QxXzYpLAlHUElPX0ZOKE1NQ0QxXzcpLAlHUElPX0ZOKE1NQ0NMSzEpLAorCUdQSU9fRk4oTU1DQ01EMSksCisKKwkvKiBTUFUyICovCisJR1BJT19GTihWSU5UX0kpLAorCisJLyogRkxDVEwgKi8KKwlHUElPX0ZOKEZDRTEpLAlHUElPX0ZOKEZDRTApLAlHUElPX0ZOKEZSQiksCisKKwkvKiBIU0kgKi8KKwlHUElPX0ZOKEdQX1JYX0ZMQUcpLAlHUElPX0ZOKEdQX1JYX0RBVEEpLAlHUElPX0ZOKEdQX1RYX1JFQURZKSwKKwlHUElPX0ZOKEdQX1JYX1dBS0UpLAlHUElPX0ZOKE1QX1RYX0ZMQUcpLAlHUElPX0ZOKE1QX1RYX0RBVEEpLAorCUdQSU9fRk4oTVBfUlhfUkVBRFkpLAlHUElPX0ZOKE1QX1RYX1dBS0UpLAorCisJLyogTUZJICovCisJR1BJT19GTihNRkl2NiksCisJR1BJT19GTihNRkl2NCksCisKKwlHUElPX0ZOKE1FTUNfQlVTQ0xLX01FTUNfQTApLAlHUElPX0ZOKE1FTUNfQURWX01FTUNfRFJFUTApLAorCUdQSU9fRk4oTUVNQ19XQUlUX01FTUNfRFJFUTEpLAlHUElPX0ZOKE1FTUNfQ1MxX01FTUNfQTEpLAorCUdQSU9fRk4oTUVNQ19DUzApLAlHUElPX0ZOKE1FTUNfTk9FKSwKKwlHUElPX0ZOKE1FTUNfTldFKSwJR1BJT19GTihNRU1DX0lOVCksCisKKwlHUElPX0ZOKE1FTUNfQUQwKSwJR1BJT19GTihNRU1DX0FEMSksCUdQSU9fRk4oTUVNQ19BRDIpLAorCUdQSU9fRk4oTUVNQ19BRDMpLAlHUElPX0ZOKE1FTUNfQUQ0KSwJR1BJT19GTihNRU1DX0FENSksCisJR1BJT19GTihNRU1DX0FENiksCUdQSU9fRk4oTUVNQ19BRDcpLAlHUElPX0ZOKE1FTUNfQUQ4KSwKKwlHUElPX0ZOKE1FTUNfQUQ5KSwJR1BJT19GTihNRU1DX0FEMTApLAlHUElPX0ZOKE1FTUNfQUQxMSksCisJR1BJT19GTihNRU1DX0FEMTIpLAlHUElPX0ZOKE1FTUNfQUQxMyksCUdQSU9fRk4oTUVNQ19BRDE0KSwKKwlHUElPX0ZOKE1FTUNfQUQxNSksCisKKwkvKiBTSU0gKi8KKwlHUElPX0ZOKFNJTV9SU1QpLAlHUElPX0ZOKFNJTV9DTEspLAlHUElPX0ZOKFNJTV9EKSwKKworCS8qIFRQVSAqLworCUdQSU9fRk4oVFBVMFRPMCksCUdQSU9fRk4oVFBVMFRPMSksCUdQSU9fRk4oVFBVMFRPMl85MyksCisJR1BJT19GTihUUFUwVE8yXzk5KSwJR1BJT19GTihUUFUwVE8zKSwKKworCS8qIEkyQzIgKi8KKwlHUElPX0ZOKEkyQ19TQ0wyKSwJR1BJT19GTihJMkNfU0RBMiksCisKKwkvKiBJMkMzKDEpICovCisJR1BJT19GTihJMkNfU0NMMyksCUdQSU9fRk4oSTJDX1NEQTMpLAorCisJLyogSTJDMygyKSAqLworCUdQSU9fRk4oSTJDX1NDTDNTKSwJR1BJT19GTihJMkNfU0RBM1MpLAorCisJLyogSTJDNCgyKSAqLworCUdQSU9fRk4oSTJDX1NDTDQpLAlHUElPX0ZOKEkyQ19TREE0KSwKKworCS8qIEkyQzQoMikgKi8KKwlHUElPX0ZOKEkyQ19TQ0w0UyksCUdQSU9fRk4oSTJDX1NEQTRTKSwKKworCS8qIEtFWVNDICovCisJR1BJT19GTihLRVlPVVQwKSwJR1BJT19GTihLRVlJTjBfMTIxKSwJR1BJT19GTihLRVlJTjBfMTM2KSwKKwlHUElPX0ZOKEtFWU9VVDEpLAlHUElPX0ZOKEtFWUlOMV8xMjIpLAlHUElPX0ZOKEtFWUlOMV8xMzUpLAorCUdQSU9fRk4oS0VZT1VUMiksCUdQSU9fRk4oS0VZSU4yXzEyMyksCUdQSU9fRk4oS0VZSU4yXzEzNCksCisJR1BJT19GTihLRVlPVVQzKSwJR1BJT19GTihLRVlJTjNfMTI0KSwJR1BJT19GTihLRVlJTjNfMTMzKSwKKwlHUElPX0ZOKEtFWU9VVDQpLAlHUElPX0ZOKEtFWUlONCksCUdQSU9fRk4oS0VZT1VUNSksCisJR1BJT19GTihLRVlJTjUpLAlHUElPX0ZOKEtFWU9VVDYpLAlHUElPX0ZOKEtFWUlONiksCisJR1BJT19GTihLRVlPVVQ3KSwJR1BJT19GTihLRVlJTjcpLAorCisJLyogTENEQyAqLworCUdQSU9fRk4oTENESFNZTiksCUdQSU9fRk4oTENEQ1MpLAlHUElPX0ZOKExDRFZTWU4pLAorCUdQSU9fRk4oTENERENLKSwJR1BJT19GTihMQ0RXUiksCUdQSU9fRk4oTENEUkQpLAorCUdQSU9fRk4oTENERElTUCksCUdQSU9fRk4oTENEUlMpLAlHUElPX0ZOKExDRExDTEspLAorCUdQSU9fRk4oTENERE9OKSwKKworCUdQSU9fRk4oTENERDApLAkJR1BJT19GTihMQ0REMSksCQlHUElPX0ZOKExDREQyKSwKKwlHUElPX0ZOKExDREQzKSwJCUdQSU9fRk4oTENERDQpLAkJR1BJT19GTihMQ0RENSksCisJR1BJT19GTihMQ0RENiksCQlHUElPX0ZOKExDREQ3KSwJCUdQSU9fRk4oTENERDgpLAorCUdQSU9fRk4oTENERDkpLAkJR1BJT19GTihMQ0REMTApLAlHUElPX0ZOKExDREQxMSksCisJR1BJT19GTihMQ0REMTIpLAlHUElPX0ZOKExDREQxMyksCUdQSU9fRk4oTENERDE0KSwKKwlHUElPX0ZOKExDREQxNSksCUdQSU9fRk4oTENERDE2KSwJR1BJT19GTihMQ0REMTcpLAorCUdQSU9fRk4oTENERDE4KSwJR1BJT19GTihMQ0REMTkpLAlHUElPX0ZOKExDREQyMCksCisJR1BJT19GTihMQ0REMjEpLAlHUElPX0ZOKExDREQyMiksCUdQSU9fRk4oTENERDIzKSwKKworCS8qIElSREEgKi8KKwlHUElPX0ZOKElSREFfT1VUKSwJR1BJT19GTihJUkRBX0lOKSwJR1BJT19GTihJUkRBX0ZJUlNFTCksCisJR1BJT19GTihJUk9VVF8xMzkpLAlHUElPX0ZOKElST1VUXzE0MCksCisKKwkvKiBUU0lGMSAqLworCUdQSU9fRk4oVFMwXzFTRUxFQ1QpLAorCUdQSU9fRk4oVFMwXzJTRUxFQ1QpLAorCUdQSU9fRk4oVFMxXzFTRUxFQ1QpLAorCUdQSU9fRk4oVFMxXzJTRUxFQ1QpLAorCisJR1BJT19GTihUU19TUFNZTkMxKSwJR1BJT19GTihUU19TREFUMSksCisJR1BJT19GTihUU19TREVOMSksCUdQSU9fRk4oVFNfU0NLMSksCisKKwkvKiBUU0lGMiAqLworCUdQSU9fRk4oVFNfU1BTWU5DMiksCUdQSU9fRk4oVFNfU0RBVDIpLAorCUdQSU9fRk4oVFNfU0RFTjIpLAlHUElPX0ZOKFRTX1NDSzIpLAorCisJLyogSERNSSAqLworCUdQSU9fRk4oSERNSV9IUEQpLAlHUElPX0ZOKEhETUlfQ0VDKSwKKworCS8qIFNESEkwICovCisJR1BJT19GTihTREhJQ0xLMCksCUdQSU9fRk4oU0RISUNEMCksCUdQSU9fRk4oU0RISUNNRDApLAorCUdQSU9fRk4oU0RISVdQMCksCUdQSU9fRk4oU0RISUQwXzApLAlHUElPX0ZOKFNESElEMF8xKSwKKwlHUElPX0ZOKFNESElEMF8yKSwJR1BJT19GTihTREhJRDBfMyksCisKKwkvKiBTREhJMSAqLworCUdQSU9fRk4oU0RISUNMSzEpLAlHUElPX0ZOKFNESElDTUQxKSwJR1BJT19GTihTREhJRDFfMCksCisJR1BJT19GTihTREhJRDFfMSksCUdQSU9fRk4oU0RISUQxXzIpLAlHUElPX0ZOKFNESElEMV8zKSwKKworCS8qIFNESEkyICovCisJR1BJT19GTihTREhJQ0xLMiksCUdQSU9fRk4oU0RISUNNRDIpLAlHUElPX0ZOKFNESElEMl8wKSwKKwlHUElPX0ZOKFNESElEMl8xKSwJR1BJT19GTihTREhJRDJfMiksCUdQSU9fRk4oU0RISUQyXzMpLAorCisJLyogU0RFTkMgKi8KKwlHUElPX0ZOKFNERU5DX0NQRyksCisJR1BJT19GTihTREVOQ19EVl9DTEtJKSwKK307CisKKy8qIGhlbHBlciBmb3IgdG9wIDQgYml0cyBpbiBQT1JUbkNSICovCisjZGVmaW5lIFBDUkgoaW4sIGluX3BkLCBpbl9wdSwgb3V0KQkJXAorCTAsIChvdXQpLCAoaW4pLCAwLAkJCVwKKwkwLCAwLCAwLCAwLAkJCQlcCisJMCwgMCwgKGluX3BkKSwgMCwJCQlcCisJMCwgMCwgKGluX3B1KSwgMAorCisjZGVmaW5lIFBPUlRDUihuciwgcmVnKQkJCQkJCVwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQT1JUIiBuciAiQ1IiLCByZWcsIDgsIDQpIHsJCVwKKwkJUENSSChQT1JUIyNuciMjX0lOLCBQT1JUIyNuciMjX0lOX1BELAkJXAorCQkgICAgIFBPUlQjI25yIyNfSU5fUFUsIFBPUlQjI25yIyNfT1VUKSwJCVwKKwkJUE9SVCMjbnIjI19GTjAsIFBPUlQjI25yIyNfRk4xLCBQT1JUIyNuciMjX0ZOMiwJXAorCQlQT1JUIyNuciMjX0ZOMywJUE9SVCMjbnIjI19GTjQsIFBPUlQjI25yIyNfRk41LAlcCisJCVBPUlQjI25yIyNfRk42LCBQT1JUIyNuciMjX0ZONyB9CQlcCisJfQorCitzdGF0aWMgc3RydWN0IHBpbm11eF9jZmdfcmVnIHBpbm11eF9jb25maWdfcmVnc1tdID0geworCVBPUlRDUigwLAkweEU2MDUxMDAwKSwgLyogUE9SVDBDUiAqLworCVBPUlRDUigxLAkweEU2MDUxMDAxKSwgLyogUE9SVDFDUiAqLworCVBPUlRDUigyLAkweEU2MDUxMDAyKSwgLyogUE9SVDJDUiAqLworCVBPUlRDUigzLAkweEU2MDUxMDAzKSwgLyogUE9SVDNDUiAqLworCVBPUlRDUig0LAkweEU2MDUxMDA0KSwgLyogUE9SVDRDUiAqLworCVBPUlRDUig1LAkweEU2MDUxMDA1KSwgLyogUE9SVDVDUiAqLworCVBPUlRDUig2LAkweEU2MDUxMDA2KSwgLyogUE9SVDZDUiAqLworCVBPUlRDUig3LAkweEU2MDUxMDA3KSwgLyogUE9SVDdDUiAqLworCVBPUlRDUig4LAkweEU2MDUxMDA4KSwgLyogUE9SVDhDUiAqLworCVBPUlRDUig5LAkweEU2MDUxMDA5KSwgLyogUE9SVDlDUiAqLworCVBPUlRDUigxMCwJMHhFNjA1MTAwQSksIC8qIFBPUlQxMENSICovCisJUE9SVENSKDExLAkweEU2MDUxMDBCKSwgLyogUE9SVDExQ1IgKi8KKwlQT1JUQ1IoMTIsCTB4RTYwNTEwMEMpLCAvKiBQT1JUMTJDUiAqLworCVBPUlRDUigxMywJMHhFNjA1MTAwRCksIC8qIFBPUlQxM0NSICovCisJUE9SVENSKDE0LAkweEU2MDUxMDBFKSwgLyogUE9SVDE0Q1IgKi8KKwlQT1JUQ1IoMTUsCTB4RTYwNTEwMEYpLCAvKiBQT1JUMTVDUiAqLworCVBPUlRDUigxNiwJMHhFNjA1MTAxMCksIC8qIFBPUlQxNkNSICovCisJUE9SVENSKDE3LAkweEU2MDUxMDExKSwgLyogUE9SVDE3Q1IgKi8KKwlQT1JUQ1IoMTgsCTB4RTYwNTEwMTIpLCAvKiBQT1JUMThDUiAqLworCVBPUlRDUigxOSwJMHhFNjA1MTAxMyksIC8qIFBPUlQxOUNSICovCisJUE9SVENSKDIwLAkweEU2MDUxMDE0KSwgLyogUE9SVDIwQ1IgKi8KKwlQT1JUQ1IoMjEsCTB4RTYwNTEwMTUpLCAvKiBQT1JUMjFDUiAqLworCVBPUlRDUigyMiwJMHhFNjA1MTAxNiksIC8qIFBPUlQyMkNSICovCisJUE9SVENSKDIzLAkweEU2MDUxMDE3KSwgLyogUE9SVDIzQ1IgKi8KKwlQT1JUQ1IoMjQsCTB4RTYwNTEwMTgpLCAvKiBQT1JUMjRDUiAqLworCVBPUlRDUigyNSwJMHhFNjA1MTAxOSksIC8qIFBPUlQyNUNSICovCisJUE9SVENSKDI2LAkweEU2MDUxMDFBKSwgLyogUE9SVDI2Q1IgKi8KKwlQT1JUQ1IoMjcsCTB4RTYwNTEwMUIpLCAvKiBQT1JUMjdDUiAqLworCVBPUlRDUigyOCwJMHhFNjA1MTAxQyksIC8qIFBPUlQyOENSICovCisJUE9SVENSKDI5LAkweEU2MDUxMDFEKSwgLyogUE9SVDI5Q1IgKi8KKwlQT1JUQ1IoMzAsCTB4RTYwNTEwMUUpLCAvKiBQT1JUMzBDUiAqLworCVBPUlRDUigzMSwJMHhFNjA1MTAxRiksIC8qIFBPUlQzMUNSICovCisJUE9SVENSKDMyLAkweEU2MDUxMDIwKSwgLyogUE9SVDMyQ1IgKi8KKwlQT1JUQ1IoMzMsCTB4RTYwNTEwMjEpLCAvKiBQT1JUMzNDUiAqLworCVBPUlRDUigzNCwJMHhFNjA1MTAyMiksIC8qIFBPUlQzNENSICovCisJUE9SVENSKDM1LAkweEU2MDUxMDIzKSwgLyogUE9SVDM1Q1IgKi8KKwlQT1JUQ1IoMzYsCTB4RTYwNTEwMjQpLCAvKiBQT1JUMzZDUiAqLworCVBPUlRDUigzNywJMHhFNjA1MTAyNSksIC8qIFBPUlQzN0NSICovCisJUE9SVENSKDM4LAkweEU2MDUxMDI2KSwgLyogUE9SVDM4Q1IgKi8KKwlQT1JUQ1IoMzksCTB4RTYwNTEwMjcpLCAvKiBQT1JUMzlDUiAqLworCVBPUlRDUig0MCwJMHhFNjA1MTAyOCksIC8qIFBPUlQ0MENSICovCisJUE9SVENSKDQxLAkweEU2MDUxMDI5KSwgLyogUE9SVDQxQ1IgKi8KKwlQT1JUQ1IoNDIsCTB4RTYwNTEwMkEpLCAvKiBQT1JUNDJDUiAqLworCVBPUlRDUig0MywJMHhFNjA1MTAyQiksIC8qIFBPUlQ0M0NSICovCisJUE9SVENSKDQ0LAkweEU2MDUxMDJDKSwgLyogUE9SVDQ0Q1IgKi8KKwlQT1JUQ1IoNDUsCTB4RTYwNTEwMkQpLCAvKiBQT1JUNDVDUiAqLworCVBPUlRDUig0NiwJMHhFNjA1MjAyRSksIC8qIFBPUlQ0NkNSICovCisJUE9SVENSKDQ3LAkweEU2MDUyMDJGKSwgLyogUE9SVDQ3Q1IgKi8KKwlQT1JUQ1IoNDgsCTB4RTYwNTIwMzApLCAvKiBQT1JUNDhDUiAqLworCVBPUlRDUig0OSwJMHhFNjA1MjAzMSksIC8qIFBPUlQ0OUNSICovCisJUE9SVENSKDUwLAkweEU2MDUyMDMyKSwgLyogUE9SVDUwQ1IgKi8KKwlQT1JUQ1IoNTEsCTB4RTYwNTIwMzMpLCAvKiBQT1JUNTFDUiAqLworCVBPUlRDUig1MiwJMHhFNjA1MjAzNCksIC8qIFBPUlQ1MkNSICovCisJUE9SVENSKDUzLAkweEU2MDUyMDM1KSwgLyogUE9SVDUzQ1IgKi8KKwlQT1JUQ1IoNTQsCTB4RTYwNTIwMzYpLCAvKiBQT1JUNTRDUiAqLworCVBPUlRDUig1NSwJMHhFNjA1MjAzNyksIC8qIFBPUlQ1NUNSICovCisJUE9SVENSKDU2LAkweEU2MDUyMDM4KSwgLyogUE9SVDU2Q1IgKi8KKwlQT1JUQ1IoNTcsCTB4RTYwNTIwMzkpLCAvKiBQT1JUNTdDUiAqLworCVBPUlRDUig1OCwJMHhFNjA1MjAzQSksIC8qIFBPUlQ1OENSICovCisJUE9SVENSKDU5LAkweEU2MDUyMDNCKSwgLyogUE9SVDU5Q1IgKi8KKwlQT1JUQ1IoNjAsCTB4RTYwNTIwM0MpLCAvKiBQT1JUNjBDUiAqLworCVBPUlRDUig2MSwJMHhFNjA1MjAzRCksIC8qIFBPUlQ2MUNSICovCisJUE9SVENSKDYyLAkweEU2MDUyMDNFKSwgLyogUE9SVDYyQ1IgKi8KKwlQT1JUQ1IoNjMsCTB4RTYwNTIwM0YpLCAvKiBQT1JUNjNDUiAqLworCVBPUlRDUig2NCwJMHhFNjA1MjA0MCksIC8qIFBPUlQ2NENSICovCisJUE9SVENSKDY1LAkweEU2MDUyMDQxKSwgLyogUE9SVDY1Q1IgKi8KKwlQT1JUQ1IoNjYsCTB4RTYwNTIwNDIpLCAvKiBQT1JUNjZDUiAqLworCVBPUlRDUig2NywJMHhFNjA1MjA0MyksIC8qIFBPUlQ2N0NSICovCisJUE9SVENSKDY4LAkweEU2MDUyMDQ0KSwgLyogUE9SVDY4Q1IgKi8KKwlQT1JUQ1IoNjksCTB4RTYwNTIwNDUpLCAvKiBQT1JUNjlDUiAqLworCVBPUlRDUig3MCwJMHhFNjA1MjA0NiksIC8qIFBPUlQ3MENSICovCisJUE9SVENSKDcxLAkweEU2MDUyMDQ3KSwgLyogUE9SVDcxQ1IgKi8KKwlQT1JUQ1IoNzIsCTB4RTYwNTIwNDgpLCAvKiBQT1JUNzJDUiAqLworCVBPUlRDUig3MywJMHhFNjA1MjA0OSksIC8qIFBPUlQ3M0NSICovCisJUE9SVENSKDc0LAkweEU2MDUyMDRBKSwgLyogUE9SVDc0Q1IgKi8KKwlQT1JUQ1IoNzUsCTB4RTYwNTIwNEIpLCAvKiBQT1JUNzVDUiAqLworCVBPUlRDUig3NiwJMHhFNjA1MDA0QyksIC8qIFBPUlQ3NkNSICovCisJUE9SVENSKDc3LAkweEU2MDUwMDREKSwgLyogUE9SVDc3Q1IgKi8KKwlQT1JUQ1IoNzgsCTB4RTYwNTAwNEUpLCAvKiBQT1JUNzhDUiAqLworCVBPUlRDUig3OSwJMHhFNjA1MDA0RiksIC8qIFBPUlQ3OUNSICovCisJUE9SVENSKDgwLAkweEU2MDUwMDUwKSwgLyogUE9SVDgwQ1IgKi8KKwlQT1JUQ1IoODEsCTB4RTYwNTAwNTEpLCAvKiBQT1JUODFDUiAqLworCVBPUlRDUig4MiwJMHhFNjA1MDA1MiksIC8qIFBPUlQ4MkNSICovCisJUE9SVENSKDgzLAkweEU2MDUwMDUzKSwgLyogUE9SVDgzQ1IgKi8KKwlQT1JUQ1IoODQsCTB4RTYwNTAwNTQpLCAvKiBQT1JUODRDUiAqLworCVBPUlRDUig4NSwJMHhFNjA1MDA1NSksIC8qIFBPUlQ4NUNSICovCisJUE9SVENSKDg2LAkweEU2MDUwMDU2KSwgLyogUE9SVDg2Q1IgKi8KKwlQT1JUQ1IoODcsCTB4RTYwNTAwNTcpLCAvKiBQT1JUODdDUiAqLworCVBPUlRDUig4OCwJMHhFNjA1MDA1OCksIC8qIFBPUlQ4OENSICovCisJUE9SVENSKDg5LAkweEU2MDUwMDU5KSwgLyogUE9SVDg5Q1IgKi8KKwlQT1JUQ1IoOTAsCTB4RTYwNTAwNUEpLCAvKiBQT1JUOTBDUiAqLworCVBPUlRDUig5MSwJMHhFNjA1MDA1QiksIC8qIFBPUlQ5MUNSICovCisJUE9SVENSKDkyLAkweEU2MDUwMDVDKSwgLyogUE9SVDkyQ1IgKi8KKwlQT1JUQ1IoOTMsCTB4RTYwNTAwNUQpLCAvKiBQT1JUOTNDUiAqLworCVBPUlRDUig5NCwJMHhFNjA1MDA1RSksIC8qIFBPUlQ5NENSICovCisJUE9SVENSKDk1LAkweEU2MDUwMDVGKSwgLyogUE9SVDk1Q1IgKi8KKwlQT1JUQ1IoOTYsCTB4RTYwNTAwNjApLCAvKiBQT1JUOTZDUiAqLworCVBPUlRDUig5NywJMHhFNjA1MDA2MSksIC8qIFBPUlQ5N0NSICovCisJUE9SVENSKDk4LAkweEU2MDUwMDYyKSwgLyogUE9SVDk4Q1IgKi8KKwlQT1JUQ1IoOTksCTB4RTYwNTAwNjMpLCAvKiBQT1JUOTlDUiAqLworCVBPUlRDUigxMDAsCTB4RTYwNTMwNjQpLCAvKiBQT1JUMTAwQ1IgKi8KKwlQT1JUQ1IoMTAxLAkweEU2MDUzMDY1KSwgLyogUE9SVDEwMUNSICovCisJUE9SVENSKDEwMiwJMHhFNjA1MzA2NiksIC8qIFBPUlQxMDJDUiAqLworCVBPUlRDUigxMDMsCTB4RTYwNTMwNjcpLCAvKiBQT1JUMTAzQ1IgKi8KKwlQT1JUQ1IoMTA0LAkweEU2MDUzMDY4KSwgLyogUE9SVDEwNENSICovCisJUE9SVENSKDEwNSwJMHhFNjA1MzA2OSksIC8qIFBPUlQxMDVDUiAqLworCVBPUlRDUigxMDYsCTB4RTYwNTMwNkEpLCAvKiBQT1JUMTA2Q1IgKi8KKwlQT1JUQ1IoMTA3LAkweEU2MDUzMDZCKSwgLyogUE9SVDEwN0NSICovCisJUE9SVENSKDEwOCwJMHhFNjA1MzA2QyksIC8qIFBPUlQxMDhDUiAqLworCVBPUlRDUigxMDksCTB4RTYwNTMwNkQpLCAvKiBQT1JUMTA5Q1IgKi8KKwlQT1JUQ1IoMTEwLAkweEU2MDUzMDZFKSwgLyogUE9SVDExMENSICovCisJUE9SVENSKDExMSwJMHhFNjA1MzA2RiksIC8qIFBPUlQxMTFDUiAqLworCVBPUlRDUigxMTIsCTB4RTYwNTMwNzApLCAvKiBQT1JUMTEyQ1IgKi8KKwlQT1JUQ1IoMTEzLAkweEU2MDUzMDcxKSwgLyogUE9SVDExM0NSICovCisJUE9SVENSKDExNCwJMHhFNjA1MzA3MiksIC8qIFBPUlQxMTRDUiAqLworCVBPUlRDUigxMTUsCTB4RTYwNTMwNzMpLCAvKiBQT1JUMTE1Q1IgKi8KKwlQT1JUQ1IoMTE2LAkweEU2MDUzMDc0KSwgLyogUE9SVDExNkNSICovCisJUE9SVENSKDExNywJMHhFNjA1MzA3NSksIC8qIFBPUlQxMTdDUiAqLworCVBPUlRDUigxMTgsCTB4RTYwNTMwNzYpLCAvKiBQT1JUMTE4Q1IgKi8KKwlQT1JUQ1IoMTE5LAkweEU2MDUzMDc3KSwgLyogUE9SVDExOUNSICovCisJUE9SVENSKDEyMCwJMHhFNjA1MzA3OCksIC8qIFBPUlQxMjBDUiAqLworCVBPUlRDUigxMjEsCTB4RTYwNTAwNzkpLCAvKiBQT1JUMTIxQ1IgKi8KKwlQT1JUQ1IoMTIyLAkweEU2MDUwMDdBKSwgLyogUE9SVDEyMkNSICovCisJUE9SVENSKDEyMywJMHhFNjA1MDA3QiksIC8qIFBPUlQxMjNDUiAqLworCVBPUlRDUigxMjQsCTB4RTYwNTAwN0MpLCAvKiBQT1JUMTI0Q1IgKi8KKwlQT1JUQ1IoMTI1LAkweEU2MDUwMDdEKSwgLyogUE9SVDEyNUNSICovCisJUE9SVENSKDEyNiwJMHhFNjA1MDA3RSksIC8qIFBPUlQxMjZDUiAqLworCVBPUlRDUigxMjcsCTB4RTYwNTAwN0YpLCAvKiBQT1JUMTI3Q1IgKi8KKwlQT1JUQ1IoMTI4LAkweEU2MDUwMDgwKSwgLyogUE9SVDEyOENSICovCisJUE9SVENSKDEyOSwJMHhFNjA1MDA4MSksIC8qIFBPUlQxMjlDUiAqLworCVBPUlRDUigxMzAsCTB4RTYwNTAwODIpLCAvKiBQT1JUMTMwQ1IgKi8KKwlQT1JUQ1IoMTMxLAkweEU2MDUwMDgzKSwgLyogUE9SVDEzMUNSICovCisJUE9SVENSKDEzMiwJMHhFNjA1MDA4NCksIC8qIFBPUlQxMzJDUiAqLworCVBPUlRDUigxMzMsCTB4RTYwNTAwODUpLCAvKiBQT1JUMTMzQ1IgKi8KKwlQT1JUQ1IoMTM0LAkweEU2MDUwMDg2KSwgLyogUE9SVDEzNENSICovCisJUE9SVENSKDEzNSwJMHhFNjA1MDA4NyksIC8qIFBPUlQxMzVDUiAqLworCVBPUlRDUigxMzYsCTB4RTYwNTAwODgpLCAvKiBQT1JUMTM2Q1IgKi8KKwlQT1JUQ1IoMTM3LAkweEU2MDUwMDg5KSwgLyogUE9SVDEzN0NSICovCisJUE9SVENSKDEzOCwJMHhFNjA1MDA4QSksIC8qIFBPUlQxMzhDUiAqLworCVBPUlRDUigxMzksCTB4RTYwNTAwOEIpLCAvKiBQT1JUMTM5Q1IgKi8KKwlQT1JUQ1IoMTQwLAkweEU2MDUwMDhDKSwgLyogUE9SVDE0MENSICovCisJUE9SVENSKDE0MSwJMHhFNjA1MDA4RCksIC8qIFBPUlQxNDFDUiAqLworCVBPUlRDUigxNDIsCTB4RTYwNTAwOEUpLCAvKiBQT1JUMTQyQ1IgKi8KKwlQT1JUQ1IoMTQzLAkweEU2MDUwMDhGKSwgLyogUE9SVDE0M0NSICovCisJUE9SVENSKDE0NCwJMHhFNjA1MDA5MCksIC8qIFBPUlQxNDRDUiAqLworCVBPUlRDUigxNDUsCTB4RTYwNTAwOTEpLCAvKiBQT1JUMTQ1Q1IgKi8KKwlQT1JUQ1IoMTQ2LAkweEU2MDUwMDkyKSwgLyogUE9SVDE0NkNSICovCisJUE9SVENSKDE0NywJMHhFNjA1MDA5MyksIC8qIFBPUlQxNDdDUiAqLworCVBPUlRDUigxNDgsCTB4RTYwNTAwOTQpLCAvKiBQT1JUMTQ4Q1IgKi8KKwlQT1JUQ1IoMTQ5LAkweEU2MDUwMDk1KSwgLyogUE9SVDE0OUNSICovCisJUE9SVENSKDE1MCwJMHhFNjA1MDA5NiksIC8qIFBPUlQxNTBDUiAqLworCVBPUlRDUigxNTEsCTB4RTYwNTAwOTcpLCAvKiBQT1JUMTUxQ1IgKi8KKwlQT1JUQ1IoMTUyLAkweEU2MDUzMDk4KSwgLyogUE9SVDE1MkNSICovCisJUE9SVENSKDE1MywJMHhFNjA1MzA5OSksIC8qIFBPUlQxNTNDUiAqLworCVBPUlRDUigxNTQsCTB4RTYwNTMwOUEpLCAvKiBQT1JUMTU0Q1IgKi8KKwlQT1JUQ1IoMTU1LAkweEU2MDUzMDlCKSwgLyogUE9SVDE1NUNSICovCisJUE9SVENSKDE1NiwJMHhFNjA1MDA5QyksIC8qIFBPUlQxNTZDUiAqLworCVBPUlRDUigxNTcsCTB4RTYwNTAwOUQpLCAvKiBQT1JUMTU3Q1IgKi8KKwlQT1JUQ1IoMTU4LAkweEU2MDUwMDlFKSwgLyogUE9SVDE1OENSICovCisJUE9SVENSKDE1OSwJMHhFNjA1MDA5RiksIC8qIFBPUlQxNTlDUiAqLworCVBPUlRDUigxNjAsCTB4RTYwNTAwQTApLCAvKiBQT1JUMTYwQ1IgKi8KKwlQT1JUQ1IoMTYxLAkweEU2MDUwMEExKSwgLyogUE9SVDE2MUNSICovCisJUE9SVENSKDE2MiwJMHhFNjA1MDBBMiksIC8qIFBPUlQxNjJDUiAqLworCVBPUlRDUigxNjMsCTB4RTYwNTAwQTMpLCAvKiBQT1JUMTYzQ1IgKi8KKwlQT1JUQ1IoMTY0LAkweEU2MDUwMEE0KSwgLyogUE9SVDE2NENSICovCisJUE9SVENSKDE2NSwJMHhFNjA1MDBBNSksIC8qIFBPUlQxNjVDUiAqLworCVBPUlRDUigxNjYsCTB4RTYwNTAwQTYpLCAvKiBQT1JUMTY2Q1IgKi8KKwlQT1JUQ1IoMTY3LAkweEU2MDUyMEE3KSwgLyogUE9SVDE2N0NSICovCisJUE9SVENSKDE2OCwJMHhFNjA1MjBBOCksIC8qIFBPUlQxNjhDUiAqLworCVBPUlRDUigxNjksCTB4RTYwNTIwQTkpLCAvKiBQT1JUMTY5Q1IgKi8KKwlQT1JUQ1IoMTcwLAkweEU2MDUyMEFBKSwgLyogUE9SVDE3MENSICovCisJUE9SVENSKDE3MSwJMHhFNjA1MjBBQiksIC8qIFBPUlQxNzFDUiAqLworCVBPUlRDUigxNzIsCTB4RTYwNTIwQUMpLCAvKiBQT1JUMTcyQ1IgKi8KKwlQT1JUQ1IoMTczLAkweEU2MDUyMEFEKSwgLyogUE9SVDE3M0NSICovCisJUE9SVENSKDE3NCwJMHhFNjA1MjBBRSksIC8qIFBPUlQxNzRDUiAqLworCVBPUlRDUigxNzUsCTB4RTYwNTIwQUYpLCAvKiBQT1JUMTc1Q1IgKi8KKwlQT1JUQ1IoMTc2LAkweEU2MDUyMEIwKSwgLyogUE9SVDE3NkNSICovCisJUE9SVENSKDE3NywJMHhFNjA1MjBCMSksIC8qIFBPUlQxNzdDUiAqLworCVBPUlRDUigxNzgsCTB4RTYwNTIwQjIpLCAvKiBQT1JUMTc4Q1IgKi8KKwlQT1JUQ1IoMTc5LAkweEU2MDUyMEIzKSwgLyogUE9SVDE3OUNSICovCisJUE9SVENSKDE4MCwJMHhFNjA1MjBCNCksIC8qIFBPUlQxODBDUiAqLworCVBPUlRDUigxODEsCTB4RTYwNTIwQjUpLCAvKiBQT1JUMTgxQ1IgKi8KKwlQT1JUQ1IoMTgyLAkweEU2MDUyMEI2KSwgLyogUE9SVDE4MkNSICovCisJUE9SVENSKDE4MywJMHhFNjA1MjBCNyksIC8qIFBPUlQxODNDUiAqLworCVBPUlRDUigxODQsCTB4RTYwNTIwQjgpLCAvKiBQT1JUMTg0Q1IgKi8KKwlQT1JUQ1IoMTg1LAkweEU2MDUyMEI5KSwgLyogUE9SVDE4NUNSICovCisJUE9SVENSKDE4NiwJMHhFNjA1MjBCQSksIC8qIFBPUlQxODZDUiAqLworCVBPUlRDUigxODcsCTB4RTYwNTIwQkIpLCAvKiBQT1JUMTg3Q1IgKi8KKwlQT1JUQ1IoMTg4LAkweEU2MDUyMEJDKSwgLyogUE9SVDE4OENSICovCisJUE9SVENSKDE4OSwJMHhFNjA1MjBCRCksIC8qIFBPUlQxODlDUiAqLworCVBPUlRDUigxOTAsCTB4RTYwNTIwQkUpLCAvKiBQT1JUMTkwQ1IgKi8KKworCXsgUElOTVVYX0NGR19SRUcoIk1TRUwxQ1IiLCAweEU2MDU4MDBDLCAzMiwgMSkgeworCQkJTVNFTDFDUl8zMV8wLAlNU0VMMUNSXzMxXzEsCisJCQlNU0VMMUNSXzMwXzAsCU1TRUwxQ1JfMzBfMSwKKwkJCU1TRUwxQ1JfMjlfMCwJTVNFTDFDUl8yOV8xLAorCQkJTVNFTDFDUl8yOF8wLAlNU0VMMUNSXzI4XzEsCisJCQlNU0VMMUNSXzI3XzAsCU1TRUwxQ1JfMjdfMSwKKwkJCU1TRUwxQ1JfMjZfMCwJTVNFTDFDUl8yNl8xLAorCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCQlNU0VMMUNSXzE2XzAsCU1TRUwxQ1JfMTZfMSwKKwkJCU1TRUwxQ1JfMTVfMCwJTVNFTDFDUl8xNV8xLAorCQkJTVNFTDFDUl8xNF8wLAlNU0VMMUNSXzE0XzEsCisJCQlNU0VMMUNSXzEzXzAsCU1TRUwxQ1JfMTNfMSwKKwkJCU1TRUwxQ1JfMTJfMCwJTVNFTDFDUl8xMl8xLAorCQkJMCwgMCwgMCwgMCwKKwkJCU1TRUwxQ1JfOV8wLAlNU0VMMUNSXzlfMSwKKwkJCU1TRUwxQ1JfOF8wLAlNU0VMMUNSXzhfMSwKKwkJCU1TRUwxQ1JfN18wLAlNU0VMMUNSXzdfMSwKKwkJCU1TRUwxQ1JfNl8wLAlNU0VMMUNSXzZfMSwKKwkJCTAsIDAsCisJCQlNU0VMMUNSXzRfMCwJTVNFTDFDUl80XzEsCisJCQlNU0VMMUNSXzNfMCwJTVNFTDFDUl8zXzEsCisJCQlNU0VMMUNSXzJfMCwJTVNFTDFDUl8yXzEsCisJCQkwLCAwLAorCQkJTVNFTDFDUl8wXzAsCU1TRUwxQ1JfMF8xLAorCQl9CisJfSwKKwl7IFBJTk1VWF9DRkdfUkVHKCJNU0VMM0NSIiwgMHhFNjA1ODAyMCwgMzIsIDEpIHsKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkJTVNFTDNDUl8yN18wLAlNU0VMM0NSXzI3XzEsCisJCQlNU0VMM0NSXzI2XzAsCU1TRUwzQ1JfMjZfMSwKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkJTVNFTDNDUl8yMV8wLAlNU0VMM0NSXzIxXzEsCisJCQlNU0VMM0NSXzIwXzAsCU1TRUwzQ1JfMjBfMSwKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkJTVNFTDNDUl8xNV8wLAlNU0VMM0NSXzE1XzEsCisJCQkwLCAwLCAwLCAwLAorCQkJMCwgMCwgMCwgMCwKKwkJCTAsIDAsCisJCQlNU0VMM0NSXzlfMCwJTVNFTDNDUl85XzEsCisJCQkwLCAwLCAwLCAwLAorCQkJTVNFTDNDUl82XzAsCU1TRUwzQ1JfNl8xLAorCQkJMCwgMCwgMCwgMCwKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkJfQorCX0sCisJeyBQSU5NVVhfQ0ZHX1JFRygiTVNFTDRDUiIsIDB4RTYwNTgwMjQsIDMyLCAxKSB7CisJCQkwLCAwLCAwLCAwLAorCQkJMCwgMCwgMCwgMCwKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkJMCwgMCwgMCwgMCwKKwkJCTAsIDAsIDAsIDAsCisJCQlNU0VMNENSXzE5XzAsCU1TRUw0Q1JfMTlfMSwKKwkJCU1TRUw0Q1JfMThfMCwJTVNFTDRDUl8xOF8xLAorCQkJTVNFTDRDUl8xN18wLAlNU0VMNENSXzE3XzEsCisJCQlNU0VMNENSXzE2XzAsCU1TRUw0Q1JfMTZfMSwKKwkJCU1TRUw0Q1JfMTVfMCwJTVNFTDRDUl8xNV8xLAorCQkJTVNFTDRDUl8xNF8wLAlNU0VMNENSXzE0XzEsCisJCQkwLCAwLCAwLCAwLAorCQkJMCwgMCwKKwkJCU1TRUw0Q1JfMTBfMCwJTVNFTDRDUl8xMF8xLAorCQkJMCwgMCwgMCwgMCwKKwkJCTAsIDAsCisJCQlNU0VMNENSXzZfMCwJTVNFTDRDUl82XzEsCisJCQkwLCAwLAorCQkJTVNFTDRDUl80XzAsCU1TRUw0Q1JfNF8xLAorCQkJMCwgMCwgMCwgMCwKKwkJCU1TRUw0Q1JfMV8wLAlNU0VMNENSXzFfMSwKKwkJCTAsIDAsCisJCX0KKwl9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2RhdGFfcmVnIHBpbm11eF9kYXRhX3JlZ3NbXSA9IHsKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVEwwOTVfMDY0RFIiLCAweEU2MDU0MDA4LCAzMikgeworCQkJUE9SVDk1X0RBVEEsIFBPUlQ5NF9EQVRBLCBQT1JUOTNfREFUQSwgUE9SVDkyX0RBVEEsCisJCQlQT1JUOTFfREFUQSwgUE9SVDkwX0RBVEEsIFBPUlQ4OV9EQVRBLCBQT1JUODhfREFUQSwKKwkJCVBPUlQ4N19EQVRBLCBQT1JUODZfREFUQSwgUE9SVDg1X0RBVEEsIFBPUlQ4NF9EQVRBLAorCQkJUE9SVDgzX0RBVEEsIFBPUlQ4Ml9EQVRBLCBQT1JUODFfREFUQSwgUE9SVDgwX0RBVEEsCisJCQlQT1JUNzlfREFUQSwgUE9SVDc4X0RBVEEsIFBPUlQ3N19EQVRBLCBQT1JUNzZfREFUQSwKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkJMCwgMCwgMCwgMCwKKwkJfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBPUlRMMTI3XzA5NkRSIiwgMHhFNjA1NDAwQywgMzIpIHsKKwkJCVBPUlQxMjdfREFUQSwgUE9SVDEyNl9EQVRBLCBQT1JUMTI1X0RBVEEsIFBPUlQxMjRfREFUQSwKKwkJCVBPUlQxMjNfREFUQSwgUE9SVDEyMl9EQVRBLCBQT1JUMTIxX0RBVEEsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkJMCwgMCwgMCwgMCwKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkJMCwgMCwgMCwgMCwKKwkJCVBPUlQ5OV9EQVRBLCAgUE9SVDk4X0RBVEEsICBQT1JUOTdfREFUQSwgIFBPUlQ5Nl9EQVRBLAorCQl9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVEwxNTlfMTI4RFIiLCAweEU2MDU0MDEwLCAzMikgeworCQkJUE9SVDE1OV9EQVRBLCBQT1JUMTU4X0RBVEEsIFBPUlQxNTdfREFUQSwgUE9SVDE1Nl9EQVRBLAorCQkJMCwgMCwgMCwgMCwKKwkJCVBPUlQxNTFfREFUQSwgUE9SVDE1MF9EQVRBLCBQT1JUMTQ5X0RBVEEsIFBPUlQxNDhfREFUQSwKKwkJCVBPUlQxNDdfREFUQSwgUE9SVDE0Nl9EQVRBLCBQT1JUMTQ1X0RBVEEsIFBPUlQxNDRfREFUQSwKKwkJCVBPUlQxNDNfREFUQSwgUE9SVDE0Ml9EQVRBLCBQT1JUMTQxX0RBVEEsIFBPUlQxNDBfREFUQSwKKwkJCVBPUlQxMzlfREFUQSwgUE9SVDEzOF9EQVRBLCBQT1JUMTM3X0RBVEEsIFBPUlQxMzZfREFUQSwKKwkJCVBPUlQxMzVfREFUQSwgUE9SVDEzNF9EQVRBLCBQT1JUMTMzX0RBVEEsIFBPUlQxMzJfREFUQSwKKwkJCVBPUlQxMzFfREFUQSwgUE9SVDEzMF9EQVRBLCBQT1JUMTI5X0RBVEEsIFBPUlQxMjhfREFUQSwKKwkJfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBPUlRMMTkxXzE2MERSIiwgMHhFNjA1NDAxNCwgMzIpIHsKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkJMCwgMCwgMCwgMCwKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkJMCwgMCwgMCwgMCwKKwkJCTAsCSAgICAgIFBPUlQxNjZfREFUQSwgUE9SVDE2NV9EQVRBLCBQT1JUMTY0X0RBVEEsCisJCQlQT1JUMTYzX0RBVEEsIFBPUlQxNjJfREFUQSwgUE9SVDE2MV9EQVRBLCBQT1JUMTYwX0RBVEEsCisJCX0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQT1JURDAzMV8wMDBEUiIsIDB4RTYwNTUwMDAsIDMyKSB7CisJCQlQT1JUMzFfREFUQSwgUE9SVDMwX0RBVEEsIFBPUlQyOV9EQVRBLCBQT1JUMjhfREFUQSwKKwkJCVBPUlQyN19EQVRBLCBQT1JUMjZfREFUQSwgUE9SVDI1X0RBVEEsIFBPUlQyNF9EQVRBLAorCQkJUE9SVDIzX0RBVEEsIFBPUlQyMl9EQVRBLCBQT1JUMjFfREFUQSwgUE9SVDIwX0RBVEEsCisJCQlQT1JUMTlfREFUQSwgUE9SVDE4X0RBVEEsIFBPUlQxN19EQVRBLCBQT1JUMTZfREFUQSwKKwkJCVBPUlQxNV9EQVRBLCBQT1JUMTRfREFUQSwgUE9SVDEzX0RBVEEsIFBPUlQxMl9EQVRBLAorCQkJUE9SVDExX0RBVEEsIFBPUlQxMF9EQVRBLCBQT1JUOV9EQVRBLCAgUE9SVDhfREFUQSwKKwkJCVBPUlQ3X0RBVEEsICBQT1JUNl9EQVRBLCAgUE9SVDVfREFUQSwgIFBPUlQ0X0RBVEEsCisJCQlQT1JUM19EQVRBLCAgUE9SVDJfREFUQSwgIFBPUlQxX0RBVEEsICBQT1JUMF9EQVRBLAorCQl9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVEQwNjNfMDMyRFIiLCAweEU2MDU1MDA0LCAzMikgeworCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKKwkJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCQkwLCAgICAgICAgICAgMCwgICAgICAgICAgIFBPUlQ0NV9EQVRBLCBQT1JUNDRfREFUQSwKKwkJCVBPUlQ0M19EQVRBLCBQT1JUNDJfREFUQSwgUE9SVDQxX0RBVEEsIFBPUlQ0MF9EQVRBLAorCQkJUE9SVDM5X0RBVEEsIFBPUlQzOF9EQVRBLCBQT1JUMzdfREFUQSwgUE9SVDM2X0RBVEEsCisJCQlQT1JUMzVfREFUQSwgUE9SVDM0X0RBVEEsIFBPUlQzM19EQVRBLCBQT1JUMzJfREFUQSwKKwkJfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBPUlRSMDYzXzAzMkRSIiwgMHhFNjA1NjAwNCwgMzIpIHsKKwkJCVBPUlQ2M19EQVRBLCBQT1JUNjJfREFUQSwgUE9SVDYxX0RBVEEsIFBPUlQ2MF9EQVRBLAorCQkJUE9SVDU5X0RBVEEsIFBPUlQ1OF9EQVRBLCBQT1JUNTdfREFUQSwgUE9SVDU2X0RBVEEsCisJCQlQT1JUNTVfREFUQSwgUE9SVDU0X0RBVEEsIFBPUlQ1M19EQVRBLCBQT1JUNTJfREFUQSwKKwkJCVBPUlQ1MV9EQVRBLCBQT1JUNTBfREFUQSwgUE9SVDQ5X0RBVEEsIFBPUlQ0OF9EQVRBLAorCQkJUE9SVDQ3X0RBVEEsIFBPUlQ0Nl9EQVRBLCAwLCAwLAorCQkJMCwgMCwgMCwgMCwKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLAorCQl9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVFIwOTVfMDY0RFIiLCAweEU2MDU2MDA4LCAzMikgeworCQkJMCwgMCwgMCwgMCwKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkJMCwgMCwgMCwgMCwKKwkJCTAsIDAsIDAsIDAsCisJCQlQT1JUNzVfREFUQSwgUE9SVDc0X0RBVEEsIFBPUlQ3M19EQVRBLCBQT1JUNzJfREFUQSwKKwkJCVBPUlQ3MV9EQVRBLCBQT1JUNzBfREFUQSwgUE9SVDY5X0RBVEEsIFBPUlQ2OF9EQVRBLAorCQkJUE9SVDY3X0RBVEEsIFBPUlQ2Nl9EQVRBLCBQT1JUNjVfREFUQSwgUE9SVDY0X0RBVEEsCisJCX0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQT1JUUjE5MV8xNjBEUiIsIDB4RTYwNTYwMTQsIDMyKSB7CisJCQkwLAkgICAgICBQT1JUMTkwX0RBVEEsIFBPUlQxODlfREFUQSwgUE9SVDE4OF9EQVRBLAorCQkJUE9SVDE4N19EQVRBLCBQT1JUMTg2X0RBVEEsIFBPUlQxODVfREFUQSwgUE9SVDE4NF9EQVRBLAorCQkJUE9SVDE4M19EQVRBLCBQT1JUMTgyX0RBVEEsIFBPUlQxODFfREFUQSwgUE9SVDE4MF9EQVRBLAorCQkJUE9SVDE3OV9EQVRBLCBQT1JUMTc4X0RBVEEsIFBPUlQxNzdfREFUQSwgUE9SVDE3Nl9EQVRBLAorCQkJUE9SVDE3NV9EQVRBLCBQT1JUMTc0X0RBVEEsIFBPUlQxNzNfREFUQSwgUE9SVDE3Ml9EQVRBLAorCQkJUE9SVDE3MV9EQVRBLCBQT1JUMTcwX0RBVEEsIFBPUlQxNjlfREFUQSwgUE9SVDE2OF9EQVRBLAorCQkJUE9SVDE2N19EQVRBLCAwLCAwLCAwLAorCQkJMCwgMCwgMCwgMCwKKwkJfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBPUlRVMTI3XzA5NkRSIiwgMHhFNjA1NzAwQywgMzIpIHsKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCBQT1JUMTIwX0RBVEEsCisJCQlQT1JUMTE5X0RBVEEsIFBPUlQxMThfREFUQSwgUE9SVDExN19EQVRBLCBQT1JUMTE2X0RBVEEsCisJCQlQT1JUMTE1X0RBVEEsIFBPUlQxMTRfREFUQSwgUE9SVDExM19EQVRBLCBQT1JUMTEyX0RBVEEsCisJCQlQT1JUMTExX0RBVEEsIFBPUlQxMTBfREFUQSwgUE9SVDEwOV9EQVRBLCBQT1JUMTA4X0RBVEEsCisJCQlQT1JUMTA3X0RBVEEsIFBPUlQxMDZfREFUQSwgUE9SVDEwNV9EQVRBLCBQT1JUMTA0X0RBVEEsCisJCQlQT1JUMTAzX0RBVEEsIFBPUlQxMDJfREFUQSwgUE9SVDEwMV9EQVRBLCBQT1JUMTAwX0RBVEEsCisJCQkwLCAwLCAwLCAwLAorCQl9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVFUxNTlfMTI4RFIiLCAweEU2MDU3MDEwLCAzMikgeworCQkJMCwgMCwgMCwgMCwKKwkJCVBPUlQxNTVfREFUQSwgUE9SVDE1NF9EQVRBLCBQT1JUMTUzX0RBVEEsIFBPUlQxNTJfREFUQSwKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkJMCwgMCwgMCwgMCwKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkJMCwgMCwgMCwgMCwKKwkJfQorCX0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfaW5mbyBzaDczNzJfcGlubXV4X2luZm8gPSB7CisJLm5hbWUgPSAic2g3MzcyX3BmYyIsCisJLnJlc2VydmVkX2lkID0gUElOTVVYX1JFU0VSVkVELAorCS5kYXRhID0geyBQSU5NVVhfREFUQV9CRUdJTiwgUElOTVVYX0RBVEFfRU5EIH0sCisJLmlucHV0ID0geyBQSU5NVVhfSU5QVVRfQkVHSU4sIFBJTk1VWF9JTlBVVF9FTkQgfSwKKwkuaW5wdXRfcHUgPSB7IFBJTk1VWF9JTlBVVF9QVUxMVVBfQkVHSU4sIFBJTk1VWF9JTlBVVF9QVUxMVVBfRU5EIH0sCisJLmlucHV0X3BkID0geyBQSU5NVVhfSU5QVVRfUFVMTERPV05fQkVHSU4sIFBJTk1VWF9JTlBVVF9QVUxMRE9XTl9FTkQgfSwKKwkub3V0cHV0ID0geyBQSU5NVVhfT1VUUFVUX0JFR0lOLCBQSU5NVVhfT1VUUFVUX0VORCB9LAorCS5tYXJrID0geyBQSU5NVVhfTUFSS19CRUdJTiwgUElOTVVYX01BUktfRU5EIH0sCisJLmZ1bmN0aW9uID0geyBQSU5NVVhfRlVOQ1RJT05fQkVHSU4sIFBJTk1VWF9GVU5DVElPTl9FTkQgfSwKKworCS5maXJzdF9ncGlvID0gR1BJT19QT1JUMCwKKwkubGFzdF9ncGlvID0gR1BJT19GTl9TREVOQ19EVl9DTEtJLAorCisJLmdwaW9zID0gcGlubXV4X2dwaW9zLAorCS5jZmdfcmVncyA9IHBpbm11eF9jb25maWdfcmVncywKKwkuZGF0YV9yZWdzID0gcGlubXV4X2RhdGFfcmVncywKKworCS5ncGlvX2RhdGEgPSBwaW5tdXhfZGF0YSwKKwkuZ3Bpb19kYXRhX3NpemUgPSBBUlJBWV9TSVpFKHBpbm11eF9kYXRhKSwKK307CisKK3ZvaWQgc2g3MzcyX3Bpbm11eF9pbml0KHZvaWQpCit7CisJcmVnaXN0ZXJfcGlubXV4KCZzaDczNzJfcGlubXV4X2luZm8pOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wZmMtc2g3Mzc3LmMgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3BmYy1zaDczNzcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTNlNjg0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9wZmMtc2g3Mzc3LmMKQEAgLTAsMCArMSwxNzY3IEBACisvKgorICogc2g3Mzc3IHByb2Nlc3NvciBzdXBwb3J0IC0gUEZDIGhhcmR3YXJlIGJsb2NrCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwICBOSVNISU1PVE8gSGlyb2tpCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlCisgKiBMaWNlbnNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxtYWNoL3NoNzM3Ny5oPgorCisjZGVmaW5lIF8xKGZuLCBwZngsIHNmeCkgZm4ocGZ4LCBzZngpCisKKyNkZWZpbmUgXzEwKGZuLCBwZngsIHNmeCkJCQkJXAorCV8xKGZuLCBwZngjIzAsIHNmeCksIF8xKGZuLCBwZngjIzEsIHNmeCksCVwKKwlfMShmbiwgcGZ4IyMyLCBzZngpLCBfMShmbiwgcGZ4IyMzLCBzZngpLAlcCisJXzEoZm4sIHBmeCMjNCwgc2Z4KSwgXzEoZm4sIHBmeCMjNSwgc2Z4KSwJXAorCV8xKGZuLCBwZngjIzYsIHNmeCksIF8xKGZuLCBwZngjIzcsIHNmeCksCVwKKwlfMShmbiwgcGZ4IyM4LCBzZngpLCBfMShmbiwgcGZ4IyM5LCBzZngpCisKKyNkZWZpbmUgXzkwKGZuLCBwZngsIHNmeCkJCQkJXAorCV8xMChmbiwgcGZ4IyMxLCBzZngpLCBfMTAoZm4sIHBmeCMjMiwgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyMzLCBzZngpLCBfMTAoZm4sIHBmeCMjNCwgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyM1LCBzZngpLCBfMTAoZm4sIHBmeCMjNiwgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyM3LCBzZngpLCBfMTAoZm4sIHBmeCMjOCwgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyM5LCBzZngpCisKKyNkZWZpbmUgXzI2NShmbiwgcGZ4LCBzZngpCQkJCVwKKwlfMTAoZm4sIHBmeCwgc2Z4KSwgXzkwKGZuLCBwZngsIHNmeCksCQlcCisJXzEwKGZuLCBwZngjIzEwLCBzZngpLAkJCQlcCisJXzEoZm4sIHBmeCMjMTEwLCBzZngpLCBfMShmbiwgcGZ4IyMxMTEsIHNmeCksCVwKKwlfMShmbiwgcGZ4IyMxMTIsIHNmeCksIF8xKGZuLCBwZngjIzExMywgc2Z4KSwJXAorCV8xKGZuLCBwZngjIzExNCwgc2Z4KSwgXzEoZm4sIHBmeCMjMTE1LCBzZngpLAlcCisJXzEoZm4sIHBmeCMjMTE2LCBzZngpLCBfMShmbiwgcGZ4IyMxMTcsIHNmeCksCVwKKwlfMShmbiwgcGZ4IyMxMTgsIHNmeCksCQkJCVwKKwlfMShmbiwgcGZ4IyMxMjgsIHNmeCksIF8xKGZuLCBwZngjIzEyOSwgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyMxMywgc2Z4KSwgXzEwKGZuLCBwZngjIzE0LCBzZngpLAlcCisJXzEwKGZuLCBwZngjIzE1LCBzZngpLAkJCQlcCisJXzEoZm4sIHBmeCMjMTYwLCBzZngpLCBfMShmbiwgcGZ4IyMxNjEsIHNmeCksCVwKKwlfMShmbiwgcGZ4IyMxNjIsIHNmeCksIF8xKGZuLCBwZngjIzE2Mywgc2Z4KSwJXAorCV8xKGZuLCBwZngjIzE2NCwgc2Z4KSwJCQkJXAorCV8xKGZuLCBwZngjIzE5Miwgc2Z4KSwgXzEoZm4sIHBmeCMjMTkzLCBzZngpLAlcCisJXzEoZm4sIHBmeCMjMTk0LCBzZngpLCBfMShmbiwgcGZ4IyMxOTUsIHNmeCksCVwKKwlfMShmbiwgcGZ4IyMxOTYsIHNmeCksIF8xKGZuLCBwZngjIzE5Nywgc2Z4KSwJXAorCV8xKGZuLCBwZngjIzE5OCwgc2Z4KSwgXzEoZm4sIHBmeCMjMTk5LCBzZngpLAlcCisJXzEwKGZuLCBwZngjIzIwLCBzZngpLCBfMTAoZm4sIHBmeCMjMjEsIHNmeCksCVwKKwlfMTAoZm4sIHBmeCMjMjIsIHNmeCksIF8xMChmbiwgcGZ4IyMyMywgc2Z4KSwJXAorCV8xMChmbiwgcGZ4IyMyNCwgc2Z4KSwgXzEwKGZuLCBwZngjIzI1LCBzZngpLAlcCisJXzEoZm4sIHBmeCMjMjYwLCBzZngpLCBfMShmbiwgcGZ4IyMyNjEsIHNmeCksCVwKKwlfMShmbiwgcGZ4IyMyNjIsIHNmeCksIF8xKGZuLCBwZngjIzI2Mywgc2Z4KSwJXAorCV8xKGZuLCBwZngjIzI2NCwgc2Z4KQorCisjZGVmaW5lIF9QT1JUKHBmeCwgc2Z4KSBwZngjI18jI3NmeAorI2RlZmluZSBQT1JUXzI2NShzdHIpIF8yNjUoX1BPUlQsIFBPUlQsIHN0cikKKworZW51bSB7CisJUElOTVVYX1JFU0VSVkVEID0gMCwKKworCVBJTk1VWF9EQVRBX0JFR0lOLAorCVBPUlRfMjY1KERBVEEpLCAvKiBQT1JUMF9EQVRBIC0+IFBPUlQyNjRfREFUQSAqLworCVBJTk1VWF9EQVRBX0VORCwKKworCVBJTk1VWF9JTlBVVF9CRUdJTiwKKwlQT1JUXzI2NShJTiksIC8qIFBPUlQwX0lOIC0+IFBPUlQyNjRfSU4gKi8KKwlQSU5NVVhfSU5QVVRfRU5ELAorCisJUElOTVVYX0lOUFVUX1BVTExVUF9CRUdJTiwKKwlQT1JUXzI2NShJTl9QVSksIC8qIFBPUlQwX0lOX1BVIC0+IFBPUlQyNjRfSU5fUFUgKi8KKwlQSU5NVVhfSU5QVVRfUFVMTFVQX0VORCwKKworCVBJTk1VWF9JTlBVVF9QVUxMRE9XTl9CRUdJTiwKKwlQT1JUXzI2NShJTl9QRCksIC8qIFBPUlQwX0lOX1BEIC0+IFBPUlQyNjRfSU5fUEQgKi8KKwlQSU5NVVhfSU5QVVRfUFVMTERPV05fRU5ELAorCisJUElOTVVYX09VVFBVVF9CRUdJTiwKKwlQT1JUXzI2NShPVVQpLCAvKiBQT1JUMF9PVVQgLT4gUE9SVDI2NF9PVVQgKi8KKwlQSU5NVVhfT1VUUFVUX0VORCwKKworCVBJTk1VWF9GVU5DVElPTl9CRUdJTiwKKwlQT1JUXzI2NShGTl9JTiksIC8qIFBPUlQwX0ZOX0lOIC0+IFBPUlQyNjRfRk5fSU4gKi8KKwlQT1JUXzI2NShGTl9PVVQpLCAvKiBQT1JUMF9GTl9PVVQgLT4gUE9SVDI2NF9GTl9PVVQgKi8KKwlQT1JUXzI2NShGTjApLCAvKiBQT1JUMF9GTjAgLT4gUE9SVDI2NF9GTjAgKi8KKwlQT1JUXzI2NShGTjEpLCAvKiBQT1JUMF9GTjEgLT4gUE9SVDI2NF9GTjEgKi8KKwlQT1JUXzI2NShGTjIpLCAvKiBQT1JUMF9GTjIgLT4gUE9SVDI2NF9GTjIgKi8KKwlQT1JUXzI2NShGTjMpLCAvKiBQT1JUMF9GTjMgLT4gUE9SVDI2NF9GTjMgKi8KKwlQT1JUXzI2NShGTjQpLCAvKiBQT1JUMF9GTjQgLT4gUE9SVDI2NF9GTjQgKi8KKwlQT1JUXzI2NShGTjUpLCAvKiBQT1JUMF9GTjUgLT4gUE9SVDI2NF9GTjUgKi8KKwlQT1JUXzI2NShGTjYpLCAvKiBQT1JUMF9GTjYgLT4gUE9SVDI2NF9GTjYgKi8KKwlQT1JUXzI2NShGTjcpLCAvKiBQT1JUMF9GTjcgLT4gUE9SVDI2NF9GTjcgKi8KKworCU1TRUxCQ1JfTVNFTDE3XzEsIE1TRUxCQ1JfTVNFTDE3XzAsCisJTVNFTEJDUl9NU0VMMTZfMSwgTVNFTEJDUl9NU0VMMTZfMCwKKwlQSU5NVVhfRlVOQ1RJT05fRU5ELAorCisJUElOTVVYX01BUktfQkVHSU4sCisJLyogU3BlY2lhbCBQdWxsLXVwIC8gUHVsbC1kb3duIEZ1bmN0aW9ucyAqLworCVBPUlQ2Nl9LRVlJTjBfUFVfTUFSSywgUE9SVDY3X0tFWUlOMV9QVV9NQVJLLAorCVBPUlQ2OF9LRVlJTjJfUFVfTUFSSywgUE9SVDY5X0tFWUlOM19QVV9NQVJLLAorCVBPUlQ3MF9LRVlJTjRfUFVfTUFSSywgUE9SVDcxX0tFWUlONV9QVV9NQVJLLAorCVBPUlQ3Ml9LRVlJTjZfUFVfTUFSSywKKworCS8qIDU1LTEgKi8KKwlWQlVTXzBfTUFSSywKKwlDUE9SVDBfTUFSSywKKwlDUE9SVDFfTUFSSywKKwlDUE9SVDJfTUFSSywKKwlDUE9SVDNfTUFSSywKKwlDUE9SVDRfTUFSSywKKwlDUE9SVDVfTUFSSywKKwlDUE9SVDZfTUFSSywKKwlDUE9SVDdfTUFSSywKKwlDUE9SVDhfTUFSSywKKwlDUE9SVDlfTUFSSywKKwlDUE9SVDEwX01BUkssCisJQ1BPUlQxMV9NQVJLLCBTSU4yX01BUkssCisJQ1BPUlQxMl9NQVJLLCBYQ1RTMl9NQVJLLAorCUNQT1JUMTNfTUFSSywgUkZTUE80X01BUkssCisJQ1BPUlQxNF9NQVJLLCBSRlNQTzVfTUFSSywKKwlDUE9SVDE1X01BUkssIFNDSUZBMF9TQ0tfTUFSSywgR1BTX0FHQzJfTUFSSywKKwlDUE9SVDE2X01BUkssIFNDSUZBMF9UWERfTUFSSywgR1BTX0FHQzNfTUFSSywKKwlDUE9SVDE3X0lDX09FX01BUkssIFNPVVQyX01BUkssCisJQ1BPUlQxOF9NQVJLLCBYUlRTMl9NQVJLLCBQT1JUMTlfVklPX0NLTzJfTUFSSywKKwlDUE9SVDE5X01QT1JUMV9NQVJLLAorCUNQT1JUMjBfTUFSSywgUkZTUE82X01BUkssCisJQ1BPUlQyMV9NQVJLLCBTVEFUVVMwX01BUkssCisJQ1BPUlQyMl9NQVJLLCBTVEFUVVMxX01BUkssCisJQ1BPUlQyM19NQVJLLCBTVEFUVVMyX01BUkssIFJGU1BPN19NQVJLLAorCUJfU1lOTEQxX01BUkssCisJQl9TWU5MRDJfTUFSSywgU1lTRU5NU0tfTUFSSywKKwlYTUFJTlBTX01BUkssCisJWERJVlBTX01BUkssCisJWElEUlNUX01BUkssCisJSURDTEtfTUFSSywgSUNfRFBfTUFSSywKKwlJRElPX01BUkssIElDX0RNX01BUkssCisJU09VVDFfTUFSSywgU0NJRkE0X1RYRF9NQVJLLCBNMDJfQkVSREFUX01BUkssCisJU0lOMV9NQVJLLCBTQ0lGQTRfUlhEX01BUkssIFhXVVBfTUFSSywKKwlYUlRTMV9NQVJLLCBTQ0lGQTRfUlRTX01BUkssIE0wM19CRVJDTEtfTUFSSywKKwlYQ1RTMV9NQVJLLCBTQ0lGQTRfQ1RTX01BUkssCisJUENNQ0xLT19NQVJLLAorCVNZTkM4S09fTUFSSywKKworCS8qIDU1LTIgKi8KKwlETlBDTV9BX01BUkssCisJVVBQQ01fQV9NQVJLLAorCVZBQ0tfTUFSSywKKwlYVEFMQjFMX01BUkssCisJR1BTX0FHQzFfTUFSSywgU0NJRkEwX1JUU19NQVJLLAorCUdQU19BR0M0X01BUkssIFNDSUZBMF9SWERfTUFSSywKKwlHUFNfUFdSRE9XTl9NQVJLLCBTQ0lGQTBfQ1RTX01BUkssCisJR1BTX0lNX01BUkssCisJR1BTX0lTX01BUkssCisJR1BTX1FNX01BUkssCisJR1BTX1FTX01BUkssCisJRk1TT0NLX01BUkssIFBPUlQ0OV9JUkRBX09VVF9NQVJLLCBQT1JUNDlfSVJPVVRfTUFSSywKKwlGTVNPT0xSX01BUkssIEJCSUYyX1RTWU5DMl9NQVJLLCBUUFUyVE8yX01BUkssIElQT1JUM19NQVJLLAorCUZNU0lPTFJfTUFSSywKKwlGTVNPT0JUX01BUkssIEJCSUYyX1RTQ0syX01BUkssIFRQVTJUTzNfTUFSSywgT1BPUlQxX01BUkssCisJRk1TSU9CVF9NQVJLLAorCUZNU09TTERfTUFSSywgQkJJRjJfVFhEMl9NQVJLLCBPUE9SVDJfTUFSSywKKwlGTVNPSUxSX01BUkssIFBPUlQ1M19JUkRBX0lOX01BUkssIFRQVTNUTzNfTUFSSywgT1BPUlQzX01BUkssCisJRk1TSUlMUl9NQVJLLAorCUZNU09JQlRfTUFSSywgUE9SVDU0X0lSREFfRklSU0VMX01BUkssIFRQVTNUTzJfTUFSSywgRk1TSUlCVF9NQVJLLAorCUZNU0lTTERfTUFSSywgTUZHMF9PVVQxX01BUkssIFRQVTBUTzBfTUFSSywKKwlBMF9FQTBfTUFSSywgQlNfTUFSSywKKwlBMTJfRUExMl9NQVJLLCBQT1JUNThfVklPX0NLT1JfTUFSSywgVFBVNFRPMl9NQVJLLAorCUExM19FQTEzX01BUkssIFBPUlQ1OV9JUk9VVF9NQVJLLCBNRkcwX09VVDJfTUFSSywgVFBVMFRPMV9NQVJLLAorCUExNF9FQTE0X01BUkssIFBPUlQ2MF9LRVlPVVQ1X01BUkssCisJQTE1X0VBMTVfTUFSSywgUE9SVDYxX0tFWU9VVDRfTUFSSywKKwlBMTZfRUExNl9NQVJLLCBQT1JUNjJfS0VZT1VUM19NQVJLLCBNU0lPRjBfU1MxX01BUkssCisJQTE3X0VBMTdfTUFSSywgUE9SVDYzX0tFWU9VVDJfTUFSSywgTVNJT0YwX1RTWU5DX01BUkssCisJQTE4X0VBMThfTUFSSywgUE9SVDY0X0tFWU9VVDFfTUFSSywgTVNJT0YwX1RTQ0tfTUFSSywKKwlBMTlfRUExOV9NQVJLLCBQT1JUNjVfS0VZT1VUMF9NQVJLLCBNU0lPRjBfVFhEX01BUkssCisJQTIwX0VBMjBfTUFSSywgUE9SVDY2X0tFWUlOMF9NQVJLLCBNU0lPRjBfUlNDS19NQVJLLAorCUEyMV9FQTIxX01BUkssIFBPUlQ2N19LRVlJTjFfTUFSSywgTVNJT0YwX1JTWU5DX01BUkssCisJQTIyX0VBMjJfTUFSSywgUE9SVDY4X0tFWUlOMl9NQVJLLCBNU0lPRjBfTUNLMF9NQVJLLAorCUEyM19FQTIzX01BUkssIFBPUlQ2OV9LRVlJTjNfTUFSSywgTVNJT0YwX01DSzFfTUFSSywKKwlBMjRfRUEyNF9NQVJLLCBQT1JUNzBfS0VZSU40X01BUkssIE1TSU9GMF9SWERfTUFSSywKKwlBMjVfRUEyNV9NQVJLLCBQT1JUNzFfS0VZSU41X01BUkssIE1TSU9GMF9TUzJfTUFSSywKKwlBMjZfTUFSSywgUE9SVDcyX0tFWUlONl9NQVJLLAorCUQwX0VEMF9OQUYwX01BUkssCisJRDFfRUQxX05BRjFfTUFSSywKKwlEMl9FRDJfTkFGMl9NQVJLLAorCUQzX0VEM19OQUYzX01BUkssCisJRDRfRUQ0X05BRjRfTUFSSywKKwlENV9FRDVfTkFGNV9NQVJLLAorCUQ2X0VENl9OQUY2X01BUkssCisJRDdfRUQ3X05BRjdfTUFSSywKKwlEOF9FRDhfTkFGOF9NQVJLLAorCUQ5X0VEOV9OQUY5X01BUkssCisJRDEwX0VEMTBfTkFGMTBfTUFSSywKKwlEMTFfRUQxMV9OQUYxMV9NQVJLLAorCUQxMl9FRDEyX05BRjEyX01BUkssCisJRDEzX0VEMTNfTkFGMTNfTUFSSywKKwlEMTRfRUQxNF9OQUYxNF9NQVJLLAorCUQxNV9FRDE1X05BRjE1X01BUkssCisJQ1M0X01BUkssCisJQ1M1QV9NQVJLLCBGTVNJQ0tfTUFSSywKKwlDUzVCX01BUkssIEZDRTFfTUFSSywKKworCS8qIDU1LTMgKi8KKwlDUzZCX01BUkssIFhDUzJfTUFSSywgQ1M2QV9NQVJLLCBEQUNLMF9NQVJLLAorCUZDRTBfTUFSSywKKwlXQUlUX01BUkssIERSRVEwX01BUkssCisJUkRfWFJEX01BUkssCisJV0UwX1hXUjBfRldFX01BUkssCisJV0UxX1hXUjFfTUFSSywKKwlGUkJfTUFSSywKKwlDS09fTUFSSywKKwlOQlJTVE9VVF9NQVJLLAorCU5CUlNUX01BUkssCisJR1BTX0VQUFNJTl9NQVJLLAorCUxBVENIUFVMU0VfTUFSSywKKwlMVEVTSUdOQUxfTUFSSywKKwlMRUdBQ1lTVEFURV9NQVJLLAorCVRDS09OX01BUkssCisJVklPX1ZEX01BUkssIFBPUlQxMjhfS0VZT1VUMF9NQVJLLCBJUE9SVDBfTUFSSywKKwlWSU9fSERfTUFSSywgUE9SVDEyOV9LRVlPVVQxX01BUkssIElQT1JUMV9NQVJLLAorCVZJT19EMF9NQVJLLCBQT1JUMTMwX0tFWU9VVDJfTUFSSywgUE9SVDEzMF9NU0lPRjJfUlhEX01BUkssCisJVklPX0QxX01BUkssIFBPUlQxMzFfS0VZT1VUM19NQVJLLCBQT1JUMTMxX01TSU9GMl9TUzFfTUFSSywKKwlWSU9fRDJfTUFSSywgUE9SVDEzMl9LRVlPVVQ0X01BUkssIFBPUlQxMzJfTVNJT0YyX1NTMl9NQVJLLAorCVZJT19EM19NQVJLLCBQT1JUMTMzX0tFWU9VVDVfTUFSSywgUE9SVDEzM19NU0lPRjJfVFNZTkNfTUFSSywKKwlWSU9fRDRfTUFSSywgUE9SVDEzNF9LRVlJTjBfTUFSSywgUE9SVDEzNF9NU0lPRjJfVFhEX01BUkssCisJVklPX0Q1X01BUkssIFBPUlQxMzVfS0VZSU4xX01BUkssIFBPUlQxMzVfTVNJT0YyX1RTQ0tfTUFSSywKKwlWSU9fRDZfTUFSSywgUE9SVDEzNl9LRVlJTjJfTUFSSywKKwlWSU9fRDdfTUFSSywgUE9SVDEzN19LRVlJTjNfTUFSSywKKwlWSU9fRDhfTUFSSywgTTlfU0xDRF9BMDFfTUFSSywgUE9SVDEzOF9GU0lBT01DX01BUkssCisJVklPX0Q5X01BUkssIE0xMF9TTENEX0NLMV9NQVJLLCBQT1JUMTM5X0ZTSUFPTFJfTUFSSywKKwlWSU9fRDEwX01BUkssIE0xMV9TTENEX1NPMV9NQVJLLCBUUFUwVE8yX01BUkssIFBPUlQxNDBfRlNJQU9CVF9NQVJLLAorCVZJT19EMTFfTUFSSywgTTEyX1NMQ0RfQ0UxX01BUkssIFRQVTBUTzNfTUFSSywgUE9SVDE0MV9GU0lBT1NMRF9NQVJLLAorCVZJT19EMTJfTUFSSywgTTEzX0JTV19NQVJLLCBQT1JUMTQyX0ZTSUFDS19NQVJLLAorCVZJT19EMTNfTUFSSywgTTE0X0dTV19NQVJLLCBQT1JUMTQzX0ZTSUFJTFJfTUFSSywKKwlWSU9fRDE0X01BUkssIE0xNV9SU1dfTUFSSywgUE9SVDE0NF9GU0lBSUJUX01BUkssCisJVklPX0QxNV9NQVJLLCBUUFUxVE8zX01BUkssIFBPUlQxNDVfRlNJQUlTTERfTUFSSywKKwlWSU9fQ0xLX01BUkssIFBPUlQxNDZfS0VZSU40X01BUkssIElQT1JUMl9NQVJLLAorCVZJT19GSUVMRF9NQVJLLCBQT1JUMTQ3X0tFWUlONV9NQVJLLAorCVZJT19DS09fTUFSSywgUE9SVDE0OF9LRVlJTjZfTUFSSywKKwlBMjdfTUFSSywgUkRXUl9YV0VfTUFSSywgTUZHMF9JTjFfTUFSSywKKwlNRkcwX0lOMl9NQVJLLAorCVRTX1NQU1lOQzNfTUFSSywgTVNJT0YyX1JTQ0tfTUFSSywKKwlUU19TREFUM19NQVJLLCBNU0lPRjJfUlNZTkNfTUFSSywKKwlUUFUxVE8yX01BUkssIFRTX1NERU4zX01BUkssIFBPUlQxNTNfTVNJT0YyX1NTMV9NQVJLLAorCVNPVVQzX01BUkssIFNDSUZBMl9UWEQxX01BUkssIE1TSU9GMl9NQ0swX01BUkssCisJU0lOM19NQVJLLCBTQ0lGQTJfUlhEMV9NQVJLLCBNU0lPRjJfTUNLMV9NQVJLLAorCVhSVFMzX01BUkssIFNDSUZBMl9SVFMxX01BUkssIFBPUlQxNTZfTVNJT0YyX1NTMl9NQVJLLAorCVhDVFMzX01BUkssIFNDSUZBMl9DVFMxX01BUkssIFBPUlQxNTdfTVNJT0YyX1JYRF9NQVJLLAorCisJLyogNTUtNCAqLworCURJTlRfTUFSSywgU0NJRkEyX1NDSzFfTUFSSywgVFNfU0NLM19NQVJLLAorCVBPUlQxNTlfU0NJRkJfU0NLX01BUkssIFBPUlQxNTlfU0NJRkE1X1NDS19NQVJLLCBOTUlfTUFSSywKKwlQT1JUMTYwX1NDSUZCX1RYRF9NQVJLLCBQT1JUMTYwX1NDSUZBNV9UWERfTUFSSywgU09VVDBfTUFSSywKKwlQT1JUMTYxX1NDSUZCX0NUU19NQVJLLCBQT1JUMTYxX1NDSUZBNV9DVFNfTUFSSywgWENUUzBfTUFSSywKKwlNRkczX0lOMl9NQVJLLAorCVBPUlQxNjJfU0NJRkJfUlhEX01BUkssIFBPUlQxNjJfU0NJRkE1X1JYRF9NQVJLLCBTSU4wX01BUkssCisJTUZHM19JTjFfTUFSSywKKwlQT1JUMTYzX1NDSUZCX1JUU19NQVJLLCBQT1JUMTYzX1NDSUZBNV9SVFNfTUFSSywgWFJUUzBfTUFSSywKKwlNRkczX09VVDFfTUFSSywgVFBVM1RPMF9NQVJLLAorCUxDREQwX01BUkssIFBPUlQxOTJfS0VZT1VUMF9NQVJLLCBFWFRfQ0tJX01BUkssCisJTENERDFfTUFSSywgUE9SVDE5M19LRVlPVVQxX01BUkssIFBPUlQxOTNfU0NJRkE1X0NUU19NQVJLLAorCUJCSUYyX1RTWU5DMV9NQVJLLAorCUxDREQyX01BUkssIFBPUlQxOTRfS0VZT1VUMl9NQVJLLCBQT1JUMTk0X1NDSUZBNV9SVFNfTUFSSywKKwlCQklGMl9UU0NLMV9NQVJLLAorCUxDREQzX01BUkssIFBPUlQxOTVfS0VZT1VUM19NQVJLLCBQT1JUMTk1X1NDSUZBNV9SWERfTUFSSywKKwlCQklGMl9UWEQxX01BUkssCisJTENERDRfTUFSSywgUE9SVDE5Nl9LRVlPVVQ0X01BUkssIFBPUlQxOTZfU0NJRkE1X1RYRF9NQVJLLAorCUxDREQ1X01BUkssIFBPUlQxOTdfS0VZT1VUNV9NQVJLLCBQT1JUMTk3X1NDSUZBNV9TQ0tfTUFSSywKKwlNRkcyX09VVDJfTUFSSywKKwlUUFUyVE8xX01BUkssCisJTENERDZfTUFSSywgWFdSMl9NQVJLLAorCUxDREQ3X01BUkssIFRQVTRUTzFfTUFSSywgTUZHNF9PVVQyX01BUkssIFhXUjNfTUFSSywKKwlMQ0REOF9NQVJLLCBQT1JUMjAwX0tFWUlOMF9NQVJLLCBWSU9fRFIwX01BUkssIEQxNl9NQVJLLCBFRDE2X01BUkssCisJTENERDlfTUFSSywgUE9SVDIwMV9LRVlJTjFfTUFSSywgVklPX0RSMV9NQVJLLCBEMTdfTUFSSywgRUQxN19NQVJLLAorCUxDREQxMF9NQVJLLCBQT1JUMjAyX0tFWUlOMl9NQVJLLCBWSU9fRFIyX01BUkssIEQxOF9NQVJLLCBFRDE4X01BUkssCisJTENERDExX01BUkssIFBPUlQyMDNfS0VZSU4zX01BUkssIFZJT19EUjNfTUFSSywgRDE5X01BUkssIEVEMTlfTUFSSywKKwlMQ0REMTJfTUFSSywgUE9SVDIwNF9LRVlJTjRfTUFSSywgVklPX0RSNF9NQVJLLCBEMjBfTUFSSywgRUQyMF9NQVJLLAorCUxDREQxM19NQVJLLCBQT1JUMjA1X0tFWUlONV9NQVJLLCBWSU9fRFI1X01BUkssIEQyMV9NQVJLLCBFRDIxX01BUkssCisJTENERDE0X01BUkssIFBPUlQyMDZfS0VZSU42X01BUkssIFZJT19EUjZfTUFSSywgRDIyX01BUkssIEVEMjJfTUFSSywKKwlMQ0REMTVfTUFSSywgUE9SVDIwN19NU0lPRjBMX1NTMV9NQVJLLCBQT1JUMjA3X0tFWU9VVDBfTUFSSywKKwlWSU9fRFI3X01BUkssIEQyM19NQVJLLCBFRDIzX01BUkssCisJTENERDE2X01BUkssIFBPUlQyMDhfTVNJT0YwTF9TUzJfTUFSSywgUE9SVDIwOF9LRVlPVVQxX01BUkssCisJVklPX1ZEUl9NQVJLLCBEMjRfTUFSSywgRUQyNF9NQVJLLAorCUxDREQxN19NQVJLLCBQT1JUMjA5X0tFWU9VVDJfTUFSSywgVklPX0hEUl9NQVJLLCBEMjVfTUFSSywgRUQyNV9NQVJLLAorCUxDREQxOF9NQVJLLCBEUkVRMl9NQVJLLCBQT1JUMjEwX01TSU9GMExfU1MxX01BUkssIEQyNl9NQVJLLCBFRDI2X01BUkssCisJTENERDE5X01BUkssIFBPUlQyMTFfTVNJT0YwTF9TUzJfTUFSSywgRDI3X01BUkssIEVEMjdfTUFSSywKKwlMQ0REMjBfTUFSSywgVFNfU1BTWU5DMV9NQVJLLCBNU0lPRjBMX01DSzBfTUFSSywgRDI4X01BUkssIEVEMjhfTUFSSywKKwlMQ0REMjFfTUFSSywgVFNfU0RBVDFfTUFSSywgTVNJT0YwTF9NQ0sxX01BUkssIEQyOV9NQVJLLCBFRDI5X01BUkssCisJTENERDIyX01BUkssIFRTX1NERU4xX01BUkssIE1TSU9GMExfUlNDS19NQVJLLCBEMzBfTUFSSywgRUQzMF9NQVJLLAorCUxDREQyM19NQVJLLCBUU19TQ0sxX01BUkssIE1TSU9GMExfUlNZTkNfTUFSSywgRDMxX01BUkssIEVEMzFfTUFSSywKKwlMQ0REQ0tfTUFSSywgTENEV1JfTUFSSywgUE9SVDIxNl9LRVlPVVQzX01BUkssIFZJT19DTEtSX01BUkssCisJTENEUkRfTUFSSywgREFDSzJfTUFSSywgTVNJT0YwTF9UU1lOQ19NQVJLLAorCUxDREhTWU5fTUFSSywgTENEQ1NfTUFSSywgTENEQ1MyX01BUkssIERBQ0szX01BUkssCisJUE9SVDIxOF9WSU9fQ0tPUl9NQVJLLCBQT1JUMjE4X0tFWU9VVDRfTUFSSywKKwlMQ0RESVNQX01BUkssIExDRFJTX01BUkssIERSRVEzX01BUkssIE1TSU9GMExfVFNDS19NQVJLLAorCUxDRFZTWU5fTUFSSywgTENEVlNZTjJfTUFSSywgUE9SVDIyMF9LRVlPVVQ1X01BUkssCisJTENETENMS19NQVJLLCBEUkVRMV9NQVJLLCBQV0VOX01BUkssIE1TSU9GMExfUlhEX01BUkssCisJTENERE9OX01BUkssIExDRERPTjJfTUFSSywgREFDSzFfTUFSSywgT1ZDTl9NQVJLLCBNU0lPRjBMX1RYRF9NQVJLLAorCVNDSUZBMV9UWERfTUFSSywgT1ZDTjJfTUFSSywKKwlFWFRMUF9NQVJLLCBTQ0lGQTFfU0NLX01BUkssIFVTQlRFUk1fTUFSSywgUE9SVDIyNl9WSU9fQ0tPMl9NQVJLLAorCVNDSUZBMV9SVFNfTUFSSywgSURJTl9NQVJLLAorCVNDSUZBMV9SWERfTUFSSywKKwlTQ0lGQTFfQ1RTX01BUkssIE1GRzFfSU4xX01BUkssCisJTVNJT0YxX1RYRF9NQVJLLCBTQ0lGQTJfVFhEMl9NQVJLLCBQT1JUMjMwX0ZTSUFPTUNfTUFSSywKKwlNU0lPRjFfVFNZTkNfTUFSSywgU0NJRkEyX0NUUzJfTUFSSywgUE9SVDIzMV9GU0lBT0xSX01BUkssCisJTVNJT0YxX1RTQ0tfTUFSSywgU0NJRkEyX1NDSzJfTUFSSywgUE9SVDIzMl9GU0lBT0JUX01BUkssCisJTVNJT0YxX1JYRF9NQVJLLCBTQ0lGQTJfUlhEMl9NQVJLLCBHUFNfVkNPVFJJR19NQVJLLAorCVBPUlQyMzNfRlNJQUNLX01BUkssCisJTVNJT0YxX1JTQ0tfTUFSSywgU0NJRkEyX1JUUzJfTUFSSywgUE9SVDIzNF9GU0lBT1NMRF9NQVJLLAorCU1TSU9GMV9SU1lOQ19NQVJLLCBPUE9SVDBfTUFSSywgTUZHMV9JTjJfTUFSSywgUE9SVDIzNV9GU0lBSUxSX01BUkssCisJTVNJT0YxX01DSzBfTUFSSywgSTJDX1NEQTJfTUFSSywgUE9SVDIzNl9GU0lBSUJUX01BUkssCisJTVNJT0YxX01DSzFfTUFSSywgSTJDX1NDTDJfTUFSSywgUE9SVDIzN19GU0lBSVNMRF9NQVJLLAorCU1TSU9GMV9TUzFfTUFSSywgRURCR1JFUTNfTUFSSywKKworCS8qIDU1LTUgKi8KKwlNU0lPRjFfU1MyX01BUkssCisJU0NJRkE2X1RYRF9NQVJLLAorCVBPUlQyNDFfSVJEQV9PVVRfTUFSSywgUE9SVDI0MV9JUk9VVF9NQVJLLCBNRkc0X09VVDFfTUFSSywKKwlUUFU0VE8wX01BUkssCisJUE9SVDI0Ml9JUkRBX0lOX01BUkssIE1GRzRfSU4yX01BUkssCisJUE9SVDI0M19JUkRBX0ZJUlNFTF9NQVJLLCBQT1JUMjQzX1ZJT19DS08yX01BUkssCisJUE9SVDI0NF9TQ0lGQTVfQ1RTX01BUkssIE1GRzJfSU4xX01BUkssIFBPUlQyNDRfU0NJRkJfQ1RTX01BUkssCisJUE9SVDI0NF9NU0lPRjJfUlhEX01BUkssCisJUE9SVDI0NV9TQ0lGQTVfUlRTX01BUkssIE1GRzJfSU4yX01BUkssIFBPUlQyNDVfU0NJRkJfUlRTX01BUkssCisJUE9SVDI0NV9NU0lPRjJfVFhEX01BUkssCisJUE9SVDI0Nl9TQ0lGQTVfUlhEX01BUkssIE1GRzFfT1VUMV9NQVJLLCBQT1JUMjQ2X1NDSUZCX1JYRF9NQVJLLAorCVRQVTFUTzBfTUFSSywKKwlQT1JUMjQ3X1NDSUZBNV9UWERfTUFSSywgTUZHM19PVVQyX01BUkssIFBPUlQyNDdfU0NJRkJfVFhEX01BUkssCisJVFBVM1RPMV9NQVJLLAorCVBPUlQyNDhfU0NJRkE1X1NDS19NQVJLLCBNRkcyX09VVDFfTUFSSywgUE9SVDI0OF9TQ0lGQl9TQ0tfTUFSSywKKwlUUFUyVE8wX01BUkssCisJUE9SVDI0OF9NU0lPRjJfVFNDS19NQVJLLAorCVBPUlQyNDlfSVJPVVRfTUFSSywgTUZHNF9JTjFfTUFSSywgUE9SVDI0OV9NU0lPRjJfVFNZTkNfTUFSSywKKwlTREhJQ0xLMF9NQVJLLCBUQ0syX1NXQ0xLX01DMF9NQVJLLAorCVNESElDRDBfTUFSSywKKwlTREhJRDBfMF9NQVJLLCBUTVMyX1NXRElPX01DMF9NQVJLLAorCVNESElEMF8xX01BUkssIFRETzJfU1dPMF9NQzBfTUFSSywKKwlTREhJRDBfMl9NQVJLLCBUREkyX01BUkssCisJU0RISUQwXzNfTUFSSywgUlRDSzJfU1dPMV9NQzBfTUFSSywKKwlTREhJQ01EMF9NQVJLLCBUUlNUMl9NQVJLLAorCVNESElXUDBfTUFSSywgRURCR1JFUTJfTUFSSywKKwlTREhJQ0xLMV9NQVJLLCBUQ0szX1NXQ0xLX01DMV9NQVJLLAorCVNESElEMV8wX01BUkssIE0xMV9TTENEX1NPMl9NQVJLLCBUU19TUFNZTkMyX01BUkssCisJVE1TM19TV0RJT19NQzFfTUFSSywKKwlTREhJRDFfMV9NQVJLLCBNOV9TTENEX0EwMl9NQVJLLCBUU19TREFUMl9NQVJLLCBURE8zX1NXTzBfTUMxX01BUkssCisJU0RISUQxXzJfTUFSSywgTTEwX1NMQ0RfQ0syX01BUkssIFRTX1NERU4yX01BUkssIFRESTNfTUFSSywKKwlTREhJRDFfM19NQVJLLCBNMTJfU0xDRF9DRTJfTUFSSywgVFNfU0NLMl9NQVJLLCBSVENLM19TV08xX01DMV9NQVJLLAorCVNESElDTUQxX01BUkssIFRSU1QzX01BUkssCisJUkVTRVRPVVRTX01BUkssCisJUElOTVVYX01BUktfRU5ELAorfTsKKworI2RlZmluZSBQT1JUX0RBVEFfSShucikJXAorCVBJTk1VWF9EQVRBKFBPUlQjI25yIyNfREFUQSwgUE9SVCMjbnIjI19GTjAsIFBPUlQjI25yIyNfSU4pCisKKyNkZWZpbmUgUE9SVF9EQVRBX0lfUEQobnIpCVwKKwlQSU5NVVhfREFUQShQT1JUIyNuciMjX0RBVEEsIFBPUlQjI25yIyNfRk4wLAlcCisJCQkJUE9SVCMjbnIjI19JTiwgUE9SVCMjbnIjI19JTl9QRCkKKworI2RlZmluZSBQT1JUX0RBVEFfSV9QVShucikJXAorCVBJTk1VWF9EQVRBKFBPUlQjI25yIyNfREFUQSwgUE9SVCMjbnIjI19GTjAsCVwKKwkJCQlQT1JUIyNuciMjX0lOLCBQT1JUIyNuciMjX0lOX1BVKQorCisjZGVmaW5lIFBPUlRfREFUQV9JX1BVX1BEKG5yKQlcCisJUElOTVVYX0RBVEEoUE9SVCMjbnIjI19EQVRBLCBQT1JUIyNuciMjX0ZOMCwJXAorCQkJCVBPUlQjI25yIyNfSU4sIFBPUlQjI25yIyNfSU5fUEQsCVwKKwkJCQlQT1JUIyNuciMjX0lOX1BVKQorCisjZGVmaW5lIFBPUlRfREFUQV9PKG5yKQlcCisJUElOTVVYX0RBVEEoUE9SVCMjbnIjI19EQVRBLCBQT1JUIyNuciMjX0ZOMCwJXAorCQkJCVBPUlQjI25yIyNfT1VUKQorCisjZGVmaW5lIFBPUlRfREFUQV9JTyhucikJXAorCVBJTk1VWF9EQVRBKFBPUlQjI25yIyNfREFUQSwgUE9SVCMjbnIjI19GTjAsCVwKKwkJCQlQT1JUIyNuciMjX09VVCwgUE9SVCMjbnIjI19JTikKKworI2RlZmluZSBQT1JUX0RBVEFfSU9fUEQobnIpCVwKKwlQSU5NVVhfREFUQShQT1JUIyNuciMjX0RBVEEsIFBPUlQjI25yIyNfRk4wLAlcCisJCQkJUE9SVCMjbnIjI19PVVQsIFBPUlQjI25yIyNfSU4sCQlcCisJCQkJUE9SVCMjbnIjI19JTl9QRCkKKworI2RlZmluZSBQT1JUX0RBVEFfSU9fUFUobnIpCVwKKwlQSU5NVVhfREFUQShQT1JUIyNuciMjX0RBVEEsIFBPUlQjI25yIyNfRk4wLAlcCisJCQkJUE9SVCMjbnIjI19PVVQsIFBPUlQjI25yIyNfSU4sCQlcCisJCQkJUE9SVCMjbnIjI19JTl9QVSkKKworI2RlZmluZSBQT1JUX0RBVEFfSU9fUFVfUEQobnIpCVwKKwlQSU5NVVhfREFUQShQT1JUIyNuciMjX0RBVEEsIFBPUlQjI25yIyNfRk4wLAlcCisJCQkJUE9SVCMjbnIjI19PVVQsIFBPUlQjI25yIyNfSU4sCQlcCisJCQkJUE9SVCMjbnIjI19JTl9QRCwgUE9SVCMjbnIjI19JTl9QVSkKKworc3RhdGljIHBpbm11eF9lbnVtX3QgcGlubXV4X2RhdGFbXSA9IHsKKwkvKiBzcGVjaWZ5IHZhbGlkIHBpbiBzdGF0ZXMgZm9yIGVhY2ggcGluIGluIEdQSU8gbW9kZSAqLworCS8qIDU1LTEgKEdQSU8pICovCisJUE9SVF9EQVRBX0lfUEQoMCksIFBPUlRfREFUQV9JX1BVKDEpLAorCVBPUlRfREFUQV9JX1BVKDIpLCBQT1JUX0RBVEFfSV9QVSgzKSwKKwlQT1JUX0RBVEFfSV9QVSg0KSwgUE9SVF9EQVRBX0lfUFUoNSksCisJUE9SVF9EQVRBX0lfUFUoNiksIFBPUlRfREFUQV9JX1BVKDcpLAorCVBPUlRfREFUQV9JX1BVKDgpLCBQT1JUX0RBVEFfSV9QVSg5KSwKKwlQT1JUX0RBVEFfSV9QVSgxMCksIFBPUlRfREFUQV9JX1BVKDExKSwKKwlQT1JUX0RBVEFfSU9fUFUoMTIpLCBQT1JUX0RBVEFfSU9fUFUoMTMpLAorCVBPUlRfREFUQV9JT19QVV9QRCgxNCksIFBPUlRfREFUQV9JT19QVV9QRCgxNSksCisJUE9SVF9EQVRBX08oMTYpLCBQT1JUX0RBVEFfSU8oMTcpLAorCVBPUlRfREFUQV9PKDE4KSwgUE9SVF9EQVRBX08oMTkpLAorCVBPUlRfREFUQV9PKDIwKSwgUE9SVF9EQVRBX08oMjEpLAorCVBPUlRfREFUQV9PKDIyKSwgUE9SVF9EQVRBX08oMjMpLAorCVBPUlRfREFUQV9PKDI0KSwgUE9SVF9EQVRBX0lfUEQoMjUpLAorCVBPUlRfREFUQV9JX1BEKDI2KSwgUE9SVF9EQVRBX08oMjcpLAorCVBPUlRfREFUQV9PKDI4KSwgUE9SVF9EQVRBX08oMjkpLAorCVBPUlRfREFUQV9JTygzMCksIFBPUlRfREFUQV9JT19QVSgzMSksCisJUE9SVF9EQVRBX0lPX1BEKDMyKSwgUE9SVF9EQVRBX0lfUFUoMzMpLAorCVBPUlRfREFUQV9JT19QRCgzNCksIFBPUlRfREFUQV9JX1BVX1BEKDM1KSwKKwlQT1JUX0RBVEFfTygzNiksIFBPUlRfREFUQV9JTygzNyksCisKKwkvKiA1NS0yIChHUElPKSAqLworCVBPUlRfREFUQV9PKDM4KSwgUE9SVF9EQVRBX0lfUFUoMzkpLAorCVBPUlRfREFUQV9JX1BVX1BEKDQwKSwgUE9SVF9EQVRBX08oNDEpLAorCVBPUlRfREFUQV9JT19QRCg0MiksIFBPUlRfREFUQV9JT19QRCg0MyksCisJUE9SVF9EQVRBX0lPX1BEKDQ0KSwgUE9SVF9EQVRBX0lfUEQoNDUpLAorCVBPUlRfREFUQV9JX1BEKDQ2KSwgUE9SVF9EQVRBX0lfUEQoNDcpLAorCVBPUlRfREFUQV9JX1BEKDQ4KSwgUE9SVF9EQVRBX0lPX1BVX1BEKDQ5KSwKKwlQT1JUX0RBVEFfSU9fUEQoNTApLCBQT1JUX0RBVEFfSU9fUEQoNTEpLAorCVBPUlRfREFUQV9PKDUyKSwgUE9SVF9EQVRBX0lPX1BVX1BEKDUzKSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoNTQpLCBQT1JUX0RBVEFfSU9fUEQoNTUpLAorCVBPUlRfREFUQV9JX1BVX1BEKDU2KSwgUE9SVF9EQVRBX0lPKDU3KSwKKwlQT1JUX0RBVEFfSU8oNTgpLCBQT1JUX0RBVEFfSU8oNTkpLAorCVBPUlRfREFUQV9JTyg2MCksIFBPUlRfREFUQV9JTyg2MSksCisJUE9SVF9EQVRBX0lPX1BEKDYyKSwgUE9SVF9EQVRBX0lPX1BEKDYzKSwKKwlQT1JUX0RBVEFfSU9fUEQoNjQpLCBQT1JUX0RBVEFfSU9fUEQoNjUpLAorCVBPUlRfREFUQV9JT19QVV9QRCg2NiksIFBPUlRfREFUQV9JT19QVV9QRCg2NyksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDY4KSwgUE9SVF9EQVRBX0lPX1BVX1BEKDY5KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoNzApLCBQT1JUX0RBVEFfSU9fUFVfUEQoNzEpLAorCVBPUlRfREFUQV9JT19QVV9QRCg3MiksIFBPUlRfREFUQV9JX1BVX1BEKDczKSwKKwlQT1JUX0RBVEFfSU9fUFUoNzQpLCBQT1JUX0RBVEFfSU9fUFUoNzUpLAorCVBPUlRfREFUQV9JT19QVSg3NiksIFBPUlRfREFUQV9JT19QVSg3NyksCisJUE9SVF9EQVRBX0lPX1BVKDc4KSwgUE9SVF9EQVRBX0lPX1BVKDc5KSwKKwlQT1JUX0RBVEFfSU9fUFUoODApLCBQT1JUX0RBVEFfSU9fUFUoODEpLAorCVBPUlRfREFUQV9JT19QVSg4MiksIFBPUlRfREFUQV9JT19QVSg4MyksCisJUE9SVF9EQVRBX0lPX1BVKDg0KSwgUE9SVF9EQVRBX0lPX1BVKDg1KSwKKwlQT1JUX0RBVEFfSU9fUFUoODYpLCBQT1JUX0RBVEFfSU9fUFUoODcpLAorCVBPUlRfREFUQV9JT19QVSg4OCksIFBPUlRfREFUQV9JT19QVSg4OSksCisJUE9SVF9EQVRBX08oOTApLCBQT1JUX0RBVEFfSU9fUFUoOTEpLAorCVBPUlRfREFUQV9PKDkyKSwKKworCS8qIDU1LTMgKEdQSU8pICovCisJUE9SVF9EQVRBX0lPX1BVKDkzKSwKKwlQT1JUX0RBVEFfTyg5NCksCisJUE9SVF9EQVRBX0lfUFVfUEQoOTUpLAorCVBPUlRfREFUQV9JTyg5NiksIFBPUlRfREFUQV9JTyg5NyksCisJUE9SVF9EQVRBX0lPKDk4KSwgUE9SVF9EQVRBX0lfUFUoOTkpLAorCVBPUlRfREFUQV9PKDEwMCksIFBPUlRfREFUQV9PKDEwMSksCisJUE9SVF9EQVRBX0lfUFUoMTAyKSwgUE9SVF9EQVRBX0lPX1BEKDEwMyksCisJUE9SVF9EQVRBX0lfUEQoMTA0KSwgUE9SVF9EQVRBX0lfUEQoMTA1KSwKKwlQT1JUX0RBVEFfSV9QRCgxMDYpLCBQT1JUX0RBVEFfSV9QRCgxMDcpLAorCVBPUlRfREFUQV9JX1BEKDEwOCksIFBPUlRfREFUQV9JT19QRCgxMDkpLAorCVBPUlRfREFUQV9JT19QRCgxMTApLCBQT1JUX0RBVEFfSV9QRCgxMTEpLAorCVBPUlRfREFUQV9JT19QRCgxMTIpLCBQT1JUX0RBVEFfSU9fUEQoMTEzKSwKKwlQT1JUX0RBVEFfSU9fUEQoMTE0KSwgUE9SVF9EQVRBX0lfUEQoMTE1KSwKKwlQT1JUX0RBVEFfSV9QRCgxMTYpLCBQT1JUX0RBVEFfSU9fUEQoMTE3KSwKKwlQT1JUX0RBVEFfSV9QRCgxMTgpLCBQT1JUX0RBVEFfSU9fUEQoMTI4KSwKKwlQT1JUX0RBVEFfSU9fUEQoMTI5KSwgUE9SVF9EQVRBX0lPX1BEKDEzMCksCisJUE9SVF9EQVRBX0lPX1BEKDEzMSksIFBPUlRfREFUQV9JT19QRCgxMzIpLAorCVBPUlRfREFUQV9JT19QRCgxMzMpLCBQT1JUX0RBVEFfSU9fUFVfUEQoMTM0KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTM1KSwgUE9SVF9EQVRBX0lPX1BVX1BEKDEzNiksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDEzNyksIFBPUlRfREFUQV9JT19QRCgxMzgpLAorCVBPUlRfREFUQV9JT19QRCgxMzkpLCBQT1JUX0RBVEFfSU9fUEQoMTQwKSwKKwlQT1JUX0RBVEFfSU9fUEQoMTQxKSwgUE9SVF9EQVRBX0lPX1BEKDE0MiksCisJUE9SVF9EQVRBX0lPX1BEKDE0MyksIFBPUlRfREFUQV9JT19QVV9QRCgxNDQpLAorCVBPUlRfREFUQV9JT19QRCgxNDUpLCBQT1JUX0RBVEFfSU9fUFVfUEQoMTQ2KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMTQ3KSwgUE9SVF9EQVRBX0lPX1BVX1BEKDE0OCksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDE0OSksIFBPUlRfREFUQV9JX1BEKDE1MCksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDE1MSksIFBPUlRfREFUQV9JT19QRCgxNTIpLAorCVBPUlRfREFUQV9JT19QRCgxNTMpLCBQT1JUX0RBVEFfSU9fUEQoMTU0KSwKKwlQT1JUX0RBVEFfSV9QRCgxNTUpLCBQT1JUX0RBVEFfSU9fUFVfUEQoMTU2KSwKKwlQT1JUX0RBVEFfSV9QRCgxNTcpLCBQT1JUX0RBVEFfSU9fUEQoMTU4KSwKKworCS8qIDU1LTQgKEdQSU8pICovCisJUE9SVF9EQVRBX0lPX1BVX1BEKDE1OSksIFBPUlRfREFUQV9JT19QVV9QRCgxNjApLAorCVBPUlRfREFUQV9JX1BVX1BEKDE2MSksIFBPUlRfREFUQV9JX1BVX1BEKDE2MiksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDE2MyksIFBPUlRfREFUQV9JX1BVX1BEKDE2NCksCisJUE9SVF9EQVRBX0lPX1BEKDE5MiksIFBPUlRfREFUQV9JT19QRCgxOTMpLAorCVBPUlRfREFUQV9JT19QRCgxOTQpLCBQT1JUX0RBVEFfSU9fUEQoMTk1KSwKKwlQT1JUX0RBVEFfSU9fUEQoMTk2KSwgUE9SVF9EQVRBX0lPX1BEKDE5NyksCisJUE9SVF9EQVRBX0lPX1BEKDE5OCksIFBPUlRfREFUQV9JT19QRCgxOTkpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyMDApLCBQT1JUX0RBVEFfSU9fUFVfUEQoMjAxKSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjAyKSwgUE9SVF9EQVRBX0lPX1BVX1BEKDIwMyksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDIwNCksIFBPUlRfREFUQV9JT19QVV9QRCgyMDUpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyMDYpLCBQT1JUX0RBVEFfSU9fUEQoMjA3KSwKKwlQT1JUX0RBVEFfSU9fUEQoMjA4KSwgUE9SVF9EQVRBX0lPX1BEKDIwOSksCisJUE9SVF9EQVRBX0lPX1BEKDIxMCksIFBPUlRfREFUQV9JT19QRCgyMTEpLAorCVBPUlRfREFUQV9JT19QRCgyMTIpLCBQT1JUX0RBVEFfSU9fUEQoMjEzKSwKKwlQT1JUX0RBVEFfSU9fUEQoMjE0KSwgUE9SVF9EQVRBX0lPX1BEKDIxNSksCisJUE9SVF9EQVRBX0lPX1BEKDIxNiksIFBPUlRfREFUQV9JT19QRCgyMTcpLAorCVBPUlRfREFUQV9PKDIxOCksIFBPUlRfREFUQV9JT19QRCgyMTkpLAorCVBPUlRfREFUQV9JT19QRCgyMjApLCBQT1JUX0RBVEFfSU9fUEQoMjIxKSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjIyKSwKKwlQT1JUX0RBVEFfSV9QVV9QRCgyMjMpLCBQT1JUX0RBVEFfSV9QVV9QRCgyMjQpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyMjUpLCBQT1JUX0RBVEFfTygyMjYpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyMjcpLCBQT1JUX0RBVEFfSV9QRCgyMjgpLAorCVBPUlRfREFUQV9JX1BEKDIyOSksIFBPUlRfREFUQV9JTygyMzApLAorCVBPUlRfREFUQV9JT19QRCgyMzEpLCBQT1JUX0RBVEFfSU9fUFVfUEQoMjMyKSwKKwlQT1JUX0RBVEFfSV9QRCgyMzMpLCBQT1JUX0RBVEFfSU9fUFVfUEQoMjM0KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjM1KSwgUE9SVF9EQVRBX0lPX1BVX1BEKDIzNiksCisJUE9SVF9EQVRBX0lPX1BEKDIzNyksIFBPUlRfREFUQV9JT19QVV9QRCgyMzgpLAorCisJLyogNTUtNSAoR1BJTykgKi8KKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjM5KSwgUE9SVF9EQVRBX0lPX1BVX1BEKDI0MCksCisJUE9SVF9EQVRBX08oMjQxKSwgUE9SVF9EQVRBX0lfUEQoMjQyKSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjQzKSwgUE9SVF9EQVRBX0lPX1BVX1BEKDI0NCksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDI0NSksIFBPUlRfREFUQV9JT19QVV9QRCgyNDYpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNDcpLCBQT1JUX0RBVEFfSU9fUFVfUEQoMjQ4KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjQ5KSwgUE9SVF9EQVRBX0lPX1BEKDI1MCksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDI1MSksIFBPUlRfREFUQV9JT19QVV9QRCgyNTIpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNTMpLCBQT1JUX0RBVEFfSU9fUFVfUEQoMjU0KSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjU1KSwgUE9SVF9EQVRBX0lPX1BVX1BEKDI1NiksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDI1NyksIFBPUlRfREFUQV9JT19QRCgyNTgpLAorCVBPUlRfREFUQV9JT19QVV9QRCgyNTkpLCBQT1JUX0RBVEFfSU9fUFVfUEQoMjYwKSwKKwlQT1JUX0RBVEFfSU9fUFVfUEQoMjYxKSwgUE9SVF9EQVRBX0lPX1BVX1BEKDI2MiksCisJUE9SVF9EQVRBX0lPX1BVX1BEKDI2MyksCisKKwkvKiBTcGVjaWFsIFB1bGwtdXAgLyBQdWxsLWRvd24gRnVuY3Rpb25zICovCisJUElOTVVYX0RBVEEoUE9SVDY2X0tFWUlOMF9QVV9NQVJLLCBNU0VMQkNSX01TRUwxN18wLCBNU0VMQkNSX01TRUwxNl8wLAorCQkJCVBPUlQ2Nl9GTjIsIFBPUlQ2Nl9JTl9QVSksCisJUElOTVVYX0RBVEEoUE9SVDY3X0tFWUlOMV9QVV9NQVJLLCBNU0VMQkNSX01TRUwxN18wLCBNU0VMQkNSX01TRUwxNl8wLAorCQkJCVBPUlQ2N19GTjIsIFBPUlQ2N19JTl9QVSksCisJUElOTVVYX0RBVEEoUE9SVDY4X0tFWUlOMl9QVV9NQVJLLCBNU0VMQkNSX01TRUwxN18wLCBNU0VMQkNSX01TRUwxNl8wLAorCQkJCVBPUlQ2OF9GTjIsIFBPUlQ2OF9JTl9QVSksCisJUElOTVVYX0RBVEEoUE9SVDY5X0tFWUlOM19QVV9NQVJLLCBNU0VMQkNSX01TRUwxN18wLCBNU0VMQkNSX01TRUwxNl8wLAorCQkJCVBPUlQ2OV9GTjIsIFBPUlQ2OV9JTl9QVSksCisJUElOTVVYX0RBVEEoUE9SVDcwX0tFWUlONF9QVV9NQVJLLCBNU0VMQkNSX01TRUwxN18wLCBNU0VMQkNSX01TRUwxNl8wLAorCQkJCVBPUlQ3MF9GTjIsIFBPUlQ3MF9JTl9QVSksCisJUElOTVVYX0RBVEEoUE9SVDcxX0tFWUlONV9QVV9NQVJLLCBNU0VMQkNSX01TRUwxN18wLCBNU0VMQkNSX01TRUwxNl8wLAorCQkJCVBPUlQ3MV9GTjIsIFBPUlQ3MV9JTl9QVSksCisJUElOTVVYX0RBVEEoUE9SVDcyX0tFWUlONl9QVV9NQVJLLCBNU0VMQkNSX01TRUwxN18wLCBNU0VMQkNSX01TRUwxNl8wLAorCQkJCVBPUlQ3Ml9GTjIsIFBPUlQ3Ml9JTl9QVSksCisKKworCS8qIDU1LTEgKEZOKSAqLworCVBJTk1VWF9EQVRBKFZCVVNfMF9NQVJLLCBQT1JUMF9GTjEpLAorCVBJTk1VWF9EQVRBKENQT1JUMF9NQVJLLCBQT1JUMV9GTjEpLAorCVBJTk1VWF9EQVRBKENQT1JUMV9NQVJLLCBQT1JUMl9GTjEpLAorCVBJTk1VWF9EQVRBKENQT1JUMl9NQVJLLCBQT1JUM19GTjEpLAorCVBJTk1VWF9EQVRBKENQT1JUM19NQVJLLCBQT1JUNF9GTjEpLAorCVBJTk1VWF9EQVRBKENQT1JUNF9NQVJLLCBQT1JUNV9GTjEpLAorCVBJTk1VWF9EQVRBKENQT1JUNV9NQVJLLCBQT1JUNl9GTjEpLAorCVBJTk1VWF9EQVRBKENQT1JUNl9NQVJLLCBQT1JUN19GTjEpLAorCVBJTk1VWF9EQVRBKENQT1JUN19NQVJLLCBQT1JUOF9GTjEpLAorCVBJTk1VWF9EQVRBKENQT1JUOF9NQVJLLCBQT1JUOV9GTjEpLAorCVBJTk1VWF9EQVRBKENQT1JUOV9NQVJLLCBQT1JUMTBfRk4xKSwKKwlQSU5NVVhfREFUQShDUE9SVDEwX01BUkssIFBPUlQxMV9GTjEpLAorCVBJTk1VWF9EQVRBKENQT1JUMTFfTUFSSywgUE9SVDEyX0ZOMSksCisJUElOTVVYX0RBVEEoU0lOMl9NQVJLLCBQT1JUMTJfRk4yKSwKKwlQSU5NVVhfREFUQShDUE9SVDEyX01BUkssIFBPUlQxM19GTjEpLAorCVBJTk1VWF9EQVRBKFhDVFMyX01BUkssIFBPUlQxM19GTjIpLAorCVBJTk1VWF9EQVRBKENQT1JUMTNfTUFSSywgUE9SVDE0X0ZOMSksCisJUElOTVVYX0RBVEEoUkZTUE80X01BUkssIFBPUlQxNF9GTjIpLAorCVBJTk1VWF9EQVRBKENQT1JUMTRfTUFSSywgUE9SVDE1X0ZOMSksCisJUElOTVVYX0RBVEEoUkZTUE81X01BUkssIFBPUlQxNV9GTjIpLAorCVBJTk1VWF9EQVRBKENQT1JUMTVfTUFSSywgUE9SVDE2X0ZOMSksCisJUElOTVVYX0RBVEEoU0NJRkEwX1NDS19NQVJLLCBQT1JUMTZfRk4yKSwKKwlQSU5NVVhfREFUQShHUFNfQUdDMl9NQVJLLCBQT1JUMTZfRk4zKSwKKwlQSU5NVVhfREFUQShDUE9SVDE2X01BUkssIFBPUlQxN19GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZBMF9UWERfTUFSSywgUE9SVDE3X0ZOMiksCisJUElOTVVYX0RBVEEoR1BTX0FHQzNfTUFSSywgUE9SVDE3X0ZOMyksCisJUElOTVVYX0RBVEEoQ1BPUlQxN19JQ19PRV9NQVJLLCBQT1JUMThfRk4xKSwKKwlQSU5NVVhfREFUQShTT1VUMl9NQVJLLCBQT1JUMThfRk4yKSwKKwlQSU5NVVhfREFUQShDUE9SVDE4X01BUkssIFBPUlQxOV9GTjEpLAorCVBJTk1VWF9EQVRBKFhSVFMyX01BUkssIFBPUlQxOV9GTjIpLAorCVBJTk1VWF9EQVRBKFBPUlQxOV9WSU9fQ0tPMl9NQVJLLCBQT1JUMTlfRk4zKSwKKwlQSU5NVVhfREFUQShDUE9SVDE5X01QT1JUMV9NQVJLLCBQT1JUMjBfRk4xKSwKKwlQSU5NVVhfREFUQShDUE9SVDIwX01BUkssIFBPUlQyMV9GTjEpLAorCVBJTk1VWF9EQVRBKFJGU1BPNl9NQVJLLCBQT1JUMjFfRk4yKSwKKwlQSU5NVVhfREFUQShDUE9SVDIxX01BUkssIFBPUlQyMl9GTjEpLAorCVBJTk1VWF9EQVRBKFNUQVRVUzBfTUFSSywgUE9SVDIyX0ZOMiksCisJUElOTVVYX0RBVEEoQ1BPUlQyMl9NQVJLLCBQT1JUMjNfRk4xKSwKKwlQSU5NVVhfREFUQShTVEFUVVMxX01BUkssIFBPUlQyM19GTjIpLAorCVBJTk1VWF9EQVRBKENQT1JUMjNfTUFSSywgUE9SVDI0X0ZOMSksCisJUElOTVVYX0RBVEEoU1RBVFVTMl9NQVJLLCBQT1JUMjRfRk4yKSwKKwlQSU5NVVhfREFUQShSRlNQTzdfTUFSSywgUE9SVDI0X0ZOMyksCisJUElOTVVYX0RBVEEoQl9TWU5MRDFfTUFSSywgUE9SVDI1X0ZOMSksCisJUElOTVVYX0RBVEEoQl9TWU5MRDJfTUFSSywgUE9SVDI2X0ZOMSksCisJUElOTVVYX0RBVEEoU1lTRU5NU0tfTUFSSywgUE9SVDI2X0ZOMiksCisJUElOTVVYX0RBVEEoWE1BSU5QU19NQVJLLCBQT1JUMjdfRk4xKSwKKwlQSU5NVVhfREFUQShYRElWUFNfTUFSSywgUE9SVDI4X0ZOMSksCisJUElOTVVYX0RBVEEoWElEUlNUX01BUkssIFBPUlQyOV9GTjEpLAorCVBJTk1VWF9EQVRBKElEQ0xLX01BUkssIFBPUlQzMF9GTjEpLAorCVBJTk1VWF9EQVRBKElDX0RQX01BUkssIFBPUlQzMF9GTjIpLAorCVBJTk1VWF9EQVRBKElESU9fTUFSSywgUE9SVDMxX0ZOMSksCisJUElOTVVYX0RBVEEoSUNfRE1fTUFSSywgUE9SVDMxX0ZOMiksCisJUElOTVVYX0RBVEEoU09VVDFfTUFSSywgUE9SVDMyX0ZOMSksCisJUElOTVVYX0RBVEEoU0NJRkE0X1RYRF9NQVJLLCBQT1JUMzJfRk4yKSwKKwlQSU5NVVhfREFUQShNMDJfQkVSREFUX01BUkssIFBPUlQzMl9GTjMpLAorCVBJTk1VWF9EQVRBKFNJTjFfTUFSSywgUE9SVDMzX0ZOMSksCisJUElOTVVYX0RBVEEoU0NJRkE0X1JYRF9NQVJLLCBQT1JUMzNfRk4yKSwKKwlQSU5NVVhfREFUQShYV1VQX01BUkssIFBPUlQzM19GTjMpLAorCVBJTk1VWF9EQVRBKFhSVFMxX01BUkssIFBPUlQzNF9GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZBNF9SVFNfTUFSSywgUE9SVDM0X0ZOMiksCisJUElOTVVYX0RBVEEoTTAzX0JFUkNMS19NQVJLLCBQT1JUMzRfRk4zKSwKKwlQSU5NVVhfREFUQShYQ1RTMV9NQVJLLCBQT1JUMzVfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQTRfQ1RTX01BUkssIFBPUlQzNV9GTjIpLAorCVBJTk1VWF9EQVRBKFBDTUNMS09fTUFSSywgUE9SVDM2X0ZOMSksCisJUElOTVVYX0RBVEEoU1lOQzhLT19NQVJLLCBQT1JUMzdfRk4xKSwKKworCS8qIDU1LTIgKEZOKSAqLworCVBJTk1VWF9EQVRBKEROUENNX0FfTUFSSywgUE9SVDM4X0ZOMSksCisJUElOTVVYX0RBVEEoVVBQQ01fQV9NQVJLLCBQT1JUMzlfRk4xKSwKKwlQSU5NVVhfREFUQShWQUNLX01BUkssIFBPUlQ0MF9GTjEpLAorCVBJTk1VWF9EQVRBKFhUQUxCMUxfTUFSSywgUE9SVDQxX0ZOMSksCisJUElOTVVYX0RBVEEoR1BTX0FHQzFfTUFSSywgUE9SVDQyX0ZOMSksCisJUElOTVVYX0RBVEEoU0NJRkEwX1JUU19NQVJLLCBQT1JUNDJfRk4yKSwKKwlQSU5NVVhfREFUQShHUFNfQUdDNF9NQVJLLCBQT1JUNDNfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQTBfUlhEX01BUkssIFBPUlQ0M19GTjIpLAorCVBJTk1VWF9EQVRBKEdQU19QV1JET1dOX01BUkssIFBPUlQ0NF9GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZBMF9DVFNfTUFSSywgUE9SVDQ0X0ZOMiksCisJUElOTVVYX0RBVEEoR1BTX0lNX01BUkssIFBPUlQ0NV9GTjEpLAorCVBJTk1VWF9EQVRBKEdQU19JU19NQVJLLCBQT1JUNDZfRk4xKSwKKwlQSU5NVVhfREFUQShHUFNfUU1fTUFSSywgUE9SVDQ3X0ZOMSksCisJUElOTVVYX0RBVEEoR1BTX1FTX01BUkssIFBPUlQ0OF9GTjEpLAorCVBJTk1VWF9EQVRBKEZNU09DS19NQVJLLCBQT1JUNDlfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUNDlfSVJEQV9PVVRfTUFSSywgUE9SVDQ5X0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDQ5X0lST1VUX01BUkssIFBPUlQ0OV9GTjMpLAorCVBJTk1VWF9EQVRBKEZNU09PTFJfTUFSSywgUE9SVDUwX0ZOMSksCisJUElOTVVYX0RBVEEoQkJJRjJfVFNZTkMyX01BUkssIFBPUlQ1MF9GTjIpLAorCVBJTk1VWF9EQVRBKFRQVTJUTzJfTUFSSywgUE9SVDUwX0ZOMyksCisJUElOTVVYX0RBVEEoSVBPUlQzX01BUkssIFBPUlQ1MF9GTjQpLAorCVBJTk1VWF9EQVRBKEZNU0lPTFJfTUFSSywgUE9SVDUwX0ZONSksCisJUElOTVVYX0RBVEEoRk1TT09CVF9NQVJLLCBQT1JUNTFfRk4xKSwKKwlQSU5NVVhfREFUQShCQklGMl9UU0NLMl9NQVJLLCBQT1JUNTFfRk4yKSwKKwlQSU5NVVhfREFUQShUUFUyVE8zX01BUkssIFBPUlQ1MV9GTjMpLAorCVBJTk1VWF9EQVRBKE9QT1JUMV9NQVJLLCBQT1JUNTFfRk40KSwKKwlQSU5NVVhfREFUQShGTVNJT0JUX01BUkssIFBPUlQ1MV9GTjUpLAorCVBJTk1VWF9EQVRBKEZNU09TTERfTUFSSywgUE9SVDUyX0ZOMSksCisJUElOTVVYX0RBVEEoQkJJRjJfVFhEMl9NQVJLLCBQT1JUNTJfRk4yKSwKKwlQSU5NVVhfREFUQShPUE9SVDJfTUFSSywgUE9SVDUyX0ZOMyksCisJUElOTVVYX0RBVEEoRk1TT0lMUl9NQVJLLCBQT1JUNTNfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUNTNfSVJEQV9JTl9NQVJLLCBQT1JUNTNfRk4yKSwKKwlQSU5NVVhfREFUQShUUFUzVE8zX01BUkssIFBPUlQ1M19GTjMpLAorCVBJTk1VWF9EQVRBKE9QT1JUM19NQVJLLCBQT1JUNTNfRk40KSwKKwlQSU5NVVhfREFUQShGTVNJSUxSX01BUkssIFBPUlQ1M19GTjUpLAorCVBJTk1VWF9EQVRBKEZNU09JQlRfTUFSSywgUE9SVDU0X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDU0X0lSREFfRklSU0VMX01BUkssIFBPUlQ1NF9GTjIpLAorCVBJTk1VWF9EQVRBKFRQVTNUTzJfTUFSSywgUE9SVDU0X0ZOMyksCisJUElOTVVYX0RBVEEoRk1TSUlCVF9NQVJLLCBQT1JUNTRfRk40KSwKKwlQSU5NVVhfREFUQShGTVNJU0xEX01BUkssIFBPUlQ1NV9GTjEpLAorCVBJTk1VWF9EQVRBKE1GRzBfT1VUMV9NQVJLLCBQT1JUNTVfRk4yKSwKKwlQSU5NVVhfREFUQShUUFUwVE8wX01BUkssIFBPUlQ1NV9GTjMpLAorCVBJTk1VWF9EQVRBKEEwX0VBMF9NQVJLLCBQT1JUNTdfRk4xKSwKKwlQSU5NVVhfREFUQShCU19NQVJLLCBQT1JUNTdfRk4yKSwKKwlQSU5NVVhfREFUQShBMTJfRUExMl9NQVJLLCBQT1JUNThfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUNThfVklPX0NLT1JfTUFSSywgUE9SVDU4X0ZOMiksCisJUElOTVVYX0RBVEEoVFBVNFRPMl9NQVJLLCBQT1JUNThfRk4zKSwKKwlQSU5NVVhfREFUQShBMTNfRUExM19NQVJLLCBQT1JUNTlfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUNTlfSVJPVVRfTUFSSywgUE9SVDU5X0ZOMiksCisJUElOTVVYX0RBVEEoTUZHMF9PVVQyX01BUkssIFBPUlQ1OV9GTjMpLAorCVBJTk1VWF9EQVRBKFRQVTBUTzFfTUFSSywgUE9SVDU5X0ZONCksCisJUElOTVVYX0RBVEEoQTE0X0VBMTRfTUFSSywgUE9SVDYwX0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDYwX0tFWU9VVDVfTUFSSywgUE9SVDYwX0ZOMiksCisJUElOTVVYX0RBVEEoQTE1X0VBMTVfTUFSSywgUE9SVDYxX0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDYxX0tFWU9VVDRfTUFSSywgUE9SVDYxX0ZOMiksCisJUElOTVVYX0RBVEEoQTE2X0VBMTZfTUFSSywgUE9SVDYyX0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDYyX0tFWU9VVDNfTUFSSywgUE9SVDYyX0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1NTMV9NQVJLLCBQT1JUNjJfRk4zKSwKKwlQSU5NVVhfREFUQShBMTdfRUExN19NQVJLLCBQT1JUNjNfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUNjNfS0VZT1VUMl9NQVJLLCBQT1JUNjNfRk4yKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfVFNZTkNfTUFSSywgUE9SVDYzX0ZOMyksCisJUElOTVVYX0RBVEEoQTE4X0VBMThfTUFSSywgUE9SVDY0X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDY0X0tFWU9VVDFfTUFSSywgUE9SVDY0X0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1RTQ0tfTUFSSywgUE9SVDY0X0ZOMyksCisJUElOTVVYX0RBVEEoQTE5X0VBMTlfTUFSSywgUE9SVDY1X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDY1X0tFWU9VVDBfTUFSSywgUE9SVDY1X0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1RYRF9NQVJLLCBQT1JUNjVfRk4zKSwKKwlQSU5NVVhfREFUQShBMjBfRUEyMF9NQVJLLCBQT1JUNjZfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUNjZfS0VZSU4wX01BUkssIFBPUlQ2Nl9GTjIpLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9SU0NLX01BUkssIFBPUlQ2Nl9GTjMpLAorCVBJTk1VWF9EQVRBKEEyMV9FQTIxX01BUkssIFBPUlQ2N19GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQ2N19LRVlJTjFfTUFSSywgUE9SVDY3X0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YwX1JTWU5DX01BUkssIFBPUlQ2N19GTjMpLAorCVBJTk1VWF9EQVRBKEEyMl9FQTIyX01BUkssIFBPUlQ2OF9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQ2OF9LRVlJTjJfTUFSSywgUE9SVDY4X0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YwX01DSzBfTUFSSywgUE9SVDY4X0ZOMyksCisJUElOTVVYX0RBVEEoQTIzX0VBMjNfTUFSSywgUE9SVDY5X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDY5X0tFWUlOM19NQVJLLCBQT1JUNjlfRk4yKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfTUNLMV9NQVJLLCBQT1JUNjlfRk4zKSwKKwlQSU5NVVhfREFUQShBMjRfRUEyNF9NQVJLLCBQT1JUNzBfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUNzBfS0VZSU40X01BUkssIFBPUlQ3MF9GTjIpLAorCVBJTk1VWF9EQVRBKE1TSU9GMF9SWERfTUFSSywgUE9SVDcwX0ZOMyksCisJUElOTVVYX0RBVEEoQTI1X0VBMjVfTUFSSywgUE9SVDcxX0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDcxX0tFWUlONV9NQVJLLCBQT1JUNzFfRk4yKSwKKwlQSU5NVVhfREFUQShNU0lPRjBfU1MyX01BUkssIFBPUlQ3MV9GTjMpLAorCVBJTk1VWF9EQVRBKEEyNl9NQVJLLCBQT1JUNzJfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUNzJfS0VZSU42X01BUkssIFBPUlQ3Ml9GTjIpLAorCVBJTk1VWF9EQVRBKEQwX0VEMF9OQUYwX01BUkssIFBPUlQ3NF9GTjEpLAorCVBJTk1VWF9EQVRBKEQxX0VEMV9OQUYxX01BUkssIFBPUlQ3NV9GTjEpLAorCVBJTk1VWF9EQVRBKEQyX0VEMl9OQUYyX01BUkssIFBPUlQ3Nl9GTjEpLAorCVBJTk1VWF9EQVRBKEQzX0VEM19OQUYzX01BUkssIFBPUlQ3N19GTjEpLAorCVBJTk1VWF9EQVRBKEQ0X0VENF9OQUY0X01BUkssIFBPUlQ3OF9GTjEpLAorCVBJTk1VWF9EQVRBKEQ1X0VENV9OQUY1X01BUkssIFBPUlQ3OV9GTjEpLAorCVBJTk1VWF9EQVRBKEQ2X0VENl9OQUY2X01BUkssIFBPUlQ4MF9GTjEpLAorCVBJTk1VWF9EQVRBKEQ3X0VEN19OQUY3X01BUkssIFBPUlQ4MV9GTjEpLAorCVBJTk1VWF9EQVRBKEQ4X0VEOF9OQUY4X01BUkssIFBPUlQ4Ml9GTjEpLAorCVBJTk1VWF9EQVRBKEQ5X0VEOV9OQUY5X01BUkssIFBPUlQ4M19GTjEpLAorCVBJTk1VWF9EQVRBKEQxMF9FRDEwX05BRjEwX01BUkssIFBPUlQ4NF9GTjEpLAorCVBJTk1VWF9EQVRBKEQxMV9FRDExX05BRjExX01BUkssIFBPUlQ4NV9GTjEpLAorCVBJTk1VWF9EQVRBKEQxMl9FRDEyX05BRjEyX01BUkssIFBPUlQ4Nl9GTjEpLAorCVBJTk1VWF9EQVRBKEQxM19FRDEzX05BRjEzX01BUkssIFBPUlQ4N19GTjEpLAorCVBJTk1VWF9EQVRBKEQxNF9FRDE0X05BRjE0X01BUkssIFBPUlQ4OF9GTjEpLAorCVBJTk1VWF9EQVRBKEQxNV9FRDE1X05BRjE1X01BUkssIFBPUlQ4OV9GTjEpLAorCVBJTk1VWF9EQVRBKENTNF9NQVJLLCBQT1JUOTBfRk4xKSwKKwlQSU5NVVhfREFUQShDUzVBX01BUkssIFBPUlQ5MV9GTjEpLAorCVBJTk1VWF9EQVRBKEZNU0lDS19NQVJLLCBQT1JUOTFfRk4yKSwKKwlQSU5NVVhfREFUQShDUzVCX01BUkssIFBPUlQ5Ml9GTjEpLAorCVBJTk1VWF9EQVRBKEZDRTFfTUFSSywgUE9SVDkyX0ZOMiksCisKKwkvKiA1NS0zIChGTikgKi8KKwlQSU5NVVhfREFUQShDUzZCX01BUkssIFBPUlQ5M19GTjEpLAorCVBJTk1VWF9EQVRBKFhDUzJfTUFSSywgUE9SVDkzX0ZOMiksCisJUElOTVVYX0RBVEEoQ1M2QV9NQVJLLCBQT1JUOTNfRk4zKSwKKwlQSU5NVVhfREFUQShEQUNLMF9NQVJLLCBQT1JUOTNfRk40KSwKKwlQSU5NVVhfREFUQShGQ0UwX01BUkssIFBPUlQ5NF9GTjEpLAorCVBJTk1VWF9EQVRBKFdBSVRfTUFSSywgUE9SVDk1X0ZOMSksCisJUElOTVVYX0RBVEEoRFJFUTBfTUFSSywgUE9SVDk1X0ZOMiksCisJUElOTVVYX0RBVEEoUkRfWFJEX01BUkssIFBPUlQ5Nl9GTjEpLAorCVBJTk1VWF9EQVRBKFdFMF9YV1IwX0ZXRV9NQVJLLCBQT1JUOTdfRk4xKSwKKwlQSU5NVVhfREFUQShXRTFfWFdSMV9NQVJLLCBQT1JUOThfRk4xKSwKKwlQSU5NVVhfREFUQShGUkJfTUFSSywgUE9SVDk5X0ZOMSksCisJUElOTVVYX0RBVEEoQ0tPX01BUkssIFBPUlQxMDBfRk4xKSwKKwlQSU5NVVhfREFUQShOQlJTVE9VVF9NQVJLLCBQT1JUMTAxX0ZOMSksCisJUElOTVVYX0RBVEEoTkJSU1RfTUFSSywgUE9SVDEwMl9GTjEpLAorCVBJTk1VWF9EQVRBKEdQU19FUFBTSU5fTUFSSywgUE9SVDEwNl9GTjEpLAorCVBJTk1VWF9EQVRBKExBVENIUFVMU0VfTUFSSywgUE9SVDExMF9GTjEpLAorCVBJTk1VWF9EQVRBKExURVNJR05BTF9NQVJLLCBQT1JUMTExX0ZOMSksCisJUElOTVVYX0RBVEEoTEVHQUNZU1RBVEVfTUFSSywgUE9SVDExMl9GTjEpLAorCVBJTk1VWF9EQVRBKFRDS09OX01BUkssIFBPUlQxMThfRk4xKSwKKwlQSU5NVVhfREFUQShWSU9fVkRfTUFSSywgUE9SVDEyOF9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxMjhfS0VZT1VUMF9NQVJLLCBQT1JUMTI4X0ZOMiksCisJUElOTVVYX0RBVEEoSVBPUlQwX01BUkssIFBPUlQxMjhfRk4zKSwKKwlQSU5NVVhfREFUQShWSU9fSERfTUFSSywgUE9SVDEyOV9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxMjlfS0VZT1VUMV9NQVJLLCBQT1JUMTI5X0ZOMiksCisJUElOTVVYX0RBVEEoSVBPUlQxX01BUkssIFBPUlQxMjlfRk4zKSwKKwlQSU5NVVhfREFUQShWSU9fRDBfTUFSSywgUE9SVDEzMF9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxMzBfS0VZT1VUMl9NQVJLLCBQT1JUMTMwX0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDEzMF9NU0lPRjJfUlhEX01BUkssIFBPUlQxMzBfRk4zKSwKKwlQSU5NVVhfREFUQShWSU9fRDFfTUFSSywgUE9SVDEzMV9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxMzFfS0VZT1VUM19NQVJLLCBQT1JUMTMxX0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDEzMV9NU0lPRjJfU1MxX01BUkssIFBPUlQxMzFfRk4zKSwKKwlQSU5NVVhfREFUQShWSU9fRDJfTUFSSywgUE9SVDEzMl9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxMzJfS0VZT1VUNF9NQVJLLCBQT1JUMTMyX0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDEzMl9NU0lPRjJfU1MyX01BUkssIFBPUlQxMzJfRk4zKSwKKwlQSU5NVVhfREFUQShWSU9fRDNfTUFSSywgUE9SVDEzM19GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxMzNfS0VZT1VUNV9NQVJLLCBQT1JUMTMzX0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDEzM19NU0lPRjJfVFNZTkNfTUFSSywgUE9SVDEzM19GTjMpLAorCVBJTk1VWF9EQVRBKFZJT19ENF9NQVJLLCBQT1JUMTM0X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDEzNF9LRVlJTjBfTUFSSywgUE9SVDEzNF9GTjIpLAorCVBJTk1VWF9EQVRBKFBPUlQxMzRfTVNJT0YyX1RYRF9NQVJLLCBQT1JUMTM0X0ZOMyksCisJUElOTVVYX0RBVEEoVklPX0Q1X01BUkssIFBPUlQxMzVfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUMTM1X0tFWUlOMV9NQVJLLCBQT1JUMTM1X0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDEzNV9NU0lPRjJfVFNDS19NQVJLLCBQT1JUMTM1X0ZOMyksCisJUElOTVVYX0RBVEEoVklPX0Q2X01BUkssIFBPUlQxMzZfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUMTM2X0tFWUlOMl9NQVJLLCBQT1JUMTM2X0ZOMiksCisJUElOTVVYX0RBVEEoVklPX0Q3X01BUkssIFBPUlQxMzdfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUMTM3X0tFWUlOM19NQVJLLCBQT1JUMTM3X0ZOMiksCisJUElOTVVYX0RBVEEoVklPX0Q4X01BUkssIFBPUlQxMzhfRk4xKSwKKwlQSU5NVVhfREFUQShNOV9TTENEX0EwMV9NQVJLLCBQT1JUMTM4X0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDEzOF9GU0lBT01DX01BUkssIFBPUlQxMzhfRk4zKSwKKwlQSU5NVVhfREFUQShWSU9fRDlfTUFSSywgUE9SVDEzOV9GTjEpLAorCVBJTk1VWF9EQVRBKE0xMF9TTENEX0NLMV9NQVJLLCBQT1JUMTM5X0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDEzOV9GU0lBT0xSX01BUkssIFBPUlQxMzlfRk4zKSwKKwlQSU5NVVhfREFUQShWSU9fRDEwX01BUkssIFBPUlQxNDBfRk4xKSwKKwlQSU5NVVhfREFUQShNMTFfU0xDRF9TTzFfTUFSSywgUE9SVDE0MF9GTjIpLAorCVBJTk1VWF9EQVRBKFRQVTBUTzJfTUFSSywgUE9SVDE0MF9GTjMpLAorCVBJTk1VWF9EQVRBKFBPUlQxNDBfRlNJQU9CVF9NQVJLLCBQT1JUMTQwX0ZONCksCisJUElOTVVYX0RBVEEoVklPX0QxMV9NQVJLLCBQT1JUMTQxX0ZOMSksCisJUElOTVVYX0RBVEEoTTEyX1NMQ0RfQ0UxX01BUkssIFBPUlQxNDFfRk4yKSwKKwlQSU5NVVhfREFUQShUUFUwVE8zX01BUkssIFBPUlQxNDFfRk4zKSwKKwlQSU5NVVhfREFUQShQT1JUMTQxX0ZTSUFPU0xEX01BUkssIFBPUlQxNDFfRk40KSwKKwlQSU5NVVhfREFUQShWSU9fRDEyX01BUkssIFBPUlQxNDJfRk4xKSwKKwlQSU5NVVhfREFUQShNMTNfQlNXX01BUkssIFBPUlQxNDJfRk4yKSwKKwlQSU5NVVhfREFUQShQT1JUMTQyX0ZTSUFDS19NQVJLLCBQT1JUMTQyX0ZOMyksCisJUElOTVVYX0RBVEEoVklPX0QxM19NQVJLLCBQT1JUMTQzX0ZOMSksCisJUElOTVVYX0RBVEEoTTE0X0dTV19NQVJLLCBQT1JUMTQzX0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDE0M19GU0lBSUxSX01BUkssIFBPUlQxNDNfRk4zKSwKKwlQSU5NVVhfREFUQShWSU9fRDE0X01BUkssIFBPUlQxNDRfRk4xKSwKKwlQSU5NVVhfREFUQShNMTVfUlNXX01BUkssIFBPUlQxNDRfRk4yKSwKKwlQSU5NVVhfREFUQShQT1JUMTQ0X0ZTSUFJQlRfTUFSSywgUE9SVDE0NF9GTjMpLAorCVBJTk1VWF9EQVRBKFZJT19EMTVfTUFSSywgUE9SVDE0NV9GTjEpLAorCVBJTk1VWF9EQVRBKFRQVTFUTzNfTUFSSywgUE9SVDE0NV9GTjIpLAorCVBJTk1VWF9EQVRBKFBPUlQxNDVfRlNJQUlTTERfTUFSSywgUE9SVDE0NV9GTjMpLAorCVBJTk1VWF9EQVRBKFZJT19DTEtfTUFSSywgUE9SVDE0Nl9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxNDZfS0VZSU40X01BUkssIFBPUlQxNDZfRk4yKSwKKwlQSU5NVVhfREFUQShJUE9SVDJfTUFSSywgUE9SVDE0Nl9GTjMpLAorCVBJTk1VWF9EQVRBKFZJT19GSUVMRF9NQVJLLCBQT1JUMTQ3X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDE0N19LRVlJTjVfTUFSSywgUE9SVDE0N19GTjIpLAorCVBJTk1VWF9EQVRBKFZJT19DS09fTUFSSywgUE9SVDE0OF9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxNDhfS0VZSU42X01BUkssIFBPUlQxNDhfRk4yKSwKKwlQSU5NVVhfREFUQShBMjdfTUFSSywgUE9SVDE0OV9GTjEpLAorCVBJTk1VWF9EQVRBKFJEV1JfWFdFX01BUkssIFBPUlQxNDlfRk4yKSwKKwlQSU5NVVhfREFUQShNRkcwX0lOMV9NQVJLLCBQT1JUMTQ5X0ZOMyksCisJUElOTVVYX0RBVEEoTUZHMF9JTjJfTUFSSywgUE9SVDE1MF9GTjEpLAorCVBJTk1VWF9EQVRBKFRTX1NQU1lOQzNfTUFSSywgUE9SVDE1MV9GTjEpLAorCVBJTk1VWF9EQVRBKE1TSU9GMl9SU0NLX01BUkssIFBPUlQxNTFfRk4yKSwKKwlQSU5NVVhfREFUQShUU19TREFUM19NQVJLLCBQT1JUMTUyX0ZOMSksCisJUElOTVVYX0RBVEEoTVNJT0YyX1JTWU5DX01BUkssIFBPUlQxNTJfRk4yKSwKKwlQSU5NVVhfREFUQShUUFUxVE8yX01BUkssIFBPUlQxNTNfRk4xKSwKKwlQSU5NVVhfREFUQShUU19TREVOM19NQVJLLCBQT1JUMTUzX0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDE1M19NU0lPRjJfU1MxX01BUkssIFBPUlQxNTNfRk4zKSwKKwlQSU5NVVhfREFUQShTT1VUM19NQVJLLCBQT1JUMTU0X0ZOMSksCisJUElOTVVYX0RBVEEoU0NJRkEyX1RYRDFfTUFSSywgUE9SVDE1NF9GTjIpLAorCVBJTk1VWF9EQVRBKE1TSU9GMl9NQ0swX01BUkssIFBPUlQxNTRfRk4zKSwKKwlQSU5NVVhfREFUQShTSU4zX01BUkssIFBPUlQxNTVfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQTJfUlhEMV9NQVJLLCBQT1JUMTU1X0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YyX01DSzFfTUFSSywgUE9SVDE1NV9GTjMpLAorCVBJTk1VWF9EQVRBKFhSVFMzX01BUkssIFBPUlQxNTZfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQTJfUlRTMV9NQVJLLCBQT1JUMTU2X0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDE1Nl9NU0lPRjJfU1MyX01BUkssIFBPUlQxNTZfRk4zKSwKKwlQSU5NVVhfREFUQShYQ1RTM19NQVJLLCBQT1JUMTU3X0ZOMSksCisJUElOTVVYX0RBVEEoU0NJRkEyX0NUUzFfTUFSSywgUE9SVDE1N19GTjIpLAorCVBJTk1VWF9EQVRBKFBPUlQxNTdfTVNJT0YyX1JYRF9NQVJLLCBQT1JUMTU3X0ZOMyksCisKKwkvKiA1NS00IChGTikgKi8KKwlQSU5NVVhfREFUQShESU5UX01BUkssIFBPUlQxNThfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQTJfU0NLMV9NQVJLLCBQT1JUMTU4X0ZOMiksCisJUElOTVVYX0RBVEEoVFNfU0NLM19NQVJLLCBQT1JUMTU4X0ZOMyksCisJUElOTVVYX0RBVEEoUE9SVDE1OV9TQ0lGQl9TQ0tfTUFSSywgUE9SVDE1OV9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxNTlfU0NJRkE1X1NDS19NQVJLLCBQT1JUMTU5X0ZOMiksCisJUElOTVVYX0RBVEEoTk1JX01BUkssIFBPUlQxNTlfRk4zKSwKKwlQSU5NVVhfREFUQShQT1JUMTYwX1NDSUZCX1RYRF9NQVJLLCBQT1JUMTYwX0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDE2MF9TQ0lGQTVfVFhEX01BUkssIFBPUlQxNjBfRk4yKSwKKwlQSU5NVVhfREFUQShTT1VUMF9NQVJLLCBQT1JUMTYwX0ZOMyksCisJUElOTVVYX0RBVEEoUE9SVDE2MV9TQ0lGQl9DVFNfTUFSSywgUE9SVDE2MV9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxNjFfU0NJRkE1X0NUU19NQVJLLCBQT1JUMTYxX0ZOMiksCisJUElOTVVYX0RBVEEoWENUUzBfTUFSSywgUE9SVDE2MV9GTjMpLAorCVBJTk1VWF9EQVRBKE1GRzNfSU4yX01BUkssIFBPUlQxNjFfRk40KSwKKwlQSU5NVVhfREFUQShQT1JUMTYyX1NDSUZCX1JYRF9NQVJLLCBQT1JUMTYyX0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDE2Ml9TQ0lGQTVfUlhEX01BUkssIFBPUlQxNjJfRk4yKSwKKwlQSU5NVVhfREFUQShTSU4wX01BUkssIFBPUlQxNjJfRk4zKSwKKwlQSU5NVVhfREFUQShNRkczX0lOMV9NQVJLLCBQT1JUMTYyX0ZONCksCisJUElOTVVYX0RBVEEoUE9SVDE2M19TQ0lGQl9SVFNfTUFSSywgUE9SVDE2M19GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxNjNfU0NJRkE1X1JUU19NQVJLLCBQT1JUMTYzX0ZOMiksCisJUElOTVVYX0RBVEEoWFJUUzBfTUFSSywgUE9SVDE2M19GTjMpLAorCVBJTk1VWF9EQVRBKE1GRzNfT1VUMV9NQVJLLCBQT1JUMTYzX0ZONCksCisJUElOTVVYX0RBVEEoVFBVM1RPMF9NQVJLLCBQT1JUMTYzX0ZONSksCisJUElOTVVYX0RBVEEoTENERDBfTUFSSywgUE9SVDE5Ml9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxOTJfS0VZT1VUMF9NQVJLLCBQT1JUMTkyX0ZOMiksCisJUElOTVVYX0RBVEEoRVhUX0NLSV9NQVJLLCBQT1JUMTkyX0ZOMyksCisJUElOTVVYX0RBVEEoTENERDFfTUFSSywgUE9SVDE5M19GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxOTNfS0VZT1VUMV9NQVJLLCBQT1JUMTkzX0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDE5M19TQ0lGQTVfQ1RTX01BUkssIFBPUlQxOTNfRk4zKSwKKwlQSU5NVVhfREFUQShCQklGMl9UU1lOQzFfTUFSSywgUE9SVDE5M19GTjQpLAorCVBJTk1VWF9EQVRBKExDREQyX01BUkssIFBPUlQxOTRfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUMTk0X0tFWU9VVDJfTUFSSywgUE9SVDE5NF9GTjIpLAorCVBJTk1VWF9EQVRBKFBPUlQxOTRfU0NJRkE1X1JUU19NQVJLLCBQT1JUMTk0X0ZOMyksCisJUElOTVVYX0RBVEEoQkJJRjJfVFNDSzFfTUFSSywgUE9SVDE5NF9GTjQpLAorCVBJTk1VWF9EQVRBKExDREQzX01BUkssIFBPUlQxOTVfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUMTk1X0tFWU9VVDNfTUFSSywgUE9SVDE5NV9GTjIpLAorCVBJTk1VWF9EQVRBKFBPUlQxOTVfU0NJRkE1X1JYRF9NQVJLLCBQT1JUMTk1X0ZOMyksCisJUElOTVVYX0RBVEEoQkJJRjJfVFhEMV9NQVJLLCBQT1JUMTk1X0ZONCksCisJUElOTVVYX0RBVEEoTENERDRfTUFSSywgUE9SVDE5Nl9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQxOTZfS0VZT1VUNF9NQVJLLCBQT1JUMTk2X0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDE5Nl9TQ0lGQTVfVFhEX01BUkssIFBPUlQxOTZfRk4zKSwKKwlQSU5NVVhfREFUQShMQ0RENV9NQVJLLCBQT1JUMTk3X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDE5N19LRVlPVVQ1X01BUkssIFBPUlQxOTdfRk4yKSwKKwlQSU5NVVhfREFUQShQT1JUMTk3X1NDSUZBNV9TQ0tfTUFSSywgUE9SVDE5N19GTjMpLAorCVBJTk1VWF9EQVRBKE1GRzJfT1VUMl9NQVJLLCBQT1JUMTk3X0ZONCksCisJUElOTVVYX0RBVEEoTENERDZfTUFSSywgUE9SVDE5OF9GTjEpLAorCVBJTk1VWF9EQVRBKExDREQ3X01BUkssIFBPUlQxOTlfRk4xKSwKKwlQSU5NVVhfREFUQShUUFU0VE8xX01BUkssIFBPUlQxOTlfRk4yKSwKKwlQSU5NVVhfREFUQShNRkc0X09VVDJfTUFSSywgUE9SVDE5OV9GTjMpLAorCVBJTk1VWF9EQVRBKExDREQ4X01BUkssIFBPUlQyMDBfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUMjAwX0tFWUlOMF9NQVJLLCBQT1JUMjAwX0ZOMiksCisJUElOTVVYX0RBVEEoVklPX0RSMF9NQVJLLCBQT1JUMjAwX0ZOMyksCisJUElOTVVYX0RBVEEoRDE2X01BUkssIFBPUlQyMDBfRk40KSwKKwlQSU5NVVhfREFUQShMQ0REOV9NQVJLLCBQT1JUMjAxX0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDIwMV9LRVlJTjFfTUFSSywgUE9SVDIwMV9GTjIpLAorCVBJTk1VWF9EQVRBKFZJT19EUjFfTUFSSywgUE9SVDIwMV9GTjMpLAorCVBJTk1VWF9EQVRBKEQxN19NQVJLLCBQT1JUMjAxX0ZONCksCisJUElOTVVYX0RBVEEoTENERDEwX01BUkssIFBPUlQyMDJfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUMjAyX0tFWUlOMl9NQVJLLCBQT1JUMjAyX0ZOMiksCisJUElOTVVYX0RBVEEoVklPX0RSMl9NQVJLLCBQT1JUMjAyX0ZOMyksCisJUElOTVVYX0RBVEEoRDE4X01BUkssIFBPUlQyMDJfRk40KSwKKwlQSU5NVVhfREFUQShMQ0REMTFfTUFSSywgUE9SVDIwM19GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQyMDNfS0VZSU4zX01BUkssIFBPUlQyMDNfRk4yKSwKKwlQSU5NVVhfREFUQShWSU9fRFIzX01BUkssIFBPUlQyMDNfRk4zKSwKKwlQSU5NVVhfREFUQShEMTlfTUFSSywgUE9SVDIwM19GTjQpLAorCVBJTk1VWF9EQVRBKExDREQxMl9NQVJLLCBQT1JUMjA0X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDIwNF9LRVlJTjRfTUFSSywgUE9SVDIwNF9GTjIpLAorCVBJTk1VWF9EQVRBKFZJT19EUjRfTUFSSywgUE9SVDIwNF9GTjMpLAorCVBJTk1VWF9EQVRBKEQyMF9NQVJLLCBQT1JUMjA0X0ZONCksCisJUElOTVVYX0RBVEEoTENERDEzX01BUkssIFBPUlQyMDVfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUMjA1X0tFWUlONV9NQVJLLCBQT1JUMjA1X0ZOMiksCisJUElOTVVYX0RBVEEoVklPX0RSNV9NQVJLLCBQT1JUMjA1X0ZOMyksCisJUElOTVVYX0RBVEEoRDIxX01BUkssIFBPUlQyMDVfRk40KSwKKwlQSU5NVVhfREFUQShMQ0REMTRfTUFSSywgUE9SVDIwNl9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQyMDZfS0VZSU42X01BUkssIFBPUlQyMDZfRk4yKSwKKwlQSU5NVVhfREFUQShWSU9fRFI2X01BUkssIFBPUlQyMDZfRk4zKSwKKwlQSU5NVVhfREFUQShEMjJfTUFSSywgUE9SVDIwNl9GTjQpLAorCVBJTk1VWF9EQVRBKExDREQxNV9NQVJLLCBQT1JUMjA3X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDIwN19NU0lPRjBMX1NTMV9NQVJLLCBQT1JUMjA3X0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDIwN19LRVlPVVQwX01BUkssIFBPUlQyMDdfRk4zKSwKKwlQSU5NVVhfREFUQShWSU9fRFI3X01BUkssIFBPUlQyMDdfRk40KSwKKwlQSU5NVVhfREFUQShEMjNfTUFSSywgUE9SVDIwN19GTjUpLAorCVBJTk1VWF9EQVRBKExDREQxNl9NQVJLLCBQT1JUMjA4X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDIwOF9NU0lPRjBMX1NTMl9NQVJLLCBQT1JUMjA4X0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDIwOF9LRVlPVVQxX01BUkssIFBPUlQyMDhfRk4zKSwKKwlQSU5NVVhfREFUQShWSU9fVkRSX01BUkssIFBPUlQyMDhfRk40KSwKKwlQSU5NVVhfREFUQShEMjRfTUFSSywgUE9SVDIwOF9GTjUpLAorCVBJTk1VWF9EQVRBKExDREQxN19NQVJLLCBQT1JUMjA5X0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDIwOV9LRVlPVVQyX01BUkssIFBPUlQyMDlfRk4yKSwKKwlQSU5NVVhfREFUQShWSU9fSERSX01BUkssIFBPUlQyMDlfRk4zKSwKKwlQSU5NVVhfREFUQShEMjVfTUFSSywgUE9SVDIwOV9GTjQpLAorCVBJTk1VWF9EQVRBKExDREQxOF9NQVJLLCBQT1JUMjEwX0ZOMSksCisJUElOTVVYX0RBVEEoRFJFUTJfTUFSSywgUE9SVDIxMF9GTjIpLAorCVBJTk1VWF9EQVRBKFBPUlQyMTBfTVNJT0YwTF9TUzFfTUFSSywgUE9SVDIxMF9GTjMpLAorCVBJTk1VWF9EQVRBKEQyNl9NQVJLLCBQT1JUMjEwX0ZONCksCisJUElOTVVYX0RBVEEoTENERDE5X01BUkssIFBPUlQyMTFfRk4xKSwKKwlQSU5NVVhfREFUQShQT1JUMjExX01TSU9GMExfU1MyX01BUkssIFBPUlQyMTFfRk4yKSwKKwlQSU5NVVhfREFUQShEMjdfTUFSSywgUE9SVDIxMV9GTjMpLAorCVBJTk1VWF9EQVRBKExDREQyMF9NQVJLLCBQT1JUMjEyX0ZOMSksCisJUElOTVVYX0RBVEEoVFNfU1BTWU5DMV9NQVJLLCBQT1JUMjEyX0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YwTF9NQ0swX01BUkssIFBPUlQyMTJfRk4zKSwKKwlQSU5NVVhfREFUQShEMjhfTUFSSywgUE9SVDIxMl9GTjQpLAorCVBJTk1VWF9EQVRBKExDREQyMV9NQVJLLCBQT1JUMjEzX0ZOMSksCisJUElOTVVYX0RBVEEoVFNfU0RBVDFfTUFSSywgUE9SVDIxM19GTjIpLAorCVBJTk1VWF9EQVRBKE1TSU9GMExfTUNLMV9NQVJLLCBQT1JUMjEzX0ZOMyksCisJUElOTVVYX0RBVEEoRDI5X01BUkssIFBPUlQyMTNfRk40KSwKKwlQSU5NVVhfREFUQShMQ0REMjJfTUFSSywgUE9SVDIxNF9GTjEpLAorCVBJTk1VWF9EQVRBKFRTX1NERU4xX01BUkssIFBPUlQyMTRfRk4yKSwKKwlQSU5NVVhfREFUQShNU0lPRjBMX1JTQ0tfTUFSSywgUE9SVDIxNF9GTjMpLAorCVBJTk1VWF9EQVRBKEQzMF9NQVJLLCBQT1JUMjE0X0ZONCksCisJUElOTVVYX0RBVEEoTENERDIzX01BUkssIFBPUlQyMTVfRk4xKSwKKwlQSU5NVVhfREFUQShUU19TQ0sxX01BUkssIFBPUlQyMTVfRk4yKSwKKwlQSU5NVVhfREFUQShNU0lPRjBMX1JTWU5DX01BUkssIFBPUlQyMTVfRk4zKSwKKwlQSU5NVVhfREFUQShEMzFfTUFSSywgUE9SVDIxNV9GTjQpLAorCVBJTk1VWF9EQVRBKExDRERDS19NQVJLLCBQT1JUMjE2X0ZOMSksCisJUElOTVVYX0RBVEEoTENEV1JfTUFSSywgUE9SVDIxNl9GTjIpLAorCVBJTk1VWF9EQVRBKFBPUlQyMTZfS0VZT1VUM19NQVJLLCBQT1JUMjE2X0ZOMyksCisJUElOTVVYX0RBVEEoVklPX0NMS1JfTUFSSywgUE9SVDIxNl9GTjQpLAorCVBJTk1VWF9EQVRBKExDRFJEX01BUkssIFBPUlQyMTdfRk4xKSwKKwlQSU5NVVhfREFUQShEQUNLMl9NQVJLLCBQT1JUMjE3X0ZOMiksCisJUElOTVVYX0RBVEEoTVNJT0YwTF9UU1lOQ19NQVJLLCBQT1JUMjE3X0ZOMyksCisJUElOTVVYX0RBVEEoTENESFNZTl9NQVJLLCBQT1JUMjE4X0ZOMSksCisJUElOTVVYX0RBVEEoTENEQ1NfTUFSSywgUE9SVDIxOF9GTjIpLAorCVBJTk1VWF9EQVRBKExDRENTMl9NQVJLLCBQT1JUMjE4X0ZOMyksCisJUElOTVVYX0RBVEEoREFDSzNfTUFSSywgUE9SVDIxOF9GTjQpLAorCVBJTk1VWF9EQVRBKFBPUlQyMThfVklPX0NLT1JfTUFSSywgUE9SVDIxOF9GTjUpLAorCVBJTk1VWF9EQVRBKFBPUlQyMThfS0VZT1VUNF9NQVJLLCBQT1JUMjE4X0ZONiksCisJUElOTVVYX0RBVEEoTENERElTUF9NQVJLLCBQT1JUMjE5X0ZOMSksCisJUElOTVVYX0RBVEEoTENEUlNfTUFSSywgUE9SVDIxOV9GTjIpLAorCVBJTk1VWF9EQVRBKERSRVEzX01BUkssIFBPUlQyMTlfRk4zKSwKKwlQSU5NVVhfREFUQShNU0lPRjBMX1RTQ0tfTUFSSywgUE9SVDIxOV9GTjQpLAorCVBJTk1VWF9EQVRBKExDRFZTWU5fTUFSSywgUE9SVDIyMF9GTjEpLAorCVBJTk1VWF9EQVRBKExDRFZTWU4yX01BUkssIFBPUlQyMjBfRk4yKSwKKwlQSU5NVVhfREFUQShQT1JUMjIwX0tFWU9VVDVfTUFSSywgUE9SVDIyMF9GTjMpLAorCVBJTk1VWF9EQVRBKExDRExDTEtfTUFSSywgUE9SVDIyMV9GTjEpLAorCVBJTk1VWF9EQVRBKERSRVExX01BUkssIFBPUlQyMjFfRk4yKSwKKwlQSU5NVVhfREFUQShQV0VOX01BUkssIFBPUlQyMjFfRk4zKSwKKwlQSU5NVVhfREFUQShNU0lPRjBMX1JYRF9NQVJLLCBQT1JUMjIxX0ZONCksCisJUElOTVVYX0RBVEEoTENERE9OX01BUkssIFBPUlQyMjJfRk4xKSwKKwlQSU5NVVhfREFUQShMQ0RET04yX01BUkssIFBPUlQyMjJfRk4yKSwKKwlQSU5NVVhfREFUQShEQUNLMV9NQVJLLCBQT1JUMjIyX0ZOMyksCisJUElOTVVYX0RBVEEoT1ZDTl9NQVJLLCBQT1JUMjIyX0ZONCksCisJUElOTVVYX0RBVEEoTVNJT0YwTF9UWERfTUFSSywgUE9SVDIyMl9GTjUpLAorCVBJTk1VWF9EQVRBKFNDSUZBMV9UWERfTUFSSywgUE9SVDIyNV9GTjEpLAorCVBJTk1VWF9EQVRBKE9WQ04yX01BUkssIFBPUlQyMjVfRk4yKSwKKwlQSU5NVVhfREFUQShFWFRMUF9NQVJLLCBQT1JUMjI2X0ZOMSksCisJUElOTVVYX0RBVEEoU0NJRkExX1NDS19NQVJLLCBQT1JUMjI2X0ZOMiksCisJUElOTVVYX0RBVEEoVVNCVEVSTV9NQVJLLCBQT1JUMjI2X0ZOMyksCisJUElOTVVYX0RBVEEoUE9SVDIyNl9WSU9fQ0tPMl9NQVJLLCBQT1JUMjI2X0ZONCksCisJUElOTVVYX0RBVEEoU0NJRkExX1JUU19NQVJLLCBQT1JUMjI3X0ZOMSksCisJUElOTVVYX0RBVEEoSURJTl9NQVJLLCBQT1JUMjI3X0ZOMiksCisJUElOTVVYX0RBVEEoU0NJRkExX1JYRF9NQVJLLCBQT1JUMjI4X0ZOMSksCisJUElOTVVYX0RBVEEoU0NJRkExX0NUU19NQVJLLCBQT1JUMjI5X0ZOMSksCisJUElOTVVYX0RBVEEoTUZHMV9JTjFfTUFSSywgUE9SVDIyOV9GTjIpLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9UWERfTUFSSywgUE9SVDIzMF9GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZBMl9UWEQyX01BUkssIFBPUlQyMzBfRk4yKSwKKwlQSU5NVVhfREFUQShQT1JUMjMwX0ZTSUFPTUNfTUFSSywgUE9SVDIzMF9GTjMpLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9UU1lOQ19NQVJLLCBQT1JUMjMxX0ZOMSksCisJUElOTVVYX0RBVEEoU0NJRkEyX0NUUzJfTUFSSywgUE9SVDIzMV9GTjIpLAorCVBJTk1VWF9EQVRBKFBPUlQyMzFfRlNJQU9MUl9NQVJLLCBQT1JUMjMxX0ZOMyksCisJUElOTVVYX0RBVEEoTVNJT0YxX1RTQ0tfTUFSSywgUE9SVDIzMl9GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZBMl9TQ0syX01BUkssIFBPUlQyMzJfRk4yKSwKKwlQSU5NVVhfREFUQShQT1JUMjMyX0ZTSUFPQlRfTUFSSywgUE9SVDIzMl9GTjMpLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9SWERfTUFSSywgUE9SVDIzM19GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZBMl9SWEQyX01BUkssIFBPUlQyMzNfRk4yKSwKKwlQSU5NVVhfREFUQShHUFNfVkNPVFJJR19NQVJLLCBQT1JUMjMzX0ZOMyksCisJUElOTVVYX0RBVEEoUE9SVDIzM19GU0lBQ0tfTUFSSywgUE9SVDIzM19GTjQpLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9SU0NLX01BUkssIFBPUlQyMzRfRk4xKSwKKwlQSU5NVVhfREFUQShTQ0lGQTJfUlRTMl9NQVJLLCBQT1JUMjM0X0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDIzNF9GU0lBT1NMRF9NQVJLLCBQT1JUMjM0X0ZOMyksCisJUElOTVVYX0RBVEEoTVNJT0YxX1JTWU5DX01BUkssIFBPUlQyMzVfRk4xKSwKKwlQSU5NVVhfREFUQShPUE9SVDBfTUFSSywgUE9SVDIzNV9GTjIpLAorCVBJTk1VWF9EQVRBKE1GRzFfSU4yX01BUkssIFBPUlQyMzVfRk4zKSwKKwlQSU5NVVhfREFUQShQT1JUMjM1X0ZTSUFJTFJfTUFSSywgUE9SVDIzNV9GTjQpLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9NQ0swX01BUkssIFBPUlQyMzZfRk4xKSwKKwlQSU5NVVhfREFUQShJMkNfU0RBMl9NQVJLLCBQT1JUMjM2X0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDIzNl9GU0lBSUJUX01BUkssIFBPUlQyMzZfRk4zKSwKKwlQSU5NVVhfREFUQShNU0lPRjFfTUNLMV9NQVJLLCBQT1JUMjM3X0ZOMSksCisJUElOTVVYX0RBVEEoSTJDX1NDTDJfTUFSSywgUE9SVDIzN19GTjIpLAorCVBJTk1VWF9EQVRBKFBPUlQyMzdfRlNJQUlTTERfTUFSSywgUE9SVDIzN19GTjMpLAorCVBJTk1VWF9EQVRBKE1TSU9GMV9TUzFfTUFSSywgUE9SVDIzOF9GTjEpLAorCVBJTk1VWF9EQVRBKEVEQkdSRVEzX01BUkssIFBPUlQyMzhfRk4yKSwKKworCS8qIDU1LTUgKEZOKSAqLworCVBJTk1VWF9EQVRBKE1TSU9GMV9TUzJfTUFSSywgUE9SVDIzOV9GTjEpLAorCVBJTk1VWF9EQVRBKFNDSUZBNl9UWERfTUFSSywgUE9SVDI0MF9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQyNDFfSVJEQV9PVVRfTUFSSywgUE9SVDI0MV9GTjEpLAorCVBJTk1VWF9EQVRBKFBPUlQyNDFfSVJPVVRfTUFSSywgUE9SVDI0MV9GTjIpLAorCVBJTk1VWF9EQVRBKE1GRzRfT1VUMV9NQVJLLCBQT1JUMjQxX0ZOMyksCisJUElOTVVYX0RBVEEoVFBVNFRPMF9NQVJLLCBQT1JUMjQxX0ZONCksCisJUElOTVVYX0RBVEEoUE9SVDI0Ml9JUkRBX0lOX01BUkssIFBPUlQyNDJfRk4xKSwKKwlQSU5NVVhfREFUQShNRkc0X0lOMl9NQVJLLCBQT1JUMjQyX0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDI0M19JUkRBX0ZJUlNFTF9NQVJLLCBQT1JUMjQzX0ZOMSksCisJUElOTVVYX0RBVEEoUE9SVDI0M19WSU9fQ0tPMl9NQVJLLCBQT1JUMjQzX0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDI0NF9TQ0lGQTVfQ1RTX01BUkssIFBPUlQyNDRfRk4xKSwKKwlQSU5NVVhfREFUQShNRkcyX0lOMV9NQVJLLCBQT1JUMjQ0X0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDI0NF9TQ0lGQl9DVFNfTUFSSywgUE9SVDI0NF9GTjMpLAorCVBJTk1VWF9EQVRBKFBPUlQyNDVfU0NJRkE1X1JUU19NQVJLLCBQT1JUMjQ1X0ZOMSksCisJUElOTVVYX0RBVEEoTUZHMl9JTjJfTUFSSywgUE9SVDI0NV9GTjIpLAorCVBJTk1VWF9EQVRBKFBPUlQyNDVfU0NJRkJfUlRTX01BUkssIFBPUlQyNDVfRk4zKSwKKwlQSU5NVVhfREFUQShQT1JUMjQ2X1NDSUZBNV9SWERfTUFSSywgUE9SVDI0Nl9GTjEpLAorCVBJTk1VWF9EQVRBKE1GRzFfT1VUMV9NQVJLLCBQT1JUMjQ2X0ZOMiksCisJUElOTVVYX0RBVEEoUE9SVDI0Nl9TQ0lGQl9SWERfTUFSSywgUE9SVDI0Nl9GTjMpLAorCVBJTk1VWF9EQVRBKFRQVTFUTzBfTUFSSywgUE9SVDI0Nl9GTjQpLAorCVBJTk1VWF9EQVRBKFBPUlQyNDdfU0NJRkE1X1RYRF9NQVJLLCBQT1JUMjQ3X0ZOMSksCisJUElOTVVYX0RBVEEoTUZHM19PVVQyX01BUkssIFBPUlQyNDdfRk4yKSwKKwlQSU5NVVhfREFUQShQT1JUMjQ3X1NDSUZCX1RYRF9NQVJLLCBQT1JUMjQ3X0ZOMyksCisJUElOTVVYX0RBVEEoVFBVM1RPMV9NQVJLLCBQT1JUMjQ3X0ZONCksCisJUElOTVVYX0RBVEEoUE9SVDI0OF9TQ0lGQTVfU0NLX01BUkssIFBPUlQyNDhfRk4xKSwKKwlQSU5NVVhfREFUQShNRkcyX09VVDFfTUFSSywgUE9SVDI0OF9GTjIpLAorCVBJTk1VWF9EQVRBKFBPUlQyNDhfU0NJRkJfU0NLX01BUkssIFBPUlQyNDhfRk4zKSwKKwlQSU5NVVhfREFUQShUUFUyVE8wX01BUkssIFBPUlQyNDhfRk40KSwKKwlQSU5NVVhfREFUQShQT1JUMjQ5X0lST1VUX01BUkssIFBPUlQyNDlfRk4xKSwKKwlQSU5NVVhfREFUQShNRkc0X0lOMV9NQVJLLCBQT1JUMjQ5X0ZOMiksCisJUElOTVVYX0RBVEEoU0RISUNMSzBfTUFSSywgUE9SVDI1MF9GTjEpLAorCVBJTk1VWF9EQVRBKFRDSzJfU1dDTEtfTUMwX01BUkssIFBPUlQyNTBfRk4yKSwKKwlQSU5NVVhfREFUQShTREhJQ0QwX01BUkssIFBPUlQyNTFfRk4xKSwKKwlQSU5NVVhfREFUQShTREhJRDBfMF9NQVJLLCBQT1JUMjUyX0ZOMSksCisJUElOTVVYX0RBVEEoVE1TMl9TV0RJT19NQzBfTUFSSywgUE9SVDI1Ml9GTjIpLAorCVBJTk1VWF9EQVRBKFNESElEMF8xX01BUkssIFBPUlQyNTNfRk4xKSwKKwlQSU5NVVhfREFUQShURE8yX1NXTzBfTUMwX01BUkssIFBPUlQyNTNfRk4yKSwKKwlQSU5NVVhfREFUQShTREhJRDBfMl9NQVJLLCBQT1JUMjU0X0ZOMSksCisJUElOTVVYX0RBVEEoVERJMl9NQVJLLCBQT1JUMjU0X0ZOMiksCisJUElOTVVYX0RBVEEoU0RISUQwXzNfTUFSSywgUE9SVDI1NV9GTjEpLAorCVBJTk1VWF9EQVRBKFJUQ0syX1NXTzFfTUMwX01BUkssIFBPUlQyNTVfRk4yKSwKKwlQSU5NVVhfREFUQShTREhJQ01EMF9NQVJLLCBQT1JUMjU2X0ZOMSksCisJUElOTVVYX0RBVEEoVFJTVDJfTUFSSywgUE9SVDI1Nl9GTjIpLAorCVBJTk1VWF9EQVRBKFNESElXUDBfTUFSSywgUE9SVDI1N19GTjEpLAorCVBJTk1VWF9EQVRBKEVEQkdSRVEyX01BUkssIFBPUlQyNTdfRk4yKSwKKwlQSU5NVVhfREFUQShTREhJQ0xLMV9NQVJLLCBQT1JUMjU4X0ZOMSksCisJUElOTVVYX0RBVEEoVENLM19TV0NMS19NQzFfTUFSSywgUE9SVDI1OF9GTjIpLAorCVBJTk1VWF9EQVRBKFNESElEMV8wX01BUkssIFBPUlQyNTlfRk4xKSwKKwlQSU5NVVhfREFUQShNMTFfU0xDRF9TTzJfTUFSSywgUE9SVDI1OV9GTjIpLAorCVBJTk1VWF9EQVRBKFRTX1NQU1lOQzJfTUFSSywgUE9SVDI1OV9GTjMpLAorCVBJTk1VWF9EQVRBKFRNUzNfU1dESU9fTUMxX01BUkssIFBPUlQyNTlfRk40KSwKKwlQSU5NVVhfREFUQShTREhJRDFfMV9NQVJLLCBQT1JUMjYwX0ZOMSksCisJUElOTVVYX0RBVEEoTTlfU0xDRF9BMDJfTUFSSywgUE9SVDI2MF9GTjIpLAorCVBJTk1VWF9EQVRBKFRTX1NEQVQyX01BUkssIFBPUlQyNjBfRk4zKSwKKwlQSU5NVVhfREFUQShURE8zX1NXTzBfTUMxX01BUkssIFBPUlQyNjBfRk40KSwKKwlQSU5NVVhfREFUQShTREhJRDFfMl9NQVJLLCBQT1JUMjYxX0ZOMSksCisJUElOTVVYX0RBVEEoTTEwX1NMQ0RfQ0syX01BUkssIFBPUlQyNjFfRk4yKSwKKwlQSU5NVVhfREFUQShUU19TREVOMl9NQVJLLCBQT1JUMjYxX0ZOMyksCisJUElOTVVYX0RBVEEoVERJM19NQVJLLCBQT1JUMjYxX0ZONCksCisJUElOTVVYX0RBVEEoU0RISUQxXzNfTUFSSywgUE9SVDI2Ml9GTjEpLAorCVBJTk1VWF9EQVRBKE0xMl9TTENEX0NFMl9NQVJLLCBQT1JUMjYyX0ZOMiksCisJUElOTVVYX0RBVEEoVFNfU0NLMl9NQVJLLCBQT1JUMjYyX0ZOMyksCisJUElOTVVYX0RBVEEoUlRDSzNfU1dPMV9NQzFfTUFSSywgUE9SVDI2Ml9GTjQpLAorCVBJTk1VWF9EQVRBKFNESElDTUQxX01BUkssIFBPUlQyNjNfRk4xKSwKKwlQSU5NVVhfREFUQShUUlNUM19NQVJLLCBQT1JUMjYzX0ZOMiksCisJUElOTVVYX0RBVEEoUkVTRVRPVVRTX01BUkssIFBPUlQyNjRfRk4xKSwKK307CisKKyNkZWZpbmUgX0dQSU9fUE9SVChwZngsIHNmeCkgUElOTVVYX0dQSU8oR1BJT19QT1JUIyNwZngsIFBPUlQjI3BmeCMjX0RBVEEpCisjZGVmaW5lIEdQSU9fUE9SVF8yNjUoKSBfMjY1KF9HUElPX1BPUlQsICwgdW51c2VkKQorI2RlZmluZSBHUElPX0ZOKHN0cikgUElOTVVYX0dQSU8oR1BJT19GTl8jI3N0ciwgc3RyIyNfTUFSSykKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfZ3BpbyBwaW5tdXhfZ3Bpb3NbXSA9IHsKKwkvKiA1NS0xIC0+IDU1LTUgKEdQSU8pICovCisJR1BJT19QT1JUXzI2NSgpLAorCisJLyogU3BlY2lhbCBQdWxsLXVwIC8gUHVsbC1kb3duIEZ1bmN0aW9ucyAqLworCUdQSU9fRk4oUE9SVDY2X0tFWUlOMF9QVSksIEdQSU9fRk4oUE9SVDY3X0tFWUlOMV9QVSksCisJR1BJT19GTihQT1JUNjhfS0VZSU4yX1BVKSwgR1BJT19GTihQT1JUNjlfS0VZSU4zX1BVKSwKKwlHUElPX0ZOKFBPUlQ3MF9LRVlJTjRfUFUpLCBHUElPX0ZOKFBPUlQ3MV9LRVlJTjVfUFUpLAorCUdQSU9fRk4oUE9SVDcyX0tFWUlONl9QVSksCisKKwkvKiA1NS0xIChGTikgKi8KKwlHUElPX0ZOKFZCVVNfMCksCisJR1BJT19GTihDUE9SVDApLAorCUdQSU9fRk4oQ1BPUlQxKSwKKwlHUElPX0ZOKENQT1JUMiksCisJR1BJT19GTihDUE9SVDMpLAorCUdQSU9fRk4oQ1BPUlQ0KSwKKwlHUElPX0ZOKENQT1JUNSksCisJR1BJT19GTihDUE9SVDYpLAorCUdQSU9fRk4oQ1BPUlQ3KSwKKwlHUElPX0ZOKENQT1JUOCksCisJR1BJT19GTihDUE9SVDkpLAorCUdQSU9fRk4oQ1BPUlQxMCksCisJR1BJT19GTihDUE9SVDExKSwgR1BJT19GTihTSU4yKSwKKwlHUElPX0ZOKENQT1JUMTIpLCBHUElPX0ZOKFhDVFMyKSwKKwlHUElPX0ZOKENQT1JUMTMpLCBHUElPX0ZOKFJGU1BPNCksCisJR1BJT19GTihDUE9SVDE0KSwgR1BJT19GTihSRlNQTzUpLAorCUdQSU9fRk4oQ1BPUlQxNSksIEdQSU9fRk4oU0NJRkEwX1NDSyksIEdQSU9fRk4oR1BTX0FHQzIpLAorCUdQSU9fRk4oQ1BPUlQxNiksIEdQSU9fRk4oU0NJRkEwX1RYRCksIEdQSU9fRk4oR1BTX0FHQzMpLAorCUdQSU9fRk4oQ1BPUlQxN19JQ19PRSksIEdQSU9fRk4oU09VVDIpLAorCUdQSU9fRk4oQ1BPUlQxOCksIEdQSU9fRk4oWFJUUzIpLCBHUElPX0ZOKFBPUlQxOV9WSU9fQ0tPMiksCisJR1BJT19GTihDUE9SVDE5X01QT1JUMSksCisJR1BJT19GTihDUE9SVDIwKSwgR1BJT19GTihSRlNQTzYpLAorCUdQSU9fRk4oQ1BPUlQyMSksIEdQSU9fRk4oU1RBVFVTMCksCisJR1BJT19GTihDUE9SVDIyKSwgR1BJT19GTihTVEFUVVMxKSwKKwlHUElPX0ZOKENQT1JUMjMpLCBHUElPX0ZOKFNUQVRVUzIpLCBHUElPX0ZOKFJGU1BPNyksCisJR1BJT19GTihCX1NZTkxEMSksCisJR1BJT19GTihCX1NZTkxEMiksIEdQSU9fRk4oU1lTRU5NU0spLAorCUdQSU9fRk4oWE1BSU5QUyksCisJR1BJT19GTihYRElWUFMpLAorCUdQSU9fRk4oWElEUlNUKSwKKwlHUElPX0ZOKElEQ0xLKSwgR1BJT19GTihJQ19EUCksCisJR1BJT19GTihJRElPKSwgR1BJT19GTihJQ19ETSksCisJR1BJT19GTihTT1VUMSksIEdQSU9fRk4oU0NJRkE0X1RYRCksIEdQSU9fRk4oTTAyX0JFUkRBVCksCisJR1BJT19GTihTSU4xKSwgR1BJT19GTihTQ0lGQTRfUlhEKSwgR1BJT19GTihYV1VQKSwKKwlHUElPX0ZOKFhSVFMxKSwgR1BJT19GTihTQ0lGQTRfUlRTKSwgR1BJT19GTihNMDNfQkVSQ0xLKSwKKwlHUElPX0ZOKFhDVFMxKSwgR1BJT19GTihTQ0lGQTRfQ1RTKSwKKwlHUElPX0ZOKFBDTUNMS08pLAorCUdQSU9fRk4oU1lOQzhLTyksCisKKwkvKiA1NS0yIChGTikgKi8KKwlHUElPX0ZOKEROUENNX0EpLAorCUdQSU9fRk4oVVBQQ01fQSksCisJR1BJT19GTihWQUNLKSwKKwlHUElPX0ZOKFhUQUxCMUwpLAorCUdQSU9fRk4oR1BTX0FHQzEpLCBHUElPX0ZOKFNDSUZBMF9SVFMpLAorCUdQSU9fRk4oR1BTX0FHQzQpLCBHUElPX0ZOKFNDSUZBMF9SWEQpLAorCUdQSU9fRk4oR1BTX1BXUkRPV04pLCBHUElPX0ZOKFNDSUZBMF9DVFMpLAorCUdQSU9fRk4oR1BTX0lNKSwKKwlHUElPX0ZOKEdQU19JUyksCisJR1BJT19GTihHUFNfUU0pLAorCUdQSU9fRk4oR1BTX1FTKSwKKwlHUElPX0ZOKEZNU09DSyksIEdQSU9fRk4oUE9SVDQ5X0lSREFfT1VUKSwgR1BJT19GTihQT1JUNDlfSVJPVVQpLAorCUdQSU9fRk4oRk1TT09MUiksIEdQSU9fRk4oQkJJRjJfVFNZTkMyKSwgR1BJT19GTihUUFUyVE8yKSwKKwlHUElPX0ZOKElQT1JUMyksIEdQSU9fRk4oRk1TSU9MUiksCisJR1BJT19GTihGTVNPT0JUKSwgR1BJT19GTihCQklGMl9UU0NLMiksIEdQSU9fRk4oVFBVMlRPMyksCisJR1BJT19GTihPUE9SVDEpLCBHUElPX0ZOKEZNU0lPQlQpLAorCUdQSU9fRk4oRk1TT1NMRCksIEdQSU9fRk4oQkJJRjJfVFhEMiksIEdQSU9fRk4oT1BPUlQyKSwKKwlHUElPX0ZOKEZNU09JTFIpLCBHUElPX0ZOKFBPUlQ1M19JUkRBX0lOKSwgR1BJT19GTihUUFUzVE8zKSwKKwlHUElPX0ZOKE9QT1JUMyksIEdQSU9fRk4oRk1TSUlMUiksCisJR1BJT19GTihGTVNPSUJUKSwgR1BJT19GTihQT1JUNTRfSVJEQV9GSVJTRUwpLCBHUElPX0ZOKFRQVTNUTzIpLAorCUdQSU9fRk4oRk1TSUlCVCksCisJR1BJT19GTihGTVNJU0xEKSwgR1BJT19GTihNRkcwX09VVDEpLCBHUElPX0ZOKFRQVTBUTzApLAorCUdQSU9fRk4oQTBfRUEwKSwgR1BJT19GTihCUyksCisJR1BJT19GTihBMTJfRUExMiksIEdQSU9fRk4oUE9SVDU4X1ZJT19DS09SKSwgR1BJT19GTihUUFU0VE8yKSwKKwlHUElPX0ZOKEExM19FQTEzKSwgR1BJT19GTihQT1JUNTlfSVJPVVQpLCBHUElPX0ZOKE1GRzBfT1VUMiksCisJR1BJT19GTihUUFUwVE8xKSwKKwlHUElPX0ZOKEExNF9FQTE0KSwgR1BJT19GTihQT1JUNjBfS0VZT1VUNSksCisJR1BJT19GTihBMTVfRUExNSksIEdQSU9fRk4oUE9SVDYxX0tFWU9VVDQpLAorCUdQSU9fRk4oQTE2X0VBMTYpLCBHUElPX0ZOKFBPUlQ2Ml9LRVlPVVQzKSwgR1BJT19GTihNU0lPRjBfU1MxKSwKKwlHUElPX0ZOKEExN19FQTE3KSwgR1BJT19GTihQT1JUNjNfS0VZT1VUMiksIEdQSU9fRk4oTVNJT0YwX1RTWU5DKSwKKwlHUElPX0ZOKEExOF9FQTE4KSwgR1BJT19GTihQT1JUNjRfS0VZT1VUMSksIEdQSU9fRk4oTVNJT0YwX1RTQ0spLAorCUdQSU9fRk4oQTE5X0VBMTkpLCBHUElPX0ZOKFBPUlQ2NV9LRVlPVVQwKSwgR1BJT19GTihNU0lPRjBfVFhEKSwKKwlHUElPX0ZOKEEyMF9FQTIwKSwgR1BJT19GTihQT1JUNjZfS0VZSU4wKSwgR1BJT19GTihNU0lPRjBfUlNDSyksCisJR1BJT19GTihBMjFfRUEyMSksIEdQSU9fRk4oUE9SVDY3X0tFWUlOMSksIEdQSU9fRk4oTVNJT0YwX1JTWU5DKSwKKwlHUElPX0ZOKEEyMl9FQTIyKSwgR1BJT19GTihQT1JUNjhfS0VZSU4yKSwgR1BJT19GTihNU0lPRjBfTUNLMCksCisJR1BJT19GTihBMjNfRUEyMyksIEdQSU9fRk4oUE9SVDY5X0tFWUlOMyksIEdQSU9fRk4oTVNJT0YwX01DSzEpLAorCUdQSU9fRk4oQTI0X0VBMjQpLCBHUElPX0ZOKFBPUlQ3MF9LRVlJTjQpLCBHUElPX0ZOKE1TSU9GMF9SWEQpLAorCUdQSU9fRk4oQTI1X0VBMjUpLCBHUElPX0ZOKFBPUlQ3MV9LRVlJTjUpLCBHUElPX0ZOKE1TSU9GMF9TUzIpLAorCUdQSU9fRk4oQTI2KSwgR1BJT19GTihQT1JUNzJfS0VZSU42KSwKKwlHUElPX0ZOKEQwX0VEMF9OQUYwKSwKKwlHUElPX0ZOKEQxX0VEMV9OQUYxKSwKKwlHUElPX0ZOKEQyX0VEMl9OQUYyKSwKKwlHUElPX0ZOKEQzX0VEM19OQUYzKSwKKwlHUElPX0ZOKEQ0X0VENF9OQUY0KSwKKwlHUElPX0ZOKEQ1X0VENV9OQUY1KSwKKwlHUElPX0ZOKEQ2X0VENl9OQUY2KSwKKwlHUElPX0ZOKEQ3X0VEN19OQUY3KSwKKwlHUElPX0ZOKEQ4X0VEOF9OQUY4KSwKKwlHUElPX0ZOKEQ5X0VEOV9OQUY5KSwKKwlHUElPX0ZOKEQxMF9FRDEwX05BRjEwKSwKKwlHUElPX0ZOKEQxMV9FRDExX05BRjExKSwKKwlHUElPX0ZOKEQxMl9FRDEyX05BRjEyKSwKKwlHUElPX0ZOKEQxM19FRDEzX05BRjEzKSwKKwlHUElPX0ZOKEQxNF9FRDE0X05BRjE0KSwKKwlHUElPX0ZOKEQxNV9FRDE1X05BRjE1KSwKKwlHUElPX0ZOKENTNCksCisJR1BJT19GTihDUzVBKSwgR1BJT19GTihGTVNJQ0spLAorCisJLyogNTUtMyAoRk4pICovCisJR1BJT19GTihDUzVCKSwgR1BJT19GTihGQ0UxKSwKKwlHUElPX0ZOKENTNkIpLCBHUElPX0ZOKFhDUzIpLCBHUElPX0ZOKENTNkEpLCBHUElPX0ZOKERBQ0swKSwKKwlHUElPX0ZOKEZDRTApLAorCUdQSU9fRk4oV0FJVCksIEdQSU9fRk4oRFJFUTApLAorCUdQSU9fRk4oUkRfWFJEKSwKKwlHUElPX0ZOKFdFMF9YV1IwX0ZXRSksCisJR1BJT19GTihXRTFfWFdSMSksCisJR1BJT19GTihGUkIpLAorCUdQSU9fRk4oQ0tPKSwKKwlHUElPX0ZOKE5CUlNUT1VUKSwKKwlHUElPX0ZOKE5CUlNUKSwKKwlHUElPX0ZOKEdQU19FUFBTSU4pLAorCUdQSU9fRk4oTEFUQ0hQVUxTRSksCisJR1BJT19GTihMVEVTSUdOQUwpLAorCUdQSU9fRk4oTEVHQUNZU1RBVEUpLAorCUdQSU9fRk4oVENLT04pLAorCUdQSU9fRk4oVklPX1ZEKSwgR1BJT19GTihQT1JUMTI4X0tFWU9VVDApLCBHUElPX0ZOKElQT1JUMCksCisJR1BJT19GTihWSU9fSEQpLCBHUElPX0ZOKFBPUlQxMjlfS0VZT1VUMSksIEdQSU9fRk4oSVBPUlQxKSwKKwlHUElPX0ZOKFZJT19EMCksIEdQSU9fRk4oUE9SVDEzMF9LRVlPVVQyKSwgR1BJT19GTihQT1JUMTMwX01TSU9GMl9SWEQpLAorCUdQSU9fRk4oVklPX0QxKSwgR1BJT19GTihQT1JUMTMxX0tFWU9VVDMpLCBHUElPX0ZOKFBPUlQxMzFfTVNJT0YyX1NTMSksCisJR1BJT19GTihWSU9fRDIpLCBHUElPX0ZOKFBPUlQxMzJfS0VZT1VUNCksIEdQSU9fRk4oUE9SVDEzMl9NU0lPRjJfU1MyKSwKKwlHUElPX0ZOKFZJT19EMyksIEdQSU9fRk4oUE9SVDEzM19LRVlPVVQ1KSwKKwlHUElPX0ZOKFBPUlQxMzNfTVNJT0YyX1RTWU5DKSwKKwlHUElPX0ZOKFZJT19ENCksIEdQSU9fRk4oUE9SVDEzNF9LRVlJTjApLCBHUElPX0ZOKFBPUlQxMzRfTVNJT0YyX1RYRCksCisJR1BJT19GTihWSU9fRDUpLCBHUElPX0ZOKFBPUlQxMzVfS0VZSU4xKSwgR1BJT19GTihQT1JUMTM1X01TSU9GMl9UU0NLKSwKKwlHUElPX0ZOKFZJT19ENiksIEdQSU9fRk4oUE9SVDEzNl9LRVlJTjIpLAorCUdQSU9fRk4oVklPX0Q3KSwgR1BJT19GTihQT1JUMTM3X0tFWUlOMyksCisJR1BJT19GTihWSU9fRDgpLCBHUElPX0ZOKE05X1NMQ0RfQTAxKSwgR1BJT19GTihQT1JUMTM4X0ZTSUFPTUMpLAorCUdQSU9fRk4oVklPX0Q5KSwgR1BJT19GTihNMTBfU0xDRF9DSzEpLCBHUElPX0ZOKFBPUlQxMzlfRlNJQU9MUiksCisJR1BJT19GTihWSU9fRDEwKSwgR1BJT19GTihNMTFfU0xDRF9TTzEpLCBHUElPX0ZOKFRQVTBUTzIpLAorCUdQSU9fRk4oUE9SVDE0MF9GU0lBT0JUKSwKKwlHUElPX0ZOKFZJT19EMTEpLCBHUElPX0ZOKE0xMl9TTENEX0NFMSksIEdQSU9fRk4oVFBVMFRPMyksCisJR1BJT19GTihQT1JUMTQxX0ZTSUFPU0xEKSwKKwlHUElPX0ZOKFZJT19EMTIpLCBHUElPX0ZOKE0xM19CU1cpLCBHUElPX0ZOKFBPUlQxNDJfRlNJQUNLKSwKKwlHUElPX0ZOKFZJT19EMTMpLCBHUElPX0ZOKE0xNF9HU1cpLCBHUElPX0ZOKFBPUlQxNDNfRlNJQUlMUiksCisJR1BJT19GTihWSU9fRDE0KSwgR1BJT19GTihNMTVfUlNXKSwgR1BJT19GTihQT1JUMTQ0X0ZTSUFJQlQpLAorCUdQSU9fRk4oVklPX0QxNSksIEdQSU9fRk4oVFBVMVRPMyksIEdQSU9fRk4oUE9SVDE0NV9GU0lBSVNMRCksCisJR1BJT19GTihWSU9fQ0xLKSwgR1BJT19GTihQT1JUMTQ2X0tFWUlONCksIEdQSU9fRk4oSVBPUlQyKSwKKwlHUElPX0ZOKFZJT19GSUVMRCksIEdQSU9fRk4oUE9SVDE0N19LRVlJTjUpLAorCUdQSU9fRk4oVklPX0NLTyksIEdQSU9fRk4oUE9SVDE0OF9LRVlJTjYpLAorCUdQSU9fRk4oQTI3KSwgR1BJT19GTihSRFdSX1hXRSksIEdQSU9fRk4oTUZHMF9JTjEpLAorCUdQSU9fRk4oTUZHMF9JTjIpLAorCUdQSU9fRk4oVFNfU1BTWU5DMyksIEdQSU9fRk4oTVNJT0YyX1JTQ0spLAorCUdQSU9fRk4oVFNfU0RBVDMpLCBHUElPX0ZOKE1TSU9GMl9SU1lOQyksCisJR1BJT19GTihUUFUxVE8yKSwgR1BJT19GTihUU19TREVOMyksIEdQSU9fRk4oUE9SVDE1M19NU0lPRjJfU1MxKSwKKwlHUElPX0ZOKFNPVVQzKSwgR1BJT19GTihTQ0lGQTJfVFhEMSksIEdQSU9fRk4oTVNJT0YyX01DSzApLAorCUdQSU9fRk4oU0lOMyksIEdQSU9fRk4oU0NJRkEyX1JYRDEpLCBHUElPX0ZOKE1TSU9GMl9NQ0sxKSwKKwlHUElPX0ZOKFhSVFMzKSwgR1BJT19GTihTQ0lGQTJfUlRTMSksIEdQSU9fRk4oUE9SVDE1Nl9NU0lPRjJfU1MyKSwKKwlHUElPX0ZOKFhDVFMzKSwgR1BJT19GTihTQ0lGQTJfQ1RTMSksIEdQSU9fRk4oUE9SVDE1N19NU0lPRjJfUlhEKSwKKworCS8qIDU1LTQgKEZOKSAqLworCUdQSU9fRk4oRElOVCksIEdQSU9fRk4oU0NJRkEyX1NDSzEpLCBHUElPX0ZOKFRTX1NDSzMpLAorCUdQSU9fRk4oUE9SVDE1OV9TQ0lGQl9TQ0spLCBHUElPX0ZOKFBPUlQxNTlfU0NJRkE1X1NDSyksIEdQSU9fRk4oTk1JKSwKKwlHUElPX0ZOKFBPUlQxNjBfU0NJRkJfVFhEKSwgR1BJT19GTihQT1JUMTYwX1NDSUZBNV9UWEQpLCBHUElPX0ZOKFNPVVQwKSwKKwlHUElPX0ZOKFBPUlQxNjFfU0NJRkJfQ1RTKSwgR1BJT19GTihQT1JUMTYxX1NDSUZBNV9DVFMpLCBHUElPX0ZOKFhDVFMwKSwKKwlHUElPX0ZOKE1GRzNfSU4yKSwKKwlHUElPX0ZOKFBPUlQxNjJfU0NJRkJfUlhEKSwgR1BJT19GTihQT1JUMTYyX1NDSUZBNV9SWEQpLCBHUElPX0ZOKFNJTjApLAorCUdQSU9fRk4oTUZHM19JTjEpLAorCUdQSU9fRk4oUE9SVDE2M19TQ0lGQl9SVFMpLCBHUElPX0ZOKFBPUlQxNjNfU0NJRkE1X1JUUyksIEdQSU9fRk4oWFJUUzApLAorCUdQSU9fRk4oTUZHM19PVVQxKSwgR1BJT19GTihUUFUzVE8wKSwKKwlHUElPX0ZOKExDREQwKSwgR1BJT19GTihQT1JUMTkyX0tFWU9VVDApLCBHUElPX0ZOKEVYVF9DS0kpLAorCUdQSU9fRk4oTENERDEpLCBHUElPX0ZOKFBPUlQxOTNfS0VZT1VUMSksIEdQSU9fRk4oUE9SVDE5M19TQ0lGQTVfQ1RTKSwKKwlHUElPX0ZOKEJCSUYyX1RTWU5DMSksCisJR1BJT19GTihMQ0REMiksIEdQSU9fRk4oUE9SVDE5NF9LRVlPVVQyKSwgR1BJT19GTihQT1JUMTk0X1NDSUZBNV9SVFMpLAorCUdQSU9fRk4oQkJJRjJfVFNDSzEpLAorCUdQSU9fRk4oTENERDMpLCBHUElPX0ZOKFBPUlQxOTVfS0VZT1VUMyksIEdQSU9fRk4oUE9SVDE5NV9TQ0lGQTVfUlhEKSwKKwlHUElPX0ZOKEJCSUYyX1RYRDEpLAorCUdQSU9fRk4oTENERDQpLCBHUElPX0ZOKFBPUlQxOTZfS0VZT1VUNCksIEdQSU9fRk4oUE9SVDE5Nl9TQ0lGQTVfVFhEKSwKKwlHUElPX0ZOKExDREQ1KSwgR1BJT19GTihQT1JUMTk3X0tFWU9VVDUpLCBHUElPX0ZOKFBPUlQxOTdfU0NJRkE1X1NDSyksCisJR1BJT19GTihNRkcyX09VVDIpLAorCUdQSU9fRk4oTENERDYpLAorCUdQSU9fRk4oTENERDcpLCBHUElPX0ZOKFRQVTRUTzEpLCBHUElPX0ZOKE1GRzRfT1VUMiksCisJR1BJT19GTihMQ0REOCksIEdQSU9fRk4oUE9SVDIwMF9LRVlJTjApLCBHUElPX0ZOKFZJT19EUjApLAorCUdQSU9fRk4oRDE2KSwKKwlHUElPX0ZOKExDREQ5KSwgR1BJT19GTihQT1JUMjAxX0tFWUlOMSksIEdQSU9fRk4oVklPX0RSMSksCisJR1BJT19GTihEMTcpLAorCUdQSU9fRk4oTENERDEwKSwgR1BJT19GTihQT1JUMjAyX0tFWUlOMiksIEdQSU9fRk4oVklPX0RSMiksCisJR1BJT19GTihEMTgpLAorCUdQSU9fRk4oTENERDExKSwgR1BJT19GTihQT1JUMjAzX0tFWUlOMyksIEdQSU9fRk4oVklPX0RSMyksCisJR1BJT19GTihEMTkpLAorCUdQSU9fRk4oTENERDEyKSwgR1BJT19GTihQT1JUMjA0X0tFWUlONCksIEdQSU9fRk4oVklPX0RSNCksCisJR1BJT19GTihEMjApLAorCUdQSU9fRk4oTENERDEzKSwgR1BJT19GTihQT1JUMjA1X0tFWUlONSksIEdQSU9fRk4oVklPX0RSNSksCisJR1BJT19GTihEMjEpLAorCUdQSU9fRk4oTENERDE0KSwgR1BJT19GTihQT1JUMjA2X0tFWUlONiksIEdQSU9fRk4oVklPX0RSNiksCisJR1BJT19GTihEMjIpLAorCUdQSU9fRk4oTENERDE1KSwgR1BJT19GTihQT1JUMjA3X01TSU9GMExfU1MxKSwgR1BJT19GTihQT1JUMjA3X0tFWU9VVDApLAorCUdQSU9fRk4oVklPX0RSNyksIEdQSU9fRk4oRDIzKSwKKwlHUElPX0ZOKExDREQxNiksIEdQSU9fRk4oUE9SVDIwOF9NU0lPRjBMX1NTMiksIEdQSU9fRk4oUE9SVDIwOF9LRVlPVVQxKSwKKwlHUElPX0ZOKFZJT19WRFIpLCBHUElPX0ZOKEQyNCksCisJR1BJT19GTihMQ0REMTcpLCBHUElPX0ZOKFBPUlQyMDlfS0VZT1VUMiksIEdQSU9fRk4oVklPX0hEUiksCisJR1BJT19GTihEMjUpLAorCUdQSU9fRk4oTENERDE4KSwgR1BJT19GTihEUkVRMiksIEdQSU9fRk4oUE9SVDIxMF9NU0lPRjBMX1NTMSksCisJR1BJT19GTihEMjYpLAorCUdQSU9fRk4oTENERDE5KSwgR1BJT19GTihQT1JUMjExX01TSU9GMExfU1MyKSwgR1BJT19GTihEMjcpLAorCUdQSU9fRk4oTENERDIwKSwgR1BJT19GTihUU19TUFNZTkMxKSwgR1BJT19GTihNU0lPRjBMX01DSzApLAorCUdQSU9fRk4oRDI4KSwKKwlHUElPX0ZOKExDREQyMSksIEdQSU9fRk4oVFNfU0RBVDEpLCBHUElPX0ZOKE1TSU9GMExfTUNLMSksCisJR1BJT19GTihEMjkpLAorCUdQSU9fRk4oTENERDIyKSwgR1BJT19GTihUU19TREVOMSksIEdQSU9fRk4oTVNJT0YwTF9SU0NLKSwKKwlHUElPX0ZOKEQzMCksCisJR1BJT19GTihMQ0REMjMpLCBHUElPX0ZOKFRTX1NDSzEpLCBHUElPX0ZOKE1TSU9GMExfUlNZTkMpLAorCUdQSU9fRk4oRDMxKSwKKwlHUElPX0ZOKExDRERDSyksIEdQSU9fRk4oTENEV1IpLCBHUElPX0ZOKFBPUlQyMTZfS0VZT1VUMyksCisJR1BJT19GTihWSU9fQ0xLUiksCisJR1BJT19GTihMQ0RSRCksIEdQSU9fRk4oREFDSzIpLCBHUElPX0ZOKE1TSU9GMExfVFNZTkMpLAorCUdQSU9fRk4oTENESFNZTiksIEdQSU9fRk4oTENEQ1MpLCBHUElPX0ZOKExDRENTMiksIEdQSU9fRk4oREFDSzMpLAorCUdQSU9fRk4oUE9SVDIxOF9WSU9fQ0tPUiksIEdQSU9fRk4oUE9SVDIxOF9LRVlPVVQ0KSwKKwlHUElPX0ZOKExDRERJU1ApLCBHUElPX0ZOKExDRFJTKSwgR1BJT19GTihEUkVRMyksIEdQSU9fRk4oTVNJT0YwTF9UU0NLKSwKKwlHUElPX0ZOKExDRFZTWU4pLCBHUElPX0ZOKExDRFZTWU4yKSwgR1BJT19GTihQT1JUMjIwX0tFWU9VVDUpLAorCUdQSU9fRk4oTENETENMSyksIEdQSU9fRk4oRFJFUTEpLCBHUElPX0ZOKFBXRU4pLCBHUElPX0ZOKE1TSU9GMExfUlhEKSwKKwlHUElPX0ZOKExDRERPTiksIEdQSU9fRk4oTENERE9OMiksIEdQSU9fRk4oREFDSzEpLCBHUElPX0ZOKE9WQ04pLAorCUdQSU9fRk4oTVNJT0YwTF9UWEQpLAorCUdQSU9fRk4oU0NJRkExX1RYRCksIEdQSU9fRk4oT1ZDTjIpLAorCUdQSU9fRk4oRVhUTFApLCBHUElPX0ZOKFNDSUZBMV9TQ0spLCBHUElPX0ZOKFVTQlRFUk0pLAorCUdQSU9fRk4oUE9SVDIyNl9WSU9fQ0tPMiksCisJR1BJT19GTihTQ0lGQTFfUlRTKSwgR1BJT19GTihJRElOKSwKKwlHUElPX0ZOKFNDSUZBMV9SWEQpLAorCUdQSU9fRk4oU0NJRkExX0NUUyksIEdQSU9fRk4oTUZHMV9JTjEpLAorCUdQSU9fRk4oTVNJT0YxX1RYRCksIEdQSU9fRk4oU0NJRkEyX1RYRDIpLCBHUElPX0ZOKFBPUlQyMzBfRlNJQU9NQyksCisJR1BJT19GTihNU0lPRjFfVFNZTkMpLCBHUElPX0ZOKFNDSUZBMl9DVFMyKSwgR1BJT19GTihQT1JUMjMxX0ZTSUFPTFIpLAorCUdQSU9fRk4oTVNJT0YxX1RTQ0spLCBHUElPX0ZOKFNDSUZBMl9TQ0syKSwgR1BJT19GTihQT1JUMjMyX0ZTSUFPQlQpLAorCUdQSU9fRk4oTVNJT0YxX1JYRCksIEdQSU9fRk4oU0NJRkEyX1JYRDIpLCBHUElPX0ZOKEdQU19WQ09UUklHKSwKKwlHUElPX0ZOKFBPUlQyMzNfRlNJQUNLKSwKKwlHUElPX0ZOKE1TSU9GMV9SU0NLKSwgR1BJT19GTihTQ0lGQTJfUlRTMiksIEdQSU9fRk4oUE9SVDIzNF9GU0lBT1NMRCksCisJR1BJT19GTihNU0lPRjFfUlNZTkMpLCBHUElPX0ZOKE9QT1JUMCksIEdQSU9fRk4oTUZHMV9JTjIpLAorCUdQSU9fRk4oUE9SVDIzNV9GU0lBSUxSKSwKKwlHUElPX0ZOKE1TSU9GMV9NQ0swKSwgR1BJT19GTihJMkNfU0RBMiksIEdQSU9fRk4oUE9SVDIzNl9GU0lBSUJUKSwKKwlHUElPX0ZOKE1TSU9GMV9NQ0sxKSwgR1BJT19GTihJMkNfU0NMMiksIEdQSU9fRk4oUE9SVDIzN19GU0lBSVNMRCksCisJR1BJT19GTihNU0lPRjFfU1MxKSwgR1BJT19GTihFREJHUkVRMyksCisKKwkvKiA1NS01IChGTikgKi8KKwlHUElPX0ZOKE1TSU9GMV9TUzIpLAorCUdQSU9fRk4oU0NJRkE2X1RYRCksCisJR1BJT19GTihQT1JUMjQxX0lSREFfT1VUKSwgR1BJT19GTihQT1JUMjQxX0lST1VUKSwgR1BJT19GTihNRkc0X09VVDEpLAorCUdQSU9fRk4oVFBVNFRPMCksCisJR1BJT19GTihQT1JUMjQyX0lSREFfSU4pLCBHUElPX0ZOKE1GRzRfSU4yKSwKKwlHUElPX0ZOKFBPUlQyNDNfSVJEQV9GSVJTRUwpLCBHUElPX0ZOKFBPUlQyNDNfVklPX0NLTzIpLAorCUdQSU9fRk4oUE9SVDI0NF9TQ0lGQTVfQ1RTKSwgR1BJT19GTihNRkcyX0lOMSksCisJR1BJT19GTihQT1JUMjQ0X1NDSUZCX0NUUyksCisJR1BJT19GTihQT1JUMjQ1X1NDSUZBNV9SVFMpLCBHUElPX0ZOKE1GRzJfSU4yKSwKKwlHUElPX0ZOKFBPUlQyNDVfU0NJRkJfUlRTKSwKKwlHUElPX0ZOKFBPUlQyNDZfU0NJRkE1X1JYRCksIEdQSU9fRk4oTUZHMV9PVVQxKSwKKwlHUElPX0ZOKFBPUlQyNDZfU0NJRkJfUlhEKSwgR1BJT19GTihUUFUxVE8wKSwKKwlHUElPX0ZOKFBPUlQyNDdfU0NJRkE1X1RYRCksIEdQSU9fRk4oTUZHM19PVVQyKSwKKwlHUElPX0ZOKFBPUlQyNDdfU0NJRkJfVFhEKSwgR1BJT19GTihUUFUzVE8xKSwKKwlHUElPX0ZOKFBPUlQyNDhfU0NJRkE1X1NDSyksIEdQSU9fRk4oTUZHMl9PVVQxKSwKKwlHUElPX0ZOKFBPUlQyNDhfU0NJRkJfU0NLKSwgR1BJT19GTihUUFUyVE8wKSwKKwlHUElPX0ZOKFBPUlQyNDlfSVJPVVQpLCBHUElPX0ZOKE1GRzRfSU4xKSwKKwlHUElPX0ZOKFNESElDTEswKSwgR1BJT19GTihUQ0syX1NXQ0xLX01DMCksCisJR1BJT19GTihTREhJQ0QwKSwKKwlHUElPX0ZOKFNESElEMF8wKSwgR1BJT19GTihUTVMyX1NXRElPX01DMCksCisJR1BJT19GTihTREhJRDBfMSksIEdQSU9fRk4oVERPMl9TV08wX01DMCksCisJR1BJT19GTihTREhJRDBfMiksIEdQSU9fRk4oVERJMiksCisJR1BJT19GTihTREhJRDBfMyksIEdQSU9fRk4oUlRDSzJfU1dPMV9NQzApLAorCUdQSU9fRk4oU0RISUNNRDApLCBHUElPX0ZOKFRSU1QyKSwKKwlHUElPX0ZOKFNESElXUDApLCBHUElPX0ZOKEVEQkdSRVEyKSwKKwlHUElPX0ZOKFNESElDTEsxKSwgR1BJT19GTihUQ0szX1NXQ0xLX01DMSksCisJR1BJT19GTihTREhJRDFfMCksIEdQSU9fRk4oTTExX1NMQ0RfU08yKSwgR1BJT19GTihUU19TUFNZTkMyKSwKKwlHUElPX0ZOKFRNUzNfU1dESU9fTUMxKSwKKwlHUElPX0ZOKFNESElEMV8xKSwgR1BJT19GTihNOV9TTENEX0EwMiksIEdQSU9fRk4oVFNfU0RBVDIpLAorCUdQSU9fRk4oVERPM19TV08wX01DMSksCisJR1BJT19GTihTREhJRDFfMiksIEdQSU9fRk4oTTEwX1NMQ0RfQ0syKSwgR1BJT19GTihUU19TREVOMiksCisJR1BJT19GTihUREkzKSwKKwlHUElPX0ZOKFNESElEMV8zKSwgR1BJT19GTihNMTJfU0xDRF9DRTIpLCBHUElPX0ZOKFRTX1NDSzIpLAorCUdQSU9fRk4oUlRDSzNfU1dPMV9NQzEpLAorCUdQSU9fRk4oU0RISUNNRDEpLCBHUElPX0ZOKFRSU1QzKSwKKwlHUElPX0ZOKFJFU0VUT1VUUyksCit9OworCisvKiBoZWxwZXIgZm9yIHRvcCA0IGJpdHMgaW4gUE9SVG5DUiAqLworI2RlZmluZSBQQ1JIKGluLCBpbl9wZCwgaW5fcHUsIG91dCkJXAorCTAsIChvdXQpLCAoaW4pLCAwLAlcCisJCTAsIDAsIDAsIDAsCVwKKwkJMCwgMCwgKGluX3BkKSwgMCwJXAorCQkwLCAwLCAoaW5fcHUpLCAwCisKKyNkZWZpbmUgUE9SVENSKG5yLCByZWcpCVwKKwl7IFBJTk1VWF9DRkdfUkVHKCJQT1JUIiBuciAiQ1IiLCByZWcsIDgsIDQpIHsJXAorCQkJUENSSChQT1JUIyNuciMjX0lOLCBQT1JUIyNuciMjX0lOX1BELAlcCisJCQkJIFBPUlQjI25yIyNfSU5fUFUsIFBPUlQjI25yIyNfT1VUKSwJXAorCQkJCVBPUlQjI25yIyNfRk4wLCBQT1JUIyNuciMjX0ZOMSwJXAorCQkJCVBPUlQjI25yIyNfRk4yLCBQT1JUIyNuciMjX0ZOMywJXAorCQkJCVBPUlQjI25yIyNfRk40LCBQT1JUIyNuciMjX0ZONSwJXAorCQkJCVBPUlQjI25yIyNfRk42LCBQT1JUIyNuciMjX0ZONyB9CVwKKwl9CisKK3N0YXRpYyBzdHJ1Y3QgcGlubXV4X2NmZ19yZWcgcGlubXV4X2NvbmZpZ19yZWdzW10gPSB7CisJUE9SVENSKDAsIDB4ZTYwNTAwMDApLCAvKiBQT1JUMENSICovCisJUE9SVENSKDEsIDB4ZTYwNTAwMDEpLCAvKiBQT1JUMUNSICovCisJUE9SVENSKDIsIDB4ZTYwNTAwMDIpLCAvKiBQT1JUMkNSICovCisJUE9SVENSKDMsIDB4ZTYwNTAwMDMpLCAvKiBQT1JUM0NSICovCisJUE9SVENSKDQsIDB4ZTYwNTAwMDQpLCAvKiBQT1JUNENSICovCisJUE9SVENSKDUsIDB4ZTYwNTAwMDUpLCAvKiBQT1JUNUNSICovCisJUE9SVENSKDYsIDB4ZTYwNTAwMDYpLCAvKiBQT1JUNkNSICovCisJUE9SVENSKDcsIDB4ZTYwNTAwMDcpLCAvKiBQT1JUN0NSICovCisJUE9SVENSKDgsIDB4ZTYwNTAwMDgpLCAvKiBQT1JUOENSICovCisJUE9SVENSKDksIDB4ZTYwNTAwMDkpLCAvKiBQT1JUOUNSICovCisKKwlQT1JUQ1IoMTAsIDB4ZTYwNTAwMGEpLCAvKiBQT1JUMTBDUiAqLworCVBPUlRDUigxMSwgMHhlNjA1MDAwYiksIC8qIFBPUlQxMUNSICovCisJUE9SVENSKDEyLCAweGU2MDUwMDBjKSwgLyogUE9SVDEyQ1IgKi8KKwlQT1JUQ1IoMTMsIDB4ZTYwNTAwMGQpLCAvKiBQT1JUMTNDUiAqLworCVBPUlRDUigxNCwgMHhlNjA1MDAwZSksIC8qIFBPUlQxNENSICovCisJUE9SVENSKDE1LCAweGU2MDUwMDBmKSwgLyogUE9SVDE1Q1IgKi8KKwlQT1JUQ1IoMTYsIDB4ZTYwNTAwMTApLCAvKiBQT1JUMTZDUiAqLworCVBPUlRDUigxNywgMHhlNjA1MDAxMSksIC8qIFBPUlQxN0NSICovCisJUE9SVENSKDE4LCAweGU2MDUwMDEyKSwgLyogUE9SVDE4Q1IgKi8KKwlQT1JUQ1IoMTksIDB4ZTYwNTAwMTMpLCAvKiBQT1JUMTlDUiAqLworCisJUE9SVENSKDIwLCAweGU2MDUwMDE0KSwgLyogUE9SVDIwQ1IgKi8KKwlQT1JUQ1IoMjEsIDB4ZTYwNTAwMTUpLCAvKiBQT1JUMjFDUiAqLworCVBPUlRDUigyMiwgMHhlNjA1MDAxNiksIC8qIFBPUlQyMkNSICovCisJUE9SVENSKDIzLCAweGU2MDUwMDE3KSwgLyogUE9SVDIzQ1IgKi8KKwlQT1JUQ1IoMjQsIDB4ZTYwNTAwMTgpLCAvKiBQT1JUMjRDUiAqLworCVBPUlRDUigyNSwgMHhlNjA1MDAxOSksIC8qIFBPUlQyNUNSICovCisJUE9SVENSKDI2LCAweGU2MDUwMDFhKSwgLyogUE9SVDI2Q1IgKi8KKwlQT1JUQ1IoMjcsIDB4ZTYwNTAwMWIpLCAvKiBQT1JUMjdDUiAqLworCVBPUlRDUigyOCwgMHhlNjA1MDAxYyksIC8qIFBPUlQyOENSICovCisJUE9SVENSKDI5LCAweGU2MDUwMDFkKSwgLyogUE9SVDI5Q1IgKi8KKworCVBPUlRDUigzMCwgMHhlNjA1MDAxZSksIC8qIFBPUlQzMENSICovCisJUE9SVENSKDMxLCAweGU2MDUwMDFmKSwgLyogUE9SVDMxQ1IgKi8KKwlQT1JUQ1IoMzIsIDB4ZTYwNTAwMjApLCAvKiBQT1JUMzJDUiAqLworCVBPUlRDUigzMywgMHhlNjA1MDAyMSksIC8qIFBPUlQzM0NSICovCisJUE9SVENSKDM0LCAweGU2MDUwMDIyKSwgLyogUE9SVDM0Q1IgKi8KKwlQT1JUQ1IoMzUsIDB4ZTYwNTAwMjMpLCAvKiBQT1JUMzVDUiAqLworCVBPUlRDUigzNiwgMHhlNjA1MDAyNCksIC8qIFBPUlQzNkNSICovCisJUE9SVENSKDM3LCAweGU2MDUwMDI1KSwgLyogUE9SVDM3Q1IgKi8KKwlQT1JUQ1IoMzgsIDB4ZTYwNTAwMjYpLCAvKiBQT1JUMzhDUiAqLworCVBPUlRDUigzOSwgMHhlNjA1MDAyNyksIC8qIFBPUlQzOUNSICovCisKKwlQT1JUQ1IoNDAsIDB4ZTYwNTAwMjgpLCAvKiBQT1JUNDBDUiAqLworCVBPUlRDUig0MSwgMHhlNjA1MDAyOSksIC8qIFBPUlQ0MUNSICovCisJUE9SVENSKDQyLCAweGU2MDUwMDJhKSwgLyogUE9SVDQyQ1IgKi8KKwlQT1JUQ1IoNDMsIDB4ZTYwNTAwMmIpLCAvKiBQT1JUNDNDUiAqLworCVBPUlRDUig0NCwgMHhlNjA1MDAyYyksIC8qIFBPUlQ0NENSICovCisJUE9SVENSKDQ1LCAweGU2MDUwMDJkKSwgLyogUE9SVDQ1Q1IgKi8KKwlQT1JUQ1IoNDYsIDB4ZTYwNTAwMmUpLCAvKiBQT1JUNDZDUiAqLworCVBPUlRDUig0NywgMHhlNjA1MDAyZiksIC8qIFBPUlQ0N0NSICovCisJUE9SVENSKDQ4LCAweGU2MDUwMDMwKSwgLyogUE9SVDQ4Q1IgKi8KKwlQT1JUQ1IoNDksIDB4ZTYwNTAwMzEpLCAvKiBQT1JUNDlDUiAqLworCisJUE9SVENSKDUwLCAweGU2MDUwMDMyKSwgLyogUE9SVDUwQ1IgKi8KKwlQT1JUQ1IoNTEsIDB4ZTYwNTAwMzMpLCAvKiBQT1JUNTFDUiAqLworCVBPUlRDUig1MiwgMHhlNjA1MDAzNCksIC8qIFBPUlQ1MkNSICovCisJUE9SVENSKDUzLCAweGU2MDUwMDM1KSwgLyogUE9SVDUzQ1IgKi8KKwlQT1JUQ1IoNTQsIDB4ZTYwNTAwMzYpLCAvKiBQT1JUNTRDUiAqLworCVBPUlRDUig1NSwgMHhlNjA1MDAzNyksIC8qIFBPUlQ1NUNSICovCisJUE9SVENSKDU2LCAweGU2MDUwMDM4KSwgLyogUE9SVDU2Q1IgKi8KKwlQT1JUQ1IoNTcsIDB4ZTYwNTAwMzkpLCAvKiBQT1JUNTdDUiAqLworCVBPUlRDUig1OCwgMHhlNjA1MDAzYSksIC8qIFBPUlQ1OENSICovCisJUE9SVENSKDU5LCAweGU2MDUwMDNiKSwgLyogUE9SVDU5Q1IgKi8KKworCVBPUlRDUig2MCwgMHhlNjA1MDAzYyksIC8qIFBPUlQ2MENSICovCisJUE9SVENSKDYxLCAweGU2MDUwMDNkKSwgLyogUE9SVDYxQ1IgKi8KKwlQT1JUQ1IoNjIsIDB4ZTYwNTAwM2UpLCAvKiBQT1JUNjJDUiAqLworCVBPUlRDUig2MywgMHhlNjA1MDAzZiksIC8qIFBPUlQ2M0NSICovCisJUE9SVENSKDY0LCAweGU2MDUwMDQwKSwgLyogUE9SVDY0Q1IgKi8KKwlQT1JUQ1IoNjUsIDB4ZTYwNTAwNDEpLCAvKiBQT1JUNjVDUiAqLworCVBPUlRDUig2NiwgMHhlNjA1MDA0MiksIC8qIFBPUlQ2NkNSICovCisJUE9SVENSKDY3LCAweGU2MDUwMDQzKSwgLyogUE9SVDY3Q1IgKi8KKwlQT1JUQ1IoNjgsIDB4ZTYwNTAwNDQpLCAvKiBQT1JUNjhDUiAqLworCVBPUlRDUig2OSwgMHhlNjA1MDA0NSksIC8qIFBPUlQ2OUNSICovCisKKwlQT1JUQ1IoNzAsIDB4ZTYwNTAwNDYpLCAvKiBQT1JUNzBDUiAqLworCVBPUlRDUig3MSwgMHhlNjA1MDA0NyksIC8qIFBPUlQ3MUNSICovCisJUE9SVENSKDcyLCAweGU2MDUwMDQ4KSwgLyogUE9SVDcyQ1IgKi8KKwlQT1JUQ1IoNzMsIDB4ZTYwNTAwNDkpLCAvKiBQT1JUNzNDUiAqLworCVBPUlRDUig3NCwgMHhlNjA1MDA0YSksIC8qIFBPUlQ3NENSICovCisJUE9SVENSKDc1LCAweGU2MDUwMDRiKSwgLyogUE9SVDc1Q1IgKi8KKwlQT1JUQ1IoNzYsIDB4ZTYwNTAwNGMpLCAvKiBQT1JUNzZDUiAqLworCVBPUlRDUig3NywgMHhlNjA1MDA0ZCksIC8qIFBPUlQ3N0NSICovCisJUE9SVENSKDc4LCAweGU2MDUwMDRlKSwgLyogUE9SVDc4Q1IgKi8KKwlQT1JUQ1IoNzksIDB4ZTYwNTAwNGYpLCAvKiBQT1JUNzlDUiAqLworCisJUE9SVENSKDgwLCAweGU2MDUwMDUwKSwgLyogUE9SVDgwQ1IgKi8KKwlQT1JUQ1IoODEsIDB4ZTYwNTAwNTEpLCAvKiBQT1JUODFDUiAqLworCVBPUlRDUig4MiwgMHhlNjA1MDA1MiksIC8qIFBPUlQ4MkNSICovCisJUE9SVENSKDgzLCAweGU2MDUwMDUzKSwgLyogUE9SVDgzQ1IgKi8KKwlQT1JUQ1IoODQsIDB4ZTYwNTAwNTQpLCAvKiBQT1JUODRDUiAqLworCVBPUlRDUig4NSwgMHhlNjA1MDA1NSksIC8qIFBPUlQ4NUNSICovCisJUE9SVENSKDg2LCAweGU2MDUwMDU2KSwgLyogUE9SVDg2Q1IgKi8KKwlQT1JUQ1IoODcsIDB4ZTYwNTAwNTcpLCAvKiBQT1JUODdDUiAqLworCVBPUlRDUig4OCwgMHhlNjA1MDA1OCksIC8qIFBPUlQ4OENSICovCisJUE9SVENSKDg5LCAweGU2MDUwMDU5KSwgLyogUE9SVDg5Q1IgKi8KKworCVBPUlRDUig5MCwgMHhlNjA1MDA1YSksIC8qIFBPUlQ5MENSICovCisJUE9SVENSKDkxLCAweGU2MDUwMDViKSwgLyogUE9SVDkxQ1IgKi8KKwlQT1JUQ1IoOTIsIDB4ZTYwNTAwNWMpLCAvKiBQT1JUOTJDUiAqLworCVBPUlRDUig5MywgMHhlNjA1MDA1ZCksIC8qIFBPUlQ5M0NSICovCisJUE9SVENSKDk0LCAweGU2MDUwMDVlKSwgLyogUE9SVDk0Q1IgKi8KKwlQT1JUQ1IoOTUsIDB4ZTYwNTAwNWYpLCAvKiBQT1JUOTVDUiAqLworCVBPUlRDUig5NiwgMHhlNjA1MDA2MCksIC8qIFBPUlQ5NkNSICovCisJUE9SVENSKDk3LCAweGU2MDUwMDYxKSwgLyogUE9SVDk3Q1IgKi8KKwlQT1JUQ1IoOTgsIDB4ZTYwNTAwNjIpLCAvKiBQT1JUOThDUiAqLworCVBPUlRDUig5OSwgMHhlNjA1MDA2MyksIC8qIFBPUlQ5OUNSICovCisKKwlQT1JUQ1IoMTAwLCAweGU2MDUwMDY0KSwgLyogUE9SVDEwMENSICovCisJUE9SVENSKDEwMSwgMHhlNjA1MDA2NSksIC8qIFBPUlQxMDFDUiAqLworCVBPUlRDUigxMDIsIDB4ZTYwNTAwNjYpLCAvKiBQT1JUMTAyQ1IgKi8KKwlQT1JUQ1IoMTAzLCAweGU2MDUwMDY3KSwgLyogUE9SVDEwM0NSICovCisJUE9SVENSKDEwNCwgMHhlNjA1MDA2OCksIC8qIFBPUlQxMDRDUiAqLworCVBPUlRDUigxMDUsIDB4ZTYwNTAwNjkpLCAvKiBQT1JUMTA1Q1IgKi8KKwlQT1JUQ1IoMTA2LCAweGU2MDUwMDZhKSwgLyogUE9SVDEwNkNSICovCisJUE9SVENSKDEwNywgMHhlNjA1MDA2YiksIC8qIFBPUlQxMDdDUiAqLworCVBPUlRDUigxMDgsIDB4ZTYwNTAwNmMpLCAvKiBQT1JUMTA4Q1IgKi8KKwlQT1JUQ1IoMTA5LCAweGU2MDUwMDZkKSwgLyogUE9SVDEwOUNSICovCisKKwlQT1JUQ1IoMTEwLCAweGU2MDUwMDZlKSwgLyogUE9SVDExMENSICovCisJUE9SVENSKDExMSwgMHhlNjA1MDA2ZiksIC8qIFBPUlQxMTFDUiAqLworCVBPUlRDUigxMTIsIDB4ZTYwNTAwNzApLCAvKiBQT1JUMTEyQ1IgKi8KKwlQT1JUQ1IoMTEzLCAweGU2MDUwMDcxKSwgLyogUE9SVDExM0NSICovCisJUE9SVENSKDExNCwgMHhlNjA1MDA3MiksIC8qIFBPUlQxMTRDUiAqLworCVBPUlRDUigxMTUsIDB4ZTYwNTAwNzMpLCAvKiBQT1JUMTE1Q1IgKi8KKwlQT1JUQ1IoMTE2LCAweGU2MDUwMDc0KSwgLyogUE9SVDExNkNSICovCisJUE9SVENSKDExNywgMHhlNjA1MDA3NSksIC8qIFBPUlQxMTdDUiAqLworCVBPUlRDUigxMTgsIDB4ZTYwNTAwNzYpLCAvKiBQT1JUMTE4Q1IgKi8KKworCVBPUlRDUigxMjgsIDB4ZTYwNTEwODApLCAvKiBQT1JUMTI4Q1IgKi8KKwlQT1JUQ1IoMTI5LCAweGU2MDUxMDgxKSwgLyogUE9SVDEyOUNSICovCisKKwlQT1JUQ1IoMTMwLCAweGU2MDUxMDgyKSwgLyogUE9SVDEzMENSICovCisJUE9SVENSKDEzMSwgMHhlNjA1MTA4MyksIC8qIFBPUlQxMzFDUiAqLworCVBPUlRDUigxMzIsIDB4ZTYwNTEwODQpLCAvKiBQT1JUMTMyQ1IgKi8KKwlQT1JUQ1IoMTMzLCAweGU2MDUxMDg1KSwgLyogUE9SVDEzM0NSICovCisJUE9SVENSKDEzNCwgMHhlNjA1MTA4NiksIC8qIFBPUlQxMzRDUiAqLworCVBPUlRDUigxMzUsIDB4ZTYwNTEwODcpLCAvKiBQT1JUMTM1Q1IgKi8KKwlQT1JUQ1IoMTM2LCAweGU2MDUxMDg4KSwgLyogUE9SVDEzNkNSICovCisJUE9SVENSKDEzNywgMHhlNjA1MTA4OSksIC8qIFBPUlQxMzdDUiAqLworCVBPUlRDUigxMzgsIDB4ZTYwNTEwOGEpLCAvKiBQT1JUMTM4Q1IgKi8KKwlQT1JUQ1IoMTM5LCAweGU2MDUxMDhiKSwgLyogUE9SVDEzOUNSICovCisKKwlQT1JUQ1IoMTQwLCAweGU2MDUxMDhjKSwgLyogUE9SVDE0MENSICovCisJUE9SVENSKDE0MSwgMHhlNjA1MTA4ZCksIC8qIFBPUlQxNDFDUiAqLworCVBPUlRDUigxNDIsIDB4ZTYwNTEwOGUpLCAvKiBQT1JUMTQyQ1IgKi8KKwlQT1JUQ1IoMTQzLCAweGU2MDUxMDhmKSwgLyogUE9SVDE0M0NSICovCisJUE9SVENSKDE0NCwgMHhlNjA1MTA5MCksIC8qIFBPUlQxNDRDUiAqLworCVBPUlRDUigxNDUsIDB4ZTYwNTEwOTEpLCAvKiBQT1JUMTQ1Q1IgKi8KKwlQT1JUQ1IoMTQ2LCAweGU2MDUxMDkyKSwgLyogUE9SVDE0NkNSICovCisJUE9SVENSKDE0NywgMHhlNjA1MTA5MyksIC8qIFBPUlQxNDdDUiAqLworCVBPUlRDUigxNDgsIDB4ZTYwNTEwOTQpLCAvKiBQT1JUMTQ4Q1IgKi8KKwlQT1JUQ1IoMTQ5LCAweGU2MDUxMDk1KSwgLyogUE9SVDE0OUNSICovCisKKwlQT1JUQ1IoMTUwLCAweGU2MDUxMDk2KSwgLyogUE9SVDE1MENSICovCisJUE9SVENSKDE1MSwgMHhlNjA1MTA5NyksIC8qIFBPUlQxNTFDUiAqLworCVBPUlRDUigxNTIsIDB4ZTYwNTEwOTgpLCAvKiBQT1JUMTUyQ1IgKi8KKwlQT1JUQ1IoMTUzLCAweGU2MDUxMDk5KSwgLyogUE9SVDE1M0NSICovCisJUE9SVENSKDE1NCwgMHhlNjA1MTA5YSksIC8qIFBPUlQxNTRDUiAqLworCVBPUlRDUigxNTUsIDB4ZTYwNTEwOWIpLCAvKiBQT1JUMTU1Q1IgKi8KKwlQT1JUQ1IoMTU2LCAweGU2MDUxMDljKSwgLyogUE9SVDE1NkNSICovCisJUE9SVENSKDE1NywgMHhlNjA1MTA5ZCksIC8qIFBPUlQxNTdDUiAqLworCVBPUlRDUigxNTgsIDB4ZTYwNTEwOWUpLCAvKiBQT1JUMTU4Q1IgKi8KKwlQT1JUQ1IoMTU5LCAweGU2MDUxMDlmKSwgLyogUE9SVDE1OUNSICovCisKKwlQT1JUQ1IoMTYwLCAweGU2MDUxMGEwKSwgLyogUE9SVDE2MENSICovCisJUE9SVENSKDE2MSwgMHhlNjA1MTBhMSksIC8qIFBPUlQxNjFDUiAqLworCVBPUlRDUigxNjIsIDB4ZTYwNTEwYTIpLCAvKiBQT1JUMTYyQ1IgKi8KKwlQT1JUQ1IoMTYzLCAweGU2MDUxMGEzKSwgLyogUE9SVDE2M0NSICovCisJUE9SVENSKDE2NCwgMHhlNjA1MTBhNCksIC8qIFBPUlQxNjRDUiAqLworCisJUE9SVENSKDE5MiwgMHhlNjA1MjBjMCksIC8qIFBPUlQxOTJDUiAqLworCVBPUlRDUigxOTMsIDB4ZTYwNTIwYzEpLCAvKiBQT1JUMTkzQ1IgKi8KKwlQT1JUQ1IoMTk0LCAweGU2MDUyMGMyKSwgLyogUE9SVDE5NENSICovCisJUE9SVENSKDE5NSwgMHhlNjA1MjBjMyksIC8qIFBPUlQxOTVDUiAqLworCVBPUlRDUigxOTYsIDB4ZTYwNTIwYzQpLCAvKiBQT1JUMTk2Q1IgKi8KKwlQT1JUQ1IoMTk3LCAweGU2MDUyMGM1KSwgLyogUE9SVDE5N0NSICovCisJUE9SVENSKDE5OCwgMHhlNjA1MjBjNiksIC8qIFBPUlQxOThDUiAqLworCVBPUlRDUigxOTksIDB4ZTYwNTIwYzcpLCAvKiBQT1JUMTk5Q1IgKi8KKworCVBPUlRDUigyMDAsIDB4ZTYwNTIwYzgpLCAvKiBQT1JUMjAwQ1IgKi8KKwlQT1JUQ1IoMjAxLCAweGU2MDUyMGM5KSwgLyogUE9SVDIwMUNSICovCisJUE9SVENSKDIwMiwgMHhlNjA1MjBjYSksIC8qIFBPUlQyMDJDUiAqLworCVBPUlRDUigyMDMsIDB4ZTYwNTIwY2IpLCAvKiBQT1JUMjAzQ1IgKi8KKwlQT1JUQ1IoMjA0LCAweGU2MDUyMGNjKSwgLyogUE9SVDIwNENSICovCisJUE9SVENSKDIwNSwgMHhlNjA1MjBjZCksIC8qIFBPUlQyMDVDUiAqLworCVBPUlRDUigyMDYsIDB4ZTYwNTIwY2UpLCAvKiBQT1JUMjA2Q1IgKi8KKwlQT1JUQ1IoMjA3LCAweGU2MDUyMGNmKSwgLyogUE9SVDIwN0NSICovCisJUE9SVENSKDIwOCwgMHhlNjA1MjBkMCksIC8qIFBPUlQyMDhDUiAqLworCVBPUlRDUigyMDksIDB4ZTYwNTIwZDEpLCAvKiBQT1JUMjA5Q1IgKi8KKworCVBPUlRDUigyMTAsIDB4ZTYwNTIwZDIpLCAvKiBQT1JUMjEwQ1IgKi8KKwlQT1JUQ1IoMjExLCAweGU2MDUyMGQzKSwgLyogUE9SVDIxMUNSICovCisJUE9SVENSKDIxMiwgMHhlNjA1MjBkNCksIC8qIFBPUlQyMTJDUiAqLworCVBPUlRDUigyMTMsIDB4ZTYwNTIwZDUpLCAvKiBQT1JUMjEzQ1IgKi8KKwlQT1JUQ1IoMjE0LCAweGU2MDUyMGQ2KSwgLyogUE9SVDIxNENSICovCisJUE9SVENSKDIxNSwgMHhlNjA1MjBkNyksIC8qIFBPUlQyMTVDUiAqLworCVBPUlRDUigyMTYsIDB4ZTYwNTIwZDgpLCAvKiBQT1JUMjE2Q1IgKi8KKwlQT1JUQ1IoMjE3LCAweGU2MDUyMGQ5KSwgLyogUE9SVDIxN0NSICovCisJUE9SVENSKDIxOCwgMHhlNjA1MjBkYSksIC8qIFBPUlQyMThDUiAqLworCVBPUlRDUigyMTksIDB4ZTYwNTIwZGIpLCAvKiBQT1JUMjE5Q1IgKi8KKworCVBPUlRDUigyMjAsIDB4ZTYwNTIwZGMpLCAvKiBQT1JUMjIwQ1IgKi8KKwlQT1JUQ1IoMjIxLCAweGU2MDUyMGRkKSwgLyogUE9SVDIyMUNSICovCisJUE9SVENSKDIyMiwgMHhlNjA1MjBkZSksIC8qIFBPUlQyMjJDUiAqLworCVBPUlRDUigyMjMsIDB4ZTYwNTIwZGYpLCAvKiBQT1JUMjIzQ1IgKi8KKwlQT1JUQ1IoMjI0LCAweGU2MDUyMGUwKSwgLyogUE9SVDIyNENSICovCisJUE9SVENSKDIyNSwgMHhlNjA1MjBlMSksIC8qIFBPUlQyMjVDUiAqLworCVBPUlRDUigyMjYsIDB4ZTYwNTIwZTIpLCAvKiBQT1JUMjI2Q1IgKi8KKwlQT1JUQ1IoMjI3LCAweGU2MDUyMGUzKSwgLyogUE9SVDIyN0NSICovCisJUE9SVENSKDIyOCwgMHhlNjA1MjBlNCksIC8qIFBPUlQyMjhDUiAqLworCVBPUlRDUigyMjksIDB4ZTYwNTIwZTUpLCAvKiBQT1JUMjI5Q1IgKi8KKworCVBPUlRDUigyMzAsIDB4ZTYwNTIwZTYpLCAvKiBQT1JUMjMwQ1IgKi8KKwlQT1JUQ1IoMjMxLCAweGU2MDUyMGU3KSwgLyogUE9SVDIzMUNSICovCisJUE9SVENSKDIzMiwgMHhlNjA1MjBlOCksIC8qIFBPUlQyMzJDUiAqLworCVBPUlRDUigyMzMsIDB4ZTYwNTIwZTkpLCAvKiBQT1JUMjMzQ1IgKi8KKwlQT1JUQ1IoMjM0LCAweGU2MDUyMGVhKSwgLyogUE9SVDIzNENSICovCisJUE9SVENSKDIzNSwgMHhlNjA1MjBlYiksIC8qIFBPUlQyMzVDUiAqLworCVBPUlRDUigyMzYsIDB4ZTYwNTIwZWMpLCAvKiBQT1JUMjM2Q1IgKi8KKwlQT1JUQ1IoMjM3LCAweGU2MDUyMGVkKSwgLyogUE9SVDIzN0NSICovCisJUE9SVENSKDIzOCwgMHhlNjA1MjBlZSksIC8qIFBPUlQyMzhDUiAqLworCVBPUlRDUigyMzksIDB4ZTYwNTIwZWYpLCAvKiBQT1JUMjM5Q1IgKi8KKworCVBPUlRDUigyNDAsIDB4ZTYwNTIwZjApLCAvKiBQT1JUMjQwQ1IgKi8KKwlQT1JUQ1IoMjQxLCAweGU2MDUyMGYxKSwgLyogUE9SVDI0MUNSICovCisJUE9SVENSKDI0MiwgMHhlNjA1MjBmMiksIC8qIFBPUlQyNDJDUiAqLworCVBPUlRDUigyNDMsIDB4ZTYwNTIwZjMpLCAvKiBQT1JUMjQzQ1IgKi8KKwlQT1JUQ1IoMjQ0LCAweGU2MDUyMGY0KSwgLyogUE9SVDI0NENSICovCisJUE9SVENSKDI0NSwgMHhlNjA1MjBmNSksIC8qIFBPUlQyNDVDUiAqLworCVBPUlRDUigyNDYsIDB4ZTYwNTIwZjYpLCAvKiBQT1JUMjQ2Q1IgKi8KKwlQT1JUQ1IoMjQ3LCAweGU2MDUyMGY3KSwgLyogUE9SVDI0N0NSICovCisJUE9SVENSKDI0OCwgMHhlNjA1MjBmOCksIC8qIFBPUlQyNDhDUiAqLworCVBPUlRDUigyNDksIDB4ZTYwNTIwZjkpLCAvKiBQT1JUMjQ5Q1IgKi8KKworCVBPUlRDUigyNTAsIDB4ZTYwNTIwZmEpLCAvKiBQT1JUMjUwQ1IgKi8KKwlQT1JUQ1IoMjUxLCAweGU2MDUyMGZiKSwgLyogUE9SVDI1MUNSICovCisJUE9SVENSKDI1MiwgMHhlNjA1MjBmYyksIC8qIFBPUlQyNTJDUiAqLworCVBPUlRDUigyNTMsIDB4ZTYwNTIwZmQpLCAvKiBQT1JUMjUzQ1IgKi8KKwlQT1JUQ1IoMjU0LCAweGU2MDUyMGZlKSwgLyogUE9SVDI1NENSICovCisJUE9SVENSKDI1NSwgMHhlNjA1MjBmZiksIC8qIFBPUlQyNTVDUiAqLworCVBPUlRDUigyNTYsIDB4ZTYwNTIxMDApLCAvKiBQT1JUMjU2Q1IgKi8KKwlQT1JUQ1IoMjU3LCAweGU2MDUyMTAxKSwgLyogUE9SVDI1N0NSICovCisJUE9SVENSKDI1OCwgMHhlNjA1MjEwMiksIC8qIFBPUlQyNThDUiAqLworCVBPUlRDUigyNTksIDB4ZTYwNTIxMDMpLCAvKiBQT1JUMjU5Q1IgKi8KKworCVBPUlRDUigyNjAsIDB4ZTYwNTIxMDQpLCAvKiBQT1JUMjYwQ1IgKi8KKwlQT1JUQ1IoMjYxLCAweGU2MDUyMTA1KSwgLyogUE9SVDI2MUNSICovCisJUE9SVENSKDI2MiwgMHhlNjA1MjEwNiksIC8qIFBPUlQyNjJDUiAqLworCVBPUlRDUigyNjMsIDB4ZTYwNTIxMDcpLCAvKiBQT1JUMjYzQ1IgKi8KKwlQT1JUQ1IoMjY0LCAweGU2MDUyMTA4KSwgLyogUE9SVDI2NENSICovCisKKwl7IFBJTk1VWF9DRkdfUkVHKCJNU0VMQkNSIiwgMHhlNjA1ODAyNCwgMzIsIDEpIHsKKwkJCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCQkJTVNFTEJDUl9NU0VMMTdfMCwgTVNFTEJDUl9NU0VMMTdfMSwKKwkJCU1TRUxCQ1JfTVNFTDE2XzAsIE1TRUxCQ1JfTVNFTDE2XzEsCisJCQkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorCQkJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9CisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBpbm11eF9kYXRhX3JlZyBwaW5tdXhfZGF0YV9yZWdzW10gPSB7CisJeyBQSU5NVVhfREFUQV9SRUcoIlBPUlRMMDMxXzAwMERSIiwgMHhlNjA1NDAwMCwgMzIpIHsKKwkJCVBPUlQzMV9EQVRBLCBQT1JUMzBfREFUQSwgUE9SVDI5X0RBVEEsIFBPUlQyOF9EQVRBLAorCQkJUE9SVDI3X0RBVEEsIFBPUlQyNl9EQVRBLCBQT1JUMjVfREFUQSwgUE9SVDI0X0RBVEEsCisJCQlQT1JUMjNfREFUQSwgUE9SVDIyX0RBVEEsIFBPUlQyMV9EQVRBLCBQT1JUMjBfREFUQSwKKwkJCVBPUlQxOV9EQVRBLCBQT1JUMThfREFUQSwgUE9SVDE3X0RBVEEsIFBPUlQxNl9EQVRBLAorCQkJUE9SVDE1X0RBVEEsIFBPUlQxNF9EQVRBLCBQT1JUMTNfREFUQSwgUE9SVDEyX0RBVEEsCisJCQlQT1JUMTFfREFUQSwgUE9SVDEwX0RBVEEsIFBPUlQ5X0RBVEEsIFBPUlQ4X0RBVEEsCisJCQlQT1JUN19EQVRBLCBQT1JUNl9EQVRBLCBQT1JUNV9EQVRBLCBQT1JUNF9EQVRBLAorCQkJUE9SVDNfREFUQSwgUE9SVDJfREFUQSwgUE9SVDFfREFUQSwgUE9SVDBfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVEwwNjNfMDMyRFIiLCAweGU2MDU0MDA0LCAzMikgeworCQkJUE9SVDYzX0RBVEEsIFBPUlQ2Ml9EQVRBLCBQT1JUNjFfREFUQSwgUE9SVDYwX0RBVEEsCisJCQlQT1JUNTlfREFUQSwgUE9SVDU4X0RBVEEsIFBPUlQ1N19EQVRBLCBQT1JUNTZfREFUQSwKKwkJCVBPUlQ1NV9EQVRBLCBQT1JUNTRfREFUQSwgUE9SVDUzX0RBVEEsIFBPUlQ1Ml9EQVRBLAorCQkJUE9SVDUxX0RBVEEsIFBPUlQ1MF9EQVRBLCBQT1JUNDlfREFUQSwgUE9SVDQ4X0RBVEEsCisJCQlQT1JUNDdfREFUQSwgUE9SVDQ2X0RBVEEsIFBPUlQ0NV9EQVRBLCBQT1JUNDRfREFUQSwKKwkJCVBPUlQ0M19EQVRBLCBQT1JUNDJfREFUQSwgUE9SVDQxX0RBVEEsIFBPUlQ0MF9EQVRBLAorCQkJUE9SVDM5X0RBVEEsIFBPUlQzOF9EQVRBLCBQT1JUMzdfREFUQSwgUE9SVDM2X0RBVEEsCisJCQlQT1JUMzVfREFUQSwgUE9SVDM0X0RBVEEsIFBPUlQzM19EQVRBLCBQT1JUMzJfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVEwwOTVfMDY0RFIiLCAweGU2MDU0MDA4LCAzMikgeworCQkJUE9SVDk1X0RBVEEsIFBPUlQ5NF9EQVRBLCBQT1JUOTNfREFUQSwgUE9SVDkyX0RBVEEsCisJCQlQT1JUOTFfREFUQSwgUE9SVDkwX0RBVEEsIFBPUlQ4OV9EQVRBLCBQT1JUODhfREFUQSwKKwkJCVBPUlQ4N19EQVRBLCBQT1JUODZfREFUQSwgUE9SVDg1X0RBVEEsIFBPUlQ4NF9EQVRBLAorCQkJUE9SVDgzX0RBVEEsIFBPUlQ4Ml9EQVRBLCBQT1JUODFfREFUQSwgUE9SVDgwX0RBVEEsCisJCQlQT1JUNzlfREFUQSwgUE9SVDc4X0RBVEEsIFBPUlQ3N19EQVRBLCBQT1JUNzZfREFUQSwKKwkJCVBPUlQ3NV9EQVRBLCBQT1JUNzRfREFUQSwgUE9SVDczX0RBVEEsIFBPUlQ3Ml9EQVRBLAorCQkJUE9SVDcxX0RBVEEsIFBPUlQ3MF9EQVRBLCBQT1JUNjlfREFUQSwgUE9SVDY4X0RBVEEsCisJCQlQT1JUNjdfREFUQSwgUE9SVDY2X0RBVEEsIFBPUlQ2NV9EQVRBLCBQT1JUNjRfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVEQxMjdfMDk2RFIiLCAweGU2MDU0MDBDLCAzMikgeworCQkJMCwgMCwgMCwgMCwKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCBQT1JUMTE4X0RBVEEsIFBPUlQxMTdfREFUQSwgUE9SVDExNl9EQVRBLAorCQkJUE9SVDExNV9EQVRBLCBQT1JUMTE0X0RBVEEsIFBPUlQxMTNfREFUQSwgUE9SVDExMl9EQVRBLAorCQkJUE9SVDExMV9EQVRBLCBQT1JUMTEwX0RBVEEsIFBPUlQxMDlfREFUQSwgUE9SVDEwOF9EQVRBLAorCQkJUE9SVDEwN19EQVRBLCBQT1JUMTA2X0RBVEEsIFBPUlQxMDVfREFUQSwgUE9SVDEwNF9EQVRBLAorCQkJUE9SVDEwM19EQVRBLCBQT1JUMTAyX0RBVEEsIFBPUlQxMDFfREFUQSwgUE9SVDEwMF9EQVRBLAorCQkJUE9SVDk5X0RBVEEsIFBPUlQ5OF9EQVRBLCBQT1JUOTdfREFUQSwgUE9SVDk2X0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBPUlREMTU5XzEyOERSIiwgMHhlNjA1NTAwMCwgMzIpIHsKKwkJCVBPUlQxNTlfREFUQSwgUE9SVDE1OF9EQVRBLCBQT1JUMTU3X0RBVEEsIFBPUlQxNTZfREFUQSwKKwkJCVBPUlQxNTVfREFUQSwgUE9SVDE1NF9EQVRBLCBQT1JUMTUzX0RBVEEsIFBPUlQxNTJfREFUQSwKKwkJCVBPUlQxNTFfREFUQSwgUE9SVDE1MF9EQVRBLCBQT1JUMTQ5X0RBVEEsIFBPUlQxNDhfREFUQSwKKwkJCVBPUlQxNDdfREFUQSwgUE9SVDE0Nl9EQVRBLCBQT1JUMTQ1X0RBVEEsIFBPUlQxNDRfREFUQSwKKwkJCVBPUlQxNDNfREFUQSwgUE9SVDE0Ml9EQVRBLCBQT1JUMTQxX0RBVEEsIFBPUlQxNDBfREFUQSwKKwkJCVBPUlQxMzlfREFUQSwgUE9SVDEzOF9EQVRBLCBQT1JUMTM3X0RBVEEsIFBPUlQxMzZfREFUQSwKKwkJCVBPUlQxMzVfREFUQSwgUE9SVDEzNF9EQVRBLCBQT1JUMTMzX0RBVEEsIFBPUlQxMzJfREFUQSwKKwkJCVBPUlQxMzFfREFUQSwgUE9SVDEzMF9EQVRBLCBQT1JUMTI5X0RBVEEsIFBPUlQxMjhfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVFIxOTFfMTYwRFIiLCAweGU2MDU1MDA0LCAzMikgeworCQkJMCwgMCwgMCwgMCwKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkJMCwgMCwgMCwgMCwKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkJMCwgMCwgMCwgUE9SVDE2NF9EQVRBLAorCQkJUE9SVDE2M19EQVRBLCBQT1JUMTYyX0RBVEEsIFBPUlQxNjFfREFUQSwgUE9SVDE2MF9EQVRBIH0KKwl9LAorCXsgUElOTVVYX0RBVEFfUkVHKCJQT1JUUjIyM18xOTJEUiIsIDB4ZTYwNTYwMDAsIDMyKSB7CisJCQlQT1JUMjIzX0RBVEEsIFBPUlQyMjJfREFUQSwgUE9SVDIyMV9EQVRBLCBQT1JUMjIwX0RBVEEsCisJCQlQT1JUMjE5X0RBVEEsIFBPUlQyMThfREFUQSwgUE9SVDIxN19EQVRBLCBQT1JUMjE2X0RBVEEsCisJCQlQT1JUMjE1X0RBVEEsIFBPUlQyMTRfREFUQSwgUE9SVDIxM19EQVRBLCBQT1JUMjEyX0RBVEEsCisJCQlQT1JUMjExX0RBVEEsIFBPUlQyMTBfREFUQSwgUE9SVDIwOV9EQVRBLCBQT1JUMjA4X0RBVEEsCisJCQlQT1JUMjA3X0RBVEEsIFBPUlQyMDZfREFUQSwgUE9SVDIwNV9EQVRBLCBQT1JUMjA0X0RBVEEsCisJCQlQT1JUMjAzX0RBVEEsIFBPUlQyMDJfREFUQSwgUE9SVDIwMV9EQVRBLCBQT1JUMjAwX0RBVEEsCisJCQlQT1JUMTk5X0RBVEEsIFBPUlQxOThfREFUQSwgUE9SVDE5N19EQVRBLCBQT1JUMTk2X0RBVEEsCisJCQlQT1JUMTk1X0RBVEEsIFBPUlQxOTRfREFUQSwgUE9SVDE5M19EQVRBLCBQT1JUMTkyX0RBVEEgfQorCX0sCisJeyBQSU5NVVhfREFUQV9SRUcoIlBPUlRVMjU1XzIyNERSIiwgMHhlNjA1NjAwNCwgMzIpIHsKKwkJCVBPUlQyNTVfREFUQSwgUE9SVDI1NF9EQVRBLCBQT1JUMjUzX0RBVEEsIFBPUlQyNTJfREFUQSwKKwkJCVBPUlQyNTFfREFUQSwgUE9SVDI1MF9EQVRBLCBQT1JUMjQ5X0RBVEEsIFBPUlQyNDhfREFUQSwKKwkJCVBPUlQyNDdfREFUQSwgUE9SVDI0Nl9EQVRBLCBQT1JUMjQ1X0RBVEEsIFBPUlQyNDRfREFUQSwKKwkJCVBPUlQyNDNfREFUQSwgUE9SVDI0Ml9EQVRBLCBQT1JUMjQxX0RBVEEsIFBPUlQyNDBfREFUQSwKKwkJCVBPUlQyMzlfREFUQSwgUE9SVDIzOF9EQVRBLCBQT1JUMjM3X0RBVEEsIFBPUlQyMzZfREFUQSwKKwkJCVBPUlQyMzVfREFUQSwgUE9SVDIzNF9EQVRBLCBQT1JUMjMzX0RBVEEsIFBPUlQyMzJfREFUQSwKKwkJCVBPUlQyMzFfREFUQSwgUE9SVDIzMF9EQVRBLCBQT1JUMjI5X0RBVEEsIFBPUlQyMjhfREFUQSwKKwkJCVBPUlQyMjdfREFUQSwgUE9SVDIyNl9EQVRBLCBQT1JUMjI1X0RBVEEsIFBPUlQyMjRfREFUQSB9CisJfSwKKwl7IFBJTk1VWF9EQVRBX1JFRygiUE9SVFUyODdfMjU2RFIiLCAweGU2MDU2MDA4LCAzMikgeworCQkJMCwgMCwgMCwgMCwKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCAwLAorCQkJMCwgMCwgMCwgMCwKKwkJCTAsIDAsIDAsIDAsCisJCQkwLCAwLCAwLCBQT1JUMjY0X0RBVEEsCisJCQlQT1JUMjYzX0RBVEEsIFBPUlQyNjJfREFUQSwgUE9SVDI2MV9EQVRBLCBQT1JUMjYwX0RBVEEsCisJCQlQT1JUMjU5X0RBVEEsIFBPUlQyNThfREFUQSwgUE9SVDI1N19EQVRBLCBQT1JUMjU2X0RBVEEgfQorCX0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwaW5tdXhfaW5mbyBzaDczNzdfcGlubXV4X2luZm8gPSB7CisJLm5hbWUgPSAic2g3Mzc3X3BmYyIsCisJLnJlc2VydmVkX2lkID0gUElOTVVYX1JFU0VSVkVELAorCS5kYXRhID0geyBQSU5NVVhfREFUQV9CRUdJTiwgUElOTVVYX0RBVEFfRU5EIH0sCisJLmlucHV0ID0geyBQSU5NVVhfSU5QVVRfQkVHSU4sIFBJTk1VWF9JTlBVVF9FTkQgfSwKKwkuaW5wdXRfcHUgPSB7IFBJTk1VWF9JTlBVVF9QVUxMVVBfQkVHSU4sIFBJTk1VWF9JTlBVVF9QVUxMVVBfRU5EIH0sCisJLmlucHV0X3BkID0geyBQSU5NVVhfSU5QVVRfUFVMTERPV05fQkVHSU4sIFBJTk1VWF9JTlBVVF9QVUxMRE9XTl9FTkQgfSwKKwkub3V0cHV0ID0geyBQSU5NVVhfT1VUUFVUX0JFR0lOLCBQSU5NVVhfT1VUUFVUX0VORCB9LAorCS5tYXJrID0geyBQSU5NVVhfTUFSS19CRUdJTiwgUElOTVVYX01BUktfRU5EIH0sCisJLmZ1bmN0aW9uID0geyBQSU5NVVhfRlVOQ1RJT05fQkVHSU4sIFBJTk1VWF9GVU5DVElPTl9FTkQgfSwKKworCS5maXJzdF9ncGlvID0gR1BJT19QT1JUMCwKKwkubGFzdF9ncGlvID0gR1BJT19GTl9SRVNFVE9VVFMsCisKKwkuZ3Bpb3MgPSBwaW5tdXhfZ3Bpb3MsCisJLmNmZ19yZWdzID0gcGlubXV4X2NvbmZpZ19yZWdzLAorCS5kYXRhX3JlZ3MgPSBwaW5tdXhfZGF0YV9yZWdzLAorCisJLmdwaW9fZGF0YSA9IHBpbm11eF9kYXRhLAorCS5ncGlvX2RhdGFfc2l6ZSA9IEFSUkFZX1NJWkUocGlubXV4X2RhdGEpLAorfTsKKwordm9pZCBzaDczNzdfcGlubXV4X2luaXQodm9pZCkKK3sKKwlyZWdpc3Rlcl9waW5tdXgoJnNoNzM3N19waW5tdXhfaW5mbyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzM2Ny5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNjcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2E5MDcxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNjcuYwpAQCAtMCwwICsxLDE5OCBAQAorLyoKKyAqIHNoNzM2NyBwcm9jZXNzb3Igc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgTWFnbnVzIERhbW0KKyAqIENvcHlyaWdodCAoQykgMjAwOCAgWW9zaGloaXJvIFNoaW1vZGEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CisjaW5jbHVkZSA8bGludXgvc2hfdGltZXIuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhlNmM0MDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzCQk9IHsgODAsIDgwLCA4MCwgODAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYwX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjBfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYxX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGU2YzUwMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMgICAgICAgICAgID0geyA4MSwgODEsIDgxLCA4MSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAxLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjJfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZTZjNjAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcyAgICAgICAgICAgPSB7IDgyLCA4MiwgODIsIDgyIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDIsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYyX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmM19wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhlNmM3MDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzICAgICAgICAgICA9IHsgODMsIDgzLCA4MywgODMgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYzX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMywKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjNfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWY0X3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGU2YzgwMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMgICAgICAgICAgID0geyA4OSwgODksIDg5LCA4OSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjRfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSA0LAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmNF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjVfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZTZjYjAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcyAgICAgICAgICAgPSB7IDkwLCA5MCwgOTAsIDkwIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmNV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDUsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWY1X3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmNl9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhlNmMzMDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzICAgICAgICAgICA9IHsgOTEsIDkxLCA5MSwgOTEgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWY2X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gNiwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjZfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzaF90aW1lcl9jb25maWcgY210MTBfcGxhdGZvcm1fZGF0YSA9IHsKKwkubmFtZSA9ICJDTVQxMCIsCisJLmNoYW5uZWxfb2Zmc2V0ID0gMHgxMCwKKwkudGltZXJfYml0ID0gMCwKKwkuY2xrID0gInJfY2xrIiwKKwkuY2xvY2tldmVudF9yYXRpbmcgPSAxMjUsCisJLmNsb2Nrc291cmNlX3JhdGluZyA9IDEyNSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY210MTBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkubmFtZQk9ICJDTVQxMCIsCisJCS5zdGFydAk9IDB4ZTYxMzgwMTAsCisJCS5lbmQJPSAweGU2MTM4MDFiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gNzIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBjbXQxMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoX2NtdCIsCisJLmlkCQk9IDEwLAorCS5kZXYgPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmNtdDEwX3BsYXRmb3JtX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBjbXQxMF9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKGNtdDEwX3Jlc291cmNlcyksCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3MzY3X2Vhcmx5X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lmMF9kZXZpY2UsCisJJnNjaWYxX2RldmljZSwKKwkmc2NpZjJfZGV2aWNlLAorCSZzY2lmM19kZXZpY2UsCisJJnNjaWY0X2RldmljZSwKKwkmc2NpZjVfZGV2aWNlLAorCSZzY2lmNl9kZXZpY2UsCisJJmNtdDEwX2RldmljZSwKK307CisKK3ZvaWQgX19pbml0IHNoNzM2N19hZGRfc3RhbmRhcmRfZGV2aWNlcyh2b2lkKQoreworCXBsYXRmb3JtX2FkZF9kZXZpY2VzKHNoNzM2N19lYXJseV9kZXZpY2VzLAorCQkJICAgICBBUlJBWV9TSVpFKHNoNzM2N19lYXJseV9kZXZpY2VzKSk7Cit9CisKKyNkZWZpbmUgU1lNU1RQQ1IyIDB4ZTYxNTgwNDgKKyNkZWZpbmUgU1lNU1RQQ1IyX0NNVDEgKDEgPDwgMjkpCisKK3ZvaWQgX19pbml0IHNoNzM2N19hZGRfZWFybHlfZGV2aWNlcyh2b2lkKQoreworCS8qIGVuYWJsZSBjbG9jayB0byBDTVQxICovCisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFNZTVNUUENSMikgJiB+U1lNU1RQQ1IyX0NNVDEsIFNZTVNUUENSMik7CisKKwllYXJseV9wbGF0Zm9ybV9hZGRfZGV2aWNlcyhzaDczNjdfZWFybHlfZGV2aWNlcywKKwkJCQkgICBBUlJBWV9TSVpFKHNoNzM2N19lYXJseV9kZXZpY2VzKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3NldHVwLXNoNzM3Mi5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNzIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDExNTMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNzIuYwpAQCAtMCwwICsxLDE5OSBAQAorLyoKKyAqIHNoNzM3MiBwcm9jZXNzb3Igc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgTWFnbnVzIERhbW0KKyAqIENvcHlyaWdodCAoQykgMjAwOCAgWW9zaGloaXJvIFNoaW1vZGEKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfc2NpLmg+CisjaW5jbHVkZSA8bGludXgvc2hfaW50Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX3RpbWVyLmg+CisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjBfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZTZjNDAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcwkJPSB7IDgwLCA4MCwgODAsIDgwIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYwX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMV9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhlNmM1MDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzICAgICAgICAgICA9IHsgODEsIDgxLCA4MSwgODEgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYxX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjFfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYyX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGU2YzYwMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMgICAgICAgICAgID0geyA4MiwgODIsIDgyLCA4MiB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjJfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAyLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMl9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjNfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZTZjNzAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcyAgICAgICAgICAgPSB7IDgzLCA4MywgODMsIDgzIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmM19kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDMsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYzX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmNF9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhlNmM4MDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzICAgICAgICAgICA9IHsgODksIDg5LCA4OSwgODkgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWY0X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gNCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjRfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWY1X3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGU2Y2IwMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMgICAgICAgICAgID0geyA5MCwgOTAsIDkwLCA5MCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjVfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSA1LAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmNV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjZfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZTZjMzAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcyAgICAgICAgICAgPSB7IDkxLCA5MSwgOTEsIDkxIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmNl9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDYsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWY2X3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfdGltZXJfY29uZmlnIGNtdDEwX3BsYXRmb3JtX2RhdGEgPSB7CisJLm5hbWUgPSAiQ01UMTAiLAorCS5jaGFubmVsX29mZnNldCA9IDB4MTAsCisJLnRpbWVyX2JpdCA9IDAsCisJLmNsayA9ICJyX2NsayIsCisJLmNsb2NrZXZlbnRfcmF0aW5nID0gMTI1LAorCS5jbG9ja3NvdXJjZV9yYXRpbmcgPSAxMjUsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNtdDEwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLm5hbWUJPSAiQ01UMTAiLAorCQkuc3RhcnQJPSAweGU2MTM4MDEwLAorCQkuZW5kCT0gMHhlNjEzODAxYiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IDcyLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgY210MTBfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9jbXQiLAorCS5pZAkJPSAxMCwKKwkuZGV2ID0geworCQkucGxhdGZvcm1fZGF0YQk9ICZjbXQxMF9wbGF0Zm9ybV9kYXRhLAorCX0sCisJLnJlc291cmNlCT0gY210MTBfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShjbXQxMF9yZXNvdXJjZXMpLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzM3Ml9lYXJseV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpZjBfZGV2aWNlLAorCSZzY2lmMV9kZXZpY2UsCisJJnNjaWYyX2RldmljZSwKKwkmc2NpZjNfZGV2aWNlLAorCSZzY2lmNF9kZXZpY2UsCisJJnNjaWY1X2RldmljZSwKKwkmc2NpZjZfZGV2aWNlLAorCSZjbXQxMF9kZXZpY2UsCit9OworCit2b2lkIF9faW5pdCBzaDczNzJfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKK3sKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzaDczNzJfZWFybHlfZGV2aWNlcywKKwkJCSAgICBBUlJBWV9TSVpFKHNoNzM3Ml9lYXJseV9kZXZpY2VzKSk7Cit9CisKKyNkZWZpbmUgU01TVFBDUjMgMHhlNjE1MDEzYworI2RlZmluZSBTTVNUUENSM19DTVQxICgxIDw8IDI5KQorCit2b2lkIF9faW5pdCBzaDczNzJfYWRkX2Vhcmx5X2RldmljZXModm9pZCkKK3sKKwkvKiBlbmFibGUgY2xvY2sgdG8gQ01UMSAqLworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTTVNUUENSMykgJiB+U01TVFBDUjNfQ01UMSwgU01TVFBDUjMpOworCisJZWFybHlfcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3MzcyX2Vhcmx5X2RldmljZXMsCisJCQkJICAgQVJSQVlfU0laRShzaDczNzJfZWFybHlfZGV2aWNlcykpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS9zZXR1cC1zaDczNzcuYyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3Mzc3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBlMzc3NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtc2htb2JpbGUvc2V0dXAtc2g3Mzc3LmMKQEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiBzaDczNzcgcHJvY2Vzc29yIHN1cHBvcnQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgIE1hZ251cyBEYW1tCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggIFlvc2hpaGlybyBTaGltb2RhCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NoX2ludGMuaD4KKyNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYwX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGU2YzQwMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMJCT0geyA4MCwgODAsIDgwLCA4MCB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjBfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmMF9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjFfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZTZjNTAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcyAgICAgICAgICAgPSB7IDgxLCA4MSwgODEsIDgxIH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWYxX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMl9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhlNmM2MDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzICAgICAgICAgICA9IHsgODIsIDgyLCA4MiwgODIgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWYyX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gMiwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjJfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYzX3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGU2YzcwMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMgICAgICAgICAgID0geyA4MywgODMsIDgzLCA4MyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjNfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAzLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmM19wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjRfcGxhdGZvcm1fZGF0YSA9IHsKKwkubWFwYmFzZQk9IDB4ZTZjODAwMDAsCisJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkuaXJxcyAgICAgICAgICAgPSB7IDg5LCA4OSwgODksIDg5IH0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lmNF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IDQsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNjaWY0X3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmNV9wbGF0Zm9ybV9kYXRhID0geworCS5tYXBiYXNlCT0gMHhlNmNiMDAwMCwKKwkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCS5pcnFzICAgICAgICAgICA9IHsgOTAsIDkwLCA5MCwgOTAgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWY1X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gNSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjVfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWY2X3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGU2Y2MwMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMgICAgICAgICAgID0geyAxOTYsIDE5NiwgMTk2LCAxOTYgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaWY2X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gNiwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2NpZjZfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWY3X3BsYXRmb3JtX2RhdGEgPSB7CisJLm1hcGJhc2UJPSAweGU2YzMwMDAwLAorCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkudHlwZQkJPSBQT1JUX1NDSUYsCisJLmlycXMgICAgICAgICAgID0geyA5MSwgOTEsIDkxLCA5MSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpZjdfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSA3LAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZzY2lmN19wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHNoX3RpbWVyX2NvbmZpZyBjbXQxMF9wbGF0Zm9ybV9kYXRhID0geworCS5uYW1lID0gIkNNVDEwIiwKKwkuY2hhbm5lbF9vZmZzZXQgPSAweDEwLAorCS50aW1lcl9iaXQgPSAwLAorCS5jbGsgPSAicl9jbGsiLAorCS5jbG9ja2V2ZW50X3JhdGluZyA9IDEyNSwKKwkuY2xvY2tzb3VyY2VfcmF0aW5nID0gMTI1LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBjbXQxMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIkNNVDEwIiwKKwkJLnN0YXJ0CT0gMHhlNjEzODAxMCwKKwkJLmVuZAk9IDB4ZTYxMzgwMWIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSA3MiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNtdDEwX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2hfY210IiwKKwkuaWQJCT0gMTAsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmY210MTBfcGxhdGZvcm1fZGF0YSwKKwl9LAorCS5yZXNvdXJjZQk9IGNtdDEwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoY210MTBfcmVzb3VyY2VzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDczNzdfZWFybHlfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjaWYwX2RldmljZSwKKwkmc2NpZjFfZGV2aWNlLAorCSZzY2lmMl9kZXZpY2UsCisJJnNjaWYzX2RldmljZSwKKwkmc2NpZjRfZGV2aWNlLAorCSZzY2lmNV9kZXZpY2UsCisJJnNjaWY2X2RldmljZSwKKwkmc2NpZjdfZGV2aWNlLAorCSZjbXQxMF9kZXZpY2UsCit9OworCit2b2lkIF9faW5pdCBzaDczNzdfYWRkX3N0YW5kYXJkX2RldmljZXModm9pZCkKK3sKKwlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzaDczNzdfZWFybHlfZGV2aWNlcywKKwkJCSAgICBBUlJBWV9TSVpFKHNoNzM3N19lYXJseV9kZXZpY2VzKSk7Cit9CisKKyNkZWZpbmUgU01TVFBDUjMgMHhlNjE1MDEzYworI2RlZmluZSBTTVNUUENSM19DTVQxICgxIDw8IDI5KQorCit2b2lkIF9faW5pdCBzaDczNzdfYWRkX2Vhcmx5X2RldmljZXModm9pZCkKK3sKKwkvKiBlbmFibGUgY2xvY2sgdG8gQ01UMSAqLworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTTVNUUENSMykgJiB+U01TVFBDUjNfQ01UMSwgU01TVFBDUjMpOworCisJZWFybHlfcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3Mzc3X2Vhcmx5X2RldmljZXMsCisJCQkJICAgQVJSQVlfU0laRShzaDczNzdfZWFybHlfZGV2aWNlcykpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS90aW1lci5jIGIvYXJjaC9hcm0vbWFjaC1zaG1vYmlsZS90aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NTc5NGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXNobW9iaWxlL3RpbWVyLmMKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIFNILU1vYmlsZSBUaW1lcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCAgTWFnbnVzIERhbW0KKyAqIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDkgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzaG1vYmlsZV9sYXRlX3RpbWVfaW5pdCh2b2lkKQoreworCS8qCisJICogTWFrZSBzdXJlIGFsbCBjb21waWxlZC1pbiBlYXJseSB0aW1lcnMgcmVnaXN0ZXIgdGhlbXNlbHZlcy4KKwkgKgorCSAqIFJ1biBwcm9iZSgpIGZvciB0d28gImVhcmx5dGltZXIiIGRldmljZXMsIHRoZXNlIHdpbGwgYmUgdGhlCisJICogY2xvY2tldmVudHMgYW5kIGNsb2Nrc291cmNlIGRldmljZXMgcmVzcGVjdGl2ZWx5LiBJbiB0aGUgZXZlbnQKKwkgKiB0aGF0IG9ubHkgYSBjbG9ja2V2ZW50cyBkZXZpY2UgaXMgYXZhaWxhYmxlLCB3ZSAtRU5PREVWIG9uIHRoZQorCSAqIGNsb2Nrc291cmNlIGFuZCB0aGUgamlmZmllcyBjbG9ja3NvdXJjZSBpcyB1c2VkIHRyYW5zcGFyZW50bHkKKwkgKiBpbnN0ZWFkLiBObyBlcnJvciBoYW5kbGluZyBpcyBuZWNlc3NhcnkgaGVyZS4KKwkgKi8KKwllYXJseV9wbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXJfYWxsKCJlYXJseXRpbWVyIik7CisJZWFybHlfcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCJlYXJseXRpbWVyIiwgMiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzaG1vYmlsZV90aW1lcl9pbml0KHZvaWQpCit7CisJbGF0ZV90aW1lX2luaXQgPSBzaG1vYmlsZV9sYXRlX3RpbWVfaW5pdDsKK30KKworc3RydWN0IHN5c190aW1lciBzaG1vYmlsZV90aW1lciA9IHsKKwkuaW5pdAkJPSBzaG1vYmlsZV90aW1lcl9pbml0LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9jb3JlLmMgYi9hcmNoL2FybS9tYWNoLXUzMDAvY29yZS5jCmluZGV4IDAxYjUwMzEuLjVmMzRlYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdTMwMC9jb3JlLmMKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2NvcmUuYwpAQCAtMzU4LDcgKzM1OCw3IEBACiAJLyoKIAkgKiBUaGUgQVZFM2UgcmVxdWlyZXMgdHdvIHJlZ2lvbnMgb2YgMjU2TUIgdGhhdCBpdCBjb25zaWRlcnMKIAkgKiAiaW52aXNpYmxlIi4gVGhlIGhhcmR3YXJlIHdpbGwgbm90IGJlIGFibGUgdG8gYWNjZXNzIHRoZXNlCi0JICogYWRyZXNzZXMsIHNvIHRoZXkgc2hvdWxkIG5ldmVyIHBvaW50IHRvIHN5c3RlbSBSQU0uCisJICogYWRkcmVzc2VzLCBzbyB0aGV5IHNob3VsZCBuZXZlciBwb2ludCB0byBzeXN0ZW0gUkFNLgogCSAqLwogCXsKIAkJLm5hbWUgID0gIkFWRTNlIFJlc2VydmVkIDAiLApAQCAtMTU5Niw3ICsxNTk2LDcgQEAKIC8qCiAgKiBTb21lIGRldmljZXMgYW5kIHRoZWlyIHJlc291cmNlcyByZXF1aXJlIHJlc2VydmVkIHBoeXNpY2FsIG1lbW9yeSBmcm9tCiAgKiB0aGUgZW5kIG9mIHRoZSBhdmFpbGFibGUgUkFNLiBUaGlzIGZ1bmN0aW9uIHRyYXZlcnNlcyB0aGUgbGlzdCBvZiBkZXZpY2VzCi0gKiBhbmQgYXNzaWducyBhY3R1YWwgYWRyZXNzZXMgdG8gdGhlc2UuCisgKiBhbmQgYXNzaWducyBhY3R1YWwgYWRkcmVzc2VzIHRvIHRoZXNlLgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgdTMwMF9hc3NpZ25fcGh5c21lbSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9jb2g5MDEzMTguaCBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvY29oOTAxMzE4LmgKaW5kZXggZjRjZmVlOS4uYjgxNTViNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9jb2g5MDEzMTguaAorKysgYi9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL2NvaDkwMTMxOC5oCkBAIC01Myw3ICs1Myw3IEBACiAgKiBzdHJ1Y3QgY29oX2RtYV9jaGFubmVsIC0gZG1hIGNoYW5uZWwgYmFzZQogICogQG5hbWU6IGFzY2lpIG5hbWUgb2YgZG1hIGNoYW5uZWwKICAqIEBudW1iZXI6IGNoYW5uZWwgaWQgbnVtYmVyCi0gKiBAZGVzY19uYnJfbWF4OiBudW1iZXIgb2YgcHJlYWxsb2NhdGVkIGRlc2NyaXB0b3J0b3JzCisgKiBAZGVzY19uYnJfbWF4OiBudW1iZXIgb2YgcHJlYWxsb2NhdGVkIGRlc2NyaXB0b3JzCiAgKiBAcHJpb3JpdHlfaGlnaDogcHJpbyBvZiBjaGFubmVsLCAwIGxvdyBvdGhlcndpc2UgaGlnaC4KICAqIEBwYXJhbTogY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCiAgKiBAZGV2X2FkZHI6IHBoeXNpY2FsIGFkZHJlc3Mgb2YgcGVyaXBoYWwgY29ubmVjdGVkIHRvIGNoYW5uZWwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL21hY2gtdTMwMC9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUwppbmRleCBjYTRhMDI4Li45MmMxMjQyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXUzMDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMKKysrIGIvYXJjaC9hcm0vbWFjaC11MzAwL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMSw3ICsxMSw3IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAJLm1hY3JvCWFkZHJ1YXJ0LCByeCwgdG1wCi0JLyogSWYgd2UgbW92ZSB0aGUgYWRyZXNzIHVzaW5nIE1NVSwgdXNlIHRoaXMuICovCisJLyogSWYgd2UgbW92ZSB0aGUgYWRkcmVzcyB1c2luZyBNTVUsIHVzZSB0aGlzLiAqLwogCW1yYwlwMTUsIDAsIFxyeCwgYzEsIGMwCiAJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwogCWxkcmVxCVxyeCwJICA9IFUzMDBfU0xPV19QRVJfUEhZU19CQVNFIEAgTU1VIG9mZiwgcGh5c2ljYWwgYWRkcmVzcwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaCBiL2FyY2gvYXJtL21hY2gtdXg1MDAvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggNmRhNjUwMi4uMDRlYTgzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC11eDUwMC9pbmNsdWRlL21hY2gvaGFyZHdhcmUuaAorKysgYi9hcmNoL2FybS9tYWNoLXV4NTAwL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oCkBAIC02OCwxMiArNjgsMTIgQEAKICNkZWZpbmUgVTg1MDBfUEtBTV9CQVNFCQkoVTg1MDBfUEVSNl9CQVNFICsgMHgyMDAwKQogI2RlZmluZSBVODUwMF9DUllQVE8wX0JBU0UJKFU4NTAwX1BFUjZfQkFTRSArIDB4YTAwMCkKICNkZWZpbmUgVTg1MDBfQ1JZUFRPMV9CQVNFCShVODUwMF9QRVI2X0JBU0UgKyAweGIwMDApCi0jZGVmaW5lIFU4NTAwX0NMS1JTVDZfQkFTRQkoVTg1MDBfUEVSN19CQVNFICsgMHhmMDAwKQorI2RlZmluZSBVODUwMF9DTEtSU1Q2X0JBU0UJKFU4NTAwX1BFUjZfQkFTRSArIDB4ZjAwMCkKIAogLyogcGVyNSBiYXNlIGFkZHJlc3Nlc3MgKi8KICNkZWZpbmUgVTg1MDBfVVNCT1RHX0JBU0UJKFU4NTAwX1BFUjVfQkFTRSArIDB4MDAwMDApCiAjZGVmaW5lIFU4NTAwX0dQSU81X0JBU0UJKFU4NTAwX1BFUjVfQkFTRSArIDB4MWUwMDApCi0jZGVmaW5lIFU4NTAwX0NMS1JTVDVfQkFTRQkoVTg1MDBfUEVSN19CQVNFICsgMHgxZjAwMCkKKyNkZWZpbmUgVTg1MDBfQ0xLUlNUNV9CQVNFCShVODUwMF9QRVI1X0JBU0UgKyAweDFmMDAwKQogCiAvKiBwZXI0IGJhc2UgYWRkcmVzc2VzcyAqLwogI2RlZmluZSBVODUwMF9CQUNLVVBSQU0wX0JBU0UJKFU4NTAwX1BFUjRfQkFTRSArIDB4MDAwMCkKQEAgLTk1LDcgKzk1LDcgQEAKICNkZWZpbmUgVTg1MDBfVUFSVDJfQkFTRQkoVTg1MDBfUEVSM19CQVNFICsgMHg3MDAwKQogI2RlZmluZSBVODUwMF9TREk1X0JBU0UJCShVODUwMF9QRVIzX0JBU0UgKyAweDgwMDApCiAjZGVmaW5lIFU4NTAwX0dQSU8zX0JBU0UJKFU4NTAwX1BFUjNfQkFTRSArIDB4ZTAwMCkKLSNkZWZpbmUgVTg1MDBfQ0xLUlNUM19CQVNFCShVODUwMF9QRVI3X0JBU0UgKyAweGYwMDApCisjZGVmaW5lIFU4NTAwX0NMS1JTVDNfQkFTRQkoVTg1MDBfUEVSM19CQVNFICsgMHhmMDAwKQogCiAvKiBwZXIyIGJhc2UgYWRkcmVzc2VzcyAqLwogI2RlZmluZSBVODUwMF9JMkMzX0JBU0UJCShVODUwMF9QRVIyX0JBU0UgKyAweDAwMDApCkBAIC0xMjMsNyArMTIzLDcgQEAKICNkZWZpbmUgVTg1MDBfU1BJM19CQVNFCQkoVTg1MDBfUEVSMV9CQVNFICsgMHg5MDAwKQogI2RlZmluZSBVODUwMF9TTElNMF9CQVNFCShVODUwMF9QRVIxX0JBU0UgKyAweGEwMDApCiAjZGVmaW5lIFU4NTAwX0dQSU8xX0JBU0UJKFU4NTAwX1BFUjFfQkFTRSArIDB4ZTAwMCkKLSNkZWZpbmUgVTg1MDBfQ0xLUlNUMV9CQVNFCShVODUwMF9QRVIyX0JBU0UgKyAweGYwMDApCisjZGVmaW5lIFU4NTAwX0NMS1JTVDFfQkFTRQkoVTg1MDBfUEVSMV9CQVNFICsgMHhmMDAwKQogCiAvKiBTVC1Fcmljc3NvbiBtb2RpZmllZCBwbDAyMiBpZCAqLwogI2RlZmluZSBTU1BfUEVSX0lECQkweDAxMDgwMDIyCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmggYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvY3B1LmgKaW5kZXggNGQ1OGJhMS4uZjg3MzBiNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2NwdS5oCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9jcHUuaApAQCAtNTcsMyArNTcsNCBAQAogZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTAwX2RldmljZV9rcGk7CiBleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBudWM5MDBfZGV2aWNlX3J0YzsKIGV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG51YzkwMF9kZXZpY2VfdHM7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBudWM5MDBfZGV2aWNlX2xjZDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9kZXYuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9kZXYuYwppbmRleCBlYzcxMWY0Li40ODg3NjEyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvZGV2LmMKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2Rldi5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bWFjaC9yZWdzLXNlcmlhbC5oPgogI2luY2x1ZGUgPG1hY2gvbnVjOTAwX3NwaS5oPgogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9mYi5oPgogCiAjaW5jbHVkZSAiY3B1LmgiCiAKQEAgLTM4MCw2ICszODEsNDcgQEAKIAkucmVzb3VyY2UJPSBudWM5MDBfa3BpX3Jlc291cmNlLAogfTsKIAorI2lmZGVmIENPTkZJR19GQl9OVUM5MDAKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBudWM5MDBfbGNkX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBXOTBYOTAwX1BBX0xDRCwKKwkJLmVuZCAgID0gVzkwWDkwMF9QQV9MQ0QgKyBXOTBYOTAwX1NaX0xDRCAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfTENELAorCQkuZW5kICAgPSBJUlFfTENELAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUSwKKwl9Cit9OworCitzdGF0aWMgdTY0IG51YzkwMF9kZXZpY2VfbGNkX2RtYW1hc2sgPSAtMTsKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbnVjOTAwX2RldmljZV9sY2QgPSB7CisJLm5hbWUgICAgICAgICAgICAgPSAibnVjOTAwLWxjZCIsCisJLmlkICAgICAgICAgICAgICAgPSAtMSwKKwkubnVtX3Jlc291cmNlcyAgICA9IEFSUkFZX1NJWkUobnVjOTAwX2xjZF9yZXNvdXJjZSksCisJLnJlc291cmNlICAgICAgICAgPSBudWM5MDBfbGNkX3Jlc291cmNlLAorCS5kZXYgICAgICAgICAgICAgID0geworCQkuZG1hX21hc2sgICAgICAgICAgICAgICA9ICZudWM5MDBfZGV2aWNlX2xjZF9kbWFtYXNrLAorCQkuY29oZXJlbnRfZG1hX21hc2sgICAgICA9IC0xLAorCX0KK307CisKK3ZvaWQgIG51YzkwMF9mYl9zZXRfcGxhdGRhdGEoc3RydWN0IG51YzkwMGZiX21hY2hfaW5mbyAqcGQpCit7CisJc3RydWN0IG51YzkwMGZiX21hY2hfaW5mbyAqbnBkOworCisJbnBkID0ga21hbGxvYyhzaXplb2YoKm5wZCksIEdGUF9LRVJORUwpOworCWlmIChucGQpIHsKKwkJbWVtY3B5KG5wZCwgcGQsIHNpemVvZigqbnBkKSk7CisJCW51YzkwMF9kZXZpY2VfbGNkLmRldi5wbGF0Zm9ybV9kYXRhID0gbnBkOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAibm8gbWVtb3J5IGZvciBMQ0QgcGxhdGZvcm0gZGF0YVxuIik7CisJfQorfQorI2VuZGlmCisKIC8qSGVyZSBzaG91bGQgYmUgeW91ciBldmIgcmVzb3Vyc2Usc3VjaCBhcyBMQ0QqLwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbnVjOTAwX3B1YmxpY19kZXZbXSBfX2luaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9mYi5oIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL2luY2x1ZGUvbWFjaC9mYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlYzVlY2UKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL2ZiLmgKQEAgLTAsMCArMSw4MyBAQAorLyogbGludXgvaW5jbHVkZS9hc20vYXJjaC1udWM5MDAvZmIuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBDaGFuZ2Vsb2c6CisgKgorICogICAyMDA4LzA4LzI2ICAgICB2aW5jZW4uenN3YW4gbW9kaWZ5IHRoaXMgZmlsZSBmb3IgTENELgorICovCisKKyNpZm5kZWYgX19BU01fQVJNX0ZCX0gKKyNkZWZpbmUgX19BU01fQVJNX0ZCX0gKKworCisKKy8qIExDRCBDb250cm9sbGVyIEhhcmR3YXJlIERlc2MgKi8KK3N0cnVjdCBudWM5MDBmYl9odyB7CisJdW5zaWduZWQgaW50IGxjZF9kY2NzOworCXVuc2lnbmVkIGludCBsY2RfZGV2aWNlX2N0cmw7CisJdW5zaWduZWQgaW50IGxjZF9tcHVsY2RfY21kOworCXVuc2lnbmVkIGludCBsY2RfaW50X2NzOworCXVuc2lnbmVkIGludCBsY2RfY3J0Y19zaXplOworCXVuc2lnbmVkIGludCBsY2RfY3J0Y19kZW5kOworCXVuc2lnbmVkIGludCBsY2RfY3J0Y19ocjsKKwl1bnNpZ25lZCBpbnQgbGNkX2NydGNfaHN5bmM7CisJdW5zaWduZWQgaW50IGxjZF9jcnRjX3ZyOworCXVuc2lnbmVkIGludCBsY2RfdmFfYmFkZHIwOworCXVuc2lnbmVkIGludCBsY2RfdmFfYmFkZHIxOworCXVuc2lnbmVkIGludCBsY2RfdmFfZmJjdHJsOworCXVuc2lnbmVkIGludCBsY2RfdmFfc2NhbGU7CisJdW5zaWduZWQgaW50IGxjZF92YV90ZXN0OworCXVuc2lnbmVkIGludCBsY2RfdmFfd2luOworCXVuc2lnbmVkIGludCBsY2RfdmFfc3R1ZmY7Cit9OworCisvKiBMQ0QgRGlzcGxheSBEZXNjcmlwdGlvbiAqLworc3RydWN0IG51YzkwMGZiX2Rpc3BsYXkgeworCS8qIExDRCBJbWFnZSB0eXBlICovCisJdW5zaWduZWQgdHlwZTsKKworCS8qIExDRCBTY3JlZW4gU2l6ZSAqLworCXVuc2lnbmVkIHNob3J0IHdpZHRoOworCXVuc2lnbmVkIHNob3J0IGhlaWdodDsKKworCS8qIExDRCBTY3JlZW4gSW5mbyAqLworCXVuc2lnbmVkIHNob3J0IHhyZXM7CisJdW5zaWduZWQgc2hvcnQgeXJlczsKKwl1bnNpZ25lZCBzaG9ydCBicHA7CisKKwl1bnNpZ25lZCBsb25nIHBpeGNsb2NrOworCXVuc2lnbmVkIHNob3J0IGxlZnRfbWFyZ2luOworCXVuc2lnbmVkIHNob3J0IHJpZ2h0X21hcmdpbjsKKwl1bnNpZ25lZCBzaG9ydCBoc3luY19sZW47CisJdW5zaWduZWQgc2hvcnQgdXBwZXJfbWFyZ2luOworCXVuc2lnbmVkIHNob3J0IGxvd2VyX21hcmdpbjsKKwl1bnNpZ25lZCBzaG9ydCB2c3luY19sZW47CisKKwkvKiBoYXJkd2FyZSBzcGVjaWFsIHJlZ2lzdGVyIHZhbHVlICovCisJdW5zaWduZWQgaW50IGRjY3M7CisJdW5zaWduZWQgaW50IGRldmN0bDsKKwl1bnNpZ25lZCBpbnQgZmJjdHJsOworCXVuc2lnbmVkIGludCBzY2FsZTsKK307CisKK3N0cnVjdCBudWM5MDBmYl9tYWNoX2luZm8geworCXN0cnVjdCBudWM5MDBmYl9kaXNwbGF5ICpkaXNwbGF5czsKKwl1bnNpZ25lZCBudW1fZGlzcGxheXM7CisJdW5zaWduZWQgZGVmYXVsdF9kaXNwbGF5OworCS8qIEdQSU8gU2V0dGluZyAgSW5mbyAqLworCXVuc2lnbmVkIGdwaW9fZGlyOworCXVuc2lnbmVkIGdwaW9fZGlyX21hc2s7CisJdW5zaWduZWQgZ3Bpb19kYXRhOworCXVuc2lnbmVkIGdwaW9fZGF0YV9tYXNrOworfTsKKworZXh0ZXJuIHZvaWQgX19pbml0IG51YzkwMF9mYl9zZXRfcGxhdGRhdGEoc3RydWN0IG51YzkwMGZiX21hY2hfaW5mbyAqKTsKKworI2VuZGlmIC8qIF9fQVNNX0FSTV9GQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3JlZ3MtbGRtLmggYi9hcmNoL2FybS9tYWNoLXc5MHg5MDAvaW5jbHVkZS9tYWNoL3JlZ3MtbGRtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTlkNDgwYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvcmVncy1sZG0uaApAQCAtMCwwICsxLDI1MyBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtdzkweDkwMC9pbmNsdWRlL21hY2gvcmVncy1zZXJpYWwuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgRGVzY3JpcHRpb246CisgKiAgICAgTnV2b3RvbiBEaXNwbGF5LCBMQ00gUmVnaXN0ZXIgbGlzdAorICogIEF1dGhvcjogIFdhbmcgUWlhbmcgKHJ1cmFsaXR5LmxpbnV4QGdtYWlsLmNvbSkgMjAwOS8xMi8xMQorICoKKyAqLworCisKKyNpZm5kZWYgX19BU01fQVJNX1c5MFg5MDBfUkVHU19MRE1fSAorI2RlZmluZSBfX0FTTV9BUk1fVzkwWDkwMF9SRUdTX0xETV9ICisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisvKiBEaXNwbGF5IENvbnRyb2xsZXIgQ29udHJvbC9TdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX0xDTV9EQ0NTCQkJKDB4MDApCisKKyNkZWZpbmUgTENNX0RDQ1NfRU5HX1JTVAkJKDEgPDwgMCkKKyNkZWZpbmUgTENNX0RDQ1NfVkFfRU4JCQkoMSA8PCAxKQorI2RlZmluZSBMQ01fRENDU19PU0RfRU4JCQkoMSA8PCAyKQorI2RlZmluZSBMQ01fRENDU19ESVNQX09VVF9FTgkJKDEgPDwgMykKKyNkZWZpbmUgTENNX0RDQ1NfRElTUF9JTlRfRU4JCSgxIDw8IDQpCisjZGVmaW5lIExDTV9EQ0NTX0NNRF9PTgkJCSgxIDw8IDUpCisjZGVmaW5lIExDTV9EQ0NTX0ZJRUxEX0lOVFIJCSgxIDw8IDYpCisjZGVmaW5lIExDTV9EQ0NTX1NJTkdMRQkJCSgxIDw8IDcpCisKK2VudW0gTENNX0RDQ1NfVkFfU1JDIHsKKwlMQ01fRENDU19WQV9TUkNfWVVWNDIyCQk9ICgwIDw8IDgpLAorCUxDTV9EQ0NTX1ZBX1NSQ19ZQ0JDUjQyMgk9ICgxIDw8IDgpLAorCUxDTV9EQ0NTX1ZBX1NSQ19SR0I4ODgJCT0gKDIgPDwgOCksCisJTENNX0RDQ1NfVkFfU1JDX1JHQjY2NgkJPSAoMyA8PCA4KSwKKwlMQ01fRENDU19WQV9TUkNfUkdCNTY1CQk9ICg0IDw8IDgpLAorCUxDTV9EQ0NTX1ZBX1NSQ19SR0I0NDRMT1cJPSAoNSA8PCA4KSwKKwlMQ01fRENDU19WQV9TUkNfUkdCNDQ0SElHSCAJPSAoNyA8PCA4KQorfTsKKworCisvKiBEaXNwbGF5IERldmljZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19MQ01fREVWX0NUUkwJCSgweDA0KQorCitlbnVtIExDTV9ERVZfQ1RSTF9TV0FQX1lDYkNyIHsKKwlMQ01fREVWX0NUUkxfU1dBUF9VWVZZCQk9ICgwIDw8IDEpLAorCUxDTV9ERVZfQ1RSTF9TV0FQX1lVWVYJCT0gKDEgPDwgMSksCisJTENNX0RFVl9DVFJMX1NXQVBfVllVWQkJPSAoMiA8PCAxKSwKKwlMQ01fREVWX0NUUkxfU1dBUF9ZVllVCQk9ICgzIDw8IDEpCit9OworCitlbnVtIExDTV9ERVZfQ1RSTF9SR0JfU0hJRlQgeworCUxDTV9ERVZfQ1RSTF9SR0JfU0hJRlRfTk9UIAk9ICgwIDw8IDMpLAorCUxDTV9ERVZfQ1RSTF9SR0JfU0hJRlRfT05FQ1lDTEUgPSAoMSA8PCAzKSwKKwlMQ01fREVWX0NUUkxfUkdCX1NISUZUX1RXT0NZQ0xFID0gKDIgPDwgMyksCisJTENNX0RFVl9DVFJMX1JHQl9TSElGVF9OT1RfREVGCT0gKDMgPDwgMykKK307CisKK2VudW0gTENNX0RFVl9DVFJMX0RFVklDRSB7CisJTENNX0RFVl9DVFJMX0RFVklDRV9ZVVY0MjIJPSAoMCA8PCA1KSwKKwlMQ01fREVWX0NUUkxfREVWSUNFX1lVVjQ0NAk9ICgxIDw8IDUpLAorCUxDTV9ERVZfQ1RSTF9ERVZJQ0VfVU5JUEFDCT0gKDQgPDwgNSksCisJTENNX0RFVl9DVFJMX0RFVklDRV9TRUlLT19FUFNPTgk9ICg1IDw8IDUpLAorCUxDTV9ERVZfQ1RSTF9ERVZJQ0VfSElHSF9DT0xPUgk9ICg2IDw8IDUpLAorCUxDTV9ERVZfQ1RSTF9ERVZJQ0VfTVBVCQk9ICg3IDw8IDUpCit9OworCisjZGVmaW5lIExDTV9ERVZfQ1RSTF9MQ0RfRERBCQkoOCkKKyNkZWZpbmUgTENNX0RFVl9DVFJMX1lVVjJDQ0lSCQkoMTYpCisKK2VudW0gTENNX0RFVl9DVFJMX0xDRF9TRUwgeworCUxDTV9ERVZfQ1RSTF9MQ0RfU0VMX1JHQl9HQlIJPSAoMCA8PCAxNyksCisJTENNX0RFVl9DVFJMX0xDRF9TRUxfQkdSX1JCRwk9ICgxIDw8IDE3KSwKKwlMQ01fREVWX0NUUkxfTENEX1NFTF9HQlJfUkdCCT0gKDIgPDwgMTcpLAorCUxDTV9ERVZfQ1RSTF9MQ0RfU0VMX1JCR19CR1IJPSAoMyA8PCAxNykKK307CisKK2VudW0gTENNX0RFVl9DVFJMX0ZBTF9EIHsKKwlMQ01fREVWX0NUUkxfRkFMX0RfRkFMTElORwk9ICgwIDw8IDE5KSwKKwlMQ01fREVWX0NUUkxfRkFMX0RfUklTSU5HCT0gKDEgPDwgMTkpLAorfTsKKworZW51bSBMQ01fREVWX0NUUkxfSF9QT0wgeworCUxDTV9ERVZfQ1RSTF9IX1BPTF9MT1cJCT0gKDAgPDwgMjApLAorCUxDTV9ERVZfQ1RSTF9IX1BPTF9ISUdICQk9ICgxIDw8IDIwKSwKK307CisKK2VudW0gTENNX0RFVl9DVFJMX1ZfUE9MIHsKKwlMQ01fREVWX0NUUkxfVl9QT0xfTE9XCQk9ICgwIDw8IDIxKSwKKwlMQ01fREVWX0NUUkxfVl9QT0xfSElHSAkJPSAoMSA8PCAyMSksCit9OworCitlbnVtIExDTV9ERVZfQ1RSTF9WUl9MQUNFIHsKKwlMQ01fREVWX0NUUkxfVlJfTEFDRV9OSU5URVJMQUNFCT0gKDAgPDwgMjIpLAorCUxDTV9ERVZfQ1RSTF9WUl9MQUNFX0lOVEVSTEFDRQk9ICgxIDw8IDIyKSwKK307CisKK2VudW0gTENNX0RFVl9DVFJMX0xBQ0UgeworCUxDTV9ERVZfQ1RSTF9MQUNFX05JTlRFUkxBQ0UJPSAoMCA8PCAyMyksCisJTENNX0RFVl9DVFJMX0xBQ0VfSU5URVJMQUNFCT0gKDEgPDwgMjMpLAorfTsKKworZW51bSBMQ01fREVWX0NUUkxfUkdCX1NDQUxFIHsKKwlMQ01fREVWX0NUUkxfUkdCX1NDQUxFXzQwOTYgCT0gKDAgPDwgMjQpLAorCUxDTV9ERVZfQ1RSTF9SR0JfU0NBTEVfNjU1MzYgCT0gKDEgPDwgMjQpLAorCUxDTV9ERVZfQ1RSTF9SR0JfU0NBTEVfMjYyMTQ0IAk9ICgyIDw8IDI0KSwKKwlMQ01fREVWX0NUUkxfUkdCX1NDQUxFXzE2Nzc3MjE2ID0gKDMgPDwgMjQpLAorfTsKKworZW51bSBMQ01fREVWX0NUUkxfREJXT1JEIHsKKwlMQ01fREVWX0NUUkxfREJXT1JEX0hBTEZXT1JECT0gKDAgPDwgMjYpLAorCUxDTV9ERVZfQ1RSTF9EQldPUkRfRlVMTFdPUkQJPSAoMSA8PCAyNiksCit9OworCitlbnVtIExDTV9ERVZfQ1RSTF9NUFU2OCB7CisJTENNX0RFVl9DVFJMX01QVTY4XzgwX1NFUklFUwk9ICgwIDw8IDI3KSwKKwlMQ01fREVWX0NUUkxfTVBVNjhfNjhfU0VSSUVTCT0gKDEgPDwgMjcpLAorfTsKKworZW51bSBMQ01fREVWX0NUUkxfREVfUE9MIHsKKwlMQ01fREVWX0NUUkxfREVfUE9MX0hJR0gJPSAoMCA8PCAyOCksCisJTENNX0RFVl9DVFJMX0RFX1BPTF9MT1cJCT0gKDEgPDwgMjgpLAorfTsKKworI2RlZmluZSBMQ01fREVWX0NUUkxfQ01EMTYJCSgyOSkKKyNkZWZpbmUgTENNX0RFVl9DVFJMX0NNMTZ0MTgJCSgzMCkKKyNkZWZpbmUgTENNX0RFVl9DVFJMX0NNRF9MT1cJCSgzMSkKKworLyogTVBVLUludGVyZmFjZSBMQ0QgV3JpdGUgQ29tbWFuZCAqLworI2RlZmluZSBSRUdfTENNX01QVV9DTUQJCQkoMHgwOCkKKworLyogSW50ZXJydXB0IENvbnRyb2wvU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19MQ01fSU5UX0NTCQkJKDB4MGMpCisjZGVmaW5lIExDTV9JTlRfQ1NfRElTUF9GX0VOCQkoMSA8PCAwKQorI2RlZmluZSBMQ01fSU5UX0NTX1VOREVSUlVOX0VOICAgCSgxIDw8IDEpCisjZGVmaW5lIExDTV9JTlRfQ1NfQlVTX0VSUk9SX0lOVCAJKDEgPDwgMjgpCisjZGVmaW5lIExDTV9JTlRfQ1NfVU5ERVJSVU5fSU5UICAJKDEgPDwgMjkpCisjZGVmaW5lIExDTV9JTlRfQ1NfRElTUF9GX1NUQVRVUyAJKDEgPDwgMzApCisjZGVmaW5lIExDTV9JTlRfQ1NfRElTUF9GX0lOVAkJKDEgPDwgMzEpCisKKy8qIENSVEMgRGlzcGxheSBTaXplIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX0xDTV9DUlRDX1NJWkUJCSgweDEwKQorI2RlZmluZSBMQ01fQ1JUQ19TSVpFX1ZUVFZBTCh4KQkJKCh4KSA8PCAxNikKKyNkZWZpbmUgTENNX0NSVENfU0laRV9IVFRWQUwoeCkJCSgoeCkgPDwgMCkKKworLyogQ1JUQyBEaXNwbGF5IEVuYWJsZSBFbmQgKi8KKyNkZWZpbmUgUkVHX0xDTV9DUlRDX0RFTkQJCSgweDE0KQorI2RlZmluZSBMQ01fQ1JUQ19ERU5EX1ZERU5EVkFMKHgpCSgoeCkgPDwgMTYpCisjZGVmaW5lIExDTV9DUlRDX0RFTkRfSERFTkRWQUwoeCkJKCh4KSA8PCAwKQorCisvKiBDUlRDIEludGVybmFsIEhvcml6b250YWwgUmV0cmFjZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19MQ01fQ1JUQ19IUgkJCSgweDE4KQorI2RlZmluZSBMQ01fQ1JUQ19IUl9FVkFMKHgpCQkoKHgpIDw8IDE2KQorI2RlZmluZSBMQ01fQ1JUQ19IUl9TVkFMKHgpCQkoKHgpIDw8IDApCisKKy8qIENSVEMgSG9yaXpvbnRhbCBTeW5jIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX0xDTV9DUlRDX0hTWU5DCQkoMHgxQykKKyNkZWZpbmUgTENNX0NSVENfSFNZTkNfU0hJRlRWQUwoeCkJKCh4KSA8PCAzMCkKKyNkZWZpbmUgTENNX0NSVENfSFNZTkNfRVZBTCh4KQkJKCh4KSA8PCAxNikKKyNkZWZpbmUgTENNX0NSVENfSFNZTkNfU1ZBTCh4KQkJKCh4KSA8PCAwKQorCisvKiBDUlRDIEludGVybmFsIFZlcnRpY2FsIFJldHJhY2UgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfTENNX0NSVENfVlIJCQkoMHgyMCkKKyNkZWZpbmUgTENNX0NSVENfVlJfRVZBTCh4KQkJKCh4KSA8PCAxNikKKyNkZWZpbmUgTENNX0NSVENfVlJfU1ZBTCh4KQkJKCh4KSA8PCAwKQorCisvKiBWaWRlbyBTdHJlYW0gRnJhbWUgQnVmZmVyLTAgU3RhcnRpbmcgQWRkcmVzcyAqLworI2RlZmluZSBSRUdfTENNX1ZBX0JBRERSMAkJKDB4MjQpCisKKy8qIFZpZGVvIFN0cmVhbSBGcmFtZSBCdWZmZXItMSBTdGFydGluZyBBZGRyZXNzICovCisjZGVmaW5lIFJFR19MQ01fVkFfQkFERFIxCQkoMHgyOCkKKworLyogVmlkZW8gU3RyZWFtIEZyYW1lIEJ1ZmZlciBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19MQ01fVkFfRkJDVFJMCQkoMHgyQykKKyNkZWZpbmUgTENNX1ZBX0ZCQ1RSTF9JT19SRUdJT05fSEFMRgkoMSA8PCAyOCkKKyNkZWZpbmUgTENNX1ZBX0ZCQ1RSTF9GSUVMRF9EVUFMICAJKDEgPDwgMjkpCisjZGVmaW5lIExDTV9WQV9GQkNUUkxfU1RBUlRfQlVGIAkoMSA8PCAzMCkKKyNkZWZpbmUgTENNX1ZBX0ZCQ1RSTF9EQl9FTgkJKDEgPDwgMzEpCisKKy8qIFZpZGVvIFN0cmVhbSBTY2FsaW5nIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX0xDTV9WQV9TQ0FMRQkJKDB4MzApCisjZGVmaW5lIExDTV9WQV9TQ0FMRV9YQ09QWV9JTlRFUlBPTEFUSU9OICgwIDw8IDE1KQorI2RlZmluZSBMQ01fVkFfU0NBTEVfWENPUFlfRFVQTElDQVRJT04JICgxIDw8IDE1KQorCisvKiBJbWFnZSBTdHJlYW0gQWN0aXZlIFdpbmRvdyBDb29yZGluYXRlcyAqLworI2RlZmluZSBSRUdfTENNX1ZBX1dJTgkJCSgweDM4KQorCisvKiBJbWFnZSBTdHJlYW0gU3R1ZmYgUGl4ZWwgKi8KKyNkZWZpbmUgUkVHX0xDTV9WQV9TVFVGRgkJKDB4M0MpCisKKy8qIE9TRCBXaW5kb3cgU3RhcnRpbmcgQ29vcmRpbmF0ZXMgKi8KKyNkZWZpbmUgUkVHX0xDTV9PU0RfV0lOUwkJKDB4NDApCisKKy8qIE9TRCBXaW5kb3cgRW5kaW5nIENvb3JkaW5hdGVzICovCisjZGVmaW5lIFJFR19MQ01fT1NEX1dJTkUJCSgweDQ0KQorCisvKiBPU0QgU3RyZWFtIEZyYW1lIEJ1ZmZlciBTdGFydGluZyBBZGRyZXNzICovCisjZGVmaW5lIFJFR19MQ01fT1NEX0JBRERSCQkoMHg0OCkKKworLyogT1NEIFN0cmVhbSBGcmFtZSBCdWZmZXIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfTENNX09TRF9GQkNUUkwJCSgweDRjKQorCisvKiBPU0QgT3ZlcmxheSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19MQ01fT1NEX09WRVJMQVkJCSgweDUwKQorCisvKiBPU0QgT3ZlcmxheSBDb2xvci1LZXkgUGF0dGVybiBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfTENNX09TRF9DS0VZCQkoMHg1NCkKKworLyogT1NEIE92ZXJsYXkgQ29sb3ItS2V5IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX0xDTV9PU0RfQ01BU0sJCSgweDU4KQorCisvKiBPU0QgV2luZG93IFNraXAxIFJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19MQ01fT1NEX1NLSVAxCQkoMHg1QykKKworLyogT1NEIFdpbmRvdyBTa2lwMiBSZWdpc3RlciAqLworI2RlZmluZSBSRUdfTENNX09TRF9TS0lQMgkJKDB4NjApCisKKy8qIE9TRCBob3Jpem9udGFsIHVwIHNjYWxpbmcgY29udHJvbCByZWdpc3RlciAqLworI2RlZmluZSBSRUdfTENNX09TRF9TQ0FMRQkJKDB4NjQpCisKKy8qIE1QVSBWc3luYyBjb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFJFR19MQ01fTVBVX1ZTWU5DCQkoMHg2OCkKKworLyogSGFyZHdhcmUgY3Vyc29yIGNvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX0xDTV9IQ19DVFJMCQkJKDB4NkMpCisKKy8qIEhhcmR3YXJlIGN1cnNvdCB0aXAgcG9pbnQgcG90aXNvbiBvbiB2YSBwaWN0dXJlICovCisjZGVmaW5lIFJFR19MQ01fSENfUE9TCQkJKDB4NzApCisKKy8qIEhhcmR3YXJlIEN1cnNvciBXaW5kb3cgQnVmZmVyIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUkVHX0xDTV9IQ19XQkNUUkwJCSgweDc0KQorCisvKiBIYXJkd2FyZSBjdXJzb3IgbWVtb3J5IGJhc2UgYWRkcmVzcyByZWdpc3RlciAqLworI2RlZmluZSBSRUdfTENNX0hDX0JBRERSCQkoMHg3OCkKKworLyogSGFyZHdhcmUgY3Vyc29yIGNvbG9yIHJhbSByZWdpc3RlciBtYXBwZWQgdG8gYnBwID0gMCAqLworI2RlZmluZSBSRUdfTENNX0hDX0NPTE9SMAkJKDB4N0MpCisKKy8qIEhhcmR3YXJlIGN1cnNvciBjb2xvciByYW0gcmVnaXN0ZXIgbWFwcGVkIHRvIGJwcCA9IDEgKi8KKyNkZWZpbmUgUkVHX0xDTV9IQ19DT0xPUjEJCSgweDgwKQorCisvKiBIYXJkd2FyZSBjdXJzb3IgY29sb3IgcmFtIHJlZ2lzdGVyIG1hcHBlZCB0byBicHAgPSAyICovCisjZGVmaW5lIFJFR19MQ01fSENfQ09MT1IyCQkoMHg4NCkKKworLyogSGFyZHdhcmUgY3Vyc29yIGNvbG9yIHJhbSByZWdpc3RlciBtYXBwZWQgdG8gYnBwID0gMyAqLworI2RlZmluZSBSRUdfTENNX0hDX0NPTE9SMwkJKDB4ODgpCisKKyNlbmRpZiAvKiBfX0FTTV9BUk1fVzkwWDkwMF9SRUdTX0xETV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbWFjaC1udWM5NTBldmIuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLW51Yzk1MGV2Yi5jCmluZGV4IGNlZjkwM2IuLmIzZWRjM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLW51Yzk1MGV2Yi5jCisrKyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9tYWNoLW51Yzk1MGV2Yi5jCkBAIC0xMCw2ICsxMCw4IEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICogICBoaXN0b3J5OgorICogICAgIFdhbmcgUWlhbmcgKHJ1cmFsaXR5LmxpbnV4QGdtYWlsLmNvbSkgYWRkIExDRCBzdXBwb3J0CiAgKgogICovCiAKQEAgLTE4LDkgKzIwLDUxIEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KICNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1sZG0uaD4KKyNpbmNsdWRlIDxtYWNoL2ZiLmg+CiAKICNpbmNsdWRlICJudWM5NTAuaCIKIAorI2lmZGVmIENPTkZJR19GQl9OVUM5MDAKKy8qIExDRCBDb250cm9sbGVyICovCitzdGF0aWMgc3RydWN0IG51YzkwMGZiX2Rpc3BsYXkgX19pbml0ZGF0YSBudWM5NTBfbGNkX2luZm9bXSA9IHsKKwkvKiBHaWFudHBsdXMgVGVjaG5vbG9neSBHUE0xMDQwQTAgMzIweDI0MCBDb2xvciBURlQgTENEICovCisJWzBdID0geworCQkudHlwZQkJPSBMQ01fRENDU19WQV9TUkNfUkdCNTY1LAorCQkud2lkdGggCQk9IDMyMCwKKwkJLmhlaWdodAkJPSAyNDAsCisJCS54cmVzCQk9IDMyMCwKKwkJLnlyZXMJCT0gMjQwLAorCQkuYnBwCQk9IDE2LAorCQkucGl4Y2xvY2sJPSAyMDAwMDAsCisJCS5sZWZ0X21hcmdpbgk9IDM0LAorCQkucmlnaHRfbWFyZ2luICAgPSA1NCwKKwkJLmhzeW5jX2xlbgk9IDEwLAorCQkudXBwZXJfbWFyZ2luCT0gMTgsCisJCS5sb3dlcl9tYXJnaW4JPSA0LAorCQkudnN5bmNfbGVuCT0gMSwKKwkJLmRjY3MJCT0gMHg4ZTAwMDQxYSwKKwkJLmRldmN0bAkJPSAweDA2MDgwMGMwLAorCQkuZmJjdHJsCQk9IDB4MDBhMDAwYTAsCisJCS5zY2FsZQkJPSAweDA0MDAwNDAwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG51YzkwMGZiX21hY2hfaW5mbyBudWM5NTBfZmJfaW5mbyBfX2luaXRkYXRhID0geworI2lmIGRlZmluZWQoQ09ORklHX0dQTTEwNDBBMF8zMjBYMjQwKQorCS5kaXNwbGF5cwkJPSAmbnVjOTUwX2xjZF9pbmZvWzBdLAorI2Vsc2UKKwkuZGlzcGxheXMJCT0gbnVjOTUwX2xjZF9pbmZvLAorI2VuZGlmCisJLm51bV9kaXNwbGF5cyAJCT0gQVJSQVlfU0laRShudWM5NTBfbGNkX2luZm8pLAorCS5kZWZhdWx0X2Rpc3BsYXkJPSAwLAorCS5ncGlvX2RpcgkJPSAweDAwMDAwMDA0LAorCS5ncGlvX2Rpcl9tYXNrCQk9IDB4RkZGRkZGRkQsCisJLmdwaW9fZGF0YQkJPSAweDAwMDAwMDA0LAorCS5ncGlvX2RhdGFfbWFzawkJPSAweEZGRkZGRkZELAorfTsKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2luaXQgbnVjOTUwZXZiX21hcF9pbyh2b2lkKQogewogCW51Yzk1MF9tYXBfaW8oKTsKQEAgLTMwLDYgKzc0LDkgQEAKIHN0YXRpYyB2b2lkIF9faW5pdCBudWM5NTBldmJfaW5pdCh2b2lkKQogewogCW51Yzk1MF9ib2FyZF9pbml0KCk7CisjaWZkZWYgQ09ORklHX0ZCX05VQzkwMAorCW51YzkwMF9mYl9zZXRfcGxhdGRhdGEoJm51Yzk1MF9mYl9pbmZvKTsKKyNlbmRpZgogfQogCiBNQUNISU5FX1NUQVJUKFc5MFA5NTBFVkIsICJXOTBQOTUwRVZCIikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5NTAuYyBiL2FyY2gvYXJtL21hY2gtdzkweDkwMC9udWM5NTAuYwppbmRleCAxNDk1MDgxLi40ZDFmMWFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXc5MHg5MDAvbnVjOTUwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC13OTB4OTAwL251Yzk1MC5jCkBAIC0xOCw2ICsxOCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCiAjaW5jbHVkZSAiY3B1LmgiCiAKIC8qIGRlZmluZSBzcGVjaWZpYyBDUFUgcGxhdGZvcm0gZGV2aWNlICovCkBAIC0yNSw2ICsyNiw5IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbnVjOTUwX2RldltdIF9faW5pdGRhdGEgPSB7CiAJJm51YzkwMF9kZXZpY2Vfa3BpLAogCSZudWM5MDBfZGV2aWNlX2ZtaSwKKyNpZmRlZiBDT05GSUdfRkJfTlVDOTAwCisJJm51YzkwMF9kZXZpY2VfbGNkLAorI2VuZGlmCiB9OwogCiAvKiBkZWZpbmUgc3BlY2lmaWMgQ1BVIHBsYXRmb3JtIGlvIG1hcCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvS2NvbmZpZyBiL2FyY2gvYXJtL3BsYXQtbXhjL0tjb25maWcKaW5kZXggOGIwYTFlZS4uN2Y3YWQ2ZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9LY29uZmlnCkBAIC05LDM4ICs5LDQzIEBACiBjb25maWcgQVJDSF9NWDEKIAlib29sICJNWDEtYmFzZWQiCiAJc2VsZWN0IENQVV9BUk05MjBUCi0Jc2VsZWN0IENPTU1PTl9DTEtERVYKKwlzZWxlY3QgSU1YX0hBVkVfSU9NVVhfVjEKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiB0aGUgRnJlZXNjYWxlIGkuTVgxIGZhbWlseQogCiBjb25maWcgQVJDSF9NWDIKIAlib29sICJNWDItYmFzZWQiCiAJc2VsZWN0IENQVV9BUk05MjZUCi0Jc2VsZWN0IENPTU1PTl9DTEtERVYKKwlzZWxlY3QgSU1YX0hBVkVfSU9NVVhfVjEKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiB0aGUgRnJlZXNjYWxlIGkuTVgyIGZhbWlseQogCiBjb25maWcgQVJDSF9NWDI1CiAJYm9vbCAiTVgyNS1iYXNlZCIKIAlzZWxlY3QgQ1BVX0FSTTkyNlQKLQlzZWxlY3QgQ09NTU9OX0NMS0RFVgorCXNlbGVjdCBBUkNIX01YQ19JT01VWF9WMworCXNlbGVjdCBIQVZFX0ZCX0lNWAogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIHRoZSBGcmVlc2NhbGUgaS5NWDI1IGZhbWlseQogCiBjb25maWcgQVJDSF9NWDMKIAlib29sICJNWDMtYmFzZWQiCiAJc2VsZWN0IENQVV9WNgotCXNlbGVjdCBDT01NT05fQ0xLREVWCiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHN1cHBvcnQgZm9yIHN5c3RlbXMgYmFzZWQgb24gdGhlIEZyZWVzY2FsZSBpLk1YMyBmYW1pbHkKIAogY29uZmlnIEFSQ0hfTVhDOTEyMzEKIAlib29sICJNWEM5MTIzMS1iYXNlZCIKIAlzZWxlY3QgQ1BVX1Y2Ci0Jc2VsZWN0IENPTU1PTl9DTEtERVYKIAloZWxwCiAJICBUaGlzIGVuYWJsZXMgc3VwcG9ydCBmb3Igc3lzdGVtcyBiYXNlZCBvbiB0aGUgRnJlZXNjYWxlIE1YQzkxMjMxIGZhbWlseQogCitjb25maWcgQVJDSF9NWDUKKwlib29sICJNWDUtYmFzZWQiCisJc2VsZWN0IENQVV9WNworCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIGJhc2VkIG9uIHRoZSBGcmVlc2NhbGUgaS5NWDUxIGZhbWlseQorCiBlbmRjaG9pY2UKIAogc291cmNlICJhcmNoL2FybS9tYWNoLW14MS9LY29uZmlnIgpAQCAtNDgsMTIgKzUzLDEyIEBACiBzb3VyY2UgImFyY2gvYXJtL21hY2gtbXgzL0tjb25maWciCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtbXgyNS9LY29uZmlnIgogc291cmNlICJhcmNoL2FybS9tYWNoLW14YzkxMjMxL0tjb25maWciCitzb3VyY2UgImFyY2gvYXJtL21hY2gtbXg1L0tjb25maWciCiAKIGVuZG1lbnUKIAogY29uZmlnIE1YQ19JUlFfUFJJT1IKIAlib29sICJVc2UgSVJRIHByaW9yaXR5IgotCWRlcGVuZHMgb24gQVJDSF9NWEMKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBpZiB5b3Ugd2FudCB0byB1c2UgcHJpb3JpdGl6ZWQgSVJRIGhhbmRsaW5nLgogCSAgVGhpcyBmZWF0dXJlIHByZXZlbnRzIGhpZ2hlciBwcmlvcml0eSBJU1IgdG8gYmUgaW50ZXJydXB0ZWQKQEAgLTYyLDkgKzY3LDE2IEBACiAJICByZXF1aXJlbWVudHMgZm9yIHRpbWluZy4KIAkgIFNheSBOIGhlcmUsIHVubGVzcyB5b3UgaGF2ZSBhIHNwZWNpYWxpemVkIHJlcXVpcmVtZW50LgogCitjb25maWcgTVhDX1RaSUMKKwlib29sICJFbmFibGUgVHJ1c3Rab25lIEludGVycnVwdCBDb250cm9sbGVyIgorCWRlcGVuZHMgb24gQVJDSF9NWDUxCisJaGVscAorCSAgVGhpcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgZm9yIGFsbCBwcm9jZXNzb3JzCisJICBjb250YWluaW5nIHRoaXMgaW50ZXJydXB0IGNvbnRyb2xsZXIuCisJICBTYXkgTiBoZXJlIG9ubHkgaWYgeW91IGFyZSByZWFsbHkgc3VyZS4KKwogY29uZmlnIE1YQ19QV00KIAl0cmlzdGF0ZSAiRW5hYmxlIFBXTSBkcml2ZXIiCi0JZGVwZW5kcyBvbiBBUkNIX01YQwogCXNlbGVjdCBIQVZFX1BXTQogCWhlbHAKIAkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgaS5NWCBQV00gY29udHJvbGxlcihzKS4KQEAgLTc0LDcgKzg2LDkgQEAKIAogY29uZmlnIEFSQ0hfSEFTX1JOR0EKIAlib29sCi0JZGVwZW5kcyBvbiBBUkNIX01YQworCitjb25maWcgSU1YX0hBVkVfSU9NVVhfVjEKKwlib29sCiAKIGNvbmZpZyBBUkNIX01YQ19JT01VWF9WMwogCWJvb2wKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1teGMvTWFrZWZpbGUKaW5kZXggNmNlZTM4ZC4uODk1YmMzYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvTWFrZWZpbGUKQEAgLTUsOCArNSwxMiBAQAogIyBDb21tb24gc3VwcG9ydAogb2JqLXkgOj0gaXJxLm8gY2xvY2subyBncGlvLm8gdGltZS5vIGRldmljZXMubyBjcHUubyBzeXN0ZW0ubwogCi1vYmotJChDT05GSUdfQVJDSF9NWDEpICs9IGlvbXV4LW14MS1teDIubyBkbWEtbXgxLW14Mi5vCi1vYmotJChDT05GSUdfQVJDSF9NWDIpICs9IGlvbXV4LW14MS1teDIubyBkbWEtbXgxLW14Mi5vCisjIE1YNTEgdXNlcyB0aGUgVFpJQyBpbnRlcnJ1cHQgY29udHJvbGxlciwgb2xkZXIgcGxhdGZvcm1zIHVzZSBBVklDIChpcnEubykKK29iai0kKENPTkZJR19NWENfVFpJQykgKz0gdHppYy5vCisKK29iai0kKENPTkZJR19BUkNIX01YMSkgKz0gZG1hLW14MS1teDIubworb2JqLSQoQ09ORklHX0FSQ0hfTVgyKSArPSBkbWEtbXgxLW14Mi5vCitvYmotJChDT05GSUdfSU1YX0hBVkVfSU9NVVhfVjEpICs9IGlvbXV4LXYxLm8KIG9iai0kKENPTkZJR19BUkNIX01YQ19JT01VWF9WMykgKz0gaW9tdXgtdjMubwogb2JqLSQoQ09ORklHX01YQ19QV00pICArPSBwd20ubwogb2JqLSQoQ09ORklHX1VTQl9FSENJX01YQykgKz0gZWhjaS5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9hdWRtdXgtdjEuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2F1ZG11eC12MS5jCmluZGV4IGRhNjM4N2QuLmI2MjkxN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2F1ZG11eC12MS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2F1ZG11eC12MS5jCkBAIC01MCw4ICs1MCwxOCBAQAogCiBzdGF0aWMgaW50IG14Y19hdWRtdXhfdjFfaW5pdCh2b2lkKQogewotCWlmIChjcHVfaXNfbXgyNygpIHx8IGNwdV9pc19teDIxKCkpCi0JCWF1ZG11eF9iYXNlID0gSU9fQUREUkVTUyhBVURNVVhfQkFTRV9BRERSKTsKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDIxCisJaWYgKGNwdV9pc19teDIxKCkpCisJCWF1ZG11eF9iYXNlID0gTVgyMV9JT19BRERSRVNTKE1YMjFfQVVETVVYX0JBU0VfQUREUik7CisJZWxzZQorI2VuZGlmCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNworCWlmIChjcHVfaXNfbXgyNygpKQorCQlhdWRtdXhfYmFzZSA9IE1YMjdfSU9fQUREUkVTUyhNWDI3X0FVRE1VWF9CQVNFX0FERFIpOworCWVsc2UKKyNlbmRpZgorCQkodm9pZCkwOworCQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9hdWRtdXgtdjIuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2F1ZG11eC12Mi5jCmluZGV4IGIwNjk1NGEuLmQ5ODNjZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2F1ZG11eC12Mi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2F1ZG11eC12Mi5jCkBAIC0xOTAsNyArMTkwLDEwIEBACiB7CiAJaW50IHJldDsKIAotCWlmIChjcHVfaXNfbXgzNSgpKSB7CisJaWYgKGNwdV9pc19teDMxKCkpCisJCWF1ZG11eF9iYXNlID0gTVgzMV9JT19BRERSRVNTKE1YMzFfQVVETVVYX0JBU0VfQUREUik7CisKKwllbHNlIGlmIChjcHVfaXNfbXgzNSgpKSB7CiAJCWF1ZG11eF9jbGsgPSBjbGtfZ2V0KE5VTEwsICJhdWRtdXgiKTsKIAkJaWYgKElTX0VSUihhdWRtdXhfY2xrKSkgewogCQkJcmV0ID0gUFRSX0VSUihhdWRtdXhfY2xrKTsKQEAgLTE5OCwxMSArMjAxLDkgQEAKIAkJCQkJcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KKwkJYXVkbXV4X2Jhc2UgPSBNWDM1X0lPX0FERFJFU1MoTVgzNV9BVURNVVhfQkFTRV9BRERSKTsKIAl9CiAKLQlpZiAoY3B1X2lzX214MzEoKSB8fCBjcHVfaXNfbXgzNSgpKQotCQlhdWRtdXhfYmFzZSA9IElPX0FERFJFU1MoQVVETVVYX0JBU0VfQUREUik7Ci0KIAlhdWRtdXhfZGVidWdmc19pbml0KCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9jbG9jay5jCmluZGV4IDllOGZiZDUuLjMyM2ZmOGMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvY2xvY2suYwpAQCAtNTYsNiArNTYsNyBAQAogCV9fY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOwogCV9fY2xrX2Rpc2FibGUoY2xrLT5zZWNvbmRhcnkpOwogCisJV0FSTl9PTighY2xrLT51c2Vjb3VudCk7CiAJaWYgKCEoLS1jbGstPnVzZWNvdW50KSAmJiBjbGstPmRpc2FibGUpCiAJCWNsay0+ZGlzYWJsZShjbGspOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvZG1hLW14MS1teDIuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2RtYS1teDEtbXgyLmMKaW5kZXggOWMxYjNmOS4uZTE2MDE0YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvZG1hLW14MS1teDIuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9kbWEtbXgxLW14Mi5jCkBAIC0xMjgsNiArMTI4LDE4IEBACiAJaW50IGh3X2NoYWluaW5nOwogfTsKIAorc3RhdGljIHZvaWQgX19pb21lbSAqaW14X2RtYXYxX2Jhc2VhZGRyOworCitzdGF0aWMgdm9pZCBpbXhfZG1hdjFfd3JpdGVsKHVuc2lnbmVkIHZhbCwgdW5zaWduZWQgb2Zmc2V0KQoreworCV9fcmF3X3dyaXRlbCh2YWwsIGlteF9kbWF2MV9iYXNlYWRkciArIG9mZnNldCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbXhfZG1hdjFfcmVhZGwodW5zaWduZWQgb2Zmc2V0KQoreworCXJldHVybiBfX3Jhd19yZWFkbChpbXhfZG1hdjFfYmFzZWFkZHIgKyBvZmZzZXQpOworfQorCiBzdGF0aWMgc3RydWN0IGlteF9kbWFfY2hhbm5lbCBpbXhfZG1hX2NoYW5uZWxzW0lNWF9ETUFfQ0hBTk5FTFNdOwogCiBzdGF0aWMgc3RydWN0IGNsayAqZG1hX2NsazsKQEAgLTE0MCw3ICsxNTIsNiBAQAogCQlyZXR1cm4gMDsKIH0KIAotCiAvKgogICogaW14X2RtYV9zZ19uZXh0IC0gcHJlcGFyZSBuZXh0IGNodW5rIGZvciBzY2F0dGVyLWdhdGhlciBETUEgZW11bGF0aW9uCiAgKi8KQEAgLTE2MCwxNyArMTcxLDE3IEBACiAJCWlteGRtYS0+cmVzYnl0ZXMgLT0gbm93OwogCiAJaWYgKChpbXhkbWEtPmRtYV9tb2RlICYgRE1BX01PREVfTUFTSykgPT0gRE1BX01PREVfUkVBRCkKLQkJX19yYXdfd3JpdGVsKHNnLT5kbWFfYWRkcmVzcywgRE1BX0JBU0UgKyBETUFfREFSKGNoYW5uZWwpKTsKKwkJaW14X2RtYXYxX3dyaXRlbChzZy0+ZG1hX2FkZHJlc3MsIERNQV9EQVIoY2hhbm5lbCkpOwogCWVsc2UKLQkJX19yYXdfd3JpdGVsKHNnLT5kbWFfYWRkcmVzcywgRE1BX0JBU0UgKyBETUFfU0FSKGNoYW5uZWwpKTsKKwkJaW14X2RtYXYxX3dyaXRlbChzZy0+ZG1hX2FkZHJlc3MsIERNQV9TQVIoY2hhbm5lbCkpOwogCi0JX19yYXdfd3JpdGVsKG5vdywgRE1BX0JBU0UgKyBETUFfQ05UUihjaGFubmVsKSk7CisJaW14X2RtYXYxX3dyaXRlbChub3csIERNQV9DTlRSKGNoYW5uZWwpKTsKIAogCXByX2RlYnVnKCJpbXhkbWElZDogbmV4dCBzZyBjaHVuayBkc3QgMHglMDh4LCBzcmMgMHglMDh4LCAiCiAJCSJzaXplIDB4JTA4eFxuIiwgY2hhbm5lbCwKLQkJIF9fcmF3X3JlYWRsKERNQV9CQVNFICsgRE1BX0RBUihjaGFubmVsKSksCi0JCSBfX3Jhd19yZWFkbChETUFfQkFTRSArIERNQV9TQVIoY2hhbm5lbCkpLAotCQkgX19yYXdfcmVhZGwoRE1BX0JBU0UgKyBETUFfQ05UUihjaGFubmVsKSkpOworCQkgaW14X2RtYXYxX3JlYWRsKERNQV9EQVIoY2hhbm5lbCkpLAorCQkgaW14X2RtYXYxX3JlYWRsKERNQV9TQVIoY2hhbm5lbCkpLAorCQkgaW14X2RtYXYxX3JlYWRsKERNQV9DTlRSKGNoYW5uZWwpKSk7CiAKIAlyZXR1cm4gbm93OwogfQpAQCAtMjE4LDI3ICsyMjksMjYgQEAKIAkJCWNoYW5uZWwsIF9fZnVuY19fLCAodW5zaWduZWQgaW50KWRtYV9hZGRyZXNzLAogCQkJZG1hX2xlbmd0aCwgZGV2X2FkZHIpOwogCi0JCV9fcmF3X3dyaXRlbChkZXZfYWRkciwgRE1BX0JBU0UgKyBETUFfU0FSKGNoYW5uZWwpKTsKLQkJX19yYXdfd3JpdGVsKGRtYV9hZGRyZXNzLCBETUFfQkFTRSArIERNQV9EQVIoY2hhbm5lbCkpOwotCQlfX3Jhd193cml0ZWwoaW14ZG1hLT5jY3JfZnJvbV9kZXZpY2UsCi0JCQkJRE1BX0JBU0UgKyBETUFfQ0NSKGNoYW5uZWwpKTsKKwkJaW14X2RtYXYxX3dyaXRlbChkZXZfYWRkciwgRE1BX1NBUihjaGFubmVsKSk7CisJCWlteF9kbWF2MV93cml0ZWwoZG1hX2FkZHJlc3MsIERNQV9EQVIoY2hhbm5lbCkpOworCQlpbXhfZG1hdjFfd3JpdGVsKGlteGRtYS0+Y2NyX2Zyb21fZGV2aWNlLCBETUFfQ0NSKGNoYW5uZWwpKTsKIAl9IGVsc2UgaWYgKChkbWFtb2RlICYgRE1BX01PREVfTUFTSykgPT0gRE1BX01PREVfV1JJVEUpIHsKIAkJcHJfZGVidWcoImlteGRtYSVkOiAlcyBkbWFfYWRkcmVzc2c9MHglMDh4IGRtYV9sZW5ndGg9JWQgIgogCQkJImRldl9hZGRyPTB4JTA4eCBmb3Igd3JpdGVcbiIsCiAJCQljaGFubmVsLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGludClkbWFfYWRkcmVzcywKIAkJCWRtYV9sZW5ndGgsIGRldl9hZGRyKTsKIAotCQlfX3Jhd193cml0ZWwoZG1hX2FkZHJlc3MsIERNQV9CQVNFICsgRE1BX1NBUihjaGFubmVsKSk7Ci0JCV9fcmF3X3dyaXRlbChkZXZfYWRkciwgRE1BX0JBU0UgKyBETUFfREFSKGNoYW5uZWwpKTsKLQkJX19yYXdfd3JpdGVsKGlteGRtYS0+Y2NyX3RvX2RldmljZSwKLQkJCQlETUFfQkFTRSArIERNQV9DQ1IoY2hhbm5lbCkpOworCQlpbXhfZG1hdjFfd3JpdGVsKGRtYV9hZGRyZXNzLCBETUFfU0FSKGNoYW5uZWwpKTsKKwkJaW14X2RtYXYxX3dyaXRlbChkZXZfYWRkciwgRE1BX0RBUihjaGFubmVsKSk7CisJCWlteF9kbWF2MV93cml0ZWwoaW14ZG1hLT5jY3JfdG9fZGV2aWNlLAorCQkJCURNQV9DQ1IoY2hhbm5lbCkpOwogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaW14ZG1hJWQ6IGlteF9kbWFfc2V0dXBfc2luZ2xlIGJhZCBkbWFtb2RlXG4iLAogCQkgICAgICAgY2hhbm5lbCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCV9fcmF3X3dyaXRlbChkbWFfbGVuZ3RoLCBETUFfQkFTRSArIERNQV9DTlRSKGNoYW5uZWwpKTsKKwlpbXhfZG1hdjFfd3JpdGVsKGRtYV9sZW5ndGgsIERNQV9DTlRSKGNoYW5uZWwpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzE2LDE3ICszMjYsMTUgQEAKIAkJCSJkZXZfYWRkcj0weCUwOHggZm9yIHJlYWRcbiIsCiAJCQljaGFubmVsLCBfX2Z1bmNfXywgc2csIHNnY291bnQsIGRtYV9sZW5ndGgsIGRldl9hZGRyKTsKIAotCQlfX3Jhd193cml0ZWwoZGV2X2FkZHIsIERNQV9CQVNFICsgRE1BX1NBUihjaGFubmVsKSk7Ci0JCV9fcmF3X3dyaXRlbChpbXhkbWEtPmNjcl9mcm9tX2RldmljZSwKLQkJCQlETUFfQkFTRSArIERNQV9DQ1IoY2hhbm5lbCkpOworCQlpbXhfZG1hdjFfd3JpdGVsKGRldl9hZGRyLCBETUFfU0FSKGNoYW5uZWwpKTsKKwkJaW14X2RtYXYxX3dyaXRlbChpbXhkbWEtPmNjcl9mcm9tX2RldmljZSwgRE1BX0NDUihjaGFubmVsKSk7CiAJfSBlbHNlIGlmICgoZG1hbW9kZSAmIERNQV9NT0RFX01BU0spID09IERNQV9NT0RFX1dSSVRFKSB7CiAJCXByX2RlYnVnKCJpbXhkbWElZDogJXMgc2c9JXAgc2djb3VudD0lZCB0b3RhbCBsZW5ndGg9JWQgIgogCQkJImRldl9hZGRyPTB4JTA4eCBmb3Igd3JpdGVcbiIsCiAJCQljaGFubmVsLCBfX2Z1bmNfXywgc2csIHNnY291bnQsIGRtYV9sZW5ndGgsIGRldl9hZGRyKTsKIAotCQlfX3Jhd193cml0ZWwoZGV2X2FkZHIsIERNQV9CQVNFICsgRE1BX0RBUihjaGFubmVsKSk7Ci0JCV9fcmF3X3dyaXRlbChpbXhkbWEtPmNjcl90b19kZXZpY2UsCi0JCQkJRE1BX0JBU0UgKyBETUFfQ0NSKGNoYW5uZWwpKTsKKwkJaW14X2RtYXYxX3dyaXRlbChkZXZfYWRkciwgRE1BX0RBUihjaGFubmVsKSk7CisJCWlteF9kbWF2MV93cml0ZWwoaW14ZG1hLT5jY3JfdG9fZGV2aWNlLCBETUFfQ0NSKGNoYW5uZWwpKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgImlteGRtYSVkOiBpbXhfZG1hX3NldHVwX3NnIGJhZCBkbWFtb2RlXG4iLAogCQkgICAgICAgY2hhbm5lbCk7CkBAIC0zNjAsNyArMzY4LDcgQEAKIAlpbXhkbWEtPmNjcl9mcm9tX2RldmljZSA9IGNvbmZpZ19wb3J0IHwgKGNvbmZpZ19tZW0gPDwgMikgfCBkcmVxOwogCWlteGRtYS0+Y2NyX3RvX2RldmljZSA9IGNvbmZpZ19tZW0gfCAoY29uZmlnX3BvcnQgPDwgMikgfCBkcmVxOwogCi0JX19yYXdfd3JpdGVsKGRtYXJlcSwgRE1BX0JBU0UgKyBETUFfUlNTUihjaGFubmVsKSk7CisJaW14X2RtYXYxX3dyaXRlbChkbWFyZXEsIERNQV9SU1NSKGNoYW5uZWwpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzY4LDcgKzM3Niw3IEBACiAKIHZvaWQgaW14X2RtYV9jb25maWdfYnVyc3RsZW4oaW50IGNoYW5uZWwsIHVuc2lnbmVkIGludCBidXJzdGxlbikKIHsKLQlfX3Jhd193cml0ZWwoYnVyc3RsZW4sIERNQV9CQVNFICsgRE1BX0JMUihjaGFubmVsKSk7CisJaW14X2RtYXYxX3dyaXRlbChidXJzdGxlbiwgRE1BX0JMUihjaGFubmVsKSk7CiB9CiBFWFBPUlRfU1lNQk9MKGlteF9kbWFfY29uZmlnX2J1cnN0bGVuKTsKIApAQCAtMzk4LDcgKzQwNiw3IEBACiAJfQogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCV9fcmF3X3dyaXRlbCgxIDw8IGNoYW5uZWwsIERNQV9CQVNFICsgRE1BX0RJU1IpOworCWlteF9kbWF2MV93cml0ZWwoMSA8PCBjaGFubmVsLCBETUFfRElTUik7CiAJaW14ZG1hLT5pcnFfaGFuZGxlciA9IGlycV9oYW5kbGVyOwogCWlteGRtYS0+ZXJyX2hhbmRsZXIgPSBlcnJfaGFuZGxlcjsKIAlpbXhkbWEtPmRhdGEgPSBkYXRhOwpAQCAtNDYyLDIyICs0NzAsMjEgQEAKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAotCV9fcmF3X3dyaXRlbCgxIDw8IGNoYW5uZWwsIERNQV9CQVNFICsgRE1BX0RJU1IpOwotCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChETUFfQkFTRSArIERNQV9ESU1SKSAmIH4oMSA8PCBjaGFubmVsKSwKLQkJRE1BX0JBU0UgKyBETUFfRElNUik7Ci0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKERNQV9CQVNFICsgRE1BX0NDUihjaGFubmVsKSkgfCBDQ1JfQ0VOIHwKLQkJQ0NSX0FDUlBULAotCQlETUFfQkFTRSArIERNQV9DQ1IoY2hhbm5lbCkpOworCWlteF9kbWF2MV93cml0ZWwoMSA8PCBjaGFubmVsLCBETUFfRElTUik7CisJaW14X2RtYXYxX3dyaXRlbChpbXhfZG1hdjFfcmVhZGwoRE1BX0RJTVIpICYgfigxIDw8IGNoYW5uZWwpLCBETUFfRElNUik7CisJaW14X2RtYXYxX3dyaXRlbChpbXhfZG1hdjFfcmVhZGwoRE1BX0NDUihjaGFubmVsKSkgfCBDQ1JfQ0VOIHwKKwkJQ0NSX0FDUlBULCBETUFfQ0NSKGNoYW5uZWwpKTsKIAogI2lmZGVmIENPTkZJR19BUkNIX01YMgotCWlmIChpbXhkbWEtPnNnICYmIGlteF9kbWFfaHdfY2hhaW4oaW14ZG1hKSkgeworCWlmICgoY3B1X2lzX214MjEoKSB8fCBjcHVfaXNfbXgyNygpKSAmJgorCQkJaW14ZG1hLT5zZyAmJiBpbXhfZG1hX2h3X2NoYWluKGlteGRtYSkpIHsKIAkJaW14ZG1hLT5zZyA9IHNnX25leHQoaW14ZG1hLT5zZyk7CiAJCWlmIChpbXhkbWEtPnNnKSB7CiAJCQl1MzIgdG1wOwogCQkJaW14X2RtYV9zZ19uZXh0KGNoYW5uZWwsIGlteGRtYS0+c2cpOwotCQkJdG1wID0gX19yYXdfcmVhZGwoRE1BX0JBU0UgKyBETUFfQ0NSKGNoYW5uZWwpKTsKLQkJCV9fcmF3X3dyaXRlbCh0bXAgfCBDQ1JfUlBUIHwgQ0NSX0FDUlBULAotCQkJCURNQV9CQVNFICsgRE1BX0NDUihjaGFubmVsKSk7CisJCQl0bXAgPSBpbXhfZG1hdjFfcmVhZGwoRE1BX0NDUihjaGFubmVsKSk7CisJCQlpbXhfZG1hdjFfd3JpdGVsKHRtcCB8IENDUl9SUFQgfCBDQ1JfQUNSUFQsCisJCQkJRE1BX0NDUihjaGFubmVsKSk7CiAJCX0KIAl9CiAjZW5kaWYKQEAgLTUwMiwxMSArNTA5LDEwIEBACiAJCWRlbF90aW1lcigmaW14ZG1hLT53YXRjaGRvZyk7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKERNQV9CQVNFICsgRE1BX0RJTVIpIHwgKDEgPDwgY2hhbm5lbCksCi0JCURNQV9CQVNFICsgRE1BX0RJTVIpOwotCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChETUFfQkFTRSArIERNQV9DQ1IoY2hhbm5lbCkpICYgfkNDUl9DRU4sCi0JCURNQV9CQVNFICsgRE1BX0NDUihjaGFubmVsKSk7Ci0JX19yYXdfd3JpdGVsKDEgPDwgY2hhbm5lbCwgRE1BX0JBU0UgKyBETUFfRElTUik7CisJaW14X2RtYXYxX3dyaXRlbChpbXhfZG1hdjFfcmVhZGwoRE1BX0RJTVIpIHwgKDEgPDwgY2hhbm5lbCksIERNQV9ESU1SKTsKKwlpbXhfZG1hdjFfd3JpdGVsKGlteF9kbWF2MV9yZWFkbChETUFfQ0NSKGNoYW5uZWwpKSAmIH5DQ1JfQ0VOLAorCQkJRE1BX0NDUihjaGFubmVsKSk7CisJaW14X2RtYXYxX3dyaXRlbCgxIDw8IGNoYW5uZWwsIERNQV9ESVNSKTsKIAlpbXhkbWEtPmluX3VzZSA9IDA7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQpAQCAtNTE3LDcgKzUyMyw3IEBACiB7CiAJc3RydWN0IGlteF9kbWFfY2hhbm5lbCAqaW14ZG1hID0gJmlteF9kbWFfY2hhbm5lbHNbY2hub107CiAKLQlfX3Jhd193cml0ZWwoMCwgRE1BX0JBU0UgKyBETUFfQ0NSKGNobm8pKTsKKwlpbXhfZG1hdjFfd3JpdGVsKDAsIERNQV9DQ1IoY2hubykpOwogCWlteGRtYS0+aW5fdXNlID0gMDsKIAlpbXhkbWEtPnNnID0gTlVMTDsKIApAQCAtNTMzLDE3ICs1MzksMTcgQEAKIAl1bnNpZ25lZCBpbnQgZXJyX21hc2s7CiAJaW50IGVycmNvZGU7CiAKLQlkaXNyID0gX19yYXdfcmVhZGwoRE1BX0JBU0UgKyBETUFfRElTUik7CisJZGlzciA9IGlteF9kbWF2MV9yZWFkbChETUFfRElTUik7CiAKLQllcnJfbWFzayA9IF9fcmF3X3JlYWRsKERNQV9CQVNFICsgRE1BX0RCVE9TUikgfAotCQkgICBfX3Jhd19yZWFkbChETUFfQkFTRSArIERNQV9EUlRPU1IpIHwKLQkJICAgX19yYXdfcmVhZGwoRE1BX0JBU0UgKyBETUFfRFNFU1IpICB8Ci0JCSAgIF9fcmF3X3JlYWRsKERNQV9CQVNFICsgRE1BX0RCT1NSKTsKKwllcnJfbWFzayA9IGlteF9kbWF2MV9yZWFkbChETUFfREJUT1NSKSB8CisJCSAgIGlteF9kbWF2MV9yZWFkbChETUFfRFJUT1NSKSB8CisJCSAgIGlteF9kbWF2MV9yZWFkbChETUFfRFNFU1IpICB8CisJCSAgIGlteF9kbWF2MV9yZWFkbChETUFfREJPU1IpOwogCiAJaWYgKCFlcnJfbWFzaykKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCi0JX19yYXdfd3JpdGVsKGRpc3IgJiBlcnJfbWFzaywgRE1BX0JBU0UgKyBETUFfRElTUik7CisJaW14X2RtYXYxX3dyaXRlbChkaXNyICYgZXJyX21hc2ssIERNQV9ESVNSKTsKIAogCWZvciAoaSA9IDA7IGkgPCBJTVhfRE1BX0NIQU5ORUxTOyBpKyspIHsKIAkJaWYgKCEoZXJyX21hc2sgJiAoMSA8PCBpKSkpCkBAIC01NTEsMjAgKzU1NywyMCBAQAogCQlpbXhkbWEgPSAmaW14X2RtYV9jaGFubmVsc1tpXTsKIAkJZXJyY29kZSA9IDA7CiAKLQkJaWYgKF9fcmF3X3JlYWRsKERNQV9CQVNFICsgRE1BX0RCVE9TUikgJiAoMSA8PCBpKSkgewotCQkJX19yYXdfd3JpdGVsKDEgPDwgaSwgRE1BX0JBU0UgKyBETUFfREJUT1NSKTsKKwkJaWYgKGlteF9kbWF2MV9yZWFkbChETUFfREJUT1NSKSAmICgxIDw8IGkpKSB7CisJCQlpbXhfZG1hdjFfd3JpdGVsKDEgPDwgaSwgRE1BX0RCVE9TUik7CiAJCQllcnJjb2RlIHw9IElNWF9ETUFfRVJSX0JVUlNUOwogCQl9Ci0JCWlmIChfX3Jhd19yZWFkbChETUFfQkFTRSArIERNQV9EUlRPU1IpICYgKDEgPDwgaSkpIHsKLQkJCV9fcmF3X3dyaXRlbCgxIDw8IGksIERNQV9CQVNFICsgRE1BX0RSVE9TUik7CisJCWlmIChpbXhfZG1hdjFfcmVhZGwoRE1BX0RSVE9TUikgJiAoMSA8PCBpKSkgeworCQkJaW14X2RtYXYxX3dyaXRlbCgxIDw8IGksIERNQV9EUlRPU1IpOwogCQkJZXJyY29kZSB8PSBJTVhfRE1BX0VSUl9SRVFVRVNUOwogCQl9Ci0JCWlmIChfX3Jhd19yZWFkbChETUFfQkFTRSArIERNQV9EU0VTUikgJiAoMSA8PCBpKSkgewotCQkJX19yYXdfd3JpdGVsKDEgPDwgaSwgRE1BX0JBU0UgKyBETUFfRFNFU1IpOworCQlpZiAoaW14X2RtYXYxX3JlYWRsKERNQV9EU0VTUikgJiAoMSA8PCBpKSkgeworCQkJaW14X2RtYXYxX3dyaXRlbCgxIDw8IGksIERNQV9EU0VTUik7CiAJCQllcnJjb2RlIHw9IElNWF9ETUFfRVJSX1RSQU5TRkVSOwogCQl9Ci0JCWlmIChfX3Jhd19yZWFkbChETUFfQkFTRSArIERNQV9EQk9TUikgJiAoMSA8PCBpKSkgewotCQkJX19yYXdfd3JpdGVsKDEgPDwgaSwgRE1BX0JBU0UgKyBETUFfREJPU1IpOworCQlpZiAoaW14X2RtYXYxX3JlYWRsKERNQV9EQk9TUikgJiAoMSA8PCBpKSkgeworCQkJaW14X2RtYXYxX3dyaXRlbCgxIDw8IGksIERNQV9EQk9TUik7CiAJCQllcnJjb2RlIHw9IElNWF9ETUFfRVJSX0JVRkZFUjsKIAkJfQogCQlpZiAoaW14ZG1hLT5uYW1lICYmIGlteGRtYS0+ZXJyX2hhbmRsZXIpIHsKQEAgLTYwNyw3ICs2MTMsNyBAQAogCQlpZiAoaW14ZG1hLT5zZykgewogCQkJaW14X2RtYV9zZ19uZXh0KGNobm8sIGlteGRtYS0+c2cpOwogCi0JCQl0bXAgPSBfX3Jhd19yZWFkbChETUFfQkFTRSArIERNQV9DQ1IoY2hubykpOworCQkJdG1wID0gaW14X2RtYXYxX3JlYWRsKERNQV9DQ1IoY2hubykpOwogCiAJCQlpZiAoaW14X2RtYV9od19jaGFpbihpbXhkbWEpKSB7CiAJCQkJLyogRklYTUU6IFRoZSB0aW1lb3V0IHNob3VsZCBwcm9iYWJseSBiZQpAQCAtNjE3LDE1ICs2MjMsMTMgQEAKIAkJCQkJamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7CiAKIAkJCQl0bXAgfD0gQ0NSX0NFTiB8IENDUl9SUFQgfCBDQ1JfQUNSUFQ7Ci0JCQkJX19yYXdfd3JpdGVsKHRtcCwgRE1BX0JBU0UgKwotCQkJCQkJRE1BX0NDUihjaG5vKSk7CisJCQkJaW14X2RtYXYxX3dyaXRlbCh0bXAsIERNQV9DQ1IoY2hubykpOwogCQkJfSBlbHNlIHsKLQkJCQlfX3Jhd193cml0ZWwodG1wICYgfkNDUl9DRU4sIERNQV9CQVNFICsKLQkJCQkJCURNQV9DQ1IoY2hubykpOworCQkJCWlteF9kbWF2MV93cml0ZWwodG1wICYgfkNDUl9DRU4sIERNQV9DQ1IoY2hubykpOwogCQkJCXRtcCB8PSBDQ1JfQ0VOOwogCQkJfQogCi0JCQlfX3Jhd193cml0ZWwodG1wLCBETUFfQkFTRSArIERNQV9DQ1IoY2hubykpOworCQkJaW14X2RtYXYxX3dyaXRlbCh0bXAsIERNQV9DQ1IoY2hubykpOwogCiAJCQlpZiAoaW14ZG1hLT5wcm9nX2hhbmRsZXIpCiAJCQkJaW14ZG1hLT5wcm9nX2hhbmRsZXIoY2hubywgaW14ZG1hLT5kYXRhLApAQCAtNjQwLDcgKzY0NCw3IEBACiAJCX0KIAl9CiAKLQlfX3Jhd193cml0ZWwoMCwgRE1BX0JBU0UgKyBETUFfQ0NSKGNobm8pKTsKKwlpbXhfZG1hdjFfd3JpdGVsKDAsIERNQV9DQ1IoY2hubykpOwogCWlteGRtYS0+aW5fdXNlID0gMDsKIAlpZiAoaW14ZG1hLT5pcnFfaGFuZGxlcikKIAkJaW14ZG1hLT5pcnFfaGFuZGxlcihjaG5vLCBpbXhkbWEtPmRhdGEpOwpAQCAtNjUxLDE1ICs2NTUsMTYgQEAKIAlpbnQgaSwgZGlzcjsKIAogI2lmZGVmIENPTkZJR19BUkNIX01YMgotCWRtYV9lcnJfaGFuZGxlcihpcnEsIGRldl9pZCk7CisJaWYgKGNwdV9pc19teDIxKCkgfHwgY3B1X2lzX214MjcoKSkKKwkJZG1hX2Vycl9oYW5kbGVyKGlycSwgZGV2X2lkKTsKICNlbmRpZgogCi0JZGlzciA9IF9fcmF3X3JlYWRsKERNQV9CQVNFICsgRE1BX0RJU1IpOworCWRpc3IgPSBpbXhfZG1hdjFfcmVhZGwoRE1BX0RJU1IpOwogCiAJcHJfZGVidWcoImlteGRtYTogZG1hX2lycV9oYW5kbGVyIGNhbGxlZCwgZGlzcj0weCUwOHhcbiIsCiAJCSAgICAgZGlzcik7CiAKLQlfX3Jhd193cml0ZWwoZGlzciwgRE1BX0JBU0UgKyBETUFfRElTUik7CisJaW14X2RtYXYxX3dyaXRlbChkaXNyLCBETUFfRElTUik7CiAJZm9yIChpID0gMDsgaSA8IElNWF9ETUFfQ0hBTk5FTFM7IGkrKykgewogCQlpZiAoZGlzciAmICgxIDw8IGkpKQogCQkJZG1hX2lycV9oYW5kbGVfY2hhbm5lbChpKTsKQEAgLTY5OSwxNyArNzA0LDE5IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyAvKiByZXF1ZXN0X2lycSgpIGNhbiBibG9jayAqLwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfTVgyCi0JcmV0ID0gcmVxdWVzdF9pcnEoTVhDX0lOVF9ETUFDSDAgKyBjaGFubmVsLCBkbWFfaXJxX2hhbmRsZXIsIDAsICJETUEiLAotCQkJTlVMTCk7Ci0JaWYgKHJldCkgewotCQlpbXhkbWEtPm5hbWUgPSBOVUxMOwotCQlwcmludGsoS0VSTl9DUklUICJDYW4ndCByZWdpc3RlciBJUlEgJWQgZm9yIERNQSBjaGFubmVsICVkXG4iLAotCQkJCU1YQ19JTlRfRE1BQ0gwICsgY2hhbm5lbCwgY2hhbm5lbCk7Ci0JCXJldHVybiByZXQ7CisJaWYgKGNwdV9pc19teDIxKCkgfHwgY3B1X2lzX214MjcoKSkgeworCQlyZXQgPSByZXF1ZXN0X2lycShNWDJ4X0lOVF9ETUFDSDAgKyBjaGFubmVsLAorCQkJCWRtYV9pcnFfaGFuZGxlciwgMCwgIkRNQSIsIE5VTEwpOworCQlpZiAocmV0KSB7CisJCQlpbXhkbWEtPm5hbWUgPSBOVUxMOworCQkJcHJfY3JpdCgiQ2FuJ3QgcmVnaXN0ZXIgSVJRICVkIGZvciBETUEgY2hhbm5lbCAlZFxuIiwKKwkJCQkJTVgyeF9JTlRfRE1BQ0gwICsgY2hhbm5lbCwgY2hhbm5lbCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJCWluaXRfdGltZXIoJmlteGRtYS0+d2F0Y2hkb2cpOworCQlpbXhkbWEtPndhdGNoZG9nLmZ1bmN0aW9uID0gJmlteF9kbWFfd2F0Y2hkb2c7CisJCWlteGRtYS0+d2F0Y2hkb2cuZGF0YSA9IGNoYW5uZWw7CiAJfQotCWluaXRfdGltZXIoJmlteGRtYS0+d2F0Y2hkb2cpOwotCWlteGRtYS0+d2F0Y2hkb2cuZnVuY3Rpb24gPSAmaW14X2RtYV93YXRjaGRvZzsKLQlpbXhkbWEtPndhdGNoZG9nLmRhdGEgPSBjaGFubmVsOwogI2VuZGlmCiAKIAlyZXR1cm4gcmV0OwpAQCAtNzM4LDcgKzc0NSw4IEBACiAJaW14ZG1hLT5uYW1lID0gTlVMTDsKIAogI2lmZGVmIENPTkZJR19BUkNIX01YMgotCWZyZWVfaXJxKE1YQ19JTlRfRE1BQ0gwICsgY2hhbm5lbCwgTlVMTCk7CisJaWYgKGNwdV9pc19teDIxKCkgfHwgY3B1X2lzX214MjcoKSkKKwkJZnJlZV9pcnEoTVgyeF9JTlRfRE1BQ0gwICsgY2hhbm5lbCwgTlVMTCk7CiAjZW5kaWYKIAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKQEAgLTc5NiwzNCArODA0LDUzIEBACiAJaW50IHJldCA9IDA7CiAJaW50IGk7CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDEKKwlpZiAoY3B1X2lzX214MSgpKQorCQlpbXhfZG1hdjFfYmFzZWFkZHIgPSBNWDFfSU9fQUREUkVTUyhNWDFfRE1BX0JBU0VfQUREUik7CisJZWxzZQorI2VuZGlmCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyMQorCWlmIChjcHVfaXNfbXgyMSgpKQorCQlpbXhfZG1hdjFfYmFzZWFkZHIgPSBNWDIxX0lPX0FERFJFU1MoTVgyMV9ETUFfQkFTRV9BRERSKTsKKwllbHNlCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDI3CisJaWYgKGNwdV9pc19teDI3KCkpCisJCWlteF9kbWF2MV9iYXNlYWRkciA9IE1YMjdfSU9fQUREUkVTUyhNWDI3X0RNQV9CQVNFX0FERFIpOworCWVsc2UKKyNlbmRpZgorCQlCVUcoKTsKKwogCWRtYV9jbGsgPSBjbGtfZ2V0KE5VTEwsICJkbWEiKTsKIAljbGtfZW5hYmxlKGRtYV9jbGspOwogCiAJLyogcmVzZXQgRE1BIG1vZHVsZSAqLwotCV9fcmF3X3dyaXRlbChEQ1JfRFJTVCwgRE1BX0JBU0UgKyBETUFfRENSKTsKKwlpbXhfZG1hdjFfd3JpdGVsKERDUl9EUlNULCBETUFfRENSKTsKIAogI2lmZGVmIENPTkZJR19BUkNIX01YMQotCXJldCA9IHJlcXVlc3RfaXJxKERNQV9JTlQsIGRtYV9pcnFfaGFuZGxlciwgMCwgIkRNQSIsIE5VTEwpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiV293ISAgQ2FuJ3QgcmVnaXN0ZXIgSVJRIGZvciBETUFcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KKwlpZiAoY3B1X2lzX214MSgpKSB7CisJCXJldCA9IHJlcXVlc3RfaXJxKE1YMV9ETUFfSU5ULCBkbWFfaXJxX2hhbmRsZXIsIDAsICJETUEiLCBOVUxMKTsKKwkJaWYgKHJldCkgeworCQkJcHJfY3JpdCgiV293ISAgQ2FuJ3QgcmVnaXN0ZXIgSVJRIGZvciBETUFcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQogCi0JcmV0ID0gcmVxdWVzdF9pcnEoRE1BX0VSUiwgZG1hX2Vycl9oYW5kbGVyLCAwLCAiRE1BIiwgTlVMTCk7Ci0JaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9DUklUICJXb3chICBDYW4ndCByZWdpc3RlciBFUlJJUlEgZm9yIERNQVxuIik7Ci0JCWZyZWVfaXJxKERNQV9JTlQsIE5VTEwpOwotCQlyZXR1cm4gcmV0OworCQlyZXQgPSByZXF1ZXN0X2lycShNWDFfRE1BX0VSUiwgZG1hX2Vycl9oYW5kbGVyLCAwLCAiRE1BIiwgTlVMTCk7CisJCWlmIChyZXQpIHsKKwkJCXByX2NyaXQoIldvdyEgIENhbid0IHJlZ2lzdGVyIEVSUklSUSBmb3IgRE1BXG4iKTsKKwkJCWZyZWVfaXJxKE1YMV9ETUFfSU5ULCBOVUxMKTsKKwkJCXJldHVybiByZXQ7CisJCX0KIAl9CiAjZW5kaWYKIAkvKiBlbmFibGUgRE1BIG1vZHVsZSAqLwotCV9fcmF3X3dyaXRlbChEQ1JfREVOLCBETUFfQkFTRSArIERNQV9EQ1IpOworCWlteF9kbWF2MV93cml0ZWwoRENSX0RFTiwgRE1BX0RDUik7CiAKIAkvKiBjbGVhciBhbGwgaW50ZXJydXB0cyAqLwotCV9fcmF3X3dyaXRlbCgoMSA8PCBJTVhfRE1BX0NIQU5ORUxTKSAtIDEsIERNQV9CQVNFICsgRE1BX0RJU1IpOworCWlteF9kbWF2MV93cml0ZWwoKDEgPDwgSU1YX0RNQV9DSEFOTkVMUykgLSAxLCBETUFfRElTUik7CiAKIAkvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KLQlfX3Jhd193cml0ZWwoKDEgPDwgSU1YX0RNQV9DSEFOTkVMUykgLSAxLCBETUFfQkFTRSArIERNQV9ESU1SKTsKKwlpbXhfZG1hdjFfd3JpdGVsKCgxIDw8IElNWF9ETUFfQ0hBTk5FTFMpIC0gMSwgRE1BX0RJTVIpOwogCiAJZm9yIChpID0gMDsgaSA8IElNWF9ETUFfQ0hBTk5FTFM7IGkrKykgewogCQlpbXhfZG1hX2NoYW5uZWxzW2ldLnNnID0gTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2VoY2kuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2VoY2kuYwppbmRleCA0MTU5OWJlLi5jYjBiNjM4NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2VoY2kuYworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9laGNpLmMKQEAgLTI1LDI1ICsyNSwzNyBAQAogI2RlZmluZSBVU0JDVFJMX09UR0JBU0VfT0ZGU0VUCTB4NjAwCiAKICNkZWZpbmUgTVgzMV9PVEdfU0lDX1NISUZUCTI5Ci0jZGVmaW5lIE1YMzFfT1RHX1NJQ19NQVNLCSgweGYgPDwgTVgzMV9PVEdfU0lDX1NISUZUKQorI2RlZmluZSBNWDMxX09UR19TSUNfTUFTSwkoMHgzIDw8IE1YMzFfT1RHX1NJQ19TSElGVCkKICNkZWZpbmUgTVgzMV9PVEdfUE1fQklUCQkoMSA8PCAyNCkKIAogI2RlZmluZSBNWDMxX0gyX1NJQ19TSElGVAkyMQotI2RlZmluZSBNWDMxX0gyX1NJQ19NQVNLCSgweGYgPDwgTVgzMV9IMl9TSUNfU0hJRlQpCisjZGVmaW5lIE1YMzFfSDJfU0lDX01BU0sJKDB4MyA8PCBNWDMxX0gyX1NJQ19TSElGVCkKICNkZWZpbmUgTVgzMV9IMl9QTV9CSVQJCSgxIDw8IDE2KQogI2RlZmluZSBNWDMxX0gyX0RUX0JJVAkJKDEgPDwgNSkKIAogI2RlZmluZSBNWDMxX0gxX1NJQ19TSElGVAkxMwotI2RlZmluZSBNWDMxX0gxX1NJQ19NQVNLCSgweGYgPDwgTVgzMV9IMV9TSUNfU0hJRlQpCisjZGVmaW5lIE1YMzFfSDFfU0lDX01BU0sJKDB4MyA8PCBNWDMxX0gxX1NJQ19TSElGVCkKICNkZWZpbmUgTVgzMV9IMV9QTV9CSVQJCSgxIDw8IDgpCiAjZGVmaW5lIE1YMzFfSDFfRFRfQklUCQkoMSA8PCA0KQogCisjZGVmaW5lIE1YMzVfT1RHX1NJQ19TSElGVAkyOQorI2RlZmluZSBNWDM1X09UR19TSUNfTUFTSwkoMHgzIDw8IE1YMzVfT1RHX1NJQ19TSElGVCkKKyNkZWZpbmUgTVgzNV9PVEdfUE1fQklUCQkoMSA8PCAyNCkKKworI2RlZmluZSBNWDM1X0gxX1NJQ19TSElGVAkyMQorI2RlZmluZSBNWDM1X0gxX1NJQ19NQVNLCSgweDMgPDwgTVgzNV9IMV9TSUNfU0hJRlQpCisjZGVmaW5lIE1YMzVfSDFfUE1fQklUCQkoMSA8PCA4KQorI2RlZmluZSBNWDM1X0gxX0lQUFVFX1VQX0JJVAkoMSA8PCA3KQorI2RlZmluZSBNWDM1X0gxX0lQUFVFX0RPV05fQklUCSgxIDw8IDYpCisjZGVmaW5lIE1YMzVfSDFfVExMX0JJVAkJKDEgPDwgNSkKKyNkZWZpbmUgTVgzNV9IMV9VU0JURV9CSVQJKDEgPDwgNCkKKwogaW50IG14Y19zZXRfdXNiY29udHJvbChpbnQgcG9ydCwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXVuc2lnbmVkIGludCB2OwotCisjaWZkZWYgQ09ORklHX0FSQ0hfTVgzCiAJaWYgKGNwdV9pc19teDMxKCkpIHsKLQkJdiA9IHJlYWRsKElPX0FERFJFU1MoTVgzMV9PVEdfQkFTRV9BRERSICsKKwkJdiA9IHJlYWRsKE1YMzFfSU9fQUREUkVTUyhNWDMxX09UR19CQVNFX0FERFIgKwogCQkJCSAgICAgVVNCQ1RSTF9PVEdCQVNFX09GRlNFVCkpOwogCiAJCXN3aXRjaCAocG9ydCkgewpAQCAtNTEsMTUgKzYzLDE1IEBACiAJCQl2ICY9IH4oTVgzMV9PVEdfU0lDX01BU0sgfCBNWDMxX09UR19QTV9CSVQpOwogCQkJdiB8PSAoZmxhZ3MgJiBNWENfRUhDSV9JTlRFUkZBQ0VfTUFTSykKIAkJCQkJPDwgTVgzMV9PVEdfU0lDX1NISUZUOwotCQkJaWYgKGZsYWdzICYgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEKQorCQkJaWYgKCEoZmxhZ3MgJiBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQpKQogCQkJCXYgfD0gTVgzMV9PVEdfUE1fQklUOwogCiAJCQlicmVhazsKIAkJY2FzZSAxOiAvKiBIMSBwb3J0ICovCi0JCQl2ICY9IH4oTVgzMV9IMV9TSUNfTUFTSyB8IE1YMzFfSDFfUE1fQklUKTsKKwkJCXYgJj0gfihNWDMxX0gxX1NJQ19NQVNLIHwgTVgzMV9IMV9QTV9CSVQgfCBNWDMxX0gxX0RUX0JJVCk7CiAJCQl2IHw9IChmbGFncyAmIE1YQ19FSENJX0lOVEVSRkFDRV9NQVNLKQogCQkJCQkJPDwgTVgzMV9IMV9TSUNfU0hJRlQ7Ci0JCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQpCisJCQlpZiAoIShmbGFncyAmIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCkpCiAJCQkJdiB8PSBNWDMxX0gxX1BNX0JJVDsKIAogCQkJaWYgKCEoZmxhZ3MgJiBNWENfRUhDSV9UVExfRU5BQkxFRCkpCkBAIC02Nyw3ICs3OSw3IEBACiAKIAkJCWJyZWFrOwogCQljYXNlIDI6CS8qIEgyIHBvcnQgKi8KLQkJCXYgJj0gfihNWDMxX0gyX1NJQ19NQVNLIHwgTVgzMV9IMl9QTV9CSVQpOworCQkJdiAmPSB+KE1YMzFfSDJfU0lDX01BU0sgfCBNWDMxX0gyX1BNX0JJVCB8IE1YMzFfSDJfRFRfQklUKTsKIAkJCXYgfD0gKGZsYWdzICYgTVhDX0VIQ0lfSU5URVJGQUNFX01BU0spCiAJCQkJCQk8PCBNWDMxX0gyX1NJQ19TSElGVDsKIAkJCWlmICghKGZsYWdzICYgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEKSkKQEAgLTc3LDEzICs4OSwxMDMgQEAKIAkJCQl2IHw9IE1YMzFfSDJfRFRfQklUOwogCiAJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJd3JpdGVsKHYsIElPX0FERFJFU1MoTVgzMV9PVEdfQkFTRV9BRERSICsKKwkJd3JpdGVsKHYsIE1YMzFfSU9fQUREUkVTUyhNWDMxX09UR19CQVNFX0FERFIgKwogCQkJCSAgICAgVVNCQ1RSTF9PVEdCQVNFX09GRlNFVCkpOwogCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAoY3B1X2lzX214MzUoKSkgeworCQl2ID0gcmVhZGwoTVgzNV9JT19BRERSRVNTKE1YMzVfT1RHX0JBU0VfQUREUiArCisJCQkJICAgICBVU0JDVFJMX09UR0JBU0VfT0ZGU0VUKSk7CisKKwkJc3dpdGNoIChwb3J0KSB7CisJCWNhc2UgMDoJLyogT1RHIHBvcnQgKi8KKwkJCXYgJj0gfihNWDM1X09UR19TSUNfTUFTSyB8IE1YMzVfT1RHX1BNX0JJVCk7CisJCQl2IHw9IChmbGFncyAmIE1YQ19FSENJX0lOVEVSRkFDRV9NQVNLKQorCQkJCQk8PCBNWDM1X09UR19TSUNfU0hJRlQ7CisJCQlpZiAoIShmbGFncyAmIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCkpCisJCQkJdiB8PSBNWDM1X09UR19QTV9CSVQ7CisKKwkJCWJyZWFrOworCQljYXNlIDE6IC8qIEgxIHBvcnQgKi8KKwkJCXYgJj0gfihNWDM1X0gxX1NJQ19NQVNLIHwgTVgzNV9IMV9QTV9CSVQgfCBNWDM1X0gxX1RMTF9CSVQgfAorCQkJCU1YMzVfSDFfVVNCVEVfQklUIHwgTVgzNV9IMV9JUFBVRV9ET1dOX0JJVCB8IE1YMzVfSDFfSVBQVUVfVVBfQklUKTsKKwkJCXYgfD0gKGZsYWdzICYgTVhDX0VIQ0lfSU5URVJGQUNFX01BU0spCisJCQkJCQk8PCBNWDM1X0gxX1NJQ19TSElGVDsKKwkJCWlmICghKGZsYWdzICYgTVhDX0VIQ0lfUE9XRVJfUElOU19FTkFCTEVEKSkKKwkJCQl2IHw9IE1YMzVfSDFfUE1fQklUOworCisJCQlpZiAoIShmbGFncyAmIE1YQ19FSENJX1RUTF9FTkFCTEVEKSkKKwkJCQl2IHw9IE1YMzVfSDFfVExMX0JJVDsKKworCQkJaWYgKGZsYWdzICYgTVhDX0VIQ0lfSU5URVJOQUxfUEhZKQorCQkJCXYgfD0gTVgzNV9IMV9VU0JURV9CSVQ7CisKKwkJCWlmIChmbGFncyAmIE1YQ19FSENJX0lQUFVFX0RPV04pCisJCQkJdiB8PSBNWDM1X0gxX0lQUFVFX0RPV05fQklUOworCisJCQlpZiAoZmxhZ3MgJiBNWENfRUhDSV9JUFBVRV9VUCkKKwkJCQl2IHw9IE1YMzVfSDFfSVBQVUVfVVBfQklUOworCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJd3JpdGVsKHYsIE1YMzVfSU9fQUREUkVTUyhNWDM1X09UR19CQVNFX0FERFIgKworCQkJCSAgICAgVVNCQ1RSTF9PVEdCQVNFX09GRlNFVCkpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYgLyogQ09ORklHX0FSQ0hfTVgzICovCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNworCWlmIChjcHVfaXNfbXgyNygpKSB7CisJCS8qIE9uIGkuTVgyNyB3ZSBjYW4gdXNlIHRoZSBpLk1YMzEgVVNCQ1RSTCBiaXRzLCB0aGV5CisJCSAqIGFyZSBpZGVudGljYWwKKwkJICovCisJCXYgPSByZWFkbChNWDI3X0lPX0FERFJFU1MoTVgyN19PVEdfQkFTRV9BRERSICsKKwkJCQkgICAgIFVTQkNUUkxfT1RHQkFTRV9PRkZTRVQpKTsKKwkJc3dpdGNoIChwb3J0KSB7CisJCWNhc2UgMDoJLyogT1RHIHBvcnQgKi8KKwkJCXYgJj0gfihNWDMxX09UR19TSUNfTUFTSyB8IE1YMzFfT1RHX1BNX0JJVCk7CisJCQl2IHw9IChmbGFncyAmIE1YQ19FSENJX0lOVEVSRkFDRV9NQVNLKQorCQkJCQk8PCBNWDMxX09UR19TSUNfU0hJRlQ7CisJCQlpZiAoIShmbGFncyAmIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCkpCisJCQkJdiB8PSBNWDMxX09UR19QTV9CSVQ7CisJCQlicmVhazsKKwkJY2FzZSAxOiAvKiBIMSBwb3J0ICovCisJCQl2ICY9IH4oTVgzMV9IMV9TSUNfTUFTSyB8IE1YMzFfSDFfUE1fQklUIHwgTVgzMV9IMV9EVF9CSVQpOworCQkJdiB8PSAoZmxhZ3MgJiBNWENfRUhDSV9JTlRFUkZBQ0VfTUFTSykKKwkJCQkJCTw8IE1YMzFfSDFfU0lDX1NISUZUOworCQkJaWYgKCEoZmxhZ3MgJiBNWENfRUhDSV9QT1dFUl9QSU5TX0VOQUJMRUQpKQorCQkJCXYgfD0gTVgzMV9IMV9QTV9CSVQ7CisKKwkJCWlmICghKGZsYWdzICYgTVhDX0VIQ0lfVFRMX0VOQUJMRUQpKQorCQkJCXYgfD0gTVgzMV9IMV9EVF9CSVQ7CisKKwkJCWJyZWFrOworCQljYXNlIDI6CS8qIEgyIHBvcnQgKi8KKwkJCXYgJj0gfihNWDMxX0gyX1NJQ19NQVNLIHwgTVgzMV9IMl9QTV9CSVQgfCBNWDMxX0gyX0RUX0JJVCk7CisJCQl2IHw9IChmbGFncyAmIE1YQ19FSENJX0lOVEVSRkFDRV9NQVNLKQorCQkJCQkJPDwgTVgzMV9IMl9TSUNfU0hJRlQ7CisJCQlpZiAoIShmbGFncyAmIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRCkpCisJCQkJdiB8PSBNWDMxX0gyX1BNX0JJVDsKKworCQkJaWYgKCEoZmxhZ3MgJiBNWENfRUhDSV9UVExfRU5BQkxFRCkpCisJCQkJdiB8PSBNWDMxX0gyX0RUX0JJVDsKKworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQl3cml0ZWwodiwgTVgyN19JT19BRERSRVNTKE1YMjdfT1RHX0JBU0VfQUREUiArCisJCQkJICAgICBVU0JDVFJMX09UR0JBU0VfT0ZGU0VUKSk7CisJCXJldHVybiAwOworCX0KKyNlbmRpZiAvKiBDT05GSUdfTUFDSF9NWDI3ICovCiAJcHJpbnRrKEtFUk5fV0FSTklORwogCQkiJXMoKSB1bmFibGUgdG8gc2V0dXAgVVNCQ09OVFJPTCBmb3IgdGhpcyBDUFVcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtbXhjL2dwaW8uYwppbmRleCBkNjVlYmUzLi43MGIyMzg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9ncGlvLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvZ3Bpby5jCkBAIC0xNDAsMTYgKzE0MCwxMyBAQAogCXZhbCA9IF9fcmF3X3JlYWRsKHJlZyk7CiAJZWRnZSA9ICh2YWwgPj4gKGJpdCA8PCAxKSkgJiAzOwogCXZhbCAmPSB+KDB4MyA8PCAoYml0IDw8IDEpKTsKLQlzd2l0Y2ggKGVkZ2UpIHsKLQljYXNlIEdQSU9fSU5UX0hJR0hfTEVWOgorCWlmIChlZGdlID09IEdQSU9fSU5UX0hJR0hfTEVWKSB7CiAJCWVkZ2UgPSBHUElPX0lOVF9MT1dfTEVWOwogCQlwcl9kZWJ1ZygibXhjOiBzd2l0Y2ggR1BJTyAlZCB0byBsb3cgdHJpZ2dlclxuIiwgZ3Bpbyk7Ci0JCWJyZWFrOwotCWNhc2UgR1BJT19JTlRfTE9XX0xFVjoKKwl9IGVsc2UgaWYgKGVkZ2UgPT0gR1BJT19JTlRfTE9XX0xFVikgewogCQllZGdlID0gR1BJT19JTlRfSElHSF9MRVY7CiAJCXByX2RlYnVnKCJteGM6IHN3aXRjaCBHUElPICVkIHRvIGhpZ2ggdHJpZ2dlclxuIiwgZ3Bpbyk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6CisJfSBlbHNlIHsKIAkJcHJfZXJyKCJteGM6IGludmFsaWQgY29uZmlndXJhdGlvbiBmb3IgR1BJTyAlZDogJXhcbiIsCiAJCSAgICAgICBncGlvLCBlZGdlKTsKIAkJcmV0dXJuOwpAQCAtMTU3LDI1ICsxNTQsMjAgQEAKIAlfX3Jhd193cml0ZWwodmFsIHwgKGVkZ2UgPDwgKGJpdCA8PCAxKSksIHJlZyk7CiB9CiAKLS8qIGhhbmRsZSBuIGludGVycnVwdHMgaW4gb25lIHN0YXR1cyByZWdpc3RlciAqLworLyogaGFuZGxlIDMyIGludGVycnVwdHMgaW4gb25lIHN0YXR1cyByZWdpc3RlciAqLwogc3RhdGljIHZvaWQgbXhjX2dwaW9faXJxX2hhbmRsZXIoc3RydWN0IG14Y19ncGlvX3BvcnQgKnBvcnQsIHUzMiBpcnFfc3RhdCkKIHsKLQl1MzIgZ3Bpb19pcnFfbm87CisJdTMyIGdwaW9faXJxX25vX2Jhc2UgPSBwb3J0LT52aXJ0dWFsX2lycV9zdGFydDsKIAotCWdwaW9faXJxX25vID0gcG9ydC0+dmlydHVhbF9pcnFfc3RhcnQ7Ci0JZm9yICg7IGlycV9zdGF0ICE9IDA7IGlycV9zdGF0ID4+PSAxLCBncGlvX2lycV9ubysrKSB7Ci0JCXUzMiBncGlvID0gaXJxX3RvX2dwaW8oZ3Bpb19pcnFfbm8pOworCXdoaWxlIChpcnFfc3RhdCAhPSAwKSB7CisJCWludCBpcnFvZmZzZXQgPSBmbHMoaXJxX3N0YXQpIC0gMTsKIAotCQlpZiAoKGlycV9zdGF0ICYgMSkgPT0gMCkKLQkJCWNvbnRpbnVlOworCQlpZiAocG9ydC0+Ym90aF9lZGdlcyAmICgxIDw8IGlycW9mZnNldCkpCisJCQlteGNfZmxpcF9lZGdlKHBvcnQsIGlycW9mZnNldCk7CiAKLQkJQlVHX09OKCEoaXJxX2Rlc2NbZ3Bpb19pcnFfbm9dLmhhbmRsZV9pcnEpKTsKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGdwaW9faXJxX25vX2Jhc2UgKyBpcnFvZmZzZXQpOwogCi0JCWlmIChwb3J0LT5ib3RoX2VkZ2VzICYgKDEgPDwgKGdwaW8gJiAzMSkpKQotCQkJbXhjX2ZsaXBfZWRnZShwb3J0LCBncGlvKTsKLQotCQlpcnFfZGVzY1tncGlvX2lycV9ub10uaGFuZGxlX2lycShncGlvX2lycV9ubywKLQkJCQkmaXJxX2Rlc2NbZ3Bpb19pcnFfbm9dKTsKKwkJaXJxX3N0YXQgJj0gfigxIDw8IGlycW9mZnNldCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQta3ptYXJtMTEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1rem1hcm0xMS5oCmluZGV4IDA1ZmYyZjMuLjkzY2M2NmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1rem1hcm0xMS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1rem1hcm0xMS5oCkBAIC0yMSwxOSArMjEsMTkgQEAKIC8qCiAgKiAgS1pNLUFSTTExLTAxIEJvYXJkIENvbnRyb2wgUmVnaXN0ZXJzIG9uIEZQR0EKICAqLwotI2RlZmluZSBLWk1fQVJNMTFfQ1RMMQkJKENTNF9CQVNFX0FERFIgKyAweDEwMDApCi0jZGVmaW5lIEtaTV9BUk0xMV9DVEwyCQkoQ1M0X0JBU0VfQUREUiArIDB4MTAwMSkKLSNkZWZpbmUgS1pNX0FSTTExX1JTVzEJCShDUzRfQkFTRV9BRERSICsgMHgxMDAyKQotI2RlZmluZSBLWk1fQVJNMTFfQkFDS19MSUdIVAkoQ1M0X0JBU0VfQUREUiArIDB4MTAwNCkKLSNkZWZpbmUgS1pNX0FSTTExX0ZQR0FfUkVWCShDUzRfQkFTRV9BRERSICsgMHgxMDA4KQotI2RlZmluZSBLWk1fQVJNMTFfN1NFR19MRUQJKENTNF9CQVNFX0FERFIgKyAweDEwMTApCi0jZGVmaW5lIEtaTV9BUk0xMV9MRURTCQkoQ1M0X0JBU0VfQUREUiArIDB4MTAyMCkKLSNkZWZpbmUgS1pNX0FSTTExX0RJUFNXMgkoQ1M0X0JBU0VfQUREUiArIDB4MTAwMykKKyNkZWZpbmUgS1pNX0FSTTExX0NUTDEJCShNWDMxX0NTNF9CQVNFX0FERFIgKyAweDEwMDApCisjZGVmaW5lIEtaTV9BUk0xMV9DVEwyCQkoTVgzMV9DUzRfQkFTRV9BRERSICsgMHgxMDAxKQorI2RlZmluZSBLWk1fQVJNMTFfUlNXMQkJKE1YMzFfQ1M0X0JBU0VfQUREUiArIDB4MTAwMikKKyNkZWZpbmUgS1pNX0FSTTExX0JBQ0tfTElHSFQJKE1YMzFfQ1M0X0JBU0VfQUREUiArIDB4MTAwNCkKKyNkZWZpbmUgS1pNX0FSTTExX0ZQR0FfUkVWCShNWDMxX0NTNF9CQVNFX0FERFIgKyAweDEwMDgpCisjZGVmaW5lIEtaTV9BUk0xMV83U0VHX0xFRAkoTVgzMV9DUzRfQkFTRV9BRERSICsgMHgxMDEwKQorI2RlZmluZSBLWk1fQVJNMTFfTEVEUwkJKE1YMzFfQ1M0X0JBU0VfQUREUiArIDB4MTAyMCkKKyNkZWZpbmUgS1pNX0FSTTExX0RJUFNXMgkoTVgzMV9DUzRfQkFTRV9BRERSICsgMHgxMDAzKQogCiAvKgogICogRXh0ZXJuYWwgVUFSVCBmb3IgdG91Y2ggcGFuZWwgb24gRlBHQQogICovCi0jZGVmaW5lIEtaTV9BUk0xMV8xNjU1MAkJKENTNF9CQVNFX0FERFIgKyAweDEwNTApCisjZGVmaW5lIEtaTV9BUk0xMV8xNjU1MAkJKE1YMzFfQ1M0X0JBU0VfQUREUiArIDB4MTA1MCkKIAogI2VuZGlmIC8qIF9fQVJNX0FSQ0hfQk9BUkRfS1pNX0FSTTExX0ggKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFhZHMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxYWRzLmgKaW5kZXggMmNiZmEzNS4uMDk1YTE5OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2JvYXJkLW14MzFhZHMuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMWFkcy5oCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogCiAvKiBCYXNlIGFkZHJlc3Mgb2YgUEJDIGNvbnRyb2xsZXIgKi8KLSNkZWZpbmUgUEJDX0JBU0VfQUREUkVTUyAgICAgICAgSU9fQUREUkVTUyhDUzRfQkFTRV9BRERSKQorI2RlZmluZSBQQkNfQkFTRV9BRERSRVNTICAgICAgICBNWDMxX0NTNF9CQVNFX0FERFJfVklSVAogLyogT2Zmc2V0cyBmb3IgdGhlIFBCQyBDb250cm9sbGVyIHJlZ2lzdGVyICovCiAKIC8qIFBCQyBCb2FyZCBzdGF0dXMgcmVnaXN0ZXIgb2Zmc2V0ICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvYm9hcmQtbXgzMW1vYm9hcmQuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbW9ib2FyZC5oCmluZGV4IGQ1YmU2YjUuLmZjNWZlYzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbW9ib2FyZC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9ib2FyZC1teDMxbW9ib2FyZC5oCkBAIC0yNSw2ICsyNSw3IEBACiAJTVgzMU5PQk9BUkQJPSAwLAogCU1YMzFERVZCT0FSRAk9IDEsCiAJTVgzMU1BUlhCT1QJPSAyLAorCU1YMzFTTUFSVEJPVAk9IDMsCiB9OwogCiAvKgpAQCAtMzQsNiArMzUsNyBAQAogCiBleHRlcm4gdm9pZCBteDMxbW9ib2FyZF9kZXZib2FyZF9pbml0KHZvaWQpOwogZXh0ZXJuIHZvaWQgbXgzMW1vYm9hcmRfbWFyeGJvdF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgbXgzMW1vYm9hcmRfc21hcnRib3RfaW5pdCh2b2lkKTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jbG9jay5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKaW5kZXggNDNhODJkMC4uNzUzYTU5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2Nsb2NrLmgKQEAgLTI2LDEzICsyNiw2IEBACiBzdHJ1Y3QgbW9kdWxlOwogCiBzdHJ1Y3QgY2xrIHsKLSNpZm5kZWYgQ09ORklHX0NPTU1PTl9DTEtERVYKLQkvKiBBcyBzb29uIGFzIGkuTVgxIGFuZCBpLk1YMzEgc3dpdGNoZWQgdG8gY2xrZGV2LCB0aGlzCi0JICogYmxvY2sgY2FuIGdvIGF3YXkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0Jc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0JY29uc3QgY2hhciAqbmFtZTsKLSNlbmRpZgogCWludCBpZDsKIAkvKiBTb3VyY2UgY2xvY2sgdGhpcyBjbGsgZGVwZW5kcyBvbiAqLwogCXN0cnVjdCBjbGsgKnBhcmVudDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jb21tb24uaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9jb21tb24uaAppbmRleCA0YmYxMDY4Li4yOTQxNDcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvY29tbW9uLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2NvbW1vbi5oCkBAIC0yMCwxNCArMjAsMTcgQEAKIGV4dGVybiB2b2lkIG14MjdfbWFwX2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgbXgzMV9tYXBfaW8odm9pZCk7CiBleHRlcm4gdm9pZCBteDM1X21hcF9pbyh2b2lkKTsKK2V4dGVybiB2b2lkIG14NTFfbWFwX2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgbXhjOTEyMzFfbWFwX2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgbXhjX2luaXRfaXJxKHZvaWQgX19pb21lbSAqKTsKK2V4dGVybiB2b2lkIHR6aWNfaW5pdF9pcnEodm9pZCBfX2lvbWVtICopOwogZXh0ZXJuIHZvaWQgbXgxX2luaXRfaXJxKHZvaWQpOwogZXh0ZXJuIHZvaWQgbXgyMV9pbml0X2lycSh2b2lkKTsKIGV4dGVybiB2b2lkIG14MjVfaW5pdF9pcnEodm9pZCk7CiBleHRlcm4gdm9pZCBteDI3X2luaXRfaXJxKHZvaWQpOwogZXh0ZXJuIHZvaWQgbXgzMV9pbml0X2lycSh2b2lkKTsKIGV4dGVybiB2b2lkIG14MzVfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBteDUxX2luaXRfaXJxKHZvaWQpOwogZXh0ZXJuIHZvaWQgbXhjOTEyMzFfaW5pdF9pcnEodm9pZCk7CiBleHRlcm4gdm9pZCBteGNfdGltZXJfaW5pdChzdHJ1Y3QgY2xrICp0aW1lcl9jbGssIHZvaWQgX19pb21lbSAqLCBpbnQpOwogZXh0ZXJuIGludCBteDFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBmcmVmKTsKQEAgLTM2LDYgKzM5LDggQEAKIGV4dGVybiBpbnQgbXgyN19jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpOwogZXh0ZXJuIGludCBteDMxX2Nsb2Nrc19pbml0KHVuc2lnbmVkIGxvbmcgZnJlZik7CiBleHRlcm4gaW50IG14MzVfY2xvY2tzX2luaXQodm9pZCk7CitleHRlcm4gaW50IG14NTFfY2xvY2tzX2luaXQodW5zaWduZWQgbG9uZyBja2lsLCB1bnNpZ25lZCBsb25nIG9zYywKKwkJCXVuc2lnbmVkIGxvbmcgY2tpaDEsIHVuc2lnbmVkIGxvbmcgY2tpaDIpOwogZXh0ZXJuIGludCBteGM5MTIzMV9jbG9ja3NfaW5pdCh1bnNpZ25lZCBsb25nIGZyZWYpOwogZXh0ZXJuIGludCBteGNfcmVnaXN0ZXJfZ3Bpb3Modm9pZCk7CiBleHRlcm4gaW50IG14Y19yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdm9pZCAqZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCmluZGV4IDVhNmFlMWIuLjBiNmUxMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9kZWJ1Zy1tYWNyby5TCkBAIC0xMCw2ICsxMCw3IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCiAgKi8KKyNkZWZpbmUgSU1YX05FRURTX0RFUFJFQ0FURURfU1lNQk9MUwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfTVgxCiAjaW5jbHVkZSA8bWFjaC9teDEuaD4KQEAgLTQ0LDEzICs0NSwyMiBAQAogI2RlZmluZSBVQVJUX1ZBRERSCUFJUFMxX0lPX0FERFJFU1MoVUFSVDFfQkFTRV9BRERSKQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfQVJDSF9NWDUKKyNpZmRlZiBVQVJUX1BBRERSCisjZXJyb3IgIkNPTkZJR19ERUJVR19MTCBpcyBpbmNvbXBhdGlibGUgd2l0aCBtdWx0aXBsZSBhcmNocyIKKyNlbmRpZgorI2luY2x1ZGUgPG1hY2gvbXg1MS5oPgorI2RlZmluZSBVQVJUX1BBRERSCU1YNTFfVUFSVDFfQkFTRV9BRERSCisjZGVmaW5lIFVBUlRfVkFERFIJTVg1MV9BSVBTMV9JT19BRERSRVNTKE1YNTFfVUFSVDFfQkFTRV9BRERSKQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfQVJDSF9NWEM5MTIzMQogI2lmZGVmIFVBUlRfUEFERFIKICNlcnJvciAiQ09ORklHX0RFQlVHX0xMIGlzIGluY29tcGF0aWJsZSB3aXRoIG11bHRpcGxlIGFyY2hzIgogI2VuZGlmCiAjaW5jbHVkZSA8bWFjaC9teGM5MTIzMS5oPgogI2RlZmluZSBVQVJUX1BBRERSCU1YQzkxMjMxX1VBUlQyX0JBU0VfQUREUgotI2RlZmluZSBVQVJUX1ZBRERSCU1YQzkxMjMxX0FJUFMxX0lPX0FERFJFU1MoTVhDOTEyMzFfVUFSVDJfQkFTRV9BRERSKQorI2RlZmluZSBVQVJUX1ZBRERSCU1YQzkxMjMxX0lPX0FERFJFU1MoTVhDOTEyMzFfVUFSVDJfQkFTRV9BRERSKQogI2VuZGlmCiAJCS5tYWNybwlhZGRydWFydCwgcngsIHRtcAogCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2VudHJ5LW1hY3JvLlMgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwppbmRleCA3Y2YyOTBlLi5hZWIwODY5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUworKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvZW50cnktbWFjcm8uUwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPgotICogIENvcHlyaWdodCAyMDA0LTIwMDcgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgMjAwNC0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKi8KIAogLyoKQEAgLTE4LDExICsxOCwxNiBAQAogCS5lbmRtCiAKIAkubWFjcm8gIGdldF9pcnFucl9wcmVhbWJsZSwgYmFzZSwgdG1wCisjaWZuZGVmIENPTkZJR19NWENfVFpJQwogCWxkcglcYmFzZSwgPWF2aWNfYmFzZQogCWxkcglcYmFzZSwgW1xiYXNlXQogI2lmZGVmIENPTkZJR19NWENfSVJRX1BSSU9SCiAJbGRyCXI0LCBbXGJhc2UsICNBVklDX05JTUFTS10KICNlbmRpZgorI2VsaWYgZGVmaW5lZCBDT05GSUdfTVhDX1RaSUMKKwlsZHIJXGJhc2UsID10emljX2Jhc2UKKwlsZHIJXGJhc2UsIFtcYmFzZV0KKyNlbmRpZiAvKiBDT05GSUdfTVhDX1RaSUMgKi8KIAkuZW5kbQogCiAJLm1hY3JvICBhcmNoX3JldF90b191c2VyLCB0bXAxLCB0bXAyCkBAIC0zMiw2ICszNyw3IEBACiAJQCBhbmQgcmV0dXJucyBpdHMgbnVtYmVyIGluIGlycW5yCiAJQCBhbmQgcmV0dXJucyBpZiBhbiBpbnRlcnJ1cHQgb2NjdXJlZCBpbiBpcnFzdGF0CiAJLm1hY3JvCWdldF9pcnFucl9hbmRfYmFzZSwgaXJxbnIsIGlycXN0YXQsIGJhc2UsIHRtcAorI2lmbmRlZiBDT05GSUdfTVhDX1RaSUMKIAlAIExvYWQgb2Zmc2V0ICYgcHJpb3JpdHkgb2YgdGhlIGhpZ2hlc3QgcHJpb3JpdHkKIAlAIGludGVycnVwdCBwZW5kaW5nIGZyb20gQVZJQ19OSVZFQ1NSCiAJbGRyCVxpcnFzdGF0LCBbXGJhc2UsICMweDQwXQpAQCAtNDUsNiArNTEsMzIgQEAKIAlzdHJuZQlcdG1wLCBbXGJhc2UsICNBVklDX05JTUFTS10KIAlzdHJlcQlyNCwgW1xiYXNlLCAjQVZJQ19OSU1BU0tdCiAjZW5kaWYKKyNlbGlmIGRlZmluZWQgQ09ORklHX01YQ19UWklDCisJQCBMb2FkIG9mZnNldCAmIHByaW9yaXR5IG9mIHRoZSBoaWdoZXN0IHByaW9yaXR5CisJQCBpbnRlcnJ1cHQgcGVuZGluZy4KKwlAIDB4RDgwIGlzIEhJUE5EMCByZWdpc3RlcgorCW1vdiAgICAgXGlycW5yLCAjMAorCW1vdiAgICAgXGlycXN0YXQsICMweDBEODAKKzEwMDA6CisJbGRyICAgICBcdG1wLCAgIFtcaXJxc3RhdCwgXGJhc2VdCisJY21wICAgICBcdG1wLCAjMAorCWJuZSAgICAgMTAwMWYKKwlhZGRlcSAgIFxpcnFuciwgXGlycW5yLCAjMzIKKwlhZGRlcSAgIFxpcnFzdGF0LCBcaXJxc3RhdCwgIzQKKwljbXAgICAgIFxpcnFuciwgIzEyOAorCWJsbyAgICAgMTAwMGIKKwliICAgICAgIDIwMDFmCisxMDAxOgltb3YgICAgIFxpcnFzdGF0LCAjMQorMTAwMjoJdHN0ICAgICBcdG1wLCBcaXJxc3RhdAorCWJuZSAgICAgMjAwMmYKKwltb3ZzICAgIFx0bXAsIFx0bXAsIGxzciAjMQorCWFkZG5lICAgXGlycW5yLCBcaXJxbnIsICMxCisJYm5lICAgICAxMDAyYgorMjAwMToKKwltb3YgIFxpcnFuciwgIzAKKzIwMDI6CisJbW92cyBcaXJxbnIsIFxpcnFucgorI2VuZGlmCiAJLmVuZG0KIAogCUAgaXJxIHByaW9yaXR5IHRhYmxlIChub3QgdXNlZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9oYXJkd2FyZS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKaW5kZXggNzhkYjc1NC4uZWJhZGY0YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2hhcmR3YXJlLmgKQEAgLTIyLDYgKzIyLDE1IEBACiAKICNpbmNsdWRlIDxhc20vc2l6ZXMuaD4KIAorI2RlZmluZSBJTVhfSU9fQUREUkVTUyhhZGRyLCBtb2R1bGUpCQkJCQlcCisJKCh2b2lkIF9fZm9yY2UgX19pb21lbSAqKQkJCQkJXAorCSAoKCh1bnNpZ25lZCBsb25nKSgoYWRkcikgLSAobW9kdWxlICMjIF9CQVNFX0FERFIpKSA8IG1vZHVsZSAjIyBfU0laRSkgP1wKKwkgKGFkZHIpIC0gKG1vZHVsZSAjIyBfQkFTRV9BRERSKSArIChtb2R1bGUgIyMgX0JBU0VfQUREUl9WSVJUKSA6IDApKQorCisjaWZkZWYgQ09ORklHX0FSQ0hfTVg1CisjaW5jbHVkZSA8bWFjaC9teDUxLmg+CisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19BUkNIX01YMwogI2luY2x1ZGUgPG1hY2gvbXgzeC5oPgogI2luY2x1ZGUgPG1hY2gvbXgzMS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MS5oCmluZGV4IGJmMjMzMDUuLjZiMTUwN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDEuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgxLmgKQEAgLTEsMTY2ICsxLDE1NSBAQAogLyoKLSogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IFNhc2NoYSBIYXVlciA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgotKgotKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0qIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCi0qIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKgotKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCi0qIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSovCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggYnkgU2FzY2hhIEhhdWVyIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKyNpZm5kZWYgX19NQUNIX0lPTVVYX01YMV9IX18KKyNkZWZpbmUgX19NQUNIX0lPTVVYX01YMV9IX18KIAotI2lmbmRlZiBfTVhDX0lPTVVYX01YMV9ICi0jZGVmaW5lIF9NWENfSU9NVVhfTVgxX0gKKyNpbmNsdWRlIDxtYWNoL2lvbXV4LXYxLmg+CiAKLSNpZm5kZWYgR1BJT19QT1JUQQotI2Vycm9yIFBsZWFzZSBpbmNsdWRlIG1hY2gvaW9tdXguaAotI2VuZGlmCisjZGVmaW5lIFBBMF9BSU5fU1BJMl9DTEsJKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMCkKKyNkZWZpbmUgUEEwX0FGX0VUTVRSQUNFU1lOQwkoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAwKQorI2RlZmluZSBQQTFfQU9VVF9TUEkyX1JYRAkoR1BJT19QT1JUQSB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxKQorI2RlZmluZSBQQTFfUEZfVElOCQkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxKQorI2RlZmluZSBQQTJfUEZfUFdNMAkJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyKQorI2RlZmluZSBQQTNfUEZfQ1NJX01DTEsJCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IDMpCisjZGVmaW5lIFBBNF9QRl9DU0lfRDAJCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IDQpCisjZGVmaW5lIFBBNV9QRl9DU0lfRDEJCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IDUpCisjZGVmaW5lIFBBNl9QRl9DU0lfRDIJCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IDYpCisjZGVmaW5lIFBBN19QRl9DU0lfRDMJCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IDcpCisjZGVmaW5lIFBBOF9QRl9DU0lfRDQJCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IDgpCisjZGVmaW5lIFBBOV9QRl9DU0lfRDUJCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IDkpCisjZGVmaW5lIFBBMTBfUEZfQ1NJX0Q2CQkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxMCkKKyNkZWZpbmUgUEExMV9QRl9DU0lfRDcJCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IDExKQorI2RlZmluZSBQQTEyX1BGX0NTSV9WU1lOQwkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxMikKKyNkZWZpbmUgUEExM19QRl9DU0lfSFNZTkMJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMTMpCisjZGVmaW5lIFBBMTRfUEZfQ1NJX1BJWENMSwkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxNCkKKyNkZWZpbmUgUEExNV9QRl9JMkNfU0RBCQkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE1KQorI2RlZmluZSBQQTE2X1BGX0kyQ19TQ0wJCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTYpCisjZGVmaW5lIFBBMTdfQUZfRVRNVFJBQ0VQS1Q0CShHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE3KQorI2RlZmluZSBQQTE3X0FJTl9TUEkyX1NTCShHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDE3KQorI2RlZmluZSBQQTE4X0FGX0VUTVRSQUNFUEtUNQkoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxOCkKKyNkZWZpbmUgUEExOV9BRl9FVE1UUkFDRVBLVDYJKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTkpCisjZGVmaW5lIFBBMjBfQUZfRVRNVFJBQ0VQS1Q3CShHUElPX1BPUlRBIHwgR1BJT19BRiB8IDIwKQorI2RlZmluZSBQQTIxX1BGX0EwCQkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyMSkKKyNkZWZpbmUgUEEyMl9QRl9DUzQJCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IDIyKQorI2RlZmluZSBQQTIzX1BGX0NTNQkJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjMpCisjZGVmaW5lIFBBMjRfUEZfQTE2CQkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyNCkKKyNkZWZpbmUgUEEyNF9BRl9FVE1UUkFDRVBLVDAJKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjQpCisjZGVmaW5lIFBBMjVfUEZfQTE3CQkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyNSkKKyNkZWZpbmUgUEEyNV9BRl9FVE1UUkFDRVBLVDEJKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjUpCisjZGVmaW5lIFBBMjZfUEZfQTE4CQkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyNikKKyNkZWZpbmUgUEEyNl9BRl9FVE1UUkFDRVBLVDIJKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjYpCisjZGVmaW5lIFBBMjdfUEZfQTE5CQkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyNykKKyNkZWZpbmUgUEEyN19BRl9FVE1UUkFDRVBLVDMJKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjcpCisjZGVmaW5lIFBBMjhfUEZfQTIwCQkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyOCkKKyNkZWZpbmUgUEEyOF9BRl9FVE1QSVBFU1RBVDAJKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjgpCisjZGVmaW5lIFBBMjlfUEZfQTIxCQkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyOSkKKyNkZWZpbmUgUEEyOV9BRl9FVE1QSVBFU1RBVDEJKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjkpCisjZGVmaW5lIFBBMzBfUEZfQTIyCQkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAzMCkKKyNkZWZpbmUgUEEzMF9BRl9FVE1QSVBFU1RBVDIJKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMzApCisjZGVmaW5lIFBBMzFfUEZfQTIzCQkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAzMSkKKyNkZWZpbmUgUEEzMV9BRl9FVE1UUkFDRUNMSwkoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAzMSkKKyNkZWZpbmUgUEI4X1BGX1NEX0RBVDAJCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fUFVFTiB8IDgpCisjZGVmaW5lIFBCOF9BRl9NU19QSU8JCShHUElPX1BPUlRCIHwgR1BJT19BRiB8IDgpCisjZGVmaW5lIFBCOV9QRl9TRF9EQVQxCQkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX1BVRU4gfCA5KQorI2RlZmluZSBQQjlfQUZfTVNfUEkxCQkoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCA5KQorI2RlZmluZSBQQjEwX1BGX1NEX0RBVDIJCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fUFVFTiB8IDEwKQorI2RlZmluZSBQQjEwX0FGX01TX1NDTEtJCShHUElPX1BPUlRCIHwgR1BJT19BRiB8IDEwKQorI2RlZmluZSBQQjExX1BGX1NEX0RBVDMJCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDExKQorI2RlZmluZSBQQjExX0FGX01TX1NESU8JCShHUElPX1BPUlRCIHwgR1BJT19BRiB8IDExKQorI2RlZmluZSBQQjEyX1BGX1NEX0NMSwkJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMTIpCisjZGVmaW5lIFBCMTJfQUZfTVNfU0NMSzAJKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTIpCisjZGVmaW5lIFBCMTNfUEZfU0RfQ01ECQkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX1BVRU4gfCAxMykKKyNkZWZpbmUgUEIxM19BRl9NU19CUwkJKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTMpCisjZGVmaW5lIFBCMTRfQUZfU1NJX1JYRlMJKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTQpCisjZGVmaW5lIFBCMTVfQUZfU1NJX1JYQ0xLCShHUElPX1BPUlRCIHwgR1BJT19BRiB8IDE1KQorI2RlZmluZSBQQjE2X0FGX1NTSV9SWERBVAkoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX0lOIHwgMTYpCisjZGVmaW5lIFBCMTdfQUZfU1NJX1RYREFUCShHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgMTcpCisjZGVmaW5lIFBCMThfQUZfU1NJX1RYRlMJKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTgpCisjZGVmaW5lIFBCMTlfQUZfU1NJX1RYQ0xLCShHUElPX1BPUlRCIHwgR1BJT19BRiB8IDE5KQorI2RlZmluZSBQQjIwX1BGX1VTQkRfQUZFCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIwKQorI2RlZmluZSBQQjIxX1BGX1VTQkRfT0UJCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIxKQorI2RlZmluZSBQQjIyX1BGX1VTQkRfUkNWCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIyKQorI2RlZmluZSBQQjIzX1BGX1VTQkRfU1VTUE5ECShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIzKQorI2RlZmluZSBQQjI0X1BGX1VTQkRfVlAJCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI0KQorI2RlZmluZSBQQjI1X1BGX1VTQkRfVk0JCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI1KQorI2RlZmluZSBQQjI2X1BGX1VTQkRfVlBPCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI2KQorI2RlZmluZSBQQjI3X1BGX1VTQkRfVk1PCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI3KQorI2RlZmluZSBQQjI4X1BGX1VBUlQyX0NUUwkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI4KQorI2RlZmluZSBQQjI5X1BGX1VBUlQyX1JUUwkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMjkpCisjZGVmaW5lIFBCMzBfUEZfVUFSVDJfVFhECShHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMzApCisjZGVmaW5lIFBCMzFfUEZfVUFSVDJfUlhECShHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAzMSkKKyNkZWZpbmUgUEMzX1BGX1NTSV9SWEZTCQkoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAzKQorI2RlZmluZSBQQzRfUEZfU1NJX1JYQ0xLCShHUElPX1BPUlRDIHwgR1BJT19QRiB8IDQpCisjZGVmaW5lIFBDNV9QRl9TU0lfUlhEQVQJKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDUpCisjZGVmaW5lIFBDNl9QRl9TU0lfVFhEQVQJKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA2KQorI2RlZmluZSBQQzdfUEZfU1NJX1RYRlMJCShHUElPX1BPUlRDIHwgR1BJT19QRiB8IDcpCisjZGVmaW5lIFBDOF9QRl9TU0lfVFhDTEsJKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgOCkKKyNkZWZpbmUgUEM5X1BGX1VBUlQxX0NUUwkoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDkpCisjZGVmaW5lIFBDMTBfUEZfVUFSVDFfUlRTCShHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAxMCkKKyNkZWZpbmUgUEMxMV9QRl9VQVJUMV9UWEQJKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMSkKKyNkZWZpbmUgUEMxMl9QRl9VQVJUMV9SWEQJKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDEyKQorI2RlZmluZSBQQzEzX1BGX1NQSTFfU1BJX1JEWQkoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxMykKKyNkZWZpbmUgUEMxNF9QRl9TUEkxX1NDTEsJKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTQpCisjZGVmaW5lIFBDMTVfUEZfU1BJMV9TUwkJKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTUpCisjZGVmaW5lIFBDMTZfUEZfU1BJMV9NSVNPCShHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE2KQorI2RlZmluZSBQQzE3X1BGX1NQSTFfTU9TSQkoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNykKKyNkZWZpbmUgUEMyNF9CSU5fVUFSVDNfUkkJKEdQSU9fUE9SVEMgfCBHUElPX0JJTiB8IEdQSU9fT1VUIHwgMjQpCisjZGVmaW5lIFBDMjVfQklOX1VBUlQzX0RTUgkoR1BJT19QT1JUQyB8IEdQSU9fQklOIHwgR1BJT19PVVQgfCAyNSkKKyNkZWZpbmUgUEMyNl9BT1VUX1VBUlQzX0RUUgkoR1BJT19QT1JUQyB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAyNikKKyNkZWZpbmUgUEMyN19CSU5fVUFSVDNfRENECShHUElPX1BPUlRDIHwgR1BJT19CSU4gfCBHUElPX09VVCB8IDI3KQorI2RlZmluZSBQQzI4X0JJTl9VQVJUM19DVFMJKEdQSU9fUE9SVEMgfCBHUElPX0JJTiB8IEdQSU9fT1VUIHwgMjgpCisjZGVmaW5lIFBDMjlfQU9VVF9VQVJUM19SVFMJKEdQSU9fUE9SVEMgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMjkpCisjZGVmaW5lIFBDMzBfQklOX1VBUlQzX1RYCShHUElPX1BPUlRDIHwgR1BJT19CSU4gfCAzMCkKKyNkZWZpbmUgUEMzMV9BT1VUX1VBUlQzX1JYCShHUElPX1BPUlRDIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDMxKQorI2RlZmluZSBQRDZfUEZfTFNDTEsJCShHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgNikKKyNkZWZpbmUgUEQ3X1BGX1JFVgkJKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgNykKKyNkZWZpbmUgUEQ3X0FGX1VBUlQyX0RUUgkoR1BJT19QT1JURCB8IEdQSU9fQUYgfCBHUElPX0lOIHwgNykKKyNkZWZpbmUgUEQ3X0FJTl9TUEkyX1NDTEsJKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IDcpCisjZGVmaW5lIFBEOF9QRl9DTFMJCShHUElPX1BPUlREIHwgR1BJT19QRiB8IDgpCisjZGVmaW5lIFBEOF9BRl9VQVJUMl9EQ0QJKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgR1BJT19PVVQgfCA4KQorI2RlZmluZSBQRDhfQUlOX1NQSTJfU1MJCShHUElPX1BPUlREIHwgR1BJT19BSU4gfCA4KQorI2RlZmluZSBQRDlfUEZfUFMJCShHUElPX1BPUlREIHwgR1BJT19QRiB8IDkpCisjZGVmaW5lIFBEOV9BRl9VQVJUMl9SSQkJKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgR1BJT19PVVQgfCA5KQorI2RlZmluZSBQRDlfQU9VVF9TUEkyX1JYRAkoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA5KQorI2RlZmluZSBQRDEwX1BGX1NQTF9TUFIJCShHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTApCisjZGVmaW5lIFBEMTBfQUZfVUFSVDJfRFNSCShHUElPX1BPUlREIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgMTApCisjZGVmaW5lIFBEMTBfQUlOX1NQSTJfVFhECShHUElPX1BPUlREIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDEwKQorI2RlZmluZSBQRDExX1BGX0NPTlRSQVNUCShHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTEpCisjZGVmaW5lIFBEMTJfUEZfQUNEX09FCQkoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEyKQorI2RlZmluZSBQRDEzX1BGX0xQX0hTWU5DCShHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTMpCisjZGVmaW5lIFBEMTRfUEZfRkxNX1ZTWU5DCShHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTQpCisjZGVmaW5lIFBEMTVfUEZfTEQwCQkoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE1KQorI2RlZmluZSBQRDE2X1BGX0xEMQkJKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNikKKyNkZWZpbmUgUEQxN19QRl9MRDIJCShHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTcpCisjZGVmaW5lIFBEMThfUEZfTEQzCQkoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE4KQorI2RlZmluZSBQRDE5X1BGX0xENAkJKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxOSkKKyNkZWZpbmUgUEQyMF9QRl9MRDUJCShHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjApCisjZGVmaW5lIFBEMjFfUEZfTEQ2CQkoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDIxKQorI2RlZmluZSBQRDIyX1BGX0xENwkJKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMikKKyNkZWZpbmUgUEQyM19QRl9MRDgJCShHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjMpCisjZGVmaW5lIFBEMjRfUEZfTEQ5CQkoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI0KQorI2RlZmluZSBQRDI1X1BGX0xEMTAJCShHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjUpCisjZGVmaW5lIFBEMjZfUEZfTEQxMQkJKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNikKKyNkZWZpbmUgUEQyN19QRl9MRDEyCQkoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI3KQorI2RlZmluZSBQRDI4X1BGX0xEMTMJCShHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjgpCisjZGVmaW5lIFBEMjlfUEZfTEQxNAkJKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyOSkKKyNkZWZpbmUgUEQzMF9QRl9MRDE1CQkoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDMwKQorI2RlZmluZSBQRDMxX1BGX1RNUjJPVVQJCShHUElPX1BPUlREIHwgR1BJT19QRiB8IDMxKQorI2RlZmluZSBQRDMxX0JJTl9TUEkyX1RYRAkoR1BJT19QT1JURCB8IEdQSU9fQklOIHwgMzEpCiAKLS8qIEZJWE1FOiBUaGlzIGxpc3QgaXMgbm90IGNvbXBsZXRlZC4gVGhlIGNvcnJlY3QgZGlyZWN0aW9ucyBhcmUKLSogbWlzc2luZyBvbiBzb21lIChtYW55KSBwaW5zCi0qLwotCi0KLS8qIFByaW1hcnkgR1BJTyBwaW4gZnVuY3Rpb25zICovCi0KLSNkZWZpbmUgUEEwX0FJTl9TUEkyX0NMSyAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMCkKLSNkZWZpbmUgUEEwX0FGX0VUTVRSQUNFU1lOQyAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMCkKLSNkZWZpbmUgUEExX0FPVVRfU1BJMl9SWEQgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMSkKLSNkZWZpbmUgUEExX1BGX1RJTiAgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMSkKLSNkZWZpbmUgUEEyX1BGX1BXTTAgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyKQotI2RlZmluZSBQQTNfUEZfQ1NJX01DTEsgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAzKQotI2RlZmluZSBQQTRfUEZfQ1NJX0QwICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA0KQotI2RlZmluZSBQQTVfUEZfQ1NJX0QxICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA1KQotI2RlZmluZSBQQTZfUEZfQ1NJX0QyICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA2KQotI2RlZmluZSBQQTdfUEZfQ1NJX0QzICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA3KQotI2RlZmluZSBQQThfUEZfQ1NJX0Q0ICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA4KQotI2RlZmluZSBQQTlfUEZfQ1NJX0Q1ICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA5KQotI2RlZmluZSBQQTEwX1BGX0NTSV9ENiAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxMCkKLSNkZWZpbmUgUEExMV9QRl9DU0lfRDcgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMTEpCi0jZGVmaW5lIFBBMTJfUEZfQ1NJX1ZTWU5DICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDEyKQotI2RlZmluZSBQQTEzX1BGX0NTSV9IU1lOQyAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAxMykKLSNkZWZpbmUgUEExNF9QRl9DU0lfUElYQ0xLICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMTQpCi0jZGVmaW5lIFBBMTVfUEZfSTJDX1NEQSAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTUpCi0jZGVmaW5lIFBBMTZfUEZfSTJDX1NDTCAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTYpCi0jZGVmaW5lIFBBMTdfQUZfRVRNVFJBQ0VQS1Q0ICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE3KQotI2RlZmluZSBQQTE3X0FJTl9TUEkyX1NTICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxNykKLSNkZWZpbmUgUEExOF9BRl9FVE1UUkFDRVBLVDUgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTgpCi0jZGVmaW5lIFBBMTlfQUZfRVRNVFJBQ0VQS1Q2ICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE5KQotI2RlZmluZSBQQTIwX0FGX0VUTVRSQUNFUEtUNyAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyMCkKLSNkZWZpbmUgUEEyMV9QRl9BMCAgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjEpCi0jZGVmaW5lIFBBMjJfUEZfQ1M0ICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDIyKQotI2RlZmluZSBQQTIzX1BGX0NTNSAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyMykKLSNkZWZpbmUgUEEyNF9QRl9BMTYgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjQpCi0jZGVmaW5lIFBBMjRfQUZfRVRNVFJBQ0VQS1QwICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDI0KQotI2RlZmluZSBQQTI1X1BGX0ExNyAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyNSkKLSNkZWZpbmUgUEEyNV9BRl9FVE1UUkFDRVBLVDEgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjUpCi0jZGVmaW5lIFBBMjZfUEZfQTE4ICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDI2KQotI2RlZmluZSBQQTI2X0FGX0VUTVRSQUNFUEtUMiAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyNikKLSNkZWZpbmUgUEEyN19QRl9BMTkgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMjcpCi0jZGVmaW5lIFBBMjdfQUZfRVRNVFJBQ0VQS1QzICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDI3KQotI2RlZmluZSBQQTI4X1BGX0EyMCAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAyOCkKLSNkZWZpbmUgUEEyOF9BRl9FVE1QSVBFU1RBVDAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjgpCi0jZGVmaW5lIFBBMjlfUEZfQTIxICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IDI5KQotI2RlZmluZSBQQTI5X0FGX0VUTVBJUEVTVEFUMSAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyOSkKLSNkZWZpbmUgUEEzMF9QRl9BMjIgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMzApCi0jZGVmaW5lIFBBMzBfQUZfRVRNUElQRVNUQVQyICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDMwKQotI2RlZmluZSBQQTMxX1BGX0EyMyAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCAzMSkKLSNkZWZpbmUgUEEzMV9BRl9FVE1UUkFDRUNMSyAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMzEpCi0jZGVmaW5lIFBCOF9QRl9TRF9EQVQwICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fUFVFTiB8IDgpCi0jZGVmaW5lIFBCOF9BRl9NU19QSU8gICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDgpCi0jZGVmaW5lIFBCOV9QRl9TRF9EQVQxICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fUFVFTiB8IDkpCi0jZGVmaW5lIFBCOV9BRl9NU19QSTEgICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDkpCi0jZGVmaW5lIFBCMTBfUEZfU0RfREFUMiAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fUFVFTiB8IDEwKQotI2RlZmluZSBQQjEwX0FGX01TX1NDTEtJICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxMCkKLSNkZWZpbmUgUEIxMV9QRl9TRF9EQVQzICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMTEpCi0jZGVmaW5lIFBCMTFfQUZfTVNfU0RJTyAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDExKQotI2RlZmluZSBQQjEyX1BGX1NEX0NMSyAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAxMikKLSNkZWZpbmUgUEIxMl9BRl9NU19TQ0xLMCAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTIpCi0jZGVmaW5lIFBCMTNfUEZfU0RfQ01EICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fUFVFTiB8IDEzKQotI2RlZmluZSBQQjEzX0FGX01TX0JTICAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxMykKLSNkZWZpbmUgUEIxNF9BRl9TU0lfUlhGUyAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgMTQpCi0jZGVmaW5lIFBCMTVfQUZfU1NJX1JYQ0xLICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDE1KQotI2RlZmluZSBQQjE2X0FGX1NTSV9SWERBVCAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX0lOIHwgMTYpCi0jZGVmaW5lIFBCMTdfQUZfU1NJX1RYREFUICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgMTcpCi0jZGVmaW5lIFBCMThfQUZfU1NJX1RYRlMgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IDE4KQotI2RlZmluZSBQQjE5X0FGX1NTSV9UWENMSyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCAxOSkKLSNkZWZpbmUgUEIyMF9QRl9VU0JEX0FGRSAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjApCi0jZGVmaW5lIFBCMjFfUEZfVVNCRF9PRSAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIxKQotI2RlZmluZSBQQjIyX1BGX1VTQkRfUkNWICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyMikKLSNkZWZpbmUgUEIyM19QRl9VU0JEX1NVU1BORCAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjMpCi0jZGVmaW5lIFBCMjRfUEZfVVNCRF9WUCAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI0KQotI2RlZmluZSBQQjI1X1BGX1VTQkRfVk0gICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNSkKLSNkZWZpbmUgUEIyNl9QRl9VU0JEX1ZQTyAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjYpCi0jZGVmaW5lIFBCMjdfUEZfVVNCRF9WTU8gICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI3KQotI2RlZmluZSBQQjI4X1BGX1VBUlQyX0NUUyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI4KQotI2RlZmluZSBQQjI5X1BGX1VBUlQyX1JUUyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMjkpCi0jZGVmaW5lIFBCMzBfUEZfVUFSVDJfVFhEICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMzApCi0jZGVmaW5lIFBCMzFfUEZfVUFSVDJfUlhEICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAzMSkKLSNkZWZpbmUgUEMzX1BGX1NTSV9SWEZTICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMykKLSNkZWZpbmUgUEM0X1BGX1NTSV9SWENMSyAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgNCkKLSNkZWZpbmUgUEM1X1BGX1NTSV9SWERBVCAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDUpCi0jZGVmaW5lIFBDNl9QRl9TU0lfVFhEQVQgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgNikKLSNkZWZpbmUgUEM3X1BGX1NTSV9UWEZTICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgNykKLSNkZWZpbmUgUEM4X1BGX1NTSV9UWENMSyAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgOCkKLSNkZWZpbmUgUEM5X1BGX1VBUlQxX0NUUyAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA5KQotI2RlZmluZSBQQzEwX1BGX1VBUlQxX1JUUyAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMTApCi0jZGVmaW5lIFBDMTFfUEZfVUFSVDFfVFhEICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTEpCi0jZGVmaW5lIFBDMTJfUEZfVUFSVDFfUlhEICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAxMikKLSNkZWZpbmUgUEMxM19QRl9TUEkxX1NQSV9SRFkgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTMpCi0jZGVmaW5lIFBDMTRfUEZfU1BJMV9TQ0xLICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE0KQotI2RlZmluZSBQQzE1X1BGX1NQSTFfU1MgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNSkKLSNkZWZpbmUgUEMxNl9QRl9TUEkxX01JU08gICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTYpCi0jZGVmaW5lIFBDMTdfUEZfU1BJMV9NT1NJICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE3KQotI2RlZmluZSBQQzI0X0JJTl9VQVJUM19SSSAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQklOIHwgR1BJT19PVVQgfCAyNCkKLSNkZWZpbmUgUEMyNV9CSU5fVUFSVDNfRFNSICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0JJTiB8IEdQSU9fT1VUIHwgMjUpCi0jZGVmaW5lIFBDMjZfQU9VVF9VQVJUM19EVFIgICAgIChHUElPX1BPUlRDIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDI2KQotI2RlZmluZSBQQzI3X0JJTl9VQVJUM19EQ0QgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQklOIHwgR1BJT19PVVQgfCAyNykKLSNkZWZpbmUgUEMyOF9CSU5fVUFSVDNfQ1RTICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0JJTiB8IEdQSU9fT1VUIHwgMjgpCi0jZGVmaW5lIFBDMjlfQU9VVF9VQVJUM19SVFMgICAgIChHUElPX1BPUlRDIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDI5KQotI2RlZmluZSBQQzMwX0JJTl9VQVJUM19UWCAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQklOIHwgMzApCi0jZGVmaW5lIFBDMzFfQU9VVF9VQVJUM19SWCAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDMxKQotI2RlZmluZSBQRDZfUEZfTFNDTEsgICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDYpCi0jZGVmaW5lIFBEN19QRl9SRVYgICAgICAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDcpCi0jZGVmaW5lIFBEN19BRl9VQVJUMl9EVFIgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IEdQSU9fSU4gfCA3KQotI2RlZmluZSBQRDdfQUlOX1NQSTJfU0NMSyAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgNykKLSNkZWZpbmUgUEQ4X1BGX0NMUyAgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgOCkKLSNkZWZpbmUgUEQ4X0FGX1VBUlQyX0RDRCAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgR1BJT19PVVQgfCA4KQotI2RlZmluZSBQRDhfQUlOX1NQSTJfU1MgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgOCkKLSNkZWZpbmUgUEQ5X1BGX1BTICAgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgOSkKLSNkZWZpbmUgUEQ5X0FGX1VBUlQyX1JJICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgR1BJT19PVVQgfCA5KQotI2RlZmluZSBQRDlfQU9VVF9TUEkyX1JYRCAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA5KQotI2RlZmluZSBQRDEwX1BGX1NQTF9TUFIgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEwKQotI2RlZmluZSBQRDEwX0FGX1VBUlQyX0RTUiAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDEwKQotI2RlZmluZSBQRDEwX0FJTl9TUEkyX1RYRCAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxMCkKLSNkZWZpbmUgUEQxMV9QRl9DT05UUkFTVCAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMSkKLSNkZWZpbmUgUEQxMl9QRl9BQ0RfT0UgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMikKLSNkZWZpbmUgUEQxM19QRl9MUF9IU1lOQyAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMykKLSNkZWZpbmUgUEQxNF9QRl9GTE1fVlNZTkMgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNCkKLSNkZWZpbmUgUEQxNV9QRl9MRDAgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNSkKLSNkZWZpbmUgUEQxNl9QRl9MRDEgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNikKLSNkZWZpbmUgUEQxN19QRl9MRDIgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNykKLSNkZWZpbmUgUEQxOF9QRl9MRDMgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxOCkKLSNkZWZpbmUgUEQxOV9QRl9MRDQgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxOSkKLSNkZWZpbmUgUEQyMF9QRl9MRDUgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMCkKLSNkZWZpbmUgUEQyMV9QRl9MRDYgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMSkKLSNkZWZpbmUgUEQyMl9QRl9MRDcgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMikKLSNkZWZpbmUgUEQyM19QRl9MRDggICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMykKLSNkZWZpbmUgUEQyNF9QRl9MRDkgICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNCkKLSNkZWZpbmUgUEQyNV9QRl9MRDEwICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNSkKLSNkZWZpbmUgUEQyNl9QRl9MRDExICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNikKLSNkZWZpbmUgUEQyN19QRl9MRDEyICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNykKLSNkZWZpbmUgUEQyOF9QRl9MRDEzICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyOCkKLSNkZWZpbmUgUEQyOV9QRl9MRDE0ICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyOSkKLSNkZWZpbmUgUEQzMF9QRl9MRDE1ICAgICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAzMCkKLSNkZWZpbmUgUEQzMV9QRl9UTVIyT1VUICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMzEpCi0jZGVmaW5lIFBEMzFfQklOX1NQSTJfVFhEICAgICAgIChHUElPX1BPUlREIHwgR1BJT19CSU4gfCAzMSkKLQotCi0jZW5kaWYKKyNlbmRpZiAvKiBpZm5kZWYgX19NQUNIX0lPTVVYX01YMV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDIxLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyMS5oCmluZGV4IDYzYWFhOTcuLjE0OTVkZmQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDIxLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MjEuaApAQCAtMSwxMjYgKzEsMTIyIEBACiAvKgotKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgSG9sZ2VyIFNjaHVyaWcgPGhzNDIzM0BtYWlsLm1uLXNvbHV0aW9ucy5kZT4KLSoKLSogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0qIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0qIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSoKLSogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAotKiBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLworICogQ29weXJpZ2h0IChDKSAyMDA5IGJ5IEhvbGdlciBTY2h1cmlnIDxoczQyMzNAbWFpbC5tbi1zb2x1dGlvbnMuZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKyNpZm5kZWYgX19NQUNIX0lPTVVYX01YMjFfSF9fCisjZGVmaW5lIF9fTUFDSF9JT01VWF9NWDIxX0hfXwogCi0jaWZuZGVmIF9NWENfSU9NVVhfTVgyMV9ICi0jZGVmaW5lIF9NWENfSU9NVVhfTVgyMV9ICi0KLSNpZm5kZWYgR1BJT19QT1JUQQotI2Vycm9yIFBsZWFzZSBpbmNsdWRlIG1hY2gvaW9tdXguaAotI2VuZGlmCi0KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MnguaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LXYxLmg+CiAKIC8qIFByaW1hcnkgR1BJTyBwaW4gZnVuY3Rpb25zICovCiAKLSNkZWZpbmUgUEIyMl9QRl9VU0JIMV9CWVAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjIpCi0jZGVmaW5lIFBCMjVfUEZfVVNCSDFfT04gICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI1KQotI2RlZmluZSBQQzVfUEZfVVNCT1RHX1NEQSAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA1KQotI2RlZmluZSBQQzZfUEZfVVNCT1RHX1NDTCAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA2KQotI2RlZmluZSBQQzdfUEZfVVNCT1RHX09OICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA3KQotI2RlZmluZSBQQzhfUEZfVVNCT1RHX0ZTICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA4KQotI2RlZmluZSBQQzlfUEZfVVNCT1RHX09FICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA5KQotI2RlZmluZSBQQzEwX1BGX1VTQk9UR19UWERNICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxMCkKLSNkZWZpbmUgUEMxMV9QRl9VU0JPVEdfVFhEUCAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTEpCi0jZGVmaW5lIFBDMTJfUEZfVVNCT1RHX1JYRE0gICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDEyKQotI2RlZmluZSBQQzEzX1BGX1VTQk9UR19SWERQICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxMykKLSNkZWZpbmUgUEMxNl9QRl9TQVBfRlMgICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTYpCi0jZGVmaW5lIFBDMTdfUEZfU0FQX1JYRCAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE3KQotI2RlZmluZSBQQzE4X1BGX1NBUF9UWEQgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxOCkKLSNkZWZpbmUgUEMxOV9QRl9TQVBfQ0xLICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTkpCi0jZGVmaW5lIFBFMF9QRl9URVNUX1dCMiAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IDApCi0jZGVmaW5lIFBFMV9QRl9URVNUX1dCMSAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IDEpCi0jZGVmaW5lIFBFMl9QRl9URVNUX1dCMCAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IDIpCi0jZGVmaW5lIFBGMV9QRl9ORkNFICAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDEpCi0jZGVmaW5lIFBGM19QRl9ORkNMRSAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDMpCi0jZGVmaW5lIFBGN19QRl9ORklPMCAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDcpCi0jZGVmaW5lIFBGOF9QRl9ORklPMSAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDgpCi0jZGVmaW5lIFBGOV9QRl9ORklPMiAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDkpCi0jZGVmaW5lIFBGMTBfUEZfTkZJTzMgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDEwKQotI2RlZmluZSBQRjExX1BGX05GSU80ICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxMSkKLSNkZWZpbmUgUEYxMl9QRl9ORklPNSAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTIpCi0jZGVmaW5lIFBGMTNfUEZfTkZJTzYgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDEzKQotI2RlZmluZSBQRjE0X1BGX05GSU83ICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxNCkKLSNkZWZpbmUgUEYxNl9QRl9SRVMgICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTYpCisjZGVmaW5lIFBCMjJfUEZfVVNCSDFfQllQCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDIyKQorI2RlZmluZSBQQjI1X1BGX1VTQkgxX09OCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI1KQorI2RlZmluZSBQQzVfUEZfVVNCT1RHX1NEQQkoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA1KQorI2RlZmluZSBQQzZfUEZfVVNCT1RHX1NDTAkoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA2KQorI2RlZmluZSBQQzdfUEZfVVNCT1RHX09OCShHUElPX1BPUlRDIHwgR1BJT19QRiB8IDcpCisjZGVmaW5lIFBDOF9QRl9VU0JPVEdfRlMJKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgOCkKKyNkZWZpbmUgUEM5X1BGX1VTQk9UR19PRQkoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCA5KQorI2RlZmluZSBQQzEwX1BGX1VTQk9UR19UWERNCShHUElPX1BPUlRDIHwgR1BJT19QRiB8IDEwKQorI2RlZmluZSBQQzExX1BGX1VTQk9UR19UWERQCShHUElPX1BPUlRDIHwgR1BJT19QRiB8IDExKQorI2RlZmluZSBQQzEyX1BGX1VTQk9UR19SWERNCShHUElPX1BPUlRDIHwgR1BJT19QRiB8IDEyKQorI2RlZmluZSBQQzEzX1BGX1VTQk9UR19SWERQCShHUElPX1BPUlRDIHwgR1BJT19QRiB8IDEzKQorI2RlZmluZSBQQzE2X1BGX1NBUF9GUwkJKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTYpCisjZGVmaW5lIFBDMTdfUEZfU0FQX1JYRAkJKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTcpCisjZGVmaW5lIFBDMThfUEZfU0FQX1RYRAkJKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTgpCisjZGVmaW5lIFBDMTlfUEZfU0FQX0NMSwkJKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTkpCisjZGVmaW5lIFBFMF9QRl9URVNUX1dCMgkJKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMCkKKyNkZWZpbmUgUEUxX1BGX1RFU1RfV0IxCQkoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAxKQorI2RlZmluZSBQRTJfUEZfVEVTVF9XQjAJCShHUElPX1BPUlRFIHwgR1BJT19QRiB8IDIpCisjZGVmaW5lIFBGMV9QRl9ORkNFCQkoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxKQorI2RlZmluZSBQRjNfUEZfTkZDTEUJCShHUElPX1BPUlRGIHwgR1BJT19QRiB8IDMpCisjZGVmaW5lIFBGN19QRl9ORklPMAkJKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgNykKKyNkZWZpbmUgUEY4X1BGX05GSU8xCQkoR1BJT19QT1JURiB8IEdQSU9fUEYgfCA4KQorI2RlZmluZSBQRjlfUEZfTkZJTzIJCShHUElPX1BPUlRGIHwgR1BJT19QRiB8IDkpCisjZGVmaW5lIFBGMTBfUEZfTkZJTzMJCShHUElPX1BPUlRGIHwgR1BJT19QRiB8IDEwKQorI2RlZmluZSBQRjExX1BGX05GSU80CQkoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxMSkKKyNkZWZpbmUgUEYxMl9QRl9ORklPNQkJKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTIpCisjZGVmaW5lIFBGMTNfUEZfTkZJTzYJCShHUElPX1BPUlRGIHwgR1BJT19QRiB8IDEzKQorI2RlZmluZSBQRjE0X1BGX05GSU83CQkoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxNCkKKyNkZWZpbmUgUEYxNl9QRl9SRVMJCShHUElPX1BPUlRGIHwgR1BJT19QRiB8IDE2KQogCiAvKiBBbHRlcm5hdGUgR1BJTyBwaW4gZnVuY3Rpb25zICovCiAKLSNkZWZpbmUgUEE1X0FGX0JNSV9DTEtfQ1MgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgNSkKLSNkZWZpbmUgUEE2X0FGX0JNSV9EMCAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgNikKLSNkZWZpbmUgUEE3X0FGX0JNSV9EMSAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgNykKLSNkZWZpbmUgUEE4X0FGX0JNSV9EMiAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgOCkKLSNkZWZpbmUgUEE5X0FGX0JNSV9EMyAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgOSkKLSNkZWZpbmUgUEExMF9BRl9CTUlfRDQgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTApCi0jZGVmaW5lIFBBMTFfQUZfQk1JX0Q1ICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDExKQotI2RlZmluZSBQQTEyX0FGX0JNSV9ENiAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxMikKLSNkZWZpbmUgUEExM19BRl9CTUlfRDcgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTMpCi0jZGVmaW5lIFBBMTRfQUZfQk1JX0Q4ICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE0KQotI2RlZmluZSBQQTE1X0FGX0JNSV9EOSAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxNSkKLSNkZWZpbmUgUEExNl9BRl9CTUlfRDEwICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTYpCi0jZGVmaW5lIFBBMTdfQUZfQk1JX0QxMSAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE3KQotI2RlZmluZSBQQTE4X0FGX0JNSV9EMTIgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxOCkKLSNkZWZpbmUgUEExOV9BRl9CTUlfRDEzICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTkpCi0jZGVmaW5lIFBBMjBfQUZfQk1JX0QxNCAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDIwKQotI2RlZmluZSBQQTIxX0FGX0JNSV9EMTUgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyMSkKLSNkZWZpbmUgUEEyMl9BRl9CTUlfUkVBRF9SRVEgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjIpCi0jZGVmaW5lIFBBMjNfQUZfQk1JX1dSSVRFICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BRiB8IDIzKQotI2RlZmluZSBQQTI5X0FGX0JNSV9SWF9GVUxMICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyOSkKLSNkZWZpbmUgUEEzMF9BRl9CTUlfUkVBRCAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMzApCisjZGVmaW5lIFBBNV9BRl9CTUlfQ0xLX0NTCShHUElPX1BPUlRBIHwgR1BJT19BRiB8IDUpCisjZGVmaW5lIFBBNl9BRl9CTUlfRDAJCShHUElPX1BPUlRBIHwgR1BJT19BRiB8IDYpCisjZGVmaW5lIFBBN19BRl9CTUlfRDEJCShHUElPX1BPUlRBIHwgR1BJT19BRiB8IDcpCisjZGVmaW5lIFBBOF9BRl9CTUlfRDIJCShHUElPX1BPUlRBIHwgR1BJT19BRiB8IDgpCisjZGVmaW5lIFBBOV9BRl9CTUlfRDMJCShHUElPX1BPUlRBIHwgR1BJT19BRiB8IDkpCisjZGVmaW5lIFBBMTBfQUZfQk1JX0Q0CQkoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxMCkKKyNkZWZpbmUgUEExMV9BRl9CTUlfRDUJCShHUElPX1BPUlRBIHwgR1BJT19BRiB8IDExKQorI2RlZmluZSBQQTEyX0FGX0JNSV9ENgkJKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTIpCisjZGVmaW5lIFBBMTNfQUZfQk1JX0Q3CQkoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAxMykKKyNkZWZpbmUgUEExNF9BRl9CTUlfRDgJCShHUElPX1BPUlRBIHwgR1BJT19BRiB8IDE0KQorI2RlZmluZSBQQTE1X0FGX0JNSV9EOQkJKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTUpCisjZGVmaW5lIFBBMTZfQUZfQk1JX0QxMAkJKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTYpCisjZGVmaW5lIFBBMTdfQUZfQk1JX0QxMQkJKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTcpCisjZGVmaW5lIFBBMThfQUZfQk1JX0QxMgkJKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTgpCisjZGVmaW5lIFBBMTlfQUZfQk1JX0QxMwkJKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMTkpCisjZGVmaW5lIFBBMjBfQUZfQk1JX0QxNAkJKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjApCisjZGVmaW5lIFBBMjFfQUZfQk1JX0QxNQkJKEdQSU9fUE9SVEEgfCBHUElPX0FGIHwgMjEpCisjZGVmaW5lIFBBMjJfQUZfQk1JX1JFQURfUkVRCShHUElPX1BPUlRBIHwgR1BJT19BRiB8IDIyKQorI2RlZmluZSBQQTIzX0FGX0JNSV9XUklURQkoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyMykKKyNkZWZpbmUgUEEyOV9BRl9CTUlfUlhfRlVMTAkoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAyOSkKKyNkZWZpbmUgUEEzMF9BRl9CTUlfUkVBRAkoR1BJT19QT1JUQSB8IEdQSU9fQUYgfCAzMCkKIAogLyogQUlOIEdQSU8gcGluIGZ1bmN0aW9ucyAqLwogCi0jZGVmaW5lIFBDMTRfQUlOX1NZU19DTEsgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDE0KQotI2RlZmluZSBQRDIxX0FJTl9VU0JIMl9GUyAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyMSkKLSNkZWZpbmUgUEQyMl9BSU5fVVNCSDJfT0UgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjIpCi0jZGVmaW5lIFBEMjNfQUlOX1VTQkgyX1RYRE0gICAgIChHUElPX1BPUlREIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDIzKQotI2RlZmluZSBQRDI0X0FJTl9VU0JIMl9UWERQICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyNCkKLSNkZWZpbmUgUEU4X0FJTl9JUl9UWEQgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgOCkKLSNkZWZpbmUgUEYwX0FJTl9QQ19SU1QgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMCkKLSNkZWZpbmUgUEYxX0FJTl9QQ19DRTEgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMSkKLSNkZWZpbmUgUEYyX0FJTl9QQ19DRTIgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMikKLSNkZWZpbmUgUEYzX0FJTl9QQ19QT0UgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMykKLSNkZWZpbmUgUEY0X0FJTl9QQ19PRSAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgNCkKLSNkZWZpbmUgUEY1X0FJTl9QQ19SVyAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgNSkKKyNkZWZpbmUgUEMxNF9BSU5fU1lTX0NMSwkoR1BJT19QT1JUQyB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxNCkKKyNkZWZpbmUgUEQyMV9BSU5fVVNCSDJfRlMJKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjEpCisjZGVmaW5lIFBEMjJfQUlOX1VTQkgyX09FCShHUElPX1BPUlREIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDIyKQorI2RlZmluZSBQRDIzX0FJTl9VU0JIMl9UWERNCShHUElPX1BPUlREIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDIzKQorI2RlZmluZSBQRDI0X0FJTl9VU0JIMl9UWERQCShHUElPX1BPUlREIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDI0KQorI2RlZmluZSBQRThfQUlOX0lSX1RYRAkJKEdQSU9fUE9SVEUgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgOCkKKyNkZWZpbmUgUEYwX0FJTl9QQ19SU1QJCShHUElPX1BPUlRGIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDApCisjZGVmaW5lIFBGMV9BSU5fUENfQ0UxCQkoR1BJT19QT1JURiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxKQorI2RlZmluZSBQRjJfQUlOX1BDX0NFMgkJKEdQSU9fUE9SVEYgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMikKKyNkZWZpbmUgUEYzX0FJTl9QQ19QT0UJCShHUElPX1BPUlRGIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDMpCisjZGVmaW5lIFBGNF9BSU5fUENfT0UJCShHUElPX1BPUlRGIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDQpCisjZGVmaW5lIFBGNV9BSU5fUENfUlcJCShHUElPX1BPUlRGIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDUpCiAKIC8qIEJJTiBHUElPIHBpbiBmdW5jdGlvbnMgKi8KIAotI2RlZmluZSBQQzE0X0JJTl9TWVNfQ0xLICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQklOIHwgR1BJT19PVVQgfCAxNCkKLSNkZWZpbmUgUEQyN19CSU5fRVhUX0RNQV9HUkFOVCAgKEdQSU9fUE9SVEQgfCBHUElPX0JJTiB8IEdQSU9fT1VUIHwgMjcpCisjZGVmaW5lIFBDMTRfQklOX1NZU19DTEsJKEdQSU9fUE9SVEMgfCBHUElPX0JJTiB8IEdQSU9fT1VUIHwgMTQpCisjZGVmaW5lIFBEMjdfQklOX0VYVF9ETUFfR1JBTlQJKEdQSU9fUE9SVEQgfCBHUElPX0JJTiB8IEdQSU9fT1VUIHwgMjcpCiAKIC8qIENJTiBHUElPIHBpbiBmdW5jdGlvbnMgKi8KIAotI2RlZmluZSBQQjI2X0NJTl9VU0JIMV9SWERBVCAgICAoR1BJT19QT1JUQiB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAyNikKKyNkZWZpbmUgUEIyNl9DSU5fVVNCSDFfUlhEQVQJKEdQSU9fUE9SVEIgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMjYpCiAKIC8qIEFPVVQgR1BJTyBwaW4gZnVuY3Rpb25zICovCiAKLSNkZWZpbmUgUEEyOV9BT1VUX0JNSV9XQUlUICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMjkpCi0jZGVmaW5lIFBEMTlfQU9VVF9VU0JIMl9SWERNICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDE5KQotI2RlZmluZSBQRDIwX0FPVVRfVVNCSDJfUlhEUCAgICAoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAyMCkKLSNkZWZpbmUgUEQyNV9BT1VUX0VYVF9ETUFSRVEgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMjUpCi0jZGVmaW5lIFBEMjZfQU9VVF9VU0JPVEdfUlhEQVQgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDI2KQotI2RlZmluZSBQRTlfQU9VVF9JUl9SWEQgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA5KQotI2RlZmluZSBQRjZfQU9VVF9QQ19CVkQyICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA2KQotI2RlZmluZSBQRjdfQU9VVF9QQ19CVkQxICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA3KQotI2RlZmluZSBQRjhfQU9VVF9QQ19WUzIgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA4KQotI2RlZmluZSBQRjlfQU9VVF9QQ19WUzEgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA5KQotI2RlZmluZSBQRjEwX0FPVVRfUENfV1AgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxMCkKLSNkZWZpbmUgUEYxMV9BT1VUX1BDX1JFQURZICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTEpCi0jZGVmaW5lIFBGMTJfQU9VVF9QQ19XQUlUICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDEyKQotI2RlZmluZSBQRjEzX0FPVVRfUENfQ0QyICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxMykKLSNkZWZpbmUgUEYxNF9BT1VUX1BDX0NEMSAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTQpCisjZGVmaW5lIFBBMjlfQU9VVF9CTUlfV0FJVAkoR1BJT19QT1JUQSB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAyOSkKKyNkZWZpbmUgUEQxOV9BT1VUX1VTQkgyX1JYRE0JKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTkpCisjZGVmaW5lIFBEMjBfQU9VVF9VU0JIMl9SWERQCShHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDIwKQorI2RlZmluZSBQRDI1X0FPVVRfRVhUX0RNQVJFUQkoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAyNSkKKyNkZWZpbmUgUEQyNl9BT1VUX1VTQk9UR19SWERBVAkoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAyNikKKyNkZWZpbmUgUEU5X0FPVVRfSVJfUlhECQkoR1BJT19QT1JURSB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA5KQorI2RlZmluZSBQRjZfQU9VVF9QQ19CVkQyCShHUElPX1BPUlRGIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDYpCisjZGVmaW5lIFBGN19BT1VUX1BDX0JWRDEJKEdQSU9fUE9SVEYgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgNykKKyNkZWZpbmUgUEY4X0FPVVRfUENfVlMyCQkoR1BJT19QT1JURiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA4KQorI2RlZmluZSBQRjlfQU9VVF9QQ19WUzEJCShHUElPX1BPUlRGIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDkpCisjZGVmaW5lIFBGMTBfQU9VVF9QQ19XUAkJKEdQSU9fUE9SVEYgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTApCisjZGVmaW5lIFBGMTFfQU9VVF9QQ19SRUFEWQkoR1BJT19QT1JURiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxMSkKKyNkZWZpbmUgUEYxMl9BT1VUX1BDX1dBSVQJKEdQSU9fUE9SVEYgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTIpCisjZGVmaW5lIFBGMTNfQU9VVF9QQ19DRDIJKEdQSU9fUE9SVEYgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTMpCisjZGVmaW5lIFBGMTRfQU9VVF9QQ19DRDEJKEdQSU9fUE9SVEYgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTQpCiAKLQotI2VuZGlmCisjZW5kaWYgLyogaWZuZGVmIF9fTUFDSF9JT01VWF9NWDIxX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MjUuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDI1LmgKaW5kZXggOWFmNDk0Zi4uZjM5MjIwZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MjUuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyNS5oCkBAIC03LDcgKzcsNyBAQAogICogICAgQ29weXJpZ2h0IDIwMDggRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqIGFuZAogICogYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MzUuaAotICogICAgQ29weXJpZ2h0IChDLCBOT19QQURfQ1RSTCkgMjAwOSBieSBKYW4gV2VpdHplbCBQaHl0ZWMgTWVzc3RlY2huaWsgR21iSCA8YXJtbGludXhAcGh5dGVjLmRlPgorICogICAgQ29weXJpZ2h0IChDKSAyMDA5IGJ5IEphbiBXZWl0emVsIFBoeXRlYyBNZXNzdGVjaG5payBHbWJIIDxhcm1saW51eEBwaHl0ZWMuZGU+CiAgKgogICogVGhlIGNvZGUgY29udGFpbmVkIGhlcmVpbiBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xNiwyNCArMTYsMTEgQEAKICAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAogICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCiAgKi8KLSNpZm5kZWYgX19JT01VWF9NWDI1X0hfXwotI2RlZmluZSBfX0lPTVVYX01YMjVfSF9fCisjaWZuZGVmIF9fTUFDSF9JT01VWF9NWDI1X0hfXworI2RlZmluZSBfX01BQ0hfSU9NVVhfTVgyNV9IX18KIAogI2luY2x1ZGUgPG1hY2gvaW9tdXgtdjMuaD4KIAotI2lmbmRlZiBHUElPX1BPUlRBCi0jZXJyb3IgUGxlYXNlIGluY2x1ZGUgbWFjaC9pb211eC5oCi0jZW5kaWYKLQotLyoKLSAqCi0gKiBAYnJpZWYgTVgyNSBJL08gUGluIExpc3QKLSAqCi0gKiBAaW5ncm91cCBHUElPX01YMjUKLSAqLwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCiAvKgogICogSU9NVVgvUEFEIEJpdCBmaWVsZCBkZWZpbml0aW9ucwogICovCkBAIC00NjIsOSArNDQ5LDExIEBACiAjZGVmaW5lIE1YMjVfUEFEX0dQSU9fQ19fQ0FOMl9UWAlJT01VWF9QQUQoMHgzZjgsIDB4MWZjLCAweDE2LCAwLCAwLCBQQURfQ1RMX1BVU18yMktfVVApCiAKICNkZWZpbmUgTVgyNV9QQURfR1BJT19EX19HUElPX0QJCUlPTVVYX1BBRCgweDNmYywgMHgyMDAsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDI1X1BBRF9HUElPX0VfX0xEMTYJCUlPTVVYX1BBRCgweDQwMCwgMHgyMDQsIDB4MDIsIDAsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9HUElPX0RfX0NBTjJfUlgJSU9NVVhfUEFEKDB4M2ZjLCAweDIwMCwgMHgxNiwgMHg0ODQsIDEsIFBBRF9DVExfUFVTXzIyS19VUCkKIAogI2RlZmluZSBNWDI1X1BBRF9HUElPX0VfX0dQSU9fRQkJSU9NVVhfUEFEKDB4NDAwLCAweDIwNCwgMHgxMCwgMCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YMjVfUEFEX0dQSU9fRl9fTEQxNwkJSU9NVVhfUEFEKDB4NDA0LCAweDIwOCwgMHgwMiwgMCwgMCwgTk9fUEFEX0NUUkwpCiAjZGVmaW5lIE1YMjVfUEFEX0dQSU9fRV9fQVVEN19UWEQJSU9NVVhfUEFEKDB4NDAwLCAweDIwNCwgMHgxNCwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKICNkZWZpbmUgTVgyNV9QQURfR1BJT19GX19HUElPX0YJCUlPTVVYX1BBRCgweDQwNCwgMHgyMDgsIDB4MTAsIDAsIDAsIE5PX1BBRF9DVFJMKQpAQCAtNTEzLDUgKzUwMiw0IEBACiAjZGVmaW5lIE1YMjVfUEFEX0NUTF9HUlBfRFZTX1NESEMxCUlPTVVYX1BBRCgweDQ1OCwgMHgwMDAsIDAsIDAsIDAsIE5PX1BBRF9DVFJMKQogI2RlZmluZSBNWDI1X1BBRF9DVExfR1JQX0RWU19MQ0QJSU9NVVhfUEFEKDB4NDVjLCAweDAwMCwgMCwgMCwgMCwgTk9fUEFEX0NUUkwpCiAKLSNlbmRpZiAvLyBfX0FTU0VNQkxZX18KLSNlbmRpZiAvLyBfX0lPTVVYX01YMjVfSF9fCisjZW5kaWYgLyogX19NQUNIX0lPTVVYX01YMjVfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyNy5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MjcuaAppbmRleCA1YWMxNThiLi5kOWY5YTZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyNy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDI3LmgKQEAgLTEsMjA3ICsxLDIwNSBAQAogLyoKLSogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IFNhc2NoYSBIYXVlciA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgotKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgSG9sZ2VyIFNjaHVyaWcgPGhzNDIzM0BtYWlsLm1uLXNvbHV0aW9ucy5kZT4KLSoKLSogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0qIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0qIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSoKLSogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAotKiBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLworICogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IFNhc2NoYSBIYXVlciA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA5IGJ5IEhvbGdlciBTY2h1cmlnIDxoczQyMzNAbWFpbC5tbi1zb2x1dGlvbnMuZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCisgKiBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKyNpZm5kZWYgX19NQUNIX0lPTVVYX01YMjdfSF9fCisjZGVmaW5lIF9fTUFDSF9JT01VWF9NWDI3X0hfXwogCi0jaWZuZGVmIF9NWENfSU9NVVhfTVgyN19ICi0jZGVmaW5lIF9NWENfSU9NVVhfTVgyN19ICi0KLSNpZm5kZWYgR1BJT19QT1JUQQotI2Vycm9yIFBsZWFzZSBpbmNsdWRlIG1hY2gvaW9tdXguaAotI2VuZGlmCi0KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LW14MnguaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LXYxLmg+CiAKIC8qIFByaW1hcnkgR1BJTyBwaW4gZnVuY3Rpb25zICovCiAKLSNkZWZpbmUgUEEwX1BGX1VTQkgyX0NMSyAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMCkKLSNkZWZpbmUgUEExX1BGX1VTQkgyX0RJUiAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMSkKLSNkZWZpbmUgUEEyX1BGX1VTQkgyX0RBVEE3ICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMikKLSNkZWZpbmUgUEEzX1BGX1VTQkgyX05YVCAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMykKLSNkZWZpbmUgUEE0X1BGX1VTQkgyX1NUUCAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgNCkKLSNkZWZpbmUgUEIyMl9QRl9VU0JIMV9TVVNQICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjIpCi0jZGVmaW5lIFBCMjVfUEZfVVNCSDFfUkNWICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI1KQotI2RlZmluZSBQQzVfUEZfSTJDMl9TREEgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgNSkKLSNkZWZpbmUgUEM2X1BGX0kyQzJfU0NMICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDYpCi0jZGVmaW5lIFBDN19QRl9VU0JPVEdfREFUQTUgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgNykKLSNkZWZpbmUgUEM4X1BGX1VTQk9UR19EQVRBNiAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA4KQotI2RlZmluZSBQQzlfUEZfVVNCT1RHX0RBVEEwICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDkpCi0jZGVmaW5lIFBDMTBfUEZfVVNCT1RHX0RBVEEyICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTApCi0jZGVmaW5lIFBDMTFfUEZfVVNCT1RHX0RBVEExICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTEpCi0jZGVmaW5lIFBDMTJfUEZfVVNCT1RHX0RBVEE0ICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTIpCi0jZGVmaW5lIFBDMTNfUEZfVVNCT1RHX0RBVEEzICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTMpCi0jZGVmaW5lIFBDMTZfUEZfU1NJNF9GUyAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAxNikKLSNkZWZpbmUgUEMxN19QRl9TU0k0X1JYRCAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDE3KQotI2RlZmluZSBQQzE4X1BGX1NTSTRfVFhEICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMTgpCi0jZGVmaW5lIFBDMTlfUEZfU1NJNF9DTEsgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAxOSkKLSNkZWZpbmUgUEMyNV9BRl9HUFQ1X1RJTiAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FGIHwgMjUpCi0jZGVmaW5lIFBDMjdfQUZfR1BUNF9USU4gICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BRiB8IDI3KQotI2RlZmluZSBQRDBfUEZfU0QzX0NNRCAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAwKQotI2RlZmluZSBQRDFfUEZfU0QzX0NMSyAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAxKQotI2RlZmluZSBQRDJfUEZfQVRBX0RBVEEwICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAyKQotI2RlZmluZSBQRDNfUEZfQVRBX0RBVEExICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAzKQotI2RlZmluZSBQRDRfUEZfQVRBX0RBVEEyICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA0KQotI2RlZmluZSBQRDVfUEZfQVRBX0RBVEEzICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA1KQotI2RlZmluZSBQRDZfUEZfQVRBX0RBVEE0ICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA2KQotI2RlZmluZSBQRDdfUEZfQVRBX0RBVEE1ICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA3KQotI2RlZmluZSBQRDhfUEZfQVRBX0RBVEE2ICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA4KQotI2RlZmluZSBQRDlfUEZfQVRBX0RBVEE3ICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA5KQotI2RlZmluZSBQRDEwX1BGX0FUQV9EQVRBOCAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAxMCkKLSNkZWZpbmUgUEQxMV9QRl9BVEFfREFUQTkgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMTEpCi0jZGVmaW5lIFBEMTJfUEZfQVRBX0RBVEExMCAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDEyKQotI2RlZmluZSBQRDEzX1BGX0FUQV9EQVRBMTEgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAxMykKLSNkZWZpbmUgUEQxNF9QRl9BVEFfREFUQTEyICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMTQpCi0jZGVmaW5lIFBEMTVfUEZfQVRBX0RBVEExMyAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDE1KQotI2RlZmluZSBQRDE2X1BGX0FUQV9EQVRBMTQgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAxNikKLSNkZWZpbmUgUEUwX1BGX1VTQk9UR19OWFQgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAwKQotI2RlZmluZSBQRTFfUEZfVVNCT1RHX1NUUCAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEpCi0jZGVmaW5lIFBFMl9QRl9VU0JPVEdfRElSICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMikKLSNkZWZpbmUgUEUyNF9QRl9VU0JPVEdfQ0xLICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNCkKLSNkZWZpbmUgUEUyNV9QRl9VU0JPVEdfREFUQTcgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNSkKLSNkZWZpbmUgUEYxX1BGX05GQ0xFICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMSkKLSNkZWZpbmUgUEYzX1BGX05GQ0UgICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMykKLSNkZWZpbmUgUEY3X1BGX1BDX1BPRSAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgNykKLSNkZWZpbmUgUEY4X1BGX1BDX1JXICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgOCkKLSNkZWZpbmUgUEY5X1BGX1BDX0lPSVMxNiAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgOSkKLSNkZWZpbmUgUEYxMF9QRl9QQ19SU1QgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTApCi0jZGVmaW5lIFBGMTFfUEZfUENfQlZEMiAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDExKQotI2RlZmluZSBQRjEyX1BGX1BDX0JWRDEgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxMikKLSNkZWZpbmUgUEYxM19QRl9QQ19WUzIgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTMpCi0jZGVmaW5lIFBGMTRfUEZfUENfVlMxICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDE0KQotI2RlZmluZSBQRjE2X1BGX1BDX1BXUk9OICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxNikKLSNkZWZpbmUgUEYxN19QRl9QQ19SRUFEWSAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTcpCi0jZGVmaW5lIFBGMThfUEZfUENfV0FJVCAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDE4KQotI2RlZmluZSBQRjE5X1BGX1BDX0NEMiAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxOSkKLSNkZWZpbmUgUEYyMF9QRl9QQ19DRDEgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMjApCi0jZGVmaW5lIFBGMjNfUEZfQVRBX0RBVEExNSAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDIzKQorI2RlZmluZSBQQTBfUEZfVVNCSDJfQ0xLCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IDApCisjZGVmaW5lIFBBMV9QRl9VU0JIMl9ESVIJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMSkKKyNkZWZpbmUgUEEyX1BGX1VTQkgyX0RBVEE3CShHUElPX1BPUlRBIHwgR1BJT19QRiB8IDIpCisjZGVmaW5lIFBBM19QRl9VU0JIMl9OWFQJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgMykKKyNkZWZpbmUgUEE0X1BGX1VTQkgyX1NUUAkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCA0KQorI2RlZmluZSBQQjIyX1BGX1VTQkgxX1NVU1AJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjIpCisjZGVmaW5lIFBCMjVfUEZfVVNCSDFfUkNWCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI1KQorI2RlZmluZSBQQzVfUEZfSTJDMl9TREEJCShHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCA1KQorI2RlZmluZSBQQzZfUEZfSTJDMl9TQ0wJCShHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCA2KQorI2RlZmluZSBQQzdfUEZfVVNCT1RHX0RBVEE1CShHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgNykKKyNkZWZpbmUgUEM4X1BGX1VTQk9UR19EQVRBNgkoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDgpCisjZGVmaW5lIFBDOV9QRl9VU0JPVEdfREFUQTAJKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA5KQorI2RlZmluZSBQQzEwX1BGX1VTQk9UR19EQVRBMgkoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEwKQorI2RlZmluZSBQQzExX1BGX1VTQk9UR19EQVRBMQkoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDExKQorI2RlZmluZSBQQzEyX1BGX1VTQk9UR19EQVRBNAkoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEyKQorI2RlZmluZSBQQzEzX1BGX1VTQk9UR19EQVRBMwkoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEzKQorI2RlZmluZSBQQzE2X1BGX1NTSTRfRlMJCShHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAxNikKKyNkZWZpbmUgUEMxN19QRl9TU0k0X1JYRAkoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMTcpCisjZGVmaW5lIFBDMThfUEZfU1NJNF9UWEQJKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDE4KQorI2RlZmluZSBQQzE5X1BGX1NTSTRfQ0xLCShHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAxOSkKKyNkZWZpbmUgUEQwX1BGX1NEM19DTUQJCShHUElPX1BPUlREIHwgR1BJT19QRiB8IDApCisjZGVmaW5lIFBEMV9QRl9TRDNfQ0xLCQkoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAxKQorI2RlZmluZSBQRDJfUEZfQVRBX0RBVEEwCShHUElPX1BPUlREIHwgR1BJT19QRiB8IDIpCisjZGVmaW5lIFBEM19QRl9BVEFfREFUQTEJKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMykKKyNkZWZpbmUgUEQ0X1BGX0FUQV9EQVRBMgkoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA0KQorI2RlZmluZSBQRDVfUEZfQVRBX0RBVEEzCShHUElPX1BPUlREIHwgR1BJT19QRiB8IDUpCisjZGVmaW5lIFBENl9QRl9BVEFfREFUQTQJKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgNikKKyNkZWZpbmUgUEQ3X1BGX0FUQV9EQVRBNQkoR1BJT19QT1JURCB8IEdQSU9fUEYgfCA3KQorI2RlZmluZSBQRDhfUEZfQVRBX0RBVEE2CShHUElPX1BPUlREIHwgR1BJT19QRiB8IDgpCisjZGVmaW5lIFBEOV9QRl9BVEFfREFUQTcJKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgOSkKKyNkZWZpbmUgUEQxMF9QRl9BVEFfREFUQTgJKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMTApCisjZGVmaW5lIFBEMTFfUEZfQVRBX0RBVEE5CShHUElPX1BPUlREIHwgR1BJT19QRiB8IDExKQorI2RlZmluZSBQRDEyX1BGX0FUQV9EQVRBMTAJKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMTIpCisjZGVmaW5lIFBEMTNfUEZfQVRBX0RBVEExMQkoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAxMykKKyNkZWZpbmUgUEQxNF9QRl9BVEFfREFUQTEyCShHUElPX1BPUlREIHwgR1BJT19QRiB8IDE0KQorI2RlZmluZSBQRDE1X1BGX0FUQV9EQVRBMTMJKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMTUpCisjZGVmaW5lIFBEMTZfUEZfQVRBX0RBVEExNAkoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAxNikKKyNkZWZpbmUgUEUwX1BGX1VTQk9UR19OWFQJKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAwKQorI2RlZmluZSBQRTFfUEZfVVNCT1RHX1NUUAkoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEpCisjZGVmaW5lIFBFMl9QRl9VU0JPVEdfRElSCShHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMikKKyNkZWZpbmUgUEUyNF9QRl9VU0JPVEdfQ0xLCShHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjQpCisjZGVmaW5lIFBFMjVfUEZfVVNCT1RHX0RBVEE3CShHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjUpCisjZGVmaW5lIFBGMV9QRl9ORkNMRQkJKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMSkKKyNkZWZpbmUgUEYzX1BGX05GQ0UJCShHUElPX1BPUlRGIHwgR1BJT19QRiB8IDMpCisjZGVmaW5lIFBGN19QRl9QQ19QT0UJCShHUElPX1BPUlRGIHwgR1BJT19QRiB8IDcpCisjZGVmaW5lIFBGOF9QRl9QQ19SVwkJKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgOCkKKyNkZWZpbmUgUEY5X1BGX1BDX0lPSVMxNgkoR1BJT19QT1JURiB8IEdQSU9fUEYgfCA5KQorI2RlZmluZSBQRjEwX1BGX1BDX1JTVAkJKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTApCisjZGVmaW5lIFBGMTFfUEZfUENfQlZEMgkJKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTEpCisjZGVmaW5lIFBGMTJfUEZfUENfQlZEMQkJKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTIpCisjZGVmaW5lIFBGMTNfUEZfUENfVlMyCQkoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAxMykKKyNkZWZpbmUgUEYxNF9QRl9QQ19WUzEJCShHUElPX1BPUlRGIHwgR1BJT19QRiB8IDE0KQorI2RlZmluZSBQRjE2X1BGX1BDX1BXUk9OCShHUElPX1BPUlRGIHwgR1BJT19QRiB8IDE2KQorI2RlZmluZSBQRjE3X1BGX1BDX1JFQURZCShHUElPX1BPUlRGIHwgR1BJT19QRiB8IDE3KQorI2RlZmluZSBQRjE4X1BGX1BDX1dBSVQJCShHUElPX1BPUlRGIHwgR1BJT19QRiB8IDE4KQorI2RlZmluZSBQRjE5X1BGX1BDX0NEMgkJKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTkpCisjZGVmaW5lIFBGMjBfUEZfUENfQ0QxCQkoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAyMCkKKyNkZWZpbmUgUEYyM19QRl9BVEFfREFUQTE1CShHUElPX1BPUlRGIHwgR1BJT19QRiB8IDIzKQogCiAvKiBBbHRlcm5hdGUgR1BJTyBwaW4gZnVuY3Rpb25zICovCiAKLSNkZWZpbmUgUEI0X0FGX01TSENfREFUQTAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCA0KQotI2RlZmluZSBQQjVfQUZfTVNIQ19EQVRBMSAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDUpCi0jZGVmaW5lIFBCNl9BRl9NU0hDX0RBVEEyICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgNikKLSNkZWZpbmUgUEI3X0FGX01TSENfREFUQTQgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCA3KQotI2RlZmluZSBQQjhfQUZfTVNIQ19CUyAgICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDgpCi0jZGVmaW5lIFBCOV9BRl9NU0hDX1NDTEsgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgOSkKLSNkZWZpbmUgUEIxMF9BRl9VQVJUNl9UWEQgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCAxMCkKLSNkZWZpbmUgUEIxMV9BRl9VQVJUNl9SWEQgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19JTiB8IDExKQotI2RlZmluZSBQQjEyX0FGX1VBUlQ2X0NUUyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDEyKQotI2RlZmluZSBQQjEzX0FGX1VBUlQ2X1JUUyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX0lOIHwgMTMpCi0jZGVmaW5lIFBCMThfQUZfVUFSVDVfVFhEICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgMTgpCi0jZGVmaW5lIFBCMTlfQUZfVUFSVDVfUlhEICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fSU4gfCAxOSkKLSNkZWZpbmUgUEIyMF9BRl9VQVJUNV9DVFMgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCAyMCkKLSNkZWZpbmUgUEIyMV9BRl9VQVJUNV9SVFMgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19JTiB8IDIxKQotI2RlZmluZSBQQzhfQUZfRkVDX01ESU8gICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUYgfCBHUElPX0lOIHwgOCkKLSNkZWZpbmUgUEMyNF9BRl9HUFQ1X1RPVVQgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FGIHwgMjQpCi0jZGVmaW5lIFBDMjZfQUZfR1BUNF9UT1VUICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BRiB8IDI2KQotI2RlZmluZSBQRDFfQUZfRVRNVFJBQ0VfUEtUMTUgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAxKQotI2RlZmluZSBQRDZfQUZfRVRNVFJBQ0VfUEtUMTQgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCA2KQotI2RlZmluZSBQRDdfQUZfRVRNVFJBQ0VfUEtUMTMgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCA3KQotI2RlZmluZSBQRDlfQUZfRVRNVFJBQ0VfUEtUMTIgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCA5KQotI2RlZmluZSBQRDJfQUZfU0QzX0QwICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyKQotI2RlZmluZSBQRDNfQUZfU0QzX0QxICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAzKQotI2RlZmluZSBQRDRfQUZfU0QzX0QyICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCA0KQotI2RlZmluZSBQRDVfQUZfU0QzX0QzICAgICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCA1KQotI2RlZmluZSBQRDhfQUZfRkVDX01ESU8gICAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCBHUElPX0lOIHwgOCkKLSNkZWZpbmUgUEQxMF9BRl9FVE1UUkFDRV9QS1QxMSAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMTApCi0jZGVmaW5lIFBEMTFfQUZfRVRNVFJBQ0VfUEtUMTAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDExKQotI2RlZmluZSBQRDEyX0FGX0VUTVRSQUNFX1BLVDkgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAxMikKLSNkZWZpbmUgUEQxM19BRl9FVE1UUkFDRV9QS1Q4ICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMTMpCi0jZGVmaW5lIFBEMTRfQUZfRVRNVFJBQ0VfUEtUNyAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDE0KQotI2RlZmluZSBQRDE1X0FGX0VUTVRSQUNFX1BLVDYgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAxNSkKLSNkZWZpbmUgUEQxNl9BRl9FVE1UUkFDRV9QS1Q1ICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMTYpCi0jZGVmaW5lIFBGMV9BRl9FVE1UUkFDRV9QS1QwICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDEpCi0jZGVmaW5lIFBGM19BRl9FVE1UUkFDRV9QS1QyICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDMpCi0jZGVmaW5lIFBGNV9BRl9FVE1QSVBFU1RBVDExICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDUpCi0jZGVmaW5lIFBGN19BRl9BVEFfQlVGRkVSX0VOICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDcpCi0jZGVmaW5lIFBGOF9BRl9BVEFfSU9SRFkgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDgpCi0jZGVmaW5lIFBGOV9BRl9BVEFfSU5UUlEgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDkpCi0jZGVmaW5lIFBGMTBfQUZfQVRBX1JFU0VUICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDEwKQotI2RlZmluZSBQRjExX0FGX0FUQV9ETUFDSyAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxMSkKLSNkZWZpbmUgUEYxMl9BRl9BVEFfRE1BUkVRICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMTIpCi0jZGVmaW5lIFBGMTNfQUZfQVRBX0RBMCAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDEzKQotI2RlZmluZSBQRjE0X0FGX0FUQV9EQTEgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxNCkKLSNkZWZpbmUgUEYxNV9BRl9FVE1UUkFDRV9TWU5DICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMTUpCi0jZGVmaW5lIFBGMTZfQUZfQVRBX0RBMiAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDE2KQotI2RlZmluZSBQRjE3X0FGX0FUQV9DUzAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxNykKLSNkZWZpbmUgUEYxOF9BRl9BVEFfQ1MxICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMTgpCi0jZGVmaW5lIFBGMTlfQUZfQVRBX0RJT1cgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDE5KQotI2RlZmluZSBQRjIwX0FGX0FUQV9ESU9SICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAyMCkKLSNkZWZpbmUgUEYyMl9BRl9FVE1UUkFDRV9DTEsgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMjIpCi0jZGVmaW5lIFBGMjNfQUZfRVRNVFJBQ0VfUEtUNCAgIChHUElPX1BPUlRGIHwgR1BJT19BRiB8IDIzKQorI2RlZmluZSBQQjRfQUZfTVNIQ19EQVRBMAkoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDQpCisjZGVmaW5lIFBCNV9BRl9NU0hDX0RBVEExCShHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgNSkKKyNkZWZpbmUgUEI2X0FGX01TSENfREFUQTIJKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCA2KQorI2RlZmluZSBQQjdfQUZfTVNIQ19EQVRBNAkoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDcpCisjZGVmaW5lIFBCOF9BRl9NU0hDX0JTCQkoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDgpCisjZGVmaW5lIFBCOV9BRl9NU0hDX1NDTEsJKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCA5KQorI2RlZmluZSBQQjEwX0FGX1VBUlQ2X1RYRAkoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDEwKQorI2RlZmluZSBQQjExX0FGX1VBUlQ2X1JYRAkoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX0lOIHwgMTEpCisjZGVmaW5lIFBCMTJfQUZfVUFSVDZfQ1RTCShHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgMTIpCisjZGVmaW5lIFBCMTNfQUZfVUFSVDZfUlRTCShHUElPX1BPUlRCIHwgR1BJT19BRiB8IEdQSU9fSU4gfCAxMykKKyNkZWZpbmUgUEIxOF9BRl9VQVJUNV9UWEQJKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19PVVQgfCAxOCkKKyNkZWZpbmUgUEIxOV9BRl9VQVJUNV9SWEQJKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19JTiB8IDE5KQorI2RlZmluZSBQQjIwX0FGX1VBUlQ1X0NUUwkoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDIwKQorI2RlZmluZSBQQjIxX0FGX1VBUlQ1X1JUUwkoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX0lOIHwgMjEpCisjZGVmaW5lIFBDOF9BRl9GRUNfTURJTwkJKEdQSU9fUE9SVEMgfCBHUElPX0FGIHwgR1BJT19JTiB8IDgpCisjZGVmaW5lIFBDMjRfQUZfR1BUNV9UT1VUCShHUElPX1BPUlRDIHwgR1BJT19BRiB8IDI0KQorI2RlZmluZSBQQzI1X0FGX0dQVDVfVElOCShHUElPX1BPUlRDIHwgR1BJT19BRiB8IDI1KQorI2RlZmluZSBQQzI2X0FGX0dQVDRfVE9VVAkoR1BJT19QT1JUQyB8IEdQSU9fQUYgfCAyNikKKyNkZWZpbmUgUEMyN19BRl9HUFQ0X1RJTgkoR1BJT19QT1JUQyB8IEdQSU9fQUYgfCAyNykKKyNkZWZpbmUgUEQxX0FGX0VUTVRSQUNFX1BLVDE1CShHUElPX1BPUlREIHwgR1BJT19BRiB8IDEpCisjZGVmaW5lIFBENl9BRl9FVE1UUkFDRV9QS1QxNAkoR1BJT19QT1JURCB8IEdQSU9fQUYgfCA2KQorI2RlZmluZSBQRDdfQUZfRVRNVFJBQ0VfUEtUMTMJKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgNykKKyNkZWZpbmUgUEQ5X0FGX0VUTVRSQUNFX1BLVDEyCShHUElPX1BPUlREIHwgR1BJT19BRiB8IDkpCisjZGVmaW5lIFBEMl9BRl9TRDNfRDAJCShHUElPX1BPUlREIHwgR1BJT19BRiB8IDIpCisjZGVmaW5lIFBEM19BRl9TRDNfRDEJCShHUElPX1BPUlREIHwgR1BJT19BRiB8IDMpCisjZGVmaW5lIFBENF9BRl9TRDNfRDIJCShHUElPX1BPUlREIHwgR1BJT19BRiB8IDQpCisjZGVmaW5lIFBENV9BRl9TRDNfRDMJCShHUElPX1BPUlREIHwgR1BJT19BRiB8IDUpCisjZGVmaW5lIFBEOF9BRl9GRUNfTURJTwkJKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgR1BJT19JTiB8IDgpCisjZGVmaW5lIFBEMTBfQUZfRVRNVFJBQ0VfUEtUMTEJKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMTApCisjZGVmaW5lIFBEMTFfQUZfRVRNVFJBQ0VfUEtUMTAJKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMTEpCisjZGVmaW5lIFBEMTJfQUZfRVRNVFJBQ0VfUEtUOQkoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAxMikKKyNkZWZpbmUgUEQxM19BRl9FVE1UUkFDRV9QS1Q4CShHUElPX1BPUlREIHwgR1BJT19BRiB8IDEzKQorI2RlZmluZSBQRDE0X0FGX0VUTVRSQUNFX1BLVDcJKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMTQpCisjZGVmaW5lIFBEMTVfQUZfRVRNVFJBQ0VfUEtUNgkoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAxNSkKKyNkZWZpbmUgUEQxNl9BRl9FVE1UUkFDRV9QS1Q1CShHUElPX1BPUlREIHwgR1BJT19BRiB8IDE2KQorI2RlZmluZSBQRjFfQUZfRVRNVFJBQ0VfUEtUMAkoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxKQorI2RlZmluZSBQRjNfQUZfRVRNVFJBQ0VfUEtUMgkoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAzKQorI2RlZmluZSBQRjVfQUZfRVRNUElQRVNUQVQxMQkoR1BJT19QT1JURiB8IEdQSU9fQUYgfCA1KQorI2RlZmluZSBQRjdfQUZfQVRBX0JVRkZFUl9FTgkoR1BJT19QT1JURiB8IEdQSU9fQUYgfCA3KQorI2RlZmluZSBQRjhfQUZfQVRBX0lPUkRZCShHUElPX1BPUlRGIHwgR1BJT19BRiB8IDgpCisjZGVmaW5lIFBGOV9BRl9BVEFfSU5UUlEJKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgOSkKKyNkZWZpbmUgUEYxMF9BRl9BVEFfUkVTRVQJKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMTApCisjZGVmaW5lIFBGMTFfQUZfQVRBX0RNQUNLCShHUElPX1BPUlRGIHwgR1BJT19BRiB8IDExKQorI2RlZmluZSBQRjEyX0FGX0FUQV9ETUFSRVEJKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMTIpCisjZGVmaW5lIFBGMTNfQUZfQVRBX0RBMAkJKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMTMpCisjZGVmaW5lIFBGMTRfQUZfQVRBX0RBMQkJKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMTQpCisjZGVmaW5lIFBGMTVfQUZfRVRNVFJBQ0VfU1lOQwkoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxNSkKKyNkZWZpbmUgUEYxNl9BRl9BVEFfREEyCQkoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxNikKKyNkZWZpbmUgUEYxN19BRl9BVEFfQ1MwCQkoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxNykKKyNkZWZpbmUgUEYxOF9BRl9BVEFfQ1MxCQkoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxOCkKKyNkZWZpbmUgUEYxOV9BRl9BVEFfRElPVwkoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAxOSkKKyNkZWZpbmUgUEYyMF9BRl9BVEFfRElPUgkoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAyMCkKKyNkZWZpbmUgUEYyMl9BRl9FVE1UUkFDRV9DTEsJKEdQSU9fUE9SVEYgfCBHUElPX0FGIHwgMjIpCisjZGVmaW5lIFBGMjNfQUZfRVRNVFJBQ0VfUEtUNAkoR1BJT19QT1JURiB8IEdQSU9fQUYgfCAyMykKIAogLyogQUlOIEdQSU8gcGluIGZ1bmN0aW9ucyAqLwogCi0jZGVmaW5lIFBDMTRfQUlOX1NTSTFfTUNMSyAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDE0KQotI2RlZmluZSBQQzE1X0FJTl9HUFQ2X1RPVVQgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxNSkKLSNkZWZpbmUgUEQwX0FJTl9GRUNfVFhEMCAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMCkKLSNkZWZpbmUgUEQxX0FJTl9GRUNfVFhEMSAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMSkKLSNkZWZpbmUgUEQyX0FJTl9GRUNfVFhEMiAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMikKLSNkZWZpbmUgUEQzX0FJTl9GRUNfVFhEMyAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMykKLSNkZWZpbmUgUEQ5X0FJTl9GRUNfTURDICAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgOSkKLSNkZWZpbmUgUEQxNl9BSU5fRkVDX1RYX0VSICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTYpCi0jZGVmaW5lIFBEMjdfQUlOX0VYVF9ETUFfR1JBTlQgIChHUElPX1BPUlREIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDI3KQotI2RlZmluZSBQRjIzX0FJTl9GRUNfVFhfRU4gICAgICAoR1BJT19QT1JURiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyMykKKyNkZWZpbmUgUEMxNF9BSU5fU1NJMV9NQ0xLCShHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDE0KQorI2RlZmluZSBQQzE1X0FJTl9HUFQ2X1RPVVQJKEdQSU9fUE9SVEMgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTUpCisjZGVmaW5lIFBEMF9BSU5fRkVDX1RYRDAJKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMCkKKyNkZWZpbmUgUEQxX0FJTl9GRUNfVFhEMQkoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxKQorI2RlZmluZSBQRDJfQUlOX0ZFQ19UWEQyCShHUElPX1BPUlREIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDIpCisjZGVmaW5lIFBEM19BSU5fRkVDX1RYRDMJKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMykKKyNkZWZpbmUgUEQ5X0FJTl9GRUNfTURDCQkoR1BJT19QT1JURCB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA5KQorI2RlZmluZSBQRDE2X0FJTl9GRUNfVFhfRVIJKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTYpCisjZGVmaW5lIFBEMjdfQUlOX0VYVF9ETUFfR1JBTlQJKEdQSU9fUE9SVEQgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjcpCisjZGVmaW5lIFBGMjNfQUlOX0ZFQ19UWF9FTgkoR1BJT19QT1JURiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyMykKIAogLyogQklOIEdQSU8gcGluIGZ1bmN0aW9ucyAqLwogCi0jZGVmaW5lIFBDMTRfQklOX1NTSTJfTUNMSyAgICAgIChHUElPX1BPUlRDIHwgR1BJT19CSU4gfCBHUElPX09VVCB8IDE0KQorI2RlZmluZSBQQzE0X0JJTl9TU0kyX01DTEsJKEdQSU9fUE9SVEMgfCBHUElPX0JJTiB8IEdQSU9fT1VUIHwgMTQpCiAKIC8qIENJTiBHUElPIHBpbiBmdW5jdGlvbnMgKi8KIAotI2RlZmluZSBQRDJfQ0lOX1NMQ0RDMV9EQVQwICAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAyKQotI2RlZmluZSBQRDNfQ0lOX1NMQ0RDMV9EQVQxICAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAzKQotI2RlZmluZSBQRDRfQ0lOX1NMQ0RDMV9EQVQyICAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCA0KQotI2RlZmluZSBQRDVfQ0lOX1NMQ0RDMV9EQVQzICAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCA1KQotI2RlZmluZSBQRDZfQ0lOX1NMQ0RDMV9EQVQ0ICAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCA2KQotI2RlZmluZSBQRDdfQ0lOX1NMQ0RDMV9EQVQ1ICAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCA3KQotI2RlZmluZSBQRDhfQ0lOX1NMQ0RDMV9EQVQ2ICAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCA4KQotI2RlZmluZSBQRDlfQ0lOX1NMQ0RDMV9EQVQ3ICAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCA5KQotI2RlZmluZSBQRDEwX0NJTl9TTENEQzFfREFUOCAgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxMCkKLSNkZWZpbmUgUEQxMV9DSU5fU0xDREMxX0RBVDkgICAgKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTEpCi0jZGVmaW5lIFBEMTJfQ0lOX1NMQ0RDMV9EQVQxMCAgIChHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDEyKQotI2RlZmluZSBQRDEzX0NJTl9TTENEQzFfREFUMTEgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxMykKLSNkZWZpbmUgUEQxNF9DSU5fU0xDREMxX0RBVDEyICAgKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTQpCi0jZGVmaW5lIFBEMTVfQ0lOX1NMQ0RDMV9EQVQxMyAgIChHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDE1KQotI2RlZmluZSBQRDE2X0NJTl9TTENEQzFfREFUMTQgICAoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxNikKLSNkZWZpbmUgUEQyM19DSU5fU0xDREMxX0RBVDE1ICAgKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMjMpCi0jZGVmaW5lIFBGMjdfQ0lOX0VYVF9ETUFfR1JBTlQgIChHUElPX1BPUlRGIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDI3KQorI2RlZmluZSBQRDJfQ0lOX1NMQ0RDMV9EQVQwCShHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDIpCisjZGVmaW5lIFBEM19DSU5fU0xDREMxX0RBVDEJKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMykKKyNkZWZpbmUgUEQ0X0NJTl9TTENEQzFfREFUMgkoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCA0KQorI2RlZmluZSBQRDVfQ0lOX1NMQ0RDMV9EQVQzCShHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDUpCisjZGVmaW5lIFBENl9DSU5fU0xDREMxX0RBVDQJKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgNikKKyNkZWZpbmUgUEQ3X0NJTl9TTENEQzFfREFUNQkoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCA3KQorI2RlZmluZSBQRDhfQ0lOX1NMQ0RDMV9EQVQ2CShHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDgpCisjZGVmaW5lIFBEOV9DSU5fU0xDREMxX0RBVDcJKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgOSkKKyNkZWZpbmUgUEQxMF9DSU5fU0xDREMxX0RBVDgJKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTApCisjZGVmaW5lIFBEMTFfQ0lOX1NMQ0RDMV9EQVQ5CShHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDExKQorI2RlZmluZSBQRDEyX0NJTl9TTENEQzFfREFUMTAJKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTIpCisjZGVmaW5lIFBEMTNfQ0lOX1NMQ0RDMV9EQVQxMQkoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxMykKKyNkZWZpbmUgUEQxNF9DSU5fU0xDREMxX0RBVDEyCShHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDE0KQorI2RlZmluZSBQRDE1X0NJTl9TTENEQzFfREFUMTMJKEdQSU9fUE9SVEQgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTUpCisjZGVmaW5lIFBEMTZfQ0lOX1NMQ0RDMV9EQVQxNAkoR1BJT19QT1JURCB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxNikKKyNkZWZpbmUgUEQyM19DSU5fU0xDREMxX0RBVDE1CShHUElPX1BPUlREIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDIzKQorI2RlZmluZSBQRjI3X0NJTl9FWFRfRE1BX0dSQU5UCShHUElPX1BPUlRGIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDI3KQogLyogTENEQ19URVNUeCBvbiBQQnh4IG9taXR0ZWQsIGJlY2F1c2UgaXQncyBub3QgY2xlYXIgd2hhdCB0aGV5IGRvICovCiAKIC8qIEFPVVQgR1BJTyBwaW4gZnVuY3Rpb25zICovCiAKLSNkZWZpbmUgUEMxNF9BT1VUX0dQVDZfVElOICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTQpCi0jZGVmaW5lIFBENF9BT1VUX0ZFQ19SWF9FUiAgICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDQpCi0jZGVmaW5lIFBENV9BT1VUX0ZFQ19SWEQxICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDUpCi0jZGVmaW5lIFBENl9BT1VUX0ZFQ19SWEQyICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDYpCi0jZGVmaW5lIFBEN19BT1VUX0ZFQ19SWEQzICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDcpCi0jZGVmaW5lIFBEMTBfQU9VVF9GRUNfQ1JTICAgICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDEwKQotI2RlZmluZSBQRDExX0FPVVRfRkVDX1RYX0NMSyAgICAoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxMSkKLSNkZWZpbmUgUEQxMl9BT1VUX0ZFQ19SWEQwICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTIpCi0jZGVmaW5lIFBEMTNfQU9VVF9GRUNfUlhfRFYgICAgIChHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDEzKQotI2RlZmluZSBQRDE0X0FPVVRfRkVDX1JYX0NMSyAgICAoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxNCkKLSNkZWZpbmUgUEQxNV9BT1VUX0ZFQ19DT0wgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTUpCisjZGVmaW5lIFBDMTRfQU9VVF9HUFQ2X1RJTgkoR1BJT19QT1JUQyB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxNCkKKyNkZWZpbmUgUEQ0X0FPVVRfRkVDX1JYX0VSCShHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDQpCisjZGVmaW5lIFBENV9BT1VUX0ZFQ19SWEQxCShHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDUpCisjZGVmaW5lIFBENl9BT1VUX0ZFQ19SWEQyCShHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDYpCisjZGVmaW5lIFBEN19BT1VUX0ZFQ19SWEQzCShHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDcpCisjZGVmaW5lIFBEMTBfQU9VVF9GRUNfQ1JTCShHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDEwKQorI2RlZmluZSBQRDExX0FPVVRfRkVDX1RYX0NMSwkoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxMSkKKyNkZWZpbmUgUEQxMl9BT1VUX0ZFQ19SWEQwCShHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDEyKQorI2RlZmluZSBQRDEzX0FPVVRfRkVDX1JYX0RWCShHUElPX1BPUlREIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDEzKQorI2RlZmluZSBQRDE0X0FPVVRfRkVDX1JYX0NMSwkoR1BJT19QT1JURCB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxNCkKKyNkZWZpbmUgUEQxNV9BT1VUX0ZFQ19DT0wJKEdQSU9fUE9SVEQgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMTUpCiAKLSNkZWZpbmUgUEMxN19CT1VUX1BDX0lPSVMxNiAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0JPVVQgfCBHUElPX0lOIHwgMTcpCi0jZGVmaW5lIFBDMThfQk9VVF9QQ19CVkQyICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19CT1VUIHwgR1BJT19JTiB8IDE4KQotI2RlZmluZSBQQzE5X0JPVVRfUENfQlZEMSAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQk9VVCB8IEdQSU9fSU4gfCAxOSkKLSNkZWZpbmUgUEMyOF9CT1VUX1BDX0JWRDIgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0JPVVQgfCBHUElPX0lOIHwgMjgpCi0jZGVmaW5lIFBDMjlfQk9VVF9QQ19WUzEgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19CT1VUIHwgR1BJT19JTiB8IDI5KQotI2RlZmluZSBQQzMwX0JPVVRfUENfUkVBRFkgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQk9VVCB8IEdQSU9fSU4gfCAzMCkKLSNkZWZpbmUgUEMzMV9CT1VUX1BDX1dBSVQgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0JPVVQgfCBHUElPX0lOIHwgMzEpCisvKiBCT1VUIEdQSU8gcGluIGZ1bmN0aW9ucyAqLwogCisjZGVmaW5lIFBDMTdfQk9VVF9QQ19JT0lTMTYJKEdQSU9fUE9SVEMgfCBHUElPX0JPVVQgfCBHUElPX0lOIHwgMTcpCisjZGVmaW5lIFBDMThfQk9VVF9QQ19CVkQyCShHUElPX1BPUlRDIHwgR1BJT19CT1VUIHwgR1BJT19JTiB8IDE4KQorI2RlZmluZSBQQzE5X0JPVVRfUENfQlZEMQkoR1BJT19QT1JUQyB8IEdQSU9fQk9VVCB8IEdQSU9fSU4gfCAxOSkKKyNkZWZpbmUgUEMyOF9CT1VUX1BDX0JWRDIJKEdQSU9fUE9SVEMgfCBHUElPX0JPVVQgfCBHUElPX0lOIHwgMjgpCisjZGVmaW5lIFBDMjlfQk9VVF9QQ19WUzEJKEdQSU9fUE9SVEMgfCBHUElPX0JPVVQgfCBHUElPX0lOIHwgMjkpCisjZGVmaW5lIFBDMzBfQk9VVF9QQ19SRUFEWQkoR1BJT19QT1JUQyB8IEdQSU9fQk9VVCB8IEdQSU9fSU4gfCAzMCkKKyNkZWZpbmUgUEMzMV9CT1VUX1BDX1dBSVQJKEdQSU9fUE9SVEMgfCBHUElPX0JPVVQgfCBHUElPX0lOIHwgMzEpCiAKLSNlbmRpZiAvKiBfTVhDX0dQSU9fTVgxX01YMl9IICovCisjZW5kaWYgLyogX19NQUNIX0lPTVVYX01YMjdfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyeC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MnguaAppbmRleCBmYjVhZTYzLi5jNGYxMTZkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgyeC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDJ4LmgKQEAgLTEsMjM3ICsxLDIzMCBAQAogLyoKLSogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IFNhc2NoYSBIYXVlciA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgotKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgSG9sZ2VyIFNjaHVyaWcgPGhzNDIzM0BtYWlsLm1uLXNvbHV0aW9ucy5kZT4KLSoKLSogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgotKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0qIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0qIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSoKLSogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAotKiBNQSAwMjExMC0xMzAxLCBVU0EuCi0qLwotCi0jaWZuZGVmIF9NWENfSU9NVVhfTVgyeF9ICi0jZGVmaW5lIF9NWENfSU9NVVhfTVgyeF9ICi0KLSNpZm5kZWYgR1BJT19QT1JUQQotI2Vycm9yIFBsZWFzZSBpbmNsdWRlIG1hY2gvaW9tdXguaAotI2VuZGlmCi0KKyAqIENvcHlyaWdodCAoQykgMjAwOCBieSBTYXNjaGEgSGF1ZXIgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBieSBIb2xnZXIgU2NodXJpZyA8aHM0MjMzQG1haWwubW4tc29sdXRpb25zLmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLAorICogTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisjaWZuZGVmIF9fTUFDSF9JT01VWF9NWDJ4X0hfXworI2RlZmluZSBfX01BQ0hfSU9NVVhfTVgyeF9IX18KIAogLyogUHJpbWFyeSBHUElPIHBpbiBmdW5jdGlvbnMgKi8KIAotI2RlZmluZSBQQTVfUEZfTFNDTEsgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDUpCi0jZGVmaW5lIFBBNl9QRl9MRDAgICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgNikKLSNkZWZpbmUgUEE3X1BGX0xEMSAgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA3KQotI2RlZmluZSBQQThfUEZfTEQyICAgICAgICAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDgpCi0jZGVmaW5lIFBBOV9QRl9MRDMgICAgICAgICAgICAgIChHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgOSkKLSNkZWZpbmUgUEExMF9QRl9MRDQgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMCkKLSNkZWZpbmUgUEExMV9QRl9MRDUgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMSkKLSNkZWZpbmUgUEExMl9QRl9MRDYgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMikKLSNkZWZpbmUgUEExM19QRl9MRDcgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMykKLSNkZWZpbmUgUEExNF9QRl9MRDggICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNCkKLSNkZWZpbmUgUEExNV9QRl9MRDkgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNSkKLSNkZWZpbmUgUEExNl9QRl9MRDEwICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNikKLSNkZWZpbmUgUEExN19QRl9MRDExICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNykKLSNkZWZpbmUgUEExOF9QRl9MRDEyICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxOCkKLSNkZWZpbmUgUEExOV9QRl9MRDEzICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxOSkKLSNkZWZpbmUgUEEyMF9QRl9MRDE0ICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMCkKLSNkZWZpbmUgUEEyMV9QRl9MRDE1ICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMSkKLSNkZWZpbmUgUEEyMl9QRl9MRDE2ICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMikKLSNkZWZpbmUgUEEyM19QRl9MRDE3ICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMykKLSNkZWZpbmUgUEEyNF9QRl9SRVYgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNCkKLSNkZWZpbmUgUEEyNV9QRl9DTFMgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNSkKLSNkZWZpbmUgUEEyNl9QRl9QUyAgICAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNikKLSNkZWZpbmUgUEEyN19QRl9TUExfU1BSICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNykKLSNkZWZpbmUgUEEyOF9QRl9IU1lOQyAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyOCkKLSNkZWZpbmUgUEEyOV9QRl9WU1lOQyAgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyOSkKLSNkZWZpbmUgUEEzMF9QRl9DT05UUkFTVCAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAzMCkKLSNkZWZpbmUgUEEzMV9QRl9PRV9BQ0QgICAgICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAzMSkKLSNkZWZpbmUgUEI0X1BGX1NEMl9EMCAgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgNCkKLSNkZWZpbmUgUEI1X1BGX1NEMl9EMSAgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgNSkKLSNkZWZpbmUgUEI2X1BGX1NEMl9EMiAgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgNikKLSNkZWZpbmUgUEI3X1BGX1NEMl9EMyAgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgNykKLSNkZWZpbmUgUEI4X1BGX1NEMl9DTUQgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgOCkKLSNkZWZpbmUgUEI5X1BGX1NEMl9DTEsgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgOSkKLSNkZWZpbmUgUEIxMF9QRl9DU0lfRDAgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMCkKLSNkZWZpbmUgUEIxMV9QRl9DU0lfRDEgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMSkKLSNkZWZpbmUgUEIxMl9QRl9DU0lfRDIgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMikKLSNkZWZpbmUgUEIxM19QRl9DU0lfRDMgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMykKLSNkZWZpbmUgUEIxNF9QRl9DU0lfRDQgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNCkKLSNkZWZpbmUgUEIxNV9QRl9DU0lfTUNMSyAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNSkKLSNkZWZpbmUgUEIxNl9QRl9DU0lfUElYQ0xLICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNikKLSNkZWZpbmUgUEIxN19QRl9DU0lfRDUgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNykKLSNkZWZpbmUgUEIxOF9QRl9DU0lfRDYgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxOCkKLSNkZWZpbmUgUEIxOV9QRl9DU0lfRDcgICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxOSkKLSNkZWZpbmUgUEIyMF9QRl9DU0lfVlNZTkMgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMCkKLSNkZWZpbmUgUEIyMV9QRl9DU0lfSFNZTkMgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMSkKLSNkZWZpbmUgUEIyM19QRl9VU0JfUFdSICAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjMpCi0jZGVmaW5lIFBCMjRfUEZfVVNCX09DICAgICAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI0KQotI2RlZmluZSBQQjI2X1BGX1VTQkgxX0ZTICAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNikKLSNkZWZpbmUgUEIyN19QRl9VU0JIMV9PRSAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjcpCi0jZGVmaW5lIFBCMjhfUEZfVVNCSDFfVFhETSAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI4KQotI2RlZmluZSBQQjI5X1BGX1VTQkgxX1RYRFAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyOSkKLSNkZWZpbmUgUEIzMF9QRl9VU0JIMV9SWERNICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMzApCi0jZGVmaW5lIFBCMzFfUEZfVVNCSDFfUlhEUCAgICAgIChHUElPX1BPUlRCIHwgR1BJT19QRiB8IDMxKQotI2RlZmluZSBQQzE0X1BGX1RPVVQgICAgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCAxNCkKLSNkZWZpbmUgUEMxNV9QRl9USU4gICAgICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTUpCi0jZGVmaW5lIFBDMjBfUEZfU1NJMV9GUyAgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAyMCkKLSNkZWZpbmUgUEMyMV9QRl9TU0kxX1JYRCAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDIxKQotI2RlZmluZSBQQzIyX1BGX1NTSTFfVFhEICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMjIpCi0jZGVmaW5lIFBDMjNfUEZfU1NJMV9DTEsgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAyMykKLSNkZWZpbmUgUEMyNF9QRl9TU0kyX0ZTICAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDI0KQotI2RlZmluZSBQQzI1X1BGX1NTSTJfUlhEICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMjUpCi0jZGVmaW5lIFBDMjZfUEZfU1NJMl9UWEQgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAyNikKLSNkZWZpbmUgUEMyN19QRl9TU0kyX0NMSyAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDI3KQotI2RlZmluZSBQQzI4X1BGX1NTSTNfRlMgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMjgpCi0jZGVmaW5lIFBDMjlfUEZfU1NJM19SWEQgICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAyOSkKLSNkZWZpbmUgUEMzMF9QRl9TU0kzX1RYRCAgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDMwKQotI2RlZmluZSBQQzMxX1BGX1NTSTNfQ0xLICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMzEpCi0jZGVmaW5lIFBEMTdfUEZfSTJDX0RBVEEgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTcpCi0jZGVmaW5lIFBEMThfUEZfSTJDX0NMSyAgICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTgpCi0jZGVmaW5lIFBEMTlfUEZfQ1NQSTJfU1MyICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDE5KQotI2RlZmluZSBQRDIwX1BGX0NTUEkyX1NTMSAgICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAyMCkKLSNkZWZpbmUgUEQyMV9QRl9DU1BJMl9TUzAgICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMjEpCi0jZGVmaW5lIFBEMjJfUEZfQ1NQSTJfU0NMSyAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IDIyKQotI2RlZmluZSBQRDIzX1BGX0NTUEkyX01JU08gICAgICAoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAyMykKLSNkZWZpbmUgUEQyNF9QRl9DU1BJMl9NT1NJICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMjQpCi0jZGVmaW5lIFBEMjVfUEZfQ1NQSTFfUkRZICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjUpCi0jZGVmaW5lIFBEMjZfUEZfQ1NQSTFfU1MyICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjYpCi0jZGVmaW5lIFBEMjdfUEZfQ1NQSTFfU1MxICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjcpCi0jZGVmaW5lIFBEMjhfUEZfQ1NQSTFfU1MwICAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjgpCi0jZGVmaW5lIFBEMjlfUEZfQ1NQSTFfU0NMSyAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjkpCi0jZGVmaW5lIFBEMzBfUEZfQ1NQSTFfTUlTTyAgICAgIChHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAzMCkKLSNkZWZpbmUgUEQzMV9QRl9DU1BJMV9NT1NJICAgICAgKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAzMSkKLSNkZWZpbmUgUEUzX1BGX1VBUlQyX0NUUyAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAzKQotI2RlZmluZSBQRTRfUEZfVUFSVDJfUlRTICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX0lOIHwgNCkKLSNkZWZpbmUgUEU1X1BGX1BXTU8gICAgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgNSkKLSNkZWZpbmUgUEU2X1BGX1VBUlQyX1RYRCAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA2KQotI2RlZmluZSBQRTdfUEZfVUFSVDJfUlhEICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX0lOIHwgNykKLSNkZWZpbmUgUEU4X1BGX1VBUlQzX1RYRCAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA4KQotI2RlZmluZSBQRTlfUEZfVUFSVDNfUlhEICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX0lOIHwgOSkKLSNkZWZpbmUgUEUxMF9QRl9VQVJUM19DVFMgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMCkKLSNkZWZpbmUgUEUxMV9QRl9VQVJUM19SVFMgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19JTiB8IDExKQotI2RlZmluZSBQRTEyX1BGX1VBUlQxX1RYRCAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEyKQotI2RlZmluZSBQRTEzX1BGX1VBUlQxX1JYRCAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMTMpCi0jZGVmaW5lIFBFMTRfUEZfVUFSVDFfQ1RTICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTQpCi0jZGVmaW5lIFBFMTVfUEZfVUFSVDFfUlRTICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAxNSkKLSNkZWZpbmUgUEUxNl9QRl9SVENLICAgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNikKLSNkZWZpbmUgUEUxN19QRl9SRVNFVF9PVVQgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMTcpCi0jZGVmaW5lIFBFMThfUEZfU0QxX0QwICAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IDE4KQotI2RlZmluZSBQRTE5X1BGX1NEMV9EMSAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAxOSkKLSNkZWZpbmUgUEUyMF9QRl9TRDFfRDIgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMjApCi0jZGVmaW5lIFBFMjFfUEZfU0QxX0QzICAgICAgICAgIChHUElPX1BPUlRFIHwgR1BJT19QRiB8IDIxKQotI2RlZmluZSBQRTIyX1BGX1NEMV9DTUQgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAyMikKLSNkZWZpbmUgUEUyM19QRl9TRDFfQ0xLICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMjMpCi0jZGVmaW5lIFBGMF9QRl9OUkZCICAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDApCi0jZGVmaW5lIFBGMl9QRl9ORldQICAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDIpCi0jZGVmaW5lIFBGNF9QRl9ORkFMRSAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDQpCi0jZGVmaW5lIFBGNV9QRl9ORlJFICAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDUpCi0jZGVmaW5lIFBGNl9QRl9ORldFICAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDYpCi0jZGVmaW5lIFBGMTVfUEZfQ0xLTyAgICAgICAgICAgIChHUElPX1BPUlRGIHwgR1BJT19QRiB8IDE1KQotI2RlZmluZSBQRjIxX1BGX0NTNCAgICAgICAgICAgICAoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAyMSkKLSNkZWZpbmUgUEYyMl9QRl9DUzUgICAgICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMjIpCisjZGVmaW5lIFBBNV9QRl9MU0NMSwkJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA1KQorI2RlZmluZSBQQTZfUEZfTEQwCQkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDYpCisjZGVmaW5lIFBBN19QRl9MRDEJCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgNykKKyNkZWZpbmUgUEE4X1BGX0xEMgkJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA4KQorI2RlZmluZSBQQTlfUEZfTEQzCQkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDkpCisjZGVmaW5lIFBBMTBfUEZfTEQ0CQkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEwKQorI2RlZmluZSBQQTExX1BGX0xENQkJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMSkKKyNkZWZpbmUgUEExMl9QRl9MRDYJCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTIpCisjZGVmaW5lIFBBMTNfUEZfTEQ3CQkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEzKQorI2RlZmluZSBQQTE0X1BGX0xEOAkJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNCkKKyNkZWZpbmUgUEExNV9QRl9MRDkJCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTUpCisjZGVmaW5lIFBBMTZfUEZfTEQxMAkJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNikKKyNkZWZpbmUgUEExN19QRl9MRDExCQkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE3KQorI2RlZmluZSBQQTE4X1BGX0xEMTIJCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTgpCisjZGVmaW5lIFBBMTlfUEZfTEQxMwkJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxOSkKKyNkZWZpbmUgUEEyMF9QRl9MRDE0CQkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDIwKQorI2RlZmluZSBQQTIxX1BGX0xEMTUJCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjEpCisjZGVmaW5lIFBBMjJfUEZfTEQxNgkJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyMikKKyNkZWZpbmUgUEEyM19QRl9MRDE3CQkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDIzKQorI2RlZmluZSBQQTI0X1BGX1JFVgkJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNCkKKyNkZWZpbmUgUEEyNV9QRl9DTFMJCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjUpCisjZGVmaW5lIFBBMjZfUEZfUFMJCShHUElPX1BPUlRBIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjYpCisjZGVmaW5lIFBBMjdfUEZfU1BMX1NQUgkJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyNykKKyNkZWZpbmUgUEEyOF9QRl9IU1lOQwkJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyOCkKKyNkZWZpbmUgUEEyOV9QRl9WU1lOQwkJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyOSkKKyNkZWZpbmUgUEEzMF9QRl9DT05UUkFTVAkoR1BJT19QT1JUQSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDMwKQorI2RlZmluZSBQQTMxX1BGX09FX0FDRAkJKEdQSU9fUE9SVEEgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAzMSkKKyNkZWZpbmUgUEI0X1BGX1NEMl9EMAkJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgNCkKKyNkZWZpbmUgUEI1X1BGX1NEMl9EMQkJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgNSkKKyNkZWZpbmUgUEI2X1BGX1NEMl9EMgkJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgNikKKyNkZWZpbmUgUEI3X1BGX1NEMl9EMwkJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgNykKKyNkZWZpbmUgUEI4X1BGX1NEMl9DTUQJCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDgpCisjZGVmaW5lIFBCOV9QRl9TRDJfQ0xLCQkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCA5KQorI2RlZmluZSBQQjEwX1BGX0NTSV9EMAkJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMCkKKyNkZWZpbmUgUEIxMV9QRl9DU0lfRDEJCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTEpCisjZGVmaW5lIFBCMTJfUEZfQ1NJX0QyCQkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEyKQorI2RlZmluZSBQQjEzX1BGX0NTSV9EMwkJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxMykKKyNkZWZpbmUgUEIxNF9QRl9DU0lfRDQJCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTQpCisjZGVmaW5lIFBCMTVfUEZfQ1NJX01DTEsJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNSkKKyNkZWZpbmUgUEIxNl9QRl9DU0lfUElYQ0xLCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTYpCisjZGVmaW5lIFBCMTdfUEZfQ1NJX0Q1CQkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE3KQorI2RlZmluZSBQQjE4X1BGX0NTSV9ENgkJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxOCkKKyNkZWZpbmUgUEIxOV9QRl9DU0lfRDcJCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTkpCisjZGVmaW5lIFBCMjBfUEZfQ1NJX1ZTWU5DCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjApCisjZGVmaW5lIFBCMjFfUEZfQ1NJX0hTWU5DCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMjEpCisjZGVmaW5lIFBCMjNfUEZfVVNCX1BXUgkJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjMpCisjZGVmaW5lIFBCMjRfUEZfVVNCX09DCQkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNCkKKyNkZWZpbmUgUEIyNl9QRl9VU0JIMV9GUwkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNikKKyNkZWZpbmUgUEIyN19QRl9VU0JIMV9PRQkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAyNykKKyNkZWZpbmUgUEIyOF9QRl9VU0JIMV9UWERNCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDI4KQorI2RlZmluZSBQQjI5X1BGX1VTQkgxX1RYRFAJKEdQSU9fUE9SVEIgfCBHUElPX1BGIHwgMjkpCisjZGVmaW5lIFBCMzBfUEZfVVNCSDFfUlhETQkoR1BJT19QT1JUQiB8IEdQSU9fUEYgfCAzMCkKKyNkZWZpbmUgUEIzMV9QRl9VU0JIMV9SWERQCShHUElPX1BPUlRCIHwgR1BJT19QRiB8IDMxKQorI2RlZmluZSBQQzE0X1BGX1RPVVQJCShHUElPX1BPUlRDIHwgR1BJT19QRiB8IDE0KQorI2RlZmluZSBQQzE1X1BGX1RJTgkJKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgMTUpCisjZGVmaW5lIFBDMjBfUEZfU1NJMV9GUwkJKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDIwKQorI2RlZmluZSBQQzIxX1BGX1NTSTFfUlhECShHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAyMSkKKyNkZWZpbmUgUEMyMl9QRl9TU0kxX1RYRAkoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMjIpCisjZGVmaW5lIFBDMjNfUEZfU1NJMV9DTEsJKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDIzKQorI2RlZmluZSBQQzI0X1BGX1NTSTJfRlMJCShHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAyNCkKKyNkZWZpbmUgUEMyNV9QRl9TU0kyX1JYRAkoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMjUpCisjZGVmaW5lIFBDMjZfUEZfU1NJMl9UWEQJKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDI2KQorI2RlZmluZSBQQzI3X1BGX1NTSTJfQ0xLCShHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAyNykKKyNkZWZpbmUgUEMyOF9QRl9TU0kzX0ZTCQkoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMjgpCisjZGVmaW5lIFBDMjlfUEZfU1NJM19SWEQJKEdQSU9fUE9SVEMgfCBHUElPX1BGIHwgR1BJT19JTiB8IDI5KQorI2RlZmluZSBQQzMwX1BGX1NTSTNfVFhECShHUElPX1BPUlRDIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAzMCkKKyNkZWZpbmUgUEMzMV9QRl9TU0kzX0NMSwkoR1BJT19QT1JUQyB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMzEpCisjZGVmaW5lIFBEMTdfUEZfSTJDX0RBVEEJKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNykKKyNkZWZpbmUgUEQxOF9QRl9JMkNfQ0xLCQkoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDE4KQorI2RlZmluZSBQRDE5X1BGX0NTUEkyX1NTMgkoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAxOSkKKyNkZWZpbmUgUEQyMF9QRl9DU1BJMl9TUzEJKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMjApCisjZGVmaW5lIFBEMjFfUEZfQ1NQSTJfU1MwCShHUElPX1BPUlREIHwgR1BJT19QRiB8IDIxKQorI2RlZmluZSBQRDIyX1BGX0NTUEkyX1NDTEsJKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgMjIpCisjZGVmaW5lIFBEMjNfUEZfQ1NQSTJfTUlTTwkoR1BJT19QT1JURCB8IEdQSU9fUEYgfCAyMykKKyNkZWZpbmUgUEQyNF9QRl9DU1BJMl9NT1NJCShHUElPX1BPUlREIHwgR1BJT19QRiB8IDI0KQorI2RlZmluZSBQRDI1X1BGX0NTUEkxX1JEWQkoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI1KQorI2RlZmluZSBQRDI2X1BGX0NTUEkxX1NTMgkoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI2KQorI2RlZmluZSBQRDI3X1BGX0NTUEkxX1NTMQkoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI3KQorI2RlZmluZSBQRDI4X1BGX0NTUEkxX1NTMAkoR1BJT19QT1JURCB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDI4KQorI2RlZmluZSBQRDI5X1BGX0NTUEkxX1NDTEsJKEdQSU9fUE9SVEQgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAyOSkKKyNkZWZpbmUgUEQzMF9QRl9DU1BJMV9NSVNPCShHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAzMCkKKyNkZWZpbmUgUEQzMV9QRl9DU1BJMV9NT1NJCShHUElPX1BPUlREIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMzEpCisjZGVmaW5lIFBFM19QRl9VQVJUMl9DVFMJKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAzKQorI2RlZmluZSBQRTRfUEZfVUFSVDJfUlRTCShHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fSU4gfCA0KQorI2RlZmluZSBQRTVfUEZfUFdNTwkJKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgNSkKKyNkZWZpbmUgUEU2X1BGX1VBUlQyX1RYRAkoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDYpCisjZGVmaW5lIFBFN19QRl9VQVJUMl9SWEQJKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19JTiB8IDcpCisjZGVmaW5lIFBFOF9QRl9VQVJUM19UWEQJKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCA4KQorI2RlZmluZSBQRTlfUEZfVUFSVDNfUlhECShHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fSU4gfCA5KQorI2RlZmluZSBQRTEwX1BGX1VBUlQzX0NUUwkoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX09VVCB8IDEwKQorI2RlZmluZSBQRTExX1BGX1VBUlQzX1JUUwkoR1BJT19QT1JURSB8IEdQSU9fUEYgfCBHUElPX0lOIHwgMTEpCisjZGVmaW5lIFBFMTJfUEZfVUFSVDFfVFhECShHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTIpCisjZGVmaW5lIFBFMTNfUEZfVUFSVDFfUlhECShHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fSU4gfCAxMykKKyNkZWZpbmUgUEUxNF9QRl9VQVJUMV9DVFMJKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19PVVQgfCAxNCkKKyNkZWZpbmUgUEUxNV9QRl9VQVJUMV9SVFMJKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgR1BJT19JTiB8IDE1KQorI2RlZmluZSBQRTE2X1BGX1JUQ0sJCShHUElPX1BPUlRFIHwgR1BJT19QRiB8IEdQSU9fT1VUIHwgMTYpCisjZGVmaW5lIFBFMTdfUEZfUkVTRVRfT1VUCShHUElPX1BPUlRFIHwgR1BJT19QRiB8IDE3KQorI2RlZmluZSBQRTE4X1BGX1NEMV9EMAkJKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMTgpCisjZGVmaW5lIFBFMTlfUEZfU0QxX0QxCQkoR1BJT19QT1JURSB8IEdQSU9fUEYgfCAxOSkKKyNkZWZpbmUgUEUyMF9QRl9TRDFfRDIJCShHUElPX1BPUlRFIHwgR1BJT19QRiB8IDIwKQorI2RlZmluZSBQRTIxX1BGX1NEMV9EMwkJKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMjEpCisjZGVmaW5lIFBFMjJfUEZfU0QxX0NNRAkJKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMjIpCisjZGVmaW5lIFBFMjNfUEZfU0QxX0NMSwkJKEdQSU9fUE9SVEUgfCBHUElPX1BGIHwgMjMpCisjZGVmaW5lIFBGMF9QRl9OUkZCCQkoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAwKQorI2RlZmluZSBQRjJfUEZfTkZXUAkJKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMikKKyNkZWZpbmUgUEY0X1BGX05GQUxFCQkoR1BJT19QT1JURiB8IEdQSU9fUEYgfCA0KQorI2RlZmluZSBQRjVfUEZfTkZSRQkJKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgNSkKKyNkZWZpbmUgUEY2X1BGX05GV0UJCShHUElPX1BPUlRGIHwgR1BJT19QRiB8IDYpCisjZGVmaW5lIFBGMTVfUEZfQ0xLTwkJKEdQSU9fUE9SVEYgfCBHUElPX1BGIHwgMTUpCisjZGVmaW5lIFBGMjFfUEZfQ1M0CQkoR1BJT19QT1JURiB8IEdQSU9fUEYgfCAyMSkKKyNkZWZpbmUgUEYyMl9QRl9DUzUJCShHUElPX1BPUlRGIHwgR1BJT19QRiB8IDIyKQogCiAvKiBBbHRlcm5hdGUgR1BJTyBwaW4gZnVuY3Rpb25zICovCiAKLSNkZWZpbmUgUEIyNl9BRl9VQVJUNF9SVFMgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19JTiB8IDI2KQotI2RlZmluZSBQQjI4X0FGX1VBUlQ0X1RYRCAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDI4KQotI2RlZmluZSBQQjI5X0FGX1VBUlQ0X0NUUyAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDI5KQotI2RlZmluZSBQQjMxX0FGX1VBUlQ0X1JYRCAgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX0lOIHwgMzEpCi0jZGVmaW5lIFBDMjhfQUZfU0xDREMyX0QwICAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BRiB8IDI4KQotI2RlZmluZSBQQzI5X0FGX1NMQ0RDMl9SUyAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQUYgfCAyOSkKLSNkZWZpbmUgUEMzMF9BRl9TTENEQzJfQ1MgICAgICAgKEdQSU9fUE9SVEMgfCBHUElPX0FGIHwgMzApCi0jZGVmaW5lIFBDMzFfQUZfU0xDREMyX0NMSyAgICAgIChHUElPX1BPUlRDIHwgR1BJT19BRiB8IDMxKQotI2RlZmluZSBQRDE5X0FGX1VTQkgyX0RBVEE0ICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAxOSkKLSNkZWZpbmUgUEQyMF9BRl9VU0JIMl9EQVRBMyAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMjApCi0jZGVmaW5lIFBEMjFfQUZfVVNCSDJfREFUQTYgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDIxKQotI2RlZmluZSBQRDIyX0FGX1VTQkgyX0RBVEEwICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyMikKLSNkZWZpbmUgUEQyM19BRl9VU0JIMl9EQVRBMiAgICAgKEdQSU9fUE9SVEQgfCBHUElPX0FGIHwgMjMpCi0jZGVmaW5lIFBEMjRfQUZfVVNCSDJfREFUQTEgICAgIChHUElPX1BPUlREIHwgR1BJT19BRiB8IDI0KQotI2RlZmluZSBQRDI2X0FGX1VTQkgyX0RBVEE1ICAgICAoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyNikKLSNkZWZpbmUgUEUwX0FGX0tQX0NPTDYgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgMCkKLSNkZWZpbmUgUEUxX0FGX0tQX1JPVzYgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgMSkKLSNkZWZpbmUgUEUyX0FGX0tQX1JPVzcgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgMikKLSNkZWZpbmUgUEUzX0FGX0tQX0NPTDcgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgMykKLSNkZWZpbmUgUEU0X0FGX0tQX1JPVzcgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgNCkKLSNkZWZpbmUgUEU2X0FGX0tQX0NPTDYgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgNikKLSNkZWZpbmUgUEU3X0FGX0tQX1JPVzYgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgNykKLSNkZWZpbmUgUEUxNl9BRl9PV0lSRSAgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgMTYpCi0jZGVmaW5lIFBFMThfQUZfQ1NQSTNfTUlTTyAgICAgIChHUElPX1BPUlRFIHwgR1BJT19BRiB8IEdQSU9fSU4gfCAxOCkKLSNkZWZpbmUgUEUyMV9BRl9DU1BJM19TUyAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgR1BJT19PVVQgfCAyMSkKLSNkZWZpbmUgUEUyMl9BRl9DU1BJM19NT1NJICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgR1BJT19PVVQgfCAyMikKLSNkZWZpbmUgUEUyM19BRl9DU1BJM19TQ0xLICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgR1BJT19PVVQgfCAyMykKKyNkZWZpbmUgUEIyNl9BRl9VQVJUNF9SVFMJKEdQSU9fUE9SVEIgfCBHUElPX0FGIHwgR1BJT19JTiB8IDI2KQorI2RlZmluZSBQQjI4X0FGX1VBUlQ0X1RYRAkoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDI4KQorI2RlZmluZSBQQjI5X0FGX1VBUlQ0X0NUUwkoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDI5KQorI2RlZmluZSBQQjMxX0FGX1VBUlQ0X1JYRAkoR1BJT19QT1JUQiB8IEdQSU9fQUYgfCBHUElPX0lOIHwgMzEpCisjZGVmaW5lIFBDMjhfQUZfU0xDREMyX0QwCShHUElPX1BPUlRDIHwgR1BJT19BRiB8IDI4KQorI2RlZmluZSBQQzI5X0FGX1NMQ0RDMl9SUwkoR1BJT19QT1JUQyB8IEdQSU9fQUYgfCAyOSkKKyNkZWZpbmUgUEMzMF9BRl9TTENEQzJfQ1MJKEdQSU9fUE9SVEMgfCBHUElPX0FGIHwgMzApCisjZGVmaW5lIFBDMzFfQUZfU0xDREMyX0NMSwkoR1BJT19QT1JUQyB8IEdQSU9fQUYgfCAzMSkKKyNkZWZpbmUgUEQxOV9BRl9VU0JIMl9EQVRBNAkoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAxOSkKKyNkZWZpbmUgUEQyMF9BRl9VU0JIMl9EQVRBMwkoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyMCkKKyNkZWZpbmUgUEQyMV9BRl9VU0JIMl9EQVRBNgkoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyMSkKKyNkZWZpbmUgUEQyMl9BRl9VU0JIMl9EQVRBMAkoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyMikKKyNkZWZpbmUgUEQyM19BRl9VU0JIMl9EQVRBMgkoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyMykKKyNkZWZpbmUgUEQyNF9BRl9VU0JIMl9EQVRBMQkoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyNCkKKyNkZWZpbmUgUEQyNl9BRl9VU0JIMl9EQVRBNQkoR1BJT19QT1JURCB8IEdQSU9fQUYgfCAyNikKKyNkZWZpbmUgUEUwX0FGX0tQX0NPTDYJCShHUElPX1BPUlRFIHwgR1BJT19BRiB8IDApCisjZGVmaW5lIFBFMV9BRl9LUF9ST1c2CQkoR1BJT19QT1JURSB8IEdQSU9fQUYgfCAxKQorI2RlZmluZSBQRTJfQUZfS1BfUk9XNwkJKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgMikKKyNkZWZpbmUgUEUzX0FGX0tQX0NPTDcJCShHUElPX1BPUlRFIHwgR1BJT19BRiB8IDMpCisjZGVmaW5lIFBFNF9BRl9LUF9ST1c3CQkoR1BJT19QT1JURSB8IEdQSU9fQUYgfCA0KQorI2RlZmluZSBQRTZfQUZfS1BfQ09MNgkJKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgNikKKyNkZWZpbmUgUEU3X0FGX0tQX1JPVzYJCShHUElPX1BPUlRFIHwgR1BJT19BRiB8IDcpCisjZGVmaW5lIFBFMTZfQUZfT1dJUkUJCShHUElPX1BPUlRFIHwgR1BJT19BRiB8IDE2KQorI2RlZmluZSBQRTE4X0FGX0NTUEkzX01JU08JKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgR1BJT19JTiB8IDE4KQorI2RlZmluZSBQRTIxX0FGX0NTUEkzX1NTCShHUElPX1BPUlRFIHwgR1BJT19BRiB8IEdQSU9fT1VUIHwgMjEpCisjZGVmaW5lIFBFMjJfQUZfQ1NQSTNfTU9TSQkoR1BJT19QT1JURSB8IEdQSU9fQUYgfCBHUElPX09VVCB8IDIyKQorI2RlZmluZSBQRTIzX0FGX0NTUEkzX1NDTEsJKEdQSU9fUE9SVEUgfCBHUElPX0FGIHwgR1BJT19PVVQgfCAyMykKIAogLyogQUlOIEdQSU8gcGluIGZ1bmN0aW9ucyAqLwogCi0jZGVmaW5lIFBBNl9BSU5fU0xDREMxX0RBVDAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDYpCi0jZGVmaW5lIFBBN19BSU5fU0xDREMxX0RBVDEgICAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDcpCi0jZGVmaW5lIFBBOF9BSU5fU0xDREMxX0RBVDIgICAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDgpCi0jZGVmaW5lIFBBMF9BSU5fU0xDREMxX0RBVDMgICAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDApCi0jZGVmaW5lIFBBMTFfQUlOX1NMQ0RDMV9EQVQ1ICAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDExKQotI2RlZmluZSBQQTEzX0FJTl9TTENEQzFfREFUNyAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxMykKLSNkZWZpbmUgUEExNV9BSU5fU0xDREMxX0RBVDkgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTUpCi0jZGVmaW5lIFBBMTdfQUlOX1NMQ0RDMV9EQVQxMSAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDE3KQotI2RlZmluZSBQQTE5X0FJTl9TTENEQzFfREFUMTMgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxOSkKLSNkZWZpbmUgUEEyMV9BSU5fU0xDREMxX0RBVDE1ICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjEpCi0jZGVmaW5lIFBBMjJfQUlOX0VYVF9ETUFHUkFOVCAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDIyKQotI2RlZmluZSBQQTI0X0FJTl9TTENEQzFfRDAgICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyNCkKLSNkZWZpbmUgUEEyNV9BSU5fU0xDREMxX1JTICAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjUpCi0jZGVmaW5lIFBBMjZfQUlOX1NMQ0RDMV9DUyAgICAgIChHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDI2KQotI2RlZmluZSBQQTI3X0FJTl9TTENEQzFfQ0xLICAgICAoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyNykKLSNkZWZpbmUgUEI2X0FJTl9TTENEQzFfRDAgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgNikKLSNkZWZpbmUgUEI3X0FJTl9TTENEQzFfUlMgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgNykKLSNkZWZpbmUgUEI4X0FJTl9TTENEQzFfQ1MgICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgOCkKLSNkZWZpbmUgUEI5X0FJTl9TTENEQzFfQ0xLICAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgOSkKLSNkZWZpbmUgUEIyNV9BSU5fU0xDREMxX0RBVDAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjUpCi0jZGVmaW5lIFBCMjZfQUlOX1NMQ0RDMV9EQVQxICAgIChHUElPX1BPUlRCIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDI2KQotI2RlZmluZSBQQjI3X0FJTl9TTENEQzFfREFUMiAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyNykKLSNkZWZpbmUgUEIyOF9BSU5fU0xDREMxX0RBVDMgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjgpCi0jZGVmaW5lIFBCMjlfQUlOX1NMQ0RDMV9EQVQ0ICAgIChHUElPX1BPUlRCIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDI5KQotI2RlZmluZSBQQjMwX0FJTl9TTENEQzFfREFUNSAgICAoR1BJT19QT1JUQiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAzMCkKLSNkZWZpbmUgUEIzMV9BSU5fU0xDREMxX0RBVDYgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMzEpCi0jZGVmaW5lIFBDNV9BSU5fU0xDREMxX0RBVDcgICAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDUpCi0jZGVmaW5lIFBDNl9BSU5fU0xDREMxX0RBVDggICAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDYpCi0jZGVmaW5lIFBDN19BSU5fU0xDREMxX0RBVDkgICAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDcpCi0jZGVmaW5lIFBDOF9BSU5fU0xDREMxX0RBVDEwICAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDgpCi0jZGVmaW5lIFBDOV9BSU5fU0xDREMxX0RBVDExICAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDkpCi0jZGVmaW5lIFBDMTBfQUlOX1NMQ0RDMV9EQVQxMiAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDEwKQotI2RlZmluZSBQQzExX0FJTl9TTENEQzFfREFUMTMgICAoR1BJT19QT1JUQyB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxMSkKLSNkZWZpbmUgUEMxMl9BSU5fU0xDREMxX0RBVDE0ICAgKEdQSU9fUE9SVEMgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTIpCi0jZGVmaW5lIFBDMTNfQUlOX1NMQ0RDMV9EQVQxNSAgIChHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDEzKQotI2RlZmluZSBQRTVfQUlOX1BDX1NQS09VVCAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA1KQorI2RlZmluZSBQQTZfQUlOX1NMQ0RDMV9EQVQwCShHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDYpCisjZGVmaW5lIFBBN19BSU5fU0xDREMxX0RBVDEJKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgNykKKyNkZWZpbmUgUEE4X0FJTl9TTENEQzFfREFUMgkoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA4KQorI2RlZmluZSBQQTBfQUlOX1NMQ0RDMV9EQVQzCShHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDApCisjZGVmaW5lIFBBMTFfQUlOX1NMQ0RDMV9EQVQ1CShHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDExKQorI2RlZmluZSBQQTEzX0FJTl9TTENEQzFfREFUNwkoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxMykKKyNkZWZpbmUgUEExNV9BSU5fU0xDREMxX0RBVDkJKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTUpCisjZGVmaW5lIFBBMTdfQUlOX1NMQ0RDMV9EQVQxMQkoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxNykKKyNkZWZpbmUgUEExOV9BSU5fU0xDREMxX0RBVDEzCShHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDE5KQorI2RlZmluZSBQQTIxX0FJTl9TTENEQzFfREFUMTUJKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjEpCisjZGVmaW5lIFBBMjJfQUlOX0VYVF9ETUFHUkFOVAkoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyMikKKyNkZWZpbmUgUEEyNF9BSU5fU0xDREMxX0QwCShHUElPX1BPUlRBIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDI0KQorI2RlZmluZSBQQTI1X0FJTl9TTENEQzFfUlMJKEdQSU9fUE9SVEEgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjUpCisjZGVmaW5lIFBBMjZfQUlOX1NMQ0RDMV9DUwkoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyNikKKyNkZWZpbmUgUEEyN19BSU5fU0xDREMxX0NMSwkoR1BJT19QT1JUQSB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyNykKKyNkZWZpbmUgUEI2X0FJTl9TTENEQzFfRDAJKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgNikKKyNkZWZpbmUgUEI3X0FJTl9TTENEQzFfUlMJKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgNykKKyNkZWZpbmUgUEI4X0FJTl9TTENEQzFfQ1MJKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgOCkKKyNkZWZpbmUgUEI5X0FJTl9TTENEQzFfQ0xLCShHUElPX1BPUlRCIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDkpCisjZGVmaW5lIFBCMjVfQUlOX1NMQ0RDMV9EQVQwCShHUElPX1BPUlRCIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDI1KQorI2RlZmluZSBQQjI2X0FJTl9TTENEQzFfREFUMQkoR1BJT19QT1JUQiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyNikKKyNkZWZpbmUgUEIyN19BSU5fU0xDREMxX0RBVDIJKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMjcpCisjZGVmaW5lIFBCMjhfQUlOX1NMQ0RDMV9EQVQzCShHUElPX1BPUlRCIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDI4KQorI2RlZmluZSBQQjI5X0FJTl9TTENEQzFfREFUNAkoR1BJT19QT1JUQiB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAyOSkKKyNkZWZpbmUgUEIzMF9BSU5fU0xDREMxX0RBVDUJKEdQSU9fUE9SVEIgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMzApCisjZGVmaW5lIFBCMzFfQUlOX1NMQ0RDMV9EQVQ2CShHUElPX1BPUlRCIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDMxKQorI2RlZmluZSBQQzVfQUlOX1NMQ0RDMV9EQVQ3CShHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDUpCisjZGVmaW5lIFBDNl9BSU5fU0xDREMxX0RBVDgJKEdQSU9fUE9SVEMgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgNikKKyNkZWZpbmUgUEM3X0FJTl9TTENEQzFfREFUOQkoR1BJT19QT1JUQyB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA3KQorI2RlZmluZSBQQzhfQUlOX1NMQ0RDMV9EQVQxMAkoR1BJT19QT1JUQyB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA4KQorI2RlZmluZSBQQzlfQUlOX1NMQ0RDMV9EQVQxMQkoR1BJT19QT1JUQyB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCA5KQorI2RlZmluZSBQQzEwX0FJTl9TTENEQzFfREFUMTIJKEdQSU9fUE9SVEMgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTApCisjZGVmaW5lIFBDMTFfQUlOX1NMQ0RDMV9EQVQxMwkoR1BJT19QT1JUQyB8IEdQSU9fQUlOIHwgR1BJT19PVVQgfCAxMSkKKyNkZWZpbmUgUEMxMl9BSU5fU0xDREMxX0RBVDE0CShHUElPX1BPUlRDIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDEyKQorI2RlZmluZSBQQzEzX0FJTl9TTENEQzFfREFUMTUJKEdQSU9fUE9SVEMgfCBHUElPX0FJTiB8IEdQSU9fT1VUIHwgMTMpCisjZGVmaW5lIFBFNV9BSU5fUENfU1BLT1VUCShHUElPX1BPUlRFIHwgR1BJT19BSU4gfCBHUElPX09VVCB8IDUpCiAKIC8qIEJJTiBHUElPIHBpbiBmdW5jdGlvbnMgKi8KIAotI2RlZmluZSBQRTVfQklOX1RPVVQyICAgICAgICAgICAoR1BJT19QT1JURSB8IEdQSU9fQklOIHwgR1BJT19PVVQgfCA1KQorI2RlZmluZSBQRTVfQklOX1RPVVQyCQkoR1BJT19QT1JURSB8IEdQSU9fQklOIHwgR1BJT19PVVQgfCA1KQogCiAvKiBDSU4gR1BJTyBwaW4gZnVuY3Rpb25zICovCiAKLSNkZWZpbmUgUEExNF9DSU5fU0xDREMxX0RBVDAgICAgKEdQSU9fUE9SVEEgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTQpCi0jZGVmaW5lIFBBMTVfQ0lOX1NMQ0RDMV9EQVQxICAgIChHUElPX1BPUlRBIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDE1KQotI2RlZmluZSBQQTE2X0NJTl9TTENEQzFfREFUMiAgICAoR1BJT19QT1JUQSB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxNikKLSNkZWZpbmUgUEExN19DSU5fU0xDREMxX0RBVDMgICAgKEdQSU9fUE9SVEEgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTcpCi0jZGVmaW5lIFBBMThfQ0lOX1NMQ0RDMV9EQVQ0ICAgIChHUElPX1BPUlRBIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDE4KQotI2RlZmluZSBQQTE5X0NJTl9TTENEQzFfREFUNSAgICAoR1BJT19QT1JUQSB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxOSkKLSNkZWZpbmUgUEEyMF9DSU5fU0xDREMxX0RBVDYgICAgKEdQSU9fUE9SVEEgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMjApCi0jZGVmaW5lIFBBMjFfQ0lOX1NMQ0RDMV9EQVQ3ICAgIChHUElPX1BPUlRBIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDIxKQotI2RlZmluZSBQQjMwX0NJTl9VQVJUNF9DVFMgICAgICAoR1BJT19QT1JUQiB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAzMCkKLSNkZWZpbmUgUEU1X0NJTl9UT1VUMyAgICAgICAgICAgKEdQSU9fUE9SVEUgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgNSkKKyNkZWZpbmUgUEExNF9DSU5fU0xDREMxX0RBVDAJKEdQSU9fUE9SVEEgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTQpCisjZGVmaW5lIFBBMTVfQ0lOX1NMQ0RDMV9EQVQxCShHUElPX1BPUlRBIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDE1KQorI2RlZmluZSBQQTE2X0NJTl9TTENEQzFfREFUMgkoR1BJT19QT1JUQSB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxNikKKyNkZWZpbmUgUEExN19DSU5fU0xDREMxX0RBVDMJKEdQSU9fUE9SVEEgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMTcpCisjZGVmaW5lIFBBMThfQ0lOX1NMQ0RDMV9EQVQ0CShHUElPX1BPUlRBIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDE4KQorI2RlZmluZSBQQTE5X0NJTl9TTENEQzFfREFUNQkoR1BJT19QT1JUQSB8IEdQSU9fQ0lOIHwgR1BJT19PVVQgfCAxOSkKKyNkZWZpbmUgUEEyMF9DSU5fU0xDREMxX0RBVDYJKEdQSU9fUE9SVEEgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMjApCisjZGVmaW5lIFBBMjFfQ0lOX1NMQ0RDMV9EQVQ3CShHUElPX1BPUlRBIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDIxKQorI2RlZmluZSBQQjMwX0NJTl9VQVJUNF9DVFMJKEdQSU9fUE9SVEIgfCBHUElPX0NJTiB8IEdQSU9fT1VUIHwgMzApCisjZGVmaW5lIFBFNV9DSU5fVE9VVDMJCShHUElPX1BPUlRFIHwgR1BJT19DSU4gfCBHUElPX09VVCB8IDUpCiAKIC8qIEFPVVQgR1BJTyBwaW4gZnVuY3Rpb25zICovCiAKLSNkZWZpbmUgUEIyOV9BT1VUX1VBUlQ0X1JYRCAgICAgKEdQSU9fUE9SVEIgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMjkpCi0jZGVmaW5lIFBCMzFfQU9VVF9VQVJUNF9SVFMgICAgIChHUElPX1BPUlRCIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDMxKQorI2RlZmluZSBQQjI5X0FPVVRfVUFSVDRfUlhECShHUElPX1BPUlRCIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDI5KQorI2RlZmluZSBQQjMxX0FPVVRfVUFSVDRfUlRTCShHUElPX1BPUlRCIHwgR1BJT19BT1VUIHwgR1BJT19JTiB8IDMxKQogI2RlZmluZSBQQzhfQU9VVF9VU0JPVEdfVFhSX0lOVCAoR1BJT19QT1JUQyB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCA4KQotI2RlZmluZSBQQzE1X0FPVVRfV0tHRCAgICAgICAgICAoR1BJT19QT1JUQyB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxNSkKLSNkZWZpbmUgUEYyMV9BT1VUX0RUQUNLICAgICAgICAgKEdQSU9fUE9SVEYgfCBHUElPX0FPVVQgfCBHUElPX0lOIHwgMjEpCisjZGVmaW5lIFBDMTVfQU9VVF9XS0dECQkoR1BJT19QT1JUQyB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAxNSkKKyNkZWZpbmUgUEYyMV9BT1VUX0RUQUNLCQkoR1BJT19QT1JURiB8IEdQSU9fQU9VVCB8IEdQSU9fSU4gfCAyMSkKIAotCi0jZW5kaWYKKyNlbmRpZiAvKiBpZm5kZWYgX19NQUNIX0lPTVVYX01YMnhfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzLmgKaW5kZXggZTFmYzZkYS4uZTUxNDY1ZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14My5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDMuaApAQCAtMTYsMTIgKzE2LDEwIEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sCiAgKiBNQSAwMjExMC0xMzAxLCBVU0EuCiAgKi8KLQotI2lmbmRlZiBfX01BQ0hfTVgzMV9JT01VWF9IX18KLSNkZWZpbmUgX19NQUNIX01YMzFfSU9NVVhfSF9fCisjaWZuZGVmIF9fTUFDSF9JT01VWF9NWDNfSF9fCisjZGVmaW5lIF9fTUFDSF9JT01VWF9NWDNfSF9fCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCiAvKgogICogdmFyaW91cyBJT01VWCBvdXRwdXQgZnVuY3Rpb25zCiAgKi8KQEAgLTM0LDcgKzMyLDcgQEAKICNkZWZpbmUJSU9NVVhfT0NPTkZJR19BTFQ0ICg1IDw8IDQpCS8qIHVzZWQgYXMgYWx0ZXJuYXRlIGZ1bmN0aW9uIDQgKi8KICNkZWZpbmUJSU9NVVhfT0NPTkZJR19BTFQ1ICg2IDw8IDQpCS8qIHVzZWQgYXMgYWx0ZXJuYXRlIGZ1bmN0aW9uIDUgKi8KICNkZWZpbmUJSU9NVVhfT0NPTkZJR19BTFQ2ICg3IDw8IDQpCS8qIHVzZWQgYXMgYWx0ZXJuYXRlIGZ1bmN0aW9uIDYgKi8KLSNkZWZpbmUJSU9NVVhfSUNPTkZJR19OT05FICAwCSAJLyogbm90IGNvbmZpZ3VyZWQgZm9yIGlucHV0ICovCisjZGVmaW5lCUlPTVVYX0lDT05GSUdfTk9ORSAgMAkJLyogbm90IGNvbmZpZ3VyZWQgZm9yIGlucHV0ICovCiAjZGVmaW5lCUlPTVVYX0lDT05GSUdfR1BJTyAgMQkJLyogdXNlZCBhcyBHUElPICovCiAjZGVmaW5lCUlPTVVYX0lDT05GSUdfRlVOQyAgMgkJLyogdXNlZCBhcyBmdW5jdGlvbiAqLwogI2RlZmluZQlJT01VWF9JQ09ORklHX0FMVDEgIDQJCS8qIHVzZWQgYXMgYWx0ZXJuYXRlIGZ1bmN0aW9uIDEgKi8KQEAgLTE2NywxMSArMTY1LDYgQEAKIAlNWENfR1BJT19JUlFfU1RBUlQpCiAKIC8qCi0gKiBUaGUgbnVtYmVyIG9mIGdwaW8gZGV2aWNlcyBhbW9uZyB0aGUgcGFkcwotICovCi0jZGVmaW5lIEdQSU9fUE9SVF9NQVggMwotCi0vKgogICogVGhpcyBlbnVtZXJhdGlvbiBpcyBjb25zdHJ1Y3RlZCBiYXNlZCBvbiB0aGUgU2VjdGlvbgogICogInN3X3BhZF9jdGwgJiBzd19tdXhfY3RsIGRldGFpbHMiIG9mIHRoZSBNWDMxIElDIFNwZWMuIEVhY2ggZW51bWVyYXRlZAogICogdmFsdWUgaXMgY29uc3RydWN0ZWQgYmFzZWQgb24gdGhlIHJ1bGVzIGRlc2NyaWJlZCBhYm92ZS4KQEAgLTYzMyw0MCArNjI2LDQwIEBACiAjZGVmaW5lIE1YMzFfUElOX1RYRDJfX0dQSU8xXzI4CQlJT01VWF9NT0RFKE1YMzFfUElOX1RYRDIsIElPTVVYX0NPTkZJR19HUElPKQogI2RlZmluZSBNWDMxX1BJTl9DU0lfRDRfX0dQSU8zXzQJSU9NVVhfTU9ERShNWDMxX1BJTl9DU0lfRDQsIElPTVVYX0NPTkZJR19HUElPKQogI2RlZmluZSBNWDMxX1BJTl9DU0lfRDVfX0dQSU8zXzUJSU9NVVhfTU9ERShNWDMxX1BJTl9DU0lfRDUsIElPTVVYX0NPTkZJR19HUElPKQotI2RlZmluZSBNWDMxX1BJTl9VU0JPVEdfREFUQTBfX1VTQk9UR19EQVRBMCAgICBJT01VWF9NT0RFKE1YMzFfUElOX1VTQk9UR19EQVRBMCwgSU9NVVhfQ09ORklHX0ZVTkMpCi0jZGVmaW5lIE1YMzFfUElOX1VTQk9UR19EQVRBMV9fVVNCT1RHX0RBVEExICAgIElPTVVYX01PREUoTVgzMV9QSU5fVVNCT1RHX0RBVEExLCBJT01VWF9DT05GSUdfRlVOQykKLSNkZWZpbmUgTVgzMV9QSU5fVVNCT1RHX0RBVEEyX19VU0JPVEdfREFUQTIgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JPVEdfREFUQTIsIElPTVVYX0NPTkZJR19GVU5DKQotI2RlZmluZSBNWDMxX1BJTl9VU0JPVEdfREFUQTNfX1VTQk9UR19EQVRBMyAgICBJT01VWF9NT0RFKE1YMzFfUElOX1VTQk9UR19EQVRBMywgSU9NVVhfQ09ORklHX0ZVTkMpCi0jZGVmaW5lIE1YMzFfUElOX1VTQk9UR19EQVRBNF9fVVNCT1RHX0RBVEE0ICAgIElPTVVYX01PREUoTVgzMV9QSU5fVVNCT1RHX0RBVEE0LCBJT01VWF9DT05GSUdfRlVOQykKLSNkZWZpbmUgTVgzMV9QSU5fVVNCT1RHX0RBVEE1X19VU0JPVEdfREFUQTUgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JPVEdfREFUQTUsIElPTVVYX0NPTkZJR19GVU5DKQotI2RlZmluZSBNWDMxX1BJTl9VU0JPVEdfREFUQTZfX1VTQk9UR19EQVRBNiAgICBJT01VWF9NT0RFKE1YMzFfUElOX1VTQk9UR19EQVRBNiwgSU9NVVhfQ09ORklHX0ZVTkMpCi0jZGVmaW5lIE1YMzFfUElOX1VTQk9UR19EQVRBN19fVVNCT1RHX0RBVEE3ICAgIElPTVVYX01PREUoTVgzMV9QSU5fVVNCT1RHX0RBVEE3LCBJT01VWF9DT05GSUdfRlVOQykKLSNkZWZpbmUgTVgzMV9QSU5fVVNCT1RHX0NMS19fVVNCT1RHX0NMSyAgICAgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JPVEdfQ0xLLCBJT01VWF9DT05GSUdfRlVOQykKLSNkZWZpbmUgTVgzMV9QSU5fVVNCT1RHX0RJUl9fVVNCT1RHX0RJUiAgICAgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JPVEdfRElSLCBJT01VWF9DT05GSUdfRlVOQykKLSNkZWZpbmUgTVgzMV9QSU5fVVNCT1RHX05YVF9fVVNCT1RHX05YVCAgICAgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JPVEdfTlhULCBJT01VWF9DT05GSUdfRlVOQykKLSNkZWZpbmUgTVgzMV9QSU5fVVNCT1RHX1NUUF9fVVNCT1RHX1NUUCAgICAgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JPVEdfU1RQLCBJT01VWF9DT05GSUdfRlVOQykKLSNkZWZpbmUgTVgzMV9QSU5fQ1NQSTFfTU9TSV9fVVNCSDFfUlhETSAgICAgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMV9NT1NJLCBJT01VWF9DT05GSUdfQUxUMSkKLSNkZWZpbmUgTVgzMV9QSU5fQ1NQSTFfTUlTT19fVVNCSDFfUlhEUCAgICAgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMV9NSVNPLCBJT01VWF9DT05GSUdfQUxUMSkKLSNkZWZpbmUgTVgzMV9QSU5fQ1NQSTFfU1MwX19VU0JIMV9UWERNICAgICAgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMV9TUzAsICBJT01VWF9DT05GSUdfQUxUMSkKLSNkZWZpbmUgTVgzMV9QSU5fQ1NQSTFfU1MxX19VU0JIMV9UWERQICAgICAgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMV9TUzEsICBJT01VWF9DT05GSUdfQUxUMSkKLSNkZWZpbmUgTVgzMV9QSU5fQ1NQSTFfU1MyX19VU0JIMV9SQ1YgICAgICAgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMV9TUzIsICBJT01VWF9DT05GSUdfQUxUMSkKLSNkZWZpbmUgTVgzMV9QSU5fQ1NQSTFfU0NMS19fVVNCSDFfT0VCICAgICAgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMV9TQ0xLLCBJT01VWF9DT05GSUdfQUxUMSkKLSNkZWZpbmUgTVgzMV9QSU5fQ1NQSTFfU1BJX1JEWV9fVVNCSDFfRlMgICAgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMV9TUElfUkRZLCBJT01VWF9DT05GSUdfQUxUMSkKKyNkZWZpbmUgTVgzMV9QSU5fVVNCT1RHX0RBVEEwX19VU0JPVEdfREFUQTAJSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JPVEdfREFUQTAsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9VU0JPVEdfREFUQTFfX1VTQk9UR19EQVRBMQlJT01VWF9NT0RFKE1YMzFfUElOX1VTQk9UR19EQVRBMSwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX1VTQk9UR19EQVRBMl9fVVNCT1RHX0RBVEEyCUlPTVVYX01PREUoTVgzMV9QSU5fVVNCT1RHX0RBVEEyLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fVVNCT1RHX0RBVEEzX19VU0JPVEdfREFUQTMJSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JPVEdfREFUQTMsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9VU0JPVEdfREFUQTRfX1VTQk9UR19EQVRBNAlJT01VWF9NT0RFKE1YMzFfUElOX1VTQk9UR19EQVRBNCwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX1VTQk9UR19EQVRBNV9fVVNCT1RHX0RBVEE1CUlPTVVYX01PREUoTVgzMV9QSU5fVVNCT1RHX0RBVEE1LCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fVVNCT1RHX0RBVEE2X19VU0JPVEdfREFUQTYJSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JPVEdfREFUQTYsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9VU0JPVEdfREFUQTdfX1VTQk9UR19EQVRBNwlJT01VWF9NT0RFKE1YMzFfUElOX1VTQk9UR19EQVRBNywgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX1VTQk9UR19DTEtfX1VTQk9UR19DTEsJCUlPTVVYX01PREUoTVgzMV9QSU5fVVNCT1RHX0NMSywgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX1VTQk9UR19ESVJfX1VTQk9UR19ESVIJCUlPTVVYX01PREUoTVgzMV9QSU5fVVNCT1RHX0RJUiwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX1VTQk9UR19OWFRfX1VTQk9UR19OWFQJCUlPTVVYX01PREUoTVgzMV9QSU5fVVNCT1RHX05YVCwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX1VTQk9UR19TVFBfX1VTQk9UR19TVFAJCUlPTVVYX01PREUoTVgzMV9QSU5fVVNCT1RHX1NUUCwgSU9NVVhfQ09ORklHX0ZVTkMpCisjZGVmaW5lIE1YMzFfUElOX0NTUEkxX01PU0lfX1VTQkgxX1JYRE0JCUlPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfTU9TSSwgSU9NVVhfQ09ORklHX0FMVDEpCisjZGVmaW5lIE1YMzFfUElOX0NTUEkxX01JU09fX1VTQkgxX1JYRFAJCUlPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfTUlTTywgSU9NVVhfQ09ORklHX0FMVDEpCisjZGVmaW5lIE1YMzFfUElOX0NTUEkxX1NTMF9fVVNCSDFfVFhETQkJSU9NVVhfTU9ERShNWDMxX1BJTl9DU1BJMV9TUzAsIElPTVVYX0NPTkZJR19BTFQxKQorI2RlZmluZSBNWDMxX1BJTl9DU1BJMV9TUzFfX1VTQkgxX1RYRFAJCUlPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfU1MxLCBJT01VWF9DT05GSUdfQUxUMSkKKyNkZWZpbmUgTVgzMV9QSU5fQ1NQSTFfU1MyX19VU0JIMV9SQ1YJCUlPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTFfU1MyLCBJT01VWF9DT05GSUdfQUxUMSkKKyNkZWZpbmUgTVgzMV9QSU5fQ1NQSTFfU0NMS19fVVNCSDFfT0VCCQlJT01VWF9NT0RFKE1YMzFfUElOX0NTUEkxX1NDTEssIElPTVVYX0NPTkZJR19BTFQxKQorI2RlZmluZSBNWDMxX1BJTl9DU1BJMV9TUElfUkRZX19VU0JIMV9GUwlJT01VWF9NT0RFKE1YMzFfUElOX0NTUEkxX1NQSV9SRFksIElPTVVYX0NPTkZJR19BTFQxKQogI2RlZmluZSBNWDMxX1BJTl9TRlM2X19VU0JIMV9TVVNQRU5ECUlPTVVYX01PREUoTVgzMV9QSU5fU0ZTNiwgSU9NVVhfQ09ORklHX0ZVTkMpCiAjZGVmaW5lIE1YMzFfUElOX05GUkVfQl9fR1BJTzFfMTEJSU9NVVhfTU9ERShNWDMxX1BJTl9ORlJFX0IsIElPTVVYX0NPTkZJR19HUElPKQogI2RlZmluZSBNWDMxX1BJTl9ORkFMRV9fR1BJTzFfMTIJSU9NVVhfTU9ERShNWDMxX1BJTl9ORkFMRSwgSU9NVVhfQ09ORklHX0dQSU8pCi0jZGVmaW5lIE1YMzFfUElOX1VTQkgyX0RBVEEwX19VU0JIMl9EQVRBMCAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fVVNCSDJfREFUQTAsIElPTVVYX0NPTkZJR19GVU5DKQotI2RlZmluZSBNWDMxX1BJTl9VU0JIMl9EQVRBMV9fVVNCSDJfREFUQTEgICAgICBJT01VWF9NT0RFKE1YMzFfUElOX1VTQkgyX0RBVEExLCBJT01VWF9DT05GSUdfRlVOQykKKyNkZWZpbmUgTVgzMV9QSU5fVVNCSDJfREFUQTBfX1VTQkgyX0RBVEEwCUlPTVVYX01PREUoTVgzMV9QSU5fVVNCSDJfREFUQTAsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9VU0JIMl9EQVRBMV9fVVNCSDJfREFUQTEJSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JIMl9EQVRBMSwgSU9NVVhfQ09ORklHX0ZVTkMpCiAjZGVmaW5lIE1YMzFfUElOX1NUWEQzX19VU0JIMl9EQVRBMglJT01VWF9NT0RFKE1YMzFfUElOX1NUWEQzLCBJT01VWF9DT05GSUdfRlVOQykKICNkZWZpbmUgTVgzMV9QSU5fU1JYRDNfX1VTQkgyX0RBVEEzCUlPTVVYX01PREUoTVgzMV9QSU5fU1JYRDMsIElPTVVYX0NPTkZJR19GVU5DKQogI2RlZmluZSBNWDMxX1BJTl9TQ0szX19VU0JIMl9EQVRBNAlJT01VWF9NT0RFKE1YMzFfUElOX1NDSzMsIElPTVVYX0NPTkZJR19GVU5DKQogI2RlZmluZSBNWDMxX1BJTl9TRlMzX19VU0JIMl9EQVRBNQlJT01VWF9NT0RFKE1YMzFfUElOX1NGUzMsIElPTVVYX0NPTkZJR19GVU5DKQogI2RlZmluZSBNWDMxX1BJTl9TVFhENl9fVVNCSDJfREFUQTYJSU9NVVhfTU9ERShNWDMxX1BJTl9TVFhENiwgSU9NVVhfQ09ORklHX0ZVTkMpCiAjZGVmaW5lIE1YMzFfUElOX1NSWEQ2X19VU0JIMl9EQVRBNwlJT01VWF9NT0RFKE1YMzFfUElOX1NSWEQ2LCBJT01VWF9DT05GSUdfRlVOQykKLSNkZWZpbmUgTVgzMV9QSU5fVVNCSDJfQ0xLX19VU0JIMl9DTEsgICAgICAgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JIMl9DTEssIElPTVVYX0NPTkZJR19GVU5DKQotI2RlZmluZSBNWDMxX1BJTl9VU0JIMl9ESVJfX1VTQkgyX0RJUiAgICAgICAgICBJT01VWF9NT0RFKE1YMzFfUElOX1VTQkgyX0RJUiwgSU9NVVhfQ09ORklHX0ZVTkMpCi0jZGVmaW5lIE1YMzFfUElOX1VTQkgyX05YVF9fVVNCSDJfTlhUICAgICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fVVNCSDJfTlhULCBJT01VWF9DT05GSUdfRlVOQykKLSNkZWZpbmUgTVgzMV9QSU5fVVNCSDJfU1RQX19VU0JIMl9TVFAgICAgICAgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JIMl9TVFAsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9VU0JIMl9DTEtfX1VTQkgyX0NMSwkJSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JIMl9DTEssIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9VU0JIMl9ESVJfX1VTQkgyX0RJUgkJSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JIMl9ESVIsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9VU0JIMl9OWFRfX1VTQkgyX05YVAkJSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JIMl9OWFQsIElPTVVYX0NPTkZJR19GVU5DKQorI2RlZmluZSBNWDMxX1BJTl9VU0JIMl9TVFBfX1VTQkgyX1NUUAkJSU9NVVhfTU9ERShNWDMxX1BJTl9VU0JIMl9TVFAsIElPTVVYX0NPTkZJR19GVU5DKQogI2RlZmluZSBNWDMxX1BJTl9TQ0s2X19HUElPMV8yNQkJSU9NVVhfTU9ERShNWDMxX1BJTl9TQ0s2LCBJT01VWF9DT05GSUdfR1BJTykKICNkZWZpbmUgTVgzMV9QSU5fVVNCX09DX19HUElPMV8zMAlJT01VWF9NT0RFKE1YMzFfUElOX1VTQl9PQywgSU9NVVhfQ09ORklHX0dQSU8pCiAjZGVmaW5lIE1YMzFfUElOX0kyQ19EQVRfX0kyQzFfU0RBCUlPTVVYX01PREUoTVgzMV9QSU5fSTJDX0RBVCwgSU9NVVhfQ09ORklHX0ZVTkMpCkBAIC03MTEsOCArNzA0LDggQEAKICNkZWZpbmUgTVgzMV9QSU5fRFNSX0RDRTFfX0dQSU8yXzkJSU9NVVhfTU9ERShNWDMxX1BJTl9EU1JfRENFMSwgSU9NVVhfQ09ORklHX0dQSU8pCiAjZGVmaW5lIE1YMzFfUElOX1JJX0RDRTFfX0dQSU8yXzEwCUlPTVVYX01PREUoTVgzMV9QSU5fUklfRENFMSwgSU9NVVhfQ09ORklHX0dQSU8pCiAjZGVmaW5lIE1YMzFfUElOX0RDRF9EQ0UxX19HUElPMl8xMQlJT01VWF9NT0RFKE1YMzFfUElOX0RDRF9EQ0UxLCBJT01VWF9DT05GSUdfR1BJTykKLSNkZWZpbmUgTVgzMV9QSU5fU1RYRDVfX0dQSU8xXzIxICAgICAgIElPTVVYX01PREUoTVgzMV9QSU5fU1RYRDUsIElPTVVYX0NPTkZJR19HUElPKQotI2RlZmluZSBNWDMxX1BJTl9TUlhENV9fR1BJTzFfMjIgICAgICAgSU9NVVhfTU9ERShNWDMxX1BJTl9TUlhENSwgSU9NVVhfQ09ORklHX0dQSU8pCisjZGVmaW5lIE1YMzFfUElOX1NUWEQ1X19HUElPMV8yMQlJT01VWF9NT0RFKE1YMzFfUElOX1NUWEQ1LCBJT01VWF9DT05GSUdfR1BJTykKKyNkZWZpbmUgTVgzMV9QSU5fU1JYRDVfX0dQSU8xXzIyCUlPTVVYX01PREUoTVgzMV9QSU5fU1JYRDUsIElPTVVYX0NPTkZJR19HUElPKQogI2RlZmluZSBNWDMxX1BJTl9HUElPMV8zX19HUElPMV8zCUlPTVVYX01PREUoTVgzMV9QSU5fR1BJTzFfMywgSU9NVVhfQ09ORklHX0dQSU8pCiAjZGVmaW5lIE1YMzFfUElOX0NTUEkyX1NTMV9fQ1NQSTNfU1MxCUlPTVVYX01PREUoTVgzMV9QSU5fQ1NQSTJfU1MxLCBJT01VWF9DT05GSUdfQUxUMSkKICNkZWZpbmUgTVgzMV9QSU5fUlRTMV9fR1BJTzJfNgkJSU9NVVhfTU9ERShNWDMxX1BJTl9SVFMxLCBJT01VWF9DT05GSUdfR1BJTykKQEAgLTcyNywxMyArNzIwLDE0IEBACiAjZGVmaW5lIE1YMzFfUElOX1NDSzVfX1NDSzUJCUlPTVVYX01PREUoTVgzMV9QSU5fU0NLNSwgSU9NVVhfQ09ORklHX0ZVTkMpCiAjZGVmaW5lIE1YMzFfUElOX1NGUzVfX1NGUzUJCUlPTVVYX01PREUoTVgzMV9QSU5fU0ZTNSwgSU9NVVhfQ09ORklHX0ZVTkMpCiAKLS8qWFhYOiBUaGUgU1MwLCBTUzEsIFNTMiwgU1MzIGxpbmVzIG9mIHNwaTMgYXJlIG11bHRpcGxleGVkIGJ5IGNzcGkyX3NzMCwgY3NwaTJfc3MxLCBjc3BpMV9zczAKLSAqIGNzcGkxX3NzMSovCisvKgorICogWFhYOiBUaGUgU1MwLCBTUzEsIFNTMiwgU1MzIGxpbmVzIG9mIHNwaTMgYXJlIG11bHRpcGxleGVkIHdpdGggY3NwaTJfc3MwLAorICogY3NwaTJfc3MxLCBjc3BpMV9zczAgY3NwaTFfc3MxCisgKi8KIAogLyoKICAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgcGFkIHZhbHVlIGZvciBhIElPTVVYIHBpbi4KICAqLwogdm9pZCBteGNfaW9tdXhfc2V0X3BhZChlbnVtIGlvbXV4X3BpbnMsIHUzMik7CiAKLSNlbmRpZgotCisjZW5kaWYgLyogaWZuZGVmIF9fTUFDSF9JT01VWF9NWDNfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzNS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LW14MzUuaAppbmRleCBjODhkNDA3Li4yYTI0YmFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXgzNS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDM1LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDLCBOT19QQURfQ1RSTCkgMjAwOSBieSBKYW4gV2VpdHplbCBQaHl0ZWMgTWVzc3RlY2huaWsgR21iSCA8YXJtbGludXhAcGh5dGVjLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA5IGJ5IEphbiBXZWl0emVsIFBoeXRlYyBNZXNzdGVjaG5payBHbWJIIDxhcm1saW51eEBwaHl0ZWMuZGU+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC1teDUxLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXg1MS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0Zjk3NWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtbXg1MS5oCkBAIC0wLDAgKzEsMzI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgQW1pdCBLdWNoZXJpYSA8YW1pdC5rdWNoZXJpYUBjYW5vbmljYWwuY29tPgorICoKKyAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICoKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAorICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKworI2lmbmRlZiBfX01BQ0hfSU9NVVhfTVg1MV9IX18KKyNkZWZpbmUgX19NQUNIX0lPTVVYX01YNTFfSF9fCisKKyNpbmNsdWRlIDxtYWNoL2lvbXV4LXYzLmg+CisKKy8qCisgKiB2YXJpb3VzIElPTVVYIGFsdGVybmF0ZSBvdXRwdXQgZnVuY3Rpb25zICgxLTcpCisgKi8KK3R5cGVkZWYgZW51bSBpb211eF9jb25maWcgeworCUlPTVVYX0NPTkZJR19BTFQwLAorCUlPTVVYX0NPTkZJR19BTFQxLAorCUlPTVVYX0NPTkZJR19BTFQyLAorCUlPTVVYX0NPTkZJR19BTFQzLAorCUlPTVVYX0NPTkZJR19BTFQ0LAorCUlPTVVYX0NPTkZJR19BTFQ1LAorCUlPTVVYX0NPTkZJR19BTFQ2LAorCUlPTVVYX0NPTkZJR19BTFQ3LAorCUlPTVVYX0NPTkZJR19HUElPLAkvKiBhZGRlZCB0byBoZWxwIHVzZXIgdXNlIEdQSU8gbW9kZSAqLworCUlPTVVYX0NPTkZJR19TSU9OID0gMHgxIDw8IDQsCS8qIExPT1BCQUNLOk1VWCBTSU9OIGJpdCAqLworfSBpb211eF9waW5fY2ZnX3Q7CisKKy8qIFBhZCBjb250cm9sIGdyb3VwaW5ncyAqLworI2RlZmluZSBNWDUxX1VBUlQxX1BBRF9DVFJMCShQQURfQ1RMX0hZUyB8IFBBRF9DVExfUEtFIHwgUEFEX0NUTF9QVUUgfCBcCisJCQkJUEFEX0NUTF9EU0VfSElHSCkKKyNkZWZpbmUgTVg1MV9VQVJUMl9QQURfQ1RSTAkoUEFEX0NUTF9QS0UgfCBQQURfQ1RMX1BVRSB8IFBBRF9DVExfRFNFX0hJR0ggfCBcCisJCQkJUEFEX0NUTF9TUkVfRkFTVCkKKyNkZWZpbmUgTVg1MV9VQVJUM19QQURfQ1RSTAkoUEFEX0NUTF9QS0UgfCBQQURfQ1RMX0RTRV9ISUdIIHwgXAorCQkJCVBBRF9DVExfU1JFX0ZBU1QpCisKKy8qCisgKiBUaGUgbmFtaW5nIGNvbnZlbnRpb24gZm9yIHRoZSBwYWQgbW9kZXMgaXMgTVg1MV9QQURfPHBhZG5hbWU+X188cGFkbW9kZT4KKyAqIElmIDxwYWRuYW1lPiBvciA8cGFkbW9kZT4gcmVmZXJzIHRvIGEgR1BJTywgaXQgaXMgbmFtZWQKKyAqIEdQSU9fPHVuaXQ+XzxudW0+IHNlZSBhbHNvIGlvbXV4LXYzLmgKKyAqLworCisvKgorICogRklYTUU6IFRoaXMgd2FzIGNvbnZlcnRlZCB1c2luZyBzY3JpcHRzIGZyb20gZXhpc3RpbmcgRnJlZXNjYWxlIGNvZGUgdG8KKyAqIHRoaXMgZm9ybSB1c2VkIHVwc3RyZWFtLiBOZWVkIHRvIHZlcmlmeSB0aGUgbmFtZSBmb3JtYXQuCisgKi8KKworLyoJCQkJCQlQQUQgICAgICBNVVggICBBTFQgSU5QU0UgUEFUSCBQQURDVFJMICovCisKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18yXzBfX0VJTV9EMTYJSU9NVVhfUEFEKDB4M2YwLCAweDA1YywgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzJfMV9fRUlNX0QxNwlJT01VWF9QQUQoMHgzZjQsIDB4MDYwLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8yX19FSU1fRDE4CUlPTVVYX1BBRCgweDNmOCwgMHgwNjQsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18yXzNfX0VJTV9EMTkJSU9NVVhfUEFEKDB4M2ZjLCAweDA2OCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzJfNF9fRUlNX0QyMAlJT01VWF9QQUQoMHg0MDAsIDB4MDZjLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl81X19FSU1fRDIxCUlPTVVYX1BBRCgweDQwNCwgMHgwNzAsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18yXzZfX0VJTV9EMjIJSU9NVVhfUEFEKDB4NDA4LCAweDA3NCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzJfN19fRUlNX0QyMwlJT01VWF9QQUQoMHg0MGMsIDB4MDc4LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisKKy8qIEJhYmJhZ2UgVUFSVDMgKi8KKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QyNF9fVUFSVDNfQ1RTCUlPTVVYX1BBRCgweDQxMCwgMHgwN2MsIElPTVVYX0NPTkZJR19BTFQzLCAweDAsIDAsIE1YNTFfVUFSVDNfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjVfX1VBUlQzX1JYRAlJT01VWF9QQUQoMHg0MTQsIDB4MDgwLCBJT01VWF9DT05GSUdfQUxUMywgMHg5ZjQsIDAsIE1YNTFfVUFSVDNfUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjZfX1VBUlQzX1RYRAlJT01VWF9QQUQoMHg0MTgsIDB4MDg0LCBJT01VWF9DT05GSUdfQUxUMywgMHgwLCAwLCBNWDUxX1VBUlQzX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI3X19VQVJUM19SVFMJSU9NVVhfUEFEKDB4NDFjLCAweDA4OCwgSU9NVVhfQ09ORklHX0FMVDMsIDB4OWYwLCAwLCBNWDUxX1VBUlQzX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMjhfX0VJTV9EMjgJSU9NVVhfUEFEKDB4NDIwLCAweDA4YywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fRDI5X19FSU1fRDI5CUlPTVVYX1BBRCgweDQyNCwgMHgwOTAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0QzMF9fRUlNX0QzMAlJT01VWF9QQUQoMHg0MjgsIDB4MDk0LCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EMzFfX0VJTV9EMzEJSU9NVVhfUEFEKDB4NDJjLCAweDA5YywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8xMF9fRUlNX0ExNglJT01VWF9QQUQoMHg0MzAsIDB4MDljLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8xMV9fRUlNX0ExNwlJT01VWF9QQUQoMHg0MzQsIDB4MGEwLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8xMl9fRUlNX0ExOAlJT01VWF9QQUQoMHg0MzgsIDB4MGE0LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8xM19fRUlNX0ExOQlJT01VWF9QQUQoMHg0M2MsIDB4MGE4LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8xNF9fRUlNX0EyMAlJT01VWF9QQUQoMHg0NDAsIDB4MGFjLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8xNV9fRUlNX0EyMQlJT01VWF9QQUQoMHg0NDQsIDB4MGIwLCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8xNl9fRUlNX0EyMglJT01VWF9QQUQoMHg0NDgsIDB4MGI0LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8xN19fRUlNX0EyMwlJT01VWF9QQUQoMHg0NGMsIDB4MGI4LCAxLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18yXzE4X19FSU1fQTI0CUlPTVVYX1BBRCgweDQ1MCwgMHgwYmMsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18yXzE5X19FSU1fQTI1CUlPTVVYX1BBRCgweDQ1NCwgMHgwYzAsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18yXzIwX19FSU1fQTI2CUlPTVVYX1BBRCgweDQ1OCwgMHgwYzQsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18yXzIxX19FSU1fQTI3CUlPTVVYX1BBRCgweDQ1YywgMHgwYzgsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0VCMF9fRUlNX0VCMAlJT01VWF9QQUQoMHg0NjAsIDB4MGNjLCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9FQjFfX0VJTV9FQjEJSU9NVVhfUEFEKDB4NDY0LCAweDBkMCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzJfMjJfX0VJTV9FQjIJSU9NVVhfUEFEKDB4NDY4LCAweDBkNCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzJfMjNfX0VJTV9FQjMJSU9NVVhfUEFEKDB4NDZjLCAweDBkOCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMl8yNF9fRUlNX09FCUlPTVVYX1BBRCgweDQ3MCwgMHgwZGMsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18yXzI1X19FSU1fQ1MwCUlPTVVYX1BBRCgweDQ3NCwgMHgwZTAsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18yXzI2X19FSU1fQ1MxCUlPTVVYX1BBRCgweDQ3OCwgMHgwZTQsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18yXzI3X19FSU1fQ1MyCUlPTVVYX1BBRCgweDQ3YywgMHgwZTgsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18yXzI4X19FSU1fQ1MzCUlPTVVYX1BBRCgweDQ4MCwgMHgwZWMsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18yXzI5X19FSU1fQ1M0CUlPTVVYX1BBRCgweDQ4NCwgMHgwZjAsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18yXzMwX19FSU1fQ1M1CUlPTVVYX1BBRCgweDQ4OCwgMHgwZjQsIDEsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18yXzMxX19FSU1fRFRBQ0sJSU9NVVhfUEFEKDB4NDhjLCAweDBmOCwgMSwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18xX19FSU1fTEJBCUlPTVVYX1BBRCgweDQ5NCwgMHhGQywgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzJfX0VJTV9DUkUJSU9NVVhfUEFEKDB4NEEwLCAweDEwMCwgMSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRFJBTV9DUzFfX0RSQU1fQ1MxCUlPTVVYX1BBRCgweDREMCwgMHgxMDQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18zX19OQU5ERl9XRV9CCUlPTVVYX1BBRCgweDRFNCwgMHgxMDgsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM180X19OQU5ERl9SRV9CCUlPTVVYX1BBRCgweDRFOCwgMHgxMEMsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM181X19OQU5ERl9BTEUJSU9NVVhfUEFEKDB4NEVDLCAweDExMCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzZfX05BTkRGX0NMRQlJT01VWF9QQUQoMHg0RjAsIDB4MTE0LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfN19fTkFOREZfV1BfQglJT01VWF9QQUQoMHg0RjQsIDB4MTE4LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfOF9fTkFOREZfUkIwCUlPTVVYX1BBRCgweDRGOCwgMHgxMUMsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM185X19OQU5ERl9SQjEJSU9NVVhfUEFEKDB4NEZDLCAweDEyMCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzEwX19OQU5ERl9SQjIJSU9NVVhfUEFEKDB4NTAwLCAweDEyNCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzExX19OQU5ERl9SQjMJSU9NVVhfUEFEKDB4NTA0LCAweDEyOCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzEyX19HUElPX05BTkQJSU9NVVhfUEFEKDB4NTE0LCAweDEyQywgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKy8qIFJFVklTSVQ6IE5vdCBzdXJlIG9mIHRoZXNlIHZhbHVlcworCisgICNkZWZpbmUgTVg1MV9QQURfR1BJT18xX19fTkFOREZfUkI0CUlPTVVYX1BBRCgsICwgLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorICAjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18xM19fTkFOREZfUkI1CUlPTVVYX1BBRCgweDVEOCwgMHgxMzAsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisgICNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzE1X19OQU5ERl9SQjcJSU9NVVhfUEFEKDB4NUUwLCAweDEzOCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyovCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18xNF9fTkFOREZfUkI2CUlPTVVYX1BBRCgweDVEQywgMHgxMzQsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18xNl9fTkFOREZfQ1MwCUlPTVVYX1BBRCgweDUxOCwgMHgxMzAsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18xN19fTkFOREZfQ1MxCUlPTVVYX1BBRCgweDUxQywgMHgxMzQsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18xOF9fTkFOREZfQ1MyCUlPTVVYX1BBRCgweDUyMCwgMHgxMzgsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18xOV9fTkFOREZfQ1MzCUlPTVVYX1BBRCgweDUyNCwgMHgxM0MsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18yMF9fTkFOREZfQ1M0CUlPTVVYX1BBRCgweDUyOCwgMHgxNDAsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18yMV9fTkFOREZfQ1M1CUlPTVVYX1BBRCgweDUyQywgMHgxNDQsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18yMl9fTkFOREZfQ1M2CUlPTVVYX1BBRCgweDUzMCwgMHgxNDgsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18yM19fTkFOREZfQ1M3CUlPTVVYX1BBRCgweDUzNCwgMHgxNEMsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18yNF9fTkFOREZfUkRZX0lOVAlJT01VWF9QQUQoMHg1MzgsIDB4MTUwLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMjVfX05BTkRGX0QxNQlJT01VWF9QQUQoMHg1M0MsIDB4MTU0LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMjZfX05BTkRGX0QxNAlJT01VWF9QQUQoMHg1NDAsIDB4MTU4LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMjdfX05BTkRGX0QxMwlJT01VWF9QQUQoMHg1NDQsIDB4MTVDLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMjhfX05BTkRGX0QxMglJT01VWF9QQUQoMHg1NDgsIDB4MTYwLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMjlfX05BTkRGX0QxMQlJT01VWF9QQUQoMHg1NEMsIDB4MTY0LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMzBfX05BTkRGX0QxMAlJT01VWF9QQUQoMHg1NTAsIDB4MTY4LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMzFfX05BTkRGX0Q5CUlPTVVYX1BBRCgweDU1NCwgMHgxNkMsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fNF8wX19OQU5ERl9EOAlJT01VWF9QQUQoMHg1NTgsIDB4MTcwLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfMV9fTkFOREZfRDcJSU9NVVhfUEFEKDB4NTVDLCAweDE3NCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT180XzJfX05BTkRGX0Q2CUlPTVVYX1BBRCgweDU2MCwgMHgxNzgsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fNF8zX19OQU5ERl9ENQlJT01VWF9QQUQoMHg1NjQsIDB4MTdDLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfNF9fTkFOREZfRDQJSU9NVVhfUEFEKDB4NTY4LCAweDE4MCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT180XzVfX05BTkRGX0QzCUlPTVVYX1BBRCgweDU2QywgMHgxODQsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fNF82X19OQU5ERl9EMglJT01VWF9QQUQoMHg1NzAsIDB4MTg4LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfN19fTkFOREZfRDEJSU9NVVhfUEFEKDB4NTc0LCAweDE4QywgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT180XzhfX05BTkRGX0QwCUlPTVVYX1BBRCgweDU3OCwgMHgxOTAsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18xMl9fQ1NJMV9EOAlJT01VWF9QQUQoMHg1N0MsIDB4MTk0LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMTNfX0NTSTFfRDkJSU9NVVhfUEFEKDB4NTgwLCAweDE5OCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMTBfX0NTSTFfRDEwCUlPTVVYX1BBRCgweDU4NCwgMHgxOUMsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0NTSTFfRDExX19DU0kxX0QxMQlJT01VWF9QQUQoMHg1ODgsIDB4MUEwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX0QxMl9fQ1NJMV9EMTIJSU9NVVhfUEFEKDB4NThDLCAweDFBNCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMTNfX0NTSTFfRDEzCUlPTVVYX1BBRCgweDU5MCwgMHgxQTgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0NTSTFfRDE0X19DU0kxX0QxNAlJT01VWF9QQUQoMHg1OTQsIDB4MUFDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX0QxNV9fQ1NJMV9EMTUJSU9NVVhfUEFEKDB4NTk4LCAweDFCMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMTZfX0NTSTFfRDE2CUlPTVVYX1BBRCgweDU5QywgMHgxQjQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0NTSTFfRDE3X19DU0kxX0QxNwlJT01VWF9QQUQoMHg1QTAsIDB4MUI4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX0QxOF9fQ1NJMV9EMTgJSU9NVVhfUEFEKDB4NUE0LCAweDFCQywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfQ1NJMV9EMTlfX0NTSTFfRDE5CUlPTVVYX1BBRCgweDVBOCwgMHgxQzAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0NTSTFfVlNZTkNfX0NTSTFfVlNZTkMJSU9NVVhfUEFEKDB4NUFDLCAweDFDNCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfQ1NJMV9IU1lOQ19fQ1NJMV9IU1lOQwlJT01VWF9QQUQoMHg1QjAsIDB4MUM4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX1BJWENMS19fQ1NJMV9QSVhDTEsJSU9NVVhfUEFEKDB4NUI0LCAweDAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0NTSTFfTUNMS19fQ1NJMV9NQ0xLCUlPTVVYX1BBRCgweDVCOCwgMHgwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9DU0kxX1BLRTBfX0NTSTFfUEtFMAlJT01VWF9QQUQoMHg4NjAsIDB4MCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT180XzlfX0NTSTJfRDEyCUlPTVVYX1BBRCgweDVCQywgMHgxQ0MsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fNF8xMF9fQ1NJMl9EMTMJSU9NVVhfUEFEKDB4NUMwLCAweDFEMCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT180XzExX19DU0kyX0QxNAlJT01VWF9QQUQoMHg1QzQsIDB4MUQ0LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfMTJfX0NTSTJfRDE1CUlPTVVYX1BBRCgweDVDOCwgMHgxRDgsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fNF8xMV9fQ1NJMl9EMTYJSU9NVVhfUEFEKDB4NUNDLCAweDFEQywgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT180XzEyX19DU0kyX0QxNwlJT01VWF9QQUQoMHg1RDAsIDB4MUUwLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfMTFfX0NTSTJfRDE4CUlPTVVYX1BBRCgweDVENCwgMHgxRTQsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fNF8xMl9fQ1NJMl9EMTkJSU9NVVhfUEFEKDB4NUQ4LCAweDFFOCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT180XzEzX19DU0kyX1ZTWU5DCUlPTVVYX1BBRCgweDVEQywgMHgxRUMsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fNF8xNF9fQ1NJMl9IU1lOQwlJT01VWF9QQUQoMHg1RTAsIDB4MUYwLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfMTVfX0NTSTJfUElYQ0xLCUlPTVVYX1BBRCgweDVFNCwgMHgxRjQsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0NTSTJfUEtFMF9fQ1NJMl9QS0UwCUlPTVVYX1BBRCgweDgxQywgMHgwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfMTZfX0kyQzFfQ0xLCUlPTVVYX1BBRCgweDVFOCwgMHgxRjgsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fNF8xN19fSTJDMV9EQVQJSU9NVVhfUEFEKDB4NUVDLCAweDFGQywgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT180XzE4X19BVUQzX0JCX1RYRAlJT01VWF9QQUQoMHg1RjAsIDB4MjAwLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfMTlfX0FVRDNfQkJfUlhECUlPTVVYX1BBRCgweDVGNCwgMHgyMDQsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fNF8yMF9fQVVEM19CQl9DSwlJT01VWF9QQUQoMHg1RjgsIDB4MjA4LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfMjFfX0FVRDNfQkJfRlMJSU9NVVhfUEFEKDB4NUZDLCAweDIwQywgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT180XzIyX19DU1BJMV9NT1NJCUlPTVVYX1BBRCgweDYwMCwgMHgyMTAsIDMsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fNF8yM19fQ1NQSTFfTUlTTwlJT01VWF9QQUQoMHg2MDQsIDB4MjE0LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfMjRfX0NTUEkxX1NTMAlJT01VWF9QQUQoMHg2MDgsIDB4MjE4LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfMjVfX0NTUEkxX1NTMQlJT01VWF9QQUQoMHg2MEMsIDB4MjFDLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfMjZfX0NTUEkxX1JEWQlJT01VWF9QQUQoMHg2MTAsIDB4MjIwLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzRfMjdfX0NTUEkxX1NDTEsJSU9NVVhfUEFEKDB4NjE0LCAweDIyNCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKworLyogQmFiYmFnZSBVQVJUMSAqLworI2RlZmluZSBNWDUxX1BBRF9VQVJUMV9SWERfX1VBUlQxX1JYRAlJT01VWF9QQUQoMHg2MTgsIDB4MjI4LAlJT01VWF9DT05GSUdfQUxUMCwgMHg5ZTQsIDAsIE1YNTFfVUFSVDFfUEFEX0NUUkwgfCBQQURfQ1RMX1NSRV9GQVNUKQorI2RlZmluZSBNWDUxX1BBRF9VQVJUMV9UWERfX1VBUlQxX1RYRAlJT01VWF9QQUQoMHg2MUMsIDB4MjJDLCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBNWDUxX1VBUlQxX1BBRF9DVFJMIHwgUEFEX0NUTF9TUkVfRkFTVCkKKyNkZWZpbmUgTVg1MV9QQURfVUFSVDFfUlRTX19VQVJUMV9SVFMJSU9NVVhfUEFEKDB4NjIwLCAweDIzMCwgSU9NVVhfQ09ORklHX0FMVDAsIDB4OWUwLCAwLCBNWDUxX1VBUlQxX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9VQVJUMV9DVFNfX1VBUlQxX0NUUwlJT01VWF9QQUQoMHg2MjQsIDB4MjM0LCBJT01VWF9DT05GSUdfQUxUMCwgMHgwLCAwLCBNWDUxX1VBUlQxX1BBRF9DVFJMKQorCisvKiBCYWJiYWdlIFVBUlQyICovCisjZGVmaW5lIE1YNTFfUEFEX1VBUlQyX1JYRF9fVUFSVDJfUlhECUlPTVVYX1BBRCgweDYyOCwgMHgyMzgsIElPTVVYX0NPTkZJR19BTFQwLCAweDllYywgMiwgTVg1MV9VQVJUMl9QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfVUFSVDJfVFhEX19VQVJUMl9UWEQJSU9NVVhfUEFEKDB4NjJDLCAweDIzQywgSU9NVVhfQ09ORklHX0FMVDAsIDB4MCwgMCwgTVg1MV9VQVJUMl9QQURfQ1RSTCkKKworI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfMjJfX1VBUlQzX1JYRAlJT01VWF9QQUQoMHg2MzAsIDB4MjQwLCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfMjNfX1VBUlQzX1RYRAlJT01VWF9QQUQoMHg2MzQsIDB4MjQ0LCAzLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfMjRfX09XSVJFX0xJTkUJSU9NVVhfUEFEKDB4NjM4LCAweDI0OCwgMywgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX1JPVzBfX0tFWV9ST1cwCUlPTVVYX1BBRCgweDYzQywgMHgyNEMsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0tFWV9ST1cxX19LRVlfUk9XMQlJT01VWF9QQUQoMHg2NDAsIDB4MjUwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9LRVlfUk9XMl9fS0VZX1JPVzIJSU9NVVhfUEFEKDB4NjQ0LCAweDI1NCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX1JPVzNfX0tFWV9ST1czCUlPTVVYX1BBRCgweDY0OCwgMHgyNTgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0tFWV9DT0wwX19LRVlfQ09MMAlJT01VWF9QQUQoMHg2NEMsIDB4MjVDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9LRVlfQ09MMV9fS0VZX0NPTDEJSU9NVVhfUEFEKDB4NjUwLCAweDI2MCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX0NPTDJfX0tFWV9DT0wyCUlPTVVYX1BBRCgweDY1NCwgMHgyNjQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0tFWV9DT0wzX19LRVlfQ09MMwlJT01VWF9QQUQoMHg2NTgsIDB4MjY4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9LRVlfQ09MNF9fS0VZX0NPTDQJSU9NVVhfUEFEKDB4NjVDLCAweDI2QywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfS0VZX0NPTDVfX0tFWV9DT0w1CUlPTVVYX1BBRCgweDY2MCwgMHgyNzAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMV8yNV9fVVNCSDFfQ0xLCUlPTVVYX1BBRCgweDY3OCwgMHgyNzgsIDIsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMV8yNl9fVVNCSDFfRElSCUlPTVVYX1BBRCgweDY3QywgMHgyN0MsIDIsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMV8yN19fVVNCSDFfU1RQCUlPTVVYX1BBRCgweDY4MCwgMHgyODAsIDIsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMV8yOF9fVVNCSDFfTlhUCUlPTVVYX1BBRCgweDY4NCwgMHgyODQsIDIsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMV8xMV9fVVNCSDFfREFUQTAJSU9NVVhfUEFEKDB4Njg4LCAweDI4OCwgMiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzEyX19VU0JIMV9EQVRBMQlJT01VWF9QQUQoMHg2OEMsIDB4MjhDLCAyLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfMTNfX1VTQkgxX0RBVEEyCUlPTVVYX1BBRCgweDY5MCwgMHgyOTAsIDIsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMV8xNF9fVVNCSDFfREFUQTMJSU9NVVhfUEFEKDB4Njk0LCAweDI5NCwgMiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzE1X19VU0JIMV9EQVRBNAlJT01VWF9QQUQoMHg2OTgsIDB4Mjk4LCAyLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfMTZfX1VTQkgxX0RBVEE1CUlPTVVYX1BBRCgweDY5QywgMHgyOUMsIDIsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMV8xN19fVVNCSDFfREFUQTYJSU9NVVhfUEFEKDB4NkEwLCAweDJBMCwgMiwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzE4X19VU0JIMV9EQVRBNwlJT01VWF9QQUQoMHg2QTQsIDB4MkE0LCAyLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfMF9fREkxX1BJTjExCUlPTVVYX1BBRCgweDZBOCwgMHgyQTgsIDQsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM18xX19ESTFfUElOMTIJSU9NVVhfUEFEKDB4NkFDLCAweDJBQywgNCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzJfX0RJMV9QSU4xMwlJT01VWF9QQUQoMHg2QjAsIDB4MkIwLCA0LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfM19fREkxX0QwX0NTCUlPTVVYX1BBRCgweDZCNCwgMHgyQjQsIDQsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM180X19ESTFfRDFfQ1MJSU9NVVhfUEFEKDB4NkI4LCAweDJCOCwgNCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzVfX0RJU1BCMl9TRVJfRElOCUlPTVVYX1BBRCgweDZCQywgMHgyQkMsIDQsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fM182X19ESVNQQjJfU0VSX0RJTwlJT01VWF9QQUQoMHg2QzAsIDB4MkMwLCA0LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzNfN19fRElTUEIyX1NFUl9DTEsJSU9NVVhfUEFEKDB4NkM0LCAweDJDNCwgNCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18zXzhfX0RJU1BCMl9TRVJfUlMJSU9NVVhfUEFEKDB4NkM4LCAweDJDOCwgNCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMF9fRElTUDFfREFUMAlJT01VWF9QQUQoMHg2Q0MsIDB4MkNDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxX19ESVNQMV9EQVQxCUlPTVVYX1BBRCgweDZEMCwgMHgyRDAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDJfX0RJU1AxX0RBVDIJSU9NVVhfUEFEKDB4NkQ0LCAweDJENCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUM19fRElTUDFfREFUMwlJT01VWF9QQUQoMHg2RDgsIDB4MkQ4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQ0X19ESVNQMV9EQVQ0CUlPTVVYX1BBRCgweDZEQywgMHgyREMsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDVfX0RJU1AxX0RBVDUJSU9NVVhfUEFEKDB4NkUwLCAweDJFMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUNl9fRElTUDFfREFUNglJT01VWF9QQUQoMHg2RTQsIDB4MkU0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQ3X19ESVNQMV9EQVQ3CUlPTVVYX1BBRCgweDZFOCwgMHgyRTgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDhfX0RJU1AxX0RBVDgJSU9NVVhfUEFEKDB4NkVDLCAweDJFQywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUOV9fRElTUDFfREFUOQlJT01VWF9QQUQoMHg2RjAsIDB4MkYwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxMF9fRElTUDFfREFUMTAJSU9NVVhfUEFEKDB4NkY0LCAweDJGNCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTFfX0RJU1AxX0RBVDExCUlPTVVYX1BBRCgweDZGOCwgMHgyRjgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDEyX19ESVNQMV9EQVQxMglJT01VWF9QQUQoMHg2RkMsIDB4MkZDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxM19fRElTUDFfREFUMTMJSU9NVVhfUEFEKDB4NzAwLCAweDMwMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTRfX0RJU1AxX0RBVDE0CUlPTVVYX1BBRCgweDcwNCwgMHgzMDQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDE1X19ESVNQMV9EQVQxNQlJT01VWF9QQUQoMHg3MDgsIDB4MzA4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxNl9fRElTUDFfREFUMTYJSU9NVVhfUEFEKDB4NzBDLCAweDMwQywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMTdfX0RJU1AxX0RBVDE3CUlPTVVYX1BBRCgweDcxMCwgMHgzMTAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDE4X19ESVNQMV9EQVQxOAlJT01VWF9QQUQoMHg3MTQsIDB4MzE0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQxOV9fRElTUDFfREFUMTkJSU9NVVhfUEFEKDB4NzE4LCAweDMxOCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMjBfX0RJU1AxX0RBVDIwCUlPTVVYX1BBRCgweDcxQywgMHgzMUMsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AxX0RBVDIxX19ESVNQMV9EQVQyMQlJT01VWF9QQUQoMHg3MjAsIDB4MzIwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMV9EQVQyMl9fRElTUDFfREFUMjIJSU9NVVhfUEFEKDB4NzI0LCAweDMyNCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDFfREFUMjNfX0RJU1AxX0RBVDIzCUlPTVVYX1BBRCgweDcyOCwgMHgzMjgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0RJMV9QSU4zX19ESTFfUElOMwlJT01VWF9QQUQoMHg3MkMsIDB4MzJDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9ESTFfUElOMl9fREkxX1BJTjIJSU9NVVhfUEFEKDB4NzM0LCAweDMzMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElfR1AxX19ESV9HUDEJSU9NVVhfUEFEKDB4NzNDLCAweDMzNCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElfR1AyX19ESV9HUDIJSU9NVVhfUEFEKDB4NzQwLCAweDMzOCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElfR1AzX19ESV9HUDMJSU9NVVhfUEFEKDB4NzQ0LCAweDMzQywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfREkyX1BJTjRfX0RJMl9QSU40CUlPTVVYX1BBRCgweDc0OCwgMHgzNDAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0RJMl9QSU4yX19ESTJfUElOMglJT01VWF9QQUQoMHg3NEMsIDB4MzQ0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9ESTJfUElOM19fREkyX1BJTjMJSU9NVVhfUEFEKDB4NzUwLCAweDM0OCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfREkyX0RJU1BfQ0xLX19ESTJfRElTUF9DTEsJSU9NVVhfUEFEKDB4NzU0LCAweDM0QywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElfR1A0X19ESV9HUDQJSU9NVVhfUEFEKDB4NzU4LCAweDM1MCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMF9fRElTUDJfREFUMAlJT01VWF9QQUQoMHg3NUMsIDB4MzU0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQxX19ESVNQMl9EQVQxCUlPTVVYX1BBRCgweDc2MCwgMHgzNTgsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDJfX0RJU1AyX0RBVDIJSU9NVVhfUEFEKDB4NzY0LCAweDM1QywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUM19fRElTUDJfREFUMwlJT01VWF9QQUQoMHg3NjgsIDB4MzYwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQ0X19ESVNQMl9EQVQ0CUlPTVVYX1BBRCgweDc2QywgMHgzNjQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDVfX0RJU1AyX0RBVDUJSU9NVVhfUEFEKDB4NzcwLCAweDM2OCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzE5X19ESVNQMl9EQVQ2CUlPTVVYX1BBRCgweDc3NCwgMHgzNkMsIDUsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0dQSU9fMV8yOV9fRElTUDJfREFUNwlJT01VWF9QQUQoMHg3NzgsIDB4MzcwLCA1LCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfMzBfX0RJU1AyX0RBVDgJSU9NVVhfUEFEKDB4NzdDLCAweDM3NCwgNSwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzMxX19ESVNQMl9EQVQ5CUlPTVVYX1BBRCgweDc4MCwgMHgzNzgsIDUsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDEwX19ESVNQMl9EQVQxMAlJT01VWF9QQUQoMHg3ODQsIDB4MzdDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQxMV9fRElTUDJfREFUMTEJSU9NVVhfUEFEKDB4Nzg4LCAweDM4MCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMTJfX0RJU1AyX0RBVDEyCUlPTVVYX1BBRCgweDc4QywgMHgzODQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0RJU1AyX0RBVDEzX19ESVNQMl9EQVQxMwlJT01VWF9QQUQoMHg3OTAsIDB4Mzg4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9ESVNQMl9EQVQxNF9fRElTUDJfREFUMTQJSU9NVVhfUEFEKDB4Nzk0LCAweDM4QywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRElTUDJfREFUMTVfX0RJU1AyX0RBVDE1CUlPTVVYX1BBRCgweDc5OCwgMHgzOTAsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX1NEMV9DTURfX1NEMV9DTUQJSU9NVVhfUEFEKDB4NzlDLCAweDM5NCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfU0QxX0NMS19fU0QxX0NMSwlJT01VWF9QQUQoMHg3QTAsIDB4Mzk4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9TRDFfREFUQTBfX1NEMV9EQVRBMAlJT01VWF9QQUQoMHg3QTQsIDB4MzlDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9TRDFfREFUQTFfX1NEMV9EQVRBMQlJT01VWF9QQUQoMHg3QTgsIDB4M0EwLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9TRDFfREFUQTJfX1NEMV9EQVRBMglJT01VWF9QQUQoMHg3QUMsIDB4M0E0LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9TRDFfREFUQTNfX1NEMV9EQVRBMwlJT01VWF9QQUQoMHg3QjAsIDB4M0E4LCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfMF9fR1BJTzFfMAlJT01VWF9QQUQoMHg3QjQsIDB4M0FDLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfMV9fR1BJTzFfMQlJT01VWF9QQUQoMHg3QjgsIDB4M0IwLCAxLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9TRDJfQ01EX19TRDJfQ01ECUlPTVVYX1BBRCgweDdCQywgMHgzQjQsIDAsIDB4MCwgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX1NEMl9DTEtfX1NEMl9DTEsJSU9NVVhfUEFEKDB4N0MwLCAweDNCOCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfU0QyX0RBVEEwX19TRDJfREFUQTAJSU9NVVhfUEFEKDB4N0M0LCAweDNCQywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfU0QyX0RBVEExX19TRDJfREFUQTEJSU9NVVhfUEFEKDB4N0M4LCAweDNDMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfU0QyX0RBVEEyX19TRDJfREFUQTIJSU9NVVhfUEFEKDB4N0NDLCAweDNDNCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfU0QyX0RBVEEzX19TRDJfREFUQTMJSU9NVVhfUEFEKDB4N0QwLCAweDNDOCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzJfX0dQSU8xXzIJSU9NVVhfUEFEKDB4N0Q0LCAweDNDQywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzNfX0dQSU8xXzMJSU9NVVhfUEFEKDB4N0Q4LCAweDNEMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfUE1JQ19JTlRfUkVRX19QTUlDX0lOVF9SRVEJSU9NVVhfUEFEKDB4N0ZDLCAweDNENCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzRfX0dQSU8xXzQJSU9NVVhfUEFEKDB4ODA0LCAweDNEOCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzVfX0dQSU8xXzUJSU9NVVhfUEFEKDB4ODA4LCAweDNEQywgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzZfX0dQSU8xXzYJSU9NVVhfUEFEKDB4ODBDLCAweDNFMCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzdfX0dQSU8xXzcJSU9NVVhfUEFEKDB4ODEwLCAweDNFNCwgMCwgMHgwLCAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfR1BJT18xXzhfX0dQSU8xXzgJSU9NVVhfUEFEKDB4ODE0LCAweDNFOCwgMCwgMHgwLCAxLCBcCisJCQkJCQkoUEFEX0NUTF9TUkVfU0xPVyB8IFBBRF9DVExfRFNFX01FRCB8IFBBRF9DVExfUFVTXzEwMEtfVVAgfCAgUEFEX0NUTF9IWVMpKQorI2RlZmluZSBNWDUxX1BBRF9HUElPXzFfOV9fR1BJTzFfOQlJT01VWF9QQUQoMHg4MTgsIDB4M0VDLCAwLCAweDAsIDAsIE5PX1BBRF9DVFJMKQorCisvKiBFSU0gKi8KKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMF9fRUlNX0RBMAlJT01VWF9QQUQoMHg3YTgsIDB4MDFjLCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EQTFfX0VJTV9EQTEJSU9NVVhfUEFEKDB4N2E4LCAweDAyMCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fREEyX19FSU1fREEyCUlPTVVYX1BBRCgweDdhOCwgMHgwMjQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBM19fRUlNX0RBMwlJT01VWF9QQUQoMHg3YTgsIDB4MDI4LCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EQTRfX0VJTV9EQTQJSU9NVVhfUEFEKDB4N2FjLCAweDAyYywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fREE1X19FSU1fREE1CUlPTVVYX1BBRCgweDdhYywgMHgwMzAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBNl9fRUlNX0RBNglJT01VWF9QQUQoMHg3YWMsIDB4MDM0LCAwLCAweDAsICAgMCwgTk9fUEFEX0NUUkwpCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EQTdfX0VJTV9EQTcJSU9NVVhfUEFEKDB4N2FjLCAweDAzOCwgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorCisjZGVmaW5lIE1YNTFfUEFEX0VJTV9EQThfX0VJTV9EQTgJSU9NVVhfUEFEKDB4N2IwLCAweDAzYywgMCwgMHgwLCAgIDAsIE5PX1BBRF9DVFJMKQorI2RlZmluZSBNWDUxX1BBRF9FSU1fREE5X19FSU1fREE5CUlPTVVYX1BBRCgweDdiMCwgMHgwNDAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMTBfX0VJTV9EQTEwCUlPTVVYX1BBRCgweDdiMCwgMHgwNDQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMTFfX0VJTV9EQTExCUlPTVVYX1BBRCgweDdiMCwgMHgwNDgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMTJfX0VJTV9EQTEyCUlPTVVYX1BBRCgweDdiYywgMHgwNGMsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMTNfX0VJTV9EQTEzCUlPTVVYX1BBRCgweDdiYywgMHgwNTAsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMTRfX0VJTV9EQTE0CUlPTVVYX1BBRCgweDdiYywgMHgwNTQsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKyNkZWZpbmUgTVg1MV9QQURfRUlNX0RBMTVfX0VJTV9EQTE1CUlPTVVYX1BBRCgweDdiYywgMHgwNTgsIDAsIDB4MCwgICAwLCBOT19QQURfQ1RSTCkKKworI2VuZGlmIC8qIF9fTUFDSF9JT01VWF9NWDUxX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LXYxLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXgtdjEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODRmNTc1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LXYxLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggYnkgU2FzY2hhIEhhdWVyIDxrZXJuZWxAcGVuZ3V0cm9uaXguZGU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgYnkgSG9sZ2VyIFNjaHVyaWcgPGhzNDIzM0BtYWlsLm1uLXNvbHV0aW9ucy5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKKyAqIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworI2lmbmRlZiBfX01BQ0hfSU9NVVhfVjFfSF9fCisjZGVmaW5lIF9fTUFDSF9JT01VWF9WMV9IX18KKworLyoKKyogIEdQSU8gTW9kdWxlIGFuZCBJL08gTXVsdGlwbGV4ZXIKKyogIHggPSAwLi4zIGZvciByZWdfQSwgcmVnX0IsIHJlZ19DLCByZWdfRAorKi8KKyNkZWZpbmUgTVhDX0RESVIoeCkJKDB4MDAgKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfT0NSMSh4KQkoMHgwNCArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19PQ1IyKHgpCSgweDA4ICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX0lDT05GQTEoeCkJKDB4MGMgKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfSUNPTkZBMih4KQkoMHgxMCArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19JQ09ORkIxKHgpCSgweDE0ICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX0lDT05GQjIoeCkJKDB4MTggKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfRFIoeCkJKDB4MWMgKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfR0lVUyh4KQkoMHgyMCArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19TU1IoeCkJKDB4MjQgKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfSUNSMSh4KQkoMHgyOCArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19JQ1IyKHgpCSgweDJjICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX0lNUih4KQkoMHgzMCArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19JU1IoeCkJKDB4MzQgKyAoKHgpIDw8IDgpKQorI2RlZmluZSBNWENfR1BSKHgpCSgweDM4ICsgKCh4KSA8PCA4KSkKKyNkZWZpbmUgTVhDX1NXUih4KQkoMHgzYyArICgoeCkgPDwgOCkpCisjZGVmaW5lIE1YQ19QVUVOKHgpCSgweDQwICsgKCh4KSA8PCA4KSkKKworI2RlZmluZSBNWDFfTlVNX0dQSU9fUE9SVAk0CisjZGVmaW5lIE1YMjFfTlVNX0dQSU9fUE9SVAk2CisjZGVmaW5lIE1YMjdfTlVNX0dQSU9fUE9SVAk2CisKKyNkZWZpbmUgR1BJT19QSU5fTUFTSyAweDFmCisKKyNkZWZpbmUgR1BJT19QT1JUX1NISUZUIDUKKyNkZWZpbmUgR1BJT19QT1JUX01BU0sgKDB4NyA8PCBHUElPX1BPUlRfU0hJRlQpCisKKyNkZWZpbmUgR1BJT19QT1JUQQkoMCA8PCBHUElPX1BPUlRfU0hJRlQpCisjZGVmaW5lIEdQSU9fUE9SVEIJKDEgPDwgR1BJT19QT1JUX1NISUZUKQorI2RlZmluZSBHUElPX1BPUlRDCSgyIDw8IEdQSU9fUE9SVF9TSElGVCkKKyNkZWZpbmUgR1BJT19QT1JURAkoMyA8PCBHUElPX1BPUlRfU0hJRlQpCisjZGVmaW5lIEdQSU9fUE9SVEUJKDQgPDwgR1BJT19QT1JUX1NISUZUKQorI2RlZmluZSBHUElPX1BPUlRGCSg1IDw8IEdQSU9fUE9SVF9TSElGVCkKKworI2RlZmluZSBHUElPX09VVAkoMSA8PCA4KQorI2RlZmluZSBHUElPX0lOCQkoMCA8PCA4KQorI2RlZmluZSBHUElPX1BVRU4JKDEgPDwgOSkKKworI2RlZmluZSBHUElPX1BGCQkoMSA8PCAxMCkKKyNkZWZpbmUgR1BJT19BRgkJKDEgPDwgMTEpCisKKyNkZWZpbmUgR1BJT19PQ1JfU0hJRlQgMTIKKyNkZWZpbmUgR1BJT19PQ1JfTUFTSwkoMyA8PCBHUElPX09DUl9TSElGVCkKKyNkZWZpbmUgR1BJT19BSU4JKDAgPDwgR1BJT19PQ1JfU0hJRlQpCisjZGVmaW5lIEdQSU9fQklOCSgxIDw8IEdQSU9fT0NSX1NISUZUKQorI2RlZmluZSBHUElPX0NJTgkoMiA8PCBHUElPX09DUl9TSElGVCkKKyNkZWZpbmUgR1BJT19HUElPCSgzIDw8IEdQSU9fT0NSX1NISUZUKQorCisjZGVmaW5lIEdQSU9fQU9VVF9TSElGVAkxNAorI2RlZmluZSBHUElPX0FPVVRfTUFTSwkoMyA8PCBHUElPX0FPVVRfU0hJRlQpCisjZGVmaW5lIEdQSU9fQU9VVAkoMCA8PCBHUElPX0FPVVRfU0hJRlQpCisjZGVmaW5lIEdQSU9fQU9VVF9JU1IJKDEgPDwgR1BJT19BT1VUX1NISUZUKQorI2RlZmluZSBHUElPX0FPVVRfMAkoMiA8PCBHUElPX0FPVVRfU0hJRlQpCisjZGVmaW5lIEdQSU9fQU9VVF8xCSgzIDw8IEdQSU9fQU9VVF9TSElGVCkKKworI2RlZmluZSBHUElPX0JPVVRfU0hJRlQJMTYKKyNkZWZpbmUgR1BJT19CT1VUX01BU0sJKDMgPDwgR1BJT19CT1VUX1NISUZUKQorI2RlZmluZSBHUElPX0JPVVQJKDAgPDwgR1BJT19CT1VUX1NISUZUKQorI2RlZmluZSBHUElPX0JPVVRfSVNSCSgxIDw8IEdQSU9fQk9VVF9TSElGVCkKKyNkZWZpbmUgR1BJT19CT1VUXzAJKDIgPDwgR1BJT19CT1VUX1NISUZUKQorI2RlZmluZSBHUElPX0JPVVRfMQkoMyA8PCBHUElPX0JPVVRfU0hJRlQpCisKKy8qIGRlY29kZSBpcnEgbnVtYmVyIHRvIHVzZSB3aXRoIElNUih4KSwgSVNSKHgpIGFuZCBmcmllbmRzICovCisjZGVmaW5lIElSUV9UT19SRUcoaXJxKSAoKGlycSAtIE1YQ19JTlRFUk5BTF9JUlFTKSA+PiA1KQorCisjZGVmaW5lIElSUV9HUElPQSh4KSAgKE1YQ19HUElPX0lSUV9TVEFSVCArIHgpCisjZGVmaW5lIElSUV9HUElPQih4KSAgKElSUV9HUElPQSgzMikgKyB4KQorI2RlZmluZSBJUlFfR1BJT0MoeCkgIChJUlFfR1BJT0IoMzIpICsgeCkKKyNkZWZpbmUgSVJRX0dQSU9EKHgpICAoSVJRX0dQSU9DKDMyKSArIHgpCisjZGVmaW5lIElSUV9HUElPRSh4KSAgKElSUV9HUElPRCgzMikgKyB4KQorI2RlZmluZSBJUlFfR1BJT0YoeCkgIChJUlFfR1BJT0UoMzIpICsgeCkKKworZXh0ZXJuIGludCBteGNfZ3Bpb19tb2RlKGludCBncGlvX21vZGUpOworZXh0ZXJuIGludCBteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKGNvbnN0IGludCAqcGluX2xpc3QsIHVuc2lnbmVkIGNvdW50LAorCQljb25zdCBjaGFyICpsYWJlbCk7CitleHRlcm4gdm9pZCBteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMoY29uc3QgaW50ICpwaW5fbGlzdCwgaW50IGNvdW50KTsKKworI2VuZGlmIC8qIF9fTUFDSF9JT01VWF9WMV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pb211eC12My5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LXYzLmgKaW5kZXggMWRlZGEwMS4uZjJmNzNkMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LXYzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LXYzLmgKQEAgLTgxLDExICs4MSwxMyBAQAogCiAjZGVmaW5lIFBBRF9DVExfT0RFCQkJKDEgPDwgMykKIAotI2RlZmluZSBQQURfQ1RMX0RTRV9TVEFOREFSRAkJKDAgPDwgMSkKLSNkZWZpbmUgUEFEX0NUTF9EU0VfSElHSAkJKDEgPDwgMSkKLSNkZWZpbmUgUEFEX0NUTF9EU0VfTUFYCQkJKDIgPDwgMSkKKyNkZWZpbmUgUEFEX0NUTF9EU0VfTE9XCQkJKDAgPDwgMSkKKyNkZWZpbmUgUEFEX0NUTF9EU0VfTUVECQkJKDEgPDwgMSkKKyNkZWZpbmUgUEFEX0NUTF9EU0VfSElHSAkJKDIgPDwgMSkKKyNkZWZpbmUgUEFEX0NUTF9EU0VfTUFYCQkJKDMgPDwgMSkKIAogI2RlZmluZSBQQURfQ1RMX1NSRV9GQVNUCQkoMSA8PCAwKQorI2RlZmluZSBQQURfQ1RMX1NSRV9TTE9XCQkoMCA8PCAwKQogCiAvKgogICogc2V0dXBzIGEgc2luZ2xlIHBhZCBpbiB0aGUgaW9tdXhlcgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lvbXV4LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXguaAppbmRleCAwMTFjZmNkLi4zZDIyNmQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXguaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaW9tdXguaApAQCAtMSwxMDIgKzEsMTQgQEAKIC8qCi0qIENvcHlyaWdodCAoQykgMjAwOCBieSBTYXNjaGEgSGF1ZXIgPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KLSogQ29weXJpZ2h0IChDKSAyMDA5IGJ5IEhvbGdlciBTY2h1cmlnIDxoczQyMzNAbWFpbC5tbi1zb2x1dGlvbnMuZGU+Ci0qCi0qIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0qIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0qIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0qCi0qIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0qIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwKLSogTUEgMDIxMTAtMTMwMSwgVVNBLgotKi8KKyAqIENvcHlyaWdodCAoQykgMjAxMCBVd2UgS2xlaW5lLUtvZW5pZywgUGVuZ3V0cm9uaXgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIF9fTUFDSF9JT01VWF9IX18KKyNkZWZpbmUgX19NQUNIX0lPTVVYX0hfXwogCi0jaWZuZGVmIF9NWENfSU9NVVhfSAotI2RlZmluZSBfTVhDX0lPTVVYX0gKLQotLyoKLSogIEdQSU8gTW9kdWxlIGFuZCBJL08gTXVsdGlwbGV4ZXIKLSogIHggPSAwLi4zIGZvciByZWdfQSwgcmVnX0IsIHJlZ19DLCByZWdfRAotKi8KLSNkZWZpbmUgVkFfR1BJT19CQVNFCUlPX0FERFJFU1MoR1BJT19CQVNFX0FERFIpCi0jZGVmaW5lIE1YQ19ERElSKHgpICAgICgweDAwICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX09DUjEoeCkgICAgKDB4MDQgKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfT0NSMih4KSAgICAoMHgwOCArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19JQ09ORkExKHgpICgweDBjICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX0lDT05GQTIoeCkgKDB4MTAgKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfSUNPTkZCMSh4KSAoMHgxNCArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19JQ09ORkIyKHgpICgweDE4ICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX0RSKHgpICAgICAgKDB4MWMgKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfR0lVUyh4KSAgICAoMHgyMCArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19TU1IoeCkgICAgICgweDI0ICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX0lDUjEoeCkgICAgKDB4MjggKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfSUNSMih4KSAgICAoMHgyYyArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19JTVIoeCkgICAgICgweDMwICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX0lTUih4KSAgICAgKDB4MzQgKyAoKHgpIDw8IDgpKQotI2RlZmluZSBNWENfR1BSKHgpICAgICAoMHgzOCArICgoeCkgPDwgOCkpCi0jZGVmaW5lIE1YQ19TV1IoeCkgICAgICgweDNjICsgKCh4KSA8PCA4KSkKLSNkZWZpbmUgTVhDX1BVRU4oeCkgICAgKDB4NDAgKyAoKHgpIDw8IDgpKQotCi0jaWZkZWYgQ09ORklHX0FSQ0hfTVgxCi0jIGRlZmluZSBHUElPX1BPUlRfTUFYICAzCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDIKLSMgZGVmaW5lIEdQSU9fUE9SVF9NQVggIDUKLSNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX01YMjUKLSMgZGVmaW5lIEdQSU9fUE9SVF9NQVggIDMKLSNlbmRpZgotCi0jaWZuZGVmIEdQSU9fUE9SVF9NQVgKLSMgZXJyb3IgIkdQSU8gY29uZmlnIHBvcnQgY291bnQgdW5rbm93biEiCi0jZW5kaWYKLQotI2RlZmluZSBHUElPX1BJTl9NQVNLIDB4MWYKLQotI2RlZmluZSBHUElPX1BPUlRfU0hJRlQgNQotI2RlZmluZSBHUElPX1BPUlRfTUFTSyAoMHg3IDw8IEdQSU9fUE9SVF9TSElGVCkKLQotI2RlZmluZSBHUElPX1BPUlRBICgwIDw8IEdQSU9fUE9SVF9TSElGVCkKLSNkZWZpbmUgR1BJT19QT1JUQiAoMSA8PCBHUElPX1BPUlRfU0hJRlQpCi0jZGVmaW5lIEdQSU9fUE9SVEMgKDIgPDwgR1BJT19QT1JUX1NISUZUKQotI2RlZmluZSBHUElPX1BPUlREICgzIDw8IEdQSU9fUE9SVF9TSElGVCkKLSNkZWZpbmUgR1BJT19QT1JURSAoNCA8PCBHUElPX1BPUlRfU0hJRlQpCi0jZGVmaW5lIEdQSU9fUE9SVEYgKDUgPDwgR1BJT19QT1JUX1NISUZUKQotCi0jZGVmaW5lIEdQSU9fT1VUICAgKDEgPDwgOCkKLSNkZWZpbmUgR1BJT19JTiAgICAoMCA8PCA4KQotI2RlZmluZSBHUElPX1BVRU4gICgxIDw8IDkpCi0KLSNkZWZpbmUgR1BJT19QRiAgICAoMSA8PCAxMCkKLSNkZWZpbmUgR1BJT19BRiAgICAoMSA8PCAxMSkKLQotI2RlZmluZSBHUElPX09DUl9TSElGVCAxMgotI2RlZmluZSBHUElPX09DUl9NQVNLICgzIDw8IEdQSU9fT0NSX1NISUZUKQotI2RlZmluZSBHUElPX0FJTiAgICgwIDw8IEdQSU9fT0NSX1NISUZUKQotI2RlZmluZSBHUElPX0JJTiAgICgxIDw8IEdQSU9fT0NSX1NISUZUKQotI2RlZmluZSBHUElPX0NJTiAgICgyIDw8IEdQSU9fT0NSX1NISUZUKQotI2RlZmluZSBHUElPX0dQSU8gICgzIDw8IEdQSU9fT0NSX1NISUZUKQotCi0jZGVmaW5lIEdQSU9fQU9VVF9TSElGVCAxNAotI2RlZmluZSBHUElPX0FPVVRfTUFTSyAoMyA8PCBHUElPX0FPVVRfU0hJRlQpCi0jZGVmaW5lIEdQSU9fQU9VVCAgICAgKDAgPDwgR1BJT19BT1VUX1NISUZUKQotI2RlZmluZSBHUElPX0FPVVRfSVNSICgxIDw8IEdQSU9fQU9VVF9TSElGVCkKLSNkZWZpbmUgR1BJT19BT1VUXzAgICAoMiA8PCBHUElPX0FPVVRfU0hJRlQpCi0jZGVmaW5lIEdQSU9fQU9VVF8xICAgKDMgPDwgR1BJT19BT1VUX1NISUZUKQotCi0jZGVmaW5lIEdQSU9fQk9VVF9TSElGVCAxNgotI2RlZmluZSBHUElPX0JPVVRfTUFTSyAoMyA8PCBHUElPX0JPVVRfU0hJRlQpCi0jZGVmaW5lIEdQSU9fQk9VVCAgICAgICgwIDw8IEdQSU9fQk9VVF9TSElGVCkKLSNkZWZpbmUgR1BJT19CT1VUX0lTUiAgKDEgPDwgR1BJT19CT1VUX1NISUZUKQotI2RlZmluZSBHUElPX0JPVVRfMCAgICAoMiA8PCBHUElPX0JPVVRfU0hJRlQpCi0jZGVmaW5lIEdQSU9fQk9VVF8xICAgICgzIDw8IEdQSU9fQk9VVF9TSElGVCkKLQorLyogVGhpcyBmaWxlIHdpbGwgZ28gYXdheSwgcGxlYXNlIGluY2x1ZGUgbWFjaC9pb211eC1teC4uLiBkaXJlY3RseSAqLwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfTVgxCiAjaW5jbHVkZSA8bWFjaC9pb211eC1teDEuaD4KQEAgLTExMCwyNSArMjIsNSBAQAogI2luY2x1ZGUgPG1hY2gvaW9tdXgtbXgyNy5oPgogI2VuZGlmCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9NWDI1Ci0jaW5jbHVkZSA8bWFjaC9pb211eC1teDI1Lmg+Ci0jZW5kaWYKIAotCi0vKiBkZWNvZGUgaXJxIG51bWJlciB0byB1c2Ugd2l0aCBJTVIoeCksIElTUih4KSBhbmQgZnJpZW5kcyAqLwotI2RlZmluZSBJUlFfVE9fUkVHKGlycSkgKChpcnEgLSBNWENfSU5URVJOQUxfSVJRUykgPj4gNSkKLQotI2RlZmluZSBJUlFfR1BJT0EoeCkgIChNWENfR1BJT19JUlFfU1RBUlQgKyB4KQotI2RlZmluZSBJUlFfR1BJT0IoeCkgIChJUlFfR1BJT0EoMzIpICsgeCkKLSNkZWZpbmUgSVJRX0dQSU9DKHgpICAoSVJRX0dQSU9CKDMyKSArIHgpCi0jZGVmaW5lIElSUV9HUElPRCh4KSAgKElSUV9HUElPQygzMikgKyB4KQotI2RlZmluZSBJUlFfR1BJT0UoeCkgIChJUlFfR1BJT0QoMzIpICsgeCkKLSNkZWZpbmUgSVJRX0dQSU9GKHgpICAoSVJRX0dQSU9FKDMyKSArIHgpCi0KLQotZXh0ZXJuIHZvaWQgbXhjX2dwaW9fbW9kZShpbnQgZ3Bpb19tb2RlKTsKLWV4dGVybiBpbnQgbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhjb25zdCBpbnQgKnBpbl9saXN0LCB1bnNpZ25lZCBjb3VudCwKLQljb25zdCBjaGFyICpsYWJlbCk7Ci1leHRlcm4gdm9pZCBteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMoY29uc3QgaW50ICpwaW5fbGlzdCwgaW50IGNvdW50KTsKLQotI2VuZGlmCisjZW5kaWYgLyogX19NQUNIX0lPTVVYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lycXMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9pcnFzLmgKaW5kZXggMGNiMzQ3Ni4uODY3ODFmNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL2lycXMuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvaXJxcy5oCkBAIC0xMiwyMiArMTIsMjkgQEAKICNkZWZpbmUgX19BU01fQVJDSF9NWENfSVJRU19IX18KIAogLyoKLSAqIFNvIGZhciBhbGwgaS5NWCBTb0NzIGhhdmUgNjQgaW50ZXJuYWwgaW50ZXJydXB0cworICogU29DcyB3aXRoIFRaSUMgaW50ZXJydXB0IGNvbnRyb2xsZXIgaGF2ZSAxMjggSVJRcywgdGhvc2Ugd2l0aCBBVklDIGhhdmUgNjQKICAqLworI2lmZGVmIENPTkZJR19NWENfVFpJQworI2RlZmluZSBNWENfSU5URVJOQUxfSVJRUwkxMjgKKyNlbHNlCiAjZGVmaW5lIE1YQ19JTlRFUk5BTF9JUlFTCTY0CisjZW5kaWYKIAogI2RlZmluZSBNWENfR1BJT19JUlFfU1RBUlQJTVhDX0lOVEVSTkFMX0lSUVMKIAotI2lmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgxCi0jZGVmaW5lIE1YQ19HUElPX0lSUVMJCSgzMiAqIDQpCi0jZWxpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YMgorLyogdGhlc2UgYXJlIG9yZGVyZWQgYnkgc2l6ZSB0byBzdXBwb3J0IG11bHRpLVNvQyBrZXJuZWxzICovCisjaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDIKICNkZWZpbmUgTVhDX0dQSU9fSVJRUwkJKDMyICogNikKLSNlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgzCi0jZGVmaW5lIE1YQ19HUElPX0lSUVMJCSgzMiAqIDMpCisjZWxpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YMQorI2RlZmluZSBNWENfR1BJT19JUlFTCQkoMzIgKiA0KQogI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDI1CiAjZGVmaW5lIE1YQ19HUElPX0lSUVMJCSgzMiAqIDQpCisjZWxpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YNQorI2RlZmluZSBNWENfR1BJT19JUlFTCQkoMzIgKiA0KQogI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWEM5MTIzMQogI2RlZmluZSBNWENfR1BJT19JUlFTCQkoMzIgKiA0KQorI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDMKKyNkZWZpbmUgTVhDX0dQSU9fSVJRUwkJKDMyICogMykKICNlbmRpZgogCiAvKgpAQCAtNTEsNiArNTgsNyBAQAogI2Vsc2UKICNkZWZpbmUgTVgzX0lQVV9JUlFTIDAKICNlbmRpZgorLyogUkVWSVNJVDogQWRkIElQVSBpcnFzIG9uIElNWDUxICovCiAKICNkZWZpbmUgTlJfSVJRUwkJCShNWENfSVBVX0lSUV9TVEFSVCArIE1YM19JUFVfSVJRUykKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL21lbW9yeS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL21lbW9yeS5oCmluZGV4IGQzYWZhZmQuLmM0YjQwYzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9tZW1vcnkuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbWVtb3J5LmgKQEAgLTExLDMwICsxMSwzMSBAQAogI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19NRU1PUllfSF9fCiAjZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX01FTU9SWV9IX18KIAotI2lmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgxCi0jZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweDA4MDAwMDAwKQotI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDIKLSNpZmRlZiBDT05GSUdfTUFDSF9NWDIxCi0jZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweEMwMDAwMDAwKQotI2VuZGlmCi0jaWZkZWYgQ09ORklHX01BQ0hfTVgyNwotI2RlZmluZSBQSFlTX09GRlNFVAkJVUwoMHhBMDAwMDAwMCkKLSNlbmRpZgotI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDMKLSNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4ODAwMDAwMDApCi0jZWxpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YMjUKLSNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4ODAwMDAwMDApCi0jZWxpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YQzkxMjMxCi0jZGVmaW5lIFBIWVNfT0ZGU0VUCQlVTCgweDkwMDAwMDAwKQotI2VuZGlmCisjZGVmaW5lIE1YMV9QSFlTX09GRlNFVAkJVUwoMHgwODAwMDAwMCkKKyNkZWZpbmUgTVgyMV9QSFlTX09GRlNFVAlVTCgweGMwMDAwMDAwKQorI2RlZmluZSBNWDI1X1BIWVNfT0ZGU0VUCVVMKDB4ODAwMDAwMDApCisjZGVmaW5lIE1YMjdfUEhZU19PRkZTRVQJVUwoMHhhMDAwMDAwMCkKKyNkZWZpbmUgTVgzeF9QSFlTX09GRlNFVAlVTCgweDgwMDAwMDAwKQorI2RlZmluZSBNWDUxX1BIWVNfT0ZGU0VUCVVMKDB4OTAwMDAwMDApCisjZGVmaW5lIE1YQzkxMjMxX1BIWVNfT0ZGU0VUCVVMKDB4OTAwMDAwMDApCiAKLSNpZiBkZWZpbmVkKENPTkZJR19NWDFfVklERU8pCi0vKgotICogSW5jcmVhc2Ugc2l6ZSBvZiBETUEtY29uc2lzdGVudCBtZW1vcnkgcmVnaW9uLgotICogVGhpcyBpcyByZXF1aXJlZCBmb3IgaS5NWCBjYW1lcmEgZHJpdmVyIHRvIGNhcHR1cmUgYXQgbGVhc3QgZm91ciBWR0EgZnJhbWVzLgotICovCi0jZGVmaW5lIENPTlNJU1RFTlRfRE1BX1NJWkUgU1pfNE0KLSNlbmRpZiAvKiBDT05GSUdfTVgxX1ZJREVPICovCisjaWYgIWRlZmluZWQoQ09ORklHX1JVTlRJTUVfUEhZU19PRkZTRVQpCisjIGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgxCisjICBkZWZpbmUgUEhZU19PRkZTRVQJCU1YMV9QSFlTX09GRlNFVAorIyBlbGlmIGRlZmluZWQgQ09ORklHX01BQ0hfTVgyMQorIyAgZGVmaW5lIFBIWVNfT0ZGU0VUCQlNWDIxX1BIWVNfT0ZGU0VUCisjIGVsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDI1CisjICBkZWZpbmUgUEhZU19PRkZTRVQJCU1YMjVfUEhZU19PRkZTRVQKKyMgZWxpZiBkZWZpbmVkIENPTkZJR19NQUNIX01YMjcKKyMgIGRlZmluZSBQSFlTX09GRlNFVAkJTVgyN19QSFlTX09GRlNFVAorIyBlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVgzCisjICBkZWZpbmUgUEhZU19PRkZTRVQJCU1YM3hfUEhZU19PRkZTRVQKKyMgZWxpZiBkZWZpbmVkIENPTkZJR19BUkNIX01YQzkxMjMxCisjICBkZWZpbmUgUEhZU19PRkZTRVQJCU1YQzkxMjMxX1BIWVNfT0ZGU0VUCisjIGVsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDUKKyMgIGRlZmluZSBQSFlTX09GRlNFVAkJTVg1MV9QSFlTX09GRlNFVAorIyBlbmRpZgorI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19NWDNfVklERU8pCiAvKgpAQCAtNDIsNiArNDMsMTMgQEAKICAqIFRoaXMgaXMgcmVxdWlyZWQgZm9yIG14MyBjYW1lcmEgZHJpdmVyIHRvIGNhcHR1cmUgYXQgbGVhc3QgdHdvIFFYR0EgZnJhbWVzLgogICovCiAjZGVmaW5lIENPTlNJU1RFTlRfRE1BX1NJWkUgU1pfOE0KLSNlbmRpZiAvKiBDT05GSUdfTVgzX1ZJREVPICovCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX01YMV9WSURFTykKKy8qCisgKiBJbmNyZWFzZSBzaXplIG9mIERNQS1jb25zaXN0ZW50IG1lbW9yeSByZWdpb24uCisgKiBUaGlzIGlzIHJlcXVpcmVkIGZvciBpLk1YIGNhbWVyYSBkcml2ZXIgdG8gY2FwdHVyZSBhdCBsZWFzdCBmb3VyIFZHQSBmcmFtZXMuCisgKi8KKyNkZWZpbmUgQ09OU0lTVEVOVF9ETUFfU0laRSBTWl80TQorI2VuZGlmIC8qIENPTkZJR19NWDFfVklERU8gKi8KIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfTVhDX01FTU9SWV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9tdGQteGlwLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXRkLXhpcC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYWIxYmJhLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9tdGQteGlwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0vKgotICogTVREIHByaW1pdGl2ZXMgZm9yIFhJUCBzdXBwb3J0LiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgZnVuY3Rpb25zCi0gKgotICogRG8gbm90IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5LiBJdCdzIGluY2x1ZGVkIGZyb20gbGludXgvbXRkL3hpcC5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA4IERhcml1cyBBdWd1bGlzIDxhdWd1bGlzLmRhcml1c0BnbWFpbC5jb20+LCBUZWx0b25pa2EsIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bWFjaC9teGNfdGltZXIuaD4KLQotI2lmbmRlZiBfX0FSQ0hfSU1YX01URF9YSVBfSF9fCi0jZGVmaW5lIF9fQVJDSF9JTVhfTVREX1hJUF9IX18KLQotI2lmZGVmIENPTkZJR19BUkNIX01YMQotLyogQUlUQyByZWdpc3RlcnMgKi8KLSNkZWZpbmUgQUlUQ19CQVNFCUlPX0FERFJFU1MoQVZJQ19CQVNFX0FERFIpCi0jZGVmaW5lIE5JUE5ESAkJKEFJVENfQkFTRSArIDB4NTgpCi0jZGVmaW5lIE5JUE5ETAkJKEFJVENfQkFTRSArIDB4NUMpCi0jZGVmaW5lIElOVEVOQUJMRUgJKEFJVENfQkFTRSArIDB4MTApCi0jZGVmaW5lIElOVEVOQUJMRUwJKEFJVENfQkFTRSArIDB4MTQpCi0vKiBNVEQgbWFjcm9zICovCi0jZGVmaW5lIHhpcF9pcnFwZW5kaW5nKCkgKChfX3Jhd19yZWFkbChJTlRFTkFCTEVIKSAmICBfX3Jhd19yZWFkbChOSVBOREgpKSBcCi0JCQl8fCAoX19yYXdfcmVhZGwoSU5URU5BQkxFTCkgJiAgX19yYXdfcmVhZGwoTklQTkRMKSkpCi0jZGVmaW5lIHhpcF9jdXJydGltZSgpCQkoX19yYXdfcmVhZGwoVElNRVJfQkFTRSArIE1YQ19UQ04pKQotI2RlZmluZSB4aXBfZWxhcHNlZF9zaW5jZSh4KQkoc2lnbmVkKSgoX19yYXdfcmVhZGwoVElNRVJfQkFTRSArIE1YQ19UQ04pIC0gKHgpKSAvIDk2KQotI2RlZmluZSB4aXBfY3B1X2lkbGUoKQkJYXNtIHZvbGF0aWxlICgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMCwgNCIgOjogInIiICgwKSkKLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9NWDEgKi8KLQotI2VuZGlmIC8qIF9fQVJDSF9JTVhfTVREX1hJUF9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDEuaAppbmRleCAxYjI4OTBhLi41ZWJhN2U2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgxLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MS5oCkBAIC05LDE1NiArOSwyODkgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpZm5kZWYgX19BU01fQVJDSF9NWENfTVgxX0hfXwotI2RlZmluZSBfX0FTTV9BUkNIX01YQ19NWDFfSF9fCisjaWZuZGVmIF9fTUFDSF9NWDFfSF9fCisjZGVmaW5lIF9fTUFDSF9NWDFfSF9fCiAKICNpbmNsdWRlIDxtYWNoL3ZtYWxsb2MuaD4KIAogLyoKICAqIE1lbW9yeSBtYXAKICAqLwotI2RlZmluZSBJTVhfSU9fUEhZUwkweDAwMjAwMDAwCi0jZGVmaW5lIElNWF9JT19TSVpFCTB4MDAxMDAwMDAKLSNkZWZpbmUgSU1YX0lPX0JBU0UJVk1BTExPQ19FTkQKKyNkZWZpbmUgTVgxX0lPX0JBU0VfQUREUgkweDAwMjAwMDAwCisjZGVmaW5lIE1YMV9JT19TSVpFCQlTWl8xTQorI2RlZmluZSBNWDFfSU9fQkFTRV9BRERSX1ZJUlQJVk1BTExPQ19FTkQKIAotI2RlZmluZSBJTVhfQ1MwX1BIWVMJMHgxMDAwMDAwMAotI2RlZmluZSBJTVhfQ1MwX1NJWkUJMHgwMjAwMDAwMAorI2RlZmluZSBNWDFfQ1MwX1BIWVMJCTB4MTAwMDAwMDAKKyNkZWZpbmUgTVgxX0NTMF9TSVpFCQkweDAyMDAwMDAwCiAKLSNkZWZpbmUgSU1YX0NTMV9QSFlTCTB4MTIwMDAwMDAKLSNkZWZpbmUgSU1YX0NTMV9TSVpFCTB4MDEwMDAwMDAKKyNkZWZpbmUgTVgxX0NTMV9QSFlTCQkweDEyMDAwMDAwCisjZGVmaW5lIE1YMV9DUzFfU0laRQkJMHgwMTAwMDAwMAogCi0jZGVmaW5lIElNWF9DUzJfUEhZUwkweDEzMDAwMDAwCi0jZGVmaW5lIElNWF9DUzJfU0laRQkweDAxMDAwMDAwCisjZGVmaW5lIE1YMV9DUzJfUEhZUwkJMHgxMzAwMDAwMAorI2RlZmluZSBNWDFfQ1MyX1NJWkUJCTB4MDEwMDAwMDAKIAotI2RlZmluZSBJTVhfQ1MzX1BIWVMJMHgxNDAwMDAwMAotI2RlZmluZSBJTVhfQ1MzX1NJWkUJMHgwMTAwMDAwMAorI2RlZmluZSBNWDFfQ1MzX1BIWVMJCTB4MTQwMDAwMDAKKyNkZWZpbmUgTVgxX0NTM19TSVpFCQkweDAxMDAwMDAwCiAKLSNkZWZpbmUgSU1YX0NTNF9QSFlTCTB4MTUwMDAwMDAKLSNkZWZpbmUgSU1YX0NTNF9TSVpFCTB4MDEwMDAwMDAKKyNkZWZpbmUgTVgxX0NTNF9QSFlTCQkweDE1MDAwMDAwCisjZGVmaW5lIE1YMV9DUzRfU0laRQkJMHgwMTAwMDAwMAogCi0jZGVmaW5lIElNWF9DUzVfUEhZUwkweDE2MDAwMDAwCi0jZGVmaW5lIElNWF9DUzVfU0laRQkweDAxMDAwMDAwCisjZGVmaW5lIE1YMV9DUzVfUEhZUwkJMHgxNjAwMDAwMAorI2RlZmluZSBNWDFfQ1M1X1NJWkUJCTB4MDEwMDAwMDAKIAogLyoKICAqICBSZWdpc3RlciBCQVNFcywgYmFzZWQgb24gT0ZGU0VUcwogICovCi0jZGVmaW5lIEFJUEkxX0JBU0VfQUREUgkJKDB4MDAwMDAgKyBJTVhfSU9fUEhZUykKLSNkZWZpbmUgV0RUX0JBU0VfQUREUgkJKDB4MDEwMDAgKyBJTVhfSU9fUEhZUykKLSNkZWZpbmUgVElNMV9CQVNFX0FERFIJCSgweDAyMDAwICsgSU1YX0lPX1BIWVMpCi0jZGVmaW5lIFRJTTJfQkFTRV9BRERSCQkoMHgwMzAwMCArIElNWF9JT19QSFlTKQotI2RlZmluZSBSVENfQkFTRV9BRERSCQkoMHgwNDAwMCArIElNWF9JT19QSFlTKQotI2RlZmluZSBMQ0RDX0JBU0VfQUREUgkJKDB4MDUwMDAgKyBJTVhfSU9fUEhZUykKLSNkZWZpbmUgVUFSVDFfQkFTRV9BRERSCQkoMHgwNjAwMCArIElNWF9JT19QSFlTKQotI2RlZmluZSBVQVJUMl9CQVNFX0FERFIJCSgweDA3MDAwICsgSU1YX0lPX1BIWVMpCi0jZGVmaW5lIFBXTV9CQVNFX0FERFIJCSgweDA4MDAwICsgSU1YX0lPX1BIWVMpCi0jZGVmaW5lIERNQV9CQVNFX0FERFIJCSgweDA5MDAwICsgSU1YX0lPX1BIWVMpCi0jZGVmaW5lIEFJUEkyX0JBU0VfQUREUgkJKDB4MTAwMDAgKyBJTVhfSU9fUEhZUykKLSNkZWZpbmUgU0lNX0JBU0VfQUREUgkJKDB4MTEwMDAgKyBJTVhfSU9fUEhZUykKLSNkZWZpbmUgVVNCRF9CQVNFX0FERFIJCSgweDEyMDAwICsgSU1YX0lPX1BIWVMpCi0jZGVmaW5lIFNQSTFfQkFTRV9BRERSCQkoMHgxMzAwMCArIElNWF9JT19QSFlTKQotI2RlZmluZSBNTUNfQkFTRV9BRERSCQkoMHgxNDAwMCArIElNWF9JT19QSFlTKQotI2RlZmluZSBBU1BfQkFTRV9BRERSCQkoMHgxNTAwMCArIElNWF9JT19QSFlTKQotI2RlZmluZSBCVEFfQkFTRV9BRERSCQkoMHgxNjAwMCArIElNWF9JT19QSFlTKQotI2RlZmluZSBJMkNfQkFTRV9BRERSCQkoMHgxNzAwMCArIElNWF9JT19QSFlTKQotI2RlZmluZSBTU0lfQkFTRV9BRERSCQkoMHgxODAwMCArIElNWF9JT19QSFlTKQotI2RlZmluZSBTUEkyX0JBU0VfQUREUgkJKDB4MTkwMDAgKyBJTVhfSU9fUEhZUykKLSNkZWZpbmUgTVNIQ19CQVNFX0FERFIJCSgweDFBMDAwICsgSU1YX0lPX1BIWVMpCi0jZGVmaW5lIENDTV9CQVNFX0FERFIJCSgweDFCMDAwICsgSU1YX0lPX1BIWVMpCi0jZGVmaW5lIFNDTV9CQVNFX0FERFIJCSgweDFCODA0ICsgSU1YX0lPX1BIWVMpCi0jZGVmaW5lIEdQSU9fQkFTRV9BRERSCQkoMHgxQzAwMCArIElNWF9JT19QSFlTKQotI2RlZmluZSBFSU1fQkFTRV9BRERSCQkoMHgyMDAwMCArIElNWF9JT19QSFlTKQotI2RlZmluZSBTRFJBTUNfQkFTRV9BRERSCSgweDIxMDAwICsgSU1YX0lPX1BIWVMpCi0jZGVmaW5lIE1NQV9CQVNFX0FERFIJCSgweDIyMDAwICsgSU1YX0lPX1BIWVMpCi0jZGVmaW5lIEFWSUNfQkFTRV9BRERSCQkoMHgyMzAwMCArIElNWF9JT19QSFlTKQotI2RlZmluZSBDU0lfQkFTRV9BRERSCQkoMHgyNDAwMCArIElNWF9JT19QSFlTKQorI2RlZmluZSBNWDFfQUlQSTFfQkFTRV9BRERSCQkoMHgwMDAwMCArIE1YMV9JT19CQVNFX0FERFIpCisjZGVmaW5lIE1YMV9XRFRfQkFTRV9BRERSCQkoMHgwMTAwMCArIE1YMV9JT19CQVNFX0FERFIpCisjZGVmaW5lIE1YMV9USU0xX0JBU0VfQUREUgkJKDB4MDIwMDAgKyBNWDFfSU9fQkFTRV9BRERSKQorI2RlZmluZSBNWDFfVElNMl9CQVNFX0FERFIJCSgweDAzMDAwICsgTVgxX0lPX0JBU0VfQUREUikKKyNkZWZpbmUgTVgxX1JUQ19CQVNFX0FERFIJCSgweDA0MDAwICsgTVgxX0lPX0JBU0VfQUREUikKKyNkZWZpbmUgTVgxX0xDRENfQkFTRV9BRERSCQkoMHgwNTAwMCArIE1YMV9JT19CQVNFX0FERFIpCisjZGVmaW5lIE1YMV9VQVJUMV9CQVNFX0FERFIJCSgweDA2MDAwICsgTVgxX0lPX0JBU0VfQUREUikKKyNkZWZpbmUgTVgxX1VBUlQyX0JBU0VfQUREUgkJKDB4MDcwMDAgKyBNWDFfSU9fQkFTRV9BRERSKQorI2RlZmluZSBNWDFfUFdNX0JBU0VfQUREUgkJKDB4MDgwMDAgKyBNWDFfSU9fQkFTRV9BRERSKQorI2RlZmluZSBNWDFfRE1BX0JBU0VfQUREUgkJKDB4MDkwMDAgKyBNWDFfSU9fQkFTRV9BRERSKQorI2RlZmluZSBNWDFfQUlQSTJfQkFTRV9BRERSCQkoMHgxMDAwMCArIE1YMV9JT19CQVNFX0FERFIpCisjZGVmaW5lIE1YMV9TSU1fQkFTRV9BRERSCQkoMHgxMTAwMCArIE1YMV9JT19CQVNFX0FERFIpCisjZGVmaW5lIE1YMV9VU0JEX0JBU0VfQUREUgkJKDB4MTIwMDAgKyBNWDFfSU9fQkFTRV9BRERSKQorI2RlZmluZSBNWDFfU1BJMV9CQVNFX0FERFIJCSgweDEzMDAwICsgTVgxX0lPX0JBU0VfQUREUikKKyNkZWZpbmUgTVgxX01NQ19CQVNFX0FERFIJCSgweDE0MDAwICsgTVgxX0lPX0JBU0VfQUREUikKKyNkZWZpbmUgTVgxX0FTUF9CQVNFX0FERFIJCSgweDE1MDAwICsgTVgxX0lPX0JBU0VfQUREUikKKyNkZWZpbmUgTVgxX0JUQV9CQVNFX0FERFIJCSgweDE2MDAwICsgTVgxX0lPX0JBU0VfQUREUikKKyNkZWZpbmUgTVgxX0kyQ19CQVNFX0FERFIJCSgweDE3MDAwICsgTVgxX0lPX0JBU0VfQUREUikKKyNkZWZpbmUgTVgxX1NTSV9CQVNFX0FERFIJCSgweDE4MDAwICsgTVgxX0lPX0JBU0VfQUREUikKKyNkZWZpbmUgTVgxX1NQSTJfQkFTRV9BRERSCQkoMHgxOTAwMCArIE1YMV9JT19CQVNFX0FERFIpCisjZGVmaW5lIE1YMV9NU0hDX0JBU0VfQUREUgkJKDB4MUEwMDAgKyBNWDFfSU9fQkFTRV9BRERSKQorI2RlZmluZSBNWDFfQ0NNX0JBU0VfQUREUgkJKDB4MUIwMDAgKyBNWDFfSU9fQkFTRV9BRERSKQorI2RlZmluZSBNWDFfU0NNX0JBU0VfQUREUgkJKDB4MUI4MDQgKyBNWDFfSU9fQkFTRV9BRERSKQorI2RlZmluZSBNWDFfR1BJT19CQVNFX0FERFIJCSgweDFDMDAwICsgTVgxX0lPX0JBU0VfQUREUikKKyNkZWZpbmUgTVgxX0VJTV9CQVNFX0FERFIJCSgweDIwMDAwICsgTVgxX0lPX0JBU0VfQUREUikKKyNkZWZpbmUgTVgxX1NEUkFNQ19CQVNFX0FERFIJCSgweDIxMDAwICsgTVgxX0lPX0JBU0VfQUREUikKKyNkZWZpbmUgTVgxX01NQV9CQVNFX0FERFIJCSgweDIyMDAwICsgTVgxX0lPX0JBU0VfQUREUikKKyNkZWZpbmUgTVgxX0FWSUNfQkFTRV9BRERSCQkoMHgyMzAwMCArIE1YMV9JT19CQVNFX0FERFIpCisjZGVmaW5lIE1YMV9DU0lfQkFTRV9BRERSCQkoMHgyNDAwMCArIE1YMV9JT19CQVNFX0FERFIpCiAKIC8qIG1hY3JvIHRvIGdldCBhdCBJTyBzcGFjZSB3aGVuIHJ1bm5pbmcgdmlydHVhbGx5ICovCi0jZGVmaW5lIElPX0FERFJFU1MoeCkJKCh4KSAtIElNWF9JT19QSFlTICsgSU1YX0lPX0JBU0UpCi0KLS8qIGRlZmluZSBtYWNyb3MgbmVlZGVkIGZvciBlbnRyeS1tYWNyby5TICovCi0jZGVmaW5lIEFWSUNfSU9fQUREUkVTUyh4KQlJT19BRERSRVNTKHgpCisjZGVmaW5lIE1YMV9JT19BRERSRVNTKHgpICgJCQkJCQlcCisJSU1YX0lPX0FERFJFU1MoeCwgTVgxX0lPKSkKIAogLyogZml4ZWQgaW50ZXJycHV0IG51bWJlcnMgKi8KLSNkZWZpbmUgSU5UX1NPRlRJTlQJCTAKLSNkZWZpbmUgQ1NJX0lOVAkJCTYKLSNkZWZpbmUgRFNQQV9NQUNfSU5UCQk3Ci0jZGVmaW5lIERTUEFfSU5UCQk4Ci0jZGVmaW5lIENPTVBfSU5UCQk5Ci0jZGVmaW5lIE1TSENfWElOVAkJMTAKLSNkZWZpbmUgR1BJT19JTlRfUE9SVEEJCTExCi0jZGVmaW5lIEdQSU9fSU5UX1BPUlRCCQkxMgotI2RlZmluZSBHUElPX0lOVF9QT1JUQwkJMTMKLSNkZWZpbmUgTENEQ19JTlQJCTE0Ci0jZGVmaW5lIFNJTV9JTlQJCQkxNQotI2RlZmluZSBTSU1fREFUQV9JTlQJCTE2Ci0jZGVmaW5lIFJUQ19JTlQJCQkxNwotI2RlZmluZSBSVENfU0FNSU5UCQkxOAotI2RlZmluZSBVQVJUMl9NSU5UX1BGRVJSCTE5Ci0jZGVmaW5lIFVBUlQyX01JTlRfUlRTCQkyMAotI2RlZmluZSBVQVJUMl9NSU5UX0RUUgkJMjEKLSNkZWZpbmUgVUFSVDJfTUlOVF9VQVJUQwkyMgotI2RlZmluZSBVQVJUMl9NSU5UX1RYCQkyMwotI2RlZmluZSBVQVJUMl9NSU5UX1JYCQkyNAotI2RlZmluZSBVQVJUMV9NSU5UX1BGRVJSCTI1Ci0jZGVmaW5lIFVBUlQxX01JTlRfUlRTCQkyNgotI2RlZmluZSBVQVJUMV9NSU5UX0RUUgkJMjcKLSNkZWZpbmUgVUFSVDFfTUlOVF9VQVJUQwkyOAotI2RlZmluZSBVQVJUMV9NSU5UX1RYCQkyOQotI2RlZmluZSBVQVJUMV9NSU5UX1JYCQkzMAotI2RlZmluZSBWT0lDRV9EQUNfSU5UCQkzMQotI2RlZmluZSBWT0lDRV9BRENfSU5UCQkzMgotI2RlZmluZSBQRU5fREFUQV9JTlQJCTMzCi0jZGVmaW5lIFBXTV9JTlQJCQkzNAotI2RlZmluZSBTREhDX0lOVAkJMzUKLSNkZWZpbmUgSTJDX0lOVAkJCTM5Ci0jZGVmaW5lIENTUElfSU5UCQk0MQotI2RlZmluZSBTU0lfVFhfSU5UCQk0MgotI2RlZmluZSBTU0lfVFhfRVJSX0lOVAkJNDMKLSNkZWZpbmUgU1NJX1JYX0lOVAkJNDQKLSNkZWZpbmUgU1NJX1JYX0VSUl9JTlQJCTQ1Ci0jZGVmaW5lIFRPVUNIX0lOVAkJNDYKLSNkZWZpbmUgVVNCRF9JTlQwCQk0NwotI2RlZmluZSBVU0JEX0lOVDEJCTQ4Ci0jZGVmaW5lIFVTQkRfSU5UMgkJNDkKLSNkZWZpbmUgVVNCRF9JTlQzCQk1MAotI2RlZmluZSBVU0JEX0lOVDQJCTUxCi0jZGVmaW5lIFVTQkRfSU5UNQkJNTIKLSNkZWZpbmUgVVNCRF9JTlQ2CQk1MwotI2RlZmluZSBCVFNZU19JTlQJCTU1Ci0jZGVmaW5lIEJUVElNX0lOVAkJNTYKLSNkZWZpbmUgQlRXVUlfSU5UCQk1NwotI2RlZmluZSBUSU0yX0lOVAkJNTgKLSNkZWZpbmUgVElNMV9JTlQJCTU5Ci0jZGVmaW5lIERNQV9FUlIJCQk2MAotI2RlZmluZSBETUFfSU5UCQkJNjEKLSNkZWZpbmUgR1BJT19JTlRfUE9SVEQJCTYyCi0jZGVmaW5lIFdEVF9JTlQJCQk2MworI2RlZmluZSBNWDFfSU5UX1NPRlRJTlQJCTAKKyNkZWZpbmUgTVgxX0NTSV9JTlQJCTYKKyNkZWZpbmUgTVgxX0RTUEFfTUFDX0lOVAk3CisjZGVmaW5lIE1YMV9EU1BBX0lOVAkJOAorI2RlZmluZSBNWDFfQ09NUF9JTlQJCTkKKyNkZWZpbmUgTVgxX01TSENfWElOVAkJMTAKKyNkZWZpbmUgTVgxX0dQSU9fSU5UX1BPUlRBCTExCisjZGVmaW5lIE1YMV9HUElPX0lOVF9QT1JUQgkxMgorI2RlZmluZSBNWDFfR1BJT19JTlRfUE9SVEMJMTMKKyNkZWZpbmUgTVgxX0xDRENfSU5UCQkxNAorI2RlZmluZSBNWDFfU0lNX0lOVAkJMTUKKyNkZWZpbmUgTVgxX1NJTV9EQVRBX0lOVAkxNgorI2RlZmluZSBNWDFfUlRDX0lOVAkJMTcKKyNkZWZpbmUgTVgxX1JUQ19TQU1JTlQJCTE4CisjZGVmaW5lIE1YMV9VQVJUMl9NSU5UX1BGRVJSCTE5CisjZGVmaW5lIE1YMV9VQVJUMl9NSU5UX1JUUwkyMAorI2RlZmluZSBNWDFfVUFSVDJfTUlOVF9EVFIJMjEKKyNkZWZpbmUgTVgxX1VBUlQyX01JTlRfVUFSVEMJMjIKKyNkZWZpbmUgTVgxX1VBUlQyX01JTlRfVFgJMjMKKyNkZWZpbmUgTVgxX1VBUlQyX01JTlRfUlgJMjQKKyNkZWZpbmUgTVgxX1VBUlQxX01JTlRfUEZFUlIJMjUKKyNkZWZpbmUgTVgxX1VBUlQxX01JTlRfUlRTCTI2CisjZGVmaW5lIE1YMV9VQVJUMV9NSU5UX0RUUgkyNworI2RlZmluZSBNWDFfVUFSVDFfTUlOVF9VQVJUQwkyOAorI2RlZmluZSBNWDFfVUFSVDFfTUlOVF9UWAkyOQorI2RlZmluZSBNWDFfVUFSVDFfTUlOVF9SWAkzMAorI2RlZmluZSBNWDFfVk9JQ0VfREFDX0lOVAkzMQorI2RlZmluZSBNWDFfVk9JQ0VfQURDX0lOVAkzMgorI2RlZmluZSBNWDFfUEVOX0RBVEFfSU5UCTMzCisjZGVmaW5lIE1YMV9QV01fSU5UCQkzNAorI2RlZmluZSBNWDFfU0RIQ19JTlQJCTM1CisjZGVmaW5lIE1YMV9JMkNfSU5UCQkzOQorI2RlZmluZSBNWDFfQ1NQSV9JTlQJCTQxCisjZGVmaW5lIE1YMV9TU0lfVFhfSU5UCQk0MgorI2RlZmluZSBNWDFfU1NJX1RYX0VSUl9JTlQJNDMKKyNkZWZpbmUgTVgxX1NTSV9SWF9JTlQJCTQ0CisjZGVmaW5lIE1YMV9TU0lfUlhfRVJSX0lOVAk0NQorI2RlZmluZSBNWDFfVE9VQ0hfSU5UCQk0NgorI2RlZmluZSBNWDFfVVNCRF9JTlQwCQk0NworI2RlZmluZSBNWDFfVVNCRF9JTlQxCQk0OAorI2RlZmluZSBNWDFfVVNCRF9JTlQyCQk0OQorI2RlZmluZSBNWDFfVVNCRF9JTlQzCQk1MAorI2RlZmluZSBNWDFfVVNCRF9JTlQ0CQk1MQorI2RlZmluZSBNWDFfVVNCRF9JTlQ1CQk1MgorI2RlZmluZSBNWDFfVVNCRF9JTlQ2CQk1MworI2RlZmluZSBNWDFfQlRTWVNfSU5UCQk1NQorI2RlZmluZSBNWDFfQlRUSU1fSU5UCQk1NgorI2RlZmluZSBNWDFfQlRXVUlfSU5UCQk1NworI2RlZmluZSBNWDFfVElNMl9JTlQJCTU4CisjZGVmaW5lIE1YMV9USU0xX0lOVAkJNTkKKyNkZWZpbmUgTVgxX0RNQV9FUlIJCTYwCisjZGVmaW5lIE1YMV9ETUFfSU5UCQk2MQorI2RlZmluZSBNWDFfR1BJT19JTlRfUE9SVEQJNjIKKyNkZWZpbmUgTVgxX1dEVF9JTlQJCTYzCiAKIC8qIERNQSAqLwotI2RlZmluZSBETUFfUkVRX1VBUlQzX1QJCTIKLSNkZWZpbmUgRE1BX1JFUV9VQVJUM19SCQkzCi0jZGVmaW5lIERNQV9SRVFfU1NJMl9UCQk0Ci0jZGVmaW5lIERNQV9SRVFfU1NJMl9SCQk1Ci0jZGVmaW5lIERNQV9SRVFfQ1NJX1NUQVQJNgotI2RlZmluZSBETUFfUkVRX0NTSV9SCQk3Ci0jZGVmaW5lIERNQV9SRVFfTVNIQwkJOAotI2RlZmluZSBETUFfUkVRX0RTUEFfRENUX0RPVVQJOQotI2RlZmluZSBETUFfUkVRX0RTUEFfRENUX0RJTgkxMAotI2RlZmluZSBETUFfUkVRX0RTUEFfTUFDCTExCi0jZGVmaW5lIERNQV9SRVFfRVhUCQkxMgotI2RlZmluZSBETUFfUkVRX1NESEMJCTEzCi0jZGVmaW5lIERNQV9SRVFfU1BJMV9SCQkxNAotI2RlZmluZSBETUFfUkVRX1NQSTFfVAkJMTUKLSNkZWZpbmUgRE1BX1JFUV9TU0lfVAkJMTYKLSNkZWZpbmUgRE1BX1JFUV9TU0lfUgkJMTcKLSNkZWZpbmUgRE1BX1JFUV9BU1BfREFDCQkxOAotI2RlZmluZSBETUFfUkVRX0FTUF9BREMJCTE5Ci0jZGVmaW5lIERNQV9SRVFfVVNQX0VQKHgpCSgyMCArICh4KSkKLSNkZWZpbmUgRE1BX1JFUV9TUEkyX1IJCTI2Ci0jZGVmaW5lIERNQV9SRVFfU1BJMl9UCQkyNwotI2RlZmluZSBETUFfUkVRX1VBUlQyX1QJCTI4Ci0jZGVmaW5lIERNQV9SRVFfVUFSVDJfUgkJMjkKLSNkZWZpbmUgRE1BX1JFUV9VQVJUMV9UCQkzMAotI2RlZmluZSBETUFfUkVRX1VBUlQxX1IJCTMxCisjZGVmaW5lIE1YMV9ETUFfUkVRX1VBUlQzX1QJCTIKKyNkZWZpbmUgTVgxX0RNQV9SRVFfVUFSVDNfUgkJMworI2RlZmluZSBNWDFfRE1BX1JFUV9TU0kyX1QJCTQKKyNkZWZpbmUgTVgxX0RNQV9SRVFfU1NJMl9SCQk1CisjZGVmaW5lIE1YMV9ETUFfUkVRX0NTSV9TVEFUCQk2CisjZGVmaW5lIE1YMV9ETUFfUkVRX0NTSV9SCQk3CisjZGVmaW5lIE1YMV9ETUFfUkVRX01TSEMJCTgKKyNkZWZpbmUgTVgxX0RNQV9SRVFfRFNQQV9EQ1RfRE9VVAk5CisjZGVmaW5lIE1YMV9ETUFfUkVRX0RTUEFfRENUX0RJTgkxMAorI2RlZmluZSBNWDFfRE1BX1JFUV9EU1BBX01BQwkJMTEKKyNkZWZpbmUgTVgxX0RNQV9SRVFfRVhUCQkJMTIKKyNkZWZpbmUgTVgxX0RNQV9SRVFfU0RIQwkJMTMKKyNkZWZpbmUgTVgxX0RNQV9SRVFfU1BJMV9SCQkxNAorI2RlZmluZSBNWDFfRE1BX1JFUV9TUEkxX1QJCTE1CisjZGVmaW5lIE1YMV9ETUFfUkVRX1NTSV9UCQkxNgorI2RlZmluZSBNWDFfRE1BX1JFUV9TU0lfUgkJMTcKKyNkZWZpbmUgTVgxX0RNQV9SRVFfQVNQX0RBQwkJMTgKKyNkZWZpbmUgTVgxX0RNQV9SRVFfQVNQX0FEQwkJMTkKKyNkZWZpbmUgTVgxX0RNQV9SRVFfVVNQX0VQKHgpCQkoMjAgKyAoeCkpCisjZGVmaW5lIE1YMV9ETUFfUkVRX1NQSTJfUgkJMjYKKyNkZWZpbmUgTVgxX0RNQV9SRVFfU1BJMl9UCQkyNworI2RlZmluZSBNWDFfRE1BX1JFUV9VQVJUMl9UCQkyOAorI2RlZmluZSBNWDFfRE1BX1JFUV9VQVJUMl9SCQkyOQorI2RlZmluZSBNWDFfRE1BX1JFUV9VQVJUMV9UCQkzMAorI2RlZmluZSBNWDFfRE1BX1JFUV9VQVJUMV9SCQkzMQogCi0jZW5kaWYgLyogIF9fQVNNX0FSQ0hfTVhDX01YMV9IX18gKi8KKy8qCisgKiBUaGlzIGRvZXNuJ3QgZGVwZW5kIG9uIElNWF9ORUVEU19ERVBSRUNBVEVEX1NZTUJPTFMKKyAqIHRvIG5vdCBicmVhayBkcml2ZXJzL3VzYi9nYWRnZXQvaW14X3VkYy4gIFNob3VsZCBnbworICogYXdheSBhZnRlciB0aGlzIGRyaXZlciB1c2VzIHRoZSBuZXcgbmFtZS4KKyAqLworI2RlZmluZSBVU0JEX0lOVDAJCU1YMV9VU0JEX0lOVDAKKworI2lmZGVmIElNWF9ORUVEU19ERVBSRUNBVEVEX1NZTUJPTFMKKy8qIHRoZXNlIHNob3VsZCBnbyBhd2F5ICovCisjZGVmaW5lIElNWF9JT19QSFlTIE1YMV9JT19CQVNFX0FERFIKKyNkZWZpbmUgSU1YX0lPX1NJWkUgTVgxX0lPX1NJWkUKKyNkZWZpbmUgSU1YX0lPX0JBU0UgTVgxX0lPX0JBU0VfQUREUl9WSVJUCisjZGVmaW5lIElNWF9DUzBfUEhZUyBNWDFfQ1MwX1BIWVMKKyNkZWZpbmUgSU1YX0NTMF9TSVpFIE1YMV9DUzBfU0laRQorI2RlZmluZSBJTVhfQ1MxX1BIWVMgTVgxX0NTMV9QSFlTCisjZGVmaW5lIElNWF9DUzFfU0laRSBNWDFfQ1MxX1NJWkUKKyNkZWZpbmUgSU1YX0NTMl9QSFlTIE1YMV9DUzJfUEhZUworI2RlZmluZSBJTVhfQ1MyX1NJWkUgTVgxX0NTMl9TSVpFCisjZGVmaW5lIElNWF9DUzNfUEhZUyBNWDFfQ1MzX1BIWVMKKyNkZWZpbmUgSU1YX0NTM19TSVpFIE1YMV9DUzNfU0laRQorI2RlZmluZSBJTVhfQ1M0X1BIWVMgTVgxX0NTNF9QSFlTCisjZGVmaW5lIElNWF9DUzRfU0laRSBNWDFfQ1M0X1NJWkUKKyNkZWZpbmUgSU1YX0NTNV9QSFlTIE1YMV9DUzVfUEhZUworI2RlZmluZSBJTVhfQ1M1X1NJWkUgTVgxX0NTNV9TSVpFCisjZGVmaW5lIEFJUEkxX0JBU0VfQUREUiBNWDFfQUlQSTFfQkFTRV9BRERSCisjZGVmaW5lIFdEVF9CQVNFX0FERFIgTVgxX1dEVF9CQVNFX0FERFIKKyNkZWZpbmUgVElNMV9CQVNFX0FERFIgTVgxX1RJTTFfQkFTRV9BRERSCisjZGVmaW5lIFRJTTJfQkFTRV9BRERSIE1YMV9USU0yX0JBU0VfQUREUgorI2RlZmluZSBSVENfQkFTRV9BRERSIE1YMV9SVENfQkFTRV9BRERSCisjZGVmaW5lIExDRENfQkFTRV9BRERSIE1YMV9MQ0RDX0JBU0VfQUREUgorI2RlZmluZSBVQVJUMV9CQVNFX0FERFIgTVgxX1VBUlQxX0JBU0VfQUREUgorI2RlZmluZSBVQVJUMl9CQVNFX0FERFIgTVgxX1VBUlQyX0JBU0VfQUREUgorI2RlZmluZSBQV01fQkFTRV9BRERSIE1YMV9QV01fQkFTRV9BRERSCisjZGVmaW5lIERNQV9CQVNFX0FERFIgTVgxX0RNQV9CQVNFX0FERFIKKyNkZWZpbmUgQUlQSTJfQkFTRV9BRERSIE1YMV9BSVBJMl9CQVNFX0FERFIKKyNkZWZpbmUgU0lNX0JBU0VfQUREUiBNWDFfU0lNX0JBU0VfQUREUgorI2RlZmluZSBVU0JEX0JBU0VfQUREUiBNWDFfVVNCRF9CQVNFX0FERFIKKyNkZWZpbmUgU1BJMV9CQVNFX0FERFIgTVgxX1NQSTFfQkFTRV9BRERSCisjZGVmaW5lIE1NQ19CQVNFX0FERFIgTVgxX01NQ19CQVNFX0FERFIKKyNkZWZpbmUgQVNQX0JBU0VfQUREUiBNWDFfQVNQX0JBU0VfQUREUgorI2RlZmluZSBCVEFfQkFTRV9BRERSIE1YMV9CVEFfQkFTRV9BRERSCisjZGVmaW5lIEkyQ19CQVNFX0FERFIgTVgxX0kyQ19CQVNFX0FERFIKKyNkZWZpbmUgU1NJX0JBU0VfQUREUiBNWDFfU1NJX0JBU0VfQUREUgorI2RlZmluZSBTUEkyX0JBU0VfQUREUiBNWDFfU1BJMl9CQVNFX0FERFIKKyNkZWZpbmUgTVNIQ19CQVNFX0FERFIgTVgxX01TSENfQkFTRV9BRERSCisjZGVmaW5lIENDTV9CQVNFX0FERFIgTVgxX0NDTV9CQVNFX0FERFIKKyNkZWZpbmUgU0NNX0JBU0VfQUREUiBNWDFfU0NNX0JBU0VfQUREUgorI2RlZmluZSBHUElPX0JBU0VfQUREUiBNWDFfR1BJT19CQVNFX0FERFIKKyNkZWZpbmUgRUlNX0JBU0VfQUREUiBNWDFfRUlNX0JBU0VfQUREUgorI2RlZmluZSBTRFJBTUNfQkFTRV9BRERSIE1YMV9TRFJBTUNfQkFTRV9BRERSCisjZGVmaW5lIE1NQV9CQVNFX0FERFIgTVgxX01NQV9CQVNFX0FERFIKKyNkZWZpbmUgQVZJQ19CQVNFX0FERFIgTVgxX0FWSUNfQkFTRV9BRERSCisjZGVmaW5lIENTSV9CQVNFX0FERFIgTVgxX0NTSV9CQVNFX0FERFIKKyNkZWZpbmUgSU9fQUREUkVTUyh4KSBNWDFfSU9fQUREUkVTUyh4KQorI2RlZmluZSBBVklDX0lPX0FERFJFU1MoeCkgSU9fQUREUkVTUyh4KQorI2RlZmluZSBJTlRfU09GVElOVCBNWDFfSU5UX1NPRlRJTlQKKyNkZWZpbmUgQ1NJX0lOVCBNWDFfQ1NJX0lOVAorI2RlZmluZSBEU1BBX01BQ19JTlQgTVgxX0RTUEFfTUFDX0lOVAorI2RlZmluZSBEU1BBX0lOVCBNWDFfRFNQQV9JTlQKKyNkZWZpbmUgQ09NUF9JTlQgTVgxX0NPTVBfSU5UCisjZGVmaW5lIE1TSENfWElOVCBNWDFfTVNIQ19YSU5UCisjZGVmaW5lIEdQSU9fSU5UX1BPUlRBIE1YMV9HUElPX0lOVF9QT1JUQQorI2RlZmluZSBHUElPX0lOVF9QT1JUQiBNWDFfR1BJT19JTlRfUE9SVEIKKyNkZWZpbmUgR1BJT19JTlRfUE9SVEMgTVgxX0dQSU9fSU5UX1BPUlRDCisjZGVmaW5lIExDRENfSU5UIE1YMV9MQ0RDX0lOVAorI2RlZmluZSBTSU1fSU5UIE1YMV9TSU1fSU5UCisjZGVmaW5lIFNJTV9EQVRBX0lOVCBNWDFfU0lNX0RBVEFfSU5UCisjZGVmaW5lIFJUQ19JTlQgTVgxX1JUQ19JTlQKKyNkZWZpbmUgUlRDX1NBTUlOVCBNWDFfUlRDX1NBTUlOVAorI2RlZmluZSBVQVJUMl9NSU5UX1BGRVJSIE1YMV9VQVJUMl9NSU5UX1BGRVJSCisjZGVmaW5lIFVBUlQyX01JTlRfUlRTIE1YMV9VQVJUMl9NSU5UX1JUUworI2RlZmluZSBVQVJUMl9NSU5UX0RUUiBNWDFfVUFSVDJfTUlOVF9EVFIKKyNkZWZpbmUgVUFSVDJfTUlOVF9VQVJUQyBNWDFfVUFSVDJfTUlOVF9VQVJUQworI2RlZmluZSBVQVJUMl9NSU5UX1RYIE1YMV9VQVJUMl9NSU5UX1RYCisjZGVmaW5lIFVBUlQyX01JTlRfUlggTVgxX1VBUlQyX01JTlRfUlgKKyNkZWZpbmUgVUFSVDFfTUlOVF9QRkVSUiBNWDFfVUFSVDFfTUlOVF9QRkVSUgorI2RlZmluZSBVQVJUMV9NSU5UX1JUUyBNWDFfVUFSVDFfTUlOVF9SVFMKKyNkZWZpbmUgVUFSVDFfTUlOVF9EVFIgTVgxX1VBUlQxX01JTlRfRFRSCisjZGVmaW5lIFVBUlQxX01JTlRfVUFSVEMgTVgxX1VBUlQxX01JTlRfVUFSVEMKKyNkZWZpbmUgVUFSVDFfTUlOVF9UWCBNWDFfVUFSVDFfTUlOVF9UWAorI2RlZmluZSBVQVJUMV9NSU5UX1JYIE1YMV9VQVJUMV9NSU5UX1JYCisjZGVmaW5lIFZPSUNFX0RBQ19JTlQgTVgxX1ZPSUNFX0RBQ19JTlQKKyNkZWZpbmUgVk9JQ0VfQURDX0lOVCBNWDFfVk9JQ0VfQURDX0lOVAorI2RlZmluZSBQRU5fREFUQV9JTlQgTVgxX1BFTl9EQVRBX0lOVAorI2RlZmluZSBQV01fSU5UIE1YMV9QV01fSU5UCisjZGVmaW5lIFNESENfSU5UIE1YMV9TREhDX0lOVAorI2RlZmluZSBJMkNfSU5UIE1YMV9JMkNfSU5UCisjZGVmaW5lIENTUElfSU5UIE1YMV9DU1BJX0lOVAorI2RlZmluZSBTU0lfVFhfSU5UIE1YMV9TU0lfVFhfSU5UCisjZGVmaW5lIFNTSV9UWF9FUlJfSU5UIE1YMV9TU0lfVFhfRVJSX0lOVAorI2RlZmluZSBTU0lfUlhfSU5UIE1YMV9TU0lfUlhfSU5UCisjZGVmaW5lIFNTSV9SWF9FUlJfSU5UIE1YMV9TU0lfUlhfRVJSX0lOVAorI2RlZmluZSBUT1VDSF9JTlQgTVgxX1RPVUNIX0lOVAorI2RlZmluZSBVU0JEX0lOVDEgTVgxX1VTQkRfSU5UMQorI2RlZmluZSBVU0JEX0lOVDIgTVgxX1VTQkRfSU5UMgorI2RlZmluZSBVU0JEX0lOVDMgTVgxX1VTQkRfSU5UMworI2RlZmluZSBVU0JEX0lOVDQgTVgxX1VTQkRfSU5UNAorI2RlZmluZSBVU0JEX0lOVDUgTVgxX1VTQkRfSU5UNQorI2RlZmluZSBVU0JEX0lOVDYgTVgxX1VTQkRfSU5UNgorI2RlZmluZSBCVFNZU19JTlQgTVgxX0JUU1lTX0lOVAorI2RlZmluZSBCVFRJTV9JTlQgTVgxX0JUVElNX0lOVAorI2RlZmluZSBCVFdVSV9JTlQgTVgxX0JUV1VJX0lOVAorI2RlZmluZSBUSU0yX0lOVCBNWDFfVElNMl9JTlQKKyNkZWZpbmUgVElNMV9JTlQgTVgxX1RJTTFfSU5UCisjZGVmaW5lIERNQV9FUlIgTVgxX0RNQV9FUlIKKyNkZWZpbmUgRE1BX0lOVCBNWDFfRE1BX0lOVAorI2RlZmluZSBHUElPX0lOVF9QT1JURCBNWDFfR1BJT19JTlRfUE9SVEQKKyNkZWZpbmUgV0RUX0lOVCBNWDFfV0RUX0lOVAorI2RlZmluZSBETUFfUkVRX1VBUlQzX1QgTVgxX0RNQV9SRVFfVUFSVDNfVAorI2RlZmluZSBETUFfUkVRX1VBUlQzX1IgTVgxX0RNQV9SRVFfVUFSVDNfUgorI2RlZmluZSBETUFfUkVRX1NTSTJfVCBNWDFfRE1BX1JFUV9TU0kyX1QKKyNkZWZpbmUgRE1BX1JFUV9TU0kyX1IgTVgxX0RNQV9SRVFfU1NJMl9SCisjZGVmaW5lIERNQV9SRVFfQ1NJX1NUQVQgTVgxX0RNQV9SRVFfQ1NJX1NUQVQKKyNkZWZpbmUgRE1BX1JFUV9DU0lfUiBNWDFfRE1BX1JFUV9DU0lfUgorI2RlZmluZSBETUFfUkVRX01TSEMgTVgxX0RNQV9SRVFfTVNIQworI2RlZmluZSBETUFfUkVRX0RTUEFfRENUX0RPVVQgTVgxX0RNQV9SRVFfRFNQQV9EQ1RfRE9VVAorI2RlZmluZSBETUFfUkVRX0RTUEFfRENUX0RJTiBNWDFfRE1BX1JFUV9EU1BBX0RDVF9ESU4KKyNkZWZpbmUgRE1BX1JFUV9EU1BBX01BQyBNWDFfRE1BX1JFUV9EU1BBX01BQworI2RlZmluZSBETUFfUkVRX0VYVCBNWDFfRE1BX1JFUV9FWFQKKyNkZWZpbmUgRE1BX1JFUV9TREhDIE1YMV9ETUFfUkVRX1NESEMKKyNkZWZpbmUgRE1BX1JFUV9TUEkxX1IgTVgxX0RNQV9SRVFfU1BJMV9SCisjZGVmaW5lIERNQV9SRVFfU1BJMV9UIE1YMV9ETUFfUkVRX1NQSTFfVAorI2RlZmluZSBETUFfUkVRX1NTSV9UIE1YMV9ETUFfUkVRX1NTSV9UCisjZGVmaW5lIERNQV9SRVFfU1NJX1IgTVgxX0RNQV9SRVFfU1NJX1IKKyNkZWZpbmUgRE1BX1JFUV9BU1BfREFDIE1YMV9ETUFfUkVRX0FTUF9EQUMKKyNkZWZpbmUgRE1BX1JFUV9BU1BfQURDIE1YMV9ETUFfUkVRX0FTUF9BREMKKyNkZWZpbmUgRE1BX1JFUV9VU1BfRVAoeCkgTVgxX0RNQV9SRVFfVVNQX0VQKHgpCisjZGVmaW5lIERNQV9SRVFfU1BJMl9SIE1YMV9ETUFfUkVRX1NQSTJfUgorI2RlZmluZSBETUFfUkVRX1NQSTJfVCBNWDFfRE1BX1JFUV9TUEkyX1QKKyNkZWZpbmUgRE1BX1JFUV9VQVJUMl9UIE1YMV9ETUFfUkVRX1VBUlQyX1QKKyNkZWZpbmUgRE1BX1JFUV9VQVJUMl9SIE1YMV9ETUFfUkVRX1VBUlQyX1IKKyNkZWZpbmUgRE1BX1JFUV9VQVJUMV9UIE1YMV9ETUFfUkVRX1VBUlQxX1QKKyNkZWZpbmUgRE1BX1JFUV9VQVJUMV9SIE1YMV9ETUFfUkVRX1VBUlQxX1IKKyNlbmRpZiAvKiBpZmRlZiBJTVhfTkVFRFNfREVQUkVDQVRFRF9TWU1CT0xTICovCisKKyNlbmRpZiAvKiBpZm5kZWYgX19NQUNIX01YMV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDIxLXVzYmhvc3QuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDIxLXVzYmhvc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmQwYjU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjEtdXNiaG9zdC5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKglDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIEZ1enpleSA8bWZ1enpleUBnbWFpbC5jb20+CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqCWJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKglNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKglHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19BU01fQVJDSF9NWDIxX1VTQkgKKyNkZWZpbmUgX19BU01fQVJDSF9NWDIxX1VTQkgKKworZW51bSBteDIxX3VzYmhfeGN2ciB7CisJLyogVmFsdWVzIGJlbG93IGFzIHVzZWQgYnkgaGFyZHdhcmUgKEhXTU9ERSByZWdpc3RlcikgKi8KKwlNWDIxX1VTQlhDVlJfVFhESUZfUlhESUYgPSAwLAorCU1YMjFfVVNCWENWUl9UWERJRl9SWFNFID0gMSwKKwlNWDIxX1VTQlhDVlJfVFhTRV9SWERJRiA9IDIsCisJTVgyMV9VU0JYQ1ZSX1RYU0VfUlhTRSA9IDMsCit9OworCitzdHJ1Y3QgbXgyMV91c2JoX3BsYXRmb3JtX2RhdGEgeworCWVudW0gbXgyMV91c2JoX3hjdnIgaG9zdF94Y3ZyOyAvKiB0cmFuY2VpdmVyIG1vZGUgaG9zdCAxLDIgcG9ydHMgKi8KKwllbnVtIG14MjFfdXNiaF94Y3ZyIG90Z194Y3ZyOyAvKiB0cmFuY2VpdmVyIG1vZGUgb3RnIChhcyBob3N0KSBwb3J0ICovCisJdTE2IAllbmFibGVfaG9zdDE6MSwKKwkJZW5hYmxlX2hvc3QyOjEsCisJCWVuYWJsZV9vdGdfaG9zdDoxLCAvKiBlbmFibGUgIk9URyIgcG9ydCAoYXMgaG9zdCkgKi8KKwkJaG9zdDFfeGN2ZXJsZXNzOjEsIC8qIHRyYWNlaXZlcmxlc3MgaG9zdDEgcG9ydCAqLworCQlob3N0MV90eGVub2U6MSwgLyogb3V0cHV0IGVuYWJsZSBob3N0MSB0cmFuc21pdCBlbmFibGUgKi8KKwkJb3RnX2V4dF94Y3ZyOjEsIC8qIGV4dGVybmFsIHRyYW5jZWl2ZXIgZm9yIE9URyBwb3J0ICovCisJCXVudXNlZDoxMDsKK307CisKKyNlbmRpZiAvKiBfX0FTTV9BUkNIX01YMjFfVVNCSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjEuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDIxLmgKaW5kZXggYmIyOTdkOC4uZWQ5OGI5YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjEuaAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyMS5oCkBAIC0yMiw4ICsyMiw4IEBACiAgKiBNQSAgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgX19BU01fQVJDSF9NWENfTVgyMV9IX18KLSNkZWZpbmUgX19BU01fQVJDSF9NWENfTVgyMV9IX18KKyNpZm5kZWYgX19NQUNIX01YMjFfSF9fCisjZGVmaW5lIF9fTUFDSF9NWDIxX0hfXwogCiAjZGVmaW5lIE1YMjFfQUlQSV9CQVNFX0FERFIJCTB4MTAwMDAwMDAKICNkZWZpbmUgTVgyMV9BSVBJX0JBU0VfQUREUl9WSVJUCTB4ZjQwMDAwMDAKQEAgLTkyLDYgKzkyLDExIEBACiAKICNkZWZpbmUgTVgyMV9JUkFNX0JBU0VfQUREUgkJMHhmZmZmZTgwMAkvKiBpbnRlcm5hbCByYW0gKi8KIAorI2RlZmluZSBNWDIxX0lPX0FERFJFU1MoeCkgKAkJCQkJCVwKKwlJTVhfSU9fQUREUkVTUyh4LCBNWDIxX0FJUEkpID86CQkJCQlcCisJSU1YX0lPX0FERFJFU1MoeCwgTVgyMV9TQUhCMSkgPzoJCQkJXAorCUlNWF9JT19BRERSRVNTKHgsIE1YMjFfWF9NRU1DKSkKKwogLyogZml4ZWQgaW50ZXJydXB0IG51bWJlcnMgKi8KICNkZWZpbmUgTVgyMV9JTlRfQ1NQSTMJCTYKICNkZWZpbmUgTVgyMV9JTlRfR1BJTwkJOApAQCAtMTc5LDYgKzE4NCw3IEBACiAjZGVmaW5lIE1YMjFfRE1BX1JFUV9DU0lfU1RBVAkzMAogI2RlZmluZSBNWDIxX0RNQV9SRVFfQ1NJX1JYCTMxCiAKKyNpZmRlZiBJTVhfTkVFRFNfREVQUkVDQVRFRF9TWU1CT0xTCiAvKiB0aGVzZSBzaG91bGQgZ28gYXdheSAqLwogI2RlZmluZSBTRFJBTV9CQVNFX0FERFIgTVgyMV9TRFJBTV9CQVNFX0FERFIKICNkZWZpbmUgQ1NEMV9CQVNFX0FERFIgTVgyMV9DU0QxX0JBU0VfQUREUgpAQCAtMjExLDUgKzIxNyw2IEBACiAjZGVmaW5lIERNQV9SRVFfRklSSV9SWCBNWDIxX0RNQV9SRVFfRklSSV9SWAogI2RlZmluZSBETUFfUkVRX0JNSV9UWCBNWDIxX0RNQV9SRVFfQk1JX1RYCiAjZGVmaW5lIERNQV9SRVFfQk1JX1JYIE1YMjFfRE1BX1JFUV9CTUlfUlgKKyNlbmRpZgogCi0jZW5kaWYgLyogX19BU01fQVJDSF9NWENfTVgyMV9IX18gKi8KKyNlbmRpZiAvKiBpZm5kZWYgX19NQUNIX01YMjFfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjUuaAppbmRleCA4NTRlMmRjLi40ZWI2ZTMzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI1LmgKQEAgLTIyLDI3ICsyMiwyNyBAQAogI2RlZmluZSBNWDI1X0dQSU8zX0JBU0VfQUREUl9WSVJUCShNWDI1X0FJUFMyX0JBU0VfQUREUl9WSVJUICsgMHhhNDAwMCkKICNkZWZpbmUgTVgyNV9HUElPNF9CQVNFX0FERFJfVklSVAkoTVgyNV9BSVBTMl9CQVNFX0FERFJfVklSVCArIDB4OWMwMDApCiAKLSNkZWZpbmUgTVgyNV9BSVBTMV9JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBNWDI1X0FJUFMxX0JBU0VfQUREUikgKyBNWDI1X0FJUFMxX0JBU0VfQUREUl9WSVJUKQotI2RlZmluZSBNWDI1X0FJUFMyX0lPX0FERFJFU1MoeCkgIFwKLQkoKCh4KSAtIE1YMjVfQUlQUzJfQkFTRV9BRERSKSArIE1YMjVfQUlQUzJfQkFTRV9BRERSX1ZJUlQpCi0jZGVmaW5lIE1YMjVfQVZJQ19JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBNWDI1X0FWSUNfQkFTRV9BRERSKSArIE1YMjVfQVZJQ19CQVNFX0FERFJfVklSVCkKKyNkZWZpbmUgTVgyNV9JT19BRERSRVNTKHgpICgJCQkJCVwKKwlJTVhfSU9fQUREUkVTUyh4LCBNWDI1X0FJUFMxKSA/OgkJCVwKKwlJTVhfSU9fQUREUkVTUyh4LCBNWDI1X0FJUFMyKSA/OgkJCVwKKwlJTVhfSU9fQUREUkVTUyh4LCBNWDI1X0FWSUMpKQogCi0jZGVmaW5lIF9faW5fcmFuZ2UoYWRkciwgbmFtZSkJKChhZGRyKSA+PSBuYW1lIyNfQkFTRV9BRERSICYmIChhZGRyKSA8IG5hbWUjI19CQVNFX0FERFIgKyBuYW1lIyNfU0laRSkKLQotI2RlZmluZSBNWDI1X0lPX0FERFJFU1MoeCkJCQkJCVwKLQkodm9pZCBfX2ZvcmNlIF9faW9tZW0gKikJCQkJXAotCShfX2luX3JhbmdlKHgsIE1YMjVfQUlQUzEpID8gTVgyNV9BSVBTMV9JT19BRERSRVNTKHgpIDoJXAotCV9faW5fcmFuZ2UoeCwgTVgyNV9BSVBTMikgPyBNWDI1X0FJUFMyX0lPX0FERFJFU1MoeCkgOglcCi0JX19pbl9yYW5nZSh4LCBNWDI1X0FWSUMpID8gTVgyNV9BVklDX0lPX0FERFJFU1MoeCkgOglcCi0JMHhERUFEQkVFRikKLQotI2RlZmluZSBVQVJUMV9CQVNFX0FERFIJCQkweDQzZjkwMDAwCi0jZGVmaW5lIFVBUlQyX0JBU0VfQUREUgkJCTB4NDNmOTQwMDAKKyNkZWZpbmUgTVgyNV9VQVJUMV9CQVNFX0FERFIJCTB4NDNmOTAwMDAKKyNkZWZpbmUgTVgyNV9VQVJUMl9CQVNFX0FERFIJCTB4NDNmOTQwMDAKIAogI2RlZmluZSBNWDI1X0ZFQ19CQVNFX0FERFIJCTB4NTAwMzgwMDAKKyNkZWZpbmUgTVgyNV9ORkNfQkFTRV9BRERSCQkweGJiMDAwMDAwCisjZGVmaW5lIE1YMjVfRFJZSUNFX0JBU0VfQUREUgkJMHg1M2ZmYzAwMAorI2RlZmluZSBNWDI1X0xDRENfQkFTRV9BRERSCQkweDUzZmJjMDAwCiAKKyNkZWZpbmUgTVgyNV9JTlRfRFJZSUNFCTI1CiAjZGVmaW5lIE1YMjVfSU5UX0ZFQwk1NworI2RlZmluZSBNWDI1X0lOVF9OQU5ERkMJMzMKKyNkZWZpbmUgTVgyNV9JTlRfTENEQwkzOQogCi0jZW5kaWYgLyogX19NQUNIX01YMjVfSF9fICovCisjaWYgZGVmaW5lZChJTVhfTkVFRFNfREVQUkVDQVRFRF9TWU1CT0xTKQorI2RlZmluZSBVQVJUMV9CQVNFX0FERFIJCQlNWDI1X1VBUlQxX0JBU0VfQUREUgorI2RlZmluZSBVQVJUMl9CQVNFX0FERFIJCQlNWDI1X1VBUlQyX0JBU0VfQUREUgorI2VuZGlmCisKKyNlbmRpZiAvKiBpZm5kZWYgX19NQUNIX01YMjVfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNy5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MjcuaAppbmRleCBlMmFlMTlmLi5iYWU5Y2Q3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyNy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDI3LmgKQEAgLTIxLDggKzIxLDEyIEBACiAgKiBNQSAgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKLSNpZm5kZWYgX19BU01fQVJDSF9NWENfTVgyN19IX18KLSNkZWZpbmUgX19BU01fQVJDSF9NWENfTVgyN19IX18KKyNpZm5kZWYgX19NQUNIX01YMjdfSF9fCisjZGVmaW5lIF9fTUFDSF9NWDI3X0hfXworCisjaWZuZGVmIF9fQVNTRU1CTEVSX18KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2VuZGlmCiAKICNkZWZpbmUgTVgyN19BSVBJX0JBU0VfQUREUgkJMHgxMDAwMDAwMAogI2RlZmluZSBNWDI3X0FJUElfQkFTRV9BRERSX1ZJUlQJMHhmNDAwMDAwMApAQCAtMTA5LDExICsxMTMsMzEgQEAKICNkZWZpbmUgTVgyN19NM0lGX0JBU0VfQUREUgkJCShNWDI3X1hfTUVNQ19CQVNFX0FERFIgKyAweDMwMDApCiAjZGVmaW5lIE1YMjdfUENNQ0lBX0NUTF9CQVNFX0FERFIJCShNWDI3X1hfTUVNQ19CQVNFX0FERFIgKyAweDQwMDApCiAKKyNkZWZpbmUgTVgyN19XRUlNX0NTQ1J4X0JBU0VfQUREUihjcykJKE1YMjdfV0VJTV9CQVNFX0FERFIgKyAoY3MpICogMHgxMCkKKyNkZWZpbmUgTVgyN19XRUlNX0NTQ1J4VShjcykJCQkoTVgyN19XRUlNX0NTQ1J4X0JBU0VfQUREUihjcykpCisjZGVmaW5lIE1YMjdfV0VJTV9DU0NSeEwoY3MpCQkJKE1YMjdfV0VJTV9DU0NSeF9CQVNFX0FERFIoY3MpICsgMHg0KQorI2RlZmluZSBNWDI3X1dFSU1fQ1NDUnhBKGNzKQkJCShNWDI3X1dFSU1fQ1NDUnhfQkFTRV9BRERSKGNzKSArIDB4OCkKKwogI2RlZmluZSBNWDI3X1BDTUNJQV9NRU1fQkFTRV9BRERSCTB4ZGMwMDAwMDAKIAogLyogSVJBTSAqLwogI2RlZmluZSBNWDI3X0lSQU1fQkFTRV9BRERSCQkweGZmZmY0YzAwCS8qIGludGVybmFsIHJhbSAqLwogCisjZGVmaW5lIE1YMjdfSU9fQUREUkVTUyh4KSAoCQkJCQkJXAorCUlNWF9JT19BRERSRVNTKHgsIE1YMjdfQUlQSSkgPzoJCQkJCVwKKwlJTVhfSU9fQUREUkVTUyh4LCBNWDI3X1NBSEIxKSA/OgkJCQlcCisJSU1YX0lPX0FERFJFU1MoeCwgTVgyN19YX01FTUMpKQorCisjaWZuZGVmIF9fQVNTRU1CTEVSX18KK3N0YXRpYyBpbmxpbmUgdm9pZCBteDI3X3NldHVwX3dlaW1jcyhzaXplX3QgY3MsCisJCXVuc2lnbmVkIHVwcGVyLCB1bnNpZ25lZCBsb3dlciwgdW5zaWduZWQgYWRkaW9uYWwpCit7CisJX19yYXdfd3JpdGVsKHVwcGVyLCBNWDI3X0lPX0FERFJFU1MoTVgyN19XRUlNX0NTQ1J4VShjcykpKTsKKwlfX3Jhd193cml0ZWwobG93ZXIsIE1YMjdfSU9fQUREUkVTUyhNWDI3X1dFSU1fQ1NDUnhMKGNzKSkpOworCV9fcmF3X3dyaXRlbChhZGRpb25hbCwgTVgyN19JT19BRERSRVNTKE1YMjdfV0VJTV9DU0NSeEEoY3MpKSk7Cit9CisjZW5kaWYKKwogLyogZml4ZWQgaW50ZXJydXB0IG51bWJlcnMgKi8KICNkZWZpbmUgTVgyN19JTlRfSTJDMgkJMQogI2RlZmluZSBNWDI3X0lOVF9HUFQ2CQkyCkBAIC0yMjUsNiArMjQ5LDcgQEAKIGV4dGVybiBpbnQgbXgyN19yZXZpc2lvbih2b2lkKTsKICNlbmRpZgogCisjaWZkZWYgSU1YX05FRURTX0RFUFJFQ0FURURfU1lNQk9MUwogLyogdGhlc2Ugc2hvdWxkIGdvIGF3YXkgKi8KICNkZWZpbmUgTVNIQ19CQVNFX0FERFIgTVgyN19NU0hDX0JBU0VfQUREUgogI2RlZmluZSBHUFQ1X0JBU0VfQUREUiBNWDI3X0dQVDVfQkFTRV9BRERSCkBAIC0yOTIsNSArMzE3LDYgQEAKICNkZWZpbmUgRE1BX1JFUV9VQVJUNl9SWCBNWDI3X0RNQV9SRVFfVUFSVDZfUlgKICNkZWZpbmUgRE1BX1JFUV9TREhDMyBNWDI3X0RNQV9SRVFfU0RIQzMKICNkZWZpbmUgRE1BX1JFUV9ORkMgTVgyN19ETUFfUkVRX05GQworI2VuZGlmCiAKLSNlbmRpZiAvKiBfX0FTTV9BUkNIX01YQ19NWDI3X0hfXyAqLworI2VuZGlmIC8qIGlmbmRlZiBfX01BQ0hfTVgyN19IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDJ4LmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgyeC5oCmluZGV4IGYyZWFmMTQuLmFmYjg5NWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDJ4LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MnguaApAQCAtMjAsOCArMjAsOCBAQAogICogTUEgIDAyMTEwLTEzMDEsIFVTQS4KICAqLwogCi0jaWZuZGVmIF9fQVNNX0FSQ0hfTVhDX01YMnhfSF9fCi0jZGVmaW5lIF9fQVNNX0FSQ0hfTVhDX01YMnhfSF9fCisjaWZuZGVmIF9fTUFDSF9NWDJ4X0hfXworI2RlZmluZSBfX01BQ0hfTVgyeF9IX18KIAogLyogVGhlIGZvbGxvd2luZyBhZGRyZXNzZXMgYXJlIGNvbW1vbiBiZXR3ZWVuIGkuTVgyMSBhbmQgaS5NWDI3ICovCiAKQEAgLTE3Niw2ICsxNzYsNyBAQAogI2RlZmluZSBNWDJ4X0RNQV9SRVFfQ1NJX1NUQVQJMzAKICNkZWZpbmUgTVgyeF9ETUFfUkVRX0NTSV9SWAkzMQogCisjaWZkZWYgSU1YX05FRURTX0RFUFJFQ0FURURfU1lNQk9MUwogLyogdGhlc2Ugc2hvdWxkIGdvIGF3YXkgKi8KICNkZWZpbmUgQUlQSV9CQVNFX0FERFIgTVgyeF9BSVBJX0JBU0VfQUREUgogI2RlZmluZSBBSVBJX0JBU0VfQUREUl9WSVJUIE1YMnhfQUlQSV9CQVNFX0FERFJfVklSVApAQCAtMjg3LDUgKzI4OCw2IEBACiAjZGVmaW5lIERNQV9SRVFfVUFSVDFfVFggTVgyeF9ETUFfUkVRX1VBUlQxX1RYCiAjZGVmaW5lIERNQV9SRVFfQ1NJX1NUQVQgTVgyeF9ETUFfUkVRX0NTSV9TVEFUCiAjZGVmaW5lIERNQV9SRVFfQ1NJX1JYIE1YMnhfRE1BX1JFUV9DU0lfUlgKKyNlbmRpZgogCi0jZW5kaWYgLyogX19BU01fQVJDSF9NWENfTVgyeF9IX18gKi8KKyNlbmRpZiAvKiBpZm5kZWYgX19NQUNIX01YMnhfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzMS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MzEuaAppbmRleCBiOGI0N2QxLi5mYjkwZTExIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzMS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDMxLmgKQEAgLTEsMyArMSwxMCBAQAorI2lmbmRlZiBfX01BQ0hfTVgzMV9IX18KKyNkZWZpbmUgX19NQUNIX01YMzFfSF9fCisKKyNpZm5kZWYgX19BU1NFTUJMRVJfXworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjZW5kaWYKKwogLyoKICAqIElSQU0KICAqLwpAQCAtMTA3LDggKzExNCwzMCBAQAogI2RlZmluZSBNWDMxX0VNSV9DVExfQkFTRV9BRERSCQkJKE1YMzFfWF9NRU1DX0JBU0VfQUREUiArIDB4NDAwMCkKICNkZWZpbmUgTVgzMV9QQ01DSUFfQ1RMX0JBU0VfQUREUgkJTVgzMV9FTUlfQ1RMX0JBU0VfQUREUgogCisjZGVmaW5lIE1YMzFfV0VJTV9DU0NSeF9CQVNFX0FERFIoY3MpCShNWDMxX1dFSU1fQkFTRV9BRERSICsgKGNzKSAqIDB4MTApCisjZGVmaW5lIE1YMzFfV0VJTV9DU0NSeFUoY3MpCQkJKE1YMzFfV0VJTV9DU0NSeF9CQVNFX0FERFIoY3MpKQorI2RlZmluZSBNWDMxX1dFSU1fQ1NDUnhMKGNzKQkJCShNWDMxX1dFSU1fQ1NDUnhfQkFTRV9BRERSKGNzKSArIDB4NCkKKyNkZWZpbmUgTVgzMV9XRUlNX0NTQ1J4QShjcykJCQkoTVgzMV9XRUlNX0NTQ1J4X0JBU0VfQUREUihjcykgKyAweDgpCisKICNkZWZpbmUgTVgzMV9QQ01DSUFfTUVNX0JBU0VfQUREUgkweGJjMDAwMDAwCiAKKyNkZWZpbmUgTVgzMV9JT19BRERSRVNTKHgpICgJCQkJCQlcCisJSU1YX0lPX0FERFJFU1MoeCwgTVgzMV9BSVBTMSkgPzoJCQkJXAorCUlNWF9JT19BRERSRVNTKHgsIE1YMzFfQUlQUzIpID86CQkJCVwKKwlJTVhfSU9fQUREUkVTUyh4LCBNWDMxX0FWSUMpID86CQkJCQlcCisJSU1YX0lPX0FERFJFU1MoeCwgTVgzMV9YX01FTUMpID86CQkJCVwKKwlJTVhfSU9fQUREUkVTUyh4LCBNWDMxX1NQQkEwKSkKKworI2lmbmRlZiBfX0FTU0VNQkxFUl9fCitzdGF0aWMgaW5saW5lIHZvaWQgbXgzMV9zZXR1cF93ZWltY3Moc2l6ZV90IGNzLAorCQl1bnNpZ25lZCB1cHBlciwgdW5zaWduZWQgbG93ZXIsIHVuc2lnbmVkIGFkZGlvbmFsKQoreworCV9fcmF3X3dyaXRlbCh1cHBlciwgTVgzMV9JT19BRERSRVNTKE1YMzFfV0VJTV9DU0NSeFUoY3MpKSk7CisJX19yYXdfd3JpdGVsKGxvd2VyLCBNWDMxX0lPX0FERFJFU1MoTVgzMV9XRUlNX0NTQ1J4TChjcykpKTsKKwlfX3Jhd193cml0ZWwoYWRkaW9uYWwsIE1YMzFfSU9fQUREUkVTUyhNWDMxX1dFSU1fQ1NDUnhBKGNzKSkpOworfQorI2VuZGlmCisKICNkZWZpbmUgTVgzMV9JTlRfSTJDMwkJMwogI2RlZmluZSBNWDMxX0lOVF9JMkMyCQk0CiAjZGVmaW5lIE1YMzFfSU5UX01QRUc0X0VOQ09ERVIJNQpAQCAtMTg2LDYgKzIxNSw3IEBACiAjZGVmaW5lIE1YMzFfU1lTVEVNX1JFVl9NSU4JCU1YMzFfQ0hJUF9SRVZfMV8wCiAjZGVmaW5lIE1YMzFfU1lTVEVNX1JFVl9OVU0JCTMKIAorI2lmZGVmIElNWF9ORUVEU19ERVBSRUNBVEVEX1NZTUJPTFMKIC8qIHRoZXNlIHNob3VsZCBnbyBhd2F5ICovCiAjZGVmaW5lIEFUQV9CQVNFX0FERFIgTVgzMV9BVEFfQkFTRV9BRERSCiAjZGVmaW5lIFVBUlQ0X0JBU0VfQUREUiBNWDMxX1VBUlQ0X0JBU0VfQUREUgpAQCAtMjE2LDMgKzI0Niw2IEBACiAjZGVmaW5lIE1YQ19JTlRfVUFSVDUgTVgzMV9JTlRfVUFSVDUKICNkZWZpbmUgTVhDX0lOVF9DQ00gTVgzMV9JTlRfQ0NNCiAjZGVmaW5lIE1YQ19JTlRfUENNQ0lBIE1YMzFfSU5UX1BDTUNJQQorI2VuZGlmCisKKyNlbmRpZiAvKiBpZm5kZWYgX19NQUNIX01YMzFfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzNS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214MzUuaAppbmRleCBhZjg3MWJjLi41MjZhNTU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzNS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDM1LmgKQEAgLTEsMyArMSw1IEBACisjaWZuZGVmIF9fTUFDSF9NWDM1X0hfXworI2RlZmluZSBfX01BQ0hfTVgzNV9IX18KIC8qCiAgKiBJUkFNCiAgKi8KQEAgLTEwNCw2ICsxMDYsMTMgQEAKICNkZWZpbmUgTVgzNV9ORkNfQkFTRV9BRERSCQkweGJiMDAwMDAwCiAjZGVmaW5lIE1YMzVfUENNQ0lBX01FTV9CQVNFX0FERFIJMHhiYzAwMDAwMAogCisjZGVmaW5lIE1YMzVfSU9fQUREUkVTUyh4KSAoCQkJCQkJXAorCUlNWF9JT19BRERSRVNTKHgsIE1YMzVfQUlQUzEpID86CQkJCVwKKwlJTVhfSU9fQUREUkVTUyh4LCBNWDM1X0FJUFMyKSA/OgkJCQlcCisJSU1YX0lPX0FERFJFU1MoeCwgTVgzNV9BVklDKSA/OgkJCQkJXAorCUlNWF9JT19BRERSRVNTKHgsIE1YMzVfWF9NRU1DKSA/OgkJCQlcCisJSU1YX0lPX0FERFJFU1MoeCwgTVgzNV9TUEJBMCkpCisKIC8qCiAgKiBJbnRlcnJ1cHQgbnVtYmVycwogICovCkBAIC0xODAsNiArMTg5LDcgQEAKICNkZWZpbmUgTVgzNV9TWVNURU1fUkVWX01JTgkJTVgzNV9DSElQX1JFVl8xXzAKICNkZWZpbmUgTVgzNV9TWVNURU1fUkVWX05VTQkJMwogCisjaWZkZWYgSU1YX05FRURTX0RFUFJFQ0FURURfU1lNQk9MUwogLyogdGhlc2Ugc2hvdWxkIGdvIGF3YXkgKi8KICNkZWZpbmUgTVhDX0ZFQ19CQVNFX0FERFIgTVgzNV9GRUNfQkFTRV9BRERSCiAjZGVmaW5lIE1YQ19JTlRfT1dJUkUgTVgzNV9JTlRfT1dJUkUKQEAgLTE5NSwzICsyMDUsNiBAQAogI2RlZmluZSBNWENfSU5UX01MQiBNWDM1X0lOVF9NTEIKICNkZWZpbmUgTVhDX0lOVF9TUERJRiBNWDM1X0lOVF9TUERJRgogI2RlZmluZSBNWENfSU5UX0ZFQyBNWDM1X0lOVF9GRUMKKyNlbmRpZgorCisjZW5kaWYgLyogaWZuZGVmIF9fTUFDSF9NWDM1X0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M3guaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDN4LmgKaW5kZXggYmU2OTI3Mi4uN2EzNTZkZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDN4LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214M3guaApAQCAtOCw4ICs4LDggQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICovCiAKLSNpZm5kZWYgX19BU01fQVJDSF9NWENfTVgzMV9IX18KLSNkZWZpbmUgX19BU01fQVJDSF9NWENfTVgzMV9IX18KKyNpZm5kZWYgX19NQUNIX01YM3hfSF9fCisjZGVmaW5lIF9fTUFDSF9NWDN4X0hfXwogCiAvKgogICogTVgzMSBtZW1vcnkgbWFwOgpAQCAtMjY5LDYgKzI2OSw3IEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIElNWF9ORUVEU19ERVBSRUNBVEVEX1NZTUJPTFMKIC8qIHRoZXNlIHNob3VsZCBnbyBhd2F5ICovCiAjZGVmaW5lIEwyQ0NfQkFTRV9BRERSIE1YM3hfTDJDQ19CQVNFX0FERFIKICNkZWZpbmUgTDJDQ19TSVpFIE1YM3hfTDJDQ19TSVpFCkBAIC00MDEsNSArNDAyLDYgQEAKICNkZWZpbmUgQ0hJUF9SRVZfM18yIE1YM3hfQ0hJUF9SRVZfM18yCiAjZGVmaW5lIFNZU1RFTV9SRVZfTUlOIE1YM3hfU1lTVEVNX1JFVl9NSU4KICNkZWZpbmUgU1lTVEVNX1JFVl9OVU0gTVgzeF9TWVNURU1fUkVWX05VTQorI2VuZGlmCiAKLSNlbmRpZiAvKiAgX19BU01fQVJDSF9NWENfTVgzMV9IX18gKi8KKyNlbmRpZiAvKiBpZm5kZWYgX19NQUNIX01YM3hfSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXg1MS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214NTEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzE1MzJiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214NTEuaApAQCAtMCwwICsxLDQ1NCBAQAorI2lmbmRlZiBfX0FTTV9BUkNIX01YQ19NWDUxX0hfXworI2RlZmluZSBfX0FTTV9BUkNIX01YQ19NWDUxX0hfXworCisvKgorICogTVg1MSBtZW1vcnkgbWFwOgorICoKKyAqCisgKiBWaXJ0CQlQaHlzCQlTaXplCVdoYXQKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRkEzRTAwMDAJMUZGRTAwMDAJMTI4SwlJUkFNIChTQ0N2MiBSQU0pCisgKiAgICAgICAgIAkzMDAwMDAwMAkyNTZNCUdQVQorICogICAgICAgICAJNDAwMDAwMDAJNTEyTQlJUFUKKyAqIEZBMjAwMDAwCTYwMDAwMDAwCTFNCURFQlVHCisgKiBGQjEwMDAwMAk3MDAwMDAwMAkxTQlTUEJBIDAKKyAqIEZCMDAwMDAwCTczRjAwMDAwCTFNCUFJUFMgMQorICogRkIyMDAwMDAJODNGMDAwMDAJMU0JQUlQUyAyCisgKiBGQTEwMDAwMAk4RkZGQzAwMAkxNksJVFpJQyAoaW50ZXJydXB0IGNvbnRyb2xsZXIpCisgKiAgICAgICAgIAk5MDAwMDAwMAkyNTZNCUNTRDAgU0RSQU0vRERSCisgKiAgICAgICAgIAlBMDAwMDAwMAkyNTZNCUNTRDEgU0RSQU0vRERSCisgKiAgICAgICAgIAlCMDAwMDAwMAkxMjhNCUNTMCBGbGFzaAorICogICAgICAgICAJQjgwMDAwMDAJMTI4TQlDUzEgRmxhc2gKKyAqICAgICAgICAgCUMwMDAwMDAwCTEyOE0JQ1MyIEZsYXNoCisgKiAgICAgICAgIAlDODAwMDAwMAk2NE0JQ1MzIEZsYXNoCisgKiAgICAgICAgIAlDQzAwMDAwMAkzMk0JQ1M0IFNSQU0KKyAqICAgICAgICAgCUNFMDAwMDAwCTMyTQlDUzUgU1JBTQorICogRjkwMDAwMDAJQ0ZGRjAwMDAJNjRLCU5GQyAoTkFORCBGbGFzaCBBWEkpCisgKgorICovCisKKy8qCisgKiBJUkFNCisgKi8KKyNkZWZpbmUgTVg1MV9JUkFNX0JBU0VfQUREUgkJMHgxRkZFMDAwMAkvKiBpbnRlcm5hbCByYW0gKi8KKyNkZWZpbmUgTVg1MV9JUkFNX0JBU0VfQUREUl9WSVJUCTB4RkEzRTAwMDAKKyNkZWZpbmUgTVg1MV9JUkFNX1BBUlRJVElPTlMJCTE2CisjZGVmaW5lIE1YNTFfSVJBTV9QQVJUSVRJT05TX1RPMQkxMgorI2RlZmluZSBNWDUxX0lSQU1fU0laRQkJKE1YNTFfSVJBTV9QQVJUSVRJT05TICogU1pfOEspCS8qIDEyOEtCICovCisKKy8qCisgKiBORkMKKyAqLworI2RlZmluZSBNWDUxX05GQ19BWElfQkFTRV9BRERSCQkweENGRkYwMDAwCS8qIE5BTkQgZmxhc2ggQVhJICovCisjZGVmaW5lIE1YNTFfTkZDX0FYSV9CQVNFX0FERFJfVklSVAkweEY5MDAwMDAwCisjZGVmaW5lIE1YNTFfTkZDX0FYSV9TSVpFCQlTWl82NEsKKworLyoKKyAqIEdyYXBoaWNzIE1lbW9yeSBvZiBHUFUKKyAqLworI2RlZmluZSBNWDUxX0dQVV9CQVNFX0FERFIJCTB4MjAwMDAwMDAKKyNkZWZpbmUgTVg1MV9HUFUyRF9CQVNFX0FERFIJCTB4RDAwMDAwMDAKKworI2RlZmluZSBNWDUxX1RaSUNfQkFTRV9BRERSCQkweDhGRkZDMDAwCisjZGVmaW5lIE1YNTFfVFpJQ19CQVNFX0FERFJfVklSVAkweEZBMTAwMDAwCisjZGVmaW5lIE1YNTFfVFpJQ19TSVpFCQkJU1pfMTZLCisKKyNkZWZpbmUgTVg1MV9ERUJVR19CQVNFX0FERFIJCTB4NjAwMDAwMDAKKyNkZWZpbmUgTVg1MV9ERUJVR19CQVNFX0FERFJfVklSVAkweEZBMjAwMDAwCisjZGVmaW5lIE1YNTFfREVCVUdfU0laRQkJCVNaXzFNCisjZGVmaW5lIE1YNTFfRVRCX0JBU0VfQUREUgkJKE1YNTFfREVCVUdfQkFTRV9BRERSICsgMHgwMDAwMTAwMCkKKyNkZWZpbmUgTVg1MV9FVE1fQkFTRV9BRERSCQkoTVg1MV9ERUJVR19CQVNFX0FERFIgKyAweDAwMDAyMDAwKQorI2RlZmluZSBNWDUxX1RQSVVfQkFTRV9BRERSCQkoTVg1MV9ERUJVR19CQVNFX0FERFIgKyAweDAwMDAzMDAwKQorI2RlZmluZSBNWDUxX0NUSTBfQkFTRV9BRERSCQkoTVg1MV9ERUJVR19CQVNFX0FERFIgKyAweDAwMDA0MDAwKQorI2RlZmluZSBNWDUxX0NUSTFfQkFTRV9BRERSCQkoTVg1MV9ERUJVR19CQVNFX0FERFIgKyAweDAwMDA1MDAwKQorI2RlZmluZSBNWDUxX0NUSTJfQkFTRV9BRERSCQkoTVg1MV9ERUJVR19CQVNFX0FERFIgKyAweDAwMDA2MDAwKQorI2RlZmluZSBNWDUxX0NUSTNfQkFTRV9BRERSCQkoTVg1MV9ERUJVR19CQVNFX0FERFIgKyAweDAwMDA3MDAwKQorI2RlZmluZSBNWDUxX0NPUlRFWF9EQkdfQkFTRV9BRERSCShNWDUxX0RFQlVHX0JBU0VfQUREUiArIDB4MDAwMDgwMDApCisKKy8qCisgKiBTUEJBIGdsb2JhbCBtb2R1bGUgZW5hYmxlZCAjMAorICovCisjZGVmaW5lIE1YNTFfU1BCQTBfQkFTRV9BRERSIAkJMHg3MDAwMDAwMAorI2RlZmluZSBNWDUxX1NQQkEwX0JBU0VfQUREUl9WSVJUCTB4RkIxMDAwMDAKKyNkZWZpbmUgTVg1MV9TUEJBMF9TSVpFCQkJU1pfMU0KKworI2RlZmluZSBNWDUxX01NQ19TREhDMV9CQVNFX0FERFIJKE1YNTFfU1BCQTBfQkFTRV9BRERSICsgMHgwMDAwNDAwMCkKKyNkZWZpbmUgTVg1MV9NTUNfU0RIQzJfQkFTRV9BRERSCShNWDUxX1NQQkEwX0JBU0VfQUREUiArIDB4MDAwMDgwMDApCisjZGVmaW5lIE1YNTFfVUFSVDNfQkFTRV9BRERSIAkJKE1YNTFfU1BCQTBfQkFTRV9BRERSICsgMHgwMDAwQzAwMCkKKyNkZWZpbmUgTVg1MV9DU1BJMV9CQVNFX0FERFIgCQkoTVg1MV9TUEJBMF9CQVNFX0FERFIgKyAweDAwMDEwMDAwKQorI2RlZmluZSBNWDUxX1NTSTJfQkFTRV9BRERSCQkoTVg1MV9TUEJBMF9CQVNFX0FERFIgKyAweDAwMDE0MDAwKQorI2RlZmluZSBNWDUxX01NQ19TREhDM19CQVNFX0FERFIJKE1YNTFfU1BCQTBfQkFTRV9BRERSICsgMHgwMDAyMDAwMCkKKyNkZWZpbmUgTVg1MV9NTUNfU0RIQzRfQkFTRV9BRERSCShNWDUxX1NQQkEwX0JBU0VfQUREUiArIDB4MDAwMjQwMDApCisjZGVmaW5lIE1YNTFfU1BESUZfQkFTRV9BRERSCQkoTVg1MV9TUEJBMF9CQVNFX0FERFIgKyAweDAwMDI4MDAwKQorI2RlZmluZSBNWDUxX0FUQV9ETUFfQkFTRV9BRERSCQkoTVg1MV9TUEJBMF9CQVNFX0FERFIgKyAweDAwMDMwMDAwKQorI2RlZmluZSBNWDUxX1NMSU1fRE1BX0JBU0VfQUREUgkJKE1YNTFfU1BCQTBfQkFTRV9BRERSICsgMHgwMDAzNDAwMCkKKyNkZWZpbmUgTVg1MV9IU0kyQ19ETUFfQkFTRV9BRERSCShNWDUxX1NQQkEwX0JBU0VfQUREUiArIDB4MDAwMzgwMDApCisjZGVmaW5lIE1YNTFfU1BCQV9DVFJMX0JBU0VfQUREUgkoTVg1MV9TUEJBMF9CQVNFX0FERFIgKyAweDAwMDNDMDAwKQorCisvKgorICogZGVmaW5lcyBmb3IgU1BCQSBtb2R1bGVzCisgKi8KKyNkZWZpbmUgTVg1MV9TUEJBX1NESEMxCTB4MDQKKyNkZWZpbmUgTVg1MV9TUEJBX1NESEMyCTB4MDgKKyNkZWZpbmUgTVg1MV9TUEJBX1VBUlQzCTB4MEMKKyNkZWZpbmUgTVg1MV9TUEJBX0NTUEkxCTB4MTAKKyNkZWZpbmUgTVg1MV9TUEJBX1NTSTIJMHgxNAorI2RlZmluZSBNWDUxX1NQQkFfU0RIQzMJMHgyMAorI2RlZmluZSBNWDUxX1NQQkFfU0RIQzQJMHgyNAorI2RlZmluZSBNWDUxX1NQQkFfU1BESUYJMHgyOAorI2RlZmluZSBNWDUxX1NQQkFfQVRBCTB4MzAKKyNkZWZpbmUgTVg1MV9TUEJBX1NMSU0JMHgzNAorI2RlZmluZSBNWDUxX1NQQkFfSFNJMkMJMHgzOAorI2RlZmluZSBNWDUxX1NQQkFfQ1RSTAkweDNDCisKKy8qCisgKiBBSVBTIDEKKyAqLworI2RlZmluZSBNWDUxX0FJUFMxX0JBU0VfQUREUiAJMHg3M0YwMDAwMAorI2RlZmluZSBNWDUxX0FJUFMxX0JBU0VfQUREUl9WSVJUCTB4RkIwMDAwMDAKKyNkZWZpbmUgTVg1MV9BSVBTMV9TSVpFCQlTWl8xTQorCisjZGVmaW5lIE1YNTFfT1RHX0JBU0VfQUREUgkoTVg1MV9BSVBTMV9CQVNFX0FERFIgKyAweDAwMDgwMDAwKQorI2RlZmluZSBNWDUxX0dQSU8xX0JBU0VfQUREUgkoTVg1MV9BSVBTMV9CQVNFX0FERFIgKyAweDAwMDg0MDAwKQorI2RlZmluZSBNWDUxX0dQSU8yX0JBU0VfQUREUgkoTVg1MV9BSVBTMV9CQVNFX0FERFIgKyAweDAwMDg4MDAwKQorI2RlZmluZSBNWDUxX0dQSU8zX0JBU0VfQUREUgkoTVg1MV9BSVBTMV9CQVNFX0FERFIgKyAweDAwMDhDMDAwKQorI2RlZmluZSBNWDUxX0dQSU80X0JBU0VfQUREUgkoTVg1MV9BSVBTMV9CQVNFX0FERFIgKyAweDAwMDkwMDAwKQorI2RlZmluZSBNWDUxX0tQUF9CQVNFX0FERFIJKE1YNTFfQUlQUzFfQkFTRV9BRERSICsgMHgwMDA5NDAwMCkKKyNkZWZpbmUgTVg1MV9XRE9HX0JBU0VfQUREUgkoTVg1MV9BSVBTMV9CQVNFX0FERFIgKyAweDAwMDk4MDAwKQorI2RlZmluZSBNWDUxX1dET0cyX0JBU0VfQUREUgkoTVg1MV9BSVBTMV9CQVNFX0FERFIgKyAweDAwMDlDMDAwKQorI2RlZmluZSBNWDUxX0dQVDFfQkFTRV9BRERSCShNWDUxX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwQTAwMDApCisjZGVmaW5lIE1YNTFfU1JUQ19CQVNFX0FERFIJKE1YNTFfQUlQUzFfQkFTRV9BRERSICsgMHgwMDBBNDAwMCkKKyNkZWZpbmUgTVg1MV9JT01VWENfQkFTRV9BRERSCShNWDUxX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwQTgwMDApCisjZGVmaW5lIE1YNTFfRVBJVDFfQkFTRV9BRERSCShNWDUxX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwQUMwMDApCisjZGVmaW5lIE1YNTFfRVBJVDJfQkFTRV9BRERSCShNWDUxX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwQjAwMDApCisjZGVmaW5lIE1YNTFfUFdNMV9CQVNFX0FERFIJKE1YNTFfQUlQUzFfQkFTRV9BRERSICsgMHgwMDBCNDAwMCkKKyNkZWZpbmUgTVg1MV9QV00yX0JBU0VfQUREUgkoTVg1MV9BSVBTMV9CQVNFX0FERFIgKyAweDAwMEI4MDAwKQorI2RlZmluZSBNWDUxX1VBUlQxX0JBU0VfQUREUgkoTVg1MV9BSVBTMV9CQVNFX0FERFIgKyAweDAwMEJDMDAwKQorI2RlZmluZSBNWDUxX1VBUlQyX0JBU0VfQUREUgkoTVg1MV9BSVBTMV9CQVNFX0FERFIgKyAweDAwMEMwMDAwKQorI2RlZmluZSBNWDUxX1NSQ19CQVNFX0FERFIJKE1YNTFfQUlQUzFfQkFTRV9BRERSICsgMHgwMDBEMDAwMCkKKyNkZWZpbmUgTVg1MV9DQ01fQkFTRV9BRERSCShNWDUxX0FJUFMxX0JBU0VfQUREUiArIDB4MDAwRDQwMDApCisjZGVmaW5lIE1YNTFfR1BDX0JBU0VfQUREUgkoTVg1MV9BSVBTMV9CQVNFX0FERFIgKyAweDAwMEQ4MDAwKQorCisvKgorICogRGVmaW5lcyBmb3IgbW9kdWxlcyB1c2luZyBzdGF0aWMgYW5kIGR5bmFtaWMgRE1BIGNoYW5uZWxzCisgKi8KKyNkZWZpbmUgTVg1MV9NWENfRE1BX0NIQU5ORUxfSVJBTQkzMAorI2RlZmluZSBNWDUxX01YQ19ETUFfQ0hBTk5FTF9TUERJRl9UWAlNWENfRE1BX0RZTkFNSUNfQ0hBTk5FTAorI2RlZmluZSBNWDUxX01YQ19ETUFfQ0hBTk5FTF9VQVJUMV9SWAlNWENfRE1BX0RZTkFNSUNfQ0hBTk5FTAorI2RlZmluZSBNWDUxX01YQ19ETUFfQ0hBTk5FTF9VQVJUMV9UWAlNWENfRE1BX0RZTkFNSUNfQ0hBTk5FTAorI2RlZmluZSBNWDUxX01YQ19ETUFfQ0hBTk5FTF9VQVJUMl9SWAlNWENfRE1BX0RZTkFNSUNfQ0hBTk5FTAorI2RlZmluZSBNWDUxX01YQ19ETUFfQ0hBTk5FTF9VQVJUMl9UWAlNWENfRE1BX0RZTkFNSUNfQ0hBTk5FTAorI2RlZmluZSBNWDUxX01YQ19ETUFfQ0hBTk5FTF9VQVJUM19SWAlNWENfRE1BX0RZTkFNSUNfQ0hBTk5FTAorI2RlZmluZSBNWDUxX01YQ19ETUFfQ0hBTk5FTF9VQVJUM19UWAlNWENfRE1BX0RZTkFNSUNfQ0hBTk5FTAorI2RlZmluZSBNWDUxX01YQ19ETUFfQ0hBTk5FTF9NTUMxCU1YQ19ETUFfRFlOQU1JQ19DSEFOTkVMCisjZGVmaW5lIE1YNTFfTVhDX0RNQV9DSEFOTkVMX01NQzIJTVhDX0RNQV9EWU5BTUlDX0NIQU5ORUwKKyNkZWZpbmUgTVg1MV9NWENfRE1BX0NIQU5ORUxfU1NJMV9SWAlNWENfRE1BX0RZTkFNSUNfQ0hBTk5FTAorI2RlZmluZSBNWDUxX01YQ19ETUFfQ0hBTk5FTF9TU0kxX1RYCU1YQ19ETUFfRFlOQU1JQ19DSEFOTkVMCisjZGVmaW5lIE1YNTFfTVhDX0RNQV9DSEFOTkVMX1NTSTJfUlgJTVhDX0RNQV9EWU5BTUlDX0NIQU5ORUwKKyNpZmRlZiBDT05GSUdfU0RNQV9JUkFNCisjZGVmaW5lIE1YNTFfTVhDX0RNQV9DSEFOTkVMX1NTSTJfVFgJKE1YNTFfTVhDX0RNQV9DSEFOTkVMX0lSQU0gKyAxKQorI2Vsc2UJCQkJLypDT05GSUdfU0RNQV9JUkFNICovCisjZGVmaW5lIE1YNTFfTVhDX0RNQV9DSEFOTkVMX1NTSTJfVFgJTVhDX0RNQV9EWU5BTUlDX0NIQU5ORUwKKyNlbmRpZgkJCQkvKkNPTkZJR19TRE1BX0lSQU0gKi8KKyNkZWZpbmUgTVg1MV9NWENfRE1BX0NIQU5ORUxfQ1NQSTFfUlgJTVhDX0RNQV9EWU5BTUlDX0NIQU5ORUwKKyNkZWZpbmUgTVg1MV9NWENfRE1BX0NIQU5ORUxfQ1NQSTFfVFgJTVhDX0RNQV9EWU5BTUlDX0NIQU5ORUwKKyNkZWZpbmUgTVg1MV9NWENfRE1BX0NIQU5ORUxfQ1NQSTJfUlgJTVhDX0RNQV9EWU5BTUlDX0NIQU5ORUwKKyNkZWZpbmUgTVg1MV9NWENfRE1BX0NIQU5ORUxfQ1NQSTJfVFgJTVhDX0RNQV9EWU5BTUlDX0NIQU5ORUwKKyNkZWZpbmUgTVg1MV9NWENfRE1BX0NIQU5ORUxfQ1NQSTNfUlgJTVhDX0RNQV9EWU5BTUlDX0NIQU5ORUwKKyNkZWZpbmUgTVg1MV9NWENfRE1BX0NIQU5ORUxfQ1NQSTNfVFgJTVhDX0RNQV9EWU5BTUlDX0NIQU5ORUwKKyNkZWZpbmUgTVg1MV9NWENfRE1BX0NIQU5ORUxfQVRBX1JYCU1YQ19ETUFfRFlOQU1JQ19DSEFOTkVMCisjZGVmaW5lIE1YNTFfTVhDX0RNQV9DSEFOTkVMX0FUQV9UWAlNWENfRE1BX0RZTkFNSUNfQ0hBTk5FTAorI2RlZmluZSBNWDUxX01YQ19ETUFfQ0hBTk5FTF9NRU1PUlkJTVhDX0RNQV9EWU5BTUlDX0NIQU5ORUwKKworLyoKKyAqIEFJUFMgMgorICovCisjZGVmaW5lIE1YNTFfQUlQUzJfQkFTRV9BRERSCQkweDgzRjAwMDAwCisjZGVmaW5lIE1YNTFfQUlQUzJfQkFTRV9BRERSX1ZJUlQJMHhGQjIwMDAwMAorI2RlZmluZSBNWDUxX0FJUFMyX1NJWkUJCQlTWl8xTQorCisjZGVmaW5lIE1YNTFfUExMMV9CQVNFX0FERFIJKE1YNTFfQUlQUzJfQkFTRV9BRERSICsgMHgwMDA4MDAwMCkKKyNkZWZpbmUgTVg1MV9QTEwyX0JBU0VfQUREUgkoTVg1MV9BSVBTMl9CQVNFX0FERFIgKyAweDAwMDg0MDAwKQorI2RlZmluZSBNWDUxX1BMTDNfQkFTRV9BRERSCShNWDUxX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwODgwMDApCisjZGVmaW5lIE1YNTFfQUhCTUFYX0JBU0VfQUREUgkoTVg1MV9BSVBTMl9CQVNFX0FERFIgKyAweDAwMDk0MDAwKQorI2RlZmluZSBNWDUxX0lJTV9CQVNFX0FERFIJKE1YNTFfQUlQUzJfQkFTRV9BRERSICsgMHgwMDA5ODAwMCkKKyNkZWZpbmUgTVg1MV9DU1VfQkFTRV9BRERSCShNWDUxX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwOUMwMDApCisjZGVmaW5lIE1YNTFfQVJNX0JBU0VfQUREUgkoTVg1MV9BSVBTMl9CQVNFX0FERFIgKyAweDAwMEEwMDAwKQorI2RlZmluZSBNWDUxX09XSVJFX0JBU0VfQUREUiAJKE1YNTFfQUlQUzJfQkFTRV9BRERSICsgMHgwMDBBNDAwMCkKKyNkZWZpbmUgTVg1MV9GSVJJX0JBU0VfQUREUgkoTVg1MV9BSVBTMl9CQVNFX0FERFIgKyAweDAwMEE4MDAwKQorI2RlZmluZSBNWDUxX0NTUEkyX0JBU0VfQUREUgkoTVg1MV9BSVBTMl9CQVNFX0FERFIgKyAweDAwMEFDMDAwKQorI2RlZmluZSBNWDUxX1NETUFfQkFTRV9BRERSCShNWDUxX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwQjAwMDApCisjZGVmaW5lIE1YNTFfU0NDX0JBU0VfQUREUgkoTVg1MV9BSVBTMl9CQVNFX0FERFIgKyAweDAwMEI0MDAwKQorI2RlZmluZSBNWDUxX1JPTUNQX0JBU0VfQUREUgkoTVg1MV9BSVBTMl9CQVNFX0FERFIgKyAweDAwMEI4MDAwKQorI2RlZmluZSBNWDUxX1JUSUNfQkFTRV9BRERSCShNWDUxX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwQkMwMDApCisjZGVmaW5lIE1YNTFfQ1NQSTNfQkFTRV9BRERSCShNWDUxX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwQzAwMDApCisjZGVmaW5lIE1YNTFfSTJDMl9CQVNFX0FERFIJKE1YNTFfQUlQUzJfQkFTRV9BRERSICsgMHgwMDBDNDAwMCkKKyNkZWZpbmUgTVg1MV9JMkMxX0JBU0VfQUREUgkoTVg1MV9BSVBTMl9CQVNFX0FERFIgKyAweDAwMEM4MDAwKQorI2RlZmluZSBNWDUxX1NTSTFfQkFTRV9BRERSCShNWDUxX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwQ0MwMDApCisjZGVmaW5lIE1YNTFfQVVETVVYX0JBU0VfQUREUgkoTVg1MV9BSVBTMl9CQVNFX0FERFIgKyAweDAwMEQwMDAwKQorI2RlZmluZSBNWDUxX000SUZfQkFTRV9BRERSCShNWDUxX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwRDgwMDApCisjZGVmaW5lIE1YNTFfRVNEQ1RMX0JBU0VfQUREUgkoTVg1MV9BSVBTMl9CQVNFX0FERFIgKyAweDAwMEQ5MDAwKQorI2RlZmluZSBNWDUxX1dFSU1fQkFTRV9BRERSCShNWDUxX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwREEwMDApCisjZGVmaW5lIE1YNTFfTkZDX0JBU0VfQUREUgkoTVg1MV9BSVBTMl9CQVNFX0FERFIgKyAweDAwMERCMDAwKQorI2RlZmluZSBNWDUxX0VNSV9CQVNFX0FERFIJKE1YNTFfQUlQUzJfQkFTRV9BRERSICsgMHgwMDBEQkYwMCkKKyNkZWZpbmUgTVg1MV9NSVBJX0hTQ19CQVNFX0FERFIJKE1YNTFfQUlQUzJfQkFTRV9BRERSICsgMHgwMDBEQzAwMCkKKyNkZWZpbmUgTVg1MV9BVEFfQkFTRV9BRERSCShNWDUxX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwRTAwMDApCisjZGVmaW5lIE1YNTFfU0lNX0JBU0VfQUREUgkoTVg1MV9BSVBTMl9CQVNFX0FERFIgKyAweDAwMEU0MDAwKQorI2RlZmluZSBNWDUxX1NTSTNCQVNFX0FERFIJKE1YNTFfQUlQUzJfQkFTRV9BRERSICsgMHgwMDBFODAwMCkKKyNkZWZpbmUgTVg1MV9NWENfRkVDX0JBU0VfQUREUgkoTVg1MV9BSVBTMl9CQVNFX0FERFIgKyAweDAwMEVDMDAwKQorI2RlZmluZSBNWDUxX1RWRV9CQVNFX0FERFIJKE1YNTFfQUlQUzJfQkFTRV9BRERSICsgMHgwMDBGMDAwMCkKKyNkZWZpbmUgTVg1MV9WUFVfQkFTRV9BRERSCShNWDUxX0FJUFMyX0JBU0VfQUREUiArIDB4MDAwRjQwMDApCisjZGVmaW5lIE1YNTFfU0FIQVJBX0JBU0VfQUREUgkoTVg1MV9BSVBTMl9CQVNFX0FERFIgKyAweDAwMEY4MDAwKQorCisvKgorICogTWVtb3J5IHJlZ2lvbnMgYW5kIENTCisgKi8KKyNkZWZpbmUgTVg1MV9HUFVfQ1RSTF9CQVNFX0FERFIJCTB4MzAwMDAwMDAKKyNkZWZpbmUgTVg1MV9JUFVfQ1RSTF9CQVNFX0FERFIJCTB4NDAwMDAwMDAKKyNkZWZpbmUgTVg1MV9DU0QwX0JBU0VfQUREUgkJMHg5MDAwMDAwMAorI2RlZmluZSBNWDUxX0NTRDFfQkFTRV9BRERSCQkweEEwMDAwMDAwCisjZGVmaW5lIE1YNTFfQ1MwX0JBU0VfQUREUgkJMHhCMDAwMDAwMAorI2RlZmluZSBNWDUxX0NTMV9CQVNFX0FERFIJCTB4QjgwMDAwMDAKKyNkZWZpbmUgTVg1MV9DUzJfQkFTRV9BRERSCQkweEMwMDAwMDAwCisjZGVmaW5lIE1YNTFfQ1MzX0JBU0VfQUREUgkJMHhDODAwMDAwMAorI2RlZmluZSBNWDUxX0NTNF9CQVNFX0FERFIJCTB4Q0MwMDAwMDAKKyNkZWZpbmUgTVg1MV9DUzVfQkFTRV9BRERSCQkweENFMDAwMDAwCisKKy8qIERvZXMgZ2l2ZW4gYWRkcmVzcyBiZWxvbmdzIHRvIHRoZSBzcGVjaWZpZWQgbWVtb3J5IHJlZ2lvbj8gKi8KKyNkZWZpbmUgQUREUkVTU19JTl9SRUdJT04oYWRkciwgc3RhcnQsIHNpemUpCQkJXAorCSgoKGFkZHIpID49IChzdGFydCkpICYmICgoYWRkcikgPCAoc3RhcnQpKyhzaXplKSkpCisKKy8qIERvZXMgZ2l2ZW4gYWRkcmVzcyBiZWxvbmdzIHRvIHRoZSBzcGVjaWZpZWQgbmFtZWQgYG1vZHVsZSc/ICovCisjZGVmaW5lIE1YNTFfSVNfTU9EVUxFKGFkZHIsIG1vZHVsZSkJCQkgICAgICAgXAorCUFERFJFU1NfSU5fUkVHSU9OKGFkZHIsIE1YNTFfICMjIG1vZHVsZSAjIyBfQkFTRV9BRERSLCBcCisJCQkJTVg1MV8gIyMgbW9kdWxlICMjIF9TSVpFKQorLyoKKyAqIFRoaXMgbWFjcm8gZGVmaW5lcyB0aGUgcGh5c2ljYWwgdG8gdmlydHVhbCBhZGRyZXNzIG1hcHBpbmcgZm9yIGFsbCB0aGUKKyAqIHBlcmlwaGVyYWwgbW9kdWxlcy4gSXQgaXMgdXNlZCBieSBwYXNzaW5nIGluIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGFzIHgKKyAqIGFuZCByZXR1cm5pbmcgdGhlIHZpcnR1YWwgYWRkcmVzcy4gSWYgdGhlIHBoeXNpY2FsIGFkZHJlc3MgaXMgbm90IG1hcHBlZCwKKyAqIGl0IHJldHVybnMgMHhERUFEQkVFRgorICovCisKKyNkZWZpbmUgTVg1MV9JT19BRERSRVNTKHgpCQkJCQlcCisJKHZvaWQgX19pb21lbSAqKQkJCQkJXAorCShNWDUxX0lTX01PRFVMRSh4LCBJUkFNKSA/IE1YNTFfSVJBTV9JT19BRERSRVNTKHgpIDoJXAorCU1YNTFfSVNfTU9EVUxFKHgsIFRaSUMpID8gTVg1MV9UWklDX0lPX0FERFJFU1MoeCkgOglcCisJTVg1MV9JU19NT0RVTEUoeCwgREVCVUcpID8gTVg1MV9ERUJVR19JT19BRERSRVNTKHgpIDoJXAorCU1YNTFfSVNfTU9EVUxFKHgsIFNQQkEwKSA/IE1YNTFfU1BCQTBfSU9fQUREUkVTUyh4KSA6CVwKKwlNWDUxX0lTX01PRFVMRSh4LCBBSVBTMSkgPyBNWDUxX0FJUFMxX0lPX0FERFJFU1MoeCkgOglcCisJTVg1MV9JU19NT0RVTEUoeCwgQUlQUzIpID8gTVg1MV9BSVBTMl9JT19BRERSRVNTKHgpIDoJXAorCU1YNTFfSVNfTU9EVUxFKHgsIE5GQ19BWEkpID8gTVg1MV9ORkNfQVhJX0lPX0FERFJFU1MoeCkgOiBcCisJMHhERUFEQkVFRikKKworLyoKKyAqIGRlZmluZSB0aGUgYWRkcmVzcyBtYXBwaW5nIG1hY3JvczogaW4gcGh5c2ljYWwgYWRkcmVzcyBvcmRlcgorICovCisjZGVmaW5lIE1YNTFfSVJBTV9JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBNWDUxX0lSQU1fQkFTRV9BRERSKSArIE1YNTFfSVJBTV9CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBNWDUxX1RaSUNfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gTVg1MV9UWklDX0JBU0VfQUREUikgKyBNWDUxX1RaSUNfQkFTRV9BRERSX1ZJUlQpCisKKyNkZWZpbmUgTVg1MV9ERUJVR19JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBNWDUxX0RFQlVHX0JBU0VfQUREUikgKyBNWDUxX0RFQlVHX0JBU0VfQUREUl9WSVJUKQorCisjZGVmaW5lIE1YNTFfU1BCQTBfSU9fQUREUkVTUyh4KSAgXAorCSgoKHgpIC0gTVg1MV9TUEJBMF9CQVNFX0FERFIpICsgTVg1MV9TUEJBMF9CQVNFX0FERFJfVklSVCkKKworI2RlZmluZSBNWDUxX0FJUFMxX0lPX0FERFJFU1MoeCkgIFwKKwkoKCh4KSAtIE1YNTFfQUlQUzFfQkFTRV9BRERSKSArIE1YNTFfQUlQUzFfQkFTRV9BRERSX1ZJUlQpCisKKyNkZWZpbmUgTVg1MV9BSVBTMl9JT19BRERSRVNTKHgpICBcCisJKCgoeCkgLSBNWDUxX0FJUFMyX0JBU0VfQUREUikgKyBNWDUxX0FJUFMyX0JBU0VfQUREUl9WSVJUKQorCisjZGVmaW5lIE1YNTFfTkZDX0FYSV9JT19BRERSRVNTKHgpIFwKKwkoKCh4KSAtIE1YNTFfTkZDX0FYSV9CQVNFX0FERFIpICsgTVg1MV9ORkNfQVhJX0JBU0VfQUREUl9WSVJUKQorCisjZGVmaW5lIE1YNTFfSVNfTUVNX0RFVklDRV9OT05TSEFSRUQoeCkJCTAKKworLyoKKyAqIERNQSByZXF1ZXN0IGFzc2lnbm1lbnRzCisgKi8KKyNkZWZpbmUgTVg1MV9ETUFfUkVRX1NTSTNfVFgxCTQ3CisjZGVmaW5lIE1YNTFfRE1BX1JFUV9TU0kzX1JYMQk0NgorI2RlZmluZSBNWDUxX0RNQV9SRVFfU1BESUYJNDUKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX1VBUlQzX1RYCTQ0CisjZGVmaW5lIE1YNTFfRE1BX1JFUV9VQVJUM19SWAk0MworI2RlZmluZSBNWDUxX0RNQV9SRVFfU0xJTV9CX1RYCTQyCisjZGVmaW5lIE1YNTFfRE1BX1JFUV9TREhDNAk0MQorI2RlZmluZSBNWDUxX0RNQV9SRVFfU0RIQzMJNDAKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX0NTUElfVFgJMzkKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX0NTUElfUlgJMzgKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX1NTSTNfVFgyCTM3CisjZGVmaW5lIE1YNTFfRE1BX1JFUV9JUFUJMzYKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX1NTSTNfUlgyCTM1CisjZGVmaW5lIE1YNTFfRE1BX1JFUV9FUElUMgkzNAorI2RlZmluZSBNWDUxX0RNQV9SRVFfQ1RJMl8xCTMzCisjZGVmaW5lIE1YNTFfRE1BX1JFUV9FTUlfV1IJMzIKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX0NUSTJfMAkzMQorI2RlZmluZSBNWDUxX0RNQV9SRVFfRU1JX1JECTMwCisjZGVmaW5lIE1YNTFfRE1BX1JFUV9TU0kxX1RYMQkyOQorI2RlZmluZSBNWDUxX0RNQV9SRVFfU1NJMV9SWDEJMjgKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX1NTSTFfVFgyCTI3CisjZGVmaW5lIE1YNTFfRE1BX1JFUV9TU0kxX1JYMgkyNgorI2RlZmluZSBNWDUxX0RNQV9SRVFfU1NJMl9UWDEJMjUKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX1NTSTJfUlgxCTI0CisjZGVmaW5lIE1YNTFfRE1BX1JFUV9TU0kyX1RYMgkyMworI2RlZmluZSBNWDUxX0RNQV9SRVFfU1NJMl9SWDIJMjIKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX1NESEMyCTIxCisjZGVmaW5lIE1YNTFfRE1BX1JFUV9TREhDMQkyMAorI2RlZmluZSBNWDUxX0RNQV9SRVFfVUFSVDFfVFgJMTkKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX1VBUlQxX1JYCTE4CisjZGVmaW5lIE1YNTFfRE1BX1JFUV9VQVJUMl9UWAkxNworI2RlZmluZSBNWDUxX0RNQV9SRVFfVUFSVDJfUlgJMTYKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX0dQVQkxNQorI2RlZmluZSBNWDUxX0RNQV9SRVFfRVhUUkVRMQkxNAorI2RlZmluZSBNWDUxX0RNQV9SRVFfRklSSV9UWAkxMworI2RlZmluZSBNWDUxX0RNQV9SRVFfRklSSV9SWAkxMgorI2RlZmluZSBNWDUxX0RNQV9SRVFfSFNfSTJDX1JYCTExCisjZGVmaW5lIE1YNTFfRE1BX1JFUV9IU19JMkNfVFgJMTAKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX0NTUEkyX1RYCTkKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX0NTUEkyX1JYCTgKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX0NTUEkxX1RYCTcKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX0NTUEkxX1JYCTYKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX1NMSU1fQgk1CisjZGVmaW5lIE1YNTFfRE1BX1JFUV9BVEFfVFhfRU5ECTQKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX0FUQV9UWAkzCisjZGVmaW5lIE1YNTFfRE1BX1JFUV9BVEFfUlgJMgorI2RlZmluZSBNWDUxX0RNQV9SRVFfR1BDCTEKKyNkZWZpbmUgTVg1MV9ETUFfUkVRX1ZQVQkwCisKKy8qCisgKiBJbnRlcnJ1cHQgbnVtYmVycworICovCisjZGVmaW5lIE1YNTFfTVhDX0lOVF9CQVNFCTAKKyNkZWZpbmUgTVg1MV9NWENfSU5UX1JFU1YwCTAKKyNkZWZpbmUgTVg1MV9NWENfSU5UX01NQ19TREhDMQkxCisjZGVmaW5lIE1YNTFfTVhDX0lOVF9NTUNfU0RIQzIJMgorI2RlZmluZSBNWDUxX01YQ19JTlRfTU1DX1NESEMzCTMKKyNkZWZpbmUgTVg1MV9NWENfSU5UX01NQ19TREhDNAk0CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9SRVNWNQk1CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9TRE1BCTYKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0lPTVVYCTcKKyNkZWZpbmUgTVg1MV9NWENfSU5UX05GQwk4CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9WUFUJOQorI2RlZmluZSBNWDUxX01YQ19JTlRfSVBVX0VSUgkxMAorI2RlZmluZSBNWDUxX01YQ19JTlRfSVBVX1NZTgkxMQorI2RlZmluZSBNWDUxX01YQ19JTlRfR1BVCTEyCisjZGVmaW5lIE1YNTFfTVhDX0lOVF9SRVNWMTMJMTMKKyNkZWZpbmUgTVg1MV9NWENfSU5UX1VTQl9IMQkxNAorI2RlZmluZSBNWDUxX01YQ19JTlRfRU1JCTE1CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9VU0JfSDIJMTYKKyNkZWZpbmUgTVg1MV9NWENfSU5UX1VTQl9IMwkxNworI2RlZmluZSBNWDUxX01YQ19JTlRfVVNCX09URwkxOAorI2RlZmluZSBNWDUxX01YQ19JTlRfU0FIQVJBX0gwCTE5CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9TQUhBUkFfSDEJMjAKKyNkZWZpbmUgTVg1MV9NWENfSU5UX1NDQ19TTU4JMjEKKyNkZWZpbmUgTVg1MV9NWENfSU5UX1NDQ19TVFoJMjIKKyNkZWZpbmUgTVg1MV9NWENfSU5UX1NDQ19TQ00JMjMKKyNkZWZpbmUgTVg1MV9NWENfSU5UX1NSVENfTlRaCTI0CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9TUlRDX1RaCTI1CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9SVElDCTI2CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9DU1UJMjcKKyNkZWZpbmUgTVg1MV9NWENfSU5UX1NMSU1fQgkyOAorI2RlZmluZSBNWDUxX01YQ19JTlRfU1NJMQkyOQorI2RlZmluZSBNWDUxX01YQ19JTlRfU1NJMgkzMAorI2RlZmluZSBNWDUxX01YQ19JTlRfVUFSVDEJMzEKKyNkZWZpbmUgTVg1MV9NWENfSU5UX1VBUlQyCTMyCisjZGVmaW5lIE1YNTFfTVhDX0lOVF9VQVJUMwkzMworI2RlZmluZSBNWDUxX01YQ19JTlRfUkVTVjM0CTM0CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9SRVNWMzUJMzUKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0NTUEkxCTM2CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9DU1BJMgkzNworI2RlZmluZSBNWDUxX01YQ19JTlRfQ1NQSQkzOAorI2RlZmluZSBNWDUxX01YQ19JTlRfR1BUCTM5CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9FUElUMQk0MAorI2RlZmluZSBNWDUxX01YQ19JTlRfRVBJVDIJNDEKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0dQSU8xX0lOVDcJNDIKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0dQSU8xX0lOVDYJNDMKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0dQSU8xX0lOVDUJNDQKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0dQSU8xX0lOVDQJNDUKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0dQSU8xX0lOVDMJNDYKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0dQSU8xX0lOVDIJNDcKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0dQSU8xX0lOVDEJNDgKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0dQSU8xX0lOVDAJNDkKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0dQSU8xX0xPVwk1MAorI2RlZmluZSBNWDUxX01YQ19JTlRfR1BJTzFfSElHSAk1MQorI2RlZmluZSBNWDUxX01YQ19JTlRfR1BJTzJfTE9XCTUyCisjZGVmaW5lIE1YNTFfTVhDX0lOVF9HUElPMl9ISUdICTUzCisjZGVmaW5lIE1YNTFfTVhDX0lOVF9HUElPM19MT1cJNTQKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0dQSU8zX0hJR0gJNTUKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0dQSU80X0xPVwk1NgorI2RlZmluZSBNWDUxX01YQ19JTlRfR1BJTzRfSElHSAk1NworI2RlZmluZSBNWDUxX01YQ19JTlRfV0RPRzEJNTgKKyNkZWZpbmUgTVg1MV9NWENfSU5UX1dET0cyCTU5CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9LUFAJNjAKKyNkZWZpbmUgTVg1MV9NWENfSU5UX1BXTTEJNjEKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0kyQzEJNjIKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0kyQzIJNjMKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0hTX0kyQwk2NAorI2RlZmluZSBNWDUxX01YQ19JTlRfUkVTVjY1CTY1CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9SRVNWNjYJNjYKKyNkZWZpbmUgTVg1MV9NWENfSU5UX1NJTV9JUEIJNjcKKyNkZWZpbmUgTVg1MV9NWENfSU5UX1NJTV9EQVQJNjgKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0lJTQk2OQorI2RlZmluZSBNWDUxX01YQ19JTlRfQVRBCTcwCisjZGVmaW5lIE1YNTFfTVhDX0lOVF9DQ00xCTcxCisjZGVmaW5lIE1YNTFfTVhDX0lOVF9DQ00yCTcyCisjZGVmaW5lIE1YNTFfTVhDX0lOVF9HUEMxCTczCisjZGVmaW5lIE1YNTFfTVhDX0lOVF9HUEMyCTc0CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9TUkMJNzUKKyNkZWZpbmUgTVg1MV9NWENfSU5UX05NCQk3NgorI2RlZmluZSBNWDUxX01YQ19JTlRfUE1VCTc3CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9DVElfSVJRCTc4CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9DVEkxX1RHMAk3OQorI2RlZmluZSBNWDUxX01YQ19JTlRfQ1RJMV9URzEJODAKKyNkZWZpbmUgTVg1MV9NWENfSU5UX01DR19FUlIJODEKKyNkZWZpbmUgTVg1MV9NWENfSU5UX01DR19UTVIJODIKKyNkZWZpbmUgTVg1MV9NWENfSU5UX01DR19GVU5DCTgzCisjZGVmaW5lIE1YNTFfTVhDX0lOVF9HUFUyX0lSUQk4NAorI2RlZmluZSBNWDUxX01YQ19JTlRfR1BVMl9CVVNZCTg1CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9SRVNWODYJODYKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0ZFQwk4NworI2RlZmluZSBNWDUxX01YQ19JTlRfT1dJUkUJODgKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0NUSTFfVEcyCTg5CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9TSkMJOTAKKyNkZWZpbmUgTVg1MV9NWENfSU5UX1NQRElGCTkxCisjZGVmaW5lIE1YNTFfTVhDX0lOVF9UVkUJOTIKKyNkZWZpbmUgTVg1MV9NWENfSU5UX0ZJUkkJOTMKKyNkZWZpbmUgTVg1MV9NWENfSU5UX1BXTTIJOTQKKyNkZWZpbmUgTVg1MV9NWENfSU5UX1NMSU1fRVhQCTk1CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9TU0kzCTk2CisjZGVmaW5lIE1YNTFfTVhDX0lOVF9FTUlfQk9PVAk5NworI2RlZmluZSBNWDUxX01YQ19JTlRfQ1RJMV9URzMJOTgKKyNkZWZpbmUgTVg1MV9NWENfSU5UX1NNQ19SWAk5OQorI2RlZmluZSBNWDUxX01YQ19JTlRfVlBVX0lETEUJMTAwCisjZGVmaW5lIE1YNTFfTVhDX0lOVF9FTUlfTkZDCTEwMQorI2RlZmluZSBNWDUxX01YQ19JTlRfR1BVX0lETEUJMTAyCisKKy8qIHNpbGljb24gcmV2aXNpb25zIHNwZWNpZmljIHRvIGkuTVg1MSAqLworI2RlZmluZSBNWDUxX0NISVBfUkVWXzFfMAkweDEwCisjZGVmaW5lIE1YNTFfQ0hJUF9SRVZfMV8xCTB4MTEKKyNkZWZpbmUgTVg1MV9DSElQX1JFVl8xXzIJMHgxMgorI2RlZmluZSBNWDUxX0NISVBfUkVWXzFfMwkweDEzCisjZGVmaW5lIE1YNTFfQ0hJUF9SRVZfMl8wCTB4MjAKKyNkZWZpbmUgTVg1MV9DSElQX1JFVl8yXzEJMHgyMQorI2RlZmluZSBNWDUxX0NISVBfUkVWXzJfMgkweDIyCisjZGVmaW5lIE1YNTFfQ0hJUF9SRVZfMl8zCTB4MjMKKyNkZWZpbmUgTVg1MV9DSElQX1JFVl8zXzAJMHgzMAorI2RlZmluZSBNWDUxX0NISVBfUkVWXzNfMQkweDMxCisjZGVmaW5lIE1YNTFfQ0hJUF9SRVZfM18yCTB4MzIKKworLyogTWFuZGF0b3J5IGRlZmluZXMgdXNlZCBnbG9iYWxseSAqLworCisjaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKSAmJiAhZGVmaW5lZChfX01YQ19CT09UX1VOQ09NUFJFU1MpCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgc3lzdGVtX3JldjsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbXg1MV9yZXZpc2lvbih2b2lkKQoreworCXJldHVybiBzeXN0ZW1fcmV2OworfQorI2VuZGlmCisKKyNlbmRpZgkvKiAgX19BU01fQVJDSF9NWENfTVg1MV9IX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGMuaCBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGMuaAppbmRleCA1MTk5MDUzLi5hNzkwYmYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXhjLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Yy5oCkBAIC0zMCw2ICszMCw3IEBACiAjZGVmaW5lIE1YQ19DUFVfTVgyNwkJMjcKICNkZWZpbmUgTVhDX0NQVV9NWDMxCQkzMQogI2RlZmluZSBNWENfQ1BVX01YMzUJCTM1CisjZGVmaW5lIE1YQ19DUFVfTVg1MQkJNTEKICNkZWZpbmUgTVhDX0NQVV9NWEM5MTIzMQk5MTIzMQogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwpAQCAtMTA4LDYgKzEwOSwxOCBAQAogIyBkZWZpbmUgY3B1X2lzX214MzUoKQkJKDApCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19BUkNIX01YNQorIyBpZmRlZiBteGNfY3B1X3R5cGUKKyMgIHVuZGVmIG14Y19jcHVfdHlwZQorIyAgZGVmaW5lIG14Y19jcHVfdHlwZSBfX214Y19jcHVfdHlwZQorIyBlbHNlCisjICBkZWZpbmUgbXhjX2NwdV90eXBlIE1YQ19DUFVfTVg1MQorIyBlbmRpZgorIyBkZWZpbmUgY3B1X2lzX214NTEoKQkJKG14Y19jcHVfdHlwZSA9PSBNWENfQ1BVX01YNTEpCisjZWxzZQorIyBkZWZpbmUgY3B1X2lzX214NTEoKQkJKDApCisjZW5kaWYKKwogI2lmZGVmIENPTkZJR19BUkNIX01YQzkxMjMxCiAjIGlmZGVmIG14Y19jcHVfdHlwZQogIyAgdW5kZWYgbXhjX2NwdV90eXBlCkBAIC0xMjEsOSArMTM0LDEwIEBACiAjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfTVgzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX01YMikKLSNkZWZpbmUgQ1NDUl9VKG4pIChJT19BRERSRVNTKFdFSU1fQkFTRV9BRERSKSArIG4gKiAweDEwKQotI2RlZmluZSBDU0NSX0wobikgKElPX0FERFJFU1MoV0VJTV9CQVNFX0FERFIpICsgbiAqIDB4MTAgKyAweDQpCi0jZGVmaW5lIENTQ1JfQShuKSAoSU9fQUREUkVTUyhXRUlNX0JBU0VfQUREUikgKyBuICogMHgxMCArIDB4OCkKKy8qIFRoZXNlIGFyZSBkZXByZWNhdGVkLCB1c2UgbXhbMjNdWzE1N11fc2V0dXBfd2VpbWNzIGluc3RlYWQuICovCisjZGVmaW5lIENTQ1JfVShuKSAoSU9fQUREUkVTUyhXRUlNX0JBU0VfQUREUiArIG4gKiAweDEwKSkKKyNkZWZpbmUgQ1NDUl9MKG4pIChJT19BRERSRVNTKFdFSU1fQkFTRV9BRERSICsgbiAqIDB4MTAgKyAweDQpKQorI2RlZmluZSBDU0NSX0EobikgKElPX0FERFJFU1MoV0VJTV9CQVNFX0FERFIgKyBuICogMHgxMCArIDB4OCkpCiAjZW5kaWYKIAogI2RlZmluZSBjcHVfaXNfbXgzKCkJKGNwdV9pc19teDMxKCkgfHwgY3B1X2lzX214MzUoKSB8fCBjcHVfaXNfbXhjOTEyMzEoKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGM5MTIzMS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214YzkxMjMxLmgKaW5kZXggODE0ODRkMS4uNTE4MmI5OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214YzkxMjMxLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214YzkxMjMxLmgKQEAgLTE4NCw2MCArMTg0LDIyIEBACiAjZGVmaW5lIE1YQzkxMjMxX0NTNF9CQVNFX0FERFIJCTB4QjQwMDAwMDAKICNkZWZpbmUgTVhDOTEyMzFfQ1M1X0JBU0VfQUREUgkJMHhCNjAwMDAwMAogCi0vKiBJcyBnaXZlbiBhZGRyZXNzIGJlbG9uZ3MgdG8gdGhlIHNwZWNpZmllZCBtZW1vcnkgcmVnaW9uPyAqLwotI2RlZmluZSBBRERSRVNTX0lOX1JFR0lPTihhZGRyLCBzdGFydCwgc2l6ZSkgXAotCSgoKGFkZHIpID49IChzdGFydCkpICYmICgoYWRkcikgPCAoc3RhcnQpKyhzaXplKSkpCi0KLS8qIElzIGdpdmVuIGFkZHJlc3MgYmVsb25ncyB0byB0aGUgc3BlY2lmaWVkIG5hbWVkIGBtb2R1bGUnPyAqLwotI2RlZmluZSBNWEM5MTIzMV9JU19NT0RVTEUoYWRkciwgbW9kdWxlKSBcCi0JQUREUkVTU19JTl9SRUdJT04oYWRkciwgTVhDOTEyMzFfICMjIG1vZHVsZSAjIyBfQkFTRV9BRERSLCBcCi0JICAgICAgICAgICAgICAgICAgICAgICAgTVhDOTEyMzFfICMjIG1vZHVsZSAjIyBfU0laRSkKIC8qCiAgKiBUaGlzIG1hY3JvIGRlZmluZXMgdGhlIHBoeXNpY2FsIHRvIHZpcnR1YWwgYWRkcmVzcyBtYXBwaW5nIGZvciBhbGwgdGhlCiAgKiBwZXJpcGhlcmFsIG1vZHVsZXMuIEl0IGlzIHVzZWQgYnkgcGFzc2luZyBpbiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBhcyB4CiAgKiBhbmQgcmV0dXJuaW5nIHRoZSB2aXJ0dWFsIGFkZHJlc3MuIElmIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGlzIG5vdCBtYXBwZWQsCi0gKiBpdCByZXR1cm5zIDB4REVBREJFRUYKKyAqIGl0IHJldHVybnMgMC4KICAqLwogCi0jZGVmaW5lIE1YQzkxMjMxX0lPX0FERFJFU1MoeCkgXAotCSh2b2lkIF9faW9tZW0gKikgXAotCShNWEM5MTIzMV9JU19NT0RVTEUoeCwgTDJDQykgPyBNWEM5MTIzMV9MMkNDX0lPX0FERFJFU1MoeCkgOiBcCi0JIE1YQzkxMjMxX0lTX01PRFVMRSh4LCBBSVBTMSkgPyBNWEM5MTIzMV9BSVBTMV9JT19BRERSRVNTKHgpIDogXAotCSBNWEM5MTIzMV9JU19NT0RVTEUoeCwgQUlQUzIpID8gTVhDOTEyMzFfQUlQUzJfSU9fQUREUkVTUyh4KSA6IFwKLQkgTVhDOTEyMzFfSVNfTU9EVUxFKHgsIFNQQkEwKSA/IE1YQzkxMjMxX1NQQkEwX0lPX0FERFJFU1MoeCkgOiBcCi0JIE1YQzkxMjMxX0lTX01PRFVMRSh4LCBTUEJBMSkgPyBNWEM5MTIzMV9TUEJBMV9JT19BRERSRVNTKHgpIDogXAotCSBNWEM5MTIzMV9JU19NT0RVTEUoeCwgUk9NUCkgPyBNWEM5MTIzMV9ST01QX0lPX0FERFJFU1MoeCkgOiBcCi0JIE1YQzkxMjMxX0lTX01PRFVMRSh4LCBBVklDKSA/IE1YQzkxMjMxX0FWSUNfSU9fQUREUkVTUyh4KSA6IFwKLQkgTVhDOTEyMzFfSVNfTU9EVUxFKHgsIFhfTUVNQykgPyBNWEM5MTIzMV9YX01FTUNfSU9fQUREUkVTUyh4KSA6IFwKLQkgMHhERUFEQkVFRikKLQotCi0vKgotICogZGVmaW5lIHRoZSBhZGRyZXNzIG1hcHBpbmcgbWFjcm9zOiBpbiBwaHlzaWNhbCBhZGRyZXNzIG9yZGVyCi0gKi8KLSNkZWZpbmUgTVhDOTEyMzFfTDJDQ19JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBNWEM5MTIzMV9MMkNDX0JBU0VfQUREUikgKyBNWEM5MTIzMV9MMkNDX0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIE1YQzkxMjMxX0FJUFMxX0lPX0FERFJFU1MoeCkgIFwKLQkoKCh4KSAtIE1YQzkxMjMxX0FJUFMxX0JBU0VfQUREUikgKyBNWEM5MTIzMV9BSVBTMV9CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBNWEM5MTIzMV9TUEJBMF9JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBNWEM5MTIzMV9TUEJBMF9CQVNFX0FERFIpICsgTVhDOTEyMzFfU1BCQTBfQkFTRV9BRERSX1ZJUlQpCi0KLSNkZWZpbmUgTVhDOTEyMzFfU1BCQTFfSU9fQUREUkVTUyh4KSAgXAotCSgoKHgpIC0gTVhDOTEyMzFfU1BCQTFfQkFTRV9BRERSKSArIE1YQzkxMjMxX1NQQkExX0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIE1YQzkxMjMxX0FJUFMyX0lPX0FERFJFU1MoeCkgIFwKLQkoKCh4KSAtIE1YQzkxMjMxX0FJUFMyX0JBU0VfQUREUikgKyBNWEM5MTIzMV9BSVBTMl9CQVNFX0FERFJfVklSVCkKLQotI2RlZmluZSBNWEM5MTIzMV9ST01QX0lPX0FERFJFU1MoeCkgIFwKLQkoKCh4KSAtIE1YQzkxMjMxX1JPTVBfQkFTRV9BRERSKSArIE1YQzkxMjMxX1JPTVBfQkFTRV9BRERSX1ZJUlQpCi0KLSNkZWZpbmUgTVhDOTEyMzFfQVZJQ19JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBNWEM5MTIzMV9BVklDX0JBU0VfQUREUikgKyBNWEM5MTIzMV9BVklDX0JBU0VfQUREUl9WSVJUKQotCi0jZGVmaW5lIE1YQzkxMjMxX1hfTUVNQ19JT19BRERSRVNTKHgpICBcCi0JKCgoeCkgLSBNWEM5MTIzMV9YX01FTUNfQkFTRV9BRERSKSArIE1YQzkxMjMxX1hfTUVNQ19CQVNFX0FERFJfVklSVCkKKyNkZWZpbmUgTVhDOTEyMzFfSU9fQUREUkVTUyh4KSAoCQkJCQlcCisJSU1YX0lPX0FERFJFU1MoeCwgTVhDOTEyMzFfTDJDQykgPzoJCQkJXAorCUlNWF9JT19BRERSRVNTKHgsIE1YQzkxMjMxX1hfTUVNQykgPzoJCQkJXAorCUlNWF9JT19BRERSRVNTKHgsIE1YQzkxMjMxX1JPTVApID86CQkJCVwKKwlJTVhfSU9fQUREUkVTUyh4LCBNWEM5MTIzMV9BVklDKSA/OgkJCQlcCisJSU1YX0lPX0FERFJFU1MoeCwgTVhDOTEyMzFfQUlQUzEpID86CQkJCVwKKwlJTVhfSU9fQUREUkVTUyh4LCBNWEM5MTIzMV9TUEJBMCkgPzoJCQkJXAorCUlNWF9JT19BRERSRVNTKHgsIE1YQzkxMjMxX1NQQkExKSA/OgkJCQlcCisJSU1YX0lPX0FERFJFU1MoeCwgTVhDOTEyMzFfQUlQUzIpKQogCiAvKgogICogSW50ZXJydXB0IG51bWJlcnMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teGNfZWhjaS5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Y19laGNpLmgKaW5kZXggOGY3OTYyMy4uNGI5YjgzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Y19laGNpLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL214Y19laGNpLmgKQEAgLTIyLDYgKzIyLDEwIEBACiAjZGVmaW5lIE1YQ19FSENJX1BPV0VSX1BJTlNfRU5BQkxFRAkoMSA8PCA1KQogI2RlZmluZSBNWENfRUhDSV9UVExfRU5BQkxFRAkJKDEgPDwgNikKIAorI2RlZmluZSBNWENfRUhDSV9JTlRFUk5BTF9QSFkJCSgxIDw8IDcpCisjZGVmaW5lIE1YQ19FSENJX0lQUFVFX0RPV04JCSgxIDw8IDgpCisjZGVmaW5lIE1YQ19FSENJX0lQUFVFX1VQCQkoMSA8PCA5KQorCiBzdHJ1Y3QgbXhjX3VzYmhfcGxhdGZvcm1fZGF0YSB7CiAJaW50ICgqaW5pdCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiAJaW50ICgqZXhpdCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvc3NpLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvc3NpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM0ZGVkNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9zc2kuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIF9fTUFDSF9TU0lfSAorI2RlZmluZSBfX01BQ0hfU1NJX0gKKworc3RydWN0IHNuZF9hYzk3OworCitleHRlcm4gdW5zaWduZWQgY2hhciBpbXhfc3NpX2ZpcV9zdGFydCwgaW14X3NzaV9maXFfZW5kOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW14X3NzaV9maXFfYmFzZSwgaW14X3NzaV9maXFfdHhfYnVmZmVyLCBpbXhfc3NpX2ZpcV9yeF9idWZmZXI7CisKK3N0cnVjdCBpbXhfc3NpX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludCBmbGFnczsKKyNkZWZpbmUgSU1YX1NTSV9ETUEgICAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBJTVhfU1NJX1VTRV9BQzk3ICAgICAgICgxIDw8IDEpCisJdm9pZCAoKmFjOTdfcmVzZXQpIChzdHJ1Y3Qgc25kX2FjOTcgKmFjOTcpOworCXZvaWQgKCphYzk3X3dhcm1fcmVzZXQpKHN0cnVjdCBzbmRfYWM5NyAqYWM5Nyk7Cit9OworCisjZW5kaWYgLyogX19NQUNIX1NTSV9IICovCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC90aW1leC5oIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3RpbWV4LmgKaW5kZXggNTI3YTZjMi4uMDI0NDE2ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3RpbWV4LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3RpbWV4LmgKQEAgLTI4LDYgKzI4LDggQEAKICNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkxNjYyNTAwMAogI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWDI1CiAjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJMTYwMDAwMDAKKyNlbGlmIGRlZmluZWQgQ09ORklHX0FSQ0hfTVg1CisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJODAwMDAwMAogI2VsaWYgZGVmaW5lZCBDT05GSUdfQVJDSF9NWEM5MTIzMQogI2RlZmluZSBDTE9DS19USUNLX1JBVEUJCTEzMDAwMDAwCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvdW5jb21wcmVzcy5oCmluZGV4IGQ0OTM4NGMuLjUyZTQ3NmEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC91bmNvbXByZXNzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaApAQCAtMSw4ICsxLDYgQEAKIC8qCiAgKiAgYXJjaC9hcm0vcGxhdC1teGMvaW5jbHVkZS9tYWNoL3VuY29tcHJlc3MuaAogICoKLSAqCi0gKgogICogIENvcHlyaWdodCAoQykgMTk5OSBBUk0gTGltaXRlZAogICogIENvcHlyaWdodCAoQykgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQogICoKQEAgLTI1LDcgKzIzLDYgQEAKIAogI2RlZmluZSBfX01YQ19CT09UX1VOQ09NUFJFU1MKIAotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB1YXJ0X2Jhc2U7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW14Yy9pb211eC1teDEtbXgyLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9pb211eC1teDEtbXgyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzNzE2M2MuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvaW9tdXgtbXgxLW14Mi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiAgYXJjaC9hcm0vbWFjaC1teGMvZ2VuZXJpYy5jCi0gKgotICogIGF1dGhvcjogU2FzY2hhIEhhdWVyCi0gKiAgQ3JlYXRlZDogYXByaWwgMjB0aCwgMjAwNAotICogIENvcHlyaWdodDogU3luZXJ0cm9uaXh4IEdtYkgKLSAqCi0gKiAgQ29tbW9uIGNvZGUgZm9yIGkuTVggbWFjaGluZXMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8bWFjaC9pb211eC5oPgotCi12b2lkIG14Y19ncGlvX21vZGUoaW50IGdwaW9fbW9kZSkKLXsKLQl1bnNpZ25lZCBpbnQgcGluID0gZ3Bpb19tb2RlICYgR1BJT19QSU5fTUFTSzsKLQl1bnNpZ25lZCBpbnQgcG9ydCA9IChncGlvX21vZGUgJiBHUElPX1BPUlRfTUFTSykgPj4gR1BJT19QT1JUX1NISUZUOwotCXVuc2lnbmVkIGludCBvY3IgPSAoZ3Bpb19tb2RlICYgR1BJT19PQ1JfTUFTSykgPj4gR1BJT19PQ1JfU0hJRlQ7Ci0JdW5zaWduZWQgaW50IHRtcDsKLQotCS8qIFB1bGx1cCBlbmFibGUgKi8KLQl0bXAgPSBfX3Jhd19yZWFkbChWQV9HUElPX0JBU0UgKyBNWENfUFVFTihwb3J0KSk7Ci0JaWYgKGdwaW9fbW9kZSAmIEdQSU9fUFVFTikKLQkJdG1wIHw9ICgxIDw8IHBpbik7Ci0JZWxzZQotCQl0bXAgJj0gfigxIDw8IHBpbik7Ci0JX19yYXdfd3JpdGVsKHRtcCwgVkFfR1BJT19CQVNFICsgTVhDX1BVRU4ocG9ydCkpOwotCi0JLyogRGF0YSBkaXJlY3Rpb24gKi8KLQl0bXAgPSBfX3Jhd19yZWFkbChWQV9HUElPX0JBU0UgKyBNWENfRERJUihwb3J0KSk7Ci0JaWYgKGdwaW9fbW9kZSAmIEdQSU9fT1VUKQotCQl0bXAgfD0gMSA8PCBwaW47Ci0JZWxzZQotCQl0bXAgJj0gfigxIDw8IHBpbik7Ci0JX19yYXdfd3JpdGVsKHRtcCwgVkFfR1BJT19CQVNFICsgTVhDX0RESVIocG9ydCkpOwotCi0JLyogUHJpbWFyeSAvIGFsdGVybmF0ZSBmdW5jdGlvbiAqLwotCXRtcCA9IF9fcmF3X3JlYWRsKFZBX0dQSU9fQkFTRSArIE1YQ19HUFIocG9ydCkpOwotCWlmIChncGlvX21vZGUgJiBHUElPX0FGKQotCQl0bXAgfD0gKDEgPDwgcGluKTsKLQllbHNlCi0JCXRtcCAmPSB+KDEgPDwgcGluKTsKLQlfX3Jhd193cml0ZWwodG1wLCBWQV9HUElPX0JBU0UgKyBNWENfR1BSKHBvcnQpKTsKLQotCS8qIHVzZSBhcyBncGlvPyAqLwotCXRtcCA9IF9fcmF3X3JlYWRsKFZBX0dQSU9fQkFTRSArIE1YQ19HSVVTKHBvcnQpKTsKLQlpZiAoZ3Bpb19tb2RlICYgKEdQSU9fUEYgfCBHUElPX0FGKSkKLQkJdG1wICY9IH4oMSA8PCBwaW4pOwotCWVsc2UKLQkJdG1wIHw9ICgxIDw8IHBpbik7Ci0JX19yYXdfd3JpdGVsKHRtcCwgVkFfR1BJT19CQVNFICsgTVhDX0dJVVMocG9ydCkpOwotCi0JaWYgKHBpbiA8IDE2KSB7Ci0JCXRtcCA9IF9fcmF3X3JlYWRsKFZBX0dQSU9fQkFTRSArIE1YQ19PQ1IxKHBvcnQpKTsKLQkJdG1wICY9IH4oMyA8PCAocGluICogMikpOwotCQl0bXAgfD0gKG9jciA8PCAocGluICogMikpOwotCQlfX3Jhd193cml0ZWwodG1wLCBWQV9HUElPX0JBU0UgKyBNWENfT0NSMShwb3J0KSk7Ci0KLQkJdG1wID0gX19yYXdfcmVhZGwoVkFfR1BJT19CQVNFICsgTVhDX0lDT05GQTEocG9ydCkpOwotCQl0bXAgJj0gfigzIDw8IChwaW4gKiAyKSk7Ci0JCXRtcCB8PSAoKGdwaW9fbW9kZSA+PiBHUElPX0FPVVRfU0hJRlQpICYgMykgPDwgKHBpbiAqIDIpOwotCQlfX3Jhd193cml0ZWwodG1wLCBWQV9HUElPX0JBU0UgKyBNWENfSUNPTkZBMShwb3J0KSk7Ci0KLQkJdG1wID0gX19yYXdfcmVhZGwoVkFfR1BJT19CQVNFICsgTVhDX0lDT05GQjEocG9ydCkpOwotCQl0bXAgJj0gfigzIDw8IChwaW4gKiAyKSk7Ci0JCXRtcCB8PSAoKGdwaW9fbW9kZSA+PiBHUElPX0JPVVRfU0hJRlQpICYgMykgPDwgKHBpbiAqIDIpOwotCQlfX3Jhd193cml0ZWwodG1wLCBWQV9HUElPX0JBU0UgKyBNWENfSUNPTkZCMShwb3J0KSk7Ci0JfSBlbHNlIHsKLQkJcGluIC09IDE2OwotCi0JCXRtcCA9IF9fcmF3X3JlYWRsKFZBX0dQSU9fQkFTRSArIE1YQ19PQ1IyKHBvcnQpKTsKLQkJdG1wICY9IH4oMyA8PCAocGluICogMikpOwotCQl0bXAgfD0gKG9jciA8PCAocGluICogMikpOwotCQlfX3Jhd193cml0ZWwodG1wLCBWQV9HUElPX0JBU0UgKyBNWENfT0NSMihwb3J0KSk7Ci0KLQkJdG1wID0gX19yYXdfcmVhZGwoVkFfR1BJT19CQVNFICsgTVhDX0lDT05GQTIocG9ydCkpOwotCQl0bXAgJj0gfigzIDw8IChwaW4gKiAyKSk7Ci0JCXRtcCB8PSAoKGdwaW9fbW9kZSA+PiBHUElPX0FPVVRfU0hJRlQpICYgMykgPDwgKHBpbiAqIDIpOwotCQlfX3Jhd193cml0ZWwodG1wLCBWQV9HUElPX0JBU0UgKyBNWENfSUNPTkZBMihwb3J0KSk7Ci0KLQkJdG1wID0gX19yYXdfcmVhZGwoVkFfR1BJT19CQVNFICsgTVhDX0lDT05GQjIocG9ydCkpOwotCQl0bXAgJj0gfigzIDw8IChwaW4gKiAyKSk7Ci0JCXRtcCB8PSAoKGdwaW9fbW9kZSA+PiBHUElPX0JPVVRfU0hJRlQpICYgMykgPDwgKHBpbiAqIDIpOwotCQlfX3Jhd193cml0ZWwodG1wLCBWQV9HUElPX0JBU0UgKyBNWENfSUNPTkZCMihwb3J0KSk7Ci0JfQotfQotRVhQT1JUX1NZTUJPTChteGNfZ3Bpb19tb2RlKTsKLQotaW50IG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMoY29uc3QgaW50ICpwaW5fbGlzdCwgdW5zaWduZWQgY291bnQsCi0JCWNvbnN0IGNoYXIgKmxhYmVsKQotewotCWNvbnN0IGludCAqcCA9IHBpbl9saXN0OwotCWludCBpOwotCXVuc2lnbmVkIGdwaW87Ci0JdW5zaWduZWQgbW9kZTsKLQlpbnQgcmV0ID0gLUVJTlZBTDsKLQotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0JCWdwaW8gPSAqcCAmIChHUElPX1BJTl9NQVNLIHwgR1BJT19QT1JUX01BU0spOwotCQltb2RlID0gKnAgJiB+KEdQSU9fUElOX01BU0sgfCBHUElPX1BPUlRfTUFTSyk7Ci0KLQkJaWYgKGdwaW8gPj0gKEdQSU9fUE9SVF9NQVggKyAxKSAqIDMyKQotCQkJZ290byBzZXR1cF9lcnJvcjsKLQotCQlyZXQgPSBncGlvX3JlcXVlc3QoZ3BpbywgbGFiZWwpOwotCQlpZiAocmV0KQotCQkJZ290byBzZXR1cF9lcnJvcjsKLQotCQlteGNfZ3Bpb19tb2RlKGdwaW8gfCBtb2RlKTsKLQotCQlwKys7Ci0JfQotCXJldHVybiAwOwotCi1zZXR1cF9lcnJvcjoKLQlteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMocGluX2xpc3QsIGkpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKG14Y19ncGlvX3NldHVwX211bHRpcGxlX3BpbnMpOwotCi12b2lkIG14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhjb25zdCBpbnQgKnBpbl9saXN0LCBpbnQgY291bnQpCi17Ci0JY29uc3QgaW50ICpwID0gcGluX2xpc3Q7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQl1bnNpZ25lZCBncGlvID0gKnAgJiAoR1BJT19QSU5fTUFTSyB8IEdQSU9fUE9SVF9NQVNLKTsKLQkJZ3Bpb19mcmVlKGdwaW8pOwotCQlwKys7Ci0JfQotCi19Ci1FWFBPUlRfU1lNQk9MKG14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyk7Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2lvbXV4LXYxLmMgYi9hcmNoL2FybS9wbGF0LW14Yy9pb211eC12MS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2MGEwMmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pb211eC12MS5jCkBAIC0wLDAgKzEsMjM4IEBACisvKgorICogYXJjaC9hcm0vcGxhdC1teGMvaW9tdXgtdjEuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNCBTYXNjaGEgSGF1ZXIsIFN5bmVydHJvbml4eCBHbWJICisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVXdlIEtsZWluZS1Lb2VuaWcsIFBlbmd1dHJvbml4CisgKgorICogQ29tbW9uIGNvZGUgZm9yIGkuTVgxLCBpLk1YMjEgYW5kIGkuTVgyNworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL2lvbXV4LXYxLmg+CisKK3N0YXRpYyB2b2lkIF9faW9tZW0gKmlteF9pb211eHYxX2Jhc2VhZGRyOworc3RhdGljIHVuc2lnbmVkIGlteF9pb211eHYxX251bXBvcnRzOworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaW14X2lvbXV4djFfcmVhZGwodW5zaWduZWQgb2Zmc2V0KQoreworCXJldHVybiBfX3Jhd19yZWFkbChpbXhfaW9tdXh2MV9iYXNlYWRkciArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbXhfaW9tdXh2MV93cml0ZWwodW5zaWduZWQgbG9uZyB2YWwsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlfX3Jhd193cml0ZWwodmFsLCBpbXhfaW9tdXh2MV9iYXNlYWRkciArIG9mZnNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbXhfaW9tdXh2MV9ybXdsKHVuc2lnbmVkIG9mZnNldCwKKwkJdW5zaWduZWQgbG9uZyBtYXNrLCB1bnNpZ25lZCBsb25nIHZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgcmVnID0gaW14X2lvbXV4djFfcmVhZGwob2Zmc2V0KTsKKworCXJlZyAmPSB+bWFzazsKKwlyZWcgfD0gdmFsdWU7CisKKwlpbXhfaW9tdXh2MV93cml0ZWwocmVnLCBvZmZzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW14X2lvbXV4djFfc2V0X3B1ZW4oCisJCXVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgcGluLCBpbnQgb24pCit7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMSA8PCBwaW47CisKKwlpbXhfaW9tdXh2MV9ybXdsKE1YQ19QVUVOKHBvcnQpLCBtYXNrLCBvbiA/IG1hc2sgOiAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlteF9pb211eHYxX3NldF9kZGlyKAorCQl1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IHBpbiwgaW50IG91dCkKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2sgPSAxIDw8IHBpbjsKKworCWlteF9pb211eHYxX3Jtd2woTVhDX0RESVIocG9ydCksIG1hc2ssIG91dCA/IG1hc2sgOiAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlteF9pb211eHYxX3NldF9ncHIoCisJCXVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgcGluLCBpbnQgYWYpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMSA8PCBwaW47CisKKwlpbXhfaW9tdXh2MV9ybXdsKE1YQ19HUFIocG9ydCksIG1hc2ssIGFmID8gbWFzayA6IDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW14X2lvbXV4djFfc2V0X2dpdXMoCisJCXVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgcGluLCBpbnQgaW51c2UpCit7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMSA8PCBwaW47CisKKwlpbXhfaW9tdXh2MV9ybXdsKE1YQ19HSVVTKHBvcnQpLCBtYXNrLCBpbnVzZSA/IG1hc2sgOiAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGlteF9pb211eHYxX3NldF9vY3IoCisJCXVuc2lnbmVkIGludCBwb3J0LCB1bnNpZ25lZCBpbnQgcGluLCB1bnNpZ25lZCBpbnQgb2NyKQoreworCXVuc2lnbmVkIGxvbmcgc2hpZnQgPSAocGluICYgMHhmKSA8PCAxOworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDMgPDwgc2hpZnQ7CisJdW5zaWduZWQgbG9uZyB2YWx1ZSA9IG9jciA8PCBzaGlmdDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHBpbiA8IDE2ID8gTVhDX09DUjEocG9ydCkgOiBNWENfT0NSMihwb3J0KTsKKworCWlteF9pb211eHYxX3Jtd2wob2Zmc2V0LCBtYXNrLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbXhfaW9tdXh2MV9zZXRfaWNvbmZhKAorCQl1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IHBpbiwgdW5zaWduZWQgaW50IGFvdXQpCit7CisJdW5zaWduZWQgbG9uZyBzaGlmdCA9IChwaW4gJiAweGYpIDw8IDE7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMyA8PCBzaGlmdDsKKwl1bnNpZ25lZCBsb25nIHZhbHVlID0gYW91dCA8PCBzaGlmdDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHBpbiA8IDE2ID8gTVhDX0lDT05GQTEocG9ydCkgOiBNWENfSUNPTkZBMihwb3J0KTsKKworCWlteF9pb211eHYxX3Jtd2wob2Zmc2V0LCBtYXNrLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbXhfaW9tdXh2MV9zZXRfaWNvbmZiKAorCQl1bnNpZ25lZCBpbnQgcG9ydCwgdW5zaWduZWQgaW50IHBpbiwgdW5zaWduZWQgaW50IGJvdXQpCit7CisJdW5zaWduZWQgbG9uZyBzaGlmdCA9IChwaW4gJiAweGYpIDw8IDE7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gMyA8PCBzaGlmdDsKKwl1bnNpZ25lZCBsb25nIHZhbHVlID0gYm91dCA8PCBzaGlmdDsKKwl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHBpbiA8IDE2ID8gTVhDX0lDT05GQjEocG9ydCkgOiBNWENfSUNPTkZCMihwb3J0KTsKKworCWlteF9pb211eHYxX3Jtd2wob2Zmc2V0LCBtYXNrLCB2YWx1ZSk7Cit9CisKK2ludCBteGNfZ3Bpb19tb2RlKGludCBncGlvX21vZGUpCit7CisJdW5zaWduZWQgaW50IHBpbiA9IGdwaW9fbW9kZSAmIEdQSU9fUElOX01BU0s7CisJdW5zaWduZWQgaW50IHBvcnQgPSAoZ3Bpb19tb2RlICYgR1BJT19QT1JUX01BU0spID4+IEdQSU9fUE9SVF9TSElGVDsKKwl1bnNpZ25lZCBpbnQgb2NyID0gKGdwaW9fbW9kZSAmIEdQSU9fT0NSX01BU0spID4+IEdQSU9fT0NSX1NISUZUOworCXVuc2lnbmVkIGludCBhb3V0ID0gKGdwaW9fbW9kZSA+PiBHUElPX0FPVVRfU0hJRlQpICYgMzsKKwl1bnNpZ25lZCBpbnQgYm91dCA9IChncGlvX21vZGUgPj4gR1BJT19CT1VUX1NISUZUKSAmIDM7CisKKwlpZiAocG9ydCA+PSBpbXhfaW9tdXh2MV9udW1wb3J0cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBQdWxsdXAgZW5hYmxlICovCisJaW14X2lvbXV4djFfc2V0X3B1ZW4ocG9ydCwgcGluLCBncGlvX21vZGUgJiBHUElPX1BVRU4pOworCisJLyogRGF0YSBkaXJlY3Rpb24gKi8KKwlpbXhfaW9tdXh2MV9zZXRfZGRpcihwb3J0LCBwaW4sIGdwaW9fbW9kZSAmIEdQSU9fT1VUKTsKKworCS8qIFByaW1hcnkgLyBhbHRlcm5hdGUgZnVuY3Rpb24gKi8KKwlpbXhfaW9tdXh2MV9zZXRfZ3ByKHBvcnQsIHBpbiwgZ3Bpb19tb2RlICYgR1BJT19BRik7CisKKwkvKiB1c2UgYXMgZ3Bpbz8gKi8KKwlpbXhfaW9tdXh2MV9zZXRfZ2l1cyhwb3J0LCBwaW4sICEoZ3Bpb19tb2RlICYgKEdQSU9fUEYgfCBHUElPX0FGKSkpOworCisJaW14X2lvbXV4djFfc2V0X29jcihwb3J0LCBwaW4sIG9jcik7CisKKwlpbXhfaW9tdXh2MV9zZXRfaWNvbmZhKHBvcnQsIHBpbiwgYW91dCk7CisKKwlpbXhfaW9tdXh2MV9zZXRfaWNvbmZiKHBvcnQsIHBpbiwgYm91dCk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobXhjX2dwaW9fbW9kZSk7CisKK3N0YXRpYyBpbnQgaW14X2lvbXV4djFfc2V0dXBfbXVsdGlwbGUoY29uc3QgaW50ICpsaXN0LCB1bnNpZ25lZCBjb3VudCkKK3sKKwlzaXplX3QgaTsKKwlpbnQgcmV0OworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKwkJcmV0ID0gbXhjX2dwaW9fbW9kZShsaXN0W2ldKTsKKworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgbXhjX2dwaW9fc2V0dXBfbXVsdGlwbGVfcGlucyhjb25zdCBpbnQgKnBpbl9saXN0LCB1bnNpZ25lZCBjb3VudCwKKwkJY29uc3QgY2hhciAqbGFiZWwpCit7CisJc2l6ZV90IGk7CisJaW50IHJldDsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisJCXVuc2lnbmVkIGdwaW8gPSBwaW5fbGlzdFtpXSAmIChHUElPX1BJTl9NQVNLIHwgR1BJT19QT1JUX01BU0spOworCisJCXJldCA9IGdwaW9fcmVxdWVzdChncGlvLCBsYWJlbCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9ncGlvX3JlcXVlc3Q7CisJfQorCisJcmV0ID0gaW14X2lvbXV4djFfc2V0dXBfbXVsdGlwbGUocGluX2xpc3QsIGNvdW50KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9zZXR1cDsKKworCXJldHVybiAwOworCitlcnJfc2V0dXA6CisJQlVHX09OKGkgIT0gY291bnQpOworCitlcnJfZ3Bpb19yZXF1ZXN0OgorCW14Y19ncGlvX3JlbGVhc2VfbXVsdGlwbGVfcGlucyhwaW5fbGlzdCwgaSk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChteGNfZ3Bpb19zZXR1cF9tdWx0aXBsZV9waW5zKTsKKwordm9pZCBteGNfZ3Bpb19yZWxlYXNlX211bHRpcGxlX3BpbnMoY29uc3QgaW50ICpwaW5fbGlzdCwgaW50IGNvdW50KQoreworCXNpemVfdCBpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKwkJdW5zaWduZWQgZ3BpbyA9IHBpbl9saXN0W2ldICYgKEdQSU9fUElOX01BU0sgfCBHUElPX1BPUlRfTUFTSyk7CisKKwkJZ3Bpb19mcmVlKGdwaW8pOworCX0KK30KK0VYUE9SVF9TWU1CT0wobXhjX2dwaW9fcmVsZWFzZV9tdWx0aXBsZV9waW5zKTsKKworc3RhdGljIGludCBpbXhfaW9tdXh2MV9pbml0KHZvaWQpCit7CisjaWZkZWYgQ09ORklHX0FSQ0hfTVgxCisJaWYgKGNwdV9pc19teDEoKSkgeworCQlpbXhfaW9tdXh2MV9iYXNlYWRkciA9IE1YMV9JT19BRERSRVNTKE1YMV9HUElPX0JBU0VfQUREUik7CisJCWlteF9pb211eHYxX251bXBvcnRzID0gTVgxX05VTV9HUElPX1BPUlQ7CisJfSBlbHNlCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUFDSF9NWDIxCisJaWYgKGNwdV9pc19teDIxKCkpIHsKKwkJaW14X2lvbXV4djFfYmFzZWFkZHIgPSBNWDIxX0lPX0FERFJFU1MoTVgyMV9HUElPX0JBU0VfQUREUik7CisJCWlteF9pb211eHYxX251bXBvcnRzID0gTVgyMV9OVU1fR1BJT19QT1JUOworCX0gZWxzZQorI2VuZGlmCisjaWZkZWYgQ09ORklHX01BQ0hfTVgyNworCWlmIChjcHVfaXNfbXgyNygpKSB7CisJCWlteF9pb211eHYxX2Jhc2VhZGRyID0gTVgyN19JT19BRERSRVNTKE1YMjdfR1BJT19CQVNFX0FERFIpOworCQlpbXhfaW9tdXh2MV9udW1wb3J0cyA9IE1YMjdfTlVNX0dQSU9fUE9SVDsKKwl9IGVsc2UKKyNlbmRpZgorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiAwOworfQorcHVyZV9pbml0Y2FsbChpbXhfaW9tdXh2MV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL3RpbWUuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL3RpbWUuYwppbmRleCA4NDQ1NjdlZS4uYzFjZTUxYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1teGMvdGltZS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtbXhjL3RpbWUuYwpAQCAtMzAsOSArMzAsMTUgQEAKICNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CiAjaW5jbHVkZSA8bWFjaC9jb21tb24uaD4KIAorLyoKKyAqIFRoZXJlIGFyZSAyIHZlcnNpb25zIG9mIHRoZSB0aW1lciBoYXJkd2FyZSBvbiBGcmVlc2NhbGUgTVhDIGhhcmR3YXJlLgorICogVmVyc2lvbiAxOiBNWDEvTVhMLCBNWDIxLCBNWDI3LgorICogVmVyc2lvbiAyOiBNWDI1LCBNWDMxLCBNWDM1LCBNWDM3LCBNWDUxCisgKi8KKwogLyogZGVmaW5lcyBjb21tb24gZm9yIGFsbCBpLk1YICovCiAjZGVmaW5lIE1YQ19UQ1RMCQkweDAwCi0jZGVmaW5lIE1YQ19UQ1RMX1RFTgkJKDEgPDwgMCkKKyNkZWZpbmUgTVhDX1RDVExfVEVOCQkoMSA8PCAwKSAvKiBFbmFibGUgbW9kdWxlICovCiAjZGVmaW5lIE1YQ19UUFJFUgkJMHgwNAogCiAvKiBNWDEsIE1YMjEsIE1YMjcgKi8KQEAgLTQ3LDggKzUzLDggQEAKICNkZWZpbmUgTVgyX1RTVEFUX0NBUFQJCSgxIDw8IDEpCiAjZGVmaW5lIE1YMl9UU1RBVF9DT01QCQkoMSA8PCAwKQogCi0vKiBNWDMxLCBNWDM1LCBNWDI1LCBNWEM5MTIzMSAqLwotI2RlZmluZSBNWDNfVENUTF9XQUlURU4JCSgxIDw8IDMpCisvKiBNWDMxLCBNWDM1LCBNWDI1LCBNWEM5MTIzMSwgTVg1ICovCisjZGVmaW5lIE1YM19UQ1RMX1dBSVRFTgkJKDEgPDwgMykgLyogV2FpdCBlbmFibGUgbW9kZSAqLwogI2RlZmluZSBNWDNfVENUTF9DTEtfSVBHCSgxIDw8IDYpCiAjZGVmaW5lIE1YM19UQ1RMX0ZSUgkJKDEgPDwgOSkKICNkZWZpbmUgTVgzX0lSCQkJMHgwYwpAQCAtNTcsNiArNjMsOSBAQAogI2RlZmluZSBNWDNfVENOCQkJMHgyNAogI2RlZmluZSBNWDNfVENNUAkJMHgxMAogCisjZGVmaW5lIHRpbWVyX2lzX3YxKCkJKGNwdV9pc19teDEoKSB8fCBjcHVfaXNfbXgyMSgpIHx8IGNwdV9pc19teDI3KCkpCisjZGVmaW5lIHRpbWVyX2lzX3YyKCkJKCF0aW1lcl9pc192MSgpKQorCiBzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBjbG9ja2V2ZW50X214YzsKIHN0YXRpYyBlbnVtIGNsb2NrX2V2ZW50X21vZGUgY2xvY2tldmVudF9tb2RlID0gQ0xPQ0tfRVZUX01PREVfVU5VU0VEOwogCkBAIC02Niw3ICs3NSw3IEBACiB7CiAJdW5zaWduZWQgaW50IHRtcDsKIAotCWlmIChjcHVfaXNfbXgzKCkgfHwgY3B1X2lzX214MjUoKSkKKwlpZiAodGltZXJfaXNfdjIoKSkKIAkJX19yYXdfd3JpdGVsKDAsIHRpbWVyX2Jhc2UgKyBNWDNfSVIpOwogCWVsc2UgewogCQl0bXAgPSBfX3Jhd19yZWFkbCh0aW1lcl9iYXNlICsgTVhDX1RDVEwpOwpAQCAtNzYsNyArODUsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZ3B0X2lycV9lbmFibGUodm9pZCkKIHsKLQlpZiAoY3B1X2lzX214MygpIHx8IGNwdV9pc19teDI1KCkpCisJaWYgKHRpbWVyX2lzX3YyKCkpCiAJCV9fcmF3X3dyaXRlbCgxPDwwLCB0aW1lcl9iYXNlICsgTVgzX0lSKTsKIAllbHNlIHsKIAkJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKHRpbWVyX2Jhc2UgKyBNWENfVENUTCkgfCBNWDFfMl9UQ1RMX0lSUUVOLApAQCAtODYsMTEgKzk1LDEzIEBACiAKIHN0YXRpYyB2b2lkIGdwdF9pcnFfYWNrbm93bGVkZ2Uodm9pZCkKIHsKLQlpZiAoY3B1X2lzX214MSgpKQotCQlfX3Jhd193cml0ZWwoMCwgdGltZXJfYmFzZSArIE1YMV8yX1RTVEFUKTsKLQlpZiAoY3B1X2lzX214MigpKQotCQlfX3Jhd193cml0ZWwoTVgyX1RTVEFUX0NBUFQgfCBNWDJfVFNUQVRfQ09NUCwgdGltZXJfYmFzZSArIE1YMV8yX1RTVEFUKTsKLQlpZiAoY3B1X2lzX214MygpIHx8IGNwdV9pc19teDI1KCkpCisJaWYgKHRpbWVyX2lzX3YxKCkpIHsKKwkJaWYgKGNwdV9pc19teDEoKSkKKwkJCV9fcmF3X3dyaXRlbCgwLCB0aW1lcl9iYXNlICsgTVgxXzJfVFNUQVQpOworCQllbHNlCisJCQlfX3Jhd193cml0ZWwoTVgyX1RTVEFUX0NBUFQgfCBNWDJfVFNUQVRfQ09NUCwKKwkJCQl0aW1lcl9iYXNlICsgTVgxXzJfVFNUQVQpOworCX0gZWxzZSBpZiAodGltZXJfaXNfdjIoKSkKIAkJX19yYXdfd3JpdGVsKE1YM19UU1RBVF9PRjEsIHRpbWVyX2Jhc2UgKyBNWDNfVFNUQVQpOwogfQogCkBAIC0xMTcsNyArMTI4LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgYyA9IGNsa19nZXRfcmF0ZSh0aW1lcl9jbGspOwogCi0JaWYgKGNwdV9pc19teDMoKSB8fCBjcHVfaXNfbXgyNSgpKQorCWlmICh0aW1lcl9pc192MigpKQogCQljbG9ja3NvdXJjZV9teGMucmVhZCA9IG14M19nZXRfY3ljbGVzOwogCiAJY2xvY2tzb3VyY2VfbXhjLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KGMsCkBAIC0xODAsNyArMTkxLDcgQEAKIAogCWlmIChtb2RlICE9IGNsb2NrZXZlbnRfbW9kZSkgewogCQkvKiBTZXQgZXZlbnQgdGltZSBpbnRvIGZhci1mYXIgZnV0dXJlICovCi0JCWlmIChjcHVfaXNfbXgzKCkgfHwgY3B1X2lzX214MjUoKSkKKwkJaWYgKHRpbWVyX2lzX3YyKCkpCiAJCQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwodGltZXJfYmFzZSArIE1YM19UQ04pIC0gMywKIAkJCQkJdGltZXJfYmFzZSArIE1YM19UQ01QKTsKIAkJZWxzZQpAQCAtMjMzLDcgKzI0NCw3IEBACiAJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZXZ0ID0gJmNsb2NrZXZlbnRfbXhjOwogCXVpbnQzMl90IHRzdGF0OwogCi0JaWYgKGNwdV9pc19teDMoKSB8fCBjcHVfaXNfbXgyNSgpKQorCWlmICh0aW1lcl9pc192MigpKQogCQl0c3RhdCA9IF9fcmF3X3JlYWRsKHRpbWVyX2Jhc2UgKyBNWDNfVFNUQVQpOwogCWVsc2UKIAkJdHN0YXQgPSBfX3Jhd19yZWFkbCh0aW1lcl9iYXNlICsgTVgxXzJfVFNUQVQpOwpAQCAtMjY0LDcgKzI3NSw3IEBACiB7CiAJdW5zaWduZWQgaW50IGMgPSBjbGtfZ2V0X3JhdGUodGltZXJfY2xrKTsKIAotCWlmIChjcHVfaXNfbXgzKCkgfHwgY3B1X2lzX214MjUoKSkKKwlpZiAodGltZXJfaXNfdjIoKSkKIAkJY2xvY2tldmVudF9teGMuc2V0X25leHRfZXZlbnQgPSBteDNfc2V0X25leHRfZXZlbnQ7CiAKIAljbG9ja2V2ZW50X214Yy5tdWx0ID0gZGl2X3NjKGMsIE5TRUNfUEVSX1NFQywKQEAgLTI5Niw3ICszMDcsNyBAQAogCV9fcmF3X3dyaXRlbCgwLCB0aW1lcl9iYXNlICsgTVhDX1RDVEwpOwogCV9fcmF3X3dyaXRlbCgwLCB0aW1lcl9iYXNlICsgTVhDX1RQUkVSKTsgLyogc2VlIGRhdGFzaGVldCBub3RlICovCiAKLQlpZiAoY3B1X2lzX214MygpIHx8IGNwdV9pc19teDI1KCkpCisJaWYgKHRpbWVyX2lzX3YyKCkpCiAJCXRjdGxfdmFsID0gTVgzX1RDVExfQ0xLX0lQRyB8IE1YM19UQ1RMX0ZSUiB8IE1YM19UQ1RMX1dBSVRFTiB8IE1YQ19UQ1RMX1RFTjsKIAllbHNlCiAJCXRjdGxfdmFsID0gTVgxXzJfVENUTF9GUlIgfCBNWDFfMl9UQ1RMX0NMS19QQ0xLMSB8IE1YQ19UQ1RMX1RFTjsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL3R6aWMuYyBiL2FyY2gvYXJtL3BsYXQtbXhjL3R6aWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmE2NzA5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1teGMvdHppYy5jCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQ29weXJpZ2h0IDIwMDQtMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFRoZSBjb2RlIGNvbnRhaW5lZCBoZXJlaW4gaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogVmVyc2lvbiAyIG9yIGxhdGVyIGF0IHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zOgorICoKKyAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvZ3BsLWxpY2Vuc2UuaHRtbAorICogaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2dwbC5odG1sCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUWklDIFJlZ2lzdGVycyAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKyNkZWZpbmUgVFpJQ19JTlRDTlRMCTB4MDAwMAkvKiBDb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFRaSUNfSU5UVFlQRQkweDAwMDQJLyogQ29udHJvbGxlciBUeXBlIHJlZ2lzdGVyICovCisjZGVmaW5lIFRaSUNfSU1QSUQJMHgwMDA4CS8qIERpc3RyaWJ1dG9yIEltcGxlbWVudGVyIElkZW50aWZpY2F0aW9uICovCisjZGVmaW5lIFRaSUNfUFJJT01BU0sJMHgwMDBDCS8qIFByaW9yaXR5IE1hc2sgUmVnICovCisjZGVmaW5lIFRaSUNfU1lOQ0NUUkwJMHgwMDEwCS8qIFN5bmNocm9uaXplciBDb250cm9sIHJlZ2lzdGVyICovCisjZGVmaW5lIFRaSUNfRFNNSU5UCTB4MDAxNAkvKiBEU00gaW50ZXJydXB0IEhvbGRvZmZyZWdpc3RlciAqLworI2RlZmluZSBUWklDX0lOVFNFQzAoaSkJKDB4MDA4MCArICgoaSkgPDwgMikpIC8qIEludGVycnVwdCBTZWN1cml0eSBSZWcgMCAqLworI2RlZmluZSBUWklDX0VOU0VUMChpKQkoMHgwMTAwICsgKChpKSA8PCAyKSkgLyogRW5hYmxlIFNldCBSZWcgMCAqLworI2RlZmluZSBUWklDX0VOQ0xFQVIwKGkpICgweDAxODAgKyAoKGkpIDw8IDIpKSAvKiBFbmFibGUgQ2xlYXIgUmVnIDAgKi8KKyNkZWZpbmUgVFpJQ19TUkNTRVQwCTB4MDIwMAkvKiBTb3VyY2UgU2V0IFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgVFpJQ19TUkNDTEFSMAkweDAyODAJLyogU291cmNlIENsZWFyIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgVFpJQ19QUklPUklUWTAJMHgwNDAwCS8qIFByaW9yaXR5IFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgVFpJQ19QTkQwCTB4MEQwMAkvKiBQZW5kaW5nIFJlZ2lzdGVyIDAgKi8KKyNkZWZpbmUgVFpJQ19ISVBORDAJMHgwRDgwCS8qIEhpZ2ggUHJpb3JpdHkgUGVuZGluZyBSZWdpc3RlciAqLworI2RlZmluZSBUWklDX1dBS0VVUDAoaSkJKDB4MEUwMCArICgoaSkgPDwgMikpCS8qIFdha2V1cCBDb25maWcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgVFpJQ19TV0lOVAkweDBGMDAJLyogU29mdHdhcmUgSW50ZXJydXB0IFJpZ2dlciBSZWdpc3RlciAqLworI2RlZmluZSBUWklDX0lEMAkweDBGRDAJLyogSW5kZW50aWZpY2F0aW9uIFJlZ2lzdGVyIDAgKi8KKwordm9pZCBfX2lvbWVtICp0emljX2Jhc2U7IC8qIFVzZWQgYXMgaXJxIGNvbnRyb2xsZXIgYmFzZSBpbiBlbnRyeS1tYWNyby5TICovCisKKy8qKgorICogdHppY19tYXNrX2lycSgpIC0gRGlzYWJsZSBpbnRlcnJ1cHQgbnVtYmVyICJpcnEiIGluIHRoZSBUWklDCisgKgorICogQHBhcmFtICBpcnEgICAgICAgICAgaW50ZXJydXB0IHNvdXJjZSBudW1iZXIKKyAqLworc3RhdGljIHZvaWQgdHppY19tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBpbmRleCwgb2ZmOworCisJaW5kZXggPSBpcnEgPj4gNTsKKwlvZmYgPSBpcnEgJiAweDFGOworCV9fcmF3X3dyaXRlbCgxIDw8IG9mZiwgdHppY19iYXNlICsgVFpJQ19FTkNMRUFSMChpbmRleCkpOworfQorCisvKioKKyAqIHR6aWNfdW5tYXNrX2lycSgpIC0gRW5hYmxlIGludGVycnVwdCBudW1iZXIgImlycSIgaW4gdGhlIFRaSUMKKyAqCisgKiBAcGFyYW0gIGlycSAgICAgICAgICBpbnRlcnJ1cHQgc291cmNlIG51bWJlcgorICovCitzdGF0aWMgdm9pZCB0emljX3VubWFza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgaW5kZXgsIG9mZjsKKworCWluZGV4ID0gaXJxID4+IDU7CisJb2ZmID0gaXJxICYgMHgxRjsKKwlfX3Jhd193cml0ZWwoMSA8PCBvZmYsIHR6aWNfYmFzZSArIFRaSUNfRU5TRVQwKGluZGV4KSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgd2FrZXVwX2ludHJbNF07CisKKy8qKgorICogdHppY19zZXRfd2FrZV9pcnEoKSAtIFNldCBpbnRlcnJ1cHQgbnVtYmVyICJpcnEiIGluIHRoZSBUWklDIGFzIGEgd2FrZS11cCBzb3VyY2UuCisgKgorICogQHBhcmFtICBpcnEgICAgICAgICAgaW50ZXJydXB0IHNvdXJjZSBudW1iZXIKKyAqIEBwYXJhbSAgZW5hYmxlICAgICAgIGVuYWJsZSBhcyB3YWtlLXVwIGlmIGVxdWFsIHRvIG5vbi16ZXJvCisgKiAJCQlkaXNibGUgYXMgd2FrZS11cCBpZiBlcXVhbCB0byB6ZXJvCisgKgorICogQHJldHVybiAgICAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgMCBvbiBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IHR6aWNfc2V0X3dha2VfaXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBlbmFibGUpCit7CisJdW5zaWduZWQgaW50IGluZGV4LCBvZmY7CisKKwlpbmRleCA9IGlycSA+PiA1OworCW9mZiA9IGlycSAmIDB4MUY7CisKKwlpZiAoaW5kZXggPiAzKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChlbmFibGUpCisJCXdha2V1cF9pbnRyW2luZGV4XSB8PSAoMSA8PCBvZmYpOworCWVsc2UKKwkJd2FrZXVwX2ludHJbaW5kZXhdICY9IH4oMSA8PCBvZmYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXhjX3R6aWNfY2hpcCA9IHsKKwkubmFtZSA9ICJNWENfVFpJQyIsCisJLmFjayA9IHR6aWNfbWFza19pcnEsCisJLm1hc2sgPSB0emljX21hc2tfaXJxLAorCS51bm1hc2sgPSB0emljX3VubWFza19pcnEsCisJLnNldF93YWtlID0gdHppY19zZXRfd2FrZV9pcnEsCit9OworCisvKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgVFpJQyBoYXJkd2FyZSBhbmQgZGlzYWJsZXMgYWxsIHRoZQorICogaW50ZXJydXB0cy4gSXQgcmVnaXN0ZXJzIHRoZSBpbnRlcnJ1cHQgZW5hYmxlIGFuZCBkaXNhYmxlIGZ1bmN0aW9ucworICogdG8gdGhlIGtlcm5lbCBmb3IgZWFjaCBpbnRlcnJ1cHQgc291cmNlLgorICovCit2b2lkIF9faW5pdCB0emljX2luaXRfaXJxKHZvaWQgX19pb21lbSAqaXJxYmFzZSkKK3sKKwlpbnQgaTsKKworCXR6aWNfYmFzZSA9IGlycWJhc2U7CisJLyogcHV0IHRoZSBUWklDIGludG8gdGhlIHJlc2V0IHZhbHVlIHdpdGgKKwkgKiBhbGwgaW50ZXJydXB0cyBkaXNhYmxlZAorCSAqLworCWkgPSBfX3Jhd19yZWFkbCh0emljX2Jhc2UgKyBUWklDX0lOVENOVEwpOworCisJX19yYXdfd3JpdGVsKDB4ODAwMTAwMDEsIHR6aWNfYmFzZSArIFRaSUNfSU5UQ05UTCk7CisJX19yYXdfd3JpdGVsKDB4MWYsIHR6aWNfYmFzZSArIFRaSUNfUFJJT01BU0spOworCV9fcmF3X3dyaXRlbCgweDAyLCB0emljX2Jhc2UgKyBUWklDX1NZTkNDVFJMKTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCV9fcmF3X3dyaXRlbCgweEZGRkZGRkZGLCB0emljX2Jhc2UgKyBUWklDX0lOVFNFQzAoaSkpOworCisJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0cyAqLworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCV9fcmF3X3dyaXRlbCgweEZGRkZGRkZGLCB0emljX2Jhc2UgKyBUWklDX0VOQ0xFQVIwKGkpKTsKKworCS8qIGFsbCBJUlEgbm8gRklRIFdhcm5pbmcgOjogTm8gc2VsZWN0aW9uICovCisKKwlmb3IgKGkgPSAwOyBpIDwgTVhDX0lOVEVSTkFMX0lSUVM7IGkrKykgeworCQlzZXRfaXJxX2NoaXAoaSwgJm14Y190emljX2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaSwgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCk7CisJfQorCisJcHJfaW5mbygiVHJ1c3Rab25lIEludGVycnVwdCBDb250cm9sbGVyIChUWklDKSBpbml0aWFsaXplZFxuIik7Cit9CisKKy8qKgorICogdHppY19lbmFibGVfd2FrZSgpIC0gZW5hYmxlIHdha2V1cCBpbnRlcnJ1cHQKKyAqCisgKiBAcGFyYW0gaXNfaWRsZQkJMSBpZiBjYWxsZWQgaW4gaWRsZSBsb29wIChFTlNFVDAgcmVnaXN0ZXIpOworICoJCQkJMCB0byBiZSB1c2VkIHdoZW4gY2FsbGVkIGZyb20gbG93IHBvd2VyIGVudHJ5CisgKiBAcmV0dXJuCQkJMCBpZiBzdWNjZXNzZnVsOyBub24temVybyBvdGhlcndpc2UKKyAqLworaW50IHR6aWNfZW5hYmxlX3dha2UoaW50IGlzX2lkbGUpCit7CisJdW5zaWduZWQgaW50IGksIHY7CisKKwlfX3Jhd193cml0ZWwoMSwgdHppY19iYXNlICsgVFpJQ19EU01JTlQpOworCWlmICh1bmxpa2VseShfX3Jhd19yZWFkbCh0emljX2Jhc2UgKyBUWklDX0RTTUlOVCkgPT0gMCkpCisJCXJldHVybiAtRUFHQUlOOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQl2ID0gaXNfaWRsZSA/IF9fcmF3X3JlYWRsKFRaSUNfRU5TRVQwKGkpKSA6IHdha2V1cF9pbnRyW2ldOworCQlfX3Jhd193cml0ZWwodiwgVFpJQ19XQUtFVVAwKGkpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbm9tYWRpay90aW1lci5jIGIvYXJjaC9hcm0vcGxhdC1ub21hZGlrL3RpbWVyLmMKaW5kZXggNjJmMThhZC4uZmE3Y2IzYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1ub21hZGlrL3RpbWVyLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1ub21hZGlrL3RpbWVyLmMKQEAgLTQ5LDI0ICs0OSwxNyBAQAogc3RhdGljIHZvaWQgbm1ka19jbGtldnRfbW9kZShlbnVtIGNsb2NrX2V2ZW50X21vZGUgbW9kZSwKIAkJCSAgICAgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqZGV2KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KIAlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgotCQkvKiBlbmFibGUgaW50ZXJydXB0cyAtLSBhbmQgY291bnQgY3VycmVudCB2YWx1ZT8gKi8KLQkJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJLyogY291bnQgY3VycmVudCB2YWx1ZT8gKi8KIAkJd3JpdGVsKHJlYWRsKG10dV9iYXNlICsgTVRVX0lNU0MpIHwgMSwgbXR1X2Jhc2UgKyBNVFVfSU1TQyk7Ci0JCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCWJyZWFrOwogCWNhc2UgQ0xPQ0tfRVZUX01PREVfT05FU0hPVDoKIAkJQlVHKCk7IC8qIE5vdCBzdXBwb3J0ZWQsIHlldCAqLwogCQkvKiBGQUxMVEhST1VHSCAqLwogCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9VTlVTRUQ6Ci0JCS8qIGRpc2FibGUgaXJxICovCi0JCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCXdyaXRlbChyZWFkbChtdHVfYmFzZSArIE1UVV9JTVNDKSAmIH4xLCBtdHVfYmFzZSArIE1UVV9JTVNDKTsKLQkJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSBDTE9DS19FVlRfTU9ERV9SRVNVTUU6CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZwppbmRleCAyZTNlZWM2Li42ZGE3OTZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvS2NvbmZpZwpAQCAtNywyOCArNywzNyBAQAogCiBjaG9pY2UKIAlwcm9tcHQgIk9NQVAgU3lzdGVtIFR5cGUiCi0JZGVmYXVsdCBBUkNIX09NQVAxCisJZGVmYXVsdCBBUkNIX09NQVAyUExVUwogCiBjb25maWcgQVJDSF9PTUFQMQogCWJvb2wgIlRJIE9NQVAxIgogCXNlbGVjdCBDT01NT05fQ0xLREVWCisJaGVscAorCSAgIlN5c3RlbXMgYmFzZWQgb24gb21hcDd4eCwgb21hcDE1eHggb3Igb21hcDE2eHgiCisKK2NvbmZpZyBBUkNIX09NQVAyUExVUworCWJvb2wgIlRJIE9NQVAyLzMvNCIKKwlzZWxlY3QgQ09NTU9OX0NMS0RFVgorCWhlbHAKKwkgICJTeXN0ZW1zIGJhc2VkIG9uIG9tYXAyNHh4LCBvbWFwMzR4eCBvciBvbWFwNDR4eCIKIAogY29uZmlnIEFSQ0hfT01BUDIKIAlib29sICJUSSBPTUFQMiIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDJQTFVTCiAJc2VsZWN0IENQVV9WNgotCXNlbGVjdCBDT01NT05fQ0xLREVWCiAKIGNvbmZpZyBBUkNIX09NQVAzCiAJYm9vbCAiVEkgT01BUDMiCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyUExVUwogCXNlbGVjdCBDUFVfVjcKLQlzZWxlY3QgQ09NTU9OX0NMS0RFVgorCXNlbGVjdCBVU0JfQVJDSF9IQVNfRUhDSQogCXNlbGVjdCBBUk1fTDFfQ0FDSEVfU0hJRlRfNgogCiBjb25maWcgQVJDSF9PTUFQNAogCWJvb2wgIlRJIE9NQVA0IgorCWRlcGVuZHMgb24gQVJDSF9PTUFQMlBMVVMKIAlzZWxlY3QgQ1BVX1Y3CiAJc2VsZWN0IEFSTV9HSUMKLQlzZWxlY3QgQ09NTU9OX0NMS0RFVgogCiBlbmRjaG9pY2UKIApAQCAtMTE3LDcgKzEyNiw3IEBACiAKIGNvbmZpZyBPTUFQXzMyS19USU1FUgogCWJvb2wgIlVzZSAzMktIeiB0aW1lciIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQMjRYWCB8fCBBUkNIX09NQVAzNFhYIHx8IEFSQ0hfT01BUDQKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQMlBMVVMKIAloZWxwCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoZSBPTUFQIDMyS0h6IHRpbWVyLgogCSAgVGhpcyB0aW1lciBzYXZlcyBwb3dlciBjb21wYXJlZCB0byB0aGUgT01BUF9NUFVfVElNRVIsIGFuZCBoYXMKQEAgLTEyNyw2ICsxMzYsMjMgQEAKIAogZW5kY2hvaWNlCiAKK2NvbmZpZyBPTUFQM19MMl9BVVhfU0VDVVJFX1NBVkVfUkVTVE9SRQorCWJvb2wgIk9NQVAzIEhTL0VNVSBzYXZlIGFuZCByZXN0b3JlIGZvciBMMiBBVVggY29udHJvbCByZWdpc3RlciIKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDMgJiYgUE0KKwlkZWZhdWx0IG4KKwloZWxwCisJICBXaXRob3V0IHRoaXMgb3B0aW9uLCBMMiBBdXhpbGlhcnkgY29udHJvbCByZWdpc3RlciBjb250ZW50cyBhcmUKKwkgIGxvc3QgZHVyaW5nIG9mZi1tb2RlIGVudHJ5IG9uIEhTL0VNVSBkZXZpY2VzLiBUaGlzIGZlYXR1cmUKKwkgIHJlcXVpcmVzIHN1cHBvcnQgZnJvbSBQUEEgLyBib290LWxvYWRlciBpbiBIUy9FTVUgZGV2aWNlcywgd2hpY2gKKwkgIGN1cnJlbnRseSBkb2VzIG5vdCBleGlzdCBieSBkZWZhdWx0LgorCitjb25maWcgT01BUDNfTDJfQVVYX1NFQ1VSRV9TRVJWSUNFX1NFVF9JRAorCWludCAiU2VydmljZSBJRCBmb3IgdGhlIHN1cHBvcnQgcm91dGluZSB0byBzZXQgTDIgQVVYIGNvbnRyb2wiCisJZGVwZW5kcyBvbiBPTUFQM19MMl9BVVhfU0VDVVJFX1NBVkVfUkVTVE9SRQorCWRlZmF1bHQgNDMKKwloZWxwCisJICBQUEEgcm91dGluZSBzZXJ2aWNlIElEIGZvciBzZXR0aW5nIEwyIGF1eGlsaWFyeSBjb250cm9sIHJlZ2lzdGVyLgorCiBjb25maWcgT01BUF8zMktfVElNRVJfSFoKIAlpbnQgIktlcm5lbCBpbnRlcm5hbCB0aW1lciBmcmVxdWVuY3kgZm9yIDMyS0h6IHRpbWVyIgogCXJhbmdlIDMyIDEwMjQKQEAgLTEzOCwyOSArMTY0LDEwIEBACiAKIGNvbmZpZyBPTUFQX0RNX1RJTUVSCiAJYm9vbCAiVXNlIGR1YWwtbW9kZSB0aW1lciIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQMjRYWCB8fCBBUkNIX09NQVAzNFhYIHx8IEFSQ0hfT01BUDQKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQMlBMVVMKIAloZWxwCiAJIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byB1c2UgT01BUCBEdWFsLU1vZGUgdGltZXJzLgogCi1jaG9pY2UKLQlwcm9tcHQgIkxvdy1sZXZlbCBkZWJ1ZyBjb25zb2xlIFVBUlQiCi0JZGVwZW5kcyBvbiBBUkNIX09NQVAKLQlkZWZhdWx0IE9NQVBfTExfREVCVUdfTk9ORQotCi1jb25maWcgT01BUF9MTF9ERUJVR19VQVJUMQotCWJvb2wgIlVBUlQxIgotCi1jb25maWcgT01BUF9MTF9ERUJVR19VQVJUMgotCWJvb2wgIlVBUlQyIgotCi1jb25maWcgT01BUF9MTF9ERUJVR19VQVJUMwotCWJvb2wgIlVBUlQzIgotCi1jb25maWcgT01BUF9MTF9ERUJVR19OT05FCi0JYm9vbCAiTm9uZSIKLQotZW5kY2hvaWNlCi0KIGNvbmZpZyBPTUFQX1NFUklBTF9XQUtFCiAJYm9vbCAiRW5hYmxlIHdha2UtdXAgZXZlbnRzIGZvciBzZXJpYWwgcG9ydHMiCiAJZGVwZW5kcyBvbiBBUkNIX09NQVAxICYmIE9NQVBfTVVYCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jCmluZGV4IDRiZWNiZGQuLjUyNjFhMDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jCkBAIC0xNzMsNyArMTczLDcgQEAKICAqIE9NQVAgc3BlY2lmaWMgY2xvY2sgZnVuY3Rpb25zIHNoYXJlZCBiZXR3ZWVuIG9tYXAxIGFuZCBvbWFwMgogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotdW5zaWduZWQgaW50IF9faW5pdGRhdGEgbXB1cmF0ZTsKK2ludCBfX2luaXRkYXRhIG1wdXJhdGU7CiAKIC8qCiAgKiBCeSBkZWZhdWx0IHdlIHVzZSB0aGUgcmF0ZSBzZXQgYnkgdGhlIGJvb3Rsb2FkZXIuCkBAIC0xOTksNiArMTk5LDE3IEBACiAJcmV0dXJuIGNsay0+cGFyZW50LT5yYXRlOwogfQogCisvKgorICogVXNlZCBmb3IgY2xvY2tzIHRoYXQgaGF2ZSB0aGUgc2FtZSB2YWx1ZSBhcyB0aGUgcGFyZW50IGNsb2NrLAorICogZGl2aWRlZCBieSBzb21lIGZhY3RvcgorICovCit1bnNpZ25lZCBsb25nIG9tYXBfZml4ZWRfZGl2aXNvcl9yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCVdBUk5fT04oIWNsay0+Zml4ZWRfZGl2KTsKKworCXJldHVybiBjbGstPnBhcmVudC0+cmF0ZSAvIGNsay0+Zml4ZWRfZGl2OworfQorCiB2b2lkIGNsa19yZXBhcmVudChzdHJ1Y3QgY2xrICpjaGlsZCwgc3RydWN0IGNsayAqcGFyZW50KQogewogCWxpc3RfZGVsX2luaXQoJmNoaWxkLT5zaWJsaW5nKTsKQEAgLTMwMiw2ICszMTMsMzMgQEAKIAl9CiB9CiAKKy8qKgorICogb21hcF9jbGtfZ2V0X2J5X25hbWUgLSBsb2NhdGUgT01BUCBzdHJ1Y3QgY2xrIGJ5IGl0cyBuYW1lCisgKiBAbmFtZTogbmFtZSBvZiB0aGUgc3RydWN0IGNsayB0byBsb2NhdGUKKyAqCisgKiBMb2NhdGUgYW4gT01BUCBzdHJ1Y3QgY2xrIGJ5IGl0cyBuYW1lLiAgQXNzdW1lcyB0aGF0IHN0cnVjdCBjbGsKKyAqIG5hbWVzIGFyZSB1bmlxdWUuICBSZXR1cm5zIE5VTEwgaWYgbm90IGZvdW5kIG9yIGEgcG9pbnRlciB0byB0aGUKKyAqIHN0cnVjdCBjbGsgaWYgZm91bmQuCisgKi8KK3N0cnVjdCBjbGsgKm9tYXBfY2xrX2dldF9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGNsayAqYzsKKwlzdHJ1Y3QgY2xrICpyZXQgPSBOVUxMOworCisJbXV0ZXhfbG9jaygmY2xvY2tzX211dGV4KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmNsb2Nrcywgbm9kZSkgeworCQlpZiAoIXN0cmNtcChjLT5uYW1lLCBuYW1lKSkgeworCQkJcmV0ID0gYzsKKwkJCWJyZWFrOworCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZjbG9ja3NfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKwogLyoKICAqIExvdyBsZXZlbCBoZWxwZXJzCiAgKi8KQEAgLTMxOSw2ICszNTcsMTYgQEAKIAkuZGlzYWJsZQk9IGNsa2xsX2Rpc2FibGVfbnVsbCwKIH07CiAKKy8qCisgKiBEdW1teSBjbG9jaworICoKKyAqIFVzZWQgZm9yIGNsb2NrIGFsaWFzZXMgdGhhdCBhcmUgbmVlZGVkIG9uIHNvbWUgT01BUHMsIGJ1dCBub3Qgb3RoZXJzCisgKi8KK3N0cnVjdCBjbGsgZHVtbXlfY2sgPSB7CisJLm5hbWUJPSAiZHVtbXkiLAorCS5vcHMJPSAmY2xrb3BzX251bGwsCit9OworCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCiB2b2lkIGNsa19pbml0X2NwdWZyZXFfdGFibGUoc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICoqdGFibGUpCiB7CkBAIC0zOTcsOCArNDQ1LDYgQEAKIAljaGFyICpwID0gczsKIAogCXAgKz0gc3ByaW50ZihwLCAiJXMiLCBjLT5uYW1lKTsKLQlpZiAoYy0+aWQgIT0gMCkKLQkJc3ByaW50ZihwLCAiOiVkIiwgYy0+aWQpOwogCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIocywgcGEgPyBwYS0+ZGVudCA6IGNsa19kZWJ1Z2ZzX3Jvb3QpOwogCWlmICghZCkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvY29tbW9uLmMKaW5kZXggZGRkYzAyNy4uMDg4YzFhMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9jb21tb24uYwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgPHBsYXQvY29udHJvbC5oPgogI2luY2x1ZGUgPHBsYXQvbXV4Lmg+CiAjaW5jbHVkZSA8cGxhdC9mcGdhLmg+CisjaW5jbHVkZSA8cGxhdC9zZXJpYWwuaD4KIAogI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KIApAQCAtMTI2LDcgKzEyNyw3IEBACiAjZGVmaW5lIG9tYXAyNDMwXzMya19yZWFkCU5VTEwKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDM0WFgKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwogc3RhdGljIGN5Y2xlX3Qgb21hcDM0eHhfMzJrX3JlYWQoc3RydWN0IGNsb2Nrc291cmNlICpjcykKIHsKIAlyZXR1cm4gb21hcF9yZWFkbChPTUFQMzQzMF8zMktTWU5DVF9CQVNFICsgMHgxMCk7CkBAIC0yNDUsNiArMjQ2LDcgQEAKIAlvbWFwMl9zZXRfZ2xvYmFsc19zZHJjKG9tYXAyX2dsb2JhbHMpOwogCW9tYXAyX3NldF9nbG9iYWxzX2NvbnRyb2wob21hcDJfZ2xvYmFscyk7CiAJb21hcDJfc2V0X2dsb2JhbHNfcHJjbShvbWFwMl9nbG9iYWxzKTsKKwlvbWFwMl9zZXRfZ2xvYmFsc191YXJ0KG9tYXAyX2dsb2JhbHMpOwogfQogCiAjZW5kaWYKQEAgLTI1NCwxMSArMjU2LDE0IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfZ2xvYmFscyBvbWFwMjQyeF9nbG9iYWxzID0gewogCS5jbGFzcwk9IE9NQVAyNDJYX0NMQVNTLAogCS50YXAJPSBPTUFQMl9MNF9JT19BRERSRVNTKDB4NDgwMTQwMDApLAotCS5zZHJjCT0gT01BUDJfTDNfSU9fQUREUkVTUyhPTUFQMjQyMF9TRFJDX0JBU0UpLAotCS5zbXMJPSBPTUFQMl9MM19JT19BRERSRVNTKE9NQVAyNDIwX1NNU19CQVNFKSwKLQkuY3RybAk9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDI0MjBfQ1RSTF9CQVNFKSwKLQkucHJtCT0gT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMjQyMF9QUk1fQkFTRSksCi0JLmNtCT0gT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQMjQyMF9DTV9CQVNFKSwKKwkuc2RyYwk9IE9NQVAyNDIwX1NEUkNfQkFTRSwKKwkuc21zCT0gT01BUDI0MjBfU01TX0JBU0UsCisJLmN0cmwJPSBPTUFQMjQyMF9DVFJMX0JBU0UsCisJLnBybQk9IE9NQVAyNDIwX1BSTV9CQVNFLAorCS5jbQk9IE9NQVAyNDIwX0NNX0JBU0UsCisJLnVhcnQxX3BoeXMJPSBPTUFQMl9VQVJUMV9CQVNFLAorCS51YXJ0Ml9waHlzCT0gT01BUDJfVUFSVDJfQkFTRSwKKwkudWFydDNfcGh5cwk9IE9NQVAyX1VBUlQzX0JBU0UsCiB9OwogCiB2b2lkIF9faW5pdCBvbWFwMl9zZXRfZ2xvYmFsc18yNDJ4KHZvaWQpCkBAIC0yNzIsMTEgKzI3NywxNCBAQAogc3RhdGljIHN0cnVjdCBvbWFwX2dsb2JhbHMgb21hcDI0M3hfZ2xvYmFscyA9IHsKIAkuY2xhc3MJPSBPTUFQMjQzWF9DTEFTUywKIAkudGFwCT0gT01BUDJfTDRfSU9fQUREUkVTUygweDQ5MDBhMDAwKSwKLQkuc2RyYwk9IE9NQVAyX0wzX0lPX0FERFJFU1MoT01BUDI0M1hfU0RSQ19CQVNFKSwKLQkuc21zCT0gT01BUDJfTDNfSU9fQUREUkVTUyhPTUFQMjQzWF9TTVNfQkFTRSksCi0JLmN0cmwJPSBPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAyNDNYX0NUUkxfQkFTRSksCi0JLnBybQk9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDI0MzBfUFJNX0JBU0UpLAotCS5jbQk9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDI0MzBfQ01fQkFTRSksCisJLnNkcmMJPSBPTUFQMjQzWF9TRFJDX0JBU0UsCisJLnNtcwk9IE9NQVAyNDNYX1NNU19CQVNFLAorCS5jdHJsCT0gT01BUDI0M1hfQ1RSTF9CQVNFLAorCS5wcm0JPSBPTUFQMjQzMF9QUk1fQkFTRSwKKwkuY20JPSBPTUFQMjQzMF9DTV9CQVNFLAorCS51YXJ0MV9waHlzCT0gT01BUDJfVUFSVDFfQkFTRSwKKwkudWFydDJfcGh5cwk9IE9NQVAyX1VBUlQyX0JBU0UsCisJLnVhcnQzX3BoeXMJPSBPTUFQMl9VQVJUM19CQVNFLAogfTsKIAogdm9pZCBfX2luaXQgb21hcDJfc2V0X2dsb2JhbHNfMjQzeCh2b2lkKQpAQCAtMjg1LDIxICsyOTMsMzEgQEAKIH0KICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzQzMCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogCi1zdGF0aWMgc3RydWN0IG9tYXBfZ2xvYmFscyBvbWFwMzQzeF9nbG9iYWxzID0geworc3RhdGljIHN0cnVjdCBvbWFwX2dsb2JhbHMgb21hcDNfZ2xvYmFscyA9IHsKIAkuY2xhc3MJPSBPTUFQMzQzWF9DTEFTUywKIAkudGFwCT0gT01BUDJfTDRfSU9fQUREUkVTUygweDQ4MzBBMDAwKSwKLQkuc2RyYwk9IE9NQVAyX0wzX0lPX0FERFJFU1MoT01BUDM0M1hfU0RSQ19CQVNFKSwKLQkuc21zCT0gT01BUDJfTDNfSU9fQUREUkVTUyhPTUFQMzQzWF9TTVNfQkFTRSksCi0JLmN0cmwJPSBPTUFQMl9MNF9JT19BRERSRVNTKE9NQVAzNDNYX0NUUkxfQkFTRSksCi0JLnBybQk9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDM0MzBfUFJNX0JBU0UpLAotCS5jbQk9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDM0MzBfQ01fQkFTRSksCisJLnNkcmMJPSBPTUFQMzQzWF9TRFJDX0JBU0UsCisJLnNtcwk9IE9NQVAzNDNYX1NNU19CQVNFLAorCS5jdHJsCT0gT01BUDM0M1hfQ1RSTF9CQVNFLAorCS5wcm0JPSBPTUFQMzQzMF9QUk1fQkFTRSwKKwkuY20JPSBPTUFQMzQzMF9DTV9CQVNFLAorCS51YXJ0MV9waHlzCT0gT01BUDNfVUFSVDFfQkFTRSwKKwkudWFydDJfcGh5cwk9IE9NQVAzX1VBUlQyX0JBU0UsCisJLnVhcnQzX3BoeXMJPSBPTUFQM19VQVJUM19CQVNFLAogfTsKIAogdm9pZCBfX2luaXQgb21hcDJfc2V0X2dsb2JhbHNfMzQzeCh2b2lkKQogewotCV9fb21hcDJfc2V0X2dsb2JhbHMoJm9tYXAzNDN4X2dsb2JhbHMpOworCV9fb21hcDJfc2V0X2dsb2JhbHMoJm9tYXAzX2dsb2JhbHMpOworfQorCit2b2lkIF9faW5pdCBvbWFwMl9zZXRfZ2xvYmFsc18zNnh4KHZvaWQpCit7CisJb21hcDNfZ2xvYmFscy51YXJ0NF9waHlzID0gT01BUDNfVUFSVDRfQkFTRTsKKworCV9fb21hcDJfc2V0X2dsb2JhbHMoJm9tYXAzX2dsb2JhbHMpOwogfQogI2VuZGlmCiAKQEAgLTMwNywxMCArMzI1LDE0IEBACiBzdGF0aWMgc3RydWN0IG9tYXBfZ2xvYmFscyBvbWFwNF9nbG9iYWxzID0gewogCS5jbGFzcwk9IE9NQVA0NDNYX0NMQVNTLAogCS50YXAJPSBPTUFQMl9MNF9JT19BRERSRVNTKE9NQVA0NDNYX1NDTV9CQVNFKSwKLQkuY3RybAk9IE9NQVAyX0w0X0lPX0FERFJFU1MoT01BUDQ0M1hfQ1RSTF9CQVNFKSwKLQkucHJtCT0gT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQNDQzMF9QUk1fQkFTRSksCi0JLmNtCT0gT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQNDQzMF9DTV9CQVNFKSwKLQkuY20yCT0gT01BUDJfTDRfSU9fQUREUkVTUyhPTUFQNDQzMF9DTTJfQkFTRSksCisJLmN0cmwJPSBPTUFQNDQzWF9DVFJMX0JBU0UsCisJLnBybQk9IE9NQVA0NDMwX1BSTV9CQVNFLAorCS5jbQk9IE9NQVA0NDMwX0NNX0JBU0UsCisJLmNtMgk9IE9NQVA0NDMwX0NNMl9CQVNFLAorCS51YXJ0MV9waHlzCT0gT01BUDRfVUFSVDFfQkFTRSwKKwkudWFydDJfcGh5cwk9IE9NQVA0X1VBUlQyX0JBU0UsCisJLnVhcnQzX3BoeXMJPSBPTUFQNF9VQVJUM19CQVNFLAorCS51YXJ0NF9waHlzCT0gT01BUDRfVUFSVDRfQkFTRSwKIH07CiAKIHZvaWQgX19pbml0IG9tYXAyX3NldF9nbG9iYWxzXzQ0M3godm9pZCkKQEAgLTMxOCw2ICszNDAsNyBAQAogCW9tYXAyX3NldF9nbG9iYWxzX3RhcCgmb21hcDRfZ2xvYmFscyk7CiAJb21hcDJfc2V0X2dsb2JhbHNfY29udHJvbCgmb21hcDRfZ2xvYmFscyk7CiAJb21hcDJfc2V0X2dsb2JhbHNfcHJjbSgmb21hcDRfZ2xvYmFscyk7CisJb21hcDJfc2V0X2dsb2JhbHNfdWFydCgmb21hcDRfZ2xvYmFscyk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKaW5kZXggMzBiNWRiNy4uNGE0Y2Q4NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8cGxhdC9tZW5lbGF1cy5oPgogI2luY2x1ZGUgPHBsYXQvbWNic3AuaD4KICNpbmNsdWRlIDxwbGF0L2RzcF9jb21tb24uaD4KKyNpbmNsdWRlIDxwbGF0L29tYXA0NHh4Lmg+CiAKICNpZglkZWZpbmVkKENPTkZJR19PTUFQX0RTUCkgfHwgZGVmaW5lZChDT05GSUdfT01BUF9EU1BfTU9EVUxFKQogCkBAIC0xOTIsNiArMTkzLDQxIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKyNpZiBkZWZpbmVkKENPTkZJR19TTkRfT01BUF9TT0NfTUNQRE0pIHx8IFwKKwkJZGVmaW5lZChDT05GSUdfU05EX09NQVBfU09DX01DUERNX01PRFVMRSkKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtY3BkbV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJtY3BkbV9tZW0iLAorCQkuc3RhcnQJCT0gT01BUDQ0WFhfTUNQRE1fQkFTRSwKKwkJLmVuZAkJPSBPTUFQNDRYWF9NQ1BETV9CQVNFICsgU1pfNEssCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLm5hbWUJCT0gIm1jcGRtX2lycSIsCisJCS5zdGFydAkJPSBPTUFQNDRYWF9JUlFfTUNQRE0sCisJCS5lbmQJCT0gT01BUDQ0WFhfSVJRX01DUERNLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfbWNwZG1fZGV2aWNlID0geworCS5uYW1lCQk9ICJvbWFwLW1jcGRtIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG1jcGRtX3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbWNwZG1fcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHZvaWQgb21hcF9pbml0X21jcGRtKHZvaWQpCit7CisJKHZvaWQpIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcigmb21hcF9tY3BkbV9kZXZpY2UpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2luaXRfbWNwZG0odm9pZCkge30KKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAjaWYgZGVmaW5lZChDT05GSUdfTU1DX09NQVApIHx8IGRlZmluZWQoQ09ORklHX01NQ19PTUFQX01PRFVMRSkgfHwgXAogCWRlZmluZWQoQ09ORklHX01NQ19PTUFQX0hTKSB8fCBkZWZpbmVkKENPTkZJR19NTUNfT01BUF9IU19NT0RVTEUpCiAKQEAgLTI0NCw3ICsyODAsNyBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfSFdfUkFORE9NX09NQVApIHx8IGRlZmluZWQoQ09ORklHX0hXX1JBTkRPTV9PTUFQX01PRFVMRSkKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKICNkZWZpbmUJT01BUF9STkdfQkFTRQkJMHg0ODBBMDAwMAogI2Vsc2UKICNkZWZpbmUJT01BUF9STkdfQkFTRQkJMHhmZmZlNTAwMApAQCAtMzg1LDYgKzQyMSw3IEBACiAJb21hcF9pbml0X2RzcCgpOwogCW9tYXBfaW5pdF9rcCgpOwogCW9tYXBfaW5pdF9ybmcoKTsKKwlvbWFwX2luaXRfbWNwZG0oKTsKIAlvbWFwX2luaXRfdXdpcmUoKTsKIAlvbWFwX2luaXRfd2R0KCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKaW5kZXggNzI4YzY0Mi4uMmFiMjI0YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwpAQCAtMTg3MCw4ICsxODcwLDcgQEAKICNkZWZpbmUgb21hcDFfZG1hX2lycV9oYW5kbGVyCU5VTEwKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgXAotCQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMlBMVVMKIAogc3RhdGljIGludCBvbWFwMl9kbWFfaGFuZGxlX2NoKGludCBjaCkKIHsKQEAgLTIxMzMsMTMgKzIxMzIsMTMgQEAKIAlpZiAoY3B1X2NsYXNzX2lzX29tYXAyKCkpIHsKIAkJaW50IGlycTsKIAkJaWYgKGNwdV9pc19vbWFwNDR4eCgpKQotCQkJaXJxID0gSU5UXzQ0WFhfU0RNQV9JUlEwOworCQkJaXJxID0gT01BUDQ0WFhfSVJRX1NETUFfMDsKIAkJZWxzZQogCQkJaXJxID0gSU5UXzI0WFhfU0RNQV9JUlEwOwogCQlzZXR1cF9pcnEoaXJxLCAmb21hcDI0eHhfZG1hX2lycSk7CiAJfQogCi0JaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJaWYgKGNwdV9pc19vbWFwMzR4eCgpIHx8IGNwdV9pc19vbWFwNDR4eCgpKSB7CiAJCS8qIEVuYWJsZSBzbWFydGlkbGUgaWRsZW1vZGVzIGFuZCBhdXRvaWRsZSAqLwogCQl1MzIgdiA9IGRtYV9yZWFkKE9DUF9TWVNDT05GSUcpOwogCQl2ICY9IH4oRE1BX1NZU0NPTkZJR19NSURMRU1PREVfTUFTSyB8CkBAIC0yMTUwLDcgKzIxNDksOCBAQAogCQkJRE1BX1NZU0NPTkZJR19BVVRPSURMRSk7CiAJCWRtYV93cml0ZSh2ICwgT0NQX1NZU0NPTkZJRyk7CiAJCS8qIHJlc2VydmUgZG1hIGNoYW5uZWxzIDAgYW5kIDEgaW4gaGlnaCBzZWN1cml0eSBkZXZpY2VzICovCi0JCWlmIChvbWFwX3R5cGUoKSAhPSBPTUFQMl9ERVZJQ0VfVFlQRV9HUCkgeworCQlpZiAoY3B1X2lzX29tYXAzNHh4KCkgJiYKKwkJCShvbWFwX3R5cGUoKSAhPSBPTUFQMl9ERVZJQ0VfVFlQRV9HUCkpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIlJlc2VydmluZyBETUEgY2hhbm5lbHMgMCBhbmQgMSBmb3IgIgogCQkJCQkiSFMgUk9NIGNvZGVcbiIpOwogCQkJZG1hX2NoYW5bMF0uZGV2X2lkID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCmluZGV4IDA4Y2NmODkuLjRkOTlkZmJjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMKQEAgLTE1Myw4ICsxNTMsNyBAQAogc3RydWN0IG9tYXBfZG1fdGltZXIgewogCXVuc2lnbmVkIGxvbmcgcGh5c19iYXNlOwogCWludCBpcnE7Ci0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgXAotCQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMlBMVVMKIAlzdHJ1Y3QgY2xrICppY2xrLCAqZmNsazsKICNlbmRpZgogCXZvaWQgX19pb21lbSAqaW9fYmFzZTsKQEAgLTE2MywyMCArMTYyLDkgQEAKIAl1bnNpZ25lZCBwb3N0ZWQ6MTsKIH07CiAKK3N0YXRpYyBpbnQgZG1fdGltZXJfY291bnQ7CisKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMQotCi0jZGVmaW5lIG9tYXBfZG1fY2xrX2VuYWJsZSh4KQotI2RlZmluZSBvbWFwX2RtX2Nsa19kaXNhYmxlKHgpCi0jZGVmaW5lIG9tYXAyX2RtX3RpbWVycwkJCU5VTEwKLSNkZWZpbmUgb21hcDJfZG1fc291cmNlX25hbWVzCQlOVUxMCi0jZGVmaW5lIG9tYXAyX2RtX3NvdXJjZV9jbG9ja3MJCU5VTEwKLSNkZWZpbmUgb21hcDNfZG1fdGltZXJzCQkJTlVMTAotI2RlZmluZSBvbWFwM19kbV9zb3VyY2VfbmFtZXMJCU5VTEwKLSNkZWZpbmUgb21hcDNfZG1fc291cmNlX2Nsb2NrcwkJTlVMTAotI2RlZmluZSBvbWFwNF9kbV90aW1lcnMJCQlOVUxMCi0jZGVmaW5lIG9tYXA0X2RtX3NvdXJjZV9uYW1lcwkJTlVMTAotI2RlZmluZSBvbWFwNF9kbV9zb3VyY2VfY2xvY2tzCQlOVUxMCi0KIHN0YXRpYyBzdHJ1Y3Qgb21hcF9kbV90aW1lciBvbWFwMV9kbV90aW1lcnNbXSA9IHsKIAl7IC5waHlzX2Jhc2UgPSAweGZmZmIxNDAwLCAuaXJxID0gSU5UXzE2MTBfR1BUSU1FUjEgfSwKIAl7IC5waHlzX2Jhc2UgPSAweGZmZmIxYzAwLCAuaXJxID0gSU5UXzE2MTBfR1BUSU1FUjIgfSwKQEAgLTE4OCwyMCArMTc2LDE0IEBACiAJeyAucGh5c19iYXNlID0gMHhmZmZiZDQwMCwgLmlycSA9IElOVF8xNjEwX0dQVElNRVI4IH0sCiB9OwogCi1zdGF0aWMgY29uc3QgaW50IGRtX3RpbWVyX2NvdW50ID0gQVJSQVlfU0laRShvbWFwMV9kbV90aW1lcnMpOworc3RhdGljIGNvbnN0IGludCBvbWFwMV9kbV90aW1lcl9jb3VudCA9IEFSUkFZX1NJWkUob21hcDFfZG1fdGltZXJzKTsKIAotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKLQotI2RlZmluZSBvbWFwX2RtX2Nsa19lbmFibGUoeCkJCWNsa19lbmFibGUoeCkKLSNkZWZpbmUgb21hcF9kbV9jbGtfZGlzYWJsZSh4KQkJY2xrX2Rpc2FibGUoeCkKKyNlbHNlCiAjZGVmaW5lIG9tYXAxX2RtX3RpbWVycwkJCU5VTEwKLSNkZWZpbmUgb21hcDNfZG1fdGltZXJzCQkJTlVMTAotI2RlZmluZSBvbWFwM19kbV9zb3VyY2VfbmFtZXMJCU5VTEwKLSNkZWZpbmUgb21hcDNfZG1fc291cmNlX2Nsb2NrcwkJTlVMTAotI2RlZmluZSBvbWFwNF9kbV90aW1lcnMJCQlOVUxMCi0jZGVmaW5lIG9tYXA0X2RtX3NvdXJjZV9uYW1lcwkJTlVMTAotI2RlZmluZSBvbWFwNF9kbV9zb3VyY2VfY2xvY2tzCQlOVUxMCisjZGVmaW5lIG9tYXAxX2RtX3RpbWVyX2NvdW50CQkwCisjZW5kaWYJLyogQ09ORklHX0FSQ0hfT01BUDEgKi8KIAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCiBzdGF0aWMgc3RydWN0IG9tYXBfZG1fdGltZXIgb21hcDJfZG1fdGltZXJzW10gPSB7CiAJeyAucGh5c19iYXNlID0gMHg0ODAyODAwMCwgLmlycSA9IElOVF8yNFhYX0dQVElNRVIxIH0sCiAJeyAucGh5c19iYXNlID0gMHg0ODAyYTAwMCwgLmlycSA9IElOVF8yNFhYX0dQVElNRVIyIH0sCkBAIC0yMjUsMjAgKzIwNywxNiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgKm9tYXAyX2RtX3NvdXJjZV9jbG9ja3NbM107Ci1zdGF0aWMgY29uc3QgaW50IGRtX3RpbWVyX2NvdW50ID0gQVJSQVlfU0laRShvbWFwMl9kbV90aW1lcnMpOworc3RhdGljIGNvbnN0IGludCBvbWFwMl9kbV90aW1lcl9jb3VudCA9IEFSUkFZX1NJWkUob21hcDJfZG1fdGltZXJzKTsKIAotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKLQotI2RlZmluZSBvbWFwX2RtX2Nsa19lbmFibGUoeCkJCWNsa19lbmFibGUoeCkKLSNkZWZpbmUgb21hcF9kbV9jbGtfZGlzYWJsZSh4KQkJY2xrX2Rpc2FibGUoeCkKLSNkZWZpbmUgb21hcDFfZG1fdGltZXJzCQkJTlVMTAorI2Vsc2UKICNkZWZpbmUgb21hcDJfZG1fdGltZXJzCQkJTlVMTAorI2RlZmluZSBvbWFwMl9kbV90aW1lcl9jb3VudAkJMAogI2RlZmluZSBvbWFwMl9kbV9zb3VyY2VfbmFtZXMJCU5VTEwKICNkZWZpbmUgb21hcDJfZG1fc291cmNlX2Nsb2NrcwkJTlVMTAotI2RlZmluZSBvbWFwNF9kbV90aW1lcnMJCQlOVUxMCi0jZGVmaW5lIG9tYXA0X2RtX3NvdXJjZV9uYW1lcwkJTlVMTAotI2RlZmluZSBvbWFwNF9kbV9zb3VyY2VfY2xvY2tzCQlOVUxMCisjZW5kaWYJLyogQ09ORklHX0FSQ0hfT01BUDIgKi8KIAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCiBzdGF0aWMgc3RydWN0IG9tYXBfZG1fdGltZXIgb21hcDNfZG1fdGltZXJzW10gPSB7CiAJeyAucGh5c19iYXNlID0gMHg0ODMxODAwMCwgLmlycSA9IElOVF8yNFhYX0dQVElNRVIxIH0sCiAJeyAucGh5c19iYXNlID0gMHg0OTAzMjAwMCwgLmlycSA9IElOVF8yNFhYX0dQVElNRVIyIH0sCkBAIC0yNjEsMzMgKzIzOSwyOSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgKm9tYXAzX2RtX3NvdXJjZV9jbG9ja3NbMl07Ci1zdGF0aWMgY29uc3QgaW50IGRtX3RpbWVyX2NvdW50ID0gQVJSQVlfU0laRShvbWFwM19kbV90aW1lcnMpOworc3RhdGljIGNvbnN0IGludCBvbWFwM19kbV90aW1lcl9jb3VudCA9IEFSUkFZX1NJWkUob21hcDNfZG1fdGltZXJzKTsKIAotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKLQotI2RlZmluZSBvbWFwX2RtX2Nsa19lbmFibGUoeCkJCWNsa19lbmFibGUoeCkKLSNkZWZpbmUgb21hcF9kbV9jbGtfZGlzYWJsZSh4KQkJY2xrX2Rpc2FibGUoeCkKLSNkZWZpbmUgb21hcDFfZG1fdGltZXJzCQkJTlVMTAotI2RlZmluZSBvbWFwMl9kbV90aW1lcnMJCQlOVUxMCi0jZGVmaW5lIG9tYXAyX2RtX3NvdXJjZV9uYW1lcwkJTlVMTAotI2RlZmluZSBvbWFwMl9kbV9zb3VyY2VfY2xvY2tzCQlOVUxMCisjZWxzZQogI2RlZmluZSBvbWFwM19kbV90aW1lcnMJCQlOVUxMCisjZGVmaW5lIG9tYXAzX2RtX3RpbWVyX2NvdW50CQkwCiAjZGVmaW5lIG9tYXAzX2RtX3NvdXJjZV9uYW1lcwkJTlVMTAogI2RlZmluZSBvbWFwM19kbV9zb3VyY2VfY2xvY2tzCQlOVUxMCisjZW5kaWYJLyogQ09ORklHX0FSQ0hfT01BUDMgKi8KIAorI2lmZGVmIENPTkZJR19BUkNIX09NQVA0CiBzdGF0aWMgc3RydWN0IG9tYXBfZG1fdGltZXIgb21hcDRfZG1fdGltZXJzW10gPSB7Ci0JeyAucGh5c19iYXNlID0gMHg0YTMxODAwMCwgLmlycSA9IElOVF80NFhYX0dQVElNRVIxIH0sCi0JeyAucGh5c19iYXNlID0gMHg0ODAzMjAwMCwgLmlycSA9IElOVF80NFhYX0dQVElNRVIyIH0sCi0JeyAucGh5c19iYXNlID0gMHg0ODAzNDAwMCwgLmlycSA9IElOVF80NFhYX0dQVElNRVIzIH0sCi0JeyAucGh5c19iYXNlID0gMHg0ODAzNjAwMCwgLmlycSA9IElOVF80NFhYX0dQVElNRVI0IH0sCi0JeyAucGh5c19iYXNlID0gMHg0MDEzODAwMCwgLmlycSA9IElOVF80NFhYX0dQVElNRVI1IH0sCi0JeyAucGh5c19iYXNlID0gMHg0MDEzYTAwMCwgLmlycSA9IElOVF80NFhYX0dQVElNRVI2IH0sCi0JeyAucGh5c19iYXNlID0gMHg0MDEzYTAwMCwgLmlycSA9IElOVF80NFhYX0dQVElNRVI3IH0sCi0JeyAucGh5c19iYXNlID0gMHg0MDEzZTAwMCwgLmlycSA9IElOVF80NFhYX0dQVElNRVI4IH0sCi0JeyAucGh5c19iYXNlID0gMHg0ODAzZTAwMCwgLmlycSA9IElOVF80NFhYX0dQVElNRVI5IH0sCi0JeyAucGh5c19iYXNlID0gMHg0ODA4NjAwMCwgLmlycSA9IElOVF80NFhYX0dQVElNRVIxMCB9LAotCXsgLnBoeXNfYmFzZSA9IDB4NDgwODgwMDAsIC5pcnEgPSBJTlRfNDRYWF9HUFRJTUVSMTEgfSwKLQl7IC5waHlzX2Jhc2UgPSAweDRhMzIwMDAwLCAuaXJxID0gSU5UXzQ0WFhfR1BUSU1FUjEyIH0sCisJeyAucGh5c19iYXNlID0gMHg0YTMxODAwMCwgLmlycSA9IE9NQVA0NFhYX0lSUV9HUFQxIH0sCisJeyAucGh5c19iYXNlID0gMHg0ODAzMjAwMCwgLmlycSA9IE9NQVA0NFhYX0lSUV9HUFQyIH0sCisJeyAucGh5c19iYXNlID0gMHg0ODAzNDAwMCwgLmlycSA9IE9NQVA0NFhYX0lSUV9HUFQzIH0sCisJeyAucGh5c19iYXNlID0gMHg0ODAzNjAwMCwgLmlycSA9IE9NQVA0NFhYX0lSUV9HUFQ0IH0sCisJeyAucGh5c19iYXNlID0gMHg0MDEzODAwMCwgLmlycSA9IE9NQVA0NFhYX0lSUV9HUFQ1IH0sCisJeyAucGh5c19iYXNlID0gMHg0MDEzYTAwMCwgLmlycSA9IE9NQVA0NFhYX0lSUV9HUFQ2IH0sCisJeyAucGh5c19iYXNlID0gMHg0MDEzYTAwMCwgLmlycSA9IE9NQVA0NFhYX0lSUV9HUFQ3IH0sCisJeyAucGh5c19iYXNlID0gMHg0MDEzZTAwMCwgLmlycSA9IE9NQVA0NFhYX0lSUV9HUFQ4IH0sCisJeyAucGh5c19iYXNlID0gMHg0ODAzZTAwMCwgLmlycSA9IE9NQVA0NFhYX0lSUV9HUFQ5IH0sCisJeyAucGh5c19iYXNlID0gMHg0ODA4NjAwMCwgLmlycSA9IE9NQVA0NFhYX0lSUV9HUFQxMCB9LAorCXsgLnBoeXNfYmFzZSA9IDB4NDgwODgwMDAsIC5pcnEgPSBPTUFQNDRYWF9JUlFfR1BUMTEgfSwKKwl7IC5waHlzX2Jhc2UgPSAweDRhMzIwMDAwLCAuaXJxID0gT01BUDQ0WFhfSVJRX0dQVDEyIH0sCiB9Owogc3RhdGljIGNvbnN0IGNoYXIgKm9tYXA0X2RtX3NvdXJjZV9uYW1lc1tdIF9faW5pdGRhdGEgPSB7CiAJInN5c19jayIsCkBAIC0yOTUsMTMgKzI2OSwxNCBAQAogCU5VTEwKIH07CiBzdGF0aWMgc3RydWN0IGNsayAqb21hcDRfZG1fc291cmNlX2Nsb2Nrc1syXTsKLXN0YXRpYyBjb25zdCBpbnQgZG1fdGltZXJfY291bnQgPSBBUlJBWV9TSVpFKG9tYXA0X2RtX3RpbWVycyk7CitzdGF0aWMgY29uc3QgaW50IG9tYXA0X2RtX3RpbWVyX2NvdW50ID0gQVJSQVlfU0laRShvbWFwNF9kbV90aW1lcnMpOwogCiAjZWxzZQotCi0jZXJyb3IgT01BUCBhcmNoaXRlY3R1cmUgbm90IHN1cHBvcnRlZCEKLQotI2VuZGlmCisjZGVmaW5lIG9tYXA0X2RtX3RpbWVycwkJCU5VTEwKKyNkZWZpbmUgb21hcDRfZG1fdGltZXJfY291bnQJCTAKKyNkZWZpbmUgb21hcDRfZG1fc291cmNlX25hbWVzCQlOVUxMCisjZGVmaW5lIG9tYXA0X2RtX3NvdXJjZV9jbG9ja3MJCU5VTEwKKyNlbmRpZgkvKiBDT05GSUdfQVJDSF9PTUFQNCAqLwogCiBzdGF0aWMgc3RydWN0IG9tYXBfZG1fdGltZXIgKmRtX3RpbWVyczsKIHN0YXRpYyBjb25zdCBjaGFyICoqZG1fc291cmNlX25hbWVzOwpAQCAtNDUwLDggKzQyNSwxMiBAQAogCWlmICh0aW1lci0+ZW5hYmxlZCkKIAkJcmV0dXJuOwogCi0Jb21hcF9kbV9jbGtfZW5hYmxlKHRpbWVyLT5mY2xrKTsKLQlvbWFwX2RtX2Nsa19lbmFibGUodGltZXItPmljbGspOworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyUExVUworCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSkgeworCQljbGtfZW5hYmxlKHRpbWVyLT5mY2xrKTsKKwkJY2xrX2VuYWJsZSh0aW1lci0+aWNsayk7CisJfQorI2VuZGlmCiAKIAl0aW1lci0+ZW5hYmxlZCA9IDE7CiB9CkBAIC00NjIsOCArNDQxLDEyIEBACiAJaWYgKCF0aW1lci0+ZW5hYmxlZCkKIAkJcmV0dXJuOwogCi0Jb21hcF9kbV9jbGtfZGlzYWJsZSh0aW1lci0+aWNsayk7Ci0Jb21hcF9kbV9jbGtfZGlzYWJsZSh0aW1lci0+ZmNsayk7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDJQTFVTCisJaWYgKGNwdV9jbGFzc19pc19vbWFwMigpKSB7CisJCWNsa19kaXNhYmxlKHRpbWVyLT5pY2xrKTsKKwkJY2xrX2Rpc2FibGUodGltZXItPmZjbGspOworCX0KKyNlbmRpZgogCiAJdGltZXItPmVuYWJsZWQgPSAwOwogfQpAQCAtNTA2LDggKzQ4OSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChvbWFwX2RtX3RpbWVyX21vZGlmeV9pZGxlY3RfbWFzayk7CiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IFwKLQkJCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2Vsc2UKIAogc3RydWN0IGNsayAqb21hcF9kbV90aW1lcl9nZXRfZmNsayhzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCiB7CkBAIC01NTEsOCArNTMzLDcgQEAKIAlpZiAobCAmIE9NQVBfVElNRVJfQ1RSTF9TVCkgewogCQlsICY9IH4weDE7CiAJCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHLCBsKTsKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBcCi0JCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyUExVUwogCQkvKiBSZWFkYmFjayB0byBtYWtlIHN1cmUgd3JpdGUgaGFzIGNvbXBsZXRlZCAqLwogCQlvbWFwX2RtX3RpbWVyX3JlYWRfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHKTsKIAkJIC8qCkBAIC03NjQsMTcgKzc0NSwyMSBAQAogCiAJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CiAJCWRtX3RpbWVycyA9IG9tYXAxX2RtX3RpbWVyczsKKwkJZG1fdGltZXJfY291bnQgPSBvbWFwMV9kbV90aW1lcl9jb3VudDsKIAkJbWFwX3NpemUgPSBTWl8ySzsKIAl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAJCWRtX3RpbWVycyA9IG9tYXAyX2RtX3RpbWVyczsKKwkJZG1fdGltZXJfY291bnQgPSBvbWFwMl9kbV90aW1lcl9jb3VudDsKIAkJZG1fc291cmNlX25hbWVzID0gb21hcDJfZG1fc291cmNlX25hbWVzOwogCQlkbV9zb3VyY2VfY2xvY2tzID0gb21hcDJfZG1fc291cmNlX2Nsb2NrczsKIAl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCWRtX3RpbWVycyA9IG9tYXAzX2RtX3RpbWVyczsKKwkJZG1fdGltZXJfY291bnQgPSBvbWFwM19kbV90aW1lcl9jb3VudDsKIAkJZG1fc291cmNlX25hbWVzID0gb21hcDNfZG1fc291cmNlX25hbWVzOwogCQlkbV9zb3VyY2VfY2xvY2tzID0gb21hcDNfZG1fc291cmNlX2Nsb2NrczsKIAl9IGVsc2UgaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CiAJCWRtX3RpbWVycyA9IG9tYXA0X2RtX3RpbWVyczsKKwkJZG1fdGltZXJfY291bnQgPSBvbWFwNF9kbV90aW1lcl9jb3VudDsKIAkJZG1fc291cmNlX25hbWVzID0gb21hcDRfZG1fc291cmNlX25hbWVzOwogCQlkbV9zb3VyY2VfY2xvY2tzID0gb21hcDRfZG1fc291cmNlX2Nsb2NrczsKIAl9CkBAIC03OTMsOCArNzc4LDcgQEAKIAkJdGltZXItPmlvX2Jhc2UgPSBpb3JlbWFwKHRpbWVyLT5waHlzX2Jhc2UsIG1hcF9zaXplKTsKIAkJQlVHX09OKCF0aW1lci0+aW9fYmFzZSk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBcCi0JCQkJCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDJQTFVTCiAJCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSkgewogCQkJY2hhciBjbGtfbmFtZVsxNl07CiAJCQlzcHJpbnRmKGNsa19uYW1lLCAiZ3B0JWRfaWNrIiwgaSArIDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKaW5kZXggZDI0MjJjNy4uMzM3MTk5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCkBAIC0xNzcsMTMgKzE3NywxMSBAQAogCXUxNiBpcnE7CiAJdTE2IHZpcnR1YWxfaXJxX3N0YXJ0OwogCWludCBtZXRob2Q7Ci0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgIFwKLQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyUExVUykKIAl1MzIgc3VzcGVuZF93YWtldXA7CiAJdTMyIHNhdmVkX3dha2V1cDsKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IFwKLQkJCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDJQTFVTCiAJdTMyIG5vbl93YWtldXBfZ3Bpb3M7CiAJdTMyIGVuYWJsZWRfbm9uX3dha2V1cF9ncGlvczsKIApAQCAtMjA0LDYgKzIwMiw3IEBACiAjZGVmaW5lIE1FVEhPRF9HUElPXzE2MTAJMgogI2RlZmluZSBNRVRIT0RfR1BJT183WFgJCTMKICNkZWZpbmUgTUVUSE9EX0dQSU9fMjRYWAk1CisjZGVmaW5lIE1FVEhPRF9HUElPXzQ0WFgJNgogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE2WFgKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19iYW5rIGdwaW9fYmFua18xNjEwWzVdID0gewpAQCAtMjQ4LDcgKzI0Nyw3IEBACiB9OwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCiAKIHN0YXRpYyBzdHJ1Y3QgZ3Bpb19iYW5rIGdwaW9fYmFua18yNDJ4WzRdID0gewogCXsgT01BUDI0MlhfR1BJTzFfQkFTRSwgTlVMTCwgSU5UXzI0WFhfR1BJT19CQU5LMSwgSUhfR1BJT19CQVNFLApAQCAtMjc2LDcgKzI3NSw3IEBACiAKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDM0WFgKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwogc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzM0eHhbNl0gPSB7CiAJeyBPTUFQMzRYWF9HUElPMV9CQVNFLCBOVUxMLCBJTlRfMzRYWF9HUElPX0JBTksxLCBJSF9HUElPX0JBU0UsCiAJCU1FVEhPRF9HUElPXzI0WFggfSwKQEAgLTMxMywxOCArMzEyLDE4IEBACiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAogc3RhdGljIHN0cnVjdCBncGlvX2JhbmsgZ3Bpb19iYW5rXzQ0eHhbNl0gPSB7Ci0JeyBPTUFQNDRYWF9HUElPMV9CQVNFLCBOVUxMLCBJTlRfNDRYWF9HUElPX0JBTksxLCBJSF9HUElPX0JBU0UsCi0JCU1FVEhPRF9HUElPXzI0WFggfSwKLQl7IE9NQVA0NFhYX0dQSU8yX0JBU0UsIE5VTEwsIElOVF80NFhYX0dQSU9fQkFOSzIsIElIX0dQSU9fQkFTRSArIDMyLAotCQlNRVRIT0RfR1BJT18yNFhYIH0sCi0JeyBPTUFQNDRYWF9HUElPM19CQVNFLCBOVUxMLCBJTlRfNDRYWF9HUElPX0JBTkszLCBJSF9HUElPX0JBU0UgKyA2NCwKLQkJTUVUSE9EX0dQSU9fMjRYWCB9LAotCXsgT01BUDQ0WFhfR1BJTzRfQkFTRSwgTlVMTCwgSU5UXzQ0WFhfR1BJT19CQU5LNCwgSUhfR1BJT19CQVNFICsgOTYsCi0JCU1FVEhPRF9HUElPXzI0WFggfSwKLQl7IE9NQVA0NFhYX0dQSU81X0JBU0UsIE5VTEwsIElOVF80NFhYX0dQSU9fQkFOSzUsIElIX0dQSU9fQkFTRSArIDEyOCwKLQkJTUVUSE9EX0dQSU9fMjRYWCB9LAotCXsgT01BUDQ0WFhfR1BJTzZfQkFTRSwgTlVMTCwgSU5UXzQ0WFhfR1BJT19CQU5LNiwgSUhfR1BJT19CQVNFICsgMTYwLAotCQlNRVRIT0RfR1BJT18yNFhYIH0sCisJeyBPTUFQNDRYWF9HUElPMV9CQVNFLCBOVUxMLCBPTUFQNDRYWF9JUlFfR1BJTzEsIElIX0dQSU9fQkFTRSwKKwkJTUVUSE9EX0dQSU9fNDRYWCB9LAorCXsgT01BUDQ0WFhfR1BJTzJfQkFTRSwgTlVMTCwgT01BUDQ0WFhfSVJRX0dQSU8yLCBJSF9HUElPX0JBU0UgKyAzMiwKKwkJTUVUSE9EX0dQSU9fNDRYWCB9LAorCXsgT01BUDQ0WFhfR1BJTzNfQkFTRSwgTlVMTCwgT01BUDQ0WFhfSVJRX0dQSU8zLCBJSF9HUElPX0JBU0UgKyA2NCwKKwkJTUVUSE9EX0dQSU9fNDRYWCB9LAorCXsgT01BUDQ0WFhfR1BJTzRfQkFTRSwgTlVMTCwgT01BUDQ0WFhfSVJRX0dQSU80LCBJSF9HUElPX0JBU0UgKyA5NiwKKwkJTUVUSE9EX0dQSU9fNDRYWCB9LAorCXsgT01BUDQ0WFhfR1BJTzVfQkFTRSwgTlVMTCwgT01BUDQ0WFhfSVJRX0dQSU81LCBJSF9HUElPX0JBU0UgKyAxMjgsCisJCU1FVEhPRF9HUElPXzQ0WFggfSwKKwl7IE9NQVA0NFhYX0dQSU82X0JBU0UsIE5VTEwsIE9NQVA0NFhYX0lSUV9HUElPNiwgSUhfR1BJT19CQVNFICsgMTYwLAorCQlNRVRIT0RfR1BJT180NFhYIH0sCiB9OwogCiAjZW5kaWYKQEAgLTQyNiwxMyArNDI1LDEzIEBACiAJCXJlZyArPSBPTUFQN1hYX0dQSU9fRElSX0NPTlRST0w7CiAJCWJyZWFrOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJcmVnICs9IE9NQVAyNFhYX0dQSU9fT0U7CiAJCWJyZWFrOwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKLQljYXNlIE1FVEhPRF9HUElPXzI0WFg6CisJY2FzZSBNRVRIT0RfR1BJT180NFhYOgogCQlyZWcgKz0gT01BUDRfR1BJT19PRTsKIAkJYnJlYWs7CiAjZW5kaWYKQEAgLTQ5Myw3ICs0OTIsNyBAQAogCQkJbCAmPSB+KDEgPDwgZ3Bpbyk7CiAJCWJyZWFrOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJaWYgKGVuYWJsZSkKIAkJCXJlZyArPSBPTUFQMjRYWF9HUElPX1NFVERBVEFPVVQ7CkBAIC01MDMsNyArNTAyLDcgQEAKIAkJYnJlYWs7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAotCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKKwljYXNlIE1FVEhPRF9HUElPXzQ0WFg6CiAJCWlmIChlbmFibGUpCiAJCQlyZWcgKz0gT01BUDRfR1BJT19TRVREQVRBT1VUOwogCQllbHNlCkBAIC01NDYsMTMgKzU0NSwxMyBAQAogCQlyZWcgKz0gT01BUDdYWF9HUElPX0RBVEFfSU5QVVQ7CiAJCWJyZWFrOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJcmVnICs9IE9NQVAyNFhYX0dQSU9fREFUQUlOOwogCQlicmVhazsKICNlbmRpZgogI2lmZGVmIENPTkZJR19BUkNIX09NQVA0Ci0JY2FzZSBNRVRIT0RfR1BJT18yNFhYOgorCWNhc2UgTUVUSE9EX0dQSU9fNDRYWDoKIAkJcmVnICs9IE9NQVA0X0dQSU9fREFUQUlOOwogCQlicmVhazsKICNlbmRpZgpAQCAtNTkyLDkgKzU5MSw5IEBACiAJCXJlZyArPSBPTUFQN1hYX0dQSU9fREFUQV9PVVRQVVQ7CiAJCWJyZWFrOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgXAotCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyUExVUwogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKKwljYXNlIE1FVEhPRF9HUElPXzQ0WFg6CiAJCXJlZyArPSBPTUFQMjRYWF9HUElPX0RBVEFPVVQ7CiAJCWJyZWFrOwogI2VuZGlmCkBAIC02MjUsMTEgKzYyNCwxMiBAQAogCiAJYmFuayA9IGdldF9ncGlvX2JhbmsoZ3Bpbyk7CiAJcmVnID0gYmFuay0+YmFzZTsKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAotCXJlZyArPSBPTUFQNF9HUElPX0RFQk9VTkNFTkFCTEU7Ci0jZWxzZQotCXJlZyArPSBPTUFQMjRYWF9HUElPX0RFQk9VTkNFX0VOOwotI2VuZGlmCisKKwlpZiAoY3B1X2lzX29tYXA0NHh4KCkpCisJCXJlZyArPSBPTUFQNF9HUElPX0RFQk9VTkNFTkFCTEU7CisJZWxzZQorCQlyZWcgKz0gT01BUDI0WFhfR1BJT19ERUJPVU5DRV9FTjsKKwogCWlmICghKGJhbmstPm1vZF91c2FnZSAmIGwpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiR1BJTyAlZCBub3QgcmVxdWVzdGVkXG4iLCBncGlvKTsKIAkJcmV0dXJuOwpAQCAtNjc1LDE3ICs2NzUsMTcgQEAKIAl9CiAKIAllbmNfdGltZSAmPSAweGZmOwotI2lmZGVmIENPTkZJR19BUkNIX09NQVA0Ci0JcmVnICs9IE9NQVA0X0dQSU9fREVCT1VOQ0lOR1RJTUU7Ci0jZWxzZQotCXJlZyArPSBPTUFQMjRYWF9HUElPX0RFQk9VTkNFX1ZBTDsKLSNlbmRpZgorCisJaWYgKGNwdV9pc19vbWFwNDR4eCgpKQorCQlyZWcgKz0gT01BUDRfR1BJT19ERUJPVU5DSU5HVElNRTsKKwllbHNlCisJCXJlZyArPSBPTUFQMjRYWF9HUElPX0RFQk9VTkNFX1ZBTDsKKwogCV9fcmF3X3dyaXRlbChlbmNfdGltZSwgcmVnKTsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9zZXRfZ3Bpb19kZWJvdW5jZV90aW1lKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IFwKLQkJCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyUExVUwogc3RhdGljIGlubGluZSB2b2lkIHNldF8yNHh4X2dwaW9fdHJpZ2dlcmluZyhzdHJ1Y3QgZ3Bpb19iYW5rICpiYW5rLCBpbnQgZ3BpbywKIAkJCQkJCWludCB0cmlnZ2VyKQogewpAQCAtODU2LDkgKzg1Niw5IEBACiAJCQlnb3RvIGJhZDsKIAkJYnJlYWs7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKSB8fCBcCi0JCQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMlBMVVMKIAljYXNlIE1FVEhPRF9HUElPXzI0WFg6CisJY2FzZSBNRVRIT0RfR1BJT180NFhYOgogCQlzZXRfMjR4eF9ncGlvX3RyaWdnZXJpbmcoYmFuaywgZ3BpbywgdHJpZ2dlcik7CiAJCWJyZWFrOwogI2VuZGlmCkBAIC05MzcsMTMgKzkzNywxMyBAQAogCQlyZWcgKz0gT01BUDdYWF9HUElPX0lOVF9TVEFUVVM7CiAJCWJyZWFrOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJcmVnICs9IE9NQVAyNFhYX0dQSU9fSVJRU1RBVFVTMTsKIAkJYnJlYWs7CiAjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKKwljYXNlIE1FVEhPRF9HUElPXzQ0WFg6CiAJCXJlZyArPSBPTUFQNF9HUElPX0lSUVNUQVRVUzA7CiAJCWJyZWFrOwogI2VuZGlmCkBAIC05NTQsMTIgKzk1NCwxMSBAQAogCV9fcmF3X3dyaXRlbChncGlvX21hc2ssIHJlZyk7CiAKIAkvKiBXb3JrYXJvdW5kIGZvciBjbGVhcmluZyBEU1AgR1BJTyBpbnRlcnJ1cHRzIHRvIGFsbG93IHJldGVudGlvbiAqLwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCi0JcmVnID0gYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fSVJRU1RBVFVTMjsKLSNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCi0JcmVnID0gYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fSVJRU1RBVFVTMTsKLSNlbmRpZgorCWlmIChjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkKKwkJcmVnID0gYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fSVJRU1RBVFVTMjsKKwllbHNlIGlmIChjcHVfaXNfb21hcDQ0eHgoKSkKKwkJcmVnID0gYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fSVJRU1RBVFVTMTsKKwogCWlmIChjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSB8fCBjcHVfaXNfb21hcDQ0eHgoKSkgewogCQlfX3Jhd193cml0ZWwoZ3Bpb19tYXNrLCByZWcpOwogCkBAIC0xMDA4LDE0ICsxMDA3LDE0IEBACiAJCWludiA9IDE7CiAJCWJyZWFrOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJcmVnICs9IE9NQVAyNFhYX0dQSU9fSVJRRU5BQkxFMTsKIAkJbWFzayA9IDB4ZmZmZmZmZmY7CiAJCWJyZWFrOwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKLQljYXNlIE1FVEhPRF9HUElPXzI0WFg6CisJY2FzZSBNRVRIT0RfR1BJT180NFhYOgogCQlyZWcgKz0gT01BUDRfR1BJT19JUlFTVEFUVVNTRVQwOwogCQltYXNrID0gMHhmZmZmZmZmZjsKIAkJYnJlYWs7CkBAIC0xMDc3LDcgKzEwNzYsNyBAQAogCQkJbCB8PSBncGlvX21hc2s7CiAJCWJyZWFrOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKIAkJaWYgKGVuYWJsZSkKIAkJCXJlZyArPSBPTUFQMjRYWF9HUElPX1NFVElSUUVOQUJMRTE7CkBAIC0xMDg3LDcgKzEwODYsNyBAQAogCQlicmVhazsKICNlbmRpZgogI2lmZGVmIENPTkZJR19BUkNIX09NQVA0Ci0JY2FzZSBNRVRIT0RfR1BJT18yNFhYOgorCWNhc2UgTUVUSE9EX0dQSU9fNDRYWDoKIAkJaWYgKGVuYWJsZSkKIAkJCXJlZyArPSBPTUFQNF9HUElPX0lSUVNUQVRVU1NFVDA7CiAJCWVsc2UKQEAgLTExMzEsOSArMTEzMCw5IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJhbmstPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIDA7CiAjZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKSB8fCBcCi0JCQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMlBMVVMKIAljYXNlIE1FVEhPRF9HUElPXzI0WFg6CisJY2FzZSBNRVRIT0RfR1BJT180NFhYOgogCQlpZiAoYmFuay0+bm9uX3dha2V1cF9ncGlvcyAmICgxIDw8IGdwaW8pKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBtb2RpZnkgd2FrZXVwIG9uICIKIAkJCQkJIm5vbi13YWtldXAgR1BJTyVkXG4iLApAQCAtMTIyNyw5ICsxMjI2LDkgQEAKIAkJX19yYXdfd3JpdGVsKDEgPDwgb2Zmc2V0LCByZWcpOwogCX0KICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IFwKLQkJCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQotCWlmIChiYW5rLT5tZXRob2QgPT0gTUVUSE9EX0dQSU9fMjRYWCkgeworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyUExVUworCWlmICgoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzI0WFgpIHx8CisJCQkoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzQ0WFgpKSB7CiAJCS8qIERpc2FibGUgd2FrZS11cCBkdXJpbmcgaWRsZSBmb3IgZHluYW1pYyB0aWNrICovCiAJCXZvaWQgX19pb21lbSAqcmVnID0gYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fQ0xFQVJXS1VFTkE7CiAJCV9fcmF3X3dyaXRlbCgxIDw8IG9mZnNldCwgcmVnKTsKQEAgLTEyODYsMTIgKzEyODUsMTIgQEAKIAlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzdYWCkKIAkJaXNyX3JlZyA9IGJhbmstPmJhc2UgKyBPTUFQN1hYX0dQSU9fSU5UX1NUQVRVUzsKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKIAlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzI0WFgpCiAJCWlzcl9yZWcgPSBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19JUlFTVEFUVVMxOwogI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKLQlpZiAoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzI0WFgpCisJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT180NFhYKQogCQlpc3JfcmVnID0gYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fSVJRU1RBVFVTMDsKICNlbmRpZgogCXdoaWxlKDEpIHsKQEAgLTE1NzEsNiArMTU3MCw3IEBACiAJCXJlZyArPSBPTUFQN1hYX0dQSU9fRElSX0NPTlRST0w7CiAJCWJyZWFrOwogCWNhc2UgTUVUSE9EX0dQSU9fMjRYWDoKKwljYXNlIE1FVEhPRF9HUElPXzQ0WFg6CiAJCXJlZyArPSBPTUFQMjRYWF9HUElPX09FOwogCQlicmVhazsKIAl9CkBAIC0xNjMwLDcgKzE2MzAsNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IGluaXRpYWxpemVkOwotI2lmICEoZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMSkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKIHN0YXRpYyBzdHJ1Y3QgY2xrICogZ3Bpb19pY2s7CiAjZW5kaWYKIApAQCAtMTc1Niw3ICsxNzU2LDcgQEAKIAkJYmFua19zaXplID0gU1pfMks7CiAJfQogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0WFgKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgogCWlmIChjcHVfaXNfb21hcDI0MngoKSkgewogCQlncGlvX2JhbmtfY291bnQgPSA0OwogCQlncGlvX2JhbmsgPSBncGlvX2JhbmtfMjQyeDsKQEAgLTE3NjYsNyArMTc2Niw3IEBACiAJCWdwaW9fYmFuayA9IGdwaW9fYmFua18yNDN4OwogCX0KICNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzNFhYCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKIAlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKIAkJZ3Bpb19iYW5rX2NvdW50ID0gT01BUDM0WFhfTlJfR1BJT1M7CiAJCWdwaW9fYmFuayA9IGdwaW9fYmFua18zNHh4OwpAQCAtMTgwOSwzMCArMTgwOSw0MiBAQAogCQkJZ3Bpb19jb3VudCA9IDMyOyAvKiA3eHggaGFzIDMyLWJpdCBHUElPcyAqLwogCQl9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKSB8fCBcCi0JCQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKLQkJaWYgKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT18yNFhYKSB7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDJQTFVTCisJCWlmICgoYmFuay0+bWV0aG9kID09IE1FVEhPRF9HUElPXzI0WFgpIHx8CisJCQkJKGJhbmstPm1ldGhvZCA9PSBNRVRIT0RfR1BJT180NFhYKSkgewogCQkJc3RhdGljIGNvbnN0IHUzMiBub25fd2FrZXVwX2dwaW9zW10gPSB7CiAJCQkJMHhlMjAzZmZjMCwgMHgwODcwMDA0MAogCQkJfTsKLQkJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7Ci0JCQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgYmFuay0+YmFzZSArCi0JCQkJCQlPTUFQNF9HUElPX0lSUVNUQVRVU0NMUjApOwotCQkJX19yYXdfd3JpdGV3KDB4MDAxNSwgYmFuay0+YmFzZSArCi0JCQkJCQlPTUFQNF9HUElPX1NZU0NPTkZJRyk7Ci0JCQlfX3Jhd193cml0ZWwoMHgwMDAwMDAwMCwgYmFuay0+YmFzZSArCi0JCQkJCQkgT01BUDRfR1BJT19ERUJPVU5DRU5BQkxFKTsKLQkJCS8qIEluaXRpYWxpemUgaW50ZXJmYWNlIGNsb2NrIHVuZ2F0ZWQsIG1vZHVsZSBlbmFibGVkICovCi0JCQlfX3Jhd193cml0ZWwoMCwgYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fQ1RSTCk7Ci0JCX0gZWxzZSB7Ci0JCQlfX3Jhd193cml0ZWwoMHgwMDAwMDAwMCwgYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fSVJRRU5BQkxFMSk7Ci0JCQlfX3Jhd193cml0ZWwoMHhmZmZmZmZmZiwgYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fSVJRU1RBVFVTMSk7Ci0JCQlfX3Jhd193cml0ZXcoMHgwMDE1LCBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19TWVNDT05GSUcpOwotCQkJX19yYXdfd3JpdGVsKDB4MDAwMDAwMDAsIGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0RFQk9VTkNFX0VOKTsKIAotCQkJLyogSW5pdGlhbGl6ZSBpbnRlcmZhY2UgY2xvY2sgdW5nYXRlZCwgbW9kdWxlIGVuYWJsZWQgKi8KLQkJCV9fcmF3X3dyaXRlbCgwLCBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19DVFJMKTsKLQkJfQorCQkJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCQkJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGJhbmstPmJhc2UgKworCQkJCQkJT01BUDRfR1BJT19JUlFTVEFUVVNDTFIwKTsKKwkJCQlfX3Jhd193cml0ZXcoMHgwMDE1LCBiYW5rLT5iYXNlICsKKwkJCQkJCU9NQVA0X0dQSU9fU1lTQ09ORklHKTsKKwkJCQlfX3Jhd193cml0ZWwoMHgwMDAwMDAwMCwgYmFuay0+YmFzZSArCisJCQkJCQkgT01BUDRfR1BJT19ERUJPVU5DRU5BQkxFKTsKKwkJCQkvKgorCQkJCSAqIEluaXRpYWxpemUgaW50ZXJmYWNlIGNsb2NrIHVuZ2F0ZWQsCisJCQkJICogbW9kdWxlIGVuYWJsZWQKKwkJCQkgKi8KKwkJCQlfX3Jhd193cml0ZWwoMCwgYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fQ1RSTCk7CisJCQl9IGVsc2UgeworCQkJCV9fcmF3X3dyaXRlbCgweDAwMDAwMDAwLCBiYW5rLT5iYXNlICsKKwkJCQkJCU9NQVAyNFhYX0dQSU9fSVJRRU5BQkxFMSk7CisJCQkJX19yYXdfd3JpdGVsKDB4ZmZmZmZmZmYsIGJhbmstPmJhc2UgKworCQkJCQkJT01BUDI0WFhfR1BJT19JUlFTVEFUVVMxKTsKKwkJCQlfX3Jhd193cml0ZXcoMHgwMDE1LCBiYW5rLT5iYXNlICsKKwkJCQkJCU9NQVAyNFhYX0dQSU9fU1lTQ09ORklHKTsKKwkJCQlfX3Jhd193cml0ZWwoMHgwMDAwMDAwMCwgYmFuay0+YmFzZSArCisJCQkJCQlPTUFQMjRYWF9HUElPX0RFQk9VTkNFX0VOKTsKKworCQkJCS8qCisJCQkJICogSW5pdGlhbGl6ZSBpbnRlcmZhY2UgY2xvY2sgdW5nYXRlZCwKKwkJCQkgKiBtb2R1bGUgZW5hYmxlZAorCQkJCSAqLworCQkJCV9fcmF3X3dyaXRlbCgwLCBiYW5rLT5iYXNlICsKKwkJCQkJCU9NQVAyNFhYX0dQSU9fQ1RSTCk7CisJCQl9CiAJCQlpZiAoaSA8IEFSUkFZX1NJWkUobm9uX3dha2V1cF9ncGlvcykpCiAJCQkJYmFuay0+bm9uX3dha2V1cF9ncGlvcyA9IG5vbl93YWtldXBfZ3Bpb3NbaV07CiAJCQlncGlvX2NvdW50ID0gMzI7CkBAIC0xOTAzLDggKzE5MTUsNyBAQAogCXJldHVybiAwOwogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgXAotCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDJQTFVTKQogc3RhdGljIGludCBvbWFwX2dwaW9fc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbWVzZykKIHsKIAlpbnQgaTsKQEAgLTE5MjcsNyArMTkzOCw3IEBACiAJCQl3YWtlX3NldCA9IGJhbmstPmJhc2UgKyBPTUFQMTYxMF9HUElPX1NFVF9XQUtFVVBFTkE7CiAJCQlicmVhazsKICNlbmRpZgotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKIAkJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgogCQkJd2FrZV9zdGF0dXMgPSBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19XQUtFX0VOOwogCQkJd2FrZV9jbGVhciA9IGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0NMRUFSV0tVRU5BOwpAQCAtMTkzNSw3ICsxOTQ2LDcgQEAKIAkJCWJyZWFrOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKLQkJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgorCQljYXNlIE1FVEhPRF9HUElPXzQ0WFg6CiAJCQl3YWtlX3N0YXR1cyA9IGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX0lSUVdBS0VOMDsKIAkJCXdha2VfY2xlYXIgPSBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19JUlFXQUtFTjA7CiAJCQl3YWtlX3NldCA9IGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX0lSUVdBS0VOMDsKQEAgLTE5NzUsMTQgKzE5ODYsMTQgQEAKIAkJCXdha2Vfc2V0ID0gYmFuay0+YmFzZSArIE9NQVAxNjEwX0dQSU9fU0VUX1dBS0VVUEVOQTsKIAkJCWJyZWFrOwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogCQljYXNlIE1FVEhPRF9HUElPXzI0WFg6CiAJCQl3YWtlX2NsZWFyID0gYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fQ0xFQVJXS1VFTkE7CiAJCQl3YWtlX3NldCA9IGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX1NFVFdLVUVOQTsKIAkJCWJyZWFrOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKLQkJY2FzZSBNRVRIT0RfR1BJT18yNFhYOgorCQljYXNlIE1FVEhPRF9HUElPXzQ0WFg6CiAJCQl3YWtlX2NsZWFyID0gYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fSVJRV0FLRU4wOwogCQkJd2FrZV9zZXQgPSBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19JUlFXQUtFTjA7CiAJCQlicmVhazsKQEAgLTIwMTMsOCArMjAyNCw3IEBACiAKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgXAotCQkJCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDJQTFVTCiAKIHN0YXRpYyBpbnQgd29ya2Fyb3VuZF9lbmFibGVkOwogCkBAIC0yMDMwLDI5ICsyMDQwLDQyIEBACiAKIAkJaWYgKCEoYmFuay0+ZW5hYmxlZF9ub25fd2FrZXVwX2dwaW9zKSkKIAkJCWNvbnRpbnVlOwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCi0JCWJhbmstPnNhdmVkX2RhdGFpbiA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0RBVEFJTik7Ci0JCWwxID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fRkFMTElOR0RFVEVDVCk7Ci0JCWwyID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fUklTSU5HREVURUNUKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX09NQVA0Ci0JCWJhbmstPnNhdmVkX2RhdGFpbiA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKwotCQkJCQkJCU9NQVA0X0dQSU9fREFUQUlOKTsKLQkJbDEgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDRfR1BJT19GQUxMSU5HREVURUNUKTsKLQkJbDIgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDRfR1BJT19SSVNJTkdERVRFQ1QpOwotI2VuZGlmCisKKwkJaWYgKGNwdV9pc19vbWFwMjR4eCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCQliYW5rLT5zYXZlZF9kYXRhaW4gPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsKKwkJCQkJT01BUDI0WFhfR1BJT19EQVRBSU4pOworCQkJbDEgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsKKwkJCQkJT01BUDI0WFhfR1BJT19GQUxMSU5HREVURUNUKTsKKwkJCWwyID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArCisJCQkJCU9NQVAyNFhYX0dQSU9fUklTSU5HREVURUNUKTsKKwkJfQorCisJCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgeworCQkJYmFuay0+c2F2ZWRfZGF0YWluID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArCisJCQkJCQlPTUFQNF9HUElPX0RBVEFJTik7CisJCQlsMSA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKworCQkJCQkJT01BUDRfR1BJT19GQUxMSU5HREVURUNUKTsKKwkJCWwyID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArCisJCQkJCQlPTUFQNF9HUElPX1JJU0lOR0RFVEVDVCk7CisJCX0KKwogCQliYW5rLT5zYXZlZF9mYWxsaW5nZGV0ZWN0ID0gbDE7CiAJCWJhbmstPnNhdmVkX3Jpc2luZ2RldGVjdCA9IGwyOwogCQlsMSAmPSB+YmFuay0+ZW5hYmxlZF9ub25fd2FrZXVwX2dwaW9zOwogCQlsMiAmPSB+YmFuay0+ZW5hYmxlZF9ub25fd2FrZXVwX2dwaW9zOwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCi0JCV9fcmF3X3dyaXRlbChsMSwgYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fRkFMTElOR0RFVEVDVCk7Ci0JCV9fcmF3X3dyaXRlbChsMiwgYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fUklTSU5HREVURUNUKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX09NQVA0Ci0JCV9fcmF3X3dyaXRlbChsMSwgYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fRkFMTElOR0RFVEVDVCk7Ci0JCV9fcmF3X3dyaXRlbChsMiwgYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fUklTSU5HREVURUNUKTsKLSNlbmRpZgorCisJCWlmIChjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkgeworCQkJX19yYXdfd3JpdGVsKGwxLCBiYW5rLT5iYXNlICsKKwkJCQkJT01BUDI0WFhfR1BJT19GQUxMSU5HREVURUNUKTsKKwkJCV9fcmF3X3dyaXRlbChsMiwgYmFuay0+YmFzZSArCisJCQkJCU9NQVAyNFhYX0dQSU9fUklTSU5HREVURUNUKTsKKwkJfQorCisJCWlmIChjcHVfaXNfb21hcDQ0eHgoKSkgeworCQkJX19yYXdfd3JpdGVsKGwxLCBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19GQUxMSU5HREVURUNUKTsKKwkJCV9fcmF3X3dyaXRlbChsMiwgYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fUklTSU5HREVURUNUKTsKKwkJfQorCiAJCWMrKzsKIAl9CiAJaWYgKCFjKSB7CkBAIC0yMDc0LDIwICsyMDk3LDIzIEBACiAKIAkJaWYgKCEoYmFuay0+ZW5hYmxlZF9ub25fd2FrZXVwX2dwaW9zKSkKIAkJCWNvbnRpbnVlOwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCi0JCV9fcmF3X3dyaXRlbChiYW5rLT5zYXZlZF9mYWxsaW5nZGV0ZWN0LAorCisJCWlmIChjcHVfaXNfb21hcDI0eHgoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSkgeworCQkJX19yYXdfd3JpdGVsKGJhbmstPnNhdmVkX2ZhbGxpbmdkZXRlY3QsCiAJCQkJIGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0ZBTExJTkdERVRFQ1QpOwotCQlfX3Jhd193cml0ZWwoYmFuay0+c2F2ZWRfcmlzaW5nZGV0ZWN0LAorCQkJX19yYXdfd3JpdGVsKGJhbmstPnNhdmVkX3Jpc2luZ2RldGVjdCwKIAkJCQkgYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fUklTSU5HREVURUNUKTsKLQkJbCA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0RBVEFJTik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQNAotCQlfX3Jhd193cml0ZWwoYmFuay0+c2F2ZWRfZmFsbGluZ2RldGVjdCwKKwkJCWwgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19EQVRBSU4pOworCQl9CisKKwkJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCQlfX3Jhd193cml0ZWwoYmFuay0+c2F2ZWRfZmFsbGluZ2RldGVjdCwKIAkJCQkgYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fRkFMTElOR0RFVEVDVCk7Ci0JCV9fcmF3X3dyaXRlbChiYW5rLT5zYXZlZF9yaXNpbmdkZXRlY3QsCisJCQlfX3Jhd193cml0ZWwoYmFuay0+c2F2ZWRfcmlzaW5nZGV0ZWN0LAogCQkJCSBiYW5rLT5iYXNlICsgT01BUDRfR1BJT19SSVNJTkdERVRFQ1QpOwotCQlsID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArIE9NQVA0X0dQSU9fREFUQUlOKTsKLSNlbmRpZgorCQkJbCA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKyBPTUFQNF9HUElPX0RBVEFJTik7CisJCX0KKwogCQkvKiBDaGVjayBpZiBhbnkgb2YgdGhlIG5vbi13YWtldXAgaW50ZXJydXB0IEdQSU9zIGhhdmUgY2hhbmdlZAogCQkgKiBzdGF0ZS4gIElmIHNvLCBnZW5lcmF0ZSBhbiBJUlEgYnkgc29mdHdhcmUuICBUaGlzIGlzCiAJCSAqIGhvcnJpYmx5IHJhY3ksIGJ1dCBpdCdzIHRoZSBiZXN0IHdlIGNhbiBkbyB0byB3b3JrIGFyb3VuZApAQCAtMjExMywzMCArMjEzOSwzNiBAQAogCiAJCWlmIChnZW4pIHsKIAkJCXUzMiBvbGQwLCBvbGQxOwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCi0JCQlvbGQwID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QwKTsKLQkJCW9sZDEgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDEpOworCisJCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkgfHwgY3B1X2lzX29tYXA0NHh4KCkpIHsKKwkJCQlvbGQwID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArCisJCQkJCU9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QwKTsKKwkJCQlvbGQxID0gX19yYXdfcmVhZGwoYmFuay0+YmFzZSArCisJCQkJCU9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QxKTsKIAkJCV9fcmF3X3dyaXRlbChvbGQwIHwgZ2VuLCBiYW5rLT5iYXNlICsKIAkJCQkJT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDApOwogCQkJX19yYXdfd3JpdGVsKG9sZDEgfCBnZW4sIGJhbmstPmJhc2UgKwogCQkJCQlPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMSk7Ci0JCQlfX3Jhd193cml0ZWwob2xkMCwgYmFuay0+YmFzZSArIE9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QwKTsKLQkJCV9fcmF3X3dyaXRlbChvbGQxLCBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19MRVZFTERFVEVDVDEpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKLQkJCW9sZDAgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsKLQkJCQkJCU9NQVA0X0dQSU9fTEVWRUxERVRFQ1QwKTsKLQkJCW9sZDEgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsKLQkJCQkJCU9NQVA0X0dQSU9fTEVWRUxERVRFQ1QxKTsKLQkJCV9fcmF3X3dyaXRlbChvbGQwIHwgbCwgYmFuay0+YmFzZSArCi0JCQkJCQlPTUFQNF9HUElPX0xFVkVMREVURUNUMCk7Ci0JCQlfX3Jhd193cml0ZWwob2xkMSB8IGwsIGJhbmstPmJhc2UgKwotCQkJCQkJT01BUDRfR1BJT19MRVZFTERFVEVDVDEpOwogCQkJX19yYXdfd3JpdGVsKG9sZDAsIGJhbmstPmJhc2UgKwotCQkJCQkJT01BUDRfR1BJT19MRVZFTERFVEVDVDApOworCQkJCQlPTUFQMjRYWF9HUElPX0xFVkVMREVURUNUMCk7CiAJCQlfX3Jhd193cml0ZWwob2xkMSwgYmFuay0+YmFzZSArCisJCQkJCU9NQVAyNFhYX0dQSU9fTEVWRUxERVRFQ1QxKTsKKwkJCX0KKworCQkJaWYgKGNwdV9pc19vbWFwNDR4eCgpKSB7CisJCQkJb2xkMCA9IF9fcmF3X3JlYWRsKGJhbmstPmJhc2UgKworCQkJCQkJT01BUDRfR1BJT19MRVZFTERFVEVDVDApOworCQkJCW9sZDEgPSBfX3Jhd19yZWFkbChiYW5rLT5iYXNlICsKIAkJCQkJCU9NQVA0X0dQSU9fTEVWRUxERVRFQ1QxKTsKLSNlbmRpZgorCQkJCV9fcmF3X3dyaXRlbChvbGQwIHwgbCwgYmFuay0+YmFzZSArCisJCQkJCQlPTUFQNF9HUElPX0xFVkVMREVURUNUMCk7CisJCQkJX19yYXdfd3JpdGVsKG9sZDEgfCBsLCBiYW5rLT5iYXNlICsKKwkJCQkJCU9NQVA0X0dQSU9fTEVWRUxERVRFQ1QxKTsKKwkJCQlfX3Jhd193cml0ZWwob2xkMCwgYmFuay0+YmFzZSArCisJCQkJCQlPTUFQNF9HUElPX0xFVkVMREVURUNUMCk7CisJCQkJX19yYXdfd3JpdGVsKG9sZDEsIGJhbmstPmJhc2UgKworCQkJCQkJT01BUDRfR1BJT19MRVZFTERFVEVDVDEpOworCQkJfQogCQl9CiAJfQogCkBAIC0yMTQ0LDcgKzIxNzYsNyBAQAogCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzNFhYCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKIC8qIHNhdmUgdGhlIHJlZ2lzdGVycyBvZiBiYW5rIDItNiAqLwogdm9pZCBvbWFwX2dwaW9fc2F2ZV9jb250ZXh0KHZvaWQpCiB7CkBAIC0yMjQwLDggKzIyNzIsNyBAQAogCiAJbXB1aW9faW5pdCgpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgXAotCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDE2WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDJQTFVTKQogCWlmIChjcHVfaXNfb21hcDE2eHgoKSB8fCBjcHVfY2xhc3NfaXNfb21hcDIoKSkgewogCQlpZiAocmV0ID09IDApIHsKIAkJCXJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3Rlcigmb21hcF9ncGlvX3N5c2NsYXNzKTsKQEAgLTIzMDAsOCArMjMzMSw3IEBACiAvKiBGSVhNRSBmb3IgYXQgbGVhc3Qgb21hcDIsIHNob3cgcHVsbHVwL3B1bGxkb3duIHN0YXRlICovCiAKIAkJCWlycXN0YXQgPSBpcnFfZGVzY1tpcnFdLnN0YXR1czsKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxNlhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fAlcCi0JCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMTZYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMlBMVVMpCiAJCQlpZiAoaXNfaW4gJiYgKChiYW5rLT5zdXNwZW5kX3dha2V1cCAmIG1hc2spCiAJCQkJCXx8IGlycXN0YXQgJiBJUlFfVFlQRV9TRU5TRV9NQVNLKSkgewogCQkJCWNoYXIJKnRyaWdnZXIgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2kyYy5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2kyYy5jCmluZGV4IDMzZmZmNGUuLjYyNGUyNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pMmMuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaTJjLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxtYWNoL2lycXMuaD4KICNpbmNsdWRlIDxwbGF0L211eC5oPgorI2luY2x1ZGUgPHBsYXQvaTJjLmg+CiAKICNkZWZpbmUgT01BUF9JMkNfU0laRQkJMHgzZgogI2RlZmluZSBPTUFQMV9JMkNfQkFTRQkJMHhmZmZiMzgwMApAQCAtNTAsMTAgKzUxLDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaTJjX3Jlc291cmNlc1tdWzJdID0gewogCXsgSTJDX1JFU09VUkNFX0JVSUxERVIoMCwgMCkgfSwKLSNpZglkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAJeyBJMkNfUkVTT1VSQ0VfQlVJTERFUihPTUFQMl9JMkNfQkFTRTIsIElOVF8yNFhYX0kyQzJfSVJRKSB9LAogI2VuZGlmCi0jaWYJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKyNpZglkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogCXsgSTJDX1JFU09VUkNFX0JVSUxERVIoT01BUDJfSTJDX0JBU0UzLCBJTlRfMzRYWF9JMkMzX0lSUSkgfSwKICNlbmRpZgogfTsKQEAgLTcyLDEwICs3MywxMCBAQAogc3RhdGljIHUzMiBpMmNfcmF0ZVtBUlJBWV9TSVpFKGkyY19yZXNvdXJjZXMpXTsKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG9tYXBfaTJjX2RldmljZXNbXSA9IHsKIAlJMkNfREVWX0JVSUxERVIoMSwgaTJjX3Jlc291cmNlc1swXSwgJmkyY19yYXRlWzBdKSwKLSNpZglkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAJSTJDX0RFVl9CVUlMREVSKDIsIGkyY19yZXNvdXJjZXNbMV0sICZpMmNfcmF0ZVsxXSksCiAjZW5kaWYKLSNpZglkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAJSTJDX0RFVl9CVUlMREVSKDMsIGkyY19yZXNvdXJjZXNbMl0sICZpMmNfcmF0ZVsyXSksCiAjZW5kaWYKIH07CkBAIC0xMTcsNiArMTE4LDExIEBACiAJCXJlc1sxXS5zdGFydCA9IGlycTsKIAl9CiAKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpCisJCW9tYXAxX2kyY19tdXhfcGlucyhidXNfaWQpOworCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSkKKwkJb21hcDJfaTJjX211eF9waW5zKGJ1c19pZCk7CisKIAlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKHBkZXYpOwogfQogCkBAIC0xNjksNyArMTc1LDcgQEAKIHN1YnN5c19pbml0Y2FsbChvbWFwX3JlZ2lzdGVyX2kyY19idXNfY21kbGluZSk7CiAKIC8qKgotICogb21hcF9wbGF0X3JlZ2lzdGVyX2kyY19idXMgLSByZWdpc3RlciBJMkMgYnVzIHdpdGggZGV2aWNlIGRlc2NyaXB0b3JzCisgKiBvbWFwX3JlZ2lzdGVyX2kyY19idXMgLSByZWdpc3RlciBJMkMgYnVzIHdpdGggZGV2aWNlIGRlc2NyaXB0b3JzCiAgKiBAYnVzX2lkOiBidXMgaWQgY291bnRpbmcgZnJvbSBudW1iZXIgMQogICogQGNsa3JhdGU6IGNsb2NrIHJhdGUgb2YgdGhlIGJ1cyBpbiBrSHoKICAqIEBpbmZvOiBwb2ludGVyIGludG8gSTJDIGRldmljZSBkZXNjcmlwdG9yIHRhYmxlIG9yIE5VTEwKQEAgLTE3Nyw3ICsxODMsNyBAQAogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzIG9yIGFuIGVycm9yIGNvZGUuCiAgKi8KLWludCBfX2luaXQgb21hcF9wbGF0X3JlZ2lzdGVyX2kyY19idXMoaW50IGJ1c19pZCwgdTMyIGNsa3JhdGUsCitpbnQgX19pbml0IG9tYXBfcmVnaXN0ZXJfaTJjX2J1cyhpbnQgYnVzX2lkLCB1MzIgY2xrcmF0ZSwKIAkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvIGNvbnN0ICppbmZvLAogCQkJICB1bnNpZ25lZCBsZW4pCiB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Nsa2Rldl9vbWFwLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Nsa2Rldl9vbWFwLmgKaW5kZXggMzViMzZjYS4uYmI5MzdmMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jbGtkZXZfb21hcC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xrZGV2X29tYXAuaApAQCAtMjUsMTcgKzI1LDI1IEBACiAJCX0sCQkJXAogCX0KIAotCisvKiBQbGF0Zm9ybSBmbGFncyBmb3IgdGhlIGNsa2Rldi1PTUFQIGludGVncmF0aW9uIGNvZGUgKi8KICNkZWZpbmUgQ0tfMzEwCQkoMSA8PCAwKQotI2RlZmluZSBDS183WFgJCSgxIDw8IDEpCisjZGVmaW5lIENLXzdYWAkJKDEgPDwgMSkJLyogN3h4LCA4NTAgKi8KICNkZWZpbmUgQ0tfMTUxMAkJKDEgPDwgMikKLSNkZWZpbmUgQ0tfMTZYWAkJKDEgPDwgMykKLSNkZWZpbmUgQ0tfMjQzWAkJKDEgPDwgNCkKLSNkZWZpbmUgQ0tfMjQyWAkJKDEgPDwgNSkKLSNkZWZpbmUgQ0tfMzQzWAkJKDEgPDwgNikKLSNkZWZpbmUgQ0tfMzQzMEVTMQkoMSA8PCA3KQotI2RlZmluZSBDS18zNDMwRVMyCSgxIDw8IDgpCi0jZGVmaW5lIENLXzQ0M1gJCSgxIDw8IDkpCisjZGVmaW5lIENLXzE2WFgJCSgxIDw8IDMpCS8qIDE2eHgsIDE3eHgsIDU5MTIgKi8KKyNkZWZpbmUgQ0tfMjQyWAkJKDEgPDwgNCkKKyNkZWZpbmUgQ0tfMjQzWAkJKDEgPDwgNSkKKyNkZWZpbmUgQ0tfM1hYWAkJKDEgPDwgNikJLyogT01BUDMgKyBBTTMgY29tbW9uIGNsb2NrcyovCisjZGVmaW5lIENLXzM0M1gJCSgxIDw8IDcpCS8qIE9NQVAzNHh4IGNvbW1vbiBjbG9ja3MgKi8KKyNkZWZpbmUgQ0tfMzQzMEVTMQkoMSA8PCA4KQkvKiAzNHh4RVMxIG9ubHkgKi8KKyNkZWZpbmUgQ0tfMzQzMEVTMgkoMSA8PCA5KQkvKiAzNHh4RVMyLCBFUzMsIG5vbi1TaXRhcmEgMzV4eCBvbmx5ICovCisjZGVmaW5lIENLXzM1MDUJCSgxIDw8IDEwKQorI2RlZmluZSBDS18zNTE3CQkoMSA8PCAxMSkKKyNkZWZpbmUgQ0tfMzZYWAkJKDEgPDwgMTIpCS8qIE9NQVAzNnh4LzM3eHgtc3BlY2lmaWMgY2xvY2tzICovCisjZGVmaW5lIENLXzQ0M1gJCSgxIDw8IDEzKQorCisjZGVmaW5lIENLX0FNMzVYWAkoQ0tfMzUwNSB8IENLXzM1MTcpCS8qIGFsbCBTaXRhcmEgQU0zNXh4ICovCisKKwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jbG9jay5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jbG9jay5oCmluZGV4IDk0ZmUyYTAuLjM0ZjdmYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xvY2suaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKQEAgLTEsOSArMSw5IEBACiAvKgotICogIGFyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL21hY2gvY2xvY2suaAorICogT01BUCBjbG9jazogZGF0YSBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMsIGZ1bmN0aW9uIHByb3RvdHlwZXMsIHNoYXJlZCBtYWNyb3MKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNSBOb2tpYSBjb3Jwb3JhdGlvbgotICogIFdyaXR0ZW4gYnkgVHV1a2thIFRpa2thbmVuIDx0dXVra2EudGlra2FuZW5AZWxla3Ryb2JpdC5jb20+Ci0gKiAgQmFzZWQgb24gY2xvY2tzLmggYnkgVG9ueSBMaW5kZ3JlbiwgR29yZG9uIE1jTnV0dCBhbmQgUmlkZ2VSdW4sIEluYworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUsIDIwMDgtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICogV3JpdHRlbiBieSBUdXVra2EgVGlra2FuZW4gPHR1dWtrYS50aWtrYW5lbkBlbGVrdHJvYml0LmNvbT4KKyAqIEJhc2VkIG9uIGNsb2Nrcy5oIGJ5IFRvbnkgTGluZGdyZW4sIEdvcmRvbiBNY051dHQgYW5kIFJpZGdlUnVuLCBJbmMKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTIyLDEyICsyMiwxMyBAQAogc3RydWN0IGNsa29wcyB7CiAJaW50CQkJKCplbmFibGUpKHN0cnVjdCBjbGsgKik7CiAJdm9pZAkJCSgqZGlzYWJsZSkoc3RydWN0IGNsayAqKTsKLQl2b2lkCQkJKCpmaW5kX2lkbGVzdCkoc3RydWN0IGNsayAqLCB2b2lkIF9faW9tZW0gKiosIHU4ICopOwotCXZvaWQJCQkoKmZpbmRfY29tcGFuaW9uKShzdHJ1Y3QgY2xrICosIHZvaWQgX19pb21lbSAqKiwgdTggKik7CisJdm9pZAkJCSgqZmluZF9pZGxlc3QpKHN0cnVjdCBjbGsgKiwgdm9pZCBfX2lvbWVtICoqLAorCQkJCQkgICAgICAgdTggKiwgdTggKik7CisJdm9pZAkJCSgqZmluZF9jb21wYW5pb24pKHN0cnVjdCBjbGsgKiwgdm9pZCBfX2lvbWVtICoqLAorCQkJCQkJICB1OCAqKTsKIH07CiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBcCi0JCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDJQTFVTCiAKIHN0cnVjdCBjbGtzZWxfcmF0ZSB7CiAJdTMyCQkJdmFsOwpAQCAtNDAsNiArNDEsNTAgQEAKIAljb25zdCBzdHJ1Y3QgY2xrc2VsX3JhdGUgKnJhdGVzOwogfTsKIAorLyoqCisgKiBzdHJ1Y3QgZHBsbF9kYXRhIC0gRFBMTCByZWdpc3RlcnMgYW5kIGludGVncmF0aW9uIGRhdGEKKyAqIEBtdWx0X2RpdjFfcmVnOiByZWdpc3RlciBjb250YWluaW5nIHRoZSBEUExMIE0gYW5kIE4gYml0ZmllbGRzCisgKiBAbXVsdF9tYXNrOiBtYXNrIG9mIHRoZSBEUExMIE0gYml0ZmllbGQgaW4gQG11bHRfZGl2MV9yZWcKKyAqIEBkaXYxX21hc2s6IG1hc2sgb2YgdGhlIERQTEwgTiBiaXRmaWVsZCBpbiBAbXVsdF9kaXYxX3JlZworICogQGNsa19ieXBhc3M6IHN0cnVjdCBjbGsgcG9pbnRlciB0byB0aGUgY2xvY2sncyBieXBhc3MgY2xvY2sgaW5wdXQKKyAqIEBjbGtfcmVmOiBzdHJ1Y3QgY2xrIHBvaW50ZXIgdG8gdGhlIGNsb2NrJ3MgcmVmZXJlbmNlIGNsb2NrIGlucHV0CisgKiBAY29udHJvbF9yZWc6IHJlZ2lzdGVyIGNvbnRhaW5pbmcgdGhlIERQTEwgbW9kZSBiaXRmaWVsZAorICogQGVuYWJsZV9tYXNrOiBtYXNrIG9mIHRoZSBEUExMIG1vZGUgYml0ZmllbGQgaW4gQGNvbnRyb2xfcmVnCisgKiBAcmF0ZV90b2xlcmFuY2U6IG1heGltdW0gdmFyaWFuY2UgYWxsb3dlZCBmcm9tIHRhcmdldCByYXRlIChpbiBIeikKKyAqIEBsYXN0X3JvdW5kZWRfcmF0ZTogY2FjaGUgb2YgdGhlIGxhc3QgcmF0ZSByZXN1bHQgb2Ygb21hcDJfZHBsbF9yb3VuZF9yYXRlKCkKKyAqIEBsYXN0X3JvdW5kZWRfbTogY2FjaGUgb2YgdGhlIGxhc3QgTSByZXN1bHQgb2Ygb21hcDJfZHBsbF9yb3VuZF9yYXRlKCkKKyAqIEBtYXhfbXVsdGlwbGllcjogbWF4aW11bSB2YWxpZCBub24tYnlwYXNzIG11bHRpcGxpZXIgdmFsdWUgKGFjdHVhbCkKKyAqIEBsYXN0X3JvdW5kZWRfbjogY2FjaGUgb2YgdGhlIGxhc3QgTiByZXN1bHQgb2Ygb21hcDJfZHBsbF9yb3VuZF9yYXRlKCkKKyAqIEBtaW5fZGl2aWRlcjogbWluaW11bSB2YWxpZCBub24tYnlwYXNzIGRpdmlkZXIgdmFsdWUgKGFjdHVhbCkKKyAqIEBtYXhfZGl2aWRlcjogbWF4aW11bSB2YWxpZCBub24tYnlwYXNzIGRpdmlkZXIgdmFsdWUgKGFjdHVhbCkKKyAqIEBtb2RlczogcG9zc2libGUgdmFsdWVzIG9mIEBlbmFibGVfbWFzaworICogQGF1dG9pZGxlX3JlZzogcmVnaXN0ZXIgY29udGFpbmluZyB0aGUgRFBMTCBhdXRvaWRsZSBtb2RlIGJpdGZpZWxkCisgKiBAaWRsZXN0X3JlZzogcmVnaXN0ZXIgY29udGFpbmluZyB0aGUgRFBMTCBpZGxlIHN0YXR1cyBiaXRmaWVsZAorICogQGF1dG9pZGxlX21hc2s6IG1hc2sgb2YgdGhlIERQTEwgYXV0b2lkbGUgbW9kZSBiaXRmaWVsZCBpbiBAYXV0b2lkbGVfcmVnCisgKiBAZnJlcXNlbF9tYXNrOiBtYXNrIG9mIHRoZSBEUExMIGppdHRlciBjb3JyZWN0aW9uIGJpdGZpZWxkIGluIEBjb250cm9sX3JlZworICogQGlkbGVzdF9tYXNrOiBtYXNrIG9mIHRoZSBEUExMIGlkbGUgc3RhdHVzIGJpdGZpZWxkIGluIEBpZGxlc3RfcmVnCisgKiBAYXV0b19yZWNhbF9iaXQ6IGJpdHNoaWZ0IG9mIHRoZSBkcmlmdGd1YXJkIGVuYWJsZSBiaXQgaW4gQGNvbnRyb2xfcmVnCisgKiBAcmVjYWxfZW5fYml0OiBiaXRzaGlmdCBvZiB0aGUgUFJNX0lSUUVOQUJMRV8qIGJpdCBmb3IgcmVjYWxpYnJhdGlvbiBJUlFzCisgKiBAcmVjYWxfc3RfYml0OiBiaXRzaGlmdCBvZiB0aGUgUFJNX0lSUVNUQVRVU18qIGJpdCBmb3IgcmVjYWxpYnJhdGlvbiBJUlFzCisgKiBAZmxhZ3M6IERQTEwgdHlwZS9mZWF0dXJlcyAoc2VlIGJlbG93KQorICoKKyAqIFBvc3NpYmxlIHZhbHVlcyBmb3IgQGZsYWdzOgorICogRFBMTF9KX1RZUEU6ICJKLXR5cGUgRFBMTCIgKG9ubHkgc29tZSAzNnh4LCA0eHh4IERQTExzKQorICogTk9fRENPX1NFTDogZG9uJ3QgcHJvZ3JhbSBEQ08gKG9ubHkgZm9yIHNvbWUgSi10eXBlIERQTExzKQorCisgKiBAZnJlcXNlbF9tYXNrIGlzIG9ubHkgdXNlZCBvbiB0aGUgT01BUDM0eHggZmFtaWx5IGFuZCBBTTM1eHguCisgKgorICogWFhYIFNvbWUgRFBMTHMgaGF2ZSBtdWx0aXBsZSBieXBhc3MgaW5wdXRzLCBzbyBpdCdzIG5vdCB0ZWNobmljYWxseQorICogY29ycmVjdCB0byBvbmx5IGhhdmUgb25lIEBjbGtfYnlwYXNzIHBvaW50ZXIuCisgKgorICogWFhYIEByYXRlX3RvbGVyYW5jZSBzaG91bGQgcHJvYmFibHkgYmUgZGVwcmVjYXRlZCAtIGN1cnJlbnRseSB0aGVyZQorICogZG9uJ3Qgc2VlbSB0byBiZSBhbnkgdXNlY2FzZXMgZm9yIERQTEwgcm91bmRpbmcgdGhhdCBpcyBub3QgZXhhY3QuCisgKgorICogWFhYIFRoZSBydW50aW1lLXZhcmlhYmxlIGZpZWxkcyAoQGxhc3Rfcm91bmRlZF9yYXRlLCBAbGFzdF9yb3VuZGVkX20sCisgKiBAbGFzdF9yb3VuZGVkX24pIHNob3VsZCBiZSBzZXBhcmF0ZWQgZnJvbSB0aGUgcnVudGltZS1maXhlZCBmaWVsZHMKKyAqIGFuZCBwbGFjZWQgaW50byBhIGRpZmZlcmVuY3Qgc3RydWN0dXJlLCBzbyB0aGF0IHRoZSBydW50aW1lLWZpeGVkIGRhdGEKKyAqIGNhbiBiZSBwbGFjZWQgaW50byByZWFkLW9ubHkgc3BhY2UuCisgKi8KIHN0cnVjdCBkcGxsX2RhdGEgewogCXZvaWQgX19pb21lbQkJKm11bHRfZGl2MV9yZWc7CiAJdTMyCQkJbXVsdF9tYXNrOwpAQCAtNTEsMTMgKzk2LDEyIEBACiAJdW5zaWduZWQgaW50CQlyYXRlX3RvbGVyYW5jZTsKIAl1bnNpZ25lZCBsb25nCQlsYXN0X3JvdW5kZWRfcmF0ZTsKIAl1MTYJCQlsYXN0X3JvdW5kZWRfbTsKKwl1MTYJCQltYXhfbXVsdGlwbGllcjsKIAl1OAkJCWxhc3Rfcm91bmRlZF9uOwogCXU4CQkJbWluX2RpdmlkZXI7CiAJdTgJCQltYXhfZGl2aWRlcjsKLQl1MzIJCQltYXhfdG9sZXJhbmNlOwotCXUxNgkJCW1heF9tdWx0aXBsaWVyOwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCiAJdTgJCQltb2RlczsKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQogCXZvaWQgX19pb21lbQkJKmF1dG9pZGxlX3JlZzsKIAl2b2lkIF9faW9tZW0JCSppZGxlc3RfcmVnOwogCXUzMgkJCWF1dG9pZGxlX21hc2s7CkBAIC02Niw2ICsxMTAsNyBAQAogCXU4CQkJYXV0b19yZWNhbF9iaXQ7CiAJdTgJCQlyZWNhbF9lbl9iaXQ7CiAJdTgJCQlyZWNhbF9zdF9iaXQ7CisJdTgJCQlmbGFnczsKICMgIGVuZGlmCiB9OwogCkBAIC03NSwxMiArMTIwLDEwIEBACiAJc3RydWN0IGxpc3RfaGVhZAlub2RlOwogCWNvbnN0IHN0cnVjdCBjbGtvcHMJKm9wczsKIAljb25zdCBjaGFyCQkqbmFtZTsKLQlpbnQJCQlpZDsKIAlzdHJ1Y3QgY2xrCQkqcGFyZW50OwogCXN0cnVjdCBsaXN0X2hlYWQJY2hpbGRyZW47CiAJc3RydWN0IGxpc3RfaGVhZAlzaWJsaW5nOwkvKiBub2RlIGZvciBjaGlsZHJlbiAqLwogCXVuc2lnbmVkIGxvbmcJCXJhdGU7Ci0JX191MzIJCQlmbGFnczsKIAl2b2lkIF9faW9tZW0JCSplbmFibGVfcmVnOwogCXVuc2lnbmVkIGxvbmcJCSgqcmVjYWxjKShzdHJ1Y3QgY2xrICopOwogCWludAkJCSgqc2V0X3JhdGUpKHN0cnVjdCBjbGsgKiwgdW5zaWduZWQgbG9uZyk7CkBAIC04OCw5ICsxMzEsOSBAQAogCXZvaWQJCQkoKmluaXQpKHN0cnVjdCBjbGsgKik7CiAJX191OAkJCWVuYWJsZV9iaXQ7CiAJX19zOAkJCXVzZWNvdW50OwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIHx8IFwKLQkJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQNCkKIAl1OAkJCWZpeGVkX2RpdjsKKwl1OAkJCWZsYWdzOworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyUExVUwogCXZvaWQgX19pb21lbQkJKmNsa3NlbF9yZWc7CiAJdTMyCQkJY2xrc2VsX21hc2s7CiAJY29uc3Qgc3RydWN0IGNsa3NlbAkqY2xrc2VsOwpAQCAtMTIzLDcgKzE2Niw3IEBACiAjZW5kaWYKIH07CiAKLWV4dGVybiB1bnNpZ25lZCBpbnQgbXB1cmF0ZTsKK2V4dGVybiBpbnQgbXB1cmF0ZTsKIAogZXh0ZXJuIGludCBjbGtfaW5pdChzdHJ1Y3QgY2xrX2Z1bmN0aW9ucyAqY3VzdG9tX2Nsb2Nrcyk7CiBleHRlcm4gdm9pZCBjbGtfcHJlaW5pdChzdHJ1Y3QgY2xrICpjbGspOwpAQCAtMTM0LDI3ICsxNzcsMjMgQEAKIGV4dGVybiB2b2lkIHJlY2FsY3VsYXRlX3Jvb3RfY2xvY2tzKHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZm9sbG93cGFyZW50X3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwogZXh0ZXJuIHZvaWQgY2xrX2VuYWJsZV9pbml0X2Nsb2Nrcyh2b2lkKTsKK3Vuc2lnbmVkIGxvbmcgb21hcF9maXhlZF9kaXZpc29yX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspOwogI2lmZGVmIENPTkZJR19DUFVfRlJFUQogZXh0ZXJuIHZvaWQgY2xrX2luaXRfY3B1ZnJlcV90YWJsZShzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgKip0YWJsZSk7CiBleHRlcm4gdm9pZCBjbGtfZXhpdF9jcHVmcmVxX3RhYmxlKHN0cnVjdCBjcHVmcmVxX2ZyZXF1ZW5jeV90YWJsZSAqKnRhYmxlKTsKICNlbmRpZgorZXh0ZXJuIHN0cnVjdCBjbGsgKm9tYXBfY2xrX2dldF9ieV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpOwogCiBleHRlcm4gY29uc3Qgc3RydWN0IGNsa29wcyBjbGtvcHNfbnVsbDsKIAorZXh0ZXJuIHN0cnVjdCBjbGsgZHVtbXlfY2s7CisKIC8qIENsb2NrIGZsYWdzICovCi0vKiBiaXQgMCBpcyBmcmVlICovCi0jZGVmaW5lIFJBVEVfRklYRUQJCSgxIDw8IDEpCS8qIEZpeGVkIGNsb2NrIHJhdGUgKi8KLS8qIGJpdHMgMi00IGFyZSBmcmVlICovCi0jZGVmaW5lIEVOQUJMRV9SRUdfMzJCSVQJKDEgPDwgNSkJLyogVXNlIDMyLWJpdCBhY2Nlc3MgKi8KLSNkZWZpbmUgQ0xPQ0tfSURMRV9DT05UUk9MCSgxIDw8IDcpCi0jZGVmaW5lIENMT0NLX05PX0lETEVfUEFSRU5UCSgxIDw8IDgpCi0jZGVmaW5lIERFTEFZRURfQVBQCQkoMSA8PCA5KQkvKiBEZWxheSBhcHBsaWNhdGlvbiBvZiBjbG9jayAqLwotI2RlZmluZSBDT05GSUdfUEFSVElDSVBBTlQJKDEgPDwgMTApCS8qIEZ1bmRhbWVudGFsIGNsb2NrICovCi0jZGVmaW5lIEVOQUJMRV9PTl9JTklUCQkoMSA8PCAxMSkJLyogRW5hYmxlIHVwb24gZnJhbWV3b3JrIGluaXQgKi8KLSNkZWZpbmUgSU5WRVJUX0VOQUJMRSAgICAgICAgICAgKDEgPDwgMTIpICAgICAgIC8qIDAgZW5hYmxlcywgMSBkaXNhYmxlcyAqLwotI2RlZmluZSBDTE9DS19JTl9PTUFQNDQzMAkoMSA8PCAxMykKLSNkZWZpbmUgQUxXQVlTX0VOQUJMRUQJCSgxIDw8IDE0KQotLyogYml0cyAxMy0zMSBhcmUgY3VycmVudGx5IGZyZWUgKi8KKyNkZWZpbmUgRU5BQkxFX1JFR18zMkJJVAkoMSA8PCAwKQkvKiBVc2UgMzItYml0IGFjY2VzcyAqLworI2RlZmluZSBDTE9DS19JRExFX0NPTlRST0wJKDEgPDwgMSkKKyNkZWZpbmUgQ0xPQ0tfTk9fSURMRV9QQVJFTlQJKDEgPDwgMikKKyNkZWZpbmUgRU5BQkxFX09OX0lOSVQJCSgxIDw8IDMpCS8qIEVuYWJsZSB1cG9uIGZyYW1ld29yayBpbml0ICovCisjZGVmaW5lIElOVkVSVF9FTkFCTEUJCSgxIDw8IDQpCS8qIDAgZW5hYmxlcywgMSBkaXNhYmxlcyAqLwogCiAvKiBDbGtzZWxfcmF0ZSBmbGFncyAqLwogI2RlZmluZSBERUZBVUxUX1JBVEUJCSgxIDw8IDApCkBAIC0xNjIsNyArMjAxLDggQEAKICNkZWZpbmUgUkFURV9JTl8yNDNYCQkoMSA8PCAyKQogI2RlZmluZSBSQVRFX0lOXzM0M1gJCSgxIDw8IDMpCS8qIHJhdGVzIGNvbW1vbiB0byBhbGwgMzQzWCAqLwogI2RlZmluZSBSQVRFX0lOXzM0MzBFUzIJCSgxIDw8IDQpCS8qIDM0MzBFUzIgcmF0ZXMgb25seSAqLwotI2RlZmluZSBSQVRFX0lOXzQ0MzAgICAgICAgICAgICAoMSA8PCA1KQorI2RlZmluZSBSQVRFX0lOXzM2WFgJCSgxIDw8IDUpCisjZGVmaW5lIFJBVEVfSU5fNDQzMAkJKDEgPDwgNikKIAogI2RlZmluZSBSQVRFX0lOXzI0WFgJCShSQVRFX0lOXzI0MlggfCBSQVRFX0lOXzI0M1gpCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xvY2tkb21haW4uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY2xvY2tkb21haW4uaAppbmRleCBlYjczNDgyLi5iYTBhNmMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2Nsb2NrZG9tYWluLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jbG9ja2RvbWFpbi5oCkBAIC00LDcgKzQsNyBAQAogICogT01BUDIvMyBjbG9ja2RvbWFpbiBmcmFtZXdvcmsgZnVuY3Rpb25zCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA4IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CiAgKgpAQCAtNDAsNjUgKzQwLDk1IEBACiAjZGVmaW5lIE9NQVAzNFhYX0NMS1NUQ1RSTF9GT1JDRV9XQUtFVVAJCTB4MgogI2RlZmluZSBPTUFQMzRYWF9DTEtTVENUUkxfRU5BQkxFX0FVVE8JCTB4MwogCi0vKgotICogc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgLSBhIHBvd2VyZG9tYWluIHRoYXQgc2hvdWxkIGhhdmUgd2tkZXBzCi0gKiBhbmQgc2xlZXBkZXBzIGFkZGVkIHdoZW4gYSBwb3dlcmRvbWFpbiBzaG91bGQgc3RheSBhY3RpdmUgaW4gaHdzdXAgbW9kZTsKLSAqIGFuZCBjb252ZXJzZWx5LCByZW1vdmVkIHdoZW4gdGhlIHBvd2VyZG9tYWluIHNob3VsZCBiZSBhbGxvd2VkIHRvIGdvCi0gKiBpbmFjdGl2ZSBpbiBod3N1cCBtb2RlLgorLyoqCisgKiBzdHJ1Y3QgY2xrZG1fYXV0b2RlcCAtIGNsa2RtIGRlcHMgdG8gYWRkIHdoZW4gZW50ZXJpbmcvZXhpdGluZyBod3N1cCBtb2RlCisgKiBAY2xrZG06IGNsb2NrZG9tYWluIHRvIGFkZCB3a2RlcCtzbGVlcGRlcCBvbiAtIHNldCBuYW1lIG1lbWJlciBvbmx5CisgKiBAb21hcF9jaGlwOiBPTUFQIGNoaXAgdHlwZXMgdGhhdCB0aGlzIGF1dG9kZXAgaXMgdmFsaWQgb24KKyAqCisgKiBBIGNsb2NrZG9tYWluIHRoYXQgc2hvdWxkIGhhdmUgd2tkZXBzIGFuZCBzbGVlcGRlcHMgYWRkZWQgd2hlbiBhCisgKiBjbG9ja2RvbWFpbiBzaG91bGQgc3RheSBhY3RpdmUgaW4gaHdzdXAgbW9kZTsgYW5kIGNvbnZlcnNlbHksCisgKiByZW1vdmVkIHdoZW4gdGhlIGNsb2NrZG9tYWluIHNob3VsZCBiZSBhbGxvd2VkIHRvIGdvIGluYWN0aXZlIGluCisgKiBod3N1cCBtb2RlLgorICoKKyAqIEF1dG9kZXBzIGFyZSBkZXByZWNhdGVkIGFuZCBzaG91bGQgYmUgcmVtb3ZlZCBhZnRlcgorICogb21hcF9od21vZC1iYXNlZCBmaW5lLWdyYWluZWQgbW9kdWxlIGlkbGUgY29udHJvbCBpcyBhZGRlZC4KICAqLwotc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgewotCitzdHJ1Y3QgY2xrZG1fYXV0b2RlcCB7CiAJdW5pb24gewotCQkvKiBOYW1lIG9mIHRoZSBwb3dlcmRvbWFpbiB0byBhZGQgYSB3a2RlcC9zbGVlcGRlcCBvbiAqLwogCQljb25zdCBjaGFyICpuYW1lOwotCi0JCS8qIFBvd2VyZG9tYWluIHBvaW50ZXIgKGxvb2tlZCB1cCBhdCBjbGtkbV9pbml0KCkgdGltZSkgKi8KLQkJc3RydWN0IHBvd2VyZG9tYWluICpwdHI7Ci0JfSBwd3JkbTsKLQotCS8qIE9NQVAgY2hpcCB0eXBlcyB0aGF0IHRoaXMgY2xvY2tkb21haW4gZGVwIGlzIHZhbGlkIG9uICovCisJCXN0cnVjdCBjbG9ja2RvbWFpbiAqcHRyOworCX0gY2xrZG07CiAJY29uc3Qgc3RydWN0IG9tYXBfY2hpcF9pZCBvbWFwX2NoaXA7Ci0KIH07CiAKKy8qKgorICogc3RydWN0IGNsa2RtX2RlcCAtIGVuY29kZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBjbG9ja2RvbWFpbnMKKyAqIEBjbGtkbV9uYW1lOiBjbG9ja2RvbWFpbiBuYW1lCisgKiBAY2xrZG06IHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBjbG9ja2RvbWFpbiBvZiBAY2xrZG1fbmFtZQorICogQG9tYXBfY2hpcDogT01BUCBjaGlwIHR5cGVzIHRoYXQgdGhpcyBkZXBlbmRlbmN5IGlzIHZhbGlkIG9uCisgKiBAd2tkZXBfdXNlY291bnQ6IE51bWJlciBvZiB3YWtldXAgZGVwZW5kZW5jaWVzIGNhdXNpbmcgdGhpcyBjbGtkbSB0byB3YWtlCisgKiBAc2xlZXBkZXBfdXNlY291bnQ6IE51bWJlciBvZiBzbGVlcCBkZXBzIHRoYXQgY291bGQgcHJldmVudCBjbGtkbSBmcm9tIGlkbGUKKyAqCisgKiBTdGF0aWNhbGx5IGRlZmluZWQuICBAY2xrZG0gaXMgcmVzb2x2ZWQgZnJvbSBAY2xrZG1fbmFtZSBhdCBydW50aW1lIGFuZAorICogc2hvdWxkIG5vdCBiZSBwcmUtaW5pdGlhbGl6ZWQuCisgKgorICogWFhYIFNob3VsZCBhbHNvIGluY2x1ZGUgaGFyZHdhcmUgKGZpeGVkKSBkZXBlbmRlbmNpZXMuCisgKi8KK3N0cnVjdCBjbGtkbV9kZXAgeworCWNvbnN0IGNoYXIgKmNsa2RtX25hbWU7CisJc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTsKKwlhdG9taWNfdCB3a2RlcF91c2Vjb3VudDsKKwlhdG9taWNfdCBzbGVlcGRlcF91c2Vjb3VudDsKKwljb25zdCBzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9tYXBfY2hpcDsKK307CisKKy8qKgorICogc3RydWN0IGNsb2NrZG9tYWluIC0gT01BUCBjbG9ja2RvbWFpbgorICogQG5hbWU6IGNsb2NrZG9tYWluIG5hbWUKKyAqIEBwd3JkbTogcG93ZXJkb21haW4gY29udGFpbmluZyB0aGlzIGNsb2NrZG9tYWluCisgKiBAY2xrdHJjdHJsX3JlZzogQ0xLU1RDVFJMIHJlZyBmb3IgdGhlIGdpdmVuIGNsb2NrIGRvbWFpbgorICogQGNsa3RyY3RybF9tYXNrOiBDTEtUUkNUUkwvQVVUT1NUQVRFIGZpZWxkIG1hc2sgaW4gQ01fQ0xLU1RDVFJMIHJlZworICogQGZsYWdzOiBDbG9ja2RvbWFpbiBjYXBhYmlsaXR5IGZsYWdzCisgKiBAZGVwX2JpdDogQml0IHNoaWZ0IG9mIHRoaXMgY2xvY2tkb21haW4ncyBQTV9XS0RFUC9DTV9TTEVFUERFUCBiaXQKKyAqIEB3a2RlcF9zcmNzOiBDbG9ja2RvbWFpbnMgdGhhdCBjYW4gYmUgdG9sZCB0byB3YWtlIHRoaXMgcG93ZXJkb21haW4gdXAKKyAqIEBzbGVlcGRlcF9zcmNzOiBDbG9ja2RvbWFpbnMgdGhhdCBjYW4gYmUgdG9sZCB0byBrZWVwIHRoaXMgY2xrZG0gZnJvbSBpbmFjdAorICogQG9tYXBfY2hpcDogT01BUCBjaGlwIHR5cGVzIHRoYXQgdGhpcyBjbG9ja2RvbWFpbiBpcyB2YWxpZCBvbgorICogQHVzZWNvdW50OiBVc2Vjb3VudCB0cmFja2luZworICogQG5vZGU6IGxpc3RfaGVhZCB0byBsaW5rIGFsbCBjbG9ja2RvbWFpbnMgdG9nZXRoZXIKKyAqLwogc3RydWN0IGNsb2NrZG9tYWluIHsKLQotCS8qIENsb2NrZG9tYWluIG5hbWUgKi8KIAljb25zdCBjaGFyICpuYW1lOwotCiAJdW5pb24gewotCQkvKiBQb3dlcmRvbWFpbiBlbmNsb3NpbmcgdGhpcyBjbG9ja2RvbWFpbiAqLwogCQljb25zdCBjaGFyICpuYW1lOwotCi0JCS8qIFBvd2VyZG9tYWluIHBvaW50ZXIgYXNzaWduZWQgYXQgY2xrZG1fcmVnaXN0ZXIoKSAqLwogCQlzdHJ1Y3QgcG93ZXJkb21haW4gKnB0cjsKIAl9IHB3cmRtOwotCi0JLyogQ0xLVFJDVFJML0FVVE9TVEFURSBmaWVsZCBtYXNrIGluIENNX0NMS1NUQ1RSTCByZWcgKi8KKwl2b2lkIF9faW9tZW0gKmNsa3N0Y3RybF9yZWc7CiAJY29uc3QgdTE2IGNsa3RyY3RybF9tYXNrOwotCi0JLyogQ2xvY2tkb21haW4gY2FwYWJpbGl0eSBmbGFncyAqLwogCWNvbnN0IHU4IGZsYWdzOwotCi0JLyogT01BUCBjaGlwIHR5cGVzIHRoYXQgdGhpcyBjbG9ja2RvbWFpbiBpcyB2YWxpZCBvbiAqLworCWNvbnN0IHU4IGRlcF9iaXQ7CisJc3RydWN0IGNsa2RtX2RlcCAqd2tkZXBfc3JjczsKKwlzdHJ1Y3QgY2xrZG1fZGVwICpzbGVlcGRlcF9zcmNzOwogCWNvbnN0IHN0cnVjdCBvbWFwX2NoaXBfaWQgb21hcF9jaGlwOwotCi0JLyogVXNlY291bnQgdHJhY2tpbmcgKi8KIAlhdG9taWNfdCB1c2Vjb3VudDsKLQogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQogfTsKIAotdm9pZCBjbGtkbV9pbml0KHN0cnVjdCBjbG9ja2RvbWFpbiAqKmNsa2Rtcywgc3RydWN0IGNsa2RtX3B3cmRtX2F1dG9kZXAgKmF1dG9kZXBzKTsKLWludCBjbGtkbV9yZWdpc3RlcihzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKLWludCBjbGtkbV91bnJlZ2lzdGVyKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOwordm9pZCBjbGtkbV9pbml0KHN0cnVjdCBjbG9ja2RvbWFpbiAqKmNsa2Rtcywgc3RydWN0IGNsa2RtX2F1dG9kZXAgKmF1dG9kZXBzKTsKIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG1fbG9va3VwKGNvbnN0IGNoYXIgKm5hbWUpOwogCiBpbnQgY2xrZG1fZm9yX2VhY2goaW50ICgqZm4pKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0sIHZvaWQgKnVzZXIpLAogCQkJdm9pZCAqdXNlcik7CiBzdHJ1Y3QgcG93ZXJkb21haW4gKmNsa2RtX2dldF9wd3JkbShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKIAoraW50IGNsa2RtX2FkZF93a2RlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTIpOworaW50IGNsa2RtX2RlbF93a2RlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTIpOworaW50IGNsa2RtX3JlYWRfd2tkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKTsKK2ludCBjbGtkbV9jbGVhcl9hbGxfd2tkZXBzKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworaW50IGNsa2RtX2FkZF9zbGVlcGRlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTIpOworaW50IGNsa2RtX2RlbF9zbGVlcGRlcChzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtMSwgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTIpOworaW50IGNsa2RtX3JlYWRfc2xlZXBkZXAoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbTEsIHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0yKTsKK2ludCBjbGtkbV9jbGVhcl9hbGxfc2xlZXBkZXBzKHN0cnVjdCBjbG9ja2RvbWFpbiAqY2xrZG0pOworCiB2b2lkIG9tYXAyX2Nsa2RtX2FsbG93X2lkbGUoc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSk7CiB2b2lkIG9tYXAyX2Nsa2RtX2RlbnlfaWRsZShzdHJ1Y3QgY2xvY2tkb21haW4gKmNsa2RtKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb21tb24uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY29tbW9uLmgKaW5kZXggMzJjMjIyNy4uNzU1NmUyNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb21tb24uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NvbW1vbi5oCkBAIC0zNywyMSArMzcsMzAgQEAKIGV4dGVybiB2b2lkIG9tYXBfbWFwX2NvbW1vbl9pbyh2b2lkKTsKIGV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIG9tYXBfdGltZXI7CiAKLS8qIElPIGJhc2VzIGZvciB2YXJpb3VzIE9NQVAgcHJvY2Vzc29ycyAqLworLyoKKyAqIElPIGJhc2VzIGZvciB2YXJpb3VzIE9NQVAgcHJvY2Vzc29ycworICogRXhjZXB0IHRoZSB0YXAgYmFzZSwgcmVzdCBhbGwgdGhlIGlvIGJhc2VzCisgKiBsaXN0ZWQgYXJlIHBoeXNpY2FsIGFkZHJlc3Nlcy4KKyAqLwogc3RydWN0IG9tYXBfZ2xvYmFscyB7CiAJdTMyCQljbGFzczsJCS8qIE9NQVAgY2xhc3MgdG8gZGV0ZWN0ICovCiAJdm9pZCBfX2lvbWVtCSp0YXA7CQkvKiBDb250cm9sIG1vZHVsZSBJRCBjb2RlICovCi0Jdm9pZCBfX2lvbWVtCSpzZHJjOwkJLyogU0RSQU0gQ29udHJvbGxlciAqLwotCXZvaWQgX19pb21lbQkqc21zOwkJLyogU0RSQU0gTWVtb3J5IFNjaGVkdWxlciAqLwotCXZvaWQgX19pb21lbQkqY3RybDsJCS8qIFN5c3RlbSBDb250cm9sIE1vZHVsZSAqLwotCXZvaWQgX19pb21lbQkqcHJtOwkJLyogUG93ZXIgYW5kIFJlc2V0IE1hbmFnZW1lbnQgKi8KLQl2b2lkIF9faW9tZW0JKmNtOwkJLyogQ2xvY2sgTWFuYWdlbWVudCAqLwotCXZvaWQgX19pb21lbQkqY20yOworCXVuc2lnbmVkIGxvbmcgICBzZHJjOyAgICAgICAgICAgLyogU0RSQU0gQ29udHJvbGxlciAqLworCXVuc2lnbmVkIGxvbmcgICBzbXM7ICAgICAgICAgICAgLyogU0RSQU0gTWVtb3J5IFNjaGVkdWxlciAqLworCXVuc2lnbmVkIGxvbmcgICBjdHJsOyAgICAgICAgICAgLyogU3lzdGVtIENvbnRyb2wgTW9kdWxlICovCisJdW5zaWduZWQgbG9uZyAgIHBybTsgICAgICAgICAgICAvKiBQb3dlciBhbmQgUmVzZXQgTWFuYWdlbWVudCAqLworCXVuc2lnbmVkIGxvbmcgICBjbTsgICAgICAgICAgICAgLyogQ2xvY2sgTWFuYWdlbWVudCAqLworCXVuc2lnbmVkIGxvbmcgICBjbTI7CisJdW5zaWduZWQgbG9uZwl1YXJ0MV9waHlzOworCXVuc2lnbmVkIGxvbmcJdWFydDJfcGh5czsKKwl1bnNpZ25lZCBsb25nCXVhcnQzX3BoeXM7CisJdW5zaWduZWQgbG9uZwl1YXJ0NF9waHlzOwogfTsKIAogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc18yNDJ4KHZvaWQpOwogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc18yNDN4KHZvaWQpOwogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc18zNDN4KHZvaWQpOwordm9pZCBvbWFwMl9zZXRfZ2xvYmFsc18zNnh4KHZvaWQpOwogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc180NDN4KHZvaWQpOwogCiAvKiBUaGVzZSBnZXQgY2FsbGVkIGZyb20gb21hcDJfc2V0X2dsb2JhbHNfeHh4eCgpLCBkbyBub3QgY2FsbCB0aGVzZSAqLwpAQCAtNTksNiArNjgsNyBAQAogdm9pZCBvbWFwMl9zZXRfZ2xvYmFsc19zZHJjKHN0cnVjdCBvbWFwX2dsb2JhbHMgKik7CiB2b2lkIG9tYXAyX3NldF9nbG9iYWxzX2NvbnRyb2woc3RydWN0IG9tYXBfZ2xvYmFscyAqKTsKIHZvaWQgb21hcDJfc2V0X2dsb2JhbHNfcHJjbShzdHJ1Y3Qgb21hcF9nbG9iYWxzICopOwordm9pZCBvbWFwMl9zZXRfZ2xvYmFsc191YXJ0KHN0cnVjdCBvbWFwX2dsb2JhbHMgKik7CiAKIC8qKgogICogb21hcF90ZXN0X3RpbWVvdXQgLSBidXN5LWxvb3AsIHRlc3RpbmcgYSBjb25kaXRpb24KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY29udHJvbC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb250cm9sLmgKaW5kZXggYTc0NWQ2Mi4uYTU2ZGVlZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb250cm9sLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jb250cm9sLmgKQEAgLTE2MCw2ICsxNjAsMTQgQEAKICNkZWZpbmUgT01BUDM0M1hfQ09OVFJPTF9TUkFNTERPNQkoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMkMwKQogI2RlZmluZSBPTUFQMzQzWF9DT05UUk9MX0NTSQkJKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDJDNCkKIAorLyogQU0zNVhYIG9ubHkgQ09OVFJPTF9HRU5FUkFMIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgQU0zNVhYX0NPTlRST0xfTVNVU1BFTkRNVVhfNiAgICAoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMDM4KQorI2RlZmluZSBBTTM1WFhfQ09OVFJPTF9ERVZDT05GMiAgICAgICAgIChPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAzMTApCisjZGVmaW5lIEFNMzVYWF9DT05UUk9MX0RFVkNPTkYzICAgICAgICAgKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDMxNCkKKyNkZWZpbmUgQU0zNVhYX0NPTlRST0xfQ0JBX1BSSU9SSVRZICAgICAoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMzIwKQorI2RlZmluZSBBTTM1WFhfQ09OVFJPTF9MVkxfSU5UUl9DTEVBUiAgIChPTUFQMl9DT05UUk9MX0dFTkVSQUwgKyAweDAzMjQpCisjZGVmaW5lIEFNMzVYWF9DT05UUk9MX0lQX1NXX1JFU0VUICAgICAgKE9NQVAyX0NPTlRST0xfR0VORVJBTCArIDB4MDMyOCkKKyNkZWZpbmUgQU0zNVhYX0NPTlRST0xfSVBTU19DTEtfQ1RSTCAgICAoT01BUDJfQ09OVFJPTF9HRU5FUkFMICsgMHgwMzJDKQogCiAvKiAzNHh4IFBBRENPTkYgcmVnaXN0ZXIgb2Zmc2V0cyAqLwogI2RlZmluZSBPTUFQMzQzWF9QQURDT05GX0VUSyhpKQkJKE9NQVAyX0NPTlRST0xfUEFEQ09ORlMgKyAweDVhOCArIFwKQEAgLTE5Niw2ICsyMDQsOSBAQAogI2RlZmluZSBPTUFQM19QQURDT05GX1NBRDJEX01TVEFOREJZICAgMHgyNTAKICNkZWZpbmUgT01BUDNfUEFEQ09ORl9TQUQyRF9JRExFQUNLICAgIDB4MjU0CiAKKy8qIDQ0eHggY29udHJvbCBzdGF0dXMgcmVnaXN0ZXIgb2Zmc2V0ICovCisjZGVmaW5lIE9NQVA0NFhYX0NPTlRST0xfU1RBVFVTCQkweDJjNAorCiAvKgogICogUkVWSVNJVDogVGhpcyBsaXN0IG9mIHJlZ2lzdGVycyBpcyBub3QgY29tcHJlaGVuc2l2ZSAtIHRoZXJlIGFyZSBtb3JlCiAgKiB0aGF0IHNob3VsZCBiZSBhZGRlZC4KQEAgLTI1Nyw2ICsyNjgsMzIgQEAKICNkZWZpbmUgT01BUDM0M1hfU0NSQVRDSFBBRAkJKE9NQVAzNDNYX0NUUkxfQkFTRSArIDB4OTEwKQogI2RlZmluZSBPTUFQMzQzWF9TQ1JBVENIUEFEX1JPTV9PRkZTRVQJMHgxOUMKIAorLyogQU0zNVhYX0NPTlRST0xfSVBTU19DTEtfQ1RSTCBiaXRzICovCisjZGVmaW5lIEFNMzVYWF9VU0JPVEdfVkJVU1BfQ0xLX1NISUZUICAgMAorI2RlZmluZSBBTTM1WFhfQ1BHTUFDX1ZCVVNQX0NMS19TSElGVCAgIDEKKyNkZWZpbmUgQU0zNVhYX1ZQRkVfVkJVU1BfQ0xLX1NISUZUICAgICAyCisjZGVmaW5lIEFNMzVYWF9IRUNDX1ZCVVNQX0NMS19TSElGVCAgICAgMworI2RlZmluZSBBTTM1WFhfVVNCT1RHX0ZDTEtfU0hJRlQgICAgICAgIDgKKyNkZWZpbmUgQU0zNVhYX0NQR01BQ19GQ0xLX1NISUZUICAgICAgICA5CisjZGVmaW5lIEFNMzVYWF9WUEZFX0ZDTEtfU0hJRlQgICAgICAgICAgMTAKKworLypBTTM1WFggQ09OVFJPTF9MVkxfSU5UUl9DTEVBUiBiaXRzKi8KKyNkZWZpbmUgQU0zNVhYX0NQR01BQ19DMF9NSVNDX1BVTFNFX0NMUglCSVQoMCkKKyNkZWZpbmUgQU0zNVhYX0NQR01BQ19DMF9SWF9QVUxTRV9DTFIJQklUKDEpCisjZGVmaW5lIEFNMzVYWF9DUEdNQUNfQzBfUlhfVEhSRVNIX0NMUglCSVQoMikKKyNkZWZpbmUgQU0zNVhYX0NQR01BQ19DMF9UWF9QVUxTRV9DTFIJQklUKDMpCisjZGVmaW5lIEFNMzVYWF9VU0JPVEdTU19JTlRfQ0xSCQlCSVQoNCkKKyNkZWZpbmUgQU0zNVhYX1ZQRkVfQ0NEQ19WRDBfSU5UX0NMUglCSVQoNSkKKyNkZWZpbmUgQU0zNVhYX1ZQRkVfQ0NEQ19WRDFfSU5UX0NMUglCSVQoNikKKyNkZWZpbmUgQU0zNVhYX1ZQRkVfQ0NEQ19WRDJfSU5UX0NMUglCSVQoNykKKworLypBTTM1WFggQ09OVFJPTF9JUF9TV19SRVNFVCBiaXRzKi8KKyNkZWZpbmUgQU0zNVhYX1VTQk9UR1NTX1NXX1JTVAkJQklUKDApCisjZGVmaW5lIEFNMzVYWF9DUEdNQUNTU19TV19SU1QJCUJJVCgxKQorI2RlZmluZSBBTTM1WFhfVlBGRV9WQlVTUF9TV19SU1QJQklUKDIpCisjZGVmaW5lIEFNMzVYWF9IRUNDX1NXX1JTVAkJQklUKDMpCisjZGVmaW5lIEFNMzVYWF9WUEZFX1BDTEtfU1dfUlNUCQlCSVQoNCkKKwogLyoKICAqIENPTlRST0wgT01BUCBTVEFUVVMgcmVnaXN0ZXIgdG8gaWRlbnRpZnkgT01BUDMgZmVhdHVyZXMKICAqLwpAQCAtMjkyLDggKzMyOSw3IEBACiAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBcCi0JCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDJQTFVTCiBleHRlcm4gdm9pZCBfX2lvbWVtICpvbWFwX2N0cmxfYmFzZV9nZXQodm9pZCk7CiBleHRlcm4gdTggb21hcF9jdHJsX3JlYWRiKHUxNiBvZmZzZXQpOwogZXh0ZXJuIHUxNiBvbWFwX2N0cmxfcmVhZHcodTE2IG9mZnNldCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NwdS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9jcHUuaAppbmRleCBhMTYyZjU4Li5lZDg3ODZjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2NwdS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvY3B1LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0NQVV9ICiAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxwbGF0L211bHRpLmg+CiAKIC8qCiAgKiBPbWFwIGRldmljZSB0eXBlIGkuZS4gRU1VL0hTL1RTVC9HUC9CQUQKQEAgLTQ0LDcgKzQ1LDcgQEAKIGludCBvbWFwX3R5cGUodm9pZCk7CiAKIHN0cnVjdCBvbWFwX2NoaXBfaWQgewotCXU4IG9jOworCXUxNiBvYzsKIAl1OCB0eXBlOwogfTsKIApAQCAtNzYsNzUgKzc3LDYgQEAKICNkZWZpbmUgR0VUX09NQVBfUkVWSVNJT04oKQkoKG9tYXBfcmV2KCkgPj4gOCkgJiAweGZmKQogCiAvKgotICogVGVzdCBpZiBtdWx0aWNvcmUgT01BUCBzdXBwb3J0IGlzIG5lZWRlZAotICovCi0jdW5kZWYgTVVMVElfT01BUDEKLSN1bmRlZiBNVUxUSV9PTUFQMgotI3VuZGVmIE9NQVBfTkFNRQotCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAotIyBpZmRlZiBPTUFQX05BTUUKLSMgIHVuZGVmICBNVUxUSV9PTUFQMQotIyAgZGVmaW5lIE1VTFRJX09NQVAxCi0jIGVsc2UKLSMgIGRlZmluZSBPTUFQX05BTUUgb21hcDczMAotIyBlbmRpZgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAotIyBpZmRlZiBPTUFQX05BTUUKLSMgIHVuZGVmICBNVUxUSV9PTUFQMQotIyAgZGVmaW5lIE1VTFRJX09NQVAxCi0jIGVsc2UKLSMgIGRlZmluZSBPTUFQX05BTUUgb21hcDg1MAotIyBlbmRpZgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKLSMgaWZkZWYgT01BUF9OQU1FCi0jICB1bmRlZiAgTVVMVElfT01BUDEKLSMgIGRlZmluZSBNVUxUSV9PTUFQMQotIyBlbHNlCi0jICBkZWZpbmUgT01BUF9OQU1FIG9tYXAxNTEwCi0jIGVuZGlmCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTZYWAotIyBpZmRlZiBPTUFQX05BTUUKLSMgIHVuZGVmICBNVUxUSV9PTUFQMQotIyAgZGVmaW5lIE1VTFRJX09NQVAxCi0jIGVsc2UKLSMgIGRlZmluZSBPTUFQX05BTUUgb21hcDE2eHgKLSMgZW5kaWYKLSNlbmRpZgotI2lmIChkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKSkKLSMgaWYgKGRlZmluZWQoT01BUF9OQU1FKSB8fCBkZWZpbmVkKE1VTFRJX09NQVAxKSkKLSMgIGVycm9yICJPTUFQMSBhbmQgT01BUDIgY2FuJ3QgYmUgc2VsZWN0ZWQgYXQgdGhlIHNhbWUgdGltZSIKLSMgZW5kaWYKLSNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCi0jIGlmZGVmIE9NQVBfTkFNRQotIyAgdW5kZWYgIE1VTFRJX09NQVAyCi0jICBkZWZpbmUgTVVMVElfT01BUDIKLSMgZWxzZQotIyAgZGVmaW5lIE9NQVBfTkFNRSBvbWFwMjQyMAotIyBlbmRpZgotI2VuZGlmCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKLSMgaWZkZWYgT01BUF9OQU1FCi0jICB1bmRlZiAgTVVMVElfT01BUDIKLSMgIGRlZmluZSBNVUxUSV9PTUFQMgotIyBlbHNlCi0jICBkZWZpbmUgT01BUF9OQU1FIG9tYXAyNDMwCi0jIGVuZGlmCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzQzMAotIyBpZmRlZiBPTUFQX05BTUUKLSMgIHVuZGVmICBNVUxUSV9PTUFQMgotIyAgZGVmaW5lIE1VTFRJX09NQVAyCi0jIGVsc2UKLSMgIGRlZmluZSBPTUFQX05BTUUgb21hcDM0MzAKLSMgZW5kaWYKLSNlbmRpZgotCi0vKgogICogTWFjcm9zIHRvIGdyb3VwIE9NQVAgaW50byBjcHUgY2xhc3Nlcy4KICAqIFRoZXNlIGNhbiBiZSB1c2VkIGluIG1vc3QgcGxhY2VzLgogICogY3B1X2lzX29tYXA3eHgoKToJVHJ1ZSBmb3IgT01BUDczMCwgT01BUDg1MApAQCAtMTU0LDYgKzg2LDcgQEAKICAqIGNwdV9pc19vbWFwMjQyeCgpOglUcnVlIGZvciBPTUFQMjQyMCwgT01BUDI0MjIsIE9NQVAyNDIzCiAgKiBjcHVfaXNfb21hcDI0M3goKToJVHJ1ZSBmb3IgT01BUDI0MzAKICAqIGNwdV9pc19vbWFwMzQzeCgpOglUcnVlIGZvciBPTUFQMzQzMAorICogY3B1X2lzX29tYXA0NDN4KCk6CVRydWUgZm9yIE9NQVA0NDMwCiAgKi8KICNkZWZpbmUgR0VUX09NQVBfQ0xBU1MJKG9tYXBfcmV2KCkgJiAweGZmKQogCkBAIC0yMzIsNyArMTY1LDcgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChNVUxUSV9PTUFQMikKLSMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkKKyMgaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKICMgIHVuZGVmICBjcHVfaXNfb21hcDI0eHgKICMgIHVuZGVmICBjcHVfaXNfb21hcDI0MngKICMgIHVuZGVmICBjcHVfaXNfb21hcDI0M3gKQEAgLTI0MCwxNCArMTczLDE0IEBACiAjICBkZWZpbmUgY3B1X2lzX29tYXAyNDJ4KCkJCWlzX29tYXAyNDJ4KCkKICMgIGRlZmluZSBjcHVfaXNfb21hcDI0M3goKQkJaXNfb21hcDI0M3goKQogIyBlbmRpZgotIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorIyBpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogIyAgdW5kZWYgIGNwdV9pc19vbWFwMzR4eAogIyAgdW5kZWYgIGNwdV9pc19vbWFwMzQzeAogIyAgZGVmaW5lIGNwdV9pc19vbWFwMzR4eCgpCQlpc19vbWFwMzR4eCgpCiAjICBkZWZpbmUgY3B1X2lzX29tYXAzNDN4KCkJCWlzX29tYXAzNDN4KCkKICMgZW5kaWYKICNlbHNlCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCiAjICB1bmRlZiAgY3B1X2lzX29tYXAyNHh4CiAjICBkZWZpbmUgY3B1X2lzX29tYXAyNHh4KCkJCTEKICMgZW5kaWYKQEAgLTI1OSw3ICsxOTIsNyBAQAogIyAgdW5kZWYgIGNwdV9pc19vbWFwMjQzeAogIyAgZGVmaW5lIGNwdV9pc19vbWFwMjQzeCgpCQkxCiAjIGVuZGlmCi0jIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCisjIGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAjICB1bmRlZiAgY3B1X2lzX29tYXAzNHh4CiAjICBkZWZpbmUgY3B1X2lzX29tYXAzNHh4KCkJCTEKICMgZW5kaWYKQEAgLTI4Niw2ICsyMTksNyBAQAogICogY3B1X2lzX29tYXAyNDIzKCk6CVRydWUgZm9yIE9NQVAyNDIzCiAgKiBjcHVfaXNfb21hcDI0MzAoKToJVHJ1ZSBmb3IgT01BUDI0MzAKICAqIGNwdV9pc19vbWFwMzQzMCgpOglUcnVlIGZvciBPTUFQMzQzMAorICogY3B1X2lzX29tYXA0NDMwKCk6CVRydWUgZm9yIE9NQVA0NDMwCiAgKiBjcHVfaXNfb21hcDM1MDUoKToJVHJ1ZSBmb3IgT01BUDM1MDUKICAqIGNwdV9pc19vbWFwMzUxNygpOglUcnVlIGZvciBPTUFQMzUxNwogICovCkBAIC0zMzQsNiArMjY4LDcgQEAKICNkZWZpbmUgY3B1X2lzX29tYXAzNTA1KCkJCTAKICNkZWZpbmUgY3B1X2lzX29tYXAzNTE3KCkJCTAKICNkZWZpbmUgY3B1X2lzX29tYXAzNDMwKCkJCTAKKyNkZWZpbmUgY3B1X2lzX29tYXA0NDMwKCkJCTAKICNkZWZpbmUgY3B1X2lzX29tYXAzNjMwKCkJCTAKIAogLyoKQEAgLTM3MSw3ICszMDYsNyBAQAogIyBkZWZpbmUgY3B1X2lzX29tYXAxNzEwKCkJCWlzX29tYXAxNzEwKCkKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQogIyB1bmRlZiAgY3B1X2lzX29tYXAyNDIwCiAjIHVuZGVmICBjcHVfaXNfb21hcDI0MjIKICMgdW5kZWYgIGNwdV9pc19vbWFwMjQyMwpAQCAtMzgyLDcgKzMxNyw3IEBACiAjIGRlZmluZSBjcHVfaXNfb21hcDI0MzAoKQkJaXNfb21hcDI0MzAoKQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAjIHVuZGVmIGNwdV9pc19vbWFwMzQzMAogIyB1bmRlZiBjcHVfaXNfb21hcDM1MDMKICMgdW5kZWYgY3B1X2lzX29tYXAzNTE1CkBAIC00NzEsOSArNDA2LDEyIEBACiAjZGVmaW5lIENISVBfSVNfT01BUDM0MzBFUzNfMAkJKDEgPDwgNSkKICNkZWZpbmUgQ0hJUF9JU19PTUFQMzQzMEVTM18xCQkoMSA8PCA2KQogI2RlZmluZSBDSElQX0lTX09NQVAzNjMwRVMxCQkoMSA8PCA3KQorI2RlZmluZSBDSElQX0lTX09NQVA0NDMwRVMxCQkoMSA8PCA4KQogCiAjZGVmaW5lIENISVBfSVNfT01BUDI0WFgJCShDSElQX0lTX09NQVAyNDIwIHwgQ0hJUF9JU19PTUFQMjQzMCkKIAorI2RlZmluZSBDSElQX0lTX09NQVA0NDMwCQkoQ0hJUF9JU19PTUFQNDQzMEVTMSkKKwogLyoKICAqICJHRSIgaGVyZSByZXByZXNlbnRzICJncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8iIGluIHRlcm1zIG9mIEVTCiAgKiBsZXZlbHMuICBTbyBDSElQX0dFX09NQVAzNDMwRVMyIGlzIGludGVuZGVkIHRvIG1hdGNoIGFsbCBPTUFQMzQzMApAQCAtNTAxLDYgKzQzOSw3IEBACiAjZGVmaW5lIE9NQVAzX0hBU19TR1gJCQlCSVQoMikKICNkZWZpbmUgT01BUDNfSEFTX05FT04JCQlCSVQoMykKICNkZWZpbmUgT01BUDNfSEFTX0lTUAkJCUJJVCg0KQorI2RlZmluZSBPTUFQM19IQVNfMTkyTUhaX0NMSwkJQklUKDUpCiAKICNkZWZpbmUgT01BUDNfSEFTX0ZFQVRVUkUoZmVhdCxmbGFnKQkJCVwKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9tYXAzX2hhc18gIyNmZWF0KHZvaWQpCVwKQEAgLTUxMyw1ICs0NTIsNiBAQAogT01BUDNfSEFTX0ZFQVRVUkUoaXZhLCBJVkEpCiBPTUFQM19IQVNfRkVBVFVSRShuZW9uLCBORU9OKQogT01BUDNfSEFTX0ZFQVRVUkUoaXNwLCBJU1ApCitPTUFQM19IQVNfRkVBVFVSRSgxOTJtaHpfY2xrLCAxOTJNSFpfQ0xLKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZGlzcGxheS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9kaXNwbGF5LmgKaW5kZXggYzY2ZTQ2NC4uMWM1MjljZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9kaXNwbGF5LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9kaXNwbGF5LmgKQEAgLTIzMyw4ICsyMzMsMTIgQEAKIHZvaWQgZHNpX2J1c19sb2NrKHZvaWQpOwogdm9pZCBkc2lfYnVzX3VubG9jayh2b2lkKTsKIGludCBkc2lfdmNfZGNzX3dyaXRlKGludCBjaGFubmVsLCB1OCAqZGF0YSwgaW50IGxlbik7CitpbnQgZHNpX3ZjX2Rjc193cml0ZV8wKGludCBjaGFubmVsLCB1OCBkY3NfY21kKTsKK2ludCBkc2lfdmNfZGNzX3dyaXRlXzEoaW50IGNoYW5uZWwsIHU4IGRjc19jbWQsIHU4IHBhcmFtKTsKIGludCBkc2lfdmNfZGNzX3dyaXRlX25vc3luYyhpbnQgY2hhbm5lbCwgdTggKmRhdGEsIGludCBsZW4pOwogaW50IGRzaV92Y19kY3NfcmVhZChpbnQgY2hhbm5lbCwgdTggZGNzX2NtZCwgdTggKmJ1ZiwgaW50IGJ1Zmxlbik7CitpbnQgZHNpX3ZjX2Rjc19yZWFkXzEoaW50IGNoYW5uZWwsIHU4IGRjc19jbWQsIHU4ICpkYXRhKTsKK2ludCBkc2lfdmNfZGNzX3JlYWRfMihpbnQgY2hhbm5lbCwgdTggZGNzX2NtZCwgdTE2ICpkYXRhKTsKIGludCBkc2lfdmNfc2V0X21heF9yeF9wYWNrZXRfc2l6ZShpbnQgY2hhbm5lbCwgdTE2IGxlbik7CiBpbnQgZHNpX3ZjX3NlbmRfbnVsbChpbnQgY2hhbm5lbCk7CiBpbnQgZHNpX3ZjX3NlbmRfYnRhX3N5bmMoaW50IGNoYW5uZWwpOwpAQCAtMzY3LDYgKzM3MSwxMCBAQAogCiAJaW50ICgqYXBwbHkpKHN0cnVjdCBvbWFwX292ZXJsYXlfbWFuYWdlciAqbWdyKTsKIAlpbnQgKCp3YWl0X2Zvcl9nbykoc3RydWN0IG9tYXBfb3ZlcmxheV9tYW5hZ2VyICptZ3IpOworCWludCAoKndhaXRfZm9yX3ZzeW5jKShzdHJ1Y3Qgb21hcF9vdmVybGF5X21hbmFnZXIgKm1ncik7CisKKwlpbnQgKCplbmFibGUpKHN0cnVjdCBvbWFwX292ZXJsYXlfbWFuYWdlciAqbWdyKTsKKwlpbnQgKCpkaXNhYmxlKShzdHJ1Y3Qgb21hcF9vdmVybGF5X21hbmFnZXIgKm1ncik7CiB9OwogCiBzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlIHsKQEAgLTQyNiwxNiArNDM0LDExIEBACiAJCWludCBhY2I7CS8qIGFjLWJpYXMgcGluIGZyZXF1ZW5jeSAqLwogCiAJCWVudW0gb21hcF9wYW5lbF9jb25maWcgY29uZmlnOwotCi0JCXU4IHJlY29tbWVuZGVkX2JwcDsKLQotCQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpjdHJsOwogCX0gcGFuZWw7CiAKIAlzdHJ1Y3QgewogCQl1OCBwaXhlbF9zaXplOwogCQlzdHJ1Y3QgcmZiaV90aW1pbmdzIHJmYmlfdGltaW5nczsKLQkJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqcGFuZWw7CiAJfSBjdHJsOwogCiAJaW50IHJlc2V0X2dwaW87CkBAIC00NjAsNDkgKzQ2Myw2IEBACiAKIAllbnVtIG9tYXBfZHNzX2Rpc3BsYXlfc3RhdGUgc3RhdGU7CiAKLQlpbnQgKCplbmFibGUpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7Ci0Jdm9pZCAoKmRpc2FibGUpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7Ci0KLQlpbnQgKCpzdXNwZW5kKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOwotCWludCAoKnJlc3VtZSkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKLQotCXZvaWQgKCpnZXRfcmVzb2x1dGlvbikoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQkJdTE2ICp4cmVzLCB1MTYgKnlyZXMpOwotCWludCAoKmdldF9yZWNvbW1lbmRlZF9icHApKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7Ci0KLQlpbnQgKCpjaGVja190aW1pbmdzKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCi0JCQlzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzICp0aW1pbmdzKTsKLQl2b2lkICgqc2V0X3RpbWluZ3MpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKLQkJCXN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3MgKnRpbWluZ3MpOwotCXZvaWQgKCpnZXRfdGltaW5ncykoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQkJc3RydWN0IG9tYXBfdmlkZW9fdGltaW5ncyAqdGltaW5ncyk7Ci0JaW50ICgqdXBkYXRlKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCi0JCQkgICAgICAgdTE2IHgsIHUxNiB5LCB1MTYgdywgdTE2IGgpOwotCWludCAoKnN5bmMpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7Ci0JaW50ICgqd2FpdF92c3luYykoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKLQotCWludCAoKnNldF91cGRhdGVfbW9kZSkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQkJZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSk7Ci0JZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSAoKmdldF91cGRhdGVfbW9kZSkKLQkJKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7Ci0KLQlpbnQgKCplbmFibGVfdGUpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgYm9vbCBlbmFibGUpOwotCWludCAoKmdldF90ZSkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKLQotCXU4ICgqZ2V0X3JvdGF0ZSkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKLQlpbnQgKCpzZXRfcm90YXRlKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsIHU4IHJvdGF0ZSk7Ci0KLQlib29sICgqZ2V0X21pcnJvcikoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKLQlpbnQgKCpzZXRfbWlycm9yKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsIGJvb2wgZW5hYmxlKTsKLQotCWludCAoKnJ1bl90ZXN0KShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsIGludCB0ZXN0KTsKLQlpbnQgKCptZW1vcnlfcmVhZCkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQkJdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSwKLQkJCXUxNiB4LCB1MTYgeSwgdTE2IHcsIHUxNiBoKTsKLQotCWludCAoKnNldF93c3MpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgdTMyIHdzcyk7Ci0JdTMyICgqZ2V0X3dzcykoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKLQogCS8qIHBsYXRmb3JtIHNwZWNpZmljICAqLwogCWludCAoKnBsYXRmb3JtX2VuYWJsZSkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKIAl2b2lkICgqcGxhdGZvcm1fZGlzYWJsZSkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKQEAgLTUyMiwxMSArNDgyLDE3IEBACiAJaW50ICgqcmVzdW1lKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkaXNwbGF5KTsKIAlpbnQgKCpydW5fdGVzdCkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZGlzcGxheSwgaW50IHRlc3QpOwogCi0Jdm9pZCAoKnNldHVwX3VwZGF0ZSkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQkJdTE2IHgsIHUxNiB5LCB1MTYgdywgdTE2IGgpOworCWludCAoKnNldF91cGRhdGVfbW9kZSkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAorCQkJZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSk7CisJZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSAoKmdldF91cGRhdGVfbW9kZSkoCisJCQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOworCisJaW50ICgqdXBkYXRlKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCQkgICAgICAgdTE2IHgsIHUxNiB5LCB1MTYgdywgdTE2IGgpOworCWludCAoKnN5bmMpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7CiAKIAlpbnQgKCplbmFibGVfdGUpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgYm9vbCBlbmFibGUpOwotCWludCAoKndhaXRfZm9yX3RlKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOworCWludCAoKmdldF90ZSkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKIAogCXU4ICgqZ2V0X3JvdGF0ZSkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKIAlpbnQgKCpzZXRfcm90YXRlKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsIHU4IHJvdGF0ZSk7CkBAIC01MzcsNiArNTAzLDIwIEBACiAJaW50ICgqbWVtb3J5X3JlYWQpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKIAkJCXZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUsCiAJCQl1MTYgeCwgdTE2IHksIHUxNiB3LCB1MTYgaCk7CisKKwl2b2lkICgqZ2V0X3Jlc29sdXRpb24pKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKKwkJCXUxNiAqeHJlcywgdTE2ICp5cmVzKTsKKwlpbnQgKCpnZXRfcmVjb21tZW5kZWRfYnBwKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOworCisJaW50ICgqY2hlY2tfdGltaW5ncykoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAorCQkJc3RydWN0IG9tYXBfdmlkZW9fdGltaW5ncyAqdGltaW5ncyk7CisJdm9pZCAoKnNldF90aW1pbmdzKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCQlzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzICp0aW1pbmdzKTsKKwl2b2lkICgqZ2V0X3RpbWluZ3MpKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKKwkJCXN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3MgKnRpbWluZ3MpOworCisJaW50ICgqc2V0X3dzcykoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LCB1MzIgd3NzKTsKKwl1MzIgKCpnZXRfd3NzKShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOwogfTsKIAogaW50IG9tYXBfZHNzX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgb21hcF9kc3NfZHJpdmVyICopOwpAQCAtNTYxLDYgKzU0MSwxMCBAQAogaW50IG9tYXBfZHNzX2dldF9udW1fb3ZlcmxheXModm9pZCk7CiBzdHJ1Y3Qgb21hcF9vdmVybGF5ICpvbWFwX2Rzc19nZXRfb3ZlcmxheShpbnQgbnVtKTsKIAordm9pZCBvbWFwZHNzX2RlZmF1bHRfZ2V0X3Jlc29sdXRpb24oc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAorCQl1MTYgKnhyZXMsIHUxNiAqeXJlcyk7CitpbnQgb21hcGRzc19kZWZhdWx0X2dldF9yZWNvbW1lbmRlZF9icHAoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKKwogdHlwZWRlZiB2b2lkICgqb21hcF9kaXNwY19pc3JfdCkgKHZvaWQgKmFyZywgdTMyIG1hc2spOwogaW50IG9tYXBfZGlzcGNfcmVnaXN0ZXJfaXNyKG9tYXBfZGlzcGNfaXNyX3QgaXNyLCB2b2lkICphcmcsIHUzMiBtYXNrKTsKIGludCBvbWFwX2Rpc3BjX3VucmVnaXN0ZXJfaXNyKG9tYXBfZGlzcGNfaXNyX3QgaXNyLCB2b2lkICphcmcsIHUzMiBtYXNrKTsKQEAgLTU3Miw0ICs1NTYsMzUgQEAKICNkZWZpbmUgdG9fZHNzX2RyaXZlcih4KSBjb250YWluZXJfb2YoKHgpLCBzdHJ1Y3Qgb21hcF9kc3NfZHJpdmVyLCBkcml2ZXIpCiAjZGVmaW5lIHRvX2Rzc19kZXZpY2UoeCkgY29udGFpbmVyX29mKCh4KSwgc3RydWN0IG9tYXBfZHNzX2RldmljZSwgZGV2KQogCit2b2lkIG9tYXBkc3NfZHNpX3ZjX2VuYWJsZV9ocyhpbnQgY2hhbm5lbCwgYm9vbCBlbmFibGUpOworaW50IG9tYXBkc3NfZHNpX2VuYWJsZV90ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsIGJvb2wgZW5hYmxlKTsKKworaW50IG9tYXBfZHNpX3ByZXBhcmVfdXBkYXRlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKKwkJCQkgICAgdTE2ICp4LCB1MTYgKnksIHUxNiAqdywgdTE2ICpoKTsKK2ludCBvbWFwX2RzaV91cGRhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAorCQlpbnQgY2hhbm5lbCwKKwkJdTE2IHgsIHUxNiB5LCB1MTYgdywgdTE2IGgsCisJCXZvaWQgKCpjYWxsYmFjaykoaW50LCB2b2lkICopLCB2b2lkICpkYXRhKTsKKworaW50IG9tYXBkc3NfZHNpX2Rpc3BsYXlfZW5hYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7Cit2b2lkIG9tYXBkc3NfZHNpX2Rpc3BsYXlfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOworCitpbnQgb21hcGRzc19kcGlfZGlzcGxheV9lbmFibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKK3ZvaWQgb21hcGRzc19kcGlfZGlzcGxheV9kaXNhYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7Cit2b2lkIGRwaV9zZXRfdGltaW5ncyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCQlzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzICp0aW1pbmdzKTsKK2ludCBkcGlfY2hlY2tfdGltaW5ncyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCQlzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzICp0aW1pbmdzKTsKKworaW50IG9tYXBkc3Nfc2RpX2Rpc3BsYXlfZW5hYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7Cit2b2lkIG9tYXBkc3Nfc2RpX2Rpc3BsYXlfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpOworCitpbnQgb21hcGRzc19yZmJpX2Rpc3BsYXlfZW5hYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7Cit2b2lkIG9tYXBkc3NfcmZiaV9kaXNwbGF5X2Rpc2FibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKK2ludCBvbWFwX3JmYmlfcHJlcGFyZV91cGRhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAorCQl1MTYgKngsIHUxNiAqeSwgdTE2ICp3LCB1MTYgKmgpOworaW50IG9tYXBfcmZiaV91cGRhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAorCQl1MTYgeCwgdTE2IHksIHUxNiB3LCB1MTYgaCwKKwkJdm9pZCAoKmNhbGxiYWNrKSh2b2lkICopLCB2b2lkICpkYXRhKTsKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2RtYS00NHh4LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2RtYS00NHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWY3NjdjYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZG1hLTQ0eHguaApAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIE9NQVA0IFNETUEgY2hhbm5lbCBkZWZpbml0aW9ucworICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFRleGFzIEluc3RydW1lbnRzLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIFNhbnRvc2ggU2hpbGlta2FyIChzYW50b3NoLnNoaWxpbWthckB0aS5jb20pCisgKiBCZW5vaXQgQ291c3NvbiAoYi1jb3Vzc29uQHRpLmNvbSkKKyAqIFBhdWwgV2FsbXNsZXkgKHBhdWxAcHdzYW4uY29tKQorICoKKyAqIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIHRoZSBPTUFQIGhhcmR3YXJlIGRhdGFiYXNlcy4KKyAqIFdlIHJlc3BlY3RmdWxseSBhc2sgdGhhdCBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGlzIGZpbGUgYmUgY29vcmRpbmF0ZWQKKyAqIHdpdGggdGhlIHB1YmxpYyBsaW51eC1vbWFwQHZnZXIua2VybmVsLm9yZyBtYWlsaW5nIGxpc3QgYW5kIHRoZQorICogYXV0aG9ycyBhYm92ZSB0byBlbnN1cmUgdGhhdCB0aGUgYXV0b2dlbmVyYXRpb24gc2NyaXB0cyBhcmUga2VwdAorICogdXAtdG8tZGF0ZSB3aXRoIHRoZSBmaWxlIGNvbnRlbnRzLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0FSQ0hfQVJNX01BQ0hfT01BUDJfT01BUDQ0WFhfRE1BX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX09NQVA0NFhYX0RNQV9ICisKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NZU19SRVEwCQkJMgorI2RlZmluZSBPTUFQNDRYWF9ETUFfU1lTX1JFUTEJCQkzCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9HUE1DCQkJNAorI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX0RJU1BDX1JFUQkJNgorI2RlZmluZSBPTUFQNDRYWF9ETUFfU1lTX1JFUTIJCQk3CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ0FTUDFfQVhFVlQJCTgKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0lTU19SRVExCQkJOQorI2RlZmluZSBPTUFQNDRYWF9ETUFfSVNTX1JFUTIJCQkxMAorI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNBU1AxX0FSRVZUCQkxMQorI2RlZmluZSBPTUFQNDRYWF9ETUFfSVNTX1JFUTMJCQkxMgorI2RlZmluZSBPTUFQNDRYWF9ETUFfSVNTX1JFUTQJCQkxMworI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX1JGQklfUkVRCQkxNAorI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJM19UWDAJCQkxNQorI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJM19SWDAJCQkxNgorI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNCU1AyX1RYCQkJMTcKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01DQlNQMl9SWAkJCTE4CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ0JTUDNfVFgJCQkxOQorI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNCU1AzX1JYCQkJMjAKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0MyQ19TU0NNX0dQTzAJCTIxCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9DMkNfU1NDTV9HUE8xCQkyMgorI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJM19UWDEJCQkyMworI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJM19SWDEJCQkyNAorI2RlZmluZSBPTUFQNDRYWF9ETUFfSTJDM19UWAkJCTI1CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9JMkMzX1JYCQkJMjYKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0kyQzFfVFgJCQkyNworI2RlZmluZSBPTUFQNDRYWF9ETUFfSTJDMV9SWAkJCTI4CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9JMkMyX1RYCQkJMjkKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0kyQzJfUlgJCQkzMAorI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNCU1A0X1RYCQkJMzEKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01DQlNQNF9SWAkJCTMyCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ0JTUDFfVFgJCQkzMworI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNCU1AxX1JYCQkJMzQKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTFfVFgwCQkJMzUKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTFfUlgwCQkJMzYKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTFfVFgxCQkJMzcKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTFfUlgxCQkJMzgKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTFfVFgyCQkJMzkKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTFfUlgyCQkJNDAKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTFfVFgzCQkJNDEKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTFfUlgzCQkJNDIKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTJfVFgwCQkJNDMKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTJfUlgwCQkJNDQKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTJfVFgxCQkJNDUKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTJfUlgxCQkJNDYKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzJfVFgJCQk0NworI2RlZmluZSBPTUFQNDRYWF9ETUFfTU1DMl9SWAkJCTQ4CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9VQVJUMV9UWAkJCTQ5CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9VQVJUMV9SWAkJCTUwCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9VQVJUMl9UWAkJCTUxCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9VQVJUMl9SWAkJCTUyCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9VQVJUM19UWAkJCTUzCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9VQVJUM19SWAkJCTU0CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9VQVJUNF9UWAkJCTU1CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9VQVJUNF9SWAkJCTU2CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUM0X1RYCQkJNTcKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzRfUlgJCQk1OAorI2RlZmluZSBPTUFQNDRYWF9ETUFfTU1DNV9UWAkJCTU5CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUM1X1JYCQkJNjAKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzFfVFgJCQk2MQorI2RlZmluZSBPTUFQNDRYWF9ETUFfTU1DMV9SWAkJCTYyCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TWVNfUkVRMwkJCTY0CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ1BETV9VUAkJCTY1CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ1BETV9ETAkJCTY2CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9ETUlDX1JFUQkJCTY3CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9DMkNfU1NDTV9HUE8yCQk2OAorI2RlZmluZSBPTUFQNDRYWF9ETUFfQzJDX1NTQ01fR1BPMwkJNjkKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTRfVFgwCQkJNzAKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTRfUlgwCQkJNzEKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RTU19EU0kxX1JFUTAJCTcyCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMV9SRVExCQk3MworI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX0RTSTFfUkVRMgkJNzQKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RTU19EU0kxX1JFUTMJCTc1CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfSERNSV9SRVEJCTc2CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUMzX1RYCQkJNzcKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzNfUlgJCQk3OAorI2RlZmluZSBPTUFQNDRYWF9ETUFfVVNJTV9UWAkJCTc5CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9VU0lNX1JYCQkJODAKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RTU19EU0kyX1JFUTAJCTgxCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9EU1NfRFNJMl9SRVExCQk4MgorI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX0RTSTJfUkVRMgkJODMKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RTU19EU0kyX1JFUTMJCTg0CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TTElNQlVTMV9UWDAJCTg1CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TTElNQlVTMV9UWDEJCTg2CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TTElNQlVTMV9UWDIJCTg3CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TTElNQlVTMV9UWDMJCTg4CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TTElNQlVTMV9SWDAJCTg5CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TTElNQlVTMV9SWDEJCTkwCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TTElNQlVTMV9SWDIJCTkxCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TTElNQlVTMV9SWDMJCTkyCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TTElNQlVTMl9UWDAJCTkzCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TTElNQlVTMl9UWDEJCTk0CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TTElNQlVTMl9UWDIJCTk1CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TTElNQlVTMl9UWDMJCTk2CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TTElNQlVTMl9SWDAJCTk3CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TTElNQlVTMl9SWDEJCTk4CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TTElNQlVTMl9SWDIJCTk5CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TTElNQlVTMl9SWDMJCTEwMAorI2RlZmluZSBPTUFQNDRYWF9ETUFfQUJFX1JFUV8wCQkJMTAxCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9BQkVfUkVRXzEJCQkxMDIKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0FCRV9SRVFfMgkJCTEwMworI2RlZmluZSBPTUFQNDRYWF9ETUFfQUJFX1JFUV8zCQkJMTA0CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9BQkVfUkVRXzQJCQkxMDUKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0FCRV9SRVFfNQkJCTEwNgorI2RlZmluZSBPTUFQNDRYWF9ETUFfQUJFX1JFUV82CQkJMTA3CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9BQkVfUkVRXzcJCQkxMDgKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0FFUzFfUF9DVFhfSU5fUkVRCQkxMDkKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0FFUzFfUF9EQVRBX0lOX1JFUQkJMTEwCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9BRVMxX1BfREFUQV9PVVRfUkVRCTExMQorI2RlZmluZSBPTUFQNDRYWF9ETUFfQUVTMl9QX0NUWF9JTl9SRVEJCTExMgorI2RlZmluZSBPTUFQNDRYWF9ETUFfQUVTMl9QX0RBVEFfSU5fUkVRCQkxMTMKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0FFUzJfUF9EQVRBX09VVF9SRVEJMTE0CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9ERVNfUF9DVFhfSU5fUkVRCQkxMTUKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RFU19QX0RBVEFfSU5fUkVRCQkxMTYKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0RFU19QX0RBVEFfT1VUX1JFUQkJMTE3CisjZGVmaW5lIE9NQVA0NFhYX0RNQV9TSEEyX0NUWElOX1AJCTExOAorI2RlZmluZSBPTUFQNDRYWF9ETUFfU0hBMl9ESU5fUAkJCTExOQorI2RlZmluZSBPTUFQNDRYWF9ETUFfU0hBMl9DVFhPVVRfUAkJMTIwCisjZGVmaW5lIE9NQVA0NFhYX0RNQV9BRVMxX1BfQ09OVEVYVF9PVVRfUkVRCTEyMQorI2RlZmluZSBPTUFQNDRYWF9ETUFfQUVTMl9QX0NPTlRFWFRfT1VUX1JFUQkxMjIKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0kyQzRfVFgJCQkxMjQKKyNkZWZpbmUgT01BUDQ0WFhfRE1BX0kyQzRfUlgJCQkxMjUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2RtYS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9kbWEuaAppbmRleCA0ZWRlOWUxLi4wMjIzMmNhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2RtYS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZG1hLmgKQEAgLTIxLDYgKzIxLDkgQEAKICNpZm5kZWYgX19BU01fQVJDSF9ETUFfSAogI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9ICiAKKy8qIE1vdmUgb21hcDQgc3BlY2lmaWMgZGVmaW5lcyB0byBkbWEtNDR4eC5oICovCisjaW5jbHVkZSAiZG1hLTQ0eHguaCIKKwogLyogSGFyZHdhcmUgcmVnaXN0ZXJzIGZvciBvbWFwMSAqLwogI2RlZmluZSBPTUFQMV9ETUFfQkFTRQkJCSgweGZmZmVkODAwKQogCkBAIC0zMTYsODkgKzMxOSw2IEBACiAjZGVmaW5lIE9NQVAzNFhYX0RNQV9VU0lNX1RYCQk3OQkvKiBTX0RNQV83OCAqLwogI2RlZmluZSBPTUFQMzRYWF9ETUFfVVNJTV9SWAkJODAJLyogU19ETUFfNzkgKi8KIAotLyogRE1BIHJlcXVlc3QgbGluZXMgZm9yIDQ0eHggKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX0RTU19ESVNQQ19SRVEJNgkvKiBTX0RNQV81ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9TWVNfUkVRMgkJNwkvKiBTX0RNQV82ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9JU1NfUkVRMQkJOQkvKiBTX0RNQV84ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9JU1NfUkVRMgkJMTAJLyogU19ETUFfOSAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfSVNTX1JFUTMJCTEyCS8qIFNfRE1BXzExICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9JU1NfUkVRNAkJMTMJLyogU19ETUFfMTIgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX0RTU19SRkJJX1JFUQkxNAkvKiBTX0RNQV8xMyAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJM19UWDAJCTE1CS8qIFNfRE1BXzE0ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkzX1JYMAkJMTYJLyogU19ETUFfMTUgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX01DQlNQMl9UWAkJMTcJLyogU19ETUFfMTYgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX01DQlNQMl9SWAkJMTgJLyogU19ETUFfMTcgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX01DQlNQM19UWAkJMTkJLyogU19ETUFfMTggKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX01DQlNQM19SWAkJMjAJLyogU19ETUFfMTkgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTNfVFgxCQkyMwkvKiBTX0RNQV8yMiAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJM19SWDEJCTI0CS8qIFNfRE1BXzIzICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9JMkMzX1RYCQkyNQkvKiBTX0RNQV8yNCAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfSTJDM19SWAkJMjYJLyogU19ETUFfMjUgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX0kyQzFfVFgJCTI3CS8qIFNfRE1BXzI2ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9JMkMxX1JYCQkyOAkvKiBTX0RNQV8yNyAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfSTJDMl9UWAkJMjkJLyogU19ETUFfMjggKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX0kyQzJfUlgJCTMwCS8qIFNfRE1BXzI5ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ0JTUDRfVFgJCTMxCS8qIFNfRE1BXzMwICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ0JTUDRfUlgJCTMyCS8qIFNfRE1BXzMxICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ0JTUDFfVFgJCTMzCS8qIFNfRE1BXzMyICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9NQ0JTUDFfUlgJCTM0CS8qIFNfRE1BXzMzICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkxX1RYMAkJMzUJLyogU19ETUFfMzQgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTFfUlgwCQkzNgkvKiBTX0RNQV8zNSAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMV9UWDEJCTM3CS8qIFNfRE1BXzM2ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkxX1JYMQkJMzgJLyogU19ETUFfMzcgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTFfVFgyCQkzOQkvKiBTX0RNQV8zOCAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMV9SWDIJCTQwCS8qIFNfRE1BXzM5ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkxX1RYMwkJNDEJLyogU19ETUFfNDAgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTFfUlgzCQk0MgkvKiBTX0RNQV80MSAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMl9UWDAJCTQzCS8qIFNfRE1BXzQyICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEkyX1JYMAkJNDQJLyogU19ETUFfNDMgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTJfVFgxCQk0NQkvKiBTX0RNQV80NCAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfU1BJMl9SWDEJCTQ2CS8qIFNfRE1BXzQ1ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUMyX1RYCQk0NwkvKiBTX0RNQV80NiAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfTU1DMl9SWAkJNDgJLyogU19ETUFfNDcgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1VBUlQxX1RYCQk0OQkvKiBTX0RNQV80OCAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfVUFSVDFfUlgJCTUwCS8qIFNfRE1BXzQ5ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9VQVJUMl9UWAkJNTEJLyogU19ETUFfNTAgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1VBUlQyX1JYCQk1MgkvKiBTX0RNQV81MSAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfVUFSVDNfVFgJCTUzCS8qIFNfRE1BXzUyICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9VQVJUM19SWAkJNTQJLyogU19ETUFfNTMgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1VBUlQ0X1RYCQk1NQkvKiBTX0RNQV81NCAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfVUFSVDRfUlgJCTU2CS8qIFNfRE1BXzU1ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUM0X1RYCQk1NwkvKiBTX0RNQV81NiAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfTU1DNF9SWAkJNTgJLyogU19ETUFfNTcgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzVfVFgJCTU5CS8qIFNfRE1BXzU4ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUM1X1JYCQk2MAkvKiBTX0RNQV81OSAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfTU1DMV9UWAkJNjEJLyogU19ETUFfNjAgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX01NQzFfUlgJCTYyCS8qIFNfRE1BXzYxICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9TWVNfUkVRMwkJNjQJLyogU19ETUFfNjMgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX01DUERNX1VQCQk2NQkvKiBTX0RNQV82NCAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfTUNQRE1fREwJCTY2CS8qIFNfRE1BXzY1ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9TUEk0X1RYMAkJNzAJLyogU19ETUFfNjkgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1NQSTRfUlgwCQk3MQkvKiBTX0RNQV83MCAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX0RTSTFfUkVRMAk3MgkvKiBTX0RNQV83MSAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX0RTSTFfUkVRMQk3MwkvKiBTX0RNQV83MiAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX0RTSTFfUkVRMgk3NAkvKiBTX0RNQV83MyAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX0RTSTFfUkVRMwk3NQkvKiBTX0RNQV83NCAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX0hETUlfUkVRCTc2CS8qIFNfRE1BXzc1ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9NTUMzX1RYCQk3NwkvKiBTX0RNQV83NiAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfTU1DM19SWAkJNzgJLyogU19ETUFfNzcgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX1VTSU1fVFgJCTc5CS8qIFNfRE1BXzc4ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9VU0lNX1JYCQk4MAkvKiBTX0RNQV83OSAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX0RTSTJfUkVRMAk4MQkvKiBTX0RNQV84MCAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX0RTSTJfUkVRMQk4MgkvKiBTX0RNQV84MSAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX0RTSTJfUkVRMgk4MwkvKiBTX0RNQV84MiAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfRFNTX0RTSTJfUkVRMwk4NAkvKiBTX0RNQV84MyAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfQUJFX1JFUTAJCTEwMQkvKiBTX0RNQV8xMDAgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX0FCRV9SRVExCQkxMDIJLyogU19ETUFfMTAxICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9BQkVfUkVRMgkJMTAzCS8qIFNfRE1BXzEwMiAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfQUJFX1JFUTMJCTEwNAkvKiBTX0RNQV8xMDMgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX0FCRV9SRVE0CQkxMDUJLyogU19ETUFfMTA0ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9BQkVfUkVRNQkJMTA2CS8qIFNfRE1BXzEwNSAqLwotI2RlZmluZSBPTUFQNDRYWF9ETUFfQUJFX1JFUTYJCTEwNwkvKiBTX0RNQV8xMDYgKi8KLSNkZWZpbmUgT01BUDQ0WFhfRE1BX0FCRV9SRVE3CQkxMDgJLyogU19ETUFfMTA3ICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9JMkM0X1RYCQkxMjQJLyogU19ETUFfMTIzICovCi0jZGVmaW5lIE9NQVA0NFhYX0RNQV9JMkM0X1JYCQkxMjUJLyogU19ETUFfMTI0ICovCi0KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNkZWZpbmUgT01BUDFfRE1BX1RPVVRfSVJRCQkoMSA8PCAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9mbGFzaC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9mbGFzaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNjMyNzAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2ZsYXNoLmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqIEZsYXNoIHN1cHBvcnQgZm9yIE9NQVAxCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fT01BUF9GTEFTSF9ICisjZGVmaW5lIF9fT01BUF9GTEFTSF9ICisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CisKK2V4dGVybiB2b2lkIG9tYXAxX3NldF92cHAoc3RydWN0IG1hcF9pbmZvICptYXAsIGludCBlbmFibGUpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvZ3BtYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncG1jLmgKaW5kZXggZTA4MTMzOC4uMTQ1ODM4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncG1jLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9ncG1jLmgKQEAgLTI3LDYgKzI3LDggQEAKIAogI2RlZmluZSBHUE1DX0NPTkZJRwkJMHg1MAogI2RlZmluZSBHUE1DX1NUQVRVUwkJMHg1NAorI2RlZmluZSBHUE1DX0NTMF9CQVNFCQkweDYwCisjZGVmaW5lIEdQTUNfQ1NfU0laRQkJMHgzMAogCiAjZGVmaW5lIEdQTUNfQ09ORklHMV9XUkFQQlVSU1RfU1VQUCAgICAgKDEgPDwgMzEpCiAjZGVmaW5lIEdQTUNfQ09ORklHMV9SRUFETVVMVElQTEVfU1VQUCAgKDEgPDwgMzApCkBAIC0xMTAsNiArMTEyLDYgQEAKIGV4dGVybiBpbnQgZ3BtY19wcmVmZXRjaF9zdGF0dXModm9pZCk7CiBleHRlcm4gdm9pZCBvbWFwM19ncG1jX3NhdmVfY29udGV4dCh2b2lkKTsKIGV4dGVybiB2b2lkIG9tYXAzX2dwbWNfcmVzdG9yZV9jb250ZXh0KHZvaWQpOwotZXh0ZXJuIHZvaWQgX19pbml0IGdwbWNfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIGdwbWNfaW5pdCh2b2lkKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2kyYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pMmMuaAppbmRleCA1ODVkOWNhLi44N2Y2YmYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2kyYy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaTJjLmgKQEAgLTM0LDYgKzM0LDUgQEAKIH0KICNlbmRpZgogCi1pbnQgb21hcF9wbGF0X3JlZ2lzdGVyX2kyY19idXMoaW50IGJ1c19pZCwgdTMyIGNsa3JhdGUsCi0JCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyBjb25zdCAqaW5mbywKLQkJCQkgdW5zaWduZWQgbGVuKTsKK3ZvaWQgX19pbml0IG9tYXAxX2kyY19tdXhfcGlucyhpbnQgYnVzX2lkKTsKK3ZvaWQgX19pbml0IG9tYXAyX2kyY19tdXhfcGlucyhpbnQgYnVzX2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaW8uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaW8uaAppbmRleCBhM2U3YjQ3Li4xMjhiNTQ5IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lvLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pby5oCkBAIC0xNTgsMTAgKzE1OCw2IEBACiAgKiBWUE9NMzQzMCB3YXMgbm90IHdvcmtpbmcgZm9yIEludCBjb250cm9sbGVyCiAgKi8KIAotI2RlZmluZSBMNF9XS18zNFhYX1BIWVMJCUw0X1dLXzM0WFhfQkFTRQkvKiAweDQ4MzAwMDAwIC0tPiAweGZhMzAwMDAwICovCi0jZGVmaW5lIEw0X1dLXzM0WFhfVklSVAkJKEw0X1dLXzM0WFhfUEhZUyArIE9NQVAyX0w0X0lPX09GRlNFVCkKLSNkZWZpbmUgTDRfV0tfMzRYWF9TSVpFCQlTWl8xTQotCiAjZGVmaW5lIEw0X1BFUl8zNFhYX1BIWVMJTDRfUEVSXzM0WFhfQkFTRQogCQkJCQkJLyogMHg0OTAwMDAwMCAtLT4gMHhmYjAwMDAwMCAqLwogI2RlZmluZSBMNF9QRVJfMzRYWF9WSVJUCShMNF9QRVJfMzRYWF9QSFlTICsgT01BUDJfTDRfSU9fT0ZGU0VUKQpAQCAtMjA0LDExICsyMDAsNiBAQAogI2RlZmluZSBMNF80NFhYX1ZJUlQJCShMNF80NFhYX1BIWVMgKyBPTUFQMl9MNF9JT19PRkZTRVQpCiAjZGVmaW5lIEw0XzQ0WFhfU0laRQkJU1pfNE0KIAotCi0jZGVmaW5lIEw0X1dLXzQ0WFhfUEhZUwkJTDRfV0tfNDRYWF9CQVNFCS8qIDB4NGEzMDAwMDAgLS0+IDB4ZmMzMDAwMDAgKi8KLSNkZWZpbmUgTDRfV0tfNDRYWF9WSVJUCQkoTDRfV0tfNDRYWF9QSFlTICsgT01BUDJfTDRfSU9fT0ZGU0VUKQotI2RlZmluZSBMNF9XS180NFhYX1NJWkUJCVNaXzFNCi0KICNkZWZpbmUgTDRfUEVSXzQ0WFhfUEhZUwlMNF9QRVJfNDRYWF9CQVNFCiAJCQkJCQkvKiAweDQ4MDAwMDAwIC0tPiAweGZhMDAwMDAwICovCiAjZGVmaW5lIEw0X1BFUl80NFhYX1ZJUlQJKEw0X1BFUl80NFhYX1BIWVMgKyBPTUFQMl9MNF9JT19PRkZTRVQpCkBAIC0yNjgsNyArMjU5LDM4IEBACiBleHRlcm4gdm9pZCBvbWFwMV9tYXBfY29tbW9uX2lvKHZvaWQpOwogZXh0ZXJuIHZvaWQgb21hcDFfaW5pdF9jb21tb25faHcodm9pZCk7CiAKLWV4dGVybiB2b2lkIG9tYXAyX21hcF9jb21tb25faW8odm9pZCk7CisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MjAKK2V4dGVybiB2b2lkIG9tYXAyNDJ4X21hcF9jb21tb25faW8odm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXAyNDJ4X21hcF9jb21tb25faW8odm9pZCkKK3sKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKK2V4dGVybiB2b2lkIG9tYXAyNDN4X21hcF9jb21tb25faW8odm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXAyNDN4X21hcF9jb21tb25faW8odm9pZCkKK3sKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKK2V4dGVybiB2b2lkIG9tYXAzNHh4X21hcF9jb21tb25faW8odm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXAzNHh4X21hcF9jb21tb25faW8odm9pZCkKK3sKK30KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDQKK2V4dGVybiB2b2lkIG9tYXA0NHh4X21hcF9jb21tb25faW8odm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG9tYXA0NHh4X21hcF9jb21tb25faW8odm9pZCkKK3sKK30KKyNlbmRpZgorCiBleHRlcm4gdm9pZCBvbWFwMl9pbml0X2NvbW1vbl9odyhzdHJ1Y3Qgb21hcF9zZHJjX3BhcmFtcyAqc2RyY19jczAsCiAJCQkJIHN0cnVjdCBvbWFwX3NkcmNfcGFyYW1zICpzZHJjX2NzMSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaXJxcy00NHh4LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lycXMtNDR4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxODMyMmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L2lycXMtNDR4eC5oCkBAIC0wLDAgKzEsMTQ0IEBACisvKgorICogT01BUDQgSW50ZXJydXB0IGxpbmVzIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqCisgKiBTYW50b3NoIFNoaWxpbWthciAoc2FudG9zaC5zaGlsaW1rYXJAdGkuY29tKQorICogQmVub2l0IENvdXNzb24gKGItY291c3NvbkB0aS5jb20pCisgKgorICogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gdGhlIE9NQVAgaGFyZHdhcmUgZGF0YWJhc2VzLgorICogV2UgcmVzcGVjdGZ1bGx5IGFzayB0aGF0IGFueSBtb2RpZmljYXRpb25zIHRvIHRoaXMgZmlsZSBiZSBjb29yZGluYXRlZAorICogd2l0aCB0aGUgcHVibGljIGxpbnV4LW9tYXBAdmdlci5rZXJuZWwub3JnIG1haWxpbmcgbGlzdCBhbmQgdGhlCisgKiBhdXRob3JzIGFib3ZlIHRvIGVuc3VyZSB0aGF0IHRoZSBhdXRvZ2VuZXJhdGlvbiBzY3JpcHRzIGFyZSBrZXB0CisgKiB1cC10by1kYXRlIHdpdGggdGhlIGZpbGUgY29udGVudHMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fQVJDSF9BUk1fTUFDSF9PTUFQMl9PTUFQNDRYWF9JUlFTX0gKKyNkZWZpbmUgX19BUkNIX0FSTV9NQUNIX09NQVAyX09NQVA0NFhYX0lSUVNfSAorCisvKiBPTUFQNDRYWCBJUlFzIG51bWJlcnMgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0xPQ0FMVElNRVIJCQkyOQorI2RlZmluZSBPTUFQNDRYWF9JUlFfTE9DQUxXRFQJCQkzMAorCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQJCQkzMgorCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9QTDMxMAkJCSgwICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0NUSTAJCQkoMSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9DVEkxCQkJKDIgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfRUxNCQkJKDQgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfU1lTXzFOCQkJKDcgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfU0VDVVJJVFlfRVZFTlRTCQkoOCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9MM19EQkcJCQkoOSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9MM19BUFAJCQkoMTAgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfUFJDTQkJCSgxMSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9TRE1BXzAJCQkoMTIgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfU0RNQV8xCQkJKDEzICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1NETUFfMgkJCSgxNCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9TRE1BXzMJCQkoMTUgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfTUNCU1A0CQkJKDE2ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX01DQlNQMQkJCSgxNyArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9TUl9NQ1UJCQkoMTggKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfU1JfQ09SRQkJCSgxOSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9HUE1DCQkJKDIwICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0dGWAkJCSgyMSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9NQ0JTUDIJCQkoMjIgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfTUNCU1AzCQkJKDIzICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0lTU181CQkJKDI0ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0RTU19ESVNQQwkJCSgyNSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9NQUlMX1UwCQkJKDI2ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0MyQ19TU0NNXzAJCQkoMjcgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfVEVTTEFfTU1VCQkJKDI4ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0dQSU8xCQkJKDI5ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0dQSU8yCQkJKDMwICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0dQSU8zCQkJKDMxICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0dQSU80CQkJKDMyICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0dQSU81CQkJKDMzICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0dQSU82CQkJKDM0ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1VTSU0JCQkoMzUgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfV0RUMwkJCSgzNiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9HUFQxCQkJKDM3ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0dQVDIJCQkoMzggKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfR1BUMwkJCSgzOSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9HUFQ0CQkJKDQwICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0dQVDUJCQkoNDEgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfR1BUNgkJCSg0MiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9HUFQ3CQkJKDQzICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0dQVDgJCQkoNDQgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfR1BUOQkJCSg0NSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9HUFQxMAkJCSg0NiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9HUFQxMQkJCSg0NyArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9TUEk0CQkJKDQ4ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1NIQTFfUwkJCSg0OSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9GUEtBX1NJTlRSRVFVRVNUX1MJCSg1MCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9TSEExX1AJCQkoNTEgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfUk5HCQkJKDUyICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0RTU19EU0kxCQkJKDUzICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0kyQzEJCQkoNTYgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfSTJDMgkJCSg1NyArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9IRFEJCQkoNTggKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfTU1DNQkJCSg1OSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9JMkMzCQkJKDYxICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0kyQzQJCQkoNjIgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfQUVTMl9TCQkJKDYzICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0FFUzJfUAkJCSg2NCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9TUEkxCQkJKDY1ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1NQSTIJCQkoNjYgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfSFNJX1AxCQkJKDY3ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0hTSV9QMgkJCSg2OCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9GRElGXzMJCQkoNjkgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfVUFSVDQJCQkoNzAgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfSFNJX0RNQQkJCSg3MSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9VQVJUMQkJCSg3MiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9VQVJUMgkJCSg3MyArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9VQVJUMwkJCSg3NCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9QQklBUwkJCSg3NSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9PSENJCQkJKDc2ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0VIQ0kJCQkoNzcgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfVExMCQkJKDc4ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0FFUzFfUwkJCSg3OSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9XRFQyCQkJKDgwICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0RFU19TCQkJKDgxICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0RFU19QCQkJKDgyICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX01NQzEJCQkoODMgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfRFNTX0RTSTIJCQkoODQgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfQUVTMV9QCQkJKDg1ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX01NQzIJCQkoODYgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfTVBVX0lDUgkJCSg4NyArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9DMkNfU1NDTV8xCQkJKDg4ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0ZTVVNCCQkJKDg5ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0ZTVVNCX1NNSQkJCSg5MCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9TUEkzCQkJKDkxICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0hTX1VTQl9NQ19OCQkoOTIgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfSFNfVVNCX0RNQV9OCQkoOTMgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfTU1DMwkJCSg5NCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9HUFQxMgkJCSg5NSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9NTUM0CQkJKDk2ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1NMSU1CVVMxCQkJKDk3ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1NMSU1CVVMyCQkJKDk4ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0FCRQkJCSg5OSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9EVUNBVElfTU1VCQkJKDEwMCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9EU1NfSERNSQkJCSgxMDEgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfU1JfSVZBCQkJKDEwMiArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9JVkFfSERfUE9TWU5DSVRSUEVORF8xCSgxMDMgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfSVZBX0hEX1BPU1lOQ0lUUlBFTkRfMAkoMTA0ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0lWQV9IRF9QT01CSU5UUlBFTkRfMAkoMTA3ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX01DQVNQMV9BUgkJCSgxMDggKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfTUNBU1AxX0FYCQkJKDEwOSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9FTUlGNF8xCQkJKDExMCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9FTUlGNF8yCQkJKDExMSArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9NQ1BETQkJCSgxMTIgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfRE1NCQkJKDExMyArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9ETUlDCQkJKDExNCArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9DRE1BXzAJCQkoMTE1ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX0NETUFfMQkJCSgxMTYgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfQ0RNQV8yCQkJKDExNyArIE9NQVA0NFhYX0lSUV9HSUNfU1RBUlQpCisjZGVmaW5lIE9NQVA0NFhYX0lSUV9DRE1BXzMJCQkoMTE4ICsgT01BUDQ0WFhfSVJRX0dJQ19TVEFSVCkKKyNkZWZpbmUgT01BUDQ0WFhfSVJRX1NZU18yTgkJCSgxMTkgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfS0JEX0NUTAkJCSgxMjAgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorI2RlZmluZSBPTUFQNDRYWF9JUlFfVU5JUFJPMQkJCSgxMjQgKyBPTUFQNDRYWF9JUlFfR0lDX1NUQVJUKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvaXJxcy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pcnFzLmgKaW5kZXggYzBhYjdjOC4uYjY1MDg4YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pcnFzLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9pcnFzLmgKQEAgLTI4LDYgKzI4LDkgQEAKICNpZm5kZWYgX19BU01fQVJDSF9PTUFQMTVYWF9JUlFTX0gKICNkZWZpbmUgX19BU01fQVJDSF9PTUFQMTVYWF9JUlFTX0gKIAorLyogQWxsIE9NQVA0IHNwZWNpZmljIGRlZmluZXMgYXJlIG1vdmVkIHRvIGlycXMtNDR4eC5oICovCisjaW5jbHVkZSAiaXJxcy00NHh4LmgiCisKIC8qCiAgKiBJUlEgbnVtYmVycyBmb3IgaW50ZXJydXB0IGhhbmRsZXIgMQogICoKQEAgLTM0NCw5NSArMzQ3LDE2IEBACiAKICNkZWZpbmUJSU5UXzM0WFhfQkVOQ0hfTVBVX0VNVUwJMwogCi0KLSNkZWZpbmUgSVJRX0dJQ19TVEFSVAkJMzIKLSNkZWZpbmUgSU5UXzQ0WFhfTE9DQUxUSU1FUl9JUlEJMjkKLSNkZWZpbmUgSU5UXzQ0WFhfTE9DQUxXRFRfSVJRCTMwCi0KLSNkZWZpbmUgSU5UXzQ0WFhfQkVOQ0hfTVBVX0VNVUwJKDMgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9TU01fQUJPUlRfSVJRCSg2ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfU1lTX05JUlEJKDcgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9EMkRfRldfSVJRCSg4ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfUFJDTV9NUFVfSVJRCSgxMSArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX1NETUFfSVJRMAkoMTIgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9TRE1BX0lSUTEJKDEzICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfU0RNQV9JUlEyCSgxNCArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX1NETUFfSVJRMwkoMTUgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9JU1NfSVJRCSgyNCArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0RTU19JUlEJKDI1ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfTUFJTF9VMF9NUFUJKDI2ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfRFNQX01NVQkoMjggKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9HUFRJTUVSMQkoMzcgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9HUFRJTUVSMgkoMzggKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9HUFRJTUVSMwkoMzkgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9HUFRJTUVSNAkoNDAgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9HUFRJTUVSNQkoNDEgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9HUFRJTUVSNgkoNDIgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9HUFRJTUVSNwkoNDMgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9HUFRJTUVSOAkoNDQgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9HUFRJTUVSOQkoNDUgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9HUFRJTUVSMTAJKDQ2ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfR1BUSU1FUjExCSg0NyArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0dQVElNRVIxMgkoOTUgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9TSEExTUQ1CSg1MSArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0kyQzFfSVJRCSg1NiArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0kyQzJfSVJRCSg1NyArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0hEUV9JUlEJKDU4ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfU1BJMV9JUlEJKDY1ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfU1BJMl9JUlEJKDY2ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfSFNJXzFfSVJRMAkoNjcgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9IU0lfMl9JUlExCSg2OCArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0hTSV8xX0RNQUlSUQkoNzEgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9VQVJUMV9JUlEJKDcyICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfVUFSVDJfSVJRCSg3MyArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX1VBUlQzX0lSUQkoNzQgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9VQVJUNF9JUlEJKDcwICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfVVNCX0lSUV9OSVNPCSg3NiArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX1VTQl9JUlFfSVNPCSg3NyArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX1VTQl9JUlFfSEdFTgkoNzggKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9VU0JfSVJRX0hTT0YJKDc5ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfVVNCX0lSUV9PVEcJKDgwICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfTUNCU1A0X0lSUV9UWAkoODEgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9NQ0JTUDRfSVJRX1JYCSg4MiArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX01NQ19JUlEJKDgzICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfTU1DMl9JUlEJKDg2ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfTUNCU1AyX0lSUV9UWAkoODkgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9NQ0JTUDJfSVJRX1JYCSg5MCArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX1NQSTNfSVJRCSg5MSArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX1NQSTVfSVJRCSg2OSArIElSUV9HSUNfU1RBUlQpCi0KLSNkZWZpbmUgSU5UXzQ0WFhfTUNCU1A1X0lSUQkoMTYgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDR4WF9NQ0JTUDFfSVJRCSgxNyArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX01DQlNQMl9JUlEJKDIyICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfTUNCU1AzX0lSUQkoMjMgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9NQ0JTUDRfSVJRCSgyNyArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0hTX1VTQl9NQwkoOTIgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9IU19VU0JfRE1BCSg5MyArIElSUV9HSUNfU1RBUlQpCi0KLSNkZWZpbmUgSU5UXzQ0WFhfR1BJT19CQU5LMQkoMjkgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9HUElPX0JBTksyCSgzMCArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0dQSU9fQkFOSzMJKDMxICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfR1BJT19CQU5LNAkoMzIgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9HUElPX0JBTks1CSgzMyArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0dQSU9fQkFOSzYJKDM0ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfVVNJTV9JUlEJKDM1ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfV0RUM19JUlEJKDM2ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfU1BJNF9JUlEJKDQ4ICsgSVJRX0dJQ19TVEFSVCkKLSNkZWZpbmUgSU5UXzQ0WFhfU0hBMU1ENTJfSVJRCSg0OSArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0ZQS0FfUkVBRFlfSVJRCSg1MCArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX1NIQTFNRDUxX0lSUQkoNTEgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9STkdfSVJRCSg1MiArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX01NQzVfSVJRCSg1OSArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0kyQzNfSVJRCSg2MSArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX0ZQS0FfRVJST1JfSVJRCSg2NCArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX1BCSUFTX0lSUQkoNzUgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9PSENJX0lSUQkoNzYgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9FSENJX0lSUQkoNzcgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9UTExfSVJRCSg3OCArIElSUV9HSUNfU1RBUlQpCi0jZGVmaW5lIElOVF80NFhYX1BBUlRIQVNIX0lSUQkoNzkgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9NTUMzX0lSUQkoOTQgKyBJUlFfR0lDX1NUQVJUKQotI2RlZmluZSBJTlRfNDRYWF9NTUM0X0lSUQkoOTYgKyBJUlFfR0lDX1NUQVJUKQotCisjZGVmaW5lIElOVF8zNVhYX0hFQ0MwX0lSUQkJMjQKKyNkZWZpbmUgSU5UXzM1WFhfSEVDQzFfSVJRCQkyOAorI2RlZmluZSBJTlRfMzVYWF9FTUFDX0MwX1JYVEhSRVNIX0lSUQk2NworI2RlZmluZSBJTlRfMzVYWF9FTUFDX0MwX1JYX1BVTFNFX0lSUQk2OAorI2RlZmluZSBJTlRfMzVYWF9FTUFDX0MwX1RYX1BVTFNFX0lSUQk2OQorI2RlZmluZSBJTlRfMzVYWF9FTUFDX0MwX01JU0NfUFVMU0VfSVJRCTcwCisjZGVmaW5lIElOVF8zNVhYX1VTQk9UR19JUlEJCTcxCisjZGVmaW5lIElOVF8zNVhYX0NDRENfVkQwX0lSUQkJODgKKyNkZWZpbmUgSU5UXzM1WFhfQ0NEQ19WRDFfSVJRCQk5MgorI2RlZmluZSBJTlRfMzVYWF9DQ0RDX1ZEMl9JUlEJCTkzCiAKIC8qIE1heC4gMTI4IGxldmVsIDIgSVJRcyAoT01BUDE2MTApLCAxOTIgR1BJT3MgKE9NQVA3MzAvODUwKSBhbmQKICAqIDE2IE1QVUlPIGxpbmVzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21jYnNwLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21jYnNwLmgKaW5kZXggNGYyMmU1Yi4uMzk3NDgzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tY2JzcC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbWNic3AuaApAQCAtNDksNiArNDksOSBAQAogCiAjZGVmaW5lIE9NQVAzNFhYX01DQlNQMV9CQVNFCTB4NDgwNzQwMDAKICNkZWZpbmUgT01BUDM0WFhfTUNCU1AyX0JBU0UJMHg0OTAyMjAwMAorI2RlZmluZSBPTUFQMzRYWF9NQ0JTUDJfU1RfQkFTRQkweDQ5MDI4MDAwCisjZGVmaW5lIE9NQVAzNFhYX01DQlNQM19CQVNFCTB4NDkwMjQwMDAKKyNkZWZpbmUgT01BUDM0WFhfTUNCU1AzX1NUX0JBU0UJMHg0OTAyQTAwMAogI2RlZmluZSBPTUFQMzRYWF9NQ0JTUDNfQkFTRQkweDQ5MDI0MDAwCiAjZGVmaW5lIE9NQVAzNFhYX01DQlNQNF9CQVNFCTB4NDkwMjYwMDAKICNkZWZpbmUgT01BUDM0WFhfTUNCU1A1X0JBU0UJMHg0ODA5NjAwMApAQCAtMTAzLDggKzEwNiw3IEBACiAjZGVmaW5lIEFVRElPX0RNQV9UWAkJT01BUF9ETUFfTUNCU1AxX1RYCiAjZGVmaW5lIEFVRElPX0RNQV9SWAkJT01BUF9ETUFfTUNCU1AxX1JYCiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpIHx8IFwKLQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2Vsc2UKIAogI2RlZmluZSBPTUFQX01DQlNQX1JFR19EUlIyCTB4MDAKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfRFJSMQkweDA0CkBAIC0xNDcsNiArMTQ5LDE1IEBACiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1dBS0VVUEVOCTB4QTgKICNkZWZpbmUgT01BUF9NQ0JTUF9SRUdfWENDUgkweEFDCiAjZGVmaW5lIE9NQVBfTUNCU1BfUkVHX1JDQ1IJMHhCMAorI2RlZmluZSBPTUFQX01DQlNQX1JFR19TU0VMQ1IJMHhCQworCisjZGVmaW5lIE9NQVBfU1RfUkVHX1JFVgkJMHgwMAorI2RlZmluZSBPTUFQX1NUX1JFR19TWVNDT05GSUcJMHgxMAorI2RlZmluZSBPTUFQX1NUX1JFR19JUlFTVEFUVVMJMHgxOAorI2RlZmluZSBPTUFQX1NUX1JFR19JUlFFTkFCTEUJMHgxQworI2RlZmluZSBPTUFQX1NUX1JFR19TR0FJTkNSCTB4MjQKKyNkZWZpbmUgT01BUF9TVF9SRUdfU0ZJUkNSCTB4MjgKKyNkZWZpbmUgT01BUF9TVF9SRUdfU1NFTENSCTB4MkMKIAogI2RlZmluZSBBVURJT19NQ0JTUF9EQVRBV1JJVEUJKE9NQVAyNFhYX01DQlNQMl9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFhSMSkKICNkZWZpbmUgQVVESU9fTUNCU1BfREFUQVJFQUQJKE9NQVAyNFhYX01DQlNQMl9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSMSkKQEAgLTI2NSw2ICsyNzYsMjQgQEAKICNkZWZpbmUgRU5BV0FLRVVQCQkweDAwMDQKICNkZWZpbmUgU09GVFJTVAkJCTB4MDAwMgogCisvKioqKioqKioqKioqKioqKioqKioqKiBNY0JTUCBTU0VMQ1IgYml0IGRlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBTSURFVE9ORUVOCQkweDA0MDAKKworLyoqKioqKioqKioqKioqKioqKioqKiogTWNCU1AgU2lkZXRvbmUgU1lTQ09ORklHIGJpdCBkZWZpbml0aW9ucyAqKioqKioqKioqKi8KKyNkZWZpbmUgU1RfQVVUT0lETEUJCTB4MDAwMQorCisvKioqKioqKioqKioqKioqKioqKioqKiBNY0JTUCBTaWRldG9uZSBTR0FJTkNSIGJpdCBkZWZpbml0aW9ucyAqKioqKioqKioqKioqLworI2RlZmluZSBTVF9DSDFHQUlOKHZhbHVlKQkoKHZhbHVlPDwxNikpCS8qIEJpdHMgMTY6MzEgKi8KKyNkZWZpbmUgU1RfQ0gwR0FJTih2YWx1ZSkJKHZhbHVlKQkJLyogQml0cyAwOjE1ICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqIE1jQlNQIFNpZGV0b25lIFNGSVJDUiBiaXQgZGVmaW5pdGlvbnMgKioqKioqKioqKioqKiovCisjZGVmaW5lIFNUX0ZJUkNPRUZGKHZhbHVlKQkodmFsdWUpCQkvKiBCaXRzIDA6MTUgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKiogTWNCU1AgU2lkZXRvbmUgU1NFTENSIGJpdCBkZWZpbml0aW9ucyAqKioqKioqKioqKioqKi8KKyNkZWZpbmUgU1RfQ09FRkZXUkRPTkUJCTB4MDAwNAorI2RlZmluZSBTVF9DT0VGRldSRU4JCTB4MDAwMgorI2RlZmluZSBTVF9TSURFVE9ORUVOCQkweDAwMDEKKwogLyoqKioqKioqKioqKioqKioqKioqKiogTWNCU1AgRE1BIG9wZXJhdGluZyBtb2RlcyAqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgTUNCU1BfRE1BX01PREVfRUxFTUVOVAkJMAogI2RlZmluZSBNQ0JTUF9ETUFfTU9ERV9USFJFU0hPTEQJMQpAQCAtMzc0LDExICs0MDMsMjMgQEAKIAl1OCBkbWFfcnhfc3luYywgZG1hX3R4X3N5bmM7CiAJdTE2IHJ4X2lycSwgdHhfaXJxOwogCXN0cnVjdCBvbWFwX21jYnNwX29wcyAqb3BzOwotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzNFhYCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKKwkvKiBTaWRldG9uZSBibG9jayBmb3IgTWNCU1AgMiBhbmQgMyAqLworCXVuc2lnbmVkIGxvbmcgcGh5c19iYXNlX3N0OwogCXUxNiBidWZmZXJfc2l6ZTsKICNlbmRpZgogfTsKIAorc3RydWN0IG9tYXBfbWNic3Bfc3RfZGF0YSB7CisJdm9pZCBfX2lvbWVtICppb19iYXNlX3N0OworCWJvb2wgcnVubmluZzsKKwlib29sIGVuYWJsZWQ7CisJczE2IHRhcHNbMTI4XTsJLyogU2lkZXRvbmUgZmlsdGVyIGNvZWZmaWNpZW50cyAqLworCWludCBucl90YXBzOwkvKiBOdW1iZXIgb2YgZmlsdGVyIGNvZWZmaWNpZW50cyBpbiB1c2UgKi8KKwlzMTYgY2gwZ2FpbjsKKwlzMTYgY2gxZ2FpbjsKK307CisKIHN0cnVjdCBvbWFwX21jYnNwIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJdW5zaWduZWQgbG9uZyBwaHlzX2Jhc2U7CkBAIC00MTAsMjAgKzQ1MSwyMiBAQAogCXN0cnVjdCBvbWFwX21jYnNwX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwogCXN0cnVjdCBjbGsgKmljbGs7CiAJc3RydWN0IGNsayAqZmNsazsKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCisJc3RydWN0IG9tYXBfbWNic3Bfc3RfZGF0YSAqc3RfZGF0YTsKIAlpbnQgZG1hX29wX21vZGU7CiAJdTE2IG1heF90eF90aHJlczsKIAl1MTYgbWF4X3J4X3RocmVzOwogI2VuZGlmCisJdm9pZCAqcmVnX2NhY2hlOwogfTsKIGV4dGVybiBzdHJ1Y3Qgb21hcF9tY2JzcCAqKm1jYnNwX3B0cjsKLWV4dGVybiBpbnQgb21hcF9tY2JzcF9jb3VudDsKK2V4dGVybiBpbnQgb21hcF9tY2JzcF9jb3VudCwgb21hcF9tY2JzcF9jYWNoZV9zaXplOwogCiBpbnQgb21hcF9tY2JzcF9pbml0KHZvaWQpOwogdm9pZCBvbWFwX21jYnNwX3JlZ2lzdGVyX2JvYXJkX2NmZyhzdHJ1Y3Qgb21hcF9tY2JzcF9wbGF0Zm9ybV9kYXRhICpjb25maWcsCiAJCQkJCWludCBzaXplKTsKIHZvaWQgb21hcF9tY2JzcF9jb25maWcodW5zaWduZWQgaW50IGlkLCBjb25zdCBzdHJ1Y3Qgb21hcF9tY2JzcF9yZWdfY2ZnICogY29uZmlnKTsKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzRYWAorI2lmZGVmIENPTkZJR19BUkNIX09NQVAzCiB2b2lkIG9tYXBfbWNic3Bfc2V0X3R4X3RocmVzaG9sZCh1bnNpZ25lZCBpbnQgaWQsIHUxNiB0aHJlc2hvbGQpOwogdm9pZCBvbWFwX21jYnNwX3NldF9yeF90aHJlc2hvbGQodW5zaWduZWQgaW50IGlkLCB1MTYgdGhyZXNob2xkKTsKIHUxNiBvbWFwX21jYnNwX2dldF9tYXhfdHhfdGhyZXNob2xkKHVuc2lnbmVkIGludCBpZCk7CkBAIC00NTksNCArNTAyLDIxIEBACiBpbnQgb21hcF9tY2JzcF9wb2xsd3JpdGUodW5zaWduZWQgaW50IGlkLCB1MTYgYnVmKTsKIGludCBvbWFwX21jYnNwX3NldF9pb190eXBlKHVuc2lnbmVkIGludCBpZCwgb21hcF9tY2JzcF9pb190eXBlX3QgaW9fdHlwZSk7CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMworLyogU2lkZXRvbmUgc3BlY2lmaWMgQVBJICovCitpbnQgb21hcF9zdF9zZXRfY2hnYWluKHVuc2lnbmVkIGludCBpZCwgaW50IGNoYW5uZWwsIHMxNiBjaGdhaW4pOworaW50IG9tYXBfc3RfZ2V0X2NoZ2Fpbih1bnNpZ25lZCBpbnQgaWQsIGludCBjaGFubmVsLCBzMTYgKmNoZ2Fpbik7CitpbnQgb21hcF9zdF9lbmFibGUodW5zaWduZWQgaW50IGlkKTsKK2ludCBvbWFwX3N0X2Rpc2FibGUodW5zaWduZWQgaW50IGlkKTsKK2ludCBvbWFwX3N0X2lzX2VuYWJsZWQodW5zaWduZWQgaW50IGlkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBvbWFwX3N0X3NldF9jaGdhaW4odW5zaWduZWQgaW50IGlkLCBpbnQgY2hhbm5lbCwKKwkJCQkgICAgIHMxNiBjaGdhaW4pIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IG9tYXBfc3RfZ2V0X2NoZ2Fpbih1bnNpZ25lZCBpbnQgaWQsIGludCBjaGFubmVsLAorCQkJCSAgICAgczE2ICpjaGdhaW4pIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgaW50IG9tYXBfc3RfZW5hYmxlKHVuc2lnbmVkIGludCBpZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgb21hcF9zdF9kaXNhYmxlKHVuc2lnbmVkIGludCBpZCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgb21hcF9zdF9pc19lbmFibGVkKHVuc2lnbmVkIGludCBpZCkgeyAgcmV0dXJuIDA7IH0KKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbWVtb3J5LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21lbW9yeS5oCmluZGV4IDMzMjVmN2IuLmQ1MzA2YmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbWVtb3J5LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tZW1vcnkuaApAQCAtMzgsOCArMzgsNyBAQAogICovCiAjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMSkKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4MTAwMDAwMDApCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSB8fCBcCi0JCQlkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQorI2Vsc2UKICNkZWZpbmUgUEhZU19PRkZTRVQJCVVMKDB4ODAwMDAwMDApCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tZW5lbGF1cy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tZW5lbGF1cy5oCmluZGV4IDMxMjJiZjYuLjRhOTcwZWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbWVuZWxhdXMuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21lbmVsYXVzLmgKQEAgLTQwLDcgKzQwLDcgQEAKIAogZXh0ZXJuIGludCBtZW5lbGF1c19zZXRfcmVndWxhdG9yX3NsZWVwKGludCBlbmFibGUsIHUzMiB2YWwpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgJiYgZGVmaW5lZChDT05GSUdfTUVORUxBVVMpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgJiYgZGVmaW5lZChDT05GSUdfTUVORUxBVVMpCiAjZGVmaW5lIG9tYXBfaGFzX21lbmVsYXVzKCkJMQogI2Vsc2UKICNkZWZpbmUgb21hcF9oYXNfbWVuZWxhdXMoKQkwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21tYy5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tbWMuaAppbmRleCAyOTkzNzEzLi5hMWJhYzA3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L21tYy5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbW1jLmgKQEAgLTU1LDEyICs1NSwxMiBAQAogCXVuc2lnbmVkIGludCBtYXhfZnJlcTsKIAogCS8qIHN3aXRjaCB0aGUgYnVzIHRvIGEgbmV3IHNsb3QgKi8KLQlpbnQgKCogc3dpdGNoX3Nsb3QpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpOworCWludCAoKnN3aXRjaF9zbG90KShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KTsKIAkvKiBpbml0aWFsaXplIGJvYXJkLXNwZWNpZmljIE1NQyBmdW5jdGlvbmFsaXR5LCBjYW4gYmUgTlVMTCBpZgogCSAqIG5vdCBzdXBwb3J0ZWQgKi8KLQlpbnQgKCogaW5pdCkoc3RydWN0IGRldmljZSAqZGV2KTsKLQl2b2lkICgqIGNsZWFudXApKHN0cnVjdCBkZXZpY2UgKmRldik7Ci0Jdm9pZCAoKiBzaHV0ZG93bikoc3RydWN0IGRldmljZSAqZGV2KTsKKwlpbnQgKCppbml0KShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCXZvaWQgKCpjbGVhbnVwKShzdHJ1Y3QgZGV2aWNlICpkZXYpOworCXZvaWQgKCpzaHV0ZG93bikoc3RydWN0IGRldmljZSAqZGV2KTsKIAogCS8qIFRvIGhhbmRsZSBib2FyZCByZWxhdGVkIHN1c3BlbmQvcmVzdW1lIGZ1bmN0aW9uYWxpdHkgZm9yIE1NQyAqLwogCWludCAoKnN1c3BlbmQpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpOwpAQCAtOTYsMTQgKzk2LDI4IEBACiAJCS8qIFRyeSB0byBzbGVlcCBvciBwb3dlciBvZmYgd2hlbiBwb3NzaWJsZSAqLwogCQl1bnNpZ25lZCBwb3dlcl9zYXZpbmc6MTsKIAorCQkvKiBJZiB1c2luZyBwb3dlcl9zYXZpbmcgYW5kIHRoZSBNTUMgcG93ZXIgaXMgbm90IHRvIGdvIG9mZiAqLworCQl1bnNpZ25lZCBub19vZmY6MTsKKworCQkvKiBSZWd1bGF0b3Igb2ZmIHJlbWFwcGVkIHRvIHNsZWVwICovCisJCXVuc2lnbmVkIHZjY19hdXhfZGlzYWJsZV9pc19zbGVlcDoxOworCiAJCWludCBzd2l0Y2hfcGluOwkJCS8qIGdwaW8gKGNhcmQgZGV0ZWN0KSAqLwogCQlpbnQgZ3Bpb193cDsJCQkvKiBncGlvICh3cml0ZSBwcm90ZWN0KSAqLwogCi0JCWludCAoKiBzZXRfYnVzX21vZGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBidXNfbW9kZSk7Ci0JCWludCAoKiBzZXRfcG93ZXIpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbiwgaW50IHZkZCk7Ci0JCWludCAoKiBnZXRfcm8pKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpOworCQlpbnQgKCpzZXRfYnVzX21vZGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBidXNfbW9kZSk7CisJCWludCAoKnNldF9wb3dlcikoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwKKwkJCQkgaW50IHBvd2VyX29uLCBpbnQgdmRkKTsKKwkJaW50ICgqZ2V0X3JvKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KTsKIAkJaW50ICgqc2V0X3NsZWVwKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgc2xlZXAsCiAJCQkJIGludCB2ZGQsIGludCBjYXJkc2xlZXApOworCQl2b2lkICgqcmVtdXgpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBwb3dlcl9vbik7CisJCS8qIENhbGwgYmFjayBiZWZvcmUgZW5hYmxpbmcgLyBkaXNhYmxpbmcgcmVndWxhdG9ycyAqLworCQl2b2lkICgqYmVmb3JlX3NldF9yZWcpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsCisJCQkJICAgICAgIGludCBwb3dlcl9vbiwgaW50IHZkZCk7CisJCS8qIENhbGwgYmFjayBhZnRlciBlbmFibGluZyAvIGRpc2FibGluZyByZWd1bGF0b3JzICovCisJCXZvaWQgKCphZnRlcl9zZXRfcmVnKShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LAorCQkJCSAgICAgIGludCBwb3dlcl9vbiwgaW50IHZkZCk7CiAKIAkJLyogcmV0dXJuIE1NQyBjb3ZlciBzd2l0Y2ggc3RhdGUsIGNhbiBiZSBOVUxMIGlmIG5vdCBzdXBwb3J0ZWQuCiAJCSAqCkBAIC0xMTEsMTQgKzEyNSwxNCBAQAogCQkgKiAgIDAgLSBjbG9zZWQKIAkJICogICAxIC0gb3BlbgogCQkgKi8KLQkJaW50ICgqIGdldF9jb3Zlcl9zdGF0ZSkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCk7CisJCWludCAoKmdldF9jb3Zlcl9zdGF0ZSkoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCk7CiAKIAkJY29uc3QgY2hhciAqbmFtZTsKIAkJdTMyIG9jcl9tYXNrOwogCiAJCS8qIENhcmQgZGV0ZWN0aW9uIElSUXMgKi8KIAkJaW50IGNhcmRfZGV0ZWN0X2lycTsKLQkJaW50ICgqIGNhcmRfZGV0ZWN0KShpbnQgaXJxKTsKKwkJaW50ICgqY2FyZF9kZXRlY3QpKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QpOwogCiAJCXVuc2lnbmVkIGludCBiYW5fb3BlbmVuZGVkOjE7CiAKQEAgLTEyNiw3ICsxNDAsOCBAQAogfTsKIAogLyogY2FsbGVkIGZyb20gYm9hcmQtc3BlY2lmaWMgY2FyZCBkZXRlY3Rpb24gc2VydmljZSByb3V0aW5lICovCi1leHRlcm4gdm9pZCBvbWFwX21tY19ub3RpZnlfY292ZXJfZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IGlzX2Nsb3NlZCk7CitleHRlcm4gdm9pZCBvbWFwX21tY19ub3RpZnlfY292ZXJfZXZlbnQoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwKKwkJCQkJaW50IGlzX2Nsb3NlZCk7CiAKICNpZglkZWZpbmVkKENPTkZJR19NTUNfT01BUCkgfHwgZGVmaW5lZChDT05GSUdfTU1DX09NQVBfTU9EVUxFKSB8fCBcCiAJZGVmaW5lZChDT05GSUdfTU1DX09NQVBfSFMpIHx8IGRlZmluZWQoQ09ORklHX01NQ19PTUFQX0hTX01PRFVMRSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbXVsdGkuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbXVsdGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjM1ZDMyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tdWx0aS5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBTdXBwb3J0IGZvciBjb21waWxpbmcgaW4gbXVsdGlwbGUgT01BUCBwcm9jZXNzb3JzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fUExBVF9PTUFQX01VTFRJX0gKKyNkZWZpbmUgX19QTEFUX09NQVBfTVVMVElfSAorCisvKgorICogVGVzdCBpZiBtdWx0aWNvcmUgT01BUCBzdXBwb3J0IGlzIG5lZWRlZAorICovCisjdW5kZWYgTVVMVElfT01BUDEKKyN1bmRlZiBNVUxUSV9PTUFQMgorI3VuZGVmIE9NQVBfTkFNRQorCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDczMAorIyBpZmRlZiBPTUFQX05BTUUKKyMgIHVuZGVmICBNVUxUSV9PTUFQMQorIyAgZGVmaW5lIE1VTFRJX09NQVAxCisjIGVsc2UKKyMgIGRlZmluZSBPTUFQX05BTUUgb21hcDczMAorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDg1MAorIyBpZmRlZiBPTUFQX05BTUUKKyMgIHVuZGVmICBNVUxUSV9PTUFQMQorIyAgZGVmaW5lIE1VTFRJX09NQVAxCisjIGVsc2UKKyMgIGRlZmluZSBPTUFQX05BTUUgb21hcDg1MAorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKKyMgaWZkZWYgT01BUF9OQU1FCisjICB1bmRlZiAgTVVMVElfT01BUDEKKyMgIGRlZmluZSBNVUxUSV9PTUFQMQorIyBlbHNlCisjICBkZWZpbmUgT01BUF9OQU1FIG9tYXAxNTEwCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMTZYWAorIyBpZmRlZiBPTUFQX05BTUUKKyMgIHVuZGVmICBNVUxUSV9PTUFQMQorIyAgZGVmaW5lIE1VTFRJX09NQVAxCisjIGVsc2UKKyMgIGRlZmluZSBPTUFQX05BTUUgb21hcDE2eHgKKyMgZW5kaWYKKyNlbmRpZgorI2lmIChkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKSkKKyMgaWYgKGRlZmluZWQoT01BUF9OQU1FKSB8fCBkZWZpbmVkKE1VTFRJX09NQVAxKSkKKyMgIGVycm9yICJPTUFQMSBhbmQgT01BUDIgY2FuJ3QgYmUgc2VsZWN0ZWQgYXQgdGhlIHNhbWUgdGltZSIKKyMgZW5kaWYKKyNlbmRpZgorI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNDIwCisjIGlmZGVmIE9NQVBfTkFNRQorIyAgdW5kZWYgIE1VTFRJX09NQVAyCisjICBkZWZpbmUgTVVMVElfT01BUDIKKyMgZWxzZQorIyAgZGVmaW5lIE9NQVBfTkFNRSBvbWFwMjQyMAorIyBlbmRpZgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MzAKKyMgaWZkZWYgT01BUF9OQU1FCisjICB1bmRlZiAgTVVMVElfT01BUDIKKyMgIGRlZmluZSBNVUxUSV9PTUFQMgorIyBlbHNlCisjICBkZWZpbmUgT01BUF9OQU1FIG9tYXAyNDMwCisjIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMzQzMAorIyBpZmRlZiBPTUFQX05BTUUKKyMgIHVuZGVmICBNVUxUSV9PTUFQMgorIyAgZGVmaW5lIE1VTFRJX09NQVAyCisjIGVsc2UKKyMgIGRlZmluZSBPTUFQX05BTUUgb21hcDM0MzAKKyMgZW5kaWYKKyNlbmRpZgorCisjZW5kaWYJLyogX19QTEFUX09NQVBfTVVMVElfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tdXguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbXV4LmgKaW5kZXggNjkyYzkwZS4uYzc0NzJhMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9tdXguaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L211eC5oCkBAIC0xMzUsNyArMTM1LDcgQEAKIAljb25zdCB1bnNpZ25lZCBpbnQgCW11eF9yZWc7CiAJdW5zaWduZWQgY2hhcgkJZGVidWc7CiAKLSNpZglkZWZpbmVkKENPTkZJR19BUkNIX09NQVAxKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNFhYKQorI2lmCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDEpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCiAJY29uc3QgdW5zaWduZWQgY2hhciBtYXNrX29mZnNldDsKIAljb25zdCB1bnNpZ25lZCBjaGFyIG1hc2s7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvbmFuZC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9uYW5kLmgKaW5kZXggNjMxYTdiZS4uNmJhODhkMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9uYW5kLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9uYW5kLmgKQEAgLTE1LDEwICsxNSwxOCBAQAogCWludAkJCWNzOwogCWludAkJCWdwaW9faXJxOwogCXN0cnVjdCBtdGRfcGFydGl0aW9uCSpwYXJ0czsKKwlzdHJ1Y3QgZ3BtY190aW1pbmdzCSpncG1jX3Q7CiAJaW50CQkJbnJfcGFydHM7Ci0JaW50CQkJKCpuYW5kX3NldHVwKSh2b2lkIF9faW9tZW0gKik7CisJaW50CQkJKCpuYW5kX3NldHVwKSh2b2lkKTsKIAlpbnQJCQkoKmRldl9yZWFkeSkoc3RydWN0IG9tYXBfbmFuZF9wbGF0Zm9ybV9kYXRhICopOwogCWludAkJCWRtYV9jaGFubmVsOworCXVuc2lnbmVkIGxvbmcJCXBoeXNfYmFzZTsKIAl2b2lkIF9faW9tZW0JCSpncG1jX2NzX2Jhc2VhZGRyOwogCXZvaWQgX19pb21lbQkJKmdwbWNfYmFzZWFkZHI7CisJaW50CQkJZGV2c2l6ZTsKIH07CisKKy8qIHNpemUgKDQgS2lCKSBmb3IgSU8gbWFwcGluZyAqLworI2RlZmluZQlOQU5EX0lPX1NJWkUJU1pfNEsKKworZXh0ZXJuIGludCBncG1jX25hbmRfaW5pdChzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEgKmQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwMTZ4eC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwMTZ4eC5oCmluZGV4IDc1NjBiNGQuLmU2OWUxZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcDE2eHguaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXAxNnh4LmgKQEAgLTEyNSw0MyArMTI1LDQzIEBACiAjZGVmaW5lIE9NQVAxNlhYX01NQ1NEMl9TU1dfTVBVX0NPTkYJKFRJUEJfU1dJVENIX0JBU0UgKyAweDE2MCkKIAogLyogVUFSVDMgUmVnaXN0ZXJzIE1hcHBpbmcgdGhyb3VnaCBNUFUgYnVzICovCi0jZGVmaW5lIFVBUlQzX1JIUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAwKQotI2RlZmluZSBVQVJUM19USFIgICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMCkKLSNkZWZpbmUgVUFSVDNfRExMICAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDApCi0jZGVmaW5lIFVBUlQzX0lFUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyA0KQotI2RlZmluZSBVQVJUM19ETEggICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgNCkKLSNkZWZpbmUgVUFSVDNfSUlSICAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDgpCi0jZGVmaW5lIFVBUlQzX0ZDUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyA4KQotI2RlZmluZSBVQVJUM19FRlIgICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgOCkKLSNkZWZpbmUgVUFSVDNfTENSICAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MEMpCi0jZGVmaW5lIFVBUlQzX01DUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDEwKQotI2RlZmluZSBVQVJUM19YT04xX0FERFIxICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgxMCkKLSNkZWZpbmUgVUFSVDNfWE9OMl9BRERSMiAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MTQpCi0jZGVmaW5lIFVBUlQzX0xTUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDE0KQotI2RlZmluZSBVQVJUM19UQ1IgICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgxOCkKLSNkZWZpbmUgVUFSVDNfTVNSICAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MTgpCi0jZGVmaW5lIFVBUlQzX1hPRkYxICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDE4KQotI2RlZmluZSBVQVJUM19YT0ZGMiAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgxQykKLSNkZWZpbmUgVUFSVDNfU1BSICAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MUMpCi0jZGVmaW5lIFVBUlQzX1RMUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDFDKQotI2RlZmluZSBVQVJUM19NRFIxICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgyMCkKLSNkZWZpbmUgVUFSVDNfTURSMiAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MjQpCi0jZGVmaW5lIFVBUlQzX1NGTFNSICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDI4KQotI2RlZmluZSBVQVJUM19UWEZMTCAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgyOCkKLSNkZWZpbmUgVUFSVDNfUkVTVU1FICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MkMpCi0jZGVmaW5lIFVBUlQzX1RYRkxIICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDJDKQotI2RlZmluZSBVQVJUM19TRlJFR0wgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgzMCkKLSNkZWZpbmUgVUFSVDNfUlhGTEwgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MzApCi0jZGVmaW5lIFVBUlQzX1NGUkVHSCAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDM0KQotI2RlZmluZSBVQVJUM19SWEZMSCAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgzNCkKLSNkZWZpbmUgVUFSVDNfQkxSICAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4MzgpCi0jZGVmaW5lIFVBUlQzX0FDUkVHICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDNDKQotI2RlZmluZSBVQVJUM19ESVYxNiAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHgzQykKLSNkZWZpbmUgVUFSVDNfU0NSICAgICAgICAgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4NDApCi0jZGVmaW5lIFVBUlQzX1NTUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDQ0KQotI2RlZmluZSBVQVJUM19FQkxSICAgICAgICAgICAgICAoT01BUF9VQVJUM19CQVNFICsgMHg0OCkKLSNkZWZpbmUgVUFSVDNfT1NDXzEyTV9TRUwgICAgICAgKE9NQVBfVUFSVDNfQkFTRSArIDB4NEMpCi0jZGVmaW5lIFVBUlQzX01WUiAgICAgICAgICAgICAgIChPTUFQX1VBUlQzX0JBU0UgKyAweDUwKQorI2RlZmluZSBVQVJUM19SSFIgICAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDApCisjZGVmaW5lIFVBUlQzX1RIUiAgICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMCkKKyNkZWZpbmUgVUFSVDNfRExMICAgICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAwKQorI2RlZmluZSBVQVJUM19JRVIgICAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDQpCisjZGVmaW5lIFVBUlQzX0RMSCAgICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgNCkKKyNkZWZpbmUgVUFSVDNfSUlSICAgICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyA4KQorI2RlZmluZSBVQVJUM19GQ1IgICAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDgpCisjZGVmaW5lIFVBUlQzX0VGUiAgICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgOCkKKyNkZWZpbmUgVUFSVDNfTENSICAgICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDBDKQorI2RlZmluZSBVQVJUM19NQ1IgICAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4MTApCisjZGVmaW5lIFVBUlQzX1hPTjFfQUREUjEgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMHgxMCkKKyNkZWZpbmUgVUFSVDNfWE9OMl9BRERSMiAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDE0KQorI2RlZmluZSBVQVJUM19MU1IgICAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4MTQpCisjZGVmaW5lIFVBUlQzX1RDUiAgICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMHgxOCkKKyNkZWZpbmUgVUFSVDNfTVNSICAgICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDE4KQorI2RlZmluZSBVQVJUM19YT0ZGMSAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4MTgpCisjZGVmaW5lIFVBUlQzX1hPRkYyICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMHgxQykKKyNkZWZpbmUgVUFSVDNfU1BSICAgICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDFDKQorI2RlZmluZSBVQVJUM19UTFIgICAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4MUMpCisjZGVmaW5lIFVBUlQzX01EUjEgICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMHgyMCkKKyNkZWZpbmUgVUFSVDNfTURSMiAgICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDI0KQorI2RlZmluZSBVQVJUM19TRkxTUiAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4MjgpCisjZGVmaW5lIFVBUlQzX1RYRkxMICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMHgyOCkKKyNkZWZpbmUgVUFSVDNfUkVTVU1FICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDJDKQorI2RlZmluZSBVQVJUM19UWEZMSCAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4MkMpCisjZGVmaW5lIFVBUlQzX1NGUkVHTCAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMHgzMCkKKyNkZWZpbmUgVUFSVDNfUlhGTEwgICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDMwKQorI2RlZmluZSBVQVJUM19TRlJFR0ggICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4MzQpCisjZGVmaW5lIFVBUlQzX1JYRkxIICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMHgzNCkKKyNkZWZpbmUgVUFSVDNfQkxSICAgICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDM4KQorI2RlZmluZSBVQVJUM19BQ1JFRyAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4M0MpCisjZGVmaW5lIFVBUlQzX0RJVjE2ICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMHgzQykKKyNkZWZpbmUgVUFSVDNfU0NSICAgICAgICAgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDQwKQorI2RlZmluZSBVQVJUM19TU1IgICAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4NDQpCisjZGVmaW5lIFVBUlQzX0VCTFIgICAgICAgICAgICAgIChPTUFQMV9VQVJUM19CQVNFICsgMHg0OCkKKyNkZWZpbmUgVUFSVDNfT1NDXzEyTV9TRUwgICAgICAgKE9NQVAxX1VBUlQzX0JBU0UgKyAweDRDKQorI2RlZmluZSBVQVJUM19NVlIgICAgICAgICAgICAgICAoT01BUDFfVUFSVDNfQkFTRSArIDB4NTApCiAKIC8qCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcDI0eHguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcDI0eHguaAppbmRleCA2OTZlZGZjLi43MDU1NjcyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXAyNHh4LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwMjR4eC5oCkBAIC0yMyw4ICsyMyw4IEBACiAgKgogICovCiAKLSNpZm5kZWYgX19BU01fQVJDSF9PTUFQMjRYWF9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfT01BUDI0WFhfSAorI2lmbmRlZiBfX0FTTV9BUkNIX09NQVAyX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQMl9ICiAKIC8qCiAgKiBQbGVhc2UgcGxhY2Ugb25seSBiYXNlIGRlZmluZXMgaGVyZSBhbmQgcHV0IHRoZSByZXN0IGluIGRldmljZQpAQCAtODUsNSArODUsNSBAQAogI2RlZmluZSBPTUFQMjRYWF9TRUNfQUVTX0JBU0UJKE9NQVAyNFhYX1NFQ19CQVNFICsgMHg2MDAwKQogI2RlZmluZSBPTUFQMjRYWF9TRUNfUEtBX0JBU0UJKE9NQVAyNFhYX1NFQ19CQVNFICsgMHg4MDAwKQogCi0jZW5kaWYgLyogX19BU01fQVJDSF9PTUFQMjRYWF9IICovCisjZW5kaWYgLyogX19BU01fQVJDSF9PTUFQMl9IICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcDM0eHguaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcDM0eHguaAppbmRleCAwNzdmMDU5Li4yODQ1ZmRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXAzNHh4LmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwMzR4eC5oCkBAIC0yMSw4ICsyMSw4IEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotI2lmbmRlZiBfX0FTTV9BUkNIX09NQVAzNFhYX0gKLSNkZWZpbmUgX19BU01fQVJDSF9PTUFQMzRYWF9ICisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUDNfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVAzX0gKIAogLyoKICAqIFBsZWFzZSBwbGFjZSBvbmx5IGJhc2UgZGVmaW5lcyBoZXJlIGFuZCBwdXQgdGhlIHJlc3QgaW4gZGV2aWNlCkBAIC04Miw1ICs4Miw1IEBACiAKICNkZWZpbmUgT01BUDM0WFhfTUFJTEJPWF9CQVNFCQkoTDRfMzRYWF9CQVNFICsgMHg5NDAwMCkKIAotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT01BUDM0WFhfSCAqLworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT01BUDNfSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXA0NHh4LmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXA0NHh4LmgKaW5kZXggYzdkNjI4ZS4uMjMwMjQ3NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwNDR4eC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcDQ0eHguaApAQCAtNDIsOCArNDIsMTEgQEAKICNkZWZpbmUgT01BUDQ0WFhfTE9DQUxfVFdEX0JBU0UJCTB4NDgyNDA2MDAKICNkZWZpbmUgT01BUDQ0WFhfTDJDQUNIRV9CQVNFCQkweDQ4MjQyMDAwCiAjZGVmaW5lIE9NQVA0NFhYX1dLVVBHRU5fQkFTRQkJMHg0ODI4MTAwMAorI2RlZmluZSBPTUFQNDRYWF9NQ1BETV9CQVNFCQkweDQwMTMyMDAwCisjZGVmaW5lIE9NQVA0NFhYX01DUERNX0wzX0JBU0UJCTB4NDkwMzIwMDAKIAogI2RlZmluZSBPTUFQNDRYWF9NQUlMQk9YX0JBU0UJCShMNF80NFhYX0JBU0UgKyAweEY0MDAwKQorI2RlZmluZSBPTUFQNDRYWF9IU1VTQl9PVEdfQkFTRQkJKEw0XzQ0WFhfQkFTRSArIDB4QUIwMDApCiAKICNlbmRpZiAvKiBfX0FTTV9BUkNIX09NQVA0NFhYX0ggKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwX2RldmljZS5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9vbWFwX2RldmljZS5oCmluZGV4IGRjMWZhYzEuLjM2OTRiNjIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcF9kZXZpY2UuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXBfZGV2aWNlLmgKQEAgLTYyLDYgKzYyLDcgQEAKICAqCiAgKi8KIHN0cnVjdCBvbWFwX2RldmljZSB7CisJdTMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWdpYzsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCQlwZGV2OwogCXN0cnVjdCBvbWFwX2h3bW9kCQkqKmh3bW9kczsKIAlzdHJ1Y3Qgb21hcF9kZXZpY2VfcG1fbGF0ZW5jeQkqcG1fbGF0czsKQEAgLTgxLDYgKzgyLDcgQEAKIAogLyogQ29yZSBjb2RlIGludGVyZmFjZSAqLwogCitib29sIG9tYXBfZGV2aWNlX2lzX3ZhbGlkKHN0cnVjdCBvbWFwX2RldmljZSAqb2QpOwogaW50IG9tYXBfZGV2aWNlX2NvdW50X3Jlc291cmNlcyhzdHJ1Y3Qgb21hcF9kZXZpY2UgKm9kKTsKIGludCBvbWFwX2RldmljZV9maWxsX3Jlc291cmNlcyhzdHJ1Y3Qgb21hcF9kZXZpY2UgKm9kLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcyk7CiAKQEAgLTg4LDE1ICs5MCwxNiBAQAogCQkJCSAgICAgIHN0cnVjdCBvbWFwX2h3bW9kICpvaCwgdm9pZCAqcGRhdGEsCiAJCQkJICAgICAgaW50IHBkYXRhX2xlbiwKIAkJCQkgICAgICBzdHJ1Y3Qgb21hcF9kZXZpY2VfcG1fbGF0ZW5jeSAqcG1fbGF0cywKLQkJCQkgICAgICBpbnQgcG1fbGF0c19jbnQpOworCQkJCSAgICAgIGludCBwbV9sYXRzX2NudCwgaW50IGlzX2Vhcmx5X2RldmljZSk7CiAKIHN0cnVjdCBvbWFwX2RldmljZSAqb21hcF9kZXZpY2VfYnVpbGRfc3MoY29uc3QgY2hhciAqcGRldl9uYW1lLCBpbnQgcGRldl9pZCwKIAkJCQkJIHN0cnVjdCBvbWFwX2h3bW9kICoqb2gsIGludCBvaF9jbnQsCiAJCQkJCSB2b2lkICpwZGF0YSwgaW50IHBkYXRhX2xlbiwKIAkJCQkJIHN0cnVjdCBvbWFwX2RldmljZV9wbV9sYXRlbmN5ICpwbV9sYXRzLAotCQkJCQkgaW50IHBtX2xhdHNfY250KTsKKwkJCQkJIGludCBwbV9sYXRzX2NudCwgaW50IGlzX2Vhcmx5X2RldmljZSk7CiAKIGludCBvbWFwX2RldmljZV9yZWdpc3RlcihzdHJ1Y3Qgb21hcF9kZXZpY2UgKm9kKTsKK2ludCBvbWFwX2Vhcmx5X2RldmljZV9yZWdpc3RlcihzdHJ1Y3Qgb21hcF9kZXZpY2UgKm9kKTsKIAogLyogT01BUCBQTSBpbnRlcmZhY2UgKi8KIGludCBvbWFwX2RldmljZV9hbGlnbl9wbV9sYXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKQEAgLTEzMSwxMSArMTM0LDE1IEBACiAgKi8KIHN0cnVjdCBvbWFwX2RldmljZV9wbV9sYXRlbmN5IHsKIAl1MzIgZGVhY3RpdmF0ZV9sYXQ7CisJdTMyIGRlYWN0aXZhdGVfbGF0X3dvcnN0OwogCWludCAoKmRlYWN0aXZhdGVfZnVuYykoc3RydWN0IG9tYXBfZGV2aWNlICpvZCk7CiAJdTMyIGFjdGl2YXRlX2xhdDsKKwl1MzIgYWN0aXZhdGVfbGF0X3dvcnN0OwogCWludCAoKmFjdGl2YXRlX2Z1bmMpKHN0cnVjdCBvbWFwX2RldmljZSAqb2QpOworCXUzMiBmbGFnczsKIH07CiAKKyNkZWZpbmUgT01BUF9ERVZJQ0VfTEFURU5DWV9BVVRPX0FESlVTVCBCSVQoMSkKIAogLyogR2V0IG9tYXBfZGV2aWNlIHBvaW50ZXIgZnJvbSBwbGF0Zm9ybV9kZXZpY2UgcG9pbnRlciAqLwogI2RlZmluZSB0b19vbWFwX2RldmljZSh4KSBjb250YWluZXJfb2YoKHgpLCBzdHJ1Y3Qgb21hcF9kZXZpY2UsIHBkZXYpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L29tYXBfaHdtb2QuaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcF9od21vZC5oCmluZGV4IDMzOTMzMjUuLjQ0MGI0MTYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcF9od21vZC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvb21hcF9od21vZC5oCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA5IE5va2lhIENvcnBvcmF0aW9uCiAgKiBQYXVsIFdhbG1zbGV5CiAgKgotICogQ3JlYXRlZCBpbiBjb2xsYWJvcmF0aW9uIHdpdGggKGFscGhhYmV0aWNhbCBvcmRlcik6IEJlbm9pdCBDb3Vzc29uLAorICogQ3JlYXRlZCBpbiBjb2xsYWJvcmF0aW9uIHdpdGggKGFscGhhYmV0aWNhbCBvcmRlcik6IEJlbm/DrnQgQ291c3NvbiwKICAqIEtldmluIEhpbG1hbiwgVG9ueSBMaW5kZ3JlbiwgUmFqZW5kcmEgTmF5YWssIFZpa3JhbSBQYW5kaXRhLCBTYWthcmkKICAqIFBvdXNzYSwgQW5hbmQgU2F3YW50LCBTYW50b3NoIFNoaWxpbWthciwgUmljaGFyZCBXb29kcnVmZgogICoKQEAgLTMzLDI1ICszMyw0MiBAQAogI2RlZmluZSBfX0FSQ0hfQVJNX1BMQVRfT01BUF9JTkNMVURFX01BQ0hfT01BUF9IV01PRF9ICiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCiBzdHJ1Y3Qgb21hcF9kZXZpY2U7CiAKLS8qIE9DUCBTWVNDT05GSUcgYml0IHNoaWZ0cy9tYXNrcyAqLwotI2RlZmluZSBTWVNDX01JRExFTU9ERV9TSElGVAkJMTIKLSNkZWZpbmUgU1lTQ19NSURMRU1PREVfTUFTSwkJKDB4MyA8PCBTWVNDX01JRExFTU9ERV9TSElGVCkKLSNkZWZpbmUgU1lTQ19DTE9DS0FDVElWSVRZX1NISUZUCTgKLSNkZWZpbmUgU1lTQ19DTE9DS0FDVElWSVRZX01BU0sJCSgweDMgPDwgU1lTQ19DTE9DS0FDVElWSVRZX1NISUZUKQotI2RlZmluZSBTWVNDX1NJRExFTU9ERV9TSElGVAkJMwotI2RlZmluZSBTWVNDX1NJRExFTU9ERV9NQVNLCQkoMHgzIDw8IFNZU0NfU0lETEVNT0RFX1NISUZUKQotI2RlZmluZSBTWVNDX0VOQVdBS0VVUF9TSElGVAkJMgotI2RlZmluZSBTWVNDX0VOQVdBS0VVUF9NQVNLCQkoMSA8PCBTWVNDX0VOQVdBS0VVUF9TSElGVCkKLSNkZWZpbmUgU1lTQ19TT0ZUUkVTRVRfU0hJRlQJCTEKLSNkZWZpbmUgU1lTQ19TT0ZUUkVTRVRfTUFTSwkJKDEgPDwgU1lTQ19TT0ZUUkVTRVRfU0hJRlQpCi0jZGVmaW5lIFNZU0NfQVVUT0lETEVfU0hJRlQJCTAKLSNkZWZpbmUgU1lTQ19BVVRPSURMRV9NQVNLCQkoMSA8PCBTWVNDX0FVVE9JRExFX1NISUZUKQorZXh0ZXJuIHN0cnVjdCBvbWFwX2h3bW9kX3N5c2NfZmllbGRzIG9tYXBfaHdtb2Rfc3lzY190eXBlMTsKK2V4dGVybiBzdHJ1Y3Qgb21hcF9od21vZF9zeXNjX2ZpZWxkcyBvbWFwX2h3bW9kX3N5c2NfdHlwZTI7CisKKy8qCisgKiBPQ1AgU1lTQ09ORklHIGJpdCBzaGlmdHMvbWFza3MgVFlQRTEuIFRoZXNlIGFyZSBmb3IgSVBzIGNvbXBsaWFudAorICogd2l0aCB0aGUgb3JpZ2luYWwgUFJDTSBwcm90b2NvbCBkZWZpbmVkIGZvciBPTUFQMjQyMAorICovCisjZGVmaW5lIFNZU0NfVFlQRTFfTUlETEVNT0RFX1NISUZUCTEyCisjZGVmaW5lIFNZU0NfVFlQRTFfTUlETEVNT0RFX01BU0sJKDB4MyA8PCBTWVNDX01JRExFTU9ERV9TSElGVCkKKyNkZWZpbmUgU1lTQ19UWVBFMV9DTE9DS0FDVElWSVRZX1NISUZUCTgKKyNkZWZpbmUgU1lTQ19UWVBFMV9DTE9DS0FDVElWSVRZX01BU0sJKDB4MyA8PCBTWVNDX0NMT0NLQUNUSVZJVFlfU0hJRlQpCisjZGVmaW5lIFNZU0NfVFlQRTFfU0lETEVNT0RFX1NISUZUCTMKKyNkZWZpbmUgU1lTQ19UWVBFMV9TSURMRU1PREVfTUFTSwkoMHgzIDw8IFNZU0NfU0lETEVNT0RFX1NISUZUKQorI2RlZmluZSBTWVNDX1RZUEUxX0VOQVdBS0VVUF9TSElGVAkyCisjZGVmaW5lIFNZU0NfVFlQRTFfRU5BV0FLRVVQX01BU0sJKDEgPDwgU1lTQ19FTkFXQUtFVVBfU0hJRlQpCisjZGVmaW5lIFNZU0NfVFlQRTFfU09GVFJFU0VUX1NISUZUCTEKKyNkZWZpbmUgU1lTQ19UWVBFMV9TT0ZUUkVTRVRfTUFTSwkoMSA8PCBTWVNDX1NPRlRSRVNFVF9TSElGVCkKKyNkZWZpbmUgU1lTQ19UWVBFMV9BVVRPSURMRV9TSElGVAkwCisjZGVmaW5lIFNZU0NfVFlQRTFfQVVUT0lETEVfTUFTSwkoMSA8PCBTWVNDX0FVVE9JRExFX1NISUZUKQorCisvKgorICogT0NQIFNZU0NPTkZJRyBiaXQgc2hpZnRzL21hc2tzIFRZUEUyLiBUaGVzZSBhcmUgZm9yIElQcyBjb21wbGlhbnQKKyAqIHdpdGggdGhlIG5ldyBQUkNNIHByb3RvY29sIGRlZmluZWQgZm9yIG5ldyBPTUFQNCBJUHMuCisgKi8KKyNkZWZpbmUgU1lTQ19UWVBFMl9TT0ZUUkVTRVRfU0hJRlQJMAorI2RlZmluZSBTWVNDX1RZUEUyX1NPRlRSRVNFVF9NQVNLCSgxIDw8IFNZU0NfVFlQRTJfU09GVFJFU0VUX1NISUZUKQorI2RlZmluZSBTWVNDX1RZUEUyX1NJRExFTU9ERV9TSElGVAkyCisjZGVmaW5lIFNZU0NfVFlQRTJfU0lETEVNT0RFX01BU0sJKDB4MyA8PCBTWVNDX1RZUEUyX1NJRExFTU9ERV9TSElGVCkKKyNkZWZpbmUgU1lTQ19UWVBFMl9NSURMRU1PREVfU0hJRlQJNAorI2RlZmluZSBTWVNDX1RZUEUyX01JRExFTU9ERV9NQVNLCSgweDMgPDwgU1lTQ19UWVBFMl9NSURMRU1PREVfU0hJRlQpCiAKIC8qIE9DUCBTWVNTVEFUVVMgYml0IHNoaWZ0cy9tYXNrcyAqLwogI2RlZmluZSBTWVNTX1JFU0VURE9ORV9TSElGVAkJMApAQCAtNjIsNyArNzksNiBAQAogI2RlZmluZSBIV01PRF9JRExFTU9ERV9OTwkJKDEgPDwgMSkKICNkZWZpbmUgSFdNT0RfSURMRU1PREVfU01BUlQJCSgxIDw8IDIpCiAKLQogLyoqCiAgKiBzdHJ1Y3Qgb21hcF9od21vZF9pcnFfaW5mbyAtIE1QVSBJUlFzIHVzZWQgYnkgdGhlIGh3bW9kCiAgKiBAbmFtZTogbmFtZSBvZiB0aGUgSVJRIGNoYW5uZWwgKG1vZHVsZSBsb2NhbCBuYW1lKQpAQCAtOTQsOCArMTEwLDcgQEAKIC8qKgogICogc3RydWN0IG9tYXBfaHdtb2Rfb3B0X2NsayAtIG9wdGlvbmFsIGNsb2NrcyB1c2VkIGJ5IHRoaXMgaHdtb2QKICAqIEByb2xlOiAic3lzIiwgIjMyayIsICJ0diIsIGV0YyAtLSBmb3IgdXNlIGluIGNsa19nZXQoKQotICogQGNsa2Rldl9kZXZfaWQ6IG9wdCBjbG9jazogY2xrZGV2IGRldl9pZCBzdHJpbmcKLSAqIEBjbGtkZXZfY29uX2lkOiBvcHQgY2xvY2s6IGNsa2RldiBjb25faWQgc3RyaW5nCisgKiBAY2xrOiBvcHQgY2xvY2s6IE9NQVAgY2xvY2sgbmFtZQogICogQF9jbGs6IHBvaW50ZXIgdG8gdGhlIHN0cnVjdCBjbGsgKGZpbGxlZCBpbiBhdCBydW50aW1lKQogICoKICAqIFRoZSBtb2R1bGUncyBpbnRlcmZhY2UgY2xvY2sgYW5kIG1haW4gZnVuY3Rpb25hbCBjbG9jayBzaG91bGQgbm90CkBAIC0xMDMsOCArMTE4LDcgQEAKICAqLwogc3RydWN0IG9tYXBfaHdtb2Rfb3B0X2NsayB7CiAJY29uc3QgY2hhcgkqcm9sZTsKLQljb25zdCBjaGFyCSpjbGtkZXZfZGV2X2lkOwotCWNvbnN0IGNoYXIJKmNsa2Rldl9jb25faWQ7CisJY29uc3QgY2hhcgkqY2xrOwogCXN0cnVjdCBjbGsJKl9jbGs7CiB9OwogCkBAIC0xNzEsOCArMTg1LDcgQEAKICAqIEBtYXN0ZXI6IHN0cnVjdCBvbWFwX2h3bW9kIHRoYXQgaW5pdGlhdGVzIE9DUCB0cmFuc2FjdGlvbnMgb24gdGhpcyBsaW5rCiAgKiBAc2xhdmU6IHN0cnVjdCBvbWFwX2h3bW9kIHRoYXQgcmVzcG9uZHMgdG8gT0NQIHRyYW5zYWN0aW9ucyBvbiB0aGlzIGxpbmsKICAqIEBhZGRyOiBhZGRyZXNzIHNwYWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGxpbmsKLSAqIEBjbGtkZXZfZGV2X2lkOiBpbnRlcmZhY2UgY2xvY2s6IGNsa2RldiBkZXZfaWQgc3RyaW5nCi0gKiBAY2xrZGV2X2Nvbl9pZDogaW50ZXJmYWNlIGNsb2NrOiBjbGtkZXYgY29uX2lkIHN0cmluZworICogQGNsazogaW50ZXJmYWNlIGNsb2NrOiBPTUFQIGNsb2NrIG5hbWUKICAqIEBfY2xrOiBwb2ludGVyIHRvIHRoZSBpbnRlcmZhY2Ugc3RydWN0IGNsayAoZmlsbGVkIGluIGF0IHJ1bnRpbWUpCiAgKiBAZnc6IGludGVyZmFjZSBmaXJld2FsbCBkYXRhCiAgKiBAYWRkcl9jbnQ6IEFSUkFZX1NJWkUoQGFkZHIpCkBAIC0xOTEsOCArMjA0LDcgQEAKIAlzdHJ1Y3Qgb21hcF9od21vZAkJKm1hc3RlcjsKIAlzdHJ1Y3Qgb21hcF9od21vZAkJKnNsYXZlOwogCXN0cnVjdCBvbWFwX2h3bW9kX2FkZHJfc3BhY2UJKmFkZHI7Ci0JY29uc3QgY2hhcgkJCSpjbGtkZXZfZGV2X2lkOwotCWNvbnN0IGNoYXIJCQkqY2xrZGV2X2Nvbl9pZDsKKwljb25zdCBjaGFyCQkJKmNsazsKIAlzdHJ1Y3QgY2xrCQkJKl9jbGs7CiAJdW5pb24gewogCQlzdHJ1Y3Qgb21hcF9od21vZF9vbWFwMl9maXJld2FsbCBvbWFwMjsKQEAgLTIzNiw3ICsyNDgsMjUgQEAKICNkZWZpbmUgQ0xPQ0tBQ1RfVEVTVF9OT05FCTB4MwogCiAvKioKLSAqIHN0cnVjdCBvbWFwX2h3bW9kX3N5c2NvbmZpZyAtIGh3bW9kIE9DUF9TWVNDT05GSUcvT0NQX1NZU1NUQVRVUyBkYXRhCisgKiBzdHJ1Y3Qgb21hcF9od21vZF9zeXNjX2ZpZWxkcyAtIGh3bW9kIE9DUF9TWVNDT05GSUcgcmVnaXN0ZXIgZmllbGQgb2Zmc2V0cy4KKyAqIEBtaWRsZV9zaGlmdDogT2Zmc2V0IG9mIHRoZSBtaWRsZSBiaXQKKyAqIEBjbGthY3Rfc2hpZnQ6IE9mZnNldCBvZiB0aGUgY2xvY2thY3Rpdml0eSBiaXQKKyAqIEBzaWRsZV9zaGlmdDogT2Zmc2V0IG9mIHRoZSBzaWRsZSBiaXQKKyAqIEBlbndrdXBfc2hpZnQ6IE9mZnNldCBvZiB0aGUgZW5hd2FrZXVwIGJpdAorICogQHNyc3Rfc2hpZnQ6IE9mZnNldCBvZiB0aGUgc29mdHJlc2V0IGJpdAorICogQGF1dG9pZGxlX3NoaWZ0OiBPZmZzZXQgb2YgdGhlIGF1dG9pZGxlIGJpdAorICovCitzdHJ1Y3Qgb21hcF9od21vZF9zeXNjX2ZpZWxkcyB7CisJdTggbWlkbGVfc2hpZnQ7CisJdTggY2xrYWN0X3NoaWZ0OworCXU4IHNpZGxlX3NoaWZ0OworCXU4IGVud2t1cF9zaGlmdDsKKwl1OCBzcnN0X3NoaWZ0OworCXU4IGF1dG9pZGxlX3NoaWZ0OworfTsKKworLyoqCisgKiBzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgLSBod21vZCBjbGFzcyBPQ1BfU1lTKiBkYXRhCiAgKiBAcmV2X29mZnM6IElQIGJsb2NrIHJldmlzaW9uIHJlZ2lzdGVyIG9mZnNldCAoZnJvbSBtb2R1bGUgYmFzZSBhZGRyKQogICogQHN5c2Nfb2ZmczogT0NQX1NZU0NPTkZJRyByZWdpc3RlciBvZmZzZXQgKGZyb20gbW9kdWxlIGJhc2UgYWRkcikKICAqIEBzeXNzX29mZnM6IE9DUF9TWVNTVEFUVVMgcmVnaXN0ZXIgb2Zmc2V0IChmcm9tIG1vZHVsZSBiYXNlIGFkZHIpCkBAIC0yNTIsMTQgKzI4MiwyMiBAQAogICogYmVlbiBhc3NvY2lhdGVkIHdpdGggdGhlIGNsb2NrcyBtYXJrZWQgaW4gQGNsb2NrYWN0LiAgVGhpcyBmaWVsZCBpcwogICogb25seSB1c2VkIGlmIEhXTU9EX1NFVF9ERUZBVUxUX0NMT0NLQUNUIGlzIHNldCAoc2VlIGJlbG93KQogICoKKyAqIEBzeXNjX2ZpZWxkczogc3RydWN0dXJlIGNvbnRhaW5pbmcgdGhlIG9mZnNldCBwb3NpdGlvbnMgb2YgdmFyaW91cyBiaXRzIGluCisgKiBTWVNDT05GSUcgcmVnaXN0ZXIuIFRoaXMgY2FuIGJlIHBvcHVsYXRlZCB1c2luZyBvbWFwX2h3bW9kX3N5c2NfdHlwZTEgb3IKKyAqIG9tYXBfaHdtb2Rfc3lzY190eXBlMiBkZWZpbmVkIGluIG9tYXBfaHdtb2RfY29tbW9uX2RhdGEuYyBkZXBlbmRpbmcgb24KKyAqIHdoZXRoZXIgdGhlIGRldmljZSBpcCBpcyBjb21wbGlhbnQgd2l0aCB0aGUgb3JpZ2luYWwgUFJDTSBwcm90b2NvbAorICogZGVmaW5lZCBmb3IgT01BUDI0MjAgb3IgdGhlIG5ldyBQUkNNIHByb3RvY29sIGZvciBuZXcgT01BUDQgSVBzLgorICogSWYgdGhlIGRldmljZSBmb2xsb3dzIGEgZGlmZmVyZW50IHNjaGVtZSBmb3IgdGhlIHN5c2NvbmZpZyByZWdpc3RlciAsCisgKiB0aGVuIHRoaXMgZmllbGQgaGFzIHRvIGJlIHBvcHVsYXRlZCB3aXRoIHRoZSBjb3JyZWN0IG9mZnNldCBzdHJ1Y3R1cmUuCiAgKi8KLXN0cnVjdCBvbWFwX2h3bW9kX3N5c2NvbmZpZyB7CitzdHJ1Y3Qgb21hcF9od21vZF9jbGFzc19zeXNjb25maWcgewogCXUxNiByZXZfb2ZmczsKIAl1MTYgc3lzY19vZmZzOwogCXUxNiBzeXNzX29mZnM7CiAJdTggaWRsZW1vZGVzOwogCXU4IHN5c2NfZmxhZ3M7CiAJdTggY2xvY2thY3Q7CisJc3RydWN0IG9tYXBfaHdtb2Rfc3lzY19maWVsZHMgKnN5c2NfZmllbGRzOwogfTsKIAogLyoqCkBAIC0zNTIsMTkgKzM5MCwzMyBAQAogI2RlZmluZSBfSFdNT0RfU1RBVEVfRElTQUJMRUQJCQk2CiAKIC8qKgorICogc3RydWN0IG9tYXBfaHdtb2RfY2xhc3MgLSB0aGUgdHlwZSBvZiBhbiBJUCBibG9jaworICogQG5hbWU6IG5hbWUgb2YgdGhlIGh3bW9kX2NsYXNzCisgKiBAc3lzYzogZGV2aWNlIFNZU0NPTkZJRy9TWVNTVEFUVVMgcmVnaXN0ZXIgZGF0YQorICogQHJldjogcmV2aXNpb24gb2YgdGhlIElQIGNsYXNzCisgKgorICogUmVwcmVzZW50IHRoZSBjbGFzcyBvZiBhIE9NQVAgaGFyZHdhcmUgIm1vZHVsZXMiIChlLmcuIHRpbWVyLAorICogc21hcnRyZWZsZXgsIGdwaW8sIHVhcnQuLi4pCisgKi8KK3N0cnVjdCBvbWFwX2h3bW9kX2NsYXNzIHsKKwljb25zdCBjaGFyCQkJCSpuYW1lOworCXN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzX3N5c2NvbmZpZwkqc3lzYzsKKwl1MzIJCQkJCXJldjsKK307CisKKy8qKgogICogc3RydWN0IG9tYXBfaHdtb2QgLSBpbnRlZ3JhdGlvbiBkYXRhIGZvciBPTUFQIGhhcmR3YXJlICJtb2R1bGVzIiAoSVAgYmxvY2tzKQogICogQG5hbWU6IG5hbWUgb2YgdGhlIGh3bW9kCisgKiBAY2xhc3M6IHN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzICogdG8gdGhlIGNsYXNzIG9mIHRoaXMgaHdtb2QKICAqIEBvZDogc3RydWN0IG9tYXBfZGV2aWNlIGN1cnJlbnRseSBhc3NvY2lhdGVkIHdpdGggdGhpcyBod21vZCAoaW50ZXJuYWwgdXNlKQogICogQG1wdV9pcnFzOiBwdHIgdG8gYW4gYXJyYXkgb2YgTVBVIElSUXMgKHNlZSBhbHNvIG1wdV9pcnFzX2NudCkKICAqIEBzZG1hX2NoczogcHRyIHRvIGFuIGFycmF5IG9mIFNETUEgY2hhbm5lbCBJRHMgKHNlZSBhbHNvIHNkbWFfY2hzX2NudCkKICAqIEBwcmNtOiBQUkNNIGRhdGEgcGVydGFpbmluZyB0byB0aGlzIGh3bW9kCi0gKiBAY2xrZGV2X2Rldl9pZDogbWFpbiBjbG9jazogY2xrZGV2IGRldl9pZCBzdHJpbmcKLSAqIEBjbGtkZXZfY29uX2lkOiBtYWluIGNsb2NrOiBjbGtkZXYgY29uX2lkIHN0cmluZworICogQG1haW5fY2xrOiBtYWluIGNsb2NrOiBPTUFQIGNsb2NrIG5hbWUKICAqIEBfY2xrOiBwb2ludGVyIHRvIHRoZSBtYWluIHN0cnVjdCBjbGsgKGZpbGxlZCBpbiBhdCBydW50aW1lKQogICogQG9wdF9jbGtzOiBvdGhlciBkZXZpY2UgY2xvY2tzIHRoYXQgZHJpdmVycyBjYW4gcmVxdWVzdCAoMC4uKikKICAqIEBtYXN0ZXJzOiBwdHIgdG8gYXJyYXkgb2YgT0NQIGlmcyB0aGF0IHRoaXMgaHdtb2QgY2FuIGluaXRpYXRlIG9uCiAgKiBAc2xhdmVzOiBwdHIgdG8gYXJyYXkgb2YgT0NQIGlmcyB0aGF0IHRoaXMgaHdtb2QgY2FuIHJlc3BvbmQgb24KLSAqIEBzeXNjb25maWc6IGRldmljZSBTWVNDT05GSUcvU1lTU1RBVFVTIHJlZ2lzdGVyIGRhdGEKICAqIEBkZXZfYXR0cjogYXJiaXRyYXJ5IGRldmljZSBhdHRyaWJ1dGVzIHRoYXQgY2FuIGJlIHBhc3NlZCB0byB0aGUgZHJpdmVyCiAgKiBAX3N5c2NfY2FjaGU6IGludGVybmFsLXVzZSBod21vZCBmbGFncwogICogQF9ydF92YTogY2FjaGVkIHJlZ2lzdGVyIHRhcmdldCBzdGFydCBhZGRyZXNzIChpbnRlcm5hbCB1c2UpCkBAIC0zODMsMTYgKzQzNSwxNyBAQAogICogQG9tYXBfY2hpcDogT01BUCBjaGlwcyB0aGlzIGh3bW9kIGlzIHByZXNlbnQgb24KICAqIEBub2RlOiBsaXN0IG5vZGUgZm9yIGh3bW9kIGxpc3QgKGludGVybmFsIHVzZSkKICAqCi0gKiBAY2xrZGV2X2Rldl9pZCwgQGNsa2Rldl9jb25faWQsIGFuZCBAY2xrIGFsbCByZWZlciB0byB0aGlzIG1vZHVsZSdzICJtYWluCi0gKiBjbG9jaywiIHdoaWNoIGZvciBvdXIgcHVycG9zZXMgaXMgZGVmaW5lZCBhcyAidGhlIGZ1bmN0aW9uYWwgY2xvY2sgbmVlZGVkCi0gKiBmb3IgcmVnaXN0ZXIgYWNjZXNzZXMgdG8gY29tcGxldGUuIiAgTW9kdWxlcyBtYXkgbm90IGhhdmUgYSBtYWluIGNsb2NrIGlmCi0gKiB0aGUgaW50ZXJmYWNlIGNsb2NrIGFsc28gc2VydmVzIGFzIGEgbWFpbiBjbG9jay4KKyAqIEBtYWluX2NsayByZWZlcnMgdG8gdGhpcyBtb2R1bGUncyAibWFpbiBjbG9jaywiIHdoaWNoIGZvciBvdXIKKyAqIHB1cnBvc2VzIGlzIGRlZmluZWQgYXMgInRoZSBmdW5jdGlvbmFsIGNsb2NrIG5lZWRlZCBmb3IgcmVnaXN0ZXIKKyAqIGFjY2Vzc2VzIHRvIGNvbXBsZXRlLiIgIE1vZHVsZXMgbWF5IG5vdCBoYXZlIGEgbWFpbiBjbG9jayBpZiB0aGUKKyAqIGludGVyZmFjZSBjbG9jayBhbHNvIHNlcnZlcyBhcyBhIG1haW4gY2xvY2suCiAgKgogICogUGFyYW1ldGVyIG5hbWVzIGJlZ2lubmluZyB3aXRoIGFuIHVuZGVyc2NvcmUgYXJlIG1hbmFnZWQgaW50ZXJuYWxseSBieQogICogdGhlIG9tYXBfaHdtb2QgY29kZSBhbmQgc2hvdWxkIG5vdCBiZSBzZXQgZHVyaW5nIGluaXRpYWxpemF0aW9uLgogICovCiBzdHJ1Y3Qgb21hcF9od21vZCB7CiAJY29uc3QgY2hhcgkJCSpuYW1lOworCXN0cnVjdCBvbWFwX2h3bW9kX2NsYXNzCQkqY2xhc3M7CiAJc3RydWN0IG9tYXBfZGV2aWNlCQkqb2Q7CiAJc3RydWN0IG9tYXBfaHdtb2RfaXJxX2luZm8JKm1wdV9pcnFzOwogCXN0cnVjdCBvbWFwX2h3bW9kX2RtYV9pbmZvCSpzZG1hX2NoczsKQEAgLTQwMCwxMyArNDUzLDExIEBACiAJCXN0cnVjdCBvbWFwX2h3bW9kX29tYXAyX3ByY20gb21hcDI7CiAJCXN0cnVjdCBvbWFwX2h3bW9kX29tYXA0X3ByY20gb21hcDQ7CiAJfQkJCQlwcmNtOwotCWNvbnN0IGNoYXIJCQkqY2xrZGV2X2Rldl9pZDsKLQljb25zdCBjaGFyCQkJKmNsa2Rldl9jb25faWQ7CisJY29uc3QgY2hhcgkJCSptYWluX2NsazsKIAlzdHJ1Y3QgY2xrCQkJKl9jbGs7CiAJc3RydWN0IG9tYXBfaHdtb2Rfb3B0X2Nsawkqb3B0X2Nsa3M7CiAJc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmCSoqbWFzdGVyczsgLyogY29ubmVjdCB0byAqX0lBICovCiAJc3RydWN0IG9tYXBfaHdtb2Rfb2NwX2lmCSoqc2xhdmVzOyAgLyogY29ubmVjdCB0byAqX1RBICovCi0Jc3RydWN0IG9tYXBfaHdtb2Rfc3lzY29uZmlnCSpzeXNjb25maWc7CiAJdm9pZAkJCQkqZGV2X2F0dHI7CiAJdTMyCQkJCV9zeXNjX2NhY2hlOwogCXZvaWQgX19pb21lbQkJCSpfcnRfdmE7CkBAIC00NDEsNiArNDkyLDggQEAKIGludCBvbWFwX2h3bW9kX2VuYWJsZV9jbG9ja3Moc3RydWN0IG9tYXBfaHdtb2QgKm9oKTsKIGludCBvbWFwX2h3bW9kX2Rpc2FibGVfY2xvY2tzKHN0cnVjdCBvbWFwX2h3bW9kICpvaCk7CiAKK2ludCBvbWFwX2h3bW9kX3NldF9zbGF2ZV9pZGxlbW9kZShzdHJ1Y3Qgb21hcF9od21vZCAqb2gsIHU4IGlkbGVtb2RlKTsKKwogaW50IG9tYXBfaHdtb2RfcmVzZXQoc3RydWN0IG9tYXBfaHdtb2QgKm9oKTsKIHZvaWQgb21hcF9od21vZF9vY3BfYmFycmllcihzdHJ1Y3Qgb21hcF9od21vZCAqb2gpOwogCkBAIC00NjUsNCArNTE4LDE3IEBACiBpbnQgb21hcF9od21vZF9lbmFibGVfd2FrZXVwKHN0cnVjdCBvbWFwX2h3bW9kICpvaCk7CiBpbnQgb21hcF9od21vZF9kaXNhYmxlX3dha2V1cChzdHJ1Y3Qgb21hcF9od21vZCAqb2gpOwogCitpbnQgb21hcF9od21vZF9mb3JfZWFjaF9ieV9jbGFzcyhjb25zdCBjaGFyICpjbGFzc25hbWUsCisJCQkJIGludCAoKmZuKShzdHJ1Y3Qgb21hcF9od21vZCAqb2gsCisJCQkJCSAgIHZvaWQgKnVzZXIpLAorCQkJCSB2b2lkICp1c2VyKTsKKworLyoKKyAqIENoaXAgdmFyaWFudC1zcGVjaWZpYyBod21vZCBpbml0IHJvdXRpbmVzIC0gWFhYIHNob3VsZCBiZSBjb252ZXJ0ZWQKKyAqIHRvIHVzZSBpbml0Y2FsbHMgb25jZSB0aGUgaW5pdGlhbCBib290IG9yZGVyaW5nIGlzIHN0cmFpZ2h0ZW5lZCBvdXQKKyAqLworZXh0ZXJuIGludCBvbWFwMjQyMF9od21vZF9pbml0KHZvaWQpOworZXh0ZXJuIGludCBvbWFwMjQzMF9od21vZF9pbml0KHZvaWQpOworZXh0ZXJuIGludCBvbWFwM3h4eF9od21vZF9pbml0KHZvaWQpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvcG93ZXJkb21haW4uaCBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvcG93ZXJkb21haW4uaAppbmRleCAwYjk2MDA1Li5kODJiMmMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3Bvd2VyZG9tYWluLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9wb3dlcmRvbWFpbi5oCkBAIC0xLDggKzEsOCBAQAogLyoKICAqIE9NQVAyLzMgcG93ZXJkb21haW4gY29udHJvbAogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNy04IFRleGFzIEluc3RydW1lbnRzLCBJbmMuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDctOCBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggVGV4YXMgSW5zdHJ1bWVudHMsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogV3JpdHRlbiBieSBQYXVsIFdhbG1zbGV5CiAgKgpAQCAtMzcsNiArMzcsOSBAQAogI2RlZmluZSBQV1JTVFNfT0ZGX1JFVAkJKCgxIDw8IFBXUkRNX1BPV0VSX09GRikgfCBcCiAJCQkJICgxIDw8IFBXUkRNX1BPV0VSX1JFVCkpCiAKKyNkZWZpbmUgUFdSU1RTX1JFVF9PTgkJKCgxIDw8IFBXUkRNX1BPV0VSX1JFVCkgfCBcCisJCQkJICgxIDw8IFBXUkRNX1BPV0VSX09OKSkKKwogI2RlZmluZSBQV1JTVFNfT0ZGX1JFVF9PTgkoUFdSU1RTX09GRl9SRVQgfCAoMSA8PCBQV1JETV9QT1dFUl9PTikpCiAKIApAQCAtNDgsMTYgKzUxLDE2IEBACiAJCQkJCSAgKi8KIAogLyoKLSAqIE51bWJlciBvZiBtZW1vcnkgYmFua3MgdGhhdCBhcmUgcG93ZXItY29udHJvbGxhYmxlLglPbiBPTUFQMzQzMCwgdGhlCi0gKiBtYXhpbXVtIGlzIDQuCisgKiBOdW1iZXIgb2YgbWVtb3J5IGJhbmtzIHRoYXQgYXJlIHBvd2VyLWNvbnRyb2xsYWJsZS4JT24gT01BUDQ0MzAsIHRoZQorICogbWF4aW11bSBpcyA1LgogICovCi0jZGVmaW5lIFBXUkRNX01BWF9NRU1fQkFOS1MJNAorI2RlZmluZSBQV1JETV9NQVhfTUVNX0JBTktTCTUKIAogLyoKICAqIE1heGltdW0gbnVtYmVyIG9mIGNsb2NrZG9tYWlucyB0aGF0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYSBwb3dlcmRvbWFpbi4KLSAqIENPUkUgcG93ZXJkb21haW4gb24gT01BUDMgaXMgdGhlIHdvcnN0IGNhc2UKKyAqIENPUkUgcG93ZXJkb21haW4gb24gT01BUDQgaXMgdGhlIHdvcnN0IGNhc2UKICAqLwotI2RlZmluZSBQV1JETV9NQVhfQ0xLRE1TCTQKKyNkZWZpbmUgUFdSRE1fTUFYX0NMS0RNUwk5CiAKIC8qIFhYWCBBIGNvbXBsZXRlbHkgYXJiaXRyYXJ5IG51bWJlci4gV2hhdCBpcyByZWFzb25hYmxlIGhlcmU/ICovCiAjZGVmaW5lIFBXUkRNX1RSQU5TSVRJT05fQkFJTE9VVCAxMDAwMDAKQEAgLTY1LDY1ICs2OCw0MCBAQAogc3RydWN0IGNsb2NrZG9tYWluOwogc3RydWN0IHBvd2VyZG9tYWluOwogCi0vKiBFbmNvZGVzIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHBvd2VyZG9tYWlucyAtIHN0YXRpY2FsbHkgZGVmaW5lZCAqLwotc3RydWN0IHB3cmRtX2RlcCB7Ci0KLQkvKiBQb3dlcmRvbWFpbiBuYW1lICovCi0JY29uc3QgY2hhciAqcHdyZG1fbmFtZTsKLQotCS8qIFBvd2VyZG9tYWluIHBvaW50ZXIgLSByZXNvbHZlZCBieSB0aGUgcG93ZXJkb21haW4gY29kZSAqLwotCXN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG07Ci0KLQkvKiBGbGFncyB0byBtYXJrIE9NQVAgY2hpcCByZXN0cmljdGlvbnMsIGV0Yy4gKi8KLQljb25zdCBzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9tYXBfY2hpcDsKLQotfTsKLQorLyoqCisgKiBzdHJ1Y3QgcG93ZXJkb21haW4gLSBPTUFQIHBvd2VyZG9tYWluCisgKiBAbmFtZTogUG93ZXJkb21haW4gbmFtZQorICogQG9tYXBfY2hpcDogcmVwcmVzZW50cyB0aGUgT01BUCBjaGlwIHR5cGVzIGNvbnRhaW5pbmcgdGhpcyBwd3JkbQorICogQHByY21fb2ZmczogdGhlIGFkZHJlc3Mgb2Zmc2V0IGZyb20gQ01fQkFTRS9QUk1fQkFTRQorICogQHB3cnN0czogUG9zc2libGUgcG93ZXJkb21haW4gcG93ZXIgc3RhdGVzCisgKiBAcHdyc3RzX2xvZ2ljX3JldDogUG9zc2libGUgbG9naWMgcG93ZXIgc3RhdGVzIHdoZW4gcHdyZG0gaW4gUkVURU5USU9OCisgKiBAZmxhZ3M6IFBvd2VyZG9tYWluIGZsYWdzCisgKiBAYmFua3M6IE51bWJlciBvZiBzb2Z0d2FyZS1jb250cm9sbGFibGUgbWVtb3J5IGJhbmtzIGluIHRoaXMgcG93ZXJkb21haW4KKyAqIEBwd3JzdHNfbWVtX3JldDogUG9zc2libGUgbWVtb3J5IGJhbmsgcHdyc3RhdGVzIHdoZW4gcHdyZG0gaW4gUkVURU5USU9OCisgKiBAcHdyc3RzX21lbV9vbjogUG9zc2libGUgbWVtb3J5IGJhbmsgcHdyc3RhdGVzIHdoZW4gcHdyZG0gaW4gT04KKyAqIEBwd3JkbV9jbGtkbXM6IENsb2NrZG9tYWlucyBpbiB0aGlzIHBvd2VyZG9tYWluCisgKiBAbm9kZTogbGlzdF9oZWFkIGxpbmtpbmcgYWxsIHBvd2VyZG9tYWlucworICogQHN0YXRlOgorICogQHN0YXRlX2NvdW50ZXI6CisgKiBAdGltZXI6CisgKiBAc3RhdGVfdGltZXI6CisgKi8KIHN0cnVjdCBwb3dlcmRvbWFpbiB7Ci0KLQkvKiBQb3dlcmRvbWFpbiBuYW1lICovCiAJY29uc3QgY2hhciAqbmFtZTsKLQotCS8qIHRoZSBhZGRyZXNzIG9mZnNldCBmcm9tIENNX0JBU0UvUFJNX0JBU0UgKi8KLQljb25zdCBzMTYgcHJjbV9vZmZzOwotCi0JLyogVXNlZCB0byByZXByZXNlbnQgdGhlIE9NQVAgY2hpcCB0eXBlcyBjb250YWluaW5nIHRoaXMgcHdyZG0gKi8KIAljb25zdCBzdHJ1Y3Qgb21hcF9jaGlwX2lkIG9tYXBfY2hpcDsKLQotCS8qIFBvd2VyZG9tYWlucyB0aGF0IGNhbiBiZSB0b2xkIHRvIHdha2UgdGhpcyBwb3dlcmRvbWFpbiB1cCAqLwotCXN0cnVjdCBwd3JkbV9kZXAgKndrZGVwX3NyY3M7Ci0KLQkvKiBQb3dlcmRvbWFpbnMgdGhhdCBjYW4gYmUgdG9sZCB0byBrZWVwIHRoaXMgcHdyZG0gZnJvbSBpbmFjdGl2aXR5ICovCi0Jc3RydWN0IHB3cmRtX2RlcCAqc2xlZXBkZXBfc3JjczsKLQotCS8qIEJpdCBzaGlmdCBvZiB0aGlzIHBvd2VyZG9tYWluJ3MgUE1fV0tERVAvQ01fU0xFRVBERVAgYml0ICovCi0JY29uc3QgdTggZGVwX2JpdDsKLQotCS8qIFBvc3NpYmxlIHBvd2VyZG9tYWluIHBvd2VyIHN0YXRlcyAqLworCWNvbnN0IHMxNiBwcmNtX29mZnM7CiAJY29uc3QgdTggcHdyc3RzOwotCi0JLyogUG9zc2libGUgbG9naWMgcG93ZXIgc3RhdGVzIHdoZW4gcHdyZG0gaW4gUkVURU5USU9OICovCiAJY29uc3QgdTggcHdyc3RzX2xvZ2ljX3JldDsKLQotCS8qIFBvd2VyZG9tYWluIGZsYWdzICovCiAJY29uc3QgdTggZmxhZ3M7Ci0KLQkvKiBOdW1iZXIgb2Ygc29mdHdhcmUtY29udHJvbGxhYmxlIG1lbW9yeSBiYW5rcyBpbiB0aGlzIHBvd2VyZG9tYWluICovCiAJY29uc3QgdTggYmFua3M7Ci0KLQkvKiBQb3NzaWJsZSBtZW1vcnkgYmFuayBwd3JzdGF0ZXMgd2hlbiBwd3JkbSBpbiBSRVRFTlRJT04gKi8KIAljb25zdCB1OCBwd3JzdHNfbWVtX3JldFtQV1JETV9NQVhfTUVNX0JBTktTXTsKLQotCS8qIFBvc3NpYmxlIG1lbW9yeSBiYW5rIHB3cnN0YXRlcyB3aGVuIHB3cmRtIGlzIE9OICovCiAJY29uc3QgdTggcHdyc3RzX21lbV9vbltQV1JETV9NQVhfTUVNX0JBTktTXTsKLQotCS8qIENsb2NrZG9tYWlucyBpbiB0aGlzIHBvd2VyZG9tYWluICovCiAJc3RydWN0IGNsb2NrZG9tYWluICpwd3JkbV9jbGtkbXNbUFdSRE1fTUFYX0NMS0RNU107Ci0KIAlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Ci0KIAlpbnQgc3RhdGU7CiAJdW5zaWduZWQgc3RhdGVfY291bnRlcltQV1JETV9NQVhfUFdSU1RTXTsKKwl1bnNpZ25lZCByZXRfbG9naWNfb2ZmX2NvdW50ZXI7CisJdW5zaWduZWQgcmV0X21lbV9vZmZfY291bnRlcltQV1JETV9NQVhfTUVNX0JBTktTXTsKIAogI2lmZGVmIENPTkZJR19QTV9ERUJVRwogCXM2NCB0aW1lcjsKQEAgLTEzNCw4ICsxMTIsNiBAQAogCiB2b2lkIHB3cmRtX2luaXQoc3RydWN0IHBvd2VyZG9tYWluICoqcHdyZG1fbGlzdCk7CiAKLWludCBwd3JkbV9yZWdpc3RlcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKLWludCBwd3JkbV91bnJlZ2lzdGVyKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOwogc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSk7CiAKIGludCBwd3JkbV9mb3JfZWFjaChpbnQgKCpmbikoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdm9pZCAqdXNlciksCkBAIC0xNDksMTMgKzEyNSw2IEBACiAJCQkgaW50ICgqZm4pKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sCiAJCQkJICAgc3RydWN0IGNsb2NrZG9tYWluICpjbGtkbSkpOwogCi1pbnQgcHdyZG1fYWRkX3drZGVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0xLCBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMik7Ci1pbnQgcHdyZG1fZGVsX3drZGVwKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0xLCBzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMik7Ci1pbnQgcHdyZG1fcmVhZF93a2RlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpOwotaW50IHB3cmRtX2FkZF9zbGVlcGRlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpOwotaW50IHB3cmRtX2RlbF9zbGVlcGRlcChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtMSwgc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTIpOwotaW50IHB3cmRtX3JlYWRfc2xlZXBkZXAoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbTEsIHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0yKTsKLQogaW50IHB3cmRtX2dldF9tZW1fYmFua19jb3VudChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKIAogaW50IHB3cmRtX3NldF9uZXh0X3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0sIHU4IHB3cnN0KTsKQEAgLTE3MCw4ICsxMzksMTAgQEAKIAogaW50IHB3cmRtX3JlYWRfbG9naWNfcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CiBpbnQgcHdyZG1fcmVhZF9wcmV2X2xvZ2ljX3B3cnN0KHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOworaW50IHB3cmRtX3JlYWRfbG9naWNfcmV0c3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSk7CiBpbnQgcHdyZG1fcmVhZF9tZW1fcHdyc3Qoc3RydWN0IHBvd2VyZG9tYWluICpwd3JkbSwgdTggYmFuayk7CiBpbnQgcHdyZG1fcmVhZF9wcmV2X21lbV9wd3JzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rKTsKK2ludCBwd3JkbV9yZWFkX21lbV9yZXRzdChzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtLCB1OCBiYW5rKTsKIAogaW50IHB3cmRtX2VuYWJsZV9oZHdyX3NhcihzdHJ1Y3QgcG93ZXJkb21haW4gKnB3cmRtKTsKIGludCBwd3JkbV9kaXNhYmxlX2hkd3Jfc2FyKHN0cnVjdCBwb3dlcmRvbWFpbiAqcHdyZG0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9wcmNtLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3ByY20uaAppbmRleCBlNjNlOTRlLi5kNmEwZTI3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3ByY20uaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3ByY20uaApAQCAtMjUsNyArMjUsOCBAQAogCiB1MzIgb21hcF9wcmNtX2dldF9yZXNldF9zb3VyY2VzKHZvaWQpOwogdm9pZCBvbWFwX3ByY21fYXJjaF9yZXNldChjaGFyIG1vZGUpOwotaW50IG9tYXAyX2NtX3dhaXRfaWRsZXN0KHZvaWQgX19pb21lbSAqcmVnLCB1MzIgbWFzaywgY29uc3QgY2hhciAqbmFtZSk7CitpbnQgb21hcDJfY21fd2FpdF9pZGxlc3Qodm9pZCBfX2lvbWVtICpyZWcsIHUzMiBtYXNrLCB1OCBpZGxlc3QsCisJCQkgY29uc3QgY2hhciAqbmFtZSk7CiAKICNkZWZpbmUgU1RBUlRfUEFEQ09ORl9TQVZFIDB4MgogI2RlZmluZSBQQURDT05GX1NBVkVfRE9ORSAgMHgxCkBAIC0zMyw2ICszNCwxNCBAQAogdm9pZCBvbWFwM19wcmNtX3NhdmVfY29udGV4dCh2b2lkKTsKIHZvaWQgb21hcDNfcHJjbV9yZXN0b3JlX2NvbnRleHQodm9pZCk7CiAKK3UzMiBwcm1fcmVhZF9tb2RfcmVnKHMxNiBtb2R1bGUsIHUxNiBpZHgpOwordm9pZCBwcm1fd3JpdGVfbW9kX3JlZyh1MzIgdmFsLCBzMTYgbW9kdWxlLCB1MTYgaWR4KTsKK3UzMiBwcm1fcm13X21vZF9yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHMxNiBtb2R1bGUsIHMxNiBpZHgpOwordTMyIHBybV9yZWFkX21vZF9iaXRzX3NoaWZ0KHMxNiBkb21haW4sIHMxNiBpZHgsIHUzMiBtYXNrKTsKK3UzMiBjbV9yZWFkX21vZF9yZWcoczE2IG1vZHVsZSwgdTE2IGlkeCk7Cit2b2lkIGNtX3dyaXRlX21vZF9yZWcodTMyIHZhbCwgczE2IG1vZHVsZSwgdTE2IGlkeCk7Cit1MzIgY21fcm13X21vZF9yZWdfYml0cyh1MzIgbWFzaywgdTMyIGJpdHMsIHMxNiBtb2R1bGUsIHMxNiBpZHgpOworCiAjZW5kaWYKIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3NlcmlhbC5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC9zZXJpYWwuaAppbmRleCBmNWE0YTkyLi44M2RjZTRjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3NlcmlhbC5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvc2VyaWFsLmgKQEAgLTE1LDM3ICsxNSw2NSBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMSkKIC8qIE9NQVAxIHNlcmlhbCBwb3J0cyAqLwotI2RlZmluZSBPTUFQX1VBUlQxX0JBU0UJCTB4ZmZmYjAwMDAKLSNkZWZpbmUgT01BUF9VQVJUMl9CQVNFCQkweGZmZmIwODAwCi0jZGVmaW5lIE9NQVBfVUFSVDNfQkFTRQkJMHhmZmZiOTgwMAotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikKKyNkZWZpbmUgT01BUDFfVUFSVDFfQkFTRQkweGZmZmIwMDAwCisjZGVmaW5lIE9NQVAxX1VBUlQyX0JBU0UJMHhmZmZiMDgwMAorI2RlZmluZSBPTUFQMV9VQVJUM19CQVNFCTB4ZmZmYjk4MDAKKwogLyogT01BUDIgc2VyaWFsIHBvcnRzICovCi0jZGVmaW5lIE9NQVBfVUFSVDFfQkFTRQkJMHg0ODA2YTAwMAotI2RlZmluZSBPTUFQX1VBUlQyX0JBU0UJCTB4NDgwNmMwMDAKLSNkZWZpbmUgT01BUF9VQVJUM19CQVNFCQkweDQ4MDZlMDAwCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQorI2RlZmluZSBPTUFQMl9VQVJUMV9CQVNFCTB4NDgwNmEwMDAKKyNkZWZpbmUgT01BUDJfVUFSVDJfQkFTRQkweDQ4MDZjMDAwCisjZGVmaW5lIE9NQVAyX1VBUlQzX0JBU0UJMHg0ODA2ZTAwMAorCiAvKiBPTUFQMyBzZXJpYWwgcG9ydHMgKi8KLSNkZWZpbmUgT01BUF9VQVJUMV9CQVNFCQkweDQ4MDZhMDAwCi0jZGVmaW5lIE9NQVBfVUFSVDJfQkFTRQkJMHg0ODA2YzAwMAotI2RlZmluZSBPTUFQX1VBUlQzX0JBU0UJCTB4NDkwMjAwMDAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDQpCisjZGVmaW5lIE9NQVAzX1VBUlQxX0JBU0UJT01BUDJfVUFSVDFfQkFTRQorI2RlZmluZSBPTUFQM19VQVJUMl9CQVNFCU9NQVAyX1VBUlQyX0JBU0UKKyNkZWZpbmUgT01BUDNfVUFSVDNfQkFTRQkweDQ5MDIwMDAwCisjZGVmaW5lIE9NQVAzX1VBUlQ0X0JBU0UJMHg0OTA0MjAwMAkvKiBPbmx5IG9uIDM2eHggKi8KKwogLyogT01BUDQgc2VyaWFsIHBvcnRzICovCi0jZGVmaW5lIE9NQVBfVUFSVDFfQkFTRQkJMHg0ODA2YTAwMAotI2RlZmluZSBPTUFQX1VBUlQyX0JBU0UJCTB4NDgwNmMwMDAKLSNkZWZpbmUgT01BUF9VQVJUM19CQVNFCQkweDQ4MDIwMDAwCi0jZGVmaW5lIE9NQVBfVUFSVDRfQkFTRQkJMHg0ODA2ZTAwMAotI2VuZGlmCisjZGVmaW5lIE9NQVA0X1VBUlQxX0JBU0UJT01BUDJfVUFSVDFfQkFTRQorI2RlZmluZSBPTUFQNF9VQVJUMl9CQVNFCU9NQVAyX1VBUlQyX0JBU0UKKyNkZWZpbmUgT01BUDRfVUFSVDNfQkFTRQkweDQ4MDIwMDAwCisjZGVmaW5lIE9NQVA0X1VBUlQ0X0JBU0UJMHg0ODA2ZTAwMAorCisvKiBFeHRlcm5hbCBwb3J0IG9uIFpvb20yLzMgKi8KKyNkZWZpbmUgWk9PTV9VQVJUX0JBU0UJCTB4MTAwMDAwMDAKKyNkZWZpbmUgWk9PTV9VQVJUX1ZJUlQJCTB4ZmIwMDAwMDAKKworI2RlZmluZSBPTUFQX1BPUlRfU0hJRlQJCTIKKyNkZWZpbmUgT01BUDdYWF9QT1JUX1NISUZUCTAKKyNkZWZpbmUgWk9PTV9QT1JUX1NISUZUCQkxCiAKICNkZWZpbmUgT01BUDE1MTBfQkFTRV9CQVVECSgxMjAwMDAwMC8xNikKICNkZWZpbmUgT01BUDE2WFhfQkFTRV9CQVVECSg0ODAwMDAwMC8xNikKICNkZWZpbmUgT01BUDI0WFhfQkFTRV9CQVVECSg0ODAwMDAwMC8xNikKIAorLyoKKyAqIERFQlVHX0xMIHBvcnQgZW5jb2Rpbmcgc3RvcmVkIGludG8gdGhlIFVBUlQxIHNjcmF0Y2hwYWQgcmVnaXN0ZXIgYnkKKyAqIGRlY29tcF9zZXR1cCBpbiB1bmNvbXByZXNzLmgKKyAqLworI2RlZmluZSBPTUFQMVVBUlQxCQkxMQorI2RlZmluZSBPTUFQMVVBUlQyCQkxMgorI2RlZmluZSBPTUFQMVVBUlQzCQkxMworI2RlZmluZSBPTUFQMlVBUlQxCQkyMQorI2RlZmluZSBPTUFQMlVBUlQyCQkyMgorI2RlZmluZSBPTUFQMlVBUlQzCQkyMworI2RlZmluZSBPTUFQM1VBUlQxCQlPTUFQMlVBUlQxCisjZGVmaW5lIE9NQVAzVUFSVDIJCU9NQVAyVUFSVDIKKyNkZWZpbmUgT01BUDNVQVJUMwkJMzMKKyNkZWZpbmUgT01BUDNVQVJUNAkJMzQJCS8qIE9ubHkgb24gMzZ4eCAqLworI2RlZmluZSBPTUFQNFVBUlQxCQlPTUFQMlVBUlQxCisjZGVmaW5lIE9NQVA0VUFSVDIJCU9NQVAyVUFSVDIKKyNkZWZpbmUgT01BUDRVQVJUMwkJNDMKKyNkZWZpbmUgT01BUDRVQVJUNAkJNDQKKyNkZWZpbmUgWk9PTV9VQVJUCQk5NQkJLyogT25seSBvbiB6b29tMi8zICovCisKKy8qIFRoaXMgaXMgb25seSB1c2VkIGJ5IDgyNTAuYyBmb3Igb21hcDE1MTAgKi8KICNkZWZpbmUgaXNfb21hcF9wb3J0KHB0KQkoe2ludCBfX3JldCA9IDA7CQkJXAotCQkJaWYgKChwdCktPnBvcnQubWFwYmFzZSA9PSBPTUFQX1VBUlQxX0JBU0UgfHwJXAotCQkJICAgIChwdCktPnBvcnQubWFwYmFzZSA9PSBPTUFQX1VBUlQyX0JBU0UgfHwJXAotCQkJICAgIChwdCktPnBvcnQubWFwYmFzZSA9PSBPTUFQX1VBUlQzX0JBU0UpCVwKKwkJCWlmICgocHQpLT5wb3J0Lm1hcGJhc2UgPT0gT01BUDFfVUFSVDFfQkFTRSB8fAlcCisJCQkgICAgKHB0KS0+cG9ydC5tYXBiYXNlID09IE9NQVAxX1VBUlQyX0JBU0UgfHwJXAorCQkJICAgIChwdCktPnBvcnQubWFwYmFzZSA9PSBPTUFQMV9VQVJUM19CQVNFKQlcCiAJCQkJX19yZXQgPSAxOwkJCQlcCiAJCQlfX3JldDsJCQkJCQlcCiAJCQl9KQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaAppbmRleCAxM2MzMDVkLi44MWQ5ZWM1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaAorKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaApAQCAtMTksNjIgKzE5LDM4IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKICNpbmNsdWRlIDxwbGF0L3NlcmlhbC5oPgogCi11bnNpZ25lZCBpbnQgc3lzdGVtX3JldjsKK3N0YXRpYyB2b2xhdGlsZSB1OCAqdWFydDFfYmFzZTsKK3N0YXRpYyBpbnQgdWFydDFfc2hpZnQ7CiAKLSNkZWZpbmUgVUFSVF9PTUFQX01EUjEJCTB4MDgJLyogbW9kZSBkZWZpbml0aW9uIHJlZ2lzdGVyICovCi0jZGVmaW5lIE9NQVBfSURfNzMwCQkweDM1NUYKLSNkZWZpbmUgT01BUF9JRF84NTAJCTB4MzYyQwotI2RlZmluZSBJRF9NQVNLCQkJMHg3ZmZmCi0jZGVmaW5lIGNoZWNrX3BvcnQoYmFzZSwgc2hpZnQpICgoYmFzZVtVQVJUX09NQVBfTURSMSA8PCBzaGlmdF0gJiA3KSA9PSAwKQotI2RlZmluZSBvbWFwX2dldF9pZCgpICgoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikoMHhmZmZlZDQwNCkpID4+IDEyKSAmIElEX01BU0sKK3N0YXRpYyB2b2xhdGlsZSB1OCAqdWFydF9iYXNlOworc3RhdGljIGludCB1YXJ0X3NoaWZ0OworCisvKgorICogU3RvcmUgdGhlIERFQlVHX0xMIHVhcnQgbnVtYmVyIGludG8gVUFSVDEgc2NyYXRjaHBhZCByZWdpc3Rlci4KKyAqIFNlZSBhbHNvIGRlYnVnLW1hY3JvLlMsIGFuZCBzZXJpYWwuYyBmb3IgcmVsYXRlZCBjb2RlLgorICoKKyAqIFBsZWFzZSBub3RlIHRoYXQgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0OgorICogLSBVQVJUMSBjbG9ja3MgYXJlIGVuYWJsZWQgZm9yIHJlZ2lzdGVyIGFjY2VzcworICogLSBVQVJUMSBzY3JhdGNocGFkIHJlZ2lzdGVyIGNhbiBiZSB1c2VkCisgKi8KK3N0YXRpYyB2b2lkIHNldF91YXJ0MV9zY3JhdGNocGFkKHVuc2lnbmVkIGNoYXIgcG9ydCkKK3sKKwl1YXJ0MV9iYXNlW1VBUlRfU0NSIDw8IHVhcnQxX3NoaWZ0XSA9IHBvcnQ7Cit9CiAKIHN0YXRpYyB2b2lkIHB1dGMoaW50IGMpCiB7Ci0Jdm9sYXRpbGUgdTggKiB1YXJ0ID0gMDsKLQlpbnQgc2hpZnQgPSAyOwotCi0jaWZkZWYgQ09ORklHX01BQ0hfT01BUF9QQUxNVEUKLQlyZXR1cm47Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAKLSNpZmRlZglDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMwotCXVhcnQgPSAodm9sYXRpbGUgdTggKikoT01BUF9VQVJUM19CQVNFKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX09NQVBfTExfREVCVUdfVUFSVDIpCi0JdWFydCA9ICh2b2xhdGlsZSB1OCAqKShPTUFQX1VBUlQyX0JBU0UpOwotI2VsaWYgZGVmaW5lZChDT05GSUdfT01BUF9MTF9ERUJVR19VQVJUMSkKLQl1YXJ0ID0gKHZvbGF0aWxlIHU4ICopKE9NQVBfVUFSVDFfQkFTRSk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19PTUFQX0xMX0RFQlVHX05PTkUpCi0JcmV0dXJuOwotI2Vsc2UKLQlyZXR1cm47Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCi0JLyogRGV0ZXJtaW5lIHdoaWNoIHNlcmlhbCBwb3J0IHRvIHVzZSAqLwotCWRvIHsKLQkJLyogTU1VIGlzIG5vdCBvbiwgc28gY3B1X2lzX29tYXBYWFhYKCkgd29uJ3Qgd29yayBoZXJlICovCi0JCXVuc2lnbmVkIGludCBvbWFwX2lkID0gb21hcF9nZXRfaWQoKTsKLQotCQlpZiAob21hcF9pZCA9PSBPTUFQX0lEXzczMCB8fCBvbWFwX2lkID09IE9NQVBfSURfODUwKQotCQkJc2hpZnQgPSAwOwotCi0JCWlmIChjaGVja19wb3J0KHVhcnQsIHNoaWZ0KSkKLQkJCWJyZWFrOwotCQkvKiBTaWxlbnQgYm9vdCBpZiBubyBzZXJpYWwgcG9ydHMgYXJlIGVuYWJsZWQuICovCisJaWYgKCF1YXJ0X2Jhc2UpCiAJCXJldHVybjsKLQl9IHdoaWxlICgwKTsKLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMSAqLwotI2VuZGlmCiAKLQkvKgotCSAqIE5vdywgeG1pdCBlYWNoIGNoYXJhY3RlcgotCSAqLwotCXdoaWxlICghKHVhcnRbVUFSVF9MU1IgPDwgc2hpZnRdICYgVUFSVF9MU1JfVEhSRSkpCisJd2hpbGUgKCEodWFydF9iYXNlW1VBUlRfTFNSIDw8IHVhcnRfc2hpZnRdICYgVUFSVF9MU1JfVEhSRSkpCiAJCWJhcnJpZXIoKTsKLQl1YXJ0W1VBUlRfVFggPDwgc2hpZnRdID0gYzsKKwl1YXJ0X2Jhc2VbVUFSVF9UWCA8PCB1YXJ0X3NoaWZ0XSA9IGM7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaCh2b2lkKQpAQCAtODIsNyArNTgsMTE2IEBACiB9CiAKIC8qCisgKiBNYWNyb3MgdG8gY29uZmlndXJlIFVBUlQxIGFuZCBkZWJ1ZyBVQVJUCisgKi8KKyNkZWZpbmUgX0RFQlVHX0xMX0VOVFJZKG1hY2gsIHVhcnQxX3BoeXMsIHVhcnQxX3NoZnQsCQkJXAorCQkJZGJnX3VhcnQsIGRiZ19zaGZ0LCBkYmdfaWQpCQkJXAorCWlmIChtYWNoaW5lX2lzXyMjbWFjaCgpKSB7CQkJCQlcCisJCXVhcnQxX2Jhc2UgPSAodm9sYXRpbGUgdTggKikodWFydDFfcGh5cyk7CQlcCisJCXVhcnQxX3NoaWZ0ID0gKHVhcnQxX3NoZnQpOwkJCQlcCisJCXVhcnRfYmFzZSA9ICh2b2xhdGlsZSB1OCAqKShkYmdfdWFydCk7CQkJXAorCQl1YXJ0X3NoaWZ0ID0gKGRiZ19zaGZ0KTsJCQkJXAorCQlwb3J0ID0gKGRiZ19pZCk7CQkJCQlcCisJCXNldF91YXJ0MV9zY3JhdGNocGFkKHBvcnQpOwkJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJfQorCisjZGVmaW5lIERFQlVHX0xMX09NQVA3WFgocCwgbWFjaCkJCQkJCVwKKwlfREVCVUdfTExfRU5UUlkobWFjaCwgT01BUDFfVUFSVDFfQkFTRSwgT01BUDdYWF9QT1JUX1NISUZULAlcCisJCU9NQVAxX1VBUlQjI3AjI19CQVNFLCBPTUFQN1hYX1BPUlRfU0hJRlQsIE9NQVAxVUFSVCMjcCkKKworI2RlZmluZSBERUJVR19MTF9PTUFQMShwLCBtYWNoKQkJCQkJCVwKKwlfREVCVUdfTExfRU5UUlkobWFjaCwgT01BUDFfVUFSVDFfQkFTRSwgT01BUF9QT1JUX1NISUZULAlcCisJCU9NQVAxX1VBUlQjI3AjI19CQVNFLCBPTUFQX1BPUlRfU0hJRlQsIE9NQVAxVUFSVCMjcCkKKworI2RlZmluZSBERUJVR19MTF9PTUFQMihwLCBtYWNoKQkJCQkJCVwKKwlfREVCVUdfTExfRU5UUlkobWFjaCwgT01BUDJfVUFSVDFfQkFTRSwgT01BUF9QT1JUX1NISUZULAlcCisJCU9NQVAyX1VBUlQjI3AjI19CQVNFLCBPTUFQX1BPUlRfU0hJRlQsIE9NQVAyVUFSVCMjcCkKKworI2RlZmluZSBERUJVR19MTF9PTUFQMyhwLCBtYWNoKQkJCQkJCVwKKwlfREVCVUdfTExfRU5UUlkobWFjaCwgT01BUDNfVUFSVDFfQkFTRSwgT01BUF9QT1JUX1NISUZULAlcCisJCU9NQVAzX1VBUlQjI3AjI19CQVNFLCBPTUFQX1BPUlRfU0hJRlQsIE9NQVAzVUFSVCMjcCkKKworI2RlZmluZSBERUJVR19MTF9PTUFQNChwLCBtYWNoKQkJCQkJCVwKKwlfREVCVUdfTExfRU5UUlkobWFjaCwgT01BUDRfVUFSVDFfQkFTRSwgT01BUF9QT1JUX1NISUZULAlcCisJCU9NQVA0X1VBUlQjI3AjI19CQVNFLCBPTUFQX1BPUlRfU0hJRlQsIE9NQVA0VUFSVCMjcCkKKworLyogWm9vbTIvMyBzaGlmdCBpcyBkaWZmZXJlbnQgZm9yIFVBUlQxIGFuZCBleHRlcm5hbCBwb3J0ICovCisjZGVmaW5lIERFQlVHX0xMX1pPT00obWFjaCkJCQkJCQlcCisJX0RFQlVHX0xMX0VOVFJZKG1hY2gsIE9NQVAyX1VBUlQxX0JBU0UsIE9NQVBfUE9SVF9TSElGVCwJXAorCQlaT09NX1VBUlRfQkFTRSwgWk9PTV9QT1JUX1NISUZULCBaT09NX1VBUlQpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2FyY2hfZGVjb21wX3NldHVwKHVuc2lnbmVkIGxvbmcgYXJjaF9pZCkKK3sKKwlpbnQgcG9ydCA9IDA7CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIHBvcnQgYmFzZWQgb24gdGhlIG1hY2hpbmUgSUQgZnJvbSB0aGUgYm9vdGxvYWRlci4KKwkgKiBOb3RlIHRoYXQgd2UncmUgdXNpbmcgbWFjcm9zIGhlcmUgaW5zdGVhZCBvZiBzd2l0Y2ggc3RhdGVtZW50CisJICogYXMgbWFjaGluZV9pcyBmdW5jdGlvbnMgYXJlIG9wdGltaXplZCBvdXQgZm9yIHRoZSBib2FyZHMgdGhhdAorCSAqIGFyZSBub3Qgc2VsZWN0ZWQuCisJICovCisJZG8geworCQkvKiBvbWFwN3h4Lzh4eCBiYXNlZCBib2FyZHMgdXNpbmcgVUFSVDEgd2l0aCBzaGlmdCAwICovCisJCURFQlVHX0xMX09NQVA3WFgoMSwgaGVyYWxkKTsKKwkJREVCVUdfTExfT01BUDdYWCgxLCBvbWFwX3BlcnNldXMyKTsKKworCQkvKiBvbWFwMTV4eC8xNnh4IGJhc2VkIGJvYXJkcyB1c2luZyBVQVJUMSAqLworCQlERUJVR19MTF9PTUFQMSgxLCBhbXNfZGVsdGEpOworCQlERUJVR19MTF9PTUFQMSgxLCBub2tpYTc3MCk7CisJCURFQlVHX0xMX09NQVAxKDEsIG9tYXBfaDIpOworCQlERUJVR19MTF9PTUFQMSgxLCBvbWFwX2gzKTsKKwkJREVCVUdfTExfT01BUDEoMSwgb21hcF9pbm5vdmF0b3IpOworCQlERUJVR19MTF9PTUFQMSgxLCBvbWFwX29zayk7CisJCURFQlVHX0xMX09NQVAxKDEsIG9tYXBfcGFsbXRlKTsKKwkJREVCVUdfTExfT01BUDEoMSwgb21hcF9wYWxtejcxKTsKKworCQkvKiBvbWFwMTV4eC8xNnh4IGJhc2VkIGJvYXJkcyB1c2luZyBVQVJUMiAqLworCQlERUJVR19MTF9PTUFQMSgyLCBvbWFwX3BhbG10dCk7CisKKwkJLyogb21hcDE1eHgvMTZ4eCBiYXNlZCBib2FyZHMgdXNpbmcgVUFSVDMgKi8KKwkJREVCVUdfTExfT01BUDEoMywgc3gxKTsKKworCQkvKiBvbWFwMiBiYXNlZCBib2FyZHMgdXNpbmcgVUFSVDEgKi8KKwkJREVCVUdfTExfT01BUDIoMSwgb21hcDJldm0pOworCQlERUJVR19MTF9PTUFQMigxLCBvbWFwXzI0MzBzZHApOworCQlERUJVR19MTF9PTUFQMigxLCBvbWFwX2Fwb2xsb24pOworCQlERUJVR19MTF9PTUFQMigxLCBvbWFwX2g0KTsKKworCQkvKiBvbWFwMiBiYXNlZCBib2FyZHMgdXNpbmcgVUFSVDMgKi8KKwkJREVCVUdfTExfT01BUDIoMywgbm9raWFfbjgwMCk7CisJCURFQlVHX0xMX09NQVAyKDMsIG5va2lhX244MTApOworCQlERUJVR19MTF9PTUFQMigzLCBub2tpYV9uODEwX3dpbWF4KTsKKworCQkvKiBvbWFwMyBiYXNlZCBib2FyZHMgdXNpbmcgVUFSVDEgKi8KKwkJREVCVUdfTExfT01BUDIoMSwgb21hcDNldm0pOworCQlERUJVR19MTF9PTUFQMygxLCBvbWFwXzM0MzBzZHApOworCQlERUJVR19MTF9PTUFQMygxLCBvbWFwXzM2MzBzZHApOworCisJCS8qIG9tYXAzIGJhc2VkIGJvYXJkcyB1c2luZyBVQVJUMyAqLworCQlERUJVR19MTF9PTUFQMygzLCBjbV90MzUpOworCQlERUJVR19MTF9PTUFQMygzLCBpZ2VwMDAyMCk7CisJCURFQlVHX0xMX09NQVAzKDMsIG5va2lhX3J4NTEpOworCQlERUJVR19MTF9PTUFQMygzLCBvbWFwMzUxN2V2bSk7CisJCURFQlVHX0xMX09NQVAzKDMsIG9tYXAzX2JlYWdsZSk7CisJCURFQlVHX0xMX09NQVAzKDMsIG9tYXAzX3BhbmRvcmEpOworCQlERUJVR19MTF9PTUFQMygzLCBvbWFwX2xkcCk7CisJCURFQlVHX0xMX09NQVAzKDMsIG92ZXJvKTsKKwkJREVCVUdfTExfT01BUDMoMywgdG91Y2hib29rKTsKKworCQkvKiBvbWFwNCBiYXNlZCBib2FyZHMgdXNpbmcgVUFSVDMgKi8KKwkJREVCVUdfTExfT01BUDQoMywgb21hcF80NDMwc2RwKTsKKworCQkvKiB6b29tMi8zIGV4dGVybmFsIHVhcnQgKi8KKwkJREVCVUdfTExfWk9PTShvbWFwX3pvb20yKTsKKwkJREVCVUdfTExfWk9PTShvbWFwX3pvb20zKTsKKworCX0gd2hpbGUgKDApOworfQorCisjZGVmaW5lIGFyY2hfZGVjb21wX3NldHVwKCkJX19hcmNoX2RlY29tcF9zZXR1cChhcmNoX2lkKQorCisvKgogICogbm90aGluZyB0byBkbwogICovCi0jZGVmaW5lIGFyY2hfZGVjb21wX3NldHVwKCkKICNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3VzYi5oIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2luY2x1ZGUvcGxhdC91c2IuaAppbmRleCAzM2E1MDBlLi4yODhlMjllIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW5jbHVkZS9wbGF0L3VzYi5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pbmNsdWRlL3BsYXQvdXNiLmgKQEAgLTMsNiArMyw3IEBACiAjaWZuZGVmCV9fQVNNX0FSQ0hfT01BUF9VU0JfSAogI2RlZmluZQlfX0FTTV9BUkNIX09NQVBfVVNCX0gKIAorI2luY2x1ZGUgPGxpbnV4L3VzYi9tdXNiLmg+CiAjaW5jbHVkZSA8cGxhdC9ib2FyZC5oPgogCiAjZGVmaW5lIE9NQVAzX0hTX1VTQl9QT1JUUwkzCkBAIC00Miw3ICs0MywxNSBAQAogI2RlZmluZSBVRENfQkFTRQkJCU9NQVAyX1VEQ19CQVNFCiAjZGVmaW5lIE9NQVBfT0hDSV9CQVNFCQkJT01BUDJfT0hDSV9CQVNFCiAKLWV4dGVybiB2b2lkIHVzYl9tdXNiX2luaXQodm9pZCk7CitzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgeworCXU4CWludGVyZmFjZV90eXBlOworCXU4CW1vZGU7CisJdTgJcG93ZXI7Cit9OworCitlbnVtIG11c2JfaW50ZXJmYWNlICAgIHtNVVNCX0lOVEVSRkFDRV9VTFBJLCBNVVNCX0lOVEVSRkFDRV9VVE1JfTsKKworZXh0ZXJuIHZvaWQgdXNiX211c2JfaW5pdChzdHJ1Y3Qgb21hcF9tdXNiX2JvYXJkX2RhdGEgKmJvYXJkX2RhdGEpOwogCiBleHRlcm4gdm9pZCB1c2JfZWhjaV9pbml0KHN0cnVjdCBlaGNpX2hjZF9vbWFwX3BsYXRmb3JtX2RhdGEgKnBkYXRhKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW8uYwppbmRleCA0Y2JkNGZiLi5iMDA3OGNmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvaW8uYwpAQCAtOTAsOCArOTAsNiBAQAogCQkJcmV0dXJuIFhMQVRFKHAsIEwzXzM0WFhfUEhZUywgTDNfMzRYWF9WSVJUKTsKIAkJaWYgKEJFVFdFRU4ocCwgTDRfMzRYWF9QSFlTLCBMNF8zNFhYX1NJWkUpKQogCQkJcmV0dXJuIFhMQVRFKHAsIEw0XzM0WFhfUEhZUywgTDRfMzRYWF9WSVJUKTsKLQkJaWYgKEJFVFdFRU4ocCwgTDRfV0tfMzRYWF9QSFlTLCBMNF9XS18zNFhYX1NJWkUpKQotCQkJcmV0dXJuIFhMQVRFKHAsIEw0X1dLXzM0WFhfUEhZUywgTDRfV0tfMzRYWF9WSVJUKTsKIAkJaWYgKEJFVFdFRU4ocCwgT01BUDM0WFhfR1BNQ19QSFlTLCBPTUFQMzRYWF9HUE1DX1NJWkUpKQogCQkJcmV0dXJuIFhMQVRFKHAsIE9NQVAzNFhYX0dQTUNfUEhZUywgT01BUDM0WFhfR1BNQ19WSVJUKTsKIAkJaWYgKEJFVFdFRU4ocCwgT01BUDM0M1hfU01TX1BIWVMsIE9NQVAzNDNYX1NNU19TSVpFKSkKQEAgLTExMCw4ICsxMDgsNiBAQAogCQkJcmV0dXJuIFhMQVRFKHAsIEwzXzQ0WFhfUEhZUywgTDNfNDRYWF9WSVJUKTsKIAkJaWYgKEJFVFdFRU4ocCwgTDRfNDRYWF9QSFlTLCBMNF80NFhYX1NJWkUpKQogCQkJcmV0dXJuIFhMQVRFKHAsIEw0XzQ0WFhfUEhZUywgTDRfNDRYWF9WSVJUKTsKLQkJaWYgKEJFVFdFRU4ocCwgTDRfV0tfNDRYWF9QSFlTLCBMNF9XS180NFhYX1NJWkUpKQotCQkJcmV0dXJuIFhMQVRFKHAsIEw0X1dLXzQ0WFhfUEhZUywgTDRfV0tfNDRYWF9WSVJUKTsKIAkJaWYgKEJFVFdFRU4ocCwgT01BUDQ0WFhfR1BNQ19QSFlTLCBPTUFQNDRYWF9HUE1DX1NJWkUpKQogCQkJcmV0dXJuIFhMQVRFKHAsIE9NQVA0NFhYX0dQTUNfUEhZUywgT01BUDQ0WFhfR1BNQ19WSVJUKTsKIAkJaWYgKEJFVFdFRU4ocCwgT01BUDQ0WFhfRU1JRjFfUEhZUywgT01BUDQ0WFhfRU1JRjFfU0laRSkpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW9tbXUuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCmluZGV4IDQ2M2Q2MzguLjkwNWVkODMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb21tdS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIG9tYXAgaW9tbXU6IHRsYiBhbmQgcGFnZXRhYmxlIHByaW1pdGl2ZXMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KICAqCiAgKiBXcml0dGVuIGJ5IEhpcm9zaGkgRE9ZVSA8SGlyb3NoaS5ET1lVQG5va2lhLmNvbT4sCiAgKgkJUGF1bCBNdW5kdCBhbmQgVG9zaGloaXJvIEtvYmF5YXNoaQpAQCAtNjQ2LDcgKzY0Niw3IEBACiAJCWlmICgqaW9wdGUgJiBJT1BURV9MQVJHRSkgewogCQkJbmVudCAqPSAxNjsKIAkJCS8qIHJld2luZCB0byB0aGUgMXN0IGVudHJ5ICovCi0JCQlpb3B0ZSA9ICh1MzIgKikoKHUzMilpb3B0ZSAmIElPTEFSR0VfTUFTSyk7CisJCQlpb3B0ZSA9IGlvcHRlX29mZnNldChpb3BnZCwgKGRhICYgSU9MQVJHRV9NQVNLKSk7CiAJCX0KIAkJYnl0ZXMgKj0gbmVudDsKIAkJbWVtc2V0KGlvcHRlLCAwLCBuZW50ICogc2l6ZW9mKCppb3B0ZSkpOwpAQCAtNjY3LDcgKzY2Nyw3IEBACiAJCWlmICgoKmlvcGdkICYgSU9QR0RfU1VQRVIpID09IElPUEdEX1NVUEVSKSB7CiAJCQluZW50ICo9IDE2OwogCQkJLyogcmV3aW5kIHRvIHRoZSAxc3QgZW50cnkgKi8KLQkJCWlvcGdkID0gKHUzMiAqKSgodTMyKWlvcGdkICYgSU9TVVBFUl9NQVNLKTsKKwkJCWlvcGdkID0gaW9wZ2Rfb2Zmc2V0KG9iaiwgKGRhICYgSU9TVVBFUl9NQVNLKSk7CiAJCX0KIAkJYnl0ZXMgKj0gbmVudDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvaW9wZ3RhYmxlLmggYi9hcmNoL2FybS9wbGF0LW9tYXAvaW9wZ3RhYmxlLmgKaW5kZXggMzdkYWM0My4uYWIyM2I2YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2lvcGd0YWJsZS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9pb3BndGFibGUuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBvbWFwIGlvbW11OiBwYWdldGFibGUgZGVmaW5pdGlvbnMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KICAqCiAgKiBXcml0dGVuIGJ5IEhpcm9zaGkgRE9ZVSA8SGlyb3NoaS5ET1lVQG5va2lhLmNvbT4KICAqCkBAIC0xMywyNiArMTMsNTIgQEAKICNpZm5kZWYgX19QTEFUX09NQVBfSU9NTVVfSAogI2RlZmluZSBfX1BMQVRfT01BUF9JT01NVV9ICiAKKy8qCisgKiAiTDIgdGFibGUiIGFkZHJlc3MgbWFzayBhbmQgc2l6ZSBkZWZpbml0aW9ucy4KKyAqLwogI2RlZmluZSBJT1BHRF9TSElGVAkJMjAKLSNkZWZpbmUgSU9QR0RfU0laRQkJKDEgPDwgSU9QR0RfU0hJRlQpCisjZGVmaW5lIElPUEdEX1NJWkUJCSgxVUwgPDwgSU9QR0RfU0hJRlQpCiAjZGVmaW5lIElPUEdEX01BU0sJCSh+KElPUEdEX1NJWkUgLSAxKSkKLSNkZWZpbmUgSU9TRUNUSU9OX01BU0sJCUlPUEdEX01BU0sKLSNkZWZpbmUgUFRSU19QRVJfSU9QR0QJCSgxIDw8ICgzMiAtIElPUEdEX1NISUZUKSkKLSNkZWZpbmUgSU9QR0RfVEFCTEVfU0laRQkoUFRSU19QRVJfSU9QR0QgKiBzaXplb2YodTMyKSkKIAotI2RlZmluZSBJT1NVUEVSX1NJWkUJCShJT1BHRF9TSVpFIDw8IDQpCisvKgorICogInNlY3Rpb24iIGFkZHJlc3MgbWFzayBhbmQgc2l6ZSBkZWZpbml0aW9ucy4KKyAqLworI2RlZmluZSBJT1NFQ1RJT05fU0hJRlQJCTIwCisjZGVmaW5lIElPU0VDVElPTl9TSVpFCQkoMVVMIDw8IElPU0VDVElPTl9TSElGVCkKKyNkZWZpbmUgSU9TRUNUSU9OX01BU0sJCSh+KElPU0VDVElPTl9TSVpFIC0gMSkpCisKKy8qCisgKiAic3VwZXJzZWN0aW9uIiBhZGRyZXNzIG1hc2sgYW5kIHNpemUgZGVmaW5pdGlvbnMuCisgKi8KKyNkZWZpbmUgSU9TVVBFUl9TSElGVAkJMjQKKyNkZWZpbmUgSU9TVVBFUl9TSVpFCQkoMVVMIDw8IElPU1VQRVJfU0hJRlQpCiAjZGVmaW5lIElPU1VQRVJfTUFTSwkJKH4oSU9TVVBFUl9TSVpFIC0gMSkpCiAKLSNkZWZpbmUgSU9QVEVfU0hJRlQJCTEyCi0jZGVmaW5lIElPUFRFX1NJWkUJCSgxIDw8IElPUFRFX1NISUZUKQotI2RlZmluZSBJT1BURV9NQVNLCQkofihJT1BURV9TSVpFIC0gMSkpCi0jZGVmaW5lIElPUEFHRV9NQVNLCQlJT1BURV9NQVNLCi0jZGVmaW5lIFBUUlNfUEVSX0lPUFRFCQkoMSA8PCAoSU9QR0RfU0hJRlQgLSBJT1BURV9TSElGVCkpCi0jZGVmaW5lIElPUFRFX1RBQkxFX1NJWkUJKFBUUlNfUEVSX0lPUFRFICogc2l6ZW9mKHUzMikpCisjZGVmaW5lIFBUUlNfUEVSX0lPUEdECQkoMVVMIDw8ICgzMiAtIElPUEdEX1NISUZUKSkKKyNkZWZpbmUgSU9QR0RfVEFCTEVfU0laRQkoUFRSU19QRVJfSU9QR0QgKiBzaXplb2YodTMyKSkKIAotI2RlZmluZSBJT0xBUkdFX1NJWkUJCShJT1BURV9TSVpFIDw8IDQpCisvKgorICogInNtYWxsIHBhZ2UiIGFkZHJlc3MgbWFzayBhbmQgc2l6ZSBkZWZpbml0aW9ucy4KKyAqLworI2RlZmluZSBJT1BURV9TSElGVAkJMTIKKyNkZWZpbmUgSU9QVEVfU0laRQkJKDFVTCA8PCBJT1BURV9TSElGVCkKKyNkZWZpbmUgSU9QVEVfTUFTSwkJKH4oSU9QVEVfU0laRSAtIDEpKQorCisvKgorICogImxhcmdlIHBhZ2UiIGFkZHJlc3MgbWFzayBhbmQgc2l6ZSBkZWZpbml0aW9ucy4KKyAqLworI2RlZmluZSBJT0xBUkdFX1NISUZUCQkxNgorI2RlZmluZSBJT0xBUkdFX1NJWkUJCSgxVUwgPDwgSU9MQVJHRV9TSElGVCkKICNkZWZpbmUgSU9MQVJHRV9NQVNLCQkofihJT0xBUkdFX1NJWkUgLSAxKSkKIAorI2RlZmluZSBQVFJTX1BFUl9JT1BURQkJKDFVTCA8PCAoSU9QR0RfU0hJRlQgLSBJT1BURV9TSElGVCkpCisjZGVmaW5lIElPUFRFX1RBQkxFX1NJWkUJKFBUUlNfUEVSX0lPUFRFICogc2l6ZW9mKHUzMikpCisKKyNkZWZpbmUgSU9QQUdFX01BU0sJCUlPUFRFX01BU0sKKworLyoKKyAqIHNvbWUgZGVzY3JpcHRvciBhdHRyaWJ1dGVzLgorICovCiAjZGVmaW5lIElPUEdEX1RBQkxFCQkoMSA8PCAwKQogI2RlZmluZSBJT1BHRF9TRUNUSU9OCQkoMiA8PCAwKQogI2RlZmluZSBJT1BHRF9TVVBFUgkJKDEgPDwgMTggfCAyIDw8IDApCkBAIC00MCwxMiArNjYsMTQgQEAKICNkZWZpbmUgSU9QVEVfU01BTEwJCSgyIDw8IDApCiAjZGVmaW5lIElPUFRFX0xBUkdFCQkoMSA8PCAwKQogCisvKiB0byBmaW5kIGFuIGVudHJ5IGluIGEgcGFnZS10YWJsZS1kaXJlY3RvcnkgKi8KICNkZWZpbmUgaW9wZ2RfaW5kZXgoZGEpCQkoKChkYSkgPj4gSU9QR0RfU0hJRlQpICYgKFBUUlNfUEVSX0lPUEdEIC0gMSkpCiAjZGVmaW5lIGlvcGdkX29mZnNldChvYmosIGRhKQkoKG9iaiktPmlvcGdkICsgaW9wZ2RfaW5kZXgoZGEpKQogCiAjZGVmaW5lIGlvcHRlX3BhZGRyKGlvcGdkKQkoKmlvcGdkICYgfigoMSA8PCAxMCkgLSAxKSkKICNkZWZpbmUgaW9wdGVfdmFkZHIoaW9wZ2QpCSgodTMyICopcGh5c190b192aXJ0KGlvcHRlX3BhZGRyKGlvcGdkKSkpCiAKKy8qIHRvIGZpbmQgYW4gZW50cnkgaW4gdGhlIHNlY29uZC1sZXZlbCBwYWdlIHRhYmxlLiAqLwogI2RlZmluZSBpb3B0ZV9pbmRleChkYSkJCSgoKGRhKSA+PiBJT1BURV9TSElGVCkgJiAoUFRSU19QRVJfSU9QVEUgLSAxKSkKICNkZWZpbmUgaW9wdGVfb2Zmc2V0KGlvcGdkLCBkYSkJKGlvcHRlX3ZhZGRyKGlvcGdkKSArIGlvcHRlX2luZGV4KGRhKSkKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9tYWlsYm94LmMKaW5kZXggOGU5MDYzMy4uNDIyOWNlYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL21haWxib3guYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWFpbGJveC5jCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlIDxwbGF0L21haWxib3guaD4KIAorc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICptYm94ZDsKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9tYm94ICptYm94ZXM7CiBzdGF0aWMgREVGSU5FX1JXTE9DSyhtYm94ZXNfbG9jayk7CiAKQEAgLTE4OCw3ICsxODksNyBAQAogCS8qIG5vIG1vcmUgbWVzc2FnZXMgaW4gdGhlIGZpZm8uIGNsZWFyIElSUSBzb3VyY2UuICovCiAJYWNrX21ib3hfaXJxKG1ib3gsIElSUV9SWCk7CiBub21lbToKLQlzY2hlZHVsZV93b3JrKCZtYm94LT5yeHEtPndvcmspOworCXF1ZXVlX3dvcmsobWJveGQsICZtYm94LT5yeHEtPndvcmspOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3QgbWJveF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqcCkKQEAgLTQwMSwxMiArNDAyLDE3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfbWJveF9pbml0KHZvaWQpCiB7CisJbWJveGQgPSBjcmVhdGVfd29ya3F1ZXVlKCJtYm94ZCIpOworCWlmICghbWJveGQpCisJCXJldHVybiAtRU5PTUVNOworCiAJcmV0dXJuIDA7CiB9CiBtb2R1bGVfaW5pdChvbWFwX21ib3hfaW5pdCk7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvbWFwX21ib3hfZXhpdCh2b2lkKQogeworCWRlc3Ryb3lfd29ya3F1ZXVlKG1ib3hkKTsKIH0KIG1vZHVsZV9leGl0KG9tYXBfbWJveF9leGl0KTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwppbmRleCBmNzU3NjcyLi5lNDc2ODZlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwpAQCAtMjcsNjQgKzI3LDk3IEBACiAjaW5jbHVkZSA8cGxhdC9kbWEuaD4KICNpbmNsdWRlIDxwbGF0L21jYnNwLmg+CiAKKyNpbmNsdWRlICIuLi9tYWNoLW9tYXAyL2NtLXJlZ2JpdHMtMzR4eC5oIgorCiBzdHJ1Y3Qgb21hcF9tY2JzcCAqKm1jYnNwX3B0cjsKLWludCBvbWFwX21jYnNwX2NvdW50OworaW50IG9tYXBfbWNic3BfY291bnQsIG9tYXBfbWNic3BfY2FjaGVfc2l6ZTsKIAotdm9pZCBvbWFwX21jYnNwX3dyaXRlKHZvaWQgX19pb21lbSAqaW9fYmFzZSwgdTE2IHJlZywgdTMyIHZhbCkKK3ZvaWQgb21hcF9tY2JzcF93cml0ZShzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3AsIHUxNiByZWcsIHUzMiB2YWwpCiB7Ci0JaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpIHx8IGNwdV9pc19vbWFwMjQyMCgpKQotCQlfX3Jhd193cml0ZXcoKHUxNil2YWwsIGlvX2Jhc2UgKyByZWcpOwotCWVsc2UKLQkJX19yYXdfd3JpdGVsKHZhbCwgaW9fYmFzZSArIHJlZyk7CisJaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7CisJCSgodTE2ICopbWNic3AtPnJlZ19jYWNoZSlbcmVnIC8gc2l6ZW9mKHUxNildID0gKHUxNil2YWw7CisJCV9fcmF3X3dyaXRldygodTE2KXZhbCwgbWNic3AtPmlvX2Jhc2UgKyByZWcpOworCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAyNDIwKCkpIHsKKwkJKCh1MTYgKiltY2JzcC0+cmVnX2NhY2hlKVtyZWcgLyBzaXplb2YodTMyKV0gPSAodTE2KXZhbDsKKwkJX19yYXdfd3JpdGV3KCh1MTYpdmFsLCBtY2JzcC0+aW9fYmFzZSArIHJlZyk7CisJfSBlbHNlIHsKKwkJKCh1MzIgKiltY2JzcC0+cmVnX2NhY2hlKVtyZWcgLyBzaXplb2YodTMyKV0gPSB2YWw7CisJCV9fcmF3X3dyaXRlbCh2YWwsIG1jYnNwLT5pb19iYXNlICsgcmVnKTsKKwl9CiB9CiAKLWludCBvbWFwX21jYnNwX3JlYWQodm9pZCBfX2lvbWVtICppb19iYXNlLCB1MTYgcmVnKQoraW50IG9tYXBfbWNic3BfcmVhZChzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3AsIHUxNiByZWcsIGJvb2wgZnJvbV9jYWNoZSkKIHsKLQlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkgfHwgY3B1X2lzX29tYXAyNDIwKCkpCi0JCXJldHVybiBfX3Jhd19yZWFkdyhpb19iYXNlICsgcmVnKTsKLQllbHNlCi0JCXJldHVybiBfX3Jhd19yZWFkbChpb19iYXNlICsgcmVnKTsKKwlpZiAoY3B1X2NsYXNzX2lzX29tYXAxKCkpIHsKKwkJcmV0dXJuICFmcm9tX2NhY2hlID8gX19yYXdfcmVhZHcobWNic3AtPmlvX2Jhc2UgKyByZWcpIDoKKwkJCQkoKHUxNiAqKW1jYnNwLT5yZWdfY2FjaGUpW3JlZyAvIHNpemVvZih1MTYpXTsKKwl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMjQyMCgpKSB7CisJCXJldHVybiAhZnJvbV9jYWNoZSA/IF9fcmF3X3JlYWR3KG1jYnNwLT5pb19iYXNlICsgcmVnKSA6CisJCQkJKCh1MTYgKiltY2JzcC0+cmVnX2NhY2hlKVtyZWcgLyBzaXplb2YodTMyKV07CisJfSBlbHNlIHsKKwkJcmV0dXJuICFmcm9tX2NhY2hlID8gX19yYXdfcmVhZGwobWNic3AtPmlvX2Jhc2UgKyByZWcpIDoKKwkJCQkoKHUzMiAqKW1jYnNwLT5yZWdfY2FjaGUpW3JlZyAvIHNpemVvZih1MzIpXTsKKwl9CiB9CiAKLSNkZWZpbmUgT01BUF9NQ0JTUF9SRUFEKGJhc2UsIHJlZykgXAotCQkJb21hcF9tY2JzcF9yZWFkKGJhc2UsIE9NQVBfTUNCU1BfUkVHXyMjcmVnKQotI2RlZmluZSBPTUFQX01DQlNQX1dSSVRFKGJhc2UsIHJlZywgdmFsKSBcCi0JCQlvbWFwX21jYnNwX3dyaXRlKGJhc2UsIE9NQVBfTUNCU1BfUkVHXyMjcmVnLCB2YWwpCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKK3ZvaWQgb21hcF9tY2JzcF9zdF93cml0ZShzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3AsIHUxNiByZWcsIHUzMiB2YWwpCit7CisJX19yYXdfd3JpdGVsKHZhbCwgbWNic3AtPnN0X2RhdGEtPmlvX2Jhc2Vfc3QgKyByZWcpOworfQorCitpbnQgb21hcF9tY2JzcF9zdF9yZWFkKHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCwgdTE2IHJlZykKK3sKKwlyZXR1cm4gX19yYXdfcmVhZGwobWNic3AtPnN0X2RhdGEtPmlvX2Jhc2Vfc3QgKyByZWcpOworfQorI2VuZGlmCisKKyNkZWZpbmUgTUNCU1BfUkVBRChtY2JzcCwgcmVnKSBcCisJCW9tYXBfbWNic3BfcmVhZChtY2JzcCwgT01BUF9NQ0JTUF9SRUdfIyNyZWcsIDApCisjZGVmaW5lIE1DQlNQX1dSSVRFKG1jYnNwLCByZWcsIHZhbCkgXAorCQlvbWFwX21jYnNwX3dyaXRlKG1jYnNwLCBPTUFQX01DQlNQX1JFR18jI3JlZywgdmFsKQorI2RlZmluZSBNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCByZWcpIFwKKwkJb21hcF9tY2JzcF9yZWFkKG1jYnNwLCBPTUFQX01DQlNQX1JFR18jI3JlZywgMSkKIAogI2RlZmluZSBvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKQkoaWQgPCBvbWFwX21jYnNwX2NvdW50KQogI2RlZmluZSBpZF90b19tY2JzcF9wdHIoaWQpCQltY2JzcF9wdHJbaWRdOwogCisjZGVmaW5lIE1DQlNQX1NUX1JFQUQobWNic3AsIHJlZykgXAorCQkJb21hcF9tY2JzcF9zdF9yZWFkKG1jYnNwLCBPTUFQX1NUX1JFR18jI3JlZykKKyNkZWZpbmUgTUNCU1BfU1RfV1JJVEUobWNic3AsIHJlZywgdmFsKSBcCisJCQlvbWFwX21jYnNwX3N0X3dyaXRlKG1jYnNwLCBPTUFQX1NUX1JFR18jI3JlZywgdmFsKQorCiBzdGF0aWMgdm9pZCBvbWFwX21jYnNwX2R1bXBfcmVnKHU4IGlkKQogewogCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CiAKIAlkZXZfZGJnKG1jYnNwLT5kZXYsICIqKioqIE1jQlNQJWQgcmVncyAqKioqXG4iLCBtY2JzcC0+aWQpOwogCWRldl9kYmcobWNic3AtPmRldiwgIkRSUjI6ICAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIERSUjIpKTsKKwkJCU1DQlNQX1JFQUQobWNic3AsIERSUjIpKTsKIAlkZXZfZGJnKG1jYnNwLT5kZXYsICJEUlIxOiAgMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBEUlIxKSk7CisJCQlNQ0JTUF9SRUFEKG1jYnNwLCBEUlIxKSk7CiAJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiRFhSMjogIDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgRFhSMikpOworCQkJTUNCU1BfUkVBRChtY2JzcCwgRFhSMikpOwogCWRldl9kYmcobWNic3AtPmRldiwgIkRYUjE6ICAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIERYUjEpKTsKKwkJCU1DQlNQX1JFQUQobWNic3AsIERYUjEpKTsKIAlkZXZfZGJnKG1jYnNwLT5kZXYsICJTUENSMjogMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBTUENSMikpOworCQkJTUNCU1BfUkVBRChtY2JzcCwgU1BDUjIpKTsKIAlkZXZfZGJnKG1jYnNwLT5kZXYsICJTUENSMTogMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBTUENSMSkpOworCQkJTUNCU1BfUkVBRChtY2JzcCwgU1BDUjEpKTsKIAlkZXZfZGJnKG1jYnNwLT5kZXYsICJSQ1IyOiAgMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBSQ1IyKSk7CisJCQlNQ0JTUF9SRUFEKG1jYnNwLCBSQ1IyKSk7CiAJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiUkNSMTogIDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgUkNSMSkpOworCQkJTUNCU1BfUkVBRChtY2JzcCwgUkNSMSkpOwogCWRldl9kYmcobWNic3AtPmRldiwgIlhDUjI6ICAweCUwNHhcbiIsCi0JCQlPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIFhDUjIpKTsKKwkJCU1DQlNQX1JFQUQobWNic3AsIFhDUjIpKTsKIAlkZXZfZGJnKG1jYnNwLT5kZXYsICJYQ1IxOiAgMHglMDR4XG4iLAotCQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBYQ1IxKSk7CisJCQlNQ0JTUF9SRUFEKG1jYnNwLCBYQ1IxKSk7CiAJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiU1JHUjI6IDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgU1JHUjIpKTsKKwkJCU1DQlNQX1JFQUQobWNic3AsIFNSR1IyKSk7CiAJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiU1JHUjE6IDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgU1JHUjEpKTsKKwkJCU1DQlNQX1JFQUQobWNic3AsIFNSR1IxKSk7CiAJZGV2X2RiZyhtY2JzcC0+ZGV2LCAiUENSMDogIDB4JTA0eFxuIiwKLQkJCU9NQVBfTUNCU1BfUkVBRChtY2JzcC0+aW9fYmFzZSwgUENSMCkpOworCQkJTUNCU1BfUkVBRChtY2JzcCwgUENSMCkpOwogCWRldl9kYmcobWNic3AtPmRldiwgIioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKIH0KIApAQCAtOTMsMTUgKzEyNiwxNSBAQAogCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcF90eCA9IGRldl9pZDsKIAl1MTYgaXJxc3Rfc3BjcjI7CiAKLQlpcnFzdF9zcGNyMiA9IE9NQVBfTUNCU1BfUkVBRChtY2JzcF90eC0+aW9fYmFzZSwgU1BDUjIpOworCWlycXN0X3NwY3IyID0gTUNCU1BfUkVBRChtY2JzcF90eCwgU1BDUjIpOwogCWRldl9kYmcobWNic3BfdHgtPmRldiwgIlRYIElSUSBjYWxsYmFjayA6IDB4JXhcbiIsIGlycXN0X3NwY3IyKTsKIAogCWlmIChpcnFzdF9zcGNyMiAmIFhTWU5DX0VSUikgewogCQlkZXZfZXJyKG1jYnNwX3R4LT5kZXYsICJUWCBGcmFtZSBTeW5jIEVycm9yISA6IDB4JXhcbiIsCiAJCQlpcnFzdF9zcGNyMik7CiAJCS8qIFdyaXRpbmcgemVybyB0byBYU1lOQ19FUlIgY2xlYXJzIHRoZSBJUlEgKi8KLQkJT01BUF9NQ0JTUF9XUklURShtY2JzcF90eC0+aW9fYmFzZSwgU1BDUjIsCi0JCQlpcnFzdF9zcGNyMiAmIH4oWFNZTkNfRVJSKSk7CisJCU1DQlNQX1dSSVRFKG1jYnNwX3R4LCBTUENSMiwKKwkJCSAgICBNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwX3R4LCBTUENSMikgJiB+KFhTWU5DX0VSUikpOwogCX0gZWxzZSB7CiAJCWNvbXBsZXRlKCZtY2JzcF90eC0+dHhfaXJxX2NvbXBsZXRpb24pOwogCX0KQEAgLTExNCwxNSArMTQ3LDE1IEBACiAJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwX3J4ID0gZGV2X2lkOwogCXUxNiBpcnFzdF9zcGNyMTsKIAotCWlycXN0X3NwY3IxID0gT01BUF9NQ0JTUF9SRUFEKG1jYnNwX3J4LT5pb19iYXNlLCBTUENSMSk7CisJaXJxc3Rfc3BjcjEgPSBNQ0JTUF9SRUFEKG1jYnNwX3J4LCBTUENSMSk7CiAJZGV2X2RiZyhtY2JzcF9yeC0+ZGV2LCAiUlggSVJRIGNhbGxiYWNrIDogMHgleFxuIiwgaXJxc3Rfc3BjcjEpOwogCiAJaWYgKGlycXN0X3NwY3IxICYgUlNZTkNfRVJSKSB7CiAJCWRldl9lcnIobWNic3BfcngtPmRldiwgIlJYIEZyYW1lIFN5bmMgRXJyb3IhIDogMHgleFxuIiwKIAkJCWlycXN0X3NwY3IxKTsKIAkJLyogV3JpdGluZyB6ZXJvIHRvIFJTWU5DX0VSUiBjbGVhcnMgdGhlIElSUSAqLwotCQlPTUFQX01DQlNQX1dSSVRFKG1jYnNwX3J4LT5pb19iYXNlLCBTUENSMSwKLQkJCWlycXN0X3NwY3IxICYgfihSU1lOQ19FUlIpKTsKKwkJTUNCU1BfV1JJVEUobWNic3BfcngsIFNQQ1IxLAorCQkJICAgIE1DQlNQX1JFQURfQ0FDSEUobWNic3BfcngsIFNQQ1IxKSAmIH4oUlNZTkNfRVJSKSk7CiAJfSBlbHNlIHsKIAkJY29tcGxldGUoJm1jYnNwX3J4LT50eF9pcnFfY29tcGxldGlvbik7CiAJfQpAQCAtMTM1LDcgKzE2OCw3IEBACiAJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwX2RtYV90eCA9IGRhdGE7CiAKIAlkZXZfZGJnKG1jYnNwX2RtYV90eC0+ZGV2LCAiVFggRE1BIGNhbGxiYWNrIDogMHgleFxuIiwKLQkJT01BUF9NQ0JTUF9SRUFEKG1jYnNwX2RtYV90eC0+aW9fYmFzZSwgU1BDUjIpKTsKKwkJTUNCU1BfUkVBRChtY2JzcF9kbWFfdHgsIFNQQ1IyKSk7CiAKIAkvKiBXZSBjYW4gZnJlZSB0aGUgY2hhbm5lbHMgKi8KIAlvbWFwX2ZyZWVfZG1hKG1jYnNwX2RtYV90eC0+ZG1hX3R4X2xjaCk7CkBAIC0xNDksNyArMTgyLDcgQEAKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3BfZG1hX3J4ID0gZGF0YTsKIAogCWRldl9kYmcobWNic3BfZG1hX3J4LT5kZXYsICJSWCBETUEgY2FsbGJhY2sgOiAweCV4XG4iLAotCQlPTUFQX01DQlNQX1JFQUQobWNic3BfZG1hX3J4LT5pb19iYXNlLCBTUENSMikpOworCQlNQ0JTUF9SRUFEKG1jYnNwX2RtYV9yeCwgU1BDUjIpKTsKIAogCS8qIFdlIGNhbiBmcmVlIHRoZSBjaGFubmVscyAqLwogCW9tYXBfZnJlZV9kbWEobWNic3BfZG1hX3J4LT5kbWFfcnhfbGNoKTsKQEAgLTE2Nyw3ICsyMDAsNiBAQAogdm9pZCBvbWFwX21jYnNwX2NvbmZpZyh1bnNpZ25lZCBpbnQgaWQsIGNvbnN0IHN0cnVjdCBvbWFwX21jYnNwX3JlZ19jZmcgKmNvbmZpZykKIHsKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7Ci0Jdm9pZCBfX2lvbWVtICppb19iYXNlOwogCiAJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGlkICglZClcbiIsIF9fZnVuY19fLCBpZCArIDEpOwpAQCAtMTc1LDMwICsyMDcsMjgwIEBACiAJfQogCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKIAotCWlvX2Jhc2UgPSBtY2JzcC0+aW9fYmFzZTsKIAlkZXZfZGJnKG1jYnNwLT5kZXYsICJDb25maWd1cmluZyBNY0JTUCVkICBwaHlzX2Jhc2U6IDB4JTA4bHhcbiIsCiAJCQltY2JzcC0+aWQsIG1jYnNwLT5waHlzX2Jhc2UpOwogCiAJLyogV2Ugd3JpdGUgdGhlIGdpdmVuIGNvbmZpZyAqLwotCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIGNvbmZpZy0+c3BjcjIpOwotCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjEsIGNvbmZpZy0+c3BjcjEpOwotCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgUkNSMiwgY29uZmlnLT5yY3IyKTsKLQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFJDUjEsIGNvbmZpZy0+cmNyMSk7Ci0JT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBYQ1IyLCBjb25maWctPnhjcjIpOwotCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgWENSMSwgY29uZmlnLT54Y3IxKTsKLQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNSR1IyLCBjb25maWctPnNyZ3IyKTsKLQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNSR1IxLCBjb25maWctPnNyZ3IxKTsKLQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIE1DUjIsIGNvbmZpZy0+bWNyMik7Ci0JT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBNQ1IxLCBjb25maWctPm1jcjEpOwotCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgUENSMCwgY29uZmlnLT5wY3IwKTsKKwlNQ0JTUF9XUklURShtY2JzcCwgU1BDUjIsIGNvbmZpZy0+c3BjcjIpOworCU1DQlNQX1dSSVRFKG1jYnNwLCBTUENSMSwgY29uZmlnLT5zcGNyMSk7CisJTUNCU1BfV1JJVEUobWNic3AsIFJDUjIsIGNvbmZpZy0+cmNyMik7CisJTUNCU1BfV1JJVEUobWNic3AsIFJDUjEsIGNvbmZpZy0+cmNyMSk7CisJTUNCU1BfV1JJVEUobWNic3AsIFhDUjIsIGNvbmZpZy0+eGNyMik7CisJTUNCU1BfV1JJVEUobWNic3AsIFhDUjEsIGNvbmZpZy0+eGNyMSk7CisJTUNCU1BfV1JJVEUobWNic3AsIFNSR1IyLCBjb25maWctPnNyZ3IyKTsKKwlNQ0JTUF9XUklURShtY2JzcCwgU1JHUjEsIGNvbmZpZy0+c3JncjEpOworCU1DQlNQX1dSSVRFKG1jYnNwLCBNQ1IyLCBjb25maWctPm1jcjIpOworCU1DQlNQX1dSSVRFKG1jYnNwLCBNQ1IxLCBjb25maWctPm1jcjEpOworCU1DQlNQX1dSSVRFKG1jYnNwLCBQQ1IwLCBjb25maWctPnBjcjApOwogCWlmIChjcHVfaXNfb21hcDI0MzAoKSB8fCBjcHVfaXNfb21hcDM0eHgoKSB8fCBjcHVfaXNfb21hcDQ0eHgoKSkgewotCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFhDQ1IsIGNvbmZpZy0+eGNjcik7Ci0JCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgUkNDUiwgY29uZmlnLT5yY2NyKTsKKwkJTUNCU1BfV1JJVEUobWNic3AsIFhDQ1IsIGNvbmZpZy0+eGNjcik7CisJCU1DQlNQX1dSSVRFKG1jYnNwLCBSQ0NSLCBjb25maWctPnJjY3IpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9jb25maWcpOwogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDM0WFgKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMworc3RhdGljIHZvaWQgb21hcF9zdF9vbihzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3ApCit7CisJdW5zaWduZWQgaW50IHc7CisKKwkvKgorCSAqIFNpZGV0b25lIHVzZXMgTWNCU1AgSUNMSyAtIHdoaWNoIG11c3Qgbm90IGlkbGUgd2hlbiBzaWRldG9uZXMKKwkgKiBhcmUgZW5hYmxlZCBvciBzaWRldG9uZXMgc3RhcnQgc291bmRpbmcgdWdseS4KKwkgKi8KKwl3ID0gY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX1BFUl9NT0QsIENNX0FVVE9JRExFKTsKKwl3ICY9IH4oMSA8PCAobWNic3AtPmlkIC0gMikpOworCWNtX3dyaXRlX21vZF9yZWcodywgT01BUDM0MzBfUEVSX01PRCwgQ01fQVVUT0lETEUpOworCisJLyogRW5hYmxlIE1jQlNQIFNpZGV0b25lICovCisJdyA9IE1DQlNQX1JFQUQobWNic3AsIFNTRUxDUik7CisJTUNCU1BfV1JJVEUobWNic3AsIFNTRUxDUiwgdyB8IFNJREVUT05FRU4pOworCisJdyA9IE1DQlNQX1NUX1JFQUQobWNic3AsIFNZU0NPTkZJRyk7CisJTUNCU1BfU1RfV1JJVEUobWNic3AsIFNZU0NPTkZJRywgdyAmIH4oU1RfQVVUT0lETEUpKTsKKworCS8qIEVuYWJsZSBTaWRldG9uZSBmcm9tIFNpZGV0b25lIENvcmUgKi8KKwl3ID0gTUNCU1BfU1RfUkVBRChtY2JzcCwgU1NFTENSKTsKKwlNQ0JTUF9TVF9XUklURShtY2JzcCwgU1NFTENSLCB3IHwgU1RfU0lERVRPTkVFTik7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfc3Rfb2ZmKHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCkKK3sKKwl1bnNpZ25lZCBpbnQgdzsKKworCXcgPSBNQ0JTUF9TVF9SRUFEKG1jYnNwLCBTU0VMQ1IpOworCU1DQlNQX1NUX1dSSVRFKG1jYnNwLCBTU0VMQ1IsIHcgJiB+KFNUX1NJREVUT05FRU4pKTsKKworCXcgPSBNQ0JTUF9TVF9SRUFEKG1jYnNwLCBTWVNDT05GSUcpOworCU1DQlNQX1NUX1dSSVRFKG1jYnNwLCBTWVNDT05GSUcsIHcgfCBTVF9BVVRPSURMRSk7CisKKwl3ID0gTUNCU1BfUkVBRChtY2JzcCwgU1NFTENSKTsKKwlNQ0JTUF9XUklURShtY2JzcCwgU1NFTENSLCB3ICYgfihTSURFVE9ORUVOKSk7CisKKwl3ID0gY21fcmVhZF9tb2RfcmVnKE9NQVAzNDMwX1BFUl9NT0QsIENNX0FVVE9JRExFKTsKKwl3IHw9IDEgPDwgKG1jYnNwLT5pZCAtIDIpOworCWNtX3dyaXRlX21vZF9yZWcodywgT01BUDM0MzBfUEVSX01PRCwgQ01fQVVUT0lETEUpOworfQorCitzdGF0aWMgdm9pZCBvbWFwX3N0X2Zpcl93cml0ZShzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3AsIHMxNiAqZmlyKQoreworCXUxNiB2YWwsIGk7CisKKwl2YWwgPSBNQ0JTUF9TVF9SRUFEKG1jYnNwLCBTWVNDT05GSUcpOworCU1DQlNQX1NUX1dSSVRFKG1jYnNwLCBTWVNDT05GSUcsIHZhbCAmIH4oU1RfQVVUT0lETEUpKTsKKworCXZhbCA9IE1DQlNQX1NUX1JFQUQobWNic3AsIFNTRUxDUik7CisKKwlpZiAodmFsICYgU1RfQ09FRkZXUkVOKQorCQlNQ0JTUF9TVF9XUklURShtY2JzcCwgU1NFTENSLCB2YWwgJiB+KFNUX0NPRUZGV1JFTikpOworCisJTUNCU1BfU1RfV1JJVEUobWNic3AsIFNTRUxDUiwgdmFsIHwgU1RfQ09FRkZXUkVOKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKKwkJTUNCU1BfU1RfV1JJVEUobWNic3AsIFNGSVJDUiwgZmlyW2ldKTsKKworCWkgPSAwOworCisJdmFsID0gTUNCU1BfU1RfUkVBRChtY2JzcCwgU1NFTENSKTsKKwl3aGlsZSAoISh2YWwgJiBTVF9DT0VGRldSRE9ORSkgJiYgKCsraSA8IDEwMDApKQorCQl2YWwgPSBNQ0JTUF9TVF9SRUFEKG1jYnNwLCBTU0VMQ1IpOworCisJTUNCU1BfU1RfV1JJVEUobWNic3AsIFNTRUxDUiwgdmFsICYgfihTVF9DT0VGRldSRU4pKTsKKworCWlmIChpID09IDEwMDApCisJCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQIEZJUiBsb2FkIGVycm9yIVxuIik7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfc3RfY2hnYWluKHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCkKK3sKKwl1MTYgdzsKKwlzdHJ1Y3Qgb21hcF9tY2JzcF9zdF9kYXRhICpzdF9kYXRhID0gbWNic3AtPnN0X2RhdGE7CisKKwl3ID0gTUNCU1BfU1RfUkVBRChtY2JzcCwgU1lTQ09ORklHKTsKKwlNQ0JTUF9TVF9XUklURShtY2JzcCwgU1lTQ09ORklHLCB3ICYgfihTVF9BVVRPSURMRSkpOworCisJdyA9IE1DQlNQX1NUX1JFQUQobWNic3AsIFNTRUxDUik7CisKKwlNQ0JTUF9TVF9XUklURShtY2JzcCwgU0dBSU5DUiwgU1RfQ0gwR0FJTihzdF9kYXRhLT5jaDBnYWluKSB8IFwKKwkJICAgICAgU1RfQ0gxR0FJTihzdF9kYXRhLT5jaDFnYWluKSk7Cit9CisKK2ludCBvbWFwX3N0X3NldF9jaGdhaW4odW5zaWduZWQgaW50IGlkLCBpbnQgY2hhbm5lbCwgczE2IGNoZ2FpbikKK3sKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CisJc3RydWN0IG9tYXBfbWNic3Bfc3RfZGF0YSAqc3RfZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBpZCAoJWQpXG4iLCBfX2Z1bmNfXywgaWQgKyAxKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOworCXN0X2RhdGEgPSBtY2JzcC0+c3RfZGF0YTsKKworCWlmICghc3RfZGF0YSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlzcGluX2xvY2tfaXJxKCZtY2JzcC0+bG9jayk7CisJaWYgKGNoYW5uZWwgPT0gMCkKKwkJc3RfZGF0YS0+Y2gwZ2FpbiA9IGNoZ2FpbjsKKwllbHNlIGlmIChjaGFubmVsID09IDEpCisJCXN0X2RhdGEtPmNoMWdhaW4gPSBjaGdhaW47CisJZWxzZQorCQlyZXQgPSAtRUlOVkFMOworCisJaWYgKHN0X2RhdGEtPmVuYWJsZWQpCisJCW9tYXBfc3RfY2hnYWluKG1jYnNwKTsKKwlzcGluX3VubG9ja19pcnEoJm1jYnNwLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfc3Rfc2V0X2NoZ2Fpbik7CisKK2ludCBvbWFwX3N0X2dldF9jaGdhaW4odW5zaWduZWQgaW50IGlkLCBpbnQgY2hhbm5lbCwgczE2ICpjaGdhaW4pCit7CisJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOworCXN0cnVjdCBvbWFwX21jYnNwX3N0X2RhdGEgKnN0X2RhdGE7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKKwlzdF9kYXRhID0gbWNic3AtPnN0X2RhdGE7CisKKwlpZiAoIXN0X2RhdGEpCisJCXJldHVybiAtRU5PRU5UOworCisJc3Bpbl9sb2NrX2lycSgmbWNic3AtPmxvY2spOworCWlmIChjaGFubmVsID09IDApCisJCSpjaGdhaW4gPSBzdF9kYXRhLT5jaDBnYWluOworCWVsc2UgaWYgKGNoYW5uZWwgPT0gMSkKKwkJKmNoZ2FpbiA9IHN0X2RhdGEtPmNoMWdhaW47CisJZWxzZQorCQlyZXQgPSAtRUlOVkFMOworCXNwaW5fdW5sb2NrX2lycSgmbWNic3AtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9zdF9nZXRfY2hnYWluKTsKKworc3RhdGljIGludCBvbWFwX3N0X3N0YXJ0KHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCkKK3sKKwlzdHJ1Y3Qgb21hcF9tY2JzcF9zdF9kYXRhICpzdF9kYXRhID0gbWNic3AtPnN0X2RhdGE7CisKKwlpZiAoc3RfZGF0YSAmJiBzdF9kYXRhLT5lbmFibGVkICYmICFzdF9kYXRhLT5ydW5uaW5nKSB7CisJCW9tYXBfc3RfZmlyX3dyaXRlKG1jYnNwLCBzdF9kYXRhLT50YXBzKTsKKwkJb21hcF9zdF9jaGdhaW4obWNic3ApOworCisJCWlmICghbWNic3AtPmZyZWUpIHsKKwkJCW9tYXBfc3Rfb24obWNic3ApOworCQkJc3RfZGF0YS0+cnVubmluZyA9IDE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IG9tYXBfc3RfZW5hYmxlKHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CisJc3RydWN0IG9tYXBfbWNic3Bfc3RfZGF0YSAqc3RfZGF0YTsKKworCWlmICghb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBpZCAoJWQpXG4iLCBfX2Z1bmNfXywgaWQgKyAxKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOworCXN0X2RhdGEgPSBtY2JzcC0+c3RfZGF0YTsKKworCWlmICghc3RfZGF0YSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2tfaXJxKCZtY2JzcC0+bG9jayk7CisJc3RfZGF0YS0+ZW5hYmxlZCA9IDE7CisJb21hcF9zdF9zdGFydChtY2JzcCk7CisJc3Bpbl91bmxvY2tfaXJxKCZtY2JzcC0+bG9jayk7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wob21hcF9zdF9lbmFibGUpOworCitzdGF0aWMgaW50IG9tYXBfc3Rfc3RvcChzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3ApCit7CisJc3RydWN0IG9tYXBfbWNic3Bfc3RfZGF0YSAqc3RfZGF0YSA9IG1jYnNwLT5zdF9kYXRhOworCisJaWYgKHN0X2RhdGEgJiYgc3RfZGF0YS0+cnVubmluZykgeworCQlpZiAoIW1jYnNwLT5mcmVlKSB7CisJCQlvbWFwX3N0X29mZihtY2JzcCk7CisJCQlzdF9kYXRhLT5ydW5uaW5nID0gMDsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitpbnQgb21hcF9zdF9kaXNhYmxlKHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7CisJc3RydWN0IG9tYXBfbWNic3Bfc3RfZGF0YSAqc3RfZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBpZCAoJWQpXG4iLCBfX2Z1bmNfXywgaWQgKyAxKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOworCXN0X2RhdGEgPSBtY2JzcC0+c3RfZGF0YTsKKworCWlmICghc3RfZGF0YSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzcGluX2xvY2tfaXJxKCZtY2JzcC0+bG9jayk7CisJb21hcF9zdF9zdG9wKG1jYnNwKTsKKwlzdF9kYXRhLT5lbmFibGVkID0gMDsKKwlzcGluX3VubG9ja19pcnEoJm1jYnNwLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfc3RfZGlzYWJsZSk7CisKK2ludCBvbWFwX3N0X2lzX2VuYWJsZWQodW5zaWduZWQgaW50IGlkKQoreworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwlzdHJ1Y3Qgb21hcF9tY2JzcF9zdF9kYXRhICpzdF9kYXRhOworCisJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGlkICglZClcbiIsIF9fZnVuY19fLCBpZCArIDEpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CisJc3RfZGF0YSA9IG1jYnNwLT5zdF9kYXRhOworCisJaWYgKCFzdF9kYXRhKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCisJcmV0dXJuIHN0X2RhdGEtPmVuYWJsZWQ7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfc3RfaXNfZW5hYmxlZCk7CisKIC8qCiAgKiBvbWFwX21jYnNwX3NldF90eF90aHJlc2hvbGQgY29uZmlndXJlcyBob3cgdG8gZGVhbAogICogd2l0aCB0cmFuc21pdCB0aHJlc2hvbGQuIHRoZSB0aHJlc2hvbGQgdmFsdWUgYW5kIGhhbmRsZXIgY2FuIGJlCkBAIC0yMDcsNyArNDg5LDYgQEAKIHZvaWQgb21hcF9tY2JzcF9zZXRfdHhfdGhyZXNob2xkKHVuc2lnbmVkIGludCBpZCwgdTE2IHRocmVzaG9sZCkKIHsKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7Ci0Jdm9pZCBfX2lvbWVtICppb19iYXNlOwogCiAJaWYgKCFjcHVfaXNfb21hcDM0eHgoKSkKIAkJcmV0dXJuOwpAQCAtMjE3LDkgKzQ5OCw4IEBACiAJCXJldHVybjsKIAl9CiAJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOwotCWlvX2Jhc2UgPSBtY2JzcC0+aW9fYmFzZTsKIAotCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgVEhSU0gyLCB0aHJlc2hvbGQpOworCU1DQlNQX1dSSVRFKG1jYnNwLCBUSFJTSDIsIHRocmVzaG9sZCk7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3Bfc2V0X3R4X3RocmVzaG9sZCk7CiAKQEAgLTIzMSw3ICs1MTEsNiBAQAogdm9pZCBvbWFwX21jYnNwX3NldF9yeF90aHJlc2hvbGQodW5zaWduZWQgaW50IGlkLCB1MTYgdGhyZXNob2xkKQogewogCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKLQl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAKIAlpZiAoIWNwdV9pc19vbWFwMzR4eCgpKQogCQlyZXR1cm47CkBAIC0yNDEsOSArNTIwLDggQEAKIAkJcmV0dXJuOwogCX0KIAltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7Ci0JaW9fYmFzZSA9IG1jYnNwLT5pb19iYXNlOwogCi0JT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBUSFJTSDEsIHRocmVzaG9sZCk7CisJTUNCU1BfV1JJVEUobWNic3AsIFRIUlNIMSwgdGhyZXNob2xkKTsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9tY2JzcF9zZXRfcnhfdGhyZXNob2xkKTsKIApAQCAtMzEzLDE5ICs1OTEsMTggQEAKIAlpZiAoY3B1X2lzX29tYXAzNHh4KCkpIHsKIAkJdTE2IHN5c2NvbjsKIAotCQlzeXNjb24gPSBPTUFQX01DQlNQX1JFQUQobWNic3AtPmlvX2Jhc2UsIFNZU0NPTik7CisJCXN5c2NvbiA9IE1DQlNQX1JFQUQobWNic3AsIFNZU0NPTik7CiAJCXN5c2NvbiAmPSB+KEVOQVdBS0VVUCB8IFNJRExFTU9ERSgweDAzKSB8IENMT0NLQUNUSVZJVFkoMHgwMykpOwogCiAJCWlmIChtY2JzcC0+ZG1hX29wX21vZGUgPT0gTUNCU1BfRE1BX01PREVfVEhSRVNIT0xEKSB7CiAJCQlzeXNjb24gfD0gKEVOQVdBS0VVUCB8IFNJRExFTU9ERSgweDAyKSB8CiAJCQkJCUNMT0NLQUNUSVZJVFkoMHgwMikpOwotCQkJT01BUF9NQ0JTUF9XUklURShtY2JzcC0+aW9fYmFzZSwgV0FLRVVQRU4sCi0JCQkJCVhSRFlFTiB8IFJSRFlFTik7CisJCQlNQ0JTUF9XUklURShtY2JzcCwgV0FLRVVQRU4sIFhSRFlFTiB8IFJSRFlFTik7CiAJCX0gZWxzZSB7CiAJCQlzeXNjb24gfD0gU0lETEVNT0RFKDB4MDEpOwogCQl9CiAKLQkJT01BUF9NQ0JTUF9XUklURShtY2JzcC0+aW9fYmFzZSwgU1lTQ09OLCBzeXNjb24pOworCQlNQ0JTUF9XUklURShtY2JzcCwgU1lTQ09OLCBzeXNjb24pOwogCX0KIH0KIApAQCAtMzM3LDcgKzYxNCw3IEBACiAJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CiAJCXUxNiBzeXNjb247CiAKLQkJc3lzY29uID0gT01BUF9NQ0JTUF9SRUFEKG1jYnNwLT5pb19iYXNlLCBTWVNDT04pOworCQlzeXNjb24gPSBNQ0JTUF9SRUFEKG1jYnNwLCBTWVNDT04pOwogCQlzeXNjb24gJj0gfihFTkFXQUtFVVAgfCBTSURMRU1PREUoMHgwMykgfCBDTE9DS0FDVElWSVRZKDB4MDMpKTsKIAkJLyoKIAkJICogSFcgYnVnIHdvcmthcm91bmQgLSBJZiBub19pZGxlIG1vZGUgaXMgdGFrZW4sIHdlIG5lZWQgdG8KQEAgLTM0NSwxNyArNjIyLDE5IEBACiAJCSAqIGRldmljZSB3aWxsIG5vdCBoaXQgcmV0ZW50aW9uIGFueW1vcmUuCiAJCSAqLwogCQlzeXNjb24gfD0gU0lETEVNT0RFKDB4MDIpOwotCQlPTUFQX01DQlNQX1dSSVRFKG1jYnNwLT5pb19iYXNlLCBTWVNDT04sIHN5c2Nvbik7CisJCU1DQlNQX1dSSVRFKG1jYnNwLCBTWVNDT04sIHN5c2Nvbik7CiAKIAkJc3lzY29uICY9IH4oU0lETEVNT0RFKDB4MDMpKTsKLQkJT01BUF9NQ0JTUF9XUklURShtY2JzcC0+aW9fYmFzZSwgU1lTQ09OLCBzeXNjb24pOworCQlNQ0JTUF9XUklURShtY2JzcCwgU1lTQ09OLCBzeXNjb24pOwogCi0JCU9NQVBfTUNCU1BfV1JJVEUobWNic3AtPmlvX2Jhc2UsIFdBS0VVUEVOLCAwKTsKKwkJTUNCU1BfV1JJVEUobWNic3AsIFdBS0VVUEVOLCAwKTsKIAl9CiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIG9tYXAzNHh4X21jYnNwX3JlcXVlc3Qoc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwKSB7fQogc3RhdGljIGlubGluZSB2b2lkIG9tYXAzNHh4X21jYnNwX2ZyZWUoc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwKSB7fQorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfc3Rfc3RhcnQoc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwKSB7fQorc3RhdGljIGlubGluZSB2b2lkIG9tYXBfc3Rfc3RvcChzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3ApIHt9CiAjZW5kaWYKIAogLyoKQEAgLTM5Miw2ICs2NzEsNyBAQAogaW50IG9tYXBfbWNic3BfcmVxdWVzdCh1bnNpZ25lZCBpbnQgaWQpCiB7CiAJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOworCXZvaWQgKnJlZ19jYWNoZTsKIAlpbnQgZXJyOwogCiAJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgewpAQCAtNDAwLDE1ICs2ODAsMjEgQEAKIAl9CiAJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOwogCisJcmVnX2NhY2hlID0ga3phbGxvYyhvbWFwX21jYnNwX2NhY2hlX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghcmVnX2NhY2hlKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwogCXNwaW5fbG9jaygmbWNic3AtPmxvY2spOwogCWlmICghbWNic3AtPmZyZWUpIHsKIAkJZGV2X2VycihtY2JzcC0+ZGV2LCAiTWNCU1AlZCBpcyBjdXJyZW50bHkgaW4gdXNlXG4iLAogCQkJbWNic3AtPmlkKTsKLQkJc3Bpbl91bmxvY2soJm1jYnNwLT5sb2NrKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJZXJyID0gLUVCVVNZOworCQlnb3RvIGVycl9rZnJlZTsKIAl9CiAKIAltY2JzcC0+ZnJlZSA9IDA7CisJbWNic3AtPnJlZ19jYWNoZSA9IHJlZ19jYWNoZTsKIAlzcGluX3VubG9jaygmbWNic3AtPmxvY2spOwogCiAJaWYgKG1jYnNwLT5wZGF0YSAmJiBtY2JzcC0+cGRhdGEtPm9wcyAmJiBtY2JzcC0+cGRhdGEtPm9wcy0+cmVxdWVzdCkKQEAgLTQyNCw4ICs3MTAsOCBAQAogCSAqIE1ha2Ugc3VyZSB0aGF0IHRyYW5zbWl0dGVyLCByZWNlaXZlciBhbmQgc2FtcGxlLXJhdGUgZ2VuZXJhdG9yIGFyZQogCSAqIG5vdCBydW5uaW5nIGJlZm9yZSBhY3RpdmF0aW5nIElSUXMuCiAJICovCi0JT01BUF9NQ0JTUF9XUklURShtY2JzcC0+aW9fYmFzZSwgU1BDUjEsIDApOwotCU9NQVBfTUNCU1BfV1JJVEUobWNic3AtPmlvX2Jhc2UsIFNQQ1IyLCAwKTsKKwlNQ0JTUF9XUklURShtY2JzcCwgU1BDUjEsIDApOworCU1DQlNQX1dSSVRFKG1jYnNwLCBTUENSMiwgMCk7CiAKIAlpZiAobWNic3AtPmlvX3R5cGUgPT0gT01BUF9NQ0JTUF9JUlFfSU8pIHsKIAkJLyogV2UgbmVlZCB0byBnZXQgSVJRcyBoZXJlICovCkBAIC00MzYsNyArNzIyLDcgQEAKIAkJCWRldl9lcnIobWNic3AtPmRldiwgIlVuYWJsZSB0byByZXF1ZXN0IFRYIElSUSAlZCAiCiAJCQkJCSJmb3IgTWNCU1AlZFxuIiwgbWNic3AtPnR4X2lycSwKIAkJCQkJbWNic3AtPmlkKTsKLQkJCWdvdG8gZXJyb3I7CisJCQlnb3RvIGVycl9jbGtfZGlzYWJsZTsKIAkJfQogCiAJCWluaXRfY29tcGxldGlvbigmbWNic3AtPnJ4X2lycV9jb21wbGV0aW9uKTsKQEAgLTQ0NiwxNiArNzMyLDE2IEBACiAJCQlkZXZfZXJyKG1jYnNwLT5kZXYsICJVbmFibGUgdG8gcmVxdWVzdCBSWCBJUlEgJWQgIgogCQkJCQkiZm9yIE1jQlNQJWRcbiIsIG1jYnNwLT5yeF9pcnEsCiAJCQkJCW1jYnNwLT5pZCk7Ci0JCQlnb3RvIHR4X2lycTsKKwkJCWdvdG8gZXJyX2ZyZWVfaXJxOwogCQl9CiAJfQogCiAJcmV0dXJuIDA7Ci10eF9pcnE6CitlcnJfZnJlZV9pcnE6CiAJZnJlZV9pcnEobWNic3AtPnR4X2lycSwgKHZvaWQgKiltY2JzcCk7Ci1lcnJvcjoKK2Vycl9jbGtfZGlzYWJsZToKIAlpZiAobWNic3AtPnBkYXRhICYmIG1jYnNwLT5wZGF0YS0+b3BzICYmIG1jYnNwLT5wZGF0YS0+b3BzLT5mcmVlKQotCQkJbWNic3AtPnBkYXRhLT5vcHMtPmZyZWUoaWQpOworCQltY2JzcC0+cGRhdGEtPm9wcy0+ZnJlZShpZCk7CiAKIAkvKiBEbyBwcm9jZWR1cmUgc3BlY2lmaWMgdG8gb21hcDM0eHggYXJjaCwgaWYgYXBwbGljYWJsZSAqLwogCW9tYXAzNHh4X21jYnNwX2ZyZWUobWNic3ApOwpAQCAtNDYzLDcgKzc0OSwxMiBAQAogCWNsa19kaXNhYmxlKG1jYnNwLT5mY2xrKTsKIAljbGtfZGlzYWJsZShtY2JzcC0+aWNsayk7CiAKKwlzcGluX2xvY2soJm1jYnNwLT5sb2NrKTsKIAltY2JzcC0+ZnJlZSA9IDE7CisJbWNic3AtPnJlZ19jYWNoZSA9IE5VTEw7CitlcnJfa2ZyZWU6CisJc3Bpbl91bmxvY2soJm1jYnNwLT5sb2NrKTsKKwlrZnJlZShyZWdfY2FjaGUpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTQ3Miw2ICs3NjMsNyBAQAogdm9pZCBvbWFwX21jYnNwX2ZyZWUodW5zaWduZWQgaW50IGlkKQogewogCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKKwl2b2lkICpyZWdfY2FjaGU7CiAKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludmFsaWQgaWQgKCVkKVxuIiwgX19mdW5jX18sIGlkICsgMSk7CkBAIC00OTQsMTYgKzc4NiwxOCBAQAogCQlmcmVlX2lycShtY2JzcC0+dHhfaXJxLCAodm9pZCAqKW1jYnNwKTsKIAl9CiAKLQlzcGluX2xvY2soJm1jYnNwLT5sb2NrKTsKLQlpZiAobWNic3AtPmZyZWUpIHsKLQkJZGV2X2VycihtY2JzcC0+ZGV2LCAiTWNCU1AlZCB3YXMgbm90IHJlc2VydmVkXG4iLAotCQkJbWNic3AtPmlkKTsKLQkJc3Bpbl91bmxvY2soJm1jYnNwLT5sb2NrKTsKLQkJcmV0dXJuOwotCX0KKwlyZWdfY2FjaGUgPSBtY2JzcC0+cmVnX2NhY2hlOwogCi0JbWNic3AtPmZyZWUgPSAxOworCXNwaW5fbG9jaygmbWNic3AtPmxvY2spOworCWlmIChtY2JzcC0+ZnJlZSkKKwkJZGV2X2VycihtY2JzcC0+ZGV2LCAiTWNCU1AlZCB3YXMgbm90IHJlc2VydmVkXG4iLCBtY2JzcC0+aWQpOworCWVsc2UKKwkJbWNic3AtPmZyZWUgPSAxOworCW1jYnNwLT5yZWdfY2FjaGUgPSBOVUxMOwogCXNwaW5fdW5sb2NrKCZtY2JzcC0+bG9jayk7CisKKwlpZiAocmVnX2NhY2hlKQorCQlrZnJlZShyZWdfY2FjaGUpOwogfQogRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX2ZyZWUpOwogCkBAIC01MTUsNyArODA5LDYgQEAKIHZvaWQgb21hcF9tY2JzcF9zdGFydCh1bnNpZ25lZCBpbnQgaWQsIGludCB0eCwgaW50IHJ4KQogewogCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKLQl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAJaW50IGlkbGU7CiAJdTE2IHc7CiAKQEAgLTUyNCwyOCArODE3LDMwIEBACiAJCXJldHVybjsKIAl9CiAJbWNic3AgPSBpZF90b19tY2JzcF9wdHIoaWQpOwotCWlvX2Jhc2UgPSBtY2JzcC0+aW9fYmFzZTsKIAotCW1jYnNwLT5yeF93b3JkX2xlbmd0aCA9IChPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgUkNSMSkgPj4gNSkgJiAweDc7Ci0JbWNic3AtPnR4X3dvcmRfbGVuZ3RoID0gKE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBYQ1IxKSA+PiA1KSAmIDB4NzsKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCW9tYXBfc3Rfc3RhcnQobWNic3ApOwogCi0JaWRsZSA9ICEoKE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMikgfAotCQkgIE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMSkpICYgMSk7CisJbWNic3AtPnJ4X3dvcmRfbGVuZ3RoID0gKE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFJDUjEpID4+IDUpICYgMHg3OworCW1jYnNwLT50eF93b3JkX2xlbmd0aCA9IChNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCBYQ1IxKSA+PiA1KSAmIDB4NzsKKworCWlkbGUgPSAhKChNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCBTUENSMikgfAorCQkJTUNCU1BfUkVBRF9DQUNIRShtY2JzcCwgU1BDUjEpKSAmIDEpOwogCiAJaWYgKGlkbGUpIHsKIAkJLyogU3RhcnQgdGhlIHNhbXBsZSBnZW5lcmF0b3IgKi8KLQkJdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMik7Ci0JCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHcgfCAoMSA8PCA2KSk7CisJCXcgPSBNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCBTUENSMik7CisJCU1DQlNQX1dSSVRFKG1jYnNwLCBTUENSMiwgdyB8ICgxIDw8IDYpKTsKIAl9CiAKIAkvKiBFbmFibGUgdHJhbnNtaXR0ZXIgYW5kIHJlY2VpdmVyICovCiAJdHggJj0gMTsKLQl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IyKTsKLQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IyLCB3IHwgdHgpOworCXcgPSBNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCBTUENSMik7CisJTUNCU1BfV1JJVEUobWNic3AsIFNQQ1IyLCB3IHwgdHgpOwogCiAJcnggJj0gMTsKLQl3ID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IxKTsKLQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IxLCB3IHwgcngpOworCXcgPSBNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCBTUENSMSk7CisJTUNCU1BfV1JJVEUobWNic3AsIFNQQ1IxLCB3IHwgcngpOwogCiAJLyoKIAkgKiBXb3JzdCBjYXNlOiBDTEtTUkcqMiA9IDgwMDBraHo6ICgxLzgwMDApICogMiAqIDIgdXNlYwpAQCAtNTU3LDE4ICs4NTIsMTggQEAKIAogCWlmIChpZGxlKSB7CiAJCS8qIFN0YXJ0IGZyYW1lIHN5bmMgKi8KLQkJdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMik7Ci0JCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHcgfCAoMSA8PCA3KSk7CisJCXcgPSBNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCBTUENSMik7CisJCU1DQlNQX1dSSVRFKG1jYnNwLCBTUENSMiwgdyB8ICgxIDw8IDcpKTsKIAl9CiAKIAlpZiAoY3B1X2lzX29tYXAyNDMwKCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpIHsKIAkJLyogUmVsZWFzZSB0aGUgdHJhbnNtaXR0ZXIgYW5kIHJlY2VpdmVyICovCi0JCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgWENDUik7CisJCXcgPSBNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCBYQ0NSKTsKIAkJdyAmPSB+KHR4ID8gWERJU0FCTEUgOiAwKTsKLQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBYQ0NSLCB3KTsKLQkJdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBSQ0NSKTsKKwkJTUNCU1BfV1JJVEUobWNic3AsIFhDQ1IsIHcpOworCQl3ID0gTUNCU1BfUkVBRF9DQUNIRShtY2JzcCwgUkNDUik7CiAJCXcgJj0gfihyeCA/IFJESVNBQkxFIDogMCk7Ci0JCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgUkNDUiwgdyk7CisJCU1DQlNQX1dSSVRFKG1jYnNwLCBSQ0NSLCB3KTsKIAl9CiAKIAkvKiBEdW1wIE1jQlNQIFJlZ3MgKi8KQEAgLTU3OSw3ICs4NzQsNiBAQAogdm9pZCBvbWFwX21jYnNwX3N0b3AodW5zaWduZWQgaW50IGlkLCBpbnQgdHgsIGludCByeCkKIHsKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7Ci0Jdm9pZCBfX2lvbWVtICppb19iYXNlOwogCWludCBpZGxlOwogCXUxNiB3OwogCkBAIC01ODksMzYgKzg4MywzOCBAQAogCX0KIAogCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKLQlpb19iYXNlID0gbWNic3AtPmlvX2Jhc2U7CiAKIAkvKiBSZXNldCB0cmFuc21pdHRlciAqLwogCXR4ICY9IDE7CiAJaWYgKGNwdV9pc19vbWFwMjQzMCgpIHx8IGNwdV9pc19vbWFwMzR4eCgpKSB7Ci0JCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgWENDUik7CisJCXcgPSBNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCBYQ0NSKTsKIAkJdyB8PSAodHggPyBYRElTQUJMRSA6IDApOwotCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFhDQ1IsIHcpOworCQlNQ0JTUF9XUklURShtY2JzcCwgWENDUiwgdyk7CiAJfQotCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjIpOwotCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHcgJiB+dHgpOworCXcgPSBNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCBTUENSMik7CisJTUNCU1BfV1JJVEUobWNic3AsIFNQQ1IyLCB3ICYgfnR4KTsKIAogCS8qIFJlc2V0IHJlY2VpdmVyICovCiAJcnggJj0gMTsKIAlpZiAoY3B1X2lzX29tYXAyNDMwKCkgfHwgY3B1X2lzX29tYXAzNHh4KCkpIHsKLQkJdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBSQ0NSKTsKKwkJdyA9IE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFJDQ1IpOwogCQl3IHw9IChyeCA/IFJESVNBQkxFIDogMCk7Ci0JCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgUkNDUiwgdyk7CisJCU1DQlNQX1dSSVRFKG1jYnNwLCBSQ0NSLCB3KTsKIAl9Ci0JdyA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMSk7Ci0JT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMSwgdyAmIH5yeCk7CisJdyA9IE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IxKTsKKwlNQ0JTUF9XUklURShtY2JzcCwgU1BDUjEsIHcgJiB+cngpOwogCi0JaWRsZSA9ICEoKE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMikgfAotCQkgIE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMSkpICYgMSk7CisJaWRsZSA9ICEoKE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IyKSB8CisJCQlNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCBTUENSMSkpICYgMSk7CiAKIAlpZiAoaWRsZSkgewogCQkvKiBSZXNldCB0aGUgc2FtcGxlIHJhdGUgZ2VuZXJhdG9yICovCi0JCXcgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjIpOwotCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IyLCB3ICYgfigxIDw8IDYpKTsKKwkJdyA9IE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IyKTsKKwkJTUNCU1BfV1JJVEUobWNic3AsIFNQQ1IyLCB3ICYgfigxIDw8IDYpKTsKIAl9CisKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCW9tYXBfc3Rfc3RvcChtY2JzcCk7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3Bfc3RvcCk7CiAKQEAgLTYyNiw3ICs5MjIsNiBAQAogaW50IG9tYXBfbWNic3BfcG9sbHdyaXRlKHVuc2lnbmVkIGludCBpZCwgdTE2IGJ1ZikKIHsKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlOwogCiAJaWYgKCFvbWFwX21jYnNwX2NoZWNrX3ZhbGlkX2lkKGlkKSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbnZhbGlkIGlkICglZClcbiIsIF9fZnVuY19fLCBpZCArIDEpOwpAQCAtNjM0LDI4ICs5MjksMjcgQEAKIAl9CiAKIAltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7Ci0JYmFzZSA9IG1jYnNwLT5pb19iYXNlOwogCi0Jd3JpdGV3KGJ1ZiwgYmFzZSArIE9NQVBfTUNCU1BfUkVHX0RYUjEpOworCU1DQlNQX1dSSVRFKG1jYnNwLCBEWFIxLCBidWYpOwogCS8qIGlmIGZyYW1lIHN5bmMgZXJyb3IgLSBjbGVhciB0aGUgZXJyb3IgKi8KLQlpZiAocmVhZHcoYmFzZSArIE9NQVBfTUNCU1BfUkVHX1NQQ1IyKSAmIFhTWU5DX0VSUikgeworCWlmIChNQ0JTUF9SRUFEKG1jYnNwLCBTUENSMikgJiBYU1lOQ19FUlIpIHsKIAkJLyogY2xlYXIgZXJyb3IgKi8KLQkJd3JpdGV3KHJlYWR3KGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMikgJiAoflhTWU5DX0VSUiksCi0JCSAgICAgICBiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjIpOworCQlNQ0JTUF9XUklURShtY2JzcCwgU1BDUjIsCisJCQkJTUNCU1BfUkVBRF9DQUNIRShtY2JzcCwgU1BDUjIpICYgKH5YU1lOQ19FUlIpKTsKIAkJLyogcmVzZW5kICovCiAJCXJldHVybiAtMTsKIAl9IGVsc2UgewogCQkvKiB3YWl0IGZvciB0cmFuc21pdCBjb25maXJtYXRpb24gKi8KIAkJaW50IGF0dGVtcHMgPSAwOwotCQl3aGlsZSAoIShyZWFkdyhiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjIpICYgWFJEWSkpIHsKKwkJd2hpbGUgKCEoTUNCU1BfUkVBRChtY2JzcCwgU1BDUjIpICYgWFJEWSkpIHsKIAkJCWlmIChhdHRlbXBzKysgPiAxMDAwKSB7Ci0JCQkJd3JpdGV3KHJlYWR3KGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMikgJgotCQkJCSAgICAgICAoflhSU1QpLAotCQkJCSAgICAgICBiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjIpOworCQkJCU1DQlNQX1dSSVRFKG1jYnNwLCBTUENSMiwKKwkJCQkJCU1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IyKSAmCisJCQkJCQkoflhSU1QpKTsKIAkJCQl1ZGVsYXkoMTApOwotCQkJCXdyaXRldyhyZWFkdyhiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjIpIHwKLQkJCQkgICAgICAgKFhSU1QpLAotCQkJCSAgICAgICBiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjIpOworCQkJCU1DQlNQX1dSSVRFKG1jYnNwLCBTUENSMiwKKwkJCQkJCU1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IyKSB8CisJCQkJCQkoWFJTVCkpOwogCQkJCXVkZWxheSgxMCk7CiAJCQkJZGV2X2VycihtY2JzcC0+ZGV2LCAiQ291bGQgbm90IHdyaXRlIHRvIgogCQkJCQkiIE1jQlNQJWQgUmVnaXN0ZXJcbiIsIG1jYnNwLT5pZCk7CkBAIC02NzEsNyArOTY1LDYgQEAKIGludCBvbWFwX21jYnNwX3BvbGxyZWFkKHVuc2lnbmVkIGludCBpZCwgdTE2ICpidWYpCiB7CiAJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOwotCXZvaWQgX19pb21lbSAqYmFzZTsKIAogCWlmICghb21hcF9tY2JzcF9jaGVja192YWxpZF9pZChpZCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBpZCAoJWQpXG4iLCBfX2Z1bmNfXywgaWQgKyAxKTsKQEAgLTY3OSwyNiArOTcyLDI1IEBACiAJfQogCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKIAotCWJhc2UgPSBtY2JzcC0+aW9fYmFzZTsKIAkvKiBpZiBmcmFtZSBzeW5jIGVycm9yIC0gY2xlYXIgdGhlIGVycm9yICovCi0JaWYgKHJlYWR3KGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMSkgJiBSU1lOQ19FUlIpIHsKKwlpZiAoTUNCU1BfUkVBRChtY2JzcCwgU1BDUjEpICYgUlNZTkNfRVJSKSB7CiAJCS8qIGNsZWFyIGVycm9yICovCi0JCXdyaXRldyhyZWFkdyhiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjEpICYgKH5SU1lOQ19FUlIpLAotCQkgICAgICAgYmFzZSArIE9NQVBfTUNCU1BfUkVHX1NQQ1IxKTsKKwkJTUNCU1BfV1JJVEUobWNic3AsIFNQQ1IxLAorCQkJCU1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IxKSAmICh+UlNZTkNfRVJSKSk7CiAJCS8qIHJlc2VuZCAqLwogCQlyZXR1cm4gLTE7CiAJfSBlbHNlIHsKIAkJLyogd2FpdCBmb3IgcmVjaWV2ZSBjb25maXJtYXRpb24gKi8KIAkJaW50IGF0dGVtcHMgPSAwOwotCQl3aGlsZSAoIShyZWFkdyhiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjEpICYgUlJEWSkpIHsKKwkJd2hpbGUgKCEoTUNCU1BfUkVBRChtY2JzcCwgU1BDUjEpICYgUlJEWSkpIHsKIAkJCWlmIChhdHRlbXBzKysgPiAxMDAwKSB7Ci0JCQkJd3JpdGV3KHJlYWR3KGJhc2UgKyBPTUFQX01DQlNQX1JFR19TUENSMSkgJgotCQkJCSAgICAgICAoflJSU1QpLAotCQkJCSAgICAgICBiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjEpOworCQkJCU1DQlNQX1dSSVRFKG1jYnNwLCBTUENSMSwKKwkJCQkJCU1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IxKSAmCisJCQkJCQkoflJSU1QpKTsKIAkJCQl1ZGVsYXkoMTApOwotCQkJCXdyaXRldyhyZWFkdyhiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjEpIHwKLQkJCQkgICAgICAgKFJSU1QpLAotCQkJCSAgICAgICBiYXNlICsgT01BUF9NQ0JTUF9SRUdfU1BDUjEpOworCQkJCU1DQlNQX1dSSVRFKG1jYnNwLCBTUENSMSwKKwkJCQkJCU1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IxKSB8CisJCQkJCQkoUlJTVCkpOwogCQkJCXVkZWxheSgxMCk7CiAJCQkJZGV2X2VycihtY2JzcC0+ZGV2LCAiQ291bGQgbm90IHJlYWQgZnJvbSIKIAkJCQkJIiBNY0JTUCVkIFJlZ2lzdGVyXG4iLCBtY2JzcC0+aWQpOwpAQCAtNzA2LDcgKzk5OCw3IEBACiAJCQl9CiAJCX0KIAl9Ci0JKmJ1ZiA9IHJlYWR3KGJhc2UgKyBPTUFQX01DQlNQX1JFR19EUlIxKTsKKwkqYnVmID0gTUNCU1BfUkVBRChtY2JzcCwgRFJSMSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTcxOCw3ICsxMDEwLDYgQEAKIHZvaWQgb21hcF9tY2JzcF94bWl0X3dvcmQodW5zaWduZWQgaW50IGlkLCB1MzIgd29yZCkKIHsKIAlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3A7Ci0Jdm9pZCBfX2lvbWVtICppb19iYXNlOwogCW9tYXBfbWNic3Bfd29yZF9sZW5ndGggd29yZF9sZW5ndGg7CiAKIAlpZiAoIW9tYXBfbWNic3BfY2hlY2tfdmFsaWRfaWQoaWQpKSB7CkBAIC03MjcsMjEgKzEwMTgsMTkgQEAKIAl9CiAKIAltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7Ci0JaW9fYmFzZSA9IG1jYnNwLT5pb19iYXNlOwogCXdvcmRfbGVuZ3RoID0gbWNic3AtPnR4X3dvcmRfbGVuZ3RoOwogCiAJd2FpdF9mb3JfY29tcGxldGlvbigmbWNic3AtPnR4X2lycV9jb21wbGV0aW9uKTsKIAogCWlmICh3b3JkX2xlbmd0aCA+IE9NQVBfTUNCU1BfV09SRF8xNikKLQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBEWFIyLCB3b3JkID4+IDE2KTsKLQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIERYUjEsIHdvcmQgJiAweGZmZmYpOworCQlNQ0JTUF9XUklURShtY2JzcCwgRFhSMiwgd29yZCA+PiAxNik7CisJTUNCU1BfV1JJVEUobWNic3AsIERYUjEsIHdvcmQgJiAweGZmZmYpOwogfQogRVhQT1JUX1NZTUJPTChvbWFwX21jYnNwX3htaXRfd29yZCk7CiAKIHUzMiBvbWFwX21jYnNwX3JlY3Zfd29yZCh1bnNpZ25lZCBpbnQgaWQpCiB7CiAJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOwotCXZvaWQgX19pb21lbSAqaW9fYmFzZTsKIAl1MTYgd29yZF9sc2IsIHdvcmRfbXNiID0gMDsKIAlvbWFwX21jYnNwX3dvcmRfbGVuZ3RoIHdvcmRfbGVuZ3RoOwogCkBAIC03NTIsMTMgKzEwNDEsMTIgQEAKIAltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7CiAKIAl3b3JkX2xlbmd0aCA9IG1jYnNwLT5yeF93b3JkX2xlbmd0aDsKLQlpb19iYXNlID0gbWNic3AtPmlvX2Jhc2U7CiAKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZtY2JzcC0+cnhfaXJxX2NvbXBsZXRpb24pOwogCiAJaWYgKHdvcmRfbGVuZ3RoID4gT01BUF9NQ0JTUF9XT1JEXzE2KQotCQl3b3JkX21zYiA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBEUlIyKTsKLQl3b3JkX2xzYiA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBEUlIxKTsKKwkJd29yZF9tc2IgPSBNQ0JTUF9SRUFEKG1jYnNwLCBEUlIyKTsKKwl3b3JkX2xzYiA9IE1DQlNQX1JFQUQobWNic3AsIERSUjEpOwogCiAJcmV0dXJuICh3b3JkX2xzYiB8ICh3b3JkX21zYiA8PCAxNikpOwogfQpAQCAtNzY3LDcgKzEwNTUsNiBAQAogaW50IG9tYXBfbWNic3Bfc3BpX21hc3Rlcl94bWl0X3dvcmRfcG9sbCh1bnNpZ25lZCBpbnQgaWQsIHUzMiB3b3JkKQogewogCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcDsKLQl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAJb21hcF9tY2JzcF93b3JkX2xlbmd0aCB0eF93b3JkX2xlbmd0aDsKIAlvbWFwX21jYnNwX3dvcmRfbGVuZ3RoIHJ4X3dvcmRfbGVuZ3RoOwogCXUxNiBzcGNyMiwgc3BjcjEsIGF0dGVtcHRzID0gMCwgd29yZF9sc2IsIHdvcmRfbXNiID0gMDsKQEAgLTc3Nyw3ICsxMDY0LDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCW1jYnNwID0gaWRfdG9fbWNic3BfcHRyKGlkKTsKLQlpb19iYXNlID0gbWNic3AtPmlvX2Jhc2U7CiAJdHhfd29yZF9sZW5ndGggPSBtY2JzcC0+dHhfd29yZF9sZW5ndGg7CiAJcnhfd29yZF9sZW5ndGggPSBtY2JzcC0+cnhfd29yZF9sZW5ndGg7CiAKQEAgLTc4NSwxNCArMTA3MSwxNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIEZpcnN0IHdlIHdhaXQgZm9yIHRoZSB0cmFuc21pdHRlciB0byBiZSByZWFkeSAqLwotCXNwY3IyID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IyKTsKKwlzcGNyMiA9IE1DQlNQX1JFQUQobWNic3AsIFNQQ1IyKTsKIAl3aGlsZSAoIShzcGNyMiAmIFhSRFkpKSB7Ci0JCXNwY3IyID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIFNQQ1IyKTsKKwkJc3BjcjIgPSBNQ0JTUF9SRUFEKG1jYnNwLCBTUENSMik7CiAJCWlmIChhdHRlbXB0cysrID4gMTAwMCkgewogCQkJLyogV2UgbXVzdCByZXNldCB0aGUgdHJhbnNtaXR0ZXIgKi8KLQkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHNwY3IyICYgKH5YUlNUKSk7CisJCQlNQ0JTUF9XUklURShtY2JzcCwgU1BDUjIsCisJCQkJICAgIE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IyKSAmICh+WFJTVCkpOwogCQkJdWRlbGF5KDEwKTsKLQkJCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgU1BDUjIsIHNwY3IyIHwgWFJTVCk7CisJCQlNQ0JTUF9XUklURShtY2JzcCwgU1BDUjIsCisJCQkJICAgIE1DQlNQX1JFQURfQ0FDSEUobWNic3AsIFNQQ1IyKSB8IFhSU1QpOwogCQkJdWRlbGF5KDEwKTsKIAkJCWRldl9lcnIobWNic3AtPmRldiwgIk1jQlNQJWQgdHJhbnNtaXR0ZXIgbm90ICIKIAkJCQkicmVhZHlcbiIsIG1jYnNwLT5pZCk7CkBAIC04MDIsMTggKzEwOTAsMjAgQEAKIAogCS8qIE5vdyB3ZSBjYW4gcHVzaCB0aGUgZGF0YSAqLwogCWlmICh0eF93b3JkX2xlbmd0aCA+IE9NQVBfTUNCU1BfV09SRF8xNikKLQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBEWFIyLCB3b3JkID4+IDE2KTsKLQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIERYUjEsIHdvcmQgJiAweGZmZmYpOworCQlNQ0JTUF9XUklURShtY2JzcCwgRFhSMiwgd29yZCA+PiAxNik7CisJTUNCU1BfV1JJVEUobWNic3AsIERYUjEsIHdvcmQgJiAweGZmZmYpOwogCiAJLyogV2Ugd2FpdCBmb3IgdGhlIHJlY2VpdmVyIHRvIGJlIHJlYWR5ICovCi0Jc3BjcjEgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjEpOworCXNwY3IxID0gTUNCU1BfUkVBRChtY2JzcCwgU1BDUjEpOwogCXdoaWxlICghKHNwY3IxICYgUlJEWSkpIHsKLQkJc3BjcjEgPSBPTUFQX01DQlNQX1JFQUQoaW9fYmFzZSwgU1BDUjEpOworCQlzcGNyMSA9IE1DQlNQX1JFQUQobWNic3AsIFNQQ1IxKTsKIAkJaWYgKGF0dGVtcHRzKysgPiAxMDAwKSB7CiAJCQkvKiBXZSBtdXN0IHJlc2V0IHRoZSByZWNlaXZlciAqLwotCQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMSwgc3BjcjEgJiAoflJSU1QpKTsKKwkJCU1DQlNQX1dSSVRFKG1jYnNwLCBTUENSMSwKKwkJCQkgICAgTUNCU1BfUkVBRF9DQUNIRShtY2JzcCwgU1BDUjEpICYgKH5SUlNUKSk7CiAJCQl1ZGVsYXkoMTApOwotCQkJT01BUF9NQ0JTUF9XUklURShpb19iYXNlLCBTUENSMSwgc3BjcjEgfCBSUlNUKTsKKwkJCU1DQlNQX1dSSVRFKG1jYnNwLCBTUENSMSwKKwkJCQkgICAgTUNCU1BfUkVBRF9DQUNIRShtY2JzcCwgU1BDUjEpIHwgUlJTVCk7CiAJCQl1ZGVsYXkoMTApOwogCQkJZGV2X2VycihtY2JzcC0+ZGV2LCAiTWNCU1AlZCByZWNlaXZlciBub3QgIgogCQkJCSJyZWFkeVxuIiwgbWNic3AtPmlkKTsKQEAgLTgyMyw4ICsxMTEzLDggQEAKIAogCS8qIFJlY2VpdmVyIGlzIHJlYWR5LCBsZXQncyByZWFkIHRoZSBkdW1teSBkYXRhICovCiAJaWYgKHJ4X3dvcmRfbGVuZ3RoID4gT01BUF9NQ0JTUF9XT1JEXzE2KQotCQl3b3JkX21zYiA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBEUlIyKTsKLQl3b3JkX2xzYiA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBEUlIxKTsKKwkJd29yZF9tc2IgPSBNQ0JTUF9SRUFEKG1jYnNwLCBEUlIyKTsKKwl3b3JkX2xzYiA9IE1DQlNQX1JFQUQobWNic3AsIERSUjEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04MzQsNyArMTEyNCw2IEBACiB7CiAJc3RydWN0IG9tYXBfbWNic3AgKm1jYnNwOwogCXUzMiBjbG9ja193b3JkID0gMDsKLQl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7CiAJb21hcF9tY2JzcF93b3JkX2xlbmd0aCB0eF93b3JkX2xlbmd0aDsKIAlvbWFwX21jYnNwX3dvcmRfbGVuZ3RoIHJ4X3dvcmRfbGVuZ3RoOwogCXUxNiBzcGNyMiwgc3BjcjEsIGF0dGVtcHRzID0gMCwgd29yZF9sc2IsIHdvcmRfbXNiID0gMDsKQEAgLTg0NSw3ICsxMTM0LDYgQEAKIAl9CiAKIAltY2JzcCA9IGlkX3RvX21jYnNwX3B0cihpZCk7Ci0JaW9fYmFzZSA9IG1jYnNwLT5pb19iYXNlOwogCiAJdHhfd29yZF9sZW5ndGggPSBtY2JzcC0+dHhfd29yZF9sZW5ndGg7CiAJcnhfd29yZF9sZW5ndGggPSBtY2JzcC0+cnhfd29yZF9sZW5ndGg7CkBAIC04NTQsMTQgKzExNDIsMTYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBGaXJzdCB3ZSB3YWl0IGZvciB0aGUgdHJhbnNtaXR0ZXIgdG8gYmUgcmVhZHkgKi8KLQlzcGNyMiA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMik7CisJc3BjcjIgPSBNQ0JTUF9SRUFEKG1jYnNwLCBTUENSMik7CiAJd2hpbGUgKCEoc3BjcjIgJiBYUkRZKSkgewotCQlzcGNyMiA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMik7CisJCXNwY3IyID0gTUNCU1BfUkVBRChtY2JzcCwgU1BDUjIpOwogCQlpZiAoYXR0ZW1wdHMrKyA+IDEwMDApIHsKIAkJCS8qIFdlIG11c3QgcmVzZXQgdGhlIHRyYW5zbWl0dGVyICovCi0JCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IyLCBzcGNyMiAmICh+WFJTVCkpOworCQkJTUNCU1BfV1JJVEUobWNic3AsIFNQQ1IyLAorCQkJCSAgICBNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCBTUENSMikgJiAoflhSU1QpKTsKIAkJCXVkZWxheSgxMCk7Ci0JCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IyLCBzcGNyMiB8IFhSU1QpOworCQkJTUNCU1BfV1JJVEUobWNic3AsIFNQQ1IyLAorCQkJCSAgICBNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCBTUENSMikgfCBYUlNUKTsKIAkJCXVkZWxheSgxMCk7CiAJCQlkZXZfZXJyKG1jYnNwLT5kZXYsICJNY0JTUCVkIHRyYW5zbWl0dGVyIG5vdCAiCiAJCQkJInJlYWR5XG4iLCBtY2JzcC0+aWQpOwpAQCAtODcxLDE4ICsxMTYxLDIwIEBACiAKIAkvKiBXZSBmaXJzdCBuZWVkIHRvIGVuYWJsZSB0aGUgYnVzIGNsb2NrICovCiAJaWYgKHR4X3dvcmRfbGVuZ3RoID4gT01BUF9NQ0JTUF9XT1JEXzE2KQotCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIERYUjIsIGNsb2NrX3dvcmQgPj4gMTYpOwotCU9NQVBfTUNCU1BfV1JJVEUoaW9fYmFzZSwgRFhSMSwgY2xvY2tfd29yZCAmIDB4ZmZmZik7CisJCU1DQlNQX1dSSVRFKG1jYnNwLCBEWFIyLCBjbG9ja193b3JkID4+IDE2KTsKKwlNQ0JTUF9XUklURShtY2JzcCwgRFhSMSwgY2xvY2tfd29yZCAmIDB4ZmZmZik7CiAKIAkvKiBXZSB3YWl0IGZvciB0aGUgcmVjZWl2ZXIgdG8gYmUgcmVhZHkgKi8KLQlzcGNyMSA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMSk7CisJc3BjcjEgPSBNQ0JTUF9SRUFEKG1jYnNwLCBTUENSMSk7CiAJd2hpbGUgKCEoc3BjcjEgJiBSUkRZKSkgewotCQlzcGNyMSA9IE9NQVBfTUNCU1BfUkVBRChpb19iYXNlLCBTUENSMSk7CisJCXNwY3IxID0gTUNCU1BfUkVBRChtY2JzcCwgU1BDUjEpOwogCQlpZiAoYXR0ZW1wdHMrKyA+IDEwMDApIHsKIAkJCS8qIFdlIG11c3QgcmVzZXQgdGhlIHJlY2VpdmVyICovCi0JCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IxLCBzcGNyMSAmICh+UlJTVCkpOworCQkJTUNCU1BfV1JJVEUobWNic3AsIFNQQ1IxLAorCQkJCSAgICBNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCBTUENSMSkgJiAoflJSU1QpKTsKIAkJCXVkZWxheSgxMCk7Ci0JCQlPTUFQX01DQlNQX1dSSVRFKGlvX2Jhc2UsIFNQQ1IxLCBzcGNyMSB8IFJSU1QpOworCQkJTUNCU1BfV1JJVEUobWNic3AsIFNQQ1IxLAorCQkJCSAgICBNQ0JTUF9SRUFEX0NBQ0hFKG1jYnNwLCBTUENSMSkgfCBSUlNUKTsKIAkJCXVkZWxheSgxMCk7CiAJCQlkZXZfZXJyKG1jYnNwLT5kZXYsICJNY0JTUCVkIHJlY2VpdmVyIG5vdCAiCiAJCQkJInJlYWR5XG4iLCBtY2JzcC0+aWQpOwpAQCAtODkyLDggKzExODQsOCBAQAogCiAJLyogUmVjZWl2ZXIgaXMgcmVhZHksIHRoZXJlIGlzIHNvbWV0aGluZyBmb3IgdXMgKi8KIAlpZiAocnhfd29yZF9sZW5ndGggPiBPTUFQX01DQlNQX1dPUkRfMTYpCi0JCXdvcmRfbXNiID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIERSUjIpOwotCXdvcmRfbHNiID0gT01BUF9NQ0JTUF9SRUFEKGlvX2Jhc2UsIERSUjEpOworCQl3b3JkX21zYiA9IE1DQlNQX1JFQUQobWNic3AsIERSUjIpOworCXdvcmRfbHNiID0gTUNCU1BfUkVBRChtY2JzcCwgRFJSMSk7CiAKIAl3b3JkWzBdID0gKHdvcmRfbHNiIHwgKHdvcmRfbXNiIDw8IDE2KSk7CiAKQEAgLTExMDcsNyArMTM5OSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfbWNic3Bfc2V0X3NwaV9tb2RlKTsKIAotI2lmZGVmIENPTkZJR19BUkNIX09NQVAzNFhYCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDMKICNkZWZpbmUgbWF4X3RocmVzKG0pCQkJKG1jYnNwLT5wZGF0YS0+YnVmZmVyX3NpemUpCiAjZGVmaW5lIHZhbGlkX3RocmVzaG9sZChtLCB2YWwpCQkoKHZhbCkgPD0gbWF4X3RocmVzKG0pKQogI2RlZmluZSBUSFJFU0hPTERfUFJPUF9CVUlMREVSKHByb3ApCQkJCQlcCkBAIC0xMTk4LDYgKzE0OTAsNjQgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKGRtYV9vcF9tb2RlLCAwNjQ0LCBkbWFfb3BfbW9kZV9zaG93LCBkbWFfb3BfbW9kZV9zdG9yZSk7CiAKK3N0YXRpYyBzc2l6ZV90IHN0X3RhcHNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3AgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgb21hcF9tY2JzcF9zdF9kYXRhICpzdF9kYXRhID0gbWNic3AtPnN0X2RhdGE7CisJc3NpemVfdCBzdGF0dXMgPSAwOworCWludCBpOworCisJc3Bpbl9sb2NrX2lycSgmbWNic3AtPmxvY2spOworCWZvciAoaSA9IDA7IGkgPCBzdF9kYXRhLT5ucl90YXBzOyBpKyspCisJCXN0YXR1cyArPSBzcHJpbnRmKCZidWZbc3RhdHVzXSwgKGkgPyAiLCAlZCIgOiAiJWQiKSwKKwkJCQkgIHN0X2RhdGEtPnRhcHNbaV0pOworCWlmIChpKQorCQlzdGF0dXMgKz0gc3ByaW50ZigmYnVmW3N0YXR1c10sICJcbiIpOworCXNwaW5fdW5sb2NrX2lycSgmbWNic3AtPmxvY2spOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHNzaXplX3Qgc3RfdGFwc19zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBvbWFwX21jYnNwICptY2JzcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBvbWFwX21jYnNwX3N0X2RhdGEgKnN0X2RhdGEgPSBtY2JzcC0+c3RfZGF0YTsKKwlpbnQgdmFsLCB0bXAsIHN0YXR1cywgaSA9IDA7CisKKwlzcGluX2xvY2tfaXJxKCZtY2JzcC0+bG9jayk7CisJbWVtc2V0KHN0X2RhdGEtPnRhcHMsIDAsIHNpemVvZihzdF9kYXRhLT50YXBzKSk7CisJc3RfZGF0YS0+bnJfdGFwcyA9IDA7CisKKwlkbyB7CisJCXN0YXR1cyA9IHNzY2FuZihidWYsICIlZCVuIiwgJnZhbCwgJnRtcCk7CisJCWlmIChzdGF0dXMgPCAwIHx8IHN0YXR1cyA9PSAwKSB7CisJCQlzaXplID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmICh2YWwgPCAtMzI3NjggfHwgdmFsID4gMzI3NjcpIHsKKwkJCXNpemUgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3RfZGF0YS0+dGFwc1tpKytdID0gdmFsOworCQlidWYgKz0gdG1wOworCQlpZiAoKmJ1ZiAhPSAnLCcpCisJCQlicmVhazsKKwkJYnVmKys7CisJfSB3aGlsZSAoMSk7CisKKwlzdF9kYXRhLT5ucl90YXBzID0gaTsKKworb3V0OgorCXNwaW5fdW5sb2NrX2lycSgmbWNic3AtPmxvY2spOworCisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihzdF90YXBzLCAwNjQ0LCBzdF90YXBzX3Nob3csIHN0X3RhcHNfc3RvcmUpOworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqYWRkaXRpb25hbF9hdHRyc1tdID0gewogCSZkZXZfYXR0cl9tYXhfdHhfdGhyZXMuYXR0ciwKIAkmZGV2X2F0dHJfbWF4X3J4X3RocmVzLmF0dHIsCkBAIC0xMjE5LDYgKzE1NjksNjAgQEAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJmFkZGl0aW9uYWxfYXR0cl9ncm91cCk7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICpzaWRldG9uZV9hdHRyc1tdID0geworCSZkZXZfYXR0cl9zdF90YXBzLmF0dHIsCisJTlVMTCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHNpZGV0b25lX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gKHN0cnVjdCBhdHRyaWJ1dGUgKiopc2lkZXRvbmVfYXR0cnMsCit9OworCitpbnQgX19kZXZpbml0IG9tYXBfc3RfYWRkKHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCkKK3sKKwlzdHJ1Y3Qgb21hcF9tY2JzcF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IG1jYnNwLT5wZGF0YTsKKwlzdHJ1Y3Qgb21hcF9tY2JzcF9zdF9kYXRhICpzdF9kYXRhOworCWludCBlcnI7CisKKwlzdF9kYXRhID0ga3phbGxvYyhzaXplb2YoKm1jYnNwLT5zdF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdF9kYXRhKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyMTsKKwl9CisKKwlzdF9kYXRhLT5pb19iYXNlX3N0ID0gaW9yZW1hcChwZGF0YS0+cGh5c19iYXNlX3N0LCBTWl80Syk7CisJaWYgKCFzdF9kYXRhLT5pb19iYXNlX3N0KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyMjsKKwl9CisKKwllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm1jYnNwLT5kZXYtPmtvYmosICZzaWRldG9uZV9hdHRyX2dyb3VwKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjM7CisKKwltY2JzcC0+c3RfZGF0YSA9IHN0X2RhdGE7CisJcmV0dXJuIDA7CisKK2VycjM6CisJaW91bm1hcChzdF9kYXRhLT5pb19iYXNlX3N0KTsKK2VycjI6CisJa2ZyZWUoc3RfZGF0YSk7CitlcnIxOgorCXJldHVybiBlcnI7CisKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IG9tYXBfc3RfcmVtb3ZlKHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCkKK3sKKwlzdHJ1Y3Qgb21hcF9tY2JzcF9zdF9kYXRhICpzdF9kYXRhID0gbWNic3AtPnN0X2RhdGE7CisKKwlpZiAoc3RfZGF0YSkgeworCQlzeXNmc19yZW1vdmVfZ3JvdXAoJm1jYnNwLT5kZXYtPmtvYmosICZzaWRldG9uZV9hdHRyX2dyb3VwKTsKKwkJaW91bm1hcChzdF9kYXRhLT5pb19iYXNlX3N0KTsKKwkJa2ZyZWUoc3RfZGF0YSk7CisJfQorfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZpbml0IG9tYXAzNHh4X2RldmljZV9pbml0KHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCkKIHsKIAltY2JzcC0+ZG1hX29wX21vZGUgPSBNQ0JTUF9ETUFfTU9ERV9FTEVNRU5UOwpAQCAtMTIzMiw2ICsxNjM2LDEyIEBACiAJCWlmIChvbWFwX2FkZGl0aW9uYWxfYWRkKG1jYnNwLT5kZXYpKQogCQkJZGV2X3dhcm4obWNic3AtPmRldiwKIAkJCQkiVW5hYmxlIHRvIGNyZWF0ZSBhZGRpdGlvbmFsIGNvbnRyb2xzXG4iKTsKKworCQlpZiAobWNic3AtPmlkID09IDIgfHwgbWNic3AtPmlkID09IDMpCisJCQlpZiAob21hcF9zdF9hZGQobWNic3ApKQorCQkJCWRldl93YXJuKG1jYnNwLT5kZXYsCisJCQkJICJVbmFibGUgdG8gY3JlYXRlIHNpZGV0b25lIGNvbnRyb2xzXG4iKTsKKwogCX0gZWxzZSB7CiAJCW1jYnNwLT5tYXhfdHhfdGhyZXMgPSAtRUlOVkFMOwogCQltY2JzcC0+bWF4X3J4X3RocmVzID0gLUVJTlZBTDsKQEAgLTEyNDAsMTMgKzE2NTAsMTcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIF9fZGV2ZXhpdCBvbWFwMzR4eF9kZXZpY2VfZXhpdChzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3ApCiB7Ci0JaWYgKGNwdV9pc19vbWFwMzR4eCgpKQorCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgewogCQlvbWFwX2FkZGl0aW9uYWxfcmVtb3ZlKG1jYnNwLT5kZXYpOworCisJCWlmIChtY2JzcC0+aWQgPT0gMiB8fCBtY2JzcC0+aWQgPT0gMykKKwkJCW9tYXBfc3RfcmVtb3ZlKG1jYnNwKTsKKwl9CiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIF9fZGV2aW5pdCBvbWFwMzR4eF9kZXZpY2VfaW5pdChzdHJ1Y3Qgb21hcF9tY2JzcCAqbWNic3ApIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgX19kZXZleGl0IG9tYXAzNHh4X2RldmljZV9leGl0KHN0cnVjdCBvbWFwX21jYnNwICptY2JzcCkge30KLSNlbmRpZiAvKiBDT05GSUdfQVJDSF9PTUFQMzRYWCAqLworI2VuZGlmIC8qIENPTkZJR19BUkNIX09NQVAzICovCiAKIC8qCiAgKiBNY0JTUDEgYW5kIE1jQlNQMyBhcmUgZGlyZWN0bHkgbWFwcGVkIG9uIDE2MTAgYW5kIDE1MTAuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvb21hcF9kZXZpY2UuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCmluZGV4IDJlZDcyMDEuLjU5MDQzNTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9vbWFwX2RldmljZS5jCkBAIC05MCw2ICs5MCw4IEBACiAjZGVmaW5lIElHTk9SRV9XQUtFVVBfTEFUCQkxCiAKIAorI2RlZmluZSBPTUFQX0RFVklDRV9NQUdJQyAweGYwMGRjYWZlCisKIC8qIFByaXZhdGUgZnVuY3Rpb25zICovCiAKIC8qKgpAQCAtMTM4LDEwICsxNDAsMjIgQEAKIAkJCSAiJWxsdSBuc2VjXG4iLCBvZC0+cGRldi5uYW1lLCBvZC0+cG1fbGF0X2xldmVsLAogCQkJIGFjdF9sYXQpOwogCi0JCVdBUk4oYWN0X2xhdCA+IG9kcGwtPmFjdGl2YXRlX2xhdCwgIm9tYXBfZGV2aWNlOiAlcy4lZDogIgotCQkgICAgICJhY3RpdmF0ZSBzdGVwICVkIHRvb2sgbG9uZ2VyIHRoYW4gZXhwZWN0ZWQgKCVsbHUgPiAlZClcbiIsCi0JCSAgICAgb2QtPnBkZXYubmFtZSwgb2QtPnBkZXYuaWQsIG9kLT5wbV9sYXRfbGV2ZWwsCi0JCSAgICAgYWN0X2xhdCwgb2RwbC0+YWN0aXZhdGVfbGF0KTsKKwkJaWYgKGFjdF9sYXQgPiBvZHBsLT5hY3RpdmF0ZV9sYXQpIHsKKwkJCW9kcGwtPmFjdGl2YXRlX2xhdF93b3JzdCA9IGFjdF9sYXQ7CisJCQlpZiAob2RwbC0+ZmxhZ3MgJiBPTUFQX0RFVklDRV9MQVRFTkNZX0FVVE9fQURKVVNUKSB7CisJCQkJb2RwbC0+YWN0aXZhdGVfbGF0ID0gYWN0X2xhdDsKKwkJCQlwcl93YXJuaW5nKCJvbWFwX2RldmljZTogJXMuJWQ6IG5ldyB3b3JzdCBjYXNlICIKKwkJCQkJICAgImFjdGl2YXRlIGxhdGVuY3kgJWQ6ICVsbHVcbiIsCisJCQkJCSAgIG9kLT5wZGV2Lm5hbWUsIG9kLT5wZGV2LmlkLAorCQkJCQkgICBvZC0+cG1fbGF0X2xldmVsLCBhY3RfbGF0KTsKKwkJCX0gZWxzZQorCQkJCXByX3dhcm5pbmcoIm9tYXBfZGV2aWNlOiAlcy4lZDogYWN0aXZhdGUgIgorCQkJCQkgICAibGF0ZW5jeSAlZCBoaWdoZXIgdGhhbiBleHB0ZWN0ZWQuICIKKwkJCQkJICAgIiglbGx1ID4gJWQpXG4iLAorCQkJCQkgICBvZC0+cGRldi5uYW1lLCBvZC0+cGRldi5pZCwKKwkJCQkJICAgb2QtPnBtX2xhdF9sZXZlbCwgYWN0X2xhdCwKKwkJCQkJICAgb2RwbC0+YWN0aXZhdGVfbGF0KTsKKwkJfQogCiAJCW9kLT5kZXZfd2FrZXVwX2xhdCAtPSBvZHBsLT5hY3RpdmF0ZV9sYXQ7CiAJfQpAQCAtMTk0LDEwICsyMDgsMjMgQEAKIAkJCSAiJWxsdSBuc2VjXG4iLCBvZC0+cGRldi5uYW1lLCBvZC0+cG1fbGF0X2xldmVsLAogCQkJIGRlYWN0X2xhdCk7CiAKLQkJV0FSTihkZWFjdF9sYXQgPiBvZHBsLT5kZWFjdGl2YXRlX2xhdCwgIm9tYXBfZGV2aWNlOiAlcy4lZDogIgotCQkgICAgICJkZWFjdGl2YXRlIHN0ZXAgJWQgdG9vayBsb25nZXIgdGhhbiBleHBlY3RlZCAiCi0JCSAgICAgIiglbGx1ID4gJWQpXG4iLCBvZC0+cGRldi5uYW1lLCBvZC0+cGRldi5pZCwKLQkJICAgICBvZC0+cG1fbGF0X2xldmVsLCBkZWFjdF9sYXQsIG9kcGwtPmRlYWN0aXZhdGVfbGF0KTsKKwkJaWYgKGRlYWN0X2xhdCA+IG9kcGwtPmRlYWN0aXZhdGVfbGF0KSB7CisJCQlvZHBsLT5kZWFjdGl2YXRlX2xhdF93b3JzdCA9IGRlYWN0X2xhdDsKKwkJCWlmIChvZHBsLT5mbGFncyAmIE9NQVBfREVWSUNFX0xBVEVOQ1lfQVVUT19BREpVU1QpIHsKKwkJCQlvZHBsLT5kZWFjdGl2YXRlX2xhdCA9IGRlYWN0X2xhdDsKKwkJCQlwcl93YXJuaW5nKCJvbWFwX2RldmljZTogJXMuJWQ6IG5ldyB3b3JzdCBjYXNlICIKKwkJCQkJICAgImRlYWN0aXZhdGUgbGF0ZW5jeSAlZDogJWxsdVxuIiwKKwkJCQkJICAgb2QtPnBkZXYubmFtZSwgb2QtPnBkZXYuaWQsCisJCQkJCSAgIG9kLT5wbV9sYXRfbGV2ZWwsIGRlYWN0X2xhdCk7CisJCQl9IGVsc2UKKwkJCQlwcl93YXJuaW5nKCJvbWFwX2RldmljZTogJXMuJWQ6IGRlYWN0aXZhdGUgIgorCQkJCQkgICAibGF0ZW5jeSAlZCBoaWdoZXIgdGhhbiBleHB0ZWN0ZWQuICIKKwkJCQkJICAgIiglbGx1ID4gJWQpXG4iLAorCQkJCQkgICBvZC0+cGRldi5uYW1lLCBvZC0+cGRldi5pZCwKKwkJCQkJICAgb2QtPnBtX2xhdF9sZXZlbCwgZGVhY3RfbGF0LAorCQkJCQkgICBvZHBsLT5kZWFjdGl2YXRlX2xhdCk7CisJCX0KKwogCiAJCW9kLT5kZXZfd2FrZXVwX2xhdCArPSBvZHBsLT5hY3RpdmF0ZV9sYXQ7CiAKQEAgLTI4MCw2ICszMDcsNyBAQAogICogQHBkYXRhX2xlbjogYW1vdW50IG9mIG1lbW9yeSBwb2ludGVkIHRvIGJ5IEBwZGF0YQogICogQHBtX2xhdHM6IHBvaW50ZXIgdG8gYSBvbWFwX2RldmljZV9wbV9sYXRlbmN5IGFycmF5IGZvciB0aGlzIGRldmljZQogICogQHBtX2xhdHNfY250OiBBUlJBWV9TSVpFKCkgb2YgQHBtX2xhdHMKKyAqIEBpc19lYXJseV9kZXZpY2U6IHNob3VsZCB0aGUgZGV2aWNlIGJlIHJlZ2lzdGVyZWQgYXMgYW4gZWFybHkgZGV2aWNlIG9yIG5vdAogICoKICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBidWlsZGluZyBhbmQgcmVnaXN0ZXJpbmcgYSBzaW5nbGUKICAqIG9tYXBfZGV2aWNlIHJlY29yZCwgd2hpY2ggaW4gdHVybiBidWlsZHMgYW5kIHJlZ2lzdGVycyBhCkBAIC0yOTEsNyArMzE5LDcgQEAKIAkJCQkgICAgICBzdHJ1Y3Qgb21hcF9od21vZCAqb2gsIHZvaWQgKnBkYXRhLAogCQkJCSAgICAgIGludCBwZGF0YV9sZW4sCiAJCQkJICAgICAgc3RydWN0IG9tYXBfZGV2aWNlX3BtX2xhdGVuY3kgKnBtX2xhdHMsCi0JCQkJICAgICAgaW50IHBtX2xhdHNfY250KQorCQkJCSAgICAgIGludCBwbV9sYXRzX2NudCwgaW50IGlzX2Vhcmx5X2RldmljZSkKIHsKIAlzdHJ1Y3Qgb21hcF9od21vZCAqb2hzW10gPSB7IG9oIH07CiAKQEAgLTI5OSw3ICszMjcsOCBAQAogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAogCXJldHVybiBvbWFwX2RldmljZV9idWlsZF9zcyhwZGV2X25hbWUsIHBkZXZfaWQsIG9ocywgMSwgcGRhdGEsCi0JCQkJICAgIHBkYXRhX2xlbiwgcG1fbGF0cywgcG1fbGF0c19jbnQpOworCQkJCSAgICBwZGF0YV9sZW4sIHBtX2xhdHMsIHBtX2xhdHNfY250LAorCQkJCSAgICBpc19lYXJseV9kZXZpY2UpOwogfQogCiAvKioKQEAgLTMxMSw2ICszNDAsNyBAQAogICogQHBkYXRhX2xlbjogYW1vdW50IG9mIG1lbW9yeSBwb2ludGVkIHRvIGJ5IEBwZGF0YQogICogQHBtX2xhdHM6IHBvaW50ZXIgdG8gYSBvbWFwX2RldmljZV9wbV9sYXRlbmN5IGFycmF5IGZvciB0aGlzIGRldmljZQogICogQHBtX2xhdHNfY250OiBBUlJBWV9TSVpFKCkgb2YgQHBtX2xhdHMKKyAqIEBpc19lYXJseV9kZXZpY2U6IHNob3VsZCB0aGUgZGV2aWNlIGJlIHJlZ2lzdGVyZWQgYXMgYW4gZWFybHkgZGV2aWNlIG9yIG5vdAogICoKICAqIENvbnZlbmllbmNlIGZ1bmN0aW9uIGZvciBidWlsZGluZyBhbmQgcmVnaXN0ZXJpbmcgYW4gb21hcF9kZXZpY2UKICAqIHN1YnN5c3RlbSByZWNvcmQuICBTdWJzeXN0ZW0gcmVjb3JkcyBjb25zaXN0IG9mIG11bHRpcGxlCkBAIC0zMjIsNyArMzUyLDcgQEAKIAkJCQkJIHN0cnVjdCBvbWFwX2h3bW9kICoqb2hzLCBpbnQgb2hfY250LAogCQkJCQkgdm9pZCAqcGRhdGEsIGludCBwZGF0YV9sZW4sCiAJCQkJCSBzdHJ1Y3Qgb21hcF9kZXZpY2VfcG1fbGF0ZW5jeSAqcG1fbGF0cywKLQkJCQkJIGludCBwbV9sYXRzX2NudCkKKwkJCQkJIGludCBwbV9sYXRzX2NudCwgaW50IGlzX2Vhcmx5X2RldmljZSkKIHsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIAlzdHJ1Y3Qgb21hcF9kZXZpY2UgKm9kOwpAQCAtMzc4LDcgKzQwOCwxMyBAQAogCW9kLT5wbV9sYXRzID0gcG1fbGF0czsKIAlvZC0+cG1fbGF0c19jbnQgPSBwbV9sYXRzX2NudDsKIAotCXJldCA9IG9tYXBfZGV2aWNlX3JlZ2lzdGVyKG9kKTsKKwlvZC0+bWFnaWMgPSBPTUFQX0RFVklDRV9NQUdJQzsKKworCWlmIChpc19lYXJseV9kZXZpY2UpCisJCXJldCA9IG9tYXBfZWFybHlfZGV2aWNlX3JlZ2lzdGVyKG9kKTsKKwllbHNlCisJCXJldCA9IG9tYXBfZGV2aWNlX3JlZ2lzdGVyKG9kKTsKKwogCWlmIChyZXQpCiAJCWdvdG8gb2Ric19leGl0NDsKIApAQCAtMzk5LDYgKzQzNSwyNCBAQAogfQogCiAvKioKKyAqIG9tYXBfZWFybHlfZGV2aWNlX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYW4gb21hcF9kZXZpY2UgYXMgYW4gZWFybHkgcGxhdGZvcm0KKyAqIGRldmljZS4KKyAqIEBvZDogc3RydWN0IG9tYXBfZGV2aWNlICogdG8gcmVnaXN0ZXIKKyAqCisgKiBSZWdpc3RlciB0aGUgb21hcF9kZXZpY2Ugc3RydWN0dXJlLiAgVGhpcyBjdXJyZW50bHkganVzdCBjYWxscworICogcGxhdGZvcm1fZWFybHlfYWRkX2RldmljZSgpIG9uIHRoZSB1bmRlcmx5aW5nIHBsYXRmb3JtX2RldmljZS4KKyAqIFJldHVybnMgMCBieSBkZWZhdWx0LgorICovCitpbnQgb21hcF9lYXJseV9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IG9tYXBfZGV2aWNlICpvZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2VzWzFdOworCisJZGV2aWNlc1swXSA9ICYob2QtPnBkZXYpOworCWVhcmx5X3BsYXRmb3JtX2FkZF9kZXZpY2VzKGRldmljZXMsIDEpOworCXJldHVybiAwOworfQorCisvKioKICAqIG9tYXBfZGV2aWNlX3JlZ2lzdGVyIC0gcmVnaXN0ZXIgYW4gb21hcF9kZXZpY2Ugd2l0aCBvbmUgb21hcF9od21vZAogICogQG9kOiBzdHJ1Y3Qgb21hcF9kZXZpY2UgKiB0byByZWdpc3RlcgogICoKQEAgLTQzNyw4ICs0OTEsOCBAQAogCW9kID0gX2ZpbmRfYnlfcGRldihwZGV2KTsKIAogCWlmIChvZC0+X3N0YXRlID09IE9NQVBfREVWSUNFX1NUQVRFX0VOQUJMRUQpIHsKLQkJV0FSTigxLCAib21hcF9kZXZpY2U6ICVzLiVkOiBvbWFwX2RldmljZV9lbmFibGUoKSBjYWxsZWQgZnJvbSAiCi0JCSAgICAgImludmFsaWQgc3RhdGVcbiIsIG9kLT5wZGV2Lm5hbWUsIG9kLT5wZGV2LmlkKTsKKwkJV0FSTigxLCAib21hcF9kZXZpY2U6ICVzLiVkOiAlcygpIGNhbGxlZCBmcm9tIGludmFsaWQgc3RhdGUgJWRcbiIsCisJCSAgICAgb2QtPnBkZXYubmFtZSwgb2QtPnBkZXYuaWQsIF9fZnVuY19fLCBvZC0+X3N0YXRlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00NzYsOCArNTMwLDggQEAKIAlvZCA9IF9maW5kX2J5X3BkZXYocGRldik7CiAKIAlpZiAob2QtPl9zdGF0ZSAhPSBPTUFQX0RFVklDRV9TVEFURV9FTkFCTEVEKSB7Ci0JCVdBUk4oMSwgIm9tYXBfZGV2aWNlOiAlcy4lZDogb21hcF9kZXZpY2VfaWRsZSgpIGNhbGxlZCBmcm9tICIKLQkJICAgICAiaW52YWxpZCBzdGF0ZVxuIiwgb2QtPnBkZXYubmFtZSwgb2QtPnBkZXYuaWQpOworCQlXQVJOKDEsICJvbWFwX2RldmljZTogJXMuJWQ6ICVzKCkgY2FsbGVkIGZyb20gaW52YWxpZCBzdGF0ZSAlZFxuIiwKKwkJICAgICBvZC0+cGRldi5uYW1lLCBvZC0+cGRldi5pZCwgX19mdW5jX18sIG9kLT5fc3RhdGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTUwOSw4ICs1NjMsOCBAQAogCiAJaWYgKG9kLT5fc3RhdGUgIT0gT01BUF9ERVZJQ0VfU1RBVEVfRU5BQkxFRCAmJgogCSAgICBvZC0+X3N0YXRlICE9IE9NQVBfREVWSUNFX1NUQVRFX0lETEUpIHsKLQkJV0FSTigxLCAib21hcF9kZXZpY2U6ICVzLiVkOiBvbWFwX2RldmljZV9zaHV0ZG93bigpIGNhbGxlZCAiCi0JCSAgICAgImZyb20gaW52YWxpZCBzdGF0ZVxuIiwgb2QtPnBkZXYubmFtZSwgb2QtPnBkZXYuaWQpOworCQlXQVJOKDEsICJvbWFwX2RldmljZTogJXMuJWQ6ICVzKCkgY2FsbGVkIGZyb20gaW52YWxpZCBzdGF0ZSAlZFxuIiwKKwkJICAgICBvZC0+cGRldi5uYW1lLCBvZC0+cGRldi5pZCwgX19mdW5jX18sIG9kLT5fc3RhdGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTU2NCw2ICs2MTgsMTggQEAKIH0KIAogLyoqCisgKiBvbWFwX2RldmljZV9pc192YWxpZCAtIENoZWNrIGlmIHBvaW50ZXIgaXMgYSB2YWxpZCBvbWFwX2RldmljZQorICogQG9kOiBzdHJ1Y3Qgb21hcF9kZXZpY2UgKgorICoKKyAqIFJldHVybiB3aGV0aGVyIHN0cnVjdCBvbWFwX2RldmljZSBwb2ludGVyIEBvZCBwb2ludHMgdG8gYSB2YWxpZAorICogb21hcF9kZXZpY2UuCisgKi8KK2Jvb2wgb21hcF9kZXZpY2VfaXNfdmFsaWQoc3RydWN0IG9tYXBfZGV2aWNlICpvZCkKK3sKKwlyZXR1cm4gKG9kICYmIG9kLT5tYWdpYyA9PSBPTUFQX0RFVklDRV9NQUdJQyk7Cit9CisKKy8qKgogICogb21hcF9kZXZpY2VfZ2V0X3B3cmRtIC0gcmV0dXJuIHRoZSBwb3dlcmRvbWFpbiAqIGFzc29jaWF0ZWQgd2l0aCBAb2QKICAqIEBvZDogc3RydWN0IG9tYXBfZGV2aWNlICoKICAqCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwppbmRleCBkOGQ1MDk0Li41MWY0ZGZiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKQEAgLTUzLDcgKzUzLDcgQEAKICNkZWZpbmUgT01BUDRfU1JBTV9QVUJfUEEJKE9NQVA0X1NSQU1fUEEgKyAweDQwMDApCiAjZGVmaW5lIE9NQVA0X1NSQU1fUFVCX1ZBCShPTUFQNF9TUkFNX1ZBICsgMHg0MDAwKQogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogI2RlZmluZSBTUkFNX0JPT1RMT0FERVJfU1oJMHgwMAogI2Vsc2UKICNkZWZpbmUgU1JBTV9CT09UTE9BREVSX1NaCTB4ODAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LXMzYy9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5ZTlkMDI4Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwyMTUgKzAsMCBAQAotIyBDb3B5cmlnaHQgMjAwNyBTaW10ZWMgRWxlY3Ryb25pY3MKLSMKLSMgTGljZW5zZWQgdW5kZXIgR1BMdjIKLQotY29uZmlnIFBMQVRfUzNDCi0JYm9vbAotCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwIHx8IEFSQ0hfUzNDMjRBMCB8fCBBUkNIX1MzQzY0WFgKLQlkZWZhdWx0IHkKLQlzZWxlY3QgTk9fSU9QT1JUCi0JaGVscAotCSAgQmFzZSBwbGF0Zm9ybSBjb2RlIGZvciBhbnkgU2Ftc3VuZyBTM0MgZGV2aWNlCi0KLSMgbG93LWxldmVsIHNlcmlhbCBvcHRpb24gbm9kZXMKLQotaWYgUExBVF9TM0MKLQotY29uZmlnIENQVV9MTFNFUklBTF9TM0MyNDEwX09OTFkKLQlib29sCi0JZGVmYXVsdCB5IGlmIENQVV9MTFNFUklBTF9TM0MyNDEwICYmICFDUFVfTExTRVJJQUxfUzNDMjQ0MAotCi1jb25maWcgQ1BVX0xMU0VSSUFMX1MzQzI0NDBfT05MWQotCWJvb2wKLQlkZWZhdWx0IHkgaWYgQ1BVX0xMU0VSSUFMX1MzQzI0NDAgJiYgIUNQVV9MTFNFUklBTF9TM0MyNDEwCi0KLWNvbmZpZyBDUFVfTExTRVJJQUxfUzNDMjQxMAotCWJvb2wKLQloZWxwCi0JICBTZWxlY3RlZCBpZiB0aGVyZSBpcyBhbiBTM0MyNDEwIChvciByZWdpc3RlciBjb21wYXRpYmxlKSBzZXJpYWwKLQkgIGxvdy1sZXZlbCBpbXBsZW1lbnRhdGlvbiBuZWVkZWQKLQotY29uZmlnIENQVV9MTFNFUklBTF9TM0MyNDQwCi0JYm9vbAotCWhlbHAKLQkgIFNlbGVjdGVkIGlmIHRoZXJlIGlzIGFuIFMzQzI0NDAgKG9yIHJlZ2lzdGVyIGNvbXBhdGlibGUpIHNlcmlhbAotCSAgbG93LWxldmVsIGltcGxlbWVudGF0aW9uIG5lZWRlZAotCi0jIGJvb3QgY29uZmlndXJhdGlvbnMKLQotY29tbWVudCAiQm9vdCBvcHRpb25zIgotCi1jb25maWcgUzNDX0JPT1RfV0FUQ0hET0cKLQlib29sICJTM0MgSW5pdGlhbGlzYXRpb24gd2F0Y2hkb2ciCi0JZGVwZW5kcyBvbiBTM0MyNDEwX1dBVENIRE9HCi0JaGVscAotCSAgU2F5IHkgdG8gZW5hYmxlIHRoZSB3YXRjaGRvZyBkdXJpbmcgdGhlIGtlcm5lbCBkZWNvbXByZXNzaW9uCi0JICBzdGFnZS4gSWYgdGhlIGtlcm5lbCBmYWlscyB0byB1bmNvbXByZXNzLCB0aGVuIHRoZSB3YXRjaGRvZwotCSAgd2lsbCB0cmlnZ2VyIGEgcmVzZXQgYW5kIHRoZSBzeXN0ZW0gc2hvdWxkIHJlc3RhcnQuCi0KLWNvbmZpZyBTM0NfQk9PVF9FUlJPUl9SRVNFVAotCWJvb2wgIlMzQyBSZWJvb3Qgb24gZGVjb21wcmVzc2lvbiBlcnJvciIKLQloZWxwCi0JICBTYXkgeSBoZXJlIHRvIHVzZSB0aGUgd2F0Y2hkb2cgdG8gcmVzZXQgdGhlIHN5c3RlbSBpZiB0aGUKLQkgIGtlcm5lbCBkZWNvbXByZXNzb3IgZGV0ZWN0cyBhbiBlcnJvciBkdXJpbmcgZGVjb21wcmVzc2lvbi4KLQotY29uZmlnIFMzQ19CT09UX1VBUlRfRk9SQ0VfRklGTwotICAgICAgIGJvb2wgIkZvcmNlIFVBUlQgRklGTyBvbiBkdXJpbmcgYm9vdCBwcm9jZXNzIgotICAgICAgIGRlZmF1bHQgeQotICAgICAgIGhlbHAKLSAgICAgICAgIFNheSBZIGhlcmUgdG8gZm9yY2UgdGhlIFVBUlQgRklGT3Mgb24gZHVyaW5nIHRoZSBrZXJuZWwKLQkgdW5jb21wcmVzc29yCi0KLWNvbW1lbnQgIlBvd2VyIG1hbmFnZW1lbnQiCi0KLWNvbmZpZyBTM0MyNDEwX1BNX0RFQlVHCi0JYm9vbCAiUzNDMjQxMCBQTSBTdXNwZW5kIGRlYnVnIgotCWRlcGVuZHMgb24gUE0KLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHZlcmJvc2UgZGVidWdnaW5nIGZyb20gdGhlIFBNIFN1c3BlbmQgYW5kCi0JICBSZXN1bWUgY29kZS4gU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9TdXNwZW5kLnR4dD4KLQkgIGZvciBtb3JlIGluZm9ybWF0aW9uLgotCi1jb25maWcgUzNDX1BNX0RFQlVHX0xFRF9TTURLCi0gICAgICAgYm9vbCAiU01ESyBMRUQgc3VzcGVuZC9yZXN1bWUgZGVidWdnaW5nIgotICAgICAgIGRlcGVuZHMgb24gUE0gJiYgKE1BQ0hfU01ESzY0MTApCi0gICAgICAgaGVscAotICAgICAgICAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIHVzZSBvZiB0aGUgU01ESyBMRURzIG9uIHRoZSBiYXNlYm9hcmQKLQkgZm9yIGRlYnVnZ2luZyBvZiB0aGUgc3RhdGUgb2YgdGhlIHN1c3BlbmQgYW5kIHJlc3VtZSBwcm9jZXNzLgotCi0JIE5vdGUsIHRoaXMgY3VycmVudGx5IG9ubHkgd29ya3MgZm9yIFMzQzY0WFggYmFzZWQgU01ESyBib2FyZHMuCi0KLWNvbmZpZyBTM0MyNDEwX1BNX0NIRUNLCi0JYm9vbCAiUzNDMjQxMCBQTSBTdXNwZW5kIE1lbW9yeSBDUkMiCi0JZGVwZW5kcyBvbiBQTSAmJiBDUkMzMgotCWhlbHAKLSAJICBFbmFibGUgdGhlIFBNIGNvZGUncyBtZW1vcnkgYXJlYSBjaGVja3N1bSBvdmVyIHNsZWVwLiBUaGlzIG9wdGlvbgotCSAgd2lsbCBnZW5lcmF0ZSBDUkNzIG9mIGFsbCBibG9ja3Mgb2YgbWVtb3J5LCBhbmQgc3RvcmUgdGhlbSBiZWZvcmUKLQkgIGdvaW5nIHRvIHNsZWVwLiBUaGUgYmxvY2tzIGFyZSB0aGVuIGNoZWNrZWQgb24gcmVzdW1lIGZvciBhbnkKLQkgIGVycm9ycy4KLQotCSAgTm90ZSwgdGhpcyBjYW4gdGFrZSBzZXZlcmFsIHNlY29uZHMgZGVwZW5kaW5nIG9uIG1lbW9yeSBzaXplCi0JICBhbmQgQ1BVIHNwZWVkLgotCi0JICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL1N1c3BlbmQudHh0PgotCi1jb25maWcgUzNDMjQxMF9QTV9DSEVDS19DSFVOS1NJWkUKLQlpbnQgIlMzQzI0MTAgUE0gU3VzcGVuZCBDUkMgQ2h1bmtzaXplIChLaUIpIgotCWRlcGVuZHMgb24gUE0gJiYgUzNDMjQxMF9QTV9DSEVDSwotCWRlZmF1bHQgNjQKLQloZWxwCi0JICBTZXQgdGhlIGNodW5rc2l6ZSBpbiBLaWxvYnl0ZXMgb2YgdGhlIENSQyBmb3IgY2hlY2tpbmcgbWVtb3J5Ci0JICBjb3JydXB0aW9uIG92ZXIgc3VzcGVuZCBhbmQgcmVzdW1lLiBBIHNtYWxsZXIgdmFsdWUgd2lsbCBtZWFuIHRoYXQKLQkgIHRoZSBDUkMgZGF0YSBibG9jayB3aWxsIHRha2UgbW9yZSBtZW1vcnksIGJ1dCB3aWwgaWRlbnRpZnkgYW55Ci0JICBmYXVsdHMgd2l0aCBiZXR0ZXIgcHJlY2lzaW9uLgotCi0JICBTZWUgPGZpbGU6RG9jdW1lbnRhdGlvbi9hcm0vU2Ftc3VuZy1TM0MyNFhYL1N1c3BlbmQudHh0PgotCi1jb25maWcgUzNDX0xPV0xFVkVMX1VBUlRfUE9SVAotCWludCAiUzNDIFVBUlQgdG8gdXNlIGZvciBsb3ctbGV2ZWwgbWVzc2FnZXMiCi0JZGVmYXVsdCAwCi0JaGVscAotCSAgQ2hvaWNlIG9mIHdoaWNoIFVBUlQgcG9ydCB0byB1c2UgZm9yIHRoZSBsb3ctbGV2ZWwgbWVzc2FnZXMsCi0JICBzdWNoIGFzIHRoZSBgVW5jb21wcmVzc2luZy4uLmAgYXQgc3RhcnQgdGltZS4gVGhlIHZhbHVlIG9mCi0JICB0aGlzIGNvbmZpZ3VyYXRpb24gc2hvdWxkIGJlIGJldHdlZW4gemVybyBhbmQgdHdvLiBUaGUgcG9ydAotCSAgbXVzdCBoYXZlIGJlZW4gaW5pdGlhbGlzZWQgYnkgdGhlIGJvb3QtbG9hZGVyIGJlZm9yZSB1c2UuCi0KLSMgb3B0aW9ucyBmb3IgZ3Bpb2xpYiBzdXBwb3J0Ci0KLWNvbmZpZyBTM0NfR1BJT19TUEFDRQotCWludCAiU3BhY2UgYmV0d2VlbiBncGlvIGJhbmtzIgotCWRlZmF1bHQgMAotCWhlbHAKLQkgIEFkZCBhIG51bWJlciBvZiBzcGFyZSBHUElPIGVudHJpZXMgYmV0d2VlbiBlYWNoIGJhbmsgZm9yIGRlYnVnZ2luZwotCSAgcHVycG9zZXMuIFRoaXMgYWxsb3dzIGFueSBwcm9ibGVtcyB3aGVyZSBhbiBjb3VudGVyIG92ZXJmbG93cyBmcm9tCi0JICBvbmUgYmFuayB0byBhbm90aGVyIHRvIGJlIGNhdWdodCwgYXQgdGhlIGV4cGVuc2Ugb2YgdXNpbmcgYSBsaXR0bGUKLQkgIG1vcmUgbWVtb3J5LgotCi1jb25maWcgUzNDX0dQSU9fVFJBQ0sKLQlib29sCi0JaGVscAotCSAgSW50ZXJuYWwgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlIHRoZSBzM2Mgc3BlY2lmaWMgZ3BpbwotCSAgY2hpcCB0cmFja2luZyBpZiB0aGUgcGxhdGZvcm0gcmVxdWlyZXMgaXQuCi0KLWNvbmZpZyBTM0NfR1BJT19QVUxMX1VQRE9XTgotCWJvb2wKLQloZWxwCi0JICBJbnRlcm5hbCBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSB0aGUgY29ycmVjdCBHUElPIHB1bGwgaGVscGVyCi0KLWNvbmZpZyBTM0NfR1BJT19QVUxMX0RPV04KLQlib29sCi0JaGVscAotCSAgSW50ZXJuYWwgY29uZmlndXJhdGlvbiB0byBlbmFibGUgdGhlIGNvcnJlY3QgR1BJTyBwdWxsIGhlbHBlcgotCi1jb25maWcgUzNDX0dQSU9fUFVMTF9VUAotCWJvb2wKLQloZWxwCi0JICBJbnRlcm5hbCBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSB0aGUgY29ycmVjdCBHUElPIHB1bGwgaGVscGVyCi0KLWNvbmZpZyBTM0NfR1BJT19DRkdfUzNDMjRYWAotCWJvb2wKLQloZWxwCi0JICBJbnRlcm5hbCBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSBTM0MyNFhYIHN0eWxlIEdQSU8gY29uZmlndXJhdGlvbgotCSAgZnVuY3Rpb25zLgotCi1jb25maWcgUzNDX0dQSU9fQ0ZHX1MzQzY0WFgKLQlib29sCi0JaGVscAotCSAgSW50ZXJuYWwgY29uZmlndXJhdGlvbiB0byBlbmFibGUgUzNDNjRYWCBzdHlsZSBHUElPIGNvbmZpZ3VyYXRpb24KLQkgIGZ1bmN0aW9ucy4KLQotY29uZmlnIFM1UF9HUElPX0NGR19TNVBDMVhYCi0JYm9vbAotCWhlbHAKLQkgIEludGVybmFsIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIFM1UEMxWFggc3R5bGUgR1BJTyBjb25maWd1cmF0aW9uCi0JICBmdW5jdGlvbnMuCi0KLSMgRE1BCi0KLWNvbmZpZyBTM0NfRE1BCi0JYm9vbAotCWhlbHAKLQkgIEludGVybmFsIGNvbmZpZ3VyYXRpb24gZm9yIFMzQyBETUEgY29yZQotCi0jIGRldmljZSBkZWZpbml0aW9ucyB0byBjb21waWxlIGluCi0KLWNvbmZpZyBTM0NfREVWX0hTTU1DCi0JYm9vbAotCWhlbHAKLQkgIENvbXBpbGUgaW4gcGxhdGZvcm0gZGV2aWNlIGRlZmluaXRpb25zIGZvciBIU01NQyBjb2RlCi0KLWNvbmZpZyBTM0NfREVWX0hTTU1DMQotCWJvb2wKLQloZWxwCi0JICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9ucyBmb3IgSFNNTUMgY2hhbm5lbCAxCi0KLWNvbmZpZyBTM0NfREVWX0hTTU1DMgotCWJvb2wKLQloZWxwCi0JICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9ucyBmb3IgSFNNTUMgY2hhbm5lbCAyCi0KLWNvbmZpZyBTM0NfREVWX0kyQzEKLQlib29sCi0JaGVscAotCSAgQ29tcGlsZSBpbiBwbGF0Zm9ybSBkZXZpY2UgZGVmaW5pdGlvbnMgZm9yIEkyQyBjaGFubmVsIDEKLQotY29uZmlnIFMzQ19ERVZfRkIKLQlib29sCi0JaGVscAotCSAgQ29tcGlsZSBpbiBwbGF0Zm9ybSBkZXZpY2UgZGVmaW5pdGlvbiBmb3IgZnJhbWVidWZmZXIKLQotY29uZmlnIFMzQ19ERVZfVVNCX0hPU1QKLQlib29sCi0JaGVscAotCSAgQ29tcGlsZSBpbiBwbGF0Zm9ybSBkZXZpY2UgZGVmaW5pdGlvbiBmb3IgVVNCIGhvc3QuCi0KLWNvbmZpZyBTM0NfREVWX1VTQl9IU09URwotCWJvb2wKLQloZWxwCi0JICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9uIGZvciBVU0IgaGlnaC1zcGVlZCBPdEcKLQotY29uZmlnIFMzQ19ERVZfTkFORAotCWJvb2wKLQloZWxwCi0JICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9uIGZvciBOQU5EIGNvbnRyb2xsZXIKLQotZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1zM2MvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNDQ0ZGEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0jIGFyY2gvYXJtL3BsYXQtczNjL01ha2VmaWxlCi0jCi0jIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotIwotIyBMaWNlbnNlZCB1bmRlciBHUEx2MgotCi1vYmoteQkJCQk6PQotb2JqLW0JCQkJOj0KLW9iai1uCQkJCTo9Ci1vYmotCQkJCTo9Ci0KLSMgQ29yZSBzdXBwb3J0IGZvciBhbGwgU2Ftc3VuZyBTb0NzCi0KLW9iai15CQkJCSs9ICBpbml0Lm8KLW9iai15CQkJCSs9IHRpbWUubwotb2JqLXkJCQkJKz0gY2xvY2subwotb2JqLXkJCQkJKz0gcHdtLWNsb2NrLm8KLW9iai15CQkJCSs9IGdwaW8ubwotb2JqLXkJCQkJKz0gZ3Bpby1jb25maWcubwotCi0jIERNQSBzdXBwb3J0Ci0KLW9iai0kKENPTkZJR19TM0NfRE1BKQkJKz0gZG1hLm8KLQotIyBQTSBzdXBwb3J0Ci0KLW9iai0kKENPTkZJR19QTSkJCSs9IHBtLm8KLW9iai0kKENPTkZJR19QTSkJCSs9IHBtLWdwaW8ubwotb2JqLSQoQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0spCSs9IHBtLWNoZWNrLm8KLQotIyBQV00gc3VwcG9ydAotCi1vYmotJChDT05GSUdfSEFWRV9QV00pCQkrPSBwd20ubwotCi0jIGRldmljZXMKLQotb2JqLSQoQ09ORklHX1MzQ19ERVZfSFNNTUMpCSs9IGRldi1oc21tYy5vCi1vYmotJChDT05GSUdfUzNDX0RFVl9IU01NQzEpCSs9IGRldi1oc21tYzEubwotb2JqLSQoQ09ORklHX1MzQ19ERVZfSFNNTUMyKQkrPSBkZXYtaHNtbWMyLm8KLW9iai15CQkJCSs9IGRldi1pMmMwLm8KLW9iai0kKENPTkZJR19TM0NfREVWX0kyQzEpCSs9IGRldi1pMmMxLm8KLW9iai0kKENPTkZJR19TM0NfREVWX0ZCKQkrPSBkZXYtZmIubwotb2JqLSQoQ09ORklHX1MzQ19ERVZfVVNCX0hPU1QpCSs9IGRldi11c2Iubwotb2JqLSQoQ09ORklHX1MzQ19ERVZfVVNCX0hTT1RHKQkrPSBkZXYtdXNiLWhzb3RnLm8KLW9iai0kKENPTkZJR19TM0NfREVWX05BTkQpCSs9IGRldi1uYW5kLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXMzYy9jbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTljZmE4Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL2Nsb2NrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNjYgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2Nsb2NrLmMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwNC0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoKLSAqIFMzQzI0WFggQ29yZSBjbG9jayBjb250cm9sIHN1cHBvcnQKLSAqCi0gKiBCYXNlZCBvbiwgYW5kIGNvZGUgZnJvbSBsaW51eC9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9jbG9jay5jCi0gKioKLSAqKiAgQ29weXJpZ2h0IChDKSAyMDA0IEFSTSBMaW1pdGVkLgotICoqICBXcml0dGVuIGJ5IERlZXAgQmx1ZSBTb2x1dGlvbnMgTGltaXRlZC4KLSAqCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS5oPgotCi0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0KLS8qIGNsb2NrIGluZm9ybWF0aW9uICovCi0KLXN0YXRpYyBMSVNUX0hFQUQoY2xvY2tzKTsKLQotLyogV2Ugb3JpZ2luYWxseSB1c2VkIGFuIG11dGV4IGhlcmUsIGJ1dCBzb21lIGNvbnRleHRzIChzZWUgcmVzdW1lKQotICogYXJlIGNhbGxpbmcgZnVuY3Rpb25zIHN1Y2ggYXMgY2xrX3NldF9wYXJlbnQoKSB3aXRoIElSUXMgZGlzYWJsZWQKLSAqIGNhdXNpbmcgYW4gQlVHIHRvIGJlIHRyaWdnZXJlZC4KLSAqLwotREVGSU5FX1NQSU5MT0NLKGNsb2Nrc19sb2NrKTsKLQotLyogZW5hYmxlIGFuZCBkaXNhYmxlIGNhbGxzIGZvciB1c2Ugd2l0aCB0aGUgY2xrIHN0cnVjdCAqLwotCi1zdGF0aWMgaW50IGNsa19udWxsX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIENsb2NrIEFQSSBjYWxscyAqLwotCi1zdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCi17Ci0Jc3RydWN0IGNsayAqcDsKLQlzdHJ1Y3QgY2xrICpjbGsgPSBFUlJfUFRSKC1FTk9FTlQpOwotCWludCBpZG5vOwotCi0JaWYgKGRldiA9PSBOVUxMIHx8IGRldi0+YnVzICE9ICZwbGF0Zm9ybV9idXNfdHlwZSkKLQkJaWRubyA9IC0xOwotCWVsc2UKLQkJaWRubyA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpLT5pZDsKLQotCXNwaW5fbG9jaygmY2xvY2tzX2xvY2spOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBsaXN0KSB7Ci0JCWlmIChwLT5pZCA9PSBpZG5vICYmCi0JCSAgICBzdHJjbXAoaWQsIHAtPm5hbWUpID09IDAgJiYKLQkJICAgIHRyeV9tb2R1bGVfZ2V0KHAtPm93bmVyKSkgewotCQkJY2xrID0gcDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyogY2hlY2sgZm9yIHRoZSBjYXNlIHdoZXJlIGEgZGV2aWNlIHdhcyBzdXBwbGllZCwgYnV0IHRoZQotCSAqIGNsb2NrIHRoYXQgd2FzIGJlaW5nIHNlYXJjaGVkIGZvciBpcyBub3QgZGV2aWNlIHNwZWNpZmljICovCi0KLQlpZiAoSVNfRVJSKGNsaykpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmY2xvY2tzLCBsaXN0KSB7Ci0JCQlpZiAocC0+aWQgPT0gLTEgJiYgc3RyY21wKGlkLCBwLT5uYW1lKSA9PSAwICYmCi0JCQkgICAgdHJ5X21vZHVsZV9nZXQocC0+b3duZXIpKSB7Ci0JCQkJY2xrID0gcDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCXNwaW5fdW5sb2NrKCZjbG9ja3NfbG9jayk7Ci0JcmV0dXJuIGNsazsKLX0KLQotdm9pZCBjbGtfcHV0KHN0cnVjdCBjbGsgKmNsaykKLXsKLQltb2R1bGVfcHV0KGNsay0+b3duZXIpOwotfQotCi1pbnQgY2xrX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaWYgKElTX0VSUihjbGspIHx8IGNsayA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNsa19lbmFibGUoY2xrLT5wYXJlbnQpOwotCi0Jc3Bpbl9sb2NrKCZjbG9ja3NfbG9jayk7Ci0KLQlpZiAoKGNsay0+dXNhZ2UrKykgPT0gMCkKLQkJKGNsay0+ZW5hYmxlKShjbGssIDEpOwotCi0Jc3Bpbl91bmxvY2soJmNsb2Nrc19sb2NrKTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBjbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaWYgKElTX0VSUihjbGspIHx8IGNsayA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlzcGluX2xvY2soJmNsb2Nrc19sb2NrKTsKLQotCWlmICgoLS1jbGstPnVzYWdlKSA9PSAwKQotCQkoY2xrLT5lbmFibGUpKGNsaywgMCk7Ci0KLQlzcGluX3VubG9jaygmY2xvY2tzX2xvY2spOwotCWNsa19kaXNhYmxlKGNsay0+cGFyZW50KTsKLX0KLQotCi11bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JaWYgKElTX0VSUihjbGspKQotCQlyZXR1cm4gMDsKLQotCWlmIChjbGstPnJhdGUgIT0gMCkKLQkJcmV0dXJuIGNsay0+cmF0ZTsKLQotCWlmIChjbGstPmdldF9yYXRlICE9IE5VTEwpCi0JCXJldHVybiAoY2xrLT5nZXRfcmF0ZSkoY2xrKTsKLQotCWlmIChjbGstPnBhcmVudCAhPSBOVUxMKQotCQlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCXJldHVybiBjbGstPnJhdGU7Ci19Ci0KLWxvbmcgY2xrX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JaWYgKCFJU19FUlIoY2xrKSAmJiBjbGstPnJvdW5kX3JhdGUpCi0JCXJldHVybiAoY2xrLT5yb3VuZF9yYXRlKShjbGssIHJhdGUpOwotCi0JcmV0dXJuIHJhdGU7Ci19Ci0KLWludCBjbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JaW50IHJldDsKLQotCWlmIChJU19FUlIoY2xrKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBXZSBkbyBub3QgZGVmYXVsdCBqdXN0IGRvIGEgY2xrLT5yYXRlID0gcmF0ZSBhcwotCSAqIHRoZSBjbG9jayBtYXkgaGF2ZSBiZWVuIG1hZGUgdGhpcyB3YXkgYnkgY2hvaWNlLgotCSAqLwotCi0JV0FSTl9PTihjbGstPnNldF9yYXRlID09IE5VTEwpOwotCi0JaWYgKGNsay0+c2V0X3JhdGUgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzcGluX2xvY2soJmNsb2Nrc19sb2NrKTsKLQlyZXQgPSAoY2xrLT5zZXRfcmF0ZSkoY2xrLCByYXRlKTsKLQlzcGluX3VubG9jaygmY2xvY2tzX2xvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RydWN0IGNsayAqY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBjbGstPnBhcmVudDsKLX0KLQotaW50IGNsa19zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQotewotCWludCByZXQgPSAwOwotCi0JaWYgKElTX0VSUihjbGspKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNwaW5fbG9jaygmY2xvY2tzX2xvY2spOwotCi0JaWYgKGNsay0+c2V0X3BhcmVudCkKLQkJcmV0ID0gKGNsay0+c2V0X3BhcmVudCkoY2xrLCBwYXJlbnQpOwotCi0Jc3Bpbl91bmxvY2soJmNsb2Nrc19sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLUVYUE9SVF9TWU1CT0woY2xrX2dldCk7Ci1FWFBPUlRfU1lNQk9MKGNsa19wdXQpOwotRVhQT1JUX1NZTUJPTChjbGtfZW5hYmxlKTsKLUVYUE9SVF9TWU1CT0woY2xrX2Rpc2FibGUpOwotRVhQT1JUX1NZTUJPTChjbGtfZ2V0X3JhdGUpOwotRVhQT1JUX1NZTUJPTChjbGtfcm91bmRfcmF0ZSk7Ci1FWFBPUlRfU1lNQk9MKGNsa19zZXRfcmF0ZSk7Ci1FWFBPUlRfU1lNQk9MKGNsa19nZXRfcGFyZW50KTsKLUVYUE9SVF9TWU1CT0woY2xrX3NldF9wYXJlbnQpOwotCi0vKiBiYXNlIGNsb2NrcyAqLwotCi1zdGF0aWMgaW50IGNsa19kZWZhdWx0X3NldHJhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JY2xrLT5yYXRlID0gcmF0ZTsKLQlyZXR1cm4gMDsKLX0KLQotc3RydWN0IGNsayBjbGtfeHRhbCA9IHsKLQkubmFtZQkJPSAieHRhbCIsCi0JLmlkCQk9IC0xLAotCS5yYXRlCQk9IDAsCi0JLnBhcmVudAkJPSBOVUxMLAotCS5jdHJsYml0CT0gMCwKLX07Ci0KLXN0cnVjdCBjbGsgY2xrX2V4dCA9IHsKLQkubmFtZQkJPSAiZXh0IiwKLQkuaWQJCT0gLTEsCi19OwotCi1zdHJ1Y3QgY2xrIGNsa19lcGxsID0gewotCS5uYW1lCQk9ICJlcGxsIiwKLQkuaWQJCT0gLTEsCi19OwotCi1zdHJ1Y3QgY2xrIGNsa19tcGxsID0gewotCS5uYW1lCQk9ICJtcGxsIiwKLQkuaWQJCT0gLTEsCi0JLnNldF9yYXRlCT0gY2xrX2RlZmF1bHRfc2V0cmF0ZSwKLX07Ci0KLXN0cnVjdCBjbGsgY2xrX3VwbGwgPSB7Ci0JLm5hbWUJCT0gInVwbGwiLAotCS5pZAkJPSAtMSwKLQkucGFyZW50CQk9IE5VTEwsCi0JLmN0cmxiaXQJPSAwLAotfTsKLQotc3RydWN0IGNsayBjbGtfZiA9IHsKLQkubmFtZQkJPSAiZmNsayIsCi0JLmlkCQk9IC0xLAotCS5yYXRlCQk9IDAsCi0JLnBhcmVudAkJPSAmY2xrX21wbGwsCi0JLmN0cmxiaXQJPSAwLAotCS5zZXRfcmF0ZQk9IGNsa19kZWZhdWx0X3NldHJhdGUsCi19OwotCi1zdHJ1Y3QgY2xrIGNsa19oID0gewotCS5uYW1lCQk9ICJoY2xrIiwKLQkuaWQJCT0gLTEsCi0JLnJhdGUJCT0gMCwKLQkucGFyZW50CQk9IE5VTEwsCi0JLmN0cmxiaXQJPSAwLAotCS5zZXRfcmF0ZQk9IGNsa19kZWZhdWx0X3NldHJhdGUsCi19OwotCi1zdHJ1Y3QgY2xrIGNsa19wID0gewotCS5uYW1lCQk9ICJwY2xrIiwKLQkuaWQJCT0gLTEsCi0JLnJhdGUJCT0gMCwKLQkucGFyZW50CQk9IE5VTEwsCi0JLmN0cmxiaXQJPSAwLAotCS5zZXRfcmF0ZQk9IGNsa19kZWZhdWx0X3NldHJhdGUsCi19OwotCi1zdHJ1Y3QgY2xrIGNsa191c2JfYnVzID0gewotCS5uYW1lCQk9ICJ1c2ItYnVzIiwKLQkuaWQJCT0gLTEsCi0JLnJhdGUJCT0gMCwKLQkucGFyZW50CQk9ICZjbGtfdXBsbCwKLX07Ci0KLQotCi1zdHJ1Y3QgY2xrIHMzYzI0eHhfdWNsayA9IHsKLQkubmFtZQkJPSAidWNsayIsCi0JLmlkCQk9IC0xLAotfTsKLQotLyogaW5pdGlhbGlzZSB0aGUgY2xvY2sgc3lzdGVtICovCi0KLWludCBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlpZiAoY2xrLT5lbmFibGUgPT0gTlVMTCkKLQkJY2xrLT5lbmFibGUgPSBjbGtfbnVsbF9lbmFibGU7Ci0KLQkvKiBhZGQgdG8gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNsb2NrcyAqLwotCi0JLyogUXVpY2sgY2hlY2sgdG8gc2VlIGlmIHRoaXMgY2xvY2sgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkLiAqLwotCUJVR19PTihjbGstPmxpc3QucHJldiAhPSBjbGstPmxpc3QubmV4dCk7Ci0KLQlzcGluX2xvY2soJmNsb2Nrc19sb2NrKTsKLQlsaXN0X2FkZCgmY2xrLT5saXN0LCAmY2xvY2tzKTsKLQlzcGluX3VubG9jaygmY2xvY2tzX2xvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrcyhzdHJ1Y3QgY2xrICoqY2xrcywgaW50IG5yX2Nsa3MpCi17Ci0JaW50IGZhaWxzID0gMDsKLQotCWZvciAoOyBucl9jbGtzID4gMDsgbnJfY2xrcy0tLCBjbGtzKyspIHsKLQkJaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soKmNsa3MpIDwgMCkKLQkJCWZhaWxzKys7Ci0JfQotCi0JcmV0dXJuIGZhaWxzOwotfQotCi0vKiBpbml0YWxpc2UgYWxsIHRoZSBjbG9ja3MgKi8KLQotaW50IF9faW5pdCBzM2MyNHh4X3JlZ2lzdGVyX2Jhc2VjbG9ja3ModW5zaWduZWQgbG9uZyB4dGFsKQotewotCXByaW50ayhLRVJOX0lORk8gIlMzQzI0WFggQ2xvY2tzLCBDb3B5cmlnaHQgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3NcbiIpOwotCi0JY2xrX3h0YWwucmF0ZSA9IHh0YWw7Ci0KLQkvKiByZWdpc3RlciBvdXIgY2xvY2tzICovCi0KLQlpZiAoczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmY2xrX3h0YWwpIDwgMCkKLQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgbWFzdGVyIHh0YWxcbiIpOwotCi0JaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa19tcGxsKSA8IDApCi0JCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIG1wbGwgY2xvY2tcbiIpOwotCi0JaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa191cGxsKSA8IDApCi0JCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIHVwbGwgY2xvY2tcbiIpOwotCi0JaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa19mKSA8IDApCi0JCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNwdSBmY2xrXG4iKTsKLQotCWlmIChzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZjbGtfaCkgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZWdpc3RlciBjcHUgaGNsa1xuIik7Ci0KLQlpZiAoczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmY2xrX3ApIDwgMCkKLQkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgY3B1IHBjbGtcbiIpOwotCi0JcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2Rldi11c2ItaHNvdGcuYyBiL2FyY2gvYXJtL3BsYXQtczNjL2Rldi11c2ItaHNvdGcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJmNjA0Yi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9kZXYtdXNiLWhzb3RnLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYy9kZXYtdXNiLWhzb3RnLmMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogUzNDIHNlcmllcyBkZXZpY2UgZGVmaW5pdGlvbiBmb3IgVVNCIGhpZ2gtc3BlZWQgVURDL090RyBibG9jawotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxtYWNoL21hcC5oPgotCi0jaW5jbHVkZSA8cGxhdC9kZXZzLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX3VzYl9oc290Z19yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydAk9IFMzQ19QQV9VU0JfSFNPVEcsCi0JCS5lbmQJPSBTM0NfUEFfVVNCX0hTT1RHICsgMHgxMDAwMCAtIDEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBJUlFfT1RHLAotCQkuZW5kCT0gSVJRX09URywKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV91c2JfaHNvdGcgPSB7Ci0JLm5hbWUJCT0gInMzYy1oc290ZyIsCi0JLmlkCQk9IC0xLAotCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzM2NfdXNiX2hzb3RnX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gczNjX3VzYl9oc290Z19yZXNvdXJjZXMsCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvZGV2LXVzYi5jIGIvYXJjaC9hcm0vcGxhdC1zM2MvZGV2LXVzYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZWU4NWFiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL2Rldi11c2IuYworKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjL2Rldi11c2IuYwotICoKLSAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBTM0Mgc2VyaWVzIGRldmljZSBkZWZpbml0aW9uIGZvciBVU0IgaG9zdAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2lycXMuaD4KLSNpbmNsdWRlIDxtYWNoL21hcC5oPgotCi0jaW5jbHVkZSA8cGxhdC9kZXZzLmg+Ci0KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfdXNiX3Jlc291cmNlW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgPSBTM0NfUEFfVVNCSE9TVCwKLQkJLmVuZCAgID0gUzNDX1BBX1VTQkhPU1QgKyAweDEwMCAtIDEsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgPSBJUlFfVVNCSCwKLQkJLmVuZCAgID0gSVJRX1VTQkgsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0YXRpYyB1NjQgczNjX2RldmljZV91c2JfZG1hbWFzayA9IDB4ZmZmZmZmZmZVTDsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3VzYiA9IHsKLQkubmFtZQkJICA9ICJzM2MyNDEwLW9oY2kiLAotCS5pZAkJICA9IC0xLAotCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzY191c2JfcmVzb3VyY2UpLAotCS5yZXNvdXJjZQkgID0gczNjX3VzYl9yZXNvdXJjZSwKLQkuZGV2ICAgICAgICAgICAgICA9IHsKLQkJLmRtYV9tYXNrID0gJnMzY19kZXZpY2VfdXNiX2RtYW1hc2ssCi0JCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmZVTAotCX0KLX07Ci0KLUVYUE9SVF9TWU1CT0woczNjX2RldmljZV91c2IpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvZG1hLmMgYi9hcmNoL2FybS9wbGF0LXMzYy9kbWEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk5NTg1MC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9kbWEuYworKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjL2RtYS5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAzLTIwMDkgU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICoKLSAqIFMzQyBETUEgY29yZQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi1zdHJ1Y3QgczNjMjQxMF9kbWFfYnVmOwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLQotI2luY2x1ZGUgPG1hY2gvZG1hLmg+Ci0jaW5jbHVkZSA8bWFjaC9pcnFzLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L2RtYS1wbGF0Lmg+Ci0KLS8qIGRtYSBjaGFubmVsIHN0YXRlIGluZm9ybWF0aW9uICovCi1zdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiBzM2MyNDEwX2NoYW5zW1MzQ19ETUFfQ0hBTk5FTFNdOwotc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKnMzY19kbWFfY2hhbl9tYXBbRE1BQ0hfTUFYXTsKLQotLyogczNjX2RtYV9sb29rdXBfY2hhbm5lbAotICoKLSAqIGNoYW5nZSB0aGUgZG1hIGNoYW5uZWwgbnVtYmVyIGdpdmVuIGludG8gYSByZWFsIGRtYSBjaGFubmVsIGlkCi0qLwotCi1zdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqczNjX2RtYV9sb29rdXBfY2hhbm5lbCh1bnNpZ25lZCBpbnQgY2hhbm5lbCkKLXsKLQlpZiAoY2hhbm5lbCAmIERNQUNIX0xPV19MRVZFTCkKLQkJcmV0dXJuICZzM2MyNDEwX2NoYW5zW2NoYW5uZWwgJiB+RE1BQ0hfTE9XX0xFVkVMXTsKLQllbHNlCi0JCXJldHVybiBzM2NfZG1hX2NoYW5fbWFwW2NoYW5uZWxdOwotfQotCi0vKiBkbyB3ZSBuZWVkIHRvIHByb3RlY3QgdGhlIHNldHRpbmdzIG9mIHRoZSBmaWVsZHMgZnJvbQotICogaXJxPwotKi8KLQotaW50IHMzYzI0MTBfZG1hX3NldF9vcGZuKHVuc2lnbmVkIGludCBjaGFubmVsLCBzM2MyNDEwX2RtYV9vcGZuX3QgcnRuKQotewotCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gczNjX2RtYV9sb29rdXBfY2hhbm5lbChjaGFubmVsKTsKLQotCWlmIChjaGFuID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcHJfZGVidWcoIiVzOiBjaGFuPSVwLCBvcCBydG49JXBcbiIsIF9fZnVuY19fLCBjaGFuLCBydG4pOwotCi0JY2hhbi0+b3BfZm4gPSBydG47Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfc2V0X29wZm4pOwotCi1pbnQgczNjMjQxMF9kbWFfc2V0X2J1ZmZkb25lX2ZuKHVuc2lnbmVkIGludCBjaGFubmVsLCBzM2MyNDEwX2RtYV9jYmZuX3QgcnRuKQotewotCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gczNjX2RtYV9sb29rdXBfY2hhbm5lbChjaGFubmVsKTsKLQotCWlmIChjaGFuID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcHJfZGVidWcoIiVzOiBjaGFuPSVwLCBjYWxsYmFjayBydG49JXBcbiIsIF9fZnVuY19fLCBjaGFuLCBydG4pOwotCi0JY2hhbi0+Y2FsbGJhY2tfZm4gPSBydG47Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woczNjMjQxMF9kbWFfc2V0X2J1ZmZkb25lX2ZuKTsKLQotaW50IHMzYzI0MTBfZG1hX3NldGZsYWdzKHVuc2lnbmVkIGludCBjaGFubmVsLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCi17Ci0Jc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSBzM2NfZG1hX2xvb2t1cF9jaGFubmVsKGNoYW5uZWwpOwotCi0JaWYgKGNoYW4gPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQljaGFuLT5mbGFncyA9IGZsYWdzOwotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9zZXRmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9ncGlvLWNvbmZpZy5jIGIvYXJjaC9hcm0vcGxhdC1zM2MvZ3Bpby1jb25maWcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDU2OTY5Yi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9ncGlvLWNvbmZpZy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY2ICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjL2dwaW8tY29uZmlnLmMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICoKLSAqIFMzQyBzZXJpZXMgR1BJTyBjb25maWd1cmF0aW9uIGNvcmUKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSA8bWFjaC9ncGlvLWNvcmUuaD4KLSNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+Ci0jaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy1oZWxwZXJzLmg+Ci0KLWludCBzM2NfZ3Bpb19jZmdwaW4odW5zaWduZWQgaW50IHBpbiwgdW5zaWduZWQgaW50IGNvbmZpZykKLXsKLQlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCA9IHMzY19ncGlvbGliX2dldGNoaXAocGluKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBvZmZzZXQ7Ci0JaW50IHJldDsKLQotCWlmICghY2hpcCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlvZmZzZXQgPSBwaW4gLSBjaGlwLT5jaGlwLmJhc2U7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JcmV0ID0gczNjX2dwaW9fZG9fc2V0Y2ZnKGNoaXAsIG9mZnNldCwgY29uZmlnKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChzM2NfZ3Bpb19jZmdwaW4pOwotCi1pbnQgczNjX2dwaW9fc2V0cHVsbCh1bnNpZ25lZCBpbnQgcGluLCBzM2NfZ3Bpb19wdWxsX3QgcHVsbCkKLXsKLQlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCA9IHMzY19ncGlvbGliX2dldGNoaXAocGluKTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBvZmZzZXQsIHJldDsKLQotCWlmICghY2hpcCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlvZmZzZXQgPSBwaW4gLSBjaGlwLT5jaGlwLmJhc2U7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JcmV0ID0gczNjX2dwaW9fZG9fc2V0cHVsbChjaGlwLCBvZmZzZXQsIHB1bGwpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHMzY19ncGlvX3NldHB1bGwpOwotCi0jaWZkZWYgQ09ORklHX1MzQ19HUElPX0NGR19TM0MyNFhYCi1pbnQgczNjX2dwaW9fc2V0Y2ZnX3MzYzI0eHhfYmFua2Eoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCi0JCQkJICB1bnNpZ25lZCBpbnQgb2ZmLCB1bnNpZ25lZCBpbnQgY2ZnKQotewotCXZvaWQgX19pb21lbSAqcmVnID0gY2hpcC0+YmFzZTsKLQl1bnNpZ25lZCBpbnQgc2hpZnQgPSBvZmY7Ci0JdTMyIGNvbjsKLQotCWlmIChzM2NfZ3Bpb19pc19jZmdfc3BlY2lhbChjZmcpKSB7Ci0JCWNmZyAmPSAweGY7Ci0KLQkJLyogTWFwIG91dHB1dCB0byAwLCBhbmQgU0ZOMiB0byAxICovCi0JCWNmZyAtPSAxOwotCQlpZiAoY2ZnID4gMSkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWNmZyA8PD0gc2hpZnQ7Ci0JfQotCi0JY29uID0gX19yYXdfcmVhZGwocmVnKTsKLQljb24gJj0gfigweDEgPDwgc2hpZnQpOwotCWNvbiB8PSBjZmc7Ci0JX19yYXdfd3JpdGVsKGNvbiwgcmVnKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgczNjX2dwaW9fc2V0Y2ZnX3MzYzI0eHgoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCi0JCQkgICAgdW5zaWduZWQgaW50IG9mZiwgdW5zaWduZWQgaW50IGNmZykKLXsKLQl2b2lkIF9faW9tZW0gKnJlZyA9IGNoaXAtPmJhc2U7Ci0JdW5zaWduZWQgaW50IHNoaWZ0ID0gb2ZmICogMjsKLQl1MzIgY29uOwotCi0JaWYgKHMzY19ncGlvX2lzX2NmZ19zcGVjaWFsKGNmZykpIHsKLQkJY2ZnICY9IDB4ZjsKLQkJaWYgKGNmZyA+IDMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQljZmcgPDw9IHNoaWZ0OwotCX0KLQotCWNvbiA9IF9fcmF3X3JlYWRsKHJlZyk7Ci0JY29uICY9IH4oMHgzIDw8IHNoaWZ0KTsKLQljb24gfD0gY2ZnOwotCV9fcmF3X3dyaXRlbChjb24sIHJlZyk7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1MzQ19HUElPX0NGR19TM0M2NFhYCi1pbnQgczNjX2dwaW9fc2V0Y2ZnX3MzYzY0eHhfNGJpdChzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKLQkJCQkgdW5zaWduZWQgaW50IG9mZiwgdW5zaWduZWQgaW50IGNmZykKLXsKLQl2b2lkIF9faW9tZW0gKnJlZyA9IGNoaXAtPmJhc2U7Ci0JdW5zaWduZWQgaW50IHNoaWZ0ID0gKG9mZiAmIDcpICogNDsKLQl1MzIgY29uOwotCi0JaWYgKG9mZiA8IDggJiYgY2hpcC0+Y2hpcC5uZ3BpbyA+IDgpCi0JCXJlZyAtPSA0OwotCi0JaWYgKHMzY19ncGlvX2lzX2NmZ19zcGVjaWFsKGNmZykpIHsKLQkJY2ZnICY9IDB4ZjsKLQkJY2ZnIDw8PSBzaGlmdDsKLQl9Ci0KLQljb24gPSBfX3Jhd19yZWFkbChyZWcpOwotCWNvbiAmPSB+KDB4ZiA8PCBzaGlmdCk7Ci0JY29uIHw9IGNmZzsKLQlfX3Jhd193cml0ZWwoY29uLCByZWcpOwotCi0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYgLyogQ09ORklHX1MzQ19HUElPX0NGR19TM0M2NFhYICovCi0KLSNpZmRlZiBDT05GSUdfUzNDX0dQSU9fUFVMTF9VUERPV04KLWludCBzM2NfZ3Bpb19zZXRwdWxsX3VwZG93bihzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKLQkJCSAgICB1bnNpZ25lZCBpbnQgb2ZmLCBzM2NfZ3Bpb19wdWxsX3QgcHVsbCkKLXsKLQl2b2lkIF9faW9tZW0gKnJlZyA9IGNoaXAtPmJhc2UgKyAweDA4OwotCWludCBzaGlmdCA9IG9mZiAqIDI7Ci0JdTMyIHB1cDsKLQotCXB1cCA9IF9fcmF3X3JlYWRsKHJlZyk7Ci0JcHVwICY9IH4oMyA8PCBzaGlmdCk7Ci0JcHVwIHw9IHB1bGwgPDwgc2hpZnQ7Ci0JX19yYXdfd3JpdGVsKHB1cCwgcmVnKTsKLQotCXJldHVybiAwOwotfQotCi1zM2NfZ3Bpb19wdWxsX3QgczNjX2dwaW9fZ2V0cHVsbF91cGRvd24oc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCi0JCQkJCXVuc2lnbmVkIGludCBvZmYpCi17Ci0Jdm9pZCBfX2lvbWVtICpyZWcgPSBjaGlwLT5iYXNlICsgMHgwODsKLQlpbnQgc2hpZnQgPSBvZmYgKiAyOwotCXUzMiBwdXAgPSBfX3Jhd19yZWFkbChyZWcpOwotCi0JcHVwID4+PSBzaGlmdDsKLQlwdXAgJj0gMHgzOwotCXJldHVybiAoX19mb3JjZSBzM2NfZ3Bpb19wdWxsX3QpcHVwOwotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9ncGlvLmMgYi9hcmNoL2FybS9wbGF0LXMzYy9ncGlvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVmZjI0ZTAuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvZ3Bpby5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjL2dwaW8uYwotICoKLSAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBTM0Mgc2VyaWVzIEdQSU8gY29yZQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotCi0jaW5jbHVkZSA8bWFjaC9ncGlvLWNvcmUuaD4KLQotI2lmZGVmIENPTkZJR19TM0NfR1BJT19UUkFDSwotc3RydWN0IHMzY19ncGlvX2NoaXAgKnMzY19ncGlvc1tTM0NfR1BJT19FTkRdOwotCi1zdGF0aWMgX19pbml0IHZvaWQgczNjX2dwaW9saWJfdHJhY2soc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXApCi17Ci0JdW5zaWduZWQgaW50IGdwbjsKLQlpbnQgaTsKLQotCWdwbiA9IGNoaXAtPmNoaXAuYmFzZTsKLQlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+Y2hpcC5uZ3BpbzsgaSsrLCBncG4rKykgewotCQlCVUdfT04oZ3BuID49IEFSUkFZX1NJWkUoczNjX2dwaW9zKSk7Ci0JCXMzY19ncGlvc1tncG5dID0gY2hpcDsKLQl9Ci19Ci0jZW5kaWYgLyogQ09ORklHX1MzQ19HUElPX1RSQUNLICovCi0KLS8qIERlZmF1bHQgcm91dGluZXMgZm9yIGNvbnRyb2xsaW5nIEdQSU8sIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBTM0MyNFhYCi0gKiBHUElPIGZ1bmN0aW9ucyB3aGljaCBkZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgZWFjaCBncGlvIGJhbmsgb2YgdGhlCi0gKiBjaGlwIGlzIGFzIGZvbGxvd2luZzoKLSAqCi0gKiBiYXNlICsgMHgwMDogQ29udHJvbCByZWdpc3RlciwgMiBiaXRzIHBlciBncGlvCi0gKgkgICAgICAgIGdwaW8gbjogMiBiaXRzIHN0YXJ0aW5nIGF0ICgyKm4pCi0gKgkJMDAgPSBpbnB1dCwgMDEgPSBvdXRwdXQsIG90aGVycyBtZWFuIHNwZWNpYWwtZnVuY3Rpb24KLSAqIGJhc2UgKyAweDA0OiBEYXRhIHJlZ2lzdGVyLCAxIGJpdCBwZXIgZ3BpbwotICoJCWJpdCBuOiBkYXRhIGJpdCBuCi0qLwotCi1zdGF0aWMgaW50IHMzY19ncGlvbGliX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKLXsKLQlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqb3VyY2hpcCA9IHRvX3MzY19ncGlvKGNoaXApOwotCXZvaWQgX19pb21lbSAqYmFzZSA9IG91cmNoaXAtPmJhc2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIGNvbjsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCWNvbiA9IF9fcmF3X3JlYWRsKGJhc2UgKyAweDAwKTsKLQljb24gJj0gfigzIDw8IChvZmZzZXQgKiAyKSk7Ci0KLQlfX3Jhd193cml0ZWwoY29uLCBiYXNlICsgMHgwMCk7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczNjX2dwaW9saWJfb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCi0JCQkgICAgICB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKLXsKLQlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqb3VyY2hpcCA9IHRvX3MzY19ncGlvKGNoaXApOwotCXZvaWQgX19pb21lbSAqYmFzZSA9IG91cmNoaXAtPmJhc2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIGRhdDsKLQl1bnNpZ25lZCBsb25nIGNvbjsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCWRhdCA9IF9fcmF3X3JlYWRsKGJhc2UgKyAweDA0KTsKLQlkYXQgJj0gfigxIDw8IG9mZnNldCk7Ci0JaWYgKHZhbHVlKQotCQlkYXQgfD0gMSA8PCBvZmZzZXQ7Ci0JX19yYXdfd3JpdGVsKGRhdCwgYmFzZSArIDB4MDQpOwotCi0JY29uID0gX19yYXdfcmVhZGwoYmFzZSArIDB4MDApOwotCWNvbiAmPSB+KDMgPDwgKG9mZnNldCAqIDIpKTsKLQljb24gfD0gMSA8PCAob2Zmc2V0ICogMik7Ci0KLQlfX3Jhd193cml0ZWwoY29uLCBiYXNlICsgMHgwMCk7Ci0JX19yYXdfd3JpdGVsKGRhdCwgYmFzZSArIDB4MDQpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzM2NfZ3Bpb2xpYl9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKLQkJCSAgICB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKLXsKLQlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqb3VyY2hpcCA9IHRvX3MzY19ncGlvKGNoaXApOwotCXZvaWQgX19pb21lbSAqYmFzZSA9IG91cmNoaXAtPmJhc2U7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIGRhdDsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCWRhdCA9IF9fcmF3X3JlYWRsKGJhc2UgKyAweDA0KTsKLQlkYXQgJj0gfigxIDw8IG9mZnNldCk7Ci0JaWYgKHZhbHVlKQotCQlkYXQgfD0gMSA8PCBvZmZzZXQ7Ci0JX19yYXdfd3JpdGVsKGRhdCwgYmFzZSArIDB4MDQpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1zdGF0aWMgaW50IHMzY19ncGlvbGliX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0Jc3RydWN0IHMzY19ncGlvX2NoaXAgKm91cmNoaXAgPSB0b19zM2NfZ3BpbyhjaGlwKTsKLQl1bnNpZ25lZCBsb25nIHZhbDsKLQotCXZhbCA9IF9fcmF3X3JlYWRsKG91cmNoaXAtPmJhc2UgKyAweDA0KTsKLQl2YWwgPj49IG9mZnNldDsKLQl2YWwgJj0gMTsKLQotCXJldHVybiB2YWw7Ci19Ci0KLV9faW5pdCB2b2lkIHMzY19ncGlvbGliX2FkZChzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCkKLXsKLQlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9ICZjaGlwLT5jaGlwOwotCWludCByZXQ7Ci0KLQlCVUdfT04oIWNoaXAtPmJhc2UpOwotCUJVR19PTighZ2MtPmxhYmVsKTsKLQlCVUdfT04oIWdjLT5uZ3Bpbyk7Ci0KLQlpZiAoIWdjLT5kaXJlY3Rpb25faW5wdXQpCi0JCWdjLT5kaXJlY3Rpb25faW5wdXQgPSBzM2NfZ3Bpb2xpYl9pbnB1dDsKLQlpZiAoIWdjLT5kaXJlY3Rpb25fb3V0cHV0KQotCQlnYy0+ZGlyZWN0aW9uX291dHB1dCA9IHMzY19ncGlvbGliX291dHB1dDsKLQlpZiAoIWdjLT5zZXQpCi0JCWdjLT5zZXQgPSBzM2NfZ3Bpb2xpYl9zZXQ7Ci0JaWYgKCFnYy0+Z2V0KQotCQlnYy0+Z2V0ID0gczNjX2dwaW9saWJfZ2V0OwotCi0jaWZkZWYgQ09ORklHX1BNCi0JaWYgKGNoaXAtPnBtICE9IE5VTEwpIHsKLQkJaWYgKCFjaGlwLT5wbS0+c2F2ZSB8fCAhY2hpcC0+cG0tPnJlc3VtZSkKLQkJCXByaW50ayhLRVJOX0VSUiAiZ3BpbzogJXMgaGFzIG1pc3NpbmcgUE0gZnVuY3Rpb25zXG4iLAotCQkJICAgICAgIGdjLT5sYWJlbCk7Ci0JfSBlbHNlCi0JCXByaW50ayhLRVJOX0VSUiAiZ3BpbzogJXMgaGFzIG5vIFBNIGZ1bmN0aW9uXG4iLCBnYy0+bGFiZWwpOwotI2VuZGlmCi0KLQkvKiBncGlvY2hpcF9hZGQoKSBwcmludHMgb3duIGZhaWx1cmUgbWVzc2FnZSBvbiBlcnJvci4gKi8KLQlyZXQgPSBncGlvY2hpcF9hZGQoZ2MpOwotCWlmIChyZXQgPj0gMCkKLQkJczNjX2dwaW9saWJfdHJhY2soY2hpcCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL21hY2gvaW8uaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvbWFjaC9pby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNmE1MzYzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvbWFjaC9pby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLyogYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9tYWNoL2lvLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCUJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KLSAqCi0gKiBEZWZhdWx0IElPIHJvdXRpbmVzIGZvciBwbGF0LXMzYyBiYXNlZCBzeXN0ZW1zLCBzdWNoIGFzIFMzQzI0QTAKLSAqLwotCi0jaWZuZGVmIF9fQVNNX0FSTV9BUkNIX0lPX0gKLSNkZWZpbmUgX19BU01fQVJNX0FSQ0hfSU9fSAotCi0vKiBObyBjdXJyZW50IElTQS9QQ0kgYnVzIHN1cHBvcnQuICovCi0jZGVmaW5lIF9faW8oYSkJCV9fdHlwZXNhZmVfaW8oYSkKLSNkZWZpbmUgX19tZW1fcGNpKGEpCShhKQotCi0jZGVmaW5lIElPX1NQQUNFX0xJTUlUICgweEZGRkZGRkZGKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvbWFjaC90aW1leC5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9tYWNoL3RpbWV4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJhNDI1ZWQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9tYWNoL3RpbWV4LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0vKiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3RpbWV4LmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBTM0MyNDEwIC0gdGltZSBwYXJhbWV0ZXJzCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9USU1FWF9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfVElNRVhfSAotCi0vKiBDTE9DS19USUNLX1JBVEUgbmVlZHMgdG8gYmUgZXZhbHVhdGFibGUgYnkgdGhlIGNwcCwgc28gbWFraW5nIGl0Ci0gKiBhIHZhcmlhYmxlIGlzIHVzZWxlc3MuIEl0IHNlZW1zIGFzIGxvbmcgYXMgd2UgbWFrZSBvdXIgdGltZXJzIGFuCi0gKiBleGFjdCBtdWx0aXBsZSBvZiBIWiwgYW55IHZhbHVlIHRoYXQgbWFrZXMgYSAxLT4xIGNvcnJlc3BvbmRlbmNlCi0gKiBmb3IgdGhlIHRpbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgdG8vZnJvbSBqaWZmaWVzIGlzIGFjY2VwdGFibGUuCi0qLwotCi0KLSNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFIDEyMDAwMDAwCi0KLQotI2VuZGlmIC8qIF9fQVNNX0FSQ0hfVElNRVhfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5OWQ5NWYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9tYWNoL3ZtYWxsb2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS8qIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKLSAqCi0gKiBmcm9tIGFyY2gvYXJtL21hY2gtaW9wM3h4L2luY2x1ZGUvbWFjaC92bWFsbG9jLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDMgU2ltdGVjIEVsZWN0cm9uaWNzIDxsaW51eEBzaW10ZWMuY28udWs+Ci0gKgkJICAgICAgaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvU1dMSU5VWC8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFMzQzI0MTAgdm1hbGxvYyBkZWZpbml0aW9uCi0qLwotCi0jaWZuZGVmIF9fQVNNX0FSQ0hfVk1BTExPQ19ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfVk1BTExPQ19ICi0KLSNkZWZpbmUgVk1BTExPQ19FTkQJICAoMHhlMDAwMDAwMFVMKQotCi0jZW5kaWYgLyogX19BU01fQVJDSF9WTUFMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9hZGMuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9hZGMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWYzYjFjZC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvYWRjLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0vKiBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvYWRjLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglodHRwOi8vYXJtbGludXguc2ltbnRlLmNvLnVrLwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoKLSAqIFMzQzI0WFggQURDIGRyaXZlciBpbmZvcm1hdGlvbgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaWZuZGVmIF9fQVNNX1BMQVRfQURDX0gKLSNkZWZpbmUgX19BU01fUExBVF9BRENfSCBfX0ZJTEVfXwotCi1zdHJ1Y3QgczNjX2FkY19jbGllbnQ7Ci0KLWV4dGVybiBpbnQgczNjX2FkY19zdGFydChzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwKLQkJCSB1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IG5yX3NhbXBsZXMpOwotCi1leHRlcm4gaW50IHMzY19hZGNfcmVhZChzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNoKTsKLQotZXh0ZXJuIHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqCi0JczNjX2FkY19yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkJIHZvaWQgKCpzZWxlY3QpKHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50LAotCQkJCQl1bnNpZ25lZCBzZWxlY3RlZCksCi0JCQkgdm9pZCAoKmNvbnYpKHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50LAotCQkJCSAgICAgIHVuc2lnbmVkIGQwLCB1bnNpZ25lZCBkMSwKLQkJCQkgICAgICB1bnNpZ25lZCAqc2FtcGxlc19sZWZ0KSwKLQkJCSB1bnNpZ25lZCBpbnQgaXNfdHMpOwotCi1leHRlcm4gdm9pZCBzM2NfYWRjX3JlbGVhc2Uoc3RydWN0IHMzY19hZGNfY2xpZW50ICpjbGllbnQpOwotCi0jZW5kaWYgLyogX19BU01fUExBVF9BRENfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2F1ZGlvLXNpbXRlYy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2F1ZGlvLXNpbXRlYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1M2E5MzY1Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9hdWRpby1zaW10ZWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLS8qIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9hdWRpby1zaW10ZWMuaAotICoKLSAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIFNpbXRlYyBBdWRpbyBzdXBwb3J0LgotKi8KLQotLyoqCi0gKiBzdHJ1Y3QgczNjMjR4eF9hdWRpb19zaW10ZWNfcGRhdGEgLSBwbGF0Zm9ybSBkYXRhIGZvciBzaW10ZWMgYXVkaW8KLSAqIEB1c2VfbXBsbGluOiBTZWxlY3QgY29kZWMgY2xvY2sgZnJvbSBNUExMaW4KLSAqIEBvdXRwdXRfY2RjbGs6IE5lZWQgdG8gb3V0cHV0IENEQ0xLIHRvIHRoZSBjb2RlYwotICogQGhhdmVfbWljOiBTZXQgaWYgd2UgaGF2ZSBhIE1JQyBzb2NrZXQKLSAqIEBoYXZlX2xvdXQ6IFNldCBpZiB3ZSBoYXZlIGEgTGluZU91dCBzb2NrZXQKLSAqIEBhbXBfZ3BpbzogR1BJTyBwaW4gdG8gZW5hYmxlIHRoZSBBTVAKLSAqIEBhbXBfZ2FpbjogT3B0aW9uIEdQSU8gdG8gY29udHJvbCBBTVAgZ2FpbgotICovCi1zdHJ1Y3QgczNjMjR4eF9hdWRpb19zaW10ZWNfcGRhdGEgewotCXVuc2lnbmVkIGludAl1c2VfbXBsbGluOjE7Ci0JdW5zaWduZWQgaW50CW91dHB1dF9jZGNsazoxOwotCi0JdW5zaWduZWQgaW50CWhhdmVfbWljOjE7Ci0JdW5zaWduZWQgaW50CWhhdmVfbG91dDoxOwotCi0JaW50CQlhbXBfZ3BpbzsKLQlpbnQJCWFtcF9nYWluWzJdOwotCi0Jdm9pZAkoKnN0YXJ0dXApKHZvaWQpOwotfTsKLQotZXh0ZXJuIGludCBzaW10ZWNfYXVkaW9fYWRkKGNvbnN0IGNoYXIgKmNvZGVjX25hbWUsIGJvb2wgaGFzX2xyX3JvdXRpbmcsCi0JCQkgICAgc3RydWN0IHMzYzI0eHhfYXVkaW9fc2ltdGVjX3BkYXRhICpwZGF0YSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvYXVkaW8uaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9hdWRpby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMjJkMjNiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9hdWRpby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyogYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2F1ZGlvLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4gTHRkCi0gKiBBdXRob3I6IEphc3dpbmRlciBTaW5naCA8amFzc2kuYnJhckBzYW1zdW5nLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLS8qKgotICogc3RydWN0IHMzY19hdWRpb19wZGF0YSAtIGNvbW1vbiBwbGF0Zm9ybSBkYXRhIGZvciBhdWRpbyBkZXZpY2UgZHJpdmVycwotICogQGNmZ19ncGlvOiBDYWxsYmFjayBmdW5jdGlvbiB0byBzZXR1cCBtdXgnZWQgcGlucyBpbiBJMlMvUENNL0FDOTcgbW9kZQotICovCi1zdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIHsKLQlpbnQgKCpjZmdfZ3Bpbykoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvY2xvY2suaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9jbG9jay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODZhZjg0Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9jbG9jay5oCisrKyAvZGV2L251bGwKQEAgLTEsODkgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCWh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL1NXTElOVVgvCi0gKglXcml0dGVuIGJ5IEJlbiBEb29rcywgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotCi1zdHJ1Y3QgY2xrIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgbGlzdDsKLQlzdHJ1Y3QgbW9kdWxlICAgICAgICAqb3duZXI7Ci0Jc3RydWN0IGNsayAgICAgICAgICAgKnBhcmVudDsKLQljb25zdCBjaGFyICAgICAgICAgICAqbmFtZTsKLQlpbnQJCSAgICAgIGlkOwotCWludAkJICAgICAgdXNhZ2U7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgIHJhdGU7Ci0JdW5zaWduZWQgbG9uZyAgICAgICAgIGN0cmxiaXQ7Ci0KLQlpbnQJCSAgICAoKmVuYWJsZSkoc3RydWN0IGNsayAqLCBpbnQgZW5hYmxlKTsKLQlpbnQJCSAgICAoKnNldF9yYXRlKShzdHJ1Y3QgY2xrICpjLCB1bnNpZ25lZCBsb25nIHJhdGUpOwotCXVuc2lnbmVkIGxvbmcJICAgICgqZ2V0X3JhdGUpKHN0cnVjdCBjbGsgKmMpOwotCXVuc2lnbmVkIGxvbmcJICAgICgqcm91bmRfcmF0ZSkoc3RydWN0IGNsayAqYywgdW5zaWduZWQgbG9uZyByYXRlKTsKLQlpbnQJCSAgICAoKnNldF9wYXJlbnQpKHN0cnVjdCBjbGsgKmMsIHN0cnVjdCBjbGsgKnBhcmVudCk7Ci19OwotCi0vKiBvdGhlciBjbG9ja3Mgd2hpY2ggbWF5IGJlIHJlZ2lzdGVyZWQgYnkgYm9hcmQgc3VwcG9ydCAqLwotCi1leHRlcm4gc3RydWN0IGNsayBzM2MyNHh4X2RjbGswOwotZXh0ZXJuIHN0cnVjdCBjbGsgczNjMjR4eF9kY2xrMTsKLWV4dGVybiBzdHJ1Y3QgY2xrIHMzYzI0eHhfY2xrb3V0MDsKLWV4dGVybiBzdHJ1Y3QgY2xrIHMzYzI0eHhfY2xrb3V0MTsKLWV4dGVybiBzdHJ1Y3QgY2xrIHMzYzI0eHhfdWNsazsKLQotZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX3VzYl9idXM7Ci0KLS8qIGNvcmUgY2xvY2sgc3VwcG9ydCAqLwotCi1leHRlcm4gc3RydWN0IGNsayBjbGtfZjsKLWV4dGVybiBzdHJ1Y3QgY2xrIGNsa19oOwotZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX3A7Ci1leHRlcm4gc3RydWN0IGNsayBjbGtfbXBsbDsKLWV4dGVybiBzdHJ1Y3QgY2xrIGNsa191cGxsOwotZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX2VwbGw7Ci1leHRlcm4gc3RydWN0IGNsayBjbGtfeHRhbDsKLWV4dGVybiBzdHJ1Y3QgY2xrIGNsa19leHQ7Ci0KLS8qIFMzQzY0WFggc3BlY2lmaWMgY2xvY2tzICovCi1leHRlcm4gc3RydWN0IGNsayBjbGtfaDI7Ci1leHRlcm4gc3RydWN0IGNsayBjbGtfMjdtOwotZXh0ZXJuIHN0cnVjdCBjbGsgY2xrXzQ4bTsKLQotLyogZXhwb3J0cyBmb3IgYXJjaC9hcm0vbWFjaC1zM2MyNDEwCi0gKgotICogUGxlYXNlIERPIE5PVCB1c2UgdGhlc2Ugb3V0c2lkZSBvZiBhcmNoL2FybS9tYWNoLXMzYzI0MTAKLSovCi0KLWV4dGVybiBzcGlubG9ja190IGNsb2Nrc19sb2NrOwotCi1leHRlcm4gaW50IHMzYzI0MTBfY2xrY29uX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpOwotCi1leHRlcm4gaW50IHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soc3RydWN0IGNsayAqY2xrKTsKLWV4dGVybiBpbnQgczNjMjR4eF9yZWdpc3Rlcl9jbG9ja3Moc3RydWN0IGNsayAqKmNsaywgaW50IG5yX2Nsa3MpOwotCi1leHRlcm4gaW50IHMzYzI0eHhfcmVnaXN0ZXJfYmFzZWNsb2Nrcyh1bnNpZ25lZCBsb25nIHh0YWwpOwotCi1leHRlcm4gdm9pZCBzM2M2NHh4X3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKTsKLQotZXh0ZXJuIHZvaWQgczNjMjR4eF9zZXR1cF9jbG9ja3ModW5zaWduZWQgbG9uZyBmY2xrLAotCQkJCSB1bnNpZ25lZCBsb25nIGhjbGssCi0JCQkJIHVuc2lnbmVkIGxvbmcgcGNsayk7Ci0KLWV4dGVybiB2b2lkIHMzYzI0MTBfc2V0dXBfY2xvY2tzKHZvaWQpOwotZXh0ZXJuIHZvaWQgczNjMjQxMl9zZXR1cF9jbG9ja3Modm9pZCk7Ci1leHRlcm4gdm9pZCBzM2MyNDR4X3NldHVwX2Nsb2Nrcyh2b2lkKTsKLWV4dGVybiB2b2lkIHMzYzI0NDNfc2V0dXBfY2xvY2tzKHZvaWQpOwotCi0vKiBTM0M2NFhYIHNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgY2xvY2tzICovCi0KLWV4dGVybiBpbnQgczNjNjR4eF9zY2xrX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKTsKLQotLyogSW5pdCBmb3IgcHdtIGNsb2NrIGNvZGUgKi8KLQotZXh0ZXJuIHZvaWQgczNjX3B3bWNsa19pbml0KHZvaWQpOwotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvY3B1LWZyZXEuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9jcHUtZnJlcS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NGViMDZhLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9jcHUtZnJlcS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ1ICswLDAgQEAKLS8qIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9jcHUtZnJlcS5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoKLSAqIFMzQyBDUFUgZnJlcXVlbmN5IHNjYWxpbmcgc3VwcG9ydCAtIGRyaXZlciBhbmQgYm9hcmQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KLQotc3RydWN0IHMzY19jcHVmcmVxX2luZm87Ci1zdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQ7Ci1zdHJ1Y3QgczNjX2lvdGltaW5nczsKLQotLyoqCi0gKiBzdHJ1Y3QgczNjX2ZyZXEgLSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gKG1haW5seSBmb3IgY29yZSBkcml2ZXJzKQotICogQGZjbGs6IFRoZSBGQ0xLIGZyZXF1ZW5jeSBpbiBIei4KLSAqIEBhcm1jbGs6IFRoZSBBUk1DTEsgZnJlcXVlbmN5IGluIEh6LgotICogQGhjbGtfdG5zOiBIQ0xLIGN5Y2xlIHRpbWUgaW4gMTB0aHMgb2YgbmFuby1zZWNvbmRzLgotICogQGhjbGs6IFRoZSBIQ0xLIGZyZXF1ZW5jeSBpbiBIei4KLSAqIEBwY2xrOiBUaGUgUENMSyBmcmVxdWVuY3kgaW4gSHouCi0gKgotICogVGhpcyBjb250YWlucyB0aGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24KLSAqIG1haW5seSBmb3IgdGhlIGNvcmUgZHJpdmVycyB0byBlbnN1cmUgd2UgZG8gbm90IGVuZCB1cCBwYXNzaW5nIGFib3V0Ci0gKiBhIGxhcmdlIG51bWJlciBvZiBwYXJhbWV0ZXJzLgotICoKLSAqIFRoZSBAaGNsa190bnMgZmllbGQgaXMgYSB1c2VmdWwgY2FjaGUgZm9yIHRoZSBwYXJ0cyBvZiB0aGUgZHJpdmVycyB0aGF0Ci0gKiBuZWVkIHRvIGNhbGN1bGF0ZSBJTyB0aW1pbmdzIGFuZCBzdWNobGlrZS4KLSAqLwotc3RydWN0IHMzY19mcmVxIHsKLQl1bnNpZ25lZCBsb25nCWZjbGs7Ci0JdW5zaWduZWQgbG9uZwlhcm1jbGs7Ci0JdW5zaWduZWQgbG9uZwloY2xrX3RuczsJLyogaW4gMTB0aHMgb2YgbnMgKi8KLQl1bnNpZ25lZCBsb25nCWhjbGs7Ci0JdW5zaWduZWQgbG9uZwlwY2xrOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgczNjX2NwdWZyZXFfZnJlcXMgLSBzM2MgY3B1ZnJlcSBub3RpZmljYXRpb24gaW5mb3JtYXRpb24uCi0gKiBAZnJlcXM6IFRoZSBjcHVmcmVxIHNldHRpbmcgaW5mb3JtYXRpb24uCi0gKiBAb2xkOiBUaGUgb2xkIGNsb2NrIHNldHRpbmdzLgotICogQG5ldzogVGhlIG5ldyBjbG9jayBzZXR0aW5ncy4KLSAqIEBwbGxfY2hhbmdpbmc6IFNldCBpZiB0aGUgUExMIGlzIGNoYW5naW5nLgotICoKLSAqIFdyYXBwZXIgJ3N0cnVjdCBjcHVmcmVxX2ZyZXFzJyBzbyB0aGF0IGFueSBkcml2ZXJzIHJlY2VpdmluZyB0aGUKLSAqIG5vdGlmaWNhdGlvbiBjYW4gdXNlIHRoaXMgaW5mb3JtYXRpb24gdGhhdCBpcyBub3QgcHJvdmlkZWQgYnkganVzdAotICogaGF2aW5nIHRoZSBjb3JlIGZyZXF1ZW5jeSBhbG9uZS4KLSAqCi0gKiBUaGUgcGxsX2NoYW5naW5nIGZsYWcgaXMgdXNlZCB0byBpbmRpY2F0ZSBpZiB0aGUgUExMIGl0c2VsZiBpcwotICogYmVpbmcgc2V0IGR1cmluZyB0aGlzIGNoYW5nZS4gVGhpcyBpcyBpbXBvcnRhbnQgYXMgdGhlIGNsb2NrcwotICogd2lsbCB0ZW1wb3JhcmlseSBiZSBzZXQgdG8gdGhlIFhUQUwgY2xvY2sgZHVyaW5nIHRoaXMgdGltZSwgc28KLSAqIGRyaXZlcnMgbWF5IHdhbnQgdG8gY2xvc2UgZG93biB0aGVpciBvdXRwdXQgZHVyaW5nIHRoaXMgdGltZS4KLSAqCi0gKiBOb3RlLCB0aGlzIGlzIG5vdCBiZWluZyB1c2VkIGJ5IGFueSBjdXJyZW50IGRyaXZlcnMgYW5kIHRoZXJlZm9yZQotICogbWF5IGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4KLSAqLwotc3RydWN0IHMzY19jcHVmcmVxX2ZyZXFzIHsKLQlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcwlmcmVxczsKLQlzdHJ1Y3QgczNjX2ZyZXEJCW9sZDsKLQlzdHJ1Y3QgczNjX2ZyZXEJCW5ldzsKLQotCXVuc2lnbmVkIGludAkJcGxsX2NoYW5naW5nOjE7Ci19OwotCi0jZGVmaW5lIHRvX3MzY19jcHVmcmVxKF9jZikgY29udGFpbmVyX29mKF9jZiwgc3RydWN0IHMzY19jcHVmcmVxX2ZyZXFzLCBmcmVxcykKLQotLyoqCi0gKiBzdHJ1Y3QgczNjX2Nsa2RpdnMgLSBjbG9jayBkaXZpc29yIGluZm9ybWF0aW9uCi0gKiBAcF9kaXZpc29yOiBEaXZpc29yIGZyb20gRkNMSyB0byBQQ0xLLgotICogQGhfZGl2aXNvcjogRGl2aXNvciBmcm9tIEZDTEsgdG8gSENMSy4KLSAqIEBhcm1fZGl2aXNvcjogRGl2aXNvciBmcm9tIEZDTEsgdG8gQVJNQ0xLIChub3QgYWxsIENQVXMpLgotICogQGR2czogTm9uLXplcm8gaWYgdXNpbmcgRFZTIG1vZGUgZm9yIEFSTUNMSy4KLSAqCi0gKiBEaXZpc29yIHNldHRpbmdzIGZvciB0aGUgY29yZSBjbG9ja3MuCi0gKi8KLXN0cnVjdCBzM2NfY2xrZGl2cyB7Ci0JaW50CQlwX2Rpdmlzb3I7Ci0JaW50CQloX2Rpdmlzb3I7Ci0JaW50CQlhcm1fZGl2aXNvcjsKLQl1bnNpZ25lZCBjaGFyCWR2czsKLX07Ci0KLSNkZWZpbmUgUExMVkFMKF9tLCBfcCwgX3MpICgoKF9tKSA8PCAxMikgfCAoKF9wKSA8PCA0KSB8IChfcykpCi0KLS8qKgotICogc3RydWN0IHMzY19wbGx2YWwgLSBQTEwgdmFsdWUgZW50cnkuCi0gKiBAZnJlcTogVGhlIGZyZXF1ZW5jeSBmb3IgdGhpcyBlbnRyeSBpbiBIei4KLSAqIEBwbGxfcmVnOiBUaGUgUExMIHJlZ2lzdGVyIHNldHRpbmcgZm9yIHRoaXMgUExMIHZhbHVlLgotICovCi1zdHJ1Y3QgczNjX3BsbHZhbCB7Ci0JdW5zaWduZWQgbG9uZwkJZnJlcTsKLQl1bnNpZ25lZCBsb25nCQlwbGxfcmVnOwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQgLSBwZXItYm9hcmQgY3B1IGZyZXF1ZW5jeSBpbmZvcm1hdGluCi0gKiBAcmVmcmVzaDogVGhlIFNEUkFNIHJlZnJlc2ggcGVyaW9kIGluIG5hbm9zZWNvbmRzLgotICogQGF1dG9faW86IFNldCBpZiB0aGUgSU8gdGltaW5nIHNldHRpbmdzIHNob3VsZCBiZSBnZW5lcmF0ZWQgZnJvbSB0aGUKLSAqCWluaXRpYWxpc2F0aW9uIHRpbWUgaGFyZHdhcmUgcmVnaXN0ZXJzLgotICogQG5lZWRfaW86IFNldCBpZiB0aGUgYm9hcmQgaGFzIGV4dGVybmFsIElPIG9uIGFueSBvZiB0aGUgY2hpcHNlbGVjdAotICoJbGluZXMgdGhhdCB3aWxsIHJlcXVpcmUgdGhlIGhhcmR3YXJlIHRpbWluZyByZWdpc3RlcnMgdG8gYmUKLSAqCXVwZGF0ZWQgb24gYSBjbG9jayBjaGFuZ2UuCi0gKiBAbWF4OiBUaGUgbWF4aXVtIGZyZXF1ZW5jeSBsaW1pdHMgZm9yIHRoZSBzeXN0ZW0uIEFueSBmaWVsZCB0aGF0Ci0gKglpcyBsZWZ0IGF0IHplcm8gd2lsbCB1c2UgdGhlIENQVSdzIHNldHRpbmdzLgotICoKLSAqIFRoaXMgY29udGFpbnMgdGhlIGJvYXJkIHNwZWNpZmljIHNldHRpbmdzIHRoYXQgYWZmZWN0IGhvdyB0aGUgQ1BVCi0gKiBkcml2ZXJzIGNob3NlIHNldHRpbmdzLiBUaGVzZSBpbmNsdWRlIHRoZSBtZW1vcnkgcmVmcmVzaCBhbmQgSU8KLSAqIHRpbWluZyBpbmZvcm1hdGlvbi4KLSAqCi0gKiBSZWdpc3RyYXRpb24gZGVwZW5kcyBvbiB0aGUgZHJpdmVyIGJlaW5nIHVzZWQsIHRoZSBBUk1DTEsgb25seQotICogaW1wbGVtZW50YXRpb24gZG9lcyBub3QgY3VycmVudGx5IG5lZWQgdGhpcyBidXQgdGhlIG9sZGVyIHN0eWxlCi0gKiBkcml2ZXIgcmVxdWlyZXMgdGhpcyB0byBiZSBhdmFpbGFibGUuCi0gKi8KLXN0cnVjdCBzM2NfY3B1ZnJlcV9ib2FyZCB7Ci0JdW5zaWduZWQgaW50CXJlZnJlc2g7Ci0JdW5zaWduZWQgaW50CWF1dG9faW86MTsJLyogYXV0b21hdGljYWxseSBpbml0IGlvIHRpbWluZ3MuICovCi0JdW5zaWduZWQgaW50CW5lZWRfaW86MTsJLyogc2V0IGlmIG5lZWRzIGlvIHRpbWluZyBzdXBwb3J0LiAqLwotCi0JLyogYW55IG5vbi16ZXJvIGZpZWxkIGluIGhlcmUgaXMgdGFrZW4gYXMgYW4gdXBwZXIgbGltaXQuICovCi0Jc3RydWN0IHMzY19mcmVxCW1heDsJLyogZnJlcXVlbmN5IGxpbWl0cyAqLwotfTsKLQotLyogVGhpbmdzIGRlcGVuZGluZyBvbiBmcmVxdWVuY3kgc2NhbGluZy4gKi8KLSNpZmRlZiBDT05GSUdfQ1BVX0ZSRVFfUzNDCi0jZGVmaW5lIF9faW5pdF9vcl9jcHVmcmVxCi0jZWxzZQotI2RlZmluZSBfX2luaXRfb3JfY3B1ZnJlcSBfX2luaXQKLSNlbmRpZgotCi0vKiBCb2FyZCBmdW5jdGlvbnMgKi8KLQotI2lmZGVmIENPTkZJR19DUFVfRlJFUV9TM0MKLWV4dGVybiBpbnQgczNjX2NwdWZyZXFfc2V0Ym9hcmQoc3RydWN0IHMzY19jcHVmcmVxX2JvYXJkICpib2FyZCk7Ci0jZWxzZQotCi1zdGF0aWMgaW5saW5lIGludCBzM2NfY3B1ZnJlcV9zZXRib2FyZChzdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQgKmJvYXJkKQotewotCXJldHVybiAwOwotfQotI2VuZGlmICAvKiBDT05GSUdfQ1BVX0ZSRVFfUzNDICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvY3B1LmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvY3B1LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxMTMxY2EuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2NwdS5oCisrKyAvZGV2L251bGwKQEAgLTEsODEgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2NwdS5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogSGVhZGVyIGZpbGUgZm9yIFMzQzI0WFggQ1BVIHN1cHBvcnQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotLyogdG9kbyAtIGZpeCB3aGVuIHJtayBjaGFuZ2VzIGlvZGVzY3MgdG8gdXNlIGB2b2lkIF9faW9tZW0gKmAgKi8KLQotI2lmbmRlZiBfX1NBTVNVTkdfUExBVF9DUFVfSAotI2RlZmluZSBfX1NBTVNVTkdfUExBVF9DUFVfSAotCi0jZGVmaW5lIElPREVTQ19FTlQoeCkgeyAodW5zaWduZWQgbG9uZylTM0MyNFhYX1ZBXyMjeCwgX19waHlzX3RvX3BmbihTM0MyNFhYX1BBXyMjeCksIFMzQzI0WFhfU1pfIyN4LCBNVF9ERVZJQ0UgfQotCi0jaWZuZGVmIE1IWgotI2RlZmluZSBNSFogKDEwMDAqMTAwMCkKLSNlbmRpZgotCi0jZGVmaW5lIHByaW50X21oeihtKSAoKG0pIC8gTUhaKSwgKCgobSkgLyAxMDAwKSAlIDEwMDApCi0KLS8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8KLXN0cnVjdCBzM2MyNHh4X3VhcnRfcmVzb3VyY2VzOwotc3RydWN0IHBsYXRmb3JtX2RldmljZTsKLXN0cnVjdCBzM2MyNDEwX3VhcnRjZmc7Ci1zdHJ1Y3QgbWFwX2Rlc2M7Ci0KLS8qIHBlci1jcHUgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb24gdGFibGUuICovCi0KLXN0cnVjdCBjcHVfdGFibGUgewotCXVuc2lnbmVkIGxvbmcJaWRjb2RlOwotCXVuc2lnbmVkIGxvbmcJaWRtYXNrOwotCXZvaWQJCSgqbWFwX2lvKSh2b2lkKTsKLQl2b2lkCQkoKmluaXRfdWFydHMpKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKLQl2b2lkCQkoKmluaXRfY2xvY2tzKShpbnQgeHRhbCk7Ci0JaW50CQkoKmluaXQpKHZvaWQpOwotCWNvbnN0IGNoYXIJKm5hbWU7Ci19OwotCi1leHRlcm4gdm9pZCBzM2NfaW5pdF9jcHUodW5zaWduZWQgbG9uZyBpZGNvZGUsCi0JCQkgc3RydWN0IGNwdV90YWJsZSAqY3B1cywgdW5zaWduZWQgaW50IGNwdXRhYl9zaXplKTsKLQotLyogY29yZSBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMgKi8KLQotZXh0ZXJuIHZvaWQgczNjMjR4eF9pbml0X2lycSh2b2lkKTsKLWV4dGVybiB2b2lkIHMzYzY0eHhfaW5pdF9pcnEodTMyIHZpYzAsIHUzMiB2aWMxKTsKLQotZXh0ZXJuIHZvaWQgczNjMjR4eF9pbml0X2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLCBpbnQgc2l6ZSk7Ci1leHRlcm4gdm9pZCBzM2M2NHh4X2luaXRfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBzaXplKTsKLQotZXh0ZXJuIHZvaWQgczNjMjR4eF9pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKLQotZXh0ZXJuIHZvaWQgczNjMjR4eF9pbml0X2Nsb2NrcyhpbnQgeHRhbCk7Ci0KLWV4dGVybiB2b2lkIHMzYzI0eHhfaW5pdF91YXJ0ZGV2cyhjaGFyICpuYW1lLAotCQkJCSAgc3RydWN0IHMzYzI0eHhfdWFydF9yZXNvdXJjZXMgKnJlcywKLQkJCQkgIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKLQotLyogdGltZXIgZm9yIDI0MTAvMjQ0MCAqLwotCi1zdHJ1Y3Qgc3lzX3RpbWVyOwotZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgczNjMjR4eF90aW1lcjsKLQotLyogc3lzdGVtIGRldmljZSBjbGFzc2VzICovCi0KLWV4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0MTBfc3lzY2xhc3M7Ci1leHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBzM2MyNDEwYV9zeXNjbGFzczsKLWV4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0MTJfc3lzY2xhc3M7Ci1leHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBzM2MyNDQwX3N5c2NsYXNzOwotZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgczNjMjQ0Ml9zeXNjbGFzczsKLWV4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0NDNfc3lzY2xhc3M7Ci1leHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBzM2M2NDEwX3N5c2NsYXNzOwotZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgczNjNjR4eF9zeXNjbGFzczsKLQotZXh0ZXJuIHZvaWQgKCpzNXBjMXh4X2lkbGUpKHZvaWQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9kZWJ1Zy1tYWNyby5TIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2RlYnVnLW1hY3JvLlMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2MzRkNGUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2RlYnVnLW1hY3JvLlMKKysrIC9kZXYvbnVsbApAQCAtMSw3NSArMCwwIEBACi0vKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvZGVidWctbWFjcm8uUwotICoKLSAqIENvcHlyaWdodCAyMDA1LCAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcwotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KLQotLyogVGhlIFMzQzI0NDAgaW1wbGVtZW50YXRpb25zIGFyZSB1c2VkIGJ5IGRlZmF1bHQgYXMgdGhleSBhcmUgdGhlCi0gKiBtb3N0IHdpZGVseSByZS11c2VkICovCi0KLQkubWFjcm8gZmlmb19sZXZlbF9zM2MyNDQwIHJkLCByeAotCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VGU1RBVCBdCi0JCWFuZAlccmQsIFxyZCwgI1MzQzI0NDBfVUZTVEFUX1RYTUFTSwotCS5lbmRtCi0KLSNpZm5kZWYgZmlmb19sZXZlbAotI2RlZmluZSBmaWZvX2xldmVsIGZpZm9fbGV2ZWxfczNjMjQ0MAotI2VuZGlmCi0KLQkubWFjcm8gIGZpZm9fZnVsbF9zM2MyNDQwIHJkLCByeAotCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VGU1RBVCBdCi0JCXRzdAlccmQsICNTM0MyNDQwX1VGU1RBVF9UWEZVTEwKLQkuZW5kbQotCi0jaWZuZGVmIGZpZm9fZnVsbAotI2RlZmluZSBmaWZvX2Z1bGwgZmlmb19mdWxsX3MzYzI0NDAKLSNlbmRpZgotCi0JLm1hY3JvCXNlbmR1YXJ0LHJkLHJ4Ci0JCXN0cmIgCVxyZCwgW1xyeCwgIyBTM0MyNDEwX1VUWEggXQotCS5lbmRtCi0KLQkubWFjcm8JYnVzeXVhcnQsIHJkLCByeAotCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VGQ09OIF0KLQkJdHN0CVxyZCwgI1MzQzI0MTBfVUZDT05fRklGT01PREUJQCBmaWZvIGVuYWJsZWQ/Ci0JCWJlcQkxMDAxZgkJCQlACi0JCUAgRklGTyBlbmFibGVkLi4uCi0xMDAzOgotCQlmaWZvX2Z1bGwgXHJkLCBccngKLQkJYm5lCTEwMDNiCi0JCWIJMTAwMmYKLQotMTAwMToKLQkJQCBidXN5IHdhaXRpbmcgZm9yIG5vbiBmaWZvCi0JCWxkcglccmQsIFsgXHJ4LCAjIFMzQzI0MTBfVVRSU1RBVCBdCi0JCXRzdAlccmQsICNTM0MyNDEwX1VUUlNUQVRfVFhGRQotCQliZXEJMTAwMWIKLQotMTAwMjoJCUAgZXhpdCBidXN5dWFydAotCS5lbmRtCi0KLQkubWFjcm8Jd2FpdHVhcnQscmQscngKLQkJbGRyCVxyZCwgWyBccngsICMgUzNDMjQxMF9VRkNPTiBdCi0JCXRzdAlccmQsICNTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCUAgZmlmbyBlbmFibGVkPwotCQliZXEJMTAwMWYJCQkJQAotCQlAIEZJRk8gZW5hYmxlZC4uLgotMTAwMzoKLQkJZmlmb19sZXZlbCBccmQsIFxyeAotCQl0ZXEJXHJkLCAjMAotCQlibmUJMTAwM2IKLQkJYgkxMDAyZgotMTAwMToKLQkJQCBpZGxlIHdhaXRpbmcgZm9yIG5vbiBmaWZvCi0JCWxkcglccmQsIFsgXHJ4LCAjIFMzQzI0MTBfVVRSU1RBVCBdCi0JCXRzdAlccmQsICNTM0MyNDEwX1VUUlNUQVRfVFhGRQotCQliZXEJMTAwMWIKLQotMTAwMjoJCUAgZXhpdCBidXN5dWFydAotCS5lbmRtCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZGV2cy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2RldnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFjMjBiMC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZGV2cy5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyogbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9kZXZzLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogSGVhZGVyIGZpbGUgZm9yIHMzYzI0MTAgc3RhbmRhcmQgcGxhdGZvcm0gZGV2aWNlcwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotCi1zdHJ1Y3QgczNjMjR4eF91YXJ0X3Jlc291cmNlcyB7Ci0Jc3RydWN0IHJlc291cmNlCQkqcmVzb3VyY2VzOwotCXVuc2lnbmVkIGxvbmcJCSBucl9yZXNvdXJjZXM7Ci19OwotCi1leHRlcm4gc3RydWN0IHMzYzI0eHhfdWFydF9yZXNvdXJjZXMgczNjMjQxMF91YXJ0X3Jlc291cmNlc1tdOwotZXh0ZXJuIHN0cnVjdCBzM2MyNHh4X3VhcnRfcmVzb3VyY2VzIHMzYzY0eHhfdWFydF9yZXNvdXJjZXNbXTsKLQotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnMzYzI0eHhfdWFydF9kZXZzW107Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqczNjMjR4eF91YXJ0X3NyY1tdOwotCi1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3RpbWVyW107Ci0KLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzY0eHhfZGV2aWNlX2lpczA7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2M2NHh4X2RldmljZV9paXMxOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjNjR4eF9kZXZpY2VfaWlzdjQ7Ci0KLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzY0eHhfZGV2aWNlX3BjbTA7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2M2NHh4X2RldmljZV9wY20xOwotCi1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3RzOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9mYjsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdXNiOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9sY2Q7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3dkdDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfaTJjMDsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfaTJjMTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfcnRjOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9hZGM7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3NkaTsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfaWlzOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9od21vbjsKLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfaHNtbWMwOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9oc21tYzE7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2hzbW1jMjsKLQotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9zcGkwOwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9zcGkxOwotCi1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2h3bW9uOwotCi1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX25hbmQ7Ci0KLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdXNiZ2FkZ2V0OwotZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV91c2JfaHNvdGc7Ci0KLS8qIHMzYzI0NDAgc3BlY2lmaWMgZGV2aWNlcyAqLwotCi0jaWZkZWYgQ09ORklHX0NQVV9TM0MyNDQwCi0KLWV4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfY2FtaWY7Ci1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2FjOTc7Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2RtYS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2RtYS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNDI5ZDEwLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9kbWEuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKiBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZG1hLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBTYW1zdW5nIFMzQyBETUEgc3VwcG9ydAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi1lbnVtIHMzYzI0MTBfZG1hX2J1ZmZyZXN1bHQgewotCVMzQzI0MTBfUkVTX09LLAotCVMzQzI0MTBfUkVTX0VSUiwKLQlTM0MyNDEwX1JFU19BQk9SVAotfTsKLQotZW51bSBzM2MyNDEwX2RtYXNyYyB7Ci0JUzNDMjQxMF9ETUFTUkNfSFcsCQkvKiBzb3VyY2UgaXMgbWVtb3J5ICovCi0JUzNDMjQxMF9ETUFTUkNfTUVNCQkvKiBzb3VyY2UgaXMgaGFyZHdhcmUgKi8KLX07Ci0KLS8qIGVudW0gczNjMjQxMF9jaGFuX29wCi0gKgotICogb3BlcmF0aW9uIGNvZGVzIHBhc3NlZCB0byB0aGUgRE1BIGNvZGUgYnkgdGhlIHVzZXIsIGFuZCBhbHNvIHVzZWQKLSAqIHRvIGluZm9ybSB0aGUgY3VycmVudCBjaGFubmVsIG93bmVyIG9mIGFueSBjaGFuZ2VzIHRvIHRoZSBzeXN0ZW0gc3RhdGUKLSovCi0KLWVudW0gczNjMjQxMF9jaGFuX29wIHsKLQlTM0MyNDEwX0RNQU9QX1NUQVJULAotCVMzQzI0MTBfRE1BT1BfU1RPUCwKLQlTM0MyNDEwX0RNQU9QX1BBVVNFLAotCVMzQzI0MTBfRE1BT1BfUkVTVU1FLAotCVMzQzI0MTBfRE1BT1BfRkxVU0gsCi0JUzNDMjQxMF9ETUFPUF9USU1FT1VULAkJLyogaW50ZXJuYWwgc2lnbmFsIHRvIGhhbmRsZXIgKi8KLQlTM0MyNDEwX0RNQU9QX1NUQVJURUQsCQkvKiBpbmRpY2F0ZSBjaGFubmVsIHN0YXJ0ZWQgKi8KLX07Ci0KLXN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgewotCWNoYXIgICAgICAgICAgICAgICAgKm5hbWU7Ci19OwotCi1zdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbjsKLQotLyogczNjMjQxMF9kbWFfY2Jmbl90Ci0gKgotICogYnVmZmVyIGNhbGxiYWNrIHJvdXRpbmUgdHlwZQotKi8KLQotdHlwZWRlZiB2b2lkICgqczNjMjQxMF9kbWFfY2Jmbl90KShzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqLAotCQkJCSAgIHZvaWQgKmJ1ZiwgaW50IHNpemUsCi0JCQkJICAgZW51bSBzM2MyNDEwX2RtYV9idWZmcmVzdWx0IHJlc3VsdCk7Ci0KLXR5cGVkZWYgaW50ICAoKnMzYzI0MTBfZG1hX29wZm5fdCkoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKiwKLQkJCQkgICBlbnVtIHMzYzI0MTBfY2hhbl9vcCApOwotCi0KLQotLyogczNjMjQxMF9kbWFfcmVxdWVzdAotICoKLSAqIHJlcXVlc3QgYSBkbWEgY2hhbm5lbCBleGNsdXNpdmxleQotKi8KLQotZXh0ZXJuIGludCBzM2MyNDEwX2RtYV9yZXF1ZXN0KHVuc2lnbmVkIGludCBjaGFubmVsLAotCQkJICAgICAgIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgKiwgdm9pZCAqZGV2KTsKLQotCi0vKiBzM2MyNDEwX2RtYV9jdHJsCi0gKgotICogY2hhbmdlIHRoZSBzdGF0ZSBvZiB0aGUgZG1hIGNoYW5uZWwKLSovCi0KLWV4dGVybiBpbnQgczNjMjQxMF9kbWFfY3RybCh1bnNpZ25lZCBpbnQgY2hhbm5lbCwgZW51bSBzM2MyNDEwX2NoYW5fb3Agb3ApOwotCi0vKiBzM2MyNDEwX2RtYV9zZXRmbGFncwotICoKLSAqIHNldCB0aGUgY2hhbm5lbCdzIGZsYWdzIHRvIGEgZ2l2ZW4gc3RhdGUKLSovCi0KLWV4dGVybiBpbnQgczNjMjQxMF9kbWFfc2V0ZmxhZ3ModW5zaWduZWQgaW50IGNoYW5uZWwsCi0JCQkJdW5zaWduZWQgaW50IGZsYWdzKTsKLQotLyogczNjMjQxMF9kbWFfZnJlZQotICoKLSAqIGZyZWUgdGhlIGRtYSBjaGFubmVsICh3aWxsIGFsc28gYWJvcnQgYW55IG91dHN0YW5kaW5nIG9wZXJhdGlvbnMpCi0qLwotCi1leHRlcm4gaW50IHMzYzI0MTBfZG1hX2ZyZWUodW5zaWduZWQgaW50IGNoYW5uZWwsIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgKik7Ci0KLS8qIHMzYzI0MTBfZG1hX2VucXVldWUKLSAqCi0gKiBwbGFjZSB0aGUgZ2l2ZW4gYnVmZmVyIG9udG8gdGhlIHF1ZXVlIG9mIG9wZXJhdGlvbnMgZm9yIHRoZSBjaGFubmVsLgotICogVGhlIGJ1ZmZlciBtdXN0IGJlIGFsbG9jYXRlZCBmcm9tIGRtYSBjb2hlcmVudCBtZW1vcnksIG9yIHRoZSBEY2FjaGUvV0IKLSAqIGRyYWluZWQgYmVmb3JlIHRoZSBidWZmZXIgaXMgZ2l2ZW4gdG8gdGhlIERNQSBzeXN0ZW0uCi0qLwotCi1leHRlcm4gaW50IHMzYzI0MTBfZG1hX2VucXVldWUodW5zaWduZWQgaW50IGNoYW5uZWwsIHZvaWQgKmlkLAotCQkJICAgICAgIGRtYV9hZGRyX3QgZGF0YSwgaW50IHNpemUpOwotCi0vKiBzM2MyNDEwX2RtYV9jb25maWcKLSAqCi0gKiBjb25maWd1cmUgdGhlIGRtYSBjaGFubmVsCi0qLwotCi1leHRlcm4gaW50IHMzYzI0MTBfZG1hX2NvbmZpZyh1bnNpZ25lZCBpbnQgY2hhbm5lbCwgaW50IHhmZXJ1bml0KTsKLQotLyogczNjMjQxMF9kbWFfZGV2Y29uZmlnCi0gKgotICogY29uZmlndXJlIHRoZSBkZXZpY2Ugd2UncmUgdGFsa2luZyB0bwotKi8KLQotZXh0ZXJuIGludCBzM2MyNDEwX2RtYV9kZXZjb25maWcoaW50IGNoYW5uZWwsIGVudW0gczNjMjQxMF9kbWFzcmMgc291cmNlLAotCQkJCSB1bnNpZ25lZCBsb25nIGRldmFkZHIpOwotCi0vKiBzM2MyNDEwX2RtYV9nZXRwb3NpdGlvbgotICoKLSAqIGdldCB0aGUgcG9zaXRpb24gdGhhdCB0aGUgZG1hIHRyYW5zZmVyIGlzIGN1cnJlbnRseSBhdAotKi8KLQotZXh0ZXJuIGludCBzM2MyNDEwX2RtYV9nZXRwb3NpdGlvbih1bnNpZ25lZCBpbnQgY2hhbm5lbCwKLQkJCQkgICBkbWFfYWRkcl90ICpzcmMsIGRtYV9hZGRyX3QgKmRlc3QpOwotCi1leHRlcm4gaW50IHMzYzI0MTBfZG1hX3NldF9vcGZuKHVuc2lnbmVkIGludCwgczNjMjQxMF9kbWFfb3Bmbl90IHJ0bik7Ci1leHRlcm4gaW50IHMzYzI0MTBfZG1hX3NldF9idWZmZG9uZV9mbih1bnNpZ25lZCBpbnQsIHMzYzI0MTBfZG1hX2NiZm5fdCBydG4pOwotCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9mYi5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2ZiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4ZGI4NzkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2ZiLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4MCArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZmIuaAotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogUzNDIC0gRkIgcGxhdGZvcm0gZGF0YSBkZWZpbml0aW9ucwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaWZuZGVmIF9fUExBVF9TM0NfRkJfSAotI2RlZmluZSBfX1BMQVRfUzNDX0ZCX0ggX19GSUxFX18KLQotLyoqCi0gKiBzdHJ1Y3QgczNjX2ZiX3BkX3dpbiAtIHBlciB3aW5kb3cgc2V0dXAgZGF0YQotICogQHdpbl9tb2RlOiBUaGUgZGlzcGxheSBwYXJhbWV0ZXJzIHRvIGluaXRpYWxpc2UgKG5vdCBmb3Igd2luZG93IDApCi0gKiBAdmlydHVhbF94OiBUaGUgdmlydHVhbCBYIHNpemUuCi0gKiBAdmlydHVhbF95OiBUaGUgdmlydHVhbCBZIHNpemUuCi0gKi8KLXN0cnVjdCBzM2NfZmJfcGRfd2luIHsKLQlzdHJ1Y3QgZmJfdmlkZW9tb2RlCXdpbl9tb2RlOwotCi0JdW5zaWduZWQgc2hvcnQJCWRlZmF1bHRfYnBwOwotCXVuc2lnbmVkIHNob3J0CQltYXhfYnBwOwotCXVuc2lnbmVkIHNob3J0CQl2aXJ0dWFsX3g7Ci0JdW5zaWduZWQgc2hvcnQJCXZpcnR1YWxfeTsKLX07Ci0KLS8qKgotICogc3RydWN0IHMzY19mYl9wbGF0ZGF0YSAtICBTM0MgZHJpdmVyIHBsYXRmb3JtIHNwZWNpZmljIGluZm9ybWF0aW9uCi0gKiBAc2V0dXBfZ3BpbzogU2V0dXAgdGhlIGV4dGVybmFsIEdQSU8gcGlucyB0byB0aGUgcmlnaHQgc3RhdGUgdG8gdHJhbnNmZXIKLSAqCQl0aGUgZGF0YSBmcm9tIHRoZSBkaXNwbGF5IHN5c3RlbSB0byB0aGUgY29ubmVjdGVkIGRpc3BsYXkKLSAqCQlkZXZpY2UuCi0gKiBAdmlkY29uMDogVGhlIGJhc2UgdmlkY29uMCB2YWx1ZXMgdG8gY29udHJvbCB0aGUgcGFuZWwgZGF0YSBmb3JtYXQuCi0gKiBAdmlkY29uMTogVGhlIGJhc2UgdmlkY29uMSB2YWx1ZXMgdG8gY29udHJvbCB0aGUgcGFuZWwgZGF0YSBvdXRwdXQuCi0gKiBAd2luOiBUaGUgc2V0dXAgZGF0YSBmb3IgZWFjaCBoYXJkd2FyZSB3aW5kb3csIG9yIE5VTEwgZm9yIHVudXNlZC4KLSAqIEBkaXNwbGF5X21vZGU6IFRoZSBMQ0Qgb3V0cHV0IGRpc3BsYXkgbW9kZS4KLSAqCi0gKiBUaGUgcGxhdGZvcm0gZGF0YSBzdXBwbGllcyB0aGUgdmlkZW8gZHJpdmVyIHdpdGggYWxsIHRoZSBpbmZvcm1hdGlvbgotICogaXQgcmVxdWlyZXMgdG8gd29yayB3aXRoIHRoZSBkaXNwbGF5KHMpIGF0dGFjaGVkIHRvIHRoZSBtYWNoaW5lLiBJdAotICogY29udHJvbHMgdGhlIGluaXRpYWwgbW9kZSwgdGhlIG51bWJlciBvZiBkaXNwbGF5IHdpbmRvd3MgKDAgaXMgYWx3YXlzCi0gKiB0aGUgYmFzZSBmcmFtZWJ1ZmZlcikgdGhhdCBhcmUgaW5pdGlhbGlzZWQgZXRjLgotICoKLSAqLwotc3RydWN0IHMzY19mYl9wbGF0ZGF0YSB7Ci0Jdm9pZAkoKnNldHVwX2dwaW8pKHZvaWQpOwotCi0Jc3RydWN0IHMzY19mYl9wZF93aW4JKndpbltTM0NfRkJfTUFYX1dJTl07Ci0KLQl1MzIJCQkgdmlkY29uMDsKLQl1MzIJCQkgdmlkY29uMTsKLX07Ci0KLS8qKgotICogczNjX2ZiX3NldF9wbGF0ZGF0YSgpIC0gU2V0dXAgdGhlIEZCIGRldmljZSB3aXRoIHBsYXRmb3JtIGRhdGEuCi0gKiBAcGQ6IFRoZSBwbGF0Zm9ybSBkYXRhIHRvIHNldC4gVGhlIGRhdGEgaXMgY29waWVkIGZyb20gdGhlIHBhc3NlZCBzdHJ1Y3R1cmUKLSAqICAgICAgc28gdGhlIG1hY2hpbmUgZGF0YSBjYW4gbWFyayB0aGUgZGF0YSBfX2luaXRkYXRhIHNvIHRoYXQgYW55IHVudXNlZAotICogICAgICBtYWNoaW5lcyB3aWxsIGVuZCB1cCBkdW1waW5nIHRoZWlyIGRhdGEgYXQgcnVudGltZS4KLSAqLwotZXh0ZXJuIHZvaWQgczNjX2ZiX3NldF9wbGF0ZGF0YShzdHJ1Y3QgczNjX2ZiX3BsYXRkYXRhICpwZCk7Ci0KLS8qKgotICogczNjNjR4eF9mYl9ncGlvX3NldHVwXzI0YnBwKCkgLSBTM0M2NFhYIHNldHVwIGZ1bmN0aW9uIGZvciAyNGJwcCBMQ0QKLSAqCi0gKiBJbml0aWFsaXNlIHRoZSBHUElPIGZvciBhbiAyNGJwcCBMQ0QgZGlzcGxheSBvbiB0aGUgUkdCIGludGVyZmFjZS4KLSAqLwotZXh0ZXJuIHZvaWQgczNjNjR4eF9mYl9ncGlvX3NldHVwXzI0YnBwKHZvaWQpOwotCi0vKioKLSAqIHM1cGMxMDBfZmJfZ3Bpb19zZXR1cF8yNGJwcCgpIC0gUzVQQzEwMCBzZXR1cCBmdW5jdGlvbiBmb3IgMjRicHAgTENECi0gKgotICogSW5pdGlhbGlzZSB0aGUgR1BJTyBmb3IgYW4gMjRicHAgTENEIGRpc3BsYXkgb24gdGhlIFJHQiBpbnRlcmZhY2UuCi0gKi8KLWV4dGVybiB2b2lkIHM1cGMxMDBfZmJfZ3Bpb19zZXR1cF8yNGJwcCh2b2lkKTsKLQotI2VuZGlmIC8qIF9fUExBVF9TM0NfRkJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2dwaW8tY2ZnLWhlbHBlcnMuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9ncGlvLWNmZy1oZWxwZXJzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY1MmUyYmIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2dwaW8tY2ZnLWhlbHBlcnMuaAorKysgL2Rldi9udWxsCkBAIC0xLDE3NiArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZ3Bpby1jZmctaGVscGVyLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoKLSAqIFMzQyBQbGF0Zm9ybSAtIEdQSU8gcGluIGNvbmZpZ3VyYXRpb24gaGVscGVyIGRlZmluaXRpb25zCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLS8qIFRoaXMgaXMgbWVhbnQgZm9yIGNvcmUgY3B1IHN1cHBvcnQsIG1hY2hpbmUgb3Igb3RoZXIgZHJpdmVyIGZpbGVzCi0gKiBzaG91bGQgbm90IGJlIGluY2x1ZGluZyB0aGlzIGhlYWRlci4KLSAqLwotCi0jaWZuZGVmIF9fUExBVF9HUElPX0NGR19IRUxQRVJTX0gKLSNkZWZpbmUgX19QTEFUX0dQSU9fQ0ZHX0hFTFBFUlNfSCBfX0ZJTEVfXwotCi0vKiBBcyBhIG5vdGUsIGFsbCBncGlvIGNvbmZpZ3VyYXRpb24gZnVuY3Rpb25zIGFyZSBlbnRlcmVkIGV4Y2x1c2l2ZWx5LCBlaXRoZXIKLSAqIHdpdGggdGhlIHJlbGV2YW50IGxvY2sgaGVsZCBvciB0aGUgc3lzdGVtIHByZXZlbnRlZCBmcm9tIGRvaW5nIGFueXRoaW5nIGVsc2UKLSAqIGJ5IGRpc2FibGluZyBpbnRlcnJ1cHRzLgotKi8KLQotc3RhdGljIGlubGluZSBpbnQgczNjX2dwaW9fZG9fc2V0Y2ZnKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAotCQkJCSAgICAgdW5zaWduZWQgaW50IG9mZiwgdW5zaWduZWQgaW50IGNvbmZpZykKLXsKLQlyZXR1cm4gKGNoaXAtPmNvbmZpZy0+c2V0X2NvbmZpZykoY2hpcCwgb2ZmLCBjb25maWcpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzM2NfZ3Bpb19kb19zZXRwdWxsKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAotCQkJCSAgICAgIHVuc2lnbmVkIGludCBvZmYsIHMzY19ncGlvX3B1bGxfdCBwdWxsKQotewotCXJldHVybiAoY2hpcC0+Y29uZmlnLT5zZXRfcHVsbCkoY2hpcCwgb2ZmLCBwdWxsKTsKLX0KLQotLyoqCi0gKiBzM2NfZ3Bpb19zZXRjZmdfczNjMjR4eCAtIFMzQzI0WFggc3R5bGUgR1BJTyBjb25maWd1cmF0aW9uLgotICogQGNoaXA6IFRoZSBncGlvIGNoaXAgdGhhdCBpcyBiZWluZyBjb25maWd1cmVkLgotICogQG9mZjogVGhlIG9mZnNldCBmb3IgdGhlIEdQSU8gYmVpbmcgY29uZmlndXJlZC4KLSAqIEBjZmc6IFRoZSBjb25maWd1cmF0aW9uIHZhbHVlIHRvIHNldC4KLSAqCi0gKiBUaGlzIGhlbHBlciBkZWFsIHdpdGggdGhlIEdQSU8gY2FzZXMgd2hlcmUgdGhlIGNvbnRyb2wgcmVnaXN0ZXIKLSAqIGhhcyB0d28gYml0cyBvZiBjb25maWd1cmF0aW9uIHBlciBncGlvLCB3aGljaCBoYXZlIHRoZSBmb2xsb3dpbmcKLSAqIGZ1bmN0aW9uczoKLSAqCTAwID0gaW5wdXQKLSAqCTAxID0gb3V0cHV0Ci0gKgkxeCA9IHNwZWNpYWwgZnVuY3Rpb24KLSovCi1leHRlcm4gaW50IHMzY19ncGlvX3NldGNmZ19zM2MyNHh4KHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAotCQkJCSAgIHVuc2lnbmVkIGludCBvZmYsIHVuc2lnbmVkIGludCBjZmcpOwotCi0vKioKLSAqIHMzY19ncGlvX3NldGNmZ19zM2MyNHh4X2EgLSBTM0MyNFhYIHN0eWxlIEdQSU8gY29uZmlndXJhdGlvbiAoQmFuayBBKQotICogQGNoaXA6IFRoZSBncGlvIGNoaXAgdGhhdCBpcyBiZWluZyBjb25maWd1cmVkLgotICogQG9mZjogVGhlIG9mZnNldCBmb3IgdGhlIEdQSU8gYmVpbmcgY29uZmlndXJlZC4KLSAqIEBjZmc6IFRoZSBjb25maWd1cmF0aW9uIHZhbHVlIHRvIHNldC4KLSAqCi0gKiBUaGlzIGhlbHBlciBkZWFsIHdpdGggdGhlIEdQSU8gY2FzZXMgd2hlcmUgdGhlIGNvbnRyb2wgcmVnaXN0ZXIKLSAqIGhhcyBvbmUgYml0IG9mIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBncGlvLCB3aGVyZSBzZXR0aW5nIHRoZSBiaXQKLSAqIG1lYW5zIHRoZSBwaW4gaXMgaW4gc3BlY2lhbCBmdW5jdGlvbiBtb2RlIGFuZCB1bnNldCBtZWFucyBvdXRwdXQuCi0qLwotZXh0ZXJuIGludCBzM2NfZ3Bpb19zZXRjZmdfczNjMjR4eF9hKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAotCQkJCSAgICAgdW5zaWduZWQgaW50IG9mZiwgdW5zaWduZWQgaW50IGNmZyk7Ci0KLS8qKgotICogczNjX2dwaW9fc2V0Y2ZnX3MzYzY0eHhfNGJpdCAtIFMzQzY0WFggNGJpdCBzaW5nbGUgcmVnaXN0ZXIgR1BJTyBjb25maWcuCi0gKiBAY2hpcDogVGhlIGdwaW8gY2hpcCB0aGF0IGlzIGJlaW5nIGNvbmZpZ3VyZWQuCi0gKiBAb2ZmOiBUaGUgb2Zmc2V0IGZvciB0aGUgR1BJTyBiZWluZyBjb25maWd1cmVkLgotICogQGNmZzogVGhlIGNvbmZpZ3VyYXRpb24gdmFsdWUgdG8gc2V0LgotICoKLSAqIFRoaXMgaGVscGVyIGRlYWwgd2l0aCB0aGUgR1BJTyBjYXNlcyB3aGVyZSB0aGUgY29udHJvbCByZWdpc3RlciBoYXMgNCBiaXRzCi0gKiBvZiBjb250cm9sIHBlciBHUElPLCBnZW5lcmFsbHkgaW4gdGhlIGZvcm0gb2Y6Ci0gKgkwMDAwID0gSW5wdXQKLSAqCTAwMDEgPSBPdXRwdXQKLSAqCW90aGVycyA9IFNwZWNpYWwgZnVuY3Rpb25zIChkZXBlbmRhbnQgb24gYmFuaykKLSAqCi0gKiBOb3RlLCBzaW5jZSB0aGUgY29kZSB0byBkZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlcmUgYXJlIHR3byBjb250cm9sCi0gKiByZWdpc3RlcnMgaW5zdGVhZCBvZiBvbmUsIHdlIGRvIG5vdCBoYXZlIGEgc2VwZXJhdGUgc2V0IG9mIGZ1bmN0aW9ucyBmb3IKLSAqIGVhY2ggY2FzZS4KLSovCi1leHRlcm4gaW50IHMzY19ncGlvX3NldGNmZ19zM2M2NHh4XzRiaXQoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCi0JCQkJCXVuc2lnbmVkIGludCBvZmYsIHVuc2lnbmVkIGludCBjZmcpOwotCi0KLS8qIFB1bGwte3VwLGRvd259IHJlc2lzdG9yIGNvbnRyb2xzLgotICoKLSAqIFMzQzI0MTAsUzNDMjQ0MCxTM0MyNEEwID0gUHVsbC1VUCwKLSAqIFMzQzI0MTIsUzNDMjQxMyA9IFB1bGwtRG93bgotICogUzNDNjQwMCxTM0M2NDEwID0gUHVsbC1Cb3RoIFtOb25lLERvd24sVXAsVW5kZWZdCi0gKiBTM0MyNDQzID0gUHVsbC1Cb3RoIFtub3Qgc2FtZSBhcyBTM0M2NDAwXQotICovCi0KLS8qKgotICogczNjX2dwaW9fc2V0cHVsbF8xdXAoKSAtIFB1bGwgY29uZmlndXJhdGlvbiBmb3IgY2hvaWNlIG9mIHVwIG9yIG5vbmUuCi0gKiBAY2hpcDogVGhlIGdwaW8gY2hpcCB0aGF0IGlzIGJlaW5nIGNvbmZpZ3VyZWQuCi0gKiBAb2ZmOiBUaGUgb2Zmc2V0IGZvciB0aGUgR1BJTyBiZWluZyBjb25maWd1cmVkLgotICogQHBhcmFtOiBwdWxsOiBUaGUgcHVsbCBtb2RlIGJlaW5nIHJlcXVlc3RlZC4KLSAqCi0gKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIEdQSU9zIHdpdGggb25lCi0gKiBiaXQgY29uZmlndXJpbmcgdGhlIHByZXNlbmNlIG9mIGEgcHVsbC11cCByZXNpc3Rvci4KLSAqLwotZXh0ZXJuIGludCBzM2NfZ3Bpb19zZXRwdWxsXzF1cChzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKLQkJCQl1bnNpZ25lZCBpbnQgb2ZmLCBzM2NfZ3Bpb19wdWxsX3QgcHVsbCk7Ci0KLS8qKgotICogczNjX2dwaW9fc2V0cHVsbF8xZG93bigpIC0gUHVsbCBjb25maWd1cmF0aW9uIGZvciBjaG9pY2Ugb2YgZG93biBvciBub25lCi0gKiBAY2hpcDogVGhlIGdwaW8gY2hpcCB0aGF0IGlzIGJlaW5nIGNvbmZpZ3VyZWQKLSAqIEBvZmY6IFRoZSBvZmZzZXQgZm9yIHRoZSBHUElPIGJlaW5nIGNvbmZpZ3VyZWQKLSAqIEBwYXJhbTogcHVsbDogVGhlIHB1bGwgbW9kZSBiZWluZyByZXF1ZXN0ZWQKLSAqCi0gKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIEdQSU9zIHdpdGggb25lCi0gKiBiaXQgY29uZmlndXJpbmcgdGhlIHByZXNlbmNlIG9mIGEgcHVsbC1kb3duIHJlc2lzdG9yLgotICovCi1leHRlcm4gaW50IHMzY19ncGlvX3NldHB1bGxfMWRvd24oc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCi0JCQkJICB1bnNpZ25lZCBpbnQgb2ZmLCBzM2NfZ3Bpb19wdWxsX3QgcHVsbCk7Ci0KLS8qKgotICogczNjX2dwaW9fc2V0cHVsbF91cG93bigpIC0gUHVsbCBjb25maWd1cmF0aW9uIGZvciBjaG9pY2Ugb2YgdXAsIGRvd24gb3Igbm9uZQotICogQGNoaXA6IFRoZSBncGlvIGNoaXAgdGhhdCBpcyBiZWluZyBjb25maWd1cmVkLgotICogQG9mZjogVGhlIG9mZnNldCBmb3IgdGhlIEdQSU8gYmVpbmcgY29uZmlndXJlZC4KLSAqIEBwYXJhbTogcHVsbDogVGhlIHB1bGwgbW9kZSBiZWluZyByZXF1ZXN0ZWQuCi0gKgotICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBHUElPcyB3aXRoIHR3bwotICogYml0cyBjb25maWd1cmluZyB0aGUgcHJlc2VuY2Ugb2YgYSBwdWxsIHJlc2lzdG9yLCBpbiB0aGUgZm9sbG93aW5nCi0gKiBvcmRlcjoKLSAqCTAwID0gTm8gcHVsbCByZXNpc3RvciBjb25uZWN0ZWQKLSAqCTAxID0gUHVsbC11cCByZXNpc3RvciBjb25uZWN0ZWQKLSAqCTEwID0gUHVsbC1kb3duIHJlc2lzdG9yIGNvbm5lY3RlZAotICovCi1leHRlcm4gaW50IHMzY19ncGlvX3NldHB1bGxfdXBkb3duKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAotCQkJCSAgIHVuc2lnbmVkIGludCBvZmYsIHMzY19ncGlvX3B1bGxfdCBwdWxsKTsKLQotCi0vKioKLSAqIHMzY19ncGlvX2dldHB1bGxfdXBkb3duKCkgLSBHZXQgY29uZmlndXJhdGlvbiBmb3IgY2hvaWNlIG9mIHVwLCBkb3duIG9yIG5vbmUKLSAqIEBjaGlwOiBUaGUgZ3BpbyBjaGlwIHRoYXQgdGhlIEdQSU8gcGluIGJlbG9uZ3MgdG8KLSAqIEBvZmY6IFRoZSBvZmZzZXQgdG8gdGhlIHBpbiB0byBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gb2YuCi0gKgotICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gcmVhZHMgdGhlIHN0YXRlIG9mIHRoZSBwdWxsLXt1cCxkb3dufSByZXNpc3RvciBmb3IgdGhlCi0gKiBnaXZlbiBHUElPIGluIHRoZSBzYW1lIGNhc2UgYXMgczNjX2dwaW9fc2V0cHVsbF91cG93bi4KLSovCi1leHRlcm4gczNjX2dwaW9fcHVsbF90IHMzY19ncGlvX2dldHB1bGxfdXBkb3duKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAotCQkJCQkgICAgICAgdW5zaWduZWQgaW50IG9mZik7Ci0KLS8qKgotICogczNjX2dwaW9fc2V0cHVsbF9zM2MyNDQzKCkgLSBQdWxsIGNvbmZpZ3VyYXRpb24gZm9yIHMzYzI0NDMuCi0gKiBAY2hpcDogVGhlIGdwaW8gY2hpcCB0aGF0IGlzIGJlaW5nIGNvbmZpZ3VyZWQuCi0gKiBAb2ZmOiBUaGUgb2Zmc2V0IGZvciB0aGUgR1BJTyBiZWluZyBjb25maWd1cmVkLgotICogQHBhcmFtOiBwdWxsOiBUaGUgcHVsbCBtb2RlIGJlaW5nIHJlcXVlc3RlZC4KLSAqCi0gKiBUaGlzIGlzIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIEdQSU9zIHdpdGggdHdvCi0gKiBiaXRzIGNvbmZpZ3VyaW5nIHRoZSBwcmVzZW5jZSBvZiBhIHB1bGwgcmVzaXN0b3IsIGluIHRoZSBmb2xsb3dpbmcKLSAqIG9yZGVyOgotICoJMDAgPSBQdWxsLXVwIHJlc2lzdG9yIGNvbm5lY3RlZAotICoJMTAgPSBQdWxsLWRvd24gcmVzaXN0b3IgY29ubmVjdGVkCi0gKgl4MSA9IE5vIHB1bGwgdXAgcmVzaXN0b3IKLSAqLwotZXh0ZXJuIGludCBzM2NfZ3Bpb19zZXRwdWxsX3MzYzI0NDMoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCi0JCQkJICAgIHVuc2lnbmVkIGludCBvZmYsIHMzY19ncGlvX3B1bGxfdCBwdWxsKTsKLQotLyoqCi0gKiBzM2NfZ3Bpb19nZXRwdWxsX3MzYzI0NDMoKSAtIEdldCBjb25maWd1cmF0aW9uIGZvciBzM2MyNDQzIHB1bGwgcmVzaXN0b3JzCi0gKiBAY2hpcDogVGhlIGdwaW8gY2hpcCB0aGF0IHRoZSBHUElPIHBpbiBiZWxvbmdzIHRvLgotICogQG9mZjogVGhlIG9mZnNldCB0byB0aGUgcGluIHRvIGdldCB0aGUgY29uZmlndXJhdGlvbiBvZi4KLSAqCi0gKiBUaGlzIGhlbHBlciBmdW5jdGlvbiByZWFkcyB0aGUgc3RhdGUgb2YgdGhlIHB1bGwte3VwLGRvd259IHJlc2lzdG9yIGZvciB0aGUKLSAqIGdpdmVuIEdQSU8gaW4gdGhlIHNhbWUgY2FzZSBhcyBzM2NfZ3Bpb19zZXRwdWxsX3Vwb3duLgotKi8KLWV4dGVybiBzM2NfZ3Bpb19wdWxsX3QgczNjX2dwaW9fZ2V0cHVsbF9zM2MyNHh4KHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAotCQkJCQkJdW5zaWduZWQgaW50IG9mZik7Ci0KLSNlbmRpZiAvKiBfX1BMQVRfR1BJT19DRkdfSEVMUEVSU19IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9ncGlvLWNvcmUuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9ncGlvLWNvcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJhZjYxMi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZ3Bpby1jb3JlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2dwaW8tY29yZS5oCi0gKgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoKLSAqIFMzQyBQbGF0Zm9ybSAtIEdQSU8gY29yZQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0vKiBEZWZpbmUgdGhlIGNvcmUgZ3Bpb2xpYiBzdXBwb3J0IGZ1bmN0aW9ucyB0aGF0IHRoZSBzM2MgcGxhdGZvcm1zIG1heQotICogbmVlZCB0byBleHRlbmQgb3IgY2hhbmdlIGRlcGVuZGluZyBvbiB0aGUgaGFyZHdhcmUgYW5kIHRoZSBzM2MgY2hpcAotICogc2VsZWN0ZWQgYXQgYnVpbGQgb3IgZm91bmQgYXQgcnVuIHRpbWUuCi0gKgotICogVGhlc2UgZGVmaW5pdGlvbnMgYXJlIG5vdCBpbnRlbmRlZCBmb3IgZHJpdmVyIGluY2x1c2lvbiwgdGhlcmUgaXMKLSAqIG5vdGhpbmcgaGVyZSB0aGF0IHNob3VsZCBub3QgbGl2ZSBvdXRzaWRlIHRoZSBwbGF0Zm9ybSBhbmQgY29yZQotICogc3BlY2lmaWMgY29kZS4KLSovCi0KLXN0cnVjdCBzM2NfZ3Bpb19jaGlwOwotCi0vKioKLSAqIHN0cnVjdCBzM2NfZ3Bpb19wbSAtIHBvd2VyIG1hbmFnZW1lbnQgKHN1c3BlbmQvcmVzdW1lKSBpbmZvcm1hdGlvbgotICogQHNhdmU6IFJvdXRpbmUgdG8gc2F2ZSB0aGUgc3RhdGUgb2YgdGhlIEdQSU8gYmxvY2sKLSAqIEByZXN1bWU6IFJvdXRpbmUgdG8gcmVzdW1lIHRoZSBHUElPIGJsb2NrLgotICovCi1zdHJ1Y3QgczNjX2dwaW9fcG0gewotCXZvaWQgKCpzYXZlKShzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCk7Ci0Jdm9pZCAoKnJlc3VtZSkoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXApOwotfTsKLQotc3RydWN0IHMzY19ncGlvX2NmZzsKLQotLyoqCi0gKiBzdHJ1Y3QgczNjX2dwaW9fY2hpcCAtIHdyYXBwZXIgZm9yIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIGdwaW8KLSAqIEBjaGlwOiBUaGUgY2hpcCBzdHJ1Y3R1cmUgdG8gYmUgZXhwb3J0ZWQgdmlhIGdwaW9saWIuCi0gKiBAYmFzZTogVGhlIGJhc2UgcG9pbnRlciB0byB0aGUgZ3BpbyBjb25maWd1cmF0aW9uIHJlZ2lzdGVycy4KLSAqIEBjb25maWc6IHNwZWNpYWwgZnVuY3Rpb24gYW5kIHB1bGwtcmVzaXN0b3IgY29udHJvbCBpbmZvcm1hdGlvbi4KLSAqIEBwbV9zYXZlOiBTYXZlIGluZm9ybWF0aW9uIGZvciBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0LgotICoKLSAqIFRoaXMgd3JhcHBlciBwcm92aWRlcyB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZvciB0aGUgU2Ftc3VuZwotICogc3BlY2lmaWMgZ3Bpb3MgYmVpbmcgcmVnaXN0ZXJlZCB3aXRoIGdwaW9saWIuCi0gKi8KLXN0cnVjdCBzM2NfZ3Bpb19jaGlwIHsKLQlzdHJ1Y3QgZ3Bpb19jaGlwCWNoaXA7Ci0Jc3RydWN0IHMzY19ncGlvX2NmZwkqY29uZmlnOwotCXN0cnVjdCBzM2NfZ3Bpb19wbQkqcG07Ci0Jdm9pZCBfX2lvbWVtCQkqYmFzZTsKLSNpZmRlZiBDT05GSUdfUE0KLQl1MzIJCQlwbV9zYXZlWzRdOwotI2VuZGlmCi19OwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBzM2NfZ3Bpb19jaGlwICp0b19zM2NfZ3BpbyhzdHJ1Y3QgZ3Bpb19jaGlwICpncGMpCi17Ci0JcmV0dXJuIGNvbnRhaW5lcl9vZihncGMsIHN0cnVjdCBzM2NfZ3Bpb19jaGlwLCBjaGlwKTsKLX0KLQotLyoqIHMzY19ncGlvbGliX2FkZCgpIC0gYWRkIHRoZSBzM2Mgc3BlY2lmaWMgdmVyc2lvbiBvZiBhIGdwaW9fY2hpcC4KLSAqIEBjaGlwOiBUaGUgY2hpcCB0byByZWdpc3RlcgotICoKLSAqIFRoaXMgaXMgYSB3cmFwcGVyIHRvIGdwaW9jaGlwX2FkZCgpIHRoYXQgdGFrZXMgb3VyIHNwZWNpZmljIGdwaW8gY2hpcAotICogaW5mb3JtYXRpb24gYW5kIG1ha2VzIHRoZSBuZWNlc3NhcnkgYWx0ZXJhdGlvbnMgZm9yIHRoZSBwbGF0Zm9ybSBhbmQKLSAqIG5vdGVzIHRoZSBpbmZvcm1hdGlvbiBmb3IgdXNlIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gc3lzdGVtcyBhbmQgYW55Ci0gKiBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLgotICovCi1leHRlcm4gdm9pZCBzM2NfZ3Bpb2xpYl9hZGQoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXApOwotCi0vKiBDT05GSUdfUzNDX0dQSU9fVFJBQ0sgZW5hYmxlcyB0aGUgdHJhY2tpbmcgb2YgdGhlIHMzYyBzcGVjaWZpYyBncGlvcwotICogZm9yIHVzZSB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGNhbGxzLCBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHMzYyBncGlvbGliCi0gKiBzdXBwb3J0IGNvZGUuCi0gKgotICogTm90IGFsbCBzM2Mgc3VwcG9ydCBjb2RlIHdpbGwgbmVlZCB0aGlzLCBhcyBzb21lIGNvbmZpZ3VyYXRpb25zIG9mIGNwdQotICogbWF5IG9ubHkgc3VwcG9ydCBvbmUgb3IgdHdvIGRpZmZlcmVudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGhhdmUgYW4KLSAqIGVhc3kgZ3BpbyB0byBzM2NfZ3Bpb19jaGlwIG1hcHBpbmcgZnVuY3Rpb24uIElmIHRoaXMgaXMgdGhlIGNhc2UsIHRoZW4KLSAqIHRoZSBtYWNoaW5lIHN1cHBvcnQgZmlsZSBzaG91bGQgcHJvdmlkZSBpdHMgb3duIHMzY19ncGlvbGliX2dldGNoaXAoKQotICogYW5kIGFueSBvdGhlciBuZWNlc3NhcnkgZnVuY3Rpb25zLgotICovCi0KLSNpZmRlZiBDT05GSUdfUzNDX0dQSU9fVFJBQ0sKLWV4dGVybiBzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqczNjX2dwaW9zW1MzQ19HUElPX0VORF07Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHMzY19ncGlvX2NoaXAgKnMzY19ncGlvbGliX2dldGNoaXAodW5zaWduZWQgaW50IGNoaXApCi17Ci0JcmV0dXJuIChjaGlwIDwgUzNDX0dQSU9fRU5EKSA/IHMzY19ncGlvc1tjaGlwXSA6IE5VTEw7Ci19Ci0jZWxzZQotLyogbWFjaGluZSBzcGVjaWZpYyBjb2RlIHNob3VsZCBwcm92aWRlIHMzY19ncGlvbGliX2dldGNoaXAgKi8KLQotc3RhdGljIGlubGluZSB2b2lkIHMzY19ncGlvbGliX3RyYWNrKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwKSB7IH0KLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1BNCi1leHRlcm4gc3RydWN0IHMzY19ncGlvX3BtIHMzY19ncGlvX3BtXzFiaXQ7Ci1leHRlcm4gc3RydWN0IHMzY19ncGlvX3BtIHMzY19ncGlvX3BtXzJiaXQ7Ci1leHRlcm4gc3RydWN0IHMzY19ncGlvX3BtIHMzY19ncGlvX3BtXzRiaXQ7Ci0jZGVmaW5lIF9fZ3Bpb19wbSh4KSB4Ci0jZWxzZQotI2RlZmluZSBzM2NfZ3Bpb19wbV8xYml0IE5VTEwKLSNkZWZpbmUgczNjX2dwaW9fcG1fMmJpdCBOVUxMCi0jZGVmaW5lIHMzY19ncGlvX3BtXzRiaXQgTlVMTAotI2RlZmluZSBfX2dwaW9fcG0oeCkgTlVMTAotCi0jZW5kaWYgLyogQ09ORklHX1BNICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvbmFuZC5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L25hbmQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjI2MTQ3Yi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvbmFuZC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjcgKzAsMCBAQAotLyogYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9uYW5kLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogUzNDMjQxMCAtIE5BTkQgZGV2aWNlIGNvbnRyb2xsZXIgcGxhdGZyb21fZGV2aWNlIGluZm8KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotLyoqCi0gKiBzdHJ1Y3QgczNjMjQxMF9uYW5kX3NldCAtIGRlZmluZSBhIHNldCBvZiBvbmUgb3IgbW9yZSBuYW5kIGNoaXBzCi0gKiBAZGlzYWJsZV9lY2M6CUVudGlyZWx5IGRpc2FibGUgRUNDIC0gRGFuZ2Vyb3VzCi0gKiBAZmxhc2hfYmJ0OiAJCU9wZW5tb2tvIHUtYm9vdCBjYW4gY3JlYXRlIGEgQmFkIEJsb2NrIFRhYmxlCi0gKgkJCVNldHRpbmcgdGhpcyBmbGFnIHdpbGwgYWxsb3cgdGhlIGtlcm5lbCB0bwotICoJCQlsb29rIGZvciBpdCBhdCBib290IHRpbWUgYW5kIGFsc28gc2tpcCB0aGUgTkFORAotICoJCQlzY2FuLgotICogQG9wdGlvbnM6CQlEZWZhdWx0IHZhbHVlIHRvIHNldCBpbnRvICdzdHJ1Y3QgbmFuZF9jaGlwJyBvcHRpb25zLgotICogQG5yX2NoaXBzOgkJTnVtYmVyIG9mIGNoaXBzIGluIHRoaXMgc2V0Ci0gKiBAbnJfcGFydGl0aW9uczoJTnVtYmVyIG9mIHBhcnRpdGlvbnMgcG9pbnRlZCB0byBieSBAcGFydGl0aW9ucwotICogQG5hbWU6CQlOYW1lIG9mIHNldCAob3B0aW9uYWwpCi0gKiBAbnJfbWFwOgkJTWFwIGZvciBsb3ctbGF5ZXIgbG9naWNhbCB0byBwaHlzaWNhbCBjaGlwIG51bWJlcnMgKG9wdGlvbikKLSAqIEBwYXJ0aXRpb25zOgkJVGhlIG10ZCBwYXJ0aXRpb24gbGlzdAotICoKLSAqIGRlZmluZSBhIHNldCBvZiBvbmUgb3IgbW9yZSBuYW5kIGNoaXBzIHJlZ2lzdGVyZWQgd2l0aCBhbiB1bmlxdWUgbXRkLiBBbHNvCi0gKiBhbGxvd3MgdG8gcGFzcyBmbGFnIHRvIHRoZSB1bmRlcmx5aW5nIE5BTkQgbGF5ZXIuICdkaXNhYmxlX2VjYycgd2lsbCB0cmlnZ2VyCi0gKiBhIHdhcm5pbmcgYXQgYm9vdCB0aW1lLgotICovCi1zdHJ1Y3QgczNjMjQxMF9uYW5kX3NldCB7Ci0JdW5zaWduZWQgaW50CQlkaXNhYmxlX2VjYzoxOwotCXVuc2lnbmVkIGludAkJZmxhc2hfYmJ0OjE7Ci0KLQl1bnNpZ25lZCBpbnQJCW9wdGlvbnM7Ci0JaW50CQkJbnJfY2hpcHM7Ci0JaW50CQkJbnJfcGFydGl0aW9uczsKLQljaGFyCQkJKm5hbWU7Ci0JaW50CQkJKm5yX21hcDsKLQlzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkqcGFydGl0aW9uczsKLQlzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQJKmVjY19sYXlvdXQ7Ci19OwotCi1zdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9uYW5kIHsKLQkvKiB0aW1pbmcgaW5mb3JtYXRpb24gZm9yIGNvbnRyb2xsZXIsIGFsbCB0aW1lcyBpbiBuYW5vc2Vjb25kcyAqLwotCi0JaW50CXRhY2xzOwkvKiB0aW1lIGZvciBhY3RpdmUgQ0xFL0FMRSB0byBuV0Uvbk9FICovCi0JaW50CXR3cnBoMDsJLyogYWN0aXZlIHRpbWUgZm9yIG5XRS9uT0UgKi8KLQlpbnQJdHdycGgxOwkvKiB0aW1lIGZvciByZWxlYXNlIENMRS9BTEUgZnJvbSBuV0Uvbk9FIGluYWN0aXZlICovCi0KLQl1bnNpZ25lZCBpbnQJaWdub3JlX3Vuc2V0X2VjYzoxOwotCi0JaW50CQkJbnJfc2V0czsKLQlzdHJ1Y3QgczNjMjQxMF9uYW5kX3NldCAqc2V0czsKLQotCXZvaWQJCQkoKnNlbGVjdF9jaGlwKShzdHJ1Y3QgczNjMjQxMF9uYW5kX3NldCAqLAotCQkJCQkgICAgICAgaW50IGNoaXApOwotfTsKLQotLyoqCi0gKiBzM2NfbmFuZF9zZXRfcGxhdGRhdGEoKSAtIHJlZ2lzdGVyIE5BTkQgcGxhdGZvcm0gZGF0YS4KLSAqIEBuYW5kOiBUaGUgTkFORCBwbGF0Zm9ybSBkYXRhIHRvIHJlZ2lzdGVyIHdpdGggczNjX2RldmljZV9uYW5kLgotICoKLSAqIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBnaXZlbiBOQU5EIHBsYXRmb3JtIGRhdGEsIEBuYW5kIGFuZCByZWdpc3RlcnMKLSAqIGl0IHdpdGggdGhlIHMzY19kZXZpY2VfbmFuZC4gVGhpcyBhbGxvd3MgQG5hbmQgdG8gYmUgX19pbml0ZGF0YS4KLSovCi1leHRlcm4gdm9pZCBzM2NfbmFuZF9zZXRfcGxhdGRhdGEoc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCAqbmFuZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcG0uaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9wbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTc5NzE5Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9wbS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTg5ICswLDAgQEAKLS8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9wbGF0LXMzYzI0eHgvcG0uaAotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKglXcml0dGVuIGJ5IEJlbiBEb29rcywgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLS8qIHMzY19wbV9pbml0Ci0gKgotICogY2FsbGVkIGZyb20gYm9hcmQgYXQgaW5pdGlhbGlzYXRpb24gdGltZSB0byBzZXR1cCB0aGUgcG93ZXIKLSAqIG1hbmFnZW1lbnQKLSovCi0KLSNpZmRlZiBDT05GSUdfUE0KLQotZXh0ZXJuIF9faW5pdCBpbnQgczNjX3BtX2luaXQodm9pZCk7Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbmxpbmUgaW50IHMzY19wbV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotLyogY29uZmlndXJhdGlvbiBmb3IgdGhlIElSUSBtYXNrIG92ZXIgc2xlZXAgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2ludG1hc2s7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9laW50bWFzazsKLQotLyogSVJRIG1hc2tzIGZvciBJUlFzIGFsbG93ZWQgdG8gZ28gdG8gc2xlZXAgKHNlZSBpcnEuYykgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2ludGFsbG93OwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfZWludGFsbG93OwotCi0vKiBwZXItY3B1IHNsZWVwIGZ1bmN0aW9ucyAqLwotCi1leHRlcm4gdm9pZCAoKnBtX2NwdV9wcmVwKSh2b2lkKTsKLWV4dGVybiB2b2lkICgqcG1fY3B1X3NsZWVwKSh2b2lkKTsKLQotLyogRmxhZ3MgZm9yIFBNIENvbnRyb2wgKi8KLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjX3BtX2ZsYWdzOwotCi1leHRlcm4gdW5zaWduZWQgY2hhciBwbV91YXJ0X3VkaXZzbG90OyAgLyogdHJ1ZSB0byBzYXZlIFVBUlQgVURJVlNMT1QgKi8KLQotLyogZnJvbSBzbGVlcC5TICovCi0KLWV4dGVybiBpbnQgIHMzY19jcHVfc2F2ZSh1bnNpZ25lZCBsb25nICpzYXZlYmxrKTsKLWV4dGVybiB2b2lkIHMzY19jcHVfcmVzdW1lKHZvaWQpOwotCi1leHRlcm4gdm9pZCBzM2MyNDEwX2NwdV9zdXNwZW5kKHZvaWQpOwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzM2Nfc2xlZXBfc2F2ZV9waHlzOwotCi0vKiBzbGVlcCBzYXZlIGluZm8gKi8KLQotLyoqCi0gKiBzdHJ1Y3Qgc2xlZXBfc2F2ZSAtIHNhdmUgaW5mb3JtYXRpb24gZm9yIHNoYXJlZCBwZXJpcGhlcmFscy4KLSAqIEByZWc6IFBvaW50ZXIgdG8gdGhlIHJlZ2lzdGVyIHRvIHNhdmUuCi0gKiBAdmFsOiBIb2xkZXIgZm9yIHRoZSB2YWx1ZSBzYXZlZCBmcm9tIHJlZy4KLSAqCi0gKiBUaGlzIGRlc2NyaWJlcyBhIGxpc3Qgb2YgcmVnaXN0ZXJzIHdoaWNoIGlzIHVzZWQgYnkgdGhlIHBtIGNvcmUgYW5kCi0gKiBvdGhlciBzdWJzeXN0ZW0gdG8gc2F2ZSBhbmQgcmVzdG9yZSByZWdpc3RlciB2YWx1ZXMgb3ZlciBzdXNwZW5kLgotICovCi1zdHJ1Y3Qgc2xlZXBfc2F2ZSB7Ci0Jdm9pZCBfX2lvbWVtCSpyZWc7Ci0JdW5zaWduZWQgbG9uZwl2YWw7Ci19OwotCi0jZGVmaW5lIFNBVkVfSVRFTSh4KSBcCi0JeyAucmVnID0gKHgpIH0KLQotLyoqCi0gKiBzdHJ1Y3QgcG1fdWFydF9zYXZlIC0gc2F2ZSBibG9jayBmb3IgY29yZSBVQVJUCi0gKiBAdWxjb246IFNhdmUgdmFsdWUgZm9yIFMzQzI0MTBfVUxDT04KLSAqIEB1Y29uOiBTYXZlIHZhbHVlIGZvciBTM0MyNDEwX1VDT04KLSAqIEB1ZmNvbjogU2F2ZSB2YWx1ZSBmb3IgUzNDMjQxMF9VRkNPTgotICogQHVtY29uOiBTYXZlIHZhbHVlIGZvciBTM0MyNDEwX1VNQ09OCi0gKiBAdWJyZGl2OiBTYXZlIHZhbHVlIGZvciBTM0MyNDEwX1VCUkRJVgotICoKLSAqIFNhdmUgYmxvY2sgZm9yIFVBUlQgcmVnaXN0ZXJzIHRvIGJlIGhlbGQgb3ZlciBzbGVlcCBhbmQgcmVzdG9yZWQgaWYgdGhleQotICogYXJlIG5lZWRlZCAoc2F5IGJ5IGRlYnVnKS4KLSovCi1zdHJ1Y3QgcG1fdWFydF9zYXZlIHsKLQl1MzIJdWxjb247Ci0JdTMyCXVjb247Ci0JdTMyCXVmY29uOwotCXUzMgl1bWNvbjsKLQl1MzIJdWJyZGl2OwotCXUzMgl1ZGl2c2xvdDsKLX07Ci0KLS8qIGhlbHBlciBmdW5jdGlvbnMgdG8gc2F2ZS9yZXN0b3JlIGxpc3RzIG9mIHJlZ2lzdGVycy4gKi8KLQotZXh0ZXJuIHZvaWQgczNjX3BtX2RvX3NhdmUoc3RydWN0IHNsZWVwX3NhdmUgKnB0ciwgaW50IGNvdW50KTsKLWV4dGVybiB2b2lkIHMzY19wbV9kb19yZXN0b3JlKHN0cnVjdCBzbGVlcF9zYXZlICpwdHIsIGludCBjb3VudCk7Ci1leHRlcm4gdm9pZCBzM2NfcG1fZG9fcmVzdG9yZV9jb3JlKHN0cnVjdCBzbGVlcF9zYXZlICpwdHIsIGludCBjb3VudCk7Ci0KLSNpZmRlZiBDT05GSUdfUE0KLWV4dGVybiBpbnQgczNjX2lycWV4dF93YWtlKHVuc2lnbmVkIGludCBpcnFubywgdW5zaWduZWQgaW50IHN0YXRlKTsKLWV4dGVybiBpbnQgczNjMjR4eF9pcnFfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotZXh0ZXJuIGludCBzM2MyNHh4X2lycV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldik7Ci0jZWxzZQotI2RlZmluZSBzM2NfaXJxZXh0X3dha2UgTlVMTAotI2RlZmluZSBzM2MyNHh4X2lycV9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgczNjMjR4eF9pcnFfcmVzdW1lICBOVUxMCi0jZW5kaWYKLQotLyogUE0gZGVidWcgZnVuY3Rpb25zICovCi0KLSNpZmRlZiBDT05GSUdfUzNDMjQxMF9QTV9ERUJVRwotLyoqCi0gKiBzM2NfcG1fZGJnKCkgLSBsb3cgbGV2ZWwgZGVidWcgZnVuY3Rpb24gZm9yIHVzZSBpbiBzdXNwZW5kL3Jlc3VtZS4KLSAqIEBtc2c6IFRoZSBtZXNzYWdlIHRvIHByaW50LgotICoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBtYWlubHkgdG8gZGVidWcgdGhlIHJlc3VtZSBwcm9jZXNzIGJlZm9yZSB0aGUgc3lzdGVtCi0gKiBjYW4gcmVseSBvbiBwcmludGsvY29uc29sZSBvdXRwdXQuIEl0IHVzZXMgdGhlIGxvdy1sZXZlbCBkZWJ1Z2dpbmcgb3V0cHV0Ci0gKiByb3V0aW5lIHByaW50YXNjaWkoKSB0byBkbyBpdHMgd29yay4KLSAqLwotZXh0ZXJuIHZvaWQgczNjX3BtX2RiZyhjb25zdCBjaGFyICptc2csIC4uLik7Ci0KLSNkZWZpbmUgUzNDX1BNREJHKGZtdC4uLikgczNjX3BtX2RiZyhmbXQpCi0jZWxzZQotI2RlZmluZSBTM0NfUE1EQkcoZm10Li4uKSBwcmludGsoS0VSTl9ERUJVRyBmbXQpCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19TM0NfUE1fREVCVUdfTEVEX1NNREsKLS8qKgotICogczNjX3BtX2RlYnVnX3NtZGtsZWQoKSAtIERlYnVnIFBNIHN1c3BlbmQvcmVzdW1lIHZpYSBTTURLIEJvYXJkIExFRHMKLSAqIEBzZXQ6IHNldCBiaXRzIGZvciB0aGUgc3RhdGUgb2YgdGhlIExFRHMKLSAqIEBjbGVhcjogY2xlYXIgYml0cyBmb3IgdGhlIHN0YXRlIG9mIHRoZSBMRURzLgotICovCi1leHRlcm4gdm9pZCBzM2NfcG1fZGVidWdfc21ka2xlZCh1MzIgc2V0LCB1MzIgY2xlYXIpOwotCi0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHMzY19wbV9kZWJ1Z19zbWRrbGVkKHUzMiBzZXQsIHUzMiBjbGVhcikgeyB9Ci0jZW5kaWYgLyogQ09ORklHX1MzQ19QTV9ERUJVR19MRURfU01ESyAqLwotCi0vKiBzdXNwZW5kIG1lbW9yeSBjaGVja2luZyAqLwotCi0jaWZkZWYgQ09ORklHX1MzQzI0MTBfUE1fQ0hFQ0sKLWV4dGVybiB2b2lkIHMzY19wbV9jaGVja19wcmVwYXJlKHZvaWQpOwotZXh0ZXJuIHZvaWQgczNjX3BtX2NoZWNrX3Jlc3RvcmUodm9pZCk7Ci1leHRlcm4gdm9pZCBzM2NfcG1fY2hlY2tfY2xlYW51cCh2b2lkKTsKLWV4dGVybiB2b2lkIHMzY19wbV9jaGVja19zdG9yZSh2b2lkKTsKLSNlbHNlCi0jZGVmaW5lIHMzY19wbV9jaGVja19wcmVwYXJlKCkgZG8geyB9IHdoaWxlKDApCi0jZGVmaW5lIHMzY19wbV9jaGVja19yZXN0b3JlKCkgZG8geyB9IHdoaWxlKDApCi0jZGVmaW5lIHMzY19wbV9jaGVja19jbGVhbnVwKCkgZG8geyB9IHdoaWxlKDApCi0jZGVmaW5lIHMzY19wbV9jaGVja19zdG9yZSgpICAgZG8geyB9IHdoaWxlKDApCi0jZW5kaWYKLQotLyoqCi0gKiBzM2NfcG1fY29uZmlndXJlX2V4dGludCgpIC0gZW5zdXJlIHBpbnMgYXJlIGNvcnJlY3RseSBzZXQgZm9yIElSUQotICoKLSAqIFNldHVwIGFsbCB0aGUgbmVjZXNzYXJ5IEdQSU8gcGlucyBmb3Igd2FraW5nIHRoZSBzeXN0ZW0gb24gZXh0ZXJuYWwKLSAqIGludGVycnVwdC4KLSAqLwotZXh0ZXJuIHZvaWQgczNjX3BtX2NvbmZpZ3VyZV9leHRpbnQodm9pZCk7Ci0KLS8qKgotICogczNjX3BtX3Jlc3RvcmVfZ3Bpb3MoKSAtIHJlc3RvcmUgdGhlIHN0YXRlIG9mIHRoZSBncGlvcyBhZnRlciBzbGVlcC4KLSAqCi0gKiBSZXN0b3JlIHRoZSBzdGF0ZSBvZiB0aGUgR1BJTyBwaW5zIGFmdGVyIHNsZWVwLCB3aGljaCBtYXkgaW52b2x2ZSBlbnN1cmluZwotICogdGhhdCB3ZSBkbyBub3QgZ2xpdGNoIHRoZSBzdGF0ZSBvZiB0aGUgcGlucyBmcm9tIHRoYXQgdGhlIGJvb3Rsb2FkZXIncwotICogcmVzdW1lIGNvZGUgaGFzIGRvbmUuCi0qLwotZXh0ZXJuIHZvaWQgczNjX3BtX3Jlc3RvcmVfZ3Bpb3Modm9pZCk7Ci0KLS8qKgotICogczNjX3BtX3NhdmVfZ3Bpb3MoKSAtIHNhdmUgdGhlIHN0YXRlIG9mIHRoZSBHUElPcyBmb3IgcmVzdG9yaW5nIGFmdGVyIHNsZWVwLgotICoKLSAqIFNhdmUgdGhlIEdQSU8gc3RhdGVzIGZvciByZXNvdHJhdGlvbiBvbiByZXN1bWUuIFNlZSBzM2NfcG1fcmVzdG9yZV9ncGlvcygpLgotICovCi1leHRlcm4gdm9pZCBzM2NfcG1fc2F2ZV9ncGlvcyh2b2lkKTsKLQotLyoqCi0gKiBzM2NfcG1fY2JfZmx1c2hjYWNoZSAtIGNhbGxiYWNrIGZvciBhc3NlbWJseSBjb2RlCi0gKgotICogQ2FsbGJhY2sgdG8gaXNzdWUgZmx1c2hfY2FjaGVfYWxsKCkgYXMgdGhpcyBjYWxsIGlzCi0gKiBub3QgYSBkaXJlY3RseSBjYWxsYWJsZSBvYmplY3QuCi0gKi8KLWV4dGVybiB2b2lkIHMzY19wbV9jYl9mbHVzaGNhY2hlKHZvaWQpOwotCi1leHRlcm4gdm9pZCBzM2NfcG1fc2F2ZV9jb3JlKHZvaWQpOwotZXh0ZXJuIHZvaWQgczNjX3BtX3Jlc3RvcmVfY29yZSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLWFkYy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtYWRjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMjNjY2MuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtYWRjLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3MtYWRjLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2hhbm5vbiBIb2xsYW5kIDxob2xsYW5kQGxvc2VyLm5ldD4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW9zdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBTM0MyNDEwIEFEQyByZWdpc3RlcnMKLSovCi0KLSNpZm5kZWYgX19BU01fQVJDSF9SRUdTX0FEQ19ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfUkVHU19BRENfSCAicmVncy1hZGMuaCIKLQotI2RlZmluZSBTM0MyNDEwX0FEQ1JFRyh4KSAoeCkKLQotI2RlZmluZSBTM0MyNDEwX0FEQ0NPTgkgICBTM0MyNDEwX0FEQ1JFRygweDAwKQotI2RlZmluZSBTM0MyNDEwX0FEQ1RTQwkgICBTM0MyNDEwX0FEQ1JFRygweDA0KQotI2RlZmluZSBTM0MyNDEwX0FEQ0RMWQkgICBTM0MyNDEwX0FEQ1JFRygweDA4KQotI2RlZmluZSBTM0MyNDEwX0FEQ0RBVDAJICAgUzNDMjQxMF9BRENSRUcoMHgwQykKLSNkZWZpbmUgUzNDMjQxMF9BRENEQVQxCSAgIFMzQzI0MTBfQURDUkVHKDB4MTApCi0KLQotLyogQURDQ09OIFJlZ2lzdGVyIEJpdHMgKi8KLSNkZWZpbmUgUzNDMjQxMF9BRENDT05fRUNGTEcJCSgxPDwxNSkKLSNkZWZpbmUgUzNDMjQxMF9BRENDT05fUFJTQ0VOCQkoMTw8MTQpCi0jZGVmaW5lIFMzQzI0MTBfQURDQ09OX1BSU0NWTCh4KQkoKCh4KSYweEZGKTw8NikKLSNkZWZpbmUgUzNDMjQxMF9BRENDT05fUFJTQ1ZMTUFTSwkoMHhGRjw8NikKLSNkZWZpbmUgUzNDMjQxMF9BRENDT05fU0VMTVVYKHgpCSgoKHgpJjB4Nyk8PDMpCi0jZGVmaW5lIFMzQzI0MTBfQURDQ09OX01VWE1BU0sJCSgweDc8PDMpCi0jZGVmaW5lIFMzQzI0MTBfQURDQ09OX1NUREJNCQkoMTw8MikKLSNkZWZpbmUgUzNDMjQxMF9BRENDT05fUkVBRF9TVEFSVAkoMTw8MSkKLSNkZWZpbmUgUzNDMjQxMF9BRENDT05fRU5BQkxFX1NUQVJUCSgxPDwwKQotI2RlZmluZSBTM0MyNDEwX0FEQ0NPTl9TVEFSVE1BU0sJKDB4Mzw8MCkKLQotCi0vKiBBRENUU0MgUmVnaXN0ZXIgQml0cyAqLwotI2RlZmluZSBTM0MyNDEwX0FEQ1RTQ19ZTV9TRU4JCSgxPDw3KQotI2RlZmluZSBTM0MyNDEwX0FEQ1RTQ19ZUF9TRU4JCSgxPDw2KQotI2RlZmluZSBTM0MyNDEwX0FEQ1RTQ19YTV9TRU4JCSgxPDw1KQotI2RlZmluZSBTM0MyNDEwX0FEQ1RTQ19YUF9TRU4JCSgxPDw0KQotI2RlZmluZSBTM0MyNDEwX0FEQ1RTQ19QVUxMX1VQX0RJU0FCTEUJKDE8PDMpCi0jZGVmaW5lIFMzQzI0MTBfQURDVFNDX0FVVE9fUFNUCQkoMTw8MikKLSNkZWZpbmUgUzNDMjQxMF9BRENUU0NfWFlfUFNUKHgpCSgoKHgpJjB4Myk8PDApCi0KLS8qIEFEQ0RBVDAgQml0cyAqLwotI2RlZmluZSBTM0MyNDEwX0FEQ0RBVDBfVVBET1dOCQkoMTw8MTUpCi0jZGVmaW5lIFMzQzI0MTBfQURDREFUMF9BVVRPX1BTVAkoMTw8MTQpCi0jZGVmaW5lIFMzQzI0MTBfQURDREFUMF9YWV9QU1QJCSgweDM8PDEyKQotI2RlZmluZSBTM0MyNDEwX0FEQ0RBVDBfWFBEQVRBX01BU0sJKDB4MDNGRikKLQotLyogQURDREFUMSBCaXRzICovCi0jZGVmaW5lIFMzQzI0MTBfQURDREFUMV9VUERPV04JCSgxPDwxNSkKLSNkZWZpbmUgUzNDMjQxMF9BRENEQVQxX0FVVE9fUFNUCSgxPDwxNCkKLSNkZWZpbmUgUzNDMjQxMF9BRENEQVQxX1hZX1BTVAkJKDB4Mzw8MTIpCi0jZGVmaW5lIFMzQzI0MTBfQURDREFUMV9ZUERBVEFfTUFTSwkoMHgwM0ZGKQotCi0jZW5kaWYgLyogX19BU01fQVJDSF9SRUdTX0FEQ19IICovCi0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtZmItdjQuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLWZiLXY0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE2MGVkMGQuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtZmItdjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDIzNSArMCwwIEBACi0vKiBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1mYi12NC5oCi0gKgotICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KLSAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogUzNDNjRYWCAtIG5ldy1zdHlsZSBmcmFtZWJ1ZmZlciByZWdpc3RlciBkZWZpbml0aW9ucwotICoKLSAqIFRoaXMgaXMgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIG5ldyBzdHlsZSBmcmFtZWJ1ZmZlciBpbnRlcmZhY2UKLSAqIGZvdW5kIGZyb20gdGhlIFMzQzI0NDMgb253YXJkcyBhbmQgc3BlY2lmaWNhbGx5IHRoZSBTM0M2NFhYIHNlcmllcwotICogUzNDNjQwMCBhbmQgUzNDNjQxMC4KLSAqCi0gKiBUaGUgZmlsZSBjb250YWlucyB0aGUgY3B1IHNwZWNpZmljIGl0ZW1zIHdoaWNoIGNoYW5nZSBiZXR3ZWVuIHdoaWNoZXZlcgotICogYXJjaGl0ZWN0dXJlIGlzIHNlbGVjdGVkLiBTZWUgPHBsYXQvcmVncy1mYi5oPiBmb3IgdGhlIGNvcmUgZGVmaW5pdGlvbnMKLSAqIHRoYXQgYXJlIHRoZSBzYW1lLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0vKiBpbmNsdWRlIHRoZSBjb3JlIGRlZmluaXRpb25zIGhlcmUsIGluIGNhc2Ugd2UgcmVhbGx5IGRvIG5lZWQgdG8KLSAqIG92ZXJyaWRlIHRoZW0gYXQgYSBsYXRlciBkYXRlLgotKi8KLQotI2luY2x1ZGUgPHBsYXQvcmVncy1mYi5oPgotCi0jZGVmaW5lIFMzQ19GQl9NQVhfV0lOICg1KSAgLyogbnVtYmVyIG9mIGhhcmR3YXJlIHdpbmRvd3MgYXZhaWxhYmxlLiAqLwotI2RlZmluZSBWSURDT04xX0ZTVEFUVVNfRVZFTgkoMSA8PCAxNSkKLQotLyogVmlkZW8gdGltaW5nIGNvbnRyb2xzICovCi0jZGVmaW5lIFZJRFRDT04wCQkJCSgweDEwKQotI2RlZmluZSBWSURUQ09OMQkJCQkoMHgxNCkKLSNkZWZpbmUgVklEVENPTjIJCQkJKDB4MTgpCi0KLS8qIFdpbmRvdyBwb3NpdGlvbiBjb250cm9scyAqLwotCi0jZGVmaW5lIFdJTkNPTihfd2luKQkJCQkoMHgyMCArICgoX3dpbikgKiA0KSkKLQotLyogT1NEMSBhbmQgT1NENCBkbyBub3QgaGF2ZSByZWdpc3RlciBEICovCi0KLSNkZWZpbmUgVklET1NEX0EoX3dpbikJCQkJKDB4NDAgKyAoKF93aW4pICogMTYpKQotI2RlZmluZSBWSURPU0RfQihfd2luKQkJCQkoMHg0NCArICgoX3dpbikgKiAxNikpCi0jZGVmaW5lIFZJRE9TRF9DKF93aW4pCQkJCSgweDQ4ICsgKChfd2luKSAqIDE2KSkKLSNkZWZpbmUgVklET1NEX0QoX3dpbikJCQkJKDB4NEMgKyAoKF93aW4pICogMTYpKQotCi0KLSNkZWZpbmUgVklESU5UQ09OMAkJCQkoMHgxMzApCi0KLSNkZWZpbmUgV3hLRVlDT055KF93aW4sIF9jb24pCQkJKCgweDE0MCArICgoX3dpbikgKiA4KSkgKyAoKF9jb24pICogNCkpCi0KLS8qIFdJTkNPTnggKi8KLQotI2RlZmluZSBXSU5DT054X0NTQ1dJRFRIX01BU0sJCQkoMHgzIDw8IDI2KQotI2RlZmluZSBXSU5DT054X0NTQ1dJRFRIX1NISUZUCQkJKDI2KQotI2RlZmluZSBXSU5DT054X0NTQ1dJRFRIX1dJREUJCQkoMHgwIDw8IDI2KQotI2RlZmluZSBXSU5DT054X0NTQ1dJRFRIX05BUlJPVwkJCSgweDMgPDwgMjYpCi0KLSNkZWZpbmUgV0lOQ09OeF9FTkxPQ0FMCQkJCSgxIDw8IDIyKQotI2RlZmluZSBXSU5DT054X0JVRlNUQVRVUwkJCSgxIDw8IDIxKQotI2RlZmluZSBXSU5DT054X0JVRlNFTAkJCQkoMSA8PCAyMCkKLSNkZWZpbmUgV0lOQ09OeF9CVUZBVVRPRU4JCQkoMSA8PCAxOSkKLSNkZWZpbmUgV0lOQ09OeF9ZQ2JDcgkJCQkoMSA8PCAxMykKLQotI2RlZmluZSBXSU5DT04xX0xPQ0FMU0VMX0NBTUlGCQkJKDEgPDwgMjMpCi0KLSNkZWZpbmUgV0lOQ09OMl9MT0NBTFNFTF9DQU1JRgkJCSgxIDw8IDIzKQotI2RlZmluZSBXSU5DT04yX0JMRF9QSVgJCQkJKDEgPDwgNikKLQotI2RlZmluZSBXSU5DT04yX0FMUEhBX1NFTAkJCSgxIDw8IDEpCi0jZGVmaW5lIFdJTkNPTjJfQlBQTU9ERV9NQVNLCQkJKDB4ZiA8PCAyKQotI2RlZmluZSBXSU5DT04yX0JQUE1PREVfU0hJRlQJCQkoMikKLSNkZWZpbmUgV0lOQ09OMl9CUFBNT0RFXzFCUFAJCQkoMHgwIDw8IDIpCi0jZGVmaW5lIFdJTkNPTjJfQlBQTU9ERV8yQlBQCQkJKDB4MSA8PCAyKQotI2RlZmluZSBXSU5DT04yX0JQUE1PREVfNEJQUAkJCSgweDIgPDwgMikKLSNkZWZpbmUgV0lOQ09OMl9CUFBNT0RFXzhCUFBfMTIzMgkJKDB4NCA8PCAyKQotI2RlZmluZSBXSU5DT04yX0JQUE1PREVfMTZCUFBfNTY1CQkoMHg1IDw8IDIpCi0jZGVmaW5lIFdJTkNPTjJfQlBQTU9ERV8xNkJQUF9BMTU1NQkJKDB4NiA8PCAyKQotI2RlZmluZSBXSU5DT04yX0JQUE1PREVfMTZCUFBfSTE1NTUJCSgweDcgPDwgMikKLSNkZWZpbmUgV0lOQ09OMl9CUFBNT0RFXzE4QlBQXzY2NgkJKDB4OCA8PCAyKQotI2RlZmluZSBXSU5DT04yX0JQUE1PREVfMThCUFBfQTE2NjUJCSgweDkgPDwgMikKLSNkZWZpbmUgV0lOQ09OMl9CUFBNT0RFXzE5QlBQX0ExNjY2CQkoMHhhIDw8IDIpCi0jZGVmaW5lIFdJTkNPTjJfQlBQTU9ERV8yNEJQUF84ODgJCSgweGIgPDwgMikKLSNkZWZpbmUgV0lOQ09OMl9CUFBNT0RFXzI0QlBQX0ExODg3CQkoMHhjIDw8IDIpCi0jZGVmaW5lIFdJTkNPTjJfQlBQTU9ERV8yNUJQUF9BMTg4OAkJKDB4ZCA8PCAyKQotI2RlZmluZSBXSU5DT04yX0JQUE1PREVfMjhCUFBfQTQ4ODgJCSgweGQgPDwgMikKLQotI2RlZmluZSBXSU5DT04zX0JMRF9QSVgJCQkJKDEgPDwgNikKLQotI2RlZmluZSBXSU5DT04zX0FMUEhBX1NFTAkJCSgxIDw8IDEpCi0jZGVmaW5lIFdJTkNPTjNfQlBQTU9ERV9NQVNLCQkJKDB4ZiA8PCAyKQotI2RlZmluZSBXSU5DT04zX0JQUE1PREVfU0hJRlQJCQkoMikKLSNkZWZpbmUgV0lOQ09OM19CUFBNT0RFXzFCUFAJCQkoMHgwIDw8IDIpCi0jZGVmaW5lIFdJTkNPTjNfQlBQTU9ERV8yQlBQCQkJKDB4MSA8PCAyKQotI2RlZmluZSBXSU5DT04zX0JQUE1PREVfNEJQUAkJCSgweDIgPDwgMikKLSNkZWZpbmUgV0lOQ09OM19CUFBNT0RFXzE2QlBQXzU2NQkJKDB4NSA8PCAyKQotI2RlZmluZSBXSU5DT04zX0JQUE1PREVfMTZCUFBfQTE1NTUJCSgweDYgPDwgMikKLSNkZWZpbmUgV0lOQ09OM19CUFBNT0RFXzE2QlBQX0kxNTU1CQkoMHg3IDw8IDIpCi0jZGVmaW5lIFdJTkNPTjNfQlBQTU9ERV8xOEJQUF82NjYJCSgweDggPDwgMikKLSNkZWZpbmUgV0lOQ09OM19CUFBNT0RFXzE4QlBQX0ExNjY1CQkoMHg5IDw8IDIpCi0jZGVmaW5lIFdJTkNPTjNfQlBQTU9ERV8xOUJQUF9BMTY2NgkJKDB4YSA8PCAyKQotI2RlZmluZSBXSU5DT04zX0JQUE1PREVfMjRCUFBfODg4CQkoMHhiIDw8IDIpCi0jZGVmaW5lIFdJTkNPTjNfQlBQTU9ERV8yNEJQUF9BMTg4NwkJKDB4YyA8PCAyKQotI2RlZmluZSBXSU5DT04zX0JQUE1PREVfMjVCUFBfQTE4ODgJCSgweGQgPDwgMikKLSNkZWZpbmUgV0lOQ09OM19CUFBNT0RFXzI4QlBQX0E0ODg4CQkoMHhkIDw8IDIpCi0KLSNkZWZpbmUgVklESU5UQ09OMF9GSUZJT1NFTF9XSU5ET1cyCQkoMHgxMCA8PCA1KQotI2RlZmluZSBWSURJTlRDT04wX0ZJRklPU0VMX1dJTkRPVzMJCSgweDIwIDw8IDUpCi0jZGVmaW5lIFZJRElOVENPTjBfRklGSU9TRUxfV0lORE9XNAkJKDB4NDAgPDwgNSkKLQotI2RlZmluZSBESVRITU9ERQkJCQkoMHgxNzApCi0jZGVmaW5lIFdJTnhNQVAoX3dpbikJCQkJKDB4MTgwICsgKChfd2luKSAqIDQpKQotCi0KLSNkZWZpbmUgRElUSE1PREVfUl9QT1NfTUFTSwkJCSgweDMgPDwgNSkKLSNkZWZpbmUgRElUSE1PREVfUl9QT1NfU0hJRlQJCQkoNSkKLSNkZWZpbmUgRElUSE1PREVfUl9QT1NfOEJJVAkJCSgweDAgPDwgNSkKLSNkZWZpbmUgRElUSE1PREVfUl9QT1NfNkJJVAkJCSgweDEgPDwgNSkKLSNkZWZpbmUgRElUSE1PREVfUl9QT1NfNUJJVAkJCSgweDIgPDwgNSkKLQotI2RlZmluZSBESVRITU9ERV9HX1BPU19NQVNLCQkJKDB4MyA8PCAzKQotI2RlZmluZSBESVRITU9ERV9HX1BPU19TSElGVAkJCSgzKQotI2RlZmluZSBESVRITU9ERV9HX1BPU184QklUCQkJKDB4MCA8PCAzKQotI2RlZmluZSBESVRITU9ERV9HX1BPU182QklUCQkJKDB4MSA8PCAzKQotI2RlZmluZSBESVRITU9ERV9HX1BPU181QklUCQkJKDB4MiA8PCAzKQotCi0jZGVmaW5lIERJVEhNT0RFX0JfUE9TX01BU0sJCQkoMHgzIDw8IDEpCi0jZGVmaW5lIERJVEhNT0RFX0JfUE9TX1NISUZUCQkJKDEpCi0jZGVmaW5lIERJVEhNT0RFX0JfUE9TXzhCSVQJCQkoMHgwIDw8IDEpCi0jZGVmaW5lIERJVEhNT0RFX0JfUE9TXzZCSVQJCQkoMHgxIDw8IDEpCi0jZGVmaW5lIERJVEhNT0RFX0JfUE9TXzVCSVQJCQkoMHgyIDw8IDEpCi0KLSNkZWZpbmUgRElUSE1PREVfRElUSF9FTgkJCSgxIDw8IDApCi0KLSNkZWZpbmUgV1BBTENPTgkJCQkJKDB4MUEwKQotCi0vKiBQYWxldHRlIGNvbnRyb2wgKi8KLS8qIE5vdGUgZm9yIFM1UEMxMDA6IHlvdSBjYW4gc3RpbGwgdXNlIHRob3NlIG1hY3JvcyBvbiBXUEFMQ09OIChha2EgV1BBTENPTl9MKSwKLSAqIGJ1dCBtYWtlIHN1cmUgdGhhdCBXUEFMQ09OX0ggVzJQQUwtVzRQQUwgZW50cmllcyBhcmUgemVyb2VkIG91dCAqLwotI2RlZmluZSBXUEFMQ09OX1c0UEFMXzE2QlBQX0E1NTUJCSgxIDw8IDgpCi0jZGVmaW5lIFdQQUxDT05fVzNQQUxfMTZCUFBfQTU1NQkJKDEgPDwgNykKLSNkZWZpbmUgV1BBTENPTl9XMlBBTF8xNkJQUF9BNTU1CQkoMSA8PCA2KQotCi0KLS8qIHN5c3RlbSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBjb2RlIGZvciBwYWxldHRlIHNpemVzLCBhbmQgb3RoZXIKLSAqIGluZm9ybWF0aW9uIHRoYXQgY2hhbmdlcyBkZXBlbmRpbmcgb24gd2hpY2ggYXJjaGl0ZWN0dXJlIGlzIGJlaW5nCi0gKiBjb21waWxlZC4KLSovCi0KLS8qIHJldHVybiB0cnVlIGlmIHdpbmRvdyBfd2luIGhhcyBPU0QgcmVnaXN0ZXIgRCAqLwotI2RlZmluZSBzM2NfZmJfaGFzX29zZF9kKF93aW4pICgoX3dpbikgIT0gNCAmJiAoX3dpbikgIT0gMCkKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgczNjX2ZiX3dpbl9wYWxfc2l6ZSh1bnNpZ25lZCBpbnQgd2luKQotewotCWlmICh3aW4gPCAyKQotCQlyZXR1cm4gMjU2OwotCWlmICh3aW4gPCA0KQotCQlyZXR1cm4gMTY7Ci0JaWYgKHdpbiA9PSA0KQotCQlyZXR1cm4gNDsKLQotCUJVRygpOwkvKiBzaG91bGRuJ3QgZ2V0IGhlcmUgKi8KLX0KLQotc3RhdGljIGlubGluZSBpbnQgczNjX2ZiX3ZhbGlkYXRlX3dpbl9icHAodW5zaWduZWQgaW50IHdpbiwgdW5zaWduZWQgaW50IGJwcCkKLXsKLQkvKiBhbGwgd2luZG93cyBjYW4gZG8gMS8yIGJwcCAqLwotCi0JaWYgKChicHAgPT0gMjUgfHwgYnBwID09IDE5KSAmJiB3aW4gPT0gMCkKLQkJcmV0dXJuIDA7CS8qIHdpbiAwIGRvZXMgbm90IGhhdmUgMTkgb3IgMjVicHAgbW9kZXMgKi8KLQotCWlmIChicHAgPT0gNCAmJiB3aW4gPT0gNCkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAoYnBwID09IDggJiYgKHdpbiA+PSAzKSkKLQkJcmV0dXJuIDA7CS8qIHdpbiAzLzQgY2Fubm90IGRvIDhicHAgaW4gYW55IG1vZGUgKi8KLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBzM2NfZmJfcGFsX2lzMTYodW5zaWduZWQgaW50IHdpbmRvdykKLXsKLQlyZXR1cm4gd2luZG93ID4gMTsKLX0KLQotc3RydWN0IHMzY19mYl9wYWxldHRlIHsKLQlzdHJ1Y3QgZmJfYml0ZmllbGQJcjsKLQlzdHJ1Y3QgZmJfYml0ZmllbGQJZzsKLQlzdHJ1Y3QgZmJfYml0ZmllbGQJYjsKLQlzdHJ1Y3QgZmJfYml0ZmllbGQJYTsKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzM2NfZmJfaW5pdF9wYWxldHRlKHVuc2lnbmVkIGludCB3aW5kb3csCi0JCQkJICAgICAgIHN0cnVjdCBzM2NfZmJfcGFsZXR0ZSAqcGFsZXR0ZSkKLXsKLQlpZiAod2luZG93IDwgMikgewotCQkvKiBXaW5kb3dzIDAvMSBhcmUgOC84Lzggb3IgQS84LzgvOCAqLwotCQlwYWxldHRlLT5yLm9mZnNldCA9IDE2OwotCQlwYWxldHRlLT5yLmxlbmd0aCA9IDg7Ci0JCXBhbGV0dGUtPmcub2Zmc2V0ID0gODsKLQkJcGFsZXR0ZS0+Zy5sZW5ndGggPSA4OwotCQlwYWxldHRlLT5iLm9mZnNldCA9IDA7Ci0JCXBhbGV0dGUtPmIubGVuZ3RoID0gODsKLQl9IGVsc2UgewotCQkvKiBjdXJyZW50bHkgd2UgYXNzdW1lIFJHQiA1LzYvNSAqLwotCQlwYWxldHRlLT5yLm9mZnNldCA9IDExOwotCQlwYWxldHRlLT5yLmxlbmd0aCA9IDU7Ci0JCXBhbGV0dGUtPmcub2Zmc2V0ID0gNTsKLQkJcGFsZXR0ZS0+Zy5sZW5ndGggPSA2OwotCQlwYWxldHRlLT5iLm9mZnNldCA9IDA7Ci0JCXBhbGV0dGUtPmIubGVuZ3RoID0gNTsKLQl9Ci19Ci0KLS8qIE5vdGVzIG9uIHBlci13aW5kb3cgYnBwIHNldHRpbmdzCi0gKgotICogVmFsdWUJV2luMAkgV2luMQkgIFdpbjIJICAgV2luMwkgICAgV2luIDQKLSAqIDAwMDAJCTEoUCkJIDEoUCkJICAxKFApCSAgIDEoUCkJICAgIDEoUCkKLSAqIDAwMDEJCTIoUCkJIDIoUCkgICAgIDIoUCkJICAgMihQKQkgICAgMihQKQotICogMDAxMAkJNChQKQkgNChQKSAgICAgNChQKQkgICA0KFApICAgICAtbm9uZS0KLSAqIDAwMTEJCTgoUCkJIDgoUCkgICAgIC1ub25lLSAgIC1ub25lLSAgIC1ub25lLQotICogMDEwMAkJLW5vbmUtCSA4KEEyMzIpICA4KEEyMzIpICAtbm9uZS0gICAtbm9uZS0KLSAqIDAxMDEJCTE2KDU2NSkJIDE2KDU2NSkgIDE2KDU2NSkgIDE2KDU2NSkgICAxNig1NjUpCi0gKiAwMTEwCQktbm9uZS0JIDE2KEE1NTUpIDE2KEE1NTUpIDE2KEE1NTUpICAxNihBNTU1KQotICogMDExMQkJMTYoSTU1NSkgMTYoSTU2NSkgMTYoSTU1NSkgMTYoSTU1NSkgIDE2KEk1NTUpCi0gKiAxMDAwCQkxOCg2NjYpCSAxOCg2NjYpICAxOCg2NjYpICAxOCg2NjYpICAgMTgoNjY2KQotICogMTAwMQkJLW5vbmUtCSAxOChBNjY1KSAxOChBNjY1KSAxOChBNjY1KSAgMTYoQTY2NSkKLSAqIDEwMTAJCS1ub25lLQkgMTkoQTY2NikgMTkoQTY2NikgMTkoQTY2NikgIDE5KEE2NjYpCi0gKiAxMDExCQkyNCg4ODgpCSAyNCg4ODgpICAyNCg4ODgpICAyNCg4ODgpICAgMjQoODg4KQotICogMTEwMAkJLW5vbmUtCSAyNChBODg3KSAyNChBODg3KSAyNChBODg3KSAgMjQoQTg4NykKLSAqIDExMDEJCS1ub25lLQkgMjUoQTg4OCkgMjUoQTg4OCkgMjUoQTg4OCkgIDI1KEE4ODgpCi0gKiAxMTEwCQktbm9uZS0JIC1ub25lLQkgIC1ub25lLSAgIC1ub25lLSAgICAtbm9uZS0KLSAqIDExMTEJCS1ub25lLQkgLW5vbmUtICAgLW5vbmUtICAgLW5vbmUtICAgIC1ub25lLQotKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLWZiLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1mYi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOWVlNTk5Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLWZiLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNjYgKzAsMCBAQAotLyogYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtZmIuaAotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoKLSAqIFMzQyBQbGF0Zm9ybSAtIG5ldy1zdHlsZSBmcmFtZWJ1ZmZlciByZWdpc3RlciBkZWZpbml0aW9ucwotICoKLSAqIFRoaXMgaXMgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIG5ldyBzdHlsZSBmcmFtZWJ1ZmZlciBpbnRlcmZhY2UKLSAqIGZvdW5kIGZyb20gdGhlIFMzQzI0NDMgb253YXJkcyBpbnRvIHRoZSBTM0MyNDE2LCBTM0MyNDUwIGFuZCB0aGUKLSAqIFMzQzY0WFggc2VyaWVzIHN1Y2ggYXMgdGhlIFMzQzY0MDAgYW5kIFMzQzY0MTAuCi0gKgotICogVGhlIGZpbGUgZG9lcyBub3QgY29udGFpbiB0aGUgY3B1IHNwZWNpZmljIGl0ZW1zIHdoaWNoIGFyZSBiYXNlZCBvbgotICogd2hpY2hldmVyIGFyY2hpdGVjdHVyZSBpcyBzZWxlY3RlZCwgaXQgb25seSBjb250YWlucyB0aGUgY29yZSBvZiB0aGUKLSAqIHJlZ2lzdGVyIHNldC4gU2VlIDxtYWNoL3JlZ3MtZmIuaD4gdG8gZ2V0IHRoZSBzcGVjaWZpY3MuCi0gKgotICogTm90ZSwgd2UgY2hhbmdlZCB0byB1c2luZyByZWdzLWZiLmggYXMgaXQgYXZvaWRzIGFueSBjbGFzaGVzIHdpdGgKLSAqIHRoZSBvcmlnaW5hbCByZWdzLWxjZC5oIHNvIG91dCBvZiB0aGUgd2F5IG9mIHJlZ3MtbGNkLmggYXMgd2VsbCBhcwotICogaW5kaWNhdGluZyB0aGUgbmV3ZXIgYmxvY2sgaXMgbXVjaCBtb3JlIHRoYW4ganVzdCBhbiBMQ0QgaW50ZXJmYWNlLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0vKiBQbGVhc2UgZG8gbm90IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5LCB1c2UgPG1hY2gvcmVncy1mYi5oPiB0bwotICogZW5zdXJlIGFsbCB0aGUgbG9jYWxpc2VkIFNvQyBzdXBwb3J0IGlzIGluY2x1ZGVkIGFzIG5lY2Vzc2FyeS4KLSovCi0KLS8qIFZJRENPTjAgKi8KLQotI2RlZmluZSBWSURDT04wCQkJCQkoMHgwMCkKLSNkZWZpbmUgVklEQ09OMF9JTlRFUkxBQ0UJCQkoMSA8PCAyOSkKLSNkZWZpbmUgVklEQ09OMF9WSURPVVRfTUFTSwkJCSgweDMgPDwgMjYpCi0jZGVmaW5lIFZJRENPTjBfVklET1VUX1NISUZUCQkJKDI2KQotI2RlZmluZSBWSURDT04wX1ZJRE9VVF9SR0IJCQkoMHgwIDw8IDI2KQotI2RlZmluZSBWSURDT04wX1ZJRE9VVF9UVgkJCSgweDEgPDwgMjYpCi0jZGVmaW5lIFZJRENPTjBfVklET1VUX0k4MF9MREkwCQkJKDB4MiA8PCAyNikKLSNkZWZpbmUgVklEQ09OMF9WSURPVVRfSTgwX0xESTEJCQkoMHgzIDw8IDI2KQotCi0jZGVmaW5lIFZJRENPTjBfTDFfREFUQV9NQVNLCQkJKDB4NyA8PCAyMykKLSNkZWZpbmUgVklEQ09OMF9MMV9EQVRBX1NISUZUCQkJKDIzKQotI2RlZmluZSBWSURDT04wX0wxX0RBVEFfMTZCUFAJCQkoMHgwIDw8IDIzKQotI2RlZmluZSBWSURDT04wX0wxX0RBVEFfMThCUFAxNgkJCSgweDEgPDwgMjMpCi0jZGVmaW5lIFZJRENPTjBfTDFfREFUQV8xOEJQUDkJCQkoMHgyIDw8IDIzKQotI2RlZmluZSBWSURDT04wX0wxX0RBVEFfMjRCUFAJCQkoMHgzIDw8IDIzKQotI2RlZmluZSBWSURDT04wX0wxX0RBVEFfMThCUFAJCQkoMHg0IDw8IDIzKQotI2RlZmluZSBWSURDT04wX0wxX0RBVEFfMTZCUFA4CQkJKDB4NSA8PCAyMykKLQotI2RlZmluZSBWSURDT04wX0wwX0RBVEFfTUFTSwkJCSgweDcgPDwgMjApCi0jZGVmaW5lIFZJRENPTjBfTDBfREFUQV9TSElGVAkJCSgyMCkKLSNkZWZpbmUgVklEQ09OMF9MMF9EQVRBXzE2QlBQCQkJKDB4MCA8PCAyMCkKLSNkZWZpbmUgVklEQ09OMF9MMF9EQVRBXzE4QlBQMTYJCQkoMHgxIDw8IDIwKQotI2RlZmluZSBWSURDT04wX0wwX0RBVEFfMThCUFA5CQkJKDB4MiA8PCAyMCkKLSNkZWZpbmUgVklEQ09OMF9MMF9EQVRBXzI0QlBQCQkJKDB4MyA8PCAyMCkKLSNkZWZpbmUgVklEQ09OMF9MMF9EQVRBXzE4QlBQCQkJKDB4NCA8PCAyMCkKLSNkZWZpbmUgVklEQ09OMF9MMF9EQVRBXzE2QlBQOAkJCSgweDUgPDwgMjApCi0KLSNkZWZpbmUgVklEQ09OMF9QTlJNT0RFX01BU0sJCQkoMHgzIDw8IDE3KQotI2RlZmluZSBWSURDT04wX1BOUk1PREVfU0hJRlQJCQkoMTcpCi0jZGVmaW5lIFZJRENPTjBfUE5STU9ERV9SR0IJCQkoMHgwIDw8IDE3KQotI2RlZmluZSBWSURDT04wX1BOUk1PREVfQkdSCQkJKDB4MSA8PCAxNykKLSNkZWZpbmUgVklEQ09OMF9QTlJNT0RFX1NFUklBTF9SR0IJCSgweDIgPDwgMTcpCi0jZGVmaW5lIFZJRENPTjBfUE5STU9ERV9TRVJJQUxfQkdSCQkoMHgzIDw8IDE3KQotCi0jZGVmaW5lIFZJRENPTjBfQ0xLVkFMVVAJCQkoMSA8PCAxNikKLSNkZWZpbmUgVklEQ09OMF9DTEtWQUxfRl9NQVNLCQkJKDB4ZmYgPDwgNikKLSNkZWZpbmUgVklEQ09OMF9DTEtWQUxfRl9TSElGVAkJCSg2KQotI2RlZmluZSBWSURDT04wX0NMS1ZBTF9GX0xJTUlUCQkJKDB4ZmYpCi0jZGVmaW5lIFZJRENPTjBfQ0xLVkFMX0YoX3gpCQkJKChfeCkgPDwgNikKLSNkZWZpbmUgVklEQ09OMF9WTENLRlJFRQkJCSgxIDw8IDUpCi0jZGVmaW5lIFZJRENPTjBfQ0xLRElSCQkJCSgxIDw8IDQpCi0KLSNkZWZpbmUgVklEQ09OMF9DTEtTRUxfTUFTSwkJCSgweDMgPDwgMikKLSNkZWZpbmUgVklEQ09OMF9DTEtTRUxfU0hJRlQJCQkoMikKLSNkZWZpbmUgVklEQ09OMF9DTEtTRUxfSENMSwkJCSgweDAgPDwgMikKLSNkZWZpbmUgVklEQ09OMF9DTEtTRUxfTENECQkJKDB4MSA8PCAyKQotI2RlZmluZSBWSURDT04wX0NMS1NFTF8yN00JCQkoMHgzIDw8IDIpCi0KLSNkZWZpbmUgVklEQ09OMF9FTlZJRAkJCQkoMSA8PCAxKQotI2RlZmluZSBWSURDT04wX0VOVklEX0YJCQkJKDEgPDwgMCkKLQotI2RlZmluZSBWSURDT04xCQkJCQkoMHgwNCkKLSNkZWZpbmUgVklEQ09OMV9MSU5FQ05UX01BU0sJCQkoMHg3ZmYgPDwgMTYpCi0jZGVmaW5lIFZJRENPTjFfTElORUNOVF9TSElGVAkJCSgxNikKLSNkZWZpbmUgVklEQ09OMV9MSU5FQ05UX0dFVChfdikJCQkoKChfdikgPj4gMTYpICYgMHg3ZmYpCi0jZGVmaW5lIFZJRENPTjFfVlNUQVRVU19NQVNLCQkJKDB4MyA8PCAxMykKLSNkZWZpbmUgVklEQ09OMV9WU1RBVFVTX1NISUZUCQkJKDEzKQotI2RlZmluZSBWSURDT04xX1ZTVEFUVVNfVlNZTkMJCQkoMHgwIDw8IDEzKQotI2RlZmluZSBWSURDT04xX1ZTVEFUVVNfQkFDS1BPUkNICQkoMHgxIDw8IDEzKQotI2RlZmluZSBWSURDT04xX1ZTVEFUVVNfQUNUSVZFCQkJKDB4MiA8PCAxMykKLSNkZWZpbmUgVklEQ09OMV9WU1RBVFVTX0ZST05UUE9SQ0gJCSgweDAgPDwgMTMpCi0KLSNkZWZpbmUgVklEQ09OMV9JTlZfVkNMSwkJCSgxIDw8IDcpCi0jZGVmaW5lIFZJRENPTjFfSU5WX0hTWU5DCQkJKDEgPDwgNikKLSNkZWZpbmUgVklEQ09OMV9JTlZfVlNZTkMJCQkoMSA8PCA1KQotI2RlZmluZSBWSURDT04xX0lOVl9WREVOCQkJKDEgPDwgNCkKLQotLyogVklEQ09OMiAqLwotCi0jZGVmaW5lIFZJRENPTjIJCQkJCSgweDA4KQotI2RlZmluZSBWSURDT04yX0VONjAxCQkJCSgxIDw8IDIzKQotI2RlZmluZSBWSURDT04yX1RWRk1UU0VMX1NXCQkJKDEgPDwgMTQpCi0KLSNkZWZpbmUgVklEQ09OMl9UVkZNVFNFTDFfTUFTSwkJCSgweDMgPDwgMTIpCi0jZGVmaW5lIFZJRENPTjJfVFZGTVRTRUwxX1NISUZUCQkJKDEyKQotI2RlZmluZSBWSURDT04yX1RWRk1UU0VMMV9SR0IJCQkoMHgwIDw8IDEyKQotI2RlZmluZSBWSURDT04yX1RWRk1UU0VMMV9ZVVY0MjIJCSgweDEgPDwgMTIpCi0jZGVmaW5lIFZJRENPTjJfVFZGTVRTRUwxX1lVVjQ0NAkJKDB4MiA8PCAxMikKLQotI2RlZmluZSBWSURDT04yX09SR1lDYkNyCQkJKDEgPDwgOCkKLSNkZWZpbmUgVklEQ09OMl9ZVVZPUkRDckNiCQkJKDEgPDwgNykKLQotLyogVklEVENPTjAgKi8KLQotI2RlZmluZSBWSURUQ09OMF9WQlBERV9NQVNLCQkJKDB4ZmYgPDwgMjQpCi0jZGVmaW5lIFZJRFRDT04wX1ZCUERFX1NISUZUCQkJKDI0KQotI2RlZmluZSBWSURUQ09OMF9WQlBERV9MSU1JVAkJCSgweGZmKQotI2RlZmluZSBWSURUQ09OMF9WQlBERShfeCkJCQkoKF94KSA8PCAyNCkKLQotI2RlZmluZSBWSURUQ09OMF9WQlBEX01BU0sJCQkoMHhmZiA8PCAxNikKLSNkZWZpbmUgVklEVENPTjBfVkJQRF9TSElGVAkJCSgxNikKLSNkZWZpbmUgVklEVENPTjBfVkJQRF9MSU1JVAkJCSgweGZmKQotI2RlZmluZSBWSURUQ09OMF9WQlBEKF94KQkJCSgoX3gpIDw8IDE2KQotCi0jZGVmaW5lIFZJRFRDT04wX1ZGUERfTUFTSwkJCSgweGZmIDw8IDgpCi0jZGVmaW5lIFZJRFRDT04wX1ZGUERfU0hJRlQJCQkoOCkKLSNkZWZpbmUgVklEVENPTjBfVkZQRF9MSU1JVAkJCSgweGZmKQotI2RlZmluZSBWSURUQ09OMF9WRlBEKF94KQkJCSgoX3gpIDw8IDgpCi0KLSNkZWZpbmUgVklEVENPTjBfVlNQV19NQVNLCQkJKDB4ZmYgPDwgMCkKLSNkZWZpbmUgVklEVENPTjBfVlNQV19TSElGVAkJCSgwKQotI2RlZmluZSBWSURUQ09OMF9WU1BXX0xJTUlUCQkJKDB4ZmYpCi0jZGVmaW5lIFZJRFRDT04wX1ZTUFcoX3gpCQkJKChfeCkgPDwgMCkKLQotLyogVklEVENPTjEgKi8KLQotI2RlZmluZSBWSURUQ09OMV9WRlBERV9NQVNLCQkJKDB4ZmYgPDwgMjQpCi0jZGVmaW5lIFZJRFRDT04xX1ZGUERFX1NISUZUCQkJKDI0KQotI2RlZmluZSBWSURUQ09OMV9WRlBERV9MSU1JVAkJCSgweGZmKQotI2RlZmluZSBWSURUQ09OMV9WRlBERShfeCkJCQkoKF94KSA8PCAyNCkKLQotI2RlZmluZSBWSURUQ09OMV9IQlBEX01BU0sJCQkoMHhmZiA8PCAxNikKLSNkZWZpbmUgVklEVENPTjFfSEJQRF9TSElGVAkJCSgxNikKLSNkZWZpbmUgVklEVENPTjFfSEJQRF9MSU1JVAkJCSgweGZmKQotI2RlZmluZSBWSURUQ09OMV9IQlBEKF94KQkJCSgoX3gpIDw8IDE2KQotCi0jZGVmaW5lIFZJRFRDT04xX0hGUERfTUFTSwkJCSgweGZmIDw8IDgpCi0jZGVmaW5lIFZJRFRDT04xX0hGUERfU0hJRlQJCQkoOCkKLSNkZWZpbmUgVklEVENPTjFfSEZQRF9MSU1JVAkJCSgweGZmKQotI2RlZmluZSBWSURUQ09OMV9IRlBEKF94KQkJCSgoX3gpIDw8IDgpCi0KLSNkZWZpbmUgVklEVENPTjFfSFNQV19NQVNLCQkJKDB4ZmYgPDwgMCkKLSNkZWZpbmUgVklEVENPTjFfSFNQV19TSElGVAkJCSgwKQotI2RlZmluZSBWSURUQ09OMV9IU1BXX0xJTUlUCQkJKDB4ZmYpCi0jZGVmaW5lIFZJRFRDT04xX0hTUFcoX3gpCQkJKChfeCkgPDwgMCkKLQotI2RlZmluZSBWSURUQ09OMgkJCQkoMHgxOCkKLSNkZWZpbmUgVklEVENPTjJfTElORVZBTF9NQVNLCQkJKDB4N2ZmIDw8IDExKQotI2RlZmluZSBWSURUQ09OMl9MSU5FVkFMX1NISUZUCQkJKDExKQotI2RlZmluZSBWSURUQ09OMl9MSU5FVkFMX0xJTUlUCQkJKDB4N2ZmKQotI2RlZmluZSBWSURUQ09OMl9MSU5FVkFMKF94KQkJCSgoX3gpIDw8IDExKQotCi0jZGVmaW5lIFZJRFRDT04yX0hPWlZBTF9NQVNLCQkJKDB4N2ZmIDw8IDApCi0jZGVmaW5lIFZJRFRDT04yX0hPWlZBTF9TSElGVAkJCSgwKQotI2RlZmluZSBWSURUQ09OMl9IT1pWQUxfTElNSVQJCQkoMHg3ZmYpCi0jZGVmaW5lIFZJRFRDT04yX0hPWlZBTChfeCkJCQkoKF94KSA8PCAwKQotCi0vKiBXSU5DT054ICovCi0KLQotI2RlZmluZSBXSU5DT054X0JJVFNXUAkJCQkoMSA8PCAxOCkKLSNkZWZpbmUgV0lOQ09OeF9CWVRTV1AJCQkJKDEgPDwgMTcpCi0jZGVmaW5lIFdJTkNPTnhfSEFXU1dQCQkJCSgxIDw8IDE2KQotI2RlZmluZSBXSU5DT054X0JVUlNUTEVOX01BU0sJCQkoMHgzIDw8IDkpCi0jZGVmaW5lIFdJTkNPTnhfQlVSU1RMRU5fU0hJRlQJCQkoOSkKLSNkZWZpbmUgV0lOQ09OeF9CVVJTVExFTl8xNldPUkQJCQkoMHgwIDw8IDkpCi0jZGVmaW5lIFdJTkNPTnhfQlVSU1RMRU5fOFdPUkQJCQkoMHgxIDw8IDkpCi0jZGVmaW5lIFdJTkNPTnhfQlVSU1RMRU5fNFdPUkQJCQkoMHgyIDw8IDkpCi0KLSNkZWZpbmUgV0lOQ09OeF9FTldJTgkJCQkoMSA8PCAwKQotI2RlZmluZSBXSU5DT04wX0JQUE1PREVfTUFTSwkJCSgweGYgPDwgMikKLSNkZWZpbmUgV0lOQ09OMF9CUFBNT0RFX1NISUZUCQkJKDIpCi0jZGVmaW5lIFdJTkNPTjBfQlBQTU9ERV8xQlBQCQkJKDB4MCA8PCAyKQotI2RlZmluZSBXSU5DT04wX0JQUE1PREVfMkJQUAkJCSgweDEgPDwgMikKLSNkZWZpbmUgV0lOQ09OMF9CUFBNT0RFXzRCUFAJCQkoMHgyIDw8IDIpCi0jZGVmaW5lIFdJTkNPTjBfQlBQTU9ERV84QlBQX1BBTEVUVEUJCSgweDMgPDwgMikKLSNkZWZpbmUgV0lOQ09OMF9CUFBNT0RFXzE2QlBQXzU2NQkJKDB4NSA8PCAyKQotI2RlZmluZSBXSU5DT04wX0JQUE1PREVfMTZCUFBfMTU1NQkJKDB4NyA8PCAyKQotI2RlZmluZSBXSU5DT04wX0JQUE1PREVfMThCUFBfNjY2CQkoMHg4IDw8IDIpCi0jZGVmaW5lIFdJTkNPTjBfQlBQTU9ERV8yNEJQUF84ODgJCSgweGIgPDwgMikKLQotI2RlZmluZSBXSU5DT04xX0JMRF9QSVgJCQkJKDEgPDwgNikKLQotI2RlZmluZSBXSU5DT04xX0FMUEhBX1NFTAkJCSgxIDw8IDEpCi0jZGVmaW5lIFdJTkNPTjFfQlBQTU9ERV9NQVNLCQkJKDB4ZiA8PCAyKQotI2RlZmluZSBXSU5DT04xX0JQUE1PREVfU0hJRlQJCQkoMikKLSNkZWZpbmUgV0lOQ09OMV9CUFBNT0RFXzFCUFAJCQkoMHgwIDw8IDIpCi0jZGVmaW5lIFdJTkNPTjFfQlBQTU9ERV8yQlBQCQkJKDB4MSA8PCAyKQotI2RlZmluZSBXSU5DT04xX0JQUE1PREVfNEJQUAkJCSgweDIgPDwgMikKLSNkZWZpbmUgV0lOQ09OMV9CUFBNT0RFXzhCUFBfUEFMRVRURQkJKDB4MyA8PCAyKQotI2RlZmluZSBXSU5DT04xX0JQUE1PREVfOEJQUF8xMjMyCQkoMHg0IDw8IDIpCi0jZGVmaW5lIFdJTkNPTjFfQlBQTU9ERV8xNkJQUF81NjUJCSgweDUgPDwgMikKLSNkZWZpbmUgV0lOQ09OMV9CUFBNT0RFXzE2QlBQX0ExNTU1CQkoMHg2IDw8IDIpCi0jZGVmaW5lIFdJTkNPTjFfQlBQTU9ERV8xNkJQUF9JMTU1NQkJKDB4NyA8PCAyKQotI2RlZmluZSBXSU5DT04xX0JQUE1PREVfMThCUFBfNjY2CQkoMHg4IDw8IDIpCi0jZGVmaW5lIFdJTkNPTjFfQlBQTU9ERV8xOEJQUF9BMTY2NQkJKDB4OSA8PCAyKQotI2RlZmluZSBXSU5DT04xX0JQUE1PREVfMTlCUFBfQTE2NjYJCSgweGEgPDwgMikKLSNkZWZpbmUgV0lOQ09OMV9CUFBNT0RFXzI0QlBQXzg4OAkJKDB4YiA8PCAyKQotI2RlZmluZSBXSU5DT04xX0JQUE1PREVfMjRCUFBfQTE4ODcJCSgweGMgPDwgMikKLSNkZWZpbmUgV0lOQ09OMV9CUFBNT0RFXzI1QlBQX0ExODg4CQkoMHhkIDw8IDIpCi0jZGVmaW5lIFdJTkNPTjFfQlBQTU9ERV8yOEJQUF9BNDg4OAkJKDB4ZCA8PCAyKQotCi0KLSNkZWZpbmUgVklET1NEeEFfVE9QTEVGVF9YX01BU0sJCQkoMHg3ZmYgPDwgMTEpCi0jZGVmaW5lIFZJRE9TRHhBX1RPUExFRlRfWF9TSElGVAkJKDExKQotI2RlZmluZSBWSURPU0R4QV9UT1BMRUZUX1hfTElNSVQJCSgweDdmZikKLSNkZWZpbmUgVklET1NEeEFfVE9QTEVGVF9YKF94KQkJCSgoX3gpIDw8IDExKQotCi0jZGVmaW5lIFZJRE9TRHhBX1RPUExFRlRfWV9NQVNLCQkJKDB4N2ZmIDw8IDApCi0jZGVmaW5lIFZJRE9TRHhBX1RPUExFRlRfWV9TSElGVAkJKDApCi0jZGVmaW5lIFZJRE9TRHhBX1RPUExFRlRfWV9MSU1JVAkJKDB4N2ZmKQotI2RlZmluZSBWSURPU0R4QV9UT1BMRUZUX1koX3gpCQkJKChfeCkgPDwgMCkKLQotI2RlZmluZSBWSURPU0R4Ql9CT1RSSUdIVF9YX01BU0sJCSgweDdmZiA8PCAxMSkKLSNkZWZpbmUgVklET1NEeEJfQk9UUklHSFRfWF9TSElGVAkJKDExKQotI2RlZmluZSBWSURPU0R4Ql9CT1RSSUdIVF9YX0xJTUlUCQkoMHg3ZmYpCi0jZGVmaW5lIFZJRE9TRHhCX0JPVFJJR0hUX1goX3gpCQkJKChfeCkgPDwgMTEpCi0KLSNkZWZpbmUgVklET1NEeEJfQk9UUklHSFRfWV9NQVNLCQkoMHg3ZmYgPDwgMCkKLSNkZWZpbmUgVklET1NEeEJfQk9UUklHSFRfWV9TSElGVAkJKDApCi0jZGVmaW5lIFZJRE9TRHhCX0JPVFJJR0hUX1lfTElNSVQJCSgweDdmZikKLSNkZWZpbmUgVklET1NEeEJfQk9UUklHSFRfWShfeCkJCQkoKF94KSA8PCAwKQotCi0vKiBGb3IgVklET1NEWzEuLjRdQyAqLwotI2RlZmluZSBWSURJU0QxNENfQUxQSEEwX1IoX3gpCQkJKChfeCkgPDwgMjApCi0jZGVmaW5lIFZJRElTRDE0Q19BTFBIQTBfR19NQVNLCQkJKDB4ZiA8PCAxNikKLSNkZWZpbmUgVklESVNEMTRDX0FMUEhBMF9HX1NISUZUCQkoMTYpCi0jZGVmaW5lIFZJRElTRDE0Q19BTFBIQTBfR19MSU1JVAkJKDB4ZikKLSNkZWZpbmUgVklESVNEMTRDX0FMUEhBMF9HKF94KQkJCSgoX3gpIDw8IDE2KQotI2RlZmluZSBWSURJU0QxNENfQUxQSEEwX0JfTUFTSwkJCSgweGYgPDwgMTIpCi0jZGVmaW5lIFZJRElTRDE0Q19BTFBIQTBfQl9TSElGVAkJKDEyKQotI2RlZmluZSBWSURJU0QxNENfQUxQSEEwX0JfTElNSVQJCSgweGYpCi0jZGVmaW5lIFZJRElTRDE0Q19BTFBIQTBfQihfeCkJCQkoKF94KSA8PCAxMikKLSNkZWZpbmUgVklESVNEMTRDX0FMUEhBMV9SX01BU0sJCQkoMHhmIDw8IDgpCi0jZGVmaW5lIFZJRElTRDE0Q19BTFBIQTFfUl9TSElGVAkJKDgpCi0jZGVmaW5lIFZJRElTRDE0Q19BTFBIQTFfUl9MSU1JVAkJKDB4ZikKLSNkZWZpbmUgVklESVNEMTRDX0FMUEhBMV9SKF94KQkJCSgoX3gpIDw8IDgpCi0jZGVmaW5lIFZJRElTRDE0Q19BTFBIQTFfR19NQVNLCQkJKDB4ZiA8PCA0KQotI2RlZmluZSBWSURJU0QxNENfQUxQSEExX0dfU0hJRlQJCSg0KQotI2RlZmluZSBWSURJU0QxNENfQUxQSEExX0dfTElNSVQJCSgweGYpCi0jZGVmaW5lIFZJRElTRDE0Q19BTFBIQTFfRyhfeCkJCQkoKF94KSA8PCA0KQotI2RlZmluZSBWSURJU0QxNENfQUxQSEExX0JfTUFTSwkJCSgweGYgPDwgMCkKLSNkZWZpbmUgVklESVNEMTRDX0FMUEhBMV9CX1NISUZUCQkoMCkKLSNkZWZpbmUgVklESVNEMTRDX0FMUEhBMV9CX0xJTUlUCQkoMHhmKQotI2RlZmluZSBWSURJU0QxNENfQUxQSEExX0IoX3gpCQkJKChfeCkgPDwgMCkKLQotLyogVmlkZW8gYnVmZmVyIGFkZHJlc3NlcyAqLwotI2RlZmluZSBWSURXX0JVRl9TVEFSVChfYnVmZikJCQkoMHhBMCArICgoX2J1ZmYpICogOCkpCi0jZGVmaW5lIFZJRFdfQlVGX1NUQVJUMShfYnVmZikJCQkoMHhBNCArICgoX2J1ZmYpICogOCkpCi0jZGVmaW5lIFZJRFdfQlVGX0VORChfYnVmZikJCQkoMHhEMCArICgoX2J1ZmYpICogOCkpCi0jZGVmaW5lIFZJRFdfQlVGX0VORDEoX2J1ZmYpCQkJKDB4RDQgKyAoKF9idWZmKSAqIDgpKQotI2RlZmluZSBWSURXX0JVRl9TSVpFKF9idWZmKQkJCSgweDEwMCArICgoX2J1ZmYpICogNCkpCi0KLSNkZWZpbmUgVklEV19CVUZfU0laRV9PRkZTRVRfTUFTSwkJKDB4MWZmZiA8PCAxMykKLSNkZWZpbmUgVklEV19CVUZfU0laRV9PRkZTRVRfU0hJRlQJCSgxMykKLSNkZWZpbmUgVklEV19CVUZfU0laRV9PRkZTRVRfTElNSVQJCSgweDFmZmYpCi0jZGVmaW5lIFZJRFdfQlVGX1NJWkVfT0ZGU0VUKF94KQkJKChfeCkgPDwgMTMpCi0KLSNkZWZpbmUgVklEV19CVUZfU0laRV9QQUdFV0lEVEhfTUFTSwkJKDB4MWZmZiA8PCAwKQotI2RlZmluZSBWSURXX0JVRl9TSVpFX1BBR0VXSURUSF9TSElGVAkJKDApCi0jZGVmaW5lIFZJRFdfQlVGX1NJWkVfUEFHRVdJRFRIX0xJTUlUCQkoMHgxZmZmKQotI2RlZmluZSBWSURXX0JVRl9TSVpFX1BBR0VXSURUSChfeCkJCSgoX3gpIDw8IDApCi0KLS8qIEludGVycnVwdCBjb250cm9scyBhbmQgc3RhdHVzICovCi0KLSNkZWZpbmUgVklESU5UQ09OMF9GSUZPSU5URVJWQUxfTUFTSwkJKDB4M2YgPDwgMjApCi0jZGVmaW5lIFZJRElOVENPTjBfRklGT0lOVEVSVkFMX1NISUZUCQkoMjApCi0jZGVmaW5lIFZJRElOVENPTjBfRklGT0lOVEVSVkFMX0xJTUlUCQkoMHgzZikKLSNkZWZpbmUgVklESU5UQ09OMF9GSUZPSU5URVJWQUwoX3gpCQkoKF94KSA8PCAyMCkKLQotI2RlZmluZSBWSURJTlRDT04wX0lOVF9TWVNNQUlOQ09OCQkoMSA8PCAxOSkKLSNkZWZpbmUgVklESU5UQ09OMF9JTlRfU1lTU1VCQ09OCQkoMSA8PCAxOCkKLSNkZWZpbmUgVklESU5UQ09OMF9JTlRfSTgwSUZET05FCQkoMSA8PCAxNykKLQotI2RlZmluZSBWSURJTlRDT04wX0ZSQU1FU0VMMF9NQVNLCQkoMHgzIDw8IDE1KQotI2RlZmluZSBWSURJTlRDT04wX0ZSQU1FU0VMMF9TSElGVAkJKDE1KQotI2RlZmluZSBWSURJTlRDT04wX0ZSQU1FU0VMMF9CQUNLUE9SQ0gJCSgweDAgPDwgMTUpCi0jZGVmaW5lIFZJRElOVENPTjBfRlJBTUVTRUwwX1ZTWU5DCQkoMHgxIDw8IDE1KQotI2RlZmluZSBWSURJTlRDT04wX0ZSQU1FU0VMMF9BQ1RJVkUJCSgweDIgPDwgMTUpCi0jZGVmaW5lIFZJRElOVENPTjBfRlJBTUVTRUwwX0ZST05UUE9SQ0gJCSgweDMgPDwgMTUpCi0KLSNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDEJCQkoMSA8PCAxNCkKLSNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDFfTk9ORQkJKDB4MCA8PCAxNCkKLSNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDFfQkFDS1BPUkNICQkoMHgxIDw8IDE0KQotI2RlZmluZSBWSURJTlRDT04wX0ZSQU1FU0VMMV9WU1lOQwkJKDB4MiA8PCAxNCkKLSNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDFfRlJPTlRQT1JDSAkJKDB4MyA8PCAxNCkKLQotI2RlZmluZSBWSURJTlRDT04wX0lOVF9GUkFNRQkJCSgxIDw8IDEyKQotI2RlZmluZSBWSURJTlRDT04wX0ZJRklPU0VMX01BU0sJCSgweDdmIDw8IDUpCi0jZGVmaW5lIFZJRElOVENPTjBfRklGSU9TRUxfU0hJRlQJCSg1KQotI2RlZmluZSBWSURJTlRDT04wX0ZJRklPU0VMX1dJTkRPVzAJCSgweDEgPDwgNSkKLSNkZWZpbmUgVklESU5UQ09OMF9GSUZJT1NFTF9XSU5ET1cxCQkoMHgyIDw8IDUpCi0KLSNkZWZpbmUgVklESU5UQ09OMF9GSUZPTEVWRUxfTUFTSwkJKDB4NyA8PCAyKQotI2RlZmluZSBWSURJTlRDT04wX0ZJRk9MRVZFTF9TSElGVAkJKDIpCi0jZGVmaW5lIFZJRElOVENPTjBfRklGT0xFVkVMX1RPMjVQQwkJKDB4MCA8PCAyKQotI2RlZmluZSBWSURJTlRDT04wX0ZJRk9MRVZFTF9UTzUwUEMJCSgweDEgPDwgMikKLSNkZWZpbmUgVklESU5UQ09OMF9GSUZPTEVWRUxfVE83NVBDCQkoMHgyIDw8IDIpCi0jZGVmaW5lIFZJRElOVENPTjBfRklGT0xFVkVMX0VNUFRZCQkoMHgzIDw8IDIpCi0jZGVmaW5lIFZJRElOVENPTjBfRklGT0xFVkVMX0ZVTEwJCSgweDQgPDwgMikKLQotI2RlZmluZSBWSURJTlRDT04wX0lOVF9GSUZPX01BU0sJCSgweDMgPDwgMCkKLSNkZWZpbmUgVklESU5UQ09OMF9JTlRfRklGT19TSElGVAkJKDApCi0jZGVmaW5lIFZJRElOVENPTjBfSU5UX0VOQUJMRQkJCSgxIDw8IDApCi0KLSNkZWZpbmUgVklESU5UQ09OMQkJCQkoMHgxMzQpCi0jZGVmaW5lIFZJRElOVENPTjFfSU5UX0kxODAJCQkoMSA8PCAyKQotI2RlZmluZSBWSURJTlRDT04xX0lOVF9GUkFNRQkJCSgxIDw8IDEpCi0jZGVmaW5lIFZJRElOVENPTjFfSU5UX0ZJRk8JCQkoMSA8PCAwKQotCi0vKiBXaW5kb3cgY29sb3VyLWtleSBjb250cm9sIHJlZ2lzdGVycyAqLwotCi0jZGVmaW5lIFd4S0VZQ09OMF9LRVlCTF9FTgkJCSgxIDw8IDI2KQotI2RlZmluZSBXeEtFWUNPTjBfS0VZRU5fRgkJCSgxIDw8IDI1KQotI2RlZmluZSBXeEtFWUNPTjBfRElSQ09OCQkJKDEgPDwgMjQpCi0jZGVmaW5lIFd4S0VZQ09OMF9DT01QS0VZX01BU0sJCQkoMHhmZmZmZmYgPDwgMCkKLSNkZWZpbmUgV3hLRVlDT04wX0NPTVBLRVlfU0hJRlQJCQkoMCkKLSNkZWZpbmUgV3hLRVlDT04wX0NPTVBLRVlfTElNSVQJCQkoMHhmZmZmZmYpCi0jZGVmaW5lIFd4S0VZQ09OMF9DT01QS0VZKF94KQkJCSgoX3gpIDw8IDApCi0jZGVmaW5lIFd4S0VZQ09OMV9DT0xWQUxfTUFTSwkJCSgweGZmZmZmZiA8PCAwKQotI2RlZmluZSBXeEtFWUNPTjFfQ09MVkFMX1NISUZUCQkJKDApCi0jZGVmaW5lIFd4S0VZQ09OMV9DT0xWQUxfTElNSVQJCQkoMHhmZmZmZmYpCi0jZGVmaW5lIFd4S0VZQ09OMV9DT0xWQUwoX3gpCQkJKChfeCkgPDwgMCkKLQotCi0vKiBXaW5kb3cgYmxhbmtpbmcgKE1BUCkgKi8KLQotI2RlZmluZSBXSU54TUFQX01BUAkJCQkoMSA8PCAyNCkKLSNkZWZpbmUgV0lOeE1BUF9NQVBfQ09MT1VSX01BU0sJCQkoMHhmZmZmZmYgPDwgMCkKLSNkZWZpbmUgV0lOeE1BUF9NQVBfQ09MT1VSX1NISUZUCQkoMCkKLSNkZWZpbmUgV0lOeE1BUF9NQVBfQ09MT1VSX0xJTUlUCQkoMHhmZmZmZmYpCi0jZGVmaW5lIFdJTnhNQVBfTUFQX0NPTE9VUihfeCkJCQkoKF94KSA8PCAwKQotCi0jZGVmaW5lIFdQQUxDT05fUEFMX1VQREFURQkJCSgxIDw8IDkpCi0jZGVmaW5lIFdQQUxDT05fVzFQQUxfTUFTSwkJCSgweDcgPDwgMykKLSNkZWZpbmUgV1BBTENPTl9XMVBBTF9TSElGVAkJCSgzKQotI2RlZmluZSBXUEFMQ09OX1cxUEFMXzI1QlBQX0E4ODgJCSgweDAgPDwgMykKLSNkZWZpbmUgV1BBTENPTl9XMVBBTF8yNEJQUAkJCSgweDEgPDwgMykKLSNkZWZpbmUgV1BBTENPTl9XMVBBTF8xOUJQUF9BNjY2CQkoMHgyIDw8IDMpCi0jZGVmaW5lIFdQQUxDT05fVzFQQUxfMThCUFBfQTY2NQkJKDB4MyA8PCAzKQotI2RlZmluZSBXUEFMQ09OX1cxUEFMXzE4QlBQCQkJKDB4NCA8PCAzKQotI2RlZmluZSBXUEFMQ09OX1cxUEFMXzE2QlBQX0E1NTUJCSgweDUgPDwgMykKLSNkZWZpbmUgV1BBTENPTl9XMVBBTF8xNkJQUF81NjUJCQkoMHg2IDw8IDMpCi0KLSNkZWZpbmUgV1BBTENPTl9XMFBBTF9NQVNLCQkJKDB4NyA8PCAwKQotI2RlZmluZSBXUEFMQ09OX1cwUEFMX1NISUZUCQkJKDApCi0jZGVmaW5lIFdQQUxDT05fVzBQQUxfMjVCUFBfQTg4OAkJKDB4MCA8PCAwKQotI2RlZmluZSBXUEFMQ09OX1cwUEFMXzI0QlBQCQkJKDB4MSA8PCAwKQotI2RlZmluZSBXUEFMQ09OX1cwUEFMXzE5QlBQX0E2NjYJCSgweDIgPDwgMCkKLSNkZWZpbmUgV1BBTENPTl9XMFBBTF8xOEJQUF9BNjY1CQkoMHgzIDw8IDApCi0jZGVmaW5lIFdQQUxDT05fVzBQQUxfMThCUFAJCQkoMHg0IDw8IDApCi0jZGVmaW5lIFdQQUxDT05fVzBQQUxfMTZCUFBfQTU1NQkJKDB4NSA8PCAwKQotI2RlZmluZSBXUEFMQ09OX1cwUEFMXzE2QlBQXzU2NQkJCSgweDYgPDwgMCkKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3Mtc2VyaWFsLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1zZXJpYWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODVkODkwNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1zZXJpYWwuaAorKysgL2Rldi9udWxsCkBAIC0xLDI1MSArMCwwIEBACi0vKiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3Mtc2VyaWFsLmgKLSAqCi0gKiAgRnJvbSBsaW51eC9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvc2VyaWFsX3MzYzI0MTAuaAotICoKLSAqICBJbnRlcm5hbCBoZWFkZXIgZmlsZSBmb3IgU2Ftc3VuZyBTM0MyNDEwIHNlcmlhbCBwb3J0cyAoVUFSVDAtMikKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyIFNoYW5lIE5heSAoc2hhbmVAbWluaXJsLmNvbSkKLSAqCi0gKiAgQWRkaXRpb25hbCBkZWZpbmVzLCBDb3B5cmlnaHQgMjAwMyBTaW10ZWMgRWxlY3Ryb25pY3MgKGxpbnV4QHNpbXRlYy5jby51aykKLSAqCi0gKiAgQWRhcHRlZCBmcm9tOgotICoKLSAqICBJbnRlcm5hbCBoZWFkZXIgZmlsZSBmb3IgTVgxQURTIHNlcmlhbCBwb3J0cyAoVUFSVDEgJiAyKQotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSovCi0KLSNpZm5kZWYgX19BU01fQVJNX1JFR1NfU0VSSUFMX0gKLSNkZWZpbmUgX19BU01fQVJNX1JFR1NfU0VSSUFMX0gKLQotI2RlZmluZSBTM0MyNFhYX1ZBX1VBUlQwICAgICAgKFMzQ19WQV9VQVJUKQotI2RlZmluZSBTM0MyNFhYX1ZBX1VBUlQxICAgICAgKFMzQ19WQV9VQVJUICsgMHg0MDAwICkKLSNkZWZpbmUgUzNDMjRYWF9WQV9VQVJUMiAgICAgIChTM0NfVkFfVUFSVCArIDB4ODAwMCApCi0jZGVmaW5lIFMzQzI0WFhfVkFfVUFSVDMgICAgICAoUzNDX1ZBX1VBUlQgKyAweEMwMDAgKQotCi0jZGVmaW5lIFMzQzI0MTBfUEFfVUFSVDAgICAgICAoUzNDMjRYWF9QQV9VQVJUKQotI2RlZmluZSBTM0MyNDEwX1BBX1VBUlQxICAgICAgKFMzQzI0WFhfUEFfVUFSVCArIDB4NDAwMCApCi0jZGVmaW5lIFMzQzI0MTBfUEFfVUFSVDIgICAgICAoUzNDMjRYWF9QQV9VQVJUICsgMHg4MDAwICkKLSNkZWZpbmUgUzNDMjQ0M19QQV9VQVJUMyAgICAgIChTM0MyNFhYX1BBX1VBUlQgKyAweEMwMDAgKQotCi0jZGVmaW5lIFMzQzI0MTBfVVJYSAkgICgweDI0KQotI2RlZmluZSBTM0MyNDEwX1VUWEgJICAoMHgyMCkKLSNkZWZpbmUgUzNDMjQxMF9VTENPTgkgICgweDAwKQotI2RlZmluZSBTM0MyNDEwX1VDT04JICAoMHgwNCkKLSNkZWZpbmUgUzNDMjQxMF9VRkNPTgkgICgweDA4KQotI2RlZmluZSBTM0MyNDEwX1VNQ09OCSAgKDB4MEMpCi0jZGVmaW5lIFMzQzI0MTBfVUJSRElWCSAgKDB4MjgpCi0jZGVmaW5lIFMzQzI0MTBfVVRSU1RBVAkgICgweDEwKQotI2RlZmluZSBTM0MyNDEwX1VFUlNUQVQJICAoMHgxNCkKLSNkZWZpbmUgUzNDMjQxMF9VRlNUQVQJICAoMHgxOCkKLSNkZWZpbmUgUzNDMjQxMF9VTVNUQVQJICAoMHgxQykKLQotI2RlZmluZSBTM0MyNDEwX0xDT05fQ0ZHTUFTSwkgICgoMHhGPDwzKXwoMHgzKSkKLQotI2RlZmluZSBTM0MyNDEwX0xDT05fQ1M1CSAgKDB4MCkKLSNkZWZpbmUgUzNDMjQxMF9MQ09OX0NTNgkgICgweDEpCi0jZGVmaW5lIFMzQzI0MTBfTENPTl9DUzcJICAoMHgyKQotI2RlZmluZSBTM0MyNDEwX0xDT05fQ1M4CSAgKDB4MykKLSNkZWZpbmUgUzNDMjQxMF9MQ09OX0NTTUFTSwkgICgweDMpCi0KLSNkZWZpbmUgUzNDMjQxMF9MQ09OX1BOT05FCSAgKDB4MCkKLSNkZWZpbmUgUzNDMjQxMF9MQ09OX1BFVkVOCSAgKDB4NSA8PCAzKQotI2RlZmluZSBTM0MyNDEwX0xDT05fUE9ERAkgICgweDQgPDwgMykKLSNkZWZpbmUgUzNDMjQxMF9MQ09OX1BNQVNLCSAgKDB4NyA8PCAzKQotCi0jZGVmaW5lIFMzQzI0MTBfTENPTl9TVE9QQgkgICgxPDwyKQotI2RlZmluZSBTM0MyNDEwX0xDT05fSVJNICAgICAgICAgICgxPDw2KQotCi0jZGVmaW5lIFMzQzI0NDBfVUNPTl9DTEtNQVNLCSAgKDM8PDEwKQotI2RlZmluZSBTM0MyNDQwX1VDT05fUENMSwkgICgwPDwxMCkKLSNkZWZpbmUgUzNDMjQ0MF9VQ09OX1VDTEsJICAoMTw8MTApCi0jZGVmaW5lIFMzQzI0NDBfVUNPTl9QQ0xLMgkgICgyPDwxMCkKLSNkZWZpbmUgUzNDMjQ0MF9VQ09OX0ZDTEsJICAoMzw8MTApCi0jZGVmaW5lIFMzQzI0NDNfVUNPTl9FUExMCSAgKDM8PDEwKQotCi0jZGVmaW5lIFMzQzY0MDBfVUNPTl9DTEtNQVNLCSgzPDwxMCkKLSNkZWZpbmUgUzNDNjQwMF9VQ09OX1BDTEsJKDA8PDEwKQotI2RlZmluZSBTM0M2NDAwX1VDT05fUENMSzIJKDI8PDEwKQotI2RlZmluZSBTM0M2NDAwX1VDT05fVUNMSzAJKDE8PDEwKQotI2RlZmluZSBTM0M2NDAwX1VDT05fVUNMSzEJKDM8PDEwKQotCi0jZGVmaW5lIFMzQzI0NDBfVUNPTjJfRkNMS19FTgkgICgxPDwxNSkKLSNkZWZpbmUgUzNDMjQ0MF9VQ09OMF9ESVZNQVNLCSAgKDE1IDw8IDEyKQotI2RlZmluZSBTM0MyNDQwX1VDT04xX0RJVk1BU0sJICAoMTUgPDwgMTIpCi0jZGVmaW5lIFMzQzI0NDBfVUNPTjJfRElWTUFTSwkgICg3IDw8IDEyKQotI2RlZmluZSBTM0MyNDQwX1VDT05fRElWU0hJRlQJICAoMTIpCi0KLSNkZWZpbmUgUzNDMjQxMl9VQ09OX0NMS01BU0sJKDM8PDEwKQotI2RlZmluZSBTM0MyNDEyX1VDT05fVUNMSwkoMTw8MTApCi0jZGVmaW5lIFMzQzI0MTJfVUNPTl9VU1lTQ0xLCSgzPDwxMCkKLSNkZWZpbmUgUzNDMjQxMl9VQ09OX1BDTEsJKDA8PDEwKQotI2RlZmluZSBTM0MyNDEyX1VDT05fUENMSzIJKDI8PDEwKQotCi0jZGVmaW5lIFMzQzI0MTBfVUNPTl9VQ0xLCSAgKDE8PDEwKQotI2RlZmluZSBTM0MyNDEwX1VDT05fU0JSRUFLCSAgKDE8PDQpCi0KLSNkZWZpbmUgUzNDMjQxMF9VQ09OX1RYSUxFVkVMCSAgKDE8PDkpCi0jZGVmaW5lIFMzQzI0MTBfVUNPTl9SWElMRVZFTAkgICgxPDw4KQotI2RlZmluZSBTM0MyNDEwX1VDT05fVFhJUlFNT0RFCSAgKDE8PDIpCi0jZGVmaW5lIFMzQzI0MTBfVUNPTl9SWElSUU1PREUJICAoMTw8MCkKLSNkZWZpbmUgUzNDMjQxMF9VQ09OX1JYRklGT19UT0kJICAoMTw8NykKLSNkZWZpbmUgUzNDMjQ0M19VQ09OX1JYRVJSX0lSUUVOICAoMTw8NikKLSNkZWZpbmUgUzNDMjQ0M19VQ09OX0xPT1BCQUNLCSAgKDE8PDUpCi0KLSNkZWZpbmUgUzNDMjQxMF9VQ09OX0RFRkFVTFQJICAoUzNDMjQxMF9VQ09OX1RYSUxFVkVMICB8IFwKLQkJCQkgICBTM0MyNDEwX1VDT05fUlhJTEVWRUwgIHwgXAotCQkJCSAgIFMzQzI0MTBfVUNPTl9UWElSUU1PREUgfCBcCi0JCQkJICAgUzNDMjQxMF9VQ09OX1JYSVJRTU9ERSB8IFwKLQkJCQkgICBTM0MyNDEwX1VDT05fUlhGSUZPX1RPSSkKLQotI2RlZmluZSBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCSAgKDE8PDApCi0jZGVmaW5lIFMzQzI0MTBfVUZDT05fVFhUUklHMAkgICgwPDw2KQotI2RlZmluZSBTM0MyNDEwX1VGQ09OX1JYVFJJRzgJICAoMTw8NCkKLSNkZWZpbmUgUzNDMjQxMF9VRkNPTl9SWFRSSUcxMgkgICgyPDw0KQotCi0vKiBTM0MyNDQwIEZJRk8gdHJpZ2dlciBsZXZlbHMgKi8KLSNkZWZpbmUgUzNDMjQ0MF9VRkNPTl9SWFRSSUcxCSAgKDA8PDQpCi0jZGVmaW5lIFMzQzI0NDBfVUZDT05fUlhUUklHOAkgICgxPDw0KQotI2RlZmluZSBTM0MyNDQwX1VGQ09OX1JYVFJJRzE2CSAgKDI8PDQpCi0jZGVmaW5lIFMzQzI0NDBfVUZDT05fUlhUUklHMzIJICAoMzw8NCkKLQotI2RlZmluZSBTM0MyNDQwX1VGQ09OX1RYVFJJRzAJICAoMDw8NikKLSNkZWZpbmUgUzNDMjQ0MF9VRkNPTl9UWFRSSUcxNgkgICgxPDw2KQotI2RlZmluZSBTM0MyNDQwX1VGQ09OX1RYVFJJRzMyCSAgKDI8PDYpCi0jZGVmaW5lIFMzQzI0NDBfVUZDT05fVFhUUklHNDgJICAoMzw8NikKLQotI2RlZmluZSBTM0MyNDEwX1VGQ09OX1JFU0VUQk9USAkgICgzPDwxKQotI2RlZmluZSBTM0MyNDEwX1VGQ09OX1JFU0VUVFgJICAoMTw8MikKLSNkZWZpbmUgUzNDMjQxMF9VRkNPTl9SRVNFVFJYCSAgKDE8PDEpCi0KLSNkZWZpbmUgUzNDMjQxMF9VRkNPTl9ERUZBVUxUCSAgKFMzQzI0MTBfVUZDT05fRklGT01PREUgfCBcCi0JCQkJICAgUzNDMjQxMF9VRkNPTl9UWFRSSUcwICB8IFwKLQkJCQkgICBTM0MyNDEwX1VGQ09OX1JYVFJJRzggKQotCi0jZGVmaW5lCVMzQzI0MTBfVU1DT01fQUZDCSAgKDE8PDQpCi0jZGVmaW5lCVMzQzI0MTBfVU1DT01fUlRTX0xPVwkgICgxPDwwKQotCi0jZGVmaW5lIFMzQzI0MTJfVU1DT05fQUZDXzYzCSgwPDw1KQkJLyogc2FtZSBhcyBzM2MyNDQzICovCi0jZGVmaW5lIFMzQzI0MTJfVU1DT05fQUZDXzU2CSgxPDw1KQotI2RlZmluZSBTM0MyNDEyX1VNQ09OX0FGQ180OAkoMjw8NSkKLSNkZWZpbmUgUzNDMjQxMl9VTUNPTl9BRkNfNDAJKDM8PDUpCi0jZGVmaW5lIFMzQzI0MTJfVU1DT05fQUZDXzMyCSg0PDw1KQotI2RlZmluZSBTM0MyNDEyX1VNQ09OX0FGQ18yNAkoNTw8NSkKLSNkZWZpbmUgUzNDMjQxMl9VTUNPTl9BRkNfMTYJKDY8PDUpCi0jZGVmaW5lIFMzQzI0MTJfVU1DT05fQUZDXzgJKDc8PDUpCi0KLSNkZWZpbmUgUzNDMjQxMF9VRlNUQVRfVFhGVUxMCSAgKDE8PDkpCi0jZGVmaW5lIFMzQzI0MTBfVUZTVEFUX1JYRlVMTAkgICgxPDw4KQotI2RlZmluZSBTM0MyNDEwX1VGU1RBVF9UWE1BU0sJICAoMTU8PDQpCi0jZGVmaW5lIFMzQzI0MTBfVUZTVEFUX1RYU0hJRlQJICAoNCkKLSNkZWZpbmUgUzNDMjQxMF9VRlNUQVRfUlhNQVNLCSAgKDE1PDwwKQotI2RlZmluZSBTM0MyNDEwX1VGU1RBVF9SWFNISUZUCSAgKDApCi0KLS8qIFVGU1RBVCBTM0MyNEEwICovCi0jZGVmaW5lIFMzQzI0QTBfVUZTVEFUX1RYRlVMTAkgICgxIDw8IDE0KQotI2RlZmluZSBTM0MyNEEwX1VGU1RBVF9SWEZVTEwJICAoMSA8PCA2KQotI2RlZmluZSBTM0MyNEEwX1VGU1RBVF9UWE1BU0sJICAoNjMgPDwgOCkKLSNkZWZpbmUgUzNDMjRBMF9VRlNUQVRfVFhTSElGVAkgICg4KQotI2RlZmluZSBTM0MyNEEwX1VGU1RBVF9SWE1BU0sJICAoNjMpCi0jZGVmaW5lIFMzQzI0QTBfVUZTVEFUX1JYU0hJRlQJICAoMCkKLQotLyogVUZTVEFUIFMzQzI0NDMgc2FtZSBhcyBTM0MyNDQwICovCi0jZGVmaW5lIFMzQzI0NDBfVUZTVEFUX1RYRlVMTAkgICgxPDwxNCkKLSNkZWZpbmUgUzNDMjQ0MF9VRlNUQVRfUlhGVUxMCSAgKDE8PDYpCi0jZGVmaW5lIFMzQzI0NDBfVUZTVEFUX1RYU0hJRlQJICAoOCkKLSNkZWZpbmUgUzNDMjQ0MF9VRlNUQVRfUlhTSElGVAkgICgwKQotI2RlZmluZSBTM0MyNDQwX1VGU1RBVF9UWE1BU0sJICAoNjM8PDgpCi0jZGVmaW5lIFMzQzI0NDBfVUZTVEFUX1JYTUFTSwkgICg2MykKLQotI2RlZmluZSBTM0MyNDEwX1VUUlNUQVRfVFhFCSAgKDE8PDIpCi0jZGVmaW5lIFMzQzI0MTBfVVRSU1RBVF9UWEZFCSAgKDE8PDEpCi0jZGVmaW5lIFMzQzI0MTBfVVRSU1RBVF9SWERSCSAgKDE8PDApCi0KLSNkZWZpbmUgUzNDMjQxMF9VRVJTVEFUX09WRVJSVU4JICAoMTw8MCkKLSNkZWZpbmUgUzNDMjQxMF9VRVJTVEFUX0ZSQU1FCSAgKDE8PDIpCi0jZGVmaW5lIFMzQzI0MTBfVUVSU1RBVF9CUkVBSwkgICgxPDwzKQotI2RlZmluZSBTM0MyNDQzX1VFUlNUQVRfUEFSSVRZCSAgKDE8PDEpCi0KLSNkZWZpbmUgUzNDMjQxMF9VRVJTVEFUX0FOWQkgIChTM0MyNDEwX1VFUlNUQVRfT1ZFUlJVTiB8IFwKLQkJCQkgICBTM0MyNDEwX1VFUlNUQVRfRlJBTUUgfCBcCi0JCQkJICAgUzNDMjQxMF9VRVJTVEFUX0JSRUFLKQotCi0jZGVmaW5lIFMzQzI0MTBfVU1TVEFUX0NUUwkgICgxPDwwKQotI2RlZmluZSBTM0MyNDEwX1VNU1RBVF9EZWx0YUNUUwkgICgxPDwyKQotCi0jZGVmaW5lIFMzQzI0NDNfRElWU0xPVAkJICAoMHgyQykKLQotLyogUzNDNjRYWCBpbnRlcnJ1cHQgcmVnaXN0ZXJzLiAqLwotI2RlZmluZSBTM0M2NFhYX1VJTlRQCQkweDMwCi0jZGVmaW5lIFMzQzY0WFhfVUlOVFNQCQkweDM0Ci0jZGVmaW5lIFMzQzY0WFhfVUlOVE0JCTB4MzgKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotLyogc3RydWN0IHMzYzI0eHhfdWFydF9jbGtzcmMKLSAqCi0gKiB0aGlzIHN0cnVjdHVyZSBkZWZpbmVzIGEgbmFtZWQgY2xvY2sgc291cmNlIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHRoZQotICogdWFydCwgc28gdGhhdCB0aGUgYmVzdCBjbG9jayBjYW4gYmUgc2VsZWN0ZWQgZm9yIHRoZSByZXF1ZXN0ZWQgYmF1ZAotICogcmF0ZS4KLSAqCi0gKiBtaW5fYmF1ZCBhbmQgbWF4X2JhdWQgZGVmaW5lIHRoZSByYW5nZSBvZiBiYXVkLXJhdGVzIHRoaXMgY2xvY2sgaXMKLSAqIGFjY2VwdGFibGUgZm9yLCBpZiB0aGV5IGFyZSBib3RoIHplcm8sIGl0IGlzIGFzc3VtZWQgYW55IGJhdWQgcmF0ZSB0aGF0Ci0gKiBjYW4gYmUgZ2VuZXJhdGVkIGZyb20gdGhpcyBjbG9jayB3aWxsIGJlIHVzZWQuCi0gKgotICogZGl2aXNvciBnaXZlcyB0aGUgZGl2aXNvciBmcm9tIHRoZSBjbG9jayB0byB0aGUgb25lIHNlZW4gYnkgdGhlIHVhcnQKLSovCi0KLXN0cnVjdCBzM2MyNHh4X3VhcnRfY2xrc3JjIHsKLQljb25zdCBjaGFyCSpuYW1lOwotCXVuc2lnbmVkIGludAkgZGl2aXNvcjsKLQl1bnNpZ25lZCBpbnQJIG1pbl9iYXVkOwotCXVuc2lnbmVkIGludAkgbWF4X2JhdWQ7Ci19OwotCi0vKiBjb25maWd1cmF0aW9uIHN0cnVjdHVyZSBmb3IgcGVyLW1hY2hpbmUgY29uZmlndXJhdGlvbnMgZm9yIHRoZQotICogc2VyaWFsIHBvcnQKLSAqCi0gKiB0aGUgcG9pbnRlciBpcyBzZXR1cCBieSB0aGUgbWFjaGluZSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiBmcm9tIHRoZQotICogYXJjaC9hcm0vbWFjaC1zM2MyNDEwLyBkaXJlY3RvcnkuCi0qLwotCi1zdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnIHsKLQl1bnNpZ25lZCBjaGFyCSAgIGh3cG9ydDsJIC8qIGhhcmR3YXJlIHBvcnQgbnVtYmVyICovCi0JdW5zaWduZWQgY2hhcgkgICB1bnVzZWQ7Ci0JdW5zaWduZWQgc2hvcnQJICAgZmxhZ3M7Ci0JdXBmX3QJCSAgIHVhcnRfZmxhZ3M7CSAvKiBkZWZhdWx0IHVhcnQgZmxhZ3MgKi8KLQotCXVuc2lnbmVkIGxvbmcJICAgdWNvbjsJIC8qIHZhbHVlIG9mIHVjb24gZm9yIHBvcnQgKi8KLQl1bnNpZ25lZCBsb25nCSAgIHVsY29uOwkgLyogdmFsdWUgb2YgdWxjb24gZm9yIHBvcnQgKi8KLQl1bnNpZ25lZCBsb25nCSAgIHVmY29uOwkgLyogdmFsdWUgb2YgdWZjb24gZm9yIHBvcnQgKi8KLQotCXN0cnVjdCBzM2MyNHh4X3VhcnRfY2xrc3JjICpjbG9ja3M7Ci0JdW5zaWduZWQgaW50CQkgICAgY2xvY2tzX3NpemU7Ci19OwotCi0vKiBzM2MyNHh4X3VhcnRfZGV2cwotICoKLSAqIHRoaXMgaXMgZXhwb3J0ZWQgZnJvbSB0aGUgY29yZSBhcyB3ZSBjYW5ub3QgdXNlIGRyaXZlcl9yZWdpc3RlcigpLAotICogb3IgcGxhdGZvcm1fYWRkX2RldmljZSgpIGJlZm9yZSB0aGUgY29uc29sZV9pbml0Y2FsbCgpCi0qLwotCi1leHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqczNjMjR4eF91YXJ0X2RldnNbNF07Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIF9fQVNNX0FSTV9SRUdTX1NFUklBTF9IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXVzYi1oc290Zy1waHkuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXVzYi1oc290Zy1waHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzZhODVmNS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy11c2ItaHNvdGctcGh5LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1MCArMCwwIEBACi0vKiBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy11c2ItaHNvdGctcGh5LmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBTM0MgLSBVU0IyLjAgSGlnaHNwZWVkL090RyBkZXZpY2UgUEhZIHJlZ2lzdGVycwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0vKiBOb3RlLCB0aGlzIGlzIGEgc2VwZXJhdGUgaGVhZGVyIGZpbGUgYXMgc29tZSBvZiB0aGUgY2xvY2sgZnJhbWV3b3JrCi0gKiBuZWVkcyB0byB0b3VjaCB0aGlzIGlmIHRoZSBjbGtfNDhtIGlzIHVzZWQgYXMgdGhlIFVTQiBPSENJIG9yIG90aGVyCi0gKiBwZXJpcGhlcmFsIHNvdXJjZS4KLSovCi0KLSNpZm5kZWYgX19QTEFUX1MzQzY0WFhfUkVHU19VU0JfSFNPVEdfUEhZX0gKLSNkZWZpbmUgX19QTEFUX1MzQzY0WFhfUkVHU19VU0JfSFNPVEdfUEhZX0ggX19GSUxFX18KLQotLyogUzNDNjRYWF9QQV9VU0JfSFNQSFkgKi8KLQotI2RlZmluZSBTM0NfSFNPVEdfUEhZUkVHKHgpCSgoeCkgKyBTM0NfVkFfVVNCX0hTUEhZKQotCi0jZGVmaW5lIFMzQ19QSFlQV1IJCQkJUzNDX0hTT1RHX1BIWVJFRygweDAwKQotI2RlZmluZSBTUkNfUEhZUFdSX09UR19ESVNBQkxFCQkJKDEgPDwgNCkKLSNkZWZpbmUgU1JDX1BIWVBXUl9BTkFMT0dfUE9XRVJET1dOCQkoMSA8PCAzKQotI2RlZmluZSBTUkNfUEhZUFdSX0ZPUkNFX1NVU1BFTkQJCSgxIDw8IDEpCi0KLSNkZWZpbmUgUzNDX1BIWUNMSwkJCQlTM0NfSFNPVEdfUEhZUkVHKDB4MDQpCi0jZGVmaW5lIFMzQ19QSFlDTEtfTU9ERV9VU0IxMQkJCSgxIDw8IDYpCi0jZGVmaW5lIFMzQ19QSFlDTEtfRVhUX09TQwkJCSgxIDw8IDUpCi0jZGVmaW5lIFMzQ19QSFlDTEtfQ0xLX0ZPUkNFCQkJKDEgPDwgNCkKLSNkZWZpbmUgUzNDX1BIWUNMS19JRF9QVUxMCQkJKDEgPDwgMikKLSNkZWZpbmUgUzNDX1BIWUNMS19DTEtTRUxfTUFTSwkJCSgweDMgPDwgMCkKLSNkZWZpbmUgUzNDX1BIWUNMS19DTEtTRUxfU0hJRlQJCQkoMCkKLSNkZWZpbmUgUzNDX1BIWUNMS19DTEtTRUxfNDhNCQkJKDB4MCA8PCAwKQotI2RlZmluZSBTM0NfUEhZQ0xLX0NMS1NFTF8xMk0JCQkoMHgyIDw8IDApCi0jZGVmaW5lIFMzQ19QSFlDTEtfQ0xLU0VMXzI0TQkJCSgweDMgPDwgMCkKLQotI2RlZmluZSBTM0NfUlNUQ09OCQkJCVMzQ19IU09UR19QSFlSRUcoMHgwOCkKLSNkZWZpbmUgUzNDX1JTVENPTl9QSFlDTEsJCQkoMSA8PCAyKQotI2RlZmluZSBTM0NfUlNUQ09OX0hDTEsJCQkJKDEgPDwgMikKLSNkZWZpbmUgUzNDX1JTVENPTl9QSFkJCQkJKDEgPDwgMCkKLQotI2RlZmluZSBTM0NfUEhZVFVORQkJCQlTM0NfSFNPVEdfUEhZUkVHKDB4MjApCi0KLSNlbmRpZiAvKiBfX1BMQVRfUzNDNjRYWF9SRUdTX1VTQl9IU09UR19QSFlfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3NkaGNpLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvc2RoY2kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTMxOTg2Ny4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvc2RoY2kuaAorKysgL2Rldi9udWxsCkBAIC0xLDIyNiArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvc2RoY2kuaAotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogUzNDIFBsYXRmb3JtIC0gU0RIQ0kgKEhTTU1DKSBwbGF0Zm9ybSBkYXRhIGRlZmluaXRpb25zCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpZm5kZWYgX19QTEFUX1MzQ19TREhDSV9ICi0jZGVmaW5lIF9fUExBVF9TM0NfU0RIQ0lfSCBfX0ZJTEVfXwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOwotc3RydWN0IG1tY19ob3N0Owotc3RydWN0IG1tY19jYXJkOwotc3RydWN0IG1tY19pb3M7Ci0KLS8qKgotICogc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSgpIC0gUGxhdGZvcm0gZGV2aWNlIGRhdGEgZm9yIFNhbXN1bmcgU0RIQ0kKLSAqIEBtYXhfd2lkdGg6IFRoZSBtYXhpbXVtIG51bWJlciBvZiBkYXRhIGJpdHMgc3VwcG9ydGVkLgotICogQGhvc3RfY2FwczogU3RhbmRhcmQgTU1DIGhvc3QgY2FwYWJpbGl0aWVzIGJpdCBmaWVsZC4KLSAqIEBjZmdfZ3BpbzogQ29uZmlndXJlIHRoZSBHUElPIGZvciBhIHNwZWNpZmljIGNhcmQgYml0LXdpZHRoCi0gKiBAY2ZnX2NhcmQ6IENvbmZpZ3VyZSB0aGUgaW50ZXJmYWNlIGZvciBhIHNwZWNpZmljIGNhcmQgYW5kIHNwZWVkLiBUaGlzCi0gKiAgICAgICAgICAgIGlzIG5lY2Vzc2FyeSB0aGUgY29udHJvbGxlcnMgYW5kL29yIEdQSU8gYmxvY2tzIHJlcXVpcmUgdGhlCi0gKgkgICAgICBjaGFuZ2luZyBvZiBkcml2ZXItc3RyZW5ndGggYW5kIG90aGVyIGNvbnRyb2xzIGRlcGVuZGFudCBvbgotICoJICAgICAgdGhlIGNhcmQgYW5kIHNwZWVkIG9mIG9wZXJhdGlvbi4KLSAqCi0gKiBJbml0aWFsaXNhdGlvbiBkYXRhIHNwZWNpZmljIHRvIGVpdGhlciB0aGUgbWFjaGluZSBvciB0aGUgcGxhdGZvcm0KLSAqIGZvciB0aGUgZGV2aWNlIGRyaXZlciB0byB1c2Ugb3IgY2FsbC1iYWNrIHdoZW4gY29uZmlndXJpbmcgZ3BpbyBvcgotICogY2FyZCBzcGVlZCBpbmZvcm1hdGlvbi4KLSovCi1zdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhIHsKLQl1bnNpZ25lZCBpbnQJbWF4X3dpZHRoOwotCXVuc2lnbmVkIGludAlob3N0X2NhcHM7Ci0KLQljaGFyCQkqKmNsb2NrczsJLyogc2V0IG9mIGNsb2NrIHNvdXJjZXMgKi8KLQotCXZvaWQJKCpjZmdfZ3Bpbykoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LCBpbnQgd2lkdGgpOwotCXZvaWQJKCpjZmdfY2FyZCkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAotCQkJICAgIHZvaWQgX19pb21lbSAqcmVnYmFzZSwKLQkJCSAgICBzdHJ1Y3QgbW1jX2lvcyAqaW9zLAotCQkJICAgIHN0cnVjdCBtbWNfY2FyZCAqY2FyZCk7Ci19OwotCi0vKioKLSAqIHMzY19zZGhjaTBfc2V0X3BsYXRkYXRhIC0gU2V0IHBsYXRmb3JtIGRhdGEgZm9yIFMzQyBTREhDSSBkZXZpY2UuCi0gKiBAcGQ6IFBsYXRmb3JtIGRhdGEgdG8gcmVnaXN0ZXIgdG8gZGV2aWNlLgotICoKLSAqIFJlZ2lzdGVyIHRoZSBnaXZlbiBwbGF0Zm9ybSBkYXRhIGZvciB1c2Ugd2l0aGUgUzNDIFNESENJIGRldmljZS4KLSAqIFRoZSBjYWxsIHdpbGwgY29weSB0aGUgcGxhdGZvcm0gZGF0YSwgc28gdGhlIGJvYXJkIGRlZmluaXRpb25zIGNhbgotICogbWFrZSB0aGUgc3RydWN0dXJlIGl0c2VsZiBfX2luaXRkYXRhLgotICovCi1leHRlcm4gdm9pZCBzM2Nfc2RoY2kwX3NldF9wbGF0ZGF0YShzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhICpwZCk7Ci1leHRlcm4gdm9pZCBzM2Nfc2RoY2kxX3NldF9wbGF0ZGF0YShzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhICpwZCk7Ci1leHRlcm4gdm9pZCBzM2Nfc2RoY2kyX3NldF9wbGF0ZGF0YShzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhICpwZCk7Ci0KLS8qIERlZmF1bHQgcGxhdGZvcm0gZGF0YSwgZXhwb3J0ZWQgc28gdGhhdCBwZXItY3B1IGluaXRpYWxpc2F0aW9uIGNhbgotICogc2V0IHRoZSBjb3JyZWN0IG9uZSB3aGVuIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIGNwdSB0eXBlIHNlbGVjdGVkLgotKi8KLQotZXh0ZXJuIHN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgczNjX2hzbW1jMF9kZWZfcGxhdGRhdGE7Ci1leHRlcm4gc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSBzM2NfaHNtbWMxX2RlZl9wbGF0ZGF0YTsKLWV4dGVybiBzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhIHMzY19oc21tYzJfZGVmX3BsYXRkYXRhOwotCi0vKiBIZWxwZXIgZnVuY3Rpb24gYXZhaWxhYmxpdHkgKi8KLQotZXh0ZXJuIHZvaWQgczNjNjR4eF9zZXR1cF9zZGhjaTBfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBpbnQgdyk7Ci1leHRlcm4gdm9pZCBzM2M2NHh4X3NldHVwX3NkaGNpMV9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIGludCB3KTsKLWV4dGVybiB2b2lkIHM1cGMxMDBfc2V0dXBfc2RoY2kwX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgaW50IHcpOwotZXh0ZXJuIHZvaWQgczVwYzEwMF9zZXR1cF9zZGhjaTFfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBpbnQgdyk7Ci1leHRlcm4gdm9pZCBzNXBjMTAwX3NldHVwX3NkaGNpMl9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIGludCB3KTsKLWV4dGVybiB2b2lkIHMzYzY0eHhfc2V0dXBfc2RoY2kyX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgaW50IHcpOwotCi0vKiBTM0M2NDAwIFNESENJIHNldHVwICovCi0KLSNpZmRlZiBDT05GSUdfUzNDNjQwMF9TRVRVUF9TREhDSQotZXh0ZXJuIGNoYXIgKnMzYzY0MDBfaHNtbWNfY2xrc3Jjc1s0XTsKLQotI2lmZGVmIENPTkZJR19TM0NfREVWX0hTTU1DCi1leHRlcm4gdm9pZCBzM2M2NDAwX3NldHVwX3NkaGNpX2NmZ19jYXJkKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKLQkJCQkJIHZvaWQgX19pb21lbSAqciwKLQkJCQkJIHN0cnVjdCBtbWNfaW9zICppb3MsCi0JCQkJCSBzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgczNjNjQwMF9kZWZhdWx0X3NkaGNpMCh2b2lkKQotewotCXMzY19oc21tYzBfZGVmX3BsYXRkYXRhLmNsb2NrcyA9IHMzYzY0MDBfaHNtbWNfY2xrc3JjczsKLQlzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YS5jZmdfZ3BpbyA9IHMzYzY0eHhfc2V0dXBfc2RoY2kwX2NmZ19ncGlvOwotCXMzY19oc21tYzBfZGVmX3BsYXRkYXRhLmNmZ19jYXJkID0gczNjNjQwMF9zZXR1cF9zZGhjaV9jZmdfY2FyZDsKLX0KLQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDAwX2RlZmF1bHRfc2RoY2kwKHZvaWQpIHsgfQotI2VuZGlmICAvKiBDT05GSUdfUzNDX0RFVl9IU01NQyAqLwotCi0jaWZkZWYgQ09ORklHX1MzQ19ERVZfSFNNTUMxCi1zdGF0aWMgaW5saW5lIHZvaWQgczNjNjQwMF9kZWZhdWx0X3NkaGNpMSh2b2lkKQotewotCXMzY19oc21tYzFfZGVmX3BsYXRkYXRhLmNsb2NrcyA9IHMzYzY0MDBfaHNtbWNfY2xrc3JjczsKLQlzM2NfaHNtbWMxX2RlZl9wbGF0ZGF0YS5jZmdfZ3BpbyA9IHMzYzY0eHhfc2V0dXBfc2RoY2kxX2NmZ19ncGlvOwotCXMzY19oc21tYzFfZGVmX3BsYXRkYXRhLmNmZ19jYXJkID0gczNjNjQwMF9zZXR1cF9zZGhjaV9jZmdfY2FyZDsKLX0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgczNjNjQwMF9kZWZhdWx0X3NkaGNpMSh2b2lkKSB7IH0KLSNlbmRpZiAvKiBDT05GSUdfUzNDX0RFVl9IU01NQzEgKi8KLQotI2lmZGVmIENPTkZJR19TM0NfREVWX0hTTU1DMgotc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MDBfZGVmYXVsdF9zZGhjaTIodm9pZCkKLXsKLQlzM2NfaHNtbWMyX2RlZl9wbGF0ZGF0YS5jbG9ja3MgPSBzM2M2NDAwX2hzbW1jX2Nsa3NyY3M7Ci0JczNjX2hzbW1jMl9kZWZfcGxhdGRhdGEuY2ZnX2dwaW8gPSBzM2M2NHh4X3NldHVwX3NkaGNpMl9jZmdfZ3BpbzsKLQlzM2NfaHNtbWMyX2RlZl9wbGF0ZGF0YS5jZmdfY2FyZCA9IHMzYzY0MDBfc2V0dXBfc2RoY2lfY2ZnX2NhcmQ7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MDBfZGVmYXVsdF9zZGhjaTIodm9pZCkgeyB9Ci0jZW5kaWYgLyogQ09ORklHX1MzQ19ERVZfSFNNTUMyICovCi0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgczNjNjQwMF9kZWZhdWx0X3NkaGNpMCh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDAwX2RlZmF1bHRfc2RoY2kxKHZvaWQpIHsgfQotI2VuZGlmIC8qIENPTkZJR19TM0M2NDAwX1NFVFVQX1NESENJICovCi0KLS8qIFMzQzY0MTAgU0RIQ0kgc2V0dXAgKi8KLQotI2lmZGVmIENPTkZJR19TM0M2NDEwX1NFVFVQX1NESENJCi1leHRlcm4gY2hhciAqczNjNjQxMF9oc21tY19jbGtzcmNzWzRdOwotCi1leHRlcm4gdm9pZCBzM2M2NDEwX3NldHVwX3NkaGNpMF9jZmdfY2FyZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCi0JCQkJCSAgIHZvaWQgX19pb21lbSAqciwKLQkJCQkJICAgc3RydWN0IG1tY19pb3MgKmlvcywKLQkJCQkJICAgc3RydWN0IG1tY19jYXJkICpjYXJkKTsKLQotI2lmZGVmIENPTkZJR19TM0NfREVWX0hTTU1DCi1zdGF0aWMgaW5saW5lIHZvaWQgczNjNjQxMF9kZWZhdWx0X3NkaGNpMCh2b2lkKQotewotCXMzY19oc21tYzBfZGVmX3BsYXRkYXRhLmNsb2NrcyA9IHMzYzY0MTBfaHNtbWNfY2xrc3JjczsKLQlzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YS5jZmdfZ3BpbyA9IHMzYzY0eHhfc2V0dXBfc2RoY2kwX2NmZ19ncGlvOwotCXMzY19oc21tYzBfZGVmX3BsYXRkYXRhLmNmZ19jYXJkID0gczNjNjQxMF9zZXR1cF9zZGhjaTBfY2ZnX2NhcmQ7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MTBfZGVmYXVsdF9zZGhjaTAodm9pZCkgeyB9Ci0jZW5kaWYgLyogQ09ORklHX1MzQ19ERVZfSFNNTUMgKi8KLQotI2lmZGVmIENPTkZJR19TM0NfREVWX0hTTU1DMQotc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MTBfZGVmYXVsdF9zZGhjaTEodm9pZCkKLXsKLQlzM2NfaHNtbWMxX2RlZl9wbGF0ZGF0YS5jbG9ja3MgPSBzM2M2NDEwX2hzbW1jX2Nsa3NyY3M7Ci0JczNjX2hzbW1jMV9kZWZfcGxhdGRhdGEuY2ZnX2dwaW8gPSBzM2M2NHh4X3NldHVwX3NkaGNpMV9jZmdfZ3BpbzsKLQlzM2NfaHNtbWMxX2RlZl9wbGF0ZGF0YS5jZmdfY2FyZCA9IHMzYzY0MTBfc2V0dXBfc2RoY2kwX2NmZ19jYXJkOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDEwX2RlZmF1bHRfc2RoY2kxKHZvaWQpIHsgfQotI2VuZGlmIC8qIENPTkZJR19TM0NfREVWX0hTTU1DMSAqLwotCi0jaWZkZWYgQ09ORklHX1MzQ19ERVZfSFNNTUMyCi1zdGF0aWMgaW5saW5lIHZvaWQgczNjNjQxMF9kZWZhdWx0X3NkaGNpMih2b2lkKQotewotCXMzY19oc21tYzJfZGVmX3BsYXRkYXRhLmNsb2NrcyA9IHMzYzY0MTBfaHNtbWNfY2xrc3JjczsKLQlzM2NfaHNtbWMyX2RlZl9wbGF0ZGF0YS5jZmdfZ3BpbyA9IHMzYzY0eHhfc2V0dXBfc2RoY2kyX2NmZ19ncGlvOwotCXMzY19oc21tYzJfZGVmX3BsYXRkYXRhLmNmZ19jYXJkID0gczNjNjQxMF9zZXR1cF9zZGhjaTBfY2ZnX2NhcmQ7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MTBfZGVmYXVsdF9zZGhjaTIodm9pZCkgeyB9Ci0jZW5kaWYgLyogQ09ORklHX1MzQ19ERVZfSFNNTUMyICovCi0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgczNjNjQxMF9kZWZhdWx0X3NkaGNpMCh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDEwX2RlZmF1bHRfc2RoY2kxKHZvaWQpIHsgfQotI2VuZGlmIC8qIENPTkZJR19TM0M2NDEwX1NFVFVQX1NESENJICovCi0KLS8qIFM1UEMxMDAgU0RIQ0kgc2V0dXAgKi8KLQotI2lmZGVmIENPTkZJR19TNVBDMTAwX1NFVFVQX1NESENJCi1leHRlcm4gY2hhciAqczVwYzEwMF9oc21tY19jbGtzcmNzWzRdOwotCi1leHRlcm4gdm9pZCBzNXBjMTAwX3NldHVwX3NkaGNpMF9jZmdfY2FyZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCi0JCQkJCSAgIHZvaWQgX19pb21lbSAqciwKLQkJCQkJICAgc3RydWN0IG1tY19pb3MgKmlvcywKLQkJCQkJICAgc3RydWN0IG1tY19jYXJkICpjYXJkKTsKLQotI2lmZGVmIENPTkZJR19TM0NfREVWX0hTTU1DCi1zdGF0aWMgaW5saW5lIHZvaWQgczVwYzEwMF9kZWZhdWx0X3NkaGNpMCh2b2lkKQotewotCXMzY19oc21tYzBfZGVmX3BsYXRkYXRhLmNsb2NrcyA9IHM1cGMxMDBfaHNtbWNfY2xrc3JjczsKLQlzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YS5jZmdfZ3BpbyA9IHM1cGMxMDBfc2V0dXBfc2RoY2kwX2NmZ19ncGlvOwotCXMzY19oc21tYzBfZGVmX3BsYXRkYXRhLmNmZ19jYXJkID0gczVwYzEwMF9zZXR1cF9zZGhjaTBfY2ZnX2NhcmQ7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHM1cGMxMDBfZGVmYXVsdF9zZGhjaTAodm9pZCkgeyB9Ci0jZW5kaWYgLyogQ09ORklHX1MzQ19ERVZfSFNNTUMgKi8KLQotI2lmZGVmIENPTkZJR19TM0NfREVWX0hTTU1DMQotc3RhdGljIGlubGluZSB2b2lkIHM1cGMxMDBfZGVmYXVsdF9zZGhjaTEodm9pZCkKLXsKLQlzM2NfaHNtbWMxX2RlZl9wbGF0ZGF0YS5jbG9ja3MgPSBzNXBjMTAwX2hzbW1jX2Nsa3NyY3M7Ci0JczNjX2hzbW1jMV9kZWZfcGxhdGRhdGEuY2ZnX2dwaW8gPSBzNXBjMTAwX3NldHVwX3NkaGNpMV9jZmdfZ3BpbzsKLQlzM2NfaHNtbWMxX2RlZl9wbGF0ZGF0YS5jZmdfY2FyZCA9IHM1cGMxMDBfc2V0dXBfc2RoY2kwX2NmZ19jYXJkOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzNXBjMTAwX2RlZmF1bHRfc2RoY2kxKHZvaWQpIHsgfQotI2VuZGlmIC8qIENPTkZJR19TM0NfREVWX0hTTU1DMSAqLwotCi0jaWZkZWYgQ09ORklHX1MzQ19ERVZfSFNNTUMyCi1zdGF0aWMgaW5saW5lIHZvaWQgczVwYzEwMF9kZWZhdWx0X3NkaGNpMih2b2lkKQotewotCXMzY19oc21tYzJfZGVmX3BsYXRkYXRhLmNsb2NrcyA9IHM1cGMxMDBfaHNtbWNfY2xrc3JjczsKLQlzM2NfaHNtbWMyX2RlZl9wbGF0ZGF0YS5jZmdfZ3BpbyA9IHM1cGMxMDBfc2V0dXBfc2RoY2kyX2NmZ19ncGlvOwotCXMzY19oc21tYzJfZGVmX3BsYXRkYXRhLmNmZ19jYXJkID0gczVwYzEwMF9zZXR1cF9zZGhjaTBfY2ZnX2NhcmQ7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHM1cGMxMDBfZGVmYXVsdF9zZGhjaTIodm9pZCkgeyB9Ci0jZW5kaWYgLyogQ09ORklHX1MzQ19ERVZfSFNNTUMxICovCi0KLQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCBzNXBjMTAwX2RlZmF1bHRfc2RoY2kwKHZvaWQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIHM1cGMxMDBfZGVmYXVsdF9zZGhjaTEodm9pZCkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgczVwYzEwMF9kZWZhdWx0X3NkaGNpMih2b2lkKSB7IH0KLSNlbmRpZiAvKiBDT05GSUdfUzVQQzEwMF9TRVRVUF9TREhDSSAqLwotCi0jZW5kaWYgLyogX19QTEFUX1MzQ19TREhDSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdWRjLWhzLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdWRjLWhzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRkMDRkYjAuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VkYy1ocy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyogYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VkYy1ocy5oCi0gKgotICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KLSAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogUzNDIFVTQjIuMCBIaWdoLXNwZWVkIC8gT3RHIHBsYXRmb3JtIGluZm9ybWF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLWVudW0gczNjX2hvc3RnX2RtYW1vZGUgewotCVMzQ19IU09UR19ETUFfTk9ORSwJLyogZG8gbm90IHVzZSBETUEgYXQtYWxsICovCi0JUzNDX0hTT1RHX0RNQV9PTkxZLAkvKiBhbHdheXMgdXNlIERNQSAqLwotCVMzQ19IU09UR19ETUFfRFJWLAkvKiBETUEgaXMgY2hvc2VuIGJ5IGRyaXZlciAqLwotfTsKLQotLyoqCi0gKiBzdHJ1Y3QgczNjX2hzb3RnX3BsYXQgLSBwbGF0Zm9ybSBkYXRhIGZvciBoaWdoLXNwZWVkIG90Zy91ZGMKLSAqIEBkbWE6IFdoZXRoZXIgdG8gdXNlIERNQSBvciBub3QuCi0gKiBAaXNfb3NjOiBUaGUgY2xvY2sgc291cmNlIGlzIGFuIG9zY2lsbGF0b3IsIG5vdCBhIGNyeXN0YWwKLSAqLwotc3RydWN0IHMzY19oc290Z19wbGF0IHsKLQllbnVtIHMzY19ob3N0Z19kbWFtb2RlCWRtYTsKLQl1bnNpZ25lZCBpbnQJCWlzX29zYyA6IDE7Ci19OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaCBiL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRjNjZhNDcuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDE4NiArMCwwIEBACi0vKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vcGxhdC1zM2MvdW5jb21wcmVzcy5oCi0gKgotICogQ29weXJpZ2h0IDIwMDMsIDIwMDcgU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoKLSAqIFMzQyAtIHVuY29tcHJlc3MgY29kZQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaWZuZGVmIF9fQVNNX1BMQVRfVU5DT01QUkVTU19ICi0jZGVmaW5lIF9fQVNNX1BMQVRfVU5DT01QUkVTU19ICi0KLXR5cGVkZWYgdW5zaWduZWQgaW50IHVwZl90OwkvKiBjYW5ub3QgaW5jbHVkZSBsaW51eC9zZXJpYWxfY29yZS5oICovCi0KLS8qIHVhcnQgc2V0dXAgKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCBmaWZvX21hc2s7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGZpZm9fbWF4OwotCi0vKiBmb3J3YXJkIGRlY2xlcmF0aW9ucyAqLwotCi1zdGF0aWMgdm9pZCBhcmNoX2RldGVjdF9jcHUodm9pZCk7Ci0KLS8qIGRlZmluZXMgZm9yIFVBUlQgcmVnaXN0ZXJzICovCi0KLSNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+Ci0jaW5jbHVkZSA8cGxhdC9yZWdzLXdhdGNoZG9nLmg+Ci0KLS8qIHdvcmtpbmcgaW4gcGh5c2ljYWwgc3BhY2UuLi4gKi8KLSN1bmRlZiBTM0MyNDEwX1dET0dSRUcKLSNkZWZpbmUgUzNDMjQxMF9XRE9HUkVHKHgpICgoUzNDMjRYWF9QQV9XQVRDSERPRyArICh4KSkpCi0KLS8qIGhvdyBtYW55IGJ5dGVzIHdlIGFsbG93IGludG8gdGhlIEZJRk8gYXQgYSB0aW1lIGluIEZJRk8gbW9kZSAqLwotI2RlZmluZSBGSUZPX01BWAkgKDE0KQotCi0jZGVmaW5lIHVhcnRfYmFzZSBTM0NfUEFfVUFSVCArIChTM0NfVUFSVF9PRkZTRVQgKiBDT05GSUdfUzNDX0xPV0xFVkVMX1VBUlRfUE9SVCkKLQotc3RhdGljIF9faW5saW5lX18gdm9pZAotdWFydF93cih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqcHRyOwotCi0JcHRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShyZWcgKyB1YXJ0X2Jhc2UpOwotCSpwdHIgPSB2YWw7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludAotdWFydF9yZCh1bnNpZ25lZCBpbnQgcmVnKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqcHRyOwotCi0JcHRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShyZWcgKyB1YXJ0X2Jhc2UpOwotCXJldHVybiAqcHRyOwotfQotCi0vKiB3ZSBjYW4gZGVhbCB3aXRoIHRoZSBjYXNlIHRoZSBVQVJUcyBhcmUgYmVpbmcgcnVuCi0gKiBpbiBGSUZPIG1vZGUsIHNvIHRoYXQgd2UgZG9uJ3QgaG9sZCB1cCBvdXIgZXhlY3V0aW9uCi0gKiB3YWl0aW5nIGZvciB0eCB0byBoYXBwZW4uLi4KLSovCi0KLXN0YXRpYyB2b2lkIHB1dGMoaW50IGNoKQotewotCWlmICh1YXJ0X3JkKFMzQzI0MTBfVUZDT04pICYgUzNDMjQxMF9VRkNPTl9GSUZPTU9ERSkgewotCQlpbnQgbGV2ZWw7Ci0KLQkJd2hpbGUgKDEpIHsKLQkJCWxldmVsID0gdWFydF9yZChTM0MyNDEwX1VGU1RBVCk7Ci0JCQlsZXZlbCAmPSBmaWZvX21hc2s7Ci0KLQkJCWlmIChsZXZlbCA8IGZpZm9fbWF4KQotCQkJCWJyZWFrOwotCQl9Ci0KLQl9IGVsc2UgewotCQkvKiBub3QgdXNpbmcgZmlmb3MgKi8KLQotCQl3aGlsZSAoKHVhcnRfcmQoUzNDMjQxMF9VVFJTVEFUKSAmIFMzQzI0MTBfVVRSU1RBVF9UWEUpICE9IFMzQzI0MTBfVVRSU1RBVF9UWEUpCi0JCQliYXJyaWVyKCk7Ci0JfQotCi0JLyogd3JpdGUgYnl0ZSB0byB0cmFuc21pc3Npb24gcmVnaXN0ZXIgKi8KLQl1YXJ0X3dyKFMzQzI0MTBfVVRYSCwgY2gpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2godm9pZCkKLXsKLX0KLQotI2RlZmluZSBfX3Jhd193cml0ZWwoZCwgYWQpCQkJXAotCWRvIHsJCQkJCQkJXAotCQkqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgX19mb3JjZSAqKShhZCkpID0gKGQpOyBcCi0JfSB3aGlsZSAoMCkKLQotLyogQ09ORklHX1MzQ19CT09UX1dBVENIRE9HCi0gKgotICogU2ltcGxlIGJvb3QtdGltZSB3YXRjaGRvZyBzZXR1cCwgdG8gcmVib290IHRoZSBzeXN0ZW0gaWYgdGhlcmUgaXMKLSAqIGFueSBwcm9ibGVtIHdpdGggdGhlIGJvb3QgcHJvY2VzcwotKi8KLQotI2lmZGVmIENPTkZJR19TM0NfQk9PVF9XQVRDSERPRwotCi0jZGVmaW5lIFdET0dfQ09VTlQgKDB4ZmYwMCkKLQotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZGVjb21wX3dkb2codm9pZCkKLXsKLQlfX3Jhd193cml0ZWwoV0RPR19DT1VOVCwgUzNDMjQxMF9XVENOVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFyY2hfZGVjb21wX3dkb2dfc3RhcnQodm9pZCkKLXsKLQlfX3Jhd193cml0ZWwoV0RPR19DT1VOVCwgUzNDMjQxMF9XVERBVCk7Ci0JX19yYXdfd3JpdGVsKFdET0dfQ09VTlQsIFMzQzI0MTBfV1RDTlQpOwotCV9fcmF3X3dyaXRlbChTM0MyNDEwX1dUQ09OX0VOQUJMRSB8IFMzQzI0MTBfV1RDT05fRElWMTI4IHwgUzNDMjQxMF9XVENPTl9SU1RFTiB8IFMzQzI0MTBfV1RDT05fUFJFU0NBTEUoMHg4MCksIFMzQzI0MTBfV1RDT04pOwotfQotCi0jZWxzZQotI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nX3N0YXJ0KCkKLSNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19TM0NfQk9PVF9FUlJPUl9SRVNFVAotCi1zdGF0aWMgdm9pZCBhcmNoX2RlY29tcF9lcnJvcihjb25zdCBjaGFyICp4KQotewotCXB1dHN0cigiXG5cbiIpOwotCXB1dHN0cih4KTsKLQlwdXRzdHIoIlxuXG4gLS0gU3lzdGVtIHJlc2V0dGluZ1xuIik7Ci0KLQlfX3Jhd193cml0ZWwoMHg0MDAwLCBTM0MyNDEwX1dUREFUKTsKLQlfX3Jhd193cml0ZWwoMHg0MDAwLCBTM0MyNDEwX1dUQ05UKTsKLQlfX3Jhd193cml0ZWwoUzNDMjQxMF9XVENPTl9FTkFCTEUgfCBTM0MyNDEwX1dUQ09OX0RJVjEyOCB8IFMzQzI0MTBfV1RDT05fUlNURU4gfCBTM0MyNDEwX1dUQ09OX1BSRVNDQUxFKDB4NDApLCBTM0MyNDEwX1dUQ09OKTsKLQotCXdoaWxlKDEpOwotfQotCi0jZGVmaW5lIGFyY2hfZXJyb3IgYXJjaF9kZWNvbXBfZXJyb3IKLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBlcnJvcihjaGFyICplcnIpOwotCi0jaWZkZWYgQ09ORklHX1MzQ19CT09UX1VBUlRfRk9SQ0VfRklGTwotc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZW5hYmxlX3VhcnRfZmlmbyh2b2lkKQotewotCXUzMiBmaWZvY29uID0gdWFydF9yZChTM0MyNDEwX1VGQ09OKTsKLQotCWlmICghKGZpZm9jb24gJiBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFKSkgewotCQlmaWZvY29uIHw9IFMzQzI0MTBfVUZDT05fUkVTRVRCT1RIOwotCQl1YXJ0X3dyKFMzQzI0MTBfVUZDT04sIGZpZm9jb24pOwotCi0JCS8qIHdhaXQgZm9yIGZpZm8gcmVzZXQgdG8gY29tcGxldGUgKi8KLQkJd2hpbGUgKDEpIHsKLQkJCWZpZm9jb24gPSB1YXJ0X3JkKFMzQzI0MTBfVUZDT04pOwotCQkJaWYgKCEoZmlmb2NvbiAmIFMzQzI0MTBfVUZDT05fUkVTRVRCT1RIKSkKLQkJCQlicmVhazsKLQkJfQotCX0KLX0KLSNlbHNlCi0jZGVmaW5lIGFyY2hfZW5hYmxlX3VhcnRfZmlmbygpIGRvIHsgfSB3aGlsZSgwKQotI2VuZGlmCi0KLQotc3RhdGljIHZvaWQKLWFyY2hfZGVjb21wX3NldHVwKHZvaWQpCi17Ci0JLyogd2UgbWF5IG5lZWQgdG8gc2V0dXAgdGhlIHVhcnQocykgaGVyZSBpZiB3ZSBhcmUgbm90IHJ1bm5pbmcKLQkgKiBvbiBhbiBCQVNULi4uIHRoZSBCQVNUIHdpbGwgaGF2ZSBsZWZ0IHRoZSB1YXJ0cyBjb25maWd1cmVkCi0JICogYWZ0ZXIgY2FsbGluZyBsaW51eC4KLQkgKi8KLQotCWFyY2hfZGV0ZWN0X2NwdSgpOwotCWFyY2hfZGVjb21wX3dkb2dfc3RhcnQoKTsKLQotCS8qIEVuYWJsZSB0aGUgVUFSVCBGSUZPcyBpZiB0aGV5IHdoZXJlIG5vdCBlbmFibGVkIGFuZCBvdXIKLQkgKiBjb25maWd1cmF0aW9uIHNheXMgd2Ugc2hvdWxkIHR1cm4gdGhlbSBvbi4KLQkgKi8KLQotCWFyY2hfZW5hYmxlX3VhcnRfZmlmbygpOwotfQotCi0KLSNlbmRpZiAvKiBfX0FTTV9QTEFUX1VOQ09NUFJFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VzYi1jb250cm9sLmggYi9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdXNiLWNvbnRyb2wuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODIyYzg3Zi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvdXNiLWNvbnRyb2wuaAorKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC91c2ItY29udHJvbC5oCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoKLSAqIFMzQyAtIFVTQiBob3N0IHBvcnQgaW5mb3JtYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX1VTQkNPTlRST0xfSAotI2RlZmluZSBfX0FTTV9BUkNIX1VTQkNPTlRST0xfSAotCi0jZGVmaW5lIFMzQ19IQ0RGTEdfVVNFRAkoMSkKLQotc3RydWN0IHMzYzI0MTBfaGNkX3BvcnQgewotCXVuc2lnbmVkIGNoYXIJZmxhZ3M7Ci0JdW5zaWduZWQgY2hhcglwb3dlcjsKLQl1bnNpZ25lZCBjaGFyCW9jX3N0YXR1czsKLQl1bnNpZ25lZCBjaGFyCW9jX2NoYW5nZWQ7Ci19OwotCi1zdHJ1Y3QgczNjMjQxMF9oY2RfaW5mbyB7Ci0Jc3RydWN0IHVzYl9oY2QJCSpoY2Q7Ci0Jc3RydWN0IHMzYzI0MTBfaGNkX3BvcnQJcG9ydFsyXTsKLQotCXZvaWQJCSgqcG93ZXJfY29udHJvbCkoaW50IHBvcnQsIGludCB0byk7Ci0Jdm9pZAkJKCplbmFibGVfb2MpKHN0cnVjdCBzM2MyNDEwX2hjZF9pbmZvICosIGludCBvbik7Ci0Jdm9pZAkJKCpyZXBvcnRfb2MpKHN0cnVjdCBzM2MyNDEwX2hjZF9pbmZvICosIGludCBwb3J0cyk7Ci19OwotCi1zdGF0aWMgdm9pZCBpbmxpbmUgczNjMjQxMF91c2JfcmVwb3J0X29jKHN0cnVjdCBzM2MyNDEwX2hjZF9pbmZvICppbmZvLCBpbnQgcG9ydHMpCi17Ci0JaWYgKGluZm8tPnJlcG9ydF9vYyAhPSBOVUxMKSB7Ci0JCShpbmZvLT5yZXBvcnRfb2MpKGluZm8sIHBvcnRzKTsKLQl9Ci19Ci0KLSNlbmRpZiAvKl9fQVNNX0FSQ0hfVVNCQ09OVFJPTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9wbS1jaGVjay5jIGIvYXJjaC9hcm0vcGxhdC1zM2MvcG0tY2hlY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGViMWY0My4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9wbS1jaGVjay5jCisrKyAvZGV2L251bGwKQEAgLTEsMjQyICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjL3BtLWNoZWNrLmMKLSAqICBvcmlnaW5hbGx5IGluIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wbS5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogUzNDIFBvd2VyIE1hbmdhbWVudCAtIHN1c3BlbmQvcmVzdW1lIG1lbW9yeSBjb3JydXB0aXVvbiBjaGVjay4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLQotI2luY2x1ZGUgPHBsYXQvcG0uaD4KLQotI2lmIENPTkZJR19TM0MyNDEwX1BNX0NIRUNLX0NIVU5LU0laRSA8IDEKLSNlcnJvciBDT05GSUdfUzNDMjQxMF9QTV9DSEVDS19DSFVOS1NJWkUgbXVzdCBiZSBhIHBvc2l0aXZlIG5vbi16ZXJvIHZhbHVlCi0jZW5kaWYKLQotLyogc3VzcGVuZCBjaGVja2luZyBjb2RlLi4uCi0gKgotICogdGhpcyBuZXh0IGFyZWEgZG9lcyBhIHNldCBvZiBjcmMgY2hlY2tzIG92ZXIgYWxsIHRoZSBpbnN0YWxsZWQKLSAqIG1lbW9yeSwgc28gdGhlIHN5c3RlbSBjYW4gdmVyaWZ5IGlmIHRoZSByZXN1bWUgd2FzIG9rLgotICoKLSAqIENPTkZJR19TM0MyNDEwX1BNX0NIRUNLX0NIVU5LU0laRSBkZWZpbmVzIHRoZSBibG9jay1zaXplIGZvciB0aGUgQ1JDLAotICogaW5jcmVhc2luZyBpdCB3aWxsIG1lYW4gdGhhdCB0aGUgYXJlYSBjb3JydXB0ZWQgd2lsbCBiZSBsZXNzIGVhc3kgdG8gc3BvdCwKLSAqIGFuZCByZWR1Y2luZyB0aGUgc2l6ZSB3aWxsIGNhdXNlIHRoZSBDUkMgc2F2ZSBhcmVhIHRvIGdyb3cKLSovCi0KLSNkZWZpbmUgQ0hFQ0tfQ0hVTktTSVpFIChDT05GSUdfUzNDMjQxMF9QTV9DSEVDS19DSFVOS1NJWkUgKiAxMDI0KQotCi1zdGF0aWMgdTMyIGNyY19zaXplOwkvKiBzaXplIG5lZWRlZCBmb3IgdGhlIGNyYyBibG9jayAqLwotc3RhdGljIHUzMiAqY3JjczsJLyogYWxsb2NhdGVkIG92ZXIgc3VzcGVuZC9yZXN1bWUgKi8KLQotdHlwZWRlZiB1MzIgKihydW5fZm5fdCkoc3RydWN0IHJlc291cmNlICpwdHIsIHUzMiAqYXJnKTsKLQotLyogczNjX3BtX3J1bl9yZXMKLSAqCi0gKiBnbyB0aHJvdWdoIHRoZSBnaXZlbiByZXNvdXJjZSBsaXN0LCBhbmQgbG9vayBmb3Igc3lzdGVtIHJhbQotKi8KLQotc3RhdGljIHZvaWQgczNjX3BtX3J1bl9yZXMoc3RydWN0IHJlc291cmNlICpwdHIsIHJ1bl9mbl90IGZuLCB1MzIgKmFyZykKLXsKLQl3aGlsZSAocHRyICE9IE5VTEwpIHsKLQkJaWYgKHB0ci0+Y2hpbGQgIT0gTlVMTCkKLQkJCXMzY19wbV9ydW5fcmVzKHB0ci0+Y2hpbGQsIGZuLCBhcmcpOwotCi0JCWlmICgocHRyLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSAmJgotCQkgICAgc3RyY21wKHB0ci0+bmFtZSwgIlN5c3RlbSBSQU0iKSA9PSAwKSB7Ci0JCQlTM0NfUE1EQkcoIkZvdW5kIHN5c3RlbSBSQU0gYXQgJTA4bHguLiUwOGx4XG4iLAotCQkJCSAgKHVuc2lnbmVkIGxvbmcpcHRyLT5zdGFydCwKLQkJCQkgICh1bnNpZ25lZCBsb25nKXB0ci0+ZW5kKTsKLQkJCWFyZyA9IChmbikocHRyLCBhcmcpOwotCQl9Ci0KLQkJcHRyID0gcHRyLT5zaWJsaW5nOwotCX0KLX0KLQotc3RhdGljIHZvaWQgczNjX3BtX3J1bl9zeXNyYW0ocnVuX2ZuX3QgZm4sIHUzMiAqYXJnKQotewotCXMzY19wbV9ydW5fcmVzKCZpb21lbV9yZXNvdXJjZSwgZm4sIGFyZyk7Ci19Ci0KLXN0YXRpYyB1MzIgKnMzY19wbV9jb3VudHJhbShzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyICp2YWwpCi17Ci0JdTMyIHNpemUgPSAodTMyKShyZXMtPmVuZCAtIHJlcy0+c3RhcnQpKzE7Ci0KLQlzaXplICs9IENIRUNLX0NIVU5LU0laRS0xOwotCXNpemUgLz0gQ0hFQ0tfQ0hVTktTSVpFOwotCi0JUzNDX1BNREJHKCJBcmVhICUwOGx4Li4lMDhseCwgJWQgYmxvY2tzXG4iLAotCQkgICh1bnNpZ25lZCBsb25nKXJlcy0+c3RhcnQsICh1bnNpZ25lZCBsb25nKXJlcy0+ZW5kLCBzaXplKTsKLQotCSp2YWwgKz0gc2l6ZSAqIHNpemVvZih1MzIpOwotCXJldHVybiB2YWw7Ci19Ci0KLS8qIHMzY19wbV9wcmVwYXJlX2NoZWNrCi0gKgotICogcHJlcGFyZSB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZvciBjcmVhdGluZyB0aGUgQ1JDcy4gVGhpcwotICogbXVzdCBiZSBkb25lIGJlZm9yZSB0aGUgZmluYWwgc2F2ZSwgYXMgaXQgd2lsbCByZXF1aXJlIG1lbW9yeQotICogYWxsb2NhdGluZywgYW5kIHRodXMgdG91Y2hpbmcgYml0cyBvZiB0aGUga2VybmVsIHdlIGRvIG5vdAotICoga25vdyBhYm91dC4KLSovCi0KLXZvaWQgczNjX3BtX2NoZWNrX3ByZXBhcmUodm9pZCkKLXsKLQljcmNfc2l6ZSA9IDA7Ci0KLQlzM2NfcG1fcnVuX3N5c3JhbShzM2NfcG1fY291bnRyYW0sICZjcmNfc2l6ZSk7Ci0KLQlTM0NfUE1EQkcoInMzY19wbV9wcmVwYXJlX2NoZWNrOiAldSBjaGVja3MgbmVlZGVkXG4iLCBjcmNfc2l6ZSk7Ci0KLQljcmNzID0ga21hbGxvYyhjcmNfc2l6ZSs0LCBHRlBfS0VSTkVMKTsKLQlpZiAoY3JjcyA9PSBOVUxMKQotCQlwcmludGsoS0VSTl9FUlIgIkNhbm5vdCBhbGxvY2F0ZWQgQ1JDIHNhdmUgYXJlYVxuIik7Ci19Ci0KLXN0YXRpYyB1MzIgKnMzY19wbV9tYWtlY2hlY2soc3RydWN0IHJlc291cmNlICpyZXMsIHUzMiAqdmFsKQotewotCXVuc2lnbmVkIGxvbmcgYWRkciwgbGVmdDsKLQotCWZvciAoYWRkciA9IHJlcy0+c3RhcnQ7IGFkZHIgPCByZXMtPmVuZDsKLQkgICAgIGFkZHIgKz0gQ0hFQ0tfQ0hVTktTSVpFKSB7Ci0JCWxlZnQgPSByZXMtPmVuZCAtIGFkZHI7Ci0KLQkJaWYgKGxlZnQgPiBDSEVDS19DSFVOS1NJWkUpCi0JCQlsZWZ0ID0gQ0hFQ0tfQ0hVTktTSVpFOwotCi0JCSp2YWwgPSBjcmMzMl9sZSh+MCwgcGh5c190b192aXJ0KGFkZHIpLCBsZWZ0KTsKLQkJdmFsKys7Ci0JfQotCi0JcmV0dXJuIHZhbDsKLX0KLQotLyogczNjX3BtX2NoZWNrX3N0b3JlCi0gKgotICogY29tcHV0ZSB0aGUgQ1JDIHZhbHVlcyBmb3IgdGhlIG1lbW9yeSBibG9ja3MgYmVmb3JlIHRoZSBmaW5hbAotICogc2xlZXAuCi0qLwotCi12b2lkIHMzY19wbV9jaGVja19zdG9yZSh2b2lkKQotewotCWlmIChjcmNzICE9IE5VTEwpCi0JCXMzY19wbV9ydW5fc3lzcmFtKHMzY19wbV9tYWtlY2hlY2ssIGNyY3MpOwotfQotCi0vKiBpbl9yZWdpb24KLSAqCi0gKiByZXR1cm4gVFJVRSBpZiB0aGUgYXJlYSBkZWZpbmVkIGJ5IHB0ci4ucHRyK3NpemUgY29udGFpbnMgdGhlCi0gKiB3aGF0Li53aGF0K3doYXRzegotKi8KLQotc3RhdGljIGlubGluZSBpbnQgaW5fcmVnaW9uKHZvaWQgKnB0ciwgaW50IHNpemUsIHZvaWQgKndoYXQsIHNpemVfdCB3aGF0c3opCi17Ci0JaWYgKCh3aGF0K3doYXRzeikgPCBwdHIpCi0JCXJldHVybiAwOwotCi0JaWYgKHdoYXQgPiAocHRyK3NpemUpKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiAxOwotfQotCi0vKioKLSAqIHMzY19wbV9ydW5jaGVjaygpIC0gaGVscGVyIHRvIGNoZWNrIGEgcmVzb3VyY2Ugb24gcmVzdG9yZS4KLSAqIEByZXM6IFRoZSByZXNvdXJjZSB0byBjaGVjawotICogQHZhazogUG9pbnRlciB0byBsaXN0IG9mIENSQzMyIHZhbHVlcyB0byBjaGVjay4KLSAqCi0gKiBDYWxsZWQgZnJvbSB0aGUgczNjX3BtX2NoZWNrX3Jlc3RvcmUoKSB2aWEgczNjX3BtX3J1bl9zeXNyYW0oKSwgdGhpcwotICogZnVuY3Rpb24gcnVucyB0aGUgZ2l2ZW4gbWVtb3J5IHJlc291cmNlIGNoZWNraW5nIGl0IGFnYWluc3QgdGhlIHN0b3JlZAotICogQ1JDIHRvIGVuc3VyZSB0aGF0IG1lbW9yeSBpcyByZXN0b3JlZC4gVGhlIGZ1bmN0aW9uIHRyaWVzIHRvIHNraXAgYXMKLSAqIG1hbnkgb2YgdGhlIGFyZWFzIHVzZWQgZHVyaW5nIHRoZSBzdXNwZW5kIHByb2Nlc3MuCi0gKi8KLXN0YXRpYyB1MzIgKnMzY19wbV9ydW5jaGVjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyICp2YWwpCi17Ci0Jdm9pZCAqc2F2ZV9hdCA9IHBoeXNfdG9fdmlydChzM2Nfc2xlZXBfc2F2ZV9waHlzKTsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JdW5zaWduZWQgbG9uZyBsZWZ0OwotCXZvaWQgKnN0a3BhZ2U7Ci0Jdm9pZCAqcHRyOwotCXUzMiBjYWxjOwotCi0Jc3RrcGFnZSA9ICh2b2lkICopKCh1MzIpJmNhbGMgJiB+UEFHRV9NQVNLKTsKLQotCWZvciAoYWRkciA9IHJlcy0+c3RhcnQ7IGFkZHIgPCByZXMtPmVuZDsKLQkgICAgIGFkZHIgKz0gQ0hFQ0tfQ0hVTktTSVpFKSB7Ci0JCWxlZnQgPSByZXMtPmVuZCAtIGFkZHI7Ci0KLQkJaWYgKGxlZnQgPiBDSEVDS19DSFVOS1NJWkUpCi0JCQlsZWZ0ID0gQ0hFQ0tfQ0hVTktTSVpFOwotCi0JCXB0ciA9IHBoeXNfdG9fdmlydChhZGRyKTsKLQotCQlpZiAoaW5fcmVnaW9uKHB0ciwgbGVmdCwgc3RrcGFnZSwgNDA5NikpIHsKLQkJCVMzQ19QTURCRygic2tpcHBpbmcgJTA4bHgsIGhhcyBzdGFjayBpblxuIiwgYWRkcik7Ci0JCQlnb3RvIHNraXBfY2hlY2s7Ci0JCX0KLQotCQlpZiAoaW5fcmVnaW9uKHB0ciwgbGVmdCwgY3JjcywgY3JjX3NpemUpKSB7Ci0JCQlTM0NfUE1EQkcoInNraXBwaW5nICUwOGx4LCBoYXMgY3JjIGJsb2NrIGluXG4iLCBhZGRyKTsKLQkJCWdvdG8gc2tpcF9jaGVjazsKLQkJfQotCi0JCWlmIChpbl9yZWdpb24ocHRyLCBsZWZ0LCBzYXZlX2F0LCAzMio0ICkpIHsKLQkJCVMzQ19QTURCRygic2tpcHBpbmcgJTA4bHgsIGhhcyBzYXZlIGJsb2NrIGluXG4iLCBhZGRyKTsKLQkJCWdvdG8gc2tpcF9jaGVjazsKLQkJfQotCi0JCS8qIGNhbGN1bGF0ZSBhbmQgY2hlY2sgdGhlIGNoZWNrc3VtICovCi0KLQkJY2FsYyA9IGNyYzMyX2xlKH4wLCBwdHIsIGxlZnQpOwotCQlpZiAoY2FsYyAhPSAqdmFsKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIlJlc3RvcmUgQ1JDIGVycm9yIGF0ICIKLQkJCSAgICAgICAiJTA4bHggKCUwOHggdnMgJTA4eClcbiIsIGFkZHIsIGNhbGMsICp2YWwpOwotCi0JCQlTM0NfUE1EQkcoIlJlc3RvcmUgQ1JDIGVycm9yIGF0ICUwOGx4ICglMDh4IHZzICUwOHgpXG4iLAotCQkJICAgIGFkZHIsIGNhbGMsICp2YWwpOwotCQl9Ci0KLQlza2lwX2NoZWNrOgotCQl2YWwrKzsKLQl9Ci0KLQlyZXR1cm4gdmFsOwotfQotCi0vKioKLSAqIHMzY19wbV9jaGVja19yZXN0b3JlKCkgLSBtZW1vcnkgY2hlY2sgY2FsbGVkIG9uIHJlc3VtZQotICoKLSAqIGNoZWNrIHRoZSBDUkNzIGFmdGVyIHRoZSByZXN0b3JlIGV2ZW50IGFuZCBmcmVlIHRoZSBtZW1vcnkgdXNlZAotICogdG8gaG9sZCB0aGVtCi0qLwotdm9pZCBzM2NfcG1fY2hlY2tfcmVzdG9yZSh2b2lkKQotewotCWlmIChjcmNzICE9IE5VTEwpCi0JCXMzY19wbV9ydW5fc3lzcmFtKHMzY19wbV9ydW5jaGVjaywgY3Jjcyk7Ci19Ci0KLS8qKgotICogczNjX3BtX2NoZWNrX2NsZWFudXAoKSAtIGZyZWUgbWVtb3J5IHJlc291cmNlcwotICoKLSAqIEZyZWUgdGhlIHJlc291cmNlcyB0aGF0IHdoZXJlIGFsbG9jYXRlZCBieSB0aGUgc3VzcGVuZAotICogbWVtb3J5IGNoZWNrIGNvZGUuIFdlIGRvIHRoaXMgc2VwYXJhdGVseSBmcm9tIHRoZQotICogczNjX3BtX2NoZWNrX3Jlc3RvcmUoKSBmdW5jdGlvbiBhcyB3ZSBjYW5ub3QgY2FsbCBhbnkKLSAqIGZ1bmN0aW9ucyB0aGF0IG1pZ2h0IHNsZWVwIGR1cmluZyB0aGF0IHJlc3VtZS4KLSAqLwotdm9pZCBzM2NfcG1fY2hlY2tfY2xlYW51cCh2b2lkKQotewotCWtmcmVlKGNyY3MpOwotCWNyY3MgPSBOVUxMOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9wbS1ncGlvLmMgYi9hcmNoL2FybS9wbGF0LXMzYy9wbS1ncGlvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmZDMyNmEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MvcG0tZ3Bpby5jCisrKyAvZGV2L251bGwKQEAgLTEsMzgwICswLDAgQEAKLQotLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvcG0tZ3Bpby5jCi0gKgotICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KLSAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBTM0Mgc2VyaWVzIEdQSU8gUE0gY29kZQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvZ3Bpby5oPgotCi0jaW5jbHVkZSA8bWFjaC9ncGlvLWNvcmUuaD4KLSNpbmNsdWRlIDxwbGF0L3BtLmg+Ci0KLS8qIFBNIEdQSU8gaGVscGVycyAqLwotCi0jZGVmaW5lIE9GRlNfQ09OCSgweDAwKQotI2RlZmluZSBPRkZTX0RBVAkoMHgwNCkKLSNkZWZpbmUgT0ZGU19VUAkJKDB4MDgpCi0KLXN0YXRpYyB2b2lkIHMzY19ncGlvX3BtXzFiaXRfc2F2ZShzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCkKLXsKLQljaGlwLT5wbV9zYXZlWzBdID0gX19yYXdfcmVhZGwoY2hpcC0+YmFzZSArIE9GRlNfQ09OKTsKLQljaGlwLT5wbV9zYXZlWzFdID0gX19yYXdfcmVhZGwoY2hpcC0+YmFzZSArIE9GRlNfREFUKTsKLX0KLQotc3RhdGljIHZvaWQgczNjX2dwaW9fcG1fMWJpdF9yZXN1bWUoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXApCi17Ci0Jdm9pZCBfX2lvbWVtICpiYXNlID0gY2hpcC0+YmFzZTsKLQl1MzIgb2xkX2dwY29uID0gX19yYXdfcmVhZGwoYmFzZSArIE9GRlNfQ09OKTsKLQl1MzIgb2xkX2dwZGF0ID0gX19yYXdfcmVhZGwoYmFzZSArIE9GRlNfREFUKTsKLQl1MzIgZ3BzX2dwY29uID0gY2hpcC0+cG1fc2F2ZVswXTsKLQl1MzIgZ3BzX2dwZGF0ID0gY2hpcC0+cG1fc2F2ZVsxXTsKLQl1MzIgZ3Bjb247Ci0KLQkvKiBHUEFDT04gb25seSBoYXMgb25lIGJpdCBwZXIgY29udHJvbCAvIGRhdGEgYW5kIG5vIFBVTExVUHMuCi0JICogR1BBQ09OW3hdID0gMCA9PiBPdXRwdXQsIDEgPT4gU0ZOICovCi0KLQkvKiBmaXJzdCBzZXQgYWxsIFNGTiBiaXRzIHRvIFNGTiAqLwotCi0JZ3Bjb24gPSBvbGRfZ3Bjb24gfCBncHNfZ3Bjb247Ci0JX19yYXdfd3JpdGVsKGdwY29uLCBiYXNlICsgT0ZGU19DT04pOwotCi0JLyogbm93IHNldCBhbGwgdGhlIG90aGVyIGJpdHMgKi8KLQotCV9fcmF3X3dyaXRlbChncHNfZ3BkYXQsIGJhc2UgKyBPRkZTX0RBVCk7Ci0JX19yYXdfd3JpdGVsKGdwc19ncGNvbiwgYmFzZSArIE9GRlNfQ09OKTsKLQotCVMzQ19QTURCRygiJXM6IENPTiAlMDh4ID0+ICUwOHgsIERBVCAlMDh4ID0+ICUwOHhcbiIsCi0JCSAgY2hpcC0+Y2hpcC5sYWJlbCwgb2xkX2dwY29uLCBncHNfZ3Bjb24sIG9sZF9ncGRhdCwgZ3BzX2dwZGF0KTsKLX0KLQotc3RydWN0IHMzY19ncGlvX3BtIHMzY19ncGlvX3BtXzFiaXQgPSB7Ci0JLnNhdmUJPSBzM2NfZ3Bpb19wbV8xYml0X3NhdmUsCi0JLnJlc3VtZSA9IHMzY19ncGlvX3BtXzFiaXRfcmVzdW1lLAotfTsKLQotc3RhdGljIHZvaWQgczNjX2dwaW9fcG1fMmJpdF9zYXZlKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwKQotewotCWNoaXAtPnBtX3NhdmVbMF0gPSBfX3Jhd19yZWFkbChjaGlwLT5iYXNlICsgT0ZGU19DT04pOwotCWNoaXAtPnBtX3NhdmVbMV0gPSBfX3Jhd19yZWFkbChjaGlwLT5iYXNlICsgT0ZGU19EQVQpOwotCWNoaXAtPnBtX3NhdmVbMl0gPSBfX3Jhd19yZWFkbChjaGlwLT5iYXNlICsgT0ZGU19VUCk7Ci19Ci0KLS8qIFRlc3Qgd2hldGhlciB0aGUgZ2l2ZW4gbWFza2VkK3NoaWZ0ZWQgYml0cyBvZiBhbiBHUElPIGNvbmZpZ3VyYXRpb24KLSAqIGFyZSBvbmUgb2YgdGhlIFNGTiAoc3BlY2lhbCBmdW5jdGlvbikgbW9kZXMuICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX3Nmbih1bnNpZ25lZCBsb25nIGNvbikKLXsKLQlyZXR1cm4gY29uID49IDI7Ci19Ci0KLS8qIFRlc3QgaWYgdGhlIGdpdmVuIG1hc2tlZCtzaGlmdGVkIEdQSU8gY29uZmlndXJhdGlvbiBpcyBhbiBpbnB1dCAqLwotCi1zdGF0aWMgaW5saW5lIGludCBpc19pbih1bnNpZ25lZCBsb25nIGNvbikKLXsKLQlyZXR1cm4gY29uID09IDA7Ci19Ci0KLS8qIFRlc3QgaWYgdGhlIGdpdmVuIG1hc2tlZCtzaGlmdGVkIEdQSU8gY29uZmlndXJhdGlvbiBpcyBhbiBvdXRwdXQgKi8KLQotc3RhdGljIGlubGluZSBpbnQgaXNfb3V0KHVuc2lnbmVkIGxvbmcgY29uKQotewotCXJldHVybiBjb24gPT0gMTsKLX0KLQotLyoqCi0gKiBzM2NfZ3Bpb19wbV8yYml0X3Jlc3VtZSgpIC0gcmVzdG9yZSB0aGUgZ2l2ZW4gR1BJTyBiYW5rCi0gKiBAY2hpcDogVGhlIGNoaXAgaW5mb3JtYXRpb24gdG8gcmVzdW1lLgotICoKLSAqIFJlc3RvcmUgb25lIG9mIHRoZSBHUElPIGJhbmtzIHRoYXQgd2FzIHNhdmVkIGR1cmluZyBzdXNwZW5kLiBUaGlzIGlzCi0gKiBub3QgYXMgc2ltcGxlIGFzIG9uY2UgdGhvdWdodCwgZHVlIHRvIHRoZSBwb3NzaWJpbGl0eSBvZiBnbGl0Y2hlcwotICogZnJvbSB0aGUgb3JkZXIgdGhhdCB0aGUgQ09OIGFuZCBEQVQgcmVnaXN0ZXJzIGFyZSBzZXQgaW4uCi0gKgotICogVGhlIHRocmVlIHN0YXRlcyB0aGUgcGluIGNhbiBiZSBhcmUge0lOLE9VVCxTRk59IHdoaWNoIGdpdmVzIHVzIDkKLSAqIGNvbWJpbmF0aW9ucyBvZiBjaGFuZ2VzIHRvIGNoZWNrLiBUaHJlZSBvZiB0aGVzZSwgaWYgdGhlIHBpbiBzdGF5cwotICogaW4gdGhlIHNhbWUgY29uZmlndXJhdGlvbiBjYW4gYmUgZGlzY291bnRlZC4gVGhpcyBsZWF2ZXMgdXMgd2l0aAotICogdGhlIGZvbGxvd2luZzoKLSAqCi0gKiB7IElOID0+IE9VVCB9ICBDaGFuZ2UgREFUIGZpcnN0Ci0gKiB7IElOID0+IFNGTiB9ICBDaGFuZ2UgQ09OIGZpcnN0Ci0gKiB7IE9VVCA9PiBTRk4gfSBDaGFuZ2UgQ09OIGZpcnN0LCBzbyBuZXcgZGF0YSB3aWxsIG5vdCBnbGl0Y2gKLSAqIHsgT1VUID0+IElOIH0gIENoYW5nZSBDT04gZmlyc3QsIHNvIG5ldyBkYXRhIHdpbGwgbm90IGdsaXRjaAotICogeyBTRk4gPT4gSU4gfSAgQ2hhbmdlIENPTiBmaXJzdAotICogeyBTRk4gPT4gT1VUIH0gQ2hhbmdlIERBVCBmaXJzdCwgc28gbmV3IGRhdGEgd2lsbCBub3QgZ2xpdGNoIFsxXQotICoKLSAqIFdlIGRvIG5vdCBjdXJyZW50bHkgZGVhbCB3aXRoIHRoZSBVUCByZWdpc3RlcnMgYXMgdGhlc2UgY29udHJvbAotICogd2VhayByZXNpc3RvcnMsIHNvIGEgc21hbGwgZGVsYXkgaW4gY2hhbmdlIHNob3VsZCBub3QgbmVlZCB0byBicmluZwotICogdGhlc2UgaW50byB0aGUgY2FsY3VsYXRpb25zLgotICoKLSAqIFsxXSB0aGlzIGFzc3VtZXMgdGhhdCB3cml0aW5nIHRvIGEgcGluIERBVCB3aGlsc3QgaW4gU0ZOIHdpbGwgc2V0IHRoZQotICogICAgIHN0YXRlIGZvciB3aGVuIGl0IGlzIG5leHQgb3V0cHV0LgotICovCi1zdGF0aWMgdm9pZCBzM2NfZ3Bpb19wbV8yYml0X3Jlc3VtZShzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCkKLXsKLQl2b2lkIF9faW9tZW0gKmJhc2UgPSBjaGlwLT5iYXNlOwotCXUzMiBvbGRfZ3Bjb24gPSBfX3Jhd19yZWFkbChiYXNlICsgT0ZGU19DT04pOwotCXUzMiBvbGRfZ3BkYXQgPSBfX3Jhd19yZWFkbChiYXNlICsgT0ZGU19EQVQpOwotCXUzMiBncHNfZ3Bjb24gPSBjaGlwLT5wbV9zYXZlWzBdOwotCXUzMiBncHNfZ3BkYXQgPSBjaGlwLT5wbV9zYXZlWzFdOwotCXUzMiBncGNvbiwgb2xkLCBuZXcsIG1hc2s7Ci0JdTMyIGNoYW5nZV9tYXNrID0gMHgwOwotCWludCBucjsKLQotCS8qIHJlc3RvcmUgR1BJTyBwdWxsLXVwIHNldHRpbmdzICovCi0JX19yYXdfd3JpdGVsKGNoaXAtPnBtX3NhdmVbMl0sIGJhc2UgKyBPRkZTX1VQKTsKLQotCS8qIENyZWF0ZSBhIGNoYW5nZV9tYXNrIG9mIGFsbCB0aGUgaXRlbXMgdGhhdCBuZWVkIHRvIGhhdmUKLQkgKiB0aGVpciBDT04gdmFsdWUgY2hhbmdlZCBiZWZvcmUgdGhlaXIgREFUIHZhbHVlLCBzbyB0aGF0Ci0JICogd2UgbWluaW1pc2UgdGhlIHdvcmsgYmV0d2VlbiB0aGUgdHdvIHNldHRpbmdzLgotCSAqLwotCi0JZm9yIChuciA9IDAsIG1hc2sgPSAweDAzOyBuciA8IDMyOyBuciArPSAyLCBtYXNrIDw8PSAyKSB7Ci0JCW9sZCA9IChvbGRfZ3Bjb24gJiBtYXNrKSA+PiBucjsKLQkJbmV3ID0gKGdwc19ncGNvbiAmIG1hc2spID4+IG5yOwotCi0JCS8qIElmIHRoZXJlIGlzIG5vIGNoYW5nZSwgdGhlbiBza2lwICovCi0KLQkJaWYgKG9sZCA9PSBuZXcpCi0JCQljb250aW51ZTsKLQotCQkvKiBJZiBib3RoIGFyZSBzcGVjaWFsIGZ1bmN0aW9uLCB0aGVuIHNraXAgKi8KLQotCQlpZiAoaXNfc2ZuKG9sZCkgJiYgaXNfc2ZuKG5ldykpCi0JCQljb250aW51ZTsKLQotCQkvKiBDaGFuZ2UgaXMgSU4gPT4gT1VULCBkbyBub3QgY2hhbmdlIG5vdyAqLwotCi0JCWlmIChpc19pbihvbGQpICYmIGlzX291dChuZXcpKQotCQkJY29udGludWU7Ci0KLQkJLyogQ2hhbmdlIGlzIFNGTiA9PiBPVVQsIGRvIG5vdCBjaGFuZ2Ugbm93ICovCi0KLQkJaWYgKGlzX3NmbihvbGQpICYmIGlzX291dChuZXcpKQotCQkJY29udGludWU7Ci0KLQkJLyogV2Ugc2hvdWxkIG5vdyBiZSBhdCB0aGUgY2FzZSBvZiBJTj0+U0ZOLAotCQkgKiBPVVQ9PlNGTiwgT1VUPT5JTiwgU0ZOPT5JTi4gKi8KLQotCQljaGFuZ2VfbWFzayB8PSBtYXNrOwotCX0KLQotCi0JLyogV3JpdGUgdGhlIG5ldyBDT04gc2V0dGluZ3MgKi8KLQotCWdwY29uID0gb2xkX2dwY29uICYgfmNoYW5nZV9tYXNrOwotCWdwY29uIHw9IGdwc19ncGNvbiAmIGNoYW5nZV9tYXNrOwotCi0JX19yYXdfd3JpdGVsKGdwY29uLCBiYXNlICsgT0ZGU19DT04pOwotCi0JLyogTm93IGNoYW5nZSBhbnkgaXRlbXMgdGhhdCByZXF1aXJlIERBVCxDT04gKi8KLQotCV9fcmF3X3dyaXRlbChncHNfZ3BkYXQsIGJhc2UgKyBPRkZTX0RBVCk7Ci0JX19yYXdfd3JpdGVsKGdwc19ncGNvbiwgYmFzZSArIE9GRlNfQ09OKTsKLQotCVMzQ19QTURCRygiJXM6IENPTiAlMDh4ID0+ICUwOHgsIERBVCAlMDh4ID0+ICUwOHhcbiIsCi0JCSAgY2hpcC0+Y2hpcC5sYWJlbCwgb2xkX2dwY29uLCBncHNfZ3Bjb24sIG9sZF9ncGRhdCwgZ3BzX2dwZGF0KTsKLX0KLQotc3RydWN0IHMzY19ncGlvX3BtIHMzY19ncGlvX3BtXzJiaXQgPSB7Ci0JLnNhdmUJPSBzM2NfZ3Bpb19wbV8yYml0X3NhdmUsCi0JLnJlc3VtZSA9IHMzY19ncGlvX3BtXzJiaXRfcmVzdW1lLAotfTsKLQotI2lmZGVmIENPTkZJR19BUkNIX1MzQzY0WFgKLXN0YXRpYyB2b2lkIHMzY19ncGlvX3BtXzRiaXRfc2F2ZShzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCkKLXsKLQljaGlwLT5wbV9zYXZlWzFdID0gX19yYXdfcmVhZGwoY2hpcC0+YmFzZSArIE9GRlNfQ09OKTsKLQljaGlwLT5wbV9zYXZlWzJdID0gX19yYXdfcmVhZGwoY2hpcC0+YmFzZSArIE9GRlNfREFUKTsKLQljaGlwLT5wbV9zYXZlWzNdID0gX19yYXdfcmVhZGwoY2hpcC0+YmFzZSArIE9GRlNfVVApOwotCi0JaWYgKGNoaXAtPmNoaXAubmdwaW8gPiA4KQotCQljaGlwLT5wbV9zYXZlWzBdID0gX19yYXdfcmVhZGwoY2hpcC0+YmFzZSAtIDQpOwotfQotCi1zdGF0aWMgdTMyIHMzY19ncGlvX3BtXzRiaXRfbWFzayh1MzIgb2xkX2dwY29uLCB1MzIgZ3BzX2dwY29uKQotewotCXUzMiBvbGQsIG5ldywgbWFzazsKLQl1MzIgY2hhbmdlX21hc2sgPSAweDA7Ci0JaW50IG5yOwotCi0JZm9yIChuciA9IDAsIG1hc2sgPSAweDBmOyBuciA8IDE2OyBuciArPSA0LCBtYXNrIDw8PSA0KSB7Ci0JCW9sZCA9IChvbGRfZ3Bjb24gJiBtYXNrKSA+PiBucjsKLQkJbmV3ID0gKGdwc19ncGNvbiAmIG1hc2spID4+IG5yOwotCi0JCS8qIElmIHRoZXJlIGlzIG5vIGNoYW5nZSwgdGhlbiBza2lwICovCi0KLQkJaWYgKG9sZCA9PSBuZXcpCi0JCQljb250aW51ZTsKLQotCQkvKiBJZiBib3RoIGFyZSBzcGVjaWFsIGZ1bmN0aW9uLCB0aGVuIHNraXAgKi8KLQotCQlpZiAoaXNfc2ZuKG9sZCkgJiYgaXNfc2ZuKG5ldykpCi0JCQljb250aW51ZTsKLQotCQkvKiBDaGFuZ2UgaXMgSU4gPT4gT1VULCBkbyBub3QgY2hhbmdlIG5vdyAqLwotCi0JCWlmIChpc19pbihvbGQpICYmIGlzX291dChuZXcpKQotCQkJY29udGludWU7Ci0KLQkJLyogQ2hhbmdlIGlzIFNGTiA9PiBPVVQsIGRvIG5vdCBjaGFuZ2Ugbm93ICovCi0KLQkJaWYgKGlzX3NmbihvbGQpICYmIGlzX291dChuZXcpKQotCQkJY29udGludWU7Ci0KLQkJLyogV2Ugc2hvdWxkIG5vdyBiZSBhdCB0aGUgY2FzZSBvZiBJTj0+U0ZOLAotCQkgKiBPVVQ9PlNGTiwgT1VUPT5JTiwgU0ZOPT5JTi4gKi8KLQotCQljaGFuZ2VfbWFzayB8PSBtYXNrOwotCX0KLQotCXJldHVybiBjaGFuZ2VfbWFzazsKLX0KLQotc3RhdGljIHZvaWQgczNjX2dwaW9fcG1fNGJpdF9jb24oc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsIGludCBpbmRleCkKLXsKLQl2b2lkIF9faW9tZW0gKmNvbiA9IGNoaXAtPmJhc2UgKyAoaW5kZXggKiA0KTsKLQl1MzIgb2xkX2dwY29uID0gX19yYXdfcmVhZGwoY29uKTsKLQl1MzIgZ3BzX2dwY29uID0gY2hpcC0+cG1fc2F2ZVtpbmRleCArIDFdOwotCXUzMiBncGNvbiwgbWFzazsKLQotCW1hc2sgPSBzM2NfZ3Bpb19wbV80Yml0X21hc2sob2xkX2dwY29uLCBncHNfZ3Bjb24pOwotCi0JZ3Bjb24gPSBvbGRfZ3Bjb24gJiB+bWFzazsKLQlncGNvbiB8PSBncHNfZ3Bjb24gJiBtYXNrOwotCi0JX19yYXdfd3JpdGVsKGdwY29uLCBjb24pOwotfQotCi1zdGF0aWMgdm9pZCBzM2NfZ3Bpb19wbV80Yml0X3Jlc3VtZShzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCkKLXsKLQl2b2lkIF9faW9tZW0gKmJhc2UgPSBjaGlwLT5iYXNlOwotCXUzMiBvbGRfZ3Bjb25bMl07Ci0JdTMyIG9sZF9ncGRhdCA9IF9fcmF3X3JlYWRsKGJhc2UgKyBPRkZTX0RBVCk7Ci0JdTMyIGdwc19ncGRhdCA9IGNoaXAtPnBtX3NhdmVbMl07Ci0KLQkvKiBGaXJzdCwgbW9kaWZ5IHRoZSBDT04gc2V0dGluZ3MgKi8KLQotCW9sZF9ncGNvblswXSA9IDA7Ci0Jb2xkX2dwY29uWzFdID0gX19yYXdfcmVhZGwoYmFzZSArIE9GRlNfQ09OKTsKLQotCXMzY19ncGlvX3BtXzRiaXRfY29uKGNoaXAsIDApOwotCWlmIChjaGlwLT5jaGlwLm5ncGlvID4gOCkgewotCQlvbGRfZ3Bjb25bMF0gPSBfX3Jhd19yZWFkbChiYXNlIC0gNCk7Ci0JCXMzY19ncGlvX3BtXzRiaXRfY29uKGNoaXAsIC0xKTsKLQl9Ci0KLQkvKiBOb3cgY2hhbmdlIHRoZSBjb25maWd1cmF0aW9ucyB0aGF0IHJlcXVpcmUgREFULENPTiAqLwotCi0JX19yYXdfd3JpdGVsKGNoaXAtPnBtX3NhdmVbMl0sIGJhc2UgKyBPRkZTX0RBVCk7Ci0JX19yYXdfd3JpdGVsKGNoaXAtPnBtX3NhdmVbMV0sIGJhc2UgKyBPRkZTX0NPTik7Ci0JaWYgKGNoaXAtPmNoaXAubmdwaW8gPiA4KQotCQlfX3Jhd193cml0ZWwoY2hpcC0+cG1fc2F2ZVswXSwgYmFzZSAtIDQpOwotCi0JX19yYXdfd3JpdGVsKGNoaXAtPnBtX3NhdmVbMl0sIGJhc2UgKyBPRkZTX0RBVCk7Ci0JX19yYXdfd3JpdGVsKGNoaXAtPnBtX3NhdmVbM10sIGJhc2UgKyBPRkZTX1VQKTsKLQotCWlmIChjaGlwLT5jaGlwLm5ncGlvID4gOCkgewotCQlTM0NfUE1EQkcoIiVzOiBDT040ICUwOHgsJTA4eCA9PiAlMDh4LCUwOHgsIERBVCAlMDh4ID0+ICUwOHhcbiIsCi0JCQkgIGNoaXAtPmNoaXAubGFiZWwsIG9sZF9ncGNvblswXSwgb2xkX2dwY29uWzFdLAotCQkJICBfX3Jhd19yZWFkbChiYXNlIC0gNCksCi0JCQkgIF9fcmF3X3JlYWRsKGJhc2UgKyBPRkZTX0NPTiksCi0JCQkgIG9sZF9ncGRhdCwgZ3BzX2dwZGF0KTsKLQl9IGVsc2UKLQkJUzNDX1BNREJHKCIlczogQ09ONCAlMDh4ID0+ICUwOHgsIERBVCAlMDh4ID0+ICUwOHhcbiIsCi0JCQkgIGNoaXAtPmNoaXAubGFiZWwsIG9sZF9ncGNvblsxXSwKLQkJCSAgX19yYXdfcmVhZGwoYmFzZSArIE9GRlNfQ09OKSwKLQkJCSAgb2xkX2dwZGF0LCBncHNfZ3BkYXQpOwotfQotCi1zdHJ1Y3QgczNjX2dwaW9fcG0gczNjX2dwaW9fcG1fNGJpdCA9IHsKLQkuc2F2ZQk9IHMzY19ncGlvX3BtXzRiaXRfc2F2ZSwKLQkucmVzdW1lID0gczNjX2dwaW9fcG1fNGJpdF9yZXN1bWUsCi19OwotI2VuZGlmIC8qIENPTkZJR19BUkNIX1MzQzY0WFggKi8KLQotLyoqCi0gKiBzM2NfcG1fc2F2ZV9ncGlvKCkgLSBzYXZlIGdwaW8gY2hpcCBkYXRhIGZvciBzdXNwZW5kCi0gKiBAb3VyY2hpcDogVGhlIGNoaXAgZm9yIHN1c3BlbmQuCi0gKi8KLXN0YXRpYyB2b2lkIHMzY19wbV9zYXZlX2dwaW8oc3RydWN0IHMzY19ncGlvX2NoaXAgKm91cmNoaXApCi17Ci0Jc3RydWN0IHMzY19ncGlvX3BtICpwbSA9IG91cmNoaXAtPnBtOwotCi0JaWYgKHBtID09IE5VTEwgfHwgcG0tPnNhdmUgPT0gTlVMTCkKLQkJUzNDX1BNREJHKCIlczogbm8gcG0gZm9yICVzXG4iLCBfX2Z1bmNfXywgb3VyY2hpcC0+Y2hpcC5sYWJlbCk7Ci0JZWxzZQotCQlwbS0+c2F2ZShvdXJjaGlwKTsKLX0KLQotLyoqCi0gKiBzM2NfcG1fc2F2ZV9ncGlvcygpIC0gU2F2ZSB0aGUgc3RhdGUgb2YgdGhlIEdQSU8gYmFua3MuCi0gKgotICogRm9yIGFsbCB0aGUgR1BJTyBiYW5rcywgc2F2ZSB0aGUgc3RhdGUgb2YgZWFjaCBvbmUgcmVhZHkgZm9yIGdvaW5nCi0gKiBpbnRvIGEgc3VzcGVuZCBtb2RlLgotICovCi12b2lkIHMzY19wbV9zYXZlX2dwaW9zKHZvaWQpCi17Ci0Jc3RydWN0IHMzY19ncGlvX2NoaXAgKm91cmNoaXA7Ci0JdW5zaWduZWQgaW50IGdwaW9fbnI7Ci0KLQlmb3IgKGdwaW9fbnIgPSAwOyBncGlvX25yIDwgUzNDX0dQSU9fRU5EOyBncGlvX25yKyspIHsKLQkJb3VyY2hpcCA9IHMzY19ncGlvbGliX2dldGNoaXAoZ3Bpb19ucik7Ci0JCWlmICghb3VyY2hpcCkKLQkJCWNvbnRpbnVlOwotCi0JCXMzY19wbV9zYXZlX2dwaW8ob3VyY2hpcCk7Ci0KLQkJUzNDX1BNREJHKCIlczogc2F2ZSAlMDh4LCUwOHgsJTA4eCwlMDh4XG4iLAotCQkJICBvdXJjaGlwLT5jaGlwLmxhYmVsLAotCQkJICBvdXJjaGlwLT5wbV9zYXZlWzBdLAotCQkJICBvdXJjaGlwLT5wbV9zYXZlWzFdLAotCQkJICBvdXJjaGlwLT5wbV9zYXZlWzJdLAotCQkJICBvdXJjaGlwLT5wbV9zYXZlWzNdKTsKLQotCQlncGlvX25yICs9IG91cmNoaXAtPmNoaXAubmdwaW87Ci0JCWdwaW9fbnIgKz0gQ09ORklHX1MzQ19HUElPX1NQQUNFOwotCX0KLX0KLQotLyoqCi0gKiBzM2NfcG1fcmVzdW1lX2dwaW8oKSAtIHJlc3RvcmUgZ3BpbyBjaGlwIGRhdGEgYWZ0ZXIgc3VzcGVuZAotICogQG91cmNoaXA6IFRoZSBzdXNwZW5kZWQgY2hpcC4KLSAqLwotc3RhdGljIHZvaWQgczNjX3BtX3Jlc3VtZV9ncGlvKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpvdXJjaGlwKQotewotCXN0cnVjdCBzM2NfZ3Bpb19wbSAqcG0gPSBvdXJjaGlwLT5wbTsKLQotCWlmIChwbSA9PSBOVUxMIHx8IHBtLT5yZXN1bWUgPT0gTlVMTCkKLQkJUzNDX1BNREJHKCIlczogbm8gcG0gZm9yICVzXG4iLCBfX2Z1bmNfXywgb3VyY2hpcC0+Y2hpcC5sYWJlbCk7Ci0JZWxzZQotCQlwbS0+cmVzdW1lKG91cmNoaXApOwotfQotCi12b2lkIHMzY19wbV9yZXN0b3JlX2dwaW9zKHZvaWQpCi17Ci0Jc3RydWN0IHMzY19ncGlvX2NoaXAgKm91cmNoaXA7Ci0JdW5zaWduZWQgaW50IGdwaW9fbnI7Ci0KLQlmb3IgKGdwaW9fbnIgPSAwOyBncGlvX25yIDwgUzNDX0dQSU9fRU5EOyBncGlvX25yKyspIHsKLQkJb3VyY2hpcCA9IHMzY19ncGlvbGliX2dldGNoaXAoZ3Bpb19ucik7Ci0JCWlmICghb3VyY2hpcCkKLQkJCWNvbnRpbnVlOwotCi0JCXMzY19wbV9yZXN1bWVfZ3BpbyhvdXJjaGlwKTsKLQotCQlncGlvX25yICs9IG91cmNoaXAtPmNoaXAubmdwaW87Ci0JCWdwaW9fbnIgKz0gQ09ORklHX1MzQ19HUElPX1NQQUNFOwotCX0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL3BtLmMgYi9hcmNoL2FybS9wbGF0LXMzYy9wbS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Njc0NzA2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL3BtLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNzggKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvcG0uYwotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwNC0yMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBTM0MgY29tbW9uIHBvd2VyIG1hbmFnZW1lbnQgKHN1c3BlbmQgdG8gcmFtKSBzdXBwb3J0LgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8cGxhdC9wbS5oPgotI2luY2x1ZGUgPHBsYXQvcG0tY29yZS5oPgotCi0vKiBmb3IgZXh0ZXJuYWwgdXNlICovCi0KLXVuc2lnbmVkIGxvbmcgczNjX3BtX2ZsYWdzOwotCi0vKiBEZWJ1ZyBjb2RlOgotICoKLSAqIFRoaXMgY29kZSBzdXBwb3J0cyBkZWJ1ZyBvdXRwdXQgdG8gdGhlIGxvdyBsZXZlbCBVQVJUcyBmb3IgdXNlIG9uCi0gKiByZXN1bWUgYmVmb3JlIHRoZSBjb25zb2xlIGxheWVyIGlzIGF2YWlsYWJsZS4KLSovCi0KLSNpZmRlZiBDT05GSUdfUzNDMjQxMF9QTV9ERUJVRwotZXh0ZXJuIHZvaWQgcHJpbnRhc2NpaShjb25zdCBjaGFyICopOwotCi12b2lkIHMzY19wbV9kYmcoY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlzdCB2YTsKLQljaGFyIGJ1ZmZbMjU2XTsKLQotCXZhX3N0YXJ0KHZhLCBmbXQpOwotCXZzcHJpbnRmKGJ1ZmYsIGZtdCwgdmEpOwotCXZhX2VuZCh2YSk7Ci0KLQlwcmludGFzY2lpKGJ1ZmYpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgczNjX3BtX2RlYnVnX2luaXQodm9pZCkKLXsKLQkvKiByZXN0YXJ0IHVhcnQgY2xvY2tzIHNvIHdlIGNhbiB1c2UgdGhlbSB0byBvdXRwdXQgKi8KLQlzM2NfcG1fZGVidWdfaW5pdF91YXJ0KCk7Ci19Ci0KLSNlbHNlCi0jZGVmaW5lIHMzY19wbV9kZWJ1Z19pbml0KCkgZG8geyB9IHdoaWxlKDApCi0KLSNlbmRpZiAvKiBDT05GSUdfUzNDMjQxMF9QTV9ERUJVRyAqLwotCi0vKiBTYXZlIHRoZSBVQVJUIGNvbmZpZ3VyYXRpb25zIGlmIHdlIGFyZSBjb25maWd1cmVkIGZvciBkZWJ1Zy4gKi8KLQotdW5zaWduZWQgY2hhciBwbV91YXJ0X3VkaXZzbG90OwotCi0jaWZkZWYgQ09ORklHX1MzQzI0MTBfUE1fREVCVUcKLQotc3RydWN0IHBtX3VhcnRfc2F2ZSB1YXJ0X3NhdmVbQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTXTsKLQotc3RhdGljIHZvaWQgczNjX3BtX3NhdmVfdWFydCh1bnNpZ25lZCBpbnQgdWFydCwgc3RydWN0IHBtX3VhcnRfc2F2ZSAqc2F2ZSkKLXsKLQl2b2lkIF9faW9tZW0gKnJlZ3MgPSBTM0NfVkFfVUFSVHgodWFydCk7Ci0KLQlzYXZlLT51bGNvbiA9IF9fcmF3X3JlYWRsKHJlZ3MgKyBTM0MyNDEwX1VMQ09OKTsKLQlzYXZlLT51Y29uID0gX19yYXdfcmVhZGwocmVncyArIFMzQzI0MTBfVUNPTik7Ci0Jc2F2ZS0+dWZjb24gPSBfX3Jhd19yZWFkbChyZWdzICsgUzNDMjQxMF9VRkNPTik7Ci0Jc2F2ZS0+dW1jb24gPSBfX3Jhd19yZWFkbChyZWdzICsgUzNDMjQxMF9VTUNPTik7Ci0Jc2F2ZS0+dWJyZGl2ID0gX19yYXdfcmVhZGwocmVncyArIFMzQzI0MTBfVUJSRElWKTsKLQotCWlmIChwbV91YXJ0X3VkaXZzbG90KQotCQlzYXZlLT51ZGl2c2xvdCA9IF9fcmF3X3JlYWRsKHJlZ3MgKyBTM0MyNDQzX0RJVlNMT1QpOwotCi0JUzNDX1BNREJHKCJVQVJUWyVkXTogVUxDT049JTA0eCwgVUNPTj0lMDR4LCBVRkNPTj0lMDR4LCBVQlJESVY9JTA0eFxuIiwKLQkJICB1YXJ0LCBzYXZlLT51bGNvbiwgc2F2ZS0+dWNvbiwgc2F2ZS0+dWZjb24sIHNhdmUtPnVicmRpdik7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzY19wbV9zYXZlX3VhcnRzKHZvaWQpCi17Ci0Jc3RydWN0IHBtX3VhcnRfc2F2ZSAqc2F2ZSA9IHVhcnRfc2F2ZTsKLQl1bnNpZ25lZCBpbnQgdWFydDsKLQotCWZvciAodWFydCA9IDA7IHVhcnQgPCBDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFM7IHVhcnQrKywgc2F2ZSsrKQotCQlzM2NfcG1fc2F2ZV91YXJ0KHVhcnQsIHNhdmUpOwotfQotCi1zdGF0aWMgdm9pZCBzM2NfcG1fcmVzdG9yZV91YXJ0KHVuc2lnbmVkIGludCB1YXJ0LCBzdHJ1Y3QgcG1fdWFydF9zYXZlICpzYXZlKQotewotCXZvaWQgX19pb21lbSAqcmVncyA9IFMzQ19WQV9VQVJUeCh1YXJ0KTsKLQotCXMzY19wbV9hcmNoX3VwZGF0ZV91YXJ0KHJlZ3MsIHNhdmUpOwotCi0JX19yYXdfd3JpdGVsKHNhdmUtPnVsY29uLCByZWdzICsgUzNDMjQxMF9VTENPTik7Ci0JX19yYXdfd3JpdGVsKHNhdmUtPnVjb24sICByZWdzICsgUzNDMjQxMF9VQ09OKTsKLQlfX3Jhd193cml0ZWwoc2F2ZS0+dWZjb24sIHJlZ3MgKyBTM0MyNDEwX1VGQ09OKTsKLQlfX3Jhd193cml0ZWwoc2F2ZS0+dW1jb24sIHJlZ3MgKyBTM0MyNDEwX1VNQ09OKTsKLQlfX3Jhd193cml0ZWwoc2F2ZS0+dWJyZGl2LCByZWdzICsgUzNDMjQxMF9VQlJESVYpOwotCi0JaWYgKHBtX3VhcnRfdWRpdnNsb3QpCi0JCV9fcmF3X3dyaXRlbChzYXZlLT51ZGl2c2xvdCwgcmVncyArIFMzQzI0NDNfRElWU0xPVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzY19wbV9yZXN0b3JlX3VhcnRzKHZvaWQpCi17Ci0Jc3RydWN0IHBtX3VhcnRfc2F2ZSAqc2F2ZSA9IHVhcnRfc2F2ZTsKLQl1bnNpZ25lZCBpbnQgdWFydDsKLQotCWZvciAodWFydCA9IDA7IHVhcnQgPCBDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFM7IHVhcnQrKywgc2F2ZSsrKQotCQlzM2NfcG1fcmVzdG9yZV91YXJ0KHVhcnQsIHNhdmUpOwotfQotI2Vsc2UKLXN0YXRpYyB2b2lkIHMzY19wbV9zYXZlX3VhcnRzKHZvaWQpIHsgfQotc3RhdGljIHZvaWQgczNjX3BtX3Jlc3RvcmVfdWFydHModm9pZCkgeyB9Ci0jZW5kaWYKLQotLyogVGhlIElSUSBleHQtaW50IGNvZGUgZ29lcyBoZXJlLCBpdCBpcyB0b28gc21hbGwgdG8gY3VycmVudGx5IGJvdGhlcgotICogd2l0aCBpdHMgb3duIGZpbGUuICovCi0KLXVuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfaW50bWFzawk9IDB4ZmZmZmZmZmZMOwotdW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9laW50bWFzawk9IDB4ZmZmZmZmZmZMOwotCi1pbnQgczNjX2lycWV4dF93YWtlKHVuc2lnbmVkIGludCBpcnFubywgdW5zaWduZWQgaW50IHN0YXRlKQotewotCXVuc2lnbmVkIGxvbmcgYml0ID0gMUwgPDwgSVJRX0VJTlRfQklUKGlycW5vKTsKLQotCWlmICghKHMzY19pcnF3YWtlX2VpbnRhbGxvdyAmIGJpdCkpCi0JCXJldHVybiAtRU5PRU5UOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAid2FrZSAlcyBmb3IgaXJxICVkXG4iLAotCSAgICAgICBzdGF0ZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsIGlycW5vKTsKLQotCWlmICghc3RhdGUpCi0JCXMzY19pcnF3YWtlX2VpbnRtYXNrIHw9IGJpdDsKLQllbHNlCi0JCXMzY19pcnF3YWtlX2VpbnRtYXNrICY9IH5iaXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogaGVscGVyIGZ1bmN0aW9ucyB0byBzYXZlIGFuZCByZXN0b3JlIHJlZ2lzdGVyIHN0YXRlICovCi0KLS8qKgotICogczNjX3BtX2RvX3NhdmUoKSAtIHNhdmUgYSBzZXQgb2YgcmVnaXN0ZXJzIGZvciByZXN0b3JhdGlvbiBvbiByZXN1bWUuCi0gKiBAcHRyOiBQb2ludGVyIHRvIGFuIGFycmF5IG9mIHJlZ2lzdGVycy4KLSAqIEBjb3VudDogU2l6ZSBvZiB0aGUgcHRyIGFycmF5LgotICoKLSAqIFJ1biB0aHJvdWdoIHRoZSBsaXN0IG9mIHJlZ2lzdGVycyBnaXZlbiwgc2F2aW5nIHRoZWlyIGNvbnRlbnRzIGluIHRoZQotICogYXJyYXkgZm9yIGxhdGVyIHJlc3RvcmF0aW9uIHdoZW4gd2Ugd2FrZXVwLgotICovCi12b2lkIHMzY19wbV9kb19zYXZlKHN0cnVjdCBzbGVlcF9zYXZlICpwdHIsIGludCBjb3VudCkKLXsKLQlmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tLCBwdHIrKykgewotCQlwdHItPnZhbCA9IF9fcmF3X3JlYWRsKHB0ci0+cmVnKTsKLQkJUzNDX1BNREJHKCJzYXZlZCAlcCB2YWx1ZSAlMDhseFxuIiwgcHRyLT5yZWcsIHB0ci0+dmFsKTsKLQl9Ci19Ci0KLS8qKgotICogczNjX3BtX2RvX3Jlc3RvcmUoKSAtIHJlc3RvcmUgcmVnaXN0ZXIgdmFsdWVzIGZyb20gdGhlIHNhdmUgbGlzdC4KLSAqIEBwdHI6IFBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgcmVnaXN0ZXJzLgotICogQGNvdW50OiBTaXplIG9mIHRoZSBwdHIgYXJyYXkuCi0gKgotICogUmVzdG9yZSB0aGUgcmVnaXN0ZXIgdmFsdWVzIHNhdmVkIGZyb20gczNjX3BtX2RvX3NhdmUoKS4KLSAqCi0gKiBOb3RlLCB3ZSBkbyBub3QgdXNlIFMzQ19QTURCRygpIGluIGhlcmUsIGFzIHRoZSBzeXN0ZW0gbWF5IG5vdCBoYXZlCi0gKiByZXN0b3JlIHRoZSBVQVJUcyBzdGF0ZSB5ZXQKLSovCi0KLXZvaWQgczNjX3BtX2RvX3Jlc3RvcmUoc3RydWN0IHNsZWVwX3NhdmUgKnB0ciwgaW50IGNvdW50KQotewotCWZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0sIHB0cisrKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJyZXN0b3JlICVwIChyZXN0b3JlICUwOGx4LCB3YXMgJTA4eClcbiIsCi0JCSAgICAgICBwdHItPnJlZywgcHRyLT52YWwsIF9fcmF3X3JlYWRsKHB0ci0+cmVnKSk7Ci0KLQkJX19yYXdfd3JpdGVsKHB0ci0+dmFsLCBwdHItPnJlZyk7Ci0JfQotfQotCi0vKioKLSAqIHMzY19wbV9kb19yZXN0b3JlX2NvcmUoKSAtIGVhcmx5IHJlc3RvcmUgcmVnaXN0ZXIgdmFsdWVzIGZyb20gc2F2ZSBsaXN0LgotICoKLSAqIFRoaXMgaXMgc2ltaWxhciB0byBzM2NfcG1fZG9fcmVzdG9yZSgpIGV4Y2VwdCB3ZSB0cnkgYW5kIG1pbmltaXNlIHRoZQotICogc2lkZSBlZmZlY3RzIG9mIHRoZSBmdW5jdGlvbiBpbiBjYXNlIHJlZ2lzdGVycyB0aGF0IGhhcmR3YXJlIG1pZ2h0IG5lZWQKLSAqIHRvIHdvcmsgaGFzIGJlZW4gcmVzdG9yZWQuCi0gKgotICogV0FSTklORzogRG8gbm90IHB1dCBhbnkgZGVidWcgaW4gaGVyZSB0aGF0IG1heSBlZmZlY3QgbWVtb3J5IG9yIHVzZQotICogcGVyaXBoZXJhbHMsIGFzIHRoaW5ncyBtYXkgYmUgY2hhbmdpbmchCi0qLwotCi12b2lkIHMzY19wbV9kb19yZXN0b3JlX2NvcmUoc3RydWN0IHNsZWVwX3NhdmUgKnB0ciwgaW50IGNvdW50KQotewotCWZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0sIHB0cisrKQotCQlfX3Jhd193cml0ZWwocHRyLT52YWwsIHB0ci0+cmVnKTsKLX0KLQotLyogczNjMjQxMF9wbV9zaG93X3Jlc3VtZV9pcnFzCi0gKgotICogcHJpbnQgYW55IElSUXMgYXNzZXJ0ZWQgYXQgcmVzdW1lIHRpbWUgKGllLCB3ZSB3b2tlIGZyb20pCi0qLwotc3RhdGljIHZvaWQgczNjX3BtX3Nob3dfcmVzdW1lX2lycXMoaW50IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHdoaWNoLAotCQkJCSAgICB1bnNpZ25lZCBsb25nIG1hc2spCi17Ci0JaW50IGk7Ci0KLQl3aGljaCAmPSB+bWFzazsKLQotCWZvciAoaSA9IDA7IGkgPD0gMzE7IGkrKykgewotCQlpZiAod2hpY2ggJiAoMUw8PGkpKSB7Ci0JCQlTM0NfUE1EQkcoIklSUSAlZCBhc3NlcnRlZCBhdCByZXN1bWVcbiIsIHN0YXJ0K2kpOwotCQl9Ci0JfQotfQotCi0KLXZvaWQgKCpwbV9jcHVfcHJlcCkodm9pZCk7Ci12b2lkICgqcG1fY3B1X3NsZWVwKSh2b2lkKTsKLQotI2RlZmluZSBhbnlfYWxsb3dlZChtYXNrLCBhbGxvdykgKCgobWFzaykgJiAoYWxsb3cpKSAhPSAoYWxsb3cpKQotCi0vKiBzM2NfcG1fZW50ZXIKLSAqCi0gKiBjZW50cmFsIGNvbnRyb2wgZm9yIHNsZWVwL3Jlc3VtZSBwcm9jZXNzCi0qLwotCi1zdGF0aWMgaW50IHMzY19wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCi17Ci0Jc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVnc19zYXZlWzE2XTsKLQotCS8qIGVuc3VyZSB0aGUgZGVidWcgaXMgaW5pdGlhbGlzZWQgKGlmIGVuYWJsZWQpICovCi0KLQlzM2NfcG1fZGVidWdfaW5pdCgpOwotCi0JUzNDX1BNREJHKCIlcyglZClcbiIsIF9fZnVuY19fLCBzdGF0ZSk7Ci0KLQlpZiAocG1fY3B1X3ByZXAgPT0gTlVMTCB8fCBwbV9jcHVfc2xlZXAgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvcjogbm8gY3B1IHNsZWVwIGZ1bmN0aW9uXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIGNoZWNrIGlmIHdlIGhhdmUgYW55dGhpbmcgdG8gd2FrZS11cCB3aXRoLi4uIGJhZCB0aGluZ3Mgc2VlbQotCSAqIHRvIGhhcHBlbiBpZiB5b3Ugc3VzcGVuZCB3aXRoIG5vIHdha2V1cCAoc3lzdGVtIHdpbGwgb2Z0ZW4KLQkgKiByZXF1aXJlIGEgZnVsbCBwb3dlci1jeWNsZSkKLQkqLwotCi0JaWYgKCFhbnlfYWxsb3dlZChzM2NfaXJxd2FrZV9pbnRtYXNrLCBzM2NfaXJxd2FrZV9pbnRhbGxvdykgJiYKLQkgICAgIWFueV9hbGxvd2VkKHMzY19pcnF3YWtlX2VpbnRtYXNrLCBzM2NfaXJxd2FrZV9laW50YWxsb3cpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IE5vIHdha2UtdXAgc291cmNlcyFcbiIsIF9fZnVuY19fKTsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogQWJvcnRpbmcgc2xlZXBcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogc3RvcmUgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyIHJlY292ZXJ5IGJsb2NrICovCi0KLQlzM2Nfc2xlZXBfc2F2ZV9waHlzID0gdmlydF90b19waHlzKHJlZ3Nfc2F2ZSk7Ci0KLQlTM0NfUE1EQkcoInMzY19zbGVlcF9zYXZlX3BoeXM9MHglMDhseFxuIiwgczNjX3NsZWVwX3NhdmVfcGh5cyk7Ci0KLQkvKiBzYXZlIGFsbCBuZWNlc3NhcnkgY29yZSByZWdpc3RlcnMgbm90IGNvdmVyZWQgYnkgdGhlIGRyaXZlcnMgKi8KLQotCXMzY19wbV9zYXZlX2dwaW9zKCk7Ci0JczNjX3BtX3NhdmVfdWFydHMoKTsKLQlzM2NfcG1fc2F2ZV9jb3JlKCk7Ci0KLQkvKiBzZXQgdGhlIGlycSBjb25maWd1cmF0aW9uIGZvciB3YWtlICovCi0KLQlzM2NfcG1fY29uZmlndXJlX2V4dGludCgpOwotCi0JUzNDX1BNREJHKCJzbGVlcDogaXJxIHdha2V1cCBtYXNrczogJTA4bHgsJTA4bHhcbiIsCi0JICAgIHMzY19pcnF3YWtlX2ludG1hc2ssIHMzY19pcnF3YWtlX2VpbnRtYXNrKTsKLQotCXMzY19wbV9hcmNoX3ByZXBhcmVfaXJxcygpOwotCi0JLyogY2FsbCBjcHUgc3BlY2lmaWMgcHJlcGFyYXRpb24gKi8KLQotCXBtX2NwdV9wcmVwKCk7Ci0KLQkvKiBmbHVzaCBjYWNoZSBiYWNrIHRvIHJhbSAqLwotCi0JZmx1c2hfY2FjaGVfYWxsKCk7Ci0KLQlzM2NfcG1fY2hlY2tfc3RvcmUoKTsKLQotCS8qIHNlbmQgdGhlIGNwdSB0byBzbGVlcC4uLiAqLwotCi0JczNjX3BtX2FyY2hfc3RvcF9jbG9ja3MoKTsKLQotCS8qIHMzY19jcHVfc2F2ZSB3aWxsIGFsc28gYWN0IGFzIG91ciByZXR1cm4gcG9pbnQgZnJvbSB3aGVuCi0JICogd2UgcmVzdW1lIGFzIGl0IHNhdmVzIGl0cyBvd24gcmVnaXN0ZXIgc3RhdGUgYW5kIHJlc3RvcmVzIGl0Ci0JICogZHVyaW5nIHRoZSByZXN1bWUuICAqLwotCi0JczNjX2NwdV9zYXZlKHJlZ3Nfc2F2ZSk7Ci0KLQkvKiByZXN0b3JlIHRoZSBjcHUgc3RhdGUgdXNpbmcgdGhlIGtlcm5lbCdzIGNwdSBpbml0IGNvZGUuICovCi0KLQljcHVfaW5pdCgpOwotCi0JLyogcmVzdG9yZSB0aGUgc3lzdGVtIHN0YXRlICovCi0KLQlzM2NfcG1fcmVzdG9yZV9jb3JlKCk7Ci0JczNjX3BtX3Jlc3RvcmVfdWFydHMoKTsKLQlzM2NfcG1fcmVzdG9yZV9ncGlvcygpOwotCi0JczNjX3BtX2RlYnVnX2luaXQoKTsKLQotCS8qIGNoZWNrIHdoYXQgaXJxIChpZiBhbnkpIHJlc3RvcmVkIHRoZSBzeXN0ZW0gKi8KLQotCXMzY19wbV9hcmNoX3Nob3dfcmVzdW1lX2lycXMoKTsKLQotCVMzQ19QTURCRygiJXM6IHBvc3Qgc2xlZXAsIHByZXBhcmluZyB0byByZXR1cm5cbiIsIF9fZnVuY19fKTsKLQotCS8qIExFRHMgc2hvdWxkIG5vdyBiZSAxMTEwICovCi0JczNjX3BtX2RlYnVnX3NtZGtsZWQoMSA8PCAxLCAwKTsKLQotCXMzY19wbV9jaGVja19yZXN0b3JlKCk7Ci0KLQkvKiBvaywgbGV0J3MgcmV0dXJuIGZyb20gc2xlZXAgKi8KLQotCVMzQ19QTURCRygiUzNDIFBNIFJlc3VtZSAocG9zdC1yZXN0b3JlKVxuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIGNhbGxiYWNrIGZyb20gYXNzZW1ibHkgY29kZSAqLwotdm9pZCBzM2NfcG1fY2JfZmx1c2hjYWNoZSh2b2lkKQotewotCWZsdXNoX2NhY2hlX2FsbCgpOwotfQotCi1zdGF0aWMgaW50IHMzY19wbV9wcmVwYXJlKHZvaWQpCi17Ci0JLyogcHJlcGFyZSBjaGVjayBhcmVhIGlmIGNvbmZpZ3VyZWQgKi8KLQotCXMzY19wbV9jaGVja19wcmVwYXJlKCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzY19wbV9maW5pc2godm9pZCkKLXsKLQlzM2NfcG1fY2hlY2tfY2xlYW51cCgpOwotfQotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIHMzY19wbV9vcHMgPSB7Ci0JLmVudGVyCQk9IHMzY19wbV9lbnRlciwKLQkucHJlcGFyZQk9IHMzY19wbV9wcmVwYXJlLAotCS5maW5pc2gJCT0gczNjX3BtX2ZpbmlzaCwKLQkudmFsaWQJCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKLX07Ci0KLS8qIHMzY19wbV9pbml0Ci0gKgotICogQXR0YWNoIHRoZSBwb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgYmUgY2FsbGVkCi0gKiBmcm9tIHRoZSBib2FyZCBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiBpZiB0aGUgYm9hcmQgc3VwcG9ydHMKLSAqIGl0LgotKi8KLQotaW50IF9faW5pdCBzM2NfcG1faW5pdCh2b2lkKQotewotCXByaW50aygiUzNDIFBvd2VyIE1hbmFnZW1lbnQsIENvcHlyaWdodCAyMDA0IFNpbXRlYyBFbGVjdHJvbmljc1xuIik7Ci0KLQlzdXNwZW5kX3NldF9vcHMoJnMzY19wbV9vcHMpOwotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvcHdtLWNsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXMzYy9wd20tY2xvY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTMxODIxNS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYy9wd20tY2xvY2suYworKysgL2Rldi9udWxsCkBAIC0xLDQ2MyArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvcHdtLWNsb2NrLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcgU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMDggQmVuIERvb2tzCi0gKglCZW4gRG9va3MgPGJlbi1saW51eEBmbHVmZi5vcmc+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9sb2cyLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgotCi0jaW5jbHVkZSA8cGxhdC9yZWdzLXRpbWVyLmg+Ci0jaW5jbHVkZSA8bWFjaC9wd20tY2xvY2suaD4KLQotLyogRWFjaCBvZiB0aGUgdGltZXJzIDAgdGhyb3VnaCA1IGdvIHRocm91Z2ggdGhlIGZvbGxvd2luZwotICogY2xvY2sgdHJlZSwgd2l0aCB0aGUgaW5wdXRzIGRlcGVuZGluZyBvbiB0aGUgdGltZXJzLgotICoKLSAqIHBjbGsgLS0tLSBbIHByZXNjYWxlciAwIF0gLSstLS0+IHRpbWVyIDAKLSAqCQkJICAgICAgKy0tLT4gdGltZXIgMQotICoKLSAqIHBjbGsgLS0tLSBbIHByZXNjYWxlciAxIF0gLSstLS0+IHRpbWVyIDIKLSAqCQkJICAgICAgKy0tLT4gdGltZXIgMwotICoJCQkgICAgICBcLS0tPiB0aW1lciA0Ci0gKgotICogV2hpY2ggYXJlIGZlZCBpbnRvIHRoZSB0aW1lcnMgYXMgc286Ci0gKgotICogcHJlc2NhbGVkIDAgLS0tLSBbIGRpdiAyLDQsOCwxNiBdIC0tLVwKLSAqCQkJCSAgICAgICBbbXV4XSAtPiB0aW1lciAwCi0gKiB0Y2xrIDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLwotICoKLSAqIHByZXNjYWxlZCAwIC0tLS0gWyBkaXYgMiw0LDgsMTYgXSAtLS1cCi0gKgkJCQkgICAgICAgW211eF0gLT4gdGltZXIgMQotICogdGNsayAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8KLSAqCi0gKgotICogcHJlc2NhbGVkIDEgLS0tLSBbIGRpdiAyLDQsOCwxNiBdIC0tLVwKLSAqCQkJCSAgICAgICBbbXV4XSAtPiB0aW1lciAyCi0gKiB0Y2xrIDEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLwotICoKLSAqIHByZXNjYWxlZCAxIC0tLS0gWyBkaXYgMiw0LDgsMTYgXSAtLS1cCi0gKgkJCQkgICAgICAgW211eF0gLT4gdGltZXIgMwotICogdGNsayAxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8KLSAqCi0gKiBwcmVzY2FsZWQgMSAtLS0tIFsgZGl2IDIsNCw4LCAxNiBdIC0tXAotICoJCQkJICAgICAgIFttdXhdIC0+IHRpbWVyIDQKLSAqIHRjbGsgMSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vCi0gKgotICogU2luY2UgdGhlIG11eCBhbmQgdGhlIGRpdmlkZXIgYXJlIHRpZWQgdG9nZXRoZXIgaW4gdGhlCi0gKiBzYW1lIHJlZ2lzdGVyIHNwYWNlLCBpdCBpcyBpbXBvc3NpYmxlIHRvIHNldCB0aGUgcGFyZW50Ci0gKiBhbmQgdGhlIHJhdGUgYXQgdGhlIHNhbWUgdGltZS4gVG8gYXZvaWQgdGhpcywgd2UgYWRkIGFuCi0gKiBpbnRlcm1lZGlhdGUgJ3ByZXNjYWxlZC1hbmQtZGl2aWRlZCcgY2xvY2sgdG8gc2VsZWN0Ci0gKiBhcyB0aGUgcGFyZW50IGZvciB0aGUgdGltZXIgaW5wdXQgY2xvY2sgY2FsbGVkIHRkaXYuCi0gKgotICogcHJlc2NhbGVkIGNsayAtLT4gcHdtLXRkaXYgLS0tXAotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgbXV4IF0gLS0+IHRpbWVyIFgKLSAqIHRjbGsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8KLSovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa190aW1lcl9zY2FsZXJbXTsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3B3bV9zY2FsZXJfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgdGNmZzAgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDRkcwKTsKLQotCWlmIChjbGsgPT0gJmNsa190aW1lcl9zY2FsZXJbMV0pIHsKLQkJdGNmZzAgJj0gUzNDMjQxMF9UQ0ZHX1BSRVNDQUxFUjFfTUFTSzsKLQkJdGNmZzAgPj49IFMzQzI0MTBfVENGR19QUkVTQ0FMRVIxX1NISUZUOwotCX0gZWxzZSB7Ci0JCXRjZmcwICY9IFMzQzI0MTBfVENGR19QUkVTQ0FMRVIwX01BU0s7Ci0JfQotCi0JcmV0dXJuIGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCkgLyAodGNmZzAgKyAxKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3B3bV9zY2FsZXJfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JdW5zaWduZWQgbG9uZyBkaXZpc29yID0gcGFyZW50X3JhdGUgLyByYXRlOwotCi0JaWYgKGRpdmlzb3IgPiAyNTYpCi0JCWRpdmlzb3IgPSAyNTY7Ci0JZWxzZSBpZiAoZGl2aXNvciA8IDIpCi0JCWRpdmlzb3IgPSAyOwotCi0JcmV0dXJuIHBhcmVudF9yYXRlIC8gZGl2aXNvcjsKLX0KLQotc3RhdGljIGludCBjbGtfcHdtX3NjYWxlcl9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHJvdW5kID0gY2xrX3B3bV9zY2FsZXJfcm91bmRfcmF0ZShjbGssIHJhdGUpOwotCXVuc2lnbmVkIGxvbmcgdGNmZzA7Ci0JdW5zaWduZWQgbG9uZyBkaXZpc29yOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlkaXZpc29yID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvIHJvdW5kOwotCWRpdmlzb3ItLTsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQl0Y2ZnMCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENGRzApOwotCi0JaWYgKGNsayA9PSAmY2xrX3RpbWVyX3NjYWxlclsxXSkgewotCQl0Y2ZnMCAmPSB+UzNDMjQxMF9UQ0ZHX1BSRVNDQUxFUjFfTUFTSzsKLQkJdGNmZzAgfD0gZGl2aXNvciA8PCBTM0MyNDEwX1RDRkdfUFJFU0NBTEVSMV9TSElGVDsKLQl9IGVsc2UgewotCQl0Y2ZnMCAmPSB+UzNDMjQxMF9UQ0ZHX1BSRVNDQUxFUjBfTUFTSzsKLQkJdGNmZzAgfD0gZGl2aXNvcjsKLQl9Ci0KLQlfX3Jhd193cml0ZWwodGNmZzAsIFMzQzI0MTBfVENGRzApOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBjbGtfdGltZXJfc2NhbGVyW10gPSB7Ci0JWzBdCT0gewotCQkubmFtZQkJPSAicHdtLXNjYWxlcjAiLAotCQkuaWQJCT0gLTEsCi0JCS5nZXRfcmF0ZQk9IGNsa19wd21fc2NhbGVyX2dldF9yYXRlLAotCQkuc2V0X3JhdGUJPSBjbGtfcHdtX3NjYWxlcl9zZXRfcmF0ZSwKLQkJLnJvdW5kX3JhdGUJPSBjbGtfcHdtX3NjYWxlcl9yb3VuZF9yYXRlLAotCX0sCi0JWzFdCT0gewotCQkubmFtZQkJPSAicHdtLXNjYWxlcjEiLAotCQkuaWQJCT0gLTEsCi0JCS5nZXRfcmF0ZQk9IGNsa19wd21fc2NhbGVyX2dldF9yYXRlLAotCQkuc2V0X3JhdGUJPSBjbGtfcHdtX3NjYWxlcl9zZXRfcmF0ZSwKLQkJLnJvdW5kX3JhdGUJPSBjbGtfcHdtX3NjYWxlcl9yb3VuZF9yYXRlLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjbGtfdGltZXJfdGNsa1tdID0gewotCVswXQk9IHsKLQkJLm5hbWUJCT0gInB3bS10Y2xrMCIsCi0JCS5pZAkJPSAtMSwKLQl9LAotCVsxXQk9IHsKLQkJLm5hbWUJCT0gInB3bS10Y2xrMSIsCi0JCS5pZAkJPSAtMSwKLQl9LAotfTsKLQotc3RydWN0IHB3bV90ZGl2X2NsayB7Ci0Jc3RydWN0IGNsawljbGs7Ci0JdW5zaWduZWQgaW50CWRpdmlzb3I7Ci19OwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBwd21fdGRpdl9jbGsgKnRvX3RkaXYoc3RydWN0IGNsayAqY2xrKQotewotCXJldHVybiBjb250YWluZXJfb2YoY2xrLCBzdHJ1Y3QgcHdtX3RkaXZfY2xrLCBjbGspOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfcHdtX3RkaXZfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQotewotCXVuc2lnbmVkIGxvbmcgdGNmZzEgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDRkcxKTsKLQl1bnNpZ25lZCBpbnQgZGl2aXNvcjsKLQotCXRjZmcxID4+PSBTM0MyNDEwX1RDRkcxX1NISUZUKGNsay0+aWQpOwotCXRjZmcxICY9IFMzQzI0MTBfVENGRzFfTVVYX01BU0s7Ci0KLQlpZiAocHdtX2NmZ19zcmNfaXNfdGNsayh0Y2ZnMSkpCi0JCWRpdmlzb3IgPSB0b190ZGl2KGNsayktPmRpdmlzb3I7Ci0JZWxzZQotCQlkaXZpc29yID0gdGNmZ190b19kaXZpc29yKHRjZmcxKTsKLQotCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gZGl2aXNvcjsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3B3bV90ZGl2X3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOwotCXVuc2lnbmVkIGxvbmcgZGl2aXNvcjsKLQotCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQlkaXZpc29yID0gcGFyZW50X3JhdGUgLyByYXRlOwotCi0JaWYgKGRpdmlzb3IgPD0gMSAmJiBwd21fdGRpdl9oYXNfZGl2MSgpKQotCQlkaXZpc29yID0gMTsKLQllbHNlIGlmIChkaXZpc29yIDw9IDIpCi0JCWRpdmlzb3IgPSAyOwotCWVsc2UgaWYgKGRpdmlzb3IgPD0gNCkKLQkJZGl2aXNvciA9IDQ7Ci0JZWxzZSBpZiAoZGl2aXNvciA8PSA4KQotCQlkaXZpc29yID0gODsKLQllbHNlCi0JCWRpdmlzb3IgPSAxNjsKLQotCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdmlzb3I7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19wd21fdGRpdl9iaXRzKHN0cnVjdCBwd21fdGRpdl9jbGsgKmRpdmNsaykKLXsKLQlyZXR1cm4gcHdtX3RkaXZfZGl2X2JpdHMoZGl2Y2xrLT5kaXZpc29yKTsKLX0KLQotc3RhdGljIHZvaWQgY2xrX3B3bV90ZGl2X3VwZGF0ZShzdHJ1Y3QgcHdtX3RkaXZfY2xrICpkaXZjbGspCi17Ci0JdW5zaWduZWQgbG9uZyB0Y2ZnMSA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENGRzEpOwotCXVuc2lnbmVkIGxvbmcgYml0cyA9IGNsa19wd21fdGRpdl9iaXRzKGRpdmNsayk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIHNoaWZ0ID0gIFMzQzI0MTBfVENGRzFfU0hJRlQoZGl2Y2xrLT5jbGsuaWQpOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JdGNmZzEgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDRkcxKTsKLQl0Y2ZnMSAmPSB+KFMzQzI0MTBfVENGRzFfTVVYX01BU0sgPDwgc2hpZnQpOwotCXRjZmcxIHw9IGJpdHMgPDwgc2hpZnQ7Ci0JX19yYXdfd3JpdGVsKHRjZmcxLCBTM0MyNDEwX1RDRkcxKTsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIGludCBjbGtfcHdtX3RkaXZfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0Jc3RydWN0IHB3bV90ZGl2X2NsayAqZGl2Y2xrID0gdG9fdGRpdihjbGspOwotCXVuc2lnbmVkIGxvbmcgdGNmZzEgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDRkcxKTsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQl1bnNpZ25lZCBsb25nIGRpdmlzb3I7Ci0KLQl0Y2ZnMSA+Pj0gUzNDMjQxMF9UQ0ZHMV9TSElGVChjbGstPmlkKTsKLQl0Y2ZnMSAmPSBTM0MyNDEwX1RDRkcxX01VWF9NQVNLOwotCi0JcmF0ZSA9IGNsa19yb3VuZF9yYXRlKGNsaywgcmF0ZSk7Ci0JZGl2aXNvciA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKLQotCWlmIChkaXZpc29yID4gMTYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZGl2Y2xrLT5kaXZpc29yID0gZGl2aXNvcjsKLQotCS8qIFVwZGF0ZSB0aGUgY3VycmVudCBNVVggc2V0dGluZ3MgaWYgd2UgYXJlIGN1cnJlbnRseQotCSAqIHNlbGVjdGVkIGFzIHRoZSBjbG9jayBzb3VyY2UgZm9yIHRoaXMgY2xvY2suICovCi0KLQlpZiAoIXB3bV9jZmdfc3JjX2lzX3RjbGsodGNmZzEpKQotCQljbGtfcHdtX3RkaXZfdXBkYXRlKGRpdmNsayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwd21fdGRpdl9jbGsgY2xrX3RpbWVyX3RkaXZbXSA9IHsKLQlbMF0JPSB7Ci0JCS5jbGsJPSB7Ci0JCQkubmFtZQkJPSAicHdtLXRkaXYiLAotCQkJLnBhcmVudAkJPSAmY2xrX3RpbWVyX3NjYWxlclswXSwKLQkJCS5nZXRfcmF0ZQk9IGNsa19wd21fdGRpdl9nZXRfcmF0ZSwKLQkJCS5zZXRfcmF0ZQk9IGNsa19wd21fdGRpdl9zZXRfcmF0ZSwKLQkJCS5yb3VuZF9yYXRlCT0gY2xrX3B3bV90ZGl2X3JvdW5kX3JhdGUsCi0JCX0sCi0JfSwKLQlbMV0JPSB7Ci0JCS5jbGsJPSB7Ci0JCQkubmFtZQkJPSAicHdtLXRkaXYiLAotCQkJLnBhcmVudAkJPSAmY2xrX3RpbWVyX3NjYWxlclswXSwKLQkJCS5nZXRfcmF0ZQk9IGNsa19wd21fdGRpdl9nZXRfcmF0ZSwKLQkJCS5zZXRfcmF0ZQk9IGNsa19wd21fdGRpdl9zZXRfcmF0ZSwKLQkJCS5yb3VuZF9yYXRlCT0gY2xrX3B3bV90ZGl2X3JvdW5kX3JhdGUsCi0JCX0KLQl9LAotCVsyXQk9IHsKLQkJLmNsawk9IHsKLQkJCS5uYW1lCQk9ICJwd20tdGRpdiIsCi0JCQkucGFyZW50CQk9ICZjbGtfdGltZXJfc2NhbGVyWzFdLAotCQkJLmdldF9yYXRlCT0gY2xrX3B3bV90ZGl2X2dldF9yYXRlLAotCQkJLnNldF9yYXRlCT0gY2xrX3B3bV90ZGl2X3NldF9yYXRlLAotCQkJLnJvdW5kX3JhdGUJPSBjbGtfcHdtX3RkaXZfcm91bmRfcmF0ZSwKLQkJfSwKLQl9LAotCVszXQk9IHsKLQkJLmNsawk9IHsKLQkJCS5uYW1lCQk9ICJwd20tdGRpdiIsCi0JCQkucGFyZW50CQk9ICZjbGtfdGltZXJfc2NhbGVyWzFdLAotCQkJLmdldF9yYXRlCT0gY2xrX3B3bV90ZGl2X2dldF9yYXRlLAotCQkJLnNldF9yYXRlCT0gY2xrX3B3bV90ZGl2X3NldF9yYXRlLAotCQkJLnJvdW5kX3JhdGUJPSBjbGtfcHdtX3RkaXZfcm91bmRfcmF0ZSwKLQkJfSwKLQl9LAotCVs0XQk9IHsKLQkJLmNsawk9IHsKLQkJCS5uYW1lCQk9ICJwd20tdGRpdiIsCi0JCQkucGFyZW50CQk9ICZjbGtfdGltZXJfc2NhbGVyWzFdLAotCQkJLmdldF9yYXRlCT0gY2xrX3B3bV90ZGl2X2dldF9yYXRlLAotCQkJLnNldF9yYXRlCT0gY2xrX3B3bV90ZGl2X3NldF9yYXRlLAotCQkJLnJvdW5kX3JhdGUJPSBjbGtfcHdtX3RkaXZfcm91bmRfcmF0ZSwKLQkJfSwKLQl9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgY2xrX3B3bV90ZGl2X3JlZ2lzdGVyKHVuc2lnbmVkIGludCBpZCkKLXsKLQlzdHJ1Y3QgcHdtX3RkaXZfY2xrICpkaXZjbGsgPSAmY2xrX3RpbWVyX3RkaXZbaWRdOwotCXVuc2lnbmVkIGxvbmcgdGNmZzEgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDRkcxKTsKLQotCXRjZmcxID4+PSBTM0MyNDEwX1RDRkcxX1NISUZUKGlkKTsKLQl0Y2ZnMSAmPSBTM0MyNDEwX1RDRkcxX01VWF9NQVNLOwotCi0JZGl2Y2xrLT5jbGsuaWQgPSBpZDsKLQlkaXZjbGstPmRpdmlzb3IgPSB0Y2ZnX3RvX2Rpdmlzb3IodGNmZzEpOwotCi0JcmV0dXJuIHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmRpdmNsay0+Y2xrKTsKLX0KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrICpzM2MyNHh4X3B3bWNsa190Y2xrKHVuc2lnbmVkIGludCBpZCkKLXsKLQlyZXR1cm4gKGlkID49IDIpID8gJmNsa190aW1lcl90Y2xrWzFdIDogJmNsa190aW1lcl90Y2xrWzBdOwotfQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBjbGsgKnMzYzI0eHhfcHdtY2xrX3RkaXYodW5zaWduZWQgaW50IGlkKQotewotCXJldHVybiAmY2xrX3RpbWVyX3RkaXZbaWRdLmNsazsKLX0KLQotc3RhdGljIGludCBjbGtfcHdtX3Rpbl9zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQotewotCXVuc2lnbmVkIGludCBpZCA9IGNsay0+aWQ7Ci0JdW5zaWduZWQgbG9uZyB0Y2ZnMTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgYml0czsKLQl1bnNpZ25lZCBsb25nIHNoaWZ0ID0gUzNDMjQxMF9UQ0ZHMV9TSElGVChpZCk7Ci0KLQlpZiAocGFyZW50ID09IHMzYzI0eHhfcHdtY2xrX3RjbGsoaWQpKQotCQliaXRzID0gUzNDX1RDRkcxX01VWF9UQ0xLIDw8IHNoaWZ0OwotCWVsc2UgaWYgKHBhcmVudCA9PSBzM2MyNHh4X3B3bWNsa190ZGl2KGlkKSkKLQkJYml0cyA9IGNsa19wd21fdGRpdl9iaXRzKHRvX3RkaXYocGFyZW50KSkgPDwgc2hpZnQ7Ci0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWNsay0+cGFyZW50ID0gcGFyZW50OwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JdGNmZzEgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDRkcxKTsKLQl0Y2ZnMSAmPSB+KFMzQzI0MTBfVENGRzFfTVVYX01BU0sgPDwgc2hpZnQpOwotCV9fcmF3X3dyaXRlbCh0Y2ZnMSB8IGJpdHMsIFMzQzI0MTBfVENGRzEpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa190aW5bXSA9IHsKLQlbMF0JPSB7Ci0JCS5uYW1lCQk9ICJwd20tdGluIiwKLQkJLmlkCQk9IDAsCi0JCS5zZXRfcGFyZW50CT0gY2xrX3B3bV90aW5fc2V0X3BhcmVudCwKLQl9LAotCVsxXQk9IHsKLQkJLm5hbWUJCT0gInB3bS10aW4iLAotCQkuaWQJCT0gMSwKLQkJLnNldF9wYXJlbnQJPSBjbGtfcHdtX3Rpbl9zZXRfcGFyZW50LAotCX0sCi0JWzJdCT0gewotCQkubmFtZQkJPSAicHdtLXRpbiIsCi0JCS5pZAkJPSAyLAotCQkuc2V0X3BhcmVudAk9IGNsa19wd21fdGluX3NldF9wYXJlbnQsCi0JfSwKLQlbM10JPSB7Ci0JCS5uYW1lCQk9ICJwd20tdGluIiwKLQkJLmlkCQk9IDMsCi0JCS5zZXRfcGFyZW50CT0gY2xrX3B3bV90aW5fc2V0X3BhcmVudCwKLQl9LAotCVs0XQk9IHsKLQkJLm5hbWUJCT0gInB3bS10aW4iLAotCQkuaWQJCT0gNCwKLQkJLnNldF9wYXJlbnQJPSBjbGtfcHdtX3Rpbl9zZXRfcGFyZW50LAotCX0sCi19OwotCi1zdGF0aWMgX19pbml0IGludCBjbGtfcHdtX3Rpbl9yZWdpc3RlcihzdHJ1Y3QgY2xrICpwd20pCi17Ci0JdW5zaWduZWQgbG9uZyB0Y2ZnMSA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENGRzEpOwotCXVuc2lnbmVkIGludCBpZCA9IHB3bS0+aWQ7Ci0KLQlzdHJ1Y3QgY2xrICpwYXJlbnQ7Ci0JaW50IHJldDsKLQotCXJldCA9IHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2socHdtKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXRjZmcxID4+PSBTM0MyNDEwX1RDRkcxX1NISUZUKGlkKTsKLQl0Y2ZnMSAmPSBTM0MyNDEwX1RDRkcxX01VWF9NQVNLOwotCi0JaWYgKHB3bV9jZmdfc3JjX2lzX3RjbGsodGNmZzEpKQotCQlwYXJlbnQgPSBzM2MyNHh4X3B3bWNsa190Y2xrKGlkKTsKLQllbHNlCi0JCXBhcmVudCA9IHMzYzI0eHhfcHdtY2xrX3RkaXYoaWQpOwotCi0JcmV0dXJuIGNsa19zZXRfcGFyZW50KHB3bSwgcGFyZW50KTsKLX0KLQotLyoqCi0gKiBzM2NfcHdtY2xrX2luaXQoKSAtIGluaXRpYWxpc2UgcHdtIGNsb2NrcwotICoKLSAqIEluaXRpYWxpc2UgYW5kIHJlZ2lzdGVyIHRoZSBjbG9ja3Mgd2hpY2ggcHJvdmlkZSB0aGUgaW5wdXRzIGZvciB0aGUKLSAqIHB3bSB0aW1lciBibG9ja3MuCi0gKgotICogTm90ZSwgdGhpcyBjYWxsIGlzIHJlcXVpcmVkIGJ5IHRoZSB0aW1lIGNvcmUsIHNvIG11c3QgYmUgY2FsbGVkIGFmdGVyCi0gKiB0aGUgYmFzZSBjbG9ja3MgYXJlIGFkZGVkIGFuZCBiZWZvcmUgYW55IG9mIHRoZSBpbml0Y2FsbHMgYXJlIHJ1bi4KLSAqLwotX19pbml0IHZvaWQgczNjX3B3bWNsa19pbml0KHZvaWQpCi17Ci0Jc3RydWN0IGNsayAqY2xrX3RpbWVyczsKLQl1bnNpZ25lZCBpbnQgY2xrOwotCWludCByZXQ7Ci0KLQljbGtfdGltZXJzID0gY2xrX2dldChOVUxMLCAidGltZXJzIik7Ci0JaWYgKElTX0VSUihjbGtfdGltZXJzKSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBwYXJlbnQgY2xvY2tcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQotCWZvciAoY2xrID0gMDsgY2xrIDwgQVJSQVlfU0laRShjbGtfdGltZXJfc2NhbGVyKTsgY2xrKyspIHsKLQkJY2xrX3RpbWVyX3NjYWxlcltjbGtdLnBhcmVudCA9IGNsa190aW1lcnM7Ci0JCXJldCA9IHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa190aW1lcl9zY2FsZXJbY2xrXSk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgImVycm9yIGFkZGluZyBwd20gc2NhbGVyJWQgY2xvY2tcbiIsIGNsayk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlmb3IgKGNsayA9IDA7IGNsayA8IEFSUkFZX1NJWkUoY2xrX3RpbWVyX3RjbGspOyBjbGsrKykgewotCQlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZjbGtfdGltZXJfdGNsa1tjbGtdKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiZXJyb3IgYWRkaW5nIHB3dyB0Y2xrJWRcbiIsIGNsayk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlmb3IgKGNsayA9IDA7IGNsayA8IEFSUkFZX1NJWkUoY2xrX3RpbWVyX3RkaXYpOyBjbGsrKykgewotCQlyZXQgPSBjbGtfcHdtX3RkaXZfcmVnaXN0ZXIoY2xrKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiZXJyb3IgYWRkaW5nIHB3bSVkIHRkaXYgY2xvY2tcbiIsIGNsayk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQlmb3IgKGNsayA9IDA7IGNsayA8IEFSUkFZX1NJWkUoY2xrX3Rpbik7IGNsaysrKSB7Ci0JCXJldCA9IGNsa19wd21fdGluX3JlZ2lzdGVyKCZjbGtfdGluW2Nsa10pOwotCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJlcnJvciBhZGRpbmcgcHdtJWQgdGluIGNsb2NrXG4iLCBjbGspOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvdGltZS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MvdGltZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYjI3YjI5Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjL3RpbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDI4NSArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvdGltZS5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglCZW4gRG9va3MsIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vbGVkcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8bWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxwbGF0L3JlZ3MtdGltZXIuaD4KLSNpbmNsdWRlIDxtYWNoL3JlZ3MtaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotI2luY2x1ZGUgPG1hY2gvdGljay5oPgotCi0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX3N0YXJ0dmFsOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZXJfdXNlY190aWNrczsKLQotI2lmbmRlZiBUSUNLX01BWAotI2RlZmluZSBUSUNLX01BWCAoMHhmZmZmKQotI2VuZGlmCi0KLSNkZWZpbmUgVElNRVJfVVNFQ19TSElGVCAxNgotCi0vKiB3ZSB1c2UgdGhlIHNoaWZ0ZWQgYXJpdGhtZXRpYyB0byB3b3JrIG91dCB0aGUgcmF0aW8gb2YgdGltZXIgdGlja3MKLSAqIHRvIHVzZWNzLCBhcyBvZnRlbiB0aGUgcGVyaXBoZXJhbCBjbG9jayBpcyBub3QgYSBuaWNlIGV2ZW4gbXVsdGlwbGUKLSAqIG9mIDFNSHouCi0gKgotICogc2hpZnQgb2YgMTQgYW5kIDE1IGFyZSB0b28gbG93IGZvciB0aGUgMTJNSHosIDE2IHNlZW1zIHRvIGJlIG9rCi0gKiBmb3IgdGhlIGN1cnJlbnQgSFogdmFsdWUgb2YgMjAwIHdpdGhvdXQgcHJvZHVjaW5nIG92ZXJmbG93cy4KLSAqCi0gKiBPcmlnaW5hbCBwYXRjaCBieSBEaW1pdHJ5IEFuZHJpYywgdXBkYXRlZCBieSBCZW4gRG9va3MKLSovCi0KLQotLyogdGltZXJfbWFza191c2VjX3RpY2tzCi0gKgotICogZ2l2ZW4gYSBjbG9jayBhbmQgZGl2aXNvciwgbWFrZSB0aGUgdmFsdWUgdG8gcGFzcyBpbnRvIHRpbWVyX3RpY2tzX3RvX3VzZWMKLSAqIHRvIHNjYWxlIHRoZSB0aWNrcyBpbnRvIHVzZWNzCi0qLwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKLXRpbWVyX21hc2tfdXNlY190aWNrcyh1bnNpZ25lZCBsb25nIHNjYWxlciwgdW5zaWduZWQgbG9uZyBwY2xrKQotewotCXVuc2lnbmVkIGxvbmcgZGVuID0gcGNsayAvIDEwMDA7Ci0KLQlyZXR1cm4gKCgxMDAwIDw8IFRJTUVSX1VTRUNfU0hJRlQpICogc2NhbGVyICsgKGRlbiA+PiAxKSkgLyBkZW47Ci19Ci0KLS8qIHRpbWVyX3RpY2tzX3RvX3VzZWMKLSAqCi0gKiBjb252ZXJ0IHRpbWVyIHRpY2tzIHRvIHVzZWMuCi0qLwotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGltZXJfdGlja3NfdG9fdXNlYyh1bnNpZ25lZCBsb25nIHRpY2tzKQotewotCXVuc2lnbmVkIGxvbmcgcmVzOwotCi0JcmVzID0gdGlja3MgKiB0aW1lcl91c2VjX3RpY2tzOwotCXJlcyArPSAxIDw8IChUSU1FUl9VU0VDX1NISUZUIC0gNCk7CS8qIHJvdW5kIHVwIHNsaWdodGx5ICovCi0KLQlyZXR1cm4gcmVzID4+IFRJTUVSX1VTRUNfU0hJRlQ7Ci19Ci0KLS8qKioKLSAqIFJldHVybnMgbWljcm9zZWNvbmQgIHNpbmNlIGxhc3QgY2xvY2sgaW50ZXJydXB0LiAgTm90ZSB0aGF0IGludGVycnVwdHMKLSAqIHdpbGwgaGF2ZSBiZWVuIGRpc2FibGVkIGJ5IGRvX2dldHRpbWVvZmZzZXQoKQotICogSVJRcyBhcmUgZGlzYWJsZWQgYmVmb3JlIGVudGVyaW5nIGhlcmUgZnJvbSBkb19nZXR0aW1lb2ZkYXkoKQotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzI0MTBfZ2V0dGltZW9mZnNldCAodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHRkb25lOwotCXVuc2lnbmVkIGxvbmcgdHZhbDsKLQotCS8qIHdvcmsgb3V0IGhvdyBtYW55IHRpY2tzIGhhdmUgZ29uZSBzaW5jZSBsYXN0IHRpbWVyIGludGVycnVwdCAqLwotCi0JdHZhbCA9ICBfX3Jhd19yZWFkbChTM0MyNDEwX1RDTlRPKDQpKTsKLQl0ZG9uZSA9IHRpbWVyX3N0YXJ0dmFsIC0gdHZhbDsKLQotCS8qIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBpcyBhbiBpbnRlcnJ1cHQgcGVuZGluZyAqLwotCi0JaWYgKHMzYzI0eHhfb3N0aW1lcl9wZW5kaW5nKCkpIHsKLQkJLyogcmUtcmVhZCB0aGUgdGltZXIsIGFuZCB0cnkgYW5kIGZpeCB1cCBmb3IgdGhlIG1pc3NlZAotCQkgKiBpbnRlcnJ1cHQuIE5vdGUsIHRoZSBpbnRlcnJ1cHQgbWF5IGdvIG9mZiBiZWZvcmUgdGhlCi0JCSAqIHRpbWVyIGhhcyByZS1sb2FkZWQgZnJvbSB3cmFwcGluZy4KLQkJICovCi0KLQkJdHZhbCA9ICBfX3Jhd19yZWFkbChTM0MyNDEwX1RDTlRPKDQpKTsKLQkJdGRvbmUgPSB0aW1lcl9zdGFydHZhbCAtIHR2YWw7Ci0KLQkJaWYgKHR2YWwgIT0gMCkKLQkJCXRkb25lICs9IHRpbWVyX3N0YXJ0dmFsOwotCX0KLQotCXJldHVybiB0aW1lcl90aWNrc190b191c2VjKHRkb25lKTsKLX0KLQotCi0vKgotICogSVJRIGhhbmRsZXIgZm9yIHRoZSB0aW1lcgotICovCi1zdGF0aWMgaXJxcmV0dXJuX3QKLXMzYzI0MTBfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQl0aW1lcl90aWNrKCk7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBzM2MyNDEwX3RpbWVyX2lycSA9IHsKLQkubmFtZQkJPSAiUzNDMjQxMCBUaW1lciBUaWNrIiwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIgfCBJUlFGX0lSUVBPTEwsCi0JLmhhbmRsZXIJPSBzM2MyNDEwX3RpbWVyX2ludGVycnVwdCwKLX07Ci0KLSNkZWZpbmUgdXNlX3RjbGsxXzEyKCkgKCBcCi0JbWFjaGluZV9pc19iYXN0KCkJfHwgXAotCW1hY2hpbmVfaXNfdnIxMDAwKCkJfHwgXAotCW1hY2hpbmVfaXNfYW51YmlzKCkJfHwgXAotCW1hY2hpbmVfaXNfb3NpcmlzKCkpCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrICp0aW47Ci1zdGF0aWMgc3RydWN0IGNsayAqdGRpdjsKLXN0YXRpYyBzdHJ1Y3QgY2xrICp0aW1lcmNsazsKLQotLyoKLSAqIFNldCB1cCB0aW1lciBpbnRlcnJ1cHQsIGFuZCByZXR1cm4gdGhlIGN1cnJlbnQgdGltZSBpbiBzZWNvbmRzLgotICoKLSAqIEN1cnJlbnRseSB3ZSBvbmx5IHVzZSB0aW1lcjQsIGFzIGl0IGlzIHRoZSBvbmx5IHRpbWVyIHdoaWNoIGhhcyBubwotICogb3RoZXIgZnVuY3Rpb24gdGhhdCBjYW4gYmUgZXhwbG9pdGVkIGV4dGVybmFsbHkKLSAqLwotc3RhdGljIHZvaWQgczNjMjQxMF90aW1lcl9zZXR1cCAodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHRjb247Ci0JdW5zaWduZWQgbG9uZyB0Y250OwotCXVuc2lnbmVkIGxvbmcgdGNmZzE7Ci0JdW5zaWduZWQgbG9uZyB0Y2ZnMDsKLQotCXRjbnQgPSBUSUNLX01BWDsgIC8qIGRlZmF1bHQgdmFsdWUgZm9yIHRjbnQgKi8KLQotCS8qIGNvbmZpZ3VyZSB0aGUgc3lzdGVtIGZvciB3aGljaGV2ZXIgbWFjaGluZSBpcyBpbiB1c2UgKi8KLQotCWlmICh1c2VfdGNsazFfMTIoKSkgewotCQkvKiB0aW1lciBpcyBhdCAxMk1Ieiwgc2NhbGVyIGlzIDEgKi8KLQkJdGltZXJfdXNlY190aWNrcyA9IHRpbWVyX21hc2tfdXNlY190aWNrcygxLCAxMjAwMDAwMCk7Ci0JCXRjbnQgPSAxMjAwMDAwMCAvIEhaOwotCi0JCXRjZmcxID0gX19yYXdfcmVhZGwoUzNDMjQxMF9UQ0ZHMSk7Ci0JCXRjZmcxICY9IH5TM0MyNDEwX1RDRkcxX01VWDRfTUFTSzsKLQkJdGNmZzEgfD0gUzNDMjQxMF9UQ0ZHMV9NVVg0X1RDTEsxOwotCQlfX3Jhd193cml0ZWwodGNmZzEsIFMzQzI0MTBfVENGRzEpOwotCX0gZWxzZSB7Ci0JCXVuc2lnbmVkIGxvbmcgcGNsazsKLQkJc3RydWN0IGNsayAqdHNjYWxlcjsKLQotCQkvKiBmb3IgdGhlIGgxOTQwIChhbmQgb3RoZXJzKSwgd2UgdXNlIHRoZSBwY2xrIGZyb20gdGhlIGNvcmUKLQkJICogdG8gZ2VuZXJhdGUgdGhlIHRpbWVyIHZhbHVlcy4gc2luY2UgdmFsdWVzIGFyb3VuZCA1MCB0bwotCQkgKiA3ME1IeiBhcmUgbm90IHZhbHVlcyB3ZSBjYW4gZGlyZWN0bHkgZ2VuZXJhdGUgdGhlIHRpbWVyCi0JCSAqIHZhbHVlIGZyb20sIHdlIG5lZWQgdG8gcHJlLXNjYWxlIGFuZCBkaXZpZGUgYmVmb3JlIHVzaW5nIGl0LgotCQkgKgotCQkgKiBmb3IgaW5zdGFuY2UsIHVzaW5nIDUwLjdNSHogYW5kIGRpdmlkaW5nIGJ5IDYgZ2l2ZXMgOC40NU1IegotCQkgKiAoOC40NSB0aWNrcyBwZXIgdXNlYykKLQkJICovCi0KLQkJcGNsayA9IGNsa19nZXRfcmF0ZSh0aW1lcmNsayk7Ci0KLQkJLyogY29uZmlndXJlIGNsb2NrIHRpY2sgKi8KLQotCQl0aW1lcl91c2VjX3RpY2tzID0gdGltZXJfbWFza191c2VjX3RpY2tzKDYsIHBjbGspOwotCi0JCXRzY2FsZXIgPSBjbGtfZ2V0X3BhcmVudCh0ZGl2KTsKLQotCQljbGtfc2V0X3JhdGUodHNjYWxlciwgcGNsayAvIDMpOwotCQljbGtfc2V0X3JhdGUodGRpdiwgcGNsayAvIDYpOwotCQljbGtfc2V0X3BhcmVudCh0aW4sIHRkaXYpOwotCi0JCXRjbnQgPSBjbGtfZ2V0X3JhdGUodGluKSAvIEhaOwotCX0KLQotCXRjb24gPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDT04pOwotCXRjZmcwID0gX19yYXdfcmVhZGwoUzNDMjQxMF9UQ0ZHMCk7Ci0JdGNmZzEgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDRkcxKTsKLQotCS8qIHRpbWVycyByZWxvYWQgYWZ0ZXIgY291bnRpbmcgemVybywgc28gcmVkdWNlIHRoZSBjb3VudCBieSAxICovCi0KLQl0Y250LS07Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAidGltZXIgdGNvbj0lMDhseCwgdGNudCAlMDRseCwgdGNmZyAlMDhseCwlMDhseCwgdXNlYyAlMDhseFxuIiwKLQkgICAgICAgdGNvbiwgdGNudCwgdGNmZzAsIHRjZmcxLCB0aW1lcl91c2VjX3RpY2tzKTsKLQotCS8qIGNoZWNrIHRvIHNlZSBpZiB0aW1lciBpcyB3aXRoaW4gMTZiaXQgcmFuZ2UuLi4gKi8KLQlpZiAodGNudCA+IFRJQ0tfTUFYKSB7Ci0JCXBhbmljKCJzZXR1cF90aW1lcjogSFogaXMgdG9vIHNtYWxsLCBjYW5ub3QgY29uZmlndXJlIHRpbWVyISIpOwotCQlyZXR1cm47Ci0JfQotCi0JX19yYXdfd3JpdGVsKHRjZmcxLCBTM0MyNDEwX1RDRkcxKTsKLQlfX3Jhd193cml0ZWwodGNmZzAsIFMzQzI0MTBfVENGRzApOwotCi0JdGltZXJfc3RhcnR2YWwgPSB0Y250OwotCV9fcmF3X3dyaXRlbCh0Y250LCBTM0MyNDEwX1RDTlRCKDQpKTsKLQotCS8qIGVuc3VyZSB0aW1lciBpcyBzdG9wcGVkLi4uICovCi0KLQl0Y29uICY9IH4oNzw8MjApOwotCXRjb24gfD0gUzNDMjQxMF9UQ09OX1Q0UkVMT0FEOwotCXRjb24gfD0gUzNDMjQxMF9UQ09OX1Q0TUFOVUFMVVBEOwotCi0JX19yYXdfd3JpdGVsKHRjb24sIFMzQzI0MTBfVENPTik7Ci0JX19yYXdfd3JpdGVsKHRjbnQsIFMzQzI0MTBfVENOVEIoNCkpOwotCV9fcmF3X3dyaXRlbCh0Y250LCBTM0MyNDEwX1RDTVBCKDQpKTsKLQotCS8qIHN0YXJ0IHRoZSB0aW1lciBydW5uaW5nICovCi0JdGNvbiB8PSBTM0MyNDEwX1RDT05fVDRTVEFSVDsKLQl0Y29uICY9IH5TM0MyNDEwX1RDT05fVDRNQU5VQUxVUEQ7Ci0JX19yYXdfd3JpdGVsKHRjb24sIFMzQzI0MTBfVENPTik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBzM2MyNDEwX3RpbWVyX3Jlc291cmNlcyh2b2lkKQotewotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgdG1wZGV2OwotCi0JdG1wZGV2LmRldi5idXMgPSAmcGxhdGZvcm1fYnVzX3R5cGU7Ci0JdG1wZGV2LmlkID0gNDsKLQotCXRpbWVyY2xrID0gY2xrX2dldChOVUxMLCAidGltZXJzIik7Ci0JaWYgKElTX0VSUih0aW1lcmNsaykpCi0JCXBhbmljKCJmYWlsZWQgdG8gZ2V0IGNsb2NrIGZvciBzeXN0ZW0gdGltZXIiKTsKLQotCWNsa19lbmFibGUodGltZXJjbGspOwotCi0JaWYgKCF1c2VfdGNsazFfMTIoKSkgewotCQl0aW4gPSBjbGtfZ2V0KCZ0bXBkZXYuZGV2LCAicHdtLXRpbiIpOwotCQlpZiAoSVNfRVJSKHRpbikpCi0JCQlwYW5pYygiZmFpbGVkIHRvIGdldCBwd20tdGluIGNsb2NrIGZvciBzeXN0ZW0gdGltZXIiKTsKLQotCQl0ZGl2ID0gY2xrX2dldCgmdG1wZGV2LmRldiwgInB3bS10ZGl2Iik7Ci0JCWlmIChJU19FUlIodGRpdikpCi0JCQlwYW5pYygiZmFpbGVkIHRvIGdldCBwd20tdGRpdiBjbG9jayBmb3Igc3lzdGVtIHRpbWVyIik7Ci0JfQotCi0JY2xrX2VuYWJsZSh0aW4pOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgczNjMjQxMF90aW1lcl9pbml0KHZvaWQpCi17Ci0JczNjMjQxMF90aW1lcl9yZXNvdXJjZXMoKTsKLQlzM2MyNDEwX3RpbWVyX3NldHVwKCk7Ci0Jc2V0dXBfaXJxKElSUV9USU1FUjQsICZzM2MyNDEwX3RpbWVyX2lycSk7Ci19Ci0KLXN0cnVjdCBzeXNfdGltZXIgczNjMjR4eF90aW1lciA9IHsKLQkuaW5pdAkJPSBzM2MyNDEwX3RpbWVyX2luaXQsCi0JLm9mZnNldAkJPSBzM2MyNDEwX2dldHRpbWVvZmZzZXQsCi0JLnJlc3VtZQkJPSBzM2MyNDEwX3RpbWVyX3NldHVwCi19OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L0tjb25maWcgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvS2NvbmZpZwppbmRleCAzNDI2NDdlLi42ZTkzZWY4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvS2NvbmZpZwpAQCAtMTQsNiArMTQsMjggQEAKIAogaWYgUExBVF9TM0MyNFhYCiAKKyMgbG93LWxldmVsIHNlcmlhbCBvcHRpb24gbm9kZXMKKworY29uZmlnIENQVV9MTFNFUklBTF9TM0MyNDEwX09OTFkKKwlib29sCisJZGVmYXVsdCB5IGlmIENQVV9MTFNFUklBTF9TM0MyNDEwICYmICFDUFVfTExTRVJJQUxfUzNDMjQ0MAorCitjb25maWcgQ1BVX0xMU0VSSUFMX1MzQzI0NDBfT05MWQorCWJvb2wKKwlkZWZhdWx0IHkgaWYgQ1BVX0xMU0VSSUFMX1MzQzI0NDAgJiYgIUNQVV9MTFNFUklBTF9TM0MyNDEwCisKK2NvbmZpZyBDUFVfTExTRVJJQUxfUzNDMjQxMAorCWJvb2wKKwloZWxwCisJICBTZWxlY3RlZCBpZiB0aGVyZSBpcyBhbiBTM0MyNDEwIChvciByZWdpc3RlciBjb21wYXRpYmxlKSBzZXJpYWwKKwkgIGxvdy1sZXZlbCBpbXBsZW1lbnRhdGlvbiBuZWVkZWQKKworY29uZmlnIENQVV9MTFNFUklBTF9TM0MyNDQwCisJYm9vbAorCWhlbHAKKwkgIFNlbGVjdGVkIGlmIHRoZXJlIGlzIGFuIFMzQzI0NDAgKG9yIHJlZ2lzdGVyIGNvbXBhdGlibGUpIHNlcmlhbAorCSAgbG93LWxldmVsIGltcGxlbWVudGF0aW9uIG5lZWRlZAorCiAjIGNvZGUgdGhhdCBpcyBzaGFyZWQgYmV0d2VlbiBhIG51bWJlciBvZiB0aGUgczNjMjR4eCBpbXBsZW1lbnRhdGlvbnMKIAogY29uZmlnIFMzQzI0MTBfQ0xPQ0sKQEAgLTI3LDQ2ICs0OSw2IEBACiAJaGVscAogCSAgQ2xvY2sgY29kZSBmb3Igc3VwcG9ydGluZyBEQ0xLL0NMS09VVCBvbiBTM0MyNFhYIGFyY2hpdGVjdHVyZXMKIAotY29uZmlnIENQVV9TM0MyNDRYCi0JYm9vbAotCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwICYmIChDUFVfUzNDMjQ0MCB8fCBDUFVfUzNDMjQ0MikKLQloZWxwCi0JICBTdXBwb3J0IGZvciBTM0MyNDQwIGFuZCBTM0MyNDQyIFNhbXN1bmcgTW9iaWxlIENQVSBiYXNlZCBzeXN0ZW1zLgotCi1jb25maWcgUzNDMjQ0MF9DUFVGUkVRCi0JYm9vbCAiUzNDMjQ0MC9TM0MyNDQyIENQVSBGcmVxdWVuY3kgc2NhbGluZyBzdXBwb3J0IgotCWRlcGVuZHMgb24gQ1BVX0ZSRVFfUzNDMjRYWCAmJiAoQ1BVX1MzQzI0NDAgfHwgQ1BVX1MzQzI0NDIpCi0Jc2VsZWN0IFMzQzI0MTBfQ1BVRlJFUV9VVElMUwotCWRlZmF1bHQgeQotCWhlbHAKLQkgIENQVSBGcmVxdWVuY3kgc2NhbGluZyBzdXBwb3J0IGZvciBTM0MyNDQwIGFuZCBTM0MyNDQyIFNvQyBDUFVzLgotCi1jb25maWcgUzNDMjQ0MF9YVEFMXzEyMDAwMDAwCi0JYm9vbAotCWhlbHAKLQkgIEluZGljYXRlIHRoYXQgdGhlIGJ1aWxkIG5lZWRzIHRvIHN1cHBvcnQgMTJNSHogc3lzdGVtCi0JICBjcnlzdGFsLgotCi1jb25maWcgUzNDMjQ0MF9YVEFMXzE2OTM0NDAwCi0JYm9vbAotCWhlbHAKLQkgIEluZGljYXRlIHRoYXQgdGhlIGJ1aWxkIG5lZWRzIHRvIHN1cHBvcnQgMTYuOTM0NE1IeiBzeXN0ZW0KLQkgIGNyeXN0YWwuCi0KLWNvbmZpZyBTM0MyNDQwX1BMTF8xMjAwMDAwMAotCWJvb2wKLQlkZXBlbmRzIG9uIFMzQzI0NDBfQ1BVRlJFUSAmJiBTM0MyNDQwX1hUQUxfMTIwMDAwMDAKLQlkZWZhdWx0IHkgaWYgQ1BVX0ZSRVFfUzNDMjRYWF9QTEwKLQloZWxwCi0JICBQTEwgdGFibGVzIGZvciBTM0MyNDQwIG9yIFMzQzI0NDIgQ1BVcyB3aXRoIDEyTUh6IGNyeXN0YWxzLgotCi1jb25maWcgUzNDMjQ0MF9QTExfMTY5MzQ0MDAKLQlib29sCi0JZGVwZW5kcyBvbiBTM0MyNDQwX0NQVUZSRVEgJiYgUzNDMjQ0MF9YVEFMXzE2OTM0NDAwCi0JZGVmYXVsdCB5IGlmIENQVV9GUkVRX1MzQzI0WFhfUExMCi0JaGVscAotCSAgUExMIHRhYmxlcyBmb3IgUzNDMjQ0MCBvciBTM0MyNDQyIENQVXMgd2l0aCAxNi45MzRNSHogY3J5c3RhbHMuCi0KIGNvbmZpZyBTM0MyNFhYX1BXTQogCWJvb2wgIlBXTSBkZXZpY2Ugc3VwcG9ydCIKIAlzZWxlY3QgSEFWRV9QV00KQEAgLTc0LDcgKzU2LDYgQEAKIAkgIFN1cHBvcnQgZm9yIGV4cG9ydGluZyB0aGUgUFdNIHRpbWVyIGJsb2NrcyB2aWEgdGhlIHB3bSBkZXZpY2UKIAkgIHN5c3RlbS4KIAotCiAjIGdwaW8gY29uZmlndXJhdGlvbnMKIAogY29uZmlnIFMzQzI0WFhfR1BJT19FWFRSQQpAQCAtMTE3LDEzICs5OCw2IEBACiAJICBFbmFibGUgZGVidWdnaW5nIG91dHB1dCBmb3IgdGhlIERNQSBjb2RlLiBUaGlzIG9wdGlvbiBzZW5kcyBpbmZvCiAJICB0byB0aGUga2VybmVsIGxvZywgYXQgcHJpb3JpdHkgS0VSTl9ERUJVRy4KIAotY29uZmlnIFMzQzI0WFhfQURDCi0JYm9vbCAiQURDIGNvbW1vbiBkcml2ZXIgc3VwcG9ydCIKLQloZWxwCi0JICBDb3JlIHN1cHBvcnQgZm9yIHRoZSBBREMgYmxvY2sgZm91bmQgaW4gdGhlIFMzQzI0WFggU29DIHN5c3RlbXMKLQkgIGZvciBkcml2ZXJzIHN1Y2ggYXMgdGhlIHRvdWNoc2NyZWVuIGFuZCBod21vbiB0byB1c2UgdG8gc2hhcmUKLQkgIHRoaXMgcmVzb3VyY2UuCi0KICMgU1BJIGRlZmF1bHQgcGluIGNvbmZpZ3VyYXRpb24gY29kZQogCiBjb25maWcgUzNDMjRYWF9TUElfQlVTMF9HUEUxMV9HUEUxMl9HUEUxMwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L01ha2VmaWxlCmluZGV4IDVkZWU4YzEuLmMyMjM3YzQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvTWFrZWZpbGUKQEAgLTI1LDIwICsyNSwxMiBAQAogCiAjIEFyY2hpdGVjdHVyZSBkZXBlbmRhbnQgYnVpbGRzCiAKLW9iai0kKENPTkZJR19DUFVfUzNDMjQ0WCkJKz0gczNjMjQ0eC5vCi1vYmotJChDT05GSUdfQ1BVX1MzQzI0NFgpCSs9IHMzYzI0NHgtaXJxLm8KLW9iai0kKENPTkZJR19DUFVfUzNDMjQ0WCkJKz0gczNjMjQ0eC1jbG9jay5vCi1vYmotJChDT05GSUdfUzNDMjQ0MF9DUFVGUkVRKQkrPSBzM2MyNDQwLWNwdWZyZXEubwotb2JqLSQoQ09ORklHX1MzQzI0NDBfUExMXzEyMDAwMDAwKSArPSBzM2MyNDQwLXBsbC0xMjAwMDAwMC5vCi1vYmotJChDT05GSUdfUzNDMjQ0MF9QTExfMTY5MzQ0MDApICs9IHMzYzI0NDAtcGxsLTE2OTM0NDAwLm8KLQogb2JqLSQoQ09ORklHX1BNX1NJTVRFQykJCSs9IHBtLXNpbXRlYy5vCiBvYmotJChDT05GSUdfUE0pCQkrPSBwbS5vCiBvYmotJChDT05GSUdfUE0pCQkrPSBpcnEtcG0ubwogb2JqLSQoQ09ORklHX1BNKQkJKz0gc2xlZXAubwogb2JqLSQoQ09ORklHX1MzQzI0MTBfQ0xPQ0spCSs9IHMzYzI0MTAtY2xvY2subwogb2JqLSQoQ09ORklHX1MzQzI0MTBfRE1BKQkrPSBkbWEubwotb2JqLSQoQ09ORklHX1MzQzI0WFhfQURDKQkrPSBhZGMubwogb2JqLSQoQ09ORklHX1MzQzI0MTBfSU9USU1JTkcpCSs9IHMzYzI0MTAtaW90aW1pbmcubwogb2JqLSQoQ09ORklHX1MzQzI0MTJfSU9USU1JTkcpCSs9IHMzYzI0MTItaW90aW1pbmcubwogb2JqLSQoQ09ORklHX1MzQzI0MTBfQ1BVRlJFUV9VVElMUykgKz0gczNjMjQxMC1jcHVmcmVxLXV0aWxzLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9hZGMuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9hZGMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U0NzYyNy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvYWRjLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MzUgKzAsMCBAQAotLyogYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2FkYy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4sIDxiZW4tbGludXhAZmx1ZmYub3JnPgotICoKLSAqIFMzQzI0WFggQURDIGRldmljZSBjb3JlCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L3JlZ3MtYWRjLmg+Ci0jaW5jbHVkZSA8cGxhdC9hZGMuaD4KLQotLyogVGhpcyBkcml2ZXIgaXMgZGVzaWduZWQgdG8gY29udHJvbCB0aGUgdXNhZ2Ugb2YgdGhlIEFEQyBibG9jayBiZXR3ZWVuCi0gKiB0aGUgdG91Y2hzY3JlZW4gYW5kIGFueSBvdGhlciBkcml2ZXJzIHRoYXQgbWF5IG5lZWQgdG8gdXNlIGl0LCBzdWNoIGFzCi0gKiB0aGUgaHdtb24gZHJpdmVyLgotICoKLSAqIFByaW9yaXR5IHdpbGwgYmUgZ2l2ZW4gdG8gdGhlIHRvdWNoc2NyZWVuIGRyaXZlciwgYnV0IGFzIHRoaXMgaXRzZWxmIGlzCi0gKiByYXRlIGxpbWl0ZWQgaXQgc2hvdWxkIG5vdCBzdGFydmUgb3RoZXIgcmVxdWVzdHMgd2hpY2ggYXJlIHByb2Nlc3NlZCBpbgotICogb3JkZXIgdGhhdCB0aGV5IGFyZSByZWNlaXZlZC4KLSAqCi0gKiBFYWNoIHVzZXIgcmVnaXN0ZXJzIHRvIGdldCBhIGNsaWVudCBibG9jayB3aGljaCB1bmlxdWVseSBpZGVudGlmaWVzIGl0Ci0gKiBhbmQgc3RvcmVzIGluZm9ybWF0aW9uIHN1Y2ggYXMgdGhlIG5lY2Vzc2FyeSBmdW5jdGlvbnMgdG8gY2FsbGJhY2sgd2hlbgotICogYWN0aW9uIGlzIHJlcXVpcmVkLgotICovCi0KLXN0cnVjdCBzM2NfYWRjX2NsaWVudCB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKLQlzdHJ1Y3QgbGlzdF9oZWFkCSBwZW5kOwotCXdhaXRfcXVldWVfaGVhZF90CSp3YWl0OwotCi0JdW5zaWduZWQgaW50CQkgbnJfc2FtcGxlczsKLQlpbnQJCQkgcmVzdWx0OwotCXVuc2lnbmVkIGNoYXIJCSBpc190czsKLQl1bnNpZ25lZCBjaGFyCQkgY2hhbm5lbDsKLQotCXZvaWQJKCpzZWxlY3RfY2IpKHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqYywgdW5zaWduZWQgc2VsZWN0ZWQpOwotCXZvaWQJKCpjb252ZXJ0X2NiKShzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmMsCi0JCQkgICAgICB1bnNpZ25lZCB2YWwxLCB1bnNpZ25lZCB2YWwyLAotCQkJICAgICAgdW5zaWduZWQgKnNhbXBsZXNfbGVmdCk7Ci19OwotCi1zdHJ1Y3QgYWRjX2RldmljZSB7Ci0Jc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpvd25lcjsKLQlzdHJ1Y3QgY2xrCQkqY2xrOwotCXN0cnVjdCBzM2NfYWRjX2NsaWVudAkqY3VyOwotCXN0cnVjdCBzM2NfYWRjX2NsaWVudAkqdHNfcGVuZDsKLQl2b2lkIF9faW9tZW0JCSpyZWdzOwotCi0JdW5zaWduZWQgaW50CQkgcHJlc2NhbGU7Ci0KLQlpbnQJCQkgaXJxOwotfTsKLQotc3RhdGljIHN0cnVjdCBhZGNfZGV2aWNlICphZGNfZGV2OwotCi1zdGF0aWMgTElTVF9IRUFEKGFkY19wZW5kaW5nKTsKLQotI2RlZmluZSBhZGNfZGJnKF9hZGMsIG1zZy4uLikgZGV2X2RiZygmKF9hZGMpLT5wZGV2LT5kZXYsIG1zZykKLQotc3RhdGljIGlubGluZSB2b2lkIHMzY19hZGNfY29udmVydChzdHJ1Y3QgYWRjX2RldmljZSAqYWRjKQotewotCXVuc2lnbmVkIGNvbiA9IHJlYWRsKGFkYy0+cmVncyArIFMzQzI0MTBfQURDQ09OKTsKLQotCWNvbiB8PSBTM0MyNDEwX0FEQ0NPTl9FTkFCTEVfU1RBUlQ7Ci0Jd3JpdGVsKGNvbiwgYWRjLT5yZWdzICsgUzNDMjQxMF9BRENDT04pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgczNjX2FkY19zZWxlY3Qoc3RydWN0IGFkY19kZXZpY2UgKmFkYywKLQkJCQkgIHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50KQotewotCXVuc2lnbmVkIGNvbiA9IHJlYWRsKGFkYy0+cmVncyArIFMzQzI0MTBfQURDQ09OKTsKLQotCWNsaWVudC0+c2VsZWN0X2NiKGNsaWVudCwgMSk7Ci0KLQljb24gJj0gflMzQzI0MTBfQURDQ09OX01VWE1BU0s7Ci0JY29uICY9IH5TM0MyNDEwX0FEQ0NPTl9TVERCTTsKLQljb24gJj0gflMzQzI0MTBfQURDQ09OX1NUQVJUTUFTSzsKLQotCWlmICghY2xpZW50LT5pc190cykKLQkJY29uIHw9IFMzQzI0MTBfQURDQ09OX1NFTE1VWChjbGllbnQtPmNoYW5uZWwpOwotCi0Jd3JpdGVsKGNvbiwgYWRjLT5yZWdzICsgUzNDMjQxMF9BRENDT04pOwotfQotCi1zdGF0aWMgdm9pZCBzM2NfYWRjX2RiZ3Nob3coc3RydWN0IGFkY19kZXZpY2UgKmFkYykKLXsKLQlhZGNfZGJnKGFkYywgIkNPTj0lMDh4LCBUU0M9JTA4eCwgRExZPSUwOHhcbiIsCi0JCXJlYWRsKGFkYy0+cmVncyArIFMzQzI0MTBfQURDQ09OKSwKLQkJcmVhZGwoYWRjLT5yZWdzICsgUzNDMjQxMF9BRENUU0MpLAotCQlyZWFkbChhZGMtPnJlZ3MgKyBTM0MyNDEwX0FEQ0RMWSkpOwotfQotCi1zdGF0aWMgdm9pZCBzM2NfYWRjX3RyeShzdHJ1Y3QgYWRjX2RldmljZSAqYWRjKQotewotCXN0cnVjdCBzM2NfYWRjX2NsaWVudCAqbmV4dCA9IGFkYy0+dHNfcGVuZDsKLQotCWlmICghbmV4dCAmJiAhbGlzdF9lbXB0eSgmYWRjX3BlbmRpbmcpKSB7Ci0JCW5leHQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhZGNfcGVuZGluZywKLQkJCQkJc3RydWN0IHMzY19hZGNfY2xpZW50LCBwZW5kKTsKLQkJbGlzdF9kZWwoJm5leHQtPnBlbmQpOwotCX0gZWxzZQotCQlhZGMtPnRzX3BlbmQgPSBOVUxMOwotCi0JaWYgKG5leHQpIHsKLQkJYWRjX2RiZyhhZGMsICJuZXcgY2xpZW50IGlzICVwXG4iLCBuZXh0KTsKLQkJYWRjLT5jdXIgPSBuZXh0OwotCQlzM2NfYWRjX3NlbGVjdChhZGMsIG5leHQpOwotCQlzM2NfYWRjX2NvbnZlcnQoYWRjKTsKLQkJczNjX2FkY19kYmdzaG93KGFkYyk7Ci0JfQotfQotCi1pbnQgczNjX2FkY19zdGFydChzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwKLQkJICB1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IG5yX3NhbXBsZXMpCi17Ci0Jc3RydWN0IGFkY19kZXZpY2UgKmFkYyA9IGFkY19kZXY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmICghYWRjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBmaW5kIGFkY1xuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoY2xpZW50LT5pc190cyAmJiBhZGMtPnRzX3BlbmQpCi0JCXJldHVybiAtRUFHQUlOOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JY2xpZW50LT5jaGFubmVsID0gY2hhbm5lbDsKLQljbGllbnQtPm5yX3NhbXBsZXMgPSBucl9zYW1wbGVzOwotCi0JaWYgKGNsaWVudC0+aXNfdHMpCi0JCWFkYy0+dHNfcGVuZCA9IGNsaWVudDsKLQllbHNlCi0JCWxpc3RfYWRkX3RhaWwoJmNsaWVudC0+cGVuZCwgJmFkY19wZW5kaW5nKTsKLQotCWlmICghYWRjLT5jdXIpCi0JCXMzY19hZGNfdHJ5KGFkYyk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChzM2NfYWRjX3N0YXJ0KTsKLQotc3RhdGljIHZvaWQgczNjX2NvbnZlcnRfZG9uZShzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwKLQkJCSAgICAgdW5zaWduZWQgdiwgdW5zaWduZWQgdSwgdW5zaWduZWQgKmxlZnQpCi17Ci0JY2xpZW50LT5yZXN1bHQgPSB2OwotCXdha2VfdXAoY2xpZW50LT53YWl0KTsKLX0KLQotaW50IHMzY19hZGNfcmVhZChzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNoKQotewotCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEX09OU1RBQ0sod2FrZSk7Ci0JaW50IHJldDsKLQotCWNsaWVudC0+Y29udmVydF9jYiA9IHMzY19jb252ZXJ0X2RvbmU7Ci0JY2xpZW50LT53YWl0ID0gJndha2U7Ci0JY2xpZW50LT5yZXN1bHQgPSAtMTsKLQotCXJldCA9IHMzY19hZGNfc3RhcnQoY2xpZW50LCBjaCwgMSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gZXJyOwotCi0JcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KHdha2UsIGNsaWVudC0+cmVzdWx0ID49IDAsIEhaIC8gMik7Ci0JaWYgKGNsaWVudC0+cmVzdWx0IDwgMCkgewotCQlyZXQgPSAtRVRJTUVET1VUOwotCQlnb3RvIGVycjsKLQl9Ci0KLQljbGllbnQtPmNvbnZlcnRfY2IgPSBOVUxMOwotCXJldHVybiBjbGllbnQtPnJlc3VsdDsKLQotZXJyOgotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChzM2NfYWRjX3JlYWQpOwotCi1zdGF0aWMgdm9pZCBzM2NfYWRjX2RlZmF1bHRfc2VsZWN0KHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50LAotCQkJCSAgIHVuc2lnbmVkIHNlbGVjdCkKLXsKLX0KLQotc3RydWN0IHMzY19hZGNfY2xpZW50ICpzM2NfYWRjX3JlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCi0JCQkJCXZvaWQgKCpzZWxlY3QpKHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50LAotCQkJCQkJICAgICAgIHVuc2lnbmVkIGludCBzZWxlY3RlZCksCi0JCQkJCXZvaWQgKCpjb252KShzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwKLQkJCQkJCSAgICAgdW5zaWduZWQgZDAsIHVuc2lnbmVkIGQxLAotCQkJCQkJICAgICB1bnNpZ25lZCAqc2FtcGxlc19sZWZ0KSwKLQkJCQkJdW5zaWduZWQgaW50IGlzX3RzKQotewotCXN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50OwotCi0JV0FSTl9PTighcGRldik7Ci0KLQlpZiAoIXNlbGVjdCkKLQkJc2VsZWN0ID0gczNjX2FkY19kZWZhdWx0X3NlbGVjdDsKLQotCWlmICghcGRldikKLQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Ci0KLQljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczNjX2FkY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNsaWVudCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgZm9yIGFkYyBjbGllbnRcbiIpOwotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQl9Ci0KLQljbGllbnQtPnBkZXYgPSBwZGV2OwotCWNsaWVudC0+aXNfdHMgPSBpc190czsKLQljbGllbnQtPnNlbGVjdF9jYiA9IHNlbGVjdDsKLQljbGllbnQtPmNvbnZlcnRfY2IgPSBjb252OwotCi0JcmV0dXJuIGNsaWVudDsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHMzY19hZGNfcmVnaXN0ZXIpOwotCi12b2lkIHMzY19hZGNfcmVsZWFzZShzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCkKLXsKLQkvKiBXZSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoYXQgbm90aGluZyBpcyBpbiBwcm9ncmVzcy4gKi8KLQlpZiAoYWRjX2Rldi0+Y3VyID09IGNsaWVudCkKLQkJYWRjX2Rldi0+Y3VyID0gTlVMTDsKLQlpZiAoYWRjX2Rldi0+dHNfcGVuZCA9PSBjbGllbnQpCi0JCWFkY19kZXYtPnRzX3BlbmQgPSBOVUxMOwotCWVsc2UgewotCQlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqbjsKLQkJc3RydWN0IHMzY19hZGNfY2xpZW50ICp0bXA7Ci0KLQkJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZhZGNfcGVuZGluZykgewotCQkJdG1wID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgczNjX2FkY19jbGllbnQsIHBlbmQpOwotCQkJaWYgKHRtcCA9PSBjbGllbnQpCi0JCQkJbGlzdF9kZWwoJnRtcC0+cGVuZCk7Ci0JCX0KLQl9Ci0KLQlpZiAoYWRjX2Rldi0+Y3VyID09IE5VTEwpCi0JCXMzY19hZGNfdHJ5KGFkY19kZXYpOwotCWtmcmVlKGNsaWVudCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChzM2NfYWRjX3JlbGVhc2UpOwotCi1zdGF0aWMgaXJxcmV0dXJuX3QgczNjX2FkY19pcnEoaW50IGlycSwgdm9pZCAqcHcpCi17Ci0Jc3RydWN0IGFkY19kZXZpY2UgKmFkYyA9IHB3OwotCXN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50ID0gYWRjLT5jdXI7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBkYXRhMCwgZGF0YTE7Ci0KLQlpZiAoIWNsaWVudCkgewotCQlkZXZfd2FybigmYWRjLT5wZGV2LT5kZXYsICIlczogbm8gYWRjIHBlbmRpbmdcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIElSUV9IQU5ETEVEOwotCX0KLQotCWRhdGEwID0gcmVhZGwoYWRjLT5yZWdzICsgUzNDMjQxMF9BRENEQVQwKTsKLQlkYXRhMSA9IHJlYWRsKGFkYy0+cmVncyArIFMzQzI0MTBfQURDREFUMSk7Ci0JYWRjX2RiZyhhZGMsICJyZWFkICVkOiAweCUwNHgsIDB4JTA0eFxuIiwgY2xpZW50LT5ucl9zYW1wbGVzLCBkYXRhMCwgZGF0YTEpOwotCi0JY2xpZW50LT5ucl9zYW1wbGVzLS07Ci0KLQlpZiAoY2xpZW50LT5jb252ZXJ0X2NiKQotCQkoY2xpZW50LT5jb252ZXJ0X2NiKShjbGllbnQsIGRhdGEwICYgMHgzZmYsIGRhdGExICYgMHgzZmYsCi0JCQkJICAgICAmY2xpZW50LT5ucl9zYW1wbGVzKTsKLQotCWlmIChjbGllbnQtPm5yX3NhbXBsZXMgPiAwKSB7Ci0JCS8qIGZpcmUgYW5vdGhlciBjb252ZXJzaW9uIGZvciB0aGlzICovCi0KLQkJY2xpZW50LT5zZWxlY3RfY2IoY2xpZW50LCAxKTsKLQkJczNjX2FkY19jb252ZXJ0KGFkYyk7Ci0JfSBlbHNlIHsKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQkoY2xpZW50LT5zZWxlY3RfY2IpKGNsaWVudCwgMCk7Ci0JCWFkYy0+Y3VyID0gTlVMTDsKLQotCQlzM2NfYWRjX3RyeShhZGMpOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JfQotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaW50IHMzY19hZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OwotCXN0cnVjdCBhZGNfZGV2aWNlICphZGM7Ci0Jc3RydWN0IHJlc291cmNlICpyZWdzOwotCWludCByZXQ7Ci0KLQlhZGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWRjX2RldmljZSksIEdGUF9LRVJORUwpOwotCWlmIChhZGMgPT0gTlVMTCkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBhZGNfZGV2aWNlXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JYWRjLT5wZGV2ID0gcGRldjsKLQlhZGMtPnByZXNjYWxlID0gUzNDMjQxMF9BRENDT05fUFJTQ1ZMKDQ5KTsKLQotCWFkYy0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKLQlpZiAoYWRjLT5pcnEgPD0gMCkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgYWRjIGlycVxuIik7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gZXJyX2FsbG9jOwotCX0KLQotCXJldCA9IHJlcXVlc3RfaXJxKGFkYy0+aXJxLCBzM2NfYWRjX2lycSwgMCwgZGV2X25hbWUoZGV2KSwgYWRjKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhdHRhY2ggYWRjIGlycVxuIik7Ci0JCWdvdG8gZXJyX2FsbG9jOwotCX0KLQotCWFkYy0+Y2xrID0gY2xrX2dldChkZXYsICJhZGMiKTsKLQlpZiAoSVNfRVJSKGFkYy0+Y2xrKSkgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgYWRjIGNsb2NrXG4iKTsKLQkJcmV0ID0gUFRSX0VSUihhZGMtPmNsayk7Ci0JCWdvdG8gZXJyX2lycTsKLQl9Ci0KLQlyZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAoIXJlZ3MpIHsKLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZmluZCByZWdpc3RlcnNcbiIpOwotCQlyZXQgPSAtRU5YSU87Ci0JCWdvdG8gZXJyX2NsazsKLQl9Ci0KLQlhZGMtPnJlZ3MgPSBpb3JlbWFwKHJlZ3MtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlZ3MpKTsKLQlpZiAoIWFkYy0+cmVncykgewotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzXG4iKTsKLQkJcmV0ID0gLUVOWElPOwotCQlnb3RvIGVycl9jbGs7Ci0JfQotCi0JY2xrX2VuYWJsZShhZGMtPmNsayk7Ci0KLQl3cml0ZWwoYWRjLT5wcmVzY2FsZSB8IFMzQzI0MTBfQURDQ09OX1BSU0NFTiwKLQkgICAgICAgYWRjLT5yZWdzICsgUzNDMjQxMF9BRENDT04pOwotCi0JZGV2X2luZm8oZGV2LCAiYXR0YWNoZWQgYWRjIGRyaXZlclxuIik7Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBhZGMpOwotCWFkY19kZXYgPSBhZGM7Ci0KLQlyZXR1cm4gMDsKLQotIGVycl9jbGs6Ci0JY2xrX3B1dChhZGMtPmNsayk7Ci0KLSBlcnJfaXJxOgotCWZyZWVfaXJxKGFkYy0+aXJxLCBhZGMpOwotCi0gZXJyX2FsbG9jOgotCWtmcmVlKGFkYyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBfX2RldmV4aXQgczNjX2FkY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgYWRjX2RldmljZSAqYWRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Ci0KLQlpb3VubWFwKGFkYy0+cmVncyk7Ci0JZnJlZV9pcnEoYWRjLT5pcnEsIGFkYyk7Ci0JY2xrX2Rpc2FibGUoYWRjLT5jbGspOwotCWNsa19wdXQoYWRjLT5jbGspOwotCWtmcmVlKGFkYyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBzM2NfYWRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBhZGNfZGV2aWNlICphZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQl1MzIgY29uOwotCi0JY29uID0gcmVhZGwoYWRjLT5yZWdzICsgUzNDMjQxMF9BRENDT04pOwotCWNvbiB8PSBTM0MyNDEwX0FEQ0NPTl9TVERCTTsKLQl3cml0ZWwoY29uLCBhZGMtPnJlZ3MgKyBTM0MyNDEwX0FEQ0NPTik7Ci0KLQljbGtfZGlzYWJsZShhZGMtPmNsayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzM2NfYWRjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBhZGNfZGV2aWNlICphZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQotCWNsa19lbmFibGUoYWRjLT5jbGspOwotCi0Jd3JpdGVsKGFkYy0+cHJlc2NhbGUgfCBTM0MyNDEwX0FEQ0NPTl9QUlNDRU4sCi0JICAgICAgIGFkYy0+cmVncyArIFMzQzI0MTBfQURDQ09OKTsKLQotCXJldHVybiAwOwotfQotCi0jZWxzZQotI2RlZmluZSBzM2NfYWRjX3N1c3BlbmQgTlVMTAotI2RlZmluZSBzM2NfYWRjX3Jlc3VtZSBOVUxMCi0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjX2FkY19kcml2ZXIgPSB7Ci0JLmRyaXZlcgkJPSB7Ci0JCS5uYW1lCT0gInMzYzI0eHgtYWRjIiwKLQkJLm93bmVyCT0gVEhJU19NT0RVTEUsCi0JfSwKLQkucHJvYmUJCT0gczNjX2FkY19wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHMzY19hZGNfcmVtb3ZlKSwKLQkuc3VzcGVuZAk9IHMzY19hZGNfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMzY19hZGNfcmVzdW1lLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgYWRjX2luaXQodm9pZCkKLXsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzM2NfYWRjX2RyaXZlcik7Ci0JaWYgKHJldCkKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFkZCBhZGMgZHJpdmVyXG4iLCBfX2Z1bmNfXyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1hcmNoX2luaXRjYWxsKGFkY19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jbG9jay1kY2xrLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY2xvY2stZGNsay5jCmluZGV4IGFjMDYxYTEuLmNmOTdjYWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jbG9jay1kY2xrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2Nsb2NrLWRjbGsuYwpAQCAtMTYxLDE0ICsxNjEsMTggQEAKIAogLyogZXh0ZXJuYWwgY2xvY2sgZGVmaW5pdGlvbnMgKi8KIAorc3RhdGljIHN0cnVjdCBjbGtfb3BzIGRjbGtfb3BzID0geworCS5zZXRfcGFyZW50CT0gczNjMjR4eF9kY2xrX3NldHBhcmVudCwKKwkuc2V0X3JhdGUJPSBzM2MyNHh4X3NldF9kY2xrX3JhdGUsCisJLnJvdW5kX3JhdGUJPSBzM2MyNHh4X3JvdW5kX2RjbGtfcmF0ZSwKK307CisKIHN0cnVjdCBjbGsgczNjMjR4eF9kY2xrMCA9IHsKIAkubmFtZQkJPSAiZGNsazAiLAogCS5pZAkJPSAtMSwKIAkuY3RybGJpdAk9IFMzQzI0MTBfRENMS0NPTl9EQ0xLMEVOLAogCS5lbmFibGUJICAgICAgICA9IHMzYzI0eHhfZGNsa19lbmFibGUsCi0JLnNldF9wYXJlbnQJPSBzM2MyNHh4X2RjbGtfc2V0cGFyZW50LAotCS5zZXRfcmF0ZQk9IHMzYzI0eHhfc2V0X2RjbGtfcmF0ZSwKLQkucm91bmRfcmF0ZQk9IHMzYzI0eHhfcm91bmRfZGNsa19yYXRlLAorCS5vcHMJCT0gJmRjbGtfb3BzLAogfTsKIAogc3RydWN0IGNsayBzM2MyNHh4X2RjbGsxID0gewpAQCAtMTc2LDE5ICsxODAsMjEgQEAKIAkuaWQJCT0gLTEsCiAJLmN0cmxiaXQJPSBTM0MyNDEwX0RDTEtDT05fRENMSzFFTiwKIAkuZW5hYmxlCQk9IHMzYzI0eHhfZGNsa19lbmFibGUsCi0JLnNldF9wYXJlbnQJPSBzM2MyNHh4X2RjbGtfc2V0cGFyZW50LAotCS5zZXRfcmF0ZQk9IHMzYzI0eHhfc2V0X2RjbGtfcmF0ZSwKLQkucm91bmRfcmF0ZQk9IHMzYzI0eHhfcm91bmRfZGNsa19yYXRlLAorCS5vcHMJCT0gJmRjbGtfb3BzLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIGNsa291dF9vcHMgPSB7CisJLnNldF9wYXJlbnQJPSBzM2MyNHh4X2Nsa291dF9zZXRwYXJlbnQsCiB9OwogCiBzdHJ1Y3QgY2xrIHMzYzI0eHhfY2xrb3V0MCA9IHsKIAkubmFtZQkJPSAiY2xrb3V0MCIsCiAJLmlkCQk9IC0xLAotCS5zZXRfcGFyZW50CT0gczNjMjR4eF9jbGtvdXRfc2V0cGFyZW50LAorCS5vcHMJCT0gJmNsa291dF9vcHMsCiB9OwogCiBzdHJ1Y3QgY2xrIHMzYzI0eHhfY2xrb3V0MSA9IHsKIAkubmFtZQkJPSAiY2xrb3V0MSIsCiAJLmlkCQk9IC0xLAotCS5zZXRfcGFyZW50CT0gczNjMjR4eF9jbGtvdXRfc2V0cGFyZW50LAorCS5vcHMJCT0gJmNsa291dF9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2NwdS5jCmluZGV4IDRhZjlkZDkuLjljYTY0ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9jcHUuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY3B1LmMKQEAgLTQ5LDkgKzQ5LDcgQEAKICNpbmNsdWRlIDxwbGF0L3MzYzI0MDAuaD4KICNpbmNsdWRlIDxwbGF0L3MzYzI0MTAuaD4KICNpbmNsdWRlIDxwbGF0L3MzYzI0MTIuaD4KLSNpbmNsdWRlICJzM2MyNDR4LmgiCi0jaW5jbHVkZSA8cGxhdC9zM2MyNDQwLmg+Ci0jaW5jbHVkZSA8cGxhdC9zM2MyNDQyLmg+CisjaW5jbHVkZSA8cGxhdC9zM2MyNDR4Lmg+CiAjaW5jbHVkZSA8cGxhdC9zM2MyNDQzLmg+CiAKIC8qIHRhYmxlIG9mIHN1cHBvcnRlZCBDUFVzICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZGV2cy5jIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYwppbmRleCA3ZjY4NmEzLi44YzZkZTFjIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZGV2cy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kZXZzLmMKQEAgLTMyLDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KICNpbmNsdWRlIDxwbGF0L3VkYy5oPgorI2luY2x1ZGUgPHBsYXQvbWNpLmg+CiAKICNpbmNsdWRlIDxwbGF0L2RldnMuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgpAQCAtMTEyLDM0ICsxMTMsNiBAQAogCX0sCiB9OwogCi0vKiB5YXJ0IGRldmljZXMgKi8KLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjMjR4eF91YXJ0X2RldmljZTAgPSB7Ci0JLmlkCQk9IDAsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2MyNHh4X3VhcnRfZGV2aWNlMSA9IHsKLQkuaWQJCT0gMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzI0eHhfdWFydF9kZXZpY2UyID0gewotCS5pZAkJPSAyLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjMjR4eF91YXJ0X2RldmljZTMgPSB7Ci0JLmlkCQk9IDMsCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzM2MyNHh4X3VhcnRfc3JjWzRdID0gewotCSZzM2MyNHh4X3VhcnRfZGV2aWNlMCwKLQkmczNjMjR4eF91YXJ0X2RldmljZTEsCi0JJnMzYzI0eHhfdWFydF9kZXZpY2UyLAotCSZzM2MyNHh4X3VhcnRfZGV2aWNlMywKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnMzYzI0eHhfdWFydF9kZXZzWzRdID0gewotfTsKLQogLyogTENEIENvbnRyb2xsZXIgKi8KIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2NfbGNkX3Jlc291cmNlW10gPSB7CkBAIC0xODUsOSArMTU4LDI3IEBACiB9CiAKIC8qIFRvdWNoc2NyZWVuICovCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjX3RzX3Jlc291cmNlW10gPSB7CisJWzBdID0geworCQkuc3RhcnQgPSBTM0MyNFhYX1BBX0FEQywKKwkJLmVuZCAgID0gUzNDMjRYWF9QQV9BREMgKyBTM0MyNFhYX1NaX0FEQyAtIDEsCisJCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQgPSBJUlFfVEMsCisJCS5lbmQgICA9IElSUV9UQywKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKworfTsKKwogc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3RzID0gewogCS5uYW1lCQkgID0gInMzYzI0MTAtdHMiLAogCS5pZAkJICA9IC0xLAorCS5kZXYucGFyZW50CT0gJnMzY19kZXZpY2VfYWRjLmRldiwKKwkubnVtX3Jlc291cmNlcwkgID0gQVJSQVlfU0laRShzM2NfdHNfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQkgID0gczNjX3RzX3Jlc291cmNlLAogfTsKIEVYUE9SVF9TWU1CT0woczNjX2RldmljZV90cyk7CiAKQEAgLTM3OSw2ICszNzAsMTggQEAKIAogRVhQT1JUX1NZTUJPTChzM2NfZGV2aWNlX3NkaSk7CiAKK3ZvaWQgczNjMjR4eF9tY2lfc2V0X3BsYXRkYXRhKHN0cnVjdCBzM2MyNHh4X21jaV9wZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IHMzYzI0eHhfbWNpX3BkYXRhICpucGQ7CisKKwlucGQgPSBrbWVtZHVwKHBkYXRhLCBzaXplb2Yoc3RydWN0IHMzYzI0eHhfbWNpX3BkYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFucGQpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIG1lbW9yeSB0byBjb3B5IHBkYXRhIiwgX19mdW5jX18pOworCisJczNjX2RldmljZV9zZGkuZGV2LnBsYXRmb3JtX2RhdGEgPSBucGQ7Cit9CisKKwogLyogU1BJICgwKSAqLwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY19zcGkwX3Jlc291cmNlW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZG1hLmMKaW5kZXggZjBlYTc5NC4uOTM4MjdiMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RtYS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9kbWEuYwpAQCAtMzMsNyArMzMsNyBAQAogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9tYXAuaD4KIAotI2luY2x1ZGUgPHBsYXQvZG1hLXBsYXQuaD4KKyNpbmNsdWRlIDxwbGF0L2RtYS1zM2MyNHh4Lmg+CiAjaW5jbHVkZSA8cGxhdC9yZWdzLWRtYS5oPgogCiAvKiBpbyBtYXAgZm9yIGRtYSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2dwaW9saWIuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9ncGlvbGliLmMKaW5kZXggNmQ3YTk2MS4uNGYwZjExYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2dwaW9saWIuYworKysgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvZ3Bpb2xpYi5jCkBAIC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2dwaW8tY29yZS5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1jb3JlLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxwbGF0L3BtLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2F1ZGlvLXNpbXRlYy5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9hdWRpby1zaW10ZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTVlODhmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9hdWRpby1zaW10ZWMuaApAQCAtMCwwICsxLDM3IEBACisvKiBhcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L2F1ZGlvLXNpbXRlYy5oCisgKgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogU2ltdGVjIEF1ZGlvIHN1cHBvcnQuCisqLworCisvKioKKyAqIHN0cnVjdCBzM2MyNHh4X2F1ZGlvX3NpbXRlY19wZGF0YSAtIHBsYXRmb3JtIGRhdGEgZm9yIHNpbXRlYyBhdWRpbworICogQHVzZV9tcGxsaW46IFNlbGVjdCBjb2RlYyBjbG9jayBmcm9tIE1QTExpbgorICogQG91dHB1dF9jZGNsazogTmVlZCB0byBvdXRwdXQgQ0RDTEsgdG8gdGhlIGNvZGVjCisgKiBAaGF2ZV9taWM6IFNldCBpZiB3ZSBoYXZlIGEgTUlDIHNvY2tldAorICogQGhhdmVfbG91dDogU2V0IGlmIHdlIGhhdmUgYSBMaW5lT3V0IHNvY2tldAorICogQGFtcF9ncGlvOiBHUElPIHBpbiB0byBlbmFibGUgdGhlIEFNUAorICogQGFtcF9nYWluOiBPcHRpb24gR1BJTyB0byBjb250cm9sIEFNUCBnYWluCisgKi8KK3N0cnVjdCBzM2MyNHh4X2F1ZGlvX3NpbXRlY19wZGF0YSB7CisJdW5zaWduZWQgaW50CXVzZV9tcGxsaW46MTsKKwl1bnNpZ25lZCBpbnQJb3V0cHV0X2NkY2xrOjE7CisKKwl1bnNpZ25lZCBpbnQJaGF2ZV9taWM6MTsKKwl1bnNpZ25lZCBpbnQJaGF2ZV9sb3V0OjE7CisKKwlpbnQJCWFtcF9ncGlvOworCWludAkJYW1wX2dhaW5bMl07CisKKwl2b2lkCSgqc3RhcnR1cCkodm9pZCk7Cit9OworCitleHRlcm4gaW50IHNpbXRlY19hdWRpb19hZGQoY29uc3QgY2hhciAqY29kZWNfbmFtZSwgYm9vbCBoYXNfbHJfcm91dGluZywKKwkJCSAgICBzdHJ1Y3QgczNjMjR4eF9hdWRpb19zaW10ZWNfcGRhdGEgKnBkYXRhKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvY3B1LWZyZXEtY29yZS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9jcHUtZnJlcS1jb3JlLmgKaW5kZXggMzNkNDIxZC4uZDYyMzIzNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9jcHUtZnJlcS1jb3JlLmgKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9jcHUtZnJlcS1jb3JlLmgKQEAgLTEzNSw3ICsxMzUsNyBAQAogICogQGxvY2t0aW1lX206IFRoZSBsb2NrLXRpbWUgaW4gdVMgZm9yIHRoZSBNUExMLgogICogQGxvY2t0aW1lX3U6IFRoZSBsb2NrLXRpbWUgaW4gdVMgZm9yIHRoZSBVUExMLgogICogQGxvY3R0aW1lX2JpdHM6IFRoZSBudW1iZXIgb2YgYml0cyBlYWNoIExPQ0tUSU1FIGZpZWxkLgotICogQG5lZWRfcGxsOiBTZXQgaWYgdGhpcyBkcml2ZXIgbmVlZHMgdG8gY2hhbmdlIHRoZSBQTEwgdmFsdWVzIHRvIGFjaGVpdmUKKyAqIEBuZWVkX3BsbDogU2V0IGlmIHRoaXMgZHJpdmVyIG5lZWRzIHRvIGNoYW5nZSB0aGUgUExMIHZhbHVlcyB0byBhY2hpZXZlCiAgKglhbnkgZnJlcXVlbmN5IGNoYW5nZXMuIFRoaXMgaXMgcmVhbGx5IG9ubHkgbmVlZCBieSBkZXZpY2VzIGxpa2UgdGhlCiAgKglTM0MyNDEwIHdoZXJlIHRoZXJlIGlzIG5vIG9yIGxpbWl0ZWQgZGl2aWRlciBiZXR3ZWVuIHRoZSBQTEwgYW5kIHRoZQogICoJQVJNQ0xLLgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9kbWEtcGxhdC5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9kbWEtcGxhdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NTY1ZWFkLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvZG1hLXBsYXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDg0ICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvZG1hLXBsYXQuaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBTYW1zdW5nIFMzQzI0WFggRE1BIHN1cHBvcnQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2luY2x1ZGUgPHBsYXQvZG1hLWNvcmUuaD4KLQotZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgZG1hX3N5c2NsYXNzOwotZXh0ZXJuIHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuIHMzYzI0MTBfY2hhbnNbUzNDX0RNQV9DSEFOTkVMU107Ci0KLSNkZWZpbmUgRE1BX0NIX1ZBTElECQkoMTw8MzEpCi0jZGVmaW5lIERNQV9DSF9ORVZFUgkJKDE8PDMwKQotCi1zdHJ1Y3QgczNjMjR4eF9kbWFfYWRkciB7Ci0JdW5zaWduZWQgbG9uZwkJZnJvbTsKLQl1bnNpZ25lZCBsb25nCQl0bzsKLX07Ci0KLS8qIHN0cnVjdCBzM2MyNHh4X2RtYV9tYXAKLSAqCi0gKiB0aGlzIGhvbGRzIHRoZSBtYXBwaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgY2hhbm5lbCBzZWxlY3RlZAotICogdG8gYmUgY29ubmVjdGVkIHRvIHRoZSBzcGVjaWZpZWQgZGV2aWNlCi0qLwotCi1zdHJ1Y3QgczNjMjR4eF9kbWFfbWFwIHsKLQljb25zdCBjaGFyCQkqbmFtZTsKLQlzdHJ1Y3QgczNjMjR4eF9kbWFfYWRkciAgaHdfYWRkcjsKLQotCXVuc2lnbmVkIGxvbmcJCSBjaGFubmVsc1tTM0NfRE1BX0NIQU5ORUxTXTsKLQl1bnNpZ25lZCBsb25nCQkgY2hhbm5lbHNfcnhbUzNDX0RNQV9DSEFOTkVMU107Ci19OwotCi1zdHJ1Y3QgczNjMjR4eF9kbWFfc2VsZWN0aW9uIHsKLQlzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwCSptYXA7Ci0JdW5zaWduZWQgbG9uZwkJIG1hcF9zaXplOwotCXVuc2lnbmVkIGxvbmcJCSBkY29uX21hc2s7Ci0KLQl2b2lkCSgqc2VsZWN0KShzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiwKLQkJCSAgc3RydWN0IHMzYzI0eHhfZG1hX21hcCAqbWFwKTsKLQotCXZvaWQJKCpkaXJlY3Rpb24pKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuLAotCQkJICAgICBzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwICptYXAsCi0JCQkgICAgIGVudW0gczNjMjQxMF9kbWFzcmMgZGlyKTsKLX07Ci0KLWV4dGVybiBpbnQgczNjMjR4eF9kbWFfaW5pdF9tYXAoc3RydWN0IHMzYzI0eHhfZG1hX3NlbGVjdGlvbiAqc2VsKTsKLQotLyogc3RydWN0IHMzYzI0eHhfZG1hX29yZGVyX2NoCi0gKgotICogY2hhbm5lbCBtYXAgZm9yIG9uZSBvZiB0aGUgYGVudW0gZG1hX2NoYCBkbWEgY2hhbm5lbHMuIHRoZSBsaXN0Ci0gKiBlbnRyeSBjb250YWlucyBhIHNldCBvZiBsb3ctbGV2ZWwgY2hhbm5lbCBudW1iZXJzLCBvcnJlZCB3aXRoCi0gKiBETUFfQ0hfVkFMSUQsIHdoaWNoIGFyZSBjaGVja2VkIGluIHRoZSBvcmRlciBpbiB0aGUgYXJyYXkuCi0qLwotCi1zdHJ1Y3QgczNjMjR4eF9kbWFfb3JkZXJfY2ggewotCXVuc2lnbmVkIGludAlsaXN0W1MzQ19ETUFfQ0hBTk5FTFNdOwkvKiBsaXN0IG9mIGNoYW5uZWxzICovCi0JdW5zaWduZWQgaW50CWZsYWdzOwkJCQkvKiBmbGFncyAqLwotfTsKLQotLyogc3RydWN0IHMzYzI0eHhfZG1hX29yZGVyCi0gKgotICogaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgZWl0aGVyIHRoZSBjb3JlIG9yIHRoZSBib2FyZCB0byBnaXZlIHRoZQotICogZG1hIHN5c3RlbSBhIGhpbnQgb24gaG93IHRvIGFsbG9jYXRlIGNoYW5uZWxzCi0qLwotCi1zdHJ1Y3QgczNjMjR4eF9kbWFfb3JkZXIgewotCXN0cnVjdCBzM2MyNHh4X2RtYV9vcmRlcl9jaAljaGFubmVsc1tETUFDSF9NQVhdOwotfTsKLQotZXh0ZXJuIGludCBzM2MyNHh4X2RtYV9vcmRlcl9zZXQoc3RydWN0IHMzYzI0eHhfZG1hX29yZGVyICptYXApOwotCi0vKiBETUEgaW5pdCBjb2RlLCBjYWxsZWQgZnJvbSB0aGUgY3B1IHN1cHBvcnQgY29kZSAqLwotCi1leHRlcm4gaW50IHMzYzI0MTBfZG1hX2luaXQodm9pZCk7Ci0KLWV4dGVybiBpbnQgczNjMjR4eF9kbWFfaW5pdCh1bnNpZ25lZCBpbnQgY2hhbm5lbHMsIHVuc2lnbmVkIGludCBpcnEsCi0JCQkgICAgdW5zaWduZWQgaW50IHN0cmlkZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L21jaS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9tY2kuaAppbmRleCAzNmFhYTEwLi4yYWMyYjIxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L21jaS5oCisrKyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvbWNpLmgKQEAgLTQwLDQgKzQwLDEzIEBACiAJCQkJICAgICB1bnNpZ25lZCBzaG9ydCB2ZGQpOwogfTsKIAorLyoqCisgKiBzM2MyNHh4X21jaV9zZXRfcGxhdGRhdGEgLSBzZXQgcGxhdGZvcm0gZGF0YSBmb3IgbW1jL3NkaSBkZXZpY2UKKyAqIEBwZGF0YTogVGhlIHBsYXRmb3JtIGRhdGEKKyAqCisgKiBDb3B5IHRoZSBwbGF0Zm9ybSBkYXRhIHN1cHBsaWVkIGJ5IEBwZGF0YSBzbyB0aGF0IHRoaXMgY2FuIGJlIG1hcmtlZAorICogX19pbml0ZGF0YS4KKyAqLworZXh0ZXJuIHZvaWQgczNjMjR4eF9tY2lfc2V0X3BsYXRkYXRhKHN0cnVjdCBzM2MyNHh4X21jaV9wZGF0YSAqcGRhdGEpOworCiAjZW5kaWYgLyogX0FSQ0hfTkNJX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvcG0tY29yZS5oIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9wbS1jb3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiNDVkZDkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9wbS1jb3JlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3BsbC5oCi0gKgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBTM0MyNHh4IC0gUE0gY29yZSBzdXBwb3J0IGZvciBhcmNoL2FybS9wbGF0LXMzYy9wbS5jCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgczNjX3BtX2RlYnVnX2luaXRfdWFydCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgdG1wID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtDT04pOwotCi0JLyogcmUtc3RhcnQgdWFydCBjbG9ja3MgKi8KLQl0bXAgfD0gUzNDMjQxMF9DTEtDT05fVUFSVDA7Ci0JdG1wIHw9IFMzQzI0MTBfQ0xLQ09OX1VBUlQxOwotCXRtcCB8PSBTM0MyNDEwX0NMS0NPTl9VQVJUMjsKLQotCV9fcmF3X3dyaXRlbCh0bXAsIFMzQzI0MTBfQ0xLQ09OKTsKLQl1ZGVsYXkoMTApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgczNjX3BtX2FyY2hfcHJlcGFyZV9pcnFzKHZvaWQpCi17Ci0JX19yYXdfd3JpdGVsKHMzY19pcnF3YWtlX2ludG1hc2ssIFMzQzI0MTBfSU5UTVNLKTsKLQlfX3Jhd193cml0ZWwoczNjX2lycXdha2VfZWludG1hc2ssIFMzQzI0MTBfRUlOVE1BU0spOwotCi0JLyogYWNrIGFueSBvdXRzdGFuZGluZyBleHRlcm5hbCBpbnRlcnJ1cHRzIGJlZm9yZSB3ZSBnbyB0byBzbGVlcCAqLwotCi0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFMzQzI0MTBfRUlOVFBFTkQpLCBTM0MyNDEwX0VJTlRQRU5EKTsKLQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoUzNDMjQxMF9JTlRQTkQpLCBTM0MyNDEwX0lOVFBORCk7Ci0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFMzQzI0MTBfU1JDUE5EKSwgUzNDMjQxMF9TUkNQTkQpOwotCi19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzM2NfcG1fYXJjaF9zdG9wX2Nsb2Nrcyh2b2lkKQotewotCV9fcmF3X3dyaXRlbCgweDAwLCBTM0MyNDEwX0NMS0NPTik7ICAvKiB0dXJuIG9mZiBjbG9ja3Mgb3ZlciBzbGVlcCAqLwotfQotCi1zdGF0aWMgdm9pZCBzM2NfcG1fc2hvd19yZXN1bWVfaXJxcyhpbnQgc3RhcnQsIHVuc2lnbmVkIGxvbmcgd2hpY2gsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgbWFzayk7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzM2NfcG1fYXJjaF9zaG93X3Jlc3VtZV9pcnFzKHZvaWQpCi17Ci0JUzNDX1BNREJHKCJwb3N0IHNsZWVwOiBJUlFzIDB4JTA4eCwgMHglMDh4XG4iLAotCQkgIF9fcmF3X3JlYWRsKFMzQzI0MTBfU1JDUE5EKSwKLQkJICBfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRQRU5EKSk7Ci0KLQlzM2NfcG1fc2hvd19yZXN1bWVfaXJxcyhJUlFfRUlOVDAsIF9fcmF3X3JlYWRsKFMzQzI0MTBfU1JDUE5EKSwKLQkJCQlzM2NfaXJxd2FrZV9pbnRtYXNrKTsKLQotCXMzY19wbV9zaG93X3Jlc3VtZV9pcnFzKElSUV9FSU5UNC00LCBfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRQRU5EKSwKLQkJCQlzM2NfaXJxd2FrZV9laW50bWFzayk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzM2NfcG1fYXJjaF91cGRhdGVfdWFydCh2b2lkIF9faW9tZW0gKnJlZ3MsCi0JCQkJCSAgIHN0cnVjdCBwbV91YXJ0X3NhdmUgKnNhdmUpCi17Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0NDAuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQ0MC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMDc4NTNiLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQ0MC5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyogbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQwLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBIZWFkZXIgZmlsZSBmb3IgczNjMjQ0MCBjcHUgc3VwcG9ydAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaWZkZWYgQ09ORklHX0NQVV9TM0MyNDQwCi1leHRlcm4gIGludCBzM2MyNDQwX2luaXQodm9pZCk7Ci0jZWxzZQotI2RlZmluZSBzM2MyNDQwX2luaXQgTlVMTAotI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0NDIuaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQ0Mi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTFhMjNhLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9pbmNsdWRlL3BsYXQvczNjMjQ0Mi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotLyogbGludXgvaW5jbHVkZS9hc20tYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQyLmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogSGVhZGVyIGZpbGUgZm9yIHMzYzI0NDIgY3B1IHN1cHBvcnQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2lmZGVmIENPTkZJR19DUFVfUzNDMjQ0MgotZXh0ZXJuICBpbnQgczNjMjQ0Ml9pbml0KHZvaWQpOwotI2Vsc2UKLSNkZWZpbmUgczNjMjQ0Ml9pbml0IE5VTEwKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDR4LmggYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvaW5jbHVkZS9wbGF0L3MzYzI0NHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDcyNDhkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDR4LmgKQEAgLTAsMCArMSwzNyBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2luY2x1ZGUvcGxhdC9zM2MyNDR4LmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBIZWFkZXIgZmlsZSBmb3IgUzNDMjQ0MCBhbmQgUzNDMjQ0MiBjcHUgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0NDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDQyKQorCitleHRlcm4gdm9pZCBzM2MyNDR4X21hcF9pbyh2b2lkKTsKKworZXh0ZXJuIHZvaWQgczNjMjQ0eF9pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKKworZXh0ZXJuIHZvaWQgczNjMjQ0eF9pbml0X2Nsb2NrcyhpbnQgeHRhbCk7CisKKyNlbHNlCisjZGVmaW5lIHMzYzI0NHhfaW5pdF9jbG9ja3MgTlVMTAorI2RlZmluZSBzM2MyNDR4X2luaXRfdWFydHMgTlVMTAorI2RlZmluZSBzM2MyNDR4X21hcF9pbyBOVUxMCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19DUFVfUzNDMjQ0MAorZXh0ZXJuICBpbnQgczNjMjQ0MF9pbml0KHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgczNjMjQ0MF9pbml0IE5VTEwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0NQVV9TM0MyNDQyCitleHRlcm4gIGludCBzM2MyNDQyX2luaXQodm9pZCk7CisjZWxzZQorI2RlZmluZSBzM2MyNDQyX2luaXQgTlVMTAorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0MC1wbGwtMTIwMDAwMDAuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQwLXBsbC0xMjAwMDAwMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OWY2NTAzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQwLXBsbC0xMjAwMDAwMC5jCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyogYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NDAtcGxsLTEyMDAwMDAwLmMKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNyBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKglWaW5jZW50IFNhbmRlcnMgPHZpbmNlQGFybS5saW51eC5vcmcudWs+Ci0gKgotICogUzNDMjQ0MC9TM0MyNDQyIENQVSBQTEwgdGFibGVzICgxMk1IeiBDcnlzdGFsKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLQotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0jaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS1jb3JlLmg+Ci0KLXN0YXRpYyBzdHJ1Y3QgY3B1ZnJlcV9mcmVxdWVuY3lfdGFibGUgczNjMjQ0MF9wbGxzXzEyW10gX19pbml0ZGF0YSA9IHsKLQl7IC5mcmVxdWVuY3kgPSA3NTAwMDAwMCwJLmluZGV4ID0gUExMVkFMKDB4NzUsIDMsIDMpLCAgfSwgCS8qIEZWY28gNjAwLjAwMDAwMCAqLwotCXsgLmZyZXF1ZW5jeSA9IDgwMDAwMDAwLAkuaW5kZXggPSBQTExWQUwoMHg5OCwgNCwgMyksICB9LCAJLyogRlZjbyA2NDAuMDAwMDAwICovCi0JeyAuZnJlcXVlbmN5ID0gOTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDcwLCAyLCAzKSwgIH0sIAkvKiBGVmNvIDcyMC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAxMDAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDVjLCAxLCAzKSwgIH0sIAkvKiBGVmNvIDgwMC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAxMTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDY2LCAxLCAzKSwgIH0sIAkvKiBGVmNvIDg4MC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAxMjAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDcwLCAxLCAzKSwgIH0sIAkvKiBGVmNvIDk2MC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAxNTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDc1LCAzLCAyKSwgIH0sIAkvKiBGVmNvIDYwMC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAxNjAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDk4LCA0LCAyKSwgIH0sIAkvKiBGVmNvIDY0MC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAxNzAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDRkLCAxLCAyKSwgIH0sIAkvKiBGVmNvIDY4MC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAxODAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDcwLCAyLCAyKSwgIH0sIAkvKiBGVmNvIDcyMC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAxOTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDU3LCAxLCAyKSwgIH0sIAkvKiBGVmNvIDc2MC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAyMDAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDVjLCAxLCAyKSwgIH0sIAkvKiBGVmNvIDgwMC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAyMTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDg0LCAyLCAyKSwgIH0sIAkvKiBGVmNvIDg0MC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAyMjAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDY2LCAxLCAyKSwgIH0sIAkvKiBGVmNvIDg4MC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAyMzAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDZiLCAxLCAyKSwgIH0sIAkvKiBGVmNvIDkyMC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAyNDAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDcwLCAxLCAyKSwgIH0sIAkvKiBGVmNvIDk2MC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAzMDAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDc1LCAzLCAxKSwgIH0sIAkvKiBGVmNvIDYwMC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAzMTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDkzLCA0LCAxKSwgIH0sIAkvKiBGVmNvIDYyMC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAzMjAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDk4LCA0LCAxKSwgIH0sIAkvKiBGVmNvIDY0MC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAzMzAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDY2LCAyLCAxKSwgIH0sIAkvKiBGVmNvIDY2MC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAzNDAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDRkLCAxLCAxKSwgIH0sIAkvKiBGVmNvIDY4MC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAzNTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweGE3LCA0LCAxKSwgIH0sIAkvKiBGVmNvIDcwMC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAzNjAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDcwLCAyLCAxKSwgIH0sIAkvKiBGVmNvIDcyMC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAzNzAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweGIxLCA0LCAxKSwgIH0sIAkvKiBGVmNvIDc0MC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAzODAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDU3LCAxLCAxKSwgIH0sIAkvKiBGVmNvIDc2MC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAzOTAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDdhLCAyLCAxKSwgIH0sIAkvKiBGVmNvIDc4MC4wMDAwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSA0MDAwMDAwMDAsCS5pbmRleCA9IFBMTFZBTCgweDVjLCAxLCAxKSwgIH0sIAkvKiBGVmNvIDgwMC4wMDAwMDAgKi8KLX07Ci0KLXN0YXRpYyBpbnQgczNjMjQ0MF9wbGxzMTJfYWRkKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGNsayAqeHRhbF9jbGs7Ci0JdW5zaWduZWQgbG9uZyB4dGFsOwotCi0JeHRhbF9jbGsgPSBjbGtfZ2V0KE5VTEwsICJ4dGFsIik7Ci0JaWYgKElTX0VSUih4dGFsX2NsaykpCi0JCXJldHVybiBQVFJfRVJSKHh0YWxfY2xrKTsKLQotCXh0YWwgPSBjbGtfZ2V0X3JhdGUoeHRhbF9jbGspOwotCWNsa19wdXQoeHRhbF9jbGspOwotCi0JaWYgKHh0YWwgPT0gMTIwMDAwMDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgUExMIHRhYmxlIGZvciAxMk1IeiBjcnlzdGFsXG4iKTsKLQkJcmV0dXJuIHMzY19wbGx0YWJfcmVnaXN0ZXIoczNjMjQ0MF9wbGxzXzEyLAotCQkJCQkgICBBUlJBWV9TSVpFKHMzYzI0NDBfcGxsc18xMikpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0MF9wbGxzMTJfZHJ2ID0gewotCS5hZGQJPSBzM2MyNDQwX3BsbHMxMl9hZGQsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzM2MyNDQwX3BsbF8xMm1oeih2b2lkKQotewotCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQwX3N5c2NsYXNzLCAmczNjMjQ0MF9wbGxzMTJfZHJ2KTsKLQotfQotCi1hcmNoX2luaXRjYWxsKHMzYzI0NDBfcGxsXzEybWh6KTsKLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDJfcGxsczEyX2RydiA9IHsKLQkuYWRkCT0gczNjMjQ0MF9wbGxzMTJfYWRkLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgczNjMjQ0Ml9wbGxfMTJtaHoodm9pZCkKLXsKLQlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQ0Ml9zeXNjbGFzcywgJnMzYzI0NDJfcGxsczEyX2Rydik7Ci0KLX0KLQotYXJjaF9pbml0Y2FsbChzM2MyNDQyX3BsbF8xMm1oeik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0MC1wbGwtMTY5MzQ0MDAuYyBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQwLXBsbC0xNjkzNDQwMC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3Njc5YWYxLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQwLXBsbC0xNjkzNDQwMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI3ICswLDAgQEAKLS8qIGFyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDQwLXBsbC0xNjkzNDQwMC5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoJVmluY2VudCBTYW5kZXJzIDx2aW5jZUBhcm0ubGludXgub3JnLnVrPgotICoKLSAqIFMzQzI0NDAvUzNDMjQ0MiBDUFUgUExMIHRhYmxlcyAoMTYuOTM0NDRNSHogQ3J5c3RhbCkKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2xrLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgotI2luY2x1ZGUgPHBsYXQvY3B1LWZyZXEtY29yZS5oPgotCi1zdGF0aWMgc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlIHMzYzI0NDBfcGxsc18xNjkzNDRbXSBfX2luaXRkYXRhID0gewotCXsgLmZyZXF1ZW5jeSA9IDc4MDE5MjAwLAkuaW5kZXggPSBQTExWQUwoMTIxLCA1LCAzKSwgCX0sIAkvKiBGVmNvIDYyNC4xNTM2MDAgKi8KLQl7IC5mcmVxdWVuY3kgPSA4NDA2NzIwMCwJLmluZGV4ID0gUExMVkFMKDEzMSwgNSwgMyksIAl9LCAJLyogRlZjbyA2NzIuNTM3NjAwICovCi0JeyAuZnJlcXVlbmN5ID0gOTAxMTUyMDAsCS5pbmRleCA9IFBMTFZBTCgxNDEsIDUsIDMpLCAJfSwgCS8qIEZWY28gNzIwLjkyMTYwMCAqLwotCXsgLmZyZXF1ZW5jeSA9IDk2MTYzMjAwLAkuaW5kZXggPSBQTExWQUwoMTUxLCA1LCAzKSwgCX0sIAkvKiBGVmNvIDc2OS4zMDU2MDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAxMDIxMzU2MDAsCS5pbmRleCA9IFBMTFZBTCgxODUsIDYsIDMpLCAJfSwgCS8qIEZWY28gODE3LjA4NDgwMCAqLwotCXsgLmZyZXF1ZW5jeSA9IDEwODI1OTIwMCwJLmluZGV4ID0gUExMVkFMKDE3MSwgNSwgMyksIAl9LCAJLyogRlZjbyA4NjYuMDczNjAwICovCi0JeyAuZnJlcXVlbmN5ID0gMTE0MzA3MjAwLAkuaW5kZXggPSBQTExWQUwoMTI3LCAzLCAzKSwgCX0sIAkvKiBGVmNvIDkxNC40NTc2MDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAxMjAyMzQyNDAsCS5pbmRleCA9IFBMTFZBTCgxMzQsIDMsIDMpLCAJfSwgCS8qIEZWY28gOTYxLjg3MzkyMCAqLwotCXsgLmZyZXF1ZW5jeSA9IDEyNjE2MTI4MCwJLmluZGV4ID0gUExMVkFMKDE0MSwgMywgMyksIAl9LCAJLyogRlZjbyAxMDA5LjI5MDI0MCAqLwotCXsgLmZyZXF1ZW5jeSA9IDEzMjA4ODMyMCwJLmluZGV4ID0gUExMVkFMKDE0OCwgMywgMyksIAl9LCAJLyogRlZjbyAxMDU2LjcwNjU2MCAqLwotCXsgLmZyZXF1ZW5jeSA9IDEzODAxNTM2MCwJLmluZGV4ID0gUExMVkFMKDE1NSwgMywgMyksIAl9LCAJLyogRlZjbyAxMTA0LjEyMjg4MCAqLwotCXsgLmZyZXF1ZW5jeSA9IDE0NDc4OTEyMCwJLmluZGV4ID0gUExMVkFMKDE2MywgMywgMyksIAl9LCAJLyogRlZjbyAxMTU4LjMxMjk2MCAqLwotCXsgLmZyZXF1ZW5jeSA9IDE1MDEwMDM2MywJLmluZGV4ID0gUExMVkFMKDE4NywgOSwgMiksIAl9LCAJLyogRlZjbyA2MDAuNDAxNDU0ICovCi0JeyAuZnJlcXVlbmN5ID0gMTU2MDM4NDAwLAkuaW5kZXggPSBQTExWQUwoMTIxLCA1LCAyKSwgCX0sIAkvKiBGVmNvIDYyNC4xNTM2MDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAxNjIwODY0MDAsCS5pbmRleCA9IFBMTFZBTCgxMjYsIDUsIDIpLCAJfSwgCS8qIEZWY28gNjQ4LjM0NTYwMCAqLwotCXsgLmZyZXF1ZW5jeSA9IDE2ODEzNDQwMCwJLmluZGV4ID0gUExMVkFMKDEzMSwgNSwgMiksIAl9LCAJLyogRlZjbyA2NzIuNTM3NjAwICovCi0JeyAuZnJlcXVlbmN5ID0gMTc0MDQ4MDAwLAkuaW5kZXggPSBQTExWQUwoMTc3LCA3LCAyKSwgCX0sIAkvKiBGVmNvIDY5Ni4xOTIwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAxODAyMzA0MDAsCS5pbmRleCA9IFBMTFZBTCgxNDEsIDUsIDIpLCAJfSwgCS8qIEZWY28gNzIwLjkyMTYwMCAqLwotCXsgLmZyZXF1ZW5jeSA9IDE4NjI3ODQwMCwJLmluZGV4ID0gUExMVkFMKDEyNCwgNCwgMiksIAl9LCAJLyogRlZjbyA3NDUuMTEzNjAwICovCi0JeyAuZnJlcXVlbmN5ID0gMTkyMzI2NDAwLAkuaW5kZXggPSBQTExWQUwoMTUxLCA1LCAyKSwgCX0sIAkvKiBGVmNvIDc2OS4zMDU2MDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAxOTgxMzI0ODAsCS5pbmRleCA9IFBMTFZBTCgxMDksIDMsIDIpLCAJfSwgCS8qIEZWY28gNzkyLjUyOTkyMCAqLwotCXsgLmZyZXF1ZW5jeSA9IDIwNDI3MTIwMCwJLmluZGV4ID0gUExMVkFMKDE4NSwgNiwgMiksIAl9LCAJLyogRlZjbyA4MTcuMDg0ODAwICovCi0JeyAuZnJlcXVlbmN5ID0gMjEwMjY4ODAwLAkuaW5kZXggPSBQTExWQUwoMTQxLCA0LCAyKSwgCX0sIAkvKiBGVmNvIDg0MS4wNzUyMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAyMTY1MTg0MDAsCS5pbmRleCA9IFBMTFZBTCgxNzEsIDUsIDIpLCAJfSwgCS8qIEZWY28gODY2LjA3MzYwMCAqLwotCXsgLmZyZXF1ZW5jeSA9IDIyMjI2NDAwMCwJLmluZGV4ID0gUExMVkFMKDk3LCAyLCAyKSwgCX0sIAkvKiBGVmNvIDg4OS4wNTYwMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAyMjg2MTQ0MDAsCS5pbmRleCA9IFBMTFZBTCgxMjcsIDMsIDIpLCAJfSwgCS8qIEZWY28gOTE0LjQ1NzYwMCAqLwotCXsgLmZyZXF1ZW5jeSA9IDIzNDI1OTIwMCwJLmluZGV4ID0gUExMVkFMKDE1OCwgNCwgMiksIAl9LCAJLyogRlZjbyA5MzcuMDM2ODAwICovCi0JeyAuZnJlcXVlbmN5ID0gMjQwNDY4NDgwLAkuaW5kZXggPSBQTExWQUwoMTM0LCAzLCAyKSwgCX0sIAkvKiBGVmNvIDk2MS44NzM5MjAgKi8KLQl7IC5mcmVxdWVuY3kgPSAyNDY5NjAwMDAsCS5pbmRleCA9IFBMTFZBTCgxNjcsIDQsIDIpLCAJfSwgCS8qIEZWY28gOTg3Ljg0MDAwMCAqLwotCXsgLmZyZXF1ZW5jeSA9IDI1MjMyMjU2MCwJLmluZGV4ID0gUExMVkFMKDE0MSwgMywgMiksIAl9LCAJLyogRlZjbyAxMDA5LjI5MDI0MCAqLwotCXsgLmZyZXF1ZW5jeSA9IDI1ODI0OTYwMCwJLmluZGV4ID0gUExMVkFMKDExNCwgMiwgMiksIAl9LCAJLyogRlZjbyAxMDMyLjk5ODQwMCAqLwotCXsgLmZyZXF1ZW5jeSA9IDI2NDE3NjY0MCwJLmluZGV4ID0gUExMVkFMKDE0OCwgMywgMiksIAl9LCAJLyogRlZjbyAxMDU2LjcwNjU2MCAqLwotCXsgLmZyZXF1ZW5jeSA9IDI3MDk1MDQwMCwJLmluZGV4ID0gUExMVkFMKDEyMCwgMiwgMiksIAl9LCAJLyogRlZjbyAxMDgzLjgwMTYwMCAqLwotCXsgLmZyZXF1ZW5jeSA9IDI3NjAzMDcyMCwJLmluZGV4ID0gUExMVkFMKDE1NSwgMywgMiksIAl9LCAJLyogRlZjbyAxMTA0LjEyMjg4MCAqLwotCXsgLmZyZXF1ZW5jeSA9IDI4MjI0MDAwMCwJLmluZGV4ID0gUExMVkFMKDkyLCAxLCAyKSwgCX0sIAkvKiBGVmNvIDExMjguOTYwMDAwICovCi0JeyAuZnJlcXVlbmN5ID0gMjg5NTc4MjQwLAkuaW5kZXggPSBQTExWQUwoMTYzLCAzLCAyKSwgCX0sIAkvKiBGVmNvIDExNTguMzEyOTYwICovCi0JeyAuZnJlcXVlbmN5ID0gMjk0MjM1MjAwLAkuaW5kZXggPSBQTExWQUwoMTMxLCAyLCAyKSwgCX0sIAkvKiBGVmNvIDExNzYuOTQwODAwICovCi0JeyAuZnJlcXVlbmN5ID0gMzAwMjAwNzI3LAkuaW5kZXggPSBQTExWQUwoMTg3LCA5LCAxKSwgCX0sIAkvKiBGVmNvIDYwMC40MDE0NTQgKi8KLQl7IC5mcmVxdWVuY3kgPSAzMDYzNTg2OTAsCS5pbmRleCA9IFBMTFZBTCgxOTEsIDksIDEpLCAJfSwgCS8qIEZWY28gNjEyLjcxNzM4MCAqLwotCXsgLmZyZXF1ZW5jeSA9IDMxMjA3NjgwMCwJLmluZGV4ID0gUExMVkFMKDEyMSwgNSwgMSksIAl9LCAJLyogRlZjbyA2MjQuMTUzNjAwICovCi0JeyAuZnJlcXVlbmN5ID0gMzE4MzY2NzIwLAkuaW5kZXggPSBQTExWQUwoODYsIDMsIDEpLCAJfSwgCS8qIEZWY28gNjM2LjczMzQ0MCAqLwotCXsgLmZyZXF1ZW5jeSA9IDMyNDE3MjgwMCwJLmluZGV4ID0gUExMVkFMKDEyNiwgNSwgMSksIAl9LCAJLyogRlZjbyA2NDguMzQ1NjAwICovCi0JeyAuZnJlcXVlbmN5ID0gMzMwMjIwODAwLAkuaW5kZXggPSBQTExWQUwoMTA5LCA0LCAxKSwgCX0sIAkvKiBGVmNvIDY2MC40NDE2MDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAzMzYyNjg4MDAsCS5pbmRleCA9IFBMTFZBTCgxMzEsIDUsIDEpLCAJfSwgCS8qIEZWY28gNjcyLjUzNzYwMCAqLwotCXsgLmZyZXF1ZW5jeSA9IDM0MjA3NDg4MCwJLmluZGV4ID0gUExMVkFMKDkzLCAzLCAxKSwgCX0sIAkvKiBGVmNvIDY4NC4xNDk3NjAgKi8KLQl7IC5mcmVxdWVuY3kgPSAzNDgwOTYwMDAsCS5pbmRleCA9IFBMTFZBTCgxNzcsIDcsIDEpLCAJfSwgCS8qIEZWY28gNjk2LjE5MjAwMCAqLwotCXsgLmZyZXF1ZW5jeSA9IDM1NTYyMjQwMCwJLmluZGV4ID0gUExMVkFMKDExOCwgNCwgMSksIAl9LCAJLyogRlZjbyA3MTEuMjQ0ODAwICovCi0JeyAuZnJlcXVlbmN5ID0gMzYwNDYwODAwLAkuaW5kZXggPSBQTExWQUwoMTQxLCA1LCAxKSwgCX0sIAkvKiBGVmNvIDcyMC45MjE2MDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAzNjYyMDY0MDAsCS5pbmRleCA9IFBMTFZBTCgxNjUsIDYsIDEpLCAJfSwgCS8qIEZWY28gNzMyLjQxMjgwMCAqLwotCXsgLmZyZXF1ZW5jeSA9IDM3MjU1NjgwMCwJLmluZGV4ID0gUExMVkFMKDEyNCwgNCwgMSksIAl9LCAJLyogRlZjbyA3NDUuMTEzNjAwICovCi0JeyAuZnJlcXVlbmN5ID0gMzc4MjAxNjAwLAkuaW5kZXggPSBQTExWQUwoMTI2LCA0LCAxKSwgCX0sIAkvKiBGVmNvIDc1Ni40MDMyMDAgKi8KLQl7IC5mcmVxdWVuY3kgPSAzODQ2NTI4MDAsCS5pbmRleCA9IFBMTFZBTCgxNTEsIDUsIDEpLCAJfSwgCS8qIEZWY28gNzY5LjMwNTYwMCAqLwotCXsgLmZyZXF1ZW5jeSA9IDM5MTYwODAwMCwJLmluZGV4ID0gUExMVkFMKDE3NywgNiwgMSksIAl9LCAJLyogRlZjbyA3ODMuMjE2MDAwICovCi0JeyAuZnJlcXVlbmN5ID0gMzk2MjY0OTYwLAkuaW5kZXggPSBQTExWQUwoMTA5LCAzLCAxKSwgCX0sIAkvKiBGVmNvIDc5Mi41Mjk5MjAgKi8KLQl7IC5mcmVxdWVuY3kgPSA0MDIxOTIwMDAsCS5pbmRleCA9IFBMTFZBTCg4NywgMiwgMSksIAl9LCAJLyogRlZjbyA4MDQuMzg0MDAwICovCi19OwotCi1zdGF0aWMgaW50IHMzYzI0NDBfcGxsczE2OTM0NF9hZGQoc3RydWN0IHN5c19kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgY2xrICp4dGFsX2NsazsKLQl1bnNpZ25lZCBsb25nIHh0YWw7Ci0KLQl4dGFsX2NsayA9IGNsa19nZXQoTlVMTCwgInh0YWwiKTsKLQlpZiAoSVNfRVJSKHh0YWxfY2xrKSkKLQkJcmV0dXJuIFBUUl9FUlIoeHRhbF9jbGspOwotCi0JeHRhbCA9IGNsa19nZXRfcmF0ZSh4dGFsX2Nsayk7Ci0JY2xrX3B1dCh4dGFsX2Nsayk7Ci0KLQlpZiAoeHRhbCA9PSAxNjkzNDQwMDApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiVXNpbmcgUExMIHRhYmxlIGZvciAxNi45MzQ0TUh6IGNyeXN0YWxcbiIpOwotCQlyZXR1cm4gczNjX3BsbHRhYl9yZWdpc3RlcihzM2MyNDQwX3BsbHNfMTY5MzQ0LAotCQkJCQkgICBBUlJBWV9TSVpFKHMzYzI0NDBfcGxsc18xNjkzNDQpKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDBfcGxsczE2OTM0NF9kcnYgPSB7Ci0JLmFkZAk9IHMzYzI0NDBfcGxsczE2OTM0NF9hZGQsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzM2MyNDQwX3BsbF8xNjkzNDQwMCh2b2lkKQotewotCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQwX3N5c2NsYXNzLAotCQkJCSAgICAgICZzM2MyNDQwX3BsbHMxNjkzNDRfZHJ2KTsKLQotfQotCi1hcmNoX2luaXRjYWxsKHMzYzI0NDBfcGxsXzE2OTM0NDAwKTsKLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDJfcGxsczE2OTM0NF9kcnYgPSB7Ci0JLmFkZAk9IHMzYzI0NDBfcGxsczE2OTM0NF9hZGQsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBzM2MyNDQyX3BsbF8xNjkzNDQwMCh2b2lkKQotewotCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQyX3N5c2NsYXNzLAotCQkJCSAgICAgICZzM2MyNDQyX3BsbHMxNjkzNDRfZHJ2KTsKLQotfQotCi1hcmNoX2luaXRjYWxsKHMzYzI0NDJfcGxsXzE2OTM0NDAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LWNsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC1jbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTM3MTA5Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LWNsb2NrLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzYgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0eHgtY2xvY2suYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBTM0MyNDQwL1MzQzI0NDIgQ29tbW9uIGNsb2NrIHN1cHBvcnQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0qLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgotCi0jaW5jbHVkZSA8cGxhdC9jbG9jay5oPgotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0KLXN0YXRpYyBpbnQgczNjMjQ0MF9zZXRwYXJlbnRfYXJtY2xrKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQotewotCXVuc2lnbmVkIGxvbmcgY2FtZGl2bjsKLQl1bnNpZ25lZCBsb25nIGR2czsKLQotCWlmIChwYXJlbnQgPT0gJmNsa19mKQotCQlkdnMgPSAwOwotCWVsc2UgaWYgKHBhcmVudCA9PSAmY2xrX2gpCi0JCWR2cyA9IFMzQzI0NDBfQ0FNRElWTl9EVlNFTjsKLQllbHNlCi0JCXJldHVybiAtRUlOVkFMOwotCi0JY2xrLT5wYXJlbnQgPSBwYXJlbnQ7Ci0KLQljYW1kaXZuICA9IF9fcmF3X3JlYWRsKFMzQzI0NDBfQ0FNRElWTik7Ci0JY2FtZGl2biAmPSB+UzNDMjQ0MF9DQU1ESVZOX0RWU0VOOwotCWNhbWRpdm4gfD0gZHZzOwotCV9fcmF3X3dyaXRlbChjYW1kaXZuLCBTM0MyNDQwX0NBTURJVk4pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19hcm0gPSB7Ci0JLm5hbWUJCT0gImFybWNsayIsCi0JLmlkCQk9IC0xLAotCS5zZXRfcGFyZW50CT0gczNjMjQ0MF9zZXRwYXJlbnRfYXJtY2xrLAotfTsKLQotc3RhdGljIGludCBzM2MyNDR4X2Nsa19hZGQoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKLXsKLQl1bnNpZ25lZCBsb25nIGNhbWRpdm4gPSBfX3Jhd19yZWFkbChTM0MyNDQwX0NBTURJVk4pOwotCXVuc2lnbmVkIGxvbmcgY2xrZGl2bjsKLQlzdHJ1Y3QgY2xrICpjbG9ja191cGxsOwotCWludCByZXQ7Ci0KLQlwcmludGsoIlMzQzI0NFg6IENsb2NrIFN1cHBvcnQsIERWUyAlc1xuIiwKLQkgICAgICAgKGNhbWRpdm4gJiBTM0MyNDQwX0NBTURJVk5fRFZTRU4pID8gIm9uIiA6ICJvZmYiKTsKLQotCWNsa19hcm0ucGFyZW50ID0gKGNhbWRpdm4gJiBTM0MyNDQwX0NBTURJVk5fRFZTRU4pID8gJmNsa19oIDogJmNsa19mOwotCi0JcmV0ID0gczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmY2xrX2FybSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJTM0MyNFhYOiBGYWlsZWQgdG8gYWRkIGFybWNsayAoJWQpXG4iLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWNsb2NrX3VwbGwgPSBjbGtfZ2V0KE5VTEwsICJ1cGxsIik7Ci0JaWYgKElTX0VSUihjbG9ja191cGxsKSkgewotCQlwcmludGsoS0VSTl9FUlIgIlMzQzI0NFg6IEZhaWxlZCB0byBnZXQgdXBsbCBjbG9ja1xuIik7Ci0JCXJldHVybiAtRU5PRU5UOwotCX0KLQotCS8qIGNoZWNrIHJhdGUgb2YgVVBMTCwgYW5kIGlmIGl0IGlzIG5lYXIgOTZNSHosIHRoZW4gY2hhbmdlCi0JICogdG8gdXNpbmcgaGFsZiB0aGUgVVBMTCByYXRlIGZvciB0aGUgc3lzdGVtICovCi0KLQlpZiAoY2xrX2dldF9yYXRlKGNsb2NrX3VwbGwpID4gKDk0ICogTUhaKSkgewotCQljbGtfdXNiX2J1cy5yYXRlID0gY2xrX2dldF9yYXRlKGNsb2NrX3VwbGwpIC8gMjsKLQotCQlzcGluX2xvY2soJmNsb2Nrc19sb2NrKTsKLQotCQljbGtkaXZuID0gX19yYXdfcmVhZGwoUzNDMjQxMF9DTEtESVZOKTsKLQkJY2xrZGl2biB8PSBTM0MyNDQwX0NMS0RJVk5fVUNMSzsKLQkJX19yYXdfd3JpdGVsKGNsa2Rpdm4sIFMzQzI0MTBfQ0xLRElWTik7Ci0KLQkJc3Bpbl91bmxvY2soJmNsb2Nrc19sb2NrKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDBfY2xrX2RyaXZlciA9IHsKLQkuYWRkCQk9IHMzYzI0NHhfY2xrX2FkZCwKLX07Ci0KLXN0YXRpYyBpbnQgczNjMjQ0MF9jbGtfaW5pdCh2b2lkKQotewotCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQwX3N5c2NsYXNzLCAmczNjMjQ0MF9jbGtfZHJpdmVyKTsKLX0KLQotYXJjaF9pbml0Y2FsbChzM2MyNDQwX2Nsa19pbml0KTsKLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDJfY2xrX2RyaXZlciA9IHsKLQkuYWRkCQk9IHMzYzI0NHhfY2xrX2FkZCwKLX07Ci0KLXN0YXRpYyBpbnQgczNjMjQ0Ml9jbGtfaW5pdCh2b2lkKQotewotCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDQyX3N5c2NsYXNzLCAmczNjMjQ0Ml9jbGtfZHJpdmVyKTsKLX0KLQotYXJjaF9pbml0Y2FsbChzM2MyNDQyX2Nsa19pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmMgYi9hcmNoL2FybS9wbGF0LXMzYzI0eHgvczNjMjQ0eC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMjYyM2E0Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTYgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguYwotICoKLSAqIENvcHlyaWdodCAoYykgMjAwNC0yMDA2IFNpbXRlYyBFbGVjdHJvbmljcwotICogICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKgotICogU2Ftc3VuZyBTM0MyNDQwIGFuZCBTM0MyNDQyIE1vYmlsZSBDUFUgc3VwcG9ydCAobm90IFMzQzI0NDMpCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi0jaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS5oPgotCi0jaW5jbHVkZSA8bWFjaC9yZWdzLWNsb2NrLmg+Ci0jaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgotI2luY2x1ZGUgPG1hY2gvcmVncy1ncGlvLmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLWdwaW9qLmg+Ci0jaW5jbHVkZSA8bWFjaC9yZWdzLWRzYy5oPgotCi0jaW5jbHVkZSA8cGxhdC9zM2MyNDEwLmg+Ci0jaW5jbHVkZSA8cGxhdC9zM2MyNDQwLmg+Ci0jaW5jbHVkZSAiczNjMjQ0eC5oIgotI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KLSNpbmNsdWRlIDxwbGF0L2RldnMuaD4KLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgotI2luY2x1ZGUgPHBsYXQvcG0uaD4KLSNpbmNsdWRlIDxwbGF0L3BsbC5oPgotCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIHMzYzI0NHhfaW9kZXNjW10gX19pbml0ZGF0YSA9IHsKLQlJT0RFU0NfRU5UKENMS1BXUiksCi0JSU9ERVNDX0VOVChUSU1FUiksCi0JSU9ERVNDX0VOVChXQVRDSERPRyksCi19OwotCi0vKiB1YXJ0IGluaXRpYWxpc2F0aW9uICovCi0KLXZvaWQgX19pbml0IHMzYzI0NHhfaW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubykKLXsKLQlzM2MyNHh4X2luaXRfdWFydGRldnMoInMzYzI0NDAtdWFydCIsIHMzYzI0MTBfdWFydF9yZXNvdXJjZXMsIGNmZywgbm8pOwotfQotCi12b2lkIF9faW5pdCBzM2MyNDR4X21hcF9pbyh2b2lkKQotewotCS8qIHJlZ2lzdGVyIG91ciBpby10YWJsZXMgKi8KLQotCWlvdGFibGVfaW5pdChzM2MyNDR4X2lvZGVzYywgQVJSQVlfU0laRShzM2MyNDR4X2lvZGVzYykpOwotCi0JLyogcmVuYW1lIGFueSBwZXJpcGhlcmFscyB1c2VkIGRpZmZlcmluZyBmcm9tIHRoZSBzM2MyNDEwICovCi0KLQlzM2NfZGV2aWNlX3NkaS5uYW1lICA9ICJzM2MyNDQwLXNkaSI7Ci0JczNjX2RldmljZV9pMmMwLm5hbWUgID0gInMzYzI0NDAtaTJjIjsKLQlzM2NfZGV2aWNlX25hbmQubmFtZSA9ICJzM2MyNDQwLW5hbmQiOwotCXMzY19kZXZpY2VfdHMubmFtZSA9ICJzM2MyNDQwLXRzIjsKLQlzM2NfZGV2aWNlX3VzYmdhZGdldC5uYW1lID0gInMzYzI0NDAtdXNiZ2FkZ2V0IjsKLX0KLQotdm9pZCBfX2luaXRfb3JfY3B1ZnJlcSBzM2MyNDR4X3NldHVwX2Nsb2Nrcyh2b2lkKQotewotCXN0cnVjdCBjbGsgKnh0YWxfY2xrOwotCXVuc2lnbmVkIGxvbmcgY2xrZGl2OwotCXVuc2lnbmVkIGxvbmcgY2FtZGl2OwotCXVuc2lnbmVkIGxvbmcgeHRhbDsKLQl1bnNpZ25lZCBsb25nIGhjbGssIGZjbGssIHBjbGs7Ci0JaW50IGhkaXYgPSAxOwotCi0JeHRhbF9jbGsgPSBjbGtfZ2V0KE5VTEwsICJ4dGFsIik7Ci0JeHRhbCA9IGNsa19nZXRfcmF0ZSh4dGFsX2Nsayk7Ci0JY2xrX3B1dCh4dGFsX2Nsayk7Ci0KLQlmY2xrID0gczNjMjR4eF9nZXRfcGxsKF9fcmF3X3JlYWRsKFMzQzI0MTBfTVBMTENPTiksIHh0YWwpICogMjsKLQotCWNsa2RpdiA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfQ0xLRElWTik7Ci0JY2FtZGl2ID0gX19yYXdfcmVhZGwoUzNDMjQ0MF9DQU1ESVZOKTsKLQotCS8qIHdvcmsgb3V0IGNsb2NrIHNjYWxpbmdzICovCi0KLQlzd2l0Y2ggKGNsa2RpdiAmIFMzQzI0NDBfQ0xLRElWTl9IRElWTl9NQVNLKSB7Ci0JY2FzZSBTM0MyNDQwX0NMS0RJVk5fSERJVk5fMToKLQkJaGRpdiA9IDE7Ci0JCWJyZWFrOwotCi0JY2FzZSBTM0MyNDQwX0NMS0RJVk5fSERJVk5fMjoKLQkJaGRpdiA9IDI7Ci0JCWJyZWFrOwotCi0JY2FzZSBTM0MyNDQwX0NMS0RJVk5fSERJVk5fNF84OgotCQloZGl2ID0gKGNhbWRpdiAmIFMzQzI0NDBfQ0FNRElWTl9IQ0xLNF9IQUxGKSA/IDggOiA0OwotCQlicmVhazsKLQotCWNhc2UgUzNDMjQ0MF9DTEtESVZOX0hESVZOXzNfNjoKLQkJaGRpdiA9IChjYW1kaXYgJiBTM0MyNDQwX0NBTURJVk5fSENMSzNfSEFMRikgPyA2IDogMzsKLQkJYnJlYWs7Ci0JfQotCi0JaGNsayA9IGZjbGsgLyBoZGl2OwotCXBjbGsgPSBoY2xrIC8gKChjbGtkaXYgJiBTM0MyNDQwX0NMS0RJVk5fUERJVk4pID8gMiA6IDEpOwotCi0JLyogcHJpbnQgYnJpZWYgc3VtbWFyeSBvZiBjbG9ja3MsIGV0YyAqLwotCi0JcHJpbnRrKCJTM0MyNDRYOiBjb3JlICVsZC4lMDNsZCBNSHosIG1lbW9yeSAlbGQuJTAzbGQgTUh6LCBwZXJpcGhlcmFsICVsZC4lMDNsZCBNSHpcbiIsCi0JICAgICAgIHByaW50X21oeihmY2xrKSwgcHJpbnRfbWh6KGhjbGspLCBwcmludF9taHoocGNsaykpOwotCi0JczNjMjR4eF9zZXR1cF9jbG9ja3MoZmNsaywgaGNsaywgcGNsayk7Ci19Ci0KLXZvaWQgX19pbml0IHMzYzI0NHhfaW5pdF9jbG9ja3MoaW50IHh0YWwpCi17Ci0JLyogaW5pdGlhbGlzZSB0aGUgY2xvY2tzIGhlcmUsIHRvIGFsbG93IG90aGVyIHRoaW5ncyBsaWtlIHRoZQotCSAqIGNvbnNvbGUgdG8gdXNlIHRoZW0sIGFuZCB0byBhZGQgbmV3IG9uZXMgYWZ0ZXIgdGhlIGluaXRpYWxpc2F0aW9uCi0JICovCi0KLQlzM2MyNHh4X3JlZ2lzdGVyX2Jhc2VjbG9ja3MoeHRhbCk7Ci0JczNjMjQ0eF9zZXR1cF9jbG9ja3MoKTsKLQlzM2MyNDEwX2Jhc2VjbGtfYWRkKCk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUE0KLQotc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIHMzYzI0NHhfc2xlZXBbXSA9IHsKLQlTQVZFX0lURU0oUzNDMjQ0MF9EU0MwKSwKLQlTQVZFX0lURU0oUzNDMjQ0MF9EU0MxKSwKLQlTQVZFX0lURU0oUzNDMjQ0MF9HUEpEQVQpLAotCVNBVkVfSVRFTShTM0MyNDQwX0dQSkNPTiksCi0JU0FWRV9JVEVNKFMzQzI0NDBfR1BKVVApCi19OwotCi1zdGF0aWMgaW50IHMzYzI0NHhfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCi17Ci0JczNjX3BtX2RvX3NhdmUoczNjMjQ0eF9zbGVlcCwgQVJSQVlfU0laRShzM2MyNDR4X3NsZWVwKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjQ0eF9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKLXsKLQlzM2NfcG1fZG9fcmVzdG9yZShzM2MyNDR4X3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0NHhfc2xlZXApKTsKLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UKLSNkZWZpbmUgczNjMjQ0eF9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgczNjMjQ0eF9yZXN1bWUgIE5VTEwKLSNlbmRpZgotCi0vKiBTaW5jZSB0aGUgUzNDMjQ0MiBhbmQgUzNDMjQ0MCBzaGFyZSAgaXRlbXMsIHB1dCBib3RoIHN5c2NsYXNzZXMgaGVyZSAqLwotCi1zdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0NDBfc3lzY2xhc3MgPSB7Ci0JLm5hbWUJCT0gInMzYzI0NDAtY29yZSIsCi0JLnN1c3BlbmQJPSBzM2MyNDR4X3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzM2MyNDR4X3Jlc3VtZQotfTsKLQotc3RydWN0IHN5c2Rldl9jbGFzcyBzM2MyNDQyX3N5c2NsYXNzID0gewotCS5uYW1lCQk9ICJzM2MyNDQyLWNvcmUiLAotCS5zdXNwZW5kCT0gczNjMjQ0eF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gczNjMjQ0eF9yZXN1bWUKLX07Ci0KLS8qIG5lZWQgdG8gcmVnaXN0ZXIgY2xhc3MgYmVmb3JlIHdlIGFjdHVhbGx5IHJlZ2lzdGVyIHRoZSBkZXZpY2UsIGFuZAotICogd2UgYWxzbyBuZWVkIHRvIGVuc3VyZSB0aGF0IGl0IGhhcyBiZWVuIGluaXRpYWxpc2VkIGJlZm9yZSBhbnkgb2YgdGhlCi0gKiBkcml2ZXJzIGV2ZW4gdHJ5IHRvIHVzZSBpdCAoZXZlbiBpZiBub3Qgb24gYW4gczNjMjQ0MCBiYXNlZCBzeXN0ZW0pCi0gKiBhcyBhIGRyaXZlciB3aGljaCBtYXkgc3VwcG9ydCBib3RoIDI0MTAgYW5kIDI0NDAgbWF5IHRyeSBhbmQgdXNlIGl0LgotKi8KLQotc3RhdGljIGludCBfX2luaXQgczNjMjQ0MF9jb3JlX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZzM2MyNDQwX3N5c2NsYXNzKTsKLX0KLQotY29yZV9pbml0Y2FsbChzM2MyNDQwX2NvcmVfaW5pdCk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IHMzYzI0NDJfY29yZV9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIHN5c2Rldl9jbGFzc19yZWdpc3RlcigmczNjMjQ0Ml9zeXNjbGFzcyk7Ci19Ci0KLWNvcmVfaW5pdGNhbGwoczNjMjQ0Ml9jb3JlX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguaCBiL2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZhYWI1ZWEuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3MzYzI0NHguaAorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9zM2MyNDR4LmgKLSAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCi0gKiBIZWFkZXIgZmlsZSBmb3IgUzNDMjQ0MCBhbmQgUzNDMjQ0MiBjcHUgc3VwcG9ydAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1MzQzI0NDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TM0MyNDQyKQotCi1leHRlcm4gdm9pZCBzM2MyNDR4X21hcF9pbyh2b2lkKTsKLQotZXh0ZXJuIHZvaWQgczNjMjQ0eF9pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKLQotZXh0ZXJuIHZvaWQgczNjMjQ0eF9pbml0X2Nsb2NrcyhpbnQgeHRhbCk7Ci0KLSNlbHNlCi0jZGVmaW5lIHMzYzI0NHhfaW5pdF9jbG9ja3MgTlVMTAotI2RlZmluZSBzM2MyNDR4X2luaXRfdWFydHMgTlVMTAotI2RlZmluZSBzM2MyNDR4X21hcF9pbyBOVUxMCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9LY29uZmlnIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2ZGE4N2EuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0jIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0jIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotIwlCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0jCi0jIExpY2Vuc2VkIHVuZGVyIEdQTHYyCi0KLWNvbmZpZyBQTEFUX1MzQzY0WFgKLQlib29sCi0JZGVwZW5kcyBvbiBBUkNIX1MzQzY0WFgKLQlkZWZhdWx0IHkKLQlzZWxlY3QgQ1BVX1Y2Ci0Jc2VsZWN0IFBMQVRfUzNDCi0Jc2VsZWN0IEFSTV9WSUMKLQlzZWxlY3QgTk9fSU9QT1JUCi0Jc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCi0Jc2VsZWN0IFMzQ19HUElPX1RSQUNLCi0Jc2VsZWN0IFMzQ19HUElPX1BVTExfVVBET1dOCi0Jc2VsZWN0IFMzQ19HUElPX0NGR19TM0MyNFhYCi0Jc2VsZWN0IFMzQ19HUElPX0NGR19TM0M2NFhYCi0Jc2VsZWN0IFMzQ19ERVZfTkFORAotCXNlbGVjdCBVU0JfQVJDSF9IQVNfT0hDSQotCWhlbHAKLQkgIEJhc2UgcGxhdGZvcm0gY29kZSBmb3IgYW55IFNhbXN1bmcgUzNDNjRYWCBkZXZpY2UKLQotaWYgUExBVF9TM0M2NFhYCi0KLSMgQ29uZmlndXJhdGlvbiBvcHRpb25zIHNoYXJlZCBieSBhbGwgUzNDNjRYWCBpbXBsZW1lbnRhdGlvbnMKLQotY29uZmlnIENQVV9TM0M2NDAwX0lOSVQKLQlib29sCi0JaGVscAotCSAgQ29tbW9uIGluaXRpYWxpc2F0aW9uIGNvZGUgZm9yIHRoZSBTM0M2NDAwIHRoYXQgaXMgc2hhcmVkCi0JICBieSBvdGhlciBDUFVzIGluIHRoZSBzZXJpZXMsIHN1Y2ggYXMgdGhlIFMzQzY0MTAuCi0KLWNvbmZpZyBDUFVfUzNDNjQwMF9DTE9DSwotCWJvb2wKLQloZWxwCi0JICBDb21tb24gY2xvY2sgc3VwcG9ydCBjb2RlIGZvciB0aGUgUzNDNjQwMCB0aGF0IGlzIHNoYXJlZAotCSAgYnkgb3RoZXIgQ1BVcyBpbiB0aGUgc2VyaWVzLCBzdWNoIGFzIHRoZSBTM0M2NDEwLgotCi1jb25maWcgUzNDNjRYWF9ETUEKLQlib29sICJTM0M2NFhYIERNQSIKLQlzZWxlY3QgUzNDX0RNQQotCi0jIHBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBzZXR1cAotCi1jb25maWcgUzNDNjRYWF9TRVRVUF9JMkMwCi0JYm9vbAotCWRlZmF1bHQgeQotCWhlbHAKLQkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciBpMmMgYnVzIDAuCi0KLQkgIE5vdGUsIGN1cnJlbnRseSBzaW5jZSBpMmMwIGlzIGFsd2F5cyBjb21waWxlZCwgdGhpcyBzZXR1cCBoZWxwZXIKLQkgIGlzIGFsd2F5cyBjb21waWxlZCB3aXRoIGl0LgotCi1jb25maWcgUzNDNjRYWF9TRVRVUF9JMkMxCi0JYm9vbAotCWhlbHAKLQkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciBpMmMgYnVzIDEuCi0KLWNvbmZpZyBTM0M2NFhYX1NFVFVQX0ZCXzI0QlBQCi0JYm9vbAotCWhlbHAKLQkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciBTM0M2NFhYIHdpdGggYW4gMjRicHAgUkdCIGRpc3BsYXkgaGVscGVyLgotCi1jb25maWcgUzNDNjRYWF9TRVRVUF9TREhDSV9HUElPCi0JYm9vbAotCWhlbHAKLQkgIENvbW1vbiBzZXR1cCBjb2RlIGZvciBTM0M2NFhYIFNESENJIEdQSU8gY29uZmlndXJhdGlvbnMKLQotZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjg1YjQzNS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0jIGFyY2gvYXJtL3BsYXQtczNjNjR4eC9NYWtlZmlsZQotIwotIyBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotIyBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSMKLSMgTGljZW5zZWQgdW5kZXIgR1BMdjIKLQotb2JqLXkJCQkJOj0KLW9iai1tCQkJCTo9Ci1vYmotbgkJCQk6PSBkdW1teS5vCi1vYmotCQkJCTo9Ci0KLSMgQ29yZSBmaWxlcwotCi1vYmoteQkJCQkrPSBkZXYtdWFydC5vCi1vYmoteQkJCQkrPSBjcHUubwotb2JqLXkJCQkJKz0gaXJxLm8KLW9iai15CQkJCSs9IGlycS1laW50Lm8KLW9iai15CQkJCSs9IGNsb2NrLm8KLW9iai15CQkJCSs9IGdwaW9saWIubwotCi0jIENQVSBzdXBwb3J0Ci0KLW9iai0kKENPTkZJR19DUFVfUzNDNjQwMF9JTklUKQkrPSBzM2M2NDAwLWluaXQubwotb2JqLSQoQ09ORklHX0NQVV9TM0M2NDAwX0NMT0NLKQkrPSBzM2M2NDAwLWNsb2NrLm8KLW9iai0kKENPTkZJR19DUFVfRlJFUV9TM0M2NFhYKSAgKz0gY3B1ZnJlcS5vCi0KLSMgUE0gc3VwcG9ydAotCi1vYmotJChDT05GSUdfUE0pCQkrPSBwbS5vCi1vYmotJChDT05GSUdfUE0pCQkrPSBzbGVlcC5vCi1vYmotJChDT05GSUdfUE0pCQkrPSBpcnEtcG0ubwotCi0jIERNQSBzdXBwb3J0Ci0KLW9iai0kKENPTkZJR19TM0M2NFhYX0RNQSkJKz0gZG1hLm8KLQotIyBEZXZpY2Ugc2V0dXAKLQotb2JqLSQoQ09ORklHX1MzQzY0WFhfU0VUVVBfSTJDMCkgKz0gc2V0dXAtaTJjMC5vCi1vYmotJChDT05GSUdfUzNDNjRYWF9TRVRVUF9JMkMxKSArPSBzZXR1cC1pMmMxLm8KLW9iai0kKENPTkZJR19TM0M2NFhYX1NFVFVQX0ZCXzI0QlBQKSArPSBzZXR1cC1mYi0yNGJwcC5vCi1vYmotJChDT05GSUdfUzNDNjRYWF9TRVRVUF9TREhDSV9HUElPKSArPSBzZXR1cC1zZGhjaS1ncGlvLm8KLW9iai0kKENPTkZJR19TTkRfUzNDMjRYWF9TT0MpICs9IGRldi1hdWRpby5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9jbG9jay5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YTM2ZTg5Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9jbG9jay5jCisrKyAvZGV2L251bGwKQEAgLTEsMzAwICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9jbG9jay5jCi0gKgotICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KLSAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBTM0M2NFhYIEJhc2UgY2xvY2sgc3VwcG9ydAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8bWFjaC9tYXAuaD4KLQotI2luY2x1ZGUgPHBsYXQvcmVncy1zeXMuaD4KLSNpbmNsdWRlIDxwbGF0L3JlZ3MtY2xvY2suaD4KLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgotI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgotI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KLQotc3RydWN0IGNsayBjbGtfaDIgPSB7Ci0JLm5hbWUJCT0gImhjbGsyIiwKLQkuaWQJCT0gLTEsCi0JLnJhdGUJCT0gMCwKLX07Ci0KLXN0cnVjdCBjbGsgY2xrXzI3bSA9IHsKLQkubmFtZQkJPSAiY2xrXzI3bSIsCi0JLmlkCQk9IC0xLAotCS5yYXRlCQk9IDI3MDAwMDAwLAotfTsKLQotc3RhdGljIGludCBjbGtfNDhtX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIHZhbDsKLQotCS8qIGNhbid0IHJlbHkgb24gY2xvY2sgbG9jaywgdGhpcyByZWdpc3RlciBoYXMgb3RoZXIgdXNhZ2VzICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JdmFsID0gX19yYXdfcmVhZGwoUzNDNjRYWF9PVEhFUlMpOwotCWlmIChlbmFibGUpCi0JCXZhbCB8PSBTM0M2NFhYX09USEVSU19VU0JNQVNLOwotCWVsc2UKLQkJdmFsICY9IH5TM0M2NFhYX09USEVSU19VU0JNQVNLOwotCi0JX19yYXdfd3JpdGVsKHZhbCwgUzNDNjRYWF9PVEhFUlMpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi1zdHJ1Y3QgY2xrIGNsa180OG0gPSB7Ci0JLm5hbWUJCT0gImNsa180OG0iLAotCS5pZAkJPSAtMSwKLQkucmF0ZQkJPSA0ODAwMDAwMCwKLQkuZW5hYmxlCQk9IGNsa180OG1fY3RybCwKLX07Ci0KLXN0YXRpYyBpbnQgaW5saW5lIHMzYzY0eHhfZ2F0ZSh2b2lkIF9faW9tZW0gKnJlZywKLQkJCQlzdHJ1Y3QgY2xrICpjbGssCi0JCQkJaW50IGVuYWJsZSkKLXsKLQl1bnNpZ25lZCBpbnQgY3RybGJpdCA9IGNsay0+Y3RybGJpdDsKLQl1MzIgY29uOwotCi0JY29uID0gX19yYXdfcmVhZGwocmVnKTsKLQotCWlmIChlbmFibGUpCi0JCWNvbiB8PSBjdHJsYml0OwotCWVsc2UKLQkJY29uICY9IH5jdHJsYml0OwotCi0JX19yYXdfd3JpdGVsKGNvbiwgcmVnKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzM2M2NHh4X3BjbGtfY3RybChzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpCi17Ci0JcmV0dXJuIHMzYzY0eHhfZ2F0ZShTM0NfUENMS19HQVRFLCBjbGssIGVuYWJsZSk7Ci19Ci0KLXN0YXRpYyBpbnQgczNjNjR4eF9oY2xrX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQotewotCXJldHVybiBzM2M2NHh4X2dhdGUoUzNDX0hDTEtfR0FURSwgY2xrLCBlbmFibGUpOwotfQotCi1pbnQgczNjNjR4eF9zY2xrX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQotewotCXJldHVybiBzM2M2NHh4X2dhdGUoUzNDX1NDTEtfR0FURSwgY2xrLCBlbmFibGUpOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayBpbml0X2Nsb2Nrc19kaXNhYmxlW10gPSB7Ci0JewotCQkubmFtZQkJPSAibmFuZCIsCi0JCS5pZAkJPSAtMSwKLQkJLnBhcmVudAkJPSAmY2xrX2gsCi0JfSwgewotCQkubmFtZQkJPSAiYWRjIiwKLQkJLmlkCQk9IC0xLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKLQkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfVFNBREMsCi0JfSwgewotCQkubmFtZQkJPSAiaTJjIiwKLQkJLmlkCQk9IC0xLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKLQkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfSUlDLAotCX0sIHsKLQkJLm5hbWUJCT0gImlpcyIsCi0JCS5pZAkJPSAwLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKLQkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfSUlTMCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJpaXMiLAotCQkuaWQJCT0gMSwKLQkJLnBhcmVudAkJPSAmY2xrX3AsCi0JCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCi0JCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX0lJUzEsCi0JfSwgewotCQkubmFtZQkJPSAic3BpIiwKLQkJLmlkCQk9IDAsCi0JCS5wYXJlbnQJCT0gJmNsa19wLAotCQkuZW5hYmxlCQk9IHMzYzY0eHhfcGNsa19jdHJsLAotCQkuY3RybGJpdAk9IFMzQ19DTEtDT05fUENMS19TUEkwLAotCX0sIHsKLQkJLm5hbWUJCT0gInNwaSIsCi0JCS5pZAkJPSAxLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKLQkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfU1BJMSwKLQl9LCB7Ci0JCS5uYW1lCQk9ICI0OG0iLAotCQkuaWQJCT0gMCwKLQkJLnBhcmVudAkJPSAmY2xrXzQ4bSwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X3NjbGtfY3RybCwKLQkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1NDTEtfTU1DMF80OCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICI0OG0iLAotCQkuaWQJCT0gMSwKLQkJLnBhcmVudAkJPSAmY2xrXzQ4bSwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X3NjbGtfY3RybCwKLQkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1NDTEtfTU1DMV80OCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICI0OG0iLAotCQkuaWQJCT0gMiwKLQkJLnBhcmVudAkJPSAmY2xrXzQ4bSwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X3NjbGtfY3RybCwKLQkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1NDTEtfTU1DMl80OCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJkbWEwIiwKLQkJLmlkCQk9IC0xLAotCQkucGFyZW50CQk9ICZjbGtfaCwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X2hjbGtfY3RybCwKLQkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX0hDTEtfRE1BMCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJkbWExIiwKLQkJLmlkCQk9IC0xLAotCQkucGFyZW50CQk9ICZjbGtfaCwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X2hjbGtfY3RybCwKLQkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX0hDTEtfRE1BMSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgaW5pdF9jbG9ja3NbXSA9IHsKLQl7Ci0JCS5uYW1lCQk9ICJsY2QiLAotCQkuaWQJCT0gLTEsCi0JCS5wYXJlbnQJCT0gJmNsa19oLAotCQkuZW5hYmxlCQk9IHMzYzY0eHhfaGNsa19jdHJsLAotCQkuY3RybGJpdAk9IFMzQ19DTEtDT05fSENMS19MQ0QsCi0JfSwgewotCQkubmFtZQkJPSAiZ3BpbyIsCi0JCS5pZAkJPSAtMSwKLQkJLnBhcmVudAkJPSAmY2xrX3AsCi0JCS5lbmFibGUJCT0gczNjNjR4eF9wY2xrX2N0cmwsCi0JCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9QQ0xLX0dQSU8sCi0JfSwgewotCQkubmFtZQkJPSAidXNiLWhvc3QiLAotCQkuaWQJCT0gLTEsCi0JCS5wYXJlbnQJCT0gJmNsa19oLAotCQkuZW5hYmxlCQk9IHMzYzY0eHhfaGNsa19jdHJsLAotCQkuY3RybGJpdAk9IFMzQ19DTEtDT05fSENMS19VSE9TVCwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJoc21tYyIsCi0JCS5pZAkJPSAwLAotCQkucGFyZW50CQk9ICZjbGtfaCwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X2hjbGtfY3RybCwKLQkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX0hDTEtfSFNNTUMwLAotCX0sIHsKLQkJLm5hbWUJCT0gImhzbW1jIiwKLQkJLmlkCQk9IDEsCi0JCS5wYXJlbnQJCT0gJmNsa19oLAotCQkuZW5hYmxlCQk9IHMzYzY0eHhfaGNsa19jdHJsLAotCQkuY3RybGJpdAk9IFMzQ19DTEtDT05fSENMS19IU01NQzEsCi0JfSwgewotCQkubmFtZQkJPSAiaHNtbWMiLAotCQkuaWQJCT0gMiwKLQkJLnBhcmVudAkJPSAmY2xrX2gsCi0JCS5lbmFibGUJCT0gczNjNjR4eF9oY2xrX2N0cmwsCi0JCS5jdHJsYml0CT0gUzNDX0NMS0NPTl9IQ0xLX0hTTU1DMiwKLQl9LCB7Ci0JCS5uYW1lCQk9ICJ0aW1lcnMiLAotCQkuaWQJCT0gLTEsCi0JCS5wYXJlbnQJCT0gJmNsa19wLAotCQkuZW5hYmxlCQk9IHMzYzY0eHhfcGNsa19jdHJsLAotCQkuY3RybGJpdAk9IFMzQ19DTEtDT05fUENMS19QV00sCi0JfSwgewotCQkubmFtZQkJPSAidWFydCIsCi0JCS5pZAkJPSAwLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKLQkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfVUFSVDAsCi0JfSwgewotCQkubmFtZQkJPSAidWFydCIsCi0JCS5pZAkJPSAxLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKLQkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfVUFSVDEsCi0JfSwgewotCQkubmFtZQkJPSAidWFydCIsCi0JCS5pZAkJPSAyLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKLQkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfVUFSVDIsCi0JfSwgewotCQkubmFtZQkJPSAidWFydCIsCi0JCS5pZAkJPSAzLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKLQkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfVUFSVDMsCi0JfSwgewotCQkubmFtZQkJPSAicnRjIiwKLQkJLmlkCQk9IC0xLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X3BjbGtfY3RybCwKLQkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfUlRDLAotCX0sIHsKLQkJLm5hbWUJCT0gIndhdGNoZG9nIiwKLQkJLmlkCQk9IC0xLAotCQkucGFyZW50CQk9ICZjbGtfcCwKLQkJLmN0cmxiaXQJPSBTM0NfQ0xLQ09OX1BDTEtfV0RULAotCX0sIHsKLQkJLm5hbWUJCT0gImFjOTciLAotCQkuaWQJCT0gLTEsCi0JCS5wYXJlbnQJCT0gJmNsa19wLAotCQkuY3RybGJpdAk9IFMzQ19DTEtDT05fUENMS19BQzk3LAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzW10gX19pbml0ZGF0YSA9IHsKLQkmY2xrX2V4dCwKLQkmY2xrX2VwbGwsCi0JJmNsa18yN20sCi0JJmNsa180OG0sCi0JJmNsa19oMiwKLX07Ci0KLXZvaWQgX19pbml0IHMzYzY0eHhfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpCi17Ci0Jc3RydWN0IGNsayAqY2xrcDsKLQlpbnQgcmV0OwotCWludCBwdHI7Ci0KLQlzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrcyhjbGtzLCBBUlJBWV9TSVpFKGNsa3MpKTsKLQotCWNsa3AgPSBpbml0X2Nsb2NrczsKLQlmb3IgKHB0ciA9IDA7IHB0ciA8IEFSUkFZX1NJWkUoaW5pdF9jbG9ja3MpOyBwdHIrKywgY2xrcCsrKSB7Ci0JCXJldCA9IHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soY2xrcCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBjbG9jayAlcyAoJWQpXG4iLAotCQkJICAgICAgIGNsa3AtPm5hbWUsIHJldCk7Ci0JCX0KLQl9Ci0KLQljbGtwID0gaW5pdF9jbG9ja3NfZGlzYWJsZTsKLQlmb3IgKHB0ciA9IDA7IHB0ciA8IEFSUkFZX1NJWkUoaW5pdF9jbG9ja3NfZGlzYWJsZSk7IHB0cisrLCBjbGtwKyspIHsKLQotCQlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKGNsa3ApOwotCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXMgKCVkKVxuIiwKLQkJCSAgICAgICBjbGtwLT5uYW1lLCByZXQpOwotCQl9Ci0KLQkJKGNsa3AtPmVuYWJsZSkoY2xrcCwgMCk7Ci0JfQotCi0JczNjX3B3bWNsa19pbml0KCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvY3B1LmMgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvY3B1LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5Nzk2ZDIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2NwdS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTU2ICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9jcHUuYwotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogUzNDNjRYWCBDUFUgU3VwcG9ydAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxtYWNoL21hcC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0jaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgotCi0jaW5jbHVkZSA8cGxhdC9jcHUuaD4KLSNpbmNsdWRlIDxwbGF0L2RldnMuaD4KLSNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L3MzYzY0MDAuaD4KLSNpbmNsdWRlIDxwbGF0L3MzYzY0MTAuaD4KLQotLyogdGFibGUgb2Ygc3VwcG9ydGVkIENQVXMgKi8KLQotc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zM2M2NDAwW10gPSAiUzNDNjQwMCI7Ci1zdGF0aWMgY29uc3QgY2hhciBuYW1lX3MzYzY0MTBbXSA9ICJTM0M2NDEwIjsKLQotc3RhdGljIHN0cnVjdCBjcHVfdGFibGUgY3B1X2lkc1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkuaWRjb2RlCQk9IDB4MzY0MDAwMDAsCi0JCS5pZG1hc2sJCT0gMHhmZmZmZjAwMCwKLQkJLm1hcF9pbwkJPSBzM2M2NDAwX21hcF9pbywKLQkJLmluaXRfY2xvY2tzCT0gczNjNjQwMF9pbml0X2Nsb2NrcywKLQkJLmluaXRfdWFydHMJPSBzM2M2NDAwX2luaXRfdWFydHMsCi0JCS5pbml0CQk9IHMzYzY0MDBfaW5pdCwKLQkJLm5hbWUJCT0gbmFtZV9zM2M2NDAwLAotCX0sIHsKLQkJLmlkY29kZQkJPSAweDM2NDEwMTAwLAotCQkuaWRtYXNrCQk9IDB4ZmZmZmZmMDAsCi0JCS5tYXBfaW8JCT0gczNjNjQxMF9tYXBfaW8sCi0JCS5pbml0X2Nsb2Nrcwk9IHMzYzY0MTBfaW5pdF9jbG9ja3MsCi0JCS5pbml0X3VhcnRzCT0gczNjNjQxMF9pbml0X3VhcnRzLAotCQkuaW5pdAkJPSBzM2M2NDEwX2luaXQsCi0JCS5uYW1lCQk9IG5hbWVfczNjNjQxMCwKLQl9LAotfTsKLQotLyogbWluaW1hbCBJTyBtYXBwaW5nICovCi0KLS8qIHNlZSBub3RlcyBvbiB1YXJ0IG1hcCBpbiBhcmNoL2FybS9tYWNoLXMzYzY0MDAvaW5jbHVkZS9tYWNoL2RlYnVnLW1hY3JvLlMgKi8KLSNkZWZpbmUgVUFSVF9PRkZTIChTM0NfUEFfVUFSVCAmIDB4ZmZmZmYpCi0KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgczNjX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVMzQ19WQV9TWVMsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihTM0M2NFhYX1BBX1NZU0NPTiksCi0JCS5sZW5ndGgJCT0gU1pfNEssCi0JCS50eXBlCQk9IE1UX0RFVklDRSwKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpKFMzQ19WQV9VQVJUICsgVUFSVF9PRkZTKSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQ19QQV9VQVJUKSwKLQkJLmxlbmd0aAkJPSBTWl80SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTM0NfVkFfVklDMCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQzY0WFhfUEFfVklDMCksCi0JCS5sZW5ndGgJCT0gU1pfMTZLLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UsCi0JfSwgewotCQkudmlydHVhbAk9ICh1bnNpZ25lZCBsb25nKVMzQ19WQV9WSUMxLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDNjRYWF9QQV9WSUMxKSwKLQkJLmxlbmd0aAkJPSBTWl8xNkssCi0JCS50eXBlCQk9IE1UX0RFVklDRSwKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzNDX1ZBX1RJTUVSLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDX1BBX1RJTUVSKSwKLQkJLmxlbmd0aAkJPSBTWl8xNkssCi0JCS50eXBlCQk9IE1UX0RFVklDRSwKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzNDNjRYWF9WQV9HUElPLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDNjRYWF9QQV9HUElPKSwKLQkJLmxlbmd0aAkJPSBTWl80SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTM0M2NFhYX1ZBX01PREVNLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDNjRYWF9QQV9NT0RFTSksCi0JCS5sZW5ndGgJCT0gU1pfNEssCi0JCS50eXBlCQk9IE1UX0RFVklDRSwKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzNDX1ZBX1dBVENIRE9HLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzNDNjRYWF9QQV9XQVRDSERPRyksCi0JCS5sZW5ndGgJCT0gU1pfNEssCi0JCS50eXBlCQk9IE1UX0RFVklDRSwKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzNDX1ZBX1VTQl9IU1BIWSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQzY0WFhfUEFfVVNCX0hTUEhZKSwKLQkJLmxlbmd0aAkJPSBTWl8xSywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sCi19OwotCi0KLXN0cnVjdCBzeXNkZXZfY2xhc3MgczNjNjR4eF9zeXNjbGFzcyA9IHsKLQkubmFtZQk9ICJzM2M2NHh4LWNvcmUiLAotfTsKLQotc3RhdGljIHN0cnVjdCBzeXNfZGV2aWNlIHMzYzY0eHhfc3lzZGV2ID0gewotCS5jbHMJPSAmczNjNjR4eF9zeXNjbGFzcywKLX07Ci0KLQotLyogcmVhZCBjcHUgaWRlbnRpZmljYXRpb24gY29kZSAqLwotCi12b2lkIF9faW5pdCBzM2M2NHh4X2luaXRfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBzaXplKQotewotCXVuc2lnbmVkIGxvbmcgaWRjb2RlOwotCi0JLyogaW5pdGlhbGlzZSB0aGUgaW8gZGVzY3JpcHRvcnMgd2UgbmVlZCBmb3IgaW5pdGlhbGlzYXRpb24gKi8KLQlpb3RhYmxlX2luaXQoczNjX2lvZGVzYywgQVJSQVlfU0laRShzM2NfaW9kZXNjKSk7Ci0JaW90YWJsZV9pbml0KG1hY2hfZGVzYywgc2l6ZSk7Ci0KLQlpZGNvZGUgPSBfX3Jhd19yZWFkbChTM0NfVkFfU1lTICsgMHgxMTgpOwotCWlmICghaWRjb2RlKSB7Ci0JCS8qIFMzQzY0MDAgaGFzIHRoZSBJRCByZWdpc3RlciBpbiBhIGRpZmZlcmVudCBwbGFjZSwKLQkJICogYW5kIG5lZWRzIGEgd3JpdGUgYmVmb3JlIGl0IGNhbiBiZSByZWFkLiAqLwotCi0JCV9fcmF3X3dyaXRlbCgweDAsIFMzQ19WQV9TWVMgKyAweEExQyk7Ci0JCWlkY29kZSA9IF9fcmF3X3JlYWRsKFMzQ19WQV9TWVMgKyAweEExQyk7Ci0JfQotCi0JczNjX2luaXRfY3B1KGlkY29kZSwgY3B1X2lkcywgQVJSQVlfU0laRShjcHVfaWRzKSk7Ci19Ci0KLXN0YXRpYyBfX2luaXQgaW50IHMzYzY0eHhfc3lzZGV2X2luaXQodm9pZCkKLXsKLQlzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJnMzYzY0eHhfc3lzY2xhc3MpOwotCXJldHVybiBzeXNkZXZfcmVnaXN0ZXIoJnMzYzY0eHhfc3lzZGV2KTsKLX0KLQotY29yZV9pbml0Y2FsbChzM2M2NHh4X3N5c2Rldl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9kZXYtYXVkaW8uYyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9kZXYtYXVkaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTIxYTg4Zi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZGV2LWF1ZGlvLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjcgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvZGV2LWF1ZGlvLmMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MKLSAqICAgICAgTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Ci0gKgotCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLQotI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgotI2luY2x1ZGUgPG1hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8bWFjaC9kbWEuaD4KLSNpbmNsdWRlIDxtYWNoL2dwaW8uaD4KLQotI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgotI2luY2x1ZGUgPHBsYXQvYXVkaW8uaD4KLSNpbmNsdWRlIDxwbGF0L2dwaW8tYmFuay1kLmg+Ci0jaW5jbHVkZSA8cGxhdC9ncGlvLWJhbmstZS5oPgotI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2M2NHh4X2lpczBfcmVzb3VyY2VbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCA9IFMzQzY0WFhfUEFfSUlTMCwKLQkJLmVuZCAgID0gUzNDNjRYWF9QQV9JSVMwICsgMHgxMDAgLSAxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2M2NHh4X2RldmljZV9paXMwID0gewotCS5uYW1lCQkgID0gInMzYzY0eHgtaWlzIiwKLQkuaWQJCSAgPSAwLAotCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzYzY0eHhfaWlzMF9yZXNvdXJjZSksCi0JLnJlc291cmNlCSAgPSBzM2M2NHh4X2lpczBfcmVzb3VyY2UsCi19OwotRVhQT1JUX1NZTUJPTChzM2M2NHh4X2RldmljZV9paXMwKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2M2NHh4X2lpczFfcmVzb3VyY2VbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCA9IFMzQzY0WFhfUEFfSUlTMSwKLQkJLmVuZCAgID0gUzNDNjRYWF9QQV9JSVMxICsgMHgxMDAgLSAxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2M2NHh4X2RldmljZV9paXMxID0gewotCS5uYW1lCQkgID0gInMzYzY0eHgtaWlzIiwKLQkuaWQJCSAgPSAxLAotCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzYzY0eHhfaWlzMV9yZXNvdXJjZSksCi0JLnJlc291cmNlCSAgPSBzM2M2NHh4X2lpczFfcmVzb3VyY2UsCi19OwotRVhQT1JUX1NZTUJPTChzM2M2NHh4X2RldmljZV9paXMxKTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2M2NHh4X2lpc3Y0X3Jlc291cmNlW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgPSBTM0M2NFhYX1BBX0lJU1Y0LAotCQkuZW5kICAgPSBTM0M2NFhYX1BBX0lJU1Y0ICsgMHgxMDAgLSAxLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2M2NHh4X2RldmljZV9paXN2NCA9IHsKLQkubmFtZQkJICA9ICJzM2M2NHh4LWlpcy12NCIsCi0JLmlkCQkgID0gLTEsCi0JLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjNjR4eF9paXN2NF9yZXNvdXJjZSksCi0JLnJlc291cmNlCSAgPSBzM2M2NHh4X2lpc3Y0X3Jlc291cmNlLAotfTsKLUVYUE9SVF9TWU1CT0woczNjNjR4eF9kZXZpY2VfaWlzdjQpOwotCi0KLS8qIFBDTSBDb250cm9sbGVyIHBsYXRmb3JtX2RldmljZXMgKi8KLQotc3RhdGljIGludCBzM2M2NHh4X3BjbV9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN3aXRjaCAocGRldi0+aWQpIHsKLQljYXNlIDA6Ci0JCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRCgwKSwgUzNDNjRYWF9HUEQwX1BDTTBfU0NMSyk7Ci0JCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRCgxKSwgUzNDNjRYWF9HUEQxX1BDTTBfRVhUQ0xLKTsKLQkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BEKDIpLCBTM0M2NFhYX0dQRDJfUENNMF9GU1lOQyk7Ci0JCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRCgzKSwgUzNDNjRYWF9HUEQzX1BDTTBfU0lOKTsKLQkJczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BEKDQpLCBTM0M2NFhYX0dQRDRfUENNMF9TT1VUKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoMCksIFMzQzY0WFhfR1BFMF9QQ00xX1NDTEspOwotCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoMSksIFMzQzY0WFhfR1BFMV9QQ00xX0VYVENMSyk7Ci0JCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRSgyKSwgUzNDNjRYWF9HUEUyX1BDTTFfRlNZTkMpOwotCQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEUoMyksIFMzQzY0WFhfR1BFM19QQ00xX1NJTik7Ci0JCXMzY19ncGlvX2NmZ3BpbihTM0M2NFhYX0dQRSg0KSwgUzNDNjRYWF9HUEU0X1BDTTFfU09VVCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0RFQlVHICJJbnZhbGlkIFBDTSBDb250cm9sbGVyIG51bWJlciEiKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjNjR4eF9wY20wX3Jlc291cmNlW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgPSBTM0M2NFhYX1BBX1BDTTAsCi0JCS5lbmQgICA9IFMzQzY0WFhfUEFfUENNMCArIDB4MTAwIC0gMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCA9IERNQUNIX1BDTTBfVFgsCi0JCS5lbmQgICA9IERNQUNIX1BDTTBfVFgsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQgPSBETUFDSF9QQ00wX1JYLAotCQkuZW5kICAgPSBETUFDSF9QQ00wX1JYLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgczNjX3BjbTBfcGRhdGEgPSB7Ci0JLmNmZ19ncGlvID0gczNjNjR4eF9wY21fY2ZnX2dwaW8sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzY0eHhfZGV2aWNlX3BjbTAgPSB7Ci0JLm5hbWUJCSAgPSAic2Ftc3VuZy1wY20iLAotCS5pZAkJICA9IDAsCi0JLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjNjR4eF9wY20wX3Jlc291cmNlKSwKLQkucmVzb3VyY2UJICA9IHMzYzY0eHhfcGNtMF9yZXNvdXJjZSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzM2NfcGNtMF9wZGF0YSwKLQl9LAotfTsKLUVYUE9SVF9TWU1CT0woczNjNjR4eF9kZXZpY2VfcGNtMCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjNjR4eF9wY20xX3Jlc291cmNlW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgPSBTM0M2NFhYX1BBX1BDTTEsCi0JCS5lbmQgICA9IFMzQzY0WFhfUEFfUENNMSArIDB4MTAwIC0gMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCA9IERNQUNIX1BDTTFfVFgsCi0JCS5lbmQgICA9IERNQUNIX1BDTTFfVFgsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfRE1BLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQgPSBETUFDSF9QQ00xX1JYLAotCQkuZW5kICAgPSBETUFDSF9QQ00xX1JYLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0RNQSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBzM2NfYXVkaW9fcGRhdGEgczNjX3BjbTFfcGRhdGEgPSB7Ci0JLmNmZ19ncGlvID0gczNjNjR4eF9wY21fY2ZnX2dwaW8sCi19OwotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzY0eHhfZGV2aWNlX3BjbTEgPSB7Ci0JLm5hbWUJCSAgPSAic2Ftc3VuZy1wY20iLAotCS5pZAkJICA9IDEsCi0JLm51bV9yZXNvdXJjZXMJICA9IEFSUkFZX1NJWkUoczNjNjR4eF9wY20xX3Jlc291cmNlKSwKLQkucmVzb3VyY2UJICA9IHMzYzY0eHhfcGNtMV9yZXNvdXJjZSwKLQkuZGV2ID0gewotCQkucGxhdGZvcm1fZGF0YSA9ICZzM2NfcGNtMV9wZGF0YSwKLQl9LAotfTsKLUVYUE9SVF9TWU1CT0woczNjNjR4eF9kZXZpY2VfcGNtMSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZGV2LXVhcnQuYyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9kZXYtdWFydC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MmMxMWE2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9kZXYtdWFydC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTc2ICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9kZXYtdWFydC5jCi0gKgotICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KLSAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBCYXNlIFMzQzY0WFggVUFSVCByZXNvdXJjZSBhbmQgZGV2aWNlIGRlZmluaXRpb25zCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0qLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L2RldnMuaD4KLQotLyogU2VyaWFsIHBvcnQgcmVnaXN0cmF0aW9ucyAqLwotCi0vKiA2NHh4IHVhcnRzIGFyZSBjbG9zZXIgdG9nZXRoZXIgKi8KLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzM2M2NHh4X3VhcnQwX3Jlc291cmNlW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQJPSBTM0NfUEFfVUFSVDAsCi0JCS5lbmQJPSBTM0NfUEFfVUFSVDAgKyAweDEwMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IElSUV9TM0NVQVJUX1JYMCwKLQkJLmVuZAk9IElSUV9TM0NVQVJUX1JYMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS5zdGFydAk9IElSUV9TM0NVQVJUX1RYMCwKLQkJLmVuZAk9IElSUV9TM0NVQVJUX1RYMCwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0KLQl9LAotCVszXSA9IHsKLQkJLnN0YXJ0CT0gSVJRX1MzQ1VBUlRfRVJSMCwKLQkJLmVuZAk9IElSUV9TM0NVQVJUX0VSUjAsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczNjNjR4eF91YXJ0MV9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ID0gUzNDX1BBX1VBUlQxLAotCQkuZW5kICAgPSBTM0NfUEFfVUFSVDEgKyAweDEwMCwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IElSUV9TM0NVQVJUX1JYMSwKLQkJLmVuZAk9IElSUV9TM0NVQVJUX1JYMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS5zdGFydAk9IElSUV9TM0NVQVJUX1RYMSwKLQkJLmVuZAk9IElSUV9TM0NVQVJUX1RYMSwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0KLQl9LAotCVszXSA9IHsKLQkJLnN0YXJ0CT0gSVJRX1MzQ1VBUlRfRVJSMSwKLQkJLmVuZAk9IElSUV9TM0NVQVJUX0VSUjEsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHMzYzZ4eF91YXJ0Ml9yZXNvdXJjZVtdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ID0gUzNDX1BBX1VBUlQyLAotCQkuZW5kICAgPSBTM0NfUEFfVUFSVDIgKyAweDEwMCwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydAk9IElSUV9TM0NVQVJUX1JYMiwKLQkJLmVuZAk9IElSUV9TM0NVQVJUX1JYMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0JfSwKLQlbMl0gPSB7Ci0JCS5zdGFydAk9IElSUV9TM0NVQVJUX1RYMiwKLQkJLmVuZAk9IElSUV9TM0NVQVJUX1RYMiwKLQkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCi0KLQl9LAotCVszXSA9IHsKLQkJLnN0YXJ0CT0gSVJRX1MzQ1VBUlRfRVJSMiwKLQkJLmVuZAk9IElSUV9TM0NVQVJUX0VSUjIsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHMzYzY0eHhfdWFydDNfcmVzb3VyY2VbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCA9IFMzQ19QQV9VQVJUMywKLQkJLmVuZCAgID0gUzNDX1BBX1VBUlQzICsgMHgxMDAsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9SWDMsCi0JCS5lbmQJPSBJUlFfUzNDVUFSVF9SWDMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCX0sCi0JWzJdID0gewotCQkuc3RhcnQJPSBJUlFfUzNDVUFSVF9UWDMsCi0JCS5lbmQJPSBJUlFfUzNDVUFSVF9UWDMsCi0JCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAotCi0JfSwKLQlbM10gPSB7Ci0JCS5zdGFydAk9IElSUV9TM0NVQVJUX0VSUjMsCi0JCS5lbmQJPSBJUlFfUzNDVUFSVF9FUlIzLAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotCi1zdHJ1Y3QgczNjMjR4eF91YXJ0X3Jlc291cmNlcyBzM2M2NHh4X3VhcnRfcmVzb3VyY2VzW10gX19pbml0ZGF0YSA9IHsKLQlbMF0gPSB7Ci0JCS5yZXNvdXJjZXMJPSBzM2M2NHh4X3VhcnQwX3Jlc291cmNlLAotCQkubnJfcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzM2M2NHh4X3VhcnQwX3Jlc291cmNlKSwKLQl9LAotCVsxXSA9IHsKLQkJLnJlc291cmNlcwk9IHMzYzY0eHhfdWFydDFfcmVzb3VyY2UsCi0JCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHMzYzY0eHhfdWFydDFfcmVzb3VyY2UpLAotCX0sCi0JWzJdID0gewotCQkucmVzb3VyY2VzCT0gczNjNnh4X3VhcnQyX3Jlc291cmNlLAotCQkubnJfcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzM2M2eHhfdWFydDJfcmVzb3VyY2UpLAotCX0sCi0JWzNdID0gewotCQkucmVzb3VyY2VzCT0gczNjNjR4eF91YXJ0M19yZXNvdXJjZSwKLQkJLm5yX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczNjNjR4eF91YXJ0M19yZXNvdXJjZSksCi0JfSwKLX07Ci0KLS8qIHVhcnQgZGV2aWNlcyAqLwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2MyNHh4X3VhcnRfZGV2aWNlMCA9IHsKLQkuaWQJCT0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzI0eHhfdWFydF9kZXZpY2UxID0gewotCS5pZAkJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjMjR4eF91YXJ0X2RldmljZTIgPSB7Ci0JLmlkCQk9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2MyNHh4X3VhcnRfZGV2aWNlMyA9IHsKLQkuaWQJCT0gMywKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnMzYzI0eHhfdWFydF9zcmNbNF0gPSB7Ci0JJnMzYzI0eHhfdWFydF9kZXZpY2UwLAotCSZzM2MyNHh4X3VhcnRfZGV2aWNlMSwKLQkmczNjMjR4eF91YXJ0X2RldmljZTIsCi0JJnMzYzI0eHhfdWFydF9kZXZpY2UzLAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSAqczNjMjR4eF91YXJ0X2RldnNbNF0gPSB7Ci19OwotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZG1hLmMgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZG1hLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ1NTRiOTMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2RtYS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzUwICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9kbWEuYwotICoKLSAqIENvcHlyaWdodCAyMDA5IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOSBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogUzNDNjRYWCBETUEgY29yZQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSA8bWFjaC9kbWEuaD4KLSNpbmNsdWRlIDxtYWNoL21hcC5oPgotI2luY2x1ZGUgPG1hY2gvaXJxcy5oPgotCi0jaW5jbHVkZSA8cGxhdC9kbWEtcGxhdC5oPgotI2luY2x1ZGUgPHBsYXQvcmVncy1zeXMuaD4KLQotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9wbDA4MC5oPgotCi0vKiBkbWEgY2hhbm5lbCBzdGF0ZSBpbmZvcm1hdGlvbiAqLwotCi1zdHJ1Y3QgczNjNjR4eF9kbWFjIHsKLQlzdHJ1Y3Qgc3lzX2RldmljZQkgc3lzZGV2OwotCXN0cnVjdCBjbGsJCSpjbGs7Ci0Jdm9pZCBfX2lvbWVtCQkqcmVnczsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbm5lbHM7Ci0JZW51bSBkbWFfY2gJCSBjaGFuYmFzZTsKLX07Ci0KLS8qIHBvb2wgdG8gcHJvdmlkZSBMTEkgYnVmZmVycyAqLwotc3RhdGljIHN0cnVjdCBkbWFfcG9vbCAqZG1hX3Bvb2w7Ci0KLS8qIERlYnVnIGNvbmZpZ3VyYXRpb24gYW5kIGNvZGUgKi8KLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgZGVidWdfc2hvd19idWZmcyA9IDA7Ci0KLXN0YXRpYyB2b2lkIGRiZ19zaG93Y2hhbihzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbikKLXsKLQlwcl9kZWJ1ZygiRE1BJWQ6ICUwOHgtPiUwOHggTCAlMDh4IEMgJTA4eCwlMDh4IFMgJTA4eFxuIiwKLQkJIGNoYW4tPm51bWJlciwKLQkJIHJlYWRsKGNoYW4tPnJlZ3MgKyBQTDA4MF9DSF9TUkNfQUREUiksCi0JCSByZWFkbChjaGFuLT5yZWdzICsgUEwwODBfQ0hfRFNUX0FERFIpLAotCQkgcmVhZGwoY2hhbi0+cmVncyArIFBMMDgwX0NIX0xMSSksCi0JCSByZWFkbChjaGFuLT5yZWdzICsgUEwwODBfQ0hfQ09OVFJPTCksCi0JCSByZWFkbChjaGFuLT5yZWdzICsgUEwwODBTX0NIX0NPTlRST0wyKSwKLQkJIHJlYWRsKGNoYW4tPnJlZ3MgKyBQTDA4MFNfQ0hfQ09ORklHKSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNob3dfbGxpKHN0cnVjdCBwbDA4MHNfbGxpICpsbGkpCi17Ci0JcHJfZGVidWcoIkxMSVslcF0gJTA4eC0+JTA4eCwgTkwgJTA4eCBDICUwOHgsJTA4eFxuIiwKLQkJIGxsaSwgbGxpLT5zcmNfYWRkciwgbGxpLT5kc3RfYWRkciwgbGxpLT5uZXh0X2xsaSwKLQkJIGxsaS0+Y29udHJvbDAsIGxsaS0+Y29udHJvbDEpOwotfQotCi1zdGF0aWMgdm9pZCBkYmdfc2hvd2J1ZmZzKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuKQotewotCXN0cnVjdCBzM2M2NHh4X2RtYV9idWZmICpwdHI7Ci0Jc3RydWN0IHMzYzY0eHhfZG1hX2J1ZmYgKmVuZDsKLQotCXByX2RlYnVnKCJETUElZDogYnVmZnMgbmV4dCAlcCwgY3VyciAlcCwgZW5kICVwXG4iLAotCQkgY2hhbi0+bnVtYmVyLCBjaGFuLT5uZXh0LCBjaGFuLT5jdXJyLCBjaGFuLT5lbmQpOwotCi0JcHRyID0gY2hhbi0+bmV4dDsKLQllbmQgPSBjaGFuLT5lbmQ7Ci0KLQlpZiAoZGVidWdfc2hvd19idWZmcykgewotCQlmb3IgKDsgcHRyICE9IE5VTEw7IHB0ciA9IHB0ci0+bmV4dCkgewotCQkJcHJfZGVidWcoIkRNQSVkOiAlMDh4ICIsCi0JCQkJIGNoYW4tPm51bWJlciwgcHRyLT5sbGlfZG1hKTsKLQkJCXNob3dfbGxpKHB0ci0+bGxpKTsKLQkJfQotCX0KLX0KLQotLyogRW5kIG9mIERlYnVnICovCi0KLXN0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqczNjNjR4eF9kbWFfbWFwX2NoYW5uZWwodW5zaWduZWQgaW50IGNoYW5uZWwpCi17Ci0Jc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW47Ci0JdW5zaWduZWQgaW50IHN0YXJ0LCBvZmZzOwotCi0Jc3RhcnQgPSAwOwotCi0JaWYgKGNoYW5uZWwgPj0gRE1BQ0hfUENNMV9UWCkKLQkJc3RhcnQgPSA4OwotCi0JZm9yIChvZmZzID0gMDsgb2ZmcyA8IDg7IG9mZnMrKykgewotCQljaGFuID0gJnMzYzI0MTBfY2hhbnNbc3RhcnQgKyBvZmZzXTsKLQkJaWYgKCFjaGFuLT5pbl91c2UpCi0JCQlnb3RvIGZvdW5kOwotCX0KLQotCXJldHVybiBOVUxMOwotCi1mb3VuZDoKLQlzM2NfZG1hX2NoYW5fbWFwW2NoYW5uZWxdID0gY2hhbjsKLQlyZXR1cm4gY2hhbjsKLX0KLQotaW50IHMzYzI0MTBfZG1hX2NvbmZpZyh1bnNpZ25lZCBpbnQgY2hhbm5lbCwgaW50IHhmZXJ1bml0KQotewotCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gczNjX2RtYV9sb29rdXBfY2hhbm5lbChjaGFubmVsKTsKLQotCWlmIChjaGFuID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3dpdGNoICh4ZmVydW5pdCkgewotCWNhc2UgMToKLQkJY2hhbi0+aHdfd2lkdGggPSAwOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWNoYW4tPmh3X3dpZHRoID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQljaGFuLT5od193aWR0aCA9IDI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGlsbGVnYWwgd2lkdGggJWRcbiIsIF9fZnVuY19fLCB4ZmVydW5pdCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9jb25maWcpOwotCi1zdGF0aWMgdm9pZCBzM2M2NHh4X2RtYV9maWxsX2xsaShzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiwKLQkJCQkgc3RydWN0IHBsMDgwc19sbGkgKmxsaSwKLQkJCQkgZG1hX2FkZHJfdCBkYXRhLCBpbnQgc2l6ZSkKLXsKLQlkbWFfYWRkcl90IHNyYywgZHN0OwotCXUzMiBjb250cm9sMCwgY29udHJvbDE7Ci0KLQlzd2l0Y2ggKGNoYW4tPnNvdXJjZSkgewotCWNhc2UgUzNDMjQxMF9ETUFTUkNfSFc6Ci0JCXNyYyA9IGNoYW4tPmRldl9hZGRyOwotCQlkc3QgPSBkYXRhOwotCQljb250cm9sMCA9IFBMMDgwX0NPTlRST0xfU1JDX0FIQjI7Ci0JCWNvbnRyb2wwIHw9IFBMMDgwX0NPTlRST0xfRFNUX0lOQ1I7Ci0JCWJyZWFrOwotCi0JY2FzZSBTM0MyNDEwX0RNQVNSQ19NRU06Ci0JCXNyYyA9IGRhdGE7Ci0JCWRzdCA9IGNoYW4tPmRldl9hZGRyOwotCQljb250cm9sMCA9IFBMMDgwX0NPTlRST0xfRFNUX0FIQjI7Ci0JCWNvbnRyb2wwIHw9IFBMMDgwX0NPTlRST0xfU1JDX0lOQ1I7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCX0KLQotCS8qIG5vdGUsIHdlIGRvIG5vdCBjdXJyZW50bHkgc2V0dXAgYW55IG9mIHRoZSBidXJzdCBjb250cm9scyAqLwotCi0JY29udHJvbDEgPSBzaXplID4+IGNoYW4tPmh3X3dpZHRoOwkvKiBzaXplIGluIG5vIG9mIHhmZXJzICovCi0JY29udHJvbDAgfD0gUEwwODBfQ09OVFJPTF9QUk9UX1NZUzsJLyogYWx3YXlzIGluIHByaXYuIG1vZGUgKi8KLQljb250cm9sMCB8PSBQTDA4MF9DT05UUk9MX1RDX0lSUV9FTjsJLyogYWx3YXlzIGZpcmUgSVJRICovCi0JY29udHJvbDAgfD0gKHUzMiljaGFuLT5od193aWR0aCA8PCBQTDA4MF9DT05UUk9MX0RXSURUSF9TSElGVDsKLQljb250cm9sMCB8PSAodTMyKWNoYW4tPmh3X3dpZHRoIDw8IFBMMDgwX0NPTlRST0xfU1dJRFRIX1NISUZUOwotCi0JbGxpLT5zcmNfYWRkciA9IHNyYzsKLQlsbGktPmRzdF9hZGRyID0gZHN0OwotCWxsaS0+bmV4dF9sbGkgPSAwOwotCWxsaS0+Y29udHJvbDAgPSBjb250cm9sMDsKLQlsbGktPmNvbnRyb2wxID0gY29udHJvbDE7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzYzY0eHhfbGxpX3RvX3JlZ3Moc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4sCi0JCQkJc3RydWN0IHBsMDgwc19sbGkgKmxsaSkKLXsKLQl2b2lkIF9faW9tZW0gKnJlZ3MgPSBjaGFuLT5yZWdzOwotCi0JcHJfZGVidWcoIiVzOiBMTEkgJXAgPT4gcmVnc1xuIiwgX19mdW5jX18sIGxsaSk7Ci0Jc2hvd19sbGkobGxpKTsKLQotCXdyaXRlbChsbGktPnNyY19hZGRyLCByZWdzICsgUEwwODBfQ0hfU1JDX0FERFIpOwotCXdyaXRlbChsbGktPmRzdF9hZGRyLCByZWdzICsgUEwwODBfQ0hfRFNUX0FERFIpOwotCXdyaXRlbChsbGktPm5leHRfbGxpLCByZWdzICsgUEwwODBfQ0hfTExJKTsKLQl3cml0ZWwobGxpLT5jb250cm9sMCwgcmVncyArIFBMMDgwX0NIX0NPTlRST0wpOwotCXdyaXRlbChsbGktPmNvbnRyb2wxLCByZWdzICsgUEwwODBTX0NIX0NPTlRST0wyKTsKLX0KLQotc3RhdGljIGludCBzM2M2NHh4X2RtYV9zdGFydChzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbikKLXsKLQlzdHJ1Y3QgczNjNjR4eF9kbWFjICpkbWFjID0gY2hhbi0+ZG1hYzsKLQl1MzIgY29uZmlnOwotCXUzMiBiaXQgPSBjaGFuLT5iaXQ7Ci0KLQlkYmdfc2hvd2NoYW4oY2hhbik7Ci0KLQlwcl9kZWJ1ZygiJXM6IGNsZWFyaW5nIGludGVycnVwdHNcbiIsIF9fZnVuY19fKTsKLQotCS8qIGNsZWFyIGludGVycnVwdHMgKi8KLQl3cml0ZWwoYml0LCBkbWFjLT5yZWdzICsgUEwwODBfVENfQ0xFQVIpOwotCXdyaXRlbChiaXQsIGRtYWMtPnJlZ3MgKyBQTDA4MF9FUlJfQ0xFQVIpOwotCi0JcHJfZGVidWcoIiVzOiBzdGFydGluZyBjaGFubmVsXG4iLCBfX2Z1bmNfXyk7Ci0KLQljb25maWcgPSByZWFkbChjaGFuLT5yZWdzICsgUEwwODBTX0NIX0NPTkZJRyk7Ci0JY29uZmlnIHw9IFBMMDgwX0NPTkZJR19FTkFCTEU7Ci0KLQlwcl9kZWJ1ZygiJXM6IHdyaXRpbmcgY29uZmlnICUwOHhcbiIsIF9fZnVuY19fLCBjb25maWcpOwotCXdyaXRlbChjb25maWcsIGNoYW4tPnJlZ3MgKyBQTDA4MFNfQ0hfQ09ORklHKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzY0eHhfZG1hX3N0b3Aoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4pCi17Ci0JdTMyIGNvbmZpZzsKLQlpbnQgdGltZW91dDsKLQotCXByX2RlYnVnKCIlczogc3RvcHBpbmcgY2hhbm5lbFxuIiwgX19mdW5jX18pOwotCi0JZGJnX3Nob3djaGFuKGNoYW4pOwotCi0JY29uZmlnID0gcmVhZGwoY2hhbi0+cmVncyArIFBMMDgwU19DSF9DT05GSUcpOwotCWNvbmZpZyB8PSBQTDA4MF9DT05GSUdfSEFMVDsKLQl3cml0ZWwoY29uZmlnLCBjaGFuLT5yZWdzICsgUEwwODBTX0NIX0NPTkZJRyk7Ci0KLQl0aW1lb3V0ID0gMTAwMDsKLQlkbyB7Ci0JCWNvbmZpZyA9IHJlYWRsKGNoYW4tPnJlZ3MgKyBQTDA4MFNfQ0hfQ09ORklHKTsKLQkJcHJfZGVidWcoIiVzOiAlZCAtIGNvbmZpZyAlMDh4XG4iLCBfX2Z1bmNfXywgdGltZW91dCwgY29uZmlnKTsKLQkJaWYgKGNvbmZpZyAmIFBMMDgwX0NPTkZJR19BQ1RJVkUpCi0JCQl1ZGVsYXkoMTApOwotCQllbHNlCi0JCQlicmVhazsKLQkJfSB3aGlsZSAoLS10aW1lb3V0ID4gMCk7Ci0KLQlpZiAoY29uZmlnICYgUEwwODBfQ09ORklHX0FDVElWRSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjaGFubmVsIHN0aWxsIGFjdGl2ZVxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KLQljb25maWcgPSByZWFkbChjaGFuLT5yZWdzICsgUEwwODBTX0NIX0NPTkZJRyk7Ci0JY29uZmlnICY9IH5QTDA4MF9DT05GSUdfRU5BQkxFOwotCXdyaXRlbChjb25maWcsIGNoYW4tPnJlZ3MgKyBQTDA4MFNfQ0hfQ09ORklHKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgczNjNjR4eF9kbWFfYnVmZmZkb25lKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuLAotCQkJCQkgc3RydWN0IHMzYzY0eHhfZG1hX2J1ZmYgKmJ1ZiwKLQkJCQkJIGVudW0gczNjMjQxMF9kbWFfYnVmZnJlc3VsdCByZXN1bHQpCi17Ci0JaWYgKGNoYW4tPmNhbGxiYWNrX2ZuICE9IE5VTEwpCi0JCShjaGFuLT5jYWxsYmFja19mbikoY2hhbiwgYnVmLT5wdywgMCwgcmVzdWx0KTsKLX0KLQotc3RhdGljIHZvaWQgczNjNjR4eF9kbWFfZnJlZWJ1ZmYoc3RydWN0IHMzYzY0eHhfZG1hX2J1ZmYgKmJ1ZmYpCi17Ci0JZG1hX3Bvb2xfZnJlZShkbWFfcG9vbCwgYnVmZi0+bGxpLCBidWZmLT5sbGlfZG1hKTsKLQlrZnJlZShidWZmKTsKLX0KLQotc3RhdGljIGludCBzM2M2NHh4X2RtYV9mbHVzaChzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbikKLXsKLQlzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiAqYnVmZiwgKm5leHQ7Ci0JdTMyIGNvbmZpZzsKLQotCWRiZ19zaG93Y2hhbihjaGFuKTsKLQotCXByX2RlYnVnKCIlczogZmx1c2hpbmcgY2hhbm5lbFxuIiwgX19mdW5jX18pOwotCi0JY29uZmlnID0gcmVhZGwoY2hhbi0+cmVncyArIFBMMDgwU19DSF9DT05GSUcpOwotCWNvbmZpZyAmPSB+UEwwODBfQ09ORklHX0VOQUJMRTsKLQl3cml0ZWwoY29uZmlnLCBjaGFuLT5yZWdzICsgUEwwODBTX0NIX0NPTkZJRyk7Ci0KLQkvKiBkdW1wIGFsbCB0aGUgYnVmZmVycyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjaGFubmVsICovCi0KLQlmb3IgKGJ1ZmYgPSBjaGFuLT5jdXJyOyBidWZmICE9IE5VTEw7IGJ1ZmYgPSBuZXh0KSB7Ci0JCW5leHQgPSBidWZmLT5uZXh0OwotCQlwcl9kZWJ1ZygiJXM6IGJ1ZmYgJXAgKG5leHQgJXApXG4iLCBfX2Z1bmNfXywgYnVmZiwgYnVmZi0+bmV4dCk7Ci0KLQkJczNjNjR4eF9kbWFfYnVmZmZkb25lKGNoYW4sIGJ1ZmYsIFMzQzI0MTBfUkVTX0FCT1JUKTsKLQkJczNjNjR4eF9kbWFfZnJlZWJ1ZmYoYnVmZik7Ci0JfQotCi0JY2hhbi0+Y3VyciA9IGNoYW4tPm5leHQgPSBjaGFuLT5lbmQgPSBOVUxMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBzM2MyNDEwX2RtYV9jdHJsKHVuc2lnbmVkIGludCBjaGFubmVsLCBlbnVtIHMzYzI0MTBfY2hhbl9vcCBvcCkKLXsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IHMzY19kbWFfbG9va3VwX2NoYW5uZWwoY2hhbm5lbCk7Ci0KLQlXQVJOX09OKCFjaGFuKTsKLQlpZiAoIWNoYW4pCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3dpdGNoIChvcCkgewotCWNhc2UgUzNDMjQxMF9ETUFPUF9TVEFSVDoKLQkJcmV0dXJuIHMzYzY0eHhfZG1hX3N0YXJ0KGNoYW4pOwotCi0JY2FzZSBTM0MyNDEwX0RNQU9QX1NUT1A6Ci0JCXJldHVybiBzM2M2NHh4X2RtYV9zdG9wKGNoYW4pOwotCi0JY2FzZSBTM0MyNDEwX0RNQU9QX0ZMVVNIOgotCQlyZXR1cm4gczNjNjR4eF9kbWFfZmx1c2goY2hhbik7Ci0KLQkvKiBiZWxpdmUgUEFVU0UvUkVTVU1FIGFyZSBuby1vcHMgKi8KLQljYXNlIFMzQzI0MTBfRE1BT1BfUEFVU0U6Ci0JY2FzZSBTM0MyNDEwX0RNQU9QX1JFU1VNRToKLQljYXNlIFMzQzI0MTBfRE1BT1BfU1RBUlRFRDoKLQljYXNlIFMzQzI0MTBfRE1BT1BfVElNRU9VVDoKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIC1FTk9FTlQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX2N0cmwpOwotCi0vKiBzM2MyNDEwX2RtYV9lbnF1ZQotICoKLSAqLwotCi1pbnQgczNjMjQxMF9kbWFfZW5xdWV1ZSh1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdm9pZCAqaWQsCi0JCQlkbWFfYWRkcl90IGRhdGEsIGludCBzaXplKQotewotCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gczNjX2RtYV9sb29rdXBfY2hhbm5lbChjaGFubmVsKTsKLQlzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiAqbmV4dDsKLQlzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiAqYnVmZjsKLQlzdHJ1Y3QgcGwwODBzX2xsaSAqbGxpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKLQotCVdBUk5fT04oIWNoYW4pOwotCWlmICghY2hhbikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlidWZmID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHMzYzY0eHhfZG1hX2J1ZmYpLCBHRlBfQVRPTUlDKTsKLQlpZiAoIWJ1ZmYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gbWVtb3J5IGZvciBidWZmZXJcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JbGxpID0gZG1hX3Bvb2xfYWxsb2MoZG1hX3Bvb2wsIEdGUF9BVE9NSUMsICZidWZmLT5sbGlfZG1hKTsKLQlpZiAoIWxsaSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBtZW1vcnkgZm9yIGxsaVxuIiwgX19mdW5jX18pOwotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9idWZmOwotCX0KLQotCXByX2RlYnVnKCIlczogYnVmZiAlcCwgZHAgJTA4eCBsbGkgKCVwLCAlMDh4KSAlZFxuIiwKLQkJIF9fZnVuY19fLCBidWZmLCBkYXRhLCBsbGksICh1MzIpYnVmZi0+bGxpX2RtYSwgc2l6ZSk7Ci0KLQlidWZmLT5sbGkgPSBsbGk7Ci0JYnVmZi0+cHcgPSBpZDsKLQotCXMzYzY0eHhfZG1hX2ZpbGxfbGxpKGNoYW4sIGxsaSwgZGF0YSwgc2l6ZSk7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQlpZiAoKG5leHQgPSBjaGFuLT5uZXh0KSAhPSBOVUxMKSB7Ci0JCXN0cnVjdCBzM2M2NHh4X2RtYV9idWZmICplbmQgPSBjaGFuLT5lbmQ7Ci0JCXN0cnVjdCBwbDA4MHNfbGxpICplbmRsbGkgPSBlbmQtPmxsaTsKLQotCQlwcl9kZWJ1ZygiZW5xdWluZyBvbnRvIGNoYW5uZWxcbiIpOwotCi0JCWVuZC0+bmV4dCA9IGJ1ZmY7Ci0JCWVuZGxsaS0+bmV4dF9sbGkgPSBidWZmLT5sbGlfZG1hOwotCi0JCWlmIChjaGFuLT5mbGFncyAmIFMzQzI0MTBfRE1BRl9DSVJDVUxBUikgewotCQkJc3RydWN0IHMzYzY0eHhfZG1hX2J1ZmYgKmN1cnIgPSBjaGFuLT5jdXJyOwotCQkJbGxpLT5uZXh0X2xsaSA9IGN1cnItPmxsaV9kbWE7Ci0JCX0KLQotCQlpZiAobmV4dCA9PSBjaGFuLT5jdXJyKSB7Ci0JCQl3cml0ZWwoYnVmZi0+bGxpX2RtYSwgY2hhbi0+cmVncyArIFBMMDgwX0NIX0xMSSk7Ci0JCQljaGFuLT5uZXh0ID0gYnVmZjsKLQkJfQotCi0JCXNob3dfbGxpKGVuZGxsaSk7Ci0JCWNoYW4tPmVuZCA9IGJ1ZmY7Ci0JfSBlbHNlIHsKLQkJcHJfZGVidWcoImVucXVpbmcgb250byBlbXB0eSBjaGFubmVsXG4iKTsKLQotCQljaGFuLT5jdXJyID0gYnVmZjsKLQkJY2hhbi0+bmV4dCA9IGJ1ZmY7Ci0JCWNoYW4tPmVuZCA9IGJ1ZmY7Ci0KLQkJczNjNjR4eF9sbGlfdG9fcmVncyhjaGFuLCBsbGkpOwotCX0KLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXNob3dfbGxpKGxsaSk7Ci0KLQlkYmdfc2hvd2NoYW4oY2hhbik7Ci0JZGJnX3Nob3didWZmcyhjaGFuKTsKLQlyZXR1cm4gMDsKLQotZXJyX2J1ZmY6Ci0Ja2ZyZWUoYnVmZik7Ci0JcmV0dXJuIHJldDsKLX0KLQotRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9lbnF1ZXVlKTsKLQotCi1pbnQgczNjMjQxMF9kbWFfZGV2Y29uZmlnKGludCBjaGFubmVsLAotCQkJICBlbnVtIHMzYzI0MTBfZG1hc3JjIHNvdXJjZSwKLQkJCSAgdW5zaWduZWQgbG9uZyBkZXZhZGRyKQotewotCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gczNjX2RtYV9sb29rdXBfY2hhbm5lbChjaGFubmVsKTsKLQl1MzIgcGVyaXBoZXJhbDsKLQl1MzIgY29uZmlnID0gMDsKLQotCXByX2RlYnVnKCIlczogY2hhbm5lbCAlZCwgc291cmNlICVkLCBkZXYgJTA4bHgsIGNoYW4gJXBcbiIsCi0JCSBfX2Z1bmNfXywgY2hhbm5lbCwgc291cmNlLCBkZXZhZGRyLCBjaGFuKTsKLQotCVdBUk5fT04oIWNoYW4pOwotCWlmICghY2hhbikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlwZXJpcGhlcmFsID0gKGNoYW4tPnBlcmlwaGVyYWwgJiAweGYpOwotCWNoYW4tPnNvdXJjZSA9IHNvdXJjZTsKLQljaGFuLT5kZXZfYWRkciA9IGRldmFkZHI7Ci0KLQlwcl9kZWJ1ZygiJXM6IHBlcmlwaGVyYWwgJWRcbiIsIF9fZnVuY19fLCBwZXJpcGhlcmFsKTsKLQotCXN3aXRjaCAoc291cmNlKSB7Ci0JY2FzZSBTM0MyNDEwX0RNQVNSQ19IVzoKLQkJY29uZmlnID0gMiA8PCBQTDA4MF9DT05GSUdfRkxPV19DT05UUk9MX1NISUZUOwotCQljb25maWcgfD0gcGVyaXBoZXJhbCA8PCBQTDA4MF9DT05GSUdfU1JDX1NFTF9TSElGVDsKLQkJYnJlYWs7Ci0JY2FzZSBTM0MyNDEwX0RNQVNSQ19NRU06Ci0JCWNvbmZpZyA9IDEgPDwgUEwwODBfQ09ORklHX0ZMT1dfQ09OVFJPTF9TSElGVDsKLQkJY29uZmlnIHw9IHBlcmlwaGVyYWwgPDwgUEwwODBfQ09ORklHX0RTVF9TRUxfU0hJRlQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGJhZCBzb3VyY2VcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyogYWxsb3cgVEMgYW5kIEVSUiBpbnRlcnJ1cHRzICovCi0JY29uZmlnIHw9IFBMMDgwX0NPTkZJR19UQ19JUlFfTUFTSzsKLQljb25maWcgfD0gUEwwODBfQ09ORklHX0VSUl9JUlFfTUFTSzsKLQotCXByX2RlYnVnKCIlczogY29uZmlnICUwOHhcbiIsIF9fZnVuY19fLCBjb25maWcpOwotCi0Jd3JpdGVsKGNvbmZpZywgY2hhbi0+cmVncyArIFBMMDgwU19DSF9DT05GSUcpOwotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX2RldmNvbmZpZyk7Ci0KLQotaW50IHMzYzI0MTBfZG1hX2dldHBvc2l0aW9uKHVuc2lnbmVkIGludCBjaGFubmVsLAotCQkJICAgIGRtYV9hZGRyX3QgKnNyYywgZG1hX2FkZHJfdCAqZHN0KQotewotCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gczNjX2RtYV9sb29rdXBfY2hhbm5lbChjaGFubmVsKTsKLQotCVdBUk5fT04oIWNoYW4pOwotCWlmICghY2hhbikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoc3JjICE9IE5VTEwpCi0JCSpzcmMgPSByZWFkbChjaGFuLT5yZWdzICsgUEwwODBfQ0hfU1JDX0FERFIpOwotCi0JaWYgKGRzdCAhPSBOVUxMKQotCQkqZHN0ID0gcmVhZGwoY2hhbi0+cmVncyArIFBMMDgwX0NIX0RTVF9BRERSKTsKLQotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9nZXRwb3NpdGlvbik7Ci0KLS8qIHMzYzI0MTBfcmVxdWVzdF9kbWEKLSAqCi0gKiBnZXQgY29udHJvbCBvZiBhbiBkbWEgY2hhbm5lbAotKi8KLQotaW50IHMzYzI0MTBfZG1hX3JlcXVlc3QodW5zaWduZWQgaW50IGNoYW5uZWwsCi0JCQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50ICpjbGllbnQsCi0JCQl2b2lkICpkZXYpCi17Ci0Jc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXByX2RlYnVnKCJkbWElZDogczNjMjQxMF9yZXF1ZXN0X2RtYTogY2xpZW50PSVzLCBkZXY9JXBcbiIsCi0JCSBjaGFubmVsLCBjbGllbnQtPm5hbWUsIGRldik7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KLQljaGFuID0gczNjNjR4eF9kbWFfbWFwX2NoYW5uZWwoY2hhbm5lbCk7Ci0JaWYgKGNoYW4gPT0gTlVMTCkgewotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JZGJnX3Nob3djaGFuKGNoYW4pOwotCi0JY2hhbi0+Y2xpZW50ID0gY2xpZW50OwotCWNoYW4tPmluX3VzZSA9IDE7Ci0JY2hhbi0+cGVyaXBoZXJhbCA9IGNoYW5uZWw7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQkvKiBuZWVkIHRvIHNldHVwICovCi0KLQlwcl9kZWJ1ZygiJXM6IGNoYW5uZWwgaW5pdGlhbGlzZWQsICVwXG4iLCBfX2Z1bmNfXywgY2hhbik7Ci0KLQlyZXR1cm4gY2hhbi0+bnVtYmVyIHwgRE1BQ0hfTE9XX0xFVkVMOwotfQotCi1FWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX3JlcXVlc3QpOwotCi0vKiBzM2MyNDEwX2RtYV9mcmVlCi0gKgotICogcmVsZWFzZSB0aGUgZ2l2ZW4gY2hhbm5lbCBiYWNrIHRvIHRoZSBzeXN0ZW0sIHdpbGwgc3RvcCBhbmQgZmx1c2gKLSAqIGFueSBvdXRzdGFuZGluZyB0cmFuc2ZlcnMsIGFuZCBlbnN1cmUgdGhlIGNoYW5uZWwgaXMgcmVhZHkgZm9yIHRoZQotICogbmV4dCBjbGFpbWFudC4KLSAqCi0gKiBOb3RlLCBhbHRob3VnaCBhIHdhcm5pbmcgaXMgY3VycmVudGx5IHByaW50ZWQgaWYgdGhlIGZyZWVpbmcgY2xpZW50Ci0gKiBpbmZvIGlzIG5vdCB0aGUgc2FtZSBhcyB0aGUgcmVnaXN0cmFudCdzIGNsaWVudCBpbmZvLCB0aGUgZnJlZSBpcyBzdGlsbAotICogYWxsb3dlZCB0byBnbyB0aHJvdWdoLgotKi8KLQotaW50IHMzYzI0MTBfZG1hX2ZyZWUodW5zaWduZWQgaW50IGNoYW5uZWwsIHN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IHMzY19kbWFfbG9va3VwX2NoYW5uZWwoY2hhbm5lbCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlmIChjaGFuID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JaWYgKGNoYW4tPmNsaWVudCAhPSBjbGllbnQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZG1hJWQ6IHBvc3NpYmxlIGZyZWUgZnJvbSBkaWZmZXJlbnQgY2xpZW50IChjaGFubmVsICVwLCBwYXNzZWQgJXApXG4iLAotCQkgICAgICAgY2hhbm5lbCwgY2hhbi0+Y2xpZW50LCBjbGllbnQpOwotCX0KLQotCS8qIHNvcnQgb3V0IHN0b3BwaW5nIGFuZCBmcmVlaW5nIHRoZSBjaGFubmVsICovCi0KLQotCWNoYW4tPmNsaWVudCA9IE5VTEw7Ci0JY2hhbi0+aW5fdXNlID0gMDsKLQotCWlmICghKGNoYW5uZWwgJiBETUFDSF9MT1dfTEVWRUwpKQotCQlzM2NfZG1hX2NoYW5fbWFwW2NoYW5uZWxdID0gTlVMTDsKLQotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX2ZyZWUpOwotCi1zdGF0aWMgaXJxcmV0dXJuX3QgczNjNjR4eF9kbWFfaXJxKGludCBpcnEsIHZvaWQgKnB3KQotewotCXN0cnVjdCBzM2M2NHh4X2RtYWMgKmRtYWMgPSBwdzsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbjsKLQllbnVtIHMzYzI0MTBfZG1hX2J1ZmZyZXN1bHQgcmVzOwotCXUzMiB0Y3N0YXQsIGVycnN0YXQ7Ci0JdTMyIGJpdDsKLQlpbnQgb2ZmczsKLQotCXRjc3RhdCA9IHJlYWRsKGRtYWMtPnJlZ3MgKyBQTDA4MF9UQ19TVEFUVVMpOwotCWVycnN0YXQgPSByZWFkbChkbWFjLT5yZWdzICsgUEwwODBfRVJSX1NUQVRVUyk7Ci0KLQlmb3IgKG9mZnMgPSAwLCBiaXQgPSAxOyBvZmZzIDwgODsgb2ZmcysrLCBiaXQgPDw9IDEpIHsKLQkJc3RydWN0IHMzYzY0eHhfZG1hX2J1ZmYgKmJ1ZmY7Ci0KLQkJaWYgKCEoZXJyc3RhdCAmIGJpdCkgJiYgISh0Y3N0YXQgJiBiaXQpKQotCQkJY29udGludWU7Ci0KLQkJY2hhbiA9IGRtYWMtPmNoYW5uZWxzICsgb2ZmczsKLQkJcmVzID0gUzNDMjQxMF9SRVNfRVJSOwotCi0JCWlmICh0Y3N0YXQgJiBiaXQpIHsKLQkJCXdyaXRlbChiaXQsIGRtYWMtPnJlZ3MgKyBQTDA4MF9UQ19DTEVBUik7Ci0JCQlyZXMgPSBTM0MyNDEwX1JFU19PSzsKLQkJfQotCi0JCWlmIChlcnJzdGF0ICYgYml0KQotCQkJd3JpdGVsKGJpdCwgZG1hYy0+cmVncyArIFBMMDgwX0VSUl9DTEVBUik7Ci0KLQkJLyogJ25leHQnIHBvaW50cyB0byB0aGUgYnVmZmVyIHRoYXQgaXMgbmV4dCB0byB0aGUKLQkJICogY3VycmVudGx5IGFjdGl2ZSBidWZmZXIuCi0JCSAqIEZvciBDSVJDVUxBUiBxdWV1ZXMsICduZXh0JyB3aWxsIGJlIHNhbWUgYXMgJ2N1cnInCi0JCSAqIHdoZW4gJ2VuZCcgaXMgdGhlIGFjdGl2ZSBidWZmZXIuCi0JCSAqLwotCQlidWZmID0gY2hhbi0+Y3VycjsKLQkJd2hpbGUgKGJ1ZmYgJiYgYnVmZiAhPSBjaGFuLT5uZXh0Ci0JCQkJJiYgYnVmZi0+bmV4dCAhPSBjaGFuLT5uZXh0KQotCQkJYnVmZiA9IGJ1ZmYtPm5leHQ7Ci0KLQkJaWYgKCFidWZmKQotCQkJQlVHKCk7Ci0KLQkJaWYgKGJ1ZmYgPT0gY2hhbi0+bmV4dCkKLQkJCWJ1ZmYgPSBjaGFuLT5lbmQ7Ci0KLQkJczNjNjR4eF9kbWFfYnVmZmZkb25lKGNoYW4sIGJ1ZmYsIHJlcyk7Ci0KLQkJLyogRnJlZSB0aGUgbm9kZSBhbmQgdXBkYXRlIGN1cnIsIGlmIG5vbi1jaXJjdWxhciBxdWV1ZSAqLwotCQlpZiAoIShjaGFuLT5mbGFncyAmIFMzQzI0MTBfRE1BRl9DSVJDVUxBUikpIHsKLQkJCWNoYW4tPmN1cnIgPSBidWZmLT5uZXh0OwotCQkJczNjNjR4eF9kbWFfZnJlZWJ1ZmYoYnVmZik7Ci0JCX0KLQotCQkvKiBVcGRhdGUgJ25leHQnICovCi0JCWJ1ZmYgPSBjaGFuLT5uZXh0OwotCQlpZiAoY2hhbi0+bmV4dCA9PSBjaGFuLT5lbmQpIHsKLQkJCWNoYW4tPm5leHQgPSBjaGFuLT5jdXJyOwotCQkJaWYgKCEoY2hhbi0+ZmxhZ3MgJiBTM0MyNDEwX0RNQUZfQ0lSQ1VMQVIpKQotCQkJCWNoYW4tPmVuZCA9IE5VTEw7Ci0JCX0gZWxzZSB7Ci0JCQljaGFuLT5uZXh0ID0gYnVmZi0+bmV4dDsKLQkJfQotCX0KLQotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgZG1hX3N5c2NsYXNzID0gewotCS5uYW1lCQk9ICJzM2M2NHh4LWRtYSIsCi19OwotCi1zdGF0aWMgaW50IHMzYzY0eHhfZG1hX2luaXQxKGludCBjaG5vLCBlbnVtIGRtYV9jaCBjaGJhc2UsCi0JCQkgICAgIGludCBpcnEsIHVuc2lnbmVkIGludCBiYXNlKQotewotCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaHB0ciA9ICZzM2MyNDEwX2NoYW5zW2Nobm9dOwotCXN0cnVjdCBzM2M2NHh4X2RtYWMgKmRtYWM7Ci0JY2hhciBjbGtuYW1lWzE2XTsKLQl2b2lkIF9faW9tZW0gKnJlZ3M7Ci0Jdm9pZCBfX2lvbWVtICpyZWdwdHI7Ci0JaW50IGVyciwgY2g7Ci0KLQlkbWFjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHMzYzY0eHhfZG1hYyksIEdGUF9LRVJORUwpOwotCWlmICghZG1hYykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2MgbWVtXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCWRtYWMtPnN5c2Rldi5pZCA9IGNobm8gLyA4OwotCWRtYWMtPnN5c2Rldi5jbHMgPSAmZG1hX3N5c2NsYXNzOwotCi0JZXJyID0gc3lzZGV2X3JlZ2lzdGVyKCZkbWFjLT5zeXNkZXYpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIHN5c2RldmljZVxuIiwgX19mdW5jX18pOwotCQlnb3RvIGVycl9hbGxvYzsKLQl9Ci0KLQlyZWdzID0gaW9yZW1hcChiYXNlLCAweDIwMCk7Ci0JaWYgKCFyZWdzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBpb3JlbWFwKClcbiIsIF9fZnVuY19fKTsKLQkJZXJyID0gLUVOWElPOwotCQlnb3RvIGVycl9kZXY7Ci0JfQotCi0Jc25wcmludGYoY2xrbmFtZSwgc2l6ZW9mKGNsa25hbWUpLCAiZG1hJWQiLCBkbWFjLT5zeXNkZXYuaWQpOwotCi0JZG1hYy0+Y2xrID0gY2xrX2dldChOVUxMLCBjbGtuYW1lKTsKLQlpZiAoSVNfRVJSKGRtYWMtPmNsaykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGdldCBjbG9jayAlc1xuIiwgX19mdW5jX18sIGNsa25hbWUpOwotCQllcnIgPSBQVFJfRVJSKGRtYWMtPmNsayk7Ci0JCWdvdG8gZXJyX21hcDsKLQl9Ci0KLQljbGtfZW5hYmxlKGRtYWMtPmNsayk7Ci0KLQlkbWFjLT5yZWdzID0gcmVnczsKLQlkbWFjLT5jaGFuYmFzZSA9IGNoYmFzZTsKLQlkbWFjLT5jaGFubmVscyA9IGNocHRyOwotCi0JZXJyID0gcmVxdWVzdF9pcnEoaXJxLCBzM2M2NHh4X2RtYV9pcnEsIDAsICJETUEiLCBkbWFjKTsKLQlpZiAoZXJyIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gZ2V0IGlycVxuIiwgX19mdW5jX18pOwotCQlnb3RvIGVycl9jbGs7Ci0JfQotCi0JcmVncHRyID0gcmVncyArIFBMMDgwX0N4X0JBU0UoMCk7Ci0KLQlmb3IgKGNoID0gMDsgY2ggPCA4OyBjaCsrLCBjaG5vKyssIGNocHRyKyspIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlZ2lzdGVyaW5nIERNQSAlZCAoJXApXG4iLAotCQkgICAgICAgX19mdW5jX18sIGNobm8sIHJlZ3B0cik7Ci0KLQkJY2hwdHItPmJpdCA9IDEgPDwgY2g7Ci0JCWNocHRyLT5udW1iZXIgPSBjaG5vOwotCQljaHB0ci0+ZG1hYyA9IGRtYWM7Ci0JCWNocHRyLT5yZWdzID0gcmVncHRyOwotCQlyZWdwdHIgKz0gUEwwMDhfQ3hfU1RSSURFOwotCX0KLQotCS8qIGZvciB0aGUgbW9tZW50LCBwZXJtYW5lbnRseSBlbmFibGUgdGhlIGNvbnRyb2xsZXIgKi8KLQl3cml0ZWwoUEwwODBfQ09ORklHX0VOQUJMRSwgcmVncyArIFBMMDgwX0NPTkZJRyk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJQTDA4MDogSVJRICVkLCBhdCAlcFxuIiwgaXJxLCByZWdzKTsKLQotCXJldHVybiAwOwotCi1lcnJfY2xrOgotCWNsa19kaXNhYmxlKGRtYWMtPmNsayk7Ci0JY2xrX3B1dChkbWFjLT5jbGspOwotZXJyX21hcDoKLQlpb3VubWFwKHJlZ3MpOwotZXJyX2RldjoKLQlzeXNkZXZfdW5yZWdpc3RlcigmZG1hYy0+c3lzZGV2KTsKLWVycl9hbGxvYzoKLQlrZnJlZShkbWFjKTsKLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBzM2M2NHh4X2RtYV9pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWdpc3RlcmluZyBETUEgY2hhbm5lbHNcbiIsIF9fZnVuY19fKTsKLQotCWRtYV9wb29sID0gZG1hX3Bvb2xfY3JlYXRlKCJETUEtTExJIiwgTlVMTCwgc2l6ZW9mKHN0cnVjdCBwbDA4MHNfbGxpKSwgMTYsIDApOwotCWlmICghZG1hX3Bvb2wpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGNyZWF0ZSBwb29sXG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmZG1hX3N5c2NsYXNzKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBjcmVhdGUgc3lzY2xhc3NcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JLyogU2V0IGFsbCBETUEgY29uZmlndXJhdGlvbiB0byBiZSBETUEsIG5vdCBTRE1BICovCi0Jd3JpdGVsKDB4ZmZmZmZmLCBTM0NfU1lTUkVHKDB4MTEwKSk7Ci0KLQkvKiBSZWdpc3RlciBzdGFuZGFyZCBETUEgY29udHJvbGVycyAqLwotCXMzYzY0eHhfZG1hX2luaXQxKDAsIERNQUNIX1VBUlQwLCBJUlFfRE1BMCwgMHg3NTAwMDAwMCk7Ci0JczNjNjR4eF9kbWFfaW5pdDEoOCwgRE1BQ0hfUENNMV9UWCwgSVJRX0RNQTEsIDB4NzUxMDAwMDApOwotCi0JcmV0dXJuIDA7Ci19Ci0KLWFyY2hfaW5pdGNhbGwoczNjNjR4eF9kbWFfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZ3Bpb2xpYi5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2dwaW9saWIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzc4NTYwNC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvZ3Bpb2xpYi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQ2ICswLDAgQEAKLS8qIGFyY2gvYXJtL3BsYXQtczNjNjR4eC9ncGlvbGliLmMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBTM0M2NFhYIC0gR1BJT2xpYiBzdXBwb3J0IAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvLmg+Ci0KLSNpbmNsdWRlIDxtYWNoL21hcC5oPgotI2luY2x1ZGUgPG1hY2gvZ3Bpby5oPgotI2luY2x1ZGUgPG1hY2gvZ3Bpby1jb3JlLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+Ci0jaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy1oZWxwZXJzLmg+Ci0jaW5jbHVkZSA8cGxhdC9yZWdzLWdwaW8uaD4KLQotLyogR1BJTyBiYW5rIHN1bW1hcnk6Ci0gKgotICogQmFuawlHUElPcwlTdHlsZQlTbHBDb24JRXh0SW50IEdyb3VwCi0gKiBBCTgJNEJpdAlZZXMJMQotICogQgk3CTRCaXQJWWVzCTEKLSAqIEMJOAk0Qml0CVllcwkyCi0gKiBECTUJNEJpdAlZZXMJMwotICogRQk1CTRCaXQJWWVzCU5vbmUKLSAqIEYJMTYJMkJpdAlZZXMJNCBbMV0KLSAqIEcJNwk0Qml0CVllcwk1Ci0gKiBICTEwCTRCaXRbMl0JWWVzCTYKLSAqIEkJMTYJMkJpdAlZZXMJTm9uZQotICogSgkxMgkyQml0CVllcwlOb25lCi0gKiBLCTE2CTRCaXRbMl0JTm8JTm9uZQotICogTAkxNQk0Qml0WzJdIE5vCU5vbmUKLSAqIE0JNgk0Qml0CU5vCUlSUV9FSU5UCi0gKiBOCTE2CTJCaXQJTm8JSVJRX0VJTlQKLSAqIE8JMTYJMkJpdAlZZXMJNwotICogUAkxNQkyQml0CVllcwk4Ci0gKiBRCTkJMkJpdAlZZXMJOQotICoKLSAqIFsxXSBCQU5LRiBwaW5zIDE0LDE1IGRvIG5vdCBmb3JtIHBhcnQgb2YgdGhlIGV4dGVybmFsIGludGVycnVwdCBzb3VyY2VzCi0gKiBbMl0gQkFOSyBoYXMgdHdvIGNvbnRyb2wgcmVnaXN0ZXJzLCBHUHhDT04wIGFuZCBHUHhDT04xCi0gKi8KLQotI2RlZmluZSBPRkZfR1BDT04JKDB4MDApCi0jZGVmaW5lIE9GRl9HUERBVAkoMHgwNCkKLQotI2RlZmluZSBjb25fNGJpdF9zaGlmdChfX29mZikgKChfX29mZikgKiA0KQotCi0jaWYgMQotI2RlZmluZSBncGlvX2RiZyh4Li4uKSBkbyB7IH0gd2hpbGUoMCkKLSNlbHNlCi0jZGVmaW5lIGdwaW9fZGJnKHguLi4pIHByaW50ayhLRVJOX0RFQlVHIHgpCi0jZW5kaWYKLQotLyogVGhlIHMzYzY0eHhfZ3Bpb2xpYl80Yml0IHJvdXRpbmVzIGFyZSB0byBjb250cm9sIHRoZSBncGlvIGJhbmtzIHdoZXJlCi0gKiB0aGUgZ3BpbyBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIChHUHhDT04pIGhhcyA0IGJpdHMgcGVyIEdQSU8sIGFzIHRoZQotICogZm9sbG93aW5nIGV4YW1wbGU6Ci0gKgotICogYmFzZSArIDB4MDA6IENvbnRyb2wgcmVnaXN0ZXIsIDQgYml0cyBwZXIgZ3BpbwotICoJICAgICAgICBncGlvIG46IDQgYml0cyBzdGFydGluZyBhdCAoNCpuKQotICoJCTAwMDAgPSBpbnB1dCwgMDAwMSA9IG91dHB1dCwgb3RoZXJzIG1lYW4gc3BlY2lhbC1mdW5jdGlvbgotICogYmFzZSArIDB4MDQ6IERhdGEgcmVnaXN0ZXIsIDEgYml0IHBlciBncGlvCi0gKgkJYml0IG46IGRhdGEgYml0IG4KLSAqCi0gKiBOb3RlLCBzaW5jZSB0aGUgZGF0YSByZWdpc3RlciBpcyBvbmUgYml0IHBlciBncGlvIGFuZCBpcyBhdCBiYXNlICsgMHg0Ci0gKiB3ZSBjYW4gdXNlIHMzY19ncGlvbGliX2dldCBhbmQgczNjX2dwaW9saWJfc2V0IHRvIGNoYW5nZSB0aGUgc3RhdGUgb2YKLSAqIHRoZSBvdXRwdXQuCi0qLwotCi1zdGF0aWMgaW50IHMzYzY0eHhfZ3Bpb2xpYl80Yml0X2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKLXsKLQlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqb3VyY2hpcCA9IHRvX3MzY19ncGlvKGNoaXApOwotCXZvaWQgX19pb21lbSAqYmFzZSA9IG91cmNoaXAtPmJhc2U7Ci0JdW5zaWduZWQgbG9uZyBjb247Ci0KLQljb24gPSBfX3Jhd19yZWFkbChiYXNlICsgT0ZGX0dQQ09OKTsKLQljb24gJj0gfigweGYgPDwgY29uXzRiaXRfc2hpZnQob2Zmc2V0KSk7Ci0JX19yYXdfd3JpdGVsKGNvbiwgYmFzZSArIE9GRl9HUENPTik7Ci0KLQlncGlvX2RiZygiJXM6ICVwOiBDT04gbm93ICUwOGx4XG4iLCBfX2Z1bmNfXywgYmFzZSwgY29uKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzY0eHhfZ3Bpb2xpYl80Yml0X291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAotCQkJCSAgICAgICB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKLXsKLQlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqb3VyY2hpcCA9IHRvX3MzY19ncGlvKGNoaXApOwotCXZvaWQgX19pb21lbSAqYmFzZSA9IG91cmNoaXAtPmJhc2U7Ci0JdW5zaWduZWQgbG9uZyBjb247Ci0JdW5zaWduZWQgbG9uZyBkYXQ7Ci0KLQljb24gPSBfX3Jhd19yZWFkbChiYXNlICsgT0ZGX0dQQ09OKTsKLQljb24gJj0gfigweGYgPDwgY29uXzRiaXRfc2hpZnQob2Zmc2V0KSk7Ci0JY29uIHw9IDB4MSA8PCBjb25fNGJpdF9zaGlmdChvZmZzZXQpOwotCi0JZGF0ID0gX19yYXdfcmVhZGwoYmFzZSArIE9GRl9HUERBVCk7Ci0JaWYgKHZhbHVlKQotCQlkYXQgfD0gMSA8PCBvZmZzZXQ7Ci0JZWxzZQotCQlkYXQgJj0gfigxIDw8IG9mZnNldCk7Ci0KLQlfX3Jhd193cml0ZWwoZGF0LCBiYXNlICsgT0ZGX0dQREFUKTsKLQlfX3Jhd193cml0ZWwoY29uLCBiYXNlICsgT0ZGX0dQQ09OKTsKLQlfX3Jhd193cml0ZWwoZGF0LCBiYXNlICsgT0ZGX0dQREFUKTsKLQotCWdwaW9fZGJnKCIlczogJXA6IENPTiAlMDhseCwgREFUICUwOGx4XG4iLCBfX2Z1bmNfXywgYmFzZSwgY29uLCBkYXQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFRoZSBuZXh0IHNldCBvZiByb3V0aW5lcyBhcmUgZm9yIHRoZSBjYXNlIHdoZXJlIHRoZSBHUElPIGNvbmZpZ3VyYXRpb24KLSAqIHJlZ2lzdGVycyBhcmUgNCBiaXRzIHBlciBHUElPIGJ1dCB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIHJlZ2lzdGVyICh0aGUKLSAqIGJhbmsgaGFzIG1vcmUgdGhhbiA4IEdQSU9zLgotICoKLSAqIFRoaXMgY2FzZSBpcyB0aGUgc2ltaWxhciB0byB0aGUgNCBiaXQgY2FzZSwgYnV0IHRoZSByZWdpc3RlcnMgYXJlIGFzCi0gKiBmb2xsb3dzOgotICoKLSAqIGJhc2UgKyAweDAwOiBDb250cm9sIHJlZ2lzdGVyLCA0IGJpdHMgcGVyIGdwaW8gKGxvd2VyIDggR1BJT3MpCi0gKgkgICAgICAgIGdwaW8gbjogNCBiaXRzIHN0YXJ0aW5nIGF0ICg0Km4pCi0gKgkJMDAwMCA9IGlucHV0LCAwMDAxID0gb3V0cHV0LCBvdGhlcnMgbWVhbiBzcGVjaWFsLWZ1bmN0aW9uCi0gKiBiYXNlICsgMHgwNDogQ29udHJvbCByZWdpc3RlciwgNCBiaXRzIHBlciBncGlvICh1cCB0byA4IGFkZGl0aW9ucyBHUElPcykKLSAqCSAgICAgICAgZ3BpbyBuOiA0IGJpdHMgc3RhcnRpbmcgYXQgKDQqbikKLSAqCQkwMDAwID0gaW5wdXQsIDAwMDEgPSBvdXRwdXQsIG90aGVycyBtZWFuIHNwZWNpYWwtZnVuY3Rpb24KLSAqIGJhc2UgKyAweDA4OiBEYXRhIHJlZ2lzdGVyLCAxIGJpdCBwZXIgZ3BpbwotICoJCWJpdCBuOiBkYXRhIGJpdCBuCi0gKgotICogVG8gYWxsb3cgdXMgdG8gdXNlIHRoZSBzM2NfZ3Bpb2xpYl9nZXQgYW5kIHMzY19ncGlvbGliX3NldCByb3V0aW5lcyB3ZQotICogc3RvcmUgdGhlICdiYXNlICsgMHg0JyBhZGRyZXNzIHNvIHRoYXQgdGhlc2Ugcm91dGluZXMgc2VlIHRoZSBkYXRhCi0gKiByZWdpc3RlciBhdCBvdXJjaGlwLT5iYXNlICsgMHgwNC4KLSovCi0KLXN0YXRpYyBpbnQgczNjNjR4eF9ncGlvbGliXzRiaXQyX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKLXsKLQlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqb3VyY2hpcCA9IHRvX3MzY19ncGlvKGNoaXApOwotCXZvaWQgX19pb21lbSAqYmFzZSA9IG91cmNoaXAtPmJhc2U7Ci0Jdm9pZCBfX2lvbWVtICpyZWdjb24gPSBiYXNlOwotCXVuc2lnbmVkIGxvbmcgY29uOwotCi0JaWYgKG9mZnNldCA+IDcpCi0JCW9mZnNldCAtPSA4OwotCWVsc2UKLQkJcmVnY29uIC09IDQ7Ci0KLQljb24gPSBfX3Jhd19yZWFkbChyZWdjb24pOwotCWNvbiAmPSB+KDB4ZiA8PCBjb25fNGJpdF9zaGlmdChvZmZzZXQpKTsKLQlfX3Jhd193cml0ZWwoY29uLCByZWdjb24pOwotCi0JZ3Bpb19kYmcoIiVzOiAlcDogQ09OICUwOGx4XG4iLCBfX2Z1bmNfXywgYmFzZSwgY29uKTsKLQotCXJldHVybiAwOwotCi19Ci0KLXN0YXRpYyBpbnQgczNjNjR4eF9ncGlvbGliXzRiaXQyX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAotCQkJCSAgICAgICB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKLXsKLQlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqb3VyY2hpcCA9IHRvX3MzY19ncGlvKGNoaXApOwotCXZvaWQgX19pb21lbSAqYmFzZSA9IG91cmNoaXAtPmJhc2U7Ci0Jdm9pZCBfX2lvbWVtICpyZWdjb24gPSBiYXNlOwotCXVuc2lnbmVkIGxvbmcgY29uOwotCXVuc2lnbmVkIGxvbmcgZGF0OwotCi0JaWYgKG9mZnNldCA+IDcpCi0JCW9mZnNldCAtPSA4OwotCWVsc2UKLQkJcmVnY29uIC09IDQ7Ci0KLQljb24gPSBfX3Jhd19yZWFkbChyZWdjb24pOwotCWNvbiAmPSB+KDB4ZiA8PCBjb25fNGJpdF9zaGlmdChvZmZzZXQpKTsKLQljb24gfD0gMHgxIDw8IGNvbl80Yml0X3NoaWZ0KG9mZnNldCk7Ci0KLQlkYXQgPSBfX3Jhd19yZWFkbChiYXNlICsgT0ZGX0dQREFUKTsKLQlpZiAodmFsdWUpCi0JCWRhdCB8PSAxIDw8IG9mZnNldDsKLQllbHNlCi0JCWRhdCAmPSB+KDEgPDwgb2Zmc2V0KTsKLQotCV9fcmF3X3dyaXRlbChkYXQsIGJhc2UgKyBPRkZfR1BEQVQpOwotCV9fcmF3X3dyaXRlbChjb24sIHJlZ2Nvbik7Ci0JX19yYXdfd3JpdGVsKGRhdCwgYmFzZSArIE9GRl9HUERBVCk7Ci0KLQlncGlvX2RiZygiJXM6ICVwOiBDT04gJTA4bHgsIERBVCAlMDhseFxuIiwgX19mdW5jX18sIGJhc2UsIGNvbiwgZGF0KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHMzY19ncGlvX2NmZyBncGlvXzRiaXRfY2ZnX25vaW50ID0gewotCS5zZXRfY29uZmlnCT0gczNjX2dwaW9fc2V0Y2ZnX3MzYzY0eHhfNGJpdCwKLQkuc2V0X3B1bGwJPSBzM2NfZ3Bpb19zZXRwdWxsX3VwZG93biwKLQkuZ2V0X3B1bGwJPSBzM2NfZ3Bpb19nZXRwdWxsX3VwZG93biwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjX2dwaW9fY2ZnIGdwaW9fNGJpdF9jZmdfZWludDAxMTEgPSB7Ci0JLmNmZ19laW50CT0gNywKLQkuc2V0X2NvbmZpZwk9IHMzY19ncGlvX3NldGNmZ19zM2M2NHh4XzRiaXQsCi0JLnNldF9wdWxsCT0gczNjX2dwaW9fc2V0cHVsbF91cGRvd24sCi0JLmdldF9wdWxsCT0gczNjX2dwaW9fZ2V0cHVsbF91cGRvd24sCi19OwotCi1zdGF0aWMgc3RydWN0IHMzY19ncGlvX2NmZyBncGlvXzRiaXRfY2ZnX2VpbnQwMDExID0gewotCS5jZmdfZWludAk9IDMsCi0JLnNldF9jb25maWcJPSBzM2NfZ3Bpb19zZXRjZmdfczNjNjR4eF80Yml0LAotCS5zZXRfcHVsbAk9IHMzY19ncGlvX3NldHB1bGxfdXBkb3duLAotCS5nZXRfcHVsbAk9IHMzY19ncGlvX2dldHB1bGxfdXBkb3duLAotfTsKLQotaW50IHMzYzY0eHhfZ3BpbzJpbnRfZ3BtKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIHBpbikKLXsKLQlyZXR1cm4gcGluIDwgNSA/IElSUV9FSU5UKDIzKSArIHBpbiA6IC1FTlhJTzsKLX0KLQotc3RhdGljIHN0cnVjdCBzM2NfZ3Bpb19jaGlwIGdwaW9fNGJpdFtdID0gewotCXsKLQkJLmJhc2UJPSBTM0M2NFhYX0dQQV9CQVNFLAotCQkuY29uZmlnCT0gJmdwaW9fNGJpdF9jZmdfZWludDAxMTEsCi0JCS5jaGlwCT0gewotCQkJLmJhc2UJPSBTM0M2NFhYX0dQQSgwKSwKLQkJCS5uZ3Bpbwk9IFMzQzY0WFhfR1BJT19BX05SLAotCQkJLmxhYmVsCT0gIkdQQSIsCi0JCX0sCi0JfSwgewotCQkuYmFzZQk9IFMzQzY0WFhfR1BCX0JBU0UsCi0JCS5jb25maWcJPSAmZ3Bpb180Yml0X2NmZ19laW50MDExMSwKLQkJLmNoaXAJPSB7Ci0JCQkuYmFzZQk9IFMzQzY0WFhfR1BCKDApLAotCQkJLm5ncGlvCT0gUzNDNjRYWF9HUElPX0JfTlIsCi0JCQkubGFiZWwJPSAiR1BCIiwKLQkJfSwKLQl9LCB7Ci0JCS5iYXNlCT0gUzNDNjRYWF9HUENfQkFTRSwKLQkJLmNvbmZpZwk9ICZncGlvXzRiaXRfY2ZnX2VpbnQwMTExLAotCQkuY2hpcAk9IHsKLQkJCS5iYXNlCT0gUzNDNjRYWF9HUEMoMCksCi0JCQkubmdwaW8JPSBTM0M2NFhYX0dQSU9fQ19OUiwKLQkJCS5sYWJlbAk9ICJHUEMiLAotCQl9LAotCX0sIHsKLQkJLmJhc2UJPSBTM0M2NFhYX0dQRF9CQVNFLAotCQkuY29uZmlnCT0gJmdwaW9fNGJpdF9jZmdfZWludDAxMTEsCi0JCS5jaGlwCT0gewotCQkJLmJhc2UJPSBTM0M2NFhYX0dQRCgwKSwKLQkJCS5uZ3Bpbwk9IFMzQzY0WFhfR1BJT19EX05SLAotCQkJLmxhYmVsCT0gIkdQRCIsCi0JCX0sCi0JfSwgewotCQkuYmFzZQk9IFMzQzY0WFhfR1BFX0JBU0UsCi0JCS5jb25maWcJPSAmZ3Bpb180Yml0X2NmZ19ub2ludCwKLQkJLmNoaXAJPSB7Ci0JCQkuYmFzZQk9IFMzQzY0WFhfR1BFKDApLAotCQkJLm5ncGlvCT0gUzNDNjRYWF9HUElPX0VfTlIsCi0JCQkubGFiZWwJPSAiR1BFIiwKLQkJfSwKLQl9LCB7Ci0JCS5iYXNlCT0gUzNDNjRYWF9HUEdfQkFTRSwKLQkJLmNvbmZpZwk9ICZncGlvXzRiaXRfY2ZnX2VpbnQwMTExLAotCQkuY2hpcAk9IHsKLQkJCS5iYXNlCT0gUzNDNjRYWF9HUEcoMCksCi0JCQkubmdwaW8JPSBTM0M2NFhYX0dQSU9fR19OUiwKLQkJCS5sYWJlbAk9ICJHUEciLAotCQl9LAotCX0sIHsKLQkJLmJhc2UJPSBTM0M2NFhYX0dQTV9CQVNFLAotCQkuY29uZmlnCT0gJmdwaW9fNGJpdF9jZmdfZWludDAwMTEsCi0JCS5jaGlwCT0gewotCQkJLmJhc2UJPSBTM0M2NFhYX0dQTSgwKSwKLQkJCS5uZ3Bpbwk9IFMzQzY0WFhfR1BJT19NX05SLAotCQkJLmxhYmVsCT0gIkdQTSIsCi0JCQkudG9faXJxID0gczNjNjR4eF9ncGlvMmludF9ncG0sCi0JCX0sCi0JfSwKLX07Ci0KLWludCBzM2M2NHh4X2dwaW8yaW50X2dwbChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBwaW4pCi17Ci0JcmV0dXJuIHBpbiA+PSA4ID8gSVJRX0VJTlQoMTYpICsgcGluIC0gOCA6IC1FTlhJTzsKLX0KLQotc3RhdGljIHN0cnVjdCBzM2NfZ3Bpb19jaGlwIGdwaW9fNGJpdDJbXSA9IHsKLQl7Ci0JCS5iYXNlCT0gUzNDNjRYWF9HUEhfQkFTRSArIDB4NCwKLQkJLmNvbmZpZwk9ICZncGlvXzRiaXRfY2ZnX2VpbnQwMTExLAotCQkuY2hpcAk9IHsKLQkJCS5iYXNlCT0gUzNDNjRYWF9HUEgoMCksCi0JCQkubmdwaW8JPSBTM0M2NFhYX0dQSU9fSF9OUiwKLQkJCS5sYWJlbAk9ICJHUEgiLAotCQl9LAotCX0sIHsKLQkJLmJhc2UJPSBTM0M2NFhYX0dQS19CQVNFICsgMHg0LAotCQkuY29uZmlnCT0gJmdwaW9fNGJpdF9jZmdfbm9pbnQsCi0JCS5jaGlwCT0gewotCQkJLmJhc2UJPSBTM0M2NFhYX0dQSygwKSwKLQkJCS5uZ3Bpbwk9IFMzQzY0WFhfR1BJT19LX05SLAotCQkJLmxhYmVsCT0gIkdQSyIsCi0JCX0sCi0JfSwgewotCQkuYmFzZQk9IFMzQzY0WFhfR1BMX0JBU0UgKyAweDQsCi0JCS5jb25maWcJPSAmZ3Bpb180Yml0X2NmZ19laW50MDAxMSwKLQkJLmNoaXAJPSB7Ci0JCQkuYmFzZQk9IFMzQzY0WFhfR1BMKDApLAotCQkJLm5ncGlvCT0gUzNDNjRYWF9HUElPX0xfTlIsCi0JCQkubGFiZWwJPSAiR1BMIiwKLQkJCS50b19pcnEgPSBzM2M2NHh4X2dwaW8yaW50X2dwbCwKLQkJfSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBzM2NfZ3Bpb19jZmcgZ3Bpb18yYml0X2NmZ19ub2ludCA9IHsKLQkuc2V0X2NvbmZpZwk9IHMzY19ncGlvX3NldGNmZ19zM2MyNHh4LAotCS5zZXRfcHVsbAk9IHMzY19ncGlvX3NldHB1bGxfdXBkb3duLAotCS5nZXRfcHVsbAk9IHMzY19ncGlvX2dldHB1bGxfdXBkb3duLAotfTsKLQotc3RhdGljIHN0cnVjdCBzM2NfZ3Bpb19jZmcgZ3Bpb18yYml0X2NmZ19laW50MTAgPSB7Ci0JLmNmZ19laW50CT0gMiwKLQkuc2V0X2NvbmZpZwk9IHMzY19ncGlvX3NldGNmZ19zM2MyNHh4LAotCS5zZXRfcHVsbAk9IHMzY19ncGlvX3NldHB1bGxfdXBkb3duLAotCS5nZXRfcHVsbAk9IHMzY19ncGlvX2dldHB1bGxfdXBkb3duLAotfTsKLQotc3RhdGljIHN0cnVjdCBzM2NfZ3Bpb19jZmcgZ3Bpb18yYml0X2NmZ19laW50MTEgPSB7Ci0JLmNmZ19laW50CT0gMywKLQkuc2V0X2NvbmZpZwk9IHMzY19ncGlvX3NldGNmZ19zM2MyNHh4LAotCS5zZXRfcHVsbAk9IHMzY19ncGlvX3NldHB1bGxfdXBkb3duLAotCS5nZXRfcHVsbAk9IHMzY19ncGlvX2dldHB1bGxfdXBkb3duLAotfTsKLQotaW50IHMzYzY0eHhfZ3BpbzJpbnRfZ3BuKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIHBpbikKLXsKLQlyZXR1cm4gSVJRX0VJTlQoMCkgKyBwaW47Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgczNjX2dwaW9fY2hpcCBncGlvXzJiaXRbXSA9IHsKLQl7Ci0JCS5iYXNlCT0gUzNDNjRYWF9HUEZfQkFTRSwKLQkJLmNvbmZpZwk9ICZncGlvXzJiaXRfY2ZnX2VpbnQxMSwKLQkJLmNoaXAJPSB7Ci0JCQkuYmFzZQk9IFMzQzY0WFhfR1BGKDApLAotCQkJLm5ncGlvCT0gUzNDNjRYWF9HUElPX0ZfTlIsCi0JCQkubGFiZWwJPSAiR1BGIiwKLQkJfSwKLQl9LCB7Ci0JCS5iYXNlCT0gUzNDNjRYWF9HUElfQkFTRSwKLQkJLmNvbmZpZwk9ICZncGlvXzJiaXRfY2ZnX25vaW50LAotCQkuY2hpcAk9IHsKLQkJCS5iYXNlCT0gUzNDNjRYWF9HUEkoMCksCi0JCQkubmdwaW8JPSBTM0M2NFhYX0dQSU9fSV9OUiwKLQkJCS5sYWJlbAk9ICJHUEkiLAotCQl9LAotCX0sIHsKLQkJLmJhc2UJPSBTM0M2NFhYX0dQSl9CQVNFLAotCQkuY29uZmlnCT0gJmdwaW9fMmJpdF9jZmdfbm9pbnQsCi0JCS5jaGlwCT0gewotCQkJLmJhc2UJPSBTM0M2NFhYX0dQSigwKSwKLQkJCS5uZ3Bpbwk9IFMzQzY0WFhfR1BJT19KX05SLAotCQkJLmxhYmVsCT0gIkdQSiIsCi0JCX0sCi0JfSwgewotCQkuYmFzZQk9IFMzQzY0WFhfR1BOX0JBU0UsCi0JCS5jb25maWcJPSAmZ3Bpb18yYml0X2NmZ19laW50MTAsCi0JCS5jaGlwCT0gewotCQkJLmJhc2UJPSBTM0M2NFhYX0dQTigwKSwKLQkJCS5uZ3Bpbwk9IFMzQzY0WFhfR1BJT19OX05SLAotCQkJLmxhYmVsCT0gIkdQTiIsCi0JCQkudG9faXJxID0gczNjNjR4eF9ncGlvMmludF9ncG4sCi0JCX0sCi0JfSwgewotCQkuYmFzZQk9IFMzQzY0WFhfR1BPX0JBU0UsCi0JCS5jb25maWcJPSAmZ3Bpb18yYml0X2NmZ19laW50MTEsCi0JCS5jaGlwCT0gewotCQkJLmJhc2UJPSBTM0M2NFhYX0dQTygwKSwKLQkJCS5uZ3Bpbwk9IFMzQzY0WFhfR1BJT19PX05SLAotCQkJLmxhYmVsCT0gIkdQTyIsCi0JCX0sCi0JfSwgewotCQkuYmFzZQk9IFMzQzY0WFhfR1BQX0JBU0UsCi0JCS5jb25maWcJPSAmZ3Bpb18yYml0X2NmZ19laW50MTEsCi0JCS5jaGlwCT0gewotCQkJLmJhc2UJPSBTM0M2NFhYX0dQUCgwKSwKLQkJCS5uZ3Bpbwk9IFMzQzY0WFhfR1BJT19QX05SLAotCQkJLmxhYmVsCT0gIkdQUCIsCi0JCX0sCi0JfSwgewotCQkuYmFzZQk9IFMzQzY0WFhfR1BRX0JBU0UsCi0JCS5jb25maWcJPSAmZ3Bpb18yYml0X2NmZ19laW50MTEsCi0JCS5jaGlwCT0gewotCQkJLmJhc2UJPSBTM0M2NFhYX0dQUSgwKSwKLQkJCS5uZ3Bpbwk9IFMzQzY0WFhfR1BJT19RX05SLAotCQkJLmxhYmVsCT0gIkdQUSIsCi0JCX0sCi0JfSwKLX07Ci0KLXN0YXRpYyBfX2luaXQgdm9pZCBzM2M2NHh4X2dwaW9saWJfYWRkXzRiaXQoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXApCi17Ci0JY2hpcC0+Y2hpcC5kaXJlY3Rpb25faW5wdXQgPSBzM2M2NHh4X2dwaW9saWJfNGJpdF9pbnB1dDsKLQljaGlwLT5jaGlwLmRpcmVjdGlvbl9vdXRwdXQgPSBzM2M2NHh4X2dwaW9saWJfNGJpdF9vdXRwdXQ7Ci0JY2hpcC0+cG0gPSBfX2dwaW9fcG0oJnMzY19ncGlvX3BtXzRiaXQpOwotfQotCi1zdGF0aWMgX19pbml0IHZvaWQgczNjNjR4eF9ncGlvbGliX2FkZF80Yml0MihzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCkKLXsKLQljaGlwLT5jaGlwLmRpcmVjdGlvbl9pbnB1dCA9IHMzYzY0eHhfZ3Bpb2xpYl80Yml0Ml9pbnB1dDsKLQljaGlwLT5jaGlwLmRpcmVjdGlvbl9vdXRwdXQgPSBzM2M2NHh4X2dwaW9saWJfNGJpdDJfb3V0cHV0OwotCWNoaXAtPnBtID0gX19ncGlvX3BtKCZzM2NfZ3Bpb19wbV80Yml0KTsKLX0KLQotc3RhdGljIF9faW5pdCB2b2lkIHMzYzY0eHhfZ3Bpb2xpYl9hZGRfMmJpdChzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCkKLXsKLQljaGlwLT5wbSA9IF9fZ3Bpb19wbSgmczNjX2dwaW9fcG1fMmJpdCk7Ci19Ci0KLXN0YXRpYyBfX2luaXQgdm9pZCBzM2M2NHh4X2dwaW9saWJfYWRkKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwcywKLQkJCQkgICAgICAgaW50IG5yX2NoaXBzLAotCQkJCSAgICAgICB2b2lkICgqZm4pKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICopKQotewotCWZvciAoOyBucl9jaGlwcyA+IDA7IG5yX2NoaXBzLS0sIGNoaXBzKyspIHsKLQkJaWYgKGZuKQotCQkJKGZuKShjaGlwcyk7Ci0JCXMzY19ncGlvbGliX2FkZChjaGlwcyk7Ci0JfQotfQotCi1zdGF0aWMgX19pbml0IGludCBzM2M2NHh4X2dwaW9saWJfaW5pdCh2b2lkKQotewotCXMzYzY0eHhfZ3Bpb2xpYl9hZGQoZ3Bpb180Yml0LCBBUlJBWV9TSVpFKGdwaW9fNGJpdCksCi0JCQkgICAgczNjNjR4eF9ncGlvbGliX2FkZF80Yml0KTsKLQotCXMzYzY0eHhfZ3Bpb2xpYl9hZGQoZ3Bpb180Yml0MiwgQVJSQVlfU0laRShncGlvXzRiaXQyKSwKLQkJCSAgICBzM2M2NHh4X2dwaW9saWJfYWRkXzRiaXQyKTsKLQotCXMzYzY0eHhfZ3Bpb2xpYl9hZGQoZ3Bpb18yYml0LCBBUlJBWV9TSVpFKGdwaW9fMmJpdCksCi0JCQkgICAgczNjNjR4eF9ncGlvbGliX2FkZF8yYml0KTsKLQotCXJldHVybiAwOwotfQotCi1jb3JlX2luaXRjYWxsKHMzYzY0eHhfZ3Bpb2xpYl9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZG1hLXBsYXQuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZG1hLXBsYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGY3NmExZS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2RtYS1wbGF0LmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2RtYS1wbGF0LmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOSBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDkgU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICoKLSAqIFMzQzY0WFggRE1BIGNvcmUKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2RlZmluZSBETUFDSF9MT1dfTEVWRUwgKDE8PDI4KSAvKiB1c2UgdGhpcyB0byBzcGVjaWZpeSBoYXJkd2FyZSBjaCBubyAqLwotCi1zdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZjsKLQotLyoqIHMzYzY0eHhfZG1hX2J1ZmYgLSBTM0M2NFhYIERNQSBidWZmZXIgZGVzY3JpcHRvcgotICogQG5leHQ6IFBvaW50ZXIgdG8gbmV4dCBidWZmZXIgaW4gcXVldWUgb3IgcmluZy4KLSAqIEBwdzogQ2xpZW50IHByb3ZpZGVkIGlkZW50aWZpZXIKLSAqIEBsbGk6IFBvaW50ZXIgdG8gaGFyZHdhcmUgZGVzY3JpcHRvciB0aGlzIGJ1ZmZlciBpcyBhc3NvY2lhdGVkIHdpdGguCi0gKiBAbGxpX2RtYTogSGFyZGFyZSBhZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yLgotICovCi1zdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZiB7Ci0Jc3RydWN0IHMzYzY0eHhfZG1hX2J1ZmYgKm5leHQ7Ci0KLQl2b2lkCQkJKnB3OwotCXN0cnVjdCBwbDA4MHNfbGxpCSpsbGk7Ci0JZG1hX2FkZHJfdAkJIGxsaV9kbWE7Ci19OwotCi1zdHJ1Y3QgczNjNjR4eF9kbWFjOwotCi1zdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiB7Ci0JdW5zaWduZWQgY2hhcgkJIG51bWJlcjsgICAgICAvKiBudW1iZXIgb2YgdGhpcyBkbWEgY2hhbm5lbCAqLwotCXVuc2lnbmVkIGNoYXIJCSBpbl91c2U7ICAgICAgLyogY2hhbm5lbCBhbGxvY2F0ZWQgKi8KLQl1bnNpZ25lZCBjaGFyCQkgYml0OwkgICAgICAvKiBiaXQgZm9yIGVuYWJsZS9kaXNhYmxlL2V0YyAqLwotCXVuc2lnbmVkIGNoYXIJCSBod193aWR0aDsKLQl1bnNpZ25lZCBjaGFyCQkgcGVyaXBoZXJhbDsKLQotCXVuc2lnbmVkIGludAkJIGZsYWdzOwotCWVudW0gczNjMjQxMF9kbWFzcmMJIHNvdXJjZTsKLQotCi0JZG1hX2FkZHJfdAkJZGV2X2FkZHI7Ci0KLQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50ICpjbGllbnQ7Ci0Jc3RydWN0IHMzYzY0eHhfZG1hYwkqZG1hYzsJCS8qIHBvaW50ZXIgdG8gY29udHJvbGxlciAqLwotCi0Jdm9pZCBfX2lvbWVtCQkqcmVnczsKLQotCS8qIGNkcml2ZXIgY2FsbGJhY2tzICovCi0JczNjMjQxMF9kbWFfY2Jmbl90CSBjYWxsYmFja19mbjsJLyogYnVmZmVyIGRvbmUgY2FsbGJhY2sgKi8KLQlzM2MyNDEwX2RtYV9vcGZuX3QJIG9wX2ZuOwkJLyogY2hhbm5lbCBvcCBjYWxsYmFjayAqLwotCi0JLyogYnVmZmVyIGxpc3QgYW5kIGluZm9ybWF0aW9uICovCi0Jc3RydWN0IHMzYzY0eHhfZG1hX2J1ZmYJKmN1cnI7CQkvKiBjdXJyZW50IGRtYSBidWZmZXIgKi8KLQlzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZgkqbmV4dDsJCS8qIG5leHQgYnVmZmVyIHRvIGxvYWQgKi8KLQlzdHJ1Y3QgczNjNjR4eF9kbWFfYnVmZgkqZW5kOwkJLyogZW5kIG9mIHF1ZXVlICovCi0KLQkvKiBub3RlLCB3aGVuIGNoYW5uZWwgaXMgcnVubmluZyBpbiBjaXJjdWxhciBtb2RlLCBjdXJyIGlzIHRoZQotCSAqIGZpcnN0IGJ1ZmZlciBlbnF1ZXVlZCwgZW5kIGlzIHRoZSBsYXN0IGFuZCBjdXJyIGlzIHdoZXJlIHRoZQotCSAqIGxhc3QgYnVmZmVyLWRvbmUgZXZlbnQgaXMgc2V0LWF0LiBUaGUgYnVmZmVycyBhcmUgbm90IGZyZWVkCi0JICogYW5kIHRoZSBsYXN0IGJ1ZmZlciBoYXJkd2FyZSBkZXNjcmlwdG9yIHBvaW50cyBiYWNrIHRvIHRoZQotCSAqIGZpcnN0LgotCSAqLwotfTsKLQotI2luY2x1ZGUgPHBsYXQvZG1hLWNvcmUuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWEuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWFhMGU0Mi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1hLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1hLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiAJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICogCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogR1BJTyBCYW5rIEEgcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2RlZmluZSBTM0M2NFhYX0dQQUNPTgkJCShTM0M2NFhYX0dQQV9CQVNFICsgMHgwMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEFEQVQJCQkoUzNDNjRYWF9HUEFfQkFTRSArIDB4MDQpCi0jZGVmaW5lIFMzQzY0WFhfR1BBUFVECQkJKFMzQzY0WFhfR1BBX0JBU0UgKyAweDA4KQotI2RlZmluZSBTM0M2NFhYX0dQQUNPTlNMUAkJKFMzQzY0WFhfR1BBX0JBU0UgKyAweDBjKQotI2RlZmluZSBTM0M2NFhYX0dQQVBVRFNMUAkJKFMzQzY0WFhfR1BBX0JBU0UgKyAweDEwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BBX0NPTk1BU0soX19ncGlvKQkoMHhmIDw8ICgoX19ncGlvKSAqIDQpKQotI2RlZmluZSBTM0M2NFhYX0dQQV9JTlBVVChfX2dwaW8pCSgweDAgPDwgKChfX2dwaW8pICogNCkpCi0jZGVmaW5lIFMzQzY0WFhfR1BBX09VVFBVVChfX2dwaW8pCSgweDEgPDwgKChfX2dwaW8pICogNCkpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUEEwX1VBUlRfUlhEMAkJKDB4MDIgPDwgMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEEwX0VJTlRfRzFfMAkJKDB4MDcgPDwgMCkKLQotI2RlZmluZSBTM0M2NFhYX0dQQTFfVUFSVF9UWEQwCQkoMHgwMiA8PCA0KQotI2RlZmluZSBTM0M2NFhYX0dQQTFfRUlOVF9HMV8xCQkoMHgwNyA8PCA0KQotCi0jZGVmaW5lIFMzQzY0WFhfR1BBMl9VQVJUX25DVFMwCQkoMHgwMiA8PCA4KQotI2RlZmluZSBTM0M2NFhYX0dQQTJfRUlOVF9HMV8yCQkoMHgwNyA8PCA4KQotCi0jZGVmaW5lIFMzQzY0WFhfR1BBM19VQVJUX25SVFMwCQkoMHgwMiA8PCAxMikKLSNkZWZpbmUgUzNDNjRYWF9HUEEzX0VJTlRfRzFfMwkJKDB4MDcgPDwgMTIpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUEE0X1VBUlRfUlhEMQkJKDB4MDIgPDwgMTYpCi0jZGVmaW5lIFMzQzY0WFhfR1BBNF9FSU5UX0cxXzQJCSgweDA3IDw8IDE2KQotCi0jZGVmaW5lIFMzQzY0WFhfR1BBNV9VQVJUX1RYRDEJCSgweDAyIDw8IDIwKQotI2RlZmluZSBTM0M2NFhYX0dQQTVfRUlOVF9HMV81CQkoMHgwNyA8PCAyMCkKLQotI2RlZmluZSBTM0M2NFhYX0dQQTZfVUFSVF9uQ1RTMQkJKDB4MDIgPDwgMjQpCi0jZGVmaW5lIFMzQzY0WFhfR1BBNl9FSU5UX0cxXzYJCSgweDA3IDw8IDI0KQotCi0jZGVmaW5lIFMzQzY0WFhfR1BBN19VQVJUX25SVFMxCQkoMHgwMiA8PCAyOCkKLSNkZWZpbmUgUzNDNjRYWF9HUEE3X0VJTlRfRzFfNwkJKDB4MDcgPDwgMjgpCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWIuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzkzM2FkYi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1iLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1iLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiAJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICogCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogR1BJTyBCYW5rIEIgcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2RlZmluZSBTM0M2NFhYX0dQQkNPTgkJCShTM0M2NFhYX0dQQl9CQVNFICsgMHgwMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEJEQVQJCQkoUzNDNjRYWF9HUEJfQkFTRSArIDB4MDQpCi0jZGVmaW5lIFMzQzY0WFhfR1BCUFVECQkJKFMzQzY0WFhfR1BCX0JBU0UgKyAweDA4KQotI2RlZmluZSBTM0M2NFhYX0dQQkNPTlNMUAkJKFMzQzY0WFhfR1BCX0JBU0UgKyAweDBjKQotI2RlZmluZSBTM0M2NFhYX0dQQlBVRFNMUAkJKFMzQzY0WFhfR1BCX0JBU0UgKyAweDEwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BCX0NPTk1BU0soX19ncGlvKQkoMHhmIDw8ICgoX19ncGlvKSAqIDQpKQotI2RlZmluZSBTM0M2NFhYX0dQQl9JTlBVVChfX2dwaW8pCSgweDAgPDwgKChfX2dwaW8pICogNCkpCi0jZGVmaW5lIFMzQzY0WFhfR1BCX09VVFBVVChfX2dwaW8pCSgweDEgPDwgKChfX2dwaW8pICogNCkpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUEIwX1VBUlRfUlhEMgkJKDB4MDIgPDwgMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEIwX0VYVERNQV9SRVEJCSgweDAzIDw8IDApCi0jZGVmaW5lIFMzQzY0WFhfR1BCMF9JckRBX1JYRAkJKDB4MDQgPDwgMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEIwX0FERFJfQ0YwCQkoMHgwNSA8PCAwKQotI2RlZmluZSBTM0M2NFhYX0dQQjBfRUlOVF9HMV84CQkoMHgwNyA8PCAwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BCMV9VQVJUX1RYRDIJCSgweDAyIDw8IDQpCi0jZGVmaW5lIFMzQzY0WFhfR1BCMV9FWFRETUFfQUNLCQkoMHgwMyA8PCA0KQotI2RlZmluZSBTM0M2NFhYX0dQQjFfSXJEQV9UWEQJCSgweDA0IDw8IDQpCi0jZGVmaW5lIFMzQzY0WFhfR1BCMV9BRERSX0NGMQkJKDB4MDUgPDwgNCkKLSNkZWZpbmUgUzNDNjRYWF9HUEIxX0VJTlRfRzFfOQkJKDB4MDcgPDwgNCkKLQotI2RlZmluZSBTM0M2NFhYX0dQQjJfVUFSVF9SWEQzCQkoMHgwMiA8PCA4KQotI2RlZmluZSBTM0M2NFhYX0dQQjJfSXJEQV9SWEQJCSgweDAzIDw8IDgpCi0jZGVmaW5lIFMzQzY0WFhfR1BCMl9FWFRETUFfUkVRCQkoMHgwNCA8PCA4KQotI2RlZmluZSBTM0M2NFhYX0dQQjJfQUREUl9DRjIJCSgweDA1IDw8IDgpCi0jZGVmaW5lIFMzQzY0WFhfR1BCMl9JMkNfU0NMMQkJKDB4MDYgPDwgOCkKLSNkZWZpbmUgUzNDNjRYWF9HUEIyX0VJTlRfRzFfMTAJCSgweDA3IDw8IDgpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUEIzX1VBUlRfVFhEMwkJKDB4MDIgPDwgMTIpCi0jZGVmaW5lIFMzQzY0WFhfR1BCM19JckRBX1RYRAkJKDB4MDMgPDwgMTIpCi0jZGVmaW5lIFMzQzY0WFhfR1BCM19FWFRETUFfQUNLCQkoMHgwNCA8PCAxMikKLSNkZWZpbmUgUzNDNjRYWF9HUEIzX0kyQ19TREExCQkoMHgwNiA8PCAxMikKLSNkZWZpbmUgUzNDNjRYWF9HUEIzX0VJTlRfRzFfMTEJCSgweDA3IDw8IDEyKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BCNF9JckRBX1NEQlcJCSgweDAyIDw8IDE2KQotI2RlZmluZSBTM0M2NFhYX0dQQjRfQ0FNX0ZJRUxECQkoMHgwMyA8PCAxNikKLSNkZWZpbmUgUzNDNjRYWF9HUEI0X0NGX0RBVEFfRElSCSgweDA0IDw8IDE2KQotI2RlZmluZSBTM0M2NFhYX0dQQjRfRUlOVF9HMV8xMgkJKDB4MDcgPDwgMTYpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUEI1X0kyQ19TQ0wwCQkoMHgwMiA8PCAyMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEI1X0VJTlRfRzFfMTMJCSgweDA3IDw8IDIwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BCNl9JMkNfU0RBMAkJKDB4MDIgPDwgMjQpCi0jZGVmaW5lIFMzQzY0WFhfR1BCNl9FSU5UX0cxXzE0CQkoMHgwNyA8PCAyNCkKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstYy5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMjJiNDlmLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWMuaAotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqIAlCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKiAJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBHUElPIEJhbmsgQyByZWdpc3RlciBhbmQgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jZGVmaW5lIFMzQzY0WFhfR1BDQ09OCQkJKFMzQzY0WFhfR1BDX0JBU0UgKyAweDAwKQotI2RlZmluZSBTM0M2NFhYX0dQQ0RBVAkJCShTM0M2NFhYX0dQQ19CQVNFICsgMHgwNCkKLSNkZWZpbmUgUzNDNjRYWF9HUENQVUQJCQkoUzNDNjRYWF9HUENfQkFTRSArIDB4MDgpCi0jZGVmaW5lIFMzQzY0WFhfR1BDQ09OU0xQCQkoUzNDNjRYWF9HUENfQkFTRSArIDB4MGMpCi0jZGVmaW5lIFMzQzY0WFhfR1BDUFVEU0xQCQkoUzNDNjRYWF9HUENfQkFTRSArIDB4MTApCi0KLSNkZWZpbmUgUzNDNjRYWF9HUENfQ09OTUFTSyhfX2dwaW8pCSgweGYgPDwgKChfX2dwaW8pICogNCkpCi0jZGVmaW5lIFMzQzY0WFhfR1BDX0lOUFVUKF9fZ3BpbykJKDB4MCA8PCAoKF9fZ3BpbykgKiA0KSkKLSNkZWZpbmUgUzNDNjRYWF9HUENfT1VUUFVUKF9fZ3BpbykJKDB4MSA8PCAoKF9fZ3BpbykgKiA0KSkKLQotI2RlZmluZSBTM0M2NFhYX0dQQzBfU1BJX01JU08wCQkoMHgwMiA8PCAwKQotI2RlZmluZSBTM0M2NFhYX0dQQzBfRUlOVF9HMl8wCQkoMHgwNyA8PCAwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BDMV9TUElfQ0xLTwkJKDB4MDIgPDwgNCkKLSNkZWZpbmUgUzNDNjRYWF9HUEMxX0VJTlRfRzJfMQkJKDB4MDcgPDwgNCkKLQotI2RlZmluZSBTM0M2NFhYX0dQQzJfU1BJX01PU0lPCQkoMHgwMiA8PCA4KQotI2RlZmluZSBTM0M2NFhYX0dQQzJfRUlOVF9HMl8yCQkoMHgwNyA8PCA4KQotCi0jZGVmaW5lIFMzQzY0WFhfR1BDM19TUElfbkNTTwkJKDB4MDIgPDwgMTIpCi0jZGVmaW5lIFMzQzY0WFhfR1BDM19FSU5UX0cyXzMJCSgweDA3IDw8IDEyKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BDNF9TUElfTUlTTzEJCSgweDAyIDw8IDE2KQotI2RlZmluZSBTM0M2NFhYX0dQQzRfTU1DMl9DTUQJCSgweDAzIDw8IDE2KQotI2RlZmluZSBTM0M2NFhYX0dQQzRfSTJTX1Y0MF9ETzAJKDB4MDUgPDwgMTYpCi0jZGVmaW5lIFMzQzY0WFhfR1BDNF9FSU5UX0cyXzQJCSgweDA3IDw8IDE2KQotCi0jZGVmaW5lIFMzQzY0WFhfR1BDNV9TUElfQ0xLMQkJKDB4MDIgPDwgMjApCi0jZGVmaW5lIFMzQzY0WFhfR1BDNV9NTUMyX0NMSwkJKDB4MDMgPDwgMjApCi0jZGVmaW5lIFMzQzY0WFhfR1BDNV9JMlNfVjQwX0RPMQkoMHgwNSA8PCAyMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEM1X0VJTlRfRzJfNQkJKDB4MDcgPDwgMjApCi0KLSNkZWZpbmUgUzNDNjRYWF9HUEM2X1NQSV9NT1NJMQkJKDB4MDIgPDwgMjQpCi0jZGVmaW5lIFMzQzY0WFhfR1BDNl9FSU5UX0cyXzYJCSgweDA3IDw8IDI0KQotCi0jZGVmaW5lIFMzQzY0WFhfR1BDN19TUElfbkNTMQkJKDB4MDIgPDwgMjgpCi0jZGVmaW5lIFMzQzY0WFhfR1BDN19JMlNfVjQwX0RPMgkoMHgwNSA8PCAyOCkKLSNkZWZpbmUgUzNDNjRYWF9HUEM3X0VJTlRfRzJfNwkJKDB4MDcgPDwgMjgpCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWQuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZlNGE0OS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1kLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1kLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiAJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICogCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogR1BJTyBCYW5rIEQgcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2RlZmluZSBTM0M2NFhYX0dQRENPTgkJCShTM0M2NFhYX0dQRF9CQVNFICsgMHgwMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEREQVQJCQkoUzNDNjRYWF9HUERfQkFTRSArIDB4MDQpCi0jZGVmaW5lIFMzQzY0WFhfR1BEUFVECQkJKFMzQzY0WFhfR1BEX0JBU0UgKyAweDA4KQotI2RlZmluZSBTM0M2NFhYX0dQRENPTlNMUAkJKFMzQzY0WFhfR1BEX0JBU0UgKyAweDBjKQotI2RlZmluZSBTM0M2NFhYX0dQRFBVRFNMUAkJKFMzQzY0WFhfR1BEX0JBU0UgKyAweDEwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BEX0NPTk1BU0soX19ncGlvKQkoMHhmIDw8ICgoX19ncGlvKSAqIDQpKQotI2RlZmluZSBTM0M2NFhYX0dQRF9JTlBVVChfX2dwaW8pCSgweDAgPDwgKChfX2dwaW8pICogNCkpCi0jZGVmaW5lIFMzQzY0WFhfR1BEX09VVFBVVChfX2dwaW8pCSgweDEgPDwgKChfX2dwaW8pICogNCkpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUEQwX1BDTTBfU0NMSwkJKDB4MDIgPDwgMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEQwX0kyUzBfQ0xLCQkoMHgwMyA8PCAwKQotI2RlZmluZSBTM0M2NFhYX0dQRDBfQUM5N19CSVRDTEsJKDB4MDQgPDwgMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEQwX0VJTlRfRzNfMAkJKDB4MDcgPDwgMCkKLQotI2RlZmluZSBTM0M2NFhYX0dQRDFfUENNMF9FWFRDTEsJKDB4MDIgPDwgNCkKLSNkZWZpbmUgUzNDNjRYWF9HUEQxX0kyUzBfQ0RDTEsJCSgweDAzIDw8IDQpCi0jZGVmaW5lIFMzQzY0WFhfR1BEMV9BQzk3X25SRVNFVAkoMHgwNCA8PCA0KQotI2RlZmluZSBTM0M2NFhYX0dQRDFfRUlOVF9HM18xCQkoMHgwNyA8PCA0KQotCi0jZGVmaW5lIFMzQzY0WFhfR1BEMl9QQ00wX0ZTWU5DCQkoMHgwMiA8PCA4KQotI2RlZmluZSBTM0M2NFhYX0dQRDJfSTJTMF9MUkNMSwkJKDB4MDMgPDwgOCkKLSNkZWZpbmUgUzNDNjRYWF9HUEQyX0FDOTdfU1lOQwkJKDB4MDQgPDwgOCkKLSNkZWZpbmUgUzNDNjRYWF9HUEQyX0VJTlRfRzNfMgkJKDB4MDcgPDwgOCkKLQotI2RlZmluZSBTM0M2NFhYX0dQRDNfUENNMF9TSU4JCSgweDAyIDw8IDEyKQotI2RlZmluZSBTM0M2NFhYX0dQRDNfSTJTMF9ESQkJKDB4MDMgPDwgMTIpCi0jZGVmaW5lIFMzQzY0WFhfR1BEM19BQzk3X1NESQkJKDB4MDQgPDwgMTIpCi0jZGVmaW5lIFMzQzY0WFhfR1BEM19FSU5UX0czXzMJCSgweDA3IDw8IDEyKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BENF9QQ00wX1NPVVQJCSgweDAyIDw8IDE2KQotI2RlZmluZSBTM0M2NFhYX0dQRDRfSTJTMF9EMAkJKDB4MDMgPDwgMTYpCi0jZGVmaW5lIFMzQzY0WFhfR1BENF9BQzk3X1NETwkJKDB4MDQgPDwgMTYpCi0jZGVmaW5lIFMzQzY0WFhfR1BENF9FSU5UX0czXzQJCSgweDA3IDw8IDE2KQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1lLmggYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1lLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdmY2YzZDguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstZS5oCi0gKgotICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KLSAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICogCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqIAlodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICoKLSAqIEdQSU8gQmFuayBFIHJlZ2lzdGVyIGFuZCBjb25maWd1cmF0aW9uIGRlZmluaXRpb25zCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNkZWZpbmUgUzNDNjRYWF9HUEVDT04JCQkoUzNDNjRYWF9HUEVfQkFTRSArIDB4MDApCi0jZGVmaW5lIFMzQzY0WFhfR1BFREFUCQkJKFMzQzY0WFhfR1BFX0JBU0UgKyAweDA0KQotI2RlZmluZSBTM0M2NFhYX0dQRVBVRAkJCShTM0M2NFhYX0dQRV9CQVNFICsgMHgwOCkKLSNkZWZpbmUgUzNDNjRYWF9HUEVDT05TTFAJCShTM0M2NFhYX0dQRV9CQVNFICsgMHgwYykKLSNkZWZpbmUgUzNDNjRYWF9HUEVQVURTTFAJCShTM0M2NFhYX0dQRV9CQVNFICsgMHgxMCkKLQotI2RlZmluZSBTM0M2NFhYX0dQRV9DT05NQVNLKF9fZ3BpbykJKDB4ZiA8PCAoKF9fZ3BpbykgKiA0KSkKLSNkZWZpbmUgUzNDNjRYWF9HUEVfSU5QVVQoX19ncGlvKQkoMHgwIDw8ICgoX19ncGlvKSAqIDQpKQotI2RlZmluZSBTM0M2NFhYX0dQRV9PVVRQVVQoX19ncGlvKQkoMHgxIDw8ICgoX19ncGlvKSAqIDQpKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BFMF9QQ00xX1NDTEsJCSgweDAyIDw8IDApCi0jZGVmaW5lIFMzQzY0WFhfR1BFMF9JMlMxX0NMSwkJKDB4MDMgPDwgMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEUwX0FDOTdfQklUQ0xLCSgweDA0IDw8IDApCi0KLSNkZWZpbmUgUzNDNjRYWF9HUEUxX1BDTTFfRVhUQ0xLCSgweDAyIDw8IDQpCi0jZGVmaW5lIFMzQzY0WFhfR1BFMV9JMlMxX0NEQ0xLCQkoMHgwMyA8PCA0KQotI2RlZmluZSBTM0M2NFhYX0dQRTFfQUM5N19uUkVTRVQJKDB4MDQgPDwgNCkKLQotI2RlZmluZSBTM0M2NFhYX0dQRTJfUENNMV9GU1lOQwkJKDB4MDIgPDwgOCkKLSNkZWZpbmUgUzNDNjRYWF9HUEUyX0kyUzFfTFJDTEsJCSgweDAzIDw8IDgpCi0jZGVmaW5lIFMzQzY0WFhfR1BFMl9BQzk3X1NZTkMJCSgweDA0IDw8IDgpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUEUzX1BDTTFfU0lOCQkoMHgwMiA8PCAxMikKLSNkZWZpbmUgUzNDNjRYWF9HUEUzX0kyUzFfREkJCSgweDAzIDw8IDEyKQotI2RlZmluZSBTM0M2NFhYX0dQRTNfQUM5N19TREkJCSgweDA0IDw8IDEyKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BFNF9QQ00xX1NPVVQJCSgweDAyIDw8IDE2KQotI2RlZmluZSBTM0M2NFhYX0dQRTRfSTJTMV9EMAkJKDB4MDMgPDwgMTYpCi0jZGVmaW5lIFMzQzY0WFhfR1BFNF9BQzk3X1NETwkJKDB4MDQgPDwgMTYpCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWYuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWYuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNmYWZmOS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1mLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1mLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiAJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICogCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogR1BJTyBCYW5rIEYgcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2RlZmluZSBTM0M2NFhYX0dQRkNPTgkJCShTM0M2NFhYX0dQRl9CQVNFICsgMHgwMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEZEQVQJCQkoUzNDNjRYWF9HUEZfQkFTRSArIDB4MDQpCi0jZGVmaW5lIFMzQzY0WFhfR1BGUFVECQkJKFMzQzY0WFhfR1BGX0JBU0UgKyAweDA4KQotI2RlZmluZSBTM0M2NFhYX0dQRkNPTlNMUAkJKFMzQzY0WFhfR1BGX0JBU0UgKyAweDBjKQotI2RlZmluZSBTM0M2NFhYX0dQRlBVRFNMUAkJKFMzQzY0WFhfR1BGX0JBU0UgKyAweDEwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BGX0NPTk1BU0soX19ncGlvKQkoMHgzIDw8ICgoX19ncGlvKSAqIDIpKQotI2RlZmluZSBTM0M2NFhYX0dQRl9JTlBVVChfX2dwaW8pCSgweDAgPDwgKChfX2dwaW8pICogMikpCi0jZGVmaW5lIFMzQzY0WFhfR1BGX09VVFBVVChfX2dwaW8pCSgweDEgPDwgKChfX2dwaW8pICogMikpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUEYwX0NBTUlGX0NMSwkJKDB4MDIgPDwgMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEYwX0VJTlRfRzRfMAkJKDB4MDMgPDwgMCkKLQotI2RlZmluZSBTM0M2NFhYX0dQRjFfQ0FNSUZfSFJFRgkJKDB4MDIgPDwgMikKLSNkZWZpbmUgUzNDNjRYWF9HUEYxX0VJTlRfRzRfMQkJKDB4MDMgPDwgMikKLQotI2RlZmluZSBTM0M2NFhYX0dQRjJfQ0FNSUZfUENMSwkJKDB4MDIgPDwgNCkKLSNkZWZpbmUgUzNDNjRYWF9HUEYyX0VJTlRfRzRfMgkJKDB4MDMgPDwgNCkKLQotI2RlZmluZSBTM0M2NFhYX0dQRjNfQ0FNSUZfblJTVAkJKDB4MDIgPDwgNikKLSNkZWZpbmUgUzNDNjRYWF9HUEYzX0VJTlRfRzRfMwkJKDB4MDMgPDwgNikKLQotI2RlZmluZSBTM0M2NFhYX0dQRjRfQ0FNSUZfVlNZTkMJKDB4MDIgPDwgOCkKLSNkZWZpbmUgUzNDNjRYWF9HUEY0X0VJTlRfRzRfNAkJKDB4MDMgPDwgOCkKLQotI2RlZmluZSBTM0M2NFhYX0dQRjVfQ0FNSUZfWURBVEEwCSgweDAyIDw8IDEwKQotI2RlZmluZSBTM0M2NFhYX0dQRjVfRUlOVF9HNF81CQkoMHgwMyA8PCAxMCkKLQotI2RlZmluZSBTM0M2NFhYX0dQRjZfQ0FNSUZfWURBVEExCSgweDAyIDw8IDEyKQotI2RlZmluZSBTM0M2NFhYX0dQRjZfRUlOVF9HNF82CQkoMHgwMyA8PCAxMikKLQotI2RlZmluZSBTM0M2NFhYX0dQRjdfQ0FNSUZfWURBVEEyCSgweDAyIDw8IDE0KQotI2RlZmluZSBTM0M2NFhYX0dQRjdfRUlOVF9HNF83CQkoMHgwMyA8PCAxNCkKLQotI2RlZmluZSBTM0M2NFhYX0dQRjhfQ0FNSUZfWURBVEEzCSgweDAyIDw8IDE2KQotI2RlZmluZSBTM0M2NFhYX0dQRjhfRUlOVF9HNF84CQkoMHgwMyA8PCAxNikKLQotI2RlZmluZSBTM0M2NFhYX0dQRjlfQ0FNSUZfWURBVEE0CSgweDAyIDw8IDE4KQotI2RlZmluZSBTM0M2NFhYX0dQRjlfRUlOVF9HNF85CQkoMHgwMyA8PCAxOCkKLQotI2RlZmluZSBTM0M2NFhYX0dQRjEwX0NBTUlGX1lEQVRBNQkoMHgwMiA8PCAyMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEYxMF9FSU5UX0c0XzEwCSgweDAzIDw8IDIwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BGMTFfQ0FNSUZfWURBVEE2CSgweDAyIDw8IDIyKQotI2RlZmluZSBTM0M2NFhYX0dQRjExX0VJTlRfRzRfMTEJKDB4MDMgPDwgMjIpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUEYxMl9DQU1JRl9ZREFUQTcJKDB4MDIgPDwgMjQpCi0jZGVmaW5lIFMzQzY0WFhfR1BGMTJfRUlOVF9HNF8xMgkoMHgwMyA8PCAyNCkKLQotI2RlZmluZSBTM0M2NFhYX0dQRjEzX1BXTV9FQ0xLCQkoMHgwMiA8PCAyNikKLSNkZWZpbmUgUzNDNjRYWF9HUEYxM19FSU5UX0c0XzEzCSgweDAzIDw8IDI2KQotCi0jZGVmaW5lIFMzQzY0WFhfR1BGMTRfUFdNX1RPVVQwCQkoMHgwMiA8PCAyOCkKLSNkZWZpbmUgUzNDNjRYWF9HUEYxNF9DTEtPVVQwCQkoMHgwMyA8PCAyOCkKLQotI2RlZmluZSBTM0M2NFhYX0dQRjE1X1BXTV9UT1VUMQkJKDB4MDIgPDwgMzApCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWcuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzViYmQyMy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1nLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1nLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiAJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICogCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogR1BJTyBCYW5rIEcgcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2RlZmluZSBTM0M2NFhYX0dQR0NPTgkJCShTM0M2NFhYX0dQR19CQVNFICsgMHgwMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEdEQVQJCQkoUzNDNjRYWF9HUEdfQkFTRSArIDB4MDQpCi0jZGVmaW5lIFMzQzY0WFhfR1BHUFVECQkJKFMzQzY0WFhfR1BHX0JBU0UgKyAweDA4KQotI2RlZmluZSBTM0M2NFhYX0dQR0NPTlNMUAkJKFMzQzY0WFhfR1BHX0JBU0UgKyAweDBjKQotI2RlZmluZSBTM0M2NFhYX0dQR1BVRFNMUAkJKFMzQzY0WFhfR1BHX0JBU0UgKyAweDEwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BHX0NPTk1BU0soX19ncGlvKQkoMHhmIDw8ICgoX19ncGlvKSAqIDQpKQotI2RlZmluZSBTM0M2NFhYX0dQR19JTlBVVChfX2dwaW8pCSgweDAgPDwgKChfX2dwaW8pICogNCkpCi0jZGVmaW5lIFMzQzY0WFhfR1BHX09VVFBVVChfX2dwaW8pCSgweDEgPDwgKChfX2dwaW8pICogNCkpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUEcwX01NQzBfQ0xLCQkoMHgwMiA8PCAwKQotI2RlZmluZSBTM0M2NFhYX0dQRzBfRUlOVF9HNV8wCQkoMHgwNyA8PCAwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BHMV9NTUMwX0NNRAkJKDB4MDIgPDwgNCkKLSNkZWZpbmUgUzNDNjRYWF9HUEcxX0VJTlRfRzVfMQkJKDB4MDcgPDwgNCkKLQotI2RlZmluZSBTM0M2NFhYX0dQRzJfTU1DMF9EQVRBMAkJKDB4MDIgPDwgOCkKLSNkZWZpbmUgUzNDNjRYWF9HUEcyX0VJTlRfRzVfMgkJKDB4MDcgPDwgOCkKLQotI2RlZmluZSBTM0M2NFhYX0dQRzNfTU1DMF9EQVRBMQkJKDB4MDIgPDwgMTIpCi0jZGVmaW5lIFMzQzY0WFhfR1BHM19FSU5UX0c1XzMJCSgweDA3IDw8IDEyKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BHNF9NTUMwX0RBVEEyCQkoMHgwMiA8PCAxNikKLSNkZWZpbmUgUzNDNjRYWF9HUEc0X0VJTlRfRzVfNAkJKDB4MDcgPDwgMTYpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUEc1X01NQzBfREFUQTMJCSgweDAyIDw8IDIwKQotI2RlZmluZSBTM0M2NFhYX0dQRzVfRUlOVF9HNV81CQkoMHgwNyA8PCAyMCkKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstaC5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstaC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYmExNzY3Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWguaAorKysgL2Rldi9udWxsCkBAIC0xLDc0ICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWguaAotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqIAlCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKiAJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBHUElPIEJhbmsgSCByZWdpc3RlciBhbmQgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jZGVmaW5lIFMzQzY0WFhfR1BIQ09OMAkJCShTM0M2NFhYX0dQSF9CQVNFICsgMHgwMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEhDT04xCQkJKFMzQzY0WFhfR1BIX0JBU0UgKyAweDA0KQotI2RlZmluZSBTM0M2NFhYX0dQSERBVAkJCShTM0M2NFhYX0dQSF9CQVNFICsgMHgwOCkKLSNkZWZpbmUgUzNDNjRYWF9HUEhQVUQJCQkoUzNDNjRYWF9HUEhfQkFTRSArIDB4MGMpCi0jZGVmaW5lIFMzQzY0WFhfR1BIQ09OU0xQCQkoUzNDNjRYWF9HUEhfQkFTRSArIDB4MTApCi0jZGVmaW5lIFMzQzY0WFhfR1BIUFVEU0xQCQkoUzNDNjRYWF9HUEhfQkFTRSArIDB4MTQpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUEhfQ09OTUFTSyhfX2dwaW8pCSgweGYgPDwgKChfX2dwaW8pICogNCkpCi0jZGVmaW5lIFMzQzY0WFhfR1BIX0lOUFVUKF9fZ3BpbykJKDB4MCA8PCAoKF9fZ3BpbykgKiA0KSkKLSNkZWZpbmUgUzNDNjRYWF9HUEhfT1VUUFVUKF9fZ3BpbykJKDB4MSA8PCAoKF9fZ3BpbykgKiA0KSkKLQotI2RlZmluZSBTM0M2NFhYX0dQSDBfTU1DMV9DTEsJCSgweDAyIDw8IDApCi0jZGVmaW5lIFMzQzY0WFhfR1BIMF9LUF9DT0wwCQkoMHgwNCA8PCAwKQotI2RlZmluZSBTM0M2NFhYX0dQSDBfRUlOVF9HNl8wCQkoMHgwNyA8PCAwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BIMV9NTUMxX0NNRAkJKDB4MDIgPDwgNCkKLSNkZWZpbmUgUzNDNjRYWF9HUEgxX0tQX0NPTDEJCSgweDA0IDw8IDQpCi0jZGVmaW5lIFMzQzY0WFhfR1BIMV9FSU5UX0c2XzEJCSgweDA3IDw8IDQpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUEgyX01NQzFfREFUQTAJCSgweDAyIDw8IDgpCi0jZGVmaW5lIFMzQzY0WFhfR1BIMl9LUF9DT0wyCQkoMHgwNCA8PCA4KQotI2RlZmluZSBTM0M2NFhYX0dQSDJfRUlOVF9HNl8yCQkoMHgwNyA8PCA4KQotCi0jZGVmaW5lIFMzQzY0WFhfR1BIM19NTUMxX0RBVEExCQkoMHgwMiA8PCAxMikKLSNkZWZpbmUgUzNDNjRYWF9HUEgzX0tQX0NPTDMJCSgweDA0IDw8IDEyKQotI2RlZmluZSBTM0M2NFhYX0dQSDNfRUlOVF9HNl8zCQkoMHgwNyA8PCAxMikKLQotI2RlZmluZSBTM0M2NFhYX0dQSDRfTU1DMV9EQVRBMgkJKDB4MDIgPDwgMTYpCi0jZGVmaW5lIFMzQzY0WFhfR1BINF9LUF9DT0w0CQkoMHgwNCA8PCAxNikKLSNkZWZpbmUgUzNDNjRYWF9HUEg0X0VJTlRfRzZfNAkJKDB4MDcgPDwgMTYpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUEg1X01NQzFfREFUQTMJCSgweDAyIDw8IDIwKQotI2RlZmluZSBTM0M2NFhYX0dQSDVfS1BfQ09MNQkJKDB4MDQgPDwgMjApCi0jZGVmaW5lIFMzQzY0WFhfR1BINV9FSU5UX0c2XzUJCSgweDA3IDw8IDIwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BINl9NTUMxX0RBVEE0CQkoMHgwMiA8PCAyNCkKLSNkZWZpbmUgUzNDNjRYWF9HUEg2X01NQzJfREFUQTAJCSgweDAzIDw8IDI0KQotI2RlZmluZSBTM0M2NFhYX0dQSDZfS1BfQ09MNgkJKDB4MDQgPDwgMjQpCi0jZGVmaW5lIFMzQzY0WFhfR1BINl9JMlNfVjQwX0JDTEsJKDB4MDUgPDwgMjQpCi0jZGVmaW5lIFMzQzY0WFhfR1BINl9BRERSX0NGMAkJKDB4MDYgPDwgMjQpCi0jZGVmaW5lIFMzQzY0WFhfR1BINl9FSU5UX0c2XzYJCSgweDA3IDw8IDI0KQotCi0jZGVmaW5lIFMzQzY0WFhfR1BIN19NTUMxX0RBVEE1CQkoMHgwMiA8PCAyOCkKLSNkZWZpbmUgUzNDNjRYWF9HUEg3X01NQzJfREFUQTEJCSgweDAzIDw8IDI4KQotI2RlZmluZSBTM0M2NFhYX0dQSDdfS1BfQ09MNwkJKDB4MDQgPDwgMjgpCi0jZGVmaW5lIFMzQzY0WFhfR1BIN19JMlNfVjQwX0NEQ0xLCSgweDA1IDw8IDI4KQotI2RlZmluZSBTM0M2NFhYX0dQSDdfQUREUl9DRjEJCSgweDA2IDw8IDI4KQotI2RlZmluZSBTM0M2NFhYX0dQSDdfRUlOVF9HNl83CQkoMHgwNyA8PCAyOCkKLQotI2RlZmluZSBTM0M2NFhYX0dQSDhfTU1DMV9EQVRBNgkJKDB4MDIgPDwgIDApCi0jZGVmaW5lIFMzQzY0WFhfR1BIOF9NTUMyX0RBVEEyCQkoMHgwMyA8PCAgMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEg4X0kyU19WNDBfTFJDTEsJKDB4MDUgPDwgIDApCi0jZGVmaW5lIFMzQzY0WFhfR1BIOF9BRERSX0NGMgkJKDB4MDYgPDwgIDApCi0jZGVmaW5lIFMzQzY0WFhfR1BIOF9FSU5UX0c2XzgJCSgweDA3IDw8ICAwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BIOV9PVVRQVVQJCSgweDAxIDw8ICA0KQotI2RlZmluZSBTM0M2NFhYX0dQSDlfTU1DMV9EQVRBNwkJKDB4MDIgPDwgIDQpCi0jZGVmaW5lIFMzQzY0WFhfR1BIOV9NTUMyX0RBVEEzCQkoMHgwMyA8PCAgNCkKLSNkZWZpbmUgUzNDNjRYWF9HUEg5X0kyU19WNDBfREkJCSgweDA1IDw8ICA0KQotI2RlZmluZSBTM0M2NFhYX0dQSDlfRUlOVF9HNl85CQkoMHgwNyA8PCAgNCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWkuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2U5ZWJlMy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1pLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MCArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1pLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiAJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICogCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogR1BJTyBCYW5rIEkgcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2RlZmluZSBTM0M2NFhYX0dQSUNPTgkJCShTM0M2NFhYX0dQSV9CQVNFICsgMHgwMCkKLSNkZWZpbmUgUzNDNjRYWF9HUElEQVQJCQkoUzNDNjRYWF9HUElfQkFTRSArIDB4MDQpCi0jZGVmaW5lIFMzQzY0WFhfR1BJUFVECQkJKFMzQzY0WFhfR1BJX0JBU0UgKyAweDA4KQotI2RlZmluZSBTM0M2NFhYX0dQSUNPTlNMUAkJKFMzQzY0WFhfR1BJX0JBU0UgKyAweDBjKQotI2RlZmluZSBTM0M2NFhYX0dQSVBVRFNMUAkJKFMzQzY0WFhfR1BJX0JBU0UgKyAweDEwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BJX0NPTk1BU0soX19ncGlvKQkoMHgzIDw8ICgoX19ncGlvKSAqIDIpKQotI2RlZmluZSBTM0M2NFhYX0dQSV9JTlBVVChfX2dwaW8pCSgweDAgPDwgKChfX2dwaW8pICogMikpCi0jZGVmaW5lIFMzQzY0WFhfR1BJX09VVFBVVChfX2dwaW8pCSgweDEgPDwgKChfX2dwaW8pICogMikpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUEkwX1ZEMAkJKDB4MDIgPDwgMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEkxX1ZEMQkJKDB4MDIgPDwgMikKLSNkZWZpbmUgUzNDNjRYWF9HUEkyX1ZEMgkJKDB4MDIgPDwgNCkKLSNkZWZpbmUgUzNDNjRYWF9HUEkzX1ZEMwkJKDB4MDIgPDwgNikKLSNkZWZpbmUgUzNDNjRYWF9HUEk0X1ZENAkJKDB4MDIgPDwgOCkKLSNkZWZpbmUgUzNDNjRYWF9HUEk1X1ZENQkJKDB4MDIgPDwgMTApCi0jZGVmaW5lIFMzQzY0WFhfR1BJNl9WRDYJCSgweDAyIDw8IDEyKQotI2RlZmluZSBTM0M2NFhYX0dQSTdfVkQ3CQkoMHgwMiA8PCAxNCkKLSNkZWZpbmUgUzNDNjRYWF9HUEk4X1ZEOAkJKDB4MDIgPDwgMTYpCi0jZGVmaW5lIFMzQzY0WFhfR1BJOV9WRDkJCSgweDAyIDw8IDE4KQotI2RlZmluZSBTM0M2NFhYX0dQSTEwX1ZEMTAJCSgweDAyIDw8IDIwKQotI2RlZmluZSBTM0M2NFhYX0dQSTExX1ZEMTEJCSgweDAyIDw8IDIyKQotI2RlZmluZSBTM0M2NFhYX0dQSTEyX1ZEMTIJCSgweDAyIDw8IDI0KQotI2RlZmluZSBTM0M2NFhYX0dQSTEzX1ZEMTMJCSgweDAyIDw8IDI2KQotI2RlZmluZSBTM0M2NFhYX0dQSTE0X1ZEMTQJCSgweDAyIDw8IDI4KQotI2RlZmluZSBTM0M2NFhYX0dQSTE1X1ZEMTUJCSgweDAyIDw8IDMwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstai5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstai5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWE5MDYyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWouaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLWouaAotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqIAlCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKiAJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBHUElPIEJhbmsgSiByZWdpc3RlciBhbmQgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jZGVmaW5lIFMzQzY0WFhfR1BKQ09OCQkJKFMzQzY0WFhfR1BKX0JBU0UgKyAweDAwKQotI2RlZmluZSBTM0M2NFhYX0dQSkRBVAkJCShTM0M2NFhYX0dQSl9CQVNFICsgMHgwNCkKLSNkZWZpbmUgUzNDNjRYWF9HUEpQVUQJCQkoUzNDNjRYWF9HUEpfQkFTRSArIDB4MDgpCi0jZGVmaW5lIFMzQzY0WFhfR1BKQ09OU0xQCQkoUzNDNjRYWF9HUEpfQkFTRSArIDB4MGMpCi0jZGVmaW5lIFMzQzY0WFhfR1BKUFVEU0xQCQkoUzNDNjRYWF9HUEpfQkFTRSArIDB4MTApCi0KLSNkZWZpbmUgUzNDNjRYWF9HUEpfQ09OTUFTSyhfX2dwaW8pCSgweDMgPDwgKChfX2dwaW8pICogMikpCi0jZGVmaW5lIFMzQzY0WFhfR1BKX0lOUFVUKF9fZ3BpbykJKDB4MCA8PCAoKF9fZ3BpbykgKiAyKSkKLSNkZWZpbmUgUzNDNjRYWF9HUEpfT1VUUFVUKF9fZ3BpbykJKDB4MSA8PCAoKF9fZ3BpbykgKiAyKSkKLQotI2RlZmluZSBTM0M2NFhYX0dQSjBfVkQxNgkJKDB4MDIgPDwgMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEoxX1ZEMTcJCSgweDAyIDw8IDIpCi0jZGVmaW5lIFMzQzY0WFhfR1BKMl9WRDE4CQkoMHgwMiA8PCA0KQotI2RlZmluZSBTM0M2NFhYX0dQSjNfVkQxOQkJKDB4MDIgPDwgNikKLSNkZWZpbmUgUzNDNjRYWF9HUEo0X1ZEMjAJCSgweDAyIDw8IDgpCi0jZGVmaW5lIFMzQzY0WFhfR1BKNV9WRDIxCQkoMHgwMiA8PCAxMCkKLSNkZWZpbmUgUzNDNjRYWF9HUEo2X1ZEMjIJCSgweDAyIDw8IDEyKQotI2RlZmluZSBTM0M2NFhYX0dQSjdfVkQyMwkJKDB4MDIgPDwgMTQpCi0jZGVmaW5lIFMzQzY0WFhfR1BKOF9MQ0RfSFNZTkMJCSgweDAyIDw8IDE2KQotI2RlZmluZSBTM0M2NFhYX0dQSjlfTENEX1ZTWU5DCQkoMHgwMiA8PCAxOCkKLSNkZWZpbmUgUzNDNjRYWF9HUEoxMF9MQ0RfVkRFTgkJKDB4MDIgPDwgMjApCi0jZGVmaW5lIFMzQzY0WFhfR1BKMTFfTENEX1ZDTEsJCSgweDAyIDw8IDIyKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstbi5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9ncGlvLWJhbmstbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NjllNzYxLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLW4uaAorKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLW4uaAotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqIAlCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKiAJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBHUElPIEJhbmsgTiByZWdpc3RlciBhbmQgY29uZmlndXJhdGlvbiBkZWZpbml0aW9ucwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jZGVmaW5lIFMzQzY0WFhfR1BOQ09OCQkJKFMzQzY0WFhfR1BOX0JBU0UgKyAweDAwKQotI2RlZmluZSBTM0M2NFhYX0dQTkRBVAkJCShTM0M2NFhYX0dQTl9CQVNFICsgMHgwNCkKLSNkZWZpbmUgUzNDNjRYWF9HUE5QVUQJCQkoUzNDNjRYWF9HUE5fQkFTRSArIDB4MDgpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUE5fQ09OTUFTSyhfX2dwaW8pCSgweDMgPDwgKChfX2dwaW8pICogMikpCi0jZGVmaW5lIFMzQzY0WFhfR1BOX0lOUFVUKF9fZ3BpbykJKDB4MCA8PCAoKF9fZ3BpbykgKiAyKSkKLSNkZWZpbmUgUzNDNjRYWF9HUE5fT1VUUFVUKF9fZ3BpbykJKDB4MSA8PCAoKF9fZ3BpbykgKiAyKSkKLQotI2RlZmluZSBTM0M2NFhYX0dQTjBfRUlOVDAJCSgweDAyIDw8IDApCi0jZGVmaW5lIFMzQzY0WFhfR1BOMF9LUF9ST1cwCQkoMHgwMyA8PCAwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BOMV9FSU5UMQkJKDB4MDIgPDwgMikKLSNkZWZpbmUgUzNDNjRYWF9HUE4xX0tQX1JPVzEJCSgweDAzIDw8IDIpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUE4yX0VJTlQyCQkoMHgwMiA8PCA0KQotI2RlZmluZSBTM0M2NFhYX0dQTjJfS1BfUk9XMgkJKDB4MDMgPDwgNCkKLQotI2RlZmluZSBTM0M2NFhYX0dQTjNfRUlOVDMJCSgweDAyIDw8IDYpCi0jZGVmaW5lIFMzQzY0WFhfR1BOM19LUF9ST1czCQkoMHgwMyA8PCA2KQotCi0jZGVmaW5lIFMzQzY0WFhfR1BONF9FSU5UNAkJKDB4MDIgPDwgOCkKLSNkZWZpbmUgUzNDNjRYWF9HUE40X0tQX1JPVzQJCSgweDAzIDw8IDgpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUE41X0VJTlQ1CQkoMHgwMiA8PCAxMCkKLSNkZWZpbmUgUzNDNjRYWF9HUE41X0tQX1JPVzUJCSgweDAzIDw8IDEwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BONl9FSU5UNgkJKDB4MDIgPDwgMTIpCi0jZGVmaW5lIFMzQzY0WFhfR1BONl9LUF9ST1c2CQkoMHgwMyA8PCAxMikKLQotI2RlZmluZSBTM0M2NFhYX0dQTjdfRUlOVDcJCSgweDAyIDw8IDE0KQotI2RlZmluZSBTM0M2NFhYX0dQTjdfS1BfUk9XNwkJKDB4MDMgPDwgMTQpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUE44X0VJTlQ4CQkoMHgwMiA8PCAxNikKLSNkZWZpbmUgUzNDNjRYWF9HUE45X0VJTlQ5CQkoMHgwMiA8PCAxOCkKLSNkZWZpbmUgUzNDNjRYWF9HUE4xMF9FSU5UMTAJCSgweDAyIDw8IDIwKQotI2RlZmluZSBTM0M2NFhYX0dQTjExX0VJTlQxMQkJKDB4MDIgPDwgMjIpCi0jZGVmaW5lIFMzQzY0WFhfR1BOMTJfRUlOVDEyCQkoMHgwMiA8PCAyNCkKLSNkZWZpbmUgUzNDNjRYWF9HUE4xM19FSU5UMTMJCSgweDAyIDw8IDI2KQotI2RlZmluZSBTM0M2NFhYX0dQTjE0X0VJTlQxNAkJKDB4MDIgPDwgMjgpCi0jZGVmaW5lIFMzQzY0WFhfR1BOMTVfRUlOVDE1CQkoMHgwMiA8PCAzMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLW8uaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjA5ZTEyOS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1vLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1vLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiAJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICogCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogR1BJTyBCYW5rIE8gcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2RlZmluZSBTM0M2NFhYX0dQT0NPTgkJCShTM0M2NFhYX0dQT19CQVNFICsgMHgwMCkKLSNkZWZpbmUgUzNDNjRYWF9HUE9EQVQJCQkoUzNDNjRYWF9HUE9fQkFTRSArIDB4MDQpCi0jZGVmaW5lIFMzQzY0WFhfR1BPUFVECQkJKFMzQzY0WFhfR1BPX0JBU0UgKyAweDA4KQotI2RlZmluZSBTM0M2NFhYX0dQT0NPTlNMUAkJKFMzQzY0WFhfR1BPX0JBU0UgKyAweDBjKQotI2RlZmluZSBTM0M2NFhYX0dQT1BVRFNMUAkJKFMzQzY0WFhfR1BPX0JBU0UgKyAweDEwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BPX0NPTk1BU0soX19ncGlvKQkoMHgzIDw8ICgoX19ncGlvKSAqIDIpKQotI2RlZmluZSBTM0M2NFhYX0dQT19JTlBVVChfX2dwaW8pCSgweDAgPDwgKChfX2dwaW8pICogMikpCi0jZGVmaW5lIFMzQzY0WFhfR1BPX09VVFBVVChfX2dwaW8pCSgweDEgPDwgKChfX2dwaW8pICogMikpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUE8wX01FTTBfbkNTMgkJKDB4MDIgPDwgMCkKLSNkZWZpbmUgUzNDNjRYWF9HUE8wX0VJTlRfRzdfMAkJKDB4MDMgPDwgMCkKLQotI2RlZmluZSBTM0M2NFhYX0dQTzFfTUVNMF9uQ1MzCQkoMHgwMiA8PCAyKQotI2RlZmluZSBTM0M2NFhYX0dQTzFfRUlOVF9HN18xCQkoMHgwMyA8PCAyKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BPMl9NRU0wX25DUzQJCSgweDAyIDw8IDQpCi0jZGVmaW5lIFMzQzY0WFhfR1BPMl9FSU5UX0c3XzIJCSgweDAzIDw8IDQpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUE8zX01FTTBfbkNTNQkJKDB4MDIgPDwgNikKLSNkZWZpbmUgUzNDNjRYWF9HUE8zX0VJTlRfRzdfMwkJKDB4MDMgPDwgNikKLQotI2RlZmluZSBTM0M2NFhYX0dQTzRfRUlOVF9HN180CQkoMHgwMyA8PCA4KQotCi0jZGVmaW5lIFMzQzY0WFhfR1BPNV9FSU5UX0c3XzUJCSgweDAzIDw8IDEwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BPNl9NRU0wX0FERFI2CQkoMHgwMiA8PCAxMikKLSNkZWZpbmUgUzNDNjRYWF9HUE82X0VJTlRfRzdfNgkJKDB4MDMgPDwgMTIpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUE83X01FTTBfQUREUjcJCSgweDAyIDw8IDE0KQotI2RlZmluZSBTM0M2NFhYX0dQTzdfRUlOVF9HN183CQkoMHgwMyA8PCAxNCkKLQotI2RlZmluZSBTM0M2NFhYX0dQTzhfTUVNMF9BRERSOAkJKDB4MDIgPDwgMTYpCi0jZGVmaW5lIFMzQzY0WFhfR1BPOF9FSU5UX0c3XzgJCSgweDAzIDw8IDE2KQotCi0jZGVmaW5lIFMzQzY0WFhfR1BPOV9NRU0wX0FERFI5CQkoMHgwMiA8PCAxOCkKLSNkZWZpbmUgUzNDNjRYWF9HUE85X0VJTlRfRzdfOQkJKDB4MDMgPDwgMTgpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUE8xMF9NRU0wX0FERFIxMAkoMHgwMiA8PCAyMCkKLSNkZWZpbmUgUzNDNjRYWF9HUE8xMF9FSU5UX0c3XzEwCSgweDAzIDw8IDIwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BPMTFfTUVNMF9BRERSMTEJKDB4MDIgPDwgMjIpCi0jZGVmaW5lIFMzQzY0WFhfR1BPMTFfRUlOVF9HN18xMQkoMHgwMyA8PCAyMikKLQotI2RlZmluZSBTM0M2NFhYX0dQTzEyX01FTTBfQUREUjEyCSgweDAyIDw8IDI0KQotI2RlZmluZSBTM0M2NFhYX0dQTzEyX0VJTlRfRzdfMTIJKDB4MDMgPDwgMjQpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUE8xM19NRU0wX0FERFIxMwkoMHgwMiA8PCAyNikKLSNkZWZpbmUgUzNDNjRYWF9HUE8xM19FSU5UX0c3XzEzCSgweDAzIDw8IDI2KQotCi0jZGVmaW5lIFMzQzY0WFhfR1BPMTRfTUVNMF9BRERSMTQJKDB4MDIgPDwgMjgpCi0jZGVmaW5lIFMzQzY0WFhfR1BPMTRfRUlOVF9HN18xNAkoMHgwMyA8PCAyOCkKLQotI2RlZmluZSBTM0M2NFhYX0dQTzE1X01FTTBfQUREUjE1CSgweDAyIDw8IDMwKQotI2RlZmluZSBTM0M2NFhYX0dQTzE1X0VJTlRfRzdfMTUJKDB4MDMgPDwgMzApCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLXAuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLXAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTJmMDA1MS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1wLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OSArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1wLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiAJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICogCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogR1BJTyBCYW5rIFAgcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2RlZmluZSBTM0M2NFhYX0dQUENPTgkJCShTM0M2NFhYX0dQUF9CQVNFICsgMHgwMCkKLSNkZWZpbmUgUzNDNjRYWF9HUFBEQVQJCQkoUzNDNjRYWF9HUFBfQkFTRSArIDB4MDQpCi0jZGVmaW5lIFMzQzY0WFhfR1BQUFVECQkJKFMzQzY0WFhfR1BQX0JBU0UgKyAweDA4KQotI2RlZmluZSBTM0M2NFhYX0dQUENPTlNMUAkJKFMzQzY0WFhfR1BQX0JBU0UgKyAweDBjKQotI2RlZmluZSBTM0M2NFhYX0dQUFBVRFNMUAkJKFMzQzY0WFhfR1BQX0JBU0UgKyAweDEwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BQX0NPTk1BU0soX19ncGlvKQkoMHgzIDw8ICgoX19ncGlvKSAqIDIpKQotI2RlZmluZSBTM0M2NFhYX0dQUF9JTlBVVChfX2dwaW8pCSgweDAgPDwgKChfX2dwaW8pICogMikpCi0jZGVmaW5lIFMzQzY0WFhfR1BQX09VVFBVVChfX2dwaW8pCSgweDEgPDwgKChfX2dwaW8pICogMikpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUFAwX01FTTBfQUREUlYJCSgweDAyIDw8IDApCi0jZGVmaW5lIFMzQzY0WFhfR1BQMF9FSU5UX0c4XzAJCSgweDAzIDw8IDApCi0KLSNkZWZpbmUgUzNDNjRYWF9HUFAxX01FTTBfU01DTEsJCSgweDAyIDw8IDIpCi0jZGVmaW5lIFMzQzY0WFhfR1BQMV9FSU5UX0c4XzEJCSgweDAzIDw8IDIpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUFAyX01FTTBfbldBSVQJCSgweDAyIDw8IDQpCi0jZGVmaW5lIFMzQzY0WFhfR1BQMl9FSU5UX0c4XzIJCSgweDAzIDw8IDQpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUFAzX01FTTBfUkRZMF9BTEUJKDB4MDIgPDwgNikKLSNkZWZpbmUgUzNDNjRYWF9HUFAzX0VJTlRfRzhfMwkJKDB4MDMgPDwgNikKLQotI2RlZmluZSBTM0M2NFhYX0dQUDRfTUVNMF9SRFkxX0NMRQkoMHgwMiA8PCA4KQotI2RlZmluZSBTM0M2NFhYX0dQUDRfRUlOVF9HOF80CQkoMHgwMyA8PCA4KQotCi0jZGVmaW5lIFMzQzY0WFhfR1BQNV9NRU0wX0lOVHNtMF9GV0UJKDB4MDIgPDwgMTApCi0jZGVmaW5lIFMzQzY0WFhfR1BQNV9FSU5UX0c4XzUJCSgweDAzIDw8IDEwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BQNl9NRU0wXyhudWxsKQkoMHgwMiA8PCAxMikKLSNkZWZpbmUgUzNDNjRYWF9HUFA2X0VJTlRfRzhfNgkJKDB4MDMgPDwgMTIpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUFA3X01FTTBfSU5Uc20xX0ZSRQkoMHgwMiA8PCAxNCkKLSNkZWZpbmUgUzNDNjRYWF9HUFA3X0VJTlRfRzhfNwkJKDB4MDMgPDwgMTQpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUFA4X01FTTBfUlBuX1JuQgkoMHgwMiA8PCAxNikKLSNkZWZpbmUgUzNDNjRYWF9HUFA4X0VJTlRfRzhfOAkJKDB4MDMgPDwgMTYpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUFA5X01FTTBfQVRBX1JFU0VUCSgweDAyIDw8IDE4KQotI2RlZmluZSBTM0M2NFhYX0dQUDlfRUlOVF9HOF85CQkoMHgwMyA8PCAxOCkKLQotI2RlZmluZSBTM0M2NFhYX0dQUDEwX01FTTBfQVRBX0lOUEFDSwkoMHgwMiA8PCAyMCkKLSNkZWZpbmUgUzNDNjRYWF9HUFAxMF9FSU5UX0c4XzEwCSgweDAzIDw8IDIwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BQMTFfTUVNMF9BVEFfUkVHCSgweDAyIDw8IDIyKQotI2RlZmluZSBTM0M2NFhYX0dQUDExX0VJTlRfRzhfMTEJKDB4MDMgPDwgMjIpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUFAxMl9NRU0wX0FUQV9XRQkoMHgwMiA8PCAyNCkKLSNkZWZpbmUgUzNDNjRYWF9HUFAxMl9FSU5UX0c4XzEyCSgweDAzIDw8IDI0KQotCi0jZGVmaW5lIFMzQzY0WFhfR1BQMTNfTUVNMF9BVEFfT0UJKDB4MDIgPDwgMjYpCi0jZGVmaW5lIFMzQzY0WFhfR1BQMTNfRUlOVF9HOF8xMwkoMHgwMyA8PCAyNikKLQotI2RlZmluZSBTM0M2NFhYX0dQUDE0X01FTTBfQVRBX0NECSgweDAyIDw8IDI4KQotI2RlZmluZSBTM0M2NFhYX0dQUDE0X0VJTlRfRzhfMTQJKDB4MDMgPDwgMjgpCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLXEuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvZ3Bpby1iYW5rLXEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTY1ZTYwYS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1xLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0NiArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2dwaW8tYmFuay1xLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiAJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICogCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogR1BJTyBCYW5rIFEgcmVnaXN0ZXIgYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pdGlvbnMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2RlZmluZSBTM0M2NFhYX0dQUUNPTgkJCShTM0M2NFhYX0dQUV9CQVNFICsgMHgwMCkKLSNkZWZpbmUgUzNDNjRYWF9HUFFEQVQJCQkoUzNDNjRYWF9HUFFfQkFTRSArIDB4MDQpCi0jZGVmaW5lIFMzQzY0WFhfR1BRUFVECQkJKFMzQzY0WFhfR1BRX0JBU0UgKyAweDA4KQotI2RlZmluZSBTM0M2NFhYX0dQUUNPTlNMUAkJKFMzQzY0WFhfR1BRX0JBU0UgKyAweDBjKQotI2RlZmluZSBTM0M2NFhYX0dQUVBVRFNMUAkJKFMzQzY0WFhfR1BRX0JBU0UgKyAweDEwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BRX0NPTk1BU0soX19ncGlvKQkoMHgzIDw8ICgoX19ncGlvKSAqIDIpKQotI2RlZmluZSBTM0M2NFhYX0dQUV9JTlBVVChfX2dwaW8pCSgweDAgPDwgKChfX2dwaW8pICogMikpCi0jZGVmaW5lIFMzQzY0WFhfR1BRX09VVFBVVChfX2dwaW8pCSgweDEgPDwgKChfX2dwaW8pICogMikpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUFEwX01FTTBfQUREUjE4X1JBUwkoMHgwMiA8PCAwKQotI2RlZmluZSBTM0M2NFhYX0dQUTBfRUlOVF9HOV8wCQkoMHgwMyA8PCAwKQotCi0jZGVmaW5lIFMzQzY0WFhfR1BRMV9NRU0wX0FERFIxOV9DQVMJKDB4MDIgPDwgMikKLSNkZWZpbmUgUzNDNjRYWF9HUFExX0VJTlRfRzlfMQkJKDB4MDMgPDwgMikKLQotI2RlZmluZSBTM0M2NFhYX0dQUTJfRUlOVF9HOV8yCQkoMHgwMyA8PCA0KQotCi0jZGVmaW5lIFMzQzY0WFhfR1BRM19FSU5UX0c5XzMJCSgweDAzIDw8IDYpCi0KLSNkZWZpbmUgUzNDNjRYWF9HUFE0X0VJTlRfRzlfNAkJKDB4MDMgPDwgOCkKLQotI2RlZmluZSBTM0M2NFhYX0dQUTVfRUlOVF9HOV81CQkoMHgwMyA8PCAxMCkKLQotI2RlZmluZSBTM0M2NFhYX0dQUTZfRUlOVF9HOV82CQkoMHgwMyA8PCAxMikKLQotI2RlZmluZSBTM0M2NFhYX0dQUTdfTUVNMF9BRERSMTdfV0VORE1DCSgweDAyIDw8IDE0KQotI2RlZmluZSBTM0M2NFhYX0dQUTdfRUlOVF9HOV83CQkoMHgwMyA8PCAxNCkKLQotI2RlZmluZSBTM0M2NFhYX0dQUThfTUVNMF9BRERSMTZfQVBETUMJKDB4MDIgPDwgMTYpCi0jZGVmaW5lIFMzQzY0WFhfR1BROF9FSU5UX0c5XzgJCSgweDAzIDw8IDE2KQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L2lycXMuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvaXJxcy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTU2ZmQzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvaXJxcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjEwICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL21hY2gvaXJxcy5oCi0gKgotICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KLSAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogUzNDNjRYWCAtIENvbW1vbiBJUlEgc3VwcG9ydAotICovCi0KLSNpZm5kZWYgX19BU01fUExBVF9TM0M2NFhYX0lSUVNfSAotI2RlZmluZSBfX0FTTV9QTEFUX1MzQzY0WFhfSVJRU19IIF9fRklMRV9fCi0KLS8qIHdlIGtlZXAgdGhlIGZpcnN0IHNldCBvZiBDUFUgSVJRcyBvdXQgb2YgdGhlIHJhbmdlIG9mCi0gKiB0aGUgSVNBIHNwYWNlLCBzbyB0aGF0IHRoZSBQQzEwNCBoYXMgdGhlbSB0byBpdHNlbGYKLSAqIGFuZCB3ZSBkb24ndCBlbmQgdXAgaGF2aW5nIHRvIGRvIGhvcnJpYmxlIHRoaW5ncyB0byB0aGUKLSAqIHN0YW5kYXJkIElTQSBkcml2ZXJzLi4uLgotICoKLSAqIG5vdGUsIHNpbmNlIHdlJ3JlIHVzaW5nIHRoZSBWSUNzLCBvdXIgc3RhcnQgbXVzdCBiZSBhCi0gKiBtdWxpdHBsZSBvZiAzMiB0byBhbGxvdyB0aGUgY29tbW9uIGNvZGUgdG8gd29yawotICovCi0KLSNkZWZpbmUgUzNDX0lSUV9PRkZTRVQJKDMyKQotCi0jZGVmaW5lIFMzQ19JUlEoeCkJKCh4KSArIFMzQ19JUlFfT0ZGU0VUKQotCi0jZGVmaW5lIFMzQ19WSUMwX0JBU0UJUzNDX0lSUSgwKQotI2RlZmluZSBTM0NfVklDMV9CQVNFCVMzQ19JUlEoMzIpCi0KLS8qIFVBUlQgaW50ZXJydXB0cywgZWFjaCBVQVJUIGhhcyA0IGludHRlcnVwdHMgcGVyIGNoYW5uZWwgc28KLSAqIHVzZSB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgSVNBIGFuZCBTM0MgbWFpbiBpbnRlcnJ1cHRzLiBOb3RlLCB0aGVzZQotICogYXJlIG5vdCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgUzNDMjRYWCBzZXJpZXMhICovCi0KLSNkZWZpbmUgSVJRX1MzQ1VBUlRfQkFTRTAJKDE2KQotI2RlZmluZSBJUlFfUzNDVUFSVF9CQVNFMQkoMjApCi0jZGVmaW5lIElSUV9TM0NVQVJUX0JBU0UyCSgyNCkKLSNkZWZpbmUgSVJRX1MzQ1VBUlRfQkFTRTMJKDI4KQotCi0jZGVmaW5lIFVBUlRfSVJRX1JYRAkJKDApCi0jZGVmaW5lIFVBUlRfSVJRX0VSUgkJKDEpCi0jZGVmaW5lIFVBUlRfSVJRX1RYRAkJKDIpCi0jZGVmaW5lIFVBUlRfSVJRX01PREVNCQkoMykKLQotI2RlZmluZSBJUlFfUzNDVUFSVF9SWDAJCShJUlFfUzNDVUFSVF9CQVNFMCArIFVBUlRfSVJRX1JYRCkKLSNkZWZpbmUgSVJRX1MzQ1VBUlRfVFgwCQkoSVJRX1MzQ1VBUlRfQkFTRTAgKyBVQVJUX0lSUV9UWEQpCi0jZGVmaW5lIElSUV9TM0NVQVJUX0VSUjAJKElSUV9TM0NVQVJUX0JBU0UwICsgVUFSVF9JUlFfRVJSKQotCi0jZGVmaW5lIElSUV9TM0NVQVJUX1JYMQkJKElSUV9TM0NVQVJUX0JBU0UxICsgVUFSVF9JUlFfUlhEKQotI2RlZmluZSBJUlFfUzNDVUFSVF9UWDEJCShJUlFfUzNDVUFSVF9CQVNFMSArIFVBUlRfSVJRX1RYRCkKLSNkZWZpbmUgSVJRX1MzQ1VBUlRfRVJSMQkoSVJRX1MzQ1VBUlRfQkFTRTEgKyBVQVJUX0lSUV9FUlIpCi0KLSNkZWZpbmUgSVJRX1MzQ1VBUlRfUlgyCQkoSVJRX1MzQ1VBUlRfQkFTRTIgKyBVQVJUX0lSUV9SWEQpCi0jZGVmaW5lIElSUV9TM0NVQVJUX1RYMgkJKElSUV9TM0NVQVJUX0JBU0UyICsgVUFSVF9JUlFfVFhEKQotI2RlZmluZSBJUlFfUzNDVUFSVF9FUlIyCShJUlFfUzNDVUFSVF9CQVNFMiArIFVBUlRfSVJRX0VSUikKLQotI2RlZmluZSBJUlFfUzNDVUFSVF9SWDMJCShJUlFfUzNDVUFSVF9CQVNFMyArIFVBUlRfSVJRX1JYRCkKLSNkZWZpbmUgSVJRX1MzQ1VBUlRfVFgzCQkoSVJRX1MzQ1VBUlRfQkFTRTMgKyBVQVJUX0lSUV9UWEQpCi0jZGVmaW5lIElSUV9TM0NVQVJUX0VSUjMJKElSUV9TM0NVQVJUX0JBU0UzICsgVUFSVF9JUlFfRVJSKQotCi0vKiBWSUMgYmFzZWQgSVJRcyAqLwotCi0jZGVmaW5lIFMzQzY0WFhfSVJRX1ZJQzAoeCkJKFMzQ19WSUMwX0JBU0UgKyAoeCkpCi0jZGVmaW5lIFMzQzY0WFhfSVJRX1ZJQzEoeCkJKFMzQ19WSUMxX0JBU0UgKyAoeCkpCi0KLS8qIFZJQzAgKi8KLQotI2RlZmluZSBJUlFfRUlOVDBfMwkJUzNDNjRYWF9JUlFfVklDMCgwKQotI2RlZmluZSBJUlFfRUlOVDRfMTEJCVMzQzY0WFhfSVJRX1ZJQzAoMSkKLSNkZWZpbmUgSVJRX1JUQ19USUMJCVMzQzY0WFhfSVJRX1ZJQzAoMikKLSNkZWZpbmUgSVJRX0NBTUlGX0MJCVMzQzY0WFhfSVJRX1ZJQzAoMykKLSNkZWZpbmUgSVJRX0NBTUlGX1AJCVMzQzY0WFhfSVJRX1ZJQzAoNCkKLSNkZWZpbmUgSVJRX0NBTUlGX01DCQlTM0M2NFhYX0lSUV9WSUMwKDUpCi0jZGVmaW5lIElSUV9TM0M2NDEwX0lJQzEJUzNDNjRYWF9JUlFfVklDMCg1KQotI2RlZmluZSBJUlFfUzNDNjQxMF9JSVMJCVMzQzY0WFhfSVJRX1ZJQzAoNikKLSNkZWZpbmUgSVJRX1MzQzY0MDBfQ0FNSUZfTVAJUzNDNjRYWF9JUlFfVklDMCg2KQotI2RlZmluZSBJUlFfQ0FNSUZfV0VfQwkJUzNDNjRYWF9JUlFfVklDMCg3KQotI2RlZmluZSBJUlFfUzNDNjQxMF9HM0QJCVMzQzY0WFhfSVJRX1ZJQzAoOCkKLSNkZWZpbmUgSVJRX1MzQzY0MDBfQ0FNSUZfV0VfUAlTM0M2NFhYX0lSUV9WSUMwKDgpCi0jZGVmaW5lIElSUV9QT1NUMAkJUzNDNjRYWF9JUlFfVklDMCg5KQotI2RlZmluZSBJUlFfUk9UQVRPUgkJUzNDNjRYWF9JUlFfVklDMCgxMCkKLSNkZWZpbmUgSVJRXzJECQkJUzNDNjRYWF9JUlFfVklDMCgxMSkKLSNkZWZpbmUgSVJRX1RWRU5DCQlTM0M2NFhYX0lSUV9WSUMwKDEyKQotI2RlZmluZSBJUlFfU0NBTEVSCQlTM0M2NFhYX0lSUV9WSUMwKDEzKQotI2RlZmluZSBJUlFfQkFURgkJUzNDNjRYWF9JUlFfVklDMCgxNCkKLSNkZWZpbmUgSVJRX0pQRUcJCVMzQzY0WFhfSVJRX1ZJQzAoMTUpCi0jZGVmaW5lIElSUV9NRkMJCQlTM0M2NFhYX0lSUV9WSUMwKDE2KQotI2RlZmluZSBJUlFfU0RNQTAJCVMzQzY0WFhfSVJRX1ZJQzAoMTcpCi0jZGVmaW5lIElSUV9TRE1BMQkJUzNDNjRYWF9JUlFfVklDMCgxOCkKLSNkZWZpbmUgSVJRX0FSTV9ETUFFUlIJCVMzQzY0WFhfSVJRX1ZJQzAoMTkpCi0jZGVmaW5lIElSUV9BUk1fRE1BCQlTM0M2NFhYX0lSUV9WSUMwKDIwKQotI2RlZmluZSBJUlFfQVJNX0RNQVMJCVMzQzY0WFhfSVJRX1ZJQzAoMjEpCi0jZGVmaW5lIElSUV9LRVlQQUQJCVMzQzY0WFhfSVJRX1ZJQzAoMjIpCi0jZGVmaW5lIElSUV9USU1FUjBfVklDCQlTM0M2NFhYX0lSUV9WSUMwKDIzKQotI2RlZmluZSBJUlFfVElNRVIxX1ZJQwkJUzNDNjRYWF9JUlFfVklDMCgyNCkKLSNkZWZpbmUgSVJRX1RJTUVSMl9WSUMJCVMzQzY0WFhfSVJRX1ZJQzAoMjUpCi0jZGVmaW5lIElSUV9XRFQJCQlTM0M2NFhYX0lSUV9WSUMwKDI2KQotI2RlZmluZSBJUlFfVElNRVIzX1ZJQwkJUzNDNjRYWF9JUlFfVklDMCgyNykKLSNkZWZpbmUgSVJRX1RJTUVSNF9WSUMJCVMzQzY0WFhfSVJRX1ZJQzAoMjgpCi0jZGVmaW5lIElSUV9MQ0RfRklGTwkJUzNDNjRYWF9JUlFfVklDMCgyOSkKLSNkZWZpbmUgSVJRX0xDRF9WU1lOQwkJUzNDNjRYWF9JUlFfVklDMCgzMCkKLSNkZWZpbmUgSVJRX0xDRF9TWVNURU0JCVMzQzY0WFhfSVJRX1ZJQzAoMzEpCi0KLS8qIFZJQzEgKi8KLQotI2RlZmluZSBJUlFfRUlOVDEyXzE5CQlTM0M2NFhYX0lSUV9WSUMxKDApCi0jZGVmaW5lIElSUV9FSU5UMjBfMjcJCVMzQzY0WFhfSVJRX1ZJQzEoMSkKLSNkZWZpbmUgSVJRX1BDTTAJCVMzQzY0WFhfSVJRX1ZJQzEoMikKLSNkZWZpbmUgSVJRX1BDTTEJCVMzQzY0WFhfSVJRX1ZJQzEoMykKLSNkZWZpbmUgSVJRX0FDOTcJCVMzQzY0WFhfSVJRX1ZJQzEoNCkKLSNkZWZpbmUgSVJRX1VBUlQwCQlTM0M2NFhYX0lSUV9WSUMxKDUpCi0jZGVmaW5lIElSUV9VQVJUMQkJUzNDNjRYWF9JUlFfVklDMSg2KQotI2RlZmluZSBJUlFfVUFSVDIJCVMzQzY0WFhfSVJRX1ZJQzEoNykKLSNkZWZpbmUgSVJRX1VBUlQzCQlTM0M2NFhYX0lSUV9WSUMxKDgpCi0jZGVmaW5lIElSUV9ETUEwCQlTM0M2NFhYX0lSUV9WSUMxKDkpCi0jZGVmaW5lIElSUV9ETUExCQlTM0M2NFhYX0lSUV9WSUMxKDEwKQotI2RlZmluZSBJUlFfT05FTkFORDAJCVMzQzY0WFhfSVJRX1ZJQzEoMTEpCi0jZGVmaW5lIElSUV9PTkVOQU5EMQkJUzNDNjRYWF9JUlFfVklDMSgxMikKLSNkZWZpbmUgSVJRX05GQwkJCVMzQzY0WFhfSVJRX1ZJQzEoMTMpCi0jZGVmaW5lIElSUV9DRkNPTgkJUzNDNjRYWF9JUlFfVklDMSgxNCkKLSNkZWZpbmUgSVJRX1VTQkgJCVMzQzY0WFhfSVJRX1ZJQzEoMTUpCi0jZGVmaW5lIElSUV9TUEkwCQlTM0M2NFhYX0lSUV9WSUMxKDE2KQotI2RlZmluZSBJUlFfU1BJMQkJUzNDNjRYWF9JUlFfVklDMSgxNykKLSNkZWZpbmUgSVJRX0lJQwkJCVMzQzY0WFhfSVJRX1ZJQzEoMTgpCi0jZGVmaW5lIElSUV9IU0l0eAkJUzNDNjRYWF9JUlFfVklDMSgxOSkKLSNkZWZpbmUgSVJRX0hTSXJ4CQlTM0M2NFhYX0lSUV9WSUMxKDIwKQotI2RlZmluZSBJUlFfUkVTRVJWRUQJCVMzQzY0WFhfSVJRX1ZJQzEoMjEpCi0jZGVmaW5lIElSUV9NU00JCQlTM0M2NFhYX0lSUV9WSUMxKDIyKQotI2RlZmluZSBJUlFfSE9TVElGCQlTM0M2NFhYX0lSUV9WSUMxKDIzKQotI2RlZmluZSBJUlFfSFNNTUMwCQlTM0M2NFhYX0lSUV9WSUMxKDI0KQotI2RlZmluZSBJUlFfSFNNTUMxCQlTM0M2NFhYX0lSUV9WSUMxKDI1KQotI2RlZmluZSBJUlFfSFNNTUMyCQlJUlFfU1BJMQkvKiBzaGFyZWQgd2l0aCBTUEkxICovCi0jZGVmaW5lIElSUV9PVEcJCQlTM0M2NFhYX0lSUV9WSUMxKDI2KQotI2RlZmluZSBJUlFfSVJEQQkJUzNDNjRYWF9JUlFfVklDMSgyNykKLSNkZWZpbmUgSVJRX1JUQ19BTEFSTQkJUzNDNjRYWF9JUlFfVklDMSgyOCkKLSNkZWZpbmUgSVJRX1NFQwkJCVMzQzY0WFhfSVJRX1ZJQzEoMjkpCi0jZGVmaW5lIElSUV9QRU5ETgkJUzNDNjRYWF9JUlFfVklDMSgzMCkKLSNkZWZpbmUgSVJRX1RDCQkJSVJRX1BFTkROCi0jZGVmaW5lIElSUV9BREMJCQlTM0M2NFhYX0lSUV9WSUMxKDMxKQotCi0jZGVmaW5lIFMzQzY0WFhfVElNRVJfSVJRKHgpCVMzQ19JUlEoNjQgKyAoeCkpCi0KLSNkZWZpbmUgSVJRX1RJTUVSMAkJUzNDNjRYWF9USU1FUl9JUlEoMCkKLSNkZWZpbmUgSVJRX1RJTUVSMQkJUzNDNjRYWF9USU1FUl9JUlEoMSkKLSNkZWZpbmUgSVJRX1RJTUVSMgkJUzNDNjRYWF9USU1FUl9JUlEoMikKLSNkZWZpbmUgSVJRX1RJTUVSMwkJUzNDNjRYWF9USU1FUl9JUlEoMykKLSNkZWZpbmUgSVJRX1RJTUVSNAkJUzNDNjRYWF9USU1FUl9JUlEoNCkKLQotLyogY29tcGF0aWJpbGl0eSBmb3IgZGV2aWNlIGRlZmluZXMgKi8KLQotI2RlZmluZSBJUlFfSUlDMQkJSVJRX1MzQzY0MTBfSUlDMQotCi0vKiBTaW5jZSB0aGUgSVJRX0VJTlQoeCkgYXJlIGEgbGluZWFyIG1hcHBpbmcgb24gY3VycmVudCBzM2M2NHh4IHNlcmllcwotICogd2UganVzdCBkZWZpbmVkIHRoZW0gYXMgYW4gSVJRX0VJTlQoeCkgbWFjcm8gZnJvbSBTM0NfSVJRX0VJTlRfQkFTRQotICogd2hpY2ggd2UgcGxhY2UgYWZ0ZXIgdGhlIHBhaXIgb2YgVklDcy4gKi8KLQotI2RlZmluZSBTM0NfSVJRX0VJTlRfQkFTRQlTM0NfSVJRKDY0KzUpCi0KLSNkZWZpbmUgUzNDX0VJTlQoeCkJCSgoeCkgKyBTM0NfSVJRX0VJTlRfQkFTRSkKLSNkZWZpbmUgSVJRX0VJTlQoeCkJCVMzQ19FSU5UKHgpCi0jZGVmaW5lIElSUV9FSU5UX0JJVCh4KQkJKCh4KSAtIFMzQ19FSU5UKDApKQotCi0vKiBOZXh0IHRoZSBleHRlcm5hbCBpbnRlcnJ1cHQgZ3JvdXBzLiBUaGVzZSBhcmUgc2ltaWxhciB0byB0aGUgSVJRX0VJTlQoeCkKLSAqIHRoYXQgdGhleSBhcmUgc291cmNlZCBmcm9tIHRoZSBHUElPIHBpbnMgYnV0IHdpdGggYSBkaWZmZXJlbnQgc2NoZW1lIGZvcgotICogcHJpb3JpdHkgYW5kIHNvdXJjZSBpbmRpY2F0aW9uLgotICoKLSAqIFRoZSBJUlFfRUlOVCh4KSBjYW4gYmUgdGhvdWdodCBvZiBhcyAnZ3JvdXAgMCcgb2YgdGhlIGF2YWlsYWJsZSBHUElPCi0gKiBpbnRlcnJ1cHRzLCBidXQgZm9yIGhpc3RvcmljYWwgcmVhc29ucyB0aGV5IGFyZSBrZXB0IGFwYXJ0IGZyb20gdGhlc2UKLSAqIG5leHQgaW50ZXJydXB0cy4KLSAqCi0gKiBVc2UgSVJRX0VJTlRfR1JPVVAoZ3JvdXAsIG9mZnNldCkgdG8gZ2V0IHRoZSBudW1iZXIgZm9yIHVzZSBpbiB0aGUKLSAqIG1hY2hpbmUgc3BlY2lmaWMgc3VwcG9ydCBmaWxlcy4KLSAqLwotCi0jZGVmaW5lIElSUV9FSU5UX0dST1VQMV9OUgkoMTUpCi0jZGVmaW5lIElSUV9FSU5UX0dST1VQMl9OUgkoOCkKLSNkZWZpbmUgSVJRX0VJTlRfR1JPVVAzX05SCSg1KQotI2RlZmluZSBJUlFfRUlOVF9HUk9VUDRfTlIJKDE0KQotI2RlZmluZSBJUlFfRUlOVF9HUk9VUDVfTlIJKDcpCi0jZGVmaW5lIElSUV9FSU5UX0dST1VQNl9OUgkoMTApCi0jZGVmaW5lIElSUV9FSU5UX0dST1VQN19OUgkoMTYpCi0jZGVmaW5lIElSUV9FSU5UX0dST1VQOF9OUgkoMTUpCi0jZGVmaW5lIElSUV9FSU5UX0dST1VQOV9OUgkoOSkKLQotI2RlZmluZSBJUlFfRUlOVF9HUk9VUF9CQVNFCVMzQ19FSU5UKDI4KQotI2RlZmluZSBJUlFfRUlOVF9HUk9VUDFfQkFTRQkoSVJRX0VJTlRfR1JPVVBfQkFTRSArIDB4MDApCi0jZGVmaW5lIElSUV9FSU5UX0dST1VQMl9CQVNFCShJUlFfRUlOVF9HUk9VUDFfQkFTRSArIElSUV9FSU5UX0dST1VQMV9OUikKLSNkZWZpbmUgSVJRX0VJTlRfR1JPVVAzX0JBU0UJKElSUV9FSU5UX0dST1VQMl9CQVNFICsgSVJRX0VJTlRfR1JPVVAyX05SKQotI2RlZmluZSBJUlFfRUlOVF9HUk9VUDRfQkFTRQkoSVJRX0VJTlRfR1JPVVAzX0JBU0UgKyBJUlFfRUlOVF9HUk9VUDNfTlIpCi0jZGVmaW5lIElSUV9FSU5UX0dST1VQNV9CQVNFCShJUlFfRUlOVF9HUk9VUDRfQkFTRSArIElSUV9FSU5UX0dST1VQNF9OUikKLSNkZWZpbmUgSVJRX0VJTlRfR1JPVVA2X0JBU0UJKElSUV9FSU5UX0dST1VQNV9CQVNFICsgSVJRX0VJTlRfR1JPVVA1X05SKQotI2RlZmluZSBJUlFfRUlOVF9HUk9VUDdfQkFTRQkoSVJRX0VJTlRfR1JPVVA2X0JBU0UgKyBJUlFfRUlOVF9HUk9VUDZfTlIpCi0jZGVmaW5lIElSUV9FSU5UX0dST1VQOF9CQVNFCShJUlFfRUlOVF9HUk9VUDdfQkFTRSArIElSUV9FSU5UX0dST1VQN19OUikKLSNkZWZpbmUgSVJRX0VJTlRfR1JPVVA5X0JBU0UJKElSUV9FSU5UX0dST1VQOF9CQVNFICsgSVJRX0VJTlRfR1JPVVA4X05SKQotCi0jZGVmaW5lIElSUV9FSU5UX0dST1VQKGdyb3VwLCBubykJKElSUV9FSU5UX0dST1VQIyNncm91cCMjX0JBU0UgKyAobm8pKQotCi0vKiBEZWZpbmUgYSBncm91cCBvZiBpbnRlcnJ1cHRzIGZvciBib2FyZC1zcGVjaWZpYyB1c2UgKGVnLCBmb3IgTUZECi0gKiBpbnRlcnJ1cHQgY29udHJvbGxlcnMpLiAqLwotI2RlZmluZSBJUlFfQk9BUkRfU1RBUlQgKElSUV9FSU5UX0dST1VQOV9CQVNFICsgSVJRX0VJTlRfR1JPVVA5X05SICsgMSkKLQotI2RlZmluZSBJUlFfQk9BUkRfTlIgMTYKLQotI2RlZmluZSBJUlFfQk9BUkRfRU5EIChJUlFfQk9BUkRfU1RBUlQgKyBJUlFfQk9BUkRfTlIpCi0KLS8qIFNldCB0aGUgZGVmYXVsdCBOUl9JUlFTICovCi0KLSNkZWZpbmUgTlJfSVJRUwkoSVJRX0JPQVJEX0VORCArIDEpCi0KLSNlbmRpZiAvKiBfX0FTTV9QTEFUX1MzQzY0WFhfSVJRU19IICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvcG0tY29yZS5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9wbS1jb3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQzNDdkZTMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9wbS1jb3JlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OCArMCwwIEBACi0vKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3BtLWNvcmUuaAotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICoKLSAqIFMzQzY0WFggLSBQTSBjb3JlIHN1cHBvcnQgZm9yIGFyY2gvYXJtL3BsYXQtczNjL3BtLmMKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxwbGF0L3JlZ3MtZ3Bpby5oPgotCi1zdGF0aWMgaW5saW5lIHZvaWQgczNjX3BtX2RlYnVnX2luaXRfdWFydCh2b2lkKQotewotCXUzMiB0bXAgPSBfX3Jhd19yZWFkbChTM0NfUENMS19HQVRFKTsKLQotCS8qIEFzIGEgbm90ZSwgc2luY2UgdGhlIFMzQzY0WFggVUFSVHMgZ2VuZXJhbGx5IGhhdmUgbXVsdGlwbGUKLQkgKiBjbG9jayBzb3VyY2VzLCB3ZSBzaW1wbHkgZW5hYmxlIFBDTEsgYXQgdGhlIG1vbWVudCBhbmQgaG9wZQotCSAqIHRoYXQgdGhlIHJlc3VtZSBzZXR0aW5ncyBmb3IgdGhlIFVBUlQgYXJlIHN1aXRhYmxlIGZvciB0aGUKLQkgKiB1c2Ugd2l0aCBQQ0xLLgotCSAqLwotCi0JdG1wIHw9IFMzQ19DTEtDT05fUENMS19VQVJUMDsKLQl0bXAgfD0gUzNDX0NMS0NPTl9QQ0xLX1VBUlQxOwotCXRtcCB8PSBTM0NfQ0xLQ09OX1BDTEtfVUFSVDI7Ci0JdG1wIHw9IFMzQ19DTEtDT05fUENMS19VQVJUMzsKLQotCV9fcmF3X3dyaXRlbCh0bXAsIFMzQ19QQ0xLX0dBVEUpOwotCXVkZWxheSgxMCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzM2NfcG1fYXJjaF9wcmVwYXJlX2lycXModm9pZCkKLXsKLQkvKiBWSUMgc2hvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHRha2VuIGNhcmUgb2YgKi8KLQotCS8qIGNsZWFyIGFueSBwZW5kaW5nIEVJTlQwIGludGVycnVwdHMgKi8KLQlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoUzNDNjRYWF9FSU5UMFBFTkQpLCBTM0M2NFhYX0VJTlQwUEVORCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzM2NfcG1fYXJjaF9zdG9wX2Nsb2Nrcyh2b2lkKQotewotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgczNjX3BtX2FyY2hfc2hvd19yZXN1bWVfaXJxcyh2b2lkKQotewotfQotCi0vKiBtYWtlIHRoZXNlIGRlZmluZXMsIHdlIGN1cnJlbnRseSBkbyBub3QgaGF2ZSBhbnkgbmVlZCB0byBjaGFuZ2UKLSAqIHRoZSBJUlEgd2FrZSBjb250cm9scyBkZXBlbmRpbmcgb24gdGhlIENQVSB3ZSBhcmUgcnVubmluZyBvbiAqLwotCi0jZGVmaW5lIHMzY19pcnF3YWtlX2VpbnRhbGxvdwkoKDEgPDwgMjgpIC0gMSkKLSNkZWZpbmUgczNjX2lycXdha2VfaW50YWxsb3cJKDApCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzM2NfcG1fYXJjaF91cGRhdGVfdWFydCh2b2lkIF9faW9tZW0gKnJlZ3MsCi0JCQkJCSAgIHN0cnVjdCBwbV91YXJ0X3NhdmUgKnNhdmUpCi17Ci0JdTMyIHVjb24gPSBfX3Jhd19yZWFkbChyZWdzICsgUzNDMjQxMF9VQ09OKTsKLQl1MzIgdWNvbl9jbGsgPSB1Y29uICYgUzNDNjQwMF9VQ09OX0NMS01BU0s7Ci0JdTMyIHNhdmVfY2xrID0gc2F2ZS0+dWNvbiAmIFMzQzY0MDBfVUNPTl9DTEtNQVNLOwotCXUzMiBuZXdfdWNvbjsKLQl1MzIgZGVsdGE7Ci0KLQkvKiBTM0M2NFhYIFVBUlQgYmxvY2tzIG9ubHkgc3VwcG9ydCBsZXZlbCBpbnRlcnJ1cHRzLCBzbyBlbnN1cmUgdGhhdAotCSAqIHdoZW4gd2UgcmVzdG9yZSB1bnVzZWQgVUFSVCBibG9ja3Mgd2UgZm9yY2UgdGhlIGxldmVsIGludGVycnVwdAotCSAqIHNldHRpZ3MuICovCi0Jc2F2ZS0+dWNvbiB8PSBTM0MyNDEwX1VDT05fVFhJTEVWRUwgfCBTM0MyNDEwX1VDT05fUlhJTEVWRUw7Ci0KLQkvKiBXZSBoYXZlIGEgY29uc3RyYWludCBvbiBjaGFuZ2luZyB0aGUgY2xvY2sgdHlwZSBvZiB0aGUgVUFSVAotCSAqIGJldHdlZW4gVUNMS3ggYW5kIFBDTEssIHNvIGVuc3VyZSB0aGF0IHdoZW4gd2UgcmVzdG9yZSBVQ09OCi0JICogdGhhdCB0aGUgQ0xLIGZpZWxkIGlzIGNvcnJlY3RseSBtb2RpZmllZCBpZiB0aGUgYm9vdGxvYWRlcgotCSAqIGhhcyBjaGFuZ2VkIGFueXRoaW5nLgotCSAqLwotCWlmICh1Y29uX2NsayAhPSBzYXZlX2NsaykgewotCQluZXdfdWNvbiA9IHNhdmUtPnVjb247Ci0JCWRlbHRhID0gdWNvbl9jbGsgXiBzYXZlX2NsazsKLQotCQkvKiBjaGFuZ2UgZnJvbSBVQ0xLeCA9PiB3cm9uZyBQQ0xLLAotCQkgKiBlaXRoZXIgVUNMSyBjYW4gYmUgdGVzdGVkIGZvciBieSBhIGJpdC10ZXN0Ci0JCSAqIHdpdGggVUNMSzAgKi8KLQkJaWYgKHVjb25fY2xrICYgUzNDNjQwMF9VQ09OX1VDTEswICYmCi0JCSAgICAhKHNhdmVfY2xrICYgUzNDNjQwMF9VQ09OX1VDTEswKSAmJgotCQkgICAgZGVsdGEgJiBTM0M2NDAwX1VDT05fUENMSzIpIHsKLQkJCW5ld191Y29uICY9IH5TM0M2NDAwX1VDT05fVUNMSzA7Ci0JCX0gZWxzZSBpZiAoZGVsdGEgPT0gUzNDNjQwMF9VQ09OX1BDTEsyKSB7Ci0JCQkvKiBhcyBhbiBwcmVjYXV0aW9uLCBkb24ndCBjaGFuZ2UgZnJvbQotCQkJICogUENMSzIgPT4gUENMSyBvciB2aWNlLXZlcnNhICovCi0JCQluZXdfdWNvbiBePSBTM0M2NDAwX1VDT05fUENMSzI7Ci0JCX0KLQotCQlTM0NfUE1EQkcoInVjb24gY2hhbmdlICUwNHggPT4gJTA0eCAoc2F2ZT0lMDR4KVxuIiwKLQkJCSAgdWNvbiwgbmV3X3Vjb24sIHNhdmUtPnVjb24pOwotCQlzYXZlLT51Y29uID0gbmV3X3Vjb247Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9yZWdzLWNsb2NrLmggYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtY2xvY2suaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmY0NmU3Zi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtY2xvY2suaAorKysgL2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi0vKiBhcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3JlZ3MtY2xvY2suaAotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogUzNDNjRYWCBjbG9jayByZWdpc3RlciBkZWZpbml0aW9ucwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaWZuZGVmIF9fUExBVF9SRUdTX0NMT0NLX0gKLSNkZWZpbmUgX19QTEFUX1JFR1NfQ0xPQ0tfSCBfX0ZJTEVfXwotCi0jZGVmaW5lIFMzQ19DTEtSRUcoeCkJCShTM0NfVkFfU1lTICsgKHgpKQotCi0jZGVmaW5lIFMzQ19BUExMX0xPQ0sJCVMzQ19DTEtSRUcoMHgwMCkKLSNkZWZpbmUgUzNDX01QTExfTE9DSwkJUzNDX0NMS1JFRygweDA0KQotI2RlZmluZSBTM0NfRVBMTF9MT0NLCQlTM0NfQ0xLUkVHKDB4MDgpCi0jZGVmaW5lIFMzQ19BUExMX0NPTgkJUzNDX0NMS1JFRygweDBDKQotI2RlZmluZSBTM0NfTVBMTF9DT04JCVMzQ19DTEtSRUcoMHgxMCkKLSNkZWZpbmUgUzNDX0VQTExfQ09OMAkJUzNDX0NMS1JFRygweDE0KQotI2RlZmluZSBTM0NfRVBMTF9DT04xCQlTM0NfQ0xLUkVHKDB4MTgpCi0jZGVmaW5lIFMzQ19DTEtfU1JDCQlTM0NfQ0xLUkVHKDB4MUMpCi0jZGVmaW5lIFMzQ19DTEtfRElWMAkJUzNDX0NMS1JFRygweDIwKQotI2RlZmluZSBTM0NfQ0xLX0RJVjEJCVMzQ19DTEtSRUcoMHgyNCkKLSNkZWZpbmUgUzNDX0NMS19ESVYyCQlTM0NfQ0xLUkVHKDB4MjgpCi0jZGVmaW5lIFMzQ19DTEtfT1VUCQlTM0NfQ0xLUkVHKDB4MkMpCi0jZGVmaW5lIFMzQ19IQ0xLX0dBVEUJCVMzQ19DTEtSRUcoMHgzMCkKLSNkZWZpbmUgUzNDX1BDTEtfR0FURQkJUzNDX0NMS1JFRygweDM0KQotI2RlZmluZSBTM0NfU0NMS19HQVRFCQlTM0NfQ0xLUkVHKDB4MzgpCi0jZGVmaW5lIFMzQ19NRU0wX0dBVEUJCVMzQ19DTEtSRUcoMHgzQykKLQotLyogQ0xLRElWMCAqLwotI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfTUZDX01BU0sJKDB4ZiA8PCAyOCkKLSNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX01GQ19TSElGVAkoMjgpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9KUEVHX01BU0sJKDB4ZiA8PCAyNCkKLSNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX0pQRUdfU0hJRlQJKDI0KQotI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfQ0FNX01BU0sJKDB4ZiA8PCAyMCkKLSNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX0NBTV9TSElGVAkoMjApCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9TRUNVUklUWV9NQVNLCSgweDMgPDwgMTgpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9TRUNVUklUWV9TSElGVAkoMTgpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9QQ0xLX01BU0sJKDB4ZiA8PCAxMikKLSNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX1BDTEtfU0hJRlQJKDEyKQotI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfSENMSzJfTUFTSwkoMHg3IDw8IDkpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9IQ0xLMl9TSElGVAkoOSkKLSNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX0hDTEtfTUFTSwkoMHgxIDw8IDgpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9IQ0xLX1NISUZUCSg4KQotI2RlZmluZSBTM0M2NDAwX0NMS0RJVjBfTVBMTF9NQVNLCSgweDEgPDwgNCkKLSNkZWZpbmUgUzNDNjQwMF9DTEtESVYwX01QTExfU0hJRlQJKDQpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9BUk1fTUFTSwkoMHg3IDw8IDApCi0jZGVmaW5lIFMzQzY0MTBfQ0xLRElWMF9BUk1fTUFTSwkoMHhmIDw8IDApCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMF9BUk1fU0hJRlQJKDApCi0KLS8qIENMS0RJVjEgKi8KLSNkZWZpbmUgUzNDNjQxMF9DTEtESVYxX0ZJTUNfTUFTSwkoMHhmIDw8IDI0KQotI2RlZmluZSBTM0M2NDEwX0NMS0RJVjFfRklNQ19TSElGVAkoMjQpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMV9VSE9TVF9NQVNLCSgweGYgPDwgMjApCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMV9VSE9TVF9TSElGVAkoMjApCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMV9TQ0FMRVJfTUFTSwkoMHhmIDw8IDE2KQotI2RlZmluZSBTM0M2NDAwX0NMS0RJVjFfU0NBTEVSX1NISUZUCSgxNikKLSNkZWZpbmUgUzNDNjQwMF9DTEtESVYxX0xDRF9NQVNLCSgweGYgPDwgMTIpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMV9MQ0RfU0hJRlQJKDEyKQotI2RlZmluZSBTM0M2NDAwX0NMS0RJVjFfTU1DMl9NQVNLCSgweGYgPDwgOCkKLSNkZWZpbmUgUzNDNjQwMF9DTEtESVYxX01NQzJfU0hJRlQJKDgpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMV9NTUMxX01BU0sJKDB4ZiA8PCA0KQotI2RlZmluZSBTM0M2NDAwX0NMS0RJVjFfTU1DMV9TSElGVAkoNCkKLSNkZWZpbmUgUzNDNjQwMF9DTEtESVYxX01NQzBfTUFTSwkoMHhmIDw8IDApCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMV9NTUMwX1NISUZUCSgwKQotCi0vKiBDTEtESVYyICovCi0jZGVmaW5lIFMzQzY0MTBfQ0xLRElWMl9BVURJTzJfTUFTSwkoMHhmIDw8IDI0KQotI2RlZmluZSBTM0M2NDEwX0NMS0RJVjJfQVVESU8yX1NISUZUCSgyNCkKLSNkZWZpbmUgUzNDNjQwMF9DTEtESVYyX0lSREFfTUFTSwkoMHhmIDw8IDIwKQotI2RlZmluZSBTM0M2NDAwX0NMS0RJVjJfSVJEQV9TSElGVAkoMjApCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMl9VQVJUX01BU0sJKDB4ZiA8PCAxNikKLSNkZWZpbmUgUzNDNjQwMF9DTEtESVYyX1VBUlRfU0hJRlQJKDE2KQotI2RlZmluZSBTM0M2NDAwX0NMS0RJVjJfQVVESU8xX01BU0sJKDB4ZiA8PCAxMikKLSNkZWZpbmUgUzNDNjQwMF9DTEtESVYyX0FVRElPMV9TSElGVAkoMTIpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMl9BVURJTzBfTUFTSwkoMHhmIDw8IDgpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMl9BVURJTzBfU0hJRlQJKDgpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMl9TUEkxX01BU0sJKDB4ZiA8PCA0KQotI2RlZmluZSBTM0M2NDAwX0NMS0RJVjJfU1BJMV9TSElGVAkoNCkKLSNkZWZpbmUgUzNDNjQwMF9DTEtESVYyX1NQSTBfTUFTSwkoMHhmIDw8IDApCi0jZGVmaW5lIFMzQzY0MDBfQ0xLRElWMl9TUEkwX1NISUZUCSgwKQotCi0vKiBIQ0xLIEdBVEUgUmVnaXN0ZXJzICovCi0jZGVmaW5lIFMzQ19DTEtDT05fSENMS18zRFNFCSgxPDwzMSkKLSNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX1VIT1NUCSgxPDwyOSkKLSNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX1NFQ1VSCSgxPDwyOCkKLSNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX1NETUExCSgxPDwyNykKLSNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX1NETUEwCSgxPDwyNikKLSNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX0lST00JKDE8PDI1KQotI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfRERSMQkoMTw8MjQpCi0jZGVmaW5lIFMzQ19DTEtDT05fSENMS19ERFIwCSgxPDwyMykKLSNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX01FTTEJKDE8PDIyKQotI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfTUVNMAkoMTw8MjEpCi0jZGVmaW5lIFMzQ19DTEtDT05fSENMS19VU0IJKDE8PDIwKQotI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfSFNNTUMyCSgxPDwxOSkKLSNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX0hTTU1DMQkoMTw8MTgpCi0jZGVmaW5lIFMzQ19DTEtDT05fSENMS19IU01NQzAJKDE8PDE3KQotI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfTURQCSgxPDwxNikKLSNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX0RIT1NUCSgxPDwxNSkKLSNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX0lIT1NUCSgxPDwxNCkKLSNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX0RNQTEJKDE8PDEzKQotI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfRE1BMAkoMTw8MTIpCi0jZGVmaW5lIFMzQ19DTEtDT05fSENMS19KUEVHCSgxPDwxMSkKLSNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX0NBTUlGCSgxPDwxMCkKLSNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX1NDQUxFUgkoMTw8OSkKLSNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLXzJECSgxPDw4KQotI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfVFYJKDE8PDcpCi0jZGVmaW5lIFMzQ19DTEtDT05fSENMS19QT1NUMAkoMTw8NSkKLSNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX1JPVAkoMTw8NCkKLSNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX0xDRAkoMTw8MykKLSNkZWZpbmUgUzNDX0NMS0NPTl9IQ0xLX1RaSUMJKDE8PDIpCi0jZGVmaW5lIFMzQ19DTEtDT05fSENMS19JTlRDCSgxPDwxKQotI2RlZmluZSBTM0NfQ0xLQ09OX0hDTEtfTUZDCSgxPDwwKQotCi0vKiBQQ0xLIEdBVEUgUmVnaXN0ZXJzICovCi0jZGVmaW5lIFMzQzY0MTBfQ0xLQ09OX1BDTEtfSTJDMQkoMTw8MjcpCi0jZGVmaW5lIFMzQzY0MTBfQ0xLQ09OX1BDTEtfSUlTMgkoMTw8MjYpCi0jZGVmaW5lIFMzQ19DTEtDT05fUENMS19TS0VZCQkoMTw8MjQpCi0jZGVmaW5lIFMzQ19DTEtDT05fUENMS19DSElQSUQJCSgxPDwyMykKLSNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX1NQSTEJCSgxPDwyMikKLSNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX1NQSTAJCSgxPDwyMSkKLSNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX0hTSVJYCQkoMTw8MjApCi0jZGVmaW5lIFMzQ19DTEtDT05fUENMS19IU0lUWAkJKDE8PDE5KQotI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfR1BJTwkJKDE8PDE4KQotI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfSUlDCQkoMTw8MTcpCi0jZGVmaW5lIFMzQ19DTEtDT05fUENMS19JSVMxCQkoMTw8MTYpCi0jZGVmaW5lIFMzQ19DTEtDT05fUENMS19JSVMwCQkoMTw8MTUpCi0jZGVmaW5lIFMzQ19DTEtDT05fUENMS19BQzk3CQkoMTw8MTQpCi0jZGVmaW5lIFMzQ19DTEtDT05fUENMS19UWlBDCQkoMTw8MTMpCi0jZGVmaW5lIFMzQ19DTEtDT05fUENMS19UU0FEQwkJKDE8PDEyKQotI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfS0VZUEFECQkoMTw8MTEpCi0jZGVmaW5lIFMzQ19DTEtDT05fUENMS19JUkRBCQkoMTw8MTApCi0jZGVmaW5lIFMzQ19DTEtDT05fUENMS19QQ00xCQkoMTw8OSkKLSNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX1BDTTAJCSgxPDw4KQotI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfUFdNCQkoMTw8NykKLSNkZWZpbmUgUzNDX0NMS0NPTl9QQ0xLX1JUQwkJKDE8PDYpCi0jZGVmaW5lIFMzQ19DTEtDT05fUENMS19XRFQJCSgxPDw1KQotI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfVUFSVDMJCSgxPDw0KQotI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfVUFSVDIJCSgxPDwzKQotI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfVUFSVDEJCSgxPDwyKQotI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfVUFSVDAJCSgxPDwxKQotI2RlZmluZSBTM0NfQ0xLQ09OX1BDTEtfTUZDCQkoMTw8MCkKLQotLyogU0NMSyBHQVRFIFJlZ2lzdGVycyAqLwotI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfVUhPU1QJCSgxPDwzMCkKLSNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX01NQzJfNDgJCSgxPDwyOSkKLSNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX01NQzFfNDgJCSgxPDwyOCkKLSNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX01NQzBfNDgJCSgxPDwyNykKLSNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX01NQzIJCSgxPDwyNikKLSNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX01NQzEJCSgxPDwyNSkKLSNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX01NQzAJCSgxPDwyNCkKLSNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX1NQSTFfNDggCSgxPDwyMykKLSNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX1NQSTBfNDggCSgxPDwyMikKLSNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX1NQSTEJCSgxPDwyMSkKLSNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX1NQSTAJCSgxPDwyMCkKLSNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX0RBQzI3CQkoMTw8MTkpCi0jZGVmaW5lIFMzQ19DTEtDT05fU0NMS19UVjI3CQkoMTw8MTgpCi0jZGVmaW5lIFMzQ19DTEtDT05fU0NMS19TQ0FMRVIyNwkoMTw8MTcpCi0jZGVmaW5lIFMzQ19DTEtDT05fU0NMS19TQ0FMRVIJCSgxPDwxNikKLSNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX0xDRDI3CQkoMTw8MTUpCi0jZGVmaW5lIFMzQ19DTEtDT05fU0NMS19MQ0QJCSgxPDwxNCkKLSNkZWZpbmUgUzNDNjQwMF9DTEtDT05fU0NMS19QT1NUMV8yNwkoMTw8MTMpCi0jZGVmaW5lIFMzQzY0MTBfQ0xLQ09OX0ZJTUMJCSgxPDwxMykKLSNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX1BPU1QwXzI3CSgxPDwxMikKLSNkZWZpbmUgUzNDNjQwMF9DTEtDT05fU0NMS19QT1NUMQkoMTw8MTEpCi0jZGVmaW5lIFMzQzY0MTBfQ0xLQ09OX1NDTEtfQVVESU8yCSgxPDwxMSkKLSNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX1BPU1QwCQkoMTw8MTApCi0jZGVmaW5lIFMzQ19DTEtDT05fU0NMS19BVURJTzEJCSgxPDw5KQotI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfQVVESU8wCQkoMTw8OCkKLSNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX1NFQ1VSCQkoMTw8NykKLSNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX0lSREEJCSgxPDw2KQotI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfVUFSVAkJKDE8PDUpCi0jZGVmaW5lIFMzQ19DTEtDT05fU0NMS19PTkVOQU5EIAkoMTw8NCkKLSNkZWZpbmUgUzNDX0NMS0NPTl9TQ0xLX01GQwkJKDE8PDMpCi0jZGVmaW5lIFMzQ19DTEtDT05fU0NMS19DQU0JCSgxPDwyKQotI2RlZmluZSBTM0NfQ0xLQ09OX1NDTEtfSlBFRwkJKDE8PDEpCi0KLS8qIENMS1NSQyAqLwotCi0jZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX0FQTExfTU9VVAkoMSA8PCAwKQotI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19NUExMX01PVVQJKDEgPDwgMSkKLSNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfRVBMTF9NT1VUCSgxIDw8IDIpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX0FQTExfTU9VVF9TSElGVAkoMCkKLSNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfTVBMTF9NT1VUX1NISUZUCSgxKQotI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19FUExMX01PVVRfU0hJRlQJKDIpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX01GQwkJKDEgPDwgNCkKLQotI2RlZmluZSBTM0M2NDEwX0NMS1NSQ19UVjI3X01BU0sJKDB4MSA8PCAzMSkKLSNkZWZpbmUgUzNDNjQxMF9DTEtTUkNfVFYyN19TSElGVAkoMzEpCi0jZGVmaW5lIFMzQzY0MTBfQ0xLU1JDX0RBQzI3X01BU0sJKDB4MSA8PCAzMCkKLSNkZWZpbmUgUzNDNjQxMF9DTEtTUkNfREFDMjdfU0hJRlQJKDMwKQotI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19TQ0FMRVJfTUFTSwkoMHgzIDw8IDI4KQotI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19TQ0FMRVJfU0hJRlQJKDI4KQotI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19MQ0RfTUFTSwkJKDB4MyA8PCAyNikKLSNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfTENEX1NISUZUCSgyNikKLSNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfSVJEQV9NQVNLCSgweDMgPDwgMjQpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX0lSREFfU0hJRlQJKDI0KQotI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19NTUMyX01BU0sJKDB4MyA8PCAyMikKLSNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfTU1DMl9TSElGVAkoMjIpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX01NQzFfTUFTSwkoMHgzIDw8IDIwKQotI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19NTUMxX1NISUZUCSgyMCkKLSNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfTU1DMF9NQVNLCSgweDMgPDwgMTgpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX01NQzBfU0hJRlQJKDE4KQotI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19TUEkxX01BU0sJKDB4MyA8PCAxNikKLSNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfU1BJMV9TSElGVAkoMTYpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX1NQSTBfTUFTSwkoMHgzIDw8IDE0KQotI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19TUEkwX1NISUZUCSgxNCkKLSNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfVUFSVF9NQVNLCSgweDEgPDwgMTMpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX1VBUlRfU0hJRlQJKDEzKQotI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19BVURJTzFfTUFTSwkoMHg3IDw8IDEwKQotI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19BVURJTzFfU0hJRlQJKDEwKQotI2RlZmluZSBTM0M2NDAwX0NMS1NSQ19BVURJTzBfTUFTSwkoMHg3IDw8IDcpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX0FVRElPMF9TSElGVAkoNykKLSNkZWZpbmUgUzNDNjQwMF9DTEtTUkNfVUhPU1RfTUFTSwkoMHgzIDw8IDUpCi0jZGVmaW5lIFMzQzY0MDBfQ0xLU1JDX1VIT1NUX1NISUZUCSg1KQotCi0KLSNlbmRpZiAvKiBfUExBVF9SRUdTX0NMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvczNjNjQwMC5oIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9zM2M2NDAwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExZjJlMWUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9zM2M2NDAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKiBhcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3MzYzY0MDAuaAotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogSGVhZGVyIGZpbGUgZm9yIHMzYzY0MDAgY3B1IHN1cHBvcnQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotLyogQ29tbW9uIGluaXQgY29kZSBmb3IgUzNDNjQwMCByZWxhdGVkIFNvQ3MgKi8KLQotZXh0ZXJuIHZvaWQgczNjNjQwMF9jb21tb25faW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubyk7Ci1leHRlcm4gdm9pZCBzM2M2NDAwX3JlZ2lzdGVyX2Nsb2Nrcyh1bnNpZ25lZCBhcm1jbGtfZGl2bGltaXQpOwotZXh0ZXJuIHZvaWQgczNjNjQwMF9zZXR1cF9jbG9ja3Modm9pZCk7Ci0KLSNpZmRlZiBDT05GSUdfQ1BVX1MzQzY0MDAKLQotZXh0ZXJuICBpbnQgczNjNjQwMF9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgczNjNjQwMF9pbml0X2lycSh2b2lkKTsKLWV4dGVybiB2b2lkIHMzYzY0MDBfbWFwX2lvKHZvaWQpOwotZXh0ZXJuIHZvaWQgczNjNjQwMF9pbml0X2Nsb2NrcyhpbnQgeHRhbCk7Ci0KLSNkZWZpbmUgczNjNjQwMF9pbml0X3VhcnRzIHMzYzY0MDBfY29tbW9uX2luaXRfdWFydHMKLQotI2Vsc2UKLSNkZWZpbmUgczNjNjQwMF9pbml0X2Nsb2NrcyBOVUxMCi0jZGVmaW5lIHMzYzY0MDBfaW5pdF91YXJ0cyBOVUxMCi0jZGVmaW5lIHMzYzY0MDBfbWFwX2lvIE5VTEwKLSNkZWZpbmUgczNjNjQwMF9pbml0IE5VTEwKLSNlbmRpZgotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaW5jbHVkZS9wbGF0L3MzYzY0MTAuaCBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvczNjNjQxMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MGRjZGQ2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pbmNsdWRlL3BsYXQvczNjNjQxMC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyogYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9zM2M2NDEwLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgIEluYy4KLSAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBIZWFkZXIgZmlsZSBmb3IgczNjNjQxMCBjcHUgc3VwcG9ydAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0qLwotCi0jaWZkZWYgQ09ORklHX0NQVV9TM0M2NDEwCi0KLWV4dGVybiAgaW50IHMzYzY0MTBfaW5pdCh2b2lkKTsKLWV4dGVybiB2b2lkIHMzYzY0MTBfaW5pdF9pcnEodm9pZCk7Ci1leHRlcm4gdm9pZCBzM2M2NDEwX21hcF9pbyh2b2lkKTsKLWV4dGVybiB2b2lkIHMzYzY0MTBfaW5pdF9jbG9ja3MoaW50IHh0YWwpOwotCi0jZGVmaW5lIHMzYzY0MTBfaW5pdF91YXJ0cyBzM2M2NDAwX2NvbW1vbl9pbml0X3VhcnRzCi0KLSNlbHNlCi0jZGVmaW5lIHMzYzY0MTBfaW5pdF9jbG9ja3MgTlVMTAotI2RlZmluZSBzM2M2NDEwX2luaXRfdWFydHMgTlVMTAotI2RlZmluZSBzM2M2NDEwX21hcF9pbyBOVUxMCi0jZGVmaW5lIHMzYzY0MTBfaW5pdCBOVUxMCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pcnEtZWludC5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS1laW50LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGViZGYxODMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS1laW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTMgKzAsMCBAQAotLyogYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS1laW50LmMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBTM0M2NFhYIC0gSW50ZXJydXB0IGhhbmRsaW5nIGZvciBJUlFfRUlOVCh4KQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3ZpYy5oPgotCi0jaW5jbHVkZSA8cGxhdC9yZWdzLWlycXR5cGUuaD4KLSNpbmNsdWRlIDxwbGF0L3JlZ3MtZ3Bpby5oPgotI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KLQotI2luY2x1ZGUgPG1hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8cGxhdC9jcHUuaD4KLSNpbmNsdWRlIDxwbGF0L3BtLmg+Ci0KLSNkZWZpbmUgZWludF9vZmZzZXQoaXJxKQkoKGlycSkgLSBJUlFfRUlOVCgwKSkKLSNkZWZpbmUgZWludF9pcnFfdG9fYml0KGlycSkJKDEgPDwgZWludF9vZmZzZXQoaXJxKSkKLQotc3RhdGljIGlubGluZSB2b2lkIHMzY19pcnFfZWludF9tYXNrKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdTMyIG1hc2s7Ci0KLQltYXNrID0gX19yYXdfcmVhZGwoUzNDNjRYWF9FSU5UME1BU0spOwotCW1hc2sgfD0gZWludF9pcnFfdG9fYml0KGlycSk7Ci0JX19yYXdfd3JpdGVsKG1hc2ssIFMzQzY0WFhfRUlOVDBNQVNLKTsKLX0KLQotc3RhdGljIHZvaWQgczNjX2lycV9laW50X3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQotewotCXUzMiBtYXNrOwotCi0JbWFzayA9IF9fcmF3X3JlYWRsKFMzQzY0WFhfRUlOVDBNQVNLKTsKLQltYXNrICY9IH5laW50X2lycV90b19iaXQoaXJxKTsKLQlfX3Jhd193cml0ZWwobWFzaywgUzNDNjRYWF9FSU5UME1BU0spOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgczNjX2lycV9laW50X2Fjayh1bnNpZ25lZCBpbnQgaXJxKQotewotCV9fcmF3X3dyaXRlbChlaW50X2lycV90b19iaXQoaXJxKSwgUzNDNjRYWF9FSU5UMFBFTkQpOwotfQotCi1zdGF0aWMgdm9pZCBzM2NfaXJxX2VpbnRfbWFza2Fjayh1bnNpZ25lZCBpbnQgaXJxKQotewotCS8qIGNvbXBpbGVyIHNob3VsZCBpbi1saW5lIHRoZXNlICovCi0JczNjX2lycV9laW50X21hc2soaXJxKTsKLQlzM2NfaXJxX2VpbnRfYWNrKGlycSk7Ci19Ci0KLXN0YXRpYyBpbnQgczNjX2lycV9laW50X3NldF90eXBlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCB0eXBlKQotewotCWludCBvZmZzID0gZWludF9vZmZzZXQoaXJxKTsKLQlpbnQgcGluLCBwaW5fdmFsOwotCWludCBzaGlmdDsKLQl1MzIgY3RybCwgbWFzazsKLQl1MzIgbmV3dmFsdWUgPSAwOwotCXZvaWQgX19pb21lbSAqcmVnOwotCi0JaWYgKG9mZnMgPiAyNykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAob2ZmcyA8PSAxNSkKLQkJcmVnID0gUzNDNjRYWF9FSU5UMENPTjA7Ci0JZWxzZQotCQlyZWcgPSBTM0M2NFhYX0VJTlQwQ09OMTsKLQotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgSVJRX1RZUEVfTk9ORToKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiTm8gZWRnZSBzZXR0aW5nIVxuIik7Ci0JCWJyZWFrOwotCi0JY2FzZSBJUlFfVFlQRV9FREdFX1JJU0lORzoKLQkJbmV3dmFsdWUgPSBTM0MyNDEwX0VYVElOVF9SSVNFRURHRTsKLQkJYnJlYWs7Ci0KLQljYXNlIElSUV9UWVBFX0VER0VfRkFMTElORzoKLQkJbmV3dmFsdWUgPSBTM0MyNDEwX0VYVElOVF9GQUxMRURHRTsKLQkJYnJlYWs7Ci0KLQljYXNlIElSUV9UWVBFX0VER0VfQk9USDoKLQkJbmV3dmFsdWUgPSBTM0MyNDEwX0VYVElOVF9CT1RIRURHRTsKLQkJYnJlYWs7Ci0KLQljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoKLQkJbmV3dmFsdWUgPSBTM0MyNDEwX0VYVElOVF9MT1dMRVY7Ci0JCWJyZWFrOwotCi0JY2FzZSBJUlFfVFlQRV9MRVZFTF9ISUdIOgotCQluZXd2YWx1ZSA9IFMzQzI0MTBfRVhUSU5UX0hJTEVWOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiTm8gc3VjaCBpcnEgdHlwZSAlZCIsIHR5cGUpOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JaWYgKG9mZnMgPD0gMTUpCi0JCXNoaWZ0ID0gKG9mZnMgLyAyKSAqIDQ7Ci0JZWxzZQotCQlzaGlmdCA9ICgob2ZmcyAtIDE2KSAvIDIpICogNDsKLQltYXNrID0gMHg3IDw8IHNoaWZ0OwotCi0JY3RybCA9IF9fcmF3X3JlYWRsKHJlZyk7Ci0JY3RybCAmPSB+bWFzazsKLQljdHJsIHw9IG5ld3ZhbHVlIDw8IHNoaWZ0OwotCV9fcmF3X3dyaXRlbChjdHJsLCByZWcpOwotCi0JLyogc2V0IHRoZSBHUElPIHBpbiBhcHByb3ByaWF0ZWx5ICovCi0KLQlpZiAob2ZmcyA8IDE2KSB7Ci0JCXBpbiA9IFMzQzY0WFhfR1BOKG9mZnMpOwotCQlwaW5fdmFsID0gUzNDX0dQSU9fU0ZOKDIpOwotCX0gZWxzZSBpZiAob2ZmcyA8IDIzKSB7Ci0JCXBpbiA9IFMzQzY0WFhfR1BMKG9mZnMgKyA4IC0gMTYpOwotCQlwaW5fdmFsID0gUzNDX0dQSU9fU0ZOKDMpOwotCX0gZWxzZSB7Ci0JCXBpbiA9IFMzQzY0WFhfR1BNKG9mZnMgLSAyMyk7Ci0JCXBpbl92YWwgPSBTM0NfR1BJT19TRk4oMyk7Ci0JfQotCi0JczNjX2dwaW9fY2ZncGluKHBpbiwgcGluX3ZhbCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzM2NfaXJxX2VpbnQgPSB7Ci0JLm5hbWUJCT0gInMzYy1laW50IiwKLQkubWFzawkJPSBzM2NfaXJxX2VpbnRfbWFzaywKLQkudW5tYXNrCQk9IHMzY19pcnFfZWludF91bm1hc2ssCi0JLm1hc2tfYWNrCT0gczNjX2lycV9laW50X21hc2thY2ssCi0JLmFjawkJPSBzM2NfaXJxX2VpbnRfYWNrLAotCS5zZXRfdHlwZQk9IHMzY19pcnFfZWludF9zZXRfdHlwZSwKLQkuc2V0X3dha2UJPSBzM2NfaXJxZXh0X3dha2UsCi19OwotCi0vKiBzM2NfaXJxX2RlbXV4X2VpbnQKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGRlbXV4ZXMgdGhlIElSUSBmcm9tIHRoZSBncm91cDAgZXh0ZXJuYWwgaW50ZXJydXB0cywKLSAqIGZyb20gSVJRX0VJTlQoMCkgdG8gSVJRX0VJTlQoMjcpLiBJdCBpcyBkZXNpZ25lZCB0byBiZSBpbmxpbmVkIGludG8KLSAqIHRoZSBzcGVjaWZpYyBoYW5kbGVycyBzM2NfaXJxX2RlbXV4X2VpbnRYX1kuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzM2NfaXJxX2RlbXV4X2VpbnQodW5zaWduZWQgaW50IHN0YXJ0LCB1bnNpZ25lZCBpbnQgZW5kKQotewotCXUzMiBzdGF0dXMgPSBfX3Jhd19yZWFkbChTM0M2NFhYX0VJTlQwUEVORCk7Ci0JdTMyIG1hc2sgPSBfX3Jhd19yZWFkbChTM0M2NFhYX0VJTlQwTUFTSyk7Ci0JdW5zaWduZWQgaW50IGlycTsKLQotCXN0YXR1cyAmPSB+bWFzazsKLQlzdGF0dXMgPj49IHN0YXJ0OwotCXN0YXR1cyAmPSAoMSA8PCAoZW5kIC0gc3RhcnQgKyAxKSkgLSAxOwotCi0JZm9yIChpcnEgPSBJUlFfRUlOVChzdGFydCk7IGlycSA8PSBJUlFfRUlOVChlbmQpOyBpcnErKykgewotCQlpZiAoc3RhdHVzICYgMSkKLQkJCWdlbmVyaWNfaGFuZGxlX2lycShpcnEpOwotCi0JCXN0YXR1cyA+Pj0gMTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfZWludDBfMyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCi17Ci0JczNjX2lycV9kZW11eF9laW50KDAsIDMpOwotfQotCi1zdGF0aWMgdm9pZCBzM2NfaXJxX2RlbXV4X2VpbnQ0XzExKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQlzM2NfaXJxX2RlbXV4X2VpbnQoNCwgMTEpOwotfQotCi1zdGF0aWMgdm9pZCBzM2NfaXJxX2RlbXV4X2VpbnQxMl8xOSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCi17Ci0JczNjX2lycV9kZW11eF9laW50KDEyLCAxOSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfZWludDIwXzI3KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQlzM2NfaXJxX2RlbXV4X2VpbnQoMjAsIDI3KTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgczNjNjR4eF9pbml0X2lycV9laW50KHZvaWQpCi17Ci0JaW50IGlycTsKLQotCWZvciAoaXJxID0gSVJRX0VJTlQoMCk7IGlycSA8PSBJUlFfRUlOVCgyNyk7IGlycSsrKSB7Ci0JCXNldF9pcnFfY2hpcChpcnEsICZzM2NfaXJxX2VpbnQpOwotCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfbGV2ZWxfaXJxKTsKLQkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOwotCX0KLQotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FSU5UMF8zLCBzM2NfaXJxX2RlbXV4X2VpbnQwXzMpOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FSU5UNF8xMSwgczNjX2lycV9kZW11eF9laW50NF8xMSk7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VJTlQxMl8xOSwgczNjX2lycV9kZW11eF9laW50MTJfMTkpOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FSU5UMjBfMjcsIHMzY19pcnFfZGVtdXhfZWludDIwXzI3KTsKLQotCXJldHVybiAwOwotfQotCi1hcmNoX2luaXRjYWxsKHMzYzY0eHhfaW5pdF9pcnFfZWludCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaXJxLXBtLmMgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvaXJxLXBtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhNTIzYjUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS1wbS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTExICswLDAgQEAKLS8qIGFyY2gvYXJtL3BsYXQtczNjNjR4eC9pcnEtcG0uYwotICoKLSAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCi0gKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKLSAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgotICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICoKLSAqIFMzQzY0WFggLSBJbnRlcnJ1cHQgaGFuZGxpbmcgUG93ZXIgTWFuYWdlbWVudAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPG1hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+Ci0jaW5jbHVkZSA8cGxhdC9yZWdzLXRpbWVyLmg+Ci0jaW5jbHVkZSA8cGxhdC9yZWdzLWdwaW8uaD4KLSNpbmNsdWRlIDxwbGF0L2NwdS5oPgotI2luY2x1ZGUgPHBsYXQvcG0uaD4KLQotLyogV2UgaGFuZGxlZCBhbGwgdGhlIElSUSB0eXBlcyBpbiB0aGlzIGNvZGUsIHRvIHNhdmUgaGF2aW5nIHRvIG1ha2Ugc2V2ZXJhbAotICogc21hbGwgZmlsZXMgdG8gaGFuZGxlIGVhY2ggZGlmZmVyZW50IHR5cGUgc2VwYXJhdGVseS4gSGF2aW5nIHRoZSBFSU5UX0dSUAotICogY29kZSBoZXJlIHNob3VsZG4ndCBiZSBhcyBtdWNoIGJsb2F0IGFzIHRoZSBJUlEgdGFibGUgc3BhY2UgbmVlZGVkIHdoZW4KLSAqIHRoZXkgYXJlIGVuYWJsZWQuIFRoZSBhZGRlZCBiZW5lZml0IGlzIHdlIGVuc3VyZSB0aGF0IHRoZXNlIHJlZ2lzdGVycyBhcmUKLSAqIGluIHRoZSBzYW1lIHN0YXRlIGFzIHdlIHN1c3BlbmRlZC4KLSAqLwotCi1zdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgaXJxX3NhdmVbXSA9IHsKLQlTQVZFX0lURU0oUzNDNjRYWF9QUklPUklUWSksCi0JU0FWRV9JVEVNKFMzQzY0WFhfRUlOVDBDT04wKSwKLQlTQVZFX0lURU0oUzNDNjRYWF9FSU5UMENPTjEpLAotCVNBVkVfSVRFTShTM0M2NFhYX0VJTlQwRkxUQ09OMCksCi0JU0FWRV9JVEVNKFMzQzY0WFhfRUlOVDBGTFRDT04xKSwKLQlTQVZFX0lURU0oUzNDNjRYWF9FSU5UMEZMVENPTjIpLAotCVNBVkVfSVRFTShTM0M2NFhYX0VJTlQwRkxUQ09OMyksCi0JU0FWRV9JVEVNKFMzQzY0WFhfRUlOVDBNQVNLKSwKLQlTQVZFX0lURU0oUzNDNjRYWF9USU5UX0NTVEFUKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgaXJxX2dycF9zYXZlIHsKLQl1MzIJZmx0Y29uOwotCXUzMgljb247Ci0JdTMyCW1hc2s7Ci19IGVpbnRfZ3JwX3NhdmVbNV07Ci0KLXN0YXRpYyB1MzIgaXJxX3VhcnRfbWFza1tDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFNdOwotCi1zdGF0aWMgaW50IHMzYzY0eHhfaXJxX3BtX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBpcnFfZ3JwX3NhdmUgKmdycCA9IGVpbnRfZ3JwX3NhdmU7Ci0JaW50IGk7Ci0KLQlTM0NfUE1EQkcoIiVzOiBzdXNwZW5kaW5nIElSUXNcbiIsIF9fZnVuY19fKTsKLQotCXMzY19wbV9kb19zYXZlKGlycV9zYXZlLCBBUlJBWV9TSVpFKGlycV9zYXZlKSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTOyBpKyspCi0JCWlycV91YXJ0X21hc2tbaV0gPSBfX3Jhd19yZWFkbChTM0NfVkFfVUFSVHgoaSkgKyBTM0M2NFhYX1VJTlRNKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVpbnRfZ3JwX3NhdmUpOyBpKyssIGdycCsrKSB7Ci0JCWdycC0+Y29uID0gX19yYXdfcmVhZGwoUzNDNjRYWF9FSU5UMTJDT04gKyAoaSAqIDQpKTsKLQkJZ3JwLT5tYXNrID0gX19yYXdfcmVhZGwoUzNDNjRYWF9FSU5UMTJNQVNLICsgKGkgKiA0KSk7Ci0JCWdycC0+Zmx0Y29uID0gX19yYXdfcmVhZGwoUzNDNjRYWF9FSU5UMTJGTFRDT04gKyAoaSAqIDQpKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzM2M2NHh4X2lycV9wbV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgaXJxX2dycF9zYXZlICpncnAgPSBlaW50X2dycF9zYXZlOwotCWludCBpOwotCi0JUzNDX1BNREJHKCIlczogcmVzdW1pbmcgSVJRc1xuIiwgX19mdW5jX18pOwotCi0JczNjX3BtX2RvX3Jlc3RvcmUoaXJxX3NhdmUsIEFSUkFZX1NJWkUoaXJxX3NhdmUpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFM7IGkrKykKLQkJX19yYXdfd3JpdGVsKGlycV91YXJ0X21hc2tbaV0sIFMzQ19WQV9VQVJUeChpKSArIFMzQzY0WFhfVUlOVE0pOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZWludF9ncnBfc2F2ZSk7IGkrKywgZ3JwKyspIHsKLQkJX19yYXdfd3JpdGVsKGdycC0+Y29uLCBTM0M2NFhYX0VJTlQxMkNPTiArIChpICogNCkpOwotCQlfX3Jhd193cml0ZWwoZ3JwLT5tYXNrLCBTM0M2NFhYX0VJTlQxMk1BU0sgKyAoaSAqIDQpKTsKLQkJX19yYXdfd3JpdGVsKGdycC0+Zmx0Y29uLCBTM0M2NFhYX0VJTlQxMkZMVENPTiArIChpICogNCkpOwotCX0KLQotCVMzQ19QTURCRygiJXM6IElSUSBjb25maWd1cmF0aW9uIHJlc3RvcmVkXG4iLCBfX2Z1bmNfXyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2M2NHh4X2lycV9kcml2ZXIgPSB7Ci0JLnN1c3BlbmQgPSBzM2M2NHh4X2lycV9wbV9zdXNwZW5kLAotCS5yZXN1bWUJID0gczNjNjR4eF9pcnFfcG1fcmVzdW1lLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgczNjNjR4eF9pcnFfcG1faW5pdCh2b2lkKQotewotCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2M2NHh4X3N5c2NsYXNzLCAmczNjNjR4eF9pcnFfZHJpdmVyKTsKLX0KLQotYXJjaF9pbml0Y2FsbChzM2M2NHh4X2lycV9wbV9pbml0KTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2lycS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZGM1YjZkLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9pcnEuYworKysgL2Rldi9udWxsCkBAIC0xLDI1NiArMCwwIEBACi0vKiBhcmNoL2FybS9wbGF0LXMzYzY0eHgvaXJxLmMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KLSAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KLSAqCi0gKiBTM0M2NFhYIC0gSW50ZXJydXB0IGhhbmRsaW5nCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlL3ZpYy5oPgotCi0jaW5jbHVkZSA8bWFjaC9tYXAuaD4KLSNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+Ci0jaW5jbHVkZSA8cGxhdC9yZWdzLXRpbWVyLmg+Ci0jaW5jbHVkZSA8cGxhdC9jcHUuaD4KLQotLyogVGltZXIgaW50ZXJydXB0IGhhbmRsaW5nICovCi0KLXN0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdGltZXIodW5zaWduZWQgaW50IGJhc2VfaXJxLCB1bnNpZ25lZCBpbnQgc3ViX2lycSkKLXsKLQlnZW5lcmljX2hhbmRsZV9pcnEoc3ViX2lycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdGltZXIwKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQlzM2NfaXJxX2RlbXV4X3RpbWVyKGlycSwgSVJRX1RJTUVSMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdGltZXIxKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQlzM2NfaXJxX2RlbXV4X3RpbWVyKGlycSwgSVJRX1RJTUVSMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdGltZXIyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQlzM2NfaXJxX2RlbXV4X3RpbWVyKGlycSwgSVJRX1RJTUVSMik7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdGltZXIzKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQlzM2NfaXJxX2RlbXV4X3RpbWVyKGlycSwgSVJRX1RJTUVSMyk7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdGltZXI0KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQlzM2NfaXJxX2RlbXV4X3RpbWVyKGlycSwgSVJRX1RJTUVSNCk7Ci19Ci0KLS8qIFdlIGFzc3VtZSB0aGUgSVJRX1RJTUVSMC4uSVJRX1RJTUVSNCByYW5nZSBpcyBjb250aW51b3VzLiAqLwotCi1zdGF0aWMgdm9pZCBzM2NfaXJxX3RpbWVyX21hc2sodW5zaWduZWQgaW50IGlycSkKLXsKLQl1MzIgcmVnID0gX19yYXdfcmVhZGwoUzNDNjRYWF9USU5UX0NTVEFUKTsKLQotCXJlZyAmPSAweDFmOyAgLyogbWFzayBvdXQgcGVuZGluZyBpbnRlcnJ1cHRzICovCi0JcmVnICY9IH4oMSA8PCAoaXJxIC0gSVJRX1RJTUVSMCkpOwotCV9fcmF3X3dyaXRlbChyZWcsIFMzQzY0WFhfVElOVF9DU1RBVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzY19pcnFfdGltZXJfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdTMyIHJlZyA9IF9fcmF3X3JlYWRsKFMzQzY0WFhfVElOVF9DU1RBVCk7Ci0KLQlyZWcgJj0gMHgxZjsgIC8qIG1hc2sgb3V0IHBlbmRpbmcgaW50ZXJydXB0cyAqLwotCXJlZyB8PSAxIDw8IChpcnEgLSBJUlFfVElNRVIwKTsKLQlfX3Jhd193cml0ZWwocmVnLCBTM0M2NFhYX1RJTlRfQ1NUQVQpOwotfQotCi1zdGF0aWMgdm9pZCBzM2NfaXJxX3RpbWVyX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQotewotCXUzMiByZWcgPSBfX3Jhd19yZWFkbChTM0M2NFhYX1RJTlRfQ1NUQVQpOwotCi0JcmVnICY9IDB4MWY7Ci0JcmVnIHw9ICgxIDw8IDUpIDw8IChpcnEgLSBJUlFfVElNRVIwKTsKLQlfX3Jhd193cml0ZWwocmVnLCBTM0M2NFhYX1RJTlRfQ1NUQVQpOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIHMzY19pcnFfdGltZXIgPSB7Ci0JLm5hbWUJCT0gInMzYy10aW1lciIsCi0JLm1hc2sJCT0gczNjX2lycV90aW1lcl9tYXNrLAotCS51bm1hc2sJCT0gczNjX2lycV90aW1lcl91bm1hc2ssCi0JLmFjawkJPSBzM2NfaXJxX3RpbWVyX2FjaywKLX07Ci0KLXN0cnVjdCB1YXJ0X2lycSB7Ci0Jdm9pZCBfX2lvbWVtCSpyZWdzOwotCXVuc2lnbmVkIGludAkgYmFzZV9pcnE7Ci0JdW5zaWduZWQgaW50CSBwYXJlbnRfaXJxOwotfTsKLQotLyogTm90ZSwgd2UgbWFrZSB1c2Ugb2YgdGhlIGZhY3QgdGhhdCB0aGUgcGFyZW50IElSUXMsIElSUV9VQVJUWzAuLjNdCi0gKiBhcmUgY29uc2VjdXRpdmUgd2hlbiBsb29raW5nIHVwIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIGRlbXV4IHJvdXRpbmVzLgotICovCi1zdGF0aWMgc3RydWN0IHVhcnRfaXJxIHVhcnRfaXJxc1tdID0gewotCVswXSA9IHsKLQkJLnJlZ3MJCT0gUzNDX1ZBX1VBUlQwLAotCQkuYmFzZV9pcnEJPSBJUlFfUzNDVUFSVF9CQVNFMCwKLQkJLnBhcmVudF9pcnEJPSBJUlFfVUFSVDAsCi0JfSwKLQlbMV0gPSB7Ci0JCS5yZWdzCQk9IFMzQ19WQV9VQVJUMSwKLQkJLmJhc2VfaXJxCT0gSVJRX1MzQ1VBUlRfQkFTRTEsCi0JCS5wYXJlbnRfaXJxCT0gSVJRX1VBUlQxLAotCX0sCi0JWzJdID0gewotCQkucmVncwkJPSBTM0NfVkFfVUFSVDIsCi0JCS5iYXNlX2lycQk9IElSUV9TM0NVQVJUX0JBU0UyLAotCQkucGFyZW50X2lycQk9IElSUV9VQVJUMiwKLQl9LAotCVszXSA9IHsKLQkJLnJlZ3MJCT0gUzNDX1ZBX1VBUlQzLAotCQkuYmFzZV9pcnEJPSBJUlFfUzNDVUFSVF9CQVNFMywKLQkJLnBhcmVudF9pcnEJPSBJUlFfVUFSVDMsCi0JfSwKLX07Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICpzM2NfaXJxX3VhcnRfYmFzZSh1bnNpZ25lZCBpbnQgaXJxKQotewotCXN0cnVjdCB1YXJ0X2lycSAqdWlycSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7Ci0JcmV0dXJuIHVpcnEtPnJlZ3M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHMzY19pcnFfdWFydF9iaXQodW5zaWduZWQgaW50IGlycSkKLXsKLQlyZXR1cm4gaXJxICYgMzsKLX0KLQotLyogVUFSVCBpbnRlcnJ1cHQgcmVnaXN0ZXJzLCBub3Qgd29ydGggYWRkaW5nIHRvIHNlcGVyYXRlIGluY2x1ZGUgaGVhZGVyICovCi0KLXN0YXRpYyB2b2lkIHMzY19pcnFfdWFydF9tYXNrKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jdm9pZCBfX2lvbWVtICpyZWdzID0gczNjX2lycV91YXJ0X2Jhc2UoaXJxKTsKLQl1bnNpZ25lZCBpbnQgYml0ID0gczNjX2lycV91YXJ0X2JpdChpcnEpOwotCXUzMiByZWc7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChyZWdzICsgUzNDNjRYWF9VSU5UTSk7Ci0JcmVnIHw9ICgxIDw8IGJpdCk7Ci0JX19yYXdfd3JpdGVsKHJlZywgcmVncyArIFMzQzY0WFhfVUlOVE0pOwotfQotCi1zdGF0aWMgdm9pZCBzM2NfaXJxX3VhcnRfbWFza2Fjayh1bnNpZ25lZCBpbnQgaXJxKQotewotCXZvaWQgX19pb21lbSAqcmVncyA9IHMzY19pcnFfdWFydF9iYXNlKGlycSk7Ci0JdW5zaWduZWQgaW50IGJpdCA9IHMzY19pcnFfdWFydF9iaXQoaXJxKTsKLQl1MzIgcmVnOwotCi0JcmVnID0gX19yYXdfcmVhZGwocmVncyArIFMzQzY0WFhfVUlOVE0pOwotCXJlZyB8PSAoMSA8PCBiaXQpOwotCV9fcmF3X3dyaXRlbChyZWcsIHJlZ3MgKyBTM0M2NFhYX1VJTlRNKTsKLQlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIHJlZ3MgKyBTM0M2NFhYX1VJTlRQKTsKLX0KLQotc3RhdGljIHZvaWQgczNjX2lycV91YXJ0X3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQotewotCXZvaWQgX19pb21lbSAqcmVncyA9IHMzY19pcnFfdWFydF9iYXNlKGlycSk7Ci0JdW5zaWduZWQgaW50IGJpdCA9IHMzY19pcnFfdWFydF9iaXQoaXJxKTsKLQl1MzIgcmVnOwotCi0JcmVnID0gX19yYXdfcmVhZGwocmVncyArIFMzQzY0WFhfVUlOVE0pOwotCXJlZyAmPSB+KDEgPDwgYml0KTsKLQlfX3Jhd193cml0ZWwocmVnLCByZWdzICsgUzNDNjRYWF9VSU5UTSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzY19pcnFfdWFydF9hY2sodW5zaWduZWQgaW50IGlycSkKLXsKLQl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzM2NfaXJxX3VhcnRfYmFzZShpcnEpOwotCXVuc2lnbmVkIGludCBiaXQgPSBzM2NfaXJxX3VhcnRfYml0KGlycSk7Ci0KLQlfX3Jhd193cml0ZWwoMSA8PCBiaXQsIHJlZ3MgKyBTM0M2NFhYX1VJTlRQKTsKLX0KLQotc3RhdGljIHZvaWQgczNjX2lycV9kZW11eF91YXJ0KHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKLXsKLQlzdHJ1Y3QgdWFydF9pcnEgKnVpcnEgPSAmdWFydF9pcnFzW2lycSAtIElSUV9VQVJUMF07Ci0JdTMyIHBlbmQgPSBfX3Jhd19yZWFkbCh1aXJxLT5yZWdzICsgUzNDNjRYWF9VSU5UUCk7Ci0JaW50IGJhc2UgPSB1aXJxLT5iYXNlX2lycTsKLQotCWlmIChwZW5kICYgKDEgPDwgMCkpCi0JCWdlbmVyaWNfaGFuZGxlX2lycShiYXNlKTsKLQlpZiAocGVuZCAmICgxIDw8IDEpKQotCQlnZW5lcmljX2hhbmRsZV9pcnEoYmFzZSArIDEpOwotCWlmIChwZW5kICYgKDEgPDwgMikpCi0JCWdlbmVyaWNfaGFuZGxlX2lycShiYXNlICsgMik7Ci0JaWYgKHBlbmQgJiAoMSA8PCAzKSkKLQkJZ2VuZXJpY19oYW5kbGVfaXJxKGJhc2UgKyAzKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzM2NfaXJxX3VhcnQgPSB7Ci0JLm5hbWUJCT0gInMzYy11YXJ0IiwKLQkubWFzawkJPSBzM2NfaXJxX3VhcnRfbWFzaywKLQkudW5tYXNrCQk9IHMzY19pcnFfdWFydF91bm1hc2ssCi0JLm1hc2tfYWNrCT0gczNjX2lycV91YXJ0X21hc2thY2ssCi0JLmFjawkJPSBzM2NfaXJxX3VhcnRfYWNrLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0IHMzYzY0eHhfdWFydF9pcnEoc3RydWN0IHVhcnRfaXJxICp1aXJxKQotewotCXZvaWQgX19pb21lbSAqcmVnX2Jhc2UgPSB1aXJxLT5yZWdzOwotCXVuc2lnbmVkIGludCBpcnE7Ci0JaW50IG9mZnM7Ci0KLQkvKiBtYXNrIGFsbCBpbnRlcnJ1cHRzIGF0IHRoZSBzdGFydC4gKi8KLQlfX3Jhd193cml0ZWwoMHhmLCByZWdfYmFzZSArIFMzQzY0WFhfVUlOVE0pOwotCi0JZm9yIChvZmZzID0gMDsgb2ZmcyA8IDM7IG9mZnMrKykgewotCQlpcnEgPSB1aXJxLT5iYXNlX2lycSArIG9mZnM7Ci0KLQkJc2V0X2lycV9jaGlwKGlycSwgJnMzY19pcnFfdWFydCk7Ci0JCXNldF9pcnFfY2hpcF9kYXRhKGlycSwgdWlycSk7Ci0JCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwotCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7Ci0JfQotCi0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIodWlycS0+cGFyZW50X2lycSwgczNjX2lycV9kZW11eF91YXJ0KTsKLX0KLQotdm9pZCBfX2luaXQgczNjNjR4eF9pbml0X2lycSh1MzIgdmljMF92YWxpZCwgdTMyIHZpYzFfdmFsaWQpCi17Ci0JaW50IHVhcnQsIGlycTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogaW5pdGlhbGlzaW5nIGludGVycnVwdHNcbiIsIF9fZnVuY19fKTsKLQotCS8qIGluaXRpYWxpc2UgdGhlIHBhaXIgb2YgVklDcyAqLwotCXZpY19pbml0KFMzQ19WQV9WSUMwLCBTM0NfVklDMF9CQVNFLCB2aWMwX3ZhbGlkLCAwKTsKLQl2aWNfaW5pdChTM0NfVkFfVklDMSwgUzNDX1ZJQzFfQkFTRSwgdmljMV92YWxpZCwgMCk7Ci0KLQkvKiBhZGQgdGhlIHRpbWVyIHN1Yi1pcnFzICovCi0KLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfVElNRVIwX1ZJQywgczNjX2lycV9kZW11eF90aW1lcjApOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9USU1FUjFfVklDLCBzM2NfaXJxX2RlbXV4X3RpbWVyMSk7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX1RJTUVSMl9WSUMsIHMzY19pcnFfZGVtdXhfdGltZXIyKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfVElNRVIzX1ZJQywgczNjX2lycV9kZW11eF90aW1lcjMpOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9USU1FUjRfVklDLCBzM2NfaXJxX2RlbXV4X3RpbWVyNCk7Ci0KLQlmb3IgKGlycSA9IElSUV9USU1FUjA7IGlycSA8PSBJUlFfVElNRVI0OyBpcnErKykgewotCQlzZXRfaXJxX2NoaXAoaXJxLCAmczNjX2lycV90aW1lcik7Ci0JCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwotCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7Ci0JfQotCi0JZm9yICh1YXJ0ID0gMDsgdWFydCA8IEFSUkFZX1NJWkUodWFydF9pcnFzKTsgdWFydCsrKQotCQlzM2M2NHh4X3VhcnRfaXJxKCZ1YXJ0X2lycXNbdWFydF0pOwotfQotCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9wbS5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3BtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3NjMyZmMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3BtLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzMgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3BtLmMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICoKLSAqIFMzQzY0WFggQ1BVIFBNIHN1cHBvcnQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLQotI2luY2x1ZGUgPG1hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L3BtLmg+Ci0jaW5jbHVkZSA8cGxhdC9yZWdzLXN5cy5oPgotI2luY2x1ZGUgPHBsYXQvcmVncy1ncGlvLmg+Ci0jaW5jbHVkZSA8cGxhdC9yZWdzLWNsb2NrLmg+Ci0jaW5jbHVkZSA8cGxhdC9yZWdzLXN5c2Nvbi1wb3dlci5oPgotI2luY2x1ZGUgPHBsYXQvcmVncy1ncGlvLW1lbXBvcnQuaD4KLQotI2lmZGVmIENPTkZJR19TM0NfUE1fREVCVUdfTEVEX1NNREsKLSNpbmNsdWRlIDxwbGF0L2dwaW8tYmFuay1uLmg+Ci0KLXZvaWQgczNjX3BtX2RlYnVnX3NtZGtsZWQodTMyIHNldCwgdTMyIGNsZWFyKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIHJlZzsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlyZWcgPSBfX3Jhd19yZWFkbChTM0M2NFhYX0dQTkNPTik7Ci0JcmVnICY9IH4oUzNDNjRYWF9HUE5fQ09OTUFTSygxMikgfCBTM0M2NFhYX0dQTl9DT05NQVNLKDEzKSB8Ci0JCSBTM0M2NFhYX0dQTl9DT05NQVNLKDE0KSB8IFMzQzY0WFhfR1BOX0NPTk1BU0soMTUpKTsKLQlyZWcgfD0gUzNDNjRYWF9HUE5fT1VUUFVUKDEyKSB8IFMzQzY0WFhfR1BOX09VVFBVVCgxMykgfAotCSAgICAgICBTM0M2NFhYX0dQTl9PVVRQVVQoMTQpIHwgUzNDNjRYWF9HUE5fT1VUUFVUKDE1KTsKLQlfX3Jhd193cml0ZWwocmVnLCBTM0M2NFhYX0dQTkNPTik7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChTM0M2NFhYX0dQTkRBVCk7Ci0JcmVnICY9IH4oY2xlYXIgPDwgMTIpOwotCXJlZyB8PSBzZXQgPDwgMTI7Ci0JX19yYXdfd3JpdGVsKHJlZywgUzNDNjRYWF9HUE5EQVQpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBjb3JlX3NhdmVbXSA9IHsKLQlTQVZFX0lURU0oUzNDX0FQTExfTE9DSyksCi0JU0FWRV9JVEVNKFMzQ19NUExMX0xPQ0spLAotCVNBVkVfSVRFTShTM0NfRVBMTF9MT0NLKSwKLQlTQVZFX0lURU0oUzNDX0NMS19TUkMpLAotCVNBVkVfSVRFTShTM0NfQ0xLX0RJVjApLAotCVNBVkVfSVRFTShTM0NfQ0xLX0RJVjEpLAotCVNBVkVfSVRFTShTM0NfQ0xLX0RJVjIpLAotCVNBVkVfSVRFTShTM0NfQ0xLX09VVCksCi0JU0FWRV9JVEVNKFMzQ19IQ0xLX0dBVEUpLAotCVNBVkVfSVRFTShTM0NfUENMS19HQVRFKSwKLQlTQVZFX0lURU0oUzNDX1NDTEtfR0FURSksCi0JU0FWRV9JVEVNKFMzQ19NRU0wX0dBVEUpLAotCi0JU0FWRV9JVEVNKFMzQ19FUExMX0NPTjEpLAotCVNBVkVfSVRFTShTM0NfRVBMTF9DT04wKSwKLQotCVNBVkVfSVRFTShTM0M2NFhYX01FTTBEUlZDT04pLAotCVNBVkVfSVRFTShTM0M2NFhYX01FTTFEUlZDT04pLAotCi0jaWZuZGVmIENPTkZJR19DUFVfRlJFUQotCVNBVkVfSVRFTShTM0NfQVBMTF9DT04pLAotCVNBVkVfSVRFTShTM0NfTVBMTF9DT04pLAotI2VuZGlmCi19OwotCi1zdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgbWlzY19zYXZlW10gPSB7Ci0JU0FWRV9JVEVNKFMzQzY0WFhfQUhCX0NPTjApLAotCVNBVkVfSVRFTShTM0M2NFhYX0FIQl9DT04xKSwKLQlTQVZFX0lURU0oUzNDNjRYWF9BSEJfQ09OMiksCi0JCi0JU0FWRV9JVEVNKFMzQzY0WFhfU1BDT04pLAotCi0JU0FWRV9JVEVNKFMzQzY0WFhfTUVNMENPTlNUT1ApLAotCVNBVkVfSVRFTShTM0M2NFhYX01FTTFDT05TVE9QKSwKLQlTQVZFX0lURU0oUzNDNjRYWF9NRU0wQ09OU0xQMCksCi0JU0FWRV9JVEVNKFMzQzY0WFhfTUVNMENPTlNMUDEpLAotCVNBVkVfSVRFTShTM0M2NFhYX01FTTFDT05TTFApLAotfTsKLQotdm9pZCBzM2NfcG1fY29uZmlndXJlX2V4dGludCh2b2lkKQotewotCV9fcmF3X3dyaXRlbChzM2NfaXJxd2FrZV9laW50bWFzaywgUzNDNjRYWF9FSU5UX01BU0spOwotfQotCi12b2lkIHMzY19wbV9yZXN0b3JlX2NvcmUodm9pZCkKLXsKLQlfX3Jhd193cml0ZWwoMCwgUzNDNjRYWF9FSU5UX01BU0spOwotCi0JczNjX3BtX2RlYnVnX3NtZGtsZWQoMSA8PCAyLCAwKTsKLQotCXMzY19wbV9kb19yZXN0b3JlX2NvcmUoY29yZV9zYXZlLCBBUlJBWV9TSVpFKGNvcmVfc2F2ZSkpOwotCXMzY19wbV9kb19yZXN0b3JlKG1pc2Nfc2F2ZSwgQVJSQVlfU0laRShtaXNjX3NhdmUpKTsKLX0KLQotdm9pZCBzM2NfcG1fc2F2ZV9jb3JlKHZvaWQpCi17Ci0JczNjX3BtX2RvX3NhdmUobWlzY19zYXZlLCBBUlJBWV9TSVpFKG1pc2Nfc2F2ZSkpOwotCXMzY19wbV9kb19zYXZlKGNvcmVfc2F2ZSwgQVJSQVlfU0laRShjb3JlX3NhdmUpKTsKLX0KLQotLyogc2luY2UgYm90aCBzM2M2NDAwIGFuZCBzM2M2NDEwIHNoYXJlIHRoZSBzYW1lIHNsZWVwIHBtIGNhbGxzLCB3ZQotICogcHV0IHRoZSBwZXItY3B1IGNvZGUgaW4gaGVyZSB1bnRpbCBhbnkgbmV3IGNwdSBjb21lcyBhbG9uZyBhbmQgY2hhbmdlcwotICogdGhpcy4KLSAqLwotCi1zdGF0aWMgdm9pZCBzM2M2NHh4X2NwdV9zdXNwZW5kKHZvaWQpCi17Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQkvKiBzZXQgb3VyIHN0YW5kYnkgbWV0aG9kIHRvIHNsZWVwICovCi0KLQl0bXAgPSBfX3Jhd19yZWFkbChTM0M2NFhYX1BXUl9DRkcpOwotCXRtcCAmPSB+UzNDNjRYWF9QV1JDRkdfQ0ZHX1dGSV9NQVNLOwotCXRtcCB8PSBTM0M2NFhYX1BXUkNGR19DRkdfV0ZJX1NMRUVQOwotCV9fcmF3X3dyaXRlbCh0bXAsIFMzQzY0WFhfUFdSX0NGRyk7Ci0KLQkvKiBjbGVhciBhbnkgb2xkIHdha2V1cCAqLwotCi0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFMzQzY0WFhfV0FLRVVQX1NUQVQpLAotCQkgICAgIFMzQzY0WFhfV0FLRVVQX1NUQVQpOwotCi0JLyogc2V0IHRoZSBMRUQgc3RhdGUgdG8gMDExMCBvdmVyIHNsZWVwICovCi0JczNjX3BtX2RlYnVnX3NtZGtsZWQoMyA8PCAxLCAweGYpOwotCi0JLyogaXNzdWUgdGhlIHN0YW5kYnkgc2lnbmFsIGludG8gdGhlIHBtIHVuaXQuIE5vdGUsIHdlCi0JICogaXNzdWUgYSB3cml0ZS1idWZmZXIgZHJhaW4ganVzdCBpbiBjYXNlICovCi0KLQl0bXAgPSAwOwotCi0JYXNtKCJiIDFmXG5cdCIKLQkgICAgIi5hbGlnbiA1XG5cdCIKLQkgICAgIjE6XG5cdCIKLQkgICAgIm1jciBwMTUsIDAsICUwLCBjNywgYzEwLCA1XG5cdCIKLQkgICAgIm1jciBwMTUsIDAsICUwLCBjNywgYzEwLCA0XG5cdCIKLQkgICAgIm1jciBwMTUsIDAsICUwLCBjNywgYzAsIDQiIDo6ICJyIiAodG1wKSk7Ci0KLQkvKiB3ZSBzaG91bGQgbmV2ZXIgZ2V0IHBhc3QgaGVyZSAqLwotCi0JcGFuaWMoInNsZWVwIHJlc3VtZWQgdG8gb3JpZ2luYXRvcj8iKTsKLX0KLQotc3RhdGljIHZvaWQgczNjNjR4eF9wbV9wcmVwYXJlKHZvaWQpCi17Ci0JLyogc3RvcmUgYWRkcmVzcyBvZiByZXN1bWUuICovCi0JX19yYXdfd3JpdGVsKHZpcnRfdG9fcGh5cyhzM2NfY3B1X3Jlc3VtZSksIFMzQzY0WFhfSU5GT1JNMCk7Ci0KLQkvKiBlbnN1cmUgcHJldmlvdXMgd2FrZXVwIHN0YXRlIGlzIGNsZWFyZWQgYmVmb3JlIHNsZWVwaW5nICovCi0JX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFMzQzY0WFhfV0FLRVVQX1NUQVQpLCBTM0M2NFhYX1dBS0VVUF9TVEFUKTsKLX0KLQotc3RhdGljIGludCBzM2M2NHh4X3BtX2luaXQodm9pZCkKLXsKLQlwbV9jcHVfcHJlcCA9IHMzYzY0eHhfcG1fcHJlcGFyZTsKLQlwbV9jcHVfc2xlZXAgPSBzM2M2NHh4X2NwdV9zdXNwZW5kOwotCXBtX3VhcnRfdWRpdnNsb3QgPSAxOwotCXJldHVybiAwOwotfQotCi1hcmNoX2luaXRjYWxsKHMzYzY0eHhfcG1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvczNjNjQwMC1jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtY2xvY2suYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmZkNTZkZS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvczNjNjQwMC1jbG9jay5jCisrKyAvZGV2L251bGwKQEAgLTEsNzU4ICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zM2M2NDAwLWNsb2NrLmMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICoKLSAqIFMzQzY0MDAgYmFzZWQgY29tbW9uIGNsb2NrIHN1cHBvcnQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLSNpbmNsdWRlIDxsaW51eC9jbGsuaD4KLSNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPG1hY2gvbWFwLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLmg+Ci0KLSNpbmNsdWRlIDxwbGF0L3JlZ3MtY2xvY2suaD4KLSNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+Ci0jaW5jbHVkZSA8cGxhdC9jcHUuaD4KLSNpbmNsdWRlIDxwbGF0L3BsbC5oPgotCi0vKiBmaW5fYXBsbCwgZmluX21wbGwgYW5kIGZpbl9lcGxsIGFyZSBhbGwgdGhlIHNhbWUgY2xvY2ssIHdoaWNoIHdlIGNhbGwKLSAqIGV4dF94dGFsX211eCBmb3Igd2FudCBvZiBhbiBhY3R1YWwgbmFtZSBmcm9tIHRoZSBtYW51YWwuCi0qLwotCi1zdGF0aWMgc3RydWN0IGNsayBjbGtfZXh0X3h0YWxfbXV4ID0gewotCS5uYW1lCQk9ICJleHRfeHRhbCIsCi0JLmlkCQk9IC0xLAotfTsKLQotI2RlZmluZSBjbGtfZmluX2FwbGwgY2xrX2V4dF94dGFsX211eAotI2RlZmluZSBjbGtfZmluX21wbGwgY2xrX2V4dF94dGFsX211eAotI2RlZmluZSBjbGtfZmluX2VwbGwgY2xrX2V4dF94dGFsX211eAotCi0jZGVmaW5lIGNsa19mb3V0X21wbGwJY2xrX21wbGwKLSNkZWZpbmUgY2xrX2ZvdXRfZXBsbAljbGtfZXBsbAotCi1zdHJ1Y3QgY2xrX3NvdXJjZXMgewotCXVuc2lnbmVkIGludAlucl9zb3VyY2VzOwotCXN0cnVjdCBjbGsJKipzb3VyY2VzOwotfTsKLQotc3RydWN0IGNsa3NyY19jbGsgewotCXN0cnVjdCBjbGsJCWNsazsKLQl1bnNpZ25lZCBpbnQJCW1hc2s7Ci0JdW5zaWduZWQgaW50CQlzaGlmdDsKLQotCXN0cnVjdCBjbGtfc291cmNlcwkqc291cmNlczsKLQotCXVuc2lnbmVkIGludAkJZGl2aWRlcl9zaGlmdDsKLQl2b2lkIF9faW9tZW0JCSpyZWdfZGl2aWRlcjsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19mb3V0X2FwbGwgPSB7Ci0JLm5hbWUJCT0gImZvdXRfYXBsbCIsCi0JLmlkCQk9IC0xLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgKmNsa19zcmNfYXBsbF9saXN0W10gPSB7Ci0JWzBdID0gJmNsa19maW5fYXBsbCwKLQlbMV0gPSAmY2xrX2ZvdXRfYXBsbCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX3NvdXJjZXMgY2xrX3NyY19hcGxsID0gewotCS5zb3VyY2VzCT0gY2xrX3NyY19hcGxsX2xpc3QsCi0JLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa19zcmNfYXBsbF9saXN0KSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfbW91dF9hcGxsID0gewotCS5jbGsJPSB7Ci0JCS5uYW1lCQk9ICJtb3V0X2FwbGwiLAotCQkuaWQJCT0gLTEsCi0JfSwKLQkuc2hpZnQJCT0gUzNDNjQwMF9DTEtTUkNfQVBMTF9NT1VUX1NISUZULAotCS5tYXNrCQk9IFMzQzY0MDBfQ0xLU1JDX0FQTExfTU9VVCwKLQkuc291cmNlcwk9ICZjbGtfc3JjX2FwbGwsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqY2xrX3NyY19lcGxsX2xpc3RbXSA9IHsKLQlbMF0gPSAmY2xrX2Zpbl9lcGxsLAotCVsxXSA9ICZjbGtfZm91dF9lcGxsLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtfc3JjX2VwbGwgPSB7Ci0JLnNvdXJjZXMJPSBjbGtfc3JjX2VwbGxfbGlzdCwKLQkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrX3NyY19lcGxsX2xpc3QpLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tb3V0X2VwbGwgPSB7Ci0JLmNsawk9IHsKLQkJLm5hbWUJCT0gIm1vdXRfZXBsbCIsCi0JCS5pZAkJPSAtMSwKLQl9LAotCS5zaGlmdAkJPSBTM0M2NDAwX0NMS1NSQ19FUExMX01PVVRfU0hJRlQsCi0JLm1hc2sJCT0gUzNDNjQwMF9DTEtTUkNfRVBMTF9NT1VULAotCS5zb3VyY2VzCT0gJmNsa19zcmNfZXBsbCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfc3JjX21wbGxfbGlzdFtdID0gewotCVswXSA9ICZjbGtfZmluX21wbGwsCi0JWzFdID0gJmNsa19mb3V0X21wbGwsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa19zb3VyY2VzIGNsa19zcmNfbXBsbCA9IHsKLQkuc291cmNlcwk9IGNsa19zcmNfbXBsbF9saXN0LAotCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtfc3JjX21wbGxfbGlzdCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX21vdXRfbXBsbCA9IHsKLQkuY2xrID0gewotCQkubmFtZQkJPSAibW91dF9tcGxsIiwKLQkJLmlkCQk9IC0xLAotCX0sCi0JLnNoaWZ0CQk9IFMzQzY0MDBfQ0xLU1JDX01QTExfTU9VVF9TSElGVCwKLQkubWFzawkJPSBTM0M2NDAwX0NMS1NSQ19NUExMX01PVVQsCi0JLnNvdXJjZXMJPSAmY2xrX3NyY19tcGxsLAotfTsKLQotc3RhdGljIHVuc2lnbmVkIGludCBhcm1jbGtfbWFzazsKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjNjR4eF9jbGtfYXJtX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKLXsKLQl1bnNpZ25lZCBsb25nIHJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCXUzMiBjbGtkaXY7Ci0KLQkvKiBkaXZpc29yIG1hc2sgc3RhcnRzIGF0IGJpdDAsIHNvIG5vIG5lZWQgdG8gc2hpZnQgKi8KLQljbGtkaXYgPSBfX3Jhd19yZWFkbChTM0NfQ0xLX0RJVjApICYgYXJtY2xrX21hc2s7Ci0KLQlyZXR1cm4gcmF0ZSAvIChjbGtkaXYgKyAxKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjNjR4eF9jbGtfYXJtX3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLAotCQkJCQkJdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGxvbmcgcGFyZW50ID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQl1MzIgZGl2OwotCi0JaWYgKHBhcmVudCA8IHJhdGUpCi0JCXJldHVybiBwYXJlbnQ7Ci0KLQlkaXYgPSAocGFyZW50IC8gcmF0ZSkgLSAxOwotCWlmIChkaXYgPiBhcm1jbGtfbWFzaykKLQkJZGl2ID0gYXJtY2xrX21hc2s7Ci0KLQlyZXR1cm4gcGFyZW50IC8gKGRpdiArIDEpOwotfQotCi1zdGF0aWMgaW50IHMzYzY0eHhfY2xrX2FybV9zZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHBhcmVudCA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7Ci0JdTMyIGRpdjsKLQl1MzIgdmFsOwotCi0JaWYgKHJhdGUgPCBwYXJlbnQgLyAoYXJtY2xrX21hc2sgKyAxKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyYXRlID0gY2xrX3JvdW5kX3JhdGUoY2xrLCByYXRlKTsKLQlkaXYgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gcmF0ZTsKLQotCXZhbCA9IF9fcmF3X3JlYWRsKFMzQ19DTEtfRElWMCk7Ci0JdmFsICY9IH5hcm1jbGtfbWFzazsKLQl2YWwgfD0gKGRpdiAtIDEpOwotCV9fcmF3X3dyaXRlbCh2YWwsIFMzQ19DTEtfRElWMCk7Ci0KLQlyZXR1cm4gMDsKLQotfQotCi1zdGF0aWMgc3RydWN0IGNsayBjbGtfYXJtID0gewotCS5uYW1lCQk9ICJhcm1jbGsiLAotCS5pZAkJPSAtMSwKLQkucGFyZW50CQk9ICZjbGtfbW91dF9hcGxsLmNsaywKLQkuZ2V0X3JhdGUJPSBzM2M2NHh4X2Nsa19hcm1fZ2V0X3JhdGUsCi0JLnNldF9yYXRlCT0gczNjNjR4eF9jbGtfYXJtX3NldF9yYXRlLAotCS5yb3VuZF9yYXRlCT0gczNjNjR4eF9jbGtfYXJtX3JvdW5kX3JhdGUsCi19OwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzM2M2NHh4X2Nsa19kb3V0bXBsbF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCi17Ci0JdW5zaWduZWQgbG9uZyByYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogcGFyZW50IGlzICVsZFxuIiwgX19mdW5jX18sIHJhdGUpOwotCi0JaWYgKF9fcmF3X3JlYWRsKFMzQ19DTEtfRElWMCkgJiBTM0M2NDAwX0NMS0RJVjBfTVBMTF9NQVNLKQotCQlyYXRlIC89IDI7Ci0KLQlyZXR1cm4gcmF0ZTsKLX0KLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2RvdXRfbXBsbCA9IHsKLQkubmFtZQkJPSAiZG91dF9tcGxsIiwKLQkuaWQJCT0gLTEsCi0JLnBhcmVudAkJPSAmY2xrX21vdXRfbXBsbC5jbGssCi0JLmdldF9yYXRlCT0gczNjNjR4eF9jbGtfZG91dG1wbGxfZ2V0X3JhdGUsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqY2xrc2V0X3NwaV9tbWNfbGlzdFtdID0gewotCSZjbGtfbW91dF9lcGxsLmNsaywKLQkmY2xrX2RvdXRfbXBsbCwKLQkmY2xrX2Zpbl9lcGxsLAotCSZjbGtfMjdtLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtzZXRfc3BpX21tYyA9IHsKLQkuc291cmNlcwk9IGNsa3NldF9zcGlfbW1jX2xpc3QsCi0JLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa3NldF9zcGlfbW1jX2xpc3QpLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NldF9pcmRhX2xpc3RbXSA9IHsKLQkmY2xrX21vdXRfZXBsbC5jbGssCi0JJmNsa19kb3V0X21wbGwsCi0JTlVMTCwKLQkmY2xrXzI3bSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX3NvdXJjZXMgY2xrc2V0X2lyZGEgPSB7Ci0JLnNvdXJjZXMJPSBjbGtzZXRfaXJkYV9saXN0LAotCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtzZXRfaXJkYV9saXN0KSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzZXRfdWFydF9saXN0W10gPSB7Ci0JJmNsa19tb3V0X2VwbGwuY2xrLAotCSZjbGtfZG91dF9tcGxsLAotCU5VTEwsCi0JTlVMTAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtzZXRfdWFydCA9IHsKLQkuc291cmNlcwk9IGNsa3NldF91YXJ0X2xpc3QsCi0JLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa3NldF91YXJ0X2xpc3QpLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NldF91aG9zdF9saXN0W10gPSB7Ci0JJmNsa180OG0sCi0JJmNsa19tb3V0X2VwbGwuY2xrLAotCSZjbGtfZG91dF9tcGxsLAotCSZjbGtfZmluX2VwbGwsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa19zb3VyY2VzIGNsa3NldF91aG9zdCA9IHsKLQkuc291cmNlcwk9IGNsa3NldF91aG9zdF9saXN0LAotCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtzZXRfdWhvc3RfbGlzdCksCi19OwotCi0KLS8qIFRoZSBwZXJpcGhlcmFsIGNsb2NrcyBhcmUgYWxsIGNvbnRyb2xsZWQgdmlhIGNsb2Nrc291cmNlIGZvbGxvd2VkCi0gKiBieSBhbiBvcHRpb25hbCBkaXZpZGVyIGFuZCBnYXRlIHN0YWdlLiBXZSBjdXJyZW50bHkgcm9sbCB0aGlzIGludG8KLSAqIG9uZSBjbG9jayB3aGljaCBoaWRlcyB0aGUgaW50ZXJtZWRpYXRlIGNsb2NrIGZyb20gdGhlIG11eC4KLSAqCi0gKiBOb3RlLCB0aGUgSlBFRyBjbG9jayBjYW4gb25seSBiZSBhbiBldmVuIGRpdmlkZXIuLi4KLSAqCi0gKiBUaGUgc2NhbGVyIGFuZCBMQ0QgY2xvY2tzIGRlcGVuZCBvbiB0aGUgUzNDNjRYWCB2ZXJzaW9uLCBhbmQgYWxzbwotICogaGF2ZSBhIGNvbW1vbiBwYXJlbnQgZGl2aXNvciBzbyBhcmUgbm90IGluY2x1ZGVkIGhlcmUuCi0gKi8KLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrc3JjX2NsayAqdG9fY2xrc3JjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGNsaywgc3RydWN0IGNsa3NyY19jbGssIGNsayk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHMzYzY0eHhfZ2V0cmF0ZV9jbGtzcmMoc3RydWN0IGNsayAqY2xrKQotewotCXN0cnVjdCBjbGtzcmNfY2xrICpzY2xrID0gdG9fY2xrc3JjKGNsayk7Ci0JdW5zaWduZWQgbG9uZyByYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQl1MzIgY2xrZGl2ID0gX19yYXdfcmVhZGwoc2Nsay0+cmVnX2RpdmlkZXIpOwotCi0JY2xrZGl2ID4+PSBzY2xrLT5kaXZpZGVyX3NoaWZ0OwotCWNsa2RpdiAmPSAweGY7Ci0JY2xrZGl2Kys7Ci0KLQlyYXRlIC89IGNsa2RpdjsKLQlyZXR1cm4gcmF0ZTsKLX0KLQotc3RhdGljIGludCBzM2M2NHh4X3NldHJhdGVfY2xrc3JjKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXN0cnVjdCBjbGtzcmNfY2xrICpzY2xrID0gdG9fY2xrc3JjKGNsayk7Ci0Jdm9pZCBfX2lvbWVtICpyZWcgPSBzY2xrLT5yZWdfZGl2aWRlcjsKLQl1bnNpZ25lZCBpbnQgZGl2OwotCXUzMiB2YWw7Ci0KLQlyYXRlID0gY2xrX3JvdW5kX3JhdGUoY2xrLCByYXRlKTsKLQlkaXYgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gcmF0ZTsKLQlpZiAoZGl2ID4gMTYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdmFsID0gX19yYXdfcmVhZGwocmVnKTsKLQl2YWwgJj0gfigweGYgPDwgc2Nsay0+ZGl2aWRlcl9zaGlmdCk7Ci0JdmFsIHw9IChkaXYgLSAxKSA8PCBzY2xrLT5kaXZpZGVyX3NoaWZ0OwotCV9fcmF3X3dyaXRlbCh2YWwsIHJlZyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzM2M2NHh4X3NldHBhcmVudF9jbGtzcmMoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCi17Ci0Jc3RydWN0IGNsa3NyY19jbGsgKnNjbGsgPSB0b19jbGtzcmMoY2xrKTsKLQlzdHJ1Y3QgY2xrX3NvdXJjZXMgKnNyY3MgPSBzY2xrLT5zb3VyY2VzOwotCXUzMiBjbGtzcmMgPSBfX3Jhd19yZWFkbChTM0NfQ0xLX1NSQyk7Ci0JaW50IHNyY19uciA9IC0xOwotCWludCBwdHI7Ci0KLQlmb3IgKHB0ciA9IDA7IHB0ciA8IHNyY3MtPm5yX3NvdXJjZXM7IHB0cisrKQotCQlpZiAoc3Jjcy0+c291cmNlc1twdHJdID09IHBhcmVudCkgewotCQkJc3JjX25yID0gcHRyOwotCQkJYnJlYWs7Ci0JCX0KLQotCWlmIChzcmNfbnIgPj0gMCkgewotCQljbGtzcmMgJj0gfnNjbGstPm1hc2s7Ci0JCWNsa3NyYyB8PSBzcmNfbnIgPDwgc2Nsay0+c2hpZnQ7Ci0KLQkJX19yYXdfd3JpdGVsKGNsa3NyYywgUzNDX0NMS19TUkMpOwotCi0JCWNsay0+cGFyZW50ID0gcGFyZW50OwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjNjR4eF9yb3VuZHJhdGVfY2xrc3JjKHN0cnVjdCBjbGsgKmNsaywKLQkJCQkJICAgICAgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXVuc2lnbmVkIGxvbmcgcGFyZW50X3JhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOwotCWludCBkaXY7Ci0KLQlpZiAocmF0ZSA+IHBhcmVudF9yYXRlKQotCQlyYXRlID0gcGFyZW50X3JhdGU7Ci0JZWxzZSB7Ci0JCWRpdiA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKLQotCQlpZiAoZGl2ID09IDApCi0JCQlkaXYgPSAxOwotCQlpZiAoZGl2ID4gMTYpCi0JCQlkaXYgPSAxNjsKLQotCQlyYXRlID0gcGFyZW50X3JhdGUgLyBkaXY7Ci0JfQotCi0JcmV0dXJuIHJhdGU7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfbW1jMCA9IHsKLQkuY2xrCT0gewotCQkubmFtZQkJPSAibW1jX2J1cyIsCi0JCS5pZAkJPSAwLAotCQkuY3RybGJpdCAgICAgICAgPSBTM0NfQ0xLQ09OX1NDTEtfTU1DMCwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X3NjbGtfY3RybCwKLQkJLnNldF9wYXJlbnQJPSBzM2M2NHh4X3NldHBhcmVudF9jbGtzcmMsCi0JCS5nZXRfcmF0ZQk9IHMzYzY0eHhfZ2V0cmF0ZV9jbGtzcmMsCi0JCS5zZXRfcmF0ZQk9IHMzYzY0eHhfc2V0cmF0ZV9jbGtzcmMsCi0JCS5yb3VuZF9yYXRlCT0gczNjNjR4eF9yb3VuZHJhdGVfY2xrc3JjLAotCX0sCi0JLnNoaWZ0CQk9IFMzQzY0MDBfQ0xLU1JDX01NQzBfU0hJRlQsCi0JLm1hc2sJCT0gUzNDNjQwMF9DTEtTUkNfTU1DMF9NQVNLLAotCS5zb3VyY2VzCT0gJmNsa3NldF9zcGlfbW1jLAotCS5kaXZpZGVyX3NoaWZ0CT0gUzNDNjQwMF9DTEtESVYxX01NQzBfU0hJRlQsCi0JLnJlZ19kaXZpZGVyCT0gUzNDX0NMS19ESVYxLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tbWMxID0gewotCS5jbGsJPSB7Ci0JCS5uYW1lCQk9ICJtbWNfYnVzIiwKLQkJLmlkCQk9IDEsCi0JCS5jdHJsYml0ICAgICAgICA9IFMzQ19DTEtDT05fU0NMS19NTUMxLAotCQkuZW5hYmxlCQk9IHMzYzY0eHhfc2Nsa19jdHJsLAotCQkuZ2V0X3JhdGUJPSBzM2M2NHh4X2dldHJhdGVfY2xrc3JjLAotCQkuc2V0X3JhdGUJPSBzM2M2NHh4X3NldHJhdGVfY2xrc3JjLAotCQkuc2V0X3BhcmVudAk9IHMzYzY0eHhfc2V0cGFyZW50X2Nsa3NyYywKLQkJLnJvdW5kX3JhdGUJPSBzM2M2NHh4X3JvdW5kcmF0ZV9jbGtzcmMsCi0JfSwKLQkuc2hpZnQJCT0gUzNDNjQwMF9DTEtTUkNfTU1DMV9TSElGVCwKLQkubWFzawkJPSBTM0M2NDAwX0NMS1NSQ19NTUMxX01BU0ssCi0JLnNvdXJjZXMJPSAmY2xrc2V0X3NwaV9tbWMsCi0JLmRpdmlkZXJfc2hpZnQJPSBTM0M2NDAwX0NMS0RJVjFfTU1DMV9TSElGVCwKLQkucmVnX2RpdmlkZXIJPSBTM0NfQ0xLX0RJVjEsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX21tYzIgPSB7Ci0JLmNsawk9IHsKLQkJLm5hbWUJCT0gIm1tY19idXMiLAotCQkuaWQJCT0gMiwKLQkJLmN0cmxiaXQgICAgICAgID0gUzNDX0NMS0NPTl9TQ0xLX01NQzIsCi0JCS5lbmFibGUJCT0gczNjNjR4eF9zY2xrX2N0cmwsCi0JCS5nZXRfcmF0ZQk9IHMzYzY0eHhfZ2V0cmF0ZV9jbGtzcmMsCi0JCS5zZXRfcmF0ZQk9IHMzYzY0eHhfc2V0cmF0ZV9jbGtzcmMsCi0JCS5zZXRfcGFyZW50CT0gczNjNjR4eF9zZXRwYXJlbnRfY2xrc3JjLAotCQkucm91bmRfcmF0ZQk9IHMzYzY0eHhfcm91bmRyYXRlX2Nsa3NyYywKLQl9LAotCS5zaGlmdAkJPSBTM0M2NDAwX0NMS1NSQ19NTUMyX1NISUZULAotCS5tYXNrCQk9IFMzQzY0MDBfQ0xLU1JDX01NQzJfTUFTSywKLQkuc291cmNlcwk9ICZjbGtzZXRfc3BpX21tYywKLQkuZGl2aWRlcl9zaGlmdAk9IFMzQzY0MDBfQ0xLRElWMV9NTUMyX1NISUZULAotCS5yZWdfZGl2aWRlcgk9IFMzQ19DTEtfRElWMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfdXNiaG9zdCA9IHsKLQkuY2xrCT0gewotCQkubmFtZQkJPSAidXNiLWJ1cy1ob3N0IiwKLQkJLmlkCQk9IC0xLAotCQkuY3RybGJpdCAgICAgICAgPSBTM0NfQ0xLQ09OX1NDTEtfVUhPU1QsCi0JCS5lbmFibGUJCT0gczNjNjR4eF9zY2xrX2N0cmwsCi0JCS5zZXRfcGFyZW50CT0gczNjNjR4eF9zZXRwYXJlbnRfY2xrc3JjLAotCQkuZ2V0X3JhdGUJPSBzM2M2NHh4X2dldHJhdGVfY2xrc3JjLAotCQkuc2V0X3JhdGUJPSBzM2M2NHh4X3NldHJhdGVfY2xrc3JjLAotCQkucm91bmRfcmF0ZQk9IHMzYzY0eHhfcm91bmRyYXRlX2Nsa3NyYywKLQl9LAotCS5zaGlmdAkJPSBTM0M2NDAwX0NMS1NSQ19VSE9TVF9TSElGVCwKLQkubWFzawkJPSBTM0M2NDAwX0NMS1NSQ19VSE9TVF9NQVNLLAotCS5zb3VyY2VzCT0gJmNsa3NldF91aG9zdCwKLQkuZGl2aWRlcl9zaGlmdAk9IFMzQzY0MDBfQ0xLRElWMV9VSE9TVF9TSElGVCwKLQkucmVnX2RpdmlkZXIJPSBTM0NfQ0xLX0RJVjEsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX3VhcnRfdWNsazEgPSB7Ci0JLmNsawk9IHsKLQkJLm5hbWUJCT0gInVjbGsxIiwKLQkJLmlkCQk9IC0xLAotCQkuY3RybGJpdCAgICAgICAgPSBTM0NfQ0xLQ09OX1NDTEtfVUFSVCwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X3NjbGtfY3RybCwKLQkJLnNldF9wYXJlbnQJPSBzM2M2NHh4X3NldHBhcmVudF9jbGtzcmMsCi0JCS5nZXRfcmF0ZQk9IHMzYzY0eHhfZ2V0cmF0ZV9jbGtzcmMsCi0JCS5zZXRfcmF0ZQk9IHMzYzY0eHhfc2V0cmF0ZV9jbGtzcmMsCi0JCS5yb3VuZF9yYXRlCT0gczNjNjR4eF9yb3VuZHJhdGVfY2xrc3JjLAotCX0sCi0JLnNoaWZ0CQk9IFMzQzY0MDBfQ0xLU1JDX1VBUlRfU0hJRlQsCi0JLm1hc2sJCT0gUzNDNjQwMF9DTEtTUkNfVUFSVF9NQVNLLAotCS5zb3VyY2VzCT0gJmNsa3NldF91YXJ0LAotCS5kaXZpZGVyX3NoaWZ0CT0gUzNDNjQwMF9DTEtESVYyX1VBUlRfU0hJRlQsCi0JLnJlZ19kaXZpZGVyCT0gUzNDX0NMS19ESVYyLAotfTsKLQotLyogV2hlcmUgZG9lcyBVQ0xLMCBjb21lIGZyb20/ICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfc3BpMCA9IHsKLQkuY2xrCT0gewotCQkubmFtZQkJPSAic3BpLWJ1cyIsCi0JCS5pZAkJPSAwLAotCQkuY3RybGJpdCAgICAgICAgPSBTM0NfQ0xLQ09OX1NDTEtfU1BJMCwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X3NjbGtfY3RybCwKLQkJLnNldF9wYXJlbnQJPSBzM2M2NHh4X3NldHBhcmVudF9jbGtzcmMsCi0JCS5nZXRfcmF0ZQk9IHMzYzY0eHhfZ2V0cmF0ZV9jbGtzcmMsCi0JCS5zZXRfcmF0ZQk9IHMzYzY0eHhfc2V0cmF0ZV9jbGtzcmMsCi0JCS5yb3VuZF9yYXRlCT0gczNjNjR4eF9yb3VuZHJhdGVfY2xrc3JjLAotCX0sCi0JLnNoaWZ0CQk9IFMzQzY0MDBfQ0xLU1JDX1NQSTBfU0hJRlQsCi0JLm1hc2sJCT0gUzNDNjQwMF9DTEtTUkNfU1BJMF9NQVNLLAotCS5zb3VyY2VzCT0gJmNsa3NldF9zcGlfbW1jLAotCS5kaXZpZGVyX3NoaWZ0CT0gUzNDNjQwMF9DTEtESVYyX1NQSTBfU0hJRlQsCi0JLnJlZ19kaXZpZGVyCT0gUzNDX0NMS19ESVYyLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19zcGkxID0gewotCS5jbGsJPSB7Ci0JCS5uYW1lCQk9ICJzcGktYnVzIiwKLQkJLmlkCQk9IDEsCi0JCS5jdHJsYml0ICAgICAgICA9IFMzQ19DTEtDT05fU0NMS19TUEkxLAotCQkuZW5hYmxlCQk9IHMzYzY0eHhfc2Nsa19jdHJsLAotCQkuc2V0X3BhcmVudAk9IHMzYzY0eHhfc2V0cGFyZW50X2Nsa3NyYywKLQkJLmdldF9yYXRlCT0gczNjNjR4eF9nZXRyYXRlX2Nsa3NyYywKLQkJLnNldF9yYXRlCT0gczNjNjR4eF9zZXRyYXRlX2Nsa3NyYywKLQkJLnJvdW5kX3JhdGUJPSBzM2M2NHh4X3JvdW5kcmF0ZV9jbGtzcmMsCi0JfSwKLQkuc2hpZnQJCT0gUzNDNjQwMF9DTEtTUkNfU1BJMV9TSElGVCwKLQkubWFzawkJPSBTM0M2NDAwX0NMS1NSQ19TUEkxX01BU0ssCi0JLnNvdXJjZXMJPSAmY2xrc2V0X3NwaV9tbWMsCi0JLmRpdmlkZXJfc2hpZnQJPSBTM0M2NDAwX0NMS0RJVjJfU1BJMV9TSElGVCwKLQkucmVnX2RpdmlkZXIJPSBTM0NfQ0xLX0RJVjIsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayBjbGtfaWlzX2NkMCA9IHsKLQkubmFtZQkJPSAiaWlzX2NkY2xrMCIsCi0JLmlkCQk9IC0xLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgY2xrX2lpc19jZDEgPSB7Ci0JLm5hbWUJCT0gImlpc19jZGNsazEiLAotCS5pZAkJPSAtMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19wY21fY2QgPSB7Ci0JLm5hbWUJCT0gInBjbV9jZGNsayIsCi0JLmlkCQk9IC0xLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NldF9hdWRpbzBfbGlzdFtdID0gewotCVswXSA9ICZjbGtfbW91dF9lcGxsLmNsaywKLQlbMV0gPSAmY2xrX2RvdXRfbXBsbCwKLQlbMl0gPSAmY2xrX2Zpbl9lcGxsLAotCVszXSA9ICZjbGtfaWlzX2NkMCwKLQlbNF0gPSAmY2xrX3BjbV9jZCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX3NvdXJjZXMgY2xrc2V0X2F1ZGlvMCA9IHsKLQkuc291cmNlcwk9IGNsa3NldF9hdWRpbzBfbGlzdCwKLQkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrc2V0X2F1ZGlvMF9saXN0KSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfYXVkaW8wID0gewotCS5jbGsJPSB7Ci0JCS5uYW1lCQk9ICJhdWRpby1idXMiLAotCQkuaWQJCT0gMCwKLQkJLmN0cmxiaXQgICAgICAgID0gUzNDX0NMS0NPTl9TQ0xLX0FVRElPMCwKLQkJLmVuYWJsZQkJPSBzM2M2NHh4X3NjbGtfY3RybCwKLQkJLnNldF9wYXJlbnQJPSBzM2M2NHh4X3NldHBhcmVudF9jbGtzcmMsCi0JCS5nZXRfcmF0ZQk9IHMzYzY0eHhfZ2V0cmF0ZV9jbGtzcmMsCi0JCS5zZXRfcmF0ZQk9IHMzYzY0eHhfc2V0cmF0ZV9jbGtzcmMsCi0JCS5yb3VuZF9yYXRlCT0gczNjNjR4eF9yb3VuZHJhdGVfY2xrc3JjLAotCX0sCi0JLnNoaWZ0CQk9IFMzQzY0MDBfQ0xLU1JDX0FVRElPMF9TSElGVCwKLQkubWFzawkJPSBTM0M2NDAwX0NMS1NSQ19BVURJTzBfTUFTSywKLQkuc291cmNlcwk9ICZjbGtzZXRfYXVkaW8wLAotCS5kaXZpZGVyX3NoaWZ0CT0gUzNDNjQwMF9DTEtESVYyX0FVRElPMF9TSElGVCwKLQkucmVnX2RpdmlkZXIJPSBTM0NfQ0xLX0RJVjIsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsayAqY2xrc2V0X2F1ZGlvMV9saXN0W10gPSB7Ci0JWzBdID0gJmNsa19tb3V0X2VwbGwuY2xrLAotCVsxXSA9ICZjbGtfZG91dF9tcGxsLAotCVsyXSA9ICZjbGtfZmluX2VwbGwsCi0JWzNdID0gJmNsa19paXNfY2QxLAotCVs0XSA9ICZjbGtfcGNtX2NkLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtzZXRfYXVkaW8xID0gewotCS5zb3VyY2VzCT0gY2xrc2V0X2F1ZGlvMV9saXN0LAotCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtzZXRfYXVkaW8xX2xpc3QpLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19hdWRpbzEgPSB7Ci0JLmNsawk9IHsKLQkJLm5hbWUJCT0gImF1ZGlvLWJ1cyIsCi0JCS5pZAkJPSAxLAotCQkuY3RybGJpdCAgICAgICAgPSBTM0NfQ0xLQ09OX1NDTEtfQVVESU8xLAotCQkuZW5hYmxlCQk9IHMzYzY0eHhfc2Nsa19jdHJsLAotCQkuc2V0X3BhcmVudAk9IHMzYzY0eHhfc2V0cGFyZW50X2Nsa3NyYywKLQkJLmdldF9yYXRlCT0gczNjNjR4eF9nZXRyYXRlX2Nsa3NyYywKLQkJLnNldF9yYXRlCT0gczNjNjR4eF9zZXRyYXRlX2Nsa3NyYywKLQkJLnJvdW5kX3JhdGUJPSBzM2M2NHh4X3JvdW5kcmF0ZV9jbGtzcmMsCi0JfSwKLQkuc2hpZnQJCT0gUzNDNjQwMF9DTEtTUkNfQVVESU8xX1NISUZULAotCS5tYXNrCQk9IFMzQzY0MDBfQ0xLU1JDX0FVRElPMV9NQVNLLAotCS5zb3VyY2VzCT0gJmNsa3NldF9hdWRpbzEsCi0JLmRpdmlkZXJfc2hpZnQJPSBTM0M2NDAwX0NMS0RJVjJfQVVESU8xX1NISUZULAotCS5yZWdfZGl2aWRlcgk9IFMzQ19DTEtfRElWMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfaXJkYSA9IHsKLQkuY2xrCT0gewotCQkubmFtZQkJPSAiaXJkYS1idXMiLAotCQkuaWQJCT0gMCwKLQkJLmN0cmxiaXQgICAgICAgID0gUzNDX0NMS0NPTl9TQ0xLX0lSREEsCi0JCS5lbmFibGUJCT0gczNjNjR4eF9zY2xrX2N0cmwsCi0JCS5zZXRfcGFyZW50CT0gczNjNjR4eF9zZXRwYXJlbnRfY2xrc3JjLAotCQkuZ2V0X3JhdGUJPSBzM2M2NHh4X2dldHJhdGVfY2xrc3JjLAotCQkuc2V0X3JhdGUJPSBzM2M2NHh4X3NldHJhdGVfY2xrc3JjLAotCQkucm91bmRfcmF0ZQk9IHMzYzY0eHhfcm91bmRyYXRlX2Nsa3NyYywKLQl9LAotCS5zaGlmdAkJPSBTM0M2NDAwX0NMS1NSQ19JUkRBX1NISUZULAotCS5tYXNrCQk9IFMzQzY0MDBfQ0xLU1JDX0lSREFfTUFTSywKLQkuc291cmNlcwk9ICZjbGtzZXRfaXJkYSwKLQkuZGl2aWRlcl9zaGlmdAk9IFMzQzY0MDBfQ0xLRElWMl9JUkRBX1NISUZULAotCS5yZWdfZGl2aWRlcgk9IFMzQ19DTEtfRElWMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzZXRfY2FtaWZfbGlzdFtdID0gewotCSZjbGtfaDIsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa19zb3VyY2VzIGNsa3NldF9jYW1pZiA9IHsKLQkuc291cmNlcwk9IGNsa3NldF9jYW1pZl9saXN0LAotCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtzZXRfY2FtaWZfbGlzdCksCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX2NhbWlmID0gewotCS5jbGsJPSB7Ci0JCS5uYW1lCQk9ICJjYW1lcmEiLAotCQkuaWQJCT0gLTEsCi0JCS5jdHJsYml0ICAgICAgICA9IFMzQ19DTEtDT05fU0NMS19DQU0sCi0JCS5lbmFibGUJCT0gczNjNjR4eF9zY2xrX2N0cmwsCi0JCS5zZXRfcGFyZW50CT0gczNjNjR4eF9zZXRwYXJlbnRfY2xrc3JjLAotCQkuZ2V0X3JhdGUJPSBzM2M2NHh4X2dldHJhdGVfY2xrc3JjLAotCQkuc2V0X3JhdGUJPSBzM2M2NHh4X3NldHJhdGVfY2xrc3JjLAotCQkucm91bmRfcmF0ZQk9IHMzYzY0eHhfcm91bmRyYXRlX2Nsa3NyYywKLQl9LAotCS5zaGlmdAkJPSAwLAotCS5tYXNrCQk9IDAsCi0JLnNvdXJjZXMJPSAmY2xrc2V0X2NhbWlmLAotCS5kaXZpZGVyX3NoaWZ0CT0gUzNDNjQwMF9DTEtESVYwX0NBTV9TSElGVCwKLQkucmVnX2RpdmlkZXIJPSBTM0NfQ0xLX0RJVjAsCi19OwotCi0vKiBDbG9jayBpbml0aWFsaXNhdGlvbiBjb2RlICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayAqaW5pdF9wYXJlbnRzW10gPSB7Ci0JJmNsa19tb3V0X2FwbGwsCi0JJmNsa19tb3V0X2VwbGwsCi0JJmNsa19tb3V0X21wbGwsCi0JJmNsa19tbWMwLAotCSZjbGtfbW1jMSwKLQkmY2xrX21tYzIsCi0JJmNsa191c2Job3N0LAotCSZjbGtfdWFydF91Y2xrMSwKLQkmY2xrX3NwaTAsCi0JJmNsa19zcGkxLAotCSZjbGtfYXVkaW8wLAotCSZjbGtfYXVkaW8xLAotCSZjbGtfaXJkYSwKLQkmY2xrX2NhbWlmLAotfTsKLQotc3RhdGljIHZvaWQgX19pbml0X29yX2NwdWZyZXEgczNjNjQwMF9zZXRfY2xrc3JjKHN0cnVjdCBjbGtzcmNfY2xrICpjbGspCi17Ci0Jc3RydWN0IGNsa19zb3VyY2VzICpzcmNzID0gY2xrLT5zb3VyY2VzOwotCXUzMiBjbGtzcmMgPSBfX3Jhd19yZWFkbChTM0NfQ0xLX1NSQyk7Ci0KLQljbGtzcmMgJj0gY2xrLT5tYXNrOwotCWNsa3NyYyA+Pj0gY2xrLT5zaGlmdDsKLQotCWlmIChjbGtzcmMgPiBzcmNzLT5ucl9zb3VyY2VzIHx8ICFzcmNzLT5zb3VyY2VzW2Nsa3NyY10pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogYmFkIHNvdXJjZSAlZFxuIiwKLQkJICAgICAgIGNsay0+Y2xrLm5hbWUsIGNsa3NyYyk7Ci0JCXJldHVybjsKLQl9Ci0KLQljbGstPmNsay5wYXJlbnQgPSBzcmNzLT5zb3VyY2VzW2Nsa3NyY107Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogc291cmNlIGlzICVzICglZCksIHJhdGUgaXMgJWxkXG4iLAotCSAgICAgICBjbGstPmNsay5uYW1lLCBjbGstPmNsay5wYXJlbnQtPm5hbWUsIGNsa3NyYywKLQkgICAgICAgY2xrX2dldF9yYXRlKCZjbGstPmNsaykpOwotfQotCi0jZGVmaW5lIEdFVF9ESVYoY2xrLCBmaWVsZCkgKCgoKGNsaykgJiBmaWVsZCMjX01BU0spID4+IGZpZWxkIyNfU0hJRlQpICsgMSkKLQotdm9pZCBfX2luaXRfb3JfY3B1ZnJlcSBzM2M2NDAwX3NldHVwX2Nsb2Nrcyh2b2lkKQotewotCXN0cnVjdCBjbGsgKnh0YWxfY2xrOwotCXVuc2lnbmVkIGxvbmcgeHRhbDsKLQl1bnNpZ25lZCBsb25nIGZjbGs7Ci0JdW5zaWduZWQgbG9uZyBoY2xrOwotCXVuc2lnbmVkIGxvbmcgaGNsazI7Ci0JdW5zaWduZWQgbG9uZyBwY2xrOwotCXVuc2lnbmVkIGxvbmcgZXBsbDsKLQl1bnNpZ25lZCBsb25nIGFwbGw7Ci0JdW5zaWduZWQgbG9uZyBtcGxsOwotCXVuc2lnbmVkIGludCBwdHI7Ci0JdTMyIGNsa2RpdjA7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJlZ2lzdGVyaW5nIGNsb2Nrc1xuIiwgX19mdW5jX18pOwotCi0JY2xrZGl2MCA9IF9fcmF3X3JlYWRsKFMzQ19DTEtfRElWMCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBjbGtkaXYwID0gJTA4eFxuIiwgX19mdW5jX18sIGNsa2RpdjApOwotCi0JeHRhbF9jbGsgPSBjbGtfZ2V0KE5VTEwsICJ4dGFsIik7Ci0JQlVHX09OKElTX0VSUih4dGFsX2NsaykpOwotCi0JeHRhbCA9IGNsa19nZXRfcmF0ZSh4dGFsX2Nsayk7Ci0JY2xrX3B1dCh4dGFsX2Nsayk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHh0YWwgaXMgJWxkXG4iLCBfX2Z1bmNfXywgeHRhbCk7Ci0KLQkvKiBGb3Igbm93IGFzc3VtZSB0aGUgbXV4IGFsd2F5cyBzZWxlY3RzIHRoZSBjcnlzdGFsICovCi0JY2xrX2V4dF94dGFsX211eC5wYXJlbnQgPSB4dGFsX2NsazsKLQotCWVwbGwgPSBzM2M2NDAwX2dldF9lcGxsKHh0YWwpOwotCW1wbGwgPSBzM2M2NDAwX2dldF9wbGwoeHRhbCwgX19yYXdfcmVhZGwoUzNDX01QTExfQ09OKSk7Ci0JYXBsbCA9IHMzYzY0MDBfZ2V0X3BsbCh4dGFsLCBfX3Jhd19yZWFkbChTM0NfQVBMTF9DT04pKTsKLQotCWZjbGsgPSBtcGxsOwotCi0JcHJpbnRrKEtFUk5fSU5GTyAiUzNDNjRYWDogUExMIHNldHRpbmdzLCBBPSVsZCwgTT0lbGQsIEU9JWxkXG4iLAotCSAgICAgICBhcGxsLCBtcGxsLCBlcGxsKTsKLQotCWhjbGsyID0gbXBsbCAvIEdFVF9ESVYoY2xrZGl2MCwgUzNDNjQwMF9DTEtESVYwX0hDTEsyKTsKLQloY2xrID0gaGNsazIgLyBHRVRfRElWKGNsa2RpdjAsIFMzQzY0MDBfQ0xLRElWMF9IQ0xLKTsKLQlwY2xrID0gaGNsazIgLyBHRVRfRElWKGNsa2RpdjAsIFMzQzY0MDBfQ0xLRElWMF9QQ0xLKTsKLQotCXByaW50ayhLRVJOX0lORk8gIlMzQzY0WFg6IEhDTEsyPSVsZCwgSENMSz0lbGQsIFBDTEs9JWxkXG4iLAotCSAgICAgICBoY2xrMiwgaGNsaywgcGNsayk7Ci0KLQljbGtfZm91dF9tcGxsLnJhdGUgPSBtcGxsOwotCWNsa19mb3V0X2VwbGwucmF0ZSA9IGVwbGw7Ci0JY2xrX2ZvdXRfYXBsbC5yYXRlID0gYXBsbDsKLQotCWNsa19oMi5yYXRlID0gaGNsazI7Ci0JY2xrX2gucmF0ZSA9IGhjbGs7Ci0JY2xrX3AucmF0ZSA9IHBjbGs7Ci0JY2xrX2YucmF0ZSA9IGZjbGs7Ci0KLQlmb3IgKHB0ciA9IDA7IHB0ciA8IEFSUkFZX1NJWkUoaW5pdF9wYXJlbnRzKTsgcHRyKyspCi0JCXMzYzY0MDBfc2V0X2Nsa3NyYyhpbml0X3BhcmVudHNbcHRyXSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzW10gX19pbml0ZGF0YSA9IHsKLQkmY2xrX2V4dF94dGFsX211eCwKLQkmY2xrX2lpc19jZDAsCi0JJmNsa19paXNfY2QxLAotCSZjbGtfcGNtX2NkLAotCSZjbGtfbW91dF9lcGxsLmNsaywKLQkmY2xrX21vdXRfbXBsbC5jbGssCi0JJmNsa19kb3V0X21wbGwsCi0JJmNsa19tbWMwLmNsaywKLQkmY2xrX21tYzEuY2xrLAotCSZjbGtfbW1jMi5jbGssCi0JJmNsa191c2Job3N0LmNsaywKLQkmY2xrX3VhcnRfdWNsazEuY2xrLAotCSZjbGtfc3BpMC5jbGssCi0JJmNsa19zcGkxLmNsaywKLQkmY2xrX2F1ZGlvMC5jbGssCi0JJmNsa19hdWRpbzEuY2xrLAotCSZjbGtfaXJkYS5jbGssCi0JJmNsa19jYW1pZi5jbGssCi0JJmNsa19hcm0sCi19OwotCi0vKioKLSAqIHMzYzY0MDBfcmVnaXN0ZXJfY2xvY2tzIC0gcmVnaXN0ZXIgY2xvY2tzIGZvciBzM2M2NDAwIGFuZCBhYm92ZQotICogQGFybWNsa19kaXZsaW1pdDogRGl2aXNvciBtYXNrIGZvciBBUk1DTEsKLSAqCi0gKiBSZWdpc3RlciB0aGUgY2xvY2tzIGZvciB0aGUgUzNDNjQwMCBhbmQgYWJvdmUgU29DIHJhbmdlLCBzdWNoCi0gKiBhcyBBUk1DTEsgYW5kIHRoZSBjbG9ja3Mgd2hpY2ggaGF2ZSBkaXZpZGVyIGNoYWlucyBhdHRhY2hlZC4KLSAqCi0gKiBUaGlzIGNhbGwgZG9lcyBub3Qgc2V0dXAgdGhlIGNsb2Nrcywgd2hpY2ggaXMgbGVmdCB0byB0aGUKLSAqIHMzYzY0MDBfc2V0dXBfY2xvY2tzKCkgY2FsbCB3aGljaCBtYXkgYmUgbmVlZGVkIGJ5IHRoZSBjcHVmcmVxCi0gKiBvciByZXN1bWUgY29kZSB0byByZS1zZXQgdGhlIGNsb2NrcyBpZiB0aGUgYm9vdGxvYWRlciBoYXMgY2hhbmdlZAotICogdGhlbS4KLSAqLwotdm9pZCBfX2luaXQgczNjNjQwMF9yZWdpc3Rlcl9jbG9ja3ModW5zaWduZWQgYXJtY2xrX2RpdmxpbWl0KQotewotCXN0cnVjdCBjbGsgKmNsa3A7Ci0JaW50IHJldDsKLQlpbnQgcHRyOwotCi0JYXJtY2xrX21hc2sgPSBhcm1jbGtfZGl2bGltaXQ7Ci0KLQlmb3IgKHB0ciA9IDA7IHB0ciA8IEFSUkFZX1NJWkUoY2xrcyk7IHB0cisrKSB7Ci0JCWNsa3AgPSBjbGtzW3B0cl07Ci0JCXJldCA9IHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soY2xrcCk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZWdpc3RlciBjbG9jayAlcyAoJWQpXG4iLAotCQkJICAgICAgIGNsa3AtPm5hbWUsIHJldCk7Ci0JCX0KLQl9Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvczNjNjQwMC1pbml0LmMgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvczNjNjQwMC1pbml0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZjMjhmMzkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtaW5pdC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3MzYzY0MDAtaW5pdC5jCi0gKgotICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KLSAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcwotICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCi0gKgotICogUzNDNjQwMCAtIENQVSBpbml0aWFsaXNhdGlvbiAoY29tbW9uIHdpdGggb3RoZXIgUzNDNjRYWCBjaGlwcykKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPHBsYXQvY3B1Lmg+Ci0jaW5jbHVkZSA8cGxhdC9kZXZzLmg+Ci0jaW5jbHVkZSA8cGxhdC9zM2M2NDAwLmg+Ci0jaW5jbHVkZSA8cGxhdC9zM2M2NDEwLmg+Ci0KLS8qIHVhcnQgcmVnaXN0cmF0aW9uIHByb2Nlc3MgKi8KLQotdm9pZCBfX2luaXQgczNjNjQwMF9jb21tb25faW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubykKLXsKLQlzM2MyNHh4X2luaXRfdWFydGRldnMoInMzYzY0MDAtdWFydCIsIHMzYzY0eHhfdWFydF9yZXNvdXJjZXMsIGNmZywgbm8pOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3NldHVwLWkyYzAuYyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zZXR1cC1pMmMwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2NDQ4MDcuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3NldHVwLWkyYzAuYworKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zZXR1cC1pMmMwLmMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICoKLSAqIEJhc2UgUzNDNjRYWCBJMkMgYnVzIDAgZ3BpbyBjb25maWd1cmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOyAvKiBkb24ndCBuZWVkIHRoZSBjb250ZW50cyAqLwotCi0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+Ci0jaW5jbHVkZSA8cGxhdC9paWMuaD4KLSNpbmNsdWRlIDxwbGF0L2dwaW8tYmFuay1iLmg+Ci0jaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgotCi12b2lkIHMzY19pMmMwX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEIoNSksIFMzQzY0WFhfR1BCNV9JMkNfU0NMMCk7Ci0JczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BCKDYpLCBTM0M2NFhYX0dQQjZfSTJDX1NEQTApOwotCXMzY19ncGlvX3NldHB1bGwoUzNDNjRYWF9HUEIoNSksIFMzQ19HUElPX1BVTExfVVApOwotCXMzY19ncGlvX3NldHB1bGwoUzNDNjRYWF9HUEIoNiksIFMzQ19HUElPX1BVTExfVVApOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3NldHVwLWkyYzEuYyBiL2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zZXR1cC1pMmMxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiZTIyOWIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3NldHVwLWkyYzEuYworKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjNjR4eC9zZXR1cC1pMmMxLmMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICoKLSAqIEJhc2UgUzNDNjRYWCBJMkMgYnVzIDEgZ3BpbyBjb25maWd1cmF0aW9uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi1zdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlOyAvKiBkb24ndCBuZWVkIHRoZSBjb250ZW50cyAqLwotCi0jaW5jbHVkZSA8bWFjaC9ncGlvLmg+Ci0jaW5jbHVkZSA8cGxhdC9paWMuaD4KLSNpbmNsdWRlIDxwbGF0L2dwaW8tYmFuay1iLmg+Ci0jaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgotCi12b2lkIHMzY19pMmMxX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQlzM2NfZ3Bpb19jZmdwaW4oUzNDNjRYWF9HUEIoMiksIFMzQzY0WFhfR1BCMl9JMkNfU0NMMSk7Ci0JczNjX2dwaW9fY2ZncGluKFMzQzY0WFhfR1BCKDMpLCBTM0M2NFhYX0dQQjNfSTJDX1NEQTEpOwotCXMzY19ncGlvX3NldHB1bGwoUzNDNjRYWF9HUEIoMiksIFMzQ19HUElPX1BVTExfVVApOwotCXMzY19ncGlvX3NldHB1bGwoUzNDNjRYWF9HUEIoMyksIFMzQ19HUElPX1BVTExfVVApOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3NsZWVwLlMgYi9hcmNoL2FybS9wbGF0LXMzYzY0eHgvc2xlZXAuUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGU3MWZlOS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LXMzYzY0eHgvc2xlZXAuUworKysgL2Rldi9udWxsCkBAIC0xLDE0NCArMCwwIEBACi0vKiBsaW51eC8wYXJjaC9hcm0vcGxhdC1zM2M2NHh4L3NsZWVwLlMKLSAqCi0gKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgotICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCi0gKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+Ci0gKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLwotICoKLSAqIFMzQzY0WFggQ1BVIHNsZWVwIGNvZGUKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotKi8KLQotI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KLSNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+Ci0jaW5jbHVkZSA8bWFjaC9tYXAuaD4KLQotI3VuZGVmIFMzQzY0WFhfVkFfR1BJTwotI2RlZmluZSBTM0M2NFhYX1ZBX0dQSU8gKDB4MCkKLQotI2luY2x1ZGUgPHBsYXQvcmVncy1ncGlvLmg+Ci0jaW5jbHVkZSA8cGxhdC9ncGlvLWJhbmstbi5oPgotCi0jZGVmaW5lIExMX1VBUlQgKFMzQ19QQV9VQVJUICsgKDB4NDAwICogQ09ORklHX1MzQ19MT1dMRVZFTF9VQVJUX1BPUlQpKQotCi0JLnRleHQKLQotCS8qIHMzY19jcHVfc2F2ZQotCSAqCi0JICogU2F2ZSBlbm91Z2ggcHJvY2Vzc29yIHN0YXRlIHRvIGFsbG93IHRoZSByZXN0YXJ0IG9mIHRoZSBwbS5jCi0JICogY29kZSBhZnRlciByZXN1bWUuCi0JICoKLQkgKiBlbnRyeToKLQkgKglyMCA9IHBvaW50ZXIgdG8gdGhlIHNhdmUgYmxvY2sKLQkqLwotCi1FTlRSWShzM2NfY3B1X3NhdmUpCi0Jc3RtZmQJc3AhLCB7IHI0IC0gcjEyLCBsciB9Ci0KLQltcmMJcDE1LCAwLCByNCwgYzEzLCBjMCwgMAlAIEZDU0UvUElECi0JbXJjCXAxNSwgMCwgcjUsIGMzLCBjMCwgMAlAIERvbWFpbiBJRAotCW1yYwlwMTUsIDAsIHI2LCBjMiwgYzAsIDAJQCBUcmFuc2xhdGlvbiBUYWJsZSBCQVNFMAotCW1yYwlwMTUsIDAsIHI3LCBjMiwgYzAsIDEJQCBUcmFuc2xhdGlvbiBUYWJsZSBCQVNFMQotCW1yYwlwMTUsIDAsIHI4LCBjMiwgYzAsIDIJQCBUcmFuc2xhdGlvbiBUYWJsZSBDb250cm9sCi0JbXJjCXAxNSwgMCwgcjksIGMxLCBjMCwgMAlAIENvbnRyb2wgcmVnaXN0ZXIKLQltcmMJcDE1LCAwLCByMTAsIGMxLCBjMCwgMQlAIEF1eGlsaWFyeSBjb250cm9sIHJlZ2lzdGVyCi0JbXJjCXAxNSwgMCwgcjExLCBjMSwgYzAsIDIJQCBDby1wcm9jZXNzb3IgYWNjZXNzIGNvbnRyb2xzCi0KLQlzdG1pYQlyMCwgeyByNCAtIHIxMyB9CUAgU2F2ZSBDUCByZWdpc3RlcnMgYW5kIFNQCi0KLQlAQCBzYXZlIG91ciBzdGF0ZSB0byByYW0KLQlibAlzM2NfcG1fY2JfZmx1c2hjYWNoZQotCi0JQEAgY2FsbCBmaW5hbCBzdXNwZW5kIGNvZGUKLQlsZHIJcjAsID1wbV9jcHVfc2xlZXAKLQlsZHIJcGMsIFtyMF0KLQkKLQlAQCByZXR1cm4gdG8gdGhlIGNhbGxlciwgYWZ0ZXIgdGhlIE1NVSBpcyB0dXJuZWQgb24uCi0JQEAgcmVzdG9yZSB0aGUgbGFzdCBiaXRzIG9mIHRoZSBzdGFjayBhbmQgcmV0dXJuLgotcmVzdW1lX3dpdGhfbW11OgotCWxkbWZkCXNwISwgeyByNCAtIHIxMiwgcGMgfQlAIHJldHVybiwgZnJvbSBzcCBmcm9tIHMzY19jcHVfc2F2ZQotCi0JLmRhdGEKLQotCS8qIHRoZSBuZXh0IGJpdCBpcyBjb2RlLCBidXQgaXQgcmVxdWlyZXMgZWFzeSBhY2Nlc3MgdG8gdGhlCi0JICogczNjX3NsZWVwX3NhdmVfcGh5cyBkYXRhIGJlZm9yZSB0aGUgTU1VIGlzIHN3aXRjaGVkIG9uLCBzbwotCSAqIHdlIHN0b3JlIHRoZSBjb2RlIHRoYXQgbmVlZHMgdGhpcyB2YXJpYWJsZSBpbiB0aGUgLmRhdGEgd2hlcmUKLQkgKiB0aGUgdmFsdWUgY2FuIGJlIHdyaXR0ZW4gdG8gKHRoZSAudGV4dCBzZWdtZW50IGlzIFJPKS4KLQkqLwotCi0JLmdsb2JhbAlzM2Nfc2xlZXBfc2F2ZV9waHlzCi1zM2Nfc2xlZXBfc2F2ZV9waHlzOgotCS53b3JkCTAKLQotCS8qIFNsZWVwIG1hZ2ljLCB0aGUgd29yZCBiZWZvcmUgdGhlIHJlc3VtZSBlbnRyeSBwb2ludCBzbyB0aGF0IHRoZQotCSAqIGJvb3Rsb2FkZXIgY2FuIGNoZWNrIGZvciBhIHJlc3VtZWFibGUgaW1hZ2UuICovCi0KLQkud29yZAkweDJiZWRmMDBkCi0KLQkvKiBzM2NfY3B1X3JldXNtZQotCSAqCi0JICogVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQsIHN0b3JlZCBieSB3aGF0ZXZlciBtZXRob2QgdGhlIGJvb3Rsb2FkZXIKLQkgKiByZXF1aXJlcyB0byBnZXQgdGhlIGtlcm5lbCBydW5uaWduIGFnYWluLiBUaGlzIGNvZGUgZXhwZWN0cyB0byBiZQotCSAqIGVudGVyZWQgd2l0aCBubyBjYWNoZXMgbGl2ZSBhbmQgdGhlIE1NVSBkaXNhYmxlZC4gSXQgd2lsbCB0aGVuCi0JICogcmVzdG9yZSB0aGUgTU1VIGFuZCBvdGhlciBiYXNpYyBDUCByZWdpc3RlcnMgc2F2ZWQgYW5kIHJlc3RhcnQKLQkgKiB0aGUga2VybmVsIEMgY29kZSB0byBmaW5pc2ggdGhlIHJlc3VtZSBjb2RlLgotCSovCi0KLUVOVFJZKHMzY19jcHVfcmVzdW1lKQotCW1zcgljcHNyX2MsICNQU1JfSV9CSVQgfCBQU1JfRl9CSVQgfCBTVkNfTU9ERQotCWxkcglyMiwgPUxMX1VBUlQJCS8qIGZvciBkZWJ1ZyAqLwotCi0jaWZkZWYgQ09ORklHX1MzQ19QTV9ERUJVR19MRURfU01ESwotCS8qIEluaXRpYWxpc2UgdGhlIEdQSU8gc3RhdGUgaWYgd2UgYXJlIGRlYnVnZ2luZyB2aWEgdGhlIFNNREsgTEVEcywKLQkgKiBhcyB0aGUgdWJvb3QgdmVyc2lvbiBzdXBwbGllZCByZXNldHMgdGhlc2UgdG8gaW5wdXRzIGR1cmluZyB0aGUKLQkgKiByZXN1bWUgY2hlY2tzLgotCSovCi0KLQlsZHIJcjMsID1TM0M2NFhYX1BBX0dQSU8KLQlsZHIJcjAsIFsgcjMsICNTM0M2NFhYX0dQTkNPTiBdCi0JYmljCXIwLCByMCwgIyhTM0M2NFhYX0dQTl9DT05NQVNLKDEyKSB8IFMzQzY0WFhfR1BOX0NPTk1BU0soMTMpIHwgXAotCQkJICBTM0M2NFhYX0dQTl9DT05NQVNLKDE0KSB8IFMzQzY0WFhfR1BOX0NPTk1BU0soMTUpKQotCW9ycglyMCwgcjAsICMoUzNDNjRYWF9HUE5fT1VUUFVUKDEyKSB8IFMzQzY0WFhfR1BOX09VVFBVVCgxMykgfCBcCi0JCQkgIFMzQzY0WFhfR1BOX09VVFBVVCgxNCkgfCBTM0M2NFhYX0dQTl9PVVRQVVQoMTUpKQotCXN0cglyMCwgWyByMywgI1MzQzY0WFhfR1BOQ09OIF0KLQotCWxkcglyMCwgWyByMywgI1MzQzY0WFhfR1BOREFUIF0KLQliaWMJcjAsIHIwLCAjMHhmIDw8IDEyCQkJQCBHUE4xMi4uMTUKLQlvcnIJcjAsIHIwLCAjMSA8PCAxNQkJCUAgR1BOMTUKLQlzdHIJcjAsIFsgcjMsICNTM0M2NFhYX0dQTkRBVCBdCi0jZW5kaWYKLQotCS8qIF9fdjZfc2V0dXAgZnJvbSBhcmNoL2FybS9tbS9wcm9jLXY2LlMsIGVuc3VyZSB0aGF0IHRoZSBjYWNoZXMKLQkgKiBhcmUgdGhvcm91Z2hseSBjbGVhbmVkIGp1c3QgaW4gY2FzZSB0aGUgYm9vdGxvYWRlciBkaWRuJ3QgZG8gaXQKLQkgKiBmb3IgdXMuICovCi0JbW92CXIwLCAjMAotCW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAwCQlAIGNsZWFuK2ludmFsaWRhdGUgRCBjYWNoZQotCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCi0JbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTUsIDAJCUAgY2xlYW4raW52YWxpZGF0ZSBjYWNoZQotCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIHdyaXRlIGJ1ZmZlcgotCUBAbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMAkJQCBpbnZhbGlkYXRlIEkgKyBEIFRMQnMKLQlAQG1jcglwMTUsIDAsIHIwLCBjNywgYzcsIDAJCUAgSW52YWxpZGF0ZSBJICsgRCBjYWNoZXMKLQotCWxkcglyMCwgczNjX3NsZWVwX3NhdmVfcGh5cwotCWxkbWlhCXIwLCB7IHI0IC0gcjEzIH0KLQotCW1jcglwMTUsIDAsIHI0LCBjMTMsIGMwLCAwCUAgRkNTRS9QSUQKLQltY3IJcDE1LCAwLCByNSwgYzMsIGMwLCAwCUAgRG9tYWluIElECi0JbWNyCXAxNSwgMCwgcjYsIGMyLCBjMCwgMAlAIFRyYW5zbGF0aW9uIFRhYmxlIEJBU0UwCi0JbWNyCXAxNSwgMCwgcjcsIGMyLCBjMCwgMQlAIFRyYW5zbGF0aW9uIFRhYmxlIEJBU0UxCi0JbWNyCXAxNSwgMCwgcjgsIGMyLCBjMCwgMglAIFRyYW5zbGF0aW9uIFRhYmxlIENvbnRyb2wKLQltY3IJcDE1LCAwLCByMTAsIGMxLCBjMCwgMQlAIEF1eGlsaWFyeSBjb250cm9sIHJlZ2lzdGVyCi0KLQltb3YJcjAsICMwCQkJQCByZXN0b3JlIGNvcHJvIGFjY2VzcyBjb250cm9scwotCW1jcglwMTUsIDAsIHIxMSwgYzEsIGMwLCAyCUAgQ28tcHJvY2Vzc29yIGFjY2VzcyBjb250cm9scwotCW1jciAJcDE1LCAwLCByMCwgYzcsIGM1LCA0Ci0KLQlsZHIJcjIsID1yZXN1bWVfd2l0aF9tbXUKLQltY3IJcDE1LCAwLCByOSwgYzEsIGMwLCAwCQkvKiB0dXJuIG1tdSBiYWNrIG9uICovCi0Jbm9wCi0JbW92CXBjLCByMgkJCQkvKiBqdW1wIGJhY2sgKi8KLQotCS5lbmQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LXM1cC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0MDBhNmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cC9LY29uZmlnCkBAIC0wLDAgKzEsMjUgQEAKKyMgYXJjaC9hcm0vcGxhdC1zNXAvS2NvbmZpZworIworIyBDb3B5cmlnaHQgKGMpIDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyMJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisjCisjIExpY2Vuc2VkIHVuZGVyIEdQTHYyCisKK2NvbmZpZyBQTEFUX1M1UAorCWJvb2wKKwlkZXBlbmRzIG9uIChBUkNIX1M1UDY0NDAgfHwgQVJDSF9TNVA2NDQyIHx8IEFSQ0hfUzVQVjIxMCkKKwlkZWZhdWx0IHkKKwlzZWxlY3QgQVJNX1ZJQworCXNlbGVjdCBOT19JT1BPUlQKKwlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKKwlzZWxlY3QgUzNDX0dQSU9fVFJBQ0sKKwlzZWxlY3QgU0FNU1VOR19HUElPTElCXzRCSVQKKwlzZWxlY3QgUzNDX0dQSU9fQ0ZHX1MzQzY0WFgKKwlzZWxlY3QgUzNDX0dQSU9fUFVMTF9VUERPV04KKwlzZWxlY3QgUzNDX0dQSU9fQ0ZHX1MzQzI0WFgKKwlzZWxlY3QgUExBVF9TQU1TVU5HCisJc2VsZWN0IFNBTVNVTkdfQ0xLU1JDCisJc2VsZWN0IFNBTVNVTkdfSVJRX1ZJQ19USU1FUgorCXNlbGVjdCBTQU1TVU5HX0lSUV9VQVJUCisJaGVscAorCSAgQmFzZSBwbGF0Zm9ybSBjb2RlIGZvciBTYW1zdW5nJ3MgUzVQIHNlcmllcyBTb0MuCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9NYWtlZmlsZSBiL2FyY2gvYXJtL3BsYXQtczVwL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YzU0YjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cC9NYWtlZmlsZQpAQCAtMCwwICsxLDE5IEBACisjIGFyY2gvYXJtL3BsYXQtczVwL01ha2VmaWxlCisjCisjIENvcHlyaWdodCAoYykgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorIyAJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisjCisjIExpY2Vuc2VkIHVuZGVyIEdQTHYyCisKK29iai15CQkJCTo9CitvYmotbQkJCQk6PQorb2JqLW4JCQkJOj0gZHVtbXkubworb2JqLQkJCQk6PQorCisjIENvcmUgZmlsZXMKKworb2JqLXkJCQkJKz0gZGV2LXVhcnQubworb2JqLXkJCQkJKz0gY3B1Lm8KK29iai15CQkJCSs9IGNsb2NrLm8KK29iai15CQkJCSs9IGlycS5vCitvYmoteQkJCQkrPSBzZXR1cC1pMmMwLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXM1cC9jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOTZlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cC9jbG9jay5jCkBAIC0wLDAgKzEsMTQ5IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXM1cC9jbG9jay5jCisgKgorICogQ29weXJpZ2h0IDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIFM1UCAtIENvbW1vbiBjbG9jayBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLWNsa3NyYy5oPgorI2luY2x1ZGUgPHBsYXQvczVwLWNsb2NrLmg+CisKKy8qIGZpbl9hcGxsLCBmaW5fbXBsbCBhbmQgZmluX2VwbGwgYXJlIGFsbCB0aGUgc2FtZSBjbG9jaywgd2hpY2ggd2UgY2FsbAorICogY2xrX2V4dF94dGFsX211eC4KKyovCitzdHJ1Y3QgY2xrIGNsa19leHRfeHRhbF9tdXggPSB7CisJLm5hbWUJCT0gImV4dF94dGFsIiwKKwkuaWQJCT0gLTEsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBzNXBfY2xrXzI3bSA9IHsKKwkubmFtZQkJPSAiY2xrXzI3bSIsCisJLmlkCQk9IC0xLAorCS5yYXRlCQk9IDI3MDAwMDAwLAorfTsKKworLyogNDhNSHogVVNCIFBoeSBjbG9jayBvdXRwdXQgKi8KK3N0cnVjdCBjbGsgY2xrXzQ4bSA9IHsKKwkubmFtZQkJPSAiY2xrXzQ4bSIsCisJLmlkCQk9IC0xLAorCS5yYXRlCQk9IDQ4MDAwMDAwLAorfTsKKworLyogQVBMTCBjbG9jayBvdXRwdXQKKyAqIE5vIG5lZWQgLmN0cmxiaXQsIHRoaXMgaXMgYWx3YXlzIG9uCisqLworc3RydWN0IGNsayBjbGtfZm91dF9hcGxsID0geworCS5uYW1lCQk9ICJmb3V0X2FwbGwiLAorCS5pZAkJPSAtMSwKK307CisKKy8qIE1QTEwgY2xvY2sgb3V0cHV0CisgKiBObyBuZWVkIC5jdHJsYml0LCB0aGlzIGlzIGFsd2F5cyBvbgorKi8KK3N0cnVjdCBjbGsgY2xrX2ZvdXRfbXBsbCA9IHsKKwkubmFtZQkJPSAiZm91dF9tcGxsIiwKKwkuaWQJCT0gLTEsCit9OworCisvKiBFUExMIGNsb2NrIG91dHB1dCAqLworc3RydWN0IGNsayBjbGtfZm91dF9lcGxsID0geworCS5uYW1lCQk9ICJmb3V0X2VwbGwiLAorCS5pZAkJPSAtMSwKKwkuY3RybGJpdAk9ICgxIDw8IDMxKSwKK307CisKKy8qIEFSTSBjbG9jayAqLworc3RydWN0IGNsayBjbGtfYXJtID0geworCS5uYW1lCQk9ICJhcm1jbGsiLAorCS5pZAkJPSAtMSwKKwkucmF0ZQkJPSAwLAorCS5jdHJsYml0CT0gMCwKK307CisKKy8qIFBvc3NpYmxlIGNsb2NrIHNvdXJjZXMgZm9yIEFQTEwgTXV4ICovCitzdGF0aWMgc3RydWN0IGNsayAqY2xrX3NyY19hcGxsX2xpc3RbXSA9IHsKKwlbMF0gPSAmY2xrX2Zpbl9hcGxsLAorCVsxXSA9ICZjbGtfZm91dF9hcGxsLAorfTsKKworc3RydWN0IGNsa3NyY19zb3VyY2VzIGNsa19zcmNfYXBsbCA9IHsKKwkuc291cmNlcwk9IGNsa19zcmNfYXBsbF9saXN0LAorCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtfc3JjX2FwbGxfbGlzdCksCit9OworCisvKiBQb3NzaWJsZSBjbG9jayBzb3VyY2VzIGZvciBNUExMIE11eCAqLworc3RhdGljIHN0cnVjdCBjbGsgKmNsa19zcmNfbXBsbF9saXN0W10gPSB7CisJWzBdID0gJmNsa19maW5fbXBsbCwKKwlbMV0gPSAmY2xrX2ZvdXRfbXBsbCwKK307CisKK3N0cnVjdCBjbGtzcmNfc291cmNlcyBjbGtfc3JjX21wbGwgPSB7CisJLnNvdXJjZXMJPSBjbGtfc3JjX21wbGxfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrX3NyY19tcGxsX2xpc3QpLAorfTsKKworLyogUG9zc2libGUgY2xvY2sgc291cmNlcyBmb3IgRVBMTCBNdXggKi8KK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtfc3JjX2VwbGxfbGlzdFtdID0geworCVswXSA9ICZjbGtfZmluX2VwbGwsCisJWzFdID0gJmNsa19mb3V0X2VwbGwsCit9OworCitzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMgY2xrX3NyY19lcGxsID0geworCS5zb3VyY2VzCT0gY2xrX3NyY19lcGxsX2xpc3QsCisJLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa19zcmNfZXBsbF9saXN0KSwKK307CisKK3N0cnVjdCBjbGsgY2xrX3ZwbGwgPSB7CisJLm5hbWUJCT0gInZwbGwiLAorCS5pZAkJPSAtMSwKK307CisKK2ludCBzNXBfZ2F0ZWN0cmwodm9pZCBfX2lvbWVtICpyZWcsIHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwl1bnNpZ25lZCBpbnQgY3RybGJpdCA9IGNsay0+Y3RybGJpdDsKKwl1MzIgY29uOworCisJY29uID0gX19yYXdfcmVhZGwocmVnKTsKKwljb24gPSBlbmFibGUgPyAoY29uIHwgY3RybGJpdCkgOiAoY29uICYgfmN0cmxiaXQpOworCV9fcmF3X3dyaXRlbChjb24sIHJlZyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpzNXBfY2xrc1tdIF9faW5pdGRhdGEgPSB7CisJJmNsa19leHRfeHRhbF9tdXgsCisJJmNsa180OG0sCisJJnM1cF9jbGtfMjdtLAorCSZjbGtfZm91dF9hcGxsLAorCSZjbGtfZm91dF9tcGxsLAorCSZjbGtfZm91dF9lcGxsLAorCSZjbGtfYXJtLAorCSZjbGtfdnBsbCwKK307CisKK3ZvaWQgX19pbml0IHM1cF9yZWdpc3Rlcl9jbG9ja3ModW5zaWduZWQgbG9uZyB4dGFsX2ZyZXEpCit7CisJaW50IHJldDsKKworCWNsa19leHRfeHRhbF9tdXgucmF0ZSA9IHh0YWxfZnJlcTsKKworCXJldCA9IHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2tzKHM1cF9jbGtzLCBBUlJBWV9TSVpFKHM1cF9jbGtzKSk7CisJaWYgKHJldCA+IDApCisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlZ2lzdGVyIHM1cCBjbG9ja3NcbiIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvY3B1LmMgYi9hcmNoL2FybS9wbGF0LXM1cC9jcHUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTJlNWRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvY3B1LmMKQEAgLTAsMCArMSwxMTMgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczVwL2NwdS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTNVAgQ1BVIFN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorI2luY2x1ZGUgPHBsYXQvczVwNjQ0MC5oPgorI2luY2x1ZGUgPHBsYXQvczVwNjQ0Mi5oPgorI2luY2x1ZGUgPHBsYXQvczVwdjIxMC5oPgorCisvKiB0YWJsZSBvZiBzdXBwb3J0ZWQgQ1BVcyAqLworCitzdGF0aWMgY29uc3QgY2hhciBuYW1lX3M1cDY0NDBbXSA9ICJTNVA2NDQwIjsKK3N0YXRpYyBjb25zdCBjaGFyIG5hbWVfczVwNjQ0MltdID0gIlM1UDY0NDIiOworc3RhdGljIGNvbnN0IGNoYXIgbmFtZV9zNXB2MjEwW10gPSAiUzVQVjIxMC9TNVBDMTEwIjsKKworc3RhdGljIHN0cnVjdCBjcHVfdGFibGUgY3B1X2lkc1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkuaWRjb2RlCQk9IDB4NTY0NDAxMDAsCisJCS5pZG1hc2sJCT0gMHhmZmZmZmYwMCwKKwkJLm1hcF9pbwkJPSBzNXA2NDQwX21hcF9pbywKKwkJLmluaXRfY2xvY2tzCT0gczVwNjQ0MF9pbml0X2Nsb2NrcywKKwkJLmluaXRfdWFydHMJPSBzNXA2NDQwX2luaXRfdWFydHMsCisJCS5pbml0CQk9IHM1cDY0NDBfaW5pdCwKKwkJLm5hbWUJCT0gbmFtZV9zNXA2NDQwLAorCX0sIHsKKwkJLmlkY29kZQkJPSAweDM2NDQyMDAwLAorCQkuaWRtYXNrCQk9IDB4ZmZmZmZmMDAsCisJCS5tYXBfaW8JCT0gczVwNjQ0Ml9tYXBfaW8sCisJCS5pbml0X2Nsb2Nrcwk9IHM1cDY0NDJfaW5pdF9jbG9ja3MsCisJCS5pbml0X3VhcnRzCT0gczVwNjQ0Ml9pbml0X3VhcnRzLAorCQkuaW5pdAkJPSBzNXA2NDQyX2luaXQsCisJCS5uYW1lCQk9IG5hbWVfczVwNjQ0MiwKKwl9LCB7CisJCS5pZGNvZGUJCT0gMHg0MzExMDAwMCwKKwkJLmlkbWFzawkJPSAweGZmZmZmMDAwLAorCQkubWFwX2lvCQk9IHM1cHYyMTBfbWFwX2lvLAorCQkuaW5pdF9jbG9ja3MJPSBzNXB2MjEwX2luaXRfY2xvY2tzLAorCQkuaW5pdF91YXJ0cwk9IHM1cHYyMTBfaW5pdF91YXJ0cywKKwkJLmluaXQJCT0gczVwdjIxMF9pbml0LAorCQkubmFtZQkJPSBuYW1lX3M1cHYyMTAsCisJfSwKK307CisKKy8qIG1pbmltYWwgSU8gbWFwcGluZyAqLworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHM1cF9pb2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfQ0hJUElELAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzVQX1BBX0NISVBJRCksCisJCS5sZW5ndGgJCT0gU1pfNEssCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LCB7CisJCS52aXJ0dWFsCT0gKHVuc2lnbmVkIGxvbmcpUzNDX1ZBX1NZUywKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFM1UF9QQV9TWVNDT04pLAorCQkubGVuZ3RoCQk9IFNaXzY0SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTM0NfVkFfVUFSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFMzQ19QQV9VQVJUKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylWQV9WSUMwLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzVQX1BBX1ZJQzApLAorCQkubGVuZ3RoCQk9IFNaXzE2SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylWQV9WSUMxLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oUzVQX1BBX1ZJQzEpLAorCQkubGVuZ3RoCQk9IFNaXzE2SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTM0NfVkFfVElNRVIsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTNVBfUEFfVElNRVIpLAorCQkubGVuZ3RoCQk9IFNaXzE2SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sIHsKKwkJLnZpcnR1YWwJPSAodW5zaWduZWQgbG9uZylTNVBfVkFfR1BJTywKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKFM1UF9QQV9HUElPKSwKKwkJLmxlbmd0aAkJPSBTWl80SywKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCX0sCit9OworCisvKiByZWFkIGNwdSBpZGVudGlmaWNhdGlvbiBjb2RlICovCisKK3ZvaWQgX19pbml0IHM1cF9pbml0X2lvKHN0cnVjdCBtYXBfZGVzYyAqbWFjaF9kZXNjLAorCQkJaW50IHNpemUsIHZvaWQgX19pb21lbSAqY3B1aWRfYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGlkY29kZTsKKworCS8qIGluaXRpYWxpemUgdGhlIGlvIGRlc2NyaXB0b3JzIHdlIG5lZWQgZm9yIGluaXRpYWxpemF0aW9uICovCisJaW90YWJsZV9pbml0KHM1cF9pb2Rlc2MsIEFSUkFZX1NJWkUoczVwX2lvZGVzYykpOworCWlmIChtYWNoX2Rlc2MpCisJCWlvdGFibGVfaW5pdChtYWNoX2Rlc2MsIHNpemUpOworCisJaWRjb2RlID0gX19yYXdfcmVhZGwoY3B1aWRfYWRkcik7CisJczNjX2luaXRfY3B1KGlkY29kZSwgY3B1X2lkcywgQVJSQVlfU0laRShjcHVfaWRzKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9kZXYtdWFydC5jIGIvYXJjaC9hcm0vcGxhdC1zNXAvZGV2LXVhcnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hODkzMzFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvZGV2LXVhcnQuYwpAQCAtMCwwICsxLDEzOSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zNXAvZGV2LXVhcnQuYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogQmFzZSBTNVAgVUFSVCByZXNvdXJjZSBhbmQgZGV2aWNlIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorCisgLyogU2VyaWFsIHBvcnQgcmVnaXN0cmF0aW9ucyAqLworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cF91YXJ0MF9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUzVQX1BBX1VBUlQwLAorCQkuZW5kCT0gUzVQX1BBX1VBUlQwICsgUzVQX1NaX1VBUlQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfUzVQX1VBUlRfUlgwLAorCQkuZW5kCT0gSVJRX1M1UF9VQVJUX1JYMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IElSUV9TNVBfVUFSVF9UWDAsCisJCS5lbmQJPSBJUlFfUzVQX1VBUlRfVFgwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVszXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1M1UF9VQVJUX0VSUjAsCisJCS5lbmQJPSBJUlFfUzVQX1VBUlRfRVJSMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzNXBfdWFydDFfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IFM1UF9QQV9VQVJUMSwKKwkJLmVuZAk9IFM1UF9QQV9VQVJUMSArIFM1UF9TWl9VQVJULAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1M1UF9VQVJUX1JYMSwKKwkJLmVuZAk9IElSUV9TNVBfVUFSVF9SWDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJWzJdID0geworCQkuc3RhcnQJPSBJUlFfUzVQX1VBUlRfVFgxLAorCQkuZW5kCT0gSVJRX1M1UF9VQVJUX1RYMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbM10gPSB7CisJCS5zdGFydAk9IElSUV9TNVBfVUFSVF9FUlIxLAorCQkuZW5kCT0gSVJRX1M1UF9VQVJUX0VSUjEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHM1cF91YXJ0Ml9yZXNvdXJjZVtdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUzVQX1BBX1VBUlQyLAorCQkuZW5kCT0gUzVQX1BBX1VBUlQyICsgUzVQX1NaX1VBUlQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfUzVQX1VBUlRfUlgyLAorCQkuZW5kCT0gSVJRX1M1UF9VQVJUX1JYMiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IElSUV9TNVBfVUFSVF9UWDIsCisJCS5lbmQJPSBJUlFfUzVQX1VBUlRfVFgyLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVszXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1M1UF9VQVJUX0VSUjIsCisJCS5lbmQJPSBJUlFfUzVQX1VBUlRfRVJSMiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgczVwX3VhcnQzX3Jlc291cmNlW10gPSB7CisjaWYgQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTID4gMworCVswXSA9IHsKKwkJLnN0YXJ0CT0gUzVQX1BBX1VBUlQzLAorCQkuZW5kCT0gUzVQX1BBX1VBUlQzICsgUzVQX1NaX1VBUlQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfUzVQX1VBUlRfUlgzLAorCQkuZW5kCT0gSVJRX1M1UF9VQVJUX1JYMywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwlbMl0gPSB7CisJCS5zdGFydAk9IElSUV9TNVBfVUFSVF9UWDMsCisJCS5lbmQJPSBJUlFfUzVQX1VBUlRfVFgzLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVszXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX1M1UF9VQVJUX0VSUjMsCisJCS5lbmQJPSBJUlFfUzVQX1VBUlRfRVJSMywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKyNlbmRpZgorfTsKKworc3RydWN0IHMzYzI0eHhfdWFydF9yZXNvdXJjZXMgczVwX3VhcnRfcmVzb3VyY2VzW10gX19pbml0ZGF0YSA9IHsKKwlbMF0gPSB7CisJCS5yZXNvdXJjZXMJPSBzNXBfdWFydDBfcmVzb3VyY2UsCisJCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHM1cF91YXJ0MF9yZXNvdXJjZSksCisJfSwKKwlbMV0gPSB7CisJCS5yZXNvdXJjZXMJPSBzNXBfdWFydDFfcmVzb3VyY2UsCisJCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHM1cF91YXJ0MV9yZXNvdXJjZSksCisJfSwKKwlbMl0gPSB7CisJCS5yZXNvdXJjZXMJPSBzNXBfdWFydDJfcmVzb3VyY2UsCisJCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHM1cF91YXJ0Ml9yZXNvdXJjZSksCisJfSwKKwlbM10gPSB7CisJCS5yZXNvdXJjZXMJPSBzNXBfdWFydDNfcmVzb3VyY2UsCisJCS5ucl9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHM1cF91YXJ0M19yZXNvdXJjZSksCisJfSwKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvaXJxcy5oIGIvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmU3NTdmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L2lycXMuaApAQCAtMCwwICsxLDkwIEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvaXJxcy5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTNVAgQ29tbW9uIElSUSBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fUExBVF9TNVBfSVJRU19ICisjZGVmaW5lIF9fQVNNX1BMQVRfUzVQX0lSUVNfSCBfX0ZJTEVfXworCisvKiB3ZSBrZWVwIHRoZSBmaXJzdCBzZXQgb2YgQ1BVIElSUXMgb3V0IG9mIHRoZSByYW5nZSBvZgorICogdGhlIElTQSBzcGFjZSwgc28gdGhhdCB0aGUgUEMxMDQgaGFzIHRoZW0gdG8gaXRzZWxmCisgKiBhbmQgd2UgZG9uJ3QgZW5kIHVwIGhhdmluZyB0byBkbyBob3JyaWJsZSB0aGluZ3MgdG8gdGhlCisgKiBzdGFuZGFyZCBJU0EgZHJpdmVycy4uLi4KKyAqCisgKiBub3RlLCBzaW5jZSB3ZSdyZSB1c2luZyB0aGUgVklDcywgb3VyIHN0YXJ0IG11c3QgYmUgYQorICogbXVsaXRwbGUgb2YgMzIgdG8gYWxsb3cgdGhlIGNvbW1vbiBjb2RlIHRvIHdvcmsKKyAqLworCisjZGVmaW5lIFM1UF9JUlFfT0ZGU0VUCQkoMzIpCisKKyNkZWZpbmUgUzVQX0lSUSh4KQkJKCh4KSArIFM1UF9JUlFfT0ZGU0VUKQorCisjZGVmaW5lIFM1UF9WSUMwX0JBU0UJCVM1UF9JUlEoMCkKKyNkZWZpbmUgUzVQX1ZJQzFfQkFTRQkJUzVQX0lSUSgzMikKKyNkZWZpbmUgUzVQX1ZJQzJfQkFTRQkJUzVQX0lSUSg2NCkKKyNkZWZpbmUgUzVQX1ZJQzNfQkFTRQkJUzVQX0lSUSg5NikKKworI2RlZmluZSBWSUNfQkFTRSh4KQkJKFM1UF9WSUMwX0JBU0UgKyAoKHgpKjMyKSkKKworI2RlZmluZSBJUlFfVklDMF9CQVNFCQlTNVBfVklDMF9CQVNFCisjZGVmaW5lIElSUV9WSUMxX0JBU0UJCVM1UF9WSUMxX0JBU0UKKyNkZWZpbmUgSVJRX1ZJQzJfQkFTRQkJUzVQX1ZJQzJfQkFTRQorCisvKiBVQVJUIGludGVycnVwdHMsIGVhY2ggVUFSVCBoYXMgNCBpbnR0ZXJ1cHRzIHBlciBjaGFubmVsIHNvCisgKiB1c2UgdGhlIHNwYWNlIGJldHdlZW4gdGhlIElTQSBhbmQgUzNDIG1haW4gaW50ZXJydXB0cy4gTm90ZSwgdGhlc2UKKyAqIGFyZSBub3QgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIFMzQzI0WFggc2VyaWVzISAqLworCisjZGVmaW5lIElSUV9TNVBfVUFSVF9CQVNFMAkoMTYpCisjZGVmaW5lIElSUV9TNVBfVUFSVF9CQVNFMQkoMjApCisjZGVmaW5lIElSUV9TNVBfVUFSVF9CQVNFMgkoMjQpCisjZGVmaW5lIElSUV9TNVBfVUFSVF9CQVNFMwkoMjgpCisKKyNkZWZpbmUgVUFSVF9JUlFfUlhECQkoMCkKKyNkZWZpbmUgVUFSVF9JUlFfRVJSCQkoMSkKKyNkZWZpbmUgVUFSVF9JUlFfVFhECQkoMikKKworI2RlZmluZSBJUlFfUzVQX1VBUlRfUlgwCShJUlFfUzVQX1VBUlRfQkFTRTAgKyBVQVJUX0lSUV9SWEQpCisjZGVmaW5lIElSUV9TNVBfVUFSVF9UWDAJKElSUV9TNVBfVUFSVF9CQVNFMCArIFVBUlRfSVJRX1RYRCkKKyNkZWZpbmUgSVJRX1M1UF9VQVJUX0VSUjAJKElSUV9TNVBfVUFSVF9CQVNFMCArIFVBUlRfSVJRX0VSUikKKworI2RlZmluZSBJUlFfUzVQX1VBUlRfUlgxCShJUlFfUzVQX1VBUlRfQkFTRTEgKyBVQVJUX0lSUV9SWEQpCisjZGVmaW5lIElSUV9TNVBfVUFSVF9UWDEJKElSUV9TNVBfVUFSVF9CQVNFMSArIFVBUlRfSVJRX1RYRCkKKyNkZWZpbmUgSVJRX1M1UF9VQVJUX0VSUjEJKElSUV9TNVBfVUFSVF9CQVNFMSArIFVBUlRfSVJRX0VSUikKKworI2RlZmluZSBJUlFfUzVQX1VBUlRfUlgyCShJUlFfUzVQX1VBUlRfQkFTRTIgKyBVQVJUX0lSUV9SWEQpCisjZGVmaW5lIElSUV9TNVBfVUFSVF9UWDIJKElSUV9TNVBfVUFSVF9CQVNFMiArIFVBUlRfSVJRX1RYRCkKKyNkZWZpbmUgSVJRX1M1UF9VQVJUX0VSUjIJKElSUV9TNVBfVUFSVF9CQVNFMiArIFVBUlRfSVJRX0VSUikKKworI2RlZmluZSBJUlFfUzVQX1VBUlRfUlgzCShJUlFfUzVQX1VBUlRfQkFTRTMgKyBVQVJUX0lSUV9SWEQpCisjZGVmaW5lIElSUV9TNVBfVUFSVF9UWDMJKElSUV9TNVBfVUFSVF9CQVNFMyArIFVBUlRfSVJRX1RYRCkKKyNkZWZpbmUgSVJRX1M1UF9VQVJUX0VSUjMJKElSUV9TNVBfVUFSVF9CQVNFMyArIFVBUlRfSVJRX0VSUikKKworLyogUzNDIGNvbXBhdGliaWx0eSBkZWZpbmVzICovCisjZGVmaW5lIElSUV9TM0NVQVJUX1JYMAkJSVJRX1M1UF9VQVJUX1JYMAorI2RlZmluZSBJUlFfUzNDVUFSVF9SWDEJCUlSUV9TNVBfVUFSVF9SWDEKKyNkZWZpbmUgSVJRX1MzQ1VBUlRfUlgyCQlJUlFfUzVQX1VBUlRfUlgyCisjZGVmaW5lIElSUV9TM0NVQVJUX1JYMwkJSVJRX1M1UF9VQVJUX1JYMworCisvKiBWSUMgYmFzZWQgSVJRcyAqLworCisjZGVmaW5lIFM1UF9JUlFfVklDMCh4KQkJKFM1UF9WSUMwX0JBU0UgKyAoeCkpCisjZGVmaW5lIFM1UF9JUlFfVklDMSh4KQkJKFM1UF9WSUMxX0JBU0UgKyAoeCkpCisjZGVmaW5lIFM1UF9JUlFfVklDMih4KQkJKFM1UF9WSUMyX0JBU0UgKyAoeCkpCisjZGVmaW5lIFM1UF9JUlFfVklDMyh4KQkJKFM1UF9WSUMzX0JBU0UgKyAoeCkpCisKKyNkZWZpbmUgUzVQX1RJTUVSX0lSUSh4KQlTNVBfSVJRKDExICsgKHgpKQorCisjZGVmaW5lIElSUV9USU1FUjAJCVM1UF9USU1FUl9JUlEoMCkKKyNkZWZpbmUgSVJRX1RJTUVSMQkJUzVQX1RJTUVSX0lSUSgxKQorI2RlZmluZSBJUlFfVElNRVIyCQlTNVBfVElNRVJfSVJRKDIpCisjZGVmaW5lIElSUV9USU1FUjMJCVM1UF9USU1FUl9JUlEoMykKKyNkZWZpbmUgSVJRX1RJTUVSNAkJUzVQX1RJTUVSX0lSUSg0KQorCisjZW5kaWYgLyogX19BU01fUExBVF9TNVBfSVJRU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvbWFwLXM1cC5oIGIvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L21hcC1zNXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDgyODUyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L21hcC1zNXAuaApAQCAtMCwwICsxLDM0IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvbWFwLXM1cC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTNVAgLSBNZW1vcnkgbWFwIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fUExBVF9NQVBfUzVQX0gKKyNkZWZpbmUgX19BU01fUExBVF9NQVBfUzVQX0ggX19GSUxFX18KKworI2RlZmluZSBTNVBfVkFfQ0hJUElECQlTM0NfQUREUigweDAwNzAwMDAwKQorI2RlZmluZSBTNVBfVkFfR1BJTwkJUzNDX0FERFIoMHgwMDUwMDAwMCkKKyNkZWZpbmUgUzVQX1ZBX1NZU1RJTUVSCQlTM0NfQUREUigweDAxMjAwMDAwKQorI2RlZmluZSBTNVBfVkFfU1JPTUMJCVMzQ19BRERSKDB4MDExMDAwMDApCisKKyNkZWZpbmUgUzVQX1ZBX1VBUlQwCQkoUzNDX1ZBX1VBUlQgKyAweDApCisjZGVmaW5lIFM1UF9WQV9VQVJUMQkJKFMzQ19WQV9VQVJUICsgMHg0MDApCisjZGVmaW5lIFM1UF9WQV9VQVJUMgkJKFMzQ19WQV9VQVJUICsgMHg4MDApCisjZGVmaW5lIFM1UF9WQV9VQVJUMwkJKFMzQ19WQV9VQVJUICsgMHhDMDApCisKKyNkZWZpbmUgUzNDX1VBUlRfT0ZGU0VUCQkoMHg0MDApCisKKyNkZWZpbmUgVkFfVklDKHgpCQkoUzNDX1ZBX0lSUSArICgoeCkgKiAweDEwMDAwKSkKKyNkZWZpbmUgVkFfVklDMAkJCVZBX1ZJQygwKQorI2RlZmluZSBWQV9WSUMxCQkJVkFfVklDKDEpCisjZGVmaW5lIFZBX1ZJQzIJCQlWQV9WSUMoMikKKyNkZWZpbmUgVkFfVklDMwkJCVZBX1ZJQygzKQorCisjZW5kaWYgLyogX19BU01fUExBVF9NQVBfUzVQX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9wbGwuaCBiL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9wbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDgzMjViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L3BsbC5oCkBAIC0wLDAgKzEsODMgQEAKKy8qIGFyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9wbGwuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogUzVQIFBMTCBjb2RlCisgKgorICogQmFzZWQgb24gYXJjaC9hcm0vcGxhdC1zM2M2NHh4L2luY2x1ZGUvcGxhdC9wbGwuaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjZGVmaW5lIFBMTDQ1WFhfTURJVl9NQVNLCSgweDNGRikKKyNkZWZpbmUgUExMNDVYWF9QRElWX01BU0sJKDB4M0YpCisjZGVmaW5lIFBMTDQ1WFhfU0RJVl9NQVNLCSgweDcpCisjZGVmaW5lIFBMTDQ1WFhfTURJVl9TSElGVAkoMTYpCisjZGVmaW5lIFBMTDQ1WFhfUERJVl9TSElGVAkoOCkKKyNkZWZpbmUgUExMNDVYWF9TRElWX1NISUZUCSgwKQorCisjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CisKK2VudW0gcGxsNDV4eF90eXBlX3QgeworCXBsbF80NTAwLAorCXBsbF80NTAyLAorCXBsbF80NTA4Cit9OworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgczVwX2dldF9wbGw0NXh4KHVuc2lnbmVkIGxvbmcgYmFzZWNsaywgdTMyIHBsbF9jb24sCisJCQkJCSAgICBlbnVtIHBsbDQ1eHhfdHlwZV90IHBsbF90eXBlKQoreworCXUzMiBtZGl2LCBwZGl2LCBzZGl2OworCXU2NCBmdmNvID0gYmFzZWNsazsKKworCW1kaXYgPSAocGxsX2NvbiA+PiBQTEw0NVhYX01ESVZfU0hJRlQpICYgUExMNDVYWF9NRElWX01BU0s7CisJcGRpdiA9IChwbGxfY29uID4+IFBMTDQ1WFhfUERJVl9TSElGVCkgJiBQTEw0NVhYX1BESVZfTUFTSzsKKwlzZGl2ID0gKHBsbF9jb24gPj4gUExMNDVYWF9TRElWX1NISUZUKSAmIFBMTDQ1WFhfU0RJVl9NQVNLOworCisJaWYgKHBsbF90eXBlID09IHBsbF80NTA4KQorCQlzZGl2ID0gc2RpdiAtIDE7CisKKwlmdmNvICo9IG1kaXY7CisJZG9fZGl2KGZ2Y28sIChwZGl2IDw8IHNkaXYpKTsKKworCXJldHVybiAodW5zaWduZWQgbG9uZylmdmNvOworfQorCisjZGVmaW5lIFBMTDkwWFhfTURJVl9NQVNLCSgweEZGKQorI2RlZmluZSBQTEw5MFhYX1BESVZfTUFTSwkoMHgzRikKKyNkZWZpbmUgUExMOTBYWF9TRElWX01BU0sJKDB4NykKKyNkZWZpbmUgUExMOTBYWF9LRElWX01BU0sJKDB4ZmZmZikKKyNkZWZpbmUgUExMOTBYWF9NRElWX1NISUZUCSgxNikKKyNkZWZpbmUgUExMOTBYWF9QRElWX1NISUZUCSg4KQorI2RlZmluZSBQTEw5MFhYX1NESVZfU0hJRlQJKDApCisjZGVmaW5lIFBMTDkwWFhfS0RJVl9TSElGVAkoMCkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHM1cF9nZXRfcGxsOTB4eCh1bnNpZ25lZCBsb25nIGJhc2VjbGssCisJCQkJCSAgICB1MzIgcGxsX2NvbiwgdTMyIHBsbF9jb25rKQoreworCXVuc2lnbmVkIGxvbmcgcmVzdWx0OworCXUzMiBtZGl2LCBwZGl2LCBzZGl2LCBrZGl2OworCXU2NCB0bXA7CisKKwltZGl2ID0gKHBsbF9jb24gPj4gUExMOTBYWF9NRElWX1NISUZUKSAmIFBMTDkwWFhfTURJVl9NQVNLOworCXBkaXYgPSAocGxsX2NvbiA+PiBQTEw5MFhYX1BESVZfU0hJRlQpICYgUExMOTBYWF9QRElWX01BU0s7CisJc2RpdiA9IChwbGxfY29uID4+IFBMTDkwWFhfU0RJVl9TSElGVCkgJiBQTEw5MFhYX1NESVZfTUFTSzsKKwlrZGl2ID0gcGxsX2NvbmsgJiBQTEw5MFhYX0tESVZfTUFTSzsKKworCS8qIFdlIG5lZWQgdG8gbXVsdGlwbGUgYmFzZWNsayBieSBtZGl2ICh0aGUgaW50ZWdlciBwYXJ0KSBhbmQga2RpdgorCSAqIHdoaWNoIGlzIGluIDJeMTZ0aHMsIHNvIHNoaWZ0IG1kaXYgdXAgKGRvZXMgbm90IG92ZXJmbG93KSBhbmQKKwkgKiBhZGQga2RpdiBiZWZvcmUgbXVsdGlwbHlpbmcuIFRoZSB1c2Ugb2YgdG1wIGlzIHRvIGF2b2lkIGFueQorCSAqIG92ZXJmbG93cyBiZWZvcmUgc2hpZnRpbmcgYmFjIGRvd24gaW50byByZXN1bHQgd2hlbiBtdWx0aXBsaW5nCisJICogYnkgdGhlIG1kaXYgYW5kIGtkaXYgcGFpci4KKwkgKi8KKworCXRtcCA9IGJhc2VjbGs7CisJdG1wICo9IChtZGl2IDw8IDE2KSArIGtkaXY7CisJZG9fZGl2KHRtcCwgKHBkaXYgPDwgc2RpdikpOworCXJlc3VsdCA9IHRtcCA+PiAxNjsKKworCXJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvczVwLWNsb2NrLmggYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvczVwLWNsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZmYjhiNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9zNXAtY2xvY2suaApAQCAtMCwwICsxLDQwIEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvczVwLWNsb2NrLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogSGVhZGVyIGZpbGUgZm9yIHM1cCBjbG9jayBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19BU01fUExBVF9TNVBfQ0xPQ0tfSAorI2RlZmluZSBfX0FTTV9QTEFUX1M1UF9DTE9DS19IIF9fRklMRV9fCisKKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2RlZmluZSBHRVRfRElWKGNsaywgZmllbGQpICgoKChjbGspICYgZmllbGQjI19NQVNLKSA+PiBmaWVsZCMjX1NISUZUKSArIDEpCisKKyNkZWZpbmUgY2xrX2Zpbl9hcGxsIGNsa19leHRfeHRhbF9tdXgKKyNkZWZpbmUgY2xrX2Zpbl9tcGxsIGNsa19leHRfeHRhbF9tdXgKKyNkZWZpbmUgY2xrX2Zpbl9lcGxsIGNsa19leHRfeHRhbF9tdXgKKyNkZWZpbmUgY2xrX2Zpbl92cGxsIGNsa19leHRfeHRhbF9tdXgKKworZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX2V4dF94dGFsX211eDsKK2V4dGVybiBzdHJ1Y3QgY2xrIGNsa180OG07CitleHRlcm4gc3RydWN0IGNsayBjbGtfZm91dF9hcGxsOworZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX2ZvdXRfbXBsbDsKK2V4dGVybiBzdHJ1Y3QgY2xrIGNsa19mb3V0X2VwbGw7CitleHRlcm4gc3RydWN0IGNsayBjbGtfYXJtOworZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX3ZwbGw7CisKK2V4dGVybiBzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMgY2xrX3NyY19hcGxsOworZXh0ZXJuIHN0cnVjdCBjbGtzcmNfc291cmNlcyBjbGtfc3JjX21wbGw7CitleHRlcm4gc3RydWN0IGNsa3NyY19zb3VyY2VzIGNsa19zcmNfZXBsbDsKKworZXh0ZXJuIGludCBzNXA2NDQwX2NsazQ4bV9jdHJsKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSk7CitleHRlcm4gaW50IHM1cF9nYXRlY3RybCh2b2lkIF9faW9tZW0gKnJlZywgc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKTsKKworI2VuZGlmIC8qIF9fQVNNX1BMQVRfUzVQX0NMT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9zNXA2NDQwLmggYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvczVwNjQ0MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0Y2Q3NWEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvczVwNjQ0MC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qIGFyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9zNXA2NDQwLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIEhlYWRlciBmaWxlIGZvciBzNXA2NDQwIGNwdSBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyAvKiBDb21tb24gaW5pdCBjb2RlIGZvciBTNVA2NDQwIHJlbGF0ZWQgU29DcyAqLworCitleHRlcm4gdm9pZCBzNXA2NDQwX2NvbW1vbl9pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKK2V4dGVybiB2b2lkIHM1cDY0NDBfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpOworZXh0ZXJuIHZvaWQgczVwNjQ0MF9zZXR1cF9jbG9ja3Modm9pZCk7CisKKyNpZmRlZiBDT05GSUdfQ1BVX1M1UDY0NDAKKworZXh0ZXJuICBpbnQgczVwNjQ0MF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgczVwNjQ0MF9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIHM1cDY0NDBfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHZvaWQgczVwNjQ0MF9pbml0X2Nsb2NrcyhpbnQgeHRhbCk7CisKKyNkZWZpbmUgczVwNjQ0MF9pbml0X3VhcnRzIHM1cDY0NDBfY29tbW9uX2luaXRfdWFydHMKKworI2Vsc2UKKyNkZWZpbmUgczVwNjQ0MF9pbml0X2Nsb2NrcyBOVUxMCisjZGVmaW5lIHM1cDY0NDBfaW5pdF91YXJ0cyBOVUxMCisjZGVmaW5lIHM1cDY0NDBfbWFwX2lvIE5VTEwKKyNkZWZpbmUgczVwNjQ0MF9pbml0IE5VTEwKKyNlbmRpZgorCisvKiBTNVA2NDQwIHRpbWVyICovCisKK2V4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIHM1cDY0NDBfdGltZXI7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvczVwNjQ0Mi5oIGIvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L3M1cDY0NDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yjg4MDEzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L3M1cDY0NDIuaApAQCAtMCwwICsxLDMzIEBACisvKiBhcmNoL2FybS9wbGF0LXM1cC9pbmNsdWRlL3BsYXQvczVwNjQ0Mi5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBIZWFkZXIgZmlsZSBmb3IgczVwNjQ0MiBjcHUgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisvKiBDb21tb24gaW5pdCBjb2RlIGZvciBTNVA2NDQyIHJlbGF0ZWQgU29DcyAqLworCitleHRlcm4gdm9pZCBzNXA2NDQyX2NvbW1vbl9pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKK2V4dGVybiB2b2lkIHM1cDY0NDJfcmVnaXN0ZXJfY2xvY2tzKHZvaWQpOworZXh0ZXJuIHZvaWQgczVwNjQ0Ml9zZXR1cF9jbG9ja3Modm9pZCk7CisKKyNpZmRlZiBDT05GSUdfQ1BVX1M1UDY0NDIKKworZXh0ZXJuICBpbnQgczVwNjQ0Ml9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgczVwNjQ0Ml9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIHM1cDY0NDJfbWFwX2lvKHZvaWQpOworZXh0ZXJuIHZvaWQgczVwNjQ0Ml9pbml0X2Nsb2NrcyhpbnQgeHRhbCk7CisKKyNkZWZpbmUgczVwNjQ0Ml9pbml0X3VhcnRzIHM1cDY0NDJfY29tbW9uX2luaXRfdWFydHMKKworI2Vsc2UKKyNkZWZpbmUgczVwNjQ0Ml9pbml0X2Nsb2NrcyBOVUxMCisjZGVmaW5lIHM1cDY0NDJfaW5pdF91YXJ0cyBOVUxMCisjZGVmaW5lIHM1cDY0NDJfbWFwX2lvIE5VTEwKKyNkZWZpbmUgczVwNjQ0Ml9pbml0IE5VTEwKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L3M1cHYyMTAuaCBiL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9zNXB2MjEwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM5M2EwYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL2luY2x1ZGUvcGxhdC9zNXB2MjEwLmgKQEAgLTAsMCArMSwzMyBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zNXAvaW5jbHVkZS9wbGF0L3M1cHYyMTAuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogSGVhZGVyIGZpbGUgZm9yIHM1cHYyMTAgY3B1IHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworLyogQ29tbW9uIGluaXQgY29kZSBmb3IgUzVQVjIxMCByZWxhdGVkIFNvQ3MgKi8KKworZXh0ZXJuIHZvaWQgczVwdjIxMF9jb21tb25faW5pdF91YXJ0cyhzdHJ1Y3QgczNjMjQxMF91YXJ0Y2ZnICpjZmcsIGludCBubyk7CitleHRlcm4gdm9pZCBzNXB2MjEwX3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKTsKK2V4dGVybiB2b2lkIHM1cHYyMTBfc2V0dXBfY2xvY2tzKHZvaWQpOworCisjaWZkZWYgQ09ORklHX0NQVV9TNVBWMjEwCisKK2V4dGVybiAgaW50IHM1cHYyMTBfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIHM1cHYyMTBfaW5pdF9pcnEodm9pZCk7CitleHRlcm4gdm9pZCBzNXB2MjEwX21hcF9pbyh2b2lkKTsKK2V4dGVybiB2b2lkIHM1cHYyMTBfaW5pdF9jbG9ja3MoaW50IHh0YWwpOworCisjZGVmaW5lIHM1cHYyMTBfaW5pdF91YXJ0cyBzNXB2MjEwX2NvbW1vbl9pbml0X3VhcnRzCisKKyNlbHNlCisjZGVmaW5lIHM1cHYyMTBfaW5pdF9jbG9ja3MgTlVMTAorI2RlZmluZSBzNXB2MjEwX2luaXRfdWFydHMgTlVMTAorI2RlZmluZSBzNXB2MjEwX21hcF9pbyBOVUxMCisjZGVmaW5lIHM1cHYyMTBfaW5pdCBOVUxMCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwL2lycS5jIGIvYXJjaC9hcm0vcGxhdC1zNXAvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjVlMWViNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL2lycS5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qIGFyY2gvYXJtL3BsYXQtczVwL2lycS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBTNVAgLSBJbnRlcnJ1cHQgaGFuZGxpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXRpbWVyLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXNlcmlhbC5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisjaW5jbHVkZSA8cGxhdC9pcnEtdmljLXRpbWVyLmg+CisjaW5jbHVkZSA8cGxhdC9pcnEtdWFydC5oPgorCisvKgorICogTm90ZSwgd2UgbWFrZSB1c2Ugb2YgdGhlIGZhY3QgdGhhdCB0aGUgcGFyZW50IElSUXMsIElSUV9VQVJUWzAuLjNdCisgKiBhcmUgY29uc2VjdXRpdmUgd2hlbiBsb29raW5nIHVwIHRoZSBpbnRlcnJ1cHQgaW4gdGhlIGRlbXV4IHJvdXRpbmVzLgorICovCitzdGF0aWMgc3RydWN0IHMzY191YXJ0X2lycSB1YXJ0X2lycXNbXSA9IHsKKwlbMF0gPSB7CisJCS5yZWdzCQk9IFM1UF9WQV9VQVJUMCwKKwkJLmJhc2VfaXJxCT0gSVJRX1M1UF9VQVJUX0JBU0UwLAorCQkucGFyZW50X2lycQk9IElSUV9VQVJUMCwKKwl9LAorCVsxXSA9IHsKKwkJLnJlZ3MJCT0gUzVQX1ZBX1VBUlQxLAorCQkuYmFzZV9pcnEJPSBJUlFfUzVQX1VBUlRfQkFTRTEsCisJCS5wYXJlbnRfaXJxCT0gSVJRX1VBUlQxLAorCX0sCisJWzJdID0geworCQkucmVncwkJPSBTNVBfVkFfVUFSVDIsCisJCS5iYXNlX2lycQk9IElSUV9TNVBfVUFSVF9CQVNFMiwKKwkJLnBhcmVudF9pcnEJPSBJUlFfVUFSVDIsCisJfSwKKyNpZiBDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFMgPiAzCisJWzNdID0geworCQkucmVncwkJPSBTNVBfVkFfVUFSVDMsCisJCS5iYXNlX2lycQk9IElSUV9TNVBfVUFSVF9CQVNFMywKKwkJLnBhcmVudF9pcnEJPSBJUlFfVUFSVDMsCisJfSwKKyNlbmRpZgorfTsKKwordm9pZCBfX2luaXQgczVwX2luaXRfaXJxKHUzMiAqdmljLCB1MzIgbnVtX3ZpYykKK3sKKwlpbnQgaXJxOworCisJLyogaW5pdGlhbGl6ZSB0aGUgVklDcyAqLworCWZvciAoaXJxID0gMDsgaXJxIDwgbnVtX3ZpYzsgaXJxKyspCisJCXZpY19pbml0KFZBX1ZJQyhpcnEpLCBWSUNfQkFTRShpcnEpLCB2aWNbaXJxXSwgMCk7CisKKwlzM2NfaW5pdF92aWNfdGltZXJfaXJxKElSUV9USU1FUjBfVklDLCBJUlFfVElNRVIwKTsKKwlzM2NfaW5pdF92aWNfdGltZXJfaXJxKElSUV9USU1FUjFfVklDLCBJUlFfVElNRVIxKTsKKwlzM2NfaW5pdF92aWNfdGltZXJfaXJxKElSUV9USU1FUjJfVklDLCBJUlFfVElNRVIyKTsKKwlzM2NfaW5pdF92aWNfdGltZXJfaXJxKElSUV9USU1FUjNfVklDLCBJUlFfVElNRVIzKTsKKwlzM2NfaW5pdF92aWNfdGltZXJfaXJxKElSUV9USU1FUjRfVklDLCBJUlFfVElNRVI0KTsKKworCXMzY19pbml0X3VhcnRfaXJxcyh1YXJ0X2lycXMsIEFSUkFZX1NJWkUodWFydF9pcnFzKSk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cC9zZXR1cC1pMmMwLmMgYi9hcmNoL2FybS9wbGF0LXM1cC9zZXR1cC1pMmMwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdhNjZlMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwL3NldHVwLWkyYzAuYwpAQCAtMCwwICsxLDI1IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXM1cC9zZXR1cC1pMmMwLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgU2Ftc3VuZyBFbGVjdHJvbmljcyBDby4sIEx0ZC4KKyAqCQlodHRwOi8vd3d3LnNhbXN1bmcuY29tLworICoKKyAqIEkyQzAgR1BJTyBjb25maWd1cmF0aW9uLgorICoKKyAqIEJhc2VkIG9uIHBsYXQtczNjNjR4eC9zZXR1cC1pMmMwLmMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2U7IC8qIGRvbid0IG5lZWQgdGhlIGNvbnRlbnRzICovCisKKyNpbmNsdWRlIDxwbGF0L2lpYy5oPgorCit2b2lkIHMzY19pMmMwX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwkvKiBXaWxsIGJlIHBvcHVsYXRlZCBsYXRlciAqLworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L0tjb25maWcgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvS2NvbmZpZwppbmRleCBiN2I5ZTkxLi5jN2NjZGYyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cGMxeHgvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvS2NvbmZpZwpAQCAtMTEsNiArMTEsOSBAQAogCXNlbGVjdCBBUk1fVklDCiAJc2VsZWN0IE5PX0lPUE9SVAogCXNlbGVjdCBBUkNIX1JFUVVJUkVfR1BJT0xJQgorCXNlbGVjdCBTQU1TVU5HX0NMS1NSQworCXNlbGVjdCBTQU1TVU5HX0lSUV9VQVJUCisJc2VsZWN0IFNBTVNVTkdfSVJRX1ZJQ19USU1FUgogCXNlbGVjdCBTM0NfR1BJT19UUkFDSwogCXNlbGVjdCBTM0NfR1BJT19QVUxMX1VQRE9XTgogCXNlbGVjdCBTM0NfR1BJT19DRkdfUzNDMjRYWApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2Nsb2NrLmMgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvY2xvY2suYwppbmRleCAyNmMyMWQ4Li4zODdmMjMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cGMxeHgvY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvY2xvY2suYwpAQCAtNjQsMjUgKzY0LDEzIEBACiAJLnJhdGUJCT0gNTQwMDAwMDAsCiB9OwogCi1zdGF0aWMgaW50IGNsa19kZWZhdWx0X3NldHJhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCi17Ci0JY2xrLT5yYXRlID0gcmF0ZTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjbGtfZHVtbXlfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RydWN0IGNsayBjbGtfaGQwID0gewogCS5uYW1lCQk9ICJoY2xrZDAiLAogCS5pZAkJPSAtMSwKIAkucmF0ZQkJPSAwLAogCS5wYXJlbnQJCT0gTlVMTCwKIAkuY3RybGJpdAk9IDAsCi0JLnNldF9yYXRlCT0gY2xrX2RlZmF1bHRfc2V0cmF0ZSwKLQkuZW5hYmxlCQk9IGNsa19kdW1teV9lbmFibGUsCisJLm9wcwkJPSAmY2xrX29wc19kZWZfc2V0cmF0ZSwKIH07CiAKIHN0cnVjdCBjbGsgY2xrX3BkMCA9IHsKQEAgLTkxLDggKzc5LDcgQEAKIAkucmF0ZQkJPSAwLAogCS5wYXJlbnQJCT0gTlVMTCwKIAkuY3RybGJpdAk9IDAsCi0JLnNldF9yYXRlCT0gY2xrX2RlZmF1bHRfc2V0cmF0ZSwKLQkuZW5hYmxlCQk9IGNsa19kdW1teV9lbmFibGUsCisJLm9wcwkJPSAmY2xrX29wc19kZWZfc2V0cmF0ZSwKIH07CiAKIHN0YXRpYyBpbnQgczVwYzF4eF9jbGtfZ2F0ZSh2b2lkIF9faW9tZW0gKnJlZywgc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKQpAQCAtNjg2LDYgKzY3Myw4IEBACiBzdGF0aWMgc3RydWN0IGNsayAqY2xrc1tdIF9faW5pdGRhdGEgPSB7CiAJJmNsa19leHQsCiAJJmNsa19lcGxsLAorCSZjbGtfcGQwLAorCSZjbGtfaGQwLAogCSZjbGtfMjdtLAogCSZjbGtfNDhtLAogCSZjbGtfNTRtLApAQCAtNzAwLDE2ICs2ODksOCBAQAogCiAJczNjMjR4eF9yZWdpc3Rlcl9jbG9ja3MoY2xrcywgQVJSQVlfU0laRShjbGtzKSk7CiAKLQljbGtwID0gczVwYzEwMF9pbml0X2Nsb2NrczsKLQlzaXplID0gQVJSQVlfU0laRShzNXBjMTAwX2luaXRfY2xvY2tzKTsKLQotCWZvciAocHRyID0gMDsgcHRyIDwgc2l6ZTsgcHRyKyssIGNsa3ArKykgewotCQlyZXQgPSBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKGNsa3ApOwotCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXMgKCVkKVxuIiwKLQkJCSAgICAgICBjbGtwLT5uYW1lLCByZXQpOwotCQl9Ci0JfQorCXMzY19yZWdpc3Rlcl9jbG9ja3MoczVwYzEwMF9pbml0X2Nsb2NrcywKKwkJCSAgICBBUlJBWV9TSVpFKHM1cGMxMDBfaW5pdF9jbG9ja3MpKTsKIAogCWNsa3AgPSBzNXBjMTAwX2luaXRfY2xvY2tzX2Rpc2FibGU7CiAJc2l6ZSA9IEFSUkFZX1NJWkUoczVwYzEwMF9pbml0X2Nsb2Nrc19kaXNhYmxlKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9kZXYtdWFydC5jIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2Rldi11YXJ0LmMKaW5kZXggZjc0OWJjNS4uNTg2Yzk1YyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2Rldi11YXJ0LmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2Rldi11YXJ0LmMKQEAgLTE0MywzMiArMTQzLDMgQEAKIAkJLm5yX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoczVwYzF4eF91YXJ0M19yZXNvdXJjZSksCiAJfSwKIH07Ci0KLS8qIHVhcnQgZGV2aWNlcyAqLwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2MyNHh4X3VhcnRfZGV2aWNlMCA9IHsKLQkuaWQJCT0gMCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzI0eHhfdWFydF9kZXZpY2UxID0gewotCS5pZAkJPSAxLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjMjR4eF91YXJ0X2RldmljZTIgPSB7Ci0JLmlkCQk9IDIsCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2MyNHh4X3VhcnRfZGV2aWNlMyA9IHsKLQkuaWQJCT0gMywKLX07Ci0KLXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnMzYzI0eHhfdWFydF9zcmNbNF0gPSB7Ci0JJnMzYzI0eHhfdWFydF9kZXZpY2UwLAotCSZzM2MyNHh4X3VhcnRfZGV2aWNlMSwKLQkmczNjMjR4eF91YXJ0X2RldmljZTIsCi0JJnMzYzI0eHhfdWFydF9kZXZpY2UzLAotfTsKLQotc3RydWN0IHBsYXRmb3JtX2RldmljZSAqczNjMjR4eF91YXJ0X2RldnNbNF0gPSB7Ci19OwotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cGMxeHgvZ3Bpby1jb25maWcuYyBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9ncGlvLWNvbmZpZy5jCmluZGV4IGJiYTY3NWQuLmE0ZjY3ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9ncGlvLWNvbmZpZy5jCisrKyBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9ncGlvLWNvbmZpZy5jCkBAIC0xNiw3ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxtYWNoL2dwaW8tY29yZS5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1jb3JlLmg+CiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy1zNXBjMXh4Lmg+CiAKIHM1cF9ncGlvX2RydnN0cl90IHM1cF9ncGlvX2dldF9kcnZzdHIodW5zaWduZWQgaW50IHBpbiwgdW5zaWduZWQgaW50IG9mZikKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9ncGlvbGliLmMgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvZ3Bpb2xpYi5jCmluZGV4IGZhY2I0MTAuLjFmZmM1N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9ncGlvbGliLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2dwaW9saWIuYwpAQCAtMTcsOCArMTcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPG1hY2gvbWFwLmg+Ci0jaW5jbHVkZSA8bWFjaC9ncGlvLWNvcmUuaD4KIAorI2luY2x1ZGUgPHBsYXQvZ3Bpby1jb3JlLmg+CiAjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgogI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmctaGVscGVycy5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy1ncGlvLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L2lycXMuaCBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9pbmNsdWRlL3BsYXQvaXJxcy5oCmluZGV4IGVmODczNjMuLjQwOWM4MDQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L2lycXMuaAorKysgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L2lycXMuaApAQCAtODgsMTEgKzg4LDExIEBACiAjZGVmaW5lIElSUV9NRE1BCQlTNVBDMVhYX0lSUV9WSUMwKDE4KQogI2RlZmluZSBJUlFfUERNQTAJCVM1UEMxWFhfSVJRX1ZJQzAoMTkpCiAjZGVmaW5lIElSUV9QRE1BMQkJUzVQQzFYWF9JUlFfVklDMCgyMCkKLSNkZWZpbmUgSVJRX1RJTUVSMAkJUzVQQzFYWF9JUlFfVklDMCgyMSkKLSNkZWZpbmUgSVJRX1RJTUVSMQkJUzVQQzFYWF9JUlFfVklDMCgyMikKLSNkZWZpbmUgSVJRX1RJTUVSMgkJUzVQQzFYWF9JUlFfVklDMCgyMykKLSNkZWZpbmUgSVJRX1RJTUVSMwkJUzVQQzFYWF9JUlFfVklDMCgyNCkKLSNkZWZpbmUgSVJRX1RJTUVSNAkJUzVQQzFYWF9JUlFfVklDMCgyNSkKKyNkZWZpbmUgSVJRX1RJTUVSMF9WSUMJCVM1UEMxWFhfSVJRX1ZJQzAoMjEpCisjZGVmaW5lIElSUV9USU1FUjFfVklDCQlTNVBDMVhYX0lSUV9WSUMwKDIyKQorI2RlZmluZSBJUlFfVElNRVIyX1ZJQwkJUzVQQzFYWF9JUlFfVklDMCgyMykKKyNkZWZpbmUgSVJRX1RJTUVSM19WSUMJCVM1UEMxWFhfSVJRX1ZJQzAoMjQpCisjZGVmaW5lIElSUV9USU1FUjRfVklDCQlTNVBDMVhYX0lSUV9WSUMwKDI1KQogI2RlZmluZSBJUlFfU1lTVElNRVIJCVM1UEMxWFhfSVJRX1ZJQzAoMjYpCiAjZGVmaW5lIElSUV9XRFQJCQlTNVBDMVhYX0lSUV9WSUMwKDI3KQogI2RlZmluZSBJUlFfUlRDX0FMQVJNCQlTNVBDMVhYX0lSUV9WSUMwKDI4KQpAQCAtMTcxLDggKzE3MSwxNSBAQAogI2RlZmluZSBJUlFfU0RNSVJRCQlTNVBDMVhYX0lSUV9WSUMyKDMwKQogI2RlZmluZSBJUlFfU0RNRklRCQlTNVBDMVhYX0lSUV9WSUMyKDMxKQogCisjZGVmaW5lIElSUV9USU1FUih4KQkJKElSUV9TRE1GSVEgKyAxICsgKHgpKQorI2RlZmluZSBJUlFfVElNRVIwCQlJUlFfVElNRVIoMCkKKyNkZWZpbmUgSVJRX1RJTUVSMQkJSVJRX1RJTUVSKDEpCisjZGVmaW5lIElSUV9USU1FUjIJCUlSUV9USU1FUigyKQorI2RlZmluZSBJUlFfVElNRVIzCQlJUlFfVElNRVIoMykKKyNkZWZpbmUgSVJRX1RJTUVSNAkJSVJRX1RJTUVSKDQpCisKIC8qIEV4dGVybmFsIGludGVycnVwdCAqLwotI2RlZmluZSBTM0NfSVJRX0VJTlRfQkFTRQkoSVJRX1NETUZJUSArIDEpCisjZGVmaW5lIFMzQ19JUlFfRUlOVF9CQVNFCShJUlFfU0RNRklRICsgNikKIAogI2RlZmluZSBTM0NfRUlOVCh4KQkJKFMzQ19JUlFfRUlOVF9CQVNFICsgKHggLSAxNikpCiAjZGVmaW5lIElSUV9FSU5UKHgpCQkoeCA8IDE2ID8gSVJRX0VJTlQwICsgeCA6IFMzQ19FSU5UKHgpKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2luY2x1ZGUvcGxhdC9yZWdzLWNsb2NrLmggYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L3JlZ3MtY2xvY2suaAppbmRleCBjNWNjODZlLi4yNGRlYzRlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L3JlZ3MtY2xvY2suaAorKysgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaW5jbHVkZS9wbGF0L3JlZ3MtY2xvY2suaApAQCAtNjEsNzMgKzYxLDEwIEBACiAjZGVmaW5lIFM1UEMxMDBfRVBMTF9NQVNLCQkweGZmZmZmZmZmCiAjZGVmaW5lIFM1UEMxMDBfRVBMTFZBTChfbSwgX3AsIF9zKQkoKF9tKSA8PCAxNiB8ICgoX3ApIDw8IDgpIHwgKChfcykpKQogCi0vKiBDTEtTUkMwICovCi0jZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMF9BUExMX01BU0sJCSgweDE8PDApCi0jZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMF9BUExMX1NISUZUCQkoMCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMwX01QTExfTUFTSwkJKDB4MTw8NCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMwX01QTExfU0hJRlQJCSg0KQotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzBfRVBMTF9NQVNLCQkoMHgxPDw4KQotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzBfRVBMTF9TSElGVAkJKDgpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMF9IUExMX01BU0sJCSgweDE8PDEyKQotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzBfSFBMTF9TSElGVAkJKDEyKQotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzBfQU1NVVhfTUFTSwkJKDB4MTw8MTYpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMF9BTU1VWF9TSElGVAkJKDE2KQotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzBfSFJFRl9NQVNLCQkoMHgxPDwyMCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMwX0hSRUZfU0hJRlQJCSgyMCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMwX09ORU5BTkRfTUFTSwkoMHgxPDwyNCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMwX09ORU5BTkRfU0hJRlQJKDI0KQotCi0KLS8qIENMS1NSQzEgKi8KLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMxX1VBUlRfTUFTSwkJKDB4MTw8MCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMxX1VBUlRfU0hJRlQJCSgwKQotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzFfU1BJMF9NQVNLCQkoMHgzPDw0KQotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzFfU1BJMF9TSElGVAkJKDQpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMV9TUEkxX01BU0sJCSgweDM8PDgpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMV9TUEkxX1NISUZUCQkoOCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMxX1NQSTJfTUFTSwkJKDB4Mzw8MTIpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMV9TUEkyX1NISUZUCQkoMTIpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMV9JUkRBX01BU0sJCSgweDM8PDE2KQotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzFfSVJEQV9TSElGVAkJKDE2KQotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzFfVUhPU1RfTUFTSwkJKDB4Mzw8MjApCi0jZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMV9VSE9TVF9TSElGVAkJKDIwKQotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzFfQ0xLNDhNX01BU0sJCSgweDE8PDI0KQorLyogQ0xLU1JDMC4uQ0xLU1JDMyAtPiBtb3N0bHkgcmVtb3ZlZCBkdWUgdG8gY2xrc3JjIHVwZGF0ZXMgKi8KKyNkZWZpbmUgUzVQQzEwMF9DTEtTUkMxX0NMSzQ4TV9NQVNLCSgweDE8PDI0KQogI2RlZmluZSBTNVBDMTAwX0NMS1NSQzFfQ0xLNDhNX1NISUZUCSgyNCkKIAotLyogQ0xLU1JDMiAqLwotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzJfTU1DMF9NQVNLCQkoMHgzPDwwKQotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzJfTU1DMF9TSElGVAkJKDApCi0jZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMl9NTUMxX01BU0sJCSgweDM8PDQpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMl9NTUMxX1NISUZUCQkoNCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMyX01NQzJfTUFTSwkJKDB4Mzw8OCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMyX01NQzJfU0hJRlQJCSg4KQotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzJfTENEX01BU0sJCSgweDM8PDEyKQotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzJfTENEX1NISUZUCQkoMTIpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMl9GSU1DMF9NQVNLCQkoMHgzPDwxNikKLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMyX0ZJTUMwX1NISUZUCQkoMTYpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMl9GSU1DMV9NQVNLCQkoMHgzPDwyMCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMyX0ZJTUMxX1NISUZUCQkoMjApCi0jZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMl9GSU1DMl9NQVNLCQkoMHgzPDwyNCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMyX0ZJTUMyX1NISUZUCQkoMjQpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLU1JDMl9NSVhFUl9NQVNLCQkoMHgzPDwyOCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMyX01JWEVSX1NISUZUCQkoMjgpCi0KLS8qIENMS1NSQzMgKi8KLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMzX1BXSV9NQVNLCQkoMHgzPDwwKQotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzNfUFdJX1NISUZUCQkoMCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMzX0hDTEtEMl9NQVNLCQkoMHgxPDw0KQotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzNfSENMS0QyX1NISUZUCSg0KQotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzNfSTJTRDJfTUFTSwkJKDB4Mzw8OCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMzX0kyU0QyX1NISUZUCQkoOCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMzX0FVRElPMF9NQVNLCQkoMHg3PDwxMikKLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMzX0FVRElPMF9TSElGVAkoMTIpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLU1JDM19BVURJTzFfTUFTSwkJKDB4Nzw8MTYpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLU1JDM19BVURJTzFfU0hJRlQJKDE2KQotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzNfQVVESU8yX01BU0sJCSgweDc8PDIwKQotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzNfQVVESU8yX1NISUZUCSgyMCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtTUkMzX1NQRElGX01BU0sJCSgweDM8PDI0KQotI2RlZmluZSBTNVBDMTAwX0NMS1NSQzNfU1BESUZfU0hJRlQJCSgyNCkKLQogLyogQ0xLRElWMCAqLwogI2RlZmluZSBTNVBDMTAwX0NMS0RJVjBfQVBMTF9NQVNLCQkoMHgxPDwwKQogI2RlZmluZSBTNVBDMTAwX0NMS0RJVjBfQVBMTF9TSElGVAkJKDApCkBAIC0xNDAsNyArNzcsNyBAQAogI2RlZmluZSBTNVBDMTAwX0NMS0RJVjBfU0VDU1NfTUFTSwkJKDB4Nzw8MTYpCiAjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMF9TRUNTU19TSElGVAkJKDE2KQogCi0vKiBDTEtESVYxICovCisvKiBDTEtESVYxIChPbmVOQU5EIGNsb2NrIG9ubHkgdXNlZCBpbiBvbmUgcGxhY2UsIHJlbW92ZWQpICovCiAjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMV9BUExMMl9NQVNLCQkoMHg3PDwwKQogI2RlZmluZSBTNVBDMTAwX0NMS0RJVjFfQVBMTDJfU0hJRlQJCSgwKQogI2RlZmluZSBTNVBDMTAwX0NMS0RJVjFfTVBMTF9NQVNLCQkoMHgzPDw0KQpAQCAtMTUxLDU2ICs4OCwxMiBAQAogI2RlZmluZSBTNVBDMTAwX0NMS0RJVjFfRDFfU0hJRlQJCSgxMikKICNkZWZpbmUgUzVQQzEwMF9DTEtESVYxX1BDTEtEMV9NQVNLCQkoMHg3PDwxNikKICNkZWZpbmUgUzVQQzEwMF9DTEtESVYxX1BDTEtEMV9TSElGVAkoMTYpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLRElWMV9PTkVOQU5EX01BU0sJKDB4Mzw8MjApCi0jZGVmaW5lIFM1UEMxMDBfQ0xLRElWMV9PTkVOQU5EX1NISUZUCSgyMCkKICNkZWZpbmUgUzVQQzEwMF9DTEtESVYxX0NBTV9NQVNLCQkoMHgxRjw8MjQpCiAjZGVmaW5lIFM1UEMxMDBfQ0xLRElWMV9DQU1fU0hJRlQJCSgyNCkKIAotLyogQ0xLRElWMiAqLwotI2RlZmluZSBTNVBDMTAwX0NMS0RJVjJfVUFSVF9NQVNLCQkoMHg3PDwwKQotI2RlZmluZSBTNVBDMTAwX0NMS0RJVjJfVUFSVF9TSElGVAkJKDApCi0jZGVmaW5lIFM1UEMxMDBfQ0xLRElWMl9TUEkwX01BU0sJCSgweGY8PDQpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLRElWMl9TUEkwX1NISUZUCQkoNCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtESVYyX1NQSTFfTUFTSwkJKDB4Zjw8OCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtESVYyX1NQSTFfU0hJRlQJCSg4KQotI2RlZmluZSBTNVBDMTAwX0NMS0RJVjJfU1BJMl9NQVNLCQkoMHhmPDwxMikKLSNkZWZpbmUgUzVQQzEwMF9DTEtESVYyX1NQSTJfU0hJRlQJCSgxMikKLSNkZWZpbmUgUzVQQzEwMF9DTEtESVYyX0lSREFfTUFTSwkJKDB4Zjw8MTYpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLRElWMl9JUkRBX1NISUZUCQkoMTYpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLRElWMl9VSE9TVF9NQVNLCQkoMHhmPDwyMCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtESVYyX1VIT1NUX1NISUZUCQkoMjApCi0KLS8qIENMS0RJVjMgKi8KLSNkZWZpbmUgUzVQQzEwMF9DTEtESVYzX01NQzBfTUFTSwkJKDB4Zjw8MCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtESVYzX01NQzBfU0hJRlQJCSgwKQotI2RlZmluZSBTNVBDMTAwX0NMS0RJVjNfTU1DMV9NQVNLCQkoMHhmPDw0KQotI2RlZmluZSBTNVBDMTAwX0NMS0RJVjNfTU1DMV9TSElGVAkJKDQpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLRElWM19NTUMyX01BU0sJCSgweGY8PDgpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLRElWM19NTUMyX1NISUZUCQkoOCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtESVYzX0xDRF9NQVNLCQkoMHhmPDwxMikKLSNkZWZpbmUgUzVQQzEwMF9DTEtESVYzX0xDRF9TSElGVAkJKDEyKQotI2RlZmluZSBTNVBDMTAwX0NMS0RJVjNfRklNQzBfTUFTSwkJKDB4Zjw8MTYpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLRElWM19GSU1DMF9TSElGVAkJKDE2KQotI2RlZmluZSBTNVBDMTAwX0NMS0RJVjNfRklNQzFfTUFTSwkJKDB4Zjw8MjApCi0jZGVmaW5lIFM1UEMxMDBfQ0xLRElWM19GSU1DMV9TSElGVAkJKDIwKQotI2RlZmluZSBTNVBDMTAwX0NMS0RJVjNfRklNQzJfTUFTSwkJKDB4Zjw8MjQpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLRElWM19GSU1DMl9TSElGVAkJKDI0KQotI2RlZmluZSBTNVBDMTAwX0NMS0RJVjNfSERNSV9NQVNLCQkoMHhmPDwyOCkKLSNkZWZpbmUgUzVQQzEwMF9DTEtESVYzX0hETUlfU0hJRlQJCSgyOCkKLQotLyogQ0xLRElWNCAqLwotI2RlZmluZSBTNVBDMTAwX0NMS0RJVjRfUFdJX01BU0sJCSgweDc8PDApCi0jZGVmaW5lIFM1UEMxMDBfQ0xLRElWNF9QV0lfU0hJRlQJCSgwKQotI2RlZmluZSBTNVBDMTAwX0NMS0RJVjRfSENMS0QyX01BU0sJCSgweDc8PDQpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLRElWNF9IQ0xLRDJfU0hJRlQJKDQpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLRElWNF9JMlNEMl9NQVNLCQkoMHhmPDw4KQotI2RlZmluZSBTNVBDMTAwX0NMS0RJVjRfSTJTRDJfU0hJRlQJCSg4KQotI2RlZmluZSBTNVBDMTAwX0NMS0RJVjRfQVVESU8wX01BU0sJCSgweGY8PDEyKQotI2RlZmluZSBTNVBDMTAwX0NMS0RJVjRfQVVESU8wX1NISUZUCSgxMikKLSNkZWZpbmUgUzVQQzEwMF9DTEtESVY0X0FVRElPMV9NQVNLCQkoMHhmPDwxNikKLSNkZWZpbmUgUzVQQzEwMF9DTEtESVY0X0FVRElPMV9TSElGVAkoMTYpCi0jZGVmaW5lIFM1UEMxMDBfQ0xLRElWNF9BVURJTzJfTUFTSwkJKDB4Zjw8MjApCi0jZGVmaW5lIFM1UEMxMDBfQ0xLRElWNF9BVURJTzJfU0hJRlQJKDIwKQorLyogQ0xLRElWMiA9PiByZW1vdmVkIGluIGNsa3NyYyB1cGRhdGUgKi8KKy8qIENMS0RJVjMgPT4gcmVtb3ZlZCBpbiBjbGtzcmMgdXBkYXRlLCBvciBub3QgbmVlZGVkICovCisvKiBDTEtESVY0ID0+IHJlbW92ZWQgaW4gY2xrc3JjIHVwZGF0ZSwgb3Igbm90IG5lZWRlZCAqLwogCiAvKiBIQ0xLRDAvUENMS0QwIENsb2NrIEdhdGUgMCBSZWdpc3RlcnMgKi8KICNkZWZpbmUgUzVQQzEwMF9DTEtHQVRFX0QwMF9JTlRDCQkoMTw8MCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9pcnEuYyBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9pcnEuYwppbmRleCBlNDRmZDA0Li5iZmM1MjQ4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXM1cGMxeHgvaXJxLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L2lycS5jCkBAIC0yMCw4NyArMjAsMTQgQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUvdmljLmg+CiAKICNpbmNsdWRlIDxtYWNoL21hcC5oPgotI2luY2x1ZGUgPHBsYXQvcmVncy10aW1lci5oPgorI2luY2x1ZGUgPHBsYXQvaXJxLXZpYy10aW1lci5oPgorI2luY2x1ZGUgPHBsYXQvaXJxLXVhcnQuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogCi0vKiBUaW1lciBpbnRlcnJ1cHQgaGFuZGxpbmcgKi8KLQotc3RhdGljIHZvaWQgczNjX2lycV9kZW11eF90aW1lcih1bnNpZ25lZCBpbnQgYmFzZV9pcnEsIHVuc2lnbmVkIGludCBzdWJfaXJxKQotewotCWdlbmVyaWNfaGFuZGxlX2lycShzdWJfaXJxKTsKLX0KLQotc3RhdGljIHZvaWQgczNjX2lycV9kZW11eF90aW1lcjAodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCXMzY19pcnFfZGVtdXhfdGltZXIoaXJxLCBJUlFfVElNRVIwKTsKLX0KLQotc3RhdGljIHZvaWQgczNjX2lycV9kZW11eF90aW1lcjEodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCXMzY19pcnFfZGVtdXhfdGltZXIoaXJxLCBJUlFfVElNRVIxKTsKLX0KLQotc3RhdGljIHZvaWQgczNjX2lycV9kZW11eF90aW1lcjIodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCXMzY19pcnFfZGVtdXhfdGltZXIoaXJxLCBJUlFfVElNRVIyKTsKLX0KLQotc3RhdGljIHZvaWQgczNjX2lycV9kZW11eF90aW1lcjModW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCXMzY19pcnFfZGVtdXhfdGltZXIoaXJxLCBJUlFfVElNRVIzKTsKLX0KLQotc3RhdGljIHZvaWQgczNjX2lycV9kZW11eF90aW1lcjQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCXMzY19pcnFfZGVtdXhfdGltZXIoaXJxLCBJUlFfVElNRVI0KTsKLX0KLQotLyogV2UgYXNzdW1lIHRoZSBJUlFfVElNRVIwLi5JUlFfVElNRVI0IHJhbmdlIGlzIGNvbnRpbnVvdXMuICovCi0KLXN0YXRpYyB2b2lkIHMzY19pcnFfdGltZXJfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQotewotCXUzMiByZWcgPSBfX3Jhd19yZWFkbChTM0M2NFhYX1RJTlRfQ1NUQVQpOwotCi0JcmVnICY9IDB4MWY7ICAvKiBtYXNrIG91dCBwZW5kaW5nIGludGVycnVwdHMgKi8KLQlyZWcgJj0gfigxIDw8IChpcnEgLSBJUlFfVElNRVIwKSk7Ci0JX19yYXdfd3JpdGVsKHJlZywgUzNDNjRYWF9USU5UX0NTVEFUKTsKLX0KLQotc3RhdGljIHZvaWQgczNjX2lycV90aW1lcl91bm1hc2sodW5zaWduZWQgaW50IGlycSkKLXsKLQl1MzIgcmVnID0gX19yYXdfcmVhZGwoUzNDNjRYWF9USU5UX0NTVEFUKTsKLQotCXJlZyAmPSAweDFmOyAgLyogbWFzayBvdXQgcGVuZGluZyBpbnRlcnJ1cHRzICovCi0JcmVnIHw9IDEgPDwgKGlycSAtIElSUV9USU1FUjApOwotCV9fcmF3X3dyaXRlbChyZWcsIFMzQzY0WFhfVElOVF9DU1RBVCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzY19pcnFfdGltZXJfYWNrKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdTMyIHJlZyA9IF9fcmF3X3JlYWRsKFMzQzY0WFhfVElOVF9DU1RBVCk7Ci0KLQlyZWcgJj0gMHgxZjsgIC8qIG1hc2sgb3V0IHBlbmRpbmcgaW50ZXJydXB0cyAqLwotCXJlZyB8PSAoMSA8PCA1KSA8PCAoaXJxIC0gSVJRX1RJTUVSMCk7Ci0JX19yYXdfd3JpdGVsKHJlZywgUzNDNjRYWF9USU5UX0NTVEFUKTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzM2NfaXJxX3RpbWVyID0gewotCS5uYW1lCQk9ICJzM2MtdGltZXIiLAotCS5tYXNrCQk9IHMzY19pcnFfdGltZXJfbWFzaywKLQkudW5tYXNrCQk9IHMzY19pcnFfdGltZXJfdW5tYXNrLAotCS5hY2sJCT0gczNjX2lycV90aW1lcl9hY2ssCi19OwotCi1zdHJ1Y3QgdWFydF9pcnEgewotCXZvaWQgX19pb21lbQkqcmVnczsKLQl1bnNpZ25lZCBpbnQJIGJhc2VfaXJxOwotCXVuc2lnbmVkIGludAkgcGFyZW50X2lycTsKLX07Ci0KIC8qIE5vdGUsIHdlIG1ha2UgdXNlIG9mIHRoZSBmYWN0IHRoYXQgdGhlIHBhcmVudCBJUlFzLCBJUlFfVUFSVFswLi4zXQogICogYXJlIGNvbnNlY3V0aXZlIHdoZW4gbG9va2luZyB1cCB0aGUgaW50ZXJydXB0IGluIHRoZSBkZW11eCByb3V0aW5lcy4KICAqLwotc3RhdGljIHN0cnVjdCB1YXJ0X2lycSB1YXJ0X2lycXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgczNjX3VhcnRfaXJxIHVhcnRfaXJxc1tdID0gewogCVswXSA9IHsKIAkJLnJlZ3MJCT0gKHZvaWQgKilTM0NfVkFfVUFSVDAsCiAJCS5iYXNlX2lycQk9IElSUV9TM0NVQVJUX0JBU0UwLApAQCAtMTIzLDExMyArNTAsOSBAQAogCX0sCiB9OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqczNjX2lycV91YXJ0X2Jhc2UodW5zaWduZWQgaW50IGlycSkKLXsKLQlzdHJ1Y3QgdWFydF9pcnEgKnVpcnEgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwotCXJldHVybiB1aXJxLT5yZWdzOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBzM2NfaXJxX3VhcnRfYml0KHVuc2lnbmVkIGludCBpcnEpCi17Ci0JcmV0dXJuIGlycSAmIDM7Ci19Ci0KLS8qIFVBUlQgaW50ZXJydXB0IHJlZ2lzdGVycywgbm90IHdvcnRoIGFkZGluZyB0byBzZXBlcmF0ZSBpbmNsdWRlIGhlYWRlciAqLwotI2RlZmluZSBTM0M2NFhYX1VJTlRQCTB4MzAKLSNkZWZpbmUgUzNDNjRYWF9VSU5UU1AJMHgzNAotI2RlZmluZSBTM0M2NFhYX1VJTlRNCTB4MzgKLQotc3RhdGljIHZvaWQgczNjX2lycV91YXJ0X21hc2sodW5zaWduZWQgaW50IGlycSkKLXsKLQl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzM2NfaXJxX3VhcnRfYmFzZShpcnEpOwotCXVuc2lnbmVkIGludCBiaXQgPSBzM2NfaXJxX3VhcnRfYml0KGlycSk7Ci0JdTMyIHJlZzsKLQotCXJlZyA9IF9fcmF3X3JlYWRsKHJlZ3MgKyBTM0M2NFhYX1VJTlRNKTsKLQlyZWcgfD0gKDEgPDwgYml0KTsKLQlfX3Jhd193cml0ZWwocmVnLCByZWdzICsgUzNDNjRYWF9VSU5UTSk7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzY19pcnFfdWFydF9tYXNrYWNrKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jdm9pZCBfX2lvbWVtICpyZWdzID0gczNjX2lycV91YXJ0X2Jhc2UoaXJxKTsKLQl1bnNpZ25lZCBpbnQgYml0ID0gczNjX2lycV91YXJ0X2JpdChpcnEpOwotCXUzMiByZWc7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChyZWdzICsgUzNDNjRYWF9VSU5UTSk7Ci0JcmVnIHw9ICgxIDw8IGJpdCk7Ci0JX19yYXdfd3JpdGVsKHJlZywgcmVncyArIFMzQzY0WFhfVUlOVE0pOwotCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgcmVncyArIFMzQzY0WFhfVUlOVFApOwotfQotCi1zdGF0aWMgdm9pZCBzM2NfaXJxX3VhcnRfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCi17Ci0Jdm9pZCBfX2lvbWVtICpyZWdzID0gczNjX2lycV91YXJ0X2Jhc2UoaXJxKTsKLQl1bnNpZ25lZCBpbnQgYml0ID0gczNjX2lycV91YXJ0X2JpdChpcnEpOwotCXUzMiByZWc7Ci0KLQlyZWcgPSBfX3Jhd19yZWFkbChyZWdzICsgUzNDNjRYWF9VSU5UTSk7Ci0JcmVnICY9IH4oMSA8PCBiaXQpOwotCV9fcmF3X3dyaXRlbChyZWcsIHJlZ3MgKyBTM0M2NFhYX1VJTlRNKTsKLX0KLQotc3RhdGljIHZvaWQgczNjX2lycV91YXJ0X2Fjayh1bnNpZ25lZCBpbnQgaXJxKQotewotCXZvaWQgX19pb21lbSAqcmVncyA9IHMzY19pcnFfdWFydF9iYXNlKGlycSk7Ci0JdW5zaWduZWQgaW50IGJpdCA9IHMzY19pcnFfdWFydF9iaXQoaXJxKTsKLQotCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgcmVncyArIFMzQzY0WFhfVUlOVFApOwotfQotCi1zdGF0aWMgdm9pZCBzM2NfaXJxX2RlbXV4X3VhcnQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCXN0cnVjdCB1YXJ0X2lycSAqdWlycSA9ICZ1YXJ0X2lycXNbaXJxIC0gSVJRX1VBUlQwXTsKLQl1MzIgcGVuZCA9IF9fcmF3X3JlYWRsKHVpcnEtPnJlZ3MgKyBTM0M2NFhYX1VJTlRQKTsKLQlpbnQgYmFzZSA9IHVpcnEtPmJhc2VfaXJxOwotCi0JaWYgKHBlbmQgJiAoMSA8PCAwKSkKLQkJZ2VuZXJpY19oYW5kbGVfaXJxKGJhc2UpOwotCWlmIChwZW5kICYgKDEgPDwgMSkpCi0JCWdlbmVyaWNfaGFuZGxlX2lycShiYXNlICsgMSk7Ci0JaWYgKHBlbmQgJiAoMSA8PCAyKSkKLQkJZ2VuZXJpY19oYW5kbGVfaXJxKGJhc2UgKyAyKTsKLQlpZiAocGVuZCAmICgxIDw8IDMpKQotCQlnZW5lcmljX2hhbmRsZV9pcnEoYmFzZSArIDMpOwotfQotCi1zdGF0aWMgc3RydWN0IGlycV9jaGlwIHMzY19pcnFfdWFydCA9IHsKLQkubmFtZQkJPSAiczNjLXVhcnQiLAotCS5tYXNrCQk9IHMzY19pcnFfdWFydF9tYXNrLAotCS51bm1hc2sJCT0gczNjX2lycV91YXJ0X3VubWFzaywKLQkubWFza19hY2sJPSBzM2NfaXJxX3VhcnRfbWFza2FjaywKLQkuYWNrCQk9IHMzY19pcnFfdWFydF9hY2ssCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgczVwYzF4eF91YXJ0X2lycShzdHJ1Y3QgdWFydF9pcnEgKnVpcnEpCi17Ci0Jdm9pZCBfX2lvbWVtICpyZWdfYmFzZSA9IHVpcnEtPnJlZ3M7Ci0JdW5zaWduZWQgaW50IGlycTsKLQlpbnQgb2ZmczsKLQotCS8qIG1hc2sgYWxsIGludGVycnVwdHMgYXQgdGhlIHN0YXJ0LiAqLwotCV9fcmF3X3dyaXRlbCgweGYsIHJlZ19iYXNlICsgUzNDNjRYWF9VSU5UTSk7Ci0KLQlmb3IgKG9mZnMgPSAwOyBvZmZzIDwgMzsgb2ZmcysrKSB7Ci0JCWlycSA9IHVpcnEtPmJhc2VfaXJxICsgb2ZmczsKLQotCQlzZXRfaXJxX2NoaXAoaXJxLCAmczNjX2lycV91YXJ0KTsKLQkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCB1aXJxKTsKLQkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7Ci0JCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKLQl9Ci0KLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcih1aXJxLT5wYXJlbnRfaXJxLCBzM2NfaXJxX2RlbXV4X3VhcnQpOwotfQotCiB2b2lkIF9faW5pdCBzNXBjMXh4X2luaXRfaXJxKHUzMiAqdmljX3ZhbGlkLCBpbnQgbnVtKQogewogCWludCBpOwotCWludCB1YXJ0LCBpcnE7CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGluaXRpYWxpc2luZyBpbnRlcnJ1cHRzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTI0MCwyMCArNjMsMTMgQEAKIAogCS8qIGFkZCB0aGUgdGltZXIgc3ViLWlycXMgKi8KIAotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9USU1FUjAsIHMzY19pcnFfZGVtdXhfdGltZXIwKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfVElNRVIxLCBzM2NfaXJxX2RlbXV4X3RpbWVyMSk7Ci0Jc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX1RJTUVSMiwgczNjX2lycV9kZW11eF90aW1lcjIpOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9USU1FUjMsIHMzY19pcnFfZGVtdXhfdGltZXIzKTsKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfVElNRVI0LCBzM2NfaXJxX2RlbXV4X3RpbWVyNCk7CisJczNjX2luaXRfdmljX3RpbWVyX2lycShJUlFfVElNRVIwX1ZJQywgSVJRX1RJTUVSMCk7CisJczNjX2luaXRfdmljX3RpbWVyX2lycShJUlFfVElNRVIxX1ZJQywgSVJRX1RJTUVSMSk7CisJczNjX2luaXRfdmljX3RpbWVyX2lycShJUlFfVElNRVIyX1ZJQywgSVJRX1RJTUVSMik7CisJczNjX2luaXRfdmljX3RpbWVyX2lycShJUlFfVElNRVIzX1ZJQywgSVJRX1RJTUVSMyk7CisJczNjX2luaXRfdmljX3RpbWVyX2lycShJUlFfVElNRVI0X1ZJQywgSVJRX1RJTUVSNCk7CiAKLQlmb3IgKGlycSA9IElSUV9USU1FUjA7IGlycSA8PSBJUlFfVElNRVI0OyBpcnErKykgewotCQlzZXRfaXJxX2NoaXAoaXJxLCAmczNjX2lycV90aW1lcik7Ci0JCXNldF9pcnFfaGFuZGxlcihpcnEsIGhhbmRsZV9sZXZlbF9pcnEpOwotCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7Ci0JfQotCi0JZm9yICh1YXJ0ID0gMDsgdWFydCA8IEFSUkFZX1NJWkUodWFydF9pcnFzKTsgdWFydCsrKQotCQlzNXBjMXh4X3VhcnRfaXJxKCZ1YXJ0X2lycXNbdWFydF0pOworCXMzY19pbml0X3VhcnRfaXJxcyh1YXJ0X2lycXMsIEFSUkFZX1NJWkUodWFydF9pcnFzKSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L3M1cGMxMDAtY2xvY2suYyBiL2FyY2gvYXJtL3BsYXQtczVwYzF4eC9zNXBjMTAwLWNsb2NrLmMKaW5kZXggYjQzNmQ0NC4uMmJmNmM1NyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zNXBjMXh4L3M1cGMxMDAtY2xvY2suYworKysgYi9hcmNoL2FybS9wbGF0LXM1cGMxeHgvczVwYzEwMC1jbG9jay5jCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlIDxwbGF0L3JlZ3MtY2xvY2suaD4KICNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jbG9jay1jbGtzcmMuaD4KICNpbmNsdWRlIDxwbGF0L2NwdS5oPgogI2luY2x1ZGUgPHBsYXQvcGxsLmg+CiAjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CkBAIC01MSwyMyArNTIsNiBAQAogI2RlZmluZSBjbGtfZm91dF9tcGxsCWNsa19tcGxsCiAjZGVmaW5lIGNsa192Y2xrXzU0bQljbGtfNTRtCiAKLXN0cnVjdCBjbGtfc291cmNlcyB7Ci0JdW5zaWduZWQgaW50CW5yX3NvdXJjZXM7Ci0Jc3RydWN0IGNsawkqKnNvdXJjZXM7Ci19OwotCi1zdHJ1Y3QgY2xrc3JjX2NsayB7Ci0Jc3RydWN0IGNsawkJY2xrOwotCXVuc2lnbmVkIGludAkJbWFzazsKLQl1bnNpZ25lZCBpbnQJCXNoaWZ0OwotCi0Jc3RydWN0IGNsa19zb3VyY2VzCSpzb3VyY2VzOwotCi0JdW5zaWduZWQgaW50CQlkaXZpZGVyX3NoaWZ0OwotCXZvaWQgX19pb21lbQkJKnJlZ19kaXZpZGVyOwotCXZvaWQgX19pb21lbQkJKnJlZ19zb3VyY2U7Ci19OwotCiAvKiBBUExMICovCiBzdGF0aWMgc3RydWN0IGNsayBjbGtfZm91dF9hcGxsID0gewogCS5uYW1lCQk9ICJmb3V0X2FwbGwiLApAQCAtODAsNyArNjQsNyBAQAogCVsxXSA9ICZjbGtfZm91dF9hcGxsLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtfc3JjX2FwbGwgPSB7CitzdGF0aWMgc3RydWN0IGNsa3NyY19zb3VyY2VzIGNsa19zcmNfYXBsbCA9IHsKIAkuc291cmNlcwk9IGNsa19zcmNfYXBsbF9saXN0LAogCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtfc3JjX2FwbGxfbGlzdCksCiB9OwpAQCAtOTAsMTAgKzc0LDggQEAKIAkJLm5hbWUJCT0gIm1vdXRfYXBsbCIsCiAJCS5pZAkJPSAtMSwKIAl9LAotCS5zaGlmdAkJPSBTNVBDMTAwX0NMS1NSQzBfQVBMTF9TSElGVCwKLQkubWFzawkJPSBTNVBDMTAwX0NMS1NSQzBfQVBMTF9NQVNLLAogCS5zb3VyY2VzCT0gJmNsa19zcmNfYXBsbCwKLQkucmVnX3NvdXJjZQk9IFM1UEMxMDBfQ0xLU1JDMCwKKwkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UEMxMDBfQ0xLU1JDMCwgLnNoaWZ0ID0gMCwgLnNpemUgPSAxLCB9LAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgczVwYzEwMF9jbGtfZG91dF9hcGxsX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKQEAgLTExMSw3ICs5Myw5IEBACiAJLm5hbWUJCT0gImRvdXRfYXBsbCIsCiAJLmlkCQk9IC0xLAogCS5wYXJlbnQJCT0gJmNsa19tb3V0X2FwbGwuY2xrLAotCS5nZXRfcmF0ZQk9IHM1cGMxMDBfY2xrX2RvdXRfYXBsbF9nZXRfcmF0ZSwKKwkub3BzCQk9ICYoc3RydWN0IGNsa19vcHMpIHsKKwkJLmdldF9yYXRlCT0gczVwYzEwMF9jbGtfZG91dF9hcGxsX2dldF9yYXRlLAorCX0sCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzNXBjMTAwX2Nsa19hcm1fZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQpAQCAtMTY1LDkgKzE0OSwxMSBAQAogCS5uYW1lCQk9ICJhcm1jbGsiLAogCS5pZAkJPSAtMSwKIAkucGFyZW50CQk9ICZjbGtfZG91dF9hcGxsLAotCS5nZXRfcmF0ZQk9IHM1cGMxMDBfY2xrX2FybV9nZXRfcmF0ZSwKLQkuc2V0X3JhdGUJPSBzNXBjMTAwX2Nsa19hcm1fc2V0X3JhdGUsCi0JLnJvdW5kX3JhdGUJPSBzNXBjMTAwX2Nsa19hcm1fcm91bmRfcmF0ZSwKKwkub3BzCQk9ICYoc3RydWN0IGNsa19vcHMpIHsKKwkJLmdldF9yYXRlCT0gczVwYzEwMF9jbGtfYXJtX2dldF9yYXRlLAorCQkuc2V0X3JhdGUJPSBzNXBjMTAwX2Nsa19hcm1fc2V0X3JhdGUsCisJCS5yb3VuZF9yYXRlCT0gczVwYzEwMF9jbGtfYXJtX3JvdW5kX3JhdGUsCisJfSwKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHM1cGMxMDBfY2xrX2RvdXRfZDBfYnVzX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKQEAgLTE4NSw3ICsxNzEsOSBAQAogCS5uYW1lCQk9ICJkb3V0X2QwX2J1cyIsCiAJLmlkCQk9IC0xLAogCS5wYXJlbnQJCT0gJmNsa19hcm0sCi0JLmdldF9yYXRlCT0gczVwYzEwMF9jbGtfZG91dF9kMF9idXNfZ2V0X3JhdGUsCisJLm9wcwkJPSAmKHN0cnVjdCBjbGtfb3BzKSB7CisJCS5nZXRfcmF0ZQk9IHM1cGMxMDBfY2xrX2RvdXRfZDBfYnVzX2dldF9yYXRlLAorCX0sCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzNXBjMTAwX2Nsa19kb3V0X3BjbGtkMF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCkBAIC0yMDMsNyArMTkxLDkgQEAKIAkubmFtZQkJPSAiZG91dF9wY2xrZDAiLAogCS5pZAkJPSAtMSwKIAkucGFyZW50CQk9ICZjbGtfZG91dF9kMF9idXMsCi0JLmdldF9yYXRlCT0gczVwYzEwMF9jbGtfZG91dF9wY2xrZDBfZ2V0X3JhdGUsCisJLm9wcwkJPSAmKHN0cnVjdCBjbGtfb3BzKSB7CisJCS5nZXRfcmF0ZQk9IHM1cGMxMDBfY2xrX2RvdXRfcGNsa2QwX2dldF9yYXRlLAorCX0sCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzNXBjMTAwX2Nsa19kb3V0X2FwbGwyX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKQEAgLTIyMSw3ICsyMTEsOSBAQAogCS5uYW1lCQk9ICJkb3V0X2FwbGwyIiwKIAkuaWQJCT0gLTEsCiAJLnBhcmVudAkJPSAmY2xrX21vdXRfYXBsbC5jbGssCi0JLmdldF9yYXRlCT0gczVwYzEwMF9jbGtfZG91dF9hcGxsMl9nZXRfcmF0ZSwKKwkub3BzCQk9ICYoc3RydWN0IGNsa19vcHMpIHsKKwkJLmdldF9yYXRlCT0gczVwYzEwMF9jbGtfZG91dF9hcGxsMl9nZXRfcmF0ZSwKKwl9LAogfTsKIAogLyogTVBMTCAqLwpAQCAtMjMwLDcgKzIyMiw3IEBACiAJWzFdID0gJmNsa19mb3V0X21wbGwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsa19zb3VyY2VzIGNsa19zcmNfbXBsbCA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMgY2xrX3NyY19tcGxsID0gewogCS5zb3VyY2VzCT0gY2xrX3NyY19tcGxsX2xpc3QsCiAJLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa19zcmNfbXBsbF9saXN0KSwKIH07CkBAIC0yNDAsMTAgKzIzMiw4IEBACiAJCS5uYW1lCQk9ICJtb3V0X21wbGwiLAogCQkuaWQJCT0gLTEsCiAJfSwKLQkuc2hpZnQJCT0gUzVQQzEwMF9DTEtTUkMwX01QTExfU0hJRlQsCi0JLm1hc2sJCT0gUzVQQzEwMF9DTEtTUkMwX01QTExfTUFTSywKIAkuc291cmNlcwk9ICZjbGtfc3JjX21wbGwsCi0JLnJlZ19zb3VyY2UJPSBTNVBDMTAwX0NMS1NSQzAsCisJLnJlZ19zcmMgPSB7IC5yZWcgPSBTNVBDMTAwX0NMS1NSQzAsIC5zaGlmdCA9IDQsIC5zaXplID0gMSwgfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzZXRfYW1fbGlzdFtdID0gewpAQCAtMjUxLDcgKzI0MSw3IEBACiAJWzFdID0gJmNsa19kb3V0X2FwbGwyLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtfc3JjX2FtID0geworc3RhdGljIHN0cnVjdCBjbGtzcmNfc291cmNlcyBjbGtfc3JjX2FtID0gewogCS5zb3VyY2VzCT0gY2xrc2V0X2FtX2xpc3QsCiAJLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa3NldF9hbV9saXN0KSwKIH07CkBAIC0yNjEsMTAgKzI1MSw4IEBACiAJCS5uYW1lCQk9ICJtb3V0X2FtIiwKIAkJLmlkCQk9IC0xLAogCX0sCi0JLnNoaWZ0CQk9IFM1UEMxMDBfQ0xLU1JDMF9BTU1VWF9TSElGVCwKLQkubWFzawkJPSBTNVBDMTAwX0NMS1NSQzBfQU1NVVhfTUFTSywKIAkuc291cmNlcwk9ICZjbGtfc3JjX2FtLAotCS5yZWdfc291cmNlCT0gUzVQQzEwMF9DTEtTUkMwLAorCS5yZWdfc3JjID0geyAucmVnID0gUzVQQzEwMF9DTEtTUkMwLCAuc2hpZnQgPSAxNiwgLnNpemUgPSAxLCB9LAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgczVwYzEwMF9jbGtfZG91dF9kMV9idXNfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQpAQCAtMjg0LDcgKzI3Miw5IEBACiAJLm5hbWUJCT0gImRvdXRfZDFfYnVzIiwKIAkuaWQJCT0gLTEsCiAJLnBhcmVudAkJPSAmY2xrX21vdXRfYW0uY2xrLAotCS5nZXRfcmF0ZQk9IHM1cGMxMDBfY2xrX2RvdXRfZDFfYnVzX2dldF9yYXRlLAorCS5vcHMJCT0gJihzdHJ1Y3QgY2xrX29wcykgeworCQkuZ2V0X3JhdGUJPSBzNXBjMTAwX2Nsa19kb3V0X2QxX2J1c19nZXRfcmF0ZSwKKwl9LAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NldF9vbmVuYW5kX2xpc3RbXSA9IHsKQEAgLTI5Miw3ICsyODIsNyBAQAogCVsxXSA9ICZjbGtfZG91dF9kMV9idXMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsa19zb3VyY2VzIGNsa19zcmNfb25lbmFuZCA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMgY2xrX3NyY19vbmVuYW5kID0gewogCS5zb3VyY2VzCT0gY2xrc2V0X29uZW5hbmRfbGlzdCwKIAkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrc2V0X29uZW5hbmRfbGlzdCksCiB9OwpAQCAtMzAyLDEwICsyOTIsOCBAQAogCQkubmFtZQkJPSAibW91dF9vbmVuYW5kIiwKIAkJLmlkCQk9IC0xLAogCX0sCi0JLnNoaWZ0CQk9IFM1UEMxMDBfQ0xLU1JDMF9PTkVOQU5EX1NISUZULAotCS5tYXNrCQk9IFM1UEMxMDBfQ0xLU1JDMF9PTkVOQU5EX01BU0ssCiAJLnNvdXJjZXMJPSAmY2xrX3NyY19vbmVuYW5kLAotCS5yZWdfc291cmNlCT0gUzVQQzEwMF9DTEtTUkMwLAorCS5yZWdfc3JjID0geyAucmVnID0gUzVQQzEwMF9DTEtTUkMwLCAuc2hpZnQgPSAyNCwgLnNpemUgPSAxLCB9LAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgczVwYzEwMF9jbGtfZG91dF9wY2xrZDFfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQpAQCAtMzI1LDcgKzMxMyw5IEBACiAJLm5hbWUJCT0gImRvdXRfcGNsa2QxIiwKIAkuaWQJCT0gLTEsCiAJLnBhcmVudAkJPSAmY2xrX2RvdXRfZDFfYnVzLAotCS5nZXRfcmF0ZQk9IHM1cGMxMDBfY2xrX2RvdXRfcGNsa2QxX2dldF9yYXRlLAorCS5vcHMJCT0gJihzdHJ1Y3QgY2xrX29wcykgeworCQkuZ2V0X3JhdGUJPSBzNXBjMTAwX2Nsa19kb3V0X3BjbGtkMV9nZXRfcmF0ZSwKKwl9LAogfTsKIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgczVwYzEwMF9jbGtfZG91dF9tcGxsMl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCkBAIC0zNDUsNyArMzM1LDkgQEAKIAkubmFtZQkJPSAiZG91dF9tcGxsMiIsCiAJLmlkCQk9IC0xLAogCS5wYXJlbnQJCT0gJmNsa19tb3V0X2FtLmNsaywKLQkuZ2V0X3JhdGUJPSBzNXBjMTAwX2Nsa19kb3V0X21wbGwyX2dldF9yYXRlLAorCS5vcHMJCT0gJihzdHJ1Y3QgY2xrX29wcykgeworCQkuZ2V0X3JhdGUJPSBzNXBjMTAwX2Nsa19kb3V0X21wbGwyX2dldF9yYXRlLAorCX0sCiB9OwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzNXBjMTAwX2Nsa19kb3V0X2NhbV9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCkBAIC0zNjUsNyArMzU3LDkgQEAKIAkubmFtZQkJPSAiZG91dF9jYW0iLAogCS5pZAkJPSAtMSwKIAkucGFyZW50CQk9ICZjbGtfZG91dF9tcGxsMiwKLQkuZ2V0X3JhdGUJPSBzNXBjMTAwX2Nsa19kb3V0X2NhbV9nZXRfcmF0ZSwKKwkub3BzCQk9ICYoc3RydWN0IGNsa19vcHMpIHsKKwkJLmdldF9yYXRlCT0gczVwYzEwMF9jbGtfZG91dF9jYW1fZ2V0X3JhdGUsCisJfSwKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHM1cGMxMDBfY2xrX2RvdXRfbXBsbF9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCkBAIC0zODUsNyArMzc5LDkgQEAKIAkubmFtZQkJPSAiZG91dF9tcGxsIiwKIAkuaWQJCT0gLTEsCiAJLnBhcmVudAkJPSAmY2xrX21vdXRfYW0uY2xrLAotCS5nZXRfcmF0ZQk9IHM1cGMxMDBfY2xrX2RvdXRfbXBsbF9nZXRfcmF0ZSwKKwkub3BzCQk9ICYoc3RydWN0IGNsa19vcHMpIHsKKwkJLmdldF9yYXRlCT0gczVwYzEwMF9jbGtfZG91dF9tcGxsX2dldF9yYXRlLAorCX0sCiB9OwogCiAvKiBFUExMICovCkBAIC0zOTksNyArMzk1LDcgQEAKIAlbMV0gPSAmY2xrX2ZvdXRfZXBsbCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrX3NvdXJjZXMgY2xrX3NyY19lcGxsID0geworc3RhdGljIHN0cnVjdCBjbGtzcmNfc291cmNlcyBjbGtfc3JjX2VwbGwgPSB7CiAJLnNvdXJjZXMJPSBjbGtfc3JjX2VwbGxfbGlzdCwKIAkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrX3NyY19lcGxsX2xpc3QpLAogfTsKQEAgLTQwOSwxMCArNDA1LDggQEAKIAkJLm5hbWUJCT0gIm1vdXRfZXBsbCIsCiAJCS5pZAkJPSAtMSwKIAl9LAotCS5zaGlmdAkJPSBTNVBDMTAwX0NMS1NSQzBfRVBMTF9TSElGVCwKLQkubWFzawkJPSBTNVBDMTAwX0NMS1NSQzBfRVBMTF9NQVNLLAotCS5zb3VyY2VzCT0gJmNsa19zcmNfZXBsbCwKLQkucmVnX3NvdXJjZQk9IFM1UEMxMDBfQ0xLU1JDMCwKKwkuc291cmNlcyA9ICZjbGtfc3JjX2VwbGwsCisJLnJlZ19zcmMgPSB7IC5yZWcgPSBTNVBDMTAwX0NMS1NSQzAsIC5zaGlmdCA9IDgsIC5zaXplID0gMSwgfSwKIH07CiAKIC8qIEhQTEwgKi8KQEAgLTQyNiw3ICs0MjAsNyBAQAogCVsxXSA9ICZjbGtfZm91dF9ocGxsLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtfc3JjX2hwbGwgPSB7CitzdGF0aWMgc3RydWN0IGNsa3NyY19zb3VyY2VzIGNsa19zcmNfaHBsbCA9IHsKIAkuc291cmNlcwk9IGNsa19zcmNfaHBsbF9saXN0LAogCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtfc3JjX2hwbGxfbGlzdCksCiB9OwpAQCAtNDM2LDEwICs0MzAsOCBAQAogCQkubmFtZQkJPSAibW91dF9ocGxsIiwKIAkJLmlkCQk9IC0xLAogCX0sCi0JLnNoaWZ0CQk9IFM1UEMxMDBfQ0xLU1JDMF9IUExMX1NISUZULAotCS5tYXNrCQk9IFM1UEMxMDBfQ0xLU1JDMF9IUExMX01BU0ssCi0JLnNvdXJjZXMJPSAmY2xrX3NyY19ocGxsLAotCS5yZWdfc291cmNlCT0gUzVQQzEwMF9DTEtTUkMwLAorCS5zb3VyY2VzID0gJmNsa19zcmNfaHBsbCwKKwkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UEMxMDBfQ0xLU1JDMCwgLnNoaWZ0ID0gMTIsIC5zaXplID0gMSwgfSwKIH07CiAKIC8qIFBlcmlwaGVyYWxzICovCkBAIC00NTQsMTkwICs0NDYsNiBAQAogICogaGF2ZSBhIGNvbW1vbiBwYXJlbnQgZGl2aXNvciBzbyBhcmUgbm90IGluY2x1ZGVkIGhlcmUuCiAgKi8KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrc3JjX2NsayAqdG9fY2xrc3JjKHN0cnVjdCBjbGsgKmNsaykKLXsKLQlyZXR1cm4gY29udGFpbmVyX29mKGNsaywgc3RydWN0IGNsa3NyY19jbGssIGNsayk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHM1cGMxMDBfZ2V0cmF0ZV9jbGtzcmMoc3RydWN0IGNsayAqY2xrKQotewotCXN0cnVjdCBjbGtzcmNfY2xrICpzY2xrID0gdG9fY2xrc3JjKGNsayk7Ci0JdW5zaWduZWQgbG9uZyByYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQl1MzIgY2xrZGl2ID0gX19yYXdfcmVhZGwoc2Nsay0+cmVnX2RpdmlkZXIpOwotCi0JY2xrZGl2ID4+PSBzY2xrLT5kaXZpZGVyX3NoaWZ0OwotCWNsa2RpdiAmPSAweGY7Ci0JY2xrZGl2Kys7Ci0KLQlyYXRlIC89IGNsa2RpdjsKLQlyZXR1cm4gcmF0ZTsKLX0KLQotc3RhdGljIGludCBzNXBjMTAwX3NldHJhdGVfY2xrc3JjKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQotewotCXN0cnVjdCBjbGtzcmNfY2xrICpzY2xrID0gdG9fY2xrc3JjKGNsayk7Ci0Jdm9pZCBfX2lvbWVtICpyZWcgPSBzY2xrLT5yZWdfZGl2aWRlcjsKLQl1bnNpZ25lZCBpbnQgZGl2OwotCXUzMiB2YWw7Ci0KLQlyYXRlID0gY2xrX3JvdW5kX3JhdGUoY2xrLCByYXRlKTsKLQlkaXYgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gcmF0ZTsKLQlpZiAoZGl2ID4gMTYpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdmFsID0gX19yYXdfcmVhZGwocmVnKTsKLQl2YWwgJj0gfigweGYgPDwgc2Nsay0+ZGl2aWRlcl9zaGlmdCk7Ci0JdmFsIHw9IChkaXYgLSAxKSA8PCBzY2xrLT5kaXZpZGVyX3NoaWZ0OwotCV9fcmF3X3dyaXRlbCh2YWwsIHJlZyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzNXBjMTAwX3NldHBhcmVudF9jbGtzcmMoc3RydWN0IGNsayAqY2xrLCBzdHJ1Y3QgY2xrICpwYXJlbnQpCi17Ci0Jc3RydWN0IGNsa3NyY19jbGsgKnNjbGsgPSB0b19jbGtzcmMoY2xrKTsKLQlzdHJ1Y3QgY2xrX3NvdXJjZXMgKnNyY3MgPSBzY2xrLT5zb3VyY2VzOwotCXUzMiBjbGtzcmMgPSBfX3Jhd19yZWFkbChzY2xrLT5yZWdfc291cmNlKTsKLQlpbnQgc3JjX25yID0gLTE7Ci0JaW50IHB0cjsKLQotCWZvciAocHRyID0gMDsgcHRyIDwgc3Jjcy0+bnJfc291cmNlczsgcHRyKyspCi0JCWlmIChzcmNzLT5zb3VyY2VzW3B0cl0gPT0gcGFyZW50KSB7Ci0JCQlzcmNfbnIgPSBwdHI7Ci0JCQlicmVhazsKLQkJfQotCi0JaWYgKHNyY19uciA+PSAwKSB7Ci0JCWNsa3NyYyAmPSB+c2Nsay0+bWFzazsKLQkJY2xrc3JjIHw9IHNyY19uciA8PCBzY2xrLT5zaGlmdDsKLQotCQlfX3Jhd193cml0ZWwoY2xrc3JjLCBzY2xrLT5yZWdfc291cmNlKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHM1cGMxMDBfcm91bmRyYXRlX2Nsa3NyYyhzdHJ1Y3QgY2xrICpjbGssCi0JCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgcmF0ZSkKLXsKLQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKLQlpbnQgZGl2OwotCi0JaWYgKHJhdGUgPiBwYXJlbnRfcmF0ZSkKLQkJcmF0ZSA9IHBhcmVudF9yYXRlOwotCWVsc2UgewotCQlkaXYgPSByYXRlIC8gcGFyZW50X3JhdGU7Ci0KLQkJaWYgKGRpdiA9PSAwKQotCQkJZGl2ID0gMTsKLQkJaWYgKGRpdiA+IDE2KQotCQkJZGl2ID0gMTY7Ci0KLQkJcmF0ZSA9IHBhcmVudF9yYXRlIC8gZGl2OwotCX0KLQotCXJldHVybiByYXRlOwotfQotCi1zdGF0aWMgc3RydWN0IGNsayAqY2xrc2V0X3NwaV9saXN0W10gPSB7Ci0JJmNsa19tb3V0X2VwbGwuY2xrLAotCSZjbGtfZG91dF9tcGxsMiwKLQkmY2xrX2Zpbl9lcGxsLAotCSZjbGtfbW91dF9ocGxsLmNsaywKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrX3NvdXJjZXMgY2xrc2V0X3NwaSA9IHsKLQkuc291cmNlcwk9IGNsa3NldF9zcGlfbGlzdCwKLQkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrc2V0X3NwaV9saXN0KSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfc3BpMCA9IHsKLQkuY2xrCT0gewotCQkubmFtZQkJPSAic3BpX2J1cyIsCi0JCS5pZAkJPSAwLAotCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9TUEkwLAotCQkuZW5hYmxlCQk9IHM1cGMxMDBfc2NsazBfY3RybCwKLQkJLnNldF9wYXJlbnQJPSBzNXBjMTAwX3NldHBhcmVudF9jbGtzcmMsCi0JCS5nZXRfcmF0ZQk9IHM1cGMxMDBfZ2V0cmF0ZV9jbGtzcmMsCi0JCS5zZXRfcmF0ZQk9IHM1cGMxMDBfc2V0cmF0ZV9jbGtzcmMsCi0JCS5yb3VuZF9yYXRlCT0gczVwYzEwMF9yb3VuZHJhdGVfY2xrc3JjLAotCX0sCi0JLnNoaWZ0CQk9IFM1UEMxMDBfQ0xLU1JDMV9TUEkwX1NISUZULAotCS5tYXNrCQk9IFM1UEMxMDBfQ0xLU1JDMV9TUEkwX01BU0ssCi0JLnNvdXJjZXMJPSAmY2xrc2V0X3NwaSwKLQkuZGl2aWRlcl9zaGlmdAk9IFM1UEMxMDBfQ0xLRElWMl9TUEkwX1NISUZULAotCS5yZWdfZGl2aWRlcgk9IFM1UEMxMDBfQ0xLRElWMiwKLQkucmVnX3NvdXJjZQk9IFM1UEMxMDBfQ0xLU1JDMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfc3BpMSA9IHsKLQkuY2xrCT0gewotCQkubmFtZQkJPSAic3BpX2J1cyIsCi0JCS5pZAkJPSAxLAotCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9TUEkxLAotCQkuZW5hYmxlCQk9IHM1cGMxMDBfc2NsazBfY3RybCwKLQkJLnNldF9wYXJlbnQJPSBzNXBjMTAwX3NldHBhcmVudF9jbGtzcmMsCi0JCS5nZXRfcmF0ZQk9IHM1cGMxMDBfZ2V0cmF0ZV9jbGtzcmMsCi0JCS5zZXRfcmF0ZQk9IHM1cGMxMDBfc2V0cmF0ZV9jbGtzcmMsCi0JCS5yb3VuZF9yYXRlCT0gczVwYzEwMF9yb3VuZHJhdGVfY2xrc3JjLAotCX0sCi0JLnNoaWZ0CQk9IFM1UEMxMDBfQ0xLU1JDMV9TUEkxX1NISUZULAotCS5tYXNrCQk9IFM1UEMxMDBfQ0xLU1JDMV9TUEkxX01BU0ssCi0JLnNvdXJjZXMJPSAmY2xrc2V0X3NwaSwKLQkuZGl2aWRlcl9zaGlmdAk9IFM1UEMxMDBfQ0xLRElWMl9TUEkxX1NISUZULAotCS5yZWdfZGl2aWRlcgk9IFM1UEMxMDBfQ0xLRElWMiwKLQkucmVnX3NvdXJjZQk9IFM1UEMxMDBfQ0xLU1JDMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfc3BpMiA9IHsKLQkuY2xrCT0gewotCQkubmFtZQkJPSAic3BpX2J1cyIsCi0JCS5pZAkJPSAyLAotCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9TUEkyLAotCQkuZW5hYmxlCQk9IHM1cGMxMDBfc2NsazBfY3RybCwKLQkJLnNldF9wYXJlbnQJPSBzNXBjMTAwX3NldHBhcmVudF9jbGtzcmMsCi0JCS5nZXRfcmF0ZQk9IHM1cGMxMDBfZ2V0cmF0ZV9jbGtzcmMsCi0JCS5zZXRfcmF0ZQk9IHM1cGMxMDBfc2V0cmF0ZV9jbGtzcmMsCi0JCS5yb3VuZF9yYXRlCT0gczVwYzEwMF9yb3VuZHJhdGVfY2xrc3JjLAotCX0sCi0JLnNoaWZ0CQk9IFM1UEMxMDBfQ0xLU1JDMV9TUEkyX1NISUZULAotCS5tYXNrCQk9IFM1UEMxMDBfQ0xLU1JDMV9TUEkyX01BU0ssCi0JLnNvdXJjZXMJPSAmY2xrc2V0X3NwaSwKLQkuZGl2aWRlcl9zaGlmdAk9IFM1UEMxMDBfQ0xLRElWMl9TUEkyX1NISUZULAotCS5yZWdfZGl2aWRlcgk9IFM1UEMxMDBfQ0xLRElWMiwKLQkucmVnX3NvdXJjZQk9IFM1UEMxMDBfQ0xLU1JDMSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzZXRfdWFydF9saXN0W10gPSB7Ci0JJmNsa19tb3V0X2VwbGwuY2xrLAotCSZjbGtfZG91dF9tcGxsLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtzZXRfdWFydCA9IHsKLQkuc291cmNlcwk9IGNsa3NldF91YXJ0X2xpc3QsCi0JLm5yX3NvdXJjZXMJPSBBUlJBWV9TSVpFKGNsa3NldF91YXJ0X2xpc3QpLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa191YXJ0X3VjbGsxID0gewotCS5jbGsJPSB7Ci0JCS5uYW1lCQk9ICJ1Y2xrMSIsCi0JCS5pZAkJPSAtMSwKLQkJLmN0cmxiaXQgICAgICAgID0gUzVQQzEwMF9DTEtHQVRFX1NDTEswX1VBUlQsCi0JCS5lbmFibGUJCT0gczVwYzEwMF9zY2xrMF9jdHJsLAotCQkuc2V0X3BhcmVudAk9IHM1cGMxMDBfc2V0cGFyZW50X2Nsa3NyYywKLQkJLmdldF9yYXRlCT0gczVwYzEwMF9nZXRyYXRlX2Nsa3NyYywKLQkJLnNldF9yYXRlCT0gczVwYzEwMF9zZXRyYXRlX2Nsa3NyYywKLQkJLnJvdW5kX3JhdGUJPSBzNXBjMTAwX3JvdW5kcmF0ZV9jbGtzcmMsCi0JfSwKLQkuc2hpZnQJCT0gUzVQQzEwMF9DTEtTUkMxX1VBUlRfU0hJRlQsCi0JLm1hc2sJCT0gUzVQQzEwMF9DTEtTUkMxX1VBUlRfTUFTSywKLQkuc291cmNlcwk9ICZjbGtzZXRfdWFydCwKLQkuZGl2aWRlcl9zaGlmdAk9IFM1UEMxMDBfQ0xLRElWMl9VQVJUX1NISUZULAotCS5yZWdfZGl2aWRlcgk9IFM1UEMxMDBfQ0xLRElWMiwKLQkucmVnX3NvdXJjZQk9IFM1UEMxMDBfQ0xLU1JDMSwKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xrIGNsa19paXNfY2QwID0gewogCS5uYW1lCQk9ICJpaXNfY2RjbGswIiwKIAkuaWQJCT0gLTEsCkBAIC02NzIsMjggKzQ4MCwzMSBAQAogCSZjbGtfbW91dF9ocGxsLmNsaywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrX3NvdXJjZXMgY2xrc2V0X2F1ZGlvMCA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMgY2xrc2V0X2F1ZGlvMCA9IHsKIAkuc291cmNlcwk9IGNsa3NldF9hdWRpbzBfbGlzdCwKIAkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrc2V0X2F1ZGlvMF9saXN0KSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfYXVkaW8wID0gewotCS5jbGsJPSB7Ci0JCS5uYW1lCQk9ICJhdWRpby1idXMiLAotCQkuaWQJCT0gMCwKLQkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfU0NMSzFfQVVESU8wLAotCQkuZW5hYmxlCQk9IHM1cGMxMDBfc2NsazFfY3RybCwKLQkJLnNldF9wYXJlbnQJPSBzNXBjMTAwX3NldHBhcmVudF9jbGtzcmMsCi0JCS5nZXRfcmF0ZQk9IHM1cGMxMDBfZ2V0cmF0ZV9jbGtzcmMsCi0JCS5zZXRfcmF0ZQk9IHM1cGMxMDBfc2V0cmF0ZV9jbGtzcmMsCi0JCS5yb3VuZF9yYXRlCT0gczVwYzEwMF9yb3VuZHJhdGVfY2xrc3JjLAotCX0sCi0JLnNoaWZ0CQk9IFM1UEMxMDBfQ0xLU1JDM19BVURJTzBfU0hJRlQsCi0JLm1hc2sJCT0gUzVQQzEwMF9DTEtTUkMzX0FVRElPMF9NQVNLLAotCS5zb3VyY2VzCT0gJmNsa3NldF9hdWRpbzAsCi0JLmRpdmlkZXJfc2hpZnQJPSBTNVBDMTAwX0NMS0RJVjRfQVVESU8wX1NISUZULAotCS5yZWdfZGl2aWRlcgk9IFM1UEMxMDBfQ0xLRElWNCwKLQkucmVnX3NvdXJjZQk9IFM1UEMxMDBfQ0xLU1JDMywKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzZXRfc3BpX2xpc3RbXSA9IHsKKwkmY2xrX21vdXRfZXBsbC5jbGssCisJJmNsa19kb3V0X21wbGwyLAorCSZjbGtfZmluX2VwbGwsCisJJmNsa19tb3V0X2hwbGwuY2xrLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtzcmNfc291cmNlcyBjbGtzZXRfc3BpID0geworCS5zb3VyY2VzCT0gY2xrc2V0X3NwaV9saXN0LAorCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtzZXRfc3BpX2xpc3QpLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NldF91YXJ0X2xpc3RbXSA9IHsKKwkmY2xrX21vdXRfZXBsbC5jbGssCisJJmNsa19kb3V0X21wbGwsCit9OworCitzdGF0aWMgc3RydWN0IGNsa3NyY19zb3VyY2VzIGNsa3NldF91YXJ0ID0geworCS5zb3VyY2VzCT0gY2xrc2V0X3VhcnRfbGlzdCwKKwkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrc2V0X3VhcnRfbGlzdCksCiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayAqY2xrc2V0X2F1ZGlvMV9saXN0W10gPSB7CkBAIC03MDUsMzAgKzUxNiwxMSBAQAogCSZjbGtfbW91dF9ocGxsLmNsaywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrX3NvdXJjZXMgY2xrc2V0X2F1ZGlvMSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMgY2xrc2V0X2F1ZGlvMSA9IHsKIAkuc291cmNlcwk9IGNsa3NldF9hdWRpbzFfbGlzdCwKIAkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrc2V0X2F1ZGlvMV9saXN0KSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfYXVkaW8xID0gewotCS5jbGsJPSB7Ci0JCS5uYW1lCQk9ICJhdWRpby1idXMiLAotCQkuaWQJCT0gMSwKLQkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfU0NMSzFfQVVESU8xLAotCQkuZW5hYmxlCQk9IHM1cGMxMDBfc2NsazFfY3RybCwKLQkJLnNldF9wYXJlbnQJPSBzNXBjMTAwX3NldHBhcmVudF9jbGtzcmMsCi0JCS5nZXRfcmF0ZQk9IHM1cGMxMDBfZ2V0cmF0ZV9jbGtzcmMsCi0JCS5zZXRfcmF0ZQk9IHM1cGMxMDBfc2V0cmF0ZV9jbGtzcmMsCi0JCS5yb3VuZF9yYXRlCT0gczVwYzEwMF9yb3VuZHJhdGVfY2xrc3JjLAotCX0sCi0JLnNoaWZ0CQk9IFM1UEMxMDBfQ0xLU1JDM19BVURJTzFfU0hJRlQsCi0JLm1hc2sJCT0gUzVQQzEwMF9DTEtTUkMzX0FVRElPMV9NQVNLLAotCS5zb3VyY2VzCT0gJmNsa3NldF9hdWRpbzEsCi0JLmRpdmlkZXJfc2hpZnQJPSBTNVBDMTAwX0NMS0RJVjRfQVVESU8xX1NISUZULAotCS5yZWdfZGl2aWRlcgk9IFM1UEMxMDBfQ0xLRElWNCwKLQkucmVnX3NvdXJjZQk9IFM1UEMxMDBfQ0xLU1JDMywKLX07Ci0KIHN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzZXRfYXVkaW8yX2xpc3RbXSA9IHsKIAkmY2xrX21vdXRfZXBsbC5jbGssCiAJJmNsa19kb3V0X21wbGwsCkBAIC03MzcsNTIgKzUyOSw1NiBAQAogCSZjbGtfbW91dF9ocGxsLmNsaywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrX3NvdXJjZXMgY2xrc2V0X2F1ZGlvMiA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMgY2xrc2V0X2F1ZGlvMiA9IHsKIAkuc291cmNlcwk9IGNsa3NldF9hdWRpbzJfbGlzdCwKIAkubnJfc291cmNlcwk9IEFSUkFZX1NJWkUoY2xrc2V0X2F1ZGlvMl9saXN0KSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfYXVkaW8yID0gewotCS5jbGsJPSB7Ci0JCS5uYW1lCQk9ICJhdWRpby1idXMiLAotCQkuaWQJCT0gMiwKLQkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfU0NMSzFfQVVESU8yLAotCQkuZW5hYmxlCQk9IHM1cGMxMDBfc2NsazFfY3RybCwKLQkJLnNldF9wYXJlbnQJPSBzNXBjMTAwX3NldHBhcmVudF9jbGtzcmMsCi0JCS5nZXRfcmF0ZQk9IHM1cGMxMDBfZ2V0cmF0ZV9jbGtzcmMsCi0JCS5zZXRfcmF0ZQk9IHM1cGMxMDBfc2V0cmF0ZV9jbGtzcmMsCi0JCS5yb3VuZF9yYXRlCT0gczVwYzEwMF9yb3VuZHJhdGVfY2xrc3JjLAorc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa3NyY19hdWRpb1tdID0geworCXsKKwkJLmNsawk9IHsKKwkJCS5uYW1lCQk9ICJhdWRpby1idXMiLAorCQkJLmlkCQk9IDAsCisJCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9TQ0xLMV9BVURJTzAsCisJCQkuZW5hYmxlCQk9IHM1cGMxMDBfc2NsazFfY3RybCwKKwkJfSwKKwkJLnNvdXJjZXMgPSAmY2xrc2V0X2F1ZGlvMCwKKwkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTNVBDMTAwX0NMS0RJVjQsIC5zaGlmdCA9IDEyLCAuc2l6ZSA9IDQsIH0sCisJCS5yZWdfc3JjID0geyAucmVnID0gUzVQQzEwMF9DTEtTUkMzLCAuc2hpZnQgPSAxMiwgLnNpemUgPSAzLCB9LAorCX0sIHsKKwkJLmNsawk9IHsKKwkJCS5uYW1lCQk9ICJhdWRpby1idXMiLAorCQkJLmlkCQk9IDEsCisJCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9TQ0xLMV9BVURJTzEsCisJCQkuZW5hYmxlCQk9IHM1cGMxMDBfc2NsazFfY3RybCwKKwkJfSwKKwkJLnNvdXJjZXMgPSAmY2xrc2V0X2F1ZGlvMSwKKwkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTNVBDMTAwX0NMS0RJVjQsIC5zaGlmdCA9IDE2LCAuc2l6ZSA9IDQsIH0sCisJCS5yZWdfc3JjID0geyAucmVnID0gUzVQQzEwMF9DTEtTUkMzLCAuc2hpZnQgPSAxNiwgLnNpemUgPSAzLCB9LAorCX0sIHsKKwkJLmNsawk9IHsKKwkJCS5uYW1lCQk9ICJhdWRpby1idXMiLAorCQkJLmlkCQk9IDIsCisJCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9TQ0xLMV9BVURJTzIsCisJCQkuZW5hYmxlCQk9IHM1cGMxMDBfc2NsazFfY3RybCwKKwkJfSwKKwkJLnNvdXJjZXMgPSAmY2xrc2V0X2F1ZGlvMiwKKwkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTNVBDMTAwX0NMS0RJVjQsIC5zaGlmdCA9IDIwLCAuc2l6ZSA9IDQsIH0sCisJCS5yZWdfc3JjID0geyAucmVnID0gUzVQQzEwMF9DTEtTUkMzLCAuc2hpZnQgPSAyMCwgLnNpemUgPSAzLCB9LAogCX0sCi0JLnNoaWZ0CQk9IFM1UEMxMDBfQ0xLU1JDM19BVURJTzJfU0hJRlQsCi0JLm1hc2sJCT0gUzVQQzEwMF9DTEtTUkMzX0FVRElPMl9NQVNLLAotCS5zb3VyY2VzCT0gJmNsa3NldF9hdWRpbzIsCi0JLmRpdmlkZXJfc2hpZnQJPSBTNVBDMTAwX0NMS0RJVjRfQVVESU8yX1NISUZULAotCS5yZWdfZGl2aWRlcgk9IFM1UEMxMDBfQ0xLRElWNCwKLQkucmVnX3NvdXJjZQk9IFM1UEMxMDBfQ0xLU1JDMywKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrICpjbGtzZXRfc3BkaWZfbGlzdFtdID0gewotCSZjbGtfYXVkaW8wLmNsaywKLQkmY2xrX2F1ZGlvMS5jbGssCi0JJmNsa19hdWRpbzIuY2xrLAorCSZjbGtzcmNfYXVkaW9bMF0uY2xrLAorCSZjbGtzcmNfYXVkaW9bMV0uY2xrLAorCSZjbGtzcmNfYXVkaW9bMl0uY2xrLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtzZXRfc3BkaWYgPSB7CitzdGF0aWMgc3RydWN0IGNsa3NyY19zb3VyY2VzIGNsa3NldF9zcGRpZiA9IHsKIAkuc291cmNlcwk9IGNsa3NldF9zcGRpZl9saXN0LAogCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtzZXRfc3BkaWZfbGlzdCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX3NwZGlmID0gewotCS5jbGsJPSB7Ci0JCS5uYW1lCQk9ICJzcGRpZiIsCi0JCS5pZAkJPSAtMSwKLQl9LAotCS5zaGlmdAkJPSBTNVBDMTAwX0NMS1NSQzNfU1BESUZfU0hJRlQsCi0JLm1hc2sJCT0gUzVQQzEwMF9DTEtTUkMzX1NQRElGX01BU0ssCi0JLnNvdXJjZXMJPSAmY2xrc2V0X3NwZGlmLAotCS5yZWdfc291cmNlCT0gUzVQQzEwMF9DTEtTUkMzLAotfTsKLQogc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NldF9sY2RfZmltY19saXN0W10gPSB7CiAJJmNsa19tb3V0X2VwbGwuY2xrLAogCSZjbGtfZG91dF9tcGxsLApAQCAtNzkwLDg3ICs1ODYsMTEgQEAKIAkmY2xrX3ZjbGtfNTRtLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtzZXRfbGNkX2ZpbWMgPSB7CitzdGF0aWMgc3RydWN0IGNsa3NyY19zb3VyY2VzIGNsa3NldF9sY2RfZmltYyA9IHsKIAkuc291cmNlcwk9IGNsa3NldF9sY2RfZmltY19saXN0LAogCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtzZXRfbGNkX2ZpbWNfbGlzdCksCiB9OwogCi1zdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX2xjZCA9IHsKLQkuY2xrCT0gewotCQkubmFtZQkJPSAibGNkIiwKLQkJLmlkCQk9IC0xLAotCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9TQ0xLMV9MQ0QsCi0JCS5lbmFibGUJCT0gczVwYzEwMF9zY2xrMV9jdHJsLAotCQkuc2V0X3BhcmVudAk9IHM1cGMxMDBfc2V0cGFyZW50X2Nsa3NyYywKLQkJLmdldF9yYXRlCT0gczVwYzEwMF9nZXRyYXRlX2Nsa3NyYywKLQkJLnNldF9yYXRlCT0gczVwYzEwMF9zZXRyYXRlX2Nsa3NyYywKLQkJLnJvdW5kX3JhdGUJPSBzNXBjMTAwX3JvdW5kcmF0ZV9jbGtzcmMsCi0JfSwKLQkuc2hpZnQJCT0gUzVQQzEwMF9DTEtTUkMyX0xDRF9TSElGVCwKLQkubWFzawkJPSBTNVBDMTAwX0NMS1NSQzJfTENEX01BU0ssCi0JLnNvdXJjZXMJPSAmY2xrc2V0X2xjZF9maW1jLAotCS5kaXZpZGVyX3NoaWZ0CT0gUzVQQzEwMF9DTEtESVYzX0xDRF9TSElGVCwKLQkucmVnX2RpdmlkZXIJPSBTNVBDMTAwX0NMS0RJVjMsCi0JLnJlZ19zb3VyY2UJPSBTNVBDMTAwX0NMS1NSQzIsCi19OwotCi1zdGF0aWMgc3RydWN0IGNsa3NyY19jbGsgY2xrX2ZpbWMwID0gewotCS5jbGsJPSB7Ci0JCS5uYW1lCQk9ICJmaW1jIiwKLQkJLmlkCQk9IDAsCi0JCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX1NDTEsxX0ZJTUMwLAotCQkuZW5hYmxlCQk9IHM1cGMxMDBfc2NsazFfY3RybCwKLQkJLnNldF9wYXJlbnQJPSBzNXBjMTAwX3NldHBhcmVudF9jbGtzcmMsCi0JCS5nZXRfcmF0ZQk9IHM1cGMxMDBfZ2V0cmF0ZV9jbGtzcmMsCi0JCS5zZXRfcmF0ZQk9IHM1cGMxMDBfc2V0cmF0ZV9jbGtzcmMsCi0JCS5yb3VuZF9yYXRlCT0gczVwYzEwMF9yb3VuZHJhdGVfY2xrc3JjLAotCX0sCi0JLnNoaWZ0CQk9IFM1UEMxMDBfQ0xLU1JDMl9GSU1DMF9TSElGVCwKLQkubWFzawkJPSBTNVBDMTAwX0NMS1NSQzJfRklNQzBfTUFTSywKLQkuc291cmNlcwk9ICZjbGtzZXRfbGNkX2ZpbWMsCi0JLmRpdmlkZXJfc2hpZnQJPSBTNVBDMTAwX0NMS0RJVjNfRklNQzBfU0hJRlQsCi0JLnJlZ19kaXZpZGVyCT0gUzVQQzEwMF9DTEtESVYzLAotCS5yZWdfc291cmNlCT0gUzVQQzEwMF9DTEtTUkMyLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19maW1jMSA9IHsKLQkuY2xrCT0gewotCQkubmFtZQkJPSAiZmltYyIsCi0JCS5pZAkJPSAxLAotCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9TQ0xLMV9GSU1DMSwKLQkJLmVuYWJsZQkJPSBzNXBjMTAwX3NjbGsxX2N0cmwsCi0JCS5zZXRfcGFyZW50CT0gczVwYzEwMF9zZXRwYXJlbnRfY2xrc3JjLAotCQkuZ2V0X3JhdGUJPSBzNXBjMTAwX2dldHJhdGVfY2xrc3JjLAotCQkuc2V0X3JhdGUJPSBzNXBjMTAwX3NldHJhdGVfY2xrc3JjLAotCQkucm91bmRfcmF0ZQk9IHM1cGMxMDBfcm91bmRyYXRlX2Nsa3NyYywKLQl9LAotCS5zaGlmdAkJPSBTNVBDMTAwX0NMS1NSQzJfRklNQzFfU0hJRlQsCi0JLm1hc2sJCT0gUzVQQzEwMF9DTEtTUkMyX0ZJTUMxX01BU0ssCi0JLnNvdXJjZXMJPSAmY2xrc2V0X2xjZF9maW1jLAotCS5kaXZpZGVyX3NoaWZ0CT0gUzVQQzEwMF9DTEtESVYzX0ZJTUMxX1NISUZULAotCS5yZWdfZGl2aWRlcgk9IFM1UEMxMDBfQ0xLRElWMywKLQkucmVnX3NvdXJjZQk9IFM1UEMxMDBfQ0xLU1JDMiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfZmltYzIgPSB7Ci0JLmNsawk9IHsKLQkJLm5hbWUJCT0gImZpbWMiLAotCQkuaWQJCT0gMiwKLQkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfU0NMSzFfRklNQzIsCi0JCS5lbmFibGUJCT0gczVwYzEwMF9zY2xrMV9jdHJsLAotCQkuc2V0X3BhcmVudAk9IHM1cGMxMDBfc2V0cGFyZW50X2Nsa3NyYywKLQkJLmdldF9yYXRlCT0gczVwYzEwMF9nZXRyYXRlX2Nsa3NyYywKLQkJLnNldF9yYXRlCT0gczVwYzEwMF9zZXRyYXRlX2Nsa3NyYywKLQkJLnJvdW5kX3JhdGUJPSBzNXBjMTAwX3JvdW5kcmF0ZV9jbGtzcmMsCi0JfSwKLQkuc2hpZnQJCT0gUzVQQzEwMF9DTEtTUkMyX0ZJTUMyX1NISUZULAotCS5tYXNrCQk9IFM1UEMxMDBfQ0xLU1JDMl9GSU1DMl9NQVNLLAotCS5zb3VyY2VzCT0gJmNsa3NldF9sY2RfZmltYywKLQkuZGl2aWRlcl9zaGlmdAk9IFM1UEMxMDBfQ0xLRElWM19GSU1DMl9TSElGVCwKLQkucmVnX2RpdmlkZXIJPSBTNVBDMTAwX0NMS0RJVjMsCi0JLnJlZ19zb3VyY2UJPSBTNVBDMTAwX0NMS1NSQzIsCi19OwotCiBzdGF0aWMgc3RydWN0IGNsayAqY2xrc2V0X21tY19saXN0W10gPSB7CiAJJmNsa19tb3V0X2VwbGwuY2xrLAogCSZjbGtfZG91dF9tcGxsLApAQCAtODc4LDY5ICs1OTgsMTEgQEAKIAkmY2xrX21vdXRfaHBsbC5jbGsgLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtzZXRfbW1jID0geworc3RhdGljIHN0cnVjdCBjbGtzcmNfc291cmNlcyBjbGtzZXRfbW1jID0gewogCS5zb3VyY2VzCT0gY2xrc2V0X21tY19saXN0LAogCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtzZXRfbW1jX2xpc3QpLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tbWMwID0gewotCS5jbGsJPSB7Ci0JCS5uYW1lCQk9ICJtbWNfYnVzIiwKLQkJLmlkCQk9IDAsCi0JCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX1NDTEswX01NQzAsCi0JCS5lbmFibGUJCT0gczVwYzEwMF9zY2xrMF9jdHJsLAotCQkuc2V0X3BhcmVudAk9IHM1cGMxMDBfc2V0cGFyZW50X2Nsa3NyYywKLQkJLmdldF9yYXRlCT0gczVwYzEwMF9nZXRyYXRlX2Nsa3NyYywKLQkJLnNldF9yYXRlCT0gczVwYzEwMF9zZXRyYXRlX2Nsa3NyYywKLQkJLnJvdW5kX3JhdGUJPSBzNXBjMTAwX3JvdW5kcmF0ZV9jbGtzcmMsCi0JfSwKLQkuc2hpZnQJCT0gUzVQQzEwMF9DTEtTUkMyX01NQzBfU0hJRlQsCi0JLm1hc2sJCT0gUzVQQzEwMF9DTEtTUkMyX01NQzBfTUFTSywKLQkuc291cmNlcwk9ICZjbGtzZXRfbW1jLAotCS5kaXZpZGVyX3NoaWZ0CT0gUzVQQzEwMF9DTEtESVYzX01NQzBfU0hJRlQsCi0JLnJlZ19kaXZpZGVyCT0gUzVQQzEwMF9DTEtESVYzLAotCS5yZWdfc291cmNlCT0gUzVQQzEwMF9DTEtTUkMyLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tbWMxID0gewotCS5jbGsJPSB7Ci0JCS5uYW1lCQk9ICJtbWNfYnVzIiwKLQkJLmlkCQk9IDEsCi0JCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX1NDTEswX01NQzEsCi0JCS5lbmFibGUJCT0gczVwYzEwMF9zY2xrMF9jdHJsLAotCQkuc2V0X3BhcmVudAk9IHM1cGMxMDBfc2V0cGFyZW50X2Nsa3NyYywKLQkJLmdldF9yYXRlCT0gczVwYzEwMF9nZXRyYXRlX2Nsa3NyYywKLQkJLnNldF9yYXRlCT0gczVwYzEwMF9zZXRyYXRlX2Nsa3NyYywKLQkJLnJvdW5kX3JhdGUJPSBzNXBjMTAwX3JvdW5kcmF0ZV9jbGtzcmMsCi0JfSwKLQkuc2hpZnQJCT0gUzVQQzEwMF9DTEtTUkMyX01NQzFfU0hJRlQsCi0JLm1hc2sJCT0gUzVQQzEwMF9DTEtTUkMyX01NQzFfTUFTSywKLQkuc291cmNlcwk9ICZjbGtzZXRfbW1jLAotCS5kaXZpZGVyX3NoaWZ0CT0gUzVQQzEwMF9DTEtESVYzX01NQzFfU0hJRlQsCi0JLnJlZ19kaXZpZGVyCT0gUzVQQzEwMF9DTEtESVYzLAotCS5yZWdfc291cmNlCT0gUzVQQzEwMF9DTEtTUkMyLAotfTsKLQotc3RhdGljIHN0cnVjdCBjbGtzcmNfY2xrIGNsa19tbWMyID0gewotCS5jbGsJPSB7Ci0JCS5uYW1lCQk9ICJtbWNfYnVzIiwKLQkJLmlkCQk9IDIsCi0JCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX1NDTEswX01NQzIsCi0JCS5lbmFibGUJCT0gczVwYzEwMF9zY2xrMF9jdHJsLAotCQkuc2V0X3BhcmVudAk9IHM1cGMxMDBfc2V0cGFyZW50X2Nsa3NyYywKLQkJLmdldF9yYXRlCT0gczVwYzEwMF9nZXRyYXRlX2Nsa3NyYywKLQkJLnNldF9yYXRlCT0gczVwYzEwMF9zZXRyYXRlX2Nsa3NyYywKLQkJLnJvdW5kX3JhdGUJPSBzNXBjMTAwX3JvdW5kcmF0ZV9jbGtzcmMsCi0JfSwKLQkuc2hpZnQJCT0gUzVQQzEwMF9DTEtTUkMyX01NQzJfU0hJRlQsCi0JLm1hc2sJCT0gUzVQQzEwMF9DTEtTUkMyX01NQzJfTUFTSywKLQkuc291cmNlcwk9ICZjbGtzZXRfbW1jLAotCS5kaXZpZGVyX3NoaWZ0CT0gUzVQQzEwMF9DTEtESVYzX01NQzJfU0hJRlQsCi0JLnJlZ19kaXZpZGVyCT0gUzVQQzEwMF9DTEtESVYzLAotCS5yZWdfc291cmNlCT0gUzVQQzEwMF9DTEtTUkMyLAotfTsKLQotCiBzdGF0aWMgc3RydWN0IGNsayAqY2xrc2V0X3VzYmhvc3RfbGlzdFtdID0gewogCSZjbGtfbW91dF9lcGxsLmNsaywKIAkmY2xrX2RvdXRfbXBsbCwKQEAgLTk0OCwyOCArNjEwLDE0MSBAQAogCSZjbGtfNDhtLAogfTsKIAotc3RhdGljIHN0cnVjdCBjbGtfc291cmNlcyBjbGtzZXRfdXNiaG9zdCA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX3NvdXJjZXMgY2xrc2V0X3VzYmhvc3QgPSB7CiAJLnNvdXJjZXMJPSBjbGtzZXRfdXNiaG9zdF9saXN0LAogCS5ucl9zb3VyY2VzCT0gQVJSQVlfU0laRShjbGtzZXRfdXNiaG9zdF9saXN0KSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtfdXNiaG9zdCA9IHsKLQkuY2xrCT0gewotCQkubmFtZQkJPSAidXNiaG9zdCIsCi0JCS5pZAkJPSAtMSwKLQkJLmN0cmxiaXQgICAgICAgID0gUzVQQzEwMF9DTEtHQVRFX1NDTEswX1VTQkhPU1QsCi0JCS5lbmFibGUJCT0gczVwYzEwMF9zY2xrMF9jdHJsLAotCQkuc2V0X3BhcmVudAk9IHM1cGMxMDBfc2V0cGFyZW50X2Nsa3NyYywKLQkJLmdldF9yYXRlCT0gczVwYzEwMF9nZXRyYXRlX2Nsa3NyYywKLQkJLnNldF9yYXRlCT0gczVwYzEwMF9zZXRyYXRlX2Nsa3NyYywKLQkJLnJvdW5kX3JhdGUJPSBzNXBjMTAwX3JvdW5kcmF0ZV9jbGtzcmMsCi0JfSwKLQkuc2hpZnQJCT0gUzVQQzEwMF9DTEtTUkMxX1VIT1NUX1NISUZULAotCS5tYXNrCQk9IFM1UEMxMDBfQ0xLU1JDMV9VSE9TVF9NQVNLLAotCS5zb3VyY2VzCT0gJmNsa3NldF91c2Job3N0LAotCS5kaXZpZGVyX3NoaWZ0CT0gUzVQQzEwMF9DTEtESVYyX1VIT1NUX1NISUZULAotCS5yZWdfZGl2aWRlcgk9IFM1UEMxMDBfQ0xLRElWMiwKLQkucmVnX3NvdXJjZQk9IFM1UEMxMDBfQ0xLU1JDMSwKK3N0YXRpYyBzdHJ1Y3QgY2xrc3JjX2NsayBjbGtzcmNfY2xrc1tdID0geworCXsKKwkJLmNsawk9IHsKKwkJCS5uYW1lCQk9ICJzcGlfYnVzIiwKKwkJCS5pZAkJPSAwLAorCQkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfU0NMSzBfU1BJMCwKKwkJCS5lbmFibGUJCT0gczVwYzEwMF9zY2xrMF9jdHJsLAorCisJCX0sCisJCS5zb3VyY2VzID0gJmNsa3NldF9zcGksCisJCS5yZWdfZGl2ID0geyAucmVnID0gUzVQQzEwMF9DTEtESVYyLCAuc2hpZnQgPSA0LCAuc2l6ZSA9IDQsIH0sCisJCS5yZWdfc3JjID0geyAucmVnID0gUzVQQzEwMF9DTEtTUkMxLCAuc2hpZnQgPSA0LCAuc2l6ZSA9IDIsIH0sCisJfSwgeworCQkuY2xrCT0geworCQkJLm5hbWUJCT0gInNwaV9idXMiLAorCQkJLmlkCQk9IDEsCisJCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9TUEkxLAorCQkJLmVuYWJsZQkJPSBzNXBjMTAwX3NjbGswX2N0cmwsCisJCX0sCisJCS5zb3VyY2VzID0gJmNsa3NldF9zcGksCisJCS5yZWdfZGl2ID0geyAucmVnID0gUzVQQzEwMF9DTEtESVYyLCAuc2hpZnQgPSA4LCAuc2l6ZSA9IDQsIH0sCisJCS5yZWdfc3JjID0geyAucmVnID0gUzVQQzEwMF9DTEtTUkMxLCAuc2hpZnQgPSA4LCAuc2l6ZSA9IDIsIH0sCisJfSwgeworCQkuY2xrCT0geworCQkJLm5hbWUJCT0gInNwaV9idXMiLAorCQkJLmlkCQk9IDIsCisJCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9TQ0xLMF9TUEkyLAorCQkJLmVuYWJsZQkJPSBzNXBjMTAwX3NjbGswX2N0cmwsCisJCX0sCisJCS5zb3VyY2VzID0gJmNsa3NldF9zcGksCisJCS5yZWdfZGl2ID0geyAucmVnID0gUzVQQzEwMF9DTEtESVYyLCAuc2hpZnQgPSAxMiwgLnNpemUgPSA0LCB9LAorCQkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UEMxMDBfQ0xLU1JDMSwgLnNoaWZ0ID0gMTIsIC5zaXplID0gMiwgfSwKKwl9LCB7CisJCS5jbGsJPSB7CisJCQkubmFtZQkJPSAidWNsazEiLAorCQkJLmlkCQk9IC0xLAorCQkJLmN0cmxiaXQgICAgICAgID0gUzVQQzEwMF9DTEtHQVRFX1NDTEswX1VBUlQsCisJCQkuZW5hYmxlCQk9IHM1cGMxMDBfc2NsazBfY3RybCwKKwkJfSwKKwkJLnNvdXJjZXMgPSAmY2xrc2V0X3VhcnQsCisJCS5yZWdfZGl2ID0geyAucmVnID0gUzVQQzEwMF9DTEtESVYyLCAuc2hpZnQgPSAwLCAuc2l6ZSA9IDMsIH0sCisJCS5yZWdfc3JjID0geyAucmVnID0gUzVQQzEwMF9DTEtTUkMxLCAuc2hpZnQgPSAwLCAuc2l6ZSA9IDEsIH0sCisJfSwgeworCQkuY2xrCT0geworCQkJLm5hbWUJCT0gInNwZGlmIiwKKwkJCS5pZAkJPSAtMSwKKwkJfSwKKwkJLnNvdXJjZXMJPSAmY2xrc2V0X3NwZGlmLAorCQkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UEMxMDBfQ0xLU1JDMywgLnNoaWZ0ID0gMjQsIC5zaXplID0gMiwgfSwKKwl9LCB7CisJCS5jbGsJPSB7CisJCQkubmFtZQkJPSAibGNkIiwKKwkJCS5pZAkJPSAtMSwKKwkJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX1NDTEsxX0xDRCwKKwkJCS5lbmFibGUJCT0gczVwYzEwMF9zY2xrMV9jdHJsLAorCQl9LAorCQkuc291cmNlcyA9ICZjbGtzZXRfbGNkX2ZpbWMsCisJCS5yZWdfZGl2ID0geyAucmVnID0gUzVQQzEwMF9DTEtESVYzLCAuc2hpZnQgPSAxMiwgLnNpemUgPSA0LCB9LAorCQkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UEMxMDBfQ0xLU1JDMiwgLnNoaWZ0ID0gMTIsIC5zaXplID0gMiwgfSwKKwl9LCB7CisJCS5jbGsJPSB7CisJCQkubmFtZQkJPSAiZmltYyIsCisJCQkuaWQJCT0gMCwKKwkJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX1NDTEsxX0ZJTUMwLAorCQkJLmVuYWJsZQkJPSBzNXBjMTAwX3NjbGsxX2N0cmwsCisJCX0sCisJCS5zb3VyY2VzID0gJmNsa3NldF9sY2RfZmltYywKKwkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTNVBDMTAwX0NMS0RJVjMsIC5zaGlmdCA9IDE2LCAuc2l6ZSA9IDQsIH0sCisJCS5yZWdfc3JjID0geyAucmVnID0gUzVQQzEwMF9DTEtTUkMyLCAuc2hpZnQgPSAxNiwgLnNpemUgPSAyLCB9LAorCX0sIHsKKwkJLmNsawk9IHsKKwkJCS5uYW1lCQk9ICJmaW1jIiwKKwkJCS5pZAkJPSAxLAorCQkJLmN0cmxiaXQJPSBTNVBDMTAwX0NMS0dBVEVfU0NMSzFfRklNQzEsCisJCQkuZW5hYmxlCQk9IHM1cGMxMDBfc2NsazFfY3RybCwKKwkJfSwKKwkJLnNvdXJjZXMJPSAmY2xrc2V0X2xjZF9maW1jLAorCQkucmVnX2RpdiA9IHsgLnJlZyA9IFM1UEMxMDBfQ0xLRElWMywgLnNoaWZ0ID0gMjAsIC5zaXplID0gNCwgfSwKKwkJLnJlZ19zcmMgPSB7IC5yZWcgPSBTNVBDMTAwX0NMS1NSQzIsIC5zaGlmdCA9IDIwLCAuc2l6ZSA9IDIsIH0sCisJfSwgeworCQkuY2xrCT0geworCQkJLm5hbWUJCT0gImZpbWMiLAorCQkJLmlkCQk9IDIsCisJCQkuY3RybGJpdAk9IFM1UEMxMDBfQ0xLR0FURV9TQ0xLMV9GSU1DMiwKKwkJCS5lbmFibGUJCT0gczVwYzEwMF9zY2xrMV9jdHJsLAorCQl9LAorCQkuc291cmNlcyA9ICZjbGtzZXRfbGNkX2ZpbWMsCisJCS5yZWdfZGl2ID0geyAucmVnID0gUzVQQzEwMF9DTEtESVYzLCAuc2hpZnQgPSAyNCwgLnNpemUgPSA0LCB9LAorCQkucmVnX3NyYyA9IHsgLnJlZyA9IFM1UEMxMDBfQ0xLU1JDMiwgLnNoaWZ0ID0gMjQsIC5zaXplID0gMiwgfSwKKwl9LCB7CisJCS5jbGsJPSB7CisJCQkubmFtZQkJPSAibW1jX2J1cyIsCisJCQkuaWQJCT0gMCwKKwkJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX1NDTEswX01NQzAsCisJCQkuZW5hYmxlCQk9IHM1cGMxMDBfc2NsazBfY3RybCwKKwkJfSwKKwkJLnNvdXJjZXMgPSAmY2xrc2V0X21tYywKKwkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTNVBDMTAwX0NMS0RJVjMsIC5zaGlmdCA9IDAsIC5zaXplID0gNCwgfSwKKwkJLnJlZ19zcmMgPSB7IC5yZWcgPSBTNVBDMTAwX0NMS1NSQzIsIC5zaGlmdCA9IDAsIC5zaXplID0gMiwgfSwKKwl9LCB7CisJCS5jbGsJPSB7CisJCQkubmFtZQkJPSAibW1jX2J1cyIsCisJCQkuaWQJCT0gMSwKKwkJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX1NDTEswX01NQzEsCisJCQkuZW5hYmxlCQk9IHM1cGMxMDBfc2NsazBfY3RybCwKKwkJfSwKKwkJLnNvdXJjZXMgPSAmY2xrc2V0X21tYywKKwkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTNVBDMTAwX0NMS0RJVjMsIC5zaGlmdCA9IDQsIC5zaXplID0gNCwgfSwKKwkJLnJlZ19zcmMgPSB7IC5yZWcgPSBTNVBDMTAwX0NMS1NSQzIsIC5zaGlmdCA9IDQsIC5zaXplID0gMiwgfSwKKwl9LCB7CisJCS5jbGsJPSB7CisJCQkubmFtZQkJPSAibW1jX2J1cyIsCisJCQkuaWQJCT0gMiwKKwkJCS5jdHJsYml0CT0gUzVQQzEwMF9DTEtHQVRFX1NDTEswX01NQzIsCisJCQkuZW5hYmxlCQk9IHM1cGMxMDBfc2NsazBfY3RybCwKKwkJfSwKKwkJLnNvdXJjZXMJPSAmY2xrc2V0X21tYywKKwkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTNVBDMTAwX0NMS0RJVjMsIC5zaGlmdCA9IDgsIC5zaXplID0gNCwgfSwKKwkJLnJlZ19zcmMgPSB7IC5yZWcgPSBTNVBDMTAwX0NMS1NSQzIsIC5zaGlmdCA9IDgsIC5zaXplID0gMiwgfSwKKwl9LCB7CisJCS5jbGsJPSB7CisJCQkubmFtZQkJPSAidXNiaG9zdCIsCisJCQkuaWQJCT0gLTEsCisJCQkuY3RybGJpdCAgICAgICAgPSBTNVBDMTAwX0NMS0dBVEVfU0NMSzBfVVNCSE9TVCwKKwkJCS5lbmFibGUJCT0gczVwYzEwMF9zY2xrMF9jdHJsLAorCQl9LAorCQkuc291cmNlcyA9ICZjbGtzZXRfdXNiaG9zdCwKKwkJLnJlZ19kaXYgPSB7IC5yZWcgPSBTNVBDMTAwX0NMS0RJVjIsIC5zaGlmdCA9IDIwLCAuc2l6ZSA9IDQsIH0sCisJCS5yZWdfc3JjID0geyAucmVnID0gUzVQQzEwMF9DTEtTUkMxLCAuc2hpZnQgPSAyMCwgLnNpemUgPSAyLCB9LAorCX0KIH07CiAKIC8qIENsb2NrIGluaXRpYWxpc2F0aW9uIGNvZGUgKi8KQEAgLTk4MSw0NSArNzU2LDggQEAKIAkmY2xrX21vdXRfb25lbmFuZCwKIAkmY2xrX21vdXRfZXBsbCwKIAkmY2xrX21vdXRfaHBsbCwKLQkmY2xrX3NwaTAsCi0JJmNsa19zcGkxLAotCSZjbGtfc3BpMiwKLQkmY2xrX3VhcnRfdWNsazEsCi0JJmNsa19hdWRpbzAsCi0JJmNsa19hdWRpbzEsCi0JJmNsa19hdWRpbzIsCi0JJmNsa19zcGRpZiwKLQkmY2xrX2xjZCwKLQkmY2xrX2ZpbWMwLAotCSZjbGtfZmltYzEsCi0JJmNsa19maW1jMiwKLQkmY2xrX21tYzAsCi0JJmNsa19tbWMxLAotCSZjbGtfbW1jMiwKLQkmY2xrX3VzYmhvc3QsCiB9OwogCi1zdGF0aWMgdm9pZCBfX2luaXRfb3JfY3B1ZnJlcSBzNXBjMTAwX3NldF9jbGtzcmMoc3RydWN0IGNsa3NyY19jbGsgKmNsaykKLXsKLQlzdHJ1Y3QgY2xrX3NvdXJjZXMgKnNyY3MgPSBjbGstPnNvdXJjZXM7Ci0JdTMyIGNsa3NyYyA9IF9fcmF3X3JlYWRsKGNsay0+cmVnX3NvdXJjZSk7Ci0KLQljbGtzcmMgJj0gY2xrLT5tYXNrOwotCWNsa3NyYyA+Pj0gY2xrLT5zaGlmdDsKLQotCWlmIChjbGtzcmMgPiBzcmNzLT5ucl9zb3VyY2VzIHx8ICFzcmNzLT5zb3VyY2VzW2Nsa3NyY10pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogYmFkIHNvdXJjZSAlZFxuIiwKLQkJICAgICAgIGNsay0+Y2xrLm5hbWUsIGNsa3NyYyk7Ci0JCXJldHVybjsKLQl9Ci0KLQljbGstPmNsay5wYXJlbnQgPSBzcmNzLT5zb3VyY2VzW2Nsa3NyY107Ci0KLQlwcmludGsoS0VSTl9JTkZPICIlczogc291cmNlIGlzICVzICglZCksIHJhdGUgaXMgJWxkLiUwM2xkIE1IelxuIiwKLQkJY2xrLT5jbGsubmFtZSwgY2xrLT5jbGsucGFyZW50LT5uYW1lLCBjbGtzcmMsCi0JCXByaW50X21oeihjbGtfZ2V0X3JhdGUoJmNsay0+Y2xrKSkpOwotfQotCiAjZGVmaW5lIEdFVF9ESVYoY2xrLCBmaWVsZCkgKCgoKGNsaykgJiBmaWVsZCMjX01BU0spID4+IGZpZWxkIyNfU0hJRlQpICsgMSkKIAogdm9pZCBfX2luaXRfb3JfY3B1ZnJlcSBzNXBjMTAwX3NldHVwX2Nsb2Nrcyh2b2lkKQpAQCAtMTA4MywxNyArODIxLDI1IEBACiAJY2xrX2YucmF0ZSA9IGFybWNsazsKIAogCWZvciAocHRyID0gMDsgcHRyIDwgQVJSQVlfU0laRShpbml0X3BhcmVudHMpOyBwdHIrKykKLQkJczVwYzEwMF9zZXRfY2xrc3JjKGluaXRfcGFyZW50c1twdHJdKTsKKwkJczNjX3NldF9jbGtzcmMoaW5pdF9wYXJlbnRzW3B0cl0sIHRydWUpOworCisJZm9yIChwdHIgPSAwOyBwdHIgPCBBUlJBWV9TSVpFKGNsa3NyY19hdWRpbyk7IHB0cisrKQorCQlzM2Nfc2V0X2Nsa3NyYyhjbGtzcmNfYXVkaW8gKyBwdHIsIHRydWUpOworCisJZm9yIChwdHIgPSAwOyBwdHIgPCBBUlJBWV9TSVpFKGNsa3NyY19jbGtzKTsgcHRyKyspCisJCXMzY19zZXRfY2xrc3JjKGNsa3NyY19jbGtzICsgcHRyLCB0cnVlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjbGsgKmNsa3NbXSBfX2luaXRkYXRhID0gewogCSZjbGtfZXh0X3h0YWxfbXV4LAotCSZjbGtfbW91dF9hcGxsLmNsaywKIAkmY2xrX2RvdXRfYXBsbCwKIAkmY2xrX2RvdXRfZDBfYnVzLAogCSZjbGtfZG91dF9wY2xrZDAsCiAJJmNsa19kb3V0X2FwbGwyLAorCSZjbGtfbW91dF9hcGxsLmNsaywKIAkmY2xrX21vdXRfbXBsbC5jbGssCisJJmNsa19tb3V0X2VwbGwuY2xrLAorCSZjbGtfbW91dF9ocGxsLmNsaywKIAkmY2xrX21vdXRfYW0uY2xrLAogCSZjbGtfZG91dF9kMV9idXMsCiAJJmNsa19tb3V0X29uZW5hbmQuY2xrLApAQCAtMTEwMSwyOSArODQ3LDEyIEBACiAJJmNsa19kb3V0X21wbGwyLAogCSZjbGtfZG91dF9jYW0sCiAJJmNsa19kb3V0X21wbGwsCi0JJmNsa19tb3V0X2VwbGwuY2xrLAogCSZjbGtfZm91dF9lcGxsLAogCSZjbGtfaWlzX2NkMCwKIAkmY2xrX2lpc19jZDEsCiAJJmNsa19paXNfY2QyLAogCSZjbGtfcGNtX2NkMCwKIAkmY2xrX3BjbV9jZDEsCi0JJmNsa19zcGkwLmNsaywKLQkmY2xrX3NwaTEuY2xrLAotCSZjbGtfc3BpMi5jbGssCi0JJmNsa191YXJ0X3VjbGsxLmNsaywKLQkmY2xrX2F1ZGlvMC5jbGssCi0JJmNsa19hdWRpbzEuY2xrLAotCSZjbGtfYXVkaW8yLmNsaywKLQkmY2xrX3NwZGlmLmNsaywKLQkmY2xrX2xjZC5jbGssCi0JJmNsa19maW1jMC5jbGssCi0JJmNsa19maW1jMS5jbGssCi0JJmNsa19maW1jMi5jbGssCi0JJmNsa19tbWMwLmNsaywKLQkmY2xrX21tYzEuY2xrLAotCSZjbGtfbW1jMi5jbGssCi0JJmNsa191c2Job3N0LmNsaywKIAkmY2xrX2FybSwKIH07CiAKQEAgLTExNDEsNCArODcwLDcgQEAKIAkJCSAgICAgICBjbGtwLT5uYW1lLCByZXQpOwogCQl9CiAJfQorCisJczNjX3JlZ2lzdGVyX2Nsa3NyYyhjbGtzcmNfYXVkaW8sIEFSUkFZX1NJWkUoY2xrc3JjX2F1ZGlvKSk7CisJczNjX3JlZ2lzdGVyX2Nsa3NyYyhjbGtzcmNfY2xrcywgQVJSQVlfU0laRShjbGtzcmNfY2xrcykpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL0tjb25maWcgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvS2NvbmZpZwppbmRleCA0ODZhMGQ2Li5kNTUyYzY1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvS2NvbmZpZworKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvS2NvbmZpZwpAQCAtNywxMSArNywyNDAgQEAKIGNvbmZpZyBQTEFUX1NBTVNVTkcKIAlib29sCiAJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAgfHwgQVJDSF9TM0MyNEEwIHx8IEFSQ0hfUzNDNjRYWCB8fCBBUkNIX1M1UEMxWFgKKwlzZWxlY3QgTk9fSU9QT1JUCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgQmFzZSBwbGF0Zm9ybSBjb2RlIGZvciBhbGwgU2Ftc3VuZyBTb0MgYmFzZWQgc3lzdGVtcwogCiBpZiBQTEFUX1NBTVNVTkcKIAorIyBib290IGNvbmZpZ3VyYXRpb25zCisKK2NvbW1lbnQgIkJvb3Qgb3B0aW9ucyIKKworY29uZmlnIFMzQ19CT09UX1dBVENIRE9HCisJYm9vbCAiUzNDIEluaXRpYWxpc2F0aW9uIHdhdGNoZG9nIgorCWRlcGVuZHMgb24gUzNDMjQxMF9XQVRDSERPRworCWhlbHAKKwkgIFNheSB5IHRvIGVuYWJsZSB0aGUgd2F0Y2hkb2cgZHVyaW5nIHRoZSBrZXJuZWwgZGVjb21wcmVzc2lvbgorCSAgc3RhZ2UuIElmIHRoZSBrZXJuZWwgZmFpbHMgdG8gdW5jb21wcmVzcywgdGhlbiB0aGUgd2F0Y2hkb2cKKwkgIHdpbGwgdHJpZ2dlciBhIHJlc2V0IGFuZCB0aGUgc3lzdGVtIHNob3VsZCByZXN0YXJ0LgorCitjb25maWcgUzNDX0JPT1RfRVJST1JfUkVTRVQKKwlib29sICJTM0MgUmVib290IG9uIGRlY29tcHJlc3Npb24gZXJyb3IiCisJaGVscAorCSAgU2F5IHkgaGVyZSB0byB1c2UgdGhlIHdhdGNoZG9nIHRvIHJlc2V0IHRoZSBzeXN0ZW0gaWYgdGhlCisJICBrZXJuZWwgZGVjb21wcmVzc29yIGRldGVjdHMgYW4gZXJyb3IgZHVyaW5nIGRlY29tcHJlc3Npb24uCisKK2NvbmZpZyBTM0NfQk9PVF9VQVJUX0ZPUkNFX0ZJRk8KKyAgICAgICBib29sICJGb3JjZSBVQVJUIEZJRk8gb24gZHVyaW5nIGJvb3QgcHJvY2VzcyIKKyAgICAgICBkZWZhdWx0IHkKKyAgICAgICBoZWxwCisgICAgICAgICBTYXkgWSBoZXJlIHRvIGZvcmNlIHRoZSBVQVJUIEZJRk9zIG9uIGR1cmluZyB0aGUga2VybmVsCisJIHVuY29tcHJlc3NvcgorCisKK2NvbmZpZyBTM0NfTE9XTEVWRUxfVUFSVF9QT1JUCisJaW50ICJTM0MgVUFSVCB0byB1c2UgZm9yIGxvdy1sZXZlbCBtZXNzYWdlcyIKKwlkZWZhdWx0IDAKKwloZWxwCisJICBDaG9pY2Ugb2Ygd2hpY2ggVUFSVCBwb3J0IHRvIHVzZSBmb3IgdGhlIGxvdy1sZXZlbCBtZXNzYWdlcywKKwkgIHN1Y2ggYXMgdGhlIGBVbmNvbXByZXNzaW5nLi4uYCBhdCBzdGFydCB0aW1lLiBUaGUgdmFsdWUgb2YKKwkgIHRoaXMgY29uZmlndXJhdGlvbiBzaG91bGQgYmUgYmV0d2VlbiB6ZXJvIGFuZCB0d28uIFRoZSBwb3J0CisJICBtdXN0IGhhdmUgYmVlbiBpbml0aWFsaXNlZCBieSB0aGUgYm9vdC1sb2FkZXIgYmVmb3JlIHVzZS4KKworIyBjbG9jayBvcHRpb25zCisKK2NvbmZpZyBTQU1TVU5HX0NMS1NSQworCWJvb2wKKwloZWxwCisJICBTZWxlY3QgdGhlIGNsb2NrIGNvZGUgZm9yIHRoZSBjbGtzcmMgaW1wbGVtZW50YXRpb24KKwkgIHVzZWQgYnkgbmV3ZXIgc3lzdGVtcyBzdWNoIGFzIHRoZSBTM0M2NFhYLgorCisjIG9wdGlvbnMgZm9yIElSUSBzdXBwb3J0CisKK2NvbmZpZyBTQU1TVU5HX0lSUV9WSUNfVElNRVIKKyAgICAgICBib29sCisgICAgICAgaGVscAorICAgICAgICAgSW50ZXJuYWwgY29uZmlndXJhdGlvbiB0byBidWlsZCB0aGUgVklDIHRpbWVyIGludGVycnVwdCBjb2RlLgorCitjb25maWcgU0FNU1VOR19JUlFfVUFSVAorICAgICAgIGJvb2wKKyAgICAgICBoZWxwCisgICAgICAgICBJbnRlcm5hbCBjb25maWd1cmF0aW9uIHRvIGJ1aWxkIHRoZSBJUlEgVUFSVCBkZW11eCBjb2RlLgorCisjIG9wdGlvbnMgZm9yIGdwaW8gY29uZmlndXJhdGlvbiBzdXBwb3J0CisKK2NvbmZpZyBTQU1TVU5HX0dQSU9MSUJfNEJJVAorCWJvb2wKKwloZWxwCisJICBHUElPbGliIGZpbGUgY29udGFpbnMgdGhlIDQgYml0IG1vZGlmaWNhdGlvbiBmdW5jdGlvbnMgZm9yIGdwaW8KKwkgIGNvbmZpZ3VyYXRpb24uIEdQSU9saWIgc2hhbGwgYmUgY29tcGlsZWQgb25seSBmb3IgUzNDNjRYWCBhbmQgUzVQCisJICBzZXJpZXMgb2YgcHJvY2Vzc29ycy4KKworY29uZmlnIFMzQ19HUElPX0NGR19TM0MyNFhYCisJYm9vbAorCWhlbHAKKwkgIEludGVybmFsIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIFMzQzI0WFggc3R5bGUgR1BJTyBjb25maWd1cmF0aW9uCisJICBmdW5jdGlvbnMuCisKK2NvbmZpZyBTM0NfR1BJT19DRkdfUzNDNjRYWAorCWJvb2wKKwloZWxwCisJICBJbnRlcm5hbCBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSBTM0M2NFhYIHN0eWxlIEdQSU8gY29uZmlndXJhdGlvbgorCSAgZnVuY3Rpb25zLgorCitjb25maWcgUzVQX0dQSU9fQ0ZHX1M1UEMxWFgKKwlib29sCisJaGVscAorCSAgSW50ZXJuYWwgY29uZmlndXJhdGlvbiB0byBlbmFibGUgUzVQQzFYWCBzdHlsZSBHUElPIGNvbmZpZ3VyYXRpb24KKwkgIGZ1bmN0aW9ucy4KKworY29uZmlnIFMzQ19HUElPX1BVTExfVVBET1dOCisJYm9vbAorCWhlbHAKKwkgIEludGVybmFsIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIHRoZSBjb3JyZWN0IEdQSU8gcHVsbCBoZWxwZXIKKworY29uZmlnIFMzQ19HUElPX1BVTExfRE9XTgorCWJvb2wKKwloZWxwCisJICBJbnRlcm5hbCBjb25maWd1cmF0aW9uIHRvIGVuYWJsZSB0aGUgY29ycmVjdCBHUElPIHB1bGwgaGVscGVyCisKK2NvbmZpZyBTM0NfR1BJT19QVUxMX1VQCisJYm9vbAorCWhlbHAKKwkgIEludGVybmFsIGNvbmZpZ3VyYXRpb24gdG8gZW5hYmxlIHRoZSBjb3JyZWN0IEdQSU8gcHVsbCBoZWxwZXIKKworY29uZmlnIFNBTVNVTkdfR1BJT19FWFRSQQorCWludCAiTnVtYmVyIG9mIGFkZGl0aW9uYWwgR1BJTyBwaW5zIgorCWRlZmF1bHQgMAorCWhlbHAKKwkgIFVzZSBhZGRpdGlvbmFsIEdQSU8gc3BhY2UgaW4gYWRkaXRpb24gdG8gdGhlIEdQSU8ncyB0aGUgU09DCisJICBwcm92aWRlcy4gVGhpcyBhbGxvd3MgZXhwYW5kaW5nIHRoZSBHUElPIHNwYWNlIGZvciB1c2Ugd2l0aAorCSAgR1BJTyBleHBhbmRlcnMuCisKK2NvbmZpZyBTM0NfR1BJT19TUEFDRQorCWludCAiU3BhY2UgYmV0d2VlbiBncGlvIGJhbmtzIgorCWRlZmF1bHQgMAorCWhlbHAKKwkgIEFkZCBhIG51bWJlciBvZiBzcGFyZSBHUElPIGVudHJpZXMgYmV0d2VlbiBlYWNoIGJhbmsgZm9yIGRlYnVnZ2luZworCSAgcHVycG9zZXMuIFRoaXMgYWxsb3dzIGFueSBwcm9ibGVtcyB3aGVyZSBhbiBjb3VudGVyIG92ZXJmbG93cyBmcm9tCisJICBvbmUgYmFuayB0byBhbm90aGVyIHRvIGJlIGNhdWdodCwgYXQgdGhlIGV4cGVuc2Ugb2YgdXNpbmcgYSBsaXR0bGUKKwkgIG1vcmUgbWVtb3J5LgorCitjb25maWcgUzNDX0dQSU9fVFJBQ0sKKwlib29sCisJaGVscAorCSAgSW50ZXJuYWwgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlIHRoZSBzM2Mgc3BlY2lmaWMgZ3BpbworCSAgY2hpcCB0cmFja2luZyBpZiB0aGUgcGxhdGZvcm0gcmVxdWlyZXMgaXQuCisKKyMgQURDIGRyaXZlcgorCitjb25maWcgUzNDX0FEQworCWJvb2wgIkFEQyBjb21tb24gZHJpdmVyIHN1cHBvcnQiCisJaGVscAorCSAgQ29yZSBzdXBwb3J0IGZvciB0aGUgQURDIGJsb2NrIGZvdW5kIGluIHRoZSBTYW1zdW5nIFNvQyBzeXN0ZW1zCisJICBmb3IgZHJpdmVycyBzdWNoIGFzIHRoZSB0b3VjaHNjcmVlbiBhbmQgaHdtb24gdG8gdXNlIHRvIHNoYXJlCisJICB0aGlzIHJlc291cmNlLgorCisjIGRldmljZSBkZWZpbml0aW9ucyB0byBjb21waWxlIGluCisKK2NvbmZpZyBTM0NfREVWX0hTTU1DCisJYm9vbAorCWhlbHAKKwkgIENvbXBpbGUgaW4gcGxhdGZvcm0gZGV2aWNlIGRlZmluaXRpb25zIGZvciBIU01NQyBjb2RlCisKK2NvbmZpZyBTM0NfREVWX0hTTU1DMQorCWJvb2wKKwloZWxwCisJICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9ucyBmb3IgSFNNTUMgY2hhbm5lbCAxCisKK2NvbmZpZyBTM0NfREVWX0hTTU1DMgorCWJvb2wKKwloZWxwCisJICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9ucyBmb3IgSFNNTUMgY2hhbm5lbCAyCisKK2NvbmZpZyBTM0NfREVWX0kyQzEKKwlib29sCisJaGVscAorCSAgQ29tcGlsZSBpbiBwbGF0Zm9ybSBkZXZpY2UgZGVmaW5pdGlvbnMgZm9yIEkyQyBjaGFubmVsIDEKKworY29uZmlnIFMzQ19ERVZfRkIKKwlib29sCisJaGVscAorCSAgQ29tcGlsZSBpbiBwbGF0Zm9ybSBkZXZpY2UgZGVmaW5pdGlvbiBmb3IgZnJhbWVidWZmZXIKKworY29uZmlnIFMzQ19ERVZfVVNCX0hPU1QKKwlib29sCisJaGVscAorCSAgQ29tcGlsZSBpbiBwbGF0Zm9ybSBkZXZpY2UgZGVmaW5pdGlvbiBmb3IgVVNCIGhvc3QuCisKK2NvbmZpZyBTM0NfREVWX1VTQl9IU09URworCWJvb2wKKwloZWxwCisJICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9uIGZvciBVU0IgaGlnaC1zcGVlZCBPdEcKKworY29uZmlnIFMzQ19ERVZfTkFORAorCWJvb2wKKwloZWxwCisJICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9uIGZvciBOQU5EIGNvbnRyb2xsZXIKKworY29uZmlnIFMzQzY0WFhfREVWX1NQSQorCWJvb2wKKwloZWxwCisJICBDb21waWxlIGluIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9ucyBmb3IgUzNDNjRYWCdzIHR5cGUKKwkgIFNQSSBjb250cm9sbGVycy4KKworIyBETUEKKworY29uZmlnIFMzQ19ETUEKKwlib29sCisJaGVscAorCSAgSW50ZXJuYWwgY29uZmlndXJhdGlvbiBmb3IgUzNDIERNQSBjb3JlCisKK2NvbW1lbnQgIlBvd2VyIG1hbmFnZW1lbnQiCisKK2NvbmZpZyBTQU1TVU5HX1BNX0RFQlVHCisJYm9vbCAiUzNDMjQxMCBQTSBTdXNwZW5kIGRlYnVnIgorCWRlcGVuZHMgb24gUE0KKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHZlcmJvc2UgZGVidWdnaW5nIGZyb20gdGhlIFBNIFN1c3BlbmQgYW5kCisJICBSZXN1bWUgY29kZS4gU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vYXJtL1NhbXN1bmctUzNDMjRYWC9TdXNwZW5kLnR4dD4KKwkgIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitjb25maWcgUzNDX1BNX0RFQlVHX0xFRF9TTURLCisgICAgICAgYm9vbCAiU01ESyBMRUQgc3VzcGVuZC9yZXN1bWUgZGVidWdnaW5nIgorICAgICAgIGRlcGVuZHMgb24gUE0gJiYgKE1BQ0hfU01ESzY0MTApCisgICAgICAgaGVscAorICAgICAgICAgU2F5IFkgaGVyZSB0byBlbmFibGUgdGhlIHVzZSBvZiB0aGUgU01ESyBMRURzIG9uIHRoZSBiYXNlYm9hcmQKKwkgZm9yIGRlYnVnZ2luZyBvZiB0aGUgc3RhdGUgb2YgdGhlIHN1c3BlbmQgYW5kIHJlc3VtZSBwcm9jZXNzLgorCisJIE5vdGUsIHRoaXMgY3VycmVudGx5IG9ubHkgd29ya3MgZm9yIFMzQzY0WFggYmFzZWQgU01ESyBib2FyZHMuCisKK2NvbmZpZyBTQU1TVU5HX1BNX0NIRUNLCisJYm9vbCAiUzNDMjQxMCBQTSBTdXNwZW5kIE1lbW9yeSBDUkMiCisJZGVwZW5kcyBvbiBQTSAmJiBDUkMzMgorCWhlbHAKKwkgIEVuYWJsZSB0aGUgUE0gY29kZSdzIG1lbW9yeSBhcmVhIGNoZWNrc3VtIG92ZXIgc2xlZXAuIFRoaXMgb3B0aW9uCisJICB3aWxsIGdlbmVyYXRlIENSQ3Mgb2YgYWxsIGJsb2NrcyBvZiBtZW1vcnksIGFuZCBzdG9yZSB0aGVtIGJlZm9yZQorCSAgZ29pbmcgdG8gc2xlZXAuIFRoZSBibG9ja3MgYXJlIHRoZW4gY2hlY2tlZCBvbiByZXN1bWUgZm9yIGFueQorCSAgZXJyb3JzLgorCisJICBOb3RlLCB0aGlzIGNhbiB0YWtlIHNldmVyYWwgc2Vjb25kcyBkZXBlbmRpbmcgb24gbWVtb3J5IHNpemUKKwkgIGFuZCBDUFUgc3BlZWQuCisKKwkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvU3VzcGVuZC50eHQ+CisKK2NvbmZpZyBTQU1TVU5HX1BNX0NIRUNLX0NIVU5LU0laRQorCWludCAiUzNDMjQxMCBQTSBTdXNwZW5kIENSQyBDaHVua3NpemUgKEtpQikiCisJZGVwZW5kcyBvbiBQTSAmJiBTQU1TVU5HX1BNX0NIRUNLCisJZGVmYXVsdCA2NAorCWhlbHAKKwkgIFNldCB0aGUgY2h1bmtzaXplIGluIEtpbG9ieXRlcyBvZiB0aGUgQ1JDIGZvciBjaGVja2luZyBtZW1vcnkKKwkgIGNvcnJ1cHRpb24gb3ZlciBzdXNwZW5kIGFuZCByZXN1bWUuIEEgc21hbGxlciB2YWx1ZSB3aWxsIG1lYW4gdGhhdAorCSAgdGhlIENSQyBkYXRhIGJsb2NrIHdpbGwgdGFrZSBtb3JlIG1lbW9yeSwgYnV0IHdpbCBpZGVudGlmeSBhbnkKKwkgIGZhdWx0cyB3aXRoIGJldHRlciBwcmVjaXNpb24uCisKKwkgIFNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvU3VzcGVuZC50eHQ+CiAKIGVuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvTWFrZWZpbGUgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvTWFrZWZpbGUKaW5kZXggNDQ3OGI5Zi4uMjJjODlkMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9NYWtlZmlsZQpAQCAtOSwzICs5LDQ4IEBACiBvYmotbgkJCQk6PSBkdW1teS5vCiBvYmotCQkJCTo9CiAKKyMgT2JqZWN0cyB3ZSBhbHdheXMgYnVpbGQgaW5kZXBlbmRlbnQgb2YgU29DIGNob2ljZQorCitvYmoteQkJCQkrPSBpbml0Lm8KK29iai15CQkJCSs9IHRpbWUubworb2JqLXkJCQkJKz0gY2xvY2subworb2JqLXkJCQkJKz0gcHdtLWNsb2NrLm8KK29iai15CQkJCSs9IGdwaW8ubworb2JqLXkJCQkJKz0gZ3Bpby1jb25maWcubworCitvYmotJChDT05GSUdfU0FNU1VOR19HUElPTElCXzRCSVQpCSs9IGdwaW9saWIubworb2JqLSQoQ09ORklHX1NBTVNVTkdfQ0xLU1JDKQkrPSBjbG9jay1jbGtzcmMubworCitvYmotJChDT05GSUdfU0FNU1VOR19JUlFfVUFSVCkJKz0gaXJxLXVhcnQubworb2JqLSQoQ09ORklHX1NBTVNVTkdfSVJRX1ZJQ19USU1FUikgKz0gaXJxLXZpYy10aW1lci5vCisKKyMgQURDCisKK29iai0kKENPTkZJR19TM0NfQURDKQkrPSBhZGMubworCisjIGRldmljZXMKKworb2JqLSQoQ09ORklHX1MzQ19ERVZfSFNNTUMpCSs9IGRldi1oc21tYy5vCitvYmotJChDT05GSUdfUzNDX0RFVl9IU01NQzEpCSs9IGRldi1oc21tYzEubworb2JqLSQoQ09ORklHX1MzQ19ERVZfSFNNTUMyKQkrPSBkZXYtaHNtbWMyLm8KK29iai15CQkJCSs9IGRldi1pMmMwLm8KK29iai0kKENPTkZJR19TM0NfREVWX0kyQzEpCSs9IGRldi1pMmMxLm8KK29iai0kKENPTkZJR19TM0NfREVWX0ZCKQkrPSBkZXYtZmIubworb2JqLXkJCQkJKz0gZGV2LXVhcnQubworb2JqLSQoQ09ORklHX1MzQ19ERVZfVVNCX0hPU1QpCSs9IGRldi11c2Iubworb2JqLSQoQ09ORklHX1MzQ19ERVZfVVNCX0hTT1RHKQkrPSBkZXYtdXNiLWhzb3RnLm8KK29iai0kKENPTkZJR19TM0NfREVWX05BTkQpCSs9IGRldi1uYW5kLm8KKworIyBETUEgc3VwcG9ydAorCitvYmotJChDT05GSUdfUzNDX0RNQSkJCSs9IGRtYS5vCisKKyMgUE0gc3VwcG9ydAorCitvYmotJChDT05GSUdfUE0pCQkrPSBwbS5vCitvYmotJChDT05GSUdfUE0pCQkrPSBwbS1ncGlvLm8KK29iai0kKENPTkZJR19TQU1TVU5HX1BNX0NIRUNLKQkrPSBwbS1jaGVjay5vCisKKyMgUFdNIHN1cHBvcnQKKworb2JqLSQoQ09ORklHX0hBVkVfUFdNKQkJKz0gcHdtLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9hZGMuYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9hZGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjU4MzNiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2FkYy5jCkBAIC0wLDAgKzEsNDc0IEBACisvKiBhcmNoL2FybS9wbGF0LXNhbXN1bmcvYWRjLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPiwgPGJlbi1saW51eEBmbHVmZi5vcmc+CisgKgorICogU2Ftc3VuZyBBREMgZGV2aWNlIGNvcmUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvcmVncy1hZGMuaD4KKyNpbmNsdWRlIDxwbGF0L2FkYy5oPgorCisvKiBUaGlzIGRyaXZlciBpcyBkZXNpZ25lZCB0byBjb250cm9sIHRoZSB1c2FnZSBvZiB0aGUgQURDIGJsb2NrIGJldHdlZW4KKyAqIHRoZSB0b3VjaHNjcmVlbiBhbmQgYW55IG90aGVyIGRyaXZlcnMgdGhhdCBtYXkgbmVlZCB0byB1c2UgaXQsIHN1Y2ggYXMKKyAqIHRoZSBod21vbiBkcml2ZXIuCisgKgorICogUHJpb3JpdHkgd2lsbCBiZSBnaXZlbiB0byB0aGUgdG91Y2hzY3JlZW4gZHJpdmVyLCBidXQgYXMgdGhpcyBpdHNlbGYgaXMKKyAqIHJhdGUgbGltaXRlZCBpdCBzaG91bGQgbm90IHN0YXJ2ZSBvdGhlciByZXF1ZXN0cyB3aGljaCBhcmUgcHJvY2Vzc2VkIGluCisgKiBvcmRlciB0aGF0IHRoZXkgYXJlIHJlY2VpdmVkLgorICoKKyAqIEVhY2ggdXNlciByZWdpc3RlcnMgdG8gZ2V0IGEgY2xpZW50IGJsb2NrIHdoaWNoIHVuaXF1ZWx5IGlkZW50aWZpZXMgaXQKKyAqIGFuZCBzdG9yZXMgaW5mb3JtYXRpb24gc3VjaCBhcyB0aGUgbmVjZXNzYXJ5IGZ1bmN0aW9ucyB0byBjYWxsYmFjayB3aGVuCisgKiBhY3Rpb24gaXMgcmVxdWlyZWQuCisgKi8KKworZW51bSBzM2NfY3B1X3R5cGUgeworCVRZUEVfUzNDMjRYWCwKKwlUWVBFX1MzQzY0WFgKK307CisKK3N0cnVjdCBzM2NfYWRjX2NsaWVudCB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKKwlzdHJ1Y3QgbGlzdF9oZWFkCSBwZW5kOworCXdhaXRfcXVldWVfaGVhZF90CSp3YWl0OworCisJdW5zaWduZWQgaW50CQkgbnJfc2FtcGxlczsKKwlpbnQJCQkgcmVzdWx0OworCXVuc2lnbmVkIGNoYXIJCSBpc190czsKKwl1bnNpZ25lZCBjaGFyCQkgY2hhbm5lbDsKKworCXZvaWQJKCpzZWxlY3RfY2IpKHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqYywgdW5zaWduZWQgc2VsZWN0ZWQpOworCXZvaWQJKCpjb252ZXJ0X2NiKShzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmMsCisJCQkgICAgICB1bnNpZ25lZCB2YWwxLCB1bnNpZ25lZCB2YWwyLAorCQkJICAgICAgdW5zaWduZWQgKnNhbXBsZXNfbGVmdCk7Cit9OworCitzdHJ1Y3QgYWRjX2RldmljZSB7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZQkqcGRldjsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlCSpvd25lcjsKKwlzdHJ1Y3QgY2xrCQkqY2xrOworCXN0cnVjdCBzM2NfYWRjX2NsaWVudAkqY3VyOworCXN0cnVjdCBzM2NfYWRjX2NsaWVudAkqdHNfcGVuZDsKKwl2b2lkIF9faW9tZW0JCSpyZWdzOworCisJdW5zaWduZWQgaW50CQkgcHJlc2NhbGU7CisKKwlpbnQJCQkgaXJxOworfTsKKworc3RhdGljIHN0cnVjdCBhZGNfZGV2aWNlICphZGNfZGV2OworCitzdGF0aWMgTElTVF9IRUFEKGFkY19wZW5kaW5nKTsKKworI2RlZmluZSBhZGNfZGJnKF9hZGMsIG1zZy4uLikgZGV2X2RiZygmKF9hZGMpLT5wZGV2LT5kZXYsIG1zZykKKworc3RhdGljIGlubGluZSB2b2lkIHMzY19hZGNfY29udmVydChzdHJ1Y3QgYWRjX2RldmljZSAqYWRjKQoreworCXVuc2lnbmVkIGNvbiA9IHJlYWRsKGFkYy0+cmVncyArIFMzQzI0MTBfQURDQ09OKTsKKworCWNvbiB8PSBTM0MyNDEwX0FEQ0NPTl9FTkFCTEVfU1RBUlQ7CisJd3JpdGVsKGNvbiwgYWRjLT5yZWdzICsgUzNDMjQxMF9BRENDT04pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgczNjX2FkY19zZWxlY3Qoc3RydWN0IGFkY19kZXZpY2UgKmFkYywKKwkJCQkgIHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50KQoreworCXVuc2lnbmVkIGNvbiA9IHJlYWRsKGFkYy0+cmVncyArIFMzQzI0MTBfQURDQ09OKTsKKworCWNsaWVudC0+c2VsZWN0X2NiKGNsaWVudCwgMSk7CisKKwljb24gJj0gflMzQzI0MTBfQURDQ09OX01VWE1BU0s7CisJY29uICY9IH5TM0MyNDEwX0FEQ0NPTl9TVERCTTsKKwljb24gJj0gflMzQzI0MTBfQURDQ09OX1NUQVJUTUFTSzsKKworCWlmICghY2xpZW50LT5pc190cykKKwkJY29uIHw9IFMzQzI0MTBfQURDQ09OX1NFTE1VWChjbGllbnQtPmNoYW5uZWwpOworCisJd3JpdGVsKGNvbiwgYWRjLT5yZWdzICsgUzNDMjQxMF9BRENDT04pOworfQorCitzdGF0aWMgdm9pZCBzM2NfYWRjX2RiZ3Nob3coc3RydWN0IGFkY19kZXZpY2UgKmFkYykKK3sKKwlhZGNfZGJnKGFkYywgIkNPTj0lMDh4LCBUU0M9JTA4eCwgRExZPSUwOHhcbiIsCisJCXJlYWRsKGFkYy0+cmVncyArIFMzQzI0MTBfQURDQ09OKSwKKwkJcmVhZGwoYWRjLT5yZWdzICsgUzNDMjQxMF9BRENUU0MpLAorCQlyZWFkbChhZGMtPnJlZ3MgKyBTM0MyNDEwX0FEQ0RMWSkpOworfQorCitzdGF0aWMgdm9pZCBzM2NfYWRjX3RyeShzdHJ1Y3QgYWRjX2RldmljZSAqYWRjKQoreworCXN0cnVjdCBzM2NfYWRjX2NsaWVudCAqbmV4dCA9IGFkYy0+dHNfcGVuZDsKKworCWlmICghbmV4dCAmJiAhbGlzdF9lbXB0eSgmYWRjX3BlbmRpbmcpKSB7CisJCW5leHQgPSBsaXN0X2ZpcnN0X2VudHJ5KCZhZGNfcGVuZGluZywKKwkJCQkJc3RydWN0IHMzY19hZGNfY2xpZW50LCBwZW5kKTsKKwkJbGlzdF9kZWwoJm5leHQtPnBlbmQpOworCX0gZWxzZQorCQlhZGMtPnRzX3BlbmQgPSBOVUxMOworCisJaWYgKG5leHQpIHsKKwkJYWRjX2RiZyhhZGMsICJuZXcgY2xpZW50IGlzICVwXG4iLCBuZXh0KTsKKwkJYWRjLT5jdXIgPSBuZXh0OworCQlzM2NfYWRjX3NlbGVjdChhZGMsIG5leHQpOworCQlzM2NfYWRjX2NvbnZlcnQoYWRjKTsKKwkJczNjX2FkY19kYmdzaG93KGFkYyk7CisJfQorfQorCitpbnQgczNjX2FkY19zdGFydChzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwKKwkJICB1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IG5yX3NhbXBsZXMpCit7CisJc3RydWN0IGFkY19kZXZpY2UgKmFkYyA9IGFkY19kZXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWlmICghYWRjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBmaW5kIGFkY1xuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoY2xpZW50LT5pc190cyAmJiBhZGMtPnRzX3BlbmQpCisJCXJldHVybiAtRUFHQUlOOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJY2xpZW50LT5jaGFubmVsID0gY2hhbm5lbDsKKwljbGllbnQtPm5yX3NhbXBsZXMgPSBucl9zYW1wbGVzOworCisJaWYgKGNsaWVudC0+aXNfdHMpCisJCWFkYy0+dHNfcGVuZCA9IGNsaWVudDsKKwllbHNlCisJCWxpc3RfYWRkX3RhaWwoJmNsaWVudC0+cGVuZCwgJmFkY19wZW5kaW5nKTsKKworCWlmICghYWRjLT5jdXIpCisJCXMzY19hZGNfdHJ5KGFkYyk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzM2NfYWRjX3N0YXJ0KTsKKworc3RhdGljIHZvaWQgczNjX2NvbnZlcnRfZG9uZShzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwKKwkJCSAgICAgdW5zaWduZWQgdiwgdW5zaWduZWQgdSwgdW5zaWduZWQgKmxlZnQpCit7CisJY2xpZW50LT5yZXN1bHQgPSB2OworCXdha2VfdXAoY2xpZW50LT53YWl0KTsKK30KKworaW50IHMzY19hZGNfcmVhZChzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNoKQoreworCURFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEX09OU1RBQ0sod2FrZSk7CisJaW50IHJldDsKKworCWNsaWVudC0+Y29udmVydF9jYiA9IHMzY19jb252ZXJ0X2RvbmU7CisJY2xpZW50LT53YWl0ID0gJndha2U7CisJY2xpZW50LT5yZXN1bHQgPSAtMTsKKworCXJldCA9IHMzY19hZGNfc3RhcnQoY2xpZW50LCBjaCwgMSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXJyOworCisJcmV0ID0gd2FpdF9ldmVudF90aW1lb3V0KHdha2UsIGNsaWVudC0+cmVzdWx0ID49IDAsIEhaIC8gMik7CisJaWYgKGNsaWVudC0+cmVzdWx0IDwgMCkgeworCQlyZXQgPSAtRVRJTUVET1VUOworCQlnb3RvIGVycjsKKwl9CisKKwljbGllbnQtPmNvbnZlcnRfY2IgPSBOVUxMOworCXJldHVybiBjbGllbnQtPnJlc3VsdDsKKworZXJyOgorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzM2NfYWRjX3JlYWQpOworCitzdGF0aWMgdm9pZCBzM2NfYWRjX2RlZmF1bHRfc2VsZWN0KHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgIHVuc2lnbmVkIHNlbGVjdCkKK3sKK30KKworc3RydWN0IHMzY19hZGNfY2xpZW50ICpzM2NfYWRjX3JlZ2lzdGVyKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCQkJCXZvaWQgKCpzZWxlY3QpKHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50LAorCQkJCQkJICAgICAgIHVuc2lnbmVkIGludCBzZWxlY3RlZCksCisJCQkJCXZvaWQgKCpjb252KShzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwKKwkJCQkJCSAgICAgdW5zaWduZWQgZDAsIHVuc2lnbmVkIGQxLAorCQkJCQkJICAgICB1bnNpZ25lZCAqc2FtcGxlc19sZWZ0KSwKKwkJCQkJdW5zaWduZWQgaW50IGlzX3RzKQoreworCXN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50OworCisJV0FSTl9PTighcGRldik7CisKKwlpZiAoIXNlbGVjdCkKKwkJc2VsZWN0ID0gczNjX2FkY19kZWZhdWx0X3NlbGVjdDsKKworCWlmICghcGRldikKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwljbGllbnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczNjX2FkY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNsaWVudCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgZm9yIGFkYyBjbGllbnRcbiIpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwl9CisKKwljbGllbnQtPnBkZXYgPSBwZGV2OworCWNsaWVudC0+aXNfdHMgPSBpc190czsKKwljbGllbnQtPnNlbGVjdF9jYiA9IHNlbGVjdDsKKwljbGllbnQtPmNvbnZlcnRfY2IgPSBjb252OworCisJcmV0dXJuIGNsaWVudDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHMzY19hZGNfcmVnaXN0ZXIpOworCit2b2lkIHMzY19hZGNfcmVsZWFzZShzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCkKK3sKKwkvKiBXZSBzaG91bGQgcmVhbGx5IGNoZWNrIHRoYXQgbm90aGluZyBpcyBpbiBwcm9ncmVzcy4gKi8KKwlpZiAoYWRjX2Rldi0+Y3VyID09IGNsaWVudCkKKwkJYWRjX2Rldi0+Y3VyID0gTlVMTDsKKwlpZiAoYWRjX2Rldi0+dHNfcGVuZCA9PSBjbGllbnQpCisJCWFkY19kZXYtPnRzX3BlbmQgPSBOVUxMOworCWVsc2UgeworCQlzdHJ1Y3QgbGlzdF9oZWFkICpwLCAqbjsKKwkJc3RydWN0IHMzY19hZGNfY2xpZW50ICp0bXA7CisKKwkJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZhZGNfcGVuZGluZykgeworCQkJdG1wID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgczNjX2FkY19jbGllbnQsIHBlbmQpOworCQkJaWYgKHRtcCA9PSBjbGllbnQpCisJCQkJbGlzdF9kZWwoJnRtcC0+cGVuZCk7CisJCX0KKwl9CisKKwlpZiAoYWRjX2Rldi0+Y3VyID09IE5VTEwpCisJCXMzY19hZGNfdHJ5KGFkY19kZXYpOworCWtmcmVlKGNsaWVudCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzM2NfYWRjX3JlbGVhc2UpOworCitzdGF0aWMgaXJxcmV0dXJuX3QgczNjX2FkY19pcnEoaW50IGlycSwgdm9pZCAqcHcpCit7CisJc3RydWN0IGFkY19kZXZpY2UgKmFkYyA9IHB3OworCXN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50ID0gYWRjLT5jdXI7CisJZW51bSBzM2NfY3B1X3R5cGUgY3B1ID0gcGxhdGZvcm1fZ2V0X2RldmljZV9pZChhZGMtPnBkZXYpLT5kcml2ZXJfZGF0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGRhdGEwLCBkYXRhMTsKKworCWlmICghY2xpZW50KSB7CisJCWRldl93YXJuKCZhZGMtPnBkZXYtPmRldiwgIiVzOiBubyBhZGMgcGVuZGluZ1xuIiwgX19mdW5jX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJZGF0YTAgPSByZWFkbChhZGMtPnJlZ3MgKyBTM0MyNDEwX0FEQ0RBVDApOworCWRhdGExID0gcmVhZGwoYWRjLT5yZWdzICsgUzNDMjQxMF9BRENEQVQxKTsKKwlhZGNfZGJnKGFkYywgInJlYWQgJWQ6IDB4JTA0eCwgMHglMDR4XG4iLCBjbGllbnQtPm5yX3NhbXBsZXMsIGRhdGEwLCBkYXRhMSk7CisKKwljbGllbnQtPm5yX3NhbXBsZXMtLTsKKworCWlmIChjcHUgPT0gVFlQRV9TM0M2NFhYKSB7CisJCS8qIFMzQzY0WFggQURDIHJlc29sdXRpb24gaXMgMTItYml0ICovCisJCWRhdGEwICY9IDB4ZmZmOworCQlkYXRhMSAmPSAweGZmZjsKKwl9IGVsc2UgeworCQlkYXRhMCAmPSAweDNmZjsKKwkJZGF0YTEgJj0gMHgzZmY7CisJfQorCisJaWYgKGNsaWVudC0+Y29udmVydF9jYikKKwkJKGNsaWVudC0+Y29udmVydF9jYikoY2xpZW50LCBkYXRhMCwgZGF0YTEsICZjbGllbnQtPm5yX3NhbXBsZXMpOworCisJaWYgKGNsaWVudC0+bnJfc2FtcGxlcyA+IDApIHsKKwkJLyogZmlyZSBhbm90aGVyIGNvbnZlcnNpb24gZm9yIHRoaXMgKi8KKworCQljbGllbnQtPnNlbGVjdF9jYihjbGllbnQsIDEpOworCQlzM2NfYWRjX2NvbnZlcnQoYWRjKTsKKwl9IGVsc2UgeworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCShjbGllbnQtPnNlbGVjdF9jYikoY2xpZW50LCAwKTsKKwkJYWRjLT5jdXIgPSBOVUxMOworCisJCXMzY19hZGNfdHJ5KGFkYyk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9CisKK2V4aXQ6CisJaWYgKGNwdSA9PSBUWVBFX1MzQzY0WFgpIHsKKwkJLyogQ2xlYXIgQURDIGludGVycnVwdCAqLworCQl3cml0ZWwoMCwgYWRjLT5yZWdzICsgUzNDNjRYWF9BRENDTFJJTlQpOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgczNjX2FkY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGFkY19kZXZpY2UgKmFkYzsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7CisJaW50IHJldDsKKwl1bnNpZ25lZCB0bXA7CisKKwlhZGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWRjX2RldmljZSksIEdGUF9LRVJORUwpOworCWlmIChhZGMgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBhZGNfZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJYWRjLT5wZGV2ID0gcGRldjsKKwlhZGMtPnByZXNjYWxlID0gUzNDMjQxMF9BRENDT05fUFJTQ1ZMKDQ5KTsKKworCWFkYy0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAxKTsKKwlpZiAoYWRjLT5pcnEgPD0gMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgYWRjIGlycVxuIik7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZXJyX2FsbG9jOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGFkYy0+aXJxLCBzM2NfYWRjX2lycSwgMCwgZGV2X25hbWUoZGV2KSwgYWRjKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhdHRhY2ggYWRjIGlycVxuIik7CisJCWdvdG8gZXJyX2FsbG9jOworCX0KKworCWFkYy0+Y2xrID0gY2xrX2dldChkZXYsICJhZGMiKTsKKwlpZiAoSVNfRVJSKGFkYy0+Y2xrKSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgYWRjIGNsb2NrXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihhZGMtPmNsayk7CisJCWdvdG8gZXJyX2lycTsKKwl9CisKKwlyZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlZ3MpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZmluZCByZWdpc3RlcnNcbiIpOworCQlyZXQgPSAtRU5YSU87CisJCWdvdG8gZXJyX2NsazsKKwl9CisKKwlhZGMtPnJlZ3MgPSBpb3JlbWFwKHJlZ3MtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlZ3MpKTsKKwlpZiAoIWFkYy0+cmVncykgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBtYXAgcmVnaXN0ZXJzXG4iKTsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIGVycl9jbGs7CisJfQorCisJY2xrX2VuYWJsZShhZGMtPmNsayk7CisKKwl0bXAgPSBhZGMtPnByZXNjYWxlIHwgUzNDMjQxMF9BRENDT05fUFJTQ0VOOworCWlmIChwbGF0Zm9ybV9nZXRfZGV2aWNlX2lkKHBkZXYpLT5kcml2ZXJfZGF0YSA9PSBUWVBFX1MzQzY0WFgpIHsKKwkJLyogRW5hYmxlIDEyLWJpdCBBREMgcmVzb2x1dGlvbiAqLworCQl0bXAgfD0gUzNDNjRYWF9BRENDT05fUkVTU0VMOworCX0KKwl3cml0ZWwodG1wLCBhZGMtPnJlZ3MgKyBTM0MyNDEwX0FEQ0NPTik7CisKKwlkZXZfaW5mbyhkZXYsICJhdHRhY2hlZCBhZGMgZHJpdmVyXG4iKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGFkYyk7CisJYWRjX2RldiA9IGFkYzsKKworCXJldHVybiAwOworCisgZXJyX2NsazoKKwljbGtfcHV0KGFkYy0+Y2xrKTsKKworIGVycl9pcnE6CisJZnJlZV9pcnEoYWRjLT5pcnEsIGFkYyk7CisKKyBlcnJfYWxsb2M6CisJa2ZyZWUoYWRjKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzM2NfYWRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhZGNfZGV2aWNlICphZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlvdW5tYXAoYWRjLT5yZWdzKTsKKwlmcmVlX2lycShhZGMtPmlycSwgYWRjKTsKKwljbGtfZGlzYWJsZShhZGMtPmNsayk7CisJY2xrX3B1dChhZGMtPmNsayk7CisJa2ZyZWUoYWRjKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHMzY19hZGNfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGFkY19kZXZpY2UgKmFkYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXUzMiBjb247CisKKwljb24gPSByZWFkbChhZGMtPnJlZ3MgKyBTM0MyNDEwX0FEQ0NPTik7CisJY29uIHw9IFMzQzI0MTBfQURDQ09OX1NUREJNOworCXdyaXRlbChjb24sIGFkYy0+cmVncyArIFMzQzI0MTBfQURDQ09OKTsKKworCWRpc2FibGVfaXJxKGFkYy0+aXJxKTsKKwljbGtfZGlzYWJsZShhZGMtPmNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzM2NfYWRjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhZGNfZGV2aWNlICphZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWNsa19lbmFibGUoYWRjLT5jbGspOworCWVuYWJsZV9pcnEoYWRjLT5pcnEpOworCisJd3JpdGVsKGFkYy0+cHJlc2NhbGUgfCBTM0MyNDEwX0FEQ0NPTl9QUlNDRU4sCisJICAgICAgIGFkYy0+cmVncyArIFMzQzI0MTBfQURDQ09OKTsKKworCXJldHVybiAwOworfQorCisjZWxzZQorI2RlZmluZSBzM2NfYWRjX3N1c3BlbmQgTlVMTAorI2RlZmluZSBzM2NfYWRjX3Jlc3VtZSBOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgczNjX2FkY19kcml2ZXJfaWRzW10gPSB7CisJeworCQkubmFtZSAgICAgICAgICAgPSAiczNjMjR4eC1hZGMiLAorCQkuZHJpdmVyX2RhdGEgICAgPSBUWVBFX1MzQzI0WFgsCisJfSwgeworCQkubmFtZSAgICAgICAgICAgPSAiczNjNjR4eC1hZGMiLAorCQkuZHJpdmVyX2RhdGEgICAgPSBUWVBFX1MzQzY0WFgsCisJfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBzM2NfYWRjX2RyaXZlcl9pZHMpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzM2NfYWRjX2RyaXZlciA9IHsKKwkuaWRfdGFibGUJPSBzM2NfYWRjX2RyaXZlcl9pZHMsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInMzYy1hZGMiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBzM2NfYWRjX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoczNjX2FkY19yZW1vdmUpLAorCS5zdXNwZW5kCT0gczNjX2FkY19zdXNwZW5kLAorCS5yZXN1bWUJCT0gczNjX2FkY19yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhZGNfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnMzY19hZGNfZHJpdmVyKTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWRkIGFkYyBkcml2ZXJcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiByZXQ7Cit9CisKK2FyY2hfaW5pdGNhbGwoYWRjX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Nsb2NrLWNsa3NyYy5jIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Nsb2NrLWNsa3NyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlOGI4NTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvY2xvY2stY2xrc3JjLmMKQEAgLTAsMCArMSwyMTIgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9jbG9jay1jbGtzcmMuYworICoKKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY2xvY2stY2xrc3JjLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUtZnJlcS5oPgorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjbGtzcmNfY2xrICp0b19jbGtzcmMoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjb250YWluZXJfb2YoY2xrLCBzdHJ1Y3QgY2xrc3JjX2NsaywgY2xrKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgYml0X21hc2sodTMyIHNoaWZ0LCB1MzIgbnJfYml0cykKK3sKKwl1MzIgbWFzayA9IDB4ZmZmZmZmZmYgPj4gKDMyIC0gbnJfYml0cyk7CisKKwlyZXR1cm4gbWFzayA8PCBzaGlmdDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgczNjX2dldHJhdGVfY2xrc3JjKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlzdHJ1Y3QgY2xrc3JjX2NsayAqc2NsayA9IHRvX2Nsa3NyYyhjbGspOworCXVuc2lnbmVkIGxvbmcgcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJdTMyIGNsa2RpdiA9IF9fcmF3X3JlYWRsKHNjbGstPnJlZ19kaXYucmVnKTsKKwl1MzIgbWFzayA9IGJpdF9tYXNrKHNjbGstPnJlZ19kaXYuc2hpZnQsIHNjbGstPnJlZ19kaXYuc2l6ZSk7CisKKwljbGtkaXYgJj0gbWFzazsKKwljbGtkaXYgPj49IHNjbGstPnJlZ19kaXYuc2hpZnQ7CisJY2xrZGl2Kys7CisKKwlyYXRlIC89IGNsa2RpdjsKKwlyZXR1cm4gcmF0ZTsKK30KKworc3RhdGljIGludCBzM2Nfc2V0cmF0ZV9jbGtzcmMoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJc3RydWN0IGNsa3NyY19jbGsgKnNjbGsgPSB0b19jbGtzcmMoY2xrKTsKKwl2b2lkIF9faW9tZW0gKnJlZyA9IHNjbGstPnJlZ19kaXYucmVnOworCXVuc2lnbmVkIGludCBkaXY7CisJdTMyIG1hc2sgPSBiaXRfbWFzayhzY2xrLT5yZWdfZGl2LnNoaWZ0LCBzY2xrLT5yZWdfZGl2LnNpemUpOworCXUzMiB2YWw7CisKKwlyYXRlID0gY2xrX3JvdW5kX3JhdGUoY2xrLCByYXRlKTsKKwlkaXYgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gcmF0ZTsKKwlpZiAoZGl2ID4gKDEgPDwgc2Nsay0+cmVnX2Rpdi5zaXplKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2YWwgPSBfX3Jhd19yZWFkbChyZWcpOworCXZhbCAmPSB+bWFzazsKKwl2YWwgfD0gKGRpdiAtIDEpIDw8IHNjbGstPnJlZ19kaXYuc2hpZnQ7CisJX19yYXdfd3JpdGVsKHZhbCwgcmVnKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzY19zZXRwYXJlbnRfY2xrc3JjKHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCXN0cnVjdCBjbGtzcmNfY2xrICpzY2xrID0gdG9fY2xrc3JjKGNsayk7CisJc3RydWN0IGNsa3NyY19zb3VyY2VzICpzcmNzID0gc2Nsay0+c291cmNlczsKKwl1MzIgY2xrc3JjID0gX19yYXdfcmVhZGwoc2Nsay0+cmVnX3NyYy5yZWcpOworCXUzMiBtYXNrID0gYml0X21hc2soc2Nsay0+cmVnX3NyYy5zaGlmdCwgc2Nsay0+cmVnX3NyYy5zaXplKTsKKwlpbnQgc3JjX25yID0gLTE7CisJaW50IHB0cjsKKworCWZvciAocHRyID0gMDsgcHRyIDwgc3Jjcy0+bnJfc291cmNlczsgcHRyKyspCisJCWlmIChzcmNzLT5zb3VyY2VzW3B0cl0gPT0gcGFyZW50KSB7CisJCQlzcmNfbnIgPSBwdHI7CisJCQlicmVhazsKKwkJfQorCisJaWYgKHNyY19uciA+PSAwKSB7CisJCWNsay0+cGFyZW50ID0gcGFyZW50OworCisJCWNsa3NyYyAmPSB+bWFzazsKKwkJY2xrc3JjIHw9IHNyY19uciA8PCBzY2xrLT5yZWdfc3JjLnNoaWZ0OworCisJCV9fcmF3X3dyaXRlbChjbGtzcmMsIHNjbGstPnJlZ19zcmMucmVnKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHMzY19yb3VuZHJhdGVfY2xrc3JjKHN0cnVjdCBjbGsgKmNsaywKKwkJCQkJICAgICAgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXN0cnVjdCBjbGtzcmNfY2xrICpzY2xrID0gdG9fY2xrc3JjKGNsayk7CisJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSA9IGNsa19nZXRfcmF0ZShjbGstPnBhcmVudCk7CisJaW50IG1heF9kaXYgPSAxIDw8IHNjbGstPnJlZ19kaXYuc2l6ZTsKKwlpbnQgZGl2OworCisJaWYgKHJhdGUgPj0gcGFyZW50X3JhdGUpCisJCXJhdGUgPSBwYXJlbnRfcmF0ZTsKKwllbHNlIHsKKwkJZGl2ID0gcGFyZW50X3JhdGUgLyByYXRlOworCQlpZiAocGFyZW50X3JhdGUgJSByYXRlKQorCQkJZGl2Kys7CisKKwkJaWYgKGRpdiA9PSAwKQorCQkJZGl2ID0gMTsKKwkJaWYgKGRpdiA+IG1heF9kaXYpCisJCQlkaXYgPSBtYXhfZGl2OworCisJCXJhdGUgPSBwYXJlbnRfcmF0ZSAvIGRpdjsKKwl9CisKKwlyZXR1cm4gcmF0ZTsKK30KKworLyogQ2xvY2sgaW5pdGlhbGlzYXRpb24gY29kZSAqLworCit2b2lkIF9faW5pdF9vcl9jcHVmcmVxIHMzY19zZXRfY2xrc3JjKHN0cnVjdCBjbGtzcmNfY2xrICpjbGssIGJvb2wgYW5ub3VuY2UpCit7CisJc3RydWN0IGNsa3NyY19zb3VyY2VzICpzcmNzID0gY2xrLT5zb3VyY2VzOworCXUzMiBtYXNrID0gYml0X21hc2soY2xrLT5yZWdfc3JjLnNoaWZ0LCBjbGstPnJlZ19zcmMuc2l6ZSk7CisJdTMyIGNsa3NyYzsKKworCWlmICghY2xrLT5yZWdfc3JjLnJlZykgeworCQlpZiAoIWNsay0+Y2xrLnBhcmVudCkKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIHBhcmVudCBjbG9jayBzcGVjaWZpZWRcbiIsCisJCQkJY2xrLT5jbGsubmFtZSk7CisJCXJldHVybjsKKwl9CisKKwljbGtzcmMgPSBfX3Jhd19yZWFkbChjbGstPnJlZ19zcmMucmVnKTsKKwljbGtzcmMgJj0gbWFzazsKKwljbGtzcmMgPj49IGNsay0+cmVnX3NyYy5zaGlmdDsKKworCWlmIChjbGtzcmMgPiBzcmNzLT5ucl9zb3VyY2VzIHx8ICFzcmNzLT5zb3VyY2VzW2Nsa3NyY10pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogYmFkIHNvdXJjZSAlZFxuIiwKKwkJICAgICAgIGNsay0+Y2xrLm5hbWUsIGNsa3NyYyk7CisJCXJldHVybjsKKwl9CisKKwljbGstPmNsay5wYXJlbnQgPSBzcmNzLT5zb3VyY2VzW2Nsa3NyY107CisKKwlpZiAoYW5ub3VuY2UpCisJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzb3VyY2UgaXMgJXMgKCVkKSwgcmF0ZSBpcyAlbGRcbiIsCisJCSAgICAgICBjbGstPmNsay5uYW1lLCBjbGstPmNsay5wYXJlbnQtPm5hbWUsIGNsa3NyYywKKwkJICAgICAgIGNsa19nZXRfcmF0ZSgmY2xrLT5jbGspKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIGNsa3NyY19vcHMgPSB7CisJLnNldF9wYXJlbnQJPSBzM2Nfc2V0cGFyZW50X2Nsa3NyYywKKwkuZ2V0X3JhdGUJPSBzM2NfZ2V0cmF0ZV9jbGtzcmMsCisJLnNldF9yYXRlCT0gczNjX3NldHJhdGVfY2xrc3JjLAorCS5yb3VuZF9yYXRlCT0gczNjX3JvdW5kcmF0ZV9jbGtzcmMsCit9OworCitzdGF0aWMgc3RydWN0IGNsa19vcHMgY2xrc3JjX29wc19ub2RpdiA9IHsKKwkuc2V0X3BhcmVudAk9IHMzY19zZXRwYXJlbnRfY2xrc3JjLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIGNsa3NyY19vcHNfbm9zcmMgPSB7CisJLmdldF9yYXRlCT0gczNjX2dldHJhdGVfY2xrc3JjLAorCS5zZXRfcmF0ZQk9IHMzY19zZXRyYXRlX2Nsa3NyYywKKwkucm91bmRfcmF0ZQk9IHMzY19yb3VuZHJhdGVfY2xrc3JjLAorfTsKKwordm9pZCBfX2luaXQgczNjX3JlZ2lzdGVyX2Nsa3NyYyhzdHJ1Y3QgY2xrc3JjX2NsayAqY2xrc3JjLCBpbnQgc2l6ZSkKK3sKKwlpbnQgcmV0OworCisJZm9yICg7IHNpemUgPiAwOyBzaXplLS0sIGNsa3NyYysrKSB7CisJCWlmICghY2xrc3JjLT5yZWdfZGl2LnJlZyAmJiAhY2xrc3JjLT5yZWdfc3JjLnJlZykKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGNsb2NrICVzIGhhcyBubyByZWdpc3RlcnMgc2V0XG4iLAorCQkJICAgICAgIF9fZnVuY19fLCBjbGtzcmMtPmNsay5uYW1lKTsKKworCQkvKiBmaWxsIGluIHRoZSBkZWZhdWx0IGZ1bmN0aW9ucyAqLworCisJCWlmICghY2xrc3JjLT5jbGsub3BzKSB7CisJCQlpZiAoIWNsa3NyYy0+cmVnX2Rpdi5yZWcpCisJCQkJY2xrc3JjLT5jbGsub3BzID0gJmNsa3NyY19vcHNfbm9kaXY7CisJCQllbHNlIGlmICghY2xrc3JjLT5yZWdfc3JjLnJlZykKKwkJCQljbGtzcmMtPmNsay5vcHMgPSAmY2xrc3JjX29wc19ub3NyYzsKKwkJCWVsc2UKKwkJCQljbGtzcmMtPmNsay5vcHMgPSAmY2xrc3JjX29wczsKKwkJfQorCisJCS8qIHNldHVwIHRoZSBjbG9ja3NvdXJjZSwgYnV0IGRvIG5vdCBhbm5vdW5jZSBpdAorCQkgKiBhcyBpdCBtYXkgYmUgcmUtc2V0IGJ5IHRoZSBzZXR1cCByb3V0aW5lcworCQkgKiBjYWxsZWQgYWZ0ZXIgdGhlIHJlc3Qgb2YgdGhlIGNsb2NrcyBoYXZlIGJlZW4KKwkJICogcmVnaXN0ZXJlZAorCQkgKi8KKwkJczNjX3NldF9jbGtzcmMoY2xrc3JjLCBmYWxzZSk7CisKKwkJcmV0ID0gczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmY2xrc3JjLT5jbGspOworCisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgJXMgKCVkKVxuIiwKKwkJCSAgICAgICBfX2Z1bmNfXywgY2xrc3JjLT5jbGsubmFtZSwgcmV0KTsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Nsb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyNWM5ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9jbG9jay5jCkBAIC0wLDAgKzEsNDA5IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYzI0eHgvY2xvY2suYworICoKKyAqIENvcHlyaWdodCAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjRYWCBDb3JlIGNsb2NrIGNvbnRyb2wgc3VwcG9ydAorICoKKyAqIEJhc2VkIG9uLCBhbmQgY29kZSBmcm9tIGxpbnV4L2FyY2gvYXJtL21hY2gtdmVyc2F0aWxlL2Nsb2NrLmMKKyAqKgorICoqICBDb3B5cmlnaHQgKEMpIDIwMDQgQVJNIExpbWl0ZWQuCisgKiogIFdyaXR0ZW4gYnkgRGVlcCBCbHVlIFNvbHV0aW9ucyBMaW1pdGVkLgorICoKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKyNpbmNsdWRlIDxwbGF0L2NwdS1mcmVxLmg+CisKKyNpbmNsdWRlIDxwbGF0L2Nsb2NrLmg+CisjaW5jbHVkZSA8cGxhdC9jcHUuaD4KKworLyogY2xvY2sgaW5mb3JtYXRpb24gKi8KKworc3RhdGljIExJU1RfSEVBRChjbG9ja3MpOworCisvKiBXZSBvcmlnaW5hbGx5IHVzZWQgYW4gbXV0ZXggaGVyZSwgYnV0IHNvbWUgY29udGV4dHMgKHNlZSByZXN1bWUpCisgKiBhcmUgY2FsbGluZyBmdW5jdGlvbnMgc3VjaCBhcyBjbGtfc2V0X3BhcmVudCgpIHdpdGggSVJRcyBkaXNhYmxlZAorICogY2F1c2luZyBhbiBCVUcgdG8gYmUgdHJpZ2dlcmVkLgorICovCitERUZJTkVfU1BJTkxPQ0soY2xvY2tzX2xvY2spOworCisvKiBlbmFibGUgYW5kIGRpc2FibGUgY2FsbHMgZm9yIHVzZSB3aXRoIHRoZSBjbGsgc3RydWN0ICovCisKK3N0YXRpYyBpbnQgY2xrX251bGxfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaywgaW50IGVuYWJsZSkKK3sKKwlyZXR1cm4gMDsKK30KKworLyogQ2xvY2sgQVBJIGNhbGxzICovCisKK3N0cnVjdCBjbGsgKmNsa19nZXQoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBjaGFyICppZCkKK3sKKwlzdHJ1Y3QgY2xrICpwOworCXN0cnVjdCBjbGsgKmNsayA9IEVSUl9QVFIoLUVOT0VOVCk7CisJaW50IGlkbm87CisKKwlpZiAoZGV2ID09IE5VTEwgfHwgZGV2LT5idXMgIT0gJnBsYXRmb3JtX2J1c190eXBlKQorCQlpZG5vID0gLTE7CisJZWxzZQorCQlpZG5vID0gdG9fcGxhdGZvcm1fZGV2aWNlKGRldiktPmlkOworCisJc3Bpbl9sb2NrKCZjbG9ja3NfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIGxpc3QpIHsKKwkJaWYgKHAtPmlkID09IGlkbm8gJiYKKwkJICAgIHN0cmNtcChpZCwgcC0+bmFtZSkgPT0gMCAmJgorCQkgICAgdHJ5X21vZHVsZV9nZXQocC0+b3duZXIpKSB7CisJCQljbGsgPSBwOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKiBjaGVjayBmb3IgdGhlIGNhc2Ugd2hlcmUgYSBkZXZpY2Ugd2FzIHN1cHBsaWVkLCBidXQgdGhlCisJICogY2xvY2sgdGhhdCB3YXMgYmVpbmcgc2VhcmNoZWQgZm9yIGlzIG5vdCBkZXZpY2Ugc3BlY2lmaWMgKi8KKworCWlmIChJU19FUlIoY2xrKSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja3MsIGxpc3QpIHsKKwkJCWlmIChwLT5pZCA9PSAtMSAmJiBzdHJjbXAoaWQsIHAtPm5hbWUpID09IDAgJiYKKwkJCSAgICB0cnlfbW9kdWxlX2dldChwLT5vd25lcikpIHsKKwkJCQljbGsgPSBwOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJc3Bpbl91bmxvY2soJmNsb2Nrc19sb2NrKTsKKwlyZXR1cm4gY2xrOworfQorCit2b2lkIGNsa19wdXQoc3RydWN0IGNsayAqY2xrKQoreworCW1vZHVsZV9wdXQoY2xrLT5vd25lcik7Cit9CisKK2ludCBjbGtfZW5hYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoSVNfRVJSKGNsaykgfHwgY2xrID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJY2xrX2VuYWJsZShjbGstPnBhcmVudCk7CisKKwlzcGluX2xvY2soJmNsb2Nrc19sb2NrKTsKKworCWlmICgoY2xrLT51c2FnZSsrKSA9PSAwKQorCQkoY2xrLT5lbmFibGUpKGNsaywgMSk7CisKKwlzcGluX3VubG9jaygmY2xvY2tzX2xvY2spOworCXJldHVybiAwOworfQorCit2b2lkIGNsa19kaXNhYmxlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoSVNfRVJSKGNsaykgfHwgY2xrID09IE5VTEwpCisJCXJldHVybjsKKworCXNwaW5fbG9jaygmY2xvY2tzX2xvY2spOworCisJaWYgKCgtLWNsay0+dXNhZ2UpID09IDApCisJCShjbGstPmVuYWJsZSkoY2xrLCAwKTsKKworCXNwaW5fdW5sb2NrKCZjbG9ja3NfbG9jayk7CisJY2xrX2Rpc2FibGUoY2xrLT5wYXJlbnQpOworfQorCisKK3Vuc2lnbmVkIGxvbmcgY2xrX2dldF9yYXRlKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoSVNfRVJSKGNsaykpCisJCXJldHVybiAwOworCisJaWYgKGNsay0+cmF0ZSAhPSAwKQorCQlyZXR1cm4gY2xrLT5yYXRlOworCisJaWYgKGNsay0+b3BzICE9IE5VTEwgJiYgY2xrLT5vcHMtPmdldF9yYXRlICE9IE5VTEwpCisJCXJldHVybiAoY2xrLT5vcHMtPmdldF9yYXRlKShjbGspOworCisJaWYgKGNsay0+cGFyZW50ICE9IE5VTEwpCisJCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpOworCisJcmV0dXJuIGNsay0+cmF0ZTsKK30KKworbG9uZyBjbGtfcm91bmRfcmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwlpZiAoIUlTX0VSUihjbGspICYmIGNsay0+b3BzICYmIGNsay0+b3BzLT5yb3VuZF9yYXRlKQorCQlyZXR1cm4gKGNsay0+b3BzLT5yb3VuZF9yYXRlKShjbGssIHJhdGUpOworCisJcmV0dXJuIHJhdGU7Cit9CisKK2ludCBjbGtfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJaW50IHJldDsKKworCWlmIChJU19FUlIoY2xrKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBXZSBkbyBub3QgZGVmYXVsdCBqdXN0IGRvIGEgY2xrLT5yYXRlID0gcmF0ZSBhcworCSAqIHRoZSBjbG9jayBtYXkgaGF2ZSBiZWVuIG1hZGUgdGhpcyB3YXkgYnkgY2hvaWNlLgorCSAqLworCisJV0FSTl9PTihjbGstPm9wcyA9PSBOVUxMKTsKKwlXQVJOX09OKGNsay0+b3BzICYmIGNsay0+b3BzLT5zZXRfcmF0ZSA9PSBOVUxMKTsKKworCWlmIChjbGstPm9wcyA9PSBOVUxMIHx8IGNsay0+b3BzLT5zZXRfcmF0ZSA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwaW5fbG9jaygmY2xvY2tzX2xvY2spOworCXJldCA9IChjbGstPm9wcy0+c2V0X3JhdGUpKGNsaywgcmF0ZSk7CisJc3Bpbl91bmxvY2soJmNsb2Nrc19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0cnVjdCBjbGsgKmNsa19nZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaykKK3sKKwlyZXR1cm4gY2xrLT5wYXJlbnQ7Cit9CisKK2ludCBjbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGssIHN0cnVjdCBjbGsgKnBhcmVudCkKK3sKKwlpbnQgcmV0ID0gMDsKKworCWlmIChJU19FUlIoY2xrKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzcGluX2xvY2soJmNsb2Nrc19sb2NrKTsKKworCWlmIChjbGstPm9wcyAmJiBjbGstPm9wcy0+c2V0X3BhcmVudCkKKwkJcmV0ID0gKGNsay0+b3BzLT5zZXRfcGFyZW50KShjbGssIHBhcmVudCk7CisKKwlzcGluX3VubG9jaygmY2xvY2tzX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworRVhQT1JUX1NZTUJPTChjbGtfZ2V0KTsKK0VYUE9SVF9TWU1CT0woY2xrX3B1dCk7CitFWFBPUlRfU1lNQk9MKGNsa19lbmFibGUpOworRVhQT1JUX1NZTUJPTChjbGtfZGlzYWJsZSk7CitFWFBPUlRfU1lNQk9MKGNsa19nZXRfcmF0ZSk7CitFWFBPUlRfU1lNQk9MKGNsa19yb3VuZF9yYXRlKTsKK0VYUE9SVF9TWU1CT0woY2xrX3NldF9yYXRlKTsKK0VYUE9SVF9TWU1CT0woY2xrX2dldF9wYXJlbnQpOworRVhQT1JUX1NZTUJPTChjbGtfc2V0X3BhcmVudCk7CisKKy8qIGJhc2UgY2xvY2tzICovCisKK2ludCBjbGtfZGVmYXVsdF9zZXRyYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCWNsay0+cmF0ZSA9IHJhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBjbGtfb3BzIGNsa19vcHNfZGVmX3NldHJhdGUgPSB7CisJLnNldF9yYXRlCT0gY2xrX2RlZmF1bHRfc2V0cmF0ZSwKK307CisKK3N0cnVjdCBjbGsgY2xrX3h0YWwgPSB7CisJLm5hbWUJCT0gInh0YWwiLAorCS5pZAkJPSAtMSwKKwkucmF0ZQkJPSAwLAorCS5wYXJlbnQJCT0gTlVMTCwKKwkuY3RybGJpdAk9IDAsCit9OworCitzdHJ1Y3QgY2xrIGNsa19leHQgPSB7CisJLm5hbWUJCT0gImV4dCIsCisJLmlkCQk9IC0xLAorfTsKKworc3RydWN0IGNsayBjbGtfZXBsbCA9IHsKKwkubmFtZQkJPSAiZXBsbCIsCisJLmlkCQk9IC0xLAorfTsKKworc3RydWN0IGNsayBjbGtfbXBsbCA9IHsKKwkubmFtZQkJPSAibXBsbCIsCisJLmlkCQk9IC0xLAorCS5vcHMJCT0gJmNsa19vcHNfZGVmX3NldHJhdGUsCit9OworCitzdHJ1Y3QgY2xrIGNsa191cGxsID0geworCS5uYW1lCQk9ICJ1cGxsIiwKKwkuaWQJCT0gLTEsCisJLnBhcmVudAkJPSBOVUxMLAorCS5jdHJsYml0CT0gMCwKK307CisKK3N0cnVjdCBjbGsgY2xrX2YgPSB7CisJLm5hbWUJCT0gImZjbGsiLAorCS5pZAkJPSAtMSwKKwkucmF0ZQkJPSAwLAorCS5wYXJlbnQJCT0gJmNsa19tcGxsLAorCS5jdHJsYml0CT0gMCwKK307CisKK3N0cnVjdCBjbGsgY2xrX2ggPSB7CisJLm5hbWUJCT0gImhjbGsiLAorCS5pZAkJPSAtMSwKKwkucmF0ZQkJPSAwLAorCS5wYXJlbnQJCT0gTlVMTCwKKwkuY3RybGJpdAk9IDAsCisJLm9wcwkJPSAmY2xrX29wc19kZWZfc2V0cmF0ZSwKK307CisKK3N0cnVjdCBjbGsgY2xrX3AgPSB7CisJLm5hbWUJCT0gInBjbGsiLAorCS5pZAkJPSAtMSwKKwkucmF0ZQkJPSAwLAorCS5wYXJlbnQJCT0gTlVMTCwKKwkuY3RybGJpdAk9IDAsCisJLm9wcwkJPSAmY2xrX29wc19kZWZfc2V0cmF0ZSwKK307CisKK3N0cnVjdCBjbGsgY2xrX3VzYl9idXMgPSB7CisJLm5hbWUJCT0gInVzYi1idXMiLAorCS5pZAkJPSAtMSwKKwkucmF0ZQkJPSAwLAorCS5wYXJlbnQJCT0gJmNsa191cGxsLAorfTsKKworCitzdHJ1Y3QgY2xrIHMzYzI0eHhfdWNsayA9IHsKKwkubmFtZQkJPSAidWNsayIsCisJLmlkCQk9IC0xLAorfTsKKworLyogaW5pdGlhbGlzZSB0aGUgY2xvY2sgc3lzdGVtICovCisKKy8qKgorICogczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygpIC0gcmVnaXN0ZXIgYSBjbG9jaworICogQGNsazogVGhlIGNsb2NrIHRvIHJlZ2lzdGVyCisgKgorICogQWRkIHRoZSBzcGVjaWZpZWQgY2xvY2sgdG8gdGhlIGxpc3Qgb2YgY2xvY2tzIGtub3duIGJ5IHRoZSBzeXN0ZW0uCisgKi8KK2ludCBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoY2xrLT5lbmFibGUgPT0gTlVMTCkKKwkJY2xrLT5lbmFibGUgPSBjbGtfbnVsbF9lbmFibGU7CisKKwkvKiBhZGQgdG8gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGNsb2NrcyAqLworCisJLyogUXVpY2sgY2hlY2sgdG8gc2VlIGlmIHRoaXMgY2xvY2sgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkLiAqLworCUJVR19PTihjbGstPmxpc3QucHJldiAhPSBjbGstPmxpc3QubmV4dCk7CisKKwlzcGluX2xvY2soJmNsb2Nrc19sb2NrKTsKKwlsaXN0X2FkZCgmY2xrLT5saXN0LCAmY2xvY2tzKTsKKwlzcGluX3VubG9jaygmY2xvY2tzX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogczNjMjR4eF9yZWdpc3Rlcl9jbG9ja3MoKSAtIHJlZ2lzdGVyIGFuIGFycmF5IG9mIGNsb2NrIHBvaW50ZXJzCisgKiBAY2xrczogUG9pbnRlciB0byBhbiBhcnJheSBvZiBzdHJ1Y3QgY2xrIHBvaW50ZXJzCisgKiBAbnJfY2xrczogVGhlIG51bWJlciBvZiBjbG9ja3MgaW4gdGhlIEBjbGtzIGFycmF5LgorICoKKyAqIENhbGwgczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygpIGZvciBhbGwgdGhlIGNsb2NrIHBvaW50ZXJzIGNvbnRhaW5lZAorICogaW4gdGhlIEBjbGtzIGxpc3QuIFJldHVybnMgdGhlIG51bWJlciBvZiBmYWlsdXJlcy4KKyAqLworaW50IHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2tzKHN0cnVjdCBjbGsgKipjbGtzLCBpbnQgbnJfY2xrcykKK3sKKwlpbnQgZmFpbHMgPSAwOworCisJZm9yICg7IG5yX2Nsa3MgPiAwOyBucl9jbGtzLS0sIGNsa3MrKykgeworCQlpZiAoczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygqY2xrcykgPCAwKSB7CisJCQlzdHJ1Y3QgY2xrICpjbGsgPSAqY2xrczsKKwkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byByZWdpc3RlciAlcDogJXNcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGNsaywgY2xrLT5uYW1lKTsKKwkJCWZhaWxzKys7CisJCX0KKwl9CisKKwlyZXR1cm4gZmFpbHM7Cit9CisKKy8qKgorICogczNjX3JlZ2lzdGVyX2Nsb2NrcygpIC0gcmVnaXN0ZXIgYW4gYXJyYXkgb2YgY2xvY2tzCisgKiBAY2xrcDogUG9pbnRlciB0byB0aGUgZmlyc3QgY2xvY2sgaW4gdGhlIGFycmF5LgorICogQG5yX2Nsa3M6IE51bWJlciBvZiBjbG9ja3MgdG8gcmVnaXN0ZXIuCisgKgorICogQ2FsbCBzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCkgb24gdGhlIEBjbGtwIGFycmF5IGdpdmVuLCBwcmludGluZyBhbgorICogZXJyb3IgaWYgaXQgZmFpbHMgdG8gcmVnaXN0ZXIgdGhlIGNsb2NrICh1bmxpa2VseSkuCisgKi8KK3ZvaWQgX19pbml0IHMzY19yZWdpc3Rlcl9jbG9ja3Moc3RydWN0IGNsayAqY2xrcCwgaW50IG5yX2Nsa3MpCit7CisJaW50IHJldDsKKworCWZvciAoOyBucl9jbGtzID4gMDsgbnJfY2xrcy0tLCBjbGtwKyspIHsKKwkJcmV0ID0gczNjMjR4eF9yZWdpc3Rlcl9jbG9jayhjbGtwKTsKKworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2sgJXMgKCVkKVxuIiwKKwkJCSAgICAgICBjbGtwLT5uYW1lLCByZXQpOworCQl9CisJfQorfQorCisvKiBpbml0YWxpc2UgYWxsIHRoZSBjbG9ja3MgKi8KKworaW50IF9faW5pdCBzM2MyNHh4X3JlZ2lzdGVyX2Jhc2VjbG9ja3ModW5zaWduZWQgbG9uZyB4dGFsKQoreworCXByaW50ayhLRVJOX0lORk8gIlMzQzI0WFggQ2xvY2tzLCBDb3B5cmlnaHQgMjAwNCBTaW10ZWMgRWxlY3Ryb25pY3NcbiIpOworCisJY2xrX3h0YWwucmF0ZSA9IHh0YWw7CisKKwkvKiByZWdpc3RlciBvdXIgY2xvY2tzICovCisKKwlpZiAoczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmY2xrX3h0YWwpIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgbWFzdGVyIHh0YWxcbiIpOworCisJaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa19tcGxsKSA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIG1wbGwgY2xvY2tcbiIpOworCisJaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa191cGxsKSA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIHVwbGwgY2xvY2tcbiIpOworCisJaWYgKHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmNsa19mKSA8IDApCisJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlZ2lzdGVyIGNwdSBmY2xrXG4iKTsKKworCWlmIChzM2MyNHh4X3JlZ2lzdGVyX2Nsb2NrKCZjbGtfaCkgPCAwKQorCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZWdpc3RlciBjcHUgaGNsa1xuIik7CisKKwlpZiAoczNjMjR4eF9yZWdpc3Rlcl9jbG9jaygmY2xrX3ApIDwgMCkKKwkJcHJpbnRrKEtFUk5fRVJSICJmYWlsZWQgdG8gcmVnaXN0ZXIgY3B1IHBjbGtcbiIpOworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2Rldi1mYi5jIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi1mYi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9wbGF0LXMzYy9kZXYtZmIuYwpyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi1mYi5jCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9kZXYtaHNtbWMuYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtaHNtbWMuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MvZGV2LWhzbW1jLmMKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtaHNtbWMuYwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvZGV2LWhzbW1jMS5jIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi1oc21tYzEuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MvZGV2LWhzbW1jMS5jCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LWhzbW1jMS5jCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9kZXYtaHNtbWMyLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LWhzbW1jMi5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9wbGF0LXMzYy9kZXYtaHNtbWMyLmMKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtaHNtbWMyLmMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2Rldi1pMmMwLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LWkyYzAuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MvZGV2LWkyYzAuYwpyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi1pMmMwLmMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2Rldi1pMmMxLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LWkyYzEuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MvZGV2LWkyYzEuYwpyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi1pMmMxLmMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2Rldi1uYW5kLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LW5hbmQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MvZGV2LW5hbmQuYwpyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi1uYW5kLmMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtdWFydC5jIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2Rldi11YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc3NmNkOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtdWFydC5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtdWFydC5jCisgKglvcmlnaW5hbGx5IGZyb20gYXJjaC9hcm0vcGxhdC1zM2MyNHh4L2RldnMuYworICp4CisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogQmFzZSBTM0MyNFhYIHBsYXRmb3JtIGRldmljZSBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCisvKiB1YXJ0IGRldmljZXMgKi8KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjMjR4eF91YXJ0X2RldmljZTAgPSB7CisJLmlkCQk9IDAsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2MyNHh4X3VhcnRfZGV2aWNlMSA9IHsKKwkuaWQJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzI0eHhfdWFydF9kZXZpY2UyID0geworCS5pZAkJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjMjR4eF91YXJ0X2RldmljZTMgPSB7CisJLmlkCQk9IDMsCit9OworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzM2MyNHh4X3VhcnRfc3JjWzRdID0geworCSZzM2MyNHh4X3VhcnRfZGV2aWNlMCwKKwkmczNjMjR4eF91YXJ0X2RldmljZTEsCisJJnMzYzI0eHhfdWFydF9kZXZpY2UyLAorCSZzM2MyNHh4X3VhcnRfZGV2aWNlMywKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnMzYzI0eHhfdWFydF9kZXZzWzRdID0geworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtdXNiLWhzb3RnLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LXVzYi1oc290Zy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzYTg0NGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LXVzYi1oc290Zy5jCkBAIC0wLDAgKzEsNDggQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjL2Rldi11c2ItaHNvdGcuYworICoKKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0Mgc2VyaWVzIGRldmljZSBkZWZpbml0aW9uIGZvciBVU0IgaGlnaC1zcGVlZCBVREMvT3RHIGJsb2NrCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisjaW5jbHVkZSA8bWFjaC9pcnFzLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPHBsYXQvZGV2cy5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY191c2JfaHNvdGdfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBTM0NfUEFfVVNCX0hTT1RHLAorCQkuZW5kCT0gUzNDX1BBX1VTQl9IU09URyArIDB4MTAwMDAgLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX09URywKKwkJLmVuZAk9IElSUV9PVEcsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgdTY0IHMzY19oc290Z19kbWFtYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3VzYl9oc290ZyA9IHsKKwkubmFtZQkJPSAiczNjLWhzb3RnIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHMzY191c2JfaHNvdGdfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzM2NfdXNiX2hzb3RnX3Jlc291cmNlcywKKwkuZGV2CQk9IHsKKwkJLmRtYV9tYXNrCQk9ICZzM2NfaHNvdGdfZG1hbWFzaywKKwkJLmNvaGVyZW50X2RtYV9tYXNrCT0gRE1BX0JJVF9NQVNLKDMyKSwKKwl9LAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kZXYtdXNiLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LXVzYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4MTY1NjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZGV2LXVzYi5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjL2Rldi11c2IuYworICoKKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0Mgc2VyaWVzIGRldmljZSBkZWZpbml0aW9uIGZvciBVU0IgaG9zdAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorCisjaW5jbHVkZSA8cGxhdC9kZXZzLmg+CisjaW5jbHVkZSA8cGxhdC91c2ItY29udHJvbC5oPgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHMzY191c2JfcmVzb3VyY2VbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydCA9IFMzQ19QQV9VU0JIT1NULAorCQkuZW5kICAgPSBTM0NfUEFfVVNCSE9TVCArIDB4MTAwIC0gMSwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydCA9IElSUV9VU0JILAorCQkuZW5kICAgPSBJUlFfVVNCSCwKKwkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RhdGljIHU2NCBzM2NfZGV2aWNlX3VzYl9kbWFtYXNrID0gMHhmZmZmZmZmZlVMOworCitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2Vfb2hjaSA9IHsKKwkubmFtZQkJICA9ICJzM2MyNDEwLW9oY2kiLAorCS5pZAkJICA9IC0xLAorCS5udW1fcmVzb3VyY2VzCSAgPSBBUlJBWV9TSVpFKHMzY191c2JfcmVzb3VyY2UpLAorCS5yZXNvdXJjZQkgID0gczNjX3VzYl9yZXNvdXJjZSwKKwkuZGV2ICAgICAgICAgICAgICA9IHsKKwkJLmRtYV9tYXNrID0gJnMzY19kZXZpY2VfdXNiX2RtYW1hc2ssCisJCS5jb2hlcmVudF9kbWFfbWFzayA9IDB4ZmZmZmZmZmZVTAorCX0KK307CisKK0VYUE9SVF9TWU1CT0woczNjX2RldmljZV9vaGNpKTsKKworLyoqCisgKiBzM2Nfb2hjaV9zZXRfcGxhdGRhdGEgLSBpbml0aWFsaXNlIE9IQ0kgZGV2aWNlIHBsYXRmb3JtIGRhdGEKKyAqIEBpbmZvOiBUaGUgcGxhdGZvcm0gZGF0YS4KKyAqCisgKiBUaGlzIGNhbGwgY29waWVzIHRoZSBAaW5mbyBwYXNzZWQgaW4gYW5kIHNldHMgdGhlIGRldmljZSAucGxhdGZvcm1fZGF0YQorICogZmllbGQgdG8gdGhhdCBjb3B5LiBUaGUgQGluZm8gaXMgY29waWVkIHNvIHRoYXQgdGhlIG9yaWdpbmFsIGNhbiBiZSBtYXJrZWQKKyAqIF9faW5pdGRhdGEuCisgKi8KK3ZvaWQgX19pbml0IHMzY19vaGNpX3NldF9wbGF0ZGF0YShzdHJ1Y3QgczNjMjQxMF9oY2RfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgczNjMjQxMF9oY2RfaW5mbyAqbnBkOworCisJbnBkID0ga21lbWR1cChpbmZvLCBzaXplb2Yoc3RydWN0IHMzYzI0MTBfaGNkX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5wZCkKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gbWVtb3J5IGZvciBwbGF0Zm9ybSBkYXRhXG4iLCBfX2Z1bmNfXyk7CisKKwlzM2NfZGV2aWNlX29oY2kuZGV2LnBsYXRmb3JtX2RhdGEgPSBucGQ7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZG1hLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2I0NTlkZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9kbWEuYwpAQCAtMCwwICsxLDg0IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZG1hLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwOSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDIERNQSBjb3JlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKK3N0cnVjdCBzM2MyNDEwX2RtYV9idWY7CisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCisjaW5jbHVkZSA8bWFjaC9kbWEuaD4KKyNpbmNsdWRlIDxtYWNoL2lycXMuaD4KKworLyogZG1hIGNoYW5uZWwgc3RhdGUgaW5mb3JtYXRpb24gKi8KK3N0cnVjdCBzM2MyNDEwX2RtYV9jaGFuIHMzYzI0MTBfY2hhbnNbUzNDX0RNQV9DSEFOTkVMU107CitzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqczNjX2RtYV9jaGFuX21hcFtETUFDSF9NQVhdOworCisvKiBzM2NfZG1hX2xvb2t1cF9jaGFubmVsCisgKgorICogY2hhbmdlIHRoZSBkbWEgY2hhbm5lbCBudW1iZXIgZ2l2ZW4gaW50byBhIHJlYWwgZG1hIGNoYW5uZWwgaWQKKyovCisKK3N0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpzM2NfZG1hX2xvb2t1cF9jaGFubmVsKHVuc2lnbmVkIGludCBjaGFubmVsKQoreworCWlmIChjaGFubmVsICYgRE1BQ0hfTE9XX0xFVkVMKQorCQlyZXR1cm4gJnMzYzI0MTBfY2hhbnNbY2hhbm5lbCAmIH5ETUFDSF9MT1dfTEVWRUxdOworCWVsc2UKKwkJcmV0dXJuIHMzY19kbWFfY2hhbl9tYXBbY2hhbm5lbF07Cit9CisKKy8qIGRvIHdlIG5lZWQgdG8gcHJvdGVjdCB0aGUgc2V0dGluZ3Mgb2YgdGhlIGZpZWxkcyBmcm9tCisgKiBpcnE/CisqLworCitpbnQgczNjMjQxMF9kbWFfc2V0X29wZm4odW5zaWduZWQgaW50IGNoYW5uZWwsIHMzYzI0MTBfZG1hX29wZm5fdCBydG4pCit7CisJc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSBzM2NfZG1hX2xvb2t1cF9jaGFubmVsKGNoYW5uZWwpOworCisJaWYgKGNoYW4gPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9kZWJ1ZygiJXM6IGNoYW49JXAsIG9wIHJ0bj0lcFxuIiwgX19mdW5jX18sIGNoYW4sIHJ0bik7CisKKwljaGFuLT5vcF9mbiA9IHJ0bjsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9zZXRfb3Bmbik7CisKK2ludCBzM2MyNDEwX2RtYV9zZXRfYnVmZmRvbmVfZm4odW5zaWduZWQgaW50IGNoYW5uZWwsIHMzYzI0MTBfZG1hX2NiZm5fdCBydG4pCit7CisJc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSBzM2NfZG1hX2xvb2t1cF9jaGFubmVsKGNoYW5uZWwpOworCisJaWYgKGNoYW4gPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlwcl9kZWJ1ZygiJXM6IGNoYW49JXAsIGNhbGxiYWNrIHJ0bj0lcFxuIiwgX19mdW5jX18sIGNoYW4sIHJ0bik7CisKKwljaGFuLT5jYWxsYmFja19mbiA9IHJ0bjsKKworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChzM2MyNDEwX2RtYV9zZXRfYnVmZmRvbmVfZm4pOworCitpbnQgczNjMjQxMF9kbWFfc2V0ZmxhZ3ModW5zaWduZWQgaW50IGNoYW5uZWwsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IHMzY19kbWFfbG9va3VwX2NoYW5uZWwoY2hhbm5lbCk7CisKKwlpZiAoY2hhbiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNoYW4tPmZsYWdzID0gZmxhZ3M7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHMzYzI0MTBfZG1hX3NldGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9ncGlvLWNvbmZpZy5jIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2dwaW8tY29uZmlnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRhODRlOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9ncGlvLWNvbmZpZy5jCkBAIC0wLDAgKzEsMTY2IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXMzYy9ncGlvLWNvbmZpZy5jCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0Mgc2VyaWVzIEdQSU8gY29uZmlndXJhdGlvbiBjb3JlCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvZ3Bpby1jb3JlLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy5oPgorI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmctaGVscGVycy5oPgorCitpbnQgczNjX2dwaW9fY2ZncGluKHVuc2lnbmVkIGludCBwaW4sIHVuc2lnbmVkIGludCBjb25maWcpCit7CisJc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAgPSBzM2NfZ3Bpb2xpYl9nZXRjaGlwKHBpbik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgb2Zmc2V0OworCWludCByZXQ7CisKKwlpZiAoIWNoaXApCisJCXJldHVybiAtRUlOVkFMOworCisJb2Zmc2V0ID0gcGluIC0gY2hpcC0+Y2hpcC5iYXNlOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJldCA9IHMzY19ncGlvX2RvX3NldGNmZyhjaGlwLCBvZmZzZXQsIGNvbmZpZyk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0woczNjX2dwaW9fY2ZncGluKTsKKworaW50IHMzY19ncGlvX3NldHB1bGwodW5zaWduZWQgaW50IHBpbiwgczNjX2dwaW9fcHVsbF90IHB1bGwpCit7CisJc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAgPSBzM2NfZ3Bpb2xpYl9nZXRjaGlwKHBpbik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgb2Zmc2V0LCByZXQ7CisKKwlpZiAoIWNoaXApCisJCXJldHVybiAtRUlOVkFMOworCisJb2Zmc2V0ID0gcGluIC0gY2hpcC0+Y2hpcC5iYXNlOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJldCA9IHMzY19ncGlvX2RvX3NldHB1bGwoY2hpcCwgb2Zmc2V0LCBwdWxsKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChzM2NfZ3Bpb19zZXRwdWxsKTsKKworI2lmZGVmIENPTkZJR19TM0NfR1BJT19DRkdfUzNDMjRYWAoraW50IHMzY19ncGlvX3NldGNmZ19zM2MyNHh4X2JhbmthKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgdW5zaWduZWQgaW50IG9mZiwgdW5zaWduZWQgaW50IGNmZykKK3sKKwl2b2lkIF9faW9tZW0gKnJlZyA9IGNoaXAtPmJhc2U7CisJdW5zaWduZWQgaW50IHNoaWZ0ID0gb2ZmOworCXUzMiBjb247CisKKwlpZiAoczNjX2dwaW9faXNfY2ZnX3NwZWNpYWwoY2ZnKSkgeworCQljZmcgJj0gMHhmOworCisJCS8qIE1hcCBvdXRwdXQgdG8gMCwgYW5kIFNGTjIgdG8gMSAqLworCQljZmcgLT0gMTsKKwkJaWYgKGNmZyA+IDEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQljZmcgPDw9IHNoaWZ0OworCX0KKworCWNvbiA9IF9fcmF3X3JlYWRsKHJlZyk7CisJY29uICY9IH4oMHgxIDw8IHNoaWZ0KTsKKwljb24gfD0gY2ZnOworCV9fcmF3X3dyaXRlbChjb24sIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHMzY19ncGlvX3NldGNmZ19zM2MyNHh4KHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAorCQkJICAgIHVuc2lnbmVkIGludCBvZmYsIHVuc2lnbmVkIGludCBjZmcpCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBjaGlwLT5iYXNlOworCXVuc2lnbmVkIGludCBzaGlmdCA9IG9mZiAqIDI7CisJdTMyIGNvbjsKKworCWlmIChzM2NfZ3Bpb19pc19jZmdfc3BlY2lhbChjZmcpKSB7CisJCWNmZyAmPSAweGY7CisJCWlmIChjZmcgPiAzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJY2ZnIDw8PSBzaGlmdDsKKwl9CisKKwljb24gPSBfX3Jhd19yZWFkbChyZWcpOworCWNvbiAmPSB+KDB4MyA8PCBzaGlmdCk7CisJY29uIHw9IGNmZzsKKwlfX3Jhd193cml0ZWwoY29uLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TM0NfR1BJT19DRkdfUzNDNjRYWAoraW50IHMzY19ncGlvX3NldGNmZ19zM2M2NHh4XzRiaXQoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCisJCQkJIHVuc2lnbmVkIGludCBvZmYsIHVuc2lnbmVkIGludCBjZmcpCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBjaGlwLT5iYXNlOworCXVuc2lnbmVkIGludCBzaGlmdCA9IChvZmYgJiA3KSAqIDQ7CisJdTMyIGNvbjsKKworCWlmIChvZmYgPCA4ICYmIGNoaXAtPmNoaXAubmdwaW8gPiA4KQorCQlyZWcgLT0gNDsKKworCWlmIChzM2NfZ3Bpb19pc19jZmdfc3BlY2lhbChjZmcpKSB7CisJCWNmZyAmPSAweGY7CisJCWNmZyA8PD0gc2hpZnQ7CisJfQorCisJY29uID0gX19yYXdfcmVhZGwocmVnKTsKKwljb24gJj0gfigweGYgPDwgc2hpZnQpOworCWNvbiB8PSBjZmc7CisJX19yYXdfd3JpdGVsKGNvbiwgcmVnKTsKKworCXJldHVybiAwOworfQorI2VuZGlmIC8qIENPTkZJR19TM0NfR1BJT19DRkdfUzNDNjRYWCAqLworCisjaWZkZWYgQ09ORklHX1MzQ19HUElPX1BVTExfVVBET1dOCitpbnQgczNjX2dwaW9fc2V0cHVsbF91cGRvd24oc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCisJCQkgICAgdW5zaWduZWQgaW50IG9mZiwgczNjX2dwaW9fcHVsbF90IHB1bGwpCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBjaGlwLT5iYXNlICsgMHgwODsKKwlpbnQgc2hpZnQgPSBvZmYgKiAyOworCXUzMiBwdXA7CisKKwlwdXAgPSBfX3Jhd19yZWFkbChyZWcpOworCXB1cCAmPSB+KDMgPDwgc2hpZnQpOworCXB1cCB8PSBwdWxsIDw8IHNoaWZ0OworCV9fcmF3X3dyaXRlbChwdXAsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworczNjX2dwaW9fcHVsbF90IHMzY19ncGlvX2dldHB1bGxfdXBkb3duKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBpbnQgb2ZmKQoreworCXZvaWQgX19pb21lbSAqcmVnID0gY2hpcC0+YmFzZSArIDB4MDg7CisJaW50IHNoaWZ0ID0gb2ZmICogMjsKKwl1MzIgcHVwID0gX19yYXdfcmVhZGwocmVnKTsKKworCXB1cCA+Pj0gc2hpZnQ7CisJcHVwICY9IDB4MzsKKwlyZXR1cm4gKF9fZm9yY2UgczNjX2dwaW9fcHVsbF90KXB1cDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9ncGlvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhkMmFiOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9ncGlvLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjL2dwaW8uYworICoKKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0Mgc2VyaWVzIEdQSU8gY29yZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCisjaW5jbHVkZSA8cGxhdC9ncGlvLWNvcmUuaD4KKworI2lmZGVmIENPTkZJR19TM0NfR1BJT19UUkFDSworc3RydWN0IHMzY19ncGlvX2NoaXAgKnMzY19ncGlvc1tTM0NfR1BJT19FTkRdOworCitzdGF0aWMgX19pbml0IHZvaWQgczNjX2dwaW9saWJfdHJhY2soc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXApCit7CisJdW5zaWduZWQgaW50IGdwbjsKKwlpbnQgaTsKKworCWdwbiA9IGNoaXAtPmNoaXAuYmFzZTsKKwlmb3IgKGkgPSAwOyBpIDwgY2hpcC0+Y2hpcC5uZ3BpbzsgaSsrLCBncG4rKykgeworCQlCVUdfT04oZ3BuID49IEFSUkFZX1NJWkUoczNjX2dwaW9zKSk7CisJCXMzY19ncGlvc1tncG5dID0gY2hpcDsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX1MzQ19HUElPX1RSQUNLICovCisKKy8qIERlZmF1bHQgcm91dGluZXMgZm9yIGNvbnRyb2xsaW5nIEdQSU8sIGJhc2VkIG9uIHRoZSBvcmlnaW5hbCBTM0MyNFhYCisgKiBHUElPIGZ1bmN0aW9ucyB3aGljaCBkZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgZWFjaCBncGlvIGJhbmsgb2YgdGhlCisgKiBjaGlwIGlzIGFzIGZvbGxvd2luZzoKKyAqCisgKiBiYXNlICsgMHgwMDogQ29udHJvbCByZWdpc3RlciwgMiBiaXRzIHBlciBncGlvCisgKgkgICAgICAgIGdwaW8gbjogMiBiaXRzIHN0YXJ0aW5nIGF0ICgyKm4pCisgKgkJMDAgPSBpbnB1dCwgMDEgPSBvdXRwdXQsIG90aGVycyBtZWFuIHNwZWNpYWwtZnVuY3Rpb24KKyAqIGJhc2UgKyAweDA0OiBEYXRhIHJlZ2lzdGVyLCAxIGJpdCBwZXIgZ3BpbworICoJCWJpdCBuOiBkYXRhIGJpdCBuCisqLworCitzdGF0aWMgaW50IHMzY19ncGlvbGliX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqb3VyY2hpcCA9IHRvX3MzY19ncGlvKGNoaXApOworCXZvaWQgX19pb21lbSAqYmFzZSA9IG91cmNoaXAtPmJhc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGNvbjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWNvbiA9IF9fcmF3X3JlYWRsKGJhc2UgKyAweDAwKTsKKwljb24gJj0gfigzIDw8IChvZmZzZXQgKiAyKSk7CisKKwlfX3Jhd193cml0ZWwoY29uLCBiYXNlICsgMHgwMCk7CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgczNjX2dwaW9saWJfb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkgICAgICB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqb3VyY2hpcCA9IHRvX3MzY19ncGlvKGNoaXApOworCXZvaWQgX19pb21lbSAqYmFzZSA9IG91cmNoaXAtPmJhc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGRhdDsKKwl1bnNpZ25lZCBsb25nIGNvbjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWRhdCA9IF9fcmF3X3JlYWRsKGJhc2UgKyAweDA0KTsKKwlkYXQgJj0gfigxIDw8IG9mZnNldCk7CisJaWYgKHZhbHVlKQorCQlkYXQgfD0gMSA8PCBvZmZzZXQ7CisJX19yYXdfd3JpdGVsKGRhdCwgYmFzZSArIDB4MDQpOworCisJY29uID0gX19yYXdfcmVhZGwoYmFzZSArIDB4MDApOworCWNvbiAmPSB+KDMgPDwgKG9mZnNldCAqIDIpKTsKKwljb24gfD0gMSA8PCAob2Zmc2V0ICogMik7CisKKwlfX3Jhd193cml0ZWwoY29uLCBiYXNlICsgMHgwMCk7CisJX19yYXdfd3JpdGVsKGRhdCwgYmFzZSArIDB4MDQpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzM2NfZ3Bpb2xpYl9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCSAgICB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqb3VyY2hpcCA9IHRvX3MzY19ncGlvKGNoaXApOworCXZvaWQgX19pb21lbSAqYmFzZSA9IG91cmNoaXAtPmJhc2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGRhdDsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKworCWRhdCA9IF9fcmF3X3JlYWRsKGJhc2UgKyAweDA0KTsKKwlkYXQgJj0gfigxIDw8IG9mZnNldCk7CisJaWYgKHZhbHVlKQorCQlkYXQgfD0gMSA8PCBvZmZzZXQ7CisJX19yYXdfd3JpdGVsKGRhdCwgYmFzZSArIDB4MDQpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgaW50IHMzY19ncGlvbGliX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IHMzY19ncGlvX2NoaXAgKm91cmNoaXAgPSB0b19zM2NfZ3BpbyhjaGlwKTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKworCXZhbCA9IF9fcmF3X3JlYWRsKG91cmNoaXAtPmJhc2UgKyAweDA0KTsKKwl2YWwgPj49IG9mZnNldDsKKwl2YWwgJj0gMTsKKworCXJldHVybiB2YWw7Cit9CisKK19faW5pdCB2b2lkIHMzY19ncGlvbGliX2FkZChzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCkKK3sKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpnYyA9ICZjaGlwLT5jaGlwOworCWludCByZXQ7CisKKwlCVUdfT04oIWNoaXAtPmJhc2UpOworCUJVR19PTighZ2MtPmxhYmVsKTsKKwlCVUdfT04oIWdjLT5uZ3Bpbyk7CisKKwlpZiAoIWdjLT5kaXJlY3Rpb25faW5wdXQpCisJCWdjLT5kaXJlY3Rpb25faW5wdXQgPSBzM2NfZ3Bpb2xpYl9pbnB1dDsKKwlpZiAoIWdjLT5kaXJlY3Rpb25fb3V0cHV0KQorCQlnYy0+ZGlyZWN0aW9uX291dHB1dCA9IHMzY19ncGlvbGliX291dHB1dDsKKwlpZiAoIWdjLT5zZXQpCisJCWdjLT5zZXQgPSBzM2NfZ3Bpb2xpYl9zZXQ7CisJaWYgKCFnYy0+Z2V0KQorCQlnYy0+Z2V0ID0gczNjX2dwaW9saWJfZ2V0OworCisjaWZkZWYgQ09ORklHX1BNCisJaWYgKGNoaXAtPnBtICE9IE5VTEwpIHsKKwkJaWYgKCFjaGlwLT5wbS0+c2F2ZSB8fCAhY2hpcC0+cG0tPnJlc3VtZSkKKwkJCXByaW50ayhLRVJOX0VSUiAiZ3BpbzogJXMgaGFzIG1pc3NpbmcgUE0gZnVuY3Rpb25zXG4iLAorCQkJICAgICAgIGdjLT5sYWJlbCk7CisJfSBlbHNlCisJCXByaW50ayhLRVJOX0VSUiAiZ3BpbzogJXMgaGFzIG5vIFBNIGZ1bmN0aW9uXG4iLCBnYy0+bGFiZWwpOworI2VuZGlmCisKKwkvKiBncGlvY2hpcF9hZGQoKSBwcmludHMgb3duIGZhaWx1cmUgbWVzc2FnZSBvbiBlcnJvci4gKi8KKwlyZXQgPSBncGlvY2hpcF9hZGQoZ2MpOworCWlmIChyZXQgPj0gMCkKKwkJczNjX2dwaW9saWJfdHJhY2soY2hpcCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvZ3Bpb2xpYi5jIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2dwaW9saWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YThiYThiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2dwaW9saWIuYwpAQCAtMCwwICsxLDE5OSBAQAorLyogYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2dwaW9saWIuYworICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICoJCWh0dHA6Ly93d3cuc2Ftc3VuZy5jb20vCisgKgorICogU0FNU1VORyAtIEdQSU9saWIgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNvcmUuaD4KKyNpbmNsdWRlIDxwbGF0L2dwaW8tY2ZnLmg+CisjaW5jbHVkZSA8cGxhdC9ncGlvLWNmZy1oZWxwZXJzLmg+CisKKyNpZm5kZWYgREVCVUdfR1BJTworI2RlZmluZSBncGlvX2RiZyh4Li4uKSBkbyB7IH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBncGlvX2RiZyh4Li4uKSBwcmludGsoS0VSTl9ERUJVRyB4KQorI2VuZGlmCisKKy8qIFRoZSBzYW1zdW5nX2dwaW9saWJfNGJpdCByb3V0aW5lcyBhcmUgdG8gY29udHJvbCB0aGUgZ3BpbyBiYW5rcyB3aGVyZQorICogdGhlIGdwaW8gY29uZmlndXJhdGlvbiByZWdpc3RlciAoR1B4Q09OKSBoYXMgNCBiaXRzIHBlciBHUElPLCBhcyB0aGUKKyAqIGZvbGxvd2luZyBleGFtcGxlOgorICoKKyAqIGJhc2UgKyAweDAwOiBDb250cm9sIHJlZ2lzdGVyLCA0IGJpdHMgcGVyIGdwaW8KKyAqCQlncGlvIG46IDQgYml0cyBzdGFydGluZyBhdCAoNCpuKQorICoJCTAwMDAgPSBpbnB1dCwgMDAwMSA9IG91dHB1dCwgb3RoZXJzIG1lYW4gc3BlY2lhbC1mdW5jdGlvbgorICogYmFzZSArIDB4MDQ6IERhdGEgcmVnaXN0ZXIsIDEgYml0IHBlciBncGlvCisgKgkJYml0IG46IGRhdGEgYml0IG4KKyAqCisgKiBOb3RlLCBzaW5jZSB0aGUgZGF0YSByZWdpc3RlciBpcyBvbmUgYml0IHBlciBncGlvIGFuZCBpcyBhdCBiYXNlICsgMHg0CisgKiB3ZSBjYW4gdXNlIHMzY19ncGlvbGliX2dldCBhbmQgczNjX2dwaW9saWJfc2V0IHRvIGNoYW5nZSB0aGUgc3RhdGUgb2YKKyAqIHRoZSBvdXRwdXQuCisqLworCitzdGF0aWMgaW50IHNhbXN1bmdfZ3Bpb2xpYl80Yml0X2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJICAgICAgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqb3VyY2hpcCA9IHRvX3MzY19ncGlvKGNoaXApOworCXZvaWQgX19pb21lbSAqYmFzZSA9IG91cmNoaXAtPmJhc2U7CisJdW5zaWduZWQgbG9uZyBjb247CisKKwljb24gPSBfX3Jhd19yZWFkbChiYXNlICsgR1BJT0NPTl9PRkYpOworCWNvbiAmPSB+KDB4ZiA8PCBjb25fNGJpdF9zaGlmdChvZmZzZXQpKTsKKwlfX3Jhd193cml0ZWwoY29uLCBiYXNlICsgR1BJT0NPTl9PRkYpOworCisJZ3Bpb19kYmcoIiVzOiAlcDogQ09OIG5vdyAlMDhseFxuIiwgX19mdW5jX18sIGJhc2UsIGNvbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYW1zdW5nX2dwaW9saWJfNGJpdF9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBzM2NfZ3Bpb19jaGlwICpvdXJjaGlwID0gdG9fczNjX2dwaW8oY2hpcCk7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gb3VyY2hpcC0+YmFzZTsKKwl1bnNpZ25lZCBsb25nIGNvbjsKKwl1bnNpZ25lZCBsb25nIGRhdDsKKworCWNvbiA9IF9fcmF3X3JlYWRsKGJhc2UgKyBHUElPQ09OX09GRik7CisJY29uICY9IH4oMHhmIDw8IGNvbl80Yml0X3NoaWZ0KG9mZnNldCkpOworCWNvbiB8PSAweDEgPDwgY29uXzRiaXRfc2hpZnQob2Zmc2V0KTsKKworCWRhdCA9IF9fcmF3X3JlYWRsKGJhc2UgKyBHUElPREFUX09GRik7CisKKwlpZiAodmFsdWUpCisJCWRhdCB8PSAxIDw8IG9mZnNldDsKKwllbHNlCisJCWRhdCAmPSB+KDEgPDwgb2Zmc2V0KTsKKworCV9fcmF3X3dyaXRlbChkYXQsIGJhc2UgKyBHUElPREFUX09GRik7CisJX19yYXdfd3JpdGVsKGNvbiwgYmFzZSArIEdQSU9DT05fT0ZGKTsKKwlfX3Jhd193cml0ZWwoZGF0LCBiYXNlICsgR1BJT0RBVF9PRkYpOworCisJZ3Bpb19kYmcoIiVzOiAlcDogQ09OICUwOGx4LCBEQVQgJTA4bHhcbiIsIF9fZnVuY19fLCBiYXNlLCBjb24sIGRhdCk7CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhlIG5leHQgc2V0IG9mIHJvdXRpbmVzIGFyZSBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlIEdQSU8gY29uZmlndXJhdGlvbgorICogcmVnaXN0ZXJzIGFyZSA0IGJpdHMgcGVyIEdQSU8gYnV0IHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgcmVnaXN0ZXIgKHRoZQorICogYmFuayBoYXMgbW9yZSB0aGFuIDggR1BJT3MuCisgKgorICogVGhpcyBjYXNlIGlzIHRoZSBzaW1pbGFyIHRvIHRoZSA0IGJpdCBjYXNlLCBidXQgdGhlIHJlZ2lzdGVycyBhcmUgYXMKKyAqIGZvbGxvd3M6CisgKgorICogYmFzZSArIDB4MDA6IENvbnRyb2wgcmVnaXN0ZXIsIDQgYml0cyBwZXIgZ3BpbyAobG93ZXIgOCBHUElPcykKKyAqCQlncGlvIG46IDQgYml0cyBzdGFydGluZyBhdCAoNCpuKQorICoJCTAwMDAgPSBpbnB1dCwgMDAwMSA9IG91dHB1dCwgb3RoZXJzIG1lYW4gc3BlY2lhbC1mdW5jdGlvbgorICogYmFzZSArIDB4MDQ6IENvbnRyb2wgcmVnaXN0ZXIsIDQgYml0cyBwZXIgZ3BpbyAodXAgdG8gOCBhZGRpdGlvbnMgR1BJT3MpCisgKgkJZ3BpbyBuOiA0IGJpdHMgc3RhcnRpbmcgYXQgKDQqbikKKyAqCQkwMDAwID0gaW5wdXQsIDAwMDEgPSBvdXRwdXQsIG90aGVycyBtZWFuIHNwZWNpYWwtZnVuY3Rpb24KKyAqIGJhc2UgKyAweDA4OiBEYXRhIHJlZ2lzdGVyLCAxIGJpdCBwZXIgZ3BpbworICoJCWJpdCBuOiBkYXRhIGJpdCBuCisgKgorICogVG8gYWxsb3cgdXMgdG8gdXNlIHRoZSBzM2NfZ3Bpb2xpYl9nZXQgYW5kIHMzY19ncGlvbGliX3NldCByb3V0aW5lcyB3ZQorICogc3RvcmUgdGhlICdiYXNlICsgMHg0JyBhZGRyZXNzIHNvIHRoYXQgdGhlc2Ugcm91dGluZXMgc2VlIHRoZSBkYXRhCisgKiByZWdpc3RlciBhdCBvdXJjaGlwLT5iYXNlICsgMHgwNC4KKyAqLworCitzdGF0aWMgaW50IHNhbXN1bmdfZ3Bpb2xpYl80Yml0Ml9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgb2Zmc2V0KQoreworCXN0cnVjdCBzM2NfZ3Bpb19jaGlwICpvdXJjaGlwID0gdG9fczNjX2dwaW8oY2hpcCk7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gb3VyY2hpcC0+YmFzZTsKKwl2b2lkIF9faW9tZW0gKnJlZ2NvbiA9IGJhc2U7CisJdW5zaWduZWQgbG9uZyBjb247CisKKwlpZiAob2Zmc2V0ID4gNykKKwkJb2Zmc2V0IC09IDg7CisJZWxzZQorCQlyZWdjb24gLT0gNDsKKworCWNvbiA9IF9fcmF3X3JlYWRsKHJlZ2Nvbik7CisJY29uICY9IH4oMHhmIDw8IGNvbl80Yml0X3NoaWZ0KG9mZnNldCkpOworCV9fcmF3X3dyaXRlbChjb24sIHJlZ2Nvbik7CisKKwlncGlvX2RiZygiJXM6ICVwOiBDT04gJTA4bHhcbiIsIF9fZnVuY19fLCBiYXNlLCBjb24pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Ftc3VuZ19ncGlvbGliXzRiaXQyX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHMzY19ncGlvX2NoaXAgKm91cmNoaXAgPSB0b19zM2NfZ3BpbyhjaGlwKTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSBvdXJjaGlwLT5iYXNlOworCXZvaWQgX19pb21lbSAqcmVnY29uID0gYmFzZTsKKwl1bnNpZ25lZCBsb25nIGNvbjsKKwl1bnNpZ25lZCBsb25nIGRhdDsKKwl1bnNpZ25lZCBjb25fb2Zmc2V0ID0gb2Zmc2V0OworCisJaWYgKGNvbl9vZmZzZXQgPiA3KQorCQljb25fb2Zmc2V0IC09IDg7CisJZWxzZQorCQlyZWdjb24gLT0gNDsKKworCWNvbiA9IF9fcmF3X3JlYWRsKHJlZ2Nvbik7CisJY29uICY9IH4oMHhmIDw8IGNvbl80Yml0X3NoaWZ0KGNvbl9vZmZzZXQpKTsKKwljb24gfD0gMHgxIDw8IGNvbl80Yml0X3NoaWZ0KGNvbl9vZmZzZXQpOworCisJZGF0ID0gX19yYXdfcmVhZGwoYmFzZSArIEdQSU9EQVRfT0ZGKTsKKworCWlmICh2YWx1ZSkKKwkJZGF0IHw9IDEgPDwgb2Zmc2V0OworCWVsc2UKKwkJZGF0ICY9IH4oMSA8PCBvZmZzZXQpOworCisJX19yYXdfd3JpdGVsKGRhdCwgYmFzZSArIEdQSU9EQVRfT0ZGKTsKKwlfX3Jhd193cml0ZWwoY29uLCByZWdjb24pOworCV9fcmF3X3dyaXRlbChkYXQsIGJhc2UgKyBHUElPREFUX09GRik7CisKKwlncGlvX2RiZygiJXM6ICVwOiBDT04gJTA4bHgsIERBVCAlMDhseFxuIiwgX19mdW5jX18sIGJhc2UsIGNvbiwgZGF0KTsKKworCXJldHVybiAwOworfQorCit2b2lkIF9faW5pdCBzYW1zdW5nX2dwaW9saWJfYWRkXzRiaXQoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXApCit7CisJY2hpcC0+Y2hpcC5kaXJlY3Rpb25faW5wdXQgPSBzYW1zdW5nX2dwaW9saWJfNGJpdF9pbnB1dDsKKwljaGlwLT5jaGlwLmRpcmVjdGlvbl9vdXRwdXQgPSBzYW1zdW5nX2dwaW9saWJfNGJpdF9vdXRwdXQ7CisJY2hpcC0+cG0gPSBfX2dwaW9fcG0oJnMzY19ncGlvX3BtXzRiaXQpOworfQorCit2b2lkIF9faW5pdCBzYW1zdW5nX2dwaW9saWJfYWRkXzRiaXQyKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwKQoreworCWNoaXAtPmNoaXAuZGlyZWN0aW9uX2lucHV0ID0gc2Ftc3VuZ19ncGlvbGliXzRiaXQyX2lucHV0OworCWNoaXAtPmNoaXAuZGlyZWN0aW9uX291dHB1dCA9IHNhbXN1bmdfZ3Bpb2xpYl80Yml0Ml9vdXRwdXQ7CisJY2hpcC0+cG0gPSBfX2dwaW9fcG0oJnMzY19ncGlvX3BtXzRiaXQpOworfQorCit2b2lkIF9faW5pdCBzYW1zdW5nX2dwaW9saWJfYWRkXzRiaXRfY2hpcHMoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCisJCQkJCSAgIGludCBucl9jaGlwcykKK3sKKwlmb3IgKDsgbnJfY2hpcHMgPiAwOyBucl9jaGlwcy0tLCBjaGlwKyspIHsKKwkJc2Ftc3VuZ19ncGlvbGliX2FkZF80Yml0KGNoaXApOworCQlzM2NfZ3Bpb2xpYl9hZGQoY2hpcCk7CisJfQorfQorCit2b2lkIF9faW5pdCBzYW1zdW5nX2dwaW9saWJfYWRkXzRiaXQyX2NoaXBzKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAorCQkJCQkgICAgaW50IG5yX2NoaXBzKQoreworCWZvciAoOyBucl9jaGlwcyA+IDA7IG5yX2NoaXBzLS0sIGNoaXArKykgeworCQlzYW1zdW5nX2dwaW9saWJfYWRkXzRiaXQyKGNoaXApOworCQlzM2NfZ3Bpb2xpYl9hZGQoY2hpcCk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9hZGMuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvYWRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgzODJjNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvYWRjLmgKQEAgLTAsMCArMSwzNSBAQAorLyogYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9hZGMuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW1udGUuY28udWsvCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDIEFEQyBkcml2ZXIgaW5mb3JtYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9QTEFUX0FEQ19ICisjZGVmaW5lIF9fQVNNX1BMQVRfQURDX0ggX19GSUxFX18KKworc3RydWN0IHMzY19hZGNfY2xpZW50OworCitleHRlcm4gaW50IHMzY19hZGNfc3RhcnQoc3RydWN0IHMzY19hZGNfY2xpZW50ICpjbGllbnQsCisJCQkgdW5zaWduZWQgaW50IGNoYW5uZWwsIHVuc2lnbmVkIGludCBucl9zYW1wbGVzKTsKKworZXh0ZXJuIGludCBzM2NfYWRjX3JlYWQoc3RydWN0IHMzY19hZGNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjaCk7CisKK2V4dGVybiBzdHJ1Y3QgczNjX2FkY19jbGllbnQgKgorCXMzY19hZGNfcmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJCSB2b2lkICgqc2VsZWN0KShzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwKKwkJCQkJdW5zaWduZWQgc2VsZWN0ZWQpLAorCQkJIHZvaWQgKCpjb252KShzdHJ1Y3QgczNjX2FkY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICAgICB1bnNpZ25lZCBkMCwgdW5zaWduZWQgZDEsCisJCQkJICAgICAgdW5zaWduZWQgKnNhbXBsZXNfbGVmdCksCisJCQkgdW5zaWduZWQgaW50IGlzX3RzKTsKKworZXh0ZXJuIHZvaWQgczNjX2FkY19yZWxlYXNlKHN0cnVjdCBzM2NfYWRjX2NsaWVudCAqY2xpZW50KTsKKworI2VuZGlmIC8qIF9fQVNNX1BMQVRfQURDX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvYXVkaW8uaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvYXVkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzJmOWVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9hdWRpby5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qIGFyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvYXVkaW8uaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIENvLiBMdGQKKyAqIEF1dGhvcjogSmFzd2luZGVyIFNpbmdoIDxqYXNzaS5icmFyQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworLyogVGhlIG1hY2hpbmUgaW5pdCBjb2RlIGNhbGxzIHMzYypfYWM5N19zZXR1cF9ncGlvIHdpdGgKKyAqIG9uZSBvZiB0aGVzZSBkZWZpbmVzIGluIG9yZGVyIHRvIHNlbGVjdCBhcHByb3ByaWF0ZSBiYW5rCisgKiBvZiBHUElPIGZvciBBQzk3IHBpbnMKKyAqLworI2RlZmluZSBTM0M2NFhYX0FDOTdfR1BEICAwCisjZGVmaW5lIFMzQzY0WFhfQUM5N19HUEUgIDEKK2V4dGVybiB2b2lkIHMzYzY0eHhfYWM5N19zZXR1cF9ncGlvKGludCk7CisKKy8qKgorICogc3RydWN0IHMzY19hdWRpb19wZGF0YSAtIGNvbW1vbiBwbGF0Zm9ybSBkYXRhIGZvciBhdWRpbyBkZXZpY2UgZHJpdmVycworICogQGNmZ19ncGlvOiBDYWxsYmFjayBmdW5jdGlvbiB0byBzZXR1cCBtdXgnZWQgcGlucyBpbiBJMlMvUENNL0FDOTcgbW9kZQorICovCitzdHJ1Y3QgczNjX2F1ZGlvX3BkYXRhIHsKKwlpbnQgKCpjZmdfZ3Bpbykoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKK307CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2Nsb2NrLWNsa3NyYy5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9jbG9jay1jbGtzcmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGE4Y2E3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9jbG9jay1jbGtzcmMuaApAQCAtMCwwICsxLDgzIEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2Nsb2NrLWNsa3NyYy5oCisgKgorICogUGFydHMgdGFrZW4gZnJvbSBhcmNoL2FybS9wbGF0LXMzYzY0eHgvY2xvY2suYworICoJQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqCUNvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCQlodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoKKyAqIENvcHlyaWdodCAyMDA5IEJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KKyAqIENvcHlyaWdodCAyMDA5IEhhcmFsZCBXZWx0ZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisvKioKKyAqIHN0cnVjdCBjbGtzcmNfc291cmNlcyAtIGxpc3Qgb2Ygc291cmNlcyBmb3IgYSBnaXZlbiBjbG9jaworICogQHNvdXJjZXM6IGFycmF5IG9mIHBvaW50ZXJzIHRvIGNsb2NrcworICogQG5yX3NvdXJjZXM6IFRoZSBzaXplIG9mIEBzb3VyY2VzCisgKi8KK3N0cnVjdCBjbGtzcmNfc291cmNlcyB7CisJdW5zaWduZWQgaW50CW5yX3NvdXJjZXM7CisJc3RydWN0IGNsawkqKnNvdXJjZXM7Cit9OworCisvKioKKyAqIHN0cnVjdCBjbGtzcmNfcmVnIC0gcmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgY2xvY2sgY29udHJvbCBiaXRzCisgKiBAcmVnOiBwb2ludGVyIHRvIHRoZSByZWdpc3RlciBpbiB2aXJ0dWFsIG1lbW9yeS4KKyAqIEBzaGlmdDogdGhlIHNoaWZ0IGluIGJpdHMgdG8gd2hlcmUgdGhlIGJpdGZpZWxkIGlzLgorICogQHNpemU6IHRoZSBzaXplIGluIGJpdHMgb2YgdGhlIGJpdGZpZWxkLgorICoKKyAqIFRoaXMgc3BlY2lmaWVzIHRoZSBzaXplIGFuZCBwb3NpdGlvbiBvZiB0aGUgYml0cyB3ZSBhcmUgaW50ZXJlc3RlZAorICogaW4gd2l0aGluIHRoZSByZWdpc3RlciBzcGVjaWZpZWQgYnkgQHJlZy4KKyAqLworc3RydWN0IGNsa3NyY19yZWcgeworCXZvaWQgX19pb21lbQkJKnJlZzsKKwl1bnNpZ25lZCBzaG9ydAkJc2hpZnQ7CisJdW5zaWduZWQgc2hvcnQJCXNpemU7Cit9OworCisvKioKKyAqIHN0cnVjdCBjbGtzcmNfY2xrIC0gY2xhc3Mgb2YgY2xvY2sgZm9yIG5ld2VyIHN0eWxlIHNhbXN1bmcgZGV2aWNlcy4KKyAqIEBjbGs6IHRoZSBzdGFuZGFyZCBjbG9jayByZXByZXNlbnRhdGlvbgorICogQHNvdXJjZXM6IHRoZSBzb3VyY2VzIGZvciB0aGlzIGNsb2NrCisgKiBAcmVnX3NyYzogdGhlIHJlZ2lzdGVyIGRlZmluaXRpb24gZm9yIHNlbGVjdGluZyB0aGUgY2xvY2sncyBzb3VyY2UKKyAqIEByZWdfZGl2OiB0aGUgcmVnaXN0ZXIgZGVmaW5pdGlvbiBmb3IgdGhlIGNsb2NrJ3Mgb3V0cHV0IGRpdmlzb3IKKyAqCisgKiBUaGlzIGNsb2NrIGltcGxlbWVudHMgdGhlIGZlYXR1cmVzIHJlcXVpcmVkIGJ5IHRoZSBuZXdlciBTb0NzIHdoZXJlCisgKiB0aGUgc3RhbmRhcmQgY2xvY2sgYmxvY2sgcHJvdmlkZXMgYW4gaW5wdXQgbXV4IGFuZCBhIHBvc3QtbXV4IGRpdmlzb3IKKyAqIHRvIHByb3ZpZGUgdGhlIHBlcmlwZXJoYWwncyBjbG9jay4KKyAqCisgKiBUaGUgYXJyYXkgb2YgQHNvdXJjZXMgcHJvdmlkZXMgdGhlIG1hcHBpbmcgb2YgbXV4IHBvc2l0aW9uIHRvIHRoZQorICogY2xvY2ssIGFuZCBAcmVnX3NyYyBzaG93cyB0aGUgY29kZSB3aGVyZSB0byBtb2RpZnkgdG8gY2hhbmdlIHRoZSBtdXgKKyAqIHBvc2l0aW9uLiBUaGUgQHJlZ19kaXYgZGVmaW5lcyBob3cgdG8gY2hhbmdlIHRoZSBkaXZpZGVyIHNldHRpbmdzIG9uCisgKiB0aGUgb3V0cHV0LgorICovCitzdHJ1Y3QgY2xrc3JjX2NsayB7CisJc3RydWN0IGNsawkJY2xrOworCXN0cnVjdCBjbGtzcmNfc291cmNlcwkqc291cmNlczsKKworCXN0cnVjdCBjbGtzcmNfcmVnCXJlZ19zcmM7CisJc3RydWN0IGNsa3NyY19yZWcJcmVnX2RpdjsKK307CisKKy8qKgorICogczNjX3NldF9jbGtzcmMoKSAtIHNldHVwIHRoZSBjbG9jayBmcm9tIHRoZSByZWdpc3RlciBzZXR0aW5ncworICogQGNsazogVGhlIGNsb2NrIHRvIHNldHVwLgorICogQGFubm91bmNlOiB0cnVlIHRvIGFubm91bmNlIHRoZSBzZXR0aW5nIHRvIHByaW50aygpLgorICoKKyAqIFNldHVwIHRoZSBjbG9jayBmcm9tIHRoZSBjdXJyZW50IHJlZ2lzdGVyIHNldHRpbmdzLCBmb3Igd2hlbiB0aGUKKyAqIGtlcm5lbCBib290cyBvciBpZiBpdCBpcyByZXN1bWluZyBmcm9tIGEgcG9zc2libHkgdW5rbm93biBzdGF0ZS4KKyAqLworZXh0ZXJuIHZvaWQgczNjX3NldF9jbGtzcmMoc3RydWN0IGNsa3NyY19jbGsgKmNsaywgYm9vbCBhbm5vdW5jZSk7CisKKy8qKgorICogczNjX3JlZ2lzdGVyX2Nsa3NyYygpIHJlZ2lzdGVyIGNsb2NrcyBmcm9tIGFuIGFycmF5IG9mIGNsa3NyYyBjbG9ja3MKKyAqIEBzcmNzOiBUaGUgYXJyYXkgb2YgY2xvY2tzIHRvIHJlZ2lzdGVyCisgKiBAc2l6ZTogVGhlIHNpemUgb2YgdGhlIEBzcmNzIGFycmF5LgorICoKKyAqIEluaXRpYWxpc2UgYW5kIHJlZ2lzdGVyIHRoZSBhcnJheSBvZiBjbG9ja3MgZGVzY3JpYmVkIGJ5IEBzcmNzLgorICovCitleHRlcm4gdm9pZCBzM2NfcmVnaXN0ZXJfY2xrc3JjKHN0cnVjdCBjbGtzcmNfY2xrICpzcmNzLCBpbnQgc2l6ZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2Nsb2NrLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBiNjI2OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvY2xvY2suaApAQCAtMCwwICsxLDExNSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2Nsb2NrLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL1NXTElOVVgvCisgKglXcml0dGVuIGJ5IEJlbiBEb29rcywgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCitzdHJ1Y3QgY2xrOworCisvKioKKyAqIHN0cnVjdCBjbGtfb3BzIC0gc3RhbmRhcmQgY2xvY2sgb3BlcmF0aW9ucworICogQHNldF9yYXRlOiBzZXQgdGhlIGNsb2NrIHJhdGUsIHNlZSBjbGtfc2V0X3JhdGUoKS4KKyAqIEBnZXRfcmF0ZTogZ2V0IHRoZSBjbG9jayByYXRlLCBzZWUgY2xrX2dldF9yYXRlKCkuCisgKiBAcm91bmRfcmF0ZTogcm91bmQgYSBnaXZlbiBjbG9jayByYXRlLCBzZWUgY2xrX3JvdW5kX3JhdGUoKS4KKyAqIEBzZXRfcGFyZW50OiBzZXQgdGhlIGNsb2NrJ3MgcGFyZW50LCBzZWUgY2xrX3NldF9wYXJlbnQoKS4KKyAqCisgKiBHcm91cCB0aGUgY29tbW9uIGNsb2NrIGltcGxlbWVudGF0aW9ucyB0b2dldGhlciBzbyB0aGF0IHdlCisgKiBkb24ndCBoYXZlIHRvIGtlZXAgc2V0dGluZyB0aGUgc2FtZSBmaWVscyBhZ2Fpbi4gV2UgbGVhdmUKKyAqIGVuYWJsZSBpbiBzdHJ1Y3QgY2xrLgorICoKKyAqIEFkZGluZyBhbiBleHRyYSBsYXllciBvZiBpbmRpcmVjdGlvbiBpbnRvIHRoZSBwcm9jZXNzIHNob3VsZAorICogbm90IGJlIGEgcHJvYmxlbSBhcyBpdCBpcyB1bmxpa2VseSB0aGVzZSBvcGVyYXRpb25zIGFyZSBnb2luZworICogdG8gbmVlZCB0byBiZSBjYWxsZWQgcXVpY2tseS4KKyAqLworc3RydWN0IGNsa19vcHMgeworCWludAkJICAgICgqc2V0X3JhdGUpKHN0cnVjdCBjbGsgKmMsIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CisJdW5zaWduZWQgbG9uZwkgICAgKCpnZXRfcmF0ZSkoc3RydWN0IGNsayAqYyk7CisJdW5zaWduZWQgbG9uZwkgICAgKCpyb3VuZF9yYXRlKShzdHJ1Y3QgY2xrICpjLCB1bnNpZ25lZCBsb25nIHJhdGUpOworCWludAkJICAgICgqc2V0X3BhcmVudCkoc3RydWN0IGNsayAqYywgc3RydWN0IGNsayAqcGFyZW50KTsKK307CisKK3N0cnVjdCBjbGsgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgICBsaXN0OworCXN0cnVjdCBtb2R1bGUgICAgICAgICpvd25lcjsKKwlzdHJ1Y3QgY2xrICAgICAgICAgICAqcGFyZW50OworCWNvbnN0IGNoYXIgICAgICAgICAgICpuYW1lOworCWludAkJICAgICAgaWQ7CisJaW50CQkgICAgICB1c2FnZTsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgcmF0ZTsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgY3RybGJpdDsKKworCXN0cnVjdCBjbGtfb3BzCQkqb3BzOworCWludAkJICAgICgqZW5hYmxlKShzdHJ1Y3QgY2xrICosIGludCBlbmFibGUpOworfTsKKworLyogb3RoZXIgY2xvY2tzIHdoaWNoIG1heSBiZSByZWdpc3RlcmVkIGJ5IGJvYXJkIHN1cHBvcnQgKi8KKworZXh0ZXJuIHN0cnVjdCBjbGsgczNjMjR4eF9kY2xrMDsKK2V4dGVybiBzdHJ1Y3QgY2xrIHMzYzI0eHhfZGNsazE7CitleHRlcm4gc3RydWN0IGNsayBzM2MyNHh4X2Nsa291dDA7CitleHRlcm4gc3RydWN0IGNsayBzM2MyNHh4X2Nsa291dDE7CitleHRlcm4gc3RydWN0IGNsayBzM2MyNHh4X3VjbGs7CisKK2V4dGVybiBzdHJ1Y3QgY2xrIGNsa191c2JfYnVzOworCisvKiBjb3JlIGNsb2NrIHN1cHBvcnQgKi8KKworZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX2Y7CitleHRlcm4gc3RydWN0IGNsayBjbGtfaDsKK2V4dGVybiBzdHJ1Y3QgY2xrIGNsa19wOworZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX21wbGw7CitleHRlcm4gc3RydWN0IGNsayBjbGtfdXBsbDsKK2V4dGVybiBzdHJ1Y3QgY2xrIGNsa19lcGxsOworZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX3h0YWw7CitleHRlcm4gc3RydWN0IGNsayBjbGtfZXh0OworCisvKiBTM0M2NFhYIHNwZWNpZmljIGNsb2NrcyAqLworZXh0ZXJuIHN0cnVjdCBjbGsgY2xrX2gyOworZXh0ZXJuIHN0cnVjdCBjbGsgY2xrXzI3bTsKK2V4dGVybiBzdHJ1Y3QgY2xrIGNsa180OG07CisKK2V4dGVybiBpbnQgY2xrX2RlZmF1bHRfc2V0cmF0ZShzdHJ1Y3QgY2xrICpjbGssIHVuc2lnbmVkIGxvbmcgcmF0ZSk7CitleHRlcm4gc3RydWN0IGNsa19vcHMgY2xrX29wc19kZWZfc2V0cmF0ZTsKKworLyogZXhwb3J0cyBmb3IgYXJjaC9hcm0vbWFjaC1zM2MyNDEwCisgKgorICogUGxlYXNlIERPIE5PVCB1c2UgdGhlc2Ugb3V0c2lkZSBvZiBhcmNoL2FybS9tYWNoLXMzYzI0MTAKKyovCisKK2V4dGVybiBzcGlubG9ja190IGNsb2Nrc19sb2NrOworCitleHRlcm4gaW50IHMzYzI0MTBfY2xrY29uX2VuYWJsZShzdHJ1Y3QgY2xrICpjbGssIGludCBlbmFibGUpOworCitleHRlcm4gaW50IHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soc3RydWN0IGNsayAqY2xrKTsKK2V4dGVybiBpbnQgczNjMjR4eF9yZWdpc3Rlcl9jbG9ja3Moc3RydWN0IGNsayAqKmNsaywgaW50IG5yX2Nsa3MpOworCitleHRlcm4gdm9pZCBzM2NfcmVnaXN0ZXJfY2xvY2tzKHN0cnVjdCBjbGsgKmNsaywgaW50IG5yX2Nsa3MpOworCitleHRlcm4gaW50IHMzYzI0eHhfcmVnaXN0ZXJfYmFzZWNsb2Nrcyh1bnNpZ25lZCBsb25nIHh0YWwpOworCitleHRlcm4gdm9pZCBzNXBfcmVnaXN0ZXJfY2xvY2tzKHVuc2lnbmVkIGxvbmcgeHRhbF9mcmVxKTsKKworZXh0ZXJuIHZvaWQgczNjMjR4eF9zZXR1cF9jbG9ja3ModW5zaWduZWQgbG9uZyBmY2xrLAorCQkJCSB1bnNpZ25lZCBsb25nIGhjbGssCisJCQkJIHVuc2lnbmVkIGxvbmcgcGNsayk7CisKK2V4dGVybiB2b2lkIHMzYzI0MTBfc2V0dXBfY2xvY2tzKHZvaWQpOworZXh0ZXJuIHZvaWQgczNjMjQxMl9zZXR1cF9jbG9ja3Modm9pZCk7CitleHRlcm4gdm9pZCBzM2MyNDR4X3NldHVwX2Nsb2Nrcyh2b2lkKTsKK2V4dGVybiB2b2lkIHMzYzI0NDNfc2V0dXBfY2xvY2tzKHZvaWQpOworCisvKiBTM0M2NFhYIHNwZWNpZmljIGZ1bmN0aW9ucyBhbmQgY2xvY2tzICovCisKK2V4dGVybiBpbnQgczNjNjR4eF9zY2xrX2N0cmwoc3RydWN0IGNsayAqY2xrLCBpbnQgZW5hYmxlKTsKKworLyogSW5pdCBmb3IgcHdtIGNsb2NrIGNvZGUgKi8KKworZXh0ZXJuIHZvaWQgczNjX3B3bWNsa19pbml0KHZvaWQpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2NwdS1mcmVxLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2NwdS1mcmVxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODBjNGE4MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvY3B1LWZyZXEuaApAQCAtMCwwICsxLDE0NSBAQAorLyogYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9jcHUtZnJlcS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQyBDUFUgZnJlcXVlbmN5IHNjYWxpbmcgc3VwcG9ydCAtIGRyaXZlciBhbmQgYm9hcmQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKworc3RydWN0IHMzY19jcHVmcmVxX2luZm87CitzdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQ7CitzdHJ1Y3QgczNjX2lvdGltaW5nczsKKworLyoqCisgKiBzdHJ1Y3QgczNjX2ZyZXEgLSBmcmVxdWVuY3kgaW5mb3JtYXRpb24gKG1haW5seSBmb3IgY29yZSBkcml2ZXJzKQorICogQGZjbGs6IFRoZSBGQ0xLIGZyZXF1ZW5jeSBpbiBIei4KKyAqIEBhcm1jbGs6IFRoZSBBUk1DTEsgZnJlcXVlbmN5IGluIEh6LgorICogQGhjbGtfdG5zOiBIQ0xLIGN5Y2xlIHRpbWUgaW4gMTB0aHMgb2YgbmFuby1zZWNvbmRzLgorICogQGhjbGs6IFRoZSBIQ0xLIGZyZXF1ZW5jeSBpbiBIei4KKyAqIEBwY2xrOiBUaGUgUENMSyBmcmVxdWVuY3kgaW4gSHouCisgKgorICogVGhpcyBjb250YWlucyB0aGUgZnJlcXVlbmN5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24KKyAqIG1haW5seSBmb3IgdGhlIGNvcmUgZHJpdmVycyB0byBlbnN1cmUgd2UgZG8gbm90IGVuZCB1cCBwYXNzaW5nIGFib3V0CisgKiBhIGxhcmdlIG51bWJlciBvZiBwYXJhbWV0ZXJzLgorICoKKyAqIFRoZSBAaGNsa190bnMgZmllbGQgaXMgYSB1c2VmdWwgY2FjaGUgZm9yIHRoZSBwYXJ0cyBvZiB0aGUgZHJpdmVycyB0aGF0CisgKiBuZWVkIHRvIGNhbGN1bGF0ZSBJTyB0aW1pbmdzIGFuZCBzdWNobGlrZS4KKyAqLworc3RydWN0IHMzY19mcmVxIHsKKwl1bnNpZ25lZCBsb25nCWZjbGs7CisJdW5zaWduZWQgbG9uZwlhcm1jbGs7CisJdW5zaWduZWQgbG9uZwloY2xrX3RuczsJLyogaW4gMTB0aHMgb2YgbnMgKi8KKwl1bnNpZ25lZCBsb25nCWhjbGs7CisJdW5zaWduZWQgbG9uZwlwY2xrOworfTsKKworLyoqCisgKiBzdHJ1Y3QgczNjX2NwdWZyZXFfZnJlcXMgLSBzM2MgY3B1ZnJlcSBub3RpZmljYXRpb24gaW5mb3JtYXRpb24uCisgKiBAZnJlcXM6IFRoZSBjcHVmcmVxIHNldHRpbmcgaW5mb3JtYXRpb24uCisgKiBAb2xkOiBUaGUgb2xkIGNsb2NrIHNldHRpbmdzLgorICogQG5ldzogVGhlIG5ldyBjbG9jayBzZXR0aW5ncy4KKyAqIEBwbGxfY2hhbmdpbmc6IFNldCBpZiB0aGUgUExMIGlzIGNoYW5naW5nLgorICoKKyAqIFdyYXBwZXIgJ3N0cnVjdCBjcHVmcmVxX2ZyZXFzJyBzbyB0aGF0IGFueSBkcml2ZXJzIHJlY2VpdmluZyB0aGUKKyAqIG5vdGlmaWNhdGlvbiBjYW4gdXNlIHRoaXMgaW5mb3JtYXRpb24gdGhhdCBpcyBub3QgcHJvdmlkZWQgYnkganVzdAorICogaGF2aW5nIHRoZSBjb3JlIGZyZXF1ZW5jeSBhbG9uZS4KKyAqCisgKiBUaGUgcGxsX2NoYW5naW5nIGZsYWcgaXMgdXNlZCB0byBpbmRpY2F0ZSBpZiB0aGUgUExMIGl0c2VsZiBpcworICogYmVpbmcgc2V0IGR1cmluZyB0aGlzIGNoYW5nZS4gVGhpcyBpcyBpbXBvcnRhbnQgYXMgdGhlIGNsb2NrcworICogd2lsbCB0ZW1wb3JhcmlseSBiZSBzZXQgdG8gdGhlIFhUQUwgY2xvY2sgZHVyaW5nIHRoaXMgdGltZSwgc28KKyAqIGRyaXZlcnMgbWF5IHdhbnQgdG8gY2xvc2UgZG93biB0aGVpciBvdXRwdXQgZHVyaW5nIHRoaXMgdGltZS4KKyAqCisgKiBOb3RlLCB0aGlzIGlzIG5vdCBiZWluZyB1c2VkIGJ5IGFueSBjdXJyZW50IGRyaXZlcnMgYW5kIHRoZXJlZm9yZQorICogbWF5IGJlIHJlbW92ZWQgaW4gdGhlIGZ1dHVyZS4KKyAqLworc3RydWN0IHMzY19jcHVmcmVxX2ZyZXFzIHsKKwlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcwlmcmVxczsKKwlzdHJ1Y3QgczNjX2ZyZXEJCW9sZDsKKwlzdHJ1Y3QgczNjX2ZyZXEJCW5ldzsKKworCXVuc2lnbmVkIGludAkJcGxsX2NoYW5naW5nOjE7Cit9OworCisjZGVmaW5lIHRvX3MzY19jcHVmcmVxKF9jZikgY29udGFpbmVyX29mKF9jZiwgc3RydWN0IHMzY19jcHVmcmVxX2ZyZXFzLCBmcmVxcykKKworLyoqCisgKiBzdHJ1Y3QgczNjX2Nsa2RpdnMgLSBjbG9jayBkaXZpc29yIGluZm9ybWF0aW9uCisgKiBAcF9kaXZpc29yOiBEaXZpc29yIGZyb20gRkNMSyB0byBQQ0xLLgorICogQGhfZGl2aXNvcjogRGl2aXNvciBmcm9tIEZDTEsgdG8gSENMSy4KKyAqIEBhcm1fZGl2aXNvcjogRGl2aXNvciBmcm9tIEZDTEsgdG8gQVJNQ0xLIChub3QgYWxsIENQVXMpLgorICogQGR2czogTm9uLXplcm8gaWYgdXNpbmcgRFZTIG1vZGUgZm9yIEFSTUNMSy4KKyAqCisgKiBEaXZpc29yIHNldHRpbmdzIGZvciB0aGUgY29yZSBjbG9ja3MuCisgKi8KK3N0cnVjdCBzM2NfY2xrZGl2cyB7CisJaW50CQlwX2Rpdmlzb3I7CisJaW50CQloX2Rpdmlzb3I7CisJaW50CQlhcm1fZGl2aXNvcjsKKwl1bnNpZ25lZCBjaGFyCWR2czsKK307CisKKyNkZWZpbmUgUExMVkFMKF9tLCBfcCwgX3MpICgoKF9tKSA8PCAxMikgfCAoKF9wKSA8PCA0KSB8IChfcykpCisKKy8qKgorICogc3RydWN0IHMzY19wbGx2YWwgLSBQTEwgdmFsdWUgZW50cnkuCisgKiBAZnJlcTogVGhlIGZyZXF1ZW5jeSBmb3IgdGhpcyBlbnRyeSBpbiBIei4KKyAqIEBwbGxfcmVnOiBUaGUgUExMIHJlZ2lzdGVyIHNldHRpbmcgZm9yIHRoaXMgUExMIHZhbHVlLgorICovCitzdHJ1Y3QgczNjX3BsbHZhbCB7CisJdW5zaWduZWQgbG9uZwkJZnJlcTsKKwl1bnNpZ25lZCBsb25nCQlwbGxfcmVnOworfTsKKworLyoqCisgKiBzdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQgLSBwZXItYm9hcmQgY3B1IGZyZXF1ZW5jeSBpbmZvcm1hdGluCisgKiBAcmVmcmVzaDogVGhlIFNEUkFNIHJlZnJlc2ggcGVyaW9kIGluIG5hbm9zZWNvbmRzLgorICogQGF1dG9faW86IFNldCBpZiB0aGUgSU8gdGltaW5nIHNldHRpbmdzIHNob3VsZCBiZSBnZW5lcmF0ZWQgZnJvbSB0aGUKKyAqCWluaXRpYWxpc2F0aW9uIHRpbWUgaGFyZHdhcmUgcmVnaXN0ZXJzLgorICogQG5lZWRfaW86IFNldCBpZiB0aGUgYm9hcmQgaGFzIGV4dGVybmFsIElPIG9uIGFueSBvZiB0aGUgY2hpcHNlbGVjdAorICoJbGluZXMgdGhhdCB3aWxsIHJlcXVpcmUgdGhlIGhhcmR3YXJlIHRpbWluZyByZWdpc3RlcnMgdG8gYmUKKyAqCXVwZGF0ZWQgb24gYSBjbG9jayBjaGFuZ2UuCisgKiBAbWF4OiBUaGUgbWF4aXVtIGZyZXF1ZW5jeSBsaW1pdHMgZm9yIHRoZSBzeXN0ZW0uIEFueSBmaWVsZCB0aGF0CisgKglpcyBsZWZ0IGF0IHplcm8gd2lsbCB1c2UgdGhlIENQVSdzIHNldHRpbmdzLgorICoKKyAqIFRoaXMgY29udGFpbnMgdGhlIGJvYXJkIHNwZWNpZmljIHNldHRpbmdzIHRoYXQgYWZmZWN0IGhvdyB0aGUgQ1BVCisgKiBkcml2ZXJzIGNob3NlIHNldHRpbmdzLiBUaGVzZSBpbmNsdWRlIHRoZSBtZW1vcnkgcmVmcmVzaCBhbmQgSU8KKyAqIHRpbWluZyBpbmZvcm1hdGlvbi4KKyAqCisgKiBSZWdpc3RyYXRpb24gZGVwZW5kcyBvbiB0aGUgZHJpdmVyIGJlaW5nIHVzZWQsIHRoZSBBUk1DTEsgb25seQorICogaW1wbGVtZW50YXRpb24gZG9lcyBub3QgY3VycmVudGx5IG5lZWQgdGhpcyBidXQgdGhlIG9sZGVyIHN0eWxlCisgKiBkcml2ZXIgcmVxdWlyZXMgdGhpcyB0byBiZSBhdmFpbGFibGUuCisgKi8KK3N0cnVjdCBzM2NfY3B1ZnJlcV9ib2FyZCB7CisJdW5zaWduZWQgaW50CXJlZnJlc2g7CisJdW5zaWduZWQgaW50CWF1dG9faW86MTsJLyogYXV0b21hdGljYWxseSBpbml0IGlvIHRpbWluZ3MuICovCisJdW5zaWduZWQgaW50CW5lZWRfaW86MTsJLyogc2V0IGlmIG5lZWRzIGlvIHRpbWluZyBzdXBwb3J0LiAqLworCisJLyogYW55IG5vbi16ZXJvIGZpZWxkIGluIGhlcmUgaXMgdGFrZW4gYXMgYW4gdXBwZXIgbGltaXQuICovCisJc3RydWN0IHMzY19mcmVxCW1heDsJLyogZnJlcXVlbmN5IGxpbWl0cyAqLworfTsKKworLyogVGhpbmdzIGRlcGVuZGluZyBvbiBmcmVxdWVuY3kgc2NhbGluZy4gKi8KKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVFfUzNDCisjZGVmaW5lIF9faW5pdF9vcl9jcHVmcmVxCisjZWxzZQorI2RlZmluZSBfX2luaXRfb3JfY3B1ZnJlcSBfX2luaXQKKyNlbmRpZgorCisvKiBCb2FyZCBmdW5jdGlvbnMgKi8KKworI2lmZGVmIENPTkZJR19DUFVfRlJFUV9TM0MKK2V4dGVybiBpbnQgczNjX2NwdWZyZXFfc2V0Ym9hcmQoc3RydWN0IHMzY19jcHVmcmVxX2JvYXJkICpib2FyZCk7CisjZWxzZQorCitzdGF0aWMgaW5saW5lIGludCBzM2NfY3B1ZnJlcV9zZXRib2FyZChzdHJ1Y3QgczNjX2NwdWZyZXFfYm9hcmQgKmJvYXJkKQoreworCXJldHVybiAwOworfQorI2VuZGlmICAvKiBDT05GSUdfQ1BVX0ZSRVFfUzNDICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2NwdS5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9jcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzE2YjRhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9jcHUuaApAQCAtMCwwICsxLDg0IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2NwdS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogSGVhZGVyIGZpbGUgZm9yIFMzQzI0WFggQ1BVIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworLyogdG9kbyAtIGZpeCB3aGVuIHJtayBjaGFuZ2VzIGlvZGVzY3MgdG8gdXNlIGB2b2lkIF9faW9tZW0gKmAgKi8KKworI2lmbmRlZiBfX1NBTVNVTkdfUExBVF9DUFVfSAorI2RlZmluZSBfX1NBTVNVTkdfUExBVF9DUFVfSAorCisjZGVmaW5lIElPREVTQ19FTlQoeCkgeyAodW5zaWduZWQgbG9uZylTM0MyNFhYX1ZBXyMjeCwgX19waHlzX3RvX3BmbihTM0MyNFhYX1BBXyMjeCksIFMzQzI0WFhfU1pfIyN4LCBNVF9ERVZJQ0UgfQorCisjaWZuZGVmIE1IWgorI2RlZmluZSBNSFogKDEwMDAqMTAwMCkKKyNlbmRpZgorCisjZGVmaW5lIHByaW50X21oeihtKSAoKG0pIC8gTUhaKSwgKCgobSkgLyAxMDAwKSAlIDEwMDApCisKKy8qIGZvcndhcmQgZGVjbGFyYXRpb24gKi8KK3N0cnVjdCBzM2MyNHh4X3VhcnRfcmVzb3VyY2VzOworc3RydWN0IHBsYXRmb3JtX2RldmljZTsKK3N0cnVjdCBzM2MyNDEwX3VhcnRjZmc7CitzdHJ1Y3QgbWFwX2Rlc2M7CisKKy8qIHBlci1jcHUgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb24gdGFibGUuICovCisKK3N0cnVjdCBjcHVfdGFibGUgeworCXVuc2lnbmVkIGxvbmcJaWRjb2RlOworCXVuc2lnbmVkIGxvbmcJaWRtYXNrOworCXZvaWQJCSgqbWFwX2lvKSh2b2lkKTsKKwl2b2lkCQkoKmluaXRfdWFydHMpKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKKwl2b2lkCQkoKmluaXRfY2xvY2tzKShpbnQgeHRhbCk7CisJaW50CQkoKmluaXQpKHZvaWQpOworCWNvbnN0IGNoYXIJKm5hbWU7Cit9OworCitleHRlcm4gdm9pZCBzM2NfaW5pdF9jcHUodW5zaWduZWQgbG9uZyBpZGNvZGUsCisJCQkgc3RydWN0IGNwdV90YWJsZSAqY3B1cywgdW5zaWduZWQgaW50IGNwdXRhYl9zaXplKTsKKworLyogY29yZSBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMgKi8KKworZXh0ZXJuIHZvaWQgczNjMjR4eF9pbml0X2lycSh2b2lkKTsKK2V4dGVybiB2b2lkIHMzYzY0eHhfaW5pdF9pcnEodTMyIHZpYzAsIHUzMiB2aWMxKTsKK2V4dGVybiB2b2lkIHM1cF9pbml0X2lycSh1MzIgKnZpYywgdTMyIG51bV92aWMpOworCitleHRlcm4gdm9pZCBzM2MyNHh4X2luaXRfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsIGludCBzaXplKTsKK2V4dGVybiB2b2lkIHMzYzY0eHhfaW5pdF9pbyhzdHJ1Y3QgbWFwX2Rlc2MgKm1hY2hfZGVzYywgaW50IHNpemUpOworZXh0ZXJuIHZvaWQgczVwX2luaXRfaW8oc3RydWN0IG1hcF9kZXNjICptYWNoX2Rlc2MsCisJCQlpbnQgc2l6ZSwgdm9pZCBfX2lvbWVtICpjcHVpZF9hZGRyKTsKKworZXh0ZXJuIHZvaWQgczNjMjR4eF9pbml0X3VhcnRzKHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKKworZXh0ZXJuIHZvaWQgczNjMjR4eF9pbml0X2Nsb2NrcyhpbnQgeHRhbCk7CisKK2V4dGVybiB2b2lkIHMzYzI0eHhfaW5pdF91YXJ0ZGV2cyhjaGFyICpuYW1lLAorCQkJCSAgc3RydWN0IHMzYzI0eHhfdWFydF9yZXNvdXJjZXMgKnJlcywKKwkJCQkgIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgKmNmZywgaW50IG5vKTsKKworLyogdGltZXIgZm9yIDI0MTAvMjQ0MCAqLworCitzdHJ1Y3Qgc3lzX3RpbWVyOworZXh0ZXJuIHN0cnVjdCBzeXNfdGltZXIgczNjMjR4eF90aW1lcjsKKworLyogc3lzdGVtIGRldmljZSBjbGFzc2VzICovCisKK2V4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0MTBfc3lzY2xhc3M7CitleHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBzM2MyNDEwYV9zeXNjbGFzczsKK2V4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0MTJfc3lzY2xhc3M7CitleHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBzM2MyNDQwX3N5c2NsYXNzOworZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgczNjMjQ0Ml9zeXNjbGFzczsKK2V4dGVybiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0NDNfc3lzY2xhc3M7CitleHRlcm4gc3RydWN0IHN5c2Rldl9jbGFzcyBzM2M2NDEwX3N5c2NsYXNzOworZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgczNjNjR4eF9zeXNjbGFzczsKKworZXh0ZXJuIHZvaWQgKCpzNXBjMXh4X2lkbGUpKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZGVidWctbWFjcm8uUyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZGVidWctbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzZlZmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsODcgQEAKKy8qIGFyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZGVidWctbWFjcm8uUworICoKKyAqIENvcHlyaWdodCAyMDA1LCAyMDA3IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KKworLyogVGhlIFM1UFYyMTAvUzVQQzExMCBhbmQgUzVQNjQ0MiBpbXBsZW1lbnRhdGlvbnMgYXJlIGFzIGJlbG93cy4gKi8KKworCS5tYWNybyBmaWZvX2xldmVsX3M1cHYyMTAgcmQsIHJ4CisJCWxkcglccmQsIFsgXHJ4LCAjIFMzQzI0MTBfVUZTVEFUIF0KKwkJYW5kCVxyZCwgXHJkLCAjUzVQVjIxMF9VRlNUQVRfVFhNQVNLCisJLmVuZG0KKworCS5tYWNybyAgZmlmb19mdWxsX3M1cHYyMTAgcmQsIHJ4CisJCWxkcglccmQsIFsgXHJ4LCAjIFMzQzI0MTBfVUZTVEFUIF0KKwkJdHN0CVxyZCwgI1M1UFYyMTBfVUZTVEFUX1RYRlVMTAorCS5lbmRtCisKKy8qIFRoZSBTM0MyNDQwIGltcGxlbWVudGF0aW9ucyBhcmUgdXNlZCBieSBkZWZhdWx0IGFzIHRoZXkgYXJlIHRoZQorICogbW9zdCB3aWRlbHkgcmUtdXNlZCAqLworCisJLm1hY3JvIGZpZm9fbGV2ZWxfczNjMjQ0MCByZCwgcngKKwkJbGRyCVxyZCwgWyBccngsICMgUzNDMjQxMF9VRlNUQVQgXQorCQlhbmQJXHJkLCBccmQsICNTM0MyNDQwX1VGU1RBVF9UWE1BU0sKKwkuZW5kbQorCisjaWZuZGVmIGZpZm9fbGV2ZWwKKyNkZWZpbmUgZmlmb19sZXZlbCBmaWZvX2xldmVsX3MzYzI0NDAKKyNlbmRpZgorCisJLm1hY3JvICBmaWZvX2Z1bGxfczNjMjQ0MCByZCwgcngKKwkJbGRyCVxyZCwgWyBccngsICMgUzNDMjQxMF9VRlNUQVQgXQorCQl0c3QJXHJkLCAjUzNDMjQ0MF9VRlNUQVRfVFhGVUxMCisJLmVuZG0KKworI2lmbmRlZiBmaWZvX2Z1bGwKKyNkZWZpbmUgZmlmb19mdWxsIGZpZm9fZnVsbF9zM2MyNDQwCisjZW5kaWYKKworCS5tYWNybwlzZW5kdWFydCxyZCxyeAorCQlzdHJiIAlccmQsIFtccngsICMgUzNDMjQxMF9VVFhIIF0KKwkuZW5kbQorCisJLm1hY3JvCWJ1c3l1YXJ0LCByZCwgcngKKwkJbGRyCVxyZCwgWyBccngsICMgUzNDMjQxMF9VRkNPTiBdCisJCXRzdAlccmQsICNTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFCUAgZmlmbyBlbmFibGVkPworCQliZXEJMTAwMWYJCQkJQAorCQlAIEZJRk8gZW5hYmxlZC4uLgorMTAwMzoKKwkJZmlmb19mdWxsIFxyZCwgXHJ4CisJCWJuZQkxMDAzYgorCQliCTEwMDJmCisKKzEwMDE6CisJCUAgYnVzeSB3YWl0aW5nIGZvciBub24gZmlmbworCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VUUlNUQVQgXQorCQl0c3QJXHJkLCAjUzNDMjQxMF9VVFJTVEFUX1RYRkUKKwkJYmVxCTEwMDFiCisKKzEwMDI6CQlAIGV4aXQgYnVzeXVhcnQKKwkuZW5kbQorCisJLm1hY3JvCXdhaXR1YXJ0LHJkLHJ4CisJCWxkcglccmQsIFsgXHJ4LCAjIFMzQzI0MTBfVUZDT04gXQorCQl0c3QJXHJkLCAjUzNDMjQxMF9VRkNPTl9GSUZPTU9ERQlAIGZpZm8gZW5hYmxlZD8KKwkJYmVxCTEwMDFmCQkJCUAKKwkJQCBGSUZPIGVuYWJsZWQuLi4KKzEwMDM6CisJCWZpZm9fbGV2ZWwgXHJkLCBccngKKwkJdGVxCVxyZCwgIzAKKwkJYm5lCTEwMDNiCisJCWIJMTAwMmYKKzEwMDE6CisJCUAgaWRsZSB3YWl0aW5nIGZvciBub24gZmlmbworCQlsZHIJXHJkLCBbIFxyeCwgIyBTM0MyNDEwX1VUUlNUQVQgXQorCQl0c3QJXHJkLCAjUzNDMjQxMF9VVFJTVEFUX1RYRkUKKwkJYmVxCTEwMDFiCisKKzEwMDI6CQlAIGV4aXQgYnVzeXVhcnQKKwkuZW5kbQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kZXZzLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2RldnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTZkMjQyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kZXZzLmgKQEAgLTAsMCArMSw3NCBAQAorLyogYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kZXZzLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCisgKiBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogSGVhZGVyIGZpbGUgZm9yIHMzYzI0MTAgc3RhbmRhcmQgcGxhdGZvcm0gZGV2aWNlcworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorCitzdHJ1Y3QgczNjMjR4eF91YXJ0X3Jlc291cmNlcyB7CisJc3RydWN0IHJlc291cmNlCQkqcmVzb3VyY2VzOworCXVuc2lnbmVkIGxvbmcJCSBucl9yZXNvdXJjZXM7Cit9OworCitleHRlcm4gc3RydWN0IHMzYzI0eHhfdWFydF9yZXNvdXJjZXMgczNjMjQxMF91YXJ0X3Jlc291cmNlc1tdOworZXh0ZXJuIHN0cnVjdCBzM2MyNHh4X3VhcnRfcmVzb3VyY2VzIHMzYzY0eHhfdWFydF9yZXNvdXJjZXNbXTsKK2V4dGVybiBzdHJ1Y3QgczNjMjR4eF91YXJ0X3Jlc291cmNlcyBzNXBfdWFydF9yZXNvdXJjZXNbXTsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnMzYzI0eHhfdWFydF9kZXZzW107CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqczNjMjR4eF91YXJ0X3NyY1tdOworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3RpbWVyW107CisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzY0eHhfZGV2aWNlX2lpczA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2M2NHh4X2RldmljZV9paXMxOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjNjR4eF9kZXZpY2VfaWlzdjQ7CisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzYzY0eHhfZGV2aWNlX3NwaTA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2M2NHh4X2RldmljZV9zcGkxOworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2M2NHh4X2RldmljZV9wY20wOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjNjR4eF9kZXZpY2VfcGNtMTsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjNjR4eF9kZXZpY2VfYWM5NzsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV90czsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9mYjsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2Vfb2hjaTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfbGNkOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV93ZHQ7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2kyYzA7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2kyYzE7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3J0YzsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfYWRjOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9zZGk7CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2lpczsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfaHdtb247CitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2hzbW1jMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfaHNtbWMxOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9oc21tYzI7CisKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2Vfc3BpMDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2Vfc3BpMTsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9od21vbjsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9uYW5kOworCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX3VzYmdhZGdldDsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHMzY19kZXZpY2VfdXNiX2hzb3RnOworCisvKiBzM2MyNDQwIHNwZWNpZmljIGRldmljZXMgKi8KKworI2lmZGVmIENPTkZJR19DUFVfUzNDMjQ0MAorCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSBzM2NfZGV2aWNlX2NhbWlmOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgczNjX2RldmljZV9hYzk3OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9kbWEtY29yZS5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kbWEtY29yZS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZG1hLWNvcmUuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kbWEtY29yZS5oCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2RtYS1zM2MyNHh4LmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2RtYS1zM2MyNHh4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM2ZDVhYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZG1hLXMzYzI0eHguaApAQCAtMCwwICsxLDg0IEBACisvKiBsaW51eC9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2RtYS1zM2MyNHh4LmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogU2Ftc3VuZyBTM0MyNFhYIERNQSBzdXBwb3J0IC0gcGVyIFNvQyBmdW5jdGlvbnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPHBsYXQvZG1hLWNvcmUuaD4KKworZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgZG1hX3N5c2NsYXNzOworZXh0ZXJuIHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuIHMzYzI0MTBfY2hhbnNbUzNDX0RNQV9DSEFOTkVMU107CisKKyNkZWZpbmUgRE1BX0NIX1ZBTElECQkoMTw8MzEpCisjZGVmaW5lIERNQV9DSF9ORVZFUgkJKDE8PDMwKQorCitzdHJ1Y3QgczNjMjR4eF9kbWFfYWRkciB7CisJdW5zaWduZWQgbG9uZwkJZnJvbTsKKwl1bnNpZ25lZCBsb25nCQl0bzsKK307CisKKy8qIHN0cnVjdCBzM2MyNHh4X2RtYV9tYXAKKyAqCisgKiB0aGlzIGhvbGRzIHRoZSBtYXBwaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgY2hhbm5lbCBzZWxlY3RlZAorICogdG8gYmUgY29ubmVjdGVkIHRvIHRoZSBzcGVjaWZpZWQgZGV2aWNlCisqLworCitzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwIHsKKwljb25zdCBjaGFyCQkqbmFtZTsKKwlzdHJ1Y3QgczNjMjR4eF9kbWFfYWRkciAgaHdfYWRkcjsKKworCXVuc2lnbmVkIGxvbmcJCSBjaGFubmVsc1tTM0NfRE1BX0NIQU5ORUxTXTsKKwl1bnNpZ25lZCBsb25nCQkgY2hhbm5lbHNfcnhbUzNDX0RNQV9DSEFOTkVMU107Cit9OworCitzdHJ1Y3QgczNjMjR4eF9kbWFfc2VsZWN0aW9uIHsKKwlzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwCSptYXA7CisJdW5zaWduZWQgbG9uZwkJIG1hcF9zaXplOworCXVuc2lnbmVkIGxvbmcJCSBkY29uX21hc2s7CisKKwl2b2lkCSgqc2VsZWN0KShzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiwKKwkJCSAgc3RydWN0IHMzYzI0eHhfZG1hX21hcCAqbWFwKTsKKworCXZvaWQJKCpkaXJlY3Rpb24pKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuLAorCQkJICAgICBzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwICptYXAsCisJCQkgICAgIGVudW0gczNjMjQxMF9kbWFzcmMgZGlyKTsKK307CisKK2V4dGVybiBpbnQgczNjMjR4eF9kbWFfaW5pdF9tYXAoc3RydWN0IHMzYzI0eHhfZG1hX3NlbGVjdGlvbiAqc2VsKTsKKworLyogc3RydWN0IHMzYzI0eHhfZG1hX29yZGVyX2NoCisgKgorICogY2hhbm5lbCBtYXAgZm9yIG9uZSBvZiB0aGUgYGVudW0gZG1hX2NoYCBkbWEgY2hhbm5lbHMuIHRoZSBsaXN0CisgKiBlbnRyeSBjb250YWlucyBhIHNldCBvZiBsb3ctbGV2ZWwgY2hhbm5lbCBudW1iZXJzLCBvcnJlZCB3aXRoCisgKiBETUFfQ0hfVkFMSUQsIHdoaWNoIGFyZSBjaGVja2VkIGluIHRoZSBvcmRlciBpbiB0aGUgYXJyYXkuCisqLworCitzdHJ1Y3QgczNjMjR4eF9kbWFfb3JkZXJfY2ggeworCXVuc2lnbmVkIGludAlsaXN0W1MzQ19ETUFfQ0hBTk5FTFNdOwkvKiBsaXN0IG9mIGNoYW5uZWxzICovCisJdW5zaWduZWQgaW50CWZsYWdzOwkJCQkvKiBmbGFncyAqLworfTsKKworLyogc3RydWN0IHMzYzI0eHhfZG1hX29yZGVyCisgKgorICogaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgZWl0aGVyIHRoZSBjb3JlIG9yIHRoZSBib2FyZCB0byBnaXZlIHRoZQorICogZG1hIHN5c3RlbSBhIGhpbnQgb24gaG93IHRvIGFsbG9jYXRlIGNoYW5uZWxzCisqLworCitzdHJ1Y3QgczNjMjR4eF9kbWFfb3JkZXIgeworCXN0cnVjdCBzM2MyNHh4X2RtYV9vcmRlcl9jaAljaGFubmVsc1tETUFDSF9NQVhdOworfTsKKworZXh0ZXJuIGludCBzM2MyNHh4X2RtYV9vcmRlcl9zZXQoc3RydWN0IHMzYzI0eHhfZG1hX29yZGVyICptYXApOworCisvKiBETUEgaW5pdCBjb2RlLCBjYWxsZWQgZnJvbSB0aGUgY3B1IHN1cHBvcnQgY29kZSAqLworCitleHRlcm4gaW50IHMzYzI0MTBfZG1hX2luaXQodm9pZCk7CisKK2V4dGVybiBpbnQgczNjMjR4eF9kbWFfaW5pdCh1bnNpZ25lZCBpbnQgY2hhbm5lbHMsIHVuc2lnbmVkIGludCBpcnEsCisJCQkgICAgdW5zaWduZWQgaW50IHN0cmlkZSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2RtYS5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTg0ZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kbWEuaApAQCAtMCwwICsxLDEyNyBAQAorLyogYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9kbWEuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFNhbXN1bmcgUzNDIERNQSBzdXBwb3J0CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKK2VudW0gczNjMjQxMF9kbWFfYnVmZnJlc3VsdCB7CisJUzNDMjQxMF9SRVNfT0ssCisJUzNDMjQxMF9SRVNfRVJSLAorCVMzQzI0MTBfUkVTX0FCT1JUCit9OworCitlbnVtIHMzYzI0MTBfZG1hc3JjIHsKKwlTM0MyNDEwX0RNQVNSQ19IVywJCS8qIHNvdXJjZSBpcyBtZW1vcnkgKi8KKwlTM0MyNDEwX0RNQVNSQ19NRU0JCS8qIHNvdXJjZSBpcyBoYXJkd2FyZSAqLworfTsKKworLyogZW51bSBzM2MyNDEwX2NoYW5fb3AKKyAqCisgKiBvcGVyYXRpb24gY29kZXMgcGFzc2VkIHRvIHRoZSBETUEgY29kZSBieSB0aGUgdXNlciwgYW5kIGFsc28gdXNlZAorICogdG8gaW5mb3JtIHRoZSBjdXJyZW50IGNoYW5uZWwgb3duZXIgb2YgYW55IGNoYW5nZXMgdG8gdGhlIHN5c3RlbSBzdGF0ZQorKi8KKworZW51bSBzM2MyNDEwX2NoYW5fb3AgeworCVMzQzI0MTBfRE1BT1BfU1RBUlQsCisJUzNDMjQxMF9ETUFPUF9TVE9QLAorCVMzQzI0MTBfRE1BT1BfUEFVU0UsCisJUzNDMjQxMF9ETUFPUF9SRVNVTUUsCisJUzNDMjQxMF9ETUFPUF9GTFVTSCwKKwlTM0MyNDEwX0RNQU9QX1RJTUVPVVQsCQkvKiBpbnRlcm5hbCBzaWduYWwgdG8gaGFuZGxlciAqLworCVMzQzI0MTBfRE1BT1BfU1RBUlRFRCwJCS8qIGluZGljYXRlIGNoYW5uZWwgc3RhcnRlZCAqLworfTsKKworc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCB7CisJY2hhciAgICAgICAgICAgICAgICAqbmFtZTsKK307CisKK3N0cnVjdCBzM2MyNDEwX2RtYV9jaGFuOworCisvKiBzM2MyNDEwX2RtYV9jYmZuX3QKKyAqCisgKiBidWZmZXIgY2FsbGJhY2sgcm91dGluZSB0eXBlCisqLworCit0eXBlZGVmIHZvaWQgKCpzM2MyNDEwX2RtYV9jYmZuX3QpKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICosCisJCQkJICAgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKwkJCQkgICBlbnVtIHMzYzI0MTBfZG1hX2J1ZmZyZXN1bHQgcmVzdWx0KTsKKwordHlwZWRlZiBpbnQgICgqczNjMjQxMF9kbWFfb3Bmbl90KShzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqLAorCQkJCSAgIGVudW0gczNjMjQxMF9jaGFuX29wICk7CisKKworCisvKiBzM2MyNDEwX2RtYV9yZXF1ZXN0CisgKgorICogcmVxdWVzdCBhIGRtYSBjaGFubmVsIGV4Y2x1c2l2bGV5CisqLworCitleHRlcm4gaW50IHMzYzI0MTBfZG1hX3JlcXVlc3QodW5zaWduZWQgaW50IGNoYW5uZWwsCisJCQkgICAgICAgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCAqLCB2b2lkICpkZXYpOworCisKKy8qIHMzYzI0MTBfZG1hX2N0cmwKKyAqCisgKiBjaGFuZ2UgdGhlIHN0YXRlIG9mIHRoZSBkbWEgY2hhbm5lbAorKi8KKworZXh0ZXJuIGludCBzM2MyNDEwX2RtYV9jdHJsKHVuc2lnbmVkIGludCBjaGFubmVsLCBlbnVtIHMzYzI0MTBfY2hhbl9vcCBvcCk7CisKKy8qIHMzYzI0MTBfZG1hX3NldGZsYWdzCisgKgorICogc2V0IHRoZSBjaGFubmVsJ3MgZmxhZ3MgdG8gYSBnaXZlbiBzdGF0ZQorKi8KKworZXh0ZXJuIGludCBzM2MyNDEwX2RtYV9zZXRmbGFncyh1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwkJCQl1bnNpZ25lZCBpbnQgZmxhZ3MpOworCisvKiBzM2MyNDEwX2RtYV9mcmVlCisgKgorICogZnJlZSB0aGUgZG1hIGNoYW5uZWwgKHdpbGwgYWxzbyBhYm9ydCBhbnkgb3V0c3RhbmRpbmcgb3BlcmF0aW9ucykKKyovCisKK2V4dGVybiBpbnQgczNjMjQxMF9kbWFfZnJlZSh1bnNpZ25lZCBpbnQgY2hhbm5lbCwgc3RydWN0IHMzYzI0MTBfZG1hX2NsaWVudCAqKTsKKworLyogczNjMjQxMF9kbWFfZW5xdWV1ZQorICoKKyAqIHBsYWNlIHRoZSBnaXZlbiBidWZmZXIgb250byB0aGUgcXVldWUgb2Ygb3BlcmF0aW9ucyBmb3IgdGhlIGNoYW5uZWwuCisgKiBUaGUgYnVmZmVyIG11c3QgYmUgYWxsb2NhdGVkIGZyb20gZG1hIGNvaGVyZW50IG1lbW9yeSwgb3IgdGhlIERjYWNoZS9XQgorICogZHJhaW5lZCBiZWZvcmUgdGhlIGJ1ZmZlciBpcyBnaXZlbiB0byB0aGUgRE1BIHN5c3RlbS4KKyovCisKK2V4dGVybiBpbnQgczNjMjQxMF9kbWFfZW5xdWV1ZSh1bnNpZ25lZCBpbnQgY2hhbm5lbCwgdm9pZCAqaWQsCisJCQkgICAgICAgZG1hX2FkZHJfdCBkYXRhLCBpbnQgc2l6ZSk7CisKKy8qIHMzYzI0MTBfZG1hX2NvbmZpZworICoKKyAqIGNvbmZpZ3VyZSB0aGUgZG1hIGNoYW5uZWwKKyovCisKK2V4dGVybiBpbnQgczNjMjQxMF9kbWFfY29uZmlnKHVuc2lnbmVkIGludCBjaGFubmVsLCBpbnQgeGZlcnVuaXQpOworCisvKiBzM2MyNDEwX2RtYV9kZXZjb25maWcKKyAqCisgKiBjb25maWd1cmUgdGhlIGRldmljZSB3ZSdyZSB0YWxraW5nIHRvCisqLworCitleHRlcm4gaW50IHMzYzI0MTBfZG1hX2RldmNvbmZpZyhpbnQgY2hhbm5lbCwgZW51bSBzM2MyNDEwX2RtYXNyYyBzb3VyY2UsCisJCQkJIHVuc2lnbmVkIGxvbmcgZGV2YWRkcik7CisKKy8qIHMzYzI0MTBfZG1hX2dldHBvc2l0aW9uCisgKgorICogZ2V0IHRoZSBwb3NpdGlvbiB0aGF0IHRoZSBkbWEgdHJhbnNmZXIgaXMgY3VycmVudGx5IGF0CisqLworCitleHRlcm4gaW50IHMzYzI0MTBfZG1hX2dldHBvc2l0aW9uKHVuc2lnbmVkIGludCBjaGFubmVsLAorCQkJCSAgIGRtYV9hZGRyX3QgKnNyYywgZG1hX2FkZHJfdCAqZGVzdCk7CisKK2V4dGVybiBpbnQgczNjMjQxMF9kbWFfc2V0X29wZm4odW5zaWduZWQgaW50LCBzM2MyNDEwX2RtYV9vcGZuX3QgcnRuKTsKK2V4dGVybiBpbnQgczNjMjQxMF9kbWFfc2V0X2J1ZmZkb25lX2ZuKHVuc2lnbmVkIGludCwgczNjMjQxMF9kbWFfY2Jmbl90IHJ0bik7CisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9mYi5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9mYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmYzAxYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2ZiLmgKQEAgLTAsMCArMSw4MCBAQAorLyogYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9mYi5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MgLSBGQiBwbGF0Zm9ybSBkYXRhIGRlZmluaXRpb25zCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpZm5kZWYgX19QTEFUX1MzQ19GQl9ICisjZGVmaW5lIF9fUExBVF9TM0NfRkJfSCBfX0ZJTEVfXworCisvKioKKyAqIHN0cnVjdCBzM2NfZmJfcGRfd2luIC0gcGVyIHdpbmRvdyBzZXR1cCBkYXRhCisgKiBAd2luX21vZGU6IFRoZSBkaXNwbGF5IHBhcmFtZXRlcnMgdG8gaW5pdGlhbGlzZSAobm90IGZvciB3aW5kb3cgMCkKKyAqIEB2aXJ0dWFsX3g6IFRoZSB2aXJ0dWFsIFggc2l6ZS4KKyAqIEB2aXJ0dWFsX3k6IFRoZSB2aXJ0dWFsIFkgc2l6ZS4KKyAqLworc3RydWN0IHMzY19mYl9wZF93aW4geworCXN0cnVjdCBmYl92aWRlb21vZGUJd2luX21vZGU7CisKKwl1bnNpZ25lZCBzaG9ydAkJZGVmYXVsdF9icHA7CisJdW5zaWduZWQgc2hvcnQJCW1heF9icHA7CisJdW5zaWduZWQgc2hvcnQJCXZpcnR1YWxfeDsKKwl1bnNpZ25lZCBzaG9ydAkJdmlydHVhbF95OworfTsKKworLyoqCisgKiBzdHJ1Y3QgczNjX2ZiX3BsYXRkYXRhIC0gIFMzQyBkcml2ZXIgcGxhdGZvcm0gc3BlY2lmaWMgaW5mb3JtYXRpb24KKyAqIEBzZXR1cF9ncGlvOiBTZXR1cCB0aGUgZXh0ZXJuYWwgR1BJTyBwaW5zIHRvIHRoZSByaWdodCBzdGF0ZSB0byB0cmFuc2ZlcgorICoJCXRoZSBkYXRhIGZyb20gdGhlIGRpc3BsYXkgc3lzdGVtIHRvIHRoZSBjb25uZWN0ZWQgZGlzcGxheQorICoJCWRldmljZS4KKyAqIEB2aWRjb24wOiBUaGUgYmFzZSB2aWRjb24wIHZhbHVlcyB0byBjb250cm9sIHRoZSBwYW5lbCBkYXRhIGZvcm1hdC4KKyAqIEB2aWRjb24xOiBUaGUgYmFzZSB2aWRjb24xIHZhbHVlcyB0byBjb250cm9sIHRoZSBwYW5lbCBkYXRhIG91dHB1dC4KKyAqIEB3aW46IFRoZSBzZXR1cCBkYXRhIGZvciBlYWNoIGhhcmR3YXJlIHdpbmRvdywgb3IgTlVMTCBmb3IgdW51c2VkLgorICogQGRpc3BsYXlfbW9kZTogVGhlIExDRCBvdXRwdXQgZGlzcGxheSBtb2RlLgorICoKKyAqIFRoZSBwbGF0Zm9ybSBkYXRhIHN1cHBsaWVzIHRoZSB2aWRlbyBkcml2ZXIgd2l0aCBhbGwgdGhlIGluZm9ybWF0aW9uCisgKiBpdCByZXF1aXJlcyB0byB3b3JrIHdpdGggdGhlIGRpc3BsYXkocykgYXR0YWNoZWQgdG8gdGhlIG1hY2hpbmUuIEl0CisgKiBjb250cm9scyB0aGUgaW5pdGlhbCBtb2RlLCB0aGUgbnVtYmVyIG9mIGRpc3BsYXkgd2luZG93cyAoMCBpcyBhbHdheXMKKyAqIHRoZSBiYXNlIGZyYW1lYnVmZmVyKSB0aGF0IGFyZSBpbml0aWFsaXNlZCBldGMuCisgKgorICovCitzdHJ1Y3QgczNjX2ZiX3BsYXRkYXRhIHsKKwl2b2lkCSgqc2V0dXBfZ3Bpbykodm9pZCk7CisKKwlzdHJ1Y3QgczNjX2ZiX3BkX3dpbgkqd2luW1MzQ19GQl9NQVhfV0lOXTsKKworCXUzMgkJCSB2aWRjb24wOworCXUzMgkJCSB2aWRjb24xOworfTsKKworLyoqCisgKiBzM2NfZmJfc2V0X3BsYXRkYXRhKCkgLSBTZXR1cCB0aGUgRkIgZGV2aWNlIHdpdGggcGxhdGZvcm0gZGF0YS4KKyAqIEBwZDogVGhlIHBsYXRmb3JtIGRhdGEgdG8gc2V0LiBUaGUgZGF0YSBpcyBjb3BpZWQgZnJvbSB0aGUgcGFzc2VkIHN0cnVjdHVyZQorICogICAgICBzbyB0aGUgbWFjaGluZSBkYXRhIGNhbiBtYXJrIHRoZSBkYXRhIF9faW5pdGRhdGEgc28gdGhhdCBhbnkgdW51c2VkCisgKiAgICAgIG1hY2hpbmVzIHdpbGwgZW5kIHVwIGR1bXBpbmcgdGhlaXIgZGF0YSBhdCBydW50aW1lLgorICovCitleHRlcm4gdm9pZCBzM2NfZmJfc2V0X3BsYXRkYXRhKHN0cnVjdCBzM2NfZmJfcGxhdGRhdGEgKnBkKTsKKworLyoqCisgKiBzM2M2NHh4X2ZiX2dwaW9fc2V0dXBfMjRicHAoKSAtIFMzQzY0WFggc2V0dXAgZnVuY3Rpb24gZm9yIDI0YnBwIExDRAorICoKKyAqIEluaXRpYWxpc2UgdGhlIEdQSU8gZm9yIGFuIDI0YnBwIExDRCBkaXNwbGF5IG9uIHRoZSBSR0IgaW50ZXJmYWNlLgorICovCitleHRlcm4gdm9pZCBzM2M2NHh4X2ZiX2dwaW9fc2V0dXBfMjRicHAodm9pZCk7CisKKy8qKgorICogczVwYzEwMF9mYl9ncGlvX3NldHVwXzI0YnBwKCkgLSBTNVBDMTAwIHNldHVwIGZ1bmN0aW9uIGZvciAyNGJwcCBMQ0QKKyAqCisgKiBJbml0aWFsaXNlIHRoZSBHUElPIGZvciBhbiAyNGJwcCBMQ0QgZGlzcGxheSBvbiB0aGUgUkdCIGludGVyZmFjZS4KKyAqLworZXh0ZXJuIHZvaWQgczVwYzEwMF9mYl9ncGlvX3NldHVwXzI0YnBwKHZvaWQpOworCisjZW5kaWYgLyogX19QTEFUX1MzQ19GQl9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2dwaW8tY2ZnLWhlbHBlcnMuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZ3Bpby1jZmctaGVscGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkYTE5ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2dwaW8tY2ZnLWhlbHBlcnMuaApAQCAtMCwwICsxLDE3NiBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2dwaW8tY2ZnLWhlbHBlci5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MgUGxhdGZvcm0gLSBHUElPIHBpbiBjb25maWd1cmF0aW9uIGhlbHBlciBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisvKiBUaGlzIGlzIG1lYW50IGZvciBjb3JlIGNwdSBzdXBwb3J0LCBtYWNoaW5lIG9yIG90aGVyIGRyaXZlciBmaWxlcworICogc2hvdWxkIG5vdCBiZSBpbmNsdWRpbmcgdGhpcyBoZWFkZXIuCisgKi8KKworI2lmbmRlZiBfX1BMQVRfR1BJT19DRkdfSEVMUEVSU19ICisjZGVmaW5lIF9fUExBVF9HUElPX0NGR19IRUxQRVJTX0ggX19GSUxFX18KKworLyogQXMgYSBub3RlLCBhbGwgZ3BpbyBjb25maWd1cmF0aW9uIGZ1bmN0aW9ucyBhcmUgZW50ZXJlZCBleGNsdXNpdmVseSwgZWl0aGVyCisgKiB3aXRoIHRoZSByZWxldmFudCBsb2NrIGhlbGQgb3IgdGhlIHN5c3RlbSBwcmV2ZW50ZWQgZnJvbSBkb2luZyBhbnl0aGluZyBlbHNlCisgKiBieSBkaXNhYmxpbmcgaW50ZXJydXB0cy4KKyovCisKK3N0YXRpYyBpbmxpbmUgaW50IHMzY19ncGlvX2RvX3NldGNmZyhzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBvZmYsIHVuc2lnbmVkIGludCBjb25maWcpCit7CisJcmV0dXJuIChjaGlwLT5jb25maWctPnNldF9jb25maWcpKGNoaXAsIG9mZiwgY29uZmlnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgczNjX2dwaW9fZG9fc2V0cHVsbChzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgb2ZmLCBzM2NfZ3Bpb19wdWxsX3QgcHVsbCkKK3sKKwlyZXR1cm4gKGNoaXAtPmNvbmZpZy0+c2V0X3B1bGwpKGNoaXAsIG9mZiwgcHVsbCk7Cit9CisKKy8qKgorICogczNjX2dwaW9fc2V0Y2ZnX3MzYzI0eHggLSBTM0MyNFhYIHN0eWxlIEdQSU8gY29uZmlndXJhdGlvbi4KKyAqIEBjaGlwOiBUaGUgZ3BpbyBjaGlwIHRoYXQgaXMgYmVpbmcgY29uZmlndXJlZC4KKyAqIEBvZmY6IFRoZSBvZmZzZXQgZm9yIHRoZSBHUElPIGJlaW5nIGNvbmZpZ3VyZWQuCisgKiBAY2ZnOiBUaGUgY29uZmlndXJhdGlvbiB2YWx1ZSB0byBzZXQuCisgKgorICogVGhpcyBoZWxwZXIgZGVhbCB3aXRoIHRoZSBHUElPIGNhc2VzIHdoZXJlIHRoZSBjb250cm9sIHJlZ2lzdGVyCisgKiBoYXMgdHdvIGJpdHMgb2YgY29uZmlndXJhdGlvbiBwZXIgZ3Bpbywgd2hpY2ggaGF2ZSB0aGUgZm9sbG93aW5nCisgKiBmdW5jdGlvbnM6CisgKgkwMCA9IGlucHV0CisgKgkwMSA9IG91dHB1dAorICoJMXggPSBzcGVjaWFsIGZ1bmN0aW9uCisqLworZXh0ZXJuIGludCBzM2NfZ3Bpb19zZXRjZmdfczNjMjR4eChzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgb2ZmLCB1bnNpZ25lZCBpbnQgY2ZnKTsKKworLyoqCisgKiBzM2NfZ3Bpb19zZXRjZmdfczNjMjR4eF9hIC0gUzNDMjRYWCBzdHlsZSBHUElPIGNvbmZpZ3VyYXRpb24gKEJhbmsgQSkKKyAqIEBjaGlwOiBUaGUgZ3BpbyBjaGlwIHRoYXQgaXMgYmVpbmcgY29uZmlndXJlZC4KKyAqIEBvZmY6IFRoZSBvZmZzZXQgZm9yIHRoZSBHUElPIGJlaW5nIGNvbmZpZ3VyZWQuCisgKiBAY2ZnOiBUaGUgY29uZmlndXJhdGlvbiB2YWx1ZSB0byBzZXQuCisgKgorICogVGhpcyBoZWxwZXIgZGVhbCB3aXRoIHRoZSBHUElPIGNhc2VzIHdoZXJlIHRoZSBjb250cm9sIHJlZ2lzdGVyCisgKiBoYXMgb25lIGJpdCBvZiBjb25maWd1cmF0aW9uIGZvciB0aGUgZ3Bpbywgd2hlcmUgc2V0dGluZyB0aGUgYml0CisgKiBtZWFucyB0aGUgcGluIGlzIGluIHNwZWNpYWwgZnVuY3Rpb24gbW9kZSBhbmQgdW5zZXQgbWVhbnMgb3V0cHV0LgorKi8KK2V4dGVybiBpbnQgczNjX2dwaW9fc2V0Y2ZnX3MzYzI0eHhfYShzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBvZmYsIHVuc2lnbmVkIGludCBjZmcpOworCisvKioKKyAqIHMzY19ncGlvX3NldGNmZ19zM2M2NHh4XzRiaXQgLSBTM0M2NFhYIDRiaXQgc2luZ2xlIHJlZ2lzdGVyIEdQSU8gY29uZmlnLgorICogQGNoaXA6IFRoZSBncGlvIGNoaXAgdGhhdCBpcyBiZWluZyBjb25maWd1cmVkLgorICogQG9mZjogVGhlIG9mZnNldCBmb3IgdGhlIEdQSU8gYmVpbmcgY29uZmlndXJlZC4KKyAqIEBjZmc6IFRoZSBjb25maWd1cmF0aW9uIHZhbHVlIHRvIHNldC4KKyAqCisgKiBUaGlzIGhlbHBlciBkZWFsIHdpdGggdGhlIEdQSU8gY2FzZXMgd2hlcmUgdGhlIGNvbnRyb2wgcmVnaXN0ZXIgaGFzIDQgYml0cworICogb2YgY29udHJvbCBwZXIgR1BJTywgZ2VuZXJhbGx5IGluIHRoZSBmb3JtIG9mOgorICoJMDAwMCA9IElucHV0CisgKgkwMDAxID0gT3V0cHV0CisgKglvdGhlcnMgPSBTcGVjaWFsIGZ1bmN0aW9ucyAoZGVwZW5kYW50IG9uIGJhbmspCisgKgorICogTm90ZSwgc2luY2UgdGhlIGNvZGUgdG8gZGVhbCB3aXRoIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGFyZSB0d28gY29udHJvbAorICogcmVnaXN0ZXJzIGluc3RlYWQgb2Ygb25lLCB3ZSBkbyBub3QgaGF2ZSBhIHNlcGFyYXRlIHNldCBvZiBmdW5jdGlvbnMgZm9yCisgKiBlYWNoIGNhc2UuCisqLworZXh0ZXJuIGludCBzM2NfZ3Bpb19zZXRjZmdfczNjNjR4eF80Yml0KHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAorCQkJCQl1bnNpZ25lZCBpbnQgb2ZmLCB1bnNpZ25lZCBpbnQgY2ZnKTsKKworCisvKiBQdWxsLXt1cCxkb3dufSByZXNpc3RvciBjb250cm9scy4KKyAqCisgKiBTM0MyNDEwLFMzQzI0NDAsUzNDMjRBMCA9IFB1bGwtVVAsCisgKiBTM0MyNDEyLFMzQzI0MTMgPSBQdWxsLURvd24KKyAqIFMzQzY0MDAsUzNDNjQxMCA9IFB1bGwtQm90aCBbTm9uZSxEb3duLFVwLFVuZGVmXQorICogUzNDMjQ0MyA9IFB1bGwtQm90aCBbbm90IHNhbWUgYXMgUzNDNjQwMF0KKyAqLworCisvKioKKyAqIHMzY19ncGlvX3NldHB1bGxfMXVwKCkgLSBQdWxsIGNvbmZpZ3VyYXRpb24gZm9yIGNob2ljZSBvZiB1cCBvciBub25lLgorICogQGNoaXA6IFRoZSBncGlvIGNoaXAgdGhhdCBpcyBiZWluZyBjb25maWd1cmVkLgorICogQG9mZjogVGhlIG9mZnNldCBmb3IgdGhlIEdQSU8gYmVpbmcgY29uZmlndXJlZC4KKyAqIEBwYXJhbTogcHVsbDogVGhlIHB1bGwgbW9kZSBiZWluZyByZXF1ZXN0ZWQuCisgKgorICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBHUElPcyB3aXRoIG9uZQorICogYml0IGNvbmZpZ3VyaW5nIHRoZSBwcmVzZW5jZSBvZiBhIHB1bGwtdXAgcmVzaXN0b3IuCisgKi8KK2V4dGVybiBpbnQgczNjX2dwaW9fc2V0cHVsbF8xdXAoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCisJCQkJdW5zaWduZWQgaW50IG9mZiwgczNjX2dwaW9fcHVsbF90IHB1bGwpOworCisvKioKKyAqIHMzY19ncGlvX3NldHB1bGxfMWRvd24oKSAtIFB1bGwgY29uZmlndXJhdGlvbiBmb3IgY2hvaWNlIG9mIGRvd24gb3Igbm9uZQorICogQGNoaXA6IFRoZSBncGlvIGNoaXAgdGhhdCBpcyBiZWluZyBjb25maWd1cmVkCisgKiBAb2ZmOiBUaGUgb2Zmc2V0IGZvciB0aGUgR1BJTyBiZWluZyBjb25maWd1cmVkCisgKiBAcGFyYW06IHB1bGw6IFRoZSBwdWxsIG1vZGUgYmVpbmcgcmVxdWVzdGVkCisgKgorICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBHUElPcyB3aXRoIG9uZQorICogYml0IGNvbmZpZ3VyaW5nIHRoZSBwcmVzZW5jZSBvZiBhIHB1bGwtZG93biByZXNpc3Rvci4KKyAqLworZXh0ZXJuIGludCBzM2NfZ3Bpb19zZXRwdWxsXzFkb3duKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgdW5zaWduZWQgaW50IG9mZiwgczNjX2dwaW9fcHVsbF90IHB1bGwpOworCisvKioKKyAqIHMzY19ncGlvX3NldHB1bGxfdXBvd24oKSAtIFB1bGwgY29uZmlndXJhdGlvbiBmb3IgY2hvaWNlIG9mIHVwLCBkb3duIG9yIG5vbmUKKyAqIEBjaGlwOiBUaGUgZ3BpbyBjaGlwIHRoYXQgaXMgYmVpbmcgY29uZmlndXJlZC4KKyAqIEBvZmY6IFRoZSBvZmZzZXQgZm9yIHRoZSBHUElPIGJlaW5nIGNvbmZpZ3VyZWQuCisgKiBAcGFyYW06IHB1bGw6IFRoZSBwdWxsIG1vZGUgYmVpbmcgcmVxdWVzdGVkLgorICoKKyAqIFRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoZSBjYXNlIHdoZXJlIHdlIGhhdmUgR1BJT3Mgd2l0aCB0d28KKyAqIGJpdHMgY29uZmlndXJpbmcgdGhlIHByZXNlbmNlIG9mIGEgcHVsbCByZXNpc3RvciwgaW4gdGhlIGZvbGxvd2luZworICogb3JkZXI6CisgKgkwMCA9IE5vIHB1bGwgcmVzaXN0b3IgY29ubmVjdGVkCisgKgkwMSA9IFB1bGwtdXAgcmVzaXN0b3IgY29ubmVjdGVkCisgKgkxMCA9IFB1bGwtZG93biByZXNpc3RvciBjb25uZWN0ZWQKKyAqLworZXh0ZXJuIGludCBzM2NfZ3Bpb19zZXRwdWxsX3VwZG93bihzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgb2ZmLCBzM2NfZ3Bpb19wdWxsX3QgcHVsbCk7CisKKworLyoqCisgKiBzM2NfZ3Bpb19nZXRwdWxsX3VwZG93bigpIC0gR2V0IGNvbmZpZ3VyYXRpb24gZm9yIGNob2ljZSBvZiB1cCwgZG93biBvciBub25lCisgKiBAY2hpcDogVGhlIGdwaW8gY2hpcCB0aGF0IHRoZSBHUElPIHBpbiBiZWxvbmdzIHRvCisgKiBAb2ZmOiBUaGUgb2Zmc2V0IHRvIHRoZSBwaW4gdG8gZ2V0IHRoZSBjb25maWd1cmF0aW9uIG9mLgorICoKKyAqIFRoaXMgaGVscGVyIGZ1bmN0aW9uIHJlYWRzIHRoZSBzdGF0ZSBvZiB0aGUgcHVsbC17dXAsZG93bn0gcmVzaXN0b3IgZm9yIHRoZQorICogZ2l2ZW4gR1BJTyBpbiB0aGUgc2FtZSBjYXNlIGFzIHMzY19ncGlvX3NldHB1bGxfdXBvd24uCisqLworZXh0ZXJuIHMzY19ncGlvX3B1bGxfdCBzM2NfZ3Bpb19nZXRwdWxsX3VwZG93bihzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBvZmYpOworCisvKioKKyAqIHMzY19ncGlvX3NldHB1bGxfczNjMjQ0MygpIC0gUHVsbCBjb25maWd1cmF0aW9uIGZvciBzM2MyNDQzLgorICogQGNoaXA6IFRoZSBncGlvIGNoaXAgdGhhdCBpcyBiZWluZyBjb25maWd1cmVkLgorICogQG9mZjogVGhlIG9mZnNldCBmb3IgdGhlIEdQSU8gYmVpbmcgY29uZmlndXJlZC4KKyAqIEBwYXJhbTogcHVsbDogVGhlIHB1bGwgbW9kZSBiZWluZyByZXF1ZXN0ZWQuCisgKgorICogVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3IgdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBHUElPcyB3aXRoIHR3bworICogYml0cyBjb25maWd1cmluZyB0aGUgcHJlc2VuY2Ugb2YgYSBwdWxsIHJlc2lzdG9yLCBpbiB0aGUgZm9sbG93aW5nCisgKiBvcmRlcjoKKyAqCTAwID0gUHVsbC11cCByZXNpc3RvciBjb25uZWN0ZWQKKyAqCTEwID0gUHVsbC1kb3duIHJlc2lzdG9yIGNvbm5lY3RlZAorICoJeDEgPSBObyBwdWxsIHVwIHJlc2lzdG9yCisgKi8KK2V4dGVybiBpbnQgczNjX2dwaW9fc2V0cHVsbF9zM2MyNDQzKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgb2ZmLCBzM2NfZ3Bpb19wdWxsX3QgcHVsbCk7CisKKy8qKgorICogczNjX2dwaW9fZ2V0cHVsbF9zM2MyNDQzKCkgLSBHZXQgY29uZmlndXJhdGlvbiBmb3IgczNjMjQ0MyBwdWxsIHJlc2lzdG9ycworICogQGNoaXA6IFRoZSBncGlvIGNoaXAgdGhhdCB0aGUgR1BJTyBwaW4gYmVsb25ncyB0by4KKyAqIEBvZmY6IFRoZSBvZmZzZXQgdG8gdGhlIHBpbiB0byBnZXQgdGhlIGNvbmZpZ3VyYXRpb24gb2YuCisgKgorICogVGhpcyBoZWxwZXIgZnVuY3Rpb24gcmVhZHMgdGhlIHN0YXRlIG9mIHRoZSBwdWxsLXt1cCxkb3dufSByZXNpc3RvciBmb3IgdGhlCisgKiBnaXZlbiBHUElPIGluIHRoZSBzYW1lIGNhc2UgYXMgczNjX2dwaW9fc2V0cHVsbF91cG93bi4KKyovCitleHRlcm4gczNjX2dwaW9fcHVsbF90IHMzY19ncGlvX2dldHB1bGxfczNjMjR4eChzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCwKKwkJCQkJCXVuc2lnbmVkIGludCBvZmYpOworCisjZW5kaWYgLyogX19QTEFUX0dQSU9fQ0ZHX0hFTFBFUlNfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvZ3Bpby1jZmcuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZ3Bpby1jZmcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2dwaW8tY2ZnLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZ3Bpby1jZmcuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9ncGlvLWNvcmUuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZ3Bpby1jb3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDlmZjQwNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvZ3Bpby1jb3JlLmgKQEAgLTAsMCArMSwxMzcgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9ncGlvLWNvcmUuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MgUGxhdGZvcm0gLSBHUElPIGNvcmUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2RlZmluZSBHUElPQ09OX09GRgkoMHgwMCkKKyNkZWZpbmUgR1BJT0RBVF9PRkYJKDB4MDQpCisKKyNkZWZpbmUgY29uXzRiaXRfc2hpZnQoX19vZmYpICgoX19vZmYpICogNCkKKworLyogRGVmaW5lIHRoZSBjb3JlIGdwaW9saWIgc3VwcG9ydCBmdW5jdGlvbnMgdGhhdCB0aGUgczNjIHBsYXRmb3JtcyBtYXkKKyAqIG5lZWQgdG8gZXh0ZW5kIG9yIGNoYW5nZSBkZXBlbmRpbmcgb24gdGhlIGhhcmR3YXJlIGFuZCB0aGUgczNjIGNoaXAKKyAqIHNlbGVjdGVkIGF0IGJ1aWxkIG9yIGZvdW5kIGF0IHJ1biB0aW1lLgorICoKKyAqIFRoZXNlIGRlZmluaXRpb25zIGFyZSBub3QgaW50ZW5kZWQgZm9yIGRyaXZlciBpbmNsdXNpb24sIHRoZXJlIGlzCisgKiBub3RoaW5nIGhlcmUgdGhhdCBzaG91bGQgbm90IGxpdmUgb3V0c2lkZSB0aGUgcGxhdGZvcm0gYW5kIGNvcmUKKyAqIHNwZWNpZmljIGNvZGUuCisqLworCitzdHJ1Y3QgczNjX2dwaW9fY2hpcDsKKworLyoqCisgKiBzdHJ1Y3QgczNjX2dwaW9fcG0gLSBwb3dlciBtYW5hZ2VtZW50IChzdXNwZW5kL3Jlc3VtZSkgaW5mb3JtYXRpb24KKyAqIEBzYXZlOiBSb3V0aW5lIHRvIHNhdmUgdGhlIHN0YXRlIG9mIHRoZSBHUElPIGJsb2NrCisgKiBAcmVzdW1lOiBSb3V0aW5lIHRvIHJlc3VtZSB0aGUgR1BJTyBibG9jay4KKyAqLworc3RydWN0IHMzY19ncGlvX3BtIHsKKwl2b2lkICgqc2F2ZSkoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXApOworCXZvaWQgKCpyZXN1bWUpKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwKTsKK307CisKK3N0cnVjdCBzM2NfZ3Bpb19jZmc7CisKKy8qKgorICogc3RydWN0IHMzY19ncGlvX2NoaXAgLSB3cmFwcGVyIGZvciBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiBncGlvCisgKiBAY2hpcDogVGhlIGNoaXAgc3RydWN0dXJlIHRvIGJlIGV4cG9ydGVkIHZpYSBncGlvbGliLgorICogQGJhc2U6IFRoZSBiYXNlIHBvaW50ZXIgdG8gdGhlIGdwaW8gY29uZmlndXJhdGlvbiByZWdpc3RlcnMuCisgKiBAY29uZmlnOiBzcGVjaWFsIGZ1bmN0aW9uIGFuZCBwdWxsLXJlc2lzdG9yIGNvbnRyb2wgaW5mb3JtYXRpb24uCisgKiBAcG1fc2F2ZTogU2F2ZSBpbmZvcm1hdGlvbiBmb3Igc3VzcGVuZC9yZXN1bWUgc3VwcG9ydC4KKyAqCisgKiBUaGlzIHdyYXBwZXIgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmb3IgdGhlIFNhbXN1bmcKKyAqIHNwZWNpZmljIGdwaW9zIGJlaW5nIHJlZ2lzdGVyZWQgd2l0aCBncGlvbGliLgorICovCitzdHJ1Y3QgczNjX2dwaW9fY2hpcCB7CisJc3RydWN0IGdwaW9fY2hpcAljaGlwOworCXN0cnVjdCBzM2NfZ3Bpb19jZmcJKmNvbmZpZzsKKwlzdHJ1Y3QgczNjX2dwaW9fcG0JKnBtOworCXZvaWQgX19pb21lbQkJKmJhc2U7CisjaWZkZWYgQ09ORklHX1BNCisJdTMyCQkJcG1fc2F2ZVs0XTsKKyNlbmRpZgorfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqdG9fczNjX2dwaW8oc3RydWN0IGdwaW9fY2hpcCAqZ3BjKQoreworCXJldHVybiBjb250YWluZXJfb2YoZ3BjLCBzdHJ1Y3QgczNjX2dwaW9fY2hpcCwgY2hpcCk7Cit9CisKKy8qKiBzM2NfZ3Bpb2xpYl9hZGQoKSAtIGFkZCB0aGUgczNjIHNwZWNpZmljIHZlcnNpb24gb2YgYSBncGlvX2NoaXAuCisgKiBAY2hpcDogVGhlIGNoaXAgdG8gcmVnaXN0ZXIKKyAqCisgKiBUaGlzIGlzIGEgd3JhcHBlciB0byBncGlvY2hpcF9hZGQoKSB0aGF0IHRha2VzIG91ciBzcGVjaWZpYyBncGlvIGNoaXAKKyAqIGluZm9ybWF0aW9uIGFuZCBtYWtlcyB0aGUgbmVjZXNzYXJ5IGFsdGVyYXRpb25zIGZvciB0aGUgcGxhdGZvcm0gYW5kCisgKiBub3RlcyB0aGUgaW5mb3JtYXRpb24gZm9yIHVzZSB3aXRoIHRoZSBjb25maWd1cmF0aW9uIHN5c3RlbXMgYW5kIGFueQorICogb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4KKyAqLworZXh0ZXJuIHZvaWQgczNjX2dwaW9saWJfYWRkKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwKTsKKworLyogQ09ORklHX1MzQ19HUElPX1RSQUNLIGVuYWJsZXMgdGhlIHRyYWNraW5nIG9mIHRoZSBzM2Mgc3BlY2lmaWMgZ3Bpb3MKKyAqIGZvciB1c2Ugd2l0aCB0aGUgY29uZmlndXJhdGlvbiBjYWxscywgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSBzM2MgZ3Bpb2xpYgorICogc3VwcG9ydCBjb2RlLgorICoKKyAqIE5vdCBhbGwgczNjIHN1cHBvcnQgY29kZSB3aWxsIG5lZWQgdGhpcywgYXMgc29tZSBjb25maWd1cmF0aW9ucyBvZiBjcHUKKyAqIG1heSBvbmx5IHN1cHBvcnQgb25lIG9yIHR3byBkaWZmZXJlbnQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBoYXZlIGFuCisgKiBlYXN5IGdwaW8gdG8gczNjX2dwaW9fY2hpcCBtYXBwaW5nIGZ1bmN0aW9uLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCB0aGVuCisgKiB0aGUgbWFjaGluZSBzdXBwb3J0IGZpbGUgc2hvdWxkIHByb3ZpZGUgaXRzIG93biBzM2NfZ3Bpb2xpYl9nZXRjaGlwKCkKKyAqIGFuZCBhbnkgb3RoZXIgbmVjZXNzYXJ5IGZ1bmN0aW9ucy4KKyAqLworCisvKioKKyAqIHNhbXN1bmdfZ3Bpb2xpYl9hZGRfNGJpdF9jaGlwcyAtIDRiaXQgc2luZ2xlIHJlZ2lzdGVyIEdQSU8gY29uZmlnLgorICogQGNoaXA6IFRoZSBncGlvIGNoaXAgdGhhdCBpcyBiZWluZyBjb25maWd1cmVkLgorICogQG5yX2NoaXBzOiBUaGUgbm8gb2YgY2hpcHMgKGdwaW8gcG9ydHMpIGZvciB0aGUgR1BJTyBiZWluZyBjb25maWd1cmVkLgorICoKKyAqIFRoaXMgaGVscGVyIGRlYWwgd2l0aCB0aGUgR1BJTyBjYXNlcyB3aGVyZSB0aGUgY29udHJvbCByZWdpc3RlciBoYXMgNCBiaXRzCisgKiBvZiBjb250cm9sIHBlciBHUElPLCBnZW5lcmFsbHkgaW4gdGhlIGZvcm0gb2Y6CisgKiAwMDAwID0gSW5wdXQKKyAqIDAwMDEgPSBPdXRwdXQKKyAqIG90aGVycyA9IFNwZWNpYWwgZnVuY3Rpb25zIChkZXBlbmRhbnQgb24gYmFuaykKKyAqCisgKiBOb3RlLCBzaW5jZSB0aGUgY29kZSB0byBkZWFsIHdpdGggdGhlIGNhc2Ugd2hlcmUgdGhlcmUgYXJlIHR3byBjb250cm9sCisgKiByZWdpc3RlcnMgaW5zdGVhZCBvZiBvbmUsIHdlIGRvIG5vdCBoYXZlIGEgc2VwZXJhdGUgc2V0IG9mIGZ1bmN0aW9uCisgKiAoc2Ftc3VuZ19ncGlvbGliX2FkZF80Yml0Ml9jaGlwcylmb3IgZWFjaCBjYXNlLgorICovCitleHRlcm4gdm9pZCBzYW1zdW5nX2dwaW9saWJfYWRkXzRiaXRfY2hpcHMoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXAsCisJCQkJCSAgIGludCBucl9jaGlwcyk7CitleHRlcm4gdm9pZCBzYW1zdW5nX2dwaW9saWJfYWRkXzRiaXQyX2NoaXBzKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLAorCQkJCQkgICAgaW50IG5yX2NoaXBzKTsKKworZXh0ZXJuIHZvaWQgc2Ftc3VuZ19ncGlvbGliX2FkZF80Yml0KHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwKTsKK2V4dGVybiB2b2lkIHNhbXN1bmdfZ3Bpb2xpYl9hZGRfNGJpdDIoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXApOworCisjaWZkZWYgQ09ORklHX1MzQ19HUElPX1RSQUNLCitleHRlcm4gc3RydWN0IHMzY19ncGlvX2NoaXAgKnMzY19ncGlvc1tTM0NfR1BJT19FTkRdOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpzM2NfZ3Bpb2xpYl9nZXRjaGlwKHVuc2lnbmVkIGludCBjaGlwKQoreworCXJldHVybiAoY2hpcCA8IFMzQ19HUElPX0VORCkgPyBzM2NfZ3Bpb3NbY2hpcF0gOiBOVUxMOworfQorI2Vsc2UKKy8qIG1hY2hpbmUgc3BlY2lmaWMgY29kZSBzaG91bGQgcHJvdmlkZSBzM2NfZ3Bpb2xpYl9nZXRjaGlwICovCisKKyNpbmNsdWRlIDxtYWNoL2dwaW8tdHJhY2suaD4KKworc3RhdGljIGlubGluZSB2b2lkIHMzY19ncGlvbGliX3RyYWNrKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwKSB7IH0KKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1BNCitleHRlcm4gc3RydWN0IHMzY19ncGlvX3BtIHMzY19ncGlvX3BtXzFiaXQ7CitleHRlcm4gc3RydWN0IHMzY19ncGlvX3BtIHMzY19ncGlvX3BtXzJiaXQ7CitleHRlcm4gc3RydWN0IHMzY19ncGlvX3BtIHMzY19ncGlvX3BtXzRiaXQ7CisjZGVmaW5lIF9fZ3Bpb19wbSh4KSB4CisjZWxzZQorI2RlZmluZSBzM2NfZ3Bpb19wbV8xYml0IE5VTEwKKyNkZWZpbmUgczNjX2dwaW9fcG1fMmJpdCBOVUxMCisjZGVmaW5lIHMzY19ncGlvX3BtXzRiaXQgTlVMTAorI2RlZmluZSBfX2dwaW9fcG0oeCkgTlVMTAorCisjZW5kaWYgLyogQ09ORklHX1BNICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvaHdtb24uaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvaHdtb24uaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2h3bW9uLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvaHdtb24uaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L2lpYy1jb3JlLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2lpYy1jb3JlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9paWMtY29yZS5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2lpYy1jb3JlLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9paWMuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvaWljLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9paWMuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9paWMuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9pcnEtdWFydC5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9pcnEtdWFydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MzMxZTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2lycS11YXJ0LmgKQEAgLTAsMCArMSwyMCBAQAorLyogYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9pcnEtdWFydC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIEhlYWRlciBmaWxlIGZvciBTYW1zdW5nIFNvQyBVQVJUIElSUSBkZW11eCBmb3IgUzNDNjRYWCBhbmQgbGF0ZXIKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworc3RydWN0IHMzY191YXJ0X2lycSB7CisJdm9pZCBfX2lvbWVtCSpyZWdzOworCXVuc2lnbmVkIGludAkgYmFzZV9pcnE7CisJdW5zaWduZWQgaW50CSBwYXJlbnRfaXJxOworfTsKKworZXh0ZXJuIHZvaWQgczNjX2luaXRfdWFydF9pcnFzKHN0cnVjdCBzM2NfdWFydF9pcnEgKmlycSwgdW5zaWduZWQgaW50IG5yX2lycXMpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2lycS12aWMtdGltZXIuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvaXJxLXZpYy10aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5MGI1MzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2lycS12aWMtdGltZXIuaApAQCAtMCwwICsxLDEzIEBACisvKiBhcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L2lycS12aWMtdGltZXIuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBIZWFkZXIgZmlsZSBmb3IgU2Ftc3VuZyBTb0MgSVJRIFZJQyB0aW1lcgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCitleHRlcm4gdm9pZCBzM2NfaW5pdF92aWNfdGltZXJfaXJxKHVuc2lnbmVkIGludCB2aWMsIHVuc2lnbmVkIGludCB0aW1lcik7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvbWFwLWJhc2UuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvbWFwLWJhc2UuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L21hcC1iYXNlLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvbWFwLWJhc2UuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9uYW5kLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L25hbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjQxMTVmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9uYW5kLmgKQEAgLTAsMCArMSw2NyBAQAorLyogYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2luY2x1ZGUvbWFjaC9uYW5kLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjQxMCAtIE5BTkQgZGV2aWNlIGNvbnRyb2xsZXIgcGxhdGZvcm1fZGV2aWNlIGluZm8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworLyoqCisgKiBzdHJ1Y3QgczNjMjQxMF9uYW5kX3NldCAtIGRlZmluZSBhIHNldCBvZiBvbmUgb3IgbW9yZSBuYW5kIGNoaXBzCisgKiBAZGlzYWJsZV9lY2M6CUVudGlyZWx5IGRpc2FibGUgRUNDIC0gRGFuZ2Vyb3VzCisgKiBAZmxhc2hfYmJ0OiAJCU9wZW5tb2tvIHUtYm9vdCBjYW4gY3JlYXRlIGEgQmFkIEJsb2NrIFRhYmxlCisgKgkJCVNldHRpbmcgdGhpcyBmbGFnIHdpbGwgYWxsb3cgdGhlIGtlcm5lbCB0bworICoJCQlsb29rIGZvciBpdCBhdCBib290IHRpbWUgYW5kIGFsc28gc2tpcCB0aGUgTkFORAorICoJCQlzY2FuLgorICogQG9wdGlvbnM6CQlEZWZhdWx0IHZhbHVlIHRvIHNldCBpbnRvICdzdHJ1Y3QgbmFuZF9jaGlwJyBvcHRpb25zLgorICogQG5yX2NoaXBzOgkJTnVtYmVyIG9mIGNoaXBzIGluIHRoaXMgc2V0CisgKiBAbnJfcGFydGl0aW9uczoJTnVtYmVyIG9mIHBhcnRpdGlvbnMgcG9pbnRlZCB0byBieSBAcGFydGl0aW9ucworICogQG5hbWU6CQlOYW1lIG9mIHNldCAob3B0aW9uYWwpCisgKiBAbnJfbWFwOgkJTWFwIGZvciBsb3ctbGF5ZXIgbG9naWNhbCB0byBwaHlzaWNhbCBjaGlwIG51bWJlcnMgKG9wdGlvbikKKyAqIEBwYXJ0aXRpb25zOgkJVGhlIG10ZCBwYXJ0aXRpb24gbGlzdAorICoKKyAqIGRlZmluZSBhIHNldCBvZiBvbmUgb3IgbW9yZSBuYW5kIGNoaXBzIHJlZ2lzdGVyZWQgd2l0aCBhbiB1bmlxdWUgbXRkLiBBbHNvCisgKiBhbGxvd3MgdG8gcGFzcyBmbGFnIHRvIHRoZSB1bmRlcmx5aW5nIE5BTkQgbGF5ZXIuICdkaXNhYmxlX2VjYycgd2lsbCB0cmlnZ2VyCisgKiBhIHdhcm5pbmcgYXQgYm9vdCB0aW1lLgorICovCitzdHJ1Y3QgczNjMjQxMF9uYW5kX3NldCB7CisJdW5zaWduZWQgaW50CQlkaXNhYmxlX2VjYzoxOworCXVuc2lnbmVkIGludAkJZmxhc2hfYmJ0OjE7CisKKwl1bnNpZ25lZCBpbnQJCW9wdGlvbnM7CisJaW50CQkJbnJfY2hpcHM7CisJaW50CQkJbnJfcGFydGl0aW9uczsKKwljaGFyCQkJKm5hbWU7CisJaW50CQkJKm5yX21hcDsKKwlzdHJ1Y3QgbXRkX3BhcnRpdGlvbgkqcGFydGl0aW9uczsKKwlzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQJKmVjY19sYXlvdXQ7Cit9OworCitzdHJ1Y3QgczNjMjQxMF9wbGF0Zm9ybV9uYW5kIHsKKwkvKiB0aW1pbmcgaW5mb3JtYXRpb24gZm9yIGNvbnRyb2xsZXIsIGFsbCB0aW1lcyBpbiBuYW5vc2Vjb25kcyAqLworCisJaW50CXRhY2xzOwkvKiB0aW1lIGZvciBhY3RpdmUgQ0xFL0FMRSB0byBuV0Uvbk9FICovCisJaW50CXR3cnBoMDsJLyogYWN0aXZlIHRpbWUgZm9yIG5XRS9uT0UgKi8KKwlpbnQJdHdycGgxOwkvKiB0aW1lIGZvciByZWxlYXNlIENMRS9BTEUgZnJvbSBuV0Uvbk9FIGluYWN0aXZlICovCisKKwl1bnNpZ25lZCBpbnQJaWdub3JlX3Vuc2V0X2VjYzoxOworCisJaW50CQkJbnJfc2V0czsKKwlzdHJ1Y3QgczNjMjQxMF9uYW5kX3NldCAqc2V0czsKKworCXZvaWQJCQkoKnNlbGVjdF9jaGlwKShzdHJ1Y3QgczNjMjQxMF9uYW5kX3NldCAqLAorCQkJCQkgICAgICAgaW50IGNoaXApOworfTsKKworLyoqCisgKiBzM2NfbmFuZF9zZXRfcGxhdGRhdGEoKSAtIHJlZ2lzdGVyIE5BTkQgcGxhdGZvcm0gZGF0YS4KKyAqIEBuYW5kOiBUaGUgTkFORCBwbGF0Zm9ybSBkYXRhIHRvIHJlZ2lzdGVyIHdpdGggczNjX2RldmljZV9uYW5kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBnaXZlbiBOQU5EIHBsYXRmb3JtIGRhdGEsIEBuYW5kIGFuZCByZWdpc3RlcnMKKyAqIGl0IHdpdGggdGhlIHMzY19kZXZpY2VfbmFuZC4gVGhpcyBhbGxvd3MgQG5hbmQgdG8gYmUgX19pbml0ZGF0YS4KKyovCitleHRlcm4gdm9pZCBzM2NfbmFuZF9zZXRfcGxhdGRhdGEoc3RydWN0IHMzYzI0MTBfcGxhdGZvcm1fbmFuZCAqbmFuZCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3BtLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3BtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ1ODM2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcG0uaApAQCAtMCwwICsxLDE4OSBAQAorLyogYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9wbS5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCVdyaXR0ZW4gYnkgQmVuIERvb2tzLCA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworLyogczNjX3BtX2luaXQKKyAqCisgKiBjYWxsZWQgZnJvbSBib2FyZCBhdCBpbml0aWFsaXNhdGlvbiB0aW1lIHRvIHNldHVwIHRoZSBwb3dlcgorICogbWFuYWdlbWVudAorKi8KKworI2lmZGVmIENPTkZJR19QTQorCitleHRlcm4gX19pbml0IGludCBzM2NfcG1faW5pdCh2b2lkKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQgczNjX3BtX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisvKiBjb25maWd1cmF0aW9uIGZvciB0aGUgSVJRIG1hc2sgb3ZlciBzbGVlcCAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfaW50bWFzazsKK2V4dGVybiB1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2VpbnRtYXNrOworCisvKiBJUlEgbWFza3MgZm9yIElSUXMgYWxsb3dlZCB0byBnbyB0byBzbGVlcCAoc2VlIGlycS5jKSAqLworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfaW50YWxsb3c7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9laW50YWxsb3c7CisKKy8qIHBlci1jcHUgc2xlZXAgZnVuY3Rpb25zICovCisKK2V4dGVybiB2b2lkICgqcG1fY3B1X3ByZXApKHZvaWQpOworZXh0ZXJuIHZvaWQgKCpwbV9jcHVfc2xlZXApKHZvaWQpOworCisvKiBGbGFncyBmb3IgUE0gQ29udHJvbCAqLworCitleHRlcm4gdW5zaWduZWQgbG9uZyBzM2NfcG1fZmxhZ3M7CisKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHBtX3VhcnRfdWRpdnNsb3Q7ICAvKiB0cnVlIHRvIHNhdmUgVUFSVCBVRElWU0xPVCAqLworCisvKiBmcm9tIHNsZWVwLlMgKi8KKworZXh0ZXJuIGludCAgczNjX2NwdV9zYXZlKHVuc2lnbmVkIGxvbmcgKnNhdmVibGspOworZXh0ZXJuIHZvaWQgczNjX2NwdV9yZXN1bWUodm9pZCk7CisKK2V4dGVybiB2b2lkIHMzYzI0MTBfY3B1X3N1c3BlbmQodm9pZCk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nIHMzY19zbGVlcF9zYXZlX3BoeXM7CisKKy8qIHNsZWVwIHNhdmUgaW5mbyAqLworCisvKioKKyAqIHN0cnVjdCBzbGVlcF9zYXZlIC0gc2F2ZSBpbmZvcm1hdGlvbiBmb3Igc2hhcmVkIHBlcmlwaGVyYWxzLgorICogQHJlZzogUG9pbnRlciB0byB0aGUgcmVnaXN0ZXIgdG8gc2F2ZS4KKyAqIEB2YWw6IEhvbGRlciBmb3IgdGhlIHZhbHVlIHNhdmVkIGZyb20gcmVnLgorICoKKyAqIFRoaXMgZGVzY3JpYmVzIGEgbGlzdCBvZiByZWdpc3RlcnMgd2hpY2ggaXMgdXNlZCBieSB0aGUgcG0gY29yZSBhbmQKKyAqIG90aGVyIHN1YnN5c3RlbSB0byBzYXZlIGFuZCByZXN0b3JlIHJlZ2lzdGVyIHZhbHVlcyBvdmVyIHN1c3BlbmQuCisgKi8KK3N0cnVjdCBzbGVlcF9zYXZlIHsKKwl2b2lkIF9faW9tZW0JKnJlZzsKKwl1bnNpZ25lZCBsb25nCXZhbDsKK307CisKKyNkZWZpbmUgU0FWRV9JVEVNKHgpIFwKKwl7IC5yZWcgPSAoeCkgfQorCisvKioKKyAqIHN0cnVjdCBwbV91YXJ0X3NhdmUgLSBzYXZlIGJsb2NrIGZvciBjb3JlIFVBUlQKKyAqIEB1bGNvbjogU2F2ZSB2YWx1ZSBmb3IgUzNDMjQxMF9VTENPTgorICogQHVjb246IFNhdmUgdmFsdWUgZm9yIFMzQzI0MTBfVUNPTgorICogQHVmY29uOiBTYXZlIHZhbHVlIGZvciBTM0MyNDEwX1VGQ09OCisgKiBAdW1jb246IFNhdmUgdmFsdWUgZm9yIFMzQzI0MTBfVU1DT04KKyAqIEB1YnJkaXY6IFNhdmUgdmFsdWUgZm9yIFMzQzI0MTBfVUJSRElWCisgKgorICogU2F2ZSBibG9jayBmb3IgVUFSVCByZWdpc3RlcnMgdG8gYmUgaGVsZCBvdmVyIHNsZWVwIGFuZCByZXN0b3JlZCBpZiB0aGV5CisgKiBhcmUgbmVlZGVkIChzYXkgYnkgZGVidWcpLgorKi8KK3N0cnVjdCBwbV91YXJ0X3NhdmUgeworCXUzMgl1bGNvbjsKKwl1MzIJdWNvbjsKKwl1MzIJdWZjb247CisJdTMyCXVtY29uOworCXUzMgl1YnJkaXY7CisJdTMyCXVkaXZzbG90OworfTsKKworLyogaGVscGVyIGZ1bmN0aW9ucyB0byBzYXZlL3Jlc3RvcmUgbGlzdHMgb2YgcmVnaXN0ZXJzLiAqLworCitleHRlcm4gdm9pZCBzM2NfcG1fZG9fc2F2ZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpOworZXh0ZXJuIHZvaWQgczNjX3BtX2RvX3Jlc3RvcmUoc3RydWN0IHNsZWVwX3NhdmUgKnB0ciwgaW50IGNvdW50KTsKK2V4dGVybiB2b2lkIHMzY19wbV9kb19yZXN0b3JlX2NvcmUoc3RydWN0IHNsZWVwX3NhdmUgKnB0ciwgaW50IGNvdW50KTsKKworI2lmZGVmIENPTkZJR19QTQorZXh0ZXJuIGludCBzM2NfaXJxZXh0X3dha2UodW5zaWduZWQgaW50IGlycW5vLCB1bnNpZ25lZCBpbnQgc3RhdGUpOworZXh0ZXJuIGludCBzM2MyNHh4X2lycV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CitleHRlcm4gaW50IHMzYzI0eHhfaXJxX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KTsKKyNlbHNlCisjZGVmaW5lIHMzY19pcnFleHRfd2FrZSBOVUxMCisjZGVmaW5lIHMzYzI0eHhfaXJxX3N1c3BlbmQgTlVMTAorI2RlZmluZSBzM2MyNHh4X2lycV9yZXN1bWUgIE5VTEwKKyNlbmRpZgorCisvKiBQTSBkZWJ1ZyBmdW5jdGlvbnMgKi8KKworI2lmZGVmIENPTkZJR19TQU1TVU5HX1BNX0RFQlVHCisvKioKKyAqIHMzY19wbV9kYmcoKSAtIGxvdyBsZXZlbCBkZWJ1ZyBmdW5jdGlvbiBmb3IgdXNlIGluIHN1c3BlbmQvcmVzdW1lLgorICogQG1zZzogVGhlIG1lc3NhZ2UgdG8gcHJpbnQuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIG1haW5seSB0byBkZWJ1ZyB0aGUgcmVzdW1lIHByb2Nlc3MgYmVmb3JlIHRoZSBzeXN0ZW0KKyAqIGNhbiByZWx5IG9uIHByaW50ay9jb25zb2xlIG91dHB1dC4gSXQgdXNlcyB0aGUgbG93LWxldmVsIGRlYnVnZ2luZyBvdXRwdXQKKyAqIHJvdXRpbmUgcHJpbnRhc2NpaSgpIHRvIGRvIGl0cyB3b3JrLgorICovCitleHRlcm4gdm9pZCBzM2NfcG1fZGJnKGNvbnN0IGNoYXIgKm1zZywgLi4uKTsKKworI2RlZmluZSBTM0NfUE1EQkcoZm10Li4uKSBzM2NfcG1fZGJnKGZtdCkKKyNlbHNlCisjZGVmaW5lIFMzQ19QTURCRyhmbXQuLi4pIHByaW50ayhLRVJOX0RFQlVHIGZtdCkKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1MzQ19QTV9ERUJVR19MRURfU01ESworLyoqCisgKiBzM2NfcG1fZGVidWdfc21ka2xlZCgpIC0gRGVidWcgUE0gc3VzcGVuZC9yZXN1bWUgdmlhIFNNREsgQm9hcmQgTEVEcworICogQHNldDogc2V0IGJpdHMgZm9yIHRoZSBzdGF0ZSBvZiB0aGUgTEVEcworICogQGNsZWFyOiBjbGVhciBiaXRzIGZvciB0aGUgc3RhdGUgb2YgdGhlIExFRHMuCisgKi8KK2V4dGVybiB2b2lkIHMzY19wbV9kZWJ1Z19zbWRrbGVkKHUzMiBzZXQsIHUzMiBjbGVhcik7CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgczNjX3BtX2RlYnVnX3NtZGtsZWQodTMyIHNldCwgdTMyIGNsZWFyKSB7IH0KKyNlbmRpZiAvKiBDT05GSUdfUzNDX1BNX0RFQlVHX0xFRF9TTURLICovCisKKy8qIHN1c3BlbmQgbWVtb3J5IGNoZWNraW5nICovCisKKyNpZmRlZiBDT05GSUdfU0FNU1VOR19QTV9DSEVDSworZXh0ZXJuIHZvaWQgczNjX3BtX2NoZWNrX3ByZXBhcmUodm9pZCk7CitleHRlcm4gdm9pZCBzM2NfcG1fY2hlY2tfcmVzdG9yZSh2b2lkKTsKK2V4dGVybiB2b2lkIHMzY19wbV9jaGVja19jbGVhbnVwKHZvaWQpOworZXh0ZXJuIHZvaWQgczNjX3BtX2NoZWNrX3N0b3JlKHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgczNjX3BtX2NoZWNrX3ByZXBhcmUoKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgczNjX3BtX2NoZWNrX3Jlc3RvcmUoKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgczNjX3BtX2NoZWNrX2NsZWFudXAoKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgczNjX3BtX2NoZWNrX3N0b3JlKCkgICBkbyB7IH0gd2hpbGUoMCkKKyNlbmRpZgorCisvKioKKyAqIHMzY19wbV9jb25maWd1cmVfZXh0aW50KCkgLSBlbnN1cmUgcGlucyBhcmUgY29ycmVjdGx5IHNldCBmb3IgSVJRCisgKgorICogU2V0dXAgYWxsIHRoZSBuZWNlc3NhcnkgR1BJTyBwaW5zIGZvciB3YWtpbmcgdGhlIHN5c3RlbSBvbiBleHRlcm5hbAorICogaW50ZXJydXB0LgorICovCitleHRlcm4gdm9pZCBzM2NfcG1fY29uZmlndXJlX2V4dGludCh2b2lkKTsKKworLyoqCisgKiBzM2NfcG1fcmVzdG9yZV9ncGlvcygpIC0gcmVzdG9yZSB0aGUgc3RhdGUgb2YgdGhlIGdwaW9zIGFmdGVyIHNsZWVwLgorICoKKyAqIFJlc3RvcmUgdGhlIHN0YXRlIG9mIHRoZSBHUElPIHBpbnMgYWZ0ZXIgc2xlZXAsIHdoaWNoIG1heSBpbnZvbHZlIGVuc3VyaW5nCisgKiB0aGF0IHdlIGRvIG5vdCBnbGl0Y2ggdGhlIHN0YXRlIG9mIHRoZSBwaW5zIGZyb20gdGhhdCB0aGUgYm9vdGxvYWRlcidzCisgKiByZXN1bWUgY29kZSBoYXMgZG9uZS4KKyovCitleHRlcm4gdm9pZCBzM2NfcG1fcmVzdG9yZV9ncGlvcyh2b2lkKTsKKworLyoqCisgKiBzM2NfcG1fc2F2ZV9ncGlvcygpIC0gc2F2ZSB0aGUgc3RhdGUgb2YgdGhlIEdQSU9zIGZvciByZXN0b3JpbmcgYWZ0ZXIgc2xlZXAuCisgKgorICogU2F2ZSB0aGUgR1BJTyBzdGF0ZXMgZm9yIHJlc290cmF0aW9uIG9uIHJlc3VtZS4gU2VlIHMzY19wbV9yZXN0b3JlX2dwaW9zKCkuCisgKi8KK2V4dGVybiB2b2lkIHMzY19wbV9zYXZlX2dwaW9zKHZvaWQpOworCisvKioKKyAqIHMzY19wbV9jYl9mbHVzaGNhY2hlIC0gY2FsbGJhY2sgZm9yIGFzc2VtYmx5IGNvZGUKKyAqCisgKiBDYWxsYmFjayB0byBpc3N1ZSBmbHVzaF9jYWNoZV9hbGwoKSBhcyB0aGlzIGNhbGwgaXMKKyAqIG5vdCBhIGRpcmVjdGx5IGNhbGxhYmxlIG9iamVjdC4KKyAqLworZXh0ZXJuIHZvaWQgczNjX3BtX2NiX2ZsdXNoY2FjaGUodm9pZCk7CisKK2V4dGVybiB2b2lkIHMzY19wbV9zYXZlX2NvcmUodm9pZCk7CitleHRlcm4gdm9pZCBzM2NfcG1fcmVzdG9yZV9jb3JlKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtYWM5Ny5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9yZWdzLWFjOTcuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtYWM5Ny5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3MtYWM5Ny5oCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3MtYWRjLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3MtYWRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1NGM0ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy1hZGMuaApAQCAtMCwwICsxLDY0IEBACisvKiBhcmNoL2FybS9tYWNoLXMzYzI0MTAvaW5jbHVkZS9tYWNoL3JlZ3MtYWRjLmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2hhbm5vbiBIb2xsYW5kIDxob2xsYW5kQGxvc2VyLm5ldD4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW9zdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBTM0MyNDEwIEFEQyByZWdpc3RlcnMKKyovCisKKyNpZm5kZWYgX19BU01fQVJDSF9SRUdTX0FEQ19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfUkVHU19BRENfSCAicmVncy1hZGMuaCIKKworI2RlZmluZSBTM0MyNDEwX0FEQ1JFRyh4KSAoeCkKKworI2RlZmluZSBTM0MyNDEwX0FEQ0NPTgkgICBTM0MyNDEwX0FEQ1JFRygweDAwKQorI2RlZmluZSBTM0MyNDEwX0FEQ1RTQwkgICBTM0MyNDEwX0FEQ1JFRygweDA0KQorI2RlZmluZSBTM0MyNDEwX0FEQ0RMWQkgICBTM0MyNDEwX0FEQ1JFRygweDA4KQorI2RlZmluZSBTM0MyNDEwX0FEQ0RBVDAJICAgUzNDMjQxMF9BRENSRUcoMHgwQykKKyNkZWZpbmUgUzNDMjQxMF9BRENEQVQxCSAgIFMzQzI0MTBfQURDUkVHKDB4MTApCisjZGVmaW5lIFMzQzY0WFhfQURDVVBETgkJUzNDMjQxMF9BRENSRUcoMHgxNCkKKyNkZWZpbmUgUzNDNjRYWF9BRENDTFJJTlQJUzNDMjQxMF9BRENSRUcoMHgxOCkKKyNkZWZpbmUgUzNDNjRYWF9BRENDTFJJTlRQTkROVVAJUzNDMjQxMF9BRENSRUcoMHgyMCkKKworCisvKiBBRENDT04gUmVnaXN0ZXIgQml0cyAqLworI2RlZmluZSBTM0M2NFhYX0FEQ0NPTl9SRVNTRUwJCSgxPDwxNikKKyNkZWZpbmUgUzNDMjQxMF9BRENDT05fRUNGTEcJCSgxPDwxNSkKKyNkZWZpbmUgUzNDMjQxMF9BRENDT05fUFJTQ0VOCQkoMTw8MTQpCisjZGVmaW5lIFMzQzI0MTBfQURDQ09OX1BSU0NWTCh4KQkoKCh4KSYweEZGKTw8NikKKyNkZWZpbmUgUzNDMjQxMF9BRENDT05fUFJTQ1ZMTUFTSwkoMHhGRjw8NikKKyNkZWZpbmUgUzNDMjQxMF9BRENDT05fU0VMTVVYKHgpCSgoKHgpJjB4Nyk8PDMpCisjZGVmaW5lIFMzQzI0MTBfQURDQ09OX01VWE1BU0sJCSgweDc8PDMpCisjZGVmaW5lIFMzQzI0MTBfQURDQ09OX1NUREJNCQkoMTw8MikKKyNkZWZpbmUgUzNDMjQxMF9BRENDT05fUkVBRF9TVEFSVAkoMTw8MSkKKyNkZWZpbmUgUzNDMjQxMF9BRENDT05fRU5BQkxFX1NUQVJUCSgxPDwwKQorI2RlZmluZSBTM0MyNDEwX0FEQ0NPTl9TVEFSVE1BU0sJKDB4Mzw8MCkKKworCisvKiBBRENUU0MgUmVnaXN0ZXIgQml0cyAqLworI2RlZmluZSBTM0MyNDEwX0FEQ1RTQ19ZTV9TRU4JCSgxPDw3KQorI2RlZmluZSBTM0MyNDEwX0FEQ1RTQ19ZUF9TRU4JCSgxPDw2KQorI2RlZmluZSBTM0MyNDEwX0FEQ1RTQ19YTV9TRU4JCSgxPDw1KQorI2RlZmluZSBTM0MyNDEwX0FEQ1RTQ19YUF9TRU4JCSgxPDw0KQorI2RlZmluZSBTM0MyNDEwX0FEQ1RTQ19QVUxMX1VQX0RJU0FCTEUJKDE8PDMpCisjZGVmaW5lIFMzQzI0MTBfQURDVFNDX0FVVE9fUFNUCQkoMTw8MikKKyNkZWZpbmUgUzNDMjQxMF9BRENUU0NfWFlfUFNUKHgpCSgoKHgpJjB4Myk8PDApCisKKy8qIEFEQ0RBVDAgQml0cyAqLworI2RlZmluZSBTM0MyNDEwX0FEQ0RBVDBfVVBET1dOCQkoMTw8MTUpCisjZGVmaW5lIFMzQzI0MTBfQURDREFUMF9BVVRPX1BTVAkoMTw8MTQpCisjZGVmaW5lIFMzQzI0MTBfQURDREFUMF9YWV9QU1QJCSgweDM8PDEyKQorI2RlZmluZSBTM0MyNDEwX0FEQ0RBVDBfWFBEQVRBX01BU0sJKDB4MDNGRikKKworLyogQURDREFUMSBCaXRzICovCisjZGVmaW5lIFMzQzI0MTBfQURDREFUMV9VUERPV04JCSgxPDwxNSkKKyNkZWZpbmUgUzNDMjQxMF9BRENEQVQxX0FVVE9fUFNUCSgxPDwxNCkKKyNkZWZpbmUgUzNDMjQxMF9BRENEQVQxX1hZX1BTVAkJKDB4Mzw8MTIpCisjZGVmaW5lIFMzQzI0MTBfQURDREFUMV9ZUERBVEFfTUFTSwkoMHgwM0ZGKQorCisjZW5kaWYgLyogX19BU01fQVJDSF9SRUdTX0FEQ19IICovCisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9yZWdzLWZiLXY0LmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3MtZmItdjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjQzNTk5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9yZWdzLWZiLXY0LmgKQEAgLTAsMCArMSwyMzUgQEAKKy8qIGFyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy1mYi12NC5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogICAgICBodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDNjRYWCAtIG5ldy1zdHlsZSBmcmFtZWJ1ZmZlciByZWdpc3RlciBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgaXMgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIG5ldyBzdHlsZSBmcmFtZWJ1ZmZlciBpbnRlcmZhY2UKKyAqIGZvdW5kIGZyb20gdGhlIFMzQzI0NDMgb253YXJkcyBhbmQgc3BlY2lmaWNhbGx5IHRoZSBTM0M2NFhYIHNlcmllcworICogUzNDNjQwMCBhbmQgUzNDNjQxMC4KKyAqCisgKiBUaGUgZmlsZSBjb250YWlucyB0aGUgY3B1IHNwZWNpZmljIGl0ZW1zIHdoaWNoIGNoYW5nZSBiZXR3ZWVuIHdoaWNoZXZlcgorICogYXJjaGl0ZWN0dXJlIGlzIHNlbGVjdGVkLiBTZWUgPHBsYXQvcmVncy1mYi5oPiBmb3IgdGhlIGNvcmUgZGVmaW5pdGlvbnMKKyAqIHRoYXQgYXJlIHRoZSBzYW1lLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisvKiBpbmNsdWRlIHRoZSBjb3JlIGRlZmluaXRpb25zIGhlcmUsIGluIGNhc2Ugd2UgcmVhbGx5IGRvIG5lZWQgdG8KKyAqIG92ZXJyaWRlIHRoZW0gYXQgYSBsYXRlciBkYXRlLgorKi8KKworI2luY2x1ZGUgPHBsYXQvcmVncy1mYi5oPgorCisjZGVmaW5lIFMzQ19GQl9NQVhfV0lOICg1KSAgLyogbnVtYmVyIG9mIGhhcmR3YXJlIHdpbmRvd3MgYXZhaWxhYmxlLiAqLworI2RlZmluZSBWSURDT04xX0ZTVEFUVVNfRVZFTgkoMSA8PCAxNSkKKworLyogVmlkZW8gdGltaW5nIGNvbnRyb2xzICovCisjZGVmaW5lIFZJRFRDT04wCQkJCSgweDEwKQorI2RlZmluZSBWSURUQ09OMQkJCQkoMHgxNCkKKyNkZWZpbmUgVklEVENPTjIJCQkJKDB4MTgpCisKKy8qIFdpbmRvdyBwb3NpdGlvbiBjb250cm9scyAqLworCisjZGVmaW5lIFdJTkNPTihfd2luKQkJCQkoMHgyMCArICgoX3dpbikgKiA0KSkKKworLyogT1NEMSBhbmQgT1NENCBkbyBub3QgaGF2ZSByZWdpc3RlciBEICovCisKKyNkZWZpbmUgVklET1NEX0EoX3dpbikJCQkJKDB4NDAgKyAoKF93aW4pICogMTYpKQorI2RlZmluZSBWSURPU0RfQihfd2luKQkJCQkoMHg0NCArICgoX3dpbikgKiAxNikpCisjZGVmaW5lIFZJRE9TRF9DKF93aW4pCQkJCSgweDQ4ICsgKChfd2luKSAqIDE2KSkKKyNkZWZpbmUgVklET1NEX0QoX3dpbikJCQkJKDB4NEMgKyAoKF93aW4pICogMTYpKQorCisKKyNkZWZpbmUgVklESU5UQ09OMAkJCQkoMHgxMzApCisKKyNkZWZpbmUgV3hLRVlDT055KF93aW4sIF9jb24pCQkJKCgweDE0MCArICgoX3dpbikgKiA4KSkgKyAoKF9jb24pICogNCkpCisKKy8qIFdJTkNPTnggKi8KKworI2RlZmluZSBXSU5DT054X0NTQ1dJRFRIX01BU0sJCQkoMHgzIDw8IDI2KQorI2RlZmluZSBXSU5DT054X0NTQ1dJRFRIX1NISUZUCQkJKDI2KQorI2RlZmluZSBXSU5DT054X0NTQ1dJRFRIX1dJREUJCQkoMHgwIDw8IDI2KQorI2RlZmluZSBXSU5DT054X0NTQ1dJRFRIX05BUlJPVwkJCSgweDMgPDwgMjYpCisKKyNkZWZpbmUgV0lOQ09OeF9FTkxPQ0FMCQkJCSgxIDw8IDIyKQorI2RlZmluZSBXSU5DT054X0JVRlNUQVRVUwkJCSgxIDw8IDIxKQorI2RlZmluZSBXSU5DT054X0JVRlNFTAkJCQkoMSA8PCAyMCkKKyNkZWZpbmUgV0lOQ09OeF9CVUZBVVRPRU4JCQkoMSA8PCAxOSkKKyNkZWZpbmUgV0lOQ09OeF9ZQ2JDcgkJCQkoMSA8PCAxMykKKworI2RlZmluZSBXSU5DT04xX0xPQ0FMU0VMX0NBTUlGCQkJKDEgPDwgMjMpCisKKyNkZWZpbmUgV0lOQ09OMl9MT0NBTFNFTF9DQU1JRgkJCSgxIDw8IDIzKQorI2RlZmluZSBXSU5DT04yX0JMRF9QSVgJCQkJKDEgPDwgNikKKworI2RlZmluZSBXSU5DT04yX0FMUEhBX1NFTAkJCSgxIDw8IDEpCisjZGVmaW5lIFdJTkNPTjJfQlBQTU9ERV9NQVNLCQkJKDB4ZiA8PCAyKQorI2RlZmluZSBXSU5DT04yX0JQUE1PREVfU0hJRlQJCQkoMikKKyNkZWZpbmUgV0lOQ09OMl9CUFBNT0RFXzFCUFAJCQkoMHgwIDw8IDIpCisjZGVmaW5lIFdJTkNPTjJfQlBQTU9ERV8yQlBQCQkJKDB4MSA8PCAyKQorI2RlZmluZSBXSU5DT04yX0JQUE1PREVfNEJQUAkJCSgweDIgPDwgMikKKyNkZWZpbmUgV0lOQ09OMl9CUFBNT0RFXzhCUFBfMTIzMgkJKDB4NCA8PCAyKQorI2RlZmluZSBXSU5DT04yX0JQUE1PREVfMTZCUFBfNTY1CQkoMHg1IDw8IDIpCisjZGVmaW5lIFdJTkNPTjJfQlBQTU9ERV8xNkJQUF9BMTU1NQkJKDB4NiA8PCAyKQorI2RlZmluZSBXSU5DT04yX0JQUE1PREVfMTZCUFBfSTE1NTUJCSgweDcgPDwgMikKKyNkZWZpbmUgV0lOQ09OMl9CUFBNT0RFXzE4QlBQXzY2NgkJKDB4OCA8PCAyKQorI2RlZmluZSBXSU5DT04yX0JQUE1PREVfMThCUFBfQTE2NjUJCSgweDkgPDwgMikKKyNkZWZpbmUgV0lOQ09OMl9CUFBNT0RFXzE5QlBQX0ExNjY2CQkoMHhhIDw8IDIpCisjZGVmaW5lIFdJTkNPTjJfQlBQTU9ERV8yNEJQUF84ODgJCSgweGIgPDwgMikKKyNkZWZpbmUgV0lOQ09OMl9CUFBNT0RFXzI0QlBQX0ExODg3CQkoMHhjIDw8IDIpCisjZGVmaW5lIFdJTkNPTjJfQlBQTU9ERV8yNUJQUF9BMTg4OAkJKDB4ZCA8PCAyKQorI2RlZmluZSBXSU5DT04yX0JQUE1PREVfMjhCUFBfQTQ4ODgJCSgweGQgPDwgMikKKworI2RlZmluZSBXSU5DT04zX0JMRF9QSVgJCQkJKDEgPDwgNikKKworI2RlZmluZSBXSU5DT04zX0FMUEhBX1NFTAkJCSgxIDw8IDEpCisjZGVmaW5lIFdJTkNPTjNfQlBQTU9ERV9NQVNLCQkJKDB4ZiA8PCAyKQorI2RlZmluZSBXSU5DT04zX0JQUE1PREVfU0hJRlQJCQkoMikKKyNkZWZpbmUgV0lOQ09OM19CUFBNT0RFXzFCUFAJCQkoMHgwIDw8IDIpCisjZGVmaW5lIFdJTkNPTjNfQlBQTU9ERV8yQlBQCQkJKDB4MSA8PCAyKQorI2RlZmluZSBXSU5DT04zX0JQUE1PREVfNEJQUAkJCSgweDIgPDwgMikKKyNkZWZpbmUgV0lOQ09OM19CUFBNT0RFXzE2QlBQXzU2NQkJKDB4NSA8PCAyKQorI2RlZmluZSBXSU5DT04zX0JQUE1PREVfMTZCUFBfQTE1NTUJCSgweDYgPDwgMikKKyNkZWZpbmUgV0lOQ09OM19CUFBNT0RFXzE2QlBQX0kxNTU1CQkoMHg3IDw8IDIpCisjZGVmaW5lIFdJTkNPTjNfQlBQTU9ERV8xOEJQUF82NjYJCSgweDggPDwgMikKKyNkZWZpbmUgV0lOQ09OM19CUFBNT0RFXzE4QlBQX0ExNjY1CQkoMHg5IDw8IDIpCisjZGVmaW5lIFdJTkNPTjNfQlBQTU9ERV8xOUJQUF9BMTY2NgkJKDB4YSA8PCAyKQorI2RlZmluZSBXSU5DT04zX0JQUE1PREVfMjRCUFBfODg4CQkoMHhiIDw8IDIpCisjZGVmaW5lIFdJTkNPTjNfQlBQTU9ERV8yNEJQUF9BMTg4NwkJKDB4YyA8PCAyKQorI2RlZmluZSBXSU5DT04zX0JQUE1PREVfMjVCUFBfQTE4ODgJCSgweGQgPDwgMikKKyNkZWZpbmUgV0lOQ09OM19CUFBNT0RFXzI4QlBQX0E0ODg4CQkoMHhkIDw8IDIpCisKKyNkZWZpbmUgVklESU5UQ09OMF9GSUZJT1NFTF9XSU5ET1cyCQkoMHgxMCA8PCA1KQorI2RlZmluZSBWSURJTlRDT04wX0ZJRklPU0VMX1dJTkRPVzMJCSgweDIwIDw8IDUpCisjZGVmaW5lIFZJRElOVENPTjBfRklGSU9TRUxfV0lORE9XNAkJKDB4NDAgPDwgNSkKKworI2RlZmluZSBESVRITU9ERQkJCQkoMHgxNzApCisjZGVmaW5lIFdJTnhNQVAoX3dpbikJCQkJKDB4MTgwICsgKChfd2luKSAqIDQpKQorCisKKyNkZWZpbmUgRElUSE1PREVfUl9QT1NfTUFTSwkJCSgweDMgPDwgNSkKKyNkZWZpbmUgRElUSE1PREVfUl9QT1NfU0hJRlQJCQkoNSkKKyNkZWZpbmUgRElUSE1PREVfUl9QT1NfOEJJVAkJCSgweDAgPDwgNSkKKyNkZWZpbmUgRElUSE1PREVfUl9QT1NfNkJJVAkJCSgweDEgPDwgNSkKKyNkZWZpbmUgRElUSE1PREVfUl9QT1NfNUJJVAkJCSgweDIgPDwgNSkKKworI2RlZmluZSBESVRITU9ERV9HX1BPU19NQVNLCQkJKDB4MyA8PCAzKQorI2RlZmluZSBESVRITU9ERV9HX1BPU19TSElGVAkJCSgzKQorI2RlZmluZSBESVRITU9ERV9HX1BPU184QklUCQkJKDB4MCA8PCAzKQorI2RlZmluZSBESVRITU9ERV9HX1BPU182QklUCQkJKDB4MSA8PCAzKQorI2RlZmluZSBESVRITU9ERV9HX1BPU181QklUCQkJKDB4MiA8PCAzKQorCisjZGVmaW5lIERJVEhNT0RFX0JfUE9TX01BU0sJCQkoMHgzIDw8IDEpCisjZGVmaW5lIERJVEhNT0RFX0JfUE9TX1NISUZUCQkJKDEpCisjZGVmaW5lIERJVEhNT0RFX0JfUE9TXzhCSVQJCQkoMHgwIDw8IDEpCisjZGVmaW5lIERJVEhNT0RFX0JfUE9TXzZCSVQJCQkoMHgxIDw8IDEpCisjZGVmaW5lIERJVEhNT0RFX0JfUE9TXzVCSVQJCQkoMHgyIDw8IDEpCisKKyNkZWZpbmUgRElUSE1PREVfRElUSF9FTgkJCSgxIDw8IDApCisKKyNkZWZpbmUgV1BBTENPTgkJCQkJKDB4MUEwKQorCisvKiBQYWxldHRlIGNvbnRyb2wgKi8KKy8qIE5vdGUgZm9yIFM1UEMxMDA6IHlvdSBjYW4gc3RpbGwgdXNlIHRob3NlIG1hY3JvcyBvbiBXUEFMQ09OIChha2EgV1BBTENPTl9MKSwKKyAqIGJ1dCBtYWtlIHN1cmUgdGhhdCBXUEFMQ09OX0ggVzJQQUwtVzRQQUwgZW50cmllcyBhcmUgemVyb2VkIG91dCAqLworI2RlZmluZSBXUEFMQ09OX1c0UEFMXzE2QlBQX0E1NTUJCSgxIDw8IDgpCisjZGVmaW5lIFdQQUxDT05fVzNQQUxfMTZCUFBfQTU1NQkJKDEgPDwgNykKKyNkZWZpbmUgV1BBTENPTl9XMlBBTF8xNkJQUF9BNTU1CQkoMSA8PCA2KQorCisKKy8qIHN5c3RlbSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBjb2RlIGZvciBwYWxldHRlIHNpemVzLCBhbmQgb3RoZXIKKyAqIGluZm9ybWF0aW9uIHRoYXQgY2hhbmdlcyBkZXBlbmRpbmcgb24gd2hpY2ggYXJjaGl0ZWN0dXJlIGlzIGJlaW5nCisgKiBjb21waWxlZC4KKyovCisKKy8qIHJldHVybiB0cnVlIGlmIHdpbmRvdyBfd2luIGhhcyBPU0QgcmVnaXN0ZXIgRCAqLworI2RlZmluZSBzM2NfZmJfaGFzX29zZF9kKF93aW4pICgoX3dpbikgIT0gNCAmJiAoX3dpbikgIT0gMCkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgczNjX2ZiX3dpbl9wYWxfc2l6ZSh1bnNpZ25lZCBpbnQgd2luKQoreworCWlmICh3aW4gPCAyKQorCQlyZXR1cm4gMjU2OworCWlmICh3aW4gPCA0KQorCQlyZXR1cm4gMTY7CisJaWYgKHdpbiA9PSA0KQorCQlyZXR1cm4gNDsKKworCUJVRygpOwkvKiBzaG91bGRuJ3QgZ2V0IGhlcmUgKi8KK30KKworc3RhdGljIGlubGluZSBpbnQgczNjX2ZiX3ZhbGlkYXRlX3dpbl9icHAodW5zaWduZWQgaW50IHdpbiwgdW5zaWduZWQgaW50IGJwcCkKK3sKKwkvKiBhbGwgd2luZG93cyBjYW4gZG8gMS8yIGJwcCAqLworCisJaWYgKChicHAgPT0gMjUgfHwgYnBwID09IDE5KSAmJiB3aW4gPT0gMCkKKwkJcmV0dXJuIDA7CS8qIHdpbiAwIGRvZXMgbm90IGhhdmUgMTkgb3IgMjVicHAgbW9kZXMgKi8KKworCWlmIChicHAgPT0gNCAmJiB3aW4gPT0gNCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoYnBwID09IDggJiYgKHdpbiA+PSAzKSkKKwkJcmV0dXJuIDA7CS8qIHdpbiAzLzQgY2Fubm90IGRvIDhicHAgaW4gYW55IG1vZGUgKi8KKworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGludCBzM2NfZmJfcGFsX2lzMTYodW5zaWduZWQgaW50IHdpbmRvdykKK3sKKwlyZXR1cm4gd2luZG93ID4gMTsKK30KKworc3RydWN0IHMzY19mYl9wYWxldHRlIHsKKwlzdHJ1Y3QgZmJfYml0ZmllbGQJcjsKKwlzdHJ1Y3QgZmJfYml0ZmllbGQJZzsKKwlzdHJ1Y3QgZmJfYml0ZmllbGQJYjsKKwlzdHJ1Y3QgZmJfYml0ZmllbGQJYTsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2NfZmJfaW5pdF9wYWxldHRlKHVuc2lnbmVkIGludCB3aW5kb3csCisJCQkJICAgICAgIHN0cnVjdCBzM2NfZmJfcGFsZXR0ZSAqcGFsZXR0ZSkKK3sKKwlpZiAod2luZG93IDwgMikgeworCQkvKiBXaW5kb3dzIDAvMSBhcmUgOC84Lzggb3IgQS84LzgvOCAqLworCQlwYWxldHRlLT5yLm9mZnNldCA9IDE2OworCQlwYWxldHRlLT5yLmxlbmd0aCA9IDg7CisJCXBhbGV0dGUtPmcub2Zmc2V0ID0gODsKKwkJcGFsZXR0ZS0+Zy5sZW5ndGggPSA4OworCQlwYWxldHRlLT5iLm9mZnNldCA9IDA7CisJCXBhbGV0dGUtPmIubGVuZ3RoID0gODsKKwl9IGVsc2UgeworCQkvKiBjdXJyZW50bHkgd2UgYXNzdW1lIFJHQiA1LzYvNSAqLworCQlwYWxldHRlLT5yLm9mZnNldCA9IDExOworCQlwYWxldHRlLT5yLmxlbmd0aCA9IDU7CisJCXBhbGV0dGUtPmcub2Zmc2V0ID0gNTsKKwkJcGFsZXR0ZS0+Zy5sZW5ndGggPSA2OworCQlwYWxldHRlLT5iLm9mZnNldCA9IDA7CisJCXBhbGV0dGUtPmIubGVuZ3RoID0gNTsKKwl9Cit9CisKKy8qIE5vdGVzIG9uIHBlci13aW5kb3cgYnBwIHNldHRpbmdzCisgKgorICogVmFsdWUJV2luMAkgV2luMQkgIFdpbjIJICAgV2luMwkgICAgV2luIDQKKyAqIDAwMDAJCTEoUCkJIDEoUCkJICAxKFApCSAgIDEoUCkJICAgIDEoUCkKKyAqIDAwMDEJCTIoUCkJIDIoUCkgICAgIDIoUCkJICAgMihQKQkgICAgMihQKQorICogMDAxMAkJNChQKQkgNChQKSAgICAgNChQKQkgICA0KFApICAgICAtbm9uZS0KKyAqIDAwMTEJCTgoUCkJIDgoUCkgICAgIC1ub25lLSAgIC1ub25lLSAgIC1ub25lLQorICogMDEwMAkJLW5vbmUtCSA4KEEyMzIpICA4KEEyMzIpICAtbm9uZS0gICAtbm9uZS0KKyAqIDAxMDEJCTE2KDU2NSkJIDE2KDU2NSkgIDE2KDU2NSkgIDE2KDU2NSkgICAxNig1NjUpCisgKiAwMTEwCQktbm9uZS0JIDE2KEE1NTUpIDE2KEE1NTUpIDE2KEE1NTUpICAxNihBNTU1KQorICogMDExMQkJMTYoSTU1NSkgMTYoSTU2NSkgMTYoSTU1NSkgMTYoSTU1NSkgIDE2KEk1NTUpCisgKiAxMDAwCQkxOCg2NjYpCSAxOCg2NjYpICAxOCg2NjYpICAxOCg2NjYpICAgMTgoNjY2KQorICogMTAwMQkJLW5vbmUtCSAxOChBNjY1KSAxOChBNjY1KSAxOChBNjY1KSAgMTYoQTY2NSkKKyAqIDEwMTAJCS1ub25lLQkgMTkoQTY2NikgMTkoQTY2NikgMTkoQTY2NikgIDE5KEE2NjYpCisgKiAxMDExCQkyNCg4ODgpCSAyNCg4ODgpICAyNCg4ODgpICAyNCg4ODgpICAgMjQoODg4KQorICogMTEwMAkJLW5vbmUtCSAyNChBODg3KSAyNChBODg3KSAyNChBODg3KSAgMjQoQTg4NykKKyAqIDExMDEJCS1ub25lLQkgMjUoQTg4OCkgMjUoQTg4OCkgMjUoQTg4OCkgIDI1KEE4ODgpCisgKiAxMTEwCQktbm9uZS0JIC1ub25lLQkgIC1ub25lLSAgIC1ub25lLSAgICAtbm9uZS0KKyAqIDExMTEJCS1ub25lLQkgLW5vbmUtICAgLW5vbmUtICAgLW5vbmUtICAgIC1ub25lLQorKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy1mYi5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9yZWdzLWZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGVmODA2ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy1mYi5oCkBAIC0wLDAgKzEsMzY2IEBACisvKiBhcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3MtZmIuaAorICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqICAgICAgQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQyBQbGF0Zm9ybSAtIG5ldy1zdHlsZSBmcmFtZWJ1ZmZlciByZWdpc3RlciBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgaXMgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIG5ldyBzdHlsZSBmcmFtZWJ1ZmZlciBpbnRlcmZhY2UKKyAqIGZvdW5kIGZyb20gdGhlIFMzQzI0NDMgb253YXJkcyBpbnRvIHRoZSBTM0MyNDE2LCBTM0MyNDUwIGFuZCB0aGUKKyAqIFMzQzY0WFggc2VyaWVzIHN1Y2ggYXMgdGhlIFMzQzY0MDAgYW5kIFMzQzY0MTAuCisgKgorICogVGhlIGZpbGUgZG9lcyBub3QgY29udGFpbiB0aGUgY3B1IHNwZWNpZmljIGl0ZW1zIHdoaWNoIGFyZSBiYXNlZCBvbgorICogd2hpY2hldmVyIGFyY2hpdGVjdHVyZSBpcyBzZWxlY3RlZCwgaXQgb25seSBjb250YWlucyB0aGUgY29yZSBvZiB0aGUKKyAqIHJlZ2lzdGVyIHNldC4gU2VlIDxtYWNoL3JlZ3MtZmIuaD4gdG8gZ2V0IHRoZSBzcGVjaWZpY3MuCisgKgorICogTm90ZSwgd2UgY2hhbmdlZCB0byB1c2luZyByZWdzLWZiLmggYXMgaXQgYXZvaWRzIGFueSBjbGFzaGVzIHdpdGgKKyAqIHRoZSBvcmlnaW5hbCByZWdzLWxjZC5oIHNvIG91dCBvZiB0aGUgd2F5IG9mIHJlZ3MtbGNkLmggYXMgd2VsbCBhcworICogaW5kaWNhdGluZyB0aGUgbmV3ZXIgYmxvY2sgaXMgbXVjaCBtb3JlIHRoYW4ganVzdCBhbiBMQ0QgaW50ZXJmYWNlLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisvKiBQbGVhc2UgZG8gbm90IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5LCB1c2UgPG1hY2gvcmVncy1mYi5oPiB0bworICogZW5zdXJlIGFsbCB0aGUgbG9jYWxpc2VkIFNvQyBzdXBwb3J0IGlzIGluY2x1ZGVkIGFzIG5lY2Vzc2FyeS4KKyovCisKKy8qIFZJRENPTjAgKi8KKworI2RlZmluZSBWSURDT04wCQkJCQkoMHgwMCkKKyNkZWZpbmUgVklEQ09OMF9JTlRFUkxBQ0UJCQkoMSA8PCAyOSkKKyNkZWZpbmUgVklEQ09OMF9WSURPVVRfTUFTSwkJCSgweDMgPDwgMjYpCisjZGVmaW5lIFZJRENPTjBfVklET1VUX1NISUZUCQkJKDI2KQorI2RlZmluZSBWSURDT04wX1ZJRE9VVF9SR0IJCQkoMHgwIDw8IDI2KQorI2RlZmluZSBWSURDT04wX1ZJRE9VVF9UVgkJCSgweDEgPDwgMjYpCisjZGVmaW5lIFZJRENPTjBfVklET1VUX0k4MF9MREkwCQkJKDB4MiA8PCAyNikKKyNkZWZpbmUgVklEQ09OMF9WSURPVVRfSTgwX0xESTEJCQkoMHgzIDw8IDI2KQorCisjZGVmaW5lIFZJRENPTjBfTDFfREFUQV9NQVNLCQkJKDB4NyA8PCAyMykKKyNkZWZpbmUgVklEQ09OMF9MMV9EQVRBX1NISUZUCQkJKDIzKQorI2RlZmluZSBWSURDT04wX0wxX0RBVEFfMTZCUFAJCQkoMHgwIDw8IDIzKQorI2RlZmluZSBWSURDT04wX0wxX0RBVEFfMThCUFAxNgkJCSgweDEgPDwgMjMpCisjZGVmaW5lIFZJRENPTjBfTDFfREFUQV8xOEJQUDkJCQkoMHgyIDw8IDIzKQorI2RlZmluZSBWSURDT04wX0wxX0RBVEFfMjRCUFAJCQkoMHgzIDw8IDIzKQorI2RlZmluZSBWSURDT04wX0wxX0RBVEFfMThCUFAJCQkoMHg0IDw8IDIzKQorI2RlZmluZSBWSURDT04wX0wxX0RBVEFfMTZCUFA4CQkJKDB4NSA8PCAyMykKKworI2RlZmluZSBWSURDT04wX0wwX0RBVEFfTUFTSwkJCSgweDcgPDwgMjApCisjZGVmaW5lIFZJRENPTjBfTDBfREFUQV9TSElGVAkJCSgyMCkKKyNkZWZpbmUgVklEQ09OMF9MMF9EQVRBXzE2QlBQCQkJKDB4MCA8PCAyMCkKKyNkZWZpbmUgVklEQ09OMF9MMF9EQVRBXzE4QlBQMTYJCQkoMHgxIDw8IDIwKQorI2RlZmluZSBWSURDT04wX0wwX0RBVEFfMThCUFA5CQkJKDB4MiA8PCAyMCkKKyNkZWZpbmUgVklEQ09OMF9MMF9EQVRBXzI0QlBQCQkJKDB4MyA8PCAyMCkKKyNkZWZpbmUgVklEQ09OMF9MMF9EQVRBXzE4QlBQCQkJKDB4NCA8PCAyMCkKKyNkZWZpbmUgVklEQ09OMF9MMF9EQVRBXzE2QlBQOAkJCSgweDUgPDwgMjApCisKKyNkZWZpbmUgVklEQ09OMF9QTlJNT0RFX01BU0sJCQkoMHgzIDw8IDE3KQorI2RlZmluZSBWSURDT04wX1BOUk1PREVfU0hJRlQJCQkoMTcpCisjZGVmaW5lIFZJRENPTjBfUE5STU9ERV9SR0IJCQkoMHgwIDw8IDE3KQorI2RlZmluZSBWSURDT04wX1BOUk1PREVfQkdSCQkJKDB4MSA8PCAxNykKKyNkZWZpbmUgVklEQ09OMF9QTlJNT0RFX1NFUklBTF9SR0IJCSgweDIgPDwgMTcpCisjZGVmaW5lIFZJRENPTjBfUE5STU9ERV9TRVJJQUxfQkdSCQkoMHgzIDw8IDE3KQorCisjZGVmaW5lIFZJRENPTjBfQ0xLVkFMVVAJCQkoMSA8PCAxNikKKyNkZWZpbmUgVklEQ09OMF9DTEtWQUxfRl9NQVNLCQkJKDB4ZmYgPDwgNikKKyNkZWZpbmUgVklEQ09OMF9DTEtWQUxfRl9TSElGVAkJCSg2KQorI2RlZmluZSBWSURDT04wX0NMS1ZBTF9GX0xJTUlUCQkJKDB4ZmYpCisjZGVmaW5lIFZJRENPTjBfQ0xLVkFMX0YoX3gpCQkJKChfeCkgPDwgNikKKyNkZWZpbmUgVklEQ09OMF9WTENLRlJFRQkJCSgxIDw8IDUpCisjZGVmaW5lIFZJRENPTjBfQ0xLRElSCQkJCSgxIDw8IDQpCisKKyNkZWZpbmUgVklEQ09OMF9DTEtTRUxfTUFTSwkJCSgweDMgPDwgMikKKyNkZWZpbmUgVklEQ09OMF9DTEtTRUxfU0hJRlQJCQkoMikKKyNkZWZpbmUgVklEQ09OMF9DTEtTRUxfSENMSwkJCSgweDAgPDwgMikKKyNkZWZpbmUgVklEQ09OMF9DTEtTRUxfTENECQkJKDB4MSA8PCAyKQorI2RlZmluZSBWSURDT04wX0NMS1NFTF8yN00JCQkoMHgzIDw8IDIpCisKKyNkZWZpbmUgVklEQ09OMF9FTlZJRAkJCQkoMSA8PCAxKQorI2RlZmluZSBWSURDT04wX0VOVklEX0YJCQkJKDEgPDwgMCkKKworI2RlZmluZSBWSURDT04xCQkJCQkoMHgwNCkKKyNkZWZpbmUgVklEQ09OMV9MSU5FQ05UX01BU0sJCQkoMHg3ZmYgPDwgMTYpCisjZGVmaW5lIFZJRENPTjFfTElORUNOVF9TSElGVAkJCSgxNikKKyNkZWZpbmUgVklEQ09OMV9MSU5FQ05UX0dFVChfdikJCQkoKChfdikgPj4gMTYpICYgMHg3ZmYpCisjZGVmaW5lIFZJRENPTjFfVlNUQVRVU19NQVNLCQkJKDB4MyA8PCAxMykKKyNkZWZpbmUgVklEQ09OMV9WU1RBVFVTX1NISUZUCQkJKDEzKQorI2RlZmluZSBWSURDT04xX1ZTVEFUVVNfVlNZTkMJCQkoMHgwIDw8IDEzKQorI2RlZmluZSBWSURDT04xX1ZTVEFUVVNfQkFDS1BPUkNICQkoMHgxIDw8IDEzKQorI2RlZmluZSBWSURDT04xX1ZTVEFUVVNfQUNUSVZFCQkJKDB4MiA8PCAxMykKKyNkZWZpbmUgVklEQ09OMV9WU1RBVFVTX0ZST05UUE9SQ0gJCSgweDAgPDwgMTMpCisKKyNkZWZpbmUgVklEQ09OMV9JTlZfVkNMSwkJCSgxIDw8IDcpCisjZGVmaW5lIFZJRENPTjFfSU5WX0hTWU5DCQkJKDEgPDwgNikKKyNkZWZpbmUgVklEQ09OMV9JTlZfVlNZTkMJCQkoMSA8PCA1KQorI2RlZmluZSBWSURDT04xX0lOVl9WREVOCQkJKDEgPDwgNCkKKworLyogVklEQ09OMiAqLworCisjZGVmaW5lIFZJRENPTjIJCQkJCSgweDA4KQorI2RlZmluZSBWSURDT04yX0VONjAxCQkJCSgxIDw8IDIzKQorI2RlZmluZSBWSURDT04yX1RWRk1UU0VMX1NXCQkJKDEgPDwgMTQpCisKKyNkZWZpbmUgVklEQ09OMl9UVkZNVFNFTDFfTUFTSwkJCSgweDMgPDwgMTIpCisjZGVmaW5lIFZJRENPTjJfVFZGTVRTRUwxX1NISUZUCQkJKDEyKQorI2RlZmluZSBWSURDT04yX1RWRk1UU0VMMV9SR0IJCQkoMHgwIDw8IDEyKQorI2RlZmluZSBWSURDT04yX1RWRk1UU0VMMV9ZVVY0MjIJCSgweDEgPDwgMTIpCisjZGVmaW5lIFZJRENPTjJfVFZGTVRTRUwxX1lVVjQ0NAkJKDB4MiA8PCAxMikKKworI2RlZmluZSBWSURDT04yX09SR1lDYkNyCQkJKDEgPDwgOCkKKyNkZWZpbmUgVklEQ09OMl9ZVVZPUkRDckNiCQkJKDEgPDwgNykKKworLyogVklEVENPTjAgKi8KKworI2RlZmluZSBWSURUQ09OMF9WQlBERV9NQVNLCQkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lIFZJRFRDT04wX1ZCUERFX1NISUZUCQkJKDI0KQorI2RlZmluZSBWSURUQ09OMF9WQlBERV9MSU1JVAkJCSgweGZmKQorI2RlZmluZSBWSURUQ09OMF9WQlBERShfeCkJCQkoKF94KSA8PCAyNCkKKworI2RlZmluZSBWSURUQ09OMF9WQlBEX01BU0sJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgVklEVENPTjBfVkJQRF9TSElGVAkJCSgxNikKKyNkZWZpbmUgVklEVENPTjBfVkJQRF9MSU1JVAkJCSgweGZmKQorI2RlZmluZSBWSURUQ09OMF9WQlBEKF94KQkJCSgoX3gpIDw8IDE2KQorCisjZGVmaW5lIFZJRFRDT04wX1ZGUERfTUFTSwkJCSgweGZmIDw8IDgpCisjZGVmaW5lIFZJRFRDT04wX1ZGUERfU0hJRlQJCQkoOCkKKyNkZWZpbmUgVklEVENPTjBfVkZQRF9MSU1JVAkJCSgweGZmKQorI2RlZmluZSBWSURUQ09OMF9WRlBEKF94KQkJCSgoX3gpIDw8IDgpCisKKyNkZWZpbmUgVklEVENPTjBfVlNQV19NQVNLCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgVklEVENPTjBfVlNQV19TSElGVAkJCSgwKQorI2RlZmluZSBWSURUQ09OMF9WU1BXX0xJTUlUCQkJKDB4ZmYpCisjZGVmaW5lIFZJRFRDT04wX1ZTUFcoX3gpCQkJKChfeCkgPDwgMCkKKworLyogVklEVENPTjEgKi8KKworI2RlZmluZSBWSURUQ09OMV9WRlBERV9NQVNLCQkJKDB4ZmYgPDwgMjQpCisjZGVmaW5lIFZJRFRDT04xX1ZGUERFX1NISUZUCQkJKDI0KQorI2RlZmluZSBWSURUQ09OMV9WRlBERV9MSU1JVAkJCSgweGZmKQorI2RlZmluZSBWSURUQ09OMV9WRlBERShfeCkJCQkoKF94KSA8PCAyNCkKKworI2RlZmluZSBWSURUQ09OMV9IQlBEX01BU0sJCQkoMHhmZiA8PCAxNikKKyNkZWZpbmUgVklEVENPTjFfSEJQRF9TSElGVAkJCSgxNikKKyNkZWZpbmUgVklEVENPTjFfSEJQRF9MSU1JVAkJCSgweGZmKQorI2RlZmluZSBWSURUQ09OMV9IQlBEKF94KQkJCSgoX3gpIDw8IDE2KQorCisjZGVmaW5lIFZJRFRDT04xX0hGUERfTUFTSwkJCSgweGZmIDw8IDgpCisjZGVmaW5lIFZJRFRDT04xX0hGUERfU0hJRlQJCQkoOCkKKyNkZWZpbmUgVklEVENPTjFfSEZQRF9MSU1JVAkJCSgweGZmKQorI2RlZmluZSBWSURUQ09OMV9IRlBEKF94KQkJCSgoX3gpIDw8IDgpCisKKyNkZWZpbmUgVklEVENPTjFfSFNQV19NQVNLCQkJKDB4ZmYgPDwgMCkKKyNkZWZpbmUgVklEVENPTjFfSFNQV19TSElGVAkJCSgwKQorI2RlZmluZSBWSURUQ09OMV9IU1BXX0xJTUlUCQkJKDB4ZmYpCisjZGVmaW5lIFZJRFRDT04xX0hTUFcoX3gpCQkJKChfeCkgPDwgMCkKKworI2RlZmluZSBWSURUQ09OMgkJCQkoMHgxOCkKKyNkZWZpbmUgVklEVENPTjJfTElORVZBTF9NQVNLCQkJKDB4N2ZmIDw8IDExKQorI2RlZmluZSBWSURUQ09OMl9MSU5FVkFMX1NISUZUCQkJKDExKQorI2RlZmluZSBWSURUQ09OMl9MSU5FVkFMX0xJTUlUCQkJKDB4N2ZmKQorI2RlZmluZSBWSURUQ09OMl9MSU5FVkFMKF94KQkJCSgoX3gpIDw8IDExKQorCisjZGVmaW5lIFZJRFRDT04yX0hPWlZBTF9NQVNLCQkJKDB4N2ZmIDw8IDApCisjZGVmaW5lIFZJRFRDT04yX0hPWlZBTF9TSElGVAkJCSgwKQorI2RlZmluZSBWSURUQ09OMl9IT1pWQUxfTElNSVQJCQkoMHg3ZmYpCisjZGVmaW5lIFZJRFRDT04yX0hPWlZBTChfeCkJCQkoKF94KSA8PCAwKQorCisvKiBXSU5DT054ICovCisKKworI2RlZmluZSBXSU5DT054X0JJVFNXUAkJCQkoMSA8PCAxOCkKKyNkZWZpbmUgV0lOQ09OeF9CWVRTV1AJCQkJKDEgPDwgMTcpCisjZGVmaW5lIFdJTkNPTnhfSEFXU1dQCQkJCSgxIDw8IDE2KQorI2RlZmluZSBXSU5DT054X0JVUlNUTEVOX01BU0sJCQkoMHgzIDw8IDkpCisjZGVmaW5lIFdJTkNPTnhfQlVSU1RMRU5fU0hJRlQJCQkoOSkKKyNkZWZpbmUgV0lOQ09OeF9CVVJTVExFTl8xNldPUkQJCQkoMHgwIDw8IDkpCisjZGVmaW5lIFdJTkNPTnhfQlVSU1RMRU5fOFdPUkQJCQkoMHgxIDw8IDkpCisjZGVmaW5lIFdJTkNPTnhfQlVSU1RMRU5fNFdPUkQJCQkoMHgyIDw8IDkpCisKKyNkZWZpbmUgV0lOQ09OeF9FTldJTgkJCQkoMSA8PCAwKQorI2RlZmluZSBXSU5DT04wX0JQUE1PREVfTUFTSwkJCSgweGYgPDwgMikKKyNkZWZpbmUgV0lOQ09OMF9CUFBNT0RFX1NISUZUCQkJKDIpCisjZGVmaW5lIFdJTkNPTjBfQlBQTU9ERV8xQlBQCQkJKDB4MCA8PCAyKQorI2RlZmluZSBXSU5DT04wX0JQUE1PREVfMkJQUAkJCSgweDEgPDwgMikKKyNkZWZpbmUgV0lOQ09OMF9CUFBNT0RFXzRCUFAJCQkoMHgyIDw8IDIpCisjZGVmaW5lIFdJTkNPTjBfQlBQTU9ERV84QlBQX1BBTEVUVEUJCSgweDMgPDwgMikKKyNkZWZpbmUgV0lOQ09OMF9CUFBNT0RFXzE2QlBQXzU2NQkJKDB4NSA8PCAyKQorI2RlZmluZSBXSU5DT04wX0JQUE1PREVfMTZCUFBfMTU1NQkJKDB4NyA8PCAyKQorI2RlZmluZSBXSU5DT04wX0JQUE1PREVfMThCUFBfNjY2CQkoMHg4IDw8IDIpCisjZGVmaW5lIFdJTkNPTjBfQlBQTU9ERV8yNEJQUF84ODgJCSgweGIgPDwgMikKKworI2RlZmluZSBXSU5DT04xX0JMRF9QSVgJCQkJKDEgPDwgNikKKworI2RlZmluZSBXSU5DT04xX0FMUEhBX1NFTAkJCSgxIDw8IDEpCisjZGVmaW5lIFdJTkNPTjFfQlBQTU9ERV9NQVNLCQkJKDB4ZiA8PCAyKQorI2RlZmluZSBXSU5DT04xX0JQUE1PREVfU0hJRlQJCQkoMikKKyNkZWZpbmUgV0lOQ09OMV9CUFBNT0RFXzFCUFAJCQkoMHgwIDw8IDIpCisjZGVmaW5lIFdJTkNPTjFfQlBQTU9ERV8yQlBQCQkJKDB4MSA8PCAyKQorI2RlZmluZSBXSU5DT04xX0JQUE1PREVfNEJQUAkJCSgweDIgPDwgMikKKyNkZWZpbmUgV0lOQ09OMV9CUFBNT0RFXzhCUFBfUEFMRVRURQkJKDB4MyA8PCAyKQorI2RlZmluZSBXSU5DT04xX0JQUE1PREVfOEJQUF8xMjMyCQkoMHg0IDw8IDIpCisjZGVmaW5lIFdJTkNPTjFfQlBQTU9ERV8xNkJQUF81NjUJCSgweDUgPDwgMikKKyNkZWZpbmUgV0lOQ09OMV9CUFBNT0RFXzE2QlBQX0ExNTU1CQkoMHg2IDw8IDIpCisjZGVmaW5lIFdJTkNPTjFfQlBQTU9ERV8xNkJQUF9JMTU1NQkJKDB4NyA8PCAyKQorI2RlZmluZSBXSU5DT04xX0JQUE1PREVfMThCUFBfNjY2CQkoMHg4IDw8IDIpCisjZGVmaW5lIFdJTkNPTjFfQlBQTU9ERV8xOEJQUF9BMTY2NQkJKDB4OSA8PCAyKQorI2RlZmluZSBXSU5DT04xX0JQUE1PREVfMTlCUFBfQTE2NjYJCSgweGEgPDwgMikKKyNkZWZpbmUgV0lOQ09OMV9CUFBNT0RFXzI0QlBQXzg4OAkJKDB4YiA8PCAyKQorI2RlZmluZSBXSU5DT04xX0JQUE1PREVfMjRCUFBfQTE4ODcJCSgweGMgPDwgMikKKyNkZWZpbmUgV0lOQ09OMV9CUFBNT0RFXzI1QlBQX0ExODg4CQkoMHhkIDw8IDIpCisjZGVmaW5lIFdJTkNPTjFfQlBQTU9ERV8yOEJQUF9BNDg4OAkJKDB4ZCA8PCAyKQorCisKKyNkZWZpbmUgVklET1NEeEFfVE9QTEVGVF9YX01BU0sJCQkoMHg3ZmYgPDwgMTEpCisjZGVmaW5lIFZJRE9TRHhBX1RPUExFRlRfWF9TSElGVAkJKDExKQorI2RlZmluZSBWSURPU0R4QV9UT1BMRUZUX1hfTElNSVQJCSgweDdmZikKKyNkZWZpbmUgVklET1NEeEFfVE9QTEVGVF9YKF94KQkJCSgoX3gpIDw8IDExKQorCisjZGVmaW5lIFZJRE9TRHhBX1RPUExFRlRfWV9NQVNLCQkJKDB4N2ZmIDw8IDApCisjZGVmaW5lIFZJRE9TRHhBX1RPUExFRlRfWV9TSElGVAkJKDApCisjZGVmaW5lIFZJRE9TRHhBX1RPUExFRlRfWV9MSU1JVAkJKDB4N2ZmKQorI2RlZmluZSBWSURPU0R4QV9UT1BMRUZUX1koX3gpCQkJKChfeCkgPDwgMCkKKworI2RlZmluZSBWSURPU0R4Ql9CT1RSSUdIVF9YX01BU0sJCSgweDdmZiA8PCAxMSkKKyNkZWZpbmUgVklET1NEeEJfQk9UUklHSFRfWF9TSElGVAkJKDExKQorI2RlZmluZSBWSURPU0R4Ql9CT1RSSUdIVF9YX0xJTUlUCQkoMHg3ZmYpCisjZGVmaW5lIFZJRE9TRHhCX0JPVFJJR0hUX1goX3gpCQkJKChfeCkgPDwgMTEpCisKKyNkZWZpbmUgVklET1NEeEJfQk9UUklHSFRfWV9NQVNLCQkoMHg3ZmYgPDwgMCkKKyNkZWZpbmUgVklET1NEeEJfQk9UUklHSFRfWV9TSElGVAkJKDApCisjZGVmaW5lIFZJRE9TRHhCX0JPVFJJR0hUX1lfTElNSVQJCSgweDdmZikKKyNkZWZpbmUgVklET1NEeEJfQk9UUklHSFRfWShfeCkJCQkoKF94KSA8PCAwKQorCisvKiBGb3IgVklET1NEWzEuLjRdQyAqLworI2RlZmluZSBWSURJU0QxNENfQUxQSEEwX1IoX3gpCQkJKChfeCkgPDwgMjApCisjZGVmaW5lIFZJRElTRDE0Q19BTFBIQTBfR19NQVNLCQkJKDB4ZiA8PCAxNikKKyNkZWZpbmUgVklESVNEMTRDX0FMUEhBMF9HX1NISUZUCQkoMTYpCisjZGVmaW5lIFZJRElTRDE0Q19BTFBIQTBfR19MSU1JVAkJKDB4ZikKKyNkZWZpbmUgVklESVNEMTRDX0FMUEhBMF9HKF94KQkJCSgoX3gpIDw8IDE2KQorI2RlZmluZSBWSURJU0QxNENfQUxQSEEwX0JfTUFTSwkJCSgweGYgPDwgMTIpCisjZGVmaW5lIFZJRElTRDE0Q19BTFBIQTBfQl9TSElGVAkJKDEyKQorI2RlZmluZSBWSURJU0QxNENfQUxQSEEwX0JfTElNSVQJCSgweGYpCisjZGVmaW5lIFZJRElTRDE0Q19BTFBIQTBfQihfeCkJCQkoKF94KSA8PCAxMikKKyNkZWZpbmUgVklESVNEMTRDX0FMUEhBMV9SX01BU0sJCQkoMHhmIDw8IDgpCisjZGVmaW5lIFZJRElTRDE0Q19BTFBIQTFfUl9TSElGVAkJKDgpCisjZGVmaW5lIFZJRElTRDE0Q19BTFBIQTFfUl9MSU1JVAkJKDB4ZikKKyNkZWZpbmUgVklESVNEMTRDX0FMUEhBMV9SKF94KQkJCSgoX3gpIDw8IDgpCisjZGVmaW5lIFZJRElTRDE0Q19BTFBIQTFfR19NQVNLCQkJKDB4ZiA8PCA0KQorI2RlZmluZSBWSURJU0QxNENfQUxQSEExX0dfU0hJRlQJCSg0KQorI2RlZmluZSBWSURJU0QxNENfQUxQSEExX0dfTElNSVQJCSgweGYpCisjZGVmaW5lIFZJRElTRDE0Q19BTFBIQTFfRyhfeCkJCQkoKF94KSA8PCA0KQorI2RlZmluZSBWSURJU0QxNENfQUxQSEExX0JfTUFTSwkJCSgweGYgPDwgMCkKKyNkZWZpbmUgVklESVNEMTRDX0FMUEhBMV9CX1NISUZUCQkoMCkKKyNkZWZpbmUgVklESVNEMTRDX0FMUEhBMV9CX0xJTUlUCQkoMHhmKQorI2RlZmluZSBWSURJU0QxNENfQUxQSEExX0IoX3gpCQkJKChfeCkgPDwgMCkKKworLyogVmlkZW8gYnVmZmVyIGFkZHJlc3NlcyAqLworI2RlZmluZSBWSURXX0JVRl9TVEFSVChfYnVmZikJCQkoMHhBMCArICgoX2J1ZmYpICogOCkpCisjZGVmaW5lIFZJRFdfQlVGX1NUQVJUMShfYnVmZikJCQkoMHhBNCArICgoX2J1ZmYpICogOCkpCisjZGVmaW5lIFZJRFdfQlVGX0VORChfYnVmZikJCQkoMHhEMCArICgoX2J1ZmYpICogOCkpCisjZGVmaW5lIFZJRFdfQlVGX0VORDEoX2J1ZmYpCQkJKDB4RDQgKyAoKF9idWZmKSAqIDgpKQorI2RlZmluZSBWSURXX0JVRl9TSVpFKF9idWZmKQkJCSgweDEwMCArICgoX2J1ZmYpICogNCkpCisKKyNkZWZpbmUgVklEV19CVUZfU0laRV9PRkZTRVRfTUFTSwkJKDB4MWZmZiA8PCAxMykKKyNkZWZpbmUgVklEV19CVUZfU0laRV9PRkZTRVRfU0hJRlQJCSgxMykKKyNkZWZpbmUgVklEV19CVUZfU0laRV9PRkZTRVRfTElNSVQJCSgweDFmZmYpCisjZGVmaW5lIFZJRFdfQlVGX1NJWkVfT0ZGU0VUKF94KQkJKChfeCkgPDwgMTMpCisKKyNkZWZpbmUgVklEV19CVUZfU0laRV9QQUdFV0lEVEhfTUFTSwkJKDB4MWZmZiA8PCAwKQorI2RlZmluZSBWSURXX0JVRl9TSVpFX1BBR0VXSURUSF9TSElGVAkJKDApCisjZGVmaW5lIFZJRFdfQlVGX1NJWkVfUEFHRVdJRFRIX0xJTUlUCQkoMHgxZmZmKQorI2RlZmluZSBWSURXX0JVRl9TSVpFX1BBR0VXSURUSChfeCkJCSgoX3gpIDw8IDApCisKKy8qIEludGVycnVwdCBjb250cm9scyBhbmQgc3RhdHVzICovCisKKyNkZWZpbmUgVklESU5UQ09OMF9GSUZPSU5URVJWQUxfTUFTSwkJKDB4M2YgPDwgMjApCisjZGVmaW5lIFZJRElOVENPTjBfRklGT0lOVEVSVkFMX1NISUZUCQkoMjApCisjZGVmaW5lIFZJRElOVENPTjBfRklGT0lOVEVSVkFMX0xJTUlUCQkoMHgzZikKKyNkZWZpbmUgVklESU5UQ09OMF9GSUZPSU5URVJWQUwoX3gpCQkoKF94KSA8PCAyMCkKKworI2RlZmluZSBWSURJTlRDT04wX0lOVF9TWVNNQUlOQ09OCQkoMSA8PCAxOSkKKyNkZWZpbmUgVklESU5UQ09OMF9JTlRfU1lTU1VCQ09OCQkoMSA8PCAxOCkKKyNkZWZpbmUgVklESU5UQ09OMF9JTlRfSTgwSUZET05FCQkoMSA8PCAxNykKKworI2RlZmluZSBWSURJTlRDT04wX0ZSQU1FU0VMMF9NQVNLCQkoMHgzIDw8IDE1KQorI2RlZmluZSBWSURJTlRDT04wX0ZSQU1FU0VMMF9TSElGVAkJKDE1KQorI2RlZmluZSBWSURJTlRDT04wX0ZSQU1FU0VMMF9CQUNLUE9SQ0gJCSgweDAgPDwgMTUpCisjZGVmaW5lIFZJRElOVENPTjBfRlJBTUVTRUwwX1ZTWU5DCQkoMHgxIDw8IDE1KQorI2RlZmluZSBWSURJTlRDT04wX0ZSQU1FU0VMMF9BQ1RJVkUJCSgweDIgPDwgMTUpCisjZGVmaW5lIFZJRElOVENPTjBfRlJBTUVTRUwwX0ZST05UUE9SQ0gJCSgweDMgPDwgMTUpCisKKyNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDEJCQkoMSA8PCAxNCkKKyNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDFfTk9ORQkJKDB4MCA8PCAxNCkKKyNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDFfQkFDS1BPUkNICQkoMHgxIDw8IDE0KQorI2RlZmluZSBWSURJTlRDT04wX0ZSQU1FU0VMMV9WU1lOQwkJKDB4MiA8PCAxNCkKKyNkZWZpbmUgVklESU5UQ09OMF9GUkFNRVNFTDFfRlJPTlRQT1JDSAkJKDB4MyA8PCAxNCkKKworI2RlZmluZSBWSURJTlRDT04wX0lOVF9GUkFNRQkJCSgxIDw8IDEyKQorI2RlZmluZSBWSURJTlRDT04wX0ZJRklPU0VMX01BU0sJCSgweDdmIDw8IDUpCisjZGVmaW5lIFZJRElOVENPTjBfRklGSU9TRUxfU0hJRlQJCSg1KQorI2RlZmluZSBWSURJTlRDT04wX0ZJRklPU0VMX1dJTkRPVzAJCSgweDEgPDwgNSkKKyNkZWZpbmUgVklESU5UQ09OMF9GSUZJT1NFTF9XSU5ET1cxCQkoMHgyIDw8IDUpCisKKyNkZWZpbmUgVklESU5UQ09OMF9GSUZPTEVWRUxfTUFTSwkJKDB4NyA8PCAyKQorI2RlZmluZSBWSURJTlRDT04wX0ZJRk9MRVZFTF9TSElGVAkJKDIpCisjZGVmaW5lIFZJRElOVENPTjBfRklGT0xFVkVMX1RPMjVQQwkJKDB4MCA8PCAyKQorI2RlZmluZSBWSURJTlRDT04wX0ZJRk9MRVZFTF9UTzUwUEMJCSgweDEgPDwgMikKKyNkZWZpbmUgVklESU5UQ09OMF9GSUZPTEVWRUxfVE83NVBDCQkoMHgyIDw8IDIpCisjZGVmaW5lIFZJRElOVENPTjBfRklGT0xFVkVMX0VNUFRZCQkoMHgzIDw8IDIpCisjZGVmaW5lIFZJRElOVENPTjBfRklGT0xFVkVMX0ZVTEwJCSgweDQgPDwgMikKKworI2RlZmluZSBWSURJTlRDT04wX0lOVF9GSUZPX01BU0sJCSgweDMgPDwgMCkKKyNkZWZpbmUgVklESU5UQ09OMF9JTlRfRklGT19TSElGVAkJKDApCisjZGVmaW5lIFZJRElOVENPTjBfSU5UX0VOQUJMRQkJCSgxIDw8IDApCisKKyNkZWZpbmUgVklESU5UQ09OMQkJCQkoMHgxMzQpCisjZGVmaW5lIFZJRElOVENPTjFfSU5UX0kxODAJCQkoMSA8PCAyKQorI2RlZmluZSBWSURJTlRDT04xX0lOVF9GUkFNRQkJCSgxIDw8IDEpCisjZGVmaW5lIFZJRElOVENPTjFfSU5UX0ZJRk8JCQkoMSA8PCAwKQorCisvKiBXaW5kb3cgY29sb3VyLWtleSBjb250cm9sIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFd4S0VZQ09OMF9LRVlCTF9FTgkJCSgxIDw8IDI2KQorI2RlZmluZSBXeEtFWUNPTjBfS0VZRU5fRgkJCSgxIDw8IDI1KQorI2RlZmluZSBXeEtFWUNPTjBfRElSQ09OCQkJKDEgPDwgMjQpCisjZGVmaW5lIFd4S0VZQ09OMF9DT01QS0VZX01BU0sJCQkoMHhmZmZmZmYgPDwgMCkKKyNkZWZpbmUgV3hLRVlDT04wX0NPTVBLRVlfU0hJRlQJCQkoMCkKKyNkZWZpbmUgV3hLRVlDT04wX0NPTVBLRVlfTElNSVQJCQkoMHhmZmZmZmYpCisjZGVmaW5lIFd4S0VZQ09OMF9DT01QS0VZKF94KQkJCSgoX3gpIDw8IDApCisjZGVmaW5lIFd4S0VZQ09OMV9DT0xWQUxfTUFTSwkJCSgweGZmZmZmZiA8PCAwKQorI2RlZmluZSBXeEtFWUNPTjFfQ09MVkFMX1NISUZUCQkJKDApCisjZGVmaW5lIFd4S0VZQ09OMV9DT0xWQUxfTElNSVQJCQkoMHhmZmZmZmYpCisjZGVmaW5lIFd4S0VZQ09OMV9DT0xWQUwoX3gpCQkJKChfeCkgPDwgMCkKKworCisvKiBXaW5kb3cgYmxhbmtpbmcgKE1BUCkgKi8KKworI2RlZmluZSBXSU54TUFQX01BUAkJCQkoMSA8PCAyNCkKKyNkZWZpbmUgV0lOeE1BUF9NQVBfQ09MT1VSX01BU0sJCQkoMHhmZmZmZmYgPDwgMCkKKyNkZWZpbmUgV0lOeE1BUF9NQVBfQ09MT1VSX1NISUZUCQkoMCkKKyNkZWZpbmUgV0lOeE1BUF9NQVBfQ09MT1VSX0xJTUlUCQkoMHhmZmZmZmYpCisjZGVmaW5lIFdJTnhNQVBfTUFQX0NPTE9VUihfeCkJCQkoKF94KSA8PCAwKQorCisjZGVmaW5lIFdQQUxDT05fUEFMX1VQREFURQkJCSgxIDw8IDkpCisjZGVmaW5lIFdQQUxDT05fVzFQQUxfTUFTSwkJCSgweDcgPDwgMykKKyNkZWZpbmUgV1BBTENPTl9XMVBBTF9TSElGVAkJCSgzKQorI2RlZmluZSBXUEFMQ09OX1cxUEFMXzI1QlBQX0E4ODgJCSgweDAgPDwgMykKKyNkZWZpbmUgV1BBTENPTl9XMVBBTF8yNEJQUAkJCSgweDEgPDwgMykKKyNkZWZpbmUgV1BBTENPTl9XMVBBTF8xOUJQUF9BNjY2CQkoMHgyIDw8IDMpCisjZGVmaW5lIFdQQUxDT05fVzFQQUxfMThCUFBfQTY2NQkJKDB4MyA8PCAzKQorI2RlZmluZSBXUEFMQ09OX1cxUEFMXzE4QlBQCQkJKDB4NCA8PCAzKQorI2RlZmluZSBXUEFMQ09OX1cxUEFMXzE2QlBQX0E1NTUJCSgweDUgPDwgMykKKyNkZWZpbmUgV1BBTENPTl9XMVBBTF8xNkJQUF81NjUJCQkoMHg2IDw8IDMpCisKKyNkZWZpbmUgV1BBTENPTl9XMFBBTF9NQVNLCQkJKDB4NyA8PCAwKQorI2RlZmluZSBXUEFMQ09OX1cwUEFMX1NISUZUCQkJKDApCisjZGVmaW5lIFdQQUxDT05fVzBQQUxfMjVCUFBfQTg4OAkJKDB4MCA8PCAwKQorI2RlZmluZSBXUEFMQ09OX1cwUEFMXzI0QlBQCQkJKDB4MSA8PCAwKQorI2RlZmluZSBXUEFMQ09OX1cwUEFMXzE5QlBQX0E2NjYJCSgweDIgPDwgMCkKKyNkZWZpbmUgV1BBTENPTl9XMFBBTF8xOEJQUF9BNjY1CQkoMHgzIDw8IDApCisjZGVmaW5lIFdQQUxDT05fVzBQQUxfMThCUFAJCQkoMHg0IDw8IDApCisjZGVmaW5lIFdQQUxDT05fVzBQQUxfMTZCUFBfQTU1NQkJKDB4NSA8PCAwKQorI2RlZmluZSBXUEFMQ09OX1cwUEFMXzE2QlBQXzU2NQkJCSgweDYgPDwgMCkKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtaWljLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3MtaWljLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLWlpYy5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3MtaWljLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLWlycXR5cGUuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy1pcnF0eXBlLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLWlycXR5cGUuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9yZWdzLWlycXR5cGUuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtbmFuZC5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9yZWdzLW5hbmQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtbmFuZC5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3MtbmFuZC5oCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1ydGMuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy1ydGMuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtcnRjLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy1ydGMuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtczNjMjQxMi1paXMuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy1zM2MyNDEyLWlpcy5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1zM2MyNDEyLWlpcy5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3MtczNjMjQxMi1paXMuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3Mtc2RoY2kuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy1zZGhjaS5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy1zZGhjaS5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3Mtc2RoY2kuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9yZWdzLXNlcmlhbC5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9yZWdzLXNlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZWJhODQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3Mtc2VyaWFsLmgKQEAgLTAsMCArMSwyODEgQEAKKy8qIGFyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy1zZXJpYWwuaAorICoKKyAqICBGcm9tIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9zZXJpYWxfczNjMjQxMC5oCisgKgorICogIEludGVybmFsIGhlYWRlciBmaWxlIGZvciBTYW1zdW5nIFMzQzI0MTAgc2VyaWFsIHBvcnRzIChVQVJUMC0yKQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgU2hhbmUgTmF5IChzaGFuZUBtaW5pcmwuY29tKQorICoKKyAqICBBZGRpdGlvbmFsIGRlZmluZXMsIENvcHlyaWdodCAyMDAzIFNpbXRlYyBFbGVjdHJvbmljcyAobGludXhAc2ltdGVjLmNvLnVrKQorICoKKyAqICBBZGFwdGVkIGZyb206CisgKgorICogIEludGVybmFsIGhlYWRlciBmaWxlIGZvciBNWDFBRFMgc2VyaWFsIHBvcnRzIChVQVJUMSAmIDIpCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMiBTaGFuZSBOYXkgKHNoYW5lQG1pbmlybC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2lmbmRlZiBfX0FTTV9BUk1fUkVHU19TRVJJQUxfSAorI2RlZmluZSBfX0FTTV9BUk1fUkVHU19TRVJJQUxfSAorCisjZGVmaW5lIFMzQzI0WFhfVkFfVUFSVDAgICAgICAoUzNDX1ZBX1VBUlQpCisjZGVmaW5lIFMzQzI0WFhfVkFfVUFSVDEgICAgICAoUzNDX1ZBX1VBUlQgKyAweDQwMDAgKQorI2RlZmluZSBTM0MyNFhYX1ZBX1VBUlQyICAgICAgKFMzQ19WQV9VQVJUICsgMHg4MDAwICkKKyNkZWZpbmUgUzNDMjRYWF9WQV9VQVJUMyAgICAgIChTM0NfVkFfVUFSVCArIDB4QzAwMCApCisKKyNkZWZpbmUgUzNDMjQxMF9QQV9VQVJUMCAgICAgIChTM0MyNFhYX1BBX1VBUlQpCisjZGVmaW5lIFMzQzI0MTBfUEFfVUFSVDEgICAgICAoUzNDMjRYWF9QQV9VQVJUICsgMHg0MDAwICkKKyNkZWZpbmUgUzNDMjQxMF9QQV9VQVJUMiAgICAgIChTM0MyNFhYX1BBX1VBUlQgKyAweDgwMDAgKQorI2RlZmluZSBTM0MyNDQzX1BBX1VBUlQzICAgICAgKFMzQzI0WFhfUEFfVUFSVCArIDB4QzAwMCApCisKKyNkZWZpbmUgUzNDMjQxMF9VUlhICSAgKDB4MjQpCisjZGVmaW5lIFMzQzI0MTBfVVRYSAkgICgweDIwKQorI2RlZmluZSBTM0MyNDEwX1VMQ09OCSAgKDB4MDApCisjZGVmaW5lIFMzQzI0MTBfVUNPTgkgICgweDA0KQorI2RlZmluZSBTM0MyNDEwX1VGQ09OCSAgKDB4MDgpCisjZGVmaW5lIFMzQzI0MTBfVU1DT04JICAoMHgwQykKKyNkZWZpbmUgUzNDMjQxMF9VQlJESVYJICAoMHgyOCkKKyNkZWZpbmUgUzNDMjQxMF9VVFJTVEFUCSAgKDB4MTApCisjZGVmaW5lIFMzQzI0MTBfVUVSU1RBVAkgICgweDE0KQorI2RlZmluZSBTM0MyNDEwX1VGU1RBVAkgICgweDE4KQorI2RlZmluZSBTM0MyNDEwX1VNU1RBVAkgICgweDFDKQorCisjZGVmaW5lIFMzQzI0MTBfTENPTl9DRkdNQVNLCSAgKCgweEY8PDMpfCgweDMpKQorCisjZGVmaW5lIFMzQzI0MTBfTENPTl9DUzUJICAoMHgwKQorI2RlZmluZSBTM0MyNDEwX0xDT05fQ1M2CSAgKDB4MSkKKyNkZWZpbmUgUzNDMjQxMF9MQ09OX0NTNwkgICgweDIpCisjZGVmaW5lIFMzQzI0MTBfTENPTl9DUzgJICAoMHgzKQorI2RlZmluZSBTM0MyNDEwX0xDT05fQ1NNQVNLCSAgKDB4MykKKworI2RlZmluZSBTM0MyNDEwX0xDT05fUE5PTkUJICAoMHgwKQorI2RlZmluZSBTM0MyNDEwX0xDT05fUEVWRU4JICAoMHg1IDw8IDMpCisjZGVmaW5lIFMzQzI0MTBfTENPTl9QT0RECSAgKDB4NCA8PCAzKQorI2RlZmluZSBTM0MyNDEwX0xDT05fUE1BU0sJICAoMHg3IDw8IDMpCisKKyNkZWZpbmUgUzNDMjQxMF9MQ09OX1NUT1BCCSAgKDE8PDIpCisjZGVmaW5lIFMzQzI0MTBfTENPTl9JUk0gICAgICAgICAgKDE8PDYpCisKKyNkZWZpbmUgUzNDMjQ0MF9VQ09OX0NMS01BU0sJICAoMzw8MTApCisjZGVmaW5lIFMzQzI0NDBfVUNPTl9QQ0xLCSAgKDA8PDEwKQorI2RlZmluZSBTM0MyNDQwX1VDT05fVUNMSwkgICgxPDwxMCkKKyNkZWZpbmUgUzNDMjQ0MF9VQ09OX1BDTEsyCSAgKDI8PDEwKQorI2RlZmluZSBTM0MyNDQwX1VDT05fRkNMSwkgICgzPDwxMCkKKyNkZWZpbmUgUzNDMjQ0M19VQ09OX0VQTEwJICAoMzw8MTApCisKKyNkZWZpbmUgUzNDNjQwMF9VQ09OX0NMS01BU0sJKDM8PDEwKQorI2RlZmluZSBTM0M2NDAwX1VDT05fUENMSwkoMDw8MTApCisjZGVmaW5lIFMzQzY0MDBfVUNPTl9QQ0xLMgkoMjw8MTApCisjZGVmaW5lIFMzQzY0MDBfVUNPTl9VQ0xLMAkoMTw8MTApCisjZGVmaW5lIFMzQzY0MDBfVUNPTl9VQ0xLMQkoMzw8MTApCisKKyNkZWZpbmUgUzNDMjQ0MF9VQ09OMl9GQ0xLX0VOCSAgKDE8PDE1KQorI2RlZmluZSBTM0MyNDQwX1VDT04wX0RJVk1BU0sJICAoMTUgPDwgMTIpCisjZGVmaW5lIFMzQzI0NDBfVUNPTjFfRElWTUFTSwkgICgxNSA8PCAxMikKKyNkZWZpbmUgUzNDMjQ0MF9VQ09OMl9ESVZNQVNLCSAgKDcgPDwgMTIpCisjZGVmaW5lIFMzQzI0NDBfVUNPTl9ESVZTSElGVAkgICgxMikKKworI2RlZmluZSBTM0MyNDEyX1VDT05fQ0xLTUFTSwkoMzw8MTApCisjZGVmaW5lIFMzQzI0MTJfVUNPTl9VQ0xLCSgxPDwxMCkKKyNkZWZpbmUgUzNDMjQxMl9VQ09OX1VTWVNDTEsJKDM8PDEwKQorI2RlZmluZSBTM0MyNDEyX1VDT05fUENMSwkoMDw8MTApCisjZGVmaW5lIFMzQzI0MTJfVUNPTl9QQ0xLMgkoMjw8MTApCisKKyNkZWZpbmUgUzNDMjQxMF9VQ09OX1VDTEsJICAoMTw8MTApCisjZGVmaW5lIFMzQzI0MTBfVUNPTl9TQlJFQUsJICAoMTw8NCkKKworI2RlZmluZSBTM0MyNDEwX1VDT05fVFhJTEVWRUwJICAoMTw8OSkKKyNkZWZpbmUgUzNDMjQxMF9VQ09OX1JYSUxFVkVMCSAgKDE8PDgpCisjZGVmaW5lIFMzQzI0MTBfVUNPTl9UWElSUU1PREUJICAoMTw8MikKKyNkZWZpbmUgUzNDMjQxMF9VQ09OX1JYSVJRTU9ERQkgICgxPDwwKQorI2RlZmluZSBTM0MyNDEwX1VDT05fUlhGSUZPX1RPSQkgICgxPDw3KQorI2RlZmluZSBTM0MyNDQzX1VDT05fUlhFUlJfSVJRRU4gICgxPDw2KQorI2RlZmluZSBTM0MyNDQzX1VDT05fTE9PUEJBQ0sJICAoMTw8NSkKKworI2RlZmluZSBTM0MyNDEwX1VDT05fREVGQVVMVAkgIChTM0MyNDEwX1VDT05fVFhJTEVWRUwgIHwgXAorCQkJCSAgIFMzQzI0MTBfVUNPTl9SWElMRVZFTCAgfCBcCisJCQkJICAgUzNDMjQxMF9VQ09OX1RYSVJRTU9ERSB8IFwKKwkJCQkgICBTM0MyNDEwX1VDT05fUlhJUlFNT0RFIHwgXAorCQkJCSAgIFMzQzI0MTBfVUNPTl9SWEZJRk9fVE9JKQorCisjZGVmaW5lIFMzQzI0MTBfVUZDT05fRklGT01PREUJICAoMTw8MCkKKyNkZWZpbmUgUzNDMjQxMF9VRkNPTl9UWFRSSUcwCSAgKDA8PDYpCisjZGVmaW5lIFMzQzI0MTBfVUZDT05fUlhUUklHOAkgICgxPDw0KQorI2RlZmluZSBTM0MyNDEwX1VGQ09OX1JYVFJJRzEyCSAgKDI8PDQpCisKKy8qIFMzQzI0NDAgRklGTyB0cmlnZ2VyIGxldmVscyAqLworI2RlZmluZSBTM0MyNDQwX1VGQ09OX1JYVFJJRzEJICAoMDw8NCkKKyNkZWZpbmUgUzNDMjQ0MF9VRkNPTl9SWFRSSUc4CSAgKDE8PDQpCisjZGVmaW5lIFMzQzI0NDBfVUZDT05fUlhUUklHMTYJICAoMjw8NCkKKyNkZWZpbmUgUzNDMjQ0MF9VRkNPTl9SWFRSSUczMgkgICgzPDw0KQorCisjZGVmaW5lIFMzQzI0NDBfVUZDT05fVFhUUklHMAkgICgwPDw2KQorI2RlZmluZSBTM0MyNDQwX1VGQ09OX1RYVFJJRzE2CSAgKDE8PDYpCisjZGVmaW5lIFMzQzI0NDBfVUZDT05fVFhUUklHMzIJICAoMjw8NikKKyNkZWZpbmUgUzNDMjQ0MF9VRkNPTl9UWFRSSUc0OAkgICgzPDw2KQorCisjZGVmaW5lIFMzQzI0MTBfVUZDT05fUkVTRVRCT1RICSAgKDM8PDEpCisjZGVmaW5lIFMzQzI0MTBfVUZDT05fUkVTRVRUWAkgICgxPDwyKQorI2RlZmluZSBTM0MyNDEwX1VGQ09OX1JFU0VUUlgJICAoMTw8MSkKKworI2RlZmluZSBTM0MyNDEwX1VGQ09OX0RFRkFVTFQJICAoUzNDMjQxMF9VRkNPTl9GSUZPTU9ERSB8IFwKKwkJCQkgICBTM0MyNDEwX1VGQ09OX1RYVFJJRzAgIHwgXAorCQkJCSAgIFMzQzI0MTBfVUZDT05fUlhUUklHOCApCisKKyNkZWZpbmUJUzNDMjQxMF9VTUNPTV9BRkMJICAoMTw8NCkKKyNkZWZpbmUJUzNDMjQxMF9VTUNPTV9SVFNfTE9XCSAgKDE8PDApCisKKyNkZWZpbmUgUzNDMjQxMl9VTUNPTl9BRkNfNjMJKDA8PDUpCQkvKiBzYW1lIGFzIHMzYzI0NDMgKi8KKyNkZWZpbmUgUzNDMjQxMl9VTUNPTl9BRkNfNTYJKDE8PDUpCisjZGVmaW5lIFMzQzI0MTJfVU1DT05fQUZDXzQ4CSgyPDw1KQorI2RlZmluZSBTM0MyNDEyX1VNQ09OX0FGQ180MAkoMzw8NSkKKyNkZWZpbmUgUzNDMjQxMl9VTUNPTl9BRkNfMzIJKDQ8PDUpCisjZGVmaW5lIFMzQzI0MTJfVU1DT05fQUZDXzI0CSg1PDw1KQorI2RlZmluZSBTM0MyNDEyX1VNQ09OX0FGQ18xNgkoNjw8NSkKKyNkZWZpbmUgUzNDMjQxMl9VTUNPTl9BRkNfOAkoNzw8NSkKKworI2RlZmluZSBTM0MyNDEwX1VGU1RBVF9UWEZVTEwJICAoMTw8OSkKKyNkZWZpbmUgUzNDMjQxMF9VRlNUQVRfUlhGVUxMCSAgKDE8PDgpCisjZGVmaW5lIFMzQzI0MTBfVUZTVEFUX1RYTUFTSwkgICgxNTw8NCkKKyNkZWZpbmUgUzNDMjQxMF9VRlNUQVRfVFhTSElGVAkgICg0KQorI2RlZmluZSBTM0MyNDEwX1VGU1RBVF9SWE1BU0sJICAoMTU8PDApCisjZGVmaW5lIFMzQzI0MTBfVUZTVEFUX1JYU0hJRlQJICAoMCkKKworLyogVUZTVEFUIFMzQzI0QTAgKi8KKyNkZWZpbmUgUzNDMjRBMF9VRlNUQVRfVFhGVUxMCSAgKDEgPDwgMTQpCisjZGVmaW5lIFMzQzI0QTBfVUZTVEFUX1JYRlVMTAkgICgxIDw8IDYpCisjZGVmaW5lIFMzQzI0QTBfVUZTVEFUX1RYTUFTSwkgICg2MyA8PCA4KQorI2RlZmluZSBTM0MyNEEwX1VGU1RBVF9UWFNISUZUCSAgKDgpCisjZGVmaW5lIFMzQzI0QTBfVUZTVEFUX1JYTUFTSwkgICg2MykKKyNkZWZpbmUgUzNDMjRBMF9VRlNUQVRfUlhTSElGVAkgICgwKQorCisvKiBVRlNUQVQgUzNDMjQ0MyBzYW1lIGFzIFMzQzI0NDAgKi8KKyNkZWZpbmUgUzNDMjQ0MF9VRlNUQVRfVFhGVUxMCSAgKDE8PDE0KQorI2RlZmluZSBTM0MyNDQwX1VGU1RBVF9SWEZVTEwJICAoMTw8NikKKyNkZWZpbmUgUzNDMjQ0MF9VRlNUQVRfVFhTSElGVAkgICg4KQorI2RlZmluZSBTM0MyNDQwX1VGU1RBVF9SWFNISUZUCSAgKDApCisjZGVmaW5lIFMzQzI0NDBfVUZTVEFUX1RYTUFTSwkgICg2Mzw8OCkKKyNkZWZpbmUgUzNDMjQ0MF9VRlNUQVRfUlhNQVNLCSAgKDYzKQorCisjZGVmaW5lIFMzQzI0MTBfVVRSU1RBVF9UWEUJICAoMTw8MikKKyNkZWZpbmUgUzNDMjQxMF9VVFJTVEFUX1RYRkUJICAoMTw8MSkKKyNkZWZpbmUgUzNDMjQxMF9VVFJTVEFUX1JYRFIJICAoMTw8MCkKKworI2RlZmluZSBTM0MyNDEwX1VFUlNUQVRfT1ZFUlJVTgkgICgxPDwwKQorI2RlZmluZSBTM0MyNDEwX1VFUlNUQVRfRlJBTUUJICAoMTw8MikKKyNkZWZpbmUgUzNDMjQxMF9VRVJTVEFUX0JSRUFLCSAgKDE8PDMpCisjZGVmaW5lIFMzQzI0NDNfVUVSU1RBVF9QQVJJVFkJICAoMTw8MSkKKworI2RlZmluZSBTM0MyNDEwX1VFUlNUQVRfQU5ZCSAgKFMzQzI0MTBfVUVSU1RBVF9PVkVSUlVOIHwgXAorCQkJCSAgIFMzQzI0MTBfVUVSU1RBVF9GUkFNRSB8IFwKKwkJCQkgICBTM0MyNDEwX1VFUlNUQVRfQlJFQUspCisKKyNkZWZpbmUgUzNDMjQxMF9VTVNUQVRfQ1RTCSAgKDE8PDApCisjZGVmaW5lIFMzQzI0MTBfVU1TVEFUX0RlbHRhQ1RTCSAgKDE8PDIpCisKKyNkZWZpbmUgUzNDMjQ0M19ESVZTTE9UCQkgICgweDJDKQorCisvKiBTM0M2NFhYIGludGVycnVwdCByZWdpc3RlcnMuICovCisjZGVmaW5lIFMzQzY0WFhfVUlOVFAJCTB4MzAKKyNkZWZpbmUgUzNDNjRYWF9VSU5UU1AJCTB4MzQKKyNkZWZpbmUgUzNDNjRYWF9VSU5UTQkJMHgzOAorCisvKiBGb2xsb3dpbmcgYXJlIHNwZWNpZmljIHRvIFM1UFYyMTAgYW5kIFM1UDY0NDIgKi8KKyNkZWZpbmUgUzVQVjIxMF9VQ09OX0NMS01BU0sJKDE8PDEwKQorI2RlZmluZSBTNVBWMjEwX1VDT05fUENMSwkoMDw8MTApCisjZGVmaW5lIFM1UFYyMTBfVUNPTl9VQ0xLCSgxPDwxMCkKKworI2RlZmluZSBTNVBWMjEwX1VGQ09OX1RYVFJJRzAJKDA8PDgpCisjZGVmaW5lIFM1UFYyMTBfVUZDT05fVFhUUklHNAkoMTw8OCkKKyNkZWZpbmUgUzVQVjIxMF9VRkNPTl9UWFRSSUc4CSgyPDw4KQorI2RlZmluZSBTNVBWMjEwX1VGQ09OX1RYVFJJRzE2CSgzPDw4KQorI2RlZmluZSBTNVBWMjEwX1VGQ09OX1RYVFJJRzMyCSg0PDw4KQorI2RlZmluZSBTNVBWMjEwX1VGQ09OX1RYVFJJRzY0CSg1PDw4KQorI2RlZmluZSBTNVBWMjEwX1VGQ09OX1RYVFJJRzEyOCAoNjw8OCkKKyNkZWZpbmUgUzVQVjIxMF9VRkNPTl9UWFRSSUcyNTYgKDc8PDgpCisKKyNkZWZpbmUgUzVQVjIxMF9VRkNPTl9SWFRSSUcxCSgwPDw0KQorI2RlZmluZSBTNVBWMjEwX1VGQ09OX1JYVFJJRzQJKDE8PDQpCisjZGVmaW5lIFM1UFYyMTBfVUZDT05fUlhUUklHOAkoMjw8NCkKKyNkZWZpbmUgUzVQVjIxMF9VRkNPTl9SWFRSSUcxNgkoMzw8NCkKKyNkZWZpbmUgUzVQVjIxMF9VRkNPTl9SWFRSSUczMgkoNDw8NCkKKyNkZWZpbmUgUzVQVjIxMF9VRkNPTl9SWFRSSUc2NAkoNTw8NCkKKyNkZWZpbmUgUzVQVjIxMF9VRkNPTl9SWFRSSUcxMjgJKDY8PDQpCisjZGVmaW5lIFM1UFYyMTBfVUZDT05fUlhUUklHMjU2CSg3PDw0KQorCisjZGVmaW5lIFM1UFYyMTBfVUZTVEFUX1RYRlVMTAkoMTw8MjQpCisjZGVmaW5lIFM1UFYyMTBfVUZTVEFUX1JYRlVMTAkoMTw8OCkKKyNkZWZpbmUgUzVQVjIxMF9VRlNUQVRfVFhNQVNLCSgyNTU8PDE2KQorI2RlZmluZSBTNVBWMjEwX1VGU1RBVF9UWFNISUZUCSgxNikKKyNkZWZpbmUgUzVQVjIxMF9VRlNUQVRfUlhNQVNLCSgyNTU8PDApCisjZGVmaW5lIFM1UFYyMTBfVUZTVEFUX1JYU0hJRlQJKDApCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKy8qIHN0cnVjdCBzM2MyNHh4X3VhcnRfY2xrc3JjCisgKgorICogdGhpcyBzdHJ1Y3R1cmUgZGVmaW5lcyBhIG5hbWVkIGNsb2NrIHNvdXJjZSB0aGF0IGNhbiBiZSB1c2VkIGZvciB0aGUKKyAqIHVhcnQsIHNvIHRoYXQgdGhlIGJlc3QgY2xvY2sgY2FuIGJlIHNlbGVjdGVkIGZvciB0aGUgcmVxdWVzdGVkIGJhdWQKKyAqIHJhdGUuCisgKgorICogbWluX2JhdWQgYW5kIG1heF9iYXVkIGRlZmluZSB0aGUgcmFuZ2Ugb2YgYmF1ZC1yYXRlcyB0aGlzIGNsb2NrIGlzCisgKiBhY2NlcHRhYmxlIGZvciwgaWYgdGhleSBhcmUgYm90aCB6ZXJvLCBpdCBpcyBhc3N1bWVkIGFueSBiYXVkIHJhdGUgdGhhdAorICogY2FuIGJlIGdlbmVyYXRlZCBmcm9tIHRoaXMgY2xvY2sgd2lsbCBiZSB1c2VkLgorICoKKyAqIGRpdmlzb3IgZ2l2ZXMgdGhlIGRpdmlzb3IgZnJvbSB0aGUgY2xvY2sgdG8gdGhlIG9uZSBzZWVuIGJ5IHRoZSB1YXJ0CisqLworCitzdHJ1Y3QgczNjMjR4eF91YXJ0X2Nsa3NyYyB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwl1bnNpZ25lZCBpbnQJIGRpdmlzb3I7CisJdW5zaWduZWQgaW50CSBtaW5fYmF1ZDsKKwl1bnNpZ25lZCBpbnQJIG1heF9iYXVkOworfTsKKworLyogY29uZmlndXJhdGlvbiBzdHJ1Y3R1cmUgZm9yIHBlci1tYWNoaW5lIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUKKyAqIHNlcmlhbCBwb3J0CisgKgorICogdGhlIHBvaW50ZXIgaXMgc2V0dXAgYnkgdGhlIG1hY2hpbmUgc3BlY2lmaWMgaW5pdGlhbGlzYXRpb24gZnJvbSB0aGUKKyAqIGFyY2gvYXJtL21hY2gtczNjMjQxMC8gZGlyZWN0b3J5LgorKi8KKworc3RydWN0IHMzYzI0MTBfdWFydGNmZyB7CisJdW5zaWduZWQgY2hhcgkgICBod3BvcnQ7CSAvKiBoYXJkd2FyZSBwb3J0IG51bWJlciAqLworCXVuc2lnbmVkIGNoYXIJICAgdW51c2VkOworCXVuc2lnbmVkIHNob3J0CSAgIGZsYWdzOworCXVwZl90CQkgICB1YXJ0X2ZsYWdzOwkgLyogZGVmYXVsdCB1YXJ0IGZsYWdzICovCisKKwl1bnNpZ25lZCBsb25nCSAgIHVjb247CSAvKiB2YWx1ZSBvZiB1Y29uIGZvciBwb3J0ICovCisJdW5zaWduZWQgbG9uZwkgICB1bGNvbjsJIC8qIHZhbHVlIG9mIHVsY29uIGZvciBwb3J0ICovCisJdW5zaWduZWQgbG9uZwkgICB1ZmNvbjsJIC8qIHZhbHVlIG9mIHVmY29uIGZvciBwb3J0ICovCisKKwlzdHJ1Y3QgczNjMjR4eF91YXJ0X2Nsa3NyYyAqY2xvY2tzOworCXVuc2lnbmVkIGludAkJICAgIGNsb2Nrc19zaXplOworfTsKKworLyogczNjMjR4eF91YXJ0X2RldnMKKyAqCisgKiB0aGlzIGlzIGV4cG9ydGVkIGZyb20gdGhlIGNvcmUgYXMgd2UgY2Fubm90IHVzZSBkcml2ZXJfcmVnaXN0ZXIoKSwKKyAqIG9yIHBsYXRmb3JtX2FkZF9kZXZpY2UoKSBiZWZvcmUgdGhlIGNvbnNvbGVfaW5pdGNhbGwoKQorKi8KKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnMzYzI0eHhfdWFydF9kZXZzWzRdOworCisjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfX0FTTV9BUk1fUkVHU19TRVJJQUxfSCAqLworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy10aW1lci5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9yZWdzLXRpbWVyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXRpbWVyLmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvcmVncy10aW1lci5oCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3MtdXNiLWhzb3RnLXBoeS5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9yZWdzLXVzYi1oc290Zy1waHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTExYWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9yZWdzLXVzYi1oc290Zy1waHkuaApAQCAtMCwwICsxLDUwIEBACisvKiBhcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvcmVncy11c2ItaHNvdGctcGh5LmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MgLSBVU0IyLjAgSGlnaHNwZWVkL090RyBkZXZpY2UgUEhZIHJlZ2lzdGVycworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisvKiBOb3RlLCB0aGlzIGlzIGEgc2VwYXJhdGUgaGVhZGVyIGZpbGUgYXMgc29tZSBvZiB0aGUgY2xvY2sgZnJhbWV3b3JrCisgKiBuZWVkcyB0byB0b3VjaCB0aGlzIGlmIHRoZSBjbGtfNDhtIGlzIHVzZWQgYXMgdGhlIFVTQiBPSENJIG9yIG90aGVyCisgKiBwZXJpcGhlcmFsIHNvdXJjZS4KKyovCisKKyNpZm5kZWYgX19QTEFUX1MzQzY0WFhfUkVHU19VU0JfSFNPVEdfUEhZX0gKKyNkZWZpbmUgX19QTEFUX1MzQzY0WFhfUkVHU19VU0JfSFNPVEdfUEhZX0ggX19GSUxFX18KKworLyogUzNDNjRYWF9QQV9VU0JfSFNQSFkgKi8KKworI2RlZmluZSBTM0NfSFNPVEdfUEhZUkVHKHgpCSgoeCkgKyBTM0NfVkFfVVNCX0hTUEhZKQorCisjZGVmaW5lIFMzQ19QSFlQV1IJCQkJUzNDX0hTT1RHX1BIWVJFRygweDAwKQorI2RlZmluZSBTUkNfUEhZUFdSX09UR19ESVNBQkxFCQkJKDEgPDwgNCkKKyNkZWZpbmUgU1JDX1BIWVBXUl9BTkFMT0dfUE9XRVJET1dOCQkoMSA8PCAzKQorI2RlZmluZSBTUkNfUEhZUFdSX0ZPUkNFX1NVU1BFTkQJCSgxIDw8IDEpCisKKyNkZWZpbmUgUzNDX1BIWUNMSwkJCQlTM0NfSFNPVEdfUEhZUkVHKDB4MDQpCisjZGVmaW5lIFMzQ19QSFlDTEtfTU9ERV9VU0IxMQkJCSgxIDw8IDYpCisjZGVmaW5lIFMzQ19QSFlDTEtfRVhUX09TQwkJCSgxIDw8IDUpCisjZGVmaW5lIFMzQ19QSFlDTEtfQ0xLX0ZPUkNFCQkJKDEgPDwgNCkKKyNkZWZpbmUgUzNDX1BIWUNMS19JRF9QVUxMCQkJKDEgPDwgMikKKyNkZWZpbmUgUzNDX1BIWUNMS19DTEtTRUxfTUFTSwkJCSgweDMgPDwgMCkKKyNkZWZpbmUgUzNDX1BIWUNMS19DTEtTRUxfU0hJRlQJCQkoMCkKKyNkZWZpbmUgUzNDX1BIWUNMS19DTEtTRUxfNDhNCQkJKDB4MCA8PCAwKQorI2RlZmluZSBTM0NfUEhZQ0xLX0NMS1NFTF8xMk0JCQkoMHgyIDw8IDApCisjZGVmaW5lIFMzQ19QSFlDTEtfQ0xLU0VMXzI0TQkJCSgweDMgPDwgMCkKKworI2RlZmluZSBTM0NfUlNUQ09OCQkJCVMzQ19IU09UR19QSFlSRUcoMHgwOCkKKyNkZWZpbmUgUzNDX1JTVENPTl9QSFlDTEsJCQkoMSA8PCAyKQorI2RlZmluZSBTM0NfUlNUQ09OX0hDTEsJCQkJKDEgPDwgMikKKyNkZWZpbmUgUzNDX1JTVENPTl9QSFkJCQkJKDEgPDwgMCkKKworI2RlZmluZSBTM0NfUEhZVFVORQkJCQlTM0NfSFNPVEdfUEhZUkVHKDB4MjApCisKKyNlbmRpZiAvKiBfX1BMQVRfUzNDNjRYWF9SRUdTX1VTQl9IU09UR19QSFlfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3MtdXNiLWhzb3RnLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3MtdXNiLWhzb3RnLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXVzYi1oc290Zy5oCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3MtdXNiLWhzb3RnLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL2luY2x1ZGUvcGxhdC9yZWdzLXdhdGNoZG9nLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3JlZ3Mtd2F0Y2hkb2cuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3JlZ3Mtd2F0Y2hkb2cuaApyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9yZWdzLXdhdGNoZG9nLmgKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvczNjNjR4eC1zcGkuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvczNjNjR4eC1zcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTc3MjQxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC9zM2M2NHh4LXNwaS5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvczNjNjR4eC1zcGkuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBTYW1zdW5nIEVsZWN0cm9uaWNzIEx0ZC4KKyAqCUphc3dpbmRlciBTaW5naCA8amFzc2kuYnJhckBzYW1zdW5nLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19TM0M2NFhYX1BMQVRfU1BJX0gKKyNkZWZpbmUgX19TM0M2NFhYX1BMQVRfU1BJX0gKKworLyoqCisgKiBzdHJ1Y3QgczNjNjR4eF9zcGlfY3NpbmZvIC0gQ2hpcFNlbGVjdCBkZXNjcmlwdGlvbgorICogQGZiX2RlbGF5OiBTbGF2ZSBzcGVjaWZpYyBmZWVkYmFjayBkZWxheS4KKyAqICAgICAgICAgICAgUmVmZXIgdG8gRkJfQ0xLX1NFTCByZWdpc3RlciBkZWZpbml0aW9uIGluIFNQSSBjaGFwdGVyLgorICogQGxpbmU6IEN1c3RvbSAnaWRlbnRpdHknIG9mIHRoZSBDUyBsaW5lLgorICogQHNldF9sZXZlbDogQ1MgbGluZSBjb250cm9sLgorICoKKyAqIFRoaXMgaXMgcGVyIFNQSS1TbGF2ZSBDaGlwc2VsZWN0IGluZm9ybWF0aW9uLgorICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgb25lIGluIG1hY2hpbmUgaW5pdCBjb2RlIGFuZCBtYWtlIHRoZQorICogc3BpX2JvYXJkX2luZm8uY29udHJvbGxlcl9kYXRhIHBvaW50IHRvIGl0LgorICovCitzdHJ1Y3QgczNjNjR4eF9zcGlfY3NpbmZvIHsKKwl1OCBmYl9kZWxheTsKKwl1bnNpZ25lZCBsaW5lOworCXZvaWQgKCpzZXRfbGV2ZWwpKHVuc2lnbmVkIGxpbmVfaWQsIGludCBsdmwpOworfTsKKworLyoqCisgKiBzdHJ1Y3QgczNjNjR4eF9zcGlfaW5mbyAtIFNQSSBDb250cm9sbGVyIGRlZmluaW5nIHN0cnVjdHVyZQorICogQHNyY19jbGtfbnI6IENsb2NrIHNvdXJjZSBpbmRleCBmb3IgdGhlIENMS19DRkdbU1BJX0NMS1NFTF0gZmllbGQuCisgKiBAc3JjX2Nsa19uYW1lOiBQbGF0Zm9ybSBuYW1lIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNsb2NrLgorICogQG51bV9jczogTnVtYmVyIG9mIENTIHRoaXMgY29udHJvbGxlciBlbXVsYXRlcy4KKyAqIEBjZmdfZ3BpbzogQ29uZmlndXJlIHBpbnMgZm9yIHRoaXMgU1BJIGNvbnRyb2xsZXIuCisgKiBAZmlmb19sdmxfbWFzazogQWxsIHR4IGZpZm9fbHZsIGZpZWxkcyBzdGFydCBhdCBvZmZzZXQtNgorICogQHJ4X2x2bF9vZmZzZXQ6IERlcGVuZHMgb24gdHggZmlmb19sdmwgZmllbGQgYW5kIGJ1cyBudW1iZXIKKyAqIEBoaWdoX3NwZWVkOiBJZiB0aGUgY29udHJvbGxlciBzdXBwb3J0cyBISUdIX1NQRUVEX0VOIGJpdAorICovCitzdHJ1Y3QgczNjNjR4eF9zcGlfaW5mbyB7CisJaW50IHNyY19jbGtfbnI7CisJY2hhciAqc3JjX2Nsa19uYW1lOworCisJaW50IG51bV9jczsKKworCWludCAoKmNmZ19ncGlvKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKKworCS8qIEZvbGxvd2luZyB0d28gZmllbGRzIGFyZSBmb3IgZnV0dXJlIGNvbXBhdGliaWxpdHkgKi8KKwlpbnQgZmlmb19sdmxfbWFzazsKKwlpbnQgcnhfbHZsX29mZnNldDsKKwlpbnQgaGlnaF9zcGVlZDsKK307CisKKy8qKgorICogczNjNjR4eF9zcGlfc2V0X2luZm8gLSBTUEkgQ29udHJvbGxlciBjb25maWd1cmUgY2FsbGJhY2sgYnkgdGhlIGJvYXJkCisgKgkJCQlpbml0aWFsaXphdGlvbiBjb2RlLgorICogQGNudHJscjogU1BJIGNvbnRyb2xsZXIgbnVtYmVyIHRoZSBjb25maWd1cmF0aW9uIGlzIGZvci4KKyAqIEBzcmNfY2xrX25yOiBDbG9jayB0aGUgU1BJIGNvbnRyb2xsZXIgaXMgdG8gdXNlIHRvIGdlbmVyYXRlIFNQSSBjbG9ja3MuCisgKiBAbnVtX2NzOiBOdW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlICdjcycgYXJyYXkuCisgKgorICogQ2FsbCB0aGlzIGZyb20gbWFjaGluZSBpbml0IGNvZGUgZm9yIGVhY2ggU1BJIENvbnRyb2xsZXIgdGhhdAorICogaGFzIHNvbWUgY2hpcHMgYXR0YWNoZWQgdG8gaXQuCisgKi8KK2V4dGVybiB2b2lkIHMzYzY0eHhfc3BpX3NldF9pbmZvKGludCBjbnRybHIsIGludCBzcmNfY2xrX25yLCBpbnQgbnVtX2NzKTsKKworI2VuZGlmIC8qIF9fUzNDNjRYWF9QTEFUX1NQSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3NkaGNpLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3NkaGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QwN2NkNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvc2RoY2kuaApAQCAtMCwwICsxLDIyMSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3NkaGNpLmgKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQyBQbGF0Zm9ybSAtIFNESENJIChIU01NQykgcGxhdGZvcm0gZGF0YSBkZWZpbml0aW9ucworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fUExBVF9TM0NfU0RIQ0lfSAorI2RlZmluZSBfX1BMQVRfUzNDX1NESENJX0ggX19GSUxFX18KKworc3RydWN0IHBsYXRmb3JtX2RldmljZTsKK3N0cnVjdCBtbWNfaG9zdDsKK3N0cnVjdCBtbWNfY2FyZDsKK3N0cnVjdCBtbWNfaW9zOworCisvKioKKyAqIHN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEoKSAtIFBsYXRmb3JtIGRldmljZSBkYXRhIGZvciBTYW1zdW5nIFNESENJCisgKiBAbWF4X3dpZHRoOiBUaGUgbWF4aW11bSBudW1iZXIgb2YgZGF0YSBiaXRzIHN1cHBvcnRlZC4KKyAqIEBob3N0X2NhcHM6IFN0YW5kYXJkIE1NQyBob3N0IGNhcGFiaWxpdGllcyBiaXQgZmllbGQuCisgKiBAY2ZnX2dwaW86IENvbmZpZ3VyZSB0aGUgR1BJTyBmb3IgYSBzcGVjaWZpYyBjYXJkIGJpdC13aWR0aAorICogQGNmZ19jYXJkOiBDb25maWd1cmUgdGhlIGludGVyZmFjZSBmb3IgYSBzcGVjaWZpYyBjYXJkIGFuZCBzcGVlZC4gVGhpcworICogICAgICAgICAgICBpcyBuZWNlc3NhcnkgdGhlIGNvbnRyb2xsZXJzIGFuZC9vciBHUElPIGJsb2NrcyByZXF1aXJlIHRoZQorICoJICAgICAgY2hhbmdpbmcgb2YgZHJpdmVyLXN0cmVuZ3RoIGFuZCBvdGhlciBjb250cm9scyBkZXBlbmRhbnQgb24KKyAqCSAgICAgIHRoZSBjYXJkIGFuZCBzcGVlZCBvZiBvcGVyYXRpb24uCisgKgorICogSW5pdGlhbGlzYXRpb24gZGF0YSBzcGVjaWZpYyB0byBlaXRoZXIgdGhlIG1hY2hpbmUgb3IgdGhlIHBsYXRmb3JtCisgKiBmb3IgdGhlIGRldmljZSBkcml2ZXIgdG8gdXNlIG9yIGNhbGwtYmFjayB3aGVuIGNvbmZpZ3VyaW5nIGdwaW8gb3IKKyAqIGNhcmQgc3BlZWQgaW5mb3JtYXRpb24uCisqLworc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSB7CisJdW5zaWduZWQgaW50CW1heF93aWR0aDsKKwl1bnNpZ25lZCBpbnQJaG9zdF9jYXBzOworCisJY2hhcgkJKipjbG9ja3M7CS8qIHNldCBvZiBjbG9jayBzb3VyY2VzICovCisKKwl2b2lkCSgqY2ZnX2dwaW8pKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgaW50IHdpZHRoKTsKKwl2b2lkCSgqY2ZnX2NhcmQpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJCSAgICB2b2lkIF9faW9tZW0gKnJlZ2Jhc2UsCisJCQkgICAgc3RydWN0IG1tY19pb3MgKmlvcywKKwkJCSAgICBzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpOworfTsKKworLyoqCisgKiBzM2Nfc2RoY2kwX3NldF9wbGF0ZGF0YSAtIFNldCBwbGF0Zm9ybSBkYXRhIGZvciBTM0MgU0RIQ0kgZGV2aWNlLgorICogQHBkOiBQbGF0Zm9ybSBkYXRhIHRvIHJlZ2lzdGVyIHRvIGRldmljZS4KKyAqCisgKiBSZWdpc3RlciB0aGUgZ2l2ZW4gcGxhdGZvcm0gZGF0YSBmb3IgdXNlIHdpdGhlIFMzQyBTREhDSSBkZXZpY2UuCisgKiBUaGUgY2FsbCB3aWxsIGNvcHkgdGhlIHBsYXRmb3JtIGRhdGEsIHNvIHRoZSBib2FyZCBkZWZpbml0aW9ucyBjYW4KKyAqIG1ha2UgdGhlIHN0cnVjdHVyZSBpdHNlbGYgX19pbml0ZGF0YS4KKyAqLworZXh0ZXJuIHZvaWQgczNjX3NkaGNpMF9zZXRfcGxhdGRhdGEoc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSAqcGQpOworZXh0ZXJuIHZvaWQgczNjX3NkaGNpMV9zZXRfcGxhdGRhdGEoc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSAqcGQpOworZXh0ZXJuIHZvaWQgczNjX3NkaGNpMl9zZXRfcGxhdGRhdGEoc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSAqcGQpOworCisvKiBEZWZhdWx0IHBsYXRmb3JtIGRhdGEsIGV4cG9ydGVkIHNvIHRoYXQgcGVyLWNwdSBpbml0aWFsaXNhdGlvbiBjYW4KKyAqIHNldCB0aGUgY29ycmVjdCBvbmUgd2hlbiB0aGVyZSBhcmUgbW9yZSB0aGFuIG9uZSBjcHUgdHlwZSBzZWxlY3RlZC4KKyovCisKK2V4dGVybiBzdHJ1Y3QgczNjX3NkaGNpX3BsYXRkYXRhIHMzY19oc21tYzBfZGVmX3BsYXRkYXRhOworZXh0ZXJuIHN0cnVjdCBzM2Nfc2RoY2lfcGxhdGRhdGEgczNjX2hzbW1jMV9kZWZfcGxhdGRhdGE7CitleHRlcm4gc3RydWN0IHMzY19zZGhjaV9wbGF0ZGF0YSBzM2NfaHNtbWMyX2RlZl9wbGF0ZGF0YTsKKworLyogSGVscGVyIGZ1bmN0aW9uIGF2YWlsYWJsaXR5ICovCisKK2V4dGVybiB2b2lkIHMzYzY0eHhfc2V0dXBfc2RoY2kwX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgaW50IHcpOworZXh0ZXJuIHZvaWQgczNjNjR4eF9zZXR1cF9zZGhjaTFfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBpbnQgdyk7CitleHRlcm4gdm9pZCBzNXBjMTAwX3NldHVwX3NkaGNpMF9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIGludCB3KTsKK2V4dGVybiB2b2lkIHM1cGMxMDBfc2V0dXBfc2RoY2kxX2NmZ19ncGlvKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgaW50IHcpOworZXh0ZXJuIHZvaWQgczVwYzEwMF9zZXR1cF9zZGhjaTJfY2ZnX2dwaW8oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqLCBpbnQgdyk7CitleHRlcm4gdm9pZCBzM2M2NHh4X3NldHVwX3NkaGNpMl9jZmdfZ3BpbyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIGludCB3KTsKKworLyogUzNDNjQwMCBTREhDSSBzZXR1cCAqLworCisjaWZkZWYgQ09ORklHX1MzQzY0WFhfU0VUVVBfU0RIQ0kKK2V4dGVybiBjaGFyICpzM2M2NHh4X2hzbW1jX2Nsa3NyY3NbNF07CisKKyNpZmRlZiBDT05GSUdfUzNDX0RFVl9IU01NQworZXh0ZXJuIHZvaWQgczNjNjQwMF9zZXR1cF9zZGhjaV9jZmdfY2FyZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsCisJCQkJCSB2b2lkIF9faW9tZW0gKnIsCisJCQkJCSBzdHJ1Y3QgbW1jX2lvcyAqaW9zLAorCQkJCQkgc3RydWN0IG1tY19jYXJkICpjYXJkKTsKKworc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MDBfZGVmYXVsdF9zZGhjaTAodm9pZCkKK3sKKwlzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YS5jbG9ja3MgPSBzM2M2NHh4X2hzbW1jX2Nsa3NyY3M7CisJczNjX2hzbW1jMF9kZWZfcGxhdGRhdGEuY2ZnX2dwaW8gPSBzM2M2NHh4X3NldHVwX3NkaGNpMF9jZmdfZ3BpbzsKKwlzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YS5jZmdfY2FyZCA9IHMzYzY0MDBfc2V0dXBfc2RoY2lfY2ZnX2NhcmQ7Cit9CisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgczNjNjQwMF9kZWZhdWx0X3NkaGNpMCh2b2lkKSB7IH0KKyNlbmRpZiAgLyogQ09ORklHX1MzQ19ERVZfSFNNTUMgKi8KKworI2lmZGVmIENPTkZJR19TM0NfREVWX0hTTU1DMQorc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MDBfZGVmYXVsdF9zZGhjaTEodm9pZCkKK3sKKwlzM2NfaHNtbWMxX2RlZl9wbGF0ZGF0YS5jbG9ja3MgPSBzM2M2NHh4X2hzbW1jX2Nsa3NyY3M7CisJczNjX2hzbW1jMV9kZWZfcGxhdGRhdGEuY2ZnX2dwaW8gPSBzM2M2NHh4X3NldHVwX3NkaGNpMV9jZmdfZ3BpbzsKKwlzM2NfaHNtbWMxX2RlZl9wbGF0ZGF0YS5jZmdfY2FyZCA9IHMzYzY0MDBfc2V0dXBfc2RoY2lfY2ZnX2NhcmQ7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MDBfZGVmYXVsdF9zZGhjaTEodm9pZCkgeyB9CisjZW5kaWYgLyogQ09ORklHX1MzQ19ERVZfSFNNTUMxICovCisKKyNpZmRlZiBDT05GSUdfUzNDX0RFVl9IU01NQzIKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDAwX2RlZmF1bHRfc2RoY2kyKHZvaWQpCit7CisJczNjX2hzbW1jMl9kZWZfcGxhdGRhdGEuY2xvY2tzID0gczNjNjR4eF9oc21tY19jbGtzcmNzOworCXMzY19oc21tYzJfZGVmX3BsYXRkYXRhLmNmZ19ncGlvID0gczNjNjR4eF9zZXR1cF9zZGhjaTJfY2ZnX2dwaW87CisJczNjX2hzbW1jMl9kZWZfcGxhdGRhdGEuY2ZnX2NhcmQgPSBzM2M2NDAwX3NldHVwX3NkaGNpX2NmZ19jYXJkOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDAwX2RlZmF1bHRfc2RoY2kyKHZvaWQpIHsgfQorI2VuZGlmIC8qIENPTkZJR19TM0NfREVWX0hTTU1DMiAqLworCisvKiBTM0M2NDEwIFNESENJIHNldHVwICovCisKK2V4dGVybiB2b2lkIHMzYzY0MTBfc2V0dXBfc2RoY2lfY2ZnX2NhcmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAorCQkJCQkgdm9pZCBfX2lvbWVtICpyLAorCQkJCQkgc3RydWN0IG1tY19pb3MgKmlvcywKKwkJCQkJIHN0cnVjdCBtbWNfY2FyZCAqY2FyZCk7CisKKyNpZmRlZiBDT05GSUdfUzNDX0RFVl9IU01NQworc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MTBfZGVmYXVsdF9zZGhjaTAodm9pZCkKK3sKKwlzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YS5jbG9ja3MgPSBzM2M2NHh4X2hzbW1jX2Nsa3NyY3M7CisJczNjX2hzbW1jMF9kZWZfcGxhdGRhdGEuY2ZnX2dwaW8gPSBzM2M2NHh4X3NldHVwX3NkaGNpMF9jZmdfZ3BpbzsKKwlzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YS5jZmdfY2FyZCA9IHMzYzY0MTBfc2V0dXBfc2RoY2lfY2ZnX2NhcmQ7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MTBfZGVmYXVsdF9zZGhjaTAodm9pZCkgeyB9CisjZW5kaWYgLyogQ09ORklHX1MzQ19ERVZfSFNNTUMgKi8KKworI2lmZGVmIENPTkZJR19TM0NfREVWX0hTTU1DMQorc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MTBfZGVmYXVsdF9zZGhjaTEodm9pZCkKK3sKKwlzM2NfaHNtbWMxX2RlZl9wbGF0ZGF0YS5jbG9ja3MgPSBzM2M2NHh4X2hzbW1jX2Nsa3NyY3M7CisJczNjX2hzbW1jMV9kZWZfcGxhdGRhdGEuY2ZnX2dwaW8gPSBzM2M2NHh4X3NldHVwX3NkaGNpMV9jZmdfZ3BpbzsKKwlzM2NfaHNtbWMxX2RlZl9wbGF0ZGF0YS5jZmdfY2FyZCA9IHMzYzY0MTBfc2V0dXBfc2RoY2lfY2ZnX2NhcmQ7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MTBfZGVmYXVsdF9zZGhjaTEodm9pZCkgeyB9CisjZW5kaWYgLyogQ09ORklHX1MzQ19ERVZfSFNNTUMxICovCisKKyNpZmRlZiBDT05GSUdfUzNDX0RFVl9IU01NQzIKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDEwX2RlZmF1bHRfc2RoY2kyKHZvaWQpCit7CisJczNjX2hzbW1jMl9kZWZfcGxhdGRhdGEuY2xvY2tzID0gczNjNjR4eF9oc21tY19jbGtzcmNzOworCXMzY19oc21tYzJfZGVmX3BsYXRkYXRhLmNmZ19ncGlvID0gczNjNjR4eF9zZXR1cF9zZGhjaTJfY2ZnX2dwaW87CisJczNjX2hzbW1jMl9kZWZfcGxhdGRhdGEuY2ZnX2NhcmQgPSBzM2M2NDEwX3NldHVwX3NkaGNpX2NmZ19jYXJkOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDEwX2RlZmF1bHRfc2RoY2kyKHZvaWQpIHsgfQorI2VuZGlmIC8qIENPTkZJR19TM0NfREVWX0hTTU1DMiAqLworCisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MTBfZGVmYXVsdF9zZGhjaTAodm9pZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgczNjNjQxMF9kZWZhdWx0X3NkaGNpMSh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzM2M2NDAwX2RlZmF1bHRfc2RoY2kwKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHMzYzY0MDBfZGVmYXVsdF9zZGhjaTEodm9pZCkgeyB9CisKKyNlbmRpZiAvKiBDT05GSUdfUzNDNjRYWF9TRVRVUF9TREhDSSAqLworCisvKiBTNVBDMTAwIFNESENJIHNldHVwICovCisKKyNpZmRlZiBDT05GSUdfUzVQQzEwMF9TRVRVUF9TREhDSQorZXh0ZXJuIGNoYXIgKnM1cGMxMDBfaHNtbWNfY2xrc3Jjc1s0XTsKKworZXh0ZXJuIHZvaWQgczVwYzEwMF9zZXR1cF9zZGhjaTBfY2ZnX2NhcmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2LAorCQkJCQkgICB2b2lkIF9faW9tZW0gKnIsCisJCQkJCSAgIHN0cnVjdCBtbWNfaW9zICppb3MsCisJCQkJCSAgIHN0cnVjdCBtbWNfY2FyZCAqY2FyZCk7CisKKyNpZmRlZiBDT05GSUdfUzNDX0RFVl9IU01NQworc3RhdGljIGlubGluZSB2b2lkIHM1cGMxMDBfZGVmYXVsdF9zZGhjaTAodm9pZCkKK3sKKwlzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YS5jbG9ja3MgPSBzNXBjMTAwX2hzbW1jX2Nsa3NyY3M7CisJczNjX2hzbW1jMF9kZWZfcGxhdGRhdGEuY2ZnX2dwaW8gPSBzNXBjMTAwX3NldHVwX3NkaGNpMF9jZmdfZ3BpbzsKKwlzM2NfaHNtbWMwX2RlZl9wbGF0ZGF0YS5jZmdfY2FyZCA9IHM1cGMxMDBfc2V0dXBfc2RoY2kwX2NmZ19jYXJkOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzNXBjMTAwX2RlZmF1bHRfc2RoY2kwKHZvaWQpIHsgfQorI2VuZGlmIC8qIENPTkZJR19TM0NfREVWX0hTTU1DICovCisKKyNpZmRlZiBDT05GSUdfUzNDX0RFVl9IU01NQzEKK3N0YXRpYyBpbmxpbmUgdm9pZCBzNXBjMTAwX2RlZmF1bHRfc2RoY2kxKHZvaWQpCit7CisJczNjX2hzbW1jMV9kZWZfcGxhdGRhdGEuY2xvY2tzID0gczVwYzEwMF9oc21tY19jbGtzcmNzOworCXMzY19oc21tYzFfZGVmX3BsYXRkYXRhLmNmZ19ncGlvID0gczVwYzEwMF9zZXR1cF9zZGhjaTFfY2ZnX2dwaW87CisJczNjX2hzbW1jMV9kZWZfcGxhdGRhdGEuY2ZnX2NhcmQgPSBzNXBjMTAwX3NldHVwX3NkaGNpMF9jZmdfY2FyZDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgczVwYzEwMF9kZWZhdWx0X3NkaGNpMSh2b2lkKSB7IH0KKyNlbmRpZiAvKiBDT05GSUdfUzNDX0RFVl9IU01NQzEgKi8KKworI2lmZGVmIENPTkZJR19TM0NfREVWX0hTTU1DMgorc3RhdGljIGlubGluZSB2b2lkIHM1cGMxMDBfZGVmYXVsdF9zZGhjaTIodm9pZCkKK3sKKwlzM2NfaHNtbWMyX2RlZl9wbGF0ZGF0YS5jbG9ja3MgPSBzNXBjMTAwX2hzbW1jX2Nsa3NyY3M7CisJczNjX2hzbW1jMl9kZWZfcGxhdGRhdGEuY2ZnX2dwaW8gPSBzNXBjMTAwX3NldHVwX3NkaGNpMl9jZmdfZ3BpbzsKKwlzM2NfaHNtbWMyX2RlZl9wbGF0ZGF0YS5jZmdfY2FyZCA9IHM1cGMxMDBfc2V0dXBfc2RoY2kwX2NmZ19jYXJkOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBzNXBjMTAwX2RlZmF1bHRfc2RoY2kyKHZvaWQpIHsgfQorI2VuZGlmIC8qIENPTkZJR19TM0NfREVWX0hTTU1DMSAqLworCisKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgczVwYzEwMF9kZWZhdWx0X3NkaGNpMCh2b2lkKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzNXBjMTAwX2RlZmF1bHRfc2RoY2kxKHZvaWQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHM1cGMxMDBfZGVmYXVsdF9zZGhjaTIodm9pZCkgeyB9CisjZW5kaWYgLyogQ09ORklHX1M1UEMxMDBfU0VUVVBfU0RIQ0kgKi8KKworI2VuZGlmIC8qIF9fUExBVF9TM0NfU0RIQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC91ZGMtaHMuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvdWRjLWhzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIyYTRmMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvdWRjLWhzLmgKQEAgLTAsMCArMSwyOSBAQAorLyogYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3VkYy1ocy5oCisgKgorICogQ29weXJpZ2h0IDIwMDggT3Blbm1va28sIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICogICAgICBCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKiAgICAgIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDIFVTQjIuMCBIaWdoLXNwZWVkIC8gT3RHIHBsYXRmb3JtIGluZm9ybWF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKK2VudW0gczNjX2hzb3RnX2RtYW1vZGUgeworCVMzQ19IU09UR19ETUFfTk9ORSwJLyogZG8gbm90IHVzZSBETUEgYXQtYWxsICovCisJUzNDX0hTT1RHX0RNQV9PTkxZLAkvKiBhbHdheXMgdXNlIERNQSAqLworCVMzQ19IU09UR19ETUFfRFJWLAkvKiBETUEgaXMgY2hvc2VuIGJ5IGRyaXZlciAqLworfTsKKworLyoqCisgKiBzdHJ1Y3QgczNjX2hzb3RnX3BsYXQgLSBwbGF0Zm9ybSBkYXRhIGZvciBoaWdoLXNwZWVkIG90Zy91ZGMKKyAqIEBkbWE6IFdoZXRoZXIgdG8gdXNlIERNQSBvciBub3QuCisgKiBAaXNfb3NjOiBUaGUgY2xvY2sgc291cmNlIGlzIGFuIG9zY2lsbGF0b3IsIG5vdCBhIGNyeXN0YWwKKyAqLworc3RydWN0IHMzY19oc290Z19wbGF0IHsKKwllbnVtIHMzY19oc290Z19kbWFtb2RlCWRtYTsKKwl1bnNpZ25lZCBpbnQJCWlzX29zYyA6IDE7Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmggYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODdjZThmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSwxODYgQEAKKy8qIGFyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvdW5jb21wcmVzcy5oCisgKgorICogQ29weXJpZ2h0IDIwMDMsIDIwMDcgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglodHRwOi8vYXJtbGludXguc2ltdGVjLmNvLnVrLworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQyAtIHVuY29tcHJlc3MgY29kZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaWZuZGVmIF9fQVNNX1BMQVRfVU5DT01QUkVTU19ICisjZGVmaW5lIF9fQVNNX1BMQVRfVU5DT01QUkVTU19ICisKK3R5cGVkZWYgdW5zaWduZWQgaW50IHVwZl90OwkvKiBjYW5ub3QgaW5jbHVkZSBsaW51eC9zZXJpYWxfY29yZS5oICovCisKKy8qIHVhcnQgc2V0dXAgKi8KKworc3RhdGljIHVuc2lnbmVkIGludCBmaWZvX21hc2s7CitzdGF0aWMgdW5zaWduZWQgaW50IGZpZm9fbWF4OworCisvKiBmb3J3YXJkIGRlY2xlcmF0aW9ucyAqLworCitzdGF0aWMgdm9pZCBhcmNoX2RldGVjdF9jcHUodm9pZCk7CisKKy8qIGRlZmluZXMgZm9yIFVBUlQgcmVnaXN0ZXJzICovCisKKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXdhdGNoZG9nLmg+CisKKy8qIHdvcmtpbmcgaW4gcGh5c2ljYWwgc3BhY2UuLi4gKi8KKyN1bmRlZiBTM0MyNDEwX1dET0dSRUcKKyNkZWZpbmUgUzNDMjQxMF9XRE9HUkVHKHgpICgoUzNDMjRYWF9QQV9XQVRDSERPRyArICh4KSkpCisKKy8qIGhvdyBtYW55IGJ5dGVzIHdlIGFsbG93IGludG8gdGhlIEZJRk8gYXQgYSB0aW1lIGluIEZJRk8gbW9kZSAqLworI2RlZmluZSBGSUZPX01BWAkgKDE0KQorCisjZGVmaW5lIHVhcnRfYmFzZSBTM0NfUEFfVUFSVCArIChTM0NfVUFSVF9PRkZTRVQgKiBDT05GSUdfUzNDX0xPV0xFVkVMX1VBUlRfUE9SVCkKKworc3RhdGljIF9faW5saW5lX18gdm9pZAordWFydF93cih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBpbnQgdmFsKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqcHRyOworCisJcHRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShyZWcgKyB1YXJ0X2Jhc2UpOworCSpwdHIgPSB2YWw7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludAordWFydF9yZCh1bnNpZ25lZCBpbnQgcmVnKQoreworCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqcHRyOworCisJcHRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKShyZWcgKyB1YXJ0X2Jhc2UpOworCXJldHVybiAqcHRyOworfQorCisvKiB3ZSBjYW4gZGVhbCB3aXRoIHRoZSBjYXNlIHRoZSBVQVJUcyBhcmUgYmVpbmcgcnVuCisgKiBpbiBGSUZPIG1vZGUsIHNvIHRoYXQgd2UgZG9uJ3QgaG9sZCB1cCBvdXIgZXhlY3V0aW9uCisgKiB3YWl0aW5nIGZvciB0eCB0byBoYXBwZW4uLi4KKyovCisKK3N0YXRpYyB2b2lkIHB1dGMoaW50IGNoKQoreworCWlmICh1YXJ0X3JkKFMzQzI0MTBfVUZDT04pICYgUzNDMjQxMF9VRkNPTl9GSUZPTU9ERSkgeworCQlpbnQgbGV2ZWw7CisKKwkJd2hpbGUgKDEpIHsKKwkJCWxldmVsID0gdWFydF9yZChTM0MyNDEwX1VGU1RBVCk7CisJCQlsZXZlbCAmPSBmaWZvX21hc2s7CisKKwkJCWlmIChsZXZlbCA8IGZpZm9fbWF4KQorCQkJCWJyZWFrOworCQl9CisKKwl9IGVsc2UgeworCQkvKiBub3QgdXNpbmcgZmlmb3MgKi8KKworCQl3aGlsZSAoKHVhcnRfcmQoUzNDMjQxMF9VVFJTVEFUKSAmIFMzQzI0MTBfVVRSU1RBVF9UWEUpICE9IFMzQzI0MTBfVVRSU1RBVF9UWEUpCisJCQliYXJyaWVyKCk7CisJfQorCisJLyogd3JpdGUgYnl0ZSB0byB0cmFuc21pc3Npb24gcmVnaXN0ZXIgKi8KKwl1YXJ0X3dyKFMzQzI0MTBfVVRYSCwgY2gpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2godm9pZCkKK3sKK30KKworI2RlZmluZSBfX3Jhd193cml0ZWwoZCwgYWQpCQkJXAorCWRvIHsJCQkJCQkJXAorCQkqKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgX19mb3JjZSAqKShhZCkpID0gKGQpOyBcCisJfSB3aGlsZSAoMCkKKworLyogQ09ORklHX1MzQ19CT09UX1dBVENIRE9HCisgKgorICogU2ltcGxlIGJvb3QtdGltZSB3YXRjaGRvZyBzZXR1cCwgdG8gcmVib290IHRoZSBzeXN0ZW0gaWYgdGhlcmUgaXMKKyAqIGFueSBwcm9ibGVtIHdpdGggdGhlIGJvb3QgcHJvY2VzcworKi8KKworI2lmZGVmIENPTkZJR19TM0NfQk9PVF9XQVRDSERPRworCisjZGVmaW5lIFdET0dfQ09VTlQgKDB4ZmYwMCkKKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZGVjb21wX3dkb2codm9pZCkKK3sKKwlfX3Jhd193cml0ZWwoV0RPR19DT1VOVCwgUzNDMjQxMF9XVENOVCk7Cit9CisKK3N0YXRpYyB2b2lkIGFyY2hfZGVjb21wX3dkb2dfc3RhcnQodm9pZCkKK3sKKwlfX3Jhd193cml0ZWwoV0RPR19DT1VOVCwgUzNDMjQxMF9XVERBVCk7CisJX19yYXdfd3JpdGVsKFdET0dfQ09VTlQsIFMzQzI0MTBfV1RDTlQpOworCV9fcmF3X3dyaXRlbChTM0MyNDEwX1dUQ09OX0VOQUJMRSB8IFMzQzI0MTBfV1RDT05fRElWMTI4IHwgUzNDMjQxMF9XVENPTl9SU1RFTiB8IFMzQzI0MTBfV1RDT05fUFJFU0NBTEUoMHg4MCksIFMzQzI0MTBfV1RDT04pOworfQorCisjZWxzZQorI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nX3N0YXJ0KCkKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19TM0NfQk9PVF9FUlJPUl9SRVNFVAorCitzdGF0aWMgdm9pZCBhcmNoX2RlY29tcF9lcnJvcihjb25zdCBjaGFyICp4KQoreworCXB1dHN0cigiXG5cbiIpOworCXB1dHN0cih4KTsKKwlwdXRzdHIoIlxuXG4gLS0gU3lzdGVtIHJlc2V0dGluZ1xuIik7CisKKwlfX3Jhd193cml0ZWwoMHg0MDAwLCBTM0MyNDEwX1dUREFUKTsKKwlfX3Jhd193cml0ZWwoMHg0MDAwLCBTM0MyNDEwX1dUQ05UKTsKKwlfX3Jhd193cml0ZWwoUzNDMjQxMF9XVENPTl9FTkFCTEUgfCBTM0MyNDEwX1dUQ09OX0RJVjEyOCB8IFMzQzI0MTBfV1RDT05fUlNURU4gfCBTM0MyNDEwX1dUQ09OX1BSRVNDQUxFKDB4NDApLCBTM0MyNDEwX1dUQ09OKTsKKworCXdoaWxlKDEpOworfQorCisjZGVmaW5lIGFyY2hfZXJyb3IgYXJjaF9kZWNvbXBfZXJyb3IKKyNlbmRpZgorCitzdGF0aWMgdm9pZCBlcnJvcihjaGFyICplcnIpOworCisjaWZkZWYgQ09ORklHX1MzQ19CT09UX1VBUlRfRk9SQ0VfRklGTworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfZW5hYmxlX3VhcnRfZmlmbyh2b2lkKQoreworCXUzMiBmaWZvY29uID0gdWFydF9yZChTM0MyNDEwX1VGQ09OKTsKKworCWlmICghKGZpZm9jb24gJiBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFKSkgeworCQlmaWZvY29uIHw9IFMzQzI0MTBfVUZDT05fUkVTRVRCT1RIOworCQl1YXJ0X3dyKFMzQzI0MTBfVUZDT04sIGZpZm9jb24pOworCisJCS8qIHdhaXQgZm9yIGZpZm8gcmVzZXQgdG8gY29tcGxldGUgKi8KKwkJd2hpbGUgKDEpIHsKKwkJCWZpZm9jb24gPSB1YXJ0X3JkKFMzQzI0MTBfVUZDT04pOworCQkJaWYgKCEoZmlmb2NvbiAmIFMzQzI0MTBfVUZDT05fUkVTRVRCT1RIKSkKKwkJCQlicmVhazsKKwkJfQorCX0KK30KKyNlbHNlCisjZGVmaW5lIGFyY2hfZW5hYmxlX3VhcnRfZmlmbygpIGRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKKworc3RhdGljIHZvaWQKK2FyY2hfZGVjb21wX3NldHVwKHZvaWQpCit7CisJLyogd2UgbWF5IG5lZWQgdG8gc2V0dXAgdGhlIHVhcnQocykgaGVyZSBpZiB3ZSBhcmUgbm90IHJ1bm5pbmcKKwkgKiBvbiBhbiBCQVNULi4uIHRoZSBCQVNUIHdpbGwgaGF2ZSBsZWZ0IHRoZSB1YXJ0cyBjb25maWd1cmVkCisJICogYWZ0ZXIgY2FsbGluZyBsaW51eC4KKwkgKi8KKworCWFyY2hfZGV0ZWN0X2NwdSgpOworCWFyY2hfZGVjb21wX3dkb2dfc3RhcnQoKTsKKworCS8qIEVuYWJsZSB0aGUgVUFSVCBGSUZPcyBpZiB0aGV5IHdoZXJlIG5vdCBlbmFibGVkIGFuZCBvdXIKKwkgKiBjb25maWd1cmF0aW9uIHNheXMgd2Ugc2hvdWxkIHR1cm4gdGhlbSBvbi4KKwkgKi8KKworCWFyY2hfZW5hYmxlX3VhcnRfZmlmbygpOworfQorCisKKyNlbmRpZiAvKiBfX0FTTV9QTEFUX1VOQ09NUFJFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC91c2ItY29udHJvbC5oIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC91c2ItY29udHJvbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmYTFmYmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5jbHVkZS9wbGF0L3VzYi1jb250cm9sLmgKQEAgLTAsMCArMSw0MyBAQAorLyogYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luY2x1ZGUvcGxhdC91c2ItY29udHJvbC5oCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQyAtIFVTQiBob3N0IHBvcnQgaW5mb3JtYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2lmbmRlZiBfX0FTTV9BUkNIX1VTQkNPTlRST0xfSAorI2RlZmluZSBfX0FTTV9BUkNIX1VTQkNPTlRST0xfSAorCisjZGVmaW5lIFMzQ19IQ0RGTEdfVVNFRAkoMSkKKworc3RydWN0IHMzYzI0MTBfaGNkX3BvcnQgeworCXVuc2lnbmVkIGNoYXIJZmxhZ3M7CisJdW5zaWduZWQgY2hhcglwb3dlcjsKKwl1bnNpZ25lZCBjaGFyCW9jX3N0YXR1czsKKwl1bnNpZ25lZCBjaGFyCW9jX2NoYW5nZWQ7Cit9OworCitzdHJ1Y3QgczNjMjQxMF9oY2RfaW5mbyB7CisJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CisJc3RydWN0IHMzYzI0MTBfaGNkX3BvcnQJcG9ydFsyXTsKKworCXZvaWQJCSgqcG93ZXJfY29udHJvbCkoaW50IHBvcnQsIGludCB0byk7CisJdm9pZAkJKCplbmFibGVfb2MpKHN0cnVjdCBzM2MyNDEwX2hjZF9pbmZvICosIGludCBvbik7CisJdm9pZAkJKCpyZXBvcnRfb2MpKHN0cnVjdCBzM2MyNDEwX2hjZF9pbmZvICosIGludCBwb3J0cyk7Cit9OworCitzdGF0aWMgdm9pZCBpbmxpbmUgczNjMjQxMF91c2JfcmVwb3J0X29jKHN0cnVjdCBzM2MyNDEwX2hjZF9pbmZvICppbmZvLCBpbnQgcG9ydHMpCit7CisJaWYgKGluZm8tPnJlcG9ydF9vYyAhPSBOVUxMKSB7CisJCShpbmZvLT5yZXBvcnRfb2MpKGluZm8sIHBvcnRzKTsKKwl9Cit9CisKK2V4dGVybiB2b2lkIHMzY19vaGNpX3NldF9wbGF0ZGF0YShzdHJ1Y3QgczNjMjQxMF9oY2RfaW5mbyAqaW5mbyk7CisKKyNlbmRpZiAvKl9fQVNNX0FSQ0hfVVNCQ09OVFJPTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXMzYy9pbmNsdWRlL3BsYXQvd2F0Y2hkb2ctcmVzZXQuaCBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvd2F0Y2hkb2ctcmVzZXQuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MvaW5jbHVkZS9wbGF0L3dhdGNoZG9nLXJlc2V0LmgKcmVuYW1lIHRvIGFyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pbmNsdWRlL3BsYXQvd2F0Y2hkb2ctcmVzZXQuaApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zM2MvaW5pdC5jIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2luaXQuYwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vcGxhdC1zM2MvaW5pdC5jCnJlbmFtZSB0byBhcmNoL2FybS9wbGF0LXNhbXN1bmcvaW5pdC5jCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaXJxLXVhcnQuYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pcnEtdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmOGMxMDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaXJxLXVhcnQuYwpAQCAtMCwwICsxLDE0MyBAQAorLyogYXJjaC9hcm0vcGxhdC1zYW1zdW5nL2lycS11YXJ0LmMKKyAqCW9yaWdpbmFsbHkgcGFydCBvZiBhcmNoL2FybS9wbGF0LXMzYzY0eHgvaXJxLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTYW1zdW5nLSBVQVJUIEludGVycnVwdCBoYW5kbGluZworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8cGxhdC9pcnEtdWFydC5oPgorI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorCisvKiBOb3RlLCB3ZSBtYWtlIHVzZSBvZiB0aGUgZmFjdCB0aGF0IHRoZSBwYXJlbnQgSVJRcywgSVJRX1VBUlRbMC4uM10KKyAqIGFyZSBjb25zZWN1dGl2ZSB3aGVuIGxvb2tpbmcgdXAgdGhlIGludGVycnVwdCBpbiB0aGUgZGVtdXggcm91dGluZXMuCisgKi8KKworc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKnMzY19pcnFfdWFydF9iYXNlKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IHMzY191YXJ0X2lycSAqdWlycSA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJcmV0dXJuIHVpcnEtPnJlZ3M7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHMzY19pcnFfdWFydF9iaXQodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gaXJxICYgMzsKK30KKworc3RhdGljIHZvaWQgczNjX2lycV91YXJ0X21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBzM2NfaXJxX3VhcnRfYmFzZShpcnEpOworCXVuc2lnbmVkIGludCBiaXQgPSBzM2NfaXJxX3VhcnRfYml0KGlycSk7CisJdTMyIHJlZzsKKworCXJlZyA9IF9fcmF3X3JlYWRsKHJlZ3MgKyBTM0M2NFhYX1VJTlRNKTsKKwlyZWcgfD0gKDEgPDwgYml0KTsKKwlfX3Jhd193cml0ZWwocmVnLCByZWdzICsgUzNDNjRYWF9VSU5UTSk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfdWFydF9tYXNrYWNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gczNjX2lycV91YXJ0X2Jhc2UoaXJxKTsKKwl1bnNpZ25lZCBpbnQgYml0ID0gczNjX2lycV91YXJ0X2JpdChpcnEpOworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChyZWdzICsgUzNDNjRYWF9VSU5UTSk7CisJcmVnIHw9ICgxIDw8IGJpdCk7CisJX19yYXdfd3JpdGVsKHJlZywgcmVncyArIFMzQzY0WFhfVUlOVE0pOworCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgcmVncyArIFMzQzY0WFhfVUlOVFApOworfQorCitzdGF0aWMgdm9pZCBzM2NfaXJxX3VhcnRfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gczNjX2lycV91YXJ0X2Jhc2UoaXJxKTsKKwl1bnNpZ25lZCBpbnQgYml0ID0gczNjX2lycV91YXJ0X2JpdChpcnEpOworCXUzMiByZWc7CisKKwlyZWcgPSBfX3Jhd19yZWFkbChyZWdzICsgUzNDNjRYWF9VSU5UTSk7CisJcmVnICY9IH4oMSA8PCBiaXQpOworCV9fcmF3X3dyaXRlbChyZWcsIHJlZ3MgKyBTM0M2NFhYX1VJTlRNKTsKK30KKworc3RhdGljIHZvaWQgczNjX2lycV91YXJ0X2Fjayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IHMzY19pcnFfdWFydF9iYXNlKGlycSk7CisJdW5zaWduZWQgaW50IGJpdCA9IHMzY19pcnFfdWFydF9iaXQoaXJxKTsKKworCV9fcmF3X3dyaXRlbCgxIDw8IGJpdCwgcmVncyArIFMzQzY0WFhfVUlOVFApOworfQorCitzdGF0aWMgdm9pZCBzM2NfaXJxX2RlbXV4X3VhcnQodW5zaWduZWQgaW50IGlycSwgc3RydWN0IGlycV9kZXNjICpkZXNjKQoreworCXN0cnVjdCBzM2NfdWFydF9pcnEgKnVpcnEgPSBkZXNjLT5oYW5kbGVyX2RhdGE7CisJdTMyIHBlbmQgPSBfX3Jhd19yZWFkbCh1aXJxLT5yZWdzICsgUzNDNjRYWF9VSU5UUCk7CisJaW50IGJhc2UgPSB1aXJxLT5iYXNlX2lycTsKKworCWlmIChwZW5kICYgKDEgPDwgMCkpCisJCWdlbmVyaWNfaGFuZGxlX2lycShiYXNlKTsKKwlpZiAocGVuZCAmICgxIDw8IDEpKQorCQlnZW5lcmljX2hhbmRsZV9pcnEoYmFzZSArIDEpOworCWlmIChwZW5kICYgKDEgPDwgMikpCisJCWdlbmVyaWNfaGFuZGxlX2lycShiYXNlICsgMik7CisJaWYgKHBlbmQgJiAoMSA8PCAzKSkKKwkJZ2VuZXJpY19oYW5kbGVfaXJxKGJhc2UgKyAzKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzM2NfaXJxX3VhcnQgPSB7CisJLm5hbWUJCT0gInMzYy11YXJ0IiwKKwkubWFzawkJPSBzM2NfaXJxX3VhcnRfbWFzaywKKwkudW5tYXNrCQk9IHMzY19pcnFfdWFydF91bm1hc2ssCisJLm1hc2tfYWNrCT0gczNjX2lycV91YXJ0X21hc2thY2ssCisJLmFjawkJPSBzM2NfaXJxX3VhcnRfYWNrLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHMzY19pbml0X3VhcnRfaXJxKHN0cnVjdCBzM2NfdWFydF9pcnEgKnVpcnEpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2ModWlycS0+cGFyZW50X2lycSk7CisJdm9pZCBfX2lvbWVtICpyZWdfYmFzZSA9IHVpcnEtPnJlZ3M7CisJdW5zaWduZWQgaW50IGlycTsKKwlpbnQgb2ZmczsKKworCS8qIG1hc2sgYWxsIGludGVycnVwdHMgYXQgdGhlIHN0YXJ0LiAqLworCV9fcmF3X3dyaXRlbCgweGYsIHJlZ19iYXNlICsgUzNDNjRYWF9VSU5UTSk7CisKKwlmb3IgKG9mZnMgPSAwOyBvZmZzIDwgMzsgb2ZmcysrKSB7CisJCWlycSA9IHVpcnEtPmJhc2VfaXJxICsgb2ZmczsKKworCQlzZXRfaXJxX2NoaXAoaXJxLCAmczNjX2lycV91YXJ0KTsKKwkJc2V0X2lycV9jaGlwX2RhdGEoaXJxLCB1aXJxKTsKKwkJc2V0X2lycV9oYW5kbGVyKGlycSwgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKKwl9CisKKwlkZXNjLT5oYW5kbGVyX2RhdGEgPSB1aXJxOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKHVpcnEtPnBhcmVudF9pcnEsIHMzY19pcnFfZGVtdXhfdWFydCk7Cit9CisKKy8qKgorICogczNjX2luaXRfdWFydF9pcnFzKCkgLSBpbml0aWFsaXNlIFVBUlQgSVJRcyBhbmQgdGhlIG5lY2Vzc2FyeSBkZW11eGluZworICogQGlycTogVGhlIGludGVycnVwdCBkYXRhIGZvciByZWdpc3RlcmluZworICogQG5yX2lycXM6IFRoZSBudW1iZXIgb2YgaW50ZXJydXB0IGRlc2NyaXB0aW9ucyBpbiBAaXJxLgorICoKKyAqIFJlZ2lzdGVyIHRoZSBVQVJUIGludGVycnVwdHMgc3BlY2lmaWVkIGJ5IEBpcnEgaW5jbHVkaW5nIHRoZSBkZW11eGluZworICogcm91dGluZXMuIFRoaXMgc3VwcG9ydHMgdGhlIFMzQzY0MDAgYW5kIG5ld2VyIHN0eWxlIG9mIGRldmljZXMuCisgKi8KK3ZvaWQgX19pbml0IHMzY19pbml0X3VhcnRfaXJxcyhzdHJ1Y3QgczNjX3VhcnRfaXJxICppcnEsIHVuc2lnbmVkIGludCBucl9pcnFzKQoreworCWZvciAoOyBucl9pcnFzID4gMDsgbnJfaXJxcy0tLCBpcnErKykKKwkJczNjX2luaXRfdWFydF9pcnEoaXJxKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pcnEtdmljLXRpbWVyLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaXJxLXZpYy10aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNzA1MTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvaXJxLXZpYy10aW1lci5jCkBAIC0wLDAgKzEsODYgQEAKKy8qIGFyY2gvYXJtL3BsYXQtc2Ftc3VuZy9pcnEtdmljLXRpbWVyLmMKKyAqCW9yaWdpbmFsbHkgcGFydCBvZiBhcmNoL2FybS9wbGF0LXMzYzY0eHgvaXJxLmMKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBPcGVubW9rbywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggU2ltdGVjIEVsZWN0cm9uaWNzCisgKiAgICAgIEJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqICAgICAgaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0M2NFhYIC0gSW50ZXJydXB0IGhhbmRsaW5nCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8cGxhdC9pcnEtdmljLXRpbWVyLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXRpbWVyLmg+CisKK3N0YXRpYyB2b2lkIHMzY19pcnFfZGVtdXhfdmljX3RpbWVyKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlnZW5lcmljX2hhbmRsZV9pcnEoKGludClkZXNjLT5oYW5kbGVyX2RhdGEpOworfQorCisvKiBXZSBhc3N1bWUgdGhlIElSUV9USU1FUjAuLklSUV9USU1FUjQgcmFuZ2UgaXMgY29udGludW91cy4gKi8KKworc3RhdGljIHZvaWQgczNjX2lycV90aW1lcl9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdTMyIHJlZyA9IF9fcmF3X3JlYWRsKFMzQzY0WFhfVElOVF9DU1RBVCk7CisKKwlyZWcgJj0gMHgxZjsgIC8qIG1hc2sgb3V0IHBlbmRpbmcgaW50ZXJydXB0cyAqLworCXJlZyAmPSB+KDEgPDwgKGlycSAtIElSUV9USU1FUjApKTsKKwlfX3Jhd193cml0ZWwocmVnLCBTM0M2NFhYX1RJTlRfQ1NUQVQpOworfQorCitzdGF0aWMgdm9pZCBzM2NfaXJxX3RpbWVyX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXUzMiByZWcgPSBfX3Jhd19yZWFkbChTM0M2NFhYX1RJTlRfQ1NUQVQpOworCisJcmVnICY9IDB4MWY7ICAvKiBtYXNrIG91dCBwZW5kaW5nIGludGVycnVwdHMgKi8KKwlyZWcgfD0gMSA8PCAoaXJxIC0gSVJRX1RJTUVSMCk7CisJX19yYXdfd3JpdGVsKHJlZywgUzNDNjRYWF9USU5UX0NTVEFUKTsKK30KKworc3RhdGljIHZvaWQgczNjX2lycV90aW1lcl9hY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwl1MzIgcmVnID0gX19yYXdfcmVhZGwoUzNDNjRYWF9USU5UX0NTVEFUKTsKKworCXJlZyAmPSAweDFmOworCXJlZyB8PSAoMSA8PCA1KSA8PCAoaXJxIC0gSVJRX1RJTUVSMCk7CisJX19yYXdfd3JpdGVsKHJlZywgUzNDNjRYWF9USU5UX0NTVEFUKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBzM2NfaXJxX3RpbWVyID0geworCS5uYW1lCQk9ICJzM2MtdGltZXIiLAorCS5tYXNrCQk9IHMzY19pcnFfdGltZXJfbWFzaywKKwkudW5tYXNrCQk9IHMzY19pcnFfdGltZXJfdW5tYXNrLAorCS5hY2sJCT0gczNjX2lycV90aW1lcl9hY2ssCit9OworCisvKioKKyAqIHMzY19pbml0X3ZpY190aW1lcl9pcnEoKSAtIGluaXRpYWxpc2UgdGltZXIgaXJxIGNoYW5pbmVkIG9mZiBWSUMuXAorICogQHBhcmVudF9pcnE6IFRoZSBwYXJlbnQgSVJRIG9uIHRoZSBWSUMgZm9yIHRoZSB0aW1lci4KKyAqIEB0aW1lcl9pcnE6IFRoZSBJUlEgdG8gYmUgdXNlZCBmb3IgdGhlIHRpbWVyLgorICoKKyAqIFJlZ2lzdGVyIHRoZSBuZWNlc3NhcnkgSVJRIGNoYWluaW5nIGFuZCBzdXBwb3J0IGZvciB0aGUgdGltZXIgSVJRcworICogY2hhaW5lZCBvZiB0aGUgVklDLgorICovCit2b2lkIF9faW5pdCBzM2NfaW5pdF92aWNfdGltZXJfaXJxKHVuc2lnbmVkIGludCBwYXJlbnRfaXJxLAorCQkJCSAgIHVuc2lnbmVkIGludCB0aW1lcl9pcnEpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MocGFyZW50X2lycSk7CisKKwlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihwYXJlbnRfaXJxLCBzM2NfaXJxX2RlbXV4X3ZpY190aW1lcik7CisKKwlzZXRfaXJxX2NoaXAodGltZXJfaXJxLCAmczNjX2lycV90aW1lcik7CisJc2V0X2lycV9oYW5kbGVyKHRpbWVyX2lycSwgaGFuZGxlX2xldmVsX2lycSk7CisJc2V0X2lycV9mbGFncyh0aW1lcl9pcnEsIElSUUZfVkFMSUQpOworCisJZGVzYy0+aGFuZGxlcl9kYXRhID0gKHZvaWQgKil0aW1lcl9pcnE7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0tY2hlY2suYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9wbS1jaGVjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNWJiNzcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0tY2hlY2suYwpAQCAtMCwwICsxLDI0MiBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvcG0tY2hlY2suYworICogIG9yaWdpbmFsbHkgaW4gbGludXgvYXJjaC9hcm0vcGxhdC1zM2MyNHh4L3BtLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTM0MgUG93ZXIgTWFuZ2FtZW50IC0gc3VzcGVuZC9yZXN1bWUgbWVtb3J5IGNvcnJ1cHRpdW9uIGNoZWNrLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorCisjaW5jbHVkZSA8cGxhdC9wbS5oPgorCisjaWYgQ09ORklHX1NBTVNVTkdfUE1fQ0hFQ0tfQ0hVTktTSVpFIDwgMQorI2Vycm9yIENPTkZJR19TQU1TVU5HX1BNX0NIRUNLX0NIVU5LU0laRSBtdXN0IGJlIGEgcG9zaXRpdmUgbm9uLXplcm8gdmFsdWUKKyNlbmRpZgorCisvKiBzdXNwZW5kIGNoZWNraW5nIGNvZGUuLi4KKyAqCisgKiB0aGlzIG5leHQgYXJlYSBkb2VzIGEgc2V0IG9mIGNyYyBjaGVja3Mgb3ZlciBhbGwgdGhlIGluc3RhbGxlZAorICogbWVtb3J5LCBzbyB0aGUgc3lzdGVtIGNhbiB2ZXJpZnkgaWYgdGhlIHJlc3VtZSB3YXMgb2suCisgKgorICogQ09ORklHX1NBTVNVTkdfUE1fQ0hFQ0tfQ0hVTktTSVpFIGRlZmluZXMgdGhlIGJsb2NrLXNpemUgZm9yIHRoZSBDUkMsCisgKiBpbmNyZWFzaW5nIGl0IHdpbGwgbWVhbiB0aGF0IHRoZSBhcmVhIGNvcnJ1cHRlZCB3aWxsIGJlIGxlc3MgZWFzeSB0byBzcG90LAorICogYW5kIHJlZHVjaW5nIHRoZSBzaXplIHdpbGwgY2F1c2UgdGhlIENSQyBzYXZlIGFyZWEgdG8gZ3JvdworKi8KKworI2RlZmluZSBDSEVDS19DSFVOS1NJWkUgKENPTkZJR19TQU1TVU5HX1BNX0NIRUNLX0NIVU5LU0laRSAqIDEwMjQpCisKK3N0YXRpYyB1MzIgY3JjX3NpemU7CS8qIHNpemUgbmVlZGVkIGZvciB0aGUgY3JjIGJsb2NrICovCitzdGF0aWMgdTMyICpjcmNzOwkvKiBhbGxvY2F0ZWQgb3ZlciBzdXNwZW5kL3Jlc3VtZSAqLworCit0eXBlZGVmIHUzMiAqKHJ1bl9mbl90KShzdHJ1Y3QgcmVzb3VyY2UgKnB0ciwgdTMyICphcmcpOworCisvKiBzM2NfcG1fcnVuX3JlcworICoKKyAqIGdvIHRocm91Z2ggdGhlIGdpdmVuIHJlc291cmNlIGxpc3QsIGFuZCBsb29rIGZvciBzeXN0ZW0gcmFtCisqLworCitzdGF0aWMgdm9pZCBzM2NfcG1fcnVuX3JlcyhzdHJ1Y3QgcmVzb3VyY2UgKnB0ciwgcnVuX2ZuX3QgZm4sIHUzMiAqYXJnKQoreworCXdoaWxlIChwdHIgIT0gTlVMTCkgeworCQlpZiAocHRyLT5jaGlsZCAhPSBOVUxMKQorCQkJczNjX3BtX3J1bl9yZXMocHRyLT5jaGlsZCwgZm4sIGFyZyk7CisKKwkJaWYgKChwdHItPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pICYmCisJCSAgICBzdHJjbXAocHRyLT5uYW1lLCAiU3lzdGVtIFJBTSIpID09IDApIHsKKwkJCVMzQ19QTURCRygiRm91bmQgc3lzdGVtIFJBTSBhdCAlMDhseC4uJTA4bHhcbiIsCisJCQkJICAodW5zaWduZWQgbG9uZylwdHItPnN0YXJ0LAorCQkJCSAgKHVuc2lnbmVkIGxvbmcpcHRyLT5lbmQpOworCQkJYXJnID0gKGZuKShwdHIsIGFyZyk7CisJCX0KKworCQlwdHIgPSBwdHItPnNpYmxpbmc7CisJfQorfQorCitzdGF0aWMgdm9pZCBzM2NfcG1fcnVuX3N5c3JhbShydW5fZm5fdCBmbiwgdTMyICphcmcpCit7CisJczNjX3BtX3J1bl9yZXMoJmlvbWVtX3Jlc291cmNlLCBmbiwgYXJnKTsKK30KKworc3RhdGljIHUzMiAqczNjX3BtX2NvdW50cmFtKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgKnZhbCkKK3sKKwl1MzIgc2l6ZSA9ICh1MzIpKHJlcy0+ZW5kIC0gcmVzLT5zdGFydCkrMTsKKworCXNpemUgKz0gQ0hFQ0tfQ0hVTktTSVpFLTE7CisJc2l6ZSAvPSBDSEVDS19DSFVOS1NJWkU7CisKKwlTM0NfUE1EQkcoIkFyZWEgJTA4bHguLiUwOGx4LCAlZCBibG9ja3NcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcpcmVzLT5zdGFydCwgKHVuc2lnbmVkIGxvbmcpcmVzLT5lbmQsIHNpemUpOworCisJKnZhbCArPSBzaXplICogc2l6ZW9mKHUzMik7CisJcmV0dXJuIHZhbDsKK30KKworLyogczNjX3BtX3ByZXBhcmVfY2hlY2sKKyAqCisgKiBwcmVwYXJlIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gZm9yIGNyZWF0aW5nIHRoZSBDUkNzLiBUaGlzCisgKiBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSBmaW5hbCBzYXZlLCBhcyBpdCB3aWxsIHJlcXVpcmUgbWVtb3J5CisgKiBhbGxvY2F0aW5nLCBhbmQgdGh1cyB0b3VjaGluZyBiaXRzIG9mIHRoZSBrZXJuZWwgd2UgZG8gbm90CisgKiBrbm93IGFib3V0LgorKi8KKwordm9pZCBzM2NfcG1fY2hlY2tfcHJlcGFyZSh2b2lkKQoreworCWNyY19zaXplID0gMDsKKworCXMzY19wbV9ydW5fc3lzcmFtKHMzY19wbV9jb3VudHJhbSwgJmNyY19zaXplKTsKKworCVMzQ19QTURCRygiczNjX3BtX3ByZXBhcmVfY2hlY2s6ICV1IGNoZWNrcyBuZWVkZWRcbiIsIGNyY19zaXplKTsKKworCWNyY3MgPSBrbWFsbG9jKGNyY19zaXplKzQsIEdGUF9LRVJORUwpOworCWlmIChjcmNzID09IE5VTEwpCisJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGFsbG9jYXRlZCBDUkMgc2F2ZSBhcmVhXG4iKTsKK30KKworc3RhdGljIHUzMiAqczNjX3BtX21ha2VjaGVjayhzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdTMyICp2YWwpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBsZWZ0OworCisJZm9yIChhZGRyID0gcmVzLT5zdGFydDsgYWRkciA8IHJlcy0+ZW5kOworCSAgICAgYWRkciArPSBDSEVDS19DSFVOS1NJWkUpIHsKKwkJbGVmdCA9IHJlcy0+ZW5kIC0gYWRkcjsKKworCQlpZiAobGVmdCA+IENIRUNLX0NIVU5LU0laRSkKKwkJCWxlZnQgPSBDSEVDS19DSFVOS1NJWkU7CisKKwkJKnZhbCA9IGNyYzMyX2xlKH4wLCBwaHlzX3RvX3ZpcnQoYWRkciksIGxlZnQpOworCQl2YWwrKzsKKwl9CisKKwlyZXR1cm4gdmFsOworfQorCisvKiBzM2NfcG1fY2hlY2tfc3RvcmUKKyAqCisgKiBjb21wdXRlIHRoZSBDUkMgdmFsdWVzIGZvciB0aGUgbWVtb3J5IGJsb2NrcyBiZWZvcmUgdGhlIGZpbmFsCisgKiBzbGVlcC4KKyovCisKK3ZvaWQgczNjX3BtX2NoZWNrX3N0b3JlKHZvaWQpCit7CisJaWYgKGNyY3MgIT0gTlVMTCkKKwkJczNjX3BtX3J1bl9zeXNyYW0oczNjX3BtX21ha2VjaGVjaywgY3Jjcyk7Cit9CisKKy8qIGluX3JlZ2lvbgorICoKKyAqIHJldHVybiBUUlVFIGlmIHRoZSBhcmVhIGRlZmluZWQgYnkgcHRyLi5wdHIrc2l6ZSBjb250YWlucyB0aGUKKyAqIHdoYXQuLndoYXQrd2hhdHN6CisqLworCitzdGF0aWMgaW5saW5lIGludCBpbl9yZWdpb24odm9pZCAqcHRyLCBpbnQgc2l6ZSwgdm9pZCAqd2hhdCwgc2l6ZV90IHdoYXRzeikKK3sKKwlpZiAoKHdoYXQrd2hhdHN6KSA8IHB0cikKKwkJcmV0dXJuIDA7CisKKwlpZiAod2hhdCA+IChwdHIrc2l6ZSkpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKKy8qKgorICogczNjX3BtX3J1bmNoZWNrKCkgLSBoZWxwZXIgdG8gY2hlY2sgYSByZXNvdXJjZSBvbiByZXN0b3JlLgorICogQHJlczogVGhlIHJlc291cmNlIHRvIGNoZWNrCisgKiBAdmFrOiBQb2ludGVyIHRvIGxpc3Qgb2YgQ1JDMzIgdmFsdWVzIHRvIGNoZWNrLgorICoKKyAqIENhbGxlZCBmcm9tIHRoZSBzM2NfcG1fY2hlY2tfcmVzdG9yZSgpIHZpYSBzM2NfcG1fcnVuX3N5c3JhbSgpLCB0aGlzCisgKiBmdW5jdGlvbiBydW5zIHRoZSBnaXZlbiBtZW1vcnkgcmVzb3VyY2UgY2hlY2tpbmcgaXQgYWdhaW5zdCB0aGUgc3RvcmVkCisgKiBDUkMgdG8gZW5zdXJlIHRoYXQgbWVtb3J5IGlzIHJlc3RvcmVkLiBUaGUgZnVuY3Rpb24gdHJpZXMgdG8gc2tpcCBhcworICogbWFueSBvZiB0aGUgYXJlYXMgdXNlZCBkdXJpbmcgdGhlIHN1c3BlbmQgcHJvY2Vzcy4KKyAqLworc3RhdGljIHUzMiAqczNjX3BtX3J1bmNoZWNrKHN0cnVjdCByZXNvdXJjZSAqcmVzLCB1MzIgKnZhbCkKK3sKKwl2b2lkICpzYXZlX2F0ID0gcGh5c190b192aXJ0KHMzY19zbGVlcF9zYXZlX3BoeXMpOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBsb25nIGxlZnQ7CisJdm9pZCAqc3RrcGFnZTsKKwl2b2lkICpwdHI7CisJdTMyIGNhbGM7CisKKwlzdGtwYWdlID0gKHZvaWQgKikoKHUzMikmY2FsYyAmIH5QQUdFX01BU0spOworCisJZm9yIChhZGRyID0gcmVzLT5zdGFydDsgYWRkciA8IHJlcy0+ZW5kOworCSAgICAgYWRkciArPSBDSEVDS19DSFVOS1NJWkUpIHsKKwkJbGVmdCA9IHJlcy0+ZW5kIC0gYWRkcjsKKworCQlpZiAobGVmdCA+IENIRUNLX0NIVU5LU0laRSkKKwkJCWxlZnQgPSBDSEVDS19DSFVOS1NJWkU7CisKKwkJcHRyID0gcGh5c190b192aXJ0KGFkZHIpOworCisJCWlmIChpbl9yZWdpb24ocHRyLCBsZWZ0LCBzdGtwYWdlLCA0MDk2KSkgeworCQkJUzNDX1BNREJHKCJza2lwcGluZyAlMDhseCwgaGFzIHN0YWNrIGluXG4iLCBhZGRyKTsKKwkJCWdvdG8gc2tpcF9jaGVjazsKKwkJfQorCisJCWlmIChpbl9yZWdpb24ocHRyLCBsZWZ0LCBjcmNzLCBjcmNfc2l6ZSkpIHsKKwkJCVMzQ19QTURCRygic2tpcHBpbmcgJTA4bHgsIGhhcyBjcmMgYmxvY2sgaW5cbiIsIGFkZHIpOworCQkJZ290byBza2lwX2NoZWNrOworCQl9CisKKwkJaWYgKGluX3JlZ2lvbihwdHIsIGxlZnQsIHNhdmVfYXQsIDMyKjQgKSkgeworCQkJUzNDX1BNREJHKCJza2lwcGluZyAlMDhseCwgaGFzIHNhdmUgYmxvY2sgaW5cbiIsIGFkZHIpOworCQkJZ290byBza2lwX2NoZWNrOworCQl9CisKKwkJLyogY2FsY3VsYXRlIGFuZCBjaGVjayB0aGUgY2hlY2tzdW0gKi8KKworCQljYWxjID0gY3JjMzJfbGUofjAsIHB0ciwgbGVmdCk7CisJCWlmIChjYWxjICE9ICp2YWwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiUmVzdG9yZSBDUkMgZXJyb3IgYXQgIgorCQkJICAgICAgICIlMDhseCAoJTA4eCB2cyAlMDh4KVxuIiwgYWRkciwgY2FsYywgKnZhbCk7CisKKwkJCVMzQ19QTURCRygiUmVzdG9yZSBDUkMgZXJyb3IgYXQgJTA4bHggKCUwOHggdnMgJTA4eClcbiIsCisJCQkgICAgYWRkciwgY2FsYywgKnZhbCk7CisJCX0KKworCXNraXBfY2hlY2s6CisJCXZhbCsrOworCX0KKworCXJldHVybiB2YWw7Cit9CisKKy8qKgorICogczNjX3BtX2NoZWNrX3Jlc3RvcmUoKSAtIG1lbW9yeSBjaGVjayBjYWxsZWQgb24gcmVzdW1lCisgKgorICogY2hlY2sgdGhlIENSQ3MgYWZ0ZXIgdGhlIHJlc3RvcmUgZXZlbnQgYW5kIGZyZWUgdGhlIG1lbW9yeSB1c2VkCisgKiB0byBob2xkIHRoZW0KKyovCit2b2lkIHMzY19wbV9jaGVja19yZXN0b3JlKHZvaWQpCit7CisJaWYgKGNyY3MgIT0gTlVMTCkKKwkJczNjX3BtX3J1bl9zeXNyYW0oczNjX3BtX3J1bmNoZWNrLCBjcmNzKTsKK30KKworLyoqCisgKiBzM2NfcG1fY2hlY2tfY2xlYW51cCgpIC0gZnJlZSBtZW1vcnkgcmVzb3VyY2VzCisgKgorICogRnJlZSB0aGUgcmVzb3VyY2VzIHRoYXQgd2hlcmUgYWxsb2NhdGVkIGJ5IHRoZSBzdXNwZW5kCisgKiBtZW1vcnkgY2hlY2sgY29kZS4gV2UgZG8gdGhpcyBzZXBhcmF0ZWx5IGZyb20gdGhlCisgKiBzM2NfcG1fY2hlY2tfcmVzdG9yZSgpIGZ1bmN0aW9uIGFzIHdlIGNhbm5vdCBjYWxsIGFueQorICogZnVuY3Rpb25zIHRoYXQgbWlnaHQgc2xlZXAgZHVyaW5nIHRoYXQgcmVzdW1lLgorICovCit2b2lkIHMzY19wbV9jaGVja19jbGVhbnVwKHZvaWQpCit7CisJa2ZyZWUoY3Jjcyk7CisJY3JjcyA9IE5VTEw7Cit9CisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9wbS1ncGlvLmMgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0tZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YTRjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0tZ3Bpby5jCkBAIC0wLDAgKzEsMzgwIEBACisKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjL3BtLWdwaW8uYworICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogUzNDIHNlcmllcyBHUElPIFBNIGNvZGUKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvZ3Bpby1jb3JlLmg+CisjaW5jbHVkZSA8cGxhdC9wbS5oPgorCisvKiBQTSBHUElPIGhlbHBlcnMgKi8KKworI2RlZmluZSBPRkZTX0NPTgkoMHgwMCkKKyNkZWZpbmUgT0ZGU19EQVQJKDB4MDQpCisjZGVmaW5lIE9GRlNfVVAJCSgweDA4KQorCitzdGF0aWMgdm9pZCBzM2NfZ3Bpb19wbV8xYml0X3NhdmUoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXApCit7CisJY2hpcC0+cG1fc2F2ZVswXSA9IF9fcmF3X3JlYWRsKGNoaXAtPmJhc2UgKyBPRkZTX0NPTik7CisJY2hpcC0+cG1fc2F2ZVsxXSA9IF9fcmF3X3JlYWRsKGNoaXAtPmJhc2UgKyBPRkZTX0RBVCk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19ncGlvX3BtXzFiaXRfcmVzdW1lKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwKQoreworCXZvaWQgX19pb21lbSAqYmFzZSA9IGNoaXAtPmJhc2U7CisJdTMyIG9sZF9ncGNvbiA9IF9fcmF3X3JlYWRsKGJhc2UgKyBPRkZTX0NPTik7CisJdTMyIG9sZF9ncGRhdCA9IF9fcmF3X3JlYWRsKGJhc2UgKyBPRkZTX0RBVCk7CisJdTMyIGdwc19ncGNvbiA9IGNoaXAtPnBtX3NhdmVbMF07CisJdTMyIGdwc19ncGRhdCA9IGNoaXAtPnBtX3NhdmVbMV07CisJdTMyIGdwY29uOworCisJLyogR1BBQ09OIG9ubHkgaGFzIG9uZSBiaXQgcGVyIGNvbnRyb2wgLyBkYXRhIGFuZCBubyBQVUxMVVBzLgorCSAqIEdQQUNPTlt4XSA9IDAgPT4gT3V0cHV0LCAxID0+IFNGTiAqLworCisJLyogZmlyc3Qgc2V0IGFsbCBTRk4gYml0cyB0byBTRk4gKi8KKworCWdwY29uID0gb2xkX2dwY29uIHwgZ3BzX2dwY29uOworCV9fcmF3X3dyaXRlbChncGNvbiwgYmFzZSArIE9GRlNfQ09OKTsKKworCS8qIG5vdyBzZXQgYWxsIHRoZSBvdGhlciBiaXRzICovCisKKwlfX3Jhd193cml0ZWwoZ3BzX2dwZGF0LCBiYXNlICsgT0ZGU19EQVQpOworCV9fcmF3X3dyaXRlbChncHNfZ3Bjb24sIGJhc2UgKyBPRkZTX0NPTik7CisKKwlTM0NfUE1EQkcoIiVzOiBDT04gJTA4eCA9PiAlMDh4LCBEQVQgJTA4eCA9PiAlMDh4XG4iLAorCQkgIGNoaXAtPmNoaXAubGFiZWwsIG9sZF9ncGNvbiwgZ3BzX2dwY29uLCBvbGRfZ3BkYXQsIGdwc19ncGRhdCk7Cit9CisKK3N0cnVjdCBzM2NfZ3Bpb19wbSBzM2NfZ3Bpb19wbV8xYml0ID0geworCS5zYXZlCT0gczNjX2dwaW9fcG1fMWJpdF9zYXZlLAorCS5yZXN1bWUgPSBzM2NfZ3Bpb19wbV8xYml0X3Jlc3VtZSwKK307CisKK3N0YXRpYyB2b2lkIHMzY19ncGlvX3BtXzJiaXRfc2F2ZShzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqY2hpcCkKK3sKKwljaGlwLT5wbV9zYXZlWzBdID0gX19yYXdfcmVhZGwoY2hpcC0+YmFzZSArIE9GRlNfQ09OKTsKKwljaGlwLT5wbV9zYXZlWzFdID0gX19yYXdfcmVhZGwoY2hpcC0+YmFzZSArIE9GRlNfREFUKTsKKwljaGlwLT5wbV9zYXZlWzJdID0gX19yYXdfcmVhZGwoY2hpcC0+YmFzZSArIE9GRlNfVVApOworfQorCisvKiBUZXN0IHdoZXRoZXIgdGhlIGdpdmVuIG1hc2tlZCtzaGlmdGVkIGJpdHMgb2YgYW4gR1BJTyBjb25maWd1cmF0aW9uCisgKiBhcmUgb25lIG9mIHRoZSBTRk4gKHNwZWNpYWwgZnVuY3Rpb24pIG1vZGVzLiAqLworCitzdGF0aWMgaW5saW5lIGludCBpc19zZm4odW5zaWduZWQgbG9uZyBjb24pCit7CisJcmV0dXJuIGNvbiA+PSAyOworfQorCisvKiBUZXN0IGlmIHRoZSBnaXZlbiBtYXNrZWQrc2hpZnRlZCBHUElPIGNvbmZpZ3VyYXRpb24gaXMgYW4gaW5wdXQgKi8KKworc3RhdGljIGlubGluZSBpbnQgaXNfaW4odW5zaWduZWQgbG9uZyBjb24pCit7CisJcmV0dXJuIGNvbiA9PSAwOworfQorCisvKiBUZXN0IGlmIHRoZSBnaXZlbiBtYXNrZWQrc2hpZnRlZCBHUElPIGNvbmZpZ3VyYXRpb24gaXMgYW4gb3V0cHV0ICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX291dCh1bnNpZ25lZCBsb25nIGNvbikKK3sKKwlyZXR1cm4gY29uID09IDE7Cit9CisKKy8qKgorICogczNjX2dwaW9fcG1fMmJpdF9yZXN1bWUoKSAtIHJlc3RvcmUgdGhlIGdpdmVuIEdQSU8gYmFuaworICogQGNoaXA6IFRoZSBjaGlwIGluZm9ybWF0aW9uIHRvIHJlc3VtZS4KKyAqCisgKiBSZXN0b3JlIG9uZSBvZiB0aGUgR1BJTyBiYW5rcyB0aGF0IHdhcyBzYXZlZCBkdXJpbmcgc3VzcGVuZC4gVGhpcyBpcworICogbm90IGFzIHNpbXBsZSBhcyBvbmNlIHRob3VnaHQsIGR1ZSB0byB0aGUgcG9zc2liaWxpdHkgb2YgZ2xpdGNoZXMKKyAqIGZyb20gdGhlIG9yZGVyIHRoYXQgdGhlIENPTiBhbmQgREFUIHJlZ2lzdGVycyBhcmUgc2V0IGluLgorICoKKyAqIFRoZSB0aHJlZSBzdGF0ZXMgdGhlIHBpbiBjYW4gYmUgYXJlIHtJTixPVVQsU0ZOfSB3aGljaCBnaXZlcyB1cyA5CisgKiBjb21iaW5hdGlvbnMgb2YgY2hhbmdlcyB0byBjaGVjay4gVGhyZWUgb2YgdGhlc2UsIGlmIHRoZSBwaW4gc3RheXMKKyAqIGluIHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gY2FuIGJlIGRpc2NvdW50ZWQuIFRoaXMgbGVhdmVzIHVzIHdpdGgKKyAqIHRoZSBmb2xsb3dpbmc6CisgKgorICogeyBJTiA9PiBPVVQgfSAgQ2hhbmdlIERBVCBmaXJzdAorICogeyBJTiA9PiBTRk4gfSAgQ2hhbmdlIENPTiBmaXJzdAorICogeyBPVVQgPT4gU0ZOIH0gQ2hhbmdlIENPTiBmaXJzdCwgc28gbmV3IGRhdGEgd2lsbCBub3QgZ2xpdGNoCisgKiB7IE9VVCA9PiBJTiB9ICBDaGFuZ2UgQ09OIGZpcnN0LCBzbyBuZXcgZGF0YSB3aWxsIG5vdCBnbGl0Y2gKKyAqIHsgU0ZOID0+IElOIH0gIENoYW5nZSBDT04gZmlyc3QKKyAqIHsgU0ZOID0+IE9VVCB9IENoYW5nZSBEQVQgZmlyc3QsIHNvIG5ldyBkYXRhIHdpbGwgbm90IGdsaXRjaCBbMV0KKyAqCisgKiBXZSBkbyBub3QgY3VycmVudGx5IGRlYWwgd2l0aCB0aGUgVVAgcmVnaXN0ZXJzIGFzIHRoZXNlIGNvbnRyb2wKKyAqIHdlYWsgcmVzaXN0b3JzLCBzbyBhIHNtYWxsIGRlbGF5IGluIGNoYW5nZSBzaG91bGQgbm90IG5lZWQgdG8gYnJpbmcKKyAqIHRoZXNlIGludG8gdGhlIGNhbGN1bGF0aW9ucy4KKyAqCisgKiBbMV0gdGhpcyBhc3N1bWVzIHRoYXQgd3JpdGluZyB0byBhIHBpbiBEQVQgd2hpbHN0IGluIFNGTiB3aWxsIHNldCB0aGUKKyAqICAgICBzdGF0ZSBmb3Igd2hlbiBpdCBpcyBuZXh0IG91dHB1dC4KKyAqLworc3RhdGljIHZvaWQgczNjX2dwaW9fcG1fMmJpdF9yZXN1bWUoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXApCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gY2hpcC0+YmFzZTsKKwl1MzIgb2xkX2dwY29uID0gX19yYXdfcmVhZGwoYmFzZSArIE9GRlNfQ09OKTsKKwl1MzIgb2xkX2dwZGF0ID0gX19yYXdfcmVhZGwoYmFzZSArIE9GRlNfREFUKTsKKwl1MzIgZ3BzX2dwY29uID0gY2hpcC0+cG1fc2F2ZVswXTsKKwl1MzIgZ3BzX2dwZGF0ID0gY2hpcC0+cG1fc2F2ZVsxXTsKKwl1MzIgZ3Bjb24sIG9sZCwgbmV3LCBtYXNrOworCXUzMiBjaGFuZ2VfbWFzayA9IDB4MDsKKwlpbnQgbnI7CisKKwkvKiByZXN0b3JlIEdQSU8gcHVsbC11cCBzZXR0aW5ncyAqLworCV9fcmF3X3dyaXRlbChjaGlwLT5wbV9zYXZlWzJdLCBiYXNlICsgT0ZGU19VUCk7CisKKwkvKiBDcmVhdGUgYSBjaGFuZ2VfbWFzayBvZiBhbGwgdGhlIGl0ZW1zIHRoYXQgbmVlZCB0byBoYXZlCisJICogdGhlaXIgQ09OIHZhbHVlIGNoYW5nZWQgYmVmb3JlIHRoZWlyIERBVCB2YWx1ZSwgc28gdGhhdAorCSAqIHdlIG1pbmltaXNlIHRoZSB3b3JrIGJldHdlZW4gdGhlIHR3byBzZXR0aW5ncy4KKwkgKi8KKworCWZvciAobnIgPSAwLCBtYXNrID0gMHgwMzsgbnIgPCAzMjsgbnIgKz0gMiwgbWFzayA8PD0gMikgeworCQlvbGQgPSAob2xkX2dwY29uICYgbWFzaykgPj4gbnI7CisJCW5ldyA9IChncHNfZ3Bjb24gJiBtYXNrKSA+PiBucjsKKworCQkvKiBJZiB0aGVyZSBpcyBubyBjaGFuZ2UsIHRoZW4gc2tpcCAqLworCisJCWlmIChvbGQgPT0gbmV3KQorCQkJY29udGludWU7CisKKwkJLyogSWYgYm90aCBhcmUgc3BlY2lhbCBmdW5jdGlvbiwgdGhlbiBza2lwICovCisKKwkJaWYgKGlzX3NmbihvbGQpICYmIGlzX3NmbihuZXcpKQorCQkJY29udGludWU7CisKKwkJLyogQ2hhbmdlIGlzIElOID0+IE9VVCwgZG8gbm90IGNoYW5nZSBub3cgKi8KKworCQlpZiAoaXNfaW4ob2xkKSAmJiBpc19vdXQobmV3KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIENoYW5nZSBpcyBTRk4gPT4gT1VULCBkbyBub3QgY2hhbmdlIG5vdyAqLworCisJCWlmIChpc19zZm4ob2xkKSAmJiBpc19vdXQobmV3KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFdlIHNob3VsZCBub3cgYmUgYXQgdGhlIGNhc2Ugb2YgSU49PlNGTiwKKwkJICogT1VUPT5TRk4sIE9VVD0+SU4sIFNGTj0+SU4uICovCisKKwkJY2hhbmdlX21hc2sgfD0gbWFzazsKKwl9CisKKworCS8qIFdyaXRlIHRoZSBuZXcgQ09OIHNldHRpbmdzICovCisKKwlncGNvbiA9IG9sZF9ncGNvbiAmIH5jaGFuZ2VfbWFzazsKKwlncGNvbiB8PSBncHNfZ3Bjb24gJiBjaGFuZ2VfbWFzazsKKworCV9fcmF3X3dyaXRlbChncGNvbiwgYmFzZSArIE9GRlNfQ09OKTsKKworCS8qIE5vdyBjaGFuZ2UgYW55IGl0ZW1zIHRoYXQgcmVxdWlyZSBEQVQsQ09OICovCisKKwlfX3Jhd193cml0ZWwoZ3BzX2dwZGF0LCBiYXNlICsgT0ZGU19EQVQpOworCV9fcmF3X3dyaXRlbChncHNfZ3Bjb24sIGJhc2UgKyBPRkZTX0NPTik7CisKKwlTM0NfUE1EQkcoIiVzOiBDT04gJTA4eCA9PiAlMDh4LCBEQVQgJTA4eCA9PiAlMDh4XG4iLAorCQkgIGNoaXAtPmNoaXAubGFiZWwsIG9sZF9ncGNvbiwgZ3BzX2dwY29uLCBvbGRfZ3BkYXQsIGdwc19ncGRhdCk7Cit9CisKK3N0cnVjdCBzM2NfZ3Bpb19wbSBzM2NfZ3Bpb19wbV8yYml0ID0geworCS5zYXZlCT0gczNjX2dwaW9fcG1fMmJpdF9zYXZlLAorCS5yZXN1bWUgPSBzM2NfZ3Bpb19wbV8yYml0X3Jlc3VtZSwKK307CisKKyNpZmRlZiBDT05GSUdfQVJDSF9TM0M2NFhYCitzdGF0aWMgdm9pZCBzM2NfZ3Bpb19wbV80Yml0X3NhdmUoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXApCit7CisJY2hpcC0+cG1fc2F2ZVsxXSA9IF9fcmF3X3JlYWRsKGNoaXAtPmJhc2UgKyBPRkZTX0NPTik7CisJY2hpcC0+cG1fc2F2ZVsyXSA9IF9fcmF3X3JlYWRsKGNoaXAtPmJhc2UgKyBPRkZTX0RBVCk7CisJY2hpcC0+cG1fc2F2ZVszXSA9IF9fcmF3X3JlYWRsKGNoaXAtPmJhc2UgKyBPRkZTX1VQKTsKKworCWlmIChjaGlwLT5jaGlwLm5ncGlvID4gOCkKKwkJY2hpcC0+cG1fc2F2ZVswXSA9IF9fcmF3X3JlYWRsKGNoaXAtPmJhc2UgLSA0KTsKK30KKworc3RhdGljIHUzMiBzM2NfZ3Bpb19wbV80Yml0X21hc2sodTMyIG9sZF9ncGNvbiwgdTMyIGdwc19ncGNvbikKK3sKKwl1MzIgb2xkLCBuZXcsIG1hc2s7CisJdTMyIGNoYW5nZV9tYXNrID0gMHgwOworCWludCBucjsKKworCWZvciAobnIgPSAwLCBtYXNrID0gMHgwZjsgbnIgPCAxNjsgbnIgKz0gNCwgbWFzayA8PD0gNCkgeworCQlvbGQgPSAob2xkX2dwY29uICYgbWFzaykgPj4gbnI7CisJCW5ldyA9IChncHNfZ3Bjb24gJiBtYXNrKSA+PiBucjsKKworCQkvKiBJZiB0aGVyZSBpcyBubyBjaGFuZ2UsIHRoZW4gc2tpcCAqLworCisJCWlmIChvbGQgPT0gbmV3KQorCQkJY29udGludWU7CisKKwkJLyogSWYgYm90aCBhcmUgc3BlY2lhbCBmdW5jdGlvbiwgdGhlbiBza2lwICovCisKKwkJaWYgKGlzX3NmbihvbGQpICYmIGlzX3NmbihuZXcpKQorCQkJY29udGludWU7CisKKwkJLyogQ2hhbmdlIGlzIElOID0+IE9VVCwgZG8gbm90IGNoYW5nZSBub3cgKi8KKworCQlpZiAoaXNfaW4ob2xkKSAmJiBpc19vdXQobmV3KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIENoYW5nZSBpcyBTRk4gPT4gT1VULCBkbyBub3QgY2hhbmdlIG5vdyAqLworCisJCWlmIChpc19zZm4ob2xkKSAmJiBpc19vdXQobmV3KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFdlIHNob3VsZCBub3cgYmUgYXQgdGhlIGNhc2Ugb2YgSU49PlNGTiwKKwkJICogT1VUPT5TRk4sIE9VVD0+SU4sIFNGTj0+SU4uICovCisKKwkJY2hhbmdlX21hc2sgfD0gbWFzazsKKwl9CisKKwlyZXR1cm4gY2hhbmdlX21hc2s7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19ncGlvX3BtXzRiaXRfY29uKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpjaGlwLCBpbnQgaW5kZXgpCit7CisJdm9pZCBfX2lvbWVtICpjb24gPSBjaGlwLT5iYXNlICsgKGluZGV4ICogNCk7CisJdTMyIG9sZF9ncGNvbiA9IF9fcmF3X3JlYWRsKGNvbik7CisJdTMyIGdwc19ncGNvbiA9IGNoaXAtPnBtX3NhdmVbaW5kZXggKyAxXTsKKwl1MzIgZ3Bjb24sIG1hc2s7CisKKwltYXNrID0gczNjX2dwaW9fcG1fNGJpdF9tYXNrKG9sZF9ncGNvbiwgZ3BzX2dwY29uKTsKKworCWdwY29uID0gb2xkX2dwY29uICYgfm1hc2s7CisJZ3Bjb24gfD0gZ3BzX2dwY29uICYgbWFzazsKKworCV9fcmF3X3dyaXRlbChncGNvbiwgY29uKTsKK30KKworc3RhdGljIHZvaWQgczNjX2dwaW9fcG1fNGJpdF9yZXN1bWUoc3RydWN0IHMzY19ncGlvX2NoaXAgKmNoaXApCit7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gY2hpcC0+YmFzZTsKKwl1MzIgb2xkX2dwY29uWzJdOworCXUzMiBvbGRfZ3BkYXQgPSBfX3Jhd19yZWFkbChiYXNlICsgT0ZGU19EQVQpOworCXUzMiBncHNfZ3BkYXQgPSBjaGlwLT5wbV9zYXZlWzJdOworCisJLyogRmlyc3QsIG1vZGlmeSB0aGUgQ09OIHNldHRpbmdzICovCisKKwlvbGRfZ3Bjb25bMF0gPSAwOworCW9sZF9ncGNvblsxXSA9IF9fcmF3X3JlYWRsKGJhc2UgKyBPRkZTX0NPTik7CisKKwlzM2NfZ3Bpb19wbV80Yml0X2NvbihjaGlwLCAwKTsKKwlpZiAoY2hpcC0+Y2hpcC5uZ3BpbyA+IDgpIHsKKwkJb2xkX2dwY29uWzBdID0gX19yYXdfcmVhZGwoYmFzZSAtIDQpOworCQlzM2NfZ3Bpb19wbV80Yml0X2NvbihjaGlwLCAtMSk7CisJfQorCisJLyogTm93IGNoYW5nZSB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCByZXF1aXJlIERBVCxDT04gKi8KKworCV9fcmF3X3dyaXRlbChjaGlwLT5wbV9zYXZlWzJdLCBiYXNlICsgT0ZGU19EQVQpOworCV9fcmF3X3dyaXRlbChjaGlwLT5wbV9zYXZlWzFdLCBiYXNlICsgT0ZGU19DT04pOworCWlmIChjaGlwLT5jaGlwLm5ncGlvID4gOCkKKwkJX19yYXdfd3JpdGVsKGNoaXAtPnBtX3NhdmVbMF0sIGJhc2UgLSA0KTsKKworCV9fcmF3X3dyaXRlbChjaGlwLT5wbV9zYXZlWzJdLCBiYXNlICsgT0ZGU19EQVQpOworCV9fcmF3X3dyaXRlbChjaGlwLT5wbV9zYXZlWzNdLCBiYXNlICsgT0ZGU19VUCk7CisKKwlpZiAoY2hpcC0+Y2hpcC5uZ3BpbyA+IDgpIHsKKwkJUzNDX1BNREJHKCIlczogQ09ONCAlMDh4LCUwOHggPT4gJTA4eCwlMDh4LCBEQVQgJTA4eCA9PiAlMDh4XG4iLAorCQkJICBjaGlwLT5jaGlwLmxhYmVsLCBvbGRfZ3Bjb25bMF0sIG9sZF9ncGNvblsxXSwKKwkJCSAgX19yYXdfcmVhZGwoYmFzZSAtIDQpLAorCQkJICBfX3Jhd19yZWFkbChiYXNlICsgT0ZGU19DT04pLAorCQkJICBvbGRfZ3BkYXQsIGdwc19ncGRhdCk7CisJfSBlbHNlCisJCVMzQ19QTURCRygiJXM6IENPTjQgJTA4eCA9PiAlMDh4LCBEQVQgJTA4eCA9PiAlMDh4XG4iLAorCQkJICBjaGlwLT5jaGlwLmxhYmVsLCBvbGRfZ3Bjb25bMV0sCisJCQkgIF9fcmF3X3JlYWRsKGJhc2UgKyBPRkZTX0NPTiksCisJCQkgIG9sZF9ncGRhdCwgZ3BzX2dwZGF0KTsKK30KKworc3RydWN0IHMzY19ncGlvX3BtIHMzY19ncGlvX3BtXzRiaXQgPSB7CisJLnNhdmUJPSBzM2NfZ3Bpb19wbV80Yml0X3NhdmUsCisJLnJlc3VtZSA9IHMzY19ncGlvX3BtXzRiaXRfcmVzdW1lLAorfTsKKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9TM0M2NFhYICovCisKKy8qKgorICogczNjX3BtX3NhdmVfZ3BpbygpIC0gc2F2ZSBncGlvIGNoaXAgZGF0YSBmb3Igc3VzcGVuZAorICogQG91cmNoaXA6IFRoZSBjaGlwIGZvciBzdXNwZW5kLgorICovCitzdGF0aWMgdm9pZCBzM2NfcG1fc2F2ZV9ncGlvKHN0cnVjdCBzM2NfZ3Bpb19jaGlwICpvdXJjaGlwKQoreworCXN0cnVjdCBzM2NfZ3Bpb19wbSAqcG0gPSBvdXJjaGlwLT5wbTsKKworCWlmIChwbSA9PSBOVUxMIHx8IHBtLT5zYXZlID09IE5VTEwpCisJCVMzQ19QTURCRygiJXM6IG5vIHBtIGZvciAlc1xuIiwgX19mdW5jX18sIG91cmNoaXAtPmNoaXAubGFiZWwpOworCWVsc2UKKwkJcG0tPnNhdmUob3VyY2hpcCk7Cit9CisKKy8qKgorICogczNjX3BtX3NhdmVfZ3Bpb3MoKSAtIFNhdmUgdGhlIHN0YXRlIG9mIHRoZSBHUElPIGJhbmtzLgorICoKKyAqIEZvciBhbGwgdGhlIEdQSU8gYmFua3MsIHNhdmUgdGhlIHN0YXRlIG9mIGVhY2ggb25lIHJlYWR5IGZvciBnb2luZworICogaW50byBhIHN1c3BlbmQgbW9kZS4KKyAqLwordm9pZCBzM2NfcG1fc2F2ZV9ncGlvcyh2b2lkKQoreworCXN0cnVjdCBzM2NfZ3Bpb19jaGlwICpvdXJjaGlwOworCXVuc2lnbmVkIGludCBncGlvX25yOworCisJZm9yIChncGlvX25yID0gMDsgZ3Bpb19uciA8IFMzQ19HUElPX0VORDsgZ3Bpb19ucisrKSB7CisJCW91cmNoaXAgPSBzM2NfZ3Bpb2xpYl9nZXRjaGlwKGdwaW9fbnIpOworCQlpZiAoIW91cmNoaXApCisJCQljb250aW51ZTsKKworCQlzM2NfcG1fc2F2ZV9ncGlvKG91cmNoaXApOworCisJCVMzQ19QTURCRygiJXM6IHNhdmUgJTA4eCwlMDh4LCUwOHgsJTA4eFxuIiwKKwkJCSAgb3VyY2hpcC0+Y2hpcC5sYWJlbCwKKwkJCSAgb3VyY2hpcC0+cG1fc2F2ZVswXSwKKwkJCSAgb3VyY2hpcC0+cG1fc2F2ZVsxXSwKKwkJCSAgb3VyY2hpcC0+cG1fc2F2ZVsyXSwKKwkJCSAgb3VyY2hpcC0+cG1fc2F2ZVszXSk7CisKKwkJZ3Bpb19uciArPSBvdXJjaGlwLT5jaGlwLm5ncGlvOworCQlncGlvX25yICs9IENPTkZJR19TM0NfR1BJT19TUEFDRTsKKwl9Cit9CisKKy8qKgorICogczNjX3BtX3Jlc3VtZV9ncGlvKCkgLSByZXN0b3JlIGdwaW8gY2hpcCBkYXRhIGFmdGVyIHN1c3BlbmQKKyAqIEBvdXJjaGlwOiBUaGUgc3VzcGVuZGVkIGNoaXAuCisgKi8KK3N0YXRpYyB2b2lkIHMzY19wbV9yZXN1bWVfZ3BpbyhzdHJ1Y3QgczNjX2dwaW9fY2hpcCAqb3VyY2hpcCkKK3sKKwlzdHJ1Y3QgczNjX2dwaW9fcG0gKnBtID0gb3VyY2hpcC0+cG07CisKKwlpZiAocG0gPT0gTlVMTCB8fCBwbS0+cmVzdW1lID09IE5VTEwpCisJCVMzQ19QTURCRygiJXM6IG5vIHBtIGZvciAlc1xuIiwgX19mdW5jX18sIG91cmNoaXAtPmNoaXAubGFiZWwpOworCWVsc2UKKwkJcG0tPnJlc3VtZShvdXJjaGlwKTsKK30KKwordm9pZCBzM2NfcG1fcmVzdG9yZV9ncGlvcyh2b2lkKQoreworCXN0cnVjdCBzM2NfZ3Bpb19jaGlwICpvdXJjaGlwOworCXVuc2lnbmVkIGludCBncGlvX25yOworCisJZm9yIChncGlvX25yID0gMDsgZ3Bpb19uciA8IFMzQ19HUElPX0VORDsgZ3Bpb19ucisrKSB7CisJCW91cmNoaXAgPSBzM2NfZ3Bpb2xpYl9nZXRjaGlwKGdwaW9fbnIpOworCQlpZiAoIW91cmNoaXApCisJCQljb250aW51ZTsKKworCQlzM2NfcG1fcmVzdW1lX2dwaW8ob3VyY2hpcCk7CisKKwkJZ3Bpb19uciArPSBvdXJjaGlwLT5jaGlwLm5ncGlvOworCQlncGlvX25yICs9IENPTkZJR19TM0NfR1BJT19TUEFDRTsKKwl9Cit9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0uYyBiL2FyY2gvYXJtL3BsYXQtc2Ftc3VuZy9wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3Y2ZjYTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcG0uYwpAQCAtMCwwICsxLDM3OCBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zM2MvcG0uYworICoKKyAqIENvcHlyaWdodCAyMDA4IE9wZW5tb2tvLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNC0yMDA4IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoJaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBTM0MgY29tbW9uIHBvd2VyIG1hbmFnZW1lbnQgKHN1c3BlbmQgdG8gcmFtKSBzdXBwb3J0LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8bWFjaC9tYXAuaD4KKworI2luY2x1ZGUgPHBsYXQvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtY2xvY2suaD4KKyNpbmNsdWRlIDxtYWNoL3JlZ3MtaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8cGxhdC9wbS5oPgorI2luY2x1ZGUgPG1hY2gvcG0tY29yZS5oPgorCisvKiBmb3IgZXh0ZXJuYWwgdXNlICovCisKK3Vuc2lnbmVkIGxvbmcgczNjX3BtX2ZsYWdzOworCisvKiBEZWJ1ZyBjb2RlOgorICoKKyAqIFRoaXMgY29kZSBzdXBwb3J0cyBkZWJ1ZyBvdXRwdXQgdG8gdGhlIGxvdyBsZXZlbCBVQVJUcyBmb3IgdXNlIG9uCisgKiByZXN1bWUgYmVmb3JlIHRoZSBjb25zb2xlIGxheWVyIGlzIGF2YWlsYWJsZS4KKyovCisKKyNpZmRlZiBDT05GSUdfU0FNU1VOR19QTV9ERUJVRworZXh0ZXJuIHZvaWQgcHJpbnRhc2NpaShjb25zdCBjaGFyICopOworCit2b2lkIHMzY19wbV9kYmcoY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCB2YTsKKwljaGFyIGJ1ZmZbMjU2XTsKKworCXZhX3N0YXJ0KHZhLCBmbXQpOworCXZzcHJpbnRmKGJ1ZmYsIGZtdCwgdmEpOworCXZhX2VuZCh2YSk7CisKKwlwcmludGFzY2lpKGJ1ZmYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgczNjX3BtX2RlYnVnX2luaXQodm9pZCkKK3sKKwkvKiByZXN0YXJ0IHVhcnQgY2xvY2tzIHNvIHdlIGNhbiB1c2UgdGhlbSB0byBvdXRwdXQgKi8KKwlzM2NfcG1fZGVidWdfaW5pdF91YXJ0KCk7Cit9CisKKyNlbHNlCisjZGVmaW5lIHMzY19wbV9kZWJ1Z19pbml0KCkgZG8geyB9IHdoaWxlKDApCisKKyNlbmRpZiAvKiBDT05GSUdfU0FNU1VOR19QTV9ERUJVRyAqLworCisvKiBTYXZlIHRoZSBVQVJUIGNvbmZpZ3VyYXRpb25zIGlmIHdlIGFyZSBjb25maWd1cmVkIGZvciBkZWJ1Zy4gKi8KKwordW5zaWduZWQgY2hhciBwbV91YXJ0X3VkaXZzbG90OworCisjaWZkZWYgQ09ORklHX1NBTVNVTkdfUE1fREVCVUcKKworc3RydWN0IHBtX3VhcnRfc2F2ZSB1YXJ0X3NhdmVbQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTXTsKKworc3RhdGljIHZvaWQgczNjX3BtX3NhdmVfdWFydCh1bnNpZ25lZCBpbnQgdWFydCwgc3RydWN0IHBtX3VhcnRfc2F2ZSAqc2F2ZSkKK3sKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBTM0NfVkFfVUFSVHgodWFydCk7CisKKwlzYXZlLT51bGNvbiA9IF9fcmF3X3JlYWRsKHJlZ3MgKyBTM0MyNDEwX1VMQ09OKTsKKwlzYXZlLT51Y29uID0gX19yYXdfcmVhZGwocmVncyArIFMzQzI0MTBfVUNPTik7CisJc2F2ZS0+dWZjb24gPSBfX3Jhd19yZWFkbChyZWdzICsgUzNDMjQxMF9VRkNPTik7CisJc2F2ZS0+dW1jb24gPSBfX3Jhd19yZWFkbChyZWdzICsgUzNDMjQxMF9VTUNPTik7CisJc2F2ZS0+dWJyZGl2ID0gX19yYXdfcmVhZGwocmVncyArIFMzQzI0MTBfVUJSRElWKTsKKworCWlmIChwbV91YXJ0X3VkaXZzbG90KQorCQlzYXZlLT51ZGl2c2xvdCA9IF9fcmF3X3JlYWRsKHJlZ3MgKyBTM0MyNDQzX0RJVlNMT1QpOworCisJUzNDX1BNREJHKCJVQVJUWyVkXTogVUxDT049JTA0eCwgVUNPTj0lMDR4LCBVRkNPTj0lMDR4LCBVQlJESVY9JTA0eFxuIiwKKwkJICB1YXJ0LCBzYXZlLT51bGNvbiwgc2F2ZS0+dWNvbiwgc2F2ZS0+dWZjb24sIHNhdmUtPnVicmRpdik7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19wbV9zYXZlX3VhcnRzKHZvaWQpCit7CisJc3RydWN0IHBtX3VhcnRfc2F2ZSAqc2F2ZSA9IHVhcnRfc2F2ZTsKKwl1bnNpZ25lZCBpbnQgdWFydDsKKworCWZvciAodWFydCA9IDA7IHVhcnQgPCBDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFM7IHVhcnQrKywgc2F2ZSsrKQorCQlzM2NfcG1fc2F2ZV91YXJ0KHVhcnQsIHNhdmUpOworfQorCitzdGF0aWMgdm9pZCBzM2NfcG1fcmVzdG9yZV91YXJ0KHVuc2lnbmVkIGludCB1YXJ0LCBzdHJ1Y3QgcG1fdWFydF9zYXZlICpzYXZlKQoreworCXZvaWQgX19pb21lbSAqcmVncyA9IFMzQ19WQV9VQVJUeCh1YXJ0KTsKKworCXMzY19wbV9hcmNoX3VwZGF0ZV91YXJ0KHJlZ3MsIHNhdmUpOworCisJX19yYXdfd3JpdGVsKHNhdmUtPnVsY29uLCByZWdzICsgUzNDMjQxMF9VTENPTik7CisJX19yYXdfd3JpdGVsKHNhdmUtPnVjb24sICByZWdzICsgUzNDMjQxMF9VQ09OKTsKKwlfX3Jhd193cml0ZWwoc2F2ZS0+dWZjb24sIHJlZ3MgKyBTM0MyNDEwX1VGQ09OKTsKKwlfX3Jhd193cml0ZWwoc2F2ZS0+dW1jb24sIHJlZ3MgKyBTM0MyNDEwX1VNQ09OKTsKKwlfX3Jhd193cml0ZWwoc2F2ZS0+dWJyZGl2LCByZWdzICsgUzNDMjQxMF9VQlJESVYpOworCisJaWYgKHBtX3VhcnRfdWRpdnNsb3QpCisJCV9fcmF3X3dyaXRlbChzYXZlLT51ZGl2c2xvdCwgcmVncyArIFMzQzI0NDNfRElWU0xPVCk7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19wbV9yZXN0b3JlX3VhcnRzKHZvaWQpCit7CisJc3RydWN0IHBtX3VhcnRfc2F2ZSAqc2F2ZSA9IHVhcnRfc2F2ZTsKKwl1bnNpZ25lZCBpbnQgdWFydDsKKworCWZvciAodWFydCA9IDA7IHVhcnQgPCBDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFM7IHVhcnQrKywgc2F2ZSsrKQorCQlzM2NfcG1fcmVzdG9yZV91YXJ0KHVhcnQsIHNhdmUpOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIHMzY19wbV9zYXZlX3VhcnRzKHZvaWQpIHsgfQorc3RhdGljIHZvaWQgczNjX3BtX3Jlc3RvcmVfdWFydHModm9pZCkgeyB9CisjZW5kaWYKKworLyogVGhlIElSUSBleHQtaW50IGNvZGUgZ29lcyBoZXJlLCBpdCBpcyB0b28gc21hbGwgdG8gY3VycmVudGx5IGJvdGhlcgorICogd2l0aCBpdHMgb3duIGZpbGUuICovCisKK3Vuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfaW50bWFzawk9IDB4ZmZmZmZmZmZMOwordW5zaWduZWQgbG9uZyBzM2NfaXJxd2FrZV9laW50bWFzawk9IDB4ZmZmZmZmZmZMOworCitpbnQgczNjX2lycWV4dF93YWtlKHVuc2lnbmVkIGludCBpcnFubywgdW5zaWduZWQgaW50IHN0YXRlKQoreworCXVuc2lnbmVkIGxvbmcgYml0ID0gMUwgPDwgSVJRX0VJTlRfQklUKGlycW5vKTsKKworCWlmICghKHMzY19pcnF3YWtlX2VpbnRhbGxvdyAmIGJpdCkpCisJCXJldHVybiAtRU5PRU5UOworCisJcHJpbnRrKEtFUk5fSU5GTyAid2FrZSAlcyBmb3IgaXJxICVkXG4iLAorCSAgICAgICBzdGF0ZSA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsIGlycW5vKTsKKworCWlmICghc3RhdGUpCisJCXMzY19pcnF3YWtlX2VpbnRtYXNrIHw9IGJpdDsKKwllbHNlCisJCXMzY19pcnF3YWtlX2VpbnRtYXNrICY9IH5iaXQ7CisKKwlyZXR1cm4gMDsKK30KKworLyogaGVscGVyIGZ1bmN0aW9ucyB0byBzYXZlIGFuZCByZXN0b3JlIHJlZ2lzdGVyIHN0YXRlICovCisKKy8qKgorICogczNjX3BtX2RvX3NhdmUoKSAtIHNhdmUgYSBzZXQgb2YgcmVnaXN0ZXJzIGZvciByZXN0b3JhdGlvbiBvbiByZXN1bWUuCisgKiBAcHRyOiBQb2ludGVyIHRvIGFuIGFycmF5IG9mIHJlZ2lzdGVycy4KKyAqIEBjb3VudDogU2l6ZSBvZiB0aGUgcHRyIGFycmF5LgorICoKKyAqIFJ1biB0aHJvdWdoIHRoZSBsaXN0IG9mIHJlZ2lzdGVycyBnaXZlbiwgc2F2aW5nIHRoZWlyIGNvbnRlbnRzIGluIHRoZQorICogYXJyYXkgZm9yIGxhdGVyIHJlc3RvcmF0aW9uIHdoZW4gd2Ugd2FrZXVwLgorICovCit2b2lkIHMzY19wbV9kb19zYXZlKHN0cnVjdCBzbGVlcF9zYXZlICpwdHIsIGludCBjb3VudCkKK3sKKwlmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tLCBwdHIrKykgeworCQlwdHItPnZhbCA9IF9fcmF3X3JlYWRsKHB0ci0+cmVnKTsKKwkJUzNDX1BNREJHKCJzYXZlZCAlcCB2YWx1ZSAlMDhseFxuIiwgcHRyLT5yZWcsIHB0ci0+dmFsKTsKKwl9Cit9CisKKy8qKgorICogczNjX3BtX2RvX3Jlc3RvcmUoKSAtIHJlc3RvcmUgcmVnaXN0ZXIgdmFsdWVzIGZyb20gdGhlIHNhdmUgbGlzdC4KKyAqIEBwdHI6IFBvaW50ZXIgdG8gYW4gYXJyYXkgb2YgcmVnaXN0ZXJzLgorICogQGNvdW50OiBTaXplIG9mIHRoZSBwdHIgYXJyYXkuCisgKgorICogUmVzdG9yZSB0aGUgcmVnaXN0ZXIgdmFsdWVzIHNhdmVkIGZyb20gczNjX3BtX2RvX3NhdmUoKS4KKyAqCisgKiBOb3RlLCB3ZSBkbyBub3QgdXNlIFMzQ19QTURCRygpIGluIGhlcmUsIGFzIHRoZSBzeXN0ZW0gbWF5IG5vdCBoYXZlCisgKiByZXN0b3JlIHRoZSBVQVJUcyBzdGF0ZSB5ZXQKKyovCisKK3ZvaWQgczNjX3BtX2RvX3Jlc3RvcmUoc3RydWN0IHNsZWVwX3NhdmUgKnB0ciwgaW50IGNvdW50KQoreworCWZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0sIHB0cisrKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJyZXN0b3JlICVwIChyZXN0b3JlICUwOGx4LCB3YXMgJTA4eClcbiIsCisJCSAgICAgICBwdHItPnJlZywgcHRyLT52YWwsIF9fcmF3X3JlYWRsKHB0ci0+cmVnKSk7CisKKwkJX19yYXdfd3JpdGVsKHB0ci0+dmFsLCBwdHItPnJlZyk7CisJfQorfQorCisvKioKKyAqIHMzY19wbV9kb19yZXN0b3JlX2NvcmUoKSAtIGVhcmx5IHJlc3RvcmUgcmVnaXN0ZXIgdmFsdWVzIGZyb20gc2F2ZSBsaXN0LgorICoKKyAqIFRoaXMgaXMgc2ltaWxhciB0byBzM2NfcG1fZG9fcmVzdG9yZSgpIGV4Y2VwdCB3ZSB0cnkgYW5kIG1pbmltaXNlIHRoZQorICogc2lkZSBlZmZlY3RzIG9mIHRoZSBmdW5jdGlvbiBpbiBjYXNlIHJlZ2lzdGVycyB0aGF0IGhhcmR3YXJlIG1pZ2h0IG5lZWQKKyAqIHRvIHdvcmsgaGFzIGJlZW4gcmVzdG9yZWQuCisgKgorICogV0FSTklORzogRG8gbm90IHB1dCBhbnkgZGVidWcgaW4gaGVyZSB0aGF0IG1heSBlZmZlY3QgbWVtb3J5IG9yIHVzZQorICogcGVyaXBoZXJhbHMsIGFzIHRoaW5ncyBtYXkgYmUgY2hhbmdpbmchCisqLworCit2b2lkIHMzY19wbV9kb19yZXN0b3JlX2NvcmUoc3RydWN0IHNsZWVwX3NhdmUgKnB0ciwgaW50IGNvdW50KQoreworCWZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0sIHB0cisrKQorCQlfX3Jhd193cml0ZWwocHRyLT52YWwsIHB0ci0+cmVnKTsKK30KKworLyogczNjMjQxMF9wbV9zaG93X3Jlc3VtZV9pcnFzCisgKgorICogcHJpbnQgYW55IElSUXMgYXNzZXJ0ZWQgYXQgcmVzdW1lIHRpbWUgKGllLCB3ZSB3b2tlIGZyb20pCisqLworc3RhdGljIHZvaWQgczNjX3BtX3Nob3dfcmVzdW1lX2lycXMoaW50IHN0YXJ0LCB1bnNpZ25lZCBsb25nIHdoaWNoLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIG1hc2spCit7CisJaW50IGk7CisKKwl3aGljaCAmPSB+bWFzazsKKworCWZvciAoaSA9IDA7IGkgPD0gMzE7IGkrKykgeworCQlpZiAod2hpY2ggJiAoMUw8PGkpKSB7CisJCQlTM0NfUE1EQkcoIklSUSAlZCBhc3NlcnRlZCBhdCByZXN1bWVcbiIsIHN0YXJ0K2kpOworCQl9CisJfQorfQorCisKK3ZvaWQgKCpwbV9jcHVfcHJlcCkodm9pZCk7Cit2b2lkICgqcG1fY3B1X3NsZWVwKSh2b2lkKTsKKworI2RlZmluZSBhbnlfYWxsb3dlZChtYXNrLCBhbGxvdykgKCgobWFzaykgJiAoYWxsb3cpKSAhPSAoYWxsb3cpKQorCisvKiBzM2NfcG1fZW50ZXIKKyAqCisgKiBjZW50cmFsIGNvbnRyb2wgZm9yIHNsZWVwL3Jlc3VtZSBwcm9jZXNzCisqLworCitzdGF0aWMgaW50IHMzY19wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCit7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVnc19zYXZlWzE2XTsKKworCS8qIGVuc3VyZSB0aGUgZGVidWcgaXMgaW5pdGlhbGlzZWQgKGlmIGVuYWJsZWQpICovCisKKwlzM2NfcG1fZGVidWdfaW5pdCgpOworCisJUzNDX1BNREJHKCIlcyglZClcbiIsIF9fZnVuY19fLCBzdGF0ZSk7CisKKwlpZiAocG1fY3B1X3ByZXAgPT0gTlVMTCB8fCBwbV9jcHVfc2xlZXAgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvcjogbm8gY3B1IHNsZWVwIGZ1bmN0aW9uXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGNoZWNrIGlmIHdlIGhhdmUgYW55dGhpbmcgdG8gd2FrZS11cCB3aXRoLi4uIGJhZCB0aGluZ3Mgc2VlbQorCSAqIHRvIGhhcHBlbiBpZiB5b3Ugc3VzcGVuZCB3aXRoIG5vIHdha2V1cCAoc3lzdGVtIHdpbGwgb2Z0ZW4KKwkgKiByZXF1aXJlIGEgZnVsbCBwb3dlci1jeWNsZSkKKwkqLworCisJaWYgKCFhbnlfYWxsb3dlZChzM2NfaXJxd2FrZV9pbnRtYXNrLCBzM2NfaXJxd2FrZV9pbnRhbGxvdykgJiYKKwkgICAgIWFueV9hbGxvd2VkKHMzY19pcnF3YWtlX2VpbnRtYXNrLCBzM2NfaXJxd2FrZV9laW50YWxsb3cpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IE5vIHdha2UtdXAgc291cmNlcyFcbiIsIF9fZnVuY19fKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogQWJvcnRpbmcgc2xlZXBcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogc3RvcmUgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIHJlZ2lzdGVyIHJlY292ZXJ5IGJsb2NrICovCisKKwlzM2Nfc2xlZXBfc2F2ZV9waHlzID0gdmlydF90b19waHlzKHJlZ3Nfc2F2ZSk7CisKKwlTM0NfUE1EQkcoInMzY19zbGVlcF9zYXZlX3BoeXM9MHglMDhseFxuIiwgczNjX3NsZWVwX3NhdmVfcGh5cyk7CisKKwkvKiBzYXZlIGFsbCBuZWNlc3NhcnkgY29yZSByZWdpc3RlcnMgbm90IGNvdmVyZWQgYnkgdGhlIGRyaXZlcnMgKi8KKworCXMzY19wbV9zYXZlX2dwaW9zKCk7CisJczNjX3BtX3NhdmVfdWFydHMoKTsKKwlzM2NfcG1fc2F2ZV9jb3JlKCk7CisKKwkvKiBzZXQgdGhlIGlycSBjb25maWd1cmF0aW9uIGZvciB3YWtlICovCisKKwlzM2NfcG1fY29uZmlndXJlX2V4dGludCgpOworCisJUzNDX1BNREJHKCJzbGVlcDogaXJxIHdha2V1cCBtYXNrczogJTA4bHgsJTA4bHhcbiIsCisJICAgIHMzY19pcnF3YWtlX2ludG1hc2ssIHMzY19pcnF3YWtlX2VpbnRtYXNrKTsKKworCXMzY19wbV9hcmNoX3ByZXBhcmVfaXJxcygpOworCisJLyogY2FsbCBjcHUgc3BlY2lmaWMgcHJlcGFyYXRpb24gKi8KKworCXBtX2NwdV9wcmVwKCk7CisKKwkvKiBmbHVzaCBjYWNoZSBiYWNrIHRvIHJhbSAqLworCisJZmx1c2hfY2FjaGVfYWxsKCk7CisKKwlzM2NfcG1fY2hlY2tfc3RvcmUoKTsKKworCS8qIHNlbmQgdGhlIGNwdSB0byBzbGVlcC4uLiAqLworCisJczNjX3BtX2FyY2hfc3RvcF9jbG9ja3MoKTsKKworCS8qIHMzY19jcHVfc2F2ZSB3aWxsIGFsc28gYWN0IGFzIG91ciByZXR1cm4gcG9pbnQgZnJvbSB3aGVuCisJICogd2UgcmVzdW1lIGFzIGl0IHNhdmVzIGl0cyBvd24gcmVnaXN0ZXIgc3RhdGUgYW5kIHJlc3RvcmVzIGl0CisJICogZHVyaW5nIHRoZSByZXN1bWUuICAqLworCisJczNjX2NwdV9zYXZlKHJlZ3Nfc2F2ZSk7CisKKwkvKiByZXN0b3JlIHRoZSBjcHUgc3RhdGUgdXNpbmcgdGhlIGtlcm5lbCdzIGNwdSBpbml0IGNvZGUuICovCisKKwljcHVfaW5pdCgpOworCisJLyogcmVzdG9yZSB0aGUgc3lzdGVtIHN0YXRlICovCisKKwlzM2NfcG1fcmVzdG9yZV9jb3JlKCk7CisJczNjX3BtX3Jlc3RvcmVfdWFydHMoKTsKKwlzM2NfcG1fcmVzdG9yZV9ncGlvcygpOworCisJczNjX3BtX2RlYnVnX2luaXQoKTsKKworCS8qIGNoZWNrIHdoYXQgaXJxIChpZiBhbnkpIHJlc3RvcmVkIHRoZSBzeXN0ZW0gKi8KKworCXMzY19wbV9hcmNoX3Nob3dfcmVzdW1lX2lycXMoKTsKKworCVMzQ19QTURCRygiJXM6IHBvc3Qgc2xlZXAsIHByZXBhcmluZyB0byByZXR1cm5cbiIsIF9fZnVuY19fKTsKKworCS8qIExFRHMgc2hvdWxkIG5vdyBiZSAxMTEwICovCisJczNjX3BtX2RlYnVnX3NtZGtsZWQoMSA8PCAxLCAwKTsKKworCXMzY19wbV9jaGVja19yZXN0b3JlKCk7CisKKwkvKiBvaywgbGV0J3MgcmV0dXJuIGZyb20gc2xlZXAgKi8KKworCVMzQ19QTURCRygiUzNDIFBNIFJlc3VtZSAocG9zdC1yZXN0b3JlKVxuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qIGNhbGxiYWNrIGZyb20gYXNzZW1ibHkgY29kZSAqLwordm9pZCBzM2NfcG1fY2JfZmx1c2hjYWNoZSh2b2lkKQoreworCWZsdXNoX2NhY2hlX2FsbCgpOworfQorCitzdGF0aWMgaW50IHMzY19wbV9wcmVwYXJlKHZvaWQpCit7CisJLyogcHJlcGFyZSBjaGVjayBhcmVhIGlmIGNvbmZpZ3VyZWQgKi8KKworCXMzY19wbV9jaGVja19wcmVwYXJlKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHMzY19wbV9maW5pc2godm9pZCkKK3sKKwlzM2NfcG1fY2hlY2tfY2xlYW51cCgpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX3N1c3BlbmRfb3BzIHMzY19wbV9vcHMgPSB7CisJLmVudGVyCQk9IHMzY19wbV9lbnRlciwKKwkucHJlcGFyZQk9IHMzY19wbV9wcmVwYXJlLAorCS5maW5pc2gJCT0gczNjX3BtX2ZpbmlzaCwKKwkudmFsaWQJCT0gc3VzcGVuZF92YWxpZF9vbmx5X21lbSwKK307CisKKy8qIHMzY19wbV9pbml0CisgKgorICogQXR0YWNoIHRoZSBwb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gVGhpcyBzaG91bGQgYmUgY2FsbGVkCisgKiBmcm9tIHRoZSBib2FyZCBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiBpZiB0aGUgYm9hcmQgc3VwcG9ydHMKKyAqIGl0LgorKi8KKworaW50IF9faW5pdCBzM2NfcG1faW5pdCh2b2lkKQoreworCXByaW50aygiUzNDIFBvd2VyIE1hbmFnZW1lbnQsIENvcHlyaWdodCAyMDA0IFNpbXRlYyBFbGVjdHJvbmljc1xuIik7CisKKwlzdXNwZW5kX3NldF9vcHMoJnMzY19wbV9vcHMpOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3B3bS1jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3B3bS1jbG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2YzkzODEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LXNhbXN1bmcvcHdtLWNsb2NrLmMKQEAgLTAsMCArMSw0NTUgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL3BsYXQtczNjMjR4eC9wd20tY2xvY2suYworICoKKyAqIENvcHlyaWdodCAoYykgMjAwNyBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIENvcHlyaWdodCAoYykgMjAwNywgMjAwOCBCZW4gRG9va3MKKyAqCUJlbiBEb29rcyA8YmVuLWxpbnV4QGZsdWZmLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCisjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgorI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CisKKyNpbmNsdWRlIDxwbGF0L3JlZ3MtdGltZXIuaD4KKyNpbmNsdWRlIDxtYWNoL3B3bS1jbG9jay5oPgorCisvKiBFYWNoIG9mIHRoZSB0aW1lcnMgMCB0aHJvdWdoIDUgZ28gdGhyb3VnaCB0aGUgZm9sbG93aW5nCisgKiBjbG9jayB0cmVlLCB3aXRoIHRoZSBpbnB1dHMgZGVwZW5kaW5nIG9uIHRoZSB0aW1lcnMuCisgKgorICogcGNsayAtLS0tIFsgcHJlc2NhbGVyIDAgXSAtKy0tLT4gdGltZXIgMAorICoJCQkgICAgICArLS0tPiB0aW1lciAxCisgKgorICogcGNsayAtLS0tIFsgcHJlc2NhbGVyIDEgXSAtKy0tLT4gdGltZXIgMgorICoJCQkgICAgICArLS0tPiB0aW1lciAzCisgKgkJCSAgICAgIFwtLS0+IHRpbWVyIDQKKyAqCisgKiBXaGljaCBhcmUgZmVkIGludG8gdGhlIHRpbWVycyBhcyBzbzoKKyAqCisgKiBwcmVzY2FsZWQgMCAtLS0tIFsgZGl2IDIsNCw4LDE2IF0gLS0tXAorICoJCQkJICAgICAgIFttdXhdIC0+IHRpbWVyIDAKKyAqIHRjbGsgMCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vCisgKgorICogcHJlc2NhbGVkIDAgLS0tLSBbIGRpdiAyLDQsOCwxNiBdIC0tLVwKKyAqCQkJCSAgICAgICBbbXV4XSAtPiB0aW1lciAxCisgKiB0Y2xrIDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLworICoKKyAqCisgKiBwcmVzY2FsZWQgMSAtLS0tIFsgZGl2IDIsNCw4LDE2IF0gLS0tXAorICoJCQkJICAgICAgIFttdXhdIC0+IHRpbWVyIDIKKyAqIHRjbGsgMSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0vCisgKgorICogcHJlc2NhbGVkIDEgLS0tLSBbIGRpdiAyLDQsOCwxNiBdIC0tLVwKKyAqCQkJCSAgICAgICBbbXV4XSAtPiB0aW1lciAzCisgKiB0Y2xrIDEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLworICoKKyAqIHByZXNjYWxlZCAxIC0tLS0gWyBkaXYgMiw0LDgsIDE2IF0gLS1cCisgKgkJCQkgICAgICAgW211eF0gLT4gdGltZXIgNAorICogdGNsayAxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS8KKyAqCisgKiBTaW5jZSB0aGUgbXV4IGFuZCB0aGUgZGl2aWRlciBhcmUgdGllZCB0b2dldGhlciBpbiB0aGUKKyAqIHNhbWUgcmVnaXN0ZXIgc3BhY2UsIGl0IGlzIGltcG9zc2libGUgdG8gc2V0IHRoZSBwYXJlbnQKKyAqIGFuZCB0aGUgcmF0ZSBhdCB0aGUgc2FtZSB0aW1lLiBUbyBhdm9pZCB0aGlzLCB3ZSBhZGQgYW4KKyAqIGludGVybWVkaWF0ZSAncHJlc2NhbGVkLWFuZC1kaXZpZGVkJyBjbG9jayB0byBzZWxlY3QKKyAqIGFzIHRoZSBwYXJlbnQgZm9yIHRoZSB0aW1lciBpbnB1dCBjbG9jayBjYWxsZWQgdGRpdi4KKyAqCisgKiBwcmVzY2FsZWQgY2xrIC0tPiBwd20tdGRpdiAtLS1cCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyBtdXggXSAtLT4gdGltZXIgWAorICogdGNsayAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLworKi8KKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX3RpbWVyX3NjYWxlcltdOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfcHdtX3NjYWxlcl9nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCit7CisJdW5zaWduZWQgbG9uZyB0Y2ZnMCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENGRzApOworCisJaWYgKGNsayA9PSAmY2xrX3RpbWVyX3NjYWxlclsxXSkgeworCQl0Y2ZnMCAmPSBTM0MyNDEwX1RDRkdfUFJFU0NBTEVSMV9NQVNLOworCQl0Y2ZnMCA+Pj0gUzNDMjQxMF9UQ0ZHX1BSRVNDQUxFUjFfU0hJRlQ7CisJfSBlbHNlIHsKKwkJdGNmZzAgJj0gUzNDMjQxMF9UQ0ZHX1BSRVNDQUxFUjBfTUFTSzsKKwl9CisKKwlyZXR1cm4gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KSAvICh0Y2ZnMCArIDEpOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfcHdtX3NjYWxlcl9yb3VuZF9yYXRlKHN0cnVjdCBjbGsgKmNsaywKKwkJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGRpdmlzb3IgPSBwYXJlbnRfcmF0ZSAvIHJhdGU7CisKKwlpZiAoZGl2aXNvciA+IDI1NikKKwkJZGl2aXNvciA9IDI1NjsKKwllbHNlIGlmIChkaXZpc29yIDwgMikKKwkJZGl2aXNvciA9IDI7CisKKwlyZXR1cm4gcGFyZW50X3JhdGUgLyBkaXZpc29yOworfQorCitzdGF0aWMgaW50IGNsa19wd21fc2NhbGVyX3NldF9yYXRlKHN0cnVjdCBjbGsgKmNsaywgdW5zaWduZWQgbG9uZyByYXRlKQoreworCXVuc2lnbmVkIGxvbmcgcm91bmQgPSBjbGtfcHdtX3NjYWxlcl9yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisJdW5zaWduZWQgbG9uZyB0Y2ZnMDsKKwl1bnNpZ25lZCBsb25nIGRpdmlzb3I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRpdmlzb3IgPSBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gcm91bmQ7CisJZGl2aXNvci0tOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXRjZmcwID0gX19yYXdfcmVhZGwoUzNDMjQxMF9UQ0ZHMCk7CisKKwlpZiAoY2xrID09ICZjbGtfdGltZXJfc2NhbGVyWzFdKSB7CisJCXRjZmcwICY9IH5TM0MyNDEwX1RDRkdfUFJFU0NBTEVSMV9NQVNLOworCQl0Y2ZnMCB8PSBkaXZpc29yIDw8IFMzQzI0MTBfVENGR19QUkVTQ0FMRVIxX1NISUZUOworCX0gZWxzZSB7CisJCXRjZmcwICY9IH5TM0MyNDEwX1RDRkdfUFJFU0NBTEVSMF9NQVNLOworCQl0Y2ZnMCB8PSBkaXZpc29yOworCX0KKworCV9fcmF3X3dyaXRlbCh0Y2ZnMCwgUzNDMjQxMF9UQ0ZHMCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBjbGtfcHdtX3NjYWxlcl9vcHMgPSB7CisJLmdldF9yYXRlCT0gY2xrX3B3bV9zY2FsZXJfZ2V0X3JhdGUsCisJLnNldF9yYXRlCT0gY2xrX3B3bV9zY2FsZXJfc2V0X3JhdGUsCisJLnJvdW5kX3JhdGUJPSBjbGtfcHdtX3NjYWxlcl9yb3VuZF9yYXRlLAorfTsKKworc3RhdGljIHN0cnVjdCBjbGsgY2xrX3RpbWVyX3NjYWxlcltdID0geworCVswXQk9IHsKKwkJLm5hbWUJCT0gInB3bS1zY2FsZXIwIiwKKwkJLmlkCQk9IC0xLAorCQkub3BzCQk9ICZjbGtfcHdtX3NjYWxlcl9vcHMsCisJfSwKKwlbMV0JPSB7CisJCS5uYW1lCQk9ICJwd20tc2NhbGVyMSIsCisJCS5pZAkJPSAtMSwKKwkJLm9wcwkJPSAmY2xrX3B3bV9zY2FsZXJfb3BzLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjbGtfdGltZXJfdGNsa1tdID0geworCVswXQk9IHsKKwkJLm5hbWUJCT0gInB3bS10Y2xrMCIsCisJCS5pZAkJPSAtMSwKKwl9LAorCVsxXQk9IHsKKwkJLm5hbWUJCT0gInB3bS10Y2xrMSIsCisJCS5pZAkJPSAtMSwKKwl9LAorfTsKKworc3RydWN0IHB3bV90ZGl2X2NsayB7CisJc3RydWN0IGNsawljbGs7CisJdW5zaWduZWQgaW50CWRpdmlzb3I7Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwd21fdGRpdl9jbGsgKnRvX3RkaXYoc3RydWN0IGNsayAqY2xrKQoreworCXJldHVybiBjb250YWluZXJfb2YoY2xrLCBzdHJ1Y3QgcHdtX3RkaXZfY2xrLCBjbGspOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBjbGtfcHdtX3RkaXZfZ2V0X3JhdGUoc3RydWN0IGNsayAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgdGNmZzEgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDRkcxKTsKKwl1bnNpZ25lZCBpbnQgZGl2aXNvcjsKKworCXRjZmcxID4+PSBTM0MyNDEwX1RDRkcxX1NISUZUKGNsay0+aWQpOworCXRjZmcxICY9IFMzQzI0MTBfVENGRzFfTVVYX01BU0s7CisKKwlpZiAocHdtX2NmZ19zcmNfaXNfdGNsayh0Y2ZnMSkpCisJCWRpdmlzb3IgPSB0b190ZGl2KGNsayktPmRpdmlzb3I7CisJZWxzZQorCQlkaXZpc29yID0gdGNmZ190b19kaXZpc29yKHRjZmcxKTsKKworCXJldHVybiBjbGtfZ2V0X3JhdGUoY2xrLT5wYXJlbnQpIC8gZGl2aXNvcjsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgY2xrX3B3bV90ZGl2X3JvdW5kX3JhdGUoc3RydWN0IGNsayAqY2xrLAorCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcmF0ZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOworCXVuc2lnbmVkIGxvbmcgZGl2aXNvcjsKKworCXBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwlkaXZpc29yID0gcGFyZW50X3JhdGUgLyByYXRlOworCisJaWYgKGRpdmlzb3IgPD0gMSAmJiBwd21fdGRpdl9oYXNfZGl2MSgpKQorCQlkaXZpc29yID0gMTsKKwllbHNlIGlmIChkaXZpc29yIDw9IDIpCisJCWRpdmlzb3IgPSAyOworCWVsc2UgaWYgKGRpdmlzb3IgPD0gNCkKKwkJZGl2aXNvciA9IDQ7CisJZWxzZSBpZiAoZGl2aXNvciA8PSA4KQorCQlkaXZpc29yID0gODsKKwllbHNlCisJCWRpdmlzb3IgPSAxNjsKKworCXJldHVybiBwYXJlbnRfcmF0ZSAvIGRpdmlzb3I7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNsa19wd21fdGRpdl9iaXRzKHN0cnVjdCBwd21fdGRpdl9jbGsgKmRpdmNsaykKK3sKKwlyZXR1cm4gcHdtX3RkaXZfZGl2X2JpdHMoZGl2Y2xrLT5kaXZpc29yKTsKK30KKworc3RhdGljIHZvaWQgY2xrX3B3bV90ZGl2X3VwZGF0ZShzdHJ1Y3QgcHdtX3RkaXZfY2xrICpkaXZjbGspCit7CisJdW5zaWduZWQgbG9uZyB0Y2ZnMSA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENGRzEpOworCXVuc2lnbmVkIGxvbmcgYml0cyA9IGNsa19wd21fdGRpdl9iaXRzKGRpdmNsayk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHNoaWZ0ID0gIFMzQzI0MTBfVENGRzFfU0hJRlQoZGl2Y2xrLT5jbGsuaWQpOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJdGNmZzEgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDRkcxKTsKKwl0Y2ZnMSAmPSB+KFMzQzI0MTBfVENGRzFfTVVYX01BU0sgPDwgc2hpZnQpOworCXRjZmcxIHw9IGJpdHMgPDwgc2hpZnQ7CisJX19yYXdfd3JpdGVsKHRjZmcxLCBTM0MyNDEwX1RDRkcxKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIGludCBjbGtfcHdtX3RkaXZfc2V0X3JhdGUoc3RydWN0IGNsayAqY2xrLCB1bnNpZ25lZCBsb25nIHJhdGUpCit7CisJc3RydWN0IHB3bV90ZGl2X2NsayAqZGl2Y2xrID0gdG9fdGRpdihjbGspOworCXVuc2lnbmVkIGxvbmcgdGNmZzEgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDRkcxKTsKKwl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlID0gY2xrX2dldF9yYXRlKGNsay0+cGFyZW50KTsKKwl1bnNpZ25lZCBsb25nIGRpdmlzb3I7CisKKwl0Y2ZnMSA+Pj0gUzNDMjQxMF9UQ0ZHMV9TSElGVChjbGstPmlkKTsKKwl0Y2ZnMSAmPSBTM0MyNDEwX1RDRkcxX01VWF9NQVNLOworCisJcmF0ZSA9IGNsa19yb3VuZF9yYXRlKGNsaywgcmF0ZSk7CisJZGl2aXNvciA9IHBhcmVudF9yYXRlIC8gcmF0ZTsKKworCWlmIChkaXZpc29yID4gMTYpCisJCXJldHVybiAtRUlOVkFMOworCisJZGl2Y2xrLT5kaXZpc29yID0gZGl2aXNvcjsKKworCS8qIFVwZGF0ZSB0aGUgY3VycmVudCBNVVggc2V0dGluZ3MgaWYgd2UgYXJlIGN1cnJlbnRseQorCSAqIHNlbGVjdGVkIGFzIHRoZSBjbG9jayBzb3VyY2UgZm9yIHRoaXMgY2xvY2suICovCisKKwlpZiAoIXB3bV9jZmdfc3JjX2lzX3RjbGsodGNmZzEpKQorCQljbGtfcHdtX3RkaXZfdXBkYXRlKGRpdmNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIGNsa190ZGl2X29wcyA9IHsKKwkuZ2V0X3JhdGUJPSBjbGtfcHdtX3RkaXZfZ2V0X3JhdGUsCisJLnNldF9yYXRlCT0gY2xrX3B3bV90ZGl2X3NldF9yYXRlLAorCS5yb3VuZF9yYXRlCT0gY2xrX3B3bV90ZGl2X3JvdW5kX3JhdGUsCit9OworCitzdGF0aWMgc3RydWN0IHB3bV90ZGl2X2NsayBjbGtfdGltZXJfdGRpdltdID0geworCVswXQk9IHsKKwkJLmNsawk9IHsKKwkJCS5uYW1lCT0gInB3bS10ZGl2IiwKKwkJCS5vcHMJPSAmY2xrX3RkaXZfb3BzLAorCQkJLnBhcmVudAk9ICZjbGtfdGltZXJfc2NhbGVyWzBdLAorCQl9LAorCX0sCisJWzFdCT0geworCQkuY2xrCT0geworCQkJLm5hbWUJPSAicHdtLXRkaXYiLAorCQkJLm9wcwk9ICZjbGtfdGRpdl9vcHMsCisJCQkucGFyZW50CT0gJmNsa190aW1lcl9zY2FsZXJbMF0sCisJCX0KKwl9LAorCVsyXQk9IHsKKwkJLmNsawk9IHsKKwkJCS5uYW1lCT0gInB3bS10ZGl2IiwKKwkJCS5vcHMJPSAmY2xrX3RkaXZfb3BzLAorCQkJLnBhcmVudAk9ICZjbGtfdGltZXJfc2NhbGVyWzFdLAorCQl9LAorCX0sCisJWzNdCT0geworCQkuY2xrCT0geworCQkJLm5hbWUJPSAicHdtLXRkaXYiLAorCQkJLm9wcwk9ICZjbGtfdGRpdl9vcHMsCisJCQkucGFyZW50CT0gJmNsa190aW1lcl9zY2FsZXJbMV0sCisJCX0sCisJfSwKKwlbNF0JPSB7CisJCS5jbGsJPSB7CisJCQkubmFtZQk9ICJwd20tdGRpdiIsCisJCQkub3BzCT0gJmNsa190ZGl2X29wcywKKwkJCS5wYXJlbnQJPSAmY2xrX3RpbWVyX3NjYWxlclsxXSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgY2xrX3B3bV90ZGl2X3JlZ2lzdGVyKHVuc2lnbmVkIGludCBpZCkKK3sKKwlzdHJ1Y3QgcHdtX3RkaXZfY2xrICpkaXZjbGsgPSAmY2xrX3RpbWVyX3RkaXZbaWRdOworCXVuc2lnbmVkIGxvbmcgdGNmZzEgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDRkcxKTsKKworCXRjZmcxID4+PSBTM0MyNDEwX1RDRkcxX1NISUZUKGlkKTsKKwl0Y2ZnMSAmPSBTM0MyNDEwX1RDRkcxX01VWF9NQVNLOworCisJZGl2Y2xrLT5jbGsuaWQgPSBpZDsKKwlkaXZjbGstPmRpdmlzb3IgPSB0Y2ZnX3RvX2Rpdmlzb3IodGNmZzEpOworCisJcmV0dXJuIHMzYzI0eHhfcmVnaXN0ZXJfY2xvY2soJmRpdmNsay0+Y2xrKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgY2xrICpzM2MyNHh4X3B3bWNsa190Y2xrKHVuc2lnbmVkIGludCBpZCkKK3sKKwlyZXR1cm4gKGlkID49IDIpID8gJmNsa190aW1lcl90Y2xrWzFdIDogJmNsa190aW1lcl90Y2xrWzBdOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjbGsgKnMzYzI0eHhfcHdtY2xrX3RkaXYodW5zaWduZWQgaW50IGlkKQoreworCXJldHVybiAmY2xrX3RpbWVyX3RkaXZbaWRdLmNsazsKK30KKworc3RhdGljIGludCBjbGtfcHdtX3Rpbl9zZXRfcGFyZW50KHN0cnVjdCBjbGsgKmNsaywgc3RydWN0IGNsayAqcGFyZW50KQoreworCXVuc2lnbmVkIGludCBpZCA9IGNsay0+aWQ7CisJdW5zaWduZWQgbG9uZyB0Y2ZnMTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgYml0czsKKwl1bnNpZ25lZCBsb25nIHNoaWZ0ID0gUzNDMjQxMF9UQ0ZHMV9TSElGVChpZCk7CisKKwlpZiAocGFyZW50ID09IHMzYzI0eHhfcHdtY2xrX3RjbGsoaWQpKQorCQliaXRzID0gUzNDX1RDRkcxX01VWF9UQ0xLIDw8IHNoaWZ0OworCWVsc2UgaWYgKHBhcmVudCA9PSBzM2MyNHh4X3B3bWNsa190ZGl2KGlkKSkKKwkJYml0cyA9IGNsa19wd21fdGRpdl9iaXRzKHRvX3RkaXYocGFyZW50KSkgPDwgc2hpZnQ7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNsay0+cGFyZW50ID0gcGFyZW50OworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJdGNmZzEgPSBfX3Jhd19yZWFkbChTM0MyNDEwX1RDRkcxKTsKKwl0Y2ZnMSAmPSB+KFMzQzI0MTBfVENGRzFfTVVYX01BU0sgPDwgc2hpZnQpOworCV9fcmF3X3dyaXRlbCh0Y2ZnMSB8IGJpdHMsIFMzQzI0MTBfVENGRzEpOworCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBjbGtfdGluX29wcyA9IHsKKwkuc2V0X3BhcmVudAk9IGNsa19wd21fdGluX3NldF9wYXJlbnQsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBjbGtfdGluW10gPSB7CisJWzBdCT0geworCQkubmFtZQk9ICJwd20tdGluIiwKKwkJLmlkCT0gMCwKKwkJLm9wcwk9ICZjbGtfdGluX29wcywKKwl9LAorCVsxXQk9IHsKKwkJLm5hbWUJPSAicHdtLXRpbiIsCisJCS5pZAk9IDEsCisJCS5vcHMJPSAmY2xrX3Rpbl9vcHMsCisJfSwKKwlbMl0JPSB7CisJCS5uYW1lCT0gInB3bS10aW4iLAorCQkuaWQJPSAyLAorCQkub3BzCT0gJmNsa190aW5fb3BzLAorCX0sCisJWzNdCT0geworCQkubmFtZQk9ICJwd20tdGluIiwKKwkJLmlkCT0gMywKKwkJLm9wcwk9ICZjbGtfdGluX29wcywKKwl9LAorCVs0XQk9IHsKKwkJLm5hbWUJPSAicHdtLXRpbiIsCisJCS5pZAk9IDQsCisJCS5vcHMJPSAmY2xrX3Rpbl9vcHMsCisJfSwKK307CisKK3N0YXRpYyBfX2luaXQgaW50IGNsa19wd21fdGluX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKnB3bSkKK3sKKwl1bnNpZ25lZCBsb25nIHRjZmcxID0gX19yYXdfcmVhZGwoUzNDMjQxMF9UQ0ZHMSk7CisJdW5zaWduZWQgaW50IGlkID0gcHdtLT5pZDsKKworCXN0cnVjdCBjbGsgKnBhcmVudDsKKwlpbnQgcmV0OworCisJcmV0ID0gczNjMjR4eF9yZWdpc3Rlcl9jbG9jayhwd20pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJdGNmZzEgPj49IFMzQzI0MTBfVENGRzFfU0hJRlQoaWQpOworCXRjZmcxICY9IFMzQzI0MTBfVENGRzFfTVVYX01BU0s7CisKKwlpZiAocHdtX2NmZ19zcmNfaXNfdGNsayh0Y2ZnMSkpCisJCXBhcmVudCA9IHMzYzI0eHhfcHdtY2xrX3RjbGsoaWQpOworCWVsc2UKKwkJcGFyZW50ID0gczNjMjR4eF9wd21jbGtfdGRpdihpZCk7CisKKwlyZXR1cm4gY2xrX3NldF9wYXJlbnQocHdtLCBwYXJlbnQpOworfQorCisvKioKKyAqIHMzY19wd21jbGtfaW5pdCgpIC0gaW5pdGlhbGlzZSBwd20gY2xvY2tzCisgKgorICogSW5pdGlhbGlzZSBhbmQgcmVnaXN0ZXIgdGhlIGNsb2NrcyB3aGljaCBwcm92aWRlIHRoZSBpbnB1dHMgZm9yIHRoZQorICogcHdtIHRpbWVyIGJsb2Nrcy4KKyAqCisgKiBOb3RlLCB0aGlzIGNhbGwgaXMgcmVxdWlyZWQgYnkgdGhlIHRpbWUgY29yZSwgc28gbXVzdCBiZSBjYWxsZWQgYWZ0ZXIKKyAqIHRoZSBiYXNlIGNsb2NrcyBhcmUgYWRkZWQgYW5kIGJlZm9yZSBhbnkgb2YgdGhlIGluaXRjYWxscyBhcmUgcnVuLgorICovCitfX2luaXQgdm9pZCBzM2NfcHdtY2xrX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgY2xrICpjbGtfdGltZXJzOworCXVuc2lnbmVkIGludCBjbGs7CisJaW50IHJldDsKKworCWNsa190aW1lcnMgPSBjbGtfZ2V0KE5VTEwsICJ0aW1lcnMiKTsKKwlpZiAoSVNfRVJSKGNsa190aW1lcnMpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIHBhcmVudCBjbG9ja1xuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCisJZm9yIChjbGsgPSAwOyBjbGsgPCBBUlJBWV9TSVpFKGNsa190aW1lcl9zY2FsZXIpOyBjbGsrKykKKwkJY2xrX3RpbWVyX3NjYWxlcltjbGtdLnBhcmVudCA9IGNsa190aW1lcnM7CisKKwlzM2NfcmVnaXN0ZXJfY2xvY2tzKGNsa190aW1lcl9zY2FsZXIsIEFSUkFZX1NJWkUoY2xrX3RpbWVyX3NjYWxlcikpOworCXMzY19yZWdpc3Rlcl9jbG9ja3MoY2xrX3RpbWVyX3RjbGssIEFSUkFZX1NJWkUoY2xrX3RpbWVyX3RjbGspKTsKKworCWZvciAoY2xrID0gMDsgY2xrIDwgQVJSQVlfU0laRShjbGtfdGltZXJfdGRpdik7IGNsaysrKSB7CisJCXJldCA9IGNsa19wd21fdGRpdl9yZWdpc3RlcihjbGspOworCisJCWlmIChyZXQgPCAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgImVycm9yIGFkZGluZyBwd20lZCB0ZGl2IGNsb2NrXG4iLCBjbGspOworCQkJcmV0dXJuOworCQl9CisJfQorCisJZm9yIChjbGsgPSAwOyBjbGsgPCBBUlJBWV9TSVpFKGNsa190aW4pOyBjbGsrKykgeworCQlyZXQgPSBjbGtfcHdtX3Rpbl9yZWdpc3RlcigmY2xrX3RpbltjbGtdKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiZXJyb3IgYWRkaW5nIHB3bSVkIHRpbiBjbG9ja1xuIiwgY2xrKTsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtczNjL3B3bS5jIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3B3bS5jCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBhcmNoL2FybS9wbGF0LXMzYy9wd20uYwpyZW5hbWUgdG8gYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3B3bS5jCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LXNhbXN1bmcvdGltZS5jIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjMxZDgwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3RpbWUuYwpAQCAtMCwwICsxLDI4NSBAQAorLyogbGludXgvYXJjaC9hcm0vcGxhdC1zYW1zdW5nL3RpbWUuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzLCA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2xlZHMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8cGxhdC9yZWdzLXRpbWVyLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLWlycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxtYWNoL3RpY2suaD4KKworI2luY2x1ZGUgPHBsYXQvY2xvY2suaD4KKyNpbmNsdWRlIDxwbGF0L2NwdS5oPgorCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0aW1lcl9zdGFydHZhbDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX3VzZWNfdGlja3M7CisKKyNpZm5kZWYgVElDS19NQVgKKyNkZWZpbmUgVElDS19NQVggKDB4ZmZmZikKKyNlbmRpZgorCisjZGVmaW5lIFRJTUVSX1VTRUNfU0hJRlQgMTYKKworLyogd2UgdXNlIHRoZSBzaGlmdGVkIGFyaXRobWV0aWMgdG8gd29yayBvdXQgdGhlIHJhdGlvIG9mIHRpbWVyIHRpY2tzCisgKiB0byB1c2VjcywgYXMgb2Z0ZW4gdGhlIHBlcmlwaGVyYWwgY2xvY2sgaXMgbm90IGEgbmljZSBldmVuIG11bHRpcGxlCisgKiBvZiAxTUh6LgorICoKKyAqIHNoaWZ0IG9mIDE0IGFuZCAxNSBhcmUgdG9vIGxvdyBmb3IgdGhlIDEyTUh6LCAxNiBzZWVtcyB0byBiZSBvaworICogZm9yIHRoZSBjdXJyZW50IEhaIHZhbHVlIG9mIDIwMCB3aXRob3V0IHByb2R1Y2luZyBvdmVyZmxvd3MuCisgKgorICogT3JpZ2luYWwgcGF0Y2ggYnkgRGltaXRyeSBBbmRyaWMsIHVwZGF0ZWQgYnkgQmVuIERvb2tzCisqLworCisKKy8qIHRpbWVyX21hc2tfdXNlY190aWNrcworICoKKyAqIGdpdmVuIGEgY2xvY2sgYW5kIGRpdmlzb3IsIG1ha2UgdGhlIHZhbHVlIHRvIHBhc3MgaW50byB0aW1lcl90aWNrc190b191c2VjCisgKiB0byBzY2FsZSB0aGUgdGlja3MgaW50byB1c2VjcworKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nCit0aW1lcl9tYXNrX3VzZWNfdGlja3ModW5zaWduZWQgbG9uZyBzY2FsZXIsIHVuc2lnbmVkIGxvbmcgcGNsaykKK3sKKwl1bnNpZ25lZCBsb25nIGRlbiA9IHBjbGsgLyAxMDAwOworCisJcmV0dXJuICgoMTAwMCA8PCBUSU1FUl9VU0VDX1NISUZUKSAqIHNjYWxlciArIChkZW4gPj4gMSkpIC8gZGVuOworfQorCisvKiB0aW1lcl90aWNrc190b191c2VjCisgKgorICogY29udmVydCB0aW1lciB0aWNrcyB0byB1c2VjLgorKi8KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRpbWVyX3RpY2tzX3RvX3VzZWModW5zaWduZWQgbG9uZyB0aWNrcykKK3sKKwl1bnNpZ25lZCBsb25nIHJlczsKKworCXJlcyA9IHRpY2tzICogdGltZXJfdXNlY190aWNrczsKKwlyZXMgKz0gMSA8PCAoVElNRVJfVVNFQ19TSElGVCAtIDQpOwkvKiByb3VuZCB1cCBzbGlnaHRseSAqLworCisJcmV0dXJuIHJlcyA+PiBUSU1FUl9VU0VDX1NISUZUOworfQorCisvKioqCisgKiBSZXR1cm5zIG1pY3Jvc2Vjb25kICBzaW5jZSBsYXN0IGNsb2NrIGludGVycnVwdC4gIE5vdGUgdGhhdCBpbnRlcnJ1cHRzCisgKiB3aWxsIGhhdmUgYmVlbiBkaXNhYmxlZCBieSBkb19nZXR0aW1lb2Zmc2V0KCkKKyAqIElSUXMgYXJlIGRpc2FibGVkIGJlZm9yZSBlbnRlcmluZyBoZXJlIGZyb20gZG9fZ2V0dGltZW9mZGF5KCkKKyAqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzM2MyNDEwX2dldHRpbWVvZmZzZXQgKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB0ZG9uZTsKKwl1bnNpZ25lZCBsb25nIHR2YWw7CisKKwkvKiB3b3JrIG91dCBob3cgbWFueSB0aWNrcyBoYXZlIGdvbmUgc2luY2UgbGFzdCB0aW1lciBpbnRlcnJ1cHQgKi8KKworCXR2YWwgPSAgX19yYXdfcmVhZGwoUzNDMjQxMF9UQ05UTyg0KSk7CisJdGRvbmUgPSB0aW1lcl9zdGFydHZhbCAtIHR2YWw7CisKKwkvKiBjaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYW4gaW50ZXJydXB0IHBlbmRpbmcgKi8KKworCWlmIChzM2MyNHh4X29zdGltZXJfcGVuZGluZygpKSB7CisJCS8qIHJlLXJlYWQgdGhlIHRpbWVyLCBhbmQgdHJ5IGFuZCBmaXggdXAgZm9yIHRoZSBtaXNzZWQKKwkJICogaW50ZXJydXB0LiBOb3RlLCB0aGUgaW50ZXJydXB0IG1heSBnbyBvZmYgYmVmb3JlIHRoZQorCQkgKiB0aW1lciBoYXMgcmUtbG9hZGVkIGZyb20gd3JhcHBpbmcuCisJCSAqLworCisJCXR2YWwgPSAgX19yYXdfcmVhZGwoUzNDMjQxMF9UQ05UTyg0KSk7CisJCXRkb25lID0gdGltZXJfc3RhcnR2YWwgLSB0dmFsOworCisJCWlmICh0dmFsICE9IDApCisJCQl0ZG9uZSArPSB0aW1lcl9zdGFydHZhbDsKKwl9CisKKwlyZXR1cm4gdGltZXJfdGlja3NfdG9fdXNlYyh0ZG9uZSk7Cit9CisKKworLyoKKyAqIElSUSBoYW5kbGVyIGZvciB0aGUgdGltZXIKKyAqLworc3RhdGljIGlycXJldHVybl90CitzM2MyNDEwX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJdGltZXJfdGljaygpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gczNjMjQxMF90aW1lcl9pcnEgPSB7CisJLm5hbWUJCT0gIlMzQzI0MTAgVGltZXIgVGljayIsCisJLmZsYWdzCQk9IElSUUZfRElTQUJMRUQgfCBJUlFGX1RJTUVSIHwgSVJRRl9JUlFQT0xMLAorCS5oYW5kbGVyCT0gczNjMjQxMF90aW1lcl9pbnRlcnJ1cHQsCit9OworCisjZGVmaW5lIHVzZV90Y2xrMV8xMigpICggXAorCW1hY2hpbmVfaXNfYmFzdCgpCXx8IFwKKwltYWNoaW5lX2lzX3ZyMTAwMCgpCXx8IFwKKwltYWNoaW5lX2lzX2FudWJpcygpCXx8IFwKKwltYWNoaW5lX2lzX29zaXJpcygpKQorCitzdGF0aWMgc3RydWN0IGNsayAqdGluOworc3RhdGljIHN0cnVjdCBjbGsgKnRkaXY7CitzdGF0aWMgc3RydWN0IGNsayAqdGltZXJjbGs7CisKKy8qCisgKiBTZXQgdXAgdGltZXIgaW50ZXJydXB0LCBhbmQgcmV0dXJuIHRoZSBjdXJyZW50IHRpbWUgaW4gc2Vjb25kcy4KKyAqCisgKiBDdXJyZW50bHkgd2Ugb25seSB1c2UgdGltZXI0LCBhcyBpdCBpcyB0aGUgb25seSB0aW1lciB3aGljaCBoYXMgbm8KKyAqIG90aGVyIGZ1bmN0aW9uIHRoYXQgY2FuIGJlIGV4cGxvaXRlZCBleHRlcm5hbGx5CisgKi8KK3N0YXRpYyB2b2lkIHMzYzI0MTBfdGltZXJfc2V0dXAgKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyB0Y29uOworCXVuc2lnbmVkIGxvbmcgdGNudDsKKwl1bnNpZ25lZCBsb25nIHRjZmcxOworCXVuc2lnbmVkIGxvbmcgdGNmZzA7CisKKwl0Y250ID0gVElDS19NQVg7ICAvKiBkZWZhdWx0IHZhbHVlIGZvciB0Y250ICovCisKKwkvKiBjb25maWd1cmUgdGhlIHN5c3RlbSBmb3Igd2hpY2hldmVyIG1hY2hpbmUgaXMgaW4gdXNlICovCisKKwlpZiAodXNlX3RjbGsxXzEyKCkpIHsKKwkJLyogdGltZXIgaXMgYXQgMTJNSHosIHNjYWxlciBpcyAxICovCisJCXRpbWVyX3VzZWNfdGlja3MgPSB0aW1lcl9tYXNrX3VzZWNfdGlja3MoMSwgMTIwMDAwMDApOworCQl0Y250ID0gMTIwMDAwMDAgLyBIWjsKKworCQl0Y2ZnMSA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENGRzEpOworCQl0Y2ZnMSAmPSB+UzNDMjQxMF9UQ0ZHMV9NVVg0X01BU0s7CisJCXRjZmcxIHw9IFMzQzI0MTBfVENGRzFfTVVYNF9UQ0xLMTsKKwkJX19yYXdfd3JpdGVsKHRjZmcxLCBTM0MyNDEwX1RDRkcxKTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBsb25nIHBjbGs7CisJCXN0cnVjdCBjbGsgKnRzY2FsZXI7CisKKwkJLyogZm9yIHRoZSBoMTk0MCAoYW5kIG90aGVycyksIHdlIHVzZSB0aGUgcGNsayBmcm9tIHRoZSBjb3JlCisJCSAqIHRvIGdlbmVyYXRlIHRoZSB0aW1lciB2YWx1ZXMuIHNpbmNlIHZhbHVlcyBhcm91bmQgNTAgdG8KKwkJICogNzBNSHogYXJlIG5vdCB2YWx1ZXMgd2UgY2FuIGRpcmVjdGx5IGdlbmVyYXRlIHRoZSB0aW1lcgorCQkgKiB2YWx1ZSBmcm9tLCB3ZSBuZWVkIHRvIHByZS1zY2FsZSBhbmQgZGl2aWRlIGJlZm9yZSB1c2luZyBpdC4KKwkJICoKKwkJICogZm9yIGluc3RhbmNlLCB1c2luZyA1MC43TUh6IGFuZCBkaXZpZGluZyBieSA2IGdpdmVzIDguNDVNSHoKKwkJICogKDguNDUgdGlja3MgcGVyIHVzZWMpCisJCSAqLworCisJCXBjbGsgPSBjbGtfZ2V0X3JhdGUodGltZXJjbGspOworCisJCS8qIGNvbmZpZ3VyZSBjbG9jayB0aWNrICovCisKKwkJdGltZXJfdXNlY190aWNrcyA9IHRpbWVyX21hc2tfdXNlY190aWNrcyg2LCBwY2xrKTsKKworCQl0c2NhbGVyID0gY2xrX2dldF9wYXJlbnQodGRpdik7CisKKwkJY2xrX3NldF9yYXRlKHRzY2FsZXIsIHBjbGsgLyAzKTsKKwkJY2xrX3NldF9yYXRlKHRkaXYsIHBjbGsgLyA2KTsKKwkJY2xrX3NldF9wYXJlbnQodGluLCB0ZGl2KTsKKworCQl0Y250ID0gY2xrX2dldF9yYXRlKHRpbikgLyBIWjsKKwl9CisKKwl0Y29uID0gX19yYXdfcmVhZGwoUzNDMjQxMF9UQ09OKTsKKwl0Y2ZnMCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfVENGRzApOworCXRjZmcxID0gX19yYXdfcmVhZGwoUzNDMjQxMF9UQ0ZHMSk7CisKKwkvKiB0aW1lcnMgcmVsb2FkIGFmdGVyIGNvdW50aW5nIHplcm8sIHNvIHJlZHVjZSB0aGUgY291bnQgYnkgMSAqLworCisJdGNudC0tOworCisJcHJpbnRrKEtFUk5fREVCVUcgInRpbWVyIHRjb249JTA4bHgsIHRjbnQgJTA0bHgsIHRjZmcgJTA4bHgsJTA4bHgsIHVzZWMgJTA4bHhcbiIsCisJICAgICAgIHRjb24sIHRjbnQsIHRjZmcwLCB0Y2ZnMSwgdGltZXJfdXNlY190aWNrcyk7CisKKwkvKiBjaGVjayB0byBzZWUgaWYgdGltZXIgaXMgd2l0aGluIDE2Yml0IHJhbmdlLi4uICovCisJaWYgKHRjbnQgPiBUSUNLX01BWCkgeworCQlwYW5pYygic2V0dXBfdGltZXI6IEhaIGlzIHRvbyBzbWFsbCwgY2Fubm90IGNvbmZpZ3VyZSB0aW1lciEiKTsKKwkJcmV0dXJuOworCX0KKworCV9fcmF3X3dyaXRlbCh0Y2ZnMSwgUzNDMjQxMF9UQ0ZHMSk7CisJX19yYXdfd3JpdGVsKHRjZmcwLCBTM0MyNDEwX1RDRkcwKTsKKworCXRpbWVyX3N0YXJ0dmFsID0gdGNudDsKKwlfX3Jhd193cml0ZWwodGNudCwgUzNDMjQxMF9UQ05UQig0KSk7CisKKwkvKiBlbnN1cmUgdGltZXIgaXMgc3RvcHBlZC4uLiAqLworCisJdGNvbiAmPSB+KDc8PDIwKTsKKwl0Y29uIHw9IFMzQzI0MTBfVENPTl9UNFJFTE9BRDsKKwl0Y29uIHw9IFMzQzI0MTBfVENPTl9UNE1BTlVBTFVQRDsKKworCV9fcmF3X3dyaXRlbCh0Y29uLCBTM0MyNDEwX1RDT04pOworCV9fcmF3X3dyaXRlbCh0Y250LCBTM0MyNDEwX1RDTlRCKDQpKTsKKwlfX3Jhd193cml0ZWwodGNudCwgUzNDMjQxMF9UQ01QQig0KSk7CisKKwkvKiBzdGFydCB0aGUgdGltZXIgcnVubmluZyAqLworCXRjb24gfD0gUzNDMjQxMF9UQ09OX1Q0U1RBUlQ7CisJdGNvbiAmPSB+UzNDMjQxMF9UQ09OX1Q0TUFOVUFMVVBEOworCV9fcmF3X3dyaXRlbCh0Y29uLCBTM0MyNDEwX1RDT04pOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgczNjMjQxMF90aW1lcl9yZXNvdXJjZXModm9pZCkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHRtcGRldjsKKworCXRtcGRldi5kZXYuYnVzID0gJnBsYXRmb3JtX2J1c190eXBlOworCXRtcGRldi5pZCA9IDQ7CisKKwl0aW1lcmNsayA9IGNsa19nZXQoTlVMTCwgInRpbWVycyIpOworCWlmIChJU19FUlIodGltZXJjbGspKQorCQlwYW5pYygiZmFpbGVkIHRvIGdldCBjbG9jayBmb3Igc3lzdGVtIHRpbWVyIik7CisKKwljbGtfZW5hYmxlKHRpbWVyY2xrKTsKKworCWlmICghdXNlX3RjbGsxXzEyKCkpIHsKKwkJdGluID0gY2xrX2dldCgmdG1wZGV2LmRldiwgInB3bS10aW4iKTsKKwkJaWYgKElTX0VSUih0aW4pKQorCQkJcGFuaWMoImZhaWxlZCB0byBnZXQgcHdtLXRpbiBjbG9jayBmb3Igc3lzdGVtIHRpbWVyIik7CisKKwkJdGRpdiA9IGNsa19nZXQoJnRtcGRldi5kZXYsICJwd20tdGRpdiIpOworCQlpZiAoSVNfRVJSKHRkaXYpKQorCQkJcGFuaWMoImZhaWxlZCB0byBnZXQgcHdtLXRkaXYgY2xvY2sgZm9yIHN5c3RlbSB0aW1lciIpOworCX0KKworCWNsa19lbmFibGUodGluKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHMzYzI0MTBfdGltZXJfaW5pdCh2b2lkKQoreworCXMzYzI0MTBfdGltZXJfcmVzb3VyY2VzKCk7CisJczNjMjQxMF90aW1lcl9zZXR1cCgpOworCXNldHVwX2lycShJUlFfVElNRVI0LCAmczNjMjQxMF90aW1lcl9pcnEpOworfQorCitzdHJ1Y3Qgc3lzX3RpbWVyIHMzYzI0eHhfdGltZXIgPSB7CisJLmluaXQJCT0gczNjMjQxMF90aW1lcl9pbml0LAorCS5vZmZzZXQJCT0gczNjMjQxMF9nZXR0aW1lb2Zmc2V0LAorCS5yZXN1bWUJCT0gczNjMjQxMF90aW1lcl9zZXR1cAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL2F2cjMyL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IDllMmQ0NGYuLmU1M2RkMGQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMTI0LDYgKzEyNCw4IEBACiAKICNpbmNsdWRlIDxhc20vb2NkLmg+CiAKKyNkZWZpbmUgYXJjaF9oYXNfc2luZ2xlX3N0ZXAoKQkJKDEpCisKICNkZWZpbmUgYXJjaF9wdHJhY2VfYXR0YWNoKGNoaWxkKSAgICAgICBvY2RfZW5hYmxlKGNoaWxkKQogCiAjZGVmaW5lIHVzZXJfbW9kZShyZWdzKSAgICAgICAgICAgICAgICAgKCgocmVncyktPnNyICYgTU9ERV9NQVNLKSA9PSBNT0RFX1VTRVIpCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvYXZyMzIva2VybmVsL3B0cmFjZS5jCmluZGV4IDFmZWQzOGYuLmRkNWI4ODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvYXZyMzIva2VybmVsL3B0cmFjZS5jCkBAIC0yOCw5ICsyOCw5IEBACiAJCQkJICBUSFJFQURfU0laRSAtIHNpemVvZihzdHJ1Y3QgcHRfcmVncykpOwogfQogCi1zdGF0aWMgdm9pZCBwdHJhY2Vfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCitzdGF0aWMgdm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKIHsKLQlwcl9kZWJ1ZygicHRyYWNlX3NpbmdsZV9zdGVwOiBwaWQ9JXUsIFBDPTB4JTA4bHgsIFNSPTB4JTA4bHhcbiIsCisJcHJfZGVidWcoInVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwOiBwaWQ9JXUsIFBDPTB4JTA4bHgsIFNSPTB4JTA4bHhcbiIsCiAJCSB0c2stPnBpZCwgdGFza19wdF9yZWdzKHRzayktPnBjLCB0YXNrX3B0X3JlZ3ModHNrKS0+c3IpOwogCiAJLyoKQEAgLTQ5LDYgKzQ5LDExIEBACiAJc2V0X3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9TSU5HTEVfU1RFUCk7CiB9CiAKK3ZvaWQgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCit7CisJLyogWFhYKGhjaCk6IGEgbm8tb3AgaGVyZSBzZWVtcyB3cm9uZy4uICovCit9CisKIC8qCiAgKiBDYWxsZWQgYnkga2VybmVsL3B0cmFjZS5jIHdoZW4gZGV0YWNoaW5nCiAgKgpAQCAtMTY3LDUwICsxNzIsNiBAQAogCQlyZXQgPSBwdHJhY2Vfd3JpdGVfdXNlcihjaGlsZCwgYWRkciwgZGF0YSk7CiAJCWJyZWFrOwogCi0JLyogY29udGludWUgYW5kIHN0b3AgYXQgbmV4dCAocmV0dXJuIGZyb20pIHN5c2NhbGwgKi8KLQljYXNlIFBUUkFDRV9TWVNDQUxMOgotCS8qIHJlc3RhcnQgYWZ0ZXIgc2lnbmFsICovCi0JY2FzZSBQVFJBQ0VfQ09OVDoKLQkJcmV0ID0gLUVJTzsKLQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCi0JCQlicmVhazsKLQkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpCi0JCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7Ci0JCWVsc2UKLQkJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKLQkJLyogWFhYOiBBcmUgd2Ugc3VyZSBubyBicmVha3BvaW50cyBhcmUgYWN0aXZlIGhlcmU/ICovCi0JCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7Ci0JCXJldCA9IDA7Ci0JCWJyZWFrOwotCi0JLyoKLQkgKiBNYWtlIHRoZSBjaGlsZCBleGl0LiBCZXN0IEkgY2FuIGRvIGlzIHNlbmQgaXQgYQotCSAqIFNJR0tJTEwuIFBlcmhhcHMgaXQgc2hvdWxkIGJlIHB1dCBpbiB0aGUgc3RhdHVzIHRoYXQgaXQKLQkgKiB3YW50cyB0byBleGl0LgotCSAqLwotCWNhc2UgUFRSQUNFX0tJTEw6Ci0JCXJldCA9IDA7Ci0JCWlmIChjaGlsZC0+ZXhpdF9zdGF0ZSA9PSBFWElUX1pPTUJJRSkKLQkJCWJyZWFrOwotCQljaGlsZC0+ZXhpdF9jb2RlID0gU0lHS0lMTDsKLQkJd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKLQkJYnJlYWs7Ci0KLQkvKgotCSAqIGV4ZWN1dGUgc2luZ2xlIGluc3RydWN0aW9uLgotCSAqLwotCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6Ci0JCXJldCA9IC1FSU87Ci0JCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQotCQkJYnJlYWs7Ci0JCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCQlwdHJhY2Vfc2luZ2xlX3N0ZXAoY2hpbGQpOwotCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKLQkJd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKLQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0KIAljYXNlIFBUUkFDRV9HRVRSRUdTOgogCQlyZXQgPSBwdHJhY2VfZ2V0cmVncyhjaGlsZCwgKHZvaWQgX191c2VyICopZGF0YSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9tYWNoLWF0MzJhcC9hdDMyYXA3MDB4LmMgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYwppbmRleCBiMTNkMTg3Li4zYTRiYzFhIDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYworKysgYi9hcmNoL2F2cjMyL21hY2gtYXQzMmFwL2F0MzJhcDcwMHguYwpAQCAtMTc3MCwxMCArMTc3MCwxMyBAQAogCQkJCQkgIEFSUkFZX1NJWkUodXNiYTBfcmVzb3VyY2UpKSkKIAkJZ290byBvdXRfZnJlZV9wZGV2OwogCi0JaWYgKGRhdGEpCisJaWYgKGRhdGEpIHsKIAkJdXNiYV9kYXRhLnBkYXRhLnZidXNfcGluID0gZGF0YS0+dmJ1c19waW47Ci0JZWxzZQorCQl1c2JhX2RhdGEucGRhdGEudmJ1c19waW5faW52ZXJ0ZWQgPSBkYXRhLT52YnVzX3Bpbl9pbnZlcnRlZDsKKwl9IGVsc2UgewogCQl1c2JhX2RhdGEucGRhdGEudmJ1c19waW4gPSAtRUlOVkFMOworCQl1c2JhX2RhdGEucGRhdGEudmJ1c19waW5faW52ZXJ0ZWQgPSAtRUlOVkFMOworCX0KIAogCWRhdGEgPSAmdXNiYV9kYXRhLnBkYXRhOwogCWRhdGEtPm51bV9lcCA9IEFSUkFZX1NJWkUoYXQzMl91c2JhX2VwKTsKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCBmOTE3MmZmLi40MTNhMzAzIDEwMDY0NAotLS0gYS9hcmNoL2JsYWNrZmluL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC02NSwxMyArNjUsNiBAQAogCX0KIH0KIAotLyoKLSAqIE1hcCBhIHNpbmdsZSBidWZmZXIgb2YgdGhlIGluZGljYXRlZCBzaXplIGZvciBETUEgaW4gc3RyZWFtaW5nIG1vZGUuCi0gKiBUaGUgMzItYml0IGJ1cyBhZGRyZXNzIHRvIHVzZSBpcyByZXR1cm5lZC4KLSAqCi0gKiBPbmNlIHRoZSBkZXZpY2UgaXMgZ2l2ZW4gdGhlIGRtYSBhZGRyZXNzLCB0aGUgZGV2aWNlIG93bnMgdGhpcyBtZW1vcnkKLSAqIHVudGlsIGVpdGhlciBwY2lfdW5tYXBfc2luZ2xlIG9yIHBjaV9kbWFfc3luY19zaW5nbGUgaXMgcGVyZm9ybWVkLgotICovCiBzdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QKIGRtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKIAkgICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQpAQCAtODgsMTQgKzgxLDYgQEAKIAlyZXR1cm4gZG1hX21hcF9zaW5nbGUoZGV2LCBwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQsIHNpemUsIGRpcik7CiB9CiAKLS8qCi0gKiBVbm1hcCBhIHNpbmdsZSBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb24uICBUaGUgZG1hX2FkZHIgYW5kIHNpemUKLSAqIG11c3QgbWF0Y2ggd2hhdCB3YXMgcHJvdmlkZWQgZm9yIGluIGEgcHJldmlvdXMgcGNpX21hcF9zaW5nbGUgY2FsbC4gIEFsbAotICogb3RoZXIgdXNhZ2VzIGFyZSB1bmRlZmluZWQuCi0gKgotICogQWZ0ZXIgdGhpcyBjYWxsLCByZWFkcyBieSB0aGUgY3B1IHRvIHRoZSBidWZmZXIgYXJlIGd1YXJlbnRlZWQgdG8gc2VlCi0gKiB3aGF0ZXZlciB0aGUgZGV2aWNlIHdyb3RlIHRoZXJlLgotICovCiBzdGF0aWMgaW5saW5lIHZvaWQKIGRtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLCBzaXplX3Qgc2l6ZSwKIAkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKQEAgLTExMCwzMCArOTUsOSBAQAogCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBkbWFfYWRkciwgc2l6ZSwgZGlyKTsKIH0KIAotLyoKLSAqIE1hcCBhIHNldCBvZiBidWZmZXJzIGRlc2NyaWJlZCBieSBzY2F0dGVybGlzdCBpbiBzdHJlYW1pbmcKLSAqIG1vZGUgZm9yIERNQS4gIFRoaXMgaXMgdGhlIHNjYXRoZXItZ2F0aGVyIHZlcnNpb24gb2YgdGhlCi0gKiBhYm92ZSBwY2lfbWFwX3NpbmdsZSBpbnRlcmZhY2UuICBIZXJlIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0Ci0gKiBlbGVtZW50cyBhcmUgZWFjaCB0YWdnZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZG1hIGFkZHJlc3MKLSAqIGFuZCBsZW5ndGguICBUaGV5IGFyZSBvYnRhaW5lZCB2aWEgc2dfZG1hX3thZGRyZXNzLGxlbmd0aH0oU0cpLgotICoKLSAqIE5PVEU6IEFuIGltcGxlbWVudGF0aW9uIG1heSBiZSBhYmxlIHRvIHVzZSBhIHNtYWxsZXIgbnVtYmVyIG9mCi0gKiAgICAgICBETUEgYWRkcmVzcy9sZW5ndGggcGFpcnMgdGhhbiB0aGVyZSBhcmUgU0cgdGFibGUgZWxlbWVudHMuCi0gKiAgICAgICAoZm9yIGV4YW1wbGUgdmlhIHZpcnR1YWwgbWFwcGluZyBjYXBhYmlsaXRpZXMpCi0gKiAgICAgICBUaGUgcm91dGluZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWRkci9sZW5ndGggcGFpcnMgYWN0dWFsbHkKLSAqICAgICAgIHVzZWQsIGF0IG1vc3QgbmVudHMuCi0gKgotICogRGV2aWNlIG93bmVyc2hpcCBpc3N1ZXMgYXMgbWVudGlvbmVkIGFib3ZlIGZvciBwY2lfbWFwX3NpbmdsZSBhcmUKLSAqIHRoZSBzYW1lIGhlcmUuCi0gKi8KIGV4dGVybiBpbnQgZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKIAkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKIAotLyoKLSAqIFVubWFwIGEgc2V0IG9mIHN0cmVhbWluZyBtb2RlIERNQSB0cmFuc2xhdGlvbnMuCi0gKiBBZ2FpbiwgY3B1IHJlYWQgcnVsZXMgY29uY2VybmluZyBjYWxscyBoZXJlIGFyZSB0aGUgc2FtZSBhcyBmb3IKLSAqIHBjaV91bm1hcF9zaW5nbGUoKSBhYm92ZS4KLSAqLwogc3RhdGljIGlubGluZSB2b2lkCiBkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAogCSAgICAgaW50IG5od2VudHJpZXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKZGlmZiAtLWdpdCBhL2FyY2gvYmxhY2tmaW4vaW5jbHVkZS9hc20vbmFuZC5oIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9uYW5kLmgKaW5kZXggM2FlOGI1Ni4uM2ExZTc5ZCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9uYW5kLmgKKysrIGIvYXJjaC9ibGFja2Zpbi9pbmNsdWRlL2FzbS9uYW5kLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQkY1WFggLSBOQU5EIGZsYXNoIGNvbnRyb2xsZXIgcGxhdGZyb21fZGV2aWNlIGluZm8KKyAqIEJGNVhYIC0gTkFORCBmbGFzaCBjb250cm9sbGVyIHBsYXRmb3JtX2RldmljZSBpbmZvCiAgKgogICogQ29weXJpZ2h0IDIwMDctMjAwOCBBbmFsb2cgRGV2aWNlcywgSW5jLgogICoKQEAgLTgsNyArOCw3IEBACiAKIC8qIHN0cnVjdCBiZjV4eF9uYW5kX3BsYXRmb3JtCiAgKgotICogZGVmaW5lIGEgaW50ZXJmYWNlIGJldHdlZW4gcGxhdGZyb20gYm9hcmQgc3BlY2lmaWMgY29kZSBhbmQKKyAqIGRlZmluZSBhIGludGVyZmFjZSBiZXR3ZWVuIHBsYXRmb3JtIGJvYXJkIHNwZWNpZmljIGNvZGUgYW5kCiAgKiBiZjU0eCBORkMgZHJpdmVyLgogICoKICAqIG5yX3BhcnRpdGlvbnMgPSBudW1iZXIgb2YgcGFydGl0aW9ucyBwb2ludGVkIHRvIGJlIHBhcnRpdG9vbnMgKG9yIHplcm8pCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMgYi9hcmNoL2JsYWNrZmluL21hY2gtY29tbW9uL2VudHJ5LlMKaW5kZXggYjBlZDBiNC4uMDFiMmY1OCAxMDA2NDQKLS0tIGEvYXJjaC9ibGFja2Zpbi9tYWNoLWNvbW1vbi9lbnRyeS5TCisrKyBiL2FyY2gvYmxhY2tmaW4vbWFjaC1jb21tb24vZW50cnkuUwpAQCAtODE2LDggKzgxNiw4IEBACiAKIEVOVFJZKF9yZXRfZnJvbV9leGNlcHRpb24pCiAjaWZkZWYgQ09ORklHX0lQSVBFCi0JcDIubCA9IF9wZXJfY3B1X19pcGlwZV9wZXJjcHVfZG9tYWluOwotCXAyLmggPSBfcGVyX2NwdV9faXBpcGVfcGVyY3B1X2RvbWFpbjsKKwlwMi5sID0gX2lwaXBlX3BlcmNwdV9kb21haW47CisJcDIuaCA9IF9pcGlwZV9wZXJjcHVfZG9tYWluOwogCXIwLmwgPSBfaXBpcGVfcm9vdDsKIAlyMC5oID0gX2lwaXBlX3Jvb3Q7CiAJcjIgPSBbcDJdOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL0tjb25maWcgYi9hcmNoL2NyaXMvS2NvbmZpZwppbmRleCA3YWRhYzM4Li4wNTllYWM2IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvS2NvbmZpZworKysgYi9hcmNoL2NyaXMvS2NvbmZpZwpAQCAtMjAsNiArMjAsMTIgQEAKIGNvbmZpZyBSV1NFTV9YQ0hHQUREX0FMR09SSVRITQogCWJvb2wKIAorY29uZmlnIEdFTkVSSUNfVElNRQorCWRlZl9ib29sIHkKKworY29uZmlnIEFSQ0hfVVNFU19HRVRUSU1FT0ZGU0VUCisJZGVmX2Jvb2wgeQorCiBjb25maWcgR0VORVJJQ19JT01BUAogICAgICAgIGJvb2wKICAgICAgICBkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvZW50cnkuUwppbmRleCAyYzE4ZDA4Li4wZDY0MjBkIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9lbnRyeS5TCkBAIC0zNTgsNyArMzU4LDcgQEAKIDE6CWJ0c3RxCTEyLCAkcjEJCSAgIDsgUmVmaWxsPwogCWJwbAkyZgogCWxzcnEJMjQsICRyMSAgICAgOyBHZXQgUEdEIGluZGV4IChiaXQgMjQtMzEpCi0JbW92ZS5kICBbcGVyX2NwdV9fY3VycmVudF9wZ2RdLCAkcjAgOyBQR0QgZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MKKwltb3ZlLmQgIFtjdXJyZW50X3BnZF0sICRyMCA7IFBHRCBmb3IgdGhlIGN1cnJlbnQgcHJvY2VzcwogCW1vdmUuZAlbJHIwKyRyMS5kXSwgJHIwICAgOyBHZXQgUE1ECiAJYmVxCTJmCiAJbm9wCkBAIC02OTIsNyArNjkyLDcgQEAKIAkubG9uZyBzeXNfc3dhcG9uCiAJLmxvbmcgc3lzX3JlYm9vdAogCS5sb25nIHN5c19vbGRfcmVhZGRpcgotCS5sb25nIG9sZF9tbWFwCQkvKiA5MCAqLworCS5sb25nIHN5c19vbGRfbW1hcAkvKiA5MCAqLwogCS5sb25nIHN5c19tdW5tYXAKIAkubG9uZyBzeXNfdHJ1bmNhdGUKIAkubG9uZyBzeXNfZnRydW5jYXRlCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2tlcm5lbC9wdHJhY2UuYwppbmRleCBlZTUwNWIyLi5lNzBjODA0IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvcHRyYWNlLmMKQEAgLTEyNyw1NyArMTI3LDYgQEAKIAkJCXJldCA9IDA7CiAJCQlicmVhazsKIAotCQljYXNlIFBUUkFDRV9TWVNDQUxMOgotCQljYXNlIFBUUkFDRV9DT05UOgotCQkJcmV0ID0gLUVJTzsKLQkJCQotCQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCi0JCQkJYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAKLQkJCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9TWVNDQUxMKSB7Ci0JCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7Ci0JCQl9Ci0JCQkKLQkJCWNoaWxkLT5leGl0X2NvZGUgPSBkYXRhOwotCQkJCi0JCQkvKiBUT0RPOiBtYWtlIHN1cmUgYW55IHBlbmRpbmcgYnJlYWtwb2ludCBpcyBraWxsZWQgKi8KLQkJCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7Ci0JCQlyZXQgPSAwOwotCQkJCi0JCQlicmVhazsKLQkJCi0gCQkvKiBNYWtlIHRoZSBjaGlsZCBleGl0IGJ5IHNlbmRpbmcgaXQgYSBzaWdraWxsLiAqLwotCQljYXNlIFBUUkFDRV9LSUxMOgotCQkJcmV0ID0gMDsKLQkJCQotCQkJaWYgKGNoaWxkLT5leGl0X3N0YXRlID09IEVYSVRfWk9NQklFKQotCQkJCWJyZWFrOwotCQkJCi0JCQljaGlsZC0+ZXhpdF9jb2RlID0gU0lHS0lMTDsKLQkJCQotCQkJLyogVE9ETzogbWFrZSBzdXJlIGFueSBwZW5kaW5nIGJyZWFrcG9pbnQgaXMga2lsbGVkICovCi0JCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOwotCQkJYnJlYWs7Ci0KLQkJLyogU2V0IHRoZSB0cmFwIGZsYWcuICovCi0JCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6Ci0JCQlyZXQgPSAtRUlPOwotCQkJCi0JCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKLQkJCQlicmVhazsKLQkJCQotCQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7Ci0KLQkJCS8qIFRPRE86IHNldCBzb21lIGNsZXZlciBicmVha3BvaW50IG1lY2hhbmlzbS4uLiAqLwotCi0JCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKLQkJCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7Ci0JCQlyZXQgPSAwOwotCQkJYnJlYWs7Ci0KIAkJLyogR2V0IGFsbCBHUCByZWdpc3RlcnMgZnJvbSB0aGUgY2hpbGQuICovCiAJCWNhc2UgUFRSQUNFX0dFVFJFR1M6IHsKIAkJICAJaW50IGk7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAvbGliL29sZF9jaGVja3N1bS5jIGIvYXJjaC9jcmlzL2FyY2gtdjEwL2xpYi9vbGRfY2hlY2tzdW0uYwppbmRleCAxNzM0YjQ2Li44Zjc5MTYzIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MTAvbGliL29sZF9jaGVja3N1bS5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9saWIvb2xkX2NoZWNrc3VtLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAkJc3VtICs9ICpidWZmKys7CiAKIAlpZiAoZW5kTWFya2VyID4gYnVmZikKLQkJc3VtICs9ICooY29uc3QgdTggKilidWZmOwkvKiBhZGQgZXh0cmEgYnl0ZSBzZXBlcmF0ZWx5ICovCisJCXN1bSArPSAqKGNvbnN0IHU4ICopYnVmZjsJLyogYWRkIGV4dHJhIGJ5dGUgc2VwYXJhdGVseSAqLwogCiAJQklUT0ZGOwogCXJldHVybiAoX19mb3JjZSBfX3dzdW0pc3VtOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2RyaXZlcnMvY3J5cHRvY29wLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9jcnlwdG9jb3AuYwppbmRleCBmZDUyOWEwLi5iNzBmYjM0IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9jcnlwdG9jb3AuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvZHJpdmVycy9jcnlwdG9jb3AuYwpAQCAtNjI4LDkgKzYyOCw5IEBACiAJCWNkZXNjLT5kbWFfZGVzY3ItPmJ1ZiA9IChjaGFyKil2aXJ0X3RvX3BoeXMob3BlcmF0aW9uLT50ZnJtX29wLmluZGF0YVsqaW5pb3ZfaXhdLmlvdl9iYXNlICsgKmluaW92X29mZnNldCk7CiAJCWNkZXNjLT5kbWFfZGVzY3ItPmFmdGVyID0gY2Rlc2MtPmRtYV9kZXNjci0+YnVmICsgZGxlbmd0aDsKIAorCQlhc3NlcnQoZGVzY19sZW4gPj0gZGxlbmd0aCk7CiAJCWRlc2NfbGVuIC09IGRsZW5ndGg7CiAJCSppbmlvdl9vZmZzZXQgKz0gZGxlbmd0aDsKLQkJYXNzZXJ0KGRlc2NfbGVuID49IDApOwogCQlpZiAoKmluaW92X29mZnNldCA+PSBvcGVyYXRpb24tPnRmcm1fb3AuaW5kYXRhWyppbmlvdl9peF0uaW92X2xlbikgewogCQkJKmluaW92X29mZnNldCA9IDA7CiAJCQkrKygqaW5pb3ZfaXgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9lbnRyeS5TCmluZGV4IDQzNWI5NjcuLjFmMzk4NjEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL2VudHJ5LlMKQEAgLTYxNSw3ICs2MTUsNyBAQAogCS5sb25nIHN5c19zd2Fwb24KIAkubG9uZyBzeXNfcmVib290CiAJLmxvbmcgc3lzX29sZF9yZWFkZGlyCi0JLmxvbmcgb2xkX21tYXAJCS8qIDkwICovCisJLmxvbmcgc3lzX29sZF9tbWFwCS8qIDkwICovCiAJLmxvbmcgc3lzX211bm1hcAogCS5sb25nIHN5c190cnVuY2F0ZQogCS5sb25nIHN5c19mdHJ1bmNhdGUKZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3B0cmFjZS5jCmluZGV4IGRkNDAxNDcuLmY0ZWJkMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9jcmlzL2FyY2gtdjMyL2tlcm5lbC9wdHJhY2UuYwpAQCAtNzgsNiArNzgsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCisJLyoKKwkgKiBTZXQgdXAgU1BDIGlmIG5vdCBzZXQgYWxyZWFkeSAoaW4gd2hpY2ggY2FzZSB3ZSBoYXZlIG5vIG90aGVyCisJICogY2hvaWNlIGJ1dCB0byB0cnVzdCBpdCkuCisJICovCisJaWYgKCFnZXRfcmVnKGNoaWxkLCBQVF9TUEMpKSB7CisJCS8qIEluIGNhc2Ugd2UncmUgc3RvcHBlZCBpbiBhIGRlbGF5IHNsb3QuICovCisJCXRtcCA9IGdldF9yZWcoY2hpbGQsIFBUX0VSUCkgJiB+MTsKKwkJcHV0X3JlZyhjaGlsZCwgUFRfU1BDLCB0bXApOworCX0KKwl0bXAgPSBnZXRfcmVnKGNoaWxkLCBQVF9DQ1MpIHwgU0JJVF9VU0VSOworCXB1dF9yZWcoY2hpbGQsIFBUX0NDUywgdG1wKTsKK30KKwordm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3sKKwlwdXRfcmVnKGNoaWxkLCBQVF9TUEMsIDApOworCisJaWYgKCFnZXRfZGVidWdyZWcoY2hpbGQtPnBpZCwgUFRfQlBfQ1RSTCkpIHsKKwkJdW5zaWduZWQgbG9uZyB0bXA7CisJCS8qIElmIG5vIGgvdyBicCBjb25maWd1cmVkLCBkaXNhYmxlIFMgYml0LiAqLworCQl0bXAgPSBnZXRfcmVnKGNoaWxkLCBQVF9DQ1MpICYgflNCSVRfVVNFUjsKKwkJcHV0X3JlZyhjaGlsZCwgUFRfQ0NTLCB0bXApOworCX0KK30KKwogLyoKICAqIENhbGxlZCBieSBrZXJuZWwvcHRyYWNlLmMgd2hlbiBkZXRhY2hpbmcuCiAgKgpAQCAtODksOCArMTE4LDcgQEAKIAl1bnNpZ25lZCBsb25nIHRtcDsKIAogCS8qIERlY29uZmlndXJlIFNQQyBhbmQgUy1iaXQuICovCi0JdG1wID0gZ2V0X3JlZyhjaGlsZCwgUFRfQ0NTKSAmIH5TQklUX1VTRVI7Ci0JcHV0X3JlZyhjaGlsZCwgUFRfQ0NTLCB0bXApOworCXVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChjaGlsZCk7CiAJcHV0X3JlZyhjaGlsZCwgUFRfU1BDLCAwKTsKIAogCS8qIERlY29uZmlndXJlIGFueSB3YXRjaHBvaW50cyBhc3NvY2lhdGVkIHdpdGggdGhlIGNoaWxkLiAqLwpAQCAtMTY5LDgzICsxOTcsNiBAQAogCQkJcmV0ID0gMDsKIAkJCWJyZWFrOwogCi0JCWNhc2UgUFRSQUNFX1NZU0NBTEw6Ci0JCWNhc2UgUFRSQUNFX0NPTlQ6Ci0JCQlyZXQgPSAtRUlPOwotCi0JCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKLQkJCQlicmVhazsKLQotCQkJLyogQ29udGludWUgbWVhbnMgbm8gc2luZ2xlLXN0ZXAuICovCi0JCQlwdXRfcmVnKGNoaWxkLCBQVF9TUEMsIDApOwotCi0JCQlpZiAoIWdldF9kZWJ1Z3JlZyhjaGlsZC0+cGlkLCBQVF9CUF9DVFJMKSkgewotCQkJCXVuc2lnbmVkIGxvbmcgdG1wOwotCQkJCS8qIElmIG5vIGgvdyBicCBjb25maWd1cmVkLCBkaXNhYmxlIFMgYml0LiAqLwotCQkJCXRtcCA9IGdldF9yZWcoY2hpbGQsIFBUX0NDUykgJiB+U0JJVF9VU0VSOwotCQkJCXB1dF9yZWcoY2hpbGQsIFBUX0NDUywgdG1wKTsKLQkJCX0KLQotCQkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpIHsKLQkJCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKLQkJCX0KLQotCQkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7Ci0KLQkJCS8qIFRPRE86IG1ha2Ugc3VyZSBhbnkgcGVuZGluZyBicmVha3BvaW50IGlzIGtpbGxlZCAqLwotCQkJd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKLQkJCXJldCA9IDA7Ci0KLQkJCWJyZWFrOwotCi0JCS8qIE1ha2UgdGhlIGNoaWxkIGV4aXQgYnkgc2VuZGluZyBpdCBhIHNpZ2tpbGwuICovCi0JCWNhc2UgUFRSQUNFX0tJTEw6Ci0JCQlyZXQgPSAwOwotCi0JCQlpZiAoY2hpbGQtPmV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUpCi0JCQkJYnJlYWs7Ci0KLQkJCWNoaWxkLT5leGl0X2NvZGUgPSBTSUdLSUxMOwotCi0JCQkvKiBEZWNvbmZpZ3VyZSBzaW5nbGUtc3RlcCBhbmQgaC93IGJwLiAqLwotCQkJcHRyYWNlX2Rpc2FibGUoY2hpbGQpOwotCi0JCQkvKiBUT0RPOiBtYWtlIHN1cmUgYW55IHBlbmRpbmcgYnJlYWtwb2ludCBpcyBraWxsZWQgKi8KLQkJCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7Ci0JCQlicmVhazsKLQotCQkvKiBTZXQgdGhlIHRyYXAgZmxhZy4gKi8KLQkJY2FzZSBQVFJBQ0VfU0lOR0xFU1RFUDoJewotCQkJdW5zaWduZWQgbG9uZyB0bXA7Ci0JCQlyZXQgPSAtRUlPOwotCi0JCQkvKiBTZXQgdXAgU1BDIGlmIG5vdCBzZXQgYWxyZWFkeSAoaW4gd2hpY2ggY2FzZSB3ZSBoYXZlCi0JCQkgICBubyBvdGhlciBjaG9pY2UgYnV0IHRvIHRydXN0IGl0KS4gKi8KLQkJCWlmICghZ2V0X3JlZyhjaGlsZCwgUFRfU1BDKSkgewotCQkJCS8qIEluIGNhc2Ugd2UncmUgc3RvcHBlZCBpbiBhIGRlbGF5IHNsb3QuICovCi0JCQkJdG1wID0gZ2V0X3JlZyhjaGlsZCwgUFRfRVJQKSAmIH4xOwotCQkJCXB1dF9yZWcoY2hpbGQsIFBUX1NQQywgdG1wKTsKLQkJCX0KLQkJCXRtcCA9IGdldF9yZWcoY2hpbGQsIFBUX0NDUykgfCBTQklUX1VTRVI7Ci0JCQlwdXRfcmVnKGNoaWxkLCBQVF9DQ1MsIHRtcCk7Ci0KLQkJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQotCQkJCWJyZWFrOwotCi0JCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKLQotCQkJLyogVE9ETzogc2V0IHNvbWUgY2xldmVyIGJyZWFrcG9pbnQgbWVjaGFuaXNtLi4uICovCi0KLQkJCWNoaWxkLT5leGl0X2NvZGUgPSBkYXRhOwotCQkJd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKLQkJCXJldCA9IDA7Ci0JCQlicmVhazsKLQotCQl9Ci0KIAkJLyogR2V0IGFsbCBHUCByZWdpc3RlcnMgZnJvbSB0aGUgY2hpbGQuICovCiAJCWNhc2UgUFRSQUNFX0dFVFJFR1M6IHsKIAkJCWludCBpOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvYXJiaXRlci5jIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21hY2gtZnMvYXJiaXRlci5jCmluZGV4IDg0ZDMxYmQuLjgyZWYyOTMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tYWNoLWZzL2FyYml0ZXIuYworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvbWFjaC1mcy9hcmJpdGVyLmMKQEAgLTMzMiw3ICszMzIsNyBAQAogCWlmIChpZCA9PSAwKQogCQlpbnRyX21hc2suYnAwID0gcmVna19tYXJiX25vOwogCWVsc2UgaWYgKGlkID09IDEpCi0JCWludHJfbWFzay5icDIgPSByZWdrX21hcmJfbm87CisJCWludHJfbWFzay5icDEgPSByZWdrX21hcmJfbm87CiAJZWxzZSBpZiAoaWQgPT0gMikKIAkJaW50cl9tYXNrLmJwMiA9IHJlZ2tfbWFyYl9ubzsKIAllbHNlIGlmIChpZCA9PSAzKQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2FyY2gtdjMyL21tL21tdS5TIGIvYXJjaC9jcmlzL2FyY2gtdjMyL21tL21tdS5TCmluZGV4IDIyMzhkMTUuLmYxMjVkOTEgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9tbS9tbXUuUworKysgYi9hcmNoL2NyaXMvYXJjaC12MzIvbW0vbW11LlMKQEAgLTExNSw3ICsxMTUsNyBAQAogI2lmZGVmIENPTkZJR19TTVAKIAltb3ZlICAgICRzNywgJGFjcgk7IFBHRAogI2Vsc2UKLQltb3ZlLmQgIHBlcl9jcHVfX2N1cnJlbnRfcGdkLCAkYWNyIDsgUEdECisJbW92ZS5kICBjdXJyZW50X3BnZCwgJGFjciA7IFBHRAogI2VuZGlmCiAJOyBMb29rIHVwIFBNRCBpbiBQR0QKIAlsc3JxCTI0LCAkcjAJOyBHZXQgUE1EIGluZGV4IGludG8gUEdEIChiaXQgMjQtMzEpCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIvbW0vdGxiLmMgYi9hcmNoL2NyaXMvYXJjaC12MzIvbW0vdGxiLmMKaW5kZXggNjc3OWJjYi4uYzAzMGQwMiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2FyY2gtdjMyL21tL3RsYi5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9tbS90bGIuYwpAQCAtMTg5LDcgKzE4OSw3IEBACiAJCXNwaW5fdW5sb2NrKCZtbXVfY29udGV4dF9sb2NrKTsKIAogCQkvKgotCQkgKiBSZW1lbWJlciB0aGUgcGdkIGZvciB0aGUgZmF1bHQgaGFuZGxlcnMuIEtlZXAgYSBzZXBlcmF0ZQorCQkgKiBSZW1lbWJlciB0aGUgcGdkIGZvciB0aGUgZmF1bHQgaGFuZGxlcnMuIEtlZXAgYSBzZXBhcmF0ZQogCQkgKiBjb3B5IG9mIGl0IGJlY2F1c2UgY3VycmVudCBhbmQgYWN0aXZlX21tIG1pZ2h0IGJlIGludmFsaWQKIAkJICogYXQgcG9pbnRzIHdoZXJlICogdGhlcmUncyBzdGlsbCBhIG5lZWQgdG8gZGVyZWZlciB0aGUgcGdkLgogCQkgKi8KZGlmZiAtLWdpdCBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvcHRyYWNlLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hcmNoLXYzMi9hcmNoL3B0cmFjZS5oCmluZGV4IDQxZjRlODYuLmZmY2E4ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FyY2gtdjMyL2FyY2gvcHRyYWNlLmgKKysrIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXJjaC12MzIvYXJjaC9wdHJhY2UuaApAQCAtMTA4LDYgKzEwOCw3IEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKKyNkZWZpbmUgYXJjaF9oYXNfc2luZ2xlX3N0ZXAoKSAoMSkKICNkZWZpbmUgdXNlcl9tb2RlKHJlZ3MpICgoKHJlZ3MpLT5jY3MgJiAoMSA8PCAoVV9DQ1NfQklUTlIgKyBDQ1NfU0hJRlQpKSkgIT0gMCkKICNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAoKHJlZ3MpLT5lcnApCiBleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggNzMwY2U0MC4uOWYxY2Q1NiAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3BjaS5oCisrKyBiL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS9wY2kuaApAQCAtNDQsMTQgKzQ0LDYgQEAKICAqLwogI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTCSgxKQogCi0vKiBwY2lfdW5tYXBfe3BhZ2Usc2luZ2xlfSBpcyBhIG5vcCBzby4uLiAqLwotI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKEFERFJfTkFNRSkKLSNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKQotI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJCSgwKQotI2RlZmluZSBwY2lfdW5tYXBfYWRkcl9zZXQoUFRSLCBBRERSX05BTUUsIFZBTCkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuKFBUUiwgTEVOX05BTUUpCQkoMCkKLSNkZWZpbmUgcGNpX3VubWFwX2xlbl9zZXQoUFRSLCBMRU5fTkFNRSwgVkFMKQlkbyB7IH0gd2hpbGUgKDApCi0KICNkZWZpbmUgSEFWRV9QQ0lfTU1BUAogZXh0ZXJuIGludCBwY2lfbW1hcF9wYWdlX3JhbmdlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJICAgICAgIGVudW0gcGNpX21tYXBfc3RhdGUgbW1hcF9zdGF0ZSwgaW50IHdyaXRlX2NvbWJpbmUpOwpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9jcmlzL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGMxNzA3OTMuLmY2ZmFkODMgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL2NyaXMvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTM1Miw2ICszNTIsNyBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfSVBDCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTApAQCAtMzY0LDYgKzM2NSw3IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9NTUFQCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMva2VybmVsL3N5c19jcmlzLmMgYi9hcmNoL2NyaXMva2VybmVsL3N5c19jcmlzLmMKaW5kZXggYzJiYmIxYS4uN2FhMDM2ZSAxMDA2NDQKLS0tIGEvYXJjaC9jcmlzL2tlcm5lbC9zeXNfY3Jpcy5jCisrKyBiL2FyY2gvY3Jpcy9rZXJuZWwvc3lzX2NyaXMuYwpAQCAtMjYsMjQgKzI2LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CiAKLWFzbWxpbmthZ2UgdW5zaWduZWQgbG9uZyBvbGRfbW1hcCh1bnNpZ25lZCBsb25nIF9fdXNlciAqYXJncykKLXsgICAgICAgIAotCXVuc2lnbmVkIGxvbmcgYnVmZmVyWzZdOwotCWludCBlcnIgPSAtRUZBVUxUOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZidWZmZXIsIGFyZ3MsIHNpemVvZihidWZmZXIpKSkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSAtRUlOVkFMOwotCWlmIChidWZmZXJbNV0gJiB+UEFHRV9NQVNLKSAvKiB2ZXJpZnkgdGhhdCBvZmZzZXQgaXMgb24gcGFnZSBib3VuZGFyeSAqLwotCQlnb3RvIG91dDsKLQotCWVyciA9IHN5c19tbWFwX3Bnb2ZmKGJ1ZmZlclswXSwgYnVmZmVyWzFdLCBidWZmZXJbMl0sIGJ1ZmZlclszXSwKLSAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyWzRdLCBidWZmZXJbNV0gPj4gUEFHRV9TSElGVCk7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQogYXNtbGlua2FnZSBsb25nCiBzeXNfbW1hcDIodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwcm90LAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgcGdvZmYpCkBAIC01MSw4MSArMzMsMyBAQAogCS8qIGJ1Zyg/KTogOEtiIHBhZ2VzIGhlcmUgKi8KICAgICAgICAgcmV0dXJuIHN5c19tbWFwX3Bnb2ZmKGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsIGZkLCBwZ29mZik7CiB9Ci0KLS8qCi0gKiBzeXNfaXBjKCkgaXMgdGhlIGRlLW11bHRpcGxleGVyIGZvciB0aGUgU3lzViBJUEMgY2FsbHMuLgotICoKLSAqIFRoaXMgaXMgcmVhbGx5IGhvcnJpYmx5IHVnbHkuIChzYW1lIGFzIGFyY2gvaTM4NikKLSAqLwotCi1hc21saW5rYWdlIGludCBzeXNfaXBjICh1aW50IGNhbGwsIGludCBmaXJzdCwgaW50IHNlY29uZCwKLQkJCWludCB0aGlyZCwgdm9pZCBfX3VzZXIgKnB0ciwgbG9uZyBmaWZ0aCkKLXsKLQlpbnQgdmVyc2lvbiwgcmV0OwotCi0JdmVyc2lvbiA9IGNhbGwgPj4gMTY7IC8qIGhhY2sgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLQljYWxsICY9IDB4ZmZmZjsKLQotCXN3aXRjaCAoY2FsbCkgewotCWNhc2UgU0VNT1A6Ci0JCXJldHVybiBzeXNfc2VtdGltZWRvcCAoZmlyc3QsIChzdHJ1Y3Qgc2VtYnVmIF9fdXNlciAqKXB0ciwgc2Vjb25kLCBOVUxMKTsKLQljYXNlIFNFTVRJTUVET1A6Ci0JCXJldHVybiBzeXNfc2VtdGltZWRvcChmaXJzdCwgKHN0cnVjdCBzZW1idWYgX191c2VyICopcHRyLCBzZWNvbmQsCi0JCQkJCShjb25zdCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopZmlmdGgpOwotCi0JY2FzZSBTRU1HRVQ6Ci0JCXJldHVybiBzeXNfc2VtZ2V0IChmaXJzdCwgc2Vjb25kLCB0aGlyZCk7Ci0JY2FzZSBTRU1DVEw6IHsKLQkJdW5pb24gc2VtdW4gZm91cnRoOwotCQlpZiAoIXB0cikKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoZ2V0X3VzZXIoZm91cnRoLl9fcGFkLCAodm9pZCAqIF9fdXNlciAqKSBwdHIpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiBzeXNfc2VtY3RsIChmaXJzdCwgc2Vjb25kLCB0aGlyZCwgZm91cnRoKTsKLQl9Ci0KLQljYXNlIE1TR1NORDoKLQkJcmV0dXJuIHN5c19tc2dzbmQgKGZpcnN0LCAoc3RydWN0IG1zZ2J1ZiBfX3VzZXIgKikgcHRyLCAKLQkJCQkgICBzZWNvbmQsIHRoaXJkKTsKLQljYXNlIE1TR1JDVjoKLQkJc3dpdGNoICh2ZXJzaW9uKSB7Ci0JCWNhc2UgMDogewotCQkJc3RydWN0IGlwY19rbHVkZ2UgdG1wOwotCQkJaWYgKCFwdHIpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkKLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmdG1wLAotCQkJCQkgICAoc3RydWN0IGlwY19rbHVkZ2UgX191c2VyICopIHB0ciwgCi0JCQkJCSAgIHNpemVvZiAodG1wKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gc3lzX21zZ3JjdiAoZmlyc3QsIHRtcC5tc2dwLCBzZWNvbmQsCi0JCQkJCSAgIHRtcC5tc2d0eXAsIHRoaXJkKTsKLQkJfQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIHN5c19tc2dyY3YgKGZpcnN0LAotCQkJCQkgICAoc3RydWN0IG1zZ2J1ZiBfX3VzZXIgKikgcHRyLAotCQkJCQkgICBzZWNvbmQsIGZpZnRoLCB0aGlyZCk7Ci0JCX0KLQljYXNlIE1TR0dFVDoKLQkJcmV0dXJuIHN5c19tc2dnZXQgKChrZXlfdCkgZmlyc3QsIHNlY29uZCk7Ci0JY2FzZSBNU0dDVEw6Ci0JCXJldHVybiBzeXNfbXNnY3RsIChmaXJzdCwgc2Vjb25kLCAoc3RydWN0IG1zcWlkX2RzIF9fdXNlciAqKSBwdHIpOwotCi0JY2FzZSBTSE1BVDogewotICAgICAgICAgICAgICAgIHVsb25nIHJhZGRyOwotICAgICAgICAgICAgICAgIHJldCA9IGRvX3NobWF0IChmaXJzdCwgKGNoYXIgX191c2VyICopIHB0ciwgc2Vjb25kLCAmcmFkZHIpOwotICAgICAgICAgICAgICAgIGlmIChyZXQpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0OwotICAgICAgICAgICAgICAgIHJldHVybiBwdXRfdXNlciAocmFkZHIsICh1bG9uZyBfX3VzZXIgKikgdGhpcmQpOwotICAgICAgICB9Ci0JY2FzZSBTSE1EVDogCi0JCXJldHVybiBzeXNfc2htZHQgKChjaGFyIF9fdXNlciAqKXB0cik7Ci0JY2FzZSBTSE1HRVQ6Ci0JCXJldHVybiBzeXNfc2htZ2V0IChmaXJzdCwgc2Vjb25kLCB0aGlyZCk7Ci0JY2FzZSBTSE1DVEw6Ci0JCXJldHVybiBzeXNfc2htY3RsIChmaXJzdCwgc2Vjb25kLAotCQkJCSAgIChzdHJ1Y3Qgc2htaWRfZHMgX191c2VyICopIHB0cik7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9TWVM7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC90aW1lLmMgYi9hcmNoL2NyaXMva2VybmVsL3RpbWUuYwppbmRleCAwNzRmZTdkLi5hMDVkZDMxIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2NyaXMva2VybmVsL3RpbWUuYwpAQCAtNDIsNzUgKzQyLDExIEBACiBleHRlcm4gdW5zaWduZWQgbG9uZyBkb19zbG93X2dldHRpbWVvZmZzZXQodm9pZCk7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyAoKmRvX2dldHRpbWVvZmZzZXQpKHZvaWQpID0gZG9fc2xvd19nZXR0aW1lb2Zmc2V0OwogCi0vKgotICogVGhpcyB2ZXJzaW9uIG9mIGdldHRpbWVvZmRheSBoYXMgbmVhciBtaWNyb3NlY29uZCByZXNvbHV0aW9uLgotICoKLSAqIE5vdGU6IERpdmlzaW9uIGlzIHF1aXRlIHNsb3cgb24gQ1JJUyBhbmQgZG9fZ2V0dGltZW9mZGF5IGlzIGNhbGxlZAotICogICAgICAgcmF0aGVyIG9mdGVuLiBNYXliZSB3ZSBzaG91bGQgZG8gc29tZSBraW5kIG9mIGFwcHJveGltYXRpb24gaGVyZQotICogICAgICAgKGEgbmFpdmUgYXBwcm94aW1hdGlvbiB3b3VsZCBiZSB0byBkaXZpZGUgYnkgMTAyNCkuCi0gKi8KLXZvaWQgZG9fZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dikKK3UzMiBhcmNoX2dldHRpbWVvZmZzZXQodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNpZ25lZCBsb25nIHVzZWMsIHNlYzsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JdXNlYyA9IGRvX2dldHRpbWVvZmZzZXQoKTsKLQotICAgICAgICAvKgotCSAqIElmIHRpbWVfYWRqdXN0IGlzIG5lZ2F0aXZlIHRoZW4gTlRQIGlzIHNsb3dpbmcgdGhlIGNsb2NrCi0JICogc28gbWFrZSBzdXJlIG5vdCB0byBnbyBpbnRvIG5leHQgcG9zc2libGUgaW50ZXJ2YWwuCi0JICogQmV0dGVyIHRvIGxvc2Ugc29tZSBhY2N1cmFjeSB0aGFuIGhhdmUgdGltZSBnbyBiYWNrd2FyZHMuLgotCSAqLwotCWlmICh1bmxpa2VseSh0aW1lX2FkanVzdCA8IDApICYmIHVzZWMgPiB0aWNrYWRqKQotCQl1c2VjID0gdGlja2FkajsKLQotCXNlYyA9IHh0aW1lLnR2X3NlYzsKLQl1c2VjICs9IHh0aW1lLnR2X25zZWMgLyAxMDAwOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXdoaWxlICh1c2VjID49IDEwMDAwMDApIHsKLQkJdXNlYyAtPSAxMDAwMDAwOwotCQlzZWMrKzsKLQl9Ci0KLQl0di0+dHZfc2VjID0gc2VjOwotCXR2LT50dl91c2VjID0gdXNlYzsKKwlyZXR1cm4gZG9fZ2V0dGltZW9mZnNldCgpICogMTAwMDsKIH0KIAotRVhQT1JUX1NZTUJPTChkb19nZXR0aW1lb2ZkYXkpOwotCi1pbnQgZG9fc2V0dGltZW9mZGF5KHN0cnVjdCB0aW1lc3BlYyAqdHYpCi17Ci0JdGltZV90IHd0bV9zZWMsIHNlYyA9IHR2LT50dl9zZWM7Ci0JbG9uZyB3dG1fbnNlYywgbnNlYyA9IHR2LT50dl9uc2VjOwotCi0JaWYgKCh1bnNpZ25lZCBsb25nKXR2LT50dl9uc2VjID49IE5TRUNfUEVSX1NFQykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl3cml0ZV9zZXFsb2NrX2lycSgmeHRpbWVfbG9jayk7Ci0JLyoKLQkgKiBUaGlzIGlzIHJldm9sdGluZy4gV2UgbmVlZCB0byBzZXQgInh0aW1lIiBjb3JyZWN0bHkuIEhvd2V2ZXIsIHRoZQotCSAqIHZhbHVlIGluIHRoaXMgbG9jYXRpb24gaXMgdGhlIHZhbHVlIGF0IHRoZSBtb3N0IHJlY2VudCB1cGRhdGUgb2YKLQkgKiB3YWxsIHRpbWUuICBEaXNjb3ZlciB3aGF0IGNvcnJlY3Rpb24gZ2V0dGltZW9mZGF5KCkgd291bGQgaGF2ZQotCSAqIG1hZGUsIGFuZCB0aGVuIHVuZG8gaXQhCi0JICovCi0JbnNlYyAtPSBkb19nZXR0aW1lb2Zmc2V0KCkgKiBOU0VDX1BFUl9VU0VDOwotCi0Jd3RtX3NlYyAgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWMgKyAoeHRpbWUudHZfc2VjIC0gc2VjKTsKLQl3dG1fbnNlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWMgKyAoeHRpbWUudHZfbnNlYyAtIG5zZWMpOwotCi0Jc2V0X25vcm1hbGl6ZWRfdGltZXNwZWMoJnh0aW1lLCBzZWMsIG5zZWMpOwotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywgd3RtX3NlYywgd3RtX25zZWMpOwotCi0JbnRwX2NsZWFyKCk7Ci0Jd3JpdGVfc2VxdW5sb2NrX2lycSgmeHRpbWVfbG9jayk7Ci0JY2xvY2tfd2FzX3NldCgpOwotCXJldHVybiAwOwotfQotCi1FWFBPUlRfU1lNQk9MKGRvX3NldHRpbWVvZmRheSk7Ci0KLQogLyoKICAqIEJVRzogVGhpcyByb3V0aW5lIGRvZXMgbm90IGhhbmRsZSBob3VyIG92ZXJmbG93IHByb3Blcmx5OyBpdCBqdXN0CiAgKiAgICAgIHNldHMgdGhlIG1pbnV0ZXMuIFVzdWFsbHkgeW91J2xsIG9ubHkgbm90aWNlIHRoYXQgYWZ0ZXIgcmVib290IQpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggYjI4OTg4Ny4uNmFmNWQ4MyAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL2Zydi9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC03LDYgKzcsMTEgQEAKICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAorLyoKKyAqIFNlZSBEb2N1bWVudGF0aW9uL0RNQS1BUEkudHh0IGZvciB0aGUgZGVzY3JpcHRpb24gb2YgaG93IHRoZQorICogZm9sbG93aW5nIERNQSBBUEkgc2hvdWxkIHdvcmsuCisgKi8KKwogI2RlZmluZSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZCwgcywgaCwgZikgZG1hX2FsbG9jX2NvaGVyZW50KGQsIHMsIGgsIGYpCiAjZGVmaW5lIGRtYV9mcmVlX25vbmNvaGVyZW50KGQsIHMsIHYsIGgpIGRtYV9mcmVlX2NvaGVyZW50KGQsIHMsIHYsIGgpCiAKQEAgLTE2LDI0ICsyMSw5IEBACiB2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwgZ2ZwX3QgZ2ZwKTsKIHZvaWQgZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7CiAKLS8qCi0gKiBNYXAgYSBzaW5nbGUgYnVmZmVyIG9mIHRoZSBpbmRpY2F0ZWQgc2l6ZSBmb3IgRE1BIGluIHN0cmVhbWluZyBtb2RlLgotICogVGhlIDMyLWJpdCBidXMgYWRkcmVzcyB0byB1c2UgaXMgcmV0dXJuZWQuCi0gKgotICogT25jZSB0aGUgZGV2aWNlIGlzIGdpdmVuIHRoZSBkbWEgYWRkcmVzcywgdGhlIGRldmljZSBvd25zIHRoaXMgbWVtb3J5Ci0gKiB1bnRpbCBlaXRoZXIgcGNpX3VubWFwX3NpbmdsZSBvciBwY2lfZG1hX3N5bmNfc2luZ2xlIGlzIHBlcmZvcm1lZC4KLSAqLwogZXh0ZXJuIGRtYV9hZGRyX3QgZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpwdHIsIHNpemVfdCBzaXplLAogCQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pOwogCi0vKgotICogVW5tYXAgYSBzaW5nbGUgc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9uLiAgVGhlIGRtYV9hZGRyIGFuZCBzaXplCi0gKiBtdXN0IG1hdGNoIHdoYXQgd2FzIHByb3ZpZGVkIGZvciBpbiBhIHByZXZpb3VzIHBjaV9tYXBfc2luZ2xlIGNhbGwuICBBbGwKLSAqIG90aGVyIHVzYWdlcyBhcmUgdW5kZWZpbmVkLgotICoKLSAqIEFmdGVyIHRoaXMgY2FsbCwgcmVhZHMgYnkgdGhlIGNwdSB0byB0aGUgYnVmZmVyIGFyZSBndWFyZW50ZWVkIHRvIHNlZQotICogd2hhdGV2ZXIgdGhlIGRldmljZSB3cm90ZSB0aGVyZS4KLSAqLwogc3RhdGljIGlubGluZQogdm9pZCBkbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUsCiAJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKQEAgLTQxLDMwICszMSw5IEBACiAJQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CiB9CiAKLS8qCi0gKiBNYXAgYSBzZXQgb2YgYnVmZmVycyBkZXNjcmliZWQgYnkgc2NhdHRlcmxpc3QgaW4gc3RyZWFtaW5nCi0gKiBtb2RlIGZvciBETUEuICBUaGlzIGlzIHRoZSBzY2F0aGVyLWdhdGhlciB2ZXJzaW9uIG9mIHRoZQotICogYWJvdmUgcGNpX21hcF9zaW5nbGUgaW50ZXJmYWNlLiAgSGVyZSB0aGUgc2NhdHRlciBnYXRoZXIgbGlzdAotICogZWxlbWVudHMgYXJlIGVhY2ggdGFnZ2VkIHdpdGggdGhlIGFwcHJvcHJpYXRlIGRtYSBhZGRyZXNzCi0gKiBhbmQgbGVuZ3RoLiAgVGhleSBhcmUgb2J0YWluZWQgdmlhIHNnX2RtYV97YWRkcmVzcyxsZW5ndGh9KFNHKS4KLSAqCi0gKiBOT1RFOiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgYWJsZSB0byB1c2UgYSBzbWFsbGVyIG51bWJlciBvZgotICogICAgICAgRE1BIGFkZHJlc3MvbGVuZ3RoIHBhaXJzIHRoYW4gdGhlcmUgYXJlIFNHIHRhYmxlIGVsZW1lbnRzLgotICogICAgICAgKGZvciBleGFtcGxlIHZpYSB2aXJ0dWFsIG1hcHBpbmcgY2FwYWJpbGl0aWVzKQotICogICAgICAgVGhlIHJvdXRpbmUgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGFkZHIvbGVuZ3RoIHBhaXJzIGFjdHVhbGx5Ci0gKiAgICAgICB1c2VkLCBhdCBtb3N0IG5lbnRzLgotICoKLSAqIERldmljZSBvd25lcnNoaXAgaXNzdWVzIGFzIG1lbnRpb25lZCBhYm92ZSBmb3IgcGNpX21hcF9zaW5nbGUgYXJlCi0gKiB0aGUgc2FtZSBoZXJlLgotICovCiBleHRlcm4gaW50IGRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCiAJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7CiAKLS8qCi0gKiBVbm1hcCBhIHNldCBvZiBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb25zLgotICogQWdhaW4sIGNwdSByZWFkIHJ1bGVzIGNvbmNlcm5pbmcgY2FsbHMgaGVyZSBhcmUgdGhlIHNhbWUgYXMgZm9yCi0gKiBwY2lfdW5tYXBfc2luZ2xlKCkgYWJvdmUuCi0gKi8KIHN0YXRpYyBpbmxpbmUKIHZvaWQgZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5od2VudHJpZXMsCiAJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9wY2kuaCBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3BjaS5oCmluZGV4IDQ5MmI1YzQuLjBkNTk5NzkgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3BjaS5oCisrKyBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3BjaS5oCkBAIC00MywxNCArNDMsNiBAQAogLyogUmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgUENJIGNvbnRyb2xsZXIgZm9yIGRldmljZSBQREVWLiAqLwogI2RlZmluZSBwY2lfY29udHJvbGxlcl9udW0oUERFVikJKDApCiAKLS8qIHBjaV91bm1hcF97cGFnZSxzaW5nbGV9IGlzIGEgbm9wIHNvLi4uICovCi0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0FERFIoQUREUl9OQU1FKQotI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9MRU4oTEVOX05BTUUpCi0jZGVmaW5lIHBjaV91bm1hcF9hZGRyKFBUUiwgQUREUl9OQU1FKQkJKDApCi0jZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHBjaV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkJCSgwKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCWRvIHsgfSB3aGlsZSAoMCkKLQogI2lmZGVmIENPTkZJR19QQ0kKIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZG1hX2J1cnN0X2FkdmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkJZW51bSBwY2lfZG1hX2J1cnN0X3N0cmF0ZWd5ICpzdHJhdCwKQEAgLTY4LDQxICs2MCw0IEBACiAjZGVmaW5lIFBDSUJJT1NfTUlOX0lPCQkweDEwMAogI2RlZmluZSBQQ0lCSU9TX01JTl9NRU0JCTB4MDAwMTAwMDAKIAotLyogTWFrZSBwaHlzaWNhbCBtZW1vcnkgY29uc2lzdGVudCBmb3IgYSBzaW5nbGUKLSAqIHN0cmVhbWluZyBtb2RlIERNQSB0cmFuc2xhdGlvbiBhZnRlciBhIHRyYW5zZmVyLgotICoKLSAqIElmIHlvdSBwZXJmb3JtIGEgcGNpX21hcF9zaW5nbGUoKSBidXQgd2lzaCB0byBpbnRlcnJvZ2F0ZSB0aGUKLSAqIGJ1ZmZlciB1c2luZyB0aGUgY3B1LCB5ZXQgZG8gbm90IHdpc2ggdG8gdGVhcmRvd24gdGhlIFBDSSBkbWEKLSAqIG1hcHBpbmcsIHlvdSBtdXN0IGNhbGwgdGhpcyBmdW5jdGlvbiBiZWZvcmUgZG9pbmcgc28uICBBdCB0aGUKLSAqIG5leHQgcG9pbnQgeW91IGdpdmUgdGhlIFBDSSBkbWEgYWRkcmVzcyBiYWNrIHRvIHRoZSBjYXJkLCB0aGUKLSAqIGRldmljZSBhZ2FpbiBvd25zIHRoZSBidWZmZXIuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZG1hX3N5bmNfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpod2RldiwKLQkJCQkgICAgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJCSAgICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKLXsKLQlCVUdfT04oZGlyZWN0aW9uID09IFBDSV9ETUFfTk9ORSk7Ci0KLQlmcnZfY2FjaGVfd2JhY2tfaW52KCh1bnNpZ25lZCBsb25nKWJ1c190b192aXJ0KGRtYV9oYW5kbGUpLAotCQkJICAgICh1bnNpZ25lZCBsb25nKWJ1c190b192aXJ0KGRtYV9oYW5kbGUpICsgc2l6ZSk7Ci19Ci0KLS8qIE1ha2UgcGh5c2ljYWwgbWVtb3J5IGNvbnNpc3RlbnQgZm9yIGEgc2V0IG9mIHN0cmVhbWluZwotICogbW9kZSBETUEgdHJhbnNsYXRpb25zIGFmdGVyIGEgdHJhbnNmZXIuCi0gKgotICogVGhlIHNhbWUgYXMgcGNpX2RtYV9zeW5jX3NpbmdsZSBidXQgZm9yIGEgc2NhdHRlci1nYXRoZXIgbGlzdCwKLSAqIHNhbWUgcnVsZXMgYW5kIHVzYWdlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgcGNpX2RtYV9zeW5jX3NnKHN0cnVjdCBwY2lfZGV2ICpod2RldiwKLQkJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCSAgIGludCBuZWxlbXMsIGludCBkaXJlY3Rpb24pCi17Ci0JaW50IGk7Ci0JQlVHX09OKGRpcmVjdGlvbiA9PSBQQ0lfRE1BX05PTkUpOwotCi0JZm9yIChpID0gMDsgaSA8IG5lbGVtczsgaSsrKQotCQlmcnZfY2FjaGVfd2JhY2tfaW52KHNnX2RtYV9hZGRyZXNzKCZzZ1tpXSksCi0JCQkJICAgIHNnX2RtYV9hZGRyZXNzKCZzZ1tpXSkrc2dfZG1hX2xlbigmc2dbaV0pKTsKLX0KLQogI2VuZGlmIC8qIF9BU01fRlJWX1BDSV9IICovCmRpZmYgLS1naXQgYS9hcmNoL2Zydi9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IGE1NGI1MzUuLjZiZmFkNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC04NCw4ICs4NCw2IEBACiAjZGVmaW5lIHRhc2tfcHRfcmVncyh0YXNrKSAoKHRhc2spLT50aHJlYWQuZnJhbWUwKQogCiAjZGVmaW5lIGFyY2hfaGFzX3NpbmdsZV9zdGVwKCkJKDEpCi1leHRlcm4gdm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7Ci1leHRlcm4gdm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICopOwogCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggYmU2ZWYwZi4uYjI4ZGE0OSAxMDA2NDQKLS0tIGEvYXJjaC9mcnYvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9mcnYvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTM1NCw2ICszNTQsNyBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCiAvKiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRSAqLworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfSVBDCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQogLyogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sgKi8KIC8qICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9mcnYva2VybmVsL3N5c19mcnYuYyBiL2FyY2gvZnJ2L2tlcm5lbC9zeXNfZnJ2LmMKaW5kZXggMWQzZDRjOS4uOWM0OTgwOCAxMDA2NDQKLS0tIGEvYXJjaC9mcnYva2VybmVsL3N5c19mcnYuYworKysgYi9hcmNoL2Zydi9rZXJuZWwvc3lzX2Zydi5jCkBAIC00Miw5MiArNDIsMyBAQAogCXJldHVybiBzeXNfbW1hcF9wZ29mZihhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBmZCwKIAkJCSAgICAgIHBnb2ZmID4+IChQQUdFX1NISUZUIC0gMTIpKTsKIH0KLQotLyoKLSAqIHN5c19pcGMoKSBpcyB0aGUgZGUtbXVsdGlwbGV4ZXIgZm9yIHRoZSBTeXNWIElQQyBjYWxscy4uCi0gKgotICogVGhpcyBpcyByZWFsbHkgaG9ycmlibHkgdWdseS4KLSAqLwotYXNtbGlua2FnZSBsb25nIHN5c19pcGModW5zaWduZWQgbG9uZyBjYWxsLAotCQkJdW5zaWduZWQgbG9uZyBmaXJzdCwKLQkJCXVuc2lnbmVkIGxvbmcgc2Vjb25kLAotCQkJdW5zaWduZWQgbG9uZyB0aGlyZCwKLQkJCXZvaWQgX191c2VyICpwdHIsCi0JCQl1bnNpZ25lZCBsb25nIGZpZnRoKQotewotCWludCB2ZXJzaW9uLCByZXQ7Ci0KLQl2ZXJzaW9uID0gY2FsbCA+PiAxNjsgLyogaGFjayBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwotCWNhbGwgJj0gMHhmZmZmOwotCi0Jc3dpdGNoIChjYWxsKSB7Ci0JY2FzZSBTRU1PUDoKLQkJcmV0dXJuIHN5c19zZW10aW1lZG9wKGZpcnN0LCAoc3RydWN0IHNlbWJ1ZiBfX3VzZXIgKilwdHIsIHNlY29uZCwgTlVMTCk7Ci0JY2FzZSBTRU1USU1FRE9QOgotCQlyZXR1cm4gc3lzX3NlbXRpbWVkb3AoZmlyc3QsIChzdHJ1Y3Qgc2VtYnVmIF9fdXNlciAqKXB0ciwgc2Vjb25kLAotCQkJCSAgICAgIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopZmlmdGgpOwotCi0JY2FzZSBTRU1HRVQ6Ci0JCXJldHVybiBzeXNfc2VtZ2V0IChmaXJzdCwgc2Vjb25kLCB0aGlyZCk7Ci0JY2FzZSBTRU1DVEw6IHsKLQkJdW5pb24gc2VtdW4gZm91cnRoOwotCQlpZiAoIXB0cikKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoZ2V0X3VzZXIoZm91cnRoLl9fcGFkLCAodm9pZCAqIF9fdXNlciAqKSBwdHIpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiBzeXNfc2VtY3RsIChmaXJzdCwgc2Vjb25kLCB0aGlyZCwgZm91cnRoKTsKLQl9Ci0KLQljYXNlIE1TR1NORDoKLQkJcmV0dXJuIHN5c19tc2dzbmQgKGZpcnN0LCAoc3RydWN0IG1zZ2J1ZiBfX3VzZXIgKikgcHRyLAotCQkJCSAgIHNlY29uZCwgdGhpcmQpOwotCWNhc2UgTVNHUkNWOgotCQlzd2l0Y2ggKHZlcnNpb24pIHsKLQkJY2FzZSAwOiB7Ci0JCQlzdHJ1Y3QgaXBjX2tsdWRnZSB0bXA7Ci0JCQlpZiAoIXB0cikKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsCi0JCQkJCSAgIChzdHJ1Y3QgaXBjX2tsdWRnZSBfX3VzZXIgKikgcHRyLAotCQkJCQkgICBzaXplb2YgKHRtcCkpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcmV0dXJuIHN5c19tc2dyY3YgKGZpcnN0LCB0bXAubXNncCwgc2Vjb25kLAotCQkJCQkgICB0bXAubXNndHlwLCB0aGlyZCk7Ci0JCX0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiBzeXNfbXNncmN2IChmaXJzdCwKLQkJCQkJICAgKHN0cnVjdCBtc2didWYgX191c2VyICopIHB0ciwKLQkJCQkJICAgc2Vjb25kLCBmaWZ0aCwgdGhpcmQpOwotCQl9Ci0JY2FzZSBNU0dHRVQ6Ci0JCXJldHVybiBzeXNfbXNnZ2V0ICgoa2V5X3QpIGZpcnN0LCBzZWNvbmQpOwotCWNhc2UgTVNHQ1RMOgotCQlyZXR1cm4gc3lzX21zZ2N0bCAoZmlyc3QsIHNlY29uZCwgKHN0cnVjdCBtc3FpZF9kcyBfX3VzZXIgKikgcHRyKTsKLQotCWNhc2UgU0hNQVQ6Ci0JCXN3aXRjaCAodmVyc2lvbikgewotCQlkZWZhdWx0OiB7Ci0JCQl1bG9uZyByYWRkcjsKLQkJCXJldCA9IGRvX3NobWF0IChmaXJzdCwgKGNoYXIgX191c2VyICopIHB0ciwgc2Vjb25kLCAmcmFkZHIpOwotCQkJaWYgKHJldCkKLQkJCQlyZXR1cm4gcmV0OwotCQkJcmV0dXJuIHB1dF91c2VyIChyYWRkciwgKHVsb25nIF9fdXNlciAqKSB0aGlyZCk7Ci0JCX0KLQkJY2FzZSAxOgkvKiBpQkNTMiBlbXVsYXRvciBlbnRyeSBwb2ludCAqLwotCQkJaWYgKCFzZWdtZW50X2VxKGdldF9mcygpLCBnZXRfZHMoKSkpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkvKiBUaGUgIih1bG9uZyAqKSB0aGlyZCIgaXMgdmFsaWQgX29ubHlfIGJlY2F1c2Ugb2YgdGhlIGtlcm5lbCBzZWdtZW50IHRoaW5nICovCi0JCQlyZXR1cm4gZG9fc2htYXQgKGZpcnN0LCAoY2hhciBfX3VzZXIgKikgcHRyLCBzZWNvbmQsICh1bG9uZyAqKSB0aGlyZCk7Ci0JCX0KLQljYXNlIFNITURUOgotCQlyZXR1cm4gc3lzX3NobWR0ICgoY2hhciBfX3VzZXIgKilwdHIpOwotCWNhc2UgU0hNR0VUOgotCQlyZXR1cm4gc3lzX3NobWdldCAoZmlyc3QsIHNlY29uZCwgdGhpcmQpOwotCWNhc2UgU0hNQ1RMOgotCQlyZXR1cm4gc3lzX3NobWN0bCAoZmlyc3QsIHNlY29uZCwKLQkJCQkgICAoc3RydWN0IHNobWlkX2RzIF9fdXNlciAqKSBwdHIpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PU1lTOwotCX0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZG1hLW5vbW11LmMgYi9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWRtYS1ub21tdS5jCmluZGV4IDRlMWJhMGIuLmU0Nzg1N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZG1hLW5vbW11LmMKKysrIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1kbWEtbm9tbXUuYwpAQCAtMTA2LDEzICsxMDYsNiBAQAogCiBFWFBPUlRfU1lNQk9MKGRtYV9mcmVlX2NvaGVyZW50KTsKIAotLyoKLSAqIE1hcCBhIHNpbmdsZSBidWZmZXIgb2YgdGhlIGluZGljYXRlZCBzaXplIGZvciBETUEgaW4gc3RyZWFtaW5nIG1vZGUuCi0gKiBUaGUgMzItYml0IGJ1cyBhZGRyZXNzIHRvIHVzZSBpcyByZXR1cm5lZC4KLSAqCi0gKiBPbmNlIHRoZSBkZXZpY2UgaXMgZ2l2ZW4gdGhlIGRtYSBhZGRyZXNzLCB0aGUgZGV2aWNlIG93bnMgdGhpcyBtZW1vcnkKLSAqIHVudGlsIGVpdGhlciBkbWFfdW5tYXBfc2luZ2xlIG9yIHBjaV9kbWFfc3luY19zaW5nbGUgaXMgcGVyZm9ybWVkLgotICovCiBkbWFfYWRkcl90IGRtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKIAkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewpAQCAtMTI1LDIyICsxMTgsNiBAQAogCiBFWFBPUlRfU1lNQk9MKGRtYV9tYXBfc2luZ2xlKTsKIAotLyoKLSAqIE1hcCBhIHNldCBvZiBidWZmZXJzIGRlc2NyaWJlZCBieSBzY2F0dGVybGlzdCBpbiBzdHJlYW1pbmcKLSAqIG1vZGUgZm9yIERNQS4gIFRoaXMgaXMgdGhlIHNjYXRoZXItZ2F0aGVyIHZlcnNpb24gb2YgdGhlCi0gKiBhYm92ZSBkbWFfbWFwX3NpbmdsZSBpbnRlcmZhY2UuICBIZXJlIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0Ci0gKiBlbGVtZW50cyBhcmUgZWFjaCB0YWdnZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZG1hIGFkZHJlc3MKLSAqIGFuZCBsZW5ndGguICBUaGV5IGFyZSBvYnRhaW5lZCB2aWEgc2dfZG1hX3thZGRyZXNzLGxlbmd0aH0oU0cpLgotICoKLSAqIE5PVEU6IEFuIGltcGxlbWVudGF0aW9uIG1heSBiZSBhYmxlIHRvIHVzZSBhIHNtYWxsZXIgbnVtYmVyIG9mCi0gKiAgICAgICBETUEgYWRkcmVzcy9sZW5ndGggcGFpcnMgdGhhbiB0aGVyZSBhcmUgU0cgdGFibGUgZWxlbWVudHMuCi0gKiAgICAgICAoZm9yIGV4YW1wbGUgdmlhIHZpcnR1YWwgbWFwcGluZyBjYXBhYmlsaXRpZXMpCi0gKiAgICAgICBUaGUgcm91dGluZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWRkci9sZW5ndGggcGFpcnMgYWN0dWFsbHkKLSAqICAgICAgIHVzZWQsIGF0IG1vc3QgbmVudHMuCi0gKgotICogRGV2aWNlIG93bmVyc2hpcCBpc3N1ZXMgYXMgbWVudGlvbmVkIGFib3ZlIGZvciBkbWFfbWFwX3NpbmdsZSBhcmUKLSAqIHRoZSBzYW1lIGhlcmUuCi0gKi8KIGludCBkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAogCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CkBAIC0xNTcsMTMgKzEzNCw2IEBACiAKIEVYUE9SVF9TWU1CT0woZG1hX21hcF9zZyk7CiAKLS8qCi0gKiBNYXAgYSBzaW5nbGUgcGFnZSBvZiB0aGUgaW5kaWNhdGVkIHNpemUgZm9yIERNQSBpbiBzdHJlYW1pbmcgbW9kZS4KLSAqIFRoZSAzMi1iaXQgYnVzIGFkZHJlc3MgdG8gdXNlIGlzIHJldHVybmVkLgotICoKLSAqIERldmljZSBvd25lcnNoaXAgaXNzdWVzIGFzIG1lbnRpb25lZCBhYm92ZSBmb3IgZG1hX21hcF9zaW5nbGUgYXJlCi0gKiB0aGUgc2FtZSBoZXJlLgotICovCiBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKIAkJCXNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CmRpZmYgLS1naXQgYS9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWRtYS5jIGIvYXJjaC9mcnYvbWI5MzA5MC1tYjAwL3BjaS1kbWEuYwppbmRleCA0NTk1NGYwLi4yYzkxMmU4IDEwMDY0NAotLS0gYS9hcmNoL2Zydi9tYjkzMDkwLW1iMDAvcGNpLWRtYS5jCisrKyBiL2FyY2gvZnJ2L21iOTMwOTAtbWIwMC9wY2ktZG1hLmMKQEAgLTM4LDEzICszOCw2IEBACiAKIEVYUE9SVF9TWU1CT0woZG1hX2ZyZWVfY29oZXJlbnQpOwogCi0vKgotICogTWFwIGEgc2luZ2xlIGJ1ZmZlciBvZiB0aGUgaW5kaWNhdGVkIHNpemUgZm9yIERNQSBpbiBzdHJlYW1pbmcgbW9kZS4KLSAqIFRoZSAzMi1iaXQgYnVzIGFkZHJlc3MgdG8gdXNlIGlzIHJldHVybmVkLgotICoKLSAqIE9uY2UgdGhlIGRldmljZSBpcyBnaXZlbiB0aGUgZG1hIGFkZHJlc3MsIHRoZSBkZXZpY2Ugb3ducyB0aGlzIG1lbW9yeQotICogdW50aWwgZWl0aGVyIHBjaV91bm1hcF9zaW5nbGUgb3IgcGNpX2RtYV9zeW5jX3NpbmdsZSBpcyBwZXJmb3JtZWQuCi0gKi8KIGRtYV9hZGRyX3QgZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpwdHIsIHNpemVfdCBzaXplLAogCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CkBAIC01NywyMiArNTAsNiBAQAogCiBFWFBPUlRfU1lNQk9MKGRtYV9tYXBfc2luZ2xlKTsKIAotLyoKLSAqIE1hcCBhIHNldCBvZiBidWZmZXJzIGRlc2NyaWJlZCBieSBzY2F0dGVybGlzdCBpbiBzdHJlYW1pbmcKLSAqIG1vZGUgZm9yIERNQS4gIFRoaXMgaXMgdGhlIHNjYXRoZXItZ2F0aGVyIHZlcnNpb24gb2YgdGhlCi0gKiBhYm92ZSBkbWFfbWFwX3NpbmdsZSBpbnRlcmZhY2UuICBIZXJlIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0Ci0gKiBlbGVtZW50cyBhcmUgZWFjaCB0YWdnZWQgd2l0aCB0aGUgYXBwcm9wcmlhdGUgZG1hIGFkZHJlc3MKLSAqIGFuZCBsZW5ndGguICBUaGV5IGFyZSBvYnRhaW5lZCB2aWEgc2dfZG1hX3thZGRyZXNzLGxlbmd0aH0oU0cpLgotICoKLSAqIE5PVEU6IEFuIGltcGxlbWVudGF0aW9uIG1heSBiZSBhYmxlIHRvIHVzZSBhIHNtYWxsZXIgbnVtYmVyIG9mCi0gKiAgICAgICBETUEgYWRkcmVzcy9sZW5ndGggcGFpcnMgdGhhbiB0aGVyZSBhcmUgU0cgdGFibGUgZWxlbWVudHMuCi0gKiAgICAgICAoZm9yIGV4YW1wbGUgdmlhIHZpcnR1YWwgbWFwcGluZyBjYXBhYmlsaXRpZXMpCi0gKiAgICAgICBUaGUgcm91dGluZSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYWRkci9sZW5ndGggcGFpcnMgYWN0dWFsbHkKLSAqICAgICAgIHVzZWQsIGF0IG1vc3QgbmVudHMuCi0gKgotICogRGV2aWNlIG93bmVyc2hpcCBpc3N1ZXMgYXMgbWVudGlvbmVkIGFib3ZlIGZvciBkbWFfbWFwX3NpbmdsZSBhcmUKLSAqIHRoZSBzYW1lIGhlcmUuCi0gKi8KIGludCBkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAogCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7CkBAIC0xMDMsMTMgKzgwLDYgQEAKIAogRVhQT1JUX1NZTUJPTChkbWFfbWFwX3NnKTsKIAotLyoKLSAqIE1hcCBhIHNpbmdsZSBwYWdlIG9mIHRoZSBpbmRpY2F0ZWQgc2l6ZSBmb3IgRE1BIGluIHN0cmVhbWluZyBtb2RlLgotICogVGhlIDMyLWJpdCBidXMgYWRkcmVzcyB0byB1c2UgaXMgcmV0dXJuZWQuCi0gKgotICogRGV2aWNlIG93bmVyc2hpcCBpc3N1ZXMgYXMgbWVudGlvbmVkIGFib3ZlIGZvciBkbWFfbWFwX3NpbmdsZSBhcmUKLSAqIHRoZSBzYW1lIGhlcmUuCi0gKi8KIGRtYV9hZGRyX3QgZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAogCQkJc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vaW8uaAppbmRleCAzM2U4NDJmLi5jMWE4ZGYyIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL2lvLmgKKysrIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9pby5oCkBAIC0yNSw3ICsyNSw3IEBACiAgKiBtZW1vcnkgbG9jYXRpb24gZGlyZWN0bHkuCiAgKi8KIC8qICsrcm9tYW46IFRoZSBhc3NpZ25tZW50cyB0byB0ZW1wLiB2YXJzIGF2b2lkIHRoYXQgZ2NjIHNvbWV0aW1lcyBnZW5lcmF0ZXMKLSAqIHR3byBhY2Nlc3NlcyB0byBtZW1vcnksIHdoaWNoIG1heSBiZSB1bmRlc2lyZWFibGUgZm9yIHNvbWUgZGV2aWNlcy4KKyAqIHR3byBhY2Nlc3NlcyB0byBtZW1vcnksIHdoaWNoIG1heSBiZSB1bmRlc2lyYWJsZSBmb3Igc29tZSBkZXZpY2VzLgogICovCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCBjMmUwNWU0Li5kODY2YzBlIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvaDgzMDAvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTU1LDYgKzU1LDggQEAKIC8qIEZpbmQgdGhlIHN0YWNrIG9mZnNldCBmb3IgYSByZWdpc3RlciwgcmVsYXRpdmUgdG8gdGhyZWFkLmVzcDAuICovCiAjZGVmaW5lIFBUX1JFRyhyZWcpCSgobG9uZykmKChzdHJ1Y3QgcHRfcmVncyAqKTApLT5yZWcpCiAKKyNkZWZpbmUgYXJjaF9oYXNfc2luZ2xlX3N0ZXAoKQkoMSkKKwogI2RlZmluZSB1c2VyX21vZGUocmVncykgKCEoKHJlZ3MpLT5jY3IgJiBQU19TKSkKICNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAoKHJlZ3MpLT5wYykKICNkZWZpbmUgcHJvZmlsZV9wYyhyZWdzKSBpbnN0cnVjdGlvbl9wb2ludGVyKHJlZ3MpCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCA5OWYzYzM1Li41MGYyYzVhMyAxMDA2NDQKLS0tIGEvYXJjaC9oODMwMC9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL2g4MzAwL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zMzYsNiArMzM2LDcgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0lQQwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NHRVRNQVNLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdOQUwKQEAgLTM0OCw2ICszNDksOCBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19OSUNFCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfR0VUUkxJTUlUCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfTU1BUAorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEX1NFTEVDVAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC9wdHJhY2UuYwppbmRleCBkMzJiYmYwLi5kZjExNDEyIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC9wdHJhY2UuYwpAQCAtMzQsMjUgKzM0LDIwIEBACiAvKiBjcHUgZGVwZW5kIGZ1bmN0aW9ucyAqLwogZXh0ZXJuIGxvbmcgaDgzMDBfZ2V0X3JlZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCByZWdubyk7CiBleHRlcm4gaW50ICBoODMwMF9wdXRfcmVnKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgaW50IHJlZ25vLCB1bnNpZ25lZCBsb25nIGRhdGEpOwotZXh0ZXJuIHZvaWQgaDgzMDBfZGlzYWJsZV90cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKLWV4dGVybiB2b2lkIGg4MzAwX2VuYWJsZV90cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKTsKKworCit2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQoreworfQogCiAvKgogICogZG9lcyBub3QgeWV0IGNhdGNoIHNpZ25hbHMgc2VudCB3aGVuIHRoZSBjaGlsZCBkaWVzLgogICogaW4gZXhpdC5jIG9yIGluIHNpZ25hbC5jLgogICovCiAKLWlubGluZQotc3RhdGljIGludCByZWFkX2xvbmcoc3RydWN0IHRhc2tfc3RydWN0ICogdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JdW5zaWduZWQgbG9uZyAqIHJlc3VsdCkKLXsKLQkqcmVzdWx0ID0gKih1bnNpZ25lZCBsb25nICopYWRkcjsKLQlyZXR1cm4gMDsKLX0KLQogdm9pZCBwdHJhY2VfZGlzYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQogewotCWg4MzAwX2Rpc2FibGVfdHJhY2UoY2hpbGQpOworCXVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChjaGlsZCk7CiB9CiAKIGxvbmcgYXJjaF9wdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgbG9uZyByZXF1ZXN0LCBsb25nIGFkZHIsIGxvbmcgZGF0YSkKQEAgLTYwLDE3ICs1NSw2IEBACiAJaW50IHJldDsKIAogCXN3aXRjaCAocmVxdWVzdCkgewotCQljYXNlIFBUUkFDRV9QRUVLVEVYVDogLyogcmVhZCB3b3JkIGF0IGxvY2F0aW9uIGFkZHIuICovIAotCQljYXNlIFBUUkFDRV9QRUVLREFUQTogewotCQkJdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQkJCXJldCA9IHJlYWRfbG9uZyhjaGlsZCwgYWRkciwgJnRtcCk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQlicmVhayA7Ci0JCQlyZXQgPSBwdXRfdXNlcih0bXAsICh1bnNpZ25lZCBsb25nICopIGRhdGEpOwotCQkJYnJlYWsgOwotCQl9Ci0KIAkvKiByZWFkIHRoZSB3b3JkIGF0IGxvY2F0aW9uIGFkZHIgaW4gdGhlIFVTRVIgYXJlYS4gKi8KIAkJY2FzZSBQVFJBQ0VfUEVFS1VTUjogewogCQkJdW5zaWduZWQgbG9uZyB0bXAgPSAwOwpAQCAtMTA5LDExICs5Myw2IEBACiAJCX0KIAogICAgICAgLyogd2hlbiBJIGFuZCBEIHNwYWNlIGFyZSBzZXBhcmF0ZSwgdGhpcyB3aWxsIGhhdmUgdG8gYmUgZml4ZWQuICovCi0JCWNhc2UgUFRSQUNFX1BPS0VURVhUOiAvKiB3cml0ZSB0aGUgd29yZCBhdCBsb2NhdGlvbiBhZGRyLiAqLwotCQljYXNlIFBUUkFDRV9QT0tFREFUQToKLQkJCXJldCA9IGdlbmVyaWNfcHRyYWNlX3Bva2VkYXRhKGNoaWxkLCBhZGRyLCBkYXRhKTsKLQkJCWJyZWFrOwotCiAJCWNhc2UgUFRSQUNFX1BPS0VVU1I6IC8qIHdyaXRlIHRoZSB3b3JkIGF0IGxvY2F0aW9uIGFkZHIgaW4gdGhlIFVTRVIgYXJlYSAqLwogCQkJaWYgKChhZGRyICYgMykgfHwgYWRkciA8IDAgfHwgYWRkciA+PSBzaXplb2Yoc3RydWN0IHVzZXIpKSB7CiAJCQkJcmV0ID0gLUVJTzsKQEAgLTEzMSw1MyArMTEwLDYgQEAKIAkJCX0KIAkJCXJldCA9IC1FSU87CiAJCQlicmVhayA7Ci0JCWNhc2UgUFRSQUNFX1NZU0NBTEw6IC8qIGNvbnRpbnVlIGFuZCBzdG9wIGF0IG5leHQgKHJldHVybiBmcm9tKSBzeXNjYWxsICovCi0JCWNhc2UgUFRSQUNFX0NPTlQ6IHsgLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCi0JCQlyZXQgPSAtRUlPOwotCQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCi0JCQkJYnJlYWsgOwotCQkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpCi0JCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCQkJZWxzZQotCQkJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCQkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7Ci0JCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOwotCQkJLyogbWFrZSBzdXJlIHRoZSBzaW5nbGUgc3RlcCBiaXQgaXMgbm90IHNldC4gKi8KLQkJCWg4MzAwX2Rpc2FibGVfdHJhY2UoY2hpbGQpOwotCQkJcmV0ID0gMDsKLQkJfQotCi0vKgotICogbWFrZSB0aGUgY2hpbGQgZXhpdC4gIEJlc3QgSSBjYW4gZG8gaXMgc2VuZCBpdCBhIHNpZ2tpbGwuIAotICogcGVyaGFwcyBpdCBzaG91bGQgYmUgcHV0IGluIHRoZSBzdGF0dXMgdGhhdCBpdCB3YW50cyB0byAKLSAqIGV4aXQuCi0gKi8KLQkJY2FzZSBQVFJBQ0VfS0lMTDogewotCi0JCQlyZXQgPSAwOwotCQkJaWYgKGNoaWxkLT5leGl0X3N0YXRlID09IEVYSVRfWk9NQklFKSAvKiBhbHJlYWR5IGRlYWQgKi8KLQkJCQlicmVhazsKLQkJCWNoaWxkLT5leGl0X2NvZGUgPSBTSUdLSUxMOwotCQkJaDgzMDBfZGlzYWJsZV90cmFjZShjaGlsZCk7Ci0JCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQljYXNlIFBUUkFDRV9TSU5HTEVTVEVQOiB7ICAvKiBzZXQgdGhlIHRyYXAgZmxhZy4gKi8KLQkJCXJldCA9IC1FSU87Ci0JCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKLQkJCQlicmVhazsKLQkJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCQkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7Ci0JCQloODMwMF9lbmFibGVfdHJhY2UoY2hpbGQpOwotCQkJd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKLQkJCXJldCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCi0JCWNhc2UgUFRSQUNFX0RFVEFDSDoJLyogZGV0YWNoIGEgcHJvY2VzcyB0aGF0IHdhcyBhdHRhY2hlZC4gKi8KLQkJCXJldCA9IHB0cmFjZV9kZXRhY2goY2hpbGQsIGRhdGEpOwotCQkJYnJlYWs7CiAKIAkJY2FzZSBQVFJBQ0VfR0VUUkVHUzogeyAvKiBHZXQgYWxsIGdwIHJlZ3MgZnJvbSB0aGUgY2hpbGQuICovCiAJCSAgCWludCBpOwpAQCAtMjEwLDcgKzE0Miw3IEBACiAJCX0KIAogCQlkZWZhdWx0OgotCQkJcmV0ID0gLUVJTzsKKwkJCXJldCA9IHB0cmFjZV9yZXF1ZXN0KGNoaWxkLCByZXF1ZXN0LCBhZGRyLCBkYXRhKTsKIAkJCWJyZWFrOwogCX0KIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9oODMwMC9rZXJuZWwvc3lzX2g4MzAwLmMgYi9hcmNoL2g4MzAwL2tlcm5lbC9zeXNfaDgzMDAuYwppbmRleCBiNTk2OWRiLi5mOWIzZjQ0IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC9zeXNfaDgzMDAuYworKysgYi9hcmNoL2g4MzAwL2tlcm5lbC9zeXNfaDgzMDAuYwpAQCAtMjYsMTQ0ICsyNiw2IEBACiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0vKgotICogUGVyZm9ybSB0aGUgc2VsZWN0KG5kLCBpbiwgb3V0LCBleCwgdHYpIGFuZCBtbWFwKCkgc3lzdGVtCi0gKiBjYWxscy4gTGludXgvbTY4ayBjbG9uZWQgTGludXgvaTM4Niwgd2hpY2ggZGlkbid0IHVzZSB0byBiZSBhYmxlIHRvCi0gKiBoYW5kbGUgbW9yZSB0aGFuIDQgc3lzdGVtIGNhbGwgcGFyYW1ldGVycywgc28gdGhlc2Ugc3lzdGVtIGNhbGxzCi0gKiB1c2VkIGEgbWVtb3J5IGJsb2NrIGZvciBwYXJhbWV0ZXIgcGFzc2luZy4uCi0gKi8KLQotc3RydWN0IG1tYXBfYXJnX3N0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOwotCXVuc2lnbmVkIGxvbmcgbGVuOwotCXVuc2lnbmVkIGxvbmcgcHJvdDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgZmQ7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQ7Ci19OwotCi1hc21saW5rYWdlIGludCBvbGRfbW1hcChzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0ICphcmcpCi17Ci0Jc3RydWN0IG1tYXBfYXJnX3N0cnVjdCBhOwotCWludCBlcnJvciA9IC1FRkFVTFQ7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmEsIGFyZywgc2l6ZW9mKGEpKSkKLQkJZ290byBvdXQ7Ci0KLQllcnJvciA9IC1FSU5WQUw7Ci0JaWYgKGEub2Zmc2V0ICYgflBBR0VfTUFTSykKLQkJZ290byBvdXQ7Ci0KLQllcnJvciA9IHN5c19tbWFwX3Bnb2ZmKGEuYWRkciwgYS5sZW4sIGEucHJvdCwgYS5mbGFncywgYS5mZCwKLQkJCSAgICAgICBhLm9mZnNldCA+PiBQQUdFX1NISUZUKTsKLW91dDoKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0cnVjdCBzZWxfYXJnX3N0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBuOwotCWZkX3NldCAqaW5wLCAqb3V0cCwgKmV4cDsKLQlzdHJ1Y3QgdGltZXZhbCAqdHZwOwotfTsKLQotYXNtbGlua2FnZSBpbnQgb2xkX3NlbGVjdChzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QgKmFyZykKLXsKLQlzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QgYTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmYSwgYXJnLCBzaXplb2YoYSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQkvKiBzeXNfc2VsZWN0KCkgZG9lcyB0aGUgYXBwcm9wcmlhdGUga2VybmVsIGxvY2tpbmcgKi8KLQlyZXR1cm4gc3lzX3NlbGVjdChhLm4sIGEuaW5wLCBhLm91dHAsIGEuZXhwLCBhLnR2cCk7Ci19Ci0KLS8qCi0gKiBzeXNfaXBjKCkgaXMgdGhlIGRlLW11bHRpcGxleGVyIGZvciB0aGUgU3lzViBJUEMgY2FsbHMuLgotICoKLSAqIFRoaXMgaXMgcmVhbGx5IGhvcnJpYmx5IHVnbHkuCi0gKi8KLWFzbWxpbmthZ2UgaW50IHN5c19pcGMgKHVpbnQgY2FsbCwgaW50IGZpcnN0LCBpbnQgc2Vjb25kLAotCQkJaW50IHRoaXJkLCB2b2lkICpwdHIsIGxvbmcgZmlmdGgpCi17Ci0JaW50IHZlcnNpb24sIHJldDsKLQotCXZlcnNpb24gPSBjYWxsID4+IDE2OyAvKiBoYWNrIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCi0JY2FsbCAmPSAweGZmZmY7Ci0KLQlpZiAoY2FsbCA8PSBTRU1DVEwpCi0JCXN3aXRjaCAoY2FsbCkgewotCQljYXNlIFNFTU9QOgotCQkJcmV0dXJuIHN5c19zZW1vcCAoZmlyc3QsIChzdHJ1Y3Qgc2VtYnVmICopcHRyLCBzZWNvbmQpOwotCQljYXNlIFNFTUdFVDoKLQkJCXJldHVybiBzeXNfc2VtZ2V0IChmaXJzdCwgc2Vjb25kLCB0aGlyZCk7Ci0JCWNhc2UgU0VNQ1RMOiB7Ci0JCQl1bmlvbiBzZW11biBmb3VydGg7Ci0JCQlpZiAoIXB0cikKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWlmIChnZXRfdXNlcihmb3VydGguX19wYWQsICh2b2lkICoqKSBwdHIpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcmV0dXJuIHN5c19zZW1jdGwgKGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBmb3VydGgpOwotCQkJfQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQlpZiAoY2FsbCA8PSBNU0dDVEwpIAotCQlzd2l0Y2ggKGNhbGwpIHsKLQkJY2FzZSBNU0dTTkQ6Ci0JCQlyZXR1cm4gc3lzX21zZ3NuZCAoZmlyc3QsIChzdHJ1Y3QgbXNnYnVmICopIHB0ciwgCi0JCQkJCSAgc2Vjb25kLCB0aGlyZCk7Ci0JCWNhc2UgTVNHUkNWOgotCQkJc3dpdGNoICh2ZXJzaW9uKSB7Ci0JCQljYXNlIDA6IHsKLQkJCQlzdHJ1Y3QgaXBjX2tsdWRnZSB0bXA7Ci0JCQkJaWYgKCFwdHIpCi0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCWlmIChjb3B5X2Zyb21fdXNlciAoJnRtcCwKLQkJCQkJCSAgICAoc3RydWN0IGlwY19rbHVkZ2UgKilwdHIsCi0JCQkJCQkgICAgc2l6ZW9mICh0bXApKSkKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQkJcmV0dXJuIHN5c19tc2dyY3YgKGZpcnN0LCB0bXAubXNncCwgc2Vjb25kLAotCQkJCQkJICAgdG1wLm1zZ3R5cCwgdGhpcmQpOwotCQkJCX0KLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIHN5c19tc2dyY3YgKGZpcnN0LAotCQkJCQkJICAgKHN0cnVjdCBtc2didWYgKikgcHRyLAotCQkJCQkJICAgc2Vjb25kLCBmaWZ0aCwgdGhpcmQpOwotCQkJfQotCQljYXNlIE1TR0dFVDoKLQkJCXJldHVybiBzeXNfbXNnZ2V0ICgoa2V5X3QpIGZpcnN0LCBzZWNvbmQpOwotCQljYXNlIE1TR0NUTDoKLQkJCXJldHVybiBzeXNfbXNnY3RsIChmaXJzdCwgc2Vjb25kLAotCQkJCQkgICAoc3RydWN0IG1zcWlkX2RzICopIHB0cik7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCWlmIChjYWxsIDw9IFNITUNUTCkgCi0JCXN3aXRjaCAoY2FsbCkgewotCQljYXNlIFNITUFUOgotCQkJc3dpdGNoICh2ZXJzaW9uKSB7Ci0JCQlkZWZhdWx0OiB7Ci0JCQkJdWxvbmcgcmFkZHI7Ci0JCQkJcmV0ID0gZG9fc2htYXQgKGZpcnN0LCAoY2hhciAqKSBwdHIsCi0JCQkJCQkgc2Vjb25kLCAmcmFkZHIpOwotCQkJCWlmIChyZXQpCi0JCQkJCXJldHVybiByZXQ7Ci0JCQkJcmV0dXJuIHB1dF91c2VyIChyYWRkciwgKHVsb25nICopIHRoaXJkKTsKLQkJCX0KLQkJCX0KLQkJY2FzZSBTSE1EVDogCi0JCQlyZXR1cm4gc3lzX3NobWR0ICgoY2hhciAqKXB0cik7Ci0JCWNhc2UgU0hNR0VUOgotCQkJcmV0dXJuIHN5c19zaG1nZXQgKGZpcnN0LCBzZWNvbmQsIHRoaXJkKTsKLQkJY2FzZSBTSE1DVEw6Ci0JCQlyZXR1cm4gc3lzX3NobWN0bCAoZmlyc3QsIHNlY29uZCwKLQkJCQkJICAgKHN0cnVjdCBzaG1pZF9kcyAqKSBwdHIpOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCXJldHVybiAtRUlOVkFMOwotfQotCiAvKiBzeXNfY2FjaGVmbHVzaCAtLSBubyBzdXBwb3J0LiAgKi8KIGFzbWxpbmthZ2UgaW50CiBzeXNfY2FjaGVmbHVzaCAodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgc2NvcGUsIGludCBjYWNoZSwgdW5zaWduZWQgbG9uZyBsZW4pCmRpZmYgLS1naXQgYS9hcmNoL2g4MzAwL2tlcm5lbC9zeXNjYWxscy5TIGIvYXJjaC9oODMwMC9rZXJuZWwvc3lzY2FsbHMuUwppbmRleCAyZDY5ODgxLi5mYWVmYWZmIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC9zeXNjYWxscy5TCisrKyBiL2FyY2gvaDgzMDAva2VybmVsL3N5c2NhbGxzLlMKQEAgLTk2LDcgKzk2LDcgQEAKIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfc2V0dGltZW9mZGF5KQogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19nZXRncm91cHMxNikJLyogODAgKi8KIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfc2V0Z3JvdXBzMTYpCi0JLmxvbmcgU1lNQk9MX05BTUUob2xkX3NlbGVjdCkKKwkubG9uZyBTWU1CT0xfTkFNRShzeXNfb2xkX3NlbGVjdCkKIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfc3ltbGluaykKIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfbHN0YXQpCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX3JlYWRsaW5rKQkJLyogODUgKi8KQEAgLTEwNCw3ICsxMDQsNyBAQAogCS5sb25nIFNZTUJPTF9OQU1FKHN5c19zd2Fwb24pCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX3JlYm9vdCkKIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfb2xkX3JlYWRkaXIpCi0JLmxvbmcgU1lNQk9MX05BTUUob2xkX21tYXApCQkvKiA5MCAqLworCS5sb25nIFNZTUJPTF9OQU1FKHN5c19vbGRfbW1hcCkJCS8qIDkwICovCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX211bm1hcCkKIAkubG9uZyBTWU1CT0xfTkFNRShzeXNfdHJ1bmNhdGUpCiAJLmxvbmcgU1lNQk9MX05BTUUoc3lzX2Z0cnVuY2F0ZSkKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL3B0cmFjZV9oODMwMGguYyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDgzMDBoL3B0cmFjZV9oODMwMGguYwppbmRleCA3NDZiMWFlLi40ZjFlZDAyIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4MzAwaC9wdHJhY2VfaDgzMDBoLmMKKysrIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oODMwMGgvcHRyYWNlX2g4MzAwaC5jCkBAIC02MCw3ICs2MCw3IEBACiB9CiAKIC8qIGRpc2FibGUgc2luZ2xlc3RlcCAqLwotdm9pZCBoODMwMF9kaXNhYmxlX3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCit2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQogewogCWlmKChsb25nKWNoaWxkLT50aHJlYWQuYnJlYWtpbmZvLmFkZHIgIT0gLTFMKSB7CiAJCSpjaGlsZC0+dGhyZWFkLmJyZWFraW5mby5hZGRyID0gY2hpbGQtPnRocmVhZC5icmVha2luZm8uaW5zdDsKQEAgLTI2NCw3ICsyNjQsNyBAQAogCiAvKiBTZXQgYnJlYWtwb2ludChzKSB0byBzaW11bGF0ZSBhIHNpbmdsZSBzdGVwIGZyb20gdGhlIGN1cnJlbnQgUEMuICAqLwogCi12b2lkIGg4MzAwX2VuYWJsZV90cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQordm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQogewogCXVuc2lnbmVkIHNob3J0ICpuZXh0cGM7CiAJbmV4dHBjID0gZ2V0bmV4dHBjKGNoaWxkLCh1bnNpZ25lZCBzaG9ydCAqKWg4MzAwX2dldF9yZWcoY2hpbGQsIFBUX1BDKSk7CkBAIC0yNzYsNyArMjc2LDcgQEAKIGFzbWxpbmthZ2Ugdm9pZCB0cmFjZV90cmFwKHVuc2lnbmVkIGxvbmcgYnApCiB7CiAJaWYgKCh1bnNpZ25lZCBsb25nKWN1cnJlbnQtPnRocmVhZC5icmVha2luZm8uYWRkciA9PSBicCkgewotCQloODMwMF9kaXNhYmxlX3RyYWNlKGN1cnJlbnQpOworCQl1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoY3VycmVudCk7CiAJCWZvcmNlX3NpZyhTSUdUUkFQLGN1cnJlbnQpOwogCX0gZWxzZQogCSAgICAgICAgZm9yY2Vfc2lnKFNJR0lMTCxjdXJyZW50KTsKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL3B0cmFjZV9oOHMuYyBiL2FyY2gvaDgzMDAvcGxhdGZvcm0vaDhzL3B0cmFjZV9oOHMuYwppbmRleCBlOGNkNDZmLi5jMDU4YWIxIDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL3BsYXRmb3JtL2g4cy9wdHJhY2VfaDhzLmMKKysrIGIvYXJjaC9oODMwMC9wbGF0Zm9ybS9oOHMvcHRyYWNlX2g4cy5jCkBAIC02NSwxMyArNjUsMTMgQEAKIH0KIAogLyogZGlzYWJsZSBzaW5nbGVzdGVwICovCi12b2lkIGg4MzAwX2Rpc2FibGVfdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3ZvaWQgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7CiAJKih1bnNpZ25lZCBzaG9ydCAqKShjaGlsZC0+dGhyZWFkLmVzcDAgKyBoODMwMF9yZWdpc3Rlcl9vZmZzZXRbUFRfRVhSXSkgJj0gfkVYUl9UUkFDRTsKIH0KIAogLyogZW5hYmxlIHNpbmdsZXN0ZXAgKi8KLXZvaWQgaDgzMDBfZW5hYmxlX3RyYWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCit2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7CiAJKih1bnNpZ25lZCBzaG9ydCAqKShjaGlsZC0+dGhyZWFkLmVzcDAgKyBoODMwMF9yZWdpc3Rlcl9vZmZzZXRbUFRfRVhSXSkgfD0gRVhSX1RSQUNFOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L0tjb25maWcgYi9hcmNoL2lhNjQvS2NvbmZpZwppbmRleCA5YTUwZDdkLi40ZDRmNDE4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvS2NvbmZpZworKysgYi9hcmNoL2lhNjQvS2NvbmZpZwpAQCAtNTMsNiArNTMsOSBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIE5FRURfRE1BX01BUF9TVEFURQorCWRlZl9ib29sIHkKKwogY29uZmlnIFNXSU9UTEIKICAgICAgICBib29sCiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9jb21wYXQuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9jb21wYXQuaAppbmRleCBkZmNmNzViLi5mOTBlZGM4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vY29tcGF0LmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2NvbXBhdC5oCkBAIC01LDcgKzUsOCBAQAogICovCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotI2RlZmluZSBDT01QQVRfVVNFUl9IWgkxMDAKKyNkZWZpbmUgQ09NUEFUX1VTRVJfSFoJCTEwMAorI2RlZmluZSBDT01QQVRfVVRTX01BQ0hJTkUJImk2ODZcMFwwXDAiCiAKIHR5cGVkZWYgdTMyCQljb21wYXRfc2l6ZV90OwogdHlwZWRlZiBzMzIJCWNvbXBhdF9zc2l6ZV90OwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2VsZi5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2VsZi5oCmluZGV4IDRjNDE2NTYuLmI1Mjk4ZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9lbGYuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZWxmLmgKQEAgLTIxOSw1NCArMjE5LDYgQEAKIAlORVdfQVVYX0VOVChBVF9TWVNJTkZPX0VIRFIsICh1bnNpZ25lZCBsb25nKSBHQVRFX0VIRFIpOwkJXAogfSB3aGlsZSAoMCkKIAotCi0vKgotICogVGhlc2UgbWFjcm9zIHBhcmFtZXRlcml6ZSBlbGZfY29yZV9kdW1wIGluIGZzL2JpbmZtdF9lbGYuYyB0byB3cml0ZSBvdXQKLSAqIGV4dHJhIHNlZ21lbnRzIGNvbnRhaW5pbmcgdGhlIGdhdGUgRFNPIGNvbnRlbnRzLiAgRHVtcGluZyBpdHMKLSAqIGNvbnRlbnRzIG1ha2VzIHBvc3QtbW9ydGVtIGZ1bGx5IGludGVycHJldGFibGUgbGF0ZXIgd2l0aG91dCBtYXRjaGluZyB1cAotICogdGhlIHNhbWUga2VybmVsIGFuZCBoYXJkd2FyZSBjb25maWcgdG8gc2VlIHdoYXQgUEMgdmFsdWVzIG1lYW50LgotICogRHVtcGluZyBpdHMgZXh0cmEgRUxGIHByb2dyYW0gaGVhZGVycyBpbmNsdWRlcyBhbGwgdGhlIG90aGVyIGluZm9ybWF0aW9uCi0gKiBhIGRlYnVnZ2VyIG5lZWRzIHRvIGVhc2lseSBmaW5kIGhvdyB0aGUgZ2F0ZSBEU08gd2FzIGJlaW5nIHVzZWQuCi0gKi8KLSNkZWZpbmUgRUxGX0NPUkVfRVhUUkFfUEhEUlMJCShHQVRFX0VIRFItPmVfcGhudW0pCi0jZGVmaW5lIEVMRl9DT1JFX1dSSVRFX0VYVFJBX1BIRFJTCQkJCQkJXAotZG8gewkJCQkJCQkJCQlcCi0JY29uc3Qgc3RydWN0IGVsZl9waGRyICpjb25zdCBnYXRlX3BoZHJzID0JCQkgICAgICBcCi0JCShjb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKikgKEdBVEVfQUREUiArIEdBVEVfRUhEUi0+ZV9waG9mZik7ICAgXAotCWludCBpOwkJCQkJCQkJCVwKLQlFbGY2NF9PZmYgb2ZzID0gMDsJCQkJCQkgICAgICBcCi0JZm9yIChpID0gMDsgaSA8IEdBVEVfRUhEUi0+ZV9waG51bTsgKytpKSB7CQkJCVwKLQkJc3RydWN0IGVsZl9waGRyIHBoZHIgPSBnYXRlX3BoZHJzW2ldOwkJCSAgICAgIFwKLQkJaWYgKHBoZHIucF90eXBlID09IFBUX0xPQUQpIHsJCQkJCVwKLQkJCXBoZHIucF9tZW1zeiA9IFBBR0VfQUxJR04ocGhkci5wX21lbXN6KTsJICAgICAgXAotCQkJcGhkci5wX2ZpbGVzeiA9IHBoZHIucF9tZW1zejsJCQkgICAgICBcCi0JCQlpZiAob2ZzID09IDApIHsJCQkJCSAgICAgIFwKLQkJCQlvZnMgPSBwaGRyLnBfb2Zmc2V0ID0gb2Zmc2V0OwkJICAgICAgXAotCQkJb2Zmc2V0ICs9IHBoZHIucF9maWxlc3o7CQkJCVwKLQkJfQkJCQkJCQkgICAgICBcCi0JCWVsc2UJCQkJCQkJICAgICAgXAotCQkJCXBoZHIucF9vZmZzZXQgPSBvZnM7CQkJICAgICAgXAotCQl9CQkJCQkJCSAgICAgIFwKLQkJZWxzZQkJCQkJCQkgICAgICBcCi0JCQlwaGRyLnBfb2Zmc2V0ICs9IG9mczsJCQkJCVwKLQkJcGhkci5wX3BhZGRyID0gMDsgLyogbWF0Y2ggb3RoZXIgY29yZSBwaGRycyAqLwkJCVwKLQkJRFVNUF9XUklURSgmcGhkciwgc2l6ZW9mKHBoZHIpKTsJCQkJXAotCX0JCQkJCQkJCQlcCi19IHdoaWxlICgwKQotI2RlZmluZSBFTEZfQ09SRV9XUklURV9FWFRSQV9EQVRBCQkJCQlcCi1kbyB7CQkJCQkJCQkJXAotCWNvbnN0IHN0cnVjdCBlbGZfcGhkciAqY29uc3QgZ2F0ZV9waGRycyA9CQkJICAgICAgXAotCQkoY29uc3Qgc3RydWN0IGVsZl9waGRyICopIChHQVRFX0FERFIgKyBHQVRFX0VIRFItPmVfcGhvZmYpOyAgIFwKLQlpbnQgaTsJCQkJCQkJCVwKLQlmb3IgKGkgPSAwOyBpIDwgR0FURV9FSERSLT5lX3BobnVtOyArK2kpIHsJCQlcCi0JCWlmIChnYXRlX3BoZHJzW2ldLnBfdHlwZSA9PSBQVF9MT0FEKSB7CQkJICAgICAgXAotCQkJRFVNUF9XUklURSgodm9pZCAqKSBnYXRlX3BoZHJzW2ldLnBfdmFkZHIsCSAgICAgIFwKLQkJCQkgICBQQUdFX0FMSUdOKGdhdGVfcGhkcnNbaV0ucF9tZW1zeikpOwkgICAgICBcCi0JCQlicmVhazsJCQkJCQkgICAgICBcCi0JCX0JCQkJCQkJICAgICAgXAotCX0JCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KIC8qCiAgKiBmb3JtYXQgZm9yIGVudHJpZXMgaW4gdGhlIEdsb2JhbCBPZmZzZXQgVGFibGUKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BjaS5oCmluZGV4IDU1MjgxYWEuLjczYjVmNzggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wY2kuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTU2LDIwICs1Niw2IEBACiAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wY2ktZG1hLWNvbXBhdC5oPgogCi0vKiBwY2lfdW5tYXBfe3NpbmdsZSxwYWdlfSBpcyBub3QgYSBub3AsIHRodXMuLi4gKi8KLSNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCVwKLQlkbWFfYWRkcl90IEFERFJfTkFNRTsKLSNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKQkJXAotCV9fdTMyIExFTl9OQU1FOwotI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJCQlcCi0JKChQVFIpLT5BRERSX05BTUUpCi0jZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKQkJXAotCSgoKFBUUiktPkFERFJfTkFNRSkgPSAoVkFMKSkKLSNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJCVwKLQkoKFBUUiktPkxFTl9OQU1FKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCQlcCi0JKCgoUFRSKS0+TEVOX05BTUUpID0gKFZBTCkpCi0KICNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2RtYV9idXJzdF9hZHZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJCWVudW0gcGNpX2RtYV9idXJzdF9zdHJhdGVneSAqc3RyYXQsCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGVyY3B1LmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcGVyY3B1LmgKaW5kZXggMzBjZjQ2NS4uZjdjMDBhNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3BlcmNwdS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wZXJjcHUuaApAQCAtOSw3ICs5LDcgQEAKICNkZWZpbmUgUEVSQ1BVX0VOT1VHSF9ST09NIFBFUkNQVV9QQUdFX1NJWkUKIAogI2lmZGVmIF9fQVNTRU1CTFlfXwotIyBkZWZpbmUgVEhJU19DUFUodmFyKQkocGVyX2NwdV9fIyN2YXIpICAvKiB1c2UgdGhpcyB0byBtYXJrIGFjY2Vzc2VzIHRvIHBlci1DUFUgdmFyaWFibGVzLi4uICovCisjIGRlZmluZSBUSElTX0NQVSh2YXIpCSh2YXIpICAvKiB1c2UgdGhpcyB0byBtYXJrIGFjY2Vzc2VzIHRvIHBlci1DUFUgdmFyaWFibGVzLi4uICovCiAjZWxzZSAvKiAhX19BU1NFTUJMWV9fICovCiAKIApAQCAtMzksNyArMzksNyBAQAogICogT24gdGhlIHBvc2l0aXZlIHNpZGUsIHVzaW5nIF9faWE2NF9wZXJfY3B1X3ZhcigpIGluc3RlYWQgb2YgX19nZXRfY3B1X3ZhcigpIGlzIHNsaWdodGx5CiAgKiBtb3JlIGVmZmljaWVudC4KICAqLwotI2RlZmluZSBfX2lhNjRfcGVyX2NwdV92YXIodmFyKQlwZXJfY3B1X18jI3ZhcgorI2RlZmluZSBfX2lhNjRfcGVyX2NwdV92YXIodmFyKQl2YXIKIAogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggMTQwNTVjNi4uN2FlOWMzZiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtMzE5LDExICszMTksNyBAQAogCXB0cmFjZV9hdHRhY2hfc3luY191c2VyX3JicyhjaGlsZCkKIAogICAjZGVmaW5lIGFyY2hfaGFzX3NpbmdsZV9zdGVwKCkgICgxKQotICBleHRlcm4gdm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7Ci0gIGV4dGVybiB2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7Ci0KICAgI2RlZmluZSBhcmNoX2hhc19ibG9ja19zdGVwKCkgICAoMSkKLSAgZXh0ZXJuIHZvaWQgdXNlcl9lbmFibGVfYmxvY2tfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAKICNlbmRpZiAvKiAhX19LRVJORUxfXyAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL2V2ZW50cy5oIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL3hlbi9ldmVudHMuaAppbmRleCBiODM3MGM4Li5iYWE3NGM4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20veGVuL2V2ZW50cy5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS94ZW4vZXZlbnRzLmgKQEAgLTM2LDEwICszNiw2IEBACiAJcmV0dXJuICEoaWE2NF9wc3IocmVncyktPmkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2lycShpbnQgaXJxLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlfX2RvX0lSUShpcnEpOwotfQogI2RlZmluZSBpcnFfY3R4X2luaXQoY3B1KQlkbyB7IH0gd2hpbGUgKDApCiAKICNlbmRpZiAvKiBfQVNNX0lBNjRfWEVOX0VWRU5UU19IICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlIGIvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQppbmRleCA0MTM4MjgyLi5kYjEwYjFlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKQEAgLTQ1LDYgKzQ1LDggQEAKIG9iai0kKENPTkZJR19ETUFSKQkJKz0gcGNpLWRtYS5vCiBvYmotJChDT05GSUdfU1dJT1RMQikJCSs9IHBjaS1zd2lvdGxiLm8KIAorb2JqLSQoQ09ORklHX0JJTkZNVF9FTEYpCSs9IGVsZmNvcmUubworCiAjIGZwX2VtdWxhdGUoKSBleHBlY3RzIGYyLWY1LGYxNi1mMzEgdG8gY29udGFpbiB0aGUgdXNlci1sZXZlbCBzdGF0ZS4KIENGTEFHU190cmFwcy5vICArPSAtbWZpeGVkLXJhbmdlPWYyLWY1LGYxNi1mMzEKIApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9hY3BpLmMgYi9hcmNoL2lhNjQva2VybmVsL2FjcGkuYwppbmRleCBjMTZmYjAzLi5hN2NhMDdmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2FjcGkuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2FjcGkuYwpAQCAtODUyLDggKzg1Miw4IEBACiAKIAlwb3NzaWJsZSA9IGF2YWlsYWJsZV9jcHVzICsgYWRkaXRpb25hbF9jcHVzOwogCi0JaWYgKHBvc3NpYmxlID4gTlJfQ1BVUykKLQkJcG9zc2libGUgPSBOUl9DUFVTOworCWlmIChwb3NzaWJsZSA+IG5yX2NwdV9pZHMpCisJCXBvc3NpYmxlID0gbnJfY3B1X2lkczsKIAogCXByaW50ayhLRVJOX0lORk8gIlNNUDogQWxsb3dpbmcgJWQgQ1BVcywgJWQgaG90cGx1ZyBDUFVzXG4iLAogCQlwb3NzaWJsZSwgbWF4KChwb3NzaWJsZSAtIGF2YWlsYWJsZV9jcHVzKSwgMCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lbGZjb3JlLmMgYi9hcmNoL2lhNjQva2VybmVsL2VsZmNvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWMxNjM5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9lbGZjb3JlLmMKQEAgLTAsMCArMSw4MCBAQAorI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGxpbnV4L2NvcmVkdW1wLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2VsZi5oPgorCisKK0VsZjY0X0hhbGYgZWxmX2NvcmVfZXh0cmFfcGhkcnModm9pZCkKK3sKKwlyZXR1cm4gR0FURV9FSERSLT5lX3BobnVtOworfQorCitpbnQgZWxmX2NvcmVfd3JpdGVfZXh0cmFfcGhkcnMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCAqc2l6ZSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIGxpbWl0KQoreworCWNvbnN0IHN0cnVjdCBlbGZfcGhkciAqY29uc3QgZ2F0ZV9waGRycyA9CisJCShjb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKikgKEdBVEVfQUREUiArIEdBVEVfRUhEUi0+ZV9waG9mZik7CisJaW50IGk7CisJRWxmNjRfT2ZmIG9mcyA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgR0FURV9FSERSLT5lX3BobnVtOyArK2kpIHsKKwkJc3RydWN0IGVsZl9waGRyIHBoZHIgPSBnYXRlX3BoZHJzW2ldOworCisJCWlmIChwaGRyLnBfdHlwZSA9PSBQVF9MT0FEKSB7CisJCQlwaGRyLnBfbWVtc3ogPSBQQUdFX0FMSUdOKHBoZHIucF9tZW1zeik7CisJCQlwaGRyLnBfZmlsZXN6ID0gcGhkci5wX21lbXN6OworCQkJaWYgKG9mcyA9PSAwKSB7CisJCQkJb2ZzID0gcGhkci5wX29mZnNldCA9IG9mZnNldDsKKwkJCQlvZmZzZXQgKz0gcGhkci5wX2ZpbGVzejsKKwkJCX0gZWxzZSB7CisJCQkJcGhkci5wX29mZnNldCA9IG9mczsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXBoZHIucF9vZmZzZXQgKz0gb2ZzOworCQl9CisJCXBoZHIucF9wYWRkciA9IDA7IC8qIG1hdGNoIG90aGVyIGNvcmUgcGhkcnMgKi8KKwkJKnNpemUgKz0gc2l6ZW9mKHBoZHIpOworCQlpZiAoKnNpemUgPiBsaW1pdCB8fCAhZHVtcF93cml0ZShmaWxlLCAmcGhkciwgc2l6ZW9mKHBoZHIpKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworaW50IGVsZl9jb3JlX3dyaXRlX2V4dHJhX2RhdGEoc3RydWN0IGZpbGUgKmZpbGUsIHNpemVfdCAqc2l6ZSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbGltaXQpCit7CisJY29uc3Qgc3RydWN0IGVsZl9waGRyICpjb25zdCBnYXRlX3BoZHJzID0KKwkJKGNvbnN0IHN0cnVjdCBlbGZfcGhkciAqKSAoR0FURV9BRERSICsgR0FURV9FSERSLT5lX3Bob2ZmKTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBHQVRFX0VIRFItPmVfcGhudW07ICsraSkgeworCQlpZiAoZ2F0ZV9waGRyc1tpXS5wX3R5cGUgPT0gUFRfTE9BRCkgeworCQkJdm9pZCAqYWRkciA9ICh2b2lkICopZ2F0ZV9waGRyc1tpXS5wX3ZhZGRyOworCQkJc2l6ZV90IG1lbXN6ID0gUEFHRV9BTElHTihnYXRlX3BoZHJzW2ldLnBfbWVtc3opOworCisJCQkqc2l6ZSArPSBtZW1zejsKKwkJCWlmICgqc2l6ZSA+IGxpbWl0IHx8ICFkdW1wX3dyaXRlKGZpbGUsIGFkZHIsIG1lbXN6KSkKKwkJCQlyZXR1cm4gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCXJldHVybiAxOworfQorCitzaXplX3QgZWxmX2NvcmVfZXh0cmFfZGF0YV9zaXplKHZvaWQpCit7CisJY29uc3Qgc3RydWN0IGVsZl9waGRyICpjb25zdCBnYXRlX3BoZHJzID0KKwkJKGNvbnN0IHN0cnVjdCBlbGZfcGhkciAqKSAoR0FURV9BRERSICsgR0FURV9FSERSLT5lX3Bob2ZmKTsKKwlpbnQgaTsKKwlzaXplX3Qgc2l6ZSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgR0FURV9FSERSLT5lX3BobnVtOyArK2kpIHsKKwkJaWYgKGdhdGVfcGhkcnNbaV0ucF90eXBlID09IFBUX0xPQUQpIHsKKwkJCXNpemUgKz0gUEFHRV9BTElHTihnYXRlX3BoZHJzW2ldLnBfbWVtc3opOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHNpemU7Cit9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYyBiL2FyY2gvaWE2NC9rZXJuZWwvaWE2NF9rc3ltcy5jCmluZGV4IDQ2MWI5OTkuLjdmNGEwZWQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvaWE2NF9rc3ltcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvaWE2NF9rc3ltcy5jCkBAIC0zMCw5ICszMCw5IEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLUVYUE9SVF9TWU1CT0wocGVyX2NwdV9faWE2NF9jcHVfaW5mbyk7CitFWFBPUlRfU1lNQk9MKGlhNjRfY3B1X2luZm8pOwogI2lmZGVmIENPTkZJR19TTVAKLUVYUE9SVF9TWU1CT0wocGVyX2NwdV9fbG9jYWxfcGVyX2NwdV9vZmZzZXQpOworRVhQT1JUX1NZTUJPTChsb2NhbF9wZXJfY3B1X29mZnNldCk7CiAjZW5kaWYKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCmluZGV4IGI4MWU0NmIuLjcwMzA2MmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGVyZm1vbi5jCkBAIC0yMzE1LDYgKzIzMTUsNyBAQAogCQlEUFJJTlQoKCJDYW5ub3QgYWxsb2NhdGUgdm1hXG4iKSk7CiAJCWdvdG8gZXJyb3Jfa21lbTsKIAl9CisJSU5JVF9MSVNUX0hFQUQoJnZtYS0+YW5vbl92bWFfY2hhaW4pOwogCiAJLyoKIAkgKiBwYXJ0aWFsbHkgaW5pdGlhbGl6ZSB0aGUgdm1hIGZvciB0aGUgc2FtcGxpbmcgYnVmZmVyCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RvcG9sb2d5LmMgYi9hcmNoL2lhNjQva2VybmVsL3RvcG9sb2d5LmMKaW5kZXggOGYwNjAzNS4uYjNhNTgxOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90b3BvbG9neS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdG9wb2xvZ3kuYwpAQCAtMjgyLDcgKzI4Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgY2FjaGVfc3lzZnNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgY2FjaGVfc3lzZnNfb3BzID0gewogCS5zaG93ICAgPSBjYWNoZV9zaG93CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL0tjb25maWcgYi9hcmNoL2lhNjQva3ZtL0tjb25maWcKaW5kZXggZWYzZTdiZS4uZmE0ZDFlNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2t2bS9LY29uZmlnCisrKyBiL2FyY2gvaWE2NC9rdm0vS2NvbmZpZwpAQCAtMjYsNiArMjYsNyBAQAogCXNlbGVjdCBBTk9OX0lOT0RFUwogCXNlbGVjdCBIQVZFX0tWTV9JUlFDSElQCiAJc2VsZWN0IEtWTV9BUElDX0FSQ0hJVEVDVFVSRQorCXNlbGVjdCBLVk1fTU1JTwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgaG9zdGluZyBmdWxseSB2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyBoYXJkd2FyZQogCSAgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gIFlvdSB3aWxsIG5lZWQgYSBmYWlybHkgcmVjZW50CkBAIC00Nyw2ICs0OCw3IEBACiAJICBQcm92aWRlcyBzdXBwb3J0IGZvciBLVk0gb24gSXRhbml1bSAyIHByb2Nlc3NvcnMgZXF1aXBwZWQgd2l0aCB0aGUgVlQKIAkgIGV4dGVuc2lvbnMuCiAKK3NvdXJjZSBkcml2ZXJzL3Zob3N0L0tjb25maWcKIHNvdXJjZSBkcml2ZXJzL3ZpcnRpby9LY29uZmlnCiAKIGVuZGlmICMgVklSVFVBTElaQVRJT04KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYyBiL2FyY2gvaWE2NC9rdm0va3ZtLWlhNjQuYwppbmRleCA1ZmRlZWM1Li4yNmUwZTA4IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL2t2bS1pYTY0LmMKKysrIGIvYXJjaC9pYTY0L2t2bS9rdm0taWE2NC5jCkBAIC0yNDEsMTAgKzI0MSwxMCBAQAogCXJldHVybiAwOwogbW1pbzoKIAlpZiAocC0+ZGlyKQotCQlyID0ga3ZtX2lvX2J1c19yZWFkKCZ2Y3B1LT5rdm0tPm1taW9fYnVzLCBwLT5hZGRyLAorCQlyID0ga3ZtX2lvX2J1c19yZWFkKHZjcHUtPmt2bSwgS1ZNX01NSU9fQlVTLCBwLT5hZGRyLAogCQkJCSAgICBwLT5zaXplLCAmcC0+ZGF0YSk7CiAJZWxzZQotCQlyID0ga3ZtX2lvX2J1c193cml0ZSgmdmNwdS0+a3ZtLT5tbWlvX2J1cywgcC0+YWRkciwKKwkJciA9IGt2bV9pb19idXNfd3JpdGUodmNwdS0+a3ZtLCBLVk1fTU1JT19CVVMsIHAtPmFkZHIsCiAJCQkJICAgICBwLT5zaXplLCAmcC0+ZGF0YSk7CiAJaWYgKHIpCiAJCXByaW50ayhLRVJOX0VSUiJrdm06IE5vIGlvZGV2aWNlIGZvdW5kISBhZGRyOiVseFxuIiwgcC0+YWRkcik7CkBAIC02MzYsMTIgKzYzNiw5IEBACiBzdGF0aWMgaW50IF9fdmNwdV9ydW4oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3J1biAqa3ZtX3J1bikKIHsKIAl1bmlvbiBjb250ZXh0ICpob3N0X2N0eCwgKmd1ZXN0X2N0eDsKLQlpbnQgcjsKKwlpbnQgciwgaWR4OwogCi0JLyoKLQkgKiBkb3duX3JlYWQoKSBtYXkgc2xlZXAgYW5kIHJldHVybiB3aXRoIGludGVycnVwdHMgZW5hYmxlZAotCSAqLwotCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKKwlpZHggPSBzcmN1X3JlYWRfbG9jaygmdmNwdS0+a3ZtLT5zcmN1KTsKIAogYWdhaW46CiAJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CkBAIC02NjMsNyArNjYwLDcgQEAKIAlpZiAociA8IDApCiAJCWdvdG8gdmNwdV9ydW5fZmFpbDsKIAotCXVwX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CisJc3JjdV9yZWFkX3VubG9jaygmdmNwdS0+a3ZtLT5zcmN1LCBpZHgpOwogCWt2bV9ndWVzdF9lbnRlcigpOwogCiAJLyoKQEAgLTY4Nyw3ICs2ODQsNyBAQAogCWt2bV9ndWVzdF9leGl0KCk7CiAJcHJlZW1wdF9lbmFibGUoKTsKIAotCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKKwlpZHggPSBzcmN1X3JlYWRfbG9jaygmdmNwdS0+a3ZtLT5zcmN1KTsKIAogCXIgPSBrdm1faGFuZGxlX2V4aXQoa3ZtX3J1biwgdmNwdSk7CiAKQEAgLTY5NywxMCArNjk0LDEwIEBACiAJfQogCiBvdXQ6Ci0JdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKKwlzcmN1X3JlYWRfdW5sb2NrKCZ2Y3B1LT5rdm0tPnNyY3UsIGlkeCk7CiAJaWYgKHIgPiAwKSB7CiAJCWt2bV9yZXNjaGVkKHZjcHUpOwotCQlkb3duX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CisJCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZ2Y3B1LT5rdm0tPnNyY3UpOwogCQlnb3RvIGFnYWluOwogCX0KIApAQCAtOTcxLDcgKzk2OCw3IEBACiAJCQlnb3RvIG91dDsKIAkJciA9IGt2bV9zZXR1cF9kZWZhdWx0X2lycV9yb3V0aW5nKGt2bSk7CiAJCWlmIChyKSB7Ci0JCQlrZnJlZShrdm0tPmFyY2gudmlvYXBpYyk7CisJCQlrdm1faW9hcGljX2Rlc3Ryb3koa3ZtKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCWJyZWFrOwpAQCAtMTM3NywxMiArMTM3NCwxNCBAQAogCiBzdGF0aWMgdm9pZCBrdm1fcmVsZWFzZV92bV9wYWdlcyhzdHJ1Y3Qga3ZtICprdm0pCiB7CisJc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHM7CiAJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDsKIAlpbnQgaSwgajsKIAl1bnNpZ25lZCBsb25nIGJhc2VfZ2ZuOwogCi0JZm9yIChpID0gMDsgaSA8IGt2bS0+bm1lbXNsb3RzOyBpKyspIHsKLQkJbWVtc2xvdCA9ICZrdm0tPm1lbXNsb3RzW2ldOworCXNsb3RzID0gcmN1X2RlcmVmZXJlbmNlKGt2bS0+bWVtc2xvdHMpOworCWZvciAoaSA9IDA7IGkgPCBzbG90cy0+bm1lbXNsb3RzOyBpKyspIHsKKwkJbWVtc2xvdCA9ICZzbG90cy0+bWVtc2xvdHNbaV07CiAJCWJhc2VfZ2ZuID0gbWVtc2xvdC0+YmFzZV9nZm47CiAKIAkJZm9yIChqID0gMDsgaiA8IG1lbXNsb3QtPm5wYWdlczsgaisrKSB7CkBAIC0xNDA1LDYgKzE0MDQsNyBAQAogCWtmcmVlKGt2bS0+YXJjaC52aW9hcGljKTsKIAlrdm1fcmVsZWFzZV92bV9wYWdlcyhrdm0pOwogCWt2bV9mcmVlX3BoeXNtZW0oa3ZtKTsKKwljbGVhbnVwX3NyY3Vfc3RydWN0KCZrdm0tPnNyY3UpOwogCWZyZWVfa3ZtKGt2bSk7CiB9CiAKQEAgLTE1NzYsMTUgKzE1NzYsMTUgQEAKIAlyZXR1cm4gcjsKIH0KIAotaW50IGt2bV9hcmNoX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKLQkJc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbiAqbWVtLAoraW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCisJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsCiAJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3Qgb2xkLAorCQlzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uICptZW0sCiAJCWludCB1c2VyX2FsbG9jKQogewogCXVuc2lnbmVkIGxvbmcgaTsKIAl1bnNpZ25lZCBsb25nIHBmbjsKLQlpbnQgbnBhZ2VzID0gbWVtLT5tZW1vcnlfc2l6ZSA+PiBQQUdFX1NISUZUOwotCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QgPSAma3ZtLT5tZW1zbG90c1ttZW0tPnNsb3RdOworCWludCBucGFnZXMgPSBtZW1zbG90LT5ucGFnZXM7CiAJdW5zaWduZWQgbG9uZyBiYXNlX2dmbiA9IG1lbXNsb3QtPmJhc2VfZ2ZuOwogCiAJaWYgKGJhc2VfZ2ZuICsgbnBhZ2VzID4gKEtWTV9NQVhfTUVNX1NJWkUgPj4gUEFHRV9TSElGVCkpCkBAIC0xNjA4LDYgKzE2MDgsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCisJCXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24gKm1lbSwKKwkJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCBvbGQsCisJCWludCB1c2VyX2FsbG9jKQoreworCXJldHVybjsKK30KKwogdm9pZCBrdm1fYXJjaF9mbHVzaF9zaGFkb3coc3RydWN0IGt2bSAqa3ZtKQogewogCWt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pOwpAQCAtMTgwMiw3ICsxODEwLDcgQEAKIAlpZiAobG9nLT5zbG90ID49IEtWTV9NRU1PUllfU0xPVFMpCiAJCWdvdG8gb3V0OwogCi0JbWVtc2xvdCA9ICZrdm0tPm1lbXNsb3RzW2xvZy0+c2xvdF07CisJbWVtc2xvdCA9ICZrdm0tPm1lbXNsb3RzLT5tZW1zbG90c1tsb2ctPnNsb3RdOwogCXIgPSAtRU5PRU5UOwogCWlmICghbWVtc2xvdC0+ZGlydHlfYml0bWFwKQogCQlnb3RvIG91dDsKQEAgLTE4MjcsNiArMTgzNSw3IEBACiAJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdDsKIAlpbnQgaXNfZGlydHkgPSAwOwogCisJbXV0ZXhfbG9jaygma3ZtLT5zbG90c19sb2NrKTsKIAlzcGluX2xvY2soJmt2bS0+YXJjaC5kaXJ0eV9sb2dfbG9jayk7CiAKIAlyID0ga3ZtX2lhNjRfc3luY19kaXJ0eV9sb2coa3ZtLCBsb2cpOwpAQCAtMTg0MCwxMiArMTg0OSwxMyBAQAogCS8qIElmIG5vdGhpbmcgaXMgZGlydHksIGRvbid0IGJvdGhlciBtZXNzaW5nIHdpdGggcGFnZSB0YWJsZXMuICovCiAJaWYgKGlzX2RpcnR5KSB7CiAJCWt2bV9mbHVzaF9yZW1vdGVfdGxicyhrdm0pOwotCQltZW1zbG90ID0gJmt2bS0+bWVtc2xvdHNbbG9nLT5zbG90XTsKKwkJbWVtc2xvdCA9ICZrdm0tPm1lbXNsb3RzLT5tZW1zbG90c1tsb2ctPnNsb3RdOwogCQluID0gQUxJR04obWVtc2xvdC0+bnBhZ2VzLCBCSVRTX1BFUl9MT05HKSAvIDg7CiAJCW1lbXNldChtZW1zbG90LT5kaXJ0eV9iaXRtYXAsIDAsIG4pOwogCX0KIAlyID0gMDsKIG91dDoKKwltdXRleF91bmxvY2soJmt2bS0+c2xvdHNfbG9jayk7CiAJc3Bpbl91bmxvY2soJmt2bS0+YXJjaC5kaXJ0eV9sb2dfbG9jayk7CiAJcmV0dXJuIHI7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL2t2bV9mdy5jIGIvYXJjaC9pYTY0L2t2bS9rdm1fZncuYwppbmRleCBlNGI4MjMxLi5jYjU0OGVlIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva3ZtL2t2bV9mdy5jCisrKyBiL2FyY2gvaWE2NC9rdm0va3ZtX2Z3LmMKQEAgLTc1LDcgKzc1LDcgQEAKIAlzdHJ1Y3QgZXhpdF9jdGxfZGF0YSAqcDsKIAogCXAgPSBrdm1fZ2V0X2V4aXRfZGF0YSh2Y3B1KTsKLQlpZiAocCAmJiBwLT5leGl0X3JlYXNvbiA9PSBFWElUX1JFQVNPTl9QQUxfQ0FMTCkgeworCWlmIChwLT5leGl0X3JlYXNvbiA9PSBFWElUX1JFQVNPTl9QQUxfQ0FMTCkgewogCQlwLT51LnBhbF9kYXRhLnJldCA9IHJlc3VsdDsKIAkJcmV0dXJuIDsKIAl9CkBAIC04Nyw3ICs4Nyw3IEBACiAJc3RydWN0IGV4aXRfY3RsX2RhdGEgKnA7CiAKIAlwID0ga3ZtX2dldF9leGl0X2RhdGEodmNwdSk7Ci0JaWYgKHAgJiYgcC0+ZXhpdF9yZWFzb24gPT0gRVhJVF9SRUFTT05fU0FMX0NBTEwpIHsKKwlpZiAocC0+ZXhpdF9yZWFzb24gPT0gRVhJVF9SRUFTT05fU0FMX0NBTEwpIHsKIAkJcC0+dS5zYWxfZGF0YS5yZXQgPSByZXN1bHQ7CiAJCXJldHVybiA7CiAJfQpAQCAtMzIyLDcgKzMyMiw3IEBACiAJc3RydWN0IGV4aXRfY3RsX2RhdGEgKnA7CiAKIAlwID0ga3ZtX2dldF9leGl0X2RhdGEodmNwdSk7Ci0JaWYgKHAgJiYgKHAtPmV4aXRfcmVhc29uID09IEVYSVRfUkVBU09OX1BBTF9DQUxMKSkKKwlpZiAocC0+ZXhpdF9yZWFzb24gPT0gRVhJVF9SRUFTT05fUEFMX0NBTEwpCiAJCWluZGV4ID0gcC0+dS5wYWxfZGF0YS5ncjI4OwogCiAJcmV0dXJuIGluZGV4OwpAQCAtNjQ2LDE4ICs2NDYsMTYgQEAKIAogCXAgPSBrdm1fZ2V0X2V4aXRfZGF0YSh2Y3B1KTsKIAotCWlmIChwKSB7Ci0JCWlmIChwLT5leGl0X3JlYXNvbiA9PSBFWElUX1JFQVNPTl9TQUxfQ0FMTCkgewotCQkJKmluMCA9IHAtPnUuc2FsX2RhdGEuaW4wOwotCQkJKmluMSA9IHAtPnUuc2FsX2RhdGEuaW4xOwotCQkJKmluMiA9IHAtPnUuc2FsX2RhdGEuaW4yOwotCQkJKmluMyA9IHAtPnUuc2FsX2RhdGEuaW4zOwotCQkJKmluNCA9IHAtPnUuc2FsX2RhdGEuaW40OwotCQkJKmluNSA9IHAtPnUuc2FsX2RhdGEuaW41OwotCQkJKmluNiA9IHAtPnUuc2FsX2RhdGEuaW42OwotCQkJKmluNyA9IHAtPnUuc2FsX2RhdGEuaW43OwotCQkJcmV0dXJuIDsKLQkJfQorCWlmIChwLT5leGl0X3JlYXNvbiA9PSBFWElUX1JFQVNPTl9TQUxfQ0FMTCkgeworCQkqaW4wID0gcC0+dS5zYWxfZGF0YS5pbjA7CisJCSppbjEgPSBwLT51LnNhbF9kYXRhLmluMTsKKwkJKmluMiA9IHAtPnUuc2FsX2RhdGEuaW4yOworCQkqaW4zID0gcC0+dS5zYWxfZGF0YS5pbjM7CisJCSppbjQgPSBwLT51LnNhbF9kYXRhLmluNDsKKwkJKmluNSA9IHAtPnUuc2FsX2RhdGEuaW41OworCQkqaW42ID0gcC0+dS5zYWxfZGF0YS5pbjY7CisJCSppbjcgPSBwLT51LnNhbF9kYXRhLmluNzsKKwkJcmV0dXJuIDsKIAl9CiAJKmluMCA9IDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva3ZtL21taW8uYyBiL2FyY2gvaWE2NC9rdm0vbW1pby5jCmluZGV4IDliZjU1YWYuLmZiOGY5ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vbW1pby5jCisrKyBiL2FyY2gvaWE2NC9rdm0vbW1pby5jCkBAIC0zMTYsOCArMzE2LDggQEAKIAkJcmV0dXJuOwogCX0gZWxzZSB7CiAJCWluc3RfdHlwZSA9IC0xOwotCQlwYW5pY192bSh2Y3B1LCAiVW5zdXBwb3J0ZWQgTU1JTyBhY2Nlc3MgaW5zdHJ1Y3Rpb24hIFwKLQkJCQlCdW5sZFswXT0weCVseCwgQnVuZGxlWzFdPTB4JWx4XG4iLAorCQlwYW5pY192bSh2Y3B1LCAiVW5zdXBwb3J0ZWQgTU1JTyBhY2Nlc3MgaW5zdHJ1Y3Rpb24hICIKKwkJCQkiQnVubGRbMF09MHglbHgsIEJ1bmRsZVsxXT0weCVseFxuIiwKIAkJCQlidW5kbGUuaTY0WzBdLCBidW5kbGUuaTY0WzFdKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rdm0vdmNwdS5jIGIvYXJjaC9pYTY0L2t2bS92Y3B1LmMKaW5kZXggZGNlNzViNzAuLjk1ODgxNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rdm0vdmNwdS5jCisrKyBiL2FyY2gvaWE2NC9rdm0vdmNwdS5jCkBAIC0xNjM5LDggKzE2MzksOCBAQAogCSAqIE90aGVyd2lzZSBwYW5pYwogCSAqLwogCWlmICh2YWwgJiAoSUE2NF9QU1JfUEsgfCBJQTY0X1BTUl9JUyB8IElBNjRfUFNSX1ZNKSkKLQkJcGFuaWNfdm0odmNwdSwgIk9ubHkgc3VwcG9ydCBndWVzdHMgd2l0aCB2cHNyLnBrID0wIFwKLQkJCQkmIHZwc3IuaXM9MFxuIik7CisJCXBhbmljX3ZtKHZjcHUsICJPbmx5IHN1cHBvcnQgZ3Vlc3RzIHdpdGggdnBzci5wayA9MCAiCisJCQkJIiYgdnBzci5pcz0wXG4iKTsKIAogCS8qCiAJICogRm9yIHRob3NlIElBNjRfUFNSIGJpdHM6IGlkL2RhL2RkL3NzL2VkL2lhCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMgYi9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMKaW5kZXggMTljNGIyMS4uOGQ1ODZkMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCisrKyBiL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYwpAQCAtNDU5LDcgKzQ1OSw3IEBACiAJCWNwdSA9IDA7CiAJCW5vZGUgPSBub2RlX2NwdWlkW2NwdV0ubmlkOwogCQljcHUwX2NwdV9pbmZvID0gKHN0cnVjdCBjcHVpbmZvX2lhNjQgKikoX19waHlzX3Blcl9jcHVfc3RhcnQgKwotCQkJKChjaGFyICopJnBlcl9jcHVfX2lhNjRfY3B1X2luZm8gLSBfX3Blcl9jcHVfc3RhcnQpKTsKKwkJCSgoY2hhciAqKSZpYTY0X2NwdV9pbmZvIC0gX19wZXJfY3B1X3N0YXJ0KSk7CiAJCWNwdTBfY3B1X2luZm8tPm5vZGVfZGF0YSA9IG1lbV9kYXRhW25vZGVdLm5vZGVfZGF0YTsKIAl9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL2luaXQuYyBiL2FyY2gvaWE2NC9tbS9pbml0LmMKaW5kZXggY2EzMzM1ZS4uZWQ0MTc1OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL2luaXQuYworKysgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCkBAIC0xMTcsNiArMTE3LDcgQEAKIAkgKi8KIAl2bWEgPSBrbWVtX2NhY2hlX3phbGxvYyh2bV9hcmVhX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CiAJaWYgKHZtYSkgeworCQlJTklUX0xJU1RfSEVBRCgmdm1hLT5hbm9uX3ZtYV9jaGFpbik7CiAJCXZtYS0+dm1fbW0gPSBjdXJyZW50LT5tbTsKIAkJdm1hLT52bV9zdGFydCA9IGN1cnJlbnQtPnRocmVhZC5yYnNfYm90ICYgUEFHRV9NQVNLOwogCQl2bWEtPnZtX2VuZCA9IHZtYS0+dm1fc3RhcnQgKyBQQUdFX1NJWkU7CkBAIC0xMzUsNiArMTM2LDcgQEAKIAlpZiAoIShjdXJyZW50LT5wZXJzb25hbGl0eSAmIE1NQVBfUEFHRV9aRVJPKSkgewogCQl2bWEgPSBrbWVtX2NhY2hlX3phbGxvYyh2bV9hcmVhX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CiAJCWlmICh2bWEpIHsKKwkJCUlOSVRfTElTVF9IRUFEKCZ2bWEtPmFub25fdm1hX2NoYWluKTsKIAkJCXZtYS0+dm1fbW0gPSBjdXJyZW50LT5tbTsKIAkJCXZtYS0+dm1fZW5kID0gUEFHRV9TSVpFOwogCQkJdm1hLT52bV9wYWdlX3Byb3QgPSBfX3BncHJvdChwZ3Byb3RfdmFsKFBBR0VfUkVBRE9OTFkpIHwgX1BBR0VfTUFfTkFUKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc2V0dXAuYwppbmRleCBlNDU2ZjA2Li5kMDBkZmMxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvc24va2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L3NuL2tlcm5lbC9zZXR1cC5jCkBAIC0yNDEsNyArMjQxLDcgQEAKICAqIE5vdGU6ICBUaGlzIHN0dWZmIGlzIGR1cGVkIGhlcmUgYmVjYXVzZSBBbHRpeCByZXF1aXJlcyB0aGUgUENEUCB0bwogICogbG9jYXRlIGEgdXNhYmxlIFZHQSBkZXZpY2UgZHVlIHRvIGxhY2sgb2YgcHJvcGVyIEFDUEkgc3VwcG9ydC4gIFN0cnVjdHVyZXMKICAqIGNvdWxkIGJlIHVzZWQgZnJvbSBkcml2ZXJzL2Zpcm13YXJlL3BjZHAuaCwgYnV0IGl0IHdhcyBkZWNpZGVkIHRoYXQgbW92aW5nCi0gKiB0aGlzIGZpbGUgdG8gYSBtb3JlIHB1YmxpYyBsb2NhdGlvbiBqdXN0IGZvciBBbHRpeCB1c2Ugd2FzIHVuZGVzaXJlYWJsZS4KKyAqIHRoaXMgZmlsZSB0byBhIG1vcmUgcHVibGljIGxvY2F0aW9uIGp1c3QgZm9yIEFsdGl4IHVzZSB3YXMgdW5kZXNpcmFibGUuCiAgKi8KIAogc3RydWN0IGhjZHBfdWFydF9kZXNjIHsKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9sb2NhbC5oIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2xvY2FsLmgKaW5kZXggMjIyNTZkMS4uNzM0YmNhOCAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2xvY2FsLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL2xvY2FsLmgKQEAgLTMzOCwyOSArMzM4LDQgQEAKICAqIGEgdmFyaWFibGUsIG5vdCBhbiBhZGRyZXNzLgogICovCiAKLS8qIE5lZWQgdG8gZGlzYWJsZSBwcmVlbXB0aW9uIGZvciB0aGUgY3B1IGxvY2FsIGNvdW50ZXJzIG90aGVyd2lzZSB3ZSBjb3VsZAotICAgc3RpbGwgYWNjZXNzIGEgdmFyaWFibGUgb2YgYSBwcmV2aW91cyBDUFUgaW4gYSBub24gbG9jYWwgd2F5LiAqLwotI2RlZmluZSBjcHVfbG9jYWxfd3JhcF92KGwpCSAJXAotCSh7IGxvY2FsX3QgcmVzX187CQlcCi0JICAgcHJlZW1wdF9kaXNhYmxlKCk7IAkJXAotCSAgIHJlc19fID0gKGwpOwkJCVwKLQkgICBwcmVlbXB0X2VuYWJsZSgpOwkJXAotCSAgIHJlc19fOyB9KQotI2RlZmluZSBjcHVfbG9jYWxfd3JhcChsKQkJXAotCSh7IHByZWVtcHRfZGlzYWJsZSgpOwkJXAotCSAgIGw7CQkJCVwKLQkgICBwcmVlbXB0X2VuYWJsZSgpOyB9KQkJXAotCi0jZGVmaW5lIGNwdV9sb2NhbF9yZWFkKGwpICAgIGNwdV9sb2NhbF93cmFwX3YobG9jYWxfcmVhZCgmX19nZXRfY3B1X3ZhcihsKSkpCi0jZGVmaW5lIGNwdV9sb2NhbF9zZXQobCwgaSkgIGNwdV9sb2NhbF93cmFwKGxvY2FsX3NldCgmX19nZXRfY3B1X3ZhcihsKSwgKGkpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX2luYyhsKSAgICAgY3B1X2xvY2FsX3dyYXAobG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKGwpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX2RlYyhsKSAgICAgY3B1X2xvY2FsX3dyYXAobG9jYWxfZGVjKCZfX2dldF9jcHVfdmFyKGwpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX2FkZChpLCBsKSAgY3B1X2xvY2FsX3dyYXAobG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIobCkpKQotI2RlZmluZSBjcHVfbG9jYWxfc3ViKGksIGwpICBjcHVfbG9jYWxfd3JhcChsb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkpCi0KLSNkZWZpbmUgX19jcHVfbG9jYWxfaW5jKGwpCWNwdV9sb2NhbF9pbmMobCkKLSNkZWZpbmUgX19jcHVfbG9jYWxfZGVjKGwpCWNwdV9sb2NhbF9kZWMobCkKLSNkZWZpbmUgX19jcHVfbG9jYWxfYWRkKGksIGwpCWNwdV9sb2NhbF9hZGQoKGkpLCAobCkpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX3N1YihpLCBsKQljcHVfbG9jYWxfc3ViKChpKSwgKGwpKQotCiAjZW5kaWYgLyogX19NMzJSX0xPQ0FMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCBhMDc1NWI5Li44NDBhMTIzIDEwMDY0NAotLS0gYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xMjAsNiArMTIwLDggQEAKIAogI2luY2x1ZGUgPGFzbS9tMzJyLmg+CQkvKiBNMzJSX1BTV19CU00sIE0zMlJfUFNXX0JQTSAqLwogCisjZGVmaW5lIGFyY2hfaGFzX3NpbmdsZV9zdGVwKCkgKDEpCisKIHN0cnVjdCB0YXNrX3N0cnVjdDsKIGV4dGVybiB2b2lkIGluaXRfZGVidWdfdHJhcHMoc3RydWN0IHRhc2tfc3RydWN0ICopOwogI2RlZmluZSBhcmNoX3B0cmFjZV9hdHRhY2goY2hpbGQpIFwKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9pbmNsdWRlL2FzbS91bmlzdGQuaCBiL2FyY2gvbTMyci9pbmNsdWRlL2FzbS91bmlzdGQuaAppbmRleCBjZjcwMWM5Li43NjEyNTc3IDEwMDY0NAotLS0gYS9hcmNoL20zMnIvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9tMzJyL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCkBAIC0zMzksNiArMzM5LDcgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0lQQwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1RJTUUKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1VUSU1FCmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3B0cmFjZS5jIGIvYXJjaC9tMzJyL2tlcm5lbC9wdHJhY2UuYwppbmRleCA5ODY4MmJiLi5lNTU1MDkxIDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvcHRyYWNlLmMKQEAgLTU4MCw2ICs1ODAsMzUgQEAKIAl9CiB9CiAKK3ZvaWQgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3sKKwl1bnNpZ25lZCBsb25nIG5leHRfcGM7CisJdW5zaWduZWQgbG9uZyBwYywgaW5zbjsKKworCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOworCisJLyogQ29tcHV0ZSBuZXh0IHBjLiAgKi8KKwlwYyA9IGdldF9zdGFja19sb25nKGNoaWxkLCBQVF9CUEMpOworCisJaWYgKGFjY2Vzc19wcm9jZXNzX3ZtKGNoaWxkLCBwYyZ+MywgJmluc24sIHNpemVvZihpbnNuKSwgMCkKKwkgICAgIT0gc2l6ZW9mKGluc24pKQorCQlicmVhazsKKworCWNvbXB1dGVfbmV4dF9wYyhpbnNuLCBwYywgJm5leHRfcGMsIGNoaWxkKTsKKwlpZiAobmV4dF9wYyAmIDB4ODAwMDAwMDApCisJCWJyZWFrOworCisJaWYgKGVtYmVkX2RlYnVnX3RyYXAoY2hpbGQsIG5leHRfcGMpKQorCQlicmVhazsKKworCWludmFsaWRhdGVfY2FjaGUoKTsKK30KKwordm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3sKKwl1bnJlZ2lzdGVyX2FsbF9kZWJ1Z190cmFwcyhjaGlsZCk7CisJaW52YWxpZGF0ZV9jYWNoZSgpOworfQogCiAvKgogICogQ2FsbGVkIGJ5IGtlcm5lbC9wdHJhY2UuYyB3aGVuIGRldGFjaGluZy4uCkBAIC02MzAsNzQgKzY1OSw2IEBACiAJCXJldCA9IHB0cmFjZV93cml0ZV91c2VyKGNoaWxkLCBhZGRyLCBkYXRhKTsKIAkJYnJlYWs7CiAKLQkvKgotCSAqIGNvbnRpbnVlL3Jlc3RhcnQgYW5kIHN0b3AgYXQgbmV4dCAocmV0dXJuIGZyb20pIHN5c2NhbGwKLQkgKi8KLQljYXNlIFBUUkFDRV9TWVNDQUxMOgotCWNhc2UgUFRSQUNFX0NPTlQ6Ci0JCXJldCA9IC1FSU87Ci0JCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQotCQkJYnJlYWs7Ci0JCWlmIChyZXF1ZXN0ID09IFBUUkFDRV9TWVNDQUxMKQotCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCQllbHNlCi0JCQljbGVhcl90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKLQkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7Ci0JCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7Ci0JCXJldCA9IDA7Ci0JCWJyZWFrOwotCi0JLyoKLQkgKiBtYWtlIHRoZSBjaGlsZCBleGl0LiAgQmVzdCBJIGNhbiBkbyBpcyBzZW5kIGl0IGEgc2lna2lsbC4KLQkgKiBwZXJoYXBzIGl0IHNob3VsZCBiZSBwdXQgaW4gdGhlIHN0YXR1cyB0aGF0IGl0IHdhbnRzIHRvCi0JICogZXhpdC4KLQkgKi8KLQljYXNlIFBUUkFDRV9LSUxMOiB7Ci0JCXJldCA9IDA7Ci0JCXVucmVnaXN0ZXJfYWxsX2RlYnVnX3RyYXBzKGNoaWxkKTsKLQkJaW52YWxpZGF0ZV9jYWNoZSgpOwotCQlpZiAoY2hpbGQtPmV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUpCS8qIGFscmVhZHkgZGVhZCAqLwotCQkJYnJlYWs7Ci0JCWNoaWxkLT5leGl0X2NvZGUgPSBTSUdLSUxMOwotCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOwotCQlicmVhazsKLQl9Ci0KLQkvKgotCSAqIGV4ZWN1dGUgc2luZ2xlIGluc3RydWN0aW9uLgotCSAqLwotCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6IHsKLQkJdW5zaWduZWQgbG9uZyBuZXh0X3BjOwotCQl1bnNpZ25lZCBsb25nIHBjLCBpbnNuOwotCi0JCXJldCA9IC1FSU87Ci0JCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQotCQkJYnJlYWs7Ci0JCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCi0JCS8qIENvbXB1dGUgbmV4dCBwYy4gICovCi0JCXBjID0gZ2V0X3N0YWNrX2xvbmcoY2hpbGQsIFBUX0JQQyk7Ci0KLQkJaWYgKGFjY2Vzc19wcm9jZXNzX3ZtKGNoaWxkLCBwYyZ+MywgJmluc24sIHNpemVvZihpbnNuKSwgMCkKLQkJICAgICE9IHNpemVvZihpbnNuKSkKLQkJCWJyZWFrOwotCi0JCWNvbXB1dGVfbmV4dF9wYyhpbnNuLCBwYywgJm5leHRfcGMsIGNoaWxkKTsKLQkJaWYgKG5leHRfcGMgJiAweDgwMDAwMDAwKQotCQkJYnJlYWs7Ci0KLQkJaWYgKGVtYmVkX2RlYnVnX3RyYXAoY2hpbGQsIG5leHRfcGMpKQotCQkJYnJlYWs7Ci0KLQkJaW52YWxpZGF0ZV9jYWNoZSgpOwotCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKLQotCQkvKiBnaXZlIGl0IGEgY2hhbmNlIHRvIHJ1bi4gKi8KLQkJd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKLQkJcmV0ID0gMDsKLQkJYnJlYWs7Ci0JfQotCiAJY2FzZSBQVFJBQ0VfR0VUUkVHUzoKIAkJcmV0ID0gcHRyYWNlX2dldHJlZ3MoY2hpbGQsICh2b2lkIF9fdXNlciAqKWRhdGEpOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9rZXJuZWwvc3lzX20zMnIuYyBiL2FyY2gvbTMyci9rZXJuZWwvc3lzX20zMnIuYwppbmRleCBkM2M4NjVjLi4wYTAwZjQ2IDEwMDY0NAotLS0gYS9hcmNoL20zMnIva2VybmVsL3N5c19tMzJyLmMKKysrIGIvYXJjaC9tMzJyL2tlcm5lbC9zeXNfbTMyci5jCkBAIC03Niw5OCArNzYsNiBAQAogCXJldHVybiBvbGR2YWw7CiB9CiAKLS8qCi0gKiBzeXNfaXBjKCkgaXMgdGhlIGRlLW11bHRpcGxleGVyIGZvciB0aGUgU3lzViBJUEMgY2FsbHMuLgotICoKLSAqIFRoaXMgaXMgcmVhbGx5IGhvcnJpYmx5IHVnbHkuCi0gKi8KLWFzbWxpbmthZ2UgaW50IHN5c19pcGModWludCBjYWxsLCBpbnQgZmlyc3QsIGludCBzZWNvbmQsCi0JCSAgICAgICBpbnQgdGhpcmQsIHZvaWQgX191c2VyICpwdHIsIGxvbmcgZmlmdGgpCi17Ci0JaW50IHZlcnNpb24sIHJldDsKLQotCXZlcnNpb24gPSBjYWxsID4+IDE2OyAvKiBoYWNrIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCi0JY2FsbCAmPSAweGZmZmY7Ci0KLQlzd2l0Y2ggKGNhbGwpIHsKLQljYXNlIFNFTU9QOgotCQlyZXR1cm4gc3lzX3NlbXRpbWVkb3AoZmlyc3QsIChzdHJ1Y3Qgc2VtYnVmIF9fdXNlciAqKXB0ciwKLQkJCQkgICAgICBzZWNvbmQsIE5VTEwpOwotCWNhc2UgU0VNVElNRURPUDoKLQkJcmV0dXJuIHN5c19zZW10aW1lZG9wKGZpcnN0LCAoc3RydWN0IHNlbWJ1ZiBfX3VzZXIgKilwdHIsCi0JCQkJICAgICAgc2Vjb25kLCAoY29uc3Qgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqKWZpZnRoKTsKLQljYXNlIFNFTUdFVDoKLQkJcmV0dXJuIHN5c19zZW1nZXQgKGZpcnN0LCBzZWNvbmQsIHRoaXJkKTsKLQljYXNlIFNFTUNUTDogewotCQl1bmlvbiBzZW11biBmb3VydGg7Ci0JCWlmICghcHRyKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChnZXRfdXNlcihmb3VydGguX19wYWQsICh2b2lkIF9fdXNlciAqIF9fdXNlciAqKSBwdHIpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiBzeXNfc2VtY3RsIChmaXJzdCwgc2Vjb25kLCB0aGlyZCwgZm91cnRoKTsKLQkJfQotCi0JY2FzZSBNU0dTTkQ6Ci0JCXJldHVybiBzeXNfbXNnc25kIChmaXJzdCwgKHN0cnVjdCBtc2didWYgX191c2VyICopIHB0ciwKLQkJCQkgICBzZWNvbmQsIHRoaXJkKTsKLQljYXNlIE1TR1JDVjoKLQkJc3dpdGNoICh2ZXJzaW9uKSB7Ci0JCWNhc2UgMDogewotCQkJc3RydWN0IGlwY19rbHVkZ2UgdG1wOwotCQkJaWYgKCFwdHIpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmdG1wLAotCQkJCQkgICAoc3RydWN0IGlwY19rbHVkZ2UgX191c2VyICopIHB0ciwKLQkJCQkJICAgc2l6ZW9mICh0bXApKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiBzeXNfbXNncmN2IChmaXJzdCwgdG1wLm1zZ3AsIHNlY29uZCwKLQkJCQkJICAgdG1wLm1zZ3R5cCwgdGhpcmQpOwotCQkJfQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIHN5c19tc2dyY3YgKGZpcnN0LAotCQkJCQkgICAoc3RydWN0IG1zZ2J1ZiBfX3VzZXIgKikgcHRyLAotCQkJCQkgICBzZWNvbmQsIGZpZnRoLCB0aGlyZCk7Ci0JCX0KLQljYXNlIE1TR0dFVDoKLQkJcmV0dXJuIHN5c19tc2dnZXQgKChrZXlfdCkgZmlyc3QsIHNlY29uZCk7Ci0JY2FzZSBNU0dDVEw6Ci0JCXJldHVybiBzeXNfbXNnY3RsIChmaXJzdCwgc2Vjb25kLAotCQkJCSAgIChzdHJ1Y3QgbXNxaWRfZHMgX191c2VyICopIHB0cik7Ci0JY2FzZSBTSE1BVDogewotCQl1bG9uZyByYWRkcjsKLQotCQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsICh1bG9uZyBfX3VzZXIgKikgdGhpcmQsCi0JCQkJICAgICAgc2l6ZW9mKHVsb25nKSkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQkJcmV0ID0gZG9fc2htYXQgKGZpcnN0LCAoY2hhciBfX3VzZXIgKikgcHRyLCBzZWNvbmQsICZyYWRkcik7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gcmV0OwotCQlyZXR1cm4gcHV0X3VzZXIgKHJhZGRyLCAodWxvbmcgX191c2VyICopIHRoaXJkKTsKLQkJfQotCWNhc2UgU0hNRFQ6Ci0JCXJldHVybiBzeXNfc2htZHQgKChjaGFyIF9fdXNlciAqKXB0cik7Ci0JY2FzZSBTSE1HRVQ6Ci0JCXJldHVybiBzeXNfc2htZ2V0IChmaXJzdCwgc2Vjb25kLCB0aGlyZCk7Ci0JY2FzZSBTSE1DVEw6Ci0JCXJldHVybiBzeXNfc2htY3RsIChmaXJzdCwgc2Vjb25kLAotCQkJCSAgIChzdHJ1Y3Qgc2htaWRfZHMgX191c2VyICopIHB0cik7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9TWVM7Ci0JfQotfQotCi1hc21saW5rYWdlIGludCBzeXNfdW5hbWUoc3RydWN0IG9sZF91dHNuYW1lIF9fdXNlciAqIG5hbWUpCi17Ci0JaW50IGVycjsKLQlpZiAoIW5hbWUpCi0JCXJldHVybiAtRUZBVUxUOwotCWRvd25fcmVhZCgmdXRzX3NlbSk7Ci0JZXJyID0gY29weV90b191c2VyKG5hbWUsIHV0c25hbWUoKSwgc2l6ZW9mICgqbmFtZSkpOwotCXVwX3JlYWQoJnV0c19zZW0pOwotCXJldHVybiBlcnI/LUVGQVVMVDowOwotfQotCiBhc21saW5rYWdlIGludCBzeXNfY2FjaGVmbHVzaCh2b2lkICphZGRyLCBpbnQgYnl0ZXMsIGludCBjYWNoZSkKIHsKIAkvKiBUaGlzIHNob3VsZCBmbHVzaCBtb3JlIHNlbGVjdGl2ZWx5IC4uLiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9hdGFyaS9hdGFrZXliLmMgYi9hcmNoL202OGsvYXRhcmkvYXRha2V5Yi5jCmluZGV4IDRhZGQ5NmQuLjU4OTA4OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9hdGFyaS9hdGFrZXliLmMKKysrIGIvYXJjaC9tNjhrL2F0YXJpL2F0YWtleWIuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiAgKiBieXRlcyBoYXZlIGJlZW4gbG9zdCBhbmQgaW4gd2hpY2ggc3RhdGUgb2YgdGhlIHBhY2tldCBzdHJ1Y3R1cmUgd2UgYXJlIG5vdy4KICAqIFRoaXMgdXN1YWxseSBjYXVzZXMga2V5Ym9hcmRzIGJ5dGVzIHRvIGJlIGludGVycHJldGVkIGFzIG1vdXNlIG1vdmVtZW50cwogICogYW5kIHZpY2UgdmVyc2EsIHdoaWNoIGlzIHZlcnkgYW5ub3lpbmcuIEl0IHNlZW1zIGJldHRlciB0byB0aHJvdyBhd2F5IHNvbWUKLSAqIGJ5dGVzICh0aGF0IGFyZSB1c3VhbGx5IG1vdXNlIGJ5dGVzKSB0aGFuIHRvIG1pc2ludGVycHJldCB0aGVtLiBUaGVyZWZvciBJCisgKiBieXRlcyAodGhhdCBhcmUgdXN1YWxseSBtb3VzZSBieXRlcykgdGhhbiB0byBtaXNpbnRlcnByZXQgdGhlbS4gVGhlcmVmb3JlIEkKICAqIGludHJvZHVjZWQgdGhlIFJFU1lOQyBzdGF0ZSBmb3IgSUtCRCBkYXRhLiBJbiB0aGlzIHN0YXRlLCB0aGUgYnl0ZXMgdXAgdG8KICAqIG9uZSB0aGF0IHJlYWxseSBsb29rcyBsaWtlIGEga2V5IGV2ZW50ICgweDA0Li4weGYyKSBvciB0aGUgc3RhcnQgb2YgYSBtb3VzZQogICogcGFja2V0ICgweGY4Li4weGZiKSBhcmUgdGhyb3duIGF3YXksIGJ1dCBhdCBtb3N0IDIgYnl0ZXMuIFRoaXMgYXQgbGVhc3QKZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mYmlvLmggYi9hcmNoL202OGsvaW5jbHVkZS9hc20vZmJpby5oCmluZGV4IGI5MjE1YTAuLjBhMjFkYTggMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9mYmlvLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2ZiaW8uaApAQCAtMTczLDcgKzE3Myw3IEBACiAJaW50ICAgICBtZGlfbmNsdXRzOyAgICAgLyogTnVtYmVyIG9mIGltcGxlbWVudGVkIENMVVRzIGluIHRoaXMgTURJICovCiAgICAgICAgIGludCAgICAgbWRpX3R5cGU7ICAgICAgIC8qIEZCVFlQRSBuYW1lICovCiAgICAgICAgIGludCAgICAgbWRpX2hlaWdodDsgICAgIC8qIGhlaWdodCAqLwotICAgICAgICBpbnQgICAgIG1kaV93aWR0aDsgICAgICAvKiB3aWRodCAqLworICAgICAgICBpbnQgICAgIG1kaV93aWR0aDsgICAgICAvKiB3aWR0aCAqLwogICAgICAgICBpbnQgICAgIG1kaV9zaXplOyAgICAgICAvKiBhdmFpbGFibGUgcmFtICovCiAgICAgICAgIGludCAgICAgbWRpX21vZGU7ICAgICAgIC8qIDhicHAsIDE2YnBwIG9yIDMyYnBwICovCiAgICAgICAgIGludCAgICAgbWRpX3BpeGZyZXE7ICAgIC8qIHBpeGVsIGNsb2NrIChmcm9tIFBST00pICovCmRpZmYgLS1naXQgYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaW9fbm8uaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pb19uby5oCmluZGV4IDM1OTA2NWQ1Li42ZTI0MTNlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaW9fbm8uaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vaW9fbm8uaApAQCAtMTYsNyArMTYsNyBAQAogICogbWVtb3J5IGxvY2F0aW9uIGRpcmVjdGx5LgogICovCiAvKiArK3JvbWFuOiBUaGUgYXNzaWdubWVudHMgdG8gdGVtcC4gdmFycyBhdm9pZCB0aGF0IGdjYyBzb21ldGltZXMgZ2VuZXJhdGVzCi0gKiB0d28gYWNjZXNzZXMgdG8gbWVtb3J5LCB3aGljaCBtYXkgYmUgdW5kZXNpcmVhYmxlIGZvciBzb21lIGRldmljZXMuCisgKiB0d28gYWNjZXNzZXMgdG8gbWVtb3J5LCB3aGljaCBtYXkgYmUgdW5kZXNpcmFibGUgZm9yIHNvbWUgZGV2aWNlcy4KICAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IDIxNjA1YzcuLjZlNmUzYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTg3LDE4ICs4NywxMCBAQAogI2RlZmluZSBwcm9maWxlX3BjKHJlZ3MpIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykKIGV4dGVybiB2b2lkIHNob3dfcmVncyhzdHJ1Y3QgcHRfcmVncyAqKTsKIAotLyoKLSAqIFRoZXNlIGFyZSBkZWZpbmVkIGFzIHBlciBsaW51eC9wdHJhY2UuaC4KLSAqLwotc3RydWN0IHRhc2tfc3RydWN0OwotCiAjZGVmaW5lIGFyY2hfaGFzX3NpbmdsZV9zdGVwKCkJKDEpCi1leHRlcm4gdm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7Ci1leHRlcm4gdm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICopOwogCiAjaWZkZWYgQ09ORklHX01NVQogI2RlZmluZSBhcmNoX2hhc19ibG9ja19zdGVwKCkJKDEpCi1leHRlcm4gdm9pZCB1c2VyX2VuYWJsZV9ibG9ja19zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKICNlbmRpZgogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGQ3MmE3MWQuLjYwYjE1ZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL202OGsvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTM1MSw2ICszNTEsNyBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfSVBDCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTApAQCAtMzYzLDYgKzM2NCw4IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9NTUFQCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfU0VMRUNUCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL2VudHJ5LlMgYi9hcmNoL202OGsva2VybmVsL2VudHJ5LlMKaW5kZXggZTEzNmI4Yy4uMjM5MWJkZiAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvZW50cnkuUwpAQCAtNTEwLDcgKzUxMCw3IEBACiAJLmxvbmcgc3lzX3NldHRpbWVvZmRheQogCS5sb25nIHN5c19nZXRncm91cHMxNgkvKiA4MCAqLwogCS5sb25nIHN5c19zZXRncm91cHMxNgotCS5sb25nIG9sZF9zZWxlY3QKKwkubG9uZyBzeXNfb2xkX3NlbGVjdAogCS5sb25nIHN5c19zeW1saW5rCiAJLmxvbmcgc3lzX2xzdGF0CiAJLmxvbmcgc3lzX3JlYWRsaW5rCS8qIDg1ICovCkBAIC01MTgsNyArNTE4LDcgQEAKIAkubG9uZyBzeXNfc3dhcG9uCiAJLmxvbmcgc3lzX3JlYm9vdAogCS5sb25nIHN5c19vbGRfcmVhZGRpcgotCS5sb25nIG9sZF9tbWFwCQkvKiA5MCAqLworCS5sb25nIHN5c19vbGRfbW1hcAkvKiA5MCAqLwogCS5sb25nIHN5c19tdW5tYXAKIAkubG9uZyBzeXNfdHJ1bmNhdGUKIAkubG9uZyBzeXNfZnRydW5jYXRlCmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3N5c19tNjhrLmMgYi9hcmNoL202OGsva2VybmVsL3N5c19tNjhrLmMKaW5kZXggZTNhZDJkNi4uNzc4OTY2OSAxMDA2NDQKLS0tIGEvYXJjaC9tNjhrL2tlcm5lbC9zeXNfbTY4ay5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvc3lzX202OGsuYwpAQCAtNDYsMTM3ICs0Niw2IEBACiAJcmV0dXJuIHN5c19tbWFwX3Bnb2ZmKGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsIGZkLCBwZ29mZik7CiB9CiAKLS8qCi0gKiBQZXJmb3JtIHRoZSBzZWxlY3QobmQsIGluLCBvdXQsIGV4LCB0dikgYW5kIG1tYXAoKSBzeXN0ZW0KLSAqIGNhbGxzLiBMaW51eC9tNjhrIGNsb25lZCBMaW51eC9pMzg2LCB3aGljaCBkaWRuJ3QgdXNlIHRvIGJlIGFibGUgdG8KLSAqIGhhbmRsZSBtb3JlIHRoYW4gNCBzeXN0ZW0gY2FsbCBwYXJhbWV0ZXJzLCBzbyB0aGVzZSBzeXN0ZW0gY2FsbHMKLSAqIHVzZWQgYSBtZW1vcnkgYmxvY2sgZm9yIHBhcmFtZXRlciBwYXNzaW5nLi4KLSAqLwotCi1zdHJ1Y3QgbW1hcF9hcmdfc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JdW5zaWduZWQgbG9uZyBsZW47Ci0JdW5zaWduZWQgbG9uZyBwcm90OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBmZDsKLQl1bnNpZ25lZCBsb25nIG9mZnNldDsKLX07Ci0KLWFzbWxpbmthZ2UgaW50IG9sZF9tbWFwKHN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgX191c2VyICphcmcpCi17Ci0Jc3RydWN0IG1tYXBfYXJnX3N0cnVjdCBhOwotCWludCBlcnJvciA9IC1FRkFVTFQ7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmEsIGFyZywgc2l6ZW9mKGEpKSkKLQkJZ290byBvdXQ7Ci0KLQllcnJvciA9IC1FSU5WQUw7Ci0JaWYgKGEub2Zmc2V0ICYgflBBR0VfTUFTSykKLQkJZ290byBvdXQ7Ci0KLQllcnJvciA9IHN5c19tbWFwX3Bnb2ZmKGEuYWRkciwgYS5sZW4sIGEucHJvdCwgYS5mbGFncywgYS5mZCwKLQkJCSAgICAgICBhLm9mZnNldCA+PiBQQUdFX1NISUZUKTsKLW91dDoKLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXN0cnVjdCBzZWxfYXJnX3N0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBuOwotCWZkX3NldCBfX3VzZXIgKmlucCwgKm91dHAsICpleHA7Ci0Jc3RydWN0IHRpbWV2YWwgX191c2VyICp0dnA7Ci19OwotCi1hc21saW5rYWdlIGludCBvbGRfc2VsZWN0KHN0cnVjdCBzZWxfYXJnX3N0cnVjdCBfX3VzZXIgKmFyZykKLXsKLQlzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QgYTsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmYSwgYXJnLCBzaXplb2YoYSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQkvKiBzeXNfc2VsZWN0KCkgZG9lcyB0aGUgYXBwcm9wcmlhdGUga2VybmVsIGxvY2tpbmcgKi8KLQlyZXR1cm4gc3lzX3NlbGVjdChhLm4sIGEuaW5wLCBhLm91dHAsIGEuZXhwLCBhLnR2cCk7Ci19Ci0KLS8qCi0gKiBzeXNfaXBjKCkgaXMgdGhlIGRlLW11bHRpcGxleGVyIGZvciB0aGUgU3lzViBJUEMgY2FsbHMuLgotICoKLSAqIFRoaXMgaXMgcmVhbGx5IGhvcnJpYmx5IHVnbHkuCi0gKi8KLWFzbWxpbmthZ2UgaW50IHN5c19pcGMgKHVpbnQgY2FsbCwgaW50IGZpcnN0LCBpbnQgc2Vjb25kLAotCQkJaW50IHRoaXJkLCB2b2lkIF9fdXNlciAqcHRyLCBsb25nIGZpZnRoKQotewotCWludCB2ZXJzaW9uLCByZXQ7Ci0KLQl2ZXJzaW9uID0gY2FsbCA+PiAxNjsgLyogaGFjayBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwotCWNhbGwgJj0gMHhmZmZmOwotCi0JaWYgKGNhbGwgPD0gU0VNQ1RMKQotCQlzd2l0Y2ggKGNhbGwpIHsKLQkJY2FzZSBTRU1PUDoKLQkJCXJldHVybiBzeXNfc2Vtb3AgKGZpcnN0LCBwdHIsIHNlY29uZCk7Ci0JCWNhc2UgU0VNR0VUOgotCQkJcmV0dXJuIHN5c19zZW1nZXQgKGZpcnN0LCBzZWNvbmQsIHRoaXJkKTsKLQkJY2FzZSBTRU1DVEw6IHsKLQkJCXVuaW9uIHNlbXVuIGZvdXJ0aDsKLQkJCWlmICghcHRyKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKGdldF91c2VyKGZvdXJ0aC5fX3BhZCwgKHZvaWQgX191c2VyICpfX3VzZXIgKikgcHRyKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiBzeXNfc2VtY3RsIChmaXJzdCwgc2Vjb25kLCB0aGlyZCwgZm91cnRoKTsKLQkJCX0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU5PU1lTOwotCQl9Ci0JaWYgKGNhbGwgPD0gTVNHQ1RMKQotCQlzd2l0Y2ggKGNhbGwpIHsKLQkJY2FzZSBNU0dTTkQ6Ci0JCQlyZXR1cm4gc3lzX21zZ3NuZCAoZmlyc3QsIHB0ciwgc2Vjb25kLCB0aGlyZCk7Ci0JCWNhc2UgTVNHUkNWOgotCQkJc3dpdGNoICh2ZXJzaW9uKSB7Ci0JCQljYXNlIDA6IHsKLQkJCQlzdHJ1Y3QgaXBjX2tsdWRnZSB0bXA7Ci0JCQkJaWYgKCFwdHIpCi0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCWlmIChjb3B5X2Zyb21fdXNlciAoJnRtcCwgcHRyLCBzaXplb2YgKHRtcCkpKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQlyZXR1cm4gc3lzX21zZ3JjdiAoZmlyc3QsIHRtcC5tc2dwLCBzZWNvbmQsCi0JCQkJCQkgICB0bXAubXNndHlwLCB0aGlyZCk7Ci0JCQkJfQotCQkJZGVmYXVsdDoKLQkJCQlyZXR1cm4gc3lzX21zZ3JjdiAoZmlyc3QsIHB0ciwKLQkJCQkJCSAgIHNlY29uZCwgZmlmdGgsIHRoaXJkKTsKLQkJCX0KLQkJY2FzZSBNU0dHRVQ6Ci0JCQlyZXR1cm4gc3lzX21zZ2dldCAoKGtleV90KSBmaXJzdCwgc2Vjb25kKTsKLQkJY2FzZSBNU0dDVEw6Ci0JCQlyZXR1cm4gc3lzX21zZ2N0bCAoZmlyc3QsIHNlY29uZCwgcHRyKTsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU5PU1lTOwotCQl9Ci0JaWYgKGNhbGwgPD0gU0hNQ1RMKQotCQlzd2l0Y2ggKGNhbGwpIHsKLQkJY2FzZSBTSE1BVDoKLQkJCXN3aXRjaCAodmVyc2lvbikgewotCQkJZGVmYXVsdDogewotCQkJCXVsb25nIHJhZGRyOwotCQkJCXJldCA9IGRvX3NobWF0IChmaXJzdCwgcHRyLCBzZWNvbmQsICZyYWRkcik7Ci0JCQkJaWYgKHJldCkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCQlyZXR1cm4gcHV0X3VzZXIgKHJhZGRyLCAodWxvbmcgX191c2VyICopIHRoaXJkKTsKLQkJCX0KLQkJCX0KLQkJY2FzZSBTSE1EVDoKLQkJCXJldHVybiBzeXNfc2htZHQgKHB0cik7Ci0JCWNhc2UgU0hNR0VUOgotCQkJcmV0dXJuIHN5c19zaG1nZXQgKGZpcnN0LCBzZWNvbmQsIHRoaXJkKTsKLQkJY2FzZSBTSE1DVEw6Ci0JCQlyZXR1cm4gc3lzX3NobWN0bCAoZmlyc3QsIHNlY29uZCwgcHRyKTsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU5PU1lTOwotCQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQogLyogQ29udmVydCB2aXJ0dWFsICh1c2VyKSBhZGRyZXNzIFZBRERSIHRvIHBoeXNpY2FsIGFkZHJlc3MgUEFERFIgKi8KICNkZWZpbmUgdmlydF90b19waHlzXzA0MCh2YWRkcikJCQkJCQlcCiAoewkJCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9wdHJhY2UuYwppbmRleCA4NWVkMmY5Li5mNmJlMTI0IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3B0cmFjZS5jCkBAIC0xMTYsMTIgKzExNiw2IEBACiAJaW50IHJldDsKIAogCXN3aXRjaCAocmVxdWVzdCkgewotCQkvKiB3aGVuIEkgYW5kIEQgc3BhY2UgYXJlIHNlcGFyYXRlLCB0aGVzZSB3aWxsIG5lZWQgdG8gYmUgZml4ZWQuICovCi0JCWNhc2UgUFRSQUNFX1BFRUtURVhUOiAvKiByZWFkIHdvcmQgYXQgbG9jYXRpb24gYWRkci4gKi8gCi0JCWNhc2UgUFRSQUNFX1BFRUtEQVRBOgotCQkJcmV0ID0gZ2VuZXJpY19wdHJhY2VfcGVla2RhdGEoY2hpbGQsIGFkZHIsIGRhdGEpOwotCQkJYnJlYWs7Ci0KIAkJLyogcmVhZCB0aGUgd29yZCBhdCBsb2NhdGlvbiBhZGRyIGluIHRoZSBVU0VSIGFyZWEuICovCiAJCWNhc2UgUFRSQUNFX1BFRUtVU1I6IHsKIAkJCXVuc2lnbmVkIGxvbmcgdG1wOwpAQCAtMTYwLDEyICsxNTQsNiBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQkvKiB3aGVuIEkgYW5kIEQgc3BhY2UgYXJlIHNlcGFyYXRlLCB0aGlzIHdpbGwgaGF2ZSB0byBiZSBmaXhlZC4gKi8KLQkJY2FzZSBQVFJBQ0VfUE9LRVRFWFQ6IC8qIHdyaXRlIHRoZSB3b3JkIGF0IGxvY2F0aW9uIGFkZHIuICovCi0JCWNhc2UgUFRSQUNFX1BPS0VEQVRBOgotCQkJcmV0ID0gZ2VuZXJpY19wdHJhY2VfcG9rZWRhdGEoY2hpbGQsIGFkZHIsIGRhdGEpOwotCQkJYnJlYWs7Ci0KIAkJY2FzZSBQVFJBQ0VfUE9LRVVTUjogLyogd3JpdGUgdGhlIHdvcmQgYXQgbG9jYXRpb24gYWRkciBpbiB0aGUgVVNFUiBhcmVhICovCiAJCQlyZXQgPSAtRUlPOwogCQkJaWYgKChhZGRyICYgMykgfHwgYWRkciA8IDAgfHwKQEAgLTIwMiw2NiArMTkwLDYgQEAKIAkJCX0KIAkJCWJyZWFrOwogCi0JCWNhc2UgUFRSQUNFX1NZU0NBTEw6IC8qIGNvbnRpbnVlIGFuZCBzdG9wIGF0IG5leHQgKHJldHVybiBmcm9tKSBzeXNjYWxsICovCi0JCWNhc2UgUFRSQUNFX0NPTlQ6IHsgLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCi0JCQlsb25nIHRtcDsKLQotCQkJcmV0ID0gLUVJTzsKLQkJCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQotCQkJCWJyZWFrOwotCQkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpCi0JCQkJc2V0X3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCQkJZWxzZQotCQkJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCQkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7Ci0JCQkvKiBtYWtlIHN1cmUgdGhlIHNpbmdsZSBzdGVwIGJpdCBpcyBub3Qgc2V0LiAqLwotCQkJdG1wID0gZ2V0X3JlZyhjaGlsZCwgUFRfU1IpICYgfihUUkFDRV9CSVRTIDw8IDE2KTsKLQkJCXB1dF9yZWcoY2hpbGQsIFBUX1NSLCB0bXApOwotCQkJd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKLQkJCXJldCA9IDA7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qCi0JCSAqIG1ha2UgdGhlIGNoaWxkIGV4aXQuICBCZXN0IEkgY2FuIGRvIGlzIHNlbmQgaXQgYSBzaWdraWxsLiAKLQkJICogcGVyaGFwcyBpdCBzaG91bGQgYmUgcHV0IGluIHRoZSBzdGF0dXMgdGhhdCBpdCB3YW50cyB0byAKLQkJICogZXhpdC4KLQkJICovCi0JCWNhc2UgUFRSQUNFX0tJTEw6IHsKLQkJCWxvbmcgdG1wOwotCi0JCQlyZXQgPSAwOwotCQkJaWYgKGNoaWxkLT5leGl0X3N0YXRlID09IEVYSVRfWk9NQklFKSAvKiBhbHJlYWR5IGRlYWQgKi8KLQkJCQlicmVhazsKLQkJCWNoaWxkLT5leGl0X2NvZGUgPSBTSUdLSUxMOwotCQkJLyogbWFrZSBzdXJlIHRoZSBzaW5nbGUgc3RlcCBiaXQgaXMgbm90IHNldC4gKi8KLQkJCXRtcCA9IGdldF9yZWcoY2hpbGQsIFBUX1NSKSAmIH4oVFJBQ0VfQklUUyA8PCAxNik7Ci0JCQlwdXRfcmVnKGNoaWxkLCBQVF9TUiwgdG1wKTsKLQkJCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6IHsgIC8qIHNldCB0aGUgdHJhcCBmbGFnLiAqLwotCQkJbG9uZyB0bXA7Ci0KLQkJCXJldCA9IC1FSU87Ci0JCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKLQkJCQlicmVhazsKLQkJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCQkJdG1wID0gZ2V0X3JlZyhjaGlsZCwgUFRfU1IpIHwgKFRSQUNFX0JJVFMgPDwgMTYpOwotCQkJcHV0X3JlZyhjaGlsZCwgUFRfU1IsIHRtcCk7Ci0KLQkJCWNoaWxkLT5leGl0X2NvZGUgPSBkYXRhOwotCQkJLyogZ2l2ZSBpdCBhIGNoYW5jZSB0byBydW4uICovCi0JCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOwotCQkJcmV0ID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJY2FzZSBQVFJBQ0VfREVUQUNIOgkvKiBkZXRhY2ggYSBwcm9jZXNzIHRoYXQgd2FzIGF0dGFjaGVkLiAqLwotCQkJcmV0ID0gcHRyYWNlX2RldGFjaChjaGlsZCwgZGF0YSk7Ci0JCQlicmVhazsKLQogCQljYXNlIFBUUkFDRV9HRVRSRUdTOiB7IC8qIEdldCBhbGwgZ3AgcmVncyBmcm9tIHRoZSBjaGlsZC4gKi8KIAkJICAJaW50IGk7CiAJCQl1bnNpZ25lZCBsb25nIHRtcDsKQEAgLTMyNSw3ICsyNTMsNyBAQAogCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJcmV0ID0gLUVJTzsKKwkJCXJldCA9IHB0cmFjZV9yZXF1ZXN0KGNoaWxkLCByZXF1ZXN0LCBhZGRyLCBkYXRhKTsKIAkJCWJyZWFrOwogCX0KIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c19tNjhrLmMgYi9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzX202OGsuYwppbmRleCA5MjNkZDRhLi5kNjVlOWM0IDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzX202OGsuYworKysgYi9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzX202OGsuYwpAQCAtMjcsMTQyICsyNyw2IEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKLS8qCi0gKiBQZXJmb3JtIHRoZSBzZWxlY3QobmQsIGluLCBvdXQsIGV4LCB0dikgYW5kIG1tYXAoKSBzeXN0ZW0KLSAqIGNhbGxzLiBMaW51eC9tNjhrIGNsb25lZCBMaW51eC9pMzg2LCB3aGljaCBkaWRuJ3QgdXNlIHRvIGJlIGFibGUgdG8KLSAqIGhhbmRsZSBtb3JlIHRoYW4gNCBzeXN0ZW0gY2FsbCBwYXJhbWV0ZXJzLCBzbyB0aGVzZSBzeXN0ZW0gY2FsbHMKLSAqIHVzZWQgYSBtZW1vcnkgYmxvY2sgZm9yIHBhcmFtZXRlciBwYXNzaW5nLi4KLSAqLwotCi1zdHJ1Y3QgbW1hcF9hcmdfc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JdW5zaWduZWQgbG9uZyBsZW47Ci0JdW5zaWduZWQgbG9uZyBwcm90OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBmZDsKLQl1bnNpZ25lZCBsb25nIG9mZnNldDsKLX07Ci0KLWFzbWxpbmthZ2UgaW50IG9sZF9tbWFwKHN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgKmFyZykKLXsKLQlzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0IGE7Ci0JaW50IGVycm9yID0gLUVGQVVMVDsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmYSwgYXJnLCBzaXplb2YoYSkpKQotCQlnb3RvIG91dDsKLQotCWVycm9yID0gLUVJTlZBTDsKLQlpZiAoYS5vZmZzZXQgJiB+UEFHRV9NQVNLKQotCQlnb3RvIG91dDsKLQotCWVycm9yID0gc3lzX21tYXBfcGdvZmYoYS5hZGRyLCBhLmxlbiwgYS5wcm90LCBhLmZsYWdzLCBhLmZkLAotCQkJCWEub2Zmc2V0ID4+IFBBR0VfU0hJRlQpOwotb3V0OgotCXJldHVybiBlcnJvcjsKLX0KLQotc3RydWN0IHNlbF9hcmdfc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIG47Ci0JZmRfc2V0ICppbnAsICpvdXRwLCAqZXhwOwotCXN0cnVjdCB0aW1ldmFsICp0dnA7Ci19OwotCi1hc21saW5rYWdlIGludCBvbGRfc2VsZWN0KHN0cnVjdCBzZWxfYXJnX3N0cnVjdCAqYXJnKQotewotCXN0cnVjdCBzZWxfYXJnX3N0cnVjdCBhOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZhLCBhcmcsIHNpemVvZihhKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCS8qIHN5c19zZWxlY3QoKSBkb2VzIHRoZSBhcHByb3ByaWF0ZSBrZXJuZWwgbG9ja2luZyAqLwotCXJldHVybiBzeXNfc2VsZWN0KGEubiwgYS5pbnAsIGEub3V0cCwgYS5leHAsIGEudHZwKTsKLX0KLQotLyoKLSAqIHN5c19pcGMoKSBpcyB0aGUgZGUtbXVsdGlwbGV4ZXIgZm9yIHRoZSBTeXNWIElQQyBjYWxscy4uCi0gKgotICogVGhpcyBpcyByZWFsbHkgaG9ycmlibHkgdWdseS4KLSAqLwotYXNtbGlua2FnZSBpbnQgc3lzX2lwYyAodWludCBjYWxsLCBpbnQgZmlyc3QsIGludCBzZWNvbmQsCi0JCQlpbnQgdGhpcmQsIHZvaWQgKnB0ciwgbG9uZyBmaWZ0aCkKLXsKLQlpbnQgdmVyc2lvbiwgcmV0OwotCi0JdmVyc2lvbiA9IGNhbGwgPj4gMTY7IC8qIGhhY2sgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLQljYWxsICY9IDB4ZmZmZjsKLQotCWlmIChjYWxsIDw9IFNFTUNUTCkKLQkJc3dpdGNoIChjYWxsKSB7Ci0JCWNhc2UgU0VNT1A6Ci0JCQlyZXR1cm4gc3lzX3NlbW9wIChmaXJzdCwgKHN0cnVjdCBzZW1idWYgKilwdHIsIHNlY29uZCk7Ci0JCWNhc2UgU0VNR0VUOgotCQkJcmV0dXJuIHN5c19zZW1nZXQgKGZpcnN0LCBzZWNvbmQsIHRoaXJkKTsKLQkJY2FzZSBTRU1DVEw6IHsKLQkJCXVuaW9uIHNlbXVuIGZvdXJ0aDsKLQkJCWlmICghcHRyKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKGdldF91c2VyKGZvdXJ0aC5fX3BhZCwgKHZvaWQgKiopIHB0cikpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gc3lzX3NlbWN0bCAoZmlyc3QsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCk7Ci0JCQl9Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCWlmIChjYWxsIDw9IE1TR0NUTCkgCi0JCXN3aXRjaCAoY2FsbCkgewotCQljYXNlIE1TR1NORDoKLQkJCXJldHVybiBzeXNfbXNnc25kIChmaXJzdCwgKHN0cnVjdCBtc2didWYgKikgcHRyLCAKLQkJCQkJICBzZWNvbmQsIHRoaXJkKTsKLQkJY2FzZSBNU0dSQ1Y6Ci0JCQlzd2l0Y2ggKHZlcnNpb24pIHsKLQkJCWNhc2UgMDogewotCQkJCXN0cnVjdCBpcGNfa2x1ZGdlIHRtcDsKLQkJCQlpZiAoIXB0cikKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJaWYgKGNvcHlfZnJvbV91c2VyICgmdG1wLAotCQkJCQkJICAgIChzdHJ1Y3QgaXBjX2tsdWRnZSAqKXB0ciwKLQkJCQkJCSAgICBzaXplb2YgKHRtcCkpKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQlyZXR1cm4gc3lzX21zZ3JjdiAoZmlyc3QsIHRtcC5tc2dwLCBzZWNvbmQsCi0JCQkJCQkgICB0bXAubXNndHlwLCB0aGlyZCk7Ci0JCQkJfQotCQkJZGVmYXVsdDoKLQkJCQlyZXR1cm4gc3lzX21zZ3JjdiAoZmlyc3QsCi0JCQkJCQkgICAoc3RydWN0IG1zZ2J1ZiAqKSBwdHIsCi0JCQkJCQkgICBzZWNvbmQsIGZpZnRoLCB0aGlyZCk7Ci0JCQl9Ci0JCWNhc2UgTVNHR0VUOgotCQkJcmV0dXJuIHN5c19tc2dnZXQgKChrZXlfdCkgZmlyc3QsIHNlY29uZCk7Ci0JCWNhc2UgTVNHQ1RMOgotCQkJcmV0dXJuIHN5c19tc2djdGwgKGZpcnN0LCBzZWNvbmQsCi0JCQkJCSAgIChzdHJ1Y3QgbXNxaWRfZHMgKikgcHRyKTsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JaWYgKGNhbGwgPD0gU0hNQ1RMKQotCQlzd2l0Y2ggKGNhbGwpIHsKLQkJY2FzZSBTSE1BVDoKLQkJCXN3aXRjaCAodmVyc2lvbikgewotCQkJZGVmYXVsdDogewotCQkJCXVsb25nIHJhZGRyOwotCQkJCXJldCA9IGRvX3NobWF0IChmaXJzdCwgcHRyLCBzZWNvbmQsICZyYWRkcik7Ci0JCQkJaWYgKHJldCkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCQlyZXR1cm4gcHV0X3VzZXIgKHJhZGRyLCAodWxvbmcgX191c2VyICopIHRoaXJkKTsKLQkJCX0KLQkJCX0KLQkJY2FzZSBTSE1EVDoKLQkJCXJldHVybiBzeXNfc2htZHQgKHB0cik7Ci0JCWNhc2UgU0hNR0VUOgotCQkJcmV0dXJuIHN5c19zaG1nZXQgKGZpcnN0LCBzZWNvbmQsIHRoaXJkKTsKLQkJY2FzZSBTSE1DVEw6Ci0JCQlyZXR1cm4gc3lzX3NobWN0bCAoZmlyc3QsIHNlY29uZCwgcHRyKTsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU5PU1lTOwotCQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQogLyogc3lzX2NhY2hlZmx1c2ggLS0gZmx1c2ggKHBhcnQgb2YpIHRoZSBwcm9jZXNzb3IgY2FjaGUuICAqLwogYXNtbGlua2FnZSBpbnQKIHN5c19jYWNoZWZsdXNoICh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBzY29wZSwgaW50IGNhY2hlLCB1bnNpZ25lZCBsb25nIGxlbikKZGlmZiAtLWdpdCBhL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNjYWxsdGFibGUuUyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC9zeXNjYWxsdGFibGUuUwppbmRleCA1NmRkMDFkLi5iMzBiM2ViIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvc3lzY2FsbHRhYmxlLlMKKysrIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3N5c2NhbGx0YWJsZS5TCkBAIC0xMDAsNyArMTAwLDcgQEAKIAkubG9uZyBzeXNfc2V0dGltZW9mZGF5CiAJLmxvbmcgc3lzX2dldGdyb3VwczE2CS8qIDgwICovCiAJLmxvbmcgc3lzX3NldGdyb3VwczE2Ci0JLmxvbmcgb2xkX3NlbGVjdAorCS5sb25nIHN5c19vbGRfc2VsZWN0CiAJLmxvbmcgc3lzX3N5bWxpbmsKIAkubG9uZyBzeXNfbHN0YXQKIAkubG9uZyBzeXNfcmVhZGxpbmsJLyogODUgKi8KQEAgLTEwOCw3ICsxMDgsNyBAQAogCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIHN5c19zd2Fwb24gKi8KIAkubG9uZyBzeXNfcmVib290CiAJLmxvbmcgc3lzX29sZF9yZWFkZGlyCi0JLmxvbmcgb2xkX21tYXAJCS8qIDkwICovCisJLmxvbmcgc3lzX29sZF9tbWFwCS8qIDkwICovCiAJLmxvbmcgc3lzX211bm1hcAogCS5sb25nIHN5c190cnVuY2F0ZQogCS5sb25nIHN5c19mdHJ1bmNhdGUKZGlmZiAtLWdpdCBhL2FyY2gvbWljcm9ibGF6ZS9pbmNsdWRlL2FzbS9lbnRyeS5oIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2VudHJ5LmgKaW5kZXggNjFhYmJkMi4uZWM4OWYyYSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2VudHJ5LmgKKysrIGIvYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2VudHJ5LmgKQEAgLTIxLDcgKzIxLDcgQEAKICAqIHBsYWNlcwogICovCiAKLSNkZWZpbmUgUEVSX0NQVSh2YXIpIHBlcl9jcHVfXyMjdmFyCisjZGVmaW5lIFBFUl9DUFUodmFyKSB2YXIKIAogIyBpZm5kZWYgX19BU1NFTUJMWV9fCiBERUNMQVJFX1BFUl9DUFUodW5zaWduZWQgaW50LCBLU1ApOyAvKiBTYXZlZCBrZXJuZWwgc3RhY2sgcG9pbnRlciAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvbWljcm9ibGF6ZS9rZXJuZWwvcHRyYWNlLmMKaW5kZXggNGIzYWMzMi4uNmQ2MzQ5YSAxMDA2NDQKLS0tIGEvYXJjaC9taWNyb2JsYXplL2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL21pY3JvYmxhemUva2VybmVsL3B0cmFjZS5jCkBAIC03OCwyNiArNzgsNiBAQAogCXVuc2lnbmVkIGxvbmcgY29waWVkOwogCiAJc3dpdGNoIChyZXF1ZXN0KSB7Ci0JY2FzZSBQVFJBQ0VfUEVFS1RFWFQ6IC8qIHJlYWQgd29yZCBhdCBsb2NhdGlvbiBhZGRyLiAqLwotCWNhc2UgUFRSQUNFX1BFRUtEQVRBOgotCQlwcl9kZWJ1ZygiUEVFS1RFWFQvUEVFS0RBVEEgYXQgJTA4bFhcbiIsIGFkZHIpOwotCQljb3BpZWQgPSBhY2Nlc3NfcHJvY2Vzc192bShjaGlsZCwgYWRkciwgJnZhbCwgc2l6ZW9mKHZhbCksIDApOwotCQlydmFsID0gLUVJTzsKLQkJaWYgKGNvcGllZCAhPSBzaXplb2YodmFsKSkKLQkJCWJyZWFrOwotCQlydmFsID0gcHV0X3VzZXIodmFsLCAodW5zaWduZWQgbG9uZyAqKWRhdGEpOwotCQlicmVhazsKLQotCWNhc2UgUFRSQUNFX1BPS0VURVhUOiAvKiB3cml0ZSB0aGUgd29yZCBhdCBsb2NhdGlvbiBhZGRyLiAqLwotCWNhc2UgUFRSQUNFX1BPS0VEQVRBOgotCQlwcl9kZWJ1ZygiUE9LRVRFWFQvUE9LRURBVEEgdG8gJTA4bFhcbiIsIGFkZHIpOwotCQlydmFsID0gMDsKLQkJaWYgKGFjY2Vzc19wcm9jZXNzX3ZtKGNoaWxkLCBhZGRyLCAmZGF0YSwgc2l6ZW9mKGRhdGEpLCAxKQotCQkgICAgPT0gc2l6ZW9mKGRhdGEpKQotCQkJYnJlYWs7Ci0JCXJ2YWwgPSAtRUlPOwotCQlicmVhazsKLQogCS8qIFJlYWQvd3JpdGUgdGhlIHdvcmQgYXQgbG9jYXRpb24gQUREUiBpbiB0aGUgcmVnaXN0ZXJzLiAqLwogCWNhc2UgUFRSQUNFX1BFRUtVU1I6CiAJY2FzZSBQVFJBQ0VfUE9LRVVTUjoKQEAgLTEzMCw1MCArMTEwLDggQEAKIAkJaWYgKHJ2YWwgPT0gMCAmJiByZXF1ZXN0ID09IFBUUkFDRV9QRUVLVVNSKQogCQkJcnZhbCA9IHB1dF91c2VyKHZhbCwgKHVuc2lnbmVkIGxvbmcgKilkYXRhKTsKIAkJYnJlYWs7Ci0JLyogQ29udGludWUgYW5kIHN0b3AgYXQgbmV4dCAocmV0dXJuIGZyb20pIHN5c2NhbGwgKi8KLQljYXNlIFBUUkFDRV9TWVNDQUxMOgotCQlwcl9kZWJ1ZygiUFRSQUNFX1NZU0NBTExcbiIpOwotCWNhc2UgUFRSQUNFX1NJTkdMRVNURVA6Ci0JCXByX2RlYnVnKCJQVFJBQ0VfU0lOR0xFU1RFUFxuIik7Ci0JLyogUmVzdGFydCBhZnRlciBhIHNpZ25hbC4gICovCi0JY2FzZSBQVFJBQ0VfQ09OVDoKLQkJcHJfZGVidWcoIlBUUkFDRV9DT05UXG4iKTsKLQkJcnZhbCA9IC1FSU87Ci0JCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQotCQkJYnJlYWs7Ci0KLQkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpCi0JCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7Ci0JCWVsc2UKLQkJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCi0JCWNoaWxkLT5leGl0X2NvZGUgPSBkYXRhOwotCQlwcl9kZWJ1Zygid2FrZXVwX3Byb2Nlc3NcbiIpOwotCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOwotCQlydmFsID0gMDsKLQkJYnJlYWs7Ci0KLQkvKgotCSAqIG1ha2UgdGhlIGNoaWxkIGV4aXQuICBCZXN0IEkgY2FuIGRvIGlzIHNlbmQgaXQgYSBzaWdraWxsLgotCSAqIHBlcmhhcHMgaXQgc2hvdWxkIGJlIHB1dCBpbiB0aGUgc3RhdHVzIHRoYXQgaXQgd2FudHMgdG8KLQkgKiBleGl0LgotCSAqLwotCWNhc2UgUFRSQUNFX0tJTEw6Ci0JCXByX2RlYnVnKCJQVFJBQ0VfS0lMTFxuIik7Ci0JCXJ2YWwgPSAwOwotCQlpZiAoY2hpbGQtPmV4aXRfc3RhdGUgPT0gRVhJVF9aT01CSUUpCS8qIGFscmVhZHkgZGVhZCAqLwotCQkJYnJlYWs7Ci0JCWNoaWxkLT5leGl0X2NvZGUgPSBTSUdLSUxMOwotCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOwotCQlicmVhazsKLQotCWNhc2UgUFRSQUNFX0RFVEFDSDogLyogZGV0YWNoIGEgcHJvY2VzcyB0aGF0IHdhcyBhdHRhY2hlZC4gKi8KLQkJcHJfZGVidWcoIlBUUkFDRV9ERVRBQ0hcbiIpOwotCQlydmFsID0gcHRyYWNlX2RldGFjaChjaGlsZCwgZGF0YSk7Ci0JCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCS8qIHJ2YWwgPSBwdHJhY2VfcmVxdWVzdChjaGlsZCwgcmVxdWVzdCwgYWRkciwgZGF0YSk7IG5vTU1VICovCi0JCXJ2YWwgPSAtRUlPOworCQlydmFsID0gcHRyYWNlX3JlcXVlc3QoY2hpbGQsIHJlcXVlc3QsIGFkZHIsIGRhdGEpOwogCX0KIAlyZXR1cm4gcnZhbDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggNTkxY2EwYy4uMjllODY5MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTgxMiw5ICs4MTIsOSBAQAogCiBjb25maWcgRE1BX05PTkNPSEVSRU5UCiAJYm9vbAotCXNlbGVjdCBETUFfTkVFRF9QQ0lfTUFQX1NUQVRFCisJc2VsZWN0IE5FRURfRE1BX01BUF9TVEFURQogCi1jb25maWcgRE1BX05FRURfUENJX01BUF9TVEFURQorY29uZmlnIE5FRURfRE1BX01BUF9TVEFURQogCWJvb2wKIAogY29uZmlnIFNZU19IQVNfRUFSTFlfUFJJTlRLCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vY29tcGF0LmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY29tcGF0LmgKaW5kZXggZjU4YWVkMy4uNjEzZjY5MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NvbXBhdC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jb21wYXQuaApAQCAtOCw3ICs4LDggQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KIAotI2RlZmluZSBDT01QQVRfVVNFUl9IWgkxMDAKKyNkZWZpbmUgQ09NUEFUX1VTRVJfSFoJCTEwMAorI2RlZmluZSBDT01QQVRfVVRTX01BQ0hJTkUJIm1pcHNcMFwwXDAiCiAKIHR5cGVkZWYgdTMyCQljb21wYXRfc2l6ZV90OwogdHlwZWRlZiBzMzIJCWNvbXBhdF9zc2l6ZV90OwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2xvY2FsLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbG9jYWwuaAppbmRleCAzNjFmNGYxNi4uYmRjZGVmMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2xvY2FsLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2xvY2FsLmgKQEAgLTE5MywyOSArMTkzLDQgQEAKICNkZWZpbmUgX19sb2NhbF9hZGQoaSwgbCkJKChsKS0+YS5jb3VudGVyKz0oaSkpCiAjZGVmaW5lIF9fbG9jYWxfc3ViKGksIGwpCSgobCktPmEuY291bnRlci09KGkpKQogCi0vKiBOZWVkIHRvIGRpc2FibGUgcHJlZW1wdGlvbiBmb3IgdGhlIGNwdSBsb2NhbCBjb3VudGVycyBvdGhlcndpc2Ugd2UgY291bGQKLSAgIHN0aWxsIGFjY2VzcyBhIHZhcmlhYmxlIG9mIGEgcHJldmlvdXMgQ1BVIGluIGEgbm9uIGF0b21pYyB3YXkuICovCi0jZGVmaW5lIGNwdV9sb2NhbF93cmFwX3YobCkJIAlcCi0JKHsgbG9jYWxfdCByZXNfXzsJCVwKLQkgICBwcmVlbXB0X2Rpc2FibGUoKTsgCQlcCi0JICAgcmVzX18gPSAobCk7CQkJXAotCSAgIHByZWVtcHRfZW5hYmxlKCk7CQlcCi0JICAgcmVzX187IH0pCi0jZGVmaW5lIGNwdV9sb2NhbF93cmFwKGwpCQlcCi0JKHsgcHJlZW1wdF9kaXNhYmxlKCk7CQlcCi0JICAgbDsJCQkJXAotCSAgIHByZWVtcHRfZW5hYmxlKCk7IH0pCQlcCi0KLSNkZWZpbmUgY3B1X2xvY2FsX3JlYWQobCkgICAgY3B1X2xvY2FsX3dyYXBfdihsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKGwpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX3NldChsLCBpKSAgY3B1X2xvY2FsX3dyYXAobG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKGwpLCAoaSkpKQotI2RlZmluZSBjcHVfbG9jYWxfaW5jKGwpICAgICBjcHVfbG9jYWxfd3JhcChsb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIobCkpKQotI2RlZmluZSBjcHVfbG9jYWxfZGVjKGwpICAgICBjcHVfbG9jYWxfd3JhcChsb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIobCkpKQotI2RlZmluZSBjcHVfbG9jYWxfYWRkKGksIGwpICBjcHVfbG9jYWxfd3JhcChsb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkpCi0jZGVmaW5lIGNwdV9sb2NhbF9zdWIoaSwgbCkgIGNwdV9sb2NhbF93cmFwKGxvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKGwpKSkKLQotI2RlZmluZSBfX2NwdV9sb2NhbF9pbmMobCkJY3B1X2xvY2FsX2luYyhsKQotI2RlZmluZSBfX2NwdV9sb2NhbF9kZWMobCkJY3B1X2xvY2FsX2RlYyhsKQotI2RlZmluZSBfX2NwdV9sb2NhbF9hZGQoaSwgbCkJY3B1X2xvY2FsX2FkZCgoaSksIChsKSkKLSNkZWZpbmUgX19jcHVfbG9jYWxfc3ViKGksIGwpCWNwdV9sb2NhbF9zdWIoKGkpLCAobCkpCi0KICNlbmRpZiAvKiBfQVJDSF9NSVBTX0xPQ0FMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wY2kuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wY2kuaAppbmRleCA1ZWJmODI1Li4zYmVlYTE0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BjaS5oCkBAIC0xMDIsMjggKzEwMiw2IEBACiAgKi8KIGV4dGVybiB1bnNpZ25lZCBpbnQgUENJX0RNQV9CVVNfSVNfUEhZUzsKIAotI2lmZGVmIENPTkZJR19ETUFfTkVFRF9QQ0lfTUFQX1NUQVRFCi0KLS8qIHBjaV91bm1hcF97c2luZ2xlLHBhZ2V9IGlzIG5vdCBhIG5vcCwgdGh1cy4uLiAqLwotI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKEFERFJfTkFNRSkJZG1hX2FkZHJfdCBBRERSX05BTUU7Ci0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkJCV9fdTMyIExFTl9OQU1FOwotI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJCSgoUFRSKS0+QUREUl9OQU1FKQotI2RlZmluZSBwY2lfdW5tYXBfYWRkcl9zZXQoUFRSLCBBRERSX05BTUUsIFZBTCkJKCgoUFRSKS0+QUREUl9OQU1FKSA9IChWQUwpKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuKFBUUiwgTEVOX05BTUUpCQkoKFBUUiktPkxFTl9OQU1FKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCSgoKFBUUiktPkxFTl9OQU1FKSA9IChWQUwpKQotCi0jZWxzZSAvKiBDT05GSUdfRE1BX05FRURfUENJX01BUF9TVEFURSAgKi8KLQotLyogcGNpX3VubWFwX3twYWdlLHNpbmdsZX0gaXMgYSBub3Agc28uLi4gKi8KLSNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCi0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpCQkoMCkKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHJfc2V0KFBUUiwgQUREUl9OQU1FLCBWQUwpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJKDApCi0jZGVmaW5lIHBjaV91bm1hcF9sZW5fc2V0KFBUUiwgTEVOX05BTUUsIFZBTCkJZG8geyB9IHdoaWxlICgwKQotCi0jZW5kaWYgLyogQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEUgICovCi0KICNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2RtYV9idXJzdF9hZHZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJCWVudW0gcGNpX2RtYV9idXJzdF9zdHJhdGVneSAqc3RyYXQsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggNjVjNjc5ZS4uMWI1YTY2NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMTAwNCw2ICsxMDA0LDcgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfT0xEX1JFQURESVIKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfSVBDCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1VUSU1FCkBAIC0xMDEzLDYgKzEwMTQsNyBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19OSUNFCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfR0VUUkxJTUlUCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfVU5BTUUKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKaW5kZXggYmRlNzllZi4uYTM5ZDA1OSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKQEAgLTI0OSwyMiArMjQ5LDYgQEAKIH0KICNlbmRpZgogCi1TWVNDQUxMX0RFRklORTEoMzJfbmV3dW5hbWUsIHN0cnVjdCBuZXdfdXRzbmFtZSBfX3VzZXIgKiwgbmFtZSkKLXsKLQlpbnQgcmV0ID0gMDsKLQotCWRvd25fcmVhZCgmdXRzX3NlbSk7Ci0JaWYgKGNvcHlfdG9fdXNlcihuYW1lLCB1dHNuYW1lKCksIHNpemVvZiAqbmFtZSkpCi0JCXJldCA9IC1FRkFVTFQ7Ci0JdXBfcmVhZCgmdXRzX3NlbSk7Ci0KLQlpZiAoY3VycmVudC0+cGVyc29uYWxpdHkgPT0gUEVSX0xJTlVYMzIgJiYgIXJldCkKLQkJaWYgKGNvcHlfdG9fdXNlcihuYW1lLT5tYWNoaW5lLCAibWlwc1wwXDBcMCIsIDgpKQotCQkJcmV0ID0gLUVGQVVMVDsKLQotCXJldHVybiByZXQ7Ci19Ci0KIFNZU0NBTExfREVGSU5FMSgzMl9wZXJzb25hbGl0eSwgdW5zaWduZWQgbG9uZywgcGVyc29uYWxpdHkpCiB7CiAJaW50IHJldDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL21pcHMva2VybmVsL3B0cmFjZS5jCmluZGV4IDA1NDg2MWMuLmM1MWI5NWYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9wdHJhY2UuYwpAQCAtNDkzLDM2ICs0OTMsNiBAQAogCQlyZXQgPSBwdHJhY2Vfc2V0ZnByZWdzKGNoaWxkLCAoX191MzIgX191c2VyICopIGRhdGEpOwogCQlicmVhazsKIAotCWNhc2UgUFRSQUNFX1NZU0NBTEw6IC8qIGNvbnRpbnVlIGFuZCBzdG9wIGF0IG5leHQgKHJldHVybiBmcm9tKSBzeXNjYWxsICovCi0JY2FzZSBQVFJBQ0VfQ09OVDogeyAvKiByZXN0YXJ0IGFmdGVyIHNpZ25hbC4gKi8KLQkJcmV0ID0gLUVJTzsKLQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCi0JCQlicmVhazsKLQkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpIHsKLQkJCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKLQkJfQotCQllbHNlIHsKLQkJCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCQl9Ci0JCWNoaWxkLT5leGl0X2NvZGUgPSBkYXRhOwotCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOwotCQlyZXQgPSAwOwotCQlicmVhazsKLQl9Ci0KLQkvKgotCSAqIG1ha2UgdGhlIGNoaWxkIGV4aXQuICBCZXN0IEkgY2FuIGRvIGlzIHNlbmQgaXQgYSBzaWdraWxsLgotCSAqIHBlcmhhcHMgaXQgc2hvdWxkIGJlIHB1dCBpbiB0aGUgc3RhdHVzIHRoYXQgaXQgd2FudHMgdG8KLQkgKiBleGl0LgotCSAqLwotCWNhc2UgUFRSQUNFX0tJTEw6Ci0JCXJldCA9IDA7Ci0JCWlmIChjaGlsZC0+ZXhpdF9zdGF0ZSA9PSBFWElUX1pPTUJJRSkJLyogYWxyZWFkeSBkZWFkICovCi0JCQlicmVhazsKLQkJY2hpbGQtPmV4aXRfY29kZSA9IFNJR0tJTEw7Ci0JCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7Ci0JCWJyZWFrOwotCiAJY2FzZSBQVFJBQ0VfR0VUX1RIUkVBRF9BUkVBOgogCQlyZXQgPSBwdXRfdXNlcih0YXNrX3RocmVhZF9pbmZvKGNoaWxkKS0+dHBfdmFsdWUsCiAJCQkJKHVuc2lnbmVkIGxvbmcgX191c2VyICopIGRhdGEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCmluZGV4IDY2YjVhNDguLjQ0MzM3YmEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUworKysgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKQEAgLTE4MSw3ICsxODEsNyBAQAogCVBUUglzeXNfZXhpdAogCVBUUgljb21wYXRfc3lzX3dhaXQ0CiAJUFRSCXN5c19raWxsCQkJLyogNjA2MCAqLwotCVBUUglzeXNfMzJfbmV3dW5hbWUKKwlQVFIJc3lzX25ld3VuYW1lCiAJUFRSCXN5c19zZW1nZXQKIAlQVFIJc3lzX3NlbW9wCiAJUFRSCXN5c19uMzJfc2VtY3RsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKaW5kZXggNTE1ZjllYS4uODEzNjg5ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwpAQCAtMzI1LDcgKzMyNSw3IEBACiAJUFRSCXN5czMyX3NpZ3JldHVybgogCVBUUglzeXMzMl9jbG9uZQkJCS8qIDQxMjAgKi8KIAlQVFIJc3lzX3NldGRvbWFpbm5hbWUKLQlQVFIJc3lzXzMyX25ld3VuYW1lCisJUFRSCXN5c19uZXd1bmFtZQogCVBUUglzeXNfbmlfc3lzY2FsbAkJCS8qIHN5c19tb2RpZnlfbGR0ICovCiAJUFRSCWNvbXBhdF9zeXNfYWRqdGltZXgKIAlQVFIJc3lzX21wcm90ZWN0CQkJLyogNDEyNSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYwppbmRleCAzZjdmNDY2Li5lOTZiMWMzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYworKysgYi9hcmNoL21pcHMva2VybmVsL3N5c2NhbGwuYwpAQCAtMjE1LDQ4ICsyMTUsNiBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotLyoKLSAqIENvbXBhY3JhcGFiaWxpdHkgLi4uCi0gKi8KLVNZU0NBTExfREVGSU5FMSh1bmFtZSwgc3RydWN0IG9sZF91dHNuYW1lIF9fdXNlciAqLCBuYW1lKQotewotCWlmIChuYW1lICYmICFjb3B5X3RvX3VzZXIobmFtZSwgdXRzbmFtZSgpLCBzaXplb2YgKCpuYW1lKSkpCi0JCXJldHVybiAwOwotCXJldHVybiAtRUZBVUxUOwotfQotCi0vKgotICogQ29tcGFjcmFwYWJpbGl0eSAuLi4KLSAqLwotU1lTQ0FMTF9ERUZJTkUxKG9sZHVuYW1lLCBzdHJ1Y3Qgb2xkb2xkX3V0c25hbWUgX191c2VyICosIG5hbWUpCi17Ci0JaW50IGVycm9yOwotCi0JaWYgKCFuYW1lKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIG5hbWUsIHNpemVvZihzdHJ1Y3Qgb2xkb2xkX3V0c25hbWUpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQllcnJvciA9IF9fY29weV90b191c2VyKCZuYW1lLT5zeXNuYW1lLCAmdXRzbmFtZSgpLT5zeXNuYW1lLAotCQkJICAgICAgIF9fT0xEX1VUU19MRU4pOwotCWVycm9yIC09IF9fcHV0X3VzZXIoMCwgbmFtZS0+c3lzbmFtZSArIF9fT0xEX1VUU19MRU4pOwotCWVycm9yIC09IF9fY29weV90b191c2VyKCZuYW1lLT5ub2RlbmFtZSwgJnV0c25hbWUoKS0+bm9kZW5hbWUsCi0JCQkJX19PTERfVVRTX0xFTik7Ci0JZXJyb3IgLT0gX19wdXRfdXNlcigwLCBuYW1lLT5ub2RlbmFtZSArIF9fT0xEX1VUU19MRU4pOwotCWVycm9yIC09IF9fY29weV90b191c2VyKCZuYW1lLT5yZWxlYXNlLCAmdXRzbmFtZSgpLT5yZWxlYXNlLAotCQkJCV9fT0xEX1VUU19MRU4pOwotCWVycm9yIC09IF9fcHV0X3VzZXIoMCwgbmFtZS0+cmVsZWFzZSArIF9fT0xEX1VUU19MRU4pOwotCWVycm9yIC09IF9fY29weV90b191c2VyKCZuYW1lLT52ZXJzaW9uLCAmdXRzbmFtZSgpLT52ZXJzaW9uLAotCQkJCV9fT0xEX1VUU19MRU4pOwotCWVycm9yIC09IF9fcHV0X3VzZXIoMCwgbmFtZS0+dmVyc2lvbiArIF9fT0xEX1VUU19MRU4pOwotCWVycm9yIC09IF9fY29weV90b191c2VyKCZuYW1lLT5tYWNoaW5lLCAmdXRzbmFtZSgpLT5tYWNoaW5lLAotCQkJCV9fT0xEX1VUU19MRU4pOwotCWVycm9yID0gX19wdXRfdXNlcigwLCBuYW1lLT5tYWNoaW5lICsgX19PTERfVVRTX0xFTik7Ci0JZXJyb3IgPSBlcnJvciA/IC1FRkFVTFQgOiAwOwotCi0JcmV0dXJuIGVycm9yOwotfQotCiBTWVNDQUxMX0RFRklORTEoc2V0X3RocmVhZF9hcmVhLCB1bnNpZ25lZCBsb25nLCBhZGRyKQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGkgPSB0YXNrX3RocmVhZF9pbmZvKGN1cnJlbnQpOwpAQCAtNDA3LDk0ICszNjUsNiBAQAogfQogCiAvKgotICogc3lzX2lwYygpIGlzIHRoZSBkZS1tdWx0aXBsZXhlciBmb3IgdGhlIFN5c1YgSVBDIGNhbGxzLi4KLSAqCi0gKiBUaGlzIGlzIHJlYWxseSBob3JyaWJseSB1Z2x5LgotICovCi1TWVNDQUxMX0RFRklORTYoaXBjLCB1bnNpZ25lZCBpbnQsIGNhbGwsIGludCwgZmlyc3QsIGludCwgc2Vjb25kLAotCXVuc2lnbmVkIGxvbmcsIHRoaXJkLCB2b2lkIF9fdXNlciAqLCBwdHIsIGxvbmcsIGZpZnRoKQotewotCWludCB2ZXJzaW9uLCByZXQ7Ci0KLQl2ZXJzaW9uID0gY2FsbCA+PiAxNjsgLyogaGFjayBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwotCWNhbGwgJj0gMHhmZmZmOwotCi0Jc3dpdGNoIChjYWxsKSB7Ci0JY2FzZSBTRU1PUDoKLQkJcmV0dXJuIHN5c19zZW10aW1lZG9wKGZpcnN0LCAoc3RydWN0IHNlbWJ1ZiBfX3VzZXIgKilwdHIsCi0JCSAgICAgICAgICAgICAgICAgICAgICBzZWNvbmQsIE5VTEwpOwotCWNhc2UgU0VNVElNRURPUDoKLQkJcmV0dXJuIHN5c19zZW10aW1lZG9wKGZpcnN0LCAoc3RydWN0IHNlbWJ1ZiBfX3VzZXIgKilwdHIsCi0JCQkJICAgICAgc2Vjb25kLAotCQkJCSAgICAgIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopZmlmdGgpOwotCWNhc2UgU0VNR0VUOgotCQlyZXR1cm4gc3lzX3NlbWdldChmaXJzdCwgc2Vjb25kLCB0aGlyZCk7Ci0JY2FzZSBTRU1DVEw6IHsKLQkJdW5pb24gc2VtdW4gZm91cnRoOwotCQlpZiAoIXB0cikKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoZ2V0X3VzZXIoZm91cnRoLl9fcGFkLCAodm9pZCBfX3VzZXIgKl9fdXNlciAqKSBwdHIpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiBzeXNfc2VtY3RsKGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBmb3VydGgpOwotCX0KLQotCWNhc2UgTVNHU05EOgotCQlyZXR1cm4gc3lzX21zZ3NuZChmaXJzdCwgKHN0cnVjdCBtc2didWYgX191c2VyICopIHB0ciwKLQkJCQkgIHNlY29uZCwgdGhpcmQpOwotCWNhc2UgTVNHUkNWOgotCQlzd2l0Y2ggKHZlcnNpb24pIHsKLQkJY2FzZSAwOiB7Ci0JCQlzdHJ1Y3QgaXBjX2tsdWRnZSB0bXA7Ci0JCQlpZiAoIXB0cikKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsCi0JCQkJCSAgIChzdHJ1Y3QgaXBjX2tsdWRnZSBfX3VzZXIgKikgcHRyLAotCQkJCQkgICBzaXplb2YodG1wKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gc3lzX21zZ3JjdihmaXJzdCwgdG1wLm1zZ3AsIHNlY29uZCwKLQkJCQkJICB0bXAubXNndHlwLCB0aGlyZCk7Ci0JCX0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiBzeXNfbXNncmN2KGZpcnN0LAotCQkJCQkgIChzdHJ1Y3QgbXNnYnVmIF9fdXNlciAqKSBwdHIsCi0JCQkJCSAgc2Vjb25kLCBmaWZ0aCwgdGhpcmQpOwotCQl9Ci0JY2FzZSBNU0dHRVQ6Ci0JCXJldHVybiBzeXNfbXNnZ2V0KChrZXlfdCkgZmlyc3QsIHNlY29uZCk7Ci0JY2FzZSBNU0dDVEw6Ci0JCXJldHVybiBzeXNfbXNnY3RsKGZpcnN0LCBzZWNvbmQsCi0JCQkJICAoc3RydWN0IG1zcWlkX2RzIF9fdXNlciAqKSBwdHIpOwotCi0JY2FzZSBTSE1BVDoKLQkJc3dpdGNoICh2ZXJzaW9uKSB7Ci0JCWRlZmF1bHQ6IHsKLQkJCXVuc2lnbmVkIGxvbmcgcmFkZHI7Ci0JCQlyZXQgPSBkb19zaG1hdChmaXJzdCwgKGNoYXIgX191c2VyICopIHB0ciwgc2Vjb25kLAotCQkJCSAgICAgICAmcmFkZHIpOwotCQkJaWYgKHJldCkKLQkJCQlyZXR1cm4gcmV0OwotCQkJcmV0dXJuIHB1dF91c2VyKHJhZGRyLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKikgdGhpcmQpOwotCQl9Ci0JCWNhc2UgMToJLyogaUJDUzIgZW11bGF0b3IgZW50cnkgcG9pbnQgKi8KLQkJCWlmICghc2VnbWVudF9lcShnZXRfZnMoKSwgZ2V0X2RzKCkpKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJcmV0dXJuIGRvX3NobWF0KGZpcnN0LCAoY2hhciBfX3VzZXIgKikgcHRyLCBzZWNvbmQsCi0JCQkJICAgICAgICAodW5zaWduZWQgbG9uZyAqKSB0aGlyZCk7Ci0JCX0KLQljYXNlIFNITURUOgotCQlyZXR1cm4gc3lzX3NobWR0KChjaGFyIF9fdXNlciAqKXB0cik7Ci0JY2FzZSBTSE1HRVQ6Ci0JCXJldHVybiBzeXNfc2htZ2V0KGZpcnN0LCBzZWNvbmQsIHRoaXJkKTsKLQljYXNlIFNITUNUTDoKLQkJcmV0dXJuIHN5c19zaG1jdGwoZmlyc3QsIHNlY29uZCwKLQkJCQkgIChzdHJ1Y3Qgc2htaWRfZHMgX191c2VyICopIHB0cik7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9TWVM7Ci0JfQotfQotCi0vKgogICogTm8gaW1wbGVtZW50ZWQgeWV0IC4uLgogICovCiBTWVNDQUxMX0RFRklORTMoY2FjaGVjdGwsIGNoYXIgKiwgYWRkciwgaW50LCBuYnl0ZXMsIGludCwgb3ApCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHh4OS9nZW5lcmljLzdzZWdsZWQuYyBiL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvN3NlZ2xlZC5jCmluZGV4IDcyN2FiMjEuLjdmODQxNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvN3NlZ2xlZC5jCisrKyBiL2FyY2gvbWlwcy90eHg5L2dlbmVyaWMvN3NlZ2xlZC5jCkBAIC01OCwxMyArNTgsMTYgQEAKIHN0YXRpYyBTWVNERVZfQVRUUihhc2NpaSwgMDIwMCwgTlVMTCwgYXNjaWlfc3RvcmUpOwogc3RhdGljIFNZU0RFVl9BVFRSKHJhdywgMDIwMCwgTlVMTCwgcmF3X3N0b3JlKTsKIAotc3RhdGljIHNzaXplX3QgbWFwX3NlZzdfc2hvdyhzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbGFzcywgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgbWFwX3NlZzdfc2hvdyhzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbGFzcywKKwkJCSAgICAgc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNoYXIgKmJ1ZikKIHsKIAltZW1jcHkoYnVmLCAmdHh4OV9zZWc3bWFwLCBzaXplb2YodHh4OV9zZWc3bWFwKSk7CiAJcmV0dXJuIHNpemVvZih0eHg5X3NlZzdtYXApOwogfQogCiBzdGF0aWMgc3NpemVfdCBtYXBfc2VnN19zdG9yZShzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbGFzcywKKwkJCSAgICAgIHN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICphdHRyLAogCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKIAlpZiAoc2l6ZSAhPSBzaXplb2YodHh4OV9zZWc3bWFwKSkKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggY2NhZThmNi4uNGVkMTUyMiAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTE3LDYgKzE3LDExIEBACiAjaW5jbHVkZSA8YXNtL2NhY2hlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKKy8qCisgKiBTZWUgRG9jdW1lbnRhdGlvbi9ETUEtQVBJLnR4dCBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIGhvdyB0aGUKKyAqIGZvbGxvd2luZyBETUEgQVBJIHNob3VsZCB3b3JrLgorICovCisKIGV4dGVybiB2b2lkICpkbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKIAkJCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBpbnQgZmxhZyk7CiAKQEAgLTI2LDEzICszMSw2IEBACiAjZGVmaW5lIGRtYV9hbGxvY19ub25jb2hlcmVudChkLCBzLCBoLCBmKSBkbWFfYWxsb2NfY29oZXJlbnQoKGQpLCAocyksIChoKSwgKGYpKQogI2RlZmluZSBkbWFfZnJlZV9ub25jb2hlcmVudChkLCBzLCB2LCBoKSAgZG1hX2ZyZWVfY29oZXJlbnQoKGQpLCAocyksICh2KSwgKGgpKQogCi0vKgotICogTWFwIGEgc2luZ2xlIGJ1ZmZlciBvZiB0aGUgaW5kaWNhdGVkIHNpemUgZm9yIERNQSBpbiBzdHJlYW1pbmcgbW9kZS4gIFRoZQotICogMzItYml0IGJ1cyBhZGRyZXNzIHRvIHVzZSBpcyByZXR1cm5lZC4KLSAqCi0gKiBPbmNlIHRoZSBkZXZpY2UgaXMgZ2l2ZW4gdGhlIGRtYSBhZGRyZXNzLCB0aGUgZGV2aWNlIG93bnMgdGhpcyBtZW1vcnkgdW50aWwKLSAqIGVpdGhlciBwY2lfdW5tYXBfc2luZ2xlIG9yIHBjaV9kbWFfc3luY19zaW5nbGUgaXMgcGVyZm9ybWVkLgotICovCiBzdGF0aWMgaW5saW5lCiBkbWFfYWRkcl90IGRtYV9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKIAkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQpAQCAtNDIsMTQgKzQwLDYgQEAKIAlyZXR1cm4gdmlydF90b19idXMocHRyKTsKIH0KIAotLyoKLSAqIFVubWFwIGEgc2luZ2xlIHN0cmVhbWluZyBtb2RlIERNQSB0cmFuc2xhdGlvbi4gIFRoZSBkbWFfYWRkciBhbmQgc2l6ZSBtdXN0Ci0gKiBtYXRjaCB3aGF0IHdhcyBwcm92aWRlZCBmb3IgaW4gYSBwcmV2aW91cyBwY2lfbWFwX3NpbmdsZSBjYWxsLiAgQWxsIG90aGVyCi0gKiB1c2FnZXMgYXJlIHVuZGVmaW5lZC4KLSAqCi0gKiBBZnRlciB0aGlzIGNhbGwsIHJlYWRzIGJ5IHRoZSBjcHUgdG8gdGhlIGJ1ZmZlciBhcmUgZ3VhcmVudGVlZCB0byBzZWUKLSAqIHdoYXRldmVyIHRoZSBkZXZpY2Ugd3JvdGUgdGhlcmUuCi0gKi8KIHN0YXRpYyBpbmxpbmUKIHZvaWQgZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAogCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCkBAIC01NywyMCArNDcsNiBAQAogCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOwogfQogCi0vKgotICogTWFwIGEgc2V0IG9mIGJ1ZmZlcnMgZGVzY3JpYmVkIGJ5IHNjYXR0ZXJsaXN0IGluIHN0cmVhbWluZyBtb2RlIGZvciBETUEuCi0gKiBUaGlzIGlzIHRoZSBzY2F0aGVyLWdhdGhlciB2ZXJzaW9uIG9mIHRoZSBhYm92ZSBwY2lfbWFwX3NpbmdsZSBpbnRlcmZhY2UuCi0gKiBIZXJlIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0IGVsZW1lbnRzIGFyZSBlYWNoIHRhZ2dlZCB3aXRoIHRoZSBhcHByb3ByaWF0ZQotICogZG1hIGFkZHJlc3MgYW5kIGxlbmd0aC4gIFRoZXkgYXJlIG9idGFpbmVkIHZpYSBzZ19kbWFfe2FkZHJlc3MsbGVuZ3RofShTRykuCi0gKgotICogTk9URTogQW4gaW1wbGVtZW50YXRpb24gbWF5IGJlIGFibGUgdG8gdXNlIGEgc21hbGxlciBudW1iZXIgb2YgRE1BCi0gKiAgICAgICBhZGRyZXNzL2xlbmd0aCBwYWlycyB0aGFuIHRoZXJlIGFyZSBTRyB0YWJsZSBlbGVtZW50cy4gIChmb3IgZXhhbXBsZQotICogICAgICAgdmlhIHZpcnR1YWwgbWFwcGluZyBjYXBhYmlsaXRpZXMpIFRoZSByb3V0aW5lIHJldHVybnMgdGhlIG51bWJlciBvZgotICogICAgICAgYWRkci9sZW5ndGggcGFpcnMgYWN0dWFsbHkgdXNlZCwgYXQgbW9zdCBuZW50cy4KLSAqCi0gKiBEZXZpY2Ugb3duZXJzaGlwIGlzc3VlcyBhcyBtZW50aW9uZWQgYWJvdmUgZm9yIHBjaV9tYXBfc2luZ2xlIGFyZSB0aGUgc2FtZQotICogaGVyZS4KLSAqLwogc3RhdGljIGlubGluZQogaW50IGRtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IG5lbnRzLAogCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCkBAIC05MSwxMSArNjcsNiBAQAogCXJldHVybiBuZW50czsKIH0KIAotLyoKLSAqIFVubWFwIGEgc2V0IG9mIHN0cmVhbWluZyBtb2RlIERNQSB0cmFuc2xhdGlvbnMuCi0gKiBBZ2FpbiwgY3B1IHJlYWQgcnVsZXMgY29uY2VybmluZyBjYWxscyBoZXJlIGFyZSB0aGUgc2FtZSBhcyBmb3IKLSAqIHBjaV91bm1hcF9zaW5nbGUoKSBhYm92ZS4KLSAqLwogc3RhdGljIGlubGluZQogdm9pZCBkbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmh3ZW50cmllcywKIAkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCkBAIC0xMDMsMTAgKzc0LDYgQEAKIAlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CiB9CiAKLS8qCi0gKiBwY2lfe21hcCx1bm1hcH1fc2luZ2xlX3BhZ2UgbWFwcyBhIGtlcm5lbCBwYWdlIHRvIGEgZG1hX2FkZHJfdC4gaWRlbnRpY2FsCi0gKiB0byBwY2lfbWFwX3NpbmdsZSwgYnV0IHRha2VzIGEgc3RydWN0IHBhZ2UgaW5zdGVhZCBvZiBhIHZpcnR1YWwgYWRkcmVzcwotICovCiBzdGF0aWMgaW5saW5lCiBkbWFfYWRkcl90IGRtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAogCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLApAQCAtMTIzLDE1ICs5MCw2IEBACiAJQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CiB9CiAKLS8qCi0gKiBNYWtlIHBoeXNpY2FsIG1lbW9yeSBjb25zaXN0ZW50IGZvciBhIHNpbmdsZSBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb24KLSAqIGFmdGVyIGEgdHJhbnNmZXIuCi0gKgotICogSWYgeW91IHBlcmZvcm0gYSBwY2lfbWFwX3NpbmdsZSgpIGJ1dCB3aXNoIHRvIGludGVycm9nYXRlIHRoZSBidWZmZXIgdXNpbmcKLSAqIHRoZSBjcHUsIHlldCBkbyBub3Qgd2lzaCB0byB0ZWFyZG93biB0aGUgUENJIGRtYSBtYXBwaW5nLCB5b3UgbXVzdCBjYWxsIHRoaXMKLSAqIGZ1bmN0aW9uIGJlZm9yZSBkb2luZyBzby4gIEF0IHRoZSBuZXh0IHBvaW50IHlvdSBnaXZlIHRoZSBQQ0kgZG1hIGFkZHJlc3MKLSAqIGJhY2sgdG8gdGhlIGNhcmQsIHRoZSBkZXZpY2UgYWdhaW4gb3ducyB0aGUgYnVmZmVyLgotICovCiBzdGF0aWMgaW5saW5lCiB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAogCQkJICAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQpAQCAtMTYxLDEzICsxMTksNiBAQAogfQogCiAKLS8qCi0gKiBNYWtlIHBoeXNpY2FsIG1lbW9yeSBjb25zaXN0ZW50IGZvciBhIHNldCBvZiBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb25zCi0gKiBhZnRlciBhIHRyYW5zZmVyLgotICoKLSAqIFRoZSBzYW1lIGFzIHBjaV9kbWFfc3luY19zaW5nbGUgYnV0IGZvciBhIHNjYXR0ZXItZ2F0aGVyIGxpc3QsIHNhbWUgcnVsZXMKLSAqIGFuZCB1c2FnZS4KLSAqLwogc3RhdGljIGlubGluZQogdm9pZCBkbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKIAkJCSBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCkBAIC0xODcsMTIgKzEzOCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gUENJIGRldmljZSBETUEgYWRkcmVzcyBtYXNrIGNhbiBiZSBzdXBwb3J0ZWQKLSAqIHByb3Blcmx5LiAgRm9yIGV4YW1wbGUsIGlmIHlvdXIgZGV2aWNlIGNhbiBvbmx5IGRyaXZlIHRoZSBsb3cgMjQtYml0cyBkdXJpbmcKLSAqIFBDSSBidXMgbWFzdGVyaW5nLCB0aGVuIHlvdSB3b3VsZCBwYXNzIDB4MDBmZmZmZmYgYXMgdGhlIG1hc2sgdG8gdGhpcwotICogZnVuY3Rpb24uCi0gKi8KIHN0YXRpYyBpbmxpbmUKIGludCBkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCiB7CmRpZmYgLS1naXQgYS9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vcHRyYWNlLmggYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggMWIwYmE1ZS4uN2MyZTkxMSAxMDA2NDQKLS0tIGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS9wdHJhY2UuaApAQCAtOTksOCArOTksNiBAQAogZXh0ZXJuIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICopOwogCiAjZGVmaW5lIGFyY2hfaGFzX3NpbmdsZV9zdGVwKCkJKDEpCi1leHRlcm4gdm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7Ci1leHRlcm4gdm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICopOwogCiAjZW5kaWYgIC8qICAhX19BU1NFTUJMWSAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9tbjEwMzAwL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGMwNWFjYjkuLjlkMDU2ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvbW4xMDMwMC9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTM2Myw2ICszNjMsNyBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfSVBDCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTApAQCAtMzc1LDYgKzM3Niw3IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9TRUxFQ1QKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvZW50cnkuUyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvZW50cnkuUwppbmRleCA4OGUzZTFjLi5kOWVkNWExIDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9lbnRyeS5TCkBAIC00NjgsNyArNDY4LDcgQEAKIAkubG9uZyBzeXNfc2V0dGltZW9mZGF5CiAJLmxvbmcgc3lzX2dldGdyb3VwczE2CS8qIDgwICovCiAJLmxvbmcgc3lzX3NldGdyb3VwczE2Ci0JLmxvbmcgb2xkX3NlbGVjdAorCS5sb25nIHN5c19vbGRfc2VsZWN0CiAJLmxvbmcgc3lzX3N5bWxpbmsKIAkubG9uZyBzeXNfbHN0YXQKIAkubG9uZyBzeXNfcmVhZGxpbmsJLyogODUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvbW4xMDMwMC9rZXJuZWwvc3lzX21uMTAzMDAuYyBiL2FyY2gvbW4xMDMwMC9rZXJuZWwvc3lzX21uMTAzMDAuYwppbmRleCAxN2NjNmNlLi44MTVmMTM1IDEwMDY0NAotLS0gYS9hcmNoL21uMTAzMDAva2VybmVsL3N5c19tbjEwMzAwLmMKKysrIGIvYXJjaC9tbjEwMzAwL2tlcm5lbC9zeXNfbW4xMDMwMC5jCkBAIC0zMSwxMDkgKzMxLDMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIHN5c19tbWFwX3Bnb2ZmKGFkZHIsIGxlbiwgcHJvdCwgZmxhZ3MsIGZkLCBvZmZzZXQgPj4gUEFHRV9TSElGVCk7CiB9Ci0KLXN0cnVjdCBzZWxfYXJnX3N0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBuOwotCWZkX3NldCAqaW5wOwotCWZkX3NldCAqb3V0cDsKLQlmZF9zZXQgKmV4cDsKLQlzdHJ1Y3QgdGltZXZhbCAqdHZwOwotfTsKLQotYXNtbGlua2FnZSBpbnQgb2xkX3NlbGVjdChzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QgX191c2VyICphcmcpCi17Ci0Jc3RydWN0IHNlbF9hcmdfc3RydWN0IGE7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmEsIGFyZywgc2l6ZW9mKGEpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JLyogc3lzX3NlbGVjdCgpIGRvZXMgdGhlIGFwcHJvcHJpYXRlIGtlcm5lbCBsb2NraW5nICovCi0JcmV0dXJuIHN5c19zZWxlY3QoYS5uLCBhLmlucCwgYS5vdXRwLCBhLmV4cCwgYS50dnApOwotfQotCi0vKgotICogc3lzX2lwYygpIGlzIHRoZSBkZS1tdWx0aXBsZXhlciBmb3IgdGhlIFN5c1YgSVBDIGNhbGxzLi4KLSAqCi0gKiBUaGlzIGlzIHJlYWxseSBob3JyaWJseSB1Z2x5LgotICovCi1hc21saW5rYWdlIGxvbmcgc3lzX2lwYyh1aW50IGNhbGwsIGludCBmaXJzdCwgaW50IHNlY29uZCwKLQkJCWludCB0aGlyZCwgdm9pZCBfX3VzZXIgKnB0ciwgbG9uZyBmaWZ0aCkKLXsKLQlpbnQgdmVyc2lvbiwgcmV0OwotCi0JdmVyc2lvbiA9IGNhbGwgPj4gMTY7IC8qIGhhY2sgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLQljYWxsICY9IDB4ZmZmZjsKLQotCXN3aXRjaCAoY2FsbCkgewotCWNhc2UgU0VNT1A6Ci0JCXJldHVybiBzeXNfc2VtdGltZWRvcChmaXJzdCwgKHN0cnVjdCBzZW1idWYgX191c2VyICopcHRyLAotCQkJCSAgICAgIHNlY29uZCwgTlVMTCk7Ci0JY2FzZSBTRU1USU1FRE9QOgotCQlyZXR1cm4gc3lzX3NlbXRpbWVkb3AoZmlyc3QsIChzdHJ1Y3Qgc2VtYnVmIF9fdXNlciAqKXB0ciwKLQkJCQkgICAgICBzZWNvbmQsCi0JCQkJICAgICAgKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKilmaWZ0aCk7Ci0JY2FzZSBTRU1HRVQ6Ci0JCXJldHVybiBzeXNfc2VtZ2V0KGZpcnN0LCBzZWNvbmQsIHRoaXJkKTsKLQljYXNlIFNFTUNUTDogewotCQl1bmlvbiBzZW11biBmb3VydGg7Ci0JCWlmICghcHRyKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWlmIChnZXRfdXNlcihmb3VydGguX19wYWQsICh2b2lkIF9fdXNlciAqIF9fdXNlciAqKSBwdHIpKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiBzeXNfc2VtY3RsKGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBmb3VydGgpOwotCX0KLQotCWNhc2UgTVNHU05EOgotCQlyZXR1cm4gc3lzX21zZ3NuZChmaXJzdCwgKHN0cnVjdCBtc2didWYgX191c2VyICopIHB0ciwKLQkJCQkgIHNlY29uZCwgdGhpcmQpOwotCWNhc2UgTVNHUkNWOgotCQlzd2l0Y2ggKHZlcnNpb24pIHsKLQkJY2FzZSAwOiB7Ci0JCQlzdHJ1Y3QgaXBjX2tsdWRnZSB0bXA7Ci0JCQlpZiAoIXB0cikKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsCi0JCQkJCSAgIChzdHJ1Y3QgaXBjX2tsdWRnZSBfX3VzZXIgKikgcHRyLAotCQkJCQkgICBzaXplb2YodG1wKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gc3lzX21zZ3JjdihmaXJzdCwgdG1wLm1zZ3AsIHNlY29uZCwKLQkJCQkJICB0bXAubXNndHlwLCB0aGlyZCk7Ci0JCX0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiBzeXNfbXNncmN2KGZpcnN0LAotCQkJCQkgIChzdHJ1Y3QgbXNnYnVmIF9fdXNlciAqKSBwdHIsCi0JCQkJCSAgIHNlY29uZCwgZmlmdGgsIHRoaXJkKTsKLQkJfQotCWNhc2UgTVNHR0VUOgotCQlyZXR1cm4gc3lzX21zZ2dldCgoa2V5X3QpIGZpcnN0LCBzZWNvbmQpOwotCWNhc2UgTVNHQ1RMOgotCQlyZXR1cm4gc3lzX21zZ2N0bChmaXJzdCwgc2Vjb25kLAotCQkJCSAgIChzdHJ1Y3QgbXNxaWRfZHMgX191c2VyICopIHB0cik7Ci0KLQljYXNlIFNITUFUOgotCQlzd2l0Y2ggKHZlcnNpb24pIHsKLQkJZGVmYXVsdDogewotCQkJdWxvbmcgcmFkZHI7Ci0JCQlyZXQgPSBkb19zaG1hdChmaXJzdCwgKGNoYXIgX191c2VyICopIHB0ciwgc2Vjb25kLAotCQkJCSAgICAgICAmcmFkZHIpOwotCQkJaWYgKHJldCkKLQkJCQlyZXR1cm4gcmV0OwotCQkJcmV0dXJuIHB1dF91c2VyKHJhZGRyLCAodWxvbmcgKikgdGhpcmQpOwotCQl9Ci0JCWNhc2UgMToJLyogaUJDUzIgZW11bGF0b3IgZW50cnkgcG9pbnQgKi8KLQkJCWlmICghc2VnbWVudF9lcShnZXRfZnMoKSwgZ2V0X2RzKCkpKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJcmV0dXJuIGRvX3NobWF0KGZpcnN0LCAoY2hhciBfX3VzZXIgKikgcHRyLCBzZWNvbmQsCi0JCQkJCSh1bG9uZyAqKSB0aGlyZCk7Ci0JCX0KLQljYXNlIFNITURUOgotCQlyZXR1cm4gc3lzX3NobWR0KChjaGFyIF9fdXNlciAqKXB0cik7Ci0JY2FzZSBTSE1HRVQ6Ci0JCXJldHVybiBzeXNfc2htZ2V0KGZpcnN0LCBzZWNvbmQsIHRoaXJkKTsKLQljYXNlIFNITUNUTDoKLQkJcmV0dXJuIHN5c19zaG1jdGwoZmlyc3QsIHNlY29uZCwKLQkJCQkgIChzdHJ1Y3Qgc2htaWRfZHMgX191c2VyICopIHB0cik7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotfQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvS2NvbmZpZyBiL2FyY2gvcGFyaXNjL0tjb25maWcKaW5kZXggZjM4OGRjNi4uOWM0ZGEzZCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvS2NvbmZpZworKysgYi9hcmNoL3BhcmlzYy9LY29uZmlnCkBAIC05NSw2ICs5NSw5IEBACiBjb25maWcgU1RBQ0tUUkFDRV9TVVBQT1JUCiAJZGVmX2Jvb2wgeQogCitjb25maWcgTkVFRF9ETUFfTUFQX1NUQVRFCisJZGVmX2Jvb2wgeQorCiBjb25maWcgSVNBX0RNQV9BUEkKIAlib29sCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL0tjb25maWcuZGVidWcgYi9hcmNoL3BhcmlzYy9LY29uZmlnLmRlYnVnCmluZGV4IGJjOTg5ZTUuLjczMDVhYzggMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9wYXJpc2MvS2NvbmZpZy5kZWJ1ZwpAQCAtMTIsNCArMTIsMTggQEAKICAgICAgICAgIHBvcnRpb24gb2YgdGhlIGtlcm5lbCBjb2RlIHdvbid0IGJlIGNvdmVyZWQgYnkgYSBUTEIgYW55bW9yZS4KICAgICAgICAgIElmIGluIGRvdWJ0LCBzYXkgIk4iLgogCitjb25maWcgREVCVUdfU1RSSUNUX1VTRVJfQ09QWV9DSEVDS1MKKwlib29sICJTdHJpY3QgY29weSBzaXplIGNoZWNrcyIKKwlkZXBlbmRzIG9uIERFQlVHX0tFUk5FTCAmJiAhVFJBQ0VfQlJBTkNIX1BST0ZJTElORworCS0tLWhlbHAtLS0KKwkgIEVuYWJsaW5nIHRoaXMgb3B0aW9uIHR1cm5zIGEgY2VydGFpbiBzZXQgb2Ygc2FuaXR5IGNoZWNrcyBmb3IgdXNlcgorCSAgY29weSBvcGVyYXRpb25zIGludG8gY29tcGlsZSB0aW1lIGZhaWx1cmVzLgorCisJICBUaGUgY29weV9mcm9tX3VzZXIoKSBldGMgY2hlY2tzIGFyZSB0aGVyZSB0byBoZWxwIHRlc3QgaWYgdGhlcmUKKwkgIGFyZSBzdWZmaWNpZW50IHNlY3VyaXR5IGNoZWNrcyBvbiB0aGUgbGVuZ3RoIGFyZ3VtZW50IG9mCisJICB0aGUgY29weSBvcGVyYXRpb24sIGJ5IGhhdmluZyBnY2MgcHJvdmUgdGhhdCB0aGUgYXJndW1lbnQgaXMKKwkgIHdpdGhpbiBib3VuZHMuCisKKwkgIElmIHVuc3VyZSwgb3IgaWYgeW91IHJ1biBhbiBvbGRlciAocHJlIDQuNCkgZ2NjLCBzYXkgTi4KKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vY29tcGF0LmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jb21wYXQuaAppbmRleCA3ZjMyNjExLi4wMmI3N2JhIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jb21wYXQuaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9jb21wYXQuaApAQCAtNyw3ICs3LDggQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CiAKLSNkZWZpbmUgQ09NUEFUX1VTRVJfSFogMTAwCisjZGVmaW5lIENPTVBBVF9VU0VSX0haIAkJMTAwCisjZGVmaW5lIENPTVBBVF9VVFNfTUFDSElORQkicGFyaXNjXDBcMCIKIAogdHlwZWRlZiB1MzIJY29tcGF0X3NpemVfdDsKIHR5cGVkZWYgczMyCWNvbXBhdF9zc2l6ZV90OwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFyYW0uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BhcmFtLmgKaW5kZXggMzJlMDNkOC4uOTY1ZDQ1NCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGFyYW0uaAorKysgYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9wYXJhbS5oCkBAIC0xLDIyICsxIEBACi0jaWZuZGVmIF9BU01QQVJJU0NfUEFSQU1fSAotI2RlZmluZSBfQVNNUEFSSVNDX1BBUkFNX0gKLQotI2lmZGVmIF9fS0VSTkVMX18KLSNkZWZpbmUgSFoJCUNPTkZJR19IWgotI2RlZmluZSBVU0VSX0haCQkxMDAJCS8qIHNvbWUgdXNlciBBUEkgdXNlICJ0aWNrcyIgKi8KLSNkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMJKFVTRVJfSFopCS8qIGxpa2UgdGltZXMoKSAqLwotI2VuZGlmCi0KLSNpZm5kZWYgSFoKLSNkZWZpbmUgSFogMTAwCi0jZW5kaWYKLQotI2RlZmluZSBFWEVDX1BBR0VTSVpFCTQwOTYKLQotI2lmbmRlZiBOT0dST1VQCi0jZGVmaW5lIE5PR1JPVVAJCSgtMSkKLSNlbmRpZgotCi0jZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0CS8qIG1heCBsZW5ndGggb2YgaG9zdG5hbWUgKi8KLQotI2VuZGlmCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGFyYW0uaD4KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggNjRjN2FhNS4uMjI0MmE1YyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTE4MywyMCArMTgzLDYgQEAKIAl2b2lkICgqZml4dXBfYnVzKShzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIH07CiAKLS8qIHBjaV91bm1hcF97c2luZ2xlLHBhZ2V9IGlzIG5vdCBhIG5vcCwgdGh1cy4uLiAqLwotI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKEFERFJfTkFNRSkJXAotCWRtYV9hZGRyX3QgQUREUl9OQU1FOwotI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9MRU4oTEVOX05BTUUpCQlcCi0JX191MzIgTEVOX05BTUU7Ci0jZGVmaW5lIHBjaV91bm1hcF9hZGRyKFBUUiwgQUREUl9OQU1FKQkJCVwKLQkoKFBUUiktPkFERFJfTkFNRSkKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHJfc2V0KFBUUiwgQUREUl9OQU1FLCBWQUwpCQlcCi0JKCgoUFRSKS0+QUREUl9OQU1FKSA9IChWQUwpKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuKFBUUiwgTEVOX05BTUUpCQkJXAotCSgoUFRSKS0+TEVOX05BTUUpCi0jZGVmaW5lIHBjaV91bm1hcF9sZW5fc2V0KFBUUiwgTEVOX05BTUUsIFZBTCkJCVwKLQkoKChQVFIpLT5MRU5fTkFNRSkgPSAoVkFMKSkKLQogLyoKICoqIFN0dWZmIGRlY2xhcmVkIGluIGFyY2gvcGFyaXNjL2tlcm5lbC9wY2kuYwogKi8KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggYWVhZDQwYi4uN2YwOTUzMyAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTQ3LDEzICs0Nyw4IEBACiAKICNkZWZpbmUgdGFza19yZWdzKHRhc2spICgoc3RydWN0IHB0X3JlZ3MgKikgKChjaGFyICopKHRhc2spICsgVEFTS19SRUdTKSkKIAotc3RydWN0IHRhc2tfc3RydWN0OwogI2RlZmluZSBhcmNoX2hhc19zaW5nbGVfc3RlcCgpCTEKLXZvaWQgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7Ci12b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayk7Ci0KICNkZWZpbmUgYXJjaF9oYXNfYmxvY2tfc3RlcCgpCTEKLXZvaWQgdXNlcl9lbmFibGVfYmxvY2tfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spOwogCiAvKiBYWFggc2hvdWxkIHdlIHVzZSBpYW9xWzFdIG9yIGlhb3FbMF0gPyAqLwogI2RlZmluZSB1c2VyX21vZGUocmVncykJCQkoKChyZWdzKS0+aWFvcVswXSAmIDMpID8gMSA6IDApCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IGQ5MTM1N2IuLjQ2NTNjNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0xNjAsNyArMTYwLDcgQEAKICAgIGxkY2QpLiAqLwogCiAjZGVmaW5lIF9fUEFfTERDV19BTElHTk1FTlQJNAotI2RlZmluZSBfX2xkY3dfYWxpZ24oYSkgKCh2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilhKQorI2RlZmluZSBfX2xkY3dfYWxpZ24oYSkgKCYoYSktPnNsb2NrKQogI2RlZmluZSBfX0xEQ1cJImxkY3csY28iCiAKICNlbmRpZiAvKiFDT05GSUdfUEEyMCovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91YWNjZXNzLmggYi9hcmNoL3BhcmlzYy9pbmNsdWRlL2FzbS91YWNjZXNzLmgKaW5kZXggN2NmNzk5ZC4uZmY0Y2Y5ZCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdWFjY2Vzcy5oCisrKyBiL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaApAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy91YWNjZXNzLXVuYWxpZ25lZC5oPgogCiAjZGVmaW5lIFZFUklGWV9SRUFEIDAKQEAgLTIzNCwxMyArMjM1LDM1IEBACiAKIHVuc2lnbmVkIGxvbmcgY29weV90b191c2VyKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBsZW4pOwogI2RlZmluZSBfX2NvcHlfdG9fdXNlciBjb3B5X3RvX3VzZXIKLXVuc2lnbmVkIGxvbmcgY29weV9mcm9tX3VzZXIodm9pZCAqZHN0LCBjb25zdCB2b2lkIF9fdXNlciAqc3JjLCB1bnNpZ25lZCBsb25nIGxlbik7Ci0jZGVmaW5lIF9fY29weV9mcm9tX3VzZXIgY29weV9mcm9tX3VzZXIKK3Vuc2lnbmVkIGxvbmcgX19jb3B5X2Zyb21fdXNlcih2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIGxvbmcgbGVuKTsKIHVuc2lnbmVkIGxvbmcgY29weV9pbl91c2VyKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIGxvbmcgbGVuKTsKICNkZWZpbmUgX19jb3B5X2luX3VzZXIgY29weV9pbl91c2VyCiAjZGVmaW5lIF9fY29weV90b191c2VyX2luYXRvbWljIF9fY29weV90b191c2VyCiAjZGVmaW5lIF9fY29weV9mcm9tX3VzZXJfaW5hdG9taWMgX19jb3B5X2Zyb21fdXNlcgogCitleHRlcm4gdm9pZCBjb3B5X2Zyb21fdXNlcl9vdmVyZmxvdyh2b2lkKQorI2lmZGVmIENPTkZJR19ERUJVR19TVFJJQ1RfVVNFUl9DT1BZX0NIRUNLUworICAgICAgICBfX2NvbXBpbGV0aW1lX2Vycm9yKCJjb3B5X2Zyb21fdXNlcigpIGJ1ZmZlciBzaXplIGlzIG5vdCBwcm92YWJseSBjb3JyZWN0IikKKyNlbHNlCisgICAgICAgIF9fY29tcGlsZXRpbWVfd2FybmluZygiY29weV9mcm9tX3VzZXIoKSBidWZmZXIgc2l6ZSBpcyBub3QgcHJvdmFibHkgY29ycmVjdCIpCisjZW5kaWYKKzsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fbXVzdF9jaGVjayBjb3B5X2Zyb21fdXNlcih2b2lkICp0bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgX191c2VyICpmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBuKQoreworICAgICAgICBpbnQgc3ogPSBfX2NvbXBpbGV0aW1lX29iamVjdF9zaXplKHRvKTsKKyAgICAgICAgaW50IHJldCA9IC1FRkFVTFQ7CisKKyAgICAgICAgaWYgKGxpa2VseShzeiA9PSAtMSB8fCAhX19idWlsdGluX2NvbnN0YW50X3AobikgfHwgc3ogPj0gbikpCisgICAgICAgICAgICAgICAgcmV0ID0gX19jb3B5X2Zyb21fdXNlcih0bywgZnJvbSwgbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb3B5X2Zyb21fdXNlcl9vdmVyZmxvdygpOworCisgICAgICAgIHJldHVybiByZXQ7Cit9CisKIHN0cnVjdCBwdF9yZWdzOwogaW50IGZpeHVwX2V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggY2RhMTU4My4uMWNlN2QyOCAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTgxMSw4ICs4MTEsMTAgQEAKICNkZWZpbmUgX19OUl9wd3JpdGV2CQkoX19OUl9MaW51eCArIDMxNikKICNkZWZpbmUgX19OUl9ydF90Z3NpZ3F1ZXVlaW5mbwkoX19OUl9MaW51eCArIDMxNykKICNkZWZpbmUgX19OUl9wZXJmX2V2ZW50X29wZW4JKF9fTlJfTGludXggKyAzMTgpCisjZGVmaW5lIF9fTlJfcmVjdm1tc2cJCShfX05SX0xpbnV4ICsgMzE5KQorI2RlZmluZSBfX05SX2FjY2VwdDQJCShfX05SX0xpbnV4ICsgMzIwKQogCi0jZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJKF9fTlJfcGVyZl9ldmVudF9vcGVuICsgMSkKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkoX19OUl9hY2NlcHQ0ICsgMSkKIAogCiAjZGVmaW5lIF9fSUdOT1JFX3NlbGVjdAkJLyogbmV3c2VsZWN0ICovCmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvY2FjaGUuYyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jCmluZGV4IDEwNTRiYWEuLmQwNTRmM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9jYWNoZS5jCkBAIC0xNzEsMTQgKzE3MSwxNCBAQAogCQljYWNoZV9pbmZvLmljX2NvbmYuY2NfY3N0LAogCQljYWNoZV9pbmZvLmljX2NvbmYuY2NfaHYpOwogCi0JcHJpbnRrKCJELVRMQiBjb25mOiBzaCAlZCBwYWdlICVkIGNzdCAlZCBhaWQgJWQgcGFkMSAlZCBcbiIsCisJcHJpbnRrKCJELVRMQiBjb25mOiBzaCAlZCBwYWdlICVkIGNzdCAlZCBhaWQgJWQgcGFkMSAlZFxuIiwKIAkJY2FjaGVfaW5mby5kdF9jb25mLnRjX3NoLAogCQljYWNoZV9pbmZvLmR0X2NvbmYudGNfcGFnZSwKIAkJY2FjaGVfaW5mby5kdF9jb25mLnRjX2NzdCwKIAkJY2FjaGVfaW5mby5kdF9jb25mLnRjX2FpZCwKIAkJY2FjaGVfaW5mby5kdF9jb25mLnRjX3BhZDEpOwogCi0JcHJpbnRrKCJJLVRMQiBjb25mOiBzaCAlZCBwYWdlICVkIGNzdCAlZCBhaWQgJWQgcGFkMSAlZCBcbiIsCisJcHJpbnRrKCJJLVRMQiBjb25mOiBzaCAlZCBwYWdlICVkIGNzdCAlZCBhaWQgJWQgcGFkMSAlZFxuIiwKIAkJY2FjaGVfaW5mby5pdF9jb25mLnRjX3NoLAogCQljYWNoZV9pbmZvLml0X2NvbmYudGNfcGFnZSwKIAkJY2FjaGVfaW5mby5pdF9jb25mLnRjX2NzdCwKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzX3BhcmlzYy5jCmluZGV4IDkxNDczOTEuLmM5YjkzMjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNfcGFyaXNjLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c19wYXJpc2MuYwpAQCAtMjM0LDE4ICsyMzQsMyBAQAogCiAJcmV0dXJuIGVycjsKIH0KLQotbG9uZyBwYXJpc2NfbmV3dW5hbWUoc3RydWN0IG5ld191dHNuYW1lIF9fdXNlciAqbmFtZSkKLXsKLQlpbnQgZXJyID0gc3lzX25ld3VuYW1lKG5hbWUpOwotCi0jaWZkZWYgQ09ORklHX0NPTVBBVAotCWlmICghZXJyICYmIHBlcnNvbmFsaXR5KGN1cnJlbnQtPnBlcnNvbmFsaXR5KSA9PSBQRVJfTElOVVgzMikgewotCQlpZiAoX19wdXRfdXNlcigwLCBuYW1lLT5tYWNoaW5lICsgNikgfHwKLQkJICAgIF9fcHV0X3VzZXIoMCwgbmFtZS0+bWFjaGluZSArIDcpKQotCQkJZXJyID0gLUVGQVVMVDsKLQl9Ci0jZW5kaWYKLQotCXJldHVybiBlcnI7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TIGIvYXJjaC9wYXJpc2Mva2VybmVsL3N5c2NhbGxfdGFibGUuUwppbmRleCAwMWM0ZmNmLi4zZDUyYzk3IDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvc3lzY2FsbF90YWJsZS5TCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9zeXNjYWxsX3RhYmxlLlMKQEAgLTEyNyw3ICsxMjcsNyBAQAogCUVOVFJZX1NBTUUoc29ja2V0cGFpcikKIAlFTlRSWV9TQU1FKHNldHBnaWQpCiAJRU5UUllfU0FNRShzZW5kKQotCUVOVFJZX09VUlMobmV3dW5hbWUpCisJRU5UUllfU0FNRShuZXd1bmFtZSkKIAlFTlRSWV9TQU1FKHVtYXNrKQkJLyogNjAgKi8KIAlFTlRSWV9TQU1FKGNocm9vdCkKIAlFTlRSWV9DT01QKHVzdGF0KQpAQCAtNDE3LDYgKzQxNyw4IEBACiAJRU5UUllfQ09NUChwd3JpdGV2KQogCUVOVFJZX0NPTVAocnRfdGdzaWdxdWV1ZWluZm8pCiAJRU5UUllfU0FNRShwZXJmX2V2ZW50X29wZW4pCisJRU5UUllfQ09NUChyZWN2bW1zZykKKwlFTlRSWV9TQU1FKGFjY2VwdDQpCQkvKiAzMjAgKi8KIAogCS8qIE5vdGhpbmcgeWV0ICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdGltZS5jCmluZGV4IGE3OWM2ZjkuLjA1NTExY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3RpbWUuYwpAQCAtMjUwLDkgKzI1MCwyMSBAQAogfQogbW9kdWxlX2luaXQocnRjX2luaXQpOwogCi12b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKK3ZvaWQgcmVhZF9wZXJzaXN0ZW50X2Nsb2NrKHN0cnVjdCB0aW1lc3BlYyAqdHMpCiB7CiAJc3RhdGljIHN0cnVjdCBwZGNfdG9kIHRvZF9kYXRhOworCWlmIChwZGNfdG9kX3JlYWQoJnRvZF9kYXRhKSA9PSAwKSB7CisJCXRzLT50dl9zZWMgPSB0b2RfZGF0YS50b2Rfc2VjOworCQl0cy0+dHZfbnNlYyA9IHRvZF9kYXRhLnRvZF91c2VjICogMTAwMDsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHJlYWRpbmcgdG9kIGNsb2NrXG4iKTsKKwkgICAgICAgIHRzLT50dl9zZWMgPSAwOworCQl0cy0+dHZfbnNlYyA9IDA7CisJfQorfQorCit2b2lkIF9faW5pdCB0aW1lX2luaXQodm9pZCkKK3sKIAl1bnNpZ25lZCBsb25nIGN1cnJlbnRfY3IxNl9raHo7CiAKIAljbG9ja3RpY2sgPSAoMTAwICogUEFHRTAtPm1lbV8xMG1zZWMpIC8gSFo7CkBAIC0yNjQsMTkgKzI3Niw0IEBACiAJY2xvY2tzb3VyY2VfY3IxNi5tdWx0ID0gY2xvY2tzb3VyY2Vfa2h6Mm11bHQoY3VycmVudF9jcjE2X2toeiwKIAkJCQkJCWNsb2Nrc291cmNlX2NyMTYuc2hpZnQpOwogCWNsb2Nrc291cmNlX3JlZ2lzdGVyKCZjbG9ja3NvdXJjZV9jcjE2KTsKLQotCWlmIChwZGNfdG9kX3JlYWQoJnRvZF9kYXRhKSA9PSAwKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQkJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7Ci0JCXh0aW1lLnR2X3NlYyA9IHRvZF9kYXRhLnRvZF9zZWM7Ci0JCXh0aW1lLnR2X25zZWMgPSB0b2RfZGF0YS50b2RfdXNlYyAqIDEwMDA7Ci0JCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgLXh0aW1lLnR2X3NlYywgLXh0aW1lLnR2X25zZWMpOwotCQl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRXJyb3IgcmVhZGluZyB0b2QgY2xvY2tcbiIpOwotCSAgICAgICAgeHRpbWUudHZfc2VjID0gMDsKLQkJeHRpbWUudHZfbnNlYyA9IDA7Ci0JfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL3VuYWxpZ25lZC5jIGIvYXJjaC9wYXJpc2Mva2VybmVsL3VuYWxpZ25lZC5jCmluZGV4IGU2ZjRiN2EuLjkyZDk3N2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC91bmFsaWduZWQuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdW5hbGlnbmVkLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKIC8qICNkZWZpbmUgREVCVUdfVU5BTElHTkVEIDEgKi8KQEAgLTQ0Niw4ICs0NDcsNyBAQAogCiB2b2lkIGhhbmRsZV91bmFsaWduZWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RhdGljIHVuc2lnbmVkIGxvbmcgdW5hbGlnbmVkX2NvdW50ID0gMDsKLQlzdGF0aWMgdW5zaWduZWQgbG9uZyBsYXN0X3RpbWUgPSAwOworCXN0YXRpYyBERUZJTkVfUkFURUxJTUlUX1NUQVRFKHJhdGVsaW1pdCwgNSAqIEhaLCA1KTsKIAl1bnNpZ25lZCBsb25nIG5ld2Jhc2UgPSBSMShyZWdzLT5paXIpP3JlZ3MtPmdyW1IxKHJlZ3MtPmlpcildOjA7CiAJaW50IG1vZGlmeSA9IDA7CiAJaW50IHJldCA9IEVSUl9OT1RIQU5ETEVEOwpAQCAtNDYwLDE0ICs0NjAsOCBAQAogCQkJZ290byBmb3JjZV9zaWdidXM7CiAJCX0KIAotCQlpZiAodW5hbGlnbmVkX2NvdW50ID4gNSAmJgotCQkJCXRpbWVfYWZ0ZXIoamlmZmllcywgbGFzdF90aW1lICsgNSAqIEhaKSkgewotCQkJdW5hbGlnbmVkX2NvdW50ID0gMDsKLQkJCWxhc3RfdGltZSA9IGppZmZpZXM7Ci0JCX0KLQotCQlpZiAoIShjdXJyZW50LT50aHJlYWQuZmxhZ3MgJiBQQVJJU0NfVUFDX05PUFJJTlQpIAotCQkgICAgJiYgKyt1bmFsaWduZWRfY291bnQgPCA1KSB7CisJCWlmICghKGN1cnJlbnQtPnRocmVhZC5mbGFncyAmIFBBUklTQ19VQUNfTk9QUklOVCkgJiYKKwkJCV9fcmF0ZWxpbWl0KCZyYXRlbGltaXQpKSB7CiAJCQljaGFyIGJ1ZlsyNTZdOwogCQkJc3ByaW50ZihidWYsICIlcyglZCk6IHVuYWxpZ25lZCBhY2Nlc3MgdG8gMHgiIFJGTVQgIiBhdCBpcD0weCIgUkZNVCAiXG4iLAogCQkJCWN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCByZWdzLT5pb3IsIHJlZ3MtPmlhb3FbMF0pOwpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2MvbGliL2ZpeHVwLlMgYi9hcmNoL3BhcmlzYy9saWIvZml4dXAuUwppbmRleCBkMTcyZDQyLi5mOGM0NWNjIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9saWIvZml4dXAuUworKysgYi9hcmNoL3BhcmlzYy9saWIvZml4dXAuUwpAQCAtMzYsOCArMzYsOCBAQAogI2VuZGlmCiAJLyogdDIgPSAmX19wZXJfY3B1X29mZnNldFtzbXBfcHJvY2Vzc29yX2lkKCldOyAqLwogCUxEUkVHWCBcdDIoXHQxKSxcdDIgCi0JYWRkaWwgTFQlcGVyX2NwdV9fZXhjZXB0aW9uX2RhdGEsJXIyNwotCUxEUkVHIFJUJXBlcl9jcHVfX2V4Y2VwdGlvbl9kYXRhKCVyMSksXHQxCisJYWRkaWwgTFQlZXhjZXB0aW9uX2RhdGEsJXIyNworCUxEUkVHIFJUJWV4Y2VwdGlvbl9kYXRhKCVyMSksXHQxCiAJLyogdDEgPSAmX19nZXRfY3B1X3ZhcihleGNlcHRpb25fZGF0YSkgKi8KIAlhZGQsbCBcdDEsXHQyLFx0MQogCS8qIHQxID0gdDEtPmZhdWx0X2lwICovCkBAIC00Niw4ICs0Niw4IEBACiAjZWxzZQogCS5tYWNybyAgZ2V0X2ZhdWx0X2lwIHQxIHQyCiAJLyogdDEgPSAmX19nZXRfY3B1X3ZhcihleGNlcHRpb25fZGF0YSkgKi8KLQlhZGRpbCBMVCVwZXJfY3B1X19leGNlcHRpb25fZGF0YSwlcjI3Ci0JTERSRUcgUlQlcGVyX2NwdV9fZXhjZXB0aW9uX2RhdGEoJXIxKSxcdDIKKwlhZGRpbCBMVCVleGNlcHRpb25fZGF0YSwlcjI3CisJTERSRUcgUlQlZXhjZXB0aW9uX2RhdGEoJXIxKSxcdDIKIAkvKiB0MSA9IHQyLT5mYXVsdF9pcCAqLwogCUxEUkVHIEVYQ0RBVEFfSVAoXHQyKSwgXHQxCiAJLmVuZG0KZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2xpYi9tZW1jcHkuYyBiL2FyY2gvcGFyaXNjL2xpYi9tZW1jcHkuYwppbmRleCBhYmY0MWY0Li4xZGJjYTVjIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9saWIvbWVtY3B5LmMKKysrIGIvYXJjaC9wYXJpc2MvbGliL21lbWNweS5jCkBAIC00NzUsNyArNDc1LDggQEAKIAlyZXR1cm4gcGFfbWVtY3B5KCh2b2lkIF9fZm9yY2UgKilkc3QsIHNyYywgbGVuKTsKIH0KIAotdW5zaWduZWQgbG9uZyBjb3B5X2Zyb21fdXNlcih2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIGxvbmcgbGVuKQorRVhQT1JUX1NZTUJPTChfX2NvcHlfZnJvbV91c2VyKTsKK3Vuc2lnbmVkIGxvbmcgX19jb3B5X2Zyb21fdXNlcih2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIGxvbmcgbGVuKQogewogCW10c3AoZ2V0X3VzZXJfc3BhY2UoKSwgMSk7CiAJbXRzcChnZXRfa2VybmVsX3NwYWNlKCksIDIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCAxNTVkNTcxLi44YTU0ZWI4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtNjcyLDYgKzY3Miw5IEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgTkVFRF9ETUFfTUFQX1NUQVRFCisJZGVmX2Jvb2wgKFBQQzY0IHx8IE5PVF9DT0hFUkVOVF9DQUNIRSkKKwogY29uZmlnIEdFTkVSSUNfSVNBX0RNQQogCWJvb2wKIAlkZXBlbmRzIG9uIFBQQzY0IHx8IFBPV0VSNCB8fCA2eHggJiYgIUNQTTIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfcHBjOWEuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9wcGM5YS5kdHMKaW5kZXggOTc3ZjI2MC4uODNmNGI3OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9wcGM5YS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9wcGM5YS5kdHMKQEAgLTEsNyArMSw3IEBACiAvKgotICogR0UgRmFudWMgUFBDOUEgRGV2aWNlIFRyZWUgU291cmNlCisgKiBHRSBQUEM5QSBEZXZpY2UgVHJlZSBTb3VyY2UKICAqCi0gKiBDb3B5cmlnaHQgMjAwOCBHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgRW1iZWRkZWQgU3lzdGVtcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDggR0UgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmMzMTAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmMzMTAuZHRzCmluZGV4IDhlNGVmZmYuLmZjM2EzMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjMzEwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzMxMC5kdHMKQEAgLTEsNyArMSw3IEBACiAvKgotICogR0UgRmFudWMgU0JDMzEwIERldmljZSBUcmVlIFNvdXJjZQorICogR0UgU0JDMzEwIERldmljZSBUcmVlIFNvdXJjZQogICoKLSAqIENvcHlyaWdodCAyMDA4IEdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBHRSBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgRW1iZWRkZWQgU3lzdGVtcywgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzYxMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzYxMC5kdHMKaW5kZXggYmI3MDYwMC4uYzA2NzFjYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjNjEwLmR0cwpAQCAtMSw3ICsxLDcgQEAKIC8qCi0gKiBHRSBGYW51YyBTQkM2MTAgRGV2aWNlIFRyZWUgU291cmNlCisgKiBHRSBTQkM2MTAgRGV2aWNlIFRyZWUgU291cmNlCiAgKgotICogQ29weXJpZ2h0IDIwMDggR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IEdFIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rbWV0ZXIxLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rbWV0ZXIxLmR0cwppbmRleCA2NWI4YjRmLi5kOGI1ZDEyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva21ldGVyMS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2ttZXRlcjEuZHRzCkBAIC00OTAsNyArNDkwLDcgQEAKIAkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKIAkJCS8qCiAJCQkgKiBUaGUgSW50ZWwgUDMwIGNoaXAgaGFzIDIgbm9uLWlkZW50aWNhbCBjaGlwcyBvbgotCQkJICogb25lIGRpZSwgc28gd2UgbmVlZCB0byBkZWZpbmUgMiBzZXBlcmF0ZSByZWdpb25zCisJCQkgKiBvbmUgZGllLCBzbyB3ZSBuZWVkIHRvIGRlZmluZSAyIHNlcGFyYXRlIHJlZ2lvbnMKIAkJCSAqIHRoYXQgYXJlIHNjYW5uZWQgYnkgcGh5c21hcF9vZiBpbmRlcGVuZGFudGx5LgogCQkJICovCiAJCQlyZWcgPSA8MCAweDAwMDAwMDAwIDB4MDIwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY5bWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY5bWRzLmR0cwppbmRleCA3OTVlYjM2Li44YjcyZWFmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OW1kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjltZHMuZHRzCkBAIC01MzUsNiArNTM1LDcgQEAKIAkJCXJ4LWNsb2NrLW5hbWUgPSAibm9uZSI7CiAJCQl0eC1jbG9jay1uYW1lID0gImNsazEyIjsKIAkJCXBpby1oYW5kbGUgPSA8JnBpbzE+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZxZV9waHkwPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOwogCQl9OwpAQCAtNTc5LDcgKzU4MCw3IEBACiAJCQkJcmVnID0gPDB4Nj47CiAJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCX07Ci0JCQl0YmktcGh5QDExIHsKKwkJCXRiaTE6IHRiaS1waHlAMTEgewogCQkJCXJlZyA9IDwweDExPjsKIAkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKIAkJCX07CkBAIC01OTAsNyArNTkxLDcgQEAKIAkJCXJlZyA9IDwweDM1MjAgMHgxOD47CiAJCQljb21wYXRpYmxlID0gImZzbCx1Y2MtbWRpbyI7CiAKLQkJCXRiaTA6IHRiaS1waHlAMTUgeworCQkJdGJpNjogdGJpLXBoeUAxNSB7CiAJCQlyZWcgPSA8MHgxNT47CiAJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKIAkJCX07CkBAIC02MDAsNyArNjAxLDcgQEAKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJcmVnID0gPDB4MzcyMCAweDM4PjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLHVjYy1tZGlvIjsKLQkJCXRiaTE6IHRiaS1waHlAMTcgeworCQkJdGJpODogdGJpLXBoeUAxNyB7CiAJCQkJcmVnID0gPDB4MTc+OwogCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwogCQkJfTsKQEAgLTYxNywxMCArNjE4LDIyIEBACiAJCQlyeC1jbG9jay1uYW1lID0gIm5vbmUiOwogCQkJdHgtY2xvY2stbmFtZSA9ICJjbGsxMiI7CiAJCQlwaW8taGFuZGxlID0gPCZwaW8zPjsKKwkJCXRiaS1oYW5kbGUgPSA8JnRiaTM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcWVfcGh5Mj47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKIAkJfTsKIAorCQltZGlvQDIzMjAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCXJlZyA9IDwweDIzMjAgMHgxOD47CisJCQljb21wYXRpYmxlID0gImZzbCx1Y2MtbWRpbyI7CisJCQl0YmkzOiB0YmktcGh5QDExIHsKKwkJCQlyZWcgPSA8MHgxMT47CisJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQl9OworCQl9OworCiAJCWVuZXQxOiB1Y2NAMzAwMCB7CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCWNvbXBhdGlibGUgPSAidWNjX2dldGgiOwpAQCAtNjMyLDEwICs2NDUsMjIgQEAKIAkJCXJ4LWNsb2NrLW5hbWUgPSAibm9uZSI7CiAJCQl0eC1jbG9jay1uYW1lID0gImNsazE3IjsKIAkJCXBpby1oYW5kbGUgPSA8JnBpbzI+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMj47CiAJCQlwaHktaGFuZGxlID0gPCZxZV9waHkxPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOwogCQl9OwogCisJCW1kaW9AMzEyMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJcmVnID0gPDB4MzEyMCAweDE4PjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHVjYy1tZGlvIjsKKwkJCXRiaTI6IHRiaS1waHlAMTEgeworCQkJCXJlZyA9IDwweDExPjsKKwkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCX07CisJCX07CisKIAkJZW5ldDM6IHVjY0AzMjAwIHsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJY29tcGF0aWJsZSA9ICJ1Y2NfZ2V0aCI7CkBAIC02NDcsMTAgKzY3MiwyMiBAQAogCQkJcngtY2xvY2stbmFtZSA9ICJub25lIjsKIAkJCXR4LWNsb2NrLW5hbWUgPSAiY2xrMTciOwogCQkJcGlvLWhhbmRsZSA9IDwmcGlvND47CisJCQl0YmktaGFuZGxlID0gPCZ0Ymk0PjsKIAkJCXBoeS1oYW5kbGUgPSA8JnFlX3BoeTM+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CiAJCX07CiAKKwkJbWRpb0AzMzIwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQlyZWcgPSA8MHgzMzIwIDB4MTg+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsdWNjLW1kaW8iOworCQkJdGJpNDogdGJpLXBoeUAxMSB7CisJCQkJcmVnID0gPDB4MTE+OworCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJfTsKKwkJfTsKKwogCQllbmV0NTogdWNjQDM0MDAgewogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gInVjY19nZXRoIjsKQEAgLTY2MSw3ICs2OTgsNyBAQAogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlyeC1jbG9jay1uYW1lID0gIm5vbmUiOwogCQkJdHgtY2xvY2stbmFtZSA9ICJub25lIjsKLQkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpNj47CiAJCQlwaHktaGFuZGxlID0gPCZxZV9waHk1PjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAic2dtaWkiOwogCQl9OwpAQCAtNjc2LDcgKzcxMyw3IEBACiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCXJ4LWNsb2NrLW5hbWUgPSAibm9uZSI7CiAJCQl0eC1jbG9jay1uYW1lID0gIm5vbmUiOwotCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CisJCQl0YmktaGFuZGxlID0gPCZ0Ymk4PjsKIAkJCXBoeS1oYW5kbGUgPSA8JnFlX3BoeTc+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJzZ21paSI7CiAJCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKaW5kZXggYjViMjU5OS4uMTI5ODBkNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZwpAQCAtMTAwNCw3ICsxMDA0LDYgQEAKIENPTkZJR19TUElERVJfTkVUPW0KIENPTkZJR19HRUxJQ19ORVQ9bQogQ09ORklHX0dFTElDX1dJUkVMRVNTPXkKLSMgQ09ORklHX0dFTElDX1dJUkVMRVNTX09MRF9QU0tfSU5URVJGQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAogIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHMzX2RlZmNvbmZpZwppbmRleCA3ZGUxMjdlLi4zMmY3MDU4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wczNfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BzM19kZWZjb25maWcKQEAgLTU5Myw3ICs1OTMsNiBAQAogQ09ORklHX05FVERFVl8xMDAwPXkKIENPTkZJR19HRUxJQ19ORVQ9eQogQ09ORklHX0dFTElDX1dJUkVMRVNTPXkKLSMgQ09ORklHX0dFTElDX1dJUkVMRVNTX09MRF9QU0tfSU5URVJGQUNFIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVERFVl8xMDAwMCBpcyBub3Qgc2V0CiAKICMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jb21wYXQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jb21wYXQuaAppbmRleCA0Nzc0YzJmLi4zOTZkMjFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY29tcGF0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NvbXBhdC5oCkBAIC03LDcgKzcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAotI2RlZmluZSBDT01QQVRfVVNFUl9IWgkxMDAKKyNkZWZpbmUgQ09NUEFUX1VTRVJfSFoJCTEwMAorI2RlZmluZSBDT01QQVRfVVRTX01BQ0hJTkUJInBwY1wwXDAiCiAKIHR5cGVkZWYgdTMyCQljb21wYXRfc2l6ZV90OwogdHlwZWRlZiBzMzIJCWNvbXBhdF9zc2l6ZV90OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCA4MGE5NzNiLi5jODVlZjIzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMTI3LDkgKzEyNyw2IEBACiAJcmV0dXJuIGRtYV9vcHMtPmRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKTsKIH0KIAotLyogV2UgaGF2ZSBvdXIgb3duIGltcGxlbWVudGF0aW9uIG9mIHBjaV9zZXRfZG1hX21hc2soKSAqLwotI2RlZmluZSBIQVZFX0FSQ0hfUENJX1NFVF9ETUFfTUFTSwotCiBzdGF0aWMgaW5saW5lIGludCBkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZG1hX21hc2spCiB7CiAJc3RydWN0IGRtYV9tYXBfb3BzICpkbWFfb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYXNtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2FzbS5oCmluZGV4IGFmMmFiZTcuLmFhZGYyZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYXNtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9hc20uaApAQCAtOTcsNCArOTcsMTAgQEAKICNkZWZpbmUgUkVTVU1FX0hPU1QgICAgICAgICAgICAgUkVTVU1FX0ZMQUdfSE9TVAogI2RlZmluZSBSRVNVTUVfSE9TVF9OViAgICAgICAgICAoUkVTVU1FX0ZMQUdfSE9TVHxSRVNVTUVfRkxBR19OVikKIAorI2RlZmluZSBLVk1fR1VFU1RfTU9ERV9OT05FCTAKKyNkZWZpbmUgS1ZNX0dVRVNUX01PREVfR1VFU1QJMQorI2RlZmluZSBLVk1fR1VFU1RfTU9ERV9TS0lQCTIKKworI2RlZmluZSBLVk1fSU5TVF9GRVRDSF9GQUlMRUQJLTEKKwogI2VuZGlmIC8qIF9fUE9XRVJQQ19LVk1fQVNNX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgKaW5kZXggNzRiNzM2OS4uZGI3ZGIwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oCkBAIC0yMiw3ICsyMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+Ci0jaW5jbHVkZSA8YXNtL2t2bV9wcGMuaD4KKyNpbmNsdWRlIDxhc20va3ZtX2Jvb2szc182NF9hc20uaD4KIAogc3RydWN0IGt2bXBwY19zbGIgewogCXU2NCBlc2lkOwpAQCAtMzMsNyArMzMsOCBAQAogCWJvb2wgS3M7CiAJYm9vbCBLcDsKIAlib29sIG54OwotCWJvb2wgbGFyZ2U7CisJYm9vbCBsYXJnZTsJLyogUFRFcyBhcmUgMTZNQiAqLworCWJvb2wgdGI7CS8qIDFUQiBzZWdtZW50ICovCiAJYm9vbCBjbGFzczsKIH07CiAKQEAgLTY5LDYgKzcwLDcgQEAKIAogc3RydWN0IGt2bXBwY192Y3B1X2Jvb2szcyB7CiAJc3RydWN0IGt2bV92Y3B1IHZjcHU7CisJc3RydWN0IGt2bXBwY19ib29rM3Nfc2hhZG93X3ZjcHUgc2hhZG93X3ZjcHU7CiAJc3RydWN0IGt2bXBwY19zaWRfbWFwIHNpZF9tYXBbU0lEX01BUF9OVU1dOwogCXN0cnVjdCBrdm1wcGNfc2xiIHNsYls2NF07CiAJc3RydWN0IHsKQEAgLTg5LDYgKzkxLDcgQEAKIAl1NjQgdnNpZF9uZXh0OwogCXU2NCB2c2lkX21heDsKIAlpbnQgY29udGV4dF9pZDsKKwl1bG9uZyBwcm9nX2ZsYWdzOyAvKiBmbGFncyB0byBpbmplY3Qgd2hlbiBnaXZpbmcgYSA3MDAgdHJhcCAqLwogfTsKIAogI2RlZmluZSBDT05URVhUX0hPU1QJCTAKQEAgLTExOSw2ICsxMjIsMTAgQEAKIAogZXh0ZXJuIHUzMiBrdm1wcGNfdHJhbXBvbGluZV9sb3dtZW07CiBleHRlcm4gdTMyIGt2bXBwY190cmFtcG9saW5lX2VudGVyOworZXh0ZXJuIHZvaWQga3ZtcHBjX3JtY2FsbCh1bG9uZyBzcnIwLCB1bG9uZyBzcnIxKTsKK2V4dGVybiB2b2lkIGt2bXBwY19sb2FkX3VwX2ZwdSh2b2lkKTsKK2V4dGVybiB2b2lkIGt2bXBwY19sb2FkX3VwX2FsdGl2ZWModm9pZCk7CitleHRlcm4gdm9pZCBrdm1wcGNfbG9hZF91cF92c3godm9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGt2bXBwY192Y3B1X2Jvb2szcyAqdG9fYm9vazNzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzXzY0X2FzbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3NfNjRfYXNtLmgKaW5kZXggMmUwNmVlOC4uMTgzNDYxYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3NfNjRfYXNtLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3NfNjRfYXNtLmgKQEAgLTIwLDYgKzIwLDggQEAKICNpZm5kZWYgX19BU01fS1ZNX0JPT0szU19BU01fSF9fCiAjZGVmaW5lIF9fQVNNX0tWTV9CT09LM1NfQVNNX0hfXwogCisjaWZkZWYgX19BU1NFTUJMWV9fCisKICNpZmRlZiBDT05GSUdfS1ZNX0JPT0szU182NF9IQU5ETEVSCiAKICNpbmNsdWRlIDxhc20va3ZtX2FzbS5oPgpAQCAtNTUsNCArNTcsMjAgQEAKIAogI2VuZGlmIC8qIENPTkZJR19LVk1fQk9PSzNTXzY0X0hBTkRMRVIgKi8KIAorI2Vsc2UgIC8qX19BU1NFTUJMWV9fICovCisKK3N0cnVjdCBrdm1wcGNfYm9vazNzX3NoYWRvd192Y3B1IHsKKwl1bG9uZyBncHJbMTRdOworCXUzMiBjcjsKKwl1MzIgeGVyOworCXVsb25nIGhvc3RfcjE7CisJdWxvbmcgaG9zdF9yMjsKKwl1bG9uZyBoYW5kbGVyOworCXVsb25nIHNjcmF0Y2gwOworCXVsb25nIHNjcmF0Y2gxOworCXVsb25nIHZtaGFuZGxlcjsKK307CisKKyNlbmRpZiAvKl9fQVNTRU1CTFlfXyAqLworCiAjZW5kaWYgLyogX19BU01fS1ZNX0JPT0szU19BU01fSF9fICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2U1MDAuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fZTUwMC5oCmluZGV4IDlkNDk3Y2UuLjdmZWEyNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fZTUwMC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fZTUwMC5oCkBAIC01Miw5ICs1MiwxMiBAQAogCXUzMiBtYXM1OwogCXUzMiBtYXM2OwogCXUzMiBtYXM3OworCXUzMiBsMWNzcjA7CiAJdTMyIGwxY3NyMTsKIAl1MzIgaGlkMDsKIAl1MzIgaGlkMTsKKwl1MzIgdGxiMGNmZzsKKwl1MzIgdGxiMWNmZzsKIAogCXN0cnVjdCBrdm1fdmNwdSB2Y3B1OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1faG9zdC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggMTIwMWY2Mi4uNWU1YmFlNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKQEAgLTE2NywyMyArMTY3LDQwIEBACiAJdWxvbmcgdHJhbXBvbGluZV9sb3dtZW07CiAJdWxvbmcgdHJhbXBvbGluZV9lbnRlcjsKIAl1bG9uZyBoaWdobWVtX2hhbmRsZXI7CisJdWxvbmcgcm1jYWxsOwogCXVsb25nIGhvc3RfcGFjYV9waHlzOwogCXN0cnVjdCBrdm1wcGNfbW11IG1tdTsKICNlbmRpZgogCi0JdTY0IGZwclszMl07CiAJdWxvbmcgZ3ByWzMyXTsKIAorCXU2NCBmcHJbMzJdOworCXUzMiBmcHNjcjsKKworI2lmZGVmIENPTkZJR19BTFRJVkVDCisJdmVjdG9yMTI4IHZyWzMyXTsKKwl2ZWN0b3IxMjggdnNjcjsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1ZTWAorCXU2NCB2c3JbMzJdOworI2VuZGlmCisKIAl1bG9uZyBwYzsKLQl1MzIgY3I7CiAJdWxvbmcgY3RyOwogCXVsb25nIGxyOworCisjaWZkZWYgQ09ORklHX0JPT0tFCiAJdWxvbmcgeGVyOworCXUzMiBjcjsKKyNlbmRpZgogCiAJdWxvbmcgbXNyOwogI2lmZGVmIENPTkZJR19QUEM2NAogCXVsb25nIHNoYWRvd19tc3I7CisJdWxvbmcgc2hhZG93X3NycjE7CiAJdWxvbmcgaGZsYWdzOworCXVsb25nIGd1ZXN0X293bmVkX2V4dDsKICNlbmRpZgogCXUzMiBtbXVjcjsKIAl1bG9uZyBzcHJnMDsKQEAgLTI0Miw2ICsyNTksOCBAQAogI2VuZGlmCiAJdWxvbmcgZmF1bHRfZGVhcjsKIAl1bG9uZyBmYXVsdF9lc3I7CisJdWxvbmcgcXVldWVkX2RlYXI7CisJdWxvbmcgcXVldWVkX2VzcjsKIAlncGFfdCBwYWRkcl9hY2Nlc3NlZDsKIAogCXU4IGlvX2dwcjsgLyogR1BSIHVzZWQgYXMgSU8gc291cmNlL3RhcmdldCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKaW5kZXggMjY5ZWU0Ni4uZTI2NDI4MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oCkBAIC0yOCw2ICsyOCw5IEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rdm1fdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2lmZGVmIENPTkZJR19QUENfQk9PSzNTCisjaW5jbHVkZSA8YXNtL2t2bV9ib29rM3MuaD4KKyNlbmRpZgogCiBlbnVtIGVtdWxhdGlvbl9yZXN1bHQgewogCUVNVUxBVEVfRE9ORSwgICAgICAgICAvKiBubyBmdXJ0aGVyIHByb2Nlc3NpbmcgKi8KQEAgLTgwLDggKzgzLDkgQEAKIAogZXh0ZXJuIHZvaWQga3ZtcHBjX2NvcmVfZGVsaXZlcl9pbnRlcnJ1cHRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiBleHRlcm4gaW50IGt2bXBwY19jb3JlX3BlbmRpbmdfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7Ci1leHRlcm4gdm9pZCBrdm1wcGNfY29yZV9xdWV1ZV9wcm9ncmFtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CitleHRlcm4gdm9pZCBrdm1wcGNfY29yZV9xdWV1ZV9wcm9ncmFtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWxvbmcgZmxhZ3MpOwogZXh0ZXJuIHZvaWQga3ZtcHBjX2NvcmVfcXVldWVfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CitleHRlcm4gdm9pZCBrdm1wcGNfY29yZV9kZXF1ZXVlX2RlYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogZXh0ZXJuIHZvaWQga3ZtcHBjX2NvcmVfcXVldWVfZXh0ZXJuYWwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt2bV9pbnRlcnJ1cHQgKmlycSk7CiAKQEAgLTk1LDQgKzk5LDgxIEBACiAKIGV4dGVybiB2b2lkIGt2bXBwY19jb3JlX2Rlc3Ryb3lfbW11KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKKyNpZmRlZiBDT05GSUdfUFBDX0JPT0szUworCisvKiBXZSBhc3N1bWUgd2UncmUgYWx3YXlzIGFjdGluZyBvbiB0aGUgY3VycmVudCB2Y3B1ICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1wcGNfc2V0X2dwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBudW0sIHVsb25nIHZhbCkKK3sKKwlpZiAoIG51bSA8IDE0ICkgeworCQlnZXRfcGFjYSgpLT5zaGFkb3dfdmNwdS5ncHJbbnVtXSA9IHZhbDsKKwkJdG9fYm9vazNzKHZjcHUpLT5zaGFkb3dfdmNwdS5ncHJbbnVtXSA9IHZhbDsKKwl9IGVsc2UKKwkJdmNwdS0+YXJjaC5ncHJbbnVtXSA9IHZhbDsKK30KKworc3RhdGljIGlubGluZSB1bG9uZyBrdm1wcGNfZ2V0X2dwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBudW0pCit7CisJaWYgKCBudW0gPCAxNCApCisJCXJldHVybiBnZXRfcGFjYSgpLT5zaGFkb3dfdmNwdS5ncHJbbnVtXTsKKwllbHNlCisJCXJldHVybiB2Y3B1LT5hcmNoLmdwcltudW1dOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtcHBjX3NldF9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiB2YWwpCit7CisJZ2V0X3BhY2EoKS0+c2hhZG93X3ZjcHUuY3IgPSB2YWw7CisJdG9fYm9vazNzKHZjcHUpLT5zaGFkb3dfdmNwdS5jciA9IHZhbDsKK30KKworc3RhdGljIGlubGluZSB1MzIga3ZtcHBjX2dldF9jcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIGdldF9wYWNhKCktPnNoYWRvd192Y3B1LmNyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtcHBjX3NldF94ZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdmFsKQoreworCWdldF9wYWNhKCktPnNoYWRvd192Y3B1LnhlciA9IHZhbDsKKwl0b19ib29rM3ModmNwdSktPnNoYWRvd192Y3B1LnhlciA9IHZhbDsKK30KKworc3RhdGljIGlubGluZSB1MzIga3ZtcHBjX2dldF94ZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiBnZXRfcGFjYSgpLT5zaGFkb3dfdmNwdS54ZXI7Cit9CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBrdm1wcGNfc2V0X2dwcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBudW0sIHVsb25nIHZhbCkKK3sKKwl2Y3B1LT5hcmNoLmdwcltudW1dID0gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHVsb25nIGt2bXBwY19nZXRfZ3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IG51bSkKK3sKKwlyZXR1cm4gdmNwdS0+YXJjaC5ncHJbbnVtXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGt2bXBwY19zZXRfY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdmFsKQoreworCXZjcHUtPmFyY2guY3IgPSB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIGt2bXBwY19nZXRfY3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiB2Y3B1LT5hcmNoLmNyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQga3ZtcHBjX3NldF94ZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgdmFsKQoreworCXZjcHUtPmFyY2gueGVyID0gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHUzMiBrdm1wcGNfZ2V0X3hlcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIHZjcHUtPmFyY2gueGVyOworfQorCisjZW5kaWYKKwogI2VuZGlmIC8qIF9fUE9XRVJQQ19LVk1fUFBDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xvY2FsLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbG9jYWwuaAppbmRleCBjZTU4YzgwLi5jMjQxMGFmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbG9jYWwuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbG9jYWwuaApAQCAtMTcyLDI5ICsxNzIsNCBAQAogI2RlZmluZSBfX2xvY2FsX2FkZChpLGwpCSgobCktPmEuY291bnRlcis9KGkpKQogI2RlZmluZSBfX2xvY2FsX3N1YihpLGwpCSgobCktPmEuY291bnRlci09KGkpKQogCi0vKiBOZWVkIHRvIGRpc2FibGUgcHJlZW1wdGlvbiBmb3IgdGhlIGNwdSBsb2NhbCBjb3VudGVycyBvdGhlcndpc2Ugd2UgY291bGQKLSAgIHN0aWxsIGFjY2VzcyBhIHZhcmlhYmxlIG9mIGEgcHJldmlvdXMgQ1BVIGluIGEgbm9uIGF0b21pYyB3YXkuICovCi0jZGVmaW5lIGNwdV9sb2NhbF93cmFwX3YobCkJIAlcCi0JKHsgbG9jYWxfdCByZXNfXzsJCVwKLQkgICBwcmVlbXB0X2Rpc2FibGUoKTsgCQlcCi0JICAgcmVzX18gPSAobCk7CQkJXAotCSAgIHByZWVtcHRfZW5hYmxlKCk7CQlcCi0JICAgcmVzX187IH0pCi0jZGVmaW5lIGNwdV9sb2NhbF93cmFwKGwpCQlcCi0JKHsgcHJlZW1wdF9kaXNhYmxlKCk7CQlcCi0JICAgbDsJCQkJXAotCSAgIHByZWVtcHRfZW5hYmxlKCk7IH0pCQlcCi0KLSNkZWZpbmUgY3B1X2xvY2FsX3JlYWQobCkgICAgY3B1X2xvY2FsX3dyYXBfdihsb2NhbF9yZWFkKCZfX2dldF9jcHVfdmFyKGwpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX3NldChsLCBpKSAgY3B1X2xvY2FsX3dyYXAobG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKGwpLCAoaSkpKQotI2RlZmluZSBjcHVfbG9jYWxfaW5jKGwpICAgICBjcHVfbG9jYWxfd3JhcChsb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIobCkpKQotI2RlZmluZSBjcHVfbG9jYWxfZGVjKGwpICAgICBjcHVfbG9jYWxfd3JhcChsb2NhbF9kZWMoJl9fZ2V0X2NwdV92YXIobCkpKQotI2RlZmluZSBjcHVfbG9jYWxfYWRkKGksIGwpICBjcHVfbG9jYWxfd3JhcChsb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkpCi0jZGVmaW5lIGNwdV9sb2NhbF9zdWIoaSwgbCkgIGNwdV9sb2NhbF93cmFwKGxvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKGwpKSkKLQotI2RlZmluZSBfX2NwdV9sb2NhbF9pbmMobCkJY3B1X2xvY2FsX2luYyhsKQotI2RlZmluZSBfX2NwdV9sb2NhbF9kZWMobCkJY3B1X2xvY2FsX2RlYyhsKQotI2RlZmluZSBfX2NwdV9sb2NhbF9hZGQoaSwgbCkJY3B1X2xvY2FsX2FkZCgoaSksIChsKSkKLSNkZWZpbmUgX19jcHVfbG9jYWxfc3ViKGksIGwpCWNwdV9sb2NhbF9zdWIoKGkpLCAobCkpCi0KICNlbmRpZiAvKiBfQVJDSF9QT1dFUlBDX0xPQ0FMX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWNhLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFjYS5oCmluZGV4IDVlOWI0ZWYuLmEwMTE2MDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWNhLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhY2EuaApAQCAtMTQsMTEgKzE0LDE3IEBACiAjZGVmaW5lIF9BU01fUE9XRVJQQ19QQUNBX0gKICNpZmRlZiBfX0tFUk5FTF9fCiAKKyNpZmRlZiBDT05GSUdfUFBDNjQKKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vbHBwYWNhLmg+CiAjaW5jbHVkZSA8YXNtL21tdS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2V4Y2VwdGlvbi02NGUuaD4KKyNpZmRlZiBDT05GSUdfS1ZNX0JPT0szU182NF9IQU5ETEVSCisjaW5jbHVkZSA8YXNtL2t2bV9ib29rM3NfNjRfYXNtLmg+CisjZW5kaWYKIAogcmVnaXN0ZXIgc3RydWN0IHBhY2Ffc3RydWN0ICpsb2NhbF9wYWNhIGFzbSgicjEzIik7CiAKQEAgLTEzNSwxMyArMTQxLDI2IEBACiAJCXU2NCAgICAgZXNpZDsKIAkJdTY0ICAgICB2c2lkOwogCX0ga3ZtX3NsYls2NF07CQkJLyogZ3Vlc3QgU0xCICovCisJLyogV2UgdXNlIHRoaXMgdG8gc3RvcmUgZ3Vlc3Qgc3RhdGUgaW4gKi8KKwlzdHJ1Y3Qga3ZtcHBjX2Jvb2szc19zaGFkb3dfdmNwdSBzaGFkb3dfdmNwdTsKIAl1OCBrdm1fc2xiX21heDsJCQkvKiBoaWdoZXN0IHVzZWQgZ3Vlc3Qgc2xiIGVudHJ5ICovCiAJdTgga3ZtX2luX2d1ZXN0OwkJLyogYXJlIHdlIGluc2lkZSB0aGUgZ3Vlc3Q/ICovCiAjZW5kaWYKIH07CiAKLWV4dGVybiBzdHJ1Y3QgcGFjYV9zdHJ1Y3QgcGFjYVtdOwotZXh0ZXJuIHZvaWQgaW5pdGlhbGlzZV9wYWNhcyh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgcGFjYV9zdHJ1Y3QgKnBhY2E7CitleHRlcm4gX19pbml0ZGF0YSBzdHJ1Y3QgcGFjYV9zdHJ1Y3QgYm9vdF9wYWNhOworZXh0ZXJuIHZvaWQgaW5pdGlhbGlzZV9wYWNhKHN0cnVjdCBwYWNhX3N0cnVjdCAqbmV3X3BhY2EsIGludCBjcHUpOworCitleHRlcm4gdm9pZCBhbGxvY2F0ZV9wYWNhcyh2b2lkKTsKK2V4dGVybiB2b2lkIGZyZWVfdW51c2VkX3BhY2FzKHZvaWQpOworCisjZWxzZSAvKiBDT05GSUdfUFBDNjQgKi8KKworc3RhdGljIGlubGluZSB2b2lkIGFsbG9jYXRlX3BhY2FzKHZvaWQpIHsgfTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX3VudXNlZF9wYWNhcyh2b2lkKSB7IH07CisKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX1BPV0VSUENfUEFDQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggYjVlYTYyNi4uYTIwYTlhZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BjaS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wY2kuaApAQCAtMTQxLDM4ICsxNDEsNiBAQAogCiAjZGVmaW5lIEhBVkVfUENJX0xFR0FDWQkxCiAKLSNpZiBkZWZpbmVkKENPTkZJR19QUEM2NCkgfHwgZGVmaW5lZChDT05GSUdfTk9UX0NPSEVSRU5UX0NBQ0hFKQotLyoKLSAqIEZvciA2NC1iaXQga2VybmVscywgcGNpX3VubWFwX3tzaW5nbGUscGFnZX0gaXMgbm90IGEgbm9wLgotICogRm9yIDMyLWJpdCBub24tY29oZXJlbnQga2VybmVscywgcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KCkgYW5kCi0gKiBzbyBvbiBhcmUgbm90IG5vcHMuCi0gKiBhbmQgdGh1cy4uLgotICovCi0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0FERFIoQUREUl9OQU1FKQlcCi0JZG1hX2FkZHJfdCBBRERSX05BTUU7Ci0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkJCVwKLQlfX3UzMiBMRU5fTkFNRTsKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpCQkJXAotCSgoUFRSKS0+QUREUl9OQU1FKQotI2RlZmluZSBwY2lfdW5tYXBfYWRkcl9zZXQoUFRSLCBBRERSX05BTUUsIFZBTCkJCVwKLQkoKChQVFIpLT5BRERSX05BTUUpID0gKFZBTCkpCi0jZGVmaW5lIHBjaV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkJCQlcCi0JKChQVFIpLT5MRU5fTkFNRSkKLSNkZWZpbmUgcGNpX3VubWFwX2xlbl9zZXQoUFRSLCBMRU5fTkFNRSwgVkFMKQkJXAotCSgoKFBUUiktPkxFTl9OQU1FKSA9IChWQUwpKQotCi0jZWxzZSAvKiAzMi1iaXQgJiYgY29oZXJlbnQgKi8KLQotLyogcGNpX3VubWFwX3twYWdlLHNpbmdsZX0gaXMgYSBub3Agc28uLi4gKi8KLSNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCi0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpCQkoMCkKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHJfc2V0KFBUUiwgQUREUl9OQU1FLCBWQUwpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJKDApCi0jZGVmaW5lIHBjaV91bm1hcF9sZW5fc2V0KFBUUiwgTEVOX05BTUUsIFZBTCkJZG8geyB9IHdoaWxlICgwKQotCi0jZW5kaWYgLyogQ09ORklHX1BQQzY0IHx8IENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUgKi8KLQogI2lmZGVmIENPTkZJR19QUEM2NAogCiAvKiBUaGUgUENJIGFkZHJlc3Mgc3BhY2UgZG9lcyBub3QgZXF1YWwgdGhlIHBoeXNpY2FsIG1lbW9yeSBhZGRyZXNzCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BlcmZfZXZlbnQuaAppbmRleCAzMjg4Y2UzLi5lNmQ0Y2U2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGVyZl9ldmVudC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50LmgKQEAgLTEsMTEwICsxLDIzIEBACiAvKgotICogUGVyZm9ybWFuY2UgZXZlbnQgc3VwcG9ydCAtIFBvd2VyUEMtc3BlY2lmaWMgZGVmaW5pdGlvbnMuCisgKiBQZXJmb3JtYW5jZSBldmVudCBzdXBwb3J0IC0gaGFyZHdhcmUtc3BlY2lmaWMgZGlzYW1iaWd1YXRpb24KICAqCi0gKiBDb3B5cmlnaHQgMjAwOC0yMDA5IFBhdWwgTWFja2VycmFzLCBJQk0gQ29ycG9yYXRpb24uCisgKiBGb3Igbm93IHRoaXMgaXMgYSBjb21waWxlLXRpbWUgZGVjaXNpb24sIGJ1dCBldmVudHVhbGx5IGl0IHNob3VsZCBiZQorICogcnVudGltZS4gIFRoaXMgd291bGQgYWxsb3cgbXVsdGlwbGF0Zm9ybSBwZXJmIGV2ZW50IHN1cHBvcnQgZm9yIGUzMDAgKGZzbAorICogZW1iZWRkZWQgcGVyZiBjb3VudGVycykgcGx1cyBzZXJ2ZXIvY2xhc3NpYywgYW5kIHdvdWxkIGFjY29tbW9kYXRlCisgKiBkZXZpY2VzIG90aGVyIHRoYW4gdGhlIGNvcmUgd2hpY2ggcHJvdmlkZSB0aGVpciBvd24gcGVyZm9ybWFuY2UgY291bnRlcnMuCisgKgorICogQ29weXJpZ2h0IDIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCiAgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAotI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KLQotI2RlZmluZSBNQVhfSFdFVkVOVFMJCTgKLSNkZWZpbmUgTUFYX0VWRU5UX0FMVEVSTkFUSVZFUwk4Ci0jZGVmaW5lIE1BWF9MSU1JVEVEX0hXQ09VTlRFUlMJMgotCi0vKgotICogVGhpcyBzdHJ1Y3QgcHJvdmlkZXMgdGhlIGNvbnN0YW50cyBhbmQgZnVuY3Rpb25zIG5lZWRlZCB0bwotICogZGVzY3JpYmUgdGhlIFBNVSBvbiBhIHBhcnRpY3VsYXIgUE9XRVItZmFtaWx5IENQVS4KLSAqLwotc3RydWN0IHBvd2VyX3BtdSB7Ci0JY29uc3QgY2hhcgkqbmFtZTsKLQlpbnQJCW5fY291bnRlcjsKLQlpbnQJCW1heF9hbHRlcm5hdGl2ZXM7Ci0JdW5zaWduZWQgbG9uZwlhZGRfZmllbGRzOwotCXVuc2lnbmVkIGxvbmcJdGVzdF9hZGRlcjsKLQlpbnQJCSgqY29tcHV0ZV9tbWNyKSh1NjQgZXZlbnRzW10sIGludCBuX2V2LAotCQkJCXVuc2lnbmVkIGludCBod2NbXSwgdW5zaWduZWQgbG9uZyBtbWNyW10pOwotCWludAkJKCpnZXRfY29uc3RyYWludCkodTY0IGV2ZW50X2lkLCB1bnNpZ25lZCBsb25nICptc2twLAotCQkJCXVuc2lnbmVkIGxvbmcgKnZhbHApOwotCWludAkJKCpnZXRfYWx0ZXJuYXRpdmVzKSh1NjQgZXZlbnRfaWQsIHVuc2lnbmVkIGludCBmbGFncywKLQkJCQl1NjQgYWx0W10pOwotCXZvaWQJCSgqZGlzYWJsZV9wbWMpKHVuc2lnbmVkIGludCBwbWMsIHVuc2lnbmVkIGxvbmcgbW1jcltdKTsKLQlpbnQJCSgqbGltaXRlZF9wbWNfZXZlbnQpKHU2NCBldmVudF9pZCk7Ci0JdTMyCQlmbGFnczsKLQlpbnQJCW5fZ2VuZXJpYzsKLQlpbnQJCSpnZW5lcmljX2V2ZW50czsKLQlpbnQJCSgqY2FjaGVfZXZlbnRzKVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KLQkJCSAgICAgICBbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCi0JCQkgICAgICAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF07Ci19OwotCi0vKgotICogVmFsdWVzIGZvciBwb3dlcl9wbXUuZmxhZ3MKLSAqLwotI2RlZmluZSBQUE1VX0xJTUlURURfUE1DNV82CTEJLyogUE1DNS82IGhhdmUgbGltaXRlZCBmdW5jdGlvbiAqLwotI2RlZmluZSBQUE1VX0FMVF9TSVBSCQkyCS8qIHVzZXMgYWx0ZXJuYXRlIHBvc24gZm9yIFNJUFIvSFYgKi8KLQotLyoKLSAqIFZhbHVlcyBmb3IgZmxhZ3MgdG8gZ2V0X2FsdGVybmF0aXZlcygpCi0gKi8KLSNkZWZpbmUgUFBNVV9MSU1JVEVEX1BNQ19PSwkxCS8qIGNhbiBwdXQgdGhpcyBvbiBhIGxpbWl0ZWQgUE1DICovCi0jZGVmaW5lIFBQTVVfTElNSVRFRF9QTUNfUkVRRAkyCS8qIGhhdmUgdG8gcHV0IHRoaXMgb24gYSBsaW1pdGVkIFBNQyAqLwotI2RlZmluZSBQUE1VX09OTFlfQ09VTlRfUlVOCTQJLyogb25seSBjb3VudGluZyBpbiBydW4gc3RhdGUgKi8KLQotZXh0ZXJuIGludCByZWdpc3Rlcl9wb3dlcl9wbXUoc3RydWN0IHBvd2VyX3BtdSAqKTsKLQotc3RydWN0IHB0X3JlZ3M7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBwZXJmX21pc2NfZmxhZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGVyZl9pbnN0cnVjdGlvbl9wb2ludGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLQotI2RlZmluZSBQRVJGX0VWRU5UX0lOREVYX09GRlNFVAkxCi0KLS8qCi0gKiBPbmx5IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGRlZmluaXRpb25zIGluIGluY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCi0gKiBpZiB3ZSBoYXZlIGhhcmR3YXJlIFBNVSBzdXBwb3J0LgotICovCiAjaWZkZWYgQ09ORklHX1BQQ19QRVJGX0NUUlMKLSNkZWZpbmUgcGVyZl9taXNjX2ZsYWdzKHJlZ3MpCXBlcmZfbWlzY19mbGFncyhyZWdzKQorI2luY2x1ZGUgPGFzbS9wZXJmX2V2ZW50X3NlcnZlci5oPgogI2VuZGlmCiAKLS8qCi0gKiBUaGUgcG93ZXJfcG11LmdldF9jb25zdHJhaW50IGZ1bmN0aW9uIHJldHVybnMgYSAzMi82NC1iaXQgdmFsdWUgYW5kCi0gKiBhIDMyLzY0LWJpdCBtYXNrIHRoYXQgZXhwcmVzcyB0aGUgY29uc3RyYWludHMgYmV0d2VlbiB0aGlzIGV2ZW50X2lkIGFuZAotICogb3RoZXIgZXZlbnRzLgotICoKLSAqIFRoZSB2YWx1ZSBhbmQgbWFzayBhcmUgZGl2aWRlZCB1cCBpbnRvIChub24tb3ZlcmxhcHBpbmcpIGJpdGZpZWxkcwotICogb2YgdGhyZWUgZGlmZmVyZW50IHR5cGVzOgotICoKLSAqIFNlbGVjdCBmaWVsZDogdGhpcyBleHByZXNzZXMgdGhlIGNvbnN0cmFpbnQgdGhhdCBzb21lIHNldCBvZiBiaXRzCi0gKiBpbiBNTUNSKiBuZWVkcyB0byBiZSBzZXQgdG8gYSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhpcyBldmVudF9pZC4gIEZvciBhCi0gKiBzZWxlY3QgZmllbGQsIHRoZSBtYXNrIGNvbnRhaW5zIDFzIGluIGV2ZXJ5IGJpdCBvZiB0aGUgZmllbGQsIGFuZAotICogdGhlIHZhbHVlIGNvbnRhaW5zIGEgdW5pcXVlIHZhbHVlIGZvciBlYWNoIHBvc3NpYmxlIHNldHRpbmcgb2YgdGhlCi0gKiBNTUNSKiBiaXRzLiAgVGhlIGNvbnN0cmFpbnQgY2hlY2tpbmcgY29kZSB3aWxsIGVuc3VyZSB0aGF0IHR3byBldmVudHMKLSAqIHRoYXQgc2V0IHRoZSBzYW1lIGZpZWxkIGluIHRoZWlyIG1hc2tzIGhhdmUgdGhlIHNhbWUgdmFsdWUgaW4gdGhlaXIKLSAqIHZhbHVlIGR3b3Jkcy4KLSAqCi0gKiBBZGQgZmllbGQ6IHRoaXMgZXhwcmVzc2VzIHRoZSBjb25zdHJhaW50IHRoYXQgdGhlcmUgY2FuIGJlIGF0IG1vc3QKLSAqIE4gZXZlbnRzIGluIGEgcGFydGljdWxhciBjbGFzcy4gIEEgZmllbGQgb2YgayBiaXRzIGNhbiBiZSB1c2VkIGZvcgotICogTiA8PSAyXihrLTEpIC0gMS4gIFRoZSBtYXNrIGhhcyB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIGZpZWxkCi0gKiBzZXQgKGFuZCB0aGUgb3RoZXIgYml0cyAwKSwgYW5kIHRoZSB2YWx1ZSBoYXMgb25seSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQKLSAqIGJpdCBvZiB0aGUgZmllbGQgc2V0LiAgSW4gYWRkaXRpb24sIHRoZSAnYWRkX2ZpZWxkcycgYW5kICd0ZXN0X2FkZGVyJwotICogaW4gdGhlIHN0cnVjdCBwb3dlcl9wbXUgZm9yIHRoaXMgcHJvY2Vzc29yIGNvbWUgaW50byBwbGF5LiAgVGhlCi0gKiBhZGRfZmllbGRzIHZhbHVlIGNvbnRhaW5zIDEgaW4gdGhlIExTQiBvZiB0aGUgZmllbGQsIGFuZCB0aGUKLSAqIHRlc3RfYWRkZXIgY29udGFpbnMgMl4oay0xKSAtIDEgLSBOIGluIHRoZSBmaWVsZC4KLSAqCi0gKiBOQU5EIGZpZWxkOiB0aGlzIGV4cHJlc3NlcyB0aGUgY29uc3RyYWludCB0aGF0IHlvdSBtYXkgbm90IGhhdmUgZXZlbnRzCi0gKiBpbiBhbGwgb2YgYSBzZXQgb2YgY2xhc3Nlcy4gIChGb3IgZXhhbXBsZSwgb24gUFBDOTcwLCB5b3UgY2FuJ3Qgc2VsZWN0Ci0gKiBldmVudHMgZnJvbSB0aGUgRlBVLCBJU1UgYW5kIElEVSBzaW11bHRhbmVvdXNseSwgYWx0aG91Z2ggYW55IHR3byBhcmUKLSAqIHBvc3NpYmxlLikgIEZvciBOIGNsYXNzZXMsIHRoZSBmaWVsZCBpcyBOKzEgYml0cyB3aWRlLCBhbmQgZWFjaCBjbGFzcwotICogaXMgYXNzaWduZWQgb25lIGJpdCBmcm9tIHRoZSBsZWFzdC1zaWduaWZpY2FudCBOIGJpdHMuICBUaGUgbWFzayBoYXMKLSAqIG9ubHkgdGhlIG1vc3Qtc2lnbmlmaWNhbnQgYml0IHNldCwgYW5kIHRoZSB2YWx1ZSBoYXMgb25seSB0aGUgYml0Ci0gKiBmb3IgdGhlIGV2ZW50X2lkJ3MgY2xhc3Mgc2V0LiAgVGhlIHRlc3RfYWRkZXIgaGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudAotICogYml0IHNldCBpbiB0aGUgZmllbGQuCi0gKgotICogSWYgYW4gZXZlbnRfaWQgaXMgbm90IHN1YmplY3QgdG8gdGhlIGNvbnN0cmFpbnQgZXhwcmVzc2VkIGJ5IGEgcGFydGljdWxhcgotICogZmllbGQsIHRoZW4gaXQgd2lsbCBoYXZlIDAgaW4gYm90aCB0aGUgbWFzayBhbmQgdmFsdWUgZm9yIHRoYXQgZmllbGQuCi0gKi8KKyNpZmRlZiBDT05GSUdfRlNMX0VNQl9QRVJGX0VWRU5UCisjaW5jbHVkZSA8YXNtL3BlcmZfZXZlbnRfZnNsX2VtYi5oPgorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGVyZl9ldmVudF9mc2xfZW1iLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGVyZl9ldmVudF9mc2xfZW1iLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE4YTlmYQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50X2ZzbF9lbWIuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogUGVyZm9ybWFuY2UgZXZlbnQgc3VwcG9ydCAtIEZyZWVzY2FsZSBlbWJlZGRlZCBzcGVjaWZpYyBkZWZpbml0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IFBhdWwgTWFja2VycmFzLCBJQk0gQ29ycG9yYXRpb24uCisgKiBDb3B5cmlnaHQgMjAxMCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgorCisjZGVmaW5lIE1BWF9IV0VWRU5UUyA0CisKKy8qIGV2ZW50IGZsYWdzICovCisjZGVmaW5lIEZTTF9FTUJfRVZFTlRfVkFMSUQgICAgICAxCisjZGVmaW5lIEZTTF9FTUJfRVZFTlRfUkVTVFJJQ1RFRCAyCisKKy8qIHVwcGVyIGhhbGYgb2YgZXZlbnQgZmxhZ3MgaXMgUE1MQ2IgKi8KKyNkZWZpbmUgRlNMX0VNQl9FVkVOVF9USFJFU0hNVUwgIDB4MDAwMDA3MDAwMDAwMDAwMFVMTAorI2RlZmluZSBGU0xfRU1CX0VWRU5UX1RIUkVTSCAgICAgMHgwMDAwMDAzZjAwMDAwMDAwVUxMCisKK3N0cnVjdCBmc2xfZW1iX3BtdSB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwlpbnQJCW5fY291bnRlcjsgLyogdG90YWwgbnVtYmVyIG9mIGNvdW50ZXJzICovCisKKwkvKgorCSAqIFRoZSBudW1iZXIgb2YgY29udGlndW91cyBjb3VudGVycyBzdGFydGluZyBhdCB6ZXJvIHRoYXQKKwkgKiBjYW4gaG9sZCByZXN0cmljdGVkIGV2ZW50cywgb3IgemVybyBpZiB0aGVyZSBhcmUgbm8KKwkgKiByZXN0cmljdGVkIGV2ZW50cy4KKwkgKgorCSAqIFRoaXMgaXNuJ3QgYSB2ZXJ5IGZsZXhpYmxlIG1ldGhvZCBvZiBleHByZXNzaW5nIGNvbnN0cmFpbnRzLAorCSAqIGJ1dCBpdCdzIHZlcnkgc2ltcGxlIGFuZCBpcyBhZGVxdWF0ZSBmb3IgZXhpc3RpbmcgY2hpcHMuCisJICovCisJaW50CQluX3Jlc3RyaWN0ZWQ7CisKKwkvKiBSZXR1cm5zIGV2ZW50IGZsYWdzIGFuZCBQTUxDYiAoRlNMX0VNQl9FVkVOVF8qKSAqLworCXU2NAkJKCp4bGF0ZV9ldmVudCkodTY0IGV2ZW50X2lkKTsKKworCWludAkJbl9nZW5lcmljOworCWludAkJKmdlbmVyaWNfZXZlbnRzOworCWludAkJKCpjYWNoZV9ldmVudHMpW1BFUkZfQ09VTlRfSFdfQ0FDSEVfTUFYXQorCQkJICAgICAgIFtQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWF0KKwkJCSAgICAgICBbUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYXTsKK307CisKK2ludCByZWdpc3Rlcl9mc2xfZW1iX3BtdShzdHJ1Y3QgZnNsX2VtYl9wbXUgKik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGVyZl9ldmVudF9zZXJ2ZXIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZXJmX2V2ZW50X3NlcnZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMWRmMTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGVyZl9ldmVudF9zZXJ2ZXIuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIFBlcmZvcm1hbmNlIGV2ZW50IHN1cHBvcnQgLSBQb3dlclBDIGNsYXNzaWMvc2VydmVyIHNwZWNpZmljIGRlZmluaXRpb25zLgorICoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgUGF1bCBNYWNrZXJyYXMsIElCTSBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KKworI2RlZmluZSBNQVhfSFdFVkVOVFMJCTgKKyNkZWZpbmUgTUFYX0VWRU5UX0FMVEVSTkFUSVZFUwk4CisjZGVmaW5lIE1BWF9MSU1JVEVEX0hXQ09VTlRFUlMJMgorCisvKgorICogVGhpcyBzdHJ1Y3QgcHJvdmlkZXMgdGhlIGNvbnN0YW50cyBhbmQgZnVuY3Rpb25zIG5lZWRlZCB0bworICogZGVzY3JpYmUgdGhlIFBNVSBvbiBhIHBhcnRpY3VsYXIgUE9XRVItZmFtaWx5IENQVS4KKyAqLworc3RydWN0IHBvd2VyX3BtdSB7CisJY29uc3QgY2hhcgkqbmFtZTsKKwlpbnQJCW5fY291bnRlcjsKKwlpbnQJCW1heF9hbHRlcm5hdGl2ZXM7CisJdW5zaWduZWQgbG9uZwlhZGRfZmllbGRzOworCXVuc2lnbmVkIGxvbmcJdGVzdF9hZGRlcjsKKwlpbnQJCSgqY29tcHV0ZV9tbWNyKSh1NjQgZXZlbnRzW10sIGludCBuX2V2LAorCQkJCXVuc2lnbmVkIGludCBod2NbXSwgdW5zaWduZWQgbG9uZyBtbWNyW10pOworCWludAkJKCpnZXRfY29uc3RyYWludCkodTY0IGV2ZW50X2lkLCB1bnNpZ25lZCBsb25nICptc2twLAorCQkJCXVuc2lnbmVkIGxvbmcgKnZhbHApOworCWludAkJKCpnZXRfYWx0ZXJuYXRpdmVzKSh1NjQgZXZlbnRfaWQsIHVuc2lnbmVkIGludCBmbGFncywKKwkJCQl1NjQgYWx0W10pOworCXZvaWQJCSgqZGlzYWJsZV9wbWMpKHVuc2lnbmVkIGludCBwbWMsIHVuc2lnbmVkIGxvbmcgbW1jcltdKTsKKwlpbnQJCSgqbGltaXRlZF9wbWNfZXZlbnQpKHU2NCBldmVudF9pZCk7CisJdTMyCQlmbGFnczsKKwlpbnQJCW5fZ2VuZXJpYzsKKwlpbnQJCSpnZW5lcmljX2V2ZW50czsKKwlpbnQJCSgqY2FjaGVfZXZlbnRzKVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWF0KKwkJCSAgICAgICBbUEVSRl9DT1VOVF9IV19DQUNIRV9PUF9NQVhdCisJCQkgICAgICAgW1BFUkZfQ09VTlRfSFdfQ0FDSEVfUkVTVUxUX01BWF07Cit9OworCisvKgorICogVmFsdWVzIGZvciBwb3dlcl9wbXUuZmxhZ3MKKyAqLworI2RlZmluZSBQUE1VX0xJTUlURURfUE1DNV82CTEJLyogUE1DNS82IGhhdmUgbGltaXRlZCBmdW5jdGlvbiAqLworI2RlZmluZSBQUE1VX0FMVF9TSVBSCQkyCS8qIHVzZXMgYWx0ZXJuYXRlIHBvc24gZm9yIFNJUFIvSFYgKi8KKworLyoKKyAqIFZhbHVlcyBmb3IgZmxhZ3MgdG8gZ2V0X2FsdGVybmF0aXZlcygpCisgKi8KKyNkZWZpbmUgUFBNVV9MSU1JVEVEX1BNQ19PSwkxCS8qIGNhbiBwdXQgdGhpcyBvbiBhIGxpbWl0ZWQgUE1DICovCisjZGVmaW5lIFBQTVVfTElNSVRFRF9QTUNfUkVRRAkyCS8qIGhhdmUgdG8gcHV0IHRoaXMgb24gYSBsaW1pdGVkIFBNQyAqLworI2RlZmluZSBQUE1VX09OTFlfQ09VTlRfUlVOCTQJLyogb25seSBjb3VudGluZyBpbiBydW4gc3RhdGUgKi8KKworZXh0ZXJuIGludCByZWdpc3Rlcl9wb3dlcl9wbXUoc3RydWN0IHBvd2VyX3BtdSAqKTsKKworc3RydWN0IHB0X3JlZ3M7CitleHRlcm4gdW5zaWduZWQgbG9uZyBwZXJmX21pc2NfZmxhZ3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGVyZl9pbnN0cnVjdGlvbl9wb2ludGVyKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworI2RlZmluZSBQRVJGX0VWRU5UX0lOREVYX09GRlNFVAkxCisKKy8qCisgKiBPbmx5IG92ZXJyaWRlIHRoZSBkZWZhdWx0IGRlZmluaXRpb25zIGluIGluY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisgKiBpZiB3ZSBoYXZlIGhhcmR3YXJlIFBNVSBzdXBwb3J0LgorICovCisjaWZkZWYgQ09ORklHX1BQQ19QRVJGX0NUUlMKKyNkZWZpbmUgcGVyZl9taXNjX2ZsYWdzKHJlZ3MpCXBlcmZfbWlzY19mbGFncyhyZWdzKQorI2VuZGlmCisKKy8qCisgKiBUaGUgcG93ZXJfcG11LmdldF9jb25zdHJhaW50IGZ1bmN0aW9uIHJldHVybnMgYSAzMi82NC1iaXQgdmFsdWUgYW5kCisgKiBhIDMyLzY0LWJpdCBtYXNrIHRoYXQgZXhwcmVzcyB0aGUgY29uc3RyYWludHMgYmV0d2VlbiB0aGlzIGV2ZW50X2lkIGFuZAorICogb3RoZXIgZXZlbnRzLgorICoKKyAqIFRoZSB2YWx1ZSBhbmQgbWFzayBhcmUgZGl2aWRlZCB1cCBpbnRvIChub24tb3ZlcmxhcHBpbmcpIGJpdGZpZWxkcworICogb2YgdGhyZWUgZGlmZmVyZW50IHR5cGVzOgorICoKKyAqIFNlbGVjdCBmaWVsZDogdGhpcyBleHByZXNzZXMgdGhlIGNvbnN0cmFpbnQgdGhhdCBzb21lIHNldCBvZiBiaXRzCisgKiBpbiBNTUNSKiBuZWVkcyB0byBiZSBzZXQgdG8gYSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhpcyBldmVudF9pZC4gIEZvciBhCisgKiBzZWxlY3QgZmllbGQsIHRoZSBtYXNrIGNvbnRhaW5zIDFzIGluIGV2ZXJ5IGJpdCBvZiB0aGUgZmllbGQsIGFuZAorICogdGhlIHZhbHVlIGNvbnRhaW5zIGEgdW5pcXVlIHZhbHVlIGZvciBlYWNoIHBvc3NpYmxlIHNldHRpbmcgb2YgdGhlCisgKiBNTUNSKiBiaXRzLiAgVGhlIGNvbnN0cmFpbnQgY2hlY2tpbmcgY29kZSB3aWxsIGVuc3VyZSB0aGF0IHR3byBldmVudHMKKyAqIHRoYXQgc2V0IHRoZSBzYW1lIGZpZWxkIGluIHRoZWlyIG1hc2tzIGhhdmUgdGhlIHNhbWUgdmFsdWUgaW4gdGhlaXIKKyAqIHZhbHVlIGR3b3Jkcy4KKyAqCisgKiBBZGQgZmllbGQ6IHRoaXMgZXhwcmVzc2VzIHRoZSBjb25zdHJhaW50IHRoYXQgdGhlcmUgY2FuIGJlIGF0IG1vc3QKKyAqIE4gZXZlbnRzIGluIGEgcGFydGljdWxhciBjbGFzcy4gIEEgZmllbGQgb2YgayBiaXRzIGNhbiBiZSB1c2VkIGZvcgorICogTiA8PSAyXihrLTEpIC0gMS4gIFRoZSBtYXNrIGhhcyB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgb2YgdGhlIGZpZWxkCisgKiBzZXQgKGFuZCB0aGUgb3RoZXIgYml0cyAwKSwgYW5kIHRoZSB2YWx1ZSBoYXMgb25seSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQKKyAqIGJpdCBvZiB0aGUgZmllbGQgc2V0LiAgSW4gYWRkaXRpb24sIHRoZSAnYWRkX2ZpZWxkcycgYW5kICd0ZXN0X2FkZGVyJworICogaW4gdGhlIHN0cnVjdCBwb3dlcl9wbXUgZm9yIHRoaXMgcHJvY2Vzc29yIGNvbWUgaW50byBwbGF5LiAgVGhlCisgKiBhZGRfZmllbGRzIHZhbHVlIGNvbnRhaW5zIDEgaW4gdGhlIExTQiBvZiB0aGUgZmllbGQsIGFuZCB0aGUKKyAqIHRlc3RfYWRkZXIgY29udGFpbnMgMl4oay0xKSAtIDEgLSBOIGluIHRoZSBmaWVsZC4KKyAqCisgKiBOQU5EIGZpZWxkOiB0aGlzIGV4cHJlc3NlcyB0aGUgY29uc3RyYWludCB0aGF0IHlvdSBtYXkgbm90IGhhdmUgZXZlbnRzCisgKiBpbiBhbGwgb2YgYSBzZXQgb2YgY2xhc3Nlcy4gIChGb3IgZXhhbXBsZSwgb24gUFBDOTcwLCB5b3UgY2FuJ3Qgc2VsZWN0CisgKiBldmVudHMgZnJvbSB0aGUgRlBVLCBJU1UgYW5kIElEVSBzaW11bHRhbmVvdXNseSwgYWx0aG91Z2ggYW55IHR3byBhcmUKKyAqIHBvc3NpYmxlLikgIEZvciBOIGNsYXNzZXMsIHRoZSBmaWVsZCBpcyBOKzEgYml0cyB3aWRlLCBhbmQgZWFjaCBjbGFzcworICogaXMgYXNzaWduZWQgb25lIGJpdCBmcm9tIHRoZSBsZWFzdC1zaWduaWZpY2FudCBOIGJpdHMuICBUaGUgbWFzayBoYXMKKyAqIG9ubHkgdGhlIG1vc3Qtc2lnbmlmaWNhbnQgYml0IHNldCwgYW5kIHRoZSB2YWx1ZSBoYXMgb25seSB0aGUgYml0CisgKiBmb3IgdGhlIGV2ZW50X2lkJ3MgY2xhc3Mgc2V0LiAgVGhlIHRlc3RfYWRkZXIgaGFzIHRoZSBsZWFzdCBzaWduaWZpY2FudAorICogYml0IHNldCBpbiB0aGUgZmllbGQuCisgKgorICogSWYgYW4gZXZlbnRfaWQgaXMgbm90IHN1YmplY3QgdG8gdGhlIGNvbnN0cmFpbnQgZXhwcmVzc2VkIGJ5IGEgcGFydGljdWxhcgorICogZmllbGQsIHRoZW4gaXQgd2lsbCBoYXZlIDAgaW4gYm90aCB0aGUgbWFzayBhbmQgdmFsdWUgZm9yIHRoYXQgZmllbGQuCisgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCBiNDUxMDgxLi45ZTJkODRjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xMzcsMTUgKzEzNyw4IEBACiB9IHdoaWxlICgwKQogI2VuZGlmIC8qIF9fcG93ZXJwYzY0X18gKi8KIAotLyoKLSAqIFRoZXNlIGFyZSBkZWZpbmVkIGFzIHBlciBsaW51eC9wdHJhY2UuaCwgd2hpY2ggc2VlLgotICovCiAjZGVmaW5lIGFyY2hfaGFzX3NpbmdsZV9zdGVwKCkJKDEpCiAjZGVmaW5lIGFyY2hfaGFzX2Jsb2NrX3N0ZXAoKQkoIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSXzYwMSkpCi1leHRlcm4gdm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7Ci1leHRlcm4gdm9pZCB1c2VyX2VuYWJsZV9ibG9ja19zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKLWV4dGVybiB2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7Ci0KICNkZWZpbmUgQVJDSF9IQVNfVVNFUl9TSU5HTEVfU1RFUF9JTkZPCiAKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaAppbmRleCBiYzhkZDUzLi41NTcyZTg2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oCkBAIC00MjYsNiArNDI2LDEwIEBACiAjZGVmaW5lICAgU1JSMV9XQUtFTVQJCTB4MDAyODAwMDAgLyogbXRjdHJsICovCiAjZGVmaW5lICAgU1JSMV9XQUtFREVDCQkweDAwMTgwMDAwIC8qIERlY3JlbWVudGVyIGludGVycnVwdCAqLwogI2RlZmluZSAgIFNSUjFfV0FLRVRIRVJNCTB4MDAxMDAwMDAgLyogVGhlcm1hbCBtYW5hZ2VtZW50IGludGVycnVwdCAqLworI2RlZmluZSAgIFNSUjFfUFJPR0ZQRQkJMHgwMDEwMDAwMCAvKiBGbG9hdGluZyBQb2ludCBFbmFibGVkICovCisjZGVmaW5lICAgU1JSMV9QUk9HUFJJVgkJMHgwMDA0MDAwMCAvKiBQcml2aWxlZ2VkIGluc3RydWN0aW9uICovCisjZGVmaW5lICAgU1JSMV9QUk9HVFJBUAkJMHgwMDAyMDAwMCAvKiBUcmFwICovCisjZGVmaW5lICAgU1JSMV9QUk9HQUREUgkJMHgwMDAxMDAwMCAvKiBTUlIwIGNvbnRhaW5zIHN1YnNlcXVlbnQgYWRkciAqLwogI2RlZmluZSBTUFJOX0hTUlIwCTB4MTNBCS8qIFNhdmUvUmVzdG9yZSBSZWdpc3RlciAwICovCiAjZGVmaW5lIFNQUk5fSFNSUjEJMHgxM0IJLyogU2F2ZS9SZXN0b3JlIFJlZ2lzdGVyIDEgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCmluZGV4IDg4MDhkMzAuLjQxNGQ0MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfYm9va2UuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKQEAgLTQyMSw4ICs0MjEsOCBAQAogLyogQml0IGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIERCQ1IyLiAqLwogI2RlZmluZSBEQkNSMl9EQUMxVVMJMHhDMDAwMDAwMAkvKiBEYXRhIEFkZHIgQ21wIDEgU3VwL1VzZXIgICAqLwogI2RlZmluZSBEQkNSMl9EQUMxRVIJMHgzMDAwMDAwMAkvKiBEYXRhIEFkZHIgQ21wIDEgRWZmL1JlYWwgKi8KLSNkZWZpbmUgREJDUjJfREFDMlVTCTB4MDAwMDAwMDAJLyogRGF0YSBBZGRyIENtcCAyIFN1cC9Vc2VyICAgKi8KLSNkZWZpbmUgREJDUjJfREFDMkVSCTB4MDAwMDAwMDAJLyogRGF0YSBBZGRyIENtcCAyIEVmZi9SZWFsICovCisjZGVmaW5lIERCQ1IyX0RBQzJVUwkweDBDMDAwMDAwCS8qIERhdGEgQWRkciBDbXAgMiBTdXAvVXNlciAgICovCisjZGVmaW5lIERCQ1IyX0RBQzJFUgkweDAzMDAwMDAwCS8qIERhdGEgQWRkciBDbXAgMiBFZmYvUmVhbCAqLwogI2RlZmluZSBEQkNSMl9EQUMxMk0JMHgwMDgwMDAwMAkvKiBEQUMgMS0yIHJhbmdlIGVuYWJsZSAqLwogI2RlZmluZSBEQkNSMl9EQUMxMk1NCTB4MDA0MDAwMDAJLyogREFDIDEtMiBNYXNrIG1vZGUqLwogI2RlZmluZSBEQkNSMl9EQUMxMk1YCTB4MDBDMDAwMDAJLyogREFDIDEtMiByYW5nZSBlWGNsdXNpdmUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWdfZnNsX2VtYi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19mc2xfZW1iLmgKaW5kZXggMGRlNDA0ZC4uNzdiYjcxYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19mc2xfZW1iLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19mc2xfZW1iLmgKQEAgLTMxLDcgKzMxLDcgQEAKICNkZWZpbmUgUE1MQ0FfRkNNMAkweDA4MDAwMDAwCS8qIEZyZWV6ZSB3aGVuIFBNTT09MCAqLwogI2RlZmluZSBQTUxDQV9DRQkweDA0MDAwMDAwCS8qIENvbmRpdGlvbiBFbmFibGUgKi8KIAotI2RlZmluZSBQTUxDQV9FVkVOVF9NQVNLIDB4MDA3ZjAwMDAJLyogRXZlbnQgZmllbGQgKi8KKyNkZWZpbmUgUE1MQ0FfRVZFTlRfTUFTSyAweDAwZmYwMDAwCS8qIEV2ZW50IGZpZWxkICovCiAjZGVmaW5lIFBNTENBX0VWRU5UX1NISUZUCTE2CiAKICNkZWZpbmUgUE1STl9QTUxDQjAJMHgxMTAJLyogUE0gTG9jYWwgQ29udHJvbCBCMCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c2NhbGxzLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzY2FsbHMuaAppbmRleCBlYjhlYjQwLi40MDg0ZTU2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzY2FsbHMuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzY2FsbHMuaApAQCAtNyw3ICs3LDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KIAotc3RydWN0IG5ld191dHNuYW1lOwogc3RydWN0IHB0X3JlZ3M7CiBzdHJ1Y3QgcnRhc19hcmdzOwogc3RydWN0IHNpZ2FjdGlvbjsKQEAgLTM1LDEyICszNCw5IEBACiBhc21saW5rYWdlIGxvbmcgc3lzX3J0X3NpZ2FjdGlvbihpbnQgc2lnLAogCQljb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqYWN0LAogCQlzdHJ1Y3Qgc2lnYWN0aW9uIF9fdXNlciAqb2FjdCwgc2l6ZV90IHNpZ3NldHNpemUpOwotYXNtbGlua2FnZSBpbnQgc3lzX2lwYyh1aW50IGNhbGwsIGludCBmaXJzdCwgdW5zaWduZWQgbG9uZyBzZWNvbmQsCi0JCWxvbmcgdGhpcmQsIHZvaWQgX191c2VyICpwdHIsIGxvbmcgZmlmdGgpOwogYXNtbGlua2FnZSBsb25nIHBwYzY0X3BlcnNvbmFsaXR5KHVuc2lnbmVkIGxvbmcgcGVyc29uYWxpdHkpOwogYXNtbGlua2FnZSBpbnQgcHBjX3J0YXMoc3RydWN0IHJ0YXNfYXJncyBfX3VzZXIgKnVhcmdzKTsKIGFzbWxpbmthZ2UgdGltZV90IHN5czY0X3RpbWUodGltZV90IF9fdXNlciAqIHRsb2MpOwotYXNtbGlua2FnZSBsb25nIHBwY19uZXd1bmFtZShzdHJ1Y3QgbmV3X3V0c25hbWUgX191c2VyICogbmFtZSk7CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfcnRfc2lnc3VzcGVuZChzaWdzZXRfdCBfX3VzZXIgKnVuZXdzZXQsCiAJCXNpemVfdCBzaWdzZXRzaXplKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0YmwuaAppbmRleCAwN2QyZDE5Li5hNWVlMzQ1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGJsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RibC5oCkBAIC0xMjUsNyArMTI1LDcgQEAKIFNZUzMyT05MWShzaWdyZXR1cm4pCiBQUENfU1lTKGNsb25lKQogQ09NUEFUX1NZU19TUFUoc2V0ZG9tYWlubmFtZSkKLVBQQ19TWVNfU1BVKG5ld3VuYW1lKQorU1lTQ0FMTF9TUFUobmV3dW5hbWUpCiBTWVNDQUxMKG5pX3N5c2NhbGwpCiBDT01QQVRfU1lTX1NQVShhZGp0aW1leCkKIFNZU0NBTExfU1BVKG1wcm90ZWN0KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGY2Y2E3NjEuLmYwYTEwMjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91bmlzdGQuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdW5pc3RkLmgKQEAgLTM2NCw2ICszNjQsNyBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfSVBDCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTApAQCAtMzc2LDYgKzM3Nyw3IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9VTkFNRQogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKaW5kZXggYzAwMmIwNC4uODc3MzI2MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCkBAIC05OCwxMSArOTgsMTYgQEAKIAogb2JqLSQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKQkrPSBmdHJhY2Uubwogb2JqLSQoQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUikJKz0gZnRyYWNlLm8KLW9iai0kKENPTkZJR19QUENfUEVSRl9DVFJTKQkrPSBwZXJmX2V2ZW50Lm8gcGVyZl9jYWxsY2hhaW4ubworb2JqLSQoQ09ORklHX1BFUkZfRVZFTlRTKQkrPSBwZXJmX2NhbGxjaGFpbi5vCisKK29iai0kKENPTkZJR19QUENfUEVSRl9DVFJTKQkrPSBwZXJmX2V2ZW50Lm8KIG9iajY0LSQoQ09ORklHX1BQQ19QRVJGX0NUUlMpCSs9IHBvd2VyNC1wbXUubyBwcGM5NzAtcG11Lm8gcG93ZXI1LXBtdS5vIFwKIAkJCQkgICBwb3dlcjUrLXBtdS5vIHBvd2VyNi1wbXUubyBwb3dlcjctcG11Lm8KIG9iajMyLSQoQ09ORklHX1BQQ19QRVJGX0NUUlMpCSs9IG1wYzc0NTAtcG11Lm8KIAorb2JqLSQoQ09ORklHX0ZTTF9FTUJfUEVSRl9FVkVOVCkgKz0gcGVyZl9ldmVudF9mc2xfZW1iLm8KK29iai0kKENPTkZJR19GU0xfRU1CX1BFUkZfRVZFTlRfRTUwMCkgKz0gZTUwMC1wbXUubworCiBvYmotJChDT05GSUdfOFhYX01JTklNQUxfRlBFTVUpICs9IHNvZnRlbXU4eHgubwogCiBpZm5lcSAoJChDT05GSUdfUFBDX0lORElSRUNUX0lPKSx5KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCmluZGV4IGE2YzJiNjMuLjk1N2NlYjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKQEAgLTE5NCw2ICsxOTQsMzAgQEAKIAlERUZJTkUoUEFDQV9LVk1fSU5fR1VFU1QsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwga3ZtX2luX2d1ZXN0KSk7CiAJREVGSU5FKFBBQ0FfS1ZNX1NMQiwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBrdm1fc2xiKSk7CiAJREVGSU5FKFBBQ0FfS1ZNX1NMQl9NQVgsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwga3ZtX3NsYl9tYXgpKTsKKwlERUZJTkUoUEFDQV9LVk1fQ1IsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgc2hhZG93X3ZjcHUuY3IpKTsKKwlERUZJTkUoUEFDQV9LVk1fWEVSLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHNoYWRvd192Y3B1LnhlcikpOworCURFRklORShQQUNBX0tWTV9SMCwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBzaGFkb3dfdmNwdS5ncHJbMF0pKTsKKwlERUZJTkUoUEFDQV9LVk1fUjEsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgc2hhZG93X3ZjcHUuZ3ByWzFdKSk7CisJREVGSU5FKFBBQ0FfS1ZNX1IyLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHNoYWRvd192Y3B1LmdwclsyXSkpOworCURFRklORShQQUNBX0tWTV9SMywgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBzaGFkb3dfdmNwdS5ncHJbM10pKTsKKwlERUZJTkUoUEFDQV9LVk1fUjQsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgc2hhZG93X3ZjcHUuZ3ByWzRdKSk7CisJREVGSU5FKFBBQ0FfS1ZNX1I1LCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHNoYWRvd192Y3B1Lmdwcls1XSkpOworCURFRklORShQQUNBX0tWTV9SNiwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBzaGFkb3dfdmNwdS5ncHJbNl0pKTsKKwlERUZJTkUoUEFDQV9LVk1fUjcsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgc2hhZG93X3ZjcHUuZ3ByWzddKSk7CisJREVGSU5FKFBBQ0FfS1ZNX1I4LCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHNoYWRvd192Y3B1Lmdwcls4XSkpOworCURFRklORShQQUNBX0tWTV9SOSwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBzaGFkb3dfdmNwdS5ncHJbOV0pKTsKKwlERUZJTkUoUEFDQV9LVk1fUjEwLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHNoYWRvd192Y3B1LmdwclsxMF0pKTsKKwlERUZJTkUoUEFDQV9LVk1fUjExLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHNoYWRvd192Y3B1LmdwclsxMV0pKTsKKwlERUZJTkUoUEFDQV9LVk1fUjEyLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHNoYWRvd192Y3B1LmdwclsxMl0pKTsKKwlERUZJTkUoUEFDQV9LVk1fUjEzLCBvZmZzZXRvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QsIHNoYWRvd192Y3B1LmdwclsxM10pKTsKKwlERUZJTkUoUEFDQV9LVk1fSE9TVF9SMSwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LCBzaGFkb3dfdmNwdS5ob3N0X3IxKSk7CisJREVGSU5FKFBBQ0FfS1ZNX0hPU1RfUjIsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwgc2hhZG93X3ZjcHUuaG9zdF9yMikpOworCURFRklORShQQUNBX0tWTV9WTUhBTkRMRVIsIG9mZnNldG9mKHN0cnVjdCBwYWNhX3N0cnVjdCwKKwkJCQkJICAgIHNoYWRvd192Y3B1LnZtaGFuZGxlcikpOworCURFRklORShQQUNBX0tWTV9TQ1JBVENIMCwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LAorCQkJCQkgICBzaGFkb3dfdmNwdS5zY3JhdGNoMCkpOworCURFRklORShQQUNBX0tWTV9TQ1JBVENIMSwgb2Zmc2V0b2Yoc3RydWN0IHBhY2Ffc3RydWN0LAorCQkJCQkgICBzaGFkb3dfdmNwdS5zY3JhdGNoMSkpOwogI2VuZGlmCiAjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKQEAgLTM4OSw4ICs0MTMsNiBAQAogCURFRklORShWQ1BVX0hPU1RfUElELCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guaG9zdF9waWQpKTsKIAlERUZJTkUoVkNQVV9HUFJTLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guZ3ByKSk7CiAJREVGSU5FKFZDUFVfTFIsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5scikpOwotCURFRklORShWQ1BVX0NSLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guY3IpKTsKLQlERUZJTkUoVkNQVV9YRVIsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC54ZXIpKTsKIAlERUZJTkUoVkNQVV9DVFIsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5jdHIpKTsKIAlERUZJTkUoVkNQVV9QQywgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLnBjKSk7CiAJREVGSU5FKFZDUFVfTVNSLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2gubXNyKSk7CkBAIC00MTEsMTEgKzQzMywxNiBAQAogCURFRklORShWQ1BVX0hPU1RfUjIsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5ob3N0X3IyKSk7CiAJREVGSU5FKFZDUFVfSE9TVF9NU1IsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5ob3N0X21zcikpOwogCURFRklORShWQ1BVX1NIQURPV19NU1IsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5zaGFkb3dfbXNyKSk7CisJREVGSU5FKFZDUFVfU0hBRE9XX1NSUjEsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC5zaGFkb3dfc3JyMSkpOwogCURFRklORShWQ1BVX1RSQU1QT0xJTkVfTE9XTUVNLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2gudHJhbXBvbGluZV9sb3dtZW0pKTsKIAlERUZJTkUoVkNQVV9UUkFNUE9MSU5FX0VOVEVSLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2gudHJhbXBvbGluZV9lbnRlcikpOwogCURFRklORShWQ1BVX0hJR0hNRU1fSEFORExFUiwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmhpZ2htZW1faGFuZGxlcikpOworCURFRklORShWQ1BVX1JNQ0FMTCwgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLnJtY2FsbCkpOwogCURFRklORShWQ1BVX0hGTEFHUywgb2Zmc2V0b2Yoc3RydWN0IGt2bV92Y3B1LCBhcmNoLmhmbGFncykpOwotI2VuZGlmCisjZWxzZQorCURFRklORShWQ1BVX0NSLCBvZmZzZXRvZihzdHJ1Y3Qga3ZtX3ZjcHUsIGFyY2guY3IpKTsKKwlERUZJTkUoVkNQVV9YRVIsIG9mZnNldG9mKHN0cnVjdCBrdm1fdmNwdSwgYXJjaC54ZXIpKTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDNjQgKi8KICNlbmRpZgogI2lmZGVmIENPTkZJR180NHgKIAlERUZJTkUoUEdEX1RfTE9HMiwgUEdEX1RfTE9HMik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NhY2hlaW5mby5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jYWNoZWluZm8uYwppbmRleCBiYjM3YjFkLi4wMWZlOWNlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NhY2hlaW5mby5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY2FjaGVpbmZvLmMKQEAgLTY0Miw3ICs2NDIsNyBAQAogCSZjYWNoZV9hc3NvY19hdHRyLAogfTsKIAotc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgY2FjaGVfaW5kZXhfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgY2FjaGVfaW5kZXhfb3BzID0gewogCS5zaG93ID0gY2FjaGVfaW5kZXhfc2hvdywKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCAyZmM4MmJhLi44YWY0OTQ5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC0xODA4LDcgKzE4MDgsNyBAQAogCQkuaWNhY2hlX2JzaXplCQk9IDY0LAogCQkuZGNhY2hlX2JzaXplCQk9IDY0LAogCQkubnVtX3BtY3MJCT0gNCwKLQkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYy9lNTAwIiwgLyogeHh4IC0gZ2FsYWssIGU1MDBtYz8gKi8KKwkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYy9lNTAwbWMiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRlNMX0VNQiwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV9lNTAwbWMsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZTUwMCwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZTUwMC1wbXUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZTUwMC1wbXUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzA3ZGUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lNTAwLXBtdS5jCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogUGVyZm9ybWFuY2UgY291bnRlciBzdXBwb3J0IGZvciBlNTAwIGZhbWlseSBwcm9jZXNzb3JzLgorICoKKyAqIENvcHlyaWdodCAyMDA4LTIwMDkgUGF1bCBNYWNrZXJyYXMsIElCTSBDb3Jwb3JhdGlvbi4KKyAqIENvcHlyaWdodCAyMDEwIEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmZfZXZlbnQuaD4KKyNpbmNsdWRlIDxhc20vcmVnLmg+CisjaW5jbHVkZSA8YXNtL2NwdXRhYmxlLmg+CisKKy8qCisgKiBNYXAgb2YgZ2VuZXJpYyBoYXJkd2FyZSBldmVudCB0eXBlcyB0byBoYXJkd2FyZSBldmVudHMKKyAqIFplcm8gaWYgdW5zdXBwb3J0ZWQKKyAqLworc3RhdGljIGludCBlNTAwX2dlbmVyaWNfZXZlbnRzW10gPSB7CisJW1BFUkZfQ09VTlRfSFdfQ1BVX0NZQ0xFU10gPSAxLAorCVtQRVJGX0NPVU5UX0hXX0lOU1RSVUNUSU9OU10gPSAyLAorCVtQRVJGX0NPVU5UX0hXX0NBQ0hFX01JU1NFU10gPSA0MSwgLyogRGF0YSBMMSBjYWNoZSByZWxvYWRzICovCisJW1BFUkZfQ09VTlRfSFdfQlJBTkNIX0lOU1RSVUNUSU9OU10gPSAxMiwKKwlbUEVSRl9DT1VOVF9IV19CUkFOQ0hfTUlTU0VTXSA9IDE1LAorfTsKKworI2RlZmluZSBDKHgpCVBFUkZfQ09VTlRfSFdfQ0FDSEVfIyN4CisKKy8qCisgKiBUYWJsZSBvZiBnZW5lcmFsaXplZCBjYWNoZS1yZWxhdGVkIGV2ZW50cy4KKyAqIDAgbWVhbnMgbm90IHN1cHBvcnRlZCwgLTEgbWVhbnMgbm9uc2Vuc2ljYWwsIG90aGVyIHZhbHVlcworICogYXJlIGV2ZW50IGNvZGVzLgorICovCitzdGF0aWMgaW50IGU1MDBfY2FjaGVfZXZlbnRzW0MoTUFYKV1bQyhPUF9NQVgpXVtDKFJFU1VMVF9NQVgpXSA9IHsKKwkvKgorCSAqIEQtY2FjaGUgbWlzc2VzIGFyZSBub3Qgc3BsaXQgaW50byByZWFkL3dyaXRlL3ByZWZldGNoOworCSAqIHVzZSByYXcgZXZlbnQgNDEuCisJICovCisJW0MoTDFEKV0gPSB7CQkvKiAJUkVTVUxUX0FDQ0VTUwlSRVNVTFRfTUlTUyAqLworCQlbQyhPUF9SRUFEKV0gPSB7CTI3LAkJMAl9LAorCQlbQyhPUF9XUklURSldID0gewkyOCwJCTAJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsJMjksCQkwCX0sCisJfSwKKwlbQyhMMUkpXSA9IHsJCS8qIAlSRVNVTFRfQUNDRVNTCVJFU1VMVF9NSVNTICovCisJCVtDKE9QX1JFQUQpXSA9IHsJMiwJCTYwCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CS0xLAkJLTEJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsJMCwJCTAJfSwKKwl9LAorCS8qCisJICogQXNzdW1pbmcgTEwgbWVhbnMgTDIsIGl0J3Mgbm90IGEgZ29vZCBtYXRjaCBmb3IgdGhpcyBtb2RlbC4KKwkgKiBJdCBhbGxvY2F0ZXMgb25seSBvbiBMMSBjYXN0b3V0IG9yIGV4cGxpY2l0IHByZWZldGNoLCBhbmQKKwkgKiBkb2VzIG5vdCBoYXZlIHNlcGFyYXRlIHJlYWQvd3JpdGUgZXZlbnRzIChidXQgaXQgZG9lcyBoYXZlCisJICogc2VwYXJhdGUgaW5zdHJ1Y3Rpb24vZGF0YSBldmVudHMpLgorCSAqLworCVtDKExMKV0gPSB7CQkvKiAJUkVTVUxUX0FDQ0VTUwlSRVNVTFRfTUlTUyAqLworCQlbQyhPUF9SRUFEKV0gPSB7CTAsCQkwCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CTAsCQkwCX0sCisJCVtDKE9QX1BSRUZFVENIKV0gPSB7CTAsCQkwCX0sCisJfSwKKwkvKgorCSAqIFRoZXJlIGFyZSBkYXRhL2luc3RydWN0aW9uIE1NVSBtaXNzZXMsIGJ1dCB0aGF0J3MgYSBtaXNzIG9uCisJICogdGhlIGNoaXAncyBpbnRlcm5hbCBsZXZlbC1vbmUgVExCIHdoaWNoIGlzIHByb2JhYmx5IG5vdAorCSAqIHdoYXQgdGhlIHVzZXIgd2FudHMuICBJbnN0ZWFkLCB1bmlmaWVkIGxldmVsLXR3byBUTEIgbWlzc2VzCisJICogYXJlIHJlcG9ydGVkIGhlcmUuCisJICovCisJW0MoRFRMQildID0gewkJLyogCVJFU1VMVF9BQ0NFU1MJUkVTVUxUX01JU1MgKi8KKwkJW0MoT1BfUkVBRCldID0gewkyNiwJCTY2CX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CS0xLAkJLTEJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsJLTEsCQktMQl9LAorCX0sCisJW0MoQlBVKV0gPSB7CQkvKiAJUkVTVUxUX0FDQ0VTUwlSRVNVTFRfTUlTUyAqLworCQlbQyhPUF9SRUFEKV0gPSB7CTEyLAkJMTUgCX0sCisJCVtDKE9QX1dSSVRFKV0gPSB7CS0xLAkJLTEJfSwKKwkJW0MoT1BfUFJFRkVUQ0gpXSA9IHsJLTEsCQktMQl9LAorCX0sCit9OworCitzdGF0aWMgaW50IG51bV9ldmVudHMgPSAxMjg7CisKKy8qIFVwcGVyIGhhbGYgb2YgZXZlbnQgaWQgaXMgUE1MQ2IsIGZvciB0aHJlc2hvbGQgZXZlbnRzICovCitzdGF0aWMgdTY0IGU1MDBfeGxhdGVfZXZlbnQodTY0IGV2ZW50X2lkKQoreworCXUzMiBldmVudF9sb3cgPSAodTMyKWV2ZW50X2lkOworCXU2NCByZXQ7CisKKwlpZiAoZXZlbnRfbG93ID49IG51bV9ldmVudHMpCisJCXJldHVybiAwOworCisJcmV0ID0gRlNMX0VNQl9FVkVOVF9WQUxJRDsKKworCWlmIChldmVudF9sb3cgPj0gNzYgJiYgZXZlbnRfbG93IDw9IDgxKSB7CisJCXJldCB8PSBGU0xfRU1CX0VWRU5UX1JFU1RSSUNURUQ7CisJCXJldCB8PSBldmVudF9pZCAmCisJCSAgICAgICAoRlNMX0VNQl9FVkVOVF9USFJFU0hNVUwgfCBGU0xfRU1CX0VWRU5UX1RIUkVTSCk7CisJfSBlbHNlIGlmIChldmVudF9pZCAmCisJICAgICAgICAgICAoRlNMX0VNQl9FVkVOVF9USFJFU0hNVUwgfCBGU0xfRU1CX0VWRU5UX1RIUkVTSCkpIHsKKwkJLyogVGhyZXNob2xkIHJlcXVlc3RlZCBvbiBub24tdGhyZXNob2xkIGV2ZW50ICovCisJCXJldHVybiAwOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZnNsX2VtYl9wbXUgZTUwMF9wbXUgPSB7CisJLm5hbWUJCQk9ICJlNTAwIGZhbWlseSIsCisJLm5fY291bnRlcgkJPSA0LAorCS5uX3Jlc3RyaWN0ZWQJCT0gMiwKKwkueGxhdGVfZXZlbnQJCT0gZTUwMF94bGF0ZV9ldmVudCwKKwkubl9nZW5lcmljCQk9IEFSUkFZX1NJWkUoZTUwMF9nZW5lcmljX2V2ZW50cyksCisJLmdlbmVyaWNfZXZlbnRzCQk9IGU1MDBfZ2VuZXJpY19ldmVudHMsCisJLmNhY2hlX2V2ZW50cwkJPSAmZTUwMF9jYWNoZV9ldmVudHMsCit9OworCitzdGF0aWMgaW50IGluaXRfZTUwMF9wbXUodm9pZCkKK3sKKwlpZiAoIWN1cl9jcHVfc3BlYy0+b3Byb2ZpbGVfY3B1X3R5cGUpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFzdHJjbXAoY3VyX2NwdV9zcGVjLT5vcHJvZmlsZV9jcHVfdHlwZSwgInBwYy9lNTAwbWMiKSkKKwkJbnVtX2V2ZW50cyA9IDI1NjsKKwllbHNlIGlmIChzdHJjbXAoY3VyX2NwdV9zcGVjLT5vcHJvZmlsZV9jcHVfdHlwZSwgInBwYy9lNTAwIikpCisJCXJldHVybiAtRU5PREVWOworCisJcmV0dXJuIHJlZ2lzdGVyX2ZzbF9lbWJfcG11KCZlNTAwX3BtdSk7Cit9CisKK2FyY2hfaW5pdGNhbGwoaW5pdF9lNTAwX3BtdSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfNjQuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCmluZGV4IDkyNTgwNzQuLmJlZDlhMjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TCkBAIC0yMTksNyArMjE5LDggQEAKIAkgKiBwaHlzaWNhbCBjcHUgaWQgaW4gcjI0LCB3ZSBuZWVkIHRvIHNlYXJjaCB0aGUgcGFjYXMgdG8gZmluZAogCSAqIHdoaWNoIGxvZ2ljYWwgaWQgbWFwcyB0byBvdXIgcGh5c2ljYWwgb25lLgogCSAqLwotCUxPQURfUkVHX0FERFIocjEzLCBwYWNhKQkvKiBHZXQgYmFzZSB2YWRkciBvZiBwYWNhIGFycmF5CSAqLworCUxPQURfUkVHX0FERFIocjEzLCBwYWNhKQkvKiBMb2FkIHBhY2EgcG9pbnRlcgkJICovCisJbGQJcjEzLDAocjEzKQkJLyogR2V0IGJhc2UgdmFkZHIgb2YgcGFjYSBhcnJheQkgKi8KIAlsaQlyNSwwCQkJLyogbG9naWNhbCBjcHUgaWQgICAgICAgICAgICAgICAgKi8KIDE6CWxoeglyNixQQUNBSFdDUFVJRChyMTMpCS8qIExvYWQgSFcgcHJvY2lkIGZyb20gcGFjYSAgICAgICovCiAJY21wdwlyNixyMjQJCQkvKiBDb21wYXJlIHRvIG91ciBpZCAgICAgICAgICAgICAqLwpAQCAtNTM2LDcgKzUzNyw4IEBACiAJbXRtc3JkCXIzCQkJLyogUkkgb24gKi8KIAogCS8qIFNldCB1cCBhIHBhY2EgdmFsdWUgZm9yIHRoaXMgcHJvY2Vzc29yLiAqLwotCUxPQURfUkVHX0FERFIocjQscGFjYSkJCS8qIEdldCBiYXNlIHZhZGRyIG9mIHBhY2EgYXJyYXkJKi8KKwlMT0FEX1JFR19BRERSKHI0LHBhY2EpCQkvKiBMb2FkIHBhY2EgcG9pbnRlcgkJKi8KKwlsZAlyNCwwKHI0KQkJLyogR2V0IGJhc2UgdmFkZHIgb2YgcGFjYSBhcnJheQkqLwogCW11bGxpCXIxMyxyMjQsUEFDQV9TSVpFCS8qIENhbGN1bGF0ZSB2YWRkciBvZiByaWdodCBwYWNhICovCiAJYWRkCXIxMyxyMTMscjQJCS8qIGZvciB0aGlzIHByb2Nlc3Nvci4JCSovCiAJbXRzcHIJU1BSTl9TUFJHX1BBQ0EscjEzCS8qIFNhdmUgdmFkZHIgb2YgcGFjYSBpbiBhbiBTUFJHKi8KQEAgLTYxNSw2ICs2MTcsMTcgQEAKIAlzdGQJcjMsMChyMSkJCS8qIFplcm8gdGhlIHN0YWNrIGZyYW1lIHBvaW50ZXIJKi8KIAlibAkuc3RhcnRfc2Vjb25kYXJ5CiAJYgkuCisvKgorICogUmVzZXQgc3RhY2sgcG9pbnRlciBhbmQgY2FsbCBzdGFydF9zZWNvbmRhcnkKKyAqIHRvIGNvbnRpbnVlIHdpdGggb25saW5lIG9wZXJhdGlvbiB3aGVuIHdva2VuIHVwCisgKiBmcm9tIGNlZGUgaW4gY3B1IG9mZmxpbmUuCisgKi8KK19HTE9CQUwoc3RhcnRfc2Vjb25kYXJ5X3Jlc3VtZSkKKwlsZAlyMSxQQUNBS1NBVkUocjEzKQkvKiBSZWxvYWQga2VybmVsIHN0YWNrIHBvaW50ZXIgKi8KKwlsaQlyMywwCisJc3RkCXIzLDAocjEpCQkvKiBaZXJvIHRoZSBzdGFjayBmcmFtZSBwb2ludGVyCSovCisJYmwJLnN0YXJ0X3NlY29uZGFyeQorCWIJLgogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2xlZ2FjeV9zZXJpYWwuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbGVnYWN5X3NlcmlhbC5jCmluZGV4IDlkZGZhZWYuLjAzNWFkYTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvbGVnYWN5X3NlcmlhbC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbGVnYWN5X3NlcmlhbC5jCkBAIC00NjksNyArNDY5LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAkvKgotCSAqIEJlZm9yZSB3ZSByZWdpc3RlciB0aGUgcGxhdGZyb20gc2VyaWFsIGRldmljZXMsIHdlIG5lZWQKKwkgKiBCZWZvcmUgd2UgcmVnaXN0ZXIgdGhlIHBsYXRmb3JtIHNlcmlhbCBkZXZpY2VzLCB3ZSBuZWVkCiAJICogdG8gZml4dXAgdGhlaXIgaW50ZXJydXB0cyBhbmQgdGhlaXIgSU8gcG9ydHMuCiAJICovCiAJREJHKCJGaXhpbmcgc2VyaWFsIHBvcnRzIGludGVycnVwdHMgYW5kIElPIHBvcnRzIC4uLlxuIik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BhY2EuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jCmluZGV4IGQxNmIxZWEuLjBjNDBjNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGFjYS5jCkBAIC05LDExICs5LDE1IEBACiAKICNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbG1iLmg+CiAKKyNpbmNsdWRlIDxhc20vZmlybXdhcmUuaD4KICNpbmNsdWRlIDxhc20vbHBwYWNhLmg+CiAjaW5jbHVkZSA8YXNtL3BhY2EuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9pc2VyaWVzL2xwYXJfbWFwLmg+CisjaW5jbHVkZSA8YXNtL2lzZXJpZXMvaHZfdHlwZXMuaD4KIAogLyogVGhpcyBzeW1ib2wgaXMgcHJvdmlkZWQgYnkgdGhlIGxpbmtlciAtIGxldCBpdCBmaWxsIGluIHRoZSBwYWNhCiAgKiBmaWVsZCBjb3JyZWN0bHkgKi8KQEAgLTcwLDM3ICs3NCw4MiBAQAogICogcHJvY2Vzc29ycy4gIFRoZSBwcm9jZXNzb3IgVlBEIGFycmF5IG5lZWRzIG9uZSBlbnRyeSBwZXIgcGh5c2ljYWwKICAqIHByb2Nlc3NvciAobm90IHRocmVhZCkuCiAgKi8KLXN0cnVjdCBwYWNhX3N0cnVjdCBwYWNhW05SX0NQVVNdOworc3RydWN0IHBhY2Ffc3RydWN0ICpwYWNhOwogRVhQT1JUX1NZTUJPTChwYWNhKTsKIAotdm9pZCBfX2luaXQgaW5pdGlhbGlzZV9wYWNhcyh2b2lkKQotewotCWludCBjcHU7CitzdHJ1Y3QgcGFjYV9zdHJ1Y3QgYm9vdF9wYWNhOwogCi0JLyogVGhlIFRPQyByZWdpc3RlciAoR1BSMikgcG9pbnRzIDMya0IgaW50byB0aGUgVE9DLCBzbyB0aGF0IDY0a0IKLQkgKiBvZiB0aGUgVE9DIGNhbiBiZSBhZGRyZXNzZWQgdXNpbmcgYSBzaW5nbGUgbWFjaGluZSBpbnN0cnVjdGlvbi4KLQkgKi8KK3ZvaWQgX19pbml0IGluaXRpYWxpc2VfcGFjYShzdHJ1Y3QgcGFjYV9zdHJ1Y3QgKm5ld19wYWNhLCBpbnQgY3B1KQoreworICAgICAgIC8qIFRoZSBUT0MgcmVnaXN0ZXIgKEdQUjIpIHBvaW50cyAzMmtCIGludG8gdGhlIFRPQywgc28gdGhhdCA2NGtCCisJKiBvZiB0aGUgVE9DIGNhbiBiZSBhZGRyZXNzZWQgdXNpbmcgYSBzaW5nbGUgbWFjaGluZSBpbnN0cnVjdGlvbi4KKwkqLwogCXVuc2lnbmVkIGxvbmcga2VybmVsX3RvYyA9ICh1bnNpZ25lZCBsb25nKSgmX190b2Nfc3RhcnQpICsgMHg4MDAwVUw7CiAKLQkvKiBDYW4ndCB1c2UgZm9yX2VhY2hfKl9jcHUsIGFzIHRoZXkgYXJlbid0IGZ1bmN0aW9uYWwgeWV0ICovCi0JZm9yIChjcHUgPSAwOyBjcHUgPCBOUl9DUFVTOyBjcHUrKykgewotCQlzdHJ1Y3QgcGFjYV9zdHJ1Y3QgKm5ld19wYWNhID0gJnBhY2FbY3B1XTsKLQogI2lmZGVmIENPTkZJR19QUENfQk9PSzNTCi0JCW5ld19wYWNhLT5scHBhY2FfcHRyID0gJmxwcGFjYVtjcHVdOworCW5ld19wYWNhLT5scHBhY2FfcHRyID0gJmxwcGFjYVtjcHVdOwogI2Vsc2UKLQkJbmV3X3BhY2EtPmtlcm5lbF9wZ2QgPSBzd2FwcGVyX3BnX2RpcjsKKwluZXdfcGFjYS0+a2VybmVsX3BnZCA9IHN3YXBwZXJfcGdfZGlyOwogI2VuZGlmCi0JCW5ld19wYWNhLT5sb2NrX3Rva2VuID0gMHg4MDAwOwotCQluZXdfcGFjYS0+cGFjYV9pbmRleCA9IGNwdTsKLQkJbmV3X3BhY2EtPmtlcm5lbF90b2MgPSBrZXJuZWxfdG9jOwotCQluZXdfcGFjYS0+a2VybmVsYmFzZSA9ICh1bnNpZ25lZCBsb25nKSBfc3RleHQ7Ci0JCW5ld19wYWNhLT5rZXJuZWxfbXNyID0gTVNSX0tFUk5FTDsKLQkJbmV3X3BhY2EtPmh3X2NwdV9pZCA9IDB4ZmZmZjsKLQkJbmV3X3BhY2EtPl9fY3VycmVudCA9ICZpbml0X3Rhc2s7CisJbmV3X3BhY2EtPmxvY2tfdG9rZW4gPSAweDgwMDA7CisJbmV3X3BhY2EtPnBhY2FfaW5kZXggPSBjcHU7CisJbmV3X3BhY2EtPmtlcm5lbF90b2MgPSBrZXJuZWxfdG9jOworCW5ld19wYWNhLT5rZXJuZWxiYXNlID0gKHVuc2lnbmVkIGxvbmcpIF9zdGV4dDsKKwluZXdfcGFjYS0+a2VybmVsX21zciA9IE1TUl9LRVJORUw7CisJbmV3X3BhY2EtPmh3X2NwdV9pZCA9IDB4ZmZmZjsKKwluZXdfcGFjYS0+X19jdXJyZW50ID0gJmluaXRfdGFzazsKICNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVVfNjQKLQkJbmV3X3BhY2EtPnNsYl9zaGFkb3dfcHRyID0gJnNsYl9zaGFkb3dbY3B1XTsKKwluZXdfcGFjYS0+c2xiX3NoYWRvd19wdHIgPSAmc2xiX3NoYWRvd1tjcHVdOwogI2VuZGlmIC8qIENPTkZJR19QUENfU1REX01NVV82NCAqLworfQogCi0JfQorc3RhdGljIGludCBfX2luaXRkYXRhIHBhY2Ffc2l6ZTsKKwordm9pZCBfX2luaXQgYWxsb2NhdGVfcGFjYXModm9pZCkKK3sKKwlpbnQgbnJfY3B1cywgY3B1LCBsaW1pdDsKKworCS8qCisJICogV2UgY2FuJ3QgdGFrZSBTTEIgbWlzc2VzIG9uIHRoZSBwYWNhLCBhbmQgd2Ugd2FudCB0byBhY2Nlc3MgdGhlbQorCSAqIGluIHJlYWwgbW9kZSwgc28gYWxsb2NhdGUgdGhlbSB3aXRoaW4gdGhlIFJNQSBhbmQgYWxzbyB3aXRoaW4KKwkgKiB0aGUgZmlyc3Qgc2VnbWVudC4gT24gaVNlcmllcyB0aGV5IG11c3QgYmUgd2l0aGluIHRoZSBhcmVhIG1hcHBlZAorCSAqIGJ5IHRoZSBIViwgd2hpY2ggaXMgSHZQYWdlc1RvTWFwICogSFZQQUdFU0laRSBieXRlcy4KKwkgKi8KKwlsaW1pdCA9IG1pbigweDEwMDAwMDAwVUxMLCBsbWIucm1vX3NpemUpOworCWlmIChmaXJtd2FyZV9oYXNfZmVhdHVyZShGV19GRUFUVVJFX0lTRVJJRVMpKQorCQlsaW1pdCA9IG1pbihsaW1pdCwgSHZQYWdlc1RvTWFwICogSFZQQUdFU0laRSk7CisKKwlucl9jcHVzID0gTlJfQ1BVUzsKKwkvKiBPbiBpU2VyaWVzIHdlIGtub3cgd2UgY2FuIG5ldmVyIGhhdmUgbW9yZSB0aGFuIDY0IGNwdXMgKi8KKwlpZiAoZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkKKwkJbnJfY3B1cyA9IG1pbig2NCwgbnJfY3B1cyk7CisKKwlwYWNhX3NpemUgPSBQQUdFX0FMSUdOKHNpemVvZihzdHJ1Y3QgcGFjYV9zdHJ1Y3QpICogbnJfY3B1cyk7CisKKwlwYWNhID0gX192YShsbWJfYWxsb2NfYmFzZShwYWNhX3NpemUsIFBBR0VfU0laRSwgbGltaXQpKTsKKwltZW1zZXQocGFjYSwgMCwgcGFjYV9zaXplKTsKKworCXByaW50ayhLRVJOX0RFQlVHICJBbGxvY2F0ZWQgJXUgYnl0ZXMgZm9yICVkIHBhY2FzIGF0ICVwXG4iLAorCQlwYWNhX3NpemUsIG5yX2NwdXMsIHBhY2EpOworCisJLyogQ2FuJ3QgdXNlIGZvcl9lYWNoXypfY3B1LCBhcyB0aGV5IGFyZW4ndCBmdW5jdGlvbmFsIHlldCAqLworCWZvciAoY3B1ID0gMDsgY3B1IDwgbnJfY3B1czsgY3B1KyspCisJCWluaXRpYWxpc2VfcGFjYSgmcGFjYVtjcHVdLCBjcHUpOworfQorCit2b2lkIF9faW5pdCBmcmVlX3VudXNlZF9wYWNhcyh2b2lkKQoreworCWludCBuZXdfc2l6ZTsKKworCW5ld19zaXplID0gUEFHRV9BTElHTihzaXplb2Yoc3RydWN0IHBhY2Ffc3RydWN0KSAqIG51bV9wb3NzaWJsZV9jcHVzKCkpOworCisJaWYgKG5ld19zaXplID49IHBhY2Ffc2l6ZSkKKwkJcmV0dXJuOworCisJbG1iX2ZyZWUoX19wYShwYWNhKSArIG5ld19zaXplLCBwYWNhX3NpemUgLSBuZXdfc2l6ZSk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiRnJlZWQgJXUgYnl0ZXMgZm9yIHVudXNlZCBwYWNhc1xuIiwKKwkJcGFjYV9zaXplIC0gbmV3X3NpemUpOworCisJcGFjYV9zaXplID0gbmV3X3NpemU7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCmluZGV4IDI1OTdmOTUuLmYzYzQyY2U1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYwpAQCAtNjMsMjEgKzYzLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woZ2V0X3BjaV9kbWFfb3BzKTsKIAotaW50IHBjaV9zZXRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IG1hc2spCi17Ci0JcmV0dXJuIGRtYV9zZXRfbWFzaygmZGV2LT5kZXYsIG1hc2spOwotfQotCi1pbnQgcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU2NCBtYXNrKQotewotCWludCByYzsKLQotCXJjID0gZG1hX3NldF9tYXNrKCZkZXYtPmRldiwgbWFzayk7Ci0JZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgPSBkZXYtPmRtYV9tYXNrOwotCi0JcmV0dXJuIHJjOwotfQotCiBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBjaWJpb3NfYWxsb2NfY29udHJvbGxlcihzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldikKIHsKIAlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKnBoYjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGVyZl9ldmVudF9mc2xfZW1iLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnRfZnNsX2VtYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2OTg3MmYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BlcmZfZXZlbnRfZnNsX2VtYi5jCkBAIC0wLDAgKzEsNjU0IEBACisvKgorICogUGVyZm9ybWFuY2UgZXZlbnQgc3VwcG9ydCAtIEZyZWVzY2FsZSBFbWJlZGRlZCBQZXJmb3JtYW5jZSBNb25pdG9yCisgKgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBQYXVsIE1hY2tlcnJhcywgSUJNIENvcnBvcmF0aW9uLgorICogQ29weXJpZ2h0IDIwMTAgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJmX2V2ZW50Lmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGFzbS9yZWdfZnNsX2VtYi5oPgorI2luY2x1ZGUgPGFzbS9wbWMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworc3RydWN0IGNwdV9od19ldmVudHMgeworCWludCBuX2V2ZW50czsKKwlpbnQgZGlzYWJsZWQ7CisJdTggIHBtY3NfZW5hYmxlZDsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnRbTUFYX0hXRVZFTlRTXTsKK307CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdV9od19ldmVudHMsIGNwdV9od19ldmVudHMpOworCitzdGF0aWMgc3RydWN0IGZzbF9lbWJfcG11ICpwcG11OworCisvKiBOdW1iZXIgb2YgcGVyZl9ldmVudHMgY291bnRpbmcgaGFyZHdhcmUgZXZlbnRzICovCitzdGF0aWMgYXRvbWljX3QgbnVtX2V2ZW50czsKKy8qIFVzZWQgdG8gYXZvaWQgcmFjZXMgaW4gY2FsbGluZyByZXNlcnZlL3JlbGVhc2VfcG1jX2hhcmR3YXJlICovCitzdGF0aWMgREVGSU5FX01VVEVYKHBtY19yZXNlcnZlX211dGV4KTsKKworLyoKKyAqIElmIGludGVycnVwdHMgd2VyZSBzb2Z0LWRpc2FibGVkIHdoZW4gYSBQTVUgaW50ZXJydXB0IG9jY3VycywgdHJlYXQKKyAqIGl0IGFzIGFuIE5NSS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcGVyZl9pbnRyX2lzX25taShzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKyNpZmRlZiBfX3Bvd2VycGM2NF9fCisJcmV0dXJuICFyZWdzLT5zb2Z0ZTsKKyNlbHNlCisJcmV0dXJuIDA7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgcGVyZl9ldmVudF9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworCisvKgorICogUmVhZCBvbmUgcGVyZm9ybWFuY2UgbW9uaXRvciBjb3VudGVyIChQTUMpLgorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyByZWFkX3BtYyhpbnQgaWR4KQoreworCXVuc2lnbmVkIGxvbmcgdmFsOworCisJc3dpdGNoIChpZHgpIHsKKwljYXNlIDA6CisJCXZhbCA9IG1mcG1yKFBNUk5fUE1DMCk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJdmFsID0gbWZwbXIoUE1STl9QTUMxKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQl2YWwgPSBtZnBtcihQTVJOX1BNQzIpOworCQlicmVhazsKKwljYXNlIDM6CisJCXZhbCA9IG1mcG1yKFBNUk5fUE1DMyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAib29wcyB0cnlpbmcgdG8gcmVhZCBQTUMlZFxuIiwgaWR4KTsKKwkJdmFsID0gMDsKKwl9CisJcmV0dXJuIHZhbDsKK30KKworLyoKKyAqIFdyaXRlIG9uZSBQTUMuCisgKi8KK3N0YXRpYyB2b2lkIHdyaXRlX3BtYyhpbnQgaWR4LCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlzd2l0Y2ggKGlkeCkgeworCWNhc2UgMDoKKwkJbXRwbXIoUE1STl9QTUMwLCB2YWwpOworCQlicmVhazsKKwljYXNlIDE6CisJCW10cG1yKFBNUk5fUE1DMSwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQltdHBtcihQTVJOX1BNQzIsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJbXRwbXIoUE1STl9QTUMzLCB2YWwpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9FUlIgIm9vcHMgdHJ5aW5nIHRvIHdyaXRlIFBNQyVkXG4iLCBpZHgpOworCX0KKworCWlzeW5jKCk7Cit9CisKKy8qCisgKiBXcml0ZSBvbmUgbG9jYWwgY29udHJvbCBBIHJlZ2lzdGVyCisgKi8KK3N0YXRpYyB2b2lkIHdyaXRlX3BtbGNhKGludCBpZHgsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXN3aXRjaCAoaWR4KSB7CisJY2FzZSAwOgorCQltdHBtcihQTVJOX1BNTENBMCwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQltdHBtcihQTVJOX1BNTENBMSwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQltdHBtcihQTVJOX1BNTENBMiwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQltdHBtcihQTVJOX1BNTENBMywgdmFsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJvb3BzIHRyeWluZyB0byB3cml0ZSBQTUxDQSVkXG4iLCBpZHgpOworCX0KKworCWlzeW5jKCk7Cit9CisKKy8qCisgKiBXcml0ZSBvbmUgbG9jYWwgY29udHJvbCBCIHJlZ2lzdGVyCisgKi8KK3N0YXRpYyB2b2lkIHdyaXRlX3BtbGNiKGludCBpZHgsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCXN3aXRjaCAoaWR4KSB7CisJY2FzZSAwOgorCQltdHBtcihQTVJOX1BNTENCMCwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQltdHBtcihQTVJOX1BNTENCMSwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQltdHBtcihQTVJOX1BNTENCMiwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQltdHBtcihQTVJOX1BNTENCMywgdmFsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJvb3BzIHRyeWluZyB0byB3cml0ZSBQTUxDQiVkXG4iLCBpZHgpOworCX0KKworCWlzeW5jKCk7Cit9CisKK3N0YXRpYyB2b2lkIGZzbF9lbWJfcG11X3JlYWQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXM2NCB2YWwsIGRlbHRhLCBwcmV2OworCisJLyoKKwkgKiBQZXJmb3JtYW5jZSBtb25pdG9yIGludGVycnVwdHMgY29tZSBldmVuIHdoZW4gaW50ZXJydXB0cworCSAqIGFyZSBzb2Z0LWRpc2FibGVkLCBhcyBsb25nIGFzIGludGVycnVwdHMgYXJlIGhhcmQtZW5hYmxlZC4KKwkgKiBUaGVyZWZvcmUgd2UgdHJlYXQgdGhlbSBsaWtlIE5NSXMuCisJICovCisJZG8geworCQlwcmV2ID0gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmh3LnByZXZfY291bnQpOworCQliYXJyaWVyKCk7CisJCXZhbCA9IHJlYWRfcG1jKGV2ZW50LT5ody5pZHgpOworCX0gd2hpbGUgKGF0b21pYzY0X2NtcHhjaGcoJmV2ZW50LT5ody5wcmV2X2NvdW50LCBwcmV2LCB2YWwpICE9IHByZXYpOworCisJLyogVGhlIGNvdW50ZXJzIGFyZSBvbmx5IDMyIGJpdHMgd2lkZSAqLworCWRlbHRhID0gKHZhbCAtIHByZXYpICYgMHhmZmZmZmZmZnVsOworCWF0b21pYzY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CisJYXRvbWljNjRfc3ViKGRlbHRhLCAmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0KTsKK30KKworLyoKKyAqIERpc2FibGUgYWxsIGV2ZW50cyB0byBwcmV2ZW50IFBNVSBpbnRlcnJ1cHRzIGFuZCB0byBhbGxvdworICogZXZlbnRzIHRvIGJlIGFkZGVkIG9yIHJlbW92ZWQuCisgKi8KK3ZvaWQgaHdfcGVyZl9kaXNhYmxlKHZvaWQpCit7CisJc3RydWN0IGNwdV9od19ldmVudHMgKmNwdWh3OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJY3B1aHcgPSAmX19nZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKworCWlmICghY3B1aHctPmRpc2FibGVkKSB7CisJCWNwdWh3LT5kaXNhYmxlZCA9IDE7CisKKwkJLyoKKwkJICogQ2hlY2sgaWYgd2UgZXZlciBlbmFibGVkIHRoZSBQTVUgb24gdGhpcyBjcHUuCisJCSAqLworCQlpZiAoIWNwdWh3LT5wbWNzX2VuYWJsZWQpIHsKKwkJCXBwY19lbmFibGVfcG1jcygpOworCQkJY3B1aHctPnBtY3NfZW5hYmxlZCA9IDE7CisJCX0KKworCQlpZiAoYXRvbWljX3JlYWQoJm51bV9ldmVudHMpKSB7CisJCQkvKgorCQkJICogU2V0IHRoZSAnZnJlZXplIGFsbCBjb3VudGVycycgYml0LCBhbmQgZGlzYWJsZQorCQkJICogaW50ZXJydXB0cy4gIFRoZSBiYXJyaWVyIGlzIHRvIG1ha2Ugc3VyZSB0aGUKKwkJCSAqIG10cG1yIGhhcyBiZWVuIGV4ZWN1dGVkIGFuZCB0aGUgUE1VIGhhcyBmcm96ZW4KKwkJCSAqIHRoZSBldmVudHMgYmVmb3JlIHdlIHJldHVybi4KKwkJCSAqLworCisJCQltdHBtcihQTVJOX1BNR0MwLCBQTUdDMF9GQUMpOworCQkJaXN5bmMoKTsKKwkJfQorCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKy8qCisgKiBSZS1lbmFibGUgYWxsIGV2ZW50cyBpZiBkaXNhYmxlID09IDAuCisgKiBJZiB3ZSB3ZXJlIHByZXZpb3VzbHkgZGlzYWJsZWQgYW5kIGV2ZW50cyB3ZXJlIGFkZGVkLCB0aGVuCisgKiBwdXQgdGhlIG5ldyBjb25maWcgb24gdGhlIFBNVS4KKyAqLwordm9pZCBod19wZXJmX2VuYWJsZSh2b2lkKQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWNwdWh3ID0gJl9fZ2V0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7CisJaWYgKCFjcHVody0+ZGlzYWJsZWQpCisJCWdvdG8gb3V0OworCisJY3B1aHctPmRpc2FibGVkID0gMDsKKwlwcGNfc2V0X3BtdV9pbnVzZShjcHVody0+bl9ldmVudHMgIT0gMCk7CisKKwlpZiAoY3B1aHctPm5fZXZlbnRzID4gMCkgeworCQltdHBtcihQTVJOX1BNR0MwLCBQTUdDMF9QTUlFIHwgUE1HQzBfRkNFQ0UpOworCQlpc3luYygpOworCX0KKworIG91dDoKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3N0YXRpYyBpbnQgY29sbGVjdF9ldmVudHMoc3RydWN0IHBlcmZfZXZlbnQgKmdyb3VwLCBpbnQgbWF4X2NvdW50LAorCQkJICBzdHJ1Y3QgcGVyZl9ldmVudCAqY3Ryc1tdKQoreworCWludCBuID0gMDsKKwlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQ7CisKKwlpZiAoIWlzX3NvZnR3YXJlX2V2ZW50KGdyb3VwKSkgeworCQlpZiAobiA+PSBtYXhfY291bnQpCisJCQlyZXR1cm4gLTE7CisJCWN0cnNbbl0gPSBncm91cDsKKwkJbisrOworCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmZ3JvdXAtPnNpYmxpbmdfbGlzdCwgZ3JvdXBfZW50cnkpIHsKKwkJaWYgKCFpc19zb2Z0d2FyZV9ldmVudChldmVudCkgJiYKKwkJICAgIGV2ZW50LT5zdGF0ZSAhPSBQRVJGX0VWRU5UX1NUQVRFX09GRikgeworCQkJaWYgKG4gPj0gbWF4X2NvdW50KQorCQkJCXJldHVybiAtMTsKKwkJCWN0cnNbbl0gPSBldmVudDsKKwkJCW4rKzsKKwkJfQorCX0KKwlyZXR1cm4gbjsKK30KKworLyogcGVyZiBtdXN0IGJlIGRpc2FibGVkLCBjb250ZXh0IGxvY2tlZCBvbiBlbnRyeSAqLworc3RhdGljIGludCBmc2xfZW1iX3BtdV9lbmFibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodzsKKwlpbnQgcmV0ID0gLUVBR0FJTjsKKwlpbnQgbnVtX2NvdW50ZXJzID0gcHBtdS0+bl9jb3VudGVyOworCXU2NCB2YWw7CisJaW50IGk7CisKKwljcHVodyA9ICZnZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKworCWlmIChldmVudC0+aHcuY29uZmlnICYgRlNMX0VNQl9FVkVOVF9SRVNUUklDVEVEKQorCQludW1fY291bnRlcnMgPSBwcG11LT5uX3Jlc3RyaWN0ZWQ7CisKKwkvKgorCSAqIEFsbG9jYXRlIGNvdW50ZXJzIGZyb20gdG9wLWRvd24sIHNvIHRoYXQgcmVzdHJpY3RlZC1jYXBhYmxlCisJICogY291bnRlcnMgYXJlIGtlcHQgZnJlZSBhcyBsb25nIGFzIHBvc3NpYmxlLgorCSAqLworCWZvciAoaSA9IG51bV9jb3VudGVycyAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChjcHVody0+ZXZlbnRbaV0pCisJCQljb250aW51ZTsKKworCQlicmVhazsKKwl9CisKKwlpZiAoaSA8IDApCisJCWdvdG8gb3V0OworCisJZXZlbnQtPmh3LmlkeCA9IGk7CisJY3B1aHctPmV2ZW50W2ldID0gZXZlbnQ7CisJKytjcHVody0+bl9ldmVudHM7CisKKwl2YWwgPSAwOworCWlmIChldmVudC0+aHcuc2FtcGxlX3BlcmlvZCkgeworCQlzNjQgbGVmdCA9IGF0b21pYzY0X3JlYWQoJmV2ZW50LT5ody5wZXJpb2RfbGVmdCk7CisJCWlmIChsZWZ0IDwgMHg4MDAwMDAwMEwpCisJCQl2YWwgPSAweDgwMDAwMDAwTCAtIGxlZnQ7CisJfQorCWF0b21pYzY0X3NldCgmZXZlbnQtPmh3LnByZXZfY291bnQsIHZhbCk7CisJd3JpdGVfcG1jKGksIHZhbCk7CisJcGVyZl9ldmVudF91cGRhdGVfdXNlcnBhZ2UoZXZlbnQpOworCisJd3JpdGVfcG1sY2IoaSwgZXZlbnQtPmh3LmNvbmZpZyA+PiAzMik7CisJd3JpdGVfcG1sY2EoaSwgZXZlbnQtPmh3LmNvbmZpZ19iYXNlKTsKKworCXJldCA9IDA7Cisgb3V0OgorCXB1dF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXJldHVybiByZXQ7Cit9CisKKy8qIHBlcmYgbXVzdCBiZSBkaXNhYmxlZCwgY29udGV4dCBsb2NrZWQgb24gZW50cnkgKi8KK3N0YXRpYyB2b2lkIGZzbF9lbWJfcG11X2Rpc2FibGUoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodzsKKwlpbnQgaSA9IGV2ZW50LT5ody5pZHg7CisKKwlpZiAoaSA8IDApCisJCWdvdG8gb3V0OworCisJZnNsX2VtYl9wbXVfcmVhZChldmVudCk7CisKKwljcHVodyA9ICZnZXRfY3B1X3ZhcihjcHVfaHdfZXZlbnRzKTsKKworCVdBUk5fT04oZXZlbnQgIT0gY3B1aHctPmV2ZW50W2V2ZW50LT5ody5pZHhdKTsKKworCXdyaXRlX3BtbGNhKGksIDApOworCXdyaXRlX3BtbGNiKGksIDApOworCXdyaXRlX3BtYyhpLCAwKTsKKworCWNwdWh3LT5ldmVudFtpXSA9IE5VTEw7CisJZXZlbnQtPmh3LmlkeCA9IC0xOworCisJLyoKKwkgKiBUT0RPOiBpZiBhdCBsZWFzdCBvbmUgcmVzdHJpY3RlZCBldmVudCBleGlzdHMsIGFuZCB3ZQorCSAqIGp1c3QgZnJlZWQgdXAgYSBub24tcmVzdHJpY3RlZC1jYXBhYmxlIGNvdW50ZXIsIGFuZAorCSAqIHRoZXJlIGlzIGEgcmVzdHJpY3RlZC1jYXBhYmxlIGNvdW50ZXIgb2NjdXBpZWQgYnkKKwkgKiBhIG5vbi1yZXN0cmljdGVkIGV2ZW50LCBtaWdyYXRlIHRoYXQgZXZlbnQgdG8gdGhlCisJICogdmFjYXRlZCBjb3VudGVyLgorCSAqLworCisJY3B1aHctPm5fZXZlbnRzLS07CisKKyBvdXQ6CisJcHV0X2NwdV92YXIoY3B1X2h3X2V2ZW50cyk7Cit9CisKKy8qCisgKiBSZS1lbmFibGUgaW50ZXJydXB0cyBvbiBhIGV2ZW50IGFmdGVyIHRoZXkgd2VyZSB0aHJvdHRsZWQKKyAqIGJlY2F1c2UgdGhleSB3ZXJlIGNvbWluZyB0b28gZmFzdC4KKyAqCisgKiBDb250ZXh0IGlzIGxvY2tlZCBvbiBlbnRyeSwgYnV0IHBlcmYgaXMgbm90IGRpc2FibGVkLgorICovCitzdGF0aWMgdm9pZCBmc2xfZW1iX3BtdV91bnRocm90dGxlKHN0cnVjdCBwZXJmX2V2ZW50ICpldmVudCkKK3sKKwlzNjQgdmFsLCBsZWZ0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZXZlbnQtPmh3LmlkeCA8IDAgfHwgIWV2ZW50LT5ody5zYW1wbGVfcGVyaW9kKQorCQlyZXR1cm47CisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXBlcmZfZGlzYWJsZSgpOworCWZzbF9lbWJfcG11X3JlYWQoZXZlbnQpOworCWxlZnQgPSBldmVudC0+aHcuc2FtcGxlX3BlcmlvZDsKKwlldmVudC0+aHcubGFzdF9wZXJpb2QgPSBsZWZ0OworCXZhbCA9IDA7CisJaWYgKGxlZnQgPCAweDgwMDAwMDAwTCkKKwkJdmFsID0gMHg4MDAwMDAwMEwgLSBsZWZ0OworCXdyaXRlX3BtYyhldmVudC0+aHcuaWR4LCB2YWwpOworCWF0b21pYzY0X3NldCgmZXZlbnQtPmh3LnByZXZfY291bnQsIHZhbCk7CisJYXRvbWljNjRfc2V0KCZldmVudC0+aHcucGVyaW9kX2xlZnQsIGxlZnQpOworCXBlcmZfZXZlbnRfdXBkYXRlX3VzZXJwYWdlKGV2ZW50KTsKKwlwZXJmX2VuYWJsZSgpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBwbXUgZnNsX2VtYl9wbXUgPSB7CisJLmVuYWJsZQkJPSBmc2xfZW1iX3BtdV9lbmFibGUsCisJLmRpc2FibGUJPSBmc2xfZW1iX3BtdV9kaXNhYmxlLAorCS5yZWFkCQk9IGZzbF9lbWJfcG11X3JlYWQsCisJLnVudGhyb3R0bGUJPSBmc2xfZW1iX3BtdV91bnRocm90dGxlLAorfTsKKworLyoKKyAqIFJlbGVhc2UgdGhlIFBNVSBpZiB0aGlzIGlzIHRoZSBsYXN0IHBlcmZfZXZlbnQuCisgKi8KK3N0YXRpYyB2b2lkIGh3X3BlcmZfZXZlbnRfZGVzdHJveShzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJaWYgKCFhdG9taWNfYWRkX3VubGVzcygmbnVtX2V2ZW50cywgLTEsIDEpKSB7CisJCW11dGV4X2xvY2soJnBtY19yZXNlcnZlX211dGV4KTsKKwkJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZudW1fZXZlbnRzKSA9PSAwKQorCQkJcmVsZWFzZV9wbWNfaGFyZHdhcmUoKTsKKwkJbXV0ZXhfdW5sb2NrKCZwbWNfcmVzZXJ2ZV9tdXRleCk7CisJfQorfQorCisvKgorICogVHJhbnNsYXRlIGEgZ2VuZXJpYyBjYWNoZSBldmVudF9pZCBjb25maWcgdG8gYSByYXcgZXZlbnRfaWQgY29kZS4KKyAqLworc3RhdGljIGludCBod19wZXJmX2NhY2hlX2V2ZW50KHU2NCBjb25maWcsIHU2NCAqZXZlbnRwKQoreworCXVuc2lnbmVkIGxvbmcgdHlwZSwgb3AsIHJlc3VsdDsKKwlpbnQgZXY7CisKKwlpZiAoIXBwbXUtPmNhY2hlX2V2ZW50cykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiB1bnBhY2sgY29uZmlnICovCisJdHlwZSA9IGNvbmZpZyAmIDB4ZmY7CisJb3AgPSAoY29uZmlnID4+IDgpICYgMHhmZjsKKwlyZXN1bHQgPSAoY29uZmlnID4+IDE2KSAmIDB4ZmY7CisKKwlpZiAodHlwZSA+PSBQRVJGX0NPVU5UX0hXX0NBQ0hFX01BWCB8fAorCSAgICBvcCA+PSBQRVJGX0NPVU5UX0hXX0NBQ0hFX09QX01BWCB8fAorCSAgICByZXN1bHQgPj0gUEVSRl9DT1VOVF9IV19DQUNIRV9SRVNVTFRfTUFYKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWV2ID0gKCpwcG11LT5jYWNoZV9ldmVudHMpW3R5cGVdW29wXVtyZXN1bHRdOworCWlmIChldiA9PSAwKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJaWYgKGV2ID09IC0xKQorCQlyZXR1cm4gLUVJTlZBTDsKKwkqZXZlbnRwID0gZXY7CisJcmV0dXJuIDA7Cit9CisKK2NvbnN0IHN0cnVjdCBwbXUgKmh3X3BlcmZfZXZlbnRfaW5pdChzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpCit7CisJdTY0IGV2OworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudHNbTUFYX0hXRVZFTlRTXTsKKwlpbnQgbjsKKwlpbnQgZXJyOworCWludCBudW1fcmVzdHJpY3RlZDsKKwlpbnQgaTsKKworCXN3aXRjaCAoZXZlbnQtPmF0dHIudHlwZSkgeworCWNhc2UgUEVSRl9UWVBFX0hBUkRXQVJFOgorCQlldiA9IGV2ZW50LT5hdHRyLmNvbmZpZzsKKwkJaWYgKGV2ID49IHBwbXUtPm5fZ2VuZXJpYyB8fCBwcG11LT5nZW5lcmljX2V2ZW50c1tldl0gPT0gMCkKKwkJCXJldHVybiBFUlJfUFRSKC1FT1BOT1RTVVBQKTsKKwkJZXYgPSBwcG11LT5nZW5lcmljX2V2ZW50c1tldl07CisJCWJyZWFrOworCisJY2FzZSBQRVJGX1RZUEVfSFdfQ0FDSEU6CisJCWVyciA9IGh3X3BlcmZfY2FjaGVfZXZlbnQoZXZlbnQtPmF0dHIuY29uZmlnLCAmZXYpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKwkJYnJlYWs7CisKKwljYXNlIFBFUkZfVFlQRV9SQVc6CisJCWV2ID0gZXZlbnQtPmF0dHIuY29uZmlnOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCWV2ZW50LT5ody5jb25maWcgPSBwcG11LT54bGF0ZV9ldmVudChldik7CisJaWYgKCEoZXZlbnQtPmh3LmNvbmZpZyAmIEZTTF9FTUJfRVZFTlRfVkFMSUQpKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCS8qCisJICogSWYgdGhpcyBpcyBpbiBhIGdyb3VwLCBjaGVjayBpZiBpdCBjYW4gZ28gb24gd2l0aCBhbGwgdGhlCisJICogb3RoZXIgaGFyZHdhcmUgZXZlbnRzIGluIHRoZSBncm91cC4gIFdlIGFzc3VtZSB0aGUgZXZlbnQKKwkgKiBoYXNuJ3QgYmVlbiBsaW5rZWQgaW50byBpdHMgbGVhZGVyJ3Mgc2libGluZyBsaXN0IGF0IHRoaXMgcG9pbnQuCisJICovCisJbiA9IDA7CisJaWYgKGV2ZW50LT5ncm91cF9sZWFkZXIgIT0gZXZlbnQpIHsKKwkJbiA9IGNvbGxlY3RfZXZlbnRzKGV2ZW50LT5ncm91cF9sZWFkZXIsCisJCSAgICAgICAgICAgICAgICAgICBwcG11LT5uX2NvdW50ZXIgLSAxLCBldmVudHMpOworCQlpZiAobiA8IDApCisJCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwl9CisKKwlpZiAoZXZlbnQtPmh3LmNvbmZpZyAmIEZTTF9FTUJfRVZFTlRfUkVTVFJJQ1RFRCkgeworCQludW1fcmVzdHJpY3RlZCA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCWlmIChldmVudHNbaV0tPmh3LmNvbmZpZyAmIEZTTF9FTUJfRVZFTlRfUkVTVFJJQ1RFRCkKKwkJCQludW1fcmVzdHJpY3RlZCsrOworCQl9CisKKwkJaWYgKG51bV9yZXN0cmljdGVkID49IHBwbXUtPm5fcmVzdHJpY3RlZCkKKwkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCX0KKworCWV2ZW50LT5ody5pZHggPSAtMTsKKworCWV2ZW50LT5ody5jb25maWdfYmFzZSA9IFBNTENBX0NFIHwgUE1MQ0FfRkNNMSB8CisJICAgICAgICAgICAgICAgICAgICAgICAgKHUzMikoKGV2IDw8IDE2KSAmIFBNTENBX0VWRU5UX01BU0spOworCisJaWYgKGV2ZW50LT5hdHRyLmV4Y2x1ZGVfdXNlcikKKwkJZXZlbnQtPmh3LmNvbmZpZ19iYXNlIHw9IFBNTENBX0ZDVTsKKwlpZiAoZXZlbnQtPmF0dHIuZXhjbHVkZV9rZXJuZWwpCisJCWV2ZW50LT5ody5jb25maWdfYmFzZSB8PSBQTUxDQV9GQ1M7CisJaWYgKGV2ZW50LT5hdHRyLmV4Y2x1ZGVfaWRsZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT1RTVVBQKTsKKworCWV2ZW50LT5ody5sYXN0X3BlcmlvZCA9IGV2ZW50LT5ody5zYW1wbGVfcGVyaW9kOworCWF0b21pYzY0X3NldCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0LCBldmVudC0+aHcubGFzdF9wZXJpb2QpOworCisJLyoKKwkgKiBTZWUgaWYgd2UgbmVlZCB0byByZXNlcnZlIHRoZSBQTVUuCisJICogSWYgbm8gZXZlbnRzIGFyZSBjdXJyZW50bHkgaW4gdXNlLCB0aGVuIHdlIGhhdmUgdG8gdGFrZSBhCisJICogbXV0ZXggdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgcmFjZSB3aXRoIGFub3RoZXIgdGFzayBkb2luZworCSAqIHJlc2VydmVfcG1jX2hhcmR3YXJlIG9yIHJlbGVhc2VfcG1jX2hhcmR3YXJlLgorCSAqLworCWVyciA9IDA7CisJaWYgKCFhdG9taWNfaW5jX25vdF96ZXJvKCZudW1fZXZlbnRzKSkgeworCQltdXRleF9sb2NrKCZwbWNfcmVzZXJ2ZV9tdXRleCk7CisJCWlmIChhdG9taWNfcmVhZCgmbnVtX2V2ZW50cykgPT0gMCAmJgorCQkgICAgcmVzZXJ2ZV9wbWNfaGFyZHdhcmUocGVyZl9ldmVudF9pbnRlcnJ1cHQpKQorCQkJZXJyID0gLUVCVVNZOworCQllbHNlCisJCQlhdG9taWNfaW5jKCZudW1fZXZlbnRzKTsKKwkJbXV0ZXhfdW5sb2NrKCZwbWNfcmVzZXJ2ZV9tdXRleCk7CisKKwkJbXRwbXIoUE1STl9QTUdDMCwgUE1HQzBfRkFDKTsKKwkJaXN5bmMoKTsKKwl9CisJZXZlbnQtPmRlc3Ryb3kgPSBod19wZXJmX2V2ZW50X2Rlc3Ryb3k7CisKKwlpZiAoZXJyKQorCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCXJldHVybiAmZnNsX2VtYl9wbXU7Cit9CisKKy8qCisgKiBBIGNvdW50ZXIgaGFzIG92ZXJmbG93ZWQ7IHVwZGF0ZSBpdHMgY291bnQgYW5kIHJlY29yZAorICogdGhpbmdzIGlmIHJlcXVlc3RlZC4gIE5vdGUgdGhhdCBpbnRlcnJ1cHRzIGFyZSBoYXJkLWRpc2FibGVkCisgKiBoZXJlIHNvIHRoZXJlIGlzIG5vIHBvc3NpYmlsaXR5IG9mIGJlaW5nIGludGVycnVwdGVkLgorICovCitzdGF0aWMgdm9pZCByZWNvcmRfYW5kX3Jlc3RhcnQoc3RydWN0IHBlcmZfZXZlbnQgKmV2ZW50LCB1bnNpZ25lZCBsb25nIHZhbCwKKwkJCSAgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IG5taSkKK3sKKwl1NjQgcGVyaW9kID0gZXZlbnQtPmh3LnNhbXBsZV9wZXJpb2Q7CisJczY0IHByZXYsIGRlbHRhLCBsZWZ0OworCWludCByZWNvcmQgPSAwOworCisJLyogd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCBpbnRlcnJ1cHRzIGhlcmUgKi8KKwlwcmV2ID0gYXRvbWljNjRfcmVhZCgmZXZlbnQtPmh3LnByZXZfY291bnQpOworCWRlbHRhID0gKHZhbCAtIHByZXYpICYgMHhmZmZmZmZmZnVsOworCWF0b21pYzY0X2FkZChkZWx0YSwgJmV2ZW50LT5jb3VudCk7CisKKwkvKgorCSAqIFNlZSBpZiB0aGUgdG90YWwgcGVyaW9kIGZvciB0aGlzIGV2ZW50IGhhcyBleHBpcmVkLAorCSAqIGFuZCB1cGRhdGUgZm9yIHRoZSBuZXh0IHBlcmlvZC4KKwkgKi8KKwl2YWwgPSAwOworCWxlZnQgPSBhdG9taWM2NF9yZWFkKCZldmVudC0+aHcucGVyaW9kX2xlZnQpIC0gZGVsdGE7CisJaWYgKHBlcmlvZCkgeworCQlpZiAobGVmdCA8PSAwKSB7CisJCQlsZWZ0ICs9IHBlcmlvZDsKKwkJCWlmIChsZWZ0IDw9IDApCisJCQkJbGVmdCA9IHBlcmlvZDsKKwkJCXJlY29yZCA9IDE7CisJCX0KKwkJaWYgKGxlZnQgPCAweDgwMDAwMDAwTEwpCisJCQl2YWwgPSAweDgwMDAwMDAwTEwgLSBsZWZ0OworCX0KKworCS8qCisJICogRmluYWxseSByZWNvcmQgZGF0YSBpZiByZXF1ZXN0ZWQuCisJICovCisJaWYgKHJlY29yZCkgeworCQlzdHJ1Y3QgcGVyZl9zYW1wbGVfZGF0YSBkYXRhID0geworCQkJLnBlcmlvZAk9IGV2ZW50LT5ody5sYXN0X3BlcmlvZCwKKwkJfTsKKworCQlpZiAocGVyZl9ldmVudF9vdmVyZmxvdyhldmVudCwgbm1pLCAmZGF0YSwgcmVncykpIHsKKwkJCS8qCisJCQkgKiBJbnRlcnJ1cHRzIGFyZSBjb21pbmcgdG9vIGZhc3QgLSB0aHJvdHRsZSB0aGVtCisJCQkgKiBieSBzZXR0aW5nIHRoZSBldmVudCB0byAwLCBzbyBpdCB3aWxsIGJlCisJCQkgKiBhdCBsZWFzdCAyXjMwIGN5Y2xlcyB1bnRpbCB0aGUgbmV4dCBpbnRlcnJ1cHQKKwkJCSAqIChhc3N1bWluZyBlYWNoIGV2ZW50IGNvdW50cyBhdCBtb3N0IDIgY291bnRzCisJCQkgKiBwZXIgY3ljbGUpLgorCQkJICovCisJCQl2YWwgPSAwOworCQkJbGVmdCA9IH4wVUxMID4+IDE7CisJCX0KKwl9CisKKwl3cml0ZV9wbWMoZXZlbnQtPmh3LmlkeCwgdmFsKTsKKwlhdG9taWM2NF9zZXQoJmV2ZW50LT5ody5wcmV2X2NvdW50LCB2YWwpOworCWF0b21pYzY0X3NldCgmZXZlbnQtPmh3LnBlcmlvZF9sZWZ0LCBsZWZ0KTsKKwlwZXJmX2V2ZW50X3VwZGF0ZV91c2VycGFnZShldmVudCk7Cit9CisKK3N0YXRpYyB2b2lkIHBlcmZfZXZlbnRfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBpOworCXN0cnVjdCBjcHVfaHdfZXZlbnRzICpjcHVodyA9ICZfX2dldF9jcHVfdmFyKGNwdV9od19ldmVudHMpOworCXN0cnVjdCBwZXJmX2V2ZW50ICpldmVudDsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgZm91bmQgPSAwOworCWludCBubWk7CisKKwlubWkgPSBwZXJmX2ludHJfaXNfbm1pKHJlZ3MpOworCWlmIChubWkpCisJCW5taV9lbnRlcigpOworCWVsc2UKKwkJaXJxX2VudGVyKCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcHBtdS0+bl9jb3VudGVyOyArK2kpIHsKKwkJZXZlbnQgPSBjcHVody0+ZXZlbnRbaV07CisKKwkJdmFsID0gcmVhZF9wbWMoaSk7CisJCWlmICgoaW50KXZhbCA8IDApIHsKKwkJCWlmIChldmVudCkgeworCQkJCS8qIGV2ZW50IGhhcyBvdmVyZmxvd2VkICovCisJCQkJZm91bmQgPSAxOworCQkJCXJlY29yZF9hbmRfcmVzdGFydChldmVudCwgdmFsLCByZWdzLCBubWkpOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIERpc2FibGVkIGNvdW50ZXIgaXMgbmVnYXRpdmUsCisJCQkJICogcmVzZXQgaXQganVzdCBpbiBjYXNlLgorCQkJCSAqLworCQkJCXdyaXRlX3BtYyhpLCAwKTsKKwkJCX0KKwkJfQorCX0KKworCS8qIFBNTSB3aWxsIGtlZXAgY291bnRlcnMgZnJvemVuIHVudGlsIHdlIHJldHVybiBmcm9tIHRoZSBpbnRlcnJ1cHQuICovCisJbXRtc3IobWZtc3IoKSB8IE1TUl9QTU0pOworCW10cG1yKFBNUk5fUE1HQzAsIFBNR0MwX1BNSUUgfCBQTUdDMF9GQ0VDRSk7CisJaXN5bmMoKTsKKworCWlmIChubWkpCisJCW5taV9leGl0KCk7CisJZWxzZQorCQlpcnFfZXhpdCgpOworfQorCit2b2lkIGh3X3BlcmZfZXZlbnRfc2V0dXAoaW50IGNwdSkKK3sKKwlzdHJ1Y3QgY3B1X2h3X2V2ZW50cyAqY3B1aHcgPSAmcGVyX2NwdShjcHVfaHdfZXZlbnRzLCBjcHUpOworCisJbWVtc2V0KGNwdWh3LCAwLCBzaXplb2YoKmNwdWh3KSk7Cit9CisKK2ludCByZWdpc3Rlcl9mc2xfZW1iX3BtdShzdHJ1Y3QgZnNsX2VtYl9wbXUgKnBtdSkKK3sKKwlpZiAocHBtdSkKKwkJcmV0dXJuIC1FQlVTWTsJCS8qIHNvbWV0aGluZydzIGFscmVhZHkgcmVnaXN0ZXJlZCAqLworCisJcHBtdSA9IHBtdTsKKwlwcl9pbmZvKCIlcyBwZXJmb3JtYW5jZSBtb25pdG9yIGhhcmR3YXJlIHN1cHBvcnQgcmVnaXN0ZXJlZFxuIiwKKwkJcG11LT5uYW1lKTsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKaW5kZXggNDI1NDUxNDUuLmFiM2UzOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHBjX2tzeW1zLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcGNfa3N5bXMuYwpAQCAtMTA3LDYgKzEwNyw3IEBACiAjZW5kaWYgLyogQ09ORklHX0FMVElWRUMgKi8KICNpZmRlZiBDT05GSUdfVlNYCiBFWFBPUlRfU1lNQk9MKGdpdmV1cF92c3gpOworRVhQT1JUX1NZTUJPTF9HUEwoX19naXZldXBfdnN4KTsKICNlbmRpZiAvKiBDT05GSUdfVlNYICovCiAjaWZkZWYgQ09ORklHX1NQRQogRVhQT1JUX1NZTUJPTChnaXZldXBfc3BlKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKaW5kZXggNDMyMzhiMi4uMDUxMzFkNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxhc20vc21wLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9tbXUuaD4KKyNpbmNsdWRlIDxhc20vcGFjYS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS5oPgogI2luY2x1ZGUgPGFzbS9pb21tdS5oPgpAQCAtNzIxLDYgKzcyMiw4IEBACiAJICogRklYTUUgLi4gYW5kIHRoZSBpbml0cmQgdG9vPyAqLwogCW1vdmVfZGV2aWNlX3RyZWUoKTsKIAorCWFsbG9jYXRlX3BhY2FzKCk7CisKIAlEQkcoIlNjYW5uaW5nIENQVXMgLi4uXG4iKTsKIAogCS8qIFJldHJlaXZlIENQVSByZWxhdGVkIGluZm9ybWF0aW9ucyBmcm9tIHRoZSBmbGF0IHRyZWUKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3B0cmFjZS5jCmluZGV4IGQ5YjA1ODYuLmVkMmNmZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wdHJhY2UuYwpAQCAtOTQwLDcgKzk0MCw3IEBACiB7CiAJc3dpdGNoIChzbG90KSB7CiAJY2FzZSAxOgotCQlpZiAoY2hpbGQtPnRocmVhZC5pYWMxID09IDApCisJCWlmICgoY2hpbGQtPnRocmVhZC5kYmNyMCAmIERCQ1IwX0lBQzEpID09IDApCiAJCQlyZXR1cm4gLUVOT0VOVDsKIAogCQlpZiAoZGJjcl9pYWNfcmFuZ2UoY2hpbGQpICYgREJDUl9JQUMxMk1PREUpIHsKQEAgLTk1Miw3ICs5NTIsNyBAQAogCQljaGlsZC0+dGhyZWFkLmRiY3IwICY9IH5EQkNSMF9JQUMxOwogCQlicmVhazsKIAljYXNlIDI6Ci0JCWlmIChjaGlsZC0+dGhyZWFkLmlhYzIgPT0gMCkKKwkJaWYgKChjaGlsZC0+dGhyZWFkLmRiY3IwICYgREJDUjBfSUFDMikgPT0gMCkKIAkJCXJldHVybiAtRU5PRU5UOwogCiAJCWlmIChkYmNyX2lhY19yYW5nZShjaGlsZCkgJiBEQkNSX0lBQzEyTU9ERSkKQEAgLTk2Myw3ICs5NjMsNyBAQAogCQlicmVhazsKICNpZiBDT05GSUdfUFBDX0FEVl9ERUJVR19JQUNTID4gMgogCWNhc2UgMzoKLQkJaWYgKGNoaWxkLT50aHJlYWQuaWFjMyA9PSAwKQorCQlpZiAoKGNoaWxkLT50aHJlYWQuZGJjcjAgJiBEQkNSMF9JQUMzKSA9PSAwKQogCQkJcmV0dXJuIC1FTk9FTlQ7CiAKIAkJaWYgKGRiY3JfaWFjX3JhbmdlKGNoaWxkKSAmIERCQ1JfSUFDMzRNT0RFKSB7CkBAIC05NzUsNyArOTc1LDcgQEAKIAkJY2hpbGQtPnRocmVhZC5kYmNyMCAmPSB+REJDUjBfSUFDMzsKIAkJYnJlYWs7CiAJY2FzZSA0OgotCQlpZiAoY2hpbGQtPnRocmVhZC5pYWM0ID09IDApCisJCWlmICgoY2hpbGQtPnRocmVhZC5kYmNyMCAmIERCQ1IwX0lBQzQpID09IDApCiAJCQlyZXR1cm4gLUVOT0VOVDsKIAogCQlpZiAoZGJjcl9pYWNfcmFuZ2UoY2hpbGQpICYgREJDUl9JQUMzNE1PREUpCkBAIC0xMDU0LDcgKzEwNTQsNyBAQAogc3RhdGljIGludCBkZWxfZGFjKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQsIGludCBzbG90KQogewogCWlmIChzbG90ID09IDEpIHsKLQkJaWYgKGNoaWxkLT50aHJlYWQuZGFjMSA9PSAwKQorCQlpZiAoKGRiY3JfZGFjKGNoaWxkKSAmIChEQkNSX0RBQzFSIHwgREJDUl9EQUMxVykpID09IDApCiAJCQlyZXR1cm4gLUVOT0VOVDsKIAogCQljaGlsZC0+dGhyZWFkLmRhYzEgPSAwOwpAQCAtMTA3MCw3ICsxMDcwLDcgQEAKIAkJY2hpbGQtPnRocmVhZC5kdmMxID0gMDsKICNlbmRpZgogCX0gZWxzZSBpZiAoc2xvdCA9PSAyKSB7Ci0JCWlmIChjaGlsZC0+dGhyZWFkLmRhYzEgPT0gMCkKKwkJaWYgKChkYmNyX2RhYyhjaGlsZCkgJiAoREJDUl9EQUMyUiB8IERCQ1JfREFDMlcpKSA9PSAwKQogCQkJcmV0dXJuIC1FTk9FTlQ7CiAKICNpZmRlZiBDT05GSUdfUFBDX0FEVl9ERUJVR19EQUNfUkFOR0UKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCmluZGV4IDAzZGQ2YTIuLjQ4ZjBhMDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xtYi5oPgogI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3BhY2EuaD4KICNpbmNsdWRlIDxhc20vcHJvbS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdmRzb19kYXRhcGFnZS5oPgpAQCAtNDkzLDYgKzQ5NCw4IEBACiAJICogaGVyZSB3aWxsIGhhdmUgdG8gYmUgcmV3b3JrZWQKIAkgKi8KIAljcHVfaW5pdF90aHJlYWRfY29yZV9tYXBzKG50aHJlYWRzKTsKKworCWZyZWVfdW51c2VkX3BhY2FzKCk7CiB9CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKaW5kZXggNjU2ODQwNi4uNjM1NDczOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwpAQCAtMTQ0LDkgKzE0NCw5IEBACiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwogCiAvKiBQdXQgdGhlIHBhY2EgcG9pbnRlciBpbnRvIHIxMyBhbmQgU1BSR19QQUNBICovCi12b2lkIF9faW5pdCBzZXR1cF9wYWNhKGludCBjcHUpCitzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfcGFjYShzdHJ1Y3QgcGFjYV9zdHJ1Y3QgKm5ld19wYWNhKQogewotCWxvY2FsX3BhY2EgPSAmcGFjYVtjcHVdOworCWxvY2FsX3BhY2EgPSBuZXdfcGFjYTsKIAltdHNwcihTUFJOX1NQUkdfUEFDQSwgbG9jYWxfcGFjYSk7CiAjaWZkZWYgQ09ORklHX1BQQ19CT09LM0UKIAltdHNwcihTUFJOX1NQUkdfVExCX0VYRlJBTUUsIGxvY2FsX3BhY2EtPmV4dGxiKTsKQEAgLTE3NiwxNCArMTc2LDEyIEBACiB7CiAJLyogLS0tLS0tLS0gcHJpbnRrIGlzIF9OT1RfIHNhZmUgdG8gdXNlIGhlcmUgISAtLS0tLS0tICovCiAKLQkvKiBGaWxsIGluIGFueSB1bml0aXRpYWxpc2VkIHBhY2FzICovCi0JaW5pdGlhbGlzZV9wYWNhcygpOwotCiAJLyogSWRlbnRpZnkgQ1BVIHR5cGUgKi8KIAlpZGVudGlmeV9jcHUoMCwgbWZzcHIoU1BSTl9QVlIpKTsKIAogCS8qIEFzc3VtZSB3ZSdyZSBvbiBjcHUgMCBmb3Igbm93LiBEb24ndCB3cml0ZSB0byB0aGUgcGFjYSB5ZXQhICovCi0Jc2V0dXBfcGFjYSgwKTsKKwlpbml0aWFsaXNlX3BhY2EoJmJvb3RfcGFjYSwgMCk7CisJc2V0dXBfcGFjYSgmYm9vdF9wYWNhKTsKIAogCS8qIEluaXRpYWxpemUgbG9ja2RlcCBlYXJseSBvciBlbHNlIHNwaW5sb2NrcyB3aWxsIGJsb3cgKi8KIAlsb2NrZGVwX2luaXQoKTsKQEAgLTIwMyw3ICsyMDEsNyBAQAogCWVhcmx5X2luaXRfZGV2dHJlZShfX3ZhKGR0X3B0cikpOwogCiAJLyogTm93IHdlIGtub3cgdGhlIGxvZ2ljYWwgaWQgb2Ygb3VyIGJvb3QgY3B1LCBzZXR1cCB0aGUgcGFjYS4gKi8KLQlzZXR1cF9wYWNhKGJvb3RfY3B1aWQpOworCXNldHVwX3BhY2EoJnBhY2FbYm9vdF9jcHVpZF0pOwogCiAJLyogRml4IHVwIHBhY2EgZmllbGRzIHJlcXVpcmVkIGZvciB0aGUgYm9vdCBjcHUgKi8KIAlnZXRfcGFjYSgpLT5jcHVfc3RhcnQgPSAxOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNjYWxscy5jCmluZGV4IDMzNzBlNjIuLmYyNDk2ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzY2FsbHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2NhbGxzLmMKQEAgLTQyLDEwMCArNDIsNiBAQAogI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0vKgotICogc3lzX2lwYygpIGlzIHRoZSBkZS1tdWx0aXBsZXhlciBmb3IgdGhlIFN5c1YgSVBDIGNhbGxzLi4KLSAqCi0gKiBUaGlzIGlzIHJlYWxseSBob3JyaWJseSB1Z2x5LgotICovCi1pbnQgc3lzX2lwYyh1aW50IGNhbGwsIGludCBmaXJzdCwgdW5zaWduZWQgbG9uZyBzZWNvbmQsIGxvbmcgdGhpcmQsCi0JICAgIHZvaWQgX191c2VyICpwdHIsIGxvbmcgZmlmdGgpCi17Ci0JaW50IHZlcnNpb24sIHJldDsKLQotCXZlcnNpb24gPSBjYWxsID4+IDE2OyAvKiBoYWNrIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCi0JY2FsbCAmPSAweGZmZmY7Ci0KLQlyZXQgPSAtRU5PU1lTOwotCXN3aXRjaCAoY2FsbCkgewotCWNhc2UgU0VNT1A6Ci0JCXJldCA9IHN5c19zZW10aW1lZG9wKGZpcnN0LCAoc3RydWN0IHNlbWJ1ZiBfX3VzZXIgKilwdHIsCi0JCQkJICAgICAgKHVuc2lnbmVkKXNlY29uZCwgTlVMTCk7Ci0JCWJyZWFrOwotCWNhc2UgU0VNVElNRURPUDoKLQkJcmV0ID0gc3lzX3NlbXRpbWVkb3AoZmlyc3QsIChzdHJ1Y3Qgc2VtYnVmIF9fdXNlciAqKXB0ciwKLQkJCQkgICAgICAodW5zaWduZWQpc2Vjb25kLAotCQkJCSAgICAgIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopIGZpZnRoKTsKLQkJYnJlYWs7Ci0JY2FzZSBTRU1HRVQ6Ci0JCXJldCA9IHN5c19zZW1nZXQgKGZpcnN0LCAoaW50KXNlY29uZCwgdGhpcmQpOwotCQlicmVhazsKLQljYXNlIFNFTUNUTDogewotCQl1bmlvbiBzZW11biBmb3VydGg7Ci0KLQkJcmV0ID0gLUVJTlZBTDsKLQkJaWYgKCFwdHIpCi0JCQlicmVhazsKLQkJaWYgKChyZXQgPSBnZXRfdXNlcihmb3VydGguX19wYWQsICh2b2lkIF9fdXNlciAqIF9fdXNlciAqKXB0cikpKQotCQkJYnJlYWs7Ci0JCXJldCA9IHN5c19zZW1jdGwoZmlyc3QsIChpbnQpc2Vjb25kLCB0aGlyZCwgZm91cnRoKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgTVNHU05EOgotCQlyZXQgPSBzeXNfbXNnc25kKGZpcnN0LCAoc3RydWN0IG1zZ2J1ZiBfX3VzZXIgKilwdHIsCi0JCQkJIChzaXplX3Qpc2Vjb25kLCB0aGlyZCk7Ci0JCWJyZWFrOwotCWNhc2UgTVNHUkNWOgotCQlzd2l0Y2ggKHZlcnNpb24pIHsKLQkJY2FzZSAwOiB7Ci0JCQlzdHJ1Y3QgaXBjX2tsdWRnZSB0bXA7Ci0KLQkJCXJldCA9IC1FSU5WQUw7Ci0JCQlpZiAoIXB0cikKLQkJCQlicmVhazsKLQkJCWlmICgocmV0ID0gY29weV9mcm9tX3VzZXIoJnRtcCwKLQkJCQkJCShzdHJ1Y3QgaXBjX2tsdWRnZSBfX3VzZXIgKikgcHRyLAotCQkJCQkJc2l6ZW9mICh0bXApKSA/IC1FRkFVTFQgOiAwKSkKLQkJCQlicmVhazsKLQkJCXJldCA9IHN5c19tc2dyY3YoZmlyc3QsIHRtcC5tc2dwLCAoc2l6ZV90KSBzZWNvbmQsCi0JCQkJCSAgdG1wLm1zZ3R5cCwgdGhpcmQpOwotCQkJYnJlYWs7Ci0JCX0KLQkJZGVmYXVsdDoKLQkJCXJldCA9IHN5c19tc2dyY3YgKGZpcnN0LCAoc3RydWN0IG1zZ2J1ZiBfX3VzZXIgKikgcHRyLAotCQkJCQkgIChzaXplX3Qpc2Vjb25kLCBmaWZ0aCwgdGhpcmQpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBNU0dHRVQ6Ci0JCXJldCA9IHN5c19tc2dnZXQoKGtleV90KWZpcnN0LCAoaW50KXNlY29uZCk7Ci0JCWJyZWFrOwotCWNhc2UgTVNHQ1RMOgotCQlyZXQgPSBzeXNfbXNnY3RsKGZpcnN0LCAoaW50KXNlY29uZCwKLQkJCQkgIChzdHJ1Y3QgbXNxaWRfZHMgX191c2VyICopcHRyKTsKLQkJYnJlYWs7Ci0JY2FzZSBTSE1BVDogewotCQl1bG9uZyByYWRkcjsKLQkJcmV0ID0gZG9fc2htYXQoZmlyc3QsIChjaGFyIF9fdXNlciAqKXB0ciwgKGludClzZWNvbmQsICZyYWRkcik7Ci0JCWlmIChyZXQpCi0JCQlicmVhazsKLQkJcmV0ID0gcHV0X3VzZXIocmFkZHIsICh1bG9uZyBfX3VzZXIgKikgdGhpcmQpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBTSE1EVDoKLQkJcmV0ID0gc3lzX3NobWR0KChjaGFyIF9fdXNlciAqKXB0cik7Ci0JCWJyZWFrOwotCWNhc2UgU0hNR0VUOgotCQlyZXQgPSBzeXNfc2htZ2V0KGZpcnN0LCAoc2l6ZV90KXNlY29uZCwgdGhpcmQpOwotCQlicmVhazsKLQljYXNlIFNITUNUTDoKLQkJcmV0ID0gc3lzX3NobWN0bChmaXJzdCwgKGludClzZWNvbmQsCi0JCQkJIChzdHJ1Y3Qgc2htaWRfZHMgX191c2VyICopcHRyKTsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRvX21tYXAyKHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZV90IGxlbiwKIAkJCXVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJCXVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgb2ZmLCBpbnQgc2hpZnQpCkBAIC0yMTAsNzYgKzExNiw2IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19QUEM2NAotI2RlZmluZSBPVkVSUklERV9NQUNISU5FICAgIChwZXJzb25hbGl0eShjdXJyZW50LT5wZXJzb25hbGl0eSkgPT0gUEVSX0xJTlVYMzIpCi0jZWxzZQotI2RlZmluZSBPVkVSUklERV9NQUNISU5FICAgIDAKLSNlbmRpZgotCi1zdGF0aWMgaW5saW5lIGludCBvdmVycmlkZV9tYWNoaW5lKGNoYXIgX191c2VyICptYWNoKQotewotCWlmIChPVkVSUklERV9NQUNISU5FKSB7Ci0JCS8qIGNoYW5nZSBwcGM2NCB0byBwcGMgKi8KLQkJaWYgKF9fcHV0X3VzZXIoMCwgbWFjaCszKSB8fCBfX3B1dF91c2VyKDAsIG1hY2grNCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWxvbmcgcHBjX25ld3VuYW1lKHN0cnVjdCBuZXdfdXRzbmFtZSBfX3VzZXIgKiBuYW1lKQotewotCWludCBlcnIgPSAwOwotCi0JZG93bl9yZWFkKCZ1dHNfc2VtKTsKLQlpZiAoY29weV90b191c2VyKG5hbWUsIHV0c25hbWUoKSwgc2l6ZW9mKCpuYW1lKSkpCi0JCWVyciA9IC1FRkFVTFQ7Ci0JdXBfcmVhZCgmdXRzX3NlbSk7Ci0JaWYgKCFlcnIpCi0JCWVyciA9IG92ZXJyaWRlX21hY2hpbmUobmFtZS0+bWFjaGluZSk7Ci0JcmV0dXJuIGVycjsKLX0KLQotaW50IHN5c191bmFtZShzdHJ1Y3Qgb2xkX3V0c25hbWUgX191c2VyICpuYW1lKQotewotCWludCBlcnIgPSAwOwotCQotCWRvd25fcmVhZCgmdXRzX3NlbSk7Ci0JaWYgKGNvcHlfdG9fdXNlcihuYW1lLCB1dHNuYW1lKCksIHNpemVvZigqbmFtZSkpKQotCQllcnIgPSAtRUZBVUxUOwotCXVwX3JlYWQoJnV0c19zZW0pOwotCWlmICghZXJyKQotCQllcnIgPSBvdmVycmlkZV9tYWNoaW5lKG5hbWUtPm1hY2hpbmUpOwotCXJldHVybiBlcnI7Ci19Ci0KLWludCBzeXNfb2xkdW5hbWUoc3RydWN0IG9sZG9sZF91dHNuYW1lIF9fdXNlciAqbmFtZSkKLXsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIG5hbWUsIHNpemVvZihzdHJ1Y3Qgb2xkb2xkX3V0c25hbWUpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0gIAotCWRvd25fcmVhZCgmdXRzX3NlbSk7Ci0JZXJyb3IgPSBfX2NvcHlfdG9fdXNlcigmbmFtZS0+c3lzbmFtZSwgJnV0c25hbWUoKS0+c3lzbmFtZSwKLQkJCSAgICAgICBfX09MRF9VVFNfTEVOKTsKLQllcnJvciB8PSBfX3B1dF91c2VyKDAsIG5hbWUtPnN5c25hbWUgKyBfX09MRF9VVFNfTEVOKTsKLQllcnJvciB8PSBfX2NvcHlfdG9fdXNlcigmbmFtZS0+bm9kZW5hbWUsICZ1dHNuYW1lKCktPm5vZGVuYW1lLAotCQkJCV9fT0xEX1VUU19MRU4pOwotCWVycm9yIHw9IF9fcHV0X3VzZXIoMCwgbmFtZS0+bm9kZW5hbWUgKyBfX09MRF9VVFNfTEVOKTsKLQllcnJvciB8PSBfX2NvcHlfdG9fdXNlcigmbmFtZS0+cmVsZWFzZSwgJnV0c25hbWUoKS0+cmVsZWFzZSwKLQkJCQlfX09MRF9VVFNfTEVOKTsKLQllcnJvciB8PSBfX3B1dF91c2VyKDAsIG5hbWUtPnJlbGVhc2UgKyBfX09MRF9VVFNfTEVOKTsKLQllcnJvciB8PSBfX2NvcHlfdG9fdXNlcigmbmFtZS0+dmVyc2lvbiwgJnV0c25hbWUoKS0+dmVyc2lvbiwKLQkJCQlfX09MRF9VVFNfTEVOKTsKLQllcnJvciB8PSBfX3B1dF91c2VyKDAsIG5hbWUtPnZlcnNpb24gKyBfX09MRF9VVFNfTEVOKTsKLQllcnJvciB8PSBfX2NvcHlfdG9fdXNlcigmbmFtZS0+bWFjaGluZSwgJnV0c25hbWUoKS0+bWFjaGluZSwKLQkJCQlfX09MRF9VVFNfTEVOKTsKLQllcnJvciB8PSBvdmVycmlkZV9tYWNoaW5lKG5hbWUtPm1hY2hpbmUpOwotCXVwX3JlYWQoJnV0c19zZW0pOwotCi0JcmV0dXJuIGVycm9yPyAtRUZBVUxUOiAwOwotfQotCiBsb25nIHBwY19mYWR2aXNlNjRfNjQoaW50IGZkLCBpbnQgYWR2aWNlLCB1MzIgb2Zmc2V0X2hpZ2gsIHUzMiBvZmZzZXRfbG93LAogCQkgICAgICB1MzIgbGVuX2hpZ2gsIHUzMiBsZW5fbG93KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS80NHhfZW11bGF0ZS5jIGIvYXJjaC9wb3dlcnBjL2t2bS80NHhfZW11bGF0ZS5jCmluZGV4IDYxYWY1OGYuLjY1ZWEwODMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vNDR4X2VtdWxhdGUuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtLzQ0eF9lbXVsYXRlLmMKQEAgLTY1LDEzICs2NSwxNCBAQAogCQkJICovCiAJCQlzd2l0Y2ggKGRjcm4pIHsKIAkJCWNhc2UgRENSTl9DUFIwX0NPTkZJR19BRERSOgotCQkJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guY3ByMF9jZmdhZGRyOworCQkJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1LT5hcmNoLmNwcjBfY2ZnYWRkcik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIERDUk5fQ1BSMF9DT05GSUdfREFUQToKIAkJCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCQkJCW10ZGNyKERDUk5fQ1BSMF9DT05GSUdfQUREUiwKIAkJCQkJICB2Y3B1LT5hcmNoLmNwcjBfY2ZnYWRkcik7Ci0JCQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gbWZkY3IoRENSTl9DUFIwX0NPTkZJR19EQVRBKTsKKwkJCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwKKwkJCQkJICAgICAgIG1mZGNyKERDUk5fQ1BSMF9DT05GSUdfREFUQSkpOwogCQkJCWxvY2FsX2lycV9lbmFibGUoKTsKIAkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CkBAIC05MywxMSArOTQsMTEgQEAKIAkJCS8qIGVtdWxhdGUgc29tZSBhY2Nlc3MgaW4ga2VybmVsICovCiAJCQlzd2l0Y2ggKGRjcm4pIHsKIAkJCWNhc2UgRENSTl9DUFIwX0NPTkZJR19BRERSOgotCQkJCXZjcHUtPmFyY2guY3ByMF9jZmdhZGRyID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQkJCXZjcHUtPmFyY2guY3ByMF9jZmdhZGRyID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgcnMpOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlydW4tPmRjci5kY3JuID0gZGNybjsKLQkJCQlydW4tPmRjci5kYXRhID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQkJCXJ1bi0+ZGNyLmRhdGEgPSBrdm1wcGNfZ2V0X2dwcih2Y3B1LCBycyk7CiAJCQkJcnVuLT5kY3IuaXNfd3JpdGUgPSAxOwogCQkJCXZjcHUtPmFyY2guZGNyX25lZWRlZCA9IDE7CiAJCQkJa3ZtcHBjX2FjY291bnRfZXhpdCh2Y3B1LCBEQ1JfRVhJVFMpOwpAQCAtMTQ2LDEzICsxNDcsMTMgQEAKIAogCXN3aXRjaCAoc3BybikgewogCWNhc2UgU1BSTl9QSUQ6Ci0JCWt2bXBwY19zZXRfcGlkKHZjcHUsIHZjcHUtPmFyY2guZ3ByW3JzXSk7IGJyZWFrOworCQlrdm1wcGNfc2V0X3BpZCh2Y3B1LCBrdm1wcGNfZ2V0X2dwcih2Y3B1LCBycykpOyBicmVhazsKIAljYXNlIFNQUk5fTU1VQ1I6Ci0JCXZjcHUtPmFyY2gubW11Y3IgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCQl2Y3B1LT5hcmNoLm1tdWNyID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgcnMpOyBicmVhazsKIAljYXNlIFNQUk5fQ0NSMDoKLQkJdmNwdS0+YXJjaC5jY3IwID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwkJdmNwdS0+YXJjaC5jY3IwID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgcnMpOyBicmVhazsKIAljYXNlIFNQUk5fQ0NSMToKLQkJdmNwdS0+YXJjaC5jY3IxID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwkJdmNwdS0+YXJjaC5jY3IxID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgcnMpOyBicmVhazsKIAlkZWZhdWx0OgogCQllbXVsYXRlZCA9IGt2bXBwY19ib29rZV9lbXVsYXRlX210c3ByKHZjcHUsIHNwcm4sIHJzKTsKIAl9CkBAIC0xNjcsMTMgKzE2OCwxMyBAQAogCiAJc3dpdGNoIChzcHJuKSB7CiAJY2FzZSBTUFJOX1BJRDoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5waWQ7IGJyZWFrOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdS0+YXJjaC5waWQpOyBicmVhazsKIAljYXNlIFNQUk5fTU1VQ1I6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2gubW11Y3I7IGJyZWFrOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdS0+YXJjaC5tbXVjcik7IGJyZWFrOwogCWNhc2UgU1BSTl9DQ1IwOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmNjcjA7IGJyZWFrOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdS0+YXJjaC5jY3IwKTsgYnJlYWs7CiAJY2FzZSBTUFJOX0NDUjE6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guY2NyMTsgYnJlYWs7CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1LT5hcmNoLmNjcjEpOyBicmVhazsKIAlkZWZhdWx0OgogCQllbXVsYXRlZCA9IGt2bXBwY19ib29rZV9lbXVsYXRlX21mc3ByKHZjcHUsIHNwcm4sIHJ0KTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtLzQ0eF90bGIuYyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jCmluZGV4IGZmM2NiNjMuLjI1NzBmY2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vNDR4X3RsYi5jCkBAIC00MzksNyArNDM5LDcgQEAKIAlzdHJ1Y3Qga3ZtcHBjXzQ0eF90bGJlICp0bGJlOwogCXVuc2lnbmVkIGludCBndGxiX2luZGV4OwogCi0JZ3RsYl9pbmRleCA9IHZjcHUtPmFyY2guZ3ByW3JhXTsKKwlndGxiX2luZGV4ID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgcmEpOwogCWlmIChndGxiX2luZGV4ID4gS1ZNNDR4X0dVRVNUX1RMQl9TSVpFKSB7CiAJCXByaW50aygiJXM6IGluZGV4ICVkXG4iLCBfX2Z1bmNfXywgZ3RsYl9pbmRleCk7CiAJCWt2bXBwY19kdW1wX3ZjcHUodmNwdSk7CkBAIC00NTUsMTUgKzQ1NSwxNSBAQAogCXN3aXRjaCAod3MpIHsKIAljYXNlIFBQQzQ0eF9UTEJfUEFHRUlEOgogCQl0bGJlLT50aWQgPSBnZXRfbW11Y3Jfc3RpZCh2Y3B1KTsKLQkJdGxiZS0+d29yZDAgPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCXRsYmUtPndvcmQwID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgcnMpOwogCQlicmVhazsKIAogCWNhc2UgUFBDNDR4X1RMQl9YTEFUOgotCQl0bGJlLT53b3JkMSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJdGxiZS0+d29yZDEgPSBrdm1wcGNfZ2V0X2dwcih2Y3B1LCBycyk7CiAJCWJyZWFrOwogCiAJY2FzZSBQUEM0NHhfVExCX0FUVFJJQjoKLQkJdGxiZS0+d29yZDIgPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCXRsYmUtPndvcmQyID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgcnMpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC01MDAsMTggKzUwMCwyMCBAQAogCXVuc2lnbmVkIGludCBhcyA9IGdldF9tbXVjcl9zdHModmNwdSk7CiAJdW5zaWduZWQgaW50IHBpZCA9IGdldF9tbXVjcl9zdGlkKHZjcHUpOwogCi0JZWEgPSB2Y3B1LT5hcmNoLmdwcltyYl07CisJZWEgPSBrdm1wcGNfZ2V0X2dwcih2Y3B1LCByYik7CiAJaWYgKHJhKQotCQllYSArPSB2Y3B1LT5hcmNoLmdwcltyYV07CisJCWVhICs9IGt2bXBwY19nZXRfZ3ByKHZjcHUsIHJhKTsKIAogCWd0bGJfaW5kZXggPSBrdm1wcGNfNDR4X3RsYl9pbmRleCh2Y3B1LCBlYSwgcGlkLCBhcyk7CiAJaWYgKHJjKSB7CisJCXUzMiBjciA9IGt2bXBwY19nZXRfY3IodmNwdSk7CisKIAkJaWYgKGd0bGJfaW5kZXggPCAwKQotCQkJdmNwdS0+YXJjaC5jciAmPSB+MHgyMDAwMDAwMDsKKwkJCWt2bXBwY19zZXRfY3IodmNwdSwgY3IgJiB+MHgyMDAwMDAwMCk7CiAJCWVsc2UKLQkJCXZjcHUtPmFyY2guY3IgfD0gMHgyMDAwMDAwMDsKKwkJCWt2bXBwY19zZXRfY3IodmNwdSwgY3IgfCAweDIwMDAwMDAwKTsKIAl9Ci0JdmNwdS0+YXJjaC5ncHJbcnRdID0gZ3RsYl9pbmRleDsKKwlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgZ3RsYl9pbmRleCk7CiAKIAlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9UTEJTWF9FWElUUyk7CiAJcmV0dXJuIEVNVUxBVEVfRE9ORTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZwppbmRleCA2ZmI2ZThhLi42MDYyNGNjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnCkBAIC0yMCw2ICsyMCw3IEBACiAJYm9vbAogCXNlbGVjdCBQUkVFTVBUX05PVElGSUVSUwogCXNlbGVjdCBBTk9OX0lOT0RFUworCXNlbGVjdCBLVk1fTU1JTwogCiBjb25maWcgS1ZNX0JPT0szU182NF9IQU5ETEVSCiAJYm9vbApAQCAtNzUsNiArNzYsNyBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitzb3VyY2UgZHJpdmVycy92aG9zdC9LY29uZmlnCiBzb3VyY2UgZHJpdmVycy92aXJ0aW8vS2NvbmZpZwogCiBlbmRpZiAjIFZJUlRVQUxJWkFUSU9OCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYwppbmRleCAzZTI5NGJkLi45YTI3MWYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzLmMKQEAgLTMzLDEyICszMyw5IEBACiAKIC8qICNkZWZpbmUgRVhJVF9ERUJVRyAqLwogLyogI2RlZmluZSBFWElUX0RFQlVHX1NJTVBMRSAqLworLyogI2RlZmluZSBERUJVR19FWFQgKi8KIAotLyogV2l0aG91dCBBR0dSRVNTSVZFX0RFQyB3ZSBvbmx5IGZpcmUgb2ZmIGEgREVDIGludGVycnVwdCB3aGVuIERFQyB0dXJucyAwLgotICogV2hlbiBzZXQsIHdlIHJldHJpZ2dlciBhIERFQyBpbnRlcnJ1cHQgYWZ0ZXIgdGhhdCBpZiBERUMgPD0gMC4KLSAqIFBQQzMyIExpbnV4IHJ1bnMgZmFzdGVyIHdpdGhvdXQgQUdHUkVTU0lWRV9ERUMsIFBQQzY0IExpbnV4IHJlcXVpcmVzIGl0LiAqLwotCi0vKiAjZGVmaW5lIEFHR1JFU1NJVkVfREVDICovCitzdGF0aWMgdm9pZCBrdm1wcGNfZ2l2ZXVwX2V4dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nIG1zcik7CiAKIHN0cnVjdCBrdm1fc3RhdHNfZGVidWdmc19pdGVtIGRlYnVnZnNfZW50cmllc1tdID0gewogCXsgImV4aXRzIiwgICAgICAgVkNQVV9TVEFUKHN1bV9leGl0cykgfSwKQEAgLTcyLDE2ICs2OSwyNCBAQAogdm9pZCBrdm1wcGNfY29yZV92Y3B1X2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgY3B1KQogewogCW1lbWNweShnZXRfcGFjYSgpLT5rdm1fc2xiLCB0b19ib29rM3ModmNwdSktPnNsYl9zaGFkb3csIHNpemVvZihnZXRfcGFjYSgpLT5rdm1fc2xiKSk7CisJbWVtY3B5KCZnZXRfcGFjYSgpLT5zaGFkb3dfdmNwdSwgJnRvX2Jvb2szcyh2Y3B1KS0+c2hhZG93X3ZjcHUsCisJICAgICAgIHNpemVvZihnZXRfcGFjYSgpLT5zaGFkb3dfdmNwdSkpOwogCWdldF9wYWNhKCktPmt2bV9zbGJfbWF4ID0gdG9fYm9vazNzKHZjcHUpLT5zbGJfc2hhZG93X21heDsKIH0KIAogdm9pZCBrdm1wcGNfY29yZV92Y3B1X3B1dChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJbWVtY3B5KHRvX2Jvb2szcyh2Y3B1KS0+c2xiX3NoYWRvdywgZ2V0X3BhY2EoKS0+a3ZtX3NsYiwgc2l6ZW9mKGdldF9wYWNhKCktPmt2bV9zbGIpKTsKKwltZW1jcHkoJnRvX2Jvb2szcyh2Y3B1KS0+c2hhZG93X3ZjcHUsICZnZXRfcGFjYSgpLT5zaGFkb3dfdmNwdSwKKwkgICAgICAgc2l6ZW9mKGdldF9wYWNhKCktPnNoYWRvd192Y3B1KSk7CiAJdG9fYm9vazNzKHZjcHUpLT5zbGJfc2hhZG93X21heCA9IGdldF9wYWNhKCktPmt2bV9zbGJfbWF4OworCisJa3ZtcHBjX2dpdmV1cF9leHQodmNwdSwgTVNSX0ZQKTsKKwlrdm1wcGNfZ2l2ZXVwX2V4dCh2Y3B1LCBNU1JfVkVDKTsKKwlrdm1wcGNfZ2l2ZXVwX2V4dCh2Y3B1LCBNU1JfVlNYKTsKIH0KIAotI2lmIGRlZmluZWQoQUdHUkVTU0lWRV9ERUMpIHx8IGRlZmluZWQoRVhJVF9ERUJVRykKKyNpZiBkZWZpbmVkKEVYSVRfREVCVUcpCiBzdGF0aWMgdTMyIGt2bXBwY19nZXRfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1NjQgamQgPSBtZnRiKCkgLSB2Y3B1LT5hcmNoLmRlY19qaWZmaWVzOwpAQCAtODksNiArOTQsMjMgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgdm9pZCBrdm1wcGNfcmVjYWxjX3NoYWRvd19tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXZjcHUtPmFyY2guc2hhZG93X21zciA9IHZjcHUtPmFyY2gubXNyOworCS8qIEd1ZXN0IE1TUiB2YWx1ZXMgKi8KKwl2Y3B1LT5hcmNoLnNoYWRvd19tc3IgJj0gTVNSX0ZFMCB8IE1TUl9GRTEgfCBNU1JfU0YgfCBNU1JfU0UgfAorCQkJCSBNU1JfQkUgfCBNU1JfREU7CisJLyogUHJvY2VzcyBNU1IgdmFsdWVzICovCisJdmNwdS0+YXJjaC5zaGFkb3dfbXNyIHw9IE1TUl9NRSB8IE1TUl9SSSB8IE1TUl9JUiB8IE1TUl9EUiB8IE1TUl9QUiB8CisJCQkJIE1TUl9FRTsKKwkvKiBFeHRlcm5hbCBwcm92aWRlcnMgdGhlIGd1ZXN0IHJlc2VydmVkICovCisJdmNwdS0+YXJjaC5zaGFkb3dfbXNyIHw9ICh2Y3B1LT5hcmNoLm1zciAmIHZjcHUtPmFyY2guZ3Vlc3Rfb3duZWRfZXh0KTsKKwkvKiA2NC1iaXQgUHJvY2VzcyBNU1IgdmFsdWVzICovCisjaWZkZWYgQ09ORklHX1BQQ19CT09LM1NfNjQKKwl2Y3B1LT5hcmNoLnNoYWRvd19tc3IgfD0gTVNSX0lTRiB8IE1TUl9IVjsKKyNlbmRpZgorfQorCiB2b2lkIGt2bXBwY19zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IG1zcikKIHsKIAl1bG9uZyBvbGRfbXNyID0gdmNwdS0+YXJjaC5tc3I7CkBAIC05NiwxMiArMTE4LDEwIEBACiAjaWZkZWYgRVhJVF9ERUJVRwogCXByaW50ayhLRVJOX0lORk8gIktWTTogU2V0IE1TUiB0byAweCVsbHhcbiIsIG1zcik7CiAjZW5kaWYKKwogCW1zciAmPSB0b19ib29rM3ModmNwdSktPm1zcl9tYXNrOwogCXZjcHUtPmFyY2gubXNyID0gbXNyOwotCXZjcHUtPmFyY2guc2hhZG93X21zciA9IG1zciB8IE1TUl9VU0VSMzI7Ci0JdmNwdS0+YXJjaC5zaGFkb3dfbXNyICY9ICggTVNSX1ZFQyB8IE1TUl9WU1ggfCBNU1JfRlAgfCBNU1JfRkUwIHwKLQkJCQkgICBNU1JfVVNFUjY0IHwgTVNSX1NFIHwgTVNSX0JFIHwgTVNSX0RFIHwKLQkJCQkgICBNU1JfRkUxKTsKKwlrdm1wcGNfcmVjYWxjX3NoYWRvd19tc3IodmNwdSk7CiAKIAlpZiAobXNyICYgKE1TUl9XRXxNU1JfUE9XKSkgewogCQlpZiAoIXZjcHUtPmFyY2gucGVuZGluZ19leGNlcHRpb25zKSB7CkBAIC0xMjUsMTEgKzE0NSwxMCBAQAogCXZjcHUtPmFyY2gubW11LnJlc2V0X21zcih2Y3B1KTsKIH0KIAotdm9pZCBrdm1wcGNfYm9vazNzX3F1ZXVlX2lycXByaW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgdmVjKQorc3RhdGljIGludCBrdm1wcGNfYm9vazNzX3ZlYzJpcnFwcmlvKHVuc2lnbmVkIGludCB2ZWMpCiB7CiAJdW5zaWduZWQgaW50IHByaW87CiAKLQl2Y3B1LT5zdGF0LnF1ZXVlX2ludHIrKzsKIAlzd2l0Y2ggKHZlYykgewogCWNhc2UgMHgxMDA6IHByaW8gPSBCT09LM1NfSVJRUFJJT19TWVNURU1fUkVTRVQ7CQlicmVhazsKIAljYXNlIDB4MjAwOiBwcmlvID0gQk9PSzNTX0lSUVBSSU9fTUFDSElORV9DSEVDSzsJYnJlYWs7CkBAIC0xNDksMTUgKzE2OCwzMSBAQAogCWRlZmF1bHQ6ICAgIHByaW8gPSBCT09LM1NfSVJRUFJJT19NQVg7CQkJYnJlYWs7CiAJfQogCi0Jc2V0X2JpdChwcmlvLCAmdmNwdS0+YXJjaC5wZW5kaW5nX2V4Y2VwdGlvbnMpOworCXJldHVybiBwcmlvOworfQorCitzdGF0aWMgdm9pZCBrdm1wcGNfYm9vazNzX2RlcXVldWVfaXJxcHJpbyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkJCSAgdW5zaWduZWQgaW50IHZlYykKK3sKKwljbGVhcl9iaXQoa3ZtcHBjX2Jvb2szc192ZWMyaXJxcHJpbyh2ZWMpLAorCQkgICZ2Y3B1LT5hcmNoLnBlbmRpbmdfZXhjZXB0aW9ucyk7Cit9CisKK3ZvaWQga3ZtcHBjX2Jvb2szc19xdWV1ZV9pcnFwcmlvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgaW50IHZlYykKK3sKKwl2Y3B1LT5zdGF0LnF1ZXVlX2ludHIrKzsKKworCXNldF9iaXQoa3ZtcHBjX2Jvb2szc192ZWMyaXJxcHJpbyh2ZWMpLAorCQkmdmNwdS0+YXJjaC5wZW5kaW5nX2V4Y2VwdGlvbnMpOwogI2lmZGVmIEVYSVRfREVCVUcKIAlwcmludGsoS0VSTl9JTkZPICJRdWV1ZWluZyBpbnRlcnJ1cHQgJXhcbiIsIHZlYyk7CiAjZW5kaWYKIH0KIAogCi12b2lkIGt2bXBwY19jb3JlX3F1ZXVlX3Byb2dyYW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQordm9pZCBrdm1wcGNfY29yZV9xdWV1ZV9wcm9ncmFtKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWxvbmcgZmxhZ3MpCiB7CisJdG9fYm9vazNzKHZjcHUpLT5wcm9nX2ZsYWdzID0gZmxhZ3M7CiAJa3ZtcHBjX2Jvb2szc19xdWV1ZV9pcnFwcmlvKHZjcHUsIEJPT0szU19JTlRFUlJVUFRfUFJPR1JBTSk7CiB9CiAKQEAgLTE3MSw2ICsyMDYsMTEgQEAKIAlyZXR1cm4gdGVzdF9iaXQoQk9PSzNTX0lOVEVSUlVQVF9ERUNSRU1FTlRFUiA+PiA3LCAmdmNwdS0+YXJjaC5wZW5kaW5nX2V4Y2VwdGlvbnMpOwogfQogCit2b2lkIGt2bXBwY19jb3JlX2RlcXVldWVfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlrdm1wcGNfYm9vazNzX2RlcXVldWVfaXJxcHJpbyh2Y3B1LCBCT09LM1NfSU5URVJSVVBUX0RFQ1JFTUVOVEVSKTsKK30KKwogdm9pZCBrdm1wcGNfY29yZV9xdWV1ZV9leHRlcm5hbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1faW50ZXJydXB0ICppcnEpCiB7CkBAIC0xODEsNiArMjIxLDcgQEAKIHsKIAlpbnQgZGVsaXZlciA9IDE7CiAJaW50IHZlYyA9IDA7CisJdWxvbmcgZmxhZ3MgPSAwVUxMOwogCiAJc3dpdGNoIChwcmlvcml0eSkgewogCWNhc2UgQk9PSzNTX0lSUVBSSU9fREVDUkVNRU5URVI6CkBAIC0yMTQsNiArMjU1LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBCT09LM1NfSVJRUFJJT19QUk9HUkFNOgogCQl2ZWMgPSBCT09LM1NfSU5URVJSVVBUX1BST0dSQU07CisJCWZsYWdzID0gdG9fYm9vazNzKHZjcHUpLT5wcm9nX2ZsYWdzOwogCQlicmVhazsKIAljYXNlIEJPT0szU19JUlFQUklPX1ZTWDoKIAkJdmVjID0gQk9PSzNTX0lOVEVSUlVQVF9WU1g7CkBAIC0yNDQsNyArMjg2LDcgQEAKICNlbmRpZgogCiAJaWYgKGRlbGl2ZXIpCi0JCWt2bXBwY19pbmplY3RfaW50ZXJydXB0KHZjcHUsIHZlYywgMFVMTCk7CisJCWt2bXBwY19pbmplY3RfaW50ZXJydXB0KHZjcHUsIHZlYywgZmxhZ3MpOwogCiAJcmV0dXJuIGRlbGl2ZXI7CiB9CkBAIC0yNTQsMjEgKzI5NiwxNSBAQAogCXVuc2lnbmVkIGxvbmcgKnBlbmRpbmcgPSAmdmNwdS0+YXJjaC5wZW5kaW5nX2V4Y2VwdGlvbnM7CiAJdW5zaWduZWQgaW50IHByaW9yaXR5OwogCi0JLyogWFhYIGJlIG1vcmUgY2xldmVyIGhlcmUgLSBubyBuZWVkIHRvIG1mdGIoKSBvbiBldmVyeSBlbnRyeSAqLwotCS8qIElzc3VlIERFQyBhZ2FpbiBpZiBpdCdzIHN0aWxsIGFjdGl2ZSAqLwotI2lmZGVmIEFHR1JFU1NJVkVfREVDCi0JaWYgKHZjcHUtPmFyY2gubXNyICYgTVNSX0VFKQotCQlpZiAoa3ZtcHBjX2dldF9kZWModmNwdSkgJiAweDgwMDAwMDAwKQotCQkJa3ZtcHBjX2NvcmVfcXVldWVfZGVjKHZjcHUpOwotI2VuZGlmCi0KICNpZmRlZiBFWElUX0RFQlVHCiAJaWYgKHZjcHUtPmFyY2gucGVuZGluZ19leGNlcHRpb25zKQogCQlwcmludGsoS0VSTl9FTUVSRyAiS1ZNOiBDaGVjayBwZW5kaW5nOiAlbHhcbiIsIHZjcHUtPmFyY2gucGVuZGluZ19leGNlcHRpb25zKTsKICNlbmRpZgogCXByaW9yaXR5ID0gX19mZnMoKnBlbmRpbmcpOwogCXdoaWxlIChwcmlvcml0eSA8PSAoc2l6ZW9mKHVuc2lnbmVkIGludCkgKiA4KSkgewotCQlpZiAoa3ZtcHBjX2Jvb2szc19pcnFwcmlvX2RlbGl2ZXIodmNwdSwgcHJpb3JpdHkpKSB7CisJCWlmIChrdm1wcGNfYm9vazNzX2lycXByaW9fZGVsaXZlcih2Y3B1LCBwcmlvcml0eSkgJiYKKwkJICAgIChwcmlvcml0eSAhPSBCT09LM1NfSVJRUFJJT19ERUNSRU1FTlRFUikpIHsKKwkJCS8qIERFQyBpbnRlcnJ1cHRzIGdldCBjbGVhcmVkIGJ5IG10ZGVjICovCiAJCQljbGVhcl9iaXQocHJpb3JpdHksICZ2Y3B1LT5hcmNoLnBlbmRpbmdfZXhjZXB0aW9ucyk7CiAJCQlicmVhazsKIAkJfQpAQCAtNTAzLDE0ICs1MzksMTQgQEAKIAkJLyogUGFnZSBub3QgZm91bmQgaW4gZ3Vlc3QgUFRFIGVudHJpZXMgKi8KIAkJdmNwdS0+YXJjaC5kZWFyID0gdmNwdS0+YXJjaC5mYXVsdF9kZWFyOwogCQl0b19ib29rM3ModmNwdSktPmRzaXNyID0gdmNwdS0+YXJjaC5mYXVsdF9kc2lzcjsKLQkJdmNwdS0+YXJjaC5tc3IgfD0gKHZjcHUtPmFyY2guc2hhZG93X21zciAmIDB4MDAwMDAwMDBmODAwMDAwMFVMTCk7CisJCXZjcHUtPmFyY2gubXNyIHw9ICh2Y3B1LT5hcmNoLnNoYWRvd19zcnIxICYgMHgwMDAwMDAwMGY4MDAwMDAwVUxMKTsKIAkJa3ZtcHBjX2Jvb2szc19xdWV1ZV9pcnFwcmlvKHZjcHUsIHZlYyk7CiAJfSBlbHNlIGlmIChwYWdlX2ZvdW5kID09IC1FUEVSTSkgewogCQkvKiBTdG9yYWdlIHByb3RlY3Rpb24gKi8KIAkJdmNwdS0+YXJjaC5kZWFyID0gdmNwdS0+YXJjaC5mYXVsdF9kZWFyOwogCQl0b19ib29rM3ModmNwdSktPmRzaXNyID0gdmNwdS0+YXJjaC5mYXVsdF9kc2lzciAmIH5EU0lTUl9OT0hQVEU7CiAJCXRvX2Jvb2szcyh2Y3B1KS0+ZHNpc3IgfD0gRFNJU1JfUFJPVEZBVUxUOwotCQl2Y3B1LT5hcmNoLm1zciB8PSAodmNwdS0+YXJjaC5zaGFkb3dfbXNyICYgMHgwMDAwMDAwMGY4MDAwMDAwVUxMKTsKKwkJdmNwdS0+YXJjaC5tc3IgfD0gKHZjcHUtPmFyY2guc2hhZG93X3NycjEgJiAweDAwMDAwMDAwZjgwMDAwMDBVTEwpOwogCQlrdm1wcGNfYm9vazNzX3F1ZXVlX2lycXByaW8odmNwdSwgdmVjKTsKIAl9IGVsc2UgaWYgKHBhZ2VfZm91bmQgPT0gLUVJTlZBTCkgewogCQkvKiBQYWdlIG5vdCBmb3VuZCBpbiBndWVzdCBTTEIgKi8KQEAgLTUzMiwxMyArNTY4LDEyMiBAQAogCQlyID0ga3ZtcHBjX2VtdWxhdGVfbW1pbyhydW4sIHZjcHUpOwogCQlpZiAoIHIgPT0gUkVTVU1FX0hPU1RfTlYgKQogCQkJciA9IFJFU1VNRV9IT1NUOwotCQlpZiAoIHIgPT0gUkVTVU1FX0dVRVNUX05WICkKLQkJCXIgPSBSRVNVTUVfR1VFU1Q7CiAJfQogCiAJcmV0dXJuIHI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9mcHJfaW5kZXgoaW50IGkpCit7CisjaWZkZWYgQ09ORklHX1ZTWAorCWkgKj0gMjsKKyNlbmRpZgorCXJldHVybiBpOworfQorCisvKiBHaXZlIHVwIGV4dGVybmFsIHByb3ZpZGVyIChGUFUsIEFsdGl2ZWMsIFZTWCkgKi8KK3N0YXRpYyB2b2lkIGt2bXBwY19naXZldXBfZXh0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdWxvbmcgbXNyKQoreworCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0ID0gJmN1cnJlbnQtPnRocmVhZDsKKwl1NjQgKnZjcHVfZnByID0gdmNwdS0+YXJjaC5mcHI7CisJdTY0ICp2Y3B1X3ZzeCA9IHZjcHUtPmFyY2gudnNyOworCXU2NCAqdGhyZWFkX2ZwciA9ICh1NjQqKXQtPmZwcjsKKwlpbnQgaTsKKworCWlmICghKHZjcHUtPmFyY2guZ3Vlc3Rfb3duZWRfZXh0ICYgbXNyKSkKKwkJcmV0dXJuOworCisjaWZkZWYgREVCVUdfRVhUCisJcHJpbnRrKEtFUk5fSU5GTyAiR2l2aW5nIHVwIGV4dCAweCVseFxuIiwgbXNyKTsKKyNlbmRpZgorCisJc3dpdGNoIChtc3IpIHsKKwljYXNlIE1TUl9GUDoKKwkJZ2l2ZXVwX2ZwdShjdXJyZW50KTsKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmNwdS0+YXJjaC5mcHIpOyBpKyspCisJCQl2Y3B1X2ZwcltpXSA9IHRocmVhZF9mcHJbZ2V0X2Zwcl9pbmRleChpKV07CisKKwkJdmNwdS0+YXJjaC5mcHNjciA9IHQtPmZwc2NyLnZhbDsKKwkJYnJlYWs7CisJY2FzZSBNU1JfVkVDOgorI2lmZGVmIENPTkZJR19BTFRJVkVDCisJCWdpdmV1cF9hbHRpdmVjKGN1cnJlbnQpOworCQltZW1jcHkodmNwdS0+YXJjaC52ciwgdC0+dnIsIHNpemVvZih2Y3B1LT5hcmNoLnZyKSk7CisJCXZjcHUtPmFyY2gudnNjciA9IHQtPnZzY3I7CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBNU1JfVlNYOgorI2lmZGVmIENPTkZJR19WU1gKKwkJX19naXZldXBfdnN4KGN1cnJlbnQpOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2Y3B1LT5hcmNoLnZzcik7IGkrKykKKwkJCXZjcHVfdnN4W2ldID0gdGhyZWFkX2ZwcltnZXRfZnByX2luZGV4KGkpICsgMV07CisjZW5kaWYKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJdmNwdS0+YXJjaC5ndWVzdF9vd25lZF9leHQgJj0gfm1zcjsKKwljdXJyZW50LT50aHJlYWQucmVncy0+bXNyICY9IH5tc3I7CisJa3ZtcHBjX3JlY2FsY19zaGFkb3dfbXNyKHZjcHUpOworfQorCisvKiBIYW5kbGUgZXh0ZXJuYWwgcHJvdmlkZXJzIChGUFUsIEFsdGl2ZWMsIFZTWCkgKi8KK3N0YXRpYyBpbnQga3ZtcHBjX2hhbmRsZV9leHQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBpbnQgZXhpdF9uciwKKwkJCSAgICAgdWxvbmcgbXNyKQoreworCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0ID0gJmN1cnJlbnQtPnRocmVhZDsKKwl1NjQgKnZjcHVfZnByID0gdmNwdS0+YXJjaC5mcHI7CisJdTY0ICp2Y3B1X3ZzeCA9IHZjcHUtPmFyY2gudnNyOworCXU2NCAqdGhyZWFkX2ZwciA9ICh1NjQqKXQtPmZwcjsKKwlpbnQgaTsKKworCWlmICghKHZjcHUtPmFyY2gubXNyICYgbXNyKSkgeworCQlrdm1wcGNfYm9vazNzX3F1ZXVlX2lycXByaW8odmNwdSwgZXhpdF9ucik7CisJCXJldHVybiBSRVNVTUVfR1VFU1Q7CisJfQorCisjaWZkZWYgREVCVUdfRVhUCisJcHJpbnRrKEtFUk5fSU5GTyAiTG9hZGluZyB1cCBleHQgMHglbHhcbiIsIG1zcik7CisjZW5kaWYKKworCWN1cnJlbnQtPnRocmVhZC5yZWdzLT5tc3IgfD0gbXNyOworCisJc3dpdGNoIChtc3IpIHsKKwljYXNlIE1TUl9GUDoKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmNwdS0+YXJjaC5mcHIpOyBpKyspCisJCQl0aHJlYWRfZnByW2dldF9mcHJfaW5kZXgoaSldID0gdmNwdV9mcHJbaV07CisKKwkJdC0+ZnBzY3IudmFsID0gdmNwdS0+YXJjaC5mcHNjcjsKKwkJdC0+ZnBleGNfbW9kZSA9IDA7CisJCWt2bXBwY19sb2FkX3VwX2ZwdSgpOworCQlicmVhazsKKwljYXNlIE1TUl9WRUM6CisjaWZkZWYgQ09ORklHX0FMVElWRUMKKwkJbWVtY3B5KHQtPnZyLCB2Y3B1LT5hcmNoLnZyLCBzaXplb2YodmNwdS0+YXJjaC52cikpOworCQl0LT52c2NyID0gdmNwdS0+YXJjaC52c2NyOworCQl0LT52cnNhdmUgPSAtMTsKKwkJa3ZtcHBjX2xvYWRfdXBfYWx0aXZlYygpOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgTVNSX1ZTWDoKKyNpZmRlZiBDT05GSUdfVlNYCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZjcHUtPmFyY2gudnNyKTsgaSsrKQorCQkJdGhyZWFkX2ZwcltnZXRfZnByX2luZGV4KGkpICsgMV0gPSB2Y3B1X3ZzeFtpXTsKKwkJa3ZtcHBjX2xvYWRfdXBfdnN4KCk7CisjZW5kaWYKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJdmNwdS0+YXJjaC5ndWVzdF9vd25lZF9leHQgfD0gbXNyOworCisJa3ZtcHBjX3JlY2FsY19zaGFkb3dfbXNyKHZjcHUpOworCisJcmV0dXJuIFJFU1VNRV9HVUVTVDsKK30KKwogaW50IGt2bXBwY19oYW5kbGVfZXhpdChzdHJ1Y3Qga3ZtX3J1biAqcnVuLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBleGl0X25yKQogewpAQCAtNTYzLDcgKzcwOCw3IEBACiAJY2FzZSBCT09LM1NfSU5URVJSVVBUX0lOU1RfU1RPUkFHRToKIAkJdmNwdS0+c3RhdC5wZl9pbnN0cnVjKys7CiAJCS8qIG9ubHkgY2FyZSBhYm91dCBQVEVHIG5vdCBmb3VuZCBlcnJvcnMsIGJ1dCBsZWF2ZSBOWCBhbG9uZSAqLwotCQlpZiAodmNwdS0+YXJjaC5zaGFkb3dfbXNyICYgMHg0MDAwMDAwMCkgeworCQlpZiAodmNwdS0+YXJjaC5zaGFkb3dfc3JyMSAmIDB4NDAwMDAwMDApIHsKIAkJCXIgPSBrdm1wcGNfaGFuZGxlX3BhZ2VmYXVsdChydW4sIHZjcHUsIHZjcHUtPmFyY2gucGMsIGV4aXRfbnIpOwogCQkJdmNwdS0+c3RhdC5zcF9pbnN0cnVjKys7CiAJCX0gZWxzZSBpZiAodmNwdS0+YXJjaC5tbXUuaXNfZGNiejMyKHZjcHUpICYmCkBAIC01NzUsNyArNzIwLDcgQEAKIAkJCSAqLwogCQkJa3ZtcHBjX21tdV9wdGVfZmx1c2godmNwdSwgdmNwdS0+YXJjaC5wYywgfjB4RkZGVUxMKTsKIAkJfSBlbHNlIHsKLQkJCXZjcHUtPmFyY2gubXNyIHw9ICh2Y3B1LT5hcmNoLnNoYWRvd19tc3IgJiAweDU4MDAwMDAwKTsKKwkJCXZjcHUtPmFyY2gubXNyIHw9IHZjcHUtPmFyY2guc2hhZG93X3NycjEgJiAweDU4MDAwMDAwOwogCQkJa3ZtcHBjX2Jvb2szc19xdWV1ZV9pcnFwcmlvKHZjcHUsIGV4aXRfbnIpOwogCQkJa3ZtcHBjX21tdV9wdGVfZmx1c2godmNwdSwgdmNwdS0+YXJjaC5wYywgfjB4RkZGVUxMKTsKIAkJCXIgPSBSRVNVTUVfR1VFU1Q7CkBAIC02MjEsNiArNzY2LDkgQEAKIAljYXNlIEJPT0szU19JTlRFUlJVUFRfUFJPR1JBTToKIAl7CiAJCWVudW0gZW11bGF0aW9uX3Jlc3VsdCBlcjsKKwkJdWxvbmcgZmxhZ3M7CisKKwkJZmxhZ3MgPSB2Y3B1LT5hcmNoLnNoYWRvd19zcnIxICYgMHgxZjAwMDB1bGw7CiAKIAkJaWYgKHZjcHUtPmFyY2gubXNyICYgTVNSX1BSKSB7CiAjaWZkZWYgRVhJVF9ERUJVRwpAQCAtNjI4LDcgKzc3Niw3IEBACiAjZW5kaWYKIAkJCWlmICgodmNwdS0+YXJjaC5sYXN0X2luc3QgJiAweGZmMDAwN2ZmKSAhPQogCQkJICAgIChJTlNfRENCWiAmIDB4ZmZmZmZmZjcpKSB7Ci0JCQkJa3ZtcHBjX2Jvb2szc19xdWV1ZV9pcnFwcmlvKHZjcHUsIGV4aXRfbnIpOworCQkJCWt2bXBwY19jb3JlX3F1ZXVlX3Byb2dyYW0odmNwdSwgZmxhZ3MpOwogCQkJCXIgPSBSRVNVTUVfR1VFU1Q7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC02MzgsMTIgKzc4NiwxMiBAQAogCQllciA9IGt2bXBwY19lbXVsYXRlX2luc3RydWN0aW9uKHJ1biwgdmNwdSk7CiAJCXN3aXRjaCAoZXIpIHsKIAkJY2FzZSBFTVVMQVRFX0RPTkU6Ci0JCQlyID0gUkVTVU1FX0dVRVNUOworCQkJciA9IFJFU1VNRV9HVUVTVF9OVjsKIAkJCWJyZWFrOwogCQljYXNlIEVNVUxBVEVfRkFJTDoKIAkJCXByaW50ayhLRVJOX0NSSVQgIiVzOiBlbXVsYXRpb24gYXQgJWx4IGZhaWxlZCAoJTA4eClcbiIsCiAJCQkgICAgICAgX19mdW5jX18sIHZjcHUtPmFyY2gucGMsIHZjcHUtPmFyY2gubGFzdF9pbnN0KTsKLQkJCWt2bXBwY19ib29rM3NfcXVldWVfaXJxcHJpbyh2Y3B1LCBleGl0X25yKTsKKwkJCWt2bXBwY19jb3JlX3F1ZXVlX3Byb2dyYW0odmNwdSwgZmxhZ3MpOwogCQkJciA9IFJFU1VNRV9HVUVTVDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtNjUzLDIzICs4MDEsMzAgQEAKIAl9CiAJY2FzZSBCT09LM1NfSU5URVJSVVBUX1NZU0NBTEw6CiAjaWZkZWYgRVhJVF9ERUJVRwotCQlwcmludGsoS0VSTl9JTkZPICJTeXNjYWxsIE5yICVkXG4iLCAoaW50KXZjcHUtPmFyY2guZ3ByWzBdKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU3lzY2FsbCBOciAlZFxuIiwgKGludClrdm1wcGNfZ2V0X2dwcih2Y3B1LCAwKSk7CiAjZW5kaWYKIAkJdmNwdS0+c3RhdC5zeXNjYWxsX2V4aXRzKys7CiAJCWt2bXBwY19ib29rM3NfcXVldWVfaXJxcHJpbyh2Y3B1LCBleGl0X25yKTsKIAkJciA9IFJFU1VNRV9HVUVTVDsKIAkJYnJlYWs7Ci0JY2FzZSBCT09LM1NfSU5URVJSVVBUX01BQ0hJTkVfQ0hFQ0s6CiAJY2FzZSBCT09LM1NfSU5URVJSVVBUX0ZQX1VOQVZBSUw6Ci0JY2FzZSBCT09LM1NfSU5URVJSVVBUX1RSQUNFOgorCQlyID0ga3ZtcHBjX2hhbmRsZV9leHQodmNwdSwgZXhpdF9uciwgTVNSX0ZQKTsKKwkJYnJlYWs7CiAJY2FzZSBCT09LM1NfSU5URVJSVVBUX0FMVElWRUM6CisJCXIgPSBrdm1wcGNfaGFuZGxlX2V4dCh2Y3B1LCBleGl0X25yLCBNU1JfVkVDKTsKKwkJYnJlYWs7CiAJY2FzZSBCT09LM1NfSU5URVJSVVBUX1ZTWDoKKwkJciA9IGt2bXBwY19oYW5kbGVfZXh0KHZjcHUsIGV4aXRfbnIsIE1TUl9WU1gpOworCQlicmVhazsKKwljYXNlIEJPT0szU19JTlRFUlJVUFRfTUFDSElORV9DSEVDSzoKKwljYXNlIEJPT0szU19JTlRFUlJVUFRfVFJBQ0U6CiAJCWt2bXBwY19ib29rM3NfcXVldWVfaXJxcHJpbyh2Y3B1LCBleGl0X25yKTsKIAkJciA9IFJFU1VNRV9HVUVTVDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogVWdoIC0gYm9yayBoZXJlISBXaGF0IGRpZCB3ZSBnZXQ/ICovCi0JCXByaW50ayhLRVJOX0VNRVJHICJleGl0X25yPTB4JXggfCBwYz0weCVseCB8IG1zcj0weCVseFxuIiwgZXhpdF9uciwgdmNwdS0+YXJjaC5wYywgdmNwdS0+YXJjaC5zaGFkb3dfbXNyKTsKKwkJcHJpbnRrKEtFUk5fRU1FUkcgImV4aXRfbnI9MHgleCB8IHBjPTB4JWx4IHwgbXNyPTB4JWx4XG4iLAorCQkJZXhpdF9uciwgdmNwdS0+YXJjaC5wYywgdmNwdS0+YXJjaC5zaGFkb3dfc3JyMSk7CiAJCXIgPSBSRVNVTUVfSE9TVDsKIAkJQlVHKCk7CiAJCWJyZWFrOwpAQCAtNzEyLDEwICs4NjcsMTAgQEAKIAlpbnQgaTsKIAogCXJlZ3MtPnBjID0gdmNwdS0+YXJjaC5wYzsKLQlyZWdzLT5jciA9IHZjcHUtPmFyY2guY3I7CisJcmVncy0+Y3IgPSBrdm1wcGNfZ2V0X2NyKHZjcHUpOwogCXJlZ3MtPmN0ciA9IHZjcHUtPmFyY2guY3RyOwogCXJlZ3MtPmxyID0gdmNwdS0+YXJjaC5scjsKLQlyZWdzLT54ZXIgPSB2Y3B1LT5hcmNoLnhlcjsKKwlyZWdzLT54ZXIgPSBrdm1wcGNfZ2V0X3hlcih2Y3B1KTsKIAlyZWdzLT5tc3IgPSB2Y3B1LT5hcmNoLm1zcjsKIAlyZWdzLT5zcnIwID0gdmNwdS0+YXJjaC5zcnIwOwogCXJlZ3MtPnNycjEgPSB2Y3B1LT5hcmNoLnNycjE7CkBAIC03MjksNyArODg0LDcgQEAKIAlyZWdzLT5zcHJnNyA9IHZjcHUtPmFyY2guc3ByZzY7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdzLT5ncHIpOyBpKyspCi0JCXJlZ3MtPmdwcltpXSA9IHZjcHUtPmFyY2guZ3ByW2ldOworCQlyZWdzLT5ncHJbaV0gPSBrdm1wcGNfZ2V0X2dwcih2Y3B1LCBpKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzM5LDEwICs4OTQsMTAgQEAKIAlpbnQgaTsKIAogCXZjcHUtPmFyY2gucGMgPSByZWdzLT5wYzsKLQl2Y3B1LT5hcmNoLmNyID0gcmVncy0+Y3I7CisJa3ZtcHBjX3NldF9jcih2Y3B1LCByZWdzLT5jcik7CiAJdmNwdS0+YXJjaC5jdHIgPSByZWdzLT5jdHI7CiAJdmNwdS0+YXJjaC5sciA9IHJlZ3MtPmxyOwotCXZjcHUtPmFyY2gueGVyID0gcmVncy0+eGVyOworCWt2bXBwY19zZXRfeGVyKHZjcHUsIHJlZ3MtPnhlcik7CiAJa3ZtcHBjX3NldF9tc3IodmNwdSwgcmVncy0+bXNyKTsKIAl2Y3B1LT5hcmNoLnNycjAgPSByZWdzLT5zcnIwOwogCXZjcHUtPmFyY2guc3JyMSA9IHJlZ3MtPnNycjE7CkBAIC03NTQsOCArOTA5LDggQEAKIAl2Y3B1LT5hcmNoLnNwcmc2ID0gcmVncy0+c3ByZzU7CiAJdmNwdS0+YXJjaC5zcHJnNyA9IHJlZ3MtPnNwcmc2OwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmNwdS0+YXJjaC5ncHIpOyBpKyspCi0JCXZjcHUtPmFyY2guZ3ByW2ldID0gcmVncy0+Z3ByW2ldOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJlZ3MtPmdwcik7IGkrKykKKwkJa3ZtcHBjX3NldF9ncHIodmNwdSwgaSwgcmVncy0+Z3ByW2ldKTsKIAogCXJldHVybiAwOwogfQpAQCAtODUwLDcgKzEwMDUsNyBAQAogCWludCBpc19kaXJ0eSA9IDA7CiAJaW50IHIsIG47CiAKLQlkb3duX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOworCW11dGV4X2xvY2soJmt2bS0+c2xvdHNfbG9jayk7CiAKIAlyID0ga3ZtX2dldF9kaXJ0eV9sb2coa3ZtLCBsb2csICZpc19kaXJ0eSk7CiAJaWYgKHIpCkBAIC04NTgsNyArMTAxMyw3IEBACiAKIAkvKiBJZiBub3RoaW5nIGlzIGRpcnR5LCBkb24ndCBib3RoZXIgbWVzc2luZyB3aXRoIHBhZ2UgdGFibGVzLiAqLwogCWlmIChpc19kaXJ0eSkgewotCQltZW1zbG90ID0gJmt2bS0+bWVtc2xvdHNbbG9nLT5zbG90XTsKKwkJbWVtc2xvdCA9ICZrdm0tPm1lbXNsb3RzLT5tZW1zbG90c1tsb2ctPnNsb3RdOwogCiAJCWdhID0gbWVtc2xvdC0+YmFzZV9nZm4gPDwgUEFHRV9TSElGVDsKIAkJZ2FfZW5kID0gZ2EgKyAobWVtc2xvdC0+bnBhZ2VzIDw8IFBBR0VfU0hJRlQpOwpAQCAtODcyLDcgKzEwMjcsNyBAQAogCiAJciA9IDA7CiBvdXQ6Ci0JdXBfd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPnNsb3RzX2xvY2spOwogCXJldHVybiByOwogfQogCkBAIC05MTAsNiArMTA2NSw3IEBACiAJdmNwdS0+YXJjaC50cmFtcG9saW5lX2xvd21lbSA9IGt2bXBwY190cmFtcG9saW5lX2xvd21lbTsKIAl2Y3B1LT5hcmNoLnRyYW1wb2xpbmVfZW50ZXIgPSBrdm1wcGNfdHJhbXBvbGluZV9lbnRlcjsKIAl2Y3B1LT5hcmNoLmhpZ2htZW1faGFuZGxlciA9ICh1bG9uZylrdm1wcGNfaGFuZGxlcl9oaWdobWVtOworCXZjcHUtPmFyY2gucm1jYWxsID0gKih1bG9uZyopa3ZtcHBjX3JtY2FsbDsKIAogCXZjcHUtPmFyY2guc2hhZG93X21zciA9IE1TUl9VU0VSNjQ7CiAKQEAgLTk0Myw2ICsxMDk5LDEwIEBACiBpbnQgX19rdm1wcGNfdmNwdV9ydW4oc3RydWN0IGt2bV9ydW4gKmt2bV9ydW4sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpbnQgcmV0OworCXN0cnVjdCB0aHJlYWRfc3RydWN0IGV4dF9ia3A7CisJYm9vbCBzYXZlX3ZlYyA9IGN1cnJlbnQtPnRocmVhZC51c2VkX3ZyOworCWJvb2wgc2F2ZV92c3ggPSBjdXJyZW50LT50aHJlYWQudXNlZF92c3I7CisJdWxvbmcgZXh0X21zcjsKIAogCS8qIE5vIG5lZWQgdG8gZ28gaW50byB0aGUgZ3Vlc3Qgd2hlbiBhbGwgd2UgZG8gaXMgZ29pbmcgb3V0ICovCiAJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CkBAIC05NTAsNiArMTExMCwzNSBAQAogCQlyZXR1cm4gLUVJTlRSOwogCX0KIAorCS8qIFNhdmUgRlBVIHN0YXRlIGluIHN0YWNrICovCisJaWYgKGN1cnJlbnQtPnRocmVhZC5yZWdzLT5tc3IgJiBNU1JfRlApCisJCWdpdmV1cF9mcHUoY3VycmVudCk7CisJbWVtY3B5KGV4dF9ia3AuZnByLCBjdXJyZW50LT50aHJlYWQuZnByLCBzaXplb2YoY3VycmVudC0+dGhyZWFkLmZwcikpOworCWV4dF9ia3AuZnBzY3IgPSBjdXJyZW50LT50aHJlYWQuZnBzY3I7CisJZXh0X2JrcC5mcGV4Y19tb2RlID0gY3VycmVudC0+dGhyZWFkLmZwZXhjX21vZGU7CisKKyNpZmRlZiBDT05GSUdfQUxUSVZFQworCS8qIFNhdmUgQWx0aXZlYyBzdGF0ZSBpbiBzdGFjayAqLworCWlmIChzYXZlX3ZlYykgeworCQlpZiAoY3VycmVudC0+dGhyZWFkLnJlZ3MtPm1zciAmIE1TUl9WRUMpCisJCQlnaXZldXBfYWx0aXZlYyhjdXJyZW50KTsKKwkJbWVtY3B5KGV4dF9ia3AudnIsIGN1cnJlbnQtPnRocmVhZC52ciwgc2l6ZW9mKGV4dF9ia3AudnIpKTsKKwkJZXh0X2JrcC52c2NyID0gY3VycmVudC0+dGhyZWFkLnZzY3I7CisJCWV4dF9ia3AudnJzYXZlID0gY3VycmVudC0+dGhyZWFkLnZyc2F2ZTsKKwl9CisJZXh0X2JrcC51c2VkX3ZyID0gY3VycmVudC0+dGhyZWFkLnVzZWRfdnI7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19WU1gKKwkvKiBTYXZlIFZTWCBzdGF0ZSBpbiBzdGFjayAqLworCWlmIChzYXZlX3ZzeCAmJiAoY3VycmVudC0+dGhyZWFkLnJlZ3MtPm1zciAmIE1TUl9WU1gpKQorCQkJX19naXZldXBfdnN4KGN1cnJlbnQpOworCWV4dF9ia3AudXNlZF92c3IgPSBjdXJyZW50LT50aHJlYWQudXNlZF92c3I7CisjZW5kaWYKKworCS8qIFJlbWVtYmVyIHRoZSBNU1Igd2l0aCBkaXNhYmxlZCBleHRlbnNpb25zICovCisJZXh0X21zciA9IGN1cnJlbnQtPnRocmVhZC5yZWdzLT5tc3I7CisKIAkvKiBYWFggd2UgZ2V0IGNhbGxlZCB3aXRoIGlycSBkaXNhYmxlZCAtIGNoYW5nZSB0aGF0ISAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKIApAQCAtOTU3LDYgKzExNDYsMzIgQEAKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKKwljdXJyZW50LT50aHJlYWQucmVncy0+bXNyID0gZXh0X21zcjsKKworCS8qIE1ha2Ugc3VyZSB3ZSBzYXZlIHRoZSBndWVzdCBGUFUvQWx0aXZlYy9WU1ggc3RhdGUgKi8KKwlrdm1wcGNfZ2l2ZXVwX2V4dCh2Y3B1LCBNU1JfRlApOworCWt2bXBwY19naXZldXBfZXh0KHZjcHUsIE1TUl9WRUMpOworCWt2bXBwY19naXZldXBfZXh0KHZjcHUsIE1TUl9WU1gpOworCisJLyogUmVzdG9yZSBGUFUgc3RhdGUgZnJvbSBzdGFjayAqLworCW1lbWNweShjdXJyZW50LT50aHJlYWQuZnByLCBleHRfYmtwLmZwciwgc2l6ZW9mKGV4dF9ia3AuZnByKSk7CisJY3VycmVudC0+dGhyZWFkLmZwc2NyID0gZXh0X2JrcC5mcHNjcjsKKwljdXJyZW50LT50aHJlYWQuZnBleGNfbW9kZSA9IGV4dF9ia3AuZnBleGNfbW9kZTsKKworI2lmZGVmIENPTkZJR19BTFRJVkVDCisJLyogUmVzdG9yZSBBbHRpdmVjIHN0YXRlIGZyb20gc3RhY2sgKi8KKwlpZiAoc2F2ZV92ZWMgJiYgY3VycmVudC0+dGhyZWFkLnVzZWRfdnIpIHsKKwkJbWVtY3B5KGN1cnJlbnQtPnRocmVhZC52ciwgZXh0X2JrcC52ciwgc2l6ZW9mKGV4dF9ia3AudnIpKTsKKwkJY3VycmVudC0+dGhyZWFkLnZzY3IgPSBleHRfYmtwLnZzY3I7CisJCWN1cnJlbnQtPnRocmVhZC52cnNhdmU9IGV4dF9ia3AudnJzYXZlOworCX0KKwljdXJyZW50LT50aHJlYWQudXNlZF92ciA9IGV4dF9ia3AudXNlZF92cjsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1ZTWAorCWN1cnJlbnQtPnRocmVhZC51c2VkX3ZzciA9IGV4dF9ia3AudXNlZF92c3I7CisjZW5kaWYKKwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VtdWxhdGUuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VtdWxhdGUuYwppbmRleCAxMDI3ZWFjLi4yYjBlZTdlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbXVsYXRlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW11bGF0ZS5jCkBAIC02NSwxMSArNjUsMTEgQEAKIAljYXNlIDMxOgogCQlzd2l0Y2ggKGdldF94b3AoaW5zdCkpIHsKIAkJY2FzZSBPUF8zMV9YT1BfTUZNU1I6Ci0JCQl2Y3B1LT5hcmNoLmdwcltnZXRfcnQoaW5zdCldID0gdmNwdS0+YXJjaC5tc3I7CisJCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBnZXRfcnQoaW5zdCksIHZjcHUtPmFyY2gubXNyKTsKIAkJCWJyZWFrOwogCQljYXNlIE9QXzMxX1hPUF9NVE1TUkQ6CiAJCXsKLQkJCXVsb25nIHJzID0gdmNwdS0+YXJjaC5ncHJbZ2V0X3JzKGluc3QpXTsKKwkJCXVsb25nIHJzID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgZ2V0X3JzKGluc3QpKTsKIAkJCWlmIChpbnN0ICYgMHgxMDAwMCkgewogCQkJCXZjcHUtPmFyY2gubXNyICY9IH4oTVNSX1JJIHwgTVNSX0VFKTsKIAkJCQl2Y3B1LT5hcmNoLm1zciB8PSBycyAmIChNU1JfUkkgfCBNU1JfRUUpOwpAQCAtNzgsMzAgKzc4LDMwIEBACiAJCQlicmVhazsKIAkJfQogCQljYXNlIE9QXzMxX1hPUF9NVE1TUjoKLQkJCWt2bXBwY19zZXRfbXNyKHZjcHUsIHZjcHUtPmFyY2guZ3ByW2dldF9ycyhpbnN0KV0pOworCQkJa3ZtcHBjX3NldF9tc3IodmNwdSwga3ZtcHBjX2dldF9ncHIodmNwdSwgZ2V0X3JzKGluc3QpKSk7CiAJCQlicmVhazsKIAkJY2FzZSBPUF8zMV9YT1BfTUZTUklOOgogCQl7CiAJCQlpbnQgc3JudW07CiAKLQkJCXNybnVtID0gKHZjcHUtPmFyY2guZ3ByW2dldF9yYihpbnN0KV0gPj4gMjgpICYgMHhmOworCQkJc3JudW0gPSAoa3ZtcHBjX2dldF9ncHIodmNwdSwgZ2V0X3JiKGluc3QpKSA+PiAyOCkgJiAweGY7CiAJCQlpZiAodmNwdS0+YXJjaC5tbXUubWZzcmluKSB7CiAJCQkJdTMyIHNyOwogCQkJCXNyID0gdmNwdS0+YXJjaC5tbXUubWZzcmluKHZjcHUsIHNybnVtKTsKLQkJCQl2Y3B1LT5hcmNoLmdwcltnZXRfcnQoaW5zdCldID0gc3I7CisJCQkJa3ZtcHBjX3NldF9ncHIodmNwdSwgZ2V0X3J0KGluc3QpLCBzcik7CiAJCQl9CiAJCQlicmVhazsKIAkJfQogCQljYXNlIE9QXzMxX1hPUF9NVFNSSU46CiAJCQl2Y3B1LT5hcmNoLm1tdS5tdHNyaW4odmNwdSwKLQkJCQkodmNwdS0+YXJjaC5ncHJbZ2V0X3JiKGluc3QpXSA+PiAyOCkgJiAweGYsCi0JCQkJdmNwdS0+YXJjaC5ncHJbZ2V0X3JzKGluc3QpXSk7CisJCQkJKGt2bXBwY19nZXRfZ3ByKHZjcHUsIGdldF9yYihpbnN0KSkgPj4gMjgpICYgMHhmLAorCQkJCWt2bXBwY19nZXRfZ3ByKHZjcHUsIGdldF9ycyhpbnN0KSkpOwogCQkJYnJlYWs7CiAJCWNhc2UgT1BfMzFfWE9QX1RMQklFOgogCQljYXNlIE9QXzMxX1hPUF9UTEJJRUw6CiAJCXsKIAkJCWJvb2wgbGFyZ2UgPSAoaW5zdCAmIDB4MDAyMDAwMDApID8gdHJ1ZSA6IGZhbHNlOwotCQkJdWxvbmcgYWRkciA9IHZjcHUtPmFyY2guZ3ByW2dldF9yYihpbnN0KV07CisJCQl1bG9uZyBhZGRyID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgZ2V0X3JiKGluc3QpKTsKIAkJCXZjcHUtPmFyY2gubW11LnRsYmllKHZjcHUsIGFkZHIsIGxhcmdlKTsKIAkJCWJyZWFrOwogCQl9CkBAIC0xMTEsMTQgKzExMSwxNiBAQAogCQkJaWYgKCF2Y3B1LT5hcmNoLm1tdS5zbGJtdGUpCiAJCQkJcmV0dXJuIEVNVUxBVEVfRkFJTDsKIAotCQkJdmNwdS0+YXJjaC5tbXUuc2xibXRlKHZjcHUsIHZjcHUtPmFyY2guZ3ByW2dldF9ycyhpbnN0KV0sCi0JCQkJCQl2Y3B1LT5hcmNoLmdwcltnZXRfcmIoaW5zdCldKTsKKwkJCXZjcHUtPmFyY2gubW11LnNsYm10ZSh2Y3B1LAorCQkJCQlrdm1wcGNfZ2V0X2dwcih2Y3B1LCBnZXRfcnMoaW5zdCkpLAorCQkJCQlrdm1wcGNfZ2V0X2dwcih2Y3B1LCBnZXRfcmIoaW5zdCkpKTsKIAkJCWJyZWFrOwogCQljYXNlIE9QXzMxX1hPUF9TTEJJRToKIAkJCWlmICghdmNwdS0+YXJjaC5tbXUuc2xiaWUpCiAJCQkJcmV0dXJuIEVNVUxBVEVfRkFJTDsKIAotCQkJdmNwdS0+YXJjaC5tbXUuc2xiaWUodmNwdSwgdmNwdS0+YXJjaC5ncHJbZ2V0X3JiKGluc3QpXSk7CisJCQl2Y3B1LT5hcmNoLm1tdS5zbGJpZSh2Y3B1LAorCQkJCQlrdm1wcGNfZ2V0X2dwcih2Y3B1LCBnZXRfcmIoaW5zdCkpKTsKIAkJCWJyZWFrOwogCQljYXNlIE9QXzMxX1hPUF9TTEJJQToKIAkJCWlmICghdmNwdS0+YXJjaC5tbXUuc2xiaWEpCkBAIC0xMzIsOSArMTM0LDkgQEAKIAkJCX0gZWxzZSB7CiAJCQkJdWxvbmcgdCwgcmI7CiAKLQkJCQlyYiA9IHZjcHUtPmFyY2guZ3ByW2dldF9yYihpbnN0KV07CisJCQkJcmIgPSBrdm1wcGNfZ2V0X2dwcih2Y3B1LCBnZXRfcmIoaW5zdCkpOwogCQkJCXQgPSB2Y3B1LT5hcmNoLm1tdS5zbGJtZmVlKHZjcHUsIHJiKTsKLQkJCQl2Y3B1LT5hcmNoLmdwcltnZXRfcnQoaW5zdCldID0gdDsKKwkJCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBnZXRfcnQoaW5zdCksIHQpOwogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgT1BfMzFfWE9QX1NMQk1GRVY6CkBAIC0xNDMsMjAgKzE0NSwyMCBAQAogCQkJfSBlbHNlIHsKIAkJCQl1bG9uZyB0LCByYjsKIAotCQkJCXJiID0gdmNwdS0+YXJjaC5ncHJbZ2V0X3JiKGluc3QpXTsKKwkJCQlyYiA9IGt2bXBwY19nZXRfZ3ByKHZjcHUsIGdldF9yYihpbnN0KSk7CiAJCQkJdCA9IHZjcHUtPmFyY2gubW11LnNsYm1mZXYodmNwdSwgcmIpOwotCQkJCXZjcHUtPmFyY2guZ3ByW2dldF9ydChpbnN0KV0gPSB0OworCQkJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIGdldF9ydChpbnN0KSwgdCk7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBPUF8zMV9YT1BfRENCWjoKIAkJewotCQkJdWxvbmcgcmIgPSAgdmNwdS0+YXJjaC5ncHJbZ2V0X3JiKGluc3QpXTsKKwkJCXVsb25nIHJiID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgZ2V0X3JiKGluc3QpKTsKIAkJCXVsb25nIHJhID0gMDsKIAkJCXVsb25nIGFkZHI7CiAJCQl1MzIgemVyb3NbOF0gPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfTsKIAogCQkJaWYgKGdldF9yYShpbnN0KSkKLQkJCQlyYSA9IHZjcHUtPmFyY2guZ3ByW2dldF9yYShpbnN0KV07CisJCQkJcmEgPSBrdm1wcGNfZ2V0X2dwcih2Y3B1LCBnZXRfcmEoaW5zdCkpOwogCiAJCQlhZGRyID0gKHJhICsgcmIpICYgfjMxVUxMOwogCQkJaWYgKCEodmNwdS0+YXJjaC5tc3IgJiBNU1JfU0YpKQpAQCAtMjMzLDQzICsyMzUsNDQgQEAKIGludCBrdm1wcGNfY29yZV9lbXVsYXRlX210c3ByKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNwcm4sIGludCBycykKIHsKIAlpbnQgZW11bGF0ZWQgPSBFTVVMQVRFX0RPTkU7CisJdWxvbmcgc3ByX3ZhbCA9IGt2bXBwY19nZXRfZ3ByKHZjcHUsIHJzKTsKIAogCXN3aXRjaCAoc3BybikgewogCWNhc2UgU1BSTl9TRFIxOgotCQl0b19ib29rM3ModmNwdSktPnNkcjEgPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCXRvX2Jvb2szcyh2Y3B1KS0+c2RyMSA9IHNwcl92YWw7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9EU0lTUjoKLQkJdG9fYm9vazNzKHZjcHUpLT5kc2lzciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJdG9fYm9vazNzKHZjcHUpLT5kc2lzciA9IHNwcl92YWw7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9EQVI6Ci0JCXZjcHUtPmFyY2guZGVhciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJdmNwdS0+YXJjaC5kZWFyID0gc3ByX3ZhbDsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0hJT1I6Ci0JCXRvX2Jvb2szcyh2Y3B1KS0+aGlvciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJdG9fYm9vazNzKHZjcHUpLT5oaW9yID0gc3ByX3ZhbDsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0lCQVQwVSAuLi4gU1BSTl9JQkFUM0w6CiAJY2FzZSBTUFJOX0lCQVQ0VSAuLi4gU1BSTl9JQkFUN0w6CiAJY2FzZSBTUFJOX0RCQVQwVSAuLi4gU1BSTl9EQkFUM0w6CiAJY2FzZSBTUFJOX0RCQVQ0VSAuLi4gU1BSTl9EQkFUN0w6Ci0JCWt2bXBwY193cml0ZV9iYXQodmNwdSwgc3BybiwgKHUzMil2Y3B1LT5hcmNoLmdwcltyc10pOworCQlrdm1wcGNfd3JpdGVfYmF0KHZjcHUsIHNwcm4sICh1MzIpc3ByX3ZhbCk7CiAJCS8qIEJBVCB3cml0ZXMgaGFwcGVuIHNvIHJhcmVseSB0aGF0IHdlJ3JlIG9rIHRvIGZsdXNoCiAJCSAqIGV2ZXJ5dGhpbmcgaGVyZSAqLwogCQlrdm1wcGNfbW11X3B0ZV9mbHVzaCh2Y3B1LCAwLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0hJRDA6Ci0JCXRvX2Jvb2szcyh2Y3B1KS0+aGlkWzBdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQl0b19ib29rM3ModmNwdSktPmhpZFswXSA9IHNwcl92YWw7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9ISUQxOgotCQl0b19ib29rM3ModmNwdSktPmhpZFsxXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJdG9fYm9vazNzKHZjcHUpLT5oaWRbMV0gPSBzcHJfdmFsOwogCQlicmVhazsKIAljYXNlIFNQUk5fSElEMjoKLQkJdG9fYm9vazNzKHZjcHUpLT5oaWRbMl0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCXRvX2Jvb2szcyh2Y3B1KS0+aGlkWzJdID0gc3ByX3ZhbDsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0hJRDQ6Ci0JCXRvX2Jvb2szcyh2Y3B1KS0+aGlkWzRdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQl0b19ib29rM3ModmNwdSktPmhpZFs0XSA9IHNwcl92YWw7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9ISUQ1OgotCQl0b19ib29rM3ModmNwdSktPmhpZFs1XSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJdG9fYm9vazNzKHZjcHUpLT5oaWRbNV0gPSBzcHJfdmFsOwogCQkvKiBndWVzdCBISUQ1IHNldCBjYW4gY2hhbmdlIGlzX2RjYnozMiAqLwogCQlpZiAodmNwdS0+YXJjaC5tbXUuaXNfZGNiejMyKHZjcHUpICYmCiAJCSAgICAobWZtc3IoKSAmIE1TUl9IVikpCkBAIC0yOTksMzggKzMwMiwzOCBAQAogCiAJc3dpdGNoIChzcHJuKSB7CiAJY2FzZSBTUFJOX1NEUjE6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHRvX2Jvb2szcyh2Y3B1KS0+c2RyMTsKKwkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIHRvX2Jvb2szcyh2Y3B1KS0+c2RyMSk7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9EU0lTUjoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdG9fYm9vazNzKHZjcHUpLT5kc2lzcjsKKwkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIHRvX2Jvb2szcyh2Y3B1KS0+ZHNpc3IpOwogCQlicmVhazsKIAljYXNlIFNQUk5fREFSOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmRlYXI7CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1LT5hcmNoLmRlYXIpOwogCQlicmVhazsKIAljYXNlIFNQUk5fSElPUjoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdG9fYm9vazNzKHZjcHUpLT5oaW9yOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdG9fYm9vazNzKHZjcHUpLT5oaW9yKTsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0hJRDA6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHRvX2Jvb2szcyh2Y3B1KS0+aGlkWzBdOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdG9fYm9vazNzKHZjcHUpLT5oaWRbMF0pOwogCQlicmVhazsKIAljYXNlIFNQUk5fSElEMToKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdG9fYm9vazNzKHZjcHUpLT5oaWRbMV07CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB0b19ib29rM3ModmNwdSktPmhpZFsxXSk7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9ISUQyOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB0b19ib29rM3ModmNwdSktPmhpZFsyXTsKKwkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIHRvX2Jvb2szcyh2Y3B1KS0+aGlkWzJdKTsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0hJRDQ6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHRvX2Jvb2szcyh2Y3B1KS0+aGlkWzRdOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdG9fYm9vazNzKHZjcHUpLT5oaWRbNF0pOwogCQlicmVhazsKIAljYXNlIFNQUk5fSElENToKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdG9fYm9vazNzKHZjcHUpLT5oaWRbNV07CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB0b19ib29rM3ModmNwdSktPmhpZFs1XSk7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9USFJNMToKIAljYXNlIFNQUk5fVEhSTTI6CiAJY2FzZSBTUFJOX1RIUk0zOgogCWNhc2UgU1BSTl9DVFJMRjoKIAljYXNlIFNQUk5fQ1RSTFQ6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IDA7CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCAwKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fSU5GTyAiS1ZNOiBpbnZhbGlkIFNQUiByZWFkOiAlZFxuIiwgc3Bybik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9leHBvcnRzLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9leHBvcnRzLmMKaW5kZXggNWIyZGIzOC4uMWRkNWExZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZXhwb3J0cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2V4cG9ydHMuYwpAQCAtMjIsMyArMjIsMTEgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtcHBjX3RyYW1wb2xpbmVfZW50ZXIpOwogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtcHBjX3RyYW1wb2xpbmVfbG93bWVtKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGt2bXBwY19ybWNhbGwpOworRVhQT1JUX1NZTUJPTF9HUEwoa3ZtcHBjX2xvYWRfdXBfZnB1KTsKKyNpZmRlZiBDT05GSUdfQUxUSVZFQworRVhQT1JUX1NZTUJPTF9HUEwoa3ZtcHBjX2xvYWRfdXBfYWx0aXZlYyk7CisjZW5kaWYKKyNpZmRlZiBDT05GSUdfVlNYCitFWFBPUlRfU1lNQk9MX0dQTChrdm1wcGNfbG9hZF91cF92c3gpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9pbnRlcnJ1cHRzLlMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9pbnRlcnJ1cHRzLlMKaW5kZXggN2I1NWQ4MC4uYzE1ODRkMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfaW50ZXJydXB0cy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2ludGVycnVwdHMuUwpAQCAtMjgsMTEgKzI4LDYgQEAKICNkZWZpbmUgVUxPTkdfU0laRSA4CiAjZGVmaW5lIFZDUFVfR1BSKG4pICAgICAoVkNQVV9HUFJTICsgKG4gKiBVTE9OR19TSVpFKSkKIAotLm1hY3JvIG1mcGFjYSB0bXBfcmVnLCBzcmNfcmVnLCBvZmZzZXQsIHZjcHVfcmVnCi0JbGQJXHRtcF9yZWcsIChQQUNBX0VYTUMrXG9mZnNldCkocjEzKQotCXN0ZAlcdG1wX3JlZywgVkNQVV9HUFIoXHNyY19yZWcpKFx2Y3B1X3JlZykKLS5lbmRtCi0KIC5tYWNybyBESVNBQkxFX0lOVEVSUlVQVFMKICAgICAgICBtZm1zciAgIHIwCiAgICAgICAgcmxkaWNsICByMCxyMCw0OCwxCkBAIC00MCw2ICszNSwyNiBAQAogICAgICAgIG10bXNyZCAgcjAsMQogLmVuZG0KIAorI2RlZmluZSBWQ1BVX0xPQURfTlZHUFJTKHZjcHUpIFwKKwlsZAlyMTQsIFZDUFVfR1BSKHIxNCkodmNwdSk7IFwKKwlsZAlyMTUsIFZDUFVfR1BSKHIxNSkodmNwdSk7IFwKKwlsZAlyMTYsIFZDUFVfR1BSKHIxNikodmNwdSk7IFwKKwlsZAlyMTcsIFZDUFVfR1BSKHIxNykodmNwdSk7IFwKKwlsZAlyMTgsIFZDUFVfR1BSKHIxOCkodmNwdSk7IFwKKwlsZAlyMTksIFZDUFVfR1BSKHIxOSkodmNwdSk7IFwKKwlsZAlyMjAsIFZDUFVfR1BSKHIyMCkodmNwdSk7IFwKKwlsZAlyMjEsIFZDUFVfR1BSKHIyMSkodmNwdSk7IFwKKwlsZAlyMjIsIFZDUFVfR1BSKHIyMikodmNwdSk7IFwKKwlsZAlyMjMsIFZDUFVfR1BSKHIyMykodmNwdSk7IFwKKwlsZAlyMjQsIFZDUFVfR1BSKHIyNCkodmNwdSk7IFwKKwlsZAlyMjUsIFZDUFVfR1BSKHIyNSkodmNwdSk7IFwKKwlsZAlyMjYsIFZDUFVfR1BSKHIyNikodmNwdSk7IFwKKwlsZAlyMjcsIFZDUFVfR1BSKHIyNykodmNwdSk7IFwKKwlsZAlyMjgsIFZDUFVfR1BSKHIyOCkodmNwdSk7IFwKKwlsZAlyMjksIFZDUFVfR1BSKHIyOSkodmNwdSk7IFwKKwlsZAlyMzAsIFZDUFVfR1BSKHIzMCkodmNwdSk7IFwKKwlsZAlyMzEsIFZDUFVfR1BSKHIzMSkodmNwdSk7IFwKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqICAgICBHdWVzdCBlbnRyeSAvIGV4aXQgY29kZSB0aGF0IGlzIGluIGtlcm5lbCBtb2R1bGUgbWVtb3J5IChoaWdobWVtKSAgICAgKgpAQCAtNjcsNjEgKzgyLDMyIEBACiAJU0FWRV9OVkdQUlMocjEpCiAKIAkvKiBTYXZlIExSICovCi0JbWZscglyMTQKLQlzdGQJcjE0LCBfTElOSyhyMSkKLQotLyogWFhYIG9wdGltaXplIG5vbi12b2xhdGlsZSBsb2FkaW5nIGF3YXkgKi8KLWt2bV9zdGFydF9saWdodHdlaWdodDoKLQotCURJU0FCTEVfSU5URVJSVVBUUwotCi0JLyogU2F2ZSBSMS9SMiBpbiB0aGUgUEFDQSAqLwotCXN0ZAlyMSwgUEFDQVIxKHIxMykKLQlzdGQJcjIsIChQQUNBX0VYTUMrRVhfU1JSMCkocjEzKQotCWxkCXIzLCBWQ1BVX0hJR0hNRU1fSEFORExFUihyNCkKLQlzdGQJcjMsIFBBQ0FTQVZFRE1TUihyMTMpCisJc3RkCXIwLCBfTElOSyhyMSkKIAogCS8qIExvYWQgbm9uLXZvbGF0aWxlIGd1ZXN0IHN0YXRlIGZyb20gdGhlIHZjcHUgKi8KLQlsZAlyMTQsIFZDUFVfR1BSKHIxNCkocjQpCi0JbGQJcjE1LCBWQ1BVX0dQUihyMTUpKHI0KQotCWxkCXIxNiwgVkNQVV9HUFIocjE2KShyNCkKLQlsZAlyMTcsIFZDUFVfR1BSKHIxNykocjQpCi0JbGQJcjE4LCBWQ1BVX0dQUihyMTgpKHI0KQotCWxkCXIxOSwgVkNQVV9HUFIocjE5KShyNCkKLQlsZAlyMjAsIFZDUFVfR1BSKHIyMCkocjQpCi0JbGQJcjIxLCBWQ1BVX0dQUihyMjEpKHI0KQotCWxkCXIyMiwgVkNQVV9HUFIocjIyKShyNCkKLQlsZAlyMjMsIFZDUFVfR1BSKHIyMykocjQpCi0JbGQJcjI0LCBWQ1BVX0dQUihyMjQpKHI0KQotCWxkCXIyNSwgVkNQVV9HUFIocjI1KShyNCkKLQlsZAlyMjYsIFZDUFVfR1BSKHIyNikocjQpCi0JbGQJcjI3LCBWQ1BVX0dQUihyMjcpKHI0KQotCWxkCXIyOCwgVkNQVV9HUFIocjI4KShyNCkKLQlsZAlyMjksIFZDUFVfR1BSKHIyOSkocjQpCi0JbGQJcjMwLCBWQ1BVX0dQUihyMzApKHI0KQotCWxkCXIzMSwgVkNQVV9HUFIocjMxKShyNCkKKwlWQ1BVX0xPQURfTlZHUFJTKHI0KQorCisJLyogU2F2ZSBSMS9SMiBpbiB0aGUgUEFDQSAqLworCXN0ZAlyMSwgUEFDQV9LVk1fSE9TVF9SMShyMTMpCisJc3RkCXIyLCBQQUNBX0tWTV9IT1NUX1IyKHIxMykKKworCS8qIFhYWCBzd2FwIGluL291dCBvbiBsb2FkPyAqLworCWxkCXIzLCBWQ1BVX0hJR0hNRU1fSEFORExFUihyNCkKKwlzdGQJcjMsIFBBQ0FfS1ZNX1ZNSEFORExFUihyMTMpCisKK2t2bV9zdGFydF9saWdodHdlaWdodDoKIAogCWxkCXI5LCBWQ1BVX1BDKHI0KQkJCS8qIHI5ID0gdmNwdS0+YXJjaC5wYyAqLwogCWxkCXIxMCwgVkNQVV9TSEFET1dfTVNSKHI0KQkvKiByMTAgPSB2Y3B1LT5hcmNoLnNoYWRvd19tc3IgKi8KIAotCWxkCXIzLCBWQ1BVX1RSQU1QT0xJTkVfRU5URVIocjQpCi0JbXRzcnIwCXIzCi0KLQlMT0FEX1JFR19JTU1FRElBVEUocjMsIE1TUl9LRVJORUwgJiB+KE1TUl9JUiB8IE1TUl9EUikpCi0JbXRzcnIxCXIzCi0KLQkvKiBMb2FkIGd1ZXN0IHN0YXRlIGluIHRoZSByZXNwZWN0aXZlIHJlZ2lzdGVycyAqLwotCWx3eglyMywgVkNQVV9DUihyNCkJCS8qIHIzID0gdmNwdS0+YXJjaC5jciAqLwotCXN0dwlyMywgKFBBQ0FfRVhNQyArIEVYX0NDUikocjEzKQotCi0JbGQJcjMsIFZDUFVfQ1RSKHI0KQkvKiByMyA9IHZjcHUtPmFyY2guY3RyICovCi0JbXRjdHIJcjMJCQkvKiBDVFIgPSByMyAqLworCS8qIExvYWQgc29tZSBndWVzdCBzdGF0ZSBpbiB0aGUgcmVzcGVjdGl2ZSByZWdpc3RlcnMgKi8KKwlsZAlyNSwgVkNQVV9DVFIocjQpCS8qIHI1ID0gdmNwdS0+YXJjaC5jdHIgKi8KKwkJCQkJLyogd2lsbCBiZSBzd2FwcGVkIGluIGJ5IHJtY2FsbCAqLwogCiAJbGQJcjMsIFZDUFVfTFIocjQpCQkvKiByMyA9IHZjcHUtPmFyY2gubHIgKi8KIAltdGxyCXIzCQkJLyogTFIgPSByMyAqLwogCi0JbGQJcjMsIFZDUFVfWEVSKHI0KQkvKiByMyA9IHZjcHUtPmFyY2gueGVyICovCi0Jc3RkCXIzLCAoUEFDQV9FWE1DICsgRVhfUjMpKHIxMykKKwlESVNBQkxFX0lOVEVSUlVQVFMKIAogCS8qIFNvbWUgZ3Vlc3RzIG1heSBuZWVkIHRvIGhhdmUgZGNieiBzZXQgdG8gMzIgYnl0ZSBsZW5ndGguCiAJICoKQEAgLTE0MSwzNiArMTI3LDE1IEBACiAJbXRzcHIgICBTUFJOX0hJRDUscjMKIAogbm9fZGNiejMyX29uOgotCS8qCUxvYWQgZ3Vlc3QgR1BScyAqLwogCi0JbGQJcjMsIFZDUFVfR1BSKHI5KShyNCkKLQlzdGQJcjMsIChQQUNBX0VYTUMgKyBFWF9SOSkocjEzKQotCWxkCXIzLCBWQ1BVX0dQUihyMTApKHI0KQotCXN0ZAlyMywgKFBBQ0FfRVhNQyArIEVYX1IxMCkocjEzKQotCWxkCXIzLCBWQ1BVX0dQUihyMTEpKHI0KQotCXN0ZAlyMywgKFBBQ0FfRVhNQyArIEVYX1IxMSkocjEzKQotCWxkCXIzLCBWQ1BVX0dQUihyMTIpKHI0KQotCXN0ZAlyMywgKFBBQ0FfRVhNQyArIEVYX1IxMikocjEzKQotCWxkCXIzLCBWQ1BVX0dQUihyMTMpKHI0KQotCXN0ZAlyMywgKFBBQ0FfRVhNQyArIEVYX1IxMykocjEzKQorCWxkCXI2LCBWQ1BVX1JNQ0FMTChyNCkKKwltdGN0cglyNgogCi0JbGQJcjAsIFZDUFVfR1BSKHIwKShyNCkKLQlsZAlyMSwgVkNQVV9HUFIocjEpKHI0KQotCWxkCXIyLCBWQ1BVX0dQUihyMikocjQpCi0JbGQJcjMsIFZDUFVfR1BSKHIzKShyNCkKLQlsZAlyNSwgVkNQVV9HUFIocjUpKHI0KQotCWxkCXI2LCBWQ1BVX0dQUihyNikocjQpCi0JbGQJcjcsIFZDUFVfR1BSKHI3KShyNCkKLQlsZAlyOCwgVkNQVV9HUFIocjgpKHI0KQotCWxkCXI0LCBWQ1BVX0dQUihyNCkocjQpCi0KLQkvKiBUaGlzIHNldHMgdGhlIE1hZ2ljIHZhbHVlIGZvciB0aGUgdHJhbXBvbGluZSAqLwotCi0JbGkJcjExLCAxCi0Jc3RiCXIxMSwgUEFDQV9LVk1fSU5fR1VFU1QocjEzKQorCWxkCXIzLCBWQ1BVX1RSQU1QT0xJTkVfRU5URVIocjQpCisJTE9BRF9SRUdfSU1NRURJQVRFKHI0LCBNU1JfS0VSTkVMICYgfihNU1JfSVIgfCBNU1JfRFIpKQogCiAJLyogSnVtcCB0byBTTEIgcGF0Y2hpbmcgaGFuZGxkZXIgYW5kIGludG8gb3VyIGd1ZXN0ICovCi0JUkZJCisJYmN0cgogCiAvKgogICogVGhpcyBpcyB0aGUgaGFuZGxlciBpbiBtb2R1bGUgbWVtb3J5LiBJdCBnZXRzIGp1bXBlZCBhdCBmcm9tIHRoZQpAQCAtMTg0LDEyNSArMTQ5LDcwIEBACiAJLyoKIAkgKiBSZWdpc3RlciB1c2FnZSBhdCB0aGlzIHBvaW50OgogCSAqCi0JICogUjAwICAgPSBndWVzdCBSMTMKLQkgKiBSMDEgICA9IGhvc3QgUjEKLQkgKiBSMDIgICA9IGhvc3QgUjIKLQkgKiBSMTAgICA9IGd1ZXN0IFBDCi0JICogUjExICAgPSBndWVzdCBNU1IKLQkgKiBSMTIgICA9IGV4aXQgaGFuZGxlciBpZAotCSAqIFIxMyAgID0gUEFDQQotCSAqIFBBQ0EuZXhtYy5SOSAgICA9IGd1ZXN0IFIxCi0JICogUEFDQS5leG1jLlIxMCAgID0gZ3Vlc3QgUjEwCi0JICogUEFDQS5leG1jLlIxMSAgID0gZ3Vlc3QgUjExCi0JICogUEFDQS5leG1jLlIxMiAgID0gZ3Vlc3QgUjEyCi0JICogUEFDQS5leG1jLlIxMyAgID0gZ3Vlc3QgUjIKLQkgKiBQQUNBLmV4bWMuREFSICAgPSBndWVzdCBEQVIKLQkgKiBQQUNBLmV4bWMuRFNJU1IgPSBndWVzdCBEU0lTUgotCSAqIFBBQ0EuZXhtYy5MUiAgICA9IGd1ZXN0IGluc3RydWN0aW9uCi0JICogUEFDQS5leG1jLkNDUiAgID0gZ3Vlc3QgQ1IKLQkgKiBQQUNBLmV4bWMuU1JSMCAgPSBndWVzdCBSMAorCSAqIFIwICAgICAgICAgPSBndWVzdCBsYXN0IGluc3QKKwkgKiBSMSAgICAgICAgID0gaG9zdCBSMQorCSAqIFIyICAgICAgICAgPSBob3N0IFIyCisJICogUjMgICAgICAgICA9IGd1ZXN0IFBDCisJICogUjQgICAgICAgICA9IGd1ZXN0IE1TUgorCSAqIFI1ICAgICAgICAgPSBndWVzdCBEQVIKKwkgKiBSNiAgICAgICAgID0gZ3Vlc3QgRFNJU1IKKwkgKiBSMTMgICAgICAgID0gUEFDQQorCSAqIFBBQ0EuS1ZNLiogPSBndWVzdCAqCiAJICoKIAkgKi8KIAotCXN0ZAlyMywgKFBBQ0FfRVhNQytFWF9SMykocjEzKQotCi0JLyogc2F2ZSB0aGUgZXhpdCBpZCBpbiBSMyAqLwotCW1yCXIzLCByMTIKLQotCS8qIFIxMiA9IHZjcHUgKi8KLQlsZAlyMTIsIEdQUjQocjEpCisJLyogUjcgPSB2Y3B1ICovCisJbGQJcjcsIEdQUjQocjEpCiAKIAkvKiBOb3cgc2F2ZSB0aGUgZ3Vlc3Qgc3RhdGUgKi8KIAotCXN0ZAlyMCwgVkNQVV9HUFIocjEzKShyMTIpCi0Jc3RkCXI0LCBWQ1BVX0dQUihyNCkocjEyKQotCXN0ZAlyNSwgVkNQVV9HUFIocjUpKHIxMikKLQlzdGQJcjYsIFZDUFVfR1BSKHI2KShyMTIpCi0Jc3RkCXI3LCBWQ1BVX0dQUihyNykocjEyKQotCXN0ZAlyOCwgVkNQVV9HUFIocjgpKHIxMikKLQlzdGQJcjksIFZDUFVfR1BSKHI5KShyMTIpCisJc3R3CXIwLCBWQ1BVX0xBU1RfSU5TVChyNykKIAotCS8qIGdldCByZWdpc3RlcnMgZnJvbSBQQUNBICovCi0JbWZwYWNhCXI1LCByMCwgRVhfU1JSMCwgcjEyCi0JbWZwYWNhCXI1LCByMywgRVhfUjMsIHIxMgotCW1mcGFjYQlyNSwgcjEsIEVYX1I5LCByMTIKLQltZnBhY2EJcjUsIHIxMCwgRVhfUjEwLCByMTIKLQltZnBhY2EJcjUsIHIxMSwgRVhfUjExLCByMTIKLQltZnBhY2EJcjUsIHIxMiwgRVhfUjEyLCByMTIKLQltZnBhY2EJcjUsIHIyLCBFWF9SMTMsIHIxMgorCXN0ZAlyMywgVkNQVV9QQyhyNykKKwlzdGQJcjQsIFZDUFVfU0hBRE9XX1NSUjEocjcpCisJc3RkCXI1LCBWQ1BVX0ZBVUxUX0RFQVIocjcpCisJc3RkCXI2LCBWQ1BVX0ZBVUxUX0RTSVNSKHI3KQogCi0JbHd6CXI1LCAoUEFDQV9FWE1DK0VYX0xSKShyMTMpCi0Jc3R3CXI1LCBWQ1BVX0xBU1RfSU5TVChyMTIpCi0KLQlsd3oJcjUsIChQQUNBX0VYTUMrRVhfQ0NSKShyMTMpCi0Jc3R3CXI1LCBWQ1BVX0NSKHIxMikKLQotCWxkCXI1LCBWQ1BVX0hGTEFHUyhyMTIpCisJbGQJcjUsIFZDUFVfSEZMQUdTKHI3KQogCXJsZGljbC4JcjUsIHI1LCAwLCA2MwkJLyogQ1IgPSAoKHI1ICYgMSkgPT0gMCkgKi8KIAliZXEJbm9fZGNiejMyX29mZgogCisJbGkJcjQsIDAKIAltZnNwciAgIHI1LFNQUk5fSElENQotCXJsZGltaSAgcjUscjUsNiw1NgorCXJsZGltaSAgcjUscjQsNiw1NgogCW10c3ByICAgU1BSTl9ISUQ1LHI1CiAKIG5vX2RjYnozMl9vZmY6CiAKLQkvKiBYWFggbWF5YmUgc2tpcCBvbiBsaWdodHdlaWdodD8gKi8KLQlzdGQJcjE0LCBWQ1BVX0dQUihyMTQpKHIxMikKLQlzdGQJcjE1LCBWQ1BVX0dQUihyMTUpKHIxMikKLQlzdGQJcjE2LCBWQ1BVX0dQUihyMTYpKHIxMikKLQlzdGQJcjE3LCBWQ1BVX0dQUihyMTcpKHIxMikKLQlzdGQJcjE4LCBWQ1BVX0dQUihyMTgpKHIxMikKLQlzdGQJcjE5LCBWQ1BVX0dQUihyMTkpKHIxMikKLQlzdGQJcjIwLCBWQ1BVX0dQUihyMjApKHIxMikKLQlzdGQJcjIxLCBWQ1BVX0dQUihyMjEpKHIxMikKLQlzdGQJcjIyLCBWQ1BVX0dQUihyMjIpKHIxMikKLQlzdGQJcjIzLCBWQ1BVX0dQUihyMjMpKHIxMikKLQlzdGQJcjI0LCBWQ1BVX0dQUihyMjQpKHIxMikKLQlzdGQJcjI1LCBWQ1BVX0dQUihyMjUpKHIxMikKLQlzdGQJcjI2LCBWQ1BVX0dQUihyMjYpKHIxMikKLQlzdGQJcjI3LCBWQ1BVX0dQUihyMjcpKHIxMikKLQlzdGQJcjI4LCBWQ1BVX0dQUihyMjgpKHIxMikKLQlzdGQJcjI5LCBWQ1BVX0dQUihyMjkpKHIxMikKLQlzdGQJcjMwLCBWQ1BVX0dQUihyMzApKHIxMikKLQlzdGQJcjMxLCBWQ1BVX0dQUihyMzEpKHIxMikKKwlzdGQJcjE0LCBWQ1BVX0dQUihyMTQpKHI3KQorCXN0ZAlyMTUsIFZDUFVfR1BSKHIxNSkocjcpCisJc3RkCXIxNiwgVkNQVV9HUFIocjE2KShyNykKKwlzdGQJcjE3LCBWQ1BVX0dQUihyMTcpKHI3KQorCXN0ZAlyMTgsIFZDUFVfR1BSKHIxOCkocjcpCisJc3RkCXIxOSwgVkNQVV9HUFIocjE5KShyNykKKwlzdGQJcjIwLCBWQ1BVX0dQUihyMjApKHI3KQorCXN0ZAlyMjEsIFZDUFVfR1BSKHIyMSkocjcpCisJc3RkCXIyMiwgVkNQVV9HUFIocjIyKShyNykKKwlzdGQJcjIzLCBWQ1BVX0dQUihyMjMpKHI3KQorCXN0ZAlyMjQsIFZDUFVfR1BSKHIyNCkocjcpCisJc3RkCXIyNSwgVkNQVV9HUFIocjI1KShyNykKKwlzdGQJcjI2LCBWQ1BVX0dQUihyMjYpKHI3KQorCXN0ZAlyMjcsIFZDUFVfR1BSKHIyNykocjcpCisJc3RkCXIyOCwgVkNQVV9HUFIocjI4KShyNykKKwlzdGQJcjI5LCBWQ1BVX0dQUihyMjkpKHI3KQorCXN0ZAlyMzAsIFZDUFVfR1BSKHIzMCkocjcpCisJc3RkCXIzMSwgVkNQVV9HUFIocjMxKShyNykKIAotCS8qIFJlc3RvcmUgbm9uLXZvbGF0aWxlIGhvc3QgcmVnaXN0ZXJzIChyMTQgLSByMzEpICovCi0JUkVTVF9OVkdQUlMocjEpCi0KLQkvKiBTYXZlIGd1ZXN0IFBDIChSMTApICovCi0Jc3RkCXIxMCwgVkNQVV9QQyhyMTIpCi0KLQkvKiBTYXZlIGd1ZXN0IG1zciAoUjExKSAqLwotCXN0ZAlyMTEsIFZDUFVfU0hBRE9XX01TUihyMTIpCi0KLQkvKiBTYXZlIGd1ZXN0IENUUiAoaW4gUjEyKSAqLworCS8qIFNhdmUgZ3Vlc3QgQ1RSICovCiAJbWZjdHIJcjUKLQlzdGQJcjUsIFZDUFVfQ1RSKHIxMikKKwlzdGQJcjUsIFZDUFVfQ1RSKHI3KQogCiAJLyogU2F2ZSBndWVzdCBMUiAqLwogCW1mbHIJcjUKLQlzdGQJcjUsIFZDUFVfTFIocjEyKQotCi0JLyogU2F2ZSBndWVzdCBYRVIgKi8KLQltZnhlcglyNQotCXN0ZAlyNSwgVkNQVV9YRVIocjEyKQotCi0JLyogU2F2ZSBndWVzdCBEQVIgKi8KLQlsZAlyNSwgKFBBQ0FfRVhNQytFWF9EQVIpKHIxMykKLQlzdGQJcjUsIFZDUFVfRkFVTFRfREVBUihyMTIpCi0KLQkvKiBTYXZlIGd1ZXN0IERTSVNSICovCi0JbHd6CXI1LCAoUEFDQV9FWE1DK0VYX0RTSVNSKShyMTMpCi0Jc3RkCXI1LCBWQ1BVX0ZBVUxUX0RTSVNSKHIxMikKKwlzdGQJcjUsIFZDUFVfTFIocjcpCiAKIAkvKiBSZXN0b3JlIGhvc3QgbXNyIC0+IFNSUjEgKi8KLQlsZAlyNywgVkNQVV9IT1NUX01TUihyMTIpCi0JbXRzcnIxCXI3Ci0KLQkvKiBSZXN0b3JlIGhvc3QgSVAgLT4gU1JSMCAqLwotCWxkCXI2LCBWQ1BVX0hPU1RfUkVUSVAocjEyKQotCW10c3JyMAlyNgorCWxkCXI2LCBWQ1BVX0hPU1RfTVNSKHI3KQogCiAJLyoKIAkgKiBGb3Igc29tZSBpbnRlcnJ1cHRzLCB3ZSBuZWVkIHRvIGNhbGwgdGhlIHJlYWwgTGludXgKQEAgLTMxNCwxMyArMjI0LDE0IEBACiAJICogcjMgPSBhZGRyZXNzIG9mIGludGVycnVwdCBoYW5kbGVyIChleGl0IHJlYXNvbikKIAkgKi8KIAotCWNtcHdpCXIzLCBCT09LM1NfSU5URVJSVVBUX0VYVEVSTkFMCisJY21wd2kJcjEyLCBCT09LM1NfSU5URVJSVVBUX0VYVEVSTkFMCiAJYmVxCWNhbGxfbGludXhfaGFuZGxlcgotCWNtcHdpCXIzLCBCT09LM1NfSU5URVJSVVBUX0RFQ1JFTUVOVEVSCisJY21wd2kJcjEyLCBCT09LM1NfSU5URVJSVVBUX0RFQ1JFTUVOVEVSCiAJYmVxCWNhbGxfbGludXhfaGFuZGxlcgogCi0JLyogQmFjayB0byBJbnRlcnJ1cHRhYmxlIE1vZGUhIChnb3RvIGt2bV9yZXR1cm5fcG9pbnQpICovCi0JUkZJCisJLyogQmFjayB0byBFRT0xICovCisJbXRtc3IJcjYKKwliCWt2bV9yZXR1cm5fcG9pbnQKIAogY2FsbF9saW51eF9oYW5kbGVyOgogCkBAIC0zMzMsMTYgKzI0NCwyMiBAQAogCSAqIGludGVycnVwdCBoYW5kbGVyIQogCSAqCiAJICogUjMgc3RpbGwgY29udGFpbnMgdGhlIGV4aXQgY29kZSwKLQkgKiBSNiBWQ1BVX0hPU1RfUkVUSVAgYW5kCi0JICogUjcgVkNQVV9IT1NUX01TUgorCSAqIFI1IFZDUFVfSE9TVF9SRVRJUCBhbmQKKwkgKiBSNiBWQ1BVX0hPU1RfTVNSCiAJICovCiAKLQltdGxyCXIzCisJLyogUmVzdG9yZSBob3N0IElQIC0+IFNSUjAgKi8KKwlsZAlyNSwgVkNQVV9IT1NUX1JFVElQKHI3KQogCi0JbGQJcjUsIFZDUFVfVFJBTVBPTElORV9MT1dNRU0ocjEyKQotCW10c3JyMAlyNQotCUxPQURfUkVHX0lNTUVESUFURShyNSwgTVNSX0tFUk5FTCAmIH4oTVNSX0lSIHwgTVNSX0RSKSkKLQltdHNycjEJcjUKKwkvKiBYWFggQmV0dGVyIG1vdmUgdG8gYSBzYWZlIGZ1bmN0aW9uPworCSAqICAgICBXaGF0IGlmIHdlIGdldCBhbiBIVEFCIGZsdXNoIGluIGJldHdlZW4gbXRzcnIwIGFuZCBtdHNycjE/ICovCisKKwltdGxyCXIxMgorCisJbGQJcjQsIFZDUFVfVFJBTVBPTElORV9MT1dNRU0ocjcpCisJbXRzcnIwCXI0CisJTE9BRF9SRUdfSU1NRURJQVRFKHIzLCBNU1JfS0VSTkVMICYgfihNU1JfSVIgfCBNU1JfRFIpKQorCW10c3JyMQlyMwogCiAJUkZJCiAKQEAgLTM1MSw0MiArMjY4LDUxIEBACiAKIAkvKiBKdW1wIGJhY2sgdG8gbGlnaHR3ZWlnaHQgZW50cnkgaWYgd2UncmUgc3VwcG9zZWQgdG8gKi8KIAkvKiBnbyBiYWNrIGludG8gdGhlIGd1ZXN0ICovCi0JbXIJcjUsIHIzCisKKwkvKiBQYXNzIHRoZSBleGl0IG51bWJlciBhcyAzcmQgYXJndW1lbnQgdG8ga3ZtcHBjX2hhbmRsZV9leGl0ICovCisJbXIJcjUsIHIxMgorCiAJLyogUmVzdG9yZSByMyAoa3ZtX3J1bikgYW5kIHI0ICh2Y3B1KSAqLwogCVJFU1RfMkdQUlMoMywgcjEpCiAJYmwJS1ZNUFBDX0hBTkRMRV9FWElUCiAKLSNpZiAwIC8qIFhYWCBnZXQgbGlnaHR3ZWlnaHQgZXhpdHMgYmFjayAqLworCS8qIElmIFJFU1VNRV9HVUVTVCwgZ2V0IGJhY2sgaW4gdGhlIGxvb3AgKi8KIAljbXB3aQlyMywgUkVTVU1FX0dVRVNUCi0JYm5lCWt2bV9leGl0X2hlYXZ5d2VpZ2h0CisJYmVxCWt2bV9sb29wX2xpZ2h0d2VpZ2h0CiAKLQkvKiBwdXQgVkNQVSBhbmQgS1ZNX1JVTiBiYWNrIGludG8gcGxhY2UgYW5kIHJvbGwgYWdhaW4hICovCi0JUkVTVF8yR1BSUygzLCByMSkKLQliCWt2bV9zdGFydF9saWdodHdlaWdodAorCWNtcHdpCXIzLCBSRVNVTUVfR1VFU1RfTlYKKwliZXEJa3ZtX2xvb3BfaGVhdnl3ZWlnaHQKIAota3ZtX2V4aXRfaGVhdnl3ZWlnaHQ6Ci0JLyogUmVzdG9yZSBub24tdm9sYXRpbGUgaG9zdCByZWdpc3RlcnMgKi8KLQlsZAlyMTQsIF9MSU5LKHIxKQotCW10bHIJcjE0Ci0JUkVTVF9OVkdQUlMocjEpCitrdm1fZXhpdF9sb29wOgogCi0JYWRkaSAgICByMSwgcjEsIFNXSVRDSF9GUkFNRV9TSVpFCi0jZWxzZQogCWxkCXI0LCBfTElOSyhyMSkKIAltdGxyCXI0CiAKLQljbXB3aQlyMywgUkVTVU1FX0dVRVNUCi0JYm5lCWt2bV9leGl0X2hlYXZ5d2VpZ2h0CisJLyogUmVzdG9yZSBub24tdm9sYXRpbGUgaG9zdCByZWdpc3RlcnMgKHIxNCAtIHIzMSkgKi8KKwlSRVNUX05WR1BSUyhyMSkKIAorCWFkZGkgICAgcjEsIHIxLCBTV0lUQ0hfRlJBTUVfU0laRQorCWJscgorCitrdm1fbG9vcF9oZWF2eXdlaWdodDoKKworCWxkCXI0LCBfTElOSyhyMSkKKwlzdGQgICAgIHI0LCAoMTYgKyBTV0lUQ0hfRlJBTUVfU0laRSkocjEpCisKKwkvKiBMb2FkIHZjcHUgYW5kIGNwdV9ydW4gKi8KIAlSRVNUXzJHUFJTKDMsIHIxKQogCi0JYWRkaSAgICByMSwgcjEsIFNXSVRDSF9GUkFNRV9TSVpFCisJLyogTG9hZCBub24tdm9sYXRpbGUgZ3Vlc3Qgc3RhdGUgZnJvbSB0aGUgdmNwdSAqLworCVZDUFVfTE9BRF9OVkdQUlMocjQpCiAKLQliCWt2bV9zdGFydF9lbnRyeQorCS8qIEp1bXAgYmFjayBpbnRvIHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBmdW5jdGlvbiAqLworCWIJa3ZtX3N0YXJ0X2xpZ2h0d2VpZ2h0CiAKLWt2bV9leGl0X2hlYXZ5d2VpZ2h0Ogora3ZtX2xvb3BfbGlnaHR3ZWlnaHQ6CiAKLQlhZGRpICAgIHIxLCByMSwgU1dJVENIX0ZSQU1FX1NJWkUKLSNlbmRpZgorCS8qIFdlJ2xsIG5lZWQgdGhlIHZjcHUgcG9pbnRlciAqLworCVJFU1RfR1BSKDQsIHIxKQogCi0JYmxyCisJLyogSnVtcCBiYWNrIGludG8gdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZ1bmN0aW9uICovCisJYglrdm1fc3RhcnRfbGlnaHR3ZWlnaHQKKwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXUuYwppbmRleCBlNGJlZWIzLi41MTJkY2ZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXUuYwpAQCAtNTQsNyArNTQsNyBAQAogCQlpZiAoIXZjcHVfYm9vazNzLT5zbGJbaV0udmFsaWQpCiAJCQljb250aW51ZTsKIAotCQlpZiAodmNwdV9ib29rM3MtPnNsYltpXS5sYXJnZSkKKwkJaWYgKHZjcHVfYm9vazNzLT5zbGJbaV0udGIpCiAJCQljbXBfZXNpZCA9IGVzaWRfMXQ7CiAKIAkJaWYgKHZjcHVfYm9vazNzLT5zbGJbaV0uZXNpZCA9PSBjbXBfZXNpZCkKQEAgLTY1LDkgKzY1LDEwIEBACiAJCWVhZGRyLCBlc2lkLCBlc2lkXzF0KTsKIAlmb3IgKGkgPSAwOyBpIDwgdmNwdV9ib29rM3MtPnNsYl9ucjsgaSsrKSB7CiAJICAgIGlmICh2Y3B1X2Jvb2szcy0+c2xiW2ldLnZzaWQpCi0JCWRwcmludGsoIiAgJWQ6ICVjJWMgJWxseCAlbGx4XG4iLCBpLAorCQlkcHJpbnRrKCIgICVkOiAlYyVjJWMgJWxseCAlbGx4XG4iLCBpLAogCQkJdmNwdV9ib29rM3MtPnNsYltpXS52YWxpZCA/ICd2JyA6ICcgJywKIAkJCXZjcHVfYm9vazNzLT5zbGJbaV0ubGFyZ2UgPyAnbCcgOiAnICcsCisJCQl2Y3B1X2Jvb2szcy0+c2xiW2ldLnRiICAgID8gJ3QnIDogJyAnLAogCQkJdmNwdV9ib29rM3MtPnNsYltpXS5lc2lkLAogCQkJdmNwdV9ib29rM3MtPnNsYltpXS52c2lkKTsKIAl9CkBAIC04NCw3ICs4NSw3IEBACiAJaWYgKCFzbGIpCiAJCXJldHVybiAwOwogCi0JaWYgKHNsYi0+bGFyZ2UpCisJaWYgKHNsYi0+dGIpCiAJCXJldHVybiAoKCh1NjQpZWFkZHIgPj4gMTIpICYgMHhmZmZmZmZmKSB8CiAJCSAgICAgICAoKCh1NjQpc2xiLT52c2lkKSA8PCAyOCk7CiAKQEAgLTMwOSw3ICszMTAsOCBAQAogCXNsYmUgPSAmdmNwdV9ib29rM3MtPnNsYltzbGJfbnJdOwogCiAJc2xiZS0+bGFyZ2UgPSAocnMgJiBTTEJfVlNJRF9MKSA/IDEgOiAwOwotCXNsYmUtPmVzaWQgID0gc2xiZS0+bGFyZ2UgPyBlc2lkXzF0IDogZXNpZDsKKwlzbGJlLT50YiAgICA9IChycyAmIFNMQl9WU0lEX0JfMVQpID8gMSA6IDA7CisJc2xiZS0+ZXNpZCAgPSBzbGJlLT50YiA/IGVzaWRfMXQgOiBlc2lkOwogCXNsYmUtPnZzaWQgID0gcnMgPj4gMTI7CiAJc2xiZS0+dmFsaWQgPSAocmIgJiBTTEJfRVNJRF9WKSA/IDEgOiAwOwogCXNsYmUtPktzICAgID0gKHJzICYgU0xCX1ZTSURfS1MpID8gMSA6IDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9ybWhhbmRsZXJzLlMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9ybWhhbmRsZXJzLlMKaW5kZXggZmI3ZGQyZS4uYzgzYzYwYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfcm1oYW5kbGVycy5TCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X3JtaGFuZGxlcnMuUwpAQCAtNDUsMzYgKzQ1LDI1IEBACiAJICogVG8gZGlzdGluZ3Vpc2gsIHdlIGNoZWNrIGEgbWFnaWMgYnl0ZSBpbiB0aGUgUEFDQQogCSAqLwogCW1mc3ByCXIxMywgU1BSTl9TUFJHX1BBQ0EJCS8qIHIxMyA9IFBBQ0EgKi8KLQlzdGQJcjEyLCAoUEFDQV9FWE1DICsgRVhfUjEyKShyMTMpCisJc3RkCXIxMiwgUEFDQV9LVk1fU0NSQVRDSDAocjEzKQogCW1mY3IJcjEyCi0Jc3R3CXIxMiwgKFBBQ0FfRVhNQyArIEVYX0NDUikocjEzKQorCXN0dwlyMTIsIFBBQ0FfS1ZNX1NDUkFUQ0gxKHIxMykKIAlsYnoJcjEyLCBQQUNBX0tWTV9JTl9HVUVTVChyMTMpCi0JY21wd2kJcjEyLCAwCisJY21wd2kJcjEyLCBLVk1fR1VFU1RfTU9ERV9OT05FCiAJYm5lCS4ua3ZtcHBjX2hhbmRsZXJfaGFzbWFnaWNfXGludG5vCiAJLyogTm8gS1ZNIGd1ZXN0PyBUaGVuIGp1bXAgYmFjayB0byB0aGUgTGludXggaGFuZGxlciEgKi8KLQlsd3oJcjEyLCAoUEFDQV9FWE1DICsgRVhfQ0NSKShyMTMpCisJbHd6CXIxMiwgUEFDQV9LVk1fU0NSQVRDSDEocjEzKQogCW10Y3IJcjEyCi0JbGQJcjEyLCAoUEFDQV9FWE1DICsgRVhfUjEyKShyMTMpCisJbGQJcjEyLCBQQUNBX0tWTV9TQ1JBVENIMChyMTMpCiAJbWZzcHIJcjEzLCBTUFJOX1NQUkdfU0NSQVRDSDAJCS8qIHIxMyA9IG9yaWdpbmFsIHIxMyAqLwogCWIJa3ZtcHBjX3Jlc3VtZV9caW50bm8JCS8qIEdldCBiYWNrIG9yaWdpbmFsIGhhbmRsZXIgKi8KIAogCS8qIE5vdyB3ZSBrbm93IHdlJ3JlIGhhbmRsaW5nIGEgS1ZNIGd1ZXN0ICovCiAuLmt2bXBwY19oYW5kbGVyX2hhc21hZ2ljX1xpbnRubzoKLQkvKiBVbnNldCBndWVzdCBzdGF0ZSAqLwotCWxpCXIxMiwgMAotCXN0YglyMTIsIFBBQ0FfS1ZNX0lOX0dVRVNUKHIxMykKIAotCXN0ZAlyMSwgKFBBQ0FfRVhNQytFWF9SOSkocjEzKQotCXN0ZAlyMTAsIChQQUNBX0VYTUMrRVhfUjEwKShyMTMpCi0Jc3RkCXIxMSwgKFBBQ0FfRVhNQytFWF9SMTEpKHIxMykKLQlzdGQJcjIsIChQQUNBX0VYTUMrRVhfUjEzKShyMTMpCi0KLQltZnNycjAJcjEwCi0JbWZzcnIxCXIxMQotCi0JLyogUmVzdG9yZSBSMS9SMiBzbyB3ZSBjYW4gaGFuZGxlIGZhdWx0cyAqLwotCWxkCXIxLCBQQUNBUjEocjEzKQotCWxkCXIyLCAoUEFDQV9FWE1DK0VYX1NSUjApKHIxMykKKwkvKiBTaG91bGQgd2UganVzdCBza2lwIHRoZSBmYXVsdGluZyBpbnN0cnVjdGlvbj8gKi8KKwljbXB3aQlyMTIsIEtWTV9HVUVTVF9NT0RFX1NLSVAKKwliZXEJa3ZtcHBjX2hhbmRsZXJfc2tpcF9pbnMKIAogCS8qIExldCdzIHN0b3JlIHdoaWNoIGludGVycnVwdCB3ZSdyZSBoYW5kbGluZyAqLwogCWxpCXIxMiwgXGludG5vCkBAIC0xMDIsMjMgKzkxLDEwNyBAQAogSU5URVJSVVBUX1RSQU1QT0xJTkUJQk9PSzNTX0lOVEVSUlVQVF9WU1gKIAogLyoKKyAqIEJyaW5nIHVzIGJhY2sgdG8gdGhlIGZhdWx0aW5nIGNvZGUsIGJ1dCBza2lwIHRoZQorICogZmF1bHRpbmcgaW5zdHJ1Y3Rpb24uCisgKgorICogVGhpcyBpcyBhIGdlbmVyaWMgZXhpdCBwYXRoIGZyb20gdGhlIGludGVycnVwdAorICogdHJhbXBvbGluZXMgYWJvdmUuCisgKgorICogSW5wdXQgUmVnaXN0ZXJzOgorICoKKyAqIFIxMiAgICAgICAgICAgICAgID0gZnJlZQorICogUjEzICAgICAgICAgICAgICAgPSBQQUNBCisgKiBQQUNBLktWTS5TQ1JBVENIMCA9IGd1ZXN0IFIxMgorICogUEFDQS5LVk0uU0NSQVRDSDEgPSBndWVzdCBDUgorICogU1BSR19TQ1JBVENIMCAgICAgPSBndWVzdCBSMTMKKyAqCisgKi8KK2t2bXBwY19oYW5kbGVyX3NraXBfaW5zOgorCisJLyogUGF0Y2ggdGhlIElQIHRvIHRoZSBuZXh0IGluc3RydWN0aW9uICovCisJbWZzcnIwCXIxMgorCWFkZGkJcjEyLCByMTIsIDQKKwltdHNycjAJcjEyCisKKwkvKiBDbGVhbiB1cCBhbGwgc3RhdGUgKi8KKwlsd3oJcjEyLCBQQUNBX0tWTV9TQ1JBVENIMShyMTMpCisJbXRjcglyMTIKKwlsZAlyMTIsIFBBQ0FfS1ZNX1NDUkFUQ0gwKHIxMykKKwltZnNwcglyMTMsIFNQUk5fU1BSR19TQ1JBVENIMAorCisJLyogQW5kIGdldCBiYWNrIGludG8gdGhlIGNvZGUgKi8KKwlSRkkKKworLyoKICAqIFRoaXMgdHJhbXBvbGluZSBicmluZ3MgdXMgYmFjayB0byBhIHJlYWwgbW9kZSBoYW5kbGVyCiAgKgogICogSW5wdXQgUmVnaXN0ZXJzOgogICoKLSAqIFI2ID0gU1JSMAotICogUjcgPSBTUlIxCisgKiBSNSA9IFNSUjAKKyAqIFI2ID0gU1JSMQogICogTFIgPSByZWFsLW1vZGUgSVAKICAqCiAgKi8KIC5nbG9iYWwga3ZtcHBjX2hhbmRsZXJfbG93bWVtX3RyYW1wb2xpbmUKIGt2bXBwY19oYW5kbGVyX2xvd21lbV90cmFtcG9saW5lOgogCi0JbXRzcnIwCXI2Ci0JbXRzcnIxCXI3CisJbXRzcnIwCXI1CisJbXRzcnIxCXI2CiAJYmxyCiBrdm1wcGNfaGFuZGxlcl9sb3dtZW1fdHJhbXBvbGluZV9lbmQ6CiAKKy8qCisgKiBDYWxsIGEgZnVuY3Rpb24gaW4gcmVhbCBtb2RlCisgKgorICogSW5wdXQgUmVnaXN0ZXJzOgorICoKKyAqIFIzID0gZnVuY3Rpb24KKyAqIFI0ID0gTVNSCisgKiBSNSA9IENUUgorICoKKyAqLworX0dMT0JBTChrdm1wcGNfcm1jYWxsKQorCW10bXNyCXI0CQkvKiBEaXNhYmxlIHJlbG9jYXRpb24sIHNvIG10c3JyCisJCQkJICAgZG9lc24ndCBnZXQgaW50ZXJydXB0ZWQgKi8KKwltdGN0cglyNQorCW10c3JyMAlyMworCW10c3JyMQlyNAorCVJGSQorCisvKgorICogQWN0aXZhdGUgY3VycmVudCdzIGV4dGVybmFsIGZlYXR1cmUgKEZQVS9BbHRpdmVjL1ZTWCkKKyAqLworI2RlZmluZSBkZWZpbmVfbG9hZF91cCh3aGF0KSAJCQkJXAorCQkJCQkJCVwKK19HTE9CQUwoa3ZtcHBjX2xvYWRfdXBfICMjIHdoYXQpOwkJCVwKKwlzdWJpCXIxLCByMSwgSU5UX0ZSQU1FX1NJWkU7CQkJXAorCW1mbHIJcjM7CQkJCQlcCisJc3RkCXIzLCBfTElOSyhyMSk7CQkJCVwKKwltZm1zcglyNDsJCQkJCVwKKwlzdGQJcjMxLCBHUFIzKHIxKTsJCQkJXAorCW1yCXIzMSwgcjQ7CQkJCVwKKwlsaQlyNSwgTVNSX0RSOwkJCQlcCisJb3JpcwlyNSwgcjUsIE1TUl9FRUBoOwkJCVwKKwlhbmRjCXI0LCByNCwgcjU7CQkJCVwKKwltdG1zcglyNDsJCQkJCVwKKwkJCQkJCQlcCisJYmwJLmxvYWRfdXBfICMjIHdoYXQ7CQkJXAorCQkJCQkJCVwKKwltdG1zcglyMzE7CQkJCQlcCisJbGQJcjMsIF9MSU5LKHIxKTsJCQkJXAorCWxkCXIzMSwgR1BSMyhyMSk7CQkJCVwKKwlhZGRpCXIxLCByMSwgSU5UX0ZSQU1FX1NJWkU7CQkJXAorCW10bHIJcjM7CQkJCQlcCisJYmxyCisKK2RlZmluZV9sb2FkX3VwKGZwdSkKKyNpZmRlZiBDT05GSUdfQUxUSVZFQworZGVmaW5lX2xvYWRfdXAoYWx0aXZlYykKKyNlbmRpZgorI2lmZGVmIENPTkZJR19WU1gKK2RlZmluZV9sb2FkX3VwKHZzeCkKKyNlbmRpZgorCiAuZ2xvYmFsIGt2bXBwY190cmFtcG9saW5lX2xvd21lbQoga3ZtcHBjX3RyYW1wb2xpbmVfbG93bWVtOgogCS5sb25nIGt2bXBwY19oYW5kbGVyX2xvd21lbV90cmFtcG9saW5lIC0gX3N0ZXh0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9zbGIuUyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X3NsYi5TCmluZGV4IGVjZDIzN2EuLjM1Yjc2MjcyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9zbGIuUworKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9zbGIuUwpAQCAtMzEsNyArMzEsNyBAQAogI2RlZmluZSBSRUJPTFRfU0xCX0VOVFJZKG51bSkgXAogCWxkCXIxMCwgU0hBRE9XX1NMQl9FU0lEKG51bSkocjExKTsgXAogCWNtcGRpCXIxMCwgMDsgXAotCWJlcQlzbGJfZXhpdF9za2lwXzE7IFwKKwliZXEJc2xiX2V4aXRfc2tpcF8gIyMgbnVtOyBcCiAJb3JpcwlyMTAsIHIxMCwgU0xCX0VTSURfVkBoOyBcCiAJbGQJcjksIFNIQURPV19TTEJfVlNJRChudW0pKHIxMSk7IFwKIAlzbGJtdGUJcjksIHIxMDsgXApAQCAtNTEsMjMgKzUxLDIxIEBACiAJICoKIAkgKiBNU1IgPSB+SVJ8RFIKIAkgKiBSMTMgPSBQQUNBCisJICogUjEgPSBob3N0IFIxCisJICogUjIgPSBob3N0IFIyCiAJICogUjkgPSBndWVzdCBJUAogCSAqIFIxMCA9IGd1ZXN0IE1TUgotCSAqIFIxMSA9IGZyZWUKLQkgKiBSMTIgPSBmcmVlCi0JICogUEFDQVtQQUNBX0VYTUMgKyBFWF9SOV0gPSBndWVzdCBSOQotCSAqIFBBQ0FbUEFDQV9FWE1DICsgRVhfUjEwXSA9IGd1ZXN0IFIxMAotCSAqIFBBQ0FbUEFDQV9FWE1DICsgRVhfUjExXSA9IGd1ZXN0IFIxMQotCSAqIFBBQ0FbUEFDQV9FWE1DICsgRVhfUjEyXSA9IGd1ZXN0IFIxMgotCSAqIFBBQ0FbUEFDQV9FWE1DICsgRVhfUjEzXSA9IGd1ZXN0IFIxMwotCSAqIFBBQ0FbUEFDQV9FWE1DICsgRVhfQ0NSXSA9IGd1ZXN0IENSCi0JICogUEFDQVtQQUNBX0VYTUMgKyBFWF9SM10gPSBndWVzdCBYRVIKKwkgKiBhbGwgb3RoZXIgR1BSUyA9IGZyZWUKKwkgKiBQQUNBW0tWTV9DUl0gPSBndWVzdCBDUgorCSAqIFBBQ0FbS1ZNX1hFUl0gPSBndWVzdCBYRVIKIAkgKi8KIAogCW10c3JyMAlyOQogCW10c3JyMQlyMTAKIAotCW10c3ByCVNQUk5fU1BSR19TQ1JBVENIMCwgcjAKKwkvKiBBY3RpdmF0ZSBndWVzdCBtb2RlLCBzbyBmYXVsdHMgZ2V0IGhhbmRsZWQgYnkgS1ZNICovCisJbGkJcjExLCBLVk1fR1VFU1RfTU9ERV9HVUVTVAorCXN0YglyMTEsIFBBQ0FfS1ZNX0lOX0dVRVNUKHIxMykKIAogCS8qIFJlbW92ZSBMUEFSIHNoYWRvdyBlbnRyaWVzICovCiAKQEAgLTEzMSwyMCArMTI5LDI3IEBACiAKIAkvKiBFbnRlciBndWVzdCAqLwogCi0JbWZzcHIJcjAsIFNQUk5fU1BSR19TQ1JBVENIMAorCWxkCXIwLCAoUEFDQV9LVk1fUjApKHIxMykKKwlsZAlyMSwgKFBBQ0FfS1ZNX1IxKShyMTMpCisJbGQJcjIsIChQQUNBX0tWTV9SMikocjEzKQorCWxkCXIzLCAoUEFDQV9LVk1fUjMpKHIxMykKKwlsZAlyNCwgKFBBQ0FfS1ZNX1I0KShyMTMpCisJbGQJcjUsIChQQUNBX0tWTV9SNSkocjEzKQorCWxkCXI2LCAoUEFDQV9LVk1fUjYpKHIxMykKKwlsZAlyNywgKFBBQ0FfS1ZNX1I3KShyMTMpCisJbGQJcjgsIChQQUNBX0tWTV9SOCkocjEzKQorCWxkCXI5LCAoUEFDQV9LVk1fUjkpKHIxMykKKwlsZAlyMTAsIChQQUNBX0tWTV9SMTApKHIxMykKKwlsZAlyMTIsIChQQUNBX0tWTV9SMTIpKHIxMykKIAotCWxkCXI5LCAoUEFDQV9FWE1DK0VYX1I5KShyMTMpCi0JbGQJcjEwLCAoUEFDQV9FWE1DK0VYX1IxMCkocjEzKQotCWxkCXIxMiwgKFBBQ0FfRVhNQytFWF9SMTIpKHIxMykKLQotCWx3eglyMTEsIChQQUNBX0VYTUMrRVhfQ0NSKShyMTMpCisJbHd6CXIxMSwgKFBBQ0FfS1ZNX0NSKShyMTMpCiAJbXRjcglyMTEKIAotCWxkCXIxMSwgKFBBQ0FfRVhNQytFWF9SMykocjEzKQorCWxkCXIxMSwgKFBBQ0FfS1ZNX1hFUikocjEzKQogCW10eGVyCXIxMQogCi0JbGQJcjExLCAoUEFDQV9FWE1DK0VYX1IxMSkocjEzKQotCWxkCXIxMywgKFBBQ0FfRVhNQytFWF9SMTMpKHIxMykKKwlsZAlyMTEsIChQQUNBX0tWTV9SMTEpKHIxMykKKwlsZAlyMTMsIChQQUNBX0tWTV9SMTMpKHIxMykKIAogCVJGSQoga3ZtcHBjX2hhbmRsZXJfdHJhbXBvbGluZV9lbnRlcl9lbmQ6CkBAIC0xNjIsMjggKzE2Nyw1NCBAQAogCiAJLyogUmVnaXN0ZXIgdXNhZ2UgYXQgdGhpcyBwb2ludDoKIAkgKgotCSAqIFNQUkdfU0NSQVRDSDAgPSBndWVzdCBSMTMKLQkgKiBSMDEgICAgICAgICAgID0gaG9zdCBSMQotCSAqIFIwMiAgICAgICAgICAgPSBob3N0IFIyCi0JICogUjEwICAgICAgICAgICA9IGd1ZXN0IFBDCi0JICogUjExICAgICAgICAgICA9IGd1ZXN0IE1TUgotCSAqIFIxMiAgICAgICAgICAgPSBleGl0IGhhbmRsZXIgaWQKLQkgKiBSMTMgICAgICAgICAgID0gUEFDQQotCSAqIFBBQ0EuZXhtYy5DQ1IgID0gZ3Vlc3QgQ1IKLQkgKiBQQUNBLmV4bWMuUjkgID0gZ3Vlc3QgUjEKLQkgKiBQQUNBLmV4bWMuUjEwID0gZ3Vlc3QgUjEwCi0JICogUEFDQS5leG1jLlIxMSA9IGd1ZXN0IFIxMQotCSAqIFBBQ0EuZXhtYy5SMTIgPSBndWVzdCBSMTIKLQkgKiBQQUNBLmV4bWMuUjEzID0gZ3Vlc3QgUjIKKwkgKiBTUFJHX1NDUkFUQ0gwICAgICA9IGd1ZXN0IFIxMworCSAqIFIxMiAgICAgICAgICAgICAgID0gZXhpdCBoYW5kbGVyIGlkCisJICogUjEzICAgICAgICAgICAgICAgPSBQQUNBCisJICogUEFDQS5LVk0uU0NSQVRDSDAgPSBndWVzdCBSMTIKKwkgKiBQQUNBLktWTS5TQ1JBVENIMSA9IGd1ZXN0IENSCiAJICoKIAkgKi8KIAogCS8qIFNhdmUgcmVnaXN0ZXJzICovCiAKLQlzdGQJcjAsIChQQUNBX0VYTUMrRVhfU1JSMCkocjEzKQotCXN0ZAlyOSwgKFBBQ0FfRVhNQytFWF9SMykocjEzKQotCXN0ZAlyMTAsIChQQUNBX0VYTUMrRVhfTFIpKHIxMykKLQlzdGQJcjExLCAoUEFDQV9FWE1DK0VYX0RBUikocjEzKQorCXN0ZAlyMCwgUEFDQV9LVk1fUjAocjEzKQorCXN0ZAlyMSwgUEFDQV9LVk1fUjEocjEzKQorCXN0ZAlyMiwgUEFDQV9LVk1fUjIocjEzKQorCXN0ZAlyMywgUEFDQV9LVk1fUjMocjEzKQorCXN0ZAlyNCwgUEFDQV9LVk1fUjQocjEzKQorCXN0ZAlyNSwgUEFDQV9LVk1fUjUocjEzKQorCXN0ZAlyNiwgUEFDQV9LVk1fUjYocjEzKQorCXN0ZAlyNywgUEFDQV9LVk1fUjcocjEzKQorCXN0ZAlyOCwgUEFDQV9LVk1fUjgocjEzKQorCXN0ZAlyOSwgUEFDQV9LVk1fUjkocjEzKQorCXN0ZAlyMTAsIFBBQ0FfS1ZNX1IxMChyMTMpCisJc3RkCXIxMSwgUEFDQV9LVk1fUjExKHIxMykKKworCS8qIFJlc3RvcmUgUjEvUjIgc28gd2UgY2FuIGhhbmRsZSBmYXVsdHMgKi8KKwlsZAlyMSwgUEFDQV9LVk1fSE9TVF9SMShyMTMpCisJbGQJcjIsIFBBQ0FfS1ZNX0hPU1RfUjIocjEzKQorCisJLyogU2F2ZSBndWVzdCBQQyBhbmQgTVNSIGluIEdQUnMgKi8KKwltZnNycjAJcjMKKwltZnNycjEJcjQKKworCS8qIEdldCBzY3JhdGNoJ2VkIG9mZiByZWdpc3RlcnMgKi8KKwltZnNwcglyOSwgU1BSTl9TUFJHX1NDUkFUQ0gwCisJc3RkCXI5LCBQQUNBX0tWTV9SMTMocjEzKQorCisJbGQJcjgsIFBBQ0FfS1ZNX1NDUkFUQ0gwKHIxMykKKwlzdGQJcjgsIFBBQ0FfS1ZNX1IxMihyMTMpCisKKwlsd3oJcjcsIFBBQ0FfS1ZNX1NDUkFUQ0gxKHIxMykKKwlzdHcJcjcsIFBBQ0FfS1ZNX0NSKHIxMykKKworCS8qIFNhdmUgbW9yZSByZWdpc3RlciBzdGF0ZSAgKi8KKworCW1meGVyCXI2CisJc3R3CXI2LCBQQUNBX0tWTV9YRVIocjEzKQorCisJbWZkYXIJcjUKKwltZmRzaXNyCXI2CiAKIAkvKgogCSAqIEluIG9yZGVyIGZvciB1cyB0byBlYXNpbHkgZ2V0IHRoZSBsYXN0IGluc3RydWN0aW9uLApAQCAtMjAyLDE3ICsyMzMsMjggQEAKIAogbGRfbGFzdF9pbnN0OgogCS8qIFNhdmUgb2ZmIHRoZSBndWVzdCBpbnN0cnVjdGlvbiB3ZSdyZSBhdCAqLworCisJLyogU2V0IGd1ZXN0IG1vZGUgdG8gJ2p1bXAgb3ZlciBpbnN0cnVjdGlvbicgc28gaWYgbHd6IGZhdWx0cworCSAqIHdlJ2xsIGp1c3QgY29udGludWUgYXQgdGhlIG5leHQgSVAuICovCisJbGkJcjksIEtWTV9HVUVTVF9NT0RFX1NLSVAKKwlzdGIJcjksIFBBQ0FfS1ZNX0lOX0dVRVNUKHIxMykKKwogCS8qICAgIDEpIGVuYWJsZSBwYWdpbmcgZm9yIGRhdGEgKi8KIAltZm1zcglyOQogCW9yaQlyMTEsIHI5LCBNU1JfRFIJCQkvKiBFbmFibGUgcGFnaW5nIGZvciBkYXRhICovCiAJbXRtc3IJcjExCiAJLyogICAgMikgZmV0Y2ggdGhlIGluc3RydWN0aW9uICovCi0JbHd6CXIwLCAwKHIxMCkKKwlsaQlyMCwgS1ZNX0lOU1RfRkVUQ0hfRkFJTEVECS8qIEluIGNhc2UgbHd6IGZhdWx0cyAqLworCWx3eglyMCwgMChyMykKIAkvKiAgICAzKSBkaXNhYmxlIHBhZ2luZyBhZ2FpbiAqLwogCW10bXNyCXI5CiAKIG5vX2xkX2xhc3RfaW5zdDoKIAorCS8qIFVuc2V0IGd1ZXN0IG1vZGUgKi8KKwlsaQlyOSwgS1ZNX0dVRVNUX01PREVfTk9ORQorCXN0YglyOSwgUEFDQV9LVk1fSU5fR1VFU1QocjEzKQorCiAJLyogUmVzdG9yZSBib2x0ZWQgZW50cmllcyBmcm9tIHRoZSBzaGFkb3cgYW5kIGZpeCBpdCBhbG9uZyB0aGUgd2F5ICovCiAKIAkvKiBXZSBkb24ndCBzdG9yZSBhbnl0aGluZyBpbiBlbnRyeSAwLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHRha2UgY2FyZSBvZiBpdCAqLwpAQCAtMjMzLDI5ICsyNzUsMjcgQEAKIAogc2xiX2RvX2V4aXQ6CiAKLQkvKiBSZXN0b3JlIHJlZ2lzdGVycyAqLwotCi0JbGQJcjExLCAoUEFDQV9FWE1DK0VYX0RBUikocjEzKQotCWxkCXIxMCwgKFBBQ0FfRVhNQytFWF9MUikocjEzKQotCWxkCXI5LCAoUEFDQV9FWE1DK0VYX1IzKShyMTMpCi0KLQkvKiBTYXZlIGxhc3QgaW5zdCAqLwotCXN0dwlyMCwgKFBBQ0FfRVhNQytFWF9MUikocjEzKQotCi0JLyogU2F2ZSBEQVIgYW5kIERTSVNSIGJlZm9yZSBnb2luZyB0byBwYWdlZCBtb2RlICovCi0JbWZkYXIJcjAKLQlzdGQJcjAsIChQQUNBX0VYTUMrRVhfREFSKShyMTMpCi0JbWZkc2lzcglyMAotCXN0dwlyMCwgKFBBQ0FfRVhNQytFWF9EU0lTUikocjEzKQorCS8qIFJlZ2lzdGVyIHVzYWdlIGF0IHRoaXMgcG9pbnQ6CisJICoKKwkgKiBSMCAgICAgICAgID0gZ3Vlc3QgbGFzdCBpbnN0CisJICogUjEgICAgICAgICA9IGhvc3QgUjEKKwkgKiBSMiAgICAgICAgID0gaG9zdCBSMgorCSAqIFIzICAgICAgICAgPSBndWVzdCBQQworCSAqIFI0ICAgICAgICAgPSBndWVzdCBNU1IKKwkgKiBSNSAgICAgICAgID0gZ3Vlc3QgREFSCisJICogUjYgICAgICAgICA9IGd1ZXN0IERTSVNSCisJICogUjEyICAgICAgICA9IGV4aXQgaGFuZGxlciBpZAorCSAqIFIxMyAgICAgICAgPSBQQUNBCisJICogUEFDQS5LVk0uKiA9IGd1ZXN0ICoKKwkgKgorCSAqLwogCiAJLyogUkZJIGludG8gdGhlIGhpZ2htZW0gaGFuZGxlciAqLwotCW1mbXNyCXIwCi0Jb3JpCXIwLCByMCwgTVNSX0lSfE1TUl9EUnxNU1JfUkkJLyogRW5hYmxlIHBhZ2luZyAqLwotCW10c3JyMQlyMAotCWxkCXIwLCBQQUNBU0FWRURNU1IocjEzKQkJLyogSGlnaG1lbSBoYW5kbGVyIGFkZHJlc3MgKi8KLQltdHNycjAJcjAKLQotCW1mc3ByCXIwLCBTUFJOX1NQUkdfU0NSQVRDSDAKKwltZm1zcglyNworCW9yaQlyNywgcjcsIE1TUl9JUnxNU1JfRFJ8TVNSX1JJCS8qIEVuYWJsZSBwYWdpbmcgKi8KKwltdHNycjEJcjcKKwlsZAlyOCwgUEFDQV9LVk1fVk1IQU5ETEVSKHIxMykJLyogSGlnaG1lbSBoYW5kbGVyIGFkZHJlc3MgKi8KKwltdHNycjAJcjgKIAogCVJGSQoga3ZtcHBjX2hhbmRsZXJfdHJhbXBvbGluZV9leGl0X2VuZDoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9va2UuYwppbmRleCAwNmY1YTllLi40ZDY4NmNjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2tlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZS5jCkBAIC02OSwxMCArNjksMTAgQEAKIAogCWZvciAoaSA9IDA7IGkgPCAzMjsgaSArPSA0KSB7CiAJCXByaW50aygiZ3ByJTAyZDogJTA4bHggJTA4bHggJTA4bHggJTA4bHhcbiIsIGksCi0JCSAgICAgICB2Y3B1LT5hcmNoLmdwcltpXSwKLQkJICAgICAgIHZjcHUtPmFyY2guZ3ByW2krMV0sCi0JCSAgICAgICB2Y3B1LT5hcmNoLmdwcltpKzJdLAotCQkgICAgICAgdmNwdS0+YXJjaC5ncHJbaSszXSk7CisJCSAgICAgICBrdm1wcGNfZ2V0X2dwcih2Y3B1LCBpKSwKKwkJICAgICAgIGt2bXBwY19nZXRfZ3ByKHZjcHUsIGkrMSksCisJCSAgICAgICBrdm1wcGNfZ2V0X2dwcih2Y3B1LCBpKzIpLAorCQkgICAgICAga3ZtcHBjX2dldF9ncHIodmNwdSwgaSszKSk7CiAJfQogfQogCkBAIC04Miw4ICs4MiwzMiBAQAogCXNldF9iaXQocHJpb3JpdHksICZ2Y3B1LT5hcmNoLnBlbmRpbmdfZXhjZXB0aW9ucyk7CiB9CiAKLXZvaWQga3ZtcHBjX2NvcmVfcXVldWVfcHJvZ3JhbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCitzdGF0aWMgdm9pZCBrdm1wcGNfY29yZV9xdWV1ZV9kdGxiX21pc3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsb25nIGRlYXJfZmxhZ3MsIHVsb25nIGVzcl9mbGFncykKIHsKKwl2Y3B1LT5hcmNoLnF1ZXVlZF9kZWFyID0gZGVhcl9mbGFnczsKKwl2Y3B1LT5hcmNoLnF1ZXVlZF9lc3IgPSBlc3JfZmxhZ3M7CisJa3ZtcHBjX2Jvb2tlX3F1ZXVlX2lycXByaW8odmNwdSwgQk9PS0VfSVJRUFJJT19EVExCX01JU1MpOworfQorCitzdGF0aWMgdm9pZCBrdm1wcGNfY29yZV9xdWV1ZV9kYXRhX3N0b3JhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsb25nIGRlYXJfZmxhZ3MsIHVsb25nIGVzcl9mbGFncykKK3sKKwl2Y3B1LT5hcmNoLnF1ZXVlZF9kZWFyID0gZGVhcl9mbGFnczsKKwl2Y3B1LT5hcmNoLnF1ZXVlZF9lc3IgPSBlc3JfZmxhZ3M7CisJa3ZtcHBjX2Jvb2tlX3F1ZXVlX2lycXByaW8odmNwdSwgQk9PS0VfSVJRUFJJT19EQVRBX1NUT1JBR0UpOworfQorCitzdGF0aWMgdm9pZCBrdm1wcGNfY29yZV9xdWV1ZV9pbnN0X3N0b3JhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsb25nIGVzcl9mbGFncykKK3sKKwl2Y3B1LT5hcmNoLnF1ZXVlZF9lc3IgPSBlc3JfZmxhZ3M7CisJa3ZtcHBjX2Jvb2tlX3F1ZXVlX2lycXByaW8odmNwdSwgQk9PS0VfSVJRUFJJT19JTlNUX1NUT1JBR0UpOworfQorCit2b2lkIGt2bXBwY19jb3JlX3F1ZXVlX3Byb2dyYW0oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyBlc3JfZmxhZ3MpCit7CisJdmNwdS0+YXJjaC5xdWV1ZWRfZXNyID0gZXNyX2ZsYWdzOwogCWt2bXBwY19ib29rZV9xdWV1ZV9pcnFwcmlvKHZjcHUsIEJPT0tFX0lSUVBSSU9fUFJPR1JBTSk7CiB9CiAKQEAgLTk3LDYgKzEyMSwxMSBAQAogCXJldHVybiB0ZXN0X2JpdChCT09LRV9JUlFQUklPX0RFQ1JFTUVOVEVSLCAmdmNwdS0+YXJjaC5wZW5kaW5nX2V4Y2VwdGlvbnMpOwogfQogCit2b2lkIGt2bXBwY19jb3JlX2RlcXVldWVfZGVjKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwljbGVhcl9iaXQoQk9PS0VfSVJRUFJJT19ERUNSRU1FTlRFUiwgJnZjcHUtPmFyY2gucGVuZGluZ19leGNlcHRpb25zKTsKK30KKwogdm9pZCBrdm1wcGNfY29yZV9xdWV1ZV9leHRlcm5hbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1faW50ZXJydXB0ICppcnEpCiB7CkBAIC0xMDksMTQgKzEzOCwxOSBAQAogewogCWludCBhbGxvd2VkID0gMDsKIAl1bG9uZyBtc3JfbWFzazsKKwlib29sIHVwZGF0ZV9lc3IgPSBmYWxzZSwgdXBkYXRlX2RlYXIgPSBmYWxzZTsKIAogCXN3aXRjaCAocHJpb3JpdHkpIHsKLQljYXNlIEJPT0tFX0lSUVBSSU9fUFJPR1JBTToKIAljYXNlIEJPT0tFX0lSUVBSSU9fRFRMQl9NSVNTOgorCWNhc2UgQk9PS0VfSVJRUFJJT19EQVRBX1NUT1JBR0U6CisJCXVwZGF0ZV9kZWFyID0gdHJ1ZTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBCT09LRV9JUlFQUklPX0lOU1RfU1RPUkFHRToKKwljYXNlIEJPT0tFX0lSUVBSSU9fUFJPR1JBTToKKwkJdXBkYXRlX2VzciA9IHRydWU7CisJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgQk9PS0VfSVJRUFJJT19JVExCX01JU1M6CiAJY2FzZSBCT09LRV9JUlFQUklPX1NZU0NBTEw6Ci0JY2FzZSBCT09LRV9JUlFQUklPX0RBVEFfU1RPUkFHRToKLQljYXNlIEJPT0tFX0lSUVBSSU9fSU5TVF9TVE9SQUdFOgogCWNhc2UgQk9PS0VfSVJRUFJJT19GUF9VTkFWQUlMOgogCWNhc2UgQk9PS0VfSVJRUFJJT19TUEVfVU5BVkFJTDoKIAljYXNlIEJPT0tFX0lSUVBSSU9fU1BFX0ZQX0RBVEE6CkBAIC0xNTEsNiArMTg1LDEwIEBACiAJCXZjcHUtPmFyY2guc3JyMCA9IHZjcHUtPmFyY2gucGM7CiAJCXZjcHUtPmFyY2guc3JyMSA9IHZjcHUtPmFyY2gubXNyOwogCQl2Y3B1LT5hcmNoLnBjID0gdmNwdS0+YXJjaC5pdnByIHwgdmNwdS0+YXJjaC5pdm9yW3ByaW9yaXR5XTsKKwkJaWYgKHVwZGF0ZV9lc3IgPT0gdHJ1ZSkKKwkJCXZjcHUtPmFyY2guZXNyID0gdmNwdS0+YXJjaC5xdWV1ZWRfZXNyOworCQlpZiAodXBkYXRlX2RlYXIgPT0gdHJ1ZSkKKwkJCXZjcHUtPmFyY2guZGVhciA9IHZjcHUtPmFyY2gucXVldWVkX2RlYXI7CiAJCWt2bXBwY19zZXRfbXNyKHZjcHUsIHZjcHUtPmFyY2gubXNyICYgbXNyX21hc2spOwogCiAJCWNsZWFyX2JpdChwcmlvcml0eSwgJnZjcHUtPmFyY2gucGVuZGluZ19leGNlcHRpb25zKTsKQEAgLTIyMyw4ICsyNjEsNyBAQAogCQlpZiAodmNwdS0+YXJjaC5tc3IgJiBNU1JfUFIpIHsKIAkJCS8qIFByb2dyYW0gdHJhcHMgZ2VuZXJhdGVkIGJ5IHVzZXItbGV2ZWwgc29mdHdhcmUgbXVzdCBiZSBoYW5kbGVkCiAJCQkgKiBieSB0aGUgZ3Vlc3Qga2VybmVsLiAqLwotCQkJdmNwdS0+YXJjaC5lc3IgPSB2Y3B1LT5hcmNoLmZhdWx0X2VzcjsKLQkJCWt2bXBwY19ib29rZV9xdWV1ZV9pcnFwcmlvKHZjcHUsIEJPT0tFX0lSUVBSSU9fUFJPR1JBTSk7CisJCQlrdm1wcGNfY29yZV9xdWV1ZV9wcm9ncmFtKHZjcHUsIHZjcHUtPmFyY2guZmF1bHRfZXNyKTsKIAkJCXIgPSBSRVNVTUVfR1VFU1Q7CiAJCQlrdm1wcGNfYWNjb3VudF9leGl0KHZjcHUsIFVTUl9QUl9JTlNUKTsKIAkJCWJyZWFrOwpAQCAtMjgwLDE2ICszMTcsMTQgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEJPT0tFX0lOVEVSUlVQVF9EQVRBX1NUT1JBR0U6Ci0JCXZjcHUtPmFyY2guZGVhciA9IHZjcHUtPmFyY2guZmF1bHRfZGVhcjsKLQkJdmNwdS0+YXJjaC5lc3IgPSB2Y3B1LT5hcmNoLmZhdWx0X2VzcjsKLQkJa3ZtcHBjX2Jvb2tlX3F1ZXVlX2lycXByaW8odmNwdSwgQk9PS0VfSVJRUFJJT19EQVRBX1NUT1JBR0UpOworCQlrdm1wcGNfY29yZV9xdWV1ZV9kYXRhX3N0b3JhZ2UodmNwdSwgdmNwdS0+YXJjaC5mYXVsdF9kZWFyLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmNwdS0+YXJjaC5mYXVsdF9lc3IpOwogCQlrdm1wcGNfYWNjb3VudF9leGl0KHZjcHUsIERTSV9FWElUUyk7CiAJCXIgPSBSRVNVTUVfR1VFU1Q7CiAJCWJyZWFrOwogCiAJY2FzZSBCT09LRV9JTlRFUlJVUFRfSU5TVF9TVE9SQUdFOgotCQl2Y3B1LT5hcmNoLmVzciA9IHZjcHUtPmFyY2guZmF1bHRfZXNyOwotCQlrdm1wcGNfYm9va2VfcXVldWVfaXJxcHJpbyh2Y3B1LCBCT09LRV9JUlFQUklPX0lOU1RfU1RPUkFHRSk7CisJCWt2bXBwY19jb3JlX3F1ZXVlX2luc3Rfc3RvcmFnZSh2Y3B1LCB2Y3B1LT5hcmNoLmZhdWx0X2Vzcik7CiAJCWt2bXBwY19hY2NvdW50X2V4aXQodmNwdSwgSVNJX0VYSVRTKTsKIAkJciA9IFJFU1VNRV9HVUVTVDsKIAkJYnJlYWs7CkBAIC0zMTAsOSArMzQ1LDkgQEAKIAkJZ3RsYl9pbmRleCA9IGt2bXBwY19tbXVfZHRsYl9pbmRleCh2Y3B1LCBlYWRkcik7CiAJCWlmIChndGxiX2luZGV4IDwgMCkgewogCQkJLyogVGhlIGd1ZXN0IGRpZG4ndCBoYXZlIGEgbWFwcGluZyBmb3IgaXQuICovCi0JCQlrdm1wcGNfYm9va2VfcXVldWVfaXJxcHJpbyh2Y3B1LCBCT09LRV9JUlFQUklPX0RUTEJfTUlTUyk7Ci0JCQl2Y3B1LT5hcmNoLmRlYXIgPSB2Y3B1LT5hcmNoLmZhdWx0X2RlYXI7Ci0JCQl2Y3B1LT5hcmNoLmVzciA9IHZjcHUtPmFyY2guZmF1bHRfZXNyOworCQkJa3ZtcHBjX2NvcmVfcXVldWVfZHRsYl9taXNzKHZjcHUsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmNwdS0+YXJjaC5mYXVsdF9kZWFyLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZjcHUtPmFyY2guZmF1bHRfZXNyKTsKIAkJCWt2bXBwY19tbXVfZHRsYl9taXNzKHZjcHUpOwogCQkJa3ZtcHBjX2FjY291bnRfZXhpdCh2Y3B1LCBEVExCX1JFQUxfTUlTU19FWElUUyk7CiAJCQlyID0gUkVTVU1FX0dVRVNUOwpAQCAtNDI2LDcgKzQ2MSw3IEBACiB7CiAJdmNwdS0+YXJjaC5wYyA9IDA7CiAJdmNwdS0+YXJjaC5tc3IgPSAwOwotCXZjcHUtPmFyY2guZ3ByWzFdID0gKDE2PDwyMCkgLSA4OyAvKiAtOCBmb3IgdGhlIGNhbGxlZS1zYXZlIExSIHNsb3QgKi8KKwlrdm1wcGNfc2V0X2dwcih2Y3B1LCAxLCAoMTY8PDIwKSAtIDgpOyAvKiAtOCBmb3IgdGhlIGNhbGxlZS1zYXZlIExSIHNsb3QgKi8KIAogCXZjcHUtPmFyY2guc2hhZG93X3BpZCA9IDE7CiAKQEAgLTQ0NCwxMCArNDc5LDEwIEBACiAJaW50IGk7CiAKIAlyZWdzLT5wYyA9IHZjcHUtPmFyY2gucGM7Ci0JcmVncy0+Y3IgPSB2Y3B1LT5hcmNoLmNyOworCXJlZ3MtPmNyID0ga3ZtcHBjX2dldF9jcih2Y3B1KTsKIAlyZWdzLT5jdHIgPSB2Y3B1LT5hcmNoLmN0cjsKIAlyZWdzLT5sciA9IHZjcHUtPmFyY2gubHI7Ci0JcmVncy0+eGVyID0gdmNwdS0+YXJjaC54ZXI7CisJcmVncy0+eGVyID0ga3ZtcHBjX2dldF94ZXIodmNwdSk7CiAJcmVncy0+bXNyID0gdmNwdS0+YXJjaC5tc3I7CiAJcmVncy0+c3JyMCA9IHZjcHUtPmFyY2guc3JyMDsKIAlyZWdzLT5zcnIxID0gdmNwdS0+YXJjaC5zcnIxOwpAQCAtNDYxLDcgKzQ5Niw3IEBACiAJcmVncy0+c3ByZzcgPSB2Y3B1LT5hcmNoLnNwcmc2OwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmVncy0+Z3ByKTsgaSsrKQotCQlyZWdzLT5ncHJbaV0gPSB2Y3B1LT5hcmNoLmdwcltpXTsKKwkJcmVncy0+Z3ByW2ldID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgaSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ3MSwxMCArNTA2LDEwIEBACiAJaW50IGk7CiAKIAl2Y3B1LT5hcmNoLnBjID0gcmVncy0+cGM7Ci0JdmNwdS0+YXJjaC5jciA9IHJlZ3MtPmNyOworCWt2bXBwY19zZXRfY3IodmNwdSwgcmVncy0+Y3IpOwogCXZjcHUtPmFyY2guY3RyID0gcmVncy0+Y3RyOwogCXZjcHUtPmFyY2gubHIgPSByZWdzLT5scjsKLQl2Y3B1LT5hcmNoLnhlciA9IHJlZ3MtPnhlcjsKKwlrdm1wcGNfc2V0X3hlcih2Y3B1LCByZWdzLT54ZXIpOwogCWt2bXBwY19zZXRfbXNyKHZjcHUsIHJlZ3MtPm1zcik7CiAJdmNwdS0+YXJjaC5zcnIwID0gcmVncy0+c3JyMDsKIAl2Y3B1LT5hcmNoLnNycjEgPSByZWdzLT5zcnIxOwpAQCAtNDg2LDggKzUyMSw4IEBACiAJdmNwdS0+YXJjaC5zcHJnNiA9IHJlZ3MtPnNwcmc1OwogCXZjcHUtPmFyY2guc3ByZzcgPSByZWdzLT5zcHJnNjsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZjcHUtPmFyY2guZ3ByKTsgaSsrKQotCQl2Y3B1LT5hcmNoLmdwcltpXSA9IHJlZ3MtPmdwcltpXTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyZWdzLT5ncHIpOyBpKyspCisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIGksIHJlZ3MtPmdwcltpXSk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9va2VfZW11bGF0ZS5jIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9lbXVsYXRlLmMKaW5kZXggYWViYzY1ZS4uY2JjNzkwZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9lbXVsYXRlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9ib29rZV9lbXVsYXRlLmMKQEAgLTYyLDIwICs2MiwyMCBAQAogCiAJCWNhc2UgT1BfMzFfWE9QX01GTVNSOgogCQkJcnQgPSBnZXRfcnQoaW5zdCk7Ci0JCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLm1zcjsKKwkJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1LT5hcmNoLm1zcik7CiAJCQlrdm1wcGNfc2V0X2V4aXRfdHlwZSh2Y3B1LCBFTVVMQVRFRF9NRk1TUl9FWElUUyk7CiAJCQlicmVhazsKIAogCQljYXNlIE9QXzMxX1hPUF9NVE1TUjoKIAkJCXJzID0gZ2V0X3JzKGluc3QpOwogCQkJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfTVRNU1JfRVhJVFMpOwotCQkJa3ZtcHBjX3NldF9tc3IodmNwdSwgdmNwdS0+YXJjaC5ncHJbcnNdKTsKKwkJCWt2bXBwY19zZXRfbXNyKHZjcHUsIGt2bXBwY19nZXRfZ3ByKHZjcHUsIHJzKSk7CiAJCQlicmVhazsKIAogCQljYXNlIE9QXzMxX1hPUF9XUlRFRToKIAkJCXJzID0gZ2V0X3JzKGluc3QpOwogCQkJdmNwdS0+YXJjaC5tc3IgPSAodmNwdS0+YXJjaC5tc3IgJiB+TVNSX0VFKQotCQkJCQkJCSB8ICh2Y3B1LT5hcmNoLmdwcltyc10gJiBNU1JfRUUpOworCQkJCQl8IChrdm1wcGNfZ2V0X2dwcih2Y3B1LCBycykgJiBNU1JfRUUpOwogCQkJa3ZtcHBjX3NldF9leGl0X3R5cGUodmNwdSwgRU1VTEFURURfV1JURUVfRVhJVFMpOwogCQkJYnJlYWs7CiAKQEAgLTEwMSwyMiArMTAxLDIzIEBACiBpbnQga3ZtcHBjX2Jvb2tlX2VtdWxhdGVfbXRzcHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc3BybiwgaW50IHJzKQogewogCWludCBlbXVsYXRlZCA9IEVNVUxBVEVfRE9ORTsKKwl1bG9uZyBzcHJfdmFsID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgcnMpOwogCiAJc3dpdGNoIChzcHJuKSB7CiAJY2FzZSBTUFJOX0RFQVI6Ci0JCXZjcHUtPmFyY2guZGVhciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJCXZjcHUtPmFyY2guZGVhciA9IHNwcl92YWw7IGJyZWFrOwogCWNhc2UgU1BSTl9FU1I6Ci0JCXZjcHUtPmFyY2guZXNyID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwkJdmNwdS0+YXJjaC5lc3IgPSBzcHJfdmFsOyBicmVhazsKIAljYXNlIFNQUk5fREJDUjA6Ci0JCXZjcHUtPmFyY2guZGJjcjAgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCQl2Y3B1LT5hcmNoLmRiY3IwID0gc3ByX3ZhbDsgYnJlYWs7CiAJY2FzZSBTUFJOX0RCQ1IxOgotCQl2Y3B1LT5hcmNoLmRiY3IxID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwkJdmNwdS0+YXJjaC5kYmNyMSA9IHNwcl92YWw7IGJyZWFrOwogCWNhc2UgU1BSTl9EQlNSOgotCQl2Y3B1LT5hcmNoLmRic3IgJj0gfnZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJCXZjcHUtPmFyY2guZGJzciAmPSB+c3ByX3ZhbDsgYnJlYWs7CiAJY2FzZSBTUFJOX1RTUjoKLQkJdmNwdS0+YXJjaC50c3IgJj0gfnZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJCXZjcHUtPmFyY2gudHNyICY9IH5zcHJfdmFsOyBicmVhazsKIAljYXNlIFNQUk5fVENSOgotCQl2Y3B1LT5hcmNoLnRjciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJdmNwdS0+YXJjaC50Y3IgPSBzcHJfdmFsOwogCQlrdm1wcGNfZW11bGF0ZV9kZWModmNwdSk7CiAJCWJyZWFrOwogCkBAIC0xMjQsNjQgKzEyNSw2NCBAQAogCSAqIGxvYWRlZCBpbnRvIHRoZSByZWFsIFNQUkdzIHdoZW4gcmVzdW1pbmcgdGhlCiAJICogZ3Vlc3QuICovCiAJY2FzZSBTUFJOX1NQUkc0OgotCQl2Y3B1LT5hcmNoLnNwcmc0ID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwkJdmNwdS0+YXJjaC5zcHJnNCA9IHNwcl92YWw7IGJyZWFrOwogCWNhc2UgU1BSTl9TUFJHNToKLQkJdmNwdS0+YXJjaC5zcHJnNSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJCXZjcHUtPmFyY2guc3ByZzUgPSBzcHJfdmFsOyBicmVhazsKIAljYXNlIFNQUk5fU1BSRzY6Ci0JCXZjcHUtPmFyY2guc3ByZzYgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCQl2Y3B1LT5hcmNoLnNwcmc2ID0gc3ByX3ZhbDsgYnJlYWs7CiAJY2FzZSBTUFJOX1NQUkc3OgotCQl2Y3B1LT5hcmNoLnNwcmc3ID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwkJdmNwdS0+YXJjaC5zcHJnNyA9IHNwcl92YWw7IGJyZWFrOwogCiAJY2FzZSBTUFJOX0lWUFI6Ci0JCXZjcHUtPmFyY2guaXZwciA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJdmNwdS0+YXJjaC5pdnByID0gc3ByX3ZhbDsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0lWT1IwOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19DUklUSUNBTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0NSSVRJQ0FMXSA9IHNwcl92YWw7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9JVk9SMToKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fTUFDSElORV9DSEVDS10gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX01BQ0hJTkVfQ0hFQ0tdID0gc3ByX3ZhbDsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0lWT1IyOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19EQVRBX1NUT1JBR0VdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19EQVRBX1NUT1JBR0VdID0gc3ByX3ZhbDsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0lWT1IzOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19JTlNUX1NUT1JBR0VdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19JTlNUX1NUT1JBR0VdID0gc3ByX3ZhbDsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0lWT1I0OgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19FWFRFUk5BTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0VYVEVSTkFMXSA9IHNwcl92YWw7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9JVk9SNToKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQUxJR05NRU5UXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQUxJR05NRU5UXSA9IHNwcl92YWw7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9JVk9SNjoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fUFJPR1JBTV0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1BST0dSQU1dID0gc3ByX3ZhbDsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0lWT1I3OgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19GUF9VTkFWQUlMXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRlBfVU5BVkFJTF0gPSBzcHJfdmFsOwogCQlicmVhazsKIAljYXNlIFNQUk5fSVZPUjg6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NZU0NBTExdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TWVNDQUxMXSA9IHNwcl92YWw7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9JVk9SOToKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQVBfVU5BVkFJTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0FQX1VOQVZBSUxdID0gc3ByX3ZhbDsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0lWT1IxMDoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREVDUkVNRU5URVJdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19ERUNSRU1FTlRFUl0gPSBzcHJfdmFsOwogCQlicmVhazsKIAljYXNlIFNQUk5fSVZPUjExOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19GSVRdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19GSVRdID0gc3ByX3ZhbDsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0lWT1IxMjoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fV0FUQ0hET0ddID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19XQVRDSERPR10gPSBzcHJfdmFsOwogCQlicmVhazsKIAljYXNlIFNQUk5fSVZPUjEzOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19EVExCX01JU1NdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19EVExCX01JU1NdID0gc3ByX3ZhbDsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0lWT1IxNDoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSVRMQl9NSVNTXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSVRMQl9NSVNTXSA9IHNwcl92YWw7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9JVk9SMTU6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RFQlVHXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fREVCVUddID0gc3ByX3ZhbDsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMTk3LDY1ICsxOTgsNjUgQEAKIAogCXN3aXRjaCAoc3BybikgewogCWNhc2UgU1BSTl9JVlBSOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2cHI7IGJyZWFrOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdS0+YXJjaC5pdnByKTsgYnJlYWs7CiAJY2FzZSBTUFJOX0RFQVI6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guZGVhcjsgYnJlYWs7CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1LT5hcmNoLmRlYXIpOyBicmVhazsKIAljYXNlIFNQUk5fRVNSOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmVzcjsgYnJlYWs7CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1LT5hcmNoLmVzcik7IGJyZWFrOwogCWNhc2UgU1BSTl9EQkNSMDoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5kYmNyMDsgYnJlYWs7CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1LT5hcmNoLmRiY3IwKTsgYnJlYWs7CiAJY2FzZSBTUFJOX0RCQ1IxOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLmRiY3IxOyBicmVhazsKKwkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIHZjcHUtPmFyY2guZGJjcjEpOyBicmVhazsKIAljYXNlIFNQUk5fREJTUjoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5kYnNyOyBicmVhazsKKwkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIHZjcHUtPmFyY2guZGJzcik7IGJyZWFrOwogCiAJY2FzZSBTUFJOX0lWT1IwOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19DUklUSUNBTF07CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19DUklUSUNBTF0pOwogCQlicmVhazsKIAljYXNlIFNQUk5fSVZPUjE6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX01BQ0hJTkVfQ0hFQ0tdOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fTUFDSElORV9DSEVDS10pOwogCQlicmVhazsKIAljYXNlIFNQUk5fSVZPUjI6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RBVEFfU1RPUkFHRV07CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19EQVRBX1NUT1JBR0VdKTsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0lWT1IzOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19JTlNUX1NUT1JBR0VdOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSU5TVF9TVE9SQUdFXSk7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9JVk9SNDoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRVhURVJOQUxdOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRVhURVJOQUxdKTsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0lWT1I1OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19BTElHTk1FTlRdOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQUxJR05NRU5UXSk7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9JVk9SNjoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fUFJPR1JBTV07CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19QUk9HUkFNXSk7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9JVk9SNzoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRlBfVU5BVkFJTF07CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19GUF9VTkFWQUlMXSk7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9JVk9SODoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1lTQ0FMTF07CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TWVNDQUxMXSk7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9JVk9SOToKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fQVBfVU5BVkFJTF07CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19BUF9VTkFWQUlMXSk7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9JVk9SMTA6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RFQ1JFTUVOVEVSXTsKKwkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RFQ1JFTUVOVEVSXSk7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9JVk9SMTE6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0ZJVF07CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19GSVRdKTsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0lWT1IxMjoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fV0FUQ0hET0ddOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fV0FUQ0hET0ddKTsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0lWT1IxMzoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fRFRMQl9NSVNTXTsKKwkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RUTEJfTUlTU10pOwogCQlicmVhazsKIAljYXNlIFNQUk5fSVZPUjE0OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19JVExCX01JU1NdOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fSVRMQl9NSVNTXSk7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9JVk9SMTU6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RFQlVHXTsKKwkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX0RFQlVHXSk7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vZTUwMC5jIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwLmMKaW5kZXggNjQ5NDllZS4uZWZhMTE5OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwLmMKQEAgLTYwLDYgKzYwLDEyIEBACiAKIAlrdm1wcGNfZTUwMF90bGJfc2V0dXAodmNwdV9lNTAwKTsKIAorCS8qIFJlZ2lzdGVycyBpbml0ICovCisJdmNwdS0+YXJjaC5wdnIgPSBtZnNwcihTUFJOX1BWUik7CisKKwkvKiBTaW5jZSBib29rZSBrdm0gb25seSBzdXBwb3J0IG9uZSBjb3JlLCB1cGRhdGUgYWxsIHZjcHVzJyBQSVIgdG8gMCAqLworCXZjcHUtPnZjcHVfaWQgPSAwOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF9lbXVsYXRlLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfZW11bGF0ZS5jCmluZGV4IGJlOTViOGQuLjhlM2VkZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF9lbXVsYXRlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX2VtdWxhdGUuYwpAQCAtNzQsNTQgKzc0LDU5IEBACiB7CiAJc3RydWN0IGt2bXBwY192Y3B1X2U1MDAgKnZjcHVfZTUwMCA9IHRvX2U1MDAodmNwdSk7CiAJaW50IGVtdWxhdGVkID0gRU1VTEFURV9ET05FOworCXVsb25nIHNwcl92YWwgPSBrdm1wcGNfZ2V0X2dwcih2Y3B1LCBycyk7CiAKIAlzd2l0Y2ggKHNwcm4pIHsKIAljYXNlIFNQUk5fUElEOgogCQl2Y3B1X2U1MDAtPnBpZFswXSA9IHZjcHUtPmFyY2guc2hhZG93X3BpZCA9Ci0JCQl2Y3B1LT5hcmNoLnBpZCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJCXZjcHUtPmFyY2gucGlkID0gc3ByX3ZhbDsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX1BJRDE6Ci0JCXZjcHVfZTUwMC0+cGlkWzFdID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwkJdmNwdV9lNTAwLT5waWRbMV0gPSBzcHJfdmFsOyBicmVhazsKIAljYXNlIFNQUk5fUElEMjoKLQkJdmNwdV9lNTAwLT5waWRbMl0gPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCQl2Y3B1X2U1MDAtPnBpZFsyXSA9IHNwcl92YWw7IGJyZWFrOwogCWNhc2UgU1BSTl9NQVMwOgotCQl2Y3B1X2U1MDAtPm1hczAgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCQl2Y3B1X2U1MDAtPm1hczAgPSBzcHJfdmFsOyBicmVhazsKIAljYXNlIFNQUk5fTUFTMToKLQkJdmNwdV9lNTAwLT5tYXMxID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwkJdmNwdV9lNTAwLT5tYXMxID0gc3ByX3ZhbDsgYnJlYWs7CiAJY2FzZSBTUFJOX01BUzI6Ci0JCXZjcHVfZTUwMC0+bWFzMiA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJCXZjcHVfZTUwMC0+bWFzMiA9IHNwcl92YWw7IGJyZWFrOwogCWNhc2UgU1BSTl9NQVMzOgotCQl2Y3B1X2U1MDAtPm1hczMgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCQl2Y3B1X2U1MDAtPm1hczMgPSBzcHJfdmFsOyBicmVhazsKIAljYXNlIFNQUk5fTUFTNDoKLQkJdmNwdV9lNTAwLT5tYXM0ID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwkJdmNwdV9lNTAwLT5tYXM0ID0gc3ByX3ZhbDsgYnJlYWs7CiAJY2FzZSBTUFJOX01BUzY6Ci0JCXZjcHVfZTUwMC0+bWFzNiA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJCXZjcHVfZTUwMC0+bWFzNiA9IHNwcl92YWw7IGJyZWFrOwogCWNhc2UgU1BSTl9NQVM3OgotCQl2Y3B1X2U1MDAtPm1hczcgPSB2Y3B1LT5hcmNoLmdwcltyc107IGJyZWFrOworCQl2Y3B1X2U1MDAtPm1hczcgPSBzcHJfdmFsOyBicmVhazsKKwljYXNlIFNQUk5fTDFDU1IwOgorCQl2Y3B1X2U1MDAtPmwxY3NyMCA9IHNwcl92YWw7CisJCXZjcHVfZTUwMC0+bDFjc3IwICY9IH4oTDFDU1IwX0RDRkkgfCBMMUNTUjBfQ0xGQyk7CisJCWJyZWFrOwogCWNhc2UgU1BSTl9MMUNTUjE6Ci0JCXZjcHVfZTUwMC0+bDFjc3IxID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwkJdmNwdV9lNTAwLT5sMWNzcjEgPSBzcHJfdmFsOyBicmVhazsKIAljYXNlIFNQUk5fSElEMDoKLQkJdmNwdV9lNTAwLT5oaWQwID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwkJdmNwdV9lNTAwLT5oaWQwID0gc3ByX3ZhbDsgYnJlYWs7CiAJY2FzZSBTUFJOX0hJRDE6Ci0JCXZjcHVfZTUwMC0+aGlkMSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJCXZjcHVfZTUwMC0+aGlkMSA9IHNwcl92YWw7IGJyZWFrOwogCiAJY2FzZSBTUFJOX01NVUNTUjA6CiAJCWVtdWxhdGVkID0ga3ZtcHBjX2U1MDBfZW11bF9tdF9tbXVjc3IwKHZjcHVfZTUwMCwKLQkJCQl2Y3B1LT5hcmNoLmdwcltyc10pOworCQkJCXNwcl92YWwpOwogCQlicmVhazsKIAogCS8qIGV4dHJhIGV4Y2VwdGlvbnMgKi8KIAljYXNlIFNQUk5fSVZPUjMyOgotCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19TUEVfVU5BVkFJTF0gPSB2Y3B1LT5hcmNoLmdwcltyc107CisJCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NQRV9VTkFWQUlMXSA9IHNwcl92YWw7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9JVk9SMzM6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NQRV9GUF9EQVRBXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX0ZQX0RBVEFdID0gc3ByX3ZhbDsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0lWT1IzNDoKLQkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX0ZQX1JPVU5EXSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX0ZQX1JPVU5EXSA9IHNwcl92YWw7CiAJCWJyZWFrOwogCWNhc2UgU1BSTl9JVk9SMzU6Ci0JCXZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1BFUkZPUk1BTkNFX01PTklUT1JdID0gdmNwdS0+YXJjaC5ncHJbcnNdOworCQl2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19QRVJGT1JNQU5DRV9NT05JVE9SXSA9IHNwcl92YWw7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTEzOCw2MyArMTQzLDU3IEBACiAKIAlzd2l0Y2ggKHNwcm4pIHsKIAljYXNlIFNQUk5fUElEOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPnBpZFswXTsgYnJlYWs7CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1X2U1MDAtPnBpZFswXSk7IGJyZWFrOwogCWNhc2UgU1BSTl9QSUQxOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPnBpZFsxXTsgYnJlYWs7CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1X2U1MDAtPnBpZFsxXSk7IGJyZWFrOwogCWNhc2UgU1BSTl9QSUQyOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPnBpZFsyXTsgYnJlYWs7CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1X2U1MDAtPnBpZFsyXSk7IGJyZWFrOwogCWNhc2UgU1BSTl9NQVMwOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPm1hczA7IGJyZWFrOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdV9lNTAwLT5tYXMwKTsgYnJlYWs7CiAJY2FzZSBTUFJOX01BUzE6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHVfZTUwMC0+bWFzMTsgYnJlYWs7CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1X2U1MDAtPm1hczEpOyBicmVhazsKIAljYXNlIFNQUk5fTUFTMjoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXMyOyBicmVhazsKKwkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIHZjcHVfZTUwMC0+bWFzMik7IGJyZWFrOwogCWNhc2UgU1BSTl9NQVMzOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPm1hczM7IGJyZWFrOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdV9lNTAwLT5tYXMzKTsgYnJlYWs7CiAJY2FzZSBTUFJOX01BUzQ6Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHVfZTUwMC0+bWFzNDsgYnJlYWs7CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1X2U1MDAtPm1hczQpOyBicmVhazsKIAljYXNlIFNQUk5fTUFTNjoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5tYXM2OyBicmVhazsKKwkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIHZjcHVfZTUwMC0+bWFzNik7IGJyZWFrOwogCWNhc2UgU1BSTl9NQVM3OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPm1hczc7IGJyZWFrOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdV9lNTAwLT5tYXM3KTsgYnJlYWs7CiAKIAljYXNlIFNQUk5fVExCMENGRzoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gbWZzcHIoU1BSTl9UTEIwQ0ZHKTsKLQkJdmNwdS0+YXJjaC5ncHJbcnRdICY9IH4weGZmZlVMOwotCQl2Y3B1LT5hcmNoLmdwcltydF0gfD0gdmNwdV9lNTAwLT5ndWVzdF90bGJfc2l6ZVswXTsKLQkJYnJlYWs7Ci0KKwkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIHZjcHVfZTUwMC0+dGxiMGNmZyk7IGJyZWFrOwogCWNhc2UgU1BSTl9UTEIxQ0ZHOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSBtZnNwcihTUFJOX1RMQjFDRkcpOwotCQl2Y3B1LT5hcmNoLmdwcltydF0gJj0gfjB4ZmZmVUw7Ci0JCXZjcHUtPmFyY2guZ3ByW3J0XSB8PSB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplWzFdOwotCQlicmVhazsKLQorCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdV9lNTAwLT50bGIxY2ZnKTsgYnJlYWs7CisJY2FzZSBTUFJOX0wxQ1NSMDoKKwkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIHZjcHVfZTUwMC0+bDFjc3IwKTsgYnJlYWs7CiAJY2FzZSBTUFJOX0wxQ1NSMToKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5sMWNzcjE7IGJyZWFrOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdV9lNTAwLT5sMWNzcjEpOyBicmVhazsKIAljYXNlIFNQUk5fSElEMDoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdV9lNTAwLT5oaWQwOyBicmVhazsKKwkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIHZjcHVfZTUwMC0+aGlkMCk7IGJyZWFrOwogCWNhc2UgU1BSTl9ISUQxOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1X2U1MDAtPmhpZDE7IGJyZWFrOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdV9lNTAwLT5oaWQxKTsgYnJlYWs7CiAKIAljYXNlIFNQUk5fTU1VQ1NSMDoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gMDsgYnJlYWs7CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCAwKTsgYnJlYWs7CiAKIAljYXNlIFNQUk5fTU1VQ0ZHOgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSBtZnNwcihTUFJOX01NVUNGRyk7IGJyZWFrOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgbWZzcHIoU1BSTl9NTVVDRkcpKTsgYnJlYWs7CiAKIAkvKiBleHRyYSBleGNlcHRpb25zICovCiAJY2FzZSBTUFJOX0lWT1IzMjoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX1VOQVZBSUxdOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX1VOQVZBSUxdKTsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0lWT1IzMzoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX0ZQX0RBVEFdOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX0ZQX0RBVEFdKTsKIAkJYnJlYWs7CiAJY2FzZSBTUFJOX0lWT1IzNDoKLQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5pdm9yW0JPT0tFX0lSUVBSSU9fU1BFX0ZQX1JPVU5EXTsKKwkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1NQRV9GUF9ST1VORF0pOwogCQlicmVhazsKIAljYXNlIFNQUk5fSVZPUjM1OgotCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLml2b3JbQk9PS0VfSVJRUFJJT19QRVJGT1JNQU5DRV9NT05JVE9SXTsKKwkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIHZjcHUtPmFyY2guaXZvcltCT09LRV9JUlFQUklPX1BFUkZPUk1BTkNFX01PTklUT1JdKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZW11bGF0ZWQgPSBrdm1wcGNfYm9va2VfZW11bGF0ZV9tZnNwcih2Y3B1LCBzcHJuLCBydCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfdGxiLmMgYi9hcmNoL3Bvd2VycGMva3ZtL2U1MDBfdGxiLmMKaW5kZXggZmIxZTFkYy4uMGQ3NzJlNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9lNTAwX3RsYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vZTUwMF90bGIuYwpAQCAtNDE3LDcgKzQxNyw3IEBACiAJaW50IGVzZWwsIHRsYnNlbDsKIAlndmFfdCBlYTsKIAotCWVhID0gKChyYSkgPyB2Y3B1LT5hcmNoLmdwcltyYV0gOiAwKSArIHZjcHUtPmFyY2guZ3ByW3JiXTsKKwllYSA9ICgocmEpID8ga3ZtcHBjX2dldF9ncHIodmNwdSwgcmEpIDogMCkgKyBrdm1wcGNfZ2V0X2dwcih2Y3B1LCByYik7CiAKIAlpYSA9IChlYSA+PiAyKSAmIDB4MTsKIApAQCAtNDcwLDcgKzQ3MCw3IEBACiAJc3RydWN0IHRsYmUgKmd0bGJlID0gTlVMTDsKIAlndmFfdCBlYTsKIAotCWVhID0gdmNwdS0+YXJjaC5ncHJbcmJdOworCWVhID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgcmIpOwogCiAJZm9yICh0bGJzZWwgPSAwOyB0bGJzZWwgPCAyOyB0bGJzZWwrKykgewogCQllc2VsID0ga3ZtcHBjX2U1MDBfdGxiX2luZGV4KHZjcHVfZTUwMCwgZWEsIHRsYnNlbCwgcGlkLCBhcyk7CkBAIC03MjgsNiArNzI4LDEyIEBACiAJaWYgKHZjcHVfZTUwMC0+c2hhZG93X3BhZ2VzWzFdID09IE5VTEwpCiAJCWdvdG8gZXJyX291dF9wYWdlMDsKIAorCS8qIEluaXQgVExCIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKwl2Y3B1X2U1MDAtPnRsYjBjZmcgPSBtZnNwcihTUFJOX1RMQjBDRkcpICYgfjB4ZmZmVUw7CisJdmNwdV9lNTAwLT50bGIwY2ZnIHw9IHZjcHVfZTUwMC0+Z3Vlc3RfdGxiX3NpemVbMF07CisJdmNwdV9lNTAwLT50bGIxY2ZnID0gbWZzcHIoU1BSTl9UTEIxQ0ZHKSAmIH4weGZmZlVMOworCXZjcHVfZTUwMC0+dGxiMWNmZyB8PSB2Y3B1X2U1MDAtPmd1ZXN0X3RsYl9zaXplWzFdOworCiAJcmV0dXJuIDA7CiAKIGVycl9vdXRfcGFnZTA6CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva3ZtL2VtdWxhdGUuYyBiL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCmluZGV4IDRhOWFjNjYuLmNiNzJhNjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vZW11bGF0ZS5jCkBAIC04Myw2ICs4Myw5IEBACiAKIAlwcl9kZWJ1ZygibXRERUM6ICV4XG4iLCB2Y3B1LT5hcmNoLmRlYyk7CiAjaWZkZWYgQ09ORklHX1BQQzY0CisJLyogbXRkZWMgbG93ZXJzIHRoZSBpbnRlcnJ1cHQgbGluZSB3aGVuIHBvc2l0aXZlLiAqLworCWt2bXBwY19jb3JlX2RlcXVldWVfZGVjKHZjcHUpOworCiAJLyogUE9XRVI0KyB0cmlnZ2VycyBhIGRlYyBpbnRlcnJ1cHQgaWYgdGhlIHZhbHVlIGlzIDwgMCAqLwogCWlmICh2Y3B1LT5hcmNoLmRlYyAmIDB4ODAwMDAwMDApIHsKIAkJaHJ0aW1lcl90cnlfdG9fY2FuY2VsKCZ2Y3B1LT5hcmNoLmRlY190aW1lcik7CkBAIC0xNDAsMTQgKzE0MywxOCBAQAogCiAJcHJfZGVidWcoS0VSTl9JTkZPICJFbXVsYXRpbmcgb3Bjb2RlICVkIC8gJWRcbiIsIGdldF9vcChpbnN0KSwgZ2V0X3hvcChpbnN0KSk7CiAKKwkvKiBUcnkgYWdhaW4gbmV4dCB0aW1lICovCisJaWYgKGluc3QgPT0gS1ZNX0lOU1RfRkVUQ0hfRkFJTEVEKQorCQlyZXR1cm4gRU1VTEFURV9ET05FOworCiAJc3dpdGNoIChnZXRfb3AoaW5zdCkpIHsKIAljYXNlIE9QX1RSQVA6CiAjaWZkZWYgQ09ORklHX1BQQzY0CiAJY2FzZSBPUF9UUkFQXzY0OgorCQlrdm1wcGNfY29yZV9xdWV1ZV9wcm9ncmFtKHZjcHUsIFNSUjFfUFJPR1RSQVApOwogI2Vsc2UKLQkJdmNwdS0+YXJjaC5lc3IgfD0gRVNSX1BUUjsKKwkJa3ZtcHBjX2NvcmVfcXVldWVfcHJvZ3JhbSh2Y3B1LCB2Y3B1LT5hcmNoLmVzciB8IEVTUl9QVFIpOwogI2VuZGlmCi0JCWt2bXBwY19jb3JlX3F1ZXVlX3Byb2dyYW0odmNwdSk7CiAJCWFkdmFuY2UgPSAwOwogCQlicmVhazsKIApAQCAtMTY3LDE0ICsxNzQsMTQgQEAKIAkJY2FzZSBPUF8zMV9YT1BfU1RXWDoKIAkJCXJzID0gZ2V0X3JzKGluc3QpOwogCQkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX3N0b3JlKHJ1biwgdmNwdSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y3B1LT5hcmNoLmdwcltyc10sCisJCQkJCQkgICAgICAga3ZtcHBjX2dldF9ncHIodmNwdSwgcnMpLAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDEpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBPUF8zMV9YT1BfU1RCWDoKIAkJCXJzID0gZ2V0X3JzKGluc3QpOwogCQkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX3N0b3JlKHJ1biwgdmNwdSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y3B1LT5hcmNoLmdwcltyc10sCisJCQkJCQkgICAgICAga3ZtcHBjX2dldF9ncHIodmNwdSwgcnMpLAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIDEpOwogCQkJYnJlYWs7CiAKQEAgLTE4MywxNCArMTkwLDE0IEBACiAJCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJCXJiID0gZ2V0X3JiKGluc3QpOwogCi0JCQllYSA9IHZjcHUtPmFyY2guZ3ByW3JiXTsKKwkJCWVhID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgcmIpOwogCQkJaWYgKHJhKQotCQkJCWVhICs9IHZjcHUtPmFyY2guZ3ByW3JhXTsKKwkJCQllYSArPSBrdm1wcGNfZ2V0X2dwcih2Y3B1LCByYSk7CiAKIAkJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9zdG9yZShydW4sIHZjcHUsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmNwdS0+YXJjaC5ncHJbcnNdLAorCQkJCQkJICAgICAgIGt2bXBwY19nZXRfZ3ByKHZjcHUsIHJzKSwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxKTsKLQkJCXZjcHUtPmFyY2guZ3ByW3JzXSA9IGVhOworCQkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnMsIGVhKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgT1BfMzFfWE9QX0xIWlg6CkBAIC0yMDMsMTIgKzIxMCwxMiBAQAogCQkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCQlyYiA9IGdldF9yYihpbnN0KTsKIAotCQkJZWEgPSB2Y3B1LT5hcmNoLmdwcltyYl07CisJCQllYSA9IGt2bXBwY19nZXRfZ3ByKHZjcHUsIHJiKTsKIAkJCWlmIChyYSkKLQkJCQllYSArPSB2Y3B1LT5hcmNoLmdwcltyYV07CisJCQkJZWEgKz0ga3ZtcHBjX2dldF9ncHIodmNwdSwgcmEpOwogCiAJCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCAyLCAxKTsKLQkJCXZjcHUtPmFyY2guZ3ByW3JhXSA9IGVhOworCQkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcmEsIGVhKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgT1BfMzFfWE9QX01GU1BSOgpAQCAtMjE3LDQ3ICsyMjQsNDkgQEAKIAogCQkJc3dpdGNoIChzcHJuKSB7CiAJCQljYXNlIFNQUk5fU1JSMDoKLQkJCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLnNycjA7IGJyZWFrOworCQkJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1LT5hcmNoLnNycjApOyBicmVhazsKIAkJCWNhc2UgU1BSTl9TUlIxOgotCQkJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guc3JyMTsgYnJlYWs7CisJCQkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIHZjcHUtPmFyY2guc3JyMSk7IGJyZWFrOwogCQkJY2FzZSBTUFJOX1BWUjoKLQkJCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLnB2cjsgYnJlYWs7CisJCQkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIHZjcHUtPmFyY2gucHZyKTsgYnJlYWs7CiAJCQljYXNlIFNQUk5fUElSOgotCQkJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPnZjcHVfaWQ7IGJyZWFrOworCQkJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1LT52Y3B1X2lkKTsgYnJlYWs7CiAJCQljYXNlIFNQUk5fTVNTU1IwOgotCQkJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IDA7IGJyZWFrOworCQkJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCAwKTsgYnJlYWs7CiAKIAkJCS8qIE5vdGU6IG1mdGIgYW5kIFRCUkwvVEJXTCBhcmUgdXNlci1hY2Nlc3NpYmxlLCBzbwogCQkJICogdGhlIGd1ZXN0IGNhbiBhbHdheXMgYWNjZXNzIHRoZSByZWFsIFRCIGFueXdheXMuCiAJCQkgKiBJbiBmYWN0LCB3ZSBwcm9iYWJseSB3aWxsIG5ldmVyIHNlZSB0aGVzZSB0cmFwcy4gKi8KIAkJCWNhc2UgU1BSTl9UQldMOgotCQkJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IGdldF90YigpID4+IDMyOyBicmVhazsKKwkJCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgZ2V0X3RiKCkgPj4gMzIpOyBicmVhazsKIAkJCWNhc2UgU1BSTl9UQldVOgotCQkJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IGdldF90YigpOyBicmVhazsKKwkJCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgZ2V0X3RiKCkpOyBicmVhazsKIAogCQkJY2FzZSBTUFJOX1NQUkcwOgotCQkJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guc3ByZzA7IGJyZWFrOworCQkJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1LT5hcmNoLnNwcmcwKTsgYnJlYWs7CiAJCQljYXNlIFNQUk5fU1BSRzE6Ci0JCQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5zcHJnMTsgYnJlYWs7CisJCQkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIHZjcHUtPmFyY2guc3ByZzEpOyBicmVhazsKIAkJCWNhc2UgU1BSTl9TUFJHMjoKLQkJCQl2Y3B1LT5hcmNoLmdwcltydF0gPSB2Y3B1LT5hcmNoLnNwcmcyOyBicmVhazsKKwkJCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdS0+YXJjaC5zcHJnMik7IGJyZWFrOwogCQkJY2FzZSBTUFJOX1NQUkczOgotCQkJCXZjcHUtPmFyY2guZ3ByW3J0XSA9IHZjcHUtPmFyY2guc3ByZzM7IGJyZWFrOworCQkJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJ0LCB2Y3B1LT5hcmNoLnNwcmczKTsgYnJlYWs7CiAJCQkvKiBOb3RlOiBTUFJHNC03IGFyZSB1c2VyLXJlYWRhYmxlLCBzbyB3ZSBkb24ndCBnZXQKIAkJCSAqIGEgdHJhcC4gKi8KIAogCQkJY2FzZSBTUFJOX0RFQzoKIAkJCXsKIAkJCQl1NjQgamQgPSBnZXRfdGIoKSAtIHZjcHUtPmFyY2guZGVjX2ppZmZpZXM7Ci0JCQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gdmNwdS0+YXJjaC5kZWMgLSBqZDsKLQkJCQlwcl9kZWJ1ZyhLRVJOX0lORk8gIm1mREVDOiAleCAtICVsbHggPSAlbHhcbiIsIHZjcHUtPmFyY2guZGVjLCBqZCwgdmNwdS0+YXJjaC5ncHJbcnRdKTsKKwkJCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCBydCwgdmNwdS0+YXJjaC5kZWMgLSBqZCk7CisJCQkJcHJfZGVidWcoS0VSTl9JTkZPICJtZkRFQzogJXggLSAlbGx4ID0gJWx4XG4iLAorCQkJCQkgdmNwdS0+YXJjaC5kZWMsIGpkLAorCQkJCQkga3ZtcHBjX2dldF9ncHIodmNwdSwgcnQpKTsKIAkJCQlicmVhazsKIAkJCX0KIAkJCWRlZmF1bHQ6CiAJCQkJZW11bGF0ZWQgPSBrdm1wcGNfY29yZV9lbXVsYXRlX21mc3ByKHZjcHUsIHNwcm4sIHJ0KTsKIAkJCQlpZiAoZW11bGF0ZWQgPT0gRU1VTEFURV9GQUlMKSB7CiAJCQkJCXByaW50aygibWZzcHI6IHVua25vd24gc3ByICV4XG4iLCBzcHJuKTsKLQkJCQkJdmNwdS0+YXJjaC5ncHJbcnRdID0gMDsKKwkJCQkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcnQsIDApOwogCQkJCX0KIAkJCQlicmVhazsKIAkJCX0KQEAgLTI2OSw3ICsyNzgsNyBAQAogCQkJcmIgPSBnZXRfcmIoaW5zdCk7CiAKIAkJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9zdG9yZShydW4sIHZjcHUsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmNwdS0+YXJjaC5ncHJbcnNdLAorCQkJCQkJICAgICAgIGt2bXBwY19nZXRfZ3ByKHZjcHUsIHJzKSwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLCAxKTsKIAkJCWJyZWFrOwogCkBAIC0yNzgsMTQgKzI4NywxNCBAQAogCQkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCQlyYiA9IGdldF9yYihpbnN0KTsKIAotCQkJZWEgPSB2Y3B1LT5hcmNoLmdwcltyYl07CisJCQllYSA9IGt2bXBwY19nZXRfZ3ByKHZjcHUsIHJiKTsKIAkJCWlmIChyYSkKLQkJCQllYSArPSB2Y3B1LT5hcmNoLmdwcltyYV07CisJCQkJZWEgKz0ga3ZtcHBjX2dldF9ncHIodmNwdSwgcmEpOwogCiAJCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZjcHUtPmFyY2guZ3ByW3JzXSwKKwkJCQkJCSAgICAgICBrdm1wcGNfZ2V0X2dwcih2Y3B1LCBycyksCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgMSk7Ci0JCQl2Y3B1LT5hcmNoLmdwcltyYV0gPSBlYTsKKwkJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJhLCBlYSk7CiAJCQlicmVhazsKIAogCQljYXNlIE9QXzMxX1hPUF9NVFNQUjoKQEAgLTI5Myw5ICszMDIsOSBAQAogCQkJcnMgPSBnZXRfcnMoaW5zdCk7CiAJCQlzd2l0Y2ggKHNwcm4pIHsKIAkJCWNhc2UgU1BSTl9TUlIwOgotCQkJCXZjcHUtPmFyY2guc3JyMCA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJCQkJdmNwdS0+YXJjaC5zcnIwID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgcnMpOyBicmVhazsKIAkJCWNhc2UgU1BSTl9TUlIxOgotCQkJCXZjcHUtPmFyY2guc3JyMSA9IHZjcHUtPmFyY2guZ3ByW3JzXTsgYnJlYWs7CisJCQkJdmNwdS0+YXJjaC5zcnIxID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgcnMpOyBicmVhazsKIAogCQkJLyogWFhYIFdlIG5lZWQgdG8gY29udGV4dC1zd2l0Y2ggdGhlIHRpbWViYXNlIGZvcgogCQkJICogd2F0Y2hkb2cgYW5kIEZJVC4gKi8KQEAgLTMwNSwxOCArMzE0LDE4IEBACiAJCQljYXNlIFNQUk5fTVNTU1IwOiBicmVhazsKIAogCQkJY2FzZSBTUFJOX0RFQzoKLQkJCQl2Y3B1LT5hcmNoLmRlYyA9IHZjcHUtPmFyY2guZ3ByW3JzXTsKKwkJCQl2Y3B1LT5hcmNoLmRlYyA9IGt2bXBwY19nZXRfZ3ByKHZjcHUsIHJzKTsKIAkJCQlrdm1wcGNfZW11bGF0ZV9kZWModmNwdSk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgU1BSTl9TUFJHMDoKLQkJCQl2Y3B1LT5hcmNoLnNwcmcwID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwkJCQl2Y3B1LT5hcmNoLnNwcmcwID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgcnMpOyBicmVhazsKIAkJCWNhc2UgU1BSTl9TUFJHMToKLQkJCQl2Y3B1LT5hcmNoLnNwcmcxID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwkJCQl2Y3B1LT5hcmNoLnNwcmcxID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgcnMpOyBicmVhazsKIAkJCWNhc2UgU1BSTl9TUFJHMjoKLQkJCQl2Y3B1LT5hcmNoLnNwcmcyID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwkJCQl2Y3B1LT5hcmNoLnNwcmcyID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgcnMpOyBicmVhazsKIAkJCWNhc2UgU1BSTl9TUFJHMzoKLQkJCQl2Y3B1LT5hcmNoLnNwcmczID0gdmNwdS0+YXJjaC5ncHJbcnNdOyBicmVhazsKKwkJCQl2Y3B1LT5hcmNoLnNwcmczID0ga3ZtcHBjX2dldF9ncHIodmNwdSwgcnMpOyBicmVhazsKIAogCQkJZGVmYXVsdDoKIAkJCQllbXVsYXRlZCA9IGt2bXBwY19jb3JlX2VtdWxhdGVfbXRzcHIodmNwdSwgc3BybiwgcnMpOwpAQCAtMzQ4LDcgKzM1Nyw3IEBACiAJCQlyYiA9IGdldF9yYihpbnN0KTsKIAogCQkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX3N0b3JlKHJ1biwgdmNwdSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2Y3B1LT5hcmNoLmdwcltyc10sCisJCQkJCQkgICAgICAga3ZtcHBjX2dldF9ncHIodmNwdSwgcnMpLAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDApOwogCQkJYnJlYWs7CiAKQEAgLTM2Myw3ICszNzIsNyBAQAogCQkJcmIgPSBnZXRfcmIoaW5zdCk7CiAKIAkJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9zdG9yZShydW4sIHZjcHUsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmNwdS0+YXJjaC5ncHJbcnNdLAorCQkJCQkJICAgICAgIGt2bXBwY19nZXRfZ3ByKHZjcHUsIHJzKSwKIAkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLCAwKTsKIAkJCWJyZWFrOwogCkBAIC0zODIsNyArMzkxLDcgQEAKIAkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCXJ0ID0gZ2V0X3J0KGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCA0LCAxKTsKLQkJdmNwdS0+YXJjaC5ncHJbcmFdID0gdmNwdS0+YXJjaC5wYWRkcl9hY2Nlc3NlZDsKKwkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcmEsIHZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQpOwogCQlicmVhazsKIAogCWNhc2UgT1BfTEJaOgpAQCAtMzk0LDM1ICs0MDMsMzkgQEAKIAkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCXJ0ID0gZ2V0X3J0KGluc3QpOwogCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfbG9hZChydW4sIHZjcHUsIHJ0LCAxLCAxKTsKLQkJdmNwdS0+YXJjaC5ncHJbcmFdID0gdmNwdS0+YXJjaC5wYWRkcl9hY2Nlc3NlZDsKKwkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcmEsIHZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQpOwogCQlicmVhazsKIAogCWNhc2UgT1BfU1RXOgogCQlycyA9IGdldF9ycyhpbnN0KTsKLQkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX3N0b3JlKHJ1biwgdmNwdSwgdmNwdS0+YXJjaC5ncHJbcnNdLAorCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LAorCQkJCQkgICAgICAga3ZtcHBjX2dldF9ncHIodmNwdSwgcnMpLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNCwgMSk7CiAJCWJyZWFrOwogCiAJY2FzZSBPUF9TVFdVOgogCQlyYSA9IGdldF9yYShpbnN0KTsKIAkJcnMgPSBnZXRfcnMoaW5zdCk7Ci0JCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9zdG9yZShydW4sIHZjcHUsIHZjcHUtPmFyY2guZ3ByW3JzXSwKKwkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX3N0b3JlKHJ1biwgdmNwdSwKKwkJCQkJICAgICAgIGt2bXBwY19nZXRfZ3ByKHZjcHUsIHJzKSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQsIDEpOwotCQl2Y3B1LT5hcmNoLmdwcltyYV0gPSB2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkOworCQlrdm1wcGNfc2V0X2dwcih2Y3B1LCByYSwgdmNwdS0+YXJjaC5wYWRkcl9hY2Nlc3NlZCk7CiAJCWJyZWFrOwogCiAJY2FzZSBPUF9TVEI6CiAJCXJzID0gZ2V0X3JzKGluc3QpOwotCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LCB2Y3B1LT5hcmNoLmdwcltyc10sCisJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9zdG9yZShydW4sIHZjcHUsCisJCQkJCSAgICAgICBrdm1wcGNfZ2V0X2dwcih2Y3B1LCBycyksCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxKTsKIAkJYnJlYWs7CiAKIAljYXNlIE9QX1NUQlU6CiAJCXJhID0gZ2V0X3JhKGluc3QpOwogCQlycyA9IGdldF9ycyhpbnN0KTsKLQkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX3N0b3JlKHJ1biwgdmNwdSwgdmNwdS0+YXJjaC5ncHJbcnNdLAorCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LAorCQkJCQkgICAgICAga3ZtcHBjX2dldF9ncHIodmNwdSwgcnMpLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgMSk7Ci0JCXZjcHUtPmFyY2guZ3ByW3JhXSA9IHZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQ7CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJhLCB2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkKTsKIAkJYnJlYWs7CiAKIAljYXNlIE9QX0xIWjoKQEAgLTQzNCwyMSArNDQ3LDIzIEBACiAJCXJhID0gZ2V0X3JhKGluc3QpOwogCQlydCA9IGdldF9ydChpbnN0KTsKIAkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX2xvYWQocnVuLCB2Y3B1LCBydCwgMiwgMSk7Ci0JCXZjcHUtPmFyY2guZ3ByW3JhXSA9IHZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQ7CisJCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHJhLCB2Y3B1LT5hcmNoLnBhZGRyX2FjY2Vzc2VkKTsKIAkJYnJlYWs7CiAKIAljYXNlIE9QX1NUSDoKIAkJcnMgPSBnZXRfcnMoaW5zdCk7Ci0JCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9zdG9yZShydW4sIHZjcHUsIHZjcHUtPmFyY2guZ3ByW3JzXSwKKwkJZW11bGF0ZWQgPSBrdm1wcGNfaGFuZGxlX3N0b3JlKHJ1biwgdmNwdSwKKwkJCQkJICAgICAgIGt2bXBwY19nZXRfZ3ByKHZjcHUsIHJzKSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIsIDEpOwogCQlicmVhazsKIAogCWNhc2UgT1BfU1RIVToKIAkJcmEgPSBnZXRfcmEoaW5zdCk7CiAJCXJzID0gZ2V0X3JzKGluc3QpOwotCQllbXVsYXRlZCA9IGt2bXBwY19oYW5kbGVfc3RvcmUocnVuLCB2Y3B1LCB2Y3B1LT5hcmNoLmdwcltyc10sCisJCWVtdWxhdGVkID0ga3ZtcHBjX2hhbmRsZV9zdG9yZShydW4sIHZjcHUsCisJCQkJCSAgICAgICBrdm1wcGNfZ2V0X2dwcih2Y3B1LCBycyksCiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLCAxKTsKLQkJdmNwdS0+YXJjaC5ncHJbcmFdID0gdmNwdS0+YXJjaC5wYWRkcl9hY2Nlc3NlZDsKKwkJa3ZtcHBjX3NldF9ncHIodmNwdSwgcmEsIHZjcHUtPmFyY2gucGFkZHJfYWNjZXNzZWQpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CkBAIC00NjEsNiArNDc2LDcgQEAKIAkJCWFkdmFuY2UgPSAwOwogCQkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZG4ndCBlbXVsYXRlIGluc3RydWN0aW9uIDB4JTA4eCAiCiAJCQkgICAgICAgIihvcCAlZCB4b3AgJWQpXG4iLCBpbnN0LCBnZXRfb3AoaW5zdCksIGdldF94b3AoaW5zdCkpOworCQkJa3ZtcHBjX2NvcmVfcXVldWVfcHJvZ3JhbSh2Y3B1LCAwKTsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwppbmRleCBmMDZjZjkzLi41MWFlZGQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYworKysgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwpAQCAtMTM3LDYgKzEzNyw3IEBACiB7CiAJa3ZtcHBjX2ZyZWVfdmNwdXMoa3ZtKTsKIAlrdm1fZnJlZV9waHlzbWVtKGt2bSk7CisJY2xlYW51cF9zcmN1X3N0cnVjdCgma3ZtLT5zcmN1KTsKIAlrZnJlZShrdm0pOwogfQogCkBAIC0xNjUsMTQgKzE2NiwyNCBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1pbnQga3ZtX2FyY2hfc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24gKm1lbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90IG9sZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdXNlcl9hbGxvYykKK2ludCBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90IG9sZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbiAqbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdXNlcl9hbGxvYykKIHsKIAlyZXR1cm4gMDsKIH0KIAordm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCisgICAgICAgICAgICAgICBzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uICptZW0sCisgICAgICAgICAgICAgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90IG9sZCwKKyAgICAgICAgICAgICAgIGludCB1c2VyX2FsbG9jKQoreworICAgICAgIHJldHVybjsKK30KKworCiB2b2lkIGt2bV9hcmNoX2ZsdXNoX3NoYWRvdyhzdHJ1Y3Qga3ZtICprdm0pCiB7CiB9CkBAIC0yNjAsMzQgKzI3MSwzNSBAQAogc3RhdGljIHZvaWQga3ZtcHBjX2NvbXBsZXRlX2Rjcl9sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3ZtX3J1biAqcnVuKQogewotCXVsb25nICpncHIgPSAmdmNwdS0+YXJjaC5ncHJbdmNwdS0+YXJjaC5pb19ncHJdOwotCSpncHIgPSBydW4tPmRjci5kYXRhOworCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHZjcHUtPmFyY2guaW9fZ3ByLCBydW4tPmRjci5kYXRhKTsKIH0KIAogc3RhdGljIHZvaWQga3ZtcHBjX2NvbXBsZXRlX21taW9fbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBrdm1fcnVuICpydW4pCiB7Ci0JdWxvbmcgKmdwciA9ICZ2Y3B1LT5hcmNoLmdwclt2Y3B1LT5hcmNoLmlvX2dwcl07CisJdWxvbmcgZ3ByOwogCi0JaWYgKHJ1bi0+bW1pby5sZW4gPiBzaXplb2YoKmdwcikpIHsKKwlpZiAocnVuLT5tbWlvLmxlbiA+IHNpemVvZihncHIpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYmFkIE1NSU8gbGVuZ3RoOiAlZFxuIiwgcnVuLT5tbWlvLmxlbik7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAodmNwdS0+YXJjaC5tbWlvX2lzX2JpZ2VuZGlhbikgewogCQlzd2l0Y2ggKHJ1bi0+bW1pby5sZW4pIHsKLQkJY2FzZSA0OiAqZ3ByID0gKih1MzIgKilydW4tPm1taW8uZGF0YTsgYnJlYWs7Ci0JCWNhc2UgMjogKmdwciA9ICoodTE2ICopcnVuLT5tbWlvLmRhdGE7IGJyZWFrOwotCQljYXNlIDE6ICpncHIgPSAqKHU4ICopcnVuLT5tbWlvLmRhdGE7IGJyZWFrOworCQljYXNlIDQ6IGdwciA9ICoodTMyICopcnVuLT5tbWlvLmRhdGE7IGJyZWFrOworCQljYXNlIDI6IGdwciA9ICoodTE2ICopcnVuLT5tbWlvLmRhdGE7IGJyZWFrOworCQljYXNlIDE6IGdwciA9ICoodTggKilydW4tPm1taW8uZGF0YTsgYnJlYWs7CiAJCX0KIAl9IGVsc2UgewogCQkvKiBDb252ZXJ0IEJFIGRhdGEgZnJvbSB1c2VybGFuZCBiYWNrIHRvIExFLiAqLwogCQlzd2l0Y2ggKHJ1bi0+bW1pby5sZW4pIHsKLQkJY2FzZSA0OiAqZ3ByID0gbGRfbGUzMigodTMyICopcnVuLT5tbWlvLmRhdGEpOyBicmVhazsKLQkJY2FzZSAyOiAqZ3ByID0gbGRfbGUxNigodTE2ICopcnVuLT5tbWlvLmRhdGEpOyBicmVhazsKLQkJY2FzZSAxOiAqZ3ByID0gKih1OCAqKXJ1bi0+bW1pby5kYXRhOyBicmVhazsKKwkJY2FzZSA0OiBncHIgPSBsZF9sZTMyKCh1MzIgKilydW4tPm1taW8uZGF0YSk7IGJyZWFrOworCQljYXNlIDI6IGdwciA9IGxkX2xlMTYoKHUxNiAqKXJ1bi0+bW1pby5kYXRhKTsgYnJlYWs7CisJCWNhc2UgMTogZ3ByID0gKih1OCAqKXJ1bi0+bW1pby5kYXRhOyBicmVhazsKIAkJfQogCX0KKworCWt2bXBwY19zZXRfZ3ByKHZjcHUsIHZjcHUtPmFyY2guaW9fZ3ByLCBncHIpOwogfQogCiBpbnQga3ZtcHBjX2hhbmRsZV9sb2FkKHN0cnVjdCBrdm1fcnVuICpydW4sIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMgYi9hcmNoL3Bvd2VycGMvbW0vaW5pdF8zMi5jCmluZGV4IDRlYzkwMGEuLmIxZGJkOWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9pbml0XzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2luaXRfMzIuYwpAQCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgIm1tdV9kZWNsLmgiCiAKICNpZiBkZWZpbmVkKENPTkZJR19LRVJORUxfU1RBUlRfQk9PTCkgfHwgZGVmaW5lZChDT05GSUdfTE9XTUVNX1NJWkVfQk9PTCkKLS8qIFRoZSBhbW1vdW50IG9mIGxvd21lbSBtdXN0IGJlIHdpdGhpbiAweEYwMDAwMDAwIC0gS0VSTkVMQkFTRS4gKi8KKy8qIFRoZSBhbW91bnQgb2YgbG93bWVtIG11c3QgYmUgd2l0aGluIDB4RjAwMDAwMDAgLSBLRVJORUxCQVNFLiAqLwogI2lmIChDT05GSUdfTE9XTUVNX1NJWkUgPiAoMHhGMDAwMDAwMCAtIFBBR0VfT0ZGU0VUKSkKICNlcnJvciAiWW91IG11c3QgYWRqdXN0IENPTkZJR19MT1dNRU1fU0laRSBvciBDT05GSUdfU1RBUlRfS0VSTkVMIgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jIGIvYXJjaC9wb3dlcnBjL21tL251bWEuYwppbmRleCBiMDM3ZDk1Li42NGMwMDIyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKQEAgLTQ1MSw3ICs0NTEsNyBAQAogCW5pZCA9IG9mX25vZGVfdG9fbmlkX3NpbmdsZShjcHUpOwogCiAJaWYgKG5pZCA8IDAgfHwgIW5vZGVfb25saW5lKG5pZCkpCi0JCW5pZCA9IGFueV9vbmxpbmVfbm9kZShOT0RFX01BU0tfQUxMKTsKKwkJbmlkID0gZmlyc3Rfb25saW5lX25vZGU7CiBvdXQ6CiAJbWFwX2NwdV90b19ub2RlKGxjcHUsIG5pZCk7CiAKQEAgLTExMTQsNyArMTExNCw3IEBACiAJaW50IG5pZCwgZm91bmQgPSAwOwogCiAJaWYgKCFudW1hX2VuYWJsZWQgfHwgKG1pbl9jb21tb25fZGVwdGggPCAwKSkKLQkJcmV0dXJuIGFueV9vbmxpbmVfbm9kZShOT0RFX01BU0tfQUxMKTsKKwkJcmV0dXJuIGZpcnN0X29ubGluZV9ub2RlOwogCiAJbWVtb3J5ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9pYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5Iik7CiAJaWYgKG1lbW9yeSkgewpAQCAtMTEyNSw3ICsxMTI1LDcgQEAKIAl9CiAKIAlpZiAobmlkIDwgMCB8fCAhbm9kZV9vbmxpbmUobmlkKSkKLQkJbmlkID0gYW55X29ubGluZV9ub2RlKE5PREVfTUFTS19BTEwpOworCQluaWQgPSBmaXJzdF9vbmxpbmVfbm9kZTsKIAogCWlmIChOT0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzKQogCQlyZXR1cm4gbmlkOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfZ3B0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncHQuYwppbmRleCA2ZjhlYmUxLi4wNzJiOTQ4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncHQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncHQuYwpAQCAtNTUzLDcgKzU1Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBtcGM1MjAwX3dkdF9pbmZvID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIG1wYzUyMDBfd2R0X2luZm8gPSB7CiAJLm9wdGlvbnMJPSBXRElPRl9TRVRUSU1FT1VUIHwgV0RJT0ZfS0VFUEFMSVZFUElORywKIAkuaWRlbnRpdHkJPSBXRFRfSURFTlRJVFksCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L3BxMmFkcy1wY2ktcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvcHEyYWRzLXBjaS1waWMuYwppbmRleCA5ZDk2MmQ3Li5kNGEwOWY4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvcHEyYWRzLXBjaS1waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgyeHgvcHEyYWRzLXBjaS1waWMuYwpAQCAtMjQsNyArMjQsNyBAQAogCiAjaW5jbHVkZSAicHEyLmgiCiAKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0socGNpX3BpY19sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHBjaV9waWNfbG9jayk7CiAKIHN0cnVjdCBwcTJhZHNfcGNpX3BpYyB7CiAJc3RydWN0IGRldmljZV9ub2RlICpub2RlOwpAQCAtNDUsMTIgKzQ1LDEyIEBACiAKIAlpZiAoaXJxICE9IC0xKSB7CiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwY2lfcGljX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZwY2lfcGljX2xvY2ssIGZsYWdzKTsKIAogCQlzZXRiaXRzMzIoJnByaXYtPnJlZ3MtPm1hc2ssIDEgPDwgaXJxKTsKIAkJbWIoKTsKIAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY2lfcGljX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjaV9waWNfbG9jaywgZmxhZ3MpOwogCX0KIH0KIApAQCAtNjIsOSArNjIsOSBAQAogCWlmIChpcnEgIT0gLTEpIHsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcGNpX3BpY19sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmcGNpX3BpY19sb2NrLCBmbGFncyk7CiAJCWNscmJpdHMzMigmcHJpdi0+cmVncy0+bWFzaywgMSA8PCBpcnEpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY2lfcGljX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjaV9waWNfbG9jaywgZmxhZ3MpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYwppbmRleCAwNGQxMDVkLi5mMDY4NGM4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9tZHMuYwpAQCAtMjM3LDYgKzIzNyw4IEBACiAJCX0gZWxzZSBpZiAobWFjaGluZV9pcyhtcGM4NTY5X21kcykpIHsKICNkZWZpbmUgQkNTUjdfVUNDMTJfR0VUSG5SU1QJKDB4MSA8PCAyKQogI2RlZmluZSBCQ1NSOF9VRU1fTUFSVkVMTF9SU1QJKDB4MSA8PCAxKQorI2RlZmluZSBCQ1NSX1VDQ19SR01JSQkJKDB4MSA8PCA2KQorI2RlZmluZSBCQ1NSX1VDQ19SVEJJCQkoMHgxIDw8IDUpCiAJCQkvKgogCQkJICogVS1Cb290IG1hbmdsZXMgaW50ZXJydXB0IHBvbGFyaXR5IGZvciBNYXJ2ZWxsIFBIWXMsCiAJCQkgKiBzbyByZXNldCBidWlsdC1pbiBhbmQgVUVNIE1hcnZlbGwgUEhZcywgdGhpcyBwdXRzCkBAIC0yNDcsNiArMjQ5LDI4IEBACiAKIAkJCXNldGJpdHM4KCZiY3NyX3JlZ3NbN10sIEJDU1I3X1VDQzEyX0dFVEhuUlNUKTsKIAkJCWNscmJpdHM4KCZiY3NyX3JlZ3NbOF0sIEJDU1I4X1VFTV9NQVJWRUxMX1JTVCk7CisKKwkJCWZvciAobnAgPSBOVUxMOyAobnAgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShucCwKKwkJCQkJCQkibmV0d29yayIsCisJCQkJCQkJInVjY19nZXRoIikpICE9IE5VTEw7KSB7CisJCQkJY29uc3QgdW5zaWduZWQgaW50ICpwcm9wOworCQkJCWludCB1Y2NfbnVtOworCisJCQkJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgImNlbGwtaW5kZXgiLCBOVUxMKTsKKwkJCQlpZiAocHJvcCA9PSBOVUxMKQorCQkJCQljb250aW51ZTsKKworCQkJCXVjY19udW0gPSAqcHJvcCAtIDE7CisKKwkJCQlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicGh5LWNvbm5lY3Rpb24tdHlwZSIsIE5VTEwpOworCQkJCWlmIChwcm9wID09IE5VTEwpCisJCQkJCWNvbnRpbnVlOworCisJCQkJaWYgKHN0cmNtcCgicnRiaSIsIChjb25zdCBjaGFyICopcHJvcCkgPT0gMCkKKwkJCQkJY2xyc2V0Yml0c184KCZiY3NyX3JlZ3NbNyArIHVjY19udW1dLAorCQkJCQkJQkNTUl9VQ0NfUkdNSUksIEJDU1JfVUNDX1JUQkkpOworCQkJfQorCiAJCX0KIAkJaW91bm1hcChiY3NyX3JlZ3MpOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzX2ZwZ2FfcGljLmMKaW5kZXggNDJlODdmMC4uZDQ4NTI3ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzX2ZwZ2FfcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzX2ZwZ2FfcGljLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAogI2RlZmluZSBzb2NyYXRlc19mcGdhX2lycV90b19odyh2aXJxKSAgICAoKHVuc2lnbmVkIGludClpcnFfbWFwW3ZpcnFdLmh3aXJxKQogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNvY3JhdGVzX2ZwZ2FfcGljX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soc29jcmF0ZXNfZnBnYV9waWNfbG9jayk7CiAKIHN0YXRpYyB2b2lkIF9faW9tZW0gKnNvY3JhdGVzX2ZwZ2FfcGljX2lvYmFzZTsKIHN0YXRpYyBzdHJ1Y3QgaXJxX2hvc3QgKnNvY3JhdGVzX2ZwZ2FfcGljX2lycV9ob3N0OwpAQCAtODAsOSArODAsOSBAQAogCWlmIChpID09IDMpCiAJCXJldHVybiBOT19JUlE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOwogCWNhdXNlID0gc29jcmF0ZXNfZnBnYV9waWNfcmVhZChGUEdBX1BJQ19JUlFNQVNLKGkpKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSBTT0NSQVRFU19GUEdBX05VTV9JUlFTIC0gMTsgaSA+PSAwOyBpLS0pIHsKIAkJaWYgKGNhdXNlID4+IChpICsgMTYpKQogCQkJYnJlYWs7CkBAIC0xMTYsMTIgKzExNiwxMiBAQAogCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcodmlycSk7CiAKIAlpcnFfbGluZSA9IGZwZ2FfaXJxc1tod2lycV0uaXJxX2xpbmU7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKIAltYXNrID0gc29jcmF0ZXNfZnBnYV9waWNfcmVhZChGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSkKIAkJJiBTT0NSQVRFU19GUEdBX0lSUV9NQVNLOwogCW1hc2sgfD0gKDEgPDwgKGh3aXJxICsgMTYpKTsKIAlzb2NyYXRlc19mcGdhX3BpY193cml0ZShGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSwgbWFzayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNvY3JhdGVzX2ZwZ2FfcGljX21hc2sodW5zaWduZWQgaW50IHZpcnEpCkBAIC0xMzQsMTIgKzEzNCwxMiBAQAogCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcodmlycSk7CiAKIAlpcnFfbGluZSA9IGZwZ2FfaXJxc1tod2lycV0uaXJxX2xpbmU7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKIAltYXNrID0gc29jcmF0ZXNfZnBnYV9waWNfcmVhZChGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSkKIAkJJiBTT0NSQVRFU19GUEdBX0lSUV9NQVNLOwogCW1hc2sgJj0gfigxIDw8IGh3aXJxKTsKIAlzb2NyYXRlc19mcGdhX3BpY193cml0ZShGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSwgbWFzayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNvY3JhdGVzX2ZwZ2FfcGljX21hc2tfYWNrKHVuc2lnbmVkIGludCB2aXJxKQpAQCAtMTUyLDEzICsxNTIsMTMgQEAKIAlod2lycSA9IHNvY3JhdGVzX2ZwZ2FfaXJxX3RvX2h3KHZpcnEpOwogCiAJaXJxX2xpbmUgPSBmcGdhX2lycXNbaHdpcnFdLmlycV9saW5lOwotCXNwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CiAJbWFzayA9IHNvY3JhdGVzX2ZwZ2FfcGljX3JlYWQoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSkpCiAJCSYgU09DUkFURVNfRlBHQV9JUlFfTUFTSzsKIAltYXNrICY9IH4oMSA8PCBod2lycSk7CiAJbWFzayB8PSAoMSA8PCAoaHdpcnEgKyAxNikpOwogCXNvY3JhdGVzX2ZwZ2FfcGljX3dyaXRlKEZQR0FfUElDX0lSUU1BU0soaXJxX2xpbmUpLCBtYXNrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgc29jcmF0ZXNfZnBnYV9waWNfdW5tYXNrKHVuc2lnbmVkIGludCB2aXJxKQpAQCAtMTcxLDEyICsxNzEsMTIgQEAKIAlod2lycSA9IHNvY3JhdGVzX2ZwZ2FfaXJxX3RvX2h3KHZpcnEpOwogCiAJaXJxX2xpbmUgPSBmcGdhX2lycXNbaHdpcnFdLmlycV9saW5lOwotCXNwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CiAJbWFzayA9IHNvY3JhdGVzX2ZwZ2FfcGljX3JlYWQoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSkpCiAJCSYgU09DUkFURVNfRlBHQV9JUlFfTUFTSzsKIAltYXNrIHw9ICgxIDw8IGh3aXJxKTsKIAlzb2NyYXRlc19mcGdhX3BpY193cml0ZShGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSwgbWFzayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNvY3JhdGVzX2ZwZ2FfcGljX2VvaSh1bnNpZ25lZCBpbnQgdmlycSkKQEAgLTE4OSwxMiArMTg5LDEyIEBACiAJaHdpcnEgPSBzb2NyYXRlc19mcGdhX2lycV90b19odyh2aXJxKTsKIAogCWlycV9saW5lID0gZnBnYV9pcnFzW2h3aXJxXS5pcnFfbGluZTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOwogCW1hc2sgPSBzb2NyYXRlc19mcGdhX3BpY19yZWFkKEZQR0FfUElDX0lSUU1BU0soaXJxX2xpbmUpKQogCQkmIFNPQ1JBVEVTX0ZQR0FfSVJRX01BU0s7CiAJbWFzayB8PSAoMSA8PCAoaHdpcnEgKyAxNikpOwogCXNvY3JhdGVzX2ZwZ2FfcGljX3dyaXRlKEZQR0FfUElDX0lSUU1BU0soaXJxX2xpbmUpLCBtYXNrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIGludCBzb2NyYXRlc19mcGdhX3BpY19zZXRfdHlwZSh1bnNpZ25lZCBpbnQgdmlycSwKQEAgLTIyMCwxNCArMjIwLDE0IEBACiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXNwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CiAJbWFzayA9IHNvY3JhdGVzX2ZwZ2FfcGljX3JlYWQoRlBHQV9QSUNfSVJRQ0ZHKTsKIAlpZiAocG9sYXJpdHkpCiAJCW1hc2sgfD0gKDEgPDwgaHdpcnEpOwogCWVsc2UKIAkJbWFzayAmPSB+KDEgPDwgaHdpcnEpOwogCXNvY3JhdGVzX2ZwZ2FfcGljX3dyaXRlKEZQR0FfUElDX0lSUUNGRywgbWFzayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMxNCwxNCArMzE0LDE0IEBACiAKIAlzb2NyYXRlc19mcGdhX3BpY19pb2Jhc2UgPSBvZl9pb21hcChwaWMsIDApOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKIAlzb2NyYXRlc19mcGdhX3BpY193cml0ZShGUEdBX1BJQ19JUlFNQVNLKDApLAogCQkJU09DUkFURVNfRlBHQV9JUlFfTUFTSyA8PCAxNik7CiAJc29jcmF0ZXNfZnBnYV9waWNfd3JpdGUoRlBHQV9QSUNfSVJRTUFTSygxKSwKIAkJCVNPQ1JBVEVTX0ZQR0FfSVJRX01BU0sgPDwgMTYpOwogCXNvY3JhdGVzX2ZwZ2FfcGljX3dyaXRlKEZQR0FfUElDX0lSUU1BU0soMiksCiAJCQlTT0NSQVRFU19GUEdBX0lSUV9NQVNLIDw8IDE2KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKIAogCXByX2luZm8oIkZQR0EgUElDOiBTZXR0aW5nIHVwIFNvY3JhdGVzIEZQR0EgUElDXG4iKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L0tjb25maWcKaW5kZXggMmJiZmQ1My4uZmJlOWYzNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L0tjb25maWcKQEAgLTMzLDMyICszMywzMiBAQAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODYxMCBIUENEIGJvYXJkLgogCiBjb25maWcgR0VGX1BQQzlBCi0JYm9vbCAiR0UgRmFudWMgUFBDOUEiCisJYm9vbCAiR0UgUFBDOUEiCiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCiAJc2VsZWN0IE1NSU9fTlZSQU0KIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBHRSBGYW51YydzIFBQQzlBLgorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgR0UgUFBDOUEuCiAKIGNvbmZpZyBHRUZfU0JDMzEwCi0JYm9vbCAiR0UgRmFudWMgU0JDMzEwIgorCWJvb2wgIkdFIFNCQzMxMCIKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKIAlzZWxlY3QgTU1JT19OVlJBTQogCXNlbGVjdCBHRU5FUklDX0dQSU8KIAlzZWxlY3QgQVJDSF9SRVFVSVJFX0dQSU9MSUIKIAloZWxwCi0JICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIEdFIEZhbnVjJ3MgU0JDMzEwLgorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgR0UgU0JDMzEwLgogCiBjb25maWcgR0VGX1NCQzYxMAotCWJvb2wgIkdFIEZhbnVjIFNCQzYxMCIKKwlib29sICJHRSBTQkM2MTAiCiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCiAJc2VsZWN0IE1NSU9fTlZSQU0KIAlzZWxlY3QgR0VORVJJQ19HUElPCiAJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCiAJc2VsZWN0IEhBU19SQVBJRElPCiAJaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBHRSBGYW51YydzIFNCQzYxMC4KKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIEdFIFNCQzYxMC4KIAogZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9ncGlvLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX2dwaW8uYwppbmRleCBiMmVhODg3Li4xMWY3YjJiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX2dwaW8uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX2dwaW8uYwpAQCAtMSw5ICsxLDkgQEAKIC8qCi0gKiBEcml2ZXIgZm9yIEdFIEZhbnVjJ3MgRlBHQSBiYXNlZCBHUElPIHBpbnMKKyAqIERyaXZlciBmb3IgR0UgRlBHQSBiYXNlZCBHUElPCiAgKgotICogQXV0aG9yOiBNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZWZhbnVjLmNvbT4KKyAqIEF1dGhvcjogTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2UuY29tPgogICoKLSAqIDIwMDggKGMpIEdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCisgKiAyMDA4IChjKSBHRSBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgRW1iZWRkZWQgU3lzdGVtcywgSW5jLgogICoKICAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkKQEAgLTE2NCw2ICsxNjQsNiBAQAogfTsKIGFyY2hfaW5pdGNhbGwoZ2VmX2dwaW9faW5pdCk7CiAKLU1PRFVMRV9ERVNDUklQVElPTigiR0UgRmFudWMgSS9PIEZQR0EgR1BJTyBkcml2ZXIiKTsKLU1PRFVMRV9BVVRIT1IoIk1hcnR5biBXZWxjaCA8bWFydHluLndlbGNoQGdlZmFudWMuY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdFIEkvTyBGUEdBIEdQSU8gZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZS5jb20iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3BpYy5jCmluZGV4IDAxMTBhODcuLjZkZjllMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9waWMuYwpAQCAtMSw5ICsxLDkgQEAKIC8qCi0gKiBJbnRlcnJ1cHQgaGFuZGxpbmcgZm9yIEdFIEZhbnVjJ3MgRlBHQSBiYXNlZCBQSUMKKyAqIEludGVycnVwdCBoYW5kbGluZyBmb3IgR0UgRlBHQSBiYXNlZCBQSUMKICAqCi0gKiBBdXRob3I6IE1hcnR5biBXZWxjaCA8bWFydHluLndlbGNoQGdlZmFudWMuY29tPgorICogQXV0aG9yOiBNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZS5jb20+CiAgKgotICogMjAwOCAoYykgR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KKyAqIDIwMDggKGMpIEdFIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCiAgKgogICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIHZlcnNpb24gMi4gIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQpAQCAtNDksNyArNDksNyBAQAogI2RlZmluZSBnZWZfaXJxX3RvX2h3KHZpcnEpICAgICgodW5zaWduZWQgaW50KWlycV9tYXBbdmlycV0uaHdpcnEpCiAKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhnZWZfcGljX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0soZ2VmX3BpY19sb2NrKTsKIAogc3RhdGljIHZvaWQgX19pb21lbSAqZ2VmX3BpY19pcnFfcmVnX2Jhc2U7CiBzdGF0aWMgc3RydWN0IGlycV9ob3N0ICpnZWZfcGljX2lycV9ob3N0OwpAQCAtMTE4LDExICsxMTgsMTEgQEAKIAogCWh3aXJxID0gZ2VmX2lycV90b19odyh2aXJxKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZnZWZfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmdlZl9waWNfbG9jaywgZmxhZ3MpOwogCW1hc2sgPSBpbl9iZTMyKGdlZl9waWNfaXJxX3JlZ19iYXNlICsgR0VGX1BJQ19JTlRSX01BU0soMCkpOwogCW1hc2sgJj0gfigxIDw8IGh3aXJxKTsKIAlvdXRfYmUzMihnZWZfcGljX2lycV9yZWdfYmFzZSArIEdFRl9QSUNfSU5UUl9NQVNLKDApLCBtYXNrKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnZWZfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2VmX3BpY19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGdlZl9waWNfbWFza19hY2sodW5zaWduZWQgaW50IHZpcnEpCkBAIC0xNDEsMTEgKzE0MSwxMSBAQAogCiAJaHdpcnEgPSBnZWZfaXJxX3RvX2h3KHZpcnEpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmdlZl9waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmZ2VmX3BpY19sb2NrLCBmbGFncyk7CiAJbWFzayA9IGluX2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0lOVFJfTUFTSygwKSk7CiAJbWFzayB8PSAoMSA8PCBod2lycSk7CiAJb3V0X2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0lOVFJfTUFTSygwKSwgbWFzayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2VmX3BpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdlZl9waWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIGdlZl9waWNfY2hpcCA9IHsKQEAgLTE5OSw3ICsxOTksNyBAQAogCS8qIE1hcCB0aGUgZGV2aWNlcyByZWdpc3RlcnMgaW50byBtZW1vcnkgKi8KIAlnZWZfcGljX2lycV9yZWdfYmFzZSA9IG9mX2lvbWFwKG5wLCAwKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZnZWZfcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmdlZl9waWNfbG9jaywgZmxhZ3MpOwogCiAJLyogSW5pdGlhbGlzZSBldmVyeXRoaW5nIGFzIG1hc2tlZC4gKi8KIAlvdXRfYmUzMihnZWZfcGljX2lycV9yZWdfYmFzZSArIEdFRl9QSUNfQ1BVMF9JTlRSX01BU0ssIDApOwpAQCAtMjA4LDcgKzIwOCw3IEBACiAJb3V0X2JlMzIoZ2VmX3BpY19pcnFfcmVnX2Jhc2UgKyBHRUZfUElDX0NQVTBfTUNQX01BU0ssIDApOwogCW91dF9iZTMyKGdlZl9waWNfaXJxX3JlZ19iYXNlICsgR0VGX1BJQ19DUFUxX01DUF9NQVNLLCAwKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdlZl9waWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZnZWZfcGljX2xvY2ssIGZsYWdzKTsKIAogCS8qIE1hcCBjb250cm9sbGVyICovCiAJZ2VmX3BpY19jYXNjYWRlX2lycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcHBjOWEuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcHBjOWEuYwppbmRleCBhNzkyZTVkLi42MGNlMDdlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3BwYzlhLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9wcGM5YS5jCkBAIC0xLDkgKzEsOSBAQAogLyoKLSAqIEdFIEZhbnVjIFBQQzlBIGJvYXJkIHN1cHBvcnQKKyAqIEdFIFBQQzlBIGJvYXJkIHN1cHBvcnQKICAqCi0gKiBBdXRob3I6IE1hcnR5biBXZWxjaCA8bWFydHluLndlbGNoQGdlZmFudWMuY29tPgorICogQXV0aG9yOiBNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZS5jb20+CiAgKgotICogQ29weXJpZ2h0IDIwMDggR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IEdFIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTgyLDcgKzgyLDcgQEAKIAl9CiAjZW5kaWYKIAotCXByaW50ayhLRVJOX0lORk8gIkdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3JtcyBQUEM5QSA2VSBWTUUgU0JDXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJHRSBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgUFBDOUEgNlUgVk1FIFNCQ1xuIik7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJbXBjODZ4eF9zbXBfaW5pdCgpOwpAQCAtMTUxLDcgKzE1MSw3IEBACiB7CiAJdWludCBzdmlkID0gbWZzcHIoU1BSTl9TVlIpOwogCi0Jc2VxX3ByaW50ZihtLCAiVmVuZG9yXHRcdDogR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zXG4iKTsKKwlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBHRSBJbnRlbGxpZ2VudCBQbGF0Zm9ybXNcbiIpOwogCiAJc2VxX3ByaW50ZihtLCAiUmV2aXNpb25cdDogJXUlY1xuIiwgZ2VmX3BwYzlhX2dldF9wY2JfcmV2KCksCiAJCSgnQScgKyBnZWZfcHBjOWFfZ2V0X2JvYXJkX3JldigpKSk7CkBAIC0yMzUsNyArMjM1LDcgQEAKIG1hY2hpbmVfZGV2aWNlX2luaXRjYWxsKGdlZl9wcGM5YSwgZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKTsKIAogZGVmaW5lX21hY2hpbmUoZ2VmX3BwYzlhKSB7Ci0JLm5hbWUJCQk9ICJHRSBGYW51YyBQUEM5QSIsCisJLm5hbWUJCQk9ICJHRSBQUEM5QSIsCiAJLnByb2JlCQkJPSBnZWZfcHBjOWFfcHJvYmUsCiAJLnNldHVwX2FyY2gJCT0gZ2VmX3BwYzlhX3NldHVwX2FyY2gsCiAJLmluaXRfSVJRCQk9IGdlZl9wcGM5YV9pbml0X2lycSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfc2JjMzEwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzMxMC5jCmluZGV4IDZhMWE2MTMuLjNlY2VlMjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfc2JjMzEwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmMzMTAuYwpAQCAtMSw5ICsxLDkgQEAKIC8qCi0gKiBHRSBGYW51YyBTQkMzMTAgYm9hcmQgc3VwcG9ydAorICogR0UgU0JDMzEwIGJvYXJkIHN1cHBvcnQKICAqCi0gKiBBdXRob3I6IE1hcnR5biBXZWxjaCA8bWFydHluLndlbGNoQGdlZmFudWMuY29tPgorICogQXV0aG9yOiBNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZS5jb20+CiAgKgotICogQ29weXJpZ2h0IDIwMDggR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KKyAqIENvcHlyaWdodCAyMDA4IEdFIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTgyLDcgKzgyLDcgQEAKIAl9CiAjZW5kaWYKIAotCXByaW50ayhLRVJOX0lORk8gIkdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3JtcyBTQkMzMTAgNlUgVlBYIFNCQ1xuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiR0UgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIFNCQzMxMCA2VSBWUFggU0JDXG4iKTsKIAogI2lmZGVmIENPTkZJR19TTVAKIAltcGM4Nnh4X3NtcF9pbml0KCk7CkBAIC0xNDIsNyArMTQyLDcgQEAKIHsKIAl1aW50IHN2aWQgPSBtZnNwcihTUFJOX1NWUik7CiAKLQlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXNcbiIpOworCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IEdFIEludGVsbGlnZW50IFBsYXRmb3Jtc1xuIik7CiAKIAlzZXFfcHJpbnRmKG0sICJCb2FyZCBJRFx0OiAweCUyLjJ4XG4iLCBnZWZfc2JjMzEwX2dldF9ib2FyZF9pZCgpKTsKIAlzZXFfcHJpbnRmKG0sICJSZXZpc2lvblx0OiAldSVjXG4iLCBnZWZfc2JjMzEwX2dldF9wY2JfcmV2KCksCkBAIC0yMjMsNyArMjIzLDcgQEAKIG1hY2hpbmVfZGV2aWNlX2luaXRjYWxsKGdlZl9zYmMzMTAsIGRlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyk7CiAKIGRlZmluZV9tYWNoaW5lKGdlZl9zYmMzMTApIHsKLQkubmFtZQkJCT0gIkdFIEZhbnVjIFNCQzMxMCIsCisJLm5hbWUJCQk9ICJHRSBTQkMzMTAiLAogCS5wcm9iZQkJCT0gZ2VmX3NiYzMxMF9wcm9iZSwKIAkuc2V0dXBfYXJjaAkJPSBnZWZfc2JjMzEwX3NldHVwX2FyY2gsCiAJLmluaXRfSVJRCQk9IGdlZl9zYmMzMTBfaW5pdF9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzYxMC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmM2MTAuYwppbmRleCBlMTA2ODhhLi41MDkwZDYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzYxMC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfc2JjNjEwLmMKQEAgLTEsOSArMSw5IEBACiAvKgotICogR0UgRmFudWMgU0JDNjEwIGJvYXJkIHN1cHBvcnQKKyAqIEdFIFNCQzYxMCBib2FyZCBzdXBwb3J0CiAgKgotICogQXV0aG9yOiBNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZWZhbnVjLmNvbT4KKyAqIEF1dGhvcjogTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2UuY29tPgogICoKLSAqIENvcHlyaWdodCAyMDA4IEdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBHRSBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgRW1iZWRkZWQgU3lzdGVtcywgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC04Miw3ICs4Miw3IEBACiAJfQogI2VuZGlmCiAKLQlwcmludGsoS0VSTl9JTkZPICJHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgU0JDNjEwIDZVIFZQWCBTQkNcbiIpOworCXByaW50ayhLRVJOX0lORk8gIkdFIEludGVsbGlnZW50IFBsYXRmb3JtcyBTQkM2MTAgNlUgVlBYIFNCQ1xuIik7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJbXBjODZ4eF9zbXBfaW5pdCgpOwpAQCAtMTMzLDcgKzEzMyw3IEBACiB7CiAJdWludCBzdmlkID0gbWZzcHIoU1BSTl9TVlIpOwogCi0Jc2VxX3ByaW50ZihtLCAiVmVuZG9yXHRcdDogR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zXG4iKTsKKwlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBHRSBJbnRlbGxpZ2VudCBQbGF0Zm9ybXNcbiIpOwogCiAJc2VxX3ByaW50ZihtLCAiUmV2aXNpb25cdDogJXUlY1xuIiwgZ2VmX3NiYzYxMF9nZXRfcGNiX3JldigpLAogCQkoJ0EnICsgZ2VmX3NiYzYxMF9nZXRfYm9hcmRfcmV2KCkgLSAxKSk7CkBAIC0yMTIsNyArMjEyLDcgQEAKIG1hY2hpbmVfZGV2aWNlX2luaXRjYWxsKGdlZl9zYmM2MTAsIGRlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyk7CiAKIGRlZmluZV9tYWNoaW5lKGdlZl9zYmM2MTApIHsKLQkubmFtZQkJCT0gIkdFIEZhbnVjIFNCQzYxMCIsCisJLm5hbWUJCQk9ICJHRSBTQkM2MTAiLAogCS5wcm9iZQkJCT0gZ2VmX3NiYzYxMF9wcm9iZSwKIAkuc2V0dXBfYXJjaAkJPSBnZWZfc2JjNjEwX3NldHVwX2FyY2gsCiAJLmluaXRfSVJRCQk9IGdlZl9zYmM2MTBfaW5pdF9pcnEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcuY3B1dHlwZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCmluZGV4IGZhMGY2OTAuLmE4YWFlMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlCkBAIC0xNDQsNiArMTQ0LDE2IEBACiAJICBhbmQgc29tZSBlMzAwIGNvcmVzIChjMyBhbmQgYzQpLiAgU2VsZWN0IHRoaXMgb25seSBpZiB5b3VyCiAJICBjb3JlIHN1cHBvcnRzIHRoZSBFbWJlZGRlZCBQZXJmb3JtYW5jZSBNb25pdG9yIEFQVQogCitjb25maWcgRlNMX0VNQl9QRVJGX0VWRU5UCisJYm9vbAorCWRlcGVuZHMgb24gRlNMX0VNQl9QRVJGTU9OICYmIFBFUkZfRVZFTlRTICYmICFQUENfUEVSRl9DVFJTCisJZGVmYXVsdCB5CisKK2NvbmZpZyBGU0xfRU1CX1BFUkZfRVZFTlRfRTUwMAorCWJvb2wKKwlkZXBlbmRzIG9uIEZTTF9FTUJfUEVSRl9FVkVOVCAmJiBFNTAwCisJZGVmYXVsdCB5CisKIGNvbmZpZyA0eHgKIAlib29sCiAJZGVwZW5kcyBvbiA0MHggfHwgNDR4CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZXhjZXB0aW9uLlMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvZXhjZXB0aW9uLlMKaW5kZXggNTM2OTY1My4uZmJhNWJmOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2V4Y2VwdGlvbi5TCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9leGNlcHRpb24uUwpAQCAtNDMsMTcgKzQzLDE0IEBACiAJTE9BRF9SRUdfQUREUihyMjMsIGFscGFjYSkKIAlsaQlyMCxBTFBBQ0FfU0laRQogCXN1YglyMjMscjEzLHIyMwotCWRpdmR1CXIyMyxyMjMscjAJCS8qIHIyMyBoYXMgY3B1IG51bWJlciAqLwotCUxPQURfUkVHX0FERFIocjEzLCBwYWNhKQotCW11bGxpCXIwLHIyMyxQQUNBX1NJWkUKLQlhZGQJcjEzLHIxMyxyMAotCW10c3ByCVNQUk5fU1BSR19QQUNBLHIxMwkvKiBTYXZlIGl0IGF3YXkgZm9yIHRoZSBmdXR1cmUgKi8KLQltZm1zcglyMjQKLQlvcmkJcjI0LHIyNCxNU1JfUkkKLQltdG1zcmQJcjI0CQkJLyogUkkgb24gKi8KLQltcglyMjQscjIzCisJZGl2ZHUJcjI0LHIyMyxyMAkJLyogcjI0IGhhcyBjcHUgbnVtYmVyICovCiAJY21wd2kJMCxyMjQsMAkJCS8qIEFyZSB3ZSBwcm9jZXNzb3IgMD8gKi8KIAlibmUJMWYKKwlMT0FEX1JFR19BRERSKHIxMywgYm9vdF9wYWNhKQorCW10c3ByCVNQUk5fU1BSR19QQUNBLHIxMwkvKiBTYXZlIGl0IGF3YXkgZm9yIHRoZSBmdXR1cmUgKi8KKwltZm1zcglyMjMKKwlvcmkJcjIzLHIyMyxNU1JfUkkKKwltdG1zcmQJcjIzCQkJLyogUkkgb24gKi8KIAliCS5fX3N0YXJ0X2luaXRpYWxpemF0aW9uX2lTZXJpZXMJLyogU3RhcnQgdXAgdGhlIGZpcnN0IHByb2Nlc3NvciAqLwogMToJbWZzcHIJcjQsU1BSTl9DVFJMRgogCWxpCXI1LENUUkxfUlVOTEFUQ0gJLyogVHVybiBvZmYgdGhlIHJ1biBsaWdodCAqLwpAQCAtODYsNiArODMsMTYgQEAKICNlbmRpZgogCiAyOgorCS8qIExvYWQgb3VyIHBhY2Egbm93IHRoYXQgaXQncyBiZWVuIGFsbG9jYXRlZCAqLworCUxPQURfUkVHX0FERFIocjEzLCBwYWNhKQorCWxkCXIxMywwKHIxMykKKwltdWxsaQlyMCxyMjQsUEFDQV9TSVpFCisJYWRkCXIxMyxyMTMscjAKKwltdHNwcglTUFJOX1NQUkdfUEFDQSxyMTMJLyogU2F2ZSBpdCBhd2F5IGZvciB0aGUgZnV0dXJlICovCisJbWZtc3IJcjIzCisJb3JpCXIyMyxyMjMsTVNSX1JJCisJbXRtc3JkCXIyMwkJCS8qIFJJIG9uICovCisKIAlITVRfTE9XCiAjaWZkZWYgQ09ORklHX1NNUAogCWxieglyMjMsUEFDQVBST0NTVEFSVChyMTMpCS8qIFRlc3QgaWYgdGhpcyBwcm9jZXNzb3IKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9ob3RwbHVnLWNwdS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKaW5kZXggZDFiMTI0ZS4uYThlMWQ1ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2hvdHBsdWctY3B1LmMKQEAgLTEyMiw0NCArMTIyLDMyIEBACiAJCWlmICghZ2V0X2xwcGFjYSgpLT5zaGFyZWRfcHJvYykKIAkJCWdldF9scHBhY2EoKS0+ZG9uYXRlX2RlZGljYXRlZF9jcHUgPSAxOwogCi0JCXByaW50ayhLRVJOX0lORk8KLQkJCSJjcHUgJXUgKGh3aWQgJXUpIGNlZGluZyBmb3Igb2ZmbGluZSB3aXRoIGhpbnQgJWRcbiIsCi0JCQljcHUsIGh3Y3B1LCBjZWRlX2xhdGVuY3lfaGludCk7CiAJCXdoaWxlIChnZXRfcHJlZmVycmVkX29mZmxpbmVfc3RhdGUoY3B1KSA9PSBDUFVfU1RBVEVfSU5BQ1RJVkUpIHsKIAkJCWV4dGVuZGVkX2NlZGVfcHJvY2Vzc29yKGNlZGVfbGF0ZW5jeV9oaW50KTsKLQkJCXByaW50ayhLRVJOX0lORk8gImNwdSAldSAoaHdpZCAldSkgcmV0dXJuZWQgZnJvbSBjZWRlLlxuIiwKLQkJCQljcHUsIGh3Y3B1KTsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCSJEZWNyZW1lbnRlciB2YWx1ZSA9ICV4IFRpbWViYXNlIHZhbHVlID0gJWxseFxuIiwKLQkJCWdldF9kZWMoKSwgZ2V0X3RiKCkpOwogCQl9CiAKLQkJcHJpbnRrKEtFUk5fSU5GTyAiY3B1ICV1IChod2lkICV1KSBnb3QgcHJvZGRlZCB0byBnbyBvbmxpbmVcbiIsCi0JCQljcHUsIGh3Y3B1KTsKLQogCQlpZiAoIWdldF9scHBhY2EoKS0+c2hhcmVkX3Byb2MpCiAJCQlnZXRfbHBwYWNhKCktPmRvbmF0ZV9kZWRpY2F0ZWRfY3B1ID0gMDsKIAkJZ2V0X2xwcGFjYSgpLT5pZGxlID0gMDsKKworCQlpZiAoZ2V0X3ByZWZlcnJlZF9vZmZsaW5lX3N0YXRlKGNwdSkgPT0gQ1BVX1NUQVRFX09OTElORSkgeworCQkJdW5yZWdpc3Rlcl9zbGJfc2hhZG93KGh3Y3B1LCBfX3BhKGdldF9zbGJfc2hhZG93KCkpKTsKKworCQkJLyoKKwkJCSAqIENhbGwgdG8gc3RhcnRfc2Vjb25kYXJ5X3Jlc3VtZSgpIHdpbGwgbm90IHJldHVybi4KKwkJCSAqIEtlcm5lbCBzdGFjayB3aWxsIGJlIHJlc2V0IGFuZCBzdGFydF9zZWNvbmRhcnkoKQorCQkJICogd2lsbCBiZSBjYWxsZWQgdG8gY29udGludWUgdGhlIG9ubGluZSBvcGVyYXRpb24uCisJCQkgKi8KKwkJCXN0YXJ0X3NlY29uZGFyeV9yZXN1bWUoKTsKKwkJfQogCX0KIAotCWlmIChnZXRfcHJlZmVycmVkX29mZmxpbmVfc3RhdGUoY3B1KSA9PSBDUFVfU1RBVEVfT05MSU5FKSB7Ci0JCXVucmVnaXN0ZXJfc2xiX3NoYWRvdyhod2NwdSwgX19wYShnZXRfc2xiX3NoYWRvdygpKSk7CisJLyogUmVxdWVzdGVkIHN0YXRlIGlzIENQVV9TVEFURV9PRkZMSU5FIGF0IHRoaXMgcG9pbnQgKi8KKwlXQVJOX09OKGdldF9wcmVmZXJyZWRfb2ZmbGluZV9zdGF0ZShjcHUpICE9IENQVV9TVEFURV9PRkZMSU5FKTsKIAotCQkvKgotCQkgKiBOT1RFOiBDYWxsaW5nIHN0YXJ0X3NlY29uZGFyeSgpIGhlcmUgZm9yIG5vdyB0bwotCQkgKiBzdGFydCBuZXcgY29udGV4dC4KLQkJICogSG93ZXZlciwgbmVlZCB0byBkbyBpdCBjbGVhbmx5IGJ5IHJlc2V0dGluZyB0aGUKLQkJICogc3RhY2sgcG9pbnRlci4KLQkJICovCi0JCXN0YXJ0X3NlY29uZGFyeSgpOwotCi0JfSBlbHNlIGlmIChnZXRfcHJlZmVycmVkX29mZmxpbmVfc3RhdGUoY3B1KSA9PSBDUFVfU1RBVEVfT0ZGTElORSkgewotCi0JCXNldF9jcHVfY3VycmVudF9zdGF0ZShjcHUsIENQVV9TVEFURV9PRkZMSU5FKTsKLQkJdW5yZWdpc3Rlcl9zbGJfc2hhZG93KGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpLAotCQkJCQlfX3BhKGdldF9zbGJfc2hhZG93KCkpKTsKLQkJcnRhc19zdG9wX3NlbGYoKTsKLQl9CisJc2V0X2NwdV9jdXJyZW50X3N0YXRlKGNwdSwgQ1BVX1NUQVRFX09GRkxJTkUpOworCXVucmVnaXN0ZXJfc2xiX3NoYWRvdyhod2NwdSwgX19wYShnZXRfc2xiX3NoYWRvdygpKSk7CisJcnRhc19zdG9wX3NlbGYoKTsKIAogCS8qIFNob3VsZCBuZXZlciBnZXQgaGVyZS4uLiAqLwogCUJVRygpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL29mZmxpbmVfc3RhdGVzLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvb2ZmbGluZV9zdGF0ZXMuaAppbmRleCAyMjU3NGUwLi43NWE2ZjQ4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvb2ZmbGluZV9zdGF0ZXMuaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvb2ZmbGluZV9zdGF0ZXMuaApAQCAtOSwxMCArOSwzMSBAQAogCUNQVV9NQVhfT0ZGTElORV9TVEFURVMKIH07CiAKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIGV4dGVybiBlbnVtIGNwdV9zdGF0ZV92YWxzIGdldF9jcHVfY3VycmVudF9zdGF0ZShpbnQgY3B1KTsKIGV4dGVybiB2b2lkIHNldF9jcHVfY3VycmVudF9zdGF0ZShpbnQgY3B1LCBlbnVtIGNwdV9zdGF0ZV92YWxzIHN0YXRlKTsKLWV4dGVybiBlbnVtIGNwdV9zdGF0ZV92YWxzIGdldF9wcmVmZXJyZWRfb2ZmbGluZV9zdGF0ZShpbnQgY3B1KTsKIGV4dGVybiB2b2lkIHNldF9wcmVmZXJyZWRfb2ZmbGluZV9zdGF0ZShpbnQgY3B1LCBlbnVtIGNwdV9zdGF0ZV92YWxzIHN0YXRlKTsKIGV4dGVybiB2b2lkIHNldF9kZWZhdWx0X29mZmxpbmVfc3RhdGUoaW50IGNwdSk7CisjZWxzZQorc3RhdGljIGlubGluZSBlbnVtIGNwdV9zdGF0ZV92YWxzIGdldF9jcHVfY3VycmVudF9zdGF0ZShpbnQgY3B1KQoreworCXJldHVybiBDUFVfU1RBVEVfT05MSU5FOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2NwdV9jdXJyZW50X3N0YXRlKGludCBjcHUsIGVudW0gY3B1X3N0YXRlX3ZhbHMgc3RhdGUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHJlZmVycmVkX29mZmxpbmVfc3RhdGUoaW50IGNwdSwgZW51bSBjcHVfc3RhdGVfdmFscyBzdGF0ZSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9kZWZhdWx0X29mZmxpbmVfc3RhdGUoaW50IGNwdSkKK3sKK30KKyNlbmRpZgorCitleHRlcm4gZW51bSBjcHVfc3RhdGVfdmFscyBnZXRfcHJlZmVycmVkX29mZmxpbmVfc3RhdGUoaW50IGNwdSk7CiBleHRlcm4gaW50IHN0YXJ0X3NlY29uZGFyeSh2b2lkKTsKK2V4dGVybiB2b2lkIHN0YXJ0X3NlY29uZGFyeV9yZXN1bWUodm9pZCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wbHBhcl93cmFwcGVycy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BscGFyX3dyYXBwZXJzLmgKaW5kZXggMDYwM2M5MS4uYTA1ZjhkNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BscGFyX3dyYXBwZXJzLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BscGFyX3dyYXBwZXJzLmgKQEAgLTI1OSwxMiArMjU5LDEyIEBACiAJcmV0dXJuIHBscGFyX2hjYWxsX25vcmV0cyhIX0lQSSwgc2VydmVybnVtLCBtZnJyKTsKIH0KIAotc3RhdGljIGlubGluZSBsb25nIHBscGFyX3hpcnIodW5zaWduZWQgbG9uZyAqeGlycl9yZXQpCitzdGF0aWMgaW5saW5lIGxvbmcgcGxwYXJfeGlycih1bnNpZ25lZCBsb25nICp4aXJyX3JldCwgdW5zaWduZWQgY2hhciBjcHByKQogewogCWxvbmcgcmM7CiAJdW5zaWduZWQgbG9uZyByZXRidWZbUExQQVJfSENBTExfQlVGU0laRV07CiAKLQlyYyA9IHBscGFyX2hjYWxsKEhfWElSUiwgcmV0YnVmKTsKKwlyYyA9IHBscGFyX2hjYWxsKEhfWElSUiwgcmV0YnVmLCBjcHByKTsKIAogCSp4aXJyX3JldCA9IHJldGJ1ZlswXTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy94aWNzLmMKaW5kZXggNGNhNjQxMC4uMWJjZWRkOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3hpY3MuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMveGljcy5jCkBAIC0xMjAsMTIgKzEyMCwxMiBAQAogCiAvKiBMUEFSIGxvdyBsZXZlbCBhY2Nlc3NvcnMgKi8KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbHBhcl94aXJyX2luZm9fZ2V0KHZvaWQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBscGFyX3hpcnJfaW5mb19nZXQodW5zaWduZWQgY2hhciBjcHByKQogewogCXVuc2lnbmVkIGxvbmcgbHBhcl9yYzsKIAl1bnNpZ25lZCBsb25nIHJldHVybl92YWx1ZTsKIAotCWxwYXJfcmMgPSBwbHBhcl94aXJyKCZyZXR1cm5fdmFsdWUpOworCWxwYXJfcmMgPSBwbHBhcl94aXJyKCZyZXR1cm5fdmFsdWUsIGNwcHIpOwogCWlmIChscGFyX3JjICE9IEhfU1VDQ0VTUykKIAkJcGFuaWMoIiBiYWQgcmV0dXJuIGNvZGUgeGlyciAtIHJjID0gJWx4XG4iLCBscGFyX3JjKTsKIAlyZXR1cm4gKHVuc2lnbmVkIGludClyZXR1cm5fdmFsdWU7CkBAIC0zMzEsNyArMzMxLDggQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCB4aWNzX2dldF9pcnFfbHBhcih2b2lkKQogewotCXVuc2lnbmVkIGludCB4aXJyID0gbHBhcl94aXJyX2luZm9fZ2V0KCk7CisJc3RydWN0IHhpY3NfY3BwciAqb3NfY3BwciA9ICZfX2dldF9jcHVfdmFyKHhpY3NfY3Bwcik7CisJdW5zaWduZWQgaW50IHhpcnIgPSBscGFyX3hpcnJfaW5mb19nZXQob3NfY3Bwci0+c3RhY2tbb3NfY3Bwci0+aW5kZXhdKTsKIAl1bnNpZ25lZCBpbnQgdmVjID0geGljc194aXJyX3ZlY3Rvcih4aXJyKTsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTJfcGljLmggYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTJfcGljLmgKaW5kZXggMzBlNTgyOC4uMmM1ZjcwYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG0yX3BpYy5oCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMl9waWMuaApAQCAtMyw2ICszLDYgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBjcG0yX2dldF9pcnEodm9pZCk7CiAKLWV4dGVybiB2b2lkIGNwbTJfcGljX2luaXQoc3RydWN0IGRldmljZV9ub2RlKik7CitleHRlcm4gdm9pZCBjcG0yX3BpY19pbml0KHN0cnVjdCBkZXZpY2Vfbm9kZSAqKTsKIAogI2VuZGlmIC8qIF9QUENfS0VSTkVMX0NQTTJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaWMuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2ljLmMKaW5kZXggZDkyN2RhOC4uNTQxYmE5OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfaWMuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9pYy5jCkBAIC0zMyw3ICszMyw3IEBACiAKICNpbmNsdWRlICJxZV9pYy5oIgogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHFlX2ljX2xvY2spOworc3RhdGljIERFRklORV9SQVdfU1BJTkxPQ0socWVfaWNfbG9jayk7CiAKIHN0YXRpYyBzdHJ1Y3QgcWVfaWNfaW5mbyBxZV9pY19pbmZvW10gPSB7CiAJWzFdID0gewpAQCAtMjAxLDEzICsyMDEsMTMgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiB0ZW1wOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnFlX2ljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnFlX2ljX2xvY2ssIGZsYWdzKTsKIAogCXRlbXAgPSBxZV9pY19yZWFkKHFlX2ljLT5yZWdzLCBxZV9pY19pbmZvW3NyY10ubWFza19yZWcpOwogCXFlX2ljX3dyaXRlKHFlX2ljLT5yZWdzLCBxZV9pY19pbmZvW3NyY10ubWFza19yZWcsCiAJCSAgICB0ZW1wIHwgcWVfaWNfaW5mb1tzcmNdLm1hc2spOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWVfaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZxZV9pY19sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHFlX2ljX21hc2tfaXJxKHVuc2lnbmVkIGludCB2aXJxKQpAQCAtMjE3LDcgKzIxNyw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgdGVtcDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZxZV9pY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZxZV9pY19sb2NrLCBmbGFncyk7CiAKIAl0ZW1wID0gcWVfaWNfcmVhZChxZV9pYy0+cmVncywgcWVfaWNfaW5mb1tzcmNdLm1hc2tfcmVnKTsKIAlxZV9pY193cml0ZShxZV9pYy0+cmVncywgcWVfaWNfaW5mb1tzcmNdLm1hc2tfcmVnLApAQCAtMjMzLDcgKzIzMyw3IEBACiAJICovCiAJbWIoKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFlX2ljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWVfaWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgc3RydWN0IGlycV9jaGlwIHFlX2ljX2lycV9jaGlwID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2NyeXB0by9zaGFfY29tbW9uLmMgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYV9jb21tb24uYwppbmRleCA3OTAzZWM0Li5mNDJkYmFiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvY3J5cHRvL3NoYV9jb21tb24uYworKysgYi9hcmNoL3MzOTAvY3J5cHRvL3NoYV9jb21tb24uYwpAQCAtNzksNyArNzksNyBAQAogCW1lbXNldChjdHgtPmJ1ZiArIGluZGV4LCAweDAwLCBlbmQgLSBpbmRleCAtIDgpOwogCiAJLyoKLQkgKiBBcHBlbmQgbWVzc2FnZSBsZW5ndGguIFdlbGwsIFNIQS01MTIgd2FudHMgYSAxMjggYml0IGxlbmdodCB2YWx1ZSwKKwkgKiBBcHBlbmQgbWVzc2FnZSBsZW5ndGguIFdlbGwsIFNIQS01MTIgd2FudHMgYSAxMjggYml0IGxlbmd0aCB2YWx1ZSwKIAkgKiBuZXZlcnRoZWxlc3Mgd2UgdXNlIHU2NCwgc2hvdWxkIGJlIGVub3VnaCBmb3Igbm93Li4uCiAJICovCiAJYml0cyA9IGN0eC0+Y291bnQgKiA4OwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2h5cGZzL2lub2RlLmMgYi9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYwppbmRleCAzNDFhZmYyLi5jZDEyOGIwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYworKysgYi9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYwpAQCAtMjg4LDQ2ICsyODgsMzAgQEAKIAlzYi0+c19ibG9ja3NpemVfYml0cyA9IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJc2ItPnNfbWFnaWMgPSBIWVBGU19NQUdJQzsKIAlzYi0+c19vcCA9ICZoeXBmc19zX29wczsKLQlpZiAoaHlwZnNfcGFyc2Vfb3B0aW9ucyhkYXRhLCBzYikpIHsKLQkJcmMgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9hbGxvYzsKLQl9CisJaWYgKGh5cGZzX3BhcnNlX29wdGlvbnMoZGF0YSwgc2IpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAlyb290X2lub2RlID0gaHlwZnNfbWFrZV9pbm9kZShzYiwgU19JRkRJUiB8IDA3NTUpOwotCWlmICghcm9vdF9pbm9kZSkgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2FsbG9jOwotCX0KKwlpZiAoIXJvb3RfaW5vZGUpCisJCXJldHVybiAtRU5PTUVNOwogCXJvb3RfaW5vZGUtPmlfb3AgPSAmc2ltcGxlX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogCXJvb3RfaW5vZGUtPmlfZm9wID0gJnNpbXBsZV9kaXJfb3BlcmF0aW9uczsKLQlyb290X2RlbnRyeSA9IGRfYWxsb2Nfcm9vdChyb290X2lub2RlKTsKKwlzYi0+c19yb290ID0gcm9vdF9kZW50cnkgPSBkX2FsbG9jX3Jvb3Qocm9vdF9pbm9kZSk7CiAJaWYgKCFyb290X2RlbnRyeSkgewogCQlpcHV0KHJvb3RfaW5vZGUpOwotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX2FsbG9jOworCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJaWYgKE1BQ0hJTkVfSVNfVk0pCiAJCXJjID0gaHlwZnNfdm1fY3JlYXRlX2ZpbGVzKHNiLCByb290X2RlbnRyeSk7CiAJZWxzZQogCQlyYyA9IGh5cGZzX2RpYWdfY3JlYXRlX2ZpbGVzKHNiLCByb290X2RlbnRyeSk7CiAJaWYgKHJjKQotCQlnb3RvIGVycl90cmVlOworCQlyZXR1cm4gcmM7CiAJc2JpLT51cGRhdGVfZmlsZSA9IGh5cGZzX2NyZWF0ZV91cGRhdGVfZmlsZShzYiwgcm9vdF9kZW50cnkpOwotCWlmIChJU19FUlIoc2JpLT51cGRhdGVfZmlsZSkpIHsKLQkJcmMgPSBQVFJfRVJSKHNiaS0+dXBkYXRlX2ZpbGUpOwotCQlnb3RvIGVycl90cmVlOwotCX0KKwlpZiAoSVNfRVJSKHNiaS0+dXBkYXRlX2ZpbGUpKQorCQlyZXR1cm4gUFRSX0VSUihzYmktPnVwZGF0ZV9maWxlKTsKIAloeXBmc191cGRhdGVfdXBkYXRlKHNiKTsKLQlzYi0+c19yb290ID0gcm9vdF9kZW50cnk7CiAJcHJfaW5mbygiSHlwZXJ2aXNvciBmaWxlc3lzdGVtIG1vdW50ZWRcbiIpOwogCXJldHVybiAwOwotCi1lcnJfdHJlZToKLQloeXBmc19kZWxldGVfdHJlZShyb290X2RlbnRyeSk7Ci0JZF9nZW5vY2lkZShyb290X2RlbnRyeSk7Ci0JZHB1dChyb290X2RlbnRyeSk7Ci1lcnJfYWxsb2M6Ci0Ja2ZyZWUoc2JpKTsKLQlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgaHlwZnNfZ2V0X3N1cGVyKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc3QsIGludCBmbGFncywKQEAgLTM0MCwxMiArMzI0LDEyIEBACiB7CiAJc3RydWN0IGh5cGZzX3NiX2luZm8gKnNiX2luZm8gPSBzYi0+c19mc19pbmZvOwogCi0JaWYgKHNiLT5zX3Jvb3QpIHsKKwlpZiAoc2ItPnNfcm9vdCkKIAkJaHlwZnNfZGVsZXRlX3RyZWUoc2ItPnNfcm9vdCk7CisJaWYgKHNiX2luZm8tPnVwZGF0ZV9maWxlKQogCQloeXBmc19yZW1vdmUoc2JfaW5mby0+dXBkYXRlX2ZpbGUpOwotCQlrZnJlZShzYi0+c19mc19pbmZvKTsKLQkJc2ItPnNfZnNfaW5mbyA9IE5VTEw7Ci0JfQorCWtmcmVlKHNiLT5zX2ZzX2luZm8pOworCXNiLT5zX2ZzX2luZm8gPSBOVUxMOwogCWtpbGxfbGl0dGVyX3N1cGVyKHNiKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Npby5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2Npby5oCmluZGV4IGU4NTY3OWEuLmUzNDM0N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jaW8uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY2lvLmgKQEAgLTIwLDcgKzIwLDcgQEAKIC8qKgogICogc3RydWN0IGNjdzEgLSBjaGFubmVsIGNvbW1hbmQgd29yZAogICogQGNtZF9jb2RlOiBjb21tYW5kIGNvZGUKLSAqIEBmbGFnczogZmxhZ3MsIGxpa2UgSURBIGFkcmVzc2luZywgZXRjLgorICogQGZsYWdzOiBmbGFncywgbGlrZSBJREEgYWRkcmVzc2luZywgZXRjLgogICogQGNvdW50OiBieXRlIGNvdW50CiAgKiBAY2RhOiBkYXRhIGFkZHJlc3MKICAqCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY29tcGF0LmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vY29tcGF0LmgKaW5kZXggMDFhMDgwMi4uMTA0ZjIwMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2NvbXBhdC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9jb21wYXQuaApAQCAtMzUsNyArMzUsOCBAQAogCiBleHRlcm4gbG9uZyBwc3czMl91c2VyX2JpdHM7CiAKLSNkZWZpbmUgQ09NUEFUX1VTRVJfSFoJMTAwCisjZGVmaW5lIENPTVBBVF9VU0VSX0haCQkxMDAKKyNkZWZpbmUgQ09NUEFUX1VUU19NQUNISU5FCSJzMzkwXDBcMFwwXDAiCiAKIHR5cGVkZWYgdTMyCQljb21wYXRfc2l6ZV90OwogdHlwZWRlZiBzMzIJCWNvbXBhdF9zc2l6ZV90OwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IGRkMmQ5MTMuLmZlZjliMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9wdHJhY2UuaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTQ4OSw5ICs0ODksNiBAQAogICogVGhlc2UgYXJlIGRlZmluZWQgYXMgcGVyIGxpbnV4L3B0cmFjZS5oLCB3aGljaCBzZWUuCiAgKi8KICNkZWZpbmUgYXJjaF9oYXNfc2luZ2xlX3N0ZXAoKQkoMSkKLXN0cnVjdCB0YXNrX3N0cnVjdDsKLWV4dGVybiB2b2lkIHVzZXJfZW5hYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKLWV4dGVybiB2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiBleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKIAogI2RlZmluZSB1c2VyX21vZGUocmVncykgKCgocmVncyktPnBzdy5tYXNrICYgUFNXX01BU0tfUFNUQVRFKSAhPSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaCBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS9xZGlvLmgKaW5kZXggYzY2NmJmZS4uOWIwNGIxMSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3FkaW8uaAorKysgYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vcWRpby5oCkBAIC0zMjEsMTEgKzMyMSw2IEBACiAjZGVmaW5lIFFESU9fRVJST1JfQUNUSVZBVEVfQ0hFQ0tfQ09ORElUSU9OCTB4NDAKICNkZWZpbmUgUURJT19FUlJPUl9TTFNCX1NUQVRFCQkJMHg4MAogCi0vKiBmb3IgcWRpb19pbml0aWFsaXplICovCi0jZGVmaW5lIFFESU9fSU5CT1VORF8wQ09QWV9TQkFMUwkJMHgwMQotI2RlZmluZSBRRElPX09VVEJPVU5EXzBDT1BZX1NCQUxTCQkweDAyCi0jZGVmaW5lIFFESU9fVVNFX09VVEJPVU5EX1BDSVMJCQkweDA0Ci0KIC8qIGZvciBxZGlvX2NsZWFudXAgKi8KICNkZWZpbmUgUURJT19GTEFHX0NMRUFOVVBfVVNJTkdfQ0xFQVIJCTB4MDEKICNkZWZpbmUgUURJT19GTEFHX0NMRUFOVVBfVVNJTkdfSEFMVAkJMHgwMgpAQCAtMzQ0LDcgKzMzOSw2IEBACiAgKiBAaW5wdXRfaGFuZGxlcjogaGFuZGxlciB0byBiZSBjYWxsZWQgZm9yIGlucHV0IHF1ZXVlcwogICogQG91dHB1dF9oYW5kbGVyOiBoYW5kbGVyIHRvIGJlIGNhbGxlZCBmb3Igb3V0cHV0IHF1ZXVlcwogICogQGludF9wYXJtOiBpbnRlcnJ1cHRpb24gcGFyYW1ldGVyCi0gKiBAZmxhZ3M6IGluaXRpYWxpemF0aW9uIGZsYWdzCiAgKiBAaW5wdXRfc2JhbF9hZGRyX2FycmF5OiAgYWRkcmVzcyBvZiBub19pbnB1dF9xcyAqIDEyOCBwb2ludGVycwogICogQG91dHB1dF9zYmFsX2FkZHJfYXJyYXk6IGFkZHJlc3Mgb2Ygbm9fb3V0cHV0X3FzICogMTI4IHBvaW50ZXJzCiAgKi8KQEAgLTM2MSw3ICszNTUsNiBAQAogCXFkaW9faGFuZGxlcl90ICppbnB1dF9oYW5kbGVyOwogCXFkaW9faGFuZGxlcl90ICpvdXRwdXRfaGFuZGxlcjsKIAl1bnNpZ25lZCBsb25nIGludF9wYXJtOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdm9pZCAqKmlucHV0X3NiYWxfYWRkcl9hcnJheTsKIAl2b2lkICoqb3V0cHV0X3NiYWxfYWRkcl9hcnJheTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL3MzOTAvaW5jbHVkZS9hc20vdW5pc3RkLmgKaW5kZXggNmU5ZjA0OS4uNWYwMDc1MSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCisrKyBiL2FyY2gvczM5MC9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtMzkyLDYgKzM5Miw3IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9NTUFQCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERVTU9VTlQKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKaW5kZXggMzBkZTJkMC4uNjcyY2U1MiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUwpAQCAtNTQ3LDcgKzU0Nyw3IEBACiAJLmdsb2JsCXN5czMyX25ld3VuYW1lX3dyYXBwZXIKIHN5czMyX25ld3VuYW1lX3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgc3RydWN0IG5ld191dHNuYW1lICoKLQlqZwlzeXNfczM5MF9uZXd1bmFtZQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAorCWpnCXN5c19uZXd1bmFtZQkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAogCS5nbG9ibAljb21wYXRfc3lzX2FkanRpbWV4X3dyYXBwZXIKIGNvbXBhdF9zeXNfYWRqdGltZXhfd3JhcHBlcjoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuaCBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuaAppbmRleCBlMWU1ZTc2Li5lYjE1YzEyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5LmgKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5oCkBAIC0yNCwxNyArMjQsMTMgQEAKIHZvaWQgX19pbml0IHN0YXJ0dXBfaW5pdCh2b2lkKTsKIHZvaWQgZGllKGNvbnN0IGNoYXIgKiBzdHIsIHN0cnVjdCBwdF9yZWdzICogcmVncywgbG9uZyBlcnIpOwogCi1zdHJ1Y3QgbmV3X3V0c25hbWU7Ci1zdHJ1Y3QgbW1hcF9hcmdfc3RydWN0Oworc3RydWN0IHMzOTBfbW1hcF9hcmdfc3RydWN0Owogc3RydWN0IGZhZHZpc2U2NF82NF9hcmdzOwogc3RydWN0IG9sZF9zaWdhY3Rpb247Ci1zdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3Q7CiAKLWxvbmcgc3lzX21tYXAyKHN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgX191c2VyICAqYXJnKTsKLWxvbmcgc3lzX3MzOTBfb2xkX21tYXAoc3RydWN0IG1tYXBfYXJnX3N0cnVjdCBfX3VzZXIgKmFyZyk7Ci1sb25nIHN5c19pcGModWludCBjYWxsLCBpbnQgZmlyc3QsIHVuc2lnbmVkIGxvbmcgc2Vjb25kLAorbG9uZyBzeXNfbW1hcDIoc3RydWN0IHMzOTBfbW1hcF9hcmdfc3RydWN0IF9fdXNlciAgKmFyZyk7Citsb25nIHN5c19zMzkwX2lwYyh1aW50IGNhbGwsIGludCBmaXJzdCwgdW5zaWduZWQgbG9uZyBzZWNvbmQsCiAJICAgICB1bnNpZ25lZCBsb25nIHRoaXJkLCB2b2lkIF9fdXNlciAqcHRyKTsKLWxvbmcgc3lzX3MzOTBfbmV3dW5hbWUoc3RydWN0IG5ld191dHNuYW1lIF9fdXNlciAqbmFtZSk7CiBsb25nIHN5c19zMzkwX3BlcnNvbmFsaXR5KHVuc2lnbmVkIGxvbmcgcGVyc29uYWxpdHkpOwogbG9uZyBzeXNfczM5MF9mYWR2aXNlNjQoaW50IGZkLCB1MzIgb2Zmc2V0X2hpZ2gsIHUzMiBvZmZzZXRfbG93LAogCQkgICAgc2l6ZV90IGxlbiwgaW50IGFkdmljZSk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NjbHAuUyBiL2FyY2gvczM5MC9rZXJuZWwvc2NscC5TCmluZGV4IDI3YWYzYmYuLjJlODJmZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc2NscC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2NscC5TCkBAIC0yMzUsNyArMjM1LDcgQEAKIAlsaAklcjksMCglcjgpCQkJIyB1cGRhdGUgc2NjYiBsZW5ndGgKIAlhcgklcjksJXI2CiAJc3RoCSVyOSwwKCVyOCkKLQlhcgklcjcsJXI2CQkJCSMgdXBkYXRlIGN1cnJlbnQgbXRvIGFkcmVzcworCWFyCSVyNywlcjYJCQkJIyB1cGRhdGUgY3VycmVudCBtdG8gYWRkcmVzcwogCWx0cgklcjAsJXIwCQkJCSMgbW9yZSBjaGFyYWN0ZXJzPwogCWpuegkuTGluaXRtdG9TNAogCWwJJXIyLC5Md3JpdGVkYXRhUzQtLkxiYXNlUzQoJXIxMykjIHdyaXRlIGRhdGEKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCmluZGV4IDhiMTAxMjcuLjI5ZjY1YmMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYwpAQCAtMTAyMCw3ICsxMDIwLDkgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IF9fcmVmIHJlc2Nhbl9zdG9yZShzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbGFzcywgY29uc3QgY2hhciAqYnVmLAorc3RhdGljIHNzaXplX3QgX19yZWYgcmVzY2FuX3N0b3JlKHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLAorCQkJCSAgc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICBjb25zdCBjaGFyICpidWYsCiAJCQkJICBzaXplX3QgY291bnQpCiB7CiAJaW50IHJjOwpAQCAtMTAzMSw3ICsxMDMzLDkgQEAKIHN0YXRpYyBTWVNERVZfQ0xBU1NfQVRUUihyZXNjYW4sIDAyMDAsIE5VTEwsIHJlc2Nhbl9zdG9yZSk7CiAjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKLXN0YXRpYyBzc2l6ZV90IGRpc3BhdGNoaW5nX3Nob3coc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGRpc3BhdGNoaW5nX3Nob3coc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsCisJCQkJc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmKQogewogCXNzaXplX3QgY291bnQ7CiAKQEAgLTEwNDEsNyArMTA0NSw5IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3NpemVfdCBkaXNwYXRjaGluZ19zdG9yZShzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpkZXYsIGNvbnN0IGNoYXIgKmJ1ZiwKK3N0YXRpYyBzc2l6ZV90IGRpc3BhdGNoaW5nX3N0b3JlKHN0cnVjdCBzeXNkZXZfY2xhc3MgKmRldiwKKwkJCQkgc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkJIGNvbnN0IGNoYXIgKmJ1ZiwKIAkJCQkgc2l6ZV90IGNvdW50KQogewogCWludCB2YWwsIHJjOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNfczM5MC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNfczM5MC5jCmluZGV4IDg2YTc0YzkuLjdiNmIwZjggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3lzX3MzOTAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3N5c19zMzkwLmMKQEAgLTMzLDEzICszMywxMiBAQAogI2luY2x1ZGUgImVudHJ5LmgiCiAKIC8qCi0gKiBQZXJmb3JtIHRoZSBzZWxlY3QobmQsIGluLCBvdXQsIGV4LCB0dikgYW5kIG1tYXAoKSBzeXN0ZW0KLSAqIGNhbGxzLiBMaW51eCBmb3IgUy8zOTAgaXNuJ3QgYWJsZSB0byBoYW5kbGUgbW9yZSB0aGFuIDUKLSAqIHN5c3RlbSBjYWxsIHBhcmFtZXRlcnMsIHNvIHRoZXNlIHN5c3RlbSBjYWxscyB1c2VkIGEgbWVtb3J5Ci0gKiBibG9jayBmb3IgcGFyYW1ldGVyIHBhc3NpbmcuLgorICogUGVyZm9ybSB0aGUgbW1hcCgpIHN5c3RlbSBjYWxsLiBMaW51eCBmb3IgUy8zOTAgaXNuJ3QgYWJsZSB0byBoYW5kbGUgbW9yZQorICogdGhhbiA1IHN5c3RlbSBjYWxsIHBhcmFtZXRlcnMsIHNvIHRoaXMgc3lzdGVtIGNhbGwgdXNlcyBhIG1lbW9yeSBibG9jaworICogZm9yIHBhcmFtZXRlciBwYXNzaW5nLgogICovCiAKLXN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3Qgeworc3RydWN0IHMzOTBfbW1hcF9hcmdfc3RydWN0IHsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJdW5zaWduZWQgbG9uZyBsZW47CiAJdW5zaWduZWQgbG9uZyBwcm90OwpAQCAtNDgsOSArNDcsOSBAQAogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwogfTsKIAotU1lTQ0FMTF9ERUZJTkUxKG1tYXAyLCBzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0IF9fdXNlciAqLCBhcmcpCitTWVNDQUxMX0RFRklORTEobW1hcDIsIHN0cnVjdCBzMzkwX21tYXBfYXJnX3N0cnVjdCBfX3VzZXIgKiwgYXJnKQogewotCXN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgYTsKKwlzdHJ1Y3QgczM5MF9tbWFwX2FyZ19zdHJ1Y3QgYTsKIAlpbnQgZXJyb3IgPSAtRUZBVUxUOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZhLCBhcmcsIHNpemVvZihhKSkpCkBAIC02MCwyOSArNTksMTIgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLVNZU0NBTExfREVGSU5FMShzMzkwX29sZF9tbWFwLCBzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0IF9fdXNlciAqLCBhcmcpCi17Ci0Jc3RydWN0IG1tYXBfYXJnX3N0cnVjdCBhOwotCWxvbmcgZXJyb3IgPSAtRUZBVUxUOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZhLCBhcmcsIHNpemVvZihhKSkpCi0JCWdvdG8gb3V0OwotCi0JZXJyb3IgPSAtRUlOVkFMOwotCWlmIChhLm9mZnNldCAmIH5QQUdFX01BU0spCi0JCWdvdG8gb3V0OwotCi0JZXJyb3IgPSBzeXNfbW1hcF9wZ29mZihhLmFkZHIsIGEubGVuLCBhLnByb3QsIGEuZmxhZ3MsIGEuZmQsIGEub2Zmc2V0ID4+IFBBR0VfU0hJRlQpOwotb3V0OgotCXJldHVybiBlcnJvcjsKLX0KLQogLyoKICAqIHN5c19pcGMoKSBpcyB0aGUgZGUtbXVsdGlwbGV4ZXIgZm9yIHRoZSBTeXNWIElQQyBjYWxscy4uCiAgKgogICogVGhpcyBpcyByZWFsbHkgaG9ycmlibHkgdWdseS4KICAqLwotU1lTQ0FMTF9ERUZJTkU1KGlwYywgdWludCwgY2FsbCwgaW50LCBmaXJzdCwgdW5zaWduZWQgbG9uZywgc2Vjb25kLAorU1lTQ0FMTF9ERUZJTkU1KHMzOTBfaXBjLCB1aW50LCBjYWxsLCBpbnQsIGZpcnN0LCB1bnNpZ25lZCBsb25nLCBzZWNvbmQsCiAJCXVuc2lnbmVkIGxvbmcsIHRoaXJkLCB2b2lkIF9fdXNlciAqLCBwdHIpCiB7CiAgICAgICAgIHN0cnVjdCBpcGNfa2x1ZGdlIHRtcDsKQEAgLTE0OSwxNyArMTMxLDYgQEAKIH0KIAogI2lmZGVmIENPTkZJR182NEJJVAotU1lTQ0FMTF9ERUZJTkUxKHMzOTBfbmV3dW5hbWUsIHN0cnVjdCBuZXdfdXRzbmFtZSBfX3VzZXIgKiwgbmFtZSkKLXsKLQlpbnQgcmV0ID0gc3lzX25ld3VuYW1lKG5hbWUpOwotCi0JaWYgKHBlcnNvbmFsaXR5KGN1cnJlbnQtPnBlcnNvbmFsaXR5KSA9PSBQRVJfTElOVVgzMiAmJiAhcmV0KSB7Ci0JCXJldCA9IGNvcHlfdG9fdXNlcihuYW1lLT5tYWNoaW5lLCAiczM5MFwwXDBcMFwwIiwgOCk7Ci0JCWlmIChyZXQpIHJldCA9IC1FRkFVTFQ7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KIFNZU0NBTExfREVGSU5FMShzMzkwX3BlcnNvbmFsaXR5LCB1bnNpZ25lZCBsb25nLCBwZXJzb25hbGl0eSkKIHsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TIGIvYXJjaC9zMzkwL2tlcm5lbC9zeXNjYWxscy5TCmluZGV4IDMwZWNhMDcuLjIwMWNlNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvc3lzY2FsbHMuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3N5c2NhbGxzLlMKQEAgLTk4LDcgKzk4LDcgQEAKIFNZU0NBTEwoc3lzX3N3YXBvbixzeXNfc3dhcG9uLHN5czMyX3N3YXBvbl93cmFwcGVyKQogU1lTQ0FMTChzeXNfcmVib290LHN5c19yZWJvb3Qsc3lzMzJfcmVib290X3dyYXBwZXIpCiBTWVNDQUxMKHN5c19uaV9zeXNjYWxsLHN5c19uaV9zeXNjYWxsLG9sZDMyX3JlYWRkaXJfd3JhcHBlcikJLyogb2xkIHJlYWRkaXIgc3lzY2FsbCAqLwotU1lTQ0FMTChzeXNfczM5MF9vbGRfbW1hcCxzeXNfczM5MF9vbGRfbW1hcCxvbGQzMl9tbWFwX3dyYXBwZXIpCS8qIDkwICovCitTWVNDQUxMKHN5c19vbGRfbW1hcCxzeXNfb2xkX21tYXAsb2xkMzJfbW1hcF93cmFwcGVyKQkJLyogOTAgKi8KIFNZU0NBTEwoc3lzX211bm1hcCxzeXNfbXVubWFwLHN5czMyX211bm1hcF93cmFwcGVyKQogU1lTQ0FMTChzeXNfdHJ1bmNhdGUsc3lzX3RydW5jYXRlLHN5czMyX3RydW5jYXRlX3dyYXBwZXIpCiBTWVNDQUxMKHN5c19mdHJ1bmNhdGUsc3lzX2Z0cnVuY2F0ZSxzeXMzMl9mdHJ1bmNhdGVfd3JhcHBlcikKQEAgLTEyNSwxMiArMTI1LDEyIEBACiBTWVNDQUxMKHN5c193YWl0NCxzeXNfd2FpdDQsY29tcGF0X3N5c193YWl0NF93cmFwcGVyKQogU1lTQ0FMTChzeXNfc3dhcG9mZixzeXNfc3dhcG9mZixzeXMzMl9zd2Fwb2ZmX3dyYXBwZXIpCQkvKiAxMTUgKi8KIFNZU0NBTEwoc3lzX3N5c2luZm8sc3lzX3N5c2luZm8sY29tcGF0X3N5c19zeXNpbmZvX3dyYXBwZXIpCi1TWVNDQUxMKHN5c19pcGMsc3lzX2lwYyxzeXMzMl9pcGNfd3JhcHBlcikKK1NZU0NBTEwoc3lzX3MzOTBfaXBjLHN5c19zMzkwX2lwYyxzeXMzMl9pcGNfd3JhcHBlcikKIFNZU0NBTEwoc3lzX2ZzeW5jLHN5c19mc3luYyxzeXMzMl9mc3luY193cmFwcGVyKQogU1lTQ0FMTChzeXNfc2lncmV0dXJuLHN5c19zaWdyZXR1cm4sc3lzMzJfc2lncmV0dXJuKQogU1lTQ0FMTChzeXNfY2xvbmUsc3lzX2Nsb25lLHN5c19jbG9uZV93cmFwcGVyKQkJCS8qIDEyMCAqLwogU1lTQ0FMTChzeXNfc2V0ZG9tYWlubmFtZSxzeXNfc2V0ZG9tYWlubmFtZSxzeXMzMl9zZXRkb21haW5uYW1lX3dyYXBwZXIpCi1TWVNDQUxMKHN5c19uZXd1bmFtZSxzeXNfczM5MF9uZXd1bmFtZSxzeXMzMl9uZXd1bmFtZV93cmFwcGVyKQorU1lTQ0FMTChzeXNfbmV3dW5hbWUsc3lzX25ld3VuYW1lLHN5czMyX25ld3VuYW1lX3dyYXBwZXIpCiBOSV9TWVNDQUxMCQkJCQkJCS8qIG1vZGlmeV9sZHQgZm9yIGkzODYgKi8KIFNZU0NBTEwoc3lzX2FkanRpbWV4LHN5c19hZGp0aW1leCxjb21wYXRfc3lzX2FkanRpbWV4X3dyYXBwZXIpCiBTWVNDQUxMKHN5c19tcHJvdGVjdCxzeXNfbXByb3RlY3Qsc3lzMzJfbXByb3RlY3Rfd3JhcHBlcikJLyogMTI1ICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCmluZGV4IGE4ZjkzZjEuLmFhMjQ4M2UgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCkBAIC03MywxNSArNzMsMTUgQEAKIH0KIEVYUE9SVF9TWU1CT0wobW9ub3RvbmljX2Nsb2NrKTsKIAotdm9pZCB0b2RfdG9fdGltZXZhbChfX3U2NCB0b2R2YWwsIHN0cnVjdCB0aW1lc3BlYyAqeHRpbWUpCit2b2lkIHRvZF90b190aW1ldmFsKF9fdTY0IHRvZHZhbCwgc3RydWN0IHRpbWVzcGVjICp4dCkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgc2VjOwogCiAJc2VjID0gdG9kdmFsID4+IDEyOwogCWRvX2RpdihzZWMsIDEwMDAwMDApOwotCXh0aW1lLT50dl9zZWMgPSBzZWM7CisJeHQtPnR2X3NlYyA9IHNlYzsKIAl0b2R2YWwgLT0gKHNlYyAqIDEwMDAwMDApIDw8IDEyOwotCXh0aW1lLT50dl9uc2VjID0gKCh0b2R2YWwgKiAxMDAwKSA+PiAxMik7CisJeHQtPnR2X25zZWMgPSAoKHRvZHZhbCAqIDEwMDApID4+IDEyKTsKIH0KIEVYUE9SVF9TWU1CT0wodG9kX3RvX3RpbWV2YWwpOwogCkBAIC0yMTYsOCArMjE2LDggQEAKIAkrK3Zkc29fZGF0YS0+dGJfdXBkYXRlX2NvdW50OwogCXNtcF93bWIoKTsKIAl2ZHNvX2RhdGEtPnh0aW1lX3RvZF9zdGFtcCA9IGNsb2NrLT5jeWNsZV9sYXN0OwotCXZkc29fZGF0YS0+eHRpbWVfY2xvY2tfc2VjID0geHRpbWUudHZfc2VjOwotCXZkc29fZGF0YS0+eHRpbWVfY2xvY2tfbnNlYyA9IHh0aW1lLnR2X25zZWM7CisJdmRzb19kYXRhLT54dGltZV9jbG9ja19zZWMgPSB3YWxsX3RpbWUtPnR2X3NlYzsKKwl2ZHNvX2RhdGEtPnh0aW1lX2Nsb2NrX25zZWMgPSB3YWxsX3RpbWUtPnR2X25zZWM7CiAJdmRzb19kYXRhLT53dG9tX2Nsb2NrX3NlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYzsKIAl2ZHNvX2RhdGEtPnd0b21fY2xvY2tfbnNlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWM7CiAJc21wX3dtYigpOwpAQCAtMTExNiwxNCArMTExNiwxOCBAQAogLyoKICAqIEVUUiBjbGFzcyBhdHRyaWJ1dGVzCiAgKi8KLXN0YXRpYyBzc2l6ZV90IGV0cl9zdGVwcGluZ19wb3J0X3Nob3coc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGV0cl9zdGVwcGluZ19wb3J0X3Nob3coc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsCisJCQkJCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICphdHRyLAorCQkJCQljaGFyICpidWYpCiB7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIGV0cl9wb3J0MC5lc3cucCk7CiB9CiAKIHN0YXRpYyBTWVNERVZfQ0xBU1NfQVRUUihzdGVwcGluZ19wb3J0LCAwNDAwLCBldHJfc3RlcHBpbmdfcG9ydF9zaG93LCBOVUxMKTsKIAotc3RhdGljIHNzaXplX3QgZXRyX3N0ZXBwaW5nX21vZGVfc2hvdyhzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbGFzcywgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgZXRyX3N0ZXBwaW5nX21vZGVfc2hvdyhzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbGFzcywKKwkJCQkgICAgICAJc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNoYXIgKmJ1ZikKIHsKIAljaGFyICptb2RlX3N0cjsKIApAQCAtMTU4NCw3ICsxNTg4LDkgQEAKIAkubmFtZQk9ICJzdHAiLAogfTsKIAotc3RhdGljIHNzaXplX3Qgc3RwX2N0bl9pZF9zaG93KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzdHBfY3RuX2lkX3Nob3coc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsCisJCQkJc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmKQogewogCWlmICghc3RwX29ubGluZSkKIAkJcmV0dXJuIC1FTk9EQVRBOwpAQCAtMTU5NCw3ICsxNjAwLDkgQEAKIAogc3RhdGljIFNZU0RFVl9DTEFTU19BVFRSKGN0bl9pZCwgMDQwMCwgc3RwX2N0bl9pZF9zaG93LCBOVUxMKTsKIAotc3RhdGljIHNzaXplX3Qgc3RwX2N0bl90eXBlX3Nob3coc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHN0cF9jdG5fdHlwZV9zaG93KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLAorCQkJCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKIHsKIAlpZiAoIXN0cF9vbmxpbmUpCiAJCXJldHVybiAtRU5PREFUQTsKQEAgLTE2MDMsNyArMTYxMSw5IEBACiAKIHN0YXRpYyBTWVNERVZfQ0xBU1NfQVRUUihjdG5fdHlwZSwgMDQwMCwgc3RwX2N0bl90eXBlX3Nob3csIE5VTEwpOwogCi1zdGF0aWMgc3NpemVfdCBzdHBfZHN0X29mZnNldF9zaG93KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzdHBfZHN0X29mZnNldF9zaG93KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLAorCQkJCSAgIHN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICphdHRyLAorCQkJCSAgIGNoYXIgKmJ1ZikKIHsKIAlpZiAoIXN0cF9vbmxpbmUgfHwgIShzdHBfaW5mby52Yml0cyAmIDB4MjAwMCkpCiAJCXJldHVybiAtRU5PREFUQTsKQEAgLTE2MTIsNyArMTYyMiw5IEBACiAKIHN0YXRpYyBTWVNERVZfQ0xBU1NfQVRUUihkc3Rfb2Zmc2V0LCAwNDAwLCBzdHBfZHN0X29mZnNldF9zaG93LCBOVUxMKTsKIAotc3RhdGljIHNzaXplX3Qgc3RwX2xlYXBfc2Vjb25kc19zaG93KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzdHBfbGVhcF9zZWNvbmRzX3Nob3coc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsCisJCQkJCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICphdHRyLAorCQkJCQljaGFyICpidWYpCiB7CiAJaWYgKCFzdHBfb25saW5lIHx8ICEoc3RwX2luZm8udmJpdHMgJiAweDgwMDApKQogCQlyZXR1cm4gLUVOT0RBVEE7CkBAIC0xNjIxLDcgKzE2MzMsOSBAQAogCiBzdGF0aWMgU1lTREVWX0NMQVNTX0FUVFIobGVhcF9zZWNvbmRzLCAwNDAwLCBzdHBfbGVhcF9zZWNvbmRzX3Nob3csIE5VTEwpOwogCi1zdGF0aWMgc3NpemVfdCBzdHBfc3RyYXR1bV9zaG93KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzdHBfc3RyYXR1bV9zaG93KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLAorCQkJCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKIHsKIAlpZiAoIXN0cF9vbmxpbmUpCiAJCXJldHVybiAtRU5PREFUQTsKQEAgLTE2MzAsNyArMTY0NCw5IEBACiAKIHN0YXRpYyBTWVNERVZfQ0xBU1NfQVRUUihzdHJhdHVtLCAwNDAwLCBzdHBfc3RyYXR1bV9zaG93LCBOVUxMKTsKIAotc3RhdGljIHNzaXplX3Qgc3RwX3RpbWVfb2Zmc2V0X3Nob3coc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHN0cF90aW1lX29mZnNldF9zaG93KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLAorCQkJCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKIHsKIAlpZiAoIXN0cF9vbmxpbmUgfHwgIShzdHBfaW5mby52Yml0cyAmIDB4MDgwMCkpCiAJCXJldHVybiAtRU5PREFUQTsKQEAgLTE2MzksNyArMTY1NSw5IEBACiAKIHN0YXRpYyBTWVNERVZfQ0xBU1NfQVRUUih0aW1lX29mZnNldCwgMDQwMCwgc3RwX3RpbWVfb2Zmc2V0X3Nob3csIE5VTEwpOwogCi1zdGF0aWMgc3NpemVfdCBzdHBfdGltZV96b25lX29mZnNldF9zaG93KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBzdHBfdGltZV96b25lX29mZnNldF9zaG93KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLAorCQkJCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKIHsKIAlpZiAoIXN0cF9vbmxpbmUgfHwgIShzdHBfaW5mby52Yml0cyAmIDB4NDAwMCkpCiAJCXJldHVybiAtRU5PREFUQTsKQEAgLTE2NDksNyArMTY2Nyw5IEBACiBzdGF0aWMgU1lTREVWX0NMQVNTX0FUVFIodGltZV96b25lX29mZnNldCwgMDQwMCwKIAkJCSBzdHBfdGltZV96b25lX29mZnNldF9zaG93LCBOVUxMKTsKIAotc3RhdGljIHNzaXplX3Qgc3RwX3RpbWluZ19tb2RlX3Nob3coc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHN0cF90aW1pbmdfbW9kZV9zaG93KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLAorCQkJCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKIHsKIAlpZiAoIXN0cF9vbmxpbmUpCiAJCXJldHVybiAtRU5PREFUQTsKQEAgLTE2NTgsNyArMTY3OCw5IEBACiAKIHN0YXRpYyBTWVNERVZfQ0xBU1NfQVRUUih0aW1pbmdfbW9kZSwgMDQwMCwgc3RwX3RpbWluZ19tb2RlX3Nob3csIE5VTEwpOwogCi1zdGF0aWMgc3NpemVfdCBzdHBfdGltaW5nX3N0YXRlX3Nob3coc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHN0cF90aW1pbmdfc3RhdGVfc2hvdyhzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbGFzcywKKwkJCQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljaGFyICpidWYpCiB7CiAJaWYgKCFzdHBfb25saW5lKQogCQlyZXR1cm4gLUVOT0RBVEE7CkBAIC0xNjY3LDEyICsxNjg5LDE1IEBACiAKIHN0YXRpYyBTWVNERVZfQ0xBU1NfQVRUUih0aW1pbmdfc3RhdGUsIDA0MDAsIHN0cF90aW1pbmdfc3RhdGVfc2hvdywgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IHN0cF9vbmxpbmVfc2hvdyhzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbGFzcywgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc3RwX29ubGluZV9zaG93KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLAorCQkJCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgc3RwX29ubGluZSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHN0cF9vbmxpbmVfc3RvcmUoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsCisJCQkJc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJdW5zaWduZWQgaW50IHZhbHVlOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2t2bS9LY29uZmlnIGIvYXJjaC9zMzkwL2t2bS9LY29uZmlnCmluZGV4IDZlZTU1YWUuLmE3MjUxNTggMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rdm0vS2NvbmZpZworKysgYi9hcmNoL3MzOTAva3ZtL0tjb25maWcKQEAgLTM1LDYgKzM1LDcgQEAKIAogIyBPSywgaXQncyBhIGxpdHRsZSBjb3VudGVyLWludHVpdGl2ZSB0byBkbyB0aGlzLCBidXQgaXQgcHV0cyBpdCBuZWF0bHkgdW5kZXIKICMgdGhlIHZpcnR1YWxpemF0aW9uIG1lbnUuCitzb3VyY2UgZHJpdmVycy92aG9zdC9LY29uZmlnCiBzb3VyY2UgZHJpdmVycy92aXJ0aW8vS2NvbmZpZwogCiBlbmRpZiAjIFZJUlRVQUxJWkFUSU9OCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMgYi9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmMKaW5kZXggM2ZhMGExMC4uNDkyOTI4NiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5jCisrKyBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuYwpAQCAtMjQyLDYgKzI0Miw3IEBACiAJa3ZtX2ZyZWVfcGh5c21lbShrdm0pOwogCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykoa3ZtLT5hcmNoLnNjYSkpOwogCWRlYnVnX3VucmVnaXN0ZXIoa3ZtLT5hcmNoLmRiZik7CisJY2xlYW51cF9zcmN1X3N0cnVjdCgma3ZtLT5zcmN1KTsKIAlrZnJlZShrdm0pOwogfQogCkBAIC02OTAsMTQgKzY5MSwxMiBAQAogfQogCiAvKiBTZWN0aW9uOiBtZW1vcnkgcmVsYXRlZCAqLwotaW50IGt2bV9hcmNoX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKLQkJCQlzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uICptZW0sCi0JCQkJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCBvbGQsCi0JCQkJaW50IHVzZXJfYWxsb2MpCitpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKKwkJCQkgICBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAorCQkJCSAgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3Qgb2xkLAorCQkJCSAgIHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24gKm1lbSwKKwkJCQkgICBpbnQgdXNlcl9hbGxvYykKIHsKLQlpbnQgaTsKLQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7Ci0KIAkvKiBBIGZldyBzYW5pdHkgY2hlY2tzLiBXZSBjYW4gaGF2ZSBleGFjdGx5IG9uZSBtZW1vcnkgc2xvdCB3aGljaCBoYXMKIAkgICB0byBzdGFydCBhdCBndWVzdCB2aXJ0dWFsIHplcm8gYW5kIHdoaWNoIGhhcyB0byBiZSBsb2NhdGVkIGF0IGEKIAkgICBwYWdlIGJvdW5kYXJ5IGluIHVzZXJsYW5kIGFuZCB3aGljaCBoYXMgdG8gZW5kIGF0IGEgcGFnZSBib3VuZGFyeS4KQEAgLTcyMCwxNCArNzE5LDIzIEBACiAJaWYgKCF1c2VyX2FsbG9jKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXJldHVybiAwOworfQorCit2b2lkIGt2bV9hcmNoX2NvbW1pdF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKKwkJCQlzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uICptZW0sCisJCQkJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCBvbGQsCisJCQkJaW50IHVzZXJfYWxsb2MpCit7CisJaW50IGk7CisJc3RydWN0IGt2bV92Y3B1ICp2Y3B1OworCiAJLyogcmVxdWVzdCB1cGRhdGUgb2Ygc2llIGNvbnRyb2wgYmxvY2sgZm9yIGFsbCBhdmFpbGFibGUgdmNwdXMgKi8KIAlrdm1fZm9yX2VhY2hfdmNwdShpLCB2Y3B1LCBrdm0pIHsKIAkJaWYgKHRlc3RfYW5kX3NldF9iaXQoS1ZNX1JFUV9NTVVfUkVMT0FELCAmdmNwdS0+cmVxdWVzdHMpKQogCQkJY29udGludWU7CiAJCWt2bV9zMzkwX2luamVjdF9zaWdwX3N0b3AodmNwdSwgQUNUSU9OX1JFTE9BRFZDUFVfT05fU1RPUCk7CiAJfQotCi0JcmV0dXJuIDA7CiB9CiAKIHZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93KHN0cnVjdCBrdm0gKmt2bSkKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaCBiL2FyY2gvczM5MC9rdm0va3ZtLXMzOTAuaAppbmRleCAwNmNjZTgyLi42MGYwOWFiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva3ZtL2t2bS1zMzkwLmgKKysrIGIvYXJjaC9zMzkwL2t2bS9rdm0tczM5MC5oCkBAIC02NywxMCArNjcsMTQgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGt2bV9zMzkwX3ZjcHVfc2V0X21lbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CisJaW50IGlkeDsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW07CisJc3RydWN0IGt2bV9tZW1zbG90cyAqbWVtc2xvdHM7CiAKLQlkb3duX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7Ci0JbWVtID0gJnZjcHUtPmt2bS0+bWVtc2xvdHNbMF07CisJaWR4ID0gc3JjdV9yZWFkX2xvY2soJnZjcHUtPmt2bS0+c3JjdSk7CisJbWVtc2xvdHMgPSByY3VfZGVyZWZlcmVuY2UodmNwdS0+a3ZtLT5tZW1zbG90cyk7CisKKwltZW0gPSAmbWVtc2xvdHMtPm1lbXNsb3RzWzBdOwogCiAJdmNwdS0+YXJjaC5zaWVfYmxvY2stPmdtc29yID0gbWVtLT51c2Vyc3BhY2VfYWRkcjsKIAl2Y3B1LT5hcmNoLnNpZV9ibG9jay0+Z21zbG0gPQpAQCAtNzgsNyArODIsNyBAQAogCQkobWVtLT5ucGFnZXMgPDwgUEFHRV9TSElGVCkgKwogCQlWSVJUSU9ERVNDU1BBQ0UgLSAxdWw7CiAKLQl1cF9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOworCXNyY3VfcmVhZF91bmxvY2soJnZjcHUtPmt2bS0+c3JjdSwgaWR4KTsKIH0KIAogLyogaW1wbGVtZW50ZWQgaW4gcHJpdi5jICovCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL01ha2VmaWxlIGIvYXJjaC9zMzkwL2xpYi9NYWtlZmlsZQppbmRleCBjZDU0YTFjLi43NjFhYjhiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9saWIvTWFrZWZpbGUKQEAgLTIsNyArMiw4IEBACiAjIE1ha2VmaWxlIGZvciBzMzkwLXNwZWNpZmljIGxpYnJhcnkgZmlsZXMuLgogIwogCi1saWIteSArPSBkZWxheS5vIHN0cmluZy5vIHVhY2Nlc3Nfc3RkLm8gdWFjY2Vzc19wdC5vIHVzZXJjb3B5Lm8KK2xpYi15ICs9IGRlbGF5Lm8gc3RyaW5nLm8gdWFjY2Vzc19zdGQubyB1YWNjZXNzX3B0Lm8KK29iai15ICs9IHVzZXJjb3B5Lm8KIG9iai0kKENPTkZJR18zMkJJVCkgKz0gZGl2NjQubyBxcm5uZC5vIHVjbXBkaTIubwogbGliLSQoQ09ORklHXzY0QklUKSArPSB1YWNjZXNzX212Y29zLm8KIGxpYi0kKENPTkZJR19TTVApICs9IHNwaW5sb2NrLm8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9jbW0uYyBiL2FyY2gvczM5MC9tbS9jbW0uYwppbmRleCA3NmEzNjM3Li5mMTZiZDA0IDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vY21tLmMKKysrIGIvYXJjaC9zMzkwL21tL2NtbS5jCkBAIC0zNzQsNyArMzc0LDcgQEAKICNpZmRlZiBDT05GSUdfQ01NX0lVQ1YKICNkZWZpbmUgU01TR19QUkVGSVggIkNNTSIKIHN0YXRpYyB2b2lkCi1jbW1fc21zZ190YXJnZXQoY2hhciAqZnJvbSwgY2hhciAqbXNnKQorY21tX3Ntc2dfdGFyZ2V0KGNvbnN0IGNoYXIgKmZyb20sIGNoYXIgKm1zZykKIHsKIAlsb25nIG5yLCBzZWNvbmRzOwogCmRpZmYgLS1naXQgYS9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9zY29yZS9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCBkNDBlNjkxLi5lODlkYzliIDEwMDY0NAotLS0gYS9hcmNoL3Njb3JlL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvc2NvcmUvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTkwLDggKzkwLDcgQEAKIAkJCSB1bnNpZ25lZCBzaG9ydCAqKTsKIAogI2RlZmluZSBhcmNoX2hhc19zaW5nbGVfc3RlcCgpCSgxKQotZXh0ZXJuIHZvaWQgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICopOwotZXh0ZXJuIHZvaWQgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIAogI2VuZGlmIC8qIF9BU01fU0NPUkVfUFRSQUNFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZyBiL2FyY2gvc2gvS2NvbmZpZwppbmRleCAwNWNlZjUwLi44ZDkwNTY0IDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcKKysrIGIvYXJjaC9zaC9LY29uZmlnCkBAIC0xODMsNiArMTgzLDkgQEAKIGNvbmZpZyBETUFfTk9OQ09IRVJFTlQKIAlkZWZfYm9vbCAhRE1BX0NPSEVSRU5UCiAKK2NvbmZpZyBORUVEX0RNQV9NQVBfU1RBVEUKKwlkZWZfYm9vbCBETUFfTk9OQ09IRVJFTlQKKwogc291cmNlICJpbml0L0tjb25maWciCiAKIHNvdXJjZSAia2VybmVsL0tjb25maWcuZnJlZXplciIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYwppbmRleCBiZTMwMGFhLi43ZGEwZmM5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCkBAIC00MTksNiArNDE5LDkgQEAKIAkJSTJDX0JPQVJEX0lORk8oIm1pZ29yX3RzIiwgMHg1MSksCiAJCS5pcnEgPSAzOCwgLyogSVJRNiAqLwogCX0sCisJeworCQlJMkNfQk9BUkRfSU5GTygid204OTc4IiwgMHgxYSksCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gbWlnb3JfaTJjX2NhbWVyYVtdID0gewpAQCAtNjE5LDYgKzYyMiwxOSBAQAogCiAJcGxhdGZvcm1fcmVzb3VyY2Vfc2V0dXBfbWVtb3J5KCZtaWdvcl9jZXVfZGV2aWNlLCAiY2V1IiwgNCA8PCAyMCk7CiAKKwkvKiBTSVU6IFBvcnQgQiAqLworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NJVUJPTFIsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NJVUJPQlQsIE5VTEwpOworCWdwaW9fcmVxdWVzdChHUElPX0ZOX1NJVUJJU0xELCBOVUxMKTsKKwlncGlvX3JlcXVlc3QoR1BJT19GTl9TSVVCT1NMRCwgTlVMTCk7CisJZ3Bpb19yZXF1ZXN0KEdQSU9fRk5fU0lVTUNLQiwgTlVMTCk7CisKKwkvKgorCSAqIFRoZSBvcmlnaW5hbCBkcml2ZXIgc2V0cyBTSVVCIE9MUi9PQlQsIElMUi9JQlQsIGFuZCBTSVVBIE9MUi9PQlQgdG8KKwkgKiBvdXRwdXQuIE5lZWQgb25seSBTSVVCLCBzZXQgdG8gb3V0cHV0IGZvciBtYXN0ZXIgbW9kZSAodGFibGUgMzQuMikKKwkgKi8KKwlfX3Jhd193cml0ZXcoX19yYXdfcmVhZHcoUE9SVF9NU0VMQ1JBKSB8IDEsIFBPUlRfTVNFTENSQSk7CisKIAlpMmNfcmVnaXN0ZXJfYm9hcmRfaW5mbygwLCBtaWdvcl9pMmNfZGV2aWNlcywKIAkJCQlBUlJBWV9TSVpFKG1pZ29yX2kyY19kZXZpY2VzKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL2NhY2hlLmMgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9jYWNoZS5jCmluZGV4IGUyN2ZjNzQuLmQwYjc3YjYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9vdC9jb21wcmVzc2VkL2NhY2hlLmMKKysrIGIvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvY2FjaGUuYwpAQCAtNSw3ICs1LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCAoMzIgKiAxMDI0KTsgaSArPSAzMikgewogCQkodm9pZCkqcDsKLQkJcCArPSAoMzIgLyBzaXplb2YgKGludCkpOworCQlwICs9ICgzMiAvIHNpemVvZihpbnQpKTsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKaW5kZXggZGEzZWJlYy4uMWY0ZTU2MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTg2LDggKzg2LDggQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyB2YWRkciwgdm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMsCiAJdW5zaWduZWQgbG9uZyBsZW4pOwogCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkJCWZsdXNoX2NhY2hlX2FsbCgpCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJZmx1c2hfY2FjaGVfYWxsKCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJbG9jYWxfZmx1c2hfY2FjaGVfYWxsKE5VTEwpCisjZGVmaW5lIGZsdXNoX2NhY2hlX3Z1bm1hcChzdGFydCwgZW5kKQkJbG9jYWxfZmx1c2hfY2FjaGVfYWxsKE5VTEwpCiAKICNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtcmVnaXN0ZXIuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLXJlZ2lzdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFjZDc4ZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLXJlZ2lzdGVyLmgKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvbW1vbiBoZWFkZXIgZm9yIHRoZSBsZWdhY3kgU0ggRE1BIGRyaXZlciBhbmQgdGhlIG5ldyBkbWFlbmdpbmUgZHJpdmVyCisgKgorICogZXh0cmFjdGVkIGZyb20gYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaDoKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgIFRha2FzaGkgWU9TSElJCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2lmbmRlZiBETUFfUkVHSVNURVJfSAorI2RlZmluZSBETUFfUkVHSVNURVJfSAorCisvKiBETUEgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0FSCTB4MDAKKyNkZWZpbmUgREFSCTB4MDQKKyNkZWZpbmUgVENSCTB4MDgKKyNkZWZpbmUgQ0hDUgkweDBDCisjZGVmaW5lIERNQU9SCTB4NDAKKworLyogRE1BT1IgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRE1BT1JfQUUJMHgwMDAwMDAwNAorI2RlZmluZSBETUFPUl9OTUlGCTB4MDAwMDAwMDIKKyNkZWZpbmUgRE1BT1JfRE1FCTB4MDAwMDAwMDEKKworLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBTdXBlckggRE1BQyAqLworI2RlZmluZSBSRVFfTAkweDAwMDAwMDAwCisjZGVmaW5lIFJFUV9FCTB4MDAwODAwMDAKKyNkZWZpbmUgUkFDS19ICTB4MDAwMDAwMDAKKyNkZWZpbmUgUkFDS19MCTB4MDAwNDAwMDAKKyNkZWZpbmUgQUNLX1IJMHgwMDAwMDAwMAorI2RlZmluZSBBQ0tfVwkweDAwMDIwMDAwCisjZGVmaW5lIEFDS19ICTB4MDAwMDAwMDAKKyNkZWZpbmUgQUNLX0wJMHgwMDAxMDAwMAorI2RlZmluZSBETV9JTkMJMHgwMDAwNDAwMAorI2RlZmluZSBETV9ERUMJMHgwMDAwODAwMAorI2RlZmluZSBETV9GSVgJMHgwMDAwYzAwMAorI2RlZmluZSBTTV9JTkMJMHgwMDAwMTAwMAorI2RlZmluZSBTTV9ERUMJMHgwMDAwMjAwMAorI2RlZmluZSBTTV9GSVgJMHgwMDAwMzAwMAorI2RlZmluZSBSU19JTgkweDAwMDAwMjAwCisjZGVmaW5lIFJTX09VVAkweDAwMDAwMzAwCisjZGVmaW5lIFRTX0JMSwkweDAwMDAwMDQwCisjZGVmaW5lIFRNX0JVUgkweDAwMDAwMDIwCisjZGVmaW5lIENIQ1JfREUJMHgwMDAwMDAwMQorI2RlZmluZSBDSENSX1RFCTB4MDAwMDAwMDIKKyNkZWZpbmUgQ0hDUl9JRQkweDAwMDAwMDA0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hLXNoLmgKaW5kZXggZTkzNGEyZS4uZjNhY2I4ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWEtc2guaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYS1zaC5oCkBAIC0xMSw3ICsxMSw4IEBACiAjaWZuZGVmIF9fRE1BX1NIX0gKICNkZWZpbmUgX19ETUFfU0hfSAogCi0jaW5jbHVkZSA8YXNtL2RtYS5oPgorI2luY2x1ZGUgPGFzbS9kbWEtcmVnaXN0ZXIuaD4KKyNpbmNsdWRlIDxjcHUvZG1hLXJlZ2lzdGVyLmg+CiAjaW5jbHVkZSA8Y3B1L2RtYS5oPgogCiAvKiBETUFPUiBjb250b3JsOiBUaGUgRE1BT1IgYWNjZXNzIHNpemUgaXMgZGlmZmVyZW50IGJ5IENQVS4qLwpAQCAtNTMsMzQgKzU0LDYgQEAKICNlbmRpZgogfTsKIAotLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBTdXBlckggRE1BQyAqLwotI2RlZmluZSBSRVFfTAkweDAwMDAwMDAwCi0jZGVmaW5lIFJFUV9FCTB4MDAwODAwMDAKLSNkZWZpbmUgUkFDS19ICTB4MDAwMDAwMDAKLSNkZWZpbmUgUkFDS19MCTB4MDAwNDAwMDAKLSNkZWZpbmUgQUNLX1IJMHgwMDAwMDAwMAotI2RlZmluZSBBQ0tfVwkweDAwMDIwMDAwCi0jZGVmaW5lIEFDS19ICTB4MDAwMDAwMDAKLSNkZWZpbmUgQUNLX0wJMHgwMDAxMDAwMAotI2RlZmluZSBETV9JTkMJMHgwMDAwNDAwMAotI2RlZmluZSBETV9ERUMJMHgwMDAwODAwMAotI2RlZmluZSBETV9GSVgJMHgwMDAwYzAwMAotI2RlZmluZSBTTV9JTkMJMHgwMDAwMTAwMAotI2RlZmluZSBTTV9ERUMJMHgwMDAwMjAwMAotI2RlZmluZSBTTV9GSVgJMHgwMDAwMzAwMAotI2RlZmluZSBSU19JTgkweDAwMDAwMjAwCi0jZGVmaW5lIFJTX09VVAkweDAwMDAwMzAwCi0jZGVmaW5lIFRTX0JMSwkweDAwMDAwMDQwCi0jZGVmaW5lIFRNX0JVUgkweDAwMDAwMDIwCi0jZGVmaW5lIENIQ1JfREUgMHgwMDAwMDAwMQotI2RlZmluZSBDSENSX1RFIDB4MDAwMDAwMDIKLSNkZWZpbmUgQ0hDUl9JRSAweDAwMDAwMDA0Ci0KLS8qIERNQU9SIGRlZmluaXRpb25zICovCi0jZGVmaW5lIERNQU9SX0FFCTB4MDAwMDAwMDQKLSNkZWZpbmUgRE1BT1JfTk1JRgkweDAwMDAwMDAyCi0jZGVmaW5lIERNQU9SX0RNRQkweDAwMDAwMDAxCi0KIC8qCiAgKiBEZWZpbmUgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgZHVhbCBhZGRyZXNzIG1lbW9yeS1tZW1vcnkgdHJhbnNmZXIuCiAgKiBUaGUgMHg0MDAgdmFsdWUgcmVwcmVzZW50cyBhdXRvLXJlcXVlc3QsIGV4dGVybmFsLT5leHRlcm5hbC4KQEAgLTExMSw2MSArODQsNCBAQAogI2VuZGlmCiB9OwogCi0vKiBETUEgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgU0FSICAgICAweDAwCi0jZGVmaW5lIERBUiAgICAgMHgwNAotI2RlZmluZSBUQ1IgICAgIDB4MDgKLSNkZWZpbmUgQ0hDUiAgICAweDBDCi0jZGVmaW5lIERNQU9SCTB4NDAKLQotLyoKLSAqIGZvciBkbWEgZW5naW5lCi0gKgotICogU3VwZXJIIERNQSBtb2RlCi0gKi8KLSNkZWZpbmUgU0hETUFfTUlYX0lSUQkoMSA8PCAxKQotI2RlZmluZSBTSERNQV9ETUFPUjEJKDEgPDwgMikKLSNkZWZpbmUgU0hETUFfRE1BRTEJKDEgPDwgMykKLQotZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQgewotCVNIRE1BX1NMQVZFX1NDSUYwX1RYLAotCVNIRE1BX1NMQVZFX1NDSUYwX1JYLAotCVNIRE1BX1NMQVZFX1NDSUYxX1RYLAotCVNIRE1BX1NMQVZFX1NDSUYxX1JYLAotCVNIRE1BX1NMQVZFX1NDSUYyX1RYLAotCVNIRE1BX1NMQVZFX1NDSUYyX1JYLAotCVNIRE1BX1NMQVZFX1NDSUYzX1RYLAotCVNIRE1BX1NMQVZFX1NDSUYzX1JYLAotCVNIRE1BX1NMQVZFX1NDSUY0X1RYLAotCVNIRE1BX1NMQVZFX1NDSUY0X1JYLAotCVNIRE1BX1NMQVZFX1NDSUY1X1RYLAotCVNIRE1BX1NMQVZFX1NDSUY1X1JYLAotCVNIRE1BX1NMQVZFX1NJVUFfVFgsCi0JU0hETUFfU0xBVkVfU0lVQV9SWCwKLQlTSERNQV9TTEFWRV9TSVVCX1RYLAotCVNIRE1BX1NMQVZFX1NJVUJfUlgsCi0JU0hETUFfU0xBVkVfTlVNQkVSLAkvKiBNdXN0IHN0YXkgbGFzdCAqLwotfTsKLQotc3RydWN0IHNoX2RtYWVfc2xhdmVfY29uZmlnIHsKLQllbnVtIHNoX2RtYWVfc2xhdmVfY2hhbl9pZAlzbGF2ZV9pZDsKLQlkbWFfYWRkcl90CQkJYWRkcjsKLQl1MzIJCQkJY2hjcjsKLQljaGFyCQkJCW1pZF9yaWQ7Ci19OwotCi1zdHJ1Y3Qgc2hfZG1hZV9wZGF0YSB7Ci0JdW5zaWduZWQgaW50IG1vZGU7Ci0Jc3RydWN0IHNoX2RtYWVfc2xhdmVfY29uZmlnICpjb25maWc7Ci0JaW50IGNvbmZpZ19udW07Ci19OwotCi1zdHJ1Y3QgZGV2aWNlOwotCi1zdHJ1Y3Qgc2hfZG1hZV9zbGF2ZSB7Ci0JZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQJc2xhdmVfaWQ7IC8qIFNldCBieSB0aGUgcGxhdGZvcm0gKi8KLQlzdHJ1Y3QgZGV2aWNlCQkJKmRtYV9kZXY7IC8qIFNldCBieSB0aGUgcGxhdGZvcm0gKi8KLQlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZV9jb25maWcJKmNvbmZpZzsgIC8qIFNldCBieSB0aGUgZHJpdmVyICovCi19OwotCiAjZW5kaWYgLyogX19ETUFfU0hfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9kbWFlbmdpbmUuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vZG1hZW5naW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYyZjMwY2YKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2RtYWVuZ2luZS5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBIZWFkZXIgZm9yIHRoZSBuZXcgU0ggZG1hZW5naW5lIGRyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHdWVubmFkaSBMaWFraG92ZXRza2kgPGcubGlha2hvdmV0c2tpQGdteC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaWZuZGVmIEFTTV9ETUFFTkdJTkVfSAorI2RlZmluZSBBU01fRE1BRU5HSU5FX0gKKworI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworI2luY2x1ZGUgPGFzbS9kbWEtcmVnaXN0ZXIuaD4KKworI2RlZmluZSBTSF9ETUFDX01BWF9DSEFOTkVMUwk2CisKK2VudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkIHsKKwlTSERNQV9TTEFWRV9TQ0lGMF9UWCwKKwlTSERNQV9TTEFWRV9TQ0lGMF9SWCwKKwlTSERNQV9TTEFWRV9TQ0lGMV9UWCwKKwlTSERNQV9TTEFWRV9TQ0lGMV9SWCwKKwlTSERNQV9TTEFWRV9TQ0lGMl9UWCwKKwlTSERNQV9TTEFWRV9TQ0lGMl9SWCwKKwlTSERNQV9TTEFWRV9TQ0lGM19UWCwKKwlTSERNQV9TTEFWRV9TQ0lGM19SWCwKKwlTSERNQV9TTEFWRV9TQ0lGNF9UWCwKKwlTSERNQV9TTEFWRV9TQ0lGNF9SWCwKKwlTSERNQV9TTEFWRV9TQ0lGNV9UWCwKKwlTSERNQV9TTEFWRV9TQ0lGNV9SWCwKKwlTSERNQV9TTEFWRV9TSVVBX1RYLAorCVNIRE1BX1NMQVZFX1NJVUFfUlgsCisJU0hETUFfU0xBVkVfU0lVQl9UWCwKKwlTSERNQV9TTEFWRV9TSVVCX1JYLAorCVNIRE1BX1NMQVZFX05VTUJFUiwJLyogTXVzdCBzdGF5IGxhc3QgKi8KK307CisKK3N0cnVjdCBzaF9kbWFlX3NsYXZlX2NvbmZpZyB7CisJZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQJc2xhdmVfaWQ7CisJZG1hX2FkZHJfdAkJCWFkZHI7CisJdTMyCQkJCWNoY3I7CisJY2hhcgkJCQltaWRfcmlkOworfTsKKworc3RydWN0IHNoX2RtYWVfY2hhbm5lbCB7CisJdW5zaWduZWQgaW50CW9mZnNldDsKKwl1bnNpZ25lZCBpbnQJZG1hcnM7CisJdW5zaWduZWQgaW50CWRtYXJzX2JpdDsKK307CisKK3N0cnVjdCBzaF9kbWFlX3BkYXRhIHsKKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZV9jb25maWcgKnNsYXZlOworCWludCBzbGF2ZV9udW07CisJc3RydWN0IHNoX2RtYWVfY2hhbm5lbCAqY2hhbm5lbDsKKwlpbnQgY2hhbm5lbF9udW07CisJdW5zaWduZWQgaW50IHRzX2xvd19zaGlmdDsKKwl1bnNpZ25lZCBpbnQgdHNfbG93X21hc2s7CisJdW5zaWduZWQgaW50IHRzX2hpZ2hfc2hpZnQ7CisJdW5zaWduZWQgaW50IHRzX2hpZ2hfbWFzazsKKwl1bnNpZ25lZCBpbnQgKnRzX3NoaWZ0OworCWludCB0c19zaGlmdF9udW07CisJdTE2IGRtYW9yX2luaXQ7Cit9OworCitzdHJ1Y3QgZGV2aWNlOworCisvKiBVc2VkIGJ5IHNsYXZlIERNQSBjbGllbnRzIHRvIHJlcXVlc3QgRE1BIHRvL2Zyb20gYSBzcGVjaWZpYyBwZXJpcGhlcmFsICovCitzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZSB7CisJZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQJc2xhdmVfaWQ7IC8qIFNldCBieSB0aGUgcGxhdGZvcm0gKi8KKwlzdHJ1Y3QgZGV2aWNlCQkJKmRtYV9kZXY7IC8qIFNldCBieSB0aGUgcGxhdGZvcm0gKi8KKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZV9jb25maWcJKmNvbmZpZzsgIC8qIFNldCBieSB0aGUgZHJpdmVyICovCit9OworCitzdHJ1Y3Qgc2hfZG1hZV9yZWdzIHsKKwl1MzIgc2FyOyAvKiBTQVIgLyBzb3VyY2UgYWRkcmVzcyAqLworCXUzMiBkYXI7IC8qIERBUiAvIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKwl1MzIgdGNyOyAvKiBUQ1IgLyB0cmFuc2ZlciBjb3VudCAqLworfTsKKworc3RydWN0IHNoX2Rlc2MgeworCXN0cnVjdCBzaF9kbWFlX3JlZ3MgaHc7CisJc3RydWN0IGxpc3RfaGVhZCBub2RlOworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciBhc3luY190eDsKKwllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb247CisJZG1hX2Nvb2tpZV90IGNvb2tpZTsKKwlzaXplX3QgcGFydGlhbDsKKwlpbnQgY2h1bmtzOworCWludCBtYXJrOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKaW5kZXggN2RhYjdiMjMuLmY2ODk1NTQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vaW8uaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL2lvLmgKQEAgLTI5MSwyMSArMjkxLDIxIEBACiAgKiBkb2Vzbid0IGV4aXN0LCBzbyBldmVyeXRoaW5nIG11c3QgZ28gdGhyb3VnaCBwYWdlIHRhYmxlcy4KICAqLwogI2lmZGVmIENPTkZJR19NTVUKLXZvaWQgX19pb21lbSAqX19pb3JlbWFwX2NhbGxlcih1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAordm9pZCBfX2lvbWVtICpfX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkcl90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJICAgICAgIHBncHJvdF90IHByb3QsIHZvaWQgKmNhbGxlcik7CiB2b2lkIF9faW91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCi1fX2lvcmVtYXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKK19faW9yZW1hcChwaHlzX2FkZHJfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgcGdwcm90X3QgcHJvdCkKIHsKIAlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihvZmZzZXQsIHNpemUsIHByb3QsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKLV9faW9yZW1hcF8yOWJpdCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQorX19pb3JlbWFwXzI5Yml0KHBoeXNfYWRkcl90IG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQogewogI2lmZGVmIENPTkZJR18yOUJJVAotCXVuc2lnbmVkIGxvbmcgbGFzdF9hZGRyID0gb2Zmc2V0ICsgc2l6ZSAtIDE7CisJcGh5c19hZGRyX3QgbGFzdF9hZGRyID0gb2Zmc2V0ICsgc2l6ZSAtIDE7CiAKIAkvKgogCSAqIEZvciBQMSBhbmQgUDIgc3BhY2UgdGhpcyBpcyB0cml2aWFsLCBhcyBldmVyeXRoaW5nIGlzIGFscmVhZHkKQEAgLTMyOSw3ICszMjksNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCi1fX2lvcmVtYXBfbW9kZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQorX19pb3JlbWFwX21vZGUocGh5c19hZGRyX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCiB7CiAJdm9pZCBfX2lvbWVtICpyZXQ7CiAKQEAgLTM0OSwzNSArMzQ5LDMyIEBACiAjZGVmaW5lIF9faW91bm1hcChhZGRyKQkJCQlkbyB7IH0gd2hpbGUgKDApCiAjZW5kaWYgLyogQ09ORklHX01NVSAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCi1pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqaW9yZW1hcChwaHlzX2FkZHJfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlyZXR1cm4gX19pb3JlbWFwX21vZGUob2Zmc2V0LCBzaXplLCBQQUdFX0tFUk5FTF9OT0NBQ0hFKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgotaW9yZW1hcF9jYWNoZSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQoraW9yZW1hcF9jYWNoZShwaHlzX2FkZHJfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlyZXR1cm4gX19pb3JlbWFwX21vZGUob2Zmc2V0LCBzaXplLCBQQUdFX0tFUk5FTCk7CiB9CiAKICNpZmRlZiBDT05GSUdfSEFWRV9JT1JFTUFQX1BST1QKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICoKLWlvcmVtYXBfcHJvdChyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCitpb3JlbWFwX3Byb3QocGh5c19hZGRyX3Qgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJcmV0dXJuIF9faW9yZW1hcF9tb2RlKG9mZnNldCwgc2l6ZSwgX19wZ3Byb3QoZmxhZ3MpKTsKIH0KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0lPUkVNQVBfRklYRUQKLWV4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfZml4ZWQocmVzb3VyY2Vfc2l6ZV90LCB1bnNpZ25lZCBsb25nLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcsIHBncHJvdF90KTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKmlvcmVtYXBfZml4ZWQocGh5c19hZGRyX3QsIHVuc2lnbmVkIGxvbmcsIHBncHJvdF90KTsKIGV4dGVybiBpbnQgaW91bm1hcF9maXhlZCh2b2lkIF9faW9tZW0gKik7CiBleHRlcm4gdm9pZCBpb3JlbWFwX2ZpeGVkX2luaXQodm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKgotaW9yZW1hcF9maXhlZChyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCitpb3JlbWFwX2ZpeGVkKHBoeXNfYWRkcl90IHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQogewogCUJVRygpOwogCXJldHVybiBOVUxMOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXUuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vbW11LmgKaW5kZXggMTVhMDViNi4uMTlmZTg0NSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9tbXUuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL21tdS5oCkBAIC01NSwxOSArNTUsMjkgQEAKIAogI2lmZGVmIENPTkZJR19QTUIKIC8qIGFyY2gvc2gvbW0vcG1iLmMgKi8KLWxvbmcgcG1iX3JlbWFwKHVuc2lnbmVkIGxvbmcgdmlydCwgdW5zaWduZWQgbG9uZyBwaHlzLAotCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpOwotdm9pZCBwbWJfdW5tYXAodW5zaWduZWQgbG9uZyBhZGRyKTsKLXZvaWQgcG1iX2luaXQodm9pZCk7CiBib29sIF9faW5fMjliaXRfbW9kZSh2b2lkKTsKKwordm9pZCBwbWJfaW5pdCh2b2lkKTsKK2ludCBwbWJfYm9sdF9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgdmlydCwgcGh5c19hZGRyX3QgcGh5cywKKwkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpOwordm9pZCBfX2lvbWVtICpwbWJfcmVtYXBfY2FsbGVyKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgICAgICBwZ3Byb3RfdCBwcm90LCB2b2lkICpjYWxsZXIpOworaW50IHBtYl91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpOworCiAjZWxzZQotc3RhdGljIGlubGluZSBsb25nIHBtYl9yZW1hcCh1bnNpZ25lZCBsb25nIHZpcnQsIHVuc2lnbmVkIGxvbmcgcGh5cywKLQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCitwbWJfcmVtYXBfY2FsbGVyKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJIHBncHJvdF90IHByb3QsIHZvaWQgKmNhbGxlcikKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG1iX3VubWFwKHZvaWQgX19pb21lbSAqYWRkcikKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotI2RlZmluZSBwbWJfdW5tYXAoYWRkcikJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgcG1iX2luaXQoYWRkcikJCWRvIHsgfSB3aGlsZSAoMCkKIAogI2lmZGVmIENPTkZJR18yOUJJVApAQCAtNzcsNiArODcsMTMgQEAKICNlbmRpZgogCiAjZW5kaWYgLyogQ09ORklHX1BNQiAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqCitwbWJfcmVtYXAocGh5c19hZGRyX3QgcGh5cywgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQoreworCXJldHVybiBwbWJfcmVtYXBfY2FsbGVyKHBoeXMsIHNpemUsIHByb3QsIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSk7Cit9CisKICNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmIC8qIF9fTU1VX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3BjaS5oCmluZGV4IDEwNDJmN2YuLjhiZDk1MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wY2kuaApAQCAtODMsMjUgKzgzLDYgQEAKICAqLwogI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTCShkbWFfb3BzLT5pc19waHlzKQogCi0vKiBwY2lfdW5tYXBfe3NpbmdsZSxwYWdlfSBiZWluZyBhIG5vcCBkZXBlbmRzIHVwb24gdGhlCi0gKiBjb25maWd1cmF0aW9uLgotICovCi0jaWZkZWYgQ09ORklHX0RNQV9OT05DT0hFUkVOVAotI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKEFERFJfTkFNRSkJZG1hX2FkZHJfdCBBRERSX05BTUU7Ci0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkJCV9fdTMyIExFTl9OQU1FOwotI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJCSgoUFRSKS0+QUREUl9OQU1FKQotI2RlZmluZSBwY2lfdW5tYXBfYWRkcl9zZXQoUFRSLCBBRERSX05BTUUsIFZBTCkJKCgoUFRSKS0+QUREUl9OQU1FKSA9IChWQUwpKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuKFBUUiwgTEVOX05BTUUpCQkoKFBUUiktPkxFTl9OQU1FKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCSgoKFBUUiktPkxFTl9OQU1FKSA9IChWQUwpKQotI2Vsc2UKLSNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCi0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpCQkoMCkKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHJfc2V0KFBUUiwgQUREUl9OQU1FLCBWQUwpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJKDApCi0jZGVmaW5lIHBjaV91bm1hcF9sZW5fc2V0KFBUUiwgTEVOX05BTUUsIFZBTCkJZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfUENJCiAvKgogICogTm9uZSBvZiB0aGUgU0ggUENJIGNvbnRyb2xsZXJzIHN1cHBvcnQgTVdJLCBpdCBpcyBhbHdheXMgdHJlYXRlZCBhcyBhCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9wdHJhY2UuaAppbmRleCBlMTFiMTRlLi4yMTY4ZmRlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTEyMyw4ICsxMjMsNiBAQAogc3RydWN0IHRhc2tfc3RydWN0OwogCiAjZGVmaW5lIGFyY2hfaGFzX3NpbmdsZV9zdGVwKCkJKDEpCi1leHRlcm4gdm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7Ci1leHRlcm4gdm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICopOwogCiBzdHJ1Y3QgcGVyZl9ldmVudDsKIHN0cnVjdCBwZXJmX3NhbXBsZV9kYXRhOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaXUuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc2l1LmgKaW5kZXggNTc1NjVhMy4uZjFiMWU2OSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS9zaXUuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3NpdS5oCkBAIC0xMSw3ICsxMSw3IEBACiAjaWZuZGVmIEFTTV9TSVVfSAogI2RlZmluZSBBU01fU0lVX0gKIAotI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KKyNpbmNsdWRlIDxhc20vZG1hZW5naW5lLmg+CiAKIHN0cnVjdCBkZXZpY2U7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbHMuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vc3lzY2FsbHMuaAppbmRleCBjMWUyYjhkLi41MDc3MjVhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3N5c2NhbGxzLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS9zeXNjYWxscy5oCkBAIC0zLDE3ICszLDEyIEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLXN0cnVjdCBvbGRfdXRzbmFtZTsKLQogYXNtbGlua2FnZSBpbnQgb2xkX21tYXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJCXVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKIAkJCWludCBmZCwgdW5zaWduZWQgbG9uZyBvZmYpOwogYXNtbGlua2FnZSBsb25nIHN5c19tbWFwMih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQkJICB1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQkgIHVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgcGdvZmYpOwotYXNtbGlua2FnZSBpbnQgc3lzX2lwYyh1aW50IGNhbGwsIGludCBmaXJzdCwgaW50IHNlY29uZCwKLQkJICAgICAgIGludCB0aGlyZCwgdm9pZCBfX3VzZXIgKnB0ciwgbG9uZyBmaWZ0aCk7Ci1hc21saW5rYWdlIGludCBzeXNfdW5hbWUoc3RydWN0IG9sZF91dHNuYW1lIF9fdXNlciAqbmFtZSk7CiAKICNpZmRlZiBDT05GSUdfU1VQRVJIMzIKICMgaW5jbHVkZSAic3lzY2FsbHNfMzIuaCIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdG9wb2xvZ3kuaAppbmRleCAzN2NkYWRkLi44OGU3MzQwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3RvcG9sb2d5LmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS90b3BvbG9neS5oCkBAIC0zNSw3ICszNSw3IEBACiAKICNkZWZpbmUgcGNpYnVzX3RvX25vZGUoYnVzKQkoKHZvaWQpKGJ1cyksIC0xKQogI2RlZmluZSBjcHVtYXNrX29mX3BjaWJ1cyhidXMpCShwY2lidXNfdG9fbm9kZShidXMpID09IC0xID8gXAotCQkJCQlDUFVfTUFTS19BTExfUFRSIDogXAorCQkJCQljcHVfYWxsX21hc2sgOiBcCiAJCQkJCWNwdW1hc2tfb2Zfbm9kZShwY2lidXNfdG9fbm9kZShidXMpKSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oIGIvYXJjaC9zaC9pbmNsdWRlL2FzbS91bmlzdGRfMzIuaAppbmRleCAzNjU3NDRiLi4wZTdmMGZjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmgKQEAgLTM1OCw2ICszNTgsNyBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfSVBDCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTApAQCAtMzcwLDYgKzM3MSw3IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9VTkFNRQogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaCBiL2FyY2gvc2gvaW5jbHVkZS9hc20vdW5pc3RkXzY0LmgKaW5kZXggMjVkZTE1OC4uMDU4MGMzMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2FzbS91bmlzdGRfNjQuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oCkBAIC0zOTgsNiArMzk4LDcgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1RBVDY0CiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19BTEFSTQogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfR0VUSE9TVE5BTUUKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0lQQwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUEFVU0UKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NHRVRNQVNLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdOQUwKQEAgLTQxMCw2ICs0MTEsNyBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfTExTRUVLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19OSUNFCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfR0VUUkxJTUlUCisjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19PTERfVU5BTUUKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEtcmVnaXN0ZXIuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEtcmVnaXN0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzQ5ZTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS1yZWdpc3Rlci5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBTSDMgQ1BVLXNwZWNpZmljIERNQSBkZWZpbml0aW9ucywgdXNlZCBieSBib3RoIERNQSBkcml2ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEd1ZW5uYWRpIExpYWtob3ZldHNraSA8Zy5saWFraG92ZXRza2lAZ214LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpZm5kZWYgQ1BVX0RNQV9SRUdJU1RFUl9ICisjZGVmaW5lIENQVV9ETUFfUkVHSVNURVJfSAorCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKKworI2RlZmluZSBETUFPUl9JTklUCURNQU9SX0RNRQorCisvKgorICogVGhlIFN1cGVySCBETUFDIHN1cHBvcnRzIGEgbnVtYmVyIG9mIHRyYW5zbWl0IHNpemVzLCB3ZSBsaXN0IHRoZW0gaGVyZSwKKyAqIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSB2YWx1ZXMgYXMgdGhleSBhcHBlYXIgaW4gdGhlIENIQ1IgcmVnaXN0ZXJzLgorICovCitlbnVtIHsKKwlYTUlUX1NaXzhCSVQsCisJWE1JVF9TWl8xNkJJVCwKKwlYTUlUX1NaXzMyQklULAorCVhNSVRfU1pfMTI4QklULAorfTsKKworLyogbG9nMihzaXplIC8gOCkgLSB1c2VkIHRvIGNhbGN1bGF0ZSBudW1iZXIgb2YgdHJhbnNmZXJzICovCisjZGVmaW5lIFRTX1NISUZUIHsJCQlcCisJW1hNSVRfU1pfOEJJVF0JCT0gMCwJXAorCVtYTUlUX1NaXzE2QklUXQkJPSAxLAlcCisJW1hNSVRfU1pfMzJCSVRdCQk9IDIsCVwKKwlbWE1JVF9TWl8xMjhCSVRdCT0gNCwJXAorfQorCisjZGVmaW5lIFRTX0lOREVYMlZBTChpKQkoKChpKSAmIDMpIDw8IENIQ1JfVFNfTE9XX1NISUZUKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEuaCBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2gzL2NwdS9kbWEuaAppbmRleCAyMDc4MTFhLi4yNGUyOGI5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoMy9jcHUvZG1hLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDMvY3B1L2RtYS5oCkBAIC0yMCwzMSArMjAsNCBAQAogI2RlZmluZSBUU18zMgkJMHgwMDAwMDAxMAogI2RlZmluZSBUU18xMjgJCTB4MDAwMDAwMTgKIAotI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4MTgKLSNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJMwotI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkwCi0jZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkwCi0KLSNkZWZpbmUgRE1BT1JfSU5JVAlETUFPUl9ETUUKLQotLyoKLSAqIFRoZSBTdXBlckggRE1BQyBzdXBwb3J0cyBhIG51bWJlciBvZiB0cmFuc21pdCBzaXplcywgd2UgbGlzdCB0aGVtIGhlcmUsCi0gKiB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgdmFsdWVzIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBDSENSIHJlZ2lzdGVycy4KLSAqLwotZW51bSB7Ci0JWE1JVF9TWl84QklULAotCVhNSVRfU1pfMTZCSVQsCi0JWE1JVF9TWl8zMkJJVCwKLQlYTUlUX1NaXzEyOEJJVCwKLX07Ci0KLSNkZWZpbmUgVFNfU0hJRlQgewkJCVwKLQlbWE1JVF9TWl84QklUXQkJPSAwLAlcCi0JW1hNSVRfU1pfMTZCSVRdCQk9IDEsCVwKLQlbWE1JVF9TWl8zMkJJVF0JCT0gMiwJXAotCVtYTUlUX1NaXzEyOEJJVF0JPSA0LAlcCi19Ci0KLSNkZWZpbmUgVFNfSU5ERVgyVkFMKGkpCSgoKGkpICYgMykgPDwgQ0hDUl9UU19MT1dfU0hJRlQpCi0KICNlbmRpZiAvKiBfX0FTTV9DUFVfU0gzX0RNQV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXJlZ2lzdGVyLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXJlZ2lzdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmOWZlYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEtcmVnaXN0ZXIuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIFNINCBDUFUtc3BlY2lmaWMgRE1BIGRlZmluaXRpb25zLCB1c2VkIGJ5IGJvdGggRE1BIGRyaXZlcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR3Vlbm5hZGkgTGlha2hvdmV0c2tpIDxnLmxpYWtob3ZldHNraUBnbXguZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2lmbmRlZiBDUFVfRE1BX1JFR0lTVEVSX0gKKyNkZWZpbmUgQ1BVX0RNQV9SRUdJU1RFUl9ICisKKy8qIFNINzc1MS83NzYwLzc3ODAgRE1BIElSUSBzb3VyY2VzICovCisKKyNpZmRlZiBDT05GSUdfQ1BVX1NINEEKKworI2RlZmluZSBETUFPUl9JTklUCURNQU9SX0RNRQorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzKSB8fCBcCisJZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzMwKQorI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4MDAwMDAwMTgKKyNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJMworI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkwCisjZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjIpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQpCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTB4MDAzMDAwMDAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCSgyMCAtIDIpCS8qIDIgYml0cyBmb3Igc2hpZnRlZCBsb3cgVFMgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykgfHwgXAorCWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2NCkKKyNkZWZpbmUgQ0hDUl9UU19MT1dfTUFTSwkweDAwMDAwMDE4CisjZGVmaW5lIENIQ1JfVFNfTE9XX1NISUZUCTMKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX01BU0sJMAorI2RlZmluZSBDSENSX1RTX0hJR0hfU0hJRlQJMAorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIzKQorI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4MDAwMDAwMTgKKyNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJMworI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkwCisjZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCisjZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAorI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCisjZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKKyNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKKyNlbHNlIC8qIFNINzc4NSAqLworI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4MDAwMDAwMTgKKyNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJMworI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkwCisjZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkwCisjZW5kaWYKKworLyogVHJhbnNtaXQgc2l6ZXMgYW5kIHJlc3BlY3RpdmUgQ0hDUiByZWdpc3RlciB2YWx1ZXMgKi8KK2VudW0geworCVhNSVRfU1pfOEJJVAkJPSAwLAorCVhNSVRfU1pfMTZCSVQJCT0gMSwKKwlYTUlUX1NaXzMyQklUCQk9IDIsCisJWE1JVF9TWl82NEJJVAkJPSA3LAorCVhNSVRfU1pfMTI4QklUCQk9IDMsCisJWE1JVF9TWl8yNTZCSVQJCT0gNCwKKwlYTUlUX1NaXzEyOEJJVF9CTEsJPSAweGIsCisJWE1JVF9TWl8yNTZCSVRfQkxLCT0gMHhjLAorfTsKKworLyogbG9nMihzaXplIC8gOCkgLSB1c2VkIHRvIGNhbGN1bGF0ZSBudW1iZXIgb2YgdHJhbnNmZXJzICovCisjZGVmaW5lIFRTX1NISUZUIHsJCQlcCisJW1hNSVRfU1pfOEJJVF0JCT0gMCwJXAorCVtYTUlUX1NaXzE2QklUXQkJPSAxLAlcCisJW1hNSVRfU1pfMzJCSVRdCQk9IDIsCVwKKwlbWE1JVF9TWl82NEJJVF0JCT0gMywJXAorCVtYTUlUX1NaXzEyOEJJVF0JPSA0LAlcCisJW1hNSVRfU1pfMjU2QklUXQk9IDUsCVwKKwlbWE1JVF9TWl8xMjhCSVRfQkxLXQk9IDQsCVwKKwlbWE1JVF9TWl8yNTZCSVRfQkxLXQk9IDUsCVwKK30KKworI2RlZmluZSBUU19JTkRFWDJWQUwoaSkJKCgoKGkpICYgMykgPDwgQ0hDUl9UU19MT1dfU0hJRlQpIHwgXAorCQkJICgoKChpKSA+PiAyKSAmIDMpIDw8IENIQ1JfVFNfSElHSF9TSElGVCkpCisKKyNlbHNlIC8qIENPTkZJR19DUFVfU0g0QSAqLworCisjZGVmaW5lIERNQU9SX0lOSVQJKDB4ODAwMCB8IERNQU9SX0RNRSkKKworI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4NzAKKyNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJNAorI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkwCisjZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkwCisKKy8qIFRyYW5zbWl0IHNpemVzIGFuZCByZXNwZWN0aXZlIENIQ1IgcmVnaXN0ZXIgdmFsdWVzICovCitlbnVtIHsKKwlYTUlUX1NaXzhCSVQJPSAxLAorCVhNSVRfU1pfMTZCSVQJPSAyLAorCVhNSVRfU1pfMzJCSVQJPSAzLAorCVhNSVRfU1pfNjRCSVQJPSAwLAorCVhNSVRfU1pfMjU2QklUCT0gNCwKK307CisKKy8qIGxvZzIoc2l6ZSAvIDgpIC0gdXNlZCB0byBjYWxjdWxhdGUgbnVtYmVyIG9mIHRyYW5zZmVycyAqLworI2RlZmluZSBUU19TSElGVCB7CQkJXAorCVtYTUlUX1NaXzhCSVRdCQk9IDAsCVwKKwlbWE1JVF9TWl8xNkJJVF0JCT0gMSwJXAorCVtYTUlUX1NaXzMyQklUXQkJPSAyLAlcCisJW1hNSVRfU1pfNjRCSVRdCQk9IDMsCVwKKwlbWE1JVF9TWl8yNTZCSVRdCT0gNSwJXAorfQorCisjZGVmaW5lIFRTX0lOREVYMlZBTChpKQkoKChpKSAmIDcpIDw8IENIQ1JfVFNfTE9XX1NISUZUKQorCisjZW5kaWYgLyogQ09ORklHX0NQVV9TSDRBICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS1zaDRhLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaAppbmRleCBlNzM0ZWE0Li45NjQ3ZTY4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaAorKysgYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLXNoNGEuaApAQCAtOCwyMCArOCwxMiBAQAogI2RlZmluZSBETUFFMF9JUlEJNzgJLyogRE1BIEVycm9yIElSUSovCiAjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRTAwODAyMAogI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZFMDA5MDAwCi0jZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAotI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCi0jZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKLSNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMikKICNkZWZpbmUgRE1URTBfSVJRCTQ4CiAjZGVmaW5lIERNVEU0X0lSUQk3NgogI2RlZmluZSBETUFFMF9JUlEJNzgJLyogRE1BIEVycm9yIElSUSovCiAjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRTAwODAyMAogI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZFMDA5MDAwCi0jZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAotI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCi0jZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTB4MDAzMDAwMDAKLSNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTIwCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjMpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjQpCiAjZGVmaW5lIERNVEUwX0lSUQkzNApAQCAtMjksMTAgKzIxLDYgQEAKICNkZWZpbmUgRE1BRTBfSVJRCTM4CiAjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRjYwODAyMAogI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZGNjA5MDAwCi0jZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAotI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCi0jZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKLSNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykKICNkZWZpbmUgRE1URTBfSVJRCTQ4CS8qIERNQUMwQSovCiAjZGVmaW5lIERNVEU0X0lSUQk3NgkvKiBETUFDMEIgKi8KQEAgLTQ2LDEwICszNCw2IEBACiAjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGRTAwODAyMAogI2RlZmluZSBTSF9ETUFDX0JBU0UxCTB4RkRDMDgwMjAKICNkZWZpbmUgU0hfRE1BUlNfQkFTRTAJMHhGREMwOTAwMAotI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4MDAwMDAwMTgKLSNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJMwotI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkwCi0jZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkwCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQpCiAjZGVmaW5lIERNVEUwX0lSUQk0OAkvKiBETUFDMEEqLwogI2RlZmluZSBETVRFNF9JUlEJNzYJLyogRE1BQzBCICovCkBAIC02NCwxMCArNDgsNiBAQAogI2RlZmluZSBTSF9ETUFDX0JBU0UxCTB4RkRDMDgwMjAKICNkZWZpbmUgU0hfRE1BUlNfQkFTRTAJMHhGRTAwOTAwMAogI2RlZmluZSBTSF9ETUFSU19CQVNFMQkweEZEQzA5MDAwCi0jZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAotI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCi0jZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTB4MDA2MDAwMDAKLSNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTIxCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCiAjZGVmaW5lIERNVEUwX0lSUQkzNAogI2RlZmluZSBETVRFNF9JUlEJNDQKQEAgLTgwLDEwICs2MCw2IEBACiAjZGVmaW5lIFNIX0RNQUNfQkFTRTAJMHhGQzgwODAyMAogI2RlZmluZSBTSF9ETUFDX0JBU0UxCTB4RkM4MTgwMjAKICNkZWZpbmUgU0hfRE1BUlNfQkFTRTAJMHhGQzgwOTAwMAotI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4MDAwMDAwMTgKLSNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJMwotI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkwCi0jZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkwCiAjZWxzZSAvKiBTSDc3ODUgKi8KICNkZWZpbmUgRE1URTBfSVJRCTMzCiAjZGVmaW5lIERNVEU0X0lSUQkzNwpAQCAtOTcsMTAgKzczLDYgQEAKICNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweEZDODA4MDIwCiAjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhGQ0MwODAyMAogI2RlZmluZSBTSF9ETUFSU19CQVNFMAkweEZDODA5MDAwCi0jZGVmaW5lIENIQ1JfVFNfTE9XX01BU0sJMHgwMDAwMDAxOAotI2RlZmluZSBDSENSX1RTX0xPV19TSElGVAkzCi0jZGVmaW5lIENIQ1JfVFNfSElHSF9NQVNLCTAKLSNkZWZpbmUgQ0hDUl9UU19ISUdIX1NISUZUCTAKICNlbmRpZgogCiAjZGVmaW5lIFJFUV9IRQkJMHgwMDAwMDBDMApAQCAtMTA4LDM4ICs4MCw0IEBACiAjZGVmaW5lIFJFUV9MRQkJMHgwMDAwMDA0MAogI2RlZmluZSBUTV9CVVJTVAkweDAwMDAwMDIwCiAKLS8qCi0gKiBUaGUgU3VwZXJIIERNQUMgc3VwcG9ydHMgYSBudW1iZXIgb2YgdHJhbnNtaXQgc2l6ZXMsIHdlIGxpc3QgdGhlbSBoZXJlLAotICogd2l0aCB0aGVpciByZXNwZWN0aXZlIHZhbHVlcyBhcyB0aGV5IGFwcGVhciBpbiB0aGUgQ0hDUiByZWdpc3RlcnMuCi0gKgotICogRGVmYXVsdHMgdG8gYSA2NC1iaXQgdHJhbnNmZXIgc2l6ZS4KLSAqLwotZW51bSB7Ci0JWE1JVF9TWl84QklUCQk9IDAsCi0JWE1JVF9TWl8xNkJJVAkJPSAxLAotCVhNSVRfU1pfMzJCSVQJCT0gMiwKLQlYTUlUX1NaXzY0QklUCQk9IDcsCi0JWE1JVF9TWl8xMjhCSVQJCT0gMywKLQlYTUlUX1NaXzI1NkJJVAkJPSA0LAotCVhNSVRfU1pfMTI4QklUX0JMSwk9IDB4YiwKLQlYTUlUX1NaXzI1NkJJVF9CTEsJPSAweGMsCi19OwotCi0vKgotICogVGhlIERNQSBjb3VudCBpcyBkZWZpbmVkIGFzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIuCi0gKi8KLSNkZWZpbmUgVFNfU0hJRlQgewkJCVwKLQlbWE1JVF9TWl84QklUXQkJPSAwLAlcCi0JW1hNSVRfU1pfMTZCSVRdCQk9IDEsCVwKLQlbWE1JVF9TWl8zMkJJVF0JCT0gMiwJXAotCVtYTUlUX1NaXzY0QklUXQkJPSAzLAlcCi0JW1hNSVRfU1pfMTI4QklUXQk9IDQsCVwKLQlbWE1JVF9TWl8yNTZCSVRdCT0gNSwJXAotCVtYTUlUX1NaXzEyOEJJVF9CTEtdCT0gNCwJXAotCVtYTUlUX1NaXzI1NkJJVF9CTEtdCT0gNSwJXAotfQotCi0jZGVmaW5lIFRTX0lOREVYMlZBTChpKQkoKCgoaSkgJiAzKSA8PCBDSENSX1RTX0xPV19TSElGVCkgfCBcCi0JCQkgKCgoKGkpID4+IDIpICYgMykgPDwgQ0hDUl9UU19ISUdIX1NISUZUKSkKLQogI2VuZGlmIC8qIF9fQVNNX1NIX0NQVV9TSDRfRE1BX1NINzc4MF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmggYi9hcmNoL3NoL2luY2x1ZGUvY3B1LXNoNC9jcHUvZG1hLmgKaW5kZXggMTE0YTM2OS4uY2E3NDdlOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9pbmNsdWRlL2NwdS1zaDQvY3B1L2RtYS5oCisrKyBiL2FyY2gvc2gvaW5jbHVkZS9jcHUtc2g0L2NwdS9kbWEuaApAQCAtNSw5ICs1LDggQEAKIAogI2lmZGVmIENPTkZJR19DUFVfU0g0QQogCi0jZGVmaW5lIERNQU9SX0lOSVQJKERNQU9SX0RNRSkKLQogI2luY2x1ZGUgPGNwdS9kbWEtc2g0YS5oPgorCiAjZWxzZSAvKiBDT05GSUdfQ1BVX1NINEEgKi8KIC8qCiAgKiBTSDc3NTAvU0g3NzUxL1NINzc2MApAQCAtMTcsNyArMTYsNiBAQAogI2RlZmluZSBETVRFNl9JUlEJNDYKICNkZWZpbmUgRE1BRTBfSVJRCTM4CiAKLSNkZWZpbmUgRE1BT1JfSU5JVAkoMHg4MDAwfERNQU9SX0RNRSkKICNkZWZpbmUgU0hfRE1BQ19CQVNFMAkweGZmYTAwMDAwCiAjZGVmaW5lIFNIX0RNQUNfQkFTRTEJMHhmZmEwMDA3MAogLyogRGVmaW5pdGlvbnMgZm9yIHRoZSBTdXBlckggRE1BQyAqLwpAQCAtMjcsNDAgKzI1LDggQEAKICNkZWZpbmUgVFNfMzIJCTB4MDAwMDAwMzAKICNkZWZpbmUgVFNfNjQJCTB4MDAwMDAwMDAKIAotI2RlZmluZSBDSENSX1RTX0xPV19NQVNLCTB4NzAKLSNkZWZpbmUgQ0hDUl9UU19MT1dfU0hJRlQJNAotI2RlZmluZSBDSENSX1RTX0hJR0hfTUFTSwkwCi0jZGVmaW5lIENIQ1JfVFNfSElHSF9TSElGVAkwCi0KICNkZWZpbmUgRE1BT1JfQ09ECTB4MDAwMDAwMDgKIAotLyoKLSAqIFRoZSBTdXBlckggRE1BQyBzdXBwb3J0cyBhIG51bWJlciBvZiB0cmFuc21pdCBzaXplcywgd2UgbGlzdCB0aGVtIGhlcmUsCi0gKiB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgdmFsdWVzIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBDSENSIHJlZ2lzdGVycy4KLSAqCi0gKiBEZWZhdWx0cyB0byBhIDY0LWJpdCB0cmFuc2ZlciBzaXplLgotICovCi1lbnVtIHsKLQlYTUlUX1NaXzhCSVQJPSAxLAotCVhNSVRfU1pfMTZCSVQJPSAyLAotCVhNSVRfU1pfMzJCSVQJPSAzLAotCVhNSVRfU1pfNjRCSVQJPSAwLAotCVhNSVRfU1pfMjU2QklUCT0gNCwKLX07Ci0KLS8qCi0gKiBUaGUgRE1BIGNvdW50IGlzIGRlZmluZWQgYXMgdGhlIG51bWJlciBvZiBieXRlcyB0byB0cmFuc2Zlci4KLSAqLwotI2RlZmluZSBUU19TSElGVCB7CQkJXAotCVtYTUlUX1NaXzhCSVRdCQk9IDAsCVwKLQlbWE1JVF9TWl8xNkJJVF0JCT0gMSwJXAotCVtYTUlUX1NaXzMyQklUXQkJPSAyLAlcCi0JW1hNSVRfU1pfNjRCSVRdCQk9IDMsCVwKLQlbWE1JVF9TWl8yNTZCSVRdCT0gNSwJXAotfQotCi0jZGVmaW5lIFRTX0lOREVYMlZBTChpKQkoKChpKSAmIDcpIDw8IENIQ1JfVFNfTE9XX1NISUZUKQotCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDRfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvaW5jbHVkZS9tYWNoLW1pZ29yL21hY2gvbWlnb3IuaCBiL2FyY2gvc2gvaW5jbHVkZS9tYWNoLW1pZ29yL21hY2gvbWlnb3IuaAppbmRleCBjZWU2Y2I4Li40MmZjY2Y5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2luY2x1ZGUvbWFjaC1taWdvci9tYWNoL21pZ29yLmgKKysrIGIvYXJjaC9zaC9pbmNsdWRlL21hY2gtbWlnb3IvbWFjaC9taWdvci5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfX0FTTV9TSF9NSUdPUl9ICiAjZGVmaW5lIF9fQVNNX1NIX01JR09SX0gKIAorI2RlZmluZSBQT1JUX01TRUxDUkEgMHhhNDA1MDE4MAogI2RlZmluZSBQT1JUX01TRUxDUkIgMHhhNDA1MDE4MgogI2RlZmluZSBCU0NfQ1M0QkNSIDB4ZmVjMTAwMTAKICNkZWZpbmUgQlNDX0NTNkFCQ1IgMHhmZWMxMDAxYwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYwppbmRleCA4M2RhNWRlLi5lOWZhMWJmZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMKQEAgLTQwNCw3ICs0MDQsNyBAQAogICogIElmIGFuIGVudHJ5IGhhcyBhIGRldmljZSBJRCwgaXQgbXVzdCBtYXRjaAogICogIElmIGFuIGVudHJ5IGhhcyBhIGNvbm5lY3Rpb24gSUQsIGl0IG11c3QgbWF0Y2gKICAqIFRoZW4gd2UgdGFrZSB0aGUgbW9zdCBzcGVjaWZpYyBlbnRyeSAtIHdpdGggdGhlIGZvbGxvd2luZwotICogb3JkZXIgb2YgcHJlY2lkZW5jZTogZGV2K2NvbiA+IGRldiBvbmx5ID4gY29uIG9ubHkuCisgKiBvcmRlciBvZiBwcmVjZWRlbmNlOiBkZXYrY29uID4gZGV2IG9ubHkgPiBjb24gb25seS4KICAqLwogc3RhdGljIHN0cnVjdCBjbGsgKmNsa19maW5kKGNvbnN0IGNoYXIgKmRldl9pZCwgY29uc3QgY2hhciAqY29uX2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jCmluZGV4IGZjMDY1ZjkuLjE0NzI2ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc3EuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMKQEAgLTMyNiw3ICszMjYsNyBAQAogCU5VTEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBzcV9zeXNmc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBzcV9zeXNmc19vcHMgPSB7CiAJLnNob3cJPSBzcV9zeXNmc19zaG93LAogCS5zdG9yZQk9IHNxX3N5c2ZzX3N0b3JlLAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKaW5kZXggZWYzZjk3OC4uZmQ3ZTM2MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzIyLmMKQEAgLTcsMTkgKzcsMTY3IEBACiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICovCi0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VyaWFsX3NjaS5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2hfdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC91aW9fZHJpdmVyLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL202NjU5Mi5oPgotI2luY2x1ZGUgPGxpbnV4L3NoX3RpbWVyLmg+CisKICNpbmNsdWRlIDxhc20vY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vZG1hZW5naW5lLmg+CiAjaW5jbHVkZSA8YXNtL21tem9uZS5oPgotI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KKyNpbmNsdWRlIDxhc20vc2l1Lmg+CisKKyNpbmNsdWRlIDxjcHUvZG1hLXJlZ2lzdGVyLmg+CiAjaW5jbHVkZSA8Y3B1L3NoNzcyMi5oPgogCitzdGF0aWMgc3RydWN0IHNoX2RtYWVfc2xhdmVfY29uZmlnIHNoNzcyMl9kbWFlX3NsYXZlc1tdID0geworCXsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfU0NJRjBfVFgsCisJCS5hZGRyCQk9IDB4ZmZlMDAwMGMsCisJCS5jaGNyCQk9IERNX0ZJWCB8IFNNX0lOQyB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfOEJJVCksCisJCS5taWRfcmlkCT0gMHgyMSwKKwl9LCB7CisJCS5zbGF2ZV9pZAk9IFNIRE1BX1NMQVZFX1NDSUYwX1JYLAorCQkuYWRkcgkJPSAweGZmZTAwMDE0LAorCQkuY2hjcgkJPSBETV9JTkMgfCBTTV9GSVggfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzhCSVQpLAorCQkubWlkX3JpZAk9IDB4MjIsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9TQ0lGMV9UWCwKKwkJLmFkZHIJCT0gMHhmZmUxMDAwYywKKwkJLmNoY3IJCT0gRE1fRklYIHwgU01fSU5DIHwgMHg4MDAgfCBUU19JTkRFWDJWQUwoWE1JVF9TWl84QklUKSwKKwkJLm1pZF9yaWQJPSAweDI1LAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfU0NJRjFfUlgsCisJCS5hZGRyCQk9IDB4ZmZlMTAwMTQsCisJCS5jaGNyCQk9IERNX0lOQyB8IFNNX0ZJWCB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfOEJJVCksCisJCS5taWRfcmlkCT0gMHgyNiwKKwl9LCB7CisJCS5zbGF2ZV9pZAk9IFNIRE1BX1NMQVZFX1NDSUYyX1RYLAorCQkuYWRkcgkJPSAweGZmZTIwMDBjLAorCQkuY2hjcgkJPSBETV9GSVggfCBTTV9JTkMgfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzhCSVQpLAorCQkubWlkX3JpZAk9IDB4MjksCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9TQ0lGMl9SWCwKKwkJLmFkZHIJCT0gMHhmZmUyMDAxNCwKKwkJLmNoY3IJCT0gRE1fSU5DIHwgU01fRklYIHwgMHg4MDAgfCBUU19JTkRFWDJWQUwoWE1JVF9TWl84QklUKSwKKwkJLm1pZF9yaWQJPSAweDJhLAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfU0lVQV9UWCwKKwkJLmFkZHIJCT0gMHhhNDU0YzA5OCwKKwkJLmNoY3IJCT0gRE1fRklYIHwgU01fSU5DIHwgMHg4MDAgfCBUU19JTkRFWDJWQUwoWE1JVF9TWl8zMkJJVCksCisJCS5taWRfcmlkCT0gMHhiMSwKKwl9LCB7CisJCS5zbGF2ZV9pZAk9IFNIRE1BX1NMQVZFX1NJVUFfUlgsCisJCS5hZGRyCQk9IDB4YTQ1NGMwOTAsCisJCS5jaGNyCQk9IERNX0lOQyB8IFNNX0ZJWCB8IDB4ODAwIHwgVFNfSU5ERVgyVkFMKFhNSVRfU1pfMzJCSVQpLAorCQkubWlkX3JpZAk9IDB4YjIsCisJfSwgeworCQkuc2xhdmVfaWQJPSBTSERNQV9TTEFWRV9TSVVCX1RYLAorCQkuYWRkcgkJPSAweGE0NTRjMDljLAorCQkuY2hjcgkJPSBETV9GSVggfCBTTV9JTkMgfCAweDgwMCB8IFRTX0lOREVYMlZBTChYTUlUX1NaXzMyQklUKSwKKwkJLm1pZF9yaWQJPSAweGI1LAorCX0sIHsKKwkJLnNsYXZlX2lkCT0gU0hETUFfU0xBVkVfU0lVQl9SWCwKKwkJLmFkZHIJCT0gMHhhNDU0YzA5NCwKKwkJLmNoY3IJCT0gRE1fSU5DIHwgU01fRklYIHwgMHg4MDAgfCBUU19JTkRFWDJWQUwoWE1JVF9TWl8zMkJJVCksCisJCS5taWRfcmlkCT0gMHhiNiwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBzaF9kbWFlX2NoYW5uZWwgc2g3NzIyX2RtYWVfY2hhbm5lbHNbXSA9IHsKKwl7CisJCS5vZmZzZXQgPSAwLAorCQkuZG1hcnMgPSAwLAorCQkuZG1hcnNfYml0ID0gMCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDEwLAorCQkuZG1hcnMgPSAwLAorCQkuZG1hcnNfYml0ID0gOCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDIwLAorCQkuZG1hcnMgPSA0LAorCQkuZG1hcnNfYml0ID0gMCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDMwLAorCQkuZG1hcnMgPSA0LAorCQkuZG1hcnNfYml0ID0gOCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDUwLAorCQkuZG1hcnMgPSA4LAorCQkuZG1hcnNfYml0ID0gMCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDYwLAorCQkuZG1hcnMgPSA4LAorCQkuZG1hcnNfYml0ID0gOCwKKwl9Cit9OworCitzdGF0aWMgdW5zaWduZWQgaW50IHRzX3NoaWZ0W10gPSBUU19TSElGVDsKKworc3RhdGljIHN0cnVjdCBzaF9kbWFlX3BkYXRhIGRtYV9wbGF0Zm9ybV9kYXRhID0geworCS5zbGF2ZQkJPSBzaDc3MjJfZG1hZV9zbGF2ZXMsCisJLnNsYXZlX251bQk9IEFSUkFZX1NJWkUoc2g3NzIyX2RtYWVfc2xhdmVzKSwKKwkuY2hhbm5lbAk9IHNoNzcyMl9kbWFlX2NoYW5uZWxzLAorCS5jaGFubmVsX251bQk9IEFSUkFZX1NJWkUoc2g3NzIyX2RtYWVfY2hhbm5lbHMpLAorCS50c19sb3dfc2hpZnQJPSBDSENSX1RTX0xPV19TSElGVCwKKwkudHNfbG93X21hc2sJPSBDSENSX1RTX0xPV19NQVNLLAorCS50c19oaWdoX3NoaWZ0CT0gQ0hDUl9UU19ISUdIX1NISUZULAorCS50c19oaWdoX21hc2sJPSBDSENSX1RTX0hJR0hfTUFTSywKKwkudHNfc2hpZnQJPSB0c19zaGlmdCwKKwkudHNfc2hpZnRfbnVtCT0gQVJSQVlfU0laRSh0c19zaGlmdCksCisJLmRtYW9yX2luaXQJPSBETUFPUl9JTklULAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3MjJfZG1hZV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS8qIENoYW5uZWwgcmVnaXN0ZXJzIGFuZCBETUFPUiAqLworCQkuc3RhcnQJPSAweGZlMDA4MDIwLAorCQkuZW5kCT0gMHhmZTAwODA4ZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS8qIERNQVJTeCAqLworCQkuc3RhcnQJPSAweGZlMDA5MDAwLAorCQkuZW5kCT0gMHhmZTAwOTAwYiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS8qIERNQSBlcnJvciBJUlEgKi8KKwkJLnN0YXJ0CT0gNzgsCisJCS5lbmQJPSA3OCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS8qIElSUSBmb3IgY2hhbm5lbHMgMC0zICovCisJCS5zdGFydAk9IDQ4LAorCQkuZW5kCT0gNTEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkvKiBJUlEgZm9yIGNoYW5uZWxzIDQtNSAqLworCQkuc3RhcnQJPSA3NiwKKwkJLmVuZAk9IDc3LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbWFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1kbWEtZW5naW5lIiwKKwkuaWQJCT0gLTEsCisJLnJlc291cmNlCT0gc2g3NzIyX2RtYWVfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzaDc3MjJfZG1hZV9yZXNvdXJjZXMpLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZkbWFfcGxhdGZvcm1fZGF0YSwKKwl9LAorCS5hcmNoZGF0YSA9IHsKKwkJLmh3YmxrX2lkID0gSFdCTEtfRE1BQywKKwl9LAorfTsKKwogLyogU2VyaWFsICovCiBzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpZjBfcGxhdGZvcm1fZGF0YSA9IHsKIAkubWFwYmFzZSAgICAgICAgPSAweGZmZTAwMDAwLApAQCAtMzg4LDE1ICs1MzYsMzYgQEAKIAl9LAogfTsKIAotc3RhdGljIHN0cnVjdCBzaF9kbWFlX3BkYXRhIGRtYV9wbGF0Zm9ybV9kYXRhID0gewotCS5tb2RlID0gMCwKK3N0YXRpYyBzdHJ1Y3Qgc2l1X3BsYXRmb3JtIHNpdV9wbGF0Zm9ybV9kYXRhID0geworCS5kbWFfZGV2CT0gJmRtYV9kZXZpY2UuZGV2LAorCS5kbWFfc2xhdmVfdHhfYQk9IFNIRE1BX1NMQVZFX1NJVUFfVFgsCisJLmRtYV9zbGF2ZV9yeF9hCT0gU0hETUFfU0xBVkVfU0lVQV9SWCwKKwkuZG1hX3NsYXZlX3R4X2IJPSBTSERNQV9TTEFWRV9TSVVCX1RYLAorCS5kbWFfc2xhdmVfcnhfYgk9IFNIRE1BX1NMQVZFX1NJVUJfUlgsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbWFfZGV2aWNlID0gewotCS5uYW1lCQk9ICJzaC1kbWEtZW5naW5lIiwKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2l1X3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHhhNDU0MDAwMCwKKwkJLmVuZAk9IDB4YTQ1NGMxMGYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSAxMDgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzaXVfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaF9zaXUiLAogCS5pZAkJPSAtMSwKLQkuZGV2CQk9IHsKLQkJLnBsYXRmb3JtX2RhdGEJPSAmZG1hX3BsYXRmb3JtX2RhdGEsCisJLmRldiA9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmc2l1X3BsYXRmb3JtX2RhdGEsCisJfSwKKwkucmVzb3VyY2UJPSBzaXVfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzaXVfcmVzb3VyY2VzKSwKKwkuYXJjaGRhdGEgPSB7CisJCS5od2Jsa19pZCA9IEhXQkxLX1NJVSwKIAl9LAogfTsKIApAQCAtNDE0LDYgKzU4Myw3IEBACiAJJnZwdV9kZXZpY2UsCiAJJnZldV9kZXZpY2UsCiAJJmpwdV9kZXZpY2UsCisJJnNpdV9kZXZpY2UsCiAJJmRtYV9kZXZpY2UsCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3MjQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jCmluZGV4IDMxZTM0NTEuLmU3ZmEyYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzcyNC5jCkBAIC0yMSwyMiArMjEsMTg5IEBACiAjaW5jbHVkZSA8bGludXgvc2hfdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisKICNpbmNsdWRlIDxhc20vc3VzcGVuZC5oPgogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgotI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KKyNpbmNsdWRlIDxhc20vZG1hZW5naW5lLmg+CiAjaW5jbHVkZSA8YXNtL21tem9uZS5oPgorCisjaW5jbHVkZSA8Y3B1L2RtYS1yZWdpc3Rlci5oPgogI2luY2x1ZGUgPGNwdS9zaDc3MjQuaD4KIAogLyogRE1BICovCi1zdGF0aWMgc3RydWN0IHNoX2RtYWVfcGRhdGEgZG1hX3BsYXRmb3JtX2RhdGEgPSB7Ci0JLm1vZGUgPSBTSERNQV9ETUFPUjEsCitzdGF0aWMgc3RydWN0IHNoX2RtYWVfY2hhbm5lbCBzaDc3MjRfZG1hZTBfY2hhbm5lbHNbXSA9IHsKKwl7CisJCS5vZmZzZXQgPSAwLAorCQkuZG1hcnMgPSAwLAorCQkuZG1hcnNfYml0ID0gMCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDEwLAorCQkuZG1hcnMgPSAwLAorCQkuZG1hcnNfYml0ID0gOCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDIwLAorCQkuZG1hcnMgPSA0LAorCQkuZG1hcnNfYml0ID0gMCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDMwLAorCQkuZG1hcnMgPSA0LAorCQkuZG1hcnNfYml0ID0gOCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDUwLAorCQkuZG1hcnMgPSA4LAorCQkuZG1hcnNfYml0ID0gMCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDYwLAorCQkuZG1hcnMgPSA4LAorCQkuZG1hcnNfYml0ID0gOCwKKwl9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbWFfZGV2aWNlID0gewotCS5uYW1lCT0gInNoLWRtYS1lbmdpbmUiLAotCS5pZAkJPSAtMSwKLQkuZGV2CT0gewotCQkucGxhdGZvcm1fZGF0YQk9ICZkbWFfcGxhdGZvcm1fZGF0YSwKK3N0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9jaGFubmVsIHNoNzcyNF9kbWFlMV9jaGFubmVsc1tdID0geworCXsKKwkJLm9mZnNldCA9IDAsCisJCS5kbWFycyA9IDAsCisJCS5kbWFyc19iaXQgPSAwLAorCX0sIHsKKwkJLm9mZnNldCA9IDB4MTAsCisJCS5kbWFycyA9IDAsCisJCS5kbWFyc19iaXQgPSA4LAorCX0sIHsKKwkJLm9mZnNldCA9IDB4MjAsCisJCS5kbWFycyA9IDQsCisJCS5kbWFyc19iaXQgPSAwLAorCX0sIHsKKwkJLm9mZnNldCA9IDB4MzAsCisJCS5kbWFycyA9IDQsCisJCS5kbWFyc19iaXQgPSA4LAorCX0sIHsKKwkJLm9mZnNldCA9IDB4NTAsCisJCS5kbWFycyA9IDgsCisJCS5kbWFyc19iaXQgPSAwLAorCX0sIHsKKwkJLm9mZnNldCA9IDB4NjAsCisJCS5kbWFycyA9IDgsCisJCS5kbWFyc19iaXQgPSA4LAorCX0KK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHNfc2hpZnRbXSA9IFRTX1NISUZUOworCitzdGF0aWMgc3RydWN0IHNoX2RtYWVfcGRhdGEgZG1hMF9wbGF0Zm9ybV9kYXRhID0geworCS5jaGFubmVsCT0gc2g3NzI0X2RtYWUwX2NoYW5uZWxzLAorCS5jaGFubmVsX251bQk9IEFSUkFZX1NJWkUoc2g3NzI0X2RtYWUwX2NoYW5uZWxzKSwKKwkudHNfbG93X3NoaWZ0CT0gQ0hDUl9UU19MT1dfU0hJRlQsCisJLnRzX2xvd19tYXNrCT0gQ0hDUl9UU19MT1dfTUFTSywKKwkudHNfaGlnaF9zaGlmdAk9IENIQ1JfVFNfSElHSF9TSElGVCwKKwkudHNfaGlnaF9tYXNrCT0gQ0hDUl9UU19ISUdIX01BU0ssCisJLnRzX3NoaWZ0CT0gdHNfc2hpZnQsCisJLnRzX3NoaWZ0X251bQk9IEFSUkFZX1NJWkUodHNfc2hpZnQpLAorCS5kbWFvcl9pbml0CT0gRE1BT1JfSU5JVCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSBkbWExX3BsYXRmb3JtX2RhdGEgPSB7CisJLmNoYW5uZWwJPSBzaDc3MjRfZG1hZTFfY2hhbm5lbHMsCisJLmNoYW5uZWxfbnVtCT0gQVJSQVlfU0laRShzaDc3MjRfZG1hZTFfY2hhbm5lbHMpLAorCS50c19sb3dfc2hpZnQJPSBDSENSX1RTX0xPV19TSElGVCwKKwkudHNfbG93X21hc2sJPSBDSENSX1RTX0xPV19NQVNLLAorCS50c19oaWdoX3NoaWZ0CT0gQ0hDUl9UU19ISUdIX1NISUZULAorCS50c19oaWdoX21hc2sJPSBDSENSX1RTX0hJR0hfTUFTSywKKwkudHNfc2hpZnQJPSB0c19zaGlmdCwKKwkudHNfc2hpZnRfbnVtCT0gQVJSQVlfU0laRSh0c19zaGlmdCksCisJLmRtYW9yX2luaXQJPSBETUFPUl9JTklULAorfTsKKworLyogUmVzb3VyY2Ugb3JkZXIgaW1wb3J0YW50ISAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3MjRfZG1hZTBfcmVzb3VyY2VzW10gPSB7CisJeworCQkvKiBDaGFubmVsIHJlZ2lzdGVycyBhbmQgRE1BT1IgKi8KKwkJLnN0YXJ0CT0gMHhmZTAwODAyMCwKKwkJLmVuZAk9IDB4ZmUwMDgwOGYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkvKiBETUFSU3ggKi8KKwkJLnN0YXJ0CT0gMHhmZTAwOTAwMCwKKwkJLmVuZAk9IDB4ZmUwMDkwMGIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkvKiBETUEgZXJyb3IgSVJRICovCisJCS5zdGFydAk9IDc4LAorCQkuZW5kCT0gNzgsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCisJeworCQkvKiBJUlEgZm9yIGNoYW5uZWxzIDAtMyAqLworCQkuc3RhcnQJPSA0OCwKKwkJLmVuZAk9IDUxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLyogSVJRIGZvciBjaGFubmVscyA0LTUgKi8KKwkJLnN0YXJ0CT0gNzYsCisJCS5lbmQJPSA3NywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKKy8qIFJlc291cmNlIG9yZGVyIGltcG9ydGFudCEgKi8KK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3NzI0X2RtYWUxX3Jlc291cmNlc1tdID0geworCXsKKwkJLyogQ2hhbm5lbCByZWdpc3RlcnMgYW5kIERNQU9SICovCisJCS5zdGFydAk9IDB4ZmRjMDgwMjAsCisJCS5lbmQJPSAweGZkYzA4MDhmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLyogRE1BUlN4ICovCisJCS5zdGFydAk9IDB4ZmRjMDkwMDAsCisJCS5lbmQJPSAweGZkYzA5MDBiLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCXsKKwkJLyogRE1BIGVycm9yIElSUSAqLworCQkuc3RhcnQJPSA3NCwKKwkJLmVuZAk9IDc0LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCXsKKwkJLyogSVJRIGZvciBjaGFubmVscyAwLTMgKi8KKwkJLnN0YXJ0CT0gNDAsCisJCS5lbmQJPSA0MywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKKwl7CisJCS8qIElSUSBmb3IgY2hhbm5lbHMgNC01ICovCisJCS5zdGFydAk9IDcyLAorCQkuZW5kCT0gNzMsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbWEwX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtZG1hLWVuZ2luZSIsCisJLmlkCQk9IDAsCisJLnJlc291cmNlCT0gc2g3NzI0X2RtYWUwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2g3NzI0X2RtYWUwX3Jlc291cmNlcyksCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmRtYTBfcGxhdGZvcm1fZGF0YSwKKwl9LAorCS5hcmNoZGF0YSA9IHsKKwkJLmh3YmxrX2lkID0gSFdCTEtfRE1BQzAsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGRtYTFfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1kbWEtZW5naW5lIiwKKwkuaWQJCT0gMSwKKwkucmVzb3VyY2UJPSBzaDc3MjRfZG1hZTFfcmVzb3VyY2VzLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzaDc3MjRfZG1hZTFfcmVzb3VyY2VzKSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZG1hMV9wbGF0Zm9ybV9kYXRhLAorCX0sCisJLmFyY2hkYXRhID0geworCQkuaHdibGtfaWQgPSBIV0JMS19ETUFDMSwKIAl9LAogfTsKIApAQCAtNjYzLDcgKzgzMCw4IEBACiAJJnRtdTNfZGV2aWNlLAogCSZ0bXU0X2RldmljZSwKIAkmdG11NV9kZXZpY2UsCi0JJmRtYV9kZXZpY2UsCisJJmRtYTBfZGV2aWNlLAorCSZkbWExX2RldmljZSwKIAkmcnRjX2RldmljZSwKIAkmaWljMF9kZXZpY2UsCiAJJmlpYzFfZGV2aWNlLApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNGEvc2V0dXAtc2g3NzgwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYwppbmRleCBmOGYyMTYxLi4wMmU3OTJjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODAuYwpAQCAtMTMsNyArMTMsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9zY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgotI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KKworI2luY2x1ZGUgPGFzbS9kbWFlbmdpbmUuaD4KKworI2luY2x1ZGUgPGNwdS9kbWEtcmVnaXN0ZXIuaD4KIAogc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaWYwX3BsYXRmb3JtX2RhdGEgPSB7CiAJLm1hcGJhc2UJPSAweGZmZTAwMDAwLApAQCAtMjQ3LDE1ICsyNTAsMTMxIEBACiAJLnJlc291cmNlCT0gcnRjX3Jlc291cmNlcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSBkbWFfcGxhdGZvcm1fZGF0YSA9IHsKLQkubW9kZSA9IChTSERNQV9NSVhfSVJRIHwgU0hETUFfRE1BT1IxKSwKKy8qIERNQSAqLworc3RhdGljIHN0cnVjdCBzaF9kbWFlX2NoYW5uZWwgc2g3NzgwX2RtYWUwX2NoYW5uZWxzW10gPSB7CisJeworCQkub2Zmc2V0ID0gMCwKKwkJLmRtYXJzID0gMCwKKwkJLmRtYXJzX2JpdCA9IDAsCisJfSwgeworCQkub2Zmc2V0ID0gMHgxMCwKKwkJLmRtYXJzID0gMCwKKwkJLmRtYXJzX2JpdCA9IDgsCisJfSwgeworCQkub2Zmc2V0ID0gMHgyMCwKKwkJLmRtYXJzID0gNCwKKwkJLmRtYXJzX2JpdCA9IDAsCisJfSwgeworCQkub2Zmc2V0ID0gMHgzMCwKKwkJLmRtYXJzID0gNCwKKwkJLmRtYXJzX2JpdCA9IDgsCisJfSwgeworCQkub2Zmc2V0ID0gMHg1MCwKKwkJLmRtYXJzID0gOCwKKwkJLmRtYXJzX2JpdCA9IDAsCisJfSwgeworCQkub2Zmc2V0ID0gMHg2MCwKKwkJLmRtYXJzID0gOCwKKwkJLmRtYXJzX2JpdCA9IDgsCisJfQogfTsKIAotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG1hX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9jaGFubmVsIHNoNzc4MF9kbWFlMV9jaGFubmVsc1tdID0geworCXsKKwkJLm9mZnNldCA9IDAsCisJfSwgeworCQkub2Zmc2V0ID0gMHgxMCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDIwLAorCX0sIHsKKwkJLm9mZnNldCA9IDB4MzAsCisJfSwgeworCQkub2Zmc2V0ID0gMHg1MCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDYwLAorCX0KK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdHNfc2hpZnRbXSA9IFRTX1NISUZUOworCitzdGF0aWMgc3RydWN0IHNoX2RtYWVfcGRhdGEgZG1hMF9wbGF0Zm9ybV9kYXRhID0geworCS5jaGFubmVsCT0gc2g3NzgwX2RtYWUwX2NoYW5uZWxzLAorCS5jaGFubmVsX251bQk9IEFSUkFZX1NJWkUoc2g3NzgwX2RtYWUwX2NoYW5uZWxzKSwKKwkudHNfbG93X3NoaWZ0CT0gQ0hDUl9UU19MT1dfU0hJRlQsCisJLnRzX2xvd19tYXNrCT0gQ0hDUl9UU19MT1dfTUFTSywKKwkudHNfaGlnaF9zaGlmdAk9IENIQ1JfVFNfSElHSF9TSElGVCwKKwkudHNfaGlnaF9tYXNrCT0gQ0hDUl9UU19ISUdIX01BU0ssCisJLnRzX3NoaWZ0CT0gdHNfc2hpZnQsCisJLnRzX3NoaWZ0X251bQk9IEFSUkFZX1NJWkUodHNfc2hpZnQpLAorCS5kbWFvcl9pbml0CT0gRE1BT1JfSU5JVCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSBkbWExX3BsYXRmb3JtX2RhdGEgPSB7CisJLmNoYW5uZWwJPSBzaDc3ODBfZG1hZTFfY2hhbm5lbHMsCisJLmNoYW5uZWxfbnVtCT0gQVJSQVlfU0laRShzaDc3ODBfZG1hZTFfY2hhbm5lbHMpLAorCS50c19sb3dfc2hpZnQJPSBDSENSX1RTX0xPV19TSElGVCwKKwkudHNfbG93X21hc2sJPSBDSENSX1RTX0xPV19NQVNLLAorCS50c19oaWdoX3NoaWZ0CT0gQ0hDUl9UU19ISUdIX1NISUZULAorCS50c19oaWdoX21hc2sJPSBDSENSX1RTX0hJR0hfTUFTSywKKwkudHNfc2hpZnQJPSB0c19zaGlmdCwKKwkudHNfc2hpZnRfbnVtCT0gQVJSQVlfU0laRSh0c19zaGlmdCksCisJLmRtYW9yX2luaXQJPSBETUFPUl9JTklULAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3ODBfZG1hZTBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkvKiBDaGFubmVsIHJlZ2lzdGVycyBhbmQgRE1BT1IgKi8KKwkJLnN0YXJ0CT0gMHhmYzgwODAyMCwKKwkJLmVuZAk9IDB4ZmM4MDgwOGYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkvKiBETUFSU3ggKi8KKwkJLnN0YXJ0CT0gMHhmYzgwOTAwMCwKKwkJLmVuZAk9IDB4ZmM4MDkwMGIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJeworCQkvKiBSZWFsIERNQSBlcnJvciBJUlEgaXMgMzgsIGFuZCBjaGFubmVsIElSUXMgYXJlIDM0LTM3LCA0NC00NSAqLworCQkuc3RhcnQJPSAzNCwKKwkJLmVuZAk9IDM0LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX1NIQVJFQUJMRSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3ODBfZG1hZTFfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkvKiBDaGFubmVsIHJlZ2lzdGVycyBhbmQgRE1BT1IgKi8KKwkJLnN0YXJ0CT0gMHhmYzgxODAyMCwKKwkJLmVuZAk9IDB4ZmM4MTgwOGYsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJLyogRE1BQzEgaGFzIG5vIERNQVJTICovCisJeworCQkvKiBSZWFsIERNQSBlcnJvciBJUlEgaXMgMzgsIGFuZCBjaGFubmVsIElSUXMgYXJlIDQ2LTQ3LCA5Mi05NSAqLworCQkuc3RhcnQJPSA0NiwKKwkJLmVuZAk9IDQ2LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX1NIQVJFQUJMRSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG1hMF9kZXZpY2UgPSB7CiAJLm5hbWUgICAgICAgICAgID0gInNoLWRtYS1lbmdpbmUiLAotCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5pZCAgICAgICAgICAgICA9IDAsCisJLnJlc291cmNlCT0gc2g3NzgwX2RtYWUwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2g3NzgwX2RtYWUwX3Jlc291cmNlcyksCiAJLmRldiAgICAgICAgICAgID0gewotCQkucGxhdGZvcm1fZGF0YSAgPSAmZG1hX3BsYXRmb3JtX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmRtYTBfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG1hMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLWRtYS1lbmdpbmUiLAorCS5pZAkJPSAxLAorCS5yZXNvdXJjZQk9IHNoNzc4MF9kbWFlMV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoNzc4MF9kbWFlMV9yZXNvdXJjZXMpLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZkbWExX3BsYXRmb3JtX2RhdGEsCiAJfSwKIH07CiAKQEAgLTI2OSw3ICszODgsOCBAQAogCSZ0bXU0X2RldmljZSwKIAkmdG11NV9kZXZpY2UsCiAJJnJ0Y19kZXZpY2UsCi0JJmRtYV9kZXZpY2UsCisJJmRtYTBfZGV2aWNlLAorCSZkbWExX2RldmljZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHNoNzc4MF9kZXZpY2VzX3NldHVwKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0YS9zZXR1cC1zaDc3ODUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCmluZGV4IDIzNDQ4ZDguLjFmY2Q4OGIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDRhL3NldHVwLXNoNzc4NS5jCkBAIC0xNCw5ICsxNCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zaF90aW1lci5oPgotI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KKworI2luY2x1ZGUgPGFzbS9kbWFlbmdpbmUuaD4KICNpbmNsdWRlIDxhc20vbW16b25lLmg+CiAKKyNpbmNsdWRlIDxjcHUvZG1hLXJlZ2lzdGVyLmg+CisKIHN0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lmMF9wbGF0Zm9ybV9kYXRhID0gewogCS5tYXBiYXNlCT0gMHhmZmVhMDAwMCwKIAkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCkBAIC0yOTUsMTUgKzI5OCwxMzEgQEAKIAkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUodG11NV9yZXNvdXJjZXMpLAogfTsKIAotc3RhdGljIHN0cnVjdCBzaF9kbWFlX3BkYXRhIGRtYV9wbGF0Zm9ybV9kYXRhID0gewotCS5tb2RlID0gKFNIRE1BX01JWF9JUlEgfCBTSERNQV9ETUFPUjEpLAorLyogRE1BICovCitzdGF0aWMgc3RydWN0IHNoX2RtYWVfY2hhbm5lbCBzaDc3ODVfZG1hZTBfY2hhbm5lbHNbXSA9IHsKKwl7CisJCS5vZmZzZXQgPSAwLAorCQkuZG1hcnMgPSAwLAorCQkuZG1hcnNfYml0ID0gMCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDEwLAorCQkuZG1hcnMgPSAwLAorCQkuZG1hcnNfYml0ID0gOCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDIwLAorCQkuZG1hcnMgPSA0LAorCQkuZG1hcnNfYml0ID0gMCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDMwLAorCQkuZG1hcnMgPSA0LAorCQkuZG1hcnNfYml0ID0gOCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDUwLAorCQkuZG1hcnMgPSA4LAorCQkuZG1hcnNfYml0ID0gMCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDYwLAorCQkuZG1hcnMgPSA4LAorCQkuZG1hcnNfYml0ID0gOCwKKwl9CiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBkbWFfZGV2aWNlID0geworc3RhdGljIHN0cnVjdCBzaF9kbWFlX2NoYW5uZWwgc2g3Nzg1X2RtYWUxX2NoYW5uZWxzW10gPSB7CisJeworCQkub2Zmc2V0ID0gMCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDEwLAorCX0sIHsKKwkJLm9mZnNldCA9IDB4MjAsCisJfSwgeworCQkub2Zmc2V0ID0gMHgzMCwKKwl9LCB7CisJCS5vZmZzZXQgPSAweDUwLAorCX0sIHsKKwkJLm9mZnNldCA9IDB4NjAsCisJfQorfTsKKworc3RhdGljIHVuc2lnbmVkIGludCB0c19zaGlmdFtdID0gVFNfU0hJRlQ7CisKK3N0YXRpYyBzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSBkbWEwX3BsYXRmb3JtX2RhdGEgPSB7CisJLmNoYW5uZWwJPSBzaDc3ODVfZG1hZTBfY2hhbm5lbHMsCisJLmNoYW5uZWxfbnVtCT0gQVJSQVlfU0laRShzaDc3ODVfZG1hZTBfY2hhbm5lbHMpLAorCS50c19sb3dfc2hpZnQJPSBDSENSX1RTX0xPV19TSElGVCwKKwkudHNfbG93X21hc2sJPSBDSENSX1RTX0xPV19NQVNLLAorCS50c19oaWdoX3NoaWZ0CT0gQ0hDUl9UU19ISUdIX1NISUZULAorCS50c19oaWdoX21hc2sJPSBDSENSX1RTX0hJR0hfTUFTSywKKwkudHNfc2hpZnQJPSB0c19zaGlmdCwKKwkudHNfc2hpZnRfbnVtCT0gQVJSQVlfU0laRSh0c19zaGlmdCksCisJLmRtYW9yX2luaXQJPSBETUFPUl9JTklULAorfTsKKworc3RhdGljIHN0cnVjdCBzaF9kbWFlX3BkYXRhIGRtYTFfcGxhdGZvcm1fZGF0YSA9IHsKKwkuY2hhbm5lbAk9IHNoNzc4NV9kbWFlMV9jaGFubmVscywKKwkuY2hhbm5lbF9udW0JPSBBUlJBWV9TSVpFKHNoNzc4NV9kbWFlMV9jaGFubmVscyksCisJLnRzX2xvd19zaGlmdAk9IENIQ1JfVFNfTE9XX1NISUZULAorCS50c19sb3dfbWFzawk9IENIQ1JfVFNfTE9XX01BU0ssCisJLnRzX2hpZ2hfc2hpZnQJPSBDSENSX1RTX0hJR0hfU0hJRlQsCisJLnRzX2hpZ2hfbWFzawk9IENIQ1JfVFNfSElHSF9NQVNLLAorCS50c19zaGlmdAk9IHRzX3NoaWZ0LAorCS50c19zaGlmdF9udW0JPSBBUlJBWV9TSVpFKHRzX3NoaWZ0KSwKKwkuZG1hb3JfaW5pdAk9IERNQU9SX0lOSVQsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4NV9kbWFlMF9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS8qIENoYW5uZWwgcmVnaXN0ZXJzIGFuZCBETUFPUiAqLworCQkuc3RhcnQJPSAweGZjODA4MDIwLAorCQkuZW5kCT0gMHhmYzgwODA4ZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS8qIERNQVJTeCAqLworCQkuc3RhcnQJPSAweGZjODA5MDAwLAorCQkuZW5kCT0gMHhmYzgwOTAwYiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwl7CisJCS8qIFJlYWwgRE1BIGVycm9yIElSUSBpcyAzOSwgYW5kIGNoYW5uZWwgSVJRcyBhcmUgMzMtMzggKi8KKwkJLnN0YXJ0CT0gMzMsCisJCS5lbmQJPSAzMywKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEgfCBJT1JFU09VUkNFX0lSUV9TSEFSRUFCTEUsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3Nzg1X2RtYWUxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLyogQ2hhbm5lbCByZWdpc3RlcnMgYW5kIERNQU9SICovCisJCS5zdGFydAk9IDB4ZmNjMDgwMjAsCisJCS5lbmQJPSAweGZjYzA4MDhmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCS8qIERNQUMxIGhhcyBubyBETUFSUyAqLworCXsKKwkJLyogUmVhbCBETUEgZXJyb3IgSVJRIGlzIDU4LCBhbmQgY2hhbm5lbCBJUlFzIGFyZSA1Mi01NyAqLworCQkuc3RhcnQJPSA1MiwKKwkJLmVuZAk9IDUyLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSB8IElPUkVTT1VSQ0VfSVJRX1NIQVJFQUJMRSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG1hMF9kZXZpY2UgPSB7CiAJLm5hbWUgICAgICAgICAgID0gInNoLWRtYS1lbmdpbmUiLAotCS5pZCAgICAgICAgICAgICA9IC0xLAorCS5pZCAgICAgICAgICAgICA9IDAsCisJLnJlc291cmNlCT0gc2g3Nzg1X2RtYWUwX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUoc2g3Nzg1X2RtYWUwX3Jlc291cmNlcyksCiAJLmRldiAgICAgICAgICAgID0gewotCQkucGxhdGZvcm1fZGF0YSAgPSAmZG1hX3BsYXRmb3JtX2RhdGEsCisJCS5wbGF0Zm9ybV9kYXRhCT0gJmRtYTBfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZG1hMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLWRtYS1lbmdpbmUiLAorCS5pZAkJPSAxLAorCS5yZXNvdXJjZQk9IHNoNzc4NV9kbWFlMV9yZXNvdXJjZXMsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHNoNzc4NV9kbWFlMV9yZXNvdXJjZXMpLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZkbWExX3BsYXRmb3JtX2RhdGEsCiAJfSwKIH07CiAKQEAgLTMyMCw3ICs0MzksOCBAQAogCSZ0bXUzX2RldmljZSwKIAkmdG11NF9kZXZpY2UsCiAJJnRtdTVfZGV2aWNlLAotCSZkbWFfZGV2aWNlLAorCSZkbWEwX2RldmljZSwKKwkmZG1hMV9kZXZpY2UsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzaDc3ODVfZGV2aWNlc19zZXR1cCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaHdfYnJlYWtwb2ludC5jIGIvYXJjaC9zaC9rZXJuZWwvaHdfYnJlYWtwb2ludC5jCmluZGV4IGUyZjE3NTMuLjY3NWVlYTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2h3X2JyZWFrcG9pbnQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9od19icmVha3BvaW50LmMKQEAgLTE0MywyNiArMTQzLDYgQEAKIAlyZXR1cm4gKHZhID49IFRBU0tfU0laRSkgJiYgKCh2YSArIGxlbiAtIDEpID49IFRBU0tfU0laRSk7CiB9CiAKLS8qCi0gKiBTdG9yZSBhIGJyZWFrcG9pbnQncyBlbmNvZGVkIGFkZHJlc3MsIGxlbmd0aCwgYW5kIHR5cGUuCi0gKi8KLXN0YXRpYyBpbnQgYXJjaF9zdG9yZV9pbmZvKHN0cnVjdCBwZXJmX2V2ZW50ICpicCkKLXsKLQlzdHJ1Y3QgYXJjaF9od19icmVha3BvaW50ICppbmZvID0gY291bnRlcl9hcmNoX2JwKGJwKTsKLQotCS8qCi0JICogVXNlci1zcGFjZSByZXF1ZXN0cyB3aWxsIGFsd2F5cyBoYXZlIHRoZSBhZGRyZXNzIGZpZWxkIHBvcHVsYXRlZAotCSAqIEZvciBrZXJuZWwtYWRkcmVzc2VzLCBlaXRoZXIgdGhlIGFkZHJlc3Mgb3Igc3ltYm9sIG5hbWUgY2FuIGJlCi0JICogc3BlY2lmaWVkLgotCSAqLwotCWlmIChpbmZvLT5uYW1lKQotCQlpbmZvLT5hZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpa2FsbHN5bXNfbG9va3VwX25hbWUoaW5mby0+bmFtZSk7Ci0JaWYgKGluZm8tPmFkZHJlc3MpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KIGludCBhcmNoX2JwX2dlbmVyaWNfZmllbGRzKGludCBzaF9sZW4sIGludCBzaF90eXBlLAogCQkJICAgaW50ICpnZW5fbGVuLCBpbnQgKmdlbl90eXBlKQogewpAQCAtMjc2LDEwICsyNTYsMTIgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlyZXQgPSBhcmNoX3N0b3JlX2luZm8oYnApOwotCi0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7CisJLyoKKwkgKiBGb3Iga2VybmVsLWFkZHJlc3NlcywgZWl0aGVyIHRoZSBhZGRyZXNzIG9yIHN5bWJvbCBuYW1lIGNhbiBiZQorCSAqIHNwZWNpZmllZC4KKwkgKi8KKwlpZiAoaW5mby0+bmFtZSkKKwkJaW5mby0+YWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKWthbGxzeW1zX2xvb2t1cF9uYW1lKGluZm8tPm5hbWUpOwogCiAJLyoKIAkgKiBDaGVjayB0aGF0IHRoZSBsb3ctb3JkZXIgYml0cyBvZiB0aGUgYWRkcmVzcyBhcmUgYXBwcm9wcmlhdGUKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCmluZGV4IDM0NTllNzAuLjg4NzBkNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwpAQCAtNDQzLDcgKzQ0Myw3IEBACiAKIAlub2Rlc19jbGVhcihub2RlX29ubGluZV9tYXApOwogCi0JLyogU2V0dXAgYm9vdG1lbSB3aXRoIGF2YWlsYWJsZSBSQU0gKi8KKwlwbWJfaW5pdCgpOwogCWxtYl9pbml0KCk7CiAJc2V0dXBfbWVtb3J5KCk7CiAJc3BhcnNlX2luaXQoKTsKQEAgLTQ1Miw3ICs0NTIsNiBAQAogCWNvbnN3aXRjaHAgPSAmZHVtbXlfY29uOwogI2VuZGlmCiAJcGFnaW5nX2luaXQoKTsKLQlwbWJfaW5pdCgpOwogCiAJaW9yZW1hcF9maXhlZF9pbml0KCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3N5c19zaC5jIGIvYXJjaC9zaC9rZXJuZWwvc3lzX3NoLmMKaW5kZXggNzEzOTljZC4uODFmNTgzNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc3lzX3NoLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc3lzX3NoLmMKQEAgLTUzLDExMCArNTMsNiBAQAogCXJldHVybiBzeXNfbW1hcF9wZ29mZihhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBmZCwgcGdvZmYpOwogfQogCi0vKgotICogc3lzX2lwYygpIGlzIHRoZSBkZS1tdWx0aXBsZXhlciBmb3IgdGhlIFN5c1YgSVBDIGNhbGxzLi4KLSAqCi0gKiBUaGlzIGlzIHJlYWxseSBob3JyaWJseSB1Z2x5LgotICovCi1hc21saW5rYWdlIGludCBzeXNfaXBjKHVpbnQgY2FsbCwgaW50IGZpcnN0LCBpbnQgc2Vjb25kLAotCQkgICAgICAgaW50IHRoaXJkLCB2b2lkIF9fdXNlciAqcHRyLCBsb25nIGZpZnRoKQotewotCWludCB2ZXJzaW9uLCByZXQ7Ci0KLQl2ZXJzaW9uID0gY2FsbCA+PiAxNjsgLyogaGFjayBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwotCWNhbGwgJj0gMHhmZmZmOwotCi0JaWYgKGNhbGwgPD0gU0VNVElNRURPUCkKLQkJc3dpdGNoIChjYWxsKSB7Ci0JCWNhc2UgU0VNT1A6Ci0JCQlyZXR1cm4gc3lzX3NlbXRpbWVkb3AoZmlyc3QsCi0JCQkJCSAgICAgIChzdHJ1Y3Qgc2VtYnVmIF9fdXNlciAqKXB0ciwKLQkJCQkJICAgICAgc2Vjb25kLCBOVUxMKTsKLQkJY2FzZSBTRU1USU1FRE9QOgotCQkJcmV0dXJuIHN5c19zZW10aW1lZG9wKGZpcnN0LAotCQkJCShzdHJ1Y3Qgc2VtYnVmIF9fdXNlciAqKXB0ciwgc2Vjb25kLAotCQkJICAgICAgICAoY29uc3Qgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqKWZpZnRoKTsKLQkJY2FzZSBTRU1HRVQ6Ci0JCQlyZXR1cm4gc3lzX3NlbWdldCAoZmlyc3QsIHNlY29uZCwgdGhpcmQpOwotCQljYXNlIFNFTUNUTDogewotCQkJdW5pb24gc2VtdW4gZm91cnRoOwotCQkJaWYgKCFwdHIpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlpZiAoZ2V0X3VzZXIoZm91cnRoLl9fcGFkLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKikgcHRyKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiBzeXNfc2VtY3RsIChmaXJzdCwgc2Vjb25kLCB0aGlyZCwgZm91cnRoKTsKLQkJCX0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQlpZiAoY2FsbCA8PSBNU0dDVEwpCi0JCXN3aXRjaCAoY2FsbCkgewotCQljYXNlIE1TR1NORDoKLQkJCXJldHVybiBzeXNfbXNnc25kIChmaXJzdCwgKHN0cnVjdCBtc2didWYgX191c2VyICopIHB0ciwKLQkJCQkJICBzZWNvbmQsIHRoaXJkKTsKLQkJY2FzZSBNU0dSQ1Y6Ci0JCQlzd2l0Y2ggKHZlcnNpb24pIHsKLQkJCWNhc2UgMDoKLQkJCXsKLQkJCQlzdHJ1Y3QgaXBjX2tsdWRnZSB0bXA7Ci0KLQkJCQlpZiAoIXB0cikKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJCQlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwKLQkJCQkJKHN0cnVjdCBpcGNfa2x1ZGdlIF9fdXNlciAqKSBwdHIsCi0JCQkJCQkgICBzaXplb2YgKHRtcCkpKQotCQkJCQlyZXR1cm4gLUVGQVVMVDsKLQotCQkJCXJldHVybiBzeXNfbXNncmN2IChmaXJzdCwgdG1wLm1zZ3AsIHNlY29uZCwKLQkJCQkJCSAgIHRtcC5tc2d0eXAsIHRoaXJkKTsKLQkJCX0KLQkJCWRlZmF1bHQ6Ci0JCQkJcmV0dXJuIHN5c19tc2dyY3YgKGZpcnN0LAotCQkJCQkJICAgKHN0cnVjdCBtc2didWYgX191c2VyICopIHB0ciwKLQkJCQkJCSAgIHNlY29uZCwgZmlmdGgsIHRoaXJkKTsKLQkJCX0KLQkJY2FzZSBNU0dHRVQ6Ci0JCQlyZXR1cm4gc3lzX21zZ2dldCAoKGtleV90KSBmaXJzdCwgc2Vjb25kKTsKLQkJY2FzZSBNU0dDVEw6Ci0JCQlyZXR1cm4gc3lzX21zZ2N0bCAoZmlyc3QsIHNlY29uZCwKLQkJCQkJICAgKHN0cnVjdCBtc3FpZF9kcyBfX3VzZXIgKikgcHRyKTsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JaWYgKGNhbGwgPD0gU0hNQ1RMKQotCQlzd2l0Y2ggKGNhbGwpIHsKLQkJY2FzZSBTSE1BVDoKLQkJCXN3aXRjaCAodmVyc2lvbikgewotCQkJZGVmYXVsdDogewotCQkJCXVsb25nIHJhZGRyOwotCQkJCXJldCA9IGRvX3NobWF0IChmaXJzdCwgKGNoYXIgX191c2VyICopIHB0ciwKLQkJCQkJCSBzZWNvbmQsICZyYWRkcik7Ci0JCQkJaWYgKHJldCkKLQkJCQkJcmV0dXJuIHJldDsKLQkJCQlyZXR1cm4gcHV0X3VzZXIgKHJhZGRyLCAodWxvbmcgX191c2VyICopIHRoaXJkKTsKLQkJCX0KLQkJCWNhc2UgMToJLyogaUJDUzIgZW11bGF0b3IgZW50cnkgcG9pbnQgKi8KLQkJCQlpZiAoIXNlZ21lbnRfZXEoZ2V0X2ZzKCksIGdldF9kcygpKSkKLQkJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkJcmV0dXJuIGRvX3NobWF0IChmaXJzdCwgKGNoYXIgX191c2VyICopIHB0ciwKLQkJCQkJCSAgc2Vjb25kLCAodWxvbmcgKikgdGhpcmQpOwotCQkJfQotCQljYXNlIFNITURUOgotCQkJcmV0dXJuIHN5c19zaG1kdCAoKGNoYXIgX191c2VyICopcHRyKTsKLQkJY2FzZSBTSE1HRVQ6Ci0JCQlyZXR1cm4gc3lzX3NobWdldCAoZmlyc3QsIHNlY29uZCwgdGhpcmQpOwotCQljYXNlIFNITUNUTDoKLQkJCXJldHVybiBzeXNfc2htY3RsIChmaXJzdCwgc2Vjb25kLAotCQkJCQkgICAoc3RydWN0IHNobWlkX2RzIF9fdXNlciAqKSBwdHIpOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCXJldHVybiAtRUlOVkFMOwotfQotCiAvKiBzeXNfY2FjaGVmbHVzaCAtLSBmbHVzaCAocGFydCBvZikgdGhlIHByb2Nlc3NvciBjYWNoZS4gICovCiBhc21saW5rYWdlIGludCBzeXNfY2FjaGVmbHVzaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCBpbnQgb3ApCiB7CkBAIC0xOTcsMTQgKzkzLDMgQEAKIAl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCXJldHVybiAwOwogfQotCi1hc21saW5rYWdlIGludCBzeXNfdW5hbWUoc3RydWN0IG9sZF91dHNuYW1lIF9fdXNlciAqbmFtZSkKLXsKLQlpbnQgZXJyOwotCWlmICghbmFtZSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JZG93bl9yZWFkKCZ1dHNfc2VtKTsKLQllcnIgPSBjb3B5X3RvX3VzZXIobmFtZSwgdXRzbmFtZSgpLCBzaXplb2YoKm5hbWUpKTsKLQl1cF9yZWFkKCZ1dHNfc2VtKTsKLQlyZXR1cm4gZXJyPy1FRkFVTFQ6MDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RpbWUuYyBiL2FyY2gvc2gva2VybmVsL3RpbWUuYwppbmRleCA5NTNmYTE2Li44YTAwNzJkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdGltZS5jCkBAIC0zOSwxMiArMzksMTIgQEAKIHZvaWQgKCpydGNfc2hfZ2V0X3RpbWUpKHN0cnVjdCB0aW1lc3BlYyAqKSA9IG51bGxfcnRjX2dldF90aW1lOwogaW50ICgqcnRjX3NoX3NldF90aW1lKShjb25zdCB0aW1lX3QpID0gbnVsbF9ydGNfc2V0X3RpbWU7CiAKLSNpZmRlZiBDT05GSUdfR0VORVJJQ19DTU9TX1VQREFURQogdm9pZCByZWFkX3BlcnNpc3RlbnRfY2xvY2soc3RydWN0IHRpbWVzcGVjICp0cykKIHsKIAlydGNfc2hfZ2V0X3RpbWUodHMpOwogfQogCisjaWZkZWYgQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEUKIGludCB1cGRhdGVfcGVyc2lzdGVudF9jbG9jayhzdHJ1Y3QgdGltZXNwZWMgbm93KQogewogCXJldHVybiBydGNfc2hfc2V0X3RpbWUobm93LnR2X3NlYyk7CkBAIC0xMTMsOSArMTEzLDUgQEAKIAlod2Jsa19pbml0KCk7CiAJY2xrX2luaXQoKTsKIAotCXJ0Y19zaF9nZXRfdGltZSgmeHRpbWUpOwotCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywKLQkJCQkteHRpbWUudHZfc2VjLCAteHRpbWUudHZfbnNlYyk7Ci0KIAlsYXRlX3RpbWVfaW5pdCA9IHNoX2xhdGVfdGltZV9pbml0OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9saWIvbGliZ2NjLmggYi9hcmNoL3NoL2xpYi9saWJnY2MuaAppbmRleCAzZjE5ZDFjLi4wNTkwOWQ1OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9saWIvbGliZ2NjLmgKKysrIGIvYXJjaC9zaC9saWIvbGliZ2NjLmgKQEAgLTE3LDggKzE3LDcgQEAKICNlcnJvciBJIGZlZWwgc2ljay4KICNlbmRpZgogCi10eXBlZGVmIHVuaW9uCi17Cit0eXBlZGVmIHVuaW9uIHsKIAlzdHJ1Y3QgRFdzdHJ1Y3QgczsKIAlsb25nIGxvbmcgbGw7CiB9IERXdW5pb247CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2lvcmVtYXAuYyBiL2FyY2gvc2gvbW0vaW9yZW1hcC5jCmluZGV4IGM2OGQyZDcuLjFhYjIzODUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gvc2gvbW0vaW9yZW1hcC5jCkBAIC0zNCwxMSArMzQsMTIgQEAKICAqIGNhbGxlciBzaG91bGRuJ3QgbmVlZCB0byBrbm93IHRoYXQgc21hbGwgZGV0YWlsLgogICovCiB2b2lkIF9faW9tZW0gKiBfX2luaXRfcmVmb2sKLV9faW9yZW1hcF9jYWxsZXIodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKK19faW9yZW1hcF9jYWxsZXIocGh5c19hZGRyX3QgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCSBwZ3Byb3RfdCBwZ3Byb3QsIHZvaWQgKmNhbGxlcikKIHsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBsYXN0X2FkZHIsIGFkZHIsIG9yaWdfYWRkcjsKKwl2b2lkIF9faW9tZW0gKm1hcHBlZDsKIAogCS8qIERvbid0IGFsbG93IHdyYXBhcm91bmQgb3IgemVybyBzaXplICovCiAJbGFzdF9hZGRyID0gcGh5c19hZGRyICsgc2l6ZSAtIDE7CkBAIC00Niw2ICs0NywyMCBAQAogCQlyZXR1cm4gTlVMTDsKIAogCS8qCisJICogSWYgd2UgY2FuJ3QgeWV0IHVzZSB0aGUgcmVndWxhciBhcHByb2FjaCwgZ28gdGhlIGZpeG1hcCByb3V0ZS4KKwkgKi8KKwlpZiAoIW1lbV9pbml0X2RvbmUpCisJCXJldHVybiBpb3JlbWFwX2ZpeGVkKHBoeXNfYWRkciwgc2l6ZSwgcGdwcm90KTsKKworCS8qCisJICogRmlyc3QgdHJ5IHRvIHJlbWFwIHRocm91Z2ggdGhlIFBNQi4KKwkgKiBQTUIgZW50cmllcyBhcmUgYWxsIHByZS1mYXVsdGVkLgorCSAqLworCW1hcHBlZCA9IHBtYl9yZW1hcF9jYWxsZXIocGh5c19hZGRyLCBzaXplLCBwZ3Byb3QsIGNhbGxlcik7CisJaWYgKG1hcHBlZCAmJiAhSVNfRVJSKG1hcHBlZCkpCisJCXJldHVybiBtYXBwZWQ7CisKKwkvKgogCSAqIE1hcHBpbmdzIGhhdmUgdG8gYmUgcGFnZS1hbGlnbmVkCiAJICovCiAJb2Zmc2V0ID0gcGh5c19hZGRyICYgflBBR0VfTUFTSzsKQEAgLTUzLDEyICs2OCw2IEBACiAJc2l6ZSA9IFBBR0VfQUxJR04obGFzdF9hZGRyKzEpIC0gcGh5c19hZGRyOwogCiAJLyoKLQkgKiBJZiB3ZSBjYW4ndCB5ZXQgdXNlIHRoZSByZWd1bGFyIGFwcHJvYWNoLCBnbyB0aGUgZml4bWFwIHJvdXRlLgotCSAqLwotCWlmICghbWVtX2luaXRfZG9uZSkKLQkJcmV0dXJuIGlvcmVtYXBfZml4ZWQocGh5c19hZGRyLCBvZmZzZXQsIHNpemUsIHBncHJvdCk7Ci0KLQkvKgogCSAqIE9rLCBnbyBmb3IgaXQuLgogCSAqLwogCWFyZWEgPSBnZXRfdm1fYXJlYV9jYWxsZXIoc2l6ZSwgVk1fSU9SRU1BUCwgY2FsbGVyKTsKQEAgLTY3LDMzICs3NiwxMCBAQAogCWFyZWEtPnBoeXNfYWRkciA9IHBoeXNfYWRkcjsKIAlvcmlnX2FkZHIgPSBhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0+YWRkcjsKIAotI2lmZGVmIENPTkZJR19QTUIKLQkvKgotCSAqIEZpcnN0IHRyeSB0byByZW1hcCB0aHJvdWdoIHRoZSBQTUIgb25jZSBhIHZhbGlkIFZNQSBoYXMgYmVlbgotCSAqIGVzdGFibGlzaGVkLiBTbWFsbGVyIGFsbG9jYXRpb25zIChvciB0aGUgcmVzdCBvZiB0aGUgc2l6ZQotCSAqIHJlbWFpbmluZyBhZnRlciBhIFBNQiBtYXBwaW5nIGR1ZSB0byB0aGUgc2l6ZSBub3QgYmVpbmcKLQkgKiBwZXJmZWN0bHkgYWxpZ25lZCBvbiBhIFBNQiBzaXplIGJvdW5kYXJ5KSBhcmUgdGhlbiBtYXBwZWQKLQkgKiB0aHJvdWdoIHRoZSBVVExCIHVzaW5nIGNvbnZlbnRpb25hbCBwYWdlIHRhYmxlcy4KLQkgKgotCSAqIFBNQiBlbnRyaWVzIGFyZSBhbGwgcHJlLWZhdWx0ZWQuCi0JICovCi0JaWYgKHVubGlrZWx5KHBoeXNfYWRkciA+PSBQMVNFRykpIHsKLQkJdW5zaWduZWQgbG9uZyBtYXBwZWQ7Ci0KLQkJbWFwcGVkID0gcG1iX3JlbWFwKGFkZHIsIHBoeXNfYWRkciwgc2l6ZSwgcGdwcm90KTsKLQkJaWYgKGxpa2VseShtYXBwZWQpKSB7Ci0JCQlhZGRyCQkrPSBtYXBwZWQ7Ci0JCQlwaHlzX2FkZHIJKz0gbWFwcGVkOwotCQkJc2l6ZQkJLT0gbWFwcGVkOwotCQl9CisJaWYgKGlvcmVtYXBfcGFnZV9yYW5nZShhZGRyLCBhZGRyICsgc2l6ZSwgcGh5c19hZGRyLCBwZ3Byb3QpKSB7CisJCXZ1bm1hcCgodm9pZCAqKW9yaWdfYWRkcik7CisJCXJldHVybiBOVUxMOwogCX0KLSNlbmRpZgotCi0JaWYgKGxpa2VseShzaXplKSkKLQkJaWYgKGlvcmVtYXBfcGFnZV9yYW5nZShhZGRyLCBhZGRyICsgc2l6ZSwgcGh5c19hZGRyLCBwZ3Byb3QpKSB7Ci0JCQl2dW5tYXAoKHZvaWQgKilvcmlnX2FkZHIpOwotCQkJcmV0dXJuIE5VTEw7Ci0JCX0KIAogCXJldHVybiAodm9pZCBfX2lvbWVtICopKG9mZnNldCArIChjaGFyICopb3JpZ19hZGRyKTsKIH0KQEAgLTEzMywyMyArMTE5LDExIEBACiAJaWYgKGlvdW5tYXBfZml4ZWQoYWRkcikgPT0gMCkKIAkJcmV0dXJuOwogCi0jaWZkZWYgQ09ORklHX1BNQgogCS8qCi0JICogUHVyZ2UgYW55IFBNQiBlbnRyaWVzIHRoYXQgbWF5IGhhdmUgYmVlbiBlc3RhYmxpc2hlZCBmb3IgdGhpcwotCSAqIG1hcHBpbmcsIHRoZW4gcHJvY2VlZCB3aXRoIGNvbnZlbnRpb25hbCBWTUEgdGVhcmRvd24uCi0JICoKLQkgKiBYWFg6IE5vdGUgdGhhdCBkdWUgdG8gdGhlIHdheSB0aGF0IHJlbW92ZV92bV9hcmVhKCkgZG9lcwotCSAqIG1hdGNoaW5nIG9mIHRoZSByZXN1bHRhbnQgVk1BLCB3ZSBhcmVuJ3QgYWJsZSB0byBmYXN0LWZvcndhcmQKLQkgKiB0aGUgYWRkcmVzcyBwYXN0IHRoZSBQTUIgc3BhY2UgdW50aWwgdGhlIGVuZCBvZiB0aGUgVk1BIHdoZXJlCi0JICogdGhlIHBhZ2UgdGFibGVzIHJlc2lkZS4gQXMgc3VjaCwgdW5tYXBfdm1fYXJlYSgpIHdpbGwgYmUKLQkgKiBmb3JjZWQgdG8gbGluZWFybHkgc2NhbiBvdmVyIHRoZSBhcmVhIHVudGlsIGl0IGZpbmRzIHRoZSBwYWdlCi0JICogdGFibGVzIHdoZXJlIFBURXMgdGhhdCBuZWVkIHRvIGJlIHVubWFwcGVkIGFjdHVhbGx5IHJlc2lkZSwKLQkgKiB3aGljaCBpcyBmYXIgZnJvbSBvcHRpbWFsLiBQZXJoYXBzIHdlIG5lZWQgdG8gdXNlIGEgc2VwYXJhdGUKLQkgKiBWTUEgZm9yIHRoZSBQTUIgbWFwcGluZ3M/Ci0JICoJCQkJCS0tIFBGTS4KKwkgKiBJZiB0aGUgUE1CIGhhbmRsZWQgaXQsIHRoZXJlJ3Mgbm90aGluZyBlbHNlIHRvIGRvLgogCSAqLwotCXBtYl91bm1hcCh2YWRkcik7Ci0jZW5kaWYKKwlpZiAocG1iX3VubWFwKGFkZHIpID09IDApCisJCXJldHVybjsKIAogCXAgPSByZW1vdmVfdm1fYXJlYSgodm9pZCAqKSh2YWRkciAmIFBBR0VfTUFTSykpOwogCWlmICghcCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9pb3JlbWFwX2ZpeGVkLmMgYi9hcmNoL3NoL21tL2lvcmVtYXBfZml4ZWQuYwppbmRleCAwYjc4YjFlLi43ZjY4MmU1IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2lvcmVtYXBfZml4ZWQuYworKysgYi9hcmNoL3NoL21tL2lvcmVtYXBfZml4ZWQuYwpAQCAtNDUsMTQgKzQ1LDIxIEBACiB9CiAKIHZvaWQgX19pbml0IF9faW9tZW0gKgotaW9yZW1hcF9maXhlZChyZXNvdXJjZV9zaXplX3QgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCitpb3JlbWFwX2ZpeGVkKHBoeXNfYWRkcl90IHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQogewogCWVudW0gZml4ZWRfYWRkcmVzc2VzIGlkeDAsIGlkeDsKIAlzdHJ1Y3QgaW9yZW1hcF9tYXAgKm1hcDsKIAl1bnNpZ25lZCBpbnQgbnJwYWdlczsKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKIAlpbnQgaSwgc2xvdDsKIAorCS8qCisJICogTWFwcGluZ3MgaGF2ZSB0byBiZSBwYWdlLWFsaWduZWQKKwkgKi8KKwlvZmZzZXQgPSBwaHlzX2FkZHIgJiB+UEFHRV9NQVNLOworCXBoeXNfYWRkciAmPSBQQUdFX01BU0s7CisJc2l6ZSA9IFBBR0VfQUxJR04ocGh5c19hZGRyICsgc2l6ZSkgLSBwaHlzX2FkZHI7CisKIAlzbG90ID0gLTE7CiAJZm9yIChpID0gMDsgaSA8IEZJWF9OX0lPUkVNQVBTOyBpKyspIHsKIAkJbWFwID0gJmlvcmVtYXBfbWFwc1tpXTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vbnVtYS5jIGIvYXJjaC9zaC9tbS9udW1hLmMKaW5kZXggNDIyZTkyNy4uOTYxYjM0MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9udW1hLmMKKysrIGIvYXJjaC9zaC9tbS9udW1hLmMKQEAgLTc0LDYgKzc0LDkgQEAKIAlzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOwogCWVuZF9wZm4gPSBlbmQgPj4gUEFHRV9TSElGVDsKIAorCXBtYl9ib2x0X21hcHBpbmcoKHVuc2lnbmVkIGxvbmcpX192YShzdGFydCksIHN0YXJ0LCBlbmQgLSBzdGFydCwKKwkJCSBQQUdFX0tFUk5FTCk7CisKIAlsbWJfYWRkKHN0YXJ0LCBlbmQgLSBzdGFydCk7CiAKIAlfX2FkZF9hY3RpdmVfcmFuZ2UobmlkLCBzdGFydF9wZm4sIGVuZF9wZm4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9wbWIuYyBiL2FyY2gvc2gvbW0vcG1iLmMKaW5kZXggMTk4YmNmZi4uYTQ2NjJlMiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9wbWIuYworKysgYi9hcmNoL3NoL21tL3BtYi5jCkBAIC0yMyw3ICsyMyw4IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3J3bG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9zaXplcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtNTIsMTIgKzUzLDI0IEBACiAJc3RydWN0IHBtYl9lbnRyeSAqbGluazsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlpbnQgZmxhZzsKK30gcG1iX3NpemVzW10gPSB7CisJeyAuc2l6ZQk9IFNaXzUxMk0sIC5mbGFnID0gUE1CX1NaXzUxMk0sIH0sCisJeyAuc2l6ZSA9IFNaXzEyOE0sIC5mbGFnID0gUE1CX1NaXzEyOE0sIH0sCisJeyAuc2l6ZSA9IFNaXzY0TSwgIC5mbGFnID0gUE1CX1NaXzY0TSwgIH0sCisJeyAuc2l6ZSA9IFNaXzE2TSwgIC5mbGFnID0gUE1CX1NaXzE2TSwgIH0sCit9OworCiBzdGF0aWMgdm9pZCBwbWJfdW5tYXBfZW50cnkoc3RydWN0IHBtYl9lbnRyeSAqLCBpbnQgZGVwdGgpOwogCiBzdGF0aWMgREVGSU5FX1JXTE9DSyhwbWJfcndsb2NrKTsKIHN0YXRpYyBzdHJ1Y3QgcG1iX2VudHJ5IHBtYl9lbnRyeV9saXN0W05SX1BNQl9FTlRSSUVTXTsKIHN0YXRpYyBERUNMQVJFX0JJVE1BUChwbWJfbWFwLCBOUl9QTUJfRU5UUklFUyk7CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcG1iX2lvbWFwcGluZ19lbmFibGVkOworCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmcgbWtfcG1iX2VudHJ5KHVuc2lnbmVkIGludCBlbnRyeSkKIHsKIAlyZXR1cm4gKGVudHJ5ICYgUE1CX0VfTUFTSykgPDwgUE1CX0VfU0hJRlQ7CkBAIC03Myw2ICs4NiwxNDIgQEAKIAlyZXR1cm4gbWtfcG1iX2VudHJ5KGVudHJ5KSB8IFBNQl9EQVRBOwogfQogCitzdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludCBwbWJfcHBuX2luX3JhbmdlKHVuc2lnbmVkIGxvbmcgcHBuKQoreworCXJldHVybiBwcG4gPj0gX19wYShtZW1vcnlfc3RhcnQpICYmIHBwbiA8IF9fcGEobWVtb3J5X2VuZCk7Cit9CisKKy8qCisgKiBFbnN1cmUgdGhhdCB0aGUgUE1CIGVudHJpZXMgbWF0Y2ggb3VyIGNhY2hlIGNvbmZpZ3VyYXRpb24uCisgKgorICogV2hlbiB3ZSBhcmUgaW4gMzItYml0IGFkZHJlc3MgZXh0ZW5kZWQgbW9kZSwgQ0NSLkNCIGJlY29tZXMKKyAqIGludmFsaWQsIHNvIGNhcmUgbXVzdCBiZSB0YWtlbiB0byBtYW51YWxseSBhZGp1c3QgY2FjaGVhYmxlCisgKiB0cmFuc2xhdGlvbnMuCisgKi8KK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBwbWJfY2FjaGVfZmxhZ3Modm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworI2lmIGRlZmluZWQoQ09ORklHX0NBQ0hFX09GRikKKwlmbGFncyB8PSBQTUJfV1QgfCBQTUJfVUI7CisjZWxpZiBkZWZpbmVkKENPTkZJR19DQUNIRV9XUklURVRIUk9VR0gpCisJZmxhZ3MgfD0gUE1CX0MgfCBQTUJfV1QgfCBQTUJfVUI7CisjZWxpZiBkZWZpbmVkKENPTkZJR19DQUNIRV9XUklURUJBQ0spCisJZmxhZ3MgfD0gUE1CX0M7CisjZW5kaWYKKworCXJldHVybiBmbGFnczsKK30KKworLyoKKyAqIENvbnZlcnQgdHlwaWNhbCBwZ3Byb3QgdmFsdWUgdG8gdGhlIFBNQiBlcXVpdmFsZW50CisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwZ3Byb3RfdG9fcG1iX2ZsYWdzKHBncHJvdF90IHByb3QpCit7CisJdW5zaWduZWQgbG9uZyBwbWJfZmxhZ3MgPSAwOworCXU2NCBmbGFncyA9IHBncHJvdF92YWwocHJvdCk7CisKKwlpZiAoZmxhZ3MgJiBfUEFHRV9DQUNIQUJMRSkKKwkJcG1iX2ZsYWdzIHw9IFBNQl9DOworCWlmIChmbGFncyAmIF9QQUdFX1dUKQorCQlwbWJfZmxhZ3MgfD0gUE1CX1dUIHwgUE1CX1VCOworCisJcmV0dXJuIHBtYl9mbGFnczsKK30KKworc3RhdGljIGlubGluZSBib29sIHBtYl9jYW5fbWVyZ2Uoc3RydWN0IHBtYl9lbnRyeSAqYSwgc3RydWN0IHBtYl9lbnRyeSAqYikKK3sKKwlyZXR1cm4gKGItPnZwbiA9PSAoYS0+dnBuICsgYS0+c2l6ZSkpICYmCisJICAgICAgIChiLT5wcG4gPT0gKGEtPnBwbiArIGEtPnNpemUpKSAmJgorCSAgICAgICAoYi0+ZmxhZ3MgPT0gYS0+ZmxhZ3MpOworfQorCitzdGF0aWMgYm9vbCBwbWJfbWFwcGluZ19leGlzdHModW5zaWduZWQgbG9uZyB2YWRkciwgcGh5c19hZGRyX3QgcGh5cywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IGk7CisKKwlyZWFkX2xvY2soJnBtYl9yd2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1iX2VudHJ5X2xpc3QpOyBpKyspIHsKKwkJc3RydWN0IHBtYl9lbnRyeSAqcG1iZSwgKml0ZXI7CisJCXVuc2lnbmVkIGxvbmcgc3BhbjsKKworCQlpZiAoIXRlc3RfYml0KGksIHBtYl9tYXApKQorCQkJY29udGludWU7CisKKwkJcG1iZSA9ICZwbWJfZW50cnlfbGlzdFtpXTsKKworCQkvKgorCQkgKiBTZWUgaWYgVlBOIGFuZCBQUE4gYXJlIGJvdW5kZWQgYnkgYW4gZXhpc3RpbmcgbWFwcGluZy4KKwkJICovCisJCWlmICgodmFkZHIgPCBwbWJlLT52cG4pIHx8ICh2YWRkciA+PSAocG1iZS0+dnBuICsgcG1iZS0+c2l6ZSkpKQorCQkJY29udGludWU7CisJCWlmICgocGh5cyA8IHBtYmUtPnBwbikgfHwgKHBoeXMgPj0gKHBtYmUtPnBwbiArIHBtYmUtPnNpemUpKSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIE5vdyBzZWUgaWYgd2UncmUgaW4gcmFuZ2Ugb2YgYSBzaW1wbGUgbWFwcGluZy4KKwkJICovCisJCWlmIChzaXplIDw9IHBtYmUtPnNpemUpIHsKKwkJCXJlYWRfdW5sb2NrKCZwbWJfcndsb2NrKTsKKwkJCXJldHVybiB0cnVlOworCQl9CisKKwkJc3BhbiA9IHBtYmUtPnNpemU7CisKKwkJLyoKKwkJICogRmluYWxseSBmb3Igc2l6ZXMgdGhhdCBpbnZvbHZlIGNvbXBvdW5kIG1hcHBpbmdzLCB3YWxrCisJCSAqIHRoZSBjaGFpbi4KKwkJICovCisJCWZvciAoaXRlciA9IHBtYmUtPmxpbms7IGl0ZXI7IGl0ZXIgPSBpdGVyLT5saW5rKQorCQkJc3BhbiArPSBpdGVyLT5zaXplOworCisJCS8qCisJCSAqIE5vdGhpbmcgZWxzZSB0byBkbyBpZiB0aGUgcmFuZ2UgcmVxdWlyZW1lbnRzIGFyZSBtZXQuCisJCSAqLworCQlpZiAoc2l6ZSA8PSBzcGFuKSB7CisJCQlyZWFkX3VubG9jaygmcG1iX3J3bG9jayk7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXJlYWRfdW5sb2NrKCZwbWJfcndsb2NrKTsKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIHBtYl9zaXplX3ZhbGlkKHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtYl9zaXplcyk7IGkrKykKKwkJaWYgKHBtYl9zaXplc1tpXS5zaXplID09IHNpemUpCisJCQlyZXR1cm4gdHJ1ZTsKKworCXJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBib29sIHBtYl9hZGRyX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiAoYWRkciA+PSBQMVNFRyAmJiAoYWRkciArIHNpemUgLSAxKSA8IFAzU0VHKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHBtYl9wcm90X3ZhbGlkKHBncHJvdF90IHByb3QpCit7CisJcmV0dXJuIChwZ3Byb3RfdmFsKHByb3QpICYgX1BBR0VfVVNFUikgPT0gMDsKK30KKworc3RhdGljIGludCBwbWJfc2l6ZV90b19mbGFncyh1bnNpZ25lZCBsb25nIHNpemUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfc2l6ZXMpOyBpKyspCisJCWlmIChwbWJfc2l6ZXNbaV0uc2l6ZSA9PSBzaXplKQorCQkJcmV0dXJuIHBtYl9zaXplc1tpXS5mbGFnOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcG1iX2FsbG9jX2VudHJ5KHZvaWQpCiB7CiAJaW50IHBvczsKQEAgLTE0MCwzMyArMjg5LDIyIEBACiB9CiAKIC8qCi0gKiBFbnN1cmUgdGhhdCB0aGUgUE1CIGVudHJpZXMgbWF0Y2ggb3VyIGNhY2hlIGNvbmZpZ3VyYXRpb24uCi0gKgotICogV2hlbiB3ZSBhcmUgaW4gMzItYml0IGFkZHJlc3MgZXh0ZW5kZWQgbW9kZSwgQ0NSLkNCIGJlY29tZXMKLSAqIGludmFsaWQsIHNvIGNhcmUgbXVzdCBiZSB0YWtlbiB0byBtYW51YWxseSBhZGp1c3QgY2FjaGVhYmxlCi0gKiB0cmFuc2xhdGlvbnMuCi0gKi8KLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgbG9uZyBwbWJfY2FjaGVfZmxhZ3Modm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKLQotI2lmIGRlZmluZWQoQ09ORklHX0NBQ0hFX1dSSVRFVEhST1VHSCkKLQlmbGFncyB8PSBQTUJfQyB8IFBNQl9XVCB8IFBNQl9VQjsKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NBQ0hFX1dSSVRFQkFDSykKLQlmbGFncyB8PSBQTUJfQzsKLSNlbmRpZgotCi0JcmV0dXJuIGZsYWdzOwotfQotCi0vKgogICogTXVzdCBiZSBydW4gdW5jYWNoZWQuCiAgKi8KIHN0YXRpYyB2b2lkIF9fc2V0X3BtYl9lbnRyeShzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlKQogewotCXdyaXRlbF91bmNhY2hlZChwbWJlLT52cG4gfCBQTUJfViwgbWtfcG1iX2FkZHIocG1iZS0+ZW50cnkpKTsKLQl3cml0ZWxfdW5jYWNoZWQocG1iZS0+cHBuIHwgcG1iZS0+ZmxhZ3MgfCBQTUJfViwKLQkJCW1rX3BtYl9kYXRhKHBtYmUtPmVudHJ5KSk7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBkYXRhOworCisJYWRkciA9IG1rX3BtYl9hZGRyKHBtYmUtPmVudHJ5KTsKKwlkYXRhID0gbWtfcG1iX2RhdGEocG1iZS0+ZW50cnkpOworCisJanVtcF90b191bmNhY2hlZCgpOworCisJLyogU2V0IFYtYml0ICovCisJX19yYXdfd3JpdGVsKHBtYmUtPnZwbiB8IFBNQl9WLCBhZGRyKTsKKwlfX3Jhd193cml0ZWwocG1iZS0+cHBuIHwgcG1iZS0+ZmxhZ3MgfCBQTUJfViwgZGF0YSk7CisKKwliYWNrX3RvX2NhY2hlZCgpOwogfQogCiBzdGF0aWMgdm9pZCBfX2NsZWFyX3BtYl9lbnRyeShzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlKQpAQCAtMTk0LDE0NCArMzMyLDE1NSBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYmUtPmxvY2ssIGZsYWdzKTsKIH0KIAotc3RhdGljIHN0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBzaXplOwotCWludCBmbGFnOwotfSBwbWJfc2l6ZXNbXSA9IHsKLQl7IC5zaXplCT0gU1pfNTEyTSwgLmZsYWcgPSBQTUJfU1pfNTEyTSwgfSwKLQl7IC5zaXplID0gU1pfMTI4TSwgLmZsYWcgPSBQTUJfU1pfMTI4TSwgfSwKLQl7IC5zaXplID0gU1pfNjRNLCAgLmZsYWcgPSBQTUJfU1pfNjRNLCAgfSwKLQl7IC5zaXplID0gU1pfMTZNLCAgLmZsYWcgPSBQTUJfU1pfMTZNLCAgfSwKLX07Ci0KLWxvbmcgcG1iX3JlbWFwKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgcGh5cywKLQkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQoraW50IHBtYl9ib2x0X21hcHBpbmcodW5zaWduZWQgbG9uZyB2YWRkciwgcGh5c19hZGRyX3QgcGh5cywKKwkJICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCiB7CiAJc3RydWN0IHBtYl9lbnRyeSAqcG1icCwgKnBtYmU7Ci0JdW5zaWduZWQgbG9uZyB3YW50ZWQ7Ci0JaW50IHBtYl9mbGFncywgaTsKLQlsb25nIGVycjsKLQl1NjQgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBvcmlnX2FkZHIsIG9yaWdfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzLCBwbWJfZmxhZ3M7CisJaW50IGksIG1hcHBlZDsKIAotCWZsYWdzID0gcGdwcm90X3ZhbChwcm90KTsKKwlpZiAoIXBtYl9hZGRyX3ZhbGlkKHZhZGRyLCBzaXplKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHBtYl9tYXBwaW5nX2V4aXN0cyh2YWRkciwgcGh5cywgc2l6ZSkpCisJCXJldHVybiAwOwogCi0JcG1iX2ZsYWdzID0gUE1CX1dUIHwgUE1CX1VCOworCW9yaWdfYWRkciA9IHZhZGRyOworCW9yaWdfc2l6ZSA9IHNpemU7CiAKLQkvKiBDb252ZXJ0IHR5cGljYWwgcGdwcm90IHZhbHVlIHRvIHRoZSBQTUIgZXF1aXZhbGVudCAqLwotCWlmIChmbGFncyAmIF9QQUdFX0NBQ0hBQkxFKSB7Ci0JCXBtYl9mbGFncyB8PSBQTUJfQzsKKwlmbHVzaF90bGJfa2VybmVsX3JhbmdlKHZhZGRyLCB2YWRkciArIHNpemUpOwogCi0JCWlmICgoZmxhZ3MgJiBfUEFHRV9XVCkgPT0gMCkKLQkJCXBtYl9mbGFncyAmPSB+KFBNQl9XVCB8IFBNQl9VQik7Ci0JfQotCisJcG1iX2ZsYWdzID0gcGdwcm90X3RvX3BtYl9mbGFncyhwcm90KTsKIAlwbWJwID0gTlVMTDsKLQl3YW50ZWQgPSBzaXplOwogCi1hZ2FpbjoKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfc2l6ZXMpOyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlkbyB7CisJCWZvciAoaSA9IG1hcHBlZCA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtYl9zaXplcyk7IGkrKykgeworCQkJaWYgKHNpemUgPCBwbWJfc2l6ZXNbaV0uc2l6ZSkKKwkJCQljb250aW51ZTsKIAotCQlpZiAoc2l6ZSA8IHBtYl9zaXplc1tpXS5zaXplKQotCQkJY29udGludWU7CisJCQlwbWJlID0gcG1iX2FsbG9jKHZhZGRyLCBwaHlzLCBwbWJfZmxhZ3MgfAorCQkJCQkgcG1iX3NpemVzW2ldLmZsYWcsIFBNQl9OT19FTlRSWSk7CisJCQlpZiAoSVNfRVJSKHBtYmUpKSB7CisJCQkJcG1iX3VubWFwX2VudHJ5KHBtYnAsIG1hcHBlZCk7CisJCQkJcmV0dXJuIFBUUl9FUlIocG1iZSk7CisJCQl9CiAKLQkJcG1iZSA9IHBtYl9hbGxvYyh2YWRkciwgcGh5cywgcG1iX2ZsYWdzIHwgcG1iX3NpemVzW2ldLmZsYWcsCi0JCQkJIFBNQl9OT19FTlRSWSk7Ci0JCWlmIChJU19FUlIocG1iZSkpIHsKLQkJCWVyciA9IFBUUl9FUlIocG1iZSk7Ci0JCQlnb3RvIG91dDsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZwbWJlLT5sb2NrLCBmbGFncyk7CisKKwkJCXBtYmUtPnNpemUgPSBwbWJfc2l6ZXNbaV0uc2l6ZTsKKworCQkJX19zZXRfcG1iX2VudHJ5KHBtYmUpOworCisJCQlwaHlzCSs9IHBtYmUtPnNpemU7CisJCQl2YWRkcgkrPSBwbWJlLT5zaXplOworCQkJc2l6ZQktPSBwbWJlLT5zaXplOworCisJCQkvKgorCQkJICogTGluayBhZGphY2VudCBlbnRyaWVzIHRoYXQgc3BhbiBtdWx0aXBsZSBQTUIKKwkJCSAqIGVudHJpZXMgZm9yIGVhc2llciB0ZWFyLWRvd24uCisJCQkgKi8KKwkJCWlmIChsaWtlbHkocG1icCkpIHsKKwkJCQlzcGluX2xvY2soJnBtYnAtPmxvY2spOworCQkJCXBtYnAtPmxpbmsgPSBwbWJlOworCQkJCXNwaW5fdW5sb2NrKCZwbWJwLT5sb2NrKTsKKwkJCX0KKworCQkJcG1icCA9IHBtYmU7CisKKwkJCS8qCisJCQkgKiBJbnN0ZWFkIG9mIHRyeWluZyBzbWFsbGVyIHNpemVzIG9uIGV2ZXJ5CisJCQkgKiBpdGVyYXRpb24gKGV2ZW4gaWYgd2Ugc3VjY2VlZCBpbiBhbGxvY2F0aW5nCisJCQkgKiBzcGFjZSksIHRyeSB1c2luZyBwbWJfc2l6ZXNbaV0uc2l6ZSBhZ2Fpbi4KKwkJCSAqLworCQkJaS0tOworCQkJbWFwcGVkKys7CisKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBtYmUtPmxvY2ssIGZsYWdzKTsKIAkJfQorCX0gd2hpbGUgKHNpemUgPj0gU1pfMTZNKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcG1iZS0+bG9jaywgZmxhZ3MpOworCWZsdXNoX2NhY2hlX3ZtYXAob3JpZ19hZGRyLCBvcmlnX2FkZHIgKyBvcmlnX3NpemUpOwogCi0JCV9fc2V0X3BtYl9lbnRyeShwbWJlKTsKLQotCQlwaHlzCSs9IHBtYl9zaXplc1tpXS5zaXplOwotCQl2YWRkcgkrPSBwbWJfc2l6ZXNbaV0uc2l6ZTsKLQkJc2l6ZQktPSBwbWJfc2l6ZXNbaV0uc2l6ZTsKLQotCQlwbWJlLT5zaXplID0gcG1iX3NpemVzW2ldLnNpemU7Ci0KLQkJLyoKLQkJICogTGluayBhZGphY2VudCBlbnRyaWVzIHRoYXQgc3BhbiBtdWx0aXBsZSBQTUIgZW50cmllcwotCQkgKiBmb3IgZWFzaWVyIHRlYXItZG93bi4KLQkJICovCi0JCWlmIChsaWtlbHkocG1icCkpIHsKLQkJCXNwaW5fbG9jaygmcG1icC0+bG9jayk7Ci0JCQlwbWJwLT5saW5rID0gcG1iZTsKLQkJCXNwaW5fdW5sb2NrKCZwbWJwLT5sb2NrKTsKLQkJfQotCi0JCXBtYnAgPSBwbWJlOwotCi0JCS8qCi0JCSAqIEluc3RlYWQgb2YgdHJ5aW5nIHNtYWxsZXIgc2l6ZXMgb24gZXZlcnkgaXRlcmF0aW9uCi0JCSAqIChldmVuIGlmIHdlIHN1Y2NlZWQgaW4gYWxsb2NhdGluZyBzcGFjZSksIHRyeSB1c2luZwotCQkgKiBwbWJfc2l6ZXNbaV0uc2l6ZSBhZ2Fpbi4KLQkJICovCi0JCWktLTsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwbWJlLT5sb2NrLCBmbGFncyk7Ci0JfQotCi0JaWYgKHNpemUgPj0gU1pfMTZNKQotCQlnb3RvIGFnYWluOwotCi0JcmV0dXJuIHdhbnRlZCAtIHNpemU7Ci0KLW91dDoKLQlwbWJfdW5tYXBfZW50cnkocG1icCwgTlJfUE1CX0VOVFJJRVMpOwotCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KIAotdm9pZCBwbWJfdW5tYXAodW5zaWduZWQgbG9uZyBhZGRyKQordm9pZCBfX2lvbWVtICpwbWJfcmVtYXBfY2FsbGVyKHBoeXNfYWRkcl90IHBoeXMsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSAgICAgICBwZ3Byb3RfdCBwcm90LCB2b2lkICpjYWxsZXIpCit7CisJdW5zaWduZWQgbG9uZyB2YWRkcjsKKwlwaHlzX2FkZHJfdCBvZmZzZXQsIGxhc3RfYWRkcjsKKwlwaHlzX2FkZHJfdCBhbGlnbl9tYXNrOworCXVuc2lnbmVkIGxvbmcgYWxpZ25lZDsKKwlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOworCWludCBpLCByZXQ7CisKKwlpZiAoIXBtYl9pb21hcHBpbmdfZW5hYmxlZCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIFNtYWxsIG1hcHBpbmdzIG5lZWQgdG8gZ28gdGhyb3VnaCB0aGUgVExCLgorCSAqLworCWlmIChzaXplIDwgU1pfMTZNKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwlpZiAoIXBtYl9wcm90X3ZhbGlkKHByb3QpKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtYl9zaXplcyk7IGkrKykKKwkJaWYgKHNpemUgPj0gcG1iX3NpemVzW2ldLnNpemUpCisJCQlicmVhazsKKworCWxhc3RfYWRkciA9IHBoeXMgKyBzaXplOworCWFsaWduX21hc2sgPSB+KHBtYl9zaXplc1tpXS5zaXplIC0gMSk7CisJb2Zmc2V0ID0gcGh5cyAmIH5hbGlnbl9tYXNrOworCXBoeXMgJj0gYWxpZ25fbWFzazsKKwlhbGlnbmVkID0gQUxJR04obGFzdF9hZGRyLCBwbWJfc2l6ZXNbaV0uc2l6ZSkgLSBwaHlzOworCisJLyoKKwkgKiBYWFg6IFRoaXMgc2hvdWxkIHJlYWxseSBzdGFydCBmcm9tIHVuY2FjaGVkX2VuZCwgYnV0IHRoaXMKKwkgKiBjYXVzZXMgdGhlIE1NVSB0byByZXNldCwgc28gZm9yIG5vdyB3ZSByZXN0cmljdCBpdCB0byB0aGUKKwkgKiAweGIwMDAuLi4weGMwMDAgcmFuZ2UuCisJICovCisJYXJlYSA9IF9fZ2V0X3ZtX2FyZWFfY2FsbGVyKGFsaWduZWQsIFZNX0lPUkVNQVAsIDB4YjAwMDAwMDAsCisJCQkJICAgIFAzU0VHLCBjYWxsZXIpOworCWlmICghYXJlYSkKKwkJcmV0dXJuIE5VTEw7CisKKwlhcmVhLT5waHlzX2FkZHIgPSBwaHlzOworCXZhZGRyID0gKHVuc2lnbmVkIGxvbmcpYXJlYS0+YWRkcjsKKworCXJldCA9IHBtYl9ib2x0X21hcHBpbmcodmFkZHIsIHBoeXMsIHNpemUsIHByb3QpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpCisJCXJldHVybiBFUlJfUFRSKHJldCk7CisKKwlyZXR1cm4gKHZvaWQgX19pb21lbSAqKShvZmZzZXQgKyAoY2hhciAqKXZhZGRyKTsKK30KKworaW50IHBtYl91bm1hcCh2b2lkIF9faW9tZW0gKmFkZHIpCiB7CiAJc3RydWN0IHBtYl9lbnRyeSAqcG1iZSA9IE5VTEw7Ci0JaW50IGk7CisJdW5zaWduZWQgbG9uZyB2YWRkciA9ICh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcjsKKwlpbnQgaSwgZm91bmQgPSAwOwogCiAJcmVhZF9sb2NrKCZwbWJfcndsb2NrKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtYl9lbnRyeV9saXN0KTsgaSsrKSB7CiAJCWlmICh0ZXN0X2JpdChpLCBwbWJfbWFwKSkgewogCQkJcG1iZSA9ICZwbWJfZW50cnlfbGlzdFtpXTsKLQkJCWlmIChwbWJlLT52cG4gPT0gYWRkcikKKwkJCWlmIChwbWJlLT52cG4gPT0gdmFkZHIpIHsKKwkJCQlmb3VuZCA9IDE7CiAJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAl9CiAKIAlyZWFkX3VubG9jaygmcG1iX3J3bG9jayk7CiAKLQlwbWJfdW5tYXBfZW50cnkocG1iZSwgTlJfUE1CX0VOVFJJRVMpOwotfQorCWlmIChmb3VuZCkgeworCQlwbWJfdW5tYXBfZW50cnkocG1iZSwgTlJfUE1CX0VOVFJJRVMpOworCQlyZXR1cm4gMDsKKwl9CiAKLXN0YXRpYyBib29sIHBtYl9jYW5fbWVyZ2Uoc3RydWN0IHBtYl9lbnRyeSAqYSwgc3RydWN0IHBtYl9lbnRyeSAqYikKLXsKLQlyZXR1cm4gKGItPnZwbiA9PSAoYS0+dnBuICsgYS0+c2l6ZSkpICYmCi0JICAgICAgIChiLT5wcG4gPT0gKGEtPnBwbiArIGEtPnNpemUpKSAmJgotCSAgICAgICAoYi0+ZmxhZ3MgPT0gYS0+ZmxhZ3MpOwotfQotCi1zdGF0aWMgYm9vbCBwbWJfc2l6ZV92YWxpZCh1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfc2l6ZXMpOyBpKyspCi0JCWlmIChwbWJfc2l6ZXNbaV0uc2l6ZSA9PSBzaXplKQotCQkJcmV0dXJuIHRydWU7Ci0KLQlyZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBpbnQgcG1iX3NpemVfdG9fZmxhZ3ModW5zaWduZWQgbG9uZyBzaXplKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG1iX3NpemVzKTsgaSsrKQotCQlpZiAocG1iX3NpemVzW2ldLnNpemUgPT0gc2l6ZSkKLQkJCXJldHVybiBwbWJfc2l6ZXNbaV0uZmxhZzsKLQotCXJldHVybiAwOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgdm9pZCBfX3BtYl91bm1hcF9lbnRyeShzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlLCBpbnQgZGVwdGgpCkBAIC0zNTEsNiArNTAwLDggQEAKIAkJICovCiAJCV9fY2xlYXJfcG1iX2VudHJ5KHBtYmUpOwogCisJCWZsdXNoX2NhY2hlX3Z1bm1hcChwbWJlLT52cG4sIHBtYmUtPnZwbiArIHBtYmUtPnNpemUpOworCiAJCXBtYmUgPSBwbWJsaW5rLT5saW5rOwogCiAJCXBtYl9mcmVlKHBtYmxpbmspOwpAQCAtMzY5LDExICs1MjAsNiBAQAogCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZwbWJfcndsb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50IHBtYl9wcG5faW5fcmFuZ2UodW5zaWduZWQgbG9uZyBwcG4pCi17Ci0JcmV0dXJuIHBwbiA+PSBfX3BhKG1lbW9yeV9zdGFydCkgJiYgcHBuIDwgX19wYShtZW1vcnlfZW5kKTsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IHBtYl9ub3RpZnkodm9pZCkKIHsKIAlpbnQgaTsKQEAgLTYyNSw2ICs3NzEsMTggQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW50IF9faW5pdCBlYXJseV9wbWIoY2hhciAqcCkKK3sKKwlpZiAoIXApCisJCXJldHVybiAwOworCisJaWYgKHN0cnN0cihwLCAiaW9tYXAiKSkKKwkJcG1iX2lvbWFwcGluZ19lbmFibGVkID0gMTsKKworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oInBtYiIsIGVhcmx5X3BtYik7CisKIHZvaWQgX19pbml0IHBtYl9pbml0KHZvaWQpCiB7CiAJLyogU3luY2hyb25pemUgc29mdHdhcmUgc3RhdGUgKi8KQEAgLTcxMyw3ICs4NzEsNyBAQAogCiAJcmV0dXJuIDA7CiB9Ci1wb3N0Y29yZV9pbml0Y2FsbChwbWJfZGVidWdmc19pbml0KTsKK3N1YnN5c19pbml0Y2FsbChwbWJfZGVidWdmc19pbml0KTsKIAogI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBwbWJfc3lzZGV2X3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9LY29uZmlnIGIvYXJjaC9zcGFyYy9LY29uZmlnCmluZGV4IDQwOTdmNmEuLjZkYjUxMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvS2NvbmZpZworKysgYi9hcmNoL3NwYXJjL0tjb25maWcKQEAgLTEyNyw2ICsxMjcsOSBAQAogCWJvb2wKIAlkZWZhdWx0IHkgaWYgU1BBUkMzMgogCitjb25maWcgTkVFRF9ETUFfTUFQX1NUQVRFCisJZGVmX2Jvb2wgeQorCiBjb25maWcgR0VORVJJQ19JU0FfRE1BCiAJYm9vbAogCWRlZmF1bHQgeSBpZiBTUEFSQzMyCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmMzMl9kZWZjb25maWcgYi9hcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmMzMl9kZWZjb25maWcKaW5kZXggOTlhMWYxOS4uNmE4ZDA3OCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjMzJfZGVmY29uZmlnCisrKyBiL2FyY2gvc3BhcmMvY29uZmlncy9zcGFyYzMyX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4zMy1yYzIKLSMgTW9uIEphbiAxMSAyMzoyMDozMSAyMDEwCisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMKKyMgV2VkIE1hciAgMyAwMjo1MjoyMyAyMDEwCiAjCiAjIENPTkZJR182NEJJVCBpcyBub3Qgc2V0CiBDT05GSUdfU1BBUkM9eQpAQCAtOSw2ICs5LDggQEAKICMgQ09ORklHX1NQQVJDNjQgaXMgbm90IHNldAogQ09ORklHX0FSQ0hfREVGQ09ORklHPSJhcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmMzMl9kZWZjb25maWciCiBDT05GSUdfQklUUz0zMgorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfQVJDSF9VU0VTX0dFVFRJTUVPRkZTRVQ9eQogQ09ORklHX0FVRElUX0FSQ0g9eQogQ09ORklHX01NVT15CiBDT05GSUdfSElHSE1FTT15CkBAIC00OCwxMSArNTAsNiBAQAogIyBDT05GSUdfVFJFRV9SQ1VfVFJBQ0UgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19HUk9VUF9TQ0hFRD15Ci1DT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfUlRfR1JPVVBfU0NIRUQ9eQotQ09ORklHX1VTRVJfU0NIRUQ9eQotIyBDT05GSUdfQ0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKICMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQogQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQpAQCAtNjgsNiArNjUsNyBAQAogQ09ORklHX1JEX0daSVA9eQogQ09ORklHX1JEX0JaSVAyPXkKIENPTkZJR19SRF9MWk1BPXkKK0NPTkZJR19SRF9MWk89eQogIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQpAQCAtMjExLDcgKzIwOSw2IEBACiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfU1lTQ0FMTD15CiAjIENPTkZJR19BUkNIX1NVUFBPUlRTX01TSSBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX0xFR0FDWT15CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0lPViBpcyBub3Qgc2V0CkBAIC0yMzIsNyArMjI5LDYgQEAKICMgTmV0d29ya2luZyBvcHRpb25zCiAjCiBDT05GSUdfUEFDS0VUPXkKLSMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKIENPTkZJR19VTklYPXkKIENPTkZJR19YRlJNPXkKIENPTkZJR19YRlJNX1VTRVI9bQpAQCAtMzc5LDExICszNzUsMTMgQEAKICMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAogIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJX0RBQzc1MTIgaXMgbm90IHNldAogIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKIAogIwogIyBFRVBST00gc3VwcG9ydAogIworIyBDT05GSUdfRUVQUk9NX0FUMjUgaXMgbm90IHNldAogIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NCNzEwX0NPUkUgaXMgbm90IHNldAogQ09ORklHX0hBVkVfSURFPXkKQEAgLTUwNyw3ICs1MDUsOSBAQAogIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKICMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKICMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dSRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKQEAgLTUyMSw2ICs1MjEsNyBAQAogIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CNDQgaXMgbm90IHNldAogIyBDT05GSUdfS1M4ODQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTODg1MSBpcyBub3Qgc2V0CiAjIENPTkZJR19LUzg4NTFfTUxMIGlzIG5vdCBzZXQKICMgQ09ORklHX0FUTDIgaXMgbm90IHNldAogQ09ORklHX05FVERFVl8xMDAwPXkKQEAgLTU2Myw2ICs1NjQsNyBAQAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTENOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKQEAgLTY2NSw2ICs2NjcsNyBAQAogIwogIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CiAjCisjIENPTkZJR19TRVJJQUxfTUFYMzEwMCBpcyBub3Qgc2V0CiBDT05GSUdfU0VSSUFMX1NVTkNPUkU9eQogQ09ORklHX1NFUklBTF9TVU5aSUxPRz15CiBDT05GSUdfU0VSSUFMX1NVTlpJTE9HX0NPTlNPTEU9eQpAQCAtNjg5LDcgKzY5MiwyMyBAQAogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CiBDT05GSUdfREVWUE9SVD15CiAjIENPTkZJR19JMkMgaXMgbm90IHNldAotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorIyBDT05GSUdfU1BJX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19TUElfTUFTVEVSPXkKKworIworIyBTUEkgTWFzdGVyIENvbnRyb2xsZXIgRHJpdmVycworIworQ09ORklHX1NQSV9CSVRCQU5HPW0KK0NPTkZJR19TUElfWElMSU5YPW0KK0NPTkZJR19TUElfWElMSU5YX1BMVEZNPW0KKyMgQ09ORklHX1NQSV9ERVNJR05XQVJFIGlzIG5vdCBzZXQKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CiAKICMKICMgUFBTIHN1cHBvcnQKQEAgLTcwNiwxMCArNzI1LDEzIEBACiAjCiAjIE5hdGl2ZSBkcml2ZXJzCiAjCisjIENPTkZJR19TRU5TT1JTX0FEQ1hYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTExMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CkBAIC03MjAsNiArNzQyLDcgQEAKICMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MSVMzX1NQSSBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKIENPTkZJR19TU0JfUE9TU0lCTEU9eQpAQCAtNzM2LDYgKzc1OSw4IEBACiAjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAogIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfTUMxMzc4MyBpcyBub3Qgc2V0CisjIENPTkZJR19BQjQ1MDBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfTUVESUFfU1VQUE9SVCBpcyBub3Qgc2V0CiAKQEAgLTc0Myw2ICs3NjgsNyBAQAogIyBHcmFwaGljcyBzdXBwb3J0CiAjCiBDT05GSUdfVkdBX0FSQj15CitDT05GSUdfVkdBX0FSQl9NQVhfR1BVUz0xNgogIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAogIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAogIyBDT05GSUdfRkIgaXMgbm90IHNldApAQCAtODA4LDYgKzgzNCwxNCBAQAogIwogIyBTUEkgUlRDIGRyaXZlcnMKICMKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMzIzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjIxMjMgaXMgbm90IHNldAogCiAjCiAjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCkBAIC0xMTgwLDkgKzEyMTQsMTEgQEAKIENPTkZJR19MSUJDUkMzMkM9bQogQ09ORklHX1pMSUJfSU5GTEFURT15CiBDT05GSUdfWkxJQl9ERUZMQVRFPXkKK0NPTkZJR19MWk9fREVDT01QUkVTUz15CiBDT05GSUdfREVDT01QUkVTU19HWklQPXkKIENPTkZJR19ERUNPTVBSRVNTX0JaSVAyPXkKIENPTkZJR19ERUNPTVBSRVNTX0xaTUE9eQorQ09ORklHX0RFQ09NUFJFU1NfTFpPPXkKIENPTkZJR19IQVNfSU9NRU09eQogQ09ORklHX0hBU19JT1BPUlQ9eQogQ09ORklHX0hBU19ETUE9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnIGIvYXJjaC9zcGFyYy9jb25maWdzL3NwYXJjNjRfZGVmY29uZmlnCmluZGV4IDQxYzVhNTYuLjU2ZTMxNjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvY29uZmlncy9zcGFyYzY0X2RlZmNvbmZpZworKysgYi9hcmNoL3NwYXJjL2NvbmZpZ3Mvc3BhcmM2NF9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMzMtcmMyCi0jIFdlZCBKYW4gMjAgMTY6MzE6NDcgMjAxMAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjMzCisjIFdlZCBNYXIgIDMgMDI6NTQ6MjkgMjAxMAogIwogQ09ORklHXzY0QklUPXkKIENPTkZJR19TUEFSQz15CkBAIC01NSwxNCArNTUsMTAgQEAKICMgQ09ORklHX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiBDT05GSUdfUkNVX0ZBTk9VVD02NAogIyBDT05GSUdfUkNVX0ZBTk9VVF9FWEFDVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfRkFTVF9OT19IWiBpcyBub3Qgc2V0CiAjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xOAotQ09ORklHX0dST1VQX1NDSEVEPXkKLUNPTkZJR19GQUlSX0dST1VQX1NDSEVEPXkKLUNPTkZJR19SVF9HUk9VUF9TQ0hFRD15Ci1DT05GSUdfVVNFUl9TQ0hFRD15Ci0jIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAogIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TWVNGU19ERVBSRUNBVEVEX1YyIGlzIG5vdCBzZXQKIENPTkZJR19SRUxBWT15CkBAIC03Nyw2ICs3Myw3IEBACiBDT05GSUdfUkRfR1pJUD15CiBDT05GSUdfUkRfQlpJUDI9eQogQ09ORklHX1JEX0xaTUE9eQorQ09ORklHX1JEX0xaTz15CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NZU0NUTD15CiBDT05GSUdfQU5PTl9JTk9ERVM9eQpAQCAtMTA1LDcgKzEwMiw2IEBACiAjIEtlcm5lbCBQZXJmb3JtYW5jZSBFdmVudHMgQW5kIENvdW50ZXJzCiAjCiBDT05GSUdfUEVSRl9FVkVOVFM9eQotQ09ORklHX0VWRU5UX1BST0ZJTEU9eQogQ09ORklHX1BFUkZfQ09VTlRFUlM9eQogIyBDT05GSUdfREVCVUdfUEVSRl9VU0VfVk1BTExPQyBpcyBub3Qgc2V0CiBDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQpAQCAtMjY2LDcgKzI2Miw2IEBACiBDT05GSUdfUENJX1NZU0NBTEw9eQogQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKIENPTkZJR19QQ0lfTVNJPXkKLSMgQ09ORklHX1BDSV9MRUdBQ1kgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9TVFVCIGlzIG5vdCBzZXQKICMgQ09ORklHX1BDSV9JT1YgaXMgbm90IHNldApAQCAtMjkwLDcgKzI4NSw2IEBACiAjIE5ldHdvcmtpbmcgb3B0aW9ucwogIwogQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQogQ09ORklHX1VOSVg9eQogQ09ORklHX1hGUk09eQogQ09ORklHX1hGUk1fVVNFUj1tCkBAIC00MjUsMTAgKzQxOSw2IEBACiAjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTE9PUD1tCiBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QPW0KLQotIwotIyBEUkJEIGRpc2FibGVkIGJlY2F1c2UgUFJPQ19GUywgSU5FVCBvciBDT05ORUNUT1Igbm90IHNlbGVjdGVkCi0jCiAjIENPTkZJR19CTEtfREVWX0RSQkQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfTkJEPW0KICMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKQEAgLTY3Nyw2ICs2NjcsNyBAQAogQ09ORklHX1NVTlZORVQ9bQogIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKICMgQ09ORklHX0VUSE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dSRVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX0RORVQgaXMgbm90IHNldAogIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKICMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKQEAgLTY5MSw2ICs2ODIsNyBAQAogIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CiAjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tTWjg4NFhfUENJIGlzIG5vdCBzZXQKICMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CiAjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAogIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CkBAIC03NDEsNiArNzMzLDcgQEAKICMgQ09ORklHX0NIRUxTSU9fVDMgaXMgbm90IHNldAogIyBDT05GSUdfRU5JQyBpcyBub3Qgc2V0CiAjIENPTkZJR19JWEdCRSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCRVZGIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19WWEdFIGlzIG5vdCBzZXQKQEAgLTc1MSw2ICs3NDQsNyBAQAogIyBDT05GSUdfTUxYNF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX1RFSFVUSSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyWCBpcyBub3Qgc2V0CisjIENPTkZJR19RTENOSUMgaXMgbm90IHNldAogIyBDT05GSUdfUUxHRSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRkMgaXMgbm90IHNldAogIyBDT05GSUdfQkUyTkVUIGlzIG5vdCBzZXQKQEAgLTEwMjgsNiArMTAyMiw3IEBACiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FNQzY4MjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19UTVA0MjEgaXMgbm90IHNldApAQCAtMTA3Niw2ICsxMDcxLDcgQEAKICMgR3JhcGhpY3Mgc3VwcG9ydAogIwogQ09ORklHX1ZHQV9BUkI9eQorQ09ORklHX1ZHQV9BUkJfTUFYX0dQVVM9MTYKICMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CiAjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CiAjIENPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTCBpcyBub3Qgc2V0CkBAIC0xMjc5LDYgKzEyNzUsNyBAQAogIyBDT05GSUdfU05EX1lNRlBDSSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1VTQj15CiAjIENPTkZJR19TTkRfVVNCX0FVRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NORF9VU0JfVUExMDEgaXMgbm90IHNldAogIyBDT05GSUdfU05EX1VTQl9DQUlBUSBpcyBub3Qgc2V0CiBDT05GSUdfU05EX1NQQVJDPXkKICMgQ09ORklHX1NORF9TVU5fQU1ENzkzMCBpcyBub3Qgc2V0CkBAIC0xMzAxLDYgKzEyOTgsNyBAQAogIwogIyBTcGVjaWFsIEhJRCBkcml2ZXJzCiAjCisjIENPTkZJR19ISURfM01fUENUIGlzIG5vdCBzZXQKIENPTkZJR19ISURfQTRURUNIPXkKIENPTkZJR19ISURfQVBQTEU9eQogQ09ORklHX0hJRF9CRUxLSU49eQpAQCAtMTMxNywxNCArMTMxNSwxOSBAQAogQ09ORklHX0hJRF9MT0dJVEVDSD15CiAjIENPTkZJR19MT0dJVEVDSF9GRiBpcyBub3Qgc2V0CiAjIENPTkZJR19MT0dJUlVNQkxFUEFEMl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19MT0dJRzk0MF9GRiBpcyBub3Qgc2V0CiBDT05GSUdfSElEX01JQ1JPU09GVD15CisjIENPTkZJR19ISURfTU9TQVJUIGlzIG5vdCBzZXQKIENPTkZJR19ISURfTU9OVEVSRVk9eQogQ09ORklHX0hJRF9OVFJJRz15CitDT05GSUdfSElEX09SVEVLPXkKIENPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQogIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAogQ09ORklHX0hJRF9QRVRBTFlOWD15CisjIENPTkZJR19ISURfUVVBTlRBIGlzIG5vdCBzZXQKIENPTkZJR19ISURfU0FNU1VORz15CiBDT05GSUdfSElEX1NPTlk9eQorIyBDT05GSUdfSElEX1NUQU5UVU0gaXMgbm90IHNldAogQ09ORklHX0hJRF9TVU5QTFVTPXkKIENPTkZJR19ISURfR1JFRU5BU0lBPXkKICMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CkBAIC0xODA3LDYgKzE4MTAsNyBAQAogQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CiBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMPW0KIENPTkZJR19DUllQVE9fTlVMTD1tCisjIENPTkZJR19DUllQVE9fUENSWVBUIGlzIG5vdCBzZXQKIENPTkZJR19DUllQVE9fV09SS1FVRVVFPXkKICMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAogQ09ORklHX0NSWVBUT19BVVRIRU5DPXkKQEAgLTE5MDQsOSArMTkwOCwxMSBAQAogQ09ORklHX0xJQkNSQzMyQz1tCiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX0xaT19ERUNPTVBSRVNTPXkKIENPTkZJR19ERUNPTVBSRVNTX0daSVA9eQogQ09ORklHX0RFQ09NUFJFU1NfQlpJUDI9eQogQ09ORklHX0RFQ09NUFJFU1NfTFpNQT15CitDT05GSUdfREVDT01QUkVTU19MWk89eQogQ09ORklHX0hBU19JT01FTT15CiBDT05GSUdfSEFTX0lPUE9SVD15CiBDT05GSUdfSEFTX0RNQT15CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2NvbXBhdC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9jb21wYXQuaAppbmRleCAwZTcwNjI1Li41MDE2Zjc2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2NvbXBhdC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vY29tcGF0LmgKQEAgLTUsNyArNSw4IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCi0jZGVmaW5lIENPTVBBVF9VU0VSX0haCTEwMAorI2RlZmluZSBDT01QQVRfVVNFUl9IWgkJMTAwCisjZGVmaW5lIENPTVBBVF9VVFNfTUFDSElORQkic3BhcmNcMFwwIgogCiB0eXBlZGVmIHUzMgkJY29tcGF0X3NpemVfdDsKIHR5cGVkZWYgczMyCQljb21wYXRfc3NpemVfdDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCA1YThjMzA4Li40YjRhMGMwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC04LDcgKzgsNiBAQAogI2RlZmluZSBETUFfRVJST1JfQ09ERQkofihkbWFfYWRkcl90KTB4MCkKIAogZXh0ZXJuIGludCBkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spOwotZXh0ZXJuIGludCBkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZG1hX21hc2spOwogCiAjZGVmaW5lIGRtYV9hbGxvY19ub25jb2hlcmVudChkLCBzLCBoLCBmKSBkbWFfYWxsb2NfY29oZXJlbnQoZCwgcywgaCwgZikKICNkZWZpbmUgZG1hX2ZyZWVfbm9uY29oZXJlbnQoZCwgcywgdiwgaCkgZG1hX2ZyZWVfY29oZXJlbnQoZCwgcywgdiwgaCkKQEAgLTYyLDQgKzYxLDE3IEBACiAJcmV0dXJuICgxIDw8IElOVEVSTk9ERV9DQUNIRV9TSElGVCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQoreworI2lmZGVmIENPTkZJR19QQ0kKKwlpZiAoZGV2LT5idXMgPT0gJnBjaV9idXNfdHlwZSkgeworCQlpZiAoIWRldi0+ZG1hX21hc2sgfHwgIWRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQkqZGV2LT5kbWFfbWFzayA9IG1hc2s7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCXJldHVybiAtRUlOVkFMOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vZmJpby5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mYmlvLmgKaW5kZXggYjkyMTVhMC4uMGEyMWRhOCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mYmlvLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9mYmlvLmgKQEAgLTE3Myw3ICsxNzMsNyBAQAogCWludCAgICAgbWRpX25jbHV0czsgICAgIC8qIE51bWJlciBvZiBpbXBsZW1lbnRlZCBDTFVUcyBpbiB0aGlzIE1ESSAqLwogICAgICAgICBpbnQgICAgIG1kaV90eXBlOyAgICAgICAvKiBGQlRZUEUgbmFtZSAqLwogICAgICAgICBpbnQgICAgIG1kaV9oZWlnaHQ7ICAgICAvKiBoZWlnaHQgKi8KLSAgICAgICAgaW50ICAgICBtZGlfd2lkdGg7ICAgICAgLyogd2lkaHQgKi8KKyAgICAgICAgaW50ICAgICBtZGlfd2lkdGg7ICAgICAgLyogd2lkdGggKi8KICAgICAgICAgaW50ICAgICBtZGlfc2l6ZTsgICAgICAgLyogYXZhaWxhYmxlIHJhbSAqLwogICAgICAgICBpbnQgICAgIG1kaV9tb2RlOyAgICAgICAvKiA4YnBwLCAxNmJwcCBvciAzMmJwcCAqLwogICAgICAgICBpbnQgICAgIG1kaV9waXhmcmVxOyAgICAvKiBwaXhlbCBjbG9jayAoZnJvbSBQUk9NKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pb18zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pb18zMi5oCmluZGV4IDY3OWM3NTAuLjI4ODk1NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaW9fMzIuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lvXzMyLmgKQEAgLTI0OSwxMCArMjQ5LDE0IEBACiAKICNkZWZpbmUgaW9yZWFkOChYKQkJCXJlYWRiKFgpCiAjZGVmaW5lIGlvcmVhZDE2KFgpCQkJcmVhZHcoWCkKKyNkZWZpbmUgaW9yZWFkMTZiZShYKQkJCV9fcmF3X3JlYWR3KFgpCiAjZGVmaW5lIGlvcmVhZDMyKFgpCQkJcmVhZGwoWCkKKyNkZWZpbmUgaW9yZWFkMzJiZShYKQkJCV9fcmF3X3JlYWRsKFgpCiAjZGVmaW5lIGlvd3JpdGU4KHZhbCxYKQkJCXdyaXRlYih2YWwsWCkKICNkZWZpbmUgaW93cml0ZTE2KHZhbCxYKQkJd3JpdGV3KHZhbCxYKQorI2RlZmluZSBpb3dyaXRlMTZiZSh2YWwsWCkJCV9fcmF3X3dyaXRldyh2YWwsWCkKICNkZWZpbmUgaW93cml0ZTMyKHZhbCxYKQkJd3JpdGVsKHZhbCxYKQorI2RlZmluZSBpb3dyaXRlMzJiZSh2YWwsWCkJCV9fcmF3X3dyaXRlbCh2YWwsWCkKIAogc3RhdGljIGlubGluZSB2b2lkIGlvcmVhZDhfcmVwKHZvaWQgX19pb21lbSAqcG9ydCwgdm9pZCAqYnVmLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pb182NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9pb182NC5oCmluZGV4IDRhZWUyMWQuLjk1MTdkMDYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vaW9fNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL2lvXzY0LmgKQEAgLTQ2OCwxMCArNDY4LDE0IEBACiAKICNkZWZpbmUgaW9yZWFkOChYKQkJCXJlYWRiKFgpCiAjZGVmaW5lIGlvcmVhZDE2KFgpCQkJcmVhZHcoWCkKKyNkZWZpbmUgaW9yZWFkMTZiZShYKQkJCV9fcmF3X3JlYWR3KFgpCiAjZGVmaW5lIGlvcmVhZDMyKFgpCQkJcmVhZGwoWCkKKyNkZWZpbmUgaW9yZWFkMzJiZShYKQkJCV9fcmF3X3JlYWRsKFgpCiAjZGVmaW5lIGlvd3JpdGU4KHZhbCxYKQkJCXdyaXRlYih2YWwsWCkKICNkZWZpbmUgaW93cml0ZTE2KHZhbCxYKQkJd3JpdGV3KHZhbCxYKQorI2RlZmluZSBpb3dyaXRlMTZiZSh2YWwsWCkJCV9fcmF3X3dyaXRldyh2YWwsWCkKICNkZWZpbmUgaW93cml0ZTMyKHZhbCxYKQkJd3JpdGVsKHZhbCxYKQorI2RlZmluZSBpb3dyaXRlMzJiZSh2YWwsWCkJCV9fcmF3X3dyaXRlbCh2YWwsWCkKIAogLyogQ3JlYXRlIGEgdmlydHVhbCBtYXBwaW5nIGNvb2tpZSBmb3IgYW4gSU8gcG9ydCByYW5nZSAqLwogZXh0ZXJuIHZvaWQgX19pb21lbSAqaW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGludCBucik7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaV8zMi5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2lfMzIuaAppbmRleCBlNzY5ZjY2Li4zMzJhYzlhIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaV8zMi5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNpXzMyLmgKQEAgLTMyLDIwICszMiw2IEBACiAKIHN0cnVjdCBwY2lfZGV2OwogCi0vKiBwY2lfdW5tYXBfe3NpbmdsZSxwYWdlfSBpcyBub3QgYSBub3AsIHRodXMuLi4gKi8KLSNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCVwKLQlkbWFfYWRkcl90IEFERFJfTkFNRTsKLSNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKQkJXAotCV9fdTMyIExFTl9OQU1FOwotI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkJCQlcCi0JKChQVFIpLT5BRERSX05BTUUpCi0jZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKQkJXAotCSgoKFBUUiktPkFERFJfTkFNRSkgPSAoVkFMKSkKLSNkZWZpbmUgcGNpX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKQkJCVwKLQkoKFBUUiktPkxFTl9OQU1FKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCQlcCi0JKCgoUFRSKS0+TEVOX05BTUUpID0gKFZBTCkpCi0KICNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2RtYV9idXJzdF9hZHZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJCWVudW0gcGNpX2RtYV9idXJzdF9zdHJhdGVneSAqc3RyYXQsCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaV82NC5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wY2lfNjQuaAppbmRleCBiMDU3NmRmLi41MzEyNzgyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3BjaV82NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGNpXzY0LmgKQEAgLTMyLDIwICszMiw2IEBACiAgKi8KICNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUwkoMCkKIAotLyogcGNpX3VubWFwX3tzaW5nbGUscGFnZX0gaXMgbm90IGEgbm9wLCB0aHVzLi4uICovCi0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0FERFIoQUREUl9OQU1FKQlcCi0JZG1hX2FkZHJfdCBBRERSX05BTUU7Ci0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkJCVwKLQlfX3UzMiBMRU5fTkFNRTsKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpCQkJXAotCSgoUFRSKS0+QUREUl9OQU1FKQotI2RlZmluZSBwY2lfdW5tYXBfYWRkcl9zZXQoUFRSLCBBRERSX05BTUUsIFZBTCkJCVwKLQkoKChQVFIpLT5BRERSX05BTUUpID0gKFZBTCkpCi0jZGVmaW5lIHBjaV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkJCQlcCi0JKChQVFIpLT5MRU5fTkFNRSkKLSNkZWZpbmUgcGNpX3VubWFwX2xlbl9zZXQoUFRSLCBMRU5fTkFNRSwgVkFMKQkJXAotCSgoKFBUUiktPkxFTl9OQU1FKSA9IChWQUwpKQotCiAvKiBQQ0kgSU9NTVUgbWFwcGluZyBieXBhc3Mgc3VwcG9ydC4gKi8KIAogLyogUENJIDY0LWJpdCBhZGRyZXNzaW5nIHdvcmtzIGZvciBhbGwgc2xvdHMgb24gYWxsIGNvbnRyb2xsZXIKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vcGVyZmN0ci5oIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZXJmY3RyLmgKaW5kZXggODM2ODczMC4uOGQ4NzIwYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZXJmY3RyLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9wZXJmY3RyLmgKQEAgLTEwLDggKzEwLDggQEAKICAqIGZyb20gZW51bWVyYXRpb24gYmVsb3cuICBUaGUgbWVhbmluZyBvZiBmdXJ0aGVyIGFyZ3VtZW50cwogICogYXJlIGRldGVybWluZWQgYnkgdGhlIG9wZXJhdGlvbiBjb2RlLgogICoKLSAqIGludCBzeXNfcGVyZmN0cihpbnQgb3Bjb2RlLCB1bnNpZ25lZCBsb25nIGFyZzAsCi0gKiAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBhcmcxLCB1bnNpZ25lZCBsb25nIGFyZzIpCisgKiBOT1RFOiBUaGlzIHN5c3RlbSBjYWxsIGlzIG5vIGxvbmdlciBwcm92aWRlZCwgdXNlIHRoZSBwZXJmX2V2ZW50cworICogICAgICAgaW5mcmFzdHJ1Y3R1cmUuCiAgKgogICogUG9pbnRlcnMgd2hpY2ggYXJlIHBhc3NlZCBieSB0aGUgdXNlciBhcmUgcG9pbnRlcnMgdG8gNjQtYml0CiAgKiBpbnRlZ2Vycy4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc2NhdHRlcmxpc3QuaAppbmRleCBlNTgwZjU1Li5kMTEyMDI1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0LmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zY2F0dGVybGlzdC5oCkBAIC0xLDI3ICsxLDggQEAKICNpZm5kZWYgX1NQQVJDX1NDQVRURVJMSVNUX0gKICNkZWZpbmUgX1NQQVJDX1NDQVRURVJMSVNUX0gKIAotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0KLXN0cnVjdCBzY2F0dGVybGlzdCB7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX1NHCi0JdW5zaWduZWQgbG9uZwlzZ19tYWdpYzsKLSNlbmRpZgotCXVuc2lnbmVkIGxvbmcJcGFnZV9saW5rOwotCXVuc2lnbmVkIGludAlvZmZzZXQ7Ci0KLQl1bnNpZ25lZCBpbnQJbGVuZ3RoOwotCi0JZG1hX2FkZHJfdAlkbWFfYWRkcmVzczsKLQlfX3UzMgkJZG1hX2xlbmd0aDsKLX07Ci0KLSNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpCSgoc2cpLT5kbWFfYWRkcmVzcykKICNkZWZpbmUgc2dfZG1hX2xlbihzZykgICAgIAkoKHNnKS0+ZG1hX2xlbmd0aCkKIAotI2RlZmluZSBJU0FfRE1BX1RIUkVTSE9MRAkofjBVTCkKLQotI2RlZmluZSBBUkNIX0hBU19TR19DSEFJTgorI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NjYXR0ZXJsaXN0Lmg+CiAKICNlbmRpZiAvKiAhKF9TUEFSQ19TQ0FUVEVSTElTVF9IKSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaCBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vc3lzdGVtXzY0LmgKaW5kZXggZDQ3YTk4ZS4uZDI0Y2ZlMSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS9zeXN0ZW1fNjQuaAorKysgYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3N5c3RlbV82NC5oCkBAIC0xNDMsMTUgKzE0Myw3IEBACiAJICogYW5kIDIgc3RvcmVzIGluIHRoaXMgY3JpdGljYWwgY29kZSBwYXRoLiAgLURhdmVNCiAJICovCiAjZGVmaW5lIHN3aXRjaF90byhwcmV2LCBuZXh0LCBsYXN0KQkJCQkJXAotZG8gewlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfUEVSRkNUUikpIHsJCQkJXAotCQl1bnNpZ25lZCBsb25nIF9fdG1wOwkJCQkJXAotCQlyZWFkX3BjcihfX3RtcCk7CQkJCQlcCi0JCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cGNyX3JlZyA9IF9fdG1wOwkJCVwKLQkJcmVhZF9waWMoX190bXApOwkJCQkJXAotCQljdXJyZW50X3RocmVhZF9pbmZvKCktPmtlcm5lbF9jbnRkMCArPSAodW5zaWduZWQgaW50KShfX3RtcCk7XAotCQljdXJyZW50X3RocmVhZF9pbmZvKCktPmtlcm5lbF9jbnRkMSArPSAoKF9fdG1wKSA+PiAzMik7CVwKLQl9CQkJCQkJCQlcCi0JZmx1c2hfdGxiX3BlbmRpbmcoKTsJCQkJCQlcCitkbyB7CWZsdXNoX3RsYl9wZW5kaW5nKCk7CQkJCQkJXAogCXNhdmVfYW5kX2NsZWFyX2ZwdSgpOwkJCQkJCVwKIAkvKiBJZiB5b3UgYXJlIHRlbXB0ZWQgdG8gY29uZGl0aW9uYWxpemUgdGhlIGZvbGxvd2luZyAqLwlcCiAJLyogc28gdGhhdCBBU0kgaXMgb25seSB3cml0dGVuIGlmIGl0IGNoYW5nZXMsIHRoaW5rIGFnYWluLiAqLwlcCkBAIC0xOTcsMTEgKzE4OSw2IEBACiAJICAgICAgICAibDEiLCAibDIiLCAibDMiLCAibDQiLCAibDUiLCAibDYiLCAibDciLAkJXAogCSAgImkwIiwgImkxIiwgImkyIiwgImkzIiwgImk0IiwgImk1IiwJCQkJXAogCSAgIm8wIiwgIm8xIiwgIm8yIiwgIm8zIiwgIm80IiwgIm81IiwgICAgICAgIm83Iik7CQlcCi0JLyogSWYgeW91IGZ1Y2sgd2l0aCB0aGlzLCB1cGRhdGUgcmV0X2Zyb21fc3lzY2FsbCBjb2RlIHRvby4gKi8JXAotCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9QRVJGQ1RSKSkgewkJCQlcCi0JCXdyaXRlX3BjcihjdXJyZW50X3RocmVhZF9pbmZvKCktPnBjcl9yZWcpOwkJXAotCQlyZXNldF9waWMoKTsJCQkJCQlcCi0JfQkJCQkJCQkJXAogfSB3aGlsZSgwKQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgeGNoZzMyKF9fdm9sYXRpbGVfXyB1bnNpZ25lZCBpbnQgKm0sIHVuc2lnbmVkIGludCB2YWwpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvXzY0LmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3RocmVhZF9pbmZvXzY0LmgKaW5kZXggMzliZTlmMi4uOWUyZDk0NCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mb182NC5oCisrKyBiL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm9fNjQuaApAQCAtNTgsMTEgKzU4LDYgQEAKIAl1bnNpZ25lZCBsb25nCQlnc3JbN107CiAJdW5zaWduZWQgbG9uZwkJeGZzcls3XTsKIAotCV9fdTY0CQkJX191c2VyICp1c2VyX2NudGQwOwotCV9fdTY0CQkJX191c2VyICp1c2VyX2NudGQxOwotCV9fdTY0CQkJa2VybmVsX2NudGQwLCBrZXJuZWxfY250ZDE7Ci0JX191NjQJCQlwY3JfcmVnOwotCiAJc3RydWN0IHJlc3RhcnRfYmxvY2sJcmVzdGFydF9ibG9jazsKIAogCXN0cnVjdCBwdF9yZWdzCQkqa2Vybl91bmFfcmVnczsKQEAgLTk2LDE1ICs5MSwxMCBAQAogI2RlZmluZSBUSV9SV0lOX1NQVFJTCTB4MDAwMDAzYzgKICNkZWZpbmUgVElfR1NSCQkweDAwMDAwNDAwCiAjZGVmaW5lIFRJX1hGU1IJCTB4MDAwMDA0MzgKLSNkZWZpbmUgVElfVVNFUl9DTlREMAkweDAwMDAwNDcwCi0jZGVmaW5lIFRJX1VTRVJfQ05URDEJMHgwMDAwMDQ3OAotI2RlZmluZSBUSV9LRVJOX0NOVEQwCTB4MDAwMDA0ODAKLSNkZWZpbmUgVElfS0VSTl9DTlREMQkweDAwMDAwNDg4Ci0jZGVmaW5lIFRJX1BDUgkJMHgwMDAwMDQ5MAotI2RlZmluZSBUSV9SRVNUQVJUX0JMT0NLIDB4MDAwMDA0OTgKLSNkZWZpbmUgVElfS1VOQV9SRUdTCTB4MDAwMDA0YzgKLSNkZWZpbmUgVElfS1VOQV9JTlNOCTB4MDAwMDA0ZDAKLSNkZWZpbmUgVElfRlBSRUdTCTB4MDAwMDA1MDAKKyNkZWZpbmUgVElfUkVTVEFSVF9CTE9DSyAweDAwMDAwNDcwCisjZGVmaW5lIFRJX0tVTkFfUkVHUwkweDAwMDAwNGEwCisjZGVmaW5lIFRJX0tVTkFfSU5TTgkweDAwMDAwNGE4CisjZGVmaW5lIFRJX0ZQUkVHUwkweDAwMDAwNGMwCiAKIC8qIFdlIGVtYmVkIHRoaXMgaW4gdGhlIHVwcGVybW9zdCBieXRlIG9mIHRocmVhZF9pbmZvLT5mbGFncyAqLwogI2RlZmluZSBGQVVMVF9DT0RFX1dSSVRFCTB4MDEJLyogV3JpdGUgYWNjZXNzLCBpbXBsaWVzIEQtVExCCSAgICovCkBAIC0xOTksNyArMTg5LDcgQEAKICAqCiAgKiBPbiB0cmFwIHJldHVybiB3ZSBuZWVkIHRvIHRlc3Qgc2V2ZXJhbCB2YWx1ZXM6CiAgKgotICogdXNlcjoJbmVlZF9yZXNjaGVkLCBub3RpZnlfcmVzdW1lLCBzaWdwZW5kaW5nLCB3c2F2ZWQsIHBlcmZjdHIKKyAqIHVzZXI6CW5lZWRfcmVzY2hlZCwgbm90aWZ5X3Jlc3VtZSwgc2lncGVuZGluZywgd3NhdmVkCiAgKiBrZXJuZWw6CWZwZGVwdGgKICAqCiAgKiBTbyB0byBjaGVjayBmb3Igd29yayBpbiB0aGUga2VybmVsIGNhc2Ugd2Ugc2ltcGx5IGxvYWQgdGhlIGZwZGVwdGgKQEAgLTIyMCw3ICsyMTAsNyBAQAogI2RlZmluZSBUSUZfTk9USUZZX1JFU1VNRQkxCS8qIGNhbGxiYWNrIGJlZm9yZSByZXR1cm5pbmcgdG8gdXNlciAqLwogI2RlZmluZSBUSUZfU0lHUEVORElORwkJMgkvKiBzaWduYWwgcGVuZGluZyAqLwogI2RlZmluZSBUSUZfTkVFRF9SRVNDSEVECTMJLyogcmVzY2hlZHVsaW5nIG5lY2Vzc2FyeSAqLwotI2RlZmluZSBUSUZfUEVSRkNUUgkJNAkvKiBwZXJmb3JtYW5jZSBjb3VudGVycyBhY3RpdmUgKi8KKy8qIGZsYWcgYml0IDQgaXMgYXZhaWxhYmxlICovCiAjZGVmaW5lIFRJRl9VTkFMSUdORUQJCTUJLyogYWxsb3dlZCB0byBkbyB1bmFsaWduZWQgYWNjZXNzZXMgKi8KIC8qIGZsYWcgYml0IDYgaXMgYXZhaWxhYmxlICovCiAjZGVmaW5lIFRJRl8zMkJJVAkJNwkvKiAzMi1iaXQgYmluYXJ5ICovCkBAIC0yNDEsNyArMjMxLDYgQEAKICNkZWZpbmUgX1RJRl9OT1RJRllfUkVTVU1FCSgxPDxUSUZfTk9USUZZX1JFU1VNRSkKICNkZWZpbmUgX1RJRl9TSUdQRU5ESU5HCQkoMTw8VElGX1NJR1BFTkRJTkcpCiAjZGVmaW5lIF9USUZfTkVFRF9SRVNDSEVECSgxPDxUSUZfTkVFRF9SRVNDSEVEKQotI2RlZmluZSBfVElGX1BFUkZDVFIJCSgxPDxUSUZfUEVSRkNUUikKICNkZWZpbmUgX1RJRl9VTkFMSUdORUQJCSgxPDxUSUZfVU5BTElHTkVEKQogI2RlZmluZSBfVElGXzMyQklUCQkoMTw8VElGXzMyQklUKQogI2RlZmluZSBfVElGX1NFQ0NPTVAJCSgxPDxUSUZfU0VDQ09NUCkKQEAgLTI1Miw3ICsyNDEsNyBAQAogCiAjZGVmaW5lIF9USUZfVVNFUl9XT1JLX01BU0sJKCgweGZmIDw8IFRJX0ZMQUdfV1NBVkVEX1NISUZUKSB8IFwKIAkJCQkgX1RJRl9ET19OT1RJRllfUkVTVU1FX01BU0sgfCBcCi0JCQkJIF9USUZfTkVFRF9SRVNDSEVEIHwgX1RJRl9QRVJGQ1RSKQorCQkJCSBfVElGX05FRURfUkVTQ0hFRCkKICNkZWZpbmUgX1RJRl9ET19OT1RJRllfUkVTVU1FX01BU0sJKF9USUZfTk9USUZZX1JFU1VNRSB8IF9USUZfU0lHUEVORElORykKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdW5pc3RkLmggYi9hcmNoL3NwYXJjL2luY2x1ZGUvYXNtL3VuaXN0ZC5oCmluZGV4IGNiNGI5YmYuLmQwYjNiMDEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvaW5jbHVkZS9hc20vdW5pc3RkLmgKKysrIGIvYXJjaC9zcGFyYy9pbmNsdWRlL2FzbS91bmlzdGQuaApAQCAtNDMyLDcgKzQzMiw5IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfUlRfU0lHU1VTUEVORAotI2lmbmRlZiBfXzMyYml0X3N5c2NhbGxfbnVtYmVyc19fCisjaWZkZWYgX18zMmJpdF9zeXNjYWxsX251bWJlcnNfXworI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfSVBDCisjZWxzZQogI2RlZmluZSBfX0FSQ0hfV0FOVF9DT01QQVRfU1lTX1RJTUUKICNkZWZpbmUgX19BUkNIX1dBTlRfQ09NUEFUX1NZU19SVF9TSUdTVVNQRU5ECiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2RldmljZXMuYyBiL2FyY2gvc3BhcmMva2VybmVsL2RldmljZXMuYwppbmRleCBiMDYyZGU5Li42MmRjN2EwIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9kZXZpY2VzLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvZGV2aWNlcy5jCkBAIC0xNDMsNiArMTQzLDQgQEAKIAogCWlmIChBUkNIX1NVTjRDKQogCQlzdW40Y19wcm9iZV9tZW1lcnJfcmVnKCk7Ci0KLQlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5oIGIvYXJjaC9zcGFyYy9rZXJuZWwvZW50cnkuaAppbmRleCA0ZjUzYTIzLi5jMDExYjkzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9lbnRyeS5oCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2VudHJ5LmgKQEAgLTQ4LDcgKzQ4LDYgQEAKIGV4dGVybiB1bnNpZ25lZCBpbnQgZGNhY2hlX3Bhcml0eV90bDFfb2NjdXJyZWQ7CiBleHRlcm4gdW5zaWduZWQgaW50IGljYWNoZV9wYXJpdHlfdGwxX29jY3VycmVkOwogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHVwZGF0ZV9wZXJmY3Rycyh2b2lkKTsKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgc3BhcmNfYnJlYWtwb2ludChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9pb21tdS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvaW9tbXUuYwppbmRleCA1ZmFkOTQ5Li44NDE0NTQ5IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pb21tdS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2lvbW11LmMKQEAgLTg2MiwxMyArODYyLDMgQEAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZG1hX3N1cHBvcnRlZCk7Ci0KLWludCBkbWFfc2V0X21hc2soc3RydWN0IGRldmljZSAqZGV2LCB1NjQgZG1hX21hc2spCi17Ci0jaWZkZWYgQ09ORklHX1BDSQotCWlmIChkZXYtPmJ1cyA9PSAmcGNpX2J1c190eXBlKQotCQlyZXR1cm4gcGNpX3NldF9kbWFfbWFzayh0b19wY2lfZGV2KGRldiksIGRtYV9tYXNrKTsKLSNlbmRpZgotCXJldHVybiAtRUlOVkFMOwotfQotRVhQT1JUX1NZTUJPTChkbWFfc2V0X21hc2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvaW9wb3J0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9pb3BvcnQuYwppbmRleCAzYzhjNDRmLi44NGU1Mzg2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9pb3BvcnQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9pb3BvcnQuYwpAQCAtNjc2LDE3ICs2NzYsNiBAQAogfQogRVhQT1JUX1NZTUJPTChkbWFfc3VwcG9ydGVkKTsKIAotaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBkbWFfbWFzaykKLXsKLSNpZmRlZiBDT05GSUdfUENJCi0JaWYgKGRldi0+YnVzID09ICZwY2lfYnVzX3R5cGUpCi0JCXJldHVybiBwY2lfc2V0X2RtYV9tYXNrKHRvX3BjaV9kZXYoZGV2KSwgZG1hX21hc2spOwotI2VuZGlmCi0JcmV0dXJuIC1FT1BOT1RTVVBQOwotfQotRVhQT1JUX1NZTUJPTChkbWFfc2V0X21hc2spOwotCi0KICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCiBzdGF0aWMgaW50IHNwYXJjX2lvX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX2tlcm5lbC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9rZXJuZWwuYwppbmRleCA4N2YxNzYwLi4wNDA5ZDYyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX2tlcm5lbC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL2xlb25fa2VybmVsLmMKQEAgLTEyNCw3ICsxMjQsNyBAQAogCiAJCWlmICghKExFT04zX0JZUEFTU19MT0FEX1BBKCZsZW9uM19ncHRpbWVyX3JlZ3MtPmNvbmZpZykgJgogCQkgICAgICAoMTw8TEVPTjNfR1BUSU1FUl9TRVBJUlEpKSkgewotCQkJcHJvbV9wcmludGYoImlycSB0aW1lciBub3QgY29uZmlndXJlZCB3aXRoIHNlcGVyYXRlIGlycXMgXG4iKTsKKwkJCXByb21fcHJpbnRmKCJpcnEgdGltZXIgbm90IGNvbmZpZ3VyZWQgd2l0aCBzZXBhcmF0ZSBpcnFzXG4iKTsKIAkJCUJVRygpOwogCQl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL2xlb25fc21wLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZW9uX3NtcC5jCmluZGV4IDA1YzBkYWQuLjg1Nzg3NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL2xlb25fc21wLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbGVvbl9zbXAuYwpAQCAtMTc3LDcgKzE3Nyw3IEBACiAJaW50IG5yY3B1ID0gbGVvbl9zbXBfbnJjcHVzKCk7CiAJaW50IG1lID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJWQ6KCVkOiVkKSBjcHVzIG1waXJxIGF0IDB4JXggXG4iLCAodW5zaWduZWQgaW50KW1lLAorCXByaW50ayhLRVJOX0lORk8gIiVkOiglZDolZCkgY3B1cyBtcGlycSBhdCAweCV4XG4iLCAodW5zaWduZWQgaW50KW1lLAogCSAgICAgICAodW5zaWduZWQgaW50KW5yY3B1LCAodW5zaWduZWQgaW50KU5SX0NQVVMsCiAJICAgICAgICh1bnNpZ25lZCBpbnQpJihsZW9uM19pcnFjdHJsX3JlZ3MtPm1wc3RhdHVzKSk7CiAKQEAgLTIyNiw3ICsyMjYsNyBAQAogCQkJYnJlYWs7CiAJCXVkZWxheSgyMDApOwogCX0KLQlwcmludGsoS0VSTl9JTkZPICJTdGFydGVkIENQVSAlZCBcbiIsICh1bnNpZ25lZCBpbnQpaSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiU3RhcnRlZCBDUFUgJWRcbiIsICh1bnNpZ25lZCBpbnQpaSk7CiAKIAlpZiAoIShjcHVfY2FsbGluX21hcFtpXSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJQcm9jZXNzb3IgJWQgaXMgc3R1Y2suXG4iLCBpKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL25taS5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMKaW5kZXggZDI0MmE3My4uYjI4N2I2MiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvbm1pLmMKQEAgLTIxLDcgKzIxLDYgQEAKIAogI2luY2x1ZGUgPGFzbS9wZXJmX2V2ZW50Lmg+CiAjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgotI2luY2x1ZGUgPGFzbS9sb2NhbC5oPgogI2luY2x1ZGUgPGFzbS9wY3IuaD4KIAogLyogV2UgZG9uJ3QgaGF2ZSBhIHJlYWwgTk1JIG9uIHNwYXJjNjQsIGJ1dCB3ZSBjYW4gZmFrZSBvbmUKQEAgLTExMywxMyArMTEyLDEzIEBACiAJCXRvdWNoZWQgPSAxOwogCX0KIAlpZiAoIXRvdWNoZWQgJiYgX19nZXRfY3B1X3ZhcihsYXN0X2lycV9zdW0pID09IHN1bSkgewotCQlfX3RoaXNfY3B1X2luYyhwZXJfY3B1X3ZhcihhbGVydF9jb3VudGVyKSk7Ci0JCWlmIChfX3RoaXNfY3B1X3JlYWQocGVyX2NwdV92YXIoYWxlcnRfY291bnRlcikpID09IDMwICogbm1pX2h6KQorCQlfX3RoaXNfY3B1X2luYyhhbGVydF9jb3VudGVyKTsKKwkJaWYgKF9fdGhpc19jcHVfcmVhZChhbGVydF9jb3VudGVyKSA9PSAzMCAqIG5taV9oeikKIAkJCWRpZV9ubWkoIkJVRzogTk1JIFdhdGNoZG9nIGRldGVjdGVkIExPQ0tVUCIsCiAJCQkJcmVncywgcGFuaWNfb25fdGltZW91dCk7CiAJfSBlbHNlIHsKIAkJX19nZXRfY3B1X3ZhcihsYXN0X2lycV9zdW0pID0gc3VtOwotCQlfX3RoaXNfY3B1X3dyaXRlKHBlcl9jcHVfdmFyKGFsZXJ0X2NvdW50ZXIpLCAwKTsKKwkJX190aGlzX2NwdV93cml0ZShhbGVydF9jb3VudGVyLCAwKTsKIAl9CiAJaWYgKF9fZ2V0X2NwdV92YXIod2RfZW5hYmxlZCkpIHsKIAkJd3JpdGVfcGljKHBpY2xfdmFsdWUobm1pX2h6KSk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2kuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaS5jCmluZGV4IDM3YjY2YzYuLjVhYzUzOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaS5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3BjaS5jCkBAIC0xMDk1LDMgKzEwOTUsNzggQEAKIAlyZXR1cm4gMDsKIH0KIHN1YnN5c19pbml0Y2FsbChwY2liaW9zX2luaXQpOworCisjaWZkZWYgQ09ORklHX1NZU0ZTCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcGNpX2J1c19zbG90X25hbWVzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCQkJIHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJY29uc3Qgc3RydWN0IHBjaV9zbG90X25hbWVzIHsKKwkJdTMyCXNsb3RfbWFzazsKKwkJY2hhcgluYW1lc1swXTsKKwl9ICpwcm9wOworCWNvbnN0IGNoYXIgKnNwOworCWludCBsZW4sIGk7CisJdTMyIG1hc2s7CisKKwlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5vZGUsICJzbG90LW5hbWVzIiwgJmxlbik7CisJaWYgKCFwcm9wKQorCQlyZXR1cm47CisKKwltYXNrID0gcHJvcC0+c2xvdF9tYXNrOworCXNwID0gcHJvcC0+bmFtZXM7CisKKwlpZiAob2ZwY2lfdmVyYm9zZSkKKwkJcHJpbnRrKCJQQ0k6IE1ha2luZyBzbG90cyBmb3IgWyVzXSBtYXNrWzB4JTAyeF1cbiIsCisJCSAgICAgICBub2RlLT5mdWxsX25hbWUsIG1hc2spOworCisJaSA9IDA7CisJd2hpbGUgKG1hc2spIHsKKwkJc3RydWN0IHBjaV9zbG90ICpwY2lfc2xvdDsKKwkJdTMyIHRoaXNfYml0ID0gMSA8PCBpOworCisJCWlmICghKG1hc2sgJiB0aGlzX2JpdCkpIHsKKwkJCWkrKzsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKG9mcGNpX3ZlcmJvc2UpCisJCQlwcmludGsoIlBDSTogTWFraW5nIHNsb3QgWyVzXVxuIiwgc3ApOworCisJCXBjaV9zbG90ID0gcGNpX2NyZWF0ZV9zbG90KGJ1cywgaSwgc3AsIE5VTEwpOworCQlpZiAoSVNfRVJSKHBjaV9zbG90KSkKKwkJCXByaW50ayhLRVJOX0VSUiAiUENJOiBwY2lfY3JlYXRlX3Nsb3QgcmV0dXJuZWQgJWxkXG4iLAorCQkJICAgICAgIFBUUl9FUlIocGNpX3Nsb3QpKTsKKworCQlzcCArPSBzdHJsZW4oc3ApICsgMTsKKwkJbWFzayAmPSB+dGhpc19iaXQ7CisJCWkrKzsKKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IG9mX3BjaV9zbG90X2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgcGNpX2J1cyAqcGJ1cyA9IE5VTEw7CisKKwl3aGlsZSAoKHBidXMgPSBwY2lfZmluZF9uZXh0X2J1cyhwYnVzKSkgIT0gTlVMTCkgeworCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7CisKKwkJaWYgKHBidXMtPnNlbGYpIHsKKwkJCXN0cnVjdCBkZXZfYXJjaGRhdGEgKnNkID0gcGJ1cy0+c2VsZi0+c3lzZGF0YTsKKworCQkJLyogUENJLT5QQ0kgYnJpZGdlICovCisJCQlub2RlID0gc2QtPnByb21fbm9kZTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBwY2lfcGJtX2luZm8gKnBibSA9IHBidXMtPnN5c2RhdGE7CisKKwkJCS8qIEhvc3QgUENJIGNvbnRyb2xsZXIgKi8KKwkJCW5vZGUgPSBwYm0tPm9wLT5ub2RlOworCQl9CisKKwkJcGNpX2J1c19zbG90X25hbWVzKG5vZGUsIHBidXMpOworCX0KKworCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChvZl9wY2lfc2xvdF9pbml0KTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jCmluZGV4IDc1ZTg4YzAwLi5kMzZhOGQzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jCkBAIC01ODUsOCArNTg1LDYgQEAKIAkJCXdyaXRldyhpdmVjLCBwY2ljLT5wY2ljX3JlZ3MrUENJX0lOVF9TRUxFQ1RfTE8pOwogCQl9CiAgCX0KLQotCXJldHVybjsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3BlcmZfZXZlbnQuYwppbmRleCA5ZjJiMmJhLi5iODY3YWIzIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGVyZl9ldmVudC5jCkBAIC0xMzUzLDcgKzEzNTMsNyBAQAogfQogCiAvKiBMaWtlIHBvd2VycGMgd2UgY2FuJ3QgZ2V0IFBNVSBpbnRlcnJ1cHRzIHdpdGhpbiB0aGUgUE1VIGhhbmRsZXIsCi0gKiBzbyBubyBuZWVkIGZvciBzZXBlcmF0ZSBOTUkgYW5kIElSUSBjaGFpbnMgYXMgb24geDg2LgorICogc28gbm8gbmVlZCBmb3Igc2VwYXJhdGUgTk1JIGFuZCBJUlEgY2hhaW5zIGFzIG9uIHg4Ni4KICAqLwogc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBwZXJmX2NhbGxjaGFpbl9lbnRyeSwgY2FsbGNoYWluKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc182NC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcHJvY2Vzc182NC5jCmluZGV4IGNiNzA0NzYuLmE1Y2YzODYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3Byb2Nlc3NfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wcm9jZXNzXzY0LmMKQEAgLTM1MiwxMiArMzUyLDYgQEAKIAkJZWxzZQogCQkJdC0+dXRyYXBzWzBdLS07CiAJfQotCi0JaWYgKHRlc3RfYW5kX2NsZWFyX3RocmVhZF9mbGFnKFRJRl9QRVJGQ1RSKSkgewotCQl0LT51c2VyX2NudGQwID0gdC0+dXNlcl9jbnRkMSA9IE5VTEw7Ci0JCXQtPnBjcl9yZWcgPSAwOwotCQl3cml0ZV9wY3IoMCk7Ci0JfQogfQogCiB2b2lkIGZsdXNoX3RocmVhZCh2b2lkKQpAQCAtMzcxLDEzICszNjUsNiBAQAogCiAJc2V0X3RocmVhZF93c2F2ZWQoMCk7CiAKLQkvKiBUdXJuIG9mZiBwZXJmb3JtYW5jZSBjb3VudGVycyBpZiBvbi4gKi8KLQlpZiAodGVzdF9hbmRfY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1BFUkZDVFIpKSB7Ci0JCXQtPnVzZXJfY250ZDAgPSB0LT51c2VyX2NudGQxID0gTlVMTDsKLQkJdC0+cGNyX3JlZyA9IDA7Ci0JCXdyaXRlX3BjcigwKTsKLQl9Ci0KIAkvKiBDbGVhciBGUFUgcmVnaXN0ZXIgc3RhdGUuICovCiAJdC0+ZnBzYXZlZFswXSA9IDA7CiAJCkBAIC01OTEsMTYgKzU3OCw2IEBACiAJCXQtPmtyZWdzLT51X3JlZ3NbVVJFR19GUF0gPQogCQkgICgodW5zaWduZWQgbG9uZykgY2hpbGRfc2YpIC0gU1RBQ0tfQklBUzsKIAotCQkvKiBTcGVjaWFsIGNhc2UsIGlmIHdlIGFyZSBzcGF3bmluZyBhIGtlcm5lbCB0aHJlYWQgZnJvbQotCQkgKiBhIHVzZXJzcGFjZSB0YXNrICh1c2VybW9kZSBoZWxwZXIsIE5GUyBvciBzaW1pbGFyKSwgd2UKLQkJICogbXVzdCBkaXNhYmxlIHBlcmZvcm1hbmNlIGNvdW50ZXJzIGluIHRoZSBjaGlsZCBiZWNhdXNlCi0JCSAqIHRoZSBhZGRyZXNzIHNwYWNlIGFuZCBwcm90ZWN0aW9uIHJlYWxtIGFyZSBjaGFuZ2luZy4KLQkJICovCi0JCWlmICh0LT5mbGFncyAmIF9USUZfUEVSRkNUUikgewotCQkJdC0+dXNlcl9jbnRkMCA9IHQtPnVzZXJfY250ZDEgPSBOVUxMOwotCQkJdC0+cGNyX3JlZyA9IDA7Ci0JCQl0LT5mbGFncyAmPSB+X1RJRl9QRVJGQ1RSOwotCQl9CiAJCXQtPmZsYWdzIHw9ICgobG9uZylBU0lfUCA8PCBUSV9GTEFHX0NVUlJFTlRfRFNfU0hJRlQpOwogCQl0LT5rcmVncy0+dV9yZWdzW1VSRUdfRzZdID0gKHVuc2lnbmVkIGxvbmcpIHQ7CiAJCXQtPmtyZWdzLT51X3JlZ3NbVVJFR19HNF0gPSAodW5zaWduZWQgbG9uZykgdC0+dGFzazsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3J0cmFwXzY0LlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9ydHJhcF82NC5TCmluZGV4IGZkM2NlZTQuLjgzZjE4NzMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3J0cmFwXzY0LlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvcnRyYXBfNjQuUwpAQCAtNjUsNDggKzY1LDYgQEAKIAkJYmEscHQJCQkleGNjLCBfX2hhbmRsZV91c2VyX3dpbmRvd3NfY29udGludWUKIAogCQkgYW5kbgkJCSVsMSwgJWw0LCAlbDEKLV9faGFuZGxlX3BlcmZjdHJzOgotCQljYWxsCQkJdXBkYXRlX3BlcmZjdHJzCi0JCSB3cnByCQkJJWcwLCBSVFJBUF9QU1RBVEUsICVwc3RhdGUKLQkJd3JwcgkJCSVnMCwgUlRSQVBfUFNUQVRFX0lSUU9GRiwgJXBzdGF0ZQotCQlsZHViCQkJWyVnNiArIFRJX1dTQVZFRF0sICVvMgotCQlicnoscHQJCQklbzIsIDFmCi0JCSBub3AKLQkJLyogUmVkbyB1c2Vyd2luK3NjaGVkK3NpZyBjaGVja3MgKi8KLQkJY2FsbAkJCWZhdWx0X2luX3VzZXJfd2luZG93cwotCi0JCSB3cnByCQkJJWcwLCBSVFJBUF9QU1RBVEUsICVwc3RhdGUKLQkJd3JwcgkJCSVnMCwgUlRSQVBfUFNUQVRFX0lSUU9GRiwgJXBzdGF0ZQotCQlsZHgJCQlbJWc2ICsgVElfRkxBR1NdLCAlbDAKLQkJYW5kY2MJCQklbDAsIF9USUZfTkVFRF9SRVNDSEVELCAlZzAKLQkJYmUscHQJCQkleGNjLCAxZgotCi0JCSBub3AKLQkJY2FsbAkJCXNjaGVkdWxlCi0JCSB3cnByCQkJJWcwLCBSVFJBUF9QU1RBVEUsICVwc3RhdGUKLQkJd3JwcgkJCSVnMCwgUlRSQVBfUFNUQVRFX0lSUU9GRiwgJXBzdGF0ZQotCQlsZHgJCQlbJWc2ICsgVElfRkxBR1NdLCAlbDAKLTE6CQlhbmRjYwkJCSVsMCwgX1RJRl9ET19OT1RJRllfUkVTVU1FX01BU0ssICVnMAotCi0JCWJlLHB0CQkJJXhjYywgX19oYW5kbGVfcGVyZmN0cnNfY29udGludWUKLQkJIHNldGhpCQkJJWhpKFRTVEFURV9QRUYpLCAlbzAKLQkJbW92CQkJJWw1LCAlbzEKLQkJYWRkCQkJJXNwLCBQVFJFR1NfT0ZGLCAlbzAKLQkJbW92CQkJJWwwLCAlbzIKLQkJY2FsbAkJCWRvX25vdGlmeV9yZXN1bWUKLQotCQkgd3JwcgkJCSVnMCwgUlRSQVBfUFNUQVRFLCAlcHN0YXRlCi0JCXdycHIJCQklZzAsIFJUUkFQX1BTVEFURV9JUlFPRkYsICVwc3RhdGUKLQkJLyogU2lnbmFsIGRlbGl2ZXJ5IGNhbiBtb2RpZnkgcHRfcmVncyB0c3RhdGUsIHNvIHdlIG11c3QKLQkJICogcmVsb2FkIGl0LgotCQkgKi8KLQkJbGR4CQkJWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9UU1RBVEVdLCAlbDEKLQkJc2V0aGkJCQklaGkoMHhmIDw8IDIwKSwgJWw0Ci0JCWFuZAkJCSVsMSwgJWw0LCAlbDQKLQkJYW5kbgkJCSVsMSwgJWw0LCAlbDEKLQkJYmEscHQJCQkleGNjLCBfX2hhbmRsZV9wZXJmY3Ryc19jb250aW51ZQotCi0JCSBzZXRoaQkJCSVoaShUU1RBVEVfUEVGKSwgJW8wCiBfX2hhbmRsZV91c2VyZnB1OgogCQlyZAkJCSVmcHJzLCAlbDUKIAkJYW5kY2MJCQklbDUsIEZQUlNfRkVGLCAlZzAKQEAgLTE0OSwxMSArMTA3LDExIEBACiBydHJhcF9pcnE6CiBydHJhcDoKICNpZm5kZWYgQ09ORklHX1NNUAotCQlzZXRoaQkJCSVoaShwZXJfY3B1X19fX2NwdV9kYXRhKSwgJWwwCi0JCWxkdXcJCQlbJWwwICsgJWxvKHBlcl9jcHVfX19fY3B1X2RhdGEpXSwgJWwxCisJCXNldGhpCQkJJWhpKF9fY3B1X2RhdGEpLCAlbDAKKwkJbGR1dwkJCVslbDAgKyAlbG8oX19jcHVfZGF0YSldLCAlbDEKICNlbHNlCi0JCXNldGhpCQkJJWhpKHBlcl9jcHVfX19fY3B1X2RhdGEpLCAlbDAKLQkJb3IJCQklbDAsICVsbyhwZXJfY3B1X19fX2NwdV9kYXRhKSwgJWwwCisJCXNldGhpCQkJJWhpKF9fY3B1X2RhdGEpLCAlbDAKKwkJb3IJCQklbDAsICVsbyhfX2NwdV9kYXRhKSwgJWwwCiAJCWxkdXcJCQlbJWwwICsgJWc1XSwgJWwxCiAjZW5kaWYKIAkJY21wCQkJJWwxLCAwCkBAIC0xOTEsOSArMTQ5LDkgQEAKIAkJICogdGFrZSB1bnRpbCB0aGUgbmV4dCBsb2NhbCBJUlEgYmVmb3JlIHRoZSBzaWduYWwvcmVzY2hlZAogCQkgKiBldmVudCB3b3VsZCBiZSBoYW5kbGVkLgogCQkgKgotCQkgKiBUaGlzIGFsc28gbWVhbnMgdGhhdCBpZiB3ZSBoYXZlIHRvIGRlYWwgd2l0aCBwZXJmb3JtYW5jZQotCQkgKiBjb3VudGVycyBvciB1c2VyIHdpbmRvd3MsIHdlIGhhdmUgdG8gcmVkbyBhbGwgb2YgdGhlc2UKLQkJICogc2NoZWQrc2lnbmFsIGNoZWNrcyB3aXRoIElSUXMgZGlzYWJsZWQuCisJCSAqIFRoaXMgYWxzbyBtZWFucyB0aGF0IGlmIHdlIGhhdmUgdG8gZGVhbCB3aXRoIHVzZXIKKwkJICogd2luZG93cywgd2UgaGF2ZSB0byByZWRvIGFsbCBvZiB0aGVzZSBzY2hlZCtzaWduYWwgY2hlY2tzCisJCSAqIHdpdGggSVJRcyBkaXNhYmxlZC4KIAkJICovCiB0b191c2VyOgl3cnByCQkJJWcwLCBSVFJBUF9QU1RBVEVfSVJRT0ZGLCAlcHN0YXRlCiAJCXdycHIJCQkwLCAlcGlsCkBAIC0yMTQsMTIgKzE3Miw4IEBACiAJCWJybnoscG4JCQklbzIsIF9faGFuZGxlX3VzZXJfd2luZG93cwogCQkgbm9wCiBfX2hhbmRsZV91c2VyX3dpbmRvd3NfY29udGludWU6Ci0JCWxkeAkJCVslZzYgKyBUSV9GTEFHU10sICVsNQotCQlhbmRjYwkJCSVsNSwgX1RJRl9QRVJGQ1RSLCAlZzAKIAkJc2V0aGkJCQklaGkoVFNUQVRFX1BFRiksICVvMAotCQlibmUscG4JCQkleGNjLCBfX2hhbmRsZV9wZXJmY3RycwotX19oYW5kbGVfcGVyZmN0cnNfY29udGludWU6Ci0JCSBhbmRjYwkJCSVsMSwgJW8wLCAlZzAKKwkJYW5kY2MJCQklbDEsICVvMCwgJWcwCiAKIAkJLyogVGhpcyBmcGRlcHRoIGNsZWFyIGlzIG5lY2Vzc2FyeSBmb3Igbm9uLXN5c2NhbGwgcnRyYXBzIG9ubHkgKi8KIHVzZXJfbm93b3JrOgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfMzIuYyBiL2FyY2gvc3BhcmMva2VybmVsL3NldHVwXzMyLmMKaW5kZXggOWJlMmFmNS4uYjIyY2U2MSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc2V0dXBfMzIuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zZXR1cF8zMi5jCkBAIC05NSw4ICs5NSw2IEBACiAJCQkgICAgICJub3Bcblx0IgogCQkJICAgICAibm9wXG5cdCIgOiA6ICJyIiAocHJvbV90YnIpKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlyZXR1cm47CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgYm9vdF9mbGFncyBfX2luaXRkYXRhID0gMDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N1bjRkX3NtcC5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfc21wLmMKaW5kZXggNjg3OTFjYS4uNDgyZjJhYiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfc21wLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3VuNGRfc21wLmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogCQkJc21wX3Blbmd1aW5fY3RhYmxlLnJlZ19zaXplID0gMDsKIAogCQkJLyogd2hpcnJyLCB3aGlycnIsIHdoaXJycnJycnJyci4uLiAqLwotCQkJU01QX1BSSU5USygoIlN0YXJ0aW5nIENQVSAlZCBhdCAlcCBcbiIsIGksIGVudHJ5KSk7CisJCQlTTVBfUFJJTlRLKCgiU3RhcnRpbmcgQ1BVICVkIGF0ICVwXG4iLCBpLCBlbnRyeSkpOwogCQkJbG9jYWxfZmx1c2hfY2FjaGVfYWxsKCk7CiAJCQlwcm9tX3N0YXJ0Y3B1KGNwdV9ub2RlLAogCQkJCSAgICAgICZzbXBfcGVuZ3Vpbl9jdGFibGUsIDAsIChjaGFyICopZW50cnkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzMzIuUyBiL2FyY2gvc3BhcmMva2VybmVsL3N5czMyLlMKaW5kZXggZTcwNjExMy4uNDZhNzZiYSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzMzIuUworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXMzMi5TCkBAIC01MSw3ICs1MSw2IEBACiBTSUdOMShzeXMzMl93YWl0NCwgY29tcGF0X3N5c193YWl0NCwgJW8yKQogU0lHTjEoc3lzMzJfY3JlYXQsIHN5c19jcmVhdCwgJW8xKQogU0lHTjEoc3lzMzJfbWtub2QsIHN5c19ta25vZCwgJW8xKQotU0lHTjEoc3lzMzJfcGVyZmN0ciwgc3lzX3BlcmZjdHIsICVvMCkKIFNJR04xKHN5czMyX3Vtb3VudCwgc3lzX3Vtb3VudCwgJW8xKQogU0lHTjEoc3lzMzJfc2lnbmFsLCBzeXNfc2lnbmFsLCAlbzApCiBTSUdOMShzeXMzMl9hY2Nlc3MsIHN5c19hY2Nlc3MsICVvMSkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyYzMyLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmMzMi5jCmluZGV4IGRjMGFjMTkuLmRhZGVkM2IgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyYzMyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjMzIuYwpAQCAtNDMsNyArNDMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvdmZzLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CiAKICNpbmNsdWRlIDxhc20vdHlwZXMuaD4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c19zcGFyY18zMi5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjXzMyLmMKaW5kZXggM2E4MmU2NS4uZWU5OTViNyAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjXzMyLmMKQEAgLTk4LDExOSArOTgsNiBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotLyoKLSAqIHN5c19pcGMoKSBpcyB0aGUgZGUtbXVsdGlwbGV4ZXIgZm9yIHRoZSBTeXNWIElQQyBjYWxscy4uCi0gKgotICogVGhpcyBpcyByZWFsbHkgaG9ycmlibHkgdWdseS4KLSAqLwotCi1hc21saW5rYWdlIGludCBzeXNfaXBjICh1aW50IGNhbGwsIGludCBmaXJzdCwgaW50IHNlY29uZCwgaW50IHRoaXJkLCB2b2lkIF9fdXNlciAqcHRyLCBsb25nIGZpZnRoKQotewotCWludCB2ZXJzaW9uLCBlcnI7Ci0KLQl2ZXJzaW9uID0gY2FsbCA+PiAxNjsgLyogaGFjayBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwotCWNhbGwgJj0gMHhmZmZmOwotCi0JaWYgKGNhbGwgPD0gU0VNQ1RMKQotCQlzd2l0Y2ggKGNhbGwpIHsKLQkJY2FzZSBTRU1PUDoKLQkJCWVyciA9IHN5c19zZW10aW1lZG9wIChmaXJzdCwgKHN0cnVjdCBzZW1idWYgX191c2VyICopcHRyLCBzZWNvbmQsIE5VTEwpOwotCQkJZ290byBvdXQ7Ci0JCWNhc2UgU0VNVElNRURPUDoKLQkJCWVyciA9IHN5c19zZW10aW1lZG9wIChmaXJzdCwgKHN0cnVjdCBzZW1idWYgX191c2VyICopcHRyLCBzZWNvbmQsIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopIGZpZnRoKTsKLQkJCWdvdG8gb3V0OwotCQljYXNlIFNFTUdFVDoKLQkJCWVyciA9IHN5c19zZW1nZXQgKGZpcnN0LCBzZWNvbmQsIHRoaXJkKTsKLQkJCWdvdG8gb3V0OwotCQljYXNlIFNFTUNUTDogewotCQkJdW5pb24gc2VtdW4gZm91cnRoOwotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWlmICghcHRyKQotCQkJCWdvdG8gb3V0OwotCQkJZXJyID0gLUVGQVVMVDsKLQkJCWlmIChnZXRfdXNlcihmb3VydGguX19wYWQsCi0JCQkJICAgICAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKilwdHIpKQotCQkJCWdvdG8gb3V0OwotCQkJZXJyID0gc3lzX3NlbWN0bCAoZmlyc3QsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCk7Ci0JCQlnb3RvIG91dDsKLQkJCX0KLQkJZGVmYXVsdDoKLQkJCWVyciA9IC1FTk9TWVM7Ci0JCQlnb3RvIG91dDsKLQkJfQotCWlmIChjYWxsIDw9IE1TR0NUTCkgCi0JCXN3aXRjaCAoY2FsbCkgewotCQljYXNlIE1TR1NORDoKLQkJCWVyciA9IHN5c19tc2dzbmQgKGZpcnN0LCAoc3RydWN0IG1zZ2J1ZiBfX3VzZXIgKikgcHRyLCAKLQkJCQkJICBzZWNvbmQsIHRoaXJkKTsKLQkJCWdvdG8gb3V0OwotCQljYXNlIE1TR1JDVjoKLQkJCXN3aXRjaCAodmVyc2lvbikgewotCQkJY2FzZSAwOiB7Ci0JCQkJc3RydWN0IGlwY19rbHVkZ2UgdG1wOwotCQkJCWVyciA9IC1FSU5WQUw7Ci0JCQkJaWYgKCFwdHIpCi0JCQkJCWdvdG8gb3V0OwotCQkJCWVyciA9IC1FRkFVTFQ7Ci0JCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIChzdHJ1Y3QgaXBjX2tsdWRnZSBfX3VzZXIgKikgcHRyLCBzaXplb2YgKHRtcCkpKQotCQkJCQlnb3RvIG91dDsKLQkJCQllcnIgPSBzeXNfbXNncmN2IChmaXJzdCwgdG1wLm1zZ3AsIHNlY29uZCwgdG1wLm1zZ3R5cCwgdGhpcmQpOwotCQkJCWdvdG8gb3V0OwotCQkJCX0KLQkJCWNhc2UgMTogZGVmYXVsdDoKLQkJCQllcnIgPSBzeXNfbXNncmN2IChmaXJzdCwKLQkJCQkJCSAgKHN0cnVjdCBtc2didWYgX191c2VyICopIHB0ciwKLQkJCQkJCSAgc2Vjb25kLCBmaWZ0aCwgdGhpcmQpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQljYXNlIE1TR0dFVDoKLQkJCWVyciA9IHN5c19tc2dnZXQgKChrZXlfdCkgZmlyc3QsIHNlY29uZCk7Ci0JCQlnb3RvIG91dDsKLQkJY2FzZSBNU0dDVEw6Ci0JCQllcnIgPSBzeXNfbXNnY3RsIChmaXJzdCwgc2Vjb25kLCAoc3RydWN0IG1zcWlkX2RzIF9fdXNlciAqKSBwdHIpOwotCQkJZ290byBvdXQ7Ci0JCWRlZmF1bHQ6Ci0JCQllcnIgPSAtRU5PU1lTOwotCQkJZ290byBvdXQ7Ci0JCX0KLQlpZiAoY2FsbCA8PSBTSE1DVEwpIAotCQlzd2l0Y2ggKGNhbGwpIHsKLQkJY2FzZSBTSE1BVDoKLQkJCXN3aXRjaCAodmVyc2lvbikgewotCQkJY2FzZSAwOiBkZWZhdWx0OiB7Ci0JCQkJdWxvbmcgcmFkZHI7Ci0JCQkJZXJyID0gZG9fc2htYXQgKGZpcnN0LCAoY2hhciBfX3VzZXIgKikgcHRyLCBzZWNvbmQsICZyYWRkcik7Ci0JCQkJaWYgKGVycikKLQkJCQkJZ290byBvdXQ7Ci0JCQkJZXJyID0gLUVGQVVMVDsKLQkJCQlpZiAocHV0X3VzZXIgKHJhZGRyLCAodWxvbmcgX191c2VyICopIHRoaXJkKSkKLQkJCQkJZ290byBvdXQ7Ci0JCQkJZXJyID0gMDsKLQkJCQlnb3RvIG91dDsKLQkJCQl9Ci0JCQljYXNlIDE6CS8qIGlCQ1MyIGVtdWxhdG9yIGVudHJ5IHBvaW50ICovCi0JCQkJZXJyID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJY2FzZSBTSE1EVDogCi0JCQllcnIgPSBzeXNfc2htZHQgKChjaGFyIF9fdXNlciAqKXB0cik7Ci0JCQlnb3RvIG91dDsKLQkJY2FzZSBTSE1HRVQ6Ci0JCQllcnIgPSBzeXNfc2htZ2V0IChmaXJzdCwgc2Vjb25kLCB0aGlyZCk7Ci0JCQlnb3RvIG91dDsKLQkJY2FzZSBTSE1DVEw6Ci0JCQllcnIgPSBzeXNfc2htY3RsIChmaXJzdCwgc2Vjb25kLCAoc3RydWN0IHNobWlkX2RzIF9fdXNlciAqKSBwdHIpOwotCQkJZ290byBvdXQ7Ci0JCWRlZmF1bHQ6Ci0JCQllcnIgPSAtRU5PU1lTOwotCQkJZ290byBvdXQ7Ci0JCX0KLQllbHNlCi0JCWVyciA9IC1FTk9TWVM7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQogaW50IHNwYXJjX21tYXBfY2hlY2sodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbikKIHsKIAlpZiAoQVJDSF9TVU40QyAmJgpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzX3NwYXJjXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYwppbmRleCBkNzdmNTQzLi4zZDQzNWM0IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNfc3BhcmNfNjQuYwpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vdXRyYXAuaD4KLSNpbmNsdWRlIDxhc20vcGVyZmN0ci5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KIAogI2luY2x1ZGUgImVudHJ5LmgiCkBAIC00MjcsNyArNDI2LDcgQEAKICAqIFRoaXMgaXMgcmVhbGx5IGhvcnJpYmx5IHVnbHkuCiAgKi8KIAotU1lTQ0FMTF9ERUZJTkU2KGlwYywgdW5zaWduZWQgaW50LCBjYWxsLCBpbnQsIGZpcnN0LCB1bnNpZ25lZCBsb25nLCBzZWNvbmQsCitTWVNDQUxMX0RFRklORTYoc3BhcmNfaXBjLCB1bnNpZ25lZCBpbnQsIGNhbGwsIGludCwgZmlyc3QsIHVuc2lnbmVkIGxvbmcsIHNlY29uZCwKIAkJdW5zaWduZWQgbG9uZywgdGhpcmQsIHZvaWQgX191c2VyICosIHB0ciwgbG9uZywgZmlmdGgpCiB7CiAJbG9uZyBlcnI7CkBAIC01MTEsMTcgKzUxMCw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotU1lTQ0FMTF9ERUZJTkUxKHNwYXJjNjRfbmV3dW5hbWUsIHN0cnVjdCBuZXdfdXRzbmFtZSBfX3VzZXIgKiwgbmFtZSkKLXsKLQlpbnQgcmV0ID0gc3lzX25ld3VuYW1lKG5hbWUpOwotCQotCWlmIChjdXJyZW50LT5wZXJzb25hbGl0eSA9PSBQRVJfTElOVVgzMiAmJiAhcmV0KSB7Ci0JCXJldCA9IChjb3B5X3RvX3VzZXIobmFtZS0+bWFjaGluZSwgInNwYXJjXDBcMCIsIDgpCi0JCSAgICAgICA/IC1FRkFVTFQgOiAwKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQogU1lTQ0FMTF9ERUZJTkUxKHNwYXJjNjRfcGVyc29uYWxpdHksIHVuc2lnbmVkIGxvbmcsIHBlcnNvbmFsaXR5KQogewogCWludCByZXQ7CkBAIC03NjYsMTA5ICs3NTQsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIEludm9rZWQgYnkgcnRyYXAgY29kZSB0byB1cGRhdGUgcGVyZm9ybWFuY2UgY291bnRlcnMgaW4KLSAqIHVzZXIgc3BhY2UuCi0gKi8KLWFzbWxpbmthZ2Ugdm9pZCB1cGRhdGVfcGVyZmN0cnModm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIHBpYywgdG1wOwotCi0JcmVhZF9waWMocGljKTsKLQl0bXAgPSAoY3VycmVudF90aHJlYWRfaW5mbygpLT5rZXJuZWxfY250ZDAgKz0gKHVuc2lnbmVkIGludClwaWMpOwotCV9fcHV0X3VzZXIodG1wLCBjdXJyZW50X3RocmVhZF9pbmZvKCktPnVzZXJfY250ZDApOwotCXRtcCA9IChjdXJyZW50X3RocmVhZF9pbmZvKCktPmtlcm5lbF9jbnRkMSArPSAocGljID4+IDMyKSk7Ci0JX19wdXRfdXNlcih0bXAsIGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXNlcl9jbnRkMSk7Ci0JcmVzZXRfcGljKCk7Ci19Ci0KLVNZU0NBTExfREVGSU5FNChwZXJmY3RyLCBpbnQsIG9wY29kZSwgdW5zaWduZWQgbG9uZywgYXJnMCwKLQkJdW5zaWduZWQgbG9uZywgYXJnMSwgdW5zaWduZWQgbG9uZywgYXJnMikKLXsKLQlpbnQgZXJyID0gMDsKLQotCXN3aXRjaChvcGNvZGUpIHsKLQljYXNlIFBFUkZDVFJfT046Ci0JCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cGNyX3JlZyA9IGFyZzI7Ci0JCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXNlcl9jbnRkMCA9ICh1NjQgX191c2VyICopIGFyZzA7Ci0JCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXNlcl9jbnRkMSA9ICh1NjQgX191c2VyICopIGFyZzE7Ci0JCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+a2VybmVsX2NudGQwID0KLQkJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+a2VybmVsX2NudGQxID0gMDsKLQkJd3JpdGVfcGNyKGFyZzIpOwotCQlyZXNldF9waWMoKTsKLQkJc2V0X3RocmVhZF9mbGFnKFRJRl9QRVJGQ1RSKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFBFUkZDVFJfT0ZGOgotCQllcnIgPSAtRUlOVkFMOwotCQlpZiAodGVzdF90aHJlYWRfZmxhZyhUSUZfUEVSRkNUUikpIHsKLQkJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXNlcl9jbnRkMCA9Ci0JCQkJY3VycmVudF90aHJlYWRfaW5mbygpLT51c2VyX2NudGQxID0gTlVMTDsKLQkJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cGNyX3JlZyA9IDA7Ci0JCQl3cml0ZV9wY3IoMCk7Ci0JCQljbGVhcl90aHJlYWRfZmxhZyhUSUZfUEVSRkNUUik7Ci0JCQllcnIgPSAwOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBQRVJGQ1RSX1JFQUQ6IHsKLQkJdW5zaWduZWQgbG9uZyBwaWMsIHRtcDsKLQotCQlpZiAoIXRlc3RfdGhyZWFkX2ZsYWcoVElGX1BFUkZDVFIpKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmVhZF9waWMocGljKTsKLQkJdG1wID0gKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+a2VybmVsX2NudGQwICs9ICh1bnNpZ25lZCBpbnQpcGljKTsKLQkJZXJyIHw9IF9fcHV0X3VzZXIodG1wLCBjdXJyZW50X3RocmVhZF9pbmZvKCktPnVzZXJfY250ZDApOwotCQl0bXAgPSAoY3VycmVudF90aHJlYWRfaW5mbygpLT5rZXJuZWxfY250ZDEgKz0gKHBpYyA+PiAzMikpOwotCQllcnIgfD0gX19wdXRfdXNlcih0bXAsIGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+dXNlcl9jbnRkMSk7Ci0JCXJlc2V0X3BpYygpOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIFBFUkZDVFJfQ0xSUElDOgotCQlpZiAoIXRlc3RfdGhyZWFkX2ZsYWcoVElGX1BFUkZDVFIpKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQkJY3VycmVudF90aHJlYWRfaW5mbygpLT5rZXJuZWxfY250ZDAgPQotCQkJY3VycmVudF90aHJlYWRfaW5mbygpLT5rZXJuZWxfY250ZDEgPSAwOwotCQlyZXNldF9waWMoKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFBFUkZDVFJfU0VUUENSOiB7Ci0JCXU2NCBfX3VzZXIgKnVzZXJfcGNyID0gKHU2NCBfX3VzZXIgKilhcmcwOwotCi0JCWlmICghdGVzdF90aHJlYWRfZmxhZyhUSUZfUEVSRkNUUikpIHsKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQllcnIgfD0gX19nZXRfdXNlcihjdXJyZW50X3RocmVhZF9pbmZvKCktPnBjcl9yZWcsIHVzZXJfcGNyKTsKLQkJd3JpdGVfcGNyKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cGNyX3JlZyk7Ci0JCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+a2VybmVsX2NudGQwID0KLQkJCWN1cnJlbnRfdGhyZWFkX2luZm8oKS0+a2VybmVsX2NudGQxID0gMDsKLQkJcmVzZXRfcGljKCk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgUEVSRkNUUl9HRVRQQ1I6IHsKLQkJdTY0IF9fdXNlciAqdXNlcl9wY3IgPSAodTY0IF9fdXNlciAqKWFyZzA7Ci0KLQkJaWYgKCF0ZXN0X3RocmVhZF9mbGFnKFRJRl9QRVJGQ1RSKSkgewotCQkJZXJyID0gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JCWVyciB8PSBfX3B1dF91c2VyKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cGNyX3JlZywgdXNlcl9wY3IpOwotCQlicmVhazsKLQl9Ci0KLQlkZWZhdWx0OgotCQllcnIgPSAtRUlOVkFMOwotCQlicmVhazsKLQl9OwotCXJldHVybiBlcnI7Ci19Ci0KIC8qCiAgKiBEbyBhIHN5c3RlbSBjYWxsIGZyb20ga2VybmVsIGluc3RlYWQgb2YgY2FsbGluZyBzeXNfZXhlY3ZlIHNvIHdlCiAgKiBlbmQgdXAgd2l0aCBwcm9wZXIgcHRfcmVncy4KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c2NhbGxzLlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXNjYWxscy5TCmluZGV4IGRjNGE0NTguLjFkN2UyNzQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3N5c2NhbGxzLlMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzY2FsbHMuUwpAQCAtMTEwLDMxICsxMTAsMTIgQEAKIAogCS5nbG9ibAlyZXRfZnJvbV9zeXNjYWxsCiByZXRfZnJvbV9zeXNjYWxsOgotCS8qIENsZWFyIGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+bmV3X2NoaWxkLCBhbmQKLQkgKiBjaGVjayBwZXJmb3JtYW5jZSBjb3VudGVyIHN0dWZmIHRvby4KLQkgKi8KKwkvKiBDbGVhciBjdXJyZW50X3RocmVhZF9pbmZvKCktPm5ld19jaGlsZC4gKi8KIAlzdGIJJWcwLCBbJWc2ICsgVElfTkVXX0NISUxEXQogCWxkeAlbJWc2ICsgVElfRkxBR1NdLCAlbDAKIAljYWxsCXNjaGVkdWxlX3RhaWwKIAkgbW92CSVnNywgJW8wCi0JYW5kY2MJJWwwLCBfVElGX1BFUkZDVFIsICVnMAotCWJlLHB0CSVpY2MsIDFmCi0JIG5vcAotCWxkeAlbJWc2ICsgVElfUENSXSwgJW83Ci0Jd3IJJWcwLCAlbzcsICVwY3IKLQotCS8qIEJsYWNrYmlyZCBlcnJhdGEgd29ya2Fyb3VuZC4gIFNlZSBjb21tZW50YXJ5IGluCi0JICogc21wLmM6c21wX3BlcmNwdV90aW1lcl9pbnRlcnJ1cHQoKSBmb3IgbW9yZQotCSAqIGluZm9ybWF0aW9uLgotCSAqLwotCWJhLHB0CSV4Y2MsIDk5ZgotCSBub3AKLQotCS5hbGlnbgk2NAotOTk6CXdyCSVnMCwgJWcwLCAlcGljCi0JcmQJJXBpYywgJWcwCi0KLTE6CWJhLHB0CSV4Y2MsIHJldF9zeXNfY2FsbAorCWJhLHB0CSV4Y2MsIHJldF9zeXNfY2FsbAogCSBsZHgJWyVzcCArIFBUUkVHU19PRkYgKyBQVF9WOV9JMF0sICVvMAogCiAJLmdsb2JsCXNwYXJjX2V4aXQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHMuaCBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHMuaAppbmRleCBkMmY5OTlhLi4xMTg3NTljIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzLmgKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJscy5oCkBAIC02LDE1ICs2LDEyIEBACiAjaW5jbHVkZSA8YXNtL3V0cmFwLmg+CiAjaW5jbHVkZSA8YXNtL3NpZ25hbC5oPgogCi1zdHJ1Y3QgbmV3X3V0c25hbWU7Ci0KIGV4dGVybiBhc21saW5rYWdlIHVuc2lnbmVkIGxvbmcgc3lzX2dldHBhZ2VzaXplKHZvaWQpOwogZXh0ZXJuIGFzbWxpbmthZ2UgbG9uZyBzcGFyY19waXBlKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLWV4dGVybiBhc21saW5rYWdlIGxvbmcgc3lzX2lwYyh1bnNpZ25lZCBpbnQgY2FsbCwgaW50IGZpcnN0LAorZXh0ZXJuIGFzbWxpbmthZ2UgbG9uZyBzeXNfc3BhcmNfaXBjKHVuc2lnbmVkIGludCBjYWxsLCBpbnQgZmlyc3QsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBzZWNvbmQsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyB0aGlyZCwKIAkJCSAgICAgICB2b2lkIF9fdXNlciAqcHRyLCBsb25nIGZpZnRoKTsKLWV4dGVybiBhc21saW5rYWdlIGxvbmcgc3BhcmM2NF9uZXd1bmFtZShzdHJ1Y3QgbmV3X3V0c25hbWUgX191c2VyICpuYW1lKTsKIGV4dGVybiBhc21saW5rYWdlIGxvbmcgc3BhcmM2NF9wZXJzb25hbGl0eSh1bnNpZ25lZCBsb25nIHBlcnNvbmFsaXR5KTsKIGV4dGVybiBhc21saW5rYWdlIGxvbmcgc3lzNjRfbXVubWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZV90IGxlbik7CiBleHRlcm4gYXNtbGlua2FnZSB1bnNpZ25lZCBsb25nIHN5czY0X21yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsCkBAIC0zNiw4ICszMyw2IEBACiAJCQkJCXN0cnVjdCBzaWdhY3Rpb24gX191c2VyICpvYWN0LAogCQkJCQl2b2lkIF9fdXNlciAqcmVzdG9yZXIsCiAJCQkJCXNpemVfdCBzaWdzZXRzaXplKTsKLWV4dGVybiBhc21saW5rYWdlIGxvbmcgc3lzX3BlcmZjdHIoaW50IG9wY29kZSwgdW5zaWduZWQgbG9uZyBhcmcwLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgYXJnMSwgdW5zaWduZWQgbG9uZyBhcmcyKTsKIAogZXh0ZXJuIGFzbWxpbmthZ2Ugdm9pZCBzcGFyYzY0X3NldF9jb250ZXh0KHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiBhc21saW5rYWdlIHZvaWQgc3BhcmM2NF9nZXRfY29udGV4dChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzY0LlMgYi9hcmNoL3NwYXJjL2tlcm5lbC9zeXN0YmxzXzY0LlMKaW5kZXggZTU3NWI0Ni4uOWRiMDU4ZCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9rZXJuZWwvc3lzdGJsc182NC5TCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3N5c3RibHNfNjQuUwpAQCAtMjEsNyArMjEsNyBAQAogLyowKi8JLndvcmQgc3lzX3Jlc3RhcnRfc3lzY2FsbCwgc3lzMzJfZXhpdCwgc3lzX2ZvcmssIHN5c19yZWFkLCBzeXNfd3JpdGUKIC8qNSovCS53b3JkIHN5czMyX29wZW4sIHN5c19jbG9zZSwgc3lzMzJfd2FpdDQsIHN5czMyX2NyZWF0LCBzeXNfbGluawogLyoxMCovICAud29yZCBzeXNfdW5saW5rLCBzdW5vc19leGVjdiwgc3lzX2NoZGlyLCBzeXNfY2hvd24xNiwgc3lzMzJfbWtub2QKLS8qMTUqLwkud29yZCBzeXNfY2htb2QsIHN5c19sY2hvd24xNiwgc3lzX2Jyaywgc3lzMzJfcGVyZmN0ciwgc3lzMzJfbHNlZWsKKy8qMTUqLwkud29yZCBzeXNfY2htb2QsIHN5c19sY2hvd24xNiwgc3lzX2Jyaywgc3lzX25pc19zeXNjYWxsLCBzeXMzMl9sc2VlawogLyoyMCovCS53b3JkIHN5c19nZXRwaWQsIHN5c19jYXBnZXQsIHN5c19jYXBzZXQsIHN5c19zZXR1aWQxNiwgc3lzX2dldHVpZDE2CiAvKjI1Ki8JLndvcmQgc3lzMzJfdm1zcGxpY2UsIGNvbXBhdF9zeXNfcHRyYWNlLCBzeXNfYWxhcm0sIHN5czMyX3NpZ2FsdHN0YWNrLCBzeXNfcGF1c2UKIC8qMzAqLwkud29yZCBjb21wYXRfc3lzX3V0aW1lLCBzeXNfbGNob3duLCBzeXNfZmNob3duLCBzeXMzMl9hY2Nlc3MsIHN5czMyX25pY2UKQEAgLTU1LDcgKzU1LDcgQEAKIC8qMTcwKi8JLndvcmQgc3lzMzJfbHNldHhhdHRyLCBzeXMzMl9mc2V0eGF0dHIsIHN5c19nZXR4YXR0ciwgc3lzX2xnZXR4YXR0ciwgY29tcGF0X3N5c19nZXRkZW50cwogCS53b3JkIHN5c19zZXRzaWQsIHN5c19mY2hkaXIsIHN5czMyX2ZnZXR4YXR0ciwgc3lzX2xpc3R4YXR0ciwgc3lzX2xsaXN0eGF0dHIKIC8qMTgwKi8JLndvcmQgc3lzMzJfZmxpc3R4YXR0ciwgc3lzX3JlbW92ZXhhdHRyLCBzeXNfbHJlbW92ZXhhdHRyLCBjb21wYXRfc3lzX3NpZ3BlbmRpbmcsIHN5c19uaV9zeXNjYWxsCi0JLndvcmQgc3lzMzJfc2V0cGdpZCwgc3lzMzJfZnJlbW92ZXhhdHRyLCBzeXMzMl90a2lsbCwgc3lzMzJfZXhpdF9ncm91cCwgc3lzX3NwYXJjNjRfbmV3dW5hbWUKKwkud29yZCBzeXMzMl9zZXRwZ2lkLCBzeXMzMl9mcmVtb3ZleGF0dHIsIHN5czMyX3RraWxsLCBzeXMzMl9leGl0X2dyb3VwLCBzeXNfbmV3dW5hbWUKIC8qMTkwKi8JLndvcmQgc3lzMzJfaW5pdF9tb2R1bGUsIHN5c19zcGFyYzY0X3BlcnNvbmFsaXR5LCBzeXNfcmVtYXBfZmlsZV9wYWdlcywgc3lzMzJfZXBvbGxfY3JlYXRlLCBzeXMzMl9lcG9sbF9jdGwKIAkud29yZCBzeXMzMl9lcG9sbF93YWl0LCBzeXMzMl9pb3ByaW9fc2V0LCBzeXNfZ2V0cHBpZCwgc3lzMzJfc2lnYWN0aW9uLCBzeXNfc2dldG1hc2sKIC8qMjAwKi8JLndvcmQgc3lzMzJfc3NldG1hc2ssIHN5c19zaWdzdXNwZW5kLCBjb21wYXRfc3lzX25ld2xzdGF0LCBzeXNfdXNlbGliLCBjb21wYXRfc3lzX29sZF9yZWFkZGlyCkBAIC05Niw3ICs5Niw3IEBACiAvKjAqLwkud29yZCBzeXNfcmVzdGFydF9zeXNjYWxsLCBzcGFyY19leGl0LCBzeXNfZm9yaywgc3lzX3JlYWQsIHN5c193cml0ZQogLyo1Ki8JLndvcmQgc3lzX29wZW4sIHN5c19jbG9zZSwgc3lzX3dhaXQ0LCBzeXNfY3JlYXQsIHN5c19saW5rCiAvKjEwKi8gIC53b3JkIHN5c191bmxpbmssIHN5c19uaXNfc3lzY2FsbCwgc3lzX2NoZGlyLCBzeXNfY2hvd24sIHN5c19ta25vZAotLyoxNSovCS53b3JkIHN5c19jaG1vZCwgc3lzX2xjaG93biwgc3lzX2Jyaywgc3lzX3BlcmZjdHIsIHN5c19sc2VlaworLyoxNSovCS53b3JkIHN5c19jaG1vZCwgc3lzX2xjaG93biwgc3lzX2Jyaywgc3lzX25pc19zeXNjYWxsLCBzeXNfbHNlZWsKIC8qMjAqLwkud29yZCBzeXNfZ2V0cGlkLCBzeXNfY2FwZ2V0LCBzeXNfY2Fwc2V0LCBzeXNfc2V0dWlkLCBzeXNfZ2V0dWlkCiAvKjI1Ki8JLndvcmQgc3lzX3Ztc3BsaWNlLCBzeXNfcHRyYWNlLCBzeXNfYWxhcm0sIHN5c19zaWdhbHRzdGFjaywgc3lzX25pc19zeXNjYWxsCiAvKjMwKi8JLndvcmQgc3lzX3V0aW1lLCBzeXNfbmlzX3N5c2NhbGwsIHN5c19uaXNfc3lzY2FsbCwgc3lzX2FjY2Vzcywgc3lzX25pY2UKQEAgLTEzMCwxMyArMTMwLDEzIEBACiAvKjE3MCovCS53b3JkIHN5c19sc2V0eGF0dHIsIHN5c19mc2V0eGF0dHIsIHN5c19nZXR4YXR0ciwgc3lzX2xnZXR4YXR0ciwgc3lzX2dldGRlbnRzCiAJLndvcmQgc3lzX3NldHNpZCwgc3lzX2ZjaGRpciwgc3lzX2ZnZXR4YXR0ciwgc3lzX2xpc3R4YXR0ciwgc3lzX2xsaXN0eGF0dHIKIC8qMTgwKi8JLndvcmQgc3lzX2ZsaXN0eGF0dHIsIHN5c19yZW1vdmV4YXR0ciwgc3lzX2xyZW1vdmV4YXR0ciwgc3lzX25pc19zeXNjYWxsLCBzeXNfbmlfc3lzY2FsbAotCS53b3JkIHN5c19zZXRwZ2lkLCBzeXNfZnJlbW92ZXhhdHRyLCBzeXNfdGtpbGwsIHN5c19leGl0X2dyb3VwLCBzeXNfc3BhcmM2NF9uZXd1bmFtZQorCS53b3JkIHN5c19zZXRwZ2lkLCBzeXNfZnJlbW92ZXhhdHRyLCBzeXNfdGtpbGwsIHN5c19leGl0X2dyb3VwLCBzeXNfbmV3dW5hbWUKIC8qMTkwKi8JLndvcmQgc3lzX2luaXRfbW9kdWxlLCBzeXNfc3BhcmM2NF9wZXJzb25hbGl0eSwgc3lzX3JlbWFwX2ZpbGVfcGFnZXMsIHN5c19lcG9sbF9jcmVhdGUsIHN5c19lcG9sbF9jdGwKIAkud29yZCBzeXNfZXBvbGxfd2FpdCwgc3lzX2lvcHJpb19zZXQsIHN5c19nZXRwcGlkLCBzeXNfbmlzX3N5c2NhbGwsIHN5c19zZ2V0bWFzawogLyoyMDAqLwkud29yZCBzeXNfc3NldG1hc2ssIHN5c19uaXNfc3lzY2FsbCwgc3lzX25ld2xzdGF0LCBzeXNfdXNlbGliLCBzeXNfbmlzX3N5c2NhbGwKIAkud29yZCBzeXNfcmVhZGFoZWFkLCBzeXNfc29ja2V0Y2FsbCwgc3lzX3N5c2xvZywgc3lzX2xvb2t1cF9kY29va2llLCBzeXNfZmFkdmlzZTY0CiAvKjIxMCovCS53b3JkIHN5c19mYWR2aXNlNjRfNjQsIHN5c190Z2tpbGwsIHN5c193YWl0cGlkLCBzeXNfc3dhcG9mZiwgc3lzX3N5c2luZm8KLQkud29yZCBzeXNfaXBjLCBzeXNfbmlzX3N5c2NhbGwsIHN5c19jbG9uZSwgc3lzX2lvcHJpb19nZXQsIHN5c19hZGp0aW1leAorCS53b3JkIHN5c19zcGFyY19pcGMsIHN5c19uaXNfc3lzY2FsbCwgc3lzX2Nsb25lLCBzeXNfaW9wcmlvX2dldCwgc3lzX2FkanRpbWV4CiAvKjIyMCovCS53b3JkIHN5c19uaXNfc3lzY2FsbCwgc3lzX25pX3N5c2NhbGwsIHN5c19kZWxldGVfbW9kdWxlLCBzeXNfbmlfc3lzY2FsbCwgc3lzX2dldHBnaWQKIAkud29yZCBzeXNfYmRmbHVzaCwgc3lzX3N5c2ZzLCBzeXNfbmlzX3N5c2NhbGwsIHN5c19zZXRmc3VpZCwgc3lzX3NldGZzZ2lkCiAvKjIzMCovCS53b3JkIHN5c19zZWxlY3QsIHN5c19uaXNfc3lzY2FsbCwgc3lzX3NwbGljZSwgc3lzX3N0aW1lLCBzeXNfc3RhdGZzNjQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMva2VybmVsL3RyYXBzXzY0LmMgYi9hcmNoL3NwYXJjL2tlcm5lbC90cmFwc182NC5jCmluZGV4IDEwZjdiYjkuLmJkYzA1YTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3RyYXBzXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9rZXJuZWwvdHJhcHNfNjQuYwpAQCAtMjU0OCwxNSArMjU0OCw2IEBACiAJCQkJCSAgICAgICByd2J1Zl9zdGtwdHJzKSB8fAogCQkgICAgIFRJX0dTUiAhPSBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIGdzcikgfHwKIAkJICAgICBUSV9YRlNSICE9IG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywgeGZzcikgfHwKLQkJICAgICBUSV9VU0VSX0NOVEQwICE9IG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywKLQkJCQkJICAgICAgIHVzZXJfY250ZDApIHx8Ci0JCSAgICAgVElfVVNFUl9DTlREMSAhPSBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sCi0JCQkJCSAgICAgICB1c2VyX2NudGQxKSB8fAotCQkgICAgIFRJX0tFUk5fQ05URDAgIT0gb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLAotCQkJCQkgICAgICAga2VybmVsX2NudGQwKSB8fAotCQkgICAgIFRJX0tFUk5fQ05URDEgIT0gb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLAotCQkJCQkgICAgICAga2VybmVsX2NudGQxKSB8fAotCQkgICAgIFRJX1BDUiAhPSBvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIHBjcl9yZWcpIHx8CiAJCSAgICAgVElfUFJFX0NPVU5UICE9IG9mZnNldG9mKHN0cnVjdCB0aHJlYWRfaW5mbywKIAkJCQkJICAgICAgcHJlZW1wdF9jb3VudCkgfHwKIAkJICAgICBUSV9ORVdfQ0hJTEQgIT0gb2Zmc2V0b2Yoc3RydWN0IHRocmVhZF9pbmZvLCBuZXdfY2hpbGQpIHx8CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC91bmFsaWduZWRfNjQuYyBiL2FyY2gvc3BhcmMva2VybmVsL3VuYWxpZ25lZF82NC5jCmluZGV4IDM3OGNhODIuLmViY2U0MzAgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3VuYWxpZ25lZF82NC5jCisrKyBiL2FyY2gvc3BhcmMva2VybmVsL3VuYWxpZ25lZF82NC5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L3JhdGVsaW1pdC5oPgogI2luY2x1ZGUgPGFzbS9mcHVtYWNyby5oPgogCiBlbnVtIGRpcmVjdGlvbiB7CkBAIC0yNzQsMTMgKzI3NSw5IEBACiAKIHN0YXRpYyB2b2lkIGxvZ191bmFsaWduZWQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnQsIGxhc3RfdGltZTsKKwlzdGF0aWMgREVGSU5FX1JBVEVMSU1JVF9TVEFURShyYXRlbGltaXQsIDUgKiBIWiwgNSk7CiAKLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBsYXN0X3RpbWUgKyA1ICogSFopKQotCQljb3VudCA9IDA7Ci0JaWYgKGNvdW50IDwgNSkgewotCQlsYXN0X3RpbWUgPSBqaWZmaWVzOwotCQljb3VudCsrOworCWlmIChfX3JhdGVsaW1pdCgmcmF0ZWxpbWl0KSkgewogCQlwcmludGsoIktlcm5lbCB1bmFsaWduZWQgYWNjZXNzIGF0IFRQQ1slbHhdICVwU1xuIiwKIAkJICAgICAgIHJlZ3MtPnRwYywgKHZvaWQgKikgcmVncy0+dHBjKTsKIAl9CkBAIC02MzYsNyArNjMzLDYgQEAKIAkJcmV0dXJuOwogCX0KIAlhZHZhbmNlKHJlZ3MpOwotCXJldHVybjsKIH0KIAogdm9pZCBoYW5kbGVfc3RkZm1uYShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBzZmFyLCB1bnNpZ25lZCBsb25nIHNmc3IpCkBAIC02ODUsNSArNjgxLDQgQEAKIAkJcmV0dXJuOwogCX0KIAlhZHZhbmNlKHJlZ3MpOwotCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vZmF1bHRfMzIuYyBiL2FyY2gvc3BhcmMvbW0vZmF1bHRfMzIuYwppbmRleCAzZmEwOWJhLi5iZDg2MDE2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2ZhdWx0XzMyLmMKKysrIGIvYXJjaC9zcGFyYy9tbS9mYXVsdF8zMi5jCkBAIC0zNSw2ICszNSw4IEBACiAKIGV4dGVybiBpbnQgcHJvbV9ub2RlX3Jvb3Q7CiAKK2ludCBzaG93X3VuaGFuZGxlZF9zaWduYWxzID0gMTsKKwogLyogQXQgYm9vdCB0aW1lIHdlIGRldGVybWluZSB0aGVzZSB0d28gdmFsdWVzIG5lY2Vzc2FyeSBmb3Igc2V0dGluZwogICogdXAgdGhlIHNlZ21lbnQgbWFwcyBhbmQgcGFnZSB0YWJsZSBlbnRyaWVzIChwdGUncykuCiAgKi8KQEAgLTE0OSw2ICsxNTEsNDUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCitzaG93X3NpZ25hbF9tc2coc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzaWcsIGludCBjb2RlLAorCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWlmICghdW5oYW5kbGVkX3NpZ25hbCh0c2ssIHNpZykpCisJCXJldHVybjsKKworCWlmICghcHJpbnRrX3JhdGVsaW1pdCgpKQorCQlyZXR1cm47CisKKwlwcmludGsoIiVzJXNbJWRdOiBzZWdmYXVsdCBhdCAlbHggaXAgJXAgKHJwYyAlcCkgc3AgJXAgZXJyb3IgJXgiLAorCSAgICAgICB0YXNrX3BpZF9ucih0c2spID4gMSA/IEtFUk5fSU5GTyA6IEtFUk5fRU1FUkcsCisJICAgICAgIHRzay0+Y29tbSwgdGFza19waWRfbnIodHNrKSwgYWRkcmVzcywKKwkgICAgICAgKHZvaWQgKilyZWdzLT5wYywgKHZvaWQgKilyZWdzLT51X3JlZ3NbVVJFR19JN10sCisJICAgICAgICh2b2lkICopcmVncy0+dV9yZWdzW1VSRUdfRlBdLCBjb2RlKTsKKworCXByaW50X3ZtYV9hZGRyKEtFUk5fQ09OVCAiIGluICIsIHJlZ3MtPnBjKTsKKworCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZG9fZmF1bHRfc2lnaW5mbyhpbnQgY29kZSwgaW50IHNpZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXNpZ2luZm9fdCBpbmZvOworCisJaW5mby5zaV9zaWdubyA9IHNpZzsKKwlpbmZvLnNpX2NvZGUgPSBjb2RlOworCWluZm8uc2lfZXJybm8gPSAwOworCWluZm8uc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKSBhZGRyOworCWluZm8uc2lfdHJhcG5vID0gMDsKKworCWlmICh1bmxpa2VseShzaG93X3VuaGFuZGxlZF9zaWduYWxzKSkKKwkJc2hvd19zaWduYWxfbXNnKHJlZ3MsIHNpZywgaW5mby5zaV9jb2RlLAorCQkJCWFkZHIsIGN1cnJlbnQpOworCisJZm9yY2Vfc2lnX2luZm8gKHNpZywgJmluZm8sIGN1cnJlbnQpOworfQorCiBleHRlcm4gdW5zaWduZWQgbG9uZyBzYWZlX2NvbXB1dGVfZWZmZWN0aXZlX2FkZHJlc3Moc3RydWN0IHB0X3JlZ3MgKiwKIAkJCQkJCSAgICB1bnNpZ25lZCBpbnQpOwogCkBAIC0xNjgsNiArMjA5LDE0IEBACiAJcmV0dXJuIHNhZmVfY29tcHV0ZV9lZmZlY3RpdmVfYWRkcmVzcyhyZWdzLCBpbnNuKTsKIH0KIAorc3RhdGljIG5vaW5saW5lIHZvaWQgZG9fZmF1bHRfc2lnaW5mbyhpbnQgY29kZSwgaW50IHNpZywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJICAgICAgaW50IHRleHRfZmF1bHQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gY29tcHV0ZV9zaV9hZGRyKHJlZ3MsIHRleHRfZmF1bHQpOworCisJX19kb19mYXVsdF9zaWdpbmZvKGNvZGUsIHNpZywgcmVncywgYWRkcik7Cit9CisKIGFzbWxpbmthZ2Ugdm9pZCBkb19zcGFyY19mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IHRleHRfZmF1bHQsIGludCB3cml0ZSwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7CkBAIC0xNzYsOSArMjI1LDggQEAKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay0+bW07CiAJdW5zaWduZWQgaW50IGZpeHVwOwogCXVuc2lnbmVkIGxvbmcgZzI7Ci0Jc2lnaW5mb190IGluZm87CiAJaW50IGZyb21fdXNlciA9ICEocmVncy0+cHNyICYgUFNSX1BTKTsKLQlpbnQgZmF1bHQ7CisJaW50IGZhdWx0LCBjb2RlOwogCiAJaWYodGV4dF9mYXVsdCkKIAkJYWRkcmVzcyA9IHJlZ3MtPnBjOwpAQCAtMTk1LDcgKzI0Myw3IEBACiAJaWYgKCFBUkNIX1NVTjRDICYmIGFkZHJlc3MgPj0gVEFTS19TSVpFKQogCQlnb3RvIHZtYWxsb2NfZmF1bHQ7CiAKLQlpbmZvLnNpX2NvZGUgPSBTRUdWX01BUEVSUjsKKwljb2RlID0gU0VHVl9NQVBFUlI7CiAKIAkvKgogCSAqIElmIHdlJ3JlIGluIGFuIGludGVycnVwdCBvciBoYXZlIG5vIHVzZXIKQEAgLTIyOSw3ICsyNzcsNyBAQAogCSAqIHdlIGNhbiBoYW5kbGUgaXQuLgogCSAqLwogZ29vZF9hcmVhOgotCWluZm8uc2lfY29kZSA9IFNFR1ZfQUNDRVJSOworCWNvZGUgPSBTRUdWX0FDQ0VSUjsKIAlpZih3cml0ZSkgewogCQlpZighKHZtYS0+dm1fZmxhZ3MgJiBWTV9XUklURSkpCiAJCQlnb3RvIGJhZF9hcmVhOwpAQCAtMjczLDE4ICszMjEsOCBAQAogCiBiYWRfYXJlYV9ub3NlbWFwaG9yZToKIAkvKiBVc2VyIG1vZGUgYWNjZXNzZXMganVzdCBjYXVzZSBhIFNJR1NFR1YgKi8KLQlpZihmcm9tX3VzZXIpIHsKLSNpZiAwCi0JCXByaW50aygiRmF1bHQgd2hlZSAlcyBbJWRdOiBzZWdmYXVsdHMgYXQgJTA4bHggcGM9JTA4bHhcbiIsCi0JCSAgICAgICB0c2stPmNvbW0sIHRzay0+cGlkLCBhZGRyZXNzLCByZWdzLT5wYyk7Ci0jZW5kaWYKLQkJaW5mby5zaV9zaWdubyA9IFNJR1NFR1Y7Ci0JCWluZm8uc2lfZXJybm8gPSAwOwotCQkvKiBpbmZvLnNpX2NvZGUgc2V0IGFib3ZlIHRvIG1ha2UgY2xlYXIgd2hldGhlcgotCQkgICB0aGlzIHdhcyBhIFNFR1ZfTUFQRVJSIG9yIFNFR1ZfQUNDRVJSIGZhdWx0LiAgKi8KLQkJaW5mby5zaV9hZGRyID0gKHZvaWQgX191c2VyICopY29tcHV0ZV9zaV9hZGRyKHJlZ3MsIHRleHRfZmF1bHQpOwotCQlpbmZvLnNpX3RyYXBubyA9IDA7Ci0JCWZvcmNlX3NpZ19pbmZvIChTSUdTRUdWLCAmaW5mbywgdHNrKTsKKwlpZiAoZnJvbV91c2VyKSB7CisJCWRvX2ZhdWx0X3NpZ2luZm8oY29kZSwgU0lHU0VHViwgcmVncywgdGV4dF9mYXVsdCk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTMzNSwxMiArMzczLDcgQEAKIAogZG9fc2lnYnVzOgogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JaW5mby5zaV9zaWdubyA9IFNJR0JVUzsKLQlpbmZvLnNpX2Vycm5vID0gMDsKLQlpbmZvLnNpX2NvZGUgPSBCVVNfQURSRVJSOwotCWluZm8uc2lfYWRkciA9ICh2b2lkIF9fdXNlciAqKSBjb21wdXRlX3NpX2FkZHIocmVncywgdGV4dF9mYXVsdCk7Ci0JaW5mby5zaV90cmFwbm8gPSAwOwotCWZvcmNlX3NpZ19pbmZvIChTSUdCVVMsICZpbmZvLCB0c2spOworCWRvX2ZhdWx0X3NpZ2luZm8oQlVTX0FEUkVSUiwgU0lHQlVTLCByZWdzLCB0ZXh0X2ZhdWx0KTsKIAlpZiAoIWZyb21fdXNlcikKIAkJZ290byBub19jb250ZXh0OwogCkBAIC00NjYsMTQgKzQ5OSwxMCBAQAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay0+bW07Ci0Jc2lnaW5mb190IGluZm87CisJaW50IGNvZGU7CiAKLQlpbmZvLnNpX2NvZGUgPSBTRUdWX01BUEVSUjsKKwljb2RlID0gU0VHVl9NQVBFUlI7CiAKLSNpZiAwCi0JcHJpbnRrKCJ3ZjxwaWQ9JWQsd3I9JWQsYWRkcj0lMDhseD5cbiIsCi0JICAgICAgIHRzay0+cGlkLCB3cml0ZSwgYWRkcmVzcyk7Ci0jZW5kaWYKIAlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJdm1hID0gZmluZF92bWEobW0sIGFkZHJlc3MpOwogCWlmKCF2bWEpCkBAIC00ODUsNyArNTE0LDcgQEAKIAlpZihleHBhbmRfc3RhY2sodm1hLCBhZGRyZXNzKSkKIAkJZ290byBiYWRfYXJlYTsKIGdvb2RfYXJlYToKLQlpbmZvLnNpX2NvZGUgPSBTRUdWX0FDQ0VSUjsKKwljb2RlID0gU0VHVl9BQ0NFUlI7CiAJaWYod3JpdGUpIHsKIAkJaWYoISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKQogCQkJZ290byBiYWRfYXJlYTsKQEAgLTUwMiwyNyArNTMxLDEyIEBACiAJcmV0dXJuOwogYmFkX2FyZWE6CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLSNpZiAwCi0JcHJpbnRrKCJXaW5kb3cgd2hlZSAlcyBbJWRdOiBzZWdmYXVsdHMgYXQgJTA4bHhcbiIsCi0JICAgICAgIHRzay0+Y29tbSwgdHNrLT5waWQsIGFkZHJlc3MpOwotI2VuZGlmCi0JaW5mby5zaV9zaWdubyA9IFNJR1NFR1Y7Ci0JaW5mby5zaV9lcnJubyA9IDA7Ci0JLyogaW5mby5zaV9jb2RlIHNldCBhYm92ZSB0byBtYWtlIGNsZWFyIHdoZXRoZXIKLQkgICB0aGlzIHdhcyBhIFNFR1ZfTUFQRVJSIG9yIFNFR1ZfQUNDRVJSIGZhdWx0LiAgKi8KLQlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKikgYWRkcmVzczsKLQlpbmZvLnNpX3RyYXBubyA9IDA7Ci0JZm9yY2Vfc2lnX2luZm8gKFNJR1NFR1YsICZpbmZvLCB0c2spOworCV9fZG9fZmF1bHRfc2lnaW5mbyhjb2RlLCBTSUdTRUdWLCB0c2stPnRocmVhZC5rcmVncywgYWRkcmVzcyk7CiAJcmV0dXJuOwogCiBkb19zaWdidXM6CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlpbmZvLnNpX3NpZ25vID0gU0lHQlVTOwotCWluZm8uc2lfZXJybm8gPSAwOwotCWluZm8uc2lfY29kZSA9IEJVU19BRFJFUlI7Ci0JaW5mby5zaV9hZGRyID0gKHZvaWQgX191c2VyICopIGFkZHJlc3M7Ci0JaW5mby5zaV90cmFwbm8gPSAwOwotCWZvcmNlX3NpZ19pbmZvIChTSUdCVVMsICZpbmZvLCB0c2spOworCV9fZG9fZmF1bHRfc2lnaW5mbyhCVVNfQURSRVJSLCBTSUdCVVMsIHRzay0+dGhyZWFkLmtyZWdzLCBhZGRyZXNzKTsKIH0KIAogdm9pZCB3aW5kb3dfb3ZlcmZsb3dfZmF1bHQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYyBiL2FyY2gvc3BhcmMvbW0vZmF1bHRfNjQuYwppbmRleCBiOWQ0ZmYwLi5mOTJjZTU2IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL21tL2ZhdWx0XzY0LmMKKysrIGIvYXJjaC9zcGFyYy9tbS9mYXVsdF82NC5jCkBAIC0zMiw2ICszMiw4IEBACiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAKK2ludCBzaG93X3VuaGFuZGxlZF9zaWduYWxzID0gMTsKKwogc3RhdGljIGlubGluZSBfX2twcm9iZXMgaW50IG5vdGlmeV9wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWludCByZXQgPSAwOwpAQCAtMTI4LDIyICsxMzAsNDggQEAKIAlyZXR1cm4gaW5zbjsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCitzaG93X3NpZ25hbF9tc2coc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBzaWcsIGludCBjb2RlLAorCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCWlmICghdW5oYW5kbGVkX3NpZ25hbCh0c2ssIHNpZykpCisJCXJldHVybjsKKworCWlmICghcHJpbnRrX3JhdGVsaW1pdCgpKQorCQlyZXR1cm47CisKKwlwcmludGsoIiVzJXNbJWRdOiBzZWdmYXVsdCBhdCAlbHggaXAgJXAgKHJwYyAlcCkgc3AgJXAgZXJyb3IgJXgiLAorCSAgICAgICB0YXNrX3BpZF9ucih0c2spID4gMSA/IEtFUk5fSU5GTyA6IEtFUk5fRU1FUkcsCisJICAgICAgIHRzay0+Y29tbSwgdGFza19waWRfbnIodHNrKSwgYWRkcmVzcywKKwkgICAgICAgKHZvaWQgKilyZWdzLT50cGMsICh2b2lkICopcmVncy0+dV9yZWdzW1VSRUdfSTddLAorCSAgICAgICAodm9pZCAqKXJlZ3MtPnVfcmVnc1tVUkVHX0ZQXSwgY29kZSk7CisKKwlwcmludF92bWFfYWRkcihLRVJOX0NPTlQgIiBpbiAiLCByZWdzLT50cGMpOworCisJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKK30KKwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgY29tcHV0ZV9lZmZlY3RpdmVfYWRkcmVzcyhzdHJ1Y3QgcHRfcmVncyAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCk7CiAKIHN0YXRpYyB2b2lkIGRvX2ZhdWx0X3NpZ2luZm8oaW50IGNvZGUsIGludCBzaWcsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAogCQkJICAgICB1bnNpZ25lZCBpbnQgaW5zbiwgaW50IGZhdWx0X2NvZGUpCiB7CisJdW5zaWduZWQgbG9uZyBhZGRyOwogCXNpZ2luZm9fdCBpbmZvOwogCiAJaW5mby5zaV9jb2RlID0gY29kZTsKIAlpbmZvLnNpX3NpZ25vID0gc2lnOwogCWluZm8uc2lfZXJybm8gPSAwOwogCWlmIChmYXVsdF9jb2RlICYgRkFVTFRfQ09ERV9JVExCKQotCQlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKikgcmVncy0+dHBjOworCQlhZGRyID0gcmVncy0+dHBjOwogCWVsc2UKLQkJaW5mby5zaV9hZGRyID0gKHZvaWQgX191c2VyICopCi0JCQljb21wdXRlX2VmZmVjdGl2ZV9hZGRyZXNzKHJlZ3MsIGluc24sIDApOworCQlhZGRyID0gY29tcHV0ZV9lZmZlY3RpdmVfYWRkcmVzcyhyZWdzLCBpbnNuLCAwKTsKKwlpbmZvLnNpX2FkZHIgPSAodm9pZCBfX3VzZXIgKikgYWRkcjsKIAlpbmZvLnNpX3RyYXBubyA9IDA7CisKKwlpZiAodW5saWtlbHkoc2hvd191bmhhbmRsZWRfc2lnbmFscykpCisJCXNob3dfc2lnbmFsX21zZyhyZWdzLCBzaWcsIGNvZGUsIGFkZHIsIGN1cnJlbnQpOworCiAJZm9yY2Vfc2lnX2luZm8oc2lnLCAmaW5mbywgY3VycmVudCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9jb25zb2xlXzMyLmMgYi9hcmNoL3NwYXJjL3Byb20vY29uc29sZV8zMi5jCmluZGV4IGIzMDc1ZDcuLjUzNDAyNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS9jb25zb2xlXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL2NvbnNvbGVfMzIuYwpAQCAtOTQsNSArOTQsNCBAQAogcHJvbV9wdXRjaGFyKGNoYXIgYykKIHsKIAl3aGlsZShwcm9tX25icHV0Y2hhcihjKSA9PSAtMSkgOwotCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9jb25zb2xlXzY0LmMgYi9hcmNoL3NwYXJjL3Byb20vY29uc29sZV82NC5jCmluZGV4IGUxYzNmYzguLmY1NWQ1OGEgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS9jb25zb2xlXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL2NvbnNvbGVfNjQuYwpAQCAtNjIsNyArNjIsNiBAQAogcHJvbV9wdXRjaGFyKGNoYXIgYykKIHsKIAlwcm9tX25icHV0Y2hhcihjKTsKLQlyZXR1cm47CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9kZXZtYXAuYyBiL2FyY2gvc3BhcmMvcHJvbS9kZXZtYXAuYwppbmRleCAxZTUxNzkxLi40NjE1N2QyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL3Byb20vZGV2bWFwLmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL2Rldm1hcC5jCkBAIC01MCw1ICs1MCw0IEBACiAJKCoocm9tdmVjLT5wdl92MmRldm9wcy52Ml9kdW1iX211bm1hcCkpKHZhZGRyLCBudW1fYnl0ZXMpOwogCXJlc3RvcmVfY3VycmVudCgpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByb21fbG9jaywgZmxhZ3MpOwotCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9kZXZvcHNfMzIuYyBiL2FyY2gvc3BhcmMvcHJvbS9kZXZvcHNfMzIuYwppbmRleCA5ZjFhOTVjLi45YzVkNDY4IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL3Byb20vZGV2b3BzXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL2Rldm9wc18zMi5jCkBAIC04NCw2ICs4NCw0IEBACiAJfTsKIAlyZXN0b3JlX2N1cnJlbnQoKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcm9tX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9pbml0XzMyLmMgYi9hcmNoL3NwYXJjL3Byb20vaW5pdF8zMi5jCmluZGV4IDYxOTNjMzMuLmNjYjM2YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS9pbml0XzMyLmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL2luaXRfMzIuYwpAQCAtNzUsNSArNzUsNCBAQAogCSAgICAgICByb212ZWMtPnB2X3JvbXZlcnMsIHByb21fcmV2KTsKIAogCS8qIEluaXRpYWxpemF0aW9uIHN1Y2Nlc3NmdWwuICovCi0JcmV0dXJuOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9wcm9tL3AxMjc1LmMgYi9hcmNoL3NwYXJjL3Byb20vcDEyNzUuYwppbmRleCA0YjdjOTM3Li4yZDhiNzBkIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL3Byb20vcDEyNzUuYworKysgYi9hcmNoL3NwYXJjL3Byb20vcDEyNzUuYwpAQCAtMzIsMTAgKzMyLDkgQEAKIGV4dGVybiB2b2lkIHByb21fY2lmX2NhbGxiYWNrKHZvaWQpOwogCiAvKgotICogVGhpcyBwcm92aWRlcyBTTVAgc2FmZXR5IG9uIHRoZSBwMTI3NWJ1Zi4gcHJvbV9jYWxsYmFjaygpIGRyb3BzIHRoaXMgbG9jawotICogdG8gYWxsb3cgcmVjdXJzdXZlIGFjcXVpc2l0aW9uLgorICogVGhpcyBwcm92aWRlcyBTTVAgc2FmZXR5IG9uIHRoZSBwMTI3NWJ1Zi4KICAqLwotREVGSU5FX1NQSU5MT0NLKHByb21fZW50cnlfbG9jayk7CitERUZJTkVfUkFXX1NQSU5MT0NLKHByb21fZW50cnlfbG9jayk7CiAKIGxvbmcgcDEyNzVfY21kKGNvbnN0IGNoYXIgKnNlcnZpY2UsIGxvbmcgZm10LCAuLi4pCiB7CkBAIC00Nyw3ICs0Niw5IEBACiAJCiAJcCA9IHAxMjc1YnVmLnByb21fYnVmZmVyOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByb21fZW50cnlfbG9jaywgZmxhZ3MpOworCXJhd19sb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoUElMX05NSSk7CisJcmF3X3NwaW5fbG9jaygmcHJvbV9lbnRyeV9sb2NrKTsKIAogCXAxMjc1YnVmLnByb21fYXJnc1swXSA9ICh1bnNpZ25lZCBsb25nKXA7CQkvKiBzZXJ2aWNlICovCiAJc3RyY3B5IChwLCBzZXJ2aWNlKTsKQEAgLTEzOSw3ICsxNDAsOCBAQAogCXZhX2VuZChsaXN0KTsKIAl4ID0gcDEyNzVidWYucHJvbV9hcmdzIFtuYXJncyArIDNdOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJvbV9lbnRyeV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrKCZwcm9tX2VudHJ5X2xvY2spOworCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAKIAlyZXR1cm4geDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9wYWxsb2MuYyBiL2FyY2gvc3BhcmMvcHJvbS9wYWxsb2MuYwppbmRleCAyMGJlMzM5Li4yZTJhODhiIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL3Byb20vcGFsbG9jLmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL3BhbGxvYy5jCkBAIC00MCw1ICs0MCw0IEBACiB7CiAJaWYoKHByb21fdmVycyA9PSBQUk9NX1YwKSB8fCAobnVtX2J5dGVzID09IDB4MCkpIHJldHVybjsKIAkoKihyb212ZWMtPnB2X3YyZGV2b3BzLnYyX2R1bWJfbWVtX2ZyZWUpKSh2YWRkciwgbnVtX2J5dGVzKTsKLQlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL3Byb20vcmFuZ2VzLmMgYi9hcmNoL3NwYXJjL3Byb20vcmFuZ2VzLmMKaW5kZXggY2Q1NzkwOC4uYWVmZjQzZSAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9wcm9tL3Jhbmdlcy5jCisrKyBiL2FyY2gvc3BhcmMvcHJvbS9yYW5nZXMuYwpAQCAtODcsOCArODcsNiBAQAogCiAJaWYobnVtX29iaW9fcmFuZ2VzKQogCQlwcm9tX3ByaW50ZigiUFJPTUxJQjogb2Jpb19yYW5nZXMgJWRcbiIsIG51bV9vYmlvX3Jhbmdlcyk7Ci0KLQlyZXR1cm47CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS9zZWdtZW50LmMgYi9hcmNoL3NwYXJjL3Byb20vc2VnbWVudC5jCmluZGV4IDA0ZmQwM2EuLjg2YTY2M2YgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS9zZWdtZW50LmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL3NlZ21lbnQuYwpAQCAtMjUsNSArMjUsNCBAQAogCSgqKHJvbXZlYy0+cHZfc2V0Y3R4dCkpKGN0eCwgKGNoYXIgKikgdmFkZHIsIHNlZ21lbnQpOwogCXJlc3RvcmVfY3VycmVudCgpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByb21fbG9jaywgZmxhZ3MpOwotCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS90cmVlXzMyLmMgYi9hcmNoL3NwYXJjL3Byb20vdHJlZV8zMi5jCmluZGV4IDY0NmQyNDQuLmIyMTU5MmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS90cmVlXzMyLmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL3RyZWVfMzIuYwpAQCAtMTczLDcgKzE3Myw2IEBACiAJbGVuID0gcHJvbV9nZXRwcm9wZXJ0eShub2RlLCBwcm9wLCB1c2VyX2J1ZiwgdWJ1Zl9zaXplKTsKIAlpZihsZW4gIT0gLTEpIHJldHVybjsKIAl1c2VyX2J1ZlswXSA9IDA7Ci0JcmV0dXJuOwogfQogRVhQT1JUX1NZTUJPTChwcm9tX2dldHN0cmluZyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvcHJvbS90cmVlXzY0LmMgYi9hcmNoL3NwYXJjL3Byb20vdHJlZV82NC5jCmluZGV4IDhlYTczZGQuLjNjMGQyZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMvcHJvbS90cmVlXzY0LmMKKysrIGIvYXJjaC9zcGFyYy9wcm9tL3RyZWVfNjQuYwpAQCAtMTU0LDcgKzE1NCw2IEBACiAJbGVuID0gcHJvbV9nZXRwcm9wZXJ0eShub2RlLCBwcm9wLCB1c2VyX2J1ZiwgdWJ1Zl9zaXplKTsKIAlpZihsZW4gIT0gLTEpIHJldHVybjsKIAl1c2VyX2J1ZlswXSA9IDA7Ci0JcmV0dXJuOwogfQogRVhQT1JUX1NZTUJPTChwcm9tX2dldHN0cmluZyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0vLmdpdGlnbm9yZSBiL2FyY2gvdW0vLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzNkM2ExCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC91bS8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsMyBAQAora2VybmVsL2NvbmZpZy5jCitrZXJuZWwvY29uZmlnLnRtcAora2VybmVsL3ZtbGludXgubGRzCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbGluZS5jIGIvYXJjaC91bS9kcml2ZXJzL2xpbmUuYwppbmRleCBjZjhhOTdmLi42NGNkYTk1IDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbGluZS5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9saW5lLmMKQEAgLTE4LDEwICsxOCwxMCBAQAogewogCXN0cnVjdCBjaGFuICpjaGFuID0gZGF0YTsKIAlzdHJ1Y3QgbGluZSAqbGluZSA9IGNoYW4tPmxpbmU7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IGxpbmUtPnR0eTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCiAJaWYgKGxpbmUpCi0JCWNoYW5faW50ZXJydXB0KCZsaW5lLT5jaGFuX2xpc3QsICZsaW5lLT50YXNrLCB0dHksIGlycSk7CisJCWNoYW5faW50ZXJydXB0KCZsaW5lLT5jaGFuX2xpc3QsICZsaW5lLT50YXNrLCBsaW5lLT50dHksIGlycSk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX2tlcm4uYwppbmRleCAzYjNjMzY2Li5kZTMxN2QwIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV9rZXJuLmMKQEAgLTE0MCw3ICsxNDAsNyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQllcnIgPSBtYXlfb3BlbigmbmQucGF0aCwgTUFZX1JFQUQsIEZNT0RFX1JFQUQpOworCWVyciA9IG1heV9vcGVuKCZuZC5wYXRoLCBNQVlfUkVBRCwgT19SRE9OTFkpOwogCWlmIChyZXN1bHQpIHsKIAkJbWNvbnNvbGVfcmVwbHkocmVxLCAiRmFpbGVkIHRvIG9wZW4gZmlsZSIsIDEsIDApOwogCQlwYXRoX3B1dCgmbmQucGF0aCk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL3VtL2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKaW5kZXggMzc4ZGU0Yi4uYjk0OGMxNCAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMTA0LDE0ICsxMDQsNiBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLWRtYV9zeW5jX3NpbmdsZV9yYW5nZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKLQkJICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCi17Ci0JQlVHKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZAogZG1hX2NhY2hlX3N5bmMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsCiAJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9hc20vcHRyYWNlLWdlbmVyaWMuaCBiL2FyY2gvdW0vaW5jbHVkZS9hc20vcHRyYWNlLWdlbmVyaWMuaAppbmRleCA2Yzg4OTkwLi4yY2Q4OTlmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvYXNtL3B0cmFjZS1nZW5lcmljLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2FzbS9wdHJhY2UtZ2VuZXJpYy5oCkBAIC0xNiw2ICsxNiw4IEBACiAJc3RydWN0IHVtbF9wdF9yZWdzIHJlZ3M7CiB9OwogCisjZGVmaW5lIGFyY2hfaGFzX3NpbmdsZV9zdGVwKCkJKDEpCisKICNkZWZpbmUgRU1QVFlfUkVHUyB7IC5yZWdzID0gRU1QVFlfVU1MX1BUX1JFR1MgfQogCiAjZGVmaW5lIFBUX1JFR1NfSVAocikgVVBUX0lQKCYociktPnJlZ3MpCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gvdW0va2VybmVsL3B0cmFjZS5jCmluZGV4IDhlM2Q2OWUuLjQ4NDUwOTkgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gvdW0va2VybmVsL3B0cmFjZS5jCkBAIC0xMiwxNiArMTIsMjUgQEAKICNlbmRpZgogI2luY2x1ZGUgInNrYXNfcHRyYWNlLmgiCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfc2luZ2xlc3RlcHBpbmcoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCwgaW50IG9uKQorCisKK3ZvaWQgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKIHsKLQlpZiAob24pCi0JCWNoaWxkLT5wdHJhY2UgfD0gUFRfRFRSQUNFOwotCWVsc2UKLQkJY2hpbGQtPnB0cmFjZSAmPSB+UFRfRFRSQUNFOworCWNoaWxkLT5wdHJhY2UgfD0gUFRfRFRSQUNFOwogCWNoaWxkLT50aHJlYWQuc2luZ2xlc3RlcF9zeXNjYWxsID0gMDsKIAogI2lmZGVmIFNVQkFSQ0hfU0VUX1NJTkdMRVNURVBQSU5HCi0JU1VCQVJDSF9TRVRfU0lOR0xFU1RFUFBJTkcoY2hpbGQsIG9uKTsKKwlTVUJBUkNIX1NFVF9TSU5HTEVTVEVQUElORyhjaGlsZCwgMSk7CisjZW5kaWYKK30KKwordm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3sKKwljaGlsZC0+cHRyYWNlICY9IH5QVF9EVFJBQ0U7CisJY2hpbGQtPnRocmVhZC5zaW5nbGVzdGVwX3N5c2NhbGwgPSAwOworCisjaWZkZWYgU1VCQVJDSF9TRVRfU0lOR0xFU1RFUFBJTkcKKwlTVUJBUkNIX1NFVF9TSU5HTEVTVEVQUElORyhjaGlsZCwgMCk7CiAjZW5kaWYKIH0KIApAQCAtMzAsNyArMzksNyBAQAogICovCiB2b2lkIHB0cmFjZV9kaXNhYmxlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY2hpbGQpCiB7Ci0Jc2V0X3NpbmdsZXN0ZXBwaW5nKGNoaWxkLDApOworCXVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChjaGlsZCk7CiB9CiAKIGV4dGVybiBpbnQgcGVla191c2VyKHN0cnVjdCB0YXNrX3N0cnVjdCAqIGNoaWxkLCBsb25nIGFkZHIsIGxvbmcgZGF0YSk7CkBAIC02OSw1MyArNzgsNiBAQAogCQlyZXQgPSAtRUlPOwogCQlicmVhazsKIAotCS8qIGNvbnRpbnVlIGFuZCBzdG9wIGF0IG5leHQgKHJldHVybiBmcm9tKSBzeXNjYWxsICovCi0JY2FzZSBQVFJBQ0VfU1lTQ0FMTDoKLQkvKiByZXN0YXJ0IGFmdGVyIHNpZ25hbC4gKi8KLQljYXNlIFBUUkFDRV9DT05UOiB7Ci0JCXJldCA9IC1FSU87Ci0JCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQotCQkJYnJlYWs7Ci0KLQkJc2V0X3NpbmdsZXN0ZXBwaW5nKGNoaWxkLCAwKTsKLQkJaWYgKHJlcXVlc3QgPT0gUFRSQUNFX1NZU0NBTEwpCi0JCQlzZXRfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7Ci0JCWVsc2UgY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7Ci0JCWNoaWxkLT5leGl0X2NvZGUgPSBkYXRhOwotCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOwotCQlyZXQgPSAwOwotCQlicmVhazsKLQl9Ci0KLS8qCi0gKiBtYWtlIHRoZSBjaGlsZCBleGl0LiAgQmVzdCBJIGNhbiBkbyBpcyBzZW5kIGl0IGEgc2lna2lsbC4KLSAqIHBlcmhhcHMgaXQgc2hvdWxkIGJlIHB1dCBpbiB0aGUgc3RhdHVzIHRoYXQgaXQgd2FudHMgdG8KLSAqIGV4aXQuCi0gKi8KLQljYXNlIFBUUkFDRV9LSUxMOiB7Ci0JCXJldCA9IDA7Ci0JCWlmIChjaGlsZC0+ZXhpdF9zdGF0ZSA9PSBFWElUX1pPTUJJRSkJLyogYWxyZWFkeSBkZWFkICovCi0JCQlicmVhazsKLQotCQlzZXRfc2luZ2xlc3RlcHBpbmcoY2hpbGQsIDApOwotCQljaGlsZC0+ZXhpdF9jb2RlID0gU0lHS0lMTDsKLQkJd2FrZV91cF9wcm9jZXNzKGNoaWxkKTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBQVFJBQ0VfU0lOR0xFU1RFUDogeyAgLyogc2V0IHRoZSB0cmFwIGZsYWcuICovCi0JCXJldCA9IC1FSU87Ci0JCWlmICghdmFsaWRfc2lnbmFsKGRhdGEpKQotCQkJYnJlYWs7Ci0JCWNsZWFyX3Rza190aHJlYWRfZmxhZyhjaGlsZCwgVElGX1NZU0NBTExfVFJBQ0UpOwotCQlzZXRfc2luZ2xlc3RlcHBpbmcoY2hpbGQsIDEpOwotCQljaGlsZC0+ZXhpdF9jb2RlID0gZGF0YTsKLQkJLyogZ2l2ZSBpdCBhIGNoYW5jZSB0byBydW4uICovCi0JCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7Ci0JCXJldCA9IDA7Ci0JCWJyZWFrOwotCX0KLQogI2lmZGVmIFBUUkFDRV9HRVRSRUdTCiAJY2FzZSBQVFJBQ0VfR0VUUkVHUzogeyAvKiBHZXQgYWxsIGdwIHJlZ3MgZnJvbSB0aGUgY2hpbGQuICovCiAJCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgcCwgTUFYX1JFR19PRkZTRVQpKSB7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9zeXNjYWxsLmMgYi9hcmNoL3VtL2tlcm5lbC9zeXNjYWxsLmMKaW5kZXggY2NjYWI4NS4uNDM5MzE3MyAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvc3lzY2FsbC5jCisrKyBiL2FyY2gvdW0va2VybmVsL3N5c2NhbGwuYwpAQCAtNTEsNTEgKzUxLDYgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1sb25nIHN5c191bmFtZShzdHJ1Y3Qgb2xkX3V0c25hbWUgX191c2VyICogbmFtZSkKLXsKLQlsb25nIGVycjsKLQlpZiAoIW5hbWUpCi0JCXJldHVybiAtRUZBVUxUOwotCWRvd25fcmVhZCgmdXRzX3NlbSk7Ci0JZXJyID0gY29weV90b191c2VyKG5hbWUsIHV0c25hbWUoKSwgc2l6ZW9mICgqbmFtZSkpOwotCXVwX3JlYWQoJnV0c19zZW0pOwotCXJldHVybiBlcnI/LUVGQVVMVDowOwotfQotCi1sb25nIHN5c19vbGR1bmFtZShzdHJ1Y3Qgb2xkb2xkX3V0c25hbWUgX191c2VyICogbmFtZSkKLXsKLQlsb25nIGVycm9yOwotCi0JaWYgKCFuYW1lKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsbmFtZSxzaXplb2Yoc3RydWN0IG9sZG9sZF91dHNuYW1lKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JZG93bl9yZWFkKCZ1dHNfc2VtKTsKLQotCWVycm9yID0gX19jb3B5X3RvX3VzZXIoJm5hbWUtPnN5c25hbWUsICZ1dHNuYW1lKCktPnN5c25hbWUsCi0JCQkgICAgICAgX19PTERfVVRTX0xFTik7Ci0JZXJyb3IgfD0gX19wdXRfdXNlcigwLCBuYW1lLT5zeXNuYW1lICsgX19PTERfVVRTX0xFTik7Ci0JZXJyb3IgfD0gX19jb3B5X3RvX3VzZXIoJm5hbWUtPm5vZGVuYW1lLCAmdXRzbmFtZSgpLT5ub2RlbmFtZSwKLQkJCQlfX09MRF9VVFNfTEVOKTsKLQllcnJvciB8PSBfX3B1dF91c2VyKDAsIG5hbWUtPm5vZGVuYW1lICsgX19PTERfVVRTX0xFTik7Ci0JZXJyb3IgfD0gX19jb3B5X3RvX3VzZXIoJm5hbWUtPnJlbGVhc2UsICZ1dHNuYW1lKCktPnJlbGVhc2UsCi0JCQkJX19PTERfVVRTX0xFTik7Ci0JZXJyb3IgfD0gX19wdXRfdXNlcigwLCBuYW1lLT5yZWxlYXNlICsgX19PTERfVVRTX0xFTik7Ci0JZXJyb3IgfD0gX19jb3B5X3RvX3VzZXIoJm5hbWUtPnZlcnNpb24sICZ1dHNuYW1lKCktPnZlcnNpb24sCi0JCQkJX19PTERfVVRTX0xFTik7Ci0JZXJyb3IgfD0gX19wdXRfdXNlcigwLCBuYW1lLT52ZXJzaW9uICsgX19PTERfVVRTX0xFTik7Ci0JZXJyb3IgfD0gX19jb3B5X3RvX3VzZXIoJm5hbWUtPm1hY2hpbmUsICZ1dHNuYW1lKCktPm1hY2hpbmUsCi0JCQkJX19PTERfVVRTX0xFTik7Ci0JZXJyb3IgfD0gX19wdXRfdXNlcigwLCBuYW1lLT5tYWNoaW5lICsgX19PTERfVVRTX0xFTik7Ci0KLQl1cF9yZWFkKCZ1dHNfc2VtKTsKLQotCWVycm9yID0gZXJyb3IgPyAtRUZBVUxUIDogMDsKLQotCXJldHVybiBlcnJvcjsKLX0KLQogaW50IGtlcm5lbF9leGVjdmUoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNoYXIgKmNvbnN0IGFyZ3ZbXSwgY2hhciAqY29uc3QgZW52cFtdKQogewogCW1tX3NlZ21lbnRfdCBmczsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvTWFrZWZpbGUgYi9hcmNoL3VtL3N5cy1pMzg2L01ha2VmaWxlCmluZGV4IDFiNTQ5YmMuLjgwNGIyOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvTWFrZWZpbGUKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9NYWtlZmlsZQpAQCAtNiw2ICs2LDggQEAKIAlwdHJhY2VfdXNlci5vIHNldGptcC5vIHNpZ25hbC5vIHN0dWIubyBzdHViX3NlZ3YubyBzeXNjYWxscy5vIHN5c3JxLm8gXAogCXN5c19jYWxsX3RhYmxlLm8gdGxzLm8KIAorb2JqLSQoQ09ORklHX0JJTkZNVF9FTEYpICs9IGVsZmNvcmUubworCiBzdWJhcmNoLW9iai15ID0gbGliL3NlbWFwaG9yZV8zMi5vIGxpYi9zdHJpbmdfMzIubwogc3ViYXJjaC1vYmotJChDT05GSUdfSElHSE1FTSkgKz0gbW0vaGlnaG1lbV8zMi5vCiBzdWJhcmNoLW9iai0kKENPTkZJR19NT0RVTEVTKSArPSBrZXJuZWwvbW9kdWxlLm8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvYXNtL2VsZi5oIGIvYXJjaC91bS9zeXMtaTM4Ni9hc20vZWxmLmgKaW5kZXggNzcwODg1NC4uZTY0Y2Q0MSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9hc20vZWxmLmgKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9hc20vZWxmLmgKQEAgLTExNiw0NyArMTE2LDQgQEAKIAl9CQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKLS8qCi0gKiBUaGVzZSBtYWNyb3MgcGFyYW1ldGVyaXplIGVsZl9jb3JlX2R1bXAgaW4gZnMvYmluZm10X2VsZi5jIHRvIHdyaXRlIG91dAotICogZXh0cmEgc2VnbWVudHMgY29udGFpbmluZyB0aGUgdnN5c2NhbGwgRFNPIGNvbnRlbnRzLiAgRHVtcGluZyBpdHMKLSAqIGNvbnRlbnRzIG1ha2VzIHBvc3QtbW9ydGVtIGZ1bGx5IGludGVycHJldGFibGUgbGF0ZXIgd2l0aG91dCBtYXRjaGluZyB1cAotICogdGhlIHNhbWUga2VybmVsIGFuZCBoYXJkd2FyZSBjb25maWcgdG8gc2VlIHdoYXQgUEMgdmFsdWVzIG1lYW50LgotICogRHVtcGluZyBpdHMgZXh0cmEgRUxGIHByb2dyYW0gaGVhZGVycyBpbmNsdWRlcyBhbGwgdGhlIG90aGVyIGluZm9ybWF0aW9uCi0gKiBhIGRlYnVnZ2VyIG5lZWRzIHRvIGVhc2lseSBmaW5kIGhvdyB0aGUgdnN5c2NhbGwgRFNPIHdhcyBiZWluZyB1c2VkLgotICovCi0jZGVmaW5lIEVMRl9DT1JFX0VYVFJBX1BIRFJTCQkJCQkJICAgICAgXAotCSh2c3lzY2FsbF9laGRyID8gKCgoc3RydWN0IGVsZmhkciAqKXZzeXNjYWxsX2VoZHIpLT5lX3BobnVtKSA6IDAgKQotCi0jZGVmaW5lIEVMRl9DT1JFX1dSSVRFX0VYVFJBX1BIRFJTCQkJCQkgICAgICBcCi1pZiAoIHZzeXNjYWxsX2VoZHIgKSB7CQkJCQkJCSAgICAgIFwKLQljb25zdCBzdHJ1Y3QgZWxmaGRyICpjb25zdCBlaGRycCA9IChzdHJ1Y3QgZWxmaGRyICopdnN5c2NhbGxfZWhkcjsgICAgXAotCWNvbnN0IHN0cnVjdCBlbGZfcGhkciAqY29uc3QgcGhkcnAgPQkJCQkgICAgICBcCi0JCShjb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKikgKHZzeXNjYWxsX2VoZHIgKyBlaGRycC0+ZV9waG9mZik7ICAgXAotCWludCBpOwkJCQkJCQkJICAgICAgXAotCUVsZjMyX09mZiBvZnMgPSAwOwkJCQkJCSAgICAgIFwKLQlmb3IgKGkgPSAwOyBpIDwgZWhkcnAtPmVfcGhudW07ICsraSkgewkJCQkgICAgICBcCi0JCXN0cnVjdCBlbGZfcGhkciBwaGRyID0gcGhkcnBbaV07CQkJICAgICAgXAotCQlpZiAocGhkci5wX3R5cGUgPT0gUFRfTE9BRCkgewkJCQkgICAgICBcCi0JCQlvZnMgPSBwaGRyLnBfb2Zmc2V0ID0gb2Zmc2V0OwkJCSAgICAgIFwKLQkJCW9mZnNldCArPSBwaGRyLnBfZmlsZXN6OwkJCSAgICAgIFwKLQkJfQkJCQkJCQkgICAgICBcCi0JCWVsc2UJCQkJCQkJICAgICAgXAotCQkJcGhkci5wX29mZnNldCArPSBvZnM7CQkJCSAgICAgIFwKLQkJcGhkci5wX3BhZGRyID0gMDsgLyogbWF0Y2ggb3RoZXIgY29yZSBwaGRycyAqLwkJICAgICAgXAotCQlEVU1QX1dSSVRFKCZwaGRyLCBzaXplb2YocGhkcikpOwkJCSAgICAgIFwKLQl9CQkJCQkJCQkgICAgICBcCi19Ci0jZGVmaW5lIEVMRl9DT1JFX1dSSVRFX0VYVFJBX0RBVEEJCQkJCSAgICAgIFwKLWlmICggdnN5c2NhbGxfZWhkciApIHsJCQkJCQkJICAgICAgXAotCWNvbnN0IHN0cnVjdCBlbGZoZHIgKmNvbnN0IGVoZHJwID0gKHN0cnVjdCBlbGZoZHIgKil2c3lzY2FsbF9laGRyOyAgICBcCi0JY29uc3Qgc3RydWN0IGVsZl9waGRyICpjb25zdCBwaGRycCA9CQkJCSAgICAgIFwKLQkJKGNvbnN0IHN0cnVjdCBlbGZfcGhkciAqKSAodnN5c2NhbGxfZWhkciArIGVoZHJwLT5lX3Bob2ZmKTsgICBcCi0JaW50IGk7CQkJCQkJCQkgICAgICBcCi0JZm9yIChpID0gMDsgaSA8IGVoZHJwLT5lX3BobnVtOyArK2kpIHsJCQkJICAgICAgXAotCQlpZiAocGhkcnBbaV0ucF90eXBlID09IFBUX0xPQUQpCQkJCSAgICAgIFwKLQkJCURVTVBfV1JJVEUoKHZvaWQgKikgcGhkcnBbaV0ucF92YWRkciwJCSAgICAgIFwKLQkJCQkgICBwaGRycFtpXS5wX2ZpbGVzeik7CQkJICAgICAgXAotCX0JCQkJCQkJCSAgICAgIFwKLX0KLQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3VtL3N5cy1pMzg2L2VsZmNvcmUuYyBiL2FyY2gvdW0vc3lzLWkzODYvZWxmY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYjQ5YjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL3N5cy1pMzg2L2VsZmNvcmUuYwpAQCAtMCwwICsxLDgzIEBACisjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvY29yZWR1bXAuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vZWxmLmg+CisKKworRWxmMzJfSGFsZiBlbGZfY29yZV9leHRyYV9waGRycyh2b2lkKQoreworCXJldHVybiB2c3lzY2FsbF9laGRyID8gKCgoc3RydWN0IGVsZmhkciAqKXZzeXNjYWxsX2VoZHIpLT5lX3BobnVtKSA6IDA7Cit9CisKK2ludCBlbGZfY29yZV93cml0ZV9leHRyYV9waGRycyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgc2l6ZV90ICpzaXplLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbGltaXQpCit7CisJaWYgKCB2c3lzY2FsbF9laGRyICkgeworCQljb25zdCBzdHJ1Y3QgZWxmaGRyICpjb25zdCBlaGRycCA9CisJCQkoc3RydWN0IGVsZmhkciAqKSB2c3lzY2FsbF9laGRyOworCQljb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKmNvbnN0IHBoZHJwID0KKwkJCShjb25zdCBzdHJ1Y3QgZWxmX3BoZHIgKikgKHZzeXNjYWxsX2VoZHIgKyBlaGRycC0+ZV9waG9mZik7CisJCWludCBpOworCQlFbGYzMl9PZmYgb2ZzID0gMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgZWhkcnAtPmVfcGhudW07ICsraSkgeworCQkJc3RydWN0IGVsZl9waGRyIHBoZHIgPSBwaGRycFtpXTsKKworCQkJaWYgKHBoZHIucF90eXBlID09IFBUX0xPQUQpIHsKKwkJCQlvZnMgPSBwaGRyLnBfb2Zmc2V0ID0gb2Zmc2V0OworCQkJCW9mZnNldCArPSBwaGRyLnBfZmlsZXN6OworCQkJfSBlbHNlIHsKKwkJCQlwaGRyLnBfb2Zmc2V0ICs9IG9mczsKKwkJCX0KKwkJCXBoZHIucF9wYWRkciA9IDA7IC8qIG1hdGNoIG90aGVyIGNvcmUgcGhkcnMgKi8KKwkJCSpzaXplICs9IHNpemVvZihwaGRyKTsKKwkJCWlmICgqc2l6ZSA+IGxpbWl0CisJCQkgICAgfHwgIWR1bXBfd3JpdGUoZmlsZSwgJnBoZHIsIHNpemVvZihwaGRyKSkpCisJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKK2ludCBlbGZfY29yZV93cml0ZV9leHRyYV9kYXRhKHN0cnVjdCBmaWxlICpmaWxlLCBzaXplX3QgKnNpemUsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIGxpbWl0KQoreworCWlmICggdnN5c2NhbGxfZWhkciApIHsKKwkJY29uc3Qgc3RydWN0IGVsZmhkciAqY29uc3QgZWhkcnAgPQorCQkJKHN0cnVjdCBlbGZoZHIgKikgdnN5c2NhbGxfZWhkcjsKKwkJY29uc3Qgc3RydWN0IGVsZl9waGRyICpjb25zdCBwaGRycCA9CisJCQkoY29uc3Qgc3RydWN0IGVsZl9waGRyICopICh2c3lzY2FsbF9laGRyICsgZWhkcnAtPmVfcGhvZmYpOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgZWhkcnAtPmVfcGhudW07ICsraSkgeworCQkJaWYgKHBoZHJwW2ldLnBfdHlwZSA9PSBQVF9MT0FEKSB7CisJCQkJdm9pZCAqYWRkciA9ICh2b2lkICopIHBoZHJwW2ldLnBfdmFkZHI7CisJCQkJc2l6ZV90IGZpbGVzeiA9IHBoZHJwW2ldLnBfZmlsZXN6OworCisJCQkJKnNpemUgKz0gZmlsZXN6OworCQkJCWlmICgqc2l6ZSA+IGxpbWl0CisJCQkJICAgIHx8ICFkdW1wX3dyaXRlKGZpbGUsIGFkZHIsIGZpbGVzeikpCisJCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJfQorCXJldHVybiAxOworfQorCitzaXplX3QgZWxmX2NvcmVfZXh0cmFfZGF0YV9zaXplKHZvaWQpCit7CisJaWYgKCB2c3lzY2FsbF9laGRyICkgeworCQljb25zdCBzdHJ1Y3QgZWxmaGRyICpjb25zdCBlaGRycCA9CisJCQkoc3RydWN0IGVsZmhkciAqKXZzeXNjYWxsX2VoZHI7CisJCWNvbnN0IHN0cnVjdCBlbGZfcGhkciAqY29uc3QgcGhkcnAgPQorCQkJKGNvbnN0IHN0cnVjdCBlbGZfcGhkciAqKSAodnN5c2NhbGxfZWhkciArIGVoZHJwLT5lX3Bob2ZmKTsKKwkJaW50IGk7CisKKwkJZm9yIChpID0gMDsgaSA8IGVoZHJwLT5lX3BobnVtOyArK2kpCisJCQlpZiAocGhkcnBbaV0ucF90eXBlID09IFBUX0xPQUQpCisJCQkJcmV0dXJuIChzaXplX3QpIHBoZHJwW2ldLnBfZmlsZXN6OworCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvc2hhcmVkL3N5c2RlcC9zeXNjYWxscy5oIGIvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL3N5c2NhbGxzLmgKaW5kZXggZTc3ODc2Ny4uMDVjYjc5NiAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL3N5c2NhbGxzLmgKKysrIGIvYXJjaC91bS9zeXMtaTM4Ni9zaGFyZWQvc3lzZGVwL3N5c2NhbGxzLmgKQEAgLTEzLDggKzEzLDYgQEAKICAqLwogZXh0ZXJuIHN5c2NhbGxfaGFuZGxlcl90IHN5c19ydF9zaWdhY3Rpb247CiAKLWV4dGVybiBzeXNjYWxsX2hhbmRsZXJfdCBvbGRfbW1hcF9pMzg2OwotCiBleHRlcm4gc3lzY2FsbF9oYW5kbGVyX3QgKnN5c19jYWxsX3RhYmxlW107CiAKICNkZWZpbmUgRVhFQ1VURV9TWVNDQUxMKHN5c2NhbGwsIHJlZ3MpIFwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vc3lzLWkzODYvc3lzX2NhbGxfdGFibGUuUyBiL2FyY2gvdW0vc3lzLWkzODYvc3lzX2NhbGxfdGFibGUuUwppbmRleCBjNjI2MGRkLi5kZTI3NDA3MSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMtaTM4Ni9zeXNfY2FsbF90YWJsZS5TCisrKyBiL2FyY2gvdW0vc3lzLWkzODYvc3lzX2NhbGxfdGFibGUuUwpAQCAtNyw3ICs3LDcgQEAKICNkZWZpbmUgc3lzX3ZtODZvbGQgc3lzX25pX3N5c2NhbGwKICNkZWZpbmUgc3lzX3ZtODYgc3lzX25pX3N5c2NhbGwKIAotI2RlZmluZSBvbGRfbW1hcCBvbGRfbW1hcF9pMzg2CisjZGVmaW5lIG9sZF9tbWFwIHN5c19vbGRfbW1hcAogCiAjZGVmaW5lIHB0cmVnc19mb3JrIHN5c19mb3JrCiAjZGVmaW5lIHB0cmVnc19leGVjdmUgc3lzX2V4ZWN2ZQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMtaTM4Ni9zeXNjYWxscy5jIGIvYXJjaC91bS9zeXMtaTM4Ni9zeXNjYWxscy5jCmluZGV4IDg1N2NhMGIuLjcwY2EzNTcgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vc3lzLWkzODYvc3lzY2FsbHMuYworKysgYi9hcmNoL3VtL3N5cy1pMzg2L3N5c2NhbGxzLmMKQEAgLTEyLDU3ICsxMiw2IEBACiAjaW5jbHVkZSAiYXNtL3VuaXN0ZC5oIgogCiAvKgotICogUGVyZm9ybSB0aGUgc2VsZWN0KG5kLCBpbiwgb3V0LCBleCwgdHYpIGFuZCBtbWFwKCkgc3lzdGVtCi0gKiBjYWxscy4gTGludXgvaTM4NiBkaWRuJ3QgdXNlIHRvIGJlIGFibGUgdG8gaGFuZGxlIG1vcmUgdGhhbgotICogNCBzeXN0ZW0gY2FsbCBwYXJhbWV0ZXJzLCBzbyB0aGVzZSBzeXN0ZW0gY2FsbHMgdXNlZCBhIG1lbW9yeQotICogYmxvY2sgZm9yIHBhcmFtZXRlciBwYXNzaW5nLi4KLSAqLwotCi1zdHJ1Y3QgbW1hcF9hcmdfc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0JdW5zaWduZWQgbG9uZyBsZW47Ci0JdW5zaWduZWQgbG9uZyBwcm90OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBmZDsKLQl1bnNpZ25lZCBsb25nIG9mZnNldDsKLX07Ci0KLWV4dGVybiBpbnQgb2xkX21tYXAodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKLQkJICAgIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywKLQkJICAgIHVuc2lnbmVkIGxvbmcgZmQsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKLQotbG9uZyBvbGRfbW1hcF9pMzg2KHN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgX191c2VyICphcmcpCi17Ci0Jc3RydWN0IG1tYXBfYXJnX3N0cnVjdCBhOwotCWludCBlcnIgPSAtRUZBVUxUOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZhLCBhcmcsIHNpemVvZihhKSkpCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gb2xkX21tYXAoYS5hZGRyLCBhLmxlbiwgYS5wcm90LCBhLmZsYWdzLCBhLmZkLCBhLm9mZnNldCk7Ci0gb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0cnVjdCBzZWxfYXJnX3N0cnVjdCB7Ci0JdW5zaWduZWQgbG9uZyBuOwotCWZkX3NldCBfX3VzZXIgKmlucDsKLQlmZF9zZXQgX191c2VyICpvdXRwOwotCWZkX3NldCBfX3VzZXIgKmV4cDsKLQlzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKnR2cDsKLX07Ci0KLWxvbmcgb2xkX3NlbGVjdChzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QgX191c2VyICphcmcpCi17Ci0Jc3RydWN0IHNlbF9hcmdfc3RydWN0IGE7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmEsIGFyZywgc2l6ZW9mKGEpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JLyogc3lzX3NlbGVjdCgpIGRvZXMgdGhlIGFwcHJvcHJpYXRlIGtlcm5lbCBsb2NraW5nICovCi0JcmV0dXJuIHN5c19zZWxlY3QoYS5uLCBhLmlucCwgYS5vdXRwLCBhLmV4cCwgYS50dnApOwotfQotCi0vKgogICogVGhlIHByb3RvdHlwZSBvbiBpMzg2IGlzOgogICoKICAqICAgICBpbnQgY2xvbmUoaW50IGZsYWdzLCB2b2lkICogY2hpbGRfc3RhY2ssIGludCAqIHBhcmVudF90aWRwdHIsIHN0cnVjdCB1c2VyX2Rlc2MgKiBuZXd0bHMsIGludCAqIGNoaWxkX3RpZHB0cikKQEAgLTg1LDkyICszNCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyoKLSAqIHN5c19pcGMoKSBpcyB0aGUgZGUtbXVsdGlwbGV4ZXIgZm9yIHRoZSBTeXNWIElQQyBjYWxscy4uCi0gKgotICogVGhpcyBpcyByZWFsbHkgaG9ycmlibHkgdWdseS4KLSAqLwotbG9uZyBzeXNfaXBjICh1aW50IGNhbGwsIGludCBmaXJzdCwgaW50IHNlY29uZCwKLQkgICAgIGludCB0aGlyZCwgdm9pZCBfX3VzZXIgKnB0ciwgbG9uZyBmaWZ0aCkKLXsKLQlpbnQgdmVyc2lvbiwgcmV0OwotCi0JdmVyc2lvbiA9IGNhbGwgPj4gMTY7IC8qIGhhY2sgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KLQljYWxsICY9IDB4ZmZmZjsKLQotCXN3aXRjaCAoY2FsbCkgewotCWNhc2UgU0VNT1A6Ci0JCXJldHVybiBzeXNfc2VtdGltZWRvcChmaXJzdCwgKHN0cnVjdCBzZW1idWYgX191c2VyICopIHB0ciwKLQkJCQkgICAgICBzZWNvbmQsIE5VTEwpOwotCWNhc2UgU0VNVElNRURPUDoKLQkJcmV0dXJuIHN5c19zZW10aW1lZG9wKGZpcnN0LCAoc3RydWN0IHNlbWJ1ZiBfX3VzZXIgKikgcHRyLAotCQkJCSAgICAgIHNlY29uZCwKLQkJCQkgICAgICAoY29uc3Qgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqKSBmaWZ0aCk7Ci0JY2FzZSBTRU1HRVQ6Ci0JCXJldHVybiBzeXNfc2VtZ2V0IChmaXJzdCwgc2Vjb25kLCB0aGlyZCk7Ci0JY2FzZSBTRU1DVEw6IHsKLQkJdW5pb24gc2VtdW4gZm91cnRoOwotCQlpZiAoIXB0cikKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoZ2V0X3VzZXIoZm91cnRoLl9fcGFkLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKikgcHRyKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gc3lzX3NlbWN0bCAoZmlyc3QsIHNlY29uZCwgdGhpcmQsIGZvdXJ0aCk7Ci0JfQotCi0JY2FzZSBNU0dTTkQ6Ci0JCXJldHVybiBzeXNfbXNnc25kIChmaXJzdCwgKHN0cnVjdCBtc2didWYgKikgcHRyLAotCQkJCSAgIHNlY29uZCwgdGhpcmQpOwotCWNhc2UgTVNHUkNWOgotCQlzd2l0Y2ggKHZlcnNpb24pIHsKLQkJY2FzZSAwOiB7Ci0JCQlzdHJ1Y3QgaXBjX2tsdWRnZSB0bXA7Ci0JCQlpZiAoIXB0cikKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsCi0JCQkJCSAgIChzdHJ1Y3QgaXBjX2tsdWRnZSAqKSBwdHIsCi0JCQkJCSAgIHNpemVvZiAodG1wKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gc3lzX21zZ3JjdiAoZmlyc3QsIHRtcC5tc2dwLCBzZWNvbmQsCi0JCQkJCSAgIHRtcC5tc2d0eXAsIHRoaXJkKTsKLQkJfQotCQlkZWZhdWx0OgotCQkgICAgICAgIHBhbmljKCJtc2dyY3Ygd2l0aCB2ZXJzaW9uICE9IDAiKTsKLQkJCXJldHVybiBzeXNfbXNncmN2IChmaXJzdCwKLQkJCQkJICAgKHN0cnVjdCBtc2didWYgKikgcHRyLAotCQkJCQkgICBzZWNvbmQsIGZpZnRoLCB0aGlyZCk7Ci0JCX0KLQljYXNlIE1TR0dFVDoKLQkJcmV0dXJuIHN5c19tc2dnZXQgKChrZXlfdCkgZmlyc3QsIHNlY29uZCk7Ci0JY2FzZSBNU0dDVEw6Ci0JCXJldHVybiBzeXNfbXNnY3RsIChmaXJzdCwgc2Vjb25kLCAoc3RydWN0IG1zcWlkX2RzICopIHB0cik7Ci0KLQljYXNlIFNITUFUOgotCQlzd2l0Y2ggKHZlcnNpb24pIHsKLQkJZGVmYXVsdDogewotCQkJdWxvbmcgcmFkZHI7Ci0JCQlyZXQgPSBkb19zaG1hdCAoZmlyc3QsIChjaGFyICopIHB0ciwgc2Vjb25kLCAmcmFkZHIpOwotCQkJaWYgKHJldCkKLQkJCQlyZXR1cm4gcmV0OwotCQkJcmV0dXJuIHB1dF91c2VyIChyYWRkciwgKHVsb25nICopIHRoaXJkKTsKLQkJfQotCQljYXNlIDE6CS8qIGlCQ1MyIGVtdWxhdG9yIGVudHJ5IHBvaW50ICovCi0JCQlpZiAoIXNlZ21lbnRfZXEoZ2V0X2ZzKCksIGdldF9kcygpKSkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXJldHVybiBkb19zaG1hdCAoZmlyc3QsIChjaGFyICopIHB0ciwgc2Vjb25kLCAodWxvbmcgKikgdGhpcmQpOwotCQl9Ci0JY2FzZSBTSE1EVDoKLQkJcmV0dXJuIHN5c19zaG1kdCAoKGNoYXIgKilwdHIpOwotCWNhc2UgU0hNR0VUOgotCQlyZXR1cm4gc3lzX3NobWdldCAoZmlyc3QsIHNlY29uZCwgdGhpcmQpOwotCWNhc2UgU0hNQ1RMOgotCQlyZXR1cm4gc3lzX3NobWN0bCAoZmlyc3QsIHNlY29uZCwKLQkJCQkgICAoc3RydWN0IHNobWlkX2RzICopIHB0cik7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FTk9TWVM7Ci0JfQotfQotCiBsb25nIHN5c19zaWdhY3Rpb24oaW50IHNpZywgY29uc3Qgc3RydWN0IG9sZF9zaWdhY3Rpb24gX191c2VyICphY3QsCiAJCQkgc3RydWN0IG9sZF9zaWdhY3Rpb24gX191c2VyICpvYWN0KQogewpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3N5c2NhbGxfdGFibGUuYyBiL2FyY2gvdW0vc3lzLXg4Nl82NC9zeXNjYWxsX3RhYmxlLmMKaW5kZXggZGQyMWQ2OS4uNDdkNDY5ZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9zeXMteDg2XzY0L3N5c2NhbGxfdGFibGUuYworKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbF90YWJsZS5jCkBAIC0yNiwxMSArMjYsNiBAQAogCiAvKiBPbiBVTUwgd2UgY2FsbCBpdCB0aGlzIHdheSAoIm9sZCIgbWVhbnMgaXQncyBub3QgbW1hcDIpICovCiAjZGVmaW5lIHN5c19tbWFwIG9sZF9tbWFwCi0vKgotICogT24geDg2LTY0IHN5c191bmFtZSBpcyBhY3R1YWxseSBzeXNfbmV3dW5hbWUgcGx1cyBhIGNvbXBhdGliaWxpdHkgdHJpY2suCi0gKiBTZWUgYXJjaC94ODZfNjQva2VybmVsL3N5c194ODZfNjQuYwotICovCi0jZGVmaW5lIHN5c191bmFtZSBzeXNfdW5hbWU2NAogCiAjZGVmaW5lIHN0dWJfY2xvbmUgc3lzX2Nsb25lCiAjZGVmaW5lIHN0dWJfZm9yayBzeXNfZm9yawpkaWZmIC0tZ2l0IGEvYXJjaC91bS9zeXMteDg2XzY0L3N5c2NhbGxzLmMgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbHMuYwppbmRleCBmMTE5OWZkLi5mM2Q4MmJiIDEwMDY0NAotLS0gYS9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbHMuYworKysgYi9hcmNoL3VtL3N5cy14ODZfNjQvc3lzY2FsbHMuYwpAQCAtMTIsMjAgKzEyLDYgQEAKICNpbmNsdWRlICJhc20vdWFjY2Vzcy5oIgogI2luY2x1ZGUgIm9zLmgiCiAKLWFzbWxpbmthZ2UgbG9uZyBzeXNfdW5hbWU2NChzdHJ1Y3QgbmV3X3V0c25hbWUgX191c2VyICogbmFtZSkKLXsKLQlpbnQgZXJyOwotCi0JZG93bl9yZWFkKCZ1dHNfc2VtKTsKLQllcnIgPSBjb3B5X3RvX3VzZXIobmFtZSwgdXRzbmFtZSgpLCBzaXplb2YgKCpuYW1lKSk7Ci0JdXBfcmVhZCgmdXRzX3NlbSk7Ci0KLQlpZiAocGVyc29uYWxpdHkoY3VycmVudC0+cGVyc29uYWxpdHkpID09IFBFUl9MSU5VWDMyKQotCQllcnIgfD0gY29weV90b191c2VyKCZuYW1lLT5tYWNoaW5lLCAiaTY4NiIsIDUpOwotCi0JcmV0dXJuIGVyciA/IC1FRkFVTFQgOiAwOwotfQotCiBsb25nIGFyY2hfcHJjdGwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBfX3VzZXIgKmFkZHIpCiB7CiAJdW5zaWduZWQgbG9uZyAqcHRyID0gYWRkciwgdG1wOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvS2NvbmZpZyBiL2FyY2gveDg2L0tjb25maWcKaW5kZXggMDg5NjAwOC4uOTM5MzZkZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvS2NvbmZpZworKysgYi9hcmNoL3g4Ni9LY29uZmlnCkBAIC0zMSw2ICszMSw3IEBACiAJc2VsZWN0IEFSQ0hfV0FOVF9GUkFNRV9QT0lOVEVSUwogCXNlbGVjdCBIQVZFX0RNQV9BVFRSUwogCXNlbGVjdCBIQVZFX0tSRVRQUk9CRVMKKwlzZWxlY3QgSEFWRV9PUFRQUk9CRVMKIAlzZWxlY3QgSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRAogCXNlbGVjdCBIQVZFX0RZTkFNSUNfRlRSQUNFCiAJc2VsZWN0IEhBVkVfRlVOQ1RJT05fVFJBQ0VSCkBAIC0xMDEsNiArMTAyLDkgQEAKIGNvbmZpZyBTQlVTCiAJYm9vbAogCitjb25maWcgTkVFRF9ETUFfTUFQX1NUQVRFCisgICAgICAgZGVmX2Jvb2wgKFg4Nl82NCB8fCBETUFSIHx8IERNQV9BUElfREVCVUcpCisKIGNvbmZpZyBHRU5FUklDX0lTQV9ETUEKIAlkZWZfYm9vbCB5CiAKQEAgLTE4NCw2ICsxODgsOSBAQAogY29uZmlnIEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DCiAJZGVmX2Jvb2wgeQogCitjb25maWcgSEFWRV9FQVJMWV9SRVMKKwlkZWZfYm9vbCB5CisKIGNvbmZpZyBIQVZFX0lOVEVMX1RYVAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTCAmJiBETUFSICYmIEFDUEkKQEAgLTM4OSw4ICszOTYsMTIgQEAKIAogY29uZmlnIFg4Nl9NUlNUCiAgICAgICAgYm9vbCAiTW9vcmVzdG93biBNSUQgcGxhdGZvcm0iCisJZGVwZW5kcyBvbiBQQ0kKKwlkZXBlbmRzIG9uIFBDSV9HT0FOWQogCWRlcGVuZHMgb24gWDg2XzMyCiAJZGVwZW5kcyBvbiBYODZfRVhURU5ERURfUExBVEZPUk0KKwlkZXBlbmRzIG9uIFg4Nl9JT19BUElDCisJc2VsZWN0IEFQQl9USU1FUgogCS0tLWhlbHAtLS0KIAkgIE1vb3Jlc3Rvd24gaXMgSW50ZWwncyBMb3cgUG93ZXIgSW50ZWwgQXJjaGl0ZWN0dXJlIChMUElBKSBiYXNlZCBNb2JsaW4KIAkgIEludGVybmV0IERldmljZShNSUQpIHBsYXRmb3JtLiBNb29yZXN0b3duIGNvbnNpc3RzIG9mIHR3byBjaGlwczoKQEAgLTQyNSw2ICs0MzYsNyBAQAogY29uZmlnIFg4Nl9OVU1BUQogCWJvb2wgIk5VTUFRIChJQk0vU2VxdWVudCkiCiAJZGVwZW5kcyBvbiBYODZfMzJfTk9OX1NUQU5EQVJECisJZGVwZW5kcyBvbiBQQ0kKIAlzZWxlY3QgTlVNQQogCXNlbGVjdCBYODZfTVBQQVJTRQogCS0tLWhlbHAtLS0KQEAgLTU2OSw2ICs1ODEsMTggQEAKIAkgIEVuYWJsZSB0byBkZWJ1ZyBwYXJhdmlydF9vcHMgaW50ZXJuYWxzLiAgU3BlY2lmaWNhbGx5LCBCVUcgaWYKIAkgIGEgcGFyYXZpcnRfb3AgaXMgbWlzc2luZyB3aGVuIGl0IGlzIGNhbGxlZC4KIAorY29uZmlnIE5PX0JPT1RNRU0KKwlkZWZhdWx0IHkKKwlib29sICJEaXNhYmxlIEJvb3RtZW0gY29kZSIKKwktLS1oZWxwLS0tCisJICBVc2UgZWFybHlfcmVzIGRpcmVjdGx5IGluc3RlYWQgb2YgYm9vdG1lbSBiZWZvcmUgc2xhYiBpcyByZWFkeS4KKwkJLSBhbGxvY2F0b3IgKGJ1ZGR5KSBbZ2VuZXJpY10KKwkJLSBlYXJseSBhbGxvY2F0b3IgKGJvb3RtZW0pIFtnZW5lcmljXQorCQktIHZlcnkgZWFybHkgYWxsb2NhdG9yIChyZXNlcnZlX2Vhcmx5KigpKSBbeDg2XQorCQktIHZlcnkgdmVyeSBlYXJseSBhbGxvY2F0b3IgKGVhcmx5IGJyayBtb2RlbCkgW3g4Nl0KKwkgIFNvIHJlZHVjZSBvbmUgbGF5ZXIgYmV0d2VlbiBlYXJseSBhbGxvY2F0b3IgdG8gZmluYWwgYWxsb2NhdG9yCisKKwogY29uZmlnIE1FTVRFU1QKIAlib29sICJNZW10ZXN0IgogCS0tLWhlbHAtLS0KQEAgLTYxMyw2ICs2MzcsMTYgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBIUEVUX1RJTUVSICYmIChSVEM9eSB8fCBSVEM9bSB8fCBSVENfRFJWX0NNT1M9bSB8fCBSVENfRFJWX0NNT1M9eSkKIAorY29uZmlnIEFQQl9USU1FUgorICAgICAgIGRlZl9ib29sIHkgaWYgTVJTVAorICAgICAgIHByb21wdCAiTGFuZ3dlbGwgQVBCIFRpbWVyIFN1cHBvcnQiIGlmIFg4Nl9NUlNUCisgICAgICAgaGVscAorICAgICAgICAgQVBCIHRpbWVyIGlzIHRoZSByZXBsYWNlbWVudCBmb3IgODI1NCwgSFBFVCBvbiBYODYgTUlEIHBsYXRmb3Jtcy4KKyAgICAgICAgIFRoZSBBUEJUIHByb3ZpZGVzIGEgc3RhYmxlIHRpbWUgYmFzZSBvbiBTTVAKKyAgICAgICAgIHN5c3RlbXMsIHVubGlrZSB0aGUgVFNDLCBidXQgaXQgaXMgbW9yZSBleHBlbnNpdmUgdG8gYWNjZXNzLAorICAgICAgICAgYXMgaXQgaXMgb2ZmLWNoaXAuIEFQQiB0aW1lcnMgYXJlIGFsd2F5cyBydW5uaW5nIHJlZ2FyZGxlc3Mgb2YgQ1BVCisgICAgICAgICBDIHN0YXRlcywgdGhleSBhcmUgdXNlZCBhcyBwZXIgQ1BVIGNsb2NrZXZlbnQgZGV2aWNlIHdoZW4gcG9zc2libGUuCisKICMgTWFyayBhcyBlbWJlZGRlZCBiZWNhdXNlIHRvbyBtYW55IHBlb3BsZSBnb3QgaXQgd3JvbmcuCiAjIFRoZSBjb2RlIGRpc2FibGVzIGl0c2VsZiB3aGVuIG5vdCBuZWVkZWQuCiBjb25maWcgRE1JCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vdHdvZmlzaC1pNTg2LWFzbV8zMi5TIGIvYXJjaC94ODYvY3J5cHRvL3R3b2Zpc2gtaTU4Ni1hc21fMzIuUwppbmRleCAzOWI5OGVkLi41NzUzMzFjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9jcnlwdG8vdHdvZmlzaC1pNTg2LWFzbV8zMi5TCisrKyBiL2FyY2gveDg2L2NyeXB0by90d29maXNoLWk1ODYtYXNtXzMyLlMKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgogCi0vKiByZXR1cm4gYWRyZXNzIGF0IDAgKi8KKy8qIHJldHVybiBhZGRyZXNzIGF0IDAgKi8KIAogI2RlZmluZSBpbl9ibGsgICAgMTIgIC8qIGlucHV0IGJ5dGUgYXJyYXkgYWRkcmVzcyBwYXJhbWV0ZXIqLwogI2RlZmluZSBvdXRfYmxrICAgOCAgLyogb3V0cHV0IGJ5dGUgYXJyYXkgYWRkcmVzcyBwYXJhbWV0ZXIqLwpAQCAtMjMwLDggKzIzMCw4IEBACiAJcHVzaCAgICAlZWRpCiAKIAltb3YJdGZtICsgMTYoJWVzcCksCSVlYnAJLyogYWJ1c2UgdGhlIGJhc2UgcG9pbnRlcjogc2V0IG5ldyBiYXNlIGJvaW50ZXIgdG8gdGhlIGNyeXB0byB0Zm0gKi8KLQlhZGQJJGNyeXB0b190Zm1fY3R4X29mZnNldCwgJWVicAkvKiBjdHggYWRyZXNzICovCi0JbW92ICAgICBpbl9ibGsrMTYoJWVzcCksJWVkaQkvKiBpbnB1dCBhZHJlc3MgaW4gZWRpICovCisJYWRkCSRjcnlwdG9fdGZtX2N0eF9vZmZzZXQsICVlYnAJLyogY3R4IGFkZHJlc3MgKi8KKwltb3YgICAgIGluX2JsaysxNiglZXNwKSwlZWRpCS8qIGlucHV0IGFkZHJlc3MgaW4gZWRpICovCiAKIAltb3YJKCVlZGkpLAkJJWVheAogCW1vdgliX29mZnNldCglZWRpKSwJJWVieApAQCAtMjg2LDggKzI4Niw4IEBACiAKIAogCW1vdgl0Zm0gKyAxNiglZXNwKSwJJWVicAkvKiBhYnVzZSB0aGUgYmFzZSBwb2ludGVyOiBzZXQgbmV3IGJhc2UgYm9pbnRlciB0byB0aGUgY3J5cHRvIHRmbSAqLwotCWFkZAkkY3J5cHRvX3RmbV9jdHhfb2Zmc2V0LCAlZWJwCS8qIGN0eCBhZHJlc3MgKi8KLQltb3YgICAgIGluX2JsaysxNiglZXNwKSwlZWRpCS8qIGlucHV0IGFkcmVzcyBpbiBlZGkgKi8KKwlhZGQJJGNyeXB0b190Zm1fY3R4X29mZnNldCwgJWVicAkvKiBjdHggYWRkcmVzcyAqLworCW1vdiAgICAgaW5fYmxrKzE2KCVlc3ApLCVlZGkJLyogaW5wdXQgYWRkcmVzcyBpbiBlZGkgKi8KIAogCW1vdgkoJWVkaSksCQklZWF4CiAJbW92CWJfb2Zmc2V0KCVlZGkpLAklZWJ4CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9jcnlwdG8vdHdvZmlzaC14ODZfNjQtYXNtXzY0LlMgYi9hcmNoL3g4Ni9jcnlwdG8vdHdvZmlzaC14ODZfNjQtYXNtXzY0LlMKaW5kZXggMzU5NzRhNS4uNTczYWExMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvY3J5cHRvL3R3b2Zpc2gteDg2XzY0LWFzbV82NC5TCisrKyBiL2FyY2gveDg2L2NyeXB0by90d29maXNoLXg4Nl82NC1hc21fNjQuUwpAQCAtMjIxLDExICsyMjEsMTEgQEAKIHR3b2Zpc2hfZW5jX2JsazoKIAlwdXNocSAgICBSMQogCi0JLyogJXJkaSBjb250YWlucyB0aGUgY3J5cHRvIHRmbSBhZHJlc3MgKi8KLQkvKiAlcnNpIGNvbnRhaW5zIHRoZSBvdXRwdXQgYWRyZXNzICovCi0JLyogJXJkeCBjb250YWlucyB0aGUgaW5wdXQgYWRyZXNzICovCi0JYWRkCSRjcnlwdG9fdGZtX2N0eF9vZmZzZXQsICVyZGkJLyogc2V0IGN0eCBhZHJlc3MgKi8KLQkvKiBjdHggYWRyZXNzIGlzIG1vdmVkIHRvIGZyZWUgb25lIG5vbi1yZXggcmVnaXN0ZXIKKwkvKiAlcmRpIGNvbnRhaW5zIHRoZSBjcnlwdG8gdGZtIGFkZHJlc3MgKi8KKwkvKiAlcnNpIGNvbnRhaW5zIHRoZSBvdXRwdXQgYWRkcmVzcyAqLworCS8qICVyZHggY29udGFpbnMgdGhlIGlucHV0IGFkZHJlc3MgKi8KKwlhZGQJJGNyeXB0b190Zm1fY3R4X29mZnNldCwgJXJkaQkvKiBzZXQgY3R4IGFkZHJlc3MgKi8KKwkvKiBjdHggYWRkcmVzcyBpcyBtb3ZlZCB0byBmcmVlIG9uZSBub24tcmV4IHJlZ2lzdGVyCiAJYXMgdGFyZ2V0IGZvciB0aGUgOGJpdCBoaWdoIG9wZXJhdGlvbnMgKi8KIAltb3YJJXJkaSwJCSVyMTEKIApAQCAtMjc0LDExICsyNzQsMTEgQEAKIHR3b2Zpc2hfZGVjX2JsazoKIAlwdXNocSAgICBSMQogCi0JLyogJXJkaSBjb250YWlucyB0aGUgY3J5cHRvIHRmbSBhZHJlc3MgKi8KLQkvKiAlcnNpIGNvbnRhaW5zIHRoZSBvdXRwdXQgYWRyZXNzICovCi0JLyogJXJkeCBjb250YWlucyB0aGUgaW5wdXQgYWRyZXNzICovCi0JYWRkCSRjcnlwdG9fdGZtX2N0eF9vZmZzZXQsICVyZGkJLyogc2V0IGN0eCBhZHJlc3MgKi8KLQkvKiBjdHggYWRyZXNzIGlzIG1vdmVkIHRvIGZyZWUgb25lIG5vbi1yZXggcmVnaXN0ZXIKKwkvKiAlcmRpIGNvbnRhaW5zIHRoZSBjcnlwdG8gdGZtIGFkZHJlc3MgKi8KKwkvKiAlcnNpIGNvbnRhaW5zIHRoZSBvdXRwdXQgYWRkcmVzcyAqLworCS8qICVyZHggY29udGFpbnMgdGhlIGlucHV0IGFkZHJlc3MgKi8KKwlhZGQJJGNyeXB0b190Zm1fY3R4X29mZnNldCwgJXJkaQkvKiBzZXQgY3R4IGFkZHJlc3MgKi8KKwkvKiBjdHggYWRkcmVzcyBpcyBtb3ZlZCB0byBmcmVlIG9uZSBub24tcmV4IHJlZ2lzdGVyCiAJYXMgdGFyZ2V0IGZvciB0aGUgOGJpdCBoaWdoIG9wZXJhdGlvbnMgKi8KIAltb3YJJXJkaSwJCSVyMTEKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaWEzMi9pYTMyX2FvdXQuYyBiL2FyY2gveDg2L2lhMzIvaWEzMl9hb3V0LmMKaW5kZXggOTA0NmU0YS4uMjgwYzAxOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaWEzMi9pYTMyX2FvdXQuYworKysgYi9hcmNoL3g4Ni9pYTMyL2lhMzJfYW91dC5jCkBAIC0zMjcsNyArMzI3LDYgQEAKIAljdXJyZW50LT5tbS0+ZnJlZV9hcmVhX2NhY2hlID0gVEFTS19VTk1BUFBFRF9CQVNFOwogCWN1cnJlbnQtPm1tLT5jYWNoZWRfaG9sZV9zaXplID0gMDsKIAotCWN1cnJlbnQtPm1tLT5tbWFwID0gTlVMTDsKIAlpbnN0YWxsX2V4ZWNfY3JlZHMoYnBybSk7CiAJY3VycmVudC0+ZmxhZ3MgJj0gflBGX0ZPUktOT0VYRUM7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMgYi9hcmNoL3g4Ni9pYTMyL2lhMzJlbnRyeS5TCmluZGV4IDUzMTQ3YWQuLjU5YjQ1NTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lhMzIvaWEzMmVudHJ5LlMKKysrIGIvYXJjaC94ODYvaWEzMi9pYTMyZW50cnkuUwpAQCAtNTYzLDcgKzU2Myw3IEBACiAJLnF1YWQgcXVpZXRfbmlfc3lzY2FsbAkJCS8qIG9sZCBtcHggc3lzY2FsbCBob2xkZXIgKi8KIAkucXVhZCBzeXNfc2V0cGdpZAogCS5xdWFkIHF1aWV0X25pX3N5c2NhbGwJCQkvKiBvbGQgdWxpbWl0IHN5c2NhbGwgaG9sZGVyICovCi0JLnF1YWQgc3lzMzJfb2xkdW5hbWUKKwkucXVhZCBzeXNfb2xkdW5hbWUKIAkucXVhZCBzeXNfdW1hc2sJCS8qIDYwICovCiAJLnF1YWQgc3lzX2Nocm9vdAogCS5xdWFkIGNvbXBhdF9zeXNfdXN0YXQKQEAgLTU4Niw3ICs1ODYsNyBAQAogCS5xdWFkIGNvbXBhdF9zeXNfc2V0dGltZW9mZGF5CiAJLnF1YWQgc3lzX2dldGdyb3VwczE2CS8qIDgwICovCiAJLnF1YWQgc3lzX3NldGdyb3VwczE2Ci0JLnF1YWQgc3lzMzJfb2xkX3NlbGVjdAorCS5xdWFkIGNvbXBhdF9zeXNfb2xkX3NlbGVjdAogCS5xdWFkIHN5c19zeW1saW5rCiAJLnF1YWQgc3lzX2xzdGF0CiAJLnF1YWQgc3lzX3JlYWRsaW5rCQkvKiA4NSAqLwpAQCAtNjEzLDcgKzYxMyw3IEBACiAJLnF1YWQgY29tcGF0X3N5c19uZXdzdGF0CiAJLnF1YWQgY29tcGF0X3N5c19uZXdsc3RhdAogCS5xdWFkIGNvbXBhdF9zeXNfbmV3ZnN0YXQKLQkucXVhZCBzeXMzMl91bmFtZQorCS5xdWFkIHN5c191bmFtZQogCS5xdWFkIHN0dWIzMl9pb3BsCQkvKiAxMTAgKi8KIAkucXVhZCBzeXNfdmhhbmd1cAogCS5xdWFkIHF1aWV0X25pX3N5c2NhbGwJLyogb2xkICJpZGxlIiBzeXN0ZW0gY2FsbCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaWEzMi9zeXNfaWEzMi5jIGIvYXJjaC94ODYvaWEzMi9zeXNfaWEzMi5jCmluZGV4IDQyMjU3MmMuLjc0YzM1NDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2lhMzIvc3lzX2lhMzIuYworKysgYi9hcmNoL3g4Ni9pYTMyL3N5c19pYTMyLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogICogYmxvY2sgZm9yIHBhcmFtZXRlciBwYXNzaW5nLi4KICAqLwogCi1zdHJ1Y3QgbW1hcF9hcmdfc3RydWN0IHsKK3N0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QzMiB7CiAJdW5zaWduZWQgaW50IGFkZHI7CiAJdW5zaWduZWQgaW50IGxlbjsKIAl1bnNpZ25lZCBpbnQgcHJvdDsKQEAgLTE1Miw5ICsxNTIsOSBAQAogCXVuc2lnbmVkIGludCBvZmZzZXQ7CiB9OwogCi1hc21saW5rYWdlIGxvbmcgc3lzMzJfbW1hcChzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0IF9fdXNlciAqYXJnKQorYXNtbGlua2FnZSBsb25nIHN5czMyX21tYXAoc3RydWN0IG1tYXBfYXJnX3N0cnVjdDMyIF9fdXNlciAqYXJnKQogewotCXN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgYTsKKwlzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0MzIgYTsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmYSwgYXJnLCBzaXplb2YoYSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTMzMiwyNCArMzMyLDYgQEAKIAlyZXR1cm4gYWxhcm1fc2V0aXRpbWVyKHNlY29uZHMpOwogfQogCi1zdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QgewotCXVuc2lnbmVkIGludCBuOwotCXVuc2lnbmVkIGludCBpbnA7Ci0JdW5zaWduZWQgaW50IG91dHA7Ci0JdW5zaWduZWQgaW50IGV4cDsKLQl1bnNpZ25lZCBpbnQgdHZwOwotfTsKLQotYXNtbGlua2FnZSBsb25nIHN5czMyX29sZF9zZWxlY3Qoc3RydWN0IHNlbF9hcmdfc3RydWN0IF9fdXNlciAqYXJnKQotewotCXN0cnVjdCBzZWxfYXJnX3N0cnVjdCBhOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZhLCBhcmcsIHNpemVvZihhKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiBjb21wYXRfc3lzX3NlbGVjdChhLm4sIGNvbXBhdF9wdHIoYS5pbnApLCBjb21wYXRfcHRyKGEub3V0cCksCi0JCQkJIGNvbXBhdF9wdHIoYS5leHApLCBjb21wYXRfcHRyKGEudHZwKSk7Ci19Ci0KIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl93YWl0cGlkKGNvbXBhdF9waWRfdCBwaWQsIHVuc2lnbmVkIGludCAqc3RhdF9hZGRyLAogCQkJICAgICAgaW50IG9wdGlvbnMpCiB7CkBAIC00NjYsNTggKzQ0OCw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotYXNtbGlua2FnZSBsb25nIHN5czMyX29sZHVuYW1lKHN0cnVjdCBvbGRvbGRfdXRzbmFtZSBfX3VzZXIgKm5hbWUpCi17Ci0JY2hhciAqYXJjaCA9ICJ4ODZfNjQiOwotCWludCBlcnI7Ci0KLQlpZiAoIW5hbWUpCi0JCXJldHVybiAtRUZBVUxUOwotCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgbmFtZSwgc2l6ZW9mKHN0cnVjdCBvbGRvbGRfdXRzbmFtZSkpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWRvd25fcmVhZCgmdXRzX3NlbSk7Ci0KLQllcnIgPSBfX2NvcHlfdG9fdXNlcigmbmFtZS0+c3lzbmFtZSwgJnV0c25hbWUoKS0+c3lzbmFtZSwKLQkJCSAgICAgX19PTERfVVRTX0xFTik7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoMCwgbmFtZS0+c3lzbmFtZStfX09MRF9VVFNfTEVOKTsKLQllcnIgfD0gX19jb3B5X3RvX3VzZXIoJm5hbWUtPm5vZGVuYW1lLCAmdXRzbmFtZSgpLT5ub2RlbmFtZSwKLQkJCSAgICAgIF9fT0xEX1VUU19MRU4pOwotCWVyciB8PSBfX3B1dF91c2VyKDAsIG5hbWUtPm5vZGVuYW1lK19fT0xEX1VUU19MRU4pOwotCWVyciB8PSBfX2NvcHlfdG9fdXNlcigmbmFtZS0+cmVsZWFzZSwgJnV0c25hbWUoKS0+cmVsZWFzZSwKLQkJCSAgICAgIF9fT0xEX1VUU19MRU4pOwotCWVyciB8PSBfX3B1dF91c2VyKDAsIG5hbWUtPnJlbGVhc2UrX19PTERfVVRTX0xFTik7Ci0JZXJyIHw9IF9fY29weV90b191c2VyKCZuYW1lLT52ZXJzaW9uLCAmdXRzbmFtZSgpLT52ZXJzaW9uLAotCQkJICAgICAgX19PTERfVVRTX0xFTik7Ci0JZXJyIHw9IF9fcHV0X3VzZXIoMCwgbmFtZS0+dmVyc2lvbitfX09MRF9VVFNfTEVOKTsKLQotCWlmIChwZXJzb25hbGl0eShjdXJyZW50LT5wZXJzb25hbGl0eSkgPT0gUEVSX0xJTlVYMzIpCi0JCWFyY2ggPSAiaTY4NiI7Ci0KLQllcnIgfD0gX19jb3B5X3RvX3VzZXIoJm5hbWUtPm1hY2hpbmUsIGFyY2gsIHN0cmxlbihhcmNoKSArIDEpOwotCi0JdXBfcmVhZCgmdXRzX3NlbSk7Ci0KLQllcnIgPSBlcnIgPyAtRUZBVUxUIDogMDsKLQotCXJldHVybiBlcnI7Ci19Ci0KLWxvbmcgc3lzMzJfdW5hbWUoc3RydWN0IG9sZF91dHNuYW1lIF9fdXNlciAqbmFtZSkKLXsKLQlpbnQgZXJyOwotCi0JaWYgKCFuYW1lKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlkb3duX3JlYWQoJnV0c19zZW0pOwotCWVyciA9IGNvcHlfdG9fdXNlcihuYW1lLCB1dHNuYW1lKCksIHNpemVvZigqbmFtZSkpOwotCXVwX3JlYWQoJnV0c19zZW0pOwotCWlmIChwZXJzb25hbGl0eShjdXJyZW50LT5wZXJzb25hbGl0eSkgPT0gUEVSX0xJTlVYMzIpCi0JCWVyciB8PSBjb3B5X3RvX3VzZXIoJm5hbWUtPm1hY2hpbmUsICJpNjg2IiwgNSk7Ci0KLQlyZXR1cm4gZXJyID8gLUVGQVVMVCA6IDA7Ci19Ci0KIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9leGVjdmUoY2hhciBfX3VzZXIgKm5hbWUsIGNvbXBhdF91cHRyX3QgX191c2VyICphcmd2LAogCQkJICAgICBjb21wYXRfdXB0cl90IF9fdXNlciAqZW52cCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9LYnVpbGQgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9LYnVpbGQKaW5kZXggOWY4MjhmOC4uNDkzMDkyZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vS2J1aWxkCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL0tidWlsZApAQCAtMTEsNiArMTEsNyBAQAogaGVhZGVyLXkgKz0gdWNvbnRleHQuaAogaGVhZGVyLXkgKz0gcHJvY2Vzc29yLWZsYWdzLmgKIGhlYWRlci15ICs9IGh3X2JyZWFrcG9pbnQuaAoraGVhZGVyLXkgKz0gaHlwZXJ2LmgKIAogdW5pZmRlZi15ICs9IGU4MjAuaAogdW5pZmRlZi15ICs9IGlzdC5oCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaAppbmRleCBmMWUyNTNjLi5iMDllYzU1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hbHRlcm5hdGl2ZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FsdGVybmF0aXZlLmgKQEAgLTE2NSwxMCArMTY1LDEyIEBACiAgKiBpbnZhbGlkIGluc3RydWN0aW9uIHBvc3NpYmxlKSBvciBpZiB0aGUgaW5zdHJ1Y3Rpb25zIGFyZSBjaGFuZ2VkIGZyb20gYQogICogY29uc2lzdGVudCBzdGF0ZSB0byBhbm90aGVyIGNvbnNpc3RlbnQgc3RhdGUgYXRvbWljYWxseS4KICAqIE1vcmUgY2FyZSBtdXN0IGJlIHRha2VuIHdoZW4gbW9kaWZ5aW5nIGNvZGUgaW4gdGhlIFNNUCBjYXNlIGJlY2F1c2Ugb2YKLSAqIEludGVsJ3MgZXJyYXRhLgorICogSW50ZWwncyBlcnJhdGEuIHRleHRfcG9rZV9zbXAoKSB0YWtlcyBjYXJlIHRoYXQgZXJyYXRhLCBidXQgc3RpbGwKKyAqIGRvZXNuJ3Qgc3VwcG9ydCBOTUkvTUNFIGhhbmRsZXIgY29kZSBtb2RpZnlpbmcuCiAgKiBPbiB0aGUgbG9jYWwgQ1BVIHlvdSBuZWVkIHRvIGJlIHByb3RlY3RlZCBhZ2FpbiBOTUkgb3IgTUNFIGhhbmRsZXJzIHNlZWluZyBhbgogICogaW5jb25zaXN0ZW50IGluc3RydWN0aW9uIHdoaWxlIHlvdSBwYXRjaC4KICAqLwogZXh0ZXJuIHZvaWQgKnRleHRfcG9rZSh2b2lkICphZGRyLCBjb25zdCB2b2lkICpvcGNvZGUsIHNpemVfdCBsZW4pOworZXh0ZXJuIHZvaWQgKnRleHRfcG9rZV9zbXAodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKTsKIAogI2VuZGlmIC8qIF9BU01fWDg2X0FMVEVSTkFUSVZFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwYl90aW1lci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBiX3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc0YTJlZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwYl90aW1lci5oCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBhcGJfdGltZXIuaDogRHJpdmVyIGZvciBMYW5nd2VsbCBBUEIgdGltZXIgYmFzZWQgb24gU3lub3BzaXMgRGVzaWduV2FyZQorICoKKyAqIChDKSBDb3B5cmlnaHQgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBKYWNvYiBQYW4gKGphY29iLmp1bi5wYW5AaW50ZWwuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBOb3RlOgorICovCisKKyNpZm5kZWYgQVNNX1g4Nl9BUEJUX0gKKyNkZWZpbmUgQVNNX1g4Nl9BUEJUX0gKKyNpbmNsdWRlIDxsaW51eC9zZmkuaD4KKworI2lmZGVmIENPTkZJR19BUEJfVElNRVIKKworLyogTGFuZ3dlbGwgRFcgQVBCIHRpbWVyIHJlZ2lzdGVycyAqLworI2RlZmluZSBBUEJUTVJfTl9MT0FEX0NPVU5UICAgIDB4MDAKKyNkZWZpbmUgQVBCVE1SX05fQ1VSUkVOVF9WQUxVRSAweDA0CisjZGVmaW5lIEFQQlRNUl9OX0NPTlRST0wgICAgICAgMHgwOAorI2RlZmluZSBBUEJUTVJfTl9FT0kgICAgICAgICAgIDB4MGMKKyNkZWZpbmUgQVBCVE1SX05fSU5UX1NUQVRVUyAgICAweDEwCisKKyNkZWZpbmUgQVBCVE1SU19JTlRfU1RBVFVTICAgICAweGEwCisjZGVmaW5lIEFQQlRNUlNfRU9JICAgICAgICAgICAgMHhhNAorI2RlZmluZSBBUEJUTVJTX1JBV19JTlRfU1RBVFVTIDB4YTgKKyNkZWZpbmUgQVBCVE1SU19DT01QX1ZFUlNJT04gICAweGFjCisjZGVmaW5lIEFQQlRNUlNfUkVHX1NJWkUgICAgICAgMHgxNAorCisvKiByZWdpc3RlciBiaXRzICovCisjZGVmaW5lIEFQQlRNUl9DT05UUk9MX0VOQUJMRSAgKDE8PDApCisjZGVmaW5lIEFQQlRNUl9DT05UUk9MX01PREVfUEVSSU9ESUMgICAoMTw8MSkgLyoxOiBwZXJpb2RpYyAwOmZyZWUgcnVubmluZyAqLworI2RlZmluZSBBUEJUTVJfQ09OVFJPTF9JTlQgICAgICgxPDwyKQorCisvKiBkZWZhdWx0IG1lbW9yeSBtYXBwZWQgcmVnaXN0ZXIgYmFzZSAqLworI2RlZmluZSBMTldfU0NVX0FERFIgICAgICAgICAgIDB4RkYxMDAwMDAKKyNkZWZpbmUgTE5XX0VYVF9USU1FUl9PRkZTRVQgICAweDFCODAwCisjZGVmaW5lIEFQQlRfREVGQVVMVF9CQVNFICAgICAgKExOV19TQ1VfQUREUitMTldfRVhUX1RJTUVSX09GRlNFVCkKKyNkZWZpbmUgTE5XX0VYVF9USU1FUl9QR09GRlNFVCAgICAgICAgIDB4ODAwCisKKy8qIEFQQlQgY2xvY2sgc3BlZWQgcmFuZ2UgZnJvbSBQQ0xLIHRvIGZhYnJpYyBiYXNlLCAyNS0xMDBNSHogKi8KKyNkZWZpbmUgQVBCVF9NQVhfRlJFUSAgICAgICAgICA1MAorI2RlZmluZSBBUEJUX01JTl9GUkVRICAgICAgICAgIDEKKyNkZWZpbmUgQVBCVF9NTUFQX1NJWkUgICAgICAgICAxMDI0CisKKyNkZWZpbmUgQVBCVF9ERVZfVVNFRCAgMQorCitleHRlcm4gdm9pZCBhcGJ0X3RpbWVfaW5pdCh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpnbG9iYWxfY2xvY2tfZXZlbnQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBhcGJ0X3F1aWNrX2NhbGlicmF0ZSh2b2lkKTsKK2V4dGVybiBpbnQgYXJjaF9zZXR1cF9hcGJ0X2lycXMoaW50IGlycSwgaW50IHRyaWdnZXIsIGludCBtYXNrLCBpbnQgY3B1KTsKK2V4dGVybiB2b2lkIGFwYnRfc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIGludCBib290X2NwdV9pZDsKK2V4dGVybiBpbnQgZGlzYWJsZV9hcGJ0X3BlcmNwdTsKKworZXh0ZXJuIHN0cnVjdCBzZmlfdGltZXJfdGFibGVfZW50cnkgKnNmaV9nZXRfbXRtcihpbnQgaGludCk7CitleHRlcm4gdm9pZCBzZmlfZnJlZV9tdG1yKHN0cnVjdCBzZmlfdGltZXJfdGFibGVfZW50cnkgKm10bXIpOworZXh0ZXJuIGludCBzZmlfbXRpbWVyX251bTsKKworI2Vsc2UgLyogQ09ORklHX0FQQl9USU1FUiAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYXBidF9xdWlja19jYWxpYnJhdGUodm9pZCkge3JldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgYXBidF90aW1lX2luaXQodm9pZCkge3JldHVybiAwOyB9CisKKyNlbmRpZgorI2VuZGlmIC8qIEFTTV9YODZfQVBCVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jb21wYXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NvbXBhdC5oCmluZGV4IDlhOWM3YmQuLjMwNjE2MGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NvbXBhdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NvbXBhdC5oCkBAIC04LDcgKzgsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL3VzZXIzMi5oPgogCi0jZGVmaW5lIENPTVBBVF9VU0VSX0haCTEwMAorI2RlZmluZSBDT01QQVRfVVNFUl9IWgkJMTAwCisjZGVmaW5lIENPTVBBVF9VVFNfTUFDSElORQkiaTY4NlwwXDAiCiAKIHR5cGVkZWYgdTMyCQljb21wYXRfc2l6ZV90OwogdHlwZWRlZiBzMzIJCWNvbXBhdF9zc2l6ZV90OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZTgyMC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZTgyMC5oCmluZGV4IDc2MTI0OWUuLjBlMjIyOTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2U4MjAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lODIwLmgKQEAgLTExMSwxMSArMTExLDggQEAKIAogZXh0ZXJuIHU2NCBmaW5kX2U4MjBfYXJlYSh1NjQgc3RhcnQsIHU2NCBlbmQsIHU2NCBzaXplLCB1NjQgYWxpZ24pOwogZXh0ZXJuIHU2NCBmaW5kX2U4MjBfYXJlYV9zaXplKHU2NCBzdGFydCwgdTY0ICpzaXplcCwgdTY0IGFsaWduKTsKLWV4dGVybiB2b2lkIHJlc2VydmVfZWFybHkodTY0IHN0YXJ0LCB1NjQgZW5kLCBjaGFyICpuYW1lKTsKLWV4dGVybiB2b2lkIHJlc2VydmVfZWFybHlfb3ZlcmxhcF9vayh1NjQgc3RhcnQsIHU2NCBlbmQsIGNoYXIgKm5hbWUpOwotZXh0ZXJuIHZvaWQgZnJlZV9lYXJseSh1NjQgc3RhcnQsIHU2NCBlbmQpOwotZXh0ZXJuIHZvaWQgZWFybHlfcmVzX3RvX2Jvb3RtZW0odTY0IHN0YXJ0LCB1NjQgZW5kKTsKIGV4dGVybiB1NjQgZWFybHlfcmVzZXJ2ZV9lODIwKHU2NCBzdGFydHQsIHU2NCBzaXpldCwgdTY0IGFsaWduKTsKKyNpbmNsdWRlIDxsaW51eC9lYXJseV9yZXMuaD4KIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZTgyMF9lbmRfb2ZfcmFtX3Bmbih2b2lkKTsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGU4MjBfZW5kX29mX2xvd19yYW1fcGZuKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaGlnaG1lbS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaGlnaG1lbS5oCmluZGV4IDAxNGMyYjg1Li5hNzI2NjUwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oaWdobWVtLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaGlnaG1lbS5oCkBAIC02NiwxMCArNjYsNiBAQAogdm9pZCAqa21hcF9hdG9taWNfcHJvdF9wZm4odW5zaWduZWQgbG9uZyBwZm4sIGVudW0ga21fdHlwZSB0eXBlLCBwZ3Byb3RfdCBwcm90KTsKIHN0cnVjdCBwYWdlICprbWFwX2F0b21pY190b19wYWdlKHZvaWQgKnB0cik7CiAKLSNpZm5kZWYgQ09ORklHX1BBUkFWSVJUCi0jZGVmaW5lIGttYXBfYXRvbWljX3B0ZShwYWdlLCB0eXBlKQlrbWFwX2F0b21pYyhwYWdlLCB0eXBlKQotI2VuZGlmCi0KICNkZWZpbmUgZmx1c2hfY2FjaGVfa21hcHMoKQlkbyB7IH0gd2hpbGUgKDApCiAKIGV4dGVybiB2b2lkIGFkZF9oaWdocGFnZXNfd2l0aF9hY3RpdmVfcmVnaW9ucyhpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h3X2lycS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfaXJxLmgKaW5kZXggZWVhYzgyOS4uYTkyOWM5ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfaXJxLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfaXJxLmgKQEAgLTUzLDEzICs1Myw2IEBACiBleHRlcm4gdm9pZCBjYWxsX2Z1bmN0aW9uX2ludGVycnVwdCh2b2lkKTsKIGV4dGVybiB2b2lkIGNhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCh2b2lkKTsKIAotLyogUElDIHNwZWNpZmljIGZ1bmN0aW9ucyAqLwotZXh0ZXJuIHZvaWQgZGlzYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7Ci1leHRlcm4gdm9pZCBlbmFibGVfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotZXh0ZXJuIGludCBpODI1OUFfaXJxX3BlbmRpbmcodW5zaWduZWQgaW50IGlycSk7Ci1leHRlcm4gdm9pZCBtYWtlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKLWV4dGVybiB2b2lkIGluaXRfODI1OUEoaW50IGFlb2kpOwotCiAvKiBJT0FQSUMgKi8KICNkZWZpbmUgSU9fQVBJQ19JUlEoeCkgKCgoeCkgPj0gTlJfSVJRU19MRUdBQ1kpIHx8ICgoMTw8KHgpKSAmIGlvX2FwaWNfaXJxcykpCiBleHRlcm4gdW5zaWduZWQgbG9uZyBpb19hcGljX2lycXM7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oeXBlcnYuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2h5cGVydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNTNhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oeXBlcnYuaApAQCAtMCwwICsxLDE4NiBAQAorI2lmbmRlZiBfQVNNX1g4Nl9LVk1fSFlQRVJWX0gKKyNkZWZpbmUgX0FTTV9YODZfS1ZNX0hZUEVSVl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogVGhlIGJlbG93IENQVUlEIGxlYXZlcyBhcmUgcHJlc2VudCBpZiBWZXJzaW9uQW5kRmVhdHVyZXMuSHlwZXJ2aXNvclByZXNlbnQKKyAqIGlzIHNldCBieSBDUFVJRChIdkNwdUlkRnVuY3Rpb25WZXJzaW9uQW5kRmVhdHVyZXMpLgorICovCisjZGVmaW5lIEhZUEVSVl9DUFVJRF9WRU5ET1JfQU5EX01BWF9GVU5DVElPTlMJMHg0MDAwMDAwMAorI2RlZmluZSBIWVBFUlZfQ1BVSURfSU5URVJGQUNFCQkJMHg0MDAwMDAwMQorI2RlZmluZSBIWVBFUlZfQ1BVSURfVkVSU0lPTgkJCTB4NDAwMDAwMDIKKyNkZWZpbmUgSFlQRVJWX0NQVUlEX0ZFQVRVUkVTCQkJMHg0MDAwMDAwMworI2RlZmluZSBIWVBFUlZfQ1BVSURfRU5MSUdIVE1FTlRfSU5GTwkJMHg0MDAwMDAwNAorI2RlZmluZSBIWVBFUlZfQ1BVSURfSU1QTEVNRU5UX0xJTUlUUwkJMHg0MDAwMDAwNQorCisvKgorICogRmVhdHVyZSBpZGVudGlmaWNhdGlvbi4gRUFYIGluZGljYXRlcyB3aGljaCBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlCisgKiB0byB0aGUgcGFydGl0aW9uIGJhc2VkIHVwb24gdGhlIGN1cnJlbnQgcGFydGl0aW9uIHByaXZpbGVnZXMuCisgKi8KKworLyogVlAgUnVudGltZSAoSFZfWDY0X01TUl9WUF9SVU5USU1FKSBhdmFpbGFibGUgKi8KKyNkZWZpbmUgSFZfWDY0X01TUl9WUF9SVU5USU1FX0FWQUlMQUJMRQkJKDEgPDwgMCkKKy8qIFBhcnRpdGlvbiBSZWZlcmVuY2UgQ291bnRlciAoSFZfWDY0X01TUl9USU1FX1JFRl9DT1VOVCkgYXZhaWxhYmxlKi8KKyNkZWZpbmUgSFZfWDY0X01TUl9USU1FX1JFRl9DT1VOVF9BVkFJTEFCTEUJKDEgPDwgMSkKKy8qCisgKiBCYXNpYyBTeW5JQyBNU1JzIChIVl9YNjRfTVNSX1NDT05UUk9MIHRocm91Z2ggSFZfWDY0X01TUl9FT00KKyAqIGFuZCBIVl9YNjRfTVNSX1NJTlQwIHRocm91Z2ggSFZfWDY0X01TUl9TSU5UMTUpIGF2YWlsYWJsZQorICovCisjZGVmaW5lIEhWX1g2NF9NU1JfU1lOSUNfQVZBSUxBQkxFCQkoMSA8PCAyKQorLyoKKyAqIFN5bnRoZXRpYyBUaW1lciBNU1JzIChIVl9YNjRfTVNSX1NUSU1FUjBfQ09ORklHIHRocm91Z2gKKyAqIEhWX1g2NF9NU1JfU1RJTUVSM19DT1VOVCkgYXZhaWxhYmxlCisgKi8KKyNkZWZpbmUgSFZfWDY0X01TUl9TWU5USU1FUl9BVkFJTEFCTEUJCSgxIDw8IDMpCisvKgorICogQVBJQyBhY2Nlc3MgTVNScyAoSFZfWDY0X01TUl9FT0ksIEhWX1g2NF9NU1JfSUNSIGFuZCBIVl9YNjRfTVNSX1RQUikKKyAqIGFyZSBhdmFpbGFibGUKKyAqLworI2RlZmluZSBIVl9YNjRfTVNSX0FQSUNfQUNDRVNTX0FWQUlMQUJMRQkoMSA8PCA0KQorLyogSHlwZXJjYWxsIE1TUnMgKEhWX1g2NF9NU1JfR1VFU1RfT1NfSUQgYW5kIEhWX1g2NF9NU1JfSFlQRVJDQUxMKSBhdmFpbGFibGUqLworI2RlZmluZSBIVl9YNjRfTVNSX0hZUEVSQ0FMTF9BVkFJTEFCTEUJCSgxIDw8IDUpCisvKiBBY2Nlc3MgdmlydHVhbCBwcm9jZXNzb3IgaW5kZXggTVNSIChIVl9YNjRfTVNSX1ZQX0lOREVYKSBhdmFpbGFibGUqLworI2RlZmluZSBIVl9YNjRfTVNSX1ZQX0lOREVYX0FWQUlMQUJMRQkJKDEgPDwgNikKKy8qIFZpcnR1YWwgc3lzdGVtIHJlc2V0IE1TUiAoSFZfWDY0X01TUl9SRVNFVCkgaXMgYXZhaWxhYmxlKi8KKyNkZWZpbmUgSFZfWDY0X01TUl9SRVNFVF9BVkFJTEFCTEUJCSgxIDw8IDcpCisgLyoKKyAgKiBBY2Nlc3Mgc3RhdGlzdGljcyBwYWdlcyBNU1JzIChIVl9YNjRfTVNSX1NUQVRTX1BBUlRJVElPTl9SRVRBSUxfUEFHRSwKKyAgKiBIVl9YNjRfTVNSX1NUQVRTX1BBUlRJVElPTl9JTlRFUk5BTF9QQUdFLCBIVl9YNjRfTVNSX1NUQVRTX1ZQX1JFVEFJTF9QQUdFLAorICAqIEhWX1g2NF9NU1JfU1RBVFNfVlBfSU5URVJOQUxfUEFHRSkgYXZhaWxhYmxlCisgICovCisjZGVmaW5lIEhWX1g2NF9NU1JfU1RBVF9QQUdFU19BVkFJTEFCTEUJCSgxIDw8IDgpCisKKy8qCisgKiBGZWF0dXJlIGlkZW50aWZpY2F0aW9uOiBFQlggaW5kaWNhdGVzIHdoaWNoIGZsYWdzIHdlcmUgc3BlY2lmaWVkIGF0CisgKiBwYXJ0aXRpb24gY3JlYXRpb24uIFRoZSBmb3JtYXQgaXMgdGhlIHNhbWUgYXMgdGhlIHBhcnRpdGlvbiBjcmVhdGlvbgorICogZmxhZyBzdHJ1Y3R1cmUgZGVmaW5lZCBpbiBzZWN0aW9uIFBhcnRpdGlvbiBDcmVhdGlvbiBGbGFncy4KKyAqLworI2RlZmluZSBIVl9YNjRfQ1JFQVRFX1BBUlRJVElPTlMJCSgxIDw8IDApCisjZGVmaW5lIEhWX1g2NF9BQ0NFU1NfUEFSVElUSU9OX0lECQkoMSA8PCAxKQorI2RlZmluZSBIVl9YNjRfQUNDRVNTX01FTU9SWV9QT09MCQkoMSA8PCAyKQorI2RlZmluZSBIVl9YNjRfQURKVVNUX01FU1NBR0VfQlVGRkVSUwkJKDEgPDwgMykKKyNkZWZpbmUgSFZfWDY0X1BPU1RfTUVTU0FHRVMJCQkoMSA8PCA0KQorI2RlZmluZSBIVl9YNjRfU0lHTkFMX0VWRU5UUwkJCSgxIDw8IDUpCisjZGVmaW5lIEhWX1g2NF9DUkVBVEVfUE9SVAkJCSgxIDw8IDYpCisjZGVmaW5lIEhWX1g2NF9DT05ORUNUX1BPUlQJCQkoMSA8PCA3KQorI2RlZmluZSBIVl9YNjRfQUNDRVNTX1NUQVRTCQkJKDEgPDwgOCkKKyNkZWZpbmUgSFZfWDY0X0RFQlVHR0lORwkJCSgxIDw8IDExKQorI2RlZmluZSBIVl9YNjRfQ1BVX1BPV0VSX01BTkFHRU1FTlQJCSgxIDw8IDEyKQorI2RlZmluZSBIVl9YNjRfQ09ORklHVVJFX1BST0ZJTEVSCQkoMSA8PCAxMykKKworLyoKKyAqIEZlYXR1cmUgaWRlbnRpZmljYXRpb24uIEVEWCBpbmRpY2F0ZXMgd2hpY2ggbWlzY2VsbGFuZW91cyBmZWF0dXJlcworICogYXJlIGF2YWlsYWJsZSB0byB0aGUgcGFydGl0aW9uLgorICovCisvKiBUaGUgTVdBSVQgaW5zdHJ1Y3Rpb24gaXMgYXZhaWxhYmxlIChwZXIgc2VjdGlvbiBNT05JVE9SIC8gTVdBSVQpICovCisjZGVmaW5lIEhWX1g2NF9NV0FJVF9BVkFJTEFCTEUJCQkJKDEgPDwgMCkKKy8qIEd1ZXN0IGRlYnVnZ2luZyBzdXBwb3J0IGlzIGF2YWlsYWJsZSAqLworI2RlZmluZSBIVl9YNjRfR1VFU1RfREVCVUdHSU5HX0FWQUlMQUJMRQkJKDEgPDwgMSkKKy8qIFBlcmZvcm1hbmNlIE1vbml0b3Igc3VwcG9ydCBpcyBhdmFpbGFibGUqLworI2RlZmluZSBIVl9YNjRfUEVSRl9NT05JVE9SX0FWQUlMQUJMRQkJCSgxIDw8IDIpCisvKiBTdXBwb3J0IGZvciBwaHlzaWNhbCBDUFUgZHluYW1pYyBwYXJ0aXRpb25pbmcgZXZlbnRzIGlzIGF2YWlsYWJsZSovCisjZGVmaW5lIEhWX1g2NF9DUFVfRFlOQU1JQ19QQVJUSVRJT05JTkdfQVZBSUxBQkxFCSgxIDw8IDMpCisvKgorICogU3VwcG9ydCBmb3IgcGFzc2luZyBoeXBlcmNhbGwgaW5wdXQgcGFyYW1ldGVyIGJsb2NrIHZpYSBYTU0KKyAqIHJlZ2lzdGVycyBpcyBhdmFpbGFibGUKKyAqLworI2RlZmluZSBIVl9YNjRfSFlQRVJDQUxMX1BBUkFNU19YTU1fQVZBSUxBQkxFCQkoMSA8PCA0KQorLyogU3VwcG9ydCBmb3IgYSB2aXJ0dWFsIGd1ZXN0IGlkbGUgc3RhdGUgaXMgYXZhaWxhYmxlICovCisjZGVmaW5lIEhWX1g2NF9HVUVTVF9JRExFX1NUQVRFX0FWQUlMQUJMRQkJKDEgPDwgNSkKKworLyoKKyAqIEltcGxlbWVudGF0aW9uIHJlY29tbWVuZGF0aW9ucy4gSW5kaWNhdGVzIHdoaWNoIGJlaGF2aW9ycyB0aGUgaHlwZXJ2aXNvcgorICogcmVjb21tZW5kcyB0aGUgT1MgaW1wbGVtZW50IGZvciBvcHRpbWFsIHBlcmZvcm1hbmNlLgorICovCisgLyoKKyAgKiBSZWNvbW1lbmQgdXNpbmcgaHlwZXJjYWxsIGZvciBhZGRyZXNzIHNwYWNlIHN3aXRjaGVzIHJhdGhlcgorICAqIHRoYW4gTU9WIHRvIENSMyBpbnN0cnVjdGlvbgorICAqLworI2RlZmluZSBIVl9YNjRfTVdBSVRfUkVDT01NRU5ERUQJCSgxIDw8IDApCisvKiBSZWNvbW1lbmQgdXNpbmcgaHlwZXJjYWxsIGZvciBsb2NhbCBUTEIgZmx1c2hlcyByYXRoZXIKKyAqIHRoYW4gSU5WTFBHIG9yIE1PViB0byBDUjMgaW5zdHJ1Y3Rpb25zICovCisjZGVmaW5lIEhWX1g2NF9MT0NBTF9UTEJfRkxVU0hfUkVDT01NRU5ERUQJKDEgPDwgMSkKKy8qCisgKiBSZWNvbW1lbmQgdXNpbmcgaHlwZXJjYWxsIGZvciByZW1vdGUgVExCIGZsdXNoZXMgcmF0aGVyCisgKiB0aGFuIGludGVyLXByb2Nlc3NvciBpbnRlcnJ1cHRzCisgKi8KKyNkZWZpbmUgSFZfWDY0X1JFTU9URV9UTEJfRkxVU0hfUkVDT01NRU5ERUQJKDEgPDwgMikKKy8qCisgKiBSZWNvbW1lbmQgdXNpbmcgTVNScyBmb3IgYWNjZXNzaW5nIEFQSUMgcmVnaXN0ZXJzCisgKiBFT0ksIElDUiBhbmQgVFBSIHJhdGhlciB0aGFuIHRoZWlyIG1lbW9yeS1tYXBwZWQgY291bnRlcnBhcnRzCisgKi8KKyNkZWZpbmUgSFZfWDY0X0FQSUNfQUNDRVNTX1JFQ09NTUVOREVECQkoMSA8PCAzKQorLyogUmVjb21tZW5kIHVzaW5nIHRoZSBoeXBlcnZpc29yLXByb3ZpZGVkIE1TUiB0byBpbml0aWF0ZSBhIHN5c3RlbSBSRVNFVCAqLworI2RlZmluZSBIVl9YNjRfU1lTVEVNX1JFU0VUX1JFQ09NTUVOREVECQkoMSA8PCA0KQorLyoKKyAqIFJlY29tbWVuZCB1c2luZyByZWxheGVkIHRpbWluZyBmb3IgdGhpcyBwYXJ0aXRpb24uIElmIHVzZWQsCisgKiB0aGUgVk0gc2hvdWxkIGRpc2FibGUgYW55IHdhdGNoZG9nIHRpbWVvdXRzIHRoYXQgcmVseSBvbiB0aGUKKyAqIHRpbWVseSBkZWxpdmVyeSBvZiBleHRlcm5hbCBpbnRlcnJ1cHRzCisgKi8KKyNkZWZpbmUgSFZfWDY0X1JFTEFYRURfVElNSU5HX1JFQ09NTUVOREVECSgxIDw8IDUpCisKKy8qIE1TUiB1c2VkIHRvIGlkZW50aWZ5IHRoZSBndWVzdCBPUy4gKi8KKyNkZWZpbmUgSFZfWDY0X01TUl9HVUVTVF9PU19JRAkJCTB4NDAwMDAwMDAKKworLyogTVNSIHVzZWQgdG8gc2V0dXAgcGFnZXMgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoeXBlcnZpc29yLiAqLworI2RlZmluZSBIVl9YNjRfTVNSX0hZUEVSQ0FMTAkJCTB4NDAwMDAwMDEKKworLyogTVNSIHVzZWQgdG8gcHJvdmlkZSB2Y3B1IGluZGV4ICovCisjZGVmaW5lIEhWX1g2NF9NU1JfVlBfSU5ERVgJCQkweDQwMDAwMDAyCisKKy8qIERlZmluZSB0aGUgdmlydHVhbCBBUElDIHJlZ2lzdGVycyAqLworI2RlZmluZSBIVl9YNjRfTVNSX0VPSQkJCQkweDQwMDAwMDcwCisjZGVmaW5lIEhWX1g2NF9NU1JfSUNSCQkJCTB4NDAwMDAwNzEKKyNkZWZpbmUgSFZfWDY0X01TUl9UUFIJCQkJMHg0MDAwMDA3MgorI2RlZmluZSBIVl9YNjRfTVNSX0FQSUNfQVNTSVNUX1BBR0UJCTB4NDAwMDAwNzMKKworLyogRGVmaW5lIHN5bnRoZXRpYyBpbnRlcnJ1cHQgY29udHJvbGxlciBtb2RlbCBzcGVjaWZpYyByZWdpc3RlcnMuICovCisjZGVmaW5lIEhWX1g2NF9NU1JfU0NPTlRST0wJCQkweDQwMDAwMDgwCisjZGVmaW5lIEhWX1g2NF9NU1JfU1ZFUlNJT04JCQkweDQwMDAwMDgxCisjZGVmaW5lIEhWX1g2NF9NU1JfU0lFRlAJCQkweDQwMDAwMDgyCisjZGVmaW5lIEhWX1g2NF9NU1JfU0lNUAkJCQkweDQwMDAwMDgzCisjZGVmaW5lIEhWX1g2NF9NU1JfRU9NCQkJCTB4NDAwMDAwODQKKyNkZWZpbmUgSFZfWDY0X01TUl9TSU5UMAkJCTB4NDAwMDAwOTAKKyNkZWZpbmUgSFZfWDY0X01TUl9TSU5UMQkJCTB4NDAwMDAwOTEKKyNkZWZpbmUgSFZfWDY0X01TUl9TSU5UMgkJCTB4NDAwMDAwOTIKKyNkZWZpbmUgSFZfWDY0X01TUl9TSU5UMwkJCTB4NDAwMDAwOTMKKyNkZWZpbmUgSFZfWDY0X01TUl9TSU5UNAkJCTB4NDAwMDAwOTQKKyNkZWZpbmUgSFZfWDY0X01TUl9TSU5UNQkJCTB4NDAwMDAwOTUKKyNkZWZpbmUgSFZfWDY0X01TUl9TSU5UNgkJCTB4NDAwMDAwOTYKKyNkZWZpbmUgSFZfWDY0X01TUl9TSU5UNwkJCTB4NDAwMDAwOTcKKyNkZWZpbmUgSFZfWDY0X01TUl9TSU5UOAkJCTB4NDAwMDAwOTgKKyNkZWZpbmUgSFZfWDY0X01TUl9TSU5UOQkJCTB4NDAwMDAwOTkKKyNkZWZpbmUgSFZfWDY0X01TUl9TSU5UMTAJCQkweDQwMDAwMDlBCisjZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDExCQkJMHg0MDAwMDA5QgorI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQxMgkJCTB4NDAwMDAwOUMKKyNkZWZpbmUgSFZfWDY0X01TUl9TSU5UMTMJCQkweDQwMDAwMDlECisjZGVmaW5lIEhWX1g2NF9NU1JfU0lOVDE0CQkJMHg0MDAwMDA5RQorI2RlZmluZSBIVl9YNjRfTVNSX1NJTlQxNQkJCTB4NDAwMDAwOUYKKworCisjZGVmaW5lIEhWX1g2NF9NU1JfSFlQRVJDQUxMX0VOQUJMRQkJMHgwMDAwMDAwMQorI2RlZmluZSBIVl9YNjRfTVNSX0hZUEVSQ0FMTF9QQUdFX0FERFJFU1NfU0hJRlQJMTIKKyNkZWZpbmUgSFZfWDY0X01TUl9IWVBFUkNBTExfUEFHRV9BRERSRVNTX01BU0sJXAorCQkofigoMXVsbCA8PCBIVl9YNjRfTVNSX0hZUEVSQ0FMTF9QQUdFX0FERFJFU1NfU0hJRlQpIC0gMSkpCisKKy8qIERlY2xhcmUgdGhlIHZhcmlvdXMgaHlwZXJjYWxsIG9wZXJhdGlvbnMuICovCisjZGVmaW5lIEhWX1g2NF9IVl9OT1RJRllfTE9OR19TUElOX1dBSVQJCTB4MDAwOAorCisjZGVmaW5lIEhWX1g2NF9NU1JfQVBJQ19BU1NJU1RfUEFHRV9FTkFCTEUJCTB4MDAwMDAwMDEKKyNkZWZpbmUgSFZfWDY0X01TUl9BUElDX0FTU0lTVF9QQUdFX0FERFJFU1NfU0hJRlQJMTIKKyNkZWZpbmUgSFZfWDY0X01TUl9BUElDX0FTU0lTVF9QQUdFX0FERFJFU1NfTUFTSwlcCisJCSh+KCgxdWxsIDw8IEhWX1g2NF9NU1JfQVBJQ19BU1NJU1RfUEFHRV9BRERSRVNTX1NISUZUKSAtIDEpKQorCisjZGVmaW5lIEhWX1BST0NFU1NPUl9QT1dFUl9TVEFURV9DMAkJMAorI2RlZmluZSBIVl9QUk9DRVNTT1JfUE9XRVJfU1RBVEVfQzEJCTEKKyNkZWZpbmUgSFZfUFJPQ0VTU09SX1BPV0VSX1NUQVRFX0MyCQkyCisjZGVmaW5lIEhWX1BST0NFU1NPUl9QT1dFUl9TVEFURV9DMwkJMworCisvKiBoeXBlcmNhbGwgc3RhdHVzIGNvZGUgKi8KKyNkZWZpbmUgSFZfU1RBVFVTX1NVQ0NFU1MJCQkwCisjZGVmaW5lIEhWX1NUQVRVU19JTlZBTElEX0hZUEVSQ0FMTF9DT0RFCTIKKyNkZWZpbmUgSFZfU1RBVFVTX0lOVkFMSURfSFlQRVJDQUxMX0lOUFVUCTMKKyNkZWZpbmUgSFZfU1RBVFVTX0lOVkFMSURfQUxJR05NRU5UCQk0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaTgyNTkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2k4MjU5LmgKaW5kZXggNThkNzA5MS4uMTY1NTE0NyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaTgyNTkuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pODI1OS5oCkBAIC0yNCwxMiArMjQsNyBAQAogI2RlZmluZSBTTEFWRV9JQ1c0X0RFRkFVTFQJMHgwMQogI2RlZmluZSBQSUNfSUNXNF9BRU9JCQkyCiAKLWV4dGVybiBzcGlubG9ja190IGk4MjU5QV9sb2NrOwotCi1leHRlcm4gdm9pZCBpbml0XzgyNTlBKGludCBhdXRvX2VvaSk7Ci1leHRlcm4gdm9pZCBlbmFibGVfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotZXh0ZXJuIHZvaWQgZGlzYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSk7Ci1leHRlcm4gdW5zaWduZWQgaW50IHN0YXJ0dXBfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOworZXh0ZXJuIHJhd19zcGlubG9ja190IGk4MjU5QV9sb2NrOwogCiAvKiB0aGUgUElDIG1heSBuZWVkIGEgY2FyZWZ1bCBkZWxheSBvbiBzb21lIHBsYXRmb3JtcywgaGVuY2Ugc3BlY2lmaWMgY2FsbHMgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciBpbmJfcGljKHVuc2lnbmVkIGludCBwb3J0KQpAQCAtNTcsNyArNTIsMTcgQEAKIAogZXh0ZXJuIHN0cnVjdCBpcnFfY2hpcCBpODI1OUFfY2hpcDsKIAotZXh0ZXJuIHZvaWQgbWFza184MjU5QSh2b2lkKTsKLWV4dGVybiB2b2lkIHVubWFza184MjU5QSh2b2lkKTsKK3N0cnVjdCBsZWdhY3lfcGljIHsKKwlpbnQgbnJfbGVnYWN5X2lycXM7CisJc3RydWN0IGlycV9jaGlwICpjaGlwOworCXZvaWQgKCptYXNrX2FsbCkodm9pZCk7CisJdm9pZCAoKnJlc3RvcmVfbWFzaykodm9pZCk7CisJdm9pZCAoKmluaXQpKGludCBhdXRvX2VvaSk7CisJaW50ICgqaXJxX3BlbmRpbmcpKHVuc2lnbmVkIGludCBpcnEpOworCXZvaWQgKCptYWtlX2lycSkodW5zaWduZWQgaW50IGlycSk7Cit9OworCitleHRlcm4gc3RydWN0IGxlZ2FjeV9waWMgKmxlZ2FjeV9waWM7CitleHRlcm4gc3RydWN0IGxlZ2FjeV9waWMgbnVsbF9sZWdhY3lfcGljOwogCiAjZW5kaWYgLyogX0FTTV9YODZfSTgyNTlfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCmluZGV4IDdjN2MxNmMuLjM1ODMyYTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmgKQEAgLTE0Myw4ICsxNDMsNiBAQAogLyogMSBpZiB0aGUgdGltZXIgSVJRIHVzZXMgdGhlICc4MjU5QSBWaXJ0dWFsIFdpcmUnIG1vZGUgKi8KIGV4dGVybiBpbnQgdGltZXJfdGhyb3VnaF84MjU5OwogCi1leHRlcm4gdm9pZCBpb19hcGljX2Rpc2FibGVfbGVnYWN5KHZvaWQpOwotCiAvKgogICogSWYgd2UgdXNlIHRoZSBJTy1BUElDIGZvciBJUlEgcm91dGluZywgZGlzYWJsZSBhdXRvbWF0aWMKICAqIGFzc2lnbm1lbnQgb2YgUENJIElSUSdzLgpAQCAtMTYwLDYgKzE1OCw3IEBACiBzdHJ1Y3QgaW9fYXBpY19pcnFfYXR0cjsKIGV4dGVybiBpbnQgaW9fYXBpY19zZXRfcGNpX3JvdXRpbmcoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaXJxLAogCQkgc3RydWN0IGlvX2FwaWNfaXJxX2F0dHIgKmlycV9hdHRyKTsKK3ZvaWQgc2V0dXBfSU9fQVBJQ19pcnFfZXh0cmEodTMyIGdzaSk7CiBleHRlcm4gaW50ICgqaW9hcGljX3JlbnVtYmVyX2lycSkoaW50IGlvYXBpYywgaW50IGlycSk7CiBleHRlcm4gdm9pZCBpb2FwaWNfaW5pdF9tYXBwaW5ncyh2b2lkKTsKIGV4dGVybiB2b2lkIGlvYXBpY19pbnNlcnRfcmVzb3VyY2VzKHZvaWQpOwpAQCAtMTg4LDYgKzE4Nyw3IEBACiBpbnQgbXBfZmluZF9pb2FwaWMoaW50IGdzaSk7CiBpbnQgbXBfZmluZF9pb2FwaWNfcGluKGludCBpb2FwaWMsIGludCBnc2kpOwogdm9pZCBfX2luaXQgbXBfcmVnaXN0ZXJfaW9hcGljKGludCBpZCwgdTMyIGFkZHJlc3MsIHUzMiBnc2lfYmFzZSk7CitleHRlcm4gdm9pZCBfX2luaXQgcHJlX2luaXRfYXBpY19JUlEwKHZvaWQpOwogCiAjZWxzZSAgLyogIUNPTkZJR19YODZfSU9fQVBJQyAqLwogCkBAIC0xOTcsNyArMTk3LDExIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaW9hcGljX2luaXRfbWFwcGluZ3Modm9pZCkJeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaW9hcGljX2luc2VydF9yZXNvdXJjZXModm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcHJvYmVfbnJfaXJxc19nc2kodm9pZCkJeyB9CitzdGF0aWMgaW5saW5lIGludCBtcF9maW5kX2lvYXBpYyhpbnQgZ3NpKSB7IHJldHVybiAwOyB9CiAKK3N0cnVjdCBpb19hcGljX2lycV9hdHRyOworc3RhdGljIGlubGluZSBpbnQgaW9fYXBpY19zZXRfcGNpX3JvdXRpbmcoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaXJxLAorCQkgc3RydWN0IGlvX2FwaWNfaXJxX2F0dHIgKmlycV9hdHRyKSB7IHJldHVybiAwOyB9CiAjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fWDg2X0lPX0FQSUNfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmgKaW5kZXggNDYxMWYwOC4uODc2N2Q5OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfdmVjdG9ycy5oCkBAIC0yOCwyOCArMjgsMzMgQEAKICNkZWZpbmUgTUNFX1ZFQ1RPUgkJCTB4MTIKIAogLyoKLSAqIElEVCB2ZWN0b3JzIHVzYWJsZSBmb3IgZXh0ZXJuYWwgaW50ZXJydXB0IHNvdXJjZXMgc3RhcnQKLSAqIGF0IDB4MjA6CisgKiBJRFQgdmVjdG9ycyB1c2FibGUgZm9yIGV4dGVybmFsIGludGVycnVwdCBzb3VyY2VzIHN0YXJ0IGF0IDB4MjAuCisgKiAoMHg4MCBpcyB0aGUgc3lzY2FsbCB2ZWN0b3IsIDB4MzAtMHgzZiBhcmUgZm9yIElTQSkKICAqLwogI2RlZmluZSBGSVJTVF9FWFRFUk5BTF9WRUNUT1IJCTB4MjAKLQotI2lmZGVmIENPTkZJR19YODZfMzIKLSMgZGVmaW5lIFNZU0NBTExfVkVDVE9SCQkJMHg4MAotIyBkZWZpbmUgSUEzMl9TWVNDQUxMX1ZFQ1RPUgkJMHg4MAotI2Vsc2UKLSMgZGVmaW5lIElBMzJfU1lTQ0FMTF9WRUNUT1IJCTB4ODAKLSNlbmRpZgorLyoKKyAqIFdlIHN0YXJ0IGFsbG9jYXRpbmcgYXQgMHgyMSB0byBzcHJlYWQgb3V0IHZlY3RvcnMgZXZlbmx5IGJldHdlZW4KKyAqIHByaW9yaXR5IGxldmVscy4gKDB4ODAgaXMgdGhlIHN5c2NhbGwgdmVjdG9yKQorICovCisjZGVmaW5lIFZFQ1RPUl9PRkZTRVRfU1RBUlQJCTEKIAogLyoKLSAqIFJlc2VydmUgdGhlIGxvd2VzdCB1c2FibGUgcHJpb3JpdHkgbGV2ZWwgMHgyMCAtIDB4MmYgZm9yIHRyaWdnZXJpbmcKLSAqIGNsZWFudXAgYWZ0ZXIgaXJxIG1pZ3JhdGlvbi4KKyAqIFJlc2VydmUgdGhlIGxvd2VzdCB1c2FibGUgdmVjdG9yIChhbmQgaGVuY2UgbG93ZXN0IHByaW9yaXR5KSAgMHgyMCBmb3IKKyAqIHRyaWdnZXJpbmcgY2xlYW51cCBhZnRlciBpcnEgbWlncmF0aW9uLiAweDIxLTB4MmYgd2lsbCBzdGlsbCBiZSB1c2VkCisgKiBmb3IgZGV2aWNlIGludGVycnVwdHMuCiAgKi8KICNkZWZpbmUgSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1IJCUZJUlNUX0VYVEVSTkFMX1ZFQ1RPUgogCisjZGVmaW5lIElBMzJfU1lTQ0FMTF9WRUNUT1IJCTB4ODAKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisjIGRlZmluZSBTWVNDQUxMX1ZFQ1RPUgkJCTB4ODAKKyNlbmRpZgorCiAvKgogICogVmVjdG9ycyAweDMwLTB4M2YgYXJlIHVzZWQgZm9yIElTQSBpbnRlcnJ1cHRzLgorICogICByb3VuZCB1cCB0byB0aGUgbmV4dCAxNi12ZWN0b3IgYm91bmRhcnkKICAqLwotI2RlZmluZSBJUlEwX1ZFQ1RPUgkJCShGSVJTVF9FWFRFUk5BTF9WRUNUT1IgKyAweDEwKQorI2RlZmluZSBJUlEwX1ZFQ1RPUgkJCSgoRklSU1RfRVhURVJOQUxfVkVDVE9SICsgMTYpICYgfjE1KQogCiAjZGVmaW5lIElSUTFfVkVDVE9SCQkJKElSUTBfVkVDVE9SICsgIDEpCiAjZGVmaW5lIElSUTJfVkVDVE9SCQkJKElSUTBfVkVDVE9SICsgIDIpCkBAIC0xMjAsMTMgKzEyNSw2IEBACiAgKi8KICNkZWZpbmUgTUNFX1NFTEZfVkVDVE9SCQkJMHhlYgogCi0vKgotICogRmlyc3QgQVBJQyB2ZWN0b3IgYXZhaWxhYmxlIHRvIGRyaXZlcnM6ICh2ZWN0b3JzIDB4MzAtMHhlZSkgd2UKLSAqIHN0YXJ0IGF0IDB4MzEoMHg0MSkgdG8gc3ByZWFkIG91dCB2ZWN0b3JzIGV2ZW5seSBiZXR3ZWVuIHByaW9yaXR5Ci0gKiBsZXZlbHMuICgweDgwIGlzIHRoZSBzeXNjYWxsIHZlY3RvcikKLSAqLwotI2RlZmluZSBGSVJTVF9ERVZJQ0VfVkVDVE9SCQkoSVJRMTVfVkVDVE9SICsgMikKLQogI2RlZmluZSBOUl9WRUNUT1JTCQkJIDI1NgogCiAjZGVmaW5lIEZQVV9JUlEJCQkJICAxMwpAQCAtMTU0LDIxICsxNTIsMjEgQEAKIAogI2RlZmluZSBOUl9JUlFTX0xFR0FDWQkJCSAgMTYKIAotI2RlZmluZSBDUFVfVkVDVE9SX0xJTUlUCQkoICA4ICogTlJfQ1BVUyAgICAgICkKICNkZWZpbmUgSU9fQVBJQ19WRUNUT1JfTElNSVQJCSggMzIgKiBNQVhfSU9fQVBJQ1MgKQogCiAjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCiAjIGlmZGVmIENPTkZJR19TUEFSU0VfSVJRCisjICBkZWZpbmUgQ1BVX1ZFQ1RPUl9MSU1JVAkJKDY0ICogTlJfQ1BVUykKICMgIGRlZmluZSBOUl9JUlFTCQkJCQlcCiAJKENQVV9WRUNUT1JfTElNSVQgPiBJT19BUElDX1ZFQ1RPUl9MSU1JVCA/CVwKIAkJKE5SX1ZFQ1RPUlMgKyBDUFVfVkVDVE9SX0xJTUlUKSAgOglcCiAJCShOUl9WRUNUT1JTICsgSU9fQVBJQ19WRUNUT1JfTElNSVQpKQogIyBlbHNlCi0jICBpZiBOUl9DUFVTIDwgTUFYX0lPX0FQSUNTCi0jICAgZGVmaW5lIE5SX0lSUVMgCQkJKE5SX1ZFQ1RPUlMgKyA0KkNQVV9WRUNUT1JfTElNSVQpCi0jICBlbHNlCi0jICAgZGVmaW5lIE5SX0lSUVMJCQkoTlJfVkVDVE9SUyArIElPX0FQSUNfVkVDVE9SX0xJTUlUKQotIyAgZW5kaWYKKyMgIGRlZmluZSBDUFVfVkVDVE9SX0xJTUlUCQkoMzIgKiBOUl9DUFVTKQorIyAgZGVmaW5lIE5SX0lSUVMJCQkJCVwKKwkoQ1BVX1ZFQ1RPUl9MSU1JVCA8IElPX0FQSUNfVkVDVE9SX0xJTUlUID8JXAorCQkoTlJfVkVDVE9SUyArIENQVV9WRUNUT1JfTElNSVQpICA6CVwKKwkJKE5SX1ZFQ1RPUlMgKyBJT19BUElDX1ZFQ1RPUl9MSU1JVCkpCiAjIGVuZGlmCiAjZWxzZSAvKiAhQ09ORklHX1g4Nl9JT19BUElDOiAqLwogIyBkZWZpbmUgTlJfSVJRUwkJCU5SX0lSUVNfTEVHQUNZCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rcHJvYmVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rcHJvYmVzLmgKaW5kZXggNGZlNjgxZC4uNGZmYTM0NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3Byb2Jlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2twcm9iZXMuaApAQCAtMzIsNyArMzIsMTAgQEAKIAogdHlwZWRlZiB1OCBrcHJvYmVfb3Bjb2RlX3Q7CiAjZGVmaW5lIEJSRUFLUE9JTlRfSU5TVFJVQ1RJT04JMHhjYwotI2RlZmluZSBSRUxBVElWRUpVTVBfSU5TVFJVQ1RJT04gMHhlOQorI2RlZmluZSBSRUxBVElWRUpVTVBfT1BDT0RFIDB4ZTkKKyNkZWZpbmUgUkVMQVRJVkVKVU1QX1NJWkUgNQorI2RlZmluZSBSRUxBVElWRUNBTExfT1BDT0RFIDB4ZTgKKyNkZWZpbmUgUkVMQVRJVkVfQUREUl9TSVpFIDQKICNkZWZpbmUgTUFYX0lOU05fU0laRSAxNgogI2RlZmluZSBNQVhfU1RBQ0tfU0laRSA2NAogI2RlZmluZSBNSU5fU1RBQ0tfU0laRShBRERSKQkJCQkJICAgICAgIFwKQEAgLTQ0LDYgKzQ3LDE3IEBACiAKICNkZWZpbmUgZmx1c2hfaW5zbl9zbG90KHApCWRvIHsgfSB3aGlsZSAoMCkKIAorLyogb3B0aW5zbiB0ZW1wbGF0ZSBhZGRyZXNzZXMgKi8KK2V4dGVybiBrcHJvYmVfb3Bjb2RlX3Qgb3B0cHJvYmVfdGVtcGxhdGVfZW50cnk7CitleHRlcm4ga3Byb2JlX29wY29kZV90IG9wdHByb2JlX3RlbXBsYXRlX3ZhbDsKK2V4dGVybiBrcHJvYmVfb3Bjb2RlX3Qgb3B0cHJvYmVfdGVtcGxhdGVfY2FsbDsKK2V4dGVybiBrcHJvYmVfb3Bjb2RlX3Qgb3B0cHJvYmVfdGVtcGxhdGVfZW5kOworI2RlZmluZSBNQVhfT1BUSU1JWkVEX0xFTkdUSCAoTUFYX0lOU05fU0laRSArIFJFTEFUSVZFX0FERFJfU0laRSkKKyNkZWZpbmUgTUFYX09QVElOU05fU0laRSAJCQkJXAorCSgoKHVuc2lnbmVkIGxvbmcpJm9wdHByb2JlX3RlbXBsYXRlX2VuZCAtCVwKKwkgICh1bnNpZ25lZCBsb25nKSZvcHRwcm9iZV90ZW1wbGF0ZV9lbnRyeSkgKwlcCisJIE1BWF9PUFRJTUlaRURfTEVOR1RIICsgUkVMQVRJVkVKVU1QX1NJWkUpCisKIGV4dGVybiBjb25zdCBpbnQga3JldHByb2JlX2JsYWNrbGlzdF9zaXplOwogCiB2b2lkIGFyY2hfcmVtb3ZlX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKTsKQEAgLTY0LDYgKzc4LDIxIEBACiAJaW50IGJvb3N0YWJsZTsKIH07CiAKK3N0cnVjdCBhcmNoX29wdGltaXplZF9pbnNuIHsKKwkvKiBjb3B5IG9mIHRoZSBvcmlnaW5hbCBpbnN0cnVjdGlvbnMgKi8KKwlrcHJvYmVfb3Bjb2RlX3QgY29waWVkX2luc25bUkVMQVRJVkVfQUREUl9TSVpFXTsKKwkvKiBkZXRvdXIgY29kZSBidWZmZXIgKi8KKwlrcHJvYmVfb3Bjb2RlX3QgKmluc247CisJLyogdGhlIHNpemUgb2YgaW5zdHJ1Y3Rpb25zIGNvcGllZCB0byBkZXRvdXIgY29kZSBidWZmZXIgKi8KKwlzaXplX3Qgc2l6ZTsKK307CisKKy8qIFJldHVybiB0cnVlICghMCkgaWYgb3B0aW5zbiBpcyBwcmVwYXJlZCBmb3Igb3B0aW1pemF0aW9uLiAqLworc3RhdGljIGlubGluZSBpbnQgYXJjaF9wcmVwYXJlZF9vcHRpbnNuKHN0cnVjdCBhcmNoX29wdGltaXplZF9pbnNuICpvcHRpbnNuKQoreworCXJldHVybiBvcHRpbnNuLT5zaXplOworfQorCiBzdHJ1Y3QgcHJldl9rcHJvYmUgewogCXN0cnVjdCBrcHJvYmUgKmtwOwogCXVuc2lnbmVkIGxvbmcgc3RhdHVzOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9lbXVsYXRlLmgKaW5kZXggN2MxOGUxMi4uN2E2ZjU0ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2VtdWxhdGUuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fZW11bGF0ZS5oCkBAIC01NCwxMyArNTQsMjMgQEAKIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgewogCS8qCiAJICogcmVhZF9zdGQ6IFJlYWQgYnl0ZXMgb2Ygc3RhbmRhcmQgKG5vbi1lbXVsYXRlZC9zcGVjaWFsKSBtZW1vcnkuCi0JICogICAgICAgICAgIFVzZWQgZm9yIGluc3RydWN0aW9uIGZldGNoLCBzdGFjayBvcGVyYXRpb25zLCBhbmQgb3RoZXJzLgorCSAqICAgICAgICAgICBVc2VkIGZvciBkZXNjcmlwdG9yIHJlYWRpbmcuCiAJICogIEBhZGRyOiAgW0lOIF0gTGluZWFyIGFkZHJlc3MgZnJvbSB3aGljaCB0byByZWFkLgogCSAqICBAdmFsOiAgIFtPVVRdIFZhbHVlIHJlYWQgZnJvbSBtZW1vcnksIHplcm8tZXh0ZW5kZWQgdG8gJ3VfbG9uZycuCiAJICogIEBieXRlczogW0lOIF0gTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgZnJvbSBtZW1vcnkuCiAJICovCiAJaW50ICgqcmVhZF9zdGQpKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLAotCQkJdW5zaWduZWQgaW50IGJ5dGVzLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCQkJdW5zaWduZWQgaW50IGJ5dGVzLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqZXJyb3IpOworCisJLyoKKwkgKiBmZXRjaDogUmVhZCBieXRlcyBvZiBzdGFuZGFyZCAobm9uLWVtdWxhdGVkL3NwZWNpYWwpIG1lbW9yeS4KKwkgKiAgICAgICAgVXNlZCBmb3IgaW5zdHJ1Y3Rpb24gZmV0Y2guCisJICogIEBhZGRyOiAgW0lOIF0gTGluZWFyIGFkZHJlc3MgZnJvbSB3aGljaCB0byByZWFkLgorCSAqICBAdmFsOiAgIFtPVVRdIFZhbHVlIHJlYWQgZnJvbSBtZW1vcnksIHplcm8tZXh0ZW5kZWQgdG8gJ3VfbG9uZycuCisJICogIEBieXRlczogW0lOIF0gTnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQgZnJvbSBtZW1vcnkuCisJICovCisJaW50ICgqZmV0Y2gpKHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqdmFsLAorCQkJdW5zaWduZWQgaW50IGJ5dGVzLCBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqZXJyb3IpOwogCiAJLyoKIAkgKiByZWFkX2VtdWxhdGVkOiBSZWFkIGJ5dGVzIGZyb20gZW11bGF0ZWQvc3BlY2lhbCBtZW1vcnkgYXJlYS4KQEAgLTc0LDcgKzg0LDcgQEAKIAkJCSAgICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogCS8qCi0JICogd3JpdGVfZW11bGF0ZWQ6IFJlYWQgYnl0ZXMgZnJvbSBlbXVsYXRlZC9zcGVjaWFsIG1lbW9yeSBhcmVhLgorCSAqIHdyaXRlX2VtdWxhdGVkOiBXcml0ZSBieXRlcyB0byBlbXVsYXRlZC9zcGVjaWFsIG1lbW9yeSBhcmVhLgogCSAqICBAYWRkcjogIFtJTiBdIExpbmVhciBhZGRyZXNzIHRvIHdoaWNoIHRvIHdyaXRlLgogCSAqICBAdmFsOiAgIFtJTiBdIFZhbHVlIHRvIHdyaXRlIHRvIG1lbW9yeSAobG93LW9yZGVyIGJ5dGVzIHVzZWQgYXMKIAkgKiAgICAgICAgICAgICAgICByZXF1aXJlZCkuCkBAIC0xNjgsNiArMTc4LDcgQEAKIAogLyogRXhlY3V0aW9uIG1vZGUsIHBhc3NlZCB0byB0aGUgZW11bGF0b3IuICovCiAjZGVmaW5lIFg4NkVNVUxfTU9ERV9SRUFMICAgICAwCS8qIFJlYWwgbW9kZS4gICAgICAgICAgICAgKi8KKyNkZWZpbmUgWDg2RU1VTF9NT0RFX1ZNODYgICAgIDEJLyogVmlydHVhbCA4MDg2IG1vZGUuICAgICAqLwogI2RlZmluZSBYODZFTVVMX01PREVfUFJPVDE2ICAgMgkvKiAxNi1iaXQgcHJvdGVjdGVkIG1vZGUuICovCiAjZGVmaW5lIFg4NkVNVUxfTU9ERV9QUk9UMzIgICA0CS8qIDMyLWJpdCBwcm90ZWN0ZWQgbW9kZS4gKi8KICNkZWZpbmUgWDg2RU1VTF9NT0RFX1BST1Q2NCAgIDgJLyogNjQtYml0IChsb25nKSBtb2RlLiAgICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9ob3N0LmgKaW5kZXggNGY4NjVlOC4uMDZkOWU3OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX2hvc3QuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1faG9zdC5oCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8YXNtL210cnIuaD4KICNpbmNsdWRlIDxhc20vbXNyLWluZGV4Lmg+CiAKLSNkZWZpbmUgS1ZNX01BWF9WQ1BVUyAxNgorI2RlZmluZSBLVk1fTUFYX1ZDUFVTIDY0CiAjZGVmaW5lIEtWTV9NRU1PUllfU0xPVFMgMzIKIC8qIG1lbW9yeSBzbG90cyB0aGF0IGRvZXMgbm90IGV4cG9zZWQgdG8gdXNlcnNwYWNlICovCiAjZGVmaW5lIEtWTV9QUklWQVRFX01FTV9TTE9UUyA0CkBAIC0zOCwxOSArMzgsNiBAQAogI2RlZmluZSBDUjNfTF9NT0RFX1JFU0VSVkVEX0JJVFMgKENSM19OT05QQUVfUkVTRVJWRURfQklUUyB8CVwKIAkJCQkgIDB4RkZGRkZGMDAwMDAwMDAwMFVMTCkKIAotI2RlZmluZSBLVk1fR1VFU1RfQ1IwX01BU0tfVU5SRVNUUklDVEVEX0dVRVNUCQkJCVwKLQkoWDg2X0NSMF9XUCB8IFg4Nl9DUjBfTkUgfCBYODZfQ1IwX05XIHwgWDg2X0NSMF9DRCkKLSNkZWZpbmUgS1ZNX0dVRVNUX0NSMF9NQVNLCQkJCQkJXAotCShLVk1fR1VFU1RfQ1IwX01BU0tfVU5SRVNUUklDVEVEX0dVRVNUIHwgWDg2X0NSMF9QRyB8IFg4Nl9DUjBfUEUpCi0jZGVmaW5lIEtWTV9WTV9DUjBfQUxXQVlTX09OX1VOUkVTVFJJQ1RFRF9HVUVTVAkJCQlcCi0JKFg4Nl9DUjBfV1AgfCBYODZfQ1IwX05FIHwgWDg2X0NSMF9UUyB8IFg4Nl9DUjBfTVApCi0jZGVmaW5lIEtWTV9WTV9DUjBfQUxXQVlTX09OCQkJCQkJXAotCShLVk1fVk1fQ1IwX0FMV0FZU19PTl9VTlJFU1RSSUNURURfR1VFU1QgfCBYODZfQ1IwX1BHIHwgWDg2X0NSMF9QRSkKLSNkZWZpbmUgS1ZNX0dVRVNUX0NSNF9NQVNLCQkJCQkJXAotCShYODZfQ1I0X1ZNRSB8IFg4Nl9DUjRfUFNFIHwgWDg2X0NSNF9QQUUgfCBYODZfQ1I0X1BHRSB8IFg4Nl9DUjRfVk1YRSkKLSNkZWZpbmUgS1ZNX1BNT0RFX1ZNX0NSNF9BTFdBWVNfT04gKFg4Nl9DUjRfUEFFIHwgWDg2X0NSNF9WTVhFKQotI2RlZmluZSBLVk1fUk1PREVfVk1fQ1I0X0FMV0FZU19PTiAoWDg2X0NSNF9WTUUgfCBYODZfQ1I0X1BBRSB8IFg4Nl9DUjRfVk1YRSkKLQogI2RlZmluZSBJTlZBTElEX1BBR0UgKH4oaHBhX3QpMCkKICNkZWZpbmUgVU5NQVBQRURfR1ZBICh+KGdwYV90KTApCiAKQEAgLTI1Niw3ICsyNDMsOCBAQAogCXZvaWQgKCpuZXdfY3IzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCWludCAoKnBhZ2VfZmF1bHQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1MzIgZXJyKTsKIAl2b2lkICgqZnJlZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKLQlncGFfdCAoKmd2YV90b19ncGEpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhKTsKKwlncGFfdCAoKmd2YV90b19ncGEpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1MzIgYWNjZXNzLAorCQkJICAgIHUzMiAqZXJyb3IpOwogCXZvaWQgKCpwcmVmZXRjaF9wYWdlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkgICAgICBzdHJ1Y3Qga3ZtX21tdV9wYWdlICpwYWdlKTsKIAlpbnQgKCpzeW5jX3BhZ2UpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKQEAgLTI4MiwxMyArMjcwLDE1IEBACiAJdTMyIHJlZ3NfZGlydHk7CiAKIAl1bnNpZ25lZCBsb25nIGNyMDsKKwl1bnNpZ25lZCBsb25nIGNyMF9ndWVzdF9vd25lZF9iaXRzOwogCXVuc2lnbmVkIGxvbmcgY3IyOwogCXVuc2lnbmVkIGxvbmcgY3IzOwogCXVuc2lnbmVkIGxvbmcgY3I0OworCXVuc2lnbmVkIGxvbmcgY3I0X2d1ZXN0X293bmVkX2JpdHM7CiAJdW5zaWduZWQgbG9uZyBjcjg7CiAJdTMyIGhmbGFnczsKIAl1NjQgcGRwdHJzWzRdOyAvKiBwYWUgKi8KLQl1NjQgc2hhZG93X2VmZXI7CisJdTY0IGVmZXI7CiAJdTY0IGFwaWNfYmFzZTsKIAlzdHJ1Y3Qga3ZtX2xhcGljICphcGljOyAgICAvKiBrZXJuZWwgaXJxY2hpcCBjb250ZXh0ICovCiAJaW50MzJfdCBhcGljX2FyYl9wcmlvOwpAQCAtMzc0LDE3ICszNjQsMjcgQEAKIAkvKiB1c2VkIGZvciBndWVzdCBzaW5nbGUgc3RlcHBpbmcgb3ZlciB0aGUgZ2l2ZW4gY29kZSBwb3NpdGlvbiAqLwogCXUxNiBzaW5nbGVzdGVwX2NzOwogCXVuc2lnbmVkIGxvbmcgc2luZ2xlc3RlcF9yaXA7CisJLyogZmllbGRzIHVzZWQgYnkgSFlQRVItViBlbXVsYXRpb24gKi8KKwl1NjQgaHZfdmFwaWM7CiB9OwogCiBzdHJ1Y3Qga3ZtX21lbV9hbGlhcyB7CiAJZ2ZuX3QgYmFzZV9nZm47CiAJdW5zaWduZWQgbG9uZyBucGFnZXM7CiAJZ2ZuX3QgdGFyZ2V0X2dmbjsKKyNkZWZpbmUgS1ZNX0FMSUFTX0lOVkFMSUQgICAgIDFVTAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiB9OwogCi1zdHJ1Y3Qga3ZtX2FyY2h7Ci0JaW50IG5hbGlhc2VzOworI2RlZmluZSBLVk1fQVJDSF9IQVNfVU5BTElBU19JTlNUQU5USUFUSU9OCisKK3N0cnVjdCBrdm1fbWVtX2FsaWFzZXMgewogCXN0cnVjdCBrdm1fbWVtX2FsaWFzIGFsaWFzZXNbS1ZNX0FMSUFTX1NMT1RTXTsKKwlpbnQgbmFsaWFzZXM7Cit9OworCitzdHJ1Y3Qga3ZtX2FyY2ggeworCXN0cnVjdCBrdm1fbWVtX2FsaWFzZXMgKmFsaWFzZXM7CiAKIAl1bnNpZ25lZCBpbnQgbl9mcmVlX21tdV9wYWdlczsKIAl1bnNpZ25lZCBpbnQgbl9yZXF1ZXN0ZWRfbW11X3BhZ2VzOwpAQCAtNDE2LDYgKzQxNiwxMCBAQAogCXM2NCBrdm1jbG9ja19vZmZzZXQ7CiAKIAlzdHJ1Y3Qga3ZtX3hlbl9odm1fY29uZmlnIHhlbl9odm1fY29uZmlnOworCisJLyogZmllbGRzIHVzZWQgYnkgSFlQRVItViBlbXVsYXRpb24gKi8KKwl1NjQgaHZfZ3Vlc3Rfb3NfaWQ7CisJdTY0IGh2X2h5cGVyY2FsbDsKIH07CiAKIHN0cnVjdCBrdm1fdm1fc3RhdCB7CkBAIC00NzEsNiArNDc1LDcgQEAKIAlpbnQgKCpoYXJkd2FyZV9zZXR1cCkodm9pZCk7ICAgICAgICAgICAgICAgLyogX19pbml0ICovCiAJdm9pZCAoKmhhcmR3YXJlX3Vuc2V0dXApKHZvaWQpOyAgICAgICAgICAgIC8qIF9fZXhpdCAqLwogCWJvb2wgKCpjcHVfaGFzX2FjY2VsZXJhdGVkX3Rwcikodm9pZCk7CisJdm9pZCAoKmNwdWlkX3VwZGF0ZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogCS8qIENyZWF0ZSwgYnV0IGRvIG5vdCBhdHRhY2ggdGhpcyBWQ1BVICovCiAJc3RydWN0IGt2bV92Y3B1ICooKnZjcHVfY3JlYXRlKShzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGlkKTsKQEAgLTQ5Miw2ICs0OTcsNyBAQAogCXZvaWQgKCpzZXRfc2VnbWVudCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJICAgIHN0cnVjdCBrdm1fc2VnbWVudCAqdmFyLCBpbnQgc2VnKTsKIAl2b2lkICgqZ2V0X2NzX2RiX2xfYml0cykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgKmRiLCBpbnQgKmwpOworCXZvaWQgKCpkZWNhY2hlX2NyMF9ndWVzdF9iaXRzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCXZvaWQgKCpkZWNhY2hlX2NyNF9ndWVzdF9iaXRzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCXZvaWQgKCpzZXRfY3IwKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IwKTsKIAl2b2lkICgqc2V0X2NyMykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMyk7CkBAIC01MDEsMTIgKzUwNywxMyBAQAogCXZvaWQgKCpzZXRfaWR0KShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlICpkdCk7CiAJdm9pZCAoKmdldF9nZHQpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlc2NyaXB0b3JfdGFibGUgKmR0KTsKIAl2b2lkICgqc2V0X2dkdCkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVzY3JpcHRvcl90YWJsZSAqZHQpOwotCXVuc2lnbmVkIGxvbmcgKCpnZXRfZHIpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyKTsKLQl2b2lkICgqc2V0X2RyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWx1ZSwKLQkJICAgICAgIGludCAqZXhjZXB0aW9uKTsKKwlpbnQgKCpnZXRfZHIpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nICpkZXN0KTsKKwlpbnQgKCpzZXRfZHIpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbHVlKTsKIAl2b2lkICgqY2FjaGVfcmVnKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGVudW0ga3ZtX3JlZyByZWcpOwogCXVuc2lnbmVkIGxvbmcgKCpnZXRfcmZsYWdzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogCXZvaWQgKCpzZXRfcmZsYWdzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgcmZsYWdzKTsKKwl2b2lkICgqZnB1X2FjdGl2YXRlKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOworCXZvaWQgKCpmcHVfZGVhY3RpdmF0ZSkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogCXZvaWQgKCp0bGJfZmx1c2gpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSk7CiAKQEAgLTUzMSw3ICs1MzgsOCBAQAogCWludCAoKnNldF90c3NfYWRkcikoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBpbnQgYWRkcik7CiAJaW50ICgqZ2V0X3RkcF9sZXZlbCkodm9pZCk7CiAJdTY0ICgqZ2V0X210X21hc2spKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLCBib29sIGlzX21taW8pOwotCWJvb2wgKCpnYl9wYWdlX2VuYWJsZSkodm9pZCk7CisJaW50ICgqZ2V0X2xwYWdlX2xldmVsKSh2b2lkKTsKKwlib29sICgqcmR0c2NwX3N1cHBvcnRlZCkodm9pZCk7CiAKIAljb25zdCBzdHJ1Y3QgdHJhY2VfcHJpbnRfZmxhZ3MgKmV4aXRfcmVhc29uc19zdHI7CiB9OwpAQCAtNjA2LDggKzYxNCw3IEBACiAJCSAgICB1bnNpZ25lZCBsb25nIHZhbHVlKTsKIAogdm9pZCBrdm1fZ2V0X3NlZ21lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3NlZ21lbnQgKnZhciwgaW50IHNlZyk7Ci1pbnQga3ZtX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IHNlbGVjdG9yLAotCQkJCWludCB0eXBlX2JpdHMsIGludCBzZWcpOworaW50IGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBzZWxlY3RvciwgaW50IHNlZyk7CiAKIGludCBrdm1fdGFza19zd2l0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgdHNzX3NlbGVjdG9yLCBpbnQgcmVhc29uKTsKIApAQCAtNjUzLDYgKzY2MCwxMCBAQAogaW50IGt2bV9tbXVfbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fbW11X3VubG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpOwogdm9pZCBrdm1fbW11X3N5bmNfcm9vdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2dwYV90IGt2bV9tbXVfZ3ZhX3RvX2dwYV9yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1MzIgKmVycm9yKTsKK2dwYV90IGt2bV9tbXVfZ3ZhX3RvX2dwYV9mZXRjaChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdTMyICplcnJvcik7CitncGFfdCBrdm1fbW11X2d2YV90b19ncGFfd3JpdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHUzMiAqZXJyb3IpOworZ3BhX3Qga3ZtX21tdV9ndmFfdG9fZ3BhX3N5c3RlbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdTMyICplcnJvcik7CiAKIGludCBrdm1fZW11bGF0ZV9oeXBlcmNhbGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIApAQCAtNjY2LDYgKzY3Nyw3IEBACiAKIGludCBsb2FkX3BkcHRycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IzKTsKIGludCBjb21wbGV0ZV9waW8oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKK2Jvb2wga3ZtX2NoZWNrX2lvcGwoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKIAogc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3RfdW5hbGlhc2VkKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2t2bV9wYXJhLmgKaW5kZXggYzU4NDA3Ni4uZmZhZTE0MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20va3ZtX3BhcmEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rdm1fcGFyYS5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfQVNNX1g4Nl9LVk1fUEFSQV9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9oeXBlcnYuaD4KIAogLyogVGhpcyBDUFVJRCByZXR1cm5zIHRoZSBzaWduYXR1cmUgJ0tWTUtWTUtWTScgaW4gZWJ4LCBlY3gsIGFuZCBlZHguICBJdAogICogc2hvdWxkIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoYXQgYSBWTSBpcyBydW5uaW5nIHVuZGVyIEtWTS4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xvY2FsLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9sb2NhbC5oCmluZGV4IDQ3YjliNmYuLjJlOTk3MjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xvY2FsLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbG9jYWwuaApAQCAtMTk1LDQxICsxOTUsNCBAQAogI2RlZmluZSBfX2xvY2FsX2FkZChpLCBsKQlsb2NhbF9hZGQoKGkpLCAobCkpCiAjZGVmaW5lIF9fbG9jYWxfc3ViKGksIGwpCWxvY2FsX3N1YigoaSksIChsKSkKIAotLyogVXNlIHRoZXNlIGZvciBwZXItY3B1IGxvY2FsX3QgdmFyaWFibGVzOiBvbiBzb21lIGFyY2hzIHRoZXkgYXJlCi0gKiBtdWNoIG1vcmUgZWZmaWNpZW50IHRoYW4gdGhlc2UgbmFpdmUgaW1wbGVtZW50YXRpb25zLiAgTm90ZSB0aGV5IHRha2UKLSAqIGEgdmFyaWFibGUsIG5vdCBhbiBhZGRyZXNzLgotICoKLSAqIFg4Nl82NDogVGhpcyBjb3VsZCBiZSBkb25lIGJldHRlciBpZiB3ZSBtb3ZlZCB0aGUgcGVyIGNwdSBkYXRhIGRpcmVjdGx5Ci0gKiBhZnRlciBHUy4KLSAqLwotCi0vKiBOZWVkIHRvIGRpc2FibGUgcHJlZW1wdGlvbiBmb3IgdGhlIGNwdSBsb2NhbCBjb3VudGVycyBvdGhlcndpc2Ugd2UgY291bGQKLSAgIHN0aWxsIGFjY2VzcyBhIHZhcmlhYmxlIG9mIGEgcHJldmlvdXMgQ1BVIGluIGEgbm9uIGF0b21pYyB3YXkuICovCi0jZGVmaW5lIGNwdV9sb2NhbF93cmFwX3YobCkJCVwKLSh7CQkJCQlcCi0JbG9jYWxfdCByZXNfXzsJCQlcCi0JcHJlZW1wdF9kaXNhYmxlKCk7IAkJXAotCXJlc19fID0gKGwpOwkJCVwKLQlwcmVlbXB0X2VuYWJsZSgpOwkJXAotCXJlc19fOwkJCQlcCi19KQotI2RlZmluZSBjcHVfbG9jYWxfd3JhcChsKQkJXAotKHsJCQkJCVwKLQlwcmVlbXB0X2Rpc2FibGUoKTsJCVwKLQkobCk7CQkJCVwKLQlwcmVlbXB0X2VuYWJsZSgpOwkJXAotfSkJCQkJCVwKLQotI2RlZmluZSBjcHVfbG9jYWxfcmVhZChsKSAgICBjcHVfbG9jYWxfd3JhcF92KGxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIoKGwpKSkpCi0jZGVmaW5lIGNwdV9sb2NhbF9zZXQobCwgaSkgIGNwdV9sb2NhbF93cmFwKGxvY2FsX3NldCgmX19nZXRfY3B1X3ZhcigobCkpLCAoaSkpKQotI2RlZmluZSBjcHVfbG9jYWxfaW5jKGwpICAgICBjcHVfbG9jYWxfd3JhcChsb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIoKGwpKSkpCi0jZGVmaW5lIGNwdV9sb2NhbF9kZWMobCkgICAgIGNwdV9sb2NhbF93cmFwKGxvY2FsX2RlYygmX19nZXRfY3B1X3ZhcigobCkpKSkKLSNkZWZpbmUgY3B1X2xvY2FsX2FkZChpLCBsKSAgY3B1X2xvY2FsX3dyYXAobG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIoKGwpKSkpCi0jZGVmaW5lIGNwdV9sb2NhbF9zdWIoaSwgbCkgIGNwdV9sb2NhbF93cmFwKGxvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKChsKSkpKQotCi0jZGVmaW5lIF9fY3B1X2xvY2FsX2luYyhsKQljcHVfbG9jYWxfaW5jKChsKSkKLSNkZWZpbmUgX19jcHVfbG9jYWxfZGVjKGwpCWNwdV9sb2NhbF9kZWMoKGwpKQotI2RlZmluZSBfX2NwdV9sb2NhbF9hZGQoaSwgbCkJY3B1X2xvY2FsX2FkZCgoaSksIChsKSkKLSNkZWZpbmUgX19jcHVfbG9jYWxfc3ViKGksIGwpCWNwdV9sb2NhbF9zdWIoKGkpLCAobCkpCi0KICNlbmRpZiAvKiBfQVNNX1g4Nl9MT0NBTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcnN0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tcnN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUxZDMwZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21yc3QuaApAQCAtMCwwICsxLDE5IEBACisvKgorICogbXJzdC5oOiBJbnRlbCBNb29yZXN0b3duIHBsYXRmb3JtIHNwZWNpZmljIHNldHVwIGNvZGUKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDkgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UuCisgKi8KKyNpZm5kZWYgX0FTTV9YODZfTVJTVF9ICisjZGVmaW5lIF9BU01fWDg2X01SU1RfSAorZXh0ZXJuIGludCBwY2lfbXJzdF9pbml0KHZvaWQpOworaW50IF9faW5pdCBzZmlfcGFyc2VfbXJ0YyhzdHJ1Y3Qgc2ZpX3RhYmxlX2hlYWRlciAqdGFibGUpOworCisjZGVmaW5lIFNGSV9NVE1SX01BWF9OVU0gOAorI2RlZmluZSBTRklfTVJUQ19NQVgJOAorCisjZW5kaWYgLyogX0FTTV9YODZfTVJTVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbnVtYXEuaAppbmRleCAxMzM3MGI5Li4zN2M1MTY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9udW1hcS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL251bWFxLmgKQEAgLTMwLDYgKzMwLDcgQEAKIAogZXh0ZXJuIGludCBmb3VuZF9udW1hcTsKIGV4dGVybiBpbnQgZ2V0X21lbWNmZ19udW1hcSh2b2lkKTsKK2V4dGVybiBpbnQgcGNpX251bWFxX2luaXQodm9pZCk7CiAKIGV4dGVybiB2b2lkICp4cXVhZF9wb3J0aW87CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL29scGMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL29scGMuaAppbmRleCAzYTU3Mzg1Li4xMDEyMjliIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9vbHBjLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vb2xwYy5oCkBAIC0xMyw3ICsxMyw2IEBACiAKICNkZWZpbmUgT0xQQ19GX1BSRVNFTlQJCTB4MDEKICNkZWZpbmUgT0xQQ19GX0RDT04JCTB4MDIKLSNkZWZpbmUgT0xQQ19GX1ZTQQkJMHgwNAogCiAjaWZkZWYgQ09ORklHX09MUEMKIApAQCAtNTEsMTggKzUwLDYgQEAKIH0KIAogLyoKLSAqIFRoZSBWU0EgaXMgc29mdHdhcmUgZnJvbSBBTUQgdGhhdCB0eXBpY2FsIEdlb2RlIGJpb3NlcyB3aWxsIGluY2x1ZGUuCi0gKiBJdCBpcyB1c2VkIHRvIGVtdWxhdGUgdGhlIFBDSSBidXMsIFZHQSwgZXRjLiAgT0xQQydzIE9wZW4gRmlybXdhcmUgZG9lcwotICogbm90IGluY2x1ZGUgdGhlIFZTQTsgaW5zdGVhZCwgUENJIGlzIGVtdWxhdGVkIGJ5IHRoZSBrZXJuZWwuCi0gKgotICogVGhlIFZTQSBpcyBkZXNjcmliZWQgZnVydGhlciBpbiBhcmNoL3g4Ni9wY2kvb2xwYy5jLgotICovCi1zdGF0aWMgaW5saW5lIGludCBvbHBjX2hhc192c2Eodm9pZCkKLXsKLQlyZXR1cm4gKG9scGNfcGxhdGZvcm1faW5mby5mbGFncyAmIE9MUENfRl9WU0EpID8gMSA6IDA7Ci19Ci0KLS8qCiAgKiBUaGUgIk1hc3MgUHJvZHVjdGlvbiIgdmVyc2lvbiBvZiBPTFBDJ3MgWE8gaXMgaWRlbnRpZmllZCBhcyBiZWluZyBtb2RlbAogICogQzIuICBEdXJpbmcgdGhlIHByb3RvdHlwZSBwaGFzZSwgdGhlIGZvbGxvd2luZyBtb2RlbHMgKGluIGNocm9ub2xvZ2ljYWwKICAqIG9yZGVyKSB3ZXJlIGNyZWF0ZWQ6IEExLCBCMSwgQjIsIEIzLCBCNCwgQzEuICBUaGUgQTEgdGhyb3VnaCBCMiBtb2RlbHMKQEAgLTg3LDEzICs3NCwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBvbHBjX2hhc192c2Eodm9pZCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogI2VuZGlmCiAKK2V4dGVybiBpbnQgcGNpX29scGNfaW5pdCh2b2lkKTsKKwogLyogRUMgcmVsYXRlZCBmdW5jdGlvbnMgKi8KIAogZXh0ZXJuIGludCBvbHBjX2VjX2NtZCh1bnNpZ25lZCBjaGFyIGNtZCwgdW5zaWduZWQgY2hhciAqaW5idWYsIHNpemVfdCBpbmxlbiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCmluZGV4IGRkNTlhODUuLjU2NTNmNDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaApAQCAtNDM1LDE1ICs0MzUsNiBAQAogCVBWT1BfVkNBTEwxKHB2X21tdV9vcHMucmVsZWFzZV9wdWQsIHBmbik7CiB9CiAKLSNpZmRlZiBDT05GSUdfSElHSFBURQotc3RhdGljIGlubGluZSB2b2lkICprbWFwX2F0b21pY19wdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0ga21fdHlwZSB0eXBlKQotewotCXVuc2lnbmVkIGxvbmcgcmV0OwotCXJldCA9IFBWT1BfQ0FMTDIodW5zaWduZWQgbG9uZywgcHZfbW11X29wcy5rbWFwX2F0b21pY19wdGUsIHBhZ2UsIHR5cGUpOwotCXJldHVybiAodm9pZCAqKXJldDsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW5saW5lIHZvaWQgcHRlX3VwZGF0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgICAgcHRlX3QgKnB0ZXApCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydF90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnRfdHlwZXMuaAppbmRleCBiMWU3MGQ1Li5kYjllZjU1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydF90eXBlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0X3R5cGVzLmgKQEAgLTMwNCwxMCArMzA0LDYgQEAKICNlbmRpZgkvKiBQQUdFVEFCTEVfTEVWRUxTID09IDQgKi8KICNlbmRpZgkvKiBQQUdFVEFCTEVfTEVWRUxTID49IDMgKi8KIAotI2lmZGVmIENPTkZJR19ISUdIUFRFCi0Jdm9pZCAqKCprbWFwX2F0b21pY19wdGUpKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGttX3R5cGUgdHlwZSk7Ci0jZW5kaWYKLQogCXN0cnVjdCBwdl9sYXp5X29wcyBsYXp5X21vZGU7CiAKIAkvKiBkb20wIG9wcyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2kuaAppbmRleCBhZGE4YzIwLi40MDRhODgwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2kuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2kuaApAQCAtNDUsOCArNDUsMTUgQEAKIAogI2lmZGVmIENPTkZJR19QQ0kKIGV4dGVybiB1bnNpZ25lZCBpbnQgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3Nlcyh2b2lkKTsKK2V4dGVybiBpbnQgcGNpX2xlZ2FjeV9pbml0KHZvaWQpOworIyBpZmRlZiBDT05GSUdfQUNQSQorIyAgZGVmaW5lIHg4Nl9kZWZhdWx0X3BjaV9pbml0IHBjaV9hY3BpX2luaXQKKyMgZWxzZQorIyAgZGVmaW5lIHg4Nl9kZWZhdWx0X3BjaV9pbml0IHBjaV9sZWdhY3lfaW5pdAorIyBlbmRpZgogI2Vsc2UKLSNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCTAKKyMgZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKQkwCisjIGRlZmluZSB4ODZfZGVmYXVsdF9wY2lfaW5pdAkJTlVMTAogI2VuZGlmCiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHBjaV9tZW1fc3RhcnQ7CkBAIC05MCw0MCArOTcsMTQgQEAKIAogI2RlZmluZSBQQ0lfRE1BX0JVU19JU19QSFlTIChkbWFfb3BzLT5pc19waHlzKQogCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2XzY0KSB8fCBkZWZpbmVkKENPTkZJR19ETUFSKSB8fCBkZWZpbmVkKENPTkZJR19ETUFfQVBJX0RFQlVHKQotCi0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0FERFIoQUREUl9OQU1FKSAgICAgICBcCi0JICAgICAgICBkbWFfYWRkcl90IEFERFJfTkFNRTsKLSNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfTEVOKExFTl9OQU1FKSAgICAgICAgIFwKLQkgICAgICAgIF9fdTMyIExFTl9OQU1FOwotI2RlZmluZSBwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkgICAgICAgICAgICAgICAgICBcCi0JICAgICAgICAoKFBUUiktPkFERFJfTkFNRSkKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHJfc2V0KFBUUiwgQUREUl9OQU1FLCBWQUwpICAgICAgICAgXAotCSAgICAgICAgKCgoUFRSKS0+QUREUl9OQU1FKSA9IChWQUwpKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuKFBUUiwgTEVOX05BTUUpICAgICAgICAgICAgICAgICAgICBcCi0JICAgICAgICAoKFBUUiktPkxFTl9OQU1FKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpICAgICAgICAgICBcCi0JICAgICAgICAoKChQVFIpLT5MRU5fTkFNRSkgPSAoVkFMKSkKLQotI2Vsc2UKLQotI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKEFERFJfTkFNRSkgICAgICAgZG1hX2FkZHJfdCBBRERSX05BTUVbMF07Ci0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkgdW5zaWduZWQgTEVOX05BTUVbMF07Ci0jZGVmaW5lIHBjaV91bm1hcF9hZGRyKFBUUiwgQUREUl9OQU1FKSAgc2l6ZW9mKChQVFIpLT5BRERSX05BTUUpCi0jZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldChQVFIsIEFERFJfTkFNRSwgVkFMKSBcCi0JICAgICAgICBkbyB7IGJyZWFrOyB9IHdoaWxlIChwY2lfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkpCi0jZGVmaW5lIHBjaV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkgICAgICAgICAgICBzaXplb2YoKFBUUiktPkxFTl9OQU1FKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpIFwKLQkgICAgICAgIGRvIHsgYnJlYWs7IH0gd2hpbGUgKHBjaV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkpCi0KLSNlbmRpZgotCiAjZW5kaWYgIC8qIF9fS0VSTkVMX18gKi8KIAogI2lmZGVmIENPTkZJR19YODZfNjQKICNpbmNsdWRlICJwY2lfNjQuaCIKICNlbmRpZgogCit2b2lkIGRtYTMyX3Jlc2VydmVfYm9vdG1lbSh2b2lkKTsKKwogLyogaW1wbGVtZW50IHRoZSBwY2lfIERNQSBBUEkgaW4gdGVybXMgb2YgdGhlIGdlbmVyaWMgZGV2aWNlIGRtYV8gb25lICovCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGNpLWRtYS1jb21wYXQuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpXzY0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfNjQuaAppbmRleCBhZTVlNDBmLi5mZTE1Y2ZiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfNjQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfNjQuaApAQCAtMjIsOCArMjIsNiBAQAogZXh0ZXJuIGludCAoKnBjaV9jb25maWdfd3JpdGUpKGludCBzZWcsIGludCBidXMsIGludCBkZXYsIGludCBmbiwKIAkJCSAgICAgICBpbnQgcmVnLCBpbnQgbGVuLCB1MzIgdmFsdWUpOwogCi1leHRlcm4gdm9pZCBkbWEzMl9yZXNlcnZlX2Jvb3RtZW0odm9pZCk7Ci0KICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfQVNNX1g4Nl9QQ0lfNjRfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpX3g4Ni5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGNpX3g4Ni5oCmluZGV4IDA1YjU4Y2MuLjFhMDQyMjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BjaV94ODYuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wY2lfeDg2LmgKQEAgLTgzLDcgKzgzLDYgQEAKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBwY2liaW9zX2lycV9tYXNrOwogCi1leHRlcm4gaW50IHBjaWJpb3Nfc2Nhbm5lZDsKIGV4dGVybiBzcGlubG9ja190IHBjaV9jb25maWdfbG9jazsKIAogZXh0ZXJuIGludCAoKnBjaWJpb3NfZW5hYmxlX2lycSkoc3RydWN0IHBjaV9kZXYgKmRldik7CkBAIC0xMDYsMTYgKzEwNSwxNSBAQAogZXh0ZXJuIGludCBwY2lfZGlyZWN0X3Byb2JlKHZvaWQpOwogZXh0ZXJuIHZvaWQgcGNpX2RpcmVjdF9pbml0KGludCB0eXBlKTsKIGV4dGVybiB2b2lkIHBjaV9wY2Jpb3NfaW5pdCh2b2lkKTsKLWV4dGVybiBpbnQgcGNpX29scGNfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIF9faW5pdCBkbWlfY2hlY2tfcGNpcHJvYmUodm9pZCk7CiBleHRlcm4gdm9pZCBfX2luaXQgZG1pX2NoZWNrX3NraXBfaXNhX2FsaWduKHZvaWQpOwogCiAvKiBzb21lIGNvbW1vbiB1c2VkIHN1YnN5c19pbml0Y2FsbHMgKi8KIGV4dGVybiBpbnQgX19pbml0IHBjaV9hY3BpX2luaXQodm9pZCk7Ci1leHRlcm4gaW50IF9faW5pdCBwY2liaW9zX2lycV9pbml0KHZvaWQpOwotZXh0ZXJuIGludCBfX2luaXQgcGNpX3Zpc3dzX2luaXQodm9pZCk7Ci1leHRlcm4gaW50IF9faW5pdCBwY2lfbnVtYXFfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIF9faW5pdCBwY2liaW9zX2lycV9pbml0KHZvaWQpOwogZXh0ZXJuIGludCBfX2luaXQgcGNpYmlvc19pbml0KHZvaWQpOworZXh0ZXJuIGludCBwY2lfbGVnYWN5X2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBwY2liaW9zX2ZpeHVwX2lycXModm9pZCk7CiAKIC8qIHBjaS1tbWNvbmZpZy5jICovCiAKQEAgLTE4MywzICsxODEsMTcgQEAKIHsKIAlhc20gdm9sYXRpbGUoIm1vdmwgJSVlYXgsKCUxKSIgOiA6ICJhIiAodmFsKSwgInIiIChwb3MpIDogIm1lbW9yeSIpOwogfQorCisjaWZkZWYgQ09ORklHX1BDSQorIyBpZmRlZiBDT05GSUdfQUNQSQorIyAgZGVmaW5lIHg4Nl9kZWZhdWx0X3BjaV9pbml0CQlwY2lfYWNwaV9pbml0CisjIGVsc2UKKyMgIGRlZmluZSB4ODZfZGVmYXVsdF9wY2lfaW5pdAkJcGNpX2xlZ2FjeV9pbml0CisjIGVuZGlmCisjIGRlZmluZSB4ODZfZGVmYXVsdF9wY2lfaW5pdF9pcnEJcGNpYmlvc19pcnFfaW5pdAorIyBkZWZpbmUgeDg2X2RlZmF1bHRfcGNpX2ZpeHVwX2lycXMJcGNpYmlvc19maXh1cF9pcnFzCisjZWxzZQorIyBkZWZpbmUgeDg2X2RlZmF1bHRfcGNpX2luaXQJCU5VTEwKKyMgZGVmaW5lIHg4Nl9kZWZhdWx0X3BjaV9pbml0X2lycQlOVUxMCisjIGRlZmluZSB4ODZfZGVmYXVsdF9wY2lfZml4dXBfaXJxcwlOVUxMCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BlcmNwdS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmgKaW5kZXggMGM0NDE5Ni4uNjZhMjcyZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGVyY3B1LmgKQEAgLTI1LDE5ICsyNSwxOCBAQAogICovCiAjaWZkZWYgQ09ORklHX1NNUAogI2RlZmluZSBQRVJfQ1BVKHZhciwgcmVnKQkJCQkJCVwKLQlfX3BlcmNwdV9tb3Zfb3AgJV9fcGVyY3B1X3NlZzpwZXJfY3B1X190aGlzX2NwdV9vZmYsIHJlZzsJXAotCWxlYSBwZXJfY3B1X18jI3ZhcihyZWcpLCByZWcKLSNkZWZpbmUgUEVSX0NQVV9WQVIodmFyKQklX19wZXJjcHVfc2VnOnBlcl9jcHVfXyMjdmFyCisJX19wZXJjcHVfbW92X29wICVfX3BlcmNwdV9zZWc6dGhpc19jcHVfb2ZmLCByZWc7CQlcCisJbGVhIHZhcihyZWcpLCByZWcKKyNkZWZpbmUgUEVSX0NQVV9WQVIodmFyKQklX19wZXJjcHVfc2VnOnZhcgogI2Vsc2UgLyogISBTTVAgKi8KLSNkZWZpbmUgUEVSX0NQVSh2YXIsIHJlZykJCQkJCQlcCi0JX19wZXJjcHVfbW92X29wICRwZXJfY3B1X18jI3ZhciwgcmVnCi0jZGVmaW5lIFBFUl9DUFVfVkFSKHZhcikJcGVyX2NwdV9fIyN2YXIKKyNkZWZpbmUgUEVSX0NQVSh2YXIsIHJlZykJX19wZXJjcHVfbW92X29wICR2YXIsIHJlZworI2RlZmluZSBQRVJfQ1BVX1ZBUih2YXIpCXZhcgogI2VuZGlmCS8qIFNNUCAqLwogCiAjaWZkZWYgQ09ORklHX1g4Nl82NF9TTVAKICNkZWZpbmUgSU5JVF9QRVJfQ1BVX1ZBUih2YXIpICBpbml0X3Blcl9jcHVfXyMjdmFyCiAjZWxzZQotI2RlZmluZSBJTklUX1BFUl9DUFVfVkFSKHZhcikgIHBlcl9jcHVfXyMjdmFyCisjZGVmaW5lIElOSVRfUEVSX0NQVV9WQVIodmFyKSAgdmFyCiAjZW5kaWYKIAogI2Vsc2UgLyogLi4uIUFTU0VNQkxZICovCkBAIC02MCwxMiArNTksMTIgQEAKICAqIFRoZXJlIGFsc28gbXVzdCBiZSBhbiBlbnRyeSBpbiB2bWxpbnV4XzY0Lmxkcy5TCiAgKi8KICNkZWZpbmUgREVDTEFSRV9JTklUX1BFUl9DUFUodmFyKSBcCi0gICAgICAgZXh0ZXJuIHR5cGVvZihwZXJfY3B1X3Zhcih2YXIpKSBpbml0X3Blcl9jcHVfdmFyKHZhcikKKyAgICAgICBleHRlcm4gdHlwZW9mKHZhcikgaW5pdF9wZXJfY3B1X3Zhcih2YXIpCiAKICNpZmRlZiBDT05GSUdfWDg2XzY0X1NNUAogI2RlZmluZSBpbml0X3Blcl9jcHVfdmFyKHZhcikgIGluaXRfcGVyX2NwdV9fIyN2YXIKICNlbHNlCi0jZGVmaW5lIGluaXRfcGVyX2NwdV92YXIodmFyKSAgcGVyX2NwdV92YXIodmFyKQorI2RlZmluZSBpbml0X3Blcl9jcHVfdmFyKHZhcikgIHZhcgogI2VuZGlmCiAKIC8qIEZvciBhcmNoLXNwZWNpZmljIGNvZGUsIHdlIGNhbiB1c2UgZGlyZWN0IHNpbmdsZS1pbnNuIG9wcyAodGhleQpAQCAtMTA0LDYgKzEwMyw2NCBAQAogCX0JCQkJCQlcCiB9IHdoaWxlICgwKQogCisvKgorICogR2VuZXJhdGUgYSBwZXJjcHUgYWRkIHRvIG1lbW9yeSBpbnN0cnVjdGlvbiBhbmQgb3B0aW1pemUgY29kZQorICogaWYgYSBvbmUgaXMgYWRkZWQgb3Igc3VidHJhY3RlZC4KKyAqLworI2RlZmluZSBwZXJjcHVfYWRkX29wKHZhciwgdmFsKQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJdHlwZWRlZiB0eXBlb2YodmFyKSBwYW9fVF9fOwkJCQkJXAorCWNvbnN0IGludCBwYW9fSURfXyA9IChfX2J1aWx0aW5fY29uc3RhbnRfcCh2YWwpICYmCQlcCisJCQkgICAgICAoKHZhbCkgPT0gMSB8fCAodmFsKSA9PSAtMSkpID8gKHZhbCkgOiAwOwlcCisJaWYgKDApIHsJCQkJCQkJXAorCQlwYW9fVF9fIHBhb190bXBfXzsJCQkJCVwKKwkJcGFvX3RtcF9fID0gKHZhbCk7CQkJCQlcCisJfQkJCQkJCQkJXAorCXN3aXRjaCAoc2l6ZW9mKHZhcikpIHsJCQkJCQlcCisJY2FzZSAxOgkJCQkJCQkJXAorCQlpZiAocGFvX0lEX18gPT0gMSkJCQkJCVwKKwkJCWFzbSgiaW5jYiAiX19wZXJjcHVfYXJnKDApIDogIittIiAodmFyKSk7CVwKKwkJZWxzZSBpZiAocGFvX0lEX18gPT0gLTEpCQkJCVwKKwkJCWFzbSgiZGVjYiAiX19wZXJjcHVfYXJnKDApIDogIittIiAodmFyKSk7CVwKKwkJZWxzZQkJCQkJCQlcCisJCQlhc20oImFkZGIgJTEsICJfX3BlcmNwdV9hcmcoMCkJCQlcCisJCQkgICAgOiAiK20iICh2YXIpCQkJCVwKKwkJCSAgICA6ICJxaSIgKChwYW9fVF9fKSh2YWwpKSk7CQkJXAorCQlicmVhazsJCQkJCQkJXAorCWNhc2UgMjoJCQkJCQkJCVwKKwkJaWYgKHBhb19JRF9fID09IDEpCQkJCQlcCisJCQlhc20oImluY3cgIl9fcGVyY3B1X2FyZygwKSA6ICIrbSIgKHZhcikpOwlcCisJCWVsc2UgaWYgKHBhb19JRF9fID09IC0xKQkJCQlcCisJCQlhc20oImRlY3cgIl9fcGVyY3B1X2FyZygwKSA6ICIrbSIgKHZhcikpOwlcCisJCWVsc2UJCQkJCQkJXAorCQkJYXNtKCJhZGR3ICUxLCAiX19wZXJjcHVfYXJnKDApCQkJXAorCQkJICAgIDogIittIiAodmFyKQkJCQlcCisJCQkgICAgOiAicmkiICgocGFvX1RfXykodmFsKSkpOwkJCVwKKwkJYnJlYWs7CQkJCQkJCVwKKwljYXNlIDQ6CQkJCQkJCQlcCisJCWlmIChwYW9fSURfXyA9PSAxKQkJCQkJXAorCQkJYXNtKCJpbmNsICJfX3BlcmNwdV9hcmcoMCkgOiAiK20iICh2YXIpKTsJXAorCQllbHNlIGlmIChwYW9fSURfXyA9PSAtMSkJCQkJXAorCQkJYXNtKCJkZWNsICJfX3BlcmNwdV9hcmcoMCkgOiAiK20iICh2YXIpKTsJXAorCQllbHNlCQkJCQkJCVwKKwkJCWFzbSgiYWRkbCAlMSwgIl9fcGVyY3B1X2FyZygwKQkJCVwKKwkJCSAgICA6ICIrbSIgKHZhcikJCQkJXAorCQkJICAgIDogInJpIiAoKHBhb19UX18pKHZhbCkpKTsJCQlcCisJCWJyZWFrOwkJCQkJCQlcCisJY2FzZSA4OgkJCQkJCQkJXAorCQlpZiAocGFvX0lEX18gPT0gMSkJCQkJCVwKKwkJCWFzbSgiaW5jcSAiX19wZXJjcHVfYXJnKDApIDogIittIiAodmFyKSk7CVwKKwkJZWxzZSBpZiAocGFvX0lEX18gPT0gLTEpCQkJCVwKKwkJCWFzbSgiZGVjcSAiX19wZXJjcHVfYXJnKDApIDogIittIiAodmFyKSk7CVwKKwkJZWxzZQkJCQkJCQlcCisJCQlhc20oImFkZHEgJTEsICJfX3BlcmNwdV9hcmcoMCkJCQlcCisJCQkgICAgOiAiK20iICh2YXIpCQkJCVwKKwkJCSAgICA6ICJyZSIgKChwYW9fVF9fKSh2YWwpKSk7CQkJXAorCQlicmVhazsJCQkJCQkJXAorCWRlZmF1bHQ6IF9fYmFkX3BlcmNwdV9zaXplKCk7CQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSAoMCkKKwogI2RlZmluZSBwZXJjcHVfZnJvbV9vcChvcCwgdmFyLCBjb25zdHJhaW50KQkJXAogKHsJCQkJCQkJXAogCXR5cGVvZih2YXIpIHBmb19yZXRfXzsJCQkJXApAQCAtMTQyLDE2ICsxOTksMTQgQEAKICAqIHBlci10aHJlYWQgdmFyaWFibGVzIGltcGxlbWVudGVkIGFzIHBlci1jcHUgdmFyaWFibGVzIGFuZCB0aHVzCiAgKiBzdGFibGUgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgcmVzcGVjdGl2ZSB0YXNrLgogICovCi0jZGVmaW5lIHBlcmNwdV9yZWFkKHZhcikJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIHBlcl9jcHVfXyMjdmFyLAlcCi0JCQkJCSAgICAgICAibSIgKHBlcl9jcHVfXyMjdmFyKSkKLSNkZWZpbmUgcGVyY3B1X3JlYWRfc3RhYmxlKHZhcikJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIHBlcl9jcHVfXyMjdmFyLAlcCi0JCQkJCSAgICAgICAicCIgKCZwZXJfY3B1X18jI3ZhcikpCi0jZGVmaW5lIHBlcmNwdV93cml0ZSh2YXIsIHZhbCkJcGVyY3B1X3RvX29wKCJtb3YiLCBwZXJfY3B1X18jI3ZhciwgdmFsKQotI2RlZmluZSBwZXJjcHVfYWRkKHZhciwgdmFsKQlwZXJjcHVfdG9fb3AoImFkZCIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCi0jZGVmaW5lIHBlcmNwdV9zdWIodmFyLCB2YWwpCXBlcmNwdV90b19vcCgic3ViIiwgcGVyX2NwdV9fIyN2YXIsIHZhbCkKLSNkZWZpbmUgcGVyY3B1X2FuZCh2YXIsIHZhbCkJcGVyY3B1X3RvX29wKCJhbmQiLCBwZXJfY3B1X18jI3ZhciwgdmFsKQotI2RlZmluZSBwZXJjcHVfb3IodmFyLCB2YWwpCXBlcmNwdV90b19vcCgib3IiLCBwZXJfY3B1X18jI3ZhciwgdmFsKQotI2RlZmluZSBwZXJjcHVfeG9yKHZhciwgdmFsKQlwZXJjcHVfdG9fb3AoInhvciIsIHBlcl9jcHVfXyMjdmFyLCB2YWwpCisjZGVmaW5lIHBlcmNwdV9yZWFkKHZhcikJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCB2YXIsICJtIiAodmFyKSkKKyNkZWZpbmUgcGVyY3B1X3JlYWRfc3RhYmxlKHZhcikJCXBlcmNwdV9mcm9tX29wKCJtb3YiLCB2YXIsICJwIiAoJih2YXIpKSkKKyNkZWZpbmUgcGVyY3B1X3dyaXRlKHZhciwgdmFsKQkJcGVyY3B1X3RvX29wKCJtb3YiLCB2YXIsIHZhbCkKKyNkZWZpbmUgcGVyY3B1X2FkZCh2YXIsIHZhbCkJCXBlcmNwdV9hZGRfb3AodmFyLCB2YWwpCisjZGVmaW5lIHBlcmNwdV9zdWIodmFyLCB2YWwpCQlwZXJjcHVfYWRkX29wKHZhciwgLSh2YWwpKQorI2RlZmluZSBwZXJjcHVfYW5kKHZhciwgdmFsKQkJcGVyY3B1X3RvX29wKCJhbmQiLCB2YXIsIHZhbCkKKyNkZWZpbmUgcGVyY3B1X29yKHZhciwgdmFsKQkJcGVyY3B1X3RvX29wKCJvciIsIHZhciwgdmFsKQorI2RlZmluZSBwZXJjcHVfeG9yKHZhciwgdmFsKQkJcGVyY3B1X3RvX29wKCJ4b3IiLCB2YXIsIHZhbCkKIAogI2RlZmluZSBfX3RoaXNfY3B1X3JlYWRfMShwY3ApCQlwZXJjcHVfZnJvbV9vcCgibW92IiwgKHBjcCksICJtIihwY3ApKQogI2RlZmluZSBfX3RoaXNfY3B1X3JlYWRfMihwY3ApCQlwZXJjcHVfZnJvbV9vcCgibW92IiwgKHBjcCksICJtIihwY3ApKQpAQCAtMTYwLDkgKzIxNSw5IEBACiAjZGVmaW5lIF9fdGhpc19jcHVfd3JpdGVfMShwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJtb3YiLCAocGNwKSwgdmFsKQogI2RlZmluZSBfX3RoaXNfY3B1X3dyaXRlXzIocGNwLCB2YWwpCXBlcmNwdV90b19vcCgibW92IiwgKHBjcCksIHZhbCkKICNkZWZpbmUgX190aGlzX2NwdV93cml0ZV80KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIChwY3ApLCB2YWwpCi0jZGVmaW5lIF9fdGhpc19jcHVfYWRkXzEocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYWRkIiwgKHBjcCksIHZhbCkKLSNkZWZpbmUgX190aGlzX2NwdV9hZGRfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhZGQiLCAocGNwKSwgdmFsKQotI2RlZmluZSBfX3RoaXNfY3B1X2FkZF80KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoImFkZCIsIChwY3ApLCB2YWwpCisjZGVmaW5lIF9fdGhpc19jcHVfYWRkXzEocGNwLCB2YWwpCXBlcmNwdV9hZGRfb3AoKHBjcCksIHZhbCkKKyNkZWZpbmUgX190aGlzX2NwdV9hZGRfMihwY3AsIHZhbCkJcGVyY3B1X2FkZF9vcCgocGNwKSwgdmFsKQorI2RlZmluZSBfX3RoaXNfY3B1X2FkZF80KHBjcCwgdmFsKQlwZXJjcHVfYWRkX29wKChwY3ApLCB2YWwpCiAjZGVmaW5lIF9fdGhpc19jcHVfYW5kXzEocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYW5kIiwgKHBjcCksIHZhbCkKICNkZWZpbmUgX190aGlzX2NwdV9hbmRfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhbmQiLCAocGNwKSwgdmFsKQogI2RlZmluZSBfX3RoaXNfY3B1X2FuZF80KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoImFuZCIsIChwY3ApLCB2YWwpCkBAIC0xNzksOSArMjM0LDkgQEAKICNkZWZpbmUgdGhpc19jcHVfd3JpdGVfMShwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJtb3YiLCAocGNwKSwgdmFsKQogI2RlZmluZSB0aGlzX2NwdV93cml0ZV8yKHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIChwY3ApLCB2YWwpCiAjZGVmaW5lIHRoaXNfY3B1X3dyaXRlXzQocGNwLCB2YWwpCXBlcmNwdV90b19vcCgibW92IiwgKHBjcCksIHZhbCkKLSNkZWZpbmUgdGhpc19jcHVfYWRkXzEocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYWRkIiwgKHBjcCksIHZhbCkKLSNkZWZpbmUgdGhpc19jcHVfYWRkXzIocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYWRkIiwgKHBjcCksIHZhbCkKLSNkZWZpbmUgdGhpc19jcHVfYWRkXzQocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYWRkIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfYWRkXzEocGNwLCB2YWwpCXBlcmNwdV9hZGRfb3AoKHBjcCksIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfYWRkXzIocGNwLCB2YWwpCXBlcmNwdV9hZGRfb3AoKHBjcCksIHZhbCkKKyNkZWZpbmUgdGhpc19jcHVfYWRkXzQocGNwLCB2YWwpCXBlcmNwdV9hZGRfb3AoKHBjcCksIHZhbCkKICNkZWZpbmUgdGhpc19jcHVfYW5kXzEocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYW5kIiwgKHBjcCksIHZhbCkKICNkZWZpbmUgdGhpc19jcHVfYW5kXzIocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYW5kIiwgKHBjcCksIHZhbCkKICNkZWZpbmUgdGhpc19jcHVfYW5kXzQocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYW5kIiwgKHBjcCksIHZhbCkKQEAgLTE5Miw5ICsyNDcsOSBAQAogI2RlZmluZSB0aGlzX2NwdV94b3JfMihwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJ4b3IiLCAocGNwKSwgdmFsKQogI2RlZmluZSB0aGlzX2NwdV94b3JfNChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJ4b3IiLCAocGNwKSwgdmFsKQogCi0jZGVmaW5lIGlycXNhZmVfY3B1X2FkZF8xKHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoImFkZCIsIChwY3ApLCB2YWwpCi0jZGVmaW5lIGlycXNhZmVfY3B1X2FkZF8yKHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoImFkZCIsIChwY3ApLCB2YWwpCi0jZGVmaW5lIGlycXNhZmVfY3B1X2FkZF80KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoImFkZCIsIChwY3ApLCB2YWwpCisjZGVmaW5lIGlycXNhZmVfY3B1X2FkZF8xKHBjcCwgdmFsKQlwZXJjcHVfYWRkX29wKChwY3ApLCB2YWwpCisjZGVmaW5lIGlycXNhZmVfY3B1X2FkZF8yKHBjcCwgdmFsKQlwZXJjcHVfYWRkX29wKChwY3ApLCB2YWwpCisjZGVmaW5lIGlycXNhZmVfY3B1X2FkZF80KHBjcCwgdmFsKQlwZXJjcHVfYWRkX29wKChwY3ApLCB2YWwpCiAjZGVmaW5lIGlycXNhZmVfY3B1X2FuZF8xKHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoImFuZCIsIChwY3ApLCB2YWwpCiAjZGVmaW5lIGlycXNhZmVfY3B1X2FuZF8yKHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoImFuZCIsIChwY3ApLCB2YWwpCiAjZGVmaW5lIGlycXNhZmVfY3B1X2FuZF80KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoImFuZCIsIChwY3ApLCB2YWwpCkBAIC0yMTIsMTkgKzI2NywxOSBAQAogI2lmZGVmIENPTkZJR19YODZfNjQKICNkZWZpbmUgX190aGlzX2NwdV9yZWFkXzgocGNwKQkJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIChwY3ApLCAibSIocGNwKSkKICNkZWZpbmUgX190aGlzX2NwdV93cml0ZV84KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoIm1vdiIsIChwY3ApLCB2YWwpCi0jZGVmaW5lIF9fdGhpc19jcHVfYWRkXzgocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYWRkIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgX190aGlzX2NwdV9hZGRfOChwY3AsIHZhbCkJcGVyY3B1X2FkZF9vcCgocGNwKSwgdmFsKQogI2RlZmluZSBfX3RoaXNfY3B1X2FuZF84KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoImFuZCIsIChwY3ApLCB2YWwpCiAjZGVmaW5lIF9fdGhpc19jcHVfb3JfOChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJvciIsIChwY3ApLCB2YWwpCiAjZGVmaW5lIF9fdGhpc19jcHVfeG9yXzgocGNwLCB2YWwpCXBlcmNwdV90b19vcCgieG9yIiwgKHBjcCksIHZhbCkKIAogI2RlZmluZSB0aGlzX2NwdV9yZWFkXzgocGNwKQkJcGVyY3B1X2Zyb21fb3AoIm1vdiIsIChwY3ApLCAibSIocGNwKSkKICNkZWZpbmUgdGhpc19jcHVfd3JpdGVfOChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJtb3YiLCAocGNwKSwgdmFsKQotI2RlZmluZSB0aGlzX2NwdV9hZGRfOChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhZGQiLCAocGNwKSwgdmFsKQorI2RlZmluZSB0aGlzX2NwdV9hZGRfOChwY3AsIHZhbCkJcGVyY3B1X2FkZF9vcCgocGNwKSwgdmFsKQogI2RlZmluZSB0aGlzX2NwdV9hbmRfOChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJhbmQiLCAocGNwKSwgdmFsKQogI2RlZmluZSB0aGlzX2NwdV9vcl84KHBjcCwgdmFsKQkJcGVyY3B1X3RvX29wKCJvciIsIChwY3ApLCB2YWwpCiAjZGVmaW5lIHRoaXNfY3B1X3hvcl84KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoInhvciIsIChwY3ApLCB2YWwpCiAKLSNkZWZpbmUgaXJxc2FmZV9jcHVfYWRkXzgocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYWRkIiwgKHBjcCksIHZhbCkKKyNkZWZpbmUgaXJxc2FmZV9jcHVfYWRkXzgocGNwLCB2YWwpCXBlcmNwdV9hZGRfb3AoKHBjcCksIHZhbCkKICNkZWZpbmUgaXJxc2FmZV9jcHVfYW5kXzgocGNwLCB2YWwpCXBlcmNwdV90b19vcCgiYW5kIiwgKHBjcCksIHZhbCkKICNkZWZpbmUgaXJxc2FmZV9jcHVfb3JfOChwY3AsIHZhbCkJcGVyY3B1X3RvX29wKCJvciIsIChwY3ApLCB2YWwpCiAjZGVmaW5lIGlycXNhZmVfY3B1X3hvcl84KHBjcCwgdmFsKQlwZXJjcHVfdG9fb3AoInhvciIsIChwY3ApLCB2YWwpCkBAIC0yMzYsNyArMjkxLDcgQEAKICh7CQkJCQkJCQkJXAogCWludCBvbGRfXzsJCQkJCQkJXAogCWFzbSB2b2xhdGlsZSgiYnRyICUyLCJfX3BlcmNwdV9hcmcoMSkiXG5cdHNiYmwgJTAsJTAiCQlcCi0JCSAgICAgOiAiPXIiIChvbGRfXyksICIrbSIgKHBlcl9jcHVfXyMjdmFyKQkJXAorCQkgICAgIDogIj1yIiAob2xkX18pLCAiK20iICh2YXIpCQkJCVwKIAkJICAgICA6ICJkSXIiIChiaXQpKTsJCQkJCVwKIAlvbGRfXzsJCQkJCQkJCVwKIH0pCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKaW5kZXggYTI4NjY4My4uNDczMzlhMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaApAQCAtNTQsMTAgKzU0LDEwIEBACiAJIGluX2lycSgpID8gS01fSVJRX1BURSA6CVwKIAkgS01fUFRFMCkKICNkZWZpbmUgcHRlX29mZnNldF9tYXAoZGlyLCBhZGRyZXNzKQkJCQkJXAotCSgocHRlX3QgKilrbWFwX2F0b21pY19wdGUocG1kX3BhZ2UoKihkaXIpKSwgX19LTV9QVEUpICsJCVwKKwkoKHB0ZV90ICopa21hcF9hdG9taWMocG1kX3BhZ2UoKihkaXIpKSwgX19LTV9QVEUpICsJCVwKIAkgcHRlX2luZGV4KChhZGRyZXNzKSkpCiAjZGVmaW5lIHB0ZV9vZmZzZXRfbWFwX25lc3RlZChkaXIsIGFkZHJlc3MpCQkJCVwKLQkoKHB0ZV90ICopa21hcF9hdG9taWNfcHRlKHBtZF9wYWdlKCooZGlyKSksIEtNX1BURTEpICsJCVwKKwkoKHB0ZV90ICopa21hcF9hdG9taWMocG1kX3BhZ2UoKihkaXIpKSwgS01fUFRFMSkgKwkJXAogCSBwdGVfaW5kZXgoKGFkZHJlc3MpKSkKICNkZWZpbmUgcHRlX3VubWFwKHB0ZSkga3VubWFwX2F0b21pYygocHRlKSwgX19LTV9QVEUpCiAjZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKSBrdW5tYXBfYXRvbWljKChwdGUpLCBLTV9QVEUxKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvdG8uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb3RvLmgKaW5kZXggNDAwOWY2NS4uNmY0MTRlZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvdG8uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wcm90by5oCkBAIC0yMywxNCArMjMsNCBAQAogCiBsb25nIGRvX2FyY2hfcHJjdGwoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKIAotLyoKLSAqIFRoaXMgbG9va3MgbW9yZSBjb21wbGV4IHRoYW4gaXQgc2hvdWxkIGJlLiBCdXQgd2UgbmVlZCB0bwotICogZ2V0IHRoZSB0eXBlIGZvciB0aGUgfiByaWdodCBpbiByb3VuZF9kb3duIChpdCBuZWVkcyB0byBiZQotICogYXMgd2lkZSBhcyB0aGUgcmVzdWx0ISksIGFuZCB3ZSB3YW50IHRvIGV2YWx1YXRlIHRoZSBtYWNybwotICogYXJndW1lbnRzIGp1c3Qgb25jZSBlYWNoLgotICovCi0jZGVmaW5lIF9fcm91bmRfbWFzayh4LHkpICgoX190eXBlb2ZfXyh4KSkoKHkpLTEpKQotI2RlZmluZSByb3VuZF91cCh4LHkpICgoKCh4KS0xKSB8IF9fcm91bmRfbWFzayh4LHkpKSsxKQotI2RlZmluZSByb3VuZF9kb3duKHgseSkgKCh4KSAmIH5fX3JvdW5kX21hc2soeCx5KSkKLQogI2VuZGlmIC8qIF9BU01fWDg2X1BST1RPX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3B0cmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmgKaW5kZXggMjAxMDI4MC4uNjlhNjg2YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHRyYWNlLmgKQEAgLTI3NCwxNCArMjc0LDcgQEAKIAkJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBUaGVzZSBhcmUgZGVmaW5lZCBhcyBwZXIgbGludXgvcHRyYWNlLmgsIHdoaWNoIHNlZS4KLSAqLwogI2RlZmluZSBhcmNoX2hhc19zaW5nbGVfc3RlcCgpCSgxKQotZXh0ZXJuIHZvaWQgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICopOwotZXh0ZXJuIHZvaWQgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKLQotZXh0ZXJuIHZvaWQgdXNlcl9lbmFibGVfYmxvY2tfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAjaWZkZWYgQ09ORklHX1g4Nl9ERUJVR0NUTE1TUgogI2RlZmluZSBhcmNoX2hhc19ibG9ja19zdGVwKCkJKDEpCiAjZWxzZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmgKaW5kZXggMThlNDk2Yy4uODZiMTUwNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oCkBAIC0zNywxMCArMzcsOCBAQAogCiAjaWZkZWYgQ09ORklHX1g4Nl9WSVNXUwogZXh0ZXJuIHZvaWQgdmlzd3NfZWFybHlfZGV0ZWN0KHZvaWQpOwotZXh0ZXJuIGludCBpc192aXN3c19ib3godm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHZpc3dzX2Vhcmx5X2RldGVjdCh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX3Zpc3dzX2JveCh2b2lkKSB7IHJldHVybiAwOyB9CiAjZW5kaWYKIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2F2ZWRfdmlkZW9fbW9kZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N2bS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKaW5kZXggMWZlY2I3ZS4uMzg2MzhjZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3ZtLmgKQEAgLTMxMyw3ICszMTMsNyBAQAogCiAjZGVmaW5lIFNWTV9FWElUX0VSUgkJLTEKIAotI2RlZmluZSBTVk1fQ1IwX1NFTEVDVElWRV9NQVNLICgxIDw8IDMgfCAxKSAvKiBUUyBhbmQgTVAgKi8KKyNkZWZpbmUgU1ZNX0NSMF9TRUxFQ1RJVkVfTUFTSyAoWDg2X0NSMF9UUyB8IFg4Nl9DUjBfTVApCiAKICNkZWZpbmUgU1ZNX1ZNTE9BRCAiLmJ5dGUgMHgwZiwgMHgwMSwgMHhkYSIKICNkZWZpbmUgU1ZNX1ZNUlVOICAiLmJ5dGUgMHgwZiwgMHgwMSwgMHhkOCIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c19pYTMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNfaWEzMi5oCmluZGV4IGQ1ZjY5MDQuLjNhZDQyMTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c19pYTMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzX2lhMzIuaApAQCAtMjYsOCArMjYsOCBAQAogYXNtbGlua2FnZSBsb25nIHN5czMyX2ZzdGF0NjQodW5zaWduZWQgaW50LCBzdHJ1Y3Qgc3RhdDY0IF9fdXNlciAqKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9mc3RhdGF0KHVuc2lnbmVkIGludCwgY2hhciBfX3VzZXIgKiwKIAkJCSAgICAgIHN0cnVjdCBzdGF0NjQgX191c2VyICosIGludCk7Ci1zdHJ1Y3QgbW1hcF9hcmdfc3RydWN0OwotYXNtbGlua2FnZSBsb25nIHN5czMyX21tYXAoc3RydWN0IG1tYXBfYXJnX3N0cnVjdCBfX3VzZXIgKik7CitzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0MzI7Cithc21saW5rYWdlIGxvbmcgc3lzMzJfbW1hcChzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0MzIgX191c2VyICopOwogYXNtbGlua2FnZSBsb25nIHN5czMyX21wcm90ZWN0KHVuc2lnbmVkIGxvbmcsIHNpemVfdCwgdW5zaWduZWQgbG9uZyk7CiAKIHN0cnVjdCBzaWdhY3Rpb24zMjsKQEAgLTQwLDggKzQwLDYgQEAKIAkJCQkgICAgIGNvbXBhdF9zaWdzZXRfdCBfX3VzZXIgKiwgdW5zaWduZWQgaW50KTsKIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9hbGFybSh1bnNpZ25lZCBpbnQpOwogCi1zdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3Q7Ci1hc21saW5rYWdlIGxvbmcgc3lzMzJfb2xkX3NlbGVjdChzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QgX191c2VyICopOwogYXNtbGlua2FnZSBsb25nIHN5czMyX3dhaXRwaWQoY29tcGF0X3BpZF90LCB1bnNpZ25lZCBpbnQgKiwgaW50KTsKIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9zeXNmcyhpbnQsIHUzMiwgdTMyKTsKIApAQCAtNTYsMTEgKzU0LDYgQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9wZXJzb25hbGl0eSh1bnNpZ25lZCBsb25nKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9zZW5kZmlsZShpbnQsIGludCwgY29tcGF0X29mZl90IF9fdXNlciAqLCBzMzIpOwogCi1zdHJ1Y3Qgb2xkb2xkX3V0c25hbWU7Ci1zdHJ1Y3Qgb2xkX3V0c25hbWU7Ci1hc21saW5rYWdlIGxvbmcgc3lzMzJfb2xkdW5hbWUoc3RydWN0IG9sZG9sZF91dHNuYW1lIF9fdXNlciAqKTsKLWxvbmcgc3lzMzJfdW5hbWUoc3RydWN0IG9sZF91dHNuYW1lIF9fdXNlciAqKTsKLQogYXNtbGlua2FnZSBsb25nIHN5czMyX2V4ZWN2ZShjaGFyIF9fdXNlciAqLCBjb21wYXRfdXB0cl90IF9fdXNlciAqLAogCQkJICAgICBjb21wYXRfdXB0cl90IF9fdXNlciAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9jbG9uZSh1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwgc3RydWN0IHB0X3JlZ3MgKik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxscy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc3lzY2FsbHMuaAppbmRleCA4ODY4Yjk0Li41YzA0NGI0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNjYWxscy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c2NhbGxzLmgKQEAgLTUwLDE4ICs1MCw2IEBACiAJCQkgICAgIHN0cnVjdCBvbGRfc2lnYWN0aW9uIF9fdXNlciAqKTsKIHVuc2lnbmVkIGxvbmcgc3lzX3NpZ3JldHVybihzdHJ1Y3QgcHRfcmVncyAqKTsKIAotLyoga2VybmVsL3N5c19pMzg2XzMyLmMgKi8KLXN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3Q7Ci1zdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3Q7Ci1zdHJ1Y3Qgb2xkb2xkX3V0c25hbWU7Ci1zdHJ1Y3Qgb2xkX3V0c25hbWU7Ci0KLWFzbWxpbmthZ2UgaW50IG9sZF9tbWFwKHN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgX191c2VyICopOwotYXNtbGlua2FnZSBpbnQgb2xkX3NlbGVjdChzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QgX191c2VyICopOwotYXNtbGlua2FnZSBpbnQgc3lzX2lwYyh1aW50LCBpbnQsIGludCwgaW50LCB2b2lkIF9fdXNlciAqLCBsb25nKTsKLWFzbWxpbmthZ2UgaW50IHN5c191bmFtZShzdHJ1Y3Qgb2xkX3V0c25hbWUgX191c2VyICopOwotYXNtbGlua2FnZSBpbnQgc3lzX29sZHVuYW1lKHN0cnVjdCBvbGRvbGRfdXRzbmFtZSBfX3VzZXIgKik7Ci0KIC8qIGtlcm5lbC92bTg2XzMyLmMgKi8KIGludCBzeXNfdm04Nm9sZChzdHJ1Y3Qgdm04Nl9zdHJ1Y3QgX191c2VyICosIHN0cnVjdCBwdF9yZWdzICopOwogaW50IHN5c192bTg2KHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHN0cnVjdCBwdF9yZWdzICopOwpAQCAtNzMsMTEgKzYxLDggQEAKIGxvbmcgc3lzX2FyY2hfcHJjdGwoaW50LCB1bnNpZ25lZCBsb25nKTsKIAogLyoga2VybmVsL3N5c194ODZfNjQuYyAqLwotc3RydWN0IG5ld191dHNuYW1lOwotCiBhc21saW5rYWdlIGxvbmcgc3lzX21tYXAodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywKIAkJCSB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKLWFzbWxpbmthZ2UgbG9uZyBzeXNfdW5hbWUoc3RydWN0IG5ld191dHNuYW1lIF9fdXNlciAqKTsKIAogI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KICNlbmRpZiAvKiBfQVNNX1g4Nl9TWVNDQUxMU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXN0ZW0uaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oCmluZGV4IGUwNDc0MGYuLmI4ZmU0OGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3N5c3RlbS5oCkBAIC0zMiw3ICszMiw3IEBACiAJIm1vdmwgJVBbdGFza19jYW5hcnldKCVbbmV4dF0pLCAlJWVieFxuXHQiCQkJXAogCSJtb3ZsICUlZWJ4LCAiX19wZXJjcHVfYXJnKFtzdGFja19jYW5hcnldKSJcblx0IgogI2RlZmluZSBfX3N3aXRjaF9jYW5hcnlfb3BhcmFtCQkJCQkJXAotCSwgW3N0YWNrX2NhbmFyeV0gIj1tIiAocGVyX2NwdV92YXIoc3RhY2tfY2FuYXJ5LmNhbmFyeSkpCisJLCBbc3RhY2tfY2FuYXJ5XSAiPW0iIChzdGFja19jYW5hcnkuY2FuYXJ5KQogI2RlZmluZSBfX3N3aXRjaF9jYW5hcnlfaXBhcmFtCQkJCQkJXAogCSwgW3Rhc2tfY2FuYXJ5XSAiaSIgKG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgc3RhY2tfY2FuYXJ5KSkKICNlbHNlCS8qIENDX1NUQUNLUFJPVEVDVE9SICovCkBAIC0xMTQsNyArMTE0LDcgQEAKIAkibW92cSAlUFt0YXNrX2NhbmFyeV0oJSVyc2kpLCUlcjhcblx0IgkJCQkgIFwKIAkibW92cSAlJXI4LCJfX3BlcmNwdV9hcmcoW2dzX2NhbmFyeV0pIlxuXHQiCiAjZGVmaW5lIF9fc3dpdGNoX2NhbmFyeV9vcGFyYW0JCQkJCQkgIFwKLQksIFtnc19jYW5hcnldICI9bSIgKHBlcl9jcHVfdmFyKGlycV9zdGFja191bmlvbi5zdGFja19jYW5hcnkpKQorCSwgW2dzX2NhbmFyeV0gIj1tIiAoaXJxX3N0YWNrX3VuaW9uLnN0YWNrX2NhbmFyeSkKICNkZWZpbmUgX19zd2l0Y2hfY2FuYXJ5X2lwYXJhbQkJCQkJCSAgXAogCSwgW3Rhc2tfY2FuYXJ5XSAiaSIgKG9mZnNldG9mKHN0cnVjdCB0YXNrX3N0cnVjdCwgc3RhY2tfY2FuYXJ5KSkKICNlbHNlCS8qIENDX1NUQUNLUFJPVEVDVE9SICovCkBAIC0xMzMsNyArMTMzLDcgQEAKIAkgICAgIF9fc3dpdGNoX2NhbmFyeQkJCQkJCSAgXAogCSAgICAgIm1vdnEgJVBbdGhyZWFkX2luZm9dKCUlcnNpKSwlJXI4XG5cdCIJCQkgIFwKIAkgICAgICJtb3ZxICUlcmF4LCUlcmRpXG5cdCIgCQkJCQkgIFwKLQkgICAgICJ0ZXN0bCAgJVtfdGlmX2ZvcmtdLCVQW3RpX2ZsYWdzXSglJXI4KVxuXHQiCSAgXAorCSAgICAgInRlc3RsICAlW190aWZfZm9ya10sJVBbdGlfZmxhZ3NdKCUlcjgpXG5cdCIJCSAgXAogCSAgICAgImpueiAgIHJldF9mcm9tX2Zvcmtcblx0IgkJCQkJICBcCiAJICAgICBSRVNUT1JFX0NPTlRFWFQJCQkJCQkgIFwKIAkgICAgIDogIj1hIiAobGFzdCkJCQkJCSAgCSAgXApAQCAtMTQzLDcgKzE0Myw3IEBACiAJICAgICAgIFt0aV9mbGFnc10gImkiIChvZmZzZXRvZihzdHJ1Y3QgdGhyZWFkX2luZm8sIGZsYWdzKSksCSAgXAogCSAgICAgICBbX3RpZl9mb3JrXSAiaSIgKF9USUZfRk9SSyksCQkJICAJICBcCiAJICAgICAgIFt0aHJlYWRfaW5mb10gImkiIChvZmZzZXRvZihzdHJ1Y3QgdGFza19zdHJ1Y3QsIHN0YWNrKSksICAgXAotCSAgICAgICBbY3VycmVudF90YXNrXSAibSIgKHBlcl9jcHVfdmFyKGN1cnJlbnRfdGFzaykpCQkgIFwKKwkgICAgICAgW2N1cnJlbnRfdGFza10gIm0iIChjdXJyZW50X3Rhc2spCQkJICBcCiAJICAgICAgIF9fc3dpdGNoX2NhbmFyeV9pcGFyYW0JCQkJCSAgXAogCSAgICAgOiAibWVtb3J5IiwgImNjIiBfX0VYVFJBX0NMT0JCRVIpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF8zMi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmgKaW5kZXggM2JhZjM3OS4uYmViOWI1ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzMyLmgKQEAgLTM1NCw2ICszNTQsNyBAQAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TVEFUNjQKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX0FMQVJNCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19HRVRIT1NUTkFNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfSVBDCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19QQVVTRQogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0dFVE1BU0sKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR05BTApAQCAtMzY2LDYgKzM2Nyw5IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9VTkFNRQorI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEX01NQVAKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9TRUxFQ1QKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRFVNT1VOVAogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUEVORElORwogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfU0lHUFJPQ01BU0sKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3VuaXN0ZF82NC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzY0LmgKaW5kZXggNDg0M2Y3Yi4uZmY0MzA3YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzY0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdW5pc3RkXzY0LmgKQEAgLTE0Niw3ICsxNDYsNyBAQAogI2RlZmluZSBfX05SX2tpbGwJCQkJNjIKIF9fU1lTQ0FMTChfX05SX2tpbGwsIHN5c19raWxsKQogI2RlZmluZSBfX05SX3VuYW1lCQkJCTYzCi1fX1NZU0NBTEwoX19OUl91bmFtZSwgc3lzX3VuYW1lKQorX19TWVNDQUxMKF9fTlJfdW5hbWUsIHN5c19uZXd1bmFtZSkKIAogI2RlZmluZSBfX05SX3NlbWdldAkJCQk2NAogX19TWVNDQUxMKF9fTlJfc2VtZ2V0LCBzeXNfc2VtZ2V0KQpAQCAtNjgwLDYgKzY4MCw3IEBACiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19MTFNFRUsKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX05JQ0UKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9HRVRSTElNSVQKKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX09MRF9VTkFNRQogI2RlZmluZSBfX0FSQ0hfV0FOVF9TWVNfT0xEVU1PVU5UCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQRU5ESU5HCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19TSUdQUk9DTUFTSwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdmlzd3MvY29iYWx0LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92aXN3cy9jb2JhbHQuaAppbmRleCAxNjZhZGY2Li4yZWRiMzc2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92aXN3cy9jb2JhbHQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92aXN3cy9jb2JhbHQuaApAQCAtMTIyLDQgKzEyMiw2IEBACiAKIGV4dGVybiBjaGFyIHZpc3dzX2JvYXJkX3JldjsKIAorZXh0ZXJuIGludCBwY2lfdmlzd3NfaW5pdCh2b2lkKTsKKwogI2VuZGlmIC8qIF9BU01fWDg2X1ZJU1dTX0NPQkFMVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS92bXguaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oCmluZGV4IDJiNDk0NTQuLmZiOWEwODAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3ZteC5oCkBAIC01Myw2ICs1Myw3IEBACiAgKi8KICNkZWZpbmUgU0VDT05EQVJZX0VYRUNfVklSVFVBTElaRV9BUElDX0FDQ0VTU0VTIDB4MDAwMDAwMDEKICNkZWZpbmUgU0VDT05EQVJZX0VYRUNfRU5BQkxFX0VQVCAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU0VDT05EQVJZX0VYRUNfUkRUU0NQCQkJMHgwMDAwMDAwOAogI2RlZmluZSBTRUNPTkRBUllfRVhFQ19FTkFCTEVfVlBJRCAgICAgICAgICAgICAgMHgwMDAwMDAyMAogI2RlZmluZSBTRUNPTkRBUllfRVhFQ19XQklOVkRfRVhJVElORwkJMHgwMDAwMDA0MAogI2RlZmluZSBTRUNPTkRBUllfRVhFQ19VTlJFU1RSSUNURURfR1VFU1QJMHgwMDAwMDA4MApAQCAtMjUxLDYgKzI1Miw3IEBACiAjZGVmaW5lIEVYSVRfUkVBU09OX01TUl9SRUFEICAgICAgICAgICAgMzEKICNkZWZpbmUgRVhJVF9SRUFTT05fTVNSX1dSSVRFICAgICAgICAgICAzMgogI2RlZmluZSBFWElUX1JFQVNPTl9NV0FJVF9JTlNUUlVDVElPTiAgIDM2CisjZGVmaW5lIEVYSVRfUkVBU09OX01PTklUT1JfSU5TVFJVQ1RJT04gMzkKICNkZWZpbmUgRVhJVF9SRUFTT05fUEFVU0VfSU5TVFJVQ1RJT04gICA0MAogI2RlZmluZSBFWElUX1JFQVNPTl9NQ0VfRFVSSU5HX1ZNRU5UUlkJIDQxCiAjZGVmaW5lIEVYSVRfUkVBU09OX1RQUl9CRUxPV19USFJFU0hPTEQgNDMKQEAgLTM2Miw2ICszNjQsNyBAQAogI2RlZmluZSBWTVhfRVBUUF9VQ19CSVQJCQkJKDF1bGwgPDwgOCkKICNkZWZpbmUgVk1YX0VQVFBfV0JfQklUCQkJCSgxdWxsIDw8IDE0KQogI2RlZmluZSBWTVhfRVBUXzJNQl9QQUdFX0JJVAkJCSgxdWxsIDw8IDE2KQorI2RlZmluZSBWTVhfRVBUXzFHQl9QQUdFX0JJVAkJCSgxdWxsIDw8IDE3KQogI2RlZmluZSBWTVhfRVBUX0VYVEVOVF9JTkRJVklEVUFMX0JJVAkJKDF1bGwgPDwgMjQpCiAjZGVmaW5lIFZNWF9FUFRfRVhURU5UX0NPTlRFWFRfQklUCQkoMXVsbCA8PCAyNSkKICNkZWZpbmUgVk1YX0VQVF9FWFRFTlRfR0xPQkFMX0JJVAkJKDF1bGwgPDwgMjYpCkBAIC0zNzQsNyArMzc3LDcgQEAKICNkZWZpbmUgVk1YX0VQVF9SRUFEQUJMRV9NQVNLCQkJMHgxdWxsCiAjZGVmaW5lIFZNWF9FUFRfV1JJVEFCTEVfTUFTSwkJCTB4MnVsbAogI2RlZmluZSBWTVhfRVBUX0VYRUNVVEFCTEVfTUFTSwkJCTB4NHVsbAotI2RlZmluZSBWTVhfRVBUX0lHTVRfQklUICAgIAkJCSgxdWxsIDw8IDYpCisjZGVmaW5lIFZNWF9FUFRfSVBBVF9CSVQgICAgCQkJKDF1bGwgPDwgNikKIAogI2RlZmluZSBWTVhfRVBUX0lERU5USVRZX1BBR0VUQUJMRV9BRERSCQkweGZmZmJjMDAwdWwKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3g4Nl9pbml0LmgKaW5kZXggNjBjYzM1Mi4uNTE5YjU0MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20veDg2X2luaXQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ODZfaW5pdC5oCkBAIC05OSw2ICs5OSwyMCBAQAogfTsKIAogLyoqCisgKiBzdHJ1Y3QgeDg2X2luaXRfcGNpIC0gcGxhdGZvcm0gc3BlY2lmaWMgcGNpIGluaXQgZnVuY3Rpb25zCisgKiBAYXJjaF9pbml0OgkJCXBsYXRmb3JtIHNwZWNpZmljIHBjaSBhcmNoIGluaXQgY2FsbAorICogQGluaXQ6CQkJcGxhdGZvcm0gc3BlY2lmaWMgcGNpIHN1YnN5c3RlbSBpbml0CisgKiBAaW5pdF9pcnE6CQkJcGxhdGZvcm0gc3BlY2lmaWMgcGNpIGlycSBpbml0CisgKiBAZml4dXBfaXJxczoJCQlwbGF0Zm9ybSBzcGVjaWZpYyBwY2kgaXJxIGZpeHVwCisgKi8KK3N0cnVjdCB4ODZfaW5pdF9wY2kgeworCWludCAoKmFyY2hfaW5pdCkodm9pZCk7CisJaW50ICgqaW5pdCkodm9pZCk7CisJdm9pZCAoKmluaXRfaXJxKSh2b2lkKTsKKwl2b2lkICgqZml4dXBfaXJxcykodm9pZCk7Cit9OworCisvKioKICAqIHN0cnVjdCB4ODZfaW5pdF9vcHMgLSBmdW5jdGlvbnMgZm9yIHBsYXRmb3JtIHNwZWNpZmljIHNldHVwCiAgKgogICovCkBAIC0xMTAsNiArMTI0LDcgQEAKIAlzdHJ1Y3QgeDg2X2luaXRfcGFnaW5nCQlwYWdpbmc7CiAJc3RydWN0IHg4Nl9pbml0X3RpbWVycwkJdGltZXJzOwogCXN0cnVjdCB4ODZfaW5pdF9pb21tdQkJaW9tbXU7CisJc3RydWN0IHg4Nl9pbml0X3BjaQkJcGNpOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKaW5kZXggZDg3ZjA5Yi4uNGM1ODM1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQpAQCAtODcsNiArODcsNyBAQAogb2JqLSQoQ09ORklHX0VBUkxZX1BSSU5USykJKz0gZWFybHlfcHJpbnRrLm8KIAogb2JqLSQoQ09ORklHX0hQRVRfVElNRVIpIAkrPSBocGV0Lm8KK29iai0kKENPTkZJR19BUEJfVElNRVIpCQkrPSBhcGJfdGltZXIubwogCiBvYmotJChDT05GSUdfSzhfTkIpCQkrPSBrOC5vCiBvYmotJChDT05GSUdfREVCVUdfUk9EQVRBX1RFU1QpCSs9IHRlc3Rfcm9kYXRhLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9hY3BpL2Jvb3QuYwppbmRleCBmOTU3MDMwLi5hNTRkNzE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWNwaS9ib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FjcGkvYm9vdC5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKKyNpbmNsdWRlIDxhc20vcGNpX3g4Ni5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgpAQCAtNDQ3LDYgKzQ0OCwxMiBAQAogaW50IGFjcGlfZ3NpX3RvX2lycSh1MzIgZ3NpLCB1bnNpZ25lZCBpbnQgKmlycSkKIHsKIAkqaXJxID0gZ3NpOworCisjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisJaWYgKGFjcGlfaXJxX21vZGVsID09IEFDUElfSVJRX01PREVMX0lPQVBJQykKKwkJc2V0dXBfSU9fQVBJQ19pcnFfZXh0cmEoZ3NpKTsKKyNlbmRpZgorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ3NCw3ICs0ODEsOCBAQAogCQlwbGF0X2dzaSA9IG1wX3JlZ2lzdGVyX2dzaShkZXYsIGdzaSwgdHJpZ2dlciwgcG9sYXJpdHkpOwogCX0KICNlbmRpZgotCWFjcGlfZ3NpX3RvX2lycShwbGF0X2dzaSwgJmlycSk7CisJaXJxID0gcGxhdF9nc2k7CisKIAlyZXR1cm4gaXJxOwogfQogCkBAIC0xNjE3LDYgKzE2MjUsOSBAQAogCiAJYWNwaV90YWJsZV9wYXJzZShBQ1BJX1NJR19IUEVULCBhY3BpX3BhcnNlX2hwZXQpOwogCisJaWYgKCFhY3BpX25vaXJxKQorCQl4ODZfaW5pdC5wY2kuaW5pdCA9IHBjaV9hY3BpX2luaXQ7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwppbmRleCBlNmVhMDM0Li4zYTRiZjM1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYWx0ZXJuYXRpdmUuYwpAQCAtNyw2ICs3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9tZW1vcnkuaD4KKyNpbmNsdWRlIDxsaW51eC9zdG9wX21hY2hpbmUuaD4KICNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgpAQCAtNTcyLDMgKzU3Myw2MiBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAlyZXR1cm4gYWRkcjsKIH0KKworLyoKKyAqIENyb3NzLW1vZGlmeWluZyBrZXJuZWwgdGV4dCB3aXRoIHN0b3BfbWFjaGluZSgpLgorICogVGhpcyBjb2RlIG9yaWdpbmFsbHkgY29tZXMgZnJvbSBpbW1lZGlhdGUgdmFsdWUuCisgKi8KK3N0YXRpYyBhdG9taWNfdCBzdG9wX21hY2hpbmVfZmlyc3Q7CitzdGF0aWMgaW50IHdyb3RlX3RleHQ7CisKK3N0cnVjdCB0ZXh0X3Bva2VfcGFyYW1zIHsKKwl2b2lkICphZGRyOworCWNvbnN0IHZvaWQgKm9wY29kZTsKKwlzaXplX3QgbGVuOworfTsKKworc3RhdGljIGludCBfX2twcm9iZXMgc3RvcF9tYWNoaW5lX3RleHRfcG9rZSh2b2lkICpkYXRhKQoreworCXN0cnVjdCB0ZXh0X3Bva2VfcGFyYW1zICp0cHAgPSBkYXRhOworCisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnN0b3BfbWFjaGluZV9maXJzdCkpIHsKKwkJdGV4dF9wb2tlKHRwcC0+YWRkciwgdHBwLT5vcGNvZGUsIHRwcC0+bGVuKTsKKwkJc21wX3dtYigpOwkvKiBNYWtlIHN1cmUgb3RoZXIgY3B1cyBzZWUgdGhhdCB0aGlzIGhhcyBydW4gKi8KKwkJd3JvdGVfdGV4dCA9IDE7CisJfSBlbHNlIHsKKwkJd2hpbGUgKCF3cm90ZV90ZXh0KQorCQkJY3B1X3JlbGF4KCk7CisJCXNtcF9tYigpOwkvKiBMb2FkIHdyb3RlX3RleHQgYmVmb3JlIGZvbGxvd2luZyBleGVjdXRpb24gKi8KKwl9CisKKwlmbHVzaF9pY2FjaGVfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpdHBwLT5hZGRyLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpdHBwLT5hZGRyICsgdHBwLT5sZW4pOworCXJldHVybiAwOworfQorCisvKioKKyAqIHRleHRfcG9rZV9zbXAgLSBVcGRhdGUgaW5zdHJ1Y3Rpb25zIG9uIGEgbGl2ZSBrZXJuZWwgb24gU01QCisgKiBAYWRkcjogYWRkcmVzcyB0byBtb2RpZnkKKyAqIEBvcGNvZGU6IHNvdXJjZSBvZiB0aGUgY29weQorICogQGxlbjogbGVuZ3RoIHRvIGNvcHkKKyAqCisgKiBNb2RpZnkgbXVsdGktYnl0ZSBpbnN0cnVjdGlvbiBieSB1c2luZyBzdG9wX21hY2hpbmUoKSBvbiBTTVAuIFRoaXMgYWxsb3dzCisgKiB1c2VyIHRvIHBva2Uvc2V0IG11bHRpLWJ5dGUgdGV4dCBvbiBTTVAuIE9ubHkgbm9uLU5NSS9NQ0UgY29kZSBtb2RpZnlpbmcKKyAqIHNob3VsZCBiZSBhbGxvd2VkLCBzaW5jZSBzdG9wX21hY2hpbmUoKSBkb2VzIF9ub3RfIHByb3RlY3QgY29kZSBhZ2FpbnN0CisgKiBOTUkgYW5kIE1DRS4KKyAqCisgKiBOb3RlOiBNdXN0IGJlIGNhbGxlZCB1bmRlciBnZXRfb25saW5lX2NwdXMoKSBhbmQgdGV4dF9tdXRleC4KKyAqLwordm9pZCAqX19rcHJvYmVzIHRleHRfcG9rZV9zbXAodm9pZCAqYWRkciwgY29uc3Qgdm9pZCAqb3Bjb2RlLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCB0ZXh0X3Bva2VfcGFyYW1zIHRwcDsKKworCXRwcC5hZGRyID0gYWRkcjsKKwl0cHAub3Bjb2RlID0gb3Bjb2RlOworCXRwcC5sZW4gPSBsZW47CisJYXRvbWljX3NldCgmc3RvcF9tYWNoaW5lX2ZpcnN0LCAxKTsKKwl3cm90ZV90ZXh0ID0gMDsKKwlzdG9wX21hY2hpbmUoc3RvcF9tYWNoaW5lX3RleHRfcG9rZSwgKHZvaWQgKikmdHBwLCBOVUxMKTsKKwlyZXR1cm4gYWRkcjsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwYl90aW1lci5jIGIvYXJjaC94ODYva2VybmVsL2FwYl90aW1lci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNzA5OTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBiX3RpbWVyLmMKQEAgLTAsMCArMSw3ODQgQEAKKy8qCisgKiBhcGJfdGltZXIuYzogRHJpdmVyIGZvciBMYW5nd2VsbCBBUEIgdGltZXJzCisgKgorICogKEMpIENvcHlyaWdodCAyMDA5IEludGVsIENvcnBvcmF0aW9uCisgKiBBdXRob3I6IEphY29iIFBhbiAoamFjb2IuanVuLnBhbkBpbnRlbC5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIE5vdGU6CisgKiBMYW5nd2VsbCBpcyB0aGUgc291dGggY29tcGxleCBvZiBJbnRlbCBNb29yZXN0b3duIE1JRCBwbGF0Zm9ybS4gVGhlcmUgYXJlCisgKiBlaWdodCBleHRlcm5hbCB0aW1lcnMgaW4gdG90YWwgdGhhdCBjYW4gYmUgdXNlZCBieSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4KKyAqIFRoZSB0aW1lciBpbmZvcm1hdGlvbiwgc3VjaCBhcyBmcmVxdWVuY3kgYW5kIGFkZHJlc3NlcywgaXMgcHJvdmlkZWQgdG8gdGhlCisgKiBPUyB2aWEgU0ZJIHRhYmxlcy4KKyAqIFRpbWVyIGludGVycnVwdHMgYXJlIHJvdXRlZCB2aWEgRlcvSFcgZW11bGF0ZWQgSU9BUElDIGluZGVwZW5kZW50bHkgdmlhCisgKiBpbmRpdmlkdWFsIHJlZGlyZWN0aW9uIHRhYmxlIGVudHJpZXMgKFJURSkuCisgKiBVbmxpa2UgSFBFVCwgdGhlcmUgaXMgbm8gbWFzdGVyIGNvdW50ZXIsIHRoZXJlZm9yZSBvbmUgb2YgdGhlIHRpbWVycyBhcmUKKyAqIHVzZWQgYXMgY2xvY2tzb3VyY2UuIFRoZSBvdmVyYWxsIGFsbG9jYXRpb24gbG9va3MgbGlrZToKKyAqICAtIHRpbWVyIDAgLSBOUl9DUFVzIGZvciBwZXIgY3B1IHRpbWVyCisgKiAgLSBvbmUgdGltZXIgZm9yIGNsb2Nrc291cmNlCisgKiAgLSBvbmUgdGltZXIgZm9yIHdhdGNoZG9nIGRyaXZlci4KKyAqIEl0IGlzIGFsc28gd29ydGggbm90aWNlIHRoYXQgQVBCIHRpbWVyIGRvZXMgbm90IHN1cHBvcnQgdHJ1ZSBvbmUtc2hvdCBtb2RlLAorICogZnJlZS1ydW5uaW5nIG1vZGUgd2lsbCBiZSB1c2VkIGhlcmUgdG8gZW11bGF0ZSBvbmUtc2hvdCBtb2RlLgorICogQVBCIHRpbWVyIGNhbiBhbHNvIGJlIHVzZWQgYXMgYnJvYWRjYXN0IHRpbWVyIGFsb25nIHdpdGggcGVyIGNwdSBsb2NhbCBBUElDCisgKiB0aW1lciwgYnV0IGJ5IGRlZmF1bHQgQVBCIHRpbWVyIGhhcyBoaWdoZXIgcmF0aW5nIHRoYW4gbG9jYWwgQVBJQyB0aW1lcnMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsb2Nrc291cmNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tjaGlwcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zZmkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9maXhtYXAuaD4KKyNpbmNsdWRlIDxhc20vYXBiX3RpbWVyLmg+CisKKyNkZWZpbmUgQVBCVF9NQVNLCQkJQ0xPQ0tTT1VSQ0VfTUFTSygzMikKKyNkZWZpbmUgQVBCVF9TSElGVAkJCTIyCisjZGVmaW5lIEFQQlRfQ0xPQ0tFVkVOVF9SQVRJTkcJCTE1MAorI2RlZmluZSBBUEJUX0NMT0NLU09VUkNFX1JBVElORwkJMjUwCisjZGVmaW5lIEFQQlRfTUlOX0RFTFRBX1VTRUMJCTIwMAorCisjZGVmaW5lIEVWVF9UT19BUEJUX0RFVihldnQpIGNvbnRhaW5lcl9vZihldnQsIHN0cnVjdCBhcGJ0X2RldiwgZXZ0KQorI2RlZmluZSBBUEJUX0NMT0NLRVZFTlQwX05VTSAgICgwKQorI2RlZmluZSBBUEJUX0NMT0NLRVZFTlQxX05VTSAgICgxKQorI2RlZmluZSBBUEJUX0NMT0NLU09VUkNFX05VTSAgICgyKQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhcGJ0X2FkZHJlc3M7CitzdGF0aWMgaW50IGFwYl90aW1lcl9ibG9ja19lbmFibGVkOworc3RhdGljIHZvaWQgX19pb21lbSAqYXBidF92aXJ0X2FkZHJlc3M7CitzdGF0aWMgaW50IHBoeV9jc190aW1lcl9pZDsKKworLyoKKyAqIENvbW1vbiBEVyBBUEIgdGltZXIgaW5mbworICovCitzdGF0aWMgdWludDY0X3QgYXBidF9mcmVxOworCitzdGF0aWMgdm9pZCBhcGJ0X3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpOworc3RhdGljIGludCBhcGJ0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJCSAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCk7CitzdGF0aWMgY3ljbGVfdCBhcGJ0X3JlYWRfY2xvY2tzb3VyY2Uoc3RydWN0IGNsb2Nrc291cmNlICpjcyk7CitzdGF0aWMgdm9pZCBhcGJ0X3Jlc3RhcnRfY2xvY2tzb3VyY2Uoc3RydWN0IGNsb2Nrc291cmNlICpjcyk7CisKK3N0cnVjdCBhcGJ0X2RldiB7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBldnQ7CisJdW5zaWduZWQgaW50IG51bTsKKwlpbnQgY3B1OworCXVuc2lnbmVkIGludCBpcnE7CisJdW5zaWduZWQgaW50IHRpY2s7CisJdW5zaWduZWQgaW50IGNvdW50OworCXVuc2lnbmVkIGludCBmbGFnczsKKwljaGFyIG5hbWVbMTBdOworfTsKKworaW50IGRpc2FibGVfYXBidF9wZXJjcHUgX19jcHVpbml0ZGF0YTsKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBhcGJ0X2RldiwgY3B1X2FwYnRfZGV2KTsKKworI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXBidF9udW1fdGltZXJzX3VzZWQ7CitzdGF0aWMgc3RydWN0IGFwYnRfZGV2ICphcGJ0X2RldnM7CisjZW5kaWYKKworc3RhdGljCWlubGluZSB1bnNpZ25lZCBsb25nIGFwYnRfcmVhZGxfcmVnKHVuc2lnbmVkIGxvbmcgYSkKK3sKKwlyZXR1cm4gcmVhZGwoYXBidF92aXJ0X2FkZHJlc3MgKyBhKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFwYnRfd3JpdGVsX3JlZyh1bnNpZ25lZCBsb25nIGQsIHVuc2lnbmVkIGxvbmcgYSkKK3sKKwl3cml0ZWwoZCwgYXBidF92aXJ0X2FkZHJlc3MgKyBhKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGFwYnRfcmVhZGwoaW50IG4sIHVuc2lnbmVkIGxvbmcgYSkKK3sKKwlyZXR1cm4gcmVhZGwoYXBidF92aXJ0X2FkZHJlc3MgKyBhICsgbiAqIEFQQlRNUlNfUkVHX1NJWkUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBidF93cml0ZWwoaW50IG4sIHVuc2lnbmVkIGxvbmcgZCwgdW5zaWduZWQgbG9uZyBhKQoreworCXdyaXRlbChkLCBhcGJ0X3ZpcnRfYWRkcmVzcyArIGEgKyBuICogQVBCVE1SU19SRUdfU0laRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcGJ0X3NldF9tYXBwaW5nKHZvaWQpCit7CisJc3RydWN0IHNmaV90aW1lcl90YWJsZV9lbnRyeSAqbXRtcjsKKworCWlmIChhcGJ0X3ZpcnRfYWRkcmVzcykgeworCQlwcl9kZWJ1ZygiQVBCVCBiYXNlIGFscmVhZHkgbWFwcGVkXG4iKTsKKwkJcmV0dXJuOworCX0KKwltdG1yID0gc2ZpX2dldF9tdG1yKEFQQlRfQ0xPQ0tFVkVOVDBfTlVNKTsKKwlpZiAobXRtciA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGdldCBNVE1SICVkIGZyb20gU0ZJXG4iLAorCQkgICAgICAgQVBCVF9DTE9DS0VWRU5UMF9OVU0pOworCQlyZXR1cm47CisJfQorCWFwYnRfYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKW10bXItPnBoeXNfYWRkcjsKKwlpZiAoIWFwYnRfYWRkcmVzcykgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyB0aW1lciBiYXNlIGZyb20gU0ZJLCB1c2UgZGVmYXVsdFxuIik7CisJCWFwYnRfYWRkcmVzcyA9IEFQQlRfREVGQVVMVF9CQVNFOworCX0KKwlhcGJ0X3ZpcnRfYWRkcmVzcyA9IGlvcmVtYXBfbm9jYWNoZShhcGJ0X2FkZHJlc3MsIEFQQlRfTU1BUF9TSVpFKTsKKwlpZiAoYXBidF92aXJ0X2FkZHJlc3MpIHsKKwkJcHJfZGVidWcoIk1hcHBlZCBBUEJUIHBoeXNpY2FsIGFkZHIgJXAgYXQgdmlydHVhbCBhZGRyICVwXG4iLFwKKwkJCSAodm9pZCAqKWFwYnRfYWRkcmVzcywgKHZvaWQgKilhcGJ0X3ZpcnRfYWRkcmVzcyk7CisJfSBlbHNlIHsKKwkJcHJfZGVidWcoIkZhaWxlZCBtYXBwaW5nIEFQQlQgcGh5IGFkZHJlc3MgYXQgJXBcbiIsXAorCQkJICh2b2lkICopYXBidF9hZGRyZXNzKTsKKwkJZ290byBwYW5pY19ub2FwYnQ7CisJfQorCWFwYnRfZnJlcSA9IG10bXItPmZyZXFfaHogLyBVU0VDX1BFUl9TRUM7CisJc2ZpX2ZyZWVfbXRtcihtdG1yKTsKKworCS8qIE5vdyBmaWd1cmUgb3V0IHRoZSBwaHlzaWNhbCB0aW1lciBpZCBmb3IgY2xvY2tzb3VyY2UgZGV2aWNlICovCisJbXRtciA9IHNmaV9nZXRfbXRtcihBUEJUX0NMT0NLU09VUkNFX05VTSk7CisJaWYgKG10bXIgPT0gTlVMTCkKKwkJZ290byBwYW5pY19ub2FwYnQ7CisKKwkvKiBOb3cgZmlndXJlIG91dCB0aGUgcGh5c2ljYWwgdGltZXIgaWQgKi8KKwlwaHlfY3NfdGltZXJfaWQgPSAodW5zaWduZWQgaW50KShtdG1yLT5waHlzX2FkZHIgJiAweGZmKQorCQkvIEFQQlRNUlNfUkVHX1NJWkU7CisJcHJfZGVidWcoIlVzZSB0aW1lciAlZCBmb3IgY2xvY2tzb3VyY2VcbiIsIHBoeV9jc190aW1lcl9pZCk7CisJcmV0dXJuOworCitwYW5pY19ub2FwYnQ6CisJcGFuaWMoIkZhaWxlZCB0byBzZXR1cCBBUEIgc3lzdGVtIHRpbWVyXG4iKTsKKworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXBidF9jbGVhcl9tYXBwaW5nKHZvaWQpCit7CisJaW91bm1hcChhcGJ0X3ZpcnRfYWRkcmVzcyk7CisJYXBidF92aXJ0X2FkZHJlc3MgPSBOVUxMOworfQorCisvKgorICogQVBCVCB0aW1lciBpbnRlcnJ1cHQgZW5hYmxlIC8gZGlzYWJsZQorICovCitzdGF0aWMgaW5saW5lIGludCBpc19hcGJ0X2NhcGFibGUodm9pZCkKK3sKKwlyZXR1cm4gYXBidF92aXJ0X2FkZHJlc3MgPyAxIDogMDsKK30KKworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9hcGJ0ID0geworCS5uYW1lCQk9ICJhcGJ0IiwKKwkucmF0aW5nCQk9IEFQQlRfQ0xPQ0tTT1VSQ0VfUkFUSU5HLAorCS5yZWFkCQk9IGFwYnRfcmVhZF9jbG9ja3NvdXJjZSwKKwkubWFzawkJPSBBUEJUX01BU0ssCisJLnNoaWZ0CQk9IEFQQlRfU0hJRlQsCisJLmZsYWdzCQk9IENMT0NLX1NPVVJDRV9JU19DT05USU5VT1VTLAorCS5yZXN1bWUJCT0gYXBidF9yZXN0YXJ0X2Nsb2Nrc291cmNlLAorfTsKKworLyogYm9vdCBBUEIgY2xvY2sgZXZlbnQgZGV2aWNlICovCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBhcGJ0X2Nsb2NrZXZlbnQgPSB7CisJLm5hbWUJCT0gImFwYnQwIiwKKwkuZmVhdHVyZXMJPSBDTE9DS19FVlRfRkVBVF9QRVJJT0RJQyB8IENMT0NLX0VWVF9GRUFUX09ORVNIT1QsCisJLnNldF9tb2RlCT0gYXBidF9zZXRfbW9kZSwKKwkuc2V0X25leHRfZXZlbnQgPSBhcGJ0X25leHRfZXZlbnQsCisJLnNoaWZ0CQk9IEFQQlRfU0hJRlQsCisJLmlycQkJPSAwLAorCS5yYXRpbmcJCT0gQVBCVF9DTE9DS0VWRU5UX1JBVElORywKK307CisKKy8qCisgKiBpZiB1c2VyIGRvZXMgbm90IHdhbnQgdG8gdXNlIHBlciBDUFUgYXBiIHRpbWVyLCBqdXN0IGdpdmUgaXQgYSBsb3dlciByYXRpbmcKKyAqIHRoYW4gbG9jYWwgYXBpYyB0aW1lciBhbmQgc2tpcCB0aGUgbGF0ZSBwZXIgY3B1IHRpbWVyIGluaXQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBzZXR1cF94ODZfbXJzdF90aW1lcihjaGFyICphcmcpCit7CisJaWYgKCFhcmcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHN0cmNtcCgiYXBidF9vbmx5IiwgYXJnKSA9PSAwKQorCQlkaXNhYmxlX2FwYnRfcGVyY3B1ID0gMDsKKwllbHNlIGlmIChzdHJjbXAoImxhcGljX2FuZF9hcGJ0IiwgYXJnKSA9PSAwKQorCQlkaXNhYmxlX2FwYnRfcGVyY3B1ID0gMTsKKwllbHNlIHsKKwkJcHJfd2FybmluZygiWDg2IE1SU1QgdGltZXIgb3B0aW9uICVzIG5vdCByZWNvZ25pc2VkIgorCQkJICAgIiB1c2UgeDg2X21yc3RfdGltZXI9YXBidF9vbmx5IG9yIGxhcGljX2FuZF9hcGJ0XG4iLAorCQkJICAgYXJnKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorX19zZXR1cCgieDg2X21yc3RfdGltZXI9Iiwgc2V0dXBfeDg2X21yc3RfdGltZXIpOworCisvKgorICogc3RhcnQgY291bnQgZG93biBmcm9tIDB4ZmZmZl9mZmZmLiB0aGlzIGlzIGRvbmUgYnkgdG9nZ2xpbmcgdGhlIGVuYWJsZSBiaXQKKyAqIHRoZW4gbG9hZCBpbml0aWFsIGxvYWQgY291bnQgdG8gfjAuCisgKi8KK3N0YXRpYyB2b2lkIGFwYnRfc3RhcnRfY291bnRlcihpbnQgbikKK3sKKwl1bnNpZ25lZCBsb25nIGN0cmwgPSBhcGJ0X3JlYWRsKG4sIEFQQlRNUl9OX0NPTlRST0wpOworCisJY3RybCAmPSB+QVBCVE1SX0NPTlRST0xfRU5BQkxFOworCWFwYnRfd3JpdGVsKG4sIGN0cmwsIEFQQlRNUl9OX0NPTlRST0wpOworCWFwYnRfd3JpdGVsKG4sIH4wLCBBUEJUTVJfTl9MT0FEX0NPVU5UKTsKKwkvKiBlbmFibGUsIG1hc2sgaW50ZXJydXB0ICovCisJY3RybCAmPSB+QVBCVE1SX0NPTlRST0xfTU9ERV9QRVJJT0RJQzsKKwljdHJsIHw9IChBUEJUTVJfQ09OVFJPTF9FTkFCTEUgfCBBUEJUTVJfQ09OVFJPTF9JTlQpOworCWFwYnRfd3JpdGVsKG4sIGN0cmwsIEFQQlRNUl9OX0NPTlRST0wpOworCS8qIHJlYWQgaXQgb25jZSB0byBnZXQgY2FjaGVkIGNvdW50ZXIgdmFsdWUgaW5pdGlhbGl6ZWQgKi8KKwlhcGJ0X3JlYWRfY2xvY2tzb3VyY2UoJmNsb2Nrc291cmNlX2FwYnQpOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgYXBidF9pbnRlcnJ1cHRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBhcGJ0X2RldiAqZGV2ID0gKHN0cnVjdCBhcGJ0X2RldiAqKWRhdGE7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqYWV2dCA9ICZkZXYtPmV2dDsKKworCWlmICghYWV2dC0+ZXZlbnRfaGFuZGxlcikgeworCQlwcmludGsoS0VSTl9JTkZPICJTcHVyaW91cyBBUEJUIHRpbWVyIGludGVycnVwdCBvbiAlZFxuIiwKKwkJICAgICAgIGRldi0+bnVtKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKwlhZXZ0LT5ldmVudF9oYW5kbGVyKGFldnQpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgYXBidF9yZXN0YXJ0X2Nsb2Nrc291cmNlKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCit7CisJYXBidF9zdGFydF9jb3VudGVyKHBoeV9jc190aW1lcl9pZCk7Cit9CisKKy8qIFNldHVwIElSUSByb3V0aW5nIHZpYSBJT0FQSUMgKi8KKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgdm9pZCBhcGJ0X3NldHVwX2lycShzdHJ1Y3QgYXBidF9kZXYgKmFkZXYpCit7CisJc3RydWN0IGlycV9jaGlwICpjaGlwOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKworCS8qIHRpbWVyMCBpcnEgaGFzIGJlZW4gc2V0dXAgZWFybHkgKi8KKwlpZiAoYWRldi0+aXJxID09IDApCisJCXJldHVybjsKKwlkZXNjID0gaXJxX3RvX2Rlc2MoYWRldi0+aXJxKTsKKwljaGlwID0gZ2V0X2lycV9jaGlwKGFkZXYtPmlycSk7CisJZGlzYWJsZV9pcnEoYWRldi0+aXJxKTsKKwlkZXNjLT5zdGF0dXMgfD0gSVJRX01PVkVfUENOVFhUOworCWlycV9zZXRfYWZmaW5pdHkoYWRldi0+aXJxLCBjcHVtYXNrX29mKGFkZXYtPmNwdSkpOworCS8qIEFQQiB0aW1lciBpcnFzIGFyZSBzZXQgdXAgYXMgbXBfaXJxcywgdGltZXIgaXMgZWRnZSB0cmlnZ2VycmVkICovCisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoYWRldi0+aXJxLCBjaGlwLCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7CisJZW5hYmxlX2lycShhZGV2LT5pcnEpOworCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX0JPT1RJTkcpCisJCWlmIChyZXF1ZXN0X2lycShhZGV2LT5pcnEsIGFwYnRfaW50ZXJydXB0X2hhbmRsZXIsCisJCQkJSVJRRl9USU1FUiB8IElSUUZfRElTQUJMRUQgfCBJUlFGX05PQkFMQU5DSU5HLAorCQkJCWFkZXYtPm5hbWUsIGFkZXYpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCByZXF1ZXN0IElSUSBmb3IgQVBCVCVkXG4iLAorCQkJICAgICAgIGFkZXYtPm51bSk7CisJCX0KK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBhcGJ0X2VuYWJsZV9pbnQoaW50IG4pCit7CisJdW5zaWduZWQgbG9uZyBjdHJsID0gYXBidF9yZWFkbChuLCBBUEJUTVJfTl9DT05UUk9MKTsKKwkvKiBjbGVhciBwZW5kaW5nIGludHIgKi8KKwlhcGJ0X3JlYWRsKG4sIEFQQlRNUl9OX0VPSSk7CisJY3RybCAmPSB+QVBCVE1SX0NPTlRST0xfSU5UOworCWFwYnRfd3JpdGVsKG4sIGN0cmwsIEFQQlRNUl9OX0NPTlRST0wpOworfQorCitzdGF0aWMgdm9pZCBhcGJ0X2Rpc2FibGVfaW50KGludCBuKQoreworCXVuc2lnbmVkIGxvbmcgY3RybCA9IGFwYnRfcmVhZGwobiwgQVBCVE1SX05fQ09OVFJPTCk7CisKKwljdHJsIHw9IEFQQlRNUl9DT05UUk9MX0lOVDsKKwlhcGJ0X3dyaXRlbChuLCBjdHJsLCBBUEJUTVJfTl9DT05UUk9MKTsKK30KKworCitzdGF0aWMgaW50IF9faW5pdCBhcGJ0X2Nsb2NrZXZlbnRfcmVnaXN0ZXIodm9pZCkKK3sKKwlzdHJ1Y3Qgc2ZpX3RpbWVyX3RhYmxlX2VudHJ5ICptdG1yOworCXN0cnVjdCBhcGJ0X2RldiAqYWRldiA9ICZfX2dldF9jcHVfdmFyKGNwdV9hcGJ0X2Rldik7CisKKwltdG1yID0gc2ZpX2dldF9tdG1yKEFQQlRfQ0xPQ0tFVkVOVDBfTlVNKTsKKwlpZiAobXRtciA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGdldCBNVE1SICVkIGZyb20gU0ZJXG4iLAorCQkgICAgICAgQVBCVF9DTE9DS0VWRU5UMF9OVU0pOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBzY2FsZWQgbWF0aCBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgZm9yCisJICogbmFub3NlY29uZCB0byBhcGJ0IHRpY2sgY29udmVyc2lvbi4KKwkgKiBtdWx0ID0gKG5zZWMvY3ljbGUpKjJeQVBCVF9TSElGVAorCSAqLworCWFwYnRfY2xvY2tldmVudC5tdWx0ID0gZGl2X3NjKCh1bnNpZ25lZCBsb25nKSBtdG1yLT5mcmVxX2h6CisJCQkJICAgICAgLCBOU0VDX1BFUl9TRUMsIEFQQlRfU0hJRlQpOworCisJLyogQ2FsY3VsYXRlIHRoZSBtaW4gLyBtYXggZGVsdGEgKi8KKwlhcGJ0X2Nsb2NrZXZlbnQubWF4X2RlbHRhX25zID0gY2xvY2tldmVudF9kZWx0YTJucygweDdGRkZGRkZGLAorCQkJCQkJCSAgICZhcGJ0X2Nsb2NrZXZlbnQpOworCWFwYnRfY2xvY2tldmVudC5taW5fZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKAorCQlBUEJUX01JTl9ERUxUQV9VU0VDKmFwYnRfZnJlcSwKKwkJJmFwYnRfY2xvY2tldmVudCk7CisJLyoKKwkgKiBTdGFydCBhcGJ0IHdpdGggdGhlIGJvb3QgY3B1IG1hc2sgYW5kIG1ha2UgaXQKKwkgKiBnbG9iYWwgaWYgbm90IHVzZWQgZm9yIHBlciBjcHUgdGltZXIuCisJICovCisJYXBidF9jbG9ja2V2ZW50LmNwdW1hc2sgPSBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJYWRldi0+bnVtID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCW1lbWNweSgmYWRldi0+ZXZ0LCAmYXBidF9jbG9ja2V2ZW50LCBzaXplb2Yoc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSkpOworCisJaWYgKGRpc2FibGVfYXBidF9wZXJjcHUpIHsKKwkJYXBidF9jbG9ja2V2ZW50LnJhdGluZyA9IEFQQlRfQ0xPQ0tFVkVOVF9SQVRJTkcgLSAxMDA7CisJCWdsb2JhbF9jbG9ja19ldmVudCA9ICZhZGV2LT5ldnQ7CisJCXByaW50ayhLRVJOX0RFQlVHICIlcyBjbG9ja2V2ZW50IHJlZ2lzdGVyZWQgYXMgZ2xvYmFsXG4iLAorCQkgICAgICAgZ2xvYmFsX2Nsb2NrX2V2ZW50LT5uYW1lKTsKKwl9CisKKwlpZiAocmVxdWVzdF9pcnEoYXBidF9jbG9ja2V2ZW50LmlycSwgYXBidF9pbnRlcnJ1cHRfaGFuZGxlciwKKwkJCUlSUUZfVElNRVIgfCBJUlFGX0RJU0FCTEVEIHwgSVJRRl9OT0JBTEFOQ0lORywKKwkJCWFwYnRfY2xvY2tldmVudC5uYW1lLCBhZGV2KSkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCByZXF1ZXN0IElSUSBmb3IgQVBCVCVkXG4iLAorCQkgICAgICAgYXBidF9jbG9ja2V2ZW50LmlycSk7CisJfQorCisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZhZGV2LT5ldnQpOworCS8qIFN0YXJ0IEFQQlQgMCBpbnRlcnJ1cHRzICovCisJYXBidF9lbmFibGVfaW50KEFQQlRfQ0xPQ0tFVkVOVDBfTlVNKTsKKworCXNmaV9mcmVlX210bXIobXRtcik7CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfU01QCisvKiBTaG91bGQgYmUgY2FsbGVkIHdpdGggcGVyIGNwdSAqLwordm9pZCBhcGJ0X3NldHVwX3NlY29uZGFyeV9jbG9jayh2b2lkKQoreworCXN0cnVjdCBhcGJ0X2RldiAqYWRldjsKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICphZXZ0OworCWludCBjcHU7CisKKwkvKiBEb24ndCByZWdpc3RlciBib290IENQVSBjbG9ja2V2ZW50ICovCisJY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCWlmIChjcHUgPT0gYm9vdF9jcHVfaWQpCisJCXJldHVybjsKKwkvKgorCSAqIFdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBzY2FsZWQgbWF0aCBtdWx0aXBsaWNhdGlvbiBmYWN0b3IgZm9yCisJICogbmFub3NlY29uZCB0byBhcGJ0IHRpY2sgY29udmVyc2lvbi4KKwkgKiBtdWx0ID0gKG5zZWMvY3ljbGUpKjJeQVBCVF9TSElGVAorCSAqLworCXByaW50ayhLRVJOX0lORk8gIkluaXQgcGVyIENQVSBjbG9ja2V2ZW50ICVkXG4iLCBjcHUpOworCWFkZXYgPSAmcGVyX2NwdShjcHVfYXBidF9kZXYsIGNwdSk7CisJYWV2dCA9ICZhZGV2LT5ldnQ7CisKKwltZW1jcHkoYWV2dCwgJmFwYnRfY2xvY2tldmVudCwgc2l6ZW9mKCphZXZ0KSk7CisJYWV2dC0+Y3B1bWFzayA9IGNwdW1hc2tfb2YoY3B1KTsKKwlhZXZ0LT5uYW1lID0gYWRldi0+bmFtZTsKKwlhZXZ0LT5tb2RlID0gQ0xPQ0tfRVZUX01PREVfVU5VU0VEOworCisJcHJpbnRrKEtFUk5fSU5GTyAiUmVnaXN0ZXJpbmcgQ1BVICVkIGNsb2NrZXZlbnQgZGV2aWNlICVzLCBtYXNrICUwOHhcbiIsCisJICAgICAgIGNwdSwgYWV2dC0+bmFtZSwgKih1MzIgKilhZXZ0LT5jcHVtYXNrKTsKKworCWFwYnRfc2V0dXBfaXJxKGFkZXYpOworCisJY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKGFldnQpOworCisJYXBidF9lbmFibGVfaW50KGNwdSk7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiB0aGlzIG5vdGlmeSBoYW5kbGVyIHByb2Nlc3MgQ1BVIGhvdHBsdWcgZXZlbnRzLiBpbiBjYXNlIG9mIFMwaTMsIG5vbmJvb3QKKyAqIGNwdXMgYXJlIGRpc2FibGVkL2VuYWJsZWQgZnJlcXVlbnRseSwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIHdlIGtlZXAgdGhlCisgKiBwZXIgY3B1IHRpbWVyIGlycSByZWdpc3RlcmVkIHNvIHRoYXQgd2UgZG8gbmVlZCB0byBkbyBmcmVlX2lycS9yZXF1ZXN0X2lycS4KKyAqCisgKiBUT0RPOiBpdCBtaWdodCBiZSBtb3JlIHJlbGlhYmxlIHRvIGRpcmVjdGx5IGRpc2FibGUgcGVyY3B1IGNsb2NrZXZlbnQgZGV2aWNlCisgKiB3aXRob3V0IHRoZSBub3RpZmllciBjaGFpbi4gY3VycmVudGx5LCBjcHUgMCBtYXkgZ2V0IGludGVycnVwdHMgZnJvbSBvdGhlcgorICogY3B1IHRpbWVycyBkdXJpbmcgdGhlIG9mZmxpbmUgcHJvY2VzcyBkdWUgdG8gdGhlIG9yZGVyaW5nIG9mIG5vdGlmaWNhdGlvbi4KKyAqIHRoZSBleHRyYSBpbnRlcnJ1cHQgaXMgaGFybWxlc3MuCisgKi8KK3N0YXRpYyBpbnQgYXBidF9jcHVocF9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKK3sKKwl1bnNpZ25lZCBsb25nIGNwdSA9ICh1bnNpZ25lZCBsb25nKWhjcHU7CisJc3RydWN0IGFwYnRfZGV2ICphZGV2ID0gJnBlcl9jcHUoY3B1X2FwYnRfZGV2LCBjcHUpOworCisJc3dpdGNoIChhY3Rpb24gJiAweGYpIHsKKwljYXNlIENQVV9ERUFEOgorCQlhcGJ0X2Rpc2FibGVfaW50KGNwdSk7CisJCWlmIChzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1JVTk5JTkcpCisJCQlwcl9kZWJ1Zygic2tpcHBpbmcgQVBCVCBDUFUgJWx1IG9mZmxpbmVcbiIsIGNwdSk7CisJCWVsc2UgaWYgKGFkZXYpIHsKKwkJCXByX2RlYnVnKCJBUEJUIGNsb2NrZXZlbnQgZm9yIGNwdSAlbHUgb2ZmbGluZVxuIiwgY3B1KTsKKwkJCWZyZWVfaXJxKGFkZXYtPmlycSwgYWRldik7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJfZGVidWcoS0VSTl9JTkZPICJBUEJUIG5vdGlmaWVkICVsdSwgbm8gYWN0aW9uXG4iLCBhY3Rpb24pOworCX0KKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgX19pbml0IGludCBhcGJ0X2xhdGVfaW5pdCh2b2lkKQoreworCWlmIChkaXNhYmxlX2FwYnRfcGVyY3B1KQorCQlyZXR1cm4gMDsKKwkvKiBUaGlzIG5vdGlmaWVyIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgd29ya3F1ZXVlIGlzIHJlYWR5ICovCisJaG90Y3B1X25vdGlmaWVyKGFwYnRfY3B1aHBfbm90aWZ5LCAtMjApOworCXJldHVybiAwOworfQorZnNfaW5pdGNhbGwoYXBidF9sYXRlX2luaXQpOworI2Vsc2UKKwordm9pZCBhcGJ0X3NldHVwX3NlY29uZGFyeV9jbG9jayh2b2lkKSB7fQorCisjZW5kaWYgLyogQ09ORklHX1NNUCAqLworCitzdGF0aWMgdm9pZCBhcGJ0X3NldF9tb2RlKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpldnQpCit7CisJdW5zaWduZWQgbG9uZyBjdHJsOworCXVpbnQ2NF90IGRlbHRhOworCWludCB0aW1lcl9udW07CisJc3RydWN0IGFwYnRfZGV2ICphZGV2ID0gRVZUX1RPX0FQQlRfREVWKGV2dCk7CisKKwl0aW1lcl9udW0gPSBhZGV2LT5udW07CisJcHJfZGVidWcoIiVzIENQVSAlZCB0aW1lciAlZCBtb2RlPSVkXG4iLAorCQkgX19mdW5jX18sIGZpcnN0X2NwdSgqZXZ0LT5jcHVtYXNrKSwgdGltZXJfbnVtLCBtb2RlKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJCWRlbHRhID0gKCh1aW50NjRfdCkoTlNFQ19QRVJfU0VDL0haKSkgKiBhcGJ0X2Nsb2NrZXZlbnQubXVsdDsKKwkJZGVsdGEgPj49IGFwYnRfY2xvY2tldmVudC5zaGlmdDsKKwkJY3RybCA9IGFwYnRfcmVhZGwodGltZXJfbnVtLCBBUEJUTVJfTl9DT05UUk9MKTsKKwkJY3RybCB8PSBBUEJUTVJfQ09OVFJPTF9NT0RFX1BFUklPRElDOworCQlhcGJ0X3dyaXRlbCh0aW1lcl9udW0sIGN0cmwsIEFQQlRNUl9OX0NPTlRST0wpOworCQkvKgorCQkgKiBEVyBBUEIgcC4gNDYsIGhhdmUgdG8gZGlzYWJsZSB0aW1lciBiZWZvcmUgbG9hZCBjb3VudGVyLAorCQkgKiBtYXkgY2F1c2Ugc3luYyBwcm9ibGVtLgorCQkgKi8KKwkJY3RybCAmPSB+QVBCVE1SX0NPTlRST0xfRU5BQkxFOworCQlhcGJ0X3dyaXRlbCh0aW1lcl9udW0sIGN0cmwsIEFQQlRNUl9OX0NPTlRST0wpOworCQl1ZGVsYXkoMSk7CisJCXByX2RlYnVnKCJTZXR0aW5nIGNsb2NrIHBlcmlvZCAlZCBmb3IgSFogJWRcbiIsIChpbnQpZGVsdGEsIEhaKTsKKwkJYXBidF93cml0ZWwodGltZXJfbnVtLCBkZWx0YSwgQVBCVE1SX05fTE9BRF9DT1VOVCk7CisJCWN0cmwgfD0gQVBCVE1SX0NPTlRST0xfRU5BQkxFOworCQlhcGJ0X3dyaXRlbCh0aW1lcl9udW0sIGN0cmwsIEFQQlRNUl9OX0NPTlRST0wpOworCQlicmVhazsKKwkJLyogQVBCIHRpbWVyIGRvZXMgbm90IGhhdmUgb25lLXNob3QgbW9kZSwgdXNlIGZyZWUgcnVubmluZyBtb2RlICovCisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCQljdHJsID0gYXBidF9yZWFkbCh0aW1lcl9udW0sIEFQQlRNUl9OX0NPTlRST0wpOworCQkvKgorCQkgKiBzZXQgZnJlZSBydW5uaW5nIG1vZGUsIHRoaXMgbW9kZSB3aWxsIGxldCB0aW1lciByZWxvYWQgbWF4CisJCSAqIHRpbWVvdXQgd2hpY2ggd2lsbCBnaXZlIHRpbWUgKDNtaW4gb24gMjVNSHogY2xvY2spIHRvIHJlYXJtCisJCSAqIHRoZSBuZXh0IGV2ZW50LCB0aGVyZWZvcmUgZW11bGF0ZSB0aGUgb25lLXNob3QgbW9kZS4KKwkJICovCisJCWN0cmwgJj0gfkFQQlRNUl9DT05UUk9MX0VOQUJMRTsKKwkJY3RybCAmPSB+QVBCVE1SX0NPTlRST0xfTU9ERV9QRVJJT0RJQzsKKworCQlhcGJ0X3dyaXRlbCh0aW1lcl9udW0sIGN0cmwsIEFQQlRNUl9OX0NPTlRST0wpOworCQkvKiB3cml0ZSBhZ2FpbiB0byBzZXQgZnJlZSBydW5uaW5nIG1vZGUgKi8KKwkJYXBidF93cml0ZWwodGltZXJfbnVtLCBjdHJsLCBBUEJUTVJfTl9DT05UUk9MKTsKKworCQkvKgorCQkgKiBEVyBBUEIgcC4gNDYsIGxvYWQgY291bnRlciB3aXRoIGFsbCAxcyBiZWZvcmUgc3RhcnRpbmcgZnJlZQorCQkgKiBydW5uaW5nIG1vZGUuCisJCSAqLworCQlhcGJ0X3dyaXRlbCh0aW1lcl9udW0sIH4wLCBBUEJUTVJfTl9MT0FEX0NPVU5UKTsKKwkJY3RybCAmPSB+QVBCVE1SX0NPTlRST0xfSU5UOworCQljdHJsIHw9IEFQQlRNUl9DT05UUk9MX0VOQUJMRTsKKwkJYXBidF93cml0ZWwodGltZXJfbnVtLCBjdHJsLCBBUEJUTVJfTl9DT05UUk9MKTsKKwkJYnJlYWs7CisKKwljYXNlIENMT0NLX0VWVF9NT0RFX1VOVVNFRDoKKwljYXNlIENMT0NLX0VWVF9NT0RFX1NIVVRET1dOOgorCQlhcGJ0X2Rpc2FibGVfaW50KHRpbWVyX251bSk7CisJCWN0cmwgPSBhcGJ0X3JlYWRsKHRpbWVyX251bSwgQVBCVE1SX05fQ09OVFJPTCk7CisJCWN0cmwgJj0gfkFQQlRNUl9DT05UUk9MX0VOQUJMRTsKKwkJYXBidF93cml0ZWwodGltZXJfbnVtLCBjdHJsLCBBUEJUTVJfTl9DT05UUk9MKTsKKwkJYnJlYWs7CisKKwljYXNlIENMT0NLX0VWVF9NT0RFX1JFU1VNRToKKwkJYXBidF9lbmFibGVfaW50KHRpbWVyX251bSk7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBhcGJ0X25leHRfZXZlbnQodW5zaWduZWQgbG9uZyBkZWx0YSwKKwkJCSAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwl1bnNpZ25lZCBsb25nIGN0cmw7CisJaW50IHRpbWVyX251bTsKKworCXN0cnVjdCBhcGJ0X2RldiAqYWRldiA9IEVWVF9UT19BUEJUX0RFVihldnQpOworCisJdGltZXJfbnVtID0gYWRldi0+bnVtOworCS8qIERpc2FibGUgdGltZXIgKi8KKwljdHJsID0gYXBidF9yZWFkbCh0aW1lcl9udW0sIEFQQlRNUl9OX0NPTlRST0wpOworCWN0cmwgJj0gfkFQQlRNUl9DT05UUk9MX0VOQUJMRTsKKwlhcGJ0X3dyaXRlbCh0aW1lcl9udW0sIGN0cmwsIEFQQlRNUl9OX0NPTlRST0wpOworCS8qIHdyaXRlIG5ldyBjb3VudCAqLworCWFwYnRfd3JpdGVsKHRpbWVyX251bSwgZGVsdGEsIEFQQlRNUl9OX0xPQURfQ09VTlQpOworCWN0cmwgfD0gQVBCVE1SX0NPTlRST0xfRU5BQkxFOworCWFwYnRfd3JpdGVsKHRpbWVyX251bSwgY3RybCwgQVBCVE1SX05fQ09OVFJPTCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBUEIgdGltZXIgY2xvY2sgaXMgbm90IGluIHN5bmMgd2l0aCBwY2xrIG9uIExhbmd3ZWxsLCB3aGljaCB0cmFuc2xhdGVzIHRvCisgKiB1bnJlbGlhYmxlIHJlYWQgdmFsdWUgY2F1c2VkIGJ5IHNhbXBsaW5nIGVycm9yLiB0aGUgZXJyb3IgZG9lcyBub3QgYWRkIHVwCisgKiBvdmVydGltZSBhbmQgb25seSBoYXBwZW5zIHdoZW4gc2FtcGxpbmcgYSAwIGFzIGEgMSBieSBtaXN0YWtlLiBzbyB0aGUgdGltZQorICogd291bGQgZ28gYmFja3dhcmRzLiB0aGUgZm9sbG93aW5nIGNvZGUgaXMgdHJ5aW5nIHRvIHByZXZlbnQgdGltZSB0cmF2ZWxpbmcKKyAqIGJhY2t3YXJkcy4gbGl0dGxlIGJpdCBwYXJhbm9pZC4KKyAqLworc3RhdGljIGN5Y2xlX3QgYXBidF9yZWFkX2Nsb2Nrc291cmNlKHN0cnVjdCBjbG9ja3NvdXJjZSAqY3MpCit7CisJdW5zaWduZWQgbG9uZyB0MCwgdDEsIHQyOworCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfcmVhZDsKKworYmFkX2NvdW50OgorCXQxID0gYXBidF9yZWFkbChwaHlfY3NfdGltZXJfaWQsCisJCQlBUEJUTVJfTl9DVVJSRU5UX1ZBTFVFKTsKKwl0MiA9IGFwYnRfcmVhZGwocGh5X2NzX3RpbWVyX2lkLAorCQkJQVBCVE1SX05fQ1VSUkVOVF9WQUxVRSk7CisJaWYgKHVubGlrZWx5KHQxIDwgdDIpKSB7CisJCXByX2RlYnVnKCJBUEJUOiByZWFkIGN1cnJlbnQgY291bnQgZXJyb3IgJWx4OiVseDolbHhcbiIsCisJCQkgdDEsIHQyLCB0MiAtIHQxKTsKKwkJZ290byBiYWRfY291bnQ7CisJfQorCS8qCisJICogY2hlY2sgYWdhaW5zdCBjYWNoZWQgbGFzdCByZWFkLCBtYWtlcyBzdXJlIHRpbWUgZG9lcyBub3QgZ28gYmFjay4KKwkgKiBpdCBjb3VsZCBiZSBhIG5vcm1hbCByb2xsb3ZlciBidXQgd2Ugd2lsbCBkbyB0cmlwcGxlIGNoZWNrIGFueXdheQorCSAqLworCWlmICh1bmxpa2VseSh0MiA+IGxhc3RfcmVhZCkpIHsKKwkJLyogY2hlY2sgaWYgd2UgaGF2ZSBhIG5vcm1hbCByb2xsb3ZlciAqLworCQl1bnNpZ25lZCBsb25nIHJhd19pbnRyX3N0YXR1cyA9CisJCQlhcGJ0X3JlYWRsX3JlZyhBUEJUTVJTX1JBV19JTlRfU1RBVFVTKTsKKwkJLyoKKwkJICogY3MgdGltZXIgaW50ZXJydXB0IGlzIG1hc2tlZCBidXQgcmF3IGludHIgYml0IGlzIHNldCBpZgorCQkgKiByb2xsb3ZlciBvY2N1cnMuIHRoZW4gd2UgcmVhZCBFT0kgcmVnIHRvIGNsZWFyIGl0LgorCQkgKi8KKwkJaWYgKHJhd19pbnRyX3N0YXR1cyAmICgxIDw8IHBoeV9jc190aW1lcl9pZCkpIHsKKwkJCWFwYnRfcmVhZGwocGh5X2NzX3RpbWVyX2lkLCBBUEJUTVJfTl9FT0kpOworCQkJZ290byBvdXQ7CisJCX0KKwkJcHJfZGVidWcoIkFQQiBDUyBnb2luZyBiYWNrICVseDolbHg6JWx4ICIsCisJCQkgdDIsIGxhc3RfcmVhZCwgdDIgLSBsYXN0X3JlYWQpOworYmFkX2NvdW50X3gzOgorCQlwcl9kZWJ1ZyhLRVJOX0lORk8gInRyaXBwbGUgY2hlY2sgZW5mb3JjZWRcbiIpOworCQl0MCA9IGFwYnRfcmVhZGwocGh5X2NzX3RpbWVyX2lkLAorCQkJCUFQQlRNUl9OX0NVUlJFTlRfVkFMVUUpOworCQl1ZGVsYXkoMSk7CisJCXQxID0gYXBidF9yZWFkbChwaHlfY3NfdGltZXJfaWQsCisJCQkJQVBCVE1SX05fQ1VSUkVOVF9WQUxVRSk7CisJCXVkZWxheSgxKTsKKwkJdDIgPSBhcGJ0X3JlYWRsKHBoeV9jc190aW1lcl9pZCwKKwkJCQlBUEJUTVJfTl9DVVJSRU5UX1ZBTFVFKTsKKwkJaWYgKCh0MiA+IHQxKSB8fCAodDEgPiB0MCkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiRXJyb3I6IEFQQiBDUyB0cmlwcGxlIGNoZWNrIGZhaWxlZFxuIik7CisJCQlnb3RvIGJhZF9jb3VudF94MzsKKwkJfQorCX0KK291dDoKKwlsYXN0X3JlYWQgPSB0MjsKKwlyZXR1cm4gKGN5Y2xlX3QpfnQyOworfQorCitzdGF0aWMgaW50IGFwYnRfY2xvY2tzb3VyY2VfcmVnaXN0ZXIodm9pZCkKK3sKKwl1NjQgc3RhcnQsIG5vdzsKKwljeWNsZV90IHQxOworCisJLyogU3RhcnQgdGhlIGNvdW50ZXIsIHVzZSB0aW1lciAyIGFzIHNvdXJjZSwgdGltZXIgMC8xIGZvciBldmVudCAqLworCWFwYnRfc3RhcnRfY291bnRlcihwaHlfY3NfdGltZXJfaWQpOworCisJLyogVmVyaWZ5IHdoZXRoZXIgYXBidCBjb3VudGVyIHdvcmtzICovCisJdDEgPSBhcGJ0X3JlYWRfY2xvY2tzb3VyY2UoJmNsb2Nrc291cmNlX2FwYnQpOworCXJkdHNjbGwoc3RhcnQpOworCisJLyoKKwkgKiBXZSBkb24ndCBrbm93IHRoZSBUU0MgZnJlcXVlbmN5IHlldCwgYnV0IHdhaXRpbmcgZm9yCisJICogMjAwMDAwIFRTQyBjeWNsZXMgaXMgc2FmZToKKwkgKiA0IEdIeiA9PSA1MHVzCisJICogMSBHSHogPT0gMjAwdXMKKwkgKi8KKwlkbyB7CisJCXJlcF9ub3AoKTsKKwkJcmR0c2NsbChub3cpOworCX0gd2hpbGUgKChub3cgLSBzdGFydCkgPCAyMDAwMDBVTCk7CisKKwkvKiBBUEJUIGlzIHRoZSBvbmx5IGFsd2F5cyBvbiBjbG9ja3NvdXJjZSwgaXQgaGFzIHRvIHdvcmshICovCisJaWYgKHQxID09IGFwYnRfcmVhZF9jbG9ja3NvdXJjZSgmY2xvY2tzb3VyY2VfYXBidCkpCisJCXBhbmljKCJBUEJUIGNvdW50ZXIgbm90IGNvdW50aW5nLiBBUEJUIGRpc2FibGVkXG4iKTsKKworCS8qCisJICogaW5pdGlhbGl6ZSBhbmQgcmVnaXN0ZXIgQVBCVCBjbG9ja3NvdXJjZQorCSAqIGNvbnZlcnQgdGhhdCB0byBucy9jbG9jayBjeWNsZQorCSAqIG11bHQgPSAobnMvYykgKiAyXkFQQlRfU0hJRlQKKwkgKi8KKwljbG9ja3NvdXJjZV9hcGJ0Lm11bHQgPSBkaXZfc2MoTVNFQ19QRVJfU0VDLAorCQkJCSAgICAgICAodW5zaWduZWQgbG9uZykgYXBidF9mcmVxLCBBUEJUX1NISUZUKTsKKwljbG9ja3NvdXJjZV9yZWdpc3RlcigmY2xvY2tzb3VyY2VfYXBidCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEVhcmx5IHNldHVwIHRoZSBBUEJUIHRpbWVyLCBvbmx5IHVzZSB0aW1lciAwIGZvciBib290aW5nIHRoZW4gc3dpdGNoIHRvCisgKiBwZXIgQ1BVIHRpbWVyIGlmIHBvc3NpYmxlLgorICogcmV0dXJucyAxIGlmIHBlciBjcHUgYXBidCBpcyBzZXR1cAorICogcmV0dXJucyAwIGlmIG5vIHBlciBjcHUgYXBidCBpcyBjaG9zZW4KKyAqIHBhbmljIGlmIHNldCB1cCBmYWlsZWQsIHRoaXMgaXMgdGhlIG9ubHkgcGxhdGZvcm0gdGltZXIgb24gTW9vcmVzdG93bi4KKyAqLwordm9pZCBfX2luaXQgYXBidF90aW1lX2luaXQodm9pZCkKK3sKKyNpZmRlZiBDT05GSUdfU01QCisJaW50IGk7CisJc3RydWN0IHNmaV90aW1lcl90YWJsZV9lbnRyeSAqcF9tdG1yOworCXVuc2lnbmVkIGludCBwZXJjcHVfdGltZXI7CisJc3RydWN0IGFwYnRfZGV2ICphZGV2OworI2VuZGlmCisKKwlpZiAoYXBiX3RpbWVyX2Jsb2NrX2VuYWJsZWQpCisJCXJldHVybjsKKwlhcGJ0X3NldF9tYXBwaW5nKCk7CisJaWYgKGFwYnRfdmlydF9hZGRyZXNzKSB7CisJCXByX2RlYnVnKCJGb3VuZCBBUEJUIHZlcnNpb24gMHglbHhcbiIsXAorCQkJIGFwYnRfcmVhZGxfcmVnKEFQQlRNUlNfQ09NUF9WRVJTSU9OKSk7CisJfSBlbHNlCisJCWdvdG8gb3V0X25vYXBidDsKKwkvKgorCSAqIFJlYWQgdGhlIGZyZXF1ZW5jeSBhbmQgY2hlY2sgZm9yIGEgc2FuZSB2YWx1ZSwgZm9yIEVTTCBtb2RlbAorCSAqIHdlIGV4dGVuZCB0aGUgcG9zc2libGUgY2xvY2sgcmFuZ2UgdG8gYWxsb3cgdGltZSBzY2FsaW5nLgorCSAqLworCisJaWYgKGFwYnRfZnJlcSA8IEFQQlRfTUlOX0ZSRVEgfHwgYXBidF9mcmVxID4gQVBCVF9NQVhfRlJFUSkgeworCQlwcl9kZWJ1ZygiQVBCVCBoYXMgaW52YWxpZCBmcmVxIDB4JWxseFxuIiwgYXBidF9mcmVxKTsKKwkJZ290byBvdXRfbm9hcGJ0OworCX0KKwlpZiAoYXBidF9jbG9ja3NvdXJjZV9yZWdpc3RlcigpKSB7CisJCXByX2RlYnVnKCJBUEJUIGhhcyBmYWlsZWQgdG8gcmVnaXN0ZXIgY2xvY2tzb3VyY2VcbiIpOworCQlnb3RvIG91dF9ub2FwYnQ7CisJfQorCWlmICghYXBidF9jbG9ja2V2ZW50X3JlZ2lzdGVyKCkpCisJCWFwYl90aW1lcl9ibG9ja19lbmFibGVkID0gMTsKKwllbHNlIHsKKwkJcHJfZGVidWcoIkFQQlQgaGFzIGZhaWxlZCB0byByZWdpc3RlciBjbG9ja2V2ZW50XG4iKTsKKwkJZ290byBvdXRfbm9hcGJ0OworCX0KKyNpZmRlZiBDT05GSUdfU01QCisJLyoga2VybmVsIGNtZGxpbmUgZGlzYWJsZSBhcGIgdGltZXIsIHNvIHdlIHdpbGwgdXNlIGxhcGljIHRpbWVycyAqLworCWlmIChkaXNhYmxlX2FwYnRfcGVyY3B1KSB7CisJCXByaW50ayhLRVJOX0lORk8gImFwYnQ6IGRpc2FibGVkIHBlciBjcHUgdGltZXJcbiIpOworCQlyZXR1cm47CisJfQorCXByX2RlYnVnKCIlczogJWQgQ1BVcyBvbmxpbmVcbiIsIF9fZnVuY19fLCBudW1fb25saW5lX2NwdXMoKSk7CisJaWYgKG51bV9wb3NzaWJsZV9jcHVzKCkgPD0gc2ZpX210aW1lcl9udW0pIHsKKwkJcGVyY3B1X3RpbWVyID0gMTsKKwkJYXBidF9udW1fdGltZXJzX3VzZWQgPSBudW1fcG9zc2libGVfY3B1cygpOworCX0gZWxzZSB7CisJCXBlcmNwdV90aW1lciA9IDA7CisJCWFwYnRfbnVtX3RpbWVyc191c2VkID0gMTsKKwkJYWRldiA9ICZwZXJfY3B1KGNwdV9hcGJ0X2RldiwgMCk7CisJCWFkZXYtPmZsYWdzICY9IH5BUEJUX0RFVl9VU0VEOworCX0KKwlwcl9kZWJ1ZygiJXM6ICVkIEFQQiB0aW1lcnMgdXNlZFxuIiwgX19mdW5jX18sIGFwYnRfbnVtX3RpbWVyc191c2VkKTsKKworCS8qIGhlcmUgd2Ugc2V0IHVwIHBlciBDUFUgdGltZXIgZGF0YSBzdHJ1Y3R1cmUgKi8KKwlhcGJ0X2RldnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXBidF9kZXYpICogYXBidF9udW1fdGltZXJzX3VzZWQsCisJCQkgICAgR0ZQX0tFUk5FTCk7CisJaWYgKCFhcGJ0X2RldnMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYWxsb2NhdGUgQVBCIHRpbWVyIGRldmljZXNcbiIpOworCQlyZXR1cm47CisJfQorCWZvciAoaSA9IDA7IGkgPCBhcGJ0X251bV90aW1lcnNfdXNlZDsgaSsrKSB7CisJCWFkZXYgPSAmcGVyX2NwdShjcHVfYXBidF9kZXYsIGkpOworCQlhZGV2LT5udW0gPSBpOworCQlhZGV2LT5jcHUgPSBpOworCQlwX210bXIgPSBzZmlfZ2V0X210bXIoaSk7CisJCWlmIChwX210bXIpIHsKKwkJCWFkZXYtPnRpY2sgPSBwX210bXItPmZyZXFfaHo7CisJCQlhZGV2LT5pcnEgPSBwX210bXItPmlycTsKKwkJfSBlbHNlCisJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBnZXQgdGltZXIgZm9yIGNwdSAlZFxuIiwgaSk7CisJCWFkZXYtPmNvdW50ID0gMDsKKwkJc3ByaW50ZihhZGV2LT5uYW1lLCAiYXBidCVkIiwgaSk7CisJfQorI2VuZGlmCisKKwlyZXR1cm47CisKK291dF9ub2FwYnQ6CisJYXBidF9jbGVhcl9tYXBwaW5nKCk7CisJYXBiX3RpbWVyX2Jsb2NrX2VuYWJsZWQgPSAwOworCXBhbmljKCJmYWlsZWQgdG8gZW5hYmxlIEFQQiB0aW1lclxuIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcGJ0X2Rpc2FibGUoaW50IG4pCit7CisJaWYgKGlzX2FwYnRfY2FwYWJsZSgpKSB7CisJCXVuc2lnbmVkIGxvbmcgY3RybCA9ICBhcGJ0X3JlYWRsKG4sIEFQQlRNUl9OX0NPTlRST0wpOworCQljdHJsICY9IH5BUEJUTVJfQ09OVFJPTF9FTkFCTEU7CisJCWFwYnRfd3JpdGVsKG4sIGN0cmwsIEFQQlRNUl9OX0NPTlRST0wpOworCX0KK30KKworLyogY2FsbGVkIGJlZm9yZSBhcGJfdGltZXJfZW5hYmxlLCB1c2UgZWFybHkgbWFwICovCit1bnNpZ25lZCBsb25nIGFwYnRfcXVpY2tfY2FsaWJyYXRlKCkKK3sKKwlpbnQgaSwgc2NhbGU7CisJdTY0IG9sZCwgbmV3OworCWN5Y2xlX3QgdDEsIHQyOworCXVuc2lnbmVkIGxvbmcga2h6ID0gMDsKKwl1MzIgbG9vcCwgc2hpZnQ7CisKKwlhcGJ0X3NldF9tYXBwaW5nKCk7CisJYXBidF9zdGFydF9jb3VudGVyKHBoeV9jc190aW1lcl9pZCk7CisKKwkvKiBjaGVjayBpZiB0aGUgdGltZXIgY2FuIGNvdW50IGRvd24sIG90aGVyd2lzZSByZXR1cm4gKi8KKwlvbGQgPSBhcGJ0X3JlYWRfY2xvY2tzb3VyY2UoJmNsb2Nrc291cmNlX2FwYnQpOworCWkgPSAxMDAwMDsKKwl3aGlsZSAoLS1pKSB7CisJCWlmIChvbGQgIT0gYXBidF9yZWFkX2Nsb2Nrc291cmNlKCZjbG9ja3NvdXJjZV9hcGJ0KSkKKwkJCWJyZWFrOworCX0KKwlpZiAoIWkpCisJCWdvdG8gZmFpbGVkOworCisJLyogY291bnQgMTYgbXMgKi8KKwlsb29wID0gKGFwYnRfZnJlcSAqIDEwMDApIDw8IDQ7CisKKwkvKiByZXN0YXJ0IHRoZSB0aW1lciB0byBlbnN1cmUgaXQgd29uJ3QgZ2V0IHRvIDAgaW4gdGhlIGNhbGlicmF0aW9uICovCisJYXBidF9zdGFydF9jb3VudGVyKHBoeV9jc190aW1lcl9pZCk7CisKKwlvbGQgPSBhcGJ0X3JlYWRfY2xvY2tzb3VyY2UoJmNsb2Nrc291cmNlX2FwYnQpOworCW9sZCArPSBsb29wOworCisJdDEgPSBfX25hdGl2ZV9yZWFkX3RzYygpOworCisJZG8geworCQluZXcgPSBhcGJ0X3JlYWRfY2xvY2tzb3VyY2UoJmNsb2Nrc291cmNlX2FwYnQpOworCX0gd2hpbGUgKG5ldyA8IG9sZCk7CisKKwl0MiA9IF9fbmF0aXZlX3JlYWRfdHNjKCk7CisKKwlzaGlmdCA9IDU7CisJaWYgKHVubGlrZWx5KGxvb3AgPj4gc2hpZnQgPT0gMCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTworCQkgICAgICAgIkFQQlQgVFNDIGNhbGlicmF0aW9uIGZhaWxlZCwgbm90IGVub3VnaCByZXNvbHV0aW9uXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCXNjYWxlID0gKGludClkaXZfdTY0KCh0MiAtIHQxKSwgbG9vcCA+PiBzaGlmdCk7CisJa2h6ID0gKHNjYWxlICogYXBidF9mcmVxICogMTAwMCkgPj4gc2hpZnQ7CisJcHJpbnRrKEtFUk5fSU5GTyAiVFNDIGZyZXEgY2FsY3VsYXRlZCBieSBBUEIgdGltZXIgaXMgJWx1IGtoelxuIiwga2h6KTsKKwlyZXR1cm4ga2h6OworZmFpbGVkOgorCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCmluZGV4IDZlMjliMmEuLjAwMTg3ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKQEAgLTEzOTAsNyArMTM5MCw3IEBACiAJfQogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCW1hc2tfODI1OUEoKTsKKwlsZWdhY3lfcGljLT5tYXNrX2FsbCgpOwogCW1hc2tfSU9fQVBJQ19zZXR1cChpb2FwaWNfZW50cmllcyk7CiAKIAlpZiAoZG1hcl90YWJsZV9pbml0X3JldCkKQEAgLTE0MjIsNyArMTQyMiw3IEBACiBub3gyYXBpYzoKIAlpZiAoIXJldCkgLyogSVIgZW5hYmxpbmcgZmFpbGVkICovCiAJCXJlc3RvcmVfSU9fQVBJQ19zZXR1cChpb2FwaWNfZW50cmllcyk7Ci0JdW5tYXNrXzgyNTlBKCk7CisJbGVnYWN5X3BpYy0+cmVzdG9yZV9tYXNrKCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiBvdXQ6CkBAIC0yMDE4LDcgKzIwMTgsNyBAQAogCQl9CiAKIAkJbWFza19JT19BUElDX3NldHVwKGlvYXBpY19lbnRyaWVzKTsKLQkJbWFza184MjU5QSgpOworCQlsZWdhY3lfcGljLT5tYXNrX2FsbCgpOwogCX0KIAogCWlmICh4MmFwaWNfbW9kZSkKQEAgLTIwNjIsNyArMjA2Miw3IEBACiAKIAlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkgewogCQlyZWVuYWJsZV9pbnRyX3JlbWFwcGluZyh4MmFwaWNfbW9kZSk7Ci0JCXVubWFza184MjU5QSgpOworCQlsZWdhY3lfcGljLT5yZXN0b3JlX21hc2soKTsKIAkJcmVzdG9yZV9JT19BUElDX3NldHVwKGlvYXBpY19lbnRyaWVzKTsKIAkJZnJlZV9pb2FwaWNfZW50cmllcyhpb2FwaWNfZW50cmllcyk7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpY19mbGF0XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYwppbmRleCBlM2MzZDgyLi4wOWQzYjE3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYwpAQCAtMjIzLDcgKzIyMyw3IEBACiB9OwogCiAvKgotICogUGh5c2ZsYXQgbW9kZSBpcyB1c2VkIHdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhbiA4IENQVXMgb24gYSBBTUQgc3lzdGVtLgorICogUGh5c2ZsYXQgbW9kZSBpcyB1c2VkIHdoZW4gdGhlcmUgYXJlIG1vcmUgdGhhbiA4IENQVXMgb24gYSBzeXN0ZW0uCiAgKiBXZSBjYW5ub3QgdXNlIGxvZ2ljYWwgZGVsaXZlcnkgaW4gdGhpcyBjYXNlIGJlY2F1c2UgdGhlIG1hc2sKICAqIG92ZXJmbG93cywgc28gdXNlIHBoeXNpY2FsIG1vZGUuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYwppbmRleCA2YmRkMmM3Li5lNGUwZGRjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCkBAIC03Myw4ICs3Myw4IEBACiAgKi8KIGludCBzaXNfYXBpY19idWcgPSAtMTsKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhpb2FwaWNfbG9jayk7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHZlY3Rvcl9sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKGlvYXBpY19sb2NrKTsKK3N0YXRpYyBERUZJTkVfUkFXX1NQSU5MT0NLKHZlY3Rvcl9sb2NrKTsKIAogLyoKICAqICMgb2YgSVJRIHJvdXRpbmcgcmVnaXN0ZXJzCkBAIC05NCw4ICs5NCw2IEBACiAvKiAjIG9mIE1QIElSUSBzb3VyY2UgZW50cmllcyAqLwogaW50IG1wX2lycV9lbnRyaWVzOwogCi0vKiBOdW1iZXIgb2YgbGVnYWN5IGludGVycnVwdHMgKi8KLXN0YXRpYyBpbnQgbnJfbGVnYWN5X2lycXMgX19yZWFkX21vc3RseSA9IE5SX0lSUVNfTEVHQUNZOwogLyogR1NJIGludGVycnVwdHMgKi8KIHN0YXRpYyBpbnQgbnJfaXJxc19nc2kgPSBOUl9JUlFTX0xFR0FDWTsKIApAQCAtMTQwLDMzICsxMzgsMTAgQEAKIAogLyogaXJxX2NmZyBpcyBpbmRleGVkIGJ5IHRoZSBzdW0gb2YgYWxsIFJURXMgaW4gYWxsIEkvTyBBUElDcy4gKi8KICNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQotc3RhdGljIHN0cnVjdCBpcnFfY2ZnIGlycV9jZmd4W10gPSB7CitzdGF0aWMgc3RydWN0IGlycV9jZmcgaXJxX2NmZ3hbTlJfSVJRU19MRUdBQ1ldOwogI2Vsc2UKLXN0YXRpYyBzdHJ1Y3QgaXJxX2NmZyBpcnFfY2ZneFtOUl9JUlFTXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NmZyBpcnFfY2ZneFtOUl9JUlFTXTsKICNlbmRpZgotCVswXSAgPSB7IC52ZWN0b3IgPSBJUlEwX1ZFQ1RPUiwgIH0sCi0JWzFdICA9IHsgLnZlY3RvciA9IElSUTFfVkVDVE9SLCAgfSwKLQlbMl0gID0geyAudmVjdG9yID0gSVJRMl9WRUNUT1IsICB9LAotCVszXSAgPSB7IC52ZWN0b3IgPSBJUlEzX1ZFQ1RPUiwgIH0sCi0JWzRdICA9IHsgLnZlY3RvciA9IElSUTRfVkVDVE9SLCAgfSwKLQlbNV0gID0geyAudmVjdG9yID0gSVJRNV9WRUNUT1IsICB9LAotCVs2XSAgPSB7IC52ZWN0b3IgPSBJUlE2X1ZFQ1RPUiwgIH0sCi0JWzddICA9IHsgLnZlY3RvciA9IElSUTdfVkVDVE9SLCAgfSwKLQlbOF0gID0geyAudmVjdG9yID0gSVJROF9WRUNUT1IsICB9LAotCVs5XSAgPSB7IC52ZWN0b3IgPSBJUlE5X1ZFQ1RPUiwgIH0sCi0JWzEwXSA9IHsgLnZlY3RvciA9IElSUTEwX1ZFQ1RPUiwgfSwKLQlbMTFdID0geyAudmVjdG9yID0gSVJRMTFfVkVDVE9SLCB9LAotCVsxMl0gPSB7IC52ZWN0b3IgPSBJUlExMl9WRUNUT1IsIH0sCi0JWzEzXSA9IHsgLnZlY3RvciA9IElSUTEzX1ZFQ1RPUiwgfSwKLQlbMTRdID0geyAudmVjdG9yID0gSVJRMTRfVkVDVE9SLCB9LAotCVsxNV0gPSB7IC52ZWN0b3IgPSBJUlExNV9WRUNUT1IsIH0sCi19OwotCi12b2lkIF9faW5pdCBpb19hcGljX2Rpc2FibGVfbGVnYWN5KHZvaWQpCi17Ci0JbnJfbGVnYWN5X2lycXMgPSAwOwotCW5yX2lycXNfZ3NpID0gMDsKLX0KIAogaW50IF9faW5pdCBhcmNoX2Vhcmx5X2lycV9pbml0KHZvaWQpCiB7CkBAIC0xNzYsNiArMTUxLDExIEBACiAJaW50IG5vZGU7CiAJaW50IGk7CiAKKwlpZiAoIWxlZ2FjeV9waWMtPm5yX2xlZ2FjeV9pcnFzKSB7CisJCW5yX2lycXNfZ3NpID0gMDsKKwkJaW9fYXBpY19pcnFzID0gfjBVTDsKKwl9CisKIAljZmcgPSBpcnFfY2ZneDsKIAljb3VudCA9IEFSUkFZX1NJWkUoaXJxX2NmZ3gpOwogCW5vZGU9IGNwdV90b19ub2RlKGJvb3RfY3B1X2lkKTsKQEAgLTE4NSw4ICsxNjUsMTQgQEAKIAkJZGVzYy0+Y2hpcF9kYXRhID0gJmNmZ1tpXTsKIAkJemFsbG9jX2NwdW1hc2tfdmFyX25vZGUoJmNmZ1tpXS5kb21haW4sIEdGUF9OT1dBSVQsIG5vZGUpOwogCQl6YWxsb2NfY3B1bWFza192YXJfbm9kZSgmY2ZnW2ldLm9sZF9kb21haW4sIEdGUF9OT1dBSVQsIG5vZGUpOwotCQlpZiAoaSA8IG5yX2xlZ2FjeV9pcnFzKQotCQkJY3B1bWFza19zZXRhbGwoY2ZnW2ldLmRvbWFpbik7CisJCS8qCisJCSAqIEZvciBsZWdhY3kgSVJRJ3MsIHN0YXJ0IHdpdGggYXNzaWduaW5nIGlycTAgdG8gaXJxMTUgdG8KKwkJICogSVJRMF9WRUNUT1IgdG8gSVJRMTVfVkVDVE9SIG9uIGNwdSAwLgorCQkgKi8KKwkJaWYgKGkgPCBsZWdhY3lfcGljLT5ucl9sZWdhY3lfaXJxcykgeworCQkJY2ZnW2ldLnZlY3RvciA9IElSUTBfVkVDVE9SICsgaTsKKwkJCWNwdW1hc2tfc2V0X2NwdSgwLCBjZmdbaV0uZG9tYWluKTsKKwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtNDA2LDcgKzM5Miw3IEBACiAJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAlmb3JfZWFjaF9pcnFfcGluKGVudHJ5LCBjZmctPmlycV8yX3BpbikgewogCQl1bnNpZ25lZCBpbnQgcmVnOwogCQlpbnQgcGluOwpAQCAtNDE1LDExICs0MDEsMTEgQEAKIAkJcmVnID0gaW9fYXBpY19yZWFkKGVudHJ5LT5hcGljLCAweDEwICsgcGluKjIpOwogCQkvKiBJcyB0aGUgcmVtb3RlIElSUiBiaXQgc2V0PyAqLwogCQlpZiAocmVnICYgSU9fQVBJQ19SRURJUl9SRU1PVEVfSVJSKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIGZhbHNlOwogfQpAQCAtNDMzLDEwICs0MTksMTAgQEAKIHsKIAl1bmlvbiBlbnRyeV91bmlvbiBldTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAlldS53MSA9IGlvX2FwaWNfcmVhZChhcGljLCAweDEwICsgMiAqIHBpbik7CiAJZXUudzIgPSBpb19hcGljX3JlYWQoYXBpYywgMHgxMSArIDIgKiBwaW4pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGV1LmVudHJ5OwogfQogCkBAIC00NTksOSArNDQ1LDkgQEAKIHZvaWQgaW9hcGljX3dyaXRlX2VudHJ5KGludCBhcGljLCBpbnQgcGluLCBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCV9faW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTQ3NCwxMCArNDYwLDEwIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bmlvbiBlbnRyeV91bmlvbiBldSA9IHsgLmVudHJ5Lm1hc2sgPSAxIH07CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJaW9fYXBpY193cml0ZShhcGljLCAweDEwICsgMipwaW4sIGV1LncxKTsKIAlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyAyKnBpbiwgZXUudzIpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBAIC02MDQsOSArNTkwLDkgQEAKIAogCUJVR19PTighY2ZnKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAlfX21hc2tfSU9fQVBJQ19pcnEoY2ZnKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCB1bm1hc2tfSU9fQVBJQ19pcnFfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCkBAIC02MTQsOSArNjAwLDkgQEAKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJX191bm1hc2tfSU9fQVBJQ19pcnEoY2ZnKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBtYXNrX0lPX0FQSUNfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC04NjUsNyArODUxLDcgQEAKICAqLwogc3RhdGljIGludCBFSVNBX0VMQ1IodW5zaWduZWQgaW50IGlycSkKIHsKLQlpZiAoaXJxIDwgbnJfbGVnYWN5X2lycXMpIHsKKwlpZiAoaXJxIDwgbGVnYWN5X3BpYy0+bnJfbGVnYWN5X2lycXMpIHsKIAkJdW5zaWduZWQgaW50IHBvcnQgPSAweDRkMCArIChpcnEgPj4gMyk7CiAJCXJldHVybiAoaW5iKHBvcnQpID4+IChpcnEgJiA3KSkgJiAxOwogCX0KQEAgLTExNDAsMTIgKzExMjYsMTIgQEAKIAkvKiBVc2VkIHRvIHRoZSBvbmxpbmUgc2V0IG9mIGNwdXMgZG9lcyBub3QgY2hhbmdlCiAJICogZHVyaW5nIGFzc2lnbl9pcnFfdmVjdG9yLgogCSAqLwotCXNwaW5fbG9jaygmdmVjdG9yX2xvY2spOworCXJhd19zcGluX2xvY2soJnZlY3Rvcl9sb2NrKTsKIH0KIAogdm9pZCB1bmxvY2tfdmVjdG9yX2xvY2sodm9pZCkKIHsKLQlzcGluX3VubG9jaygmdmVjdG9yX2xvY2spOworCXJhd19zcGluX3VubG9jaygmdmVjdG9yX2xvY2spOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMTYyLDcgKzExNDgsOCBAQAogCSAqIEFsc28sIHdlJ3ZlIGdvdCB0byBiZSBjYXJlZnVsIG5vdCB0byB0cmFzaCBnYXRlCiAJICogMHg4MCwgYmVjYXVzZSBpbnQgMHg4MCBpcyBobSwga2luZCBvZiBpbXBvcnRhbnRpc2guIDspCiAJICovCi0Jc3RhdGljIGludCBjdXJyZW50X3ZlY3RvciA9IEZJUlNUX0RFVklDRV9WRUNUT1IsIGN1cnJlbnRfb2Zmc2V0ID0gMDsKKwlzdGF0aWMgaW50IGN1cnJlbnRfdmVjdG9yID0gRklSU1RfRVhURVJOQUxfVkVDVE9SICsgVkVDVE9SX09GRlNFVF9TVEFSVDsKKwlzdGF0aWMgaW50IGN1cnJlbnRfb2Zmc2V0ID0gVkVDVE9SX09GRlNFVF9TVEFSVCAlIDg7CiAJdW5zaWduZWQgaW50IG9sZF92ZWN0b3I7CiAJaW50IGNwdSwgZXJyOwogCWNwdW1hc2tfdmFyX3QgdG1wX21hc2s7CkBAIC0xMTk4LDcgKzExODUsNyBAQAogCQlpZiAodmVjdG9yID49IGZpcnN0X3N5c3RlbV92ZWN0b3IpIHsKIAkJCS8qIElmIG91dCBvZiB2ZWN0b3JzIG9uIGxhcmdlIGJveGVuLCBtdXN0IHNoYXJlIHRoZW0uICovCiAJCQlvZmZzZXQgPSAob2Zmc2V0ICsgMSkgJSA4OwotCQkJdmVjdG9yID0gRklSU1RfREVWSUNFX1ZFQ1RPUiArIG9mZnNldDsKKwkJCXZlY3RvciA9IEZJUlNUX0VYVEVSTkFMX1ZFQ1RPUiArIG9mZnNldDsKIAkJfQogCQlpZiAodW5saWtlbHkoY3VycmVudF92ZWN0b3IgPT0gdmVjdG9yKSkKIAkJCWNvbnRpbnVlOwpAQCAtMTIzMiw5ICsxMjE5LDkgQEAKIAlpbnQgZXJyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CiAJZXJyID0gX19hc3NpZ25faXJxX3ZlY3RvcihpcnEsIGNmZywgbWFzayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMjY4LDExICsxMjU1LDE2IEBACiB2b2lkIF9fc2V0dXBfdmVjdG9yX2lycShpbnQgY3B1KQogewogCS8qIEluaXRpYWxpemUgdmVjdG9yX2lycSBvbiBhIG5ldyBjcHUgKi8KLQkvKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggdmVjdG9yX2xvY2sgaGVsZCAqLwogCWludCBpcnEsIHZlY3RvcjsKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwogCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAorCS8qCisJICogdmVjdG9yX2xvY2sgd2lsbCBtYWtlIHN1cmUgdGhhdCB3ZSBkb24ndCBydW4gaW50byBpcnEgdmVjdG9yCisJICogYXNzaWdubWVudHMgdGhhdCBtaWdodCBiZSBoYXBwZW5pbmcgb24gYW5vdGhlciBjcHUgaW4gcGFyYWxsZWwsCisJICogd2hpbGUgd2Ugc2V0dXAgb3VyIGluaXRpYWwgdmVjdG9yIHRvIGlycSBtYXBwaW5ncy4KKwkgKi8KKwlyYXdfc3Bpbl9sb2NrKCZ2ZWN0b3JfbG9jayk7CiAJLyogTWFyayB0aGUgaW51c2UgdmVjdG9ycyAqLwogCWZvcl9lYWNoX2lycV9kZXNjKGlycSwgZGVzYykgewogCQljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CkBAIC0xMjkxLDYgKzEyODMsNyBAQAogCQlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoY3B1LCBjZmctPmRvbWFpbikpCiAJCQlwZXJfY3B1KHZlY3Rvcl9pcnEsIGNwdSlbdmVjdG9yXSA9IC0xOwogCX0KKwlyYXdfc3Bpbl91bmxvY2soJnZlY3Rvcl9sb2NrKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpb2FwaWNfY2hpcDsKQEAgLTE0NDAsNiArMTQzMywxNCBAQAogCiAJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwogCisJLyoKKwkgKiBGb3IgbGVnYWN5IGlycXMsIGNmZy0+ZG9tYWluIHN0YXJ0cyB3aXRoIGNwdSAwIGZvciBsZWdhY3kKKwkgKiBjb250cm9sbGVycyBsaWtlIDgyNTkuIE5vdyB0aGF0IElPLUFQSUMgY2FuIGhhbmRsZSB0aGlzIGlycSwgdXBkYXRlCisJICogdGhlIGNmZy0+ZG9tYWluLgorCSAqLworCWlmIChpcnEgPCBsZWdhY3lfcGljLT5ucl9sZWdhY3lfaXJxcyAmJiBjcHVtYXNrX3Rlc3RfY3B1KDAsIGNmZy0+ZG9tYWluKSkKKwkJYXBpYy0+dmVjdG9yX2FsbG9jYXRpb25fZG9tYWluKDAsIGNmZy0+ZG9tYWluKTsKKwogCWlmIChhc3NpZ25faXJxX3ZlY3RvcihpcnEsIGNmZywgYXBpYy0+dGFyZ2V0X2NwdXMoKSkpCiAJCXJldHVybjsKIApAQCAtMTQ2MSw4ICsxNDYyLDggQEAKIAl9CiAKIAlpb2FwaWNfcmVnaXN0ZXJfaW50cihpcnEsIGRlc2MsIHRyaWdnZXIpOwotCWlmIChpcnEgPCBucl9sZWdhY3lfaXJxcykKLQkJZGlzYWJsZV84MjU5QV9pcnEoaXJxKTsKKwlpZiAoaXJxIDwgbGVnYWN5X3BpYy0+bnJfbGVnYWN5X2lycXMpCisJCWxlZ2FjeV9waWMtPmNoaXAtPm1hc2soaXJxKTsKIAogCWlvYXBpY193cml0ZV9lbnRyeShhcGljX2lkLCBwaW4sIGVudHJ5KTsKIH0KQEAgLTE0NzMsNyArMTQ3NCw3IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9JT19BUElDX2lycXModm9pZCkKIHsKLQlpbnQgYXBpY19pZCA9IDAsIHBpbiwgaWR4LCBpcnE7CisJaW50IGFwaWNfaWQsIHBpbiwgaWR4LCBpcnE7CiAJaW50IG5vdGNvbiA9IDA7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCXN0cnVjdCBpcnFfY2ZnICpjZmc7CkBAIC0xNDgxLDE0ICsxNDgyLDcgQEAKIAogCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgS0VSTl9ERUJVRyAiaW5pdCBJT19BUElDIElSUXNcbiIpOwogCi0jaWZkZWYgQ09ORklHX0FDUEkKLQlpZiAoIWFjcGlfZGlzYWJsZWQgJiYgYWNwaV9pb2FwaWMpIHsKLQkJYXBpY19pZCA9IG1wX2ZpbmRfaW9hcGljKDApOwotCQlpZiAoYXBpY19pZCA8IDApCi0JCQlhcGljX2lkID0gMDsKLQl9Ci0jZW5kaWYKLQorCWZvciAoYXBpY19pZCA9IDA7IGFwaWNfaWQgPCBucl9pb2FwaWNzOyBhcGljX2lkKyspCiAJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNfaWRdOyBwaW4rKykgewogCQlpZHggPSBmaW5kX2lycV9lbnRyeShhcGljX2lkLCBwaW4sIG1wX0lOVCk7CiAJCWlmIChpZHggPT0gLTEpIHsKQEAgLTE1MTAsNiArMTUwNCw5IEBACiAKIAkJaXJxID0gcGluXzJfaXJxKGlkeCwgYXBpY19pZCwgcGluKTsKIAorCQlpZiAoKGFwaWNfaWQgPiAwKSAmJiAoaXJxID4gMTYpKQorCQkJY29udGludWU7CisKIAkJLyoKIAkJICogU2tpcCB0aGUgdGltZXIgSVJRIGlmIHRoZXJlJ3MgYSBxdWlyayBoYW5kbGVyCiAJCSAqIGluc3RhbGxlZCBhbmQgaWYgaXQgcmV0dXJucyAxOgpAQCAtMTUzOSw2ICsxNTM2LDU2IEBACiB9CiAKIC8qCisgKiBmb3IgdGhlIGdzaXQgdGhhdCBpcyBub3QgaW4gZmlyc3QgaW9hcGljCisgKiBidXQgY291bGQgbm90IHVzZSBhY3BpX3JlZ2lzdGVyX2dzaSgpCisgKiBsaWtlIHNvbWUgc3BlY2lhbCBzY2kgaW4gSUJNIHgzMzMwCisgKi8KK3ZvaWQgc2V0dXBfSU9fQVBJQ19pcnFfZXh0cmEodTMyIGdzaSkKK3sKKwlpbnQgYXBpY19pZCA9IDAsIHBpbiwgaWR4LCBpcnE7CisJaW50IG5vZGUgPSBjcHVfdG9fbm9kZShib290X2NwdV9pZCk7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCXN0cnVjdCBpcnFfY2ZnICpjZmc7CisKKwkvKgorCSAqIENvbnZlcnQgJ2dzaScgdG8gJ2lvYXBpYy5waW4nLgorCSAqLworCWFwaWNfaWQgPSBtcF9maW5kX2lvYXBpYyhnc2kpOworCWlmIChhcGljX2lkIDwgMCkKKwkJcmV0dXJuOworCisJcGluID0gbXBfZmluZF9pb2FwaWNfcGluKGFwaWNfaWQsIGdzaSk7CisJaWR4ID0gZmluZF9pcnFfZW50cnkoYXBpY19pZCwgcGluLCBtcF9JTlQpOworCWlmIChpZHggPT0gLTEpCisJCXJldHVybjsKKworCWlycSA9IHBpbl8yX2lycShpZHgsIGFwaWNfaWQsIHBpbik7CisjaWZkZWYgQ09ORklHX1NQQVJTRV9JUlEKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwlpZiAoZGVzYykKKwkJcmV0dXJuOworI2VuZGlmCisJZGVzYyA9IGlycV90b19kZXNjX2FsbG9jX25vZGUoaXJxLCBub2RlKTsKKwlpZiAoIWRlc2MpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiY2FuIG5vdCBnZXQgaXJxX2Rlc2MgZm9yICVkXG4iLCBpcnEpOworCQlyZXR1cm47CisJfQorCisJY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOworCWFkZF9waW5fdG9faXJxX25vZGUoY2ZnLCBub2RlLCBhcGljX2lkLCBwaW4pOworCisJaWYgKHRlc3RfYml0KHBpbiwgbXBfaW9hcGljX3JvdXRpbmdbYXBpY19pZF0ucGluX3Byb2dyYW1tZWQpKSB7CisJCXByX2RlYnVnKCJQaW4gJWQtJWQgYWxyZWFkeSBwcm9ncmFtbWVkXG4iLAorCQkJIG1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkLCBwaW4pOworCQlyZXR1cm47CisJfQorCXNldF9iaXQocGluLCBtcF9pb2FwaWNfcm91dGluZ1thcGljX2lkXS5waW5fcHJvZ3JhbW1lZCk7CisKKwlzZXR1cF9JT19BUElDX2lycShhcGljX2lkLCBwaW4sIGlycSwgZGVzYywKKwkJCWlycV90cmlnZ2VyKGlkeCksIGlycV9wb2xhcml0eShpZHgpKTsKK30KKworLyoKICAqIFNldCB1cCB0aGUgdGltZXIgcGluLCBwb3NzaWJseSB3aXRoIHRoZSA4MjU5QS1tYXN0ZXIgYmVoaW5kLgogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgc2V0dXBfdGltZXJfSVJRMF9waW4odW5zaWduZWQgaW50IGFwaWNfaWQsIHVuc2lnbmVkIGludCBwaW4sCkBAIC0xNjAxLDE0ICsxNjQ4LDE0IEBACiAKIAlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAwKTsKIAlyZWdfMDEucmF3ID0gaW9fYXBpY19yZWFkKGFwaWMsIDEpOwogCWlmIChyZWdfMDEuYml0cy52ZXJzaW9uID49IDB4MTApCiAJCXJlZ18wMi5yYXcgPSBpb19hcGljX3JlYWQoYXBpYywgMik7CiAJaWYgKHJlZ18wMS5iaXRzLnZlcnNpb24gPj0gMHgyMCkKIAkJcmVnXzAzLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCiAJcHJpbnRrKCJcbiIpOwogCXByaW50ayhLRVJOX0RFQlVHICJJTyBBUElDICMlZC4uLi4uLlxuIiwgbXBfaW9hcGljc1thcGljXS5hcGljaWQpOwpAQCAtMTgyNSwxMiArMTg3MiwxMiBAQAogCXVuc2lnbmVkIGludCB2OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIW5yX2xlZ2FjeV9pcnFzKQorCWlmICghbGVnYWN5X3BpYy0+bnJfbGVnYWN5X2lycXMpCiAJCXJldHVybjsKIAogCXByaW50ayhLRVJOX0RFQlVHICJcbnByaW50aW5nIFBJQyBjb250ZW50c1xuIik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAKIAl2ID0gaW5iKDB4YTEpIDw8IDggfCBpbmIoMHgyMSk7CiAJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBQSUMgIElNUjogJTA0eFxuIiwgdik7CkBAIC0xODQ0LDcgKzE4OTEsNyBAQAogCW91dGIoMHgwYSwweGEwKTsKIAlvdXRiKDB4MGEsMHgyMCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIi4uLiBQSUMgIElTUjogJTA0eFxuIiwgdik7CiAKQEAgLTE5MDMsMTMgKzE5NTAsMTMgQEAKIAkgKiBUaGUgbnVtYmVyIG9mIElPLUFQSUMgSVJRIHJlZ2lzdGVycyAoPT0gI3BpbnMpOgogCSAqLwogCWZvciAoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAkJcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljLCAxKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJCW5yX2lvYXBpY19yZWdpc3RlcnNbYXBpY10gPSByZWdfMDEuYml0cy5lbnRyaWVzKzE7CiAJfQogCi0JaWYgKCFucl9sZWdhY3lfaXJxcykKKwlpZiAoIWxlZ2FjeV9waWMtPm5yX2xlZ2FjeV9pcnFzKQogCQlyZXR1cm47CiAKIAlmb3IoYXBpYyA9IDA7IGFwaWMgPCBucl9pb2FwaWNzOyBhcGljKyspIHsKQEAgLTE5NjYsNyArMjAxMyw3IEBACiAJICovCiAJY2xlYXJfSU9fQVBJQygpOwogCi0JaWYgKCFucl9sZWdhY3lfaXJxcykKKwlpZiAoIWxlZ2FjeV9waWMtPm5yX2xlZ2FjeV9pcnFzKQogCQlyZXR1cm47CiAKIAkvKgpAQCAtMjA0NSw5ICsyMDkyLDkgQEAKIAlmb3IgKGFwaWNfaWQgPSAwOyBhcGljX2lkIDwgbnJfaW9hcGljczsgYXBpY19pZCsrKSB7CiAKIAkJLyogUmVhZCB0aGUgcmVnaXN0ZXIgMCB2YWx1ZSAqLwotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCQlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGFwaWNfaWQsIDApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAogCQlvbGRfaWQgPSBtcF9pb2FwaWNzW2FwaWNfaWRdLmFwaWNpZDsKIApAQCAtMjEwNiwxNiArMjE1MywxNiBAQAogCQkJbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQpOwogCiAJCXJlZ18wMC5iaXRzLklEID0gbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQ7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJCWlvX2FwaWNfd3JpdGUoYXBpY19pZCwgMCwgcmVnXzAwLnJhdyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCiAJCS8qCiAJCSAqIFNhbml0eSBjaGVjawogCQkgKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAkJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChhcGljX2lkLCAwKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwkJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJCWlmIChyZWdfMDAuYml0cy5JRCAhPSBtcF9pb2FwaWNzW2FwaWNfaWRdLmFwaWNpZCkKIAkJCXByaW50aygiY291bGQgbm90IHNldCBJRCFcbiIpOwogCQllbHNlCkBAIC0yMTk4LDE1ICsyMjQ1LDE1IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JaWYgKGlycSA8IG5yX2xlZ2FjeV9pcnFzKSB7Ci0JCWRpc2FibGVfODI1OUFfaXJxKGlycSk7Ci0JCWlmIChpODI1OUFfaXJxX3BlbmRpbmcoaXJxKSkKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJaWYgKGlycSA8IGxlZ2FjeV9waWMtPm5yX2xlZ2FjeV9pcnFzKSB7CisJCWxlZ2FjeV9waWMtPmNoaXAtPm1hc2soaXJxKTsKKwkJaWYgKGxlZ2FjeV9waWMtPmlycV9wZW5kaW5nKGlycSkpCiAJCQl3YXNfcGVuZGluZyA9IDE7CiAJfQogCWNmZyA9IGlycV9jZmcoaXJxKTsKIAlfX3VubWFza19JT19BUElDX2lycShjZmcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gd2FzX3BlbmRpbmc7CiB9CkBAIC0yMjE3LDkgKzIyNjQsOSBAQAogCXN0cnVjdCBpcnFfY2ZnICpjZmcgPSBpcnFfY2ZnKGlycSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKIAlhcGljLT5zZW5kX0lQSV9tYXNrKGNwdW1hc2tfb2YoY3B1bWFza19maXJzdChjZmctPmRvbWFpbikpLCBjZmctPnZlY3Rvcik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiAxOwogfQpAQCAtMjMxMiwxNCArMjM1OSwxNCBAQAogCWlycSA9IGRlc2MtPmlycTsKIAljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJcmV0ID0gc2V0X2Rlc2NfYWZmaW5pdHkoZGVzYywgbWFzaywgJmRlc3QpOwogCWlmICghcmV0KSB7CiAJCS8qIE9ubHkgdGhlIGhpZ2ggOCBiaXRzIGFyZSB2YWxpZC4gKi8KIAkJZGVzdCA9IFNFVF9BUElDX0xPR0lDQUxfSUQoZGVzdCk7CiAJCV9fdGFyZ2V0X0lPX0FQSUNfaXJxKGlycSwgZGVzdCwgY2ZnKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0yNTU0LDkgKzI2MDEsOSBAQAogCWlycSA9IGRlc2MtPmlycTsKIAljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJX19lb2lfaW9hcGljX2lycShpcnEsIGNmZyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgYWNrX2FwaWNfbGV2ZWwodW5zaWduZWQgaW50IGlycSkKQEAgLTI3MzQsOCArMjc4MSw4IEBACiAJCQkgKiBzbyBkZWZhdWx0IHRvIGFuIG9sZC1mYXNoaW9uZWQgODI1OQogCQkJICogaW50ZXJydXB0IGlmIHdlIGNhbi4uCiAJCQkgKi8KLQkJCWlmIChpcnEgPCBucl9sZWdhY3lfaXJxcykKLQkJCQltYWtlXzgyNTlBX2lycShpcnEpOworCQkJaWYgKGlycSA8IGxlZ2FjeV9waWMtPm5yX2xlZ2FjeV9pcnFzKQorCQkJCWxlZ2FjeV9waWMtPm1ha2VfaXJxKGlycSk7CiAJCQllbHNlCiAJCQkJLyogU3RyYW5nZS4gT2gsIHdlbGwuLiAqLwogCQkJCWRlc2MtPmNoaXAgPSAmbm9faXJxX2NoaXA7CkBAIC0yODkyLDcgKzI5MzksNyBAQAogCS8qCiAJICogZ2V0L3NldCB0aGUgdGltZXIgSVJRIHZlY3RvcjoKIAkgKi8KLQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKKwlsZWdhY3lfcGljLT5jaGlwLT5tYXNrKDApOwogCWFzc2lnbl9pcnFfdmVjdG9yKDAsIGNmZywgYXBpYy0+dGFyZ2V0X2NwdXMoKSk7CiAKIAkvKgpAQCAtMjkwNSw3ICsyOTUyLDcgQEAKIAkgKiBhdXRvbWF0aWNhbGx5LgogCSAqLwogCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQgfCBBUElDX0RNX0VYVElOVCk7Ci0JaW5pdF84MjU5QSgxKTsKKwlsZWdhY3lfcGljLT5pbml0KDEpOwogI2lmZGVmIENPTkZJR19YODZfMzIKIAl7CiAJCXVuc2lnbmVkIGludCB2ZXI7CkBAIC0yOTY0LDcgKzMwMTEsNyBAQAogCQlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKIAkJCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKIAkJCQlzZXR1cF9ubWkoKTsKLQkJCQllbmFibGVfODI1OUFfaXJxKDApOworCQkJCWxlZ2FjeV9waWMtPmNoaXAtPnVubWFzaygwKTsKIAkJCX0KIAkJCWlmIChkaXNhYmxlX3RpbWVyX3Bpbl8xID4gMCkKIAkJCQljbGVhcl9JT19BUElDX3BpbigwLCBwaW4xKTsKQEAgLTI5ODcsMTQgKzMwMzQsMTQgQEAKIAkJICovCiAJCXJlcGxhY2VfcGluX2F0X2lycV9ub2RlKGNmZywgbm9kZSwgYXBpYzEsIHBpbjEsIGFwaWMyLCBwaW4yKTsKIAkJc2V0dXBfdGltZXJfSVJRMF9waW4oYXBpYzIsIHBpbjIsIGNmZy0+dmVjdG9yKTsKLQkJZW5hYmxlXzgyNTlBX2lycSgwKTsKKwkJbGVnYWN5X3BpYy0+Y2hpcC0+dW5tYXNrKDApOwogCQlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKIAkJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4uLiB3b3Jrcy5cbiIpOwogCQkJdGltZXJfdGhyb3VnaF84MjU5ID0gMTsKIAkJCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKLQkJCQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKKwkJCQlsZWdhY3lfcGljLT5jaGlwLT5tYXNrKDApOwogCQkJCXNldHVwX25taSgpOwotCQkJCWVuYWJsZV84MjU5QV9pcnEoMCk7CisJCQkJbGVnYWN5X3BpYy0+Y2hpcC0+dW5tYXNrKDApOwogCQkJfQogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTMwMDIsNyArMzA0OSw3IEBACiAJCSAqIENsZWFudXAsIGp1c3QgaW4gY2FzZSAuLi4KIAkJICovCiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JCWRpc2FibGVfODI1OUFfaXJxKDApOworCQlsZWdhY3lfcGljLT5jaGlwLT5tYXNrKDApOwogCQljbGVhcl9JT19BUElDX3BpbihhcGljMiwgcGluMik7CiAJCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4uLiBmYWlsZWQuXG4iKTsKIAl9CkBAIC0zMDIxLDIyICszMDY4LDIyIEBACiAKIAlsYXBpY19yZWdpc3Rlcl9pbnRyKDAsIGRlc2MpOwogCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX0ZJWEVEIHwgY2ZnLT52ZWN0b3IpOwkvKiBGaXhlZCBtb2RlICovCi0JZW5hYmxlXzgyNTlBX2lycSgwKTsKKwlsZWdhY3lfcGljLT5jaGlwLT51bm1hc2soMCk7CiAKIAlpZiAodGltZXJfaXJxX3dvcmtzKCkpIHsKIAkJYXBpY19wcmludGsoQVBJQ19RVUlFVCwgS0VSTl9JTkZPICIuLi4uLiB3b3Jrcy5cbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKLQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKKwlsZWdhY3lfcGljLT5jaGlwLT5tYXNrKDApOwogCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0xWVF9NQVNLRUQgfCBBUElDX0RNX0ZJWEVEIHwgY2ZnLT52ZWN0b3IpOwogCWFwaWNfcHJpbnRrKEFQSUNfUVVJRVQsIEtFUk5fSU5GTyAiLi4uLi4gZmFpbGVkLlxuIik7CiAKIAlhcGljX3ByaW50ayhBUElDX1FVSUVULCBLRVJOX0lORk8KIAkJICAgICIuLi50cnlpbmcgdG8gc2V0IHVwIHRpbWVyIGFzIEV4dElOVCBJUlEuLi5cbiIpOwogCi0JaW5pdF84MjU5QSgwKTsKLQltYWtlXzgyNTlBX2lycSgwKTsKKwlsZWdhY3lfcGljLT5pbml0KDApOworCWxlZ2FjeV9waWMtPm1ha2VfaXJxKDApOwogCWFwaWNfd3JpdGUoQVBJQ19MVlQwLCBBUElDX0RNX0VYVElOVCk7CiAKIAl1bmxvY2tfRXh0SU5UX2xvZ2ljKCk7CkBAIC0zMDc4LDcgKzMxMjUsNyBAQAogCS8qCiAJICogY2FsbGluZyBlbmFibGVfSU9fQVBJQygpIGlzIG1vdmVkIHRvIHNldHVwX2xvY2FsX0FQSUMgZm9yIEJQCiAJICovCi0JaW9fYXBpY19pcnFzID0gbnJfbGVnYWN5X2lycXMgPyB+UElDX0lSUVMgOiB+MFVMOworCWlvX2FwaWNfaXJxcyA9IGxlZ2FjeV9waWMtPm5yX2xlZ2FjeV9pcnFzID8gflBJQ19JUlFTIDogfjBVTDsKIAogCWFwaWNfcHJpbnRrKEFQSUNfVkVSQk9TRSwgIkVOQUJMSU5HIElPLUFQSUMgSVJRc1xuIik7CiAJLyoKQEAgLTMwODksNyArMzEzNiw3IEBACiAJc3luY19BcmJfSURzKCk7CiAJc2V0dXBfSU9fQVBJQ19pcnFzKCk7CiAJaW5pdF9JT19BUElDX3RyYXBzKCk7Ci0JaWYgKG5yX2xlZ2FjeV9pcnFzKQorCWlmIChsZWdhY3lfcGljLT5ucl9sZWdhY3lfaXJxcykKIAkJY2hlY2tfdGltZXIoKTsKIH0KIApAQCAtMzEzOCwxMyArMzE4NSwxMyBAQAogCWRhdGEgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc3lzZnNfaW9hcGljX2RhdGEsIGRldik7CiAJZW50cnkgPSBkYXRhLT5lbnRyeTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGRldi0+aWQsIDApOwogCWlmIChyZWdfMDAuYml0cy5JRCAhPSBtcF9pb2FwaWNzW2Rldi0+aWRdLmFwaWNpZCkgewogCQlyZWdfMDAuYml0cy5JRCA9IG1wX2lvYXBpY3NbZGV2LT5pZF0uYXBpY2lkOwogCQlpb19hcGljX3dyaXRlKGRldi0+aWQsIDAsIHJlZ18wMC5yYXcpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2Rldi0+aWRdOyBpKyspCiAJCWlvYXBpY193cml0ZV9lbnRyeShkZXYtPmlkLCBpLCBlbnRyeVtpXSk7CiAKQEAgLTMyMDcsNyArMzI1NCw3IEBACiAJaWYgKGlycV93YW50IDwgbnJfaXJxc19nc2kpCiAJCWlycV93YW50ID0gbnJfaXJxc19nc2k7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CiAJZm9yIChuZXcgPSBpcnFfd2FudDsgbmV3IDwgbnJfaXJxczsgbmV3KyspIHsKIAkJZGVzY19uZXcgPSBpcnFfdG9fZGVzY19hbGxvY19ub2RlKG5ldywgbm9kZSk7CiAJCWlmICghZGVzY19uZXcpIHsKQEAgLTMyMjYsMTQgKzMyNzMsMTEgQEAKIAkJCWlycSA9IG5ldzsKIAkJYnJlYWs7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7CiAKLQlpZiAoaXJxID4gMCkgewotCQlkeW5hbWljX2lycV9pbml0KGlycSk7Ci0JCS8qIHJlc3RvcmUgaXQsIGluIGNhc2UgZHluYW1pY19pcnFfaW5pdCBjbGVhciBpdCAqLwotCQlpZiAoZGVzY19uZXcpCi0JCQlkZXNjX25ldy0+Y2hpcF9kYXRhID0gY2ZnX25ldzsKLQl9CisJaWYgKGlycSA+IDApCisJCWR5bmFtaWNfaXJxX2luaXRfa2VlcF9jaGlwX2RhdGEoaXJxKTsKKwogCXJldHVybiBpcnE7CiB9CiAKQEAgLTMyNTUsMjAgKzMyOTksMTMgQEAKIHZvaWQgZGVzdHJveV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBpcnFfY2ZnICpjZmc7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOwogCi0JLyogc3RvcmUgaXQsIGluIGNhc2UgZHluYW1pY19pcnFfY2xlYW51cCBjbGVhciBpdCAqLwotCWRlc2MgPSBpcnFfdG9fZGVzYyhpcnEpOwotCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKLQlkeW5hbWljX2lycV9jbGVhbnVwKGlycSk7Ci0JLyogY29ubmVjdCBiYWNrIGlycV9jZmcgKi8KLQlkZXNjLT5jaGlwX2RhdGEgPSBjZmc7CisJZHluYW1pY19pcnFfY2xlYW51cF9rZWVwX2NoaXBfZGF0YShpcnEpOwogCiAJZnJlZV9pcnRlKGlycSk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZlY3Rvcl9sb2NrLCBmbGFncyk7Ci0JX19jbGVhcl9pcnFfdmVjdG9yKGlycSwgY2ZnKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKKwlfX2NsZWFyX2lycV92ZWN0b3IoaXJxLCBnZXRfaXJxX2NoaXBfZGF0YShpcnEpKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTM4MDUsOSArMzg0Miw5IEBACiAJdW5pb24gSU9fQVBJQ19yZWdfMDEJcmVnXzAxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmVnXzAxLmJpdHMuZW50cmllczsKIH0KQEAgLTM4OTAsNyArMzkyNyw3IEBACiAJLyoKIAkgKiBJUlFzIDwgMTYgYXJlIGFscmVhZHkgaW4gdGhlIGlycV8yX3BpbltdIG1hcAogCSAqLwotCWlmIChpcnEgPj0gbnJfbGVnYWN5X2lycXMpIHsKKwlpZiAoaXJxID49IGxlZ2FjeV9waWMtPm5yX2xlZ2FjeV9pcnFzKSB7CiAJCWNmZyA9IGRlc2MtPmNoaXBfZGF0YTsKIAkJaWYgKGFkZF9waW5fdG9faXJxX25vZGVfbm9wYW5pYyhjZmcsIG5vZGUsIGlvYXBpYywgcGluKSkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAiY2FuIG5vdCBhZGQgcGluICVkIGZvciBpcnEgJWRcbiIsCkBAIC0zOTY5LDkgKzQwMDYsOSBAQAogCWlmIChwaHlzaWRzX2VtcHR5KGFwaWNfaWRfbWFwKSkKIAkJYXBpYy0+aW9hcGljX3BoeXNfaWRfbWFwKCZwaHlzX2NwdV9wcmVzZW50X21hcCwgJmFwaWNfaWRfbWFwKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAlyZWdfMDAucmF3ID0gaW9fYXBpY19yZWFkKGlvYXBpYywgMCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAogCWlmIChhcGljX2lkID49IGdldF9waHlzaWNhbF9icm9hZGNhc3QoKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJJT0FQSUNbJWRdOiBJbnZhbGlkIGFwaWNfaWQgJWQsIHRyeWluZyAiCkBAIC00MDA1LDEwICs0MDQyLDEwIEBACiAJaWYgKHJlZ18wMC5iaXRzLklEICE9IGFwaWNfaWQpIHsKIAkJcmVnXzAwLmJpdHMuSUQgPSBhcGljX2lkOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJCWlvX2FwaWNfd3JpdGUoaW9hcGljLCAwLCByZWdfMDAucmF3KTsKIAkJcmVnXzAwLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDApOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworCQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKIAogCQkvKiBTYW5pdHkgY2hlY2sgKi8KIAkJaWYgKHJlZ18wMC5iaXRzLklEICE9IGFwaWNfaWQpIHsKQEAgLTQwMjksOSArNDA2Niw5IEBACiAJdW5pb24gSU9fQVBJQ19yZWdfMDEJcmVnXzAxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAJcmVnXzAxLnJhdyA9IGlvX2FwaWNfcmVhZChpb2FwaWMsIDEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmVnXzAxLmJpdHMudmVyc2lvbjsKIH0KQEAgLTQwNjMsMjcgKzQxMDAsMjMgQEAKICNpZmRlZiBDT05GSUdfU01QCiB2b2lkIF9faW5pdCBzZXR1cF9pb2FwaWNfZGVzdCh2b2lkKQogewotCWludCBwaW4sIGlvYXBpYyA9IDAsIGlycSwgaXJxX2VudHJ5OworCWludCBwaW4sIGlvYXBpYywgaXJxLCBpcnFfZW50cnk7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrOwogCiAJaWYgKHNraXBfaW9hcGljX3NldHVwID09IDEpCiAJCXJldHVybjsKIAotI2lmZGVmIENPTkZJR19BQ1BJCi0JaWYgKCFhY3BpX2Rpc2FibGVkICYmIGFjcGlfaW9hcGljKSB7Ci0JCWlvYXBpYyA9IG1wX2ZpbmRfaW9hcGljKDApOwotCQlpZiAoaW9hcGljIDwgMCkKLQkJCWlvYXBpYyA9IDA7Ci0JfQotI2VuZGlmCi0KKwlmb3IgKGlvYXBpYyA9IDA7IGlvYXBpYyA8IG5yX2lvYXBpY3M7IGlvYXBpYysrKQogCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1tpb2FwaWNdOyBwaW4rKykgewogCQlpcnFfZW50cnkgPSBmaW5kX2lycV9lbnRyeShpb2FwaWMsIHBpbiwgbXBfSU5UKTsKIAkJaWYgKGlycV9lbnRyeSA9PSAtMSkKIAkJCWNvbnRpbnVlOwogCQlpcnEgPSBwaW5fMl9pcnEoaXJxX2VudHJ5LCBpb2FwaWMsIHBpbik7CiAKKwkJaWYgKChpb2FwaWMgPiAwKSAmJiAoaXJxID4gMTYpKQorCQkJY29udGludWU7CisKIAkJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAKIAkJLyoKQEAgLTQyNjgsMyArNDMwMSwyNCBAQAogCiAJbnJfaW9hcGljcysrOwogfQorCisvKiBFbmFibGUgSU9BUElDIGVhcmx5IGp1c3QgZm9yIHN5c3RlbSB0aW1lciAqLwordm9pZCBfX2luaXQgcHJlX2luaXRfYXBpY19JUlEwKHZvaWQpCit7CisJc3RydWN0IGlycV9jZmcgKmNmZzsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CisKKwlwcmludGsoS0VSTl9JTkZPICJFYXJseSBBUElDIHNldHVwIGZvciBzeXN0ZW0gdGltZXIwXG4iKTsKKyNpZm5kZWYgQ09ORklHX1NNUAorCXBoeXNfY3B1X3ByZXNlbnRfbWFwID0gcGh5c2lkX21hc2tfb2ZfcGh5c2lkKGJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCk7CisjZW5kaWYKKwlkZXNjID0gaXJxX3RvX2Rlc2NfYWxsb2Nfbm9kZSgwLCAwKTsKKworCXNldHVwX2xvY2FsX0FQSUMoKTsKKworCWNmZyA9IGlycV9jZmcoMCk7CisJYWRkX3Bpbl90b19pcnFfbm9kZShjZmcsIDAsIDAsIDApOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKDAsICZpb2FwaWNfY2hpcCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOworCisJc2V0dXBfSU9fQVBJQ19pcnEoMCwgMCwgMCwgZGVzYywgMCwgMCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9ubWkuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jCmluZGV4IDAxNTlhNjkuLjhhYTY1YWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL25taS5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIGVycm9yOgogCWlmIChubWlfd2F0Y2hkb2cgPT0gTk1JX0lPX0FQSUMpIHsKIAkJaWYgKCF0aW1lcl90aHJvdWdoXzgyNTkpCi0JCQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKKwkJCWxlZ2FjeV9waWMtPmNoaXAtPm1hc2soMCk7CiAJCW9uX2VhY2hfY3B1KF9fYWNwaV9ubWlfZGlzYWJsZSwgTlVMTCwgMSk7CiAJfQogCkBAIC00MTYsMTMgKzQxNiwxMyBAQAogCiAJLyogV2UgY2FuIGJlIGNhbGxlZCBiZWZvcmUgY2hlY2tfbm1pX3dhdGNoZG9nLCBoZW5jZSBOVUxMIGNoZWNrLiAqLwogCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGNwdSwgdG9fY3B1bWFzayhiYWNrdHJhY2VfbWFzaykpKSB7Ci0JCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobG9jayk7CS8qIFNlcmlhbGlzZSB0aGUgcHJpbnRrcyAqLworCQlzdGF0aWMgREVGSU5FX1JBV19TUElOTE9DSyhsb2NrKTsgLyogU2VyaWFsaXNlIHRoZSBwcmludGtzICovCiAKLQkJc3Bpbl9sb2NrKCZsb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmbG9jayk7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIk5NSSBiYWNrdHJhY2UgZm9yIGNwdSAlZFxuIiwgY3B1KTsKIAkJc2hvd19yZWdzKHJlZ3MpOwogCQlkdW1wX3N0YWNrKCk7Ci0JCXNwaW5fdW5sb2NrKCZsb2NrKTsKKwkJcmF3X3NwaW5fdW5sb2NrKCZsb2NrKTsKIAkJY3B1bWFza19jbGVhcl9jcHUoY3B1LCB0b19jcHVtYXNrKGJhY2t0cmFjZV9tYXNrKSk7CiAKIAkJcmMgPSAxOwpAQCAtNDM4LDggKzQzOCw4IEBACiAJCSAqIEF5aWVlLCBsb29rcyBsaWtlIHRoaXMgQ1BVIGlzIHN0dWNrIC4uLgogCQkgKiB3YWl0IGEgZmV3IElSUXMgKDUgc2Vjb25kcykgYmVmb3JlIGRvaW5nIHRoZSBvb3BzIC4uLgogCQkgKi8KLQkJX190aGlzX2NwdV9pbmMocGVyX2NwdV92YXIoYWxlcnRfY291bnRlcikpOwotCQlpZiAoX190aGlzX2NwdV9yZWFkKHBlcl9jcHVfdmFyKGFsZXJ0X2NvdW50ZXIpKSA9PSA1ICogbm1pX2h6KQorCQlfX3RoaXNfY3B1X2luYyhhbGVydF9jb3VudGVyKTsKKwkJaWYgKF9fdGhpc19jcHVfcmVhZChhbGVydF9jb3VudGVyKSA9PSA1ICogbm1pX2h6KQogCQkJLyoKIAkJCSAqIGRpZV9ubWkgd2lsbCByZXR1cm4gT05MWSBpZiBOT1RJRllfU1RPUCBoYXBwZW5zLi4KIAkJCSAqLwpAQCAtNDQ3LDcgKzQ0Nyw3IEBACiAJCQkJcmVncywgcGFuaWNfb25fdGltZW91dCk7CiAJfSBlbHNlIHsKIAkJX19nZXRfY3B1X3ZhcihsYXN0X2lycV9zdW0pID0gc3VtOwotCQlfX3RoaXNfY3B1X3dyaXRlKHBlcl9jcHVfdmFyKGFsZXJ0X2NvdW50ZXIpLCAwKTsKKwkJX190aGlzX2NwdV93cml0ZShhbGVydF9jb3VudGVyLCAwKTsKIAl9CiAKIAkvKiBzZWUgaWYgdGhlIG5taSB3YXRjaGRvZyB3ZW50IG9mZiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL251bWFxXzMyLmMKaW5kZXggNDdkZDg1Ni4uM2UyODQwMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvbnVtYXFfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9udW1hcV8zMi5jCkBAIC0yNzcsNiArMjc3LDcgQEAKIAkJeDg2X2luaXQubXBwYXJzZS5tcGNfb2VtX3BjaV9idXMgPSBtcGNfb2VtX3BjaV9idXM7CiAJCXg4Nl9pbml0Lm1wcGFyc2UubXBjX29lbV9idXNfaW5mbyA9IG1wY19vZW1fYnVzX2luZm87CiAJCXg4Nl9pbml0LnRpbWVycy50c2NfcHJlX2luaXQgPSBudW1hcV90c2NfaW5pdDsKKwkJeDg2X2luaXQucGNpLmluaXQgPSBwY2lfbnVtYXFfaW5pdDsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9LY29uZmlnIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWcKaW5kZXggZjEzOGM2Yy4uODcwZTZjYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWcKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL0tjb25maWcKQEAgLTEwLDYgKzEwLDIwIEBACiAKIGNvbW1lbnQgIkNQVUZyZXEgcHJvY2Vzc29yIGRyaXZlcnMiCiAKK2NvbmZpZyBYODZfUENDX0NQVUZSRVEKKwl0cmlzdGF0ZSAiUHJvY2Vzc29yIENsb2NraW5nIENvbnRyb2wgaW50ZXJmYWNlIGRyaXZlciIKKwlkZXBlbmRzIG9uIEFDUEkgJiYgQUNQSV9QUk9DRVNTT1IKKwloZWxwCisJICBUaGlzIGRyaXZlciBhZGRzIHN1cHBvcnQgZm9yIHRoZSBQQ0MgaW50ZXJmYWNlLgorCisJICBGb3IgZGV0YWlscywgdGFrZSBhIGxvb2sgYXQ6CisJICA8ZmlsZTpEb2N1bWVudGF0aW9uL2NwdS1mcmVxL3BjYy1jcHVmcmVxLnR4dD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBjYy1jcHVmcmVxLgorCisJICBJZiBpbiBkb3VidCwgc2F5IE4uCisKIGNvbmZpZyBYODZfQUNQSV9DUFVGUkVRCiAJdHJpc3RhdGUgIkFDUEkgUHJvY2Vzc29yIFAtU3RhdGVzIGRyaXZlciIKIAlzZWxlY3QgQ1BVX0ZSRVFfVEFCTEUKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9NYWtlZmlsZQppbmRleCA1MDkyOTZkLi4xODQwYzBhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL01ha2VmaWxlCkBAIC00LDYgKzQsNyBAQAogCiBvYmotJChDT05GSUdfWDg2X1BPV0VSTk9XX0s4KQkJKz0gcG93ZXJub3ctazgubwogb2JqLSQoQ09ORklHX1g4Nl9BQ1BJX0NQVUZSRVEpCQkrPSBhY3BpLWNwdWZyZXEubworb2JqLSQoQ09ORklHX1g4Nl9QQ0NfQ1BVRlJFUSkJCSs9IHBjYy1jcHVmcmVxLm8KIG9iai0kKENPTkZJR19YODZfUE9XRVJOT1dfSzYpCQkrPSBwb3dlcm5vdy1rNi5vCiBvYmotJChDT05GSUdfWDg2X1BPV0VSTk9XX0s3KQkJKz0gcG93ZXJub3ctazcubwogb2JqLSQoQ09ORklHX1g4Nl9MT05HSEFVTCkJCSs9IGxvbmdoYXVsLm8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wY2MtY3B1ZnJlcS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9jcHVmcmVxL3BjYy1jcHVmcmVxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYzNmQyOQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9wY2MtY3B1ZnJlcS5jCkBAIC0wLDAgKzEsNjIwIEBACisvKgorICogIHBjYy1jcHVmcmVxLmMgLSBQcm9jZXNzb3IgQ2xvY2tpbmcgQ29udHJvbCBmaXJtd2FyZSBjcHVmcmVxIGludGVyZmFjZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgUmVkIEhhdCwgTWF0dGhldyBHYXJyZXR0IDxtamdAcmVkaGF0LmNvbT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnksIEwuUC4KKyAqCU5hZ2FuYW5kYSBDaHVtYmFsa2FyIDxuYWdhbmFuZGEuY2h1bWJhbGthckBocC5jb20+CisgKgorICogfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEdPT0QgVElUTEUgb3IgTk9OCisgKiAgSU5GUklOR0VNRU5ULiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisgKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKiB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorCisjaW5jbHVkZSA8YWNwaS9wcm9jZXNzb3IuaD4KKworI2RlZmluZSBQQ0NfVkVSU0lPTiAJIjEuMDAuMDAiCisjZGVmaW5lIFBPTExfTE9PUFMgCTMwMAorCisjZGVmaW5lIENNRF9DT01QTEVURSAJMHgxCisjZGVmaW5lIENNRF9HRVRfRlJFUSAJMHgwCisjZGVmaW5lIENNRF9TRVRfRlJFUSAJMHgxCisKKyNkZWZpbmUgQlVGX1NaCQk0CisKKyNkZWZpbmUgZHByaW50ayhtc2cuLi4pIGNwdWZyZXFfZGVidWdfcHJpbnRrKENQVUZSRVFfREVCVUdfRFJJVkVSLAlcCisJCQkJCSAgICAgInBjYy1jcHVmcmVxIiwgbXNnKQorCitzdHJ1Y3QgcGNjX3JlZ2lzdGVyX3Jlc291cmNlIHsKKwl1OCBkZXNjcmlwdG9yOworCXUxNiBsZW5ndGg7CisJdTggc3BhY2VfaWQ7CisJdTggYml0X3dpZHRoOworCXU4IGJpdF9vZmZzZXQ7CisJdTggYWNjZXNzX3NpemU7CisJdTY0IGFkZHJlc3M7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHBjY19tZW1vcnlfcmVzb3VyY2UgeworCXU4IGRlc2NyaXB0b3I7CisJdTE2IGxlbmd0aDsKKwl1OCBzcGFjZV9pZDsKKwl1OCByZXNvdXJjZV91c2FnZTsKKwl1OCB0eXBlX3NwZWNpZmljOworCXU2NCBncmFudWxhcml0eTsKKwl1NjQgbWluaW11bTsKKwl1NjQgbWF4aW11bTsKKwl1NjQgdHJhbnNsYXRpb25fb2Zmc2V0OworCXU2NCBhZGRyZXNzX2xlbmd0aDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZHJpdmVyIHBjY19jcHVmcmVxX2RyaXZlcjsKKworc3RydWN0IHBjY19oZWFkZXIgeworCXUzMiBzaWduYXR1cmU7CisJdTE2IGxlbmd0aDsKKwl1OCBtYWpvcjsKKwl1OCBtaW5vcjsKKwl1MzIgZmVhdHVyZXM7CisJdTE2IGNvbW1hbmQ7CisJdTE2IHN0YXR1czsKKwl1MzIgbGF0ZW5jeTsKKwl1MzIgbWluaW11bV90aW1lOworCXUzMiBtYXhpbXVtX3RpbWU7CisJdTMyIG5vbWluYWw7CisJdTMyIHRocm90dGxlZF9mcmVxdWVuY3k7CisJdTMyIG1pbmltdW1fZnJlcXVlbmN5OworfTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqcGNjaF92aXJ0X2FkZHI7CitzdGF0aWMgc3RydWN0IHBjY19oZWFkZXIgX19pb21lbSAqcGNjaF9oZHI7CisKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socGNjX2xvY2spOworCitzdGF0aWMgc3RydWN0IGFjcGlfZ2VuZXJpY19hZGRyZXNzIGRvb3JiZWxsOworCitzdGF0aWMgdTY0IGRvb3JiZWxsX3ByZXNlcnZlOworc3RhdGljIHU2NCBkb29yYmVsbF93cml0ZTsKKworc3RhdGljIHU4IE9TQ19VVUlEWzE2XSA9IHsweDYzLCAweDlCLCAweDJDLCAweDlGLCAweDcwLCAweDkxLCAweDQ5LCAweDFmLAorCQkJICAweEJCLCAweDRGLCAweEE1LCAweDk4LCAweDJGLCAweEExLCAweEI1LCAweDQ2fTsKKworc3RydWN0IHBjY19jcHUgeworCXUzMiBpbnB1dF9vZmZzZXQ7CisJdTMyIG91dHB1dF9vZmZzZXQ7Cit9OworCitzdGF0aWMgc3RydWN0IHBjY19jcHUgKnBjY19jcHVfaW5mbzsKKworc3RhdGljIGludCBwY2NfY3B1ZnJlcV92ZXJpZnkoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCit7CisJY3B1ZnJlcV92ZXJpZnlfd2l0aGluX2xpbWl0cyhwb2xpY3ksIHBvbGljeS0+Y3B1aW5mby5taW5fZnJlcSwKKwkJCQkgICAgIHBvbGljeS0+Y3B1aW5mby5tYXhfZnJlcSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwY2NfY21kKHZvaWQpCit7CisJdTY0IGRvb3JiZWxsX3ZhbHVlOworCWludCBpOworCisJYWNwaV9yZWFkKCZkb29yYmVsbF92YWx1ZSwgJmRvb3JiZWxsKTsKKwlhY3BpX3dyaXRlKChkb29yYmVsbF92YWx1ZSAmIGRvb3JiZWxsX3ByZXNlcnZlKSB8IGRvb3JiZWxsX3dyaXRlLAorCQkgICAmZG9vcmJlbGwpOworCisJZm9yIChpID0gMDsgaSA8IFBPTExfTE9PUFM7IGkrKykgeworCQlpZiAoaW9yZWFkMTYoJnBjY2hfaGRyLT5zdGF0dXMpICYgQ01EX0NPTVBMRVRFKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcGNjX2NsZWFyX21hcHBpbmcodm9pZCkKK3sKKwlpZiAocGNjaF92aXJ0X2FkZHIpCisJCWlvdW5tYXAocGNjaF92aXJ0X2FkZHIpOworCXBjY2hfdmlydF9hZGRyID0gTlVMTDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBwY2NfZ2V0X2ZyZXEodW5zaWduZWQgaW50IGNwdSkKK3sKKwlzdHJ1Y3QgcGNjX2NwdSAqcGNjX2NwdV9kYXRhOworCXVuc2lnbmVkIGludCBjdXJyX2ZyZXE7CisJdW5zaWduZWQgaW50IGZyZXFfbGltaXQ7CisJdTE2IHN0YXR1czsKKwl1MzIgaW5wdXRfYnVmZmVyOworCXUzMiBvdXRwdXRfYnVmZmVyOworCisJc3Bpbl9sb2NrKCZwY2NfbG9jayk7CisKKwlkcHJpbnRrKCJnZXQ6IGdldF9mcmVxIGZvciBDUFUgJWRcbiIsIGNwdSk7CisJcGNjX2NwdV9kYXRhID0gcGVyX2NwdV9wdHIocGNjX2NwdV9pbmZvLCBjcHUpOworCisJaW5wdXRfYnVmZmVyID0gMHgxOworCWlvd3JpdGUzMihpbnB1dF9idWZmZXIsCisJCQkocGNjaF92aXJ0X2FkZHIgKyBwY2NfY3B1X2RhdGEtPmlucHV0X29mZnNldCkpOworCWlvd3JpdGUxNihDTURfR0VUX0ZSRVEsICZwY2NoX2hkci0+Y29tbWFuZCk7CisKKwlwY2NfY21kKCk7CisKKwlvdXRwdXRfYnVmZmVyID0KKwkJaW9yZWFkMzIocGNjaF92aXJ0X2FkZHIgKyBwY2NfY3B1X2RhdGEtPm91dHB1dF9vZmZzZXQpOworCisJLyogQ2xlYXIgdGhlIGlucHV0IGJ1ZmZlciAtIHdlIGFyZSBkb25lIHdpdGggdGhlIGN1cnJlbnQgY29tbWFuZCAqLworCW1lbXNldF9pbygocGNjaF92aXJ0X2FkZHIgKyBwY2NfY3B1X2RhdGEtPmlucHV0X29mZnNldCksIDAsIEJVRl9TWik7CisKKwlzdGF0dXMgPSBpb3JlYWQxNigmcGNjaF9oZHItPnN0YXR1cyk7CisJaWYgKHN0YXR1cyAhPSBDTURfQ09NUExFVEUpIHsKKwkJZHByaW50aygiZ2V0OiBGQUlMRUQ6IGZvciBDUFUgJWQsIHN0YXR1cyBpcyAlZFxuIiwKKwkJCWNwdSwgc3RhdHVzKTsKKwkJZ290byBjbWRfaW5jb21wbGV0ZTsKKwl9CisJaW93cml0ZTE2KDAsICZwY2NoX2hkci0+c3RhdHVzKTsKKwljdXJyX2ZyZXEgPSAoKChpb3JlYWQzMigmcGNjaF9oZHItPm5vbWluYWwpICogKG91dHB1dF9idWZmZXIgJiAweGZmKSkKKwkJCS8gMTAwKSAqIDEwMDApOworCisJZHByaW50aygiZ2V0OiBTVUNDRVNTOiAodmlydHVhbCkgb3V0cHV0X29mZnNldCBmb3IgY3B1ICVkIGlzICIKKwkJIjB4JXgsIGNvbnRhaW5zIGEgdmFsdWUgb2Y6IDB4JXguIFNwZWVkIGlzOiAlZCBNSHpcbiIsCisJCWNwdSwgKHBjY2hfdmlydF9hZGRyICsgcGNjX2NwdV9kYXRhLT5vdXRwdXRfb2Zmc2V0KSwKKwkJb3V0cHV0X2J1ZmZlciwgY3Vycl9mcmVxKTsKKworCWZyZXFfbGltaXQgPSAob3V0cHV0X2J1ZmZlciA+PiA4KSAmIDB4ZmY7CisJaWYgKGZyZXFfbGltaXQgIT0gMHhmZikgeworCQlkcHJpbnRrKCJnZXQ6IGZyZXF1ZW5jeSBmb3IgY3B1ICVkIGlzIGJlaW5nIHRlbXBvcmFyaWx5IgorCQkJIiBjYXBwZWQgYXQgJWRcbiIsIGNwdSwgY3Vycl9mcmVxKTsKKwl9CisKKwlzcGluX3VubG9jaygmcGNjX2xvY2spOworCXJldHVybiBjdXJyX2ZyZXE7CisKK2NtZF9pbmNvbXBsZXRlOgorCWlvd3JpdGUxNigwLCAmcGNjaF9oZHItPnN0YXR1cyk7CisJc3Bpbl91bmxvY2soJnBjY19sb2NrKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBwY2NfY3B1ZnJlcV90YXJnZXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3ksCisJCQkgICAgICB1bnNpZ25lZCBpbnQgdGFyZ2V0X2ZyZXEsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVsYXRpb24pCit7CisJc3RydWN0IHBjY19jcHUgKnBjY19jcHVfZGF0YTsKKwlzdHJ1Y3QgY3B1ZnJlcV9mcmVxcyBmcmVxczsKKwl1MTYgc3RhdHVzOworCXUzMiBpbnB1dF9idWZmZXI7CisJaW50IGNwdTsKKworCXNwaW5fbG9jaygmcGNjX2xvY2spOworCWNwdSA9IHBvbGljeS0+Y3B1OworCXBjY19jcHVfZGF0YSA9IHBlcl9jcHVfcHRyKHBjY19jcHVfaW5mbywgY3B1KTsKKworCWRwcmludGsoInRhcmdldDogQ1BVICVkIHNob3VsZCBnbyB0byB0YXJnZXQgZnJlcTogJWQgIgorCQkiKHZpcnR1YWwpIGlucHV0X29mZnNldCBpcyAweCV4XG4iLAorCQljcHUsIHRhcmdldF9mcmVxLAorCQkocGNjaF92aXJ0X2FkZHIgKyBwY2NfY3B1X2RhdGEtPmlucHV0X29mZnNldCkpOworCisJZnJlcXMubmV3ID0gdGFyZ2V0X2ZyZXE7CisJZnJlcXMuY3B1ID0gY3B1OworCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BSRUNIQU5HRSk7CisKKwlpbnB1dF9idWZmZXIgPSAweDEgfCAoKCh0YXJnZXRfZnJlcSAqIDEwMCkKKwkJCSAgICAgICAvIChpb3JlYWQzMigmcGNjaF9oZHItPm5vbWluYWwpICogMTAwMCkpIDw8IDgpOworCWlvd3JpdGUzMihpbnB1dF9idWZmZXIsCisJCQkocGNjaF92aXJ0X2FkZHIgKyBwY2NfY3B1X2RhdGEtPmlucHV0X29mZnNldCkpOworCWlvd3JpdGUxNihDTURfU0VUX0ZSRVEsICZwY2NoX2hkci0+Y29tbWFuZCk7CisKKwlwY2NfY21kKCk7CisKKwkvKiBDbGVhciB0aGUgaW5wdXQgYnVmZmVyIC0gd2UgYXJlIGRvbmUgd2l0aCB0aGUgY3VycmVudCBjb21tYW5kICovCisJbWVtc2V0X2lvKChwY2NoX3ZpcnRfYWRkciArIHBjY19jcHVfZGF0YS0+aW5wdXRfb2Zmc2V0KSwgMCwgQlVGX1NaKTsKKworCXN0YXR1cyA9IGlvcmVhZDE2KCZwY2NoX2hkci0+c3RhdHVzKTsKKwlpZiAoc3RhdHVzICE9IENNRF9DT01QTEVURSkgeworCQlkcHJpbnRrKCJ0YXJnZXQ6IEZBSUxFRCBmb3IgY3B1ICVkLCB3aXRoIHN0YXR1czogMHgleFxuIiwKKwkJCWNwdSwgc3RhdHVzKTsKKwkJZ290byBjbWRfaW5jb21wbGV0ZTsKKwl9CisJaW93cml0ZTE2KDAsICZwY2NoX2hkci0+c3RhdHVzKTsKKworCWNwdWZyZXFfbm90aWZ5X3RyYW5zaXRpb24oJmZyZXFzLCBDUFVGUkVRX1BPU1RDSEFOR0UpOworCWRwcmludGsoInRhcmdldDogd2FzIFNVQ0NFU1NGVUwgZm9yIGNwdSAlZFxuIiwgY3B1KTsKKwlzcGluX3VubG9jaygmcGNjX2xvY2spOworCisJcmV0dXJuIDA7CisKK2NtZF9pbmNvbXBsZXRlOgorCWlvd3JpdGUxNigwLCAmcGNjaF9oZHItPnN0YXR1cyk7CisJc3Bpbl91bmxvY2soJnBjY19sb2NrKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBwY2NfZ2V0X29mZnNldChpbnQgY3B1KQoreworCWFjcGlfc3RhdHVzIHN0YXR1czsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0ge0FDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMfTsKKwl1bmlvbiBhY3BpX29iamVjdCAqcGNjcCwgKm9mZnNldDsKKwlzdHJ1Y3QgcGNjX2NwdSAqcGNjX2NwdV9kYXRhOworCXN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHI7CisJaW50IHJldCA9IDA7CisKKwlwciA9IHBlcl9jcHUocHJvY2Vzc29ycywgY3B1KTsKKwlwY2NfY3B1X2RhdGEgPSBwZXJfY3B1X3B0cihwY2NfY3B1X2luZm8sIGNwdSk7CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChwci0+aGFuZGxlLCAiUENDUCIsIE5VTEwsICZidWZmZXIpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlwY2NwID0gYnVmZmVyLnBvaW50ZXI7CisJaWYgKCFwY2NwIHx8IHBjY3AtPnR5cGUgIT0gQUNQSV9UWVBFX1BBQ0tBR0UpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZTsKKwl9OworCisJb2Zmc2V0ID0gJihwY2NwLT5wYWNrYWdlLmVsZW1lbnRzWzBdKTsKKwlpZiAoIW9mZnNldCB8fCBvZmZzZXQtPnR5cGUgIT0gQUNQSV9UWVBFX0lOVEVHRVIpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlwY2NfY3B1X2RhdGEtPmlucHV0X29mZnNldCA9IG9mZnNldC0+aW50ZWdlci52YWx1ZTsKKworCW9mZnNldCA9ICYocGNjcC0+cGFja2FnZS5lbGVtZW50c1sxXSk7CisJaWYgKCFvZmZzZXQgfHwgb2Zmc2V0LT50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJcGNjX2NwdV9kYXRhLT5vdXRwdXRfb2Zmc2V0ID0gb2Zmc2V0LT5pbnRlZ2VyLnZhbHVlOworCisJbWVtc2V0X2lvKChwY2NoX3ZpcnRfYWRkciArIHBjY19jcHVfZGF0YS0+aW5wdXRfb2Zmc2V0KSwgMCwgQlVGX1NaKTsKKwltZW1zZXRfaW8oKHBjY2hfdmlydF9hZGRyICsgcGNjX2NwdV9kYXRhLT5vdXRwdXRfb2Zmc2V0KSwgMCwgQlVGX1NaKTsKKworCWRwcmludGsoInBjY19nZXRfb2Zmc2V0OiBmb3IgQ1BVICVkOiBwY2NfY3B1X2RhdGEgIgorCQkiaW5wdXRfb2Zmc2V0OiAweCV4LCBwY2NfY3B1X2RhdGEgb3V0cHV0X29mZnNldDogMHgleFxuIiwKKwkJY3B1LCBwY2NfY3B1X2RhdGEtPmlucHV0X29mZnNldCwgcGNjX2NwdV9kYXRhLT5vdXRwdXRfb2Zmc2V0KTsKK291dF9mcmVlOgorCWtmcmVlKGJ1ZmZlci5wb2ludGVyKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9faW5pdCBwY2NfY3B1ZnJlcV9kb19vc2MoYWNwaV9oYW5kbGUgKmhhbmRsZSkKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgaW5wdXQ7CisJc3RydWN0IGFjcGlfYnVmZmVyIG91dHB1dCA9IHtBQ1BJX0FMTE9DQVRFX0JVRkZFUiwgTlVMTH07CisJdW5pb24gYWNwaV9vYmplY3QgaW5fcGFyYW1zWzRdOworCXVuaW9uIGFjcGlfb2JqZWN0ICpvdXRfb2JqOworCXUzMiBjYXBhYmlsaXRpZXNbMl07CisJdTMyIGVycm9yczsKKwl1MzIgc3VwcG9ydGVkOworCWludCByZXQgPSAwOworCisJaW5wdXQuY291bnQgPSA0OworCWlucHV0LnBvaW50ZXIgPSBpbl9wYXJhbXM7CisJaW5wdXQuY291bnQgPSA0OworCWlucHV0LnBvaW50ZXIgPSBpbl9wYXJhbXM7CisJaW5fcGFyYW1zWzBdLnR5cGUgICAgICAgICAgICAgICA9IEFDUElfVFlQRV9CVUZGRVI7CisJaW5fcGFyYW1zWzBdLmJ1ZmZlci5sZW5ndGggICAgICA9IDE2OworCWluX3BhcmFtc1swXS5idWZmZXIucG9pbnRlciAgICAgPSBPU0NfVVVJRDsKKwlpbl9wYXJhbXNbMV0udHlwZSAgICAgICAgICAgICAgID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJaW5fcGFyYW1zWzFdLmludGVnZXIudmFsdWUgICAgICA9IDE7CisJaW5fcGFyYW1zWzJdLnR5cGUgICAgICAgICAgICAgICA9IEFDUElfVFlQRV9JTlRFR0VSOworCWluX3BhcmFtc1syXS5pbnRlZ2VyLnZhbHVlICAgICAgPSAyOworCWluX3BhcmFtc1szXS50eXBlICAgICAgICAgICAgICAgPSBBQ1BJX1RZUEVfQlVGRkVSOworCWluX3BhcmFtc1szXS5idWZmZXIubGVuZ3RoICAgICAgPSA4OworCWluX3BhcmFtc1szXS5idWZmZXIucG9pbnRlciAgICAgPSAodTggKikmY2FwYWJpbGl0aWVzOworCisJY2FwYWJpbGl0aWVzWzBdID0gT1NDX1FVRVJZX0VOQUJMRTsKKwljYXBhYmlsaXRpZXNbMV0gPSAweDE7CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdCgqaGFuZGxlLCAiX09TQyIsICZpbnB1dCwgJm91dHB1dCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghb3V0cHV0Lmxlbmd0aCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlvdXRfb2JqID0gb3V0cHV0LnBvaW50ZXI7CisJaWYgKG91dF9vYmotPnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCWVycm9ycyA9ICooKHUzMiAqKW91dF9vYmotPmJ1ZmZlci5wb2ludGVyKSAmIH4oMSA8PCAwKTsKKwlpZiAoZXJyb3JzKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJc3VwcG9ydGVkID0gKigodTMyICopKG91dF9vYmotPmJ1ZmZlci5wb2ludGVyICsgNCkpOworCWlmICghKHN1cHBvcnRlZCAmIDB4MSkpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlrZnJlZShvdXRwdXQucG9pbnRlcik7CisJY2FwYWJpbGl0aWVzWzBdID0gMHgwOworCWNhcGFiaWxpdGllc1sxXSA9IDB4MTsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KCpoYW5kbGUsICJfT1NDIiwgJmlucHV0LCAmb3V0cHV0KTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKCFvdXRwdXQubGVuZ3RoKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW91dF9vYmogPSBvdXRwdXQucG9pbnRlcjsKKwlpZiAob3V0X29iai0+dHlwZSAhPSBBQ1BJX1RZUEVfQlVGRkVSKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJZXJyb3JzID0gKigodTMyICopb3V0X29iai0+YnVmZmVyLnBvaW50ZXIpICYgfigxIDw8IDApOworCWlmIChlcnJvcnMpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisKKwlzdXBwb3J0ZWQgPSAqKCh1MzIgKikob3V0X29iai0+YnVmZmVyLnBvaW50ZXIgKyA0KSk7CisJaWYgKCEoc3VwcG9ydGVkICYgMHgxKSkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9mcmVlOworCX0KKworb3V0X2ZyZWU6CisJa2ZyZWUob3V0cHV0LnBvaW50ZXIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHBjY19jcHVmcmVxX3Byb2JlKHZvaWQpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXN0cnVjdCBhY3BpX2J1ZmZlciBvdXRwdXQgPSB7QUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OworCXN0cnVjdCBwY2NfbWVtb3J5X3Jlc291cmNlICptZW1fcmVzb3VyY2U7CisJc3RydWN0IHBjY19yZWdpc3Rlcl9yZXNvdXJjZSAqcmVnX3Jlc291cmNlOworCXVuaW9uIGFjcGlfb2JqZWN0ICpvdXRfb2JqLCAqbWVtYmVyOworCWFjcGlfaGFuZGxlIGhhbmRsZSwgb3NjX2hhbmRsZTsKKwlpbnQgcmV0ID0gMDsKKworCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShOVUxMLCAiXFxfU0IiLCAmaGFuZGxlKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiAtRU5PREVWOworCisJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGhhbmRsZSwgIl9PU0MiLCAmb3NjX2hhbmRsZSk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpKSB7CisJCXJldCA9IHBjY19jcHVmcmVxX2RvX29zYygmb3NjX2hhbmRsZSk7CisJCWlmIChyZXQpCisJCQlkcHJpbnRrKCJwcm9iZTogX09TQyBldmFsdWF0aW9uIGRpZCBub3Qgc3VjY2VlZFxuIik7CisJCS8qIEZpcm13YXJlJ3MgdXNlIG9mIF9PU0MgaXMgb3B0aW9uYWwgKi8KKwkJcmV0ID0gMDsKKwl9CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsICJQQ0NIIiwgTlVMTCwgJm91dHB1dCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW91dF9vYmogPSBvdXRwdXQucG9pbnRlcjsKKwlpZiAob3V0X29iai0+dHlwZSAhPSBBQ1BJX1RZUEVfUEFDS0FHRSkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCW1lbWJlciA9ICZvdXRfb2JqLT5wYWNrYWdlLmVsZW1lbnRzWzBdOworCWlmIChtZW1iZXItPnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9mcmVlOworCX0KKworCW1lbV9yZXNvdXJjZSA9IChzdHJ1Y3QgcGNjX21lbW9yeV9yZXNvdXJjZSAqKW1lbWJlci0+YnVmZmVyLnBvaW50ZXI7CisKKwlkcHJpbnRrKCJwcm9iZTogbWVtX3Jlc291cmNlIGRlc2NyaXB0b3I6IDB4JXgsIgorCQkiIGxlbmd0aDogJWQsIHNwYWNlX2lkOiAlZCwgcmVzb3VyY2VfdXNhZ2U6ICVkLCIKKwkJIiB0eXBlX3NwZWNpZmljOiAlZCwgZ3JhbnVsYXJpdHk6IDB4JWxseCwiCisJCSIgbWluaW11bTogMHglbGx4LCBtYXhpbXVtOiAweCVsbHgsIgorCQkiIHRyYW5zbGF0aW9uX29mZnNldDogMHglbGx4LCBhZGRyZXNzX2xlbmd0aDogMHglbGx4XG4iLAorCQltZW1fcmVzb3VyY2UtPmRlc2NyaXB0b3IsIG1lbV9yZXNvdXJjZS0+bGVuZ3RoLAorCQltZW1fcmVzb3VyY2UtPnNwYWNlX2lkLCBtZW1fcmVzb3VyY2UtPnJlc291cmNlX3VzYWdlLAorCQltZW1fcmVzb3VyY2UtPnR5cGVfc3BlY2lmaWMsIG1lbV9yZXNvdXJjZS0+Z3JhbnVsYXJpdHksCisJCW1lbV9yZXNvdXJjZS0+bWluaW11bSwgbWVtX3Jlc291cmNlLT5tYXhpbXVtLAorCQltZW1fcmVzb3VyY2UtPnRyYW5zbGF0aW9uX29mZnNldCwKKwkJbWVtX3Jlc291cmNlLT5hZGRyZXNzX2xlbmd0aCk7CisKKwlpZiAobWVtX3Jlc291cmNlLT5zcGFjZV9pZCAhPSBBQ1BJX0FEUl9TUEFDRV9TWVNURU1fTUVNT1JZKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCisJcGNjaF92aXJ0X2FkZHIgPSBpb3JlbWFwX25vY2FjaGUobWVtX3Jlc291cmNlLT5taW5pbXVtLAorCQkJCQltZW1fcmVzb3VyY2UtPmFkZHJlc3NfbGVuZ3RoKTsKKwlpZiAocGNjaF92aXJ0X2FkZHIgPT0gTlVMTCkgeworCQlkcHJpbnRrKCJwcm9iZTogY291bGQgbm90IG1hcCBzaGFyZWQgbWVtIHJlZ2lvblxuIik7CisJCWdvdG8gb3V0X2ZyZWU7CisJfQorCXBjY2hfaGRyID0gcGNjaF92aXJ0X2FkZHI7CisKKwlkcHJpbnRrKCJwcm9iZTogUENDSCBoZWFkZXIgKHZpcnR1YWwpIGFkZHI6IDB4JXBcbiIsIHBjY2hfaGRyKTsKKwlkcHJpbnRrKCJwcm9iZTogUENDSCBoZWFkZXIgaXMgYXQgcGh5c2ljYWwgYWRkcmVzczogMHglbGx4LCIKKwkJIiBzaWduYXR1cmU6IDB4JXgsIGxlbmd0aDogJWQgYnl0ZXMsIG1ham9yOiAlZCwgbWlub3I6ICVkLCIKKwkJIiBzdXBwb3J0ZWQgZmVhdHVyZXM6IDB4JXgsIGNvbW1hbmQgZmllbGQ6IDB4JXgsIgorCQkiIHN0YXR1cyBmaWVsZDogMHgleCwgbm9taW5hbCBsYXRlbmN5OiAlZCB1c1xuIiwKKwkJbWVtX3Jlc291cmNlLT5taW5pbXVtLCBpb3JlYWQzMigmcGNjaF9oZHItPnNpZ25hdHVyZSksCisJCWlvcmVhZDE2KCZwY2NoX2hkci0+bGVuZ3RoKSwgaW9yZWFkOCgmcGNjaF9oZHItPm1ham9yKSwKKwkJaW9yZWFkOCgmcGNjaF9oZHItPm1pbm9yKSwgaW9yZWFkMzIoJnBjY2hfaGRyLT5mZWF0dXJlcyksCisJCWlvcmVhZDE2KCZwY2NoX2hkci0+Y29tbWFuZCksIGlvcmVhZDE2KCZwY2NoX2hkci0+c3RhdHVzKSwKKwkJaW9yZWFkMzIoJnBjY2hfaGRyLT5sYXRlbmN5KSk7CisKKwlkcHJpbnRrKCJwcm9iZTogbWluIHRpbWUgYmV0d2VlbiBjb21tYW5kczogJWQgdXMsIgorCQkiIG1heCB0aW1lIGJldHdlZW4gY29tbWFuZHM6ICVkIHVzLCIKKwkJIiBub21pbmFsIENQVSBmcmVxdWVuY3k6ICVkIE1IeiwiCisJCSIgbWluaW11bSBDUFUgZnJlcXVlbmN5OiAlZCBNSHosIgorCQkiIG1pbmltdW0gQ1BVIGZyZXF1ZW5jeSB3aXRob3V0IHRocm90dGxpbmc6ICVkIE1IelxuIiwKKwkJaW9yZWFkMzIoJnBjY2hfaGRyLT5taW5pbXVtX3RpbWUpLAorCQlpb3JlYWQzMigmcGNjaF9oZHItPm1heGltdW1fdGltZSksCisJCWlvcmVhZDMyKCZwY2NoX2hkci0+bm9taW5hbCksCisJCWlvcmVhZDMyKCZwY2NoX2hkci0+dGhyb3R0bGVkX2ZyZXF1ZW5jeSksCisJCWlvcmVhZDMyKCZwY2NoX2hkci0+bWluaW11bV9mcmVxdWVuY3kpKTsKKworCW1lbWJlciA9ICZvdXRfb2JqLT5wYWNrYWdlLmVsZW1lbnRzWzFdOworCWlmIChtZW1iZXItPnR5cGUgIT0gQUNQSV9UWVBFX0JVRkZFUikgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIHBjY2hfZnJlZTsKKwl9CisKKwlyZWdfcmVzb3VyY2UgPSAoc3RydWN0IHBjY19yZWdpc3Rlcl9yZXNvdXJjZSAqKW1lbWJlci0+YnVmZmVyLnBvaW50ZXI7CisKKwlkb29yYmVsbC5zcGFjZV9pZCA9IHJlZ19yZXNvdXJjZS0+c3BhY2VfaWQ7CisJZG9vcmJlbGwuYml0X3dpZHRoID0gcmVnX3Jlc291cmNlLT5iaXRfd2lkdGg7CisJZG9vcmJlbGwuYml0X29mZnNldCA9IHJlZ19yZXNvdXJjZS0+Yml0X29mZnNldDsKKwlkb29yYmVsbC5hY2Nlc3Nfd2lkdGggPSA2NDsKKwlkb29yYmVsbC5hZGRyZXNzID0gcmVnX3Jlc291cmNlLT5hZGRyZXNzOworCisJZHByaW50aygicHJvYmU6IGRvb3JiZWxsOiBzcGFjZV9pZCBpcyAlZCwgYml0X3dpZHRoIGlzICVkLCAiCisJCSJiaXRfb2Zmc2V0IGlzICVkLCBhY2Nlc3Nfd2lkdGggaXMgJWQsIGFkZHJlc3MgaXMgMHglbGx4XG4iLAorCQlkb29yYmVsbC5zcGFjZV9pZCwgZG9vcmJlbGwuYml0X3dpZHRoLCBkb29yYmVsbC5iaXRfb2Zmc2V0LAorCQlkb29yYmVsbC5hY2Nlc3Nfd2lkdGgsIHJlZ19yZXNvdXJjZS0+YWRkcmVzcyk7CisKKwltZW1iZXIgPSAmb3V0X29iai0+cGFja2FnZS5lbGVtZW50c1syXTsKKwlpZiAobWVtYmVyLT50eXBlICE9IEFDUElfVFlQRV9JTlRFR0VSKSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gcGNjaF9mcmVlOworCX0KKworCWRvb3JiZWxsX3ByZXNlcnZlID0gbWVtYmVyLT5pbnRlZ2VyLnZhbHVlOworCisJbWVtYmVyID0gJm91dF9vYmotPnBhY2thZ2UuZWxlbWVudHNbM107CisJaWYgKG1lbWJlci0+dHlwZSAhPSBBQ1BJX1RZUEVfSU5URUdFUikgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIHBjY2hfZnJlZTsKKwl9CisKKwlkb29yYmVsbF93cml0ZSA9IG1lbWJlci0+aW50ZWdlci52YWx1ZTsKKworCWRwcmludGsoInByb2JlOiBkb29yYmVsbF9wcmVzZXJ2ZTogMHglbGx4LCIKKwkJIiBkb29yYmVsbF93cml0ZTogMHglbGx4XG4iLAorCQlkb29yYmVsbF9wcmVzZXJ2ZSwgZG9vcmJlbGxfd3JpdGUpOworCisJcGNjX2NwdV9pbmZvID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBwY2NfY3B1KTsKKwlpZiAoIXBjY19jcHVfaW5mbykgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIHBjY2hfZnJlZTsKKwl9CisKKwlwcmludGsoS0VSTl9ERUJVRyAicGNjLWNwdWZyZXE6ICh2JXMpIGRyaXZlciBsb2FkZWQgd2l0aCBmcmVxdWVuY3kiCisJICAgICAgICIgbGltaXRzOiAlZCBNSHosICVkIE1IelxuIiwgUENDX1ZFUlNJT04sCisJICAgICAgIGlvcmVhZDMyKCZwY2NoX2hkci0+bWluaW11bV9mcmVxdWVuY3kpLAorCSAgICAgICBpb3JlYWQzMigmcGNjaF9oZHItPm5vbWluYWwpKTsKKwlrZnJlZShvdXRwdXQucG9pbnRlcik7CisJcmV0dXJuIHJldDsKK3BjY2hfZnJlZToKKwlwY2NfY2xlYXJfbWFwcGluZygpOworb3V0X2ZyZWU6CisJa2ZyZWUob3V0cHV0LnBvaW50ZXIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGNjX2NwdWZyZXFfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCit7CisJdW5zaWduZWQgaW50IGNwdSA9IHBvbGljeS0+Y3B1OworCXVuc2lnbmVkIGludCByZXN1bHQgPSAwOworCisJaWYgKCFwY2NoX3ZpcnRfYWRkcikgeworCQlyZXN1bHQgPSAtMTsKKwkJZ290byBwY2NoX251bGw7CisJfQorCisJcmVzdWx0ID0gcGNjX2dldF9vZmZzZXQoY3B1KTsKKwlpZiAocmVzdWx0KSB7CisJCWRwcmludGsoImluaXQ6IFBDQ1AgZXZhbHVhdGlvbiBmYWlsZWRcbiIpOworCQlnb3RvIGZyZWU7CisJfQorCisJcG9saWN5LT5tYXggPSBwb2xpY3ktPmNwdWluZm8ubWF4X2ZyZXEgPQorCQlpb3JlYWQzMigmcGNjaF9oZHItPm5vbWluYWwpICogMTAwMDsKKwlwb2xpY3ktPm1pbiA9IHBvbGljeS0+Y3B1aW5mby5taW5fZnJlcSA9CisJCWlvcmVhZDMyKCZwY2NoX2hkci0+bWluaW11bV9mcmVxdWVuY3kpICogMTAwMDsKKwlwb2xpY3ktPmN1ciA9IHBjY19nZXRfZnJlcShjcHUpOworCisJZHByaW50aygiaW5pdDogcG9saWN5LT5tYXggaXMgJWQsIHBvbGljeS0+bWluIGlzICVkXG4iLAorCQlwb2xpY3ktPm1heCwgcG9saWN5LT5taW4pOworCisJcmV0dXJuIDA7CitmcmVlOgorCXBjY19jbGVhcl9tYXBwaW5nKCk7CisJZnJlZV9wZXJjcHUocGNjX2NwdV9pbmZvKTsKK3BjY2hfbnVsbDoKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IHBjY19jcHVmcmVxX2NwdV9leGl0KHN0cnVjdCBjcHVmcmVxX3BvbGljeSAqcG9saWN5KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGNwdWZyZXFfZHJpdmVyIHBjY19jcHVmcmVxX2RyaXZlciA9IHsKKwkuZmxhZ3MgPSBDUFVGUkVRX0NPTlNUX0xPT1BTLAorCS5nZXQgPSBwY2NfZ2V0X2ZyZXEsCisJLnZlcmlmeSA9IHBjY19jcHVmcmVxX3ZlcmlmeSwKKwkudGFyZ2V0ID0gcGNjX2NwdWZyZXFfdGFyZ2V0LAorCS5pbml0ID0gcGNjX2NwdWZyZXFfY3B1X2luaXQsCisJLmV4aXQgPSBwY2NfY3B1ZnJlcV9jcHVfZXhpdCwKKwkubmFtZSA9ICJwY2MtY3B1ZnJlcSIsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwY2NfY3B1ZnJlcV9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCWlmIChhY3BpX2Rpc2FibGVkKQorCQlyZXR1cm4gMDsKKworCXJldCA9IHBjY19jcHVmcmVxX3Byb2JlKCk7CisJaWYgKHJldCkgeworCQlkcHJpbnRrKCJwY2NfY3B1ZnJlcV9pbml0OiBQQ0NIIGV2YWx1YXRpb24gZmFpbGVkXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigmcGNjX2NwdWZyZXFfZHJpdmVyKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwY2NfY3B1ZnJlcV9leGl0KHZvaWQpCit7CisJY3B1ZnJlcV91bnJlZ2lzdGVyX2RyaXZlcigmcGNjX2NwdWZyZXFfZHJpdmVyKTsKKworCXBjY19jbGVhcl9tYXBwaW5nKCk7CisKKwlmcmVlX3BlcmNwdShwY2NfY3B1X2luZm8pOworfQorCitNT0RVTEVfQVVUSE9SKCJNYXR0aGV3IEdhcnJldHQsIE5hZ2EgQ2h1bWJhbGthciIpOworTU9EVUxFX1ZFUlNJT04oUENDX1ZFUlNJT04pOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQcm9jZXNzb3IgQ2xvY2tpbmcgQ29udHJvbCBpbnRlcmZhY2UgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK2xhdGVfaW5pdGNhbGwocGNjX2NwdWZyZXFfaW5pdCk7Cittb2R1bGVfZXhpdChwY2NfY3B1ZnJlcV9leGl0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCmluZGV4IGVkZGIxYmQuLmIzZWViNjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYwpAQCAtOTAzLDcgKzkwMyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgc3lzZnNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgc3lzZnNfb3BzID0gewogCS5zaG93ICAgPSBzaG93LAogCS5zdG9yZSAgPSBzdG9yZSwKIH07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCmluZGV4IGE4YWFjZDQuLjI4Y2JhNDYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZS5jCkBAIC0yMDQ0LDYgKzIwNDQsNyBAQAogCQlzdHJ1Y3QgbWNlX2JhbmsgKmIgPSAmbWNlX2JhbmtzW2ldOwogCQlzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYSA9ICZiLT5hdHRyOwogCisJCXN5c2ZzX2F0dHJfaW5pdCgmYS0+YXR0cik7CiAJCWEtPmF0dHIubmFtZQk9IGItPmF0dHJuYW1lOwogCQlzbnByaW50ZihiLT5hdHRybmFtZSwgQVRUUl9MRU4sICJiYW5rJWQiLCBpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZC5jCmluZGV4IDgzYTNkMWYuLmNkYTkzMmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kLmMKQEAgLTM4OCw3ICszODgsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIHRocmVzaG9sZF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyB0aHJlc2hvbGRfb3BzID0gewogCS5zaG93CQkJPSBzaG93LAogCS5zdG9yZQkJCT0gc3RvcmUsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jbGVhbnVwLmMKaW5kZXggMDliMTY5OC4uMDYxMzBiNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2NsZWFudXAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jCkBAIC0yMiwxMCArMjIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KLSNpbmNsdWRlIDxsaW51eC9zb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgva3ZtX3BhcmEuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5nZS5oPgogCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9lODIwLmg+CkBAIC0zNCwxMSArMzQsNiBAQAogCiAjaW5jbHVkZSAibXRyci5oIgogCi1zdHJ1Y3QgcmVzX3JhbmdlIHsKLQl1bnNpZ25lZCBsb25nCXN0YXJ0OwotCXVuc2lnbmVkIGxvbmcJZW5kOwotfTsKLQogc3RydWN0IHZhcl9tdHJyX3JhbmdlX3N0YXRlIHsKIAl1bnNpZ25lZCBsb25nCWJhc2VfcGZuOwogCXVuc2lnbmVkIGxvbmcJc2l6ZV9wZm47CkBAIC01Niw3ICs1MSw3IEBACiAvKiBTaG91bGQgYmUgcmVsYXRlZCB0byBNVFJSX1ZBUl9SQU5HRVMgbnVtcyAqLwogI2RlZmluZSBSQU5HRV9OVU0JCQkJMjU2CiAKLXN0YXRpYyBzdHJ1Y3QgcmVzX3JhbmdlIF9faW5pdGRhdGEJCXJhbmdlW1JBTkdFX05VTV07CitzdGF0aWMgc3RydWN0IHJhbmdlIF9faW5pdGRhdGEJCXJhbmdlW1JBTkdFX05VTV07CiBzdGF0aWMgaW50IF9faW5pdGRhdGEJCQkJbnJfcmFuZ2U7CiAKIHN0YXRpYyBzdHJ1Y3QgdmFyX210cnJfcmFuZ2Vfc3RhdGUgX19pbml0ZGF0YQlyYW5nZV9zdGF0ZVtSQU5HRV9OVU1dOwpAQCAtNjQsMTUyICs1OSwxMSBAQAogc3RhdGljIGludCBfX2luaXRkYXRhIGRlYnVnX3ByaW50OwogI2RlZmluZSBEcHJpbnRrKHguLi4pIGRvIHsgaWYgKGRlYnVnX3ByaW50KSBwcmludGsoS0VSTl9ERUJVRyB4KTsgfSB3aGlsZSAoMCkKIAotCi1zdGF0aWMgaW50IF9faW5pdAotYWRkX3JhbmdlKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UsCi0JICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQkvKiBPdXQgb2Ygc2xvdHM6ICovCi0JaWYgKG5yX3JhbmdlID49IFJBTkdFX05VTSkKLQkJcmV0dXJuIG5yX3JhbmdlOwotCi0JcmFuZ2VbbnJfcmFuZ2VdLnN0YXJ0ID0gc3RhcnQ7Ci0JcmFuZ2VbbnJfcmFuZ2VdLmVuZCA9IGVuZDsKLQotCW5yX3JhbmdlKys7Ci0KLQlyZXR1cm4gbnJfcmFuZ2U7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci1hZGRfcmFuZ2Vfd2l0aF9tZXJnZShzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCWludCBpOwotCi0JLyogVHJ5IHRvIG1lcmdlIGl0IHdpdGggb2xkIG9uZTogKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQ7Ci0JCXVuc2lnbmVkIGxvbmcgY29tbW9uX3N0YXJ0LCBjb21tb25fZW5kOwotCi0JCWlmICghcmFuZ2VbaV0uZW5kKQotCQkJY29udGludWU7Ci0KLQkJY29tbW9uX3N0YXJ0ID0gbWF4KHJhbmdlW2ldLnN0YXJ0LCBzdGFydCk7Ci0JCWNvbW1vbl9lbmQgPSBtaW4ocmFuZ2VbaV0uZW5kLCBlbmQpOwotCQlpZiAoY29tbW9uX3N0YXJ0ID4gY29tbW9uX2VuZCArIDEpCi0JCQljb250aW51ZTsKLQotCQlmaW5hbF9zdGFydCA9IG1pbihyYW5nZVtpXS5zdGFydCwgc3RhcnQpOwotCQlmaW5hbF9lbmQgPSBtYXgocmFuZ2VbaV0uZW5kLCBlbmQpOwotCi0JCXJhbmdlW2ldLnN0YXJ0ID0gZmluYWxfc3RhcnQ7Ci0JCXJhbmdlW2ldLmVuZCA9ICBmaW5hbF9lbmQ7Ci0JCXJldHVybiBucl9yYW5nZTsKLQl9Ci0KLQkvKiBOZWVkIHRvIGFkZCBpdDogKi8KLQlyZXR1cm4gYWRkX3JhbmdlKHJhbmdlLCBucl9yYW5nZSwgc3RhcnQsIGVuZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdAotc3VidHJhY3RfcmFuZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCWludCBpLCBqOwotCi0JZm9yIChqID0gMDsgaiA8IFJBTkdFX05VTTsgaisrKSB7Ci0JCWlmICghcmFuZ2Vbal0uZW5kKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHN0YXJ0IDw9IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA+PSByYW5nZVtqXS5lbmQpIHsKLQkJCXJhbmdlW2pdLnN0YXJ0ID0gMDsKLQkJCXJhbmdlW2pdLmVuZCA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChzdGFydCA8PSByYW5nZVtqXS5zdGFydCAmJiBlbmQgPCByYW5nZVtqXS5lbmQgJiYKLQkJICAgIHJhbmdlW2pdLnN0YXJ0IDwgZW5kICsgMSkgewotCQkJcmFuZ2Vbal0uc3RhcnQgPSBlbmQgKyAxOwotCQkJY29udGludWU7Ci0JCX0KLQotCi0JCWlmIChzdGFydCA+IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA+PSByYW5nZVtqXS5lbmQgJiYKLQkJICAgIHJhbmdlW2pdLmVuZCA+IHN0YXJ0IC0gMSkgewotCQkJcmFuZ2Vbal0uZW5kID0gc3RhcnQgLSAxOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoc3RhcnQgPiByYW5nZVtqXS5zdGFydCAmJiBlbmQgPCByYW5nZVtqXS5lbmQpIHsKLQkJCS8qIEZpbmQgdGhlIG5ldyBzcGFyZTogKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBSQU5HRV9OVU07IGkrKykgewotCQkJCWlmIChyYW5nZVtpXS5lbmQgPT0gMCkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoaSA8IFJBTkdFX05VTSkgewotCQkJCXJhbmdlW2ldLmVuZCA9IHJhbmdlW2pdLmVuZDsKLQkJCQlyYW5nZVtpXS5zdGFydCA9IGVuZCArIDE7Ci0JCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX0VSUiAicnVuIG9mIHNsb3QgaW4gcmFuZ2VzXG4iKTsKLQkJCX0KLQkJCXJhbmdlW2pdLmVuZCA9IHN0YXJ0IC0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBjbXBfcmFuZ2UoY29uc3Qgdm9pZCAqeDEsIGNvbnN0IHZvaWQgKngyKQotewotCWNvbnN0IHN0cnVjdCByZXNfcmFuZ2UgKnIxID0geDE7Ci0JY29uc3Qgc3RydWN0IHJlc19yYW5nZSAqcjIgPSB4MjsKLQlsb25nIHN0YXJ0MSwgc3RhcnQyOwotCi0Jc3RhcnQxID0gcjEtPnN0YXJ0OwotCXN0YXJ0MiA9IHIyLT5zdGFydDsKLQotCXJldHVybiBzdGFydDEgLSBzdGFydDI7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGNsZWFuX3NvcnRfcmFuZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBheikKLXsKLQlpbnQgaSwgaiwgayA9IGF6IC0gMSwgbnJfcmFuZ2UgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IGs7IGkrKykgewotCQlpZiAocmFuZ2VbaV0uZW5kKQotCQkJY29udGludWU7Ci0JCWZvciAoaiA9IGs7IGogPiBpOyBqLS0pIHsKLQkJCWlmIChyYW5nZVtqXS5lbmQpIHsKLQkJCQlrID0gajsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAoaiA9PSBpKQotCQkJYnJlYWs7Ci0JCXJhbmdlW2ldLnN0YXJ0ID0gcmFuZ2Vba10uc3RhcnQ7Ci0JCXJhbmdlW2ldLmVuZCAgID0gcmFuZ2Vba10uZW5kOwotCQlyYW5nZVtrXS5zdGFydCA9IDA7Ci0JCXJhbmdlW2tdLmVuZCAgID0gMDsKLQkJay0tOwotCX0KLQkvKiBjb3VudCBpdCAqLwotCWZvciAoaSA9IDA7IGkgPCBhejsgaSsrKSB7Ci0JCWlmICghcmFuZ2VbaV0uZW5kKSB7Ci0JCQlucl9yYW5nZSA9IGk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qIHNvcnQgdGhlbSAqLwotCXNvcnQocmFuZ2UsIG5yX3JhbmdlLCBzaXplb2Yoc3RydWN0IHJlc19yYW5nZSksIGNtcF9yYW5nZSwgTlVMTCk7Ci0KLQlyZXR1cm4gbnJfcmFuZ2U7Ci19Ci0KICNkZWZpbmUgQklPU19CVUdfTVNHIEtFUk5fV0FSTklORyBcCiAJIldBUk5JTkc6IEJJT1MgYnVnOiBWQVIgTVRSUiAlZCBjb250YWlucyBzdHJhbmdlIFVDIGVudHJ5IHVuZGVyIDFNLCBjaGVjayB3aXRoIHlvdXIgc3lzdGVtIHZlbmRvciFcbiIKIAogc3RhdGljIGludCBfX2luaXQKLXg4Nl9nZXRfbXRycl9tZW1fcmFuZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwKK3g4Nl9nZXRfbXRycl9tZW1fcmFuZ2Uoc3RydWN0IHJhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlLAogCQkgICAgICAgdW5zaWduZWQgbG9uZyBleHRyYV9yZW1vdmVfYmFzZSwKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgZXh0cmFfcmVtb3ZlX3NpemUpCiB7CkBAIC0yMjMsMTQgKzc3LDE0IEBACiAJCQljb250aW51ZTsKIAkJYmFzZSA9IHJhbmdlX3N0YXRlW2ldLmJhc2VfcGZuOwogCQlzaXplID0gcmFuZ2Vfc3RhdGVbaV0uc2l6ZV9wZm47Ci0JCW5yX3JhbmdlID0gYWRkX3JhbmdlX3dpdGhfbWVyZ2UocmFuZ2UsIG5yX3JhbmdlLCBiYXNlLAotCQkJCQkJYmFzZSArIHNpemUgLSAxKTsKKwkJbnJfcmFuZ2UgPSBhZGRfcmFuZ2Vfd2l0aF9tZXJnZShyYW5nZSwgUkFOR0VfTlVNLCBucl9yYW5nZSwKKwkJCQkJCWJhc2UsIGJhc2UgKyBzaXplKTsKIAl9CiAJaWYgKGRlYnVnX3ByaW50KSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICJBZnRlciBXQiBjaGVja2luZ1xuIik7CiAJCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgTUFQIFBGTjogJTAxNmx4IC0gJTAxNmx4XG4iLAotCQkJCSByYW5nZVtpXS5zdGFydCwgcmFuZ2VbaV0uZW5kICsgMSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBNQVAgUEZOOiAlMDE2bGx4IC0gJTAxNmxseFxuIiwKKwkJCQkgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCk7CiAJfQogCiAJLyogVGFrZSBvdXQgVUMgcmFuZ2VzOiAqLwpAQCAtMjUyLDE5ICsxMDYsMTkgQEAKIAkJCXNpemUgLT0gKDE8PCgyMC1QQUdFX1NISUZUKSkgLSBiYXNlOwogCQkJYmFzZSA9IDE8PCgyMC1QQUdFX1NISUZUKTsKIAkJfQotCQlzdWJ0cmFjdF9yYW5nZShyYW5nZSwgYmFzZSwgYmFzZSArIHNpemUgLSAxKTsKKwkJc3VidHJhY3RfcmFuZ2UocmFuZ2UsIFJBTkdFX05VTSwgYmFzZSwgYmFzZSArIHNpemUpOwogCX0KIAlpZiAoZXh0cmFfcmVtb3ZlX3NpemUpCi0JCXN1YnRyYWN0X3JhbmdlKHJhbmdlLCBleHRyYV9yZW1vdmVfYmFzZSwKLQkJCQkgZXh0cmFfcmVtb3ZlX2Jhc2UgKyBleHRyYV9yZW1vdmVfc2l6ZSAgLSAxKTsKKwkJc3VidHJhY3RfcmFuZ2UocmFuZ2UsIFJBTkdFX05VTSwgZXh0cmFfcmVtb3ZlX2Jhc2UsCisJCQkJIGV4dHJhX3JlbW92ZV9iYXNlICsgZXh0cmFfcmVtb3ZlX3NpemUpOwogCiAJaWYgIChkZWJ1Z19wcmludCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiQWZ0ZXIgVUMgY2hlY2tpbmdcbiIpOwogCQlmb3IgKGkgPSAwOyBpIDwgUkFOR0VfTlVNOyBpKyspIHsKIAkJCWlmICghcmFuZ2VbaV0uZW5kKQogCQkJCWNvbnRpbnVlOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgTUFQIFBGTjogJTAxNmx4IC0gJTAxNmx4XG4iLAotCQkJCSByYW5nZVtpXS5zdGFydCwgcmFuZ2VbaV0uZW5kICsgMSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBNQVAgUEZOOiAlMDE2bGx4IC0gJTAxNmxseFxuIiwKKwkJCQkgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCk7CiAJCX0KIAl9CiAKQEAgLTI3MywyNiArMTI3LDIyIEBACiAJaWYgIChkZWJ1Z19wcmludCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiQWZ0ZXIgc29ydGluZ1xuIik7CiAJCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgTUFQIFBGTjogJTAxNmx4IC0gJTAxNmx4XG4iLAotCQkJCSByYW5nZVtpXS5zdGFydCwgcmFuZ2VbaV0uZW5kICsgMSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBNQVAgUEZOOiAlMDE2bGx4IC0gJTAxNmxseFxuIiwKKwkJCQkgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCk7CiAJfQogCi0JLyogY2xlYXIgdGhvc2UgaXMgbm90IHVzZWQgKi8KLQlmb3IgKGkgPSBucl9yYW5nZTsgaSA8IFJBTkdFX05VTTsgaSsrKQotCQltZW1zZXQoJnJhbmdlW2ldLCAwLCBzaXplb2YocmFuZ2VbaV0pKTsKLQogCXJldHVybiBucl9yYW5nZTsKIH0KIAogI2lmZGVmIENPTkZJR19NVFJSX1NBTklUSVpFUgogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgc3VtX3JhbmdlcyhzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlKQorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHN1bV9yYW5nZXMoc3RydWN0IHJhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlKQogewogCXVuc2lnbmVkIGxvbmcgc3VtID0gMDsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQotCQlzdW0gKz0gcmFuZ2VbaV0uZW5kICsgMSAtIHJhbmdlW2ldLnN0YXJ0OworCQlzdW0gKz0gcmFuZ2VbaV0uZW5kIC0gcmFuZ2VbaV0uc3RhcnQ7CiAKIAlyZXR1cm4gc3VtOwogfQpAQCAtNjIxLDcgKzQ3MSw3IEBACiBlYXJseV9wYXJhbSgibXRycl9zcGFyZV9yZWdfbnIiLCBwYXJzZV9tdHJyX3NwYXJlX3JlZyk7CiAKIHN0YXRpYyBpbnQgX19pbml0Ci14ODZfc2V0dXBfdmFyX210cnJzKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UsCit4ODZfc2V0dXBfdmFyX210cnJzKHN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwKIAkJICAgIHU2NCBjaHVua19zaXplLCB1NjQgZ3Jhbl9zaXplKQogewogCXN0cnVjdCB2YXJfbXRycl9zdGF0ZSB2YXJfc3RhdGU7CkBAIC02MzksNyArNDg5LDcgQEAKIAkvKiBXcml0ZSB0aGUgcmFuZ2U6ICovCiAJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspIHsKIAkJc2V0X3Zhcl9tdHJyX3JhbmdlKCZ2YXJfc3RhdGUsIHJhbmdlW2ldLnN0YXJ0LAotCQkJCSAgIHJhbmdlW2ldLmVuZCAtIHJhbmdlW2ldLnN0YXJ0ICsgMSk7CisJCQkJICAgcmFuZ2VbaV0uZW5kIC0gcmFuZ2VbaV0uc3RhcnQpOwogCX0KIAogCS8qIFdyaXRlIHRoZSBsYXN0IHJhbmdlOiAqLwpAQCAtNzQyLDcgKzU5Miw3IEBACiAJCSAgICAgIHVuc2lnbmVkIGxvbmcgeF9yZW1vdmVfYmFzZSwKIAkJICAgICAgdW5zaWduZWQgbG9uZyB4X3JlbW92ZV9zaXplLCBpbnQgaSkKIHsKLQlzdGF0aWMgc3RydWN0IHJlc19yYW5nZSByYW5nZV9uZXdbUkFOR0VfTlVNXTsKKwlzdGF0aWMgc3RydWN0IHJhbmdlIHJhbmdlX25ld1tSQU5HRV9OVU1dOwogCXVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3Vtc19uZXc7CiAJc3RhdGljIGludCBucl9yYW5nZV9uZXc7CiAJaW50IG51bV9yZWc7CkBAIC04NjksMTAgKzcxOSwxMCBAQAogCSAqIFswLCAxTSkgc2hvdWxkIGFsd2F5cyBiZSBjb3ZlcmVkIGJ5IHZhciBtdHJyIHdpdGggV0IKIAkgKiBhbmQgZml4ZWQgbXRycnMgc2hvdWxkIHRha2UgZWZmZWN0IGJlZm9yZSB2YXIgbXRyciBmb3IgaXQ6CiAJICovCi0JbnJfcmFuZ2UgPSBhZGRfcmFuZ2Vfd2l0aF9tZXJnZShyYW5nZSwgbnJfcmFuZ2UsIDAsCi0JCQkJCSgxVUxMPDwoMjAgLSBQQUdFX1NISUZUKSkgLSAxKTsKKwlucl9yYW5nZSA9IGFkZF9yYW5nZV93aXRoX21lcmdlKHJhbmdlLCBSQU5HRV9OVU0sIG5yX3JhbmdlLCAwLAorCQkJCQkxVUxMPDwoMjAgLSBQQUdFX1NISUZUKSk7CiAJLyogU29ydCB0aGUgcmFuZ2VzOiAqLwotCXNvcnQocmFuZ2UsIG5yX3JhbmdlLCBzaXplb2Yoc3RydWN0IHJlc19yYW5nZSksIGNtcF9yYW5nZSwgTlVMTCk7CisJc29ydF9yYW5nZShyYW5nZSwgbnJfcmFuZ2UpOwogCiAJcmFuZ2Vfc3VtcyA9IHN1bV9yYW5nZXMocmFuZ2UsIG5yX3JhbmdlKTsKIAlwcmludGsoS0VSTl9JTkZPICJ0b3RhbCBSQU0gY292ZXJlZDogJWxkTVxuIiwKQEAgLTEwODksOSArOTM5LDkgQEAKIAlucl9yYW5nZSA9IDA7CiAJaWYgKG10cnJfdG9tMikgewogCQlyYW5nZVtucl9yYW5nZV0uc3RhcnQgPSAoMVVMTDw8KDMyIC0gUEFHRV9TSElGVCkpOwotCQlyYW5nZVtucl9yYW5nZV0uZW5kID0gKG10cnJfdG9tMiA+PiBQQUdFX1NISUZUKSAtIDE7Ci0JCWlmIChoaWdoZXN0X3BmbiA8IHJhbmdlW25yX3JhbmdlXS5lbmQgKyAxKQotCQkJaGlnaGVzdF9wZm4gPSByYW5nZVtucl9yYW5nZV0uZW5kICsgMTsKKwkJcmFuZ2VbbnJfcmFuZ2VdLmVuZCA9IG10cnJfdG9tMiA+PiBQQUdFX1NISUZUOworCQlpZiAoaGlnaGVzdF9wZm4gPCByYW5nZVtucl9yYW5nZV0uZW5kKQorCQkJaGlnaGVzdF9wZm4gPSByYW5nZVtucl9yYW5nZV0uZW5kOwogCQlucl9yYW5nZSsrOwogCX0KIAlucl9yYW5nZSA9IHg4Nl9nZXRfbXRycl9tZW1fcmFuZ2UocmFuZ2UsIG5yX3JhbmdlLCAwLCAwKTsKQEAgLTExMDMsMTUgKzk1MywxNSBAQAogCiAJLyogQ2hlY2sgdGhlIGhvbGVzOiAqLwogCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZSAtIDE7IGkrKykgewotCQlpZiAocmFuZ2VbaV0uZW5kICsgMSA8IHJhbmdlW2krMV0uc3RhcnQpCi0JCQl0b3RhbF90cmltX3NpemUgKz0gcmVhbF90cmltX21lbW9yeShyYW5nZVtpXS5lbmQgKyAxLAorCQlpZiAocmFuZ2VbaV0uZW5kIDwgcmFuZ2VbaSsxXS5zdGFydCkKKwkJCXRvdGFsX3RyaW1fc2l6ZSArPSByZWFsX3RyaW1fbWVtb3J5KHJhbmdlW2ldLmVuZCwKIAkJCQkJCQkgICAgcmFuZ2VbaSsxXS5zdGFydCk7CiAJfQogCiAJLyogQ2hlY2sgdGhlIHRvcDogKi8KIAlpID0gbnJfcmFuZ2UgLSAxOwotCWlmIChyYW5nZVtpXS5lbmQgKyAxIDwgZW5kX3BmbikKLQkJdG90YWxfdHJpbV9zaXplICs9IHJlYWxfdHJpbV9tZW1vcnkocmFuZ2VbaV0uZW5kICsgMSwKKwlpZiAocmFuZ2VbaV0uZW5kIDwgZW5kX3BmbikKKwkJdG90YWxfdHJpbV9zaXplICs9IHJlYWxfdHJpbV9tZW1vcnkocmFuZ2VbaV0uZW5kLAogCQkJCQkJCSBlbmRfcGZuKTsKIAogCWlmICh0b3RhbF90cmltX3NpemUpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCmluZGV4IGZlNDYyMmUuLjc5NTU2YmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYwpAQCAtMTQ1LDYgKzE0NSw3IEBACiAKIC8qKgogICogaXBpX2hhbmRsZXIgLSBTeW5jaHJvbmlzYXRpb24gaGFuZGxlci4gRXhlY3V0ZWQgYnkgIm90aGVyIiBDUFVzLgorICogQGluZm86IHBvaW50ZXIgdG8gbXRyciBjb25maWd1cmF0aW9uIGRhdGEKICAqCiAgKiBSZXR1cm5zIG5vdGhpbmcuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvcGVyZl9ldmVudC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKaW5kZXggNjQxY2NiOS4uYjFmYmRlZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50LmMKQEAgLTY3Niw3ICs2NzYsNyBAQAogCQkJaWYgKGMtPndlaWdodCAhPSB3KQogCQkJCWNvbnRpbnVlOwogCi0JCQlmb3JfZWFjaF9iaXQoaiwgYy0+aWR4bXNrLCBYODZfUE1DX0lEWF9NQVgpIHsKKwkJCWZvcl9lYWNoX3NldF9iaXQoaiwgYy0+aWR4bXNrLCBYODZfUE1DX0lEWF9NQVgpIHsKIAkJCQlpZiAoIXRlc3RfYml0KGosIHVzZWRfbWFzaykpCiAJCQkJCWJyZWFrOwogCQkJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9wZXJmX2V2ZW50X2ludGVsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYwppbmRleCBjZjY1OTBjLi45NzdlNzU0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3BlcmZfZXZlbnRfaW50ZWwuYwpAQCAtNzU3LDcgKzc1Nyw3IEBACiAKIAlpbmNfaXJxX3N0YXQoYXBpY19wZXJmX2lycXMpOwogCWFjayA9IHN0YXR1czsKLQlmb3JfZWFjaF9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSZzdGF0dXMsIFg4Nl9QTUNfSURYX01BWCkgeworCWZvcl9lYWNoX3NldF9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSZzdGF0dXMsIFg4Nl9QTUNfSURYX01BWCkgewogCQlzdHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQgPSBjcHVjLT5ldmVudHNbYml0XTsKIAogCQljbGVhcl9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSAmc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCmluZGV4IGE5NjZiNzUuLjc0MGI0NDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2U4MjAuYwpAQCAtMTIsMjEgKzEyLDEzIEBACiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUtbWFwLmg+CiAKLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KICNpbmNsdWRlIDxhc20vcHJvdG8uaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vdHJhbXBvbGluZS5oPgogCiAvKgogICogVGhlIGU4MjAgbWFwIGlzIHRoZSBtYXAgdGhhdCBnZXRzIG1vZGlmaWVkIGUuZy4gd2l0aCBjb21tYW5kIGxpbmUgcGFyYW1ldGVycwpAQCAtNzMwLDI4OCArNzIyLDYgQEAKICNlbmRpZgogCiAvKgotICogRWFybHkgcmVzZXJ2ZWQgbWVtb3J5IGFyZWFzLgotICovCi0jZGVmaW5lIE1BWF9FQVJMWV9SRVMgMzIKLQotc3RydWN0IGVhcmx5X3JlcyB7Ci0JdTY0IHN0YXJ0LCBlbmQ7Ci0JY2hhciBuYW1lWzE2XTsKLQljaGFyIG92ZXJsYXBfb2s7Ci19Owotc3RhdGljIHN0cnVjdCBlYXJseV9yZXMgZWFybHlfcmVzW01BWF9FQVJMWV9SRVNdIF9faW5pdGRhdGEgPSB7Ci0JeyAwLCBQQUdFX1NJWkUsICJCSU9TIGRhdGEgcGFnZSIsIDEgfSwJLyogQklPUyBkYXRhIHBhZ2UgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19YODZfMzIpICYmIGRlZmluZWQoQ09ORklHX1g4Nl9UUkFNUE9MSU5FKQotCS8qCi0JICogQnV0IGZpcnN0IHBpbmNoIGEgZmV3IGZvciB0aGUgc3RhY2svdHJhbXBvbGluZSBzdHVmZgotCSAqIEZJWE1FOiBEb24ndCBuZWVkIHRoZSBleHRyYSBwYWdlIGF0IDRLLCBidXQgbmVlZCB0byBmaXgKLQkgKiB0cmFtcG9saW5lIGJlZm9yZSByZW1vdmluZyBpdC4gKHNlZSB0aGUgR0RUIHN0dWZmKQotCSAqLwotCXsgUEFHRV9TSVpFLCBQQUdFX1NJWkUgKyBQQUdFX1NJWkUsICJFWCBUUkFNUE9MSU5FIiwgMSB9LAotI2VuZGlmCi0KLQl7fQotfTsKLQotc3RhdGljIGludCBfX2luaXQgZmluZF9vdmVybGFwcGVkX2Vhcmx5KHU2NCBzdGFydCwgdTY0IGVuZCkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgZWFybHlfcmVzICpyOwotCi0JZm9yIChpID0gMDsgaSA8IE1BWF9FQVJMWV9SRVMgJiYgZWFybHlfcmVzW2ldLmVuZDsgaSsrKSB7Ci0JCXIgPSAmZWFybHlfcmVzW2ldOwotCQlpZiAoZW5kID4gci0+c3RhcnQgJiYgc3RhcnQgPCByLT5lbmQpCi0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gaTsKLX0KLQotLyoKLSAqIERyb3AgdGhlIGktdGggcmFuZ2UgZnJvbSB0aGUgZWFybHkgcmVzZXJ2YXRpb24gbWFwLAotICogYnkgY29weWluZyBhbnkgaGlnaGVyIHJhbmdlcyBkb3duIG9uZSBvdmVyIGl0LCBhbmQKLSAqIGNsZWFyaW5nIHdoYXQgaGFkIGJlZW4gdGhlIGxhc3Qgc2xvdC4KLSAqLwotc3RhdGljIHZvaWQgX19pbml0IGRyb3BfcmFuZ2UoaW50IGkpCi17Ci0JaW50IGo7Ci0KLQlmb3IgKGogPSBpICsgMTsgaiA8IE1BWF9FQVJMWV9SRVMgJiYgZWFybHlfcmVzW2pdLmVuZDsgaisrKQotCQk7Ci0KLQltZW1tb3ZlKCZlYXJseV9yZXNbaV0sICZlYXJseV9yZXNbaSArIDFdLAotCSAgICAgICAoaiAtIDEgLSBpKSAqIHNpemVvZihzdHJ1Y3QgZWFybHlfcmVzKSk7Ci0KLQllYXJseV9yZXNbaiAtIDFdLmVuZCA9IDA7Ci19Ci0KLS8qCi0gKiBTcGxpdCBhbnkgZXhpc3RpbmcgcmFuZ2VzIHRoYXQ6Ci0gKiAgMSkgYXJlIG1hcmtlZCAnb3ZlcmxhcF9vaycsIGFuZAotICogIDIpIG92ZXJsYXAgd2l0aCB0aGUgc3RhdGVkIHJhbmdlIFtzdGFydCwgZW5kKQotICogaW50byB3aGF0ZXZlciBwb3J0aW9uIChpZiBhbnkpIG9mIHRoZSBleGlzdGluZyByYW5nZSBpcyBlbnRpcmVseQotICogYmVsb3cgb3IgZW50aXJlbHkgYWJvdmUgdGhlIHN0YXRlZCByYW5nZS4gIERyb3AgdGhlIHBvcnRpb24KLSAqIG9mIHRoZSBleGlzdGluZyByYW5nZSB0aGF0IG92ZXJsYXBzIHdpdGggdGhlIHN0YXRlZCByYW5nZSwKLSAqIHdoaWNoIHdpbGwgYWxsb3cgdGhlIGNhbGxlciBvZiB0aGlzIHJvdXRpbmUgdG8gdGhlbiBhZGQgdGhhdAotICogc3RhdGVkIHJhbmdlIHdpdGhvdXQgY29uZmxpY3Rpbmcgd2l0aCBhbnkgZXhpc3RpbmcgcmFuZ2UuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBkcm9wX292ZXJsYXBzX3RoYXRfYXJlX29rKHU2NCBzdGFydCwgdTY0IGVuZCkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgZWFybHlfcmVzICpyOwotCXU2NCBsb3dlcl9zdGFydCwgbG93ZXJfZW5kOwotCXU2NCB1cHBlcl9zdGFydCwgdXBwZXJfZW5kOwotCWNoYXIgbmFtZVsxNl07Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0VBUkxZX1JFUyAmJiBlYXJseV9yZXNbaV0uZW5kOyBpKyspIHsKLQkJciA9ICZlYXJseV9yZXNbaV07Ci0KLQkJLyogQ29udGludWUgcGFzdCBub24tb3ZlcmxhcHBpbmcgcmFuZ2VzICovCi0JCWlmIChlbmQgPD0gci0+c3RhcnQgfHwgc3RhcnQgPj0gci0+ZW5kKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogTGVhdmUgbm9uLW9rIG92ZXJsYXBzIGFzIGlzOyBsZXQgY2FsbGVyCi0JCSAqIHBhbmljICJPdmVybGFwcGluZyBlYXJseSByZXNlcnZhdGlvbnMiCi0JCSAqIHdoZW4gaXQgaGl0cyB0aGlzIG92ZXJsYXAuCi0JCSAqLwotCQlpZiAoIXItPm92ZXJsYXBfb2spCi0JCQlyZXR1cm47Ci0KLQkJLyoKLQkJICogV2UgaGF2ZSBhbiBvayBvdmVybGFwLiAgV2Ugd2lsbCBkcm9wIGl0IGZyb20gdGhlIGVhcmx5Ci0JCSAqIHJlc2VydmF0aW9uIG1hcCwgYW5kIGFkZCBiYWNrIGluIGFueSBub24tb3ZlcmxhcHBpbmcKLQkJICogcG9ydGlvbnMgKGxvd2VyIG9yIHVwcGVyKSBhcyBzZXBhcmF0ZSwgb3ZlcmxhcF9vaywKLQkJICogbm9uLW92ZXJsYXBwaW5nIHJhbmdlcy4KLQkJICovCi0KLQkJLyogMS4gTm90ZSBhbnkgbm9uLW92ZXJsYXBwaW5nIChsb3dlciBvciB1cHBlcikgcmFuZ2VzLiAqLwotCQlzdHJuY3B5KG5hbWUsIHItPm5hbWUsIHNpemVvZihuYW1lKSAtIDEpOwotCi0JCWxvd2VyX3N0YXJ0ID0gbG93ZXJfZW5kID0gMDsKLQkJdXBwZXJfc3RhcnQgPSB1cHBlcl9lbmQgPSAwOwotCQlpZiAoci0+c3RhcnQgPCBzdGFydCkgewotCQkgCWxvd2VyX3N0YXJ0ID0gci0+c3RhcnQ7Ci0JCQlsb3dlcl9lbmQgPSBzdGFydDsKLQkJfQotCQlpZiAoci0+ZW5kID4gZW5kKSB7Ci0JCQl1cHBlcl9zdGFydCA9IGVuZDsKLQkJCXVwcGVyX2VuZCA9IHItPmVuZDsKLQkJfQotCi0JCS8qIDIuIERyb3AgdGhlIG9yaWdpbmFsIG9rIG92ZXJsYXBwaW5nIHJhbmdlICovCi0JCWRyb3BfcmFuZ2UoaSk7Ci0KLQkJaS0tOwkJLyogcmVzdW1lIGZvci1sb29wIG9uIGNvcGllZCBkb3duIGVudHJ5ICovCi0KLQkJLyogMy4gQWRkIGJhY2sgaW4gYW55IG5vbi1vdmVybGFwcGluZyByYW5nZXMuICovCi0JCWlmIChsb3dlcl9lbmQpCi0JCQlyZXNlcnZlX2Vhcmx5X292ZXJsYXBfb2sobG93ZXJfc3RhcnQsIGxvd2VyX2VuZCwgbmFtZSk7Ci0JCWlmICh1cHBlcl9lbmQpCi0JCQlyZXNlcnZlX2Vhcmx5X292ZXJsYXBfb2sodXBwZXJfc3RhcnQsIHVwcGVyX2VuZCwgbmFtZSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgX19yZXNlcnZlX2Vhcmx5KHU2NCBzdGFydCwgdTY0IGVuZCwgY2hhciAqbmFtZSwKLQkJCQkJCWludCBvdmVybGFwX29rKQotewotCWludCBpOwotCXN0cnVjdCBlYXJseV9yZXMgKnI7Ci0KLQlpID0gZmluZF9vdmVybGFwcGVkX2Vhcmx5KHN0YXJ0LCBlbmQpOwotCWlmIChpID49IE1BWF9FQVJMWV9SRVMpCi0JCXBhbmljKCJUb28gbWFueSBlYXJseSByZXNlcnZhdGlvbnMiKTsKLQlyID0gJmVhcmx5X3Jlc1tpXTsKLQlpZiAoci0+ZW5kKQotCQlwYW5pYygiT3ZlcmxhcHBpbmcgZWFybHkgcmVzZXJ2YXRpb25zICIKLQkJICAgICAgIiVsbHgtJWxseCAlcyB0byAlbGx4LSVsbHggJXNcbiIsCi0JCSAgICAgIHN0YXJ0LCBlbmQgLSAxLCBuYW1lP25hbWU6IiIsIHItPnN0YXJ0LAotCQkgICAgICByLT5lbmQgLSAxLCByLT5uYW1lKTsKLQlyLT5zdGFydCA9IHN0YXJ0OwotCXItPmVuZCA9IGVuZDsKLQlyLT5vdmVybGFwX29rID0gb3ZlcmxhcF9vazsKLQlpZiAobmFtZSkKLQkJc3RybmNweShyLT5uYW1lLCBuYW1lLCBzaXplb2Yoci0+bmFtZSkgLSAxKTsKLX0KLQotLyoKLSAqIEEgZmV3IGVhcmx5IHJlc2VydnRhdGlvbnMgY29tZSBoZXJlLgotICoKLSAqIFRoZSAnb3ZlcmxhcF9vaycgaW4gdGhlIG5hbWUgb2YgdGhpcyByb3V0aW5lIGRvZXMgLW5vdC0gbWVhbiBpdAotICogaXMgb2sgZm9yIHRoZXNlIHJlc2VydmF0aW9ucyB0byBvdmVybGFwIGFuIGVhcmxpZXIgcmVzZXJ2YXRpb24uCi0gKiBSYXRoZXIgaXQgbWVhbnMgdGhhdCBpdCBpcyBvayBmb3Igc3Vic2VxdWVudCByZXNlcnZhdGlvbnMgdG8KLSAqIG92ZXJsYXAgdGhpcyBvbmUuCi0gKgotICogVXNlIHRoaXMgZW50cnkgcG9pbnQgdG8gcmVzZXJ2ZSBlYXJseSByYW5nZXMgd2hlbiB5b3UgYXJlIGRvaW5nCi0gKiBzbyBvdXQgb2YgIlBhcmFub2lhIiwgcmVzZXJ2aW5nIHBlcmhhcHMgbW9yZSBtZW1vcnkgdGhhbiB5b3UgbmVlZCwKLSAqIGp1c3QgaW4gY2FzZSwgYW5kIGRvbid0IG1pbmQgYSBzdWJzZXF1ZW50IG92ZXJsYXBwaW5nIHJlc2VydmF0aW9uCi0gKiB0aGF0IGlzIGtub3duIHRvIGJlIG5lZWRlZC4KLSAqCi0gKiBUaGUgZHJvcF9vdmVybGFwc190aGF0X2FyZV9vaygpIGNhbGwgaGVyZSBpc24ndCByZWFsbHkgbmVlZGVkLgotICogSXQgd291bGQgYmUgbmVlZGVkIGlmIHdlIGhhZCB0d28gY29sbGlkaW5nICdvdmVybGFwX29rJwotICogcmVzZXJ2YXRpb25zLCBzbyB0aGF0IHRoZSBzZWNvbmQgc3VjaCB3b3VsZCBub3QgcGFuaWMgb24gdGhlCi0gKiBvdmVybGFwIHdpdGggdGhlIGZpcnN0LiAgV2UgZG9uJ3QgaGF2ZSBhbnkgc3VjaCBhcyBvZiB0aGlzCi0gKiB3cml0aW5nLCBidXQgbWlnaHQgYXMgd2VsbCB0b2xlcmF0ZSBzdWNoIGlmIGl0IGhhcHBlbnMgaW4KLSAqIHRoZSBmdXR1cmUuCi0gKi8KLXZvaWQgX19pbml0IHJlc2VydmVfZWFybHlfb3ZlcmxhcF9vayh1NjQgc3RhcnQsIHU2NCBlbmQsIGNoYXIgKm5hbWUpCi17Ci0JZHJvcF9vdmVybGFwc190aGF0X2FyZV9vayhzdGFydCwgZW5kKTsKLQlfX3Jlc2VydmVfZWFybHkoc3RhcnQsIGVuZCwgbmFtZSwgMSk7Ci19Ci0KLS8qCi0gKiBNb3N0IGVhcmx5IHJlc2VydmF0aW9ucyBjb21lIGhlcmUuCi0gKgotICogV2UgZmlyc3QgaGF2ZSBkcm9wX292ZXJsYXBzX3RoYXRfYXJlX29rKCkgZHJvcCBhbnkgcHJlLWV4aXN0aW5nCi0gKiAnb3ZlcmxhcF9vaycgcmFuZ2VzLCBzbyB0aGF0IHdlIGNhbiB0aGVuIHJlc2VydmUgdGhpcyBtZW1vcnkKLSAqIHJhbmdlIHdpdGhvdXQgcmlzayBvZiBwYW5pYydpbmcgb24gYW4gb3ZlcmxhcHBpbmcgb3ZlcmxhcF9vawotICogZWFybHkgcmVzZXJ2YXRpb24uCi0gKi8KLXZvaWQgX19pbml0IHJlc2VydmVfZWFybHkodTY0IHN0YXJ0LCB1NjQgZW5kLCBjaGFyICpuYW1lKQotewotCWlmIChzdGFydCA+PSBlbmQpCi0JCXJldHVybjsKLQotCWRyb3Bfb3ZlcmxhcHNfdGhhdF9hcmVfb2soc3RhcnQsIGVuZCk7Ci0JX19yZXNlcnZlX2Vhcmx5KHN0YXJ0LCBlbmQsIG5hbWUsIDApOwotfQotCi12b2lkIF9faW5pdCBmcmVlX2Vhcmx5KHU2NCBzdGFydCwgdTY0IGVuZCkKLXsKLQlzdHJ1Y3QgZWFybHlfcmVzICpyOwotCWludCBpOwotCi0JaSA9IGZpbmRfb3ZlcmxhcHBlZF9lYXJseShzdGFydCwgZW5kKTsKLQlyID0gJmVhcmx5X3Jlc1tpXTsKLQlpZiAoaSA+PSBNQVhfRUFSTFlfUkVTIHx8IHItPmVuZCAhPSBlbmQgfHwgci0+c3RhcnQgIT0gc3RhcnQpCi0JCXBhbmljKCJmcmVlX2Vhcmx5IG9uIG5vdCByZXNlcnZlZCBhcmVhOiAlbGx4LSVsbHghIiwKLQkJCSBzdGFydCwgZW5kIC0gMSk7Ci0KLQlkcm9wX3JhbmdlKGkpOwotfQotCi12b2lkIF9faW5pdCBlYXJseV9yZXNfdG9fYm9vdG1lbSh1NjQgc3RhcnQsIHU2NCBlbmQpCi17Ci0JaW50IGksIGNvdW50OwotCXU2NCBmaW5hbF9zdGFydCwgZmluYWxfZW5kOwotCi0JY291bnQgID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0VBUkxZX1JFUyAmJiBlYXJseV9yZXNbaV0uZW5kOyBpKyspCi0JCWNvdW50Kys7Ci0KLQlwcmludGsoS0VSTl9JTkZPICIoJWQgZWFybHkgcmVzZXJ2YXRpb25zKSA9PT4gYm9vdG1lbSBbJTAxMGxseCAtICUwMTBsbHhdXG4iLAotCQkJIGNvdW50LCBzdGFydCwgZW5kKTsKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlzdHJ1Y3QgZWFybHlfcmVzICpyID0gJmVhcmx5X3Jlc1tpXTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiICAjJWQgWyUwMTBsbHggLSAlMDEwbGx4XSAlMTZzIiwgaSwKLQkJCXItPnN0YXJ0LCByLT5lbmQsIHItPm5hbWUpOwotCQlmaW5hbF9zdGFydCA9IG1heChzdGFydCwgci0+c3RhcnQpOwotCQlmaW5hbF9lbmQgPSBtaW4oZW5kLCByLT5lbmQpOwotCQlpZiAoZmluYWxfc3RhcnQgPj0gZmluYWxfZW5kKSB7Ci0JCQlwcmludGsoS0VSTl9DT05UICJcbiIpOwotCQkJY29udGludWU7Ci0JCX0KLQkJcHJpbnRrKEtFUk5fQ09OVCAiID09PiBbJTAxMGxseCAtICUwMTBsbHhdXG4iLAotCQkJZmluYWxfc3RhcnQsIGZpbmFsX2VuZCk7Ci0JCXJlc2VydmVfYm9vdG1lbV9nZW5lcmljKGZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQgLSBmaW5hbF9zdGFydCwKLQkJCQlCT09UTUVNX0RFRkFVTFQpOwotCX0KLX0KLQotLyogQ2hlY2sgZm9yIGFscmVhZHkgcmVzZXJ2ZWQgYXJlYXMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBiYWRfYWRkcih1NjQgKmFkZHJwLCB1NjQgc2l6ZSwgdTY0IGFsaWduKQotewotCWludCBpOwotCXU2NCBhZGRyID0gKmFkZHJwOwotCWludCBjaGFuZ2VkID0gMDsKLQlzdHJ1Y3QgZWFybHlfcmVzICpyOwotYWdhaW46Ci0JaSA9IGZpbmRfb3ZlcmxhcHBlZF9lYXJseShhZGRyLCBhZGRyICsgc2l6ZSk7Ci0JciA9ICZlYXJseV9yZXNbaV07Ci0JaWYgKGkgPCBNQVhfRUFSTFlfUkVTICYmIHItPmVuZCkgewotCQkqYWRkcnAgPSBhZGRyID0gcm91bmRfdXAoci0+ZW5kLCBhbGlnbik7Ci0JCWNoYW5nZWQgPSAxOwotCQlnb3RvIGFnYWluOwotCX0KLQlyZXR1cm4gY2hhbmdlZDsKLX0KLQotLyogQ2hlY2sgZm9yIGFscmVhZHkgcmVzZXJ2ZWQgYXJlYXMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IF9faW5pdCBiYWRfYWRkcl9zaXplKHU2NCAqYWRkcnAsIHU2NCAqc2l6ZXAsIHU2NCBhbGlnbikKLXsKLQlpbnQgaTsKLQl1NjQgYWRkciA9ICphZGRycCwgbGFzdDsKLQl1NjQgc2l6ZSA9ICpzaXplcDsKLQlpbnQgY2hhbmdlZCA9IDA7Ci1hZ2FpbjoKLQlsYXN0ID0gYWRkciArIHNpemU7Ci0JZm9yIChpID0gMDsgaSA8IE1BWF9FQVJMWV9SRVMgJiYgZWFybHlfcmVzW2ldLmVuZDsgaSsrKSB7Ci0JCXN0cnVjdCBlYXJseV9yZXMgKnIgPSAmZWFybHlfcmVzW2ldOwotCQlpZiAobGFzdCA+IHItPnN0YXJ0ICYmIGFkZHIgPCByLT5zdGFydCkgewotCQkJc2l6ZSA9IHItPnN0YXJ0IC0gYWRkcjsKLQkJCWNoYW5nZWQgPSAxOwotCQkJZ290byBhZ2FpbjsKLQkJfQotCQlpZiAobGFzdCA+IHItPmVuZCAmJiBhZGRyIDwgci0+ZW5kKSB7Ci0JCQlhZGRyID0gcm91bmRfdXAoci0+ZW5kLCBhbGlnbik7Ci0JCQlzaXplID0gbGFzdCAtIGFkZHI7Ci0JCQljaGFuZ2VkID0gMTsKLQkJCWdvdG8gYWdhaW47Ci0JCX0KLQkJaWYgKGxhc3QgPD0gci0+ZW5kICYmIGFkZHIgPj0gci0+c3RhcnQpIHsKLQkJCSgqc2l6ZXApKys7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQlpZiAoY2hhbmdlZCkgewotCQkqYWRkcnAgPSBhZGRyOwotCQkqc2l6ZXAgPSBzaXplOwotCX0KLQlyZXR1cm4gY2hhbmdlZDsKLX0KLQotLyoKICAqIEZpbmQgYSBmcmVlIGFyZWEgd2l0aCBzcGVjaWZpZWQgYWxpZ25tZW50IGluIGEgc3BlY2lmaWMgcmFuZ2UuCiAgKi8KIHU2NCBfX2luaXQgZmluZF9lODIwX2FyZWEodTY0IHN0YXJ0LCB1NjQgZW5kLCB1NjQgc2l6ZSwgdTY0IGFsaWduKQpAQCAtMTAyMCwyOSArNzMwLDM2IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgewogCQlzdHJ1Y3QgZTgyMGVudHJ5ICplaSA9ICZlODIwLm1hcFtpXTsKLQkJdTY0IGFkZHIsIGxhc3Q7Ci0JCXU2NCBlaV9sYXN0OworCQl1NjQgYWRkcjsKKwkJdTY0IGVpX3N0YXJ0LCBlaV9sYXN0OwogCiAJCWlmIChlaS0+dHlwZSAhPSBFODIwX1JBTSkKIAkJCWNvbnRpbnVlOwotCQlhZGRyID0gcm91bmRfdXAoZWktPmFkZHIsIGFsaWduKTsKKwogCQllaV9sYXN0ID0gZWktPmFkZHIgKyBlaS0+c2l6ZTsKLQkJaWYgKGFkZHIgPCBzdGFydCkKLQkJCWFkZHIgPSByb3VuZF91cChzdGFydCwgYWxpZ24pOwotCQlpZiAoYWRkciA+PSBlaV9sYXN0KQotCQkJY29udGludWU7Ci0JCXdoaWxlIChiYWRfYWRkcigmYWRkciwgc2l6ZSwgYWxpZ24pICYmIGFkZHIrc2l6ZSA8PSBlaV9sYXN0KQotCQkJOwotCQlsYXN0ID0gYWRkciArIHNpemU7Ci0JCWlmIChsYXN0ID4gZWlfbGFzdCkKLQkJCWNvbnRpbnVlOwotCQlpZiAobGFzdCA+IGVuZCkKLQkJCWNvbnRpbnVlOwotCQlyZXR1cm4gYWRkcjsKKwkJZWlfc3RhcnQgPSBlaS0+YWRkcjsKKwkJYWRkciA9IGZpbmRfZWFybHlfYXJlYShlaV9zdGFydCwgZWlfbGFzdCwgc3RhcnQsIGVuZCwKKwkJCQkJIHNpemUsIGFsaWduKTsKKworCQlpZiAoYWRkciAhPSAtMVVMTCkKKwkJCXJldHVybiBhZGRyOwogCX0KIAlyZXR1cm4gLTFVTEw7CiB9CiAKK3U2NCBfX2luaXQgZmluZF9md19tZW1tYXBfYXJlYSh1NjQgc3RhcnQsIHU2NCBlbmQsIHU2NCBzaXplLCB1NjQgYWxpZ24pCit7CisJcmV0dXJuIGZpbmRfZTgyMF9hcmVhKHN0YXJ0LCBlbmQsIHNpemUsIGFsaWduKTsKK30KKwordTY0IF9faW5pdCBnZXRfbWF4X21hcHBlZCh2b2lkKQoreworCXU2NCBlbmQgPSBtYXhfcGZuX21hcHBlZDsKKworCWVuZCA8PD0gUEFHRV9TSElGVDsKKworCXJldHVybiBlbmQ7Cit9CiAvKgogICogRmluZCBuZXh0IGZyZWUgcmFuZ2UgYWZ0ZXIgKnN0YXJ0CiAgKi8KQEAgLTEwNTIsMjUgKzc2OSwxOSBAQAogCiAJZm9yIChpID0gMDsgaSA8IGU4MjAubnJfbWFwOyBpKyspIHsKIAkJc3RydWN0IGU4MjBlbnRyeSAqZWkgPSAmZTgyMC5tYXBbaV07Ci0JCXU2NCBhZGRyLCBsYXN0OwotCQl1NjQgZWlfbGFzdDsKKwkJdTY0IGFkZHI7CisJCXU2NCBlaV9zdGFydCwgZWlfbGFzdDsKIAogCQlpZiAoZWktPnR5cGUgIT0gRTgyMF9SQU0pCiAJCQljb250aW51ZTsKLQkJYWRkciA9IHJvdW5kX3VwKGVpLT5hZGRyLCBhbGlnbik7CisKIAkJZWlfbGFzdCA9IGVpLT5hZGRyICsgZWktPnNpemU7Ci0JCWlmIChhZGRyIDwgc3RhcnQpCi0JCQlhZGRyID0gcm91bmRfdXAoc3RhcnQsIGFsaWduKTsKLQkJaWYgKGFkZHIgPj0gZWlfbGFzdCkKLQkJCWNvbnRpbnVlOwotCQkqc2l6ZXAgPSBlaV9sYXN0IC0gYWRkcjsKLQkJd2hpbGUgKGJhZF9hZGRyX3NpemUoJmFkZHIsIHNpemVwLCBhbGlnbikgJiYKLQkJCWFkZHIgKyAqc2l6ZXAgPD0gZWlfbGFzdCkKLQkJCTsKLQkJbGFzdCA9IGFkZHIgKyAqc2l6ZXA7Ci0JCWlmIChsYXN0ID4gZWlfbGFzdCkKLQkJCWNvbnRpbnVlOwotCQlyZXR1cm4gYWRkcjsKKwkJZWlfc3RhcnQgPSBlaS0+YWRkcjsKKwkJYWRkciA9IGZpbmRfZWFybHlfYXJlYV9zaXplKGVpX3N0YXJ0LCBlaV9sYXN0LCBzdGFydCwKKwkJCQkJIHNpemVwLCBhbGlnbik7CisKKwkJaWYgKGFkZHIgIT0gLTFVTEwpCisJCQlyZXR1cm4gYWRkcjsKIAl9CiAKIAlyZXR1cm4gLTFVTEw7CkBAIC0xNDI5LDYgKzExNDAsOCBAQAogCQkJZW5kID0gTUFYX1JFU09VUkNFX1NJWkU7CiAJCWlmIChzdGFydCA+PSBlbmQpCiAJCQljb250aW51ZTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgInJlc2VydmUgUkFNIGJ1ZmZlcjogJTAxNmxseCAtICUwMTZsbHggIiwKKwkJCSAgICAgICBzdGFydCwgZW5kKTsKIAkJcmVzZXJ2ZV9yZWdpb25fd2l0aF9zcGxpdCgmaW9tZW1fcmVzb3VyY2UsIHN0YXJ0LCBlbmQsCiAJCQkJCSAgIlJBTSBidWZmZXIiKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZDMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZDMyLmMKaW5kZXggNTA1MWI5NC4uYWRlZGVlZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWQzMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkMzIuYwpAQCAtMjksNiArMjksMTYgQEAKIAogdm9pZCBfX2luaXQgaTM4Nl9zdGFydF9rZXJuZWwodm9pZCkKIHsKKyNpZmRlZiBDT05GSUdfWDg2X1RSQU1QT0xJTkUKKwkvKgorCSAqIEJ1dCBmaXJzdCBwaW5jaCBhIGZldyBmb3IgdGhlIHN0YWNrL3RyYW1wb2xpbmUgc3R1ZmYKKwkgKiBGSVhNRTogRG9uJ3QgbmVlZCB0aGUgZXh0cmEgcGFnZSBhdCA0SywgYnV0IG5lZWQgdG8gZml4CisJICogdHJhbXBvbGluZSBiZWZvcmUgcmVtb3ZpbmcgaXQuIChzZWUgdGhlIEdEVCBzdHVmZikKKwkgKi8KKwlyZXNlcnZlX2Vhcmx5X292ZXJsYXBfb2soUEFHRV9TSVpFLCBQQUdFX1NJWkUgKyBQQUdFX1NJWkUsCisJCQkJCSAiRVggVFJBTVBPTElORSIpOworI2VuZGlmCisKIAlyZXNlcnZlX2Vhcmx5KF9fcGFfc3ltYm9sKCZfdGV4dCksIF9fcGFfc3ltYm9sKCZfX2Jzc19zdG9wKSwgIlRFWFQgREFUQSBCU1MiKTsKIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKaW5kZXggN2ZkMzE4Yi4uMzdjM2Q0YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCkBAIC00NDIsOCArNDQyLDggQEAKIAkgKi8KIAljbXBiICQwLHJlYWR5CiAJam5lIDFmCi0JbW92bCAkcGVyX2NwdV9fZ2R0X3BhZ2UsJWVheAotCW1vdmwgJHBlcl9jcHVfX3N0YWNrX2NhbmFyeSwlZWN4CisJbW92bCAkZ2R0X3BhZ2UsJWVheAorCW1vdmwgJHN0YWNrX2NhbmFyeSwlZWN4CiAJbW92dyAlY3gsIDggKiBHRFRfRU5UUllfU1RBQ0tfQ0FOQVJZICsgMiglZWF4KQogCXNocmwgJDE2LCAlZWN4CiAJbW92YiAlY2wsIDggKiBHRFRfRU5UUllfU1RBQ0tfQ0FOQVJZICsgNCglZWF4KQpAQCAtNzA2LDcgKzcwNiw3IEBACiAJLndvcmQgMAkJCQkjIDMyIGJpdCBhbGlnbiBnZHRfZGVzYy5hZGRyZXNzCiBFTlRSWShlYXJseV9nZHRfZGVzY3IpCiAJLndvcmQgR0RUX0VOVFJJRVMqOC0xCi0JLmxvbmcgcGVyX2NwdV9fZ2R0X3BhZ2UJCS8qIE92ZXJ3cml0dGVuIGZvciBzZWNvbmRhcnkgQ1BVcyAqLworCS5sb25nIGdkdF9wYWdlCQkJLyogT3ZlcndyaXR0ZW4gZm9yIHNlY29uZGFyeSBDUFVzICovCiAKIC8qCiAgKiBUaGUgYm9vdF9nZHQgbXVzdCBtaXJyb3IgdGhlIGVxdWl2YWxlbnQgaW4gc2V0dXAuUyBhbmQgaXMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF82NC5TCmluZGV4IDJkOGI1MDMuLjNkMWU2ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWRfNjQuUwpAQCAtMjcsNyArMjcsNyBAQAogI2RlZmluZSBHRVRfQ1IyX0lOVE9fUkNYIG1vdnEgJWNyMiwgJXJjeAogI2VuZGlmCiAKLS8qIHdlIGFyZSBub3QgYWJsZSB0byBzd2l0Y2ggaW4gb25lIHN0ZXAgdG8gdGhlIGZpbmFsIEtFUk5FTCBBRFJFU1MgU1BBQ0UKKy8qIHdlIGFyZSBub3QgYWJsZSB0byBzd2l0Y2ggaW4gb25lIHN0ZXAgdG8gdGhlIGZpbmFsIEtFUk5FTCBBRERSRVNTIFNQQUNFCiAgKiBiZWNhdXNlIHdlIG5lZWQgaWRlbnRpdHktbWFwcGVkIHBhZ2VzLgogICoKICAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2k4MjU5LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaTgyNTkuYwppbmRleCBkZjg5MTAyLi5mYjcyNWVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaTgyNTkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaTgyNTkuYwpAQCAtMzIsOCArMzIsMTQgQEAKICAqLwogCiBzdGF0aWMgaW50IGk4MjU5QV9hdXRvX2VvaTsKLURFRklORV9TUElOTE9DSyhpODI1OUFfbG9jayk7CitERUZJTkVfUkFXX1NQSU5MT0NLKGk4MjU5QV9sb2NrKTsKIHN0YXRpYyB2b2lkIG1hc2tfYW5kX2Fja184MjU5QSh1bnNpZ25lZCBpbnQpOworc3RhdGljIHZvaWQgbWFza184MjU5QSh2b2lkKTsKK3N0YXRpYyB2b2lkIHVubWFza184MjU5QSh2b2lkKTsKK3N0YXRpYyB2b2lkIGRpc2FibGVfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOworc3RhdGljIHZvaWQgZW5hYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKK3N0YXRpYyB2b2lkIGluaXRfODI1OUEoaW50IGF1dG9fZW9pKTsKK3N0YXRpYyBpbnQgaTgyNTlBX2lycV9wZW5kaW5nKHVuc2lnbmVkIGludCBpcnEpOwogCiBzdHJ1Y3QgaXJxX2NoaXAgaTgyNTlBX2NoaXAgPSB7CiAJLm5hbWUJCT0gIlhULVBJQyIsCkBAIC02Myw1MSArNjksNTEgQEAKICAqLwogdW5zaWduZWQgbG9uZyBpb19hcGljX2lycXM7CiAKLXZvaWQgZGlzYWJsZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIGRpc2FibGVfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgaW50IG1hc2sgPSAxIDw8IGlycTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCWNhY2hlZF9pcnFfbWFzayB8PSBtYXNrOwogCWlmIChpcnEgJiA4KQogCQlvdXRiKGNhY2hlZF9zbGF2ZV9tYXNrLCBQSUNfU0xBVkVfSU1SKTsKIAllbHNlCiAJCW91dGIoY2FjaGVkX21hc3Rlcl9tYXNrLCBQSUNfTUFTVEVSX0lNUik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIH0KIAotdm9pZCBlbmFibGVfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpCitzdGF0aWMgdm9pZCBlbmFibGVfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgaW50IG1hc2sgPSB+KDEgPDwgaXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCWNhY2hlZF9pcnFfbWFzayAmPSBtYXNrOwogCWlmIChpcnEgJiA4KQogCQlvdXRiKGNhY2hlZF9zbGF2ZV9tYXNrLCBQSUNfU0xBVkVfSU1SKTsKIAllbHNlCiAJCW91dGIoY2FjaGVkX21hc3Rlcl9tYXNrLCBQSUNfTUFTVEVSX0lNUik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIH0KIAotaW50IGk4MjU5QV9pcnFfcGVuZGluZyh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIGludCBpODI1OUFfaXJxX3BlbmRpbmcodW5zaWduZWQgaW50IGlycSkKIHsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDE8PGlycTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAJaWYgKGlycSA8IDgpCiAJCXJldCA9IGluYihQSUNfTUFTVEVSX0NNRCkgJiBtYXNrOwogCWVsc2UKIAkJcmV0ID0gaW5iKFBJQ19TTEFWRV9DTUQpICYgKG1hc2sgPj4gOCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgbWFrZV84MjU5QV9pcnEodW5zaWduZWQgaW50IGlycSkKK3N0YXRpYyB2b2lkIG1ha2VfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CiAJaW9fYXBpY19pcnFzICY9IH4oMTw8aXJxKTsKQEAgLTE1MCw3ICsxNTYsNyBAQAogCXVuc2lnbmVkIGludCBpcnFtYXNrID0gMSA8PCBpcnE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAkvKgogCSAqIExpZ2h0d2VpZ2h0IHNwdXJpb3VzIElSUSBkZXRlY3Rpb24uIFdlIGRvIG5vdCB3YW50CiAJICogdG8gb3ZlcmRvIHNwdXJpb3VzIElSUSBoYW5kbGluZyAtIGl0J3MgdXN1YWxseSBhIHNpZ24KQEAgLTE4Myw3ICsxODksNyBAQAogCQlvdXRiKGNhY2hlZF9tYXN0ZXJfbWFzaywgUElDX01BU1RFUl9JTVIpOwogCQlvdXRiKDB4NjAraXJxLCBQSUNfTUFTVEVSX0NNRCk7CS8qICdTcGVjaWZpYyBFT0kgdG8gbWFzdGVyICovCiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuOwogCiBzcHVyaW91c184MjU5QV9pcnE6CkBAIC0yODEsMzcgKzI4NywzNyBAQAogCiBkZXZpY2VfaW5pdGNhbGwoaTgyNTlBX2luaXRfc3lzZnMpOwogCi12b2lkIG1hc2tfODI1OUEodm9pZCkKK3N0YXRpYyB2b2lkIG1hc2tfODI1OUEodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogCiAJb3V0YigweGZmLCBQSUNfTUFTVEVSX0lNUik7CS8qIG1hc2sgYWxsIG9mIDgyNTlBLTEgKi8KIAlvdXRiKDB4ZmYsIFBJQ19TTEFWRV9JTVIpOwkvKiBtYXNrIGFsbCBvZiA4MjU5QS0yICovCiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZpODI1OUFfbG9jaywgZmxhZ3MpOwogfQogCi12b2lkIHVubWFza184MjU5QSh2b2lkKQorc3RhdGljIHZvaWQgdW5tYXNrXzgyNTlBKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAogCW91dGIoY2FjaGVkX21hc3Rlcl9tYXNrLCBQSUNfTUFTVEVSX0lNUik7IC8qIHJlc3RvcmUgbWFzdGVyIElSUSBtYXNrICovCiAJb3V0YihjYWNoZWRfc2xhdmVfbWFzaywgUElDX1NMQVZFX0lNUik7CSAgLyogcmVzdG9yZSBzbGF2ZSBJUlEgbWFzayAqLwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIH0KIAotdm9pZCBpbml0XzgyNTlBKGludCBhdXRvX2VvaSkKK3N0YXRpYyB2b2lkIGluaXRfODI1OUEoaW50IGF1dG9fZW9pKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpODI1OUFfYXV0b19lb2kgPSBhdXRvX2VvaTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAogCW91dGIoMHhmZiwgUElDX01BU1RFUl9JTVIpOwkvKiBtYXNrIGFsbCBvZiA4MjU5QS0xICovCiAJb3V0YigweGZmLCBQSUNfU0xBVkVfSU1SKTsJLyogbWFzayBhbGwgb2YgODI1OUEtMiAqLwpAQCAtMzU2LDUgKzM2Miw0OSBAQAogCW91dGIoY2FjaGVkX21hc3Rlcl9tYXNrLCBQSUNfTUFTVEVSX0lNUik7IC8qIHJlc3RvcmUgbWFzdGVyIElSUSBtYXNrICovCiAJb3V0YihjYWNoZWRfc2xhdmVfbWFzaywgUElDX1NMQVZFX0lNUik7CSAgLyogcmVzdG9yZSBzbGF2ZSBJUlEgbWFzayAqLwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIH0KKworLyoKKyAqIG1ha2UgaTgyNTkgYSBkcml2ZXIgc28gdGhhdCB3ZSBjYW4gc2VsZWN0IHBpYyBmdW5jdGlvbnMgYXQgcnVuIHRpbWUuIHRoZSBnb2FsCisgKiBpcyB0byBtYWtlIHg4NiBiaW5hcnkgY29tcGF0aWJsZSBhbW9uZyBwYyBjb21wYXRpYmxlIGFuZCBub24tcGMgY29tcGF0aWJsZQorICogcGxhdGZvcm1zLCBzdWNoIGFzIHg4NiBNSUQuCisgKi8KKworc3RhdGljIHZvaWQgbGVnYWN5X3BpY19ub29wKHZvaWQpIHsgfTsKK3N0YXRpYyB2b2lkIGxlZ2FjeV9waWNfdWludF9ub29wKHVuc2lnbmVkIGludCB1bnVzZWQpIHsgfTsKK3N0YXRpYyB2b2lkIGxlZ2FjeV9waWNfaW50X25vb3AoaW50IHVudXNlZCkgeyB9OworCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIGR1bW15X3BpY19jaGlwICA9IHsKKwkubmFtZSA9ICJkdW1teSBwaWMiLAorCS5tYXNrID0gbGVnYWN5X3BpY191aW50X25vb3AsCisJLnVubWFzayA9IGxlZ2FjeV9waWNfdWludF9ub29wLAorCS5kaXNhYmxlID0gbGVnYWN5X3BpY191aW50X25vb3AsCisJLm1hc2tfYWNrID0gbGVnYWN5X3BpY191aW50X25vb3AsCit9Oworc3RhdGljIGludCBsZWdhY3lfcGljX2lycV9wZW5kaW5nX25vb3AodW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGxlZ2FjeV9waWMgbnVsbF9sZWdhY3lfcGljID0geworCS5ucl9sZWdhY3lfaXJxcyA9IDAsCisJLmNoaXAgPSAmZHVtbXlfcGljX2NoaXAsCisJLm1hc2tfYWxsID0gbGVnYWN5X3BpY19ub29wLAorCS5yZXN0b3JlX21hc2sgPSBsZWdhY3lfcGljX25vb3AsCisJLmluaXQgPSBsZWdhY3lfcGljX2ludF9ub29wLAorCS5pcnFfcGVuZGluZyA9IGxlZ2FjeV9waWNfaXJxX3BlbmRpbmdfbm9vcCwKKwkubWFrZV9pcnEgPSBsZWdhY3lfcGljX3VpbnRfbm9vcCwKK307CisKK3N0cnVjdCBsZWdhY3lfcGljIGRlZmF1bHRfbGVnYWN5X3BpYyA9IHsKKwkubnJfbGVnYWN5X2lycXMgPSBOUl9JUlFTX0xFR0FDWSwKKwkuY2hpcCAgPSAmaTgyNTlBX2NoaXAsCisJLm1hc2tfYWxsICA9IG1hc2tfODI1OUEsCisJLnJlc3RvcmVfbWFzayA9IHVubWFza184MjU5QSwKKwkuaW5pdCA9IGluaXRfODI1OUEsCisJLmlycV9wZW5kaW5nID0gaTgyNTlBX2lycV9wZW5kaW5nLAorCS5tYWtlX2lycSA9IG1ha2VfODI1OUFfaXJxLAorfTsKKworc3RydWN0IGxlZ2FjeV9waWMgKmxlZ2FjeV9waWMgPSAmZGVmYXVsdF9sZWdhY3lfcGljOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lycWluaXQuYyBiL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0LmMKaW5kZXggZDU5MzIyMi4uZWYyNTdmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycWluaXQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdC5jCkBAIC04NCwyNCArODQsNyBAQAogfTsKIAogREVGSU5FX1BFUl9DUFUodmVjdG9yX2lycV90LCB2ZWN0b3JfaXJxKSA9IHsKLQlbMCAuLi4gSVJRMF9WRUNUT1IgLSAxXSA9IC0xLAotCVtJUlEwX1ZFQ1RPUl0gPSAwLAotCVtJUlExX1ZFQ1RPUl0gPSAxLAotCVtJUlEyX1ZFQ1RPUl0gPSAyLAotCVtJUlEzX1ZFQ1RPUl0gPSAzLAotCVtJUlE0X1ZFQ1RPUl0gPSA0LAotCVtJUlE1X1ZFQ1RPUl0gPSA1LAotCVtJUlE2X1ZFQ1RPUl0gPSA2LAotCVtJUlE3X1ZFQ1RPUl0gPSA3LAotCVtJUlE4X1ZFQ1RPUl0gPSA4LAotCVtJUlE5X1ZFQ1RPUl0gPSA5LAotCVtJUlExMF9WRUNUT1JdID0gMTAsCi0JW0lSUTExX1ZFQ1RPUl0gPSAxMSwKLQlbSVJRMTJfVkVDVE9SXSA9IDEyLAotCVtJUlExM19WRUNUT1JdID0gMTMsCi0JW0lSUTE0X1ZFQ1RPUl0gPSAxNCwKLQlbSVJRMTVfVkVDVE9SXSA9IDE1LAotCVtJUlExNV9WRUNUT1IgKyAxIC4uLiBOUl9WRUNUT1JTIC0gMV0gPSAtMQorCVswIC4uLiBOUl9WRUNUT1JTIC0gMV0gPSAtMSwKIH07CiAKIGludCB2ZWN0b3JfdXNlZF9ieV9wZXJjcHVfaXJxKHVuc2lnbmVkIGludCB2ZWN0b3IpCkBAIC0xMjMsMTIgKzEwNiwxMiBAQAogI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpCiAJaW5pdF9ic3BfQVBJQygpOwogI2VuZGlmCi0JaW5pdF84MjU5QSgwKTsKKwlsZWdhY3lfcGljLT5pbml0KDApOwogCiAJLyoKIAkgKiAxNiBvbGQtc3R5bGUgSU5UQS1jeWNsZSBpbnRlcnJ1cHRzOgogCSAqLwotCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTX0xFR0FDWTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGxlZ2FjeV9waWMtPm5yX2xlZ2FjeV9pcnFzOyBpKyspIHsKIAkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaSk7CiAKIAkJZGVzYy0+c3RhdHVzID0gSVJRX0RJU0FCTEVEOwpAQCAtMTQyLDYgKzEyNSwxOSBAQAogCiB2b2lkIF9faW5pdCBpbml0X0lSUSh2b2lkKQogeworCWludCBpOworCisJLyoKKwkgKiBPbiBjcHUgMCwgQXNzaWduIElSUTBfVkVDVE9SLi5JUlExNV9WRUNUT1IncyB0byBJUlEgMC4uMTUuCisJICogSWYgdGhlc2UgSVJRJ3MgYXJlIGhhbmRsZWQgYnkgbGVnYWN5IGludGVycnVwdC1jb250cm9sbGVycyBsaWtlIFBJQywKKwkgKiB0aGVuIHRoaXMgY29uZmlndXJhdGlvbiB3aWxsIGxpa2VseSBiZSBzdGF0aWMgYWZ0ZXIgdGhlIGJvb3QuIElmCisJICogdGhlc2UgSVJRJ3MgYXJlIGhhbmRsZWQgYnkgbW9yZSBtb3JkZXJuIGNvbnRyb2xsZXJzIGxpa2UgSU8tQVBJQywKKwkgKiB0aGVuIHRoaXMgdmVjdG9yIHNwYWNlIGNhbiBiZSBmcmVlZCBhbmQgcmUtdXNlZCBkeW5hbWljYWxseSBhcyB0aGUKKwkgKiBpcnEncyBtaWdyYXRlIGV0Yy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgbGVnYWN5X3BpYy0+bnJfbGVnYWN5X2lycXM7IGkrKykKKwkJcGVyX2NwdSh2ZWN0b3JfaXJxLCAwKVtJUlEwX1ZFQ1RPUiArIGldID0gaTsKKwogCXg4Nl9pbml0LmlycXMuaW50cl9pbml0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDVkZTlmNGEuLmI0M2JiYWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L2thbGxzeW1zLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9kZXNjLmg+CkBAIC0xMDYsMTYgKzEwNywyMiBAQAogfTsKIGNvbnN0IGludCBrcmV0cHJvYmVfYmxhY2tsaXN0X3NpemUgPSBBUlJBWV9TSVpFKGtyZXRwcm9iZV9ibGFja2xpc3QpOwogCi0vKiBJbnNlcnQgYSBqdW1wIGluc3RydWN0aW9uIGF0IGFkZHJlc3MgJ2Zyb20nLCB3aGljaCBqdW1wcyB0byBhZGRyZXNzICd0bycuKi8KLXN0YXRpYyB2b2lkIF9fa3Byb2JlcyBzZXRfam1wX29wKHZvaWQgKmZyb20sIHZvaWQgKnRvKQorc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fc3ludGhlc2l6ZV9yZWxhdGl2ZV9pbnNuKHZvaWQgKmZyb20sIHZvaWQgKnRvLCB1OCBvcCkKIHsKLQlzdHJ1Y3QgX19hcmNoX2ptcF9vcCB7Ci0JCWNoYXIgb3A7CisJc3RydWN0IF9fYXJjaF9yZWxhdGl2ZV9pbnNuIHsKKwkJdTggb3A7CiAJCXMzMiByYWRkcjsKLQl9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpICogam9wOwotCWpvcCA9IChzdHJ1Y3QgX19hcmNoX2ptcF9vcCAqKWZyb207Ci0Jam9wLT5yYWRkciA9IChzMzIpKChsb25nKSh0bykgLSAoKGxvbmcpKGZyb20pICsgNSkpOwotCWpvcC0+b3AgPSBSRUxBVElWRUpVTVBfSU5TVFJVQ1RJT047CisJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSAqaW5zbjsKKworCWluc24gPSAoc3RydWN0IF9fYXJjaF9yZWxhdGl2ZV9pbnNuICopZnJvbTsKKwlpbnNuLT5yYWRkciA9IChzMzIpKChsb25nKSh0bykgLSAoKGxvbmcpKGZyb20pICsgNSkpOworCWluc24tPm9wID0gb3A7Cit9CisKKy8qIEluc2VydCBhIGp1bXAgaW5zdHJ1Y3Rpb24gYXQgYWRkcmVzcyAnZnJvbScsIHdoaWNoIGp1bXBzIHRvIGFkZHJlc3MgJ3RvJy4qLworc3RhdGljIHZvaWQgX19rcHJvYmVzIHN5bnRoZXNpemVfcmVsanVtcCh2b2lkICpmcm9tLCB2b2lkICp0bykKK3sKKwlfX3N5bnRoZXNpemVfcmVsYXRpdmVfaW5zbihmcm9tLCB0bywgUkVMQVRJVkVKVU1QX09QQ09ERSk7CiB9CiAKIC8qCkBAIC0yMDIsNyArMjA5LDcgQEAKIAkvKgogCSAqICBCYXNpY2FsbHksIGtwLT5haW5zbi5pbnNuIGhhcyBhbiBvcmlnaW5hbCBpbnN0cnVjdGlvbi4KIAkgKiAgSG93ZXZlciwgUklQLXJlbGF0aXZlIGluc3RydWN0aW9uIGNhbiBub3QgZG8gc2luZ2xlLXN0ZXBwaW5nCi0JICogIGF0IGRpZmZlcmVudCBwbGFjZSwgZml4X3JpcHJlbCgpIHR3ZWFrcyB0aGUgZGlzcGxhY2VtZW50IG9mCisJICogIGF0IGRpZmZlcmVudCBwbGFjZSwgX19jb3B5X2luc3RydWN0aW9uKCkgdHdlYWtzIHRoZSBkaXNwbGFjZW1lbnQgb2YKIAkgKiAgdGhhdCBpbnN0cnVjdGlvbi4gSW4gdGhhdCBjYXNlLCB3ZSBjYW4ndCByZWNvdmVyIHRoZSBpbnN0cnVjdGlvbgogCSAqICBmcm9tIHRoZSBrcC0+YWluc24uaW5zbi4KIAkgKgpAQCAtMjg0LDIxICsyOTEsMzcgQEAKIH0KIAogLyoKLSAqIEFkanVzdCB0aGUgZGlzcGxhY2VtZW50IGlmIHRoZSBpbnN0cnVjdGlvbiB1c2VzIHRoZSAlcmlwLXJlbGF0aXZlCi0gKiBhZGRyZXNzaW5nIG1vZGUuCisgKiBDb3B5IGFuIGluc3RydWN0aW9uIGFuZCBhZGp1c3QgdGhlIGRpc3BsYWNlbWVudCBpZiB0aGUgaW5zdHJ1Y3Rpb24KKyAqIHVzZXMgdGhlICVyaXAtcmVsYXRpdmUgYWRkcmVzc2luZyBtb2RlLgogICogSWYgaXQgZG9lcywgUmV0dXJuIHRoZSBhZGRyZXNzIG9mIHRoZSAzMi1iaXQgZGlzcGxhY2VtZW50IHdvcmQuCiAgKiBJZiBub3QsIHJldHVybiBudWxsLgogICogT25seSBhcHBsaWNhYmxlIHRvIDY0LWJpdCB4ODYuCiAgKi8KLXN0YXRpYyB2b2lkIF9fa3Byb2JlcyBmaXhfcmlwcmVsKHN0cnVjdCBrcHJvYmUgKnApCitzdGF0aWMgaW50IF9fa3Byb2JlcyBfX2NvcHlfaW5zdHJ1Y3Rpb24odTggKmRlc3QsIHU4ICpzcmMsIGludCByZWNvdmVyKQogewotI2lmZGVmIENPTkZJR19YODZfNjQKIAlzdHJ1Y3QgaW5zbiBpbnNuOwotCWtlcm5lbF9pbnNuX2luaXQoJmluc24sIHAtPmFpbnNuLmluc24pOworCWludCByZXQ7CisJa3Byb2JlX29wY29kZV90IGJ1ZltNQVhfSU5TTl9TSVpFXTsKIAorCWtlcm5lbF9pbnNuX2luaXQoJmluc24sIHNyYyk7CisJaWYgKHJlY292ZXIpIHsKKwkJaW5zbl9nZXRfb3Bjb2RlKCZpbnNuKTsKKwkJaWYgKGluc24ub3Bjb2RlLmJ5dGVzWzBdID09IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT04pIHsKKwkJCXJldCA9IHJlY292ZXJfcHJvYmVkX2luc3RydWN0aW9uKGJ1ZiwKKwkJCQkJCQkgKHVuc2lnbmVkIGxvbmcpc3JjKTsKKwkJCWlmIChyZXQpCisJCQkJcmV0dXJuIDA7CisJCQlrZXJuZWxfaW5zbl9pbml0KCZpbnNuLCBidWYpOworCQl9CisJfQorCWluc25fZ2V0X2xlbmd0aCgmaW5zbik7CisJbWVtY3B5KGRlc3QsIGluc24ua2FkZHIsIGluc24ubGVuZ3RoKTsKKworI2lmZGVmIENPTkZJR19YODZfNjQKIAlpZiAoaW5zbl9yaXBfcmVsYXRpdmUoJmluc24pKSB7CiAJCXM2NCBuZXdkaXNwOwogCQl1OCAqZGlzcDsKKwkJa2VybmVsX2luc25faW5pdCgmaW5zbiwgZGVzdCk7CiAJCWluc25fZ2V0X2Rpc3BsYWNlbWVudCgmaW5zbik7CiAJCS8qCiAJCSAqIFRoZSBjb3BpZWQgaW5zdHJ1Y3Rpb24gdXNlcyB0aGUgJXJpcC1yZWxhdGl2ZSBhZGRyZXNzaW5nCkBAIC0zMTIsMjAgKzMzNSwyMyBAQAogCQkgKiBleHRlbnNpb24gb2YgdGhlIG9yaWdpbmFsIHNpZ25lZCAzMi1iaXQgZGlzcGxhY2VtZW50IHdvdWxkCiAJCSAqIGhhdmUgZ2l2ZW4uCiAJCSAqLwotCQluZXdkaXNwID0gKHU4ICopIHAtPmFkZHIgKyAoczY0KSBpbnNuLmRpc3BsYWNlbWVudC52YWx1ZSAtCi0JCQkgICh1OCAqKSBwLT5haW5zbi5pbnNuOworCQluZXdkaXNwID0gKHU4ICopIHNyYyArIChzNjQpIGluc24uZGlzcGxhY2VtZW50LnZhbHVlIC0KKwkJCSAgKHU4ICopIGRlc3Q7CiAJCUJVR19PTigoczY0KSAoczMyKSBuZXdkaXNwICE9IG5ld2Rpc3ApOyAvKiBTYW5pdHkgY2hlY2suICAqLwotCQlkaXNwID0gKHU4ICopIHAtPmFpbnNuLmluc24gKyBpbnNuX29mZnNldF9kaXNwbGFjZW1lbnQoJmluc24pOworCQlkaXNwID0gKHU4ICopIGRlc3QgKyBpbnNuX29mZnNldF9kaXNwbGFjZW1lbnQoJmluc24pOwogCQkqKHMzMiAqKSBkaXNwID0gKHMzMikgbmV3ZGlzcDsKIAl9CiAjZW5kaWYKKwlyZXR1cm4gaW5zbi5sZW5ndGg7CiB9CiAKIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyBhcmNoX2NvcHlfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCiB7Ci0JbWVtY3B5KHAtPmFpbnNuLmluc24sIHAtPmFkZHIsIE1BWF9JTlNOX1NJWkUgKiBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7Ci0KLQlmaXhfcmlwcmVsKHApOworCS8qCisJICogQ29weSBhbiBpbnN0cnVjdGlvbiB3aXRob3V0IHJlY292ZXJpbmcgaW50MywgYmVjYXVzZSBpdCB3aWxsIGJlCisJICogcHV0IGJ5IGFub3RoZXIgc3Vic3lzdGVtLgorCSAqLworCV9fY29weV9pbnN0cnVjdGlvbihwLT5haW5zbi5pbnNuLCBwLT5hZGRyLCAwKTsKIAogCWlmIChjYW5fYm9vc3QocC0+YWRkcikpCiAJCXAtPmFpbnNuLmJvb3N0YWJsZSA9IDA7CkBAIC00MDYsMTggKzQzMiw2IEBACiAJCXVwZGF0ZV9kZWJ1Z2N0bG1zcihjdXJyZW50LT50aHJlYWQuZGVidWdjdGxtc3IpOwogfQogCi1zdGF0aWMgdm9pZCBfX2twcm9iZXMgcHJlcGFyZV9zaW5nbGVzdGVwKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWNsZWFyX2J0ZigpOwotCXJlZ3MtPmZsYWdzIHw9IFg4Nl9FRkxBR1NfVEY7Ci0JcmVncy0+ZmxhZ3MgJj0gflg4Nl9FRkxBR1NfSUY7Ci0JLyogc2luZ2xlIHN0ZXAgaW5saW5lIGlmIHRoZSBpbnN0cnVjdGlvbiBpcyBhbiBpbnQzICovCi0JaWYgKHAtPm9wY29kZSA9PSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OKQotCQlyZWdzLT5pcCA9ICh1bnNpZ25lZCBsb25nKXAtPmFkZHI7Ci0JZWxzZQotCQlyZWdzLT5pcCA9ICh1bnNpZ25lZCBsb25nKXAtPmFpbnNuLmluc247Ci19Ci0KIHZvaWQgX19rcHJvYmVzIGFyY2hfcHJlcGFyZV9rcmV0cHJvYmUoc3RydWN0IGtyZXRwcm9iZV9pbnN0YW5jZSAqcmksCiAJCQkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CkBAIC00MjksMjAgKzQ0Myw1MCBAQAogCSpzYXJhID0gKHVuc2lnbmVkIGxvbmcpICZrcmV0cHJvYmVfdHJhbXBvbGluZTsKIH0KIAorI2lmZGVmIENPTkZJR19PUFRQUk9CRVMKK3N0YXRpYyBpbnQgIF9fa3Byb2JlcyBzZXR1cF9kZXRvdXJfZXhlY3V0aW9uKHN0cnVjdCBrcHJvYmUgKnAsCisJCQkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisJCQkJCSAgICAgaW50IHJlZW50ZXIpOworI2Vsc2UKKyNkZWZpbmUgc2V0dXBfZGV0b3VyX2V4ZWN1dGlvbihwLCByZWdzLCByZWVudGVyKSAoMCkKKyNlbmRpZgorCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgc2V0dXBfc2luZ2xlc3RlcChzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywKLQkJCQkgICAgICAgc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYikKKwkJCQkgICAgICAgc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiwgaW50IHJlZW50ZXIpCiB7CisJaWYgKHNldHVwX2RldG91cl9leGVjdXRpb24ocCwgcmVncywgcmVlbnRlcikpCisJCXJldHVybjsKKwogI2lmICFkZWZpbmVkKENPTkZJR19QUkVFTVBUKQogCWlmIChwLT5haW5zbi5ib29zdGFibGUgPT0gMSAmJiAhcC0+cG9zdF9oYW5kbGVyKSB7CiAJCS8qIEJvb3N0IHVwIC0tIHdlIGNhbiBleGVjdXRlIGNvcGllZCBpbnN0cnVjdGlvbnMgZGlyZWN0bHkgKi8KLQkJcmVzZXRfY3VycmVudF9rcHJvYmUoKTsKKwkJaWYgKCFyZWVudGVyKQorCQkJcmVzZXRfY3VycmVudF9rcHJvYmUoKTsKKwkJLyoKKwkJICogUmVlbnRlcmluZyBib29zdGVkIHByb2JlIGRvZXNuJ3QgcmVzZXQgY3VycmVudF9rcHJvYmUsCisJCSAqIG5vciBzZXQgY3VycmVudF9rcHJvYmUsIGJlY2F1c2UgaXQgZG9lc24ndCB1c2Ugc2luZ2xlCisJCSAqIHN0ZXBwaW5nLgorCQkgKi8KIAkJcmVncy0+aXAgPSAodW5zaWduZWQgbG9uZylwLT5haW5zbi5pbnNuOwogCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJCXJldHVybjsKIAl9CiAjZW5kaWYKLQlwcmVwYXJlX3NpbmdsZXN0ZXAocCwgcmVncyk7Ci0Ja2NiLT5rcHJvYmVfc3RhdHVzID0gS1BST0JFX0hJVF9TUzsKKwlpZiAocmVlbnRlcikgeworCQlzYXZlX3ByZXZpb3VzX2twcm9iZShrY2IpOworCQlzZXRfY3VycmVudF9rcHJvYmUocCwgcmVncywga2NiKTsKKwkJa2NiLT5rcHJvYmVfc3RhdHVzID0gS1BST0JFX1JFRU5URVI7CisJfSBlbHNlCisJCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9ISVRfU1M7CisJLyogUHJlcGFyZSByZWFsIHNpbmdsZSBzdGVwcGluZyAqLworCWNsZWFyX2J0ZigpOworCXJlZ3MtPmZsYWdzIHw9IFg4Nl9FRkxBR1NfVEY7CisJcmVncy0+ZmxhZ3MgJj0gflg4Nl9FRkxBR1NfSUY7CisJLyogc2luZ2xlIHN0ZXAgaW5saW5lIGlmIHRoZSBpbnN0cnVjdGlvbiBpcyBhbiBpbnQzICovCisJaWYgKHAtPm9wY29kZSA9PSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OKQorCQlyZWdzLT5pcCA9ICh1bnNpZ25lZCBsb25nKXAtPmFkZHI7CisJZWxzZQorCQlyZWdzLT5pcCA9ICh1bnNpZ25lZCBsb25nKXAtPmFpbnNuLmluc247CiB9CiAKIC8qCkBAIC00NTYsMTEgKzUwMCw4IEBACiAJc3dpdGNoIChrY2ItPmtwcm9iZV9zdGF0dXMpIHsKIAljYXNlIEtQUk9CRV9ISVRfU1NET05FOgogCWNhc2UgS1BST0JFX0hJVF9BQ1RJVkU6Ci0JCXNhdmVfcHJldmlvdXNfa3Byb2JlKGtjYik7Ci0JCXNldF9jdXJyZW50X2twcm9iZShwLCByZWdzLCBrY2IpOwogCQlrcHJvYmVzX2luY19ubWlzc2VkX2NvdW50KHApOwotCQlwcmVwYXJlX3NpbmdsZXN0ZXAocCwgcmVncyk7Ci0JCWtjYi0+a3Byb2JlX3N0YXR1cyA9IEtQUk9CRV9SRUVOVEVSOworCQlzZXR1cF9zaW5nbGVzdGVwKHAsIHJlZ3MsIGtjYiwgMSk7CiAJCWJyZWFrOwogCWNhc2UgS1BST0JFX0hJVF9TUzoKIAkJLyogQSBwcm9iZSBoYXMgYmVlbiBoaXQgaW4gdGhlIGNvZGVwYXRoIGxlYWRpbmcgdXAgdG8sIG9yIGp1c3QKQEAgLTUzNSwxMyArNTc2LDEzIEBACiAJCQkgKiBtb3JlIGhlcmUuCiAJCQkgKi8KIAkJCWlmICghcC0+cHJlX2hhbmRsZXIgfHwgIXAtPnByZV9oYW5kbGVyKHAsIHJlZ3MpKQotCQkJCXNldHVwX3NpbmdsZXN0ZXAocCwgcmVncywga2NiKTsKKwkJCQlzZXR1cF9zaW5nbGVzdGVwKHAsIHJlZ3MsIGtjYiwgMCk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0gZWxzZSBpZiAoa3Byb2JlX3J1bm5pbmcoKSkgewogCQlwID0gX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSk7CiAJCWlmIChwLT5icmVha19oYW5kbGVyICYmIHAtPmJyZWFrX2hhbmRsZXIocCwgcmVncykpIHsKLQkJCXNldHVwX3NpbmdsZXN0ZXAocCwgcmVncywga2NiKTsKKwkJCXNldHVwX3NpbmdsZXN0ZXAocCwgcmVncywga2NiLCAwKTsKIAkJCXJldHVybiAxOwogCQl9CiAJfSAvKiBlbHNlOiBub3QgYSBrcHJvYmUgZmF1bHQ7IGxldCB0aGUga2VybmVsIGhhbmRsZSBpdCAqLwpAQCAtNTUwLDYgKzU5MSw2OSBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX1g4Nl82NAorI2RlZmluZSBTQVZFX1JFR1NfU1RSSU5HCQlcCisJLyogU2tpcCBjcywgaXAsIG9yaWdfYXguICovCVwKKwkiCXN1YnEgJDI0LCAlcnNwXG4iCVwKKwkiCXB1c2hxICVyZGlcbiIJCVwKKwkiCXB1c2hxICVyc2lcbiIJCVwKKwkiCXB1c2hxICVyZHhcbiIJCVwKKwkiCXB1c2hxICVyY3hcbiIJCVwKKwkiCXB1c2hxICVyYXhcbiIJCVwKKwkiCXB1c2hxICVyOFxuIgkJXAorCSIJcHVzaHEgJXI5XG4iCQlcCisJIglwdXNocSAlcjEwXG4iCQlcCisJIglwdXNocSAlcjExXG4iCQlcCisJIglwdXNocSAlcmJ4XG4iCQlcCisJIglwdXNocSAlcmJwXG4iCQlcCisJIglwdXNocSAlcjEyXG4iCQlcCisJIglwdXNocSAlcjEzXG4iCQlcCisJIglwdXNocSAlcjE0XG4iCQlcCisJIglwdXNocSAlcjE1XG4iCisjZGVmaW5lIFJFU1RPUkVfUkVHU19TVFJJTkcJCVwKKwkiCXBvcHEgJXIxNVxuIgkJXAorCSIJcG9wcSAlcjE0XG4iCQlcCisJIglwb3BxICVyMTNcbiIJCVwKKwkiCXBvcHEgJXIxMlxuIgkJXAorCSIJcG9wcSAlcmJwXG4iCQlcCisJIglwb3BxICVyYnhcbiIJCVwKKwkiCXBvcHEgJXIxMVxuIgkJXAorCSIJcG9wcSAlcjEwXG4iCQlcCisJIglwb3BxICVyOVxuIgkJXAorCSIJcG9wcSAlcjhcbiIJCVwKKwkiCXBvcHEgJXJheFxuIgkJXAorCSIJcG9wcSAlcmN4XG4iCQlcCisJIglwb3BxICVyZHhcbiIJCVwKKwkiCXBvcHEgJXJzaVxuIgkJXAorCSIJcG9wcSAlcmRpXG4iCQlcCisJLyogU2tpcCBvcmlnX2F4LCBpcCwgY3MgKi8JXAorCSIJYWRkcSAkMjQsICVyc3BcbiIKKyNlbHNlCisjZGVmaW5lIFNBVkVfUkVHU19TVFJJTkcJCVwKKwkvKiBTa2lwIGNzLCBpcCwgb3JpZ19heCBhbmQgZ3MuICovCVwKKwkiCXN1YmwgJDE2LCAlZXNwXG4iCVwKKwkiCXB1c2hsICVmc1xuIgkJXAorCSIJcHVzaGwgJWRzXG4iCQlcCisJIglwdXNobCAlZXNcbiIJCVwKKwkiCXB1c2hsICVlYXhcbiIJCVwKKwkiCXB1c2hsICVlYnBcbiIJCVwKKwkiCXB1c2hsICVlZGlcbiIJCVwKKwkiCXB1c2hsICVlc2lcbiIJCVwKKwkiCXB1c2hsICVlZHhcbiIJCVwKKwkiCXB1c2hsICVlY3hcbiIJCVwKKwkiCXB1c2hsICVlYnhcbiIKKyNkZWZpbmUgUkVTVE9SRV9SRUdTX1NUUklORwkJXAorCSIJcG9wbCAlZWJ4XG4iCQlcCisJIglwb3BsICVlY3hcbiIJCVwKKwkiCXBvcGwgJWVkeFxuIgkJXAorCSIJcG9wbCAlZXNpXG4iCQlcCisJIglwb3BsICVlZGlcbiIJCVwKKwkiCXBvcGwgJWVicFxuIgkJXAorCSIJcG9wbCAlZWF4XG4iCQlcCisJLyogU2tpcCBkcywgZXMsIGZzLCBncywgb3JpZ19heCwgYW5kIGlwLiBOb3RlOiBkb24ndCBwb3AgY3MgaGVyZSovXAorCSIJYWRkbCAkMjQsICVlc3BcbiIKKyNlbmRpZgorCiAvKgogICogV2hlbiBhIHJldHByb2JlZCBmdW5jdGlvbiByZXR1cm5zLCB0aGlzIGNvZGUgc2F2ZXMgcmVnaXN0ZXJzIGFuZAogICogY2FsbHMgdHJhbXBvbGluZV9oYW5kbGVyKCkgcnVucywgd2hpY2ggY2FsbHMgdGhlIGtyZXRwcm9iZSdzIGhhbmRsZXIuCkBAIC01NjMsNjUgKzY2NywxNiBAQAogCQkJLyogV2UgZG9uJ3QgYm90aGVyIHNhdmluZyB0aGUgc3MgcmVnaXN0ZXIgKi8KIAkJCSIJcHVzaHEgJXJzcFxuIgogCQkJIglwdXNoZnFcbiIKLQkJCS8qCi0JCQkgKiBTa2lwIGNzLCBpcCwgb3JpZ19heC4KLQkJCSAqIHRyYW1wb2xpbmVfaGFuZGxlcigpIHdpbGwgcGx1ZyBpbiB0aGVzZSB2YWx1ZXMKLQkJCSAqLwotCQkJIglzdWJxICQyNCwgJXJzcFxuIgotCQkJIglwdXNocSAlcmRpXG4iCi0JCQkiCXB1c2hxICVyc2lcbiIKLQkJCSIJcHVzaHEgJXJkeFxuIgotCQkJIglwdXNocSAlcmN4XG4iCi0JCQkiCXB1c2hxICVyYXhcbiIKLQkJCSIJcHVzaHEgJXI4XG4iCi0JCQkiCXB1c2hxICVyOVxuIgotCQkJIglwdXNocSAlcjEwXG4iCi0JCQkiCXB1c2hxICVyMTFcbiIKLQkJCSIJcHVzaHEgJXJieFxuIgotCQkJIglwdXNocSAlcmJwXG4iCi0JCQkiCXB1c2hxICVyMTJcbiIKLQkJCSIJcHVzaHEgJXIxM1xuIgotCQkJIglwdXNocSAlcjE0XG4iCi0JCQkiCXB1c2hxICVyMTVcbiIKKwkJCVNBVkVfUkVHU19TVFJJTkcKIAkJCSIJbW92cSAlcnNwLCAlcmRpXG4iCiAJCQkiCWNhbGwgdHJhbXBvbGluZV9oYW5kbGVyXG4iCiAJCQkvKiBSZXBsYWNlIHNhdmVkIHNwIHdpdGggdHJ1ZSByZXR1cm4gYWRkcmVzcy4gKi8KIAkJCSIJbW92cSAlcmF4LCAxNTIoJXJzcClcbiIKLQkJCSIJcG9wcSAlcjE1XG4iCi0JCQkiCXBvcHEgJXIxNFxuIgotCQkJIglwb3BxICVyMTNcbiIKLQkJCSIJcG9wcSAlcjEyXG4iCi0JCQkiCXBvcHEgJXJicFxuIgotCQkJIglwb3BxICVyYnhcbiIKLQkJCSIJcG9wcSAlcjExXG4iCi0JCQkiCXBvcHEgJXIxMFxuIgotCQkJIglwb3BxICVyOVxuIgotCQkJIglwb3BxICVyOFxuIgotCQkJIglwb3BxICVyYXhcbiIKLQkJCSIJcG9wcSAlcmN4XG4iCi0JCQkiCXBvcHEgJXJkeFxuIgotCQkJIglwb3BxICVyc2lcbiIKLQkJCSIJcG9wcSAlcmRpXG4iCi0JCQkvKiBTa2lwIG9yaWdfYXgsIGlwLCBjcyAqLwotCQkJIglhZGRxICQyNCwgJXJzcFxuIgorCQkJUkVTVE9SRV9SRUdTX1NUUklORwogCQkJIglwb3BmcVxuIgogI2Vsc2UKIAkJCSIJcHVzaGZcbiIKLQkJCS8qCi0JCQkgKiBTa2lwIGNzLCBpcCwgb3JpZ19heCBhbmQgZ3MuCi0JCQkgKiB0cmFtcG9saW5lX2hhbmRsZXIoKSB3aWxsIHBsdWcgaW4gdGhlc2UgdmFsdWVzCi0JCQkgKi8KLQkJCSIJc3VibCAkMTYsICVlc3BcbiIKLQkJCSIJcHVzaGwgJWZzXG4iCi0JCQkiCXB1c2hsICVlc1xuIgotCQkJIglwdXNobCAlZHNcbiIKLQkJCSIJcHVzaGwgJWVheFxuIgotCQkJIglwdXNobCAlZWJwXG4iCi0JCQkiCXB1c2hsICVlZGlcbiIKLQkJCSIJcHVzaGwgJWVzaVxuIgotCQkJIglwdXNobCAlZWR4XG4iCi0JCQkiCXB1c2hsICVlY3hcbiIKLQkJCSIJcHVzaGwgJWVieFxuIgorCQkJU0FWRV9SRUdTX1NUUklORwogCQkJIgltb3ZsICVlc3AsICVlYXhcbiIKIAkJCSIJY2FsbCB0cmFtcG9saW5lX2hhbmRsZXJcbiIKIAkJCS8qIE1vdmUgZmxhZ3MgdG8gY3MgKi8KQEAgLTYyOSwxNSArNjg0LDcgQEAKIAkJCSIJbW92bCAlZWR4LCA1MiglZXNwKVxuIgogCQkJLyogUmVwbGFjZSBzYXZlZCBmbGFncyB3aXRoIHRydWUgcmV0dXJuIGFkZHJlc3MuICovCiAJCQkiCW1vdmwgJWVheCwgNTYoJWVzcClcbiIKLQkJCSIJcG9wbCAlZWJ4XG4iCi0JCQkiCXBvcGwgJWVjeFxuIgotCQkJIglwb3BsICVlZHhcbiIKLQkJCSIJcG9wbCAlZXNpXG4iCi0JCQkiCXBvcGwgJWVkaVxuIgotCQkJIglwb3BsICVlYnBcbiIKLQkJCSIJcG9wbCAlZWF4XG4iCi0JCQkvKiBTa2lwIGRzLCBlcywgZnMsIGdzLCBvcmlnX2F4IGFuZCBpcCAqLwotCQkJIglhZGRsICQyNCwgJWVzcFxuIgorCQkJUkVTVE9SRV9SRUdTX1NUUklORwogCQkJIglwb3BmXG4iCiAjZW5kaWYKIAkJCSIJcmV0XG4iKTsKQEAgLTgwNSw4ICs4NTIsOCBAQAogCQkJICogVGhlc2UgaW5zdHJ1Y3Rpb25zIGNhbiBiZSBleGVjdXRlZCBkaXJlY3RseSBpZiBpdAogCQkJICoganVtcHMgYmFjayB0byBjb3JyZWN0IGFkZHJlc3MuCiAJCQkgKi8KLQkJCXNldF9qbXBfb3AoKHZvaWQgKilyZWdzLT5pcCwKLQkJCQkgICAodm9pZCAqKW9yaWdfaXAgKyAocmVncy0+aXAgLSBjb3B5X2lwKSk7CisJCQlzeW50aGVzaXplX3JlbGp1bXAoKHZvaWQgKilyZWdzLT5pcCwKKwkJCQkodm9pZCAqKW9yaWdfaXAgKyAocmVncy0+aXAgLSBjb3B5X2lwKSk7CiAJCQlwLT5haW5zbi5ib29zdGFibGUgPSAxOwogCQl9IGVsc2UgewogCQkJcC0+YWluc24uYm9vc3RhYmxlID0gLTE7CkBAIC0xMDMzLDYgKzEwODAsMzU4IEBACiAJcmV0dXJuIDA7CiB9CiAKKworI2lmZGVmIENPTkZJR19PUFRQUk9CRVMKKworLyogSW5zZXJ0IGEgY2FsbCBpbnN0cnVjdGlvbiBhdCBhZGRyZXNzICdmcm9tJywgd2hpY2ggY2FsbHMgYWRkcmVzcyAndG8nLiovCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgc3ludGhlc2l6ZV9yZWxjYWxsKHZvaWQgKmZyb20sIHZvaWQgKnRvKQoreworCV9fc3ludGhlc2l6ZV9yZWxhdGl2ZV9pbnNuKGZyb20sIHRvLCBSRUxBVElWRUNBTExfT1BDT0RFKTsKK30KKworLyogSW5zZXJ0IGEgbW92ZSBpbnN0cnVjdGlvbiB3aGljaCBzZXRzIGEgcG9pbnRlciB0byBlYXgvcmRpICgxc3QgYXJnKS4gKi8KK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBzeW50aGVzaXplX3NldF9hcmcxKGtwcm9iZV9vcGNvZGVfdCAqYWRkciwKKwkJCQkJICB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJKmFkZHIrKyA9IDB4NDg7CisJKmFkZHIrKyA9IDB4YmY7CisjZWxzZQorCSphZGRyKysgPSAweGI4OworI2VuZGlmCisJKih1bnNpZ25lZCBsb25nICopYWRkciA9IHZhbDsKK30KKwordm9pZCBfX2twcm9iZXMga3Byb2Jlc19vcHRpbnNuX3RlbXBsYXRlX2hvbGRlcih2b2lkKQoreworCWFzbSB2b2xhdGlsZSAoCisJCQkiLmdsb2JhbCBvcHRwcm9iZV90ZW1wbGF0ZV9lbnRyeVxuIgorCQkJIm9wdHByb2JlX3RlbXBsYXRlX2VudHJ5OiBcbiIKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCQkvKiBXZSBkb24ndCBib3RoZXIgc2F2aW5nIHRoZSBzcyByZWdpc3RlciAqLworCQkJIglwdXNocSAlcnNwXG4iCisJCQkiCXB1c2hmcVxuIgorCQkJU0FWRV9SRUdTX1NUUklORworCQkJIgltb3ZxICVyc3AsICVyc2lcbiIKKwkJCSIuZ2xvYmFsIG9wdHByb2JlX3RlbXBsYXRlX3ZhbFxuIgorCQkJIm9wdHByb2JlX3RlbXBsYXRlX3ZhbDogXG4iCisJCQlBU01fTk9QNQorCQkJQVNNX05PUDUKKwkJCSIuZ2xvYmFsIG9wdHByb2JlX3RlbXBsYXRlX2NhbGxcbiIKKwkJCSJvcHRwcm9iZV90ZW1wbGF0ZV9jYWxsOiBcbiIKKwkJCUFTTV9OT1A1CisJCQkvKiBNb3ZlIGZsYWdzIHRvIHJzcCAqLworCQkJIgltb3ZxIDE0NCglcnNwKSwgJXJkeFxuIgorCQkJIgltb3ZxICVyZHgsIDE1MiglcnNwKVxuIgorCQkJUkVTVE9SRV9SRUdTX1NUUklORworCQkJLyogU2tpcCBmbGFncyBlbnRyeSAqLworCQkJIglhZGRxICQ4LCAlcnNwXG4iCisJCQkiCXBvcGZxXG4iCisjZWxzZSAvKiBDT05GSUdfWDg2XzMyICovCisJCQkiCXB1c2hmXG4iCisJCQlTQVZFX1JFR1NfU1RSSU5HCisJCQkiCW1vdmwgJWVzcCwgJWVkeFxuIgorCQkJIi5nbG9iYWwgb3B0cHJvYmVfdGVtcGxhdGVfdmFsXG4iCisJCQkib3B0cHJvYmVfdGVtcGxhdGVfdmFsOiBcbiIKKwkJCUFTTV9OT1A1CisJCQkiLmdsb2JhbCBvcHRwcm9iZV90ZW1wbGF0ZV9jYWxsXG4iCisJCQkib3B0cHJvYmVfdGVtcGxhdGVfY2FsbDogXG4iCisJCQlBU01fTk9QNQorCQkJUkVTVE9SRV9SRUdTX1NUUklORworCQkJIglhZGRsICQ0LCAlZXNwXG4iCS8qIHNraXAgY3MgKi8KKwkJCSIJcG9wZlxuIgorI2VuZGlmCisJCQkiLmdsb2JhbCBvcHRwcm9iZV90ZW1wbGF0ZV9lbmRcbiIKKwkJCSJvcHRwcm9iZV90ZW1wbGF0ZV9lbmQ6IFxuIik7Cit9CisKKyNkZWZpbmUgVE1QTF9NT1ZFX0lEWCBcCisJKChsb25nKSZvcHRwcm9iZV90ZW1wbGF0ZV92YWwgLSAobG9uZykmb3B0cHJvYmVfdGVtcGxhdGVfZW50cnkpCisjZGVmaW5lIFRNUExfQ0FMTF9JRFggXAorCSgobG9uZykmb3B0cHJvYmVfdGVtcGxhdGVfY2FsbCAtIChsb25nKSZvcHRwcm9iZV90ZW1wbGF0ZV9lbnRyeSkKKyNkZWZpbmUgVE1QTF9FTkRfSURYIFwKKwkoKGxvbmcpJm9wdHByb2JlX3RlbXBsYXRlX2VuZCAtIChsb25nKSZvcHRwcm9iZV90ZW1wbGF0ZV9lbnRyeSkKKworI2RlZmluZSBJTlQzX1NJWkUgc2l6ZW9mKGtwcm9iZV9vcGNvZGVfdCkKKworLyogT3B0aW1pemVkIGtwcm9iZSBjYWxsIGJhY2sgZnVuY3Rpb246IGNhbGxlZCBmcm9tIG9wdGluc24gKi8KK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyBvcHRpbWl6ZWRfY2FsbGJhY2soc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wLAorCQkJCQkgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtwcm9iZV9jdGxibGsgKmtjYiA9IGdldF9rcHJvYmVfY3RsYmxrKCk7CisKKwlwcmVlbXB0X2Rpc2FibGUoKTsKKwlpZiAoa3Byb2JlX3J1bm5pbmcoKSkgeworCQlrcHJvYmVzX2luY19ubWlzc2VkX2NvdW50KCZvcC0+a3ApOworCX0gZWxzZSB7CisJCS8qIFNhdmUgc2tpcHBlZCByZWdpc3RlcnMgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCXJlZ3MtPmNzID0gX19LRVJORUxfQ1M7CisjZWxzZQorCQlyZWdzLT5jcyA9IF9fS0VSTkVMX0NTIHwgZ2V0X2tlcm5lbF9ycGwoKTsKKwkJcmVncy0+Z3MgPSAwOworI2VuZGlmCisJCXJlZ3MtPmlwID0gKHVuc2lnbmVkIGxvbmcpb3AtPmtwLmFkZHIgKyBJTlQzX1NJWkU7CisJCXJlZ3MtPm9yaWdfYXggPSB+MFVMOworCisJCV9fZ2V0X2NwdV92YXIoY3VycmVudF9rcHJvYmUpID0gJm9wLT5rcDsKKwkJa2NiLT5rcHJvYmVfc3RhdHVzID0gS1BST0JFX0hJVF9BQ1RJVkU7CisJCW9wdF9wcmVfaGFuZGxlcigmb3AtPmtwLCByZWdzKTsKKwkJX19nZXRfY3B1X3ZhcihjdXJyZW50X2twcm9iZSkgPSBOVUxMOworCX0KKwlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7Cit9CisKK3N0YXRpYyBpbnQgX19rcHJvYmVzIGNvcHlfb3B0aW1pemVkX2luc3RydWN0aW9ucyh1OCAqZGVzdCwgdTggKnNyYykKK3sKKwlpbnQgbGVuID0gMCwgcmV0OworCisJd2hpbGUgKGxlbiA8IFJFTEFUSVZFSlVNUF9TSVpFKSB7CisJCXJldCA9IF9fY29weV9pbnN0cnVjdGlvbihkZXN0ICsgbGVuLCBzcmMgKyBsZW4sIDEpOworCQlpZiAoIXJldCB8fCAhY2FuX2Jvb3N0KGRlc3QgKyBsZW4pKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWxlbiArPSByZXQ7CisJfQorCS8qIENoZWNrIHdoZXRoZXIgdGhlIGFkZHJlc3MgcmFuZ2UgaXMgcmVzZXJ2ZWQgKi8KKwlpZiAoZnRyYWNlX3RleHRfcmVzZXJ2ZWQoc3JjLCBzcmMgKyBsZW4gLSAxKSB8fAorCSAgICBhbHRlcm5hdGl2ZXNfdGV4dF9yZXNlcnZlZChzcmMsIHNyYyArIGxlbiAtIDEpKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0dXJuIGxlbjsKK30KKworLyogQ2hlY2sgd2hldGhlciBpbnNuIGlzIGluZGlyZWN0IGp1bXAgKi8KK3N0YXRpYyBpbnQgX19rcHJvYmVzIGluc25faXNfaW5kaXJlY3RfanVtcChzdHJ1Y3QgaW5zbiAqaW5zbikKK3sKKwlyZXR1cm4gKChpbnNuLT5vcGNvZGUuYnl0ZXNbMF0gPT0gMHhmZiAmJgorCQkoWDg2X01PRFJNX1JFRyhpbnNuLT5tb2RybS52YWx1ZSkgJiA2KSA9PSA0KSB8fCAvKiBKdW1wICovCisJCWluc24tPm9wY29kZS5ieXRlc1swXSA9PSAweGVhKTsJLyogU2VnbWVudCBiYXNlZCBqdW1wICovCit9CisKKy8qIENoZWNrIHdoZXRoZXIgaW5zbiBqdW1wcyBpbnRvIHNwZWNpZmllZCBhZGRyZXNzIHJhbmdlICovCitzdGF0aWMgaW50IGluc25fanVtcF9pbnRvX3JhbmdlKHN0cnVjdCBpbnNuICppbnNuLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbGVuKQoreworCXVuc2lnbmVkIGxvbmcgdGFyZ2V0ID0gMDsKKworCXN3aXRjaCAoaW5zbi0+b3Bjb2RlLmJ5dGVzWzBdKSB7CisJY2FzZSAweGUwOgkvKiBsb29wbmUgKi8KKwljYXNlIDB4ZTE6CS8qIGxvb3BlICovCisJY2FzZSAweGUyOgkvKiBsb29wICovCisJY2FzZSAweGUzOgkvKiBqY3h6ICovCisJY2FzZSAweGU5OgkvKiBuZWFyIHJlbGF0aXZlIGp1bXAgKi8KKwljYXNlIDB4ZWI6CS8qIHNob3J0IHJlbGF0aXZlIGp1bXAgKi8KKwkJYnJlYWs7CisJY2FzZSAweDBmOgorCQlpZiAoKGluc24tPm9wY29kZS5ieXRlc1sxXSAmIDB4ZjApID09IDB4ODApIC8qIGpjYyBuZWFyICovCisJCQlicmVhazsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJaWYgKChpbnNuLT5vcGNvZGUuYnl0ZXNbMF0gJiAweGYwKSA9PSAweDcwKSAvKiBqY2Mgc2hvcnQgKi8KKwkJCWJyZWFrOworCQlyZXR1cm4gMDsKKwl9CisJdGFyZ2V0ID0gKHVuc2lnbmVkIGxvbmcpaW5zbi0+bmV4dF9ieXRlICsgaW5zbi0+aW1tZWRpYXRlLnZhbHVlOworCisJcmV0dXJuIChzdGFydCA8PSB0YXJnZXQgJiYgdGFyZ2V0IDw9IHN0YXJ0ICsgbGVuKTsKK30KKworLyogRGVjb2RlIHdob2xlIGZ1bmN0aW9uIHRvIGVuc3VyZSBhbnkgaW5zdHJ1Y3Rpb25zIGRvbid0IGp1bXAgaW50byB0YXJnZXQgKi8KK3N0YXRpYyBpbnQgX19rcHJvYmVzIGNhbl9vcHRpbWl6ZSh1bnNpZ25lZCBsb25nIHBhZGRyKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBzaXplID0gMCwgb2Zmc2V0ID0gMDsKKwlzdHJ1Y3QgaW5zbiBpbnNuOworCWtwcm9iZV9vcGNvZGVfdCBidWZbTUFYX0lOU05fU0laRV07CisJLyogRHVtbXkgYnVmZmVycyBmb3IgbG9va3VwX3N5bWJvbF9hdHRycyAqLworCXN0YXRpYyBjaGFyIF9fZHVtbXlfYnVmW0tTWU1fTkFNRV9MRU5dOworCisJLyogTG9va3VwIHN5bWJvbCBpbmNsdWRpbmcgYWRkciAqLworCWlmICgha2FsbHN5bXNfbG9va3VwKHBhZGRyLCAmc2l6ZSwgJm9mZnNldCwgTlVMTCwgX19kdW1teV9idWYpKQorCQlyZXR1cm4gMDsKKworCS8qIENoZWNrIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBmb3IgYSByZWxhdGl2ZSBqdW1wLiAqLworCWlmIChzaXplIC0gb2Zmc2V0IDwgUkVMQVRJVkVKVU1QX1NJWkUpCisJCXJldHVybiAwOworCisJLyogRGVjb2RlIGluc3RydWN0aW9ucyAqLworCWFkZHIgPSBwYWRkciAtIG9mZnNldDsKKwl3aGlsZSAoYWRkciA8IHBhZGRyIC0gb2Zmc2V0ICsgc2l6ZSkgeyAvKiBEZWNvZGUgdW50aWwgZnVuY3Rpb24gZW5kICovCisJCWlmIChzZWFyY2hfZXhjZXB0aW9uX3RhYmxlcyhhZGRyKSkKKwkJCS8qCisJCQkgKiBTaW5jZSBzb21lIGZpeHVwIGNvZGUgd2lsbCBqdW1wcyBpbnRvIHRoaXMgZnVuY3Rpb24sCisJCQkgKiB3ZSBjYW4ndCBvcHRpbWl6ZSBrcHJvYmUgaW4gdGhpcyBmdW5jdGlvbi4KKwkJCSAqLworCQkJcmV0dXJuIDA7CisJCWtlcm5lbF9pbnNuX2luaXQoJmluc24sICh2b2lkICopYWRkcik7CisJCWluc25fZ2V0X29wY29kZSgmaW5zbik7CisJCWlmIChpbnNuLm9wY29kZS5ieXRlc1swXSA9PSBCUkVBS1BPSU5UX0lOU1RSVUNUSU9OKSB7CisJCQlyZXQgPSByZWNvdmVyX3Byb2JlZF9pbnN0cnVjdGlvbihidWYsIGFkZHIpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gMDsKKwkJCWtlcm5lbF9pbnNuX2luaXQoJmluc24sIGJ1Zik7CisJCX0KKwkJaW5zbl9nZXRfbGVuZ3RoKCZpbnNuKTsKKwkJLyogUmVjb3ZlciBhZGRyZXNzICovCisJCWluc24ua2FkZHIgPSAodm9pZCAqKWFkZHI7CisJCWluc24ubmV4dF9ieXRlID0gKHZvaWQgKikoYWRkciArIGluc24ubGVuZ3RoKTsKKwkJLyogQ2hlY2sgYW55IGluc3RydWN0aW9ucyBkb24ndCBqdW1wIGludG8gdGFyZ2V0ICovCisJCWlmIChpbnNuX2lzX2luZGlyZWN0X2p1bXAoJmluc24pIHx8CisJCSAgICBpbnNuX2p1bXBfaW50b19yYW5nZSgmaW5zbiwgcGFkZHIgKyBJTlQzX1NJWkUsCisJCQkJCSBSRUxBVElWRV9BRERSX1NJWkUpKQorCQkJcmV0dXJuIDA7CisJCWFkZHIgKz0gaW5zbi5sZW5ndGg7CisJfQorCisJcmV0dXJuIDE7Cit9CisKKy8qIENoZWNrIG9wdGltaXplZF9rcHJvYmUgY2FuIGFjdHVhbGx5IGJlIG9wdGltaXplZC4gKi8KK2ludCBfX2twcm9iZXMgYXJjaF9jaGVja19vcHRpbWl6ZWRfa3Byb2JlKHN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlICpvcCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qga3Byb2JlICpwOworCisJZm9yIChpID0gMTsgaSA8IG9wLT5vcHRpbnNuLnNpemU7IGkrKykgeworCQlwID0gZ2V0X2twcm9iZShvcC0+a3AuYWRkciArIGkpOworCQlpZiAocCAmJiAha3Byb2JlX2Rpc2FibGVkKHApKQorCQkJcmV0dXJuIC1FRVhJU1Q7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIENoZWNrIHRoZSBhZGRyIGlzIHdpdGhpbiB0aGUgb3B0aW1pemVkIGluc3RydWN0aW9ucy4gKi8KK2ludCBfX2twcm9iZXMgYXJjaF93aXRoaW5fb3B0aW1pemVkX2twcm9iZShzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3AsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKW9wLT5rcC5hZGRyIDw9IGFkZHIgJiYKKwkJKHVuc2lnbmVkIGxvbmcpb3AtPmtwLmFkZHIgKyBvcC0+b3B0aW5zbi5zaXplID4gYWRkcik7Cit9CisKKy8qIEZyZWUgb3B0aW1pemVkIGluc3RydWN0aW9uIHNsb3QgKi8KK3N0YXRpYyBfX2twcm9iZXMKK3ZvaWQgX19hcmNoX3JlbW92ZV9vcHRpbWl6ZWRfa3Byb2JlKHN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlICpvcCwgaW50IGRpcnR5KQoreworCWlmIChvcC0+b3B0aW5zbi5pbnNuKSB7CisJCWZyZWVfb3B0aW5zbl9zbG90KG9wLT5vcHRpbnNuLmluc24sIGRpcnR5KTsKKwkJb3AtPm9wdGluc24uaW5zbiA9IE5VTEw7CisJCW9wLT5vcHRpbnNuLnNpemUgPSAwOworCX0KK30KKwordm9pZCBfX2twcm9iZXMgYXJjaF9yZW1vdmVfb3B0aW1pemVkX2twcm9iZShzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3ApCit7CisJX19hcmNoX3JlbW92ZV9vcHRpbWl6ZWRfa3Byb2JlKG9wLCAxKTsKK30KKworLyoKKyAqIENvcHkgcmVwbGFjaW5nIHRhcmdldCBpbnN0cnVjdGlvbnMKKyAqIFRhcmdldCBpbnN0cnVjdGlvbnMgTVVTVCBiZSByZWxvY2F0YWJsZSAoY2hlY2tlZCBpbnNpZGUpCisgKi8KK2ludCBfX2twcm9iZXMgYXJjaF9wcmVwYXJlX29wdGltaXplZF9rcHJvYmUoc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wKQoreworCXU4ICpidWY7CisJaW50IHJldDsKKwlsb25nIHJlbDsKKworCWlmICghY2FuX29wdGltaXplKCh1bnNpZ25lZCBsb25nKW9wLT5rcC5hZGRyKSkKKwkJcmV0dXJuIC1FSUxTRVE7CisKKwlvcC0+b3B0aW5zbi5pbnNuID0gZ2V0X29wdGluc25fc2xvdCgpOworCWlmICghb3AtPm9wdGluc24uaW5zbikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwkvKgorCSAqIFZlcmlmeSBpZiB0aGUgYWRkcmVzcyBnYXAgaXMgaW4gMkdCIHJhbmdlLCBiZWNhdXNlIHRoaXMgdXNlcworCSAqIGEgcmVsYXRpdmUganVtcC4KKwkgKi8KKwlyZWwgPSAobG9uZylvcC0+b3B0aW5zbi5pbnNuIC0gKGxvbmcpb3AtPmtwLmFkZHIgKyBSRUxBVElWRUpVTVBfU0laRTsKKwlpZiAoYWJzKHJlbCkgPiAweDdmZmZmZmZmKQorCQlyZXR1cm4gLUVSQU5HRTsKKworCWJ1ZiA9ICh1OCAqKW9wLT5vcHRpbnNuLmluc247CisKKwkvKiBDb3B5IGluc3RydWN0aW9ucyBpbnRvIHRoZSBvdXQtb2YtbGluZSBidWZmZXIgKi8KKwlyZXQgPSBjb3B5X29wdGltaXplZF9pbnN0cnVjdGlvbnMoYnVmICsgVE1QTF9FTkRfSURYLCBvcC0+a3AuYWRkcik7CisJaWYgKHJldCA8IDApIHsKKwkJX19hcmNoX3JlbW92ZV9vcHRpbWl6ZWRfa3Byb2JlKG9wLCAwKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJb3AtPm9wdGluc24uc2l6ZSA9IHJldDsKKworCS8qIENvcHkgYXJjaC1kZXAtaW5zdGFuY2UgZnJvbSB0ZW1wbGF0ZSAqLworCW1lbWNweShidWYsICZvcHRwcm9iZV90ZW1wbGF0ZV9lbnRyeSwgVE1QTF9FTkRfSURYKTsKKworCS8qIFNldCBwcm9iZSBpbmZvcm1hdGlvbiAqLworCXN5bnRoZXNpemVfc2V0X2FyZzEoYnVmICsgVE1QTF9NT1ZFX0lEWCwgKHVuc2lnbmVkIGxvbmcpb3ApOworCisJLyogU2V0IHByb2JlIGZ1bmN0aW9uIGNhbGwgKi8KKwlzeW50aGVzaXplX3JlbGNhbGwoYnVmICsgVE1QTF9DQUxMX0lEWCwgb3B0aW1pemVkX2NhbGxiYWNrKTsKKworCS8qIFNldCByZXR1cm5pbmcgam1wIGluc3RydWN0aW9uIGF0IHRoZSB0YWlsIG9mIG91dC1vZi1saW5lIGJ1ZmZlciAqLworCXN5bnRoZXNpemVfcmVsanVtcChidWYgKyBUTVBMX0VORF9JRFggKyBvcC0+b3B0aW5zbi5zaXplLAorCQkJICAgKHU4ICopb3AtPmtwLmFkZHIgKyBvcC0+b3B0aW5zbi5zaXplKTsKKworCWZsdXNoX2ljYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZykgYnVmLAorCQkJICAgKHVuc2lnbmVkIGxvbmcpIGJ1ZiArIFRNUExfRU5EX0lEWCArCisJCQkgICBvcC0+b3B0aW5zbi5zaXplICsgUkVMQVRJVkVKVU1QX1NJWkUpOworCXJldHVybiAwOworfQorCisvKiBSZXBsYWNlIGEgYnJlYWtwb2ludCAoaW50Mykgd2l0aCBhIHJlbGF0aXZlIGp1bXAuICAqLworaW50IF9fa3Byb2JlcyBhcmNoX29wdGltaXplX2twcm9iZShzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3ApCit7CisJdW5zaWduZWQgY2hhciBqbXBfY29kZVtSRUxBVElWRUpVTVBfU0laRV07CisJczMyIHJlbCA9IChzMzIpKChsb25nKW9wLT5vcHRpbnNuLmluc24gLQorCQkJKChsb25nKW9wLT5rcC5hZGRyICsgUkVMQVRJVkVKVU1QX1NJWkUpKTsKKworCS8qIEJhY2t1cCBpbnN0cnVjdGlvbnMgd2hpY2ggd2lsbCBiZSByZXBsYWNlZCBieSBqdW1wIGFkZHJlc3MgKi8KKwltZW1jcHkob3AtPm9wdGluc24uY29waWVkX2luc24sIG9wLT5rcC5hZGRyICsgSU5UM19TSVpFLAorCSAgICAgICBSRUxBVElWRV9BRERSX1NJWkUpOworCisJam1wX2NvZGVbMF0gPSBSRUxBVElWRUpVTVBfT1BDT0RFOworCSooczMyICopKCZqbXBfY29kZVsxXSkgPSByZWw7CisKKwkvKgorCSAqIHRleHRfcG9rZV9zbXAgZG9lc24ndCBzdXBwb3J0IE5NSS9NQ0UgY29kZSBtb2RpZnlpbmcuCisJICogSG93ZXZlciwgc2luY2Uga3Byb2JlcyBpdHNlbGYgYWxzbyBkb2Vzbid0IHN1cHBvcnQgTk1JL01DRQorCSAqIGNvZGUgcHJvYmluZywgaXQncyBub3QgYSBwcm9ibGVtLgorCSAqLworCXRleHRfcG9rZV9zbXAob3AtPmtwLmFkZHIsIGptcF9jb2RlLCBSRUxBVElWRUpVTVBfU0laRSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFJlcGxhY2UgYSByZWxhdGl2ZSBqdW1wIHdpdGggYSBicmVha3BvaW50IChpbnQzKS4gICovCit2b2lkIF9fa3Byb2JlcyBhcmNoX3Vub3B0aW1pemVfa3Byb2JlKHN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlICpvcCkKK3sKKwl1OCBidWZbUkVMQVRJVkVKVU1QX1NJWkVdOworCisJLyogU2V0IGludDMgdG8gZmlyc3QgYnl0ZSBmb3Iga3Byb2JlcyAqLworCWJ1ZlswXSA9IEJSRUFLUE9JTlRfSU5TVFJVQ1RJT047CisJbWVtY3B5KGJ1ZiArIDEsIG9wLT5vcHRpbnNuLmNvcGllZF9pbnNuLCBSRUxBVElWRV9BRERSX1NJWkUpOworCXRleHRfcG9rZV9zbXAob3AtPmtwLmFkZHIsIGJ1ZiwgUkVMQVRJVkVKVU1QX1NJWkUpOworfQorCitzdGF0aWMgaW50ICBfX2twcm9iZXMgc2V0dXBfZGV0b3VyX2V4ZWN1dGlvbihzdHJ1Y3Qga3Byb2JlICpwLAorCQkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgICAgIGludCByZWVudGVyKQoreworCXN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlICpvcDsKKworCWlmIChwLT5mbGFncyAmIEtQUk9CRV9GTEFHX09QVElNSVpFRCkgeworCQkvKiBUaGlzIGtwcm9iZSBpcyByZWFsbHkgYWJsZSB0byBydW4gb3B0aW1pemVkIHBhdGguICovCisJCW9wID0gY29udGFpbmVyX29mKHAsIHN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlLCBrcCk7CisJCS8qIERldG91ciB0aHJvdWdoIGNvcGllZCBpbnN0cnVjdGlvbnMgKi8KKwkJcmVncy0+aXAgPSAodW5zaWduZWQgbG9uZylvcC0+b3B0aW5zbi5pbnNuICsgVE1QTF9FTkRfSURYOworCQlpZiAoIXJlZW50ZXIpCisJCQlyZXNldF9jdXJyZW50X2twcm9iZSgpOworCQlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCiBpbnQgX19pbml0IGFyY2hfaW5pdF9rcHJvYmVzKHZvaWQpCiB7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbW1jb25mLWZhbTEwaF82NC5jIGIvYXJjaC94ODYva2VybmVsL21tY29uZi1mYW0xMGhfNjQuYwppbmRleCA3MTJkMTVmLi43MTgyNTgwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbW1jb25mLWZhbTEwaF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tbWNvbmYtZmFtMTBoXzY0LmMKQEAgLTcsNiArNyw4IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZ2UuaD4KKwogI2luY2x1ZGUgPGFzbS9wY2ktZGlyZWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvc29ydC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgpAQCAtMzAsMTEgKzMyLDYgQEAKIAl7IDB4ZmYsIDAsIFBDSV9WRU5ET1JfSURfQU1ELCAweDEyMDAgfSwKIH07CiAKLXN0cnVjdCByYW5nZSB7Ci0JdTY0IHN0YXJ0OwotCXU2NCBlbmQ7Ci19OwotCiBzdGF0aWMgaW50IF9fY3B1aW5pdCBjbXBfcmFuZ2UoY29uc3Qgdm9pZCAqeDEsIGNvbnN0IHZvaWQgKngyKQogewogCWNvbnN0IHN0cnVjdCByYW5nZSAqcjEgPSB4MTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tcnN0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvbXJzdC5jCmluZGV4IDNiNzA3OGEuLjBhYWQ4NjcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tcnN0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL21yc3QuYwpAQCAtMTAsOCArMTAsMjExIEBACiAgKiBvZiB0aGUgTGljZW5zZS4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zZmkuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9tcHNwZWNfZGVmLmg+CisjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgorI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2lvX2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vbXJzdC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pODI1OS5oPgorI2luY2x1ZGUgPGFzbS9hcGJfdGltZXIuaD4KKworc3RhdGljIHUzMiBzZmlfbXRpbWVyX3VzYWdlW1NGSV9NVE1SX01BWF9OVU1dOworc3RhdGljIHN0cnVjdCBzZmlfdGltZXJfdGFibGVfZW50cnkgc2ZpX210aW1lcl9hcnJheVtTRklfTVRNUl9NQVhfTlVNXTsKK2ludCBzZmlfbXRpbWVyX251bTsKKworc3RydWN0IHNmaV9ydGNfdGFibGVfZW50cnkgc2ZpX21ydGNfYXJyYXlbU0ZJX01SVENfTUFYXTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNmaV9tcnRjX2FycmF5KTsKK2ludCBzZmlfbXJ0Y19udW07CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhc3NpZ25fdG9fbXBfaXJxKHN0cnVjdCBtcGNfaW50c3JjICptLAorCQkJCSAgICBzdHJ1Y3QgbXBjX2ludHNyYyAqbXBfaXJxKQoreworCW1lbWNweShtcF9pcnEsIG0sIHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYykpOworfQorCitzdGF0aWMgaW5saW5lIGludCBtcF9pcnFfY21wKHN0cnVjdCBtcGNfaW50c3JjICptcF9pcnEsCisJCQkJc3RydWN0IG1wY19pbnRzcmMgKm0pCit7CisJcmV0dXJuIG1lbWNtcChtcF9pcnEsIG0sIHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYykpOworfQorCitzdGF0aWMgdm9pZCBzYXZlX21wX2lycShzdHJ1Y3QgbXBjX2ludHNyYyAqbSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBtcF9pcnFfZW50cmllczsgaSsrKSB7CisJCWlmICghbXBfaXJxX2NtcCgmbXBfaXJxc1tpXSwgbSkpCisJCQlyZXR1cm47CisJfQorCisJYXNzaWduX3RvX21wX2lycShtLCAmbXBfaXJxc1ttcF9pcnFfZW50cmllc10pOworCWlmICgrK21wX2lycV9lbnRyaWVzID09IE1BWF9JUlFfU09VUkNFUykKKwkJcGFuaWMoIk1heCAjIG9mIGlycSBzb3VyY2VzIGV4Y2VlZGVkISFcbiIpOworfQorCisvKiBwYXJzZSBhbGwgdGhlIG10aW1lciBpbmZvIHRvIGEgc3RhdGljIG10aW1lciBhcnJheSAqLworc3RhdGljIGludCBfX2luaXQgc2ZpX3BhcnNlX210bXIoc3RydWN0IHNmaV90YWJsZV9oZWFkZXIgKnRhYmxlKQoreworCXN0cnVjdCBzZmlfdGFibGVfc2ltcGxlICpzYjsKKwlzdHJ1Y3Qgc2ZpX3RpbWVyX3RhYmxlX2VudHJ5ICpwZW50cnk7CisJc3RydWN0IG1wY19pbnRzcmMgbXBfaXJxOworCWludCB0b3RhbGxlbjsKKworCXNiID0gKHN0cnVjdCBzZmlfdGFibGVfc2ltcGxlICopdGFibGU7CisJaWYgKCFzZmlfbXRpbWVyX251bSkgeworCQlzZmlfbXRpbWVyX251bSA9IFNGSV9HRVRfTlVNX0VOVFJJRVMoc2IsCisJCQkJCXN0cnVjdCBzZmlfdGltZXJfdGFibGVfZW50cnkpOworCQlwZW50cnkgPSAoc3RydWN0IHNmaV90aW1lcl90YWJsZV9lbnRyeSAqKSBzYi0+cGVudHJ5OworCQl0b3RhbGxlbiA9IHNmaV9tdGltZXJfbnVtICogc2l6ZW9mKCpwZW50cnkpOworCQltZW1jcHkoc2ZpX210aW1lcl9hcnJheSwgcGVudHJ5LCB0b3RhbGxlbik7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiU0ZJOiBNVElNRVIgaW5mbyAobnVtID0gJWQpOlxuIiwgc2ZpX210aW1lcl9udW0pOworCXBlbnRyeSA9IHNmaV9tdGltZXJfYXJyYXk7CisJZm9yICh0b3RhbGxlbiA9IDA7IHRvdGFsbGVuIDwgc2ZpX210aW1lcl9udW07IHRvdGFsbGVuKyssIHBlbnRyeSsrKSB7CisJCXByaW50ayhLRVJOX0lORk8gInRpbWVyWyVkXTogcGFkZHIgPSAweCUwOHgsIGZyZXEgPSAlZEh6LCIKKwkJCSIgaXJxID0gJWRcbiIsIHRvdGFsbGVuLCAodTMyKXBlbnRyeS0+cGh5c19hZGRyLAorCQkJcGVudHJ5LT5mcmVxX2h6LCBwZW50cnktPmlycSk7CisJCQlpZiAoIXBlbnRyeS0+aXJxKQorCQkJCWNvbnRpbnVlOworCQkJbXBfaXJxLnR5cGUgPSBNUF9JT0FQSUM7CisJCQltcF9pcnEuaXJxdHlwZSA9IG1wX0lOVDsKKy8qIHRyaWdnZXJpbmcgbW9kZSBlZGdlIGJpdCAyLTMsIGFjdGl2ZSBoaWdoIHBvbGFyaXR5IGJpdCAwLTEgKi8KKwkJCW1wX2lycS5pcnFmbGFnID0gNTsKKwkJCW1wX2lycS5zcmNidXMgPSAwOworCQkJbXBfaXJxLnNyY2J1c2lycSA9IHBlbnRyeS0+aXJxOwkvKiBJUlEgKi8KKwkJCW1wX2lycS5kc3RhcGljID0gTVBfQVBJQ19BTEw7CisJCQltcF9pcnEuZHN0aXJxID0gcGVudHJ5LT5pcnE7CisJCQlzYXZlX21wX2lycSgmbXBfaXJxKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IHNmaV90aW1lcl90YWJsZV9lbnRyeSAqc2ZpX2dldF9tdG1yKGludCBoaW50KQoreworCWludCBpOworCWlmIChoaW50IDwgc2ZpX210aW1lcl9udW0pIHsKKwkJaWYgKCFzZmlfbXRpbWVyX3VzYWdlW2hpbnRdKSB7CisJCQlwcl9kZWJ1ZygiaGludCB0YWtlbiBmb3IgdGltZXIgJWQgaXJxICVkXG4iLFwKKwkJCQloaW50LCBzZmlfbXRpbWVyX2FycmF5W2hpbnRdLmlycSk7CisJCQlzZmlfbXRpbWVyX3VzYWdlW2hpbnRdID0gMTsKKwkJCXJldHVybiAmc2ZpX210aW1lcl9hcnJheVtoaW50XTsKKwkJfQorCX0KKwkvKiB0YWtlIHRoZSBmaXJzdCB0aW1lciBhdmFpbGFibGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2ZpX210aW1lcl9udW07KSB7CisJCWlmICghc2ZpX210aW1lcl91c2FnZVtpXSkgeworCQkJc2ZpX210aW1lcl91c2FnZVtpXSA9IDE7CisJCQlyZXR1cm4gJnNmaV9tdGltZXJfYXJyYXlbaV07CisJCX0KKwkJaSsrOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKwordm9pZCBzZmlfZnJlZV9tdG1yKHN0cnVjdCBzZmlfdGltZXJfdGFibGVfZW50cnkgKm10bXIpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHNmaV9tdGltZXJfbnVtOykgeworCQlpZiAobXRtci0+aXJxID09IHNmaV9tdGltZXJfYXJyYXlbaV0uaXJxKSB7CisJCQlzZmlfbXRpbWVyX3VzYWdlW2ldID0gMDsKKwkJCXJldHVybjsKKwkJfQorCQlpKys7CisJfQorfQorCisvKiBwYXJzZSBhbGwgdGhlIG1ydGMgaW5mbyB0byBhIGdsb2JhbCBtcnRjIGFycmF5ICovCitpbnQgX19pbml0IHNmaV9wYXJzZV9tcnRjKHN0cnVjdCBzZmlfdGFibGVfaGVhZGVyICp0YWJsZSkKK3sKKwlzdHJ1Y3Qgc2ZpX3RhYmxlX3NpbXBsZSAqc2I7CisJc3RydWN0IHNmaV9ydGNfdGFibGVfZW50cnkgKnBlbnRyeTsKKwlzdHJ1Y3QgbXBjX2ludHNyYyBtcF9pcnE7CisKKwlpbnQgdG90YWxsZW47CisKKwlzYiA9IChzdHJ1Y3Qgc2ZpX3RhYmxlX3NpbXBsZSAqKXRhYmxlOworCWlmICghc2ZpX21ydGNfbnVtKSB7CisJCXNmaV9tcnRjX251bSA9IFNGSV9HRVRfTlVNX0VOVFJJRVMoc2IsCisJCQkJCQlzdHJ1Y3Qgc2ZpX3J0Y190YWJsZV9lbnRyeSk7CisJCXBlbnRyeSA9IChzdHJ1Y3Qgc2ZpX3J0Y190YWJsZV9lbnRyeSAqKXNiLT5wZW50cnk7CisJCXRvdGFsbGVuID0gc2ZpX21ydGNfbnVtICogc2l6ZW9mKCpwZW50cnkpOworCQltZW1jcHkoc2ZpX21ydGNfYXJyYXksIHBlbnRyeSwgdG90YWxsZW4pOworCX0KKworCXByaW50ayhLRVJOX0lORk8gIlNGSTogUlRDIGluZm8gKG51bSA9ICVkKTpcbiIsIHNmaV9tcnRjX251bSk7CisJcGVudHJ5ID0gc2ZpX21ydGNfYXJyYXk7CisJZm9yICh0b3RhbGxlbiA9IDA7IHRvdGFsbGVuIDwgc2ZpX21ydGNfbnVtOyB0b3RhbGxlbisrLCBwZW50cnkrKykgeworCQlwcmludGsoS0VSTl9JTkZPICJSVENbJWRdOiBwYWRkciA9IDB4JTA4eCwgaXJxID0gJWRcbiIsCisJCQl0b3RhbGxlbiwgKHUzMilwZW50cnktPnBoeXNfYWRkciwgcGVudHJ5LT5pcnEpOworCQltcF9pcnEudHlwZSA9IE1QX0lPQVBJQzsKKwkJbXBfaXJxLmlycXR5cGUgPSBtcF9JTlQ7CisJCW1wX2lycS5pcnFmbGFnID0gMDsKKwkJbXBfaXJxLnNyY2J1cyA9IDA7CisJCW1wX2lycS5zcmNidXNpcnEgPSBwZW50cnktPmlycTsJLyogSVJRICovCisJCW1wX2lycS5kc3RhcGljID0gTVBfQVBJQ19BTEw7CisJCW1wX2lycS5kc3RpcnEgPSBwZW50cnktPmlycTsKKwkJc2F2ZV9tcF9pcnEoJm1wX2lycSk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogdGhlIHNlY29uZGFyeSBjbG9jayBpbiBNb29yZXN0b3duIGNhbiBiZSBBUEJUIG9yIExBUElDIGNsb2NrLCBkZWZhdWx0IHRvCisgKiBBUEJUIGJ1dCBjbWRsaW5lIG9wdGlvbiBjYW4gYWxzbyBvdmVycmlkZSBpdC4KKyAqLworc3RhdGljIHZvaWQgX19jcHVpbml0IG1yc3Rfc2V0dXBfc2Vjb25kYXJ5X2Nsb2NrKHZvaWQpCit7CisJLyogcmVzdG9yZSBkZWZhdWx0IGxhcGljIGNsb2NrIGlmIGRpc2FibGVkIGJ5IGNtZGxpbmUgKi8KKwlpZiAoZGlzYWJsZV9hcGJ0X3BlcmNwdSkKKwkJcmV0dXJuIHNldHVwX3NlY29uZGFyeV9BUElDX2Nsb2NrKCk7CisJYXBidF9zZXR1cF9zZWNvbmRhcnlfY2xvY2soKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IG1yc3RfY2FsaWJyYXRlX3RzYyh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGZhc3RfY2FsaWJyYXRlOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWZhc3RfY2FsaWJyYXRlID0gYXBidF9xdWlja19jYWxpYnJhdGUoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisKKwlpZiAoZmFzdF9jYWxpYnJhdGUpCisJCXJldHVybiBmYXN0X2NhbGlicmF0ZTsKKworCXJldHVybiAwOworfQorCit2b2lkIF9faW5pdCBtcnN0X3RpbWVfaW5pdCh2b2lkKQoreworCXNmaV90YWJsZV9wYXJzZShTRklfU0lHX01UTVIsIE5VTEwsIE5VTEwsIHNmaV9wYXJzZV9tdG1yKTsKKwlwcmVfaW5pdF9hcGljX0lSUTAoKTsKKwlhcGJ0X3RpbWVfaW5pdCgpOworfQorCit2b2lkIF9faW5pdCBtcnN0X3J0Y19pbml0KHZvaWQpCit7CisJc2ZpX3RhYmxlX3BhcnNlKFNGSV9TSUdfTVJUQywgTlVMTCwgTlVMTCwgc2ZpX3BhcnNlX21ydGMpOworfQorCisvKgorICogaWYgd2UgdXNlIHBlciBjcHUgYXBiIHRpbWVyLCB0aGUgYm9vdGNsb2NrIGFscmVhZHkgc2V0dXAuIGlmIHdlIHVzZSBsYXBpYworICogdGltZXIgYW5kIG9uZSBhcGJ0IHRpbWVyIGZvciBicm9hZGNhc3QsIHdlIG5lZWQgdG8gc2V0IHVwIGxhcGljIGJvb3QgY2xvY2suCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBtcnN0X3NldHVwX2Jvb3RfY2xvY2sodm9pZCkKK3sKKwlwcl9pbmZvKCIlczogcGVyIGNwdSBhcGJ0IGZsYWcgJWQgXG4iLCBfX2Z1bmNfXywgZGlzYWJsZV9hcGJ0X3BlcmNwdSk7CisJaWYgKGRpc2FibGVfYXBidF9wZXJjcHUpCisJCXNldHVwX2Jvb3RfQVBJQ19jbG9jaygpOworfTsKIAogLyoKICAqIE1vb3Jlc3Rvd24gc3BlY2lmaWMgeDg2X2luaXQgZnVuY3Rpb24gb3ZlcnJpZGVzIGFuZCBlYXJseSBzZXR1cApAQCAtMjEsNCArMjI0LDE3IEBACiB7CiAJeDg2X2luaXQucmVzb3VyY2VzLnByb2JlX3JvbXMgPSB4ODZfaW5pdF9ub29wOwogCXg4Nl9pbml0LnJlc291cmNlcy5yZXNlcnZlX3Jlc291cmNlcyA9IHg4Nl9pbml0X25vb3A7CisKKwl4ODZfaW5pdC50aW1lcnMudGltZXJfaW5pdCA9IG1yc3RfdGltZV9pbml0OworCXg4Nl9pbml0LnRpbWVycy5zZXR1cF9wZXJjcHVfY2xvY2tldiA9IG1yc3Rfc2V0dXBfYm9vdF9jbG9jazsKKworCXg4Nl9pbml0LmlycXMucHJlX3ZlY3Rvcl9pbml0ID0geDg2X2luaXRfbm9vcDsKKworCXg4Nl9jcHVpbml0LnNldHVwX3BlcmNwdV9jbG9ja2V2ID0gbXJzdF9zZXR1cF9zZWNvbmRhcnlfY2xvY2s7CisKKwl4ODZfcGxhdGZvcm0uY2FsaWJyYXRlX3RzYyA9IG1yc3RfY2FsaWJyYXRlX3RzYzsKKwl4ODZfaW5pdC5wY2kuaW5pdCA9IHBjaV9tcnN0X2luaXQ7CisJeDg2X2luaXQucGNpLmZpeHVwX2lycXMgPSB4ODZfaW5pdF9ub29wOworCisJbGVnYWN5X3BpYyA9ICZudWxsX2xlZ2FjeV9waWM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvb2xwYy5jIGIvYXJjaC94ODYva2VybmVsL29scGMuYwppbmRleCA5ZDFkMjYzLi44Mjk3MTYwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvb2xwYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9vbHBjLmMKQEAgLTE3LDcgKzE3LDkgQEAKICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisKICNpbmNsdWRlIDxhc20vZ2VvZGUuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vb2xwYy5oPgogCiAjaWZkZWYgQ09ORklHX09QRU5fRklSTVdBUkUKQEAgLTI0Myw5ICsyNDUsMTEgQEAKIAlvbHBjX2VjX2NtZChFQ19GSVJNV0FSRV9SRVYsIE5VTEwsIDAsCiAJCQkodW5zaWduZWQgY2hhciAqKSAmb2xwY19wbGF0Zm9ybV9pbmZvLmVjdmVyLCAxKTsKIAotCS8qIGNoZWNrIHRvIHNlZSBpZiB0aGUgVlNBIGV4aXN0cyAqLwotCWlmIChjczU1MzVfaGFzX3ZzYTIoKSkKLQkJb2xwY19wbGF0Zm9ybV9pbmZvLmZsYWdzIHw9IE9MUENfRl9WU0E7CisjaWZkZWYgQ09ORklHX1BDSV9PTFBDCisJLyogSWYgdGhlIFZTQSBleGlzdHMgbGV0IGl0IGVtdWxhdGUgUENJLCBpZiBub3QgZW11bGF0ZSBpbiBrZXJuZWwgKi8KKwlpZiAoIWNzNTUzNV9oYXNfdnNhMigpKQorCQl4ODZfaW5pdC5wY2kuYXJjaF9pbml0ID0gcGNpX29scGNfaW5pdDsKKyNlbmRpZgogCiAJcHJpbnRrKEtFUk5fSU5GTyAiT0xQQyBib2FyZCByZXZpc2lvbiAlcyVYIChFQz0leClcbiIsCiAJCQkoKG9scGNfcGxhdGZvcm1faW5mby5ib2FyZHJldiAmIDB4ZikgPCA4KSA/ICJwcmUiIDogIiIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQuYyBiL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jCmluZGV4IDFiMTczOWQuLjFkYjE4M2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wYXJhdmlydC5jCkBAIC00MjgsMTAgKzQyOCw2IEBACiAJLnB0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQgPSBfX3B0ZXBfbW9kaWZ5X3Byb3Rfc3RhcnQsCiAJLnB0ZXBfbW9kaWZ5X3Byb3RfY29tbWl0ID0gX19wdGVwX21vZGlmeV9wcm90X2NvbW1pdCwKIAotI2lmZGVmIENPTkZJR19ISUdIUFRFCi0JLmttYXBfYXRvbWljX3B0ZSA9IGttYXBfYXRvbWljLAotI2VuZGlmCi0KICNpZiBQQUdFVEFCTEVfTEVWRUxTID49IDMKICNpZmRlZiBDT05GSUdfWDg2X1BBRQogCS5zZXRfcHRlX2F0b21pYyA9IG5hdGl2ZV9zZXRfcHRlX2F0b21pYywKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktY2FsZ2FyeV82NC5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKaW5kZXggMmJiZGU2MC4uZmI5OWY3ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKQEAgLTEzMDksNyArMTMwOSw3IEBACiAvKgogICogZ2V0X3RjZV9zcGFjZV9mcm9tX3RhcigpOgogICogRnVuY3Rpb24gZm9yIGtkdW1wIGNhc2UuIEdldCB0aGUgdGNlIHRhYmxlcyBmcm9tIGZpcnN0IGtlcm5lbAotICogYnkgcmVhZGluZyB0aGUgY29udGVudHMgb2YgdGhlIGJhc2UgYWRyZXNzIHJlZ2lzdGVyIG9mIGNhbGdhcnkgaW9tbXUKKyAqIGJ5IHJlYWRpbmcgdGhlIGNvbnRlbnRzIG9mIHRoZSBiYXNlIGFkZHJlc3MgcmVnaXN0ZXIgb2YgY2FsZ2FyeSBpb21tdQogICovCiBzdGF0aWMgdm9pZCBfX2luaXQgZ2V0X3RjZV9zcGFjZV9mcm9tX3Rhcih2b2lkKQogewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKaW5kZXggNzVlMTRlMi4uYTRhYzc2NCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCkBAIC0zOCw3ICszOCw3IEBACiAgKiBUaGlzIHZhcmlhYmxlIGJlY29tZXMgMSBpZiBpb21tdT1wdCBpcyBwYXNzZWQgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUuCiAgKiBJZiB0aGlzIHZhcmlhYmxlIGlzIDEsIElPTU1VIGltcGxlbWVudGF0aW9ucyBkbyBubyBETUEgdHJhbnNsYXRpb24gZm9yCiAgKiBkZXZpY2VzIGFuZCBhbGxvdyBldmVyeSBkZXZpY2UgdG8gYWNjZXNzIHRvIHdob2xlIHBoeXNpY2FsIG1lbW9yeS4gVGhpcyBpcwotICogdXNlZnVsIGlmIGEgdXNlciB3YW50IHRvIHVzZSBhbiBJT01NVSBvbmx5IGZvciBLVk0gZGV2aWNlIGFzc2lnbm1lbnQgdG8KKyAqIHVzZWZ1bCBpZiBhIHVzZXIgd2FudHMgdG8gdXNlIGFuIElPTU1VIG9ubHkgZm9yIEtWTSBkZXZpY2UgYXNzaWdubWVudCB0bwogICogZ3Vlc3RzIGFuZCBub3QgZm9yIGRyaXZlciBkbWEgdHJhbnNsYXRpb24uCiAgKi8KIGludCBpb21tdV9wYXNzX3Rocm91Z2ggX19yZWFkX21vc3RseTsKQEAgLTY1LDcgKzY1LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woZG1hX3NldF9tYXNrKTsKIAotI2lmZGVmIENPTkZJR19YODZfNjQKKyNpZiBkZWZpbmVkKENPTkZJR19YODZfNjQpICYmICFkZWZpbmVkKENPTkZJR19OVU1BKQogc3RhdGljIF9faW5pdGRhdGEgdm9pZCAqZG1hMzJfYm9vdG1lbV9wdHI7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBkbWEzMl9ib290bWVtX3NpemUgX19pbml0ZGF0YSA9ICgxMjhVTEw8PDIwKTsKIApAQCAtMTE2LDE0ICsxMTYsMjEgQEAKIAlkbWEzMl9ib290bWVtX3B0ciA9IE5VTEw7CiAJZG1hMzJfYm9vdG1lbV9zaXplID0gMDsKIH0KKyNlbHNlCit2b2lkIF9faW5pdCBkbWEzMl9yZXNlcnZlX2Jvb3RtZW0odm9pZCkKK3sKK30KK3N0YXRpYyB2b2lkIF9faW5pdCBkbWEzMl9mcmVlX2Jvb3RtZW0odm9pZCkKK3sKK30KKwogI2VuZGlmCiAKIHZvaWQgX19pbml0IHBjaV9pb21tdV9hbGxvYyh2b2lkKQogewotI2lmZGVmIENPTkZJR19YODZfNjQKIAkvKiBmcmVlIHRoZSByYW5nZSBzbyBpb21tdSBjb3VsZCBnZXQgc29tZSByYW5nZSBsZXNzIHRoYW4gNEcgKi8KIAlkbWEzMl9mcmVlX2Jvb3RtZW0oKTsKLSNlbmRpZgorCiAJaWYgKHBjaV9zd2lvdGxiX2RldGVjdCgpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCmluZGV4IDJkOTZhYWIuLmE1MDNiMWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKQEAgLTU4MSw3ICs1ODEsNyBAQAogCXN0cnVjdCBwZXJmX2V2ZW50X2F0dHIgYXR0cjsKIAogCS8qCi0JICogV2Ugc2hvdWQgaGF2ZSBhdCBsZWFzdCBhbiBpbmFjdGl2ZSBicmVha3BvaW50IGF0IHRoaXMKKwkgKiBXZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCBhbiBpbmFjdGl2ZSBicmVha3BvaW50IGF0IHRoaXMKIAkgKiBzbG90LiBJdCBtZWFucyB0aGUgdXNlciBpcyB3cml0aW5nIGRyNyB3aXRob3V0IGhhdmluZwogCSAqIHdyaXR0ZW4gdGhlIGFkZHJlc3MgcmVnaXN0ZXIgZmlyc3QKIAkgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9yZWJvb3QuYwppbmRleCA3MDRiZGRjLi44ZTFhYWM4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlYm9vdC5jCkBAIC00NjEsNiArNDYxLDE0IEBACiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1hY21pbmkzLDEiKSwKIAkJfSwKIAl9LAorCXsJLyogSGFuZGxlIHByb2JsZW1zIHdpdGggcmVib290aW5nIG9uIHRoZSBpTWFjOSwxLiAqLworCQkuY2FsbGJhY2sgPSBzZXRfcGNpX3JlYm9vdCwKKwkJLmlkZW50ID0gIkFwcGxlIGlNYWM5LDEiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwgIkFwcGxlIEluYy4iKSwKKwkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiaU1hYzksMSIpLAorCQl9LAorCX0sCiAJeyB9CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IGNiNDIxMDkuLjVkN2JhMWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCkBAIC05NjksMTYgKzk2OSwxMiBAQAogI2VuZGlmCiAKIAlpbml0bWVtX2luaXQoMCwgbWF4X3BmbiwgYWNwaSwgazgpOwotCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotCS8qCi0JICogZG1hMzJfcmVzZXJ2ZV9ib290bWVtKCkgYWxsb2NhdGVzIGJvb3RtZW0gd2hpY2ggbWF5IGNvbmZsaWN0Ci0JICogd2l0aCB0aGUgY3Jhc2hrZXJuZWwgY29tbWFuZCBsaW5lLCBzbyBkbyB0aGF0IGFmdGVyCi0JICogcmVzZXJ2ZV9jcmFzaGtlcm5lbCgpCi0JICovCi0JZG1hMzJfcmVzZXJ2ZV9ib290bWVtKCk7CisjaWZuZGVmIENPTkZJR19OT19CT09UTUVNCisJZWFybHlfcmVzX3RvX2Jvb3RtZW0oMCwgbWF4X2xvd19wZm48PFBBR0VfU0hJRlQpOwogI2VuZGlmCiAKKwlkbWEzMl9yZXNlcnZlX2Jvb3RtZW0oKTsKKwogCXJlc2VydmVfaWJmdF9yZWdpb24oKTsKIAogI2lmZGVmIENPTkZJR19LVk1fQ0xPQ0sKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cF9wZXJjcHUuYwppbmRleCAzNWFiY2I4Li5lZjYzNzBiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXBfcGVyY3B1LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NldHVwX3BlcmNwdS5jCkBAIC0xMzcsNyArMTM3LDEzIEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwY3B1X2ZjX2ZyZWUodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKIHsKKyNpZmRlZiBDT05GSUdfTk9fQk9PVE1FTQorCXU2NCBzdGFydCA9IF9fcGEocHRyKTsKKwl1NjQgZW5kID0gc3RhcnQgKyBzaXplOworCWZyZWVfZWFybHlfcGFydGlhbChzdGFydCwgZW5kKTsKKyNlbHNlCiAJZnJlZV9ib290bWVtKF9fcGEocHRyKSwgc2l6ZSk7CisjZW5kaWYKIH0KIAogc3RhdGljIGludCBfX2luaXQgcGNwdV9jcHVfZGlzdGFuY2UodW5zaWduZWQgaW50IGZyb20sIHVuc2lnbmVkIGludCB0bykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCmluZGV4IDliNDQwMTEuLmEwMmU4MGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L25taS5oPgogI2luY2x1ZGUgPGxpbnV4L3Rib290Lmg+CisjaW5jbHVkZSA8bGludXgvc3RhY2twcm90ZWN0b3IuaD4KIAogI2luY2x1ZGUgPGFzbS9hY3BpLmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KQEAgLTY3LDYgKzY4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgogCiAjaW5jbHVkZSA8YXNtL3NtcGJvb3RfaG9va3MuaD4KKyNpbmNsdWRlIDxhc20vaTgyNTkuaD4KIAogI2lmZGVmIENPTkZJR19YODZfMzIKIHU4IGFwaWNpZF8yX25vZGVbTUFYX0FQSUNJRF07CkBAIC0yNDEsNiArMjQzLDExIEBACiAJbWFwX2NwdV90b19sb2dpY2FsX2FwaWNpZCgpOwogCiAJbm90aWZ5X2NwdV9zdGFydGluZyhjcHVpZCk7CisKKwkvKgorCSAqIE5lZWQgdG8gc2V0dXAgdmVjdG9yIG1hcHBpbmdzIGJlZm9yZSB3ZSBlbmFibGUgaW50ZXJydXB0cy4KKwkgKi8KKwlfX3NldHVwX3ZlY3Rvcl9pcnEoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkvKgogCSAqIEdldCBvdXIgYm9nb21pcHMuCiAJICoKQEAgLTI4Niw5ICsyOTMsOSBAQAogCWNoZWNrX3RzY19zeW5jX3RhcmdldCgpOwogCiAJaWYgKG5taV93YXRjaGRvZyA9PSBOTUlfSU9fQVBJQykgewotCQlkaXNhYmxlXzgyNTlBX2lycSgwKTsKKwkJbGVnYWN5X3BpYy0+Y2hpcC0+bWFzaygwKTsKIAkJZW5hYmxlX05NSV90aHJvdWdoX0xWVDAoKTsKLQkJZW5hYmxlXzgyNTlBX2lycSgwKTsKKwkJbGVnYWN5X3BpYy0+Y2hpcC0+dW5tYXNrKDApOwogCX0KIAogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTMxNSw3ICszMjIsNiBAQAogCSAqLwogCWlwaV9jYWxsX2xvY2soKTsKIAlsb2NrX3ZlY3Rvcl9sb2NrKCk7Ci0JX19zZXR1cF92ZWN0b3JfaXJxKHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAJc2V0X2NwdV9vbmxpbmUoc21wX3Byb2Nlc3Nvcl9pZCgpLCB0cnVlKTsKIAl1bmxvY2tfdmVjdG9yX2xvY2soKTsKIAlpcGlfY2FsbF91bmxvY2soKTsKQEAgLTMyNSw2ICszMzEsOSBAQAogCS8qIGVuYWJsZSBsb2NhbCBpbnRlcnJ1cHRzICovCiAJbG9jYWxfaXJxX2VuYWJsZSgpOwogCisJLyogdG8gcHJldmVudCBmYWtlIHN0YWNrIGNoZWNrIGZhaWx1cmUgaW4gY2xvY2sgc2V0dXAgKi8KKwlib290X2luaXRfc3RhY2tfY2FuYXJ5KCk7CisKIAl4ODZfY3B1aW5pdC5zZXR1cF9wZXJjcHVfY2xvY2tldigpOwogCiAJd21iKCk7CkBAIC0xMjEyLDExICsxMjIxLDEyIEBACiAKIAl0b3RhbF9jcHVzID0gbWF4X3QoaW50LCBwb3NzaWJsZSwgbnVtX3Byb2Nlc3NvcnMgKyBkaXNhYmxlZF9jcHVzKTsKIAotCWlmIChwb3NzaWJsZSA+IENPTkZJR19OUl9DUFVTKSB7CisJLyogbnJfY3B1X2lkcyBjb3VsZCBiZSByZWR1Y2VkIHZpYSBucl9jcHVzPSAqLworCWlmIChwb3NzaWJsZSA+IG5yX2NwdV9pZHMpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkJIiVkIFByb2Nlc3NvcnMgZXhjZWVkcyBOUl9DUFVTIGxpbWl0IG9mICVkXG4iLAotCQkJcG9zc2libGUsIENPTkZJR19OUl9DUFVTKTsKLQkJcG9zc2libGUgPSBDT05GSUdfTlJfQ1BVUzsKKwkJCXBvc3NpYmxlLCBucl9jcHVfaWRzKTsKKwkJcG9zc2libGUgPSBucl9jcHVfaWRzOwogCX0KIAogCXByaW50ayhLRVJOX0lORk8gIlNNUDogQWxsb3dpbmcgJWQgQ1BVcywgJWQgaG90cGx1ZyBDUFVzXG4iLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N5c19pMzg2XzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzX2kzODZfMzIuYwppbmRleCBkZWUxZmY3Li4xOTY1NTJiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3lzX2kzODZfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzX2kzODZfMzIuYwpAQCAtMjUsMTkxICsyNSw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c2NhbGxzLmg+CiAKIC8qCi0gKiBQZXJmb3JtIHRoZSBzZWxlY3QobmQsIGluLCBvdXQsIGV4LCB0dikgYW5kIG1tYXAoKSBzeXN0ZW0KLSAqIGNhbGxzLiBMaW51eC9pMzg2IGRpZG4ndCB1c2UgdG8gYmUgYWJsZSB0byBoYW5kbGUgbW9yZSB0aGFuCi0gKiA0IHN5c3RlbSBjYWxsIHBhcmFtZXRlcnMsIHNvIHRoZXNlIHN5c3RlbSBjYWxscyB1c2VkIGEgbWVtb3J5Ci0gKiBibG9jayBmb3IgcGFyYW1ldGVyIHBhc3NpbmcuLgotICovCi0KLXN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQl1bnNpZ25lZCBsb25nIGxlbjsKLQl1bnNpZ25lZCBsb25nIHByb3Q7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIGZkOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OwotfTsKLQotYXNtbGlua2FnZSBpbnQgb2xkX21tYXAoc3RydWN0IG1tYXBfYXJnX3N0cnVjdCBfX3VzZXIgKmFyZykKLXsKLQlzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0IGE7Ci0JaW50IGVyciA9IC1FRkFVTFQ7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmEsIGFyZywgc2l6ZW9mKGEpKSkKLQkJZ290byBvdXQ7Ci0KLQllcnIgPSAtRUlOVkFMOwotCWlmIChhLm9mZnNldCAmIH5QQUdFX01BU0spCi0JCWdvdG8gb3V0OwotCi0JZXJyID0gc3lzX21tYXBfcGdvZmYoYS5hZGRyLCBhLmxlbiwgYS5wcm90LCBhLmZsYWdzLAotCQkJYS5mZCwgYS5vZmZzZXQgPj4gUEFHRV9TSElGVCk7Ci1vdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotCi1zdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QgewotCXVuc2lnbmVkIGxvbmcgbjsKLQlmZF9zZXQgX191c2VyICppbnAsICpvdXRwLCAqZXhwOwotCXN0cnVjdCB0aW1ldmFsIF9fdXNlciAqdHZwOwotfTsKLQotYXNtbGlua2FnZSBpbnQgb2xkX3NlbGVjdChzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QgX191c2VyICphcmcpCi17Ci0Jc3RydWN0IHNlbF9hcmdfc3RydWN0IGE7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJmEsIGFyZywgc2l6ZW9mKGEpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JLyogc3lzX3NlbGVjdCgpIGRvZXMgdGhlIGFwcHJvcHJpYXRlIGtlcm5lbCBsb2NraW5nICovCi0JcmV0dXJuIHN5c19zZWxlY3QoYS5uLCBhLmlucCwgYS5vdXRwLCBhLmV4cCwgYS50dnApOwotfQotCi0vKgotICogc3lzX2lwYygpIGlzIHRoZSBkZS1tdWx0aXBsZXhlciBmb3IgdGhlIFN5c1YgSVBDIGNhbGxzLi4KLSAqCi0gKiBUaGlzIGlzIHJlYWxseSBob3JyaWJseSB1Z2x5LgotICovCi1hc21saW5rYWdlIGludCBzeXNfaXBjKHVpbnQgY2FsbCwgaW50IGZpcnN0LCBpbnQgc2Vjb25kLAotCQkJaW50IHRoaXJkLCB2b2lkIF9fdXNlciAqcHRyLCBsb25nIGZpZnRoKQotewotCWludCB2ZXJzaW9uLCByZXQ7Ci0KLQl2ZXJzaW9uID0gY2FsbCA+PiAxNjsgLyogaGFjayBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwotCWNhbGwgJj0gMHhmZmZmOwotCi0Jc3dpdGNoIChjYWxsKSB7Ci0JY2FzZSBTRU1PUDoKLQkJcmV0dXJuIHN5c19zZW10aW1lZG9wKGZpcnN0LCAoc3RydWN0IHNlbWJ1ZiBfX3VzZXIgKilwdHIsIHNlY29uZCwgTlVMTCk7Ci0JY2FzZSBTRU1USU1FRE9QOgotCQlyZXR1cm4gc3lzX3NlbXRpbWVkb3AoZmlyc3QsIChzdHJ1Y3Qgc2VtYnVmIF9fdXNlciAqKXB0ciwgc2Vjb25kLAotCQkJCQkoY29uc3Qgc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqKWZpZnRoKTsKLQotCWNhc2UgU0VNR0VUOgotCQlyZXR1cm4gc3lzX3NlbWdldChmaXJzdCwgc2Vjb25kLCB0aGlyZCk7Ci0JY2FzZSBTRU1DVEw6IHsKLQkJdW5pb24gc2VtdW4gZm91cnRoOwotCQlpZiAoIXB0cikKLQkJCXJldHVybiAtRUlOVkFMOwotCQlpZiAoZ2V0X3VzZXIoZm91cnRoLl9fcGFkLCAodm9pZCBfX3VzZXIgKiBfX3VzZXIgKikgcHRyKSkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlyZXR1cm4gc3lzX3NlbWN0bChmaXJzdCwgc2Vjb25kLCB0aGlyZCwgZm91cnRoKTsKLQl9Ci0KLQljYXNlIE1TR1NORDoKLQkJcmV0dXJuIHN5c19tc2dzbmQoZmlyc3QsIChzdHJ1Y3QgbXNnYnVmIF9fdXNlciAqKSBwdHIsCi0JCQkJICAgc2Vjb25kLCB0aGlyZCk7Ci0JY2FzZSBNU0dSQ1Y6Ci0JCXN3aXRjaCAodmVyc2lvbikgewotCQljYXNlIDA6IHsKLQkJCXN0cnVjdCBpcGNfa2x1ZGdlIHRtcDsKLQkJCWlmICghcHRyKQotCQkJCXJldHVybiAtRUlOVkFMOwotCi0JCQlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwKLQkJCQkJICAgKHN0cnVjdCBpcGNfa2x1ZGdlIF9fdXNlciAqKSBwdHIsCi0JCQkJCSAgIHNpemVvZih0bXApKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiBzeXNfbXNncmN2KGZpcnN0LCB0bXAubXNncCwgc2Vjb25kLAotCQkJCQkgICB0bXAubXNndHlwLCB0aGlyZCk7Ci0JCX0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiBzeXNfbXNncmN2KGZpcnN0LAotCQkJCQkgICAoc3RydWN0IG1zZ2J1ZiBfX3VzZXIgKikgcHRyLAotCQkJCQkgICBzZWNvbmQsIGZpZnRoLCB0aGlyZCk7Ci0JCX0KLQljYXNlIE1TR0dFVDoKLQkJcmV0dXJuIHN5c19tc2dnZXQoKGtleV90KSBmaXJzdCwgc2Vjb25kKTsKLQljYXNlIE1TR0NUTDoKLQkJcmV0dXJuIHN5c19tc2djdGwoZmlyc3QsIHNlY29uZCwgKHN0cnVjdCBtc3FpZF9kcyBfX3VzZXIgKikgcHRyKTsKLQotCWNhc2UgU0hNQVQ6Ci0JCXN3aXRjaCAodmVyc2lvbikgewotCQlkZWZhdWx0OiB7Ci0JCQl1bG9uZyByYWRkcjsKLQkJCXJldCA9IGRvX3NobWF0KGZpcnN0LCAoY2hhciBfX3VzZXIgKikgcHRyLCBzZWNvbmQsICZyYWRkcik7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7Ci0JCQlyZXR1cm4gcHV0X3VzZXIocmFkZHIsICh1bG9uZyBfX3VzZXIgKikgdGhpcmQpOwotCQl9Ci0JCWNhc2UgMToJLyogaUJDUzIgZW11bGF0b3IgZW50cnkgcG9pbnQgKi8KLQkJCWlmICghc2VnbWVudF9lcShnZXRfZnMoKSwgZ2V0X2RzKCkpKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJLyogVGhlICIodWxvbmcgKikgdGhpcmQiIGlzIHZhbGlkIF9vbmx5XyBiZWNhdXNlIG9mIHRoZSBrZXJuZWwgc2VnbWVudCB0aGluZyAqLwotCQkJcmV0dXJuIGRvX3NobWF0KGZpcnN0LCAoY2hhciBfX3VzZXIgKikgcHRyLCBzZWNvbmQsICh1bG9uZyAqKSB0aGlyZCk7Ci0JCX0KLQljYXNlIFNITURUOgotCQlyZXR1cm4gc3lzX3NobWR0KChjaGFyIF9fdXNlciAqKXB0cik7Ci0JY2FzZSBTSE1HRVQ6Ci0JCXJldHVybiBzeXNfc2htZ2V0KGZpcnN0LCBzZWNvbmQsIHRoaXJkKTsKLQljYXNlIFNITUNUTDoKLQkJcmV0dXJuIHN5c19zaG1jdGwoZmlyc3QsIHNlY29uZCwKLQkJCQkgICAoc3RydWN0IHNobWlkX2RzIF9fdXNlciAqKSBwdHIpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PU1lTOwotCX0KLX0KLQotLyoKLSAqIE9sZCBjcnVmdAotICovCi1hc21saW5rYWdlIGludCBzeXNfdW5hbWUoc3RydWN0IG9sZF91dHNuYW1lIF9fdXNlciAqbmFtZSkKLXsKLQlpbnQgZXJyOwotCWlmICghbmFtZSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JZG93bl9yZWFkKCZ1dHNfc2VtKTsKLQllcnIgPSBjb3B5X3RvX3VzZXIobmFtZSwgdXRzbmFtZSgpLCBzaXplb2YoKm5hbWUpKTsKLQl1cF9yZWFkKCZ1dHNfc2VtKTsKLQlyZXR1cm4gZXJyPyAtRUZBVUxUOjA7Ci19Ci0KLWFzbWxpbmthZ2UgaW50IHN5c19vbGR1bmFtZShzdHJ1Y3Qgb2xkb2xkX3V0c25hbWUgX191c2VyICpuYW1lKQotewotCWludCBlcnJvcjsKLQotCWlmICghbmFtZSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBuYW1lLCBzaXplb2Yoc3RydWN0IG9sZG9sZF91dHNuYW1lKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JZG93bl9yZWFkKCZ1dHNfc2VtKTsKLQotCWVycm9yID0gX19jb3B5X3RvX3VzZXIoJm5hbWUtPnN5c25hbWUsICZ1dHNuYW1lKCktPnN5c25hbWUsCi0JCQkgICAgICAgX19PTERfVVRTX0xFTik7Ci0JZXJyb3IgfD0gX19wdXRfdXNlcigwLCBuYW1lLT5zeXNuYW1lICsgX19PTERfVVRTX0xFTik7Ci0JZXJyb3IgfD0gX19jb3B5X3RvX3VzZXIoJm5hbWUtPm5vZGVuYW1lLCAmdXRzbmFtZSgpLT5ub2RlbmFtZSwKLQkJCQlfX09MRF9VVFNfTEVOKTsKLQllcnJvciB8PSBfX3B1dF91c2VyKDAsIG5hbWUtPm5vZGVuYW1lICsgX19PTERfVVRTX0xFTik7Ci0JZXJyb3IgfD0gX19jb3B5X3RvX3VzZXIoJm5hbWUtPnJlbGVhc2UsICZ1dHNuYW1lKCktPnJlbGVhc2UsCi0JCQkJX19PTERfVVRTX0xFTik7Ci0JZXJyb3IgfD0gX19wdXRfdXNlcigwLCBuYW1lLT5yZWxlYXNlICsgX19PTERfVVRTX0xFTik7Ci0JZXJyb3IgfD0gX19jb3B5X3RvX3VzZXIoJm5hbWUtPnZlcnNpb24sICZ1dHNuYW1lKCktPnZlcnNpb24sCi0JCQkJX19PTERfVVRTX0xFTik7Ci0JZXJyb3IgfD0gX19wdXRfdXNlcigwLCBuYW1lLT52ZXJzaW9uICsgX19PTERfVVRTX0xFTik7Ci0JZXJyb3IgfD0gX19jb3B5X3RvX3VzZXIoJm5hbWUtPm1hY2hpbmUsICZ1dHNuYW1lKCktPm1hY2hpbmUsCi0JCQkJX19PTERfVVRTX0xFTik7Ci0JZXJyb3IgfD0gX19wdXRfdXNlcigwLCBuYW1lLT5tYWNoaW5lICsgX19PTERfVVRTX0xFTik7Ci0KLQl1cF9yZWFkKCZ1dHNfc2VtKTsKLQotCWVycm9yID0gZXJyb3IgPyAtRUZBVUxUIDogMDsKLQotCXJldHVybiBlcnJvcjsKLX0KLQotCi0vKgogICogRG8gYSBzeXN0ZW0gY2FsbCBmcm9tIGtlcm5lbCBpbnN0ZWFkIG9mIGNhbGxpbmcgc3lzX2V4ZWN2ZSBzbyB3ZQogICogZW5kIHVwIHdpdGggcHJvcGVyIHB0X3JlZ3MuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jCmluZGV4IDhhYTIwNTcuLmZmMTRhNTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYwpAQCAtMjA5LDE1ICsyMDksMyBAQAogCiAJcmV0dXJuIGFkZHI7CiB9Ci0KLQotU1lTQ0FMTF9ERUZJTkUxKHVuYW1lLCBzdHJ1Y3QgbmV3X3V0c25hbWUgX191c2VyICosIG5hbWUpCi17Ci0JaW50IGVycjsKLQlkb3duX3JlYWQoJnV0c19zZW0pOwotCWVyciA9IGNvcHlfdG9fdXNlcihuYW1lLCB1dHNuYW1lKCksIHNpemVvZigqbmFtZSkpOwotCXVwX3JlYWQoJnV0c19zZW0pOwotCWlmIChwZXJzb25hbGl0eShjdXJyZW50LT5wZXJzb25hbGl0eSkgPT0gUEVSX0xJTlVYMzIpCi0JCWVyciB8PSBjb3B5X3RvX3VzZXIoJm5hbWUtPm1hY2hpbmUsICJpNjg2IiwgNSk7Ci0JcmV0dXJuIGVyciA/IC1FRkFVTFQgOiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9zeXNjYWxsX3RhYmxlXzMyLlMKaW5kZXggMTUyMjhiNS4uOGIzNzI5MyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3N5c2NhbGxfdGFibGVfMzIuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzY2FsbF90YWJsZV8zMi5TCkBAIC04MSw3ICs4MSw3IEBACiAJLmxvbmcgc3lzX3NldHRpbWVvZmRheQogCS5sb25nIHN5c19nZXRncm91cHMxNgkvKiA4MCAqLwogCS5sb25nIHN5c19zZXRncm91cHMxNgotCS5sb25nIG9sZF9zZWxlY3QKKwkubG9uZyBzeXNfb2xkX3NlbGVjdAogCS5sb25nIHN5c19zeW1saW5rCiAJLmxvbmcgc3lzX2xzdGF0CiAJLmxvbmcgc3lzX3JlYWRsaW5rCS8qIDg1ICovCkBAIC04OSw3ICs4OSw3IEBACiAJLmxvbmcgc3lzX3N3YXBvbgogCS5sb25nIHN5c19yZWJvb3QKIAkubG9uZyBzeXNfb2xkX3JlYWRkaXIKLQkubG9uZyBvbGRfbW1hcAkJLyogOTAgKi8KKwkubG9uZyBzeXNfb2xkX21tYXAJLyogOTAgKi8KIAkubG9uZyBzeXNfbXVubWFwCiAJLmxvbmcgc3lzX3RydW5jYXRlCiAJLmxvbmcgc3lzX2Z0cnVuY2F0ZQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RpbWUuYyBiL2FyY2gveDg2L2tlcm5lbC90aW1lLmMKaW5kZXggYmUyNTczNC4uZmI1Y2M1ZTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RpbWUuYwpAQCAtNzAsMTEgKzcwLDExIEBACiAJCSAqIG1hbnVhbGx5IHRvIGRlYXNzZXJ0IE5NSSBsaW5lcyBmb3IgdGhlIHdhdGNoZG9nIGlmIHJ1bgogCQkgKiBvbiBhbiA4MjQ4OURYLWJhc2VkIHN5c3RlbS4KIAkJICovCi0JCXNwaW5fbG9jaygmaTgyNTlBX2xvY2spOworCQlyYXdfc3Bpbl9sb2NrKCZpODI1OUFfbG9jayk7CiAJCW91dGIoMHgwYywgUElDX01BU1RFUl9PQ1czKTsKIAkJLyogQWNrIHRoZSBJUlE7IEFFT0kgd2lsbCBlbmQgaXQgYXV0b21hdGljYWxseS4gKi8KIAkJaW5iKFBJQ19NQVNURVJfUE9MTCk7Ci0JCXNwaW5fdW5sb2NrKCZpODI1OUFfbG9jayk7CisJCXJhd19zcGluX3VubG9jaygmaTgyNTlBX2xvY2spOwogCX0KIAogCWdsb2JhbF9jbG9ja19ldmVudC0+ZXZlbnRfaGFuZGxlcihnbG9iYWxfY2xvY2tfZXZlbnQpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RzYy5jIGIvYXJjaC94ODYva2VybmVsL3RzYy5jCmluZGV4IDIwOGE4NTcuLjlmYWY5MWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC90c2MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdHNjLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAkgKiAgIHVuc3RhYmxlLiBXZSBkbyB0aGlzIGJlY2F1c2UgdW5saWtlIFRpbWUgT2YgRGF5LAogCSAqICAgdGhlIHNjaGVkdWxlciBjbG9jayB0b2xlcmF0ZXMgc21hbGwgZXJyb3JzIGFuZCBpdCdzCiAJICogICB2ZXJ5IGltcG9ydGFudCBmb3IgaXQgdG8gYmUgYXMgZmFzdCBhcyB0aGUgcGxhdGZvcm0KLQkgKiAgIGNhbiBhY2hpdmUgaXQuICkKKwkgKiAgIGNhbiBhY2hpZXZlIGl0LiApCiAJICovCiAJaWYgKHVubGlrZWx5KHRzY19kaXNhYmxlZCkpIHsKIAkJLyogTm8gbG9ja2luZyBidXQgYSByYXJlIHdyb25nIHZhbHVlIGlzIG5vdCBhIGJpZyBkZWFsOiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Zpc3dzX3F1aXJrcy5jIGIvYXJjaC94ODYva2VybmVsL3Zpc3dzX3F1aXJrcy5jCmluZGV4IDM0YTI3OWEuLmU2ODBlYTUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdmlzd3NfcXVpcmtzLmMKQEAgLTQ5LDExICs0OSw2IEBACiBjaGFyIHZpc3dzX2JvYXJkX3R5cGUJPSAtMTsKIGNoYXIgdmlzd3NfYm9hcmRfcmV2CT0gLTE7CiAKLWludCBpc192aXN3c19ib3godm9pZCkKLXsKLQlyZXR1cm4gdmlzd3NfYm9hcmRfdHlwZSA+PSAwOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgdmlzd3NfdGltZV9pbml0KHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiU3RhcnRpbmcgQ29iYWx0IFRpbWVyIHN5c3RlbSBjbG9ja1xuIik7CkBAIC0yNDIsNiArMjM3LDggQEAKIAl4ODZfaW5pdC5pcnFzLnByZV92ZWN0b3JfaW5pdCA9IHZpc3dzX3ByZV9pbnRyX2luaXQ7CiAJeDg2X2luaXQuaXJxcy50cmFwX2luaXQgPSB2aXN3c190cmFwX2luaXQ7CiAJeDg2X2luaXQudGltZXJzLnRpbWVyX2luaXQgPSB2aXN3c190aW1lX2luaXQ7CisJeDg2X2luaXQucGNpLmluaXQgPSBwY2lfdmlzd3NfaW5pdDsKKwl4ODZfaW5pdC5wY2kuaW5pdF9pcnEgPSB4ODZfaW5pdF9ub29wOwogCiAJLyoKIAkgKiBJbnN0YWxsIHJlYm9vdCBxdWlya3M6CkBAIC01MDgsNyArNTA1LDcgQEAKICAqLwogc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX3BpaXg0X21hc3Rlcl9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQlpbml0XzgyNTlBKDApOworCWxlZ2FjeV9waWMtPmluaXQoMCk7CiAKIAlyZXR1cm4gc3RhcnR1cF9jb2JhbHRfaXJxKGlycSk7CiB9CkBAIC01MzIsOSArNTI5LDYgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBwaWl4NF92aXJ0dWFsX2lycV90eXBlID0gewogCS5uYW1lID0JCSJQSUlYNC12aXJ0dWFsIiwKLQkuc2h1dGRvd24gPQlkaXNhYmxlXzgyNTlBX2lycSwKLQkuZW5hYmxlID0JZW5hYmxlXzgyNTlBX2lycSwKLQkuZGlzYWJsZSA9CWRpc2FibGVfODI1OUFfaXJxLAogfTsKIAogCkBAIC01NTksNyArNTUzLDcgQEAKIAlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpODI1OUFfbG9jaywgZmxhZ3MpOworCXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAogCS8qIEZpbmQgb3V0IHdoYXQncyBpbnRlcnJ1cHRpbmcgaW4gdGhlIFBJSVg0IG1hc3RlciA4MjU5ICovCiAJb3V0YigweDBjLCAweDIwKTsJCS8qIE9DVzMgUG9sbCBjb21tYW5kICovCkBAIC01OTYsNyArNTkwLDcgQEAKIAkJb3V0YigweDYwICsgcmVhbGlycSwgMHgyMCk7CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTgyNTlBX2xvY2ssIGZsYWdzKTsKIAogCWRlc2MgPSBpcnFfdG9fZGVzYyhyZWFsaXJxKTsKIApAQCAtNjA5LDEyICs2MDMsMTIgQEAKIAkJaGFuZGxlX0lSUV9ldmVudChyZWFsaXJxLCBkZXNjLT5hY3Rpb24pOwogCiAJaWYgKCEoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSkKLQkJZW5hYmxlXzgyNTlBX2lycShyZWFsaXJxKTsKKwkJbGVnYWN5X3BpYy0+Y2hpcC0+dW5tYXNrKHJlYWxpcnEpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogCiBvdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIElSUV9OT05FOwogfQogCkBAIC02MjgsNiArNjIyLDEyIEBACiAJLm5hbWUgPQkJImNhc2NhZGUiLAogfTsKIAorc3RhdGljIGlubGluZSB2b2lkIHNldF9waWl4NF92aXJ0dWFsX2lycV90eXBlKHZvaWQpCit7CisJcGlpeDRfdmlydHVhbF9pcnFfdHlwZS5zaHV0ZG93biA9IGk4MjU5QV9jaGlwLm1hc2s7CisJcGlpeDRfdmlydHVhbF9pcnFfdHlwZS5lbmFibGUgPQlpODI1OUFfY2hpcC51bm1hc2s7CisJcGlpeDRfdmlydHVhbF9pcnFfdHlwZS5kaXNhYmxlID0gaTgyNTlBX2NoaXAubWFzazsKK30KIAogdm9pZCBpbml0X1ZJU1dTX0FQSUNfaXJxcyh2b2lkKQogewpAQCAtNjUzLDYgKzY1Myw3IEBACiAJCQlkZXNjLT5jaGlwID0gJnBpaXg0X21hc3Rlcl9pcnFfdHlwZTsKIAkJfQogCQllbHNlIGlmIChpIDwgQ09fSVJRX0FQSUMwKSB7CisJCQlzZXRfcGlpeDRfdmlydHVhbF9pcnFfdHlwZSgpOwogCQkJZGVzYy0+Y2hpcCA9ICZwaWl4NF92aXJ0dWFsX2lycV90eXBlOwogCQl9CiAJCWVsc2UgaWYgKElTX0NPX0FQSUMoaSkpIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYwppbmRleCBkNDMwZTRjLi43ZGQ1OTlkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZtaV8zMi5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8YXNtL2ZpeG1hcC5oPgogI2luY2x1ZGUgPGFzbS9hcGljZGVmLmg+CiAjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdGltZXIuaD4KICNpbmNsdWRlIDxhc20vdm1pX3RpbWUuaD4KQEAgLTI2NiwzMCArMjY3LDYgQEAKIHsKIH0KIAotI2lmZGVmIENPTkZJR19ISUdIUFRFCi1zdGF0aWMgdm9pZCAqdm1pX2ttYXBfYXRvbWljX3B0ZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSBrbV90eXBlIHR5cGUpCi17Ci0Jdm9pZCAqdmEgPSBrbWFwX2F0b21pYyhwYWdlLCB0eXBlKTsKLQotCS8qCi0JICogSW50ZXJuYWxseSwgdGhlIFZNSSBST00gbXVzdCBtYXAgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGh5c2ljYWwKLQkgKiBhZGRyZXNzZXMgZm9yIHByb2Nlc3NpbmcgTU1VIHVwZGF0ZXMuICBCeSB0aGUgdGltZSBNTVUgdXBkYXRlcwotCSAqIGFyZSBpc3N1ZWQsIHRoaXMgaW5mb3JtYXRpb24gaXMgdHlwaWNhbGx5IGFscmVhZHkgbG9zdC4KLQkgKiBGb3J0dW5hdGVseSwgdGhlIFZNSSBwcm92aWRlcyBhIGNhY2hlIG9mIG1hcHBpbmcgc2xvdHMgZm9yIGFjdGl2ZQotCSAqIHBhZ2UgdGFibGVzLgotCSAqCi0JICogV2UgdXNlIHNsb3QgemVybyBmb3IgdGhlIGxpbmVhciBtYXBwaW5nIG9mIHBoeXNpY2FsIG1lbW9yeSwgYW5kCi0JICogaW4gSElHSFBURSBrZXJuZWxzLCBzbG90IDEgYW5kIDIgZm9yIEtNX1BURTAgYW5kIEtNX1BURTEuCi0JICoKLQkgKiAgYXJnczogICAgICAgICAgICAgICAgIFNMT1QgICAgICAgICAgICAgICAgIFZBICAgIENPVU5UIFBGTgotCSAqLwotCUJVR19PTih0eXBlICE9IEtNX1BURTAgJiYgdHlwZSAhPSBLTV9QVEUxKTsKLQl2bWlfb3BzLnNldF9saW5lYXJfbWFwcGluZygodHlwZSAtIEtNX1BURTApKzEsIHZhLCAxLCBwYWdlX3RvX3BmbihwYWdlKSk7Ci0KLQlyZXR1cm4gdmE7Ci19Ci0jZW5kaWYKLQogc3RhdGljIHZvaWQgdm1pX2FsbG9jYXRlX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBwZm4pCiB7CiAJdm1pX29wcy5hbGxvY2F0ZV9wYWdlKHBmbiwgVk1JX1BBR0VfTDEsIDAsIDAsIDApOwpAQCAtNjQwLDYgKzYxNywxMiBAQAogCXU2NCByZWxvYzsKIAljb25zdCBzdHJ1Y3Qgdm1pX3JlbG9jYXRpb25faW5mbyAqcmVsID0gKHN0cnVjdCB2bWlfcmVsb2NhdGlvbl9pbmZvICopJnJlbG9jOwogCisJLyoKKwkgKiBQcmV2ZW50IHBhZ2UgdGFibGVzIGZyb20gYmVpbmcgYWxsb2NhdGVkIGluIGhpZ2htZW0sIGV2ZW4gaWYKKwkgKiBDT05GSUdfSElHSFBURSBpcyBlbmFibGVkLgorCSAqLworCV9fdXNlcnB0ZV9hbGxvY19nZnAgJj0gfl9fR0ZQX0hJR0hNRU07CisKIAlpZiAoY2FsbF92cm9tX2Z1bmModm1pX3JvbSwgdm1pX2luaXQpICE9IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJWTUkgUk9NIGZhaWxlZCB0byBpbml0aWFsaXplISIpOwogCQlyZXR1cm4gMDsKQEAgLTc3OCwxMCArNzYxLDYgQEAKIAogCS8qIFNldCBsaW5lYXIgaXMgbmVlZGVkIGluIGFsbCBjYXNlcyAqLwogCXZtaV9vcHMuc2V0X2xpbmVhcl9tYXBwaW5nID0gdm1pX2dldF9mdW5jdGlvbihWTUlfQ0FMTF9TZXRMaW5lYXJNYXBwaW5nKTsKLSNpZmRlZiBDT05GSUdfSElHSFBURQotCWlmICh2bWlfb3BzLnNldF9saW5lYXJfbWFwcGluZykKLQkJcHZfbW11X29wcy5rbWFwX2F0b21pY19wdGUgPSB2bWlfa21hcF9hdG9taWNfcHRlOwotI2VuZGlmCiAKIAkvKgogCSAqIFRoZXNlIE1VU1QgYWx3YXlzIGJlIHBhdGNoZWQuICBEb24ndCBzdXBwb3J0IGluZGlyZWN0IGp1bXBzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdm1pY2xvY2tfMzIuYyBiL2FyY2gveDg2L2tlcm5lbC92bWljbG9ja18zMi5jCmluZGV4IDc0YzkyYmIuLjVlMWZmNjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92bWljbG9ja18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC92bWljbG9ja18zMi5jCkBAIC03OSwxMSArNzksNyBAQAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB2bWlfZ2V0X3RpbWVyX3ZlY3Rvcih2b2lkKQogewotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCXJldHVybiBGSVJTVF9ERVZJQ0VfVkVDVE9SOwotI2Vsc2UKLQlyZXR1cm4gRklSU1RfRVhURVJOQUxfVkVDVE9SOwotI2VuZGlmCisJcmV0dXJuIElSUTBfVkVDVE9SOwogfQogCiAvKiogdm1pIGNsb2NrY2hpcCAqLwpAQCAtMTcxLDcgKzE2Nyw3IEBACiB7CiAJLyogVW5mb3J0dW5hdGVseSwgc2V0X25leHRfZXZlbnQgaW50ZXJmYWNlIG9ubHkgcGFzc2VzIHJlbGF0aXZlCiAJICogZXhwaXJ5LCBidXQgd2Ugd2FudCBhYnNvbHV0ZSBleHBpcnkuICBJdCdkIGJlIGJldHRlciBpZiB3ZXJlCi0JICogd2VyZSBwYXNzZWQgYW4gYWJvc2x1dGUgZXhwaXJ5LCBzaW5jZSBhIGJ1bmNoIG9mIHRpbWUgbWF5CisJICogd2VyZSBwYXNzZWQgYW4gYWJzb2x1dGUgZXhwaXJ5LCBzaW5jZSBhIGJ1bmNoIG9mIHRpbWUgbWF5CiAJICogaGF2ZSBiZWVuIHN0b2xlbiBiZXR3ZWVuIHRoZSB0aW1lIHRoZSBkZWx0YSBpcyBjb21wdXRlZCBhbmQKIAkgKiB3aGVuIHdlIHNldCB0aGUgYWxhcm0gYmVsb3cuICovCiAJY3ljbGVfdCBub3cgPSB2bWlfdGltZXJfb3BzLmdldF9jeWNsZV9jb3VudGVyKHZtaV9jb3VudGVyKFZNSV9PTkVTSE9UKSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGY5MmEwZGEuLjQ0ODc5ZGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0zNDEsNyArMzQxLDcgQEAKICAqIFBlci1jcHUgc3ltYm9scyB3aGljaCBuZWVkIHRvIGJlIG9mZnNldCBmcm9tIF9fcGVyX2NwdV9sb2FkCiAgKiBmb3IgdGhlIGJvb3QgcHJvY2Vzc29yLgogICovCi0jZGVmaW5lIElOSVRfUEVSX0NQVSh4KSBpbml0X3Blcl9jcHVfXyMjeCA9IHBlcl9jcHVfXyMjeCArIF9fcGVyX2NwdV9sb2FkCisjZGVmaW5lIElOSVRfUEVSX0NQVSh4KSBpbml0X3Blcl9jcHVfXyMjeCA9IHggKyBfX3Blcl9jcHVfbG9hZAogSU5JVF9QRVJfQ1BVKGdkdF9wYWdlKTsKIElOSVRfUEVSX0NQVShpcnFfc3RhY2tfdW5pb24pOwogCkBAIC0zNTIsNyArMzUyLDcgQEAKIAkgICAia2VybmVsIGltYWdlIGJpZ2dlciB0aGFuIEtFUk5FTF9JTUFHRV9TSVpFIik7CiAKICNpZmRlZiBDT05GSUdfU01QCi0uID0gQVNTRVJUKChwZXJfY3B1X19pcnFfc3RhY2tfdW5pb24gPT0gMCksCisuID0gQVNTRVJUKChpcnFfc3RhY2tfdW5pb24gPT0gMCksCiAgICAgICAgICAgICJpcnFfc3RhY2tfdW5pb24gaXMgbm90IGF0IHN0YXJ0IG9mIHBlci1jcHUgYXJlYSIpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC92c3lzY2FsbF82NC5jIGIvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMKaW5kZXggOTA1NWU1OC4uMWMwYzZhYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3ZzeXNjYWxsXzY0LmMKQEAgLTMwMSw3ICszMDEsOCBAQAogCXJlZ2lzdGVyX3N5c2N0bF90YWJsZShrZXJuZWxfcm9vdF90YWJsZTIpOwogI2VuZGlmCiAJb25fZWFjaF9jcHUoY3B1X3ZzeXNjYWxsX2luaXQsIE5VTEwsIDEpOwotCWhvdGNwdV9ub3RpZmllcihjcHVfdnN5c2NhbGxfbm90aWZpZXIsIDApOworCS8qIG5vdGlmaWVyIHByaW9yaXR5ID4gS1ZNICovCisJaG90Y3B1X25vdGlmaWVyKGNwdV92c3lzY2FsbF9ub3RpZmllciwgMzApOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwveDg2X2luaXQuYyBiL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jCmluZGV4IGVlNTc0NmMuLjYxYTFlOGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC94ODZfaW5pdC5jCkBAIC00LDkgKzQsMTEgQEAKICAqICBGb3IgbGljZW5jaW5nIGRldGFpbHMgc2VlIGtlcm5lbC1iYXNlL0NPUFlJTkcKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KIAogI2luY2x1ZGUgPGFzbS9iaW9zX2ViZGEuaD4KICNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KKyNpbmNsdWRlIDxhc20vcGNpX3g4Ni5oPgogI2luY2x1ZGUgPGFzbS9tcHNwZWMuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgpAQCAtNzAsNiArNzIsMTIgQEAKIAkuaW9tbXUgPSB7CiAJCS5pb21tdV9pbml0CQk9IGlvbW11X2luaXRfbm9vcCwKIAl9LAorCisJLnBjaSA9IHsKKwkJLmluaXQJCQk9IHg4Nl9kZWZhdWx0X3BjaV9pbml0LAorCQkuaW5pdF9pcnEJCT0geDg2X2RlZmF1bHRfcGNpX2luaXRfaXJxLAorCQkuZml4dXBfaXJxcwkJPSB4ODZfZGVmYXVsdF9wY2lfZml4dXBfaXJxcywKKwl9LAogfTsKIAogc3RydWN0IHg4Nl9jcHVpbml0X29wcyB4ODZfY3B1aW5pdCBfX2NwdWluaXRkYXRhID0gewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL0tjb25maWcgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZwppbmRleCA0Y2Q0OTgzLi45NzBiYmQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vS2NvbmZpZworKysgYi9hcmNoL3g4Ni9rdm0vS2NvbmZpZwpAQCAtMjksNiArMjksNyBAQAogCXNlbGVjdCBIQVZFX0tWTV9FVkVOVEZECiAJc2VsZWN0IEtWTV9BUElDX0FSQ0hJVEVDVFVSRQogCXNlbGVjdCBVU0VSX1JFVFVSTl9OT1RJRklFUgorCXNlbGVjdCBLVk1fTU1JTwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgaG9zdGluZyBmdWxseSB2aXJ0dWFsaXplZCBndWVzdCBtYWNoaW5lcyB1c2luZyBoYXJkd2FyZQogCSAgdmlydHVhbGl6YXRpb24gZXh0ZW5zaW9ucy4gIFlvdSB3aWxsIG5lZWQgYSBmYWlybHkgcmVjZW50CkBAIC02NSw2ICs2Niw3IEBACiAKICMgT0ssIGl0J3MgYSBsaXR0bGUgY291bnRlci1pbnR1aXRpdmUgdG8gZG8gdGhpcywgYnV0IGl0IHB1dHMgaXQgbmVhdGx5IHVuZGVyCiAjIHRoZSB2aXJ0dWFsaXphdGlvbiBtZW51Lgorc291cmNlIGRyaXZlcnMvdmhvc3QvS2NvbmZpZwogc291cmNlIGRyaXZlcnMvbGd1ZXN0L0tjb25maWcKIHNvdXJjZSBkcml2ZXJzL3ZpcnRpby9LY29uZmlnCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMgYi9hcmNoL3g4Ni9rdm0vZW11bGF0ZS5jCmluZGV4IDdlOGZhZWEuLjRkYWRlNmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9lbXVsYXRlLmMKKysrIGIvYXJjaC94ODYva3ZtL2VtdWxhdGUuYwpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGFzbS9rdm1fZW11bGF0ZS5oPgogCi0jaW5jbHVkZSAibW11LmgiCQkvKiBmb3IgaXNfbG9uZ19tb2RlKCkgKi8KKyNpbmNsdWRlICJ4ODYuaCIKIAogLyoKICAqIE9wY29kZSBlZmZlY3RpdmUtYWRkcmVzcyBkZWNvZGUgdGFibGVzLgpAQCAtNzYsNiArNzYsOCBAQAogI2RlZmluZSBHcm91cER1YWwgICAoMTw8MTUpICAgICAvKiBBbHRlcm5hdGUgZGVjb2Rpbmcgb2YgbW9kID09IDMgKi8KICNkZWZpbmUgR3JvdXBNYXNrICAgMHhmZiAgICAgICAgLyogR3JvdXAgbnVtYmVyIHN0b3JlZCBpbiBiaXRzIDA6NyAqLwogLyogTWlzYyBmbGFncyAqLworI2RlZmluZSBMb2NrICAgICAgICAoMTw8MjYpIC8qIGxvY2sgcHJlZml4IGlzIGFsbG93ZWQgZm9yIHRoZSBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBQcml2ICAgICAgICAoMTw8MjcpIC8qIGluc3RydWN0aW9uIGdlbmVyYXRlcyAjR1AgaWYgY3VycmVudCBDUEwgIT0gMCAqLwogI2RlZmluZSBObzY0CSAgICAoMTw8MjgpCiAvKiBTb3VyY2UgMiBvcGVyYW5kIHR5cGUgKi8KICNkZWZpbmUgU3JjMk5vbmUgICAgKDA8PDI5KQpAQCAtODgsMzkgKzkwLDQwIEBACiBlbnVtIHsKIAlHcm91cDFfODAsIEdyb3VwMV84MSwgR3JvdXAxXzgyLCBHcm91cDFfODMsCiAJR3JvdXAxQSwgR3JvdXAzX0J5dGUsIEdyb3VwMywgR3JvdXA0LCBHcm91cDUsIEdyb3VwNywKKwlHcm91cDgsIEdyb3VwOSwKIH07CiAKIHN0YXRpYyB1MzIgb3Bjb2RlX3RhYmxlWzI1Nl0gPSB7CiAJLyogMHgwMCAtIDB4MDcgKi8KLQlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBMb2NrLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IExvY2ssCiAJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLAogCUJ5dGVPcCB8IERzdEFjYyB8IFNyY0ltbSwgRHN0QWNjIHwgU3JjSW1tLAogCUltcGxpY2l0T3BzIHwgU3RhY2sgfCBObzY0LCBJbXBsaWNpdE9wcyB8IFN0YWNrIHwgTm82NCwKIAkvKiAweDA4IC0gMHgwRiAqLwotCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwKKwlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IExvY2ssIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgTG9jaywKIAlCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sCiAJQnl0ZU9wIHwgRHN0QWNjIHwgU3JjSW1tLCBEc3RBY2MgfCBTcmNJbW0sCiAJSW1wbGljaXRPcHMgfCBTdGFjayB8IE5vNjQsIDAsCiAJLyogMHgxMCAtIDB4MTcgKi8KLQlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBMb2NrLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IExvY2ssCiAJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLAogCUJ5dGVPcCB8IERzdEFjYyB8IFNyY0ltbSwgRHN0QWNjIHwgU3JjSW1tLAogCUltcGxpY2l0T3BzIHwgU3RhY2sgfCBObzY0LCBJbXBsaWNpdE9wcyB8IFN0YWNrIHwgTm82NCwKIAkvKiAweDE4IC0gMHgxRiAqLwotCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwKKwlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IExvY2ssIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgTG9jaywKIAlCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sCiAJQnl0ZU9wIHwgRHN0QWNjIHwgU3JjSW1tLCBEc3RBY2MgfCBTcmNJbW0sCiAJSW1wbGljaXRPcHMgfCBTdGFjayB8IE5vNjQsIEltcGxpY2l0T3BzIHwgU3RhY2sgfCBObzY0LAogCS8qIDB4MjAgLSAweDI3ICovCi0JQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAorCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgTG9jaywgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBMb2NrLAogCUJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSwKIAlEc3RBY2MgfCBTcmNJbW1CeXRlLCBEc3RBY2MgfCBTcmNJbW0sIDAsIDAsCiAJLyogMHgyOCAtIDB4MkYgKi8KLQlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBMb2NrLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IExvY2ssCiAJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLAogCTAsIDAsIDAsIDAsCiAJLyogMHgzMCAtIDB4MzcgKi8KLQlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBMb2NrLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IExvY2ssCiAJQnl0ZU9wIHwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0sIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNLAogCTAsIDAsIDAsIDAsCiAJLyogMHgzOCAtIDB4M0YgKi8KQEAgLTE1Niw3ICsxNTksNyBAQAogCUdyb3VwIHwgR3JvdXAxXzgwLCBHcm91cCB8IEdyb3VwMV84MSwKIAlHcm91cCB8IEdyb3VwMV84MiwgR3JvdXAgfCBHcm91cDFfODMsCiAJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLAotCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSwKKwlCeXRlT3AgfCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IExvY2ssIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgTG9jaywKIAkvKiAweDg4IC0gMHg4RiAqLwogCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgTW92LCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IE1vdiwKIAlCeXRlT3AgfCBEc3RSZWcgfCBTcmNNZW0gfCBNb2RSTSB8IE1vdiwgRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsCkBAIC0yMTAsNyArMjEzLDcgQEAKIAlTcmNOb25lIHwgQnl0ZU9wIHwgSW1wbGljaXRPcHMsIFNyY05vbmUgfCBJbXBsaWNpdE9wcywKIAkvKiAweEYwIC0gMHhGNyAqLwogCTAsIDAsIDAsIDAsCi0JSW1wbGljaXRPcHMsIEltcGxpY2l0T3BzLCBHcm91cCB8IEdyb3VwM19CeXRlLCBHcm91cCB8IEdyb3VwMywKKwlJbXBsaWNpdE9wcyB8IFByaXYsIEltcGxpY2l0T3BzLCBHcm91cCB8IEdyb3VwM19CeXRlLCBHcm91cCB8IEdyb3VwMywKIAkvKiAweEY4IC0gMHhGRiAqLwogCUltcGxpY2l0T3BzLCAwLCBJbXBsaWNpdE9wcywgSW1wbGljaXRPcHMsCiAJSW1wbGljaXRPcHMsIEltcGxpY2l0T3BzLCBHcm91cCB8IEdyb3VwNCwgR3JvdXAgfCBHcm91cDUsCkBAIC0yMTgsMTYgKzIyMSwyMCBAQAogCiBzdGF0aWMgdTMyIHR3b2J5dGVfdGFibGVbMjU2XSA9IHsKIAkvKiAweDAwIC0gMHgwRiAqLwotCTAsIEdyb3VwIHwgR3JvdXBEdWFsIHwgR3JvdXA3LCAwLCAwLCAwLCBJbXBsaWNpdE9wcywgSW1wbGljaXRPcHMsIDAsCi0JSW1wbGljaXRPcHMsIEltcGxpY2l0T3BzLCAwLCAwLCAwLCBJbXBsaWNpdE9wcyB8IE1vZFJNLCAwLCAwLAorCTAsIEdyb3VwIHwgR3JvdXBEdWFsIHwgR3JvdXA3LCAwLCAwLAorCTAsIEltcGxpY2l0T3BzLCBJbXBsaWNpdE9wcyB8IFByaXYsIDAsCisJSW1wbGljaXRPcHMgfCBQcml2LCBJbXBsaWNpdE9wcyB8IFByaXYsIDAsIDAsCisJMCwgSW1wbGljaXRPcHMgfCBNb2RSTSwgMCwgMCwKIAkvKiAweDEwIC0gMHgxRiAqLwogCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIEltcGxpY2l0T3BzIHwgTW9kUk0sIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAJLyogMHgyMCAtIDB4MkYgKi8KLQlNb2RSTSB8IEltcGxpY2l0T3BzLCBNb2RSTSwgTW9kUk0gfCBJbXBsaWNpdE9wcywgTW9kUk0sIDAsIDAsIDAsIDAsCisJTW9kUk0gfCBJbXBsaWNpdE9wcyB8IFByaXYsIE1vZFJNIHwgUHJpdiwKKwlNb2RSTSB8IEltcGxpY2l0T3BzIHwgUHJpdiwgTW9kUk0gfCBQcml2LAorCTAsIDAsIDAsIDAsCiAJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKIAkvKiAweDMwIC0gMHgzRiAqLwotCUltcGxpY2l0T3BzLCAwLCBJbXBsaWNpdE9wcywgMCwKLQlJbXBsaWNpdE9wcywgSW1wbGljaXRPcHMsIDAsIDAsCisJSW1wbGljaXRPcHMgfCBQcml2LCAwLCBJbXBsaWNpdE9wcyB8IFByaXYsIDAsCisJSW1wbGljaXRPcHMsIEltcGxpY2l0T3BzIHwgUHJpdiwgMCwgMCwKIAkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAogCS8qIDB4NDAgLSAweDQ3ICovCiAJRHN0UmVnIHwgU3JjTWVtIHwgTW9kUk0gfCBNb3YsIERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LApAQCAtMjU3LDIxICsyNjQsMjMgQEAKIAlEc3RNZW0gfCBTcmNSZWcgfCBTcmMyQ0wgfCBNb2RSTSwgMCwgMCwKIAkvKiAweEE4IC0gMHhBRiAqLwogCUltcGxpY2l0T3BzIHwgU3RhY2ssIEltcGxpY2l0T3BzIHwgU3RhY2ssCi0JMCwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBCaXRPcCwKKwkwLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IEJpdE9wIHwgTG9jaywKIAlEc3RNZW0gfCBTcmNSZWcgfCBTcmMySW1tQnl0ZSB8IE1vZFJNLAogCURzdE1lbSB8IFNyY1JlZyB8IFNyYzJDTCB8IE1vZFJNLAogCU1vZFJNLCAwLAogCS8qIDB4QjAgLSAweEI3ICovCi0JQnl0ZU9wIHwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0sIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNLCAwLAotCSAgICBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IEJpdE9wLAorCUJ5dGVPcCB8IERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgTG9jaywgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBMb2NrLAorCTAsIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgQml0T3AgfCBMb2NrLAogCTAsIDAsIEJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LAogCSAgICBEc3RSZWcgfCBTcmNNZW0xNiB8IE1vZFJNIHwgTW92LAogCS8qIDB4QjggLSAweEJGICovCi0JMCwgMCwgRHN0TWVtIHwgU3JjSW1tQnl0ZSB8IE1vZFJNLCBEc3RNZW0gfCBTcmNSZWcgfCBNb2RSTSB8IEJpdE9wLAorCTAsIDAsCisJR3JvdXAgfCBHcm91cDgsIERzdE1lbSB8IFNyY1JlZyB8IE1vZFJNIHwgQml0T3AgfCBMb2NrLAogCTAsIDAsIEJ5dGVPcCB8IERzdFJlZyB8IFNyY01lbSB8IE1vZFJNIHwgTW92LAogCSAgICBEc3RSZWcgfCBTcmNNZW0xNiB8IE1vZFJNIHwgTW92LAogCS8qIDB4QzAgLSAweENGICovCi0JMCwgMCwgMCwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBNb3YsIDAsIDAsIDAsIEltcGxpY2l0T3BzIHwgTW9kUk0sCisJMCwgMCwgMCwgRHN0TWVtIHwgU3JjUmVnIHwgTW9kUk0gfCBNb3YsCisJMCwgMCwgMCwgR3JvdXAgfCBHcm91cER1YWwgfCBHcm91cDksCiAJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKIAkvKiAweEQwIC0gMHhERiAqLwogCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsCkBAIC0yODMsMjUgKzI5Miw0MSBAQAogCiBzdGF0aWMgdTMyIGdyb3VwX3RhYmxlW10gPSB7CiAJW0dyb3VwMV84MCo4XSA9Ci0JQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sIEJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLAotCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLCBCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwKLQlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwgQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sCi0JQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sIEJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLAorCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNIHwgTG9jaywKKwlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSB8IExvY2ssCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0gfCBMb2NrLAorCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNIHwgTG9jaywKKwlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSB8IExvY2ssCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0gfCBMb2NrLAorCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNIHwgTG9jaywKKwlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwKIAlbR3JvdXAxXzgxKjhdID0KLQlEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sCi0JRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLAotCURzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwKLQlEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sCisJRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0gfCBMb2NrLAorCURzdE1lbSB8IFNyY0ltbSB8IE1vZFJNIHwgTG9jaywKKwlEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSB8IExvY2ssCisJRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0gfCBMb2NrLAorCURzdE1lbSB8IFNyY0ltbSB8IE1vZFJNIHwgTG9jaywKKwlEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSB8IExvY2ssCisJRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0gfCBMb2NrLAorCURzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLAogCVtHcm91cDFfODIqOF0gPQotCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLCBCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwKLQlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwgQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sCi0JQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0sIEJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLAotCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNLCBCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSwKKwlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSB8IE5vNjQgfCBMb2NrLAorCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNIHwgTm82NCB8IExvY2ssCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0gfCBObzY0IHwgTG9jaywKKwlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSB8IE5vNjQgfCBMb2NrLAorCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNIHwgTm82NCB8IExvY2ssCisJQnl0ZU9wIHwgRHN0TWVtIHwgU3JjSW1tIHwgTW9kUk0gfCBObzY0IHwgTG9jaywKKwlCeXRlT3AgfCBEc3RNZW0gfCBTcmNJbW0gfCBNb2RSTSB8IE5vNjQgfCBMb2NrLAorCUJ5dGVPcCB8IERzdE1lbSB8IFNyY0ltbSB8IE1vZFJNIHwgTm82NCwKIAlbR3JvdXAxXzgzKjhdID0KLQlEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltbUJ5dGUgfCBNb2RSTSwKLQlEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltbUJ5dGUgfCBNb2RSTSwKLQlEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltbUJ5dGUgfCBNb2RSTSwKLQlEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0sIERzdE1lbSB8IFNyY0ltbUJ5dGUgfCBNb2RSTSwKKwlEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0gfCBMb2NrLAorCURzdE1lbSB8IFNyY0ltbUJ5dGUgfCBNb2RSTSB8IExvY2ssCisJRHN0TWVtIHwgU3JjSW1tQnl0ZSB8IE1vZFJNIHwgTG9jaywKKwlEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0gfCBMb2NrLAorCURzdE1lbSB8IFNyY0ltbUJ5dGUgfCBNb2RSTSB8IExvY2ssCisJRHN0TWVtIHwgU3JjSW1tQnl0ZSB8IE1vZFJNIHwgTG9jaywKKwlEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0gfCBMb2NrLAorCURzdE1lbSB8IFNyY0ltbUJ5dGUgfCBNb2RSTSwKIAlbR3JvdXAxQSo4XSA9CiAJRHN0TWVtIHwgU3JjTm9uZSB8IE1vZFJNIHwgTW92IHwgU3RhY2ssIDAsIDAsIDAsIDAsIDAsIDAsIDAsCiAJW0dyb3VwM19CeXRlKjhdID0KQEAgLTMyMCwyNCArMzQ1LDM5IEBACiAJU3JjTWVtIHwgTW9kUk0gfCBTdGFjaywgMCwKIAlTcmNNZW0gfCBNb2RSTSB8IFN0YWNrLCAwLCBTcmNNZW0gfCBNb2RSTSB8IFN0YWNrLCAwLAogCVtHcm91cDcqOF0gPQotCTAsIDAsIE1vZFJNIHwgU3JjTWVtLCBNb2RSTSB8IFNyY01lbSwKKwkwLCAwLCBNb2RSTSB8IFNyY01lbSB8IFByaXYsIE1vZFJNIHwgU3JjTWVtIHwgUHJpdiwKIAlTcmNOb25lIHwgTW9kUk0gfCBEc3RNZW0gfCBNb3YsIDAsCi0JU3JjTWVtMTYgfCBNb2RSTSB8IE1vdiwgU3JjTWVtIHwgTW9kUk0gfCBCeXRlT3AsCisJU3JjTWVtMTYgfCBNb2RSTSB8IE1vdiB8IFByaXYsIFNyY01lbSB8IE1vZFJNIHwgQnl0ZU9wIHwgUHJpdiwKKwlbR3JvdXA4KjhdID0KKwkwLCAwLCAwLCAwLAorCURzdE1lbSB8IFNyY0ltbUJ5dGUgfCBNb2RSTSwgRHN0TWVtIHwgU3JjSW1tQnl0ZSB8IE1vZFJNIHwgTG9jaywKKwlEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0gfCBMb2NrLCBEc3RNZW0gfCBTcmNJbW1CeXRlIHwgTW9kUk0gfCBMb2NrLAorCVtHcm91cDkqOF0gPQorCTAsIEltcGxpY2l0T3BzIHwgTW9kUk0gfCBMb2NrLCAwLCAwLCAwLCAwLCAwLCAwLAogfTsKIAogc3RhdGljIHUzMiBncm91cDJfdGFibGVbXSA9IHsKIAlbR3JvdXA3KjhdID0KLQlTcmNOb25lIHwgTW9kUk0sIDAsIDAsIFNyY05vbmUgfCBNb2RSTSwKKwlTcmNOb25lIHwgTW9kUk0gfCBQcml2LCAwLCAwLCBTcmNOb25lIHwgTW9kUk0sCiAJU3JjTm9uZSB8IE1vZFJNIHwgRHN0TWVtIHwgTW92LCAwLAogCVNyY01lbTE2IHwgTW9kUk0gfCBNb3YsIDAsCisJW0dyb3VwOSo4XSA9CisJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwKIH07CiAKIC8qIEVGTEFHUyBiaXQgZGVmaW5pdGlvbnMuICovCisjZGVmaW5lIEVGTEdfSUQgKDE8PDIxKQorI2RlZmluZSBFRkxHX1ZJUCAoMTw8MjApCisjZGVmaW5lIEVGTEdfVklGICgxPDwxOSkKKyNkZWZpbmUgRUZMR19BQyAoMTw8MTgpCiAjZGVmaW5lIEVGTEdfVk0gKDE8PDE3KQogI2RlZmluZSBFRkxHX1JGICgxPDwxNikKKyNkZWZpbmUgRUZMR19JT1BMICgzPDwxMikKKyNkZWZpbmUgRUZMR19OVCAoMTw8MTQpCiAjZGVmaW5lIEVGTEdfT0YgKDE8PDExKQogI2RlZmluZSBFRkxHX0RGICgxPDwxMCkKICNkZWZpbmUgRUZMR19JRiAoMTw8OSkKKyNkZWZpbmUgRUZMR19URiAoMTw8OCkKICNkZWZpbmUgRUZMR19TRiAoMTw8NykKICNkZWZpbmUgRUZMR19aRiAoMTw8NikKICNkZWZpbmUgRUZMR19BRiAoMTw8NCkKQEAgLTYwNiw3ICs2NDYsNyBAQAogCiAJaWYgKGxpbmVhciA8IGZjLT5zdGFydCB8fCBsaW5lYXIgPj0gZmMtPmVuZCkgewogCQlzaXplID0gbWluKDE1VUwsIFBBR0VfU0laRSAtIG9mZnNldF9pbl9wYWdlKGxpbmVhcikpOwotCQlyYyA9IG9wcy0+cmVhZF9zdGQobGluZWFyLCBmYy0+ZGF0YSwgc2l6ZSwgY3R4dC0+dmNwdSk7CisJCXJjID0gb3BzLT5mZXRjaChsaW5lYXIsIGZjLT5kYXRhLCBzaXplLCBjdHh0LT52Y3B1LCBOVUxMKTsKIAkJaWYgKHJjKQogCQkJcmV0dXJuIHJjOwogCQlmYy0+c3RhcnQgPSBsaW5lYXI7CkBAIC02NjEsMTEgKzcwMSwxMSBAQAogCQlvcF9ieXRlcyA9IDM7CiAJKmFkZHJlc3MgPSAwOwogCXJjID0gb3BzLT5yZWFkX3N0ZCgodW5zaWduZWQgbG9uZylwdHIsICh1bnNpZ25lZCBsb25nICopc2l6ZSwgMiwKLQkJCSAgIGN0eHQtPnZjcHUpOworCQkJICAgY3R4dC0+dmNwdSwgTlVMTCk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAJcmMgPSBvcHMtPnJlYWRfc3RkKCh1bnNpZ25lZCBsb25nKXB0ciArIDIsIGFkZHJlc3MsIG9wX2J5dGVzLAotCQkJICAgY3R4dC0+dmNwdSk7CisJCQkgICBjdHh0LT52Y3B1LCBOVUxMKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTg4OSw2ICs5MjksNyBAQAogCiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBYODZFTVVMX01PREVfUkVBTDoKKwljYXNlIFg4NkVNVUxfTU9ERV9WTTg2OgogCWNhc2UgWDg2RU1VTF9NT0RFX1BST1QxNjoKIAkJZGVmX29wX2J5dGVzID0gZGVmX2FkX2J5dGVzID0gMjsKIAkJYnJlYWs7CkBAIC05NzUsNyArMTAxNiw3IEBACiAJfQogCiAJaWYgKG1vZGUgPT0gWDg2RU1VTF9NT0RFX1BST1Q2NCAmJiAoYy0+ZCAmIE5vNjQpKSB7Ci0JCWt2bV9yZXBvcnRfZW11bGF0aW9uX2ZhaWx1cmUoY3R4dC0+dmNwdSwgImludmFsaWQgeDg2LzY0IGluc3RydWN0aW9uIik7OworCQlrdm1fcmVwb3J0X2VtdWxhdGlvbl9mYWlsdXJlKGN0eHQtPnZjcHUsICJpbnZhbGlkIHg4Ni82NCBpbnN0cnVjdGlvbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0xMTk2LDEzICsxMjM3LDU2IEBACiAJcmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQocmVnaXN0ZXJfYWRkcmVzcyhjLCBzc19iYXNlKGN0eHQpLAogCQkJCQkJIGMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0pLAogCQkJCWRlc3QsIGxlbiwgY3R4dC0+dmNwdSk7Ci0JaWYgKHJjICE9IDApCisJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiByYzsKIAogCXJlZ2lzdGVyX2FkZHJlc3NfaW5jcmVtZW50KGMsICZjLT5yZWdzW1ZDUFVfUkVHU19SU1BdLCBsZW4pOwogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBlbXVsYXRlX3BvcGYoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCisJCSAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMsCisJCSAgICAgICB2b2lkICpkZXN0LCBpbnQgbGVuKQoreworCWludCByYzsKKwl1bnNpZ25lZCBsb25nIHZhbCwgY2hhbmdlX21hc2s7CisJaW50IGlvcGwgPSAoY3R4dC0+ZWZsYWdzICYgWDg2X0VGTEFHU19JT1BMKSA+PiBJT1BMX1NISUZUOworCWludCBjcGwgPSBrdm1feDg2X29wcy0+Z2V0X2NwbChjdHh0LT52Y3B1KTsKKworCXJjID0gZW11bGF0ZV9wb3AoY3R4dCwgb3BzLCAmdmFsLCBsZW4pOworCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQorCQlyZXR1cm4gcmM7CisKKwljaGFuZ2VfbWFzayA9IEVGTEdfQ0YgfCBFRkxHX1BGIHwgRUZMR19BRiB8IEVGTEdfWkYgfCBFRkxHX1NGIHwgRUZMR19PRgorCQl8IEVGTEdfVEYgfCBFRkxHX0RGIHwgRUZMR19OVCB8IEVGTEdfUkYgfCBFRkxHX0FDIHwgRUZMR19JRDsKKworCXN3aXRjaChjdHh0LT5tb2RlKSB7CisJY2FzZSBYODZFTVVMX01PREVfUFJPVDY0OgorCWNhc2UgWDg2RU1VTF9NT0RFX1BST1QzMjoKKwljYXNlIFg4NkVNVUxfTU9ERV9QUk9UMTY6CisJCWlmIChjcGwgPT0gMCkKKwkJCWNoYW5nZV9tYXNrIHw9IEVGTEdfSU9QTDsKKwkJaWYgKGNwbCA8PSBpb3BsKQorCQkJY2hhbmdlX21hc2sgfD0gRUZMR19JRjsKKwkJYnJlYWs7CisJY2FzZSBYODZFTVVMX01PREVfVk04NjoKKwkJaWYgKGlvcGwgPCAzKSB7CisJCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOworCQkJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOworCQl9CisJCWNoYW5nZV9tYXNrIHw9IEVGTEdfSUY7CisJCWJyZWFrOworCWRlZmF1bHQ6IC8qIHJlYWwgbW9kZSAqLworCQljaGFuZ2VfbWFzayB8PSAoRUZMR19JT1BMIHwgRUZMR19JRik7CisJCWJyZWFrOworCX0KKworCSoodW5zaWduZWQgbG9uZyAqKWRlc3QgPQorCQkoY3R4dC0+ZWZsYWdzICYgfmNoYW5nZV9tYXNrKSB8ICh2YWwgJiBjaGFuZ2VfbWFzayk7CisKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyB2b2lkIGVtdWxhdGVfcHVzaF9zcmVnKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LCBpbnQgc2VnKQogewogCXN0cnVjdCBkZWNvZGVfY2FjaGUgKmMgPSAmY3R4dC0+ZGVjb2RlOwpAQCAtMTIyNSw3ICsxMzA5LDcgQEAKIAlpZiAocmMgIT0gMCkKIAkJcmV0dXJuIHJjOwogCi0JcmMgPSBrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dC0+dmNwdSwgKHUxNilzZWxlY3RvciwgMSwgc2VnKTsKKwlyYyA9IGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihjdHh0LT52Y3B1LCAodTE2KXNlbGVjdG9yLCBzZWcpOwogCXJldHVybiByYzsKIH0KIApAQCAtMTM3MCw3ICsxNDU0LDcgQEAKIAlpbnQgcmM7CiAKIAlyYyA9IG9wcy0+cmVhZF9lbXVsYXRlZChtZW1vcCwgJm9sZCwgOCwgY3R4dC0+dmNwdSk7Ci0JaWYgKHJjICE9IDApCisJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiByYzsKIAogCWlmICgoKHUzMikgKG9sZCA+PiAwKSAhPSAodTMyKSBjLT5yZWdzW1ZDUFVfUkVHU19SQVhdKSB8fApAQCAtMTM4NSw3ICsxNDY5LDcgQEAKIAkJICAgICAgICh1MzIpIGMtPnJlZ3NbVkNQVV9SRUdTX1JCWF07CiAKIAkJcmMgPSBvcHMtPmNtcHhjaGdfZW11bGF0ZWQobWVtb3AsICZvbGQsICZuZXcsIDgsIGN0eHQtPnZjcHUpOwotCQlpZiAocmMgIT0gMCkKKwkJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCQlyZXR1cm4gcmM7CiAJCWN0eHQtPmVmbGFncyB8PSBFRkxHX1pGOwogCX0KQEAgLTE0MDcsNyArMTQ5MSw3IEBACiAJcmMgPSBlbXVsYXRlX3BvcChjdHh0LCBvcHMsICZjcywgYy0+b3BfYnl0ZXMpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwotCXJjID0ga3ZtX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKGN0eHQtPnZjcHUsICh1MTYpY3MsIDEsIFZDUFVfU1JFR19DUyk7CisJcmMgPSBrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dC0+dmNwdSwgKHUxNiljcywgVkNQVV9TUkVHX0NTKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTE0NTEsNyArMTUzNSw3IEBACiAJCQkJCSZjLT5kc3QudmFsLAogCQkJCQljLT5kc3QuYnl0ZXMsCiAJCQkJCWN0eHQtPnZjcHUpOwotCQlpZiAocmMgIT0gMCkKKwkJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCiAJCQlyZXR1cm4gcmM7CiAJCWJyZWFrOwogCWNhc2UgT1BfTk9ORToKQEAgLTE1MTQsOSArMTU5OCw4IEBACiAJdTY0IG1zcl9kYXRhOwogCiAJLyogc3lzY2FsbCBpcyBub3QgYXZhaWxhYmxlIGluIHJlYWwgbW9kZSAqLwotCWlmIChjLT5sb2NrX3ByZWZpeCB8fCBjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9SRUFMCi0JCXx8ICEoY3R4dC0+dmNwdS0+YXJjaC5jcjAgJiBYODZfQ1IwX1BFKSkKLQkJcmV0dXJuIC0xOworCWlmIChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9SRUFMIHx8IGN0eHQtPm1vZGUgPT0gWDg2RU1VTF9NT0RFX1ZNODYpCisJCXJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKIAogCXNldHVwX3N5c2NhbGxzX3NlZ21lbnRzKGN0eHQsICZjcywgJnNzKTsKIApAQCAtMTU1Myw3ICsxNjM2LDcgQEAKIAkJY3R4dC0+ZWZsYWdzICY9IH4oRUZMR19WTSB8IEVGTEdfSUYgfCBFRkxHX1JGKTsKIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIH0KIAogc3RhdGljIGludApAQCAtMTU2MywyMiArMTY0NiwxNyBAQAogCXN0cnVjdCBrdm1fc2VnbWVudCBjcywgc3M7CiAJdTY0IG1zcl9kYXRhOwogCi0JLyogaW5qZWN0ICNVRCBpZiBMT0NLIHByZWZpeCBpcyB1c2VkICovCi0JaWYgKGMtPmxvY2tfcHJlZml4KQotCQlyZXR1cm4gLTE7Ci0KLQkvKiBpbmplY3QgI0dQIGlmIGluIHJlYWwgbW9kZSBvciBwYWdpbmcgaXMgZGlzYWJsZWQgKi8KLQlpZiAoY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfUkVBTCB8fAotCQkhKGN0eHQtPnZjcHUtPmFyY2guY3IwICYgWDg2X0NSMF9QRSkpIHsKKwkvKiBpbmplY3QgI0dQIGlmIGluIHJlYWwgbW9kZSAqLworCWlmIChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9SRUFMKSB7CiAJCWt2bV9pbmplY3RfZ3AoY3R4dC0+dmNwdSwgMCk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwogCX0KIAogCS8qIFhYWCBzeXNlbnRlci9zeXNleGl0IGhhdmUgbm90IGJlZW4gdGVzdGVkIGluIDY0Yml0IG1vZGUuCiAJKiBUaGVyZWZvcmUsIHdlIGluamVjdCBhbiAjVUQuCiAJKi8KIAlpZiAoY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfUFJPVDY0KQotCQlyZXR1cm4gLTE7CisJCXJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKIAogCXNldHVwX3N5c2NhbGxzX3NlZ21lbnRzKGN0eHQsICZjcywgJnNzKTsKIApAQCAtMTU4NywxMyArMTY2NSwxMyBAQAogCWNhc2UgWDg2RU1VTF9NT0RFX1BST1QzMjoKIAkJaWYgKChtc3JfZGF0YSAmIDB4ZmZmYykgPT0gMHgwKSB7CiAJCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOwotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgWDg2RU1VTF9NT0RFX1BST1Q2NDoKIAkJaWYgKG1zcl9kYXRhID09IDB4MCkgewogCQkJa3ZtX2luamVjdF9ncChjdHh0LT52Y3B1LCAwKTsKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKIAkJfQogCQlicmVhazsKIAl9CkBAIC0xNjE4LDcgKzE2OTYsNyBAQAogCWt2bV94ODZfb3BzLT5nZXRfbXNyKGN0eHQtPnZjcHUsIE1TUl9JQTMyX1NZU0VOVEVSX0VTUCwgJm1zcl9kYXRhKTsKIAljLT5yZWdzW1ZDUFVfUkVHU19SU1BdID0gbXNyX2RhdGE7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIH0KIAogc3RhdGljIGludApAQCAtMTYyOSwyMSArMTcwNywxMSBAQAogCXU2NCBtc3JfZGF0YTsKIAlpbnQgdXNlcm1vZGU7CiAKLQkvKiBpbmplY3QgI1VEIGlmIExPQ0sgcHJlZml4IGlzIHVzZWQgKi8KLQlpZiAoYy0+bG9ja19wcmVmaXgpCi0JCXJldHVybiAtMTsKLQotCS8qIGluamVjdCAjR1AgaWYgaW4gcmVhbCBtb2RlIG9yIHBhZ2luZyBpcyBkaXNhYmxlZCAqLwotCWlmIChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9SRUFMCi0JCXx8ICEoY3R4dC0+dmNwdS0+YXJjaC5jcjAgJiBYODZfQ1IwX1BFKSkgeworCS8qIGluamVjdCAjR1AgaWYgaW4gcmVhbCBtb2RlIG9yIFZpcnR1YWwgODA4NiBtb2RlICovCisJaWYgKGN0eHQtPm1vZGUgPT0gWDg2RU1VTF9NT0RFX1JFQUwgfHwKKwkgICAgY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfVk04NikgewogCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOwotCQlyZXR1cm4gLTE7Ci0JfQotCi0JLyogc3lzZXhpdCBtdXN0IGJlIGNhbGxlZCBmcm9tIENQTCAwICovCi0JaWYgKGt2bV94ODZfb3BzLT5nZXRfY3BsKGN0eHQtPnZjcHUpICE9IDApIHsKLQkJa3ZtX2luamVjdF9ncChjdHh0LT52Y3B1LCAwKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CiAJfQogCiAJc2V0dXBfc3lzY2FsbHNfc2VnbWVudHMoY3R4dCwgJmNzLCAmc3MpOwpAQCAtMTY2MSw3ICsxNzI5LDcgQEAKIAkJY3Muc2VsZWN0b3IgPSAodTE2KShtc3JfZGF0YSArIDE2KTsKIAkJaWYgKChtc3JfZGF0YSAmIDB4ZmZmYykgPT0gMHgwKSB7CiAJCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOwotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwogCQl9CiAJCXNzLnNlbGVjdG9yID0gKHUxNikobXNyX2RhdGEgKyAyNCk7CiAJCWJyZWFrOwpAQCAtMTY2OSw3ICsxNzM3LDcgQEAKIAkJY3Muc2VsZWN0b3IgPSAodTE2KShtc3JfZGF0YSArIDMyKTsKIAkJaWYgKG1zcl9kYXRhID09IDB4MCkgewogCQkJa3ZtX2luamVjdF9ncChjdHh0LT52Y3B1LCAwKTsKLQkJCXJldHVybiAtMTsKKwkJCXJldHVybiBYODZFTVVMX1BST1BBR0FURV9GQVVMVDsKIAkJfQogCQlzcy5zZWxlY3RvciA9IGNzLnNlbGVjdG9yICsgODsKIAkJY3MuZGIgPSAwOwpAQCAtMTY4NSw3ICsxNzUzLDU4IEBACiAJYy0+ZWlwID0gY3R4dC0+dmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdOwogCWMtPnJlZ3NbVkNQVV9SRUdTX1JTUF0gPSBjdHh0LT52Y3B1LT5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF07CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKK30KKworc3RhdGljIGJvb2wgZW11bGF0b3JfYmFkX2lvcGwoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisJaW50IGlvcGw7CisJaWYgKGN0eHQtPm1vZGUgPT0gWDg2RU1VTF9NT0RFX1JFQUwpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoY3R4dC0+bW9kZSA9PSBYODZFTVVMX01PREVfVk04NikKKwkJcmV0dXJuIHRydWU7CisJaW9wbCA9IChjdHh0LT5lZmxhZ3MgJiBYODZfRUZMQUdTX0lPUEwpID4+IElPUExfU0hJRlQ7CisJcmV0dXJuIGt2bV94ODZfb3BzLT5nZXRfY3BsKGN0eHQtPnZjcHUpID4gaW9wbDsKK30KKworc3RhdGljIGJvb2wgZW11bGF0b3JfaW9fcG9ydF9hY2Nlc3NfYWxsb3dlZChzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwKKwkJCQkJICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgKm9wcywKKwkJCQkJICAgIHUxNiBwb3J0LCB1MTYgbGVuKQoreworCXN0cnVjdCBrdm1fc2VnbWVudCB0cl9zZWc7CisJaW50IHI7CisJdTE2IGlvX2JpdG1hcF9wdHI7CisJdTggcGVybSwgYml0X2lkeCA9IHBvcnQgJiAweDc7CisJdW5zaWduZWQgbWFzayA9ICgxIDw8IGxlbikgLSAxOworCisJa3ZtX2dldF9zZWdtZW50KGN0eHQtPnZjcHUsICZ0cl9zZWcsIFZDUFVfU1JFR19UUik7CisJaWYgKHRyX3NlZy51bnVzYWJsZSkKKwkJcmV0dXJuIGZhbHNlOworCWlmICh0cl9zZWcubGltaXQgPCAxMDMpCisJCXJldHVybiBmYWxzZTsKKwlyID0gb3BzLT5yZWFkX3N0ZCh0cl9zZWcuYmFzZSArIDEwMiwgJmlvX2JpdG1hcF9wdHIsIDIsIGN0eHQtPnZjcHUsCisJCQkgIE5VTEwpOworCWlmIChyICE9IFg4NkVNVUxfQ09OVElOVUUpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoaW9fYml0bWFwX3B0ciArIHBvcnQvOCA+IHRyX3NlZy5saW1pdCkKKwkJcmV0dXJuIGZhbHNlOworCXIgPSBvcHMtPnJlYWRfc3RkKHRyX3NlZy5iYXNlICsgaW9fYml0bWFwX3B0ciArIHBvcnQvOCwgJnBlcm0sIDEsCisJCQkgIGN0eHQtPnZjcHUsIE5VTEwpOworCWlmIChyICE9IFg4NkVNVUxfQ09OVElOVUUpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoKHBlcm0gPj4gYml0X2lkeCkgJiBtYXNrKQorCQlyZXR1cm4gZmFsc2U7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIGVtdWxhdG9yX2lvX3Blcm1pdGVkKHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAorCQkJCSBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICpvcHMsCisJCQkJIHUxNiBwb3J0LCB1MTYgbGVuKQoreworCWlmIChlbXVsYXRvcl9iYWRfaW9wbChjdHh0KSkKKwkJaWYgKCFlbXVsYXRvcl9pb19wb3J0X2FjY2Vzc19hbGxvd2VkKGN0eHQsIG9wcywgcG9ydCwgbGVuKSkKKwkJCXJldHVybiBmYWxzZTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogaW50CkBAIC0xNzA5LDYgKzE4MjgsMTggQEAKIAltZW1jcHkoYy0+cmVncywgY3R4dC0+dmNwdS0+YXJjaC5yZWdzLCBzaXplb2YgYy0+cmVncyk7CiAJc2F2ZWRfZWlwID0gYy0+ZWlwOwogCisJLyogTE9DSyBwcmVmaXggaXMgYWxsb3dlZCBvbmx5IHdpdGggc29tZSBpbnN0cnVjdGlvbnMgKi8KKwlpZiAoYy0+bG9ja19wcmVmaXggJiYgIShjLT5kICYgTG9jaykpIHsKKwkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbihjdHh0LT52Y3B1LCBVRF9WRUNUT1IpOworCQlnb3RvIGRvbmU7CisJfQorCisJLyogUHJpdmlsZWdlZCBpbnN0cnVjdGlvbiBjYW4gYmUgZXhlY3V0ZWQgb25seSBpbiBDUEw9MCAqLworCWlmICgoYy0+ZCAmIFByaXYpICYmIGt2bV94ODZfb3BzLT5nZXRfY3BsKGN0eHQtPnZjcHUpKSB7CisJCWt2bV9pbmplY3RfZ3AoY3R4dC0+dmNwdSwgMCk7CisJCWdvdG8gZG9uZTsKKwl9CisKIAlpZiAoKChjLT5kICYgTW9kUk0pICYmIChjLT5tb2RybV9tb2QgIT0gMykpIHx8IChjLT5kICYgTWVtQWJzKSkKIAkJbWVtb3AgPSBjLT5tb2RybV9lYTsKIApAQCAtMTc0OSw3ICsxODgwLDcgQEAKIAkJCQkJJmMtPnNyYy52YWwsCiAJCQkJCWMtPnNyYy5ieXRlcywKIAkJCQkJY3R4dC0+dmNwdSk7Ci0JCWlmIChyYyAhPSAwKQorCQlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJCWdvdG8gZG9uZTsKIAkJYy0+c3JjLm9yaWdfdmFsID0gYy0+c3JjLnZhbDsKIAl9CkBAIC0xNzY4LDEyICsxODk5LDE1IEBACiAJCQljLT5kc3QucHRyID0gKHZvaWQgKiljLT5kc3QucHRyICsKIAkJCQkJCSAgIChjLT5zcmMudmFsICYgbWFzaykgLyA4OwogCQl9Ci0JCWlmICghKGMtPmQgJiBNb3YpICYmCi0JCQkJICAgLyogb3B0aW1pc2F0aW9uIC0gYXZvaWQgc2xvdyBlbXVsYXRlZCByZWFkICovCi0JCSAgICAoKHJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKCh1bnNpZ25lZCBsb25nKWMtPmRzdC5wdHIsCi0JCQkJCSAgICZjLT5kc3QudmFsLAotCQkJCQkgIGMtPmRzdC5ieXRlcywgY3R4dC0+dmNwdSkpICE9IDApKQotCQkJZ290byBkb25lOworCQlpZiAoIShjLT5kICYgTW92KSkgeworCQkJLyogb3B0aW1pc2F0aW9uIC0gYXZvaWQgc2xvdyBlbXVsYXRlZCByZWFkICovCisJCQlyYyA9IG9wcy0+cmVhZF9lbXVsYXRlZCgodW5zaWduZWQgbG9uZyljLT5kc3QucHRyLAorCQkJCQkJJmMtPmRzdC52YWwsCisJCQkJCQljLT5kc3QuYnl0ZXMsCisJCQkJCQljdHh0LT52Y3B1KTsKKwkJCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQorCQkJCWdvdG8gZG9uZTsKKwkJfQogCX0KIAljLT5kc3Qub3JpZ192YWwgPSBjLT5kc3QudmFsOwogCkBAIC0xODc2LDcgKzIwMTAsMTIgQEAKIAkJYnJlYWs7CiAJY2FzZSAweDZjOgkJLyogaW5zYiAqLwogCWNhc2UgMHg2ZDoJCS8qIGluc3cvaW5zZCAqLwotCQkgaWYgKGt2bV9lbXVsYXRlX3Bpb19zdHJpbmcoY3R4dC0+dmNwdSwKKwkJaWYgKCFlbXVsYXRvcl9pb19wZXJtaXRlZChjdHh0LCBvcHMsIGMtPnJlZ3NbVkNQVV9SRUdTX1JEWF0sCisJCQkJCSAgKGMtPmQgJiBCeXRlT3ApID8gMSA6IGMtPm9wX2J5dGVzKSkgeworCQkJa3ZtX2luamVjdF9ncChjdHh0LT52Y3B1LCAwKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlpZiAoa3ZtX2VtdWxhdGVfcGlvX3N0cmluZyhjdHh0LT52Y3B1LAogCQkJCTEsCiAJCQkJKGMtPmQgJiBCeXRlT3ApID8gMSA6IGMtPm9wX2J5dGVzLAogCQkJCWMtPnJlcF9wcmVmaXggPwpAQCAtMTg5Miw2ICsyMDMxLDExIEBACiAJCXJldHVybiAwOwogCWNhc2UgMHg2ZToJCS8qIG91dHNiICovCiAJY2FzZSAweDZmOgkJLyogb3V0c3cvb3V0c2QgKi8KKwkJaWYgKCFlbXVsYXRvcl9pb19wZXJtaXRlZChjdHh0LCBvcHMsIGMtPnJlZ3NbVkNQVV9SRUdTX1JEWF0sCisJCQkJCSAgKGMtPmQgJiBCeXRlT3ApID8gMSA6IGMtPm9wX2J5dGVzKSkgeworCQkJa3ZtX2luamVjdF9ncChjdHh0LT52Y3B1LCAwKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQogCQlpZiAoa3ZtX2VtdWxhdGVfcGlvX3N0cmluZyhjdHh0LT52Y3B1LAogCQkJCTAsCiAJCQkJKGMtPmQgJiBCeXRlT3ApID8gMSA6IGMtPm9wX2J5dGVzLApAQCAtMTk3OCwyNSArMjEyMiwxOSBAQAogCQlicmVhazsKIAljYXNlIDB4OGU6IHsgLyogbW92IHNlZywgci9tMTYgKi8KIAkJdWludDE2X3Qgc2VsOwotCQlpbnQgdHlwZV9iaXRzOwotCQlpbnQgZXJyOwogCiAJCXNlbCA9IGMtPnNyYy52YWw7CisKKwkJaWYgKGMtPm1vZHJtX3JlZyA9PSBWQ1BVX1NSRUdfQ1MgfHwKKwkJICAgIGMtPm1vZHJtX3JlZyA+IFZDUFVfU1JFR19HUykgeworCQkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbihjdHh0LT52Y3B1LCBVRF9WRUNUT1IpOworCQkJZ290byBkb25lOworCQl9CisKIAkJaWYgKGMtPm1vZHJtX3JlZyA9PSBWQ1BVX1NSRUdfU1MpCiAJCQl0b2dnbGVfaW50ZXJydXB0aWJpbGl0eShjdHh0LCBYODZfU0hBRE9XX0lOVF9NT1ZfU1MpOwogCi0JCWlmIChjLT5tb2RybV9yZWcgPD0gNSkgewotCQkJdHlwZV9iaXRzID0gKGMtPm1vZHJtX3JlZyA9PSAxKSA/IDkgOiAxOwotCQkJZXJyID0ga3ZtX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKGN0eHQtPnZjcHUsIHNlbCwKLQkJCQkJCQkgIHR5cGVfYml0cywgYy0+bW9kcm1fcmVnKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIkludmFsaWQgc2VncmVnIGluIG1vZHJtIGJ5dGUgMHglMDJ4XG4iLAotCQkJCQljLT5tb2RybSk7Ci0JCQlnb3RvIGNhbm5vdF9lbXVsYXRlOwotCQl9Ci0KLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCQlyYyA9IGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcihjdHh0LT52Y3B1LCBzZWwsIGMtPm1vZHJtX3JlZyk7CiAKIAkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOyAgLyogRGlzYWJsZSB3cml0ZWJhY2suICovCiAJCWJyZWFrOwpAQCAtMjAyNSw3ICsyMTYzLDEwIEBACiAJCWMtPmRzdC50eXBlID0gT1BfUkVHOwogCQljLT5kc3QucHRyID0gKHVuc2lnbmVkIGxvbmcgKikgJmN0eHQtPmVmbGFnczsKIAkJYy0+ZHN0LmJ5dGVzID0gYy0+b3BfYnl0ZXM7Ci0JCWdvdG8gcG9wX2luc3RydWN0aW9uOworCQlyYyA9IGVtdWxhdGVfcG9wZihjdHh0LCBvcHMsICZjLT5kc3QudmFsLCBjLT5vcF9ieXRlcyk7CisJCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQorCQkJZ290byBkb25lOworCQlicmVhazsKIAljYXNlIDB4YTAgLi4uIDB4YTE6CS8qIG1vdiAqLwogCQljLT5kc3QucHRyID0gKHVuc2lnbmVkIGxvbmcgKikmYy0+cmVnc1tWQ1BVX1JFR1NfUkFYXTsKIAkJYy0+ZHN0LnZhbCA9IGMtPnNyYy52YWw7CkBAIC0yMDM5LDExICsyMTgwLDEyIEBACiAJCWMtPmRzdC5wdHIgPSAodW5zaWduZWQgbG9uZyAqKXJlZ2lzdGVyX2FkZHJlc3MoYywKIAkJCQkJCSAgIGVzX2Jhc2UoY3R4dCksCiAJCQkJCQkgICBjLT5yZWdzW1ZDUFVfUkVHU19SREldKTsKLQkJaWYgKChyYyA9IG9wcy0+cmVhZF9lbXVsYXRlZChyZWdpc3Rlcl9hZGRyZXNzKGMsCi0JCQkJCSAgIHNlZ19vdmVycmlkZV9iYXNlKGN0eHQsIGMpLAotCQkJCQljLT5yZWdzW1ZDUFVfUkVHU19SU0ldKSwKKwkJcmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQocmVnaXN0ZXJfYWRkcmVzcyhjLAorCQkJCQkJc2VnX292ZXJyaWRlX2Jhc2UoY3R4dCwgYyksCisJCQkJCQljLT5yZWdzW1ZDUFVfUkVHU19SU0ldKSwKIAkJCQkJJmMtPmRzdC52YWwsCi0JCQkJCWMtPmRzdC5ieXRlcywgY3R4dC0+dmNwdSkpICE9IDApCisJCQkJCWMtPmRzdC5ieXRlcywgY3R4dC0+dmNwdSk7CisJCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQkJZ290byBkb25lOwogCQlyZWdpc3Rlcl9hZGRyZXNzX2luY3JlbWVudChjLCAmYy0+cmVnc1tWQ1BVX1JFR1NfUlNJXSwKIAkJCQkgICAgICAgKGN0eHQtPmVmbGFncyAmIEVGTEdfREYpID8gLWMtPmRzdC5ieXRlcwpAQCAtMjA1OCwxMCArMjIwMCwxMSBAQAogCQljLT5zcmMucHRyID0gKHVuc2lnbmVkIGxvbmcgKilyZWdpc3Rlcl9hZGRyZXNzKGMsCiAJCQkJICAgICAgIHNlZ19vdmVycmlkZV9iYXNlKGN0eHQsIGMpLAogCQkJCQkJICAgYy0+cmVnc1tWQ1BVX1JFR1NfUlNJXSk7Ci0JCWlmICgocmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQoKHVuc2lnbmVkIGxvbmcpYy0+c3JjLnB0ciwKLQkJCQkJCSZjLT5zcmMudmFsLAotCQkJCQkJYy0+c3JjLmJ5dGVzLAotCQkJCQkJY3R4dC0+dmNwdSkpICE9IDApCisJCXJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKCh1bnNpZ25lZCBsb25nKWMtPnNyYy5wdHIsCisJCQkJCSZjLT5zcmMudmFsLAorCQkJCQljLT5zcmMuYnl0ZXMsCisJCQkJCWN0eHQtPnZjcHUpOworCQlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJCWdvdG8gZG9uZTsKIAogCQljLT5kc3QudHlwZSA9IE9QX05PTkU7IC8qIERpc2FibGUgd3JpdGViYWNrLiAqLwpAQCAtMjA2OSwxMCArMjIxMiwxMSBAQAogCQljLT5kc3QucHRyID0gKHVuc2lnbmVkIGxvbmcgKilyZWdpc3Rlcl9hZGRyZXNzKGMsCiAJCQkJCQkgICBlc19iYXNlKGN0eHQpLAogCQkJCQkJICAgYy0+cmVnc1tWQ1BVX1JFR1NfUkRJXSk7Ci0JCWlmICgocmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQoKHVuc2lnbmVkIGxvbmcpYy0+ZHN0LnB0ciwKLQkJCQkJCSZjLT5kc3QudmFsLAotCQkJCQkJYy0+ZHN0LmJ5dGVzLAotCQkJCQkJY3R4dC0+dmNwdSkpICE9IDApCisJCXJjID0gb3BzLT5yZWFkX2VtdWxhdGVkKCh1bnNpZ25lZCBsb25nKWMtPmRzdC5wdHIsCisJCQkJCSZjLT5kc3QudmFsLAorCQkJCQljLT5kc3QuYnl0ZXMsCisJCQkJCWN0eHQtPnZjcHUpOworCQlpZiAocmMgIT0gWDg2RU1VTF9DT05USU5VRSkKIAkJCWdvdG8gZG9uZTsKIAogCQlEUFJJTlRGKCJjbXBzOiBtZW0xPTB4JXAgbWVtMj0weCVwXG4iLCBjLT5zcmMucHRyLCBjLT5kc3QucHRyKTsKQEAgLTIxMDIsMTIgKzIyNDYsMTMgQEAKIAkJYy0+ZHN0LnR5cGUgPSBPUF9SRUc7CiAJCWMtPmRzdC5ieXRlcyA9IChjLT5kICYgQnl0ZU9wKSA/IDEgOiBjLT5vcF9ieXRlczsKIAkJYy0+ZHN0LnB0ciA9ICh1bnNpZ25lZCBsb25nICopJmMtPnJlZ3NbVkNQVV9SRUdTX1JBWF07Ci0JCWlmICgocmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQocmVnaXN0ZXJfYWRkcmVzcyhjLAotCQkJCQkJIHNlZ19vdmVycmlkZV9iYXNlKGN0eHQsIGMpLAotCQkJCQkJIGMtPnJlZ3NbVkNQVV9SRUdTX1JTSV0pLAotCQkJCQkJICZjLT5kc3QudmFsLAotCQkJCQkJIGMtPmRzdC5ieXRlcywKLQkJCQkJCSBjdHh0LT52Y3B1KSkgIT0gMCkKKwkJcmMgPSBvcHMtPnJlYWRfZW11bGF0ZWQocmVnaXN0ZXJfYWRkcmVzcyhjLAorCQkJCQkJc2VnX292ZXJyaWRlX2Jhc2UoY3R4dCwgYyksCisJCQkJCQljLT5yZWdzW1ZDUFVfUkVHU19SU0ldKSwKKwkJCQkJJmMtPmRzdC52YWwsCisJCQkJCWMtPmRzdC5ieXRlcywKKwkJCQkJY3R4dC0+dmNwdSk7CisJCWlmIChyYyAhPSBYODZFTVVMX0NPTlRJTlVFKQogCQkJZ290byBkb25lOwogCQlyZWdpc3Rlcl9hZGRyZXNzX2luY3JlbWVudChjLCAmYy0+cmVnc1tWQ1BVX1JFR1NfUlNJXSwKIAkJCQkgICAgICAgKGN0eHQtPmVmbGFncyAmIEVGTEdfREYpID8gLWMtPmRzdC5ieXRlcwpAQCAtMjE2MywxMSArMjMwOCw5IEBACiAJY2FzZSAweGU5OiAvKiBqbXAgcmVsICovCiAJCWdvdG8gam1wOwogCWNhc2UgMHhlYTogLyogam1wIGZhciAqLwotCQlpZiAoa3ZtX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKGN0eHQtPnZjcHUsIGMtPnNyYzIudmFsLCA5LAotCQkJCQlWQ1BVX1NSRUdfQ1MpIDwgMCkgewotCQkJRFBSSU5URigiam1wIGZhcjogRmFpbGVkIHRvIGxvYWQgQ1MgZGVzY3JpcHRvclxuIik7Ci0JCQlnb3RvIGNhbm5vdF9lbXVsYXRlOwotCQl9CisJCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IoY3R4dC0+dmNwdSwgYy0+c3JjMi52YWwsCisJCQkJCQlWQ1BVX1NSRUdfQ1MpKQorCQkJZ290byBkb25lOwogCiAJCWMtPmVpcCA9IGMtPnNyYy52YWw7CiAJCWJyZWFrOwpAQCAtMjE4NSw3ICsyMzI4LDEzIEBACiAJY2FzZSAweGVmOiAvKiBvdXQgKGUvcilheCxkeCAqLwogCQlwb3J0ID0gYy0+cmVnc1tWQ1BVX1JFR1NfUkRYXTsKIAkJaW9fZGlyX2luID0gMDsKLQlkb19pbzoJaWYgKGt2bV9lbXVsYXRlX3BpbyhjdHh0LT52Y3B1LCBpb19kaXJfaW4sCisJZG9faW86CisJCWlmICghZW11bGF0b3JfaW9fcGVybWl0ZWQoY3R4dCwgb3BzLCBwb3J0LAorCQkJCQkgIChjLT5kICYgQnl0ZU9wKSA/IDEgOiBjLT5vcF9ieXRlcykpIHsKKwkJCWt2bV9pbmplY3RfZ3AoY3R4dC0+dmNwdSwgMCk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJaWYgKGt2bV9lbXVsYXRlX3BpbyhjdHh0LT52Y3B1LCBpb19kaXJfaW4sCiAJCQkJICAgKGMtPmQgJiBCeXRlT3ApID8gMSA6IGMtPm9wX2J5dGVzLAogCQkJCSAgIHBvcnQpICE9IDApIHsKIAkJCWMtPmVpcCA9IHNhdmVkX2VpcDsKQEAgLTIyMTAsMTMgKzIzNTksMjEgQEAKIAkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KIAkJYnJlYWs7CiAJY2FzZSAweGZhOiAvKiBjbGkgKi8KLQkJY3R4dC0+ZWZsYWdzICY9IH5YODZfRUZMQUdTX0lGOwotCQljLT5kc3QudHlwZSA9IE9QX05PTkU7CS8qIERpc2FibGUgd3JpdGViYWNrLiAqLworCQlpZiAoZW11bGF0b3JfYmFkX2lvcGwoY3R4dCkpCisJCQlrdm1faW5qZWN0X2dwKGN0eHQtPnZjcHUsIDApOworCQllbHNlIHsKKwkJCWN0eHQtPmVmbGFncyAmPSB+WDg2X0VGTEFHU19JRjsKKwkJCWMtPmRzdC50eXBlID0gT1BfTk9ORTsJLyogRGlzYWJsZSB3cml0ZWJhY2suICovCisJCX0KIAkJYnJlYWs7CiAJY2FzZSAweGZiOiAvKiBzdGkgKi8KLQkJdG9nZ2xlX2ludGVycnVwdGliaWxpdHkoY3R4dCwgWDg2X1NIQURPV19JTlRfU1RJKTsKLQkJY3R4dC0+ZWZsYWdzIHw9IFg4Nl9FRkxBR1NfSUY7Ci0JCWMtPmRzdC50eXBlID0gT1BfTk9ORTsJLyogRGlzYWJsZSB3cml0ZWJhY2suICovCisJCWlmIChlbXVsYXRvcl9iYWRfaW9wbChjdHh0KSkKKwkJCWt2bV9pbmplY3RfZ3AoY3R4dC0+dmNwdSwgMCk7CisJCWVsc2UgeworCQkJdG9nZ2xlX2ludGVycnVwdGliaWxpdHkoY3R4dCwgWDg2X1NIQURPV19JTlRfU1RJKTsKKwkJCWN0eHQtPmVmbGFncyB8PSBYODZfRUZMQUdTX0lGOworCQkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwkvKiBEaXNhYmxlIHdyaXRlYmFjay4gKi8KKwkJfQogCQlicmVhazsKIAljYXNlIDB4ZmM6IC8qIGNsZCAqLwogCQljdHh0LT5lZmxhZ3MgJj0gfkVGTEdfREY7CkBAIC0yMzE5LDggKzI0NzYsOSBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgMHgwNTogCQkvKiBzeXNjYWxsICovCi0JCWlmIChlbXVsYXRlX3N5c2NhbGwoY3R4dCkgPT0gLTEpCi0JCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCQlyYyA9IGVtdWxhdGVfc3lzY2FsbChjdHh0KTsKKwkJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCisJCQlnb3RvIGRvbmU7CiAJCWVsc2UKIAkJCWdvdG8gd3JpdGViYWNrOwogCQlicmVhazsKQEAgLTIzOTEsMTQgKzI1NDksMTYgQEAKIAkJYy0+ZHN0LnR5cGUgPSBPUF9OT05FOwogCQlicmVhazsKIAljYXNlIDB4MzQ6CQkvKiBzeXNlbnRlciAqLwotCQlpZiAoZW11bGF0ZV9zeXNlbnRlcihjdHh0KSA9PSAtMSkKLQkJCWdvdG8gY2Fubm90X2VtdWxhdGU7CisJCXJjID0gZW11bGF0ZV9zeXNlbnRlcihjdHh0KTsKKwkJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCisJCQlnb3RvIGRvbmU7CiAJCWVsc2UKIAkJCWdvdG8gd3JpdGViYWNrOwogCQlicmVhazsKIAljYXNlIDB4MzU6CQkvKiBzeXNleGl0ICovCi0JCWlmIChlbXVsYXRlX3N5c2V4aXQoY3R4dCkgPT0gLTEpCi0JCQlnb3RvIGNhbm5vdF9lbXVsYXRlOworCQlyYyA9IGVtdWxhdGVfc3lzZXhpdChjdHh0KTsKKwkJaWYgKHJjICE9IFg4NkVNVUxfQ09OVElOVUUpCisJCQlnb3RvIGRvbmU7CiAJCWVsc2UKIAkJCWdvdG8gd3JpdGViYWNrOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pODI1NC5jIGIvYXJjaC94ODYva3ZtL2k4MjU0LmMKaW5kZXggMTU1NzhmMS4uMjk0Njk4YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2k4MjU0LmMKKysrIGIvYXJjaC94ODYva3ZtL2k4MjU0LmMKQEAgLTI0MiwxMSArMjQyLDExIEBACiB7CiAJc3RydWN0IGt2bV9rcGl0X3N0YXRlICpwcyA9IGNvbnRhaW5lcl9vZihraWFuLCBzdHJ1Y3Qga3ZtX2twaXRfc3RhdGUsCiAJCQkJCQkgaXJxX2Fja19ub3RpZmllcik7Ci0Jc3Bpbl9sb2NrKCZwcy0+aW5qZWN0X2xvY2spOworCXJhd19zcGluX2xvY2soJnBzLT5pbmplY3RfbG9jayk7CiAJaWYgKGF0b21pY19kZWNfcmV0dXJuKCZwcy0+cGl0X3RpbWVyLnBlbmRpbmcpIDwgMCkKIAkJYXRvbWljX2luYygmcHMtPnBpdF90aW1lci5wZW5kaW5nKTsKIAlwcy0+aXJxX2FjayA9IDE7Ci0Jc3Bpbl91bmxvY2soJnBzLT5pbmplY3RfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZwcy0+aW5qZWN0X2xvY2spOwogfQogCiB2b2lkIF9fa3ZtX21pZ3JhdGVfcGl0X3RpbWVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTYwNSw3ICs2MDUsNyBAQAogCS53cml0ZSAgICA9IHNwZWFrZXJfaW9wb3J0X3dyaXRlLAogfTsKIAotLyogQ2FsbGVyIG11c3QgaGF2ZSB3cml0ZXJzIGxvY2sgb24gc2xvdHNfbG9jayAqLworLyogQ2FsbGVyIG11c3QgaG9sZCBzbG90c19sb2NrICovCiBzdHJ1Y3Qga3ZtX3BpdCAqa3ZtX2NyZWF0ZV9waXQoc3RydWN0IGt2bSAqa3ZtLCB1MzIgZmxhZ3MpCiB7CiAJc3RydWN0IGt2bV9waXQgKnBpdDsKQEAgLTYyNCw3ICs2MjQsNyBAQAogCiAJbXV0ZXhfaW5pdCgmcGl0LT5waXRfc3RhdGUubG9jayk7CiAJbXV0ZXhfbG9jaygmcGl0LT5waXRfc3RhdGUubG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnBpdC0+cGl0X3N0YXRlLmluamVjdF9sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrX2luaXQoJnBpdC0+cGl0X3N0YXRlLmluamVjdF9sb2NrKTsKIAogCWt2bS0+YXJjaC52cGl0ID0gcGl0OwogCXBpdC0+a3ZtID0ga3ZtOwpAQCAtNjQ1LDEzICs2NDUsMTMgQEAKIAlrdm1fcmVnaXN0ZXJfaXJxX21hc2tfbm90aWZpZXIoa3ZtLCAwLCAmcGl0LT5tYXNrX25vdGlmaWVyKTsKIAogCWt2bV9pb2RldmljZV9pbml0KCZwaXQtPmRldiwgJnBpdF9kZXZfb3BzKTsKLQlyZXQgPSBfX2t2bV9pb19idXNfcmVnaXN0ZXJfZGV2KCZrdm0tPnBpb19idXMsICZwaXQtPmRldik7CisJcmV0ID0ga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoa3ZtLCBLVk1fUElPX0JVUywgJnBpdC0+ZGV2KTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBmYWlsOwogCiAJaWYgKGZsYWdzICYgS1ZNX1BJVF9TUEVBS0VSX0RVTU1ZKSB7CiAJCWt2bV9pb2RldmljZV9pbml0KCZwaXQtPnNwZWFrZXJfZGV2LCAmc3BlYWtlcl9kZXZfb3BzKTsKLQkJcmV0ID0gX19rdm1faW9fYnVzX3JlZ2lzdGVyX2Rldigma3ZtLT5waW9fYnVzLAorCQlyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sIEtWTV9QSU9fQlVTLAogCQkJCQkJJnBpdC0+c3BlYWtlcl9kZXYpOwogCQlpZiAocmV0IDwgMCkKIAkJCWdvdG8gZmFpbF91bnJlZ2lzdGVyOwpAQCAtNjYwLDExICs2NjAsMTIgQEAKIAlyZXR1cm4gcGl0OwogCiBmYWlsX3VucmVnaXN0ZXI6Ci0JX19rdm1faW9fYnVzX3VucmVnaXN0ZXJfZGV2KCZrdm0tPnBpb19idXMsICZwaXQtPmRldik7CisJa3ZtX2lvX2J1c191bnJlZ2lzdGVyX2Rldihrdm0sIEtWTV9QSU9fQlVTLCAmcGl0LT5kZXYpOwogCiBmYWlsOgotCWlmIChwaXQtPmlycV9zb3VyY2VfaWQgPj0gMCkKLQkJa3ZtX2ZyZWVfaXJxX3NvdXJjZV9pZChrdm0sIHBpdC0+aXJxX3NvdXJjZV9pZCk7CisJa3ZtX3VucmVnaXN0ZXJfaXJxX21hc2tfbm90aWZpZXIoa3ZtLCAwLCAmcGl0LT5tYXNrX25vdGlmaWVyKTsKKwlrdm1fdW5yZWdpc3Rlcl9pcnFfYWNrX25vdGlmaWVyKGt2bSwgJnBpdF9zdGF0ZS0+aXJxX2Fja19ub3RpZmllcik7CisJa3ZtX2ZyZWVfaXJxX3NvdXJjZV9pZChrdm0sIHBpdC0+aXJxX3NvdXJjZV9pZCk7CiAKIAlrZnJlZShwaXQpOwogCXJldHVybiBOVUxMOwpAQCAtNzIzLDEyICs3MjQsMTIgQEAKIAkJLyogVHJ5IHRvIGluamVjdCBwZW5kaW5nIGludGVycnVwdHMgd2hlbgogCQkgKiBsYXN0IG9uZSBoYXMgYmVlbiBhY2tlZC4KIAkJICovCi0JCXNwaW5fbG9jaygmcHMtPmluamVjdF9sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmcHMtPmluamVjdF9sb2NrKTsKIAkJaWYgKGF0b21pY19yZWFkKCZwcy0+cGl0X3RpbWVyLnBlbmRpbmcpICYmIHBzLT5pcnFfYWNrKSB7CiAJCQlwcy0+aXJxX2FjayA9IDA7CiAJCQlpbmplY3QgPSAxOwogCQl9Ci0JCXNwaW5fdW5sb2NrKCZwcy0+aW5qZWN0X2xvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJnBzLT5pbmplY3RfbG9jayk7CiAJCWlmIChpbmplY3QpCiAJCQlfX2luamVjdF9waXRfdGltZXJfaW50cihrdm0pOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9pODI1NC5oIGIvYXJjaC94ODYva3ZtL2k4MjU0LmgKaW5kZXggZDRjMWM3Zi4uOTAwZDZiMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2k4MjU0LmgKKysrIGIvYXJjaC94ODYva3ZtL2k4MjU0LmgKQEAgLTI3LDcgKzI3LDcgQEAKIAl1MzIgICAgc3BlYWtlcl9kYXRhX29uOwogCXN0cnVjdCBtdXRleCBsb2NrOwogCXN0cnVjdCBrdm1fcGl0ICpwaXQ7Ci0Jc3BpbmxvY2tfdCBpbmplY3RfbG9jazsKKwlyYXdfc3BpbmxvY2tfdCBpbmplY3RfbG9jazsKIAl1bnNpZ25lZCBsb25nIGlycV9hY2s7CiAJc3RydWN0IGt2bV9pcnFfYWNrX25vdGlmaWVyIGlycV9hY2tfbm90aWZpZXI7CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2k4MjU5LmMgYi9hcmNoL3g4Ni9rdm0vaTgyNTkuYwppbmRleCBkMDU3YzBjLi4wNzc3MWRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaTgyNTkuYworKysgYi9hcmNoL3g4Ni9rdm0vaTgyNTkuYwpAQCAtNDQsMTggKzQ0LDE5IEBACiAJICogT3RoZXIgaW50ZXJydXB0IG1heSBiZSBkZWxpdmVyZWQgdG8gUElDIHdoaWxlIGxvY2sgaXMgZHJvcHBlZCBidXQKIAkgKiBpdCBzaG91bGQgYmUgc2FmZSBzaW5jZSBQSUMgc3RhdGUgaXMgYWxyZWFkeSB1cGRhdGVkIGF0IHRoaXMgc3RhZ2UuCiAJICovCi0Jc3Bpbl91bmxvY2soJnMtPnBpY3Nfc3RhdGUtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmcy0+cGljc19zdGF0ZS0+bG9jayk7CiAJa3ZtX25vdGlmeV9hY2tlZF9pcnEocy0+cGljc19zdGF0ZS0+a3ZtLCBTRUxFQ1RfUElDKGlycSksIGlycSk7Ci0Jc3Bpbl9sb2NrKCZzLT5waWNzX3N0YXRlLT5sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZzLT5waWNzX3N0YXRlLT5sb2NrKTsKIH0KIAogdm9pZCBrdm1fcGljX2NsZWFyX2lzcl9hY2soc3RydWN0IGt2bSAqa3ZtKQogewogCXN0cnVjdCBrdm1fcGljICpzID0gcGljX2lycWNoaXAoa3ZtKTsKLQlzcGluX2xvY2soJnMtPmxvY2spOworCisJcmF3X3NwaW5fbG9jaygmcy0+bG9jayk7CiAJcy0+cGljc1swXS5pc3JfYWNrID0gMHhmZjsKIAlzLT5waWNzWzFdLmlzcl9hY2sgPSAweGZmOwotCXNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnMtPmxvY2spOwogfQogCiAvKgpAQCAtMTU2LDkgKzE1Nyw5IEBACiAKIHZvaWQga3ZtX3BpY191cGRhdGVfaXJxKHN0cnVjdCBrdm1fcGljICpzKQogewotCXNwaW5fbG9jaygmcy0+bG9jayk7CisJcmF3X3NwaW5fbG9jaygmcy0+bG9jayk7CiAJcGljX3VwZGF0ZV9pcnEocyk7Ci0Jc3Bpbl91bmxvY2soJnMtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmcy0+bG9jayk7CiB9CiAKIGludCBrdm1fcGljX3NldF9pcnEodm9pZCAqb3BhcXVlLCBpbnQgaXJxLCBpbnQgbGV2ZWwpCkBAIC0xNjYsMTQgKzE2NywxNCBAQAogCXN0cnVjdCBrdm1fcGljICpzID0gb3BhcXVlOwogCWludCByZXQgPSAtMTsKIAotCXNwaW5fbG9jaygmcy0+bG9jayk7CisJcmF3X3NwaW5fbG9jaygmcy0+bG9jayk7CiAJaWYgKGlycSA+PSAwICYmIGlycSA8IFBJQ19OVU1fUElOUykgewogCQlyZXQgPSBwaWNfc2V0X2lycTEoJnMtPnBpY3NbaXJxID4+IDNdLCBpcnEgJiA3LCBsZXZlbCk7CiAJCXBpY191cGRhdGVfaXJxKHMpOwogCQl0cmFjZV9rdm1fcGljX3NldF9pcnEoaXJxID4+IDMsIGlycSAmIDcsIHMtPnBpY3NbaXJxID4+IDNdLmVsY3IsCiAJCQkJICAgICAgcy0+cGljc1tpcnEgPj4gM10uaW1yLCByZXQgPT0gMCk7CiAJfQotCXNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnMtPmxvY2spOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTIwMyw3ICsyMDQsNyBAQAogCWludCBpcnEsIGlycTIsIGludG5vOwogCXN0cnVjdCBrdm1fcGljICpzID0gcGljX2lycWNoaXAoa3ZtKTsKIAotCXNwaW5fbG9jaygmcy0+bG9jayk7CisJcmF3X3NwaW5fbG9jaygmcy0+bG9jayk7CiAJaXJxID0gcGljX2dldF9pcnEoJnMtPnBpY3NbMF0pOwogCWlmIChpcnEgPj0gMCkgewogCQlwaWNfaW50YWNrKCZzLT5waWNzWzBdLCBpcnEpOwpAQCAtMjI4LDcgKzIyOSw3IEBACiAJCWludG5vID0gcy0+cGljc1swXS5pcnFfYmFzZSArIGlycTsKIAl9CiAJcGljX3VwZGF0ZV9pcnEocyk7Ci0Jc3Bpbl91bmxvY2soJnMtPmxvY2spOworCXJhd19zcGluX3VubG9jaygmcy0+bG9jayk7CiAKIAlyZXR1cm4gaW50bm87CiB9CkBAIC00NDIsNyArNDQzLDcgQEAKIAkJCXByaW50ayhLRVJOX0VSUiAiUElDOiBub24gYnl0ZSB3cml0ZVxuIik7CiAJCXJldHVybiAwOwogCX0KLQlzcGluX2xvY2soJnMtPmxvY2spOworCXJhd19zcGluX2xvY2soJnMtPmxvY2spOwogCXN3aXRjaCAoYWRkcikgewogCWNhc2UgMHgyMDoKIAljYXNlIDB4MjE6CkBAIC00NTUsNyArNDU2LDcgQEAKIAkJZWxjcl9pb3BvcnRfd3JpdGUoJnMtPnBpY3NbYWRkciAmIDFdLCBhZGRyLCBkYXRhKTsKIAkJYnJlYWs7CiAJfQotCXNwaW5fdW5sb2NrKCZzLT5sb2NrKTsKKwlyYXdfc3Bpbl91bmxvY2soJnMtPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC00NzIsNyArNDczLDcgQEAKIAkJCXByaW50ayhLRVJOX0VSUiAiUElDOiBub24gYnl0ZSByZWFkXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQotCXNwaW5fbG9jaygmcy0+bG9jayk7CisJcmF3X3NwaW5fbG9jaygmcy0+bG9jayk7CiAJc3dpdGNoIChhZGRyKSB7CiAJY2FzZSAweDIwOgogCWNhc2UgMHgyMToKQEAgLTQ4Niw3ICs0ODcsNyBAQAogCQlicmVhazsKIAl9CiAJKih1bnNpZ25lZCBjaGFyICopdmFsID0gZGF0YTsKLQlzcGluX3VubG9jaygmcy0+bG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZzLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTIwLDcgKzUyMSw3IEBACiAJcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1fcGljKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzKQogCQlyZXR1cm4gTlVMTDsKLQlzcGluX2xvY2tfaW5pdCgmcy0+bG9jayk7CisJcmF3X3NwaW5fbG9ja19pbml0KCZzLT5sb2NrKTsKIAlzLT5rdm0gPSBrdm07CiAJcy0+cGljc1swXS5lbGNyX21hc2sgPSAweGY4OwogCXMtPnBpY3NbMV0uZWxjcl9tYXNrID0gMHhkZTsKQEAgLTUzMyw3ICs1MzQsOSBAQAogCSAqIEluaXRpYWxpemUgUElPIGRldmljZQogCSAqLwogCWt2bV9pb2RldmljZV9pbml0KCZzLT5kZXYsICZwaWNkZXZfb3BzKTsKLQlyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sICZrdm0tPnBpb19idXMsICZzLT5kZXYpOworCW11dGV4X2xvY2soJmt2bS0+c2xvdHNfbG9jayk7CisJcmV0ID0ga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoa3ZtLCBLVk1fUElPX0JVUywgJnMtPmRldik7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPnNsb3RzX2xvY2spOwogCWlmIChyZXQgPCAwKSB7CiAJCWtmcmVlKHMpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTU0MSwzICs1NDQsMTQgQEAKIAogCXJldHVybiBzOwogfQorCit2b2lkIGt2bV9kZXN0cm95X3BpYyhzdHJ1Y3Qga3ZtICprdm0pCit7CisJc3RydWN0IGt2bV9waWMgKnZwaWMgPSBrdm0tPmFyY2gudnBpYzsKKworCWlmICh2cGljKSB7CisJCWt2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYoa3ZtLCBLVk1fUElPX0JVUywgJnZwaWMtPmRldik7CisJCWt2bS0+YXJjaC52cGljID0gTlVMTDsKKwkJa2ZyZWUodnBpYyk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2lycS5oIGIvYXJjaC94ODYva3ZtL2lycS5oCmluZGV4IGJlMzk5ZTIuLjM0YjE1OTE1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaXJxLmgKKysrIGIvYXJjaC94ODYva3ZtL2lycS5oCkBAIC02Miw3ICs2Miw3IEBACiB9OwogCiBzdHJ1Y3Qga3ZtX3BpYyB7Ci0Jc3BpbmxvY2tfdCBsb2NrOworCXJhd19zcGlubG9ja190IGxvY2s7CiAJdW5zaWduZWQgcGVuZGluZ19hY2tzOwogCXN0cnVjdCBrdm0gKmt2bTsKIAlzdHJ1Y3Qga3ZtX2twaWNfc3RhdGUgcGljc1syXTsgLyogMCBpcyBtYXN0ZXIgcGljLCAxIGlzIHNsYXZlIHBpYyAqLwpAQCAtNzUsNiArNzUsNyBAQAogfTsKIAogc3RydWN0IGt2bV9waWMgKmt2bV9jcmVhdGVfcGljKHN0cnVjdCBrdm0gKmt2bSk7Cit2b2lkIGt2bV9kZXN0cm95X3BpYyhzdHJ1Y3Qga3ZtICprdm0pOwogaW50IGt2bV9waWNfcmVhZF9pcnEoc3RydWN0IGt2bSAqa3ZtKTsKIHZvaWQga3ZtX3BpY191cGRhdGVfaXJxKHN0cnVjdCBrdm1fcGljICpzKTsKIHZvaWQga3ZtX3BpY19jbGVhcl9pc3JfYWNrKHN0cnVjdCBrdm0gKmt2bSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0va3ZtX2NhY2hlX3JlZ3MuaCBiL2FyY2gveDg2L2t2bS9rdm1fY2FjaGVfcmVncy5oCmluZGV4IDdiY2M1YjYuLmNmZjg1MWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9rdm1fY2FjaGVfcmVncy5oCisrKyBiL2FyY2gveDg2L2t2bS9rdm1fY2FjaGVfcmVncy5oCkBAIC0xLDYgKzEsMTEgQEAKICNpZm5kZWYgQVNNX0tWTV9DQUNIRV9SRUdTX0gKICNkZWZpbmUgQVNNX0tWTV9DQUNIRV9SRUdTX0gKIAorI2RlZmluZSBLVk1fUE9TU0lCTEVfQ1IwX0dVRVNUX0JJVFMgWDg2X0NSMF9UUworI2RlZmluZSBLVk1fUE9TU0lCTEVfQ1I0X0dVRVNUX0JJVFMJCQkJICBcCisJKFg4Nl9DUjRfUFZJIHwgWDg2X0NSNF9ERSB8IFg4Nl9DUjRfUENFIHwgWDg2X0NSNF9PU0ZYU1IgIFwKKwkgfCBYODZfQ1I0X09TWE1NRVhDUFQgfCBYODZfQ1I0X1BHRSkKKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGt2bV9yZWdpc3Rlcl9yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCQkJICAgICAgZW51bSBrdm1fcmVnIHJlZykKIHsKQEAgLTM4LDQgKzQzLDMwIEBACiAJcmV0dXJuIHZjcHUtPmFyY2gucGRwdHJzW2luZGV4XTsKIH0KIAorc3RhdGljIGlubGluZSB1bG9uZyBrdm1fcmVhZF9jcjBfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nIG1hc2spCit7CisJdWxvbmcgdG1hc2sgPSBtYXNrICYgS1ZNX1BPU1NJQkxFX0NSMF9HVUVTVF9CSVRTOworCWlmICh0bWFzayAmIHZjcHUtPmFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMpCisJCWt2bV94ODZfb3BzLT5kZWNhY2hlX2NyMF9ndWVzdF9iaXRzKHZjcHUpOworCXJldHVybiB2Y3B1LT5hcmNoLmNyMCAmIG1hc2s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWxvbmcga3ZtX3JlYWRfY3IwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlyZXR1cm4ga3ZtX3JlYWRfY3IwX2JpdHModmNwdSwgfjBVTCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWxvbmcga3ZtX3JlYWRfY3I0X2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyBtYXNrKQoreworCXVsb25nIHRtYXNrID0gbWFzayAmIEtWTV9QT1NTSUJMRV9DUjRfR1VFU1RfQklUUzsKKwlpZiAodG1hc2sgJiB2Y3B1LT5hcmNoLmNyNF9ndWVzdF9vd25lZF9iaXRzKQorCQlrdm1feDg2X29wcy0+ZGVjYWNoZV9jcjRfZ3Vlc3RfYml0cyh2Y3B1KTsKKwlyZXR1cm4gdmNwdS0+YXJjaC5jcjQgJiBtYXNrOworfQorCitzdGF0aWMgaW5saW5lIHVsb25nIGt2bV9yZWFkX2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIGt2bV9yZWFkX2NyNF9iaXRzKHZjcHUsIH4wVUwpOworfQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9sYXBpYy5jIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKaW5kZXggYmE4YzA0NS4uNGIyMjRmOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL2xhcGljLmMKKysrIGIvYXJjaC94ODYva3ZtL2xhcGljLmMKQEAgLTEyNDYsMyArMTI0NiwzNCBAQAogCiAJcmV0dXJuIDA7CiB9CisKK2ludCBrdm1faHZfdmFwaWNfbXNyX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHJlZywgdTY0IGRhdGEpCit7CisJc3RydWN0IGt2bV9sYXBpYyAqYXBpYyA9IHZjcHUtPmFyY2guYXBpYzsKKworCWlmICghaXJxY2hpcF9pbl9rZXJuZWwodmNwdS0+a3ZtKSkKKwkJcmV0dXJuIDE7CisKKwkvKiBpZiB0aGlzIGlzIElDUiB3cml0ZSB2ZWN0b3IgYmVmb3JlIGNvbW1hbmQgKi8KKwlpZiAocmVnID09IEFQSUNfSUNSKQorCQlhcGljX3JlZ193cml0ZShhcGljLCBBUElDX0lDUjIsICh1MzIpKGRhdGEgPj4gMzIpKTsKKwlyZXR1cm4gYXBpY19yZWdfd3JpdGUoYXBpYywgcmVnLCAodTMyKWRhdGEpOworfQorCitpbnQga3ZtX2h2X3ZhcGljX21zcl9yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHJlZywgdTY0ICpkYXRhKQoreworCXN0cnVjdCBrdm1fbGFwaWMgKmFwaWMgPSB2Y3B1LT5hcmNoLmFwaWM7CisJdTMyIGxvdywgaGlnaCA9IDA7CisKKwlpZiAoIWlycWNoaXBfaW5fa2VybmVsKHZjcHUtPmt2bSkpCisJCXJldHVybiAxOworCisJaWYgKGFwaWNfcmVnX3JlYWQoYXBpYywgcmVnLCA0LCAmbG93KSkKKwkJcmV0dXJuIDE7CisJaWYgKHJlZyA9PSBBUElDX0lDUikKKwkJYXBpY19yZWdfcmVhZChhcGljLCBBUElDX0lDUjIsIDQsICZoaWdoKTsKKworCSpkYXRhID0gKCgodTY0KWhpZ2gpIDw8IDMyKSB8IGxvdzsKKworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2xhcGljLmggYi9hcmNoL3g4Ni9rdm0vbGFwaWMuaAppbmRleCA0MDAxMGIwLi5mNWZlMzJjIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbGFwaWMuaAorKysgYi9hcmNoL3g4Ni9rdm0vbGFwaWMuaApAQCAtNDgsNCArNDgsMTIgQEAKIAogaW50IGt2bV94MmFwaWNfbXNyX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEpOwogaW50IGt2bV94MmFwaWNfbXNyX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgKmRhdGEpOworCitpbnQga3ZtX2h2X3ZhcGljX21zcl93cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhKTsKK2ludCBrdm1faHZfdmFwaWNfbXNyX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgKmRhdGEpOworCitzdGF0aWMgaW5saW5lIGJvb2wga3ZtX2h2X3ZhcGljX2Fzc2lzdF9wYWdlX2VuYWJsZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiB2Y3B1LT5hcmNoLmh2X3ZhcGljICYgSFZfWDY0X01TUl9BUElDX0FTU0lTVF9QQUdFX0VOQUJMRTsKK30KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL21tdS5jIGIvYXJjaC94ODYva3ZtL21tdS5jCmluZGV4IDg5YTQ5ZmIuLjc0MTM3M2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9tbXUuYworKysgYi9hcmNoL3g4Ni9rdm0vbW11LmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqLwogCiAjaW5jbHVkZSAibW11LmgiCisjaW5jbHVkZSAieDg2LmgiCiAjaW5jbHVkZSAia3ZtX2NhY2hlX3JlZ3MuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CkBAIC0yOSw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L2h1Z2V0bGIuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NyY3UuaD4KIAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2NtcHhjaGcuaD4KQEAgLTEzNiwxNiArMTM4LDYgQEAKICNkZWZpbmUgUFQ2NF9QRVJNX01BU0sgKFBUX1BSRVNFTlRfTUFTSyB8IFBUX1dSSVRBQkxFX01BU0sgfCBQVF9VU0VSX01BU0sgXAogCQkJfCBQVDY0X05YX01BU0spCiAKLSNkZWZpbmUgUEZFUlJfUFJFU0VOVF9NQVNLICgxVSA8PCAwKQotI2RlZmluZSBQRkVSUl9XUklURV9NQVNLICgxVSA8PCAxKQotI2RlZmluZSBQRkVSUl9VU0VSX01BU0sgKDFVIDw8IDIpCi0jZGVmaW5lIFBGRVJSX1JTVkRfTUFTSyAoMVUgPDwgMykKLSNkZWZpbmUgUEZFUlJfRkVUQ0hfTUFTSyAoMVUgPDwgNCkKLQotI2RlZmluZSBQVF9QRFBFX0xFVkVMIDMKLSNkZWZpbmUgUFRfRElSRUNUT1JZX0xFVkVMIDIKLSNkZWZpbmUgUFRfUEFHRV9UQUJMRV9MRVZFTCAxCi0KICNkZWZpbmUgUk1BUF9FWFQgNAogCiAjZGVmaW5lIEFDQ19FWEVDX01BU0sgICAgMQpAQCAtMTUzLDYgKzE0NSw5IEBACiAjZGVmaW5lIEFDQ19VU0VSX01BU0sgICAgUFRfVVNFUl9NQVNLCiAjZGVmaW5lIEFDQ19BTEwgICAgICAgICAgKEFDQ19FWEVDX01BU0sgfCBBQ0NfV1JJVEVfTUFTSyB8IEFDQ19VU0VSX01BU0spCiAKKyNpbmNsdWRlIDx0cmFjZS9ldmVudHMva3ZtLmg+CisKKyN1bmRlZiBUUkFDRV9JTkNMVURFX0ZJTEUKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgIm1tdXRyYWNlLmgiCiAKQEAgLTIyOSw3ICsyMjQsNyBAQAogCiBzdGF0aWMgaW50IGlzX3dyaXRlX3Byb3RlY3Rpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCXJldHVybiB2Y3B1LT5hcmNoLmNyMCAmIFg4Nl9DUjBfV1A7CisJcmV0dXJuIGt2bV9yZWFkX2NyMF9iaXRzKHZjcHUsIFg4Nl9DUjBfV1ApOwogfQogCiBzdGF0aWMgaW50IGlzX2NwdWlkX1BTRTM2KHZvaWQpCkBAIC0yMzksNyArMjM0LDcgQEAKIAogc3RhdGljIGludCBpc19ueChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7Ci0JcmV0dXJuIHZjcHUtPmFyY2guc2hhZG93X2VmZXIgJiBFRkVSX05YOworCXJldHVybiB2Y3B1LT5hcmNoLmVmZXIgJiBFRkVSX05YOwogfQogCiBzdGF0aWMgaW50IGlzX3NoYWRvd19wcmVzZW50X3B0ZSh1NjQgcHRlKQpAQCAtMjUzLDcgKzI0OCw3IEBACiAJcmV0dXJuIHB0ZSAmIFBUX1BBR0VfU0laRV9NQVNLOwogfQogCi1zdGF0aWMgaW50IGlzX3dyaXRlYmxlX3B0ZSh1bnNpZ25lZCBsb25nIHB0ZSkKK3N0YXRpYyBpbnQgaXNfd3JpdGFibGVfcHRlKHVuc2lnbmVkIGxvbmcgcHRlKQogewogCXJldHVybiBwdGUgJiBQVF9XUklUQUJMRV9NQVNLOwogfQpAQCAtNDcwLDI0ICs0NjUsMTAgQEAKIAogc3RhdGljIGludCBob3N0X21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCiB7Ci0JdW5zaWduZWQgbG9uZyBwYWdlX3NpemUgPSBQQUdFX1NJWkU7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0JdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgcGFnZV9zaXplOwogCWludCBpLCByZXQgPSAwOwogCi0JYWRkciA9IGdmbl90b19odmEoa3ZtLCBnZm4pOwotCWlmIChrdm1faXNfZXJyb3JfaHZhKGFkZHIpKQotCQlyZXR1cm4gUFRfUEFHRV9UQUJMRV9MRVZFTDsKLQotCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQl2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgYWRkcik7Ci0JaWYgKCF2bWEpCi0JCWdvdG8gb3V0OwotCi0JcGFnZV9zaXplID0gdm1hX2tlcm5lbF9wYWdlc2l6ZSh2bWEpOwotCi1vdXQ6Ci0JdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlwYWdlX3NpemUgPSBrdm1faG9zdF9wYWdlX3NpemUoa3ZtLCBnZm4pOwogCiAJZm9yIChpID0gUFRfUEFHRV9UQUJMRV9MRVZFTDsKIAkgICAgIGkgPCAoUFRfUEFHRV9UQUJMRV9MRVZFTCArIEtWTV9OUl9QQUdFX1NJWkVTKTsgKytpKSB7CkBAIC01MDMsOCArNDg0LDcgQEAKIHN0YXRpYyBpbnQgbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGxhcmdlX2dmbikKIHsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90OwotCWludCBob3N0X2xldmVsOwotCWludCBsZXZlbCA9IFBUX1BBR0VfVEFCTEVfTEVWRUw7CisJaW50IGhvc3RfbGV2ZWwsIGxldmVsLCBtYXhfbGV2ZWw7CiAKIAlzbG90ID0gZ2ZuX3RvX21lbXNsb3QodmNwdS0+a3ZtLCBsYXJnZV9nZm4pOwogCWlmIChzbG90ICYmIHNsb3QtPmRpcnR5X2JpdG1hcCkKQEAgLTUxNSw3ICs0OTUsMTAgQEAKIAlpZiAoaG9zdF9sZXZlbCA9PSBQVF9QQUdFX1RBQkxFX0xFVkVMKQogCQlyZXR1cm4gaG9zdF9sZXZlbDsKIAotCWZvciAobGV2ZWwgPSBQVF9ESVJFQ1RPUllfTEVWRUw7IGxldmVsIDw9IGhvc3RfbGV2ZWw7ICsrbGV2ZWwpCisJbWF4X2xldmVsID0ga3ZtX3g4Nl9vcHMtPmdldF9scGFnZV9sZXZlbCgpIDwgaG9zdF9sZXZlbCA/CisJCWt2bV94ODZfb3BzLT5nZXRfbHBhZ2VfbGV2ZWwoKSA6IGhvc3RfbGV2ZWw7CisKKwlmb3IgKGxldmVsID0gUFRfRElSRUNUT1JZX0xFVkVMOyBsZXZlbCA8PSBtYXhfbGV2ZWw7ICsrbGV2ZWwpCiAJCWlmIChoYXNfd3Jwcm90ZWN0ZWRfcGFnZSh2Y3B1LT5rdm0sIGxhcmdlX2dmbiwgbGV2ZWwpKQogCQkJYnJlYWs7CiAKQEAgLTYzMyw3ICs2MTYsNyBAQAogCXBmbiA9IHNwdGVfdG9fcGZuKCpzcHRlKTsKIAlpZiAoKnNwdGUgJiBzaGFkb3dfYWNjZXNzZWRfbWFzaykKIAkJa3ZtX3NldF9wZm5fYWNjZXNzZWQocGZuKTsKLQlpZiAoaXNfd3JpdGVibGVfcHRlKCpzcHRlKSkKKwlpZiAoaXNfd3JpdGFibGVfcHRlKCpzcHRlKSkKIAkJa3ZtX3NldF9wZm5fZGlydHkocGZuKTsKIAlybWFwcCA9IGdmbl90b19ybWFwKGt2bSwgc3AtPmdmbnNbc3B0ZSAtIHNwLT5zcHRdLCBzcC0+cm9sZS5sZXZlbCk7CiAJaWYgKCEqcm1hcHApIHsKQEAgLTY2Miw2ICs2NDUsNyBAQAogCQkJcHJldl9kZXNjID0gZGVzYzsKIAkJCWRlc2MgPSBkZXNjLT5tb3JlOwogCQl9CisJCXByX2Vycigicm1hcF9yZW1vdmU6ICVwICVsbHggbWFueS0+bWFueVxuIiwgc3B0ZSwgKnNwdGUpOwogCQlCVUcoKTsKIAl9CiB9CkBAIC03MDgsNyArNjkyLDcgQEAKIAkJQlVHX09OKCFzcHRlKTsKIAkJQlVHX09OKCEoKnNwdGUgJiBQVF9QUkVTRU5UX01BU0spKTsKIAkJcm1hcF9wcmludGsoInJtYXBfd3JpdGVfcHJvdGVjdDogc3B0ZSAlcCAlbGx4XG4iLCBzcHRlLCAqc3B0ZSk7Ci0JCWlmIChpc193cml0ZWJsZV9wdGUoKnNwdGUpKSB7CisJCWlmIChpc193cml0YWJsZV9wdGUoKnNwdGUpKSB7CiAJCQlfX3NldF9zcHRlKHNwdGUsICpzcHRlICYgflBUX1dSSVRBQkxFX01BU0spOwogCQkJd3JpdGVfcHJvdGVjdGVkID0gMTsKIAkJfQpAQCAtNzMyLDcgKzcxNiw3IEBACiAJCQlCVUdfT04oISgqc3B0ZSAmIFBUX1BSRVNFTlRfTUFTSykpOwogCQkJQlVHX09OKCgqc3B0ZSAmIChQVF9QQUdFX1NJWkVfTUFTS3xQVF9QUkVTRU5UX01BU0spKSAhPSAoUFRfUEFHRV9TSVpFX01BU0t8UFRfUFJFU0VOVF9NQVNLKSk7CiAJCQlwZ3ByaW50aygicm1hcF93cml0ZV9wcm90ZWN0KGxhcmdlKTogc3B0ZSAlcCAlbGx4ICVsbGRcbiIsIHNwdGUsICpzcHRlLCBnZm4pOwotCQkJaWYgKGlzX3dyaXRlYmxlX3B0ZSgqc3B0ZSkpIHsKKwkJCWlmIChpc193cml0YWJsZV9wdGUoKnNwdGUpKSB7CiAJCQkJcm1hcF9yZW1vdmUoa3ZtLCBzcHRlKTsKIAkJCQktLWt2bS0+c3RhdC5scGFnZXM7CiAJCQkJX19zZXRfc3B0ZShzcHRlLCBzaGFkb3dfdHJhcF9ub25wcmVzZW50X3B0ZSk7CkBAIC03ODcsNyArNzcxLDcgQEAKIAogCQkJbmV3X3NwdGUgJj0gflBUX1dSSVRBQkxFX01BU0s7CiAJCQluZXdfc3B0ZSAmPSB+U1BURV9IT1NUX1dSSVRFQUJMRTsKLQkJCWlmIChpc193cml0ZWJsZV9wdGUoKnNwdGUpKQorCQkJaWYgKGlzX3dyaXRhYmxlX3B0ZSgqc3B0ZSkpCiAJCQkJa3ZtX3NldF9wZm5fZGlydHkoc3B0ZV90b19wZm4oKnNwdGUpKTsKIAkJCV9fc2V0X3NwdGUoc3B0ZSwgbmV3X3NwdGUpOwogCQkJc3B0ZSA9IHJtYXBfbmV4dChrdm0sIHJtYXBwLCBzcHRlKTsKQEAgLTgwNSwzNSArNzg5LDMyIEBACiAJCQkJCSB1bnNpZ25lZCBsb25nIGRhdGEpKQogewogCWludCBpLCBqOworCWludCByZXQ7CiAJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHM7CiAKLQkvKgotCSAqIElmIG1tYXBfc2VtIGlzbid0IHRha2VuLCB3ZSBjYW4gbG9vayB0aGUgbWVtc2xvdHMgd2l0aCBvbmx5Ci0JICogdGhlIG1tdV9sb2NrIGJ5IHNraXBwaW5nIG92ZXIgdGhlIHNsb3RzIHdpdGggdXNlcnNwYWNlX2FkZHIgPT0gMC4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwga3ZtLT5ubWVtc2xvdHM7IGkrKykgewotCQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90ID0gJmt2bS0+bWVtc2xvdHNbaV07CisJc2xvdHMgPSByY3VfZGVyZWZlcmVuY2Uoa3ZtLT5tZW1zbG90cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2xvdHMtPm5tZW1zbG90czsgaSsrKSB7CisJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QgPSAmc2xvdHMtPm1lbXNsb3RzW2ldOwogCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gbWVtc2xvdC0+dXNlcnNwYWNlX2FkZHI7CiAJCXVuc2lnbmVkIGxvbmcgZW5kOwogCi0JCS8qIG1tdV9sb2NrIHByb3RlY3RzIHVzZXJzcGFjZV9hZGRyICovCi0JCWlmICghc3RhcnQpCi0JCQljb250aW51ZTsKLQogCQllbmQgPSBzdGFydCArIChtZW1zbG90LT5ucGFnZXMgPDwgUEFHRV9TSElGVCk7CiAJCWlmIChodmEgPj0gc3RhcnQgJiYgaHZhIDwgZW5kKSB7CiAJCQlnZm5fdCBnZm5fb2Zmc2V0ID0gKGh2YSAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUOwogCi0JCQlyZXR2YWwgfD0gaGFuZGxlcihrdm0sICZtZW1zbG90LT5ybWFwW2dmbl9vZmZzZXRdLAotCQkJCQkgIGRhdGEpOworCQkJcmV0ID0gaGFuZGxlcihrdm0sICZtZW1zbG90LT5ybWFwW2dmbl9vZmZzZXRdLCBkYXRhKTsKIAogCQkJZm9yIChqID0gMDsgaiA8IEtWTV9OUl9QQUdFX1NJWkVTIC0gMTsgKytqKSB7CiAJCQkJaW50IGlkeCA9IGdmbl9vZmZzZXQ7CiAJCQkJaWR4IC89IEtWTV9QQUdFU19QRVJfSFBBR0UoUFRfRElSRUNUT1JZX0xFVkVMICsgaik7Ci0JCQkJcmV0dmFsIHw9IGhhbmRsZXIoa3ZtLAorCQkJCXJldCB8PSBoYW5kbGVyKGt2bSwKIAkJCQkJJm1lbXNsb3QtPmxwYWdlX2luZm9bal1baWR4XS5ybWFwX3BkZSwKIAkJCQkJZGF0YSk7CiAJCQl9CisJCQl0cmFjZV9rdm1fYWdlX3BhZ2UoaHZhLCBtZW1zbG90LCByZXQpOworCQkJcmV0dmFsIHw9IHJldDsKIAkJfQogCX0KIApAQCAtODU2LDkgKzgzNywxNSBAQAogCXU2NCAqc3B0ZTsKIAlpbnQgeW91bmcgPSAwOwogCi0JLyogYWx3YXlzIHJldHVybiBvbGQgZm9yIEVQVCAqLworCS8qCisJICogRW11bGF0ZSB0aGUgYWNjZXNzZWQgYml0IGZvciBFUFQsIGJ5IGNoZWNraW5nIGlmIHRoaXMgcGFnZSBoYXMKKwkgKiBhbiBFUFQgbWFwcGluZywgYW5kIGNsZWFyaW5nIGl0IGlmIGl0IGRvZXMuIE9uIHRoZSBuZXh0IGFjY2VzcywKKwkgKiBhIG5ldyBFUFQgbWFwcGluZyB3aWxsIGJlIGVzdGFibGlzaGVkLgorCSAqIFRoaXMgaGFzIHNvbWUgb3ZlcmhlYWQsIGJ1dCBub3QgYXMgbXVjaCBhcyB0aGUgY29zdCBvZiBzd2FwcGluZworCSAqIG91dCBhY3RpdmVseSB1c2VkIHBhZ2VzIG9yIGJyZWFraW5nIHVwIGFjdGl2ZWx5IHVzZWQgaHVnZXBhZ2VzLgorCSAqLwogCWlmICghc2hhZG93X2FjY2Vzc2VkX21hc2spCi0JCXJldHVybiAwOworCQlyZXR1cm4ga3ZtX3VubWFwX3JtYXBwKGt2bSwgcm1hcHAsIGRhdGEpOwogCiAJc3B0ZSA9IHJtYXBfbmV4dChrdm0sIHJtYXBwLCBOVUxMKTsKIAl3aGlsZSAoc3B0ZSkgewpAQCAtMTYxNSw3ICsxNjAyLDcgQEAKIAogc3RhdGljIHZvaWQgcGFnZV9oZWFkZXJfdXBkYXRlX3Nsb3Qoc3RydWN0IGt2bSAqa3ZtLCB2b2lkICpwdGUsIGdmbl90IGdmbikKIHsKLQlpbnQgc2xvdCA9IG1lbXNsb3RfaWQoa3ZtLCBnZm5fdG9fbWVtc2xvdChrdm0sIGdmbikpOworCWludCBzbG90ID0gbWVtc2xvdF9pZChrdm0sIGdmbik7CiAJc3RydWN0IGt2bV9tbXVfcGFnZSAqc3AgPSBwYWdlX2hlYWRlcihfX3BhKHB0ZSkpOwogCiAJX19zZXRfYml0KHNsb3QsIHNwLT5zbG90X2JpdG1hcCk7CkBAIC0xNjM5LDcgKzE2MjYsNyBAQAogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCi0JZ3BhX3QgZ3BhID0gdmNwdS0+YXJjaC5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBndmEpOworCWdwYV90IGdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV9yZWFkKHZjcHUsIGd2YSwgTlVMTCk7CiAKIAlpZiAoZ3BhID09IFVOTUFQUEVEX0dWQSkKIAkJcmV0dXJuIE5VTEw7CkBAIC0xODUyLDcgKzE4MzksNyBAQAogCQkgKiBpcyByZXNwb25zaWJpbGl0eSBvZiBtbXVfZ2V0X3BhZ2UgLyBrdm1fc3luY19wYWdlLgogCQkgKiBTYW1lIHJlYXNvbmluZyBjYW4gYmUgYXBwbGllZCB0byBkaXJ0eSBwYWdlIGFjY291bnRpbmcuCiAJCSAqLwotCQlpZiAoIWNhbl91bnN5bmMgJiYgaXNfd3JpdGVibGVfcHRlKCpzcHRlcCkpCisJCWlmICghY2FuX3Vuc3luYyAmJiBpc193cml0YWJsZV9wdGUoKnNwdGVwKSkKIAkJCWdvdG8gc2V0X3B0ZTsKIAogCQlpZiAobW11X25lZWRfd3JpdGVfcHJvdGVjdCh2Y3B1LCBnZm4sIGNhbl91bnN5bmMpKSB7CkBAIC0xODYwLDcgKzE4NDcsNyBAQAogCQkJCSBfX2Z1bmNfXywgZ2ZuKTsKIAkJCXJldCA9IDE7CiAJCQlwdGVfYWNjZXNzICY9IH5BQ0NfV1JJVEVfTUFTSzsKLQkJCWlmIChpc193cml0ZWJsZV9wdGUoc3B0ZSkpCisJCQlpZiAoaXNfd3JpdGFibGVfcHRlKHNwdGUpKQogCQkJCXNwdGUgJj0gflBUX1dSSVRBQkxFX01BU0s7CiAJCX0KIAl9CkBAIC0xODgxLDcgKzE4NjgsNyBAQAogCQkJIGJvb2wgcmVzZXRfaG9zdF9wcm90ZWN0aW9uKQogewogCWludCB3YXNfcm1hcHBlZCA9IDA7Ci0JaW50IHdhc193cml0ZWJsZSA9IGlzX3dyaXRlYmxlX3B0ZSgqc3B0ZXApOworCWludCB3YXNfd3JpdGFibGUgPSBpc193cml0YWJsZV9wdGUoKnNwdGVwKTsKIAlpbnQgcm1hcF9jb3VudDsKIAogCXBncHJpbnRrKCIlczogc3B0ZSAlbGx4IGFjY2VzcyAleCB3cml0ZV9mYXVsdCAlZCIKQEAgLTE5MzIsNyArMTkxOSw3IEBACiAJCWlmIChybWFwX2NvdW50ID4gUk1BUF9SRUNZQ0xFX1RIUkVTSE9MRCkKIAkJCXJtYXBfcmVjeWNsZSh2Y3B1LCBzcHRlcCwgZ2ZuKTsKIAl9IGVsc2UgewotCQlpZiAod2FzX3dyaXRlYmxlKQorCQlpZiAod2FzX3dyaXRhYmxlKQogCQkJa3ZtX3JlbGVhc2VfcGZuX2RpcnR5KHBmbik7CiAJCWVsc2UKIAkJCWt2bV9yZWxlYXNlX3Bmbl9jbGVhbihwZm4pOwpAQCAtMjE2Miw4ICsyMTQ5LDExIEBACiAJc3Bpbl91bmxvY2soJnZjcHUtPmt2bS0+bW11X2xvY2spOwogfQogCi1zdGF0aWMgZ3BhX3Qgbm9ucGFnaW5nX2d2YV90b19ncGEoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCB2YWRkcikKK3N0YXRpYyBncGFfdCBub25wYWdpbmdfZ3ZhX3RvX2dwYShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IHZhZGRyLAorCQkJCSAgdTMyIGFjY2VzcywgdTMyICplcnJvcikKIHsKKwlpZiAoZXJyb3IpCisJCSplcnJvciA9IDA7CiAJcmV0dXJuIHZhZGRyOwogfQogCkBAIC0yNzQ3LDcgKzI3MzcsNyBAQAogCWlmICh0ZHBfZW5hYmxlZCkKIAkJcmV0dXJuIDA7CiAKLQlncGEgPSB2Y3B1LT5hcmNoLm1tdS5ndmFfdG9fZ3BhKHZjcHUsIGd2YSk7CisJZ3BhID0ga3ZtX21tdV9ndmFfdG9fZ3BhX3JlYWQodmNwdSwgZ3ZhLCBOVUxMKTsKIAogCXNwaW5fbG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7CiAJciA9IGt2bV9tbXVfdW5wcm90ZWN0X3BhZ2UodmNwdS0+a3ZtLCBncGEgPj4gUEFHRV9TSElGVCk7CkBAIC0yODQ3LDE2ICsyODM3LDEzIEBACiAJICovCiAJcGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX0RNQTMyKTsKIAlpZiAoIXBhZ2UpCi0JCWdvdG8gZXJyb3JfMTsKKwkJcmV0dXJuIC1FTk9NRU07CisKIAl2Y3B1LT5hcmNoLm1tdS5wYWVfcm9vdCA9IHBhZ2VfYWRkcmVzcyhwYWdlKTsKIAlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKQogCQl2Y3B1LT5hcmNoLm1tdS5wYWVfcm9vdFtpXSA9IElOVkFMSURfUEFHRTsKIAogCXJldHVybiAwOwotCi1lcnJvcl8xOgotCWZyZWVfbW11X3BhZ2VzKHZjcHUpOwotCXJldHVybiAtRU5PTUVNOwogfQogCiBpbnQga3ZtX21tdV9jcmVhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQpAQCAtMjkzNiwxMCArMjkyMyw5IEBACiAJc3Bpbl9sb2NrKCZrdm1fbG9jayk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGt2bSwgJnZtX2xpc3QsIHZtX2xpc3QpIHsKLQkJaW50IG5wYWdlczsKKwkJaW50IG5wYWdlcywgaWR4OwogCi0JCWlmICghZG93bl9yZWFkX3RyeWxvY2soJmt2bS0+c2xvdHNfbG9jaykpCi0JCQljb250aW51ZTsKKwkJaWR4ID0gc3JjdV9yZWFkX2xvY2soJmt2bS0+c3JjdSk7CiAJCXNwaW5fbG9jaygma3ZtLT5tbXVfbG9jayk7CiAJCW5wYWdlcyA9IGt2bS0+YXJjaC5uX2FsbG9jX21tdV9wYWdlcyAtCiAJCQkga3ZtLT5hcmNoLm5fZnJlZV9tbXVfcGFnZXM7CkBAIC0yOTUyLDcgKzI5MzgsNyBAQAogCQlucl90b19zY2FuLS07CiAKIAkJc3Bpbl91bmxvY2soJmt2bS0+bW11X2xvY2spOwotCQl1cF9yZWFkKCZrdm0tPnNsb3RzX2xvY2spOworCQlzcmN1X3JlYWRfdW5sb2NrKCZrdm0tPnNyY3UsIGlkeCk7CiAJfQogCWlmIChrdm1fZnJlZWQpCiAJCWxpc3RfbW92ZV90YWlsKCZrdm1fZnJlZWQtPnZtX2xpc3QsICZ2bV9saXN0KTsKQEAgLTMwMTksOSArMzAwNSwxMSBAQAogCWludCBpOwogCXVuc2lnbmVkIGludCBucl9tbXVfcGFnZXM7CiAJdW5zaWduZWQgaW50ICBucl9wYWdlcyA9IDA7CisJc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHM7CiAKLQlmb3IgKGkgPSAwOyBpIDwga3ZtLT5ubWVtc2xvdHM7IGkrKykKLQkJbnJfcGFnZXMgKz0ga3ZtLT5tZW1zbG90c1tpXS5ucGFnZXM7CisJc2xvdHMgPSByY3VfZGVyZWZlcmVuY2Uoa3ZtLT5tZW1zbG90cyk7CisJZm9yIChpID0gMDsgaSA8IHNsb3RzLT5ubWVtc2xvdHM7IGkrKykKKwkJbnJfcGFnZXMgKz0gc2xvdHMtPm1lbXNsb3RzW2ldLm5wYWdlczsKIAogCW5yX21tdV9wYWdlcyA9IG5yX3BhZ2VzICogS1ZNX1BFUk1JTExFX01NVV9QQUdFUyAvIDEwMDA7CiAJbnJfbW11X3BhZ2VzID0gbWF4KG5yX21tdV9wYWdlcywKQEAgLTMyNDYsNyArMzIzNCw3IEBACiAJCWlmIChpc19zaGFkb3dfcHJlc2VudF9wdGUoZW50KSAmJiAhaXNfbGFzdF9zcHRlKGVudCwgbGV2ZWwpKQogCQkJYXVkaXRfbWFwcGluZ3NfcGFnZSh2Y3B1LCBlbnQsIHZhLCBsZXZlbCAtIDEpOwogCQllbHNlIHsKLQkJCWdwYV90IGdwYSA9IHZjcHUtPmFyY2gubW11Lmd2YV90b19ncGEodmNwdSwgdmEpOworCQkJZ3BhX3QgZ3BhID0ga3ZtX21tdV9ndmFfdG9fZ3BhX3JlYWQodmNwdSwgdmEsIE5VTEwpOwogCQkJZ2ZuX3QgZ2ZuID0gZ3BhID4+IFBBR0VfU0hJRlQ7CiAJCQlwZm5fdCBwZm4gPSBnZm5fdG9fcGZuKHZjcHUtPmt2bSwgZ2ZuKTsKIAkJCWhwYV90IGhwYSA9IChocGFfdClwZm4gPDwgUEFHRV9TSElGVDsKQEAgLTMyOTEsMTAgKzMyNzksMTIgQEAKIHN0YXRpYyBpbnQgY291bnRfcm1hcHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWludCBubWFwcyA9IDA7Ci0JaW50IGksIGosIGs7CisJaW50IGksIGosIGssIGlkeDsKIAorCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZrdm0tPnNyY3UpOworCXNsb3RzID0gcmN1X2RlcmVmZXJlbmNlKGt2bS0+bWVtc2xvdHMpOwogCWZvciAoaSA9IDA7IGkgPCBLVk1fTUVNT1JZX1NMT1RTOyArK2kpIHsKLQkJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbSA9ICZ2Y3B1LT5rdm0tPm1lbXNsb3RzW2ldOworCQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptID0gJnNsb3RzLT5tZW1zbG90c1tpXTsKIAkJc3RydWN0IGt2bV9ybWFwX2Rlc2MgKmQ7CiAKIAkJZm9yIChqID0gMDsgaiA8IG0tPm5wYWdlczsgKytqKSB7CkBAIC0zMzE3LDYgKzMzMDcsNyBAQAogCQkJfQogCQl9CiAJfQorCXNyY3VfcmVhZF91bmxvY2soJmt2bS0+c3JjdSwgaWR4KTsKIAlyZXR1cm4gbm1hcHM7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9tbXUuaCBiL2FyY2gveDg2L2t2bS9tbXUuaAppbmRleCA2MWExYjM4Li5iZTY2NzU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vbW11LmgKKysrIGIvYXJjaC94ODYva3ZtL21tdS5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfX0tWTV9YODZfTU1VX0gKIAogI2luY2x1ZGUgPGxpbnV4L2t2bV9ob3N0Lmg+CisjaW5jbHVkZSAia3ZtX2NhY2hlX3JlZ3MuaCIKIAogI2RlZmluZSBQVDY0X1BUX0JJVFMgOQogI2RlZmluZSBQVDY0X0VOVF9QRVJfUEFHRSAoMSA8PCBQVDY0X1BUX0JJVFMpCkBAIC0zNyw2ICszOCwxNiBAQAogI2RlZmluZSBQVDMyX1JPT1RfTEVWRUwgMgogI2RlZmluZSBQVDMyRV9ST09UX0xFVkVMIDMKIAorI2RlZmluZSBQVF9QRFBFX0xFVkVMIDMKKyNkZWZpbmUgUFRfRElSRUNUT1JZX0xFVkVMIDIKKyNkZWZpbmUgUFRfUEFHRV9UQUJMRV9MRVZFTCAxCisKKyNkZWZpbmUgUEZFUlJfUFJFU0VOVF9NQVNLICgxVSA8PCAwKQorI2RlZmluZSBQRkVSUl9XUklURV9NQVNLICgxVSA8PCAxKQorI2RlZmluZSBQRkVSUl9VU0VSX01BU0sgKDFVIDw8IDIpCisjZGVmaW5lIFBGRVJSX1JTVkRfTUFTSyAoMVUgPDwgMykKKyNkZWZpbmUgUEZFUlJfRkVUQ0hfTUFTSyAoMVUgPDwgNCkKKwogaW50IGt2bV9tbXVfZ2V0X3NwdGVfaGllcmFyY2h5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IGFkZHIsIHU2NCBzcHRlc1s0XSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fbW11X2ZyZWVfc29tZV9wYWdlcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC01MywzMCArNjQsNiBAQAogCXJldHVybiBrdm1fbW11X2xvYWQodmNwdSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX2xvbmdfbW9kZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0jaWZkZWYgQ09ORklHX1g4Nl82NAotCXJldHVybiB2Y3B1LT5hcmNoLnNoYWRvd19lZmVyICYgRUZFUl9MTUE7Ci0jZWxzZQotCXJldHVybiAwOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX3BhZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JcmV0dXJuIHZjcHUtPmFyY2guY3I0ICYgWDg2X0NSNF9QQUU7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX3BzZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JcmV0dXJuIHZjcHUtPmFyY2guY3I0ICYgWDg2X0NSNF9QU0U7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlzX3BhZ2luZyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCi17Ci0JcmV0dXJuIHZjcHUtPmFyY2guY3IwICYgWDg2X0NSMF9QRzsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgaXNfcHJlc2VudF9ncHRlKHVuc2lnbmVkIGxvbmcgcHRlKQogewogCXJldHVybiBwdGUgJiBQVF9QUkVTRU5UX01BU0s7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vcGFnaW5nX3RtcGwuaCBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCmluZGV4IGVkZTIxMzEuLjgxZWFiOWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCisrKyBiL2FyY2gveDg2L2t2bS9wYWdpbmdfdG1wbC5oCkBAIC0xNjIsNyArMTYyLDcgQEAKIAkJaWYgKHJzdmRfZmF1bHQpCiAJCQlnb3RvIGFjY2Vzc19lcnJvcjsKIAotCQlpZiAod3JpdGVfZmF1bHQgJiYgIWlzX3dyaXRlYmxlX3B0ZShwdGUpKQorCQlpZiAod3JpdGVfZmF1bHQgJiYgIWlzX3dyaXRhYmxlX3B0ZShwdGUpKQogCQkJaWYgKHVzZXJfZmF1bHQgfHwgaXNfd3JpdGVfcHJvdGVjdGlvbih2Y3B1KSkKIAkJCQlnb3RvIGFjY2Vzc19lcnJvcjsKIApAQCAtNDkwLDE4ICs0OTAsMjMgQEAKIAlzcGluX3VubG9jaygmdmNwdS0+a3ZtLT5tbXVfbG9jayk7CiB9CiAKLXN0YXRpYyBncGFfdCBGTkFNRShndmFfdG9fZ3BhKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IHZhZGRyKQorc3RhdGljIGdwYV90IEZOQU1FKGd2YV90b19ncGEpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgdmFkZHIsIHUzMiBhY2Nlc3MsCisJCQkgICAgICAgdTMyICplcnJvcikKIHsKIAlzdHJ1Y3QgZ3Vlc3Rfd2Fsa2VyIHdhbGtlcjsKIAlncGFfdCBncGEgPSBVTk1BUFBFRF9HVkE7CiAJaW50IHI7CiAKLQlyID0gRk5BTUUod2Fsa19hZGRyKSgmd2Fsa2VyLCB2Y3B1LCB2YWRkciwgMCwgMCwgMCk7CisJciA9IEZOQU1FKHdhbGtfYWRkcikoJndhbGtlciwgdmNwdSwgdmFkZHIsCisJCQkgICAgICEhKGFjY2VzcyAmIFBGRVJSX1dSSVRFX01BU0spLAorCQkJICAgICAhIShhY2Nlc3MgJiBQRkVSUl9VU0VSX01BU0spLAorCQkJICAgICAhIShhY2Nlc3MgJiBQRkVSUl9GRVRDSF9NQVNLKSk7CiAKIAlpZiAocikgewogCQlncGEgPSBnZm5fdG9fZ3BhKHdhbGtlci5nZm4pOwogCQlncGEgfD0gdmFkZHIgJiB+UEFHRV9NQVNLOwotCX0KKwl9IGVsc2UgaWYgKGVycm9yKQorCQkqZXJyb3IgPSB3YWxrZXIuZXJyb3JfY29kZTsKIAogCXJldHVybiBncGE7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vc3ZtLmMgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKaW5kZXggMWQ5YjMzOC4uNTJmNzhkZDAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9zdm0uYworKysgYi9hcmNoL3g4Ni9rdm0vc3ZtLmMKQEAgLTIzMSw3ICsyMzEsNyBAQAogCQllZmVyICY9IH5FRkVSX0xNRTsKIAogCXRvX3N2bSh2Y3B1KS0+dm1jYi0+c2F2ZS5lZmVyID0gZWZlciB8IEVGRVJfU1ZNRTsKLQl2Y3B1LT5hcmNoLnNoYWRvd19lZmVyID0gZWZlcjsKKwl2Y3B1LT5hcmNoLmVmZXIgPSBlZmVyOwogfQogCiBzdGF0aWMgdm9pZCBzdm1fcXVldWVfZXhjZXB0aW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbnIsCkBAIC01NDAsNiArNTQwLDggQEAKIAlzdHJ1Y3Qgdm1jYl9jb250cm9sX2FyZWEgKmNvbnRyb2wgPSAmc3ZtLT52bWNiLT5jb250cm9sOwogCXN0cnVjdCB2bWNiX3NhdmVfYXJlYSAqc2F2ZSA9ICZzdm0tPnZtY2ItPnNhdmU7CiAKKwlzdm0tPnZjcHUuZnB1X2FjdGl2ZSA9IDE7CisKIAljb250cm9sLT5pbnRlcmNlcHRfY3JfcmVhZCA9IAlJTlRFUkNFUFRfQ1IwX01BU0sgfAogCQkJCQlJTlRFUkNFUFRfQ1IzX01BU0sgfAogCQkJCQlJTlRFUkNFUFRfQ1I0X01BU0s7CkBAIC01NTIsMTMgKzU1NCwxOSBAQAogCWNvbnRyb2wtPmludGVyY2VwdF9kcl9yZWFkID0gCUlOVEVSQ0VQVF9EUjBfTUFTSyB8CiAJCQkJCUlOVEVSQ0VQVF9EUjFfTUFTSyB8CiAJCQkJCUlOVEVSQ0VQVF9EUjJfTUFTSyB8Ci0JCQkJCUlOVEVSQ0VQVF9EUjNfTUFTSzsKKwkJCQkJSU5URVJDRVBUX0RSM19NQVNLIHwKKwkJCQkJSU5URVJDRVBUX0RSNF9NQVNLIHwKKwkJCQkJSU5URVJDRVBUX0RSNV9NQVNLIHwKKwkJCQkJSU5URVJDRVBUX0RSNl9NQVNLIHwKKwkJCQkJSU5URVJDRVBUX0RSN19NQVNLOwogCiAJY29udHJvbC0+aW50ZXJjZXB0X2RyX3dyaXRlID0gCUlOVEVSQ0VQVF9EUjBfTUFTSyB8CiAJCQkJCUlOVEVSQ0VQVF9EUjFfTUFTSyB8CiAJCQkJCUlOVEVSQ0VQVF9EUjJfTUFTSyB8CiAJCQkJCUlOVEVSQ0VQVF9EUjNfTUFTSyB8CisJCQkJCUlOVEVSQ0VQVF9EUjRfTUFTSyB8CiAJCQkJCUlOVEVSQ0VQVF9EUjVfTUFTSyB8CisJCQkJCUlOVEVSQ0VQVF9EUjZfTUFTSyB8CiAJCQkJCUlOVEVSQ0VQVF9EUjdfTUFTSzsKIAogCWNvbnRyb2wtPmludGVyY2VwdF9leGNlcHRpb25zID0gKDEgPDwgUEZfVkVDVE9SKSB8CkBAIC01NjksNiArNTc3LDcgQEAKIAljb250cm9sLT5pbnRlcmNlcHQgPSAJKDFVTEwgPDwgSU5URVJDRVBUX0lOVFIpIHwKIAkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfTk1JKSB8CiAJCQkJKDFVTEwgPDwgSU5URVJDRVBUX1NNSSkgfAorCQkJCSgxVUxMIDw8IElOVEVSQ0VQVF9TRUxFQ1RJVkVfQ1IwKSB8CiAJCQkJKDFVTEwgPDwgSU5URVJDRVBUX0NQVUlEKSB8CiAJCQkJKDFVTEwgPDwgSU5URVJDRVBUX0lOVkQpIHwKIAkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfSExUKSB8CkBAIC02NDEsMTAgKzY1MCw4IEBACiAJCWNvbnRyb2wtPmludGVyY2VwdCAmPSB+KCgxVUxMIDw8IElOVEVSQ0VQVF9UQVNLX1NXSVRDSCkgfAogCQkJCQkoMVVMTCA8PCBJTlRFUkNFUFRfSU5WTFBHKSk7CiAJCWNvbnRyb2wtPmludGVyY2VwdF9leGNlcHRpb25zICY9IH4oMSA8PCBQRl9WRUNUT1IpOwotCQljb250cm9sLT5pbnRlcmNlcHRfY3JfcmVhZCAmPSB+KElOVEVSQ0VQVF9DUjBfTUFTS3wKLQkJCQkJCUlOVEVSQ0VQVF9DUjNfTUFTSyk7Ci0JCWNvbnRyb2wtPmludGVyY2VwdF9jcl93cml0ZSAmPSB+KElOVEVSQ0VQVF9DUjBfTUFTS3wKLQkJCQkJCSBJTlRFUkNFUFRfQ1IzX01BU0spOworCQljb250cm9sLT5pbnRlcmNlcHRfY3JfcmVhZCAmPSB+SU5URVJDRVBUX0NSM19NQVNLOworCQljb250cm9sLT5pbnRlcmNlcHRfY3Jfd3JpdGUgJj0gfklOVEVSQ0VQVF9DUjNfTUFTSzsKIAkJc2F2ZS0+Z19wYXQgPSAweDAwMDcwNDA2MDAwNzA0MDZVTEw7CiAJCXNhdmUtPmNyMyA9IDA7CiAJCXNhdmUtPmNyNCA9IDA7CkBAIC03MzAsNyArNzM3LDYgQEAKIAlpbml0X3ZtY2Ioc3ZtKTsKIAogCWZ4X2luaXQoJnN2bS0+dmNwdSk7Ci0Jc3ZtLT52Y3B1LmZwdV9hY3RpdmUgPSAxOwogCXN2bS0+dmNwdS5hcmNoLmFwaWNfYmFzZSA9IDB4ZmVlMDAwMDAgfCBNU1JfSUEzMl9BUElDQkFTRV9FTkFCTEU7CiAJaWYgKGt2bV92Y3B1X2lzX2JzcCgmc3ZtLT52Y3B1KSkKIAkJc3ZtLT52Y3B1LmFyY2guYXBpY19iYXNlIHw9IE1TUl9JQTMyX0FQSUNCQVNFX0JTUDsKQEAgLTc2NSwxNCArNzcxLDE2IEBACiAJaWYgKHVubGlrZWx5KGNwdSAhPSB2Y3B1LT5jcHUpKSB7CiAJCXU2NCBkZWx0YTsKIAotCQkvKgotCQkgKiBNYWtlIHN1cmUgdGhhdCB0aGUgZ3Vlc3Qgc2VlcyBhIG1vbm90b25pY2FsbHkKLQkJICogaW5jcmVhc2luZyBUU0MuCi0JCSAqLwotCQlkZWx0YSA9IHZjcHUtPmFyY2guaG9zdF90c2MgLSBuYXRpdmVfcmVhZF90c2MoKTsKLQkJc3ZtLT52bWNiLT5jb250cm9sLnRzY19vZmZzZXQgKz0gZGVsdGE7Ci0JCWlmIChpc19uZXN0ZWQoc3ZtKSkKLQkJCXN2bS0+bmVzdGVkLmhzYXZlLT5jb250cm9sLnRzY19vZmZzZXQgKz0gZGVsdGE7CisJCWlmIChjaGVja190c2NfdW5zdGFibGUoKSkgeworCQkJLyoKKwkJCSAqIE1ha2Ugc3VyZSB0aGF0IHRoZSBndWVzdCBzZWVzIGEgbW9ub3RvbmljYWxseQorCQkJICogaW5jcmVhc2luZyBUU0MuCisJCQkgKi8KKwkJCWRlbHRhID0gdmNwdS0+YXJjaC5ob3N0X3RzYyAtIG5hdGl2ZV9yZWFkX3RzYygpOworCQkJc3ZtLT52bWNiLT5jb250cm9sLnRzY19vZmZzZXQgKz0gZGVsdGE7CisJCQlpZiAoaXNfbmVzdGVkKHN2bSkpCisJCQkJc3ZtLT5uZXN0ZWQuaHNhdmUtPmNvbnRyb2wudHNjX29mZnNldCArPSBkZWx0YTsKKwkJfQogCQl2Y3B1LT5jcHUgPSBjcHU7CiAJCWt2bV9taWdyYXRlX3RpbWVycyh2Y3B1KTsKIAkJc3ZtLT5hc2lkX2dlbmVyYXRpb24gPSAwOwpAQCAtOTU0LDQyICs5NjIsNTkgQEAKIAlzdm0tPnZtY2ItPnNhdmUuZ2R0ci5iYXNlID0gZHQtPmJhc2UgOwogfQogCitzdGF0aWMgdm9pZCBzdm1fZGVjYWNoZV9jcjBfZ3Vlc3RfYml0cyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7Cit9CisKIHN0YXRpYyB2b2lkIHN2bV9kZWNhY2hlX2NyNF9ndWVzdF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIH0KIAorc3RhdGljIHZvaWQgdXBkYXRlX2NyMF9pbnRlcmNlcHQoc3RydWN0IHZjcHVfc3ZtICpzdm0pCit7CisJdWxvbmcgZ2NyMCA9IHN2bS0+dmNwdS5hcmNoLmNyMDsKKwl1NjQgKmhjcjAgPSAmc3ZtLT52bWNiLT5zYXZlLmNyMDsKKworCWlmICghc3ZtLT52Y3B1LmZwdV9hY3RpdmUpCisJCSpoY3IwIHw9IFNWTV9DUjBfU0VMRUNUSVZFX01BU0s7CisJZWxzZQorCQkqaGNyMCA9ICgqaGNyMCAmIH5TVk1fQ1IwX1NFTEVDVElWRV9NQVNLKQorCQkJfCAoZ2NyMCAmIFNWTV9DUjBfU0VMRUNUSVZFX01BU0spOworCisKKwlpZiAoZ2NyMCA9PSAqaGNyMCAmJiBzdm0tPnZjcHUuZnB1X2FjdGl2ZSkgeworCQlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2NyX3JlYWQgJj0gfklOVEVSQ0VQVF9DUjBfTUFTSzsKKwkJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZSAmPSB+SU5URVJDRVBUX0NSMF9NQVNLOworCX0gZWxzZSB7CisJCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3JfcmVhZCB8PSBJTlRFUkNFUFRfQ1IwX01BU0s7CisJCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfY3Jfd3JpdGUgfD0gSU5URVJDRVBUX0NSMF9NQVNLOworCX0KK30KKwogc3RhdGljIHZvaWQgc3ZtX3NldF9jcjAoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGNyMCkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAogI2lmZGVmIENPTkZJR19YODZfNjQKLQlpZiAodmNwdS0+YXJjaC5zaGFkb3dfZWZlciAmIEVGRVJfTE1FKSB7CisJaWYgKHZjcHUtPmFyY2guZWZlciAmIEVGRVJfTE1FKSB7CiAJCWlmICghaXNfcGFnaW5nKHZjcHUpICYmIChjcjAgJiBYODZfQ1IwX1BHKSkgewotCQkJdmNwdS0+YXJjaC5zaGFkb3dfZWZlciB8PSBFRkVSX0xNQTsKKwkJCXZjcHUtPmFyY2guZWZlciB8PSBFRkVSX0xNQTsKIAkJCXN2bS0+dm1jYi0+c2F2ZS5lZmVyIHw9IEVGRVJfTE1BIHwgRUZFUl9MTUU7CiAJCX0KIAogCQlpZiAoaXNfcGFnaW5nKHZjcHUpICYmICEoY3IwICYgWDg2X0NSMF9QRykpIHsKLQkJCXZjcHUtPmFyY2guc2hhZG93X2VmZXIgJj0gfkVGRVJfTE1BOworCQkJdmNwdS0+YXJjaC5lZmVyICY9IH5FRkVSX0xNQTsKIAkJCXN2bS0+dm1jYi0+c2F2ZS5lZmVyICY9IH4oRUZFUl9MTUEgfCBFRkVSX0xNRSk7CiAJCX0KIAl9CiAjZW5kaWYKLQlpZiAobnB0X2VuYWJsZWQpCi0JCWdvdG8gc2V0OwotCi0JaWYgKCh2Y3B1LT5hcmNoLmNyMCAmIFg4Nl9DUjBfVFMpICYmICEoY3IwICYgWDg2X0NSMF9UUykpIHsKLQkJc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9leGNlcHRpb25zICY9IH4oMSA8PCBOTV9WRUNUT1IpOwotCQl2Y3B1LT5mcHVfYWN0aXZlID0gMTsKLQl9Ci0KIAl2Y3B1LT5hcmNoLmNyMCA9IGNyMDsKLQljcjAgfD0gWDg2X0NSMF9QRyB8IFg4Nl9DUjBfV1A7Ci0JaWYgKCF2Y3B1LT5mcHVfYWN0aXZlKSB7Ci0JCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyB8PSAoMSA8PCBOTV9WRUNUT1IpOworCisJaWYgKCFucHRfZW5hYmxlZCkKKwkJY3IwIHw9IFg4Nl9DUjBfUEcgfCBYODZfQ1IwX1dQOworCisJaWYgKCF2Y3B1LT5mcHVfYWN0aXZlKQogCQljcjAgfD0gWDg2X0NSMF9UUzsKLQl9Ci1zZXQ6CiAJLyoKIAkgKiByZS1lbmFibGUgY2FjaGluZyBoZXJlIGJlY2F1c2UgdGhlIFFFTVUgYmlvcwogCSAqIGRvZXMgbm90IGRvIGl0IC0gdGhpcyByZXN1bHRzIGluIHNvbWUgZGVsYXkgYXQKQEAgLTk5Nyw2ICsxMDIyLDcgQEAKIAkgKi8KIAljcjAgJj0gfihYODZfQ1IwX0NEIHwgWDg2X0NSMF9OVyk7CiAJc3ZtLT52bWNiLT5zYXZlLmNyMCA9IGNyMDsKKwl1cGRhdGVfY3IwX2ludGVyY2VwdChzdm0pOwogfQogCiBzdGF0aWMgdm9pZCBzdm1fc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KQpAQCAtMTEwMiw3NiArMTEyOCw3MCBAQAogCXN2bS0+dm1jYi0+Y29udHJvbC5hc2lkID0gc2QtPm5leHRfYXNpZCsrOwogfQogCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBzdm1fZ2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyKQorc3RhdGljIGludCBzdm1fZ2V0X2RyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IGRyLCB1bnNpZ25lZCBsb25nICpkZXN0KQogewogCXN0cnVjdCB2Y3B1X3N2bSAqc3ZtID0gdG9fc3ZtKHZjcHUpOwotCXVuc2lnbmVkIGxvbmcgdmFsOwogCiAJc3dpdGNoIChkcikgewogCWNhc2UgMCAuLi4gMzoKLQkJdmFsID0gdmNwdS0+YXJjaC5kYltkcl07CisJCSpkZXN0ID0gdmNwdS0+YXJjaC5kYltkcl07CiAJCWJyZWFrOworCWNhc2UgNDoKKwkJaWYgKGt2bV9yZWFkX2NyNF9iaXRzKHZjcHUsIFg4Nl9DUjRfREUpKQorCQkJcmV0dXJuIEVNVUxBVEVfRkFJTDsgLyogd2lsbCByZS1pbmplY3QgVUQgKi8KKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSA2OgogCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKQotCQkJdmFsID0gdmNwdS0+YXJjaC5kcjY7CisJCQkqZGVzdCA9IHZjcHUtPmFyY2guZHI2OwogCQllbHNlCi0JCQl2YWwgPSBzdm0tPnZtY2ItPnNhdmUuZHI2OworCQkJKmRlc3QgPSBzdm0tPnZtY2ItPnNhdmUuZHI2OwogCQlicmVhazsKKwljYXNlIDU6CisJCWlmIChrdm1fcmVhZF9jcjRfYml0cyh2Y3B1LCBYODZfQ1I0X0RFKSkKKwkJCXJldHVybiBFTVVMQVRFX0ZBSUw7IC8qIHdpbGwgcmUtaW5qZWN0IFVEICovCisJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgNzoKIAkJaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkKLQkJCXZhbCA9IHZjcHUtPmFyY2guZHI3OworCQkJKmRlc3QgPSB2Y3B1LT5hcmNoLmRyNzsKIAkJZWxzZQotCQkJdmFsID0gc3ZtLT52bWNiLT5zYXZlLmRyNzsKKwkJCSpkZXN0ID0gc3ZtLT52bWNiLT5zYXZlLmRyNzsKIAkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJdmFsID0gMDsKIAl9CiAKLQlyZXR1cm4gdmFsOworCXJldHVybiBFTVVMQVRFX0RPTkU7CiB9CiAKLXN0YXRpYyB2b2lkIHN2bV9zZXRfZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgZHIsIHVuc2lnbmVkIGxvbmcgdmFsdWUsCi0JCSAgICAgICBpbnQgKmV4Y2VwdGlvbikKK3N0YXRpYyBpbnQgc3ZtX3NldF9kcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGludCBkciwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKIAlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKIAotCSpleGNlcHRpb24gPSAwOwotCiAJc3dpdGNoIChkcikgewogCWNhc2UgMCAuLi4gMzoKIAkJdmNwdS0+YXJjaC5kYltkcl0gPSB2YWx1ZTsKIAkJaWYgKCEodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkKIAkJCXZjcHUtPmFyY2guZWZmX2RiW2RyXSA9IHZhbHVlOwotCQlyZXR1cm47Ci0JY2FzZSA0IC4uLiA1OgotCQlpZiAodmNwdS0+YXJjaC5jcjQgJiBYODZfQ1I0X0RFKQotCQkJKmV4Y2VwdGlvbiA9IFVEX1ZFQ1RPUjsKLQkJcmV0dXJuOworCQlicmVhazsKKwljYXNlIDQ6CisJCWlmIChrdm1fcmVhZF9jcjRfYml0cyh2Y3B1LCBYODZfQ1I0X0RFKSkKKwkJCXJldHVybiBFTVVMQVRFX0ZBSUw7IC8qIHdpbGwgcmUtaW5qZWN0IFVEICovCisJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgNjoKLQkJaWYgKHZhbHVlICYgMHhmZmZmZmZmZjAwMDAwMDAwVUxMKSB7Ci0JCQkqZXhjZXB0aW9uID0gR1BfVkVDVE9SOwotCQkJcmV0dXJuOwotCQl9CiAJCXZjcHUtPmFyY2guZHI2ID0gKHZhbHVlICYgRFI2X1ZPTEFUSUxFKSB8IERSNl9GSVhFRF8xOwotCQlyZXR1cm47CisJCWJyZWFrOworCWNhc2UgNToKKwkJaWYgKGt2bV9yZWFkX2NyNF9iaXRzKHZjcHUsIFg4Nl9DUjRfREUpKQorCQkJcmV0dXJuIEVNVUxBVEVfRkFJTDsgLyogd2lsbCByZS1pbmplY3QgVUQgKi8KKwkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSA3OgotCQlpZiAodmFsdWUgJiAweGZmZmZmZmZmMDAwMDAwMDBVTEwpIHsKLQkJCSpleGNlcHRpb24gPSBHUF9WRUNUT1I7Ci0JCQlyZXR1cm47Ci0JCX0KIAkJdmNwdS0+YXJjaC5kcjcgPSAodmFsdWUgJiBEUjdfVk9MQVRJTEUpIHwgRFI3X0ZJWEVEXzE7CiAJCWlmICghKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX1VTRV9IV19CUCkpIHsKIAkJCXN2bS0+dm1jYi0+c2F2ZS5kcjcgPSB2Y3B1LT5hcmNoLmRyNzsKIAkJCXZjcHUtPmFyY2guc3dpdGNoX2RiX3JlZ3MgPSAodmFsdWUgJiBEUjdfQlBfRU5fTUFTSyk7CiAJCX0KLQkJcmV0dXJuOwotCWRlZmF1bHQ6Ci0JCS8qIEZJWE1FOiBQb3NzaWJsZSBjYXNlPyAqLwotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVuZXhwZWN0ZWQgZHIgJXVcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgZHIpOwotCQkqZXhjZXB0aW9uID0gVURfVkVDVE9SOwotCQlyZXR1cm47CisJCWJyZWFrOwogCX0KKworCXJldHVybiBFTVVMQVRFX0RPTkU7CiB9CiAKIHN0YXRpYyBpbnQgcGZfaW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQpAQCAtMTIzOSwxMyArMTI1OSwxNyBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgdm9pZCBzdm1fZnB1X2FjdGl2YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlzdHJ1Y3QgdmNwdV9zdm0gKnN2bSA9IHRvX3N2bSh2Y3B1KTsKKwlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgJj0gfigxIDw8IE5NX1ZFQ1RPUik7CisJc3ZtLT52Y3B1LmZwdV9hY3RpdmUgPSAxOworCXVwZGF0ZV9jcjBfaW50ZXJjZXB0KHN2bSk7Cit9CisKIHN0YXRpYyBpbnQgbm1faW50ZXJjZXB0aW9uKHN0cnVjdCB2Y3B1X3N2bSAqc3ZtKQogewotCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyAmPSB+KDEgPDwgTk1fVkVDVE9SKTsKLQlpZiAoIShzdm0tPnZjcHUuYXJjaC5jcjAgJiBYODZfQ1IwX1RTKSkKLQkJc3ZtLT52bWNiLT5zYXZlLmNyMCAmPSB+WDg2X0NSMF9UUzsKLQlzdm0tPnZjcHUuZnB1X2FjdGl2ZSA9IDE7Ci0KKwlzdm1fZnB1X2FjdGl2YXRlKCZzdm0tPnZjcHUpOwogCXJldHVybiAxOwogfQogCkBAIC0xMzM3LDcgKzEzNjEsNyBAQAogCiBzdGF0aWMgaW50IG5lc3RlZF9zdm1fY2hlY2tfcGVybWlzc2lvbnMoc3RydWN0IHZjcHVfc3ZtICpzdm0pCiB7Ci0JaWYgKCEoc3ZtLT52Y3B1LmFyY2guc2hhZG93X2VmZXIgJiBFRkVSX1NWTUUpCisJaWYgKCEoc3ZtLT52Y3B1LmFyY2guZWZlciAmIEVGRVJfU1ZNRSkKIAkgICAgfHwgIWlzX3BhZ2luZygmc3ZtLT52Y3B1KSkgewogCQlrdm1fcXVldWVfZXhjZXB0aW9uKCZzdm0tPnZjcHUsIFVEX1ZFQ1RPUik7CiAJCXJldHVybiAxOwpAQCAtMTc0MCw4ICsxNzY0LDggQEAKIAloc2F2ZS0+c2F2ZS5kcyAgICAgPSB2bWNiLT5zYXZlLmRzOwogCWhzYXZlLT5zYXZlLmdkdHIgICA9IHZtY2ItPnNhdmUuZ2R0cjsKIAloc2F2ZS0+c2F2ZS5pZHRyICAgPSB2bWNiLT5zYXZlLmlkdHI7Ci0JaHNhdmUtPnNhdmUuZWZlciAgID0gc3ZtLT52Y3B1LmFyY2guc2hhZG93X2VmZXI7Ci0JaHNhdmUtPnNhdmUuY3IwICAgID0gc3ZtLT52Y3B1LmFyY2guY3IwOworCWhzYXZlLT5zYXZlLmVmZXIgICA9IHN2bS0+dmNwdS5hcmNoLmVmZXI7CisJaHNhdmUtPnNhdmUuY3IwICAgID0ga3ZtX3JlYWRfY3IwKCZzdm0tPnZjcHUpOwogCWhzYXZlLT5zYXZlLmNyNCAgICA9IHN2bS0+dmNwdS5hcmNoLmNyNDsKIAloc2F2ZS0+c2F2ZS5yZmxhZ3MgPSB2bWNiLT5zYXZlLnJmbGFnczsKIAloc2F2ZS0+c2F2ZS5yaXAgICAgPSBzdm0tPm5leHRfcmlwOwpAQCAtMjE1Myw5ICsyMTc3LDEwIEBACiAJdTMyIGVjeCA9IHN2bS0+dmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JDWF07CiAJdTY0IGRhdGE7CiAKLQlpZiAoc3ZtX2dldF9tc3IoJnN2bS0+dmNwdSwgZWN4LCAmZGF0YSkpCisJaWYgKHN2bV9nZXRfbXNyKCZzdm0tPnZjcHUsIGVjeCwgJmRhdGEpKSB7CisJCXRyYWNlX2t2bV9tc3JfcmVhZF9leChlY3gpOwogCQlrdm1faW5qZWN0X2dwKCZzdm0tPnZjcHUsIDApOwotCWVsc2UgeworCX0gZWxzZSB7CiAJCXRyYWNlX2t2bV9tc3JfcmVhZChlY3gsIGRhdGEpOwogCiAJCXN2bS0+dmNwdS5hcmNoLnJlZ3NbVkNQVV9SRUdTX1JBWF0gPSBkYXRhICYgMHhmZmZmZmZmZjsKQEAgLTIyNDcsMTMgKzIyNzIsMTUgQEAKIAl1NjQgZGF0YSA9IChzdm0tPnZjcHUuYXJjaC5yZWdzW1ZDUFVfUkVHU19SQVhdICYgLTF1KQogCQl8ICgodTY0KShzdm0tPnZjcHUuYXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdICYgLTF1KSA8PCAzMik7CiAKLQl0cmFjZV9rdm1fbXNyX3dyaXRlKGVjeCwgZGF0YSk7CiAKIAlzdm0tPm5leHRfcmlwID0ga3ZtX3JpcF9yZWFkKCZzdm0tPnZjcHUpICsgMjsKLQlpZiAoc3ZtX3NldF9tc3IoJnN2bS0+dmNwdSwgZWN4LCBkYXRhKSkKKwlpZiAoc3ZtX3NldF9tc3IoJnN2bS0+dmNwdSwgZWN4LCBkYXRhKSkgeworCQl0cmFjZV9rdm1fbXNyX3dyaXRlX2V4KGVjeCwgZGF0YSk7CiAJCWt2bV9pbmplY3RfZ3AoJnN2bS0+dmNwdSwgMCk7Ci0JZWxzZQorCX0gZWxzZSB7CisJCXRyYWNlX2t2bV9tc3Jfd3JpdGUoZWN4LCBkYXRhKTsKIAkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbigmc3ZtLT52Y3B1KTsKKwl9CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTIyOTcsNyArMjMyNCw3IEBACiAJW1NWTV9FWElUX1JFQURfQ1IzXSAgICAgICAgICAgCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9SRUFEX0NSNF0gICAgICAgICAgIAkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfUkVBRF9DUjhdICAgICAgICAgICAJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCi0JLyogZm9yIG5vdzogKi8KKwlbU1ZNX0VYSVRfQ1IwX1NFTF9XUklURV0JCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1dSSVRFX0NSMF0gICAgICAgICAgCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9XUklURV9DUjNdICAgICAgICAgIAkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfV1JJVEVfQ1I0XSAgICAgICAgICAJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCkBAIC0yMzA2LDExICsyMzMzLDE3IEBACiAJW1NWTV9FWElUX1JFQURfRFIxXQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1JFQURfRFIyXQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1JFQURfRFIzXQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1JFQURfRFI0XQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1JFQURfRFI1XQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1JFQURfRFI2XQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1JFQURfRFI3XQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1dSSVRFX0RSMF0JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9XUklURV9EUjFdCQkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfV1JJVEVfRFIyXQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCiAJW1NWTV9FWElUX1dSSVRFX0RSM10JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAorCVtTVk1fRVhJVF9XUklURV9EUjRdCQkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfV1JJVEVfRFI1XQkJCT0gZW11bGF0ZV9vbl9pbnRlcmNlcHRpb24sCisJW1NWTV9FWElUX1dSSVRFX0RSNl0JCQk9IGVtdWxhdGVfb25faW50ZXJjZXB0aW9uLAogCVtTVk1fRVhJVF9XUklURV9EUjddCQkJPSBlbXVsYXRlX29uX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfRVhDUF9CQVNFICsgREJfVkVDVE9SXQk9IGRiX2ludGVyY2VwdGlvbiwKIAlbU1ZNX0VYSVRfRVhDUF9CQVNFICsgQlBfVkVDVE9SXQk9IGJwX2ludGVyY2VwdGlvbiwKQEAgLTIzODMsMjAgKzI0MTYsMTAgQEAKIAogCXN2bV9jb21wbGV0ZV9pbnRlcnJ1cHRzKHN2bSk7CiAKLQlpZiAobnB0X2VuYWJsZWQpIHsKLQkJaW50IG1tdV9yZWxvYWQgPSAwOwotCQlpZiAoKHZjcHUtPmFyY2guY3IwIF4gc3ZtLT52bWNiLT5zYXZlLmNyMCkgJiBYODZfQ1IwX1BHKSB7Ci0JCQlzdm1fc2V0X2NyMCh2Y3B1LCBzdm0tPnZtY2ItPnNhdmUuY3IwKTsKLQkJCW1tdV9yZWxvYWQgPSAxOwotCQl9CisJaWYgKCEoc3ZtLT52bWNiLT5jb250cm9sLmludGVyY2VwdF9jcl93cml0ZSAmIElOVEVSQ0VQVF9DUjBfTUFTSykpCiAJCXZjcHUtPmFyY2guY3IwID0gc3ZtLT52bWNiLT5zYXZlLmNyMDsKKwlpZiAobnB0X2VuYWJsZWQpCiAJCXZjcHUtPmFyY2guY3IzID0gc3ZtLT52bWNiLT5zYXZlLmNyMzsKLQkJaWYgKG1tdV9yZWxvYWQpIHsKLQkJCWt2bV9tbXVfcmVzZXRfY29udGV4dCh2Y3B1KTsKLQkJCWt2bV9tbXVfbG9hZCh2Y3B1KTsKLQkJfQotCX0KLQogCiAJaWYgKHN2bS0+dm1jYi0+Y29udHJvbC5leGl0X2NvZGUgPT0gU1ZNX0VYSVRfRVJSKSB7CiAJCWt2bV9ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfRkFJTF9FTlRSWTsKQEAgLTI3OTgsMTIgKzI4MjEsNiBAQAogCiAJc3ZtLT52bWNiLT5zYXZlLmNyMyA9IHJvb3Q7CiAJZm9yY2VfbmV3X2FzaWQodmNwdSk7Ci0KLQlpZiAodmNwdS0+ZnB1X2FjdGl2ZSkgewotCQlzdm0tPnZtY2ItPmNvbnRyb2wuaW50ZXJjZXB0X2V4Y2VwdGlvbnMgfD0gKDEgPDwgTk1fVkVDVE9SKTsKLQkJc3ZtLT52bWNiLT5zYXZlLmNyMCB8PSBYODZfQ1IwX1RTOwotCQl2Y3B1LT5mcHVfYWN0aXZlID0gMDsKLQl9CiB9CiAKIHN0YXRpYyBpbnQgaXNfZGlzYWJsZWQodm9pZCkKQEAgLTI4NTIsNiArMjg2OSwxMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBzdm1fY3B1aWRfdXBkYXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCB0cmFjZV9wcmludF9mbGFncyBzdm1fZXhpdF9yZWFzb25zX3N0cltdID0gewogCXsgU1ZNX0VYSVRfUkVBRF9DUjAsICAgICAgICAgICAJCSJyZWFkX2NyMCIgfSwKIAl7IFNWTV9FWElUX1JFQURfQ1IzLAkgICAgICAJCSJyZWFkX2NyMyIgfSwKQEAgLTI5MDUsOSArMjkyNiwyMiBAQAogCXsgLTEsIE5VTEwgfQogfTsKIAotc3RhdGljIGJvb2wgc3ZtX2diX3BhZ2VfZW5hYmxlKHZvaWQpCitzdGF0aWMgaW50IHN2bV9nZXRfbHBhZ2VfbGV2ZWwodm9pZCkKIHsKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gUFRfUERQRV9MRVZFTDsKK30KKworc3RhdGljIGJvb2wgc3ZtX3JkdHNjcF9zdXBwb3J0ZWQodm9pZCkKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIHN2bV9mcHVfZGVhY3RpdmF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJc3RydWN0IHZjcHVfc3ZtICpzdm0gPSB0b19zdm0odmNwdSk7CisKKwl1cGRhdGVfY3IwX2ludGVyY2VwdChzdm0pOworCXN2bS0+dm1jYi0+Y29udHJvbC5pbnRlcmNlcHRfZXhjZXB0aW9ucyB8PSAxIDw8IE5NX1ZFQ1RPUjsKIH0KIAogc3RhdGljIHN0cnVjdCBrdm1feDg2X29wcyBzdm1feDg2X29wcyA9IHsKQEAgLTI5MzYsNiArMjk3MCw3IEBACiAJLnNldF9zZWdtZW50ID0gc3ZtX3NldF9zZWdtZW50LAogCS5nZXRfY3BsID0gc3ZtX2dldF9jcGwsCiAJLmdldF9jc19kYl9sX2JpdHMgPSBrdm1fZ2V0X2NzX2RiX2xfYml0cywKKwkuZGVjYWNoZV9jcjBfZ3Vlc3RfYml0cyA9IHN2bV9kZWNhY2hlX2NyMF9ndWVzdF9iaXRzLAogCS5kZWNhY2hlX2NyNF9ndWVzdF9iaXRzID0gc3ZtX2RlY2FjaGVfY3I0X2d1ZXN0X2JpdHMsCiAJLnNldF9jcjAgPSBzdm1fc2V0X2NyMCwKIAkuc2V0X2NyMyA9IHN2bV9zZXRfY3IzLApAQCAtMjk1MCw2ICsyOTg1LDggQEAKIAkuY2FjaGVfcmVnID0gc3ZtX2NhY2hlX3JlZywKIAkuZ2V0X3JmbGFncyA9IHN2bV9nZXRfcmZsYWdzLAogCS5zZXRfcmZsYWdzID0gc3ZtX3NldF9yZmxhZ3MsCisJLmZwdV9hY3RpdmF0ZSA9IHN2bV9mcHVfYWN0aXZhdGUsCisJLmZwdV9kZWFjdGl2YXRlID0gc3ZtX2ZwdV9kZWFjdGl2YXRlLAogCiAJLnRsYl9mbHVzaCA9IHN2bV9mbHVzaF90bGIsCiAKQEAgLTI5NzUsNyArMzAxMiwxMSBAQAogCS5nZXRfbXRfbWFzayA9IHN2bV9nZXRfbXRfbWFzaywKIAogCS5leGl0X3JlYXNvbnNfc3RyID0gc3ZtX2V4aXRfcmVhc29uc19zdHIsCi0JLmdiX3BhZ2VfZW5hYmxlID0gc3ZtX2diX3BhZ2VfZW5hYmxlLAorCS5nZXRfbHBhZ2VfbGV2ZWwgPSBzdm1fZ2V0X2xwYWdlX2xldmVsLAorCisJLmNwdWlkX3VwZGF0ZSA9IHN2bV9jcHVpZF91cGRhdGUsCisKKwkucmR0c2NwX3N1cHBvcnRlZCA9IHN2bV9yZHRzY3Bfc3VwcG9ydGVkLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc3ZtX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS90cmFjZS5oIGIvYXJjaC94ODYva3ZtL3RyYWNlLmgKaW5kZXggODE2ZTA0NC4uNmFkMzBhMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3RyYWNlLmgKKysrIGIvYXJjaC94ODYva3ZtL3RyYWNlLmgKQEAgLTU2LDYgKzU2LDM4IEBACiApOwogCiAvKgorICogVHJhY2Vwb2ludCBmb3IgaHlwZXJjYWxsLgorICovCitUUkFDRV9FVkVOVChrdm1faHZfaHlwZXJjYWxsLAorCVRQX1BST1RPKF9fdTE2IGNvZGUsIGJvb2wgZmFzdCwgX191MTYgcmVwX2NudCwgX191MTYgcmVwX2lkeCwKKwkJIF9fdTY0IGluZ3BhLCBfX3U2NCBvdXRncGEpLAorCVRQX0FSR1MoY29kZSwgZmFzdCwgcmVwX2NudCwgcmVwX2lkeCwgaW5ncGEsIG91dGdwYSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlfX3UxNiwgCQljb2RlCQkpCisJCV9fZmllbGQoCWJvb2wsCQlmYXN0CQkpCisJCV9fZmllbGQoCV9fdTE2LAkJcmVwX2NudAkJKQorCQlfX2ZpZWxkKAlfX3UxNiwJCXJlcF9pZHgJCSkKKwkJX19maWVsZCgJX191NjQsCQlpbmdwYQkJKQorCQlfX2ZpZWxkKAlfX3U2NCwJCW91dGdwYQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+Y29kZQkJPSBjb2RlOworCQlfX2VudHJ5LT5mYXN0CQk9IGZhc3Q7CisJCV9fZW50cnktPnJlcF9jbnQJPSByZXBfY250OworCQlfX2VudHJ5LT5yZXBfaWR4CT0gcmVwX2lkeDsKKwkJX19lbnRyeS0+aW5ncGEJCT0gaW5ncGE7CisJCV9fZW50cnktPm91dGdwYQkJPSBvdXRncGE7CisJKSwKKworCVRQX3ByaW50aygiY29kZSAweCV4ICVzIGNudCAweCV4IGlkeCAweCV4IGluIDB4JWxseCBvdXQgMHglbGx4IiwKKwkJICBfX2VudHJ5LT5jb2RlLCBfX2VudHJ5LT5mYXN0ID8gImZhc3QiIDogInNsb3ciLAorCQkgIF9fZW50cnktPnJlcF9jbnQsIF9fZW50cnktPnJlcF9pZHgsICBfX2VudHJ5LT5pbmdwYSwKKwkJICBfX2VudHJ5LT5vdXRncGEpCispOworCisvKgogICogVHJhY2Vwb2ludCBmb3IgUElPLgogICovCiBUUkFDRV9FVkVOVChrdm1fcGlvLApAQCAtMjE0LDI4ICsyNDYsMzMgQEAKICAqIFRyYWNlcG9pbnQgZm9yIGd1ZXN0IE1TUiBhY2Nlc3MuCiAgKi8KIFRSQUNFX0VWRU5UKGt2bV9tc3IsCi0JVFBfUFJPVE8odW5zaWduZWQgaW50IHJ3LCB1bnNpZ25lZCBpbnQgZWN4LCB1bnNpZ25lZCBsb25nIGRhdGEpLAotCVRQX0FSR1MocncsIGVjeCwgZGF0YSksCisJVFBfUFJPVE8odW5zaWduZWQgd3JpdGUsIHUzMiBlY3gsIHU2NCBkYXRhLCBib29sIGV4Y2VwdGlvbiksCisJVFBfQVJHUyh3cml0ZSwgZWN4LCBkYXRhLCBleGNlcHRpb24pLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKLQkJX19maWVsZCgJdW5zaWduZWQgaW50LAlydwkJKQotCQlfX2ZpZWxkKAl1bnNpZ25lZCBpbnQsCWVjeAkJKQotCQlfX2ZpZWxkKAl1bnNpZ25lZCBsb25nLAlkYXRhCQkpCisJCV9fZmllbGQoCXVuc2lnbmVkLAl3cml0ZQkJKQorCQlfX2ZpZWxkKAl1MzIsCQllY3gJCSkKKwkJX19maWVsZCgJdTY0LAkJZGF0YQkJKQorCQlfX2ZpZWxkKAl1OCwJCWV4Y2VwdGlvbgkpCiAJKSwKIAogCVRQX2Zhc3RfYXNzaWduKAotCQlfX2VudHJ5LT5ydwkJPSBydzsKKwkJX19lbnRyeS0+d3JpdGUJCT0gd3JpdGU7CiAJCV9fZW50cnktPmVjeAkJPSBlY3g7CiAJCV9fZW50cnktPmRhdGEJCT0gZGF0YTsKKwkJX19lbnRyeS0+ZXhjZXB0aW9uCT0gZXhjZXB0aW9uOwogCSksCiAKLQlUUF9wcmludGsoIm1zcl8lcyAleCA9IDB4JWx4IiwKLQkJICBfX2VudHJ5LT5ydyA/ICJ3cml0ZSIgOiAicmVhZCIsCi0JCSAgX19lbnRyeS0+ZWN4LCBfX2VudHJ5LT5kYXRhKQorCVRQX3ByaW50aygibXNyXyVzICV4ID0gMHglbGx4JXMiLAorCQkgIF9fZW50cnktPndyaXRlID8gIndyaXRlIiA6ICJyZWFkIiwKKwkJICBfX2VudHJ5LT5lY3gsIF9fZW50cnktPmRhdGEsCisJCSAgX19lbnRyeS0+ZXhjZXB0aW9uID8gIiAoI0dQKSIgOiAiIikKICk7CiAKLSNkZWZpbmUgdHJhY2Vfa3ZtX21zcl9yZWFkKGVjeCwgZGF0YSkJCXRyYWNlX2t2bV9tc3IoMCwgZWN4LCBkYXRhKQotI2RlZmluZSB0cmFjZV9rdm1fbXNyX3dyaXRlKGVjeCwgZGF0YSkJCXRyYWNlX2t2bV9tc3IoMSwgZWN4LCBkYXRhKQorI2RlZmluZSB0cmFjZV9rdm1fbXNyX3JlYWQoZWN4LCBkYXRhKSAgICAgIHRyYWNlX2t2bV9tc3IoMCwgZWN4LCBkYXRhLCBmYWxzZSkKKyNkZWZpbmUgdHJhY2Vfa3ZtX21zcl93cml0ZShlY3gsIGRhdGEpICAgICB0cmFjZV9rdm1fbXNyKDEsIGVjeCwgZGF0YSwgZmFsc2UpCisjZGVmaW5lIHRyYWNlX2t2bV9tc3JfcmVhZF9leChlY3gpICAgICAgICAgdHJhY2Vfa3ZtX21zcigwLCBlY3gsIDAsIHRydWUpCisjZGVmaW5lIHRyYWNlX2t2bV9tc3Jfd3JpdGVfZXgoZWN4LCBkYXRhKSAgdHJhY2Vfa3ZtX21zcigxLCBlY3gsIGRhdGEsIHRydWUpCiAKIC8qCiAgKiBUcmFjZXBvaW50IGZvciBndWVzdCBDUiBhY2Nlc3MuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vdm14LmMgYi9hcmNoL3g4Ni9rdm0vdm14LmMKaW5kZXggZDQ5MThkNi4uMTQ4NzNiOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3ZteC5jCisrKyBiL2FyY2gveDg2L2t2bS92bXguYwpAQCAtNjEsNiArNjEsMjEgQEAKIHN0YXRpYyBpbnQgX19yZWFkX21vc3RseSBlbXVsYXRlX2ludmFsaWRfZ3Vlc3Rfc3RhdGUgPSAwOwogbW9kdWxlX3BhcmFtKGVtdWxhdGVfaW52YWxpZF9ndWVzdF9zdGF0ZSwgYm9vbCwgU19JUlVHTyk7CiAKKyNkZWZpbmUgS1ZNX0dVRVNUX0NSMF9NQVNLX1VOUkVTVFJJQ1RFRF9HVUVTVAkJCQlcCisJKFg4Nl9DUjBfV1AgfCBYODZfQ1IwX05FIHwgWDg2X0NSMF9OVyB8IFg4Nl9DUjBfQ0QpCisjZGVmaW5lIEtWTV9HVUVTVF9DUjBfTUFTSwkJCQkJCVwKKwkoS1ZNX0dVRVNUX0NSMF9NQVNLX1VOUkVTVFJJQ1RFRF9HVUVTVCB8IFg4Nl9DUjBfUEcgfCBYODZfQ1IwX1BFKQorI2RlZmluZSBLVk1fVk1fQ1IwX0FMV0FZU19PTl9VTlJFU1RSSUNURURfR1VFU1QJCQkJXAorCShYODZfQ1IwX1dQIHwgWDg2X0NSMF9ORSkKKyNkZWZpbmUgS1ZNX1ZNX0NSMF9BTFdBWVNfT04JCQkJCQlcCisJKEtWTV9WTV9DUjBfQUxXQVlTX09OX1VOUkVTVFJJQ1RFRF9HVUVTVCB8IFg4Nl9DUjBfUEcgfCBYODZfQ1IwX1BFKQorI2RlZmluZSBLVk1fQ1I0X0dVRVNUX09XTkVEX0JJVFMJCQkJICAgICAgXAorCShYODZfQ1I0X1BWSSB8IFg4Nl9DUjRfREUgfCBYODZfQ1I0X1BDRSB8IFg4Nl9DUjRfT1NGWFNSICAgICAgXAorCSB8IFg4Nl9DUjRfT1NYTU1FWENQVCkKKworI2RlZmluZSBLVk1fUE1PREVfVk1fQ1I0X0FMV0FZU19PTiAoWDg2X0NSNF9QQUUgfCBYODZfQ1I0X1ZNWEUpCisjZGVmaW5lIEtWTV9STU9ERV9WTV9DUjRfQUxXQVlTX09OIChYODZfQ1I0X1ZNRSB8IFg4Nl9DUjRfUEFFIHwgWDg2X0NSNF9WTVhFKQorCiAvKgogICogVGhlc2UgMiBwYXJhbWV0ZXJzIGFyZSB1c2VkIHRvIGNvbmZpZyB0aGUgY29udHJvbHMgZm9yIFBhdXNlLUxvb3AgRXhpdGluZzoKICAqIHBsZV9nYXA6ICAgIHVwcGVyIGJvdW5kIG9uIHRoZSBhbW91bnQgb2YgdGltZSBiZXR3ZWVuIHR3byBzdWNjZXNzaXZlCkBAIC0xMzYsNiArMTUxLDggQEAKIAlrdGltZV90IGVudHJ5X3RpbWU7CiAJczY0IHZubWlfYmxvY2tlZF90aW1lOwogCXUzMiBleGl0X3JlYXNvbjsKKworCWJvb2wgcmR0c2NwX2VuYWJsZWQ7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB2Y3B1X3ZteCAqdG9fdm14KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTIxMCw3ICsyMjcsNyBAQAogI2lmZGVmIENPTkZJR19YODZfNjQKIAlNU1JfU1lTQ0FMTF9NQVNLLCBNU1JfTFNUQVIsIE1TUl9DU1RBUiwKICNlbmRpZgotCU1TUl9FRkVSLCBNU1JfSzZfU1RBUiwKKwlNU1JfRUZFUiwgTVNSX1RTQ19BVVgsIE1TUl9LNl9TVEFSLAogfTsKICNkZWZpbmUgTlJfVk1YX01TUiBBUlJBWV9TSVpFKHZteF9tc3JfaW5kZXgpCiAKQEAgLTMwMSw2ICszMTgsMTEgQEAKIAlyZXR1cm4gISEodm14X2NhcGFiaWxpdHkuZXB0ICYgVk1YX0VQVF8yTUJfUEFHRV9CSVQpOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgY3B1X2hhc192bXhfZXB0XzFnX3BhZ2Uodm9pZCkKK3sKKwlyZXR1cm4gISEodm14X2NhcGFiaWxpdHkuZXB0ICYgVk1YX0VQVF8xR0JfUEFHRV9CSVQpOworfQorCiBzdGF0aWMgaW5saW5lIGludCBjcHVfaGFzX3ZteF9pbnZlcHRfaW5kaXZpZHVhbF9hZGRyKHZvaWQpCiB7CiAJcmV0dXJuICEhKHZteF9jYXBhYmlsaXR5LmVwdCAmIFZNWF9FUFRfRVhURU5UX0lORElWSURVQUxfQklUKTsKQEAgLTMzNiw5ICszNTgsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCB2bV9uZWVkX3ZpcnR1YWxpemVfYXBpY19hY2Nlc3NlcyhzdHJ1Y3Qga3ZtICprdm0pCiB7Ci0JcmV0dXJuIGZsZXhwcmlvcml0eV9lbmFibGVkICYmCi0JCShjcHVfaGFzX3ZteF92aXJ0dWFsaXplX2FwaWNfYWNjZXNzZXMoKSkgJiYKLQkJKGlycWNoaXBfaW5fa2VybmVsKGt2bSkpOworCXJldHVybiBmbGV4cHJpb3JpdHlfZW5hYmxlZCAmJiBpcnFjaGlwX2luX2tlcm5lbChrdm0pOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBjcHVfaGFzX3ZteF92cGlkKHZvaWQpCkBAIC0zNDcsNiArMzY3LDEyIEBACiAJCVNFQ09OREFSWV9FWEVDX0VOQUJMRV9WUElEOwogfQogCitzdGF0aWMgaW5saW5lIGludCBjcHVfaGFzX3ZteF9yZHRzY3Aodm9pZCkKK3sKKwlyZXR1cm4gdm1jc19jb25maWcuY3B1X2Jhc2VkXzJuZF9leGVjX2N0cmwgJgorCQlTRUNPTkRBUllfRVhFQ19SRFRTQ1A7Cit9CisKIHN0YXRpYyBpbmxpbmUgaW50IGNwdV9oYXNfdmlydHVhbF9ubWlzKHZvaWQpCiB7CiAJcmV0dXJuIHZtY3NfY29uZmlnLnBpbl9iYXNlZF9leGVjX2N0cmwgJiBQSU5fQkFTRURfVklSVFVBTF9OTUlTOwpAQCAtNTUxLDIyICs1NzcsMTggQEAKIHsKIAl1MzIgZWI7CiAKLQllYiA9ICgxdSA8PCBQRl9WRUNUT1IpIHwgKDF1IDw8IFVEX1ZFQ1RPUikgfCAoMXUgPDwgTUNfVkVDVE9SKTsKLQlpZiAoIXZjcHUtPmZwdV9hY3RpdmUpCi0JCWViIHw9IDF1IDw8IE5NX1ZFQ1RPUjsKLQkvKgotCSAqIFVuY29uZGl0aW9uYWxseSBpbnRlcmNlcHQgI0RCIHNvIHdlIGNhbiBtYWludGFpbiBkcjYgd2l0aG91dAotCSAqIHJlYWRpbmcgaXQgZXZlcnkgZXhpdC4KLQkgKi8KLQllYiB8PSAxdSA8PCBEQl9WRUNUT1I7Ci0JaWYgKHZjcHUtPmd1ZXN0X2RlYnVnICYgS1ZNX0dVRVNUREJHX0VOQUJMRSkgewotCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX1NXX0JQKQotCQkJZWIgfD0gMXUgPDwgQlBfVkVDVE9SOwotCX0KKwllYiA9ICgxdSA8PCBQRl9WRUNUT1IpIHwgKDF1IDw8IFVEX1ZFQ1RPUikgfCAoMXUgPDwgTUNfVkVDVE9SKSB8CisJICAgICAoMXUgPDwgTk1fVkVDVE9SKSB8ICgxdSA8PCBEQl9WRUNUT1IpOworCWlmICgodmNwdS0+Z3Vlc3RfZGVidWcgJgorCSAgICAgKEtWTV9HVUVTVERCR19FTkFCTEUgfCBLVk1fR1VFU1REQkdfVVNFX1NXX0JQKSkgPT0KKwkgICAgKEtWTV9HVUVTVERCR19FTkFCTEUgfCBLVk1fR1VFU1REQkdfVVNFX1NXX0JQKSkKKwkJZWIgfD0gMXUgPDwgQlBfVkVDVE9SOwogCWlmICh0b192bXgodmNwdSktPnJtb2RlLnZtODZfYWN0aXZlKQogCQllYiA9IH4wOwogCWlmIChlbmFibGVfZXB0KQogCQllYiAmPSB+KDF1IDw8IFBGX1ZFQ1RPUik7IC8qIGJ5cGFzc19ndWVzdF9wZiA9IDAgKi8KKwlpZiAodmNwdS0+ZnB1X2FjdGl2ZSkKKwkJZWIgJj0gfigxdSA8PCBOTV9WRUNUT1IpOwogCXZtY3Nfd3JpdGUzMihFWENFUFRJT05fQklUTUFQLCBlYik7CiB9CiAKQEAgLTU4OSw3ICs2MTEsNyBAQAogCXU2NCBndWVzdF9lZmVyOwogCXU2NCBpZ25vcmVfYml0czsKIAotCWd1ZXN0X2VmZXIgPSB2bXgtPnZjcHUuYXJjaC5zaGFkb3dfZWZlcjsKKwlndWVzdF9lZmVyID0gdm14LT52Y3B1LmFyY2guZWZlcjsKIAogCS8qCiAJICogTlggaXMgZW11bGF0ZWQ7IExNQSBhbmQgTE1FIGhhbmRsZWQgYnkgaGFyZHdhcmU7IFNDRSBtZWFuaW5sZXNzCkBAIC03NjcsMjIgKzc4OSwzMCBAQAogCiBzdGF0aWMgdm9pZCB2bXhfZnB1X2FjdGl2YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKKwl1bG9uZyBjcjA7CisKIAlpZiAodmNwdS0+ZnB1X2FjdGl2ZSkKIAkJcmV0dXJuOwogCXZjcHUtPmZwdV9hY3RpdmUgPSAxOwotCXZtY3NfY2xlYXJfYml0cyhHVUVTVF9DUjAsIFg4Nl9DUjBfVFMpOwotCWlmICh2Y3B1LT5hcmNoLmNyMCAmIFg4Nl9DUjBfVFMpCi0JCXZtY3Nfc2V0X2JpdHMoR1VFU1RfQ1IwLCBYODZfQ1IwX1RTKTsKKwljcjAgPSB2bWNzX3JlYWRsKEdVRVNUX0NSMCk7CisJY3IwICY9IH4oWDg2X0NSMF9UUyB8IFg4Nl9DUjBfTVApOworCWNyMCB8PSBrdm1fcmVhZF9jcjBfYml0cyh2Y3B1LCBYODZfQ1IwX1RTIHwgWDg2X0NSMF9NUCk7CisJdm1jc193cml0ZWwoR1VFU1RfQ1IwLCBjcjApOwogCXVwZGF0ZV9leGNlcHRpb25fYml0bWFwKHZjcHUpOworCXZjcHUtPmFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHMgPSBYODZfQ1IwX1RTOworCXZtY3Nfd3JpdGVsKENSMF9HVUVTVF9IT1NUX01BU0ssIH52Y3B1LT5hcmNoLmNyMF9ndWVzdF9vd25lZF9iaXRzKTsKIH0KIAorc3RhdGljIHZvaWQgdm14X2RlY2FjaGVfY3IwX2d1ZXN0X2JpdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKKwogc3RhdGljIHZvaWQgdm14X2ZwdV9kZWFjdGl2YXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlpZiAoIXZjcHUtPmZwdV9hY3RpdmUpCi0JCXJldHVybjsKLQl2Y3B1LT5mcHVfYWN0aXZlID0gMDsKLQl2bWNzX3NldF9iaXRzKEdVRVNUX0NSMCwgWDg2X0NSMF9UUyk7CisJdm14X2RlY2FjaGVfY3IwX2d1ZXN0X2JpdHModmNwdSk7CisJdm1jc19zZXRfYml0cyhHVUVTVF9DUjAsIFg4Nl9DUjBfVFMgfCBYODZfQ1IwX01QKTsKIAl1cGRhdGVfZXhjZXB0aW9uX2JpdG1hcCh2Y3B1KTsKKwl2Y3B1LT5hcmNoLmNyMF9ndWVzdF9vd25lZF9iaXRzID0gMDsKKwl2bWNzX3dyaXRlbChDUjBfR1VFU1RfSE9TVF9NQVNLLCB+dmNwdS0+YXJjaC5jcjBfZ3Vlc3Rfb3duZWRfYml0cyk7CisJdm1jc193cml0ZWwoQ1IwX1JFQURfU0hBRE9XLCB2Y3B1LT5hcmNoLmNyMCk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHZteF9nZXRfcmZsYWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTg3OCw2ICs5MDgsMTEgQEAKIAl2bWNzX3dyaXRlMzIoVk1fRU5UUllfSU5UUl9JTkZPX0ZJRUxELCBpbnRyX2luZm8pOwogfQogCitzdGF0aWMgYm9vbCB2bXhfcmR0c2NwX3N1cHBvcnRlZCh2b2lkKQoreworCXJldHVybiBjcHVfaGFzX3ZteF9yZHRzY3AoKTsKK30KKwogLyoKICAqIFN3YXAgTVNSIGVudHJ5IGluIGhvc3QvZ3Vlc3QgTVNSIGVudHJ5IGFycmF5LgogICovCkBAIC05MTMsMTIgKzk0OCwxNSBAQAogCQlpbmRleCA9IF9fZmluZF9tc3JfaW5kZXgodm14LCBNU1JfQ1NUQVIpOwogCQlpZiAoaW5kZXggPj0gMCkKIAkJCW1vdmVfbXNyX3VwKHZteCwgaW5kZXgsIHNhdmVfbm1zcnMrKyk7CisJCWluZGV4ID0gX19maW5kX21zcl9pbmRleCh2bXgsIE1TUl9UU0NfQVVYKTsKKwkJaWYgKGluZGV4ID49IDAgJiYgdm14LT5yZHRzY3BfZW5hYmxlZCkKKwkJCW1vdmVfbXNyX3VwKHZteCwgaW5kZXgsIHNhdmVfbm1zcnMrKyk7CiAJCS8qCiAJCSAqIE1TUl9LNl9TVEFSIGlzIG9ubHkgbmVlZGVkIG9uIGxvbmcgbW9kZSBndWVzdHMsIGFuZCBvbmx5CiAJCSAqIGlmIGVmZXIuc2NlIGlzIGVuYWJsZWQuCiAJCSAqLwogCQlpbmRleCA9IF9fZmluZF9tc3JfaW5kZXgodm14LCBNU1JfSzZfU1RBUik7Ci0JCWlmICgoaW5kZXggPj0gMCkgJiYgKHZteC0+dmNwdS5hcmNoLnNoYWRvd19lZmVyICYgRUZFUl9TQ0UpKQorCQlpZiAoKGluZGV4ID49IDApICYmICh2bXgtPnZjcHUuYXJjaC5lZmVyICYgRUZFUl9TQ0UpKQogCQkJbW92ZV9tc3JfdXAodm14LCBpbmRleCwgc2F2ZV9ubXNycysrKTsKIAl9CiAjZW5kaWYKQEAgLTEwMDIsNiArMTA0MCwxMCBAQAogCWNhc2UgTVNSX0lBMzJfU1lTRU5URVJfRVNQOgogCQlkYXRhID0gdm1jc19yZWFkbChHVUVTVF9TWVNFTlRFUl9FU1ApOwogCQlicmVhazsKKwljYXNlIE1TUl9UU0NfQVVYOgorCQlpZiAoIXRvX3ZteCh2Y3B1KS0+cmR0c2NwX2VuYWJsZWQpCisJCQlyZXR1cm4gMTsKKwkJLyogT3RoZXJ3aXNlIGZhbGxzIHRocm91Z2ggKi8KIAlkZWZhdWx0OgogCQl2bXhfbG9hZF9ob3N0X3N0YXRlKHRvX3ZteCh2Y3B1KSk7CiAJCW1zciA9IGZpbmRfbXNyX2VudHJ5KHRvX3ZteCh2Y3B1KSwgbXNyX2luZGV4KTsKQEAgLTEwNjUsNyArMTEwNywxNSBAQAogCQkJdmNwdS0+YXJjaC5wYXQgPSBkYXRhOwogCQkJYnJlYWs7CiAJCX0KLQkJLyogT3RoZXJ3aXNlIGZhbGxzIHRocm91Z2ggdG8ga3ZtX3NldF9tc3JfY29tbW9uICovCisJCXJldCA9IGt2bV9zZXRfbXNyX2NvbW1vbih2Y3B1LCBtc3JfaW5kZXgsIGRhdGEpOworCQlicmVhazsKKwljYXNlIE1TUl9UU0NfQVVYOgorCQlpZiAoIXZteC0+cmR0c2NwX2VuYWJsZWQpCisJCQlyZXR1cm4gMTsKKwkJLyogQ2hlY2sgcmVzZXJ2ZWQgYml0LCBoaWdoZXIgMzIgYml0cyBzaG91bGQgYmUgemVybyAqLworCQlpZiAoKGRhdGEgPj4gMzIpICE9IDApCisJCQlyZXR1cm4gMTsKKwkJLyogT3RoZXJ3aXNlIGZhbGxzIHRocm91Z2ggKi8KIAlkZWZhdWx0OgogCQltc3IgPSBmaW5kX21zcl9lbnRyeSh2bXgsIG1zcl9pbmRleCk7CiAJCWlmIChtc3IpIHsKQEAgLTEyMjQsNiArMTI3NCw4IEBACiAJICAgICAgQ1BVX0JBU0VEX1VTRV9JT19CSVRNQVBTIHwKIAkgICAgICBDUFVfQkFTRURfTU9WX0RSX0VYSVRJTkcgfAogCSAgICAgIENQVV9CQVNFRF9VU0VfVFNDX09GRlNFVElORyB8CisJICAgICAgQ1BVX0JBU0VEX01XQUlUX0VYSVRJTkcgfAorCSAgICAgIENQVV9CQVNFRF9NT05JVE9SX0VYSVRJTkcgfAogCSAgICAgIENQVV9CQVNFRF9JTlZMUEdfRVhJVElORzsKIAlvcHQgPSBDUFVfQkFTRURfVFBSX1NIQURPVyB8CiAJICAgICAgQ1BVX0JBU0VEX1VTRV9NU1JfQklUTUFQUyB8CkBAIC0xMjQzLDcgKzEyOTUsOCBAQAogCQkJU0VDT05EQVJZX0VYRUNfRU5BQkxFX1ZQSUQgfAogCQkJU0VDT05EQVJZX0VYRUNfRU5BQkxFX0VQVCB8CiAJCQlTRUNPTkRBUllfRVhFQ19VTlJFU1RSSUNURURfR1VFU1QgfAotCQkJU0VDT05EQVJZX0VYRUNfUEFVU0VfTE9PUF9FWElUSU5HOworCQkJU0VDT05EQVJZX0VYRUNfUEFVU0VfTE9PUF9FWElUSU5HIHwKKwkJCVNFQ09OREFSWV9FWEVDX1JEVFNDUDsKIAkJaWYgKGFkanVzdF92bXhfY29udHJvbHMobWluMiwgb3B0MiwKIAkJCQkJTVNSX0lBMzJfVk1YX1BST0NCQVNFRF9DVExTMiwKIAkJCQkJJl9jcHVfYmFzZWRfMm5kX2V4ZWNfY29udHJvbCkgPCAwKQpAQCAtMTQ1Nyw4ICsxNTEwLDEyIEBACiBzdGF0aWMgZ3ZhX3Qgcm1vZGVfdHNzX2Jhc2Uoc3RydWN0IGt2bSAqa3ZtKQogewogCWlmICgha3ZtLT5hcmNoLnRzc19hZGRyKSB7Ci0JCWdmbl90IGJhc2VfZ2ZuID0ga3ZtLT5tZW1zbG90c1swXS5iYXNlX2dmbiArCi0JCQkJIGt2bS0+bWVtc2xvdHNbMF0ubnBhZ2VzIC0gMzsKKwkJc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHM7CisJCWdmbl90IGJhc2VfZ2ZuOworCisJCXNsb3RzID0gcmN1X2RlcmVmZXJlbmNlKGt2bS0+bWVtc2xvdHMpOworCQliYXNlX2dmbiA9IGt2bS0+bWVtc2xvdHMtPm1lbXNsb3RzWzBdLmJhc2VfZ2ZuICsKKwkJCQkga3ZtLT5tZW1zbG90cy0+bWVtc2xvdHNbMF0ubnBhZ2VzIC0gMzsKIAkJcmV0dXJuIGJhc2VfZ2ZuIDw8IFBBR0VfU0hJRlQ7CiAJfQogCXJldHVybiBrdm0tPmFyY2gudHNzX2FkZHI7CkBAIC0xNTQ0LDkgKzE2MDEsNyBAQAogCSAqIG9mIHRoaXMgbXNyIGRlcGVuZHMgb24gaXNfbG9uZ19tb2RlKCkuCiAJICovCiAJdm14X2xvYWRfaG9zdF9zdGF0ZSh0b192bXgodmNwdSkpOwotCXZjcHUtPmFyY2guc2hhZG93X2VmZXIgPSBlZmVyOwotCWlmICghbXNyKQotCQlyZXR1cm47CisJdmNwdS0+YXJjaC5lZmVyID0gZWZlcjsKIAlpZiAoZWZlciAmIEVGRVJfTE1BKSB7CiAJCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9DT05UUk9MUywKIAkJCSAgICAgdm1jc19yZWFkMzIoVk1fRU5UUllfQ09OVFJPTFMpIHwKQEAgLTE1NzYsMTMgKzE2MzEsMTMgQEAKIAkJCSAgICAgKGd1ZXN0X3RyX2FyICYgfkFSX1RZUEVfTUFTSykKIAkJCSAgICAgfCBBUl9UWVBFX0JVU1lfNjRfVFNTKTsKIAl9Ci0JdmNwdS0+YXJjaC5zaGFkb3dfZWZlciB8PSBFRkVSX0xNQTsKLQl2bXhfc2V0X2VmZXIodmNwdSwgdmNwdS0+YXJjaC5zaGFkb3dfZWZlcik7CisJdmNwdS0+YXJjaC5lZmVyIHw9IEVGRVJfTE1BOworCXZteF9zZXRfZWZlcih2Y3B1LCB2Y3B1LT5hcmNoLmVmZXIpOwogfQogCiBzdGF0aWMgdm9pZCBleGl0X2xtb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQl2Y3B1LT5hcmNoLnNoYWRvd19lZmVyICY9IH5FRkVSX0xNQTsKKwl2Y3B1LT5hcmNoLmVmZXIgJj0gfkVGRVJfTE1BOwogCiAJdm1jc193cml0ZTMyKFZNX0VOVFJZX0NPTlRST0xTLAogCQkgICAgIHZtY3NfcmVhZDMyKFZNX0VOVFJZX0NPTlRST0xTKQpAQCAtMTU5OCwxMCArMTY1MywyMCBAQAogCQllcHRfc3luY19jb250ZXh0KGNvbnN0cnVjdF9lcHRwKHZjcHUtPmFyY2gubW11LnJvb3RfaHBhKSk7CiB9CiAKK3N0YXRpYyB2b2lkIHZteF9kZWNhY2hlX2NyMF9ndWVzdF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1bG9uZyBjcjBfZ3Vlc3Rfb3duZWRfYml0cyA9IHZjcHUtPmFyY2guY3IwX2d1ZXN0X293bmVkX2JpdHM7CisKKwl2Y3B1LT5hcmNoLmNyMCAmPSB+Y3IwX2d1ZXN0X293bmVkX2JpdHM7CisJdmNwdS0+YXJjaC5jcjAgfD0gdm1jc19yZWFkbChHVUVTVF9DUjApICYgY3IwX2d1ZXN0X293bmVkX2JpdHM7Cit9CisKIHN0YXRpYyB2b2lkIHZteF9kZWNhY2hlX2NyNF9ndWVzdF9iaXRzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQl2Y3B1LT5hcmNoLmNyNCAmPSBLVk1fR1VFU1RfQ1I0X01BU0s7Ci0JdmNwdS0+YXJjaC5jcjQgfD0gdm1jc19yZWFkbChHVUVTVF9DUjQpICYgfktWTV9HVUVTVF9DUjRfTUFTSzsKKwl1bG9uZyBjcjRfZ3Vlc3Rfb3duZWRfYml0cyA9IHZjcHUtPmFyY2guY3I0X2d1ZXN0X293bmVkX2JpdHM7CisKKwl2Y3B1LT5hcmNoLmNyNCAmPSB+Y3I0X2d1ZXN0X293bmVkX2JpdHM7CisJdmNwdS0+YXJjaC5jcjQgfD0gdm1jc19yZWFkbChHVUVTVF9DUjQpICYgY3I0X2d1ZXN0X293bmVkX2JpdHM7CiB9CiAKIHN0YXRpYyB2b2lkIGVwdF9sb2FkX3BkcHRycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCkBAIC0xNjQ2LDcgKzE3MTEsNyBAQAogCQkJICAgICAoQ1BVX0JBU0VEX0NSM19MT0FEX0VYSVRJTkcgfAogCQkJICAgICAgQ1BVX0JBU0VEX0NSM19TVE9SRV9FWElUSU5HKSk7CiAJCXZjcHUtPmFyY2guY3IwID0gY3IwOwotCQl2bXhfc2V0X2NyNCh2Y3B1LCB2Y3B1LT5hcmNoLmNyNCk7CisJCXZteF9zZXRfY3I0KHZjcHUsIGt2bV9yZWFkX2NyNCh2Y3B1KSk7CiAJfSBlbHNlIGlmICghaXNfcGFnaW5nKHZjcHUpKSB7CiAJCS8qIEZyb20gbm9ucGFnaW5nIHRvIHBhZ2luZyAqLwogCQl2bWNzX3dyaXRlMzIoQ1BVX0JBU0VEX1ZNX0VYRUNfQ09OVFJPTCwKQEAgLTE2NTQsMjMgKzE3MTksMTMgQEAKIAkJCSAgICAgfihDUFVfQkFTRURfQ1IzX0xPQURfRVhJVElORyB8CiAJCQkgICAgICAgQ1BVX0JBU0VEX0NSM19TVE9SRV9FWElUSU5HKSk7CiAJCXZjcHUtPmFyY2guY3IwID0gY3IwOwotCQl2bXhfc2V0X2NyNCh2Y3B1LCB2Y3B1LT5hcmNoLmNyNCk7CisJCXZteF9zZXRfY3I0KHZjcHUsIGt2bV9yZWFkX2NyNCh2Y3B1KSk7CiAJfQogCiAJaWYgKCEoY3IwICYgWDg2X0NSMF9XUCkpCiAJCSpod19jcjAgJj0gflg4Nl9DUjBfV1A7CiB9CiAKLXN0YXRpYyB2b2lkIGVwdF91cGRhdGVfcGFnaW5nX21vZGVfY3I0KHVuc2lnbmVkIGxvbmcgKmh3X2NyNCwKLQkJCQkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQotewotCWlmICghaXNfcGFnaW5nKHZjcHUpKSB7Ci0JCSpod19jcjQgJj0gflg4Nl9DUjRfUEFFOwotCQkqaHdfY3I0IHw9IFg4Nl9DUjRfUFNFOwotCX0gZWxzZSBpZiAoISh2Y3B1LT5hcmNoLmNyNCAmIFg4Nl9DUjRfUEFFKSkKLQkJKmh3X2NyNCAmPSB+WDg2X0NSNF9QQUU7Ci19Ci0KIHN0YXRpYyB2b2lkIHZteF9zZXRfY3IwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjApCiB7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CkBAIC0xNjgyLDggKzE3MzcsNiBAQAogCWVsc2UKIAkJaHdfY3IwID0gKGNyMCAmIH5LVk1fR1VFU1RfQ1IwX01BU0spIHwgS1ZNX1ZNX0NSMF9BTFdBWVNfT047CiAKLQl2bXhfZnB1X2RlYWN0aXZhdGUodmNwdSk7Ci0KIAlpZiAodm14LT5ybW9kZS52bTg2X2FjdGl2ZSAmJiAoY3IwICYgWDg2X0NSMF9QRSkpCiAJCWVudGVyX3Btb2RlKHZjcHUpOwogCkBAIC0xNjkxLDcgKzE3NDQsNyBAQAogCQllbnRlcl9ybW9kZSh2Y3B1KTsKIAogI2lmZGVmIENPTkZJR19YODZfNjQKLQlpZiAodmNwdS0+YXJjaC5zaGFkb3dfZWZlciAmIEVGRVJfTE1FKSB7CisJaWYgKHZjcHUtPmFyY2guZWZlciAmIEVGRVJfTE1FKSB7CiAJCWlmICghaXNfcGFnaW5nKHZjcHUpICYmIChjcjAgJiBYODZfQ1IwX1BHKSkKIAkJCWVudGVyX2xtb2RlKHZjcHUpOwogCQlpZiAoaXNfcGFnaW5nKHZjcHUpICYmICEoY3IwICYgWDg2X0NSMF9QRykpCkBAIC0xNzAyLDEyICsxNzU1LDEyIEBACiAJaWYgKGVuYWJsZV9lcHQpCiAJCWVwdF91cGRhdGVfcGFnaW5nX21vZGVfY3IwKCZod19jcjAsIGNyMCwgdmNwdSk7CiAKKwlpZiAoIXZjcHUtPmZwdV9hY3RpdmUpCisJCWh3X2NyMCB8PSBYODZfQ1IwX1RTIHwgWDg2X0NSMF9NUDsKKwogCXZtY3Nfd3JpdGVsKENSMF9SRUFEX1NIQURPVywgY3IwKTsKIAl2bWNzX3dyaXRlbChHVUVTVF9DUjAsIGh3X2NyMCk7CiAJdmNwdS0+YXJjaC5jcjAgPSBjcjA7Ci0KLQlpZiAoIShjcjAgJiBYODZfQ1IwX1RTKSB8fCAhKGNyMCAmIFg4Nl9DUjBfUEUpKQotCQl2bXhfZnB1X2FjdGl2YXRlKHZjcHUpOwogfQogCiBzdGF0aWMgdTY0IGNvbnN0cnVjdF9lcHRwKHVuc2lnbmVkIGxvbmcgcm9vdF9ocGEpCkBAIC0xNzM4LDggKzE3OTEsNiBAQAogCiAJdm14X2ZsdXNoX3RsYih2Y3B1KTsKIAl2bWNzX3dyaXRlbChHVUVTVF9DUjMsIGd1ZXN0X2NyMyk7Ci0JaWYgKHZjcHUtPmFyY2guY3IwICYgWDg2X0NSMF9QRSkKLQkJdm14X2ZwdV9kZWFjdGl2YXRlKHZjcHUpOwogfQogCiBzdGF0aWMgdm9pZCB2bXhfc2V0X2NyNChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3I0KQpAQCAtMTc0OCw4ICsxNzk5LDE0IEBACiAJCSAgICBLVk1fUk1PREVfVk1fQ1I0X0FMV0FZU19PTiA6IEtWTV9QTU9ERV9WTV9DUjRfQUxXQVlTX09OKTsKIAogCXZjcHUtPmFyY2guY3I0ID0gY3I0OwotCWlmIChlbmFibGVfZXB0KQotCQllcHRfdXBkYXRlX3BhZ2luZ19tb2RlX2NyNCgmaHdfY3I0LCB2Y3B1KTsKKwlpZiAoZW5hYmxlX2VwdCkgeworCQlpZiAoIWlzX3BhZ2luZyh2Y3B1KSkgeworCQkJaHdfY3I0ICY9IH5YODZfQ1I0X1BBRTsKKwkJCWh3X2NyNCB8PSBYODZfQ1I0X1BTRTsKKwkJfSBlbHNlIGlmICghKGNyNCAmIFg4Nl9DUjRfUEFFKSkgeworCQkJaHdfY3I0ICY9IH5YODZfQ1I0X1BBRTsKKwkJfQorCX0KIAogCXZtY3Nfd3JpdGVsKENSNF9SRUFEX1NIQURPVywgY3I0KTsKIAl2bWNzX3dyaXRlbChHVUVTVF9DUjQsIGh3X2NyNCk7CkBAIC0xNzg3LDcgKzE4NDQsNyBAQAogCiBzdGF0aWMgaW50IHZteF9nZXRfY3BsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlpZiAoISh2Y3B1LT5hcmNoLmNyMCAmIFg4Nl9DUjBfUEUpKSAvKiBpZiByZWFsIG1vZGUgKi8KKwlpZiAoIWlzX3Byb3Rtb2RlKHZjcHUpKQogCQlyZXR1cm4gMDsKIAogCWlmICh2bXhfZ2V0X3JmbGFncyh2Y3B1KSAmIFg4Nl9FRkxBR1NfVk0pIC8qIGlmIHZpcnR1YWwgODA4NiAqLwpAQCAtMjA0Miw3ICsyMDk5LDcgQEAKIHN0YXRpYyBib29sIGd1ZXN0X3N0YXRlX3ZhbGlkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAkvKiByZWFsIG1vZGUgZ3Vlc3Qgc3RhdGUgY2hlY2tzICovCi0JaWYgKCEodmNwdS0+YXJjaC5jcjAgJiBYODZfQ1IwX1BFKSkgeworCWlmICghaXNfcHJvdG1vZGUodmNwdSkpIHsKIAkJaWYgKCFybW9kZV9zZWdtZW50X3ZhbGlkKHZjcHUsIFZDUFVfU1JFR19DUykpCiAJCQlyZXR1cm4gZmFsc2U7CiAJCWlmICghcm1vZGVfc2VnbWVudF92YWxpZCh2Y3B1LCBWQ1BVX1NSRUdfU1MpKQpAQCAtMjE3NSw3ICsyMjMyLDcgQEAKIAlzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uIGt2bV91c2Vyc3BhY2VfbWVtOwogCWludCByID0gMDsKIAotCWRvd25fd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CisJbXV0ZXhfbG9jaygma3ZtLT5zbG90c19sb2NrKTsKIAlpZiAoa3ZtLT5hcmNoLmFwaWNfYWNjZXNzX3BhZ2UpCiAJCWdvdG8gb3V0OwogCWt2bV91c2Vyc3BhY2VfbWVtLnNsb3QgPSBBUElDX0FDQ0VTU19QQUdFX1BSSVZBVEVfTUVNU0xPVDsKQEAgLTIxODgsNyArMjI0NSw3IEBACiAKIAlrdm0tPmFyY2guYXBpY19hY2Nlc3NfcGFnZSA9IGdmbl90b19wYWdlKGt2bSwgMHhmZWUwMCk7CiBvdXQ6Ci0JdXBfd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPnNsb3RzX2xvY2spOwogCXJldHVybiByOwogfQogCkBAIC0yMTk3LDcgKzIyNTQsNyBAQAogCXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24ga3ZtX3VzZXJzcGFjZV9tZW07CiAJaW50IHIgPSAwOwogCi0JZG93bl93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKKwltdXRleF9sb2NrKCZrdm0tPnNsb3RzX2xvY2spOwogCWlmIChrdm0tPmFyY2guZXB0X2lkZW50aXR5X3BhZ2V0YWJsZSkKIAkJZ290byBvdXQ7CiAJa3ZtX3VzZXJzcGFjZV9tZW0uc2xvdCA9IElERU5USVRZX1BBR0VUQUJMRV9QUklWQVRFX01FTVNMT1Q7CkBAIC0yMjEyLDcgKzIyNjksNyBAQAogCWt2bS0+YXJjaC5lcHRfaWRlbnRpdHlfcGFnZXRhYmxlID0gZ2ZuX3RvX3BhZ2Uoa3ZtLAogCQkJa3ZtLT5hcmNoLmVwdF9pZGVudGl0eV9tYXBfYWRkciA+PiBQQUdFX1NISUZUKTsKIG91dDoKLQl1cF93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKKwltdXRleF91bmxvY2soJmt2bS0+c2xvdHNfbG9jayk7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTIzODQsMTQgKzI0NDEsMTIgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTlJfVk1YX01TUjsgKytpKSB7CiAJCXUzMiBpbmRleCA9IHZteF9tc3JfaW5kZXhbaV07CiAJCXUzMiBkYXRhX2xvdywgZGF0YV9oaWdoOwotCQl1NjQgZGF0YTsKIAkJaW50IGogPSB2bXgtPm5tc3JzOwogCiAJCWlmIChyZG1zcl9zYWZlKGluZGV4LCAmZGF0YV9sb3csICZkYXRhX2hpZ2gpIDwgMCkKIAkJCWNvbnRpbnVlOwogCQlpZiAod3Jtc3Jfc2FmZShpbmRleCwgZGF0YV9sb3csIGRhdGFfaGlnaCkgPCAwKQogCQkJY29udGludWU7Ci0JCWRhdGEgPSBkYXRhX2xvdyB8ICgodTY0KWRhdGFfaGlnaCA8PCAzMik7CiAJCXZteC0+Z3Vlc3RfbXNyc1tqXS5pbmRleCA9IGk7CiAJCXZteC0+Z3Vlc3RfbXNyc1tqXS5kYXRhID0gMDsKIAkJdm14LT5ndWVzdF9tc3JzW2pdLm1hc2sgPSAtMXVsbDsKQEAgLTI0MDQsNyArMjQ1OSwxMCBAQAogCXZtY3Nfd3JpdGUzMihWTV9FTlRSWV9DT05UUk9MUywgdm1jc19jb25maWcudm1lbnRyeV9jdHJsKTsKIAogCXZtY3Nfd3JpdGVsKENSMF9HVUVTVF9IT1NUX01BU0ssIH4wVUwpOwotCXZtY3Nfd3JpdGVsKENSNF9HVUVTVF9IT1NUX01BU0ssIEtWTV9HVUVTVF9DUjRfTUFTSyk7CisJdm14LT52Y3B1LmFyY2guY3I0X2d1ZXN0X293bmVkX2JpdHMgPSBLVk1fQ1I0X0dVRVNUX09XTkVEX0JJVFM7CisJaWYgKGVuYWJsZV9lcHQpCisJCXZteC0+dmNwdS5hcmNoLmNyNF9ndWVzdF9vd25lZF9iaXRzIHw9IFg4Nl9DUjRfUEdFOworCXZtY3Nfd3JpdGVsKENSNF9HVUVTVF9IT1NUX01BU0ssIH52bXgtPnZjcHUuYXJjaC5jcjRfZ3Vlc3Rfb3duZWRfYml0cyk7CiAKIAl0c2NfYmFzZSA9IHZteC0+dmNwdS5rdm0tPmFyY2gudm1faW5pdF90c2M7CiAJcmR0c2NsbCh0c2NfdGhpcyk7CkBAIC0yNDI5LDEwICsyNDg3LDEwIEBACiB7CiAJc3RydWN0IHZjcHVfdm14ICp2bXggPSB0b192bXgodmNwdSk7CiAJdTY0IG1zcjsKLQlpbnQgcmV0OworCWludCByZXQsIGlkeDsKIAogCXZjcHUtPmFyY2gucmVnc19hdmFpbCA9IH4oKDEgPDwgVkNQVV9SRUdTX1JJUCkgfCAoMSA8PCBWQ1BVX1JFR1NfUlNQKSk7Ci0JZG93bl9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOworCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZ2Y3B1LT5rdm0tPnNyY3UpOwogCWlmICghaW5pdF9ybW9kZSh2bXgtPnZjcHUua3ZtKSkgewogCQlyZXQgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKQEAgLTI1MjYsNyArMjU4NCw3IEBACiAJCXZtY3Nfd3JpdGUxNihWSVJUVUFMX1BST0NFU1NPUl9JRCwgdm14LT52cGlkKTsKIAogCXZteC0+dmNwdS5hcmNoLmNyMCA9IFg4Nl9DUjBfTlcgfCBYODZfQ1IwX0NEIHwgWDg2X0NSMF9FVDsKLQl2bXhfc2V0X2NyMCgmdm14LT52Y3B1LCB2bXgtPnZjcHUuYXJjaC5jcjApOyAvKiBlbnRlciBybW9kZSAqLworCXZteF9zZXRfY3IwKCZ2bXgtPnZjcHUsIGt2bV9yZWFkX2NyMCh2Y3B1KSk7IC8qIGVudGVyIHJtb2RlICovCiAJdm14X3NldF9jcjQoJnZteC0+dmNwdSwgMCk7CiAJdm14X3NldF9lZmVyKCZ2bXgtPnZjcHUsIDApOwogCXZteF9mcHVfYWN0aXZhdGUoJnZteC0+dmNwdSk7CkBAIC0yNTQwLDcgKzI1OTgsNyBAQAogCXZteC0+ZW11bGF0aW9uX3JlcXVpcmVkID0gMDsKIAogb3V0OgotCXVwX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CisJc3JjdV9yZWFkX3VubG9jaygmdmNwdS0+a3ZtLT5zcmN1LCBpZHgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI3MTcsNiArMjc3NSwxMiBAQAogCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIHZlYyk7CiAJCXJldHVybiAxOwogCWNhc2UgQlBfVkVDVE9SOgorCQkvKgorCQkgKiBVcGRhdGUgaW5zdHJ1Y3Rpb24gbGVuZ3RoIGFzIHdlIG1heSByZWluamVjdCB0aGUgZXhjZXB0aW9uCisJCSAqIGZyb20gdXNlciBzcGFjZSB3aGlsZSBpbiBndWVzdCBkZWJ1Z2dpbmcgbW9kZS4KKwkJICovCisJCXRvX3ZteCh2Y3B1KS0+dmNwdS5hcmNoLmV2ZW50X2V4aXRfaW5zdF9sZW4gPQorCQkJdm1jc19yZWFkMzIoVk1fRVhJVF9JTlNUUlVDVElPTl9MRU4pOwogCQlpZiAodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX1NXX0JQKQogCQkJcmV0dXJuIDA7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwpAQCAtMjgzOSw2ICsyOTAzLDEzIEBACiAJCWt2bV9ydW4tPmRlYnVnLmFyY2guZHI3ID0gdm1jc19yZWFkbChHVUVTVF9EUjcpOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIEJQX1ZFQ1RPUjoKKwkJLyoKKwkJICogVXBkYXRlIGluc3RydWN0aW9uIGxlbmd0aCBhcyB3ZSBtYXkgcmVpbmplY3QgI0JQIGZyb20KKwkJICogdXNlciBzcGFjZSB3aGlsZSBpbiBndWVzdCBkZWJ1Z2dpbmcgbW9kZS4gUmVhZGluZyBpdCBmb3IKKwkJICogI0RCIGFzIHdlbGwgY2F1c2VzIG5vIGhhcm0sIGl0IGlzIG5vdCB1c2VkIGluIHRoYXQgY2FzZS4KKwkJICovCisJCXZteC0+dmNwdS5hcmNoLmV2ZW50X2V4aXRfaW5zdF9sZW4gPQorCQkJdm1jc19yZWFkMzIoVk1fRVhJVF9JTlNUUlVDVElPTl9MRU4pOwogCQlrdm1fcnVuLT5leGl0X3JlYXNvbiA9IEtWTV9FWElUX0RFQlVHOwogCQlrdm1fcnVuLT5kZWJ1Zy5hcmNoLnBjID0gdm1jc19yZWFkbChHVUVTVF9DU19CQVNFKSArIHJpcDsKIAkJa3ZtX3J1bi0+ZGVidWcuYXJjaC5leGNlcHRpb24gPSBleF9ubzsKQEAgLTI5NDAsMTEgKzMwMTEsMTAgQEAKIAkJfTsKIAkJYnJlYWs7CiAJY2FzZSAyOiAvKiBjbHRzICovCi0JCXZteF9mcHVfZGVhY3RpdmF0ZSh2Y3B1KTsKLQkJdmNwdS0+YXJjaC5jcjAgJj0gflg4Nl9DUjBfVFM7Ci0JCXZtY3Nfd3JpdGVsKENSMF9SRUFEX1NIQURPVywgdmNwdS0+YXJjaC5jcjApOwotCQl2bXhfZnB1X2FjdGl2YXRlKHZjcHUpOworCQl2bXhfc2V0X2NyMCh2Y3B1LCBrdm1fcmVhZF9jcjBfYml0cyh2Y3B1LCB+WDg2X0NSMF9UUykpOworCQl0cmFjZV9rdm1fY3Jfd3JpdGUoMCwga3ZtX3JlYWRfY3IwKHZjcHUpKTsKIAkJc2tpcF9lbXVsYXRlZF9pbnN0cnVjdGlvbih2Y3B1KTsKKwkJdm14X2ZwdV9hY3RpdmF0ZSh2Y3B1KTsKIAkJcmV0dXJuIDE7CiAJY2FzZSAxOiAvKm1vdiBmcm9tIGNyKi8KIAkJc3dpdGNoIChjcikgewpAQCAtMjk2Miw3ICszMDMyLDkgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIDM6IC8qIGxtc3cgKi8KLQkJa3ZtX2xtc3codmNwdSwgKGV4aXRfcXVhbGlmaWNhdGlvbiA+PiBMTVNXX1NPVVJDRV9EQVRBX1NISUZUKSAmIDB4MGYpOworCQl2YWwgPSAoZXhpdF9xdWFsaWZpY2F0aW9uID4+IExNU1dfU09VUkNFX0RBVEFfU0hJRlQpICYgMHgwZjsKKwkJdHJhY2Vfa3ZtX2NyX3dyaXRlKDAsIChrdm1fcmVhZF9jcjAodmNwdSkgJiB+MHhmdWwpIHwgdmFsKTsKKwkJa3ZtX2xtc3codmNwdSwgdmFsKTsKIAogCQlza2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwogCQlyZXR1cm4gMTsKQEAgLTI5NzUsMTIgKzMwNDcsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjaGVja19kcl9hbGlhcyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJaWYgKGt2bV9yZWFkX2NyNF9iaXRzKHZjcHUsIFg4Nl9DUjRfREUpKSB7CisJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBoYW5kbGVfZHIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCXVuc2lnbmVkIGxvbmcgZXhpdF9xdWFsaWZpY2F0aW9uOwogCXVuc2lnbmVkIGxvbmcgdmFsOwogCWludCBkciwgcmVnOwogCisJLyogRG8gbm90IGhhbmRsZSBpZiB0aGUgQ1BMID4gMCwgd2lsbCB0cmlnZ2VyIEdQIG9uIHJlLWVudHJ5ICovCiAJaWYgKCFrdm1fcmVxdWlyZV9jcGwodmNwdSwgMCkpCiAJCXJldHVybiAxOwogCWRyID0gdm1jc19yZWFkbChHVUVTVF9EUjcpOwpAQCAtMzAxNiwxNCArMzA5OCwyMCBAQAogCQljYXNlIDAgLi4uIDM6CiAJCQl2YWwgPSB2Y3B1LT5hcmNoLmRiW2RyXTsKIAkJCWJyZWFrOworCQljYXNlIDQ6CisJCQlpZiAoY2hlY2tfZHJfYWxpYXModmNwdSkgPCAwKQorCQkJCXJldHVybiAxOworCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCWNhc2UgNjoKIAkJCXZhbCA9IHZjcHUtPmFyY2guZHI2OwogCQkJYnJlYWs7Ci0JCWNhc2UgNzoKKwkJY2FzZSA1OgorCQkJaWYgKGNoZWNrX2RyX2FsaWFzKHZjcHUpIDwgMCkKKwkJCQlyZXR1cm4gMTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQlkZWZhdWx0OiAvKiA3ICovCiAJCQl2YWwgPSB2Y3B1LT5hcmNoLmRyNzsKIAkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJdmFsID0gMDsKIAkJfQogCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgcmVnLCB2YWwpOwogCX0gZWxzZSB7CkBAIC0zMDM0LDIxICszMTIyLDI1IEBACiAJCQlpZiAoISh2Y3B1LT5ndWVzdF9kZWJ1ZyAmIEtWTV9HVUVTVERCR19VU0VfSFdfQlApKQogCQkJCXZjcHUtPmFyY2guZWZmX2RiW2RyXSA9IHZhbDsKIAkJCWJyZWFrOwotCQljYXNlIDQgLi4uIDU6Ci0JCQlpZiAodmNwdS0+YXJjaC5jcjQgJiBYODZfQ1I0X0RFKQotCQkJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTsKLQkJCWJyZWFrOworCQljYXNlIDQ6CisJCQlpZiAoY2hlY2tfZHJfYWxpYXModmNwdSkgPCAwKQorCQkJCXJldHVybiAxOworCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCWNhc2UgNjoKIAkJCWlmICh2YWwgJiAweGZmZmZmZmZmMDAwMDAwMDBVTEwpIHsKLQkJCQlrdm1fcXVldWVfZXhjZXB0aW9uKHZjcHUsIEdQX1ZFQ1RPUik7Ci0JCQkJYnJlYWs7CisJCQkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKKwkJCQlyZXR1cm4gMTsKIAkJCX0KIAkJCXZjcHUtPmFyY2guZHI2ID0gKHZhbCAmIERSNl9WT0xBVElMRSkgfCBEUjZfRklYRURfMTsKIAkJCWJyZWFrOwotCQljYXNlIDc6CisJCWNhc2UgNToKKwkJCWlmIChjaGVja19kcl9hbGlhcyh2Y3B1KSA8IDApCisJCQkJcmV0dXJuIDE7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KKwkJZGVmYXVsdDogLyogNyAqLwogCQkJaWYgKHZhbCAmIDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCkgewotCQkJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgR1BfVkVDVE9SKTsKLQkJCQlicmVhazsKKwkJCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOworCQkJCXJldHVybiAxOwogCQkJfQogCQkJdmNwdS0+YXJjaC5kcjcgPSAodmFsICYgRFI3X1ZPTEFUSUxFKSB8IERSN19GSVhFRF8xOwogCQkJaWYgKCEodmNwdS0+Z3Vlc3RfZGVidWcgJiBLVk1fR1VFU1REQkdfVVNFX0hXX0JQKSkgewpAQCAtMzA3NSw2ICszMTY3LDcgQEAKIAl1NjQgZGF0YTsKIAogCWlmICh2bXhfZ2V0X21zcih2Y3B1LCBlY3gsICZkYXRhKSkgeworCQl0cmFjZV9rdm1fbXNyX3JlYWRfZXgoZWN4KTsKIAkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMzA5NCwxMyArMzE4NywxMyBAQAogCXU2NCBkYXRhID0gKHZjcHUtPmFyY2gucmVnc1tWQ1BVX1JFR1NfUkFYXSAmIC0xdSkKIAkJfCAoKHU2NCkodmNwdS0+YXJjaC5yZWdzW1ZDUFVfUkVHU19SRFhdICYgLTF1KSA8PCAzMik7CiAKLQl0cmFjZV9rdm1fbXNyX3dyaXRlKGVjeCwgZGF0YSk7Ci0KIAlpZiAodm14X3NldF9tc3IodmNwdSwgZWN4LCBkYXRhKSAhPSAwKSB7CisJCXRyYWNlX2t2bV9tc3Jfd3JpdGVfZXgoZWN4LCBkYXRhKTsKIAkJa3ZtX2luamVjdF9ncCh2Y3B1LCAwKTsKIAkJcmV0dXJuIDE7CiAJfQogCisJdHJhY2Vfa3ZtX21zcl93cml0ZShlY3gsIGRhdGEpOwogCXNraXBfZW11bGF0ZWRfaW5zdHJ1Y3Rpb24odmNwdSk7CiAJcmV0dXJuIDE7CiB9CkBAIC0zMzg1LDcgKzM0NzgsNiBAQAogCQl9CiAKIAkJaWYgKGVyciAhPSBFTVVMQVRFX0RPTkUpIHsKLQkJCWt2bV9yZXBvcnRfZW11bGF0aW9uX2ZhaWx1cmUodmNwdSwgImVtdWxhdGlvbiBmYWlsdXJlIik7CiAJCQl2Y3B1LT5ydW4tPmV4aXRfcmVhc29uID0gS1ZNX0VYSVRfSU5URVJOQUxfRVJST1I7CiAJCQl2Y3B1LT5ydW4tPmludGVybmFsLnN1YmVycm9yID0gS1ZNX0lOVEVSTkFMX0VSUk9SX0VNVUxBVElPTjsKIAkJCXZjcHUtPnJ1bi0+aW50ZXJuYWwubmRhdGEgPSAwOwpAQCAtMzQxNiw2ICszNTA4LDEyIEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbnQgaGFuZGxlX2ludmFsaWRfb3Aoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTsKKwlyZXR1cm4gMTsKK30KKwogLyoKICAqIFRoZSBleGl0IGhhbmRsZXJzIHJldHVybiAxIGlmIHRoZSBleGl0IHdhcyBoYW5kbGVkIGZ1bGx5IGFuZCBndWVzdCBleGVjdXRpb24KICAqIG1heSByZXN1bWUuICBPdGhlcndpc2UgdGhleSBzZXQgdGhlIGt2bV9ydW4gcGFyYW1ldGVyIHRvIGluZGljYXRlIHdoYXQgbmVlZHMKQEAgLTM0NTMsNiArMzU1MSw4IEBACiAJW0VYSVRfUkVBU09OX0VQVF9WSU9MQVRJT05dCSAgICAgID0gaGFuZGxlX2VwdF92aW9sYXRpb24sCiAJW0VYSVRfUkVBU09OX0VQVF9NSVNDT05GSUddICAgICAgICAgICA9IGhhbmRsZV9lcHRfbWlzY29uZmlnLAogCVtFWElUX1JFQVNPTl9QQVVTRV9JTlNUUlVDVElPTl0gICAgICAgPSBoYW5kbGVfcGF1c2UsCisJW0VYSVRfUkVBU09OX01XQUlUX0lOU1RSVUNUSU9OXQkgICAgICA9IGhhbmRsZV9pbnZhbGlkX29wLAorCVtFWElUX1JFQVNPTl9NT05JVE9SX0lOU1RSVUNUSU9OXSAgICAgPSBoYW5kbGVfaW52YWxpZF9vcCwKIH07CiAKIHN0YXRpYyBjb25zdCBpbnQga3ZtX3ZteF9tYXhfZXhpdF9oYW5kbGVycyA9CkBAIC0zNjg2LDkgKzM3ODYsNiBAQAogCSAqLwogCXZtY3Nfd3JpdGVsKEhPU1RfQ1IwLCByZWFkX2NyMCgpKTsKIAotCWlmICh2Y3B1LT5hcmNoLnN3aXRjaF9kYl9yZWdzKQotCQlzZXRfZGVidWdyZWcodmNwdS0+YXJjaC5kcjYsIDYpOwotCiAJYXNtKAogCQkvKiBTdG9yZSBob3N0IHJlZ2lzdGVycyAqLwogCQkicHVzaCAlJSJSImR4OyBwdXNoICUlIlIiYnA7IgpAQCAtMzc4OSw5ICszODg2LDYgQEAKIAkJCQkgIHwgKDEgPDwgVkNQVV9FWFJFR19QRFBUUikpOwogCXZjcHUtPmFyY2gucmVnc19kaXJ0eSA9IDA7CiAKLQlpZiAodmNwdS0+YXJjaC5zd2l0Y2hfZGJfcmVncykKLQkJZ2V0X2RlYnVncmVnKHZjcHUtPmFyY2guZHI2LCA2KTsKLQogCXZteC0+aWR0X3ZlY3RvcmluZ19pbmZvID0gdm1jc19yZWFkMzIoSURUX1ZFQ1RPUklOR19JTkZPX0ZJRUxEKTsKIAlpZiAodm14LT5ybW9kZS5pcnEucGVuZGluZykKIAkJZml4dXBfcm1vZGVfaXJxKHZteCk7CkBAIC0zOTIwLDcgKzQwMTQsNyBAQAogCSAqICAgYi4gVlQtZCB3aXRoIHNub29waW5nIGNvbnRyb2wgZmVhdHVyZTogc25vb3BpbmcgY29udHJvbCBmZWF0dXJlIG9mCiAJICoJVlQtZCBlbmdpbmUgY2FuIGd1YXJhbnRlZSB0aGUgY2FjaGUgY29ycmVjdG5lc3MuIEp1c3Qgc2V0IGl0CiAJICoJdG8gV0IgdG8ga2VlcCBjb25zaXN0ZW50IHdpdGggaG9zdC4gU28gdGhlIHNhbWUgYXMgaXRlbSAzLgotCSAqIDMuIEVQVCB3aXRob3V0IFZULWQ6IGFsd2F5cyBtYXAgYXMgV0IgYW5kIHNldCBJR01UPTEgdG8ga2VlcAorCSAqIDMuIEVQVCB3aXRob3V0IFZULWQ6IGFsd2F5cyBtYXAgYXMgV0IgYW5kIHNldCBJUEFUPTEgdG8ga2VlcAogCSAqICAgIGNvbnNpc3RlbnQgd2l0aCBob3N0IE1UUlIKIAkgKi8KIAlpZiAoaXNfbW1pbykKQEAgLTM5MzEsMzcgKzQwMjUsODggQEAKIAkJICAgICAgVk1YX0VQVF9NVF9FUFRFX1NISUZUOwogCWVsc2UKIAkJcmV0ID0gKE1UUlJfVFlQRV9XUkJBQ0sgPDwgVk1YX0VQVF9NVF9FUFRFX1NISUZUKQotCQkJfCBWTVhfRVBUX0lHTVRfQklUOworCQkJfCBWTVhfRVBUX0lQQVRfQklUOwogCiAJcmV0dXJuIHJldDsKIH0KIAorI2RlZmluZSBfRVIoeCkgeyBFWElUX1JFQVNPTl8jI3gsICN4IH0KKwogc3RhdGljIGNvbnN0IHN0cnVjdCB0cmFjZV9wcmludF9mbGFncyB2bXhfZXhpdF9yZWFzb25zX3N0cltdID0gewotCXsgRVhJVF9SRUFTT05fRVhDRVBUSU9OX05NSSwgICAgICAgICAgICJleGNlcHRpb24iIH0sCi0JeyBFWElUX1JFQVNPTl9FWFRFUk5BTF9JTlRFUlJVUFQsICAgICAgImV4dF9pcnEiIH0sCi0JeyBFWElUX1JFQVNPTl9UUklQTEVfRkFVTFQsICAgICAgICAgICAgInRyaXBsZV9mYXVsdCIgfSwKLQl7IEVYSVRfUkVBU09OX05NSV9XSU5ET1csICAgICAgICAgICAgICAibm1pX3dpbmRvdyIgfSwKLQl7IEVYSVRfUkVBU09OX0lPX0lOU1RSVUNUSU9OLCAgICAgICAgICAiaW9faW5zdHJ1Y3Rpb24iIH0sCi0JeyBFWElUX1JFQVNPTl9DUl9BQ0NFU1MsICAgICAgICAgICAgICAgImNyX2FjY2VzcyIgfSwKLQl7IEVYSVRfUkVBU09OX0RSX0FDQ0VTUywgICAgICAgICAgICAgICAiZHJfYWNjZXNzIiB9LAotCXsgRVhJVF9SRUFTT05fQ1BVSUQsICAgICAgICAgICAgICAgICAgICJjcHVpZCIgfSwKLQl7IEVYSVRfUkVBU09OX01TUl9SRUFELCAgICAgICAgICAgICAgICAicmRtc3IiIH0sCi0JeyBFWElUX1JFQVNPTl9NU1JfV1JJVEUsICAgICAgICAgICAgICAgIndybXNyIiB9LAotCXsgRVhJVF9SRUFTT05fUEVORElOR19JTlRFUlJVUFQsICAgICAgICJpbnRlcnJ1cHRfd2luZG93IiB9LAotCXsgRVhJVF9SRUFTT05fSExULCAgICAgICAgICAgICAgICAgICAgICJoYWx0IiB9LAotCXsgRVhJVF9SRUFTT05fSU5WTFBHLCAgICAgICAgICAgICAgICAgICJpbnZscGciIH0sCi0JeyBFWElUX1JFQVNPTl9WTUNBTEwsICAgICAgICAgICAgICAgICAgImh5cGVyY2FsbCIgfSwKLQl7IEVYSVRfUkVBU09OX1RQUl9CRUxPV19USFJFU0hPTEQsICAgICAidHByX2JlbG93X3RocmVzIiB9LAotCXsgRVhJVF9SRUFTT05fQVBJQ19BQ0NFU1MsICAgICAgICAgICAgICJhcGljX2FjY2VzcyIgfSwKLQl7IEVYSVRfUkVBU09OX1dCSU5WRCwgICAgICAgICAgICAgICAgICAid2JpbnZkIiB9LAotCXsgRVhJVF9SRUFTT05fVEFTS19TV0lUQ0gsICAgICAgICAgICAgICJ0YXNrX3N3aXRjaCIgfSwKLQl7IEVYSVRfUkVBU09OX0VQVF9WSU9MQVRJT04sICAgICAgICAgICAiZXB0X3Zpb2xhdGlvbiIgfSwKKwlfRVIoRVhDRVBUSU9OX05NSSksCisJX0VSKEVYVEVSTkFMX0lOVEVSUlVQVCksCisJX0VSKFRSSVBMRV9GQVVMVCksCisJX0VSKFBFTkRJTkdfSU5URVJSVVBUKSwKKwlfRVIoTk1JX1dJTkRPVyksCisJX0VSKFRBU0tfU1dJVENIKSwKKwlfRVIoQ1BVSUQpLAorCV9FUihITFQpLAorCV9FUihJTlZMUEcpLAorCV9FUihSRFBNQyksCisJX0VSKFJEVFNDKSwKKwlfRVIoVk1DQUxMKSwKKwlfRVIoVk1DTEVBUiksCisJX0VSKFZNTEFVTkNIKSwKKwlfRVIoVk1QVFJMRCksCisJX0VSKFZNUFRSU1QpLAorCV9FUihWTVJFQUQpLAorCV9FUihWTVJFU1VNRSksCisJX0VSKFZNV1JJVEUpLAorCV9FUihWTU9GRiksCisJX0VSKFZNT04pLAorCV9FUihDUl9BQ0NFU1MpLAorCV9FUihEUl9BQ0NFU1MpLAorCV9FUihJT19JTlNUUlVDVElPTiksCisJX0VSKE1TUl9SRUFEKSwKKwlfRVIoTVNSX1dSSVRFKSwKKwlfRVIoTVdBSVRfSU5TVFJVQ1RJT04pLAorCV9FUihNT05JVE9SX0lOU1RSVUNUSU9OKSwKKwlfRVIoUEFVU0VfSU5TVFJVQ1RJT04pLAorCV9FUihNQ0VfRFVSSU5HX1ZNRU5UUlkpLAorCV9FUihUUFJfQkVMT1dfVEhSRVNIT0xEKSwKKwlfRVIoQVBJQ19BQ0NFU1MpLAorCV9FUihFUFRfVklPTEFUSU9OKSwKKwlfRVIoRVBUX01JU0NPTkZJRyksCisJX0VSKFdCSU5WRCksCiAJeyAtMSwgTlVMTCB9CiB9OwogCi1zdGF0aWMgYm9vbCB2bXhfZ2JfcGFnZV9lbmFibGUodm9pZCkKKyN1bmRlZiBfRVIKKworc3RhdGljIGludCB2bXhfZ2V0X2xwYWdlX2xldmVsKHZvaWQpCiB7Ci0JcmV0dXJuIGZhbHNlOworCWlmIChlbmFibGVfZXB0ICYmICFjcHVfaGFzX3ZteF9lcHRfMWdfcGFnZSgpKQorCQlyZXR1cm4gUFRfRElSRUNUT1JZX0xFVkVMOworCWVsc2UKKwkJLyogRm9yIHNoYWRvdyBhbmQgRVBUIHN1cHBvcnRlZCAxR0IgcGFnZSAqLworCQlyZXR1cm4gUFRfUERQRV9MRVZFTDsKK30KKworc3RhdGljIGlubGluZSB1MzIgYml0KGludCBiaXRubykKK3sKKwlyZXR1cm4gMSA8PCAoYml0bm8gJiAzMSk7Cit9CisKK3N0YXRpYyB2b2lkIHZteF9jcHVpZF91cGRhdGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXN0cnVjdCBrdm1fY3B1aWRfZW50cnkyICpiZXN0OworCXN0cnVjdCB2Y3B1X3ZteCAqdm14ID0gdG9fdm14KHZjcHUpOworCXUzMiBleGVjX2NvbnRyb2w7CisKKwl2bXgtPnJkdHNjcF9lbmFibGVkID0gZmFsc2U7CisJaWYgKHZteF9yZHRzY3Bfc3VwcG9ydGVkKCkpIHsKKwkJZXhlY19jb250cm9sID0gdm1jc19yZWFkMzIoU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCk7CisJCWlmIChleGVjX2NvbnRyb2wgJiBTRUNPTkRBUllfRVhFQ19SRFRTQ1ApIHsKKwkJCWJlc3QgPSBrdm1fZmluZF9jcHVpZF9lbnRyeSh2Y3B1LCAweDgwMDAwMDAxLCAwKTsKKwkJCWlmIChiZXN0ICYmIChiZXN0LT5lZHggJiBiaXQoWDg2X0ZFQVRVUkVfUkRUU0NQKSkpCisJCQkJdm14LT5yZHRzY3BfZW5hYmxlZCA9IHRydWU7CisJCQllbHNlIHsKKwkJCQlleGVjX2NvbnRyb2wgJj0gflNFQ09OREFSWV9FWEVDX1JEVFNDUDsKKwkJCQl2bWNzX3dyaXRlMzIoU0VDT05EQVJZX1ZNX0VYRUNfQ09OVFJPTCwKKwkJCQkJCWV4ZWNfY29udHJvbCk7CisJCQl9CisJCX0KKwl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qga3ZtX3g4Nl9vcHMgdm14X3g4Nl9vcHMgPSB7CkBAIC0zOTkwLDYgKzQxMzUsNyBAQAogCS5zZXRfc2VnbWVudCA9IHZteF9zZXRfc2VnbWVudCwKIAkuZ2V0X2NwbCA9IHZteF9nZXRfY3BsLAogCS5nZXRfY3NfZGJfbF9iaXRzID0gdm14X2dldF9jc19kYl9sX2JpdHMsCisJLmRlY2FjaGVfY3IwX2d1ZXN0X2JpdHMgPSB2bXhfZGVjYWNoZV9jcjBfZ3Vlc3RfYml0cywKIAkuZGVjYWNoZV9jcjRfZ3Vlc3RfYml0cyA9IHZteF9kZWNhY2hlX2NyNF9ndWVzdF9iaXRzLAogCS5zZXRfY3IwID0gdm14X3NldF9jcjAsCiAJLnNldF9jcjMgPSB2bXhfc2V0X2NyMywKQEAgLTQwMDIsNiArNDE0OCw4IEBACiAJLmNhY2hlX3JlZyA9IHZteF9jYWNoZV9yZWcsCiAJLmdldF9yZmxhZ3MgPSB2bXhfZ2V0X3JmbGFncywKIAkuc2V0X3JmbGFncyA9IHZteF9zZXRfcmZsYWdzLAorCS5mcHVfYWN0aXZhdGUgPSB2bXhfZnB1X2FjdGl2YXRlLAorCS5mcHVfZGVhY3RpdmF0ZSA9IHZteF9mcHVfZGVhY3RpdmF0ZSwKIAogCS50bGJfZmx1c2ggPSB2bXhfZmx1c2hfdGxiLAogCkBAIC00MDI3LDcgKzQxNzUsMTEgQEAKIAkuZ2V0X210X21hc2sgPSB2bXhfZ2V0X210X21hc2ssCiAKIAkuZXhpdF9yZWFzb25zX3N0ciA9IHZteF9leGl0X3JlYXNvbnNfc3RyLAotCS5nYl9wYWdlX2VuYWJsZSA9IHZteF9nYl9wYWdlX2VuYWJsZSwKKwkuZ2V0X2xwYWdlX2xldmVsID0gdm14X2dldF9scGFnZV9sZXZlbCwKKworCS5jcHVpZF91cGRhdGUgPSB2bXhfY3B1aWRfdXBkYXRlLAorCisJLnJkdHNjcF9zdXBwb3J0ZWQgPSB2bXhfcmR0c2NwX3N1cHBvcnRlZCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHZteF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0veDg2LmMgYi9hcmNoL3g4Ni9rdm0veDg2LmMKaW5kZXggYTFlMWJjOS4uZTQ2MjgyYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCisrKyBiL2FyY2gveDg2L2t2bS94ODYuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1ZnJlcS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzZXItcmV0dXJuLW5vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvc3JjdS5oPgogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9rdm0uaD4KICN1bmRlZiBUUkFDRV9JTkNMVURFX0ZJTEUKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwpAQCAtOTMsMTYgKzk0LDE2IEBACiAKIHN0cnVjdCBrdm1fc2hhcmVkX21zcnNfZ2xvYmFsIHsKIAlpbnQgbnI7Ci0Jc3RydWN0IGt2bV9zaGFyZWRfbXNyIHsKLQkJdTMyIG1zcjsKLQkJdTY0IHZhbHVlOwotCX0gbXNyc1tLVk1fTlJfU0hBUkVEX01TUlNdOworCXUzMiBtc3JzW0tWTV9OUl9TSEFSRURfTVNSU107CiB9OwogCiBzdHJ1Y3Qga3ZtX3NoYXJlZF9tc3JzIHsKIAlzdHJ1Y3QgdXNlcl9yZXR1cm5fbm90aWZpZXIgdXJuOwogCWJvb2wgcmVnaXN0ZXJlZDsKLQl1NjQgY3VycmVudF92YWx1ZVtLVk1fTlJfU0hBUkVEX01TUlNdOworCXN0cnVjdCBrdm1fc2hhcmVkX21zcl92YWx1ZXMgeworCQl1NjQgaG9zdDsKKwkJdTY0IGN1cnI7CisJfSB2YWx1ZXNbS1ZNX05SX1NIQVJFRF9NU1JTXTsKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qga3ZtX3NoYXJlZF9tc3JzX2dsb2JhbCBfX3JlYWRfbW9zdGx5IHNoYXJlZF9tc3JzX2dsb2JhbDsKQEAgLTE0Nyw1MyArMTQ4LDY0IEBACiBzdGF0aWMgdm9pZCBrdm1fb25fdXNlcl9yZXR1cm4oc3RydWN0IHVzZXJfcmV0dXJuX25vdGlmaWVyICp1cm4pCiB7CiAJdW5zaWduZWQgc2xvdDsKLQlzdHJ1Y3Qga3ZtX3NoYXJlZF9tc3IgKmdsb2JhbDsKIAlzdHJ1Y3Qga3ZtX3NoYXJlZF9tc3JzICpsb2NhbHMKIAkJPSBjb250YWluZXJfb2YodXJuLCBzdHJ1Y3Qga3ZtX3NoYXJlZF9tc3JzLCB1cm4pOworCXN0cnVjdCBrdm1fc2hhcmVkX21zcl92YWx1ZXMgKnZhbHVlczsKIAogCWZvciAoc2xvdCA9IDA7IHNsb3QgPCBzaGFyZWRfbXNyc19nbG9iYWwubnI7ICsrc2xvdCkgewotCQlnbG9iYWwgPSAmc2hhcmVkX21zcnNfZ2xvYmFsLm1zcnNbc2xvdF07Ci0JCWlmIChnbG9iYWwtPnZhbHVlICE9IGxvY2Fscy0+Y3VycmVudF92YWx1ZVtzbG90XSkgewotCQkJd3Jtc3JsKGdsb2JhbC0+bXNyLCBnbG9iYWwtPnZhbHVlKTsKLQkJCWxvY2Fscy0+Y3VycmVudF92YWx1ZVtzbG90XSA9IGdsb2JhbC0+dmFsdWU7CisJCXZhbHVlcyA9ICZsb2NhbHMtPnZhbHVlc1tzbG90XTsKKwkJaWYgKHZhbHVlcy0+aG9zdCAhPSB2YWx1ZXMtPmN1cnIpIHsKKwkJCXdybXNybChzaGFyZWRfbXNyc19nbG9iYWwubXNyc1tzbG90XSwgdmFsdWVzLT5ob3N0KTsKKwkJCXZhbHVlcy0+Y3VyciA9IHZhbHVlcy0+aG9zdDsKIAkJfQogCX0KIAlsb2NhbHMtPnJlZ2lzdGVyZWQgPSBmYWxzZTsKIAl1c2VyX3JldHVybl9ub3RpZmllcl91bnJlZ2lzdGVyKHVybik7CiB9CiAKLXZvaWQga3ZtX2RlZmluZV9zaGFyZWRfbXNyKHVuc2lnbmVkIHNsb3QsIHUzMiBtc3IpCitzdGF0aWMgdm9pZCBzaGFyZWRfbXNyX3VwZGF0ZSh1bnNpZ25lZCBzbG90LCB1MzIgbXNyKQogewotCWludCBjcHU7CisJc3RydWN0IGt2bV9zaGFyZWRfbXNycyAqc21zcjsKIAl1NjQgdmFsdWU7CiAKKwlzbXNyID0gJl9fZ2V0X2NwdV92YXIoc2hhcmVkX21zcnMpOworCS8qIG9ubHkgcmVhZCwgYW5kIG5vYm9keSBzaG91bGQgbW9kaWZ5IGl0IGF0IHRoaXMgdGltZSwKKwkgKiBzbyBkb24ndCBuZWVkIGxvY2sgKi8KKwlpZiAoc2xvdCA+PSBzaGFyZWRfbXNyc19nbG9iYWwubnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJrdm06IGludmFsaWQgTVNSIHNsb3QhIik7CisJCXJldHVybjsKKwl9CisJcmRtc3JsX3NhZmUobXNyLCAmdmFsdWUpOworCXNtc3ItPnZhbHVlc1tzbG90XS5ob3N0ID0gdmFsdWU7CisJc21zci0+dmFsdWVzW3Nsb3RdLmN1cnIgPSB2YWx1ZTsKK30KKwordm9pZCBrdm1fZGVmaW5lX3NoYXJlZF9tc3IodW5zaWduZWQgc2xvdCwgdTMyIG1zcikKK3sKIAlpZiAoc2xvdCA+PSBzaGFyZWRfbXNyc19nbG9iYWwubnIpCiAJCXNoYXJlZF9tc3JzX2dsb2JhbC5uciA9IHNsb3QgKyAxOwotCXNoYXJlZF9tc3JzX2dsb2JhbC5tc3JzW3Nsb3RdLm1zciA9IG1zcjsKLQlyZG1zcmxfc2FmZShtc3IsICZ2YWx1ZSk7Ci0Jc2hhcmVkX21zcnNfZ2xvYmFsLm1zcnNbc2xvdF0udmFsdWUgPSB2YWx1ZTsKLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJcGVyX2NwdShzaGFyZWRfbXNycywgY3B1KS5jdXJyZW50X3ZhbHVlW3Nsb3RdID0gdmFsdWU7CisJc2hhcmVkX21zcnNfZ2xvYmFsLm1zcnNbc2xvdF0gPSBtc3I7CisJLyogd2UgbmVlZCBlbnN1cmVkIHRoZSBzaGFyZWRfbXNyX2dsb2JhbCBoYXZlIGJlZW4gdXBkYXRlZCAqLworCXNtcF93bWIoKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9kZWZpbmVfc2hhcmVkX21zcik7CiAKIHN0YXRpYyB2b2lkIGt2bV9zaGFyZWRfbXNyX2NwdV9vbmxpbmUodm9pZCkKIHsKIAl1bnNpZ25lZCBpOwotCXN0cnVjdCBrdm1fc2hhcmVkX21zcnMgKmxvY2FscyA9ICZfX2dldF9jcHVfdmFyKHNoYXJlZF9tc3JzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzaGFyZWRfbXNyc19nbG9iYWwubnI7ICsraSkKLQkJbG9jYWxzLT5jdXJyZW50X3ZhbHVlW2ldID0gc2hhcmVkX21zcnNfZ2xvYmFsLm1zcnNbaV0udmFsdWU7CisJCXNoYXJlZF9tc3JfdXBkYXRlKGksIHNoYXJlZF9tc3JzX2dsb2JhbC5tc3JzW2ldKTsKIH0KIAogdm9pZCBrdm1fc2V0X3NoYXJlZF9tc3IodW5zaWduZWQgc2xvdCwgdTY0IHZhbHVlLCB1NjQgbWFzaykKIHsKIAlzdHJ1Y3Qga3ZtX3NoYXJlZF9tc3JzICpzbXNyID0gJl9fZ2V0X2NwdV92YXIoc2hhcmVkX21zcnMpOwogCi0JaWYgKCgodmFsdWUgXiBzbXNyLT5jdXJyZW50X3ZhbHVlW3Nsb3RdKSAmIG1hc2spID09IDApCisJaWYgKCgodmFsdWUgXiBzbXNyLT52YWx1ZXNbc2xvdF0uY3VycikgJiBtYXNrKSA9PSAwKQogCQlyZXR1cm47Ci0Jc21zci0+Y3VycmVudF92YWx1ZVtzbG90XSA9IHZhbHVlOwotCXdybXNybChzaGFyZWRfbXNyc19nbG9iYWwubXNyc1tzbG90XS5tc3IsIHZhbHVlKTsKKwlzbXNyLT52YWx1ZXNbc2xvdF0uY3VyciA9IHZhbHVlOworCXdybXNybChzaGFyZWRfbXNyc19nbG9iYWwubXNyc1tzbG90XSwgdmFsdWUpOwogCWlmICghc21zci0+cmVnaXN0ZXJlZCkgewogCQlzbXNyLT51cm4ub25fdXNlcl9yZXR1cm4gPSBrdm1fb25fdXNlcl9yZXR1cm47CiAJCXVzZXJfcmV0dXJuX25vdGlmaWVyX3JlZ2lzdGVyKCZzbXNyLT51cm4pOwpAQCAtMjU3LDEyICsyNjksNjggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9zZXRfYXBpY19iYXNlKTsKIAorI2RlZmluZSBFWENQVF9CRU5JR04JCTAKKyNkZWZpbmUgRVhDUFRfQ09OVFJJQlVUT1JZCTEKKyNkZWZpbmUgRVhDUFRfUEYJCTIKKworc3RhdGljIGludCBleGNlcHRpb25fY2xhc3MoaW50IHZlY3RvcikKK3sKKwlzd2l0Y2ggKHZlY3RvcikgeworCWNhc2UgUEZfVkVDVE9SOgorCQlyZXR1cm4gRVhDUFRfUEY7CisJY2FzZSBERV9WRUNUT1I6CisJY2FzZSBUU19WRUNUT1I6CisJY2FzZSBOUF9WRUNUT1I6CisJY2FzZSBTU19WRUNUT1I6CisJY2FzZSBHUF9WRUNUT1I6CisJCXJldHVybiBFWENQVF9DT05UUklCVVRPUlk7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBFWENQVF9CRU5JR047Cit9CisKK3N0YXRpYyB2b2lkIGt2bV9tdWx0aXBsZV9leGNlcHRpb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAorCQl1bnNpZ25lZCBuciwgYm9vbCBoYXNfZXJyb3IsIHUzMiBlcnJvcl9jb2RlKQoreworCXUzMiBwcmV2X25yOworCWludCBjbGFzczEsIGNsYXNzMjsKKworCWlmICghdmNwdS0+YXJjaC5leGNlcHRpb24ucGVuZGluZykgeworCXF1ZXVlOgorCQl2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5wZW5kaW5nID0gdHJ1ZTsKKwkJdmNwdS0+YXJjaC5leGNlcHRpb24uaGFzX2Vycm9yX2NvZGUgPSBoYXNfZXJyb3I7CisJCXZjcHUtPmFyY2guZXhjZXB0aW9uLm5yID0gbnI7CisJCXZjcHUtPmFyY2guZXhjZXB0aW9uLmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOworCQlyZXR1cm47CisJfQorCisJLyogdG8gY2hlY2sgZXhjZXB0aW9uICovCisJcHJldl9uciA9IHZjcHUtPmFyY2guZXhjZXB0aW9uLm5yOworCWlmIChwcmV2X25yID09IERGX1ZFQ1RPUikgeworCQkvKiB0cmlwbGUgZmF1bHQgLT4gc2h1dGRvd24gKi8KKwkJc2V0X2JpdChLVk1fUkVRX1RSSVBMRV9GQVVMVCwgJnZjcHUtPnJlcXVlc3RzKTsKKwkJcmV0dXJuOworCX0KKwljbGFzczEgPSBleGNlcHRpb25fY2xhc3MocHJldl9ucik7CisJY2xhc3MyID0gZXhjZXB0aW9uX2NsYXNzKG5yKTsKKwlpZiAoKGNsYXNzMSA9PSBFWENQVF9DT05UUklCVVRPUlkgJiYgY2xhc3MyID09IEVYQ1BUX0NPTlRSSUJVVE9SWSkKKwkJfHwgKGNsYXNzMSA9PSBFWENQVF9QRiAmJiBjbGFzczIgIT0gRVhDUFRfQkVOSUdOKSkgeworCQkvKiBnZW5lcmF0ZSBkb3VibGUgZmF1bHQgcGVyIFNETSBUYWJsZSA1LTUgKi8KKwkJdmNwdS0+YXJjaC5leGNlcHRpb24ucGVuZGluZyA9IHRydWU7CisJCXZjcHUtPmFyY2guZXhjZXB0aW9uLmhhc19lcnJvcl9jb2RlID0gdHJ1ZTsKKwkJdmNwdS0+YXJjaC5leGNlcHRpb24ubnIgPSBERl9WRUNUT1I7CisJCXZjcHUtPmFyY2guZXhjZXB0aW9uLmVycm9yX2NvZGUgPSAwOworCX0gZWxzZQorCQkvKiByZXBsYWNlIHByZXZpb3VzIGV4Y2VwdGlvbiB3aXRoIGEgbmV3IG9uZSBpbiBhIGhvcGUKKwkJICAgdGhhdCBpbnN0cnVjdGlvbiByZS1leGVjdXRpb24gd2lsbCByZWdlbmVyYXRlIGxvc3QKKwkJICAgZXhjZXB0aW9uICovCisJCWdvdG8gcXVldWU7Cit9CisKIHZvaWQga3ZtX3F1ZXVlX2V4Y2VwdGlvbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIG5yKQogewotCVdBUk5fT04odmNwdS0+YXJjaC5leGNlcHRpb24ucGVuZGluZyk7Ci0JdmNwdS0+YXJjaC5leGNlcHRpb24ucGVuZGluZyA9IHRydWU7Ci0JdmNwdS0+YXJjaC5leGNlcHRpb24uaGFzX2Vycm9yX2NvZGUgPSBmYWxzZTsKLQl2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5uciA9IG5yOworCWt2bV9tdWx0aXBsZV9leGNlcHRpb24odmNwdSwgbnIsIGZhbHNlLCAwKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGt2bV9xdWV1ZV9leGNlcHRpb24pOwogCkBAIC0yNzAsMjUgKzMzOCw2IEBACiAJCQkgICB1MzIgZXJyb3JfY29kZSkKIHsKIAkrK3ZjcHUtPnN0YXQucGZfZ3Vlc3Q7Ci0KLQlpZiAodmNwdS0+YXJjaC5leGNlcHRpb24ucGVuZGluZykgewotCQlzd2l0Y2godmNwdS0+YXJjaC5leGNlcHRpb24ubnIpIHsKLQkJY2FzZSBERl9WRUNUT1I6Ci0JCQkvKiB0cmlwbGUgZmF1bHQgLT4gc2h1dGRvd24gKi8KLQkJCXNldF9iaXQoS1ZNX1JFUV9UUklQTEVfRkFVTFQsICZ2Y3B1LT5yZXF1ZXN0cyk7Ci0JCQlyZXR1cm47Ci0JCWNhc2UgUEZfVkVDVE9SOgotCQkJdmNwdS0+YXJjaC5leGNlcHRpb24ubnIgPSBERl9WRUNUT1I7Ci0JCQl2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5lcnJvcl9jb2RlID0gMDsKLQkJCXJldHVybjsKLQkJZGVmYXVsdDoKLQkJCS8qIHJlcGxhY2UgcHJldmlvdXMgZXhjZXB0aW9uIHdpdGggYSBuZXcgb25lIGluIGEgaG9wZQotCQkJICAgdGhhdCBpbnN0cnVjdGlvbiByZS1leGVjdXRpb24gd2lsbCByZWdlbmVyYXRlIGxvc3QKLQkJCSAgIGV4Y2VwdGlvbiAqLwotCQkJdmNwdS0+YXJjaC5leGNlcHRpb24ucGVuZGluZyA9IGZhbHNlOwotCQkJYnJlYWs7Ci0JCX0KLQl9CiAJdmNwdS0+YXJjaC5jcjIgPSBhZGRyOwogCWt2bV9xdWV1ZV9leGNlcHRpb25fZSh2Y3B1LCBQRl9WRUNUT1IsIGVycm9yX2NvZGUpOwogfQpAQCAtMzAxLDExICszNTAsNyBAQAogCiB2b2lkIGt2bV9xdWV1ZV9leGNlcHRpb25fZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIG5yLCB1MzIgZXJyb3JfY29kZSkKIHsKLQlXQVJOX09OKHZjcHUtPmFyY2guZXhjZXB0aW9uLnBlbmRpbmcpOwotCXZjcHUtPmFyY2guZXhjZXB0aW9uLnBlbmRpbmcgPSB0cnVlOwotCXZjcHUtPmFyY2guZXhjZXB0aW9uLmhhc19lcnJvcl9jb2RlID0gdHJ1ZTsKLQl2Y3B1LT5hcmNoLmV4Y2VwdGlvbi5uciA9IG5yOwotCXZjcHUtPmFyY2guZXhjZXB0aW9uLmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOworCWt2bV9tdWx0aXBsZV9leGNlcHRpb24odmNwdSwgbnIsIHRydWUsIGVycm9yX2NvZGUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3F1ZXVlX2V4Y2VwdGlvbl9lKTsKIApAQCAtMzgzLDEyICs0MjgsMTggQEAKIAogdm9pZCBrdm1fc2V0X2NyMChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVuc2lnbmVkIGxvbmcgY3IwKQogewotCWlmIChjcjAgJiBDUjBfUkVTRVJWRURfQklUUykgeworCWNyMCB8PSBYODZfQ1IwX0VUOworCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWlmIChjcjAgJiAweGZmZmZmZmZmMDAwMDAwMDBVTCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAic2V0X2NyMDogMHglbHggI0dQLCByZXNlcnZlZCBiaXRzIDB4JWx4XG4iLAotCQkgICAgICAgY3IwLCB2Y3B1LT5hcmNoLmNyMCk7CisJCSAgICAgICBjcjAsIGt2bV9yZWFkX2NyMCh2Y3B1KSk7CiAJCWt2bV9pbmplY3RfZ3AodmNwdSwgMCk7CiAJCXJldHVybjsKIAl9CisjZW5kaWYKKworCWNyMCAmPSB+Q1IwX1JFU0VSVkVEX0JJVFM7CiAKIAlpZiAoKGNyMCAmIFg4Nl9DUjBfTlcpICYmICEoY3IwICYgWDg2X0NSMF9DRCkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgInNldF9jcjA6ICNHUCwgQ0QgPT0gMCAmJiBOVyA9PSAxXG4iKTsKQEAgLTQwNSw3ICs0NTYsNyBAQAogCiAJaWYgKCFpc19wYWdpbmcodmNwdSkgJiYgKGNyMCAmIFg4Nl9DUjBfUEcpKSB7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAotCQlpZiAoKHZjcHUtPmFyY2guc2hhZG93X2VmZXIgJiBFRkVSX0xNRSkpIHsKKwkJaWYgKCh2Y3B1LT5hcmNoLmVmZXIgJiBFRkVSX0xNRSkpIHsKIAkJCWludCBjc19kYiwgY3NfbDsKIAogCQkJaWYgKCFpc19wYWUodmNwdSkpIHsKQEAgLTQ0MywxMyArNDk0LDEzIEBACiAKIHZvaWQga3ZtX2xtc3coc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIG1zdykKIHsKLQlrdm1fc2V0X2NyMCh2Y3B1LCAodmNwdS0+YXJjaC5jcjAgJiB+MHgwZnVsKSB8IChtc3cgJiAweDBmKSk7CisJa3ZtX3NldF9jcjAodmNwdSwga3ZtX3JlYWRfY3IwX2JpdHModmNwdSwgfjB4MGZ1bCkgfCAobXN3ICYgMHgwZikpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2xtc3cpOwogCiB2b2lkIGt2bV9zZXRfY3I0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBjcjQpCiB7Ci0JdW5zaWduZWQgbG9uZyBvbGRfY3I0ID0gdmNwdS0+YXJjaC5jcjQ7CisJdW5zaWduZWQgbG9uZyBvbGRfY3I0ID0ga3ZtX3JlYWRfY3I0KHZjcHUpOwogCXVuc2lnbmVkIGxvbmcgcGRwdHJfYml0cyA9IFg4Nl9DUjRfUEdFIHwgWDg2X0NSNF9QU0UgfCBYODZfQ1I0X1BBRTsKIAogCWlmIChjcjQgJiBDUjRfUkVTRVJWRURfQklUUykgewpAQCAtNTc1LDkgKzYyNiwxMSBAQAogICoga3ZtLXNwZWNpZmljLiBUaG9zZSBhcmUgcHV0IGluIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QuCiAgKi8KIAotI2RlZmluZSBLVk1fU0FWRV9NU1JTX0JFR0lOCTIKKyNkZWZpbmUgS1ZNX1NBVkVfTVNSU19CRUdJTgk1CiBzdGF0aWMgdTMyIG1zcnNfdG9fc2F2ZVtdID0gewogCU1TUl9LVk1fU1lTVEVNX1RJTUUsIE1TUl9LVk1fV0FMTF9DTE9DSywKKwlIVl9YNjRfTVNSX0dVRVNUX09TX0lELCBIVl9YNjRfTVNSX0hZUEVSQ0FMTCwKKwlIVl9YNjRfTVNSX0FQSUNfQVNTSVNUX1BBR0UsCiAJTVNSX0lBMzJfU1lTRU5URVJfQ1MsIE1TUl9JQTMyX1NZU0VOVEVSX0VTUCwgTVNSX0lBMzJfU1lTRU5URVJfRUlQLAogCU1TUl9LNl9TVEFSLAogI2lmZGVmIENPTkZJR19YODZfNjQKQEAgLTYwMiw3ICs2NTUsNyBAQAogCX0KIAogCWlmIChpc19wYWdpbmcodmNwdSkKLQkgICAgJiYgKHZjcHUtPmFyY2guc2hhZG93X2VmZXIgJiBFRkVSX0xNRSkgIT0gKGVmZXIgJiBFRkVSX0xNRSkpIHsKKwkgICAgJiYgKHZjcHUtPmFyY2guZWZlciAmIEVGRVJfTE1FKSAhPSAoZWZlciAmIEVGRVJfTE1FKSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAic2V0X2VmZXI6ICNHUCwgY2hhbmdlIExNRSB3aGlsZSBwYWdpbmdcbiIpOwogCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOwogCQlyZXR1cm47CkBAIC02MzMsOSArNjg2LDkgQEAKIAlrdm1feDg2X29wcy0+c2V0X2VmZXIodmNwdSwgZWZlcik7CiAKIAllZmVyICY9IH5FRkVSX0xNQTsKLQllZmVyIHw9IHZjcHUtPmFyY2guc2hhZG93X2VmZXIgJiBFRkVSX0xNQTsKKwllZmVyIHw9IHZjcHUtPmFyY2guZWZlciAmIEVGRVJfTE1BOwogCi0JdmNwdS0+YXJjaC5zaGFkb3dfZWZlciA9IGVmZXI7CisJdmNwdS0+YXJjaC5lZmVyID0gZWZlcjsKIAogCXZjcHUtPmFyY2gubW11LmJhc2Vfcm9sZS5ueGUgPSAoZWZlciAmIEVGRVJfTlgpICYmICF0ZHBfZW5hYmxlZDsKIAlrdm1fbW11X3Jlc2V0X2NvbnRleHQodmNwdSk7CkBAIC05NTcsNiArMTAxMCwxMDAgQEAKIAlyZXR1cm4gcjsKIH0KIAorc3RhdGljIGJvb2wga3ZtX2h2X2h5cGVyY2FsbF9lbmFibGVkKHN0cnVjdCBrdm0gKmt2bSkKK3sKKwlyZXR1cm4ga3ZtLT5hcmNoLmh2X2h5cGVyY2FsbCAmIEhWX1g2NF9NU1JfSFlQRVJDQUxMX0VOQUJMRTsKK30KKworc3RhdGljIGJvb2wga3ZtX2h2X21zcl9wYXJ0aXRpb25fd2lkZSh1MzIgbXNyKQoreworCWJvb2wgciA9IGZhbHNlOworCXN3aXRjaCAobXNyKSB7CisJY2FzZSBIVl9YNjRfTVNSX0dVRVNUX09TX0lEOgorCWNhc2UgSFZfWDY0X01TUl9IWVBFUkNBTEw6CisJCXIgPSB0cnVlOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIGludCBzZXRfbXNyX2h5cGVydl9wdyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhKQoreworCXN0cnVjdCBrdm0gKmt2bSA9IHZjcHUtPmt2bTsKKworCXN3aXRjaCAobXNyKSB7CisJY2FzZSBIVl9YNjRfTVNSX0dVRVNUX09TX0lEOgorCQlrdm0tPmFyY2guaHZfZ3Vlc3Rfb3NfaWQgPSBkYXRhOworCQkvKiBzZXR0aW5nIGd1ZXN0IG9zIGlkIHRvIHplcm8gZGlzYWJsZXMgaHlwZXJjYWxsIHBhZ2UgKi8KKwkJaWYgKCFrdm0tPmFyY2guaHZfZ3Vlc3Rfb3NfaWQpCisJCQlrdm0tPmFyY2guaHZfaHlwZXJjYWxsICY9IH5IVl9YNjRfTVNSX0hZUEVSQ0FMTF9FTkFCTEU7CisJCWJyZWFrOworCWNhc2UgSFZfWDY0X01TUl9IWVBFUkNBTEw6IHsKKwkJdTY0IGdmbjsKKwkJdW5zaWduZWQgbG9uZyBhZGRyOworCQl1OCBpbnN0cnVjdGlvbnNbNF07CisKKwkJLyogaWYgZ3Vlc3Qgb3MgaWQgaXMgbm90IHNldCBoeXBlcmNhbGwgc2hvdWxkIHJlbWFpbiBkaXNhYmxlZCAqLworCQlpZiAoIWt2bS0+YXJjaC5odl9ndWVzdF9vc19pZCkKKwkJCWJyZWFrOworCQlpZiAoIShkYXRhICYgSFZfWDY0X01TUl9IWVBFUkNBTExfRU5BQkxFKSkgeworCQkJa3ZtLT5hcmNoLmh2X2h5cGVyY2FsbCA9IGRhdGE7CisJCQlicmVhazsKKwkJfQorCQlnZm4gPSBkYXRhID4+IEhWX1g2NF9NU1JfSFlQRVJDQUxMX1BBR0VfQUREUkVTU19TSElGVDsKKwkJYWRkciA9IGdmbl90b19odmEoa3ZtLCBnZm4pOworCQlpZiAoa3ZtX2lzX2Vycm9yX2h2YShhZGRyKSkKKwkJCXJldHVybiAxOworCQlrdm1feDg2X29wcy0+cGF0Y2hfaHlwZXJjYWxsKHZjcHUsIGluc3RydWN0aW9ucyk7CisJCSgodW5zaWduZWQgY2hhciAqKWluc3RydWN0aW9ucylbM10gPSAweGMzOyAvKiByZXQgKi8KKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhZGRyLCBpbnN0cnVjdGlvbnMsIDQpKQorCQkJcmV0dXJuIDE7CisJCWt2bS0+YXJjaC5odl9oeXBlcmNhbGwgPSBkYXRhOworCQlicmVhazsKKwl9CisJZGVmYXVsdDoKKwkJcHJfdW5pbXBsKHZjcHUsICJIWVBFUi1WIHVuaW1wbGVtZW50ZWQgd3Jtc3I6IDB4JXggIgorCQkJICAiZGF0YSAweCVsbHhcbiIsIG1zciwgZGF0YSk7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZXRfbXNyX2h5cGVydihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhKQoreworCXN3aXRjaCAobXNyKSB7CisJY2FzZSBIVl9YNjRfTVNSX0FQSUNfQVNTSVNUX1BBR0U6IHsKKwkJdW5zaWduZWQgbG9uZyBhZGRyOworCisJCWlmICghKGRhdGEgJiBIVl9YNjRfTVNSX0FQSUNfQVNTSVNUX1BBR0VfRU5BQkxFKSkgeworCQkJdmNwdS0+YXJjaC5odl92YXBpYyA9IGRhdGE7CisJCQlicmVhazsKKwkJfQorCQlhZGRyID0gZ2ZuX3RvX2h2YSh2Y3B1LT5rdm0sIGRhdGEgPj4KKwkJCQkgIEhWX1g2NF9NU1JfQVBJQ19BU1NJU1RfUEFHRV9BRERSRVNTX1NISUZUKTsKKwkJaWYgKGt2bV9pc19lcnJvcl9odmEoYWRkcikpCisJCQlyZXR1cm4gMTsKKwkJaWYgKGNsZWFyX3VzZXIoKHZvaWQgX191c2VyICopYWRkciwgUEFHRV9TSVpFKSkKKwkJCXJldHVybiAxOworCQl2Y3B1LT5hcmNoLmh2X3ZhcGljID0gZGF0YTsKKwkJYnJlYWs7CisJfQorCWNhc2UgSFZfWDY0X01TUl9FT0k6CisJCXJldHVybiBrdm1faHZfdmFwaWNfbXNyX3dyaXRlKHZjcHUsIEFQSUNfRU9JLCBkYXRhKTsKKwljYXNlIEhWX1g2NF9NU1JfSUNSOgorCQlyZXR1cm4ga3ZtX2h2X3ZhcGljX21zcl93cml0ZSh2Y3B1LCBBUElDX0lDUiwgZGF0YSk7CisJY2FzZSBIVl9YNjRfTVNSX1RQUjoKKwkJcmV0dXJuIGt2bV9odl92YXBpY19tc3Jfd3JpdGUodmNwdSwgQVBJQ19UQVNLUFJJLCBkYXRhKTsKKwlkZWZhdWx0OgorCQlwcl91bmltcGwodmNwdSwgIkhZUEVSLVYgdW5pbXBsZW1lbnRlZCB3cm1zcjogMHgleCAiCisJCQkgICJkYXRhIDB4JWxseFxuIiwgbXNyLCBkYXRhKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIGludCBrdm1fc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSkKIHsKIAlzd2l0Y2ggKG1zcikgewpAQCAtMTA3MSw2ICsxMjE4LDE2IEBACiAJCXByX3VuaW1wbCh2Y3B1LCAidW5pbXBsZW1lbnRlZCBwZXJmY3RyIHdybXNyOiAiCiAJCQkiMHgleCBkYXRhIDB4JWxseFxuIiwgbXNyLCBkYXRhKTsKIAkJYnJlYWs7CisJY2FzZSBIVl9YNjRfTVNSX0dVRVNUX09TX0lEIC4uLiBIVl9YNjRfTVNSX1NJTlQxNToKKwkJaWYgKGt2bV9odl9tc3JfcGFydGl0aW9uX3dpZGUobXNyKSkgeworCQkJaW50IHI7CisJCQltdXRleF9sb2NrKCZ2Y3B1LT5rdm0tPmxvY2spOworCQkJciA9IHNldF9tc3JfaHlwZXJ2X3B3KHZjcHUsIG1zciwgZGF0YSk7CisJCQltdXRleF91bmxvY2soJnZjcHUtPmt2bS0+bG9jayk7CisJCQlyZXR1cm4gcjsKKwkJfSBlbHNlCisJCQlyZXR1cm4gc2V0X21zcl9oeXBlcnYodmNwdSwgbXNyLCBkYXRhKTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJaWYgKG1zciAmJiAobXNyID09IHZjcHUtPmt2bS0+YXJjaC54ZW5faHZtX2NvbmZpZy5tc3IpKQogCQkJcmV0dXJuIHhlbl9odm1fY29uZmlnKHZjcHUsIGRhdGEpOwpAQCAtMTE3MCw2ICsxMzI3LDU0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZ2V0X21zcl9oeXBlcnZfcHcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgKnBkYXRhKQoreworCXU2NCBkYXRhID0gMDsKKwlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LT5rdm07CisKKwlzd2l0Y2ggKG1zcikgeworCWNhc2UgSFZfWDY0X01TUl9HVUVTVF9PU19JRDoKKwkJZGF0YSA9IGt2bS0+YXJjaC5odl9ndWVzdF9vc19pZDsKKwkJYnJlYWs7CisJY2FzZSBIVl9YNjRfTVNSX0hZUEVSQ0FMTDoKKwkJZGF0YSA9IGt2bS0+YXJjaC5odl9oeXBlcmNhbGw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX3VuaW1wbCh2Y3B1LCAiSHlwZXItViB1bmhhbmRsZWQgcmRtc3I6IDB4JXhcbiIsIG1zcik7CisJCXJldHVybiAxOworCX0KKworCSpwZGF0YSA9IGRhdGE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X21zcl9oeXBlcnYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgKnBkYXRhKQoreworCXU2NCBkYXRhID0gMDsKKworCXN3aXRjaCAobXNyKSB7CisJY2FzZSBIVl9YNjRfTVNSX1ZQX0lOREVYOiB7CisJCWludCByOworCQlzdHJ1Y3Qga3ZtX3ZjcHUgKnY7CisJCWt2bV9mb3JfZWFjaF92Y3B1KHIsIHYsIHZjcHUtPmt2bSkKKwkJCWlmICh2ID09IHZjcHUpCisJCQkJZGF0YSA9IHI7CisJCWJyZWFrOworCX0KKwljYXNlIEhWX1g2NF9NU1JfRU9JOgorCQlyZXR1cm4ga3ZtX2h2X3ZhcGljX21zcl9yZWFkKHZjcHUsIEFQSUNfRU9JLCBwZGF0YSk7CisJY2FzZSBIVl9YNjRfTVNSX0lDUjoKKwkJcmV0dXJuIGt2bV9odl92YXBpY19tc3JfcmVhZCh2Y3B1LCBBUElDX0lDUiwgcGRhdGEpOworCWNhc2UgSFZfWDY0X01TUl9UUFI6CisJCXJldHVybiBrdm1faHZfdmFwaWNfbXNyX3JlYWQodmNwdSwgQVBJQ19UQVNLUFJJLCBwZGF0YSk7CisJZGVmYXVsdDoKKwkJcHJfdW5pbXBsKHZjcHUsICJIeXBlci1WIHVuaGFuZGxlZCByZG1zcjogMHgleFxuIiwgbXNyKTsKKwkJcmV0dXJuIDE7CisJfQorCSpwZGF0YSA9IGRhdGE7CisJcmV0dXJuIDA7Cit9CisKIGludCBrdm1fZ2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgKnBkYXRhKQogewogCXU2NCBkYXRhOwpAQCAtMTIyMSw3ICsxNDI2LDcgQEAKIAkJZGF0YSB8PSAoKCh1aW50NjRfdCk0VUxMKSA8PCA0MCk7CiAJCWJyZWFrOwogCWNhc2UgTVNSX0VGRVI6Ci0JCWRhdGEgPSB2Y3B1LT5hcmNoLnNoYWRvd19lZmVyOworCQlkYXRhID0gdmNwdS0+YXJjaC5lZmVyOwogCQlicmVhazsKIAljYXNlIE1TUl9LVk1fV0FMTF9DTE9DSzoKIAkJZGF0YSA9IHZjcHUtPmt2bS0+YXJjaC53YWxsX2Nsb2NrOwpAQCAtMTIzNiw2ICsxNDQxLDE2IEBACiAJY2FzZSBNU1JfSUEzMl9NQ0dfU1RBVFVTOgogCWNhc2UgTVNSX0lBMzJfTUMwX0NUTCAuLi4gTVNSX0lBMzJfTUMwX0NUTCArIDQgKiBLVk1fTUFYX01DRV9CQU5LUyAtIDE6CiAJCXJldHVybiBnZXRfbXNyX21jZSh2Y3B1LCBtc3IsIHBkYXRhKTsKKwljYXNlIEhWX1g2NF9NU1JfR1VFU1RfT1NfSUQgLi4uIEhWX1g2NF9NU1JfU0lOVDE1OgorCQlpZiAoa3ZtX2h2X21zcl9wYXJ0aXRpb25fd2lkZShtc3IpKSB7CisJCQlpbnQgcjsKKwkJCW11dGV4X2xvY2soJnZjcHUtPmt2bS0+bG9jayk7CisJCQlyID0gZ2V0X21zcl9oeXBlcnZfcHcodmNwdSwgbXNyLCBwZGF0YSk7CisJCQltdXRleF91bmxvY2soJnZjcHUtPmt2bS0+bG9jayk7CisJCQlyZXR1cm4gcjsKKwkJfSBlbHNlCisJCQlyZXR1cm4gZ2V0X21zcl9oeXBlcnYodmNwdSwgbXNyLCBwZGF0YSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmICghaWdub3JlX21zcnMpIHsKIAkJCXByX3VuaW1wbCh2Y3B1LCAidW5oYW5kbGVkIHJkbXNyOiAweCV4XG4iLCBtc3IpOwpAQCAtMTI2MSwxNSArMTQ3NiwxNSBAQAogCQkgICAgaW50ICgqZG9fbXNyKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJICB1bnNpZ25lZCBpbmRleCwgdTY0ICpkYXRhKSkKIHsKLQlpbnQgaTsKKwlpbnQgaSwgaWR4OwogCiAJdmNwdV9sb2FkKHZjcHUpOwogCi0JZG93bl9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOworCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZ2Y3B1LT5rdm0tPnNyY3UpOwogCWZvciAoaSA9IDA7IGkgPCBtc3JzLT5ubXNyczsgKytpKQogCQlpZiAoZG9fbXNyKHZjcHUsIGVudHJpZXNbaV0uaW5kZXgsICZlbnRyaWVzW2ldLmRhdGEpKQogCQkJYnJlYWs7Ci0JdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKKwlzcmN1X3JlYWRfdW5sb2NrKCZ2Y3B1LT5rdm0tPnNyY3UsIGlkeCk7CiAKIAl2Y3B1X3B1dCh2Y3B1KTsKIApAQCAtMTM1MSw2ICsxNTY2LDExIEBACiAJY2FzZSBLVk1fQ0FQX1hFTl9IVk06CiAJY2FzZSBLVk1fQ0FQX0FESlVTVF9DTE9DSzoKIAljYXNlIEtWTV9DQVBfVkNQVV9FVkVOVFM6CisJY2FzZSBLVk1fQ0FQX0hZUEVSVjoKKwljYXNlIEtWTV9DQVBfSFlQRVJWX1ZBUElDOgorCWNhc2UgS1ZNX0NBUF9IWVBFUlZfU1BJTjoKKwljYXNlIEtWTV9DQVBfUENJX1NFR01FTlQ6CisJY2FzZSBLVk1fQ0FQX1g4Nl9ST0JVU1RfU0lOR0xFU1RFUDoKIAkJciA9IDE7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0NBUF9DT0FMRVNDRURfTU1JTzoKQEAgLTE0NjQsOCArMTY4NCw4IEBACiAKIHZvaWQga3ZtX2FyY2hfdmNwdV9wdXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWt2bV94ODZfb3BzLT52Y3B1X3B1dCh2Y3B1KTsKIAlrdm1fcHV0X2d1ZXN0X2ZwdSh2Y3B1KTsKKwlrdm1feDg2X29wcy0+dmNwdV9wdXQodmNwdSk7CiB9CiAKIHN0YXRpYyBpbnQgaXNfZWZlcl9ueCh2b2lkKQpAQCAtMTUzMCw2ICsxNzUwLDcgQEAKIAljcHVpZF9maXhfbnhfY2FwKHZjcHUpOwogCXIgPSAwOwogCWt2bV9hcGljX3NldF92ZXJzaW9uKHZjcHUpOworCWt2bV94ODZfb3BzLT5jcHVpZF91cGRhdGUodmNwdSk7CiAKIG91dF9mcmVlOgogCXZmcmVlKGNwdWlkX2VudHJpZXMpOwpAQCAtMTU1Miw2ICsxNzczLDcgQEAKIAkJZ290byBvdXQ7CiAJdmNwdS0+YXJjaC5jcHVpZF9uZW50ID0gY3B1aWQtPm5lbnQ7CiAJa3ZtX2FwaWNfc2V0X3ZlcnNpb24odmNwdSk7CisJa3ZtX3g4Nl9vcHMtPmNwdWlkX3VwZGF0ZSh2Y3B1KTsKIAlyZXR1cm4gMDsKIAogb3V0OgpAQCAtMTU5NCwxMiArMTgxNiwxNSBAQAogCQkJIHUzMiBpbmRleCwgaW50ICpuZW50LCBpbnQgbWF4bmVudCkKIHsKIAl1bnNpZ25lZCBmX254ID0gaXNfZWZlcl9ueCgpID8gRihOWCkgOiAwOwotCXVuc2lnbmVkIGZfZ2JwYWdlcyA9IGt2bV94ODZfb3BzLT5nYl9wYWdlX2VuYWJsZSgpID8gRihHQlBBR0VTKSA6IDA7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAorCXVuc2lnbmVkIGZfZ2JwYWdlcyA9IChrdm1feDg2X29wcy0+Z2V0X2xwYWdlX2xldmVsKCkgPT0gUFRfUERQRV9MRVZFTCkKKwkJCQk/IEYoR0JQQUdFUykgOiAwOwogCXVuc2lnbmVkIGZfbG0gPSBGKExNKTsKICNlbHNlCisJdW5zaWduZWQgZl9nYnBhZ2VzID0gMDsKIAl1bnNpZ25lZCBmX2xtID0gMDsKICNlbmRpZgorCXVuc2lnbmVkIGZfcmR0c2NwID0ga3ZtX3g4Nl9vcHMtPnJkdHNjcF9zdXBwb3J0ZWQoKSA/IEYoUkRUU0NQKSA6IDA7CiAKIAkvKiBjcHVpZCAxLmVkeCAqLwogCWNvbnN0IHUzMiBrdm1fc3VwcG9ydGVkX3dvcmQwX3g4Nl9mZWF0dXJlcyA9CkBAIC0xNjE5LDcgKzE4NDQsNyBAQAogCQlGKE1UUlIpIHwgRihQR0UpIHwgRihNQ0EpIHwgRihDTU9WKSB8CiAJCUYoUEFUKSB8IEYoUFNFMzYpIHwgMCAvKiBSZXNlcnZlZCAqLyB8CiAJCWZfbnggfCAwIC8qIFJlc2VydmVkICovIHwgRihNTVhFWFQpIHwgRihNTVgpIHwKLQkJRihGWFNSKSB8IEYoRlhTUl9PUFQpIHwgZl9nYnBhZ2VzIHwgMCAvKiBSRFRTQ1AgKi8gfAorCQlGKEZYU1IpIHwgRihGWFNSX09QVCkgfCBmX2dicGFnZXMgfCBmX3JkdHNjcCB8CiAJCTAgLyogUmVzZXJ2ZWQgKi8gfCBmX2xtIHwgRigzRE5PV0VYVCkgfCBGKDNETk9XKTsKIAkvKiBjcHVpZCAxLmVjeCAqLwogCWNvbnN0IHUzMiBrdm1fc3VwcG9ydGVkX3dvcmQ0X3g4Nl9mZWF0dXJlcyA9CkBAIC0xODY2LDcgKzIwOTEsNyBAQAogCQlyZXR1cm4gMDsKIAlpZiAobWNlLT5zdGF0dXMgJiBNQ0lfU1RBVFVTX1VDKSB7CiAJCWlmICgodmNwdS0+YXJjaC5tY2dfc3RhdHVzICYgTUNHX1NUQVRVU19NQ0lQKSB8fAotCQkgICAgISh2Y3B1LT5hcmNoLmNyNCAmIFg4Nl9DUjRfTUNFKSkgeworCQkgICAgIWt2bV9yZWFkX2NyNF9iaXRzKHZjcHUsIFg4Nl9DUjRfTUNFKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgImt2bTogc2V0X21jZTogIgogCQkJICAgICAgICJpbmplY3RzIG1jZSBleGNlcHRpb24gd2hpbGUgIgogCQkJICAgICAgICJwcmV2aW91cyBvbmUgaXMgaW4gcHJvZ3Jlc3MhXG4iKTsKQEAgLTIxNjAsMTQgKzIzODUsMTQgQEAKIAlpZiAoa3ZtX25yX21tdV9wYWdlcyA8IEtWTV9NSU5fQUxMT0NfTU1VX1BBR0VTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWRvd25fd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CisJbXV0ZXhfbG9jaygma3ZtLT5zbG90c19sb2NrKTsKIAlzcGluX2xvY2soJmt2bS0+bW11X2xvY2spOwogCiAJa3ZtX21tdV9jaGFuZ2VfbW11X3BhZ2VzKGt2bSwga3ZtX25yX21tdV9wYWdlcyk7CiAJa3ZtLT5hcmNoLm5fcmVxdWVzdGVkX21tdV9wYWdlcyA9IGt2bV9ucl9tbXVfcGFnZXM7CiAKIAlzcGluX3VubG9jaygma3ZtLT5tbXVfbG9jayk7Ci0JdXBfd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPnNsb3RzX2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0yMTc2LDEzICsyNDAxLDM1IEBACiAJcmV0dXJuIGt2bS0+YXJjaC5uX2FsbG9jX21tdV9wYWdlczsKIH0KIAorZ2ZuX3QgdW5hbGlhc19nZm5faW5zdGFudGlhdGlvbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKK3sKKwlpbnQgaTsKKwlzdHJ1Y3Qga3ZtX21lbV9hbGlhcyAqYWxpYXM7CisJc3RydWN0IGt2bV9tZW1fYWxpYXNlcyAqYWxpYXNlczsKKworCWFsaWFzZXMgPSByY3VfZGVyZWZlcmVuY2Uoa3ZtLT5hcmNoLmFsaWFzZXMpOworCisJZm9yIChpID0gMDsgaSA8IGFsaWFzZXMtPm5hbGlhc2VzOyArK2kpIHsKKwkJYWxpYXMgPSAmYWxpYXNlcy0+YWxpYXNlc1tpXTsKKwkJaWYgKGFsaWFzLT5mbGFncyAmIEtWTV9BTElBU19JTlZBTElEKQorCQkJY29udGludWU7CisJCWlmIChnZm4gPj0gYWxpYXMtPmJhc2VfZ2ZuCisJCSAgICAmJiBnZm4gPCBhbGlhcy0+YmFzZV9nZm4gKyBhbGlhcy0+bnBhZ2VzKQorCQkJcmV0dXJuIGFsaWFzLT50YXJnZXRfZ2ZuICsgZ2ZuIC0gYWxpYXMtPmJhc2VfZ2ZuOworCX0KKwlyZXR1cm4gZ2ZuOworfQorCiBnZm5fdCB1bmFsaWFzX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKIHsKIAlpbnQgaTsKIAlzdHJ1Y3Qga3ZtX21lbV9hbGlhcyAqYWxpYXM7CisJc3RydWN0IGt2bV9tZW1fYWxpYXNlcyAqYWxpYXNlczsKIAotCWZvciAoaSA9IDA7IGkgPCBrdm0tPmFyY2gubmFsaWFzZXM7ICsraSkgewotCQlhbGlhcyA9ICZrdm0tPmFyY2guYWxpYXNlc1tpXTsKKwlhbGlhc2VzID0gcmN1X2RlcmVmZXJlbmNlKGt2bS0+YXJjaC5hbGlhc2VzKTsKKworCWZvciAoaSA9IDA7IGkgPCBhbGlhc2VzLT5uYWxpYXNlczsgKytpKSB7CisJCWFsaWFzID0gJmFsaWFzZXMtPmFsaWFzZXNbaV07CiAJCWlmIChnZm4gPj0gYWxpYXMtPmJhc2VfZ2ZuCiAJCSAgICAmJiBnZm4gPCBhbGlhcy0+YmFzZV9nZm4gKyBhbGlhcy0+bnBhZ2VzKQogCQkJcmV0dXJuIGFsaWFzLT50YXJnZXRfZ2ZuICsgZ2ZuIC0gYWxpYXMtPmJhc2VfZ2ZuOwpAQCAtMjIwMCw2ICsyNDQ3LDcgQEAKIHsKIAlpbnQgciwgbjsKIAlzdHJ1Y3Qga3ZtX21lbV9hbGlhcyAqcDsKKwlzdHJ1Y3Qga3ZtX21lbV9hbGlhc2VzICphbGlhc2VzLCAqb2xkX2FsaWFzZXM7CiAKIAlyID0gLUVJTlZBTDsKIAkvKiBHZW5lcmFsIHNhbml0eSBjaGVja3MgKi8KQEAgLTIyMTYsMjYgKzI0NjQsNDggQEAKIAkgICAgPCBhbGlhcy0+dGFyZ2V0X3BoeXNfYWRkcikKIAkJZ290byBvdXQ7CiAKLQlkb3duX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOwotCXNwaW5fbG9jaygma3ZtLT5tbXVfbG9jayk7CisJciA9IC1FTk9NRU07CisJYWxpYXNlcyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1fbWVtX2FsaWFzZXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFsaWFzZXMpCisJCWdvdG8gb3V0OwogCi0JcCA9ICZrdm0tPmFyY2guYWxpYXNlc1thbGlhcy0+c2xvdF07CisJbXV0ZXhfbG9jaygma3ZtLT5zbG90c19sb2NrKTsKKworCS8qIGludmFsaWRhdGUgYW55IGdmbiByZWZlcmVuY2UgaW4gY2FzZSBvZiBkZWxldGlvbi9zaHJpbmtpbmcgKi8KKwltZW1jcHkoYWxpYXNlcywga3ZtLT5hcmNoLmFsaWFzZXMsIHNpemVvZihzdHJ1Y3Qga3ZtX21lbV9hbGlhc2VzKSk7CisJYWxpYXNlcy0+YWxpYXNlc1thbGlhcy0+c2xvdF0uZmxhZ3MgfD0gS1ZNX0FMSUFTX0lOVkFMSUQ7CisJb2xkX2FsaWFzZXMgPSBrdm0tPmFyY2guYWxpYXNlczsKKwlyY3VfYXNzaWduX3BvaW50ZXIoa3ZtLT5hcmNoLmFsaWFzZXMsIGFsaWFzZXMpOworCXN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkKCZrdm0tPnNyY3UpOworCWt2bV9tbXVfemFwX2FsbChrdm0pOworCWtmcmVlKG9sZF9hbGlhc2VzKTsKKworCXIgPSAtRU5PTUVNOworCWFsaWFzZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX21lbV9hbGlhc2VzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhbGlhc2VzKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwltZW1jcHkoYWxpYXNlcywga3ZtLT5hcmNoLmFsaWFzZXMsIHNpemVvZihzdHJ1Y3Qga3ZtX21lbV9hbGlhc2VzKSk7CisKKwlwID0gJmFsaWFzZXMtPmFsaWFzZXNbYWxpYXMtPnNsb3RdOwogCXAtPmJhc2VfZ2ZuID0gYWxpYXMtPmd1ZXN0X3BoeXNfYWRkciA+PiBQQUdFX1NISUZUOwogCXAtPm5wYWdlcyA9IGFsaWFzLT5tZW1vcnlfc2l6ZSA+PiBQQUdFX1NISUZUOwogCXAtPnRhcmdldF9nZm4gPSBhbGlhcy0+dGFyZ2V0X3BoeXNfYWRkciA+PiBQQUdFX1NISUZUOworCXAtPmZsYWdzICY9IH4oS1ZNX0FMSUFTX0lOVkFMSUQpOwogCiAJZm9yIChuID0gS1ZNX0FMSUFTX1NMT1RTOyBuID4gMDsgLS1uKQotCQlpZiAoa3ZtLT5hcmNoLmFsaWFzZXNbbiAtIDFdLm5wYWdlcykKKwkJaWYgKGFsaWFzZXMtPmFsaWFzZXNbbiAtIDFdLm5wYWdlcykKIAkJCWJyZWFrOwotCWt2bS0+YXJjaC5uYWxpYXNlcyA9IG47CisJYWxpYXNlcy0+bmFsaWFzZXMgPSBuOwogCi0Jc3Bpbl91bmxvY2soJmt2bS0+bW11X2xvY2spOwotCWt2bV9tbXVfemFwX2FsbChrdm0pOworCW9sZF9hbGlhc2VzID0ga3ZtLT5hcmNoLmFsaWFzZXM7CisJcmN1X2Fzc2lnbl9wb2ludGVyKGt2bS0+YXJjaC5hbGlhc2VzLCBhbGlhc2VzKTsKKwlzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgma3ZtLT5zcmN1KTsKKwlrZnJlZShvbGRfYWxpYXNlcyk7CisJciA9IDA7CiAKLQl1cF93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKLQotCXJldHVybiAwOwotCitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygma3ZtLT5zbG90c19sb2NrKTsKIG91dDoKIAlyZXR1cm4gcjsKIH0KQEAgLTIyNzMsMTggKzI1NDMsMTggQEAKIAlyID0gMDsKIAlzd2l0Y2ggKGNoaXAtPmNoaXBfaWQpIHsKIAljYXNlIEtWTV9JUlFDSElQX1BJQ19NQVNURVI6Ci0JCXNwaW5fbG9jaygmcGljX2lycWNoaXAoa3ZtKS0+bG9jayk7CisJCXJhd19zcGluX2xvY2soJnBpY19pcnFjaGlwKGt2bSktPmxvY2spOwogCQltZW1jcHkoJnBpY19pcnFjaGlwKGt2bSktPnBpY3NbMF0sCiAJCQkmY2hpcC0+Y2hpcC5waWMsCiAJCQlzaXplb2Yoc3RydWN0IGt2bV9waWNfc3RhdGUpKTsKLQkJc3Bpbl91bmxvY2soJnBpY19pcnFjaGlwKGt2bSktPmxvY2spOworCQlyYXdfc3Bpbl91bmxvY2soJnBpY19pcnFjaGlwKGt2bSktPmxvY2spOwogCQlicmVhazsKIAljYXNlIEtWTV9JUlFDSElQX1BJQ19TTEFWRToKLQkJc3Bpbl9sb2NrKCZwaWNfaXJxY2hpcChrdm0pLT5sb2NrKTsKKwkJcmF3X3NwaW5fbG9jaygmcGljX2lycWNoaXAoa3ZtKS0+bG9jayk7CiAJCW1lbWNweSgmcGljX2lycWNoaXAoa3ZtKS0+cGljc1sxXSwKIAkJCSZjaGlwLT5jaGlwLnBpYywKIAkJCXNpemVvZihzdHJ1Y3Qga3ZtX3BpY19zdGF0ZSkpOwotCQlzcGluX3VubG9jaygmcGljX2lycWNoaXAoa3ZtKS0+bG9jayk7CisJCXJhd19zcGluX3VubG9jaygmcGljX2lycWNoaXAoa3ZtKS0+bG9jayk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0lSUUNISVBfSU9BUElDOgogCQlyID0ga3ZtX3NldF9pb2FwaWMoa3ZtLCAmY2hpcC0+Y2hpcC5pb2FwaWMpOwpAQCAtMjM2NCwyOSArMjYzNCw2MiBAQAogaW50IGt2bV92bV9pb2N0bF9nZXRfZGlydHlfbG9nKHN0cnVjdCBrdm0gKmt2bSwKIAkJCQkgICAgICBzdHJ1Y3Qga3ZtX2RpcnR5X2xvZyAqbG9nKQogewotCWludCByOwotCWludCBuOworCWludCByLCBuLCBpOwogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3Q7Ci0JaW50IGlzX2RpcnR5ID0gMDsKKwl1bnNpZ25lZCBsb25nIGlzX2RpcnR5ID0gMDsKKwl1bnNpZ25lZCBsb25nICpkaXJ0eV9iaXRtYXAgPSBOVUxMOwogCi0JZG93bl93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKKwltdXRleF9sb2NrKCZrdm0tPnNsb3RzX2xvY2spOwogCi0JciA9IGt2bV9nZXRfZGlydHlfbG9nKGt2bSwgbG9nLCAmaXNfZGlydHkpOwotCWlmIChyKQorCXIgPSAtRUlOVkFMOworCWlmIChsb2ctPnNsb3QgPj0gS1ZNX01FTU9SWV9TTE9UUykKIAkJZ290byBvdXQ7CiAKKwltZW1zbG90ID0gJmt2bS0+bWVtc2xvdHMtPm1lbXNsb3RzW2xvZy0+c2xvdF07CisJciA9IC1FTk9FTlQ7CisJaWYgKCFtZW1zbG90LT5kaXJ0eV9iaXRtYXApCisJCWdvdG8gb3V0OworCisJbiA9IEFMSUdOKG1lbXNsb3QtPm5wYWdlcywgQklUU19QRVJfTE9ORykgLyA4OworCisJciA9IC1FTk9NRU07CisJZGlydHlfYml0bWFwID0gdm1hbGxvYyhuKTsKKwlpZiAoIWRpcnR5X2JpdG1hcCkKKwkJZ290byBvdXQ7CisJbWVtc2V0KGRpcnR5X2JpdG1hcCwgMCwgbik7CisKKwlmb3IgKGkgPSAwOyAhaXNfZGlydHkgJiYgaSA8IG4vc2l6ZW9mKGxvbmcpOyBpKyspCisJCWlzX2RpcnR5ID0gbWVtc2xvdC0+ZGlydHlfYml0bWFwW2ldOworCiAJLyogSWYgbm90aGluZyBpcyBkaXJ0eSwgZG9uJ3QgYm90aGVyIG1lc3Npbmcgd2l0aCBwYWdlIHRhYmxlcy4gKi8KIAlpZiAoaXNfZGlydHkpIHsKKwkJc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMsICpvbGRfc2xvdHM7CisKIAkJc3Bpbl9sb2NrKCZrdm0tPm1tdV9sb2NrKTsKIAkJa3ZtX21tdV9zbG90X3JlbW92ZV93cml0ZV9hY2Nlc3Moa3ZtLCBsb2ctPnNsb3QpOwogCQlzcGluX3VubG9jaygma3ZtLT5tbXVfbG9jayk7Ci0JCW1lbXNsb3QgPSAma3ZtLT5tZW1zbG90c1tsb2ctPnNsb3RdOwotCQluID0gQUxJR04obWVtc2xvdC0+bnBhZ2VzLCBCSVRTX1BFUl9MT05HKSAvIDg7Ci0JCW1lbXNldChtZW1zbG90LT5kaXJ0eV9iaXRtYXAsIDAsIG4pOworCisJCXNsb3RzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9tZW1zbG90cyksIEdGUF9LRVJORUwpOworCQlpZiAoIXNsb3RzKQorCQkJZ290byBvdXRfZnJlZTsKKworCQltZW1jcHkoc2xvdHMsIGt2bS0+bWVtc2xvdHMsIHNpemVvZihzdHJ1Y3Qga3ZtX21lbXNsb3RzKSk7CisJCXNsb3RzLT5tZW1zbG90c1tsb2ctPnNsb3RdLmRpcnR5X2JpdG1hcCA9IGRpcnR5X2JpdG1hcDsKKworCQlvbGRfc2xvdHMgPSBrdm0tPm1lbXNsb3RzOworCQlyY3VfYXNzaWduX3BvaW50ZXIoa3ZtLT5tZW1zbG90cywgc2xvdHMpOworCQlzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgma3ZtLT5zcmN1KTsKKwkJZGlydHlfYml0bWFwID0gb2xkX3Nsb3RzLT5tZW1zbG90c1tsb2ctPnNsb3RdLmRpcnR5X2JpdG1hcDsKKwkJa2ZyZWUob2xkX3Nsb3RzKTsKIAl9CisKIAlyID0gMDsKKwlpZiAoY29weV90b191c2VyKGxvZy0+ZGlydHlfYml0bWFwLCBkaXJ0eV9iaXRtYXAsIG4pKQorCQlyID0gLUVGQVVMVDsKK291dF9mcmVlOgorCXZmcmVlKGRpcnR5X2JpdG1hcCk7CiBvdXQ6Ci0JdXBfd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPnNsb3RzX2xvY2spOwogCXJldHVybiByOwogfQogCkBAIC0yNDY5LDYgKzI3NzIsOCBAQAogCQlpZiAodnBpYykgewogCQkJciA9IGt2bV9pb2FwaWNfaW5pdChrdm0pOwogCQkJaWYgKHIpIHsKKwkJCQlrdm1faW9fYnVzX3VucmVnaXN0ZXJfZGV2KGt2bSwgS1ZNX1BJT19CVVMsCisJCQkJCQkJICAmdnBpYy0+ZGV2KTsKIAkJCQlrZnJlZSh2cGljKTsKIAkJCQlnb3RvIGNyZWF0ZV9pcnFjaGlwX3VubG9jazsKIAkJCX0KQEAgLTI0ODAsMTAgKzI3ODUsOCBAQAogCQlyID0ga3ZtX3NldHVwX2RlZmF1bHRfaXJxX3JvdXRpbmcoa3ZtKTsKIAkJaWYgKHIpIHsKIAkJCW11dGV4X2xvY2soJmt2bS0+aXJxX2xvY2spOwotCQkJa2ZyZWUoa3ZtLT5hcmNoLnZwaWMpOwotCQkJa2ZyZWUoa3ZtLT5hcmNoLnZpb2FwaWMpOwotCQkJa3ZtLT5hcmNoLnZwaWMgPSBOVUxMOwotCQkJa3ZtLT5hcmNoLnZpb2FwaWMgPSBOVUxMOworCQkJa3ZtX2lvYXBpY19kZXN0cm95KGt2bSk7CisJCQlrdm1fZGVzdHJveV9waWMoa3ZtKTsKIAkJCW11dGV4X3VubG9jaygma3ZtLT5pcnFfbG9jayk7CiAJCX0KIAljcmVhdGVfaXJxY2hpcF91bmxvY2s6CkBAIC0yNDk5LDcgKzI4MDIsNyBAQAogCQkJCSAgIHNpemVvZihzdHJ1Y3Qga3ZtX3BpdF9jb25maWcpKSkKIAkJCWdvdG8gb3V0OwogCWNyZWF0ZV9waXQ6Ci0JCWRvd25fd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CisJCW11dGV4X2xvY2soJmt2bS0+c2xvdHNfbG9jayk7CiAJCXIgPSAtRUVYSVNUOwogCQlpZiAoa3ZtLT5hcmNoLnZwaXQpCiAJCQlnb3RvIGNyZWF0ZV9waXRfdW5sb2NrOwpAQCAtMjUwOCw3ICsyODExLDcgQEAKIAkJaWYgKGt2bS0+YXJjaC52cGl0KQogCQkJciA9IDA7CiAJY3JlYXRlX3BpdF91bmxvY2s6Ci0JCXVwX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOworCQltdXRleF91bmxvY2soJmt2bS0+c2xvdHNfbG9jayk7CiAJCWJyZWFrOwogCWNhc2UgS1ZNX0lSUV9MSU5FX1NUQVRVUzoKIAljYXNlIEtWTV9JUlFfTElORTogewpAQCAtMjcyNSw3ICszMDI4LDcgQEAKIAkgICAgIWt2bV9pb2RldmljZV93cml0ZSgmdmNwdS0+YXJjaC5hcGljLT5kZXYsIGFkZHIsIGxlbiwgdikpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIGt2bV9pb19idXNfd3JpdGUoJnZjcHUtPmt2bS0+bW1pb19idXMsIGFkZHIsIGxlbiwgdik7CisJcmV0dXJuIGt2bV9pb19idXNfd3JpdGUodmNwdS0+a3ZtLCBLVk1fTU1JT19CVVMsIGFkZHIsIGxlbiwgdik7CiB9CiAKIHN0YXRpYyBpbnQgdmNwdV9tbWlvX3JlYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBhZGRyLCBpbnQgbGVuLCB2b2lkICp2KQpAQCAtMjczNCwxNyArMzAzNyw0NCBAQAogCSAgICAha3ZtX2lvZGV2aWNlX3JlYWQoJnZjcHUtPmFyY2guYXBpYy0+ZGV2LCBhZGRyLCBsZW4sIHYpKQogCQlyZXR1cm4gMDsKIAotCXJldHVybiBrdm1faW9fYnVzX3JlYWQoJnZjcHUtPmt2bS0+bW1pb19idXMsIGFkZHIsIGxlbiwgdik7CisJcmV0dXJuIGt2bV9pb19idXNfcmVhZCh2Y3B1LT5rdm0sIEtWTV9NTUlPX0JVUywgYWRkciwgbGVuLCB2KTsKIH0KIAotc3RhdGljIGludCBrdm1fcmVhZF9ndWVzdF92aXJ0KGd2YV90IGFkZHIsIHZvaWQgKnZhbCwgdW5zaWduZWQgaW50IGJ5dGVzLAotCQkJICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK2dwYV90IGt2bV9tbXVfZ3ZhX3RvX2dwYV9yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1MzIgKmVycm9yKQoreworCXUzMiBhY2Nlc3MgPSAoa3ZtX3g4Nl9vcHMtPmdldF9jcGwodmNwdSkgPT0gMykgPyBQRkVSUl9VU0VSX01BU0sgOiAwOworCXJldHVybiB2Y3B1LT5hcmNoLm1tdS5ndmFfdG9fZ3BhKHZjcHUsIGd2YSwgYWNjZXNzLCBlcnJvcik7Cit9CisKKyBncGFfdCBrdm1fbW11X2d2YV90b19ncGFfZmV0Y2goc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBndmFfdCBndmEsIHUzMiAqZXJyb3IpCit7CisJdTMyIGFjY2VzcyA9IChrdm1feDg2X29wcy0+Z2V0X2NwbCh2Y3B1KSA9PSAzKSA/IFBGRVJSX1VTRVJfTUFTSyA6IDA7CisJYWNjZXNzIHw9IFBGRVJSX0ZFVENIX01BU0s7CisJcmV0dXJuIHZjcHUtPmFyY2gubW11Lmd2YV90b19ncGEodmNwdSwgZ3ZhLCBhY2Nlc3MsIGVycm9yKTsKK30KKworZ3BhX3Qga3ZtX21tdV9ndmFfdG9fZ3BhX3dyaXRlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3ZhX3QgZ3ZhLCB1MzIgKmVycm9yKQoreworCXUzMiBhY2Nlc3MgPSAoa3ZtX3g4Nl9vcHMtPmdldF9jcGwodmNwdSkgPT0gMykgPyBQRkVSUl9VU0VSX01BU0sgOiAwOworCWFjY2VzcyB8PSBQRkVSUl9XUklURV9NQVNLOworCXJldHVybiB2Y3B1LT5hcmNoLm1tdS5ndmFfdG9fZ3BhKHZjcHUsIGd2YSwgYWNjZXNzLCBlcnJvcik7Cit9CisKKy8qIHVzZXMgdGhpcyB0byBhY2Nlc3MgYW55IGd1ZXN0J3MgbWFwcGVkIG1lbW9yeSB3aXRob3V0IGNoZWNraW5nIENQTCAqLworZ3BhX3Qga3ZtX21tdV9ndmFfdG9fZ3BhX3N5c3RlbShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGd2YV90IGd2YSwgdTMyICplcnJvcikKK3sKKwlyZXR1cm4gdmNwdS0+YXJjaC5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBndmEsIDAsIGVycm9yKTsKK30KKworc3RhdGljIGludCBrdm1fcmVhZF9ndWVzdF92aXJ0X2hlbHBlcihndmFfdCBhZGRyLCB2b2lkICp2YWwsIHVuc2lnbmVkIGludCBieXRlcywKKwkJCQkgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBhY2Nlc3MsCisJCQkJICAgICAgdTMyICplcnJvcikKIHsKIAl2b2lkICpkYXRhID0gdmFsOwogCWludCByID0gWDg2RU1VTF9DT05USU5VRTsKIAogCXdoaWxlIChieXRlcykgewotCQlncGFfdCBncGEgPSB2Y3B1LT5hcmNoLm1tdS5ndmFfdG9fZ3BhKHZjcHUsIGFkZHIpOworCQlncGFfdCBncGEgPSB2Y3B1LT5hcmNoLm1tdS5ndmFfdG9fZ3BhKHZjcHUsIGFkZHIsIGFjY2VzcywgZXJyb3IpOwogCQl1bnNpZ25lZCBvZmZzZXQgPSBhZGRyICYgKFBBR0VfU0laRS0xKTsKIAkJdW5zaWduZWQgdG9yZWFkID0gbWluKGJ5dGVzLCAodW5zaWduZWQpUEFHRV9TSVpFIC0gb2Zmc2V0KTsKIAkJaW50IHJldDsKQEAgLTI3NjcsMTQgKzMwOTcsMzcgQEAKIAlyZXR1cm4gcjsKIH0KIAorLyogdXNlZCBmb3IgaW5zdHJ1Y3Rpb24gZmV0Y2hpbmcgKi8KK3N0YXRpYyBpbnQga3ZtX2ZldGNoX2d1ZXN0X3ZpcnQoZ3ZhX3QgYWRkciwgdm9pZCAqdmFsLCB1bnNpZ25lZCBpbnQgYnl0ZXMsCisJCQkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKmVycm9yKQoreworCXUzMiBhY2Nlc3MgPSAoa3ZtX3g4Nl9vcHMtPmdldF9jcGwodmNwdSkgPT0gMykgPyBQRkVSUl9VU0VSX01BU0sgOiAwOworCXJldHVybiBrdm1fcmVhZF9ndWVzdF92aXJ0X2hlbHBlcihhZGRyLCB2YWwsIGJ5dGVzLCB2Y3B1LAorCQkJCQkgIGFjY2VzcyB8IFBGRVJSX0ZFVENIX01BU0ssIGVycm9yKTsKK30KKworc3RhdGljIGludCBrdm1fcmVhZF9ndWVzdF92aXJ0KGd2YV90IGFkZHIsIHZvaWQgKnZhbCwgdW5zaWduZWQgaW50IGJ5dGVzLAorCQkJICAgICAgIHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyICplcnJvcikKK3sKKwl1MzIgYWNjZXNzID0gKGt2bV94ODZfb3BzLT5nZXRfY3BsKHZjcHUpID09IDMpID8gUEZFUlJfVVNFUl9NQVNLIDogMDsKKwlyZXR1cm4ga3ZtX3JlYWRfZ3Vlc3RfdmlydF9oZWxwZXIoYWRkciwgdmFsLCBieXRlcywgdmNwdSwgYWNjZXNzLAorCQkJCQkgIGVycm9yKTsKK30KKworc3RhdGljIGludCBrdm1fcmVhZF9ndWVzdF92aXJ0X3N5c3RlbShndmFfdCBhZGRyLCB2b2lkICp2YWwsIHVuc2lnbmVkIGludCBieXRlcywKKwkJCSAgICAgICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiAqZXJyb3IpCit7CisJcmV0dXJuIGt2bV9yZWFkX2d1ZXN0X3ZpcnRfaGVscGVyKGFkZHIsIHZhbCwgYnl0ZXMsIHZjcHUsIDAsIGVycm9yKTsKK30KKwogc3RhdGljIGludCBrdm1fd3JpdGVfZ3Vlc3RfdmlydChndmFfdCBhZGRyLCB2b2lkICp2YWwsIHVuc2lnbmVkIGludCBieXRlcywKLQkJCQlzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCisJCQkJc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgKmVycm9yKQogewogCXZvaWQgKmRhdGEgPSB2YWw7CiAJaW50IHIgPSBYODZFTVVMX0NPTlRJTlVFOwogCiAJd2hpbGUgKGJ5dGVzKSB7Ci0JCWdwYV90IGdwYSA9IHZjcHUtPmFyY2gubW11Lmd2YV90b19ncGEodmNwdSwgYWRkcik7CisJCWdwYV90IGdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV93cml0ZSh2Y3B1LCBhZGRyLCBlcnJvcik7CiAJCXVuc2lnbmVkIG9mZnNldCA9IGFkZHIgJiAoUEFHRV9TSVpFLTEpOwogCQl1bnNpZ25lZCB0b3dyaXRlID0gbWluKGJ5dGVzLCAodW5zaWduZWQpUEFHRV9TSVpFIC0gb2Zmc2V0KTsKIAkJaW50IHJldDsKQEAgLTI4MDQsNiArMzE1Nyw3IEBACiAJCQkJICBzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CiAJZ3BhX3QgICAgICAgICAgICAgICAgIGdwYTsKKwl1MzIgZXJyb3JfY29kZTsKIAogCWlmICh2Y3B1LT5tbWlvX3JlYWRfY29tcGxldGVkKSB7CiAJCW1lbWNweSh2YWwsIHZjcHUtPm1taW9fZGF0YSwgYnl0ZXMpOwpAQCAtMjgxMywxNyArMzE2NywyMCBAQAogCQlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIAl9CiAKLQlncGEgPSB2Y3B1LT5hcmNoLm1tdS5ndmFfdG9fZ3BhKHZjcHUsIGFkZHIpOworCWdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV9yZWFkKHZjcHUsIGFkZHIsICZlcnJvcl9jb2RlKTsKKworCWlmIChncGEgPT0gVU5NQVBQRURfR1ZBKSB7CisJCWt2bV9pbmplY3RfcGFnZV9mYXVsdCh2Y3B1LCBhZGRyLCBlcnJvcl9jb2RlKTsKKwkJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOworCX0KIAogCS8qIEZvciBBUElDIGFjY2VzcyB2bWV4aXQgKi8KIAlpZiAoKGdwYSAmIFBBR0VfTUFTSykgPT0gQVBJQ19ERUZBVUxUX1BIWVNfQkFTRSkKIAkJZ290byBtbWlvOwogCi0JaWYgKGt2bV9yZWFkX2d1ZXN0X3ZpcnQoYWRkciwgdmFsLCBieXRlcywgdmNwdSkKKwlpZiAoa3ZtX3JlYWRfZ3Vlc3RfdmlydChhZGRyLCB2YWwsIGJ5dGVzLCB2Y3B1LCBOVUxMKQogCQkJCT09IFg4NkVNVUxfQ09OVElOVUUpCiAJCXJldHVybiBYODZFTVVMX0NPTlRJTlVFOwotCWlmIChncGEgPT0gVU5NQVBQRURfR1ZBKQotCQlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CiAKIG1taW86CiAJLyoKQEAgLTI4NjIsMTEgKzMyMTksMTIgQEAKIAkJCQkJICAgc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewogCWdwYV90ICAgICAgICAgICAgICAgICBncGE7CisJdTMyIGVycm9yX2NvZGU7CiAKLQlncGEgPSB2Y3B1LT5hcmNoLm1tdS5ndmFfdG9fZ3BhKHZjcHUsIGFkZHIpOworCWdwYSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV93cml0ZSh2Y3B1LCBhZGRyLCAmZXJyb3JfY29kZSk7CiAKIAlpZiAoZ3BhID09IFVOTUFQUEVEX0dWQSkgewotCQlrdm1faW5qZWN0X3BhZ2VfZmF1bHQodmNwdSwgYWRkciwgMik7CisJCWt2bV9pbmplY3RfcGFnZV9mYXVsdCh2Y3B1LCBhZGRyLCBlcnJvcl9jb2RlKTsKIAkJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwogCX0KIApAQCAtMjkzMCw3ICszMjg4LDcgQEAKIAkJY2hhciAqa2FkZHI7CiAJCXU2NCB2YWw7CiAKLQkJZ3BhID0gdmNwdS0+YXJjaC5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBhZGRyKTsKKwkJZ3BhID0ga3ZtX21tdV9ndmFfdG9fZ3BhX3dyaXRlKHZjcHUsIGFkZHIsIE5VTEwpOwogCiAJCWlmIChncGEgPT0gVU5NQVBQRURfR1ZBIHx8CiAJCSAgIChncGEgJiBQQUdFX01BU0spID09IEFQSUNfREVGQVVMVF9QSFlTX0JBU0UpCkBAIC0yOTY3LDM1ICszMzI1LDIxIEBACiAKIGludCBlbXVsYXRlX2NsdHMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogewotCWt2bV94ODZfb3BzLT5zZXRfY3IwKHZjcHUsIHZjcHUtPmFyY2guY3IwICYgflg4Nl9DUjBfVFMpOworCWt2bV94ODZfb3BzLT5zZXRfY3IwKHZjcHUsIGt2bV9yZWFkX2NyMF9iaXRzKHZjcHUsIH5YODZfQ1IwX1RTKSk7CisJa3ZtX3g4Nl9vcHMtPmZwdV9hY3RpdmF0ZSh2Y3B1KTsKIAlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIH0KIAogaW50IGVtdWxhdG9yX2dldF9kcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IGRyLCB1bnNpZ25lZCBsb25nICpkZXN0KQogewotCXN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGN0eHQtPnZjcHU7Ci0KLQlzd2l0Y2ggKGRyKSB7Ci0JY2FzZSAwIC4uLiAzOgotCQkqZGVzdCA9IGt2bV94ODZfb3BzLT5nZXRfZHIodmNwdSwgZHIpOwotCQlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKLQlkZWZhdWx0OgotCQlwcl91bmltcGwodmNwdSwgIiVzOiB1bmV4cGVjdGVkIGRyICV1XG4iLCBfX2Z1bmNfXywgZHIpOwotCQlyZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Ci0JfQorCXJldHVybiBrdm1feDg2X29wcy0+Z2V0X2RyKGN0eHQtPnZjcHUsIGRyLCBkZXN0KTsKIH0KIAogaW50IGVtdWxhdG9yX3NldF9kcihzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCwgaW50IGRyLCB1bnNpZ25lZCBsb25nIHZhbHVlKQogewogCXVuc2lnbmVkIGxvbmcgbWFzayA9IChjdHh0LT5tb2RlID09IFg4NkVNVUxfTU9ERV9QUk9UNjQpID8gfjBVTEwgOiB+MFU7Ci0JaW50IGV4Y2VwdGlvbjsKIAotCWt2bV94ODZfb3BzLT5zZXRfZHIoY3R4dC0+dmNwdSwgZHIsIHZhbHVlICYgbWFzaywgJmV4Y2VwdGlvbik7Ci0JaWYgKGV4Y2VwdGlvbikgewotCQkvKiBGSVhNRTogYmV0dGVyIGhhbmRsaW5nICovCi0JCXJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLQl9Ci0JcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CisJcmV0dXJuIGt2bV94ODZfb3BzLT5zZXRfZHIoY3R4dC0+dmNwdSwgZHIsIHZhbHVlICYgbWFzayk7CiB9CiAKIHZvaWQga3ZtX3JlcG9ydF9lbXVsYXRpb25fZmFpbHVyZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGNvbnN0IGNoYXIgKmNvbnRleHQpCkBAIC0zMDA5LDcgKzMzNTMsNyBAQAogCiAJcmlwX2xpbmVhciA9IHJpcCArIGdldF9zZWdtZW50X2Jhc2UodmNwdSwgVkNQVV9TUkVHX0NTKTsKIAotCWt2bV9yZWFkX2d1ZXN0X3ZpcnQocmlwX2xpbmVhciwgKHZvaWQgKilvcGNvZGVzLCA0LCB2Y3B1KTsKKwlrdm1fcmVhZF9ndWVzdF92aXJ0KHJpcF9saW5lYXIsICh2b2lkICopb3Bjb2RlcywgNCwgdmNwdSwgTlVMTCk7CiAKIAlwcmludGsoS0VSTl9FUlIgImVtdWxhdGlvbiBmYWlsZWQgKCVzKSByaXAgJWx4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCiAJICAgICAgIGNvbnRleHQsIHJpcCwgb3Bjb2Rlc1swXSwgb3Bjb2Rlc1sxXSwgb3Bjb2Rlc1syXSwgb3Bjb2Rlc1szXSk7CkBAIC0zMDE3LDcgKzMzNjEsOCBAQAogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3JlcG9ydF9lbXVsYXRpb25fZmFpbHVyZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIGVtdWxhdGVfb3BzID0gewotCS5yZWFkX3N0ZCAgICAgICAgICAgID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydCwKKwkucmVhZF9zdGQgICAgICAgICAgICA9IGt2bV9yZWFkX2d1ZXN0X3ZpcnRfc3lzdGVtLAorCS5mZXRjaCAgICAgICAgICAgICAgID0ga3ZtX2ZldGNoX2d1ZXN0X3ZpcnQsCiAJLnJlYWRfZW11bGF0ZWQgICAgICAgPSBlbXVsYXRvcl9yZWFkX2VtdWxhdGVkLAogCS53cml0ZV9lbXVsYXRlZCAgICAgID0gZW11bGF0b3Jfd3JpdGVfZW11bGF0ZWQsCiAJLmNtcHhjaGdfZW11bGF0ZWQgICAgPSBlbXVsYXRvcl9jbXB4Y2hnX2VtdWxhdGVkLApAQCAtMzA2MCw4ICszNDA1LDkgQEAKIAkJdmNwdS0+YXJjaC5lbXVsYXRlX2N0eHQudmNwdSA9IHZjcHU7CiAJCXZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmVmbGFncyA9IGt2bV9nZXRfcmZsYWdzKHZjcHUpOwogCQl2Y3B1LT5hcmNoLmVtdWxhdGVfY3R4dC5tb2RlID0KKwkJCSghaXNfcHJvdG1vZGUodmNwdSkpID8gWDg2RU1VTF9NT0RFX1JFQUwgOgogCQkJKHZjcHUtPmFyY2guZW11bGF0ZV9jdHh0LmVmbGFncyAmIFg4Nl9FRkxBR1NfVk0pCi0JCQk/IFg4NkVNVUxfTU9ERV9SRUFMIDogY3NfbAorCQkJPyBYODZFTVVMX01PREVfVk04NiA6IGNzX2wKIAkJCT8gWDg2RU1VTF9NT0RFX1BST1Q2NCA6CWNzX2RiCiAJCQk/IFg4NkVNVUxfTU9ERV9QUk9UMzIgOiBYODZFTVVMX01PREVfUFJPVDE2OwogCkBAIC0zMTUzLDEyICszNDk5LDE3IEBACiAJZ3ZhX3QgcSA9IHZjcHUtPmFyY2gucGlvLmd1ZXN0X2d2YTsKIAl1bnNpZ25lZCBieXRlczsKIAlpbnQgcmV0OworCXUzMiBlcnJvcl9jb2RlOwogCiAJYnl0ZXMgPSB2Y3B1LT5hcmNoLnBpby5zaXplICogdmNwdS0+YXJjaC5waW8uY3VyX2NvdW50OwogCWlmICh2Y3B1LT5hcmNoLnBpby5pbikKLQkJcmV0ID0ga3ZtX3dyaXRlX2d1ZXN0X3ZpcnQocSwgcCwgYnl0ZXMsIHZjcHUpOworCQlyZXQgPSBrdm1fd3JpdGVfZ3Vlc3RfdmlydChxLCBwLCBieXRlcywgdmNwdSwgJmVycm9yX2NvZGUpOwogCWVsc2UKLQkJcmV0ID0ga3ZtX3JlYWRfZ3Vlc3RfdmlydChxLCBwLCBieXRlcywgdmNwdSk7CisJCXJldCA9IGt2bV9yZWFkX2d1ZXN0X3ZpcnQocSwgcCwgYnl0ZXMsIHZjcHUsICZlcnJvcl9jb2RlKTsKKworCWlmIChyZXQgPT0gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQpCisJCWt2bV9pbmplY3RfcGFnZV9mYXVsdCh2Y3B1LCBxLCBlcnJvcl9jb2RlKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTMxNzksNyArMzUzMCw3IEBACiAJCWlmIChpby0+aW4pIHsKIAkJCXIgPSBwaW9fY29weV9kYXRhKHZjcHUpOwogCQkJaWYgKHIpCi0JCQkJcmV0dXJuIHI7CisJCQkJZ290byBvdXQ7CiAJCX0KIAogCQlkZWx0YSA9IDE7CkBAIC0zMjA2LDcgKzM1NTcsNyBAQAogCQkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SU0ksIHZhbCk7CiAJCX0KIAl9Ci0KK291dDoKIAlpby0+Y291bnQgLT0gaW8tPmN1cl9jb3VudDsKIAlpby0+Y3VyX2NvdW50ID0gMDsKIApAQCAtMzIxOSwxMSArMzU3MCwxMiBAQAogCWludCByOwogCiAJaWYgKHZjcHUtPmFyY2gucGlvLmluKQotCQlyID0ga3ZtX2lvX2J1c19yZWFkKCZ2Y3B1LT5rdm0tPnBpb19idXMsIHZjcHUtPmFyY2gucGlvLnBvcnQsCisJCXIgPSBrdm1faW9fYnVzX3JlYWQodmNwdS0+a3ZtLCBLVk1fUElPX0JVUywgdmNwdS0+YXJjaC5waW8ucG9ydCwKIAkJCQkgICAgdmNwdS0+YXJjaC5waW8uc2l6ZSwgcGQpOwogCWVsc2UKLQkJciA9IGt2bV9pb19idXNfd3JpdGUoJnZjcHUtPmt2bS0+cGlvX2J1cywgdmNwdS0+YXJjaC5waW8ucG9ydCwKLQkJCQkgICAgIHZjcHUtPmFyY2gucGlvLnNpemUsIHBkKTsKKwkJciA9IGt2bV9pb19idXNfd3JpdGUodmNwdS0+a3ZtLCBLVk1fUElPX0JVUywKKwkJCQkgICAgIHZjcHUtPmFyY2gucGlvLnBvcnQsIHZjcHUtPmFyY2gucGlvLnNpemUsCisJCQkJICAgICBwZCk7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTMyMzQsNyArMzU4Niw3IEBACiAJaW50IGksIHIgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IGlvLT5jdXJfY291bnQ7IGkrKykgewotCQlpZiAoa3ZtX2lvX2J1c193cml0ZSgmdmNwdS0+a3ZtLT5waW9fYnVzLAorCQlpZiAoa3ZtX2lvX2J1c193cml0ZSh2Y3B1LT5rdm0sIEtWTV9QSU9fQlVTLAogCQkJCSAgICAgaW8tPnBvcnQsIGlvLT5zaXplLCBwZCkpIHsKIAkJCXIgPSAtRU9QTk9UU1VQUDsKIAkJCWJyZWFrOwpAQCAtMzI0OCw2ICszNjAwLDggQEAKIHsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAorCXRyYWNlX2t2bV9waW8oIWluLCBwb3J0LCBzaXplLCAxKTsKKwogCXZjcHUtPnJ1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTzsKIAl2Y3B1LT5ydW4tPmlvLmRpcmVjdGlvbiA9IGluID8gS1ZNX0VYSVRfSU9fSU4gOiBLVk1fRVhJVF9JT19PVVQ7CiAJdmNwdS0+cnVuLT5pby5zaXplID0gdmNwdS0+YXJjaC5waW8uc2l6ZSA9IHNpemU7CkBAIC0zMjU5LDExICszNjEzLDEwIEBACiAJdmNwdS0+YXJjaC5waW8uZG93biA9IDA7CiAJdmNwdS0+YXJjaC5waW8ucmVwID0gMDsKIAotCXRyYWNlX2t2bV9waW8odmNwdS0+cnVuLT5pby5kaXJlY3Rpb24gPT0gS1ZNX0VYSVRfSU9fT1VULCBwb3J0LAotCQkgICAgICBzaXplLCAxKTsKLQotCXZhbCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpOwotCW1lbWNweSh2Y3B1LT5hcmNoLnBpb19kYXRhLCAmdmFsLCA0KTsKKwlpZiAoIXZjcHUtPmFyY2gucGlvLmluKSB7CisJCXZhbCA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpOworCQltZW1jcHkodmNwdS0+YXJjaC5waW9fZGF0YSwgJnZhbCwgNCk7CisJfQogCiAJaWYgKCFrZXJuZWxfcGlvKHZjcHUsIHZjcHUtPmFyY2gucGlvX2RhdGEpKSB7CiAJCWNvbXBsZXRlX3Bpbyh2Y3B1KTsKQEAgLTMyODAsNiArMzYzMyw4IEBACiAJdW5zaWduZWQgbm93LCBpbl9wYWdlOwogCWludCByZXQgPSAwOwogCisJdHJhY2Vfa3ZtX3BpbyghaW4sIHBvcnQsIHNpemUsIGNvdW50KTsKKwogCXZjcHUtPnJ1bi0+ZXhpdF9yZWFzb24gPSBLVk1fRVhJVF9JTzsKIAl2Y3B1LT5ydW4tPmlvLmRpcmVjdGlvbiA9IGluID8gS1ZNX0VYSVRfSU9fSU4gOiBLVk1fRVhJVF9JT19PVVQ7CiAJdmNwdS0+cnVuLT5pby5zaXplID0gdmNwdS0+YXJjaC5waW8uc2l6ZSA9IHNpemU7CkBAIC0zMjkxLDkgKzM2NDYsNiBAQAogCXZjcHUtPmFyY2gucGlvLmRvd24gPSBkb3duOwogCXZjcHUtPmFyY2gucGlvLnJlcCA9IHJlcDsKIAotCXRyYWNlX2t2bV9waW8odmNwdS0+cnVuLT5pby5kaXJlY3Rpb24gPT0gS1ZNX0VYSVRfSU9fT1VULCBwb3J0LAotCQkgICAgICBzaXplLCBjb3VudCk7Ci0KIAlpZiAoIWNvdW50KSB7CiAJCWt2bV94ODZfb3BzLT5za2lwX2VtdWxhdGVkX2luc3RydWN0aW9uKHZjcHUpOwogCQlyZXR1cm4gMTsKQEAgLTMzMjUsMTAgKzM2NzcsOCBAQAogCWlmICghdmNwdS0+YXJjaC5waW8uaW4pIHsKIAkJLyogc3RyaW5nIFBJTyB3cml0ZSAqLwogCQlyZXQgPSBwaW9fY29weV9kYXRhKHZjcHUpOwotCQlpZiAocmV0ID09IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUKSB7Ci0JCQlrdm1faW5qZWN0X2dwKHZjcHUsIDApOworCQlpZiAocmV0ID09IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUKQogCQkJcmV0dXJuIDE7Ci0JCX0KIAkJaWYgKHJldCA9PSAwICYmICFwaW9fc3RyaW5nX3dyaXRlKHZjcHUpKSB7CiAJCQljb21wbGV0ZV9waW8odmNwdSk7CiAJCQlpZiAodmNwdS0+YXJjaC5waW8uY291bnQgPT0gMCkKQEAgLTM0ODcsMTEgKzM4MzcsNzYgQEAKIAkJcmV0dXJuIGEwIHwgKChncGFfdClhMSA8PCAzMik7CiB9CiAKK2ludCBrdm1faHZfaHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwl1NjQgcGFyYW0sIGluZ3BhLCBvdXRncGEsIHJldDsKKwl1aW50MTZfdCBjb2RlLCByZXBfaWR4LCByZXBfY250LCByZXMgPSBIVl9TVEFUVVNfU1VDQ0VTUywgcmVwX2RvbmUgPSAwOworCWJvb2wgZmFzdCwgbG9uZ21vZGU7CisJaW50IGNzX2RiLCBjc19sOworCisJLyoKKwkgKiBoeXBlcmNhbGwgZ2VuZXJhdGVzIFVEIGZyb20gbm9uIHplcm8gY3BsIGFuZCByZWFsIG1vZGUKKwkgKiBwZXIgSFlQRVItViBzcGVjCisJICovCisJaWYgKGt2bV94ODZfb3BzLT5nZXRfY3BsKHZjcHUpICE9IDAgfHwgIWlzX3Byb3Rtb2RlKHZjcHUpKSB7CisJCWt2bV9xdWV1ZV9leGNlcHRpb24odmNwdSwgVURfVkVDVE9SKTsKKwkJcmV0dXJuIDA7CisJfQorCisJa3ZtX3g4Nl9vcHMtPmdldF9jc19kYl9sX2JpdHModmNwdSwgJmNzX2RiLCAmY3NfbCk7CisJbG9uZ21vZGUgPSBpc19sb25nX21vZGUodmNwdSkgJiYgY3NfbCA9PSAxOworCisJaWYgKCFsb25nbW9kZSkgeworCQlwYXJhbSA9ICgodTY0KWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SRFgpIDw8IDMyKSB8CisJCQkoa3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JBWCkgJiAweGZmZmZmZmZmKTsKKwkJaW5ncGEgPSAoKHU2NClrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkJYKSA8PCAzMikgfAorCQkJKGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQ1gpICYgMHhmZmZmZmZmZik7CisJCW91dGdwYSA9ICgodTY0KWt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SREkpIDw8IDMyKSB8CisJCQkoa3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JTSSkgJiAweGZmZmZmZmZmKTsKKwl9CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCWVsc2UgeworCQlwYXJhbSA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQ1gpOworCQlpbmdwYSA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SRFgpOworCQlvdXRncGEgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUjgpOworCX0KKyNlbmRpZgorCisJY29kZSA9IHBhcmFtICYgMHhmZmZmOworCWZhc3QgPSAocGFyYW0gPj4gMTYpICYgMHgxOworCXJlcF9jbnQgPSAocGFyYW0gPj4gMzIpICYgMHhmZmY7CisJcmVwX2lkeCA9IChwYXJhbSA+PiA0OCkgJiAweGZmZjsKKworCXRyYWNlX2t2bV9odl9oeXBlcmNhbGwoY29kZSwgZmFzdCwgcmVwX2NudCwgcmVwX2lkeCwgaW5ncGEsIG91dGdwYSk7CisKKwlzd2l0Y2ggKGNvZGUpIHsKKwljYXNlIEhWX1g2NF9IVl9OT1RJRllfTE9OR19TUElOX1dBSVQ6CisJCWt2bV92Y3B1X29uX3NwaW4odmNwdSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlcyA9IEhWX1NUQVRVU19JTlZBTElEX0hZUEVSQ0FMTF9DT0RFOworCQlicmVhazsKKwl9CisKKwlyZXQgPSByZXMgfCAoKCh1NjQpcmVwX2RvbmUgJiAweGZmZikgPDwgMzIpOworCWlmIChsb25nbW9kZSkgeworCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JBWCwgcmV0KTsKKwl9IGVsc2UgeworCQlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JEWCwgcmV0ID4+IDMyKTsKKwkJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SQVgsIHJldCAmIDB4ZmZmZmZmZmYpOworCX0KKworCXJldHVybiAxOworfQorCiBpbnQga3ZtX2VtdWxhdGVfaHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIG5yLCBhMCwgYTEsIGEyLCBhMywgcmV0OwogCWludCByID0gMTsKIAorCWlmIChrdm1faHZfaHlwZXJjYWxsX2VuYWJsZWQodmNwdS0+a3ZtKSkKKwkJcmV0dXJuIGt2bV9odl9oeXBlcmNhbGwodmNwdSk7CisKIAluciA9IGt2bV9yZWdpc3Rlcl9yZWFkKHZjcHUsIFZDUFVfUkVHU19SQVgpOwogCWEwID0ga3ZtX3JlZ2lzdGVyX3JlYWQodmNwdSwgVkNQVV9SRUdTX1JCWCk7CiAJYTEgPSBrdm1fcmVnaXN0ZXJfcmVhZCh2Y3B1LCBWQ1BVX1JFR1NfUkNYKTsKQEAgLTM1MzQsMTAgKzM5NDksOCBAQAogaW50IGt2bV9maXhfaHlwZXJjYWxsKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAljaGFyIGluc3RydWN0aW9uWzNdOwotCWludCByZXQgPSAwOwogCXVuc2lnbmVkIGxvbmcgcmlwID0ga3ZtX3JpcF9yZWFkKHZjcHUpOwogCi0KIAkvKgogCSAqIEJsb3cgb3V0IHRoZSBNTVUgdG8gZW5zdXJlIHRoYXQgbm8gb3RoZXIgVkNQVSBoYXMgYW4gYWN0aXZlIG1hcHBpbmcKIAkgKiB0byBlbnN1cmUgdGhhdCB0aGUgdXBkYXRlZCBoeXBlcmNhbGwgYXBwZWFycyBhdG9taWNhbGx5IGFjcm9zcyBhbGwKQEAgLTM1NDYsMTEgKzM5NTksOCBAQAogCWt2bV9tbXVfemFwX2FsbCh2Y3B1LT5rdm0pOwogCiAJa3ZtX3g4Nl9vcHMtPnBhdGNoX2h5cGVyY2FsbCh2Y3B1LCBpbnN0cnVjdGlvbik7Ci0JaWYgKGVtdWxhdG9yX3dyaXRlX2VtdWxhdGVkKHJpcCwgaW5zdHJ1Y3Rpb24sIDMsIHZjcHUpCi0JICAgICE9IFg4NkVNVUxfQ09OVElOVUUpCi0JCXJldCA9IC1FRkFVTFQ7CiAKLQlyZXR1cm4gcmV0OworCXJldHVybiBlbXVsYXRvcl93cml0ZV9lbXVsYXRlZChyaXAsIGluc3RydWN0aW9uLCAzLCB2Y3B1KTsKIH0KIAogc3RhdGljIHU2NCBta19jcl82NCh1NjQgY3Vycl9jciwgdTMyIG5ld192YWwpCkBAIC0zNTgzLDEwICszOTkzLDkgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHZhbHVlOwogCi0Ja3ZtX3g4Nl9vcHMtPmRlY2FjaGVfY3I0X2d1ZXN0X2JpdHModmNwdSk7CiAJc3dpdGNoIChjcikgewogCWNhc2UgMDoKLQkJdmFsdWUgPSB2Y3B1LT5hcmNoLmNyMDsKKwkJdmFsdWUgPSBrdm1fcmVhZF9jcjAodmNwdSk7CiAJCWJyZWFrOwogCWNhc2UgMjoKIAkJdmFsdWUgPSB2Y3B1LT5hcmNoLmNyMjsKQEAgLTM1OTUsNyArNDAwNCw3IEBACiAJCXZhbHVlID0gdmNwdS0+YXJjaC5jcjM7CiAJCWJyZWFrOwogCWNhc2UgNDoKLQkJdmFsdWUgPSB2Y3B1LT5hcmNoLmNyNDsKKwkJdmFsdWUgPSBrdm1fcmVhZF9jcjQodmNwdSk7CiAJCWJyZWFrOwogCWNhc2UgODoKIAkJdmFsdWUgPSBrdm1fZ2V0X2NyOCh2Y3B1KTsKQEAgLTM2MTMsNyArNDAyMiw3IEBACiB7CiAJc3dpdGNoIChjcikgewogCWNhc2UgMDoKLQkJa3ZtX3NldF9jcjAodmNwdSwgbWtfY3JfNjQodmNwdS0+YXJjaC5jcjAsIHZhbCkpOworCQlrdm1fc2V0X2NyMCh2Y3B1LCBta19jcl82NChrdm1fcmVhZF9jcjAodmNwdSksIHZhbCkpOwogCQkqcmZsYWdzID0ga3ZtX2dldF9yZmxhZ3ModmNwdSk7CiAJCWJyZWFrOwogCWNhc2UgMjoKQEAgLTM2MjMsNyArNDAzMiw3IEBACiAJCWt2bV9zZXRfY3IzKHZjcHUsIHZhbCk7CiAJCWJyZWFrOwogCWNhc2UgNDoKLQkJa3ZtX3NldF9jcjQodmNwdSwgbWtfY3JfNjQodmNwdS0+YXJjaC5jcjQsIHZhbCkpOworCQlrdm1fc2V0X2NyNCh2Y3B1LCBta19jcl82NChrdm1fcmVhZF9jcjQodmNwdSksIHZhbCkpOwogCQlicmVhazsKIAljYXNlIDg6CiAJCWt2bV9zZXRfY3I4KHZjcHUsIHZhbCAmIDB4ZlVMKTsKQEAgLTM2OTAsNiArNDA5OSw3IEBACiAJfQogCXJldHVybiBiZXN0OwogfQorRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2ZpbmRfY3B1aWRfZW50cnkpOwogCiBpbnQgY3B1aWRfbWF4cGh5YWRkcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CkBAIC0zNzczLDE0ICs0MTgzLDE1IEBACiBzdGF0aWMgdm9pZCB2YXBpY19leGl0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qga3ZtX2xhcGljICphcGljID0gdmNwdS0+YXJjaC5hcGljOworCWludCBpZHg7CiAKIAlpZiAoIWFwaWMgfHwgIWFwaWMtPnZhcGljX2FkZHIpCiAJCXJldHVybjsKIAotCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKKwlpZHggPSBzcmN1X3JlYWRfbG9jaygmdmNwdS0+a3ZtLT5zcmN1KTsKIAlrdm1fcmVsZWFzZV9wYWdlX2RpcnR5KGFwaWMtPnZhcGljX3BhZ2UpOwogCW1hcmtfcGFnZV9kaXJ0eSh2Y3B1LT5rdm0sIGFwaWMtPnZhcGljX2FkZHIgPj4gUEFHRV9TSElGVCk7Ci0JdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKKwlzcmN1X3JlYWRfdW5sb2NrKCZ2Y3B1LT5rdm0tPnNyY3UsIGlkeCk7CiB9CiAKIHN0YXRpYyB2b2lkIHVwZGF0ZV9jcjhfaW50ZXJjZXB0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKQEAgLTM4NzYsMTIgKzQyODcsMTcgQEAKIAkJCXIgPSAwOwogCQkJZ290byBvdXQ7CiAJCX0KKwkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLVk1fUkVRX0RFQUNUSVZBVEVfRlBVLCAmdmNwdS0+cmVxdWVzdHMpKSB7CisJCQl2Y3B1LT5mcHVfYWN0aXZlID0gMDsKKwkJCWt2bV94ODZfb3BzLT5mcHVfZGVhY3RpdmF0ZSh2Y3B1KTsKKwkJfQogCX0KIAogCXByZWVtcHRfZGlzYWJsZSgpOwogCiAJa3ZtX3g4Nl9vcHMtPnByZXBhcmVfZ3Vlc3Rfc3dpdGNoKHZjcHUpOwotCWt2bV9sb2FkX2d1ZXN0X2ZwdSh2Y3B1KTsKKwlpZiAodmNwdS0+ZnB1X2FjdGl2ZSkKKwkJa3ZtX2xvYWRfZ3Vlc3RfZnB1KHZjcHUpOwogCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIApAQCAtMzkwOSw3ICs0MzI1LDcgQEAKIAkJa3ZtX2xhcGljX3N5bmNfdG9fdmFwaWModmNwdSk7CiAJfQogCi0JdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKKwlzcmN1X3JlYWRfdW5sb2NrKCZ2Y3B1LT5rdm0tPnNyY3UsIHZjcHUtPnNyY3VfaWR4KTsKIAogCWt2bV9ndWVzdF9lbnRlcigpOwogCkBAIC0zOTUxLDcgKzQzNjcsNyBAQAogCiAJcHJlZW1wdF9lbmFibGUoKTsKIAotCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKKwl2Y3B1LT5zcmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKCZ2Y3B1LT5rdm0tPnNyY3UpOwogCiAJLyoKIAkgKiBQcm9maWxlIEtWTSBleGl0IFJJUHM6CkBAIC0zOTczLDYgKzQzODksNyBAQAogc3RhdGljIGludCBfX3ZjcHVfcnVuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKIAlpbnQgcjsKKwlzdHJ1Y3Qga3ZtICprdm0gPSB2Y3B1LT5rdm07CiAKIAlpZiAodW5saWtlbHkodmNwdS0+YXJjaC5tcF9zdGF0ZSA9PSBLVk1fTVBfU1RBVEVfU0lQSV9SRUNFSVZFRCkpIHsKIAkJcHJfZGVidWcoInZjcHUgJWQgcmVjZWl2ZWQgc2lwaSB3aXRoIHZlY3RvciAjICV4XG4iLApAQCAtMzk4NCw3ICs0NDAxLDcgQEAKIAkJdmNwdS0+YXJjaC5tcF9zdGF0ZSA9IEtWTV9NUF9TVEFURV9SVU5OQUJMRTsKIAl9CiAKLQlkb3duX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CisJdmNwdS0+c3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jaygma3ZtLT5zcmN1KTsKIAl2YXBpY19lbnRlcih2Y3B1KTsKIAogCXIgPSAxOwpAQCAtMzk5Miw5ICs0NDA5LDkgQEAKIAkJaWYgKHZjcHUtPmFyY2gubXBfc3RhdGUgPT0gS1ZNX01QX1NUQVRFX1JVTk5BQkxFKQogCQkJciA9IHZjcHVfZW50ZXJfZ3Vlc3QodmNwdSk7CiAJCWVsc2UgewotCQkJdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKKwkJCXNyY3VfcmVhZF91bmxvY2soJmt2bS0+c3JjdSwgdmNwdS0+c3JjdV9pZHgpOwogCQkJa3ZtX3ZjcHVfYmxvY2sodmNwdSk7Ci0JCQlkb3duX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CisJCQl2Y3B1LT5zcmN1X2lkeCA9IHNyY3VfcmVhZF9sb2NrKCZrdm0tPnNyY3UpOwogCQkJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChLVk1fUkVRX1VOSEFMVCwgJnZjcHUtPnJlcXVlc3RzKSkKIAkJCXsKIAkJCQlzd2l0Y2godmNwdS0+YXJjaC5tcF9zdGF0ZSkgewpAQCAtNDAyOSwxMyArNDQ0NiwxMyBAQAogCQkJKyt2Y3B1LT5zdGF0LnNpZ25hbF9leGl0czsKIAkJfQogCQlpZiAobmVlZF9yZXNjaGVkKCkpIHsKLQkJCXVwX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CisJCQlzcmN1X3JlYWRfdW5sb2NrKCZrdm0tPnNyY3UsIHZjcHUtPnNyY3VfaWR4KTsKIAkJCWt2bV9yZXNjaGVkKHZjcHUpOwotCQkJZG93bl9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOworCQkJdmNwdS0+c3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jaygma3ZtLT5zcmN1KTsKIAkJfQogCX0KIAotCXVwX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CisJc3JjdV9yZWFkX3VubG9jaygma3ZtLT5zcmN1LCB2Y3B1LT5zcmN1X2lkeCk7CiAJcG9zdF9rdm1fcnVuX3NhdmUodmNwdSk7CiAKIAl2YXBpY19leGl0KHZjcHUpOwpAQCAtNDA3NCwxMCArNDQ5MSwxMCBAQAogCQl2Y3B1LT5tbWlvX3JlYWRfY29tcGxldGVkID0gMTsKIAkJdmNwdS0+bW1pb19uZWVkZWQgPSAwOwogCi0JCWRvd25fcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKKwkJdmNwdS0+c3JjdV9pZHggPSBzcmN1X3JlYWRfbG9jaygmdmNwdS0+a3ZtLT5zcmN1KTsKIAkJciA9IGVtdWxhdGVfaW5zdHJ1Y3Rpb24odmNwdSwgdmNwdS0+YXJjaC5tbWlvX2ZhdWx0X2NyMiwgMCwKIAkJCQkJRU1VTFRZUEVfTk9fREVDT0RFKTsKLQkJdXBfcmVhZCgmdmNwdS0+a3ZtLT5zbG90c19sb2NrKTsKKwkJc3JjdV9yZWFkX3VubG9jaygmdmNwdS0+a3ZtLT5zcmN1LCB2Y3B1LT5zcmN1X2lkeCk7CiAJCWlmIChyID09IEVNVUxBVEVfRE9fTU1JTykgewogCQkJLyoKIAkJCSAqIFJlYWQtbW9kaWZ5LXdyaXRlLiAgQmFjayB0byB1c2Vyc3BhY2UuCkBAIC00MjA0LDEzICs0NjIxLDEyIEBACiAJc3JlZ3MtPmdkdC5saW1pdCA9IGR0LmxpbWl0OwogCXNyZWdzLT5nZHQuYmFzZSA9IGR0LmJhc2U7CiAKLQlrdm1feDg2X29wcy0+ZGVjYWNoZV9jcjRfZ3Vlc3RfYml0cyh2Y3B1KTsKLQlzcmVncy0+Y3IwID0gdmNwdS0+YXJjaC5jcjA7CisJc3JlZ3MtPmNyMCA9IGt2bV9yZWFkX2NyMCh2Y3B1KTsKIAlzcmVncy0+Y3IyID0gdmNwdS0+YXJjaC5jcjI7CiAJc3JlZ3MtPmNyMyA9IHZjcHUtPmFyY2guY3IzOwotCXNyZWdzLT5jcjQgPSB2Y3B1LT5hcmNoLmNyNDsKKwlzcmVncy0+Y3I0ID0ga3ZtX3JlYWRfY3I0KHZjcHUpOwogCXNyZWdzLT5jcjggPSBrdm1fZ2V0X2NyOCh2Y3B1KTsKLQlzcmVncy0+ZWZlciA9IHZjcHUtPmFyY2guc2hhZG93X2VmZXI7CisJc3JlZ3MtPmVmZXIgPSB2Y3B1LT5hcmNoLmVmZXI7CiAJc3JlZ3MtPmFwaWNfYmFzZSA9IGt2bV9nZXRfYXBpY19iYXNlKHZjcHUpOwogCiAJbWVtc2V0KHNyZWdzLT5pbnRlcnJ1cHRfYml0bWFwLCAwLCBzaXplb2Ygc3JlZ3MtPmludGVycnVwdF9iaXRtYXApOwpAQCAtNDI5OCwxNCArNDcxNCwyMyBAQAogewogCXN0cnVjdCBkZXNjcmlwdG9yX3RhYmxlIGR0YWJsZTsKIAl1MTYgaW5kZXggPSBzZWxlY3RvciA+PiAzOworCWludCByZXQ7CisJdTMyIGVycjsKKwlndmFfdCBhZGRyOwogCiAJZ2V0X3NlZ21lbnRfZGVzY3JpcHRvcl9kdGFibGUodmNwdSwgc2VsZWN0b3IsICZkdGFibGUpOwogCiAJaWYgKGR0YWJsZS5saW1pdCA8IGluZGV4ICogOCArIDcpIHsKIAkJa3ZtX3F1ZXVlX2V4Y2VwdGlvbl9lKHZjcHUsIEdQX1ZFQ1RPUiwgc2VsZWN0b3IgJiAweGZmZmMpOwotCQlyZXR1cm4gMTsKKwkJcmV0dXJuIFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUOwogCX0KLQlyZXR1cm4ga3ZtX3JlYWRfZ3Vlc3RfdmlydChkdGFibGUuYmFzZSArIGluZGV4KjgsIHNlZ19kZXNjLCBzaXplb2YoKnNlZ19kZXNjKSwgdmNwdSk7CisJYWRkciA9IGR0YWJsZS5iYXNlICsgaW5kZXggKiA4OworCXJldCA9IGt2bV9yZWFkX2d1ZXN0X3ZpcnRfc3lzdGVtKGFkZHIsIHNlZ19kZXNjLCBzaXplb2YoKnNlZ19kZXNjKSwKKwkJCQkJIHZjcHUsICAmZXJyKTsKKwlpZiAocmV0ID09IFg4NkVNVUxfUFJPUEFHQVRFX0ZBVUxUKQorCQlrdm1faW5qZWN0X3BhZ2VfZmF1bHQodmNwdSwgYWRkciwgZXJyKTsKKworICAgICAgIHJldHVybiByZXQ7CiB9CiAKIC8qIGFsbG93ZWQganVzdCBmb3IgOCBieXRlcyBzZWdtZW50cyAqLwpAQCAtNDMxOSwxNSArNDc0NCwyMyBAQAogCiAJaWYgKGR0YWJsZS5saW1pdCA8IGluZGV4ICogOCArIDcpCiAJCXJldHVybiAxOwotCXJldHVybiBrdm1fd3JpdGVfZ3Vlc3RfdmlydChkdGFibGUuYmFzZSArIGluZGV4KjgsIHNlZ19kZXNjLCBzaXplb2YoKnNlZ19kZXNjKSwgdmNwdSk7CisJcmV0dXJuIGt2bV93cml0ZV9ndWVzdF92aXJ0KGR0YWJsZS5iYXNlICsgaW5kZXgqOCwgc2VnX2Rlc2MsIHNpemVvZigqc2VnX2Rlc2MpLCB2Y3B1LCBOVUxMKTsKIH0KIAotc3RhdGljIGdwYV90IGdldF90c3NfYmFzZV9hZGRyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKK3N0YXRpYyBncGFfdCBnZXRfdHNzX2Jhc2VfYWRkcl93cml0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCisJCQkgICAgICAgc3RydWN0IGRlc2Nfc3RydWN0ICpzZWdfZGVzYykKK3sKKwl1MzIgYmFzZV9hZGRyID0gZ2V0X2Rlc2NfYmFzZShzZWdfZGVzYyk7CisKKwlyZXR1cm4ga3ZtX21tdV9ndmFfdG9fZ3BhX3dyaXRlKHZjcHUsIGJhc2VfYWRkciwgTlVMTCk7Cit9CisKK3N0YXRpYyBncGFfdCBnZXRfdHNzX2Jhc2VfYWRkcl9yZWFkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJCSAgICAgc3RydWN0IGRlc2Nfc3RydWN0ICpzZWdfZGVzYykKIHsKIAl1MzIgYmFzZV9hZGRyID0gZ2V0X2Rlc2NfYmFzZShzZWdfZGVzYyk7CiAKLQlyZXR1cm4gdmNwdS0+YXJjaC5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBiYXNlX2FkZHIpOworCXJldHVybiBrdm1fbW11X2d2YV90b19ncGFfcmVhZCh2Y3B1LCBiYXNlX2FkZHIsIE5VTEwpOwogfQogCiBzdGF0aWMgdTE2IGdldF9zZWdtZW50X3NlbGVjdG9yKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgaW50IHNlZykKQEAgLTQzMzgsMTggKzQ3NzEsNiBAQAogCXJldHVybiBrdm1fc2VnLnNlbGVjdG9yOwogfQogCi1zdGF0aWMgaW50IGxvYWRfc2VnbWVudF9kZXNjcmlwdG9yX3RvX2t2bV9kZXNjdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCi0JCQkJCQl1MTYgc2VsZWN0b3IsCi0JCQkJCQlzdHJ1Y3Qga3ZtX3NlZ21lbnQgKmt2bV9zZWcpCi17Ci0Jc3RydWN0IGRlc2Nfc3RydWN0IHNlZ19kZXNjOwotCi0JaWYgKGxvYWRfZ3Vlc3Rfc2VnbWVudF9kZXNjcmlwdG9yKHZjcHUsIHNlbGVjdG9yLCAmc2VnX2Rlc2MpKQotCQlyZXR1cm4gMTsKLQlzZWdfZGVzY3RfdG9fa3ZtX2Rlc2N0KCZzZWdfZGVzYywgc2VsZWN0b3IsIGt2bV9zZWcpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IGt2bV9sb2FkX3JlYWxtb2RlX3NlZ21lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgc2VsZWN0b3IsIGludCBzZWcpCiB7CiAJc3RydWN0IGt2bV9zZWdtZW50IHNlZ3ZhciA9IHsKQEAgLTQzNjcsNyArNDc4OCw3IEBACiAJCS51bnVzYWJsZSA9IDAsCiAJfTsKIAlrdm1feDg2X29wcy0+c2V0X3NlZ21lbnQodmNwdSwgJnNlZ3Zhciwgc2VnKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gWDg2RU1VTF9DT05USU5VRTsKIH0KIAogc3RhdGljIGludCBpc192bTg2X3NlZ21lbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBpbnQgc2VnKQpAQCAtNDM3NywyNCArNDc5OCwxMTIgQEAKIAkJKGt2bV9nZXRfcmZsYWdzKHZjcHUpICYgWDg2X0VGTEFHU19WTSk7CiB9CiAKLWludCBrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgc2VsZWN0b3IsCi0JCQkJaW50IHR5cGVfYml0cywgaW50IHNlZykKK2ludCBrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgc2VsZWN0b3IsIGludCBzZWcpCiB7CiAJc3RydWN0IGt2bV9zZWdtZW50IGt2bV9zZWc7CisJc3RydWN0IGRlc2Nfc3RydWN0IHNlZ19kZXNjOworCXU4IGRwbCwgcnBsLCBjcGw7CisJdW5zaWduZWQgZXJyX3ZlYyA9IEdQX1ZFQ1RPUjsKKwl1MzIgZXJyX2NvZGUgPSAwOworCWJvb2wgbnVsbF9zZWxlY3RvciA9ICEoc2VsZWN0b3IgJiB+MHgzKTsgLyogMDAwMC0wMDAzIGFyZSBudWxsICovCisJaW50IHJldDsKIAotCWlmIChpc192bTg2X3NlZ21lbnQodmNwdSwgc2VnKSB8fCAhKHZjcHUtPmFyY2guY3IwICYgWDg2X0NSMF9QRSkpCisJaWYgKGlzX3ZtODZfc2VnbWVudCh2Y3B1LCBzZWcpIHx8ICFpc19wcm90bW9kZSh2Y3B1KSkKIAkJcmV0dXJuIGt2bV9sb2FkX3JlYWxtb2RlX3NlZ21lbnQodmNwdSwgc2VsZWN0b3IsIHNlZyk7Ci0JaWYgKGxvYWRfc2VnbWVudF9kZXNjcmlwdG9yX3RvX2t2bV9kZXNjdCh2Y3B1LCBzZWxlY3RvciwgJmt2bV9zZWcpKQotCQlyZXR1cm4gMTsKLQlrdm1fc2VnLnR5cGUgfD0gdHlwZV9iaXRzOwogCi0JaWYgKHNlZyAhPSBWQ1BVX1NSRUdfU1MgJiYgc2VnICE9IFZDUFVfU1JFR19DUyAmJgotCSAgICBzZWcgIT0gVkNQVV9TUkVHX0xEVFIpCi0JCWlmICgha3ZtX3NlZy5zKQotCQkJa3ZtX3NlZy51bnVzYWJsZSA9IDE7CisJLyogTlVMTCBzZWxlY3RvciBpcyBub3QgdmFsaWQgZm9yIFRSLCBDUyBhbmQgU1MgKi8KKwlpZiAoKHNlZyA9PSBWQ1BVX1NSRUdfQ1MgfHwgc2VnID09IFZDUFVfU1JFR19TUyB8fCBzZWcgPT0gVkNQVV9TUkVHX1RSKQorCSAgICAmJiBudWxsX3NlbGVjdG9yKQorCQlnb3RvIGV4Y2VwdGlvbjsKIAorCS8qIFRSIHNob3VsZCBiZSBpbiBHRFQgb25seSAqLworCWlmIChzZWcgPT0gVkNQVV9TUkVHX1RSICYmIChzZWxlY3RvciAmICgxIDw8IDIpKSkKKwkJZ290byBleGNlcHRpb247CisKKwlyZXQgPSBsb2FkX2d1ZXN0X3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCBzZWxlY3RvciwgJnNlZ19kZXNjKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJc2VnX2Rlc2N0X3RvX2t2bV9kZXNjdCgmc2VnX2Rlc2MsIHNlbGVjdG9yLCAma3ZtX3NlZyk7CisKKwlpZiAobnVsbF9zZWxlY3RvcikgeyAvKiBmb3IgTlVMTCBzZWxlY3RvciBza2lwIGFsbCBmb2xsb3dpbmcgY2hlY2tzICovCisJCWt2bV9zZWcudW51c2FibGUgPSAxOworCQlnb3RvIGxvYWQ7CisJfQorCisJZXJyX2NvZGUgPSBzZWxlY3RvciAmIDB4ZmZmYzsKKwllcnJfdmVjID0gR1BfVkVDVE9SOworCisJLyogY2FuJ3QgbG9hZCBzeXN0ZW0gZGVzY3JpcHRvciBpbnRvIHNlZ21lbnQgc2VsZWNvciAqLworCWlmIChzZWcgPD0gVkNQVV9TUkVHX0dTICYmICFrdm1fc2VnLnMpCisJCWdvdG8gZXhjZXB0aW9uOworCisJaWYgKCFrdm1fc2VnLnByZXNlbnQpIHsKKwkJZXJyX3ZlYyA9IChzZWcgPT0gVkNQVV9TUkVHX1NTKSA/IFNTX1ZFQ1RPUiA6IE5QX1ZFQ1RPUjsKKwkJZ290byBleGNlcHRpb247CisJfQorCisJcnBsID0gc2VsZWN0b3IgJiAzOworCWRwbCA9IGt2bV9zZWcuZHBsOworCWNwbCA9IGt2bV94ODZfb3BzLT5nZXRfY3BsKHZjcHUpOworCisJc3dpdGNoIChzZWcpIHsKKwljYXNlIFZDUFVfU1JFR19TUzoKKwkJLyoKKwkJICogc2VnbWVudCBpcyBub3QgYSB3cml0YWJsZSBkYXRhIHNlZ21lbnQgb3Igc2VnbWVudAorCQkgKiBzZWxlY3RvcidzIFJQTCAhPSBDUEwgb3Igc2VnbWVudCBzZWxlY3RvcidzIFJQTCAhPSBDUEwKKwkJICovCisJCWlmIChycGwgIT0gY3BsIHx8IChrdm1fc2VnLnR5cGUgJiAweGEpICE9IDB4MiB8fCBkcGwgIT0gY3BsKQorCQkJZ290byBleGNlcHRpb247CisJCWJyZWFrOworCWNhc2UgVkNQVV9TUkVHX0NTOgorCQlpZiAoIShrdm1fc2VnLnR5cGUgJiA4KSkKKwkJCWdvdG8gZXhjZXB0aW9uOworCisJCWlmIChrdm1fc2VnLnR5cGUgJiA0KSB7CisJCQkvKiBjb25mb3JtaW5nICovCisJCQlpZiAoZHBsID4gY3BsKQorCQkJCWdvdG8gZXhjZXB0aW9uOworCQl9IGVsc2UgeworCQkJLyogbm9uY29uZm9ybWluZyAqLworCQkJaWYgKHJwbCA+IGNwbCB8fCBkcGwgIT0gY3BsKQorCQkJCWdvdG8gZXhjZXB0aW9uOworCQl9CisJCS8qIENTKFJQTCkgPC0gQ1BMICovCisJCXNlbGVjdG9yID0gKHNlbGVjdG9yICYgMHhmZmZjKSB8IGNwbDsKKyAgICAgICAgICAgIGJyZWFrOworCWNhc2UgVkNQVV9TUkVHX1RSOgorCQlpZiAoa3ZtX3NlZy5zIHx8IChrdm1fc2VnLnR5cGUgIT0gMSAmJiBrdm1fc2VnLnR5cGUgIT0gOSkpCisJCQlnb3RvIGV4Y2VwdGlvbjsKKwkJYnJlYWs7CisJY2FzZSBWQ1BVX1NSRUdfTERUUjoKKwkJaWYgKGt2bV9zZWcucyB8fCBrdm1fc2VnLnR5cGUgIT0gMikKKwkJCWdvdG8gZXhjZXB0aW9uOworCQlicmVhazsKKwlkZWZhdWx0OiAvKiAgRFMsIEVTLCBGUywgb3IgR1MgKi8KKwkJLyoKKwkJICogc2VnbWVudCBpcyBub3QgYSBkYXRhIG9yIHJlYWRhYmxlIGNvZGUgc2VnbWVudCBvcgorCQkgKiAoKHNlZ21lbnQgaXMgYSBkYXRhIG9yIG5vbmNvbmZvcm1pbmcgY29kZSBzZWdtZW50KQorCQkgKiBhbmQgKGJvdGggUlBMIGFuZCBDUEwgPiBEUEwpKQorCQkgKi8KKwkJaWYgKChrdm1fc2VnLnR5cGUgJiAweGEpID09IDB4OCB8fAorCQkgICAgKCgoa3ZtX3NlZy50eXBlICYgMHhjKSAhPSAweGMpICYmIChycGwgPiBkcGwgJiYgY3BsID4gZHBsKSkpCisJCQlnb3RvIGV4Y2VwdGlvbjsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFrdm1fc2VnLnVudXNhYmxlICYmIGt2bV9zZWcucykgeworCQkvKiBtYXJrIHNlZ21lbnQgYXMgYWNjZXNzZWQgKi8KKwkJa3ZtX3NlZy50eXBlIHw9IDE7CisJCXNlZ19kZXNjLnR5cGUgfD0gMTsKKwkJc2F2ZV9ndWVzdF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgc2VsZWN0b3IsICZzZWdfZGVzYyk7CisJfQorbG9hZDoKIAlrdm1fc2V0X3NlZ21lbnQodmNwdSwgJmt2bV9zZWcsIHNlZyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIFg4NkVNVUxfQ09OVElOVUU7CitleGNlcHRpb246CisJa3ZtX3F1ZXVlX2V4Y2VwdGlvbl9lKHZjcHUsIGVycl92ZWMsIGVycl9jb2RlKTsKKwlyZXR1cm4gWDg2RU1VTF9QUk9QQUdBVEVfRkFVTFQ7CiB9CiAKIHN0YXRpYyB2b2lkIHNhdmVfc3RhdGVfdG9fdHNzMzIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LApAQCAtNDQyMCw2ICs0OTI5LDE0IEBACiAJdHNzLT5sZHRfc2VsZWN0b3IgPSBnZXRfc2VnbWVudF9zZWxlY3Rvcih2Y3B1LCBWQ1BVX1NSRUdfTERUUik7CiB9CiAKK3N0YXRpYyB2b2lkIGt2bV9sb2FkX3NlZ21lbnRfc2VsZWN0b3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MTYgc2VsLCBpbnQgc2VnKQoreworCXN0cnVjdCBrdm1fc2VnbWVudCBrdm1fc2VnOworCWt2bV9nZXRfc2VnbWVudCh2Y3B1LCAma3ZtX3NlZywgc2VnKTsKKwlrdm1fc2VnLnNlbGVjdG9yID0gc2VsOworCWt2bV9zZXRfc2VnbWVudCh2Y3B1LCAma3ZtX3NlZywgc2VnKTsKK30KKwogc3RhdGljIGludCBsb2FkX3N0YXRlX2Zyb21fdHNzMzIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogCQkJCSAgc3RydWN0IHRzc19zZWdtZW50XzMyICp0c3MpCiB7CkBAIC00NDM3LDI1ICs0OTU0LDQxIEBACiAJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SU0ksIHRzcy0+ZXNpKTsKIAlrdm1fcmVnaXN0ZXJfd3JpdGUodmNwdSwgVkNQVV9SRUdTX1JESSwgdHNzLT5lZGkpOwogCi0JaWYgKGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3MtPmxkdF9zZWxlY3RvciwgMCwgVkNQVV9TUkVHX0xEVFIpKQorCS8qCisJICogU0RNIHNheXMgdGhhdCBzZWdtZW50IHNlbGVjdG9ycyBhcmUgbG9hZGVkIGJlZm9yZSBzZWdtZW50CisJICogZGVzY3JpcHRvcnMKKwkgKi8KKwlrdm1fbG9hZF9zZWdtZW50X3NlbGVjdG9yKHZjcHUsIHRzcy0+bGR0X3NlbGVjdG9yLCBWQ1BVX1NSRUdfTERUUik7CisJa3ZtX2xvYWRfc2VnbWVudF9zZWxlY3Rvcih2Y3B1LCB0c3MtPmVzLCBWQ1BVX1NSRUdfRVMpOworCWt2bV9sb2FkX3NlZ21lbnRfc2VsZWN0b3IodmNwdSwgdHNzLT5jcywgVkNQVV9TUkVHX0NTKTsKKwlrdm1fbG9hZF9zZWdtZW50X3NlbGVjdG9yKHZjcHUsIHRzcy0+c3MsIFZDUFVfU1JFR19TUyk7CisJa3ZtX2xvYWRfc2VnbWVudF9zZWxlY3Rvcih2Y3B1LCB0c3MtPmRzLCBWQ1BVX1NSRUdfRFMpOworCWt2bV9sb2FkX3NlZ21lbnRfc2VsZWN0b3IodmNwdSwgdHNzLT5mcywgVkNQVV9TUkVHX0ZTKTsKKwlrdm1fbG9hZF9zZWdtZW50X3NlbGVjdG9yKHZjcHUsIHRzcy0+Z3MsIFZDUFVfU1JFR19HUyk7CisKKwkvKgorCSAqIE5vdyBsb2FkIHNlZ21lbnQgZGVzY3JpcHRvcnMuIElmIGZhdWx0IGhhcHBlbmVzIGF0IHRoaXMgc3RhZ2UKKwkgKiBpdCBpcyBoYW5kbGVkIGluIGEgY29udGV4dCBvZiBuZXcgdGFzaworCSAqLworCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5sZHRfc2VsZWN0b3IsIFZDUFVfU1JFR19MRFRSKSkKIAkJcmV0dXJuIDE7CiAKLQlpZiAoa3ZtX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHZjcHUsIHRzcy0+ZXMsIDEsIFZDUFVfU1JFR19FUykpCisJaWYgKGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3MtPmVzLCBWQ1BVX1NSRUdfRVMpKQogCQlyZXR1cm4gMTsKIAotCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5jcywgOSwgVkNQVV9TUkVHX0NTKSkKKwlpZiAoa3ZtX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHZjcHUsIHRzcy0+Y3MsIFZDUFVfU1JFR19DUykpCiAJCXJldHVybiAxOwogCi0JaWYgKGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3MtPnNzLCAxLCBWQ1BVX1NSRUdfU1MpKQorCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5zcywgVkNQVV9TUkVHX1NTKSkKIAkJcmV0dXJuIDE7CiAKLQlpZiAoa3ZtX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHZjcHUsIHRzcy0+ZHMsIDEsIFZDUFVfU1JFR19EUykpCisJaWYgKGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3MtPmRzLCBWQ1BVX1NSRUdfRFMpKQogCQlyZXR1cm4gMTsKIAotCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5mcywgMSwgVkNQVV9TUkVHX0ZTKSkKKwlpZiAoa3ZtX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHZjcHUsIHRzcy0+ZnMsIFZDUFVfU1JFR19GUykpCiAJCXJldHVybiAxOwogCi0JaWYgKGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3MtPmdzLCAxLCBWQ1BVX1NSRUdfR1MpKQorCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5ncywgVkNQVV9TUkVHX0dTKSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CkBAIC00NDk1LDE5ICs1MDI4LDMzIEBACiAJa3ZtX3JlZ2lzdGVyX3dyaXRlKHZjcHUsIFZDUFVfUkVHU19SU0ksIHRzcy0+c2kpOwogCWt2bV9yZWdpc3Rlcl93cml0ZSh2Y3B1LCBWQ1BVX1JFR1NfUkRJLCB0c3MtPmRpKTsKIAotCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5sZHQsIDAsIFZDUFVfU1JFR19MRFRSKSkKKwkvKgorCSAqIFNETSBzYXlzIHRoYXQgc2VnbWVudCBzZWxlY3RvcnMgYXJlIGxvYWRlZCBiZWZvcmUgc2VnbWVudAorCSAqIGRlc2NyaXB0b3JzCisJICovCisJa3ZtX2xvYWRfc2VnbWVudF9zZWxlY3Rvcih2Y3B1LCB0c3MtPmxkdCwgVkNQVV9TUkVHX0xEVFIpOworCWt2bV9sb2FkX3NlZ21lbnRfc2VsZWN0b3IodmNwdSwgdHNzLT5lcywgVkNQVV9TUkVHX0VTKTsKKwlrdm1fbG9hZF9zZWdtZW50X3NlbGVjdG9yKHZjcHUsIHRzcy0+Y3MsIFZDUFVfU1JFR19DUyk7CisJa3ZtX2xvYWRfc2VnbWVudF9zZWxlY3Rvcih2Y3B1LCB0c3MtPnNzLCBWQ1BVX1NSRUdfU1MpOworCWt2bV9sb2FkX3NlZ21lbnRfc2VsZWN0b3IodmNwdSwgdHNzLT5kcywgVkNQVV9TUkVHX0RTKTsKKworCS8qCisJICogTm93IGxvYWQgc2VnbWVudCBkZXNjcmlwdG9ycy4gSWYgZmF1bHQgaGFwcGVuZXMgYXQgdGhpcyBzdGFnZQorCSAqIGl0IGlzIGhhbmRsZWQgaW4gYSBjb250ZXh0IG9mIG5ldyB0YXNrCisJICovCisJaWYgKGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3MtPmxkdCwgVkNQVV9TUkVHX0xEVFIpKQogCQlyZXR1cm4gMTsKIAotCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5lcywgMSwgVkNQVV9TUkVHX0VTKSkKKwlpZiAoa3ZtX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHZjcHUsIHRzcy0+ZXMsIFZDUFVfU1JFR19FUykpCiAJCXJldHVybiAxOwogCi0JaWYgKGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3MtPmNzLCA5LCBWQ1BVX1NSRUdfQ1MpKQorCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5jcywgVkNQVV9TUkVHX0NTKSkKIAkJcmV0dXJuIDE7CiAKLQlpZiAoa3ZtX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHZjcHUsIHRzcy0+c3MsIDEsIFZDUFVfU1JFR19TUykpCisJaWYgKGt2bV9sb2FkX3NlZ21lbnRfZGVzY3JpcHRvcih2Y3B1LCB0c3MtPnNzLCBWQ1BVX1NSRUdfU1MpKQogCQlyZXR1cm4gMTsKIAotCWlmIChrdm1fbG9hZF9zZWdtZW50X2Rlc2NyaXB0b3IodmNwdSwgdHNzLT5kcywgMSwgVkNQVV9TUkVHX0RTKSkKKwlpZiAoa3ZtX2xvYWRfc2VnbWVudF9kZXNjcmlwdG9yKHZjcHUsIHRzcy0+ZHMsIFZDUFVfU1JFR19EUykpCiAJCXJldHVybiAxOwogCXJldHVybiAwOwogfQpAQCAtNDUyOSw3ICs1MDc2LDcgQEAKIAkJCSAgICBzaXplb2YgdHNzX3NlZ21lbnRfMTYpKQogCQlnb3RvIG91dDsKIAotCWlmIChrdm1fcmVhZF9ndWVzdCh2Y3B1LT5rdm0sIGdldF90c3NfYmFzZV9hZGRyKHZjcHUsIG5zZWdfZGVzYyksCisJaWYgKGt2bV9yZWFkX2d1ZXN0KHZjcHUtPmt2bSwgZ2V0X3Rzc19iYXNlX2FkZHJfcmVhZCh2Y3B1LCBuc2VnX2Rlc2MpLAogCQkJICAgJnRzc19zZWdtZW50XzE2LCBzaXplb2YgdHNzX3NlZ21lbnRfMTYpKQogCQlnb3RvIG91dDsKIApAQCAtNDUzNyw3ICs1MDg0LDcgQEAKIAkJdHNzX3NlZ21lbnRfMTYucHJldl90YXNrX2xpbmsgPSBvbGRfdHNzX3NlbDsKIAogCQlpZiAoa3ZtX3dyaXRlX2d1ZXN0KHZjcHUtPmt2bSwKLQkJCQkgICAgZ2V0X3Rzc19iYXNlX2FkZHIodmNwdSwgbnNlZ19kZXNjKSwKKwkJCQkgICAgZ2V0X3Rzc19iYXNlX2FkZHJfd3JpdGUodmNwdSwgbnNlZ19kZXNjKSwKIAkJCQkgICAgJnRzc19zZWdtZW50XzE2LnByZXZfdGFza19saW5rLAogCQkJCSAgICBzaXplb2YgdHNzX3NlZ21lbnRfMTYucHJldl90YXNrX2xpbmspKQogCQkJZ290byBvdXQ7CkBAIC00NTY4LDcgKzUxMTUsNyBAQAogCQkJICAgIHNpemVvZiB0c3Nfc2VnbWVudF8zMikpCiAJCWdvdG8gb3V0OwogCi0JaWYgKGt2bV9yZWFkX2d1ZXN0KHZjcHUtPmt2bSwgZ2V0X3Rzc19iYXNlX2FkZHIodmNwdSwgbnNlZ19kZXNjKSwKKwlpZiAoa3ZtX3JlYWRfZ3Vlc3QodmNwdS0+a3ZtLCBnZXRfdHNzX2Jhc2VfYWRkcl9yZWFkKHZjcHUsIG5zZWdfZGVzYyksCiAJCQkgICAmdHNzX3NlZ21lbnRfMzIsIHNpemVvZiB0c3Nfc2VnbWVudF8zMikpCiAJCWdvdG8gb3V0OwogCkBAIC00NTc2LDcgKzUxMjMsNyBAQAogCQl0c3Nfc2VnbWVudF8zMi5wcmV2X3Rhc2tfbGluayA9IG9sZF90c3Nfc2VsOwogCiAJCWlmIChrdm1fd3JpdGVfZ3Vlc3QodmNwdS0+a3ZtLAotCQkJCSAgICBnZXRfdHNzX2Jhc2VfYWRkcih2Y3B1LCBuc2VnX2Rlc2MpLAorCQkJCSAgICBnZXRfdHNzX2Jhc2VfYWRkcl93cml0ZSh2Y3B1LCBuc2VnX2Rlc2MpLAogCQkJCSAgICAmdHNzX3NlZ21lbnRfMzIucHJldl90YXNrX2xpbmssCiAJCQkJICAgIHNpemVvZiB0c3Nfc2VnbWVudF8zMi5wcmV2X3Rhc2tfbGluaykpCiAJCQlnb3RvIG91dDsKQEAgLTQ1OTksNyArNTE0Niw3IEBACiAJdTMyIG9sZF90c3NfYmFzZSA9IGdldF9zZWdtZW50X2Jhc2UodmNwdSwgVkNQVV9TUkVHX1RSKTsKIAl1MTYgb2xkX3Rzc19zZWwgPSBnZXRfc2VnbWVudF9zZWxlY3Rvcih2Y3B1LCBWQ1BVX1NSRUdfVFIpOwogCi0Jb2xkX3Rzc19iYXNlID0gdmNwdS0+YXJjaC5tbXUuZ3ZhX3RvX2dwYSh2Y3B1LCBvbGRfdHNzX2Jhc2UpOworCW9sZF90c3NfYmFzZSA9IGt2bV9tbXVfZ3ZhX3RvX2dwYV93cml0ZSh2Y3B1LCBvbGRfdHNzX2Jhc2UsIE5VTEwpOwogCiAJLyogRklYTUU6IEhhbmRsZSBlcnJvcnMuIEZhaWx1cmUgdG8gcmVhZCBlaXRoZXIgVFNTIG9yIHRoZWlyCiAJICogZGVzY3JpcHRvcnMgc2hvdWxkIGdlbmVyYXRlIGEgcGFnZWZhdWx0LgpAQCAtNDY1OCw3ICs1MjA1LDcgQEAKIAkJCQkJICAgICAgJm5zZWdfZGVzYyk7CiAJfQogCi0Ja3ZtX3g4Nl9vcHMtPnNldF9jcjAodmNwdSwgdmNwdS0+YXJjaC5jcjAgfCBYODZfQ1IwX1RTKTsKKwlrdm1feDg2X29wcy0+c2V0X2NyMCh2Y3B1LCBrdm1fcmVhZF9jcjAodmNwdSkgfCBYODZfQ1IwX1RTKTsKIAlzZWdfZGVzY3RfdG9fa3ZtX2Rlc2N0KCZuc2VnX2Rlc2MsIHRzc19zZWxlY3RvciwgJnRyX3NlZyk7CiAJdHJfc2VnLnR5cGUgPSAxMTsKIAlrdm1fc2V0X3NlZ21lbnQodmNwdSwgJnRyX3NlZywgVkNQVV9TUkVHX1RSKTsKQEAgLTQ2ODksMTcgKzUyMzYsMTUgQEAKIAogCWt2bV9zZXRfY3I4KHZjcHUsIHNyZWdzLT5jcjgpOwogCi0JbW11X3Jlc2V0X25lZWRlZCB8PSB2Y3B1LT5hcmNoLnNoYWRvd19lZmVyICE9IHNyZWdzLT5lZmVyOworCW1tdV9yZXNldF9uZWVkZWQgfD0gdmNwdS0+YXJjaC5lZmVyICE9IHNyZWdzLT5lZmVyOwogCWt2bV94ODZfb3BzLT5zZXRfZWZlcih2Y3B1LCBzcmVncy0+ZWZlcik7CiAJa3ZtX3NldF9hcGljX2Jhc2UodmNwdSwgc3JlZ3MtPmFwaWNfYmFzZSk7CiAKLQlrdm1feDg2X29wcy0+ZGVjYWNoZV9jcjRfZ3Vlc3RfYml0cyh2Y3B1KTsKLQotCW1tdV9yZXNldF9uZWVkZWQgfD0gdmNwdS0+YXJjaC5jcjAgIT0gc3JlZ3MtPmNyMDsKKwltbXVfcmVzZXRfbmVlZGVkIHw9IGt2bV9yZWFkX2NyMCh2Y3B1KSAhPSBzcmVncy0+Y3IwOwogCWt2bV94ODZfb3BzLT5zZXRfY3IwKHZjcHUsIHNyZWdzLT5jcjApOwogCXZjcHUtPmFyY2guY3IwID0gc3JlZ3MtPmNyMDsKIAotCW1tdV9yZXNldF9uZWVkZWQgfD0gdmNwdS0+YXJjaC5jcjQgIT0gc3JlZ3MtPmNyNDsKKwltbXVfcmVzZXRfbmVlZGVkIHw9IGt2bV9yZWFkX2NyNCh2Y3B1KSAhPSBzcmVncy0+Y3I0OwogCWt2bV94ODZfb3BzLT5zZXRfY3I0KHZjcHUsIHNyZWdzLT5jcjQpOwogCWlmICghaXNfbG9uZ19tb2RlKHZjcHUpICYmIGlzX3BhZSh2Y3B1KSkgewogCQlsb2FkX3BkcHRycyh2Y3B1LCB2Y3B1LT5hcmNoLmNyMyk7CkBAIC00NzM0LDcgKzUyNzksNyBAQAogCS8qIE9sZGVyIHVzZXJzcGFjZSB3b24ndCB1bmhhbHQgdGhlIHZjcHUgb24gcmVzZXQuICovCiAJaWYgKGt2bV92Y3B1X2lzX2JzcCh2Y3B1KSAmJiBrdm1fcmlwX3JlYWQodmNwdSkgPT0gMHhmZmYwICYmCiAJICAgIHNyZWdzLT5jcy5zZWxlY3RvciA9PSAweGYwMDAgJiYgc3JlZ3MtPmNzLmJhc2UgPT0gMHhmZmZmMDAwMCAmJgotCSAgICAhKHZjcHUtPmFyY2guY3IwICYgWDg2X0NSMF9QRSkpCisJICAgICFpc19wcm90bW9kZSh2Y3B1KSkKIAkJdmNwdS0+YXJjaC5tcF9zdGF0ZSA9IEtWTV9NUF9TVEFURV9SVU5OQUJMRTsKIAogCXZjcHVfcHV0KHZjcHUpOwpAQCAtNDgzMiwxMSArNTM3NywxMiBAQAogewogCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSB0ci0+bGluZWFyX2FkZHJlc3M7CiAJZ3BhX3QgZ3BhOworCWludCBpZHg7CiAKIAl2Y3B1X2xvYWQodmNwdSk7Ci0JZG93bl9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOwotCWdwYSA9IHZjcHUtPmFyY2gubW11Lmd2YV90b19ncGEodmNwdSwgdmFkZHIpOwotCXVwX3JlYWQoJnZjcHUtPmt2bS0+c2xvdHNfbG9jayk7CisJaWR4ID0gc3JjdV9yZWFkX2xvY2soJnZjcHUtPmt2bS0+c3JjdSk7CisJZ3BhID0ga3ZtX21tdV9ndmFfdG9fZ3BhX3N5c3RlbSh2Y3B1LCB2YWRkciwgTlVMTCk7CisJc3JjdV9yZWFkX3VubG9jaygmdmNwdS0+a3ZtLT5zcmN1LCBpZHgpOwogCXRyLT5waHlzaWNhbF9hZGRyZXNzID0gZ3BhOwogCXRyLT52YWxpZCA9IGdwYSAhPSBVTk1BUFBFRF9HVkE7CiAJdHItPndyaXRlYWJsZSA9IDE7CkBAIC00OTE3LDE0ICs1NDYzLDE0IEBACiAKIHZvaWQga3ZtX2xvYWRfZ3Vlc3RfZnB1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKLQlpZiAoIXZjcHUtPmZwdV9hY3RpdmUgfHwgdmNwdS0+Z3Vlc3RfZnB1X2xvYWRlZCkKKwlpZiAodmNwdS0+Z3Vlc3RfZnB1X2xvYWRlZCkKIAkJcmV0dXJuOwogCiAJdmNwdS0+Z3Vlc3RfZnB1X2xvYWRlZCA9IDE7CiAJa3ZtX2Z4X3NhdmUoJnZjcHUtPmFyY2guaG9zdF9meF9pbWFnZSk7CiAJa3ZtX2Z4X3Jlc3RvcmUoJnZjcHUtPmFyY2guZ3Vlc3RfZnhfaW1hZ2UpOworCXRyYWNlX2t2bV9mcHUoMSk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChrdm1fbG9hZF9ndWVzdF9mcHUpOwogCiB2b2lkIGt2bV9wdXRfZ3Vlc3RfZnB1KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKQEAgLTQ5MzUsOCArNTQ4MSw5IEBACiAJa3ZtX2Z4X3NhdmUoJnZjcHUtPmFyY2guZ3Vlc3RfZnhfaW1hZ2UpOwogCWt2bV9meF9yZXN0b3JlKCZ2Y3B1LT5hcmNoLmhvc3RfZnhfaW1hZ2UpOwogCSsrdmNwdS0+c3RhdC5mcHVfcmVsb2FkOworCXNldF9iaXQoS1ZNX1JFUV9ERUFDVElWQVRFX0ZQVSwgJnZjcHUtPnJlcXVlc3RzKTsKKwl0cmFjZV9rdm1fZnB1KDApOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX3B1dF9ndWVzdF9mcHUpOwogCiB2b2lkIGt2bV9hcmNoX3ZjcHVfZnJlZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCiB7CkBAIC01MDg4LDExICs1NjM1LDEzIEBACiAKIHZvaWQga3ZtX2FyY2hfdmNwdV91bmluaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogeworCWludCBpZHg7CisKIAlrZnJlZSh2Y3B1LT5hcmNoLm1jZV9iYW5rcyk7CiAJa3ZtX2ZyZWVfbGFwaWModmNwdSk7Ci0JZG93bl9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOworCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZ2Y3B1LT5rdm0tPnNyY3UpOwogCWt2bV9tbXVfZGVzdHJveSh2Y3B1KTsKLQl1cF9yZWFkKCZ2Y3B1LT5rdm0tPnNsb3RzX2xvY2spOworCXNyY3VfcmVhZF91bmxvY2soJnZjcHUtPmt2bS0+c3JjdSwgaWR4KTsKIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdmNwdS0+YXJjaC5waW9fZGF0YSk7CiB9CiAKQEAgLTUxMDMsNiArNTY1MiwxMiBAQAogCWlmICgha3ZtKQogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAorCWt2bS0+YXJjaC5hbGlhc2VzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9tZW1fYWxpYXNlcyksIEdGUF9LRVJORUwpOworCWlmICgha3ZtLT5hcmNoLmFsaWFzZXMpIHsKKwkJa2ZyZWUoa3ZtKTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQorCiAJSU5JVF9MSVNUX0hFQUQoJmt2bS0+YXJjaC5hY3RpdmVfbW11X3BhZ2VzKTsKIAlJTklUX0xJU1RfSEVBRCgma3ZtLT5hcmNoLmFzc2lnbmVkX2Rldl9oZWFkKTsKIApAQCAtNTE1OSwxNiArNTcxNCwxOCBAQAogCQlwdXRfcGFnZShrdm0tPmFyY2guYXBpY19hY2Nlc3NfcGFnZSk7CiAJaWYgKGt2bS0+YXJjaC5lcHRfaWRlbnRpdHlfcGFnZXRhYmxlKQogCQlwdXRfcGFnZShrdm0tPmFyY2guZXB0X2lkZW50aXR5X3BhZ2V0YWJsZSk7CisJY2xlYW51cF9zcmN1X3N0cnVjdCgma3ZtLT5zcmN1KTsKKwlrZnJlZShrdm0tPmFyY2guYWxpYXNlcyk7CiAJa2ZyZWUoa3ZtKTsKIH0KIAotaW50IGt2bV9hcmNoX3NldF9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKLQkJCQlzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uICptZW0sCitpbnQga3ZtX2FyY2hfcHJlcGFyZV9tZW1vcnlfcmVnaW9uKHN0cnVjdCBrdm0gKmt2bSwKKwkJCQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90LAogCQkJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3Qgb2xkLAorCQkJCXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24gKm1lbSwKIAkJCQlpbnQgdXNlcl9hbGxvYykKIHsKLQlpbnQgbnBhZ2VzID0gbWVtLT5tZW1vcnlfc2l6ZSA+PiBQQUdFX1NISUZUOwotCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QgPSAma3ZtLT5tZW1zbG90c1ttZW0tPnNsb3RdOworCWludCBucGFnZXMgPSBtZW1zbG90LT5ucGFnZXM7CiAKIAkvKlRvIGtlZXAgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIHVzZXJzcGFjZSwKIAkgKng4NiBuZWVkcyB0byBoYW5sZGUgIXVzZXJfYWxsb2MgY2FzZS4KQEAgLTUxODgsMjYgKzU3NDUsMzUgQEAKIAkJCWlmIChJU19FUlIoKHZvaWQgKil1c2Vyc3BhY2VfYWRkcikpCiAJCQkJcmV0dXJuIFBUUl9FUlIoKHZvaWQgKil1c2Vyc3BhY2VfYWRkcik7CiAKLQkJCS8qIHNldCB1c2Vyc3BhY2VfYWRkciBhdG9taWNhbGx5IGZvciBrdm1faHZhX3RvX3JtYXBwICovCi0JCQlzcGluX2xvY2soJmt2bS0+bW11X2xvY2spOwogCQkJbWVtc2xvdC0+dXNlcnNwYWNlX2FkZHIgPSB1c2Vyc3BhY2VfYWRkcjsKLQkJCXNwaW5fdW5sb2NrKCZrdm0tPm1tdV9sb2NrKTsKLQkJfSBlbHNlIHsKLQkJCWlmICghb2xkLnVzZXJfYWxsb2MgJiYgb2xkLnJtYXApIHsKLQkJCQlpbnQgcmV0OwotCi0JCQkJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKLQkJCQlyZXQgPSBkb19tdW5tYXAoY3VycmVudC0+bW0sIG9sZC51c2Vyc3BhY2VfYWRkciwKLQkJCQkJCW9sZC5ucGFnZXMgKiBQQUdFX1NJWkUpOwotCQkJCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJICAgICAgICJrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb246ICIKLQkJCQkgICAgICAgImZhaWxlZCB0byBtdW5tYXAgbWVtb3J5XG4iKTsKLQkJCX0KIAkJfQogCX0KIAorCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQga3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLAorCQkJCXN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24gKm1lbSwKKwkJCQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90IG9sZCwKKwkJCQlpbnQgdXNlcl9hbGxvYykKK3sKKworCWludCBucGFnZXMgPSBtZW0tPm1lbW9yeV9zaXplID4+IFBBR0VfU0hJRlQ7CisKKwlpZiAoIXVzZXJfYWxsb2MgJiYgIW9sZC51c2VyX2FsbG9jICYmIG9sZC5ybWFwICYmICFucGFnZXMpIHsKKwkJaW50IHJldDsKKworCQlkb3duX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCQlyZXQgPSBkb19tdW5tYXAoY3VycmVudC0+bW0sIG9sZC51c2Vyc3BhY2VfYWRkciwKKwkJCQlvbGQubnBhZ2VzICogUEFHRV9TSVpFKTsKKwkJdXBfd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJCWlmIChyZXQgPCAwKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJrdm1fdm1faW9jdGxfc2V0X21lbW9yeV9yZWdpb246ICIKKwkJCSAgICAgICAiZmFpbGVkIHRvIG11bm1hcCBtZW1vcnlcbiIpOworCX0KKwogCXNwaW5fbG9jaygma3ZtLT5tbXVfbG9jayk7CiAJaWYgKCFrdm0tPmFyY2gubl9yZXF1ZXN0ZWRfbW11X3BhZ2VzKSB7CiAJCXVuc2lnbmVkIGludCBucl9tbXVfcGFnZXMgPSBrdm1fbW11X2NhbGN1bGF0ZV9tbXVfcGFnZXMoa3ZtKTsKQEAgLTUyMTYsOCArNTc4Miw2IEBACiAKIAlrdm1fbW11X3Nsb3RfcmVtb3ZlX3dyaXRlX2FjY2Vzcyhrdm0sIG1lbS0+c2xvdCk7CiAJc3Bpbl91bmxvY2soJmt2bS0+bW11X2xvY2spOwotCi0JcmV0dXJuIDA7CiB9CiAKIHZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93KHN0cnVjdCBrdm0gKmt2bSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS94ODYuaCBiL2FyY2gveDg2L2t2bS94ODYuaAppbmRleCA1ZWFkZWE1Li4yZDEwMTYzOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5oCisrKyBiL2FyY2gveDg2L2t2bS94ODYuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgQVJDSF9YODZfS1ZNX1g4Nl9ICiAKICNpbmNsdWRlIDxsaW51eC9rdm1faG9zdC5oPgorI2luY2x1ZGUgImt2bV9jYWNoZV9yZWdzLmgiCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBrdm1fY2xlYXJfZXhjZXB0aW9uX3F1ZXVlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIHsKQEAgLTM1LDQgKzM2LDMzIEBACiBzdHJ1Y3Qga3ZtX2NwdWlkX2VudHJ5MiAqa3ZtX2ZpbmRfY3B1aWRfZW50cnkoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGZ1bmN0aW9uLCB1MzIgaW5kZXgpOwogCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfcHJvdG1vZGUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiBrdm1fcmVhZF9jcjBfYml0cyh2Y3B1LCBYODZfQ1IwX1BFKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfbG9uZ19tb2RlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJcmV0dXJuIHZjcHUtPmFyY2guZWZlciAmIEVGRVJfTE1BOworI2Vsc2UKKwlyZXR1cm4gMDsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIGludCBpc19wYWUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQoreworCXJldHVybiBrdm1fcmVhZF9jcjRfYml0cyh2Y3B1LCBYODZfQ1I0X1BBRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX3BzZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJcmV0dXJuIGt2bV9yZWFkX2NyNF9iaXRzKHZjcHUsIFg4Nl9DUjRfUFNFKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgaXNfcGFnaW5nKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKK3sKKwlyZXR1cm4ga3ZtX3JlYWRfY3IwX2JpdHModmNwdSwgWDg2X0NSMF9QRyk7Cit9CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdF8zMi5jIGIvYXJjaC94ODYvbW0vaW5pdF8zMi5jCmluZGV4IDIyMjZmMmMuLjVjYjNmMGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXRfMzIuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKQEAgLTc1MCw2ICs3NTAsNyBAQAogCWZyZWVfYXJlYV9pbml0X25vZGVzKG1heF96b25lX3BmbnMpOwogfQogCisjaWZuZGVmIENPTkZJR19OT19CT09UTUVNCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgc2V0dXBfbm9kZV9ib290bWVtKGludCBub2RlaWQsCiAJCQkJIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkJCSB1bnNpZ25lZCBsb25nIGVuZF9wZm4sCkBAIC03NjYsMTMgKzc2NywxNCBAQAogCXByaW50ayhLRVJOX0lORk8gIiAgbm9kZSAlZCBib290bWFwICUwOGx4IC0gJTA4bHhcbiIsCiAJCSBub2RlaWQsIGJvb3RtYXAsIGJvb3RtYXAgKyBib290bWFwX3NpemUpOwogCWZyZWVfYm9vdG1lbV93aXRoX2FjdGl2ZV9yZWdpb25zKG5vZGVpZCwgZW5kX3Bmbik7Ci0JZWFybHlfcmVzX3RvX2Jvb3RtZW0oc3RhcnRfcGZuPDxQQUdFX1NISUZULCBlbmRfcGZuPDxQQUdFX1NISUZUKTsKIAogCXJldHVybiBib290bWFwICsgYm9vdG1hcF9zaXplOwogfQorI2VuZGlmCiAKIHZvaWQgX19pbml0IHNldHVwX2Jvb3RtZW1fYWxsb2NhdG9yKHZvaWQpCiB7CisjaWZuZGVmIENPTkZJR19OT19CT09UTUVNCiAJaW50IG5vZGVpZDsKIAl1bnNpZ25lZCBsb25nIGJvb3RtYXBfc2l6ZSwgYm9vdG1hcDsKIAkvKgpAQCAtNzg0LDExICs3ODYsMTMgQEAKIAlpZiAoYm9vdG1hcCA9PSAtMUwpCiAJCXBhbmljKCJDYW5ub3QgZmluZCBib290bWVtIG1hcCBvZiBzaXplICVsZFxuIiwgYm9vdG1hcF9zaXplKTsKIAlyZXNlcnZlX2Vhcmx5KGJvb3RtYXAsIGJvb3RtYXAgKyBib290bWFwX3NpemUsICJCT09UTUFQIik7CisjZW5kaWYKIAogCXByaW50ayhLRVJOX0lORk8gIiAgbWFwcGVkIGxvdyByYW06IDAgLSAlMDhseFxuIiwKIAkJIG1heF9wZm5fbWFwcGVkPDxQQUdFX1NISUZUKTsKIAlwcmludGsoS0VSTl9JTkZPICIgIGxvdyByYW06IDAgLSAlMDhseFxuIiwgbWF4X2xvd19wZm48PFBBR0VfU0hJRlQpOwogCisjaWZuZGVmIENPTkZJR19OT19CT09UTUVNCiAJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZWlkKSB7CiAJCSB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKIApAQCAtODA2LDYgKzgxMCw3IEBACiAJCWJvb3RtYXAgPSBzZXR1cF9ub2RlX2Jvb3RtZW0obm9kZWlkLCBzdGFydF9wZm4sIGVuZF9wZm4sCiAJCQkJCQkgYm9vdG1hcCk7CiAJfQorI2VuZGlmCiAKIAlhZnRlcl9ib290bWVtID0gMTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2luaXRfNjQuYyBiL2FyY2gveDg2L21tL2luaXRfNjQuYwppbmRleCA2OWRkZmJkLi5lOWIwNDBlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKKysrIGIvYXJjaC94ODYvbW0vaW5pdF82NC5jCkBAIC01NzIsNiArNTcyLDcgQEAKIHZvaWQgX19pbml0IGluaXRtZW1faW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuLAogCQkJCWludCBhY3BpLCBpbnQgazgpCiB7CisjaWZuZGVmIENPTkZJR19OT19CT09UTUVNCiAJdW5zaWduZWQgbG9uZyBib290bWFwX3NpemUsIGJvb3RtYXA7CiAKIAlib290bWFwX3NpemUgPSBib290bWVtX2Jvb3RtYXBfcGFnZXMoZW5kX3Bmbik8PFBBR0VfU0hJRlQ7CkBAIC01NzksMTMgKzU4MCwxNSBAQAogCQkJCSBQQUdFX1NJWkUpOwogCWlmIChib290bWFwID09IC0xTCkKIAkJcGFuaWMoIkNhbm5vdCBmaW5kIGJvb3RtZW0gbWFwIG9mIHNpemUgJWxkXG4iLCBib290bWFwX3NpemUpOworCXJlc2VydmVfZWFybHkoYm9vdG1hcCwgYm9vdG1hcCArIGJvb3RtYXBfc2l6ZSwgIkJPT1RNQVAiKTsKIAkvKiBkb24ndCB0b3VjaCBtaW5fbG93X3BmbiAqLwogCWJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQSgwKSwgYm9vdG1hcCA+PiBQQUdFX1NISUZULAogCQkJCQkgMCwgZW5kX3Bmbik7CiAJZTgyMF9yZWdpc3Rlcl9hY3RpdmVfcmVnaW9ucygwLCBzdGFydF9wZm4sIGVuZF9wZm4pOwogCWZyZWVfYm9vdG1lbV93aXRoX2FjdGl2ZV9yZWdpb25zKDAsIGVuZF9wZm4pOwotCWVhcmx5X3Jlc190b19ib290bWVtKDAsIGVuZF9wZm48PFBBR0VfU0hJRlQpOwotCXJlc2VydmVfYm9vdG1lbShib290bWFwLCBib290bWFwX3NpemUsIEJPT1RNRU1fREVGQVVMVCk7CisjZWxzZQorCWU4MjBfcmVnaXN0ZXJfYWN0aXZlX3JlZ2lvbnMoMCwgc3RhcnRfcGZuLCBlbmRfcGZuKTsKKyNlbmRpZgogfQogI2VuZGlmCiAKQEAgLTk3NCw3ICs5NzcsNyBAQAogCQkJaWYgKHBtZF9ub25lKCpwbWQpKSB7CiAJCQkJcHRlX3QgZW50cnk7CiAKLQkJCQlwID0gdm1lbW1hcF9hbGxvY19ibG9jayhQTURfU0laRSwgbm9kZSk7CisJCQkJcCA9IHZtZW1tYXBfYWxsb2NfYmxvY2tfYnVmKFBNRF9TSVpFLCBub2RlKTsKIAkJCQlpZiAoIXApCiAJCQkJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9udW1hXzMyLmMgYi9hcmNoL3g4Ni9tbS9udW1hXzMyLmMKaW5kZXggYjIwNzYwYy4uODA5YmFhYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbnVtYV8zMi5jCisrKyBiL2FyY2gveDg2L21tL251bWFfMzIuYwpAQCAtNDE4LDcgKzQxOCwxMCBAQAogCiAJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7CiAJCW1lbXNldChOT0RFX0RBVEEobmlkKSwgMCwgc2l6ZW9mKHN0cnVjdCBwZ2xpc3RfZGF0YSkpOworCQlOT0RFX0RBVEEobmlkKS0+bm9kZV9pZCA9IG5pZDsKKyNpZm5kZWYgQ09ORklHX05PX0JPT1RNRU0KIAkJTk9ERV9EQVRBKG5pZCktPmJkYXRhID0gJmJvb3RtZW1fbm9kZV9kYXRhW25pZF07CisjZW5kaWYKIAl9CiAKIAlzZXR1cF9ib290bWVtX2FsbG9jYXRvcigpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbnVtYV82NC5jIGIvYXJjaC94ODYvbW0vbnVtYV82NC5jCmluZGV4IDMzMDdlYTguLjg5NDhmNDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL251bWFfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9udW1hXzY0LmMKQEAgLTE2MywzMCArMTYzLDQ4IEBACiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24pCiB7Ci0JdW5zaWduZWQgbG9uZyBtZW0gPSBmaW5kX2U4MjBfYXJlYShzdGFydCwgZW5kLCBzaXplLCBhbGlnbik7Ci0Jdm9pZCAqcHRyOworCXVuc2lnbmVkIGxvbmcgbWVtOwogCisJLyoKKwkgKiBwdXQgaXQgb24gaGlnaCBhcyBwb3NzaWJsZQorCSAqIHNvbWV0aGluZyB3aWxsIGdvIHdpdGggTk9ERV9EQVRBCisJICovCisJaWYgKHN0YXJ0IDwgKE1BWF9ETUFfUEZOPDxQQUdFX1NISUZUKSkKKwkJc3RhcnQgPSBNQVhfRE1BX1BGTjw8UEFHRV9TSElGVDsKKwlpZiAoc3RhcnQgPCAoTUFYX0RNQTMyX1BGTjw8UEFHRV9TSElGVCkgJiYKKwkgICAgZW5kID4gKE1BWF9ETUEzMl9QRk48PFBBR0VfU0hJRlQpKQorCQlzdGFydCA9IE1BWF9ETUEzMl9QRk48PFBBR0VfU0hJRlQ7CisJbWVtID0gZmluZF9lODIwX2FyZWEoc3RhcnQsIGVuZCwgc2l6ZSwgYWxpZ24pOwogCWlmIChtZW0gIT0gLTFMKQogCQlyZXR1cm4gX192YShtZW0pOwogCi0JcHRyID0gX19hbGxvY19ib290bWVtX25vcGFuaWMoc2l6ZSwgYWxpZ24sIF9fcGEoTUFYX0RNQV9BRERSRVNTKSk7Ci0JaWYgKHB0ciA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGZpbmQgJWx1IGJ5dGVzIGluIG5vZGUgJWRcbiIsCisJLyogZXh0ZW5kIHRoZSBzZWFyY2ggc2NvcGUgKi8KKwllbmQgPSBtYXhfcGZuX21hcHBlZCA8PCBQQUdFX1NISUZUOworCWlmIChlbmQgPiAoTUFYX0RNQTMyX1BGTjw8UEFHRV9TSElGVCkpCisJCXN0YXJ0ID0gTUFYX0RNQTMyX1BGTjw8UEFHRV9TSElGVDsKKwllbHNlCisJCXN0YXJ0ID0gTUFYX0RNQV9QRk48PFBBR0VfU0hJRlQ7CisJbWVtID0gZmluZF9lODIwX2FyZWEoc3RhcnQsIGVuZCwgc2l6ZSwgYWxpZ24pOworCWlmIChtZW0gIT0gLTFMKQorCQlyZXR1cm4gX192YShtZW0pOworCisJcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgZmluZCAlbHUgYnl0ZXMgaW4gbm9kZSAlZFxuIiwKIAkJICAgICAgIHNpemUsIG5vZGVpZCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQlyZXR1cm4gcHRyOworCisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qIEluaXRpYWxpemUgYm9vdG1lbSBhbGxvY2F0b3IgZm9yIGEgbm9kZSAqLwogdm9pZCBfX2luaXQKIHNldHVwX25vZGVfYm9vdG1lbShpbnQgbm9kZWlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgbGFzdF9wZm4sIGJvb3RtYXBfcGFnZXMsIGJvb3RtYXBfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgbGFzdF9wZm4sIG5vZGVkYXRhX3BoeXM7CiAJY29uc3QgaW50IHBnZGF0X3NpemUgPSByb3VuZHVwKHNpemVvZihwZ19kYXRhX3QpLCBQQUdFX1NJWkUpOwotCXVuc2lnbmVkIGxvbmcgYm9vdG1hcF9zdGFydCwgbm9kZWRhdGFfcGh5czsKLQl2b2lkICpib290bWFwOwogCWludCBuaWQ7CisjaWZuZGVmIENPTkZJR19OT19CT09UTUVNCisJdW5zaWduZWQgbG9uZyBib290bWFwX3N0YXJ0LCBib290bWFwX3BhZ2VzLCBib290bWFwX3NpemU7CisJdm9pZCAqYm9vdG1hcDsKKyNlbmRpZgogCiAJaWYgKCFlbmQpCiAJCXJldHVybjsKQEAgLTIwMCw3ICsyMTgsNyBAQAogCiAJc3RhcnQgPSByb3VuZHVwKHN0YXJ0LCBaT05FX0FMSUdOKTsKIAotCXByaW50ayhLRVJOX0lORk8gIkJvb3RtZW0gc2V0dXAgbm9kZSAlZCAlMDE2bHgtJTAxNmx4XG4iLCBub2RlaWQsCisJcHJpbnRrKEtFUk5fSU5GTyAiSW5pdG1lbSBzZXR1cCBub2RlICVkICUwMTZseC0lMDE2bHhcbiIsIG5vZGVpZCwKIAkgICAgICAgc3RhcnQsIGVuZCk7CiAKIAlzdGFydF9wZm4gPSBzdGFydCA+PiBQQUdFX1NISUZUOwpAQCAtMjExLDE0ICsyMjksMjEgQEAKIAlpZiAobm9kZV9kYXRhW25vZGVpZF0gPT0gTlVMTCkKIAkJcmV0dXJuOwogCW5vZGVkYXRhX3BoeXMgPSBfX3BhKG5vZGVfZGF0YVtub2RlaWRdKTsKKwlyZXNlcnZlX2Vhcmx5KG5vZGVkYXRhX3BoeXMsIG5vZGVkYXRhX3BoeXMgKyBwZ2RhdF9zaXplLCAiTk9ERV9EQVRBIik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiICBOT0RFX0RBVEEgWyUwMTZseCAtICUwMTZseF1cbiIsIG5vZGVkYXRhX3BoeXMsCiAJCW5vZGVkYXRhX3BoeXMgKyBwZ2RhdF9zaXplIC0gMSk7CisJbmlkID0gcGh5c190b19uaWQobm9kZWRhdGFfcGh5cyk7CisJaWYgKG5pZCAhPSBub2RlaWQpCisJCXByaW50ayhLRVJOX0lORk8gIiAgICBOT0RFX0RBVEEoJWQpIG9uIG5vZGUgJWRcbiIsIG5vZGVpZCwgbmlkKTsKIAogCW1lbXNldChOT0RFX0RBVEEobm9kZWlkKSwgMCwgc2l6ZW9mKHBnX2RhdGFfdCkpOwotCU5PREVfREFUQShub2RlaWQpLT5iZGF0YSA9ICZib290bWVtX25vZGVfZGF0YVtub2RlaWRdOworCU5PREVfREFUQShub2RlaWQpLT5ub2RlX2lkID0gbm9kZWlkOwogCU5PREVfREFUQShub2RlaWQpLT5ub2RlX3N0YXJ0X3BmbiA9IHN0YXJ0X3BmbjsKIAlOT0RFX0RBVEEobm9kZWlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzID0gbGFzdF9wZm4gLSBzdGFydF9wZm47CiAKKyNpZm5kZWYgQ09ORklHX05PX0JPT1RNRU0KKwlOT0RFX0RBVEEobm9kZWlkKS0+YmRhdGEgPSAmYm9vdG1lbV9ub2RlX2RhdGFbbm9kZWlkXTsKKwogCS8qCiAJICogRmluZCBhIHBsYWNlIGZvciB0aGUgYm9vdG1lbSBtYXAKIAkgKiBub2RlZGF0YV9waHlzIGNvdWxkIGJlIG9uIG90aGVyIG5vZGVzIGJ5IGFsbG9jX2Jvb3RtZW0sCkBAIC0yMjcsMTEgKzI1Miw3IEBACiAJICogb2YgYWxsb2NfYm9vdG1lbSwgdGhhdCBjb3VsZCBjbGFzaCB3aXRoIHJlc2VydmVkIHJhbmdlCiAJICovCiAJYm9vdG1hcF9wYWdlcyA9IGJvb3RtZW1fYm9vdG1hcF9wYWdlcyhsYXN0X3BmbiAtIHN0YXJ0X3Bmbik7Ci0JbmlkID0gcGh5c190b19uaWQobm9kZWRhdGFfcGh5cyk7Ci0JaWYgKG5pZCA9PSBub2RlaWQpCi0JCWJvb3RtYXBfc3RhcnQgPSByb3VuZHVwKG5vZGVkYXRhX3BoeXMgKyBwZ2RhdF9zaXplLCBQQUdFX1NJWkUpOwotCWVsc2UKLQkJYm9vdG1hcF9zdGFydCA9IHJvdW5kdXAoc3RhcnQsIFBBR0VfU0laRSk7CisJYm9vdG1hcF9zdGFydCA9IHJvdW5kdXAobm9kZWRhdGFfcGh5cyArIHBnZGF0X3NpemUsIFBBR0VfU0laRSk7CiAJLyoKIAkgKiBTTVBfQ0FDSEVfQllURVMgY291bGQgYmUgZW5vdWdoLCBidXQgaW5pdF9ib290bWVtX25vZGUgbGlrZQogCSAqIHRvIHVzZSB0aGF0IHRvIGFsaWduIHRvIFBBR0VfU0laRQpAQCAtMjM5LDE4ICsyNjAsMTMgQEAKIAlib290bWFwID0gZWFybHlfbm9kZV9tZW0obm9kZWlkLCBib290bWFwX3N0YXJ0LCBlbmQsCiAJCQkJIGJvb3RtYXBfcGFnZXM8PFBBR0VfU0hJRlQsIFBBR0VfU0laRSk7CiAJaWYgKGJvb3RtYXAgPT0gTlVMTCkgIHsKLQkJaWYgKG5vZGVkYXRhX3BoeXMgPCBzdGFydCB8fCBub2RlZGF0YV9waHlzID49IGVuZCkgewotCQkJLyoKLQkJCSAqIG9ubHkgbmVlZCB0byBmcmVlIGl0IGlmIGl0IGlzIGZyb20gb3RoZXIgbm9kZQotCQkJICogYm9vdG1lbQotCQkJICovCi0JCQlpZiAobmlkICE9IG5vZGVpZCkKLQkJCQlmcmVlX2Jvb3RtZW0obm9kZWRhdGFfcGh5cywgcGdkYXRfc2l6ZSk7Ci0JCX0KKwkJZnJlZV9lYXJseShub2RlZGF0YV9waHlzLCBub2RlZGF0YV9waHlzICsgcGdkYXRfc2l6ZSk7CiAJCW5vZGVfZGF0YVtub2RlaWRdID0gTlVMTDsKIAkJcmV0dXJuOwogCX0KIAlib290bWFwX3N0YXJ0ID0gX19wYShib290bWFwKTsKKwlyZXNlcnZlX2Vhcmx5KGJvb3RtYXBfc3RhcnQsIGJvb3RtYXBfc3RhcnQrKGJvb3RtYXBfcGFnZXM8PFBBR0VfU0hJRlQpLAorCQkJIkJPT1RNQVAiKTsKIAogCWJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlaWQpLAogCQkJCQkgYm9vdG1hcF9zdGFydCA+PiBQQUdFX1NISUZULApAQCAtMjU5LDMxICsyNzUsMTIgQEAKIAlwcmludGsoS0VSTl9JTkZPICIgIGJvb3RtYXAgWyUwMTZseCAtICAlMDE2bHhdIHBhZ2VzICVseFxuIiwKIAkJIGJvb3RtYXBfc3RhcnQsIGJvb3RtYXBfc3RhcnQgKyBib290bWFwX3NpemUgLSAxLAogCQkgYm9vdG1hcF9wYWdlcyk7Ci0KLQlmcmVlX2Jvb3RtZW1fd2l0aF9hY3RpdmVfcmVnaW9ucyhub2RlaWQsIGVuZCk7Ci0KLQkvKgotCSAqIGNvbnZlcnQgZWFybHkgcmVzZXJ2ZSB0byBib290bWVtIHJlc2VydmUgZWFybGllcgotCSAqIG90aGVyd2lzZSBlYXJseV9ub2RlX21lbSBjb3VsZCB1c2UgZWFybHkgcmVzZXJ2ZWQgbWVtCi0JICogb24gcHJldmlvdXMgbm9kZQotCSAqLwotCWVhcmx5X3Jlc190b19ib290bWVtKHN0YXJ0LCBlbmQpOwotCi0JLyoKLQkgKiBpbiBzb21lIGNhc2UgZWFybHlfbm9kZV9tZW0gY291bGQgdXNlIGFsbG9jX2Jvb3RtZW0KLQkgKiB0byBnZXQgcmFuZ2Ugb24gb3RoZXIgbm9kZSwgZG9uJ3QgcmVzZXJ2ZSB0aGF0IGFnYWluCi0JICovCi0JaWYgKG5pZCAhPSBub2RlaWQpCi0JCXByaW50ayhLRVJOX0lORk8gIiAgICBOT0RFX0RBVEEoJWQpIG9uIG5vZGUgJWRcbiIsIG5vZGVpZCwgbmlkKTsKLQllbHNlCi0JCXJlc2VydmVfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlaWQpLCBub2RlZGF0YV9waHlzLAotCQkJCQlwZ2RhdF9zaXplLCBCT09UTUVNX0RFRkFVTFQpOwogCW5pZCA9IHBoeXNfdG9fbmlkKGJvb3RtYXBfc3RhcnQpOwogCWlmIChuaWQgIT0gbm9kZWlkKQogCQlwcmludGsoS0VSTl9JTkZPICIgICAgYm9vdG1hcCglZCkgb24gbm9kZSAlZFxuIiwgbm9kZWlkLCBuaWQpOwotCWVsc2UKLQkJcmVzZXJ2ZV9ib290bWVtX25vZGUoTk9ERV9EQVRBKG5vZGVpZCksIGJvb3RtYXBfc3RhcnQsCi0JCQkJIGJvb3RtYXBfcGFnZXM8PFBBR0VfU0hJRlQsIEJPT1RNRU1fREVGQVVMVCk7CisKKwlmcmVlX2Jvb3RtZW1fd2l0aF9hY3RpdmVfcmVnaW9ucyhub2RlaWQsIGVuZCk7CisjZW5kaWYKIAogCW5vZGVfc2V0X29ubGluZShub2RlaWQpOwogfQpAQCAtNzA5LDYgKzcwNiwxMCBAQAogCWZvcl9lYWNoX29ubGluZV9ub2RlKGkpCiAJCXBhZ2VzICs9IGZyZWVfYWxsX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoaSkpOwogCisjaWZkZWYgQ09ORklHX05PX0JPT1RNRU0KKwlwYWdlcyArPSBmcmVlX2FsbF9tZW1vcnlfY29yZV9lYXJseShNQVhfTlVNTk9ERVMpOworI2VuZGlmCisKIAlyZXR1cm4gcGFnZXM7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9NYWtlZmlsZSBiL2FyY2gveDg2L3BjaS9NYWtlZmlsZQppbmRleCAzOWZiYTM3Li5iMTEwZDk3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvcGNpL01ha2VmaWxlCkBAIC0xMyw5ICsxMywxMCBAQAogCiBvYmotJChDT05GSUdfWDg2X05VTUFRKQkJKz0gbnVtYXFfMzIubwogCitvYmotJChDT05GSUdfWDg2X01SU1QpCQkrPSBtcnN0Lm8KKwogb2JqLXkJCQkJKz0gY29tbW9uLm8gZWFybHkubwotb2JqLXkJCQkJKz0gYW1kX2J1cy5vCi1vYmotJChDT05GSUdfWDg2XzY0KQkJKz0gYnVzX251bWEubworb2JqLXkJCQkJKz0gYW1kX2J1cy5vIGJ1c19udW1hLm8KIAogaWZlcSAoJChDT05GSUdfUENJX0RFQlVHKSx5KQogRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9hY3BpLmMgYi9hcmNoL3g4Ni9wY2kvYWNwaS5jCmluZGV4IDVmMTFmZjYuLjZlMjI0NTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9hY3BpLmMKKysrIGIvYXJjaC94ODYvcGNpL2FjcGkuYwpAQCAtMjk4LDE3ICsyOTgsMTQgQEAKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKIAotCWlmIChwY2liaW9zX3NjYW5uZWQpCi0JCXJldHVybiAwOwotCiAJaWYgKGFjcGlfbm9pcnEpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOT0RFVjsKIAogCXByaW50ayhLRVJOX0lORk8gIlBDSTogVXNpbmcgQUNQSSBmb3IgSVJRIHJvdXRpbmdcbiIpOwogCWFjcGlfaXJxX3BlbmFsdHlfaW5pdCgpOwotCXBjaWJpb3Nfc2Nhbm5lZCsrOwogCXBjaWJpb3NfZW5hYmxlX2lycSA9IGFjcGlfcGNpX2lycV9lbmFibGU7CiAJcGNpYmlvc19kaXNhYmxlX2lycSA9IGFjcGlfcGNpX2lycV9kaXNhYmxlOworCXg4Nl9pbml0LnBjaS5pbml0X2lycSA9IHg4Nl9pbml0X25vb3A7CiAKIAlpZiAocGNpX3JvdXRlaXJxKSB7CiAJCS8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvYW1kX2J1cy5jIGIvYXJjaC94ODYvcGNpL2FtZF9idXMuYwppbmRleCA5NWVjYmQ0Li5mYzFlOGZlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvYW1kX2J1cy5jCisrKyBiL2FyY2gveDg2L3BjaS9hbWRfYnVzLmMKQEAgLTIsMTEgKzIsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC90b3BvbG9neS5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmdlLmg+CisKICNpbmNsdWRlIDxhc20vcGNpX3g4Ni5oPgogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAogI2luY2x1ZGUgPGFzbS9wY2ktZGlyZWN0Lmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgImJ1c19udW1hLmgiCiAKQEAgLTE1LDYwICsxNSw2IEBACiAgKiBhbHNvIGdldCBwZWVyIHJvb3QgYnVzIHJlc291cmNlIGZvciBpbyxtbWlvCiAgKi8KIAotI2lmZGVmIENPTkZJR19YODZfNjQKLQotI2RlZmluZSBSQU5HRV9OVU0gMTYKLQotc3RydWN0IHJlc19yYW5nZSB7Ci0Jc2l6ZV90IHN0YXJ0OwotCXNpemVfdCBlbmQ7Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgdXBkYXRlX3JhbmdlKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBzaXplX3Qgc3RhcnQsCi0JCQkJc2l6ZV90IGVuZCkKLXsKLQlpbnQgaTsKLQlpbnQgajsKLQotCWZvciAoaiA9IDA7IGogPCBSQU5HRV9OVU07IGorKykgewotCQlpZiAoIXJhbmdlW2pdLmVuZCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChzdGFydCA8PSByYW5nZVtqXS5zdGFydCAmJiBlbmQgPj0gcmFuZ2Vbal0uZW5kKSB7Ci0JCQlyYW5nZVtqXS5zdGFydCA9IDA7Ci0JCQlyYW5nZVtqXS5lbmQgPSAwOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoc3RhcnQgPD0gcmFuZ2Vbal0uc3RhcnQgJiYgZW5kIDwgcmFuZ2Vbal0uZW5kICYmIHJhbmdlW2pdLnN0YXJ0IDwgZW5kICsgMSkgewotCQkJcmFuZ2Vbal0uc3RhcnQgPSBlbmQgKyAxOwotCQkJY29udGludWU7Ci0JCX0KLQotCi0JCWlmIChzdGFydCA+IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA+PSByYW5nZVtqXS5lbmQgJiYgcmFuZ2Vbal0uZW5kID4gc3RhcnQgLSAxKSB7Ci0JCQlyYW5nZVtqXS5lbmQgPSBzdGFydCAtIDE7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChzdGFydCA+IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA8IHJhbmdlW2pdLmVuZCkgewotCQkJLyogZmluZCB0aGUgbmV3IHNwYXJlICovCi0JCQlmb3IgKGkgPSAwOyBpIDwgUkFOR0VfTlVNOyBpKyspIHsKLQkJCQlpZiAocmFuZ2VbaV0uZW5kID09IDApCi0JCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKGkgPCBSQU5HRV9OVU0pIHsKLQkJCQlyYW5nZVtpXS5lbmQgPSByYW5nZVtqXS5lbmQ7Ci0JCQkJcmFuZ2VbaV0uc3RhcnQgPSBlbmQgKyAxOwotCQkJfSBlbHNlIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgInJ1biBvZiBzbG90IGluIHJhbmdlc1xuIik7Ci0JCQl9Ci0JCQlyYW5nZVtqXS5lbmQgPSBzdGFydCAtIDE7Ci0JCQljb250aW51ZTsKLQkJfQotCX0KLX0KLQogc3RydWN0IHBjaV9ob3N0YnJpZGdlX3Byb2JlIHsKIAl1MzIgYnVzOwogCXUzMiBzbG90OwpAQCAtMTExLDYgKzU3LDggQEAKIAlmYW0xMGhfbW1jb25mX2VuZCA9IGJhc2UgKyAoMVVMTDw8KHNlZ25fYnVzbl9iaXRzICsgMjApKSAtIDE7CiB9CiAKKyNkZWZpbmUgUkFOR0VfTlVNIDE2CisKIC8qKgogICogZWFybHlfZmlsbF9tcF9idXNfdG9fbm9kZSgpCiAgKiBjYWxsZWQgYmVmb3JlIHBjaWJpb3Nfc2Nhbl9yb290IGFuZCBwY2lfc2Nhbl9idXMKQEAgLTEzMCwxNiArNzgsMTcgQEAKIAlzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyAqaW5mbzsKIAl1MzIgcmVnOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCXNpemVfdCBzdGFydDsKLQlzaXplX3QgZW5kOwotCXN0cnVjdCByZXNfcmFuZ2UgcmFuZ2VbUkFOR0VfTlVNXTsKKwl1NjQgc3RhcnQ7CisJdTY0IGVuZDsKKwlzdHJ1Y3QgcmFuZ2UgcmFuZ2VbUkFOR0VfTlVNXTsKIAl1NjQgdmFsOwogCXUzMiBhZGRyZXNzOworCWJvb2wgZm91bmQ7CiAKIAlpZiAoIWVhcmx5X3BjaV9hbGxvd2VkKCkpCiAJCXJldHVybiAtMTsKIAotCWZvdW5kX2FsbF9udW1hX2Vhcmx5ID0gMDsKKwlmb3VuZCA9IGZhbHNlOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBjaV9wcm9iZXMpOyBpKyspIHsKIAkJdTMyIGlkOwogCQl1MTYgZGV2aWNlOwpAQCAtMTUzLDEyICsxMDIsMTIgQEAKIAkJZGV2aWNlID0gKGlkPj4xNikgJiAweGZmZmY7CiAJCWlmIChwY2lfcHJvYmVzW2ldLnZlbmRvciA9PSB2ZW5kb3IgJiYKIAkJICAgIHBjaV9wcm9iZXNbaV0uZGV2aWNlID09IGRldmljZSkgewotCQkJZm91bmRfYWxsX251bWFfZWFybHkgPSAxOworCQkJZm91bmQgPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAKLQlpZiAoIWZvdW5kX2FsbF9udW1hX2Vhcmx5KQorCWlmICghZm91bmQpCiAJCXJldHVybiAwOwogCiAJcGNpX3Jvb3RfbnVtID0gMDsKQEAgLTE5Niw3ICsxNDUsNyBAQAogCWRlZl9saW5rID0gKHJlZyA+PiA4KSAmIDB4MDM7CiAKIAltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihyYW5nZSkpOwotCXJhbmdlWzBdLmVuZCA9IDB4ZmZmZjsKKwlhZGRfcmFuZ2UocmFuZ2UsIFJBTkdFX05VTSwgMCwgMCwgMHhmZmZmICsgMSk7CiAJLyogaW8gcG9ydCByZXNvdXJjZSAqLwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJcmVnID0gcmVhZF9wY2lfY29uZmlnKGJ1cywgc2xvdCwgMSwgMHhjMCArIChpIDw8IDMpKTsKQEAgLTIyMCwxMyArMTY5LDEzIEBACiAKIAkJaW5mbyA9ICZwY2lfcm9vdF9pbmZvW2pdOwogCQlwcmludGsoS0VSTl9ERUJVRyAibm9kZSAlZCBsaW5rICVkOiBpbyBwb3J0IFslbGx4LCAlbGx4XVxuIiwKLQkJICAgICAgIG5vZGUsIGxpbmssICh1NjQpc3RhcnQsICh1NjQpZW5kKTsKKwkJICAgICAgIG5vZGUsIGxpbmssIHN0YXJ0LCBlbmQpOwogCiAJCS8qIGtlcm5lbCBvbmx5IGhhbmRsZSAxNiBiaXQgb25seSAqLwogCQlpZiAoZW5kID4gMHhmZmZmKQogCQkJZW5kID0gMHhmZmZmOwogCQl1cGRhdGVfcmVzKGluZm8sIHN0YXJ0LCBlbmQsIElPUkVTT1VSQ0VfSU8sIDEpOwotCQl1cGRhdGVfcmFuZ2UocmFuZ2UsIHN0YXJ0LCBlbmQpOworCQlzdWJ0cmFjdF9yYW5nZShyYW5nZSwgUkFOR0VfTlVNLCBzdGFydCwgZW5kICsgMSk7CiAJfQogCS8qIGFkZCBsZWZ0IG92ZXIgaW8gcG9ydCByYW5nZSB0byBkZWYgbm9kZS9saW5rLCBbMCwgMHhmZmZmXSAqLwogCS8qIGZpbmQgdGhlIHBvc2l0aW9uICovCkBAIC0yNDEsMjkgKzE5MCwzMiBAQAogCQkJaWYgKCFyYW5nZVtpXS5lbmQpCiAJCQkJY29udGludWU7CiAKLQkJCXVwZGF0ZV9yZXMoaW5mbywgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCwKKwkJCXVwZGF0ZV9yZXMoaW5mbywgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCAtIDEsCiAJCQkJICAgSU9SRVNPVVJDRV9JTywgMSk7CiAJCX0KIAl9CiAKIAltZW1zZXQocmFuZ2UsIDAsIHNpemVvZihyYW5nZSkpOwogCS8qIDB4ZmQwMDAwMDAwMC0weGZmZmZmZmZmZmYgZm9yIEhUICovCi0JcmFuZ2VbMF0uZW5kID0gKDB4ZmRVTEw8PDMyKSAtIDE7CisJZW5kID0gY2FwX3Jlc291cmNlKCgweGZkVUxMPDwzMikgLSAxKTsKKwllbmQrKzsKKwlhZGRfcmFuZ2UocmFuZ2UsIFJBTkdFX05VTSwgMCwgMCwgZW5kKTsKIAogCS8qIG5lZWQgdG8gdGFrZSBvdXQgWzAsIFRPTSkgZm9yIFJBTSovCiAJYWRkcmVzcyA9IE1TUl9LOF9UT1BfTUVNMTsKIAlyZG1zcmwoYWRkcmVzcywgdmFsKTsKIAllbmQgPSAodmFsICYgMHhmZmZmZmY4MDAwMDBVTEwpOwotCXByaW50ayhLRVJOX0lORk8gIlRPTTogJTAxNmx4IGFrYSAlbGRNXG4iLCBlbmQsIGVuZD4+MjApOworCXByaW50ayhLRVJOX0lORk8gIlRPTTogJTAxNmxseCBha2EgJWxsZE1cbiIsIGVuZCwgZW5kPj4yMCk7CiAJaWYgKGVuZCA8ICgxVUxMPDwzMikpCi0JCXVwZGF0ZV9yYW5nZShyYW5nZSwgMCwgZW5kIC0gMSk7CisJCXN1YnRyYWN0X3JhbmdlKHJhbmdlLCBSQU5HRV9OVU0sIDAsIGVuZCk7CiAKIAkvKiBnZXQgbW1jb25maWcgKi8KIAlnZXRfcGNpX21tY2ZnX2FtZF9mYW0xMGhfcmFuZ2UoKTsKIAkvKiBuZWVkIHRvIHRha2Ugb3V0IG1tY29uZiByYW5nZSAqLwogCWlmIChmYW0xMGhfbW1jb25mX2VuZCkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiRmFtIDEwaCBtbWNvbmYgWyVsbHgsICVsbHhdXG4iLCBmYW0xMGhfbW1jb25mX3N0YXJ0LCBmYW0xMGhfbW1jb25mX2VuZCk7Ci0JCXVwZGF0ZV9yYW5nZShyYW5nZSwgZmFtMTBoX21tY29uZl9zdGFydCwgZmFtMTBoX21tY29uZl9lbmQpOworCQlzdWJ0cmFjdF9yYW5nZShyYW5nZSwgUkFOR0VfTlVNLCBmYW0xMGhfbW1jb25mX3N0YXJ0LAorCQkJCSBmYW0xMGhfbW1jb25mX2VuZCArIDEpOwogCX0KIAogCS8qIG1taW8gcmVzb3VyY2UgKi8KQEAgLTI5Myw3ICsyNDUsNyBAQAogCQlpbmZvID0gJnBjaV9yb290X2luZm9bal07CiAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIm5vZGUgJWQgbGluayAlZDogbW1pbyBbJWxseCwgJWxseF0iLAotCQkgICAgICAgbm9kZSwgbGluaywgKHU2NClzdGFydCwgKHU2NCllbmQpOworCQkgICAgICAgbm9kZSwgbGluaywgc3RhcnQsIGVuZCk7CiAJCS8qCiAJCSAqIHNvbWUgc2ljayBhbGxvY2F0aW9uIHdvdWxkIGhhdmUgcmFuZ2Ugb3ZlcmxhcCB3aXRoIGZhbTEwaAogCQkgKiBtbWNvbmYgcmFuZ2UsIHNvIG5lZWQgdG8gdXBkYXRlIHN0YXJ0IGFuZCBlbmQuCkBAIC0zMTgsMTQgKzI3MCwxNSBAQAogCQkJCS8qIHdlIGdvdCBhIGhvbGUgKi8KIAkJCQllbmR4ID0gZmFtMTBoX21tY29uZl9zdGFydCAtIDE7CiAJCQkJdXBkYXRlX3JlcyhpbmZvLCBzdGFydCwgZW5keCwgSU9SRVNPVVJDRV9NRU0sIDApOwotCQkJCXVwZGF0ZV9yYW5nZShyYW5nZSwgc3RhcnQsIGVuZHgpOwotCQkJCXByaW50ayhLRVJOX0NPTlQgIiA9PT4gWyVsbHgsICVsbHhdIiwgKHU2NClzdGFydCwgZW5keCk7CisJCQkJc3VidHJhY3RfcmFuZ2UocmFuZ2UsIFJBTkdFX05VTSwgc3RhcnQsCisJCQkJCQkgZW5keCArIDEpOworCQkJCXByaW50ayhLRVJOX0NPTlQgIiA9PT4gWyVsbHgsICVsbHhdIiwgc3RhcnQsIGVuZHgpOwogCQkJCXN0YXJ0ID0gZmFtMTBoX21tY29uZl9lbmQgKyAxOwogCQkJCWNoYW5nZWQgPSAxOwogCQkJfQogCQkJaWYgKGNoYW5nZWQpIHsKIAkJCQlpZiAoc3RhcnQgPD0gZW5kKSB7Ci0JCQkJCXByaW50ayhLRVJOX0NPTlQgIiAlcyBbJWxseCwgJWxseF0iLCBlbmR4PyJhbmQiOiI9PT4iLCAodTY0KXN0YXJ0LCAodTY0KWVuZCk7CisJCQkJCXByaW50ayhLRVJOX0NPTlQgIiAlcyBbJWxseCwgJWxseF0iLCBlbmR4ID8gImFuZCIgOiAiPT0+Iiwgc3RhcnQsIGVuZCk7CiAJCQkJfSBlbHNlIHsKIAkJCQkJcHJpbnRrKEtFUk5fQ09OVCAiJXNcbiIsIGVuZHg/IiI6IiA9PT4gbm9uZSIpOwogCQkJCQljb250aW51ZTsKQEAgLTMzMyw4ICsyODYsOSBAQAogCQkJfQogCQl9CiAKLQkJdXBkYXRlX3JlcyhpbmZvLCBzdGFydCwgZW5kLCBJT1JFU09VUkNFX01FTSwgMSk7Ci0JCXVwZGF0ZV9yYW5nZShyYW5nZSwgc3RhcnQsIGVuZCk7CisJCXVwZGF0ZV9yZXMoaW5mbywgY2FwX3Jlc291cmNlKHN0YXJ0KSwgY2FwX3Jlc291cmNlKGVuZCksCisJCQkJIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwkJc3VidHJhY3RfcmFuZ2UocmFuZ2UsIFJBTkdFX05VTSwgc3RhcnQsIGVuZCArIDEpOwogCQlwcmludGsoS0VSTl9DT05UICJcbiIpOwogCX0KIApAQCAtMzQ4LDggKzMwMiw4IEBACiAJCWFkZHJlc3MgPSBNU1JfSzhfVE9QX01FTTI7CiAJCXJkbXNybChhZGRyZXNzLCB2YWwpOwogCQllbmQgPSAodmFsICYgMHhmZmZmZmY4MDAwMDBVTEwpOwotCQlwcmludGsoS0VSTl9JTkZPICJUT00yOiAlMDE2bHggYWthICVsZE1cbiIsIGVuZCwgZW5kPj4yMCk7Ci0JCXVwZGF0ZV9yYW5nZShyYW5nZSwgMVVMTDw8MzIsIGVuZCAtIDEpOworCQlwcmludGsoS0VSTl9JTkZPICJUT00yOiAlMDE2bGx4IGFrYSAlbGxkTVxuIiwgZW5kLCBlbmQ+PjIwKTsKKwkJc3VidHJhY3RfcmFuZ2UocmFuZ2UsIFJBTkdFX05VTSwgMVVMTDw8MzIsIGVuZCk7CiAJfQogCiAJLyoKQEAgLTM2OCw3ICszMjIsOCBAQAogCQkJaWYgKCFyYW5nZVtpXS5lbmQpCiAJCQkJY29udGludWU7CiAKLQkJCXVwZGF0ZV9yZXMoaW5mbywgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCwKKwkJCXVwZGF0ZV9yZXMoaW5mbywgY2FwX3Jlc291cmNlKHJhbmdlW2ldLnN0YXJ0KSwKKwkJCQkgICBjYXBfcmVzb3VyY2UocmFuZ2VbaV0uZW5kIC0gMSksCiAJCQkJICAgSU9SRVNPVVJDRV9NRU0sIDEpOwogCQl9CiAJfQpAQCAtMzg0LDI0ICszMzksMTQgQEAKIAkJICAgICAgIGluZm8tPmJ1c19taW4sIGluZm8tPmJ1c19tYXgsIGluZm8tPm5vZGUsIGluZm8tPmxpbmspOwogCQlmb3IgKGogPSAwOyBqIDwgcmVzX251bTsgaisrKSB7CiAJCQlyZXMgPSAmaW5mby0+cmVzW2pdOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgImJ1czogJTAyeCBpbmRleCAleCAlczogWyVsbHgsICVsbHhdXG4iLAotCQkJICAgICAgIGJ1c251bSwgaiwKLQkJCSAgICAgICAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pPyJpbyBwb3J0IjoibW1pbyIsCi0JCQkgICAgICAgcmVzLT5zdGFydCwgcmVzLT5lbmQpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgImJ1czogJTAyeCBpbmRleCAleCAlcFJcbiIsCisJCQkJICAgICAgIGJ1c251bSwgaiwgcmVzKTsKIAkJfQogCX0KIAogCXJldHVybiAwOwogfQogCi0jZWxzZSAgLyogIUNPTkZJR19YODZfNjQgKi8KLQotc3RhdGljIGludCBfX2luaXQgZWFybHlfZmlsbF9tcF9idXNfaW5mbyh2b2lkKSB7IHJldHVybiAwOyB9Ci0KLSNlbmRpZiAvKiAhQ09ORklHX1g4Nl82NCAqLwotCi0vKiBjb21tb24gMzIvNjQgYml0IGNvZGUgKi8KLQogI2RlZmluZSBFTkFCTEVfQ0Y4X0VYVF9DRkcgICAgICAoMVVMTCA8PCA0NikKIAogc3RhdGljIHZvaWQgZW5hYmxlX3BjaV9pb19lY3Modm9pZCAqdW51c2VkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2J1c19udW1hLmMgYi9hcmNoL3g4Ni9wY2kvYnVzX251bWEuYwppbmRleCAxMmQ1NGZmLi42NGExMjI4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvYnVzX251bWEuYworKysgYi9hcmNoL3g4Ni9wY2kvYnVzX251bWEuYwpAQCAtMSwxMSArMSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5nZS5oPgogCiAjaW5jbHVkZSAiYnVzX251bWEuaCIKIAogaW50IHBjaV9yb290X251bTsKIHN0cnVjdCBwY2lfcm9vdF9pbmZvIHBjaV9yb290X2luZm9bUENJX1JPT1RfTlJdOwotaW50IGZvdW5kX2FsbF9udW1hX2Vhcmx5OwogCiB2b2lkIHg4Nl9wY2lfcm9vdF9idXNfcmVzX3F1aXJrcyhzdHJ1Y3QgcGNpX2J1cyAqYikKIHsKQEAgLTIxLDEwICsyMSw2IEBACiAJaWYgKCFwY2lfcm9vdF9udW0pCiAJCXJldHVybjsKIAotCS8qIGZvciBhbWQsIGlmIG9ubHkgb25lIHJvb3QgYnVzLCBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nICovCi0JaWYgKHBjaV9yb290X251bSA8IDIgJiYgZm91bmRfYWxsX251bWFfZWFybHkpCi0JCXJldHVybjsKLQogCWZvciAoaSA9IDA7IGkgPCBwY2lfcm9vdF9udW07IGkrKykgewogCQlpZiAocGNpX3Jvb3RfaW5mb1tpXS5idXNfbWluID09IGItPm51bWJlcikKIAkJCWJyZWFrOwpAQCAtNTIsOCArNDgsOCBAQAogCX0KIH0KIAotdm9pZCBfX2RldmluaXQgdXBkYXRlX3JlcyhzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyAqaW5mbywgc2l6ZV90IHN0YXJ0LAotCQkJICAgICAgc2l6ZV90IGVuZCwgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IG1lcmdlKQordm9pZCBfX2RldmluaXQgdXBkYXRlX3JlcyhzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyAqaW5mbywgcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LAorCQkJICByZXNvdXJjZV9zaXplX3QgZW5kLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgbWVyZ2UpCiB7CiAJaW50IGk7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CkBAIC02MSwyNSArNTcsMjggQEAKIAlpZiAoc3RhcnQgPiBlbmQpCiAJCXJldHVybjsKIAorCWlmIChzdGFydCA9PSBNQVhfUkVTT1VSQ0UpCisJCXJldHVybjsKKwogCWlmICghbWVyZ2UpCiAJCWdvdG8gYWRkaXQ7CiAKIAkvKiB0cnkgdG8gbWVyZ2UgaXQgd2l0aCBvbGQgb25lICovCiAJZm9yIChpID0gMDsgaSA8IGluZm8tPnJlc19udW07IGkrKykgewotCQlzaXplX3QgZmluYWxfc3RhcnQsIGZpbmFsX2VuZDsKLQkJc2l6ZV90IGNvbW1vbl9zdGFydCwgY29tbW9uX2VuZDsKKwkJcmVzb3VyY2Vfc2l6ZV90IGZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQ7CisJCXJlc291cmNlX3NpemVfdCBjb21tb25fc3RhcnQsIGNvbW1vbl9lbmQ7CiAKIAkJcmVzID0gJmluZm8tPnJlc1tpXTsKIAkJaWYgKHJlcy0+ZmxhZ3MgIT0gZmxhZ3MpCiAJCQljb250aW51ZTsKIAotCQljb21tb25fc3RhcnQgPSBtYXgoKHNpemVfdClyZXMtPnN0YXJ0LCBzdGFydCk7Ci0JCWNvbW1vbl9lbmQgPSBtaW4oKHNpemVfdClyZXMtPmVuZCwgZW5kKTsKKwkJY29tbW9uX3N0YXJ0ID0gbWF4KHJlcy0+c3RhcnQsIHN0YXJ0KTsKKwkJY29tbW9uX2VuZCA9IG1pbihyZXMtPmVuZCwgZW5kKTsKIAkJaWYgKGNvbW1vbl9zdGFydCA+IGNvbW1vbl9lbmQgKyAxKQogCQkJY29udGludWU7CiAKLQkJZmluYWxfc3RhcnQgPSBtaW4oKHNpemVfdClyZXMtPnN0YXJ0LCBzdGFydCk7Ci0JCWZpbmFsX2VuZCA9IG1heCgoc2l6ZV90KXJlcy0+ZW5kLCBlbmQpOworCQlmaW5hbF9zdGFydCA9IG1pbihyZXMtPnN0YXJ0LCBzdGFydCk7CisJCWZpbmFsX2VuZCA9IG1heChyZXMtPmVuZCwgZW5kKTsKIAogCQlyZXMtPnN0YXJ0ID0gZmluYWxfc3RhcnQ7CiAJCXJlcy0+ZW5kID0gZmluYWxfZW5kOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2J1c19udW1hLmggYi9hcmNoL3g4Ni9wY2kvYnVzX251bWEuaAppbmRleCA3MzFiNjRlLi44MDRhNGI0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvYnVzX251bWEuaAorKysgYi9hcmNoL3g4Ni9wY2kvYnVzX251bWEuaApAQCAtMSw1ICsxLDUgQEAKLSNpZmRlZiBDT05GSUdfWDg2XzY0Ci0KKyNpZm5kZWYgX19CVVNfTlVNQV9ICisjZGVmaW5lIF9fQlVTX05VTUFfSAogLyoKICAqIHN1YiBidXMgKHRyYW5zcGFyZW50KSB3aWxsIHVzZSBlbnRyZXMgZnJvbSAzIHRvIHN0b3JlIGV4dHJhIGZyb20KICAqIHJvb3QsIHNvIG5lZWQgdG8gbWFrZSBzdXJlIHdlIGhhdmUgZW5vdWdoIHNsb3QgdGhlcmUuCkBAIC0xOSw4ICsxOSw3IEBACiAjZGVmaW5lIFBDSV9ST09UX05SIDQKIGV4dGVybiBpbnQgcGNpX3Jvb3RfbnVtOwogZXh0ZXJuIHN0cnVjdCBwY2lfcm9vdF9pbmZvIHBjaV9yb290X2luZm9bUENJX1JPT1RfTlJdOwotZXh0ZXJuIGludCBmb3VuZF9hbGxfbnVtYV9lYXJseTsKIAotZXh0ZXJuIHZvaWQgdXBkYXRlX3JlcyhzdHJ1Y3QgcGNpX3Jvb3RfaW5mbyAqaW5mbywgc2l6ZV90IHN0YXJ0LAotCQkJICAgICAgc2l6ZV90IGVuZCwgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IG1lcmdlKTsKK2V4dGVybiB2b2lkIHVwZGF0ZV9yZXMoc3RydWN0IHBjaV9yb290X2luZm8gKmluZm8sIHJlc291cmNlX3NpemVfdCBzdGFydCwKKwkJICAgICAgcmVzb3VyY2Vfc2l6ZV90IGVuZCwgdW5zaWduZWQgbG9uZyBmbGFncywgaW50IG1lcmdlKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2NvbW1vbi5jIGIvYXJjaC94ODYvcGNpL2NvbW1vbi5jCmluZGV4IDM3MzYxNzYuLjI5NGUxMGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9jb21tb24uYworKysgYi9hcmNoL3g4Ni9wY2kvY29tbW9uLmMKQEAgLTcyLDEyICs3Miw2IEBACiB9OwogCiAvKgotICogbGVnYWN5LCBudW1hLCBhbmQgYWNwaSBhbGwgd2FudCB0byBjYWxsIHBjaWJpb3Nfc2Nhbl9yb290Ci0gKiBmcm9tIHRoZWlyIGluaXRjYWxscy4gVGhpcyBmbGFnIHByZXZlbnRzIHRoYXQuCi0gKi8KLWludCBwY2liaW9zX3NjYW5uZWQ7Ci0KLS8qCiAgKiBUaGlzIGludGVycnVwdC1zYWZlIHNwaW5sb2NrIHByb3RlY3RzIGFsbCBhY2Nlc3NlcyB0byBQQ0kKICAqIGNvbmZpZ3VyYXRpb24gc3BhY2UuCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9pMzg2LmMgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCmluZGV4IDVhOGZiZjguLmRlY2UzZWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9pMzg2LmMKKysrIGIvYXJjaC94ODYvcGNpL2kzODYuYwpAQCAtMjU1LDEwICsyNTUsNiBAQAogICovCiBmc19pbml0Y2FsbChwY2liaW9zX2Fzc2lnbl9yZXNvdXJjZXMpOwogCi12b2lkIF9fd2VhayB4ODZfcGNpX3Jvb3RfYnVzX3Jlc19xdWlya3Moc3RydWN0IHBjaV9idXMgKmIpCi17Ci19Ci0KIC8qCiAgKiAgSWYgd2Ugc2V0IHVwIGEgZGV2aWNlIGZvciBidXMgbWFzdGVyaW5nLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBsYXRlbmN5CiAgKiAgdGltZXIgYXMgY2VydGFpbiBjcmFwcHkgQklPU2VzIGZvcmdldCB0byBzZXQgaXQgcHJvcGVybHkuCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvaW5pdC5jIGIvYXJjaC94ODYvcGNpL2luaXQuYwppbmRleCAyNWExZjhlLi5hZGI2MmFhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvaW5pdC5jCisrKyBiL2FyY2gveDg2L3BjaS9pbml0LmMKQEAgLTEsNiArMSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9wY2lfeDg2Lmg+CisjaW5jbHVkZSA8YXNtL3g4Nl9pbml0Lmg+CiAKIC8qIGFyY2hfaW5pdGNhbGwgaGFzIHRvbyByYW5kb20gb3JkZXJpbmcsIHNvIGNhbGwgdGhlIGluaXRpYWxpemVycwogICAgaW4gdGhlIHJpZ2h0IHNlcXVlbmNlIGZyb20gaGVyZS4gKi8KQEAgLTE1LDEwICsxNiw5IEBACiAJaWYgKCEocGNpX3Byb2JlICYgUENJX1BST0JFX05PRUFSTFkpKQogCQlwY2lfbW1jZmdfZWFybHlfaW5pdCgpOwogCi0jaWZkZWYgQ09ORklHX1BDSV9PTFBDCi0JaWYgKCFwY2lfb2xwY19pbml0KCkpCi0JCXJldHVybiAwOwkvKiBza2lwIGFkZGl0aW9uYWwgY2hlY2tzIGlmIGl0J3MgYW4gWE8gKi8KLSNlbmRpZgorCWlmICh4ODZfaW5pdC5wY2kuYXJjaF9pbml0ICYmICF4ODZfaW5pdC5wY2kuYXJjaF9pbml0KCkpCisJCXJldHVybiAwOworCiAjaWZkZWYgQ09ORklHX1BDSV9CSU9TCiAJcGNpX3BjYmlvc19pbml0KCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9pcnEuYyBiL2FyY2gveDg2L3BjaS9pcnEuYwppbmRleCBiMDJmNmQ4Li44YjEwNzUyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvaXJxLmMKKysrIGIvYXJjaC94ODYvcGNpL2lycS5jCkBAIC01Myw3ICs1Myw3IEBACiAJaW50ICgqcHJvYmUpKHN0cnVjdCBpcnFfcm91dGVyICpyLCBzdHJ1Y3QgcGNpX2RldiAqcm91dGVyLCB1MTYgZGV2aWNlKTsKIH07CiAKLWludCAoKnBjaWJpb3NfZW5hYmxlX2lycSkoc3RydWN0IHBjaV9kZXYgKmRldikgPSBOVUxMOworaW50ICgqcGNpYmlvc19lbmFibGVfaXJxKShzdHJ1Y3QgcGNpX2RldiAqZGV2KSA9IHBpcnFfZW5hYmxlX2lycTsKIHZvaWQgKCpwY2liaW9zX2Rpc2FibGVfaXJxKShzdHJ1Y3QgcGNpX2RldiAqZGV2KSA9IE5VTEw7CiAKIC8qCkBAIC0xMDE4LDcgKzEwMTgsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgcGNpYmlvc19maXh1cF9pcnFzKHZvaWQpCit2b2lkIF9faW5pdCBwY2liaW9zX2ZpeHVwX2lycXModm9pZCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gTlVMTDsKIAl1OCBwaW47CkBAIC0xMTEyLDEyICsxMTEyLDEyIEBACiAJeyB9CiB9OwogCi1pbnQgX19pbml0IHBjaWJpb3NfaXJxX2luaXQodm9pZCkKK3ZvaWQgX19pbml0IHBjaWJpb3NfaXJxX2luaXQodm9pZCkKIHsKIAlEQkcoS0VSTl9ERUJVRyAiUENJOiBJUlEgaW5pdFxuIik7CiAKLQlpZiAocGNpYmlvc19lbmFibGVfaXJxIHx8IHJhd19wY2lfb3BzID09IE5VTEwpCi0JCXJldHVybiAwOworCWlmIChyYXdfcGNpX29wcyA9PSBOVUxMKQorCQlyZXR1cm47CiAKIAlkbWlfY2hlY2tfc3lzdGVtKHBjaWlycV9kbWlfdGFibGUpOwogCkBAIC0xMTQ0LDkgKzExNDQsNyBAQAogCQkJcGlycV90YWJsZSA9IE5VTEw7CiAJfQogCi0JcGNpYmlvc19lbmFibGVfaXJxID0gcGlycV9lbmFibGVfaXJxOwotCi0JcGNpYmlvc19maXh1cF9pcnFzKCk7CisJeDg2X2luaXQucGNpLmZpeHVwX2lycXMoKTsKIAogCWlmIChpb19hcGljX2Fzc2lnbl9wY2lfaXJxcyAmJiBwY2lfcm91dGVpcnEpIHsKIAkJc3RydWN0IHBjaV9kZXYgKmRldiA9IE5VTEw7CkBAIC0xMTU5LDggKzExNTcsNiBAQAogCQlmb3JfZWFjaF9wY2lfZGV2KGRldikKIAkJCXBpcnFfZW5hYmxlX2lycShkZXYpOwogCX0KLQotCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBwaXJxX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSwgaW50IGFjdGl2ZSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9sZWdhY3kuYyBiL2FyY2gveDg2L3BjaS9sZWdhY3kuYwppbmRleCA0MDYxYmIwLi4wZGI1ZWFmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvbGVnYWN5LmMKKysrIGIvYXJjaC94ODYvcGNpL2xlZ2FjeS5jCkBAIC0zNSwxNiArMzUsMTMgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHBjaV9sZWdhY3lfaW5pdCh2b2lkKQoraW50IF9faW5pdCBwY2lfbGVnYWN5X2luaXQodm9pZCkKIHsKIAlpZiAoIXJhd19wY2lfb3BzKSB7CiAJCXByaW50aygiUENJOiBTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBQQ0lcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAocGNpYmlvc19zY2FubmVkKyspCi0JCXJldHVybiAwOwotCiAJcHJpbnRrKCJQQ0k6IFByb2JpbmcgUENJIGhhcmR3YXJlXG4iKTsKIAlwY2lfcm9vdF9idXMgPSBwY2liaW9zX3NjYW5fcm9vdCgwKTsKIAlpZiAocGNpX3Jvb3RfYnVzKQpAQCAtNTUsMTggKzUyLDE1IEBACiAKIGludCBfX2luaXQgcGNpX3N1YnN5c19pbml0KHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1g4Nl9OVU1BUQotCXBjaV9udW1hcV9pbml0KCk7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQUNQSQotCXBjaV9hY3BpX2luaXQoKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfVklTV1MKLQlwY2lfdmlzd3NfaW5pdCgpOwotI2VuZGlmCi0JcGNpX2xlZ2FjeV9pbml0KCk7CisJLyoKKwkgKiBUaGUgaW5pdCBmdW5jdGlvbiByZXR1cm5zIGFuIG5vbiB6ZXJvIHZhbHVlIHdoZW4KKwkgKiBwY2lfbGVnYWN5X2luaXQgc2hvdWxkIGJlIGludm9rZWQuCisJICovCisJaWYgKHg4Nl9pbml0LnBjaS5pbml0KCkpCisJCXBjaV9sZWdhY3lfaW5pdCgpOworCiAJcGNpYmlvc19maXh1cF9wZWVyX2JyaWRnZXMoKTsKLQlwY2liaW9zX2lycV9pbml0KCk7CisJeDg2X2luaXQucGNpLmluaXRfaXJxKCk7CiAJcGNpYmlvc19pbml0KCk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9tcnN0LmMgYi9hcmNoL3g4Ni9wY2kvbXJzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZjJmY2IKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9wY2kvbXJzdC5jCkBAIC0wLDAgKzEsMjYyIEBACisvKgorICogTW9vcmVzdG93biBQQ0kgc3VwcG9ydAorICogICBDb3B5cmlnaHQgKGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqICAgICBKZXNzZSBCYXJuZXMgPGplc3NlLmJhcm5lc0BpbnRlbC5jb20+CisgKgorICogTW9vcmVzdG93biBoYXMgYW4gaW50ZXJlc3RpbmcgUENJIGltcGxlbWVudGF0aW9uOgorICogICAtIGNvbmZpZ3VyYXRpb24gc3BhY2UgaXMgbWVtb3J5IG1hcHBlZCAoYXMgZGVmaW5lZCBieSBNQ0ZHKQorICogICAtIExpbmNyb2Z0IGRldmljZXMgYWxzbyBoYXZlIGEgcmVhbCwgdHlwZSAxIGNvbmZpZ3VyYXRpb24gc3BhY2UKKyAqICAgLSBFYXJseSBMaW5jcm9mdCBzaWxpY29uIGhhcyBhIHR5cGUgMSBhY2Nlc3MgYnVnIHRoYXQgd2lsbCBjYXVzZQorICogICAgIGEgaGFuZyBpZiBub24tZXhpc3RlbnQgZGV2aWNlcyBhcmUgYWNjZXNzZWQKKyAqICAgLSBzb21lIGRldmljZXMgaGF2ZSB0aGUgImZpeGVkIEJBUiIgY2FwYWJpbGl0eSwgd2hpY2ggbWVhbnMKKyAqICAgICB0aGV5IGNhbid0IGJlIHJlbG9jYXRlZCBvciBtb2RpZmllZDsgY2hlY2sgZm9yIHRoYXQgZHVyaW5nCisgKiAgICAgQkFSIHNpemluZworICoKKyAqIFNvLCB3ZSB1c2UgdGhlIE1DRkcgc3BhY2UgZm9yIGFsbCByZWFkcyBhbmQgd3JpdGVzLCBidXQgYWxzbyBzZW5kCisgKiBMaW5jcm9mdCB3cml0ZXMgdG8gdHlwZSAxIHNwYWNlLiAgQnV0IG9ubHkgcmVhZC93cml0ZSBpZiB0aGUgZGV2aWNlCisgKiBhY3R1YWxseSBleGlzdHMsIG90aGVyd2lzZSByZXR1cm4gYWxsIDFzIGZvciByZWFkcyBhbmQgYml0IGJ1Y2tldAorICogdGhlIHdyaXRlcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CisKKyNpbmNsdWRlIDxhc20vYWNwaS5oPgorI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgorI2luY2x1ZGUgPGFzbS9wY2lfeDg2Lmg+CisjaW5jbHVkZSA8YXNtL2h3X2lycS5oPgorI2luY2x1ZGUgPGFzbS9pb19hcGljLmg+CisKKyNkZWZpbmUgUENJRV9DQVBfT0ZGU0VUCTB4MTAwCisKKy8qIEZpeGVkIEJBUiBmaWVsZHMgKi8KKyNkZWZpbmUgUENJRV9WTkRSX0NBUF9JRF9GSVhFRF9CQVIgMHgwMAkvKiBGaXhlZCBCQVIgKFRCRCkgKi8KKyNkZWZpbmUgUENJX0ZJWEVEX0JBUl8wX1NJWkUJMHgwNAorI2RlZmluZSBQQ0lfRklYRURfQkFSXzFfU0laRQkweDA4CisjZGVmaW5lIFBDSV9GSVhFRF9CQVJfMl9TSVpFCTB4MGMKKyNkZWZpbmUgUENJX0ZJWEVEX0JBUl8zX1NJWkUJMHgxMAorI2RlZmluZSBQQ0lfRklYRURfQkFSXzRfU0laRQkweDE0CisjZGVmaW5lIFBDSV9GSVhFRF9CQVJfNV9TSVpFCTB4MWMKKworLyoqCisgKiBmaXhlZF9iYXJfY2FwIC0gcmV0dXJuIHRoZSBvZmZzZXQgb2YgdGhlIGZpeGVkIEJBUiBjYXAgaWYgZm91bmQKKyAqIEBidXM6IFBDSSBidXMKKyAqIEBkZXZmbjogZGV2aWNlIGluIHF1ZXN0aW9uCisgKgorICogTG9vayBmb3IgdGhlIGZpeGVkIEJBUiBjYXAgb24gQGJ1cyBhbmQgQGRldmZuLCByZXR1cm5pbmcgaXRzIG9mZnNldAorICogaWYgZm91bmQgb3IgMCBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyBpbnQgZml4ZWRfYmFyX2NhcChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4pCit7CisJaW50IHBvczsKKwl1MzIgcGNpZV9jYXAgPSAwLCBjYXBfZGF0YTsKKworCXBvcyA9IFBDSUVfQ0FQX09GRlNFVDsKKworCWlmICghcmF3X3BjaV9leHRfb3BzKQorCQlyZXR1cm4gMDsKKworCXdoaWxlIChwb3MpIHsKKwkJaWYgKHJhd19wY2lfZXh0X29wcy0+cmVhZChwY2lfZG9tYWluX25yKGJ1cyksIGJ1cy0+bnVtYmVyLAorCQkJCQkgIGRldmZuLCBwb3MsIDQsICZwY2llX2NhcCkpCisJCQlyZXR1cm4gMDsKKworCQlpZiAocGNpZV9jYXAgPT0gMHhmZmZmZmZmZikKKwkJCXJldHVybiAwOworCisJCWlmIChQQ0lfRVhUX0NBUF9JRChwY2llX2NhcCkgPT0gUENJX0VYVF9DQVBfSURfVk5EUikgeworCQkJcmF3X3BjaV9leHRfb3BzLT5yZWFkKHBjaV9kb21haW5fbnIoYnVzKSwgYnVzLT5udW1iZXIsCisJCQkJCSAgICAgIGRldmZuLCBwb3MgKyA0LCA0LCAmY2FwX2RhdGEpOworCQkJaWYgKChjYXBfZGF0YSAmIDB4ZmZmZikgPT0gUENJRV9WTkRSX0NBUF9JRF9GSVhFRF9CQVIpCisJCQkJcmV0dXJuIHBvczsKKwkJfQorCisJCXBvcyA9IHBjaWVfY2FwID4+IDIwOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaV9kZXZpY2VfdXBkYXRlX2ZpeGVkKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCQkgICBpbnQgcmVnLCBpbnQgbGVuLCB1MzIgdmFsLCBpbnQgb2Zmc2V0KQoreworCXUzMiBzaXplOworCXVuc2lnbmVkIGludCBkb21haW4sIGJ1c251bTsKKwlpbnQgYmFyID0gKHJlZyAtIFBDSV9CQVNFX0FERFJFU1NfMCkgPj4gMjsKKworCWRvbWFpbiA9IHBjaV9kb21haW5fbnIoYnVzKTsKKwlidXNudW0gPSBidXMtPm51bWJlcjsKKworCWlmICh2YWwgPT0gfjAgJiYgbGVuID09IDQpIHsKKwkJdW5zaWduZWQgbG9uZyBkZWNvZGU7CisKKwkJcmF3X3BjaV9leHRfb3BzLT5yZWFkKGRvbWFpbiwgYnVzbnVtLCBkZXZmbiwKKwkJCSAgICAgICBvZmZzZXQgKyA4ICsgKGJhciAqIDQpLCA0LCAmc2l6ZSk7CisKKwkJLyogVHVybiB0aGUgc2l6ZSBpbnRvIGEgZGVjb2RlIHBhdHRlcm4gZm9yIHRoZSBzaXppbmcgY29kZSAqLworCQlpZiAoc2l6ZSkgeworCQkJZGVjb2RlID0gc2l6ZSAtIDE7CisJCQlkZWNvZGUgfD0gZGVjb2RlID4+IDE7CisJCQlkZWNvZGUgfD0gZGVjb2RlID4+IDI7CisJCQlkZWNvZGUgfD0gZGVjb2RlID4+IDQ7CisJCQlkZWNvZGUgfD0gZGVjb2RlID4+IDg7CisJCQlkZWNvZGUgfD0gZGVjb2RlID4+IDE2OworCQkJZGVjb2RlKys7CisJCQlkZWNvZGUgPSB+KGRlY29kZSAtIDEpOworCQl9IGVsc2UgeworCQkJZGVjb2RlID0gfjA7CisJCX0KKworCQkvKgorCQkgKiBJZiB2YWwgaXMgYWxsIG9uZXMsIHRoZSBjb3JlIGNvZGUgaXMgdHJ5aW5nIHRvIHNpemUgdGhlIHJlZywKKwkJICogc28gdXBkYXRlIHRoZSBtbWNvbmZpZyBzcGFjZSB3aXRoIHRoZSByZWFsIHNpemUuCisJCSAqCisJCSAqIE5vdGU6IHRoaXMgYXNzdW1lcyB0aGUgZml4ZWQgc2l6ZSB3ZSBnb3QgaXMgYSBwb3dlciBvZiB0d28uCisJCSAqLworCQlyZXR1cm4gcmF3X3BjaV9leHRfb3BzLT53cml0ZShkb21haW4sIGJ1c251bSwgZGV2Zm4sIHJlZywgNCwKKwkJCQkgICAgICAgZGVjb2RlKTsKKwl9CisKKwkvKiBUaGlzIGlzIHNvbWUgb3RoZXIga2luZCBvZiBCQVIgd3JpdGUsIHNvIGp1c3QgZG8gaXQuICovCisJcmV0dXJuIHJhd19wY2lfZXh0X29wcy0+d3JpdGUoZG9tYWluLCBidXNudW0sIGRldmZuLCByZWcsIGxlbiwgdmFsKTsKK30KKworLyoqCisgKiB0eXBlMV9hY2Nlc3Nfb2sgLSBjaGVjayB3aGV0aGVyIHRvIHVzZSB0eXBlIDEKKyAqIEBidXM6IGJ1cyBudW1iZXIKKyAqIEBkZXZmbjogZGV2aWNlICYgZnVuY3Rpb24gaW4gcXVlc3Rpb24KKyAqCisgKiBJZiB0aGUgYnVzIGlzIG9uIGEgTGluY3JvZnQgY2hpcCBhbmQgaXQgZXhpc3RzLCBvciBpcyBub3Qgb24gYSBMaW5jcm9mdCBhdAorICogYWxsLCB0aGUgd2UgY2FuIGdvIGFoZWFkIHdpdGggYW55IHJlYWRzICYgd3JpdGVzLiAgSWYgaXQncyBvbiBhIExpbmNyb2Z0LAorICogYnV0IGRvZXNuJ3QgZXhpc3QsIGF2b2lkIHRoZSBhY2Nlc3MgYWx0b2dldGhlciB0byBrZWVwIHRoZSBjaGlwIGZyb20KKyAqIGhhbmdpbmcuCisgKi8KK3N0YXRpYyBib29sIHR5cGUxX2FjY2Vzc19vayh1bnNpZ25lZCBpbnQgYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCByZWcpCit7CisJLyogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIEEwIExOQyBidWcgd2hlcmUgUENJIHN0YXR1cyByZWdpc3RlciBkb2VzCisJICogbm90IGhhdmUgbmV3IENBUCBiaXQgc2V0LiBjYW4gbm90IGJlIHdyaXR0ZW4gYnkgU1cgZWl0aGVyLgorCSAqCisJICogUENJIGhlYWRlciB0eXBlIGluIHJlYWwgTE5DIGluZGljYXRlcyBhIHNpbmdsZSBmdW5jdGlvbiBkZXZpY2UsIHRoaXMKKwkgKiB3aWxsIHByZXZlbnQgcHJvYmluZyBvdGhlciBkZXZpY2VzIHVuZGVyIHRoZSBzYW1lIGZ1bmN0aW9uIGluIFBDSQorCSAqIHNoaW0uIFRoZXJlZm9yZSwgdXNlIHRoZSBoZWFkZXIgdHlwZSBpbiBzaGltIGluc3RlYWQuCisJICovCisJaWYgKHJlZyA+PSAweDEwMCB8fCByZWcgPT0gUENJX1NUQVRVUyB8fCByZWcgPT0gUENJX0hFQURFUl9UWVBFKQorCQlyZXR1cm4gMDsKKwlpZiAoYnVzID09IDAgJiYgKGRldmZuID09IFBDSV9ERVZGTigyLCAwKSB8fCBkZXZmbiA9PSBQQ0lfREVWRk4oMCwgMCkpKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsgLyogbGFuZ3dlbGwgb24gb3RoZXJzICovCit9CisKK3N0YXRpYyBpbnQgcGNpX3JlYWQoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsCisJCSAgICBpbnQgc2l6ZSwgdTMyICp2YWx1ZSkKK3sKKwlpZiAodHlwZTFfYWNjZXNzX29rKGJ1cy0+bnVtYmVyLCBkZXZmbiwgd2hlcmUpKQorCQlyZXR1cm4gcGNpX2RpcmVjdF9jb25mMS5yZWFkKHBjaV9kb21haW5fbnIoYnVzKSwgYnVzLT5udW1iZXIsCisJCQkJCWRldmZuLCB3aGVyZSwgc2l6ZSwgdmFsdWUpOworCXJldHVybiByYXdfcGNpX2V4dF9vcHMtPnJlYWQocGNpX2RvbWFpbl9ucihidXMpLCBidXMtPm51bWJlciwKKwkJCSAgICAgIGRldmZuLCB3aGVyZSwgc2l6ZSwgdmFsdWUpOworfQorCitzdGF0aWMgaW50IHBjaV93cml0ZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwKKwkJICAgICBpbnQgc2l6ZSwgdTMyIHZhbHVlKQoreworCWludCBvZmZzZXQ7CisKKwkvKiBPbiBNUlNULCB0aGVyZSBpcyBubyBQQ0kgUk9NIEJBUiwgdGhpcyB3aWxsIGNhdXNlIGEgc3Vic2VxdWVudCByZWFkCisJICogdG8gUk9NIEJBUiByZXR1cm4gMCB0aGVuIGJlaW5nIGlnbm9yZWQuCisJICovCisJaWYgKHdoZXJlID09IFBDSV9ST01fQUREUkVTUykKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIERldmljZXMgd2l0aCBmaXhlZCBCQVJzIG5lZWQgc3BlY2lhbCBoYW5kbGluZzoKKwkgKiAgIC0gQkFSIHNpemluZyBjb2RlIHdpbGwgc2F2ZSwgd3JpdGUgfjAsIHJlYWQgc2l6ZSwgcmVzdG9yZQorCSAqICAgLSBzbyB3cml0ZXMgdG8gZml4ZWQgQkFScyBuZWVkIHNwZWNpYWwgaGFuZGxpbmcKKwkgKiAgIC0gb3RoZXIgd3JpdGVzIHRvIGZpeGVkIEJBUiBkZXZpY2VzIHNob3VsZCBnbyB0aHJvdWdoIG1tY29uZmlnCisJICovCisJb2Zmc2V0ID0gZml4ZWRfYmFyX2NhcChidXMsIGRldmZuKTsKKwlpZiAob2Zmc2V0ICYmCisJICAgICh3aGVyZSA+PSBQQ0lfQkFTRV9BRERSRVNTXzAgJiYgd2hlcmUgPD0gUENJX0JBU0VfQUREUkVTU181KSkgeworCQlyZXR1cm4gcGNpX2RldmljZV91cGRhdGVfZml4ZWQoYnVzLCBkZXZmbiwgd2hlcmUsIHNpemUsIHZhbHVlLAorCQkJCQkgICAgICAgb2Zmc2V0KTsKKwl9CisKKwkvKgorCSAqIE9uIE1vb3Jlc3Rvd24gdXBkYXRlIGJvdGggcmVhbCAmIG1tY29uZmlnIHNwYWNlCisJICogTm90ZTogZWFybHkgTGluY3JvZnQgc2lsaWNvbiBjYW4ndCBoYW5kbGUgdHlwZSAxIGFjY2Vzc2VzIHRvCisJICogICAgICAgbm9uLWV4aXN0ZW50IGRldmljZXMsIHNvIGp1c3QgZWF0IHRoZSB3cml0ZSBpbiB0aGF0IGNhc2UuCisJICovCisJaWYgKHR5cGUxX2FjY2Vzc19vayhidXMtPm51bWJlciwgZGV2Zm4sIHdoZXJlKSkKKwkJcmV0dXJuIHBjaV9kaXJlY3RfY29uZjEud3JpdGUocGNpX2RvbWFpbl9ucihidXMpLCBidXMtPm51bWJlciwKKwkJCQkJICAgICAgZGV2Zm4sIHdoZXJlLCBzaXplLCB2YWx1ZSk7CisJcmV0dXJuIHJhd19wY2lfZXh0X29wcy0+d3JpdGUocGNpX2RvbWFpbl9ucihidXMpLCBidXMtPm51bWJlciwgZGV2Zm4sCisJCQkgICAgICAgd2hlcmUsIHNpemUsIHZhbHVlKTsKK30KKworc3RhdGljIGludCBtcnN0X3BjaV9pcnFfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJdTggcGluOworCXN0cnVjdCBpb19hcGljX2lycV9hdHRyIGlycV9hdHRyOworCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSU5URVJSVVBUX1BJTiwgJnBpbik7CisKKwkvKiBNUlNUIG9ubHkgaGF2ZSBJT0FQSUMsIHRoZSBQQ0kgaXJxIGxpbmVzIGFyZSAxOjEgbWFwcGVkIHRvCisJICogSU9BUElDIFJURSBlbnRyaWVzLCBzbyB3ZSBqdXN0IGVuYWJsZSBSVEUgZm9yIHRoZSBkZXZpY2UuCisJICovCisJaXJxX2F0dHIuaW9hcGljID0gbXBfZmluZF9pb2FwaWMoZGV2LT5pcnEpOworCWlycV9hdHRyLmlvYXBpY19waW4gPSBkZXYtPmlycTsKKwlpcnFfYXR0ci50cmlnZ2VyID0gMTsgLyogbGV2ZWwgKi8KKwlpcnFfYXR0ci5wb2xhcml0eSA9IDE7IC8qIGFjdGl2ZSBsb3cgKi8KKwlpb19hcGljX3NldF9wY2lfcm91dGluZygmZGV2LT5kZXYsIGRldi0+aXJxLCAmaXJxX2F0dHIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBwY2lfb3BzIHBjaV9tcnN0X29wcyA9IHsKKwkucmVhZCA9IHBjaV9yZWFkLAorCS53cml0ZSA9IHBjaV93cml0ZSwKK307CisKKy8qKgorICogcGNpX21yc3RfaW5pdCAtIGluc3RhbGxzIHBjaV9tcnN0X29wcworICoKKyAqIE1vb3Jlc3Rvd24gaGFzIGFuIGludGVyZXN0aW5nIFBDSSBpbXBsZW1lbnRhdGlvbiAoc2VlIGFib3ZlKS4KKyAqIENhbGxlZCB3aGVuIHRoZSBlYXJseSBwbGF0Zm9ybSBkZXRlY3Rpb24gaW5zdGFsbHMgaXQuCisgKi8KK2ludCBfX2luaXQgcGNpX21yc3RfaW5pdCh2b2lkKQoreworCXByaW50ayhLRVJOX0lORk8gIk1vb3Jlc3Rvd24gcGxhdGZvcm0gZGV0ZWN0ZWQsIHVzaW5nIE1SU1QgUENJIG9wc1xuIik7CisJcGNpX21tY2ZnX2xhdGVfaW5pdCgpOworCXBjaWJpb3NfZW5hYmxlX2lycSA9IG1yc3RfcGNpX2lycV9lbmFibGU7CisJcGNpX3Jvb3Rfb3BzID0gcGNpX21yc3Rfb3BzOworCS8qIENvbnRpbnVlIHdpdGggc3RhbmRhcmQgaW5pdCAqLworCXJldHVybiAxOworfQorCisvKgorICogTGFuZ3dlbGwgZGV2aWNlcyByZXNpZGUgYXQgZml4ZWQgb2Zmc2V0cywgZG9uJ3QgdHJ5IHRvIG1vdmUgdGhlbS4KKyAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IHBjaV9maXhlZF9iYXJfZml4dXAoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwl1MzIgc2l6ZTsKKwlpbnQgaTsKKworCS8qIEZpeHVwIHRoZSBCQVIgc2l6ZXMgZm9yIGZpeGVkIEJBUiBkZXZpY2VzIGFuZCBtYWtlIHRoZW0gdW5tb3ZlYWJsZSAqLworCW9mZnNldCA9IGZpeGVkX2Jhcl9jYXAoZGV2LT5idXMsIGRldi0+ZGV2Zm4pOworCWlmICghb2Zmc2V0IHx8IFBDSV9ERVZGTigyLCAwKSA9PSBkZXYtPmRldmZuIHx8CisJICAgIFBDSV9ERVZGTigyLCAyKSA9PSBkZXYtPmRldmZuKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgUENJX1JPTV9SRVNPVVJDRTsgaSsrKSB7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIG9mZnNldCArIDggKyAoaSAqIDQpLCAmc2l6ZSk7CisJCWRldi0+cmVzb3VyY2VbaV0uZW5kID0gZGV2LT5yZXNvdXJjZVtpXS5zdGFydCArIHNpemUgLSAxOworCQlkZXYtPnJlc291cmNlW2ldLmZsYWdzIHw9IElPUkVTT1VSQ0VfUENJX0ZJWEVEOworCX0KK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfQU5ZX0lELCBwY2lfZml4ZWRfYmFyX2ZpeHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9udW1hcV8zMi5jIGIvYXJjaC94ODYvcGNpL251bWFxXzMyLmMKaW5kZXggODg4NGExYy4uODIyMzczOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvcGNpL251bWFxXzMyLmMKKysrIGIvYXJjaC94ODYvcGNpL251bWFxXzMyLmMKQEAgLTE0OCwxNCArMTQ4LDggQEAKIHsKIAlpbnQgcXVhZDsKIAotCWlmICghZm91bmRfbnVtYXEpCi0JCXJldHVybiAwOwotCiAJcmF3X3BjaV9vcHMgPSAmcGNpX2RpcmVjdF9jb25mMV9tcTsKIAotCWlmIChwY2liaW9zX3NjYW5uZWQrKykKLQkJcmV0dXJuIDA7Ci0KIAlwY2lfcm9vdF9idXMgPSBwY2liaW9zX3NjYW5fcm9vdCgwKTsKIAlpZiAocGNpX3Jvb3RfYnVzKQogCQlwY2lfYnVzX2FkZF9kZXZpY2VzKHBjaV9yb290X2J1cyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvb2xwYy5jIGIvYXJjaC94ODYvcGNpL29scGMuYwppbmRleCBiODg5ZDgyLi5iMzQ4MTU0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvb2xwYy5jCisrKyBiL2FyY2gveDg2L3BjaS9vbHBjLmMKQEAgLTMwNCw5ICszMDQsNiBAQAogCiBpbnQgX19pbml0IHBjaV9vbHBjX2luaXQodm9pZCkKIHsKLQlpZiAoIW1hY2hpbmVfaXNfb2xwYygpIHx8IG9scGNfaGFzX3ZzYSgpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQogCXByaW50ayhLRVJOX0lORk8gIlBDSTogVXNpbmcgY29uZmlndXJhdGlvbiB0eXBlIE9MUENcbiIpOwogCXJhd19wY2lfb3BzID0gJnBjaV9vbHBjX2NvbmY7CiAJaXNfbHggPSBpc19nZW9kZV9seCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL3Zpc3dzLmMgYi9hcmNoL3g4Ni9wY2kvdmlzd3MuYwppbmRleCBiY2VhZDdhLi4wMzAwOGY3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9wY2kvdmlzd3MuYworKysgYi9hcmNoL3g4Ni9wY2kvdmlzd3MuYwpAQCAtNjksOSArNjksNiBAQAogCiBpbnQgX19pbml0IHBjaV92aXN3c19pbml0KHZvaWQpCiB7Ci0JaWYgKCFpc192aXN3c19ib3goKSkKLQkJcmV0dXJuIC0xOwotCiAJcGNpYmlvc19lbmFibGVfaXJxID0gJnBjaV92aXN3c19lbmFibGVfaXJxOwogCXBjaWJpb3NfZGlzYWJsZV9pcnEgPSAmcGNpX3Zpc3dzX2Rpc2FibGVfaXJxOwogCkBAIC05MCw1ICs4Nyw2IEBACiAJcGNpX3NjYW5fYnVzX3dpdGhfc3lzZGF0YShwY2lfYnVzMSk7CiAJcGNpX2ZpeHVwX2lycXMocGNpX2NvbW1vbl9zd2l6emxlLCB2aXN3c19tYXBfaXJxKTsKIAlwY2liaW9zX3Jlc291cmNlX3N1cnZleSgpOwotCXJldHVybiAwOworCS8qIFJlcXVlc3QgYnVzIHNjYW4gKi8KKwlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYyBiL2FyY2gveDg2L3hlbi9lbmxpZ2h0ZW4uYwppbmRleCAzNmRhY2NiLi5iNjA3MjM5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKKysrIGIvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jCkBAIC01MCw2ICs1MCw3IEBACiAjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3JlYm9vdC5oPgpAQCAtMTA5NCw2ICsxMDk1LDEyIEBACiAKIAlfX3N1cHBvcnRlZF9wdGVfbWFzayB8PSBfUEFHRV9JT01BUDsKIAorCS8qCisJICogUHJldmVudCBwYWdlIHRhYmxlcyBmcm9tIGJlaW5nIGFsbG9jYXRlZCBpbiBoaWdobWVtLCBldmVuCisJICogaWYgQ09ORklHX0hJR0hQVEUgaXMgZW5hYmxlZC4KKwkgKi8KKwlfX3VzZXJwdGVfYWxsb2NfZ2ZwICY9IH5fX0dGUF9ISUdITUVNOworCiAJLyogV29yayBvdXQgaWYgd2Ugc3VwcG9ydCBOWCAqLwogCXg4Nl9jb25maWd1cmVfbngoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL21tdS5jIGIvYXJjaC94ODYveGVuL21tdS5jCmluZGV4IGJmNGNkNmIuLmY5ZWI3ZGUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9tbXUuYworKysgYi9hcmNoL3g4Ni94ZW4vbW11LmMKQEAgLTE0MjcsMjMgKzE0MjcsNiBAQAogI2VuZGlmCiB9CiAKLSNpZmRlZiBDT05GSUdfSElHSFBURQotc3RhdGljIHZvaWQgKnhlbl9rbWFwX2F0b21pY19wdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIGVudW0ga21fdHlwZSB0eXBlKQotewotCXBncHJvdF90IHByb3QgPSBQQUdFX0tFUk5FTDsKLQotCWlmIChQYWdlUGlubmVkKHBhZ2UpKQotCQlwcm90ID0gUEFHRV9LRVJORUxfUk87Ci0KLQlpZiAoMCAmJiBQYWdlSGlnaE1lbShwYWdlKSkKLQkJcHJpbnRrKCJtYXBwaW5nIGhpZ2hwdGUgJWx4IHR5cGUgJWQgcHJvdCAlc1xuIiwKLQkJICAgICAgIHBhZ2VfdG9fcGZuKHBhZ2UpLCB0eXBlLAotCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcGdwcm90X3ZhbChwcm90KSAmIF9QQUdFX1JXID8gIldSSVRFIiA6ICJSRUFEIik7Ci0KLQlyZXR1cm4ga21hcF9hdG9taWNfcHJvdChwYWdlLCB0eXBlLCBwcm90KTsKLX0KLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogc3RhdGljIF9faW5pdCBwdGVfdCBtYXNrX3J3X3B0ZShwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQogewpAQCAtMTkwMiwxMCArMTg4NSw2IEBACiAJLmFsbG9jX3BtZF9jbG9uZSA9IHBhcmF2aXJ0X25vcCwKIAkucmVsZWFzZV9wbWQgPSB4ZW5fcmVsZWFzZV9wbWRfaW5pdCwKIAotI2lmZGVmIENPTkZJR19ISUdIUFRFCi0JLmttYXBfYXRvbWljX3B0ZSA9IHhlbl9rbWFwX2F0b21pY19wdGUsCi0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19YODZfNjQKIAkuc2V0X3B0ZSA9IHhlbl9zZXRfcHRlLAogI2Vsc2UKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9zbXAuYyBiL2FyY2gveDg2L3hlbi9zbXAuYwppbmRleCA1NjNkMjA1Li5kZWFmYjY1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vc21wLmMKKysrIGIvYXJjaC94ODYveGVuL3NtcC5jCkBAIC0zNjEsNyArMzYxLDcgQEAKIAkJYWx0ZXJuYXRpdmVzX3NtcF9zd2l0Y2goMCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCB4ZW5fcGxheV9kZWFkKHZvaWQpIC8qIHVzZWQgb25seSB3aXRoIENQVV9IT1RQTFVHICovCitzdGF0aWMgdm9pZCBfX2NwdWluaXQgeGVuX3BsYXlfZGVhZCh2b2lkKSAvKiB1c2VkIG9ubHkgd2l0aCBIT1RQTFVHX0NQVSAqLwogewogCXBsYXlfZGVhZF9jb21tb24oKTsKIAlIWVBFUlZJU09SX3ZjcHVfb3AoVkNQVU9QX2Rvd24sIHNtcF9wcm9jZXNzb3JfaWQoKSwgTlVMTCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4veGVuLWFzbV8zMi5TIGIvYXJjaC94ODYveGVuL3hlbi1hc21fMzIuUwppbmRleCA4OGUxNWRlLi4yMmEyMDkzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4veGVuLWFzbV8zMi5TCisrKyBiL2FyY2gveDg2L3hlbi94ZW4tYXNtXzMyLlMKQEAgLTkwLDkgKzkwLDkgQEAKIAlHRVRfVEhSRUFEX0lORk8oJWVheCkKIAltb3ZsIFRJX2NwdSglZWF4KSwgJWVheAogCW1vdmwgX19wZXJfY3B1X29mZnNldCgsJWVheCw0KSwgJWVheAotCW1vdiBwZXJfY3B1X194ZW5fdmNwdSglZWF4KSwgJWVheAorCW1vdiB4ZW5fdmNwdSglZWF4KSwgJWVheAogI2Vsc2UKLQltb3ZsIHBlcl9jcHVfX3hlbl92Y3B1LCAlZWF4CisJbW92bCB4ZW5fdmNwdSwgJWVheAogI2VuZGlmCiAKIAkvKiBjaGVjayBJRiBzdGF0ZSB3ZSdyZSByZXN0b3JpbmcgKi8KZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3BjaS5oIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGNpLmgKaW5kZXggNjY0MTBhYy4uNDYwOWIwZiAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGNpLmgKKysrIGIvYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vcGNpLmgKQEAgLTU2LDE0ICs1Niw2IEBACiAKICNkZWZpbmUgUENJX0RNQV9CVVNfSVNfUEhZUwkoMSkKIAotLyogcGNpX3VubWFwX3twYWdlLHNpbmdsZX0gaXMgYSBuby1vcCwgc28gKi8KLSNkZWZpbmUgREVDTEFSRV9QQ0lfVU5NQVBfQUREUihBRERSX05BTUUpCi0jZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpCQkoMCkKLSNkZWZpbmUgcGNpX3VubWFwX2FkZHJfc2V0KFBUUiwgQUREUl9OQU1FLCBWQUwpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcGNpX3Vibm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkJCSgwKQotI2RlZmluZSBwY2lfdW5tYXBfbGVuX3NldChQVFIsIExFTl9OQU1FLCBWQUwpCWRvIHsgfSB3aGlsZSAoMCkKLQogLyogTWFwIGEgcmFuZ2Ugb2YgUENJIG1lbW9yeSBvciBJL08gc3BhY2UgZm9yIGEgZGV2aWNlIGludG8gdXNlciBzcGFjZSAqLwogaW50IHBjaV9tbWFwX3BhZ2VfcmFuZ2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogICAgICAgICAgICAgICAgICAgICAgICAgZW51bSBwY2lfbW1hcF9zdGF0ZSBtbWFwX3N0YXRlLCBpbnQgd3JpdGVfY29tYmluZSk7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9pbmNsdWRlL2FzbS9wdHJhY2UuaCBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3B0cmFjZS5oCmluZGV4IDkwNWUxZTYuLjNjNTQ5ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3B0cmFjZS5oCisrKyBiL2FyY2gveHRlbnNhL2luY2x1ZGUvYXNtL3B0cmFjZS5oCkBAIC0xMTMsNiArMTEzLDcgQEAKIAogI2luY2x1ZGUgPHZhcmlhbnQvY29yZS5oPgogCisjIGRlZmluZSBhcmNoX2hhc19zaW5nbGVfc3RlcCgpCSgxKQogIyBkZWZpbmUgdGFza19wdF9yZWdzKHRzaykgKChzdHJ1Y3QgcHRfcmVncyopIFwKICAgKHRhc2tfc3RhY2tfcGFnZSh0c2spICsgS0VSTkVMX1NUQUNLX1NJWkUgLSAoWENIQUxfTlVNX0FSRUdTLTE2KSo0KSAtIDEpCiAjIGRlZmluZSB1c2VyX21vZGUocmVncykgKCgocmVncyktPnBzICYgMHgwMDAwMDAyMCkhPTApCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvZW50cnkuUyBiL2FyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TCmluZGV4IDgwZDI0YzQuLjc3ZmM5ZjYgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9lbnRyeS5TCkBAIC0xMDQsNyArMTA0LDcgQEAKICAqICAgZXhjc2F2ZSBoYXMgYmVlbiByZXN0b3JlZCwgYW5kCiAgKiAgIHN0YWNrIHBvaW50ZXIgKGExKSBoYXMgYmVlbiBzZXQuCiAgKgotICogTm90ZTogX3VzZXJfZXhjZXB0aW9uIG1pZ2h0IGJlIGF0IGFuIG9kZCBhZHJlc3MuIERvbid0IHVzZSBjYWxsMC4uY2FsbDEyCisgKiBOb3RlOiBfdXNlcl9leGNlcHRpb24gbWlnaHQgYmUgYXQgYW4gb2RkIGFkZHJlc3MuIERvbid0IHVzZSBjYWxsMC4uY2FsbDEyCiAgKi8KIAogRU5UUlkodXNlcl9leGNlcHRpb24pCkBAIC0yNDQsNyArMjQ0LDcgQEAKICAqICAgZXhjc2F2ZSBoYXMgYmVlbiByZXN0b3JlZCwgYW5kCiAgKiAgIHN0YWNrIHBvaW50ZXIgKGExKSBoYXMgYmVlbiBzZXQuCiAgKgotICogTm90ZTogX2tlcm5lbF9leGNlcHRpb24gbWlnaHQgYmUgYXQgYW4gb2RkIGFkcmVzcy4gRG9uJ3QgdXNlIGNhbGwwLi5jYWxsMTIKKyAqIE5vdGU6IF9rZXJuZWxfZXhjZXB0aW9uIG1pZ2h0IGJlIGF0IGFuIG9kZCBhZGRyZXNzLiBEb24ndCB1c2UgY2FsbDAuLmNhbGwxMgogICovCiAKIEVOVFJZKGtlcm5lbF9leGNlcHRpb24pCmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvcHRyYWNlLmMKaW5kZXggOTQ4Njg4Mi4uOWQ0ZTFjZSAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3B0cmFjZS5jCisrKyBiL2FyY2gveHRlbnNhL2tlcm5lbC9wdHJhY2UuYwpAQCAtMzAsNiArMzAsMTcgQEAKICNpbmNsdWRlIDxhc20vZWxmLmg+CiAjaW5jbHVkZSA8YXNtL2NvcHJvY2Vzc29yLmg+CiAKKwordm9pZCB1c2VyX2VuYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNoaWxkKQoreworCWNoaWxkLT5wdHJhY2UgfD0gUFRfU0lOR0xFU1RFUDsKK30KKwordm9pZCB1c2VyX2Rpc2FibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKK3sKKwljaGlsZC0+cHRyYWNlICY9IH5QVF9TSU5HTEVTVEVQOworfQorCiAvKgogICogQ2FsbGVkIGJ5IGtlcm5lbC9wdHJhY2UuYyB3aGVuIGRldGFjaGluZyB0byBkaXNhYmxlIHNpbmdsZSBzdGVwcGluZy4KICAqLwpAQCAtMjY4LDUxICsyNzksNiBAQAogCQlyZXQgPSBwdHJhY2VfcG9rZXVzcihjaGlsZCwgYWRkciwgZGF0YSk7CiAJCWJyZWFrOwogCi0JLyogY29udGludWUgYW5kIHN0b3AgYXQgbmV4dCAocmV0dXJuIGZyb20pIHN5c2NhbGwgKi8KLQotCWNhc2UgUFRSQUNFX1NZU0NBTEw6Ci0JY2FzZSBQVFJBQ0VfQ09OVDogLyogcmVzdGFydCBhZnRlciBzaWduYWwuICovCi0JewotCQlyZXQgPSAtRUlPOwotCQlpZiAoIXZhbGlkX3NpZ25hbChkYXRhKSkKLQkJCWJyZWFrOwotCQlpZiAocmVxdWVzdCA9PSBQVFJBQ0VfU1lTQ0FMTCkKLQkJCXNldF90c2tfdGhyZWFkX2ZsYWcoY2hpbGQsIFRJRl9TWVNDQUxMX1RSQUNFKTsKLQkJZWxzZQotCQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7Ci0JCWNoaWxkLT5leGl0X2NvZGUgPSBkYXRhOwotCQkvKiBNYWtlIHN1cmUgdGhlIHNpbmdsZSBzdGVwIGJpdCBpcyBub3Qgc2V0LiAqLwotCQljaGlsZC0+cHRyYWNlICY9IH5QVF9TSU5HTEVTVEVQOwotCQl3YWtlX3VwX3Byb2Nlc3MoY2hpbGQpOwotCQlyZXQgPSAwOwotCQlicmVhazsKLQl9Ci0KLQkvKgotCSAqIG1ha2UgdGhlIGNoaWxkIGV4aXQuICBCZXN0IEkgY2FuIGRvIGlzIHNlbmQgaXQgYSBzaWdraWxsLgotCSAqIHBlcmhhcHMgaXQgc2hvdWxkIGJlIHB1dCBpbiB0aGUgc3RhdHVzIHRoYXQgaXQgd2FudHMgdG8KLQkgKiBleGl0LgotCSAqLwotCWNhc2UgUFRSQUNFX0tJTEw6Ci0JCXJldCA9IDA7Ci0JCWlmIChjaGlsZC0+ZXhpdF9zdGF0ZSA9PSBFWElUX1pPTUJJRSkJLyogYWxyZWFkeSBkZWFkICovCi0JCQlicmVhazsKLQkJY2hpbGQtPmV4aXRfY29kZSA9IFNJR0tJTEw7Ci0JCWNoaWxkLT5wdHJhY2UgJj0gflBUX1NJTkdMRVNURVA7Ci0JCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBQVFJBQ0VfU0lOR0xFU1RFUDoKLQkJcmV0ID0gLUVJTzsKLQkJaWYgKCF2YWxpZF9zaWduYWwoZGF0YSkpCi0JCQlicmVhazsKLQkJY2xlYXJfdHNrX3RocmVhZF9mbGFnKGNoaWxkLCBUSUZfU1lTQ0FMTF9UUkFDRSk7Ci0JCWNoaWxkLT5wdHJhY2UgfD0gUFRfU0lOR0xFU1RFUDsKLQkJY2hpbGQtPmV4aXRfY29kZSA9IGRhdGE7Ci0JCXdha2VfdXBfcHJvY2VzcyhjaGlsZCk7Ci0JCXJldCA9IDA7Ci0JCWJyZWFrOwotCiAJY2FzZSBQVFJBQ0VfR0VUUkVHUzoKIAkJcmV0ID0gcHRyYWNlX2dldHJlZ3MoY2hpbGQsICh2b2lkIF9fdXNlciAqKSBkYXRhKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybXMvaXNzL25ldHdvcmsuYyBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9pc3MvbmV0d29yay5jCmluZGV4IDJmMGI4NmIuLjg3ZTIxOGYgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9pc3MvbmV0d29yay5jCisrKyBiL2FyY2gveHRlbnNhL3BsYXRmb3Jtcy9pc3MvbmV0d29yay5jCkBAIC01NjAsNyArNTYwLDcgQEAKICNpZiAwCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKIAkJcmV0dXJuOwotCWVsc2UgaWYgKGRldi0+bWNfY291bnQpCisJZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKQogCQlkZXYtPmZsYWdzIHw9IElGRl9BTExNVUxUSTsKIAllbHNlCiAJCWRldi0+ZmxhZ3MgJj0gfklGRl9BTExNVUxUSTsKZGlmZiAtLWdpdCBhL2Jsb2NrL0tjb25maWcgYi9ibG9jay9LY29uZmlnCmluZGV4IGUyMGZiZGUuLjYyYTU5MjEgMTAwNjQ0Ci0tLSBhL2Jsb2NrL0tjb25maWcKKysrIGIvYmxvY2svS2NvbmZpZwpAQCAtNzgsNyArNzgsNyBAQAogCVByb3RlY3Rpb24uICBJZiBpbiBkb3VidCwgc2F5IE4uCiAKIGNvbmZpZyBCTEtfQ0dST1VQCi0JYm9vbAorCXRyaXN0YXRlCiAJZGVwZW5kcyBvbiBDR1JPVVBTCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvYmxvY2svS2NvbmZpZy5pb3NjaGVkIGIvYmxvY2svS2NvbmZpZy5pb3NjaGVkCmluZGV4IGI3MWFiZmIuLmZjNzFjZjA3IDEwMDY0NAotLS0gYS9ibG9jay9LY29uZmlnLmlvc2NoZWQKKysrIGIvYmxvY2svS2NvbmZpZy5pb3NjaGVkCkBAIC0yMyw2ICsyMyw3IEBACiAKIGNvbmZpZyBJT1NDSEVEX0NGUQogCXRyaXN0YXRlICJDRlEgSS9PIHNjaGVkdWxlciIKKwlzZWxlY3QgQkxLX0NHUk9VUCBpZiBDRlFfR1JPVVBfSU9TQ0hFRAogCWRlZmF1bHQgeQogCS0tLWhlbHAtLS0KIAkgIFRoZSBDRlEgSS9PIHNjaGVkdWxlciB0cmllcyB0byBkaXN0cmlidXRlIGJhbmR3aWR0aCBlcXVhbGx5CkBAIC0zNSw3ICszNiw2IEBACiBjb25maWcgQ0ZRX0dST1VQX0lPU0NIRUQKIAlib29sICJDRlEgR3JvdXAgU2NoZWR1bGluZyBzdXBwb3J0IgogCWRlcGVuZHMgb24gSU9TQ0hFRF9DRlEgJiYgQ0dST1VQUwotCXNlbGVjdCBCTEtfQ0dST1VQCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgRW5hYmxlIGdyb3VwIElPIHNjaGVkdWxpbmcgaW4gQ0ZRLgpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrLWNncm91cC5jIGIvYmxvY2svYmxrLWNncm91cC5jCmluZGV4IGM4NWQ3NGMuLjRiNjg2YWQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2Jsay1jZ3JvdXAuYworKysgYi9ibG9jay9ibGstY2dyb3VwLmMKQEAgLTIzLDYgKzIzLDMxIEBACiBzdHJ1Y3QgYmxraW9fY2dyb3VwIGJsa2lvX3Jvb3RfY2dyb3VwID0geyAud2VpZ2h0ID0gMipCTEtJT19XRUlHSFRfREVGQVVMVCB9OwogRVhQT1JUX1NZTUJPTF9HUEwoYmxraW9fcm9vdF9jZ3JvdXApOwogCitzdGF0aWMgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmJsa2lvY2dfY3JlYXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICosCisJCQkJCQkgIHN0cnVjdCBjZ3JvdXAgKik7CitzdGF0aWMgaW50IGJsa2lvY2dfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqLCBzdHJ1Y3QgY2dyb3VwICosCisJCQkgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgYm9vbCk7CitzdGF0aWMgdm9pZCBibGtpb2NnX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqLCBzdHJ1Y3QgY2dyb3VwICosCisJCQkgICBzdHJ1Y3QgY2dyb3VwICosIHN0cnVjdCB0YXNrX3N0cnVjdCAqLCBib29sKTsKK3N0YXRpYyB2b2lkIGJsa2lvY2dfZGVzdHJveShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqLCBzdHJ1Y3QgY2dyb3VwICopOworc3RhdGljIGludCBibGtpb2NnX3BvcHVsYXRlKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICosIHN0cnVjdCBjZ3JvdXAgKik7CisKK3N0cnVjdCBjZ3JvdXBfc3Vic3lzIGJsa2lvX3N1YnN5cyA9IHsKKwkubmFtZSA9ICJibGtpbyIsCisJLmNyZWF0ZSA9IGJsa2lvY2dfY3JlYXRlLAorCS5jYW5fYXR0YWNoID0gYmxraW9jZ19jYW5fYXR0YWNoLAorCS5hdHRhY2ggPSBibGtpb2NnX2F0dGFjaCwKKwkuZGVzdHJveSA9IGJsa2lvY2dfZGVzdHJveSwKKwkucG9wdWxhdGUgPSBibGtpb2NnX3BvcHVsYXRlLAorI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQCisJLyogbm90ZTogYmxraW9fc3Vic3lzX2lkIGlzIG90aGVyd2lzZSBkZWZpbmVkIGluIGJsay1jZ3JvdXAuaCAqLworCS5zdWJzeXNfaWQgPSBibGtpb19zdWJzeXNfaWQsCisjZW5kaWYKKwkudXNlX2lkID0gMSwKKwkubW9kdWxlID0gVEhJU19NT0RVTEUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoYmxraW9fc3Vic3lzKTsKKwogc3RydWN0IGJsa2lvX2Nncm91cCAqY2dyb3VwX3RvX2Jsa2lvX2Nncm91cChzdHJ1Y3QgY2dyb3VwICpjZ3JvdXApCiB7CiAJcmV0dXJuIGNvbnRhaW5lcl9vZihjZ3JvdXBfc3Vic3lzX3N0YXRlKGNncm91cCwgYmxraW9fc3Vic3lzX2lkKSwKQEAgLTI1Myw3ICsyNzgsOCBAQAogZG9uZToKIAlmcmVlX2Nzc19pZCgmYmxraW9fc3Vic3lzLCAmYmxrY2ctPmNzcyk7CiAJcmN1X3JlYWRfdW5sb2NrKCk7Ci0Ja2ZyZWUoYmxrY2cpOworCWlmIChibGtjZyAhPSAmYmxraW9fcm9vdF9jZ3JvdXApCisJCWtmcmVlKGJsa2NnKTsKIH0KIAogc3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICoKQEAgLTMxOSwxNyArMzQ1LDYgQEAKIAl0YXNrX3VubG9jayh0c2spOwogfQogCi1zdHJ1Y3QgY2dyb3VwX3N1YnN5cyBibGtpb19zdWJzeXMgPSB7Ci0JLm5hbWUgPSAiYmxraW8iLAotCS5jcmVhdGUgPSBibGtpb2NnX2NyZWF0ZSwKLQkuY2FuX2F0dGFjaCA9IGJsa2lvY2dfY2FuX2F0dGFjaCwKLQkuYXR0YWNoID0gYmxraW9jZ19hdHRhY2gsCi0JLmRlc3Ryb3kgPSBibGtpb2NnX2Rlc3Ryb3ksCi0JLnBvcHVsYXRlID0gYmxraW9jZ19wb3B1bGF0ZSwKLQkuc3Vic3lzX2lkID0gYmxraW9fc3Vic3lzX2lkLAotCS51c2VfaWQgPSAxLAotfTsKLQogdm9pZCBibGtpb19wb2xpY3lfcmVnaXN0ZXIoc3RydWN0IGJsa2lvX3BvbGljeV90eXBlICpibGtpb3ApCiB7CiAJc3Bpbl9sb2NrKCZibGtpb19saXN0X2xvY2spOwpAQCAtMzQ1LDMgKzM2MCwxNyBAQAogCXNwaW5fdW5sb2NrKCZibGtpb19saXN0X2xvY2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoYmxraW9fcG9saWN5X3VucmVnaXN0ZXIpOworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X2Nncm91cF9ibGtpbyh2b2lkKQoreworCXJldHVybiBjZ3JvdXBfbG9hZF9zdWJzeXMoJmJsa2lvX3N1YnN5cyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2Nncm91cF9ibGtpbyh2b2lkKQoreworCWNncm91cF91bmxvYWRfc3Vic3lzKCZibGtpb19zdWJzeXMpOworfQorCittb2R1bGVfaW5pdChpbml0X2Nncm91cF9ibGtpbyk7Cittb2R1bGVfZXhpdChleGl0X2Nncm91cF9ibGtpbyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9ibG9jay9ibGstY2dyb3VwLmggYi9ibG9jay9ibGstY2dyb3VwLmgKaW5kZXggODRiZjc0NS4uOGNjYzIwNCAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWNncm91cC5oCisrKyBiL2Jsb2NrL2Jsay1jZ3JvdXAuaApAQCAtMTUsNyArMTUsMTMgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPgogCi0jaWZkZWYgQ09ORklHX0JMS19DR1JPVVAKKyNpZiBkZWZpbmVkKENPTkZJR19CTEtfQ0dST1VQKSB8fCBkZWZpbmVkKENPTkZJR19CTEtfQ0dST1VQX01PRFVMRSkKKworI2lmbmRlZiBDT05GSUdfQkxLX0NHUk9VUAorLyogV2hlbiBibGstY2dyb3VwIGlzIGEgbW9kdWxlLCBpdHMgc3Vic3lzX2lkIGlzbid0IGEgY29tcGlsZS10aW1lIGNvbnN0YW50ICovCitleHRlcm4gc3RydWN0IGNncm91cF9zdWJzeXMgYmxraW9fc3Vic3lzOworI2RlZmluZSBibGtpb19zdWJzeXNfaWQgYmxraW9fc3Vic3lzLnN1YnN5c19pZAorI2VuZGlmCiAKIHN0cnVjdCBibGtpb19jZ3JvdXAgewogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlIGNzczsKQEAgLTkxLDcgKzk3LDcgQEAKIAkJCXN0cnVjdCBibGtpb19ncm91cCAqYmxrZywgdW5zaWduZWQgbG9uZyBkZXF1ZXVlKSB7fQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQkxLX0NHUk9VUAorI2lmIGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVApIHx8IGRlZmluZWQoQ09ORklHX0JMS19DR1JPVVBfTU9EVUxFKQogZXh0ZXJuIHN0cnVjdCBibGtpb19jZ3JvdXAgYmxraW9fcm9vdF9jZ3JvdXA7CiBleHRlcm4gc3RydWN0IGJsa2lvX2Nncm91cCAqY2dyb3VwX3RvX2Jsa2lvX2Nncm91cChzdHJ1Y3QgY2dyb3VwICpjZ3JvdXApOwogZXh0ZXJuIHZvaWQgYmxraW9jZ19hZGRfYmxraW9fZ3JvdXAoc3RydWN0IGJsa2lvX2Nncm91cCAqYmxrY2csCmRpZmYgLS1naXQgYS9ibG9jay9ibGstaW50ZWdyaXR5LmMgYi9ibG9jay9ibGstaW50ZWdyaXR5LmMKaW5kZXggMTVjNjMwOC4uOTZlODNjMiAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLWludGVncml0eS5jCisrKyBiL2Jsb2NrL2Jsay1pbnRlZ3JpdHkuYwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJTlVMTCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIGludGVncml0eV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBpbnRlZ3JpdHlfb3BzID0gewogCS5zaG93CT0gJmludGVncml0eV9hdHRyX3Nob3csCiAJLnN0b3JlCT0gJmludGVncml0eV9hdHRyX3N0b3JlLAogfTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2Jsay1zeXNmcy5jIGIvYmxvY2svYmxrLXN5c2ZzLmMKaW5kZXggZTg1NDQyNC4uMmFlMmNiMyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrLXN5c2ZzLmMKKysrIGIvYmxvY2svYmxrLXN5c2ZzLmMKQEAgLTQ1MCw3ICs0NTAsNyBAQAogCWttZW1fY2FjaGVfZnJlZShibGtfcmVxdWVzdHFfY2FjaGVwLCBxKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgcXVldWVfc3lzZnNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgcXVldWVfc3lzZnNfb3BzID0gewogCS5zaG93CT0gcXVldWVfYXR0cl9zaG93LAogCS5zdG9yZQk9IHF1ZXVlX2F0dHJfc3RvcmUsCiB9OwpkaWZmIC0tZ2l0IGEvYmxvY2svYnNnLmMgYi9ibG9jay9ic2cuYwppbmRleCBhOWZkMmQ4Li40NjU5N2E2IDEwMDY0NAotLS0gYS9ibG9jay9ic2cuYworKysgYi9ibG9jay9ic2cuYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJCXJldHVybiBFUlJfUFRSKHJldCk7CiAKIAkvKgotCSAqIG1hcCBzY2F0dGVyLWdhdGhlciBlbGVtZW50cyBzZXBlcmF0ZWx5IGFuZCBzdHJpbmcgdGhlbSB0byByZXF1ZXN0CisJICogbWFwIHNjYXR0ZXItZ2F0aGVyIGVsZW1lbnRzIHNlcGFyYXRlbHkgYW5kIHN0cmluZyB0aGVtIHRvIHJlcXVlc3QKIAkgKi8KIAlycSA9IGJsa19nZXRfcmVxdWVzdChxLCBydywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFycSkKZGlmZiAtLWdpdCBhL2Jsb2NrL2VsZXZhdG9yLmMgYi9ibG9jay9lbGV2YXRvci5jCmluZGV4IGVlM2E4ODMuLmRmNzU2NzYgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2VsZXZhdG9yLmMKKysrIGIvYmxvY2svZWxldmF0b3IuYwpAQCAtODkyLDcgKzg5Miw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBlbHZfc3lzZnNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgZWx2X3N5c2ZzX29wcyA9IHsKIAkuc2hvdwk9IGVsdl9hdHRyX3Nob3csCiAJLnN0b3JlCT0gZWx2X2F0dHJfc3RvcmUsCiB9OwpkaWZmIC0tZ2l0IGEvY3J5cHRvL0tjb25maWcgYi9jcnlwdG8vS2NvbmZpZwppbmRleCA2YTJlMjk1Li40MDM4NTdhIDEwMDY0NAotLS0gYS9jcnlwdG8vS2NvbmZpZworKysgYi9jcnlwdG8vS2NvbmZpZwpAQCAtODI2LDggKzgyNiw4IEBACiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgZ2VuZXJpYyBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKIAkgIGZvciBjcnlwdG9ncmFwaGljIG1vZHVsZXMuICBVc2VzIHRoZSBBbGdvcml0aG0gc3BlY2lmaWVkIGluCi0JICBBTlNJIFg5LjMxIEEuMi40LiBOb3QgdGhpcyBvcHRpb24gbXVzdCBiZSBlbmFibGVkIGlmIENSWVBUT19GSVBTIAotCSAgaXMgc2VsZWN0ZWQKKwkgIEFOU0kgWDkuMzEgQS4yLjQuIE5vdGUgdGhhdCB0aGlzIG9wdGlvbiBtdXN0IGJlIGVuYWJsZWQgaWYKKwkgIENSWVBUT19GSVBTIGlzIHNlbGVjdGVkCiAKIHNvdXJjZSAiZHJpdmVycy9jcnlwdG8vS2NvbmZpZyIKIApkaWZmIC0tZ2l0IGEvY3J5cHRvL2FoYXNoLmMgYi9jcnlwdG8vYWhhc2guYwppbmRleCAzM2E0ZmY0Li5iOGM1OWI4IDEwMDY0NAotLS0gYS9jcnlwdG8vYWhhc2guYworKysgYi9jcnlwdG8vYWhhc2guYwpAQCAtNzgsNyArNzgsNiBAQAogCXdhbGstPmRhdGEgLT0gd2Fsay0+b2Zmc2V0OwogCiAJaWYgKG5ieXRlcyAmJiB3YWxrLT5vZmZzZXQgJiBhbGlnbm1hc2sgJiYgIWVycikgewotCQl3YWxrLT5vZmZzZXQgKz0gYWxpZ25tYXNrIC0gMTsKIAkJd2Fsay0+b2Zmc2V0ID0gQUxJR04od2Fsay0+b2Zmc2V0LCBhbGlnbm1hc2sgKyAxKTsKIAkJd2Fsay0+ZGF0YSArPSB3YWxrLT5vZmZzZXQ7CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9hdXRoZW5jLmMgYi9jcnlwdG8vYXV0aGVuYy5jCmluZGV4IDE4ODcwOTAuLjJiYjczNDggMTAwNjQ0Ci0tLSBhL2NyeXB0by9hdXRoZW5jLmMKKysrIGIvY3J5cHRvL2F1dGhlbmMuYwpAQCAtMzg2LDExICszODYsMTMgQEAKIHsKIAlzdHJ1Y3QgY3J5cHRvX2FlYWQgKmF1dGhlbmMgPSBjcnlwdG9fYWVhZF9yZXF0Zm0ocmVxKTsKIAlzdHJ1Y3QgY3J5cHRvX2F1dGhlbmNfY3R4ICpjdHggPSBjcnlwdG9fYWVhZF9jdHgoYXV0aGVuYyk7Ci0Jc3RydWN0IGFibGtjaXBoZXJfcmVxdWVzdCAqYWJyZXEgPSBhZWFkX3JlcXVlc3RfY3R4KHJlcSk7CisJc3RydWN0IGF1dGhlbmNfcmVxdWVzdF9jdHggKmFyZXFfY3R4ID0gYWVhZF9yZXF1ZXN0X2N0eChyZXEpOwogCXN0cnVjdCBjcnlwdG9fYWJsa2NpcGhlciAqZW5jID0gY3R4LT5lbmM7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpkc3QgPSByZXEtPmRzdDsKIAl1bnNpZ25lZCBpbnQgY3J5cHRsZW4gPSByZXEtPmNyeXB0bGVuOwotCXU4ICppdiA9ICh1OCAqKShhYnJlcSArIDEpICsgY3J5cHRvX2FibGtjaXBoZXJfcmVxc2l6ZShlbmMpOworCXN0cnVjdCBhYmxrY2lwaGVyX3JlcXVlc3QgKmFicmVxID0gKHZvaWQgKikoYXJlcV9jdHgtPnRhaWwKKwkJCQkJCSAgICArIGN0eC0+cmVxb2ZmKTsKKwl1OCAqaXYgPSAodTggKilhYnJlcSAtIGNyeXB0b19hYmxrY2lwaGVyX2l2c2l6ZShlbmMpOwogCWludCBlcnI7CiAKIAlhYmxrY2lwaGVyX3JlcXVlc3Rfc2V0X3RmbShhYnJlcSwgZW5jKTsKQEAgLTQ1NCw3ICs0NTYsNyBAQAogCXVuc2lnbmVkIGludCBhdXRoc2l6ZTsKIAogCWFyZXFfY3R4LT5jb21wbGV0ZSA9IGF1dGhlbmNfdmVyaWZ5X2FoYXNoX2RvbmU7Ci0JYXJlcV9jdHgtPmNvbXBsZXRlID0gYXV0aGVuY192ZXJpZnlfYWhhc2hfdXBkYXRlX2RvbmU7CisJYXJlcV9jdHgtPnVwZGF0ZV9jb21wbGV0ZSA9IGF1dGhlbmNfdmVyaWZ5X2FoYXNoX3VwZGF0ZV9kb25lOwogCiAJb2hhc2ggPSBhdXRoZW5jX2FoYXNoX2ZuKHJlcSwgQ1JZUFRPX1RGTV9SRVFfTUFZX1NMRUVQKTsKIAlpZiAoSVNfRVJSKG9oYXNoKSkKQEAgLTU0NiwxMCArNTQ4LDYgQEAKIAlpZiAoSVNfRVJSKGF1dGgpKQogCQlyZXR1cm4gUFRSX0VSUihhdXRoKTsKIAotCWN0eC0+cmVxb2ZmID0gQUxJR04oMiAqIGNyeXB0b19haGFzaF9kaWdlc3RzaXplKGF1dGgpICsKLQkJCSAgICBjcnlwdG9fYWhhc2hfYWxpZ25tYXNrKGF1dGgpLAotCQkJICAgIGNyeXB0b19haGFzaF9hbGlnbm1hc2soYXV0aCkgKyAxKTsKLQogCWVuYyA9IGNyeXB0b19zcGF3bl9za2NpcGhlcigmaWN0eC0+ZW5jKTsKIAllcnIgPSBQVFJfRVJSKGVuYyk7CiAJaWYgKElTX0VSUihlbmMpKQpAQCAtNTU4LDEzICs1NTYsMTggQEAKIAljdHgtPmF1dGggPSBhdXRoOwogCWN0eC0+ZW5jID0gZW5jOwogCi0JdGZtLT5jcnRfYWVhZC5yZXFzaXplID0gbWF4X3QodW5zaWduZWQgaW50LAotCQkJCWNyeXB0b19haGFzaF9yZXFzaXplKGF1dGgpICsgY3R4LT5yZXFvZmYgKwotCQkJCXNpemVvZihzdHJ1Y3QgYXV0aGVuY19yZXF1ZXN0X2N0eCkgKworCWN0eC0+cmVxb2ZmID0gQUxJR04oMiAqIGNyeXB0b19haGFzaF9kaWdlc3RzaXplKGF1dGgpICsKKwkJCSAgICBjcnlwdG9fYWhhc2hfYWxpZ25tYXNrKGF1dGgpLAorCQkJICAgIGNyeXB0b19haGFzaF9hbGlnbm1hc2soYXV0aCkgKyAxKSArCisJCSAgICAgIGNyeXB0b19hYmxrY2lwaGVyX2l2c2l6ZShlbmMpOworCisJdGZtLT5jcnRfYWVhZC5yZXFzaXplID0gc2l6ZW9mKHN0cnVjdCBhdXRoZW5jX3JlcXVlc3RfY3R4KSArCisJCQkJY3R4LT5yZXFvZmYgKworCQkJCW1heF90KHVuc2lnbmVkIGludCwKKwkJCQljcnlwdG9fYWhhc2hfcmVxc2l6ZShhdXRoKSArCiAJCQkJc2l6ZW9mKHN0cnVjdCBhaGFzaF9yZXF1ZXN0KSwKIAkJCQlzaXplb2Yoc3RydWN0IHNrY2lwaGVyX2dpdmNyeXB0X3JlcXVlc3QpICsKLQkJCQljcnlwdG9fYWJsa2NpcGhlcl9yZXFzaXplKGVuYykgKwotCQkJCWNyeXB0b19hYmxrY2lwaGVyX2l2c2l6ZShlbmMpKTsKKwkJCQljcnlwdG9fYWJsa2NpcGhlcl9yZXFzaXplKGVuYykpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2NyeXB0by9jcnlwdGQuYyBiL2NyeXB0by9jcnlwdGQuYwppbmRleCA3MDRjMTQxLi5lZjcxMzE4IDEwMDY0NAotLS0gYS9jcnlwdG8vY3J5cHRkLmMKKysrIGIvY3J5cHRvL2NyeXB0ZC5jCkBAIC0zMSw3ICszMSw3IEBACiB9OwogCiBzdHJ1Y3QgY3J5cHRkX3F1ZXVlIHsKLQlzdHJ1Y3QgY3J5cHRkX2NwdV9xdWV1ZSAqY3B1X3F1ZXVlOworCXN0cnVjdCBjcnlwdGRfY3B1X3F1ZXVlIF9fcGVyY3B1ICpjcHVfcXVldWU7CiB9OwogCiBzdHJ1Y3QgY3J5cHRkX2luc3RhbmNlX2N0eCB7CmRpZmYgLS1naXQgYS9jcnlwdG8vbWQ1LmMgYi9jcnlwdG8vbWQ1LmMKaW5kZXggOWZkYTIxMy4uMzBlZmM3ZCAxMDA2NDQKLS0tIGEvY3J5cHRvL21kNS5jCisrKyBiL2NyeXB0by9tZDUuYwpAQCAtMjM0LDYgKzIzNCw3IEBACiAJLmV4cG9ydAkJPQltZDVfZXhwb3J0LAogCS5pbXBvcnQJCT0JbWQ1X2ltcG9ydCwKIAkuZGVzY3NpemUJPQlzaXplb2Yoc3RydWN0IG1kNV9zdGF0ZSksCisJLnN0YXRlc2l6ZQk9CXNpemVvZihzdHJ1Y3QgbWQ1X3N0YXRlKSwKIAkuYmFzZQkJPQl7CiAJCS5jcmFfbmFtZQk9CSJtZDUiLAogCQkuY3JhX2ZsYWdzCT0JQ1JZUFRPX0FMR19UWVBFX1NIQVNILApkaWZmIC0tZ2l0IGEvZHJpdmVycy9LY29uZmlnIGIvZHJpdmVycy9LY29uZmlnCmluZGV4IDM2OGFlNmQuLmEyYjkwMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvS2NvbmZpZworKysgYi9kcml2ZXJzL0tjb25maWcKQEAgLTk2LDggKzk2LDYgQEAKIAogc291cmNlICJkcml2ZXJzL3J0Yy9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvY2xvY2tzb3VyY2UvS2NvbmZpZyIKLQogc291cmNlICJkcml2ZXJzL2RtYS9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvZGNhL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL01ha2VmaWxlIGIvZHJpdmVycy9NYWtlZmlsZQppbmRleCA2ZWU1M2M3Li4zNGYxZTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvTWFrZWZpbGUKQEAgLTk5LDYgKzk5LDcgQEAKIG9iai15CQkJCSs9IGZpcm13YXJlLwogb2JqLSQoQ09ORklHX0NSWVBUTykJCSs9IGNyeXB0by8KIG9iai0kKENPTkZJR19TVVBFUkgpCQkrPSBzaC8KK29iai0kKENPTkZJR19BUkNIX1NITU9CSUxFKQkrPSBzaC8KIG9iai0kKENPTkZJR19HRU5FUklDX1RJTUUpCSs9IGNsb2Nrc291cmNlLwogb2JqLSQoQ09ORklHX0RNQV9FTkdJTkUpCSs9IGRtYS8KIG9iai0kKENPTkZJR19EQ0EpCQkrPSBkY2EvCkBAIC0xMDYsNiArMTA3LDcgQEAKIG9iai0kKENPTkZJR19QUENfUFMzKQkJKz0gcHMzLwogb2JqLSQoQ09ORklHX09GKQkJKz0gb2YvCiBvYmotJChDT05GSUdfU1NCKQkJKz0gc3NiLworb2JqLSQoQ09ORklHX1ZIT1NUX05FVCkJCSs9IHZob3N0Lwogb2JqLSQoQ09ORklHX1ZJUlRJTykJCSs9IHZpcnRpby8KIG9iai0kKENPTkZJR19WTFlOUSkJCSs9IHZseW5xLwogb2JqLSQoQ09ORklHX1NUQUdJTkcpCQkrPSBzdGFnaW5nLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2RvY2suYyBiL2RyaXZlcnMvYWNwaS9kb2NrLmMKaW5kZXggYjI1ODZmNS4uZDlhODVmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2RvY2suYworKysgYi9kcml2ZXJzL2FjcGkvZG9jay5jCkBAIC02MDUsNyArNjA1LDcgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvY2tfc3RhdGlvbiwgJmRvY2tfc3RhdGlvbnMsIHNpYmxpbmcpIHsKIAkJLyoKIAkJICogQW4gQVRBIGJheSBjYW4gYmUgaW4gYSBkb2NrIGFuZCBpdHNlbGYgY2FuIGJlIGVqZWN0ZWQKLQkJICogc2VwZXJhdGVseSwgc28gdGhlcmUgYXJlIHR3byAnZG9jayBzdGF0aW9ucycgd2hpY2ggbmVlZCB0aGUKKwkJICogc2VwYXJhdGVseSwgc28gdGhlcmUgYXJlIHR3byAnZG9jayBzdGF0aW9ucycgd2hpY2ggbmVlZCB0aGUKIAkJICogb3BzCiAJCSAqLwogCQlkZCA9IGZpbmRfZG9ja19kZXBlbmRlbnRfZGV2aWNlKGRvY2tfc3RhdGlvbiwgaGFuZGxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9udW1hLmMgYi9kcml2ZXJzL2FjcGkvbnVtYS5jCmluZGV4IDdhZDQ4ZGYuLmI4NzI1NDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9udW1hLmMKKysrIGIvZHJpdmVycy9hY3BpL251bWEuYwpAQCAtMjc5LDkgKzI3OSw5IEBACiAJLyogU1JBVDogU3RhdGljIFJlc291cmNlIEFmZmluaXR5IFRhYmxlICovCiAJaWYgKCFhY3BpX3RhYmxlX3BhcnNlKEFDUElfU0lHX1NSQVQsIGFjcGlfcGFyc2Vfc3JhdCkpIHsKIAkJYWNwaV90YWJsZV9wYXJzZV9zcmF0KEFDUElfU1JBVF9UWVBFX1gyQVBJQ19DUFVfQUZGSU5JVFksCi0JCQkJICAgICAgYWNwaV9wYXJzZV94MmFwaWNfYWZmaW5pdHksIE5SX0NQVVMpOworCQkJCSAgICAgYWNwaV9wYXJzZV94MmFwaWNfYWZmaW5pdHksIG5yX2NwdV9pZHMpOwogCQlhY3BpX3RhYmxlX3BhcnNlX3NyYXQoQUNQSV9TUkFUX1RZUEVfQ1BVX0FGRklOSVRZLAotCQkJCSAgICAgIGFjcGlfcGFyc2VfcHJvY2Vzc29yX2FmZmluaXR5LCBOUl9DUFVTKTsKKwkJCQkgICAgIGFjcGlfcGFyc2VfcHJvY2Vzc29yX2FmZmluaXR5LCBucl9jcHVfaWRzKTsKIAkJcmV0ID0gYWNwaV90YWJsZV9wYXJzZV9zcmF0KEFDUElfU1JBVF9UWVBFX01FTU9SWV9BRkZJTklUWSwKIAkJCQkJICAgIGFjcGlfcGFyc2VfbWVtb3J5X2FmZmluaXR5LAogCQkJCQkgICAgTlJfTk9ERV9NRU1CTEtTKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jLmMgYi9kcml2ZXJzL2FjcGkvcHJvYy5jCmluZGV4IGQwZDI1ZTIuLjFhYzY3OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2MuYwpAQCAtNDM1LDcgKzQzNSw3IEBACiAJCQkJZm91bmRfZGV2LT53YWtldXAuZ3BlX2RldmljZSkpIHsKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCQkJICAgICAgICJBQ1BJOiAnJXMnIGFuZCAnJXMnIGhhdmUgdGhlIHNhbWUgR1BFLCAiCi0JCQkJICAgICAgICJjYW4ndCBkaXNhYmxlL2VuYWJsZSBvbmUgc2VwZXJhdGVseVxuIiwKKwkJCQkgICAgICAgImNhbid0IGRpc2FibGUvZW5hYmxlIG9uZSBzZXBhcmF0ZWx5XG4iLAogCQkJCSAgICAgICBkZXYtPnBucC5idXNfaWQsIGZvdW5kX2Rldi0+cG5wLmJ1c19pZCk7CiAJCQkJZGV2LT53YWtldXAuc3RhdGUuZW5hYmxlZCA9CiAJCQkJICAgIGZvdW5kX2Rldi0+d2FrZXVwLnN0YXRlLmVuYWJsZWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2NvcmUuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCmluZGV4IDk4NjNjOTguLmU5YjdiNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jCkBAIC0xMjMsNiArMTIzLDggQEAKICNlbmRpZgogCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgYWNwaV9wcm9jZXNzb3IgKiwgcHJvY2Vzc29ycyk7CitFWFBPUlRfUEVSX0NQVV9TWU1CT0wocHJvY2Vzc29ycyk7CisKIHN0cnVjdCBhY3BpX3Byb2Nlc3Nvcl9lcnJhdGEgZXJyYXRhIF9fcmVhZF9tb3N0bHk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX3BlcmZsaWIuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCmluZGV4IGE5NTlmNmEuLmQ2NDhhOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfcGVyZmxpYi5jCkBAIC01NjEsNyArNTYxLDcgQEAKIH0KIAogaW50IGFjcGlfcHJvY2Vzc29yX3ByZXJlZ2lzdGVyX3BlcmZvcm1hbmNlKAotCQlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgKnBlcmZvcm1hbmNlKQorCQlzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UgX19wZXJjcHUgKnBlcmZvcm1hbmNlKQogewogCWludCBjb3VudCwgY291bnRfdGFyZ2V0OwogCWludCByZXR2YWwgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3N5c3RlbS5jIGIvZHJpdmVycy9hY3BpL3N5c3RlbS5jCmluZGV4IGEyMDZhMTIuLjc0M2YyNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zeXN0ZW0uYworKysgYi9kcml2ZXJzL2FjcGkvc3lzdGVtLmMKQEAgLTEwMSw2ICsxMDEsNyBAQAogCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqaGVhZGVyID0gTlVMTDsKIAlzdHJ1Y3QgYWNwaV90YWJsZV9hdHRyICphdHRyID0gTlVMTDsKIAorCXN5c2ZzX2F0dHJfaW5pdCgmdGFibGVfYXR0ci0+YXR0ci5hdHRyKTsKIAlpZiAodGFibGVfaGVhZGVyLT5zaWduYXR1cmVbMF0gIT0gJ1wwJykKIAkJbWVtY3B5KHRhYmxlX2F0dHItPm5hbWUsIHRhYmxlX2hlYWRlci0+c2lnbmF0dXJlLAogCQkJQUNQSV9OQU1FX1NJWkUpOwpAQCAtNDc1LDYgKzQ3Niw3IEBACiAJCQlnb3RvIGZhaWw7CiAJCXN0cm5jcHkobmFtZSwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSArIDEpOwogCisJCXN5c2ZzX2F0dHJfaW5pdCgmY291bnRlcl9hdHRyc1tpXS5hdHRyKTsKIAkJY291bnRlcl9hdHRyc1tpXS5hdHRyLm5hbWUgPSBuYW1lOwogCQljb3VudGVyX2F0dHJzW2ldLmF0dHIubW9kZSA9IDA2NDQ7CiAJCWNvdW50ZXJfYXR0cnNbaV0uc2hvdyA9IGNvdW50ZXJfc2hvdzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCmluZGV4IDljNzdiMGQuLjRhMjg0MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwpAQCAtMjIzMiw3ICsyMjMyLDcgQEAKIAkJICogU29tZSBkcml2ZXMgd2VyZSB2ZXJ5IHNwZWNpZmljIGFib3V0IHRoYXQgZXhhY3Qgc2VxdWVuY2UuCiAJCSAqCiAJCSAqIE5vdGUgdGhhdCBBVEE0IHNheXMgbGJhIGlzIG1hbmRhdG9yeSBzbyB0aGUgc2Vjb25kIGNoZWNrCi0JCSAqIHNob3VkIG5ldmVyIHRyaWdnZXIuCisJCSAqIHNob3VsZCBuZXZlciB0cmlnZ2VyLgogCQkgKi8KIAkJaWYgKGF0YV9pZF9tYWpvcl92ZXJzaW9uKGlkKSA8IDQgfHwgIWF0YV9pZF9oYXNfbGJhKGlkKSkgewogCQkJZXJyX21hc2sgPSBhdGFfZGV2X2luaXRfcGFyYW1zKGRldiwgaWRbM10sIGlkWzZdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYwppbmRleCAwMjQ0MWZkNS4uNTYxZGVjMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYwpAQCAtMjI4Nyw3ICsyMjg3LDcgQEAKICAqCUBxYzogY29tbWFuZAogICoKICAqCURyYWluIHRoZSBGSUZPIGFuZCBkZXZpY2Ugb2YgYW55IHN0dWNrIGRhdGEgZm9sbG93aW5nIGEgY29tbWFuZAotICoJZmFpbGluZyB0byBjb21wbGV0ZS4gSW4gc29tZSBjYXNlcyB0aGlzIGlzIG5lY2Nlc3NhcnkgYmVmb3JlIGEKKyAqCWZhaWxpbmcgdG8gY29tcGxldGUuIEluIHNvbWUgY2FzZXMgdGhpcyBpcyBuZWNlc3NhcnkgYmVmb3JlIGEKICAqCXJlc2V0IHdpbGwgcmVjb3ZlciB0aGUgZGV2aWNlLgogICoKICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hY3BpLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2FjcGkuYwppbmRleCAyOTRmMzAyLi44ZTVlMTMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FjcGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FjcGkuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiAgKgogICoJQ2FsbGVkIHdoZW4gdGhlIGxpYmF0YSBsYXllciBpcyBhYm91dCB0byBpc3N1ZSBhIGNvbW1hbmQuIFdlIHdyYXAKICAqCXRoaXMgaW50ZXJmYWNlIHNvIHRoYXQgd2UgY2FuIGxvYWQgdGhlIGNvcnJlY3QgQVRBIHRpbWluZ3MgaWYKLSAqCW5lY2Nlc3NhcnkuCisgKgluZWNlc3NhcnkuCiAgKi8KIAogc3RhdGljIHVuc2lnbmVkIGludCBwYWNwaV9xY19pc3N1ZShzdHJ1Y3QgYXRhX3F1ZXVlZF9jbWQgKnFjKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDMuYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gzLmMKaW5kZXggYzg2YzcxNi4uNzI3YTgxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDMuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4My5jCkBAIC0xODAsNyArMTgwLDcgQEAKICAqCUBpZDogRW50cnkgaW4gbWF0Y2ggdGFibGUKICAqCiAgKglQZXJmb3JtIGJhc2ljIGluaXRpYWxpc2F0aW9uLiBXZSBzZXQgdGhlIGRldmljZSB1cCBzbyB3ZSBhY2Nlc3MgYWxsCi0gKglwb3J0cyB2aWEgQkFSNC4gVGhpcyBpcyBuZWNjZXNzYXJ5IHRvIHdvcmsgYXJvdW5kIGVycmF0YS4KKyAqCXBvcnRzIHZpYSBCQVI0LiBUaGlzIGlzIG5lY2Vzc2FyeSB0byB3b3JrIGFyb3VuZCBlcnJhdGEuCiAgKi8KIAogc3RhdGljIGludCBocHQzeDNfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jCmluZGV4IDM2MTAzNTMuLjE0N2RlMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiAgKglAcWM6IGNvbW1hbmQKICAqCiAgKglEcmFpbiB0aGUgRklGTyBhbmQgZGV2aWNlIG9mIGFueSBzdHVjayBkYXRhIGZvbGxvd2luZyBhIGNvbW1hbmQKLSAqCWZhaWxpbmcgdG8gY29tcGxldGUuIEluIHNvbWUgY2FzZXMgdGhpcyBpcyBuZWNjZXNzYXJ5IGJlZm9yZSBhCisgKglmYWlsaW5nIHRvIGNvbXBsZXRlLiBJbiBzb21lIGNhc2VzIHRoaXMgaXMgbmVjZXNzYXJ5IGJlZm9yZSBhCiAgKglyZXNldCB3aWxsIHJlY292ZXIgdGhlIGRldmljZS4KICAqCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMgYi9kcml2ZXJzL2F0bS9mb3JlMjAwZS5jCmluZGV4IGJjNTNmZWQuLmY3ZDZlYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL2ZvcmUyMDBlLmMKKysrIGIvZHJpdmVycy9hdG0vZm9yZTIwMGUuYwpAQCAtMjA2NCwxMiArMjA2NCwxMCBAQAogCXJldHVybiAtRUJVU1k7CiAgICAgfQogCQotICAgIHByaW50ayhGT1JFMjAwRSAiZGV2aWNlICVzLCByZXYuICVjLCBTL046ICVkLCBFU0k6ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLCAKKyAgICBwcmludGsoRk9SRTIwMEUgImRldmljZSAlcywgcmV2LiAlYywgUy9OOiAlZCwgRVNJOiAlcE1cbiIsCiAJICAgZm9yZTIwMGUtPm5hbWUsIAogCSAgIChwcm9tLT5od19yZXZpc2lvbiAmIDB4RkYpICsgJ0AnLCAgICAvKiBwcm9iYWJseSBtZWFuaW5nbGVzcyB3aXRoIFNCQSBib2FyZHMgKi8KLQkgICBwcm9tLT5zZXJpYWxfbnVtYmVyICYgMHhGRkZGLAotCSAgIHByb20tPm1hY19hZGRyWyAyIF0sIHByb20tPm1hY19hZGRyWyAzIF0sIHByb20tPm1hY19hZGRyWyA0IF0sCi0JICAgcHJvbS0+bWFjX2FkZHJbIDUgXSwgcHJvbS0+bWFjX2FkZHJbIDYgXSwgcHJvbS0+bWFjX2FkZHJbIDcgXSk7CisJICAgcHJvbS0+c2VyaWFsX251bWJlciAmIDB4RkZGRiwgJnByb20tPm1hY19hZGRyWzJdKTsKIAkKICAgICBmb3IgKGkgPSAwOyBpIDwgRVNJX0xFTjsgaSsrKSB7CiAJZm9yZTIwMGUtPmVzaVsgaSBdID0gZm9yZTIwMGUtPmF0bV9kZXYtPmVzaVsgaSBdID0gcHJvbS0+bWFjX2FkZHJbIGkgKyAyIF07CkBAIC0yODQ1LDEzICsyODQzLDEyIEBACiAJCSIgICBpbnRlcnJ1cHQgbGluZTpcdFx0JXNcbiIKIAkJIiAgIHBoeXNpY2FsIGJhc2UgYWRkcmVzczpcdDB4JXBcbiIKIAkJIiAgIHZpcnR1YWwgYmFzZSBhZGRyZXNzOlx0MHglcFxuIgotCQkiICAgZmFjdG9yeSBhZGRyZXNzIChFU0kpOlx0JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIKKwkJIiAgIGZhY3RvcnkgYWRkcmVzcyAoRVNJKTpcdCVwTVxuIgogCQkiICAgYm9hcmQgc2VyaWFsIG51bWJlcjpcdFx0JWRcblxuIiwKIAkJZm9yZTIwMGVfaXJxX2l0b2EoZm9yZTIwMGUtPmlycSksCiAJCSh2b2lkKilmb3JlMjAwZS0+cGh5c19iYXNlLAogCQlmb3JlMjAwZS0+dmlydF9iYXNlLAotCQlmb3JlMjAwZS0+ZXNpWzBdLCBmb3JlMjAwZS0+ZXNpWzFdLCBmb3JlMjAwZS0+ZXNpWzJdLAotCQlmb3JlMjAwZS0+ZXNpWzNdLCBmb3JlMjAwZS0+ZXNpWzRdLCBmb3JlMjAwZS0+ZXNpWzVdLAorCQlmb3JlMjAwZS0+ZXNpLAogCQlmb3JlMjAwZS0+ZXNpWzRdICogMjU2ICsgZm9yZTIwMGUtPmVzaVs1XSk7CiAKIAlyZXR1cm4gbGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vaWR0NzcyNTIuYyBiL2RyaXZlcnMvYXRtL2lkdDc3MjUyLmMKaW5kZXggZTMzYWUwMC4uMDFmMzZjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vaWR0NzcyNTIuYworKysgYi9kcml2ZXJzL2F0bS9pZHQ3NzI1Mi5jCkBAIC0zNTU3LDEwICszNTU3LDcgQEAKIAlpZiAodG1wKSB7CiAJCW1lbWNweShjYXJkLT5hdG1kZXYtPmVzaSwgdG1wLT5kZXZfYWRkciwgNik7CiAKLQkJcHJpbnRrKCIlczogRVNJICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAotCQkgICAgICAgY2FyZC0+bmFtZSwgY2FyZC0+YXRtZGV2LT5lc2lbMF0sIGNhcmQtPmF0bWRldi0+ZXNpWzFdLAotCQkgICAgICAgY2FyZC0+YXRtZGV2LT5lc2lbMl0sIGNhcmQtPmF0bWRldi0+ZXNpWzNdLAotCQkgICAgICAgY2FyZC0+YXRtZGV2LT5lc2lbNF0sIGNhcmQtPmF0bWRldi0+ZXNpWzVdKTsKKwkJcHJpbnRrKCIlczogRVNJICVwTVxuIiwgY2FyZC0+bmFtZSwgY2FyZC0+YXRtZGV2LT5lc2kpOwogCX0KIAkvKgogCSAqIFhYWDogPC9oYWNrPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vbGFuYWkuYyBiL2RyaXZlcnMvYXRtL2xhbmFpLmMKaW5kZXggY2Y5N2MzNC4uN2ZlN2MzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdG0vbGFuYWkuYworKysgYi9kcml2ZXJzL2F0bS9sYW5haS5jCkBAIC05OTgsOSArOTk4LDcgQEAKIAkJCSAgICAodW5zaWduZWQgaW50KSBlW0VFUFJPTV9NQUNfUkVWICsgaV0pOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KLQlEUFJJTlRLKCJlZXByb206IE1BQyBhZGRyZXNzID0gJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsCi0JCWVbRUVQUk9NX01BQyArIDBdLCBlW0VFUFJPTV9NQUMgKyAxXSwgZVtFRVBST01fTUFDICsgMl0sCi0JCWVbRUVQUk9NX01BQyArIDNdLCBlW0VFUFJPTV9NQUMgKyA0XSwgZVtFRVBST01fTUFDICsgNV0pOworCURQUklOVEsoImVlcHJvbTogTUFDIGFkZHJlc3MgPSAlcE1cbiIsICZlW0VFUFJPTV9NQUNdKTsKIAkvKiBWZXJpZnkgc2VyaWFsIG51bWJlciAqLwogCWxhbmFpLT5zZXJpYWxubyA9IGVlcHJvbV9iZTQobGFuYWksIEVFUFJPTV9TRVJJQUwpOwogCXYgPSBlZXByb21fYmU0KGxhbmFpLCBFRVBST01fU0VSSUFMX1JFVik7CkBAIC0yNDgzLDE0ICsyNDgxLDggQEAKIAkJcmV0dXJuIHNwcmludGYocGFnZSwgInJldmlzaW9uOiBib2FyZD0lZCwgcGNpX2lmPSVkXG4iLAogCQkgICAgbGFuYWktPmJvYXJkX3JldiwgKGludCkgbGFuYWktPnBjaS0+cmV2aXNpb24pOwogCWlmIChsZWZ0LS0gPT0gMCkKLQkJcmV0dXJuIHNwcmludGYocGFnZSwgIkVFUFJPTSBFU0k6ICIKLQkJICAgICIlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKLQkJICAgIGxhbmFpLT5lZXByb21bRUVQUk9NX01BQyArIDBdLAotCQkgICAgbGFuYWktPmVlcHJvbVtFRVBST01fTUFDICsgMV0sCi0JCSAgICBsYW5haS0+ZWVwcm9tW0VFUFJPTV9NQUMgKyAyXSwKLQkJICAgIGxhbmFpLT5lZXByb21bRUVQUk9NX01BQyArIDNdLAotCQkgICAgbGFuYWktPmVlcHJvbVtFRVBST01fTUFDICsgNF0sCi0JCSAgICBsYW5haS0+ZWVwcm9tW0VFUFJPTV9NQUMgKyA1XSk7CisJCXJldHVybiBzcHJpbnRmKHBhZ2UsICJFRVBST00gRVNJOiAlcE1cbiIsCisJCSAgICAmbGFuYWktPmVlcHJvbVtFRVBST01fTUFDXSk7CiAJaWYgKGxlZnQtLSA9PSAwKQogCQlyZXR1cm4gc3ByaW50ZihwYWdlLCAic3RhdHVzOiBTT09MPSVkLCBMT0NEPSVkLCBMRUQ9JWQsICIKIAkJICAgICJHUElOPSVkXG4iLCAobGFuYWktPnN0YXR1cyAmIFNUQVRVU19TT09MKSA/IDEgOiAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdG0vbmljc3Rhci5jIGIvZHJpdmVycy9hdG0vbmljc3Rhci5jCmluZGV4IDNkYTgwNGIuLjUwODM4NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRtL25pY3N0YXIuYworKysgYi9kcml2ZXJzL2F0bS9uaWNzdGFyLmMKQEAgLTgwNyw5ICs4MDcsNyBAQAogICAgICAgfQogICAgfQogCi0gICBwcmludGsoIm5pY3N0YXIlZDogTUFDIGFkZHJlc3MgJTAyWDolMDJYOiUwMlg6JTAyWDolMDJYOiUwMlhcbiIsIGksCi0gICAgICAgICAgY2FyZC0+YXRtZGV2LT5lc2lbMF0sIGNhcmQtPmF0bWRldi0+ZXNpWzFdLCBjYXJkLT5hdG1kZXYtPmVzaVsyXSwKLSAgICAgICAgICBjYXJkLT5hdG1kZXYtPmVzaVszXSwgY2FyZC0+YXRtZGV2LT5lc2lbNF0sIGNhcmQtPmF0bWRldi0+ZXNpWzVdKTsKKyAgIHByaW50aygibmljc3RhciVkOiBNQUMgYWRkcmVzcyAlcE1cbiIsIGksIGNhcmQtPmF0bWRldi0+ZXNpKTsKIAogICAgY2FyZC0+YXRtZGV2LT5kZXZfZGF0YSA9IGNhcmQ7CiAgICBjYXJkLT5hdG1kZXYtPmNpX3JhbmdlLnZwaV9iaXRzID0gY2FyZC0+dnBpYml0czsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXV4ZGlzcGxheS9jZmFnMTI4NjRiZmIuYyBiL2RyaXZlcnMvYXV4ZGlzcGxheS9jZmFnMTI4NjRiZmIuYwppbmRleCBmZTNhODY1Li5iMGNhNWE0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdXhkaXNwbGF5L2NmYWcxMjg2NGJmYi5jCisrKyBiL2RyaXZlcnMvYXV4ZGlzcGxheS9jZmFnMTI4NjRiZmIuYwpAQCAtODEsNyArODEsNyBAQAogCS5mYl9tbWFwID0gY2ZhZzEyODY0YmZiX21tYXAsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBjZmFnMTI4NjRiZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2RldmluaXQgY2ZhZzEyODY0YmZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKIHsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKICAJc3RydWN0IGZiX2luZm8gKmluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYygwLCAmZGV2aWNlLT5kZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL0tjb25maWcgYi9kcml2ZXJzL2Jhc2UvS2NvbmZpZwppbmRleCBlZTM3NzI3Li5mZDUyYzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvS2NvbmZpZworKysgYi9kcml2ZXJzL2Jhc2UvS2NvbmZpZwpAQCAtMywzNSArMyw1MCBAQAogY29uZmlnIFVFVkVOVF9IRUxQRVJfUEFUSAogCXN0cmluZyAicGF0aCB0byB1ZXZlbnQgaGVscGVyIgogCWRlcGVuZHMgb24gSE9UUExVRwotCWRlZmF1bHQgIi9zYmluL2hvdHBsdWciCisJZGVmYXVsdCAiIgogCWhlbHAKIAkgIFBhdGggdG8gdWV2ZW50IGhlbHBlciBwcm9ncmFtIGZvcmtlZCBieSB0aGUga2VybmVsIGZvcgogCSAgZXZlcnkgdWV2ZW50LgorCSAgQmVmb3JlIHRoZSBzd2l0Y2ggdG8gdGhlIG5ldGxpbmstYmFzZWQgdWV2ZW50IHNvdXJjZSwgdGhpcyB3YXMKKwkgIHVzZWQgdG8gaG9vayBob3RwbHVnIHNjcmlwdHMgaW50byBrZXJuZWwgZGV2aWNlIGV2ZW50cy4gSXQKKwkgIHVzdWFsbHkgcG9pbnRlZCB0byBhIHNoZWxsIHNjcmlwdCBhdCAvc2Jpbi9ob3RwbHVnLgorCSAgVGhpcyBzaG91bGQgbm90IGJlIHVzZWQgdG9kYXksIGJlY2F1c2UgdXN1YWwgc3lzdGVtcyBjcmVhdGUKKwkgIG1hbnkgZXZlbnRzIGF0IGJvb3R1cCBvciBkZXZpY2UgZGlzY292ZXJ5IGluIGEgdmVyeSBzaG9ydCB0aW1lCisJICBmcmFtZS4gT25lIGZvcmtlZCBwcm9jZXNzIHBlciBldmVudCBjYW4gY3JlYXRlIHNvIG1hbnkgcHJvY2Vzc2VzCisJICB0aGF0IGl0IGNyZWF0ZXMgYSBoaWdoIHN5c3RlbSBsb2FkLCBvciBvbiBzbWFsbGVyIHN5c3RlbXMKKwkgIGl0IGlzIGtub3duIHRvIGNyZWF0ZSBvdXQtb2YtbWVtb3J5IHNpdHVhdGlvbnMgZHVyaW5nIGJvb3R1cC4KIAogY29uZmlnIERFVlRNUEZTCi0JYm9vbCAiQ3JlYXRlIGEga2VybmVsIG1haW50YWluZWQgL2RldiB0bXBmcyAoRVhQRVJJTUVOVEFMKSIKKwlib29sICJNYWludGFpbiBhIGRldnRtcGZzIGZpbGVzeXN0ZW0gdG8gbW91bnQgYXQgL2RldiIKIAlkZXBlbmRzIG9uIEhPVFBMVUcgJiYgU0hNRU0gJiYgVE1QRlMKIAloZWxwCi0JICBUaGlzIGNyZWF0ZXMgYSB0bXBmcyBmaWxlc3lzdGVtLCBhbmQgbW91bnRzIGl0IGF0IGJvb3R1cAotCSAgYW5kIG1vdW50cyBpdCBhdCAvZGV2LiBUaGUga2VybmVsIGRyaXZlciBjb3JlIGNyZWF0ZXMgZGV2aWNlCi0JICBub2RlcyBmb3IgYWxsIHJlZ2lzdGVyZWQgZGV2aWNlcyBpbiB0aGF0IGZpbGVzeXN0ZW0uIEFsbCBkZXZpY2UKLQkgIG5vZGVzIGFyZSBvd25lZCBieSByb290IGFuZCBoYXZlIHRoZSBkZWZhdWx0IG1vZGUgb2YgMDYwMC4KLQkgIFVzZXJzcGFjZSBjYW4gYWRkIGFuZCBkZWxldGUgdGhlIG5vZGVzIGFzIG5lZWRlZC4gVGhpcyBpcwotCSAgaW50ZW5kZWQgdG8gc2ltcGxpZnkgYm9vdHVwLCBhbmQgbWFrZSBpdCBwb3NzaWJsZSB0byBkZWxheQotCSAgdGhlIGluaXRpYWwgY29sZHBsdWcgYXQgYm9vdHVwIGRvbmUgYnkgdWRldiBpbiB1c2Vyc3BhY2UuCi0JICBJdCBzaG91bGQgYWxzbyBwcm92aWRlIGEgc2ltcGxlciB3YXkgZm9yIHJlc2N1ZSBzeXN0ZW1zCi0JICB0byBicmluZyB1cCBhIGtlcm5lbCB3aXRoIGR5bmFtaWMgbWFqb3IvbWlub3IgbnVtYmVycy4KLQkgIE1lYW5pbmdmdWwgc3ltbGlua3MsIHBlcm1pc3Npb25zIGFuZCBkZXZpY2Ugb3duZXJzaGlwIG11c3QKLQkgIHN0aWxsIGJlIGhhbmRsZWQgYnkgdXNlcnNwYWNlLgotCSAgSWYgdW5zdXJlLCBzYXkgTiBoZXJlLgorCSAgVGhpcyBjcmVhdGVzIGEgdG1wZnMgZmlsZXN5c3RlbSBpbnN0YW5jZSBlYXJseSBhdCBib290dXAuCisJICBJbiB0aGlzIGZpbGVzeXN0ZW0sIHRoZSBrZXJuZWwgZHJpdmVyIGNvcmUgbWFpbnRhaW5zIGRldmljZQorCSAgbm9kZXMgd2l0aCB0aGVpciBkZWZhdWx0IG5hbWVzIGFuZCBwZXJtaXNzaW9ucyBmb3IgYWxsCisJICByZWdpc3RlcmVkIGRldmljZXMgd2l0aCBhbiBhc3NpZ25lZCBtYWpvci9taW5vciBudW1iZXIuCisJICBVc2Vyc3BhY2UgY2FuIG1vZGlmeSB0aGUgZmlsZXN5c3RlbSBjb250ZW50IGFzIG5lZWRlZCwgYWRkCisJICBzeW1saW5rcywgYW5kIGFwcGx5IG5lZWRlZCBwZXJtaXNzaW9ucy4KKwkgIEl0IHByb3ZpZGVzIGEgZnVsbHkgZnVuY3Rpb25hbCAvZGV2IGRpcmVjdG9yeSwgd2hlcmUgdXN1YWxseQorCSAgdWRldiBydW5zIG9uIHRvcCwgbWFuYWdpbmcgcGVybWlzc2lvbnMgYW5kIGFkZGluZyBtZWFuaW5nZnVsCisJICBzeW1saW5rcy4KKwkgIEluIHZlcnkgbGltaXRlZCBlbnZpcm9ubWVudHMsIGl0IG1heSBwcm92aWRlIGEgc3VmZmljaWVudAorCSAgZnVuY3Rpb25hbCAvZGV2IHdpdGhvdXQgYW55IGZ1cnRoZXIgaGVscC4gSXQgYWxzbyBhbGxvd3Mgc2ltcGxlCisJICByZXNjdWUgc3lzdGVtcywgYW5kIHJlbGlhYmx5IGhhbmRsZXMgZHluYW1pYyBtYWpvci9taW5vciBudW1iZXJzLgogCiBjb25maWcgREVWVE1QRlNfTU9VTlQKLQlib29sICJBdXRvbW91bnQgZGV2dG1wZnMgYXQgL2RldiIKKwlib29sICJBdXRvbW91bnQgZGV2dG1wZnMgYXQgL2RldiwgYWZ0ZXIgdGhlIGtlcm5lbCBtb3VudGVkIHRoZSByb290ZnMiCiAJZGVwZW5kcyBvbiBERVZUTVBGUwogCWhlbHAKLQkgIFRoaXMgd2lsbCBtb3VudCBkZXZ0bXBmcyBhdCAvZGV2IGlmIHRoZSBrZXJuZWwgbW91bnRzIHRoZSByb290Ci0JICBmaWxlc3lzdGVtLiBJdCB3aWxsIG5vdCBhZmZlY3QgaW5pdHJhbWZzIGJhc2VkIG1vdW50aW5nLgotCSAgSWYgdW5zdXJlLCBzYXkgTiBoZXJlLgorCSAgVGhpcyB3aWxsIGluc3RydWN0IHRoZSBrZXJuZWwgdG8gYXV0b21hdGljYWxseSBtb3VudCB0aGUKKwkgIGRldnRtcGZzIGZpbGVzeXN0ZW0gYXQgL2RldiwgZGlyZWN0bHkgYWZ0ZXIgdGhlIGtlcm5lbCBoYXMKKwkgIG1vdW50ZWQgdGhlIHJvb3QgZmlsZXN5c3RlbS4gVGhlIGJlaGF2aW9yIGNhbiBiZSBvdmVycmlkZGVuCisJICB3aXRoIHRoZSBjb21tYW5kbGluZSBwYXJhbWV0ZXI6IGRldnRtcGZzLm1vdW50PTB8MS4KKwkgIFRoaXMgb3B0aW9uIGRvZXMgbm90IGFmZmVjdCBpbml0cmFtZnMgYmFzZWQgYm9vdGluZywgaGVyZQorCSAgdGhlIGRldnRtcGZzIGZpbGVzeXN0ZW0gYWx3YXlzIG5lZWRzIHRvIGJlIG1vdW50ZWQgbWFudWFsbHkKKwkgIGFmdGVyIHRoZSByb290cyBpcyBtb3VudGVkLgorCSAgV2l0aCB0aGlzIG9wdGlvbiBlbmFibGVkLCBpdCBhbGxvd3MgdG8gYnJpbmcgdXAgYSBzeXN0ZW0gaW4KKwkgIHJlc2N1ZSBtb2RlIHdpdGggaW5pdD0vYmluL3NoLCBldmVuIHdoZW4gdGhlIC9kZXYgZGlyZWN0b3J5CisJICBvbiB0aGUgcm9vdGZzIGlzIGNvbXBsZXRlbHkgZW1wdHkuCiAKIGNvbmZpZyBTVEFOREFMT05FCiAJYm9vbCAiU2VsZWN0IG9ubHkgZHJpdmVycyB0aGF0IGRvbid0IG5lZWQgY29tcGlsZS10aW1lIGV4dGVybmFsIGZpcm13YXJlIiBpZiBFWFBFUklNRU5UQUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9idXMuYyBiL2RyaXZlcnMvYmFzZS9idXMuYwppbmRleCBjMGM1YTQzLi43MWY2YWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvYnVzLmMKKysrIGIvZHJpdmVycy9iYXNlL2J1cy5jCkBAIC03MCw3ICs3MCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgZHJpdmVyX3N5c2ZzX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIGRyaXZlcl9zeXNmc19vcHMgPSB7CiAJLnNob3cJPSBkcnZfYXR0cl9zaG93LAogCS5zdG9yZQk9IGRydl9hdHRyX3N0b3JlLAogfTsKQEAgLTExNSw3ICsxMTUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIGJ1c19zeXNmc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBidXNfc3lzZnNfb3BzID0gewogCS5zaG93CT0gYnVzX2F0dHJfc2hvdywKIAkuc3RvcmUJPSBidXNfYXR0cl9zdG9yZSwKIH07CkBAIC0xNTQsNyArMTU0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBrc2V0X3VldmVudF9vcHMgYnVzX3VldmVudF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGtzZXRfdWV2ZW50X29wcyBidXNfdWV2ZW50X29wcyA9IHsKIAkuZmlsdGVyID0gYnVzX3VldmVudF9maWx0ZXIsCiB9OwogCkBAIC0xNzMsMTAgKzE3MywxMCBAQAogCWRldiA9IGJ1c19maW5kX2RldmljZV9ieV9uYW1lKGJ1cywgTlVMTCwgYnVmKTsKIAlpZiAoZGV2ICYmIGRldi0+ZHJpdmVyID09IGRydikgewogCQlpZiAoZGV2LT5wYXJlbnQpCS8qIE5lZWRlZCBmb3IgVVNCICovCi0JCQlkb3duKCZkZXYtPnBhcmVudC0+c2VtKTsKKwkJCWRldmljZV9sb2NrKGRldi0+cGFyZW50KTsKIAkJZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldik7CiAJCWlmIChkZXYtPnBhcmVudCkKLQkJCXVwKCZkZXYtPnBhcmVudC0+c2VtKTsKKwkJCWRldmljZV91bmxvY2soZGV2LT5wYXJlbnQpOwogCQllcnIgPSBjb3VudDsKIAl9CiAJcHV0X2RldmljZShkZXYpOwpAQCAtMjAwLDEyICsyMDAsMTIgQEAKIAlkZXYgPSBidXNfZmluZF9kZXZpY2VfYnlfbmFtZShidXMsIE5VTEwsIGJ1Zik7CiAJaWYgKGRldiAmJiBkZXYtPmRyaXZlciA9PSBOVUxMICYmIGRyaXZlcl9tYXRjaF9kZXZpY2UoZHJ2LCBkZXYpKSB7CiAJCWlmIChkZXYtPnBhcmVudCkJLyogTmVlZGVkIGZvciBVU0IgKi8KLQkJCWRvd24oJmRldi0+cGFyZW50LT5zZW0pOwotCQlkb3duKCZkZXYtPnNlbSk7CisJCQlkZXZpY2VfbG9jayhkZXYtPnBhcmVudCk7CisJCWRldmljZV9sb2NrKGRldik7CiAJCWVyciA9IGRyaXZlcl9wcm9iZV9kZXZpY2UoZHJ2LCBkZXYpOwotCQl1cCgmZGV2LT5zZW0pOworCQlkZXZpY2VfdW5sb2NrKGRldik7CiAJCWlmIChkZXYtPnBhcmVudCkKLQkJCXVwKCZkZXYtPnBhcmVudC0+c2VtKTsKKwkJCWRldmljZV91bmxvY2soZGV2LT5wYXJlbnQpOwogCiAJCWlmIChlcnIgPiAwKSB7CiAJCQkvKiBzdWNjZXNzICovCkBAIC03NDQsMTAgKzc0NCwxMCBAQAogCiAJaWYgKCFkZXYtPmRyaXZlcikgewogCQlpZiAoZGV2LT5wYXJlbnQpCS8qIE5lZWRlZCBmb3IgVVNCICovCi0JCQlkb3duKCZkZXYtPnBhcmVudC0+c2VtKTsKKwkJCWRldmljZV9sb2NrKGRldi0+cGFyZW50KTsKIAkJcmV0ID0gZGV2aWNlX2F0dGFjaChkZXYpOwogCQlpZiAoZGV2LT5wYXJlbnQpCi0JCQl1cCgmZGV2LT5wYXJlbnQtPnNlbSk7CisJCQlkZXZpY2VfdW5sb2NrKGRldi0+cGFyZW50KTsKIAl9CiAJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOwogfQpAQCAtNzc5LDEwICs3NzksMTAgQEAKIHsKIAlpZiAoZGV2LT5kcml2ZXIpIHsKIAkJaWYgKGRldi0+cGFyZW50KSAgICAgICAgLyogTmVlZGVkIGZvciBVU0IgKi8KLQkJCWRvd24oJmRldi0+cGFyZW50LT5zZW0pOworCQkJZGV2aWNlX2xvY2soZGV2LT5wYXJlbnQpOwogCQlkZXZpY2VfcmVsZWFzZV9kcml2ZXIoZGV2KTsKIAkJaWYgKGRldi0+cGFyZW50KQotCQkJdXAoJmRldi0+cGFyZW50LT5zZW0pOworCQkJZGV2aWNlX3VubG9jayhkZXYtPnBhcmVudCk7CiAJfQogCXJldHVybiBidXNfcmVzY2FuX2RldmljZXNfaGVscGVyKGRldiwgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY2xhc3MuYyBiL2RyaXZlcnMvYmFzZS9jbGFzcy5jCmluZGV4IDZlMmMzYjAuLjAxNDdmNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9jbGFzcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9jbGFzcy5jCkBAIC0zMSw3ICszMSw3IEBACiAJc3NpemVfdCByZXQgPSAtRUlPOwogCiAJaWYgKGNsYXNzX2F0dHItPnNob3cpCi0JCXJldCA9IGNsYXNzX2F0dHItPnNob3coY3AtPmNsYXNzLCBidWYpOworCQlyZXQgPSBjbGFzc19hdHRyLT5zaG93KGNwLT5jbGFzcywgY2xhc3NfYXR0ciwgYnVmKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC00Myw3ICs0Myw3IEBACiAJc3NpemVfdCByZXQgPSAtRUlPOwogCiAJaWYgKGNsYXNzX2F0dHItPnN0b3JlKQotCQlyZXQgPSBjbGFzc19hdHRyLT5zdG9yZShjcC0+Y2xhc3MsIGJ1ZiwgY291bnQpOworCQlyZXQgPSBjbGFzc19hdHRyLT5zdG9yZShjcC0+Y2xhc3MsIGNsYXNzX2F0dHIsIGJ1ZiwgY291bnQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTYzLDcgKzYzLDcgQEAKIAlrZnJlZShjcCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIGNsYXNzX3N5c2ZzX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIGNsYXNzX3N5c2ZzX29wcyA9IHsKIAkuc2hvdwk9IGNsYXNzX2F0dHJfc2hvdywKIAkuc3RvcmUJPSBjbGFzc19hdHRyX3N0b3JlLAogfTsKQEAgLTQ5MCw2ICs0OTAsMTYgQEAKIAljbGFzc19wdXQocGFyZW50KTsKIH0KIAorc3NpemVfdCBzaG93X2NsYXNzX2F0dHJfc3RyaW5nKHN0cnVjdCBjbGFzcyAqY2xhc3MsIHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisgICAgICAgICAgICAgICAgICAgICAgICAJY2hhciAqYnVmKQoreworCXN0cnVjdCBjbGFzc19hdHRyaWJ1dGVfc3RyaW5nICpjczsKKwljcyA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgY2xhc3NfYXR0cmlidXRlX3N0cmluZywgYXR0cik7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsIGNzLT5zdHIpOworfQorCitFWFBPUlRfU1lNQk9MX0dQTChzaG93X2NsYXNzX2F0dHJfc3RyaW5nKTsKKwogc3RydWN0IGNsYXNzX2NvbXBhdCB7CiAJc3RydWN0IGtvYmplY3QgKmtvYmo7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2NvcmUuYyBiL2RyaXZlcnMvYmFzZS9jb3JlLmMKaW5kZXggMjgyMDI1Ny4uZWY1NWRmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NvcmUuYworKysgYi9kcml2ZXJzL2Jhc2UvY29yZS5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBkZXZfc3lzZnNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgZGV2X3N5c2ZzX29wcyA9IHsKIAkuc2hvdwk9IGRldl9hdHRyX3Nob3csCiAJLnN0b3JlCT0gZGV2X2F0dHJfc3RvcmUsCiB9OwpAQCAtMjUyLDcgKzI1Miw3IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIHN0cnVjdCBrc2V0X3VldmVudF9vcHMgZGV2aWNlX3VldmVudF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGtzZXRfdWV2ZW50X29wcyBkZXZpY2VfdWV2ZW50X29wcyA9IHsKIAkuZmlsdGVyID0JZGV2X3VldmVudF9maWx0ZXIsCiAJLm5hbWUgPQkJZGV2X3VldmVudF9uYW1lLAogCS51ZXZlbnQgPQlkZXZfdWV2ZW50LApAQCAtMzA2LDE1ICszMDYsMTAgQEAKIHsKIAllbnVtIGtvYmplY3RfYWN0aW9uIGFjdGlvbjsKIAotCWlmIChrb2JqZWN0X2FjdGlvbl90eXBlKGJ1ZiwgY291bnQsICZhY3Rpb24pID09IDApIHsKKwlpZiAoa29iamVjdF9hY3Rpb25fdHlwZShidWYsIGNvdW50LCAmYWN0aW9uKSA9PSAwKQogCQlrb2JqZWN0X3VldmVudCgmZGV2LT5rb2JqLCBhY3Rpb24pOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlkZXZfZXJyKGRldiwgInVldmVudDogdW5zdXBwb3J0ZWQgYWN0aW9uLXN0cmluZzsgdGhpcyB3aWxsICIKLQkJICAgICAiYmUgaWdub3JlZCBpbiBhIGZ1dHVyZSBrZXJuZWwgdmVyc2lvblxuIik7Ci0Ja29iamVjdF91ZXZlbnQoJmRldi0+a29iaiwgS09CSl9BREQpOwotb3V0OgorCWVsc2UKKwkJZGV2X2VycihkZXYsICJ1ZXZlbnQ6IHVua25vd24gYWN0aW9uLXN0cmluZ1xuIik7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC02MDcsNiArNjAyLDcgQEAKIAlpbnQgcmV0dmFsOwogCiAJaWYgKGRldi0+Y2xhc3MpIHsKKwkJc3RhdGljIERFRklORV9NVVRFWChnZHBfbXV0ZXgpOwogCQlzdHJ1Y3Qga29iamVjdCAqa29iaiA9IE5VTEw7CiAJCXN0cnVjdCBrb2JqZWN0ICpwYXJlbnRfa29iajsKIAkJc3RydWN0IGtvYmplY3QgKms7CkBAIC02MjMsNiArNjE5LDggQEAKIAkJZWxzZQogCQkJcGFyZW50X2tvYmogPSAmcGFyZW50LT5rb2JqOwogCisJCW11dGV4X2xvY2soJmdkcF9tdXRleCk7CisKIAkJLyogZmluZCBvdXIgY2xhc3MtZGlyZWN0b3J5IGF0IHRoZSBwYXJlbnQgYW5kIHJlZmVyZW5jZSBpdCAqLwogCQlzcGluX2xvY2soJmRldi0+Y2xhc3MtPnAtPmNsYXNzX2RpcnMubGlzdF9sb2NrKTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShrLCAmZGV2LT5jbGFzcy0+cC0+Y2xhc3NfZGlycy5saXN0LCBlbnRyeSkKQEAgLTYzMSwyMCArNjI5LDI2IEBACiAJCQkJYnJlYWs7CiAJCQl9CiAJCXNwaW5fdW5sb2NrKCZkZXYtPmNsYXNzLT5wLT5jbGFzc19kaXJzLmxpc3RfbG9jayk7Ci0JCWlmIChrb2JqKQorCQlpZiAoa29iaikgeworCQkJbXV0ZXhfdW5sb2NrKCZnZHBfbXV0ZXgpOwogCQkJcmV0dXJuIGtvYmo7CisJCX0KIAogCQkvKiBvciBjcmVhdGUgYSBuZXcgY2xhc3MtZGlyZWN0b3J5IGF0IHRoZSBwYXJlbnQgZGV2aWNlICovCiAJCWsgPSBrb2JqZWN0X2NyZWF0ZSgpOwotCQlpZiAoIWspCisJCWlmICghaykgeworCQkJbXV0ZXhfdW5sb2NrKCZnZHBfbXV0ZXgpOwogCQkJcmV0dXJuIE5VTEw7CisJCX0KIAkJay0+a3NldCA9ICZkZXYtPmNsYXNzLT5wLT5jbGFzc19kaXJzOwogCQlyZXR2YWwgPSBrb2JqZWN0X2FkZChrLCBwYXJlbnRfa29iaiwgIiVzIiwgZGV2LT5jbGFzcy0+bmFtZSk7CiAJCWlmIChyZXR2YWwgPCAwKSB7CisJCQltdXRleF91bmxvY2soJmdkcF9tdXRleCk7CiAJCQlrb2JqZWN0X3B1dChrKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CiAJCS8qIGRvIG5vdCBlbWl0IGFuIHVldmVudCBmb3IgdGhpcyBzaW1wbGUgImdsdWUiIGRpcmVjdG9yeSAqLworCQltdXRleF91bmxvY2soJmdkcF9tdXRleCk7CiAJCXJldHVybiBrOwogCX0KIApAQCAtMTU3NCwyMiArMTU3OCwxNiBAQAogCWlmIChvbGRfY2xhc3NfbmFtZSkgewogCQluZXdfY2xhc3NfbmFtZSA9IG1ha2VfY2xhc3NfbmFtZShkZXYtPmNsYXNzLT5uYW1lLCAmZGV2LT5rb2JqKTsKIAkJaWYgKG5ld19jbGFzc19uYW1lKSB7Ci0JCQllcnJvciA9IHN5c2ZzX2NyZWF0ZV9saW5rX25vd2FybigmZGV2LT5wYXJlbnQtPmtvYmosCi0JCQkJCQkJICZkZXYtPmtvYmosCi0JCQkJCQkJIG5ld19jbGFzc19uYW1lKTsKLQkJCWlmIChlcnJvcikKLQkJCQlnb3RvIG91dDsKLQkJCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPnBhcmVudC0+a29iaiwgb2xkX2NsYXNzX25hbWUpOworCQkJZXJyb3IgPSBzeXNmc19yZW5hbWVfbGluaygmZGV2LT5wYXJlbnQtPmtvYmosCisJCQkJCQkgICZkZXYtPmtvYmosCisJCQkJCQkgIG9sZF9jbGFzc19uYW1lLAorCQkJCQkJICBuZXdfY2xhc3NfbmFtZSk7CiAJCX0KIAl9CiAjZWxzZQogCWlmIChkZXYtPmNsYXNzKSB7Ci0JCWVycm9yID0gc3lzZnNfY3JlYXRlX2xpbmtfbm93YXJuKCZkZXYtPmNsYXNzLT5wLT5jbGFzc19zdWJzeXMua29iaiwKLQkJCQkJCSAmZGV2LT5rb2JqLCBkZXZfbmFtZShkZXYpKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBvdXQ7Ci0JCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmNsYXNzLT5wLT5jbGFzc19zdWJzeXMua29iaiwKLQkJCQkgIG9sZF9kZXZpY2VfbmFtZSk7CisJCWVycm9yID0gc3lzZnNfcmVuYW1lX2xpbmsoJmRldi0+Y2xhc3MtPnAtPmNsYXNzX3N1YnN5cy5rb2JqLAorCQkJCQkgICZkZXYtPmtvYmosIG9sZF9kZXZpY2VfbmFtZSwgbmV3X25hbWUpOwogCX0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvY3B1LmMgYi9kcml2ZXJzL2Jhc2UvY3B1LmMKaW5kZXggOTU4YmQxNS4uNzAzNmU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NwdS5jCisrKyBiL2RyaXZlcnMvYmFzZS9jcHUuYwpAQCAtMTMsOCArMTMsMTEgQEAKIAogI2luY2x1ZGUgImJhc2UuaCIKIAorc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICpjcHVfc3lzZGV2X2NsYXNzX2F0dHJzW107CisKIHN0cnVjdCBzeXNkZXZfY2xhc3MgY3B1X3N5c2Rldl9jbGFzcyA9IHsKIAkubmFtZSA9ICJjcHUiLAorCS5hdHRycyA9IGNwdV9zeXNkZXZfY2xhc3NfYXR0cnMsCiB9OwogRVhQT1JUX1NZTUJPTChjcHVfc3lzZGV2X2NsYXNzKTsKIApAQCAtNzYsMzQgKzc5LDI0IEBACiB9CiAKICNpZmRlZiBDT05GSUdfQVJDSF9DUFVfUFJPQkVfUkVMRUFTRQotc3RhdGljIHNzaXplX3QgY3B1X3Byb2JlX3N0b3JlKHN0cnVjdCBjbGFzcyAqY2xhc3MsIGNvbnN0IGNoYXIgKmJ1ZiwKK3N0YXRpYyBzc2l6ZV90IGNwdV9wcm9iZV9zdG9yZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAorCQkJCWNvbnN0IGNoYXIgKmJ1ZiwKIAkJCSAgICAgICBzaXplX3QgY291bnQpCiB7CiAJcmV0dXJuIGFyY2hfY3B1X3Byb2JlKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgc3NpemVfdCBjcHVfcmVsZWFzZV9zdG9yZShzdHJ1Y3QgY2xhc3MgKmNsYXNzLCBjb25zdCBjaGFyICpidWYsCitzdGF0aWMgc3NpemVfdCBjcHVfcmVsZWFzZV9zdG9yZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAorCQkJCWNvbnN0IGNoYXIgKmJ1ZiwKIAkJCQkgc2l6ZV90IGNvdW50KQogewogCXJldHVybiBhcmNoX2NwdV9yZWxlYXNlKGJ1ZiwgY291bnQpOwogfQogCi1zdGF0aWMgQ0xBU1NfQVRUUihwcm9iZSwgU19JV1VTUiwgTlVMTCwgY3B1X3Byb2JlX3N0b3JlKTsKLXN0YXRpYyBDTEFTU19BVFRSKHJlbGVhc2UsIFNfSVdVU1IsIE5VTEwsIGNwdV9yZWxlYXNlX3N0b3JlKTsKLQotaW50IF9faW5pdCBjcHVfcHJvYmVfcmVsZWFzZV9pbml0KHZvaWQpCi17Ci0JaW50IHJjOwotCi0JcmMgPSBzeXNmc19jcmVhdGVfZmlsZSgmY3B1X3N5c2Rldl9jbGFzcy5rc2V0LmtvYmosCi0JCQkgICAgICAgJmNsYXNzX2F0dHJfcHJvYmUuYXR0cik7Ci0JaWYgKCFyYykKLQkJcmMgPSBzeXNmc19jcmVhdGVfZmlsZSgmY3B1X3N5c2Rldl9jbGFzcy5rc2V0LmtvYmosCi0JCQkJICAgICAgICZjbGFzc19hdHRyX3JlbGVhc2UuYXR0cik7Ci0KLQlyZXR1cm4gcmM7Ci19Ci1kZXZpY2VfaW5pdGNhbGwoY3B1X3Byb2JlX3JlbGVhc2VfaW5pdCk7CitzdGF0aWMgU1lTREVWX0FUVFIocHJvYmUsIFNfSVdVU1IsIE5VTEwsIGNwdV9wcm9iZV9zdG9yZSk7CitzdGF0aWMgU1lTREVWX0FUVFIocmVsZWFzZSwgU19JV1VTUiwgTlVMTCwgY3B1X3JlbGVhc2Vfc3RvcmUpOwogI2VuZGlmIC8qIENPTkZJR19BUkNIX0NQVV9QUk9CRV9SRUxFQVNFICovCiAKICNlbHNlIC8qIC4uLiAhQ09ORklHX0hPVFBMVUdfQ1BVICovCkBAIC0xNDEsMzEgKzEzNCwzOSBAQAogLyoKICAqIFByaW50IGNwdSBvbmxpbmUsIHBvc3NpYmxlLCBwcmVzZW50LCBhbmQgc3lzdGVtIG1hcHMKICAqLwotc3RhdGljIHNzaXplX3QgcHJpbnRfY3B1c19tYXAoY2hhciAqYnVmLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFwKQorCitzdHJ1Y3QgY3B1X2F0dHIgeworCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlIGF0dHI7CisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNvbnN0ICogY29uc3QgbWFwOworfTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19jcHVzX2F0dHIoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsCisJCQkgICAgICBzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNoYXIgKmJ1ZikKIHsKLQlpbnQgbiA9IGNwdWxpc3Rfc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLTIsIG1hcCk7CisJc3RydWN0IGNwdV9hdHRyICpjYSA9IGNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3QgY3B1X2F0dHIsIGF0dHIpOworCWludCBuID0gY3B1bGlzdF9zY25wcmludGYoYnVmLCBQQUdFX1NJWkUtMiwgKihjYS0+bWFwKSk7CiAKIAlidWZbbisrXSA9ICdcbic7CiAJYnVmW25dID0gJ1wwJzsKIAlyZXR1cm4gbjsKIH0KIAotI2RlZmluZQlwcmludF9jcHVzX2Z1bmModHlwZSkgXAotc3RhdGljIHNzaXplX3QgcHJpbnRfY3B1c18jI3R5cGUoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsIGNoYXIgKmJ1ZikJXAotewkJCQkJCQkJCVwKLQlyZXR1cm4gcHJpbnRfY3B1c19tYXAoYnVmLCBjcHVfIyN0eXBlIyNfbWFzayk7CQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSBhdHRyXyMjdHlwZSMjX21hcCA9IAkJXAotCV9TWVNERVZfQ0xBU1NfQVRUUih0eXBlLCAwNDQ0LCBwcmludF9jcHVzXyMjdHlwZSwgTlVMTCkKKyNkZWZpbmUgX0NQVV9BVFRSKG5hbWUsIG1hcCkJCQkJCQlcCisJeyBfU1lTREVWX0NMQVNTX0FUVFIobmFtZSwgMDQ0NCwgc2hvd19jcHVzX2F0dHIsIE5VTEwpLCBtYXAgfQogCi1wcmludF9jcHVzX2Z1bmMob25saW5lKTsKLXByaW50X2NwdXNfZnVuYyhwb3NzaWJsZSk7Ci1wcmludF9jcHVzX2Z1bmMocHJlc2VudCk7CisvKiBLZWVwIGluIHN5bmMgd2l0aCBjcHVfc3lzZGV2X2NsYXNzX2F0dHJzICovCitzdGF0aWMgc3RydWN0IGNwdV9hdHRyIGNwdV9hdHRyc1tdID0geworCV9DUFVfQVRUUihvbmxpbmUsICZjcHVfb25saW5lX21hc2spLAorCV9DUFVfQVRUUihwb3NzaWJsZSwgJmNwdV9wb3NzaWJsZV9tYXNrKSwKKwlfQ1BVX0FUVFIocHJlc2VudCwgJmNwdV9wcmVzZW50X21hc2spLAorfTsKIAogLyoKICAqIFByaW50IHZhbHVlcyBmb3IgTlJfQ1BVUyBhbmQgb2ZmbGluZWQgY3B1cwogICovCi1zdGF0aWMgc3NpemVfdCBwcmludF9jcHVzX2tlcm5lbF9tYXgoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHByaW50X2NwdXNfa2VybmVsX21heChzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbGFzcywKKwkJCQkgICAgIHN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJaW50IG4gPSBzbnByaW50ZihidWYsIFBBR0VfU0laRS0yLCAiJWRcbiIsIE5SX0NQVVMgLSAxKTsKIAlyZXR1cm4gbjsKQEAgLTE3NSw3ICsxNzYsOCBAQAogLyogYXJjaC1vcHRpb25hbCBzZXR0aW5nIHRvIGVuYWJsZSBkaXNwbGF5IG9mIG9mZmxpbmUgY3B1cyA+PSBucl9jcHVfaWRzICovCiB1bnNpZ25lZCBpbnQgdG90YWxfY3B1czsKIAotc3RhdGljIHNzaXplX3QgcHJpbnRfY3B1c19vZmZsaW5lKHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBwcmludF9jcHVzX29mZmxpbmUoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsCisJCQkJICBzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCWludCBuID0gMCwgbGVuID0gUEFHRV9TSVpFLTI7CiAJY3B1bWFza192YXJfdCBvZmZsaW5lOwpAQCAtMjA0LDI5ICsyMDYsNiBAQAogfQogc3RhdGljIFNZU0RFVl9DTEFTU19BVFRSKG9mZmxpbmUsIDA0NDQsIHByaW50X2NwdXNfb2ZmbGluZSwgTlVMTCk7CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqY3B1X3N0YXRlX2F0dHJbXSA9IHsKLQkmYXR0cl9vbmxpbmVfbWFwLAotCSZhdHRyX3Bvc3NpYmxlX21hcCwKLQkmYXR0cl9wcmVzZW50X21hcCwKLQkmYXR0cl9rZXJuZWxfbWF4LAotCSZhdHRyX29mZmxpbmUsCi19OwotCi1zdGF0aWMgaW50IGNwdV9zdGF0ZXNfaW5pdCh2b2lkKQotewotCWludCBpOwotCWludCBlcnIgPSAwOwotCi0JZm9yIChpID0gMDsgIGkgPCBBUlJBWV9TSVpFKGNwdV9zdGF0ZV9hdHRyKTsgaSsrKSB7Ci0JCWludCByZXQ7Ci0JCXJldCA9IHN5c2Rldl9jbGFzc19jcmVhdGVfZmlsZSgmY3B1X3N5c2Rldl9jbGFzcywKLQkJCQkJCWNwdV9zdGF0ZV9hdHRyW2ldKTsKLQkJaWYgKCFlcnIpCi0JCQllcnIgPSByZXQ7Ci0JfQotCXJldHVybiBlcnI7Ci19Ci0KIC8qCiAgKiByZWdpc3Rlcl9jcHUgLSBTZXR1cCBhIHN5c2ZzIGRldmljZSBmb3IgYSBDUFUuCiAgKiBAY3B1IC0gY3B1LT5ob3RwbHVnZ2FibGUgZmllbGQgc2V0IHRvIDEgd2lsbCBnZW5lcmF0ZSBhIGNvbnRyb2wgZmlsZSBpbgpAQCAtMjcyLDkgKzI1MSw2IEBACiAJaW50IGVycjsKIAogCWVyciA9IHN5c2Rldl9jbGFzc19yZWdpc3RlcigmY3B1X3N5c2Rldl9jbGFzcyk7Ci0JaWYgKCFlcnIpCi0JCWVyciA9IGNwdV9zdGF0ZXNfaW5pdCgpOwotCiAjaWYgZGVmaW5lZChDT05GSUdfU0NIRURfTUMpIHx8IGRlZmluZWQoQ09ORklHX1NDSEVEX1NNVCkKIAlpZiAoIWVycikKIAkJZXJyID0gc2NoZWRfY3JlYXRlX3N5c2ZzX3Bvd2VyX3NhdmluZ3NfZW50cmllcygmY3B1X3N5c2Rldl9jbGFzcyk7CkBAIC0yODIsMyArMjU4LDE2IEBACiAKIAlyZXR1cm4gZXJyOwogfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmNwdV9zeXNkZXZfY2xhc3NfYXR0cnNbXSA9IHsKKyNpZmRlZiBDT05GSUdfQVJDSF9DUFVfUFJPQkVfUkVMRUFTRQorCSZhdHRyX3Byb2JlLAorCSZhdHRyX3JlbGVhc2UsCisjZW5kaWYKKwkmY3B1X2F0dHJzWzBdLmF0dHIsCisJJmNwdV9hdHRyc1sxXS5hdHRyLAorCSZjcHVfYXR0cnNbMl0uYXR0ciwKKwkmYXR0cl9rZXJuZWxfbWF4LAorCSZhdHRyX29mZmxpbmUsCisJTlVMTAorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9kZC5jIGIvZHJpdmVycy9iYXNlL2RkLmMKaW5kZXggZWU5NWM3Ni4uYzg5MjkxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2RkLmMKKysrIGIvZHJpdmVycy9iYXNlL2RkLmMKQEAgLTg1LDcgKzg1LDcgQEAKICAqIGZvciBiZWZvcmUgY2FsbGluZyB0aGlzLiAoSXQgaXMgb2sgdG8gY2FsbCB3aXRoIG5vIG90aGVyIGVmZm9ydAogICogZnJvbSBhIGRyaXZlcidzIHByb2JlKCkgbWV0aG9kLikKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggQGRldi0+c2VtIGhlbGQuCisgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIGRldmljZSBsb2NrIGhlbGQuCiAgKi8KIGludCBkZXZpY2VfYmluZF9kcml2ZXIoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtMTkwLDggKzE5MCw4IEBACiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgLUVOT0RFViBpZiB0aGUgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkLAogICogMSBpZiB0aGUgZGV2aWNlIGlzIGJvdW5kIHN1Y2Nlc3NmdWxseSBhbmQgMCBvdGhlcndpc2UuCiAgKgotICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEBkZXYtPnNlbSBoZWxkLiAgV2hlbiBjYWxsZWQgZm9yIGEKLSAqIFVTQiBpbnRlcmZhY2UsIEBkZXYtPnBhcmVudC0+c2VtIG11c3QgYmUgaGVsZCBhcyB3ZWxsLgorICogVGhpcyBmdW5jdGlvbiBtdXN0IGJlIGNhbGxlZCB3aXRoIEBkZXYgbG9jayBoZWxkLiAgV2hlbiBjYWxsZWQgZm9yIGEKKyAqIFVTQiBpbnRlcmZhY2UsIEBkZXYtPnBhcmVudCBsb2NrIG11c3QgYmUgaGVsZCBhcyB3ZWxsLgogICovCiBpbnQgZHJpdmVyX3Byb2JlX2RldmljZShzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2LCBzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CkBAIC0yMzMsMTMgKzIzMywxMyBAQAogICogMCBpZiBubyBtYXRjaGluZyBkcml2ZXIgd2FzIGZvdW5kOwogICogLUVOT0RFViBpZiB0aGUgZGV2aWNlIGlzIG5vdCByZWdpc3RlcmVkLgogICoKLSAqIFdoZW4gY2FsbGVkIGZvciBhIFVTQiBpbnRlcmZhY2UsIEBkZXYtPnBhcmVudC0+c2VtIG11c3QgYmUgaGVsZC4KKyAqIFdoZW4gY2FsbGVkIGZvciBhIFVTQiBpbnRlcmZhY2UsIEBkZXYtPnBhcmVudCBsb2NrIG11c3QgYmUgaGVsZC4KICAqLwogaW50IGRldmljZV9hdHRhY2goc3RydWN0IGRldmljZSAqZGV2KQogewogCWludCByZXQgPSAwOwogCi0JZG93bigmZGV2LT5zZW0pOworCWRldmljZV9sb2NrKGRldik7CiAJaWYgKGRldi0+ZHJpdmVyKSB7CiAJCXJldCA9IGRldmljZV9iaW5kX2RyaXZlcihkZXYpOwogCQlpZiAocmV0ID09IDApCkBAIC0yNTMsNyArMjUzLDcgQEAKIAkJcmV0ID0gYnVzX2Zvcl9lYWNoX2RydihkZXYtPmJ1cywgTlVMTCwgZGV2LCBfX2RldmljZV9hdHRhY2gpOwogCQlwbV9ydW50aW1lX3B1dF9zeW5jKGRldik7CiAJfQotCXVwKCZkZXYtPnNlbSk7CisJZGV2aWNlX3VubG9jayhkZXYpOwogCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2VfYXR0YWNoKTsKQEAgLTI3NiwxMyArMjc2LDEzIEBACiAJCXJldHVybiAwOwogCiAJaWYgKGRldi0+cGFyZW50KQkvKiBOZWVkZWQgZm9yIFVTQiAqLwotCQlkb3duKCZkZXYtPnBhcmVudC0+c2VtKTsKLQlkb3duKCZkZXYtPnNlbSk7CisJCWRldmljZV9sb2NrKGRldi0+cGFyZW50KTsKKwlkZXZpY2VfbG9jayhkZXYpOwogCWlmICghZGV2LT5kcml2ZXIpCiAJCWRyaXZlcl9wcm9iZV9kZXZpY2UoZHJ2LCBkZXYpOwotCXVwKCZkZXYtPnNlbSk7CisJZGV2aWNlX3VubG9jayhkZXYpOwogCWlmIChkZXYtPnBhcmVudCkKLQkJdXAoJmRldi0+cGFyZW50LT5zZW0pOworCQlkZXZpY2VfdW5sb2NrKGRldi0+cGFyZW50KTsKIAogCXJldHVybiAwOwogfQpAQCAtMzAzLDggKzMwMyw4IEBACiBFWFBPUlRfU1lNQk9MX0dQTChkcml2ZXJfYXR0YWNoKTsKIAogLyoKLSAqIF9fZGV2aWNlX3JlbGVhc2VfZHJpdmVyKCkgbXVzdCBiZSBjYWxsZWQgd2l0aCBAZGV2LT5zZW0gaGVsZC4KLSAqIFdoZW4gY2FsbGVkIGZvciBhIFVTQiBpbnRlcmZhY2UsIEBkZXYtPnBhcmVudC0+c2VtIG11c3QgYmUgaGVsZCBhcyB3ZWxsLgorICogX19kZXZpY2VfcmVsZWFzZV9kcml2ZXIoKSBtdXN0IGJlIGNhbGxlZCB3aXRoIEBkZXYgbG9jayBoZWxkLgorICogV2hlbiBjYWxsZWQgZm9yIGEgVVNCIGludGVyZmFjZSwgQGRldi0+cGFyZW50IGxvY2sgbXVzdCBiZSBoZWxkIGFzIHdlbGwuCiAgKi8KIHN0YXRpYyB2b2lkIF9fZGV2aWNlX3JlbGVhc2VfZHJpdmVyKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTM0Myw3ICszNDMsNyBAQAogICogQGRldjogZGV2aWNlLgogICoKICAqIE1hbnVhbGx5IGRldGFjaCBkZXZpY2UgZnJvbSBkcml2ZXIuCi0gKiBXaGVuIGNhbGxlZCBmb3IgYSBVU0IgaW50ZXJmYWNlLCBAZGV2LT5wYXJlbnQtPnNlbSBtdXN0IGJlIGhlbGQuCisgKiBXaGVuIGNhbGxlZCBmb3IgYSBVU0IgaW50ZXJmYWNlLCBAZGV2LT5wYXJlbnQgbG9jayBtdXN0IGJlIGhlbGQuCiAgKi8KIHZvaWQgZGV2aWNlX3JlbGVhc2VfZHJpdmVyKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTM1Miw5ICszNTIsOSBAQAogCSAqIHdpdGhpbiB0aGVpciAtPnJlbW92ZSBjYWxsYmFjayBmb3IgdGhlIHNhbWUgZGV2aWNlLCB0aGV5CiAJICogd2lsbCBkZWFkbG9jayByaWdodCBoZXJlLgogCSAqLwotCWRvd24oJmRldi0+c2VtKTsKKwlkZXZpY2VfbG9jayhkZXYpOwogCV9fZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldik7Ci0JdXAoJmRldi0+c2VtKTsKKwlkZXZpY2VfdW5sb2NrKGRldik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkZXZpY2VfcmVsZWFzZV9kcml2ZXIpOwogCkBAIC0zODEsMTMgKzM4MSwxMyBAQAogCQlzcGluX3VubG9jaygmZHJ2LT5wLT5rbGlzdF9kZXZpY2VzLmtfbG9jayk7CiAKIAkJaWYgKGRldi0+cGFyZW50KQkvKiBOZWVkZWQgZm9yIFVTQiAqLwotCQkJZG93bigmZGV2LT5wYXJlbnQtPnNlbSk7Ci0JCWRvd24oJmRldi0+c2VtKTsKKwkJCWRldmljZV9sb2NrKGRldi0+cGFyZW50KTsKKwkJZGV2aWNlX2xvY2soZGV2KTsKIAkJaWYgKGRldi0+ZHJpdmVyID09IGRydikKIAkJCV9fZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRldik7Ci0JCXVwKCZkZXYtPnNlbSk7CisJCWRldmljZV91bmxvY2soZGV2KTsKIAkJaWYgKGRldi0+cGFyZW50KQotCQkJdXAoJmRldi0+cGFyZW50LT5zZW0pOworCQkJZGV2aWNlX3VubG9jayhkZXYtPnBhcmVudCk7CiAJCXB1dF9kZXZpY2UoZGV2KTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvZGV2dG1wZnMuYyBiL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jCmluZGV4IDQyYWU0NTIuLmRhYzQ3OGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jCisrKyBiL2RyaXZlcnMvYmFzZS9kZXZ0bXBmcy5jCkBAIC0zMDEsNiArMzAxLDE5IEBACiAJCWlmIChkZW50cnktPmRfaW5vZGUpIHsKIAkJCWVyciA9IHZmc19nZXRhdHRyKG5kLnBhdGgubW50LCBkZW50cnksICZzdGF0KTsKIAkJCWlmICghZXJyICYmIGRldl9teW5vZGUoZGV2LCBkZW50cnktPmRfaW5vZGUsICZzdGF0KSkgeworCQkJCXN0cnVjdCBpYXR0ciBuZXdhdHRyczsKKwkJCQkvKgorCQkJCSAqIGJlZm9yZSB1bmxpbmtpbmcgdGhpcyBub2RlLCByZXNldCBwZXJtaXNzaW9ucworCQkJCSAqIG9mIHBvc3NpYmxlIHJlZmVyZW5jZXMgbGlrZSBoYXJkbGlua3MKKwkJCQkgKi8KKwkJCQluZXdhdHRycy5pYV91aWQgPSAwOworCQkJCW5ld2F0dHJzLmlhX2dpZCA9IDA7CisJCQkJbmV3YXR0cnMuaWFfbW9kZSA9IHN0YXQubW9kZSAmIH4wNzc3OworCQkJCW5ld2F0dHJzLmlhX3ZhbGlkID0KKwkJCQkJQVRUUl9VSUR8QVRUUl9HSUR8QVRUUl9NT0RFOworCQkJCW11dGV4X2xvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJCQkJbm90aWZ5X2NoYW5nZShkZW50cnksICZuZXdhdHRycyk7CisJCQkJbXV0ZXhfdW5sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCQkJCWVyciA9IHZmc191bmxpbmsobmQucGF0aC5kZW50cnktPmRfaW5vZGUsCiAJCQkJCQkgZGVudHJ5KTsKIAkJCQlpZiAoIWVyciB8fCBlcnIgPT0gLUVOT0VOVCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9maXJtd2FyZV9jbGFzcy5jIGIvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMKaW5kZXggYTk1MDI0MS4uZDBkYzI2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMKKysrIGIvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Ci0jaW5jbHVkZSAiYmFzZS5oIgogCiAjZGVmaW5lIHRvX2RldihvYmopIGNvbnRhaW5lcl9vZihvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopCiAKQEAgLTY5LDcgKzY4LDkgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWZpcm13YXJlX3RpbWVvdXRfc2hvdyhzdHJ1Y3QgY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCitmaXJtd2FyZV90aW1lb3V0X3Nob3coc3RydWN0IGNsYXNzICpjbGFzcywKKwkJICAgICAgc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICAgY2hhciAqYnVmKQogewogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBsb2FkaW5nX3RpbWVvdXQpOwogfQpAQCAtODcsNyArODgsOSBAQAogICoJTm90ZTogemVybyBtZWFucyAnd2FpdCBmb3JldmVyJy4KICAqKi8KIHN0YXRpYyBzc2l6ZV90Ci1maXJtd2FyZV90aW1lb3V0X3N0b3JlKHN0cnVjdCBjbGFzcyAqY2xhc3MsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorZmlybXdhcmVfdGltZW91dF9zdG9yZShzdHJ1Y3QgY2xhc3MgKmNsYXNzLAorCQkJc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCWxvYWRpbmdfdGltZW91dCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CiAJaWYgKGxvYWRpbmdfdGltZW91dCA8IDApCkBAIC02MTAsNyArNjEzLDcgQEAKIH0KIAogLyoqCi0gKiByZXF1ZXN0X2Zpcm13YXJlX25vd2FpdDogYXN5bmNocm9ub3VzIHZlcnNpb24gb2YgcmVxdWVzdF9maXJtd2FyZQorICogcmVxdWVzdF9maXJtd2FyZV9ub3dhaXQgLSBhc3luY2hyb25vdXMgdmVyc2lvbiBvZiByZXF1ZXN0X2Zpcm13YXJlCiAgKiBAbW9kdWxlOiBtb2R1bGUgcmVxdWVzdGluZyB0aGUgZmlybXdhcmUKICAqIEB1ZXZlbnQ6IHNlbmRzIHVldmVudCB0byBjb3B5IHRoZSBmaXJtd2FyZSBpbWFnZSBpZiB0aGlzIGZsYWcKICAqCWlzIG5vbi16ZXJvIGVsc2UgdGhlIGZpcm13YXJlIGNvcHkgbXVzdCBiZSBkb25lIG1hbnVhbGx5LgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL21lbW9yeS5jIGIvZHJpdmVycy9iYXNlL21lbW9yeS5jCmluZGV4IGJkMDI1MDUuLjJmODY5MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9tZW1vcnkuYworKysgYi9kcml2ZXJzL2Jhc2UvbWVtb3J5LmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgc3RydWN0IGtzZXRfdWV2ZW50X29wcyBtZW1vcnlfdWV2ZW50X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3NldF91ZXZlbnRfb3BzIG1lbW9yeV91ZXZlbnRfb3BzID0gewogCS5uYW1lCQk9IG1lbW9yeV91ZXZlbnRfbmFtZSwKIAkudWV2ZW50CQk9IG1lbW9yeV91ZXZlbnQsCiB9OwpAQCAtMzA5LDE3ICszMDksMTggQEAKICAqIEJsb2NrIHNpemUgYXR0cmlidXRlIHN0dWZmCiAgKi8KIHN0YXRpYyBzc2l6ZV90Ci1wcmludF9ibG9ja19zaXplKHN0cnVjdCBjbGFzcyAqY2xhc3MsIGNoYXIgKmJ1ZikKK3ByaW50X2Jsb2NrX3NpemUoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsIHN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICphdHRyLAorCQkgY2hhciAqYnVmKQogewogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiUjbHhcbiIsICh1bnNpZ25lZCBsb25nKVBBR0VTX1BFUl9TRUNUSU9OICogUEFHRV9TSVpFKTsKIH0KIAotc3RhdGljIENMQVNTX0FUVFIoYmxvY2tfc2l6ZV9ieXRlcywgMDQ0NCwgcHJpbnRfYmxvY2tfc2l6ZSwgTlVMTCk7CitzdGF0aWMgU1lTREVWX0NMQVNTX0FUVFIoYmxvY2tfc2l6ZV9ieXRlcywgMDQ0NCwgcHJpbnRfYmxvY2tfc2l6ZSwgTlVMTCk7CiAKIHN0YXRpYyBpbnQgYmxvY2tfc2l6ZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9maWxlKCZtZW1vcnlfc3lzZGV2X2NsYXNzLmtzZXQua29iaiwKLQkJCQkmY2xhc3NfYXR0cl9ibG9ja19zaXplX2J5dGVzLmF0dHIpOworCQkJCSZhdHRyX2Jsb2NrX3NpemVfYnl0ZXMuYXR0cik7CiB9CiAKIC8qCkBAIC0zMzAsNyArMzMxLDggQEAKICAqLwogI2lmZGVmIENPTkZJR19BUkNIX01FTU9SWV9QUk9CRQogc3RhdGljIHNzaXplX3QKLW1lbW9yeV9wcm9iZV9zdG9yZShzdHJ1Y3QgY2xhc3MgKmNsYXNzLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK21lbW9yeV9wcm9iZV9zdG9yZShzdHJ1Y3QgY2xhc3MgKmNsYXNzLCBzdHJ1Y3QgY2xhc3NfYXR0cmlidXRlICphdHRyLAorCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAl1NjQgcGh5c19hZGRyOwogCWludCBuaWQ7CkBAIC0zNjcsNyArMzY5LDkgQEAKIAogLyogU29mdCBvZmZsaW5lIGEgcGFnZSAqLwogc3RhdGljIHNzaXplX3QKLXN0b3JlX3NvZnRfb2ZmbGluZV9wYWdlKHN0cnVjdCBjbGFzcyAqY2xhc3MsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQorc3RvcmVfc29mdF9vZmZsaW5lX3BhZ2Uoc3RydWN0IGNsYXNzICpjbGFzcywKKwkJCXN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlpbnQgcmV0OwogCXU2NCBwZm47CkBAIC0zODQsNyArMzg4LDkgQEAKIAogLyogRm9yY2libHkgb2ZmbGluZSBhIHBhZ2UsIGluY2x1ZGluZyBraWxsaW5nIHByb2Nlc3Nlcy4gKi8KIHN0YXRpYyBzc2l6ZV90Ci1zdG9yZV9oYXJkX29mZmxpbmVfcGFnZShzdHJ1Y3QgY2xhc3MgKmNsYXNzLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0b3JlX2hhcmRfb2ZmbGluZV9wYWdlKHN0cnVjdCBjbGFzcyAqY2xhc3MsCisJCQlzdHJ1Y3QgY2xhc3NfYXR0cmlidXRlICphdHRyLAorCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJaW50IHJldDsKIAl1NjQgcGZuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL25vZGUuYyBiL2RyaXZlcnMvYmFzZS9ub2RlLmMKaW5kZXggNzAxMjI3OS4uYWQ0MzE4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL25vZGUuYworKysgYi9kcml2ZXJzL2Jhc2Uvbm9kZS5jCkBAIC0xNiw4ICsxNiwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KIAorc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICpub2RlX3N0YXRlX2F0dHJzW107CisKIHN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIG5vZGVfY2xhc3MgPSB7CiAJLm5hbWUgPSAibm9kZSIsCisJLmF0dHJzID0gbm9kZV9zdGF0ZV9hdHRycywKIH07CiAKIApAQCAtNTQ0LDc2ICs1NDcsNTIgQEAKIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIHNzaXplX3QgcHJpbnRfbm9kZXNfcG9zc2libGUoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gcHJpbnRfbm9kZXNfc3RhdGUoTl9QT1NTSUJMRSwgYnVmKTsKLX0KLQotc3RhdGljIHNzaXplX3QgcHJpbnRfbm9kZXNfb25saW5lKHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHByaW50X25vZGVzX3N0YXRlKE5fT05MSU5FLCBidWYpOwotfQotCi1zdGF0aWMgc3NpemVfdCBwcmludF9ub2Rlc19oYXNfbm9ybWFsX21lbW9yeShzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbGFzcywKLQkJCQkJCWNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gcHJpbnRfbm9kZXNfc3RhdGUoTl9OT1JNQUxfTUVNT1JZLCBidWYpOwotfQotCi1zdGF0aWMgc3NpemVfdCBwcmludF9ub2Rlc19oYXNfY3B1KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHByaW50X25vZGVzX3N0YXRlKE5fQ1BVLCBidWYpOwotfQotCi1zdGF0aWMgU1lTREVWX0NMQVNTX0FUVFIocG9zc2libGUsIDA0NDQsIHByaW50X25vZGVzX3Bvc3NpYmxlLCBOVUxMKTsKLXN0YXRpYyBTWVNERVZfQ0xBU1NfQVRUUihvbmxpbmUsIDA0NDQsIHByaW50X25vZGVzX29ubGluZSwgTlVMTCk7Ci1zdGF0aWMgU1lTREVWX0NMQVNTX0FUVFIoaGFzX25vcm1hbF9tZW1vcnksIDA0NDQsIHByaW50X25vZGVzX2hhc19ub3JtYWxfbWVtb3J5LAotCQkJCQkJCQkJTlVMTCk7Ci1zdGF0aWMgU1lTREVWX0NMQVNTX0FUVFIoaGFzX2NwdSwgMDQ0NCwgcHJpbnRfbm9kZXNfaGFzX2NwdSwgTlVMTCk7Ci0KLSNpZmRlZiBDT05GSUdfSElHSE1FTQotc3RhdGljIHNzaXplX3QgcHJpbnRfbm9kZXNfaGFzX2hpZ2hfbWVtb3J5KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLAotCQkJCQkJIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gcHJpbnRfbm9kZXNfc3RhdGUoTl9ISUdIX01FTU9SWSwgYnVmKTsKLX0KLQotc3RhdGljIFNZU0RFVl9DTEFTU19BVFRSKGhhc19oaWdoX21lbW9yeSwgMDQ0NCwgcHJpbnRfbm9kZXNfaGFzX2hpZ2hfbWVtb3J5LAotCQkJCQkJCQkJIE5VTEwpOwotI2VuZGlmCi0KLXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICpub2RlX3N0YXRlX2F0dHJbXSA9IHsKLQkmYXR0cl9wb3NzaWJsZSwKLQkmYXR0cl9vbmxpbmUsCi0JJmF0dHJfaGFzX25vcm1hbF9tZW1vcnksCi0jaWZkZWYgQ09ORklHX0hJR0hNRU0KLQkmYXR0cl9oYXNfaGlnaF9tZW1vcnksCi0jZW5kaWYKLQkmYXR0cl9oYXNfY3B1LAorc3RydWN0IG5vZGVfYXR0ciB7CisJc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgYXR0cjsKKwllbnVtIG5vZGVfc3RhdGVzIHN0YXRlOwogfTsKIAotc3RhdGljIGludCBub2RlX3N0YXRlc19pbml0KHZvaWQpCitzdGF0aWMgc3NpemVfdCBzaG93X25vZGVfc3RhdGUoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsCisJCQkgICAgICAgc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlpbnQgaTsKLQlpbnQgZXJyID0gMDsKLQotCWZvciAoaSA9IDA7ICBpIDwgTlJfTk9ERV9TVEFURVM7IGkrKykgewotCQlpbnQgcmV0OwotCQlyZXQgPSBzeXNkZXZfY2xhc3NfY3JlYXRlX2ZpbGUoJm5vZGVfY2xhc3MsIG5vZGVfc3RhdGVfYXR0cltpXSk7Ci0JCWlmICghZXJyKQotCQkJZXJyID0gcmV0OwotCX0KLQlyZXR1cm4gZXJyOworCXN0cnVjdCBub2RlX2F0dHIgKm5hID0gY29udGFpbmVyX29mKGF0dHIsIHN0cnVjdCBub2RlX2F0dHIsIGF0dHIpOworCXJldHVybiBwcmludF9ub2Rlc19zdGF0ZShuYS0+c3RhdGUsIGJ1Zik7CiB9CiAKKyNkZWZpbmUgX05PREVfQVRUUihuYW1lLCBzdGF0ZSkgXAorCXsgX1NZU0RFVl9DTEFTU19BVFRSKG5hbWUsIDA0NDQsIHNob3dfbm9kZV9zdGF0ZSwgTlVMTCksIHN0YXRlIH0KKworc3RhdGljIHN0cnVjdCBub2RlX2F0dHIgbm9kZV9zdGF0ZV9hdHRyW10gPSB7CisJX05PREVfQVRUUihwb3NzaWJsZSwgTl9QT1NTSUJMRSksCisJX05PREVfQVRUUihvbmxpbmUsIE5fT05MSU5FKSwKKwlfTk9ERV9BVFRSKGhhc19ub3JtYWxfbWVtb3J5LCBOX05PUk1BTF9NRU1PUlkpLAorCV9OT0RFX0FUVFIoaGFzX2NwdSwgTl9DUFUpLAorI2lmZGVmIENPTkZJR19ISUdITUVNCisJX05PREVfQVRUUihoYXNfaGlnaF9tZW1vcnksIE5fSElHSF9NRU1PUlkpLAorI2VuZGlmCit9OworCitzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKm5vZGVfc3RhdGVfYXR0cnNbXSA9IHsKKwkmbm9kZV9zdGF0ZV9hdHRyWzBdLmF0dHIsCisJJm5vZGVfc3RhdGVfYXR0clsxXS5hdHRyLAorCSZub2RlX3N0YXRlX2F0dHJbMl0uYXR0ciwKKwkmbm9kZV9zdGF0ZV9hdHRyWzNdLmF0dHIsCisjaWZkZWYgQ09ORklHX0hJR0hNRU0KKwkmbm9kZV9zdGF0ZV9hdHRyWzRdLmF0dHIsCisjZW5kaWYKKwlOVUxMCit9OworCiAjZGVmaW5lIE5PREVfQ0FMTEJBQ0tfUFJJCTIJLyogbG93ZXIgdGhhbiBTTEFCICovCiBzdGF0aWMgaW50IF9faW5pdCByZWdpc3Rlcl9ub2RlX3R5cGUodm9pZCkKIHsKIAlpbnQgcmV0OwogCisgCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKG5vZGVfc3RhdGVfYXR0cikgIT0gTlJfTk9ERV9TVEFURVMpOworIAlCVUlMRF9CVUdfT04oQVJSQVlfU0laRShub2RlX3N0YXRlX2F0dHJzKS0xICE9IE5SX05PREVfU1RBVEVTKTsKKwogCXJldCA9IHN5c2Rldl9jbGFzc19yZWdpc3Rlcigmbm9kZV9jbGFzcyk7CiAJaWYgKCFyZXQpIHsKLQkJcmV0ID0gbm9kZV9zdGF0ZXNfaW5pdCgpOwogCQlob3RwbHVnX21lbW9yeV9ub3RpZmllcihub2RlX21lbW9yeV9jYWxsYmFjaywKIAkJCQkJTk9ERV9DQUxMQkFDS19QUkkpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jIGIvZHJpdmVycy9iYXNlL3BsYXRmb3JtLmMKaW5kZXggNThlZmFmMi4uMWJhOWQ2MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvYmFzZS9wbGF0Zm9ybS5jCkBAIC0xMjgsNyArMTI4LDcgQEAKIH07CiAKIC8qKgotICogcGxhdGZvcm1fZGV2aWNlX3B1dAorICogcGxhdGZvcm1fZGV2aWNlX3B1dCAtIGRlc3Ryb3kgYSBwbGF0Zm9ybSBkZXZpY2UKICAqIEBwZGV2OiBwbGF0Zm9ybSBkZXZpY2UgdG8gZnJlZQogICoKICAqIEZyZWUgYWxsIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggYSBwbGF0Zm9ybSBkZXZpY2UuICBUaGlzIGZ1bmN0aW9uIG11c3QKQEAgLTE1Miw3ICsxNTIsNyBAQAogfQogCiAvKioKLSAqIHBsYXRmb3JtX2RldmljZV9hbGxvYworICogcGxhdGZvcm1fZGV2aWNlX2FsbG9jIC0gY3JlYXRlIGEgcGxhdGZvcm0gZGV2aWNlCiAgKiBAbmFtZTogYmFzZSBuYW1lIG9mIHRoZSBkZXZpY2Ugd2UncmUgYWRkaW5nCiAgKiBAaWQ6IGluc3RhbmNlIGlkCiAgKgpAQCAtMTc3LDcgKzE3Nyw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChwbGF0Zm9ybV9kZXZpY2VfYWxsb2MpOwogCiAvKioKLSAqIHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzCisgKiBwbGF0Zm9ybV9kZXZpY2VfYWRkX3Jlc291cmNlcyAtIGFkZCByZXNvdXJjZXMgdG8gYSBwbGF0Zm9ybSBkZXZpY2UKICAqIEBwZGV2OiBwbGF0Zm9ybSBkZXZpY2UgYWxsb2NhdGVkIGJ5IHBsYXRmb3JtX2RldmljZV9hbGxvYyB0byBhZGQgcmVzb3VyY2VzIHRvCiAgKiBAcmVzOiBzZXQgb2YgcmVzb3VyY2VzIHRoYXQgbmVlZHMgdG8gYmUgYWxsb2NhdGVkIGZvciB0aGUgZGV2aWNlCiAgKiBAbnVtOiBudW1iZXIgb2YgcmVzb3VyY2VzCkBAIC0yMDIsNyArMjAyLDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKTsKIAogLyoqCi0gKiBwbGF0Zm9ybV9kZXZpY2VfYWRkX2RhdGEKKyAqIHBsYXRmb3JtX2RldmljZV9hZGRfZGF0YSAtIGFkZCBwbGF0Zm9ybS1zcGVjaWZpYyBkYXRhIHRvIGEgcGxhdGZvcm0gZGV2aWNlCiAgKiBAcGRldjogcGxhdGZvcm0gZGV2aWNlIGFsbG9jYXRlZCBieSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MgdG8gYWRkIHJlc291cmNlcyB0bwogICogQGRhdGE6IHBsYXRmb3JtIHNwZWNpZmljIGRhdGEgZm9yIHRoaXMgcGxhdGZvcm0gZGV2aWNlCiAgKiBAc2l6ZTogc2l6ZSBvZiBwbGF0Zm9ybSBzcGVjaWZpYyBkYXRhCkBAIC0zNDQsNyArMzQ0LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKTsKIAogLyoqCi0gKiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlCisgKiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlIC0gYWRkIGEgcGxhdGZvcm0tbGV2ZWwgZGV2aWNlIGFuZCBpdHMgcmVzb3VyY2VzCiAgKiBAbmFtZTogYmFzZSBuYW1lIG9mIHRoZSBkZXZpY2Ugd2UncmUgYWRkaW5nCiAgKiBAaWQ6IGluc3RhbmNlIGlkCiAgKiBAcmVzOiBzZXQgb2YgcmVzb3VyY2VzIHRoYXQgbmVlZHMgdG8gYmUgYWxsb2NhdGVkIGZvciB0aGUgZGV2aWNlCkBAIC0zOTYsNyArMzk2LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUpOwogCiAvKioKLSAqIHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9kYXRhCisgKiBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfZGF0YSAtIGFkZCBhIHBsYXRmb3JtLWxldmVsIGRldmljZSB3aXRoIHBsYXRmb3JtLXNwZWNpZmljIGRhdGEKICAqIEBwYXJlbnQ6IHBhcmVudCBkZXZpY2UgZm9yIHRoZSBkZXZpY2Ugd2UncmUgYWRkaW5nCiAgKiBAbmFtZTogYmFzZSBuYW1lIG9mIHRoZSBkZXZpY2Ugd2UncmUgYWRkaW5nCiAgKiBAaWQ6IGluc3RhbmNlIGlkCkBAIC00NzMsNyArNDczLDcgQEAKIH0KIAogLyoqCi0gKiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIKKyAqIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlciAtIHJlZ2lzdGVyIGEgZHJpdmVyIGZvciBwbGF0Zm9ybS1sZXZlbCBkZXZpY2VzCiAgKiBAZHJ2OiBwbGF0Zm9ybSBkcml2ZXIgc3RydWN0dXJlCiAgKi8KIGludCBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqZHJ2KQpAQCAtNDkxLDcgKzQ5MSw3IEBACiBFWFBPUlRfU1lNQk9MX0dQTChwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIpOwogCiAvKioKLSAqIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyCisgKiBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlciAtIHVucmVnaXN0ZXIgYSBkcml2ZXIgZm9yIHBsYXRmb3JtLWxldmVsIGRldmljZXMKICAqIEBkcnY6IHBsYXRmb3JtIGRyaXZlciBzdHJ1Y3R1cmUKICAqLwogdm9pZCBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcihzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYpCkBAIC01NDgsNiArNTQ4LDY0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwbGF0Zm9ybV9kcml2ZXJfcHJvYmUpOwogCisvKioKKyAqIHBsYXRmb3JtX2NyZWF0ZV9idW5kbGUgLSByZWdpc3RlciBkcml2ZXIgYW5kIGNyZWF0ZSBjb3JyZXNwb25kaW5nIGRldmljZQorICogQGRyaXZlcjogcGxhdGZvcm0gZHJpdmVyIHN0cnVjdHVyZQorICogQHByb2JlOiB0aGUgZHJpdmVyIHByb2JlIHJvdXRpbmUsIHByb2JhYmx5IGZyb20gYW4gX19pbml0IHNlY3Rpb24KKyAqIEByZXM6IHNldCBvZiByZXNvdXJjZXMgdGhhdCBuZWVkcyB0byBiZSBhbGxvY2F0ZWQgZm9yIHRoZSBkZXZpY2UKKyAqIEBuX3JlczogbnVtYmVyIG9mIHJlc291cmNlcworICogQGRhdGE6IHBsYXRmb3JtIHNwZWNpZmljIGRhdGEgZm9yIHRoaXMgcGxhdGZvcm0gZGV2aWNlCisgKiBAc2l6ZTogc2l6ZSBvZiBwbGF0Zm9ybSBzcGVjaWZpYyBkYXRhCisgKgorICogVXNlIHRoaXMgaW4gbGVnYWN5LXN0eWxlIG1vZHVsZXMgdGhhdCBwcm9iZSBoYXJkd2FyZSBkaXJlY3RseSBhbmQKKyAqIHJlZ2lzdGVyIGEgc2luZ2xlIHBsYXRmb3JtIGRldmljZSBhbmQgY29ycmVzcG9uZGluZyBwbGF0Zm9ybSBkcml2ZXIuCisgKi8KK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiBfX2luaXRfb3JfbW9kdWxlIHBsYXRmb3JtX2NyZWF0ZV9idW5kbGUoCisJCQlzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcml2ZXIsCisJCQlpbnQgKCpwcm9iZSkoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKSwKKwkJCXN0cnVjdCByZXNvdXJjZSAqcmVzLCB1bnNpZ25lZCBpbnQgbl9yZXMsCisJCQljb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OworCWludCBlcnJvcjsKKworCXBkZXYgPSBwbGF0Zm9ybV9kZXZpY2VfYWxsb2MoZHJpdmVyLT5kcml2ZXIubmFtZSwgLTEpOworCWlmICghcGRldikgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwlpZiAocmVzKSB7CisJCWVycm9yID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgcmVzLCBuX3Jlcyk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZXJyX3BkZXZfcHV0OworCX0KKworCWlmIChkYXRhKSB7CisJCWVycm9yID0gcGxhdGZvcm1fZGV2aWNlX2FkZF9kYXRhKHBkZXYsIGRhdGEsIHNpemUpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGVycl9wZGV2X3B1dDsKKwl9CisKKwllcnJvciA9IHBsYXRmb3JtX2RldmljZV9hZGQocGRldik7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycl9wZGV2X3B1dDsKKworCWVycm9yID0gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKGRyaXZlciwgcHJvYmUpOworCWlmIChlcnJvcikKKwkJZ290byBlcnJfcGRldl9kZWw7CisKKwlyZXR1cm4gcGRldjsKKworZXJyX3BkZXZfZGVsOgorCXBsYXRmb3JtX2RldmljZV9kZWwocGRldik7CitlcnJfcGRldl9wdXQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKK2Vycl9vdXQ6CisJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOworfQorRVhQT1JUX1NZTUJPTF9HUEwocGxhdGZvcm1fY3JlYXRlX2J1bmRsZSk7CisKIC8qIG1vZGFsaWFzIHN1cHBvcnQgZW5hYmxlcyBtb3JlIGhhbmRzLW9mZiB1c2Vyc3BhY2Ugc2V0dXA6CiAgKiAoYSkgZW52aXJvbm1lbnQgdmFyaWFibGUgbGV0cyBuZXctc3R5bGUgaG90cGx1ZyBldmVudHMgd29yayBvbmNlIHN5c3RlbSBpcwogICogICAgIGZ1bGx5IHJ1bm5pbmc6ICAibW9kcHJvYmUgJE1PREFMSUFTIgpAQCAtNTc4LDcgKzYzNiw3IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlX2lkICpwbGF0Zm9ybV9tYXRjaF9pZCgKLQkJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgKmlkLAorCQkJY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZCAqaWQsCiAJCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXdoaWxlIChpZC0+bmFtZVswXSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL3Bvd2VyL01ha2VmaWxlIGIvZHJpdmVycy9iYXNlL3Bvd2VyL01ha2VmaWxlCmluZGV4IDNjZTM1MTkuLjg5ZGU3NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvTWFrZWZpbGUKQEAgLTEsNiArMSw3IEBACiBvYmotJChDT05GSUdfUE0pCSs9IHN5c2ZzLm8KIG9iai0kKENPTkZJR19QTV9TTEVFUCkJKz0gbWFpbi5vCiBvYmotJChDT05GSUdfUE1fUlVOVElNRSkJKz0gcnVudGltZS5vCitvYmotJChDT05GSUdfUE1fT1BTKQkrPSBnZW5lcmljX29wcy5vCiBvYmotJChDT05GSUdfUE1fVFJBQ0VfUlRDKQkrPSB0cmFjZS5vCiAKIGNjZmxhZ3MtJChDT05GSUdfREVCVUdfRFJJVkVSKSA6PSAtRERFQlVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvZ2VuZXJpY19vcHMuYyBiL2RyaXZlcnMvYmFzZS9wb3dlci9nZW5lcmljX29wcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMjlkNDkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvZ2VuZXJpY19vcHMuYwpAQCAtMCwwICsxLDIzMyBAQAorLyoKKyAqIGRyaXZlcnMvYmFzZS9wb3dlci9nZW5lcmljX29wcy5jIC0gR2VuZXJpYyBQTSBjYWxsYmFja3MgZm9yIHN1YnN5c3RlbXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPiwgTm92ZWxsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTHYyLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KKworI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisvKioKKyAqIHBtX2dlbmVyaWNfcnVudGltZV9pZGxlIC0gR2VuZXJpYyBydW50aW1lIGlkbGUgY2FsbGJhY2sgZm9yIHN1YnN5c3RlbXMuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICoKKyAqIElmIFBNIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoZSBAZGV2J3MgZHJpdmVyIGFuZCB0aGV5IGluY2x1ZGUKKyAqIC0+cnVudGltZV9pZGxlKCksIGV4ZWN1dGUgaXQgYW5kIHJldHVybiBpdHMgZXJyb3IgY29kZSwgaWYgbm9uemVyby4KKyAqIE90aGVyd2lzZSwgZXhlY3V0ZSBwbV9ydW50aW1lX3N1c3BlbmQoKSBmb3IgdGhlIGRldmljZSBhbmQgcmV0dXJuIDAuCisgKi8KK2ludCBwbV9nZW5lcmljX3J1bnRpbWVfaWRsZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOworCisJaWYgKHBtICYmIHBtLT5ydW50aW1lX2lkbGUpIHsKKwkJaW50IHJldCA9IHBtLT5ydW50aW1lX2lkbGUoZGV2KTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcG1fcnVudGltZV9zdXNwZW5kKGRldik7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbV9nZW5lcmljX3J1bnRpbWVfaWRsZSk7CisKKy8qKgorICogcG1fZ2VuZXJpY19ydW50aW1lX3N1c3BlbmQgLSBHZW5lcmljIHJ1bnRpbWUgc3VzcGVuZCBjYWxsYmFjayBmb3Igc3Vic3lzdGVtcy4KKyAqIEBkZXY6IERldmljZSB0byBzdXNwZW5kLgorICoKKyAqIElmIFBNIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgZm9yIHRoZSBAZGV2J3MgZHJpdmVyIGFuZCB0aGV5IGluY2x1ZGUKKyAqIC0+cnVudGltZV9zdXNwZW5kKCksIGV4ZWN1dGUgaXQgYW5kIHJldHVybiBpdHMgZXJyb3IgY29kZS4gIE90aGVyd2lzZSwKKyAqIHJldHVybiAtRUlOVkFMLgorICovCitpbnQgcG1fZ2VuZXJpY19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKwlpbnQgcmV0OworCisJcmV0ID0gcG0gJiYgcG0tPnJ1bnRpbWVfc3VzcGVuZCA/IHBtLT5ydW50aW1lX3N1c3BlbmQoZGV2KSA6IC1FSU5WQUw7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwocG1fZ2VuZXJpY19ydW50aW1lX3N1c3BlbmQpOworCisvKioKKyAqIHBtX2dlbmVyaWNfcnVudGltZV9yZXN1bWUgLSBHZW5lcmljIHJ1bnRpbWUgcmVzdW1lIGNhbGxiYWNrIGZvciBzdWJzeXN0ZW1zLgorICogQGRldjogRGV2aWNlIHRvIHJlc3VtZS4KKyAqCisgKiBJZiBQTSBvcGVyYXRpb25zIGFyZSBkZWZpbmVkIGZvciB0aGUgQGRldidzIGRyaXZlciBhbmQgdGhleSBpbmNsdWRlCisgKiAtPnJ1bnRpbWVfcmVzdW1lKCksIGV4ZWN1dGUgaXQgYW5kIHJldHVybiBpdHMgZXJyb3IgY29kZS4gIE90aGVyd2lzZSwKKyAqIHJldHVybiAtRUlOVkFMLgorICovCitpbnQgcG1fZ2VuZXJpY19ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOworCWludCByZXQ7CisKKwlyZXQgPSBwbSAmJiBwbS0+cnVudGltZV9yZXN1bWUgPyBwbS0+cnVudGltZV9yZXN1bWUoZGV2KSA6IC1FSU5WQUw7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwocG1fZ2VuZXJpY19ydW50aW1lX3Jlc3VtZSk7CisjZW5kaWYgLyogQ09ORklHX1BNX1JVTlRJTUUgKi8KKworI2lmZGVmIENPTkZJR19QTV9TTEVFUAorLyoqCisgKiBfX3BtX2dlbmVyaWNfY2FsbCAtIEdlbmVyaWMgc3VzcGVuZC9mcmVlemUvcG93ZXJvZmYvdGhhdyBzdWJzeXN0ZW0gY2FsbGJhY2suCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICogQGV2ZW50OiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gdW5kZXIgd2F5LgorICoKKyAqIElmIHRoZSBkZXZpY2UgaGFzIG5vdCBiZWVuIHN1c3BlbmRlZCBhdCBydW4gdGltZSwgZXhlY3V0ZSB0aGUKKyAqIHN1c3BlbmQvZnJlZXplL3Bvd2Vyb2ZmL3RoYXcgY2FsbGJhY2sgcHJvdmlkZWQgYnkgaXRzIGRyaXZlciwgaWYgZGVmaW5lZCwgYW5kCisgKiByZXR1cm4gaXRzIGVycm9yIGNvZGUuICBPdGhlcndpc2UsIHJldHVybiB6ZXJvLgorICovCitzdGF0aWMgaW50IF9fcG1fZ2VuZXJpY19jYWxsKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGV2ZW50KQoreworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKKwlpbnQgKCpjYWxsYmFjaykoc3RydWN0IGRldmljZSAqKTsKKworCWlmICghcG0gfHwgcG1fcnVudGltZV9zdXNwZW5kZWQoZGV2KSkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKGV2ZW50KSB7CisJY2FzZSBQTV9FVkVOVF9TVVNQRU5EOgorCQljYWxsYmFjayA9IHBtLT5zdXNwZW5kOworCQlicmVhazsKKwljYXNlIFBNX0VWRU5UX0ZSRUVaRToKKwkJY2FsbGJhY2sgPSBwbS0+ZnJlZXplOworCQlicmVhazsKKwljYXNlIFBNX0VWRU5UX0hJQkVSTkFURToKKwkJY2FsbGJhY2sgPSBwbS0+cG93ZXJvZmY7CisJCWJyZWFrOworCWNhc2UgUE1fRVZFTlRfVEhBVzoKKwkJY2FsbGJhY2sgPSBwbS0+dGhhdzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJY2FsbGJhY2sgPSBOVUxMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gY2FsbGJhY2sgPyBjYWxsYmFjayhkZXYpIDogMDsKK30KKworLyoqCisgKiBwbV9nZW5lcmljX3N1c3BlbmQgLSBHZW5lcmljIHN1c3BlbmQgY2FsbGJhY2sgZm9yIHN1YnN5c3RlbXMuCisgKiBAZGV2OiBEZXZpY2UgdG8gc3VzcGVuZC4KKyAqLworaW50IHBtX2dlbmVyaWNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIF9fcG1fZ2VuZXJpY19jYWxsKGRldiwgUE1fRVZFTlRfU1VTUEVORCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbV9nZW5lcmljX3N1c3BlbmQpOworCisvKioKKyAqIHBtX2dlbmVyaWNfZnJlZXplIC0gR2VuZXJpYyBmcmVlemUgY2FsbGJhY2sgZm9yIHN1YnN5c3RlbXMuCisgKiBAZGV2OiBEZXZpY2UgdG8gZnJlZXplLgorICovCitpbnQgcG1fZ2VuZXJpY19mcmVlemUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBfX3BtX2dlbmVyaWNfY2FsbChkZXYsIFBNX0VWRU5UX0ZSRUVaRSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwbV9nZW5lcmljX2ZyZWV6ZSk7CisKKy8qKgorICogcG1fZ2VuZXJpY19wb3dlcm9mZiAtIEdlbmVyaWMgcG93ZXJvZmYgY2FsbGJhY2sgZm9yIHN1YnN5c3RlbXMuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICovCitpbnQgcG1fZ2VuZXJpY19wb3dlcm9mZihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIF9fcG1fZ2VuZXJpY19jYWxsKGRldiwgUE1fRVZFTlRfSElCRVJOQVRFKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtX2dlbmVyaWNfcG93ZXJvZmYpOworCisvKioKKyAqIHBtX2dlbmVyaWNfdGhhdyAtIEdlbmVyaWMgdGhhdyBjYWxsYmFjayBmb3Igc3Vic3lzdGVtcy4KKyAqIEBkZXY6IERldmljZSB0byB0aGF3LgorICovCitpbnQgcG1fZ2VuZXJpY190aGF3KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gX19wbV9nZW5lcmljX2NhbGwoZGV2LCBQTV9FVkVOVF9USEFXKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtX2dlbmVyaWNfdGhhdyk7CisKKy8qKgorICogX19wbV9nZW5lcmljX3Jlc3VtZSAtIEdlbmVyaWMgcmVzdW1lL3Jlc3RvcmUgY2FsbGJhY2sgZm9yIHN1YnN5c3RlbXMuCisgKiBAZGV2OiBEZXZpY2UgdG8gaGFuZGxlLgorICogQGV2ZW50OiBQTSB0cmFuc2l0aW9uIG9mIHRoZSBzeXN0ZW0gdW5kZXIgd2F5LgorICoKKyAqIEV4ZWN1dGUgdGhlIHJlc3VtZS9yZXNvdHJlIGNhbGxiYWNrIHByb3ZpZGVkIGJ5IHRoZSBAZGV2J3MgZHJpdmVyLCBpZgorICogZGVmaW5lZC4gIElmIGl0IHJldHVybnMgMCwgY2hhbmdlIHRoZSBkZXZpY2UncyBydW50aW1lIFBNIHN0YXR1cyB0byAnYWN0aXZlJy4KKyAqIFJldHVybiB0aGUgY2FsbGJhY2sncyBlcnJvciBjb2RlLgorICovCitzdGF0aWMgaW50IF9fcG1fZ2VuZXJpY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgZXZlbnQpCit7CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOworCWludCAoKmNhbGxiYWNrKShzdHJ1Y3QgZGV2aWNlICopOworCWludCByZXQ7CisKKwlpZiAoIXBtKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoZXZlbnQpIHsKKwljYXNlIFBNX0VWRU5UX1JFU1VNRToKKwkJY2FsbGJhY2sgPSBwbS0+cmVzdW1lOworCQlicmVhazsKKwljYXNlIFBNX0VWRU5UX1JFU1RPUkU6CisJCWNhbGxiYWNrID0gcG0tPnJlc3RvcmU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWNhbGxiYWNrID0gTlVMTDsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFjYWxsYmFjaykKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBjYWxsYmFjayhkZXYpOworCWlmICghcmV0KSB7CisJCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOworCQlwbV9ydW50aW1lX3NldF9hY3RpdmUoZGV2KTsKKwkJcG1fcnVudGltZV9lbmFibGUoZGV2KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHBtX2dlbmVyaWNfcmVzdW1lIC0gR2VuZXJpYyByZXN1bWUgY2FsbGJhY2sgZm9yIHN1YnN5c3RlbXMuCisgKiBAZGV2OiBEZXZpY2UgdG8gcmVzdW1lLgorICovCitpbnQgcG1fZ2VuZXJpY19yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBfX3BtX2dlbmVyaWNfcmVzdW1lKGRldiwgUE1fRVZFTlRfUkVTVU1FKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtX2dlbmVyaWNfcmVzdW1lKTsKKworLyoqCisgKiBwbV9nZW5lcmljX3Jlc3RvcmUgLSBHZW5lcmljIHJlc3RvcmUgY2FsbGJhY2sgZm9yIHN1YnN5c3RlbXMuCisgKiBAZGV2OiBEZXZpY2UgdG8gcmVzdG9yZS4KKyAqLworaW50IHBtX2dlbmVyaWNfcmVzdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIF9fcG1fZ2VuZXJpY19yZXN1bWUoZGV2LCBQTV9FVkVOVF9SRVNUT1JFKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBtX2dlbmVyaWNfcmVzdG9yZSk7CisjZW5kaWYgLyogQ09ORklHX1BNX1NMRUVQICovCisKK3N0cnVjdCBkZXZfcG1fb3BzIGdlbmVyaWNfc3Vic3lzX3BtX29wcyA9IHsKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKwkuc3VzcGVuZCA9IHBtX2dlbmVyaWNfc3VzcGVuZCwKKwkucmVzdW1lID0gcG1fZ2VuZXJpY19yZXN1bWUsCisJLmZyZWV6ZSA9IHBtX2dlbmVyaWNfZnJlZXplLAorCS50aGF3ID0gcG1fZ2VuZXJpY190aGF3LAorCS5wb3dlcm9mZiA9IHBtX2dlbmVyaWNfcG93ZXJvZmYsCisJLnJlc3RvcmUgPSBwbV9nZW5lcmljX3Jlc3RvcmUsCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUE1fUlVOVElNRQorCS5ydW50aW1lX3N1c3BlbmQgPSBwbV9nZW5lcmljX3J1bnRpbWVfc3VzcGVuZCwKKwkucnVudGltZV9yZXN1bWUgPSBwbV9nZW5lcmljX3J1bnRpbWVfcmVzdW1lLAorCS5ydW50aW1lX2lkbGUgPSBwbV9nZW5lcmljX3J1bnRpbWVfaWRsZSwKKyNlbmRpZgorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGdlbmVyaWNfc3Vic3lzX3BtX29wcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwppbmRleCAwZTI2YTZmLi5kNDc3ZjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCisrKyBiL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKQEAgLTM1LDggKzM1LDggQEAKICAqIGJlY2F1c2UgY2hpbGRyZW4gYXJlIGd1YXJhbnRlZWQgdG8gYmUgZGlzY292ZXJlZCBhZnRlciBwYXJlbnRzLCBhbmQKICAqIGFyZSBpbnNlcnRlZCBhdCB0aGUgYmFjayBvZiB0aGUgbGlzdCBvbiBkaXNjb3ZlcnkuCiAgKgotICogU2luY2UgZGV2aWNlX3BtX2FkZCgpIG1heSBiZSBjYWxsZWQgd2l0aCBhIGRldmljZSBzZW1hcGhvcmUgaGVsZCwKLSAqIHdlIG11c3QgbmV2ZXIgdHJ5IHRvIGFjcXVpcmUgYSBkZXZpY2Ugc2VtYXBob3JlIHdoaWxlIGhvbGRpbmcKKyAqIFNpbmNlIGRldmljZV9wbV9hZGQoKSBtYXkgYmUgY2FsbGVkIHdpdGggYSBkZXZpY2UgbG9jayBoZWxkLAorICogd2UgbXVzdCBuZXZlciB0cnkgdG8gYWNxdWlyZSBhIGRldmljZSBsb2NrIHdoaWxlIGhvbGRpbmcKICAqIGRwbV9saXN0X211dGV4LgogICovCiAKQEAgLTUwOCw3ICs1MDgsNyBAQAogCVRSQUNFX1JFU1VNRSgwKTsKIAogCWRwbV93YWl0KGRldi0+cGFyZW50LCBhc3luYyk7Ci0JZG93bigmZGV2LT5zZW0pOworCWRldmljZV9sb2NrKGRldik7CiAKIAlkZXYtPnBvd2VyLnN0YXR1cyA9IERQTV9SRVNVTUlORzsKIApAQCAtNTQzLDcgKzU0Myw3IEBACiAJCX0KIAl9CiAgRW5kOgotCXVwKCZkZXYtPnNlbSk7CisJZGV2aWNlX3VubG9jayhkZXYpOwogCWNvbXBsZXRlX2FsbCgmZGV2LT5wb3dlci5jb21wbGV0aW9uKTsKIAogCVRSQUNFX1JFU1VNRShlcnJvcik7CkBAIC02MjksNyArNjI5LDcgQEAKICAqLwogc3RhdGljIHZvaWQgZGV2aWNlX2NvbXBsZXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCWRvd24oJmRldi0+c2VtKTsKKwlkZXZpY2VfbG9jayhkZXYpOwogCiAJaWYgKGRldi0+Y2xhc3MgJiYgZGV2LT5jbGFzcy0+cG0gJiYgZGV2LT5jbGFzcy0+cG0tPmNvbXBsZXRlKSB7CiAJCXBtX2Rldl9kYmcoZGV2LCBzdGF0ZSwgImNvbXBsZXRpbmcgY2xhc3MgIik7CkBAIC02NDYsNyArNjQ2LDcgQEAKIAkJZGV2LT5idXMtPnBtLT5jb21wbGV0ZShkZXYpOwogCX0KIAotCXVwKCZkZXYtPnNlbSk7CisJZGV2aWNlX3VubG9jayhkZXYpOwogfQogCiAvKioKQEAgLTgwOSw3ICs4MDksNyBAQAogCWludCBlcnJvciA9IDA7CiAKIAlkcG1fd2FpdF9mb3JfY2hpbGRyZW4oZGV2LCBhc3luYyk7Ci0JZG93bigmZGV2LT5zZW0pOworCWRldmljZV9sb2NrKGRldik7CiAKIAlpZiAoYXN5bmNfZXJyb3IpCiAJCWdvdG8gRW5kOwpAQCAtODQ5LDcgKzg0OSw3IEBACiAJCWRldi0+cG93ZXIuc3RhdHVzID0gRFBNX09GRjsKIAogIEVuZDoKLQl1cCgmZGV2LT5zZW0pOworCWRldmljZV91bmxvY2soZGV2KTsKIAljb21wbGV0ZV9hbGwoJmRldi0+cG93ZXIuY29tcGxldGlvbik7CiAKIAlyZXR1cm4gZXJyb3I7CkBAIC05MzgsNyArOTM4LDcgQEAKIHsKIAlpbnQgZXJyb3IgPSAwOwogCi0JZG93bigmZGV2LT5zZW0pOworCWRldmljZV9sb2NrKGRldik7CiAKIAlpZiAoZGV2LT5idXMgJiYgZGV2LT5idXMtPnBtICYmIGRldi0+YnVzLT5wbS0+cHJlcGFyZSkgewogCQlwbV9kZXZfZGJnKGRldiwgc3RhdGUsICJwcmVwYXJpbmcgIik7CkBAIC05NjIsNyArOTYyLDcgQEAKIAkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRldi0+Y2xhc3MtPnBtLT5wcmVwYXJlLCBlcnJvcik7CiAJfQogIEVuZDoKLQl1cCgmZGV2LT5zZW0pOworCWRldmljZV91bmxvY2soZGV2KTsKIAogCXJldHVybiBlcnJvcjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9zeXMuYyBiL2RyaXZlcnMvYmFzZS9zeXMuYwppbmRleCAwZDkwMzkwLi44OTgwZmVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2Uvc3lzLmMKKysrIGIvZHJpdmVycy9iYXNlL3N5cy5jCkBAIC01NCw3ICs1NCw3IEBACiAJcmV0dXJuIC1FSU87CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIHN5c2ZzX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIHN5c2ZzX29wcyA9IHsKIAkuc2hvdwk9IHN5c2Rldl9zaG93LAogCS5zdG9yZQk9IHN5c2Rldl9zdG9yZSwKIH07CkBAIC04OSw3ICs4OSw3IEBACiAJc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmNsYXNzX2F0dHIgPSB0b19zeXNkZXZfY2xhc3NfYXR0cihhdHRyKTsKIAogCWlmIChjbGFzc19hdHRyLT5zaG93KQotCQlyZXR1cm4gY2xhc3NfYXR0ci0+c2hvdyhjbGFzcywgYnVmZmVyKTsKKwkJcmV0dXJuIGNsYXNzX2F0dHItPnNob3coY2xhc3MsIGNsYXNzX2F0dHIsIGJ1ZmZlcik7CiAJcmV0dXJuIC1FSU87CiB9CiAKQEAgLTEwMCwxMSArMTAwLDExIEBACiAJc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmNsYXNzX2F0dHIgPSB0b19zeXNkZXZfY2xhc3NfYXR0cihhdHRyKTsKIAogCWlmIChjbGFzc19hdHRyLT5zdG9yZSkKLQkJcmV0dXJuIGNsYXNzX2F0dHItPnN0b3JlKGNsYXNzLCBidWZmZXIsIGNvdW50KTsKKwkJcmV0dXJuIGNsYXNzX2F0dHItPnN0b3JlKGNsYXNzLCBjbGFzc19hdHRyLCBidWZmZXIsIGNvdW50KTsKIAlyZXR1cm4gLUVJTzsKIH0KIAotc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgc3lzZnNfY2xhc3Nfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgc3lzZnNfY2xhc3Nfb3BzID0gewogCS5zaG93CT0gc3lzZGV2X2NsYXNzX3Nob3csCiAJLnN0b3JlCT0gc3lzZGV2X2NsYXNzX3N0b3JlLAogfTsKQEAgLTE0NSwxMyArMTQ1LDIwIEBACiAJaWYgKHJldHZhbCkKIAkJcmV0dXJuIHJldHZhbDsKIAotCXJldHVybiBrc2V0X3JlZ2lzdGVyKCZjbHMtPmtzZXQpOworCXJldHZhbCA9IGtzZXRfcmVnaXN0ZXIoJmNscy0+a3NldCk7CisJaWYgKCFyZXR2YWwgJiYgY2xzLT5hdHRycykKKwkJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2ZpbGVzKCZjbHMtPmtzZXQua29iaiwKKwkJCQkJICAgIChjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICoqKWNscy0+YXR0cnMpOworCXJldHVybiByZXR2YWw7CiB9CiAKIHZvaWQgc3lzZGV2X2NsYXNzX3VucmVnaXN0ZXIoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xzKQogewogCXByX2RlYnVnKCJVbnJlZ2lzdGVyaW5nIHN5c2RldiBjbGFzcyAnJXMnXG4iLAogCQkga29iamVjdF9uYW1lKCZjbHMtPmtzZXQua29iaikpOworCWlmIChjbHMtPmF0dHJzKQorCQlzeXNmc19yZW1vdmVfZmlsZXMoJmNscy0+a3NldC5rb2JqLAorCQkJCSAgIChjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICoqKWNscy0+YXR0cnMpOwogCWtzZXRfdW5yZWdpc3RlcigmY2xzLT5rc2V0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9kcmJkL2RyYmRfaW50LmggYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9pbnQuaAppbmRleCAyYmYzYTZlLi5kOTMwMWU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9pbnQuaAorKysgYi9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9pbnQuaApAQCAtOTUsNyArOTUsNyBAQAogCiAvKiBBbGwgRUVzIG9uIHRoZSBmcmVlIGxpc3Qgc2hvdWxkIGhhdmUgSURfVkFDQU5UICg9PSAwKQogICogZnJlc2hseSBhbGxvY2F0ZWQgRUVzIGdldCAhSURfVkFDQU5UICg9PSAxKQotICogc28gaWYgaXQgc2F5cyAiY2Fubm90IGRlcmVmZXJlbmNlIG51bGwgcG9pbnRlciBhdCBhZHJlc3MgMHgwMDAwMDAwMSIsCisgKiBzbyBpZiBpdCBzYXlzICJjYW5ub3QgZGVyZWZlcmVuY2UgbnVsbCBwb2ludGVyIGF0IGFkZHJlc3MgMHgwMDAwMDAwMSIsCiAgKiBpdCBpcyBtb3N0IGxpa2VseSBvbmUgb2YgdGhlc2UgOiggKi8KIAogI2RlZmluZSBJRF9JTl9TWU5DICAgICAgKDQ3MTFVTEwpCkBAIC0xMTcxLDcgKzExNzEsNyBAQAogLyogTWV0YSBkYXRhIGxheW91dAogICAgV2UgcmVzZXJ2ZSBhIDEyOE1CIEJsb2NrICg0ayBhbGlnbmVkKQogICAgKiBlaXRoZXIgYXQgdGhlIGVuZCBvZiB0aGUgYmFja2luZyBkZXZpY2UKLSAgICogb3Igb24gYSBzZXBlcmF0ZSBtZXRhIGRhdGEgZGV2aWNlLiAqLworICAgKiBvciBvbiBhIHNlcGFyYXRlIG1ldGEgZGF0YSBkZXZpY2UuICovCiAKICNkZWZpbmUgTURfUkVTRVJWRURfU0VDVCAoMTI4TFUgPDwgMTEpICAvKiAxMjggTUIsIHVuaXQgc2VjdG9ycyAqLwogLyogVGhlIGZvbGxvd2luZyBudW1iZXJzIGFyZSBzZWN0b3JzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2RyYmQvZHJiZF9yZXEuaCBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlcS5oCmluZGV4IGYyMmMxYmMuLjE2MTE5ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlcS5oCisrKyBiL2RyaXZlcnMvYmxvY2svZHJiZC9kcmJkX3JlcS5oCkBAIC01Nyw3ICs1Nyw3IEBACiAgKgogICogIEl0IG1heSBtZSBoYW5kZWQgb3ZlciB0byB0aGUgbG9jYWwgZGlzayBzdWJzeXN0ZW0uCiAgKiAgSXQgbWF5IGJlIGNvbXBsZXRlZCBieSB0aGUgbG9jYWwgZGlzayBzdWJzeXN0ZW0sCi0gKiAgICBlaXRoZXIgc3VjZXNzZnVsbHkgb3Igd2l0aCBpby1lcnJvci4KKyAqICAgIGVpdGhlciBzdWNjZXNzZnVsbHkgb3Igd2l0aCBpby1lcnJvci4KICAqICBJbiBjYXNlIGl0IGlzIGEgUkVBRCByZXF1ZXN0LCBhbmQgaXQgZmFpbGVkIGxvY2FsbHksCiAgKiAgICBpdCBtYXkgYmUgcmV0cmllZCByZW1vdGVseS4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jIGIvZHJpdmVycy9ibG9jay9mbG9wcHkuYwppbmRleCBiOWIxMTcwLi45MGM0MDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCisrKyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKQEAgLTE0NCwxMyArMTQ0LDIzIEBACiAgKiBCZXR0ZXIgYXVkaXQgb2YgcmVnaXN0ZXJfYmxrZGV2LgogICovCiAKLSNkZWZpbmUgRkxPUFBZX1NBTklUWV9DSEVDSwogI3VuZGVmICBGTE9QUFlfU0lMRU5UX0RDTF9DTEVBUgogCiAjZGVmaW5lIFJFQUxMWV9TTE9XX0lPCiAKICNkZWZpbmUgREVCVUdUIDIKLSNkZWZpbmUgRENMX0RFQlVHCS8qIGRlYnVnIGRpc2sgY2hhbmdlIGxpbmUgKi8KKworI2RlZmluZSBEUFJJTlQoZm9ybWF0LCBhcmdzLi4uKSBcCisJcHJfaW5mbygiZmxvcHB5JWQ6ICIgZm9ybWF0LCBjdXJyZW50X2RyaXZlLCAjI2FyZ3MpCisKKyNkZWZpbmUgRENMX0RFQlVHCQkvKiBkZWJ1ZyBkaXNrIGNoYW5nZSBsaW5lICovCisjaWZkZWYgRENMX0RFQlVHCisjZGVmaW5lIGRlYnVnX2RjbCh0ZXN0LCBmbXQsIGFyZ3MuLi4pIFwKKwlkbyB7IGlmICgodGVzdCkgJiBGRF9ERUJVRykgRFBSSU5UKGZtdCwgIyNhcmdzKTsgfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIGRlYnVnX2RjbCh0ZXN0LCBmbXQsIGFyZ3MuLi4pIFwKKwlkbyB7IGlmICgwKSBEUFJJTlQoZm10LCAjI2FyZ3MpOyB9IHdoaWxlICgwKQorI2VuZGlmCiAKIC8qIGRvIHByaW50IG1lc3NhZ2VzIGZvciB1bmV4cGVjdGVkIGludGVycnVwdHMgKi8KIHN0YXRpYyBpbnQgcHJpbnRfdW5leCA9IDE7CkBAIC0xODAsNiArMTkwLDggQEAKICNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNldGFibGUuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgkvKiBmb3IgaW52YWxpZGF0ZV9idWZmZXJzKCkgKi8KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAvKgogICogUFMvMiBmbG9wcGllcyBoYXZlIG11Y2ggc2xvd2VyIHN0ZXAgcmF0ZXMgdGhhbiByZWd1bGFyIGZsb3BwaWVzLgpAQCAtMTkxLDggKzIwMyw2IEBACiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogc3RhdGljIGludCBGTE9QUFlfSVJRID0gNjsKIHN0YXRpYyBpbnQgRkxPUFBZX0RNQSA9IDI7CkBAIC0yNDEsOCArMjUxLDYgQEAKIAogc3RhdGljIGludCBpcnFkbWFfYWxsb2NhdGVkOwogCi0jZGVmaW5lIERFVklDRV9OQU1FICJmbG9wcHkiCi0KICNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtwZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Nkcm9tLmg+CS8qIGZvciB0aGUgY29tcGF0aWJpbGl0eSBlamVjdCBpb2N0bCAqLwpAQCAtMjUwLDcgKzI1OCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqY3VycmVudF9yZXE7CiBzdGF0aWMgc3RydWN0IHJlcXVlc3RfcXVldWUgKmZsb3BweV9xdWV1ZTsKLXN0YXRpYyB2b2lkIGRvX2ZkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKiBxKTsKK3N0YXRpYyB2b2lkIGRvX2ZkX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEpOwogCiAjaWZuZGVmIGZkX2dldF9kbWFfcmVzaWR1ZQogI2RlZmluZSBmZF9nZXRfZG1hX3Jlc2lkdWUoKSBnZXRfZG1hX3Jlc2lkdWUoRkxPUFBZX0RNQSkKQEAgLTI2Myw3ICsyNzEsNyBAQAogI2VuZGlmCiAKICNpZm5kZWYgZmRfZG1hX21lbV9hbGxvYwotI2RlZmluZSBmZF9kbWFfbWVtX2FsbG9jKHNpemUpIF9fZ2V0X2RtYV9wYWdlcyhHRlBfS0VSTkVMLGdldF9vcmRlcihzaXplKSkKKyNkZWZpbmUgZmRfZG1hX21lbV9hbGxvYyhzaXplKSBfX2dldF9kbWFfcGFnZXMoR0ZQX0tFUk5FTCwgZ2V0X29yZGVyKHNpemUpKQogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmYWxsYmFja19vbl9ub2RtYV9hbGxvYyhjaGFyICoqYWRkciwgc2l6ZV90IGwpCkBAIC0yNzMsNyArMjgxLDcgQEAKIAkJcmV0dXJuOwkJLyogd2UgaGF2ZSB0aGUgbWVtb3J5ICovCiAJaWYgKGNhbl91c2VfdmlydHVhbF9kbWEgIT0gMikKIAkJcmV0dXJuOwkJLyogbm8gZmFsbGJhY2sgYWxsb3dlZCAqLwotCXByaW50aygiRE1BIG1lbW9yeSBzaG9ydGFnZS4gVGVtcG9yYXJpbHkgZmFsbGluZyBiYWNrIG9uIHZpcnR1YWwgRE1BXG4iKTsKKwlwcl9pbmZvKCJETUEgbWVtb3J5IHNob3J0YWdlLiBUZW1wb3JhcmlseSBmYWxsaW5nIGJhY2sgb24gdmlydHVhbCBETUFcbiIpOwogCSphZGRyID0gKGNoYXIgKilub2RtYV9tZW1fYWxsb2MobCk7CiAjZWxzZQogCXJldHVybjsKQEAgLTI4Myw1OSArMjkxLDUwIEBACiAvKiBFbmQgZG1hIG1lbW9yeSByZWxhdGVkIHN0dWZmICovCiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGZha2VfY2hhbmdlOwotc3RhdGljIGludCBpbml0aWFsaXNpbmcgPSAxOworc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQ7CiAKLSNkZWZpbmUgSVRZUEUoeCkgKCgoeCk+PjIpICYgMHgxZikKLSNkZWZpbmUgVE9NSU5PUih4KSAoKHggJiAzKSB8ICgoeCAmIDQpIDw8IDUpKQotI2RlZmluZSBVTklUKHgpICgoeCkgJiAweDAzKQkvKiBkcml2ZSBvbiBmZGMgKi8KLSNkZWZpbmUgRkRDKHgpICgoKHgpICYgMHgwNCkgPj4gMikJLyogZmRjIG9mIGRyaXZlICovCisjZGVmaW5lIElUWVBFKHgpCSgoKHgpID4+IDIpICYgMHgxZikKKyNkZWZpbmUgVE9NSU5PUih4KQkoKHggJiAzKSB8ICgoeCAmIDQpIDw8IDUpKQorI2RlZmluZSBVTklUKHgpCQkoKHgpICYgMHgwMykJCS8qIGRyaXZlIG9uIGZkYyAqLworI2RlZmluZSBGREMoeCkJCSgoKHgpICYgMHgwNCkgPj4gMikJLyogZmRjIG9mIGRyaXZlICovCiAJLyogcmV2ZXJzZSBtYXBwaW5nIGZyb20gdW5pdCBhbmQgZmRjIHRvIGRyaXZlICovCiAjZGVmaW5lIFJFVkRSSVZFKGZkYywgdW5pdCkgKCh1bml0KSArICgoZmRjKSA8PCAyKSkKLSNkZWZpbmUgRFAgKCZkcml2ZV9wYXJhbXNbY3VycmVudF9kcml2ZV0pCi0jZGVmaW5lIERSUyAoJmRyaXZlX3N0YXRlW2N1cnJlbnRfZHJpdmVdKQotI2RlZmluZSBEUldFICgmd3JpdGVfZXJyb3JzW2N1cnJlbnRfZHJpdmVdKQotI2RlZmluZSBGRENTICgmZmRjX3N0YXRlW2ZkY10pCi0jZGVmaW5lIENMRUFSRih4KSBjbGVhcl9iaXQoeCMjX0JJVCwgJkRSUy0+ZmxhZ3MpCi0jZGVmaW5lIFNFVEYoeCkgc2V0X2JpdCh4IyNfQklULCAmRFJTLT5mbGFncykKLSNkZWZpbmUgVEVTVEYoeCkgdGVzdF9iaXQoeCMjX0JJVCwgJkRSUy0+ZmxhZ3MpCiAKLSNkZWZpbmUgVURQICgmZHJpdmVfcGFyYW1zW2RyaXZlXSkKLSNkZWZpbmUgVURSUyAoJmRyaXZlX3N0YXRlW2RyaXZlXSkKLSNkZWZpbmUgVURSV0UgKCZ3cml0ZV9lcnJvcnNbZHJpdmVdKQotI2RlZmluZSBVRkRDUyAoJmZkY19zdGF0ZVtGREMoZHJpdmUpXSkKLSNkZWZpbmUgVUNMRUFSRih4KSBjbGVhcl9iaXQoeCMjX0JJVCwgJlVEUlMtPmZsYWdzKQotI2RlZmluZSBVU0VURih4KSBzZXRfYml0KHgjI19CSVQsICZVRFJTLT5mbGFncykKLSNkZWZpbmUgVVRFU1RGKHgpIHRlc3RfYml0KHgjI19CSVQsICZVRFJTLT5mbGFncykKKyNkZWZpbmUgRFAJKCZkcml2ZV9wYXJhbXNbY3VycmVudF9kcml2ZV0pCisjZGVmaW5lIERSUwkoJmRyaXZlX3N0YXRlW2N1cnJlbnRfZHJpdmVdKQorI2RlZmluZSBEUldFCSgmd3JpdGVfZXJyb3JzW2N1cnJlbnRfZHJpdmVdKQorI2RlZmluZSBGRENTCSgmZmRjX3N0YXRlW2ZkY10pCiAKLSNkZWZpbmUgRFBSSU5UKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKERFVklDRV9OQU1FICIlZDogIiBmb3JtYXQsIGN1cnJlbnRfZHJpdmUgLCAjIyBhcmdzKQorI2RlZmluZSBVRFAJKCZkcml2ZV9wYXJhbXNbZHJpdmVdKQorI2RlZmluZSBVRFJTCSgmZHJpdmVfc3RhdGVbZHJpdmVdKQorI2RlZmluZSBVRFJXRQkoJndyaXRlX2Vycm9yc1tkcml2ZV0pCisjZGVmaW5lIFVGRENTCSgmZmRjX3N0YXRlW0ZEQyhkcml2ZSldKQogCi0jZGVmaW5lIFBIX0hFQUQoZmxvcHB5LGhlYWQpICgoKCgoZmxvcHB5KS0+c3RyZXRjaCAmIDIpID4+MSkgXiBoZWFkKSA8PCAyKQotI2RlZmluZSBTVFJFVENIKGZsb3BweSkgKChmbG9wcHkpLT5zdHJldGNoICYgRkRfU1RSRVRDSCkKLQotI2RlZmluZSBDTEVBUlNUUlVDVCh4KSBtZW1zZXQoKHgpLCAwLCBzaXplb2YoKih4KSkpCisjZGVmaW5lIFBIX0hFQUQoZmxvcHB5LCBoZWFkKSAoKCgoKGZsb3BweSktPnN0cmV0Y2ggJiAyKSA+PiAxKSBeIGhlYWQpIDw8IDIpCisjZGVmaW5lIFNUUkVUQ0goZmxvcHB5KQkoKGZsb3BweSktPnN0cmV0Y2ggJiBGRF9TVFJFVENIKQogCiAvKiByZWFkL3dyaXRlICovCi0jZGVmaW5lIENPTU1BTkQgcmF3X2NtZC0+Y21kWzBdCi0jZGVmaW5lIERSX1NFTEVDVCByYXdfY21kLT5jbWRbMV0KLSNkZWZpbmUgVFJBQ0sgcmF3X2NtZC0+Y21kWzJdCi0jZGVmaW5lIEhFQUQgcmF3X2NtZC0+Y21kWzNdCi0jZGVmaW5lIFNFQ1RPUiByYXdfY21kLT5jbWRbNF0KLSNkZWZpbmUgU0laRUNPREUgcmF3X2NtZC0+Y21kWzVdCi0jZGVmaW5lIFNFQ1RfUEVSX1RSQUNLIHJhd19jbWQtPmNtZFs2XQotI2RlZmluZSBHQVAgcmF3X2NtZC0+Y21kWzddCi0jZGVmaW5lIFNJWkVDT0RFMiByYXdfY21kLT5jbWRbOF0KKyNkZWZpbmUgQ09NTUFORAkJKHJhd19jbWQtPmNtZFswXSkKKyNkZWZpbmUgRFJfU0VMRUNUCShyYXdfY21kLT5jbWRbMV0pCisjZGVmaW5lIFRSQUNLCQkocmF3X2NtZC0+Y21kWzJdKQorI2RlZmluZSBIRUFECQkocmF3X2NtZC0+Y21kWzNdKQorI2RlZmluZSBTRUNUT1IJCShyYXdfY21kLT5jbWRbNF0pCisjZGVmaW5lIFNJWkVDT0RFCShyYXdfY21kLT5jbWRbNV0pCisjZGVmaW5lIFNFQ1RfUEVSX1RSQUNLCShyYXdfY21kLT5jbWRbNl0pCisjZGVmaW5lIEdBUAkJKHJhd19jbWQtPmNtZFs3XSkKKyNkZWZpbmUgU0laRUNPREUyCShyYXdfY21kLT5jbWRbOF0pCiAjZGVmaW5lIE5SX1JXIDkKIAogLyogZm9ybWF0ICovCi0jZGVmaW5lIEZfU0laRUNPREUgcmF3X2NtZC0+Y21kWzJdCi0jZGVmaW5lIEZfU0VDVF9QRVJfVFJBQ0sgcmF3X2NtZC0+Y21kWzNdCi0jZGVmaW5lIEZfR0FQIHJhd19jbWQtPmNtZFs0XQotI2RlZmluZSBGX0ZJTEwgcmF3X2NtZC0+Y21kWzVdCisjZGVmaW5lIEZfU0laRUNPREUJKHJhd19jbWQtPmNtZFsyXSkKKyNkZWZpbmUgRl9TRUNUX1BFUl9UUkFDSyAocmF3X2NtZC0+Y21kWzNdKQorI2RlZmluZSBGX0dBUAkJKHJhd19jbWQtPmNtZFs0XSkKKyNkZWZpbmUgRl9GSUxMCQkocmF3X2NtZC0+Y21kWzVdKQogI2RlZmluZSBOUl9GIDYKIAogLyoKLSAqIE1heGltdW0gZGlzayBzaXplIChpbiBraWxvYnl0ZXMpLiBUaGlzIGRlZmF1bHQgaXMgdXNlZCB3aGVuZXZlciB0aGUKLSAqIGN1cnJlbnQgZGlzayBzaXplIGlzIHVua25vd24uCisgKiBNYXhpbXVtIGRpc2sgc2l6ZSAoaW4ga2lsb2J5dGVzKS4KKyAqIFRoaXMgZGVmYXVsdCBpcyB1c2VkIHdoZW5ldmVyIHRoZSBjdXJyZW50IGRpc2sgc2l6ZSBpcyB1bmtub3duLgogICogW05vdyBpdCBpcyByYXRoZXIgYSBtaW5pbXVtXQogICovCiAjZGVmaW5lIE1BWF9ESVNLX1NJWkUgNAkJLyogMzk4NCAqLwpAQCAtMzQ1LDE2ICszNDQsMTcgQEAKICAqLwogI2RlZmluZSBNQVhfUkVQTElFUyAxNgogc3RhdGljIHVuc2lnbmVkIGNoYXIgcmVwbHlfYnVmZmVyW01BWF9SRVBMSUVTXTsKLXN0YXRpYyBpbnQgaW5yOwkJCS8qIHNpemUgb2YgcmVwbHkgYnVmZmVyLCB3aGVuIGNhbGxlZCBmcm9tIGludGVycnVwdCAqLwotI2RlZmluZSBTVDAgKHJlcGx5X2J1ZmZlclswXSkKLSNkZWZpbmUgU1QxIChyZXBseV9idWZmZXJbMV0pCi0jZGVmaW5lIFNUMiAocmVwbHlfYnVmZmVyWzJdKQotI2RlZmluZSBTVDMgKHJlcGx5X2J1ZmZlclswXSkJLyogcmVzdWx0IG9mIEdFVFNUQVRVUyAqLwotI2RlZmluZSBSX1RSQUNLIChyZXBseV9idWZmZXJbM10pCi0jZGVmaW5lIFJfSEVBRCAocmVwbHlfYnVmZmVyWzRdKQotI2RlZmluZSBSX1NFQ1RPUiAocmVwbHlfYnVmZmVyWzVdKQotI2RlZmluZSBSX1NJWkVDT0RFIChyZXBseV9idWZmZXJbNl0pCi0jZGVmaW5lIFNFTF9ETFkgKDIqSFovMTAwKQorc3RhdGljIGludCBpbnI7CQkvKiBzaXplIG9mIHJlcGx5IGJ1ZmZlciwgd2hlbiBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgU1QwCQkocmVwbHlfYnVmZmVyWzBdKQorI2RlZmluZSBTVDEJCShyZXBseV9idWZmZXJbMV0pCisjZGVmaW5lIFNUMgkJKHJlcGx5X2J1ZmZlclsyXSkKKyNkZWZpbmUgU1QzCQkocmVwbHlfYnVmZmVyWzBdKQkvKiByZXN1bHQgb2YgR0VUU1RBVFVTICovCisjZGVmaW5lIFJfVFJBQ0sJCShyZXBseV9idWZmZXJbM10pCisjZGVmaW5lIFJfSEVBRAkJKHJlcGx5X2J1ZmZlcls0XSkKKyNkZWZpbmUgUl9TRUNUT1IJKHJlcGx5X2J1ZmZlcls1XSkKKyNkZWZpbmUgUl9TSVpFQ09ERQkocmVwbHlfYnVmZmVyWzZdKQorCisjZGVmaW5lIFNFTF9ETFkJCSgyICogSFogLyAxMDApCiAKIC8qCiAgKiB0aGlzIHN0cnVjdCBkZWZpbmVzIHRoZSBkaWZmZXJlbnQgZmxvcHB5IGRyaXZlIHR5cGVzLgpAQCAtNTA1LDkgKzUwNSw5IEBACiBzdGF0aWMgaW50IHByb2Jpbmc7CiAKIC8qIFN5bmNocm9uaXphdGlvbiBvZiBGREMgYWNjZXNzLiAqLwotI2RlZmluZSBGRF9DT01NQU5EX05PTkUgLTEKLSNkZWZpbmUgRkRfQ09NTUFORF9FUlJPUiAyCi0jZGVmaW5lIEZEX0NPTU1BTkRfT0tBWSAzCisjZGVmaW5lIEZEX0NPTU1BTkRfTk9ORQkJLTEKKyNkZWZpbmUgRkRfQ09NTUFORF9FUlJPUgkyCisjZGVmaW5lIEZEX0NPTU1BTkRfT0tBWQkJMwogCiBzdGF0aWMgdm9sYXRpbGUgaW50IGNvbW1hbmRfc3RhdHVzID0gRkRfQ09NTUFORF9OT05FOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZmRjX2J1c3k7CkBAIC01MTUsMTEgKzUxNSw2IEBACiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoY29tbWFuZF9kb25lKTsKIAogI2RlZmluZSBOT19TSUdOQUwgKCFpbnRlcnJ1cHRpYmxlIHx8ICFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLSNkZWZpbmUgQ0FMTCh4KSBpZiAoKHgpID09IC1FSU5UUikgcmV0dXJuIC1FSU5UUgotI2RlZmluZSBFQ0FMTCh4KSBpZiAoKHJldCA9ICh4KSkpIHJldHVybiByZXQ7Ci0jZGVmaW5lIF9XQUlUKHgsaSkgQ0FMTChyZXQ9d2FpdF90aWxfZG9uZSgoeCksaSkpCi0jZGVmaW5lIFdBSVQoeCkgX1dBSVQoKHgpLGludGVycnVwdGlibGUpCi0jZGVmaW5lIElXQUlUKHgpIF9XQUlUKCh4KSwxKQogCiAvKiBFcnJvcnMgZHVyaW5nIGZvcm1hdHRpbmcgYXJlIGNvdW50ZWQgaGVyZS4gKi8KIHN0YXRpYyBpbnQgZm9ybWF0X2Vycm9yczsKQEAgLTU0NSw4ICs1NDAsOSBAQAogc3RhdGljIGludCAqZXJyb3JzOwogdHlwZWRlZiB2b2lkICgqZG9uZV9mKShpbnQpOwogc3RhdGljIHN0cnVjdCBjb250X3QgewotCXZvaWQgKCppbnRlcnJ1cHQpKHZvaWQpOwkvKiB0aGlzIGlzIGNhbGxlZCBhZnRlciB0aGUgaW50ZXJydXB0IG9mIHRoZQotCQkJCQkgKiBtYWluIGNvbW1hbmQgKi8KKwl2b2lkICgqaW50ZXJydXB0KSh2b2lkKTsKKwkJCQkvKiB0aGlzIGlzIGNhbGxlZCBhZnRlciB0aGUgaW50ZXJydXB0IG9mIHRoZQorCQkJCSAqIG1haW4gY29tbWFuZCAqLwogCXZvaWQgKCpyZWRvKSh2b2lkKTsJLyogdGhpcyBpcyBjYWxsZWQgdG8gcmV0cnkgdGhlIG9wZXJhdGlvbiAqLwogCXZvaWQgKCplcnJvcikodm9pZCk7CS8qIHRoaXMgaXMgY2FsbGVkIHRvIHRhbGx5IGFuIGVycm9yICovCiAJZG9uZV9mIGRvbmU7CQkvKiB0aGlzIGlzIGNhbGxlZCB0byBzYXkgaWYgdGhlIG9wZXJhdGlvbiBoYXMKQEAgLTU3MSw3ICs1NjcsNiBAQAogICogcmVzZXQgZG9lc24ndCBuZWVkIHRvIGJlIHRlc3RlZCBiZWZvcmUgc2VuZGluZyBjb21tYW5kcywgYmVjYXVzZQogICogb3V0cHV0X2J5dGUgaXMgYXV0b21hdGljYWxseSBkaXNhYmxlZCB3aGVuIHJlc2V0IGlzIHNldC4KICAqLwotI2RlZmluZSBDSEVDS19SRVNFVCB7IGlmIChGRENTLT5yZXNldCl7IHJlc2V0X2ZkYygpOyByZXR1cm47IH0gfQogc3RhdGljIHZvaWQgcmVzZXRfZmRjKHZvaWQpOwogCiAvKgpAQCAtNTc5LDkgKzU3NCw5IEBACiAgKiBpbmZvcm1hdGlvbiB0byBpbnRlcnJ1cHRzLiBUaGV5IGFyZSB0aGUgZGF0YSB1c2VkIGZvciB0aGUgY3VycmVudAogICogcmVxdWVzdC4KICAqLwotI2RlZmluZSBOT19UUkFDSyAtMQotI2RlZmluZSBORUVEXzFfUkVDQUwgLTIKLSNkZWZpbmUgTkVFRF8yX1JFQ0FMIC0zCisjZGVmaW5lIE5PX1RSQUNLCS0xCisjZGVmaW5lIE5FRURfMV9SRUNBTAktMgorI2RlZmluZSBORUVEXzJfUkVDQUwJLTMKIAogc3RhdGljIGludCB1c2FnZV9jb3VudDsKIApAQCAtNjIxLDM5ICs2MTYsMzUgQEAKIAlkZWJ1Z3RpbWVyID0gamlmZmllczsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRlYnVndChjb25zdCBjaGFyICptZXNzYWdlKQorc3RhdGljIGlubGluZSB2b2lkIGRlYnVndChjb25zdCBjaGFyICpmdW5jLCBjb25zdCBjaGFyICptc2cpCiB7CiAJaWYgKERQLT5mbGFncyAmIERFQlVHVCkKLQkJcHJpbnRrKCIlcyBkdGltZT0lbHVcbiIsIG1lc3NhZ2UsIGppZmZpZXMgLSBkZWJ1Z3RpbWVyKTsKKwkJcHJfaW5mbygiJXM6JXMgZHRpbWU9JWx1XG4iLCBmdW5jLCBtc2csIGppZmZpZXMgLSBkZWJ1Z3RpbWVyKTsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2RlYnVndCh2b2lkKSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z3QoY29uc3QgY2hhciAqbWVzc2FnZSkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWd0KGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0IGNoYXIgKm1zZykgeyB9CiAjZW5kaWYgLyogREVCVUdUICovCiAKLXR5cGVkZWYgdm9pZCAoKnRpbWVvdXRfZm4pICh1bnNpZ25lZCBsb25nKTsKK3R5cGVkZWYgdm9pZCAoKnRpbWVvdXRfZm4pKHVuc2lnbmVkIGxvbmcpOwogc3RhdGljIERFRklORV9USU1FUihmZF90aW1lb3V0LCBmbG9wcHlfc2h1dGRvd24sIDAsIDApOwogCiBzdGF0aWMgY29uc3QgY2hhciAqdGltZW91dF9tZXNzYWdlOwogCi0jaWZkZWYgRkxPUFBZX1NBTklUWV9DSEVDSwotc3RhdGljIHZvaWQgaXNfYWxpdmUoY29uc3QgY2hhciAqbWVzc2FnZSkKK3N0YXRpYyB2b2lkIGlzX2FsaXZlKGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAJLyogdGhpcyByb3V0aW5lIGNoZWNrcyB3aGV0aGVyIHRoZSBmbG9wcHkgZHJpdmVyIGlzICJhbGl2ZSIgKi8KLQlpZiAodGVzdF9iaXQoMCwgJmZkY19idXN5KSAmJiBjb21tYW5kX3N0YXR1cyA8IDIKLQkgICAgJiYgIXRpbWVyX3BlbmRpbmcoJmZkX3RpbWVvdXQpKSB7Ci0JCURQUklOVCgidGltZW91dCBoYW5kbGVyIGRpZWQ6ICVzXG4iLCBtZXNzYWdlKTsKKwlpZiAodGVzdF9iaXQoMCwgJmZkY19idXN5KSAmJiBjb21tYW5kX3N0YXR1cyA8IDIgJiYKKwkgICAgIXRpbWVyX3BlbmRpbmcoJmZkX3RpbWVvdXQpKSB7CisJCURQUklOVCgiJXM6IHRpbWVvdXQgaGFuZGxlciBkaWVkLiAgJXNcbiIsIGZ1bmMsIG1lc3NhZ2UpOwogCX0KIH0KLSNlbmRpZgogCi1zdGF0aWMgdm9pZCAoKmRvX2Zsb3BweSkgKHZvaWQpID0gTlVMTDsKLQotI2lmZGVmIEZMT1BQWV9TQU5JVFlfQ0hFQ0sKK3N0YXRpYyB2b2lkICgqZG9fZmxvcHB5KSh2b2lkKSA9IE5VTEw7CiAKICNkZWZpbmUgT0xPR1NJWkUgMjAKIAotc3RhdGljIHZvaWQgKCpsYXN0aGFuZGxlcikgKHZvaWQpOworc3RhdGljIHZvaWQgKCpsYXN0aGFuZGxlcikodm9pZCk7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbnRlcnJ1cHRqaWZmaWVzOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVzdWx0amlmZmllczsKIHN0YXRpYyBpbnQgcmVzdWx0c2l6ZTsKQEAgLTY2NiwxMiArNjU3LDExIEBACiB9IG91dHB1dF9sb2dbT0xPR1NJWkVdOwogCiBzdGF0aWMgaW50IG91dHB1dF9sb2dfcG9zOwotI2VuZGlmCiAKICNkZWZpbmUgY3VycmVudF9yZXFEIC0xCiAjZGVmaW5lIE1BWFRJTUVPVVQgLTIKIAotc3RhdGljIHZvaWQgX19yZXNjaGVkdWxlX3RpbWVvdXQoaW50IGRyaXZlLCBjb25zdCBjaGFyICptZXNzYWdlLCBpbnQgbWFyZykKK3N0YXRpYyB2b2lkIF9fcmVzY2hlZHVsZV90aW1lb3V0KGludCBkcml2ZSwgY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKIAlpZiAoZHJpdmUgPT0gY3VycmVudF9yZXFEKQogCQlkcml2ZSA9IGN1cnJlbnRfZHJpdmU7CkBAIC02ODIsMjUgKzY3MiwyMiBAQAogCX0gZWxzZQogCQlmZF90aW1lb3V0LmV4cGlyZXMgPSBqaWZmaWVzICsgVURQLT50aW1lb3V0OwogCWFkZF90aW1lcigmZmRfdGltZW91dCk7Ci0JaWYgKFVEUC0+ZmxhZ3MgJiBGRF9ERUJVRykgewotCQlEUFJJTlQoInJlc2NoZWR1bGUgdGltZW91dCAiKTsKLQkJcHJpbnRrKG1lc3NhZ2UsIG1hcmcpOwotCQlwcmludGsoIlxuIik7Ci0JfQorCWlmIChVRFAtPmZsYWdzICYgRkRfREVCVUcpCisJCURQUklOVCgicmVzY2hlZHVsZSB0aW1lb3V0ICVzXG4iLCBtZXNzYWdlKTsKIAl0aW1lb3V0X21lc3NhZ2UgPSBtZXNzYWdlOwogfQogCi1zdGF0aWMgdm9pZCByZXNjaGVkdWxlX3RpbWVvdXQoaW50IGRyaXZlLCBjb25zdCBjaGFyICptZXNzYWdlLCBpbnQgbWFyZykKK3N0YXRpYyB2b2lkIHJlc2NoZWR1bGVfdGltZW91dChpbnQgZHJpdmUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZmbG9wcHlfbG9jaywgZmxhZ3MpOwotCV9fcmVzY2hlZHVsZV90aW1lb3V0KGRyaXZlLCBtZXNzYWdlLCBtYXJnKTsKKwlfX3Jlc2NoZWR1bGVfdGltZW91dChkcml2ZSwgbWVzc2FnZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmxvcHB5X2xvY2ssIGZsYWdzKTsKIH0KIAotI2RlZmluZSBJTkZCT1VORChhLGIpIChhKT1tYXhfdChpbnQsIGEsIGIpCi0jZGVmaW5lIFNVUEJPVU5EKGEsYikgKGEpPW1pbl90KGludCwgYSwgYikKKyNkZWZpbmUgSU5GQk9VTkQoYSwgYikgKGEpID0gbWF4X3QoaW50LCBhLCBiKQorI2RlZmluZSBTVVBCT1VORChhLCBiKSAoYSkgPSBtaW5fdChpbnQsIGEsIGIpCiAKIC8qCiAgKiBCb3R0b20gaGFsZiBmbG9wcHkgZHJpdmVyLgpAQCAtNzM5LDcgKzcyNiw2IEBACiB7CiAJaW50IGZkYyA9IEZEQyhkcml2ZSk7CiAKLSNpZmRlZiBGTE9QUFlfU0FOSVRZX0NIRUNLCiAJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIFVEUlMtPnNlbGVjdF9kYXRlICsgVURQLT5zZWxlY3RfZGVsYXkpKQogCQlEUFJJTlQoIldBUk5JTkcgZGlzayBjaGFuZ2UgY2FsbGVkIGVhcmx5XG4iKTsKIAlpZiAoIShGRENTLT5kb3IgJiAoMHgxMCA8PCBVTklUKGRyaXZlKSkpIHx8CkBAIC03NDgsMzEgKzczNCwyNyBAQAogCQlEUFJJTlQoImRyaXZlPSVkIGZkYz0lZCBkb3I9JXhcbiIsIGRyaXZlLCBGREMoZHJpdmUpLAogCQkgICAgICAgKHVuc2lnbmVkIGludClGRENTLT5kb3IpOwogCX0KLSNlbmRpZgogCi0jaWZkZWYgRENMX0RFQlVHCi0JaWYgKFVEUC0+ZmxhZ3MgJiBGRF9ERUJVRykgewotCQlEUFJJTlQoImNoZWNraW5nIGRpc2sgY2hhbmdlIGxpbmUgZm9yIGRyaXZlICVkXG4iLCBkcml2ZSk7Ci0JCURQUklOVCgiamlmZmllcz0lbHVcbiIsIGppZmZpZXMpOwotCQlEUFJJTlQoImRpc2sgY2hhbmdlIGxpbmU9JXhcbiIsIGZkX2luYihGRF9ESVIpICYgMHg4MCk7Ci0JCURQUklOVCgiZmxhZ3M9JWx4XG4iLCBVRFJTLT5mbGFncyk7Ci0JfQotI2VuZGlmCisJZGVidWdfZGNsKFVEUC0+ZmxhZ3MsCisJCSAgImNoZWNraW5nIGRpc2sgY2hhbmdlIGxpbmUgZm9yIGRyaXZlICVkXG4iLCBkcml2ZSk7CisJZGVidWdfZGNsKFVEUC0+ZmxhZ3MsICJqaWZmaWVzPSVsdVxuIiwgamlmZmllcyk7CisJZGVidWdfZGNsKFVEUC0+ZmxhZ3MsICJkaXNrIGNoYW5nZSBsaW5lPSV4XG4iLCBmZF9pbmIoRkRfRElSKSAmIDB4ODApOworCWRlYnVnX2RjbChVRFAtPmZsYWdzLCAiZmxhZ3M9JWx4XG4iLCBVRFJTLT5mbGFncyk7CisKIAlpZiAoVURQLT5mbGFncyAmIEZEX0JST0tFTl9EQ0wpCi0JCXJldHVybiBVVEVTVEYoRkRfRElTS19DSEFOR0VEKTsKKwkJcmV0dXJuIHRlc3RfYml0KEZEX0RJU0tfQ0hBTkdFRF9CSVQsICZVRFJTLT5mbGFncyk7CiAJaWYgKChmZF9pbmIoRkRfRElSKSBeIFVEUC0+ZmxhZ3MpICYgMHg4MCkgewotCQlVU0VURihGRF9WRVJJRlkpOwkvKiB2ZXJpZnkgd3JpdGUgcHJvdGVjdGlvbiAqLwotCQlpZiAoVURSUy0+bWF4YmxvY2spIHsKLQkJCS8qIG1hcmsgaXQgY2hhbmdlZCAqLwotCQkJVVNFVEYoRkRfRElTS19DSEFOR0VEKTsKLQkJfQorCQlzZXRfYml0KEZEX1ZFUklGWV9CSVQsICZVRFJTLT5mbGFncyk7CisJCQkJCS8qIHZlcmlmeSB3cml0ZSBwcm90ZWN0aW9uICovCisKKwkJaWYgKFVEUlMtPm1heGJsb2NrKQkvKiBtYXJrIGl0IGNoYW5nZWQgKi8KKwkJCXNldF9iaXQoRkRfRElTS19DSEFOR0VEX0JJVCwgJlVEUlMtPmZsYWdzKTsKIAogCQkvKiBpbnZhbGlkYXRlIGl0cyBnZW9tZXRyeSAqLwogCQlpZiAoVURSUy0+a2VlcF9kYXRhID49IDApIHsKIAkJCWlmICgoVURQLT5mbGFncyAmIEZURF9NU0cpICYmCiAJCQkgICAgY3VycmVudF90eXBlW2RyaXZlXSAhPSBOVUxMKQotCQkJCURQUklOVCgiRGlzayB0eXBlIGlzIHVuZGVmaW5lZCBhZnRlciAiCi0JCQkJICAgICAgICJkaXNrIGNoYW5nZVxuIik7CisJCQkJRFBSSU5UKCJEaXNrIHR5cGUgaXMgdW5kZWZpbmVkIGFmdGVyIGRpc2sgY2hhbmdlXG4iKTsKIAkJCWN1cnJlbnRfdHlwZVtkcml2ZV0gPSBOVUxMOwogCQkJZmxvcHB5X3NpemVzW1RPTUlOT1IoZHJpdmUpXSA9IE1BWF9ESVNLX1NJWkUgPDwgMTsKIAkJfQpAQCAtNzgwLDcgKzc2Miw3IEBACiAJCXJldHVybiAxOwogCX0gZWxzZSB7CiAJCVVEUlMtPmxhc3RfY2hlY2tlZCA9IGppZmZpZXM7Ci0JCVVDTEVBUkYoRkRfRElTS19ORVdDSEFOR0UpOworCQljbGVhcl9iaXQoRkRfRElTS19ORVdDSEFOR0VfQklULCAmVURSUy0+ZmxhZ3MpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTc5MCw2ICs3NzIsMTIgQEAKIAlyZXR1cm4gKChkb3IgJiAoMHgxMCA8PCB1bml0KSkgJiYgKGRvciAmIDMpID09IHVuaXQpOwogfQogCitzdGF0aWMgYm9vbCBpc19yZWFkeV9zdGF0ZShpbnQgc3RhdHVzKQoreworCWludCBzdGF0ZSA9IHN0YXR1cyAmIChTVEFUVVNfUkVBRFkgfCBTVEFUVVNfRElSIHwgU1RBVFVTX0RNQSk7CisJcmV0dXJuIHN0YXRlID09IFNUQVRVU19SRUFEWTsKK30KKwogc3RhdGljIGludCBzZXRfZG9yKGludCBmZGMsIGNoYXIgbWFzaywgY2hhciBkYXRhKQogewogCXVuc2lnbmVkIGNoYXIgdW5pdDsKQEAgLTgwNiwxMSArNzk0LDggQEAKIAkJdW5pdCA9IG9sZGRvciAmIDB4MzsKIAkJaWYgKGlzX3NlbGVjdGVkKG9sZGRvciwgdW5pdCkgJiYgIWlzX3NlbGVjdGVkKG5ld2RvciwgdW5pdCkpIHsKIAkJCWRyaXZlID0gUkVWRFJJVkUoZmRjLCB1bml0KTsKLSNpZmRlZiBEQ0xfREVCVUcKLQkJCWlmIChVRFAtPmZsYWdzICYgRkRfREVCVUcpIHsKLQkJCQlEUFJJTlQoImNhbGxpbmcgZGlzayBjaGFuZ2UgZnJvbSBzZXRfZG9yXG4iKTsKLQkJCX0KLSNlbmRpZgorCQkJZGVidWdfZGNsKFVEUC0+ZmxhZ3MsCisJCQkJICAiY2FsbGluZyBkaXNrIGNoYW5nZSBmcm9tIHNldF9kb3JcbiIpOwogCQkJZGlza19jaGFuZ2UoZHJpdmUpOwogCQl9CiAJCUZEQ1MtPmRvciA9IG5ld2RvcjsKQEAgLTgzNCw4ICs4MTksMTAgQEAKIAlEUlMtPnNlbGVjdF9kYXRlID0gamlmZmllczsKIH0KIAotLyogcmVzZXQgYWxsIGRyaXZlciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudCBmZGMuIFRoaXMgaXMgbmVlZGVkIGFmdGVyCi0gKiBhIHJlc2V0LCBhbmQgYWZ0ZXIgYSByYXcgY29tbWFuZC4gKi8KKy8qCisgKiBSZXNldCBhbGwgZHJpdmVyIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGZkYy4KKyAqIFRoaXMgaXMgbmVlZGVkIGFmdGVyIGEgcmVzZXQsIGFuZCBhZnRlciBhIHJhdyBjb21tYW5kLgorICovCiBzdGF0aWMgdm9pZCByZXNldF9mZGNfaW5mbyhpbnQgbW9kZSkKIHsKIAlpbnQgZHJpdmU7CkBAIC04NTcsNyArODQ0LDcgQEAKIAkJY3VycmVudF9kcml2ZSA9IGRyaXZlOwogCX0KIAlpZiAoZmRjICE9IDEgJiYgZmRjICE9IDApIHsKLQkJcHJpbnRrKCJiYWQgZmRjIHZhbHVlXG4iKTsKKwkJcHJfaW5mbygiYmFkIGZkYyB2YWx1ZVxuIik7CiAJCXJldHVybjsKIAl9CiAJc2V0X2RvcihmZGMsIH4wLCA4KTsKQEAgLTg3MSwxMSArODU4LDEwIEBACiB9CiAKIC8qIGxvY2tzIHRoZSBkcml2ZXIgKi8KLXN0YXRpYyBpbnQgX2xvY2tfZmRjKGludCBkcml2ZSwgaW50IGludGVycnVwdGlibGUsIGludCBsaW5lKQorc3RhdGljIGludCBfbG9ja19mZGMoaW50IGRyaXZlLCBib29sIGludGVycnVwdGlibGUsIGludCBsaW5lKQogewogCWlmICghdXNhZ2VfY291bnQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiVHJ5aW5nIHRvIGxvY2sgZmRjIHdoaWxlIHVzYWdlIGNvdW50PTAgYXQgbGluZSAlZFxuIiwKKwkJcHJfZXJyKCJUcnlpbmcgdG8gbG9jayBmZGMgd2hpbGUgdXNhZ2UgY291bnQ9MCBhdCBsaW5lICVkXG4iLAogCQkgICAgICAgbGluZSk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC05MDQsMTUgKzg5MCwxMyBAQAogCX0KIAljb21tYW5kX3N0YXR1cyA9IEZEX0NPTU1BTkRfTk9ORTsKIAotCV9fcmVzY2hlZHVsZV90aW1lb3V0KGRyaXZlLCAibG9jayBmZGMiLCAwKTsKKwlfX3Jlc2NoZWR1bGVfdGltZW91dChkcml2ZSwgImxvY2sgZmRjIik7CiAJc2V0X2ZkYyhkcml2ZSk7CiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgbG9ja19mZGMoZHJpdmUsaW50ZXJydXB0aWJsZSkgX2xvY2tfZmRjKGRyaXZlLGludGVycnVwdGlibGUsIF9fTElORV9fKQotCi0jZGVmaW5lIExPQ0tfRkRDKGRyaXZlLGludGVycnVwdGlibGUpIFwKLWlmIChsb2NrX2ZkYyhkcml2ZSxpbnRlcnJ1cHRpYmxlKSkgcmV0dXJuIC1FSU5UUjsKKyNkZWZpbmUgbG9ja19mZGMoZHJpdmUsIGludGVycnVwdGlibGUpCQkJXAorCV9sb2NrX2ZkYyhkcml2ZSwgaW50ZXJydXB0aWJsZSwgX19MSU5FX18pCiAKIC8qIHVubG9ja3MgdGhlIGRyaXZlciAqLwogc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19mZGModm9pZCkKQEAgLTkyNCw3ICs5MDgsNyBAQAogCQlEUFJJTlQoIkZEQyBhY2Nlc3MgY29uZmxpY3QhXG4iKTsKIAogCWlmIChkb19mbG9wcHkpCi0JCURQUklOVCgiZGV2aWNlIGludGVycnVwdCBzdGlsbCBhY3RpdmUgYXQgRkRDIHJlbGVhc2U6ICVwIVxuIiwKKwkJRFBSSU5UKCJkZXZpY2UgaW50ZXJydXB0IHN0aWxsIGFjdGl2ZSBhdCBGREMgcmVsZWFzZTogJXBmIVxuIiwKIAkJICAgICAgIGRvX2Zsb3BweSk7CiAJY29tbWFuZF9zdGF0dXMgPSBGRF9DT01NQU5EX05PTkU7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmZsb3BweV9sb2NrLCBmbGFncyk7CkBAIC0xMDAzLDcgKzk4Nyw3IEBACiAKIHN0YXRpYyBERUNMQVJFX1dPUksoZmxvcHB5X3dvcmssIE5VTEwpOwogCi1zdGF0aWMgdm9pZCBzY2hlZHVsZV9iaCh2b2lkICgqaGFuZGxlcikgKHZvaWQpKQorc3RhdGljIHZvaWQgc2NoZWR1bGVfYmgodm9pZCAoKmhhbmRsZXIpKHZvaWQpKQogewogCVBSRVBBUkVfV09SSygmZmxvcHB5X3dvcmssICh3b3JrX2Z1bmNfdCloYW5kbGVyKTsKIAlzY2hlZHVsZV93b3JrKCZmbG9wcHlfd29yayk7CkBAIC0xMDI2LDExICsxMDEwLDcgQEAKICAqIHRyYW5zZmVyICovCiBzdGF0aWMgdm9pZCBmZF93YXRjaGRvZyh2b2lkKQogewotI2lmZGVmIERDTF9ERUJVRwotCWlmIChEUC0+ZmxhZ3MgJiBGRF9ERUJVRykgewotCQlEUFJJTlQoImNhbGxpbmcgZGlzayBjaGFuZ2UgZnJvbSB3YXRjaGRvZ1xuIik7Ci0JfQotI2VuZGlmCisJZGVidWdfZGNsKERQLT5mbGFncywgImNhbGxpbmcgZGlzayBjaGFuZ2UgZnJvbSB3YXRjaGRvZ1xuIik7CiAKIAlpZiAoZGlza19jaGFuZ2UoY3VycmVudF9kcml2ZSkpIHsKIAkJRFBSSU5UKCJkaXNrIHJlbW92ZWQgZHVyaW5nIGkvb1xuIik7CkBAIC0xMDM5LDcgKzEwMTksNyBAQAogCQlyZXNldF9mZGMoKTsKIAl9IGVsc2UgewogCQlkZWxfdGltZXIoJmZkX3RpbWVyKTsKLQkJZmRfdGltZXIuZnVuY3Rpb24gPSAodGltZW91dF9mbikgZmRfd2F0Y2hkb2c7CisJCWZkX3RpbWVyLmZ1bmN0aW9uID0gKHRpbWVvdXRfZm4pZmRfd2F0Y2hkb2c7CiAJCWZkX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgSFogLyAxMDsKIAkJYWRkX3RpbWVyKCZmZF90aW1lcik7CiAJfQpAQCAtMTEwNSwyNSArMTA4NSwyMyBAQAogewogCXVuc2lnbmVkIGxvbmcgZjsKIAotI2lmZGVmIEZMT1BQWV9TQU5JVFlfQ0hFQ0sKIAlpZiAocmF3X2NtZC0+bGVuZ3RoID09IDApIHsKIAkJaW50IGk7CiAKLQkJcHJpbnRrKCJ6ZXJvIGRtYSB0cmFuc2ZlciBzaXplOiIpOworCQlwcl9pbmZvKCJ6ZXJvIGRtYSB0cmFuc2ZlciBzaXplOiIpOwogCQlmb3IgKGkgPSAwOyBpIDwgcmF3X2NtZC0+Y21kX2NvdW50OyBpKyspCi0JCQlwcmludGsoIiV4LCIsIHJhd19jbWQtPmNtZFtpXSk7Ci0JCXByaW50aygiXG4iKTsKKwkJCXByX2NvbnQoIiV4LCIsIHJhd19jbWQtPmNtZFtpXSk7CisJCXByX2NvbnQoIlxuIik7CiAJCWNvbnQtPmRvbmUoMCk7CiAJCUZEQ1MtPnJlc2V0ID0gMTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoKCh1bnNpZ25lZCBsb25nKXJhd19jbWQtPmtlcm5lbF9kYXRhKSAlIDUxMikgewotCQlwcmludGsoIm5vbiBhbGlnbmVkIGFkZHJlc3M6ICVwXG4iLCByYXdfY21kLT5rZXJuZWxfZGF0YSk7CisJCXByX2luZm8oIm5vbiBhbGlnbmVkIGFkZHJlc3M6ICVwXG4iLCByYXdfY21kLT5rZXJuZWxfZGF0YSk7CiAJCWNvbnQtPmRvbmUoMCk7CiAJCUZEQ1MtPnJlc2V0ID0gMTsKIAkJcmV0dXJuOwogCX0KLSNlbmRpZgogCWYgPSBjbGFpbV9kbWFfbG9jaygpOwogCWZkX2Rpc2FibGVfZG1hKCk7CiAjaWZkZWYgZmRfZG1hX3NldHVwCkBAIC0xMTY1LDcgKzExNDMsNyBAQAogCQlpZiAoc3RhdHVzICYgU1RBVFVTX1JFQURZKQogCQkJcmV0dXJuIHN0YXR1czsKIAl9Ci0JaWYgKCFpbml0aWFsaXNpbmcpIHsKKwlpZiAoaW5pdGlhbGl6ZWQpIHsKIAkJRFBSSU5UKCJHZXRzdGF0dXMgdGltZXMgb3V0ICgleCkgb24gZmRjICVkXG4iLCBzdGF0dXMsIGZkYyk7CiAJCXNob3dfZmxvcHB5KCk7CiAJfQpAQCAtMTE3NiwyMiArMTE1NCwyMSBAQAogLyogc2VuZHMgYSBjb21tYW5kIGJ5dGUgdG8gdGhlIGZkYyAqLwogc3RhdGljIGludCBvdXRwdXRfYnl0ZShjaGFyIGJ5dGUpCiB7Ci0JaW50IHN0YXR1czsKKwlpbnQgc3RhdHVzID0gd2FpdF90aWxfcmVhZHkoKTsKIAotCWlmICgoc3RhdHVzID0gd2FpdF90aWxfcmVhZHkoKSkgPCAwKQorCWlmIChzdGF0dXMgPCAwKQogCQlyZXR1cm4gLTE7Ci0JaWYgKChzdGF0dXMgJiAoU1RBVFVTX1JFQURZIHwgU1RBVFVTX0RJUiB8IFNUQVRVU19ETUEpKSA9PSBTVEFUVVNfUkVBRFkpIHsKKworCWlmIChpc19yZWFkeV9zdGF0ZShzdGF0dXMpKSB7CiAJCWZkX291dGIoYnl0ZSwgRkRfREFUQSk7Ci0jaWZkZWYgRkxPUFBZX1NBTklUWV9DSEVDSwogCQlvdXRwdXRfbG9nW291dHB1dF9sb2dfcG9zXS5kYXRhID0gYnl0ZTsKIAkJb3V0cHV0X2xvZ1tvdXRwdXRfbG9nX3Bvc10uc3RhdHVzID0gc3RhdHVzOwogCQlvdXRwdXRfbG9nW291dHB1dF9sb2dfcG9zXS5qaWZmaWVzID0gamlmZmllczsKIAkJb3V0cHV0X2xvZ19wb3MgPSAob3V0cHV0X2xvZ19wb3MgKyAxKSAlIE9MT0dTSVpFOwotI2VuZGlmCiAJCXJldHVybiAwOwogCX0KIAlGRENTLT5yZXNldCA9IDE7Ci0JaWYgKCFpbml0aWFsaXNpbmcpIHsKKwlpZiAoaW5pdGlhbGl6ZWQpIHsKIAkJRFBSSU5UKCJVbmFibGUgdG8gc2VuZCBieXRlICV4IHRvIEZEQy4gRmRjPSV4IFN0YXR1cz0leFxuIiwKIAkJICAgICAgIGJ5dGUsIGZkYywgc3RhdHVzKTsKIAkJc2hvd19mbG9wcHkoKTsKQEAgLTExOTksOCArMTE3Niw2IEBACiAJcmV0dXJuIC0xOwogfQogCi0jZGVmaW5lIExBU1RfT1VUKHgpIGlmIChvdXRwdXRfYnl0ZSh4KTwwKXsgcmVzZXRfZmRjKCk7cmV0dXJuO30KLQogLyogZ2V0cyB0aGUgcmVzcG9uc2UgZnJvbSB0aGUgZmRjICovCiBzdGF0aWMgaW50IHJlc3VsdCh2b2lkKQogewpAQCAtMTIwOCwxNCArMTE4MywxMyBAQAogCWludCBzdGF0dXMgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IE1BWF9SRVBMSUVTOyBpKyspIHsKLQkJaWYgKChzdGF0dXMgPSB3YWl0X3RpbF9yZWFkeSgpKSA8IDApCisJCXN0YXR1cyA9IHdhaXRfdGlsX3JlYWR5KCk7CisJCWlmIChzdGF0dXMgPCAwKQogCQkJYnJlYWs7CiAJCXN0YXR1cyAmPSBTVEFUVVNfRElSIHwgU1RBVFVTX1JFQURZIHwgU1RBVFVTX0JVU1kgfCBTVEFUVVNfRE1BOwogCQlpZiAoKHN0YXR1cyAmIH5TVEFUVVNfQlVTWSkgPT0gU1RBVFVTX1JFQURZKSB7Ci0jaWZkZWYgRkxPUFBZX1NBTklUWV9DSEVDSwogCQkJcmVzdWx0amlmZmllcyA9IGppZmZpZXM7CiAJCQlyZXN1bHRzaXplID0gaTsKLSNlbmRpZgogCQkJcmV0dXJuIGk7CiAJCX0KIAkJaWYgKHN0YXR1cyA9PSAoU1RBVFVTX0RJUiB8IFNUQVRVU19SRUFEWSB8IFNUQVRVU19CVVNZKSkKQEAgLTEyMjMsMTAgKzExOTcsOSBAQAogCQllbHNlCiAJCQlicmVhazsKIAl9Ci0JaWYgKCFpbml0aWFsaXNpbmcpIHsKLQkJRFBSSU5UCi0JCSAgICAoImdldCByZXN1bHQgZXJyb3IuIEZkYz0lZCBMYXN0IHN0YXR1cz0leCBSZWFkIGJ5dGVzPSVkXG4iLAotCQkgICAgIGZkYywgc3RhdHVzLCBpKTsKKwlpZiAoaW5pdGlhbGl6ZWQpIHsKKwkJRFBSSU5UKCJnZXQgcmVzdWx0IGVycm9yLiBGZGM9JWQgTGFzdCBzdGF0dXM9JXggUmVhZCBieXRlcz0lZFxuIiwKKwkJICAgICAgIGZkYywgc3RhdHVzLCBpKTsKIAkJc2hvd19mbG9wcHkoKTsKIAl9CiAJRkRDUy0+cmVzZXQgPSAxOwpAQCAtMTIzNywxMiArMTIxMCwxNCBAQAogLyogZG9lcyB0aGUgZmRjIG5lZWQgbW9yZSBvdXRwdXQ/ICovCiBzdGF0aWMgaW50IG5lZWRfbW9yZV9vdXRwdXQodm9pZCkKIHsKLQlpbnQgc3RhdHVzOworCWludCBzdGF0dXMgPSB3YWl0X3RpbF9yZWFkeSgpOwogCi0JaWYgKChzdGF0dXMgPSB3YWl0X3RpbF9yZWFkeSgpKSA8IDApCisJaWYgKHN0YXR1cyA8IDApCiAJCXJldHVybiAtMTsKLQlpZiAoKHN0YXR1cyAmIChTVEFUVVNfUkVBRFkgfCBTVEFUVVNfRElSIHwgU1RBVFVTX0RNQSkpID09IFNUQVRVU19SRUFEWSkKKworCWlmIChpc19yZWFkeV9zdGF0ZShzdGF0dXMpKQogCQlyZXR1cm4gTU9SRV9PVVRQVVQ7CisKIAlyZXR1cm4gcmVzdWx0KCk7CiB9CiAKQEAgLTEyNjQsOSArMTIzOSwxMiBAQAogCQlkZWZhdWx0OgogCQkJRFBSSU5UKCJJbnZhbGlkIGRhdGEgcmF0ZSBmb3IgcGVycGVuZGljdWxhciBtb2RlIVxuIik7CiAJCQljb250LT5kb25lKDApOwotCQkJRkRDUy0+cmVzZXQgPSAxOwkvKiBjb252ZW5pZW50IHdheSB0byByZXR1cm4gdG8KLQkJCQkJCSAqIHJlZG8gd2l0aG91dCB0byBtdWNoIGhhc3NsZSAoZGVlcAotCQkJCQkJICogc3RhY2sgZXQgYWwuICovCisJCQlGRENTLT5yZXNldCA9IDE7CisJCQkJCS8qCisJCQkJCSAqIGNvbnZlbmllbnQgd2F5IHRvIHJldHVybiB0bworCQkJCQkgKiByZWRvIHdpdGhvdXQgdG9vIG11Y2ggaGFzc2xlCisJCQkJCSAqIChkZWVwIHN0YWNrIGV0IGFsLikKKwkJCQkJICovCiAJCQlyZXR1cm47CiAJCX0KIAl9IGVsc2UKQEAgLTEzNjYsOSArMTM0NCw5IEBACiAKIAkvKiBDb252ZXJ0IHN0ZXAgcmF0ZSBmcm9tIG1pY3Jvc2Vjb25kcyB0byBtaWxsaXNlY29uZHMgYW5kIDQgYml0cyAqLwogCXNydCA9IDE2IC0gRElWX1JPVU5EX1VQKERQLT5zcnQgKiBzY2FsZV9kdHIgLyAxMDAwLCBOT01JTkFMX0RUUik7Ci0JaWYgKHNsb3dfZmxvcHB5KSB7CisJaWYgKHNsb3dfZmxvcHB5KQogCQlzcnQgPSBzcnQgLyA0OwotCX0KKwogCVNVUEJPVU5EKHNydCwgMHhmKTsKIAlJTkZCT1VORChzcnQsIDApOwogCkBAIC0xNDE1LDE2ICsxMzkzLDQ2IEBACiAJICogUGF1c2UgNSBtc2VjIHRvIGF2b2lkIHRyb3VibGUuIChOZWVkcyB0byBiZSAyIGppZmZpZXMpCiAJICovCiAJRkRDUy0+ZHRyID0gcmF3X2NtZC0+cmF0ZSAmIDM7Ci0JcmV0dXJuIChmZF93YWl0X2Zvcl9jb21wbGV0aW9uKGppZmZpZXMgKyAyVUwgKiBIWiAvIDEwMCwKLQkJCQkgICAgICAgKHRpbWVvdXRfZm4pIGZsb3BweV9yZWFkeSkpOworCXJldHVybiBmZF93YWl0X2Zvcl9jb21wbGV0aW9uKGppZmZpZXMgKyAyVUwgKiBIWiAvIDEwMCwKKwkJCQkgICAgICAodGltZW91dF9mbilmbG9wcHlfcmVhZHkpOwogfQkJCQkvKiBmZGNfZHRyICovCiAKIHN0YXRpYyB2b2lkIHRlbGxfc2VjdG9yKHZvaWQpCiB7Ci0JcHJpbnRrKCI6IHRyYWNrICVkLCBoZWFkICVkLCBzZWN0b3IgJWQsIHNpemUgJWQiLAotCSAgICAgICBSX1RSQUNLLCBSX0hFQUQsIFJfU0VDVE9SLCBSX1NJWkVDT0RFKTsKKwlwcl9jb250KCI6IHRyYWNrICVkLCBoZWFkICVkLCBzZWN0b3IgJWQsIHNpemUgJWQiLAorCQlSX1RSQUNLLCBSX0hFQUQsIFJfU0VDVE9SLCBSX1NJWkVDT0RFKTsKIH0JCQkJLyogdGVsbF9zZWN0b3IgKi8KIAorc3RhdGljIHZvaWQgcHJpbnRfZXJyb3JzKHZvaWQpCit7CisJRFBSSU5UKCIiKTsKKwlpZiAoU1QwICYgU1QwX0VDRSkgeworCQlwcl9jb250KCJSZWNhbGlicmF0ZSBmYWlsZWQhIik7CisJfSBlbHNlIGlmIChTVDIgJiBTVDJfQ1JDKSB7CisJCXByX2NvbnQoImRhdGEgQ1JDIGVycm9yIik7CisJCXRlbGxfc2VjdG9yKCk7CisJfSBlbHNlIGlmIChTVDEgJiBTVDFfQ1JDKSB7CisJCXByX2NvbnQoIkNSQyBlcnJvciIpOworCQl0ZWxsX3NlY3RvcigpOworCX0gZWxzZSBpZiAoKFNUMSAmIChTVDFfTUFNIHwgU1QxX05EKSkgfHwKKwkJICAgKFNUMiAmIFNUMl9NQU0pKSB7CisJCWlmICghcHJvYmluZykgeworCQkJcHJfY29udCgic2VjdG9yIG5vdCBmb3VuZCIpOworCQkJdGVsbF9zZWN0b3IoKTsKKwkJfSBlbHNlCisJCQlwcl9jb250KCJwcm9iZSBmYWlsZWQuLi4iKTsKKwl9IGVsc2UgaWYgKFNUMiAmIFNUMl9XQykgewkvKiBzZWVrIGVycm9yICovCisJCXByX2NvbnQoIndyb25nIGN5bGluZGVyIik7CisJfSBlbHNlIGlmIChTVDIgJiBTVDJfQkMpIHsJLyogY3lsaW5kZXIgbWFya2VkIGFzIGJhZCAqLworCQlwcl9jb250KCJiYWQgY3lsaW5kZXIiKTsKKwl9IGVsc2UgeworCQlwcl9jb250KCJ1bmtub3duIGVycm9yLiBTVFswLi4yXSBhcmU6IDB4JXggMHgleCAweCV4IiwKKwkJCVNUMCwgU1QxLCBTVDIpOworCQl0ZWxsX3NlY3RvcigpOworCX0KKwlwcl9jb250KCJcbiIpOworfQorCiAvKgogICogT0ssIHRoaXMgZXJyb3IgaW50ZXJwcmV0aW5nIHJvdXRpbmUgaXMgY2FsbGVkIGFmdGVyIGEKICAqIERNQSByZWFkL3dyaXRlIGhhcyBzdWNjZWVkZWQKQEAgLTE0MzcsNyArMTQ0NSw3IEBACiAJY2hhciBiYWQ7CiAKIAlpZiAoaW5yICE9IDcpIHsKLQkJRFBSSU5UKCItLSBGREMgcmVwbHkgZXJyb3IiKTsKKwkJRFBSSU5UKCItLSBGREMgcmVwbHkgZXJyb3JcbiIpOwogCQlGRENTLT5yZXNldCA9IDE7CiAJCXJldHVybiAxOwogCX0KQEAgLTE0NTAsNDMgKzE0NTgsMTcgQEAKIAkJYmFkID0gMTsKIAkJaWYgKFNUMSAmIFNUMV9XUCkgewogCQkJRFBSSU5UKCJEcml2ZSBpcyB3cml0ZSBwcm90ZWN0ZWRcbiIpOwotCQkJQ0xFQVJGKEZEX0RJU0tfV1JJVEFCTEUpOworCQkJY2xlYXJfYml0KEZEX0RJU0tfV1JJVEFCTEVfQklULCAmRFJTLT5mbGFncyk7CiAJCQljb250LT5kb25lKDApOwogCQkJYmFkID0gMjsKIAkJfSBlbHNlIGlmIChTVDEgJiBTVDFfTkQpIHsKLQkJCVNFVEYoRkRfTkVFRF9UV0FERExFKTsKKwkJCXNldF9iaXQoRkRfTkVFRF9UV0FERExFX0JJVCwgJkRSUy0+ZmxhZ3MpOwogCQl9IGVsc2UgaWYgKFNUMSAmIFNUMV9PUikgewogCQkJaWYgKERQLT5mbGFncyAmIEZURF9NU0cpCiAJCQkJRFBSSU5UKCJPdmVyL1VuZGVycnVuIC0gcmV0cnlpbmdcbiIpOwogCQkJYmFkID0gMDsKIAkJfSBlbHNlIGlmICgqZXJyb3JzID49IERQLT5tYXhfZXJyb3JzLnJlcG9ydGluZykgewotCQkJRFBSSU5UKCIiKTsKLQkJCWlmIChTVDAgJiBTVDBfRUNFKSB7Ci0JCQkJcHJpbnRrKCJSZWNhbGlicmF0ZSBmYWlsZWQhIik7Ci0JCQl9IGVsc2UgaWYgKFNUMiAmIFNUMl9DUkMpIHsKLQkJCQlwcmludGsoImRhdGEgQ1JDIGVycm9yIik7Ci0JCQkJdGVsbF9zZWN0b3IoKTsKLQkJCX0gZWxzZSBpZiAoU1QxICYgU1QxX0NSQykgewotCQkJCXByaW50aygiQ1JDIGVycm9yIik7Ci0JCQkJdGVsbF9zZWN0b3IoKTsKLQkJCX0gZWxzZSBpZiAoKFNUMSAmIChTVDFfTUFNIHwgU1QxX05EKSkKLQkJCQkgICB8fCAoU1QyICYgU1QyX01BTSkpIHsKLQkJCQlpZiAoIXByb2JpbmcpIHsKLQkJCQkJcHJpbnRrKCJzZWN0b3Igbm90IGZvdW5kIik7Ci0JCQkJCXRlbGxfc2VjdG9yKCk7Ci0JCQkJfSBlbHNlCi0JCQkJCXByaW50aygicHJvYmUgZmFpbGVkLi4uIik7Ci0JCQl9IGVsc2UgaWYgKFNUMiAmIFNUMl9XQykgewkvKiBzZWVrIGVycm9yICovCi0JCQkJcHJpbnRrKCJ3cm9uZyBjeWxpbmRlciIpOwotCQkJfSBlbHNlIGlmIChTVDIgJiBTVDJfQkMpIHsJLyogY3lsaW5kZXIgbWFya2VkIGFzIGJhZCAqLwotCQkJCXByaW50aygiYmFkIGN5bGluZGVyIik7Ci0JCQl9IGVsc2UgewotCQkJCXByaW50awotCQkJCSAgICAoInVua25vd24gZXJyb3IuIFNUWzAuLjJdIGFyZTogMHgleCAweCV4IDB4JXgiLAotCQkJCSAgICAgU1QwLCBTVDEsIFNUMik7Ci0JCQkJdGVsbF9zZWN0b3IoKTsKLQkJCX0KLQkJCXByaW50aygiXG4iKTsKKwkJCXByaW50X2Vycm9ycygpOwogCQl9CiAJCWlmIChTVDIgJiBTVDJfV0MgfHwgU1QyICYgU1QyX0JDKQogCQkJLyogd3JvbmcgY3lsaW5kZXIgPT4gcmVjYWwgKi8KQEAgLTE1MzEsOSArMTUxMyw5IEBACiAJCSAqLwogCQlpZiAodGltZV9hZnRlcihyZWFkeV9kYXRlLCBqaWZmaWVzICsgRFAtPnNlbGVjdF9kZWxheSkpIHsKIAkJCXJlYWR5X2RhdGUgLT0gRFAtPnNlbGVjdF9kZWxheTsKLQkJCWZ1bmN0aW9uID0gKHRpbWVvdXRfZm4pIGZsb3BweV9zdGFydDsKKwkJCWZ1bmN0aW9uID0gKHRpbWVvdXRfZm4pZmxvcHB5X3N0YXJ0OwogCQl9IGVsc2UKLQkJCWZ1bmN0aW9uID0gKHRpbWVvdXRfZm4pIHNldHVwX3J3X2Zsb3BweTsKKwkJCWZ1bmN0aW9uID0gKHRpbWVvdXRfZm4pc2V0dXBfcndfZmxvcHB5OwogCiAJCS8qIHdhaXQgdW50aWwgdGhlIGZsb3BweSBpcyBzcGlubmluZyBmYXN0IGVub3VnaCAqLwogCQlpZiAoZmRfd2FpdF9mb3JfY29tcGxldGlvbihyZWFkeV9kYXRlLCBmdW5jdGlvbikpCkBAIC0xNTUxLDcgKzE1MzMsNyBAQAogCWZvciAoaSA9IDA7IGkgPCByYXdfY21kLT5jbWRfY291bnQ7IGkrKykKIAkJciB8PSBvdXRwdXRfYnl0ZShyYXdfY21kLT5jbWRbaV0pOwogCi0JZGVidWd0KCJyd19jb21tYW5kOiAiKTsKKwlkZWJ1Z3QoX19mdW5jX18sICJyd19jb21tYW5kIik7CiAKIAlpZiAocikgewogCQljb250LT5lcnJvcigpOwpAQCAtMTU3NCw3ICsxNTU2LDcgQEAKICAqLwogc3RhdGljIHZvaWQgc2Vla19pbnRlcnJ1cHQodm9pZCkKIHsKLQlkZWJ1Z3QoInNlZWsgaW50ZXJydXB0OiIpOworCWRlYnVndChfX2Z1bmNfXywgIiIpOwogCWlmIChpbnIgIT0gMiB8fCAoU1QwICYgMHhGOCkgIT0gMHgyMCkgewogCQlEUFJJTlQoInNlZWsgZmFpbGVkXG4iKTsKIAkJRFJTLT50cmFjayA9IE5FRURfMl9SRUNBTDsKQEAgLTE1ODMsMTQgKzE1NjUsMTEgQEAKIAkJcmV0dXJuOwogCX0KIAlpZiAoRFJTLT50cmFjayA+PSAwICYmIERSUy0+dHJhY2sgIT0gU1QxICYmICFibGluZF9zZWVrKSB7Ci0jaWZkZWYgRENMX0RFQlVHCi0JCWlmIChEUC0+ZmxhZ3MgJiBGRF9ERUJVRykgewotCQkJRFBSSU5UCi0JCQkgICAgKCJjbGVhcmluZyBORVdDSEFOR0UgZmxhZyBiZWNhdXNlIG9mIGVmZmVjdGl2ZSBzZWVrXG4iKTsKLQkJCURQUklOVCgiamlmZmllcz0lbHVcbiIsIGppZmZpZXMpOwotCQl9Ci0jZW5kaWYKLQkJQ0xFQVJGKEZEX0RJU0tfTkVXQ0hBTkdFKTsJLyogZWZmZWN0aXZlIHNlZWsgKi8KKwkJZGVidWdfZGNsKERQLT5mbGFncywKKwkJCSAgImNsZWFyaW5nIE5FV0NIQU5HRSBmbGFnIGJlY2F1c2Ugb2YgZWZmZWN0aXZlIHNlZWtcbiIpOworCQlkZWJ1Z19kY2woRFAtPmZsYWdzLCAiamlmZmllcz0lbHVcbiIsIGppZmZpZXMpOworCQljbGVhcl9iaXQoRkRfRElTS19ORVdDSEFOR0VfQklULCAmRFJTLT5mbGFncyk7CisJCQkJCS8qIGVmZmVjdGl2ZSBzZWVrICovCiAJCURSUy0+c2VsZWN0X2RhdGUgPSBqaWZmaWVzOwogCX0KIAlEUlMtPnRyYWNrID0gU1QxOwpAQCAtMTU5OSwyNiArMTU3OCwyMyBAQAogCiBzdGF0aWMgdm9pZCBjaGVja193cCh2b2lkKQogewotCWlmIChURVNURihGRF9WRVJJRlkpKSB7Ci0JCS8qIGNoZWNrIHdyaXRlIHByb3RlY3Rpb24gKi8KKwlpZiAodGVzdF9iaXQoRkRfVkVSSUZZX0JJVCwgJkRSUy0+ZmxhZ3MpKSB7CisJCQkJCS8qIGNoZWNrIHdyaXRlIHByb3RlY3Rpb24gKi8KIAkJb3V0cHV0X2J5dGUoRkRfR0VUU1RBVFVTKTsKIAkJb3V0cHV0X2J5dGUoVU5JVChjdXJyZW50X2RyaXZlKSk7CiAJCWlmIChyZXN1bHQoKSAhPSAxKSB7CiAJCQlGRENTLT5yZXNldCA9IDE7CiAJCQlyZXR1cm47CiAJCX0KLQkJQ0xFQVJGKEZEX1ZFUklGWSk7Ci0JCUNMRUFSRihGRF9ORUVEX1RXQURETEUpOwotI2lmZGVmIERDTF9ERUJVRwotCQlpZiAoRFAtPmZsYWdzICYgRkRfREVCVUcpIHsKLQkJCURQUklOVCgiY2hlY2tpbmcgd2hldGhlciBkaXNrIGlzIHdyaXRlIHByb3RlY3RlZFxuIik7Ci0JCQlEUFJJTlQoIndwPSV4XG4iLCBTVDMgJiAweDQwKTsKLQkJfQotI2VuZGlmCisJCWNsZWFyX2JpdChGRF9WRVJJRllfQklULCAmRFJTLT5mbGFncyk7CisJCWNsZWFyX2JpdChGRF9ORUVEX1RXQURETEVfQklULCAmRFJTLT5mbGFncyk7CisJCWRlYnVnX2RjbChEUC0+ZmxhZ3MsCisJCQkgICJjaGVja2luZyB3aGV0aGVyIGRpc2sgaXMgd3JpdGUgcHJvdGVjdGVkXG4iKTsKKwkJZGVidWdfZGNsKERQLT5mbGFncywgIndwPSV4XG4iLCBTVDMgJiAweDQwKTsKIAkJaWYgKCEoU1QzICYgMHg0MCkpCi0JCQlTRVRGKEZEX0RJU0tfV1JJVEFCTEUpOworCQkJc2V0X2JpdChGRF9ESVNLX1dSSVRBQkxFX0JJVCwgJkRSUy0+ZmxhZ3MpOwogCQllbHNlCi0JCQlDTEVBUkYoRkRfRElTS19XUklUQUJMRSk7CisJCQljbGVhcl9iaXQoRkRfRElTS19XUklUQUJMRV9CSVQsICZEUlMtPmZsYWdzKTsKIAl9CiB9CiAKQEAgLTE2MjgsMTkgKzE2MDQsMTUgQEAKIAogCWJsaW5kX3NlZWsgPSAwOwogCi0jaWZkZWYgRENMX0RFQlVHCi0JaWYgKERQLT5mbGFncyAmIEZEX0RFQlVHKSB7Ci0JCURQUklOVCgiY2FsbGluZyBkaXNrIGNoYW5nZSBmcm9tIHNlZWtcbiIpOwotCX0KLSNlbmRpZgorCWRlYnVnX2RjbChEUC0+ZmxhZ3MsICJjYWxsaW5nIGRpc2sgY2hhbmdlIGZyb20gJXNcbiIsIF9fZnVuY19fKTsKIAotCWlmICghVEVTVEYoRkRfRElTS19ORVdDSEFOR0UpICYmCisJaWYgKCF0ZXN0X2JpdChGRF9ESVNLX05FV0NIQU5HRV9CSVQsICZEUlMtPmZsYWdzKSAmJgogCSAgICBkaXNrX2NoYW5nZShjdXJyZW50X2RyaXZlKSAmJiAocmF3X2NtZC0+ZmxhZ3MgJiBGRF9SQVdfTkVFRF9ESVNLKSkgewogCQkvKiB0aGUgbWVkaWEgY2hhbmdlZCBmbGFnIHNob3VsZCBiZSBjbGVhcmVkIGFmdGVyIHRoZSBzZWVrLgogCQkgKiBJZiBpdCBpc24ndCwgdGhpcyBtZWFucyB0aGF0IHRoZXJlIGlzIHJlYWxseSBubyBkaXNrIGluCiAJCSAqIHRoZSBkcml2ZS4KIAkJICovCi0JCVNFVEYoRkRfRElTS19DSEFOR0VEKTsKKwkJc2V0X2JpdChGRF9ESVNLX0NIQU5HRURfQklULCAmRFJTLT5mbGFncyk7CiAJCWNvbnQtPmRvbmUoMCk7CiAJCWNvbnQtPnJlZG8oKTsKIAkJcmV0dXJuOwpAQCAtMTY0OCw3ICsxNjIwLDcgQEAKIAlpZiAoRFJTLT50cmFjayA8PSBORUVEXzFfUkVDQUwpIHsKIAkJcmVjYWxpYnJhdGVfZmxvcHB5KCk7CiAJCXJldHVybjsKLQl9IGVsc2UgaWYgKFRFU1RGKEZEX0RJU0tfTkVXQ0hBTkdFKSAmJgorCX0gZWxzZSBpZiAodGVzdF9iaXQoRkRfRElTS19ORVdDSEFOR0VfQklULCAmRFJTLT5mbGFncykgJiYKIAkJICAgKHJhd19jbWQtPmZsYWdzICYgRkRfUkFXX05FRURfRElTSykgJiYKIAkJICAgKERSUy0+dHJhY2sgPD0gTk9fVFJBQ0sgfHwgRFJTLT50cmFjayA9PSByYXdfY21kLT50cmFjaykpIHsKIAkJLyogd2Ugc2VlayB0byBjbGVhciB0aGUgbWVkaWEtY2hhbmdlZCBjb25kaXRpb24uIERvZXMgYW55Ym9keQpAQCAtMTY3NywxOSArMTY0OSwyMiBAQAogCWRvX2Zsb3BweSA9IHNlZWtfaW50ZXJydXB0OwogCW91dHB1dF9ieXRlKEZEX1NFRUspOwogCW91dHB1dF9ieXRlKFVOSVQoY3VycmVudF9kcml2ZSkpOwotCUxBU1RfT1VUKHRyYWNrKTsKLQlkZWJ1Z3QoInNlZWsgY29tbWFuZDoiKTsKKwlpZiAob3V0cHV0X2J5dGUodHJhY2spIDwgMCkgeworCQlyZXNldF9mZGMoKTsKKwkJcmV0dXJuOworCX0KKwlkZWJ1Z3QoX19mdW5jX18sICIiKTsKIH0KIAogc3RhdGljIHZvaWQgcmVjYWxfaW50ZXJydXB0KHZvaWQpCiB7Ci0JZGVidWd0KCJyZWNhbCBpbnRlcnJ1cHQ6Iik7CisJZGVidWd0KF9fZnVuY19fLCAiIik7CiAJaWYgKGluciAhPSAyKQogCQlGRENTLT5yZXNldCA9IDE7CiAJZWxzZSBpZiAoU1QwICYgU1QwX0VDRSkgewogCQlzd2l0Y2ggKERSUy0+dHJhY2spIHsKIAkJY2FzZSBORUVEXzFfUkVDQUw6Ci0JCQlkZWJ1Z3QoInJlY2FsIGludGVycnVwdCBuZWVkIDEgcmVjYWw6Iik7CisJCQlkZWJ1Z3QoX19mdW5jX18sICJuZWVkIDEgcmVjYWwiKTsKIAkJCS8qIGFmdGVyIGEgc2Vjb25kIHJlY2FsaWJyYXRlLCB3ZSBzdGlsbCBoYXZlbid0CiAJCQkgKiByZWFjaGVkIHRyYWNrIDAuIFByb2JhYmx5IG5vIGRyaXZlLiBSYWlzZSBhbgogCQkJICogZXJyb3IsIGFzIGZhaWxpbmcgaW1tZWRpYXRlbHkgbWlnaHQgdXBzZXQKQEAgLTE2OTgsMjUgKzE2NzMsMjEgQEAKIAkJCWNvbnQtPnJlZG8oKTsKIAkJCXJldHVybjsKIAkJY2FzZSBORUVEXzJfUkVDQUw6Ci0JCQlkZWJ1Z3QoInJlY2FsIGludGVycnVwdCBuZWVkIDIgcmVjYWw6Iik7CisJCQlkZWJ1Z3QoX19mdW5jX18sICJuZWVkIDIgcmVjYWwiKTsKIAkJCS8qIElmIHdlIGFscmVhZHkgZGlkIGEgcmVjYWxpYnJhdGUsCiAJCQkgKiBhbmQgd2UgYXJlIG5vdCBhdCB0cmFjayAwLCB0aGlzCiAJCQkgKiBtZWFucyB3ZSBoYXZlIG1vdmVkLiAoVGhlIG9ubHkgd2F5CiAJCQkgKiBub3QgdG8gbW92ZSBhdCByZWNhbGlicmF0aW9uIGlzIHRvCiAJCQkgKiBiZSBhbHJlYWR5IGF0IHRyYWNrIDAuKSBDbGVhciB0aGUKIAkJCSAqIG5ldyBjaGFuZ2UgZmxhZyAqLwotI2lmZGVmIERDTF9ERUJVRwotCQkJaWYgKERQLT5mbGFncyAmIEZEX0RFQlVHKSB7Ci0JCQkJRFBSSU5UCi0JCQkJICAgICgiY2xlYXJpbmcgTkVXQ0hBTkdFIGZsYWcgYmVjYXVzZSBvZiBzZWNvbmQgcmVjYWxpYnJhdGVcbiIpOwotCQkJfQotI2VuZGlmCisJCQlkZWJ1Z19kY2woRFAtPmZsYWdzLAorCQkJCSAgImNsZWFyaW5nIE5FV0NIQU5HRSBmbGFnIGJlY2F1c2Ugb2Ygc2Vjb25kIHJlY2FsaWJyYXRlXG4iKTsKIAotCQkJQ0xFQVJGKEZEX0RJU0tfTkVXQ0hBTkdFKTsKKwkJCWNsZWFyX2JpdChGRF9ESVNLX05FV0NIQU5HRV9CSVQsICZEUlMtPmZsYWdzKTsKIAkJCURSUy0+c2VsZWN0X2RhdGUgPSBqaWZmaWVzOwogCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCWRlZmF1bHQ6Ci0JCQlkZWJ1Z3QoInJlY2FsIGludGVycnVwdCBkZWZhdWx0OiIpOworCQkJZGVidWd0KF9fZnVuY19fLCAiZGVmYXVsdCIpOwogCQkJLyogUmVjYWxpYnJhdGUgbW92ZXMgdGhlIGhlYWQgYnkgYXQKIAkJCSAqIG1vc3QgODAgc3RlcHMuIElmIGFmdGVyIG9uZQogCQkJICogcmVjYWxpYnJhdGUgd2UgZG9uJ3QgaGF2ZSByZWFjaGVkCkBAIC0xNzM4LDggKzE3MDksOCBAQAogCURQUklOVCgiJXMgIiwgbWVzc2FnZSk7CiAJaWYgKGluciA+PSAwKQogCQlmb3IgKGkgPSAwOyBpIDwgaW5yOyBpKyspCi0JCQlwcmludGsoInJlcGxbJWRdPSV4ICIsIGksIHJlcGx5X2J1ZmZlcltpXSk7Ci0JcHJpbnRrKCJcbiIpOworCQkJcHJfY29udCgicmVwbFslZF09JXggIiwgaSwgcmVwbHlfYnVmZmVyW2ldKTsKKwlwcl9jb250KCJcbiIpOwogfQogCiAvKiBpbnRlcnJ1cHQgaGFuZGxlci4gTm90ZSB0aGF0IHRoaXMgY2FuIGJlIGNhbGxlZCBleHRlcm5hbGx5IG9uIHRoZSBTcGFyYyAqLwpAQCAtMTc2MCwxMCArMTczMSwxMCBAQAogCWRvX2Zsb3BweSA9IE5VTEw7CiAJaWYgKGZkYyA+PSBOX0ZEQyB8fCBGRENTLT5hZGRyZXNzID09IC0xKSB7CiAJCS8qIHdlIGRvbid0IGV2ZW4ga25vdyB3aGljaCBGREMgaXMgdGhlIGN1bHByaXQgKi8KLQkJcHJpbnRrKCJET1IwPSV4XG4iLCBmZGNfc3RhdGVbMF0uZG9yKTsKLQkJcHJpbnRrKCJmbG9wcHkgaW50ZXJydXB0IG9uIGJpemFycmUgZmRjICVkXG4iLCBmZGMpOwotCQlwcmludGsoImhhbmRsZXI9JXBcbiIsIGhhbmRsZXIpOwotCQlpc19hbGl2ZSgiYml6YXJyZSBmZGMiKTsKKwkJcHJfaW5mbygiRE9SMD0leFxuIiwgZmRjX3N0YXRlWzBdLmRvcik7CisJCXByX2luZm8oImZsb3BweSBpbnRlcnJ1cHQgb24gYml6YXJyZSBmZGMgJWRcbiIsIGZkYyk7CisJCXByX2luZm8oImhhbmRsZXI9JXBmXG4iLCBoYW5kbGVyKTsKKwkJaXNfYWxpdmUoX19mdW5jX18sICJiaXphcnJlIGZkYyIpOwogCQlyZXR1cm4gSVJRX05PTkU7CiAJfQogCkBAIC0xNzc3LDcgKzE3NDgsNyBAQAogCSAqIGFjdGl2aXR5LgogCSAqLwogCi0JZG9fcHJpbnQgPSAhaGFuZGxlciAmJiBwcmludF91bmV4ICYmICFpbml0aWFsaXNpbmc7CisJZG9fcHJpbnQgPSAhaGFuZGxlciAmJiBwcmludF91bmV4ICYmIGluaXRpYWxpemVkOwogCiAJaW5yID0gcmVzdWx0KCk7CiAJaWYgKGRvX3ByaW50KQpAQCAtMTc5MCwxNSArMTc2MSwxNSBAQAogCQkJaWYgKGRvX3ByaW50KQogCQkJCXByaW50X3Jlc3VsdCgic2Vuc2VpIiwgaW5yKTsKIAkJCW1heF9zZW5zZWktLTsKLQkJfSB3aGlsZSAoKFNUMCAmIDB4ODMpICE9IFVOSVQoY3VycmVudF9kcml2ZSkgJiYgaW5yID09IDIKLQkJCSAmJiBtYXhfc2Vuc2VpKTsKKwkJfSB3aGlsZSAoKFNUMCAmIDB4ODMpICE9IFVOSVQoY3VycmVudF9kcml2ZSkgJiYKKwkJCSBpbnIgPT0gMiAmJiBtYXhfc2Vuc2VpKTsKIAl9CiAJaWYgKCFoYW5kbGVyKSB7CiAJCUZEQ1MtPnJlc2V0ID0gMTsKIAkJcmV0dXJuIElSUV9OT05FOwogCX0KIAlzY2hlZHVsZV9iaChoYW5kbGVyKTsKLQlpc19hbGl2ZSgibm9ybWFsIGludGVycnVwdCBlbmQiKTsKKwlpc19hbGl2ZShfX2Z1bmNfXywgIm5vcm1hbCBpbnRlcnJ1cHQgZW5kIik7CiAKIAkvKiBGSVhNRSEgV2FzIGl0IHJlYWxseSBmb3IgdXM/ICovCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtMTgwNiwxMCArMTc3NywxMSBAQAogCiBzdGF0aWMgdm9pZCByZWNhbGlicmF0ZV9mbG9wcHkodm9pZCkKIHsKLQlkZWJ1Z3QoInJlY2FsaWJyYXRlIGZsb3BweToiKTsKKwlkZWJ1Z3QoX19mdW5jX18sICIiKTsKIAlkb19mbG9wcHkgPSByZWNhbF9pbnRlcnJ1cHQ7CiAJb3V0cHV0X2J5dGUoRkRfUkVDQUxJQlJBVEUpOwotCUxBU1RfT1VUKFVOSVQoY3VycmVudF9kcml2ZSkpOworCWlmIChvdXRwdXRfYnl0ZShVTklUKGN1cnJlbnRfZHJpdmUpKSA8IDApCisJCXJlc2V0X2ZkYygpOwogfQogCiAvKgpAQCAtMTgxNywxMCArMTc4OSwxMCBAQAogICovCiBzdGF0aWMgdm9pZCByZXNldF9pbnRlcnJ1cHQodm9pZCkKIHsKLQlkZWJ1Z3QoInJlc2V0IGludGVycnVwdDoiKTsKKwlkZWJ1Z3QoX19mdW5jX18sICIiKTsKIAlyZXN1bHQoKTsJCS8qIGdldCB0aGUgc3RhdHVzIHJlYWR5IGZvciBzZXRfZmRjICovCiAJaWYgKEZEQ1MtPnJlc2V0KSB7Ci0JCXByaW50aygicmVzZXQgc2V0IGluIGludGVycnVwdCwgY2FsbGluZyAlcFxuIiwgY29udC0+ZXJyb3IpOworCQlwcl9pbmZvKCJyZXNldCBzZXQgaW4gaW50ZXJydXB0LCBjYWxsaW5nICVwZlxuIiwgY29udC0+ZXJyb3IpOwogCQljb250LT5lcnJvcigpOwkvKiBhIHJlc2V0IGp1c3QgYWZ0ZXIgYSByZXNldC4gQkFEISAqLwogCX0KIAljb250LT5yZWRvKCk7CkBAIC0xODU4LDUzICsxODMwLDQ5IEBACiB7CiAJaW50IGk7CiAKLQlwcmludGsoIlxuIik7Ci0JcHJpbnRrKCJmbG9wcHkgZHJpdmVyIHN0YXRlXG4iKTsKLQlwcmludGsoIi0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwotCXByaW50aygibm93PSVsdSBsYXN0IGludGVycnVwdD0lbHUgZGlmZj0lbHUgbGFzdCBjYWxsZWQgaGFuZGxlcj0lcFxuIiwKLQkgICAgICAgamlmZmllcywgaW50ZXJydXB0amlmZmllcywgamlmZmllcyAtIGludGVycnVwdGppZmZpZXMsCi0JICAgICAgIGxhc3RoYW5kbGVyKTsKKwlwcl9pbmZvKCJcbiIpOworCXByX2luZm8oImZsb3BweSBkcml2ZXIgc3RhdGVcbiIpOworCXByX2luZm8oIi0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCXByX2luZm8oIm5vdz0lbHUgbGFzdCBpbnRlcnJ1cHQ9JWx1IGRpZmY9JWx1IGxhc3QgY2FsbGVkIGhhbmRsZXI9JXBmXG4iLAorCQlqaWZmaWVzLCBpbnRlcnJ1cHRqaWZmaWVzLCBqaWZmaWVzIC0gaW50ZXJydXB0amlmZmllcywKKwkJbGFzdGhhbmRsZXIpOwogCi0jaWZkZWYgRkxPUFBZX1NBTklUWV9DSEVDSwotCXByaW50aygidGltZW91dF9tZXNzYWdlPSVzXG4iLCB0aW1lb3V0X21lc3NhZ2UpOwotCXByaW50aygibGFzdCBvdXRwdXQgYnl0ZXM6XG4iKTsKKwlwcl9pbmZvKCJ0aW1lb3V0X21lc3NhZ2U9JXNcbiIsIHRpbWVvdXRfbWVzc2FnZSk7CisJcHJfaW5mbygibGFzdCBvdXRwdXQgYnl0ZXM6XG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgT0xPR1NJWkU7IGkrKykKLQkJcHJpbnRrKCIlMnggJTJ4ICVsdVxuIiwKLQkJICAgICAgIG91dHB1dF9sb2dbKGkgKyBvdXRwdXRfbG9nX3BvcykgJSBPTE9HU0laRV0uZGF0YSwKLQkJICAgICAgIG91dHB1dF9sb2dbKGkgKyBvdXRwdXRfbG9nX3BvcykgJSBPTE9HU0laRV0uc3RhdHVzLAotCQkgICAgICAgb3V0cHV0X2xvZ1soaSArIG91dHB1dF9sb2dfcG9zKSAlIE9MT0dTSVpFXS5qaWZmaWVzKTsKLQlwcmludGsoImxhc3QgcmVzdWx0IGF0ICVsdVxuIiwgcmVzdWx0amlmZmllcyk7Ci0JcHJpbnRrKCJsYXN0IHJlZG9fZmRfcmVxdWVzdCBhdCAlbHVcbiIsIGxhc3RyZWRvKTsKLQlmb3IgKGkgPSAwOyBpIDwgcmVzdWx0c2l6ZTsgaSsrKSB7Ci0JCXByaW50aygiJTJ4ICIsIHJlcGx5X2J1ZmZlcltpXSk7Ci0JfQotCXByaW50aygiXG4iKTsKLSNlbmRpZgorCQlwcl9pbmZvKCIlMnggJTJ4ICVsdVxuIiwKKwkJCW91dHB1dF9sb2dbKGkgKyBvdXRwdXRfbG9nX3BvcykgJSBPTE9HU0laRV0uZGF0YSwKKwkJCW91dHB1dF9sb2dbKGkgKyBvdXRwdXRfbG9nX3BvcykgJSBPTE9HU0laRV0uc3RhdHVzLAorCQkJb3V0cHV0X2xvZ1soaSArIG91dHB1dF9sb2dfcG9zKSAlIE9MT0dTSVpFXS5qaWZmaWVzKTsKKwlwcl9pbmZvKCJsYXN0IHJlc3VsdCBhdCAlbHVcbiIsIHJlc3VsdGppZmZpZXMpOworCXByX2luZm8oImxhc3QgcmVkb19mZF9yZXF1ZXN0IGF0ICVsdVxuIiwgbGFzdHJlZG8pOworCXByaW50X2hleF9kdW1wKEtFUk5fSU5GTywgIiIsIERVTVBfUFJFRklYX05PTkUsIDE2LCAxLAorCQkgICAgICAgcmVwbHlfYnVmZmVyLCByZXN1bHRzaXplLCB0cnVlKTsKIAotCXByaW50aygic3RhdHVzPSV4XG4iLCBmZF9pbmIoRkRfU1RBVFVTKSk7Ci0JcHJpbnRrKCJmZGNfYnVzeT0lbHVcbiIsIGZkY19idXN5KTsKKwlwcl9pbmZvKCJzdGF0dXM9JXhcbiIsIGZkX2luYihGRF9TVEFUVVMpKTsKKwlwcl9pbmZvKCJmZGNfYnVzeT0lbHVcbiIsIGZkY19idXN5KTsKIAlpZiAoZG9fZmxvcHB5KQotCQlwcmludGsoImRvX2Zsb3BweT0lcFxuIiwgZG9fZmxvcHB5KTsKKwkJcHJfaW5mbygiZG9fZmxvcHB5PSVwZlxuIiwgZG9fZmxvcHB5KTsKIAlpZiAod29ya19wZW5kaW5nKCZmbG9wcHlfd29yaykpCi0JCXByaW50aygiZmxvcHB5X3dvcmsuZnVuYz0lcFxuIiwgZmxvcHB5X3dvcmsuZnVuYyk7CisJCXByX2luZm8oImZsb3BweV93b3JrLmZ1bmM9JXBmXG4iLCBmbG9wcHlfd29yay5mdW5jKTsKIAlpZiAodGltZXJfcGVuZGluZygmZmRfdGltZXIpKQotCQlwcmludGsoImZkX3RpbWVyLmZ1bmN0aW9uPSVwXG4iLCBmZF90aW1lci5mdW5jdGlvbik7CisJCXByX2luZm8oImZkX3RpbWVyLmZ1bmN0aW9uPSVwZlxuIiwgZmRfdGltZXIuZnVuY3Rpb24pOwogCWlmICh0aW1lcl9wZW5kaW5nKCZmZF90aW1lb3V0KSkgewotCQlwcmludGsoInRpbWVyX2Z1bmN0aW9uPSVwXG4iLCBmZF90aW1lb3V0LmZ1bmN0aW9uKTsKLQkJcHJpbnRrKCJleHBpcmVzPSVsdVxuIiwgZmRfdGltZW91dC5leHBpcmVzIC0gamlmZmllcyk7Ci0JCXByaW50aygibm93PSVsdVxuIiwgamlmZmllcyk7CisJCXByX2luZm8oInRpbWVyX2Z1bmN0aW9uPSVwZlxuIiwgZmRfdGltZW91dC5mdW5jdGlvbik7CisJCXByX2luZm8oImV4cGlyZXM9JWx1XG4iLCBmZF90aW1lb3V0LmV4cGlyZXMgLSBqaWZmaWVzKTsKKwkJcHJfaW5mbygibm93PSVsdVxuIiwgamlmZmllcyk7CiAJfQotCXByaW50aygiY29udD0lcFxuIiwgY29udCk7Ci0JcHJpbnRrKCJjdXJyZW50X3JlcT0lcFxuIiwgY3VycmVudF9yZXEpOwotCXByaW50aygiY29tbWFuZF9zdGF0dXM9JWRcbiIsIGNvbW1hbmRfc3RhdHVzKTsKLQlwcmludGsoIlxuIik7CisJcHJfaW5mbygiY29udD0lcFxuIiwgY29udCk7CisJcHJfaW5mbygiY3VycmVudF9yZXE9JXBcbiIsIGN1cnJlbnRfcmVxKTsKKwlwcl9pbmZvKCJjb21tYW5kX3N0YXR1cz0lZFxuIiwgY29tbWFuZF9zdGF0dXMpOworCXByX2luZm8oIlxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGZsb3BweV9zaHV0ZG93bih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmICghaW5pdGlhbGlzaW5nKQorCWlmIChpbml0aWFsaXplZCkKIAkJc2hvd19mbG9wcHkoKTsKIAljYW5jZWxfYWN0aXZpdHkoKTsKIApAQCAtMTkxNiwxNyArMTg4NCwxNyBAQAogCiAJLyogYXZvaWQgZG1hIGdvaW5nIHRvIGEgcmFuZG9tIGRyaXZlIGFmdGVyIHNodXRkb3duICovCiAKLQlpZiAoIWluaXRpYWxpc2luZykKKwlpZiAoaW5pdGlhbGl6ZWQpCiAJCURQUklOVCgiZmxvcHB5IHRpbWVvdXQgY2FsbGVkXG4iKTsKIAlGRENTLT5yZXNldCA9IDE7CiAJaWYgKGNvbnQpIHsKIAkJY29udC0+ZG9uZSgwKTsKIAkJY29udC0+cmVkbygpOwkvKiB0aGlzIHdpbGwgcmVjYWxsIHJlc2V0IHdoZW4gbmVlZGVkICovCiAJfSBlbHNlIHsKLQkJcHJpbnRrKCJubyBjb250IGluIHNodXRkb3duIVxuIik7CisJCXByX2luZm8oIm5vIGNvbnQgaW4gc2h1dGRvd24hXG4iKTsKIAkJcHJvY2Vzc19mZF9yZXF1ZXN0KCk7CiAJfQotCWlzX2FsaXZlKCJmbG9wcHkgc2h1dGRvd24iKTsKKwlpc19hbGl2ZShfX2Z1bmNfXywgIiIpOwogfQogCiAvKiBzdGFydCBtb3RvciwgY2hlY2sgbWVkaWEtY2hhbmdlZCBjb25kaXRpb24gYW5kIHdyaXRlIHByb3RlY3Rpb24gKi8KQEAgLTE5NTQsMjcgKzE5MjIsMjYgQEAKIAlzZXRfZG9yKGZkYywgbWFzaywgZGF0YSk7CiAKIAkvKiB3YWl0X2Zvcl9jb21wbGV0aW9uIGFsc28gc2NoZWR1bGVzIHJlc2V0IGlmIG5lZWRlZC4gKi8KLQlyZXR1cm4gKGZkX3dhaXRfZm9yX2NvbXBsZXRpb24oRFJTLT5zZWxlY3RfZGF0ZSArIERQLT5zZWxlY3RfZGVsYXksCi0JCQkJICAgICAgICh0aW1lb3V0X2ZuKSBmdW5jdGlvbikpOworCXJldHVybiBmZF93YWl0X2Zvcl9jb21wbGV0aW9uKERSUy0+c2VsZWN0X2RhdGUgKyBEUC0+c2VsZWN0X2RlbGF5LAorCQkJCSAgICAgICh0aW1lb3V0X2ZuKWZ1bmN0aW9uKTsKIH0KIAogc3RhdGljIHZvaWQgZmxvcHB5X3JlYWR5KHZvaWQpCiB7Ci0JQ0hFQ0tfUkVTRVQ7CisJaWYgKEZEQ1MtPnJlc2V0KSB7CisJCXJlc2V0X2ZkYygpOworCQlyZXR1cm47CisJfQogCWlmIChzdGFydF9tb3RvcihmbG9wcHlfcmVhZHkpKQogCQlyZXR1cm47CiAJaWYgKGZkY19kdHIoKSkKIAkJcmV0dXJuOwogCi0jaWZkZWYgRENMX0RFQlVHCi0JaWYgKERQLT5mbGFncyAmIEZEX0RFQlVHKSB7Ci0JCURQUklOVCgiY2FsbGluZyBkaXNrIGNoYW5nZSBmcm9tIGZsb3BweV9yZWFkeVxuIik7Ci0JfQotI2VuZGlmCisJZGVidWdfZGNsKERQLT5mbGFncywgImNhbGxpbmcgZGlzayBjaGFuZ2UgZnJvbSBmbG9wcHlfcmVhZHlcbiIpOwogCWlmICghKHJhd19jbWQtPmZsYWdzICYgRkRfUkFXX05PX01PVE9SKSAmJgogCSAgICBkaXNrX2NoYW5nZShjdXJyZW50X2RyaXZlKSAmJiAhRFAtPnNlbGVjdF9kZWxheSkKLQkJdHdhZGRsZSgpOwkvKiB0aGlzIGNsZWFycyB0aGUgZGNsIG9uIGNlcnRhaW4gZHJpdmUvY29udHJvbGxlcgotCQkJCSAqIGNvbWJpbmF0aW9ucyAqLworCQl0d2FkZGxlKCk7CS8qIHRoaXMgY2xlYXJzIHRoZSBkY2wgb24gY2VydGFpbgorCQkJCSAqIGRyaXZlL2NvbnRyb2xsZXIgY29tYmluYXRpb25zICovCiAKICNpZmRlZiBmZF9jaG9zZV9kbWFfbW9kZQogCWlmICgocmF3X2NtZC0+ZmxhZ3MgJiBGRF9SQVdfUkVBRCkgfHwgKHJhd19jbWQtPmZsYWdzICYgRkRfUkFXX1dSSVRFKSkgewpAQCAtMTk5OCwxNSArMTk2NSwxMSBAQAogCiBzdGF0aWMgdm9pZCBmbG9wcHlfc3RhcnQodm9pZCkKIHsKLQlyZXNjaGVkdWxlX3RpbWVvdXQoY3VycmVudF9yZXFELCAiZmxvcHB5IHN0YXJ0IiwgMCk7CisJcmVzY2hlZHVsZV90aW1lb3V0KGN1cnJlbnRfcmVxRCwgImZsb3BweSBzdGFydCIpOwogCiAJc2NhbmRyaXZlcygpOwotI2lmZGVmIERDTF9ERUJVRwotCWlmIChEUC0+ZmxhZ3MgJiBGRF9ERUJVRykgewotCQlEUFJJTlQoInNldHRpbmcgTkVXQ0hBTkdFIGluIGZsb3BweV9zdGFydFxuIik7Ci0JfQotI2VuZGlmCi0JU0VURihGRF9ESVNLX05FV0NIQU5HRSk7CisJZGVidWdfZGNsKERQLT5mbGFncywgInNldHRpbmcgTkVXQ0hBTkdFIGluIGZsb3BweV9zdGFydFxuIik7CisJc2V0X2JpdChGRF9ESVNLX05FV0NIQU5HRV9CSVQsICZEUlMtPmZsYWdzKTsKIAlmbG9wcHlfcmVhZHkoKTsKIH0KIApAQCAtMjAyNiw3ICsxOTg5LDcgQEAKIAogc3RhdGljIHZvaWQgZG9fd2FrZXVwKHZvaWQpCiB7Ci0JcmVzY2hlZHVsZV90aW1lb3V0KE1BWFRJTUVPVVQsICJkbyB3YWtldXAiLCAwKTsKKwlyZXNjaGVkdWxlX3RpbWVvdXQoTUFYVElNRU9VVCwgImRvIHdha2V1cCIpOwogCWNvbnQgPSBOVUxMOwogCWNvbW1hbmRfc3RhdHVzICs9IDI7CiAJd2FrZV91cCgmY29tbWFuZF9kb25lKTsKQEAgLTIwNDYsNyArMjAwOSw3IEBACiAJLmRvbmUJCT0gKGRvbmVfZillbXB0eQogfTsKIAotc3RhdGljIGludCB3YWl0X3RpbF9kb25lKHZvaWQgKCpoYW5kbGVyKSh2b2lkKSwgaW50IGludGVycnVwdGlibGUpCitzdGF0aWMgaW50IHdhaXRfdGlsX2RvbmUodm9pZCAoKmhhbmRsZXIpKHZvaWQpLCBib29sIGludGVycnVwdGlibGUpCiB7CiAJaW50IHJldDsKIApAQCAtMjA2NCw3ICsyMDI3LDcgQEAKIAkJCWlmIChjb21tYW5kX3N0YXR1cyA+PSAyIHx8ICFOT19TSUdOQUwpCiAJCQkJYnJlYWs7CiAKLQkJCWlzX2FsaXZlKCJ3YWl0X3RpbF9kb25lIik7CisJCQlpc19hbGl2ZShfX2Z1bmNfXywgIiIpOwogCQkJc2NoZWR1bGUoKTsKIAkJfQogCkBAIC0yMTgwLDkgKzIxNDMsOSBAQAogCWNvbnQtPnJlZG8oKTsKIH0KIAotI2RlZmluZSBDT0RFMlNJWkUgKHNzaXplID0gKCgxIDw8IFNJWkVDT0RFKSArIDMpID4+IDIpCi0jZGVmaW5lIEZNX01PREUoeCx5KSAoKHkpICYgfigoKHgpLT5yYXRlICYgMHg4MCkgPj4xKSkKKyNkZWZpbmUgRk1fTU9ERSh4LCB5KSAoKHkpICYgfigoKHgpLT5yYXRlICYgMHg4MCkgPj4gMSkpCiAjZGVmaW5lIENUKHgpICgoeCkgfCAweGMwKQorCiBzdGF0aWMgdm9pZCBzZXR1cF9mb3JtYXRfcGFyYW1zKGludCB0cmFjaykKIHsKIAlpbnQgbjsKQEAgLTIxOTcsOCArMjE2MCw4IEBACiAJcmF3X2NtZCA9ICZkZWZhdWx0X3Jhd19jbWQ7CiAJcmF3X2NtZC0+dHJhY2sgPSB0cmFjazsKIAotCXJhd19jbWQtPmZsYWdzID0gRkRfUkFXX1dSSVRFIHwgRkRfUkFXX0lOVFIgfCBGRF9SQVdfU1BJTiB8Ci0JICAgIEZEX1JBV19ORUVEX0RJU0sgfCBGRF9SQVdfTkVFRF9TRUVLOworCXJhd19jbWQtPmZsYWdzID0gKEZEX1JBV19XUklURSB8IEZEX1JBV19JTlRSIHwgRkRfUkFXX1NQSU4gfAorCQkJICBGRF9SQVdfTkVFRF9ESVNLIHwgRkRfUkFXX05FRURfU0VFSyk7CiAJcmF3X2NtZC0+cmF0ZSA9IF9mbG9wcHktPnJhdGUgJiAweDQzOwogCXJhd19jbWQtPmNtZF9jb3VudCA9IE5SX0Y7CiAJQ09NTUFORCA9IEZNX01PREUoX2Zsb3BweSwgRkRfRk9STUFUKTsKQEAgLTIyNTcsNyArMjIyMCw3IEBACiAJYnVmZmVyX3RyYWNrID0gLTE7CiAJc2V0dXBfZm9ybWF0X3BhcmFtcyhmb3JtYXRfcmVxLnRyYWNrIDw8IFNUUkVUQ0goX2Zsb3BweSkpOwogCWZsb3BweV9zdGFydCgpOwotCWRlYnVndCgicXVldWUgZm9ybWF0IHJlcXVlc3QiKTsKKwlkZWJ1Z3QoX19mdW5jX18sICJxdWV1ZSBmb3JtYXQgcmVxdWVzdCIpOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbnRfdCBmb3JtYXRfY29udCA9IHsKQEAgLTIyNzEsNyArMjIzNCw5IEBACiB7CiAJaW50IHJldDsKIAotCUxPQ0tfRkRDKGRyaXZlLCAxKTsKKwlpZiAobG9ja19mZGMoZHJpdmUsIHRydWUpKQorCQlyZXR1cm4gLUVJTlRSOworCiAJc2V0X2Zsb3BweShkcml2ZSk7CiAJaWYgKCFfZmxvcHB5IHx8CiAJICAgIF9mbG9wcHktPnRyYWNrID4gRFAtPnRyYWNrcyB8fApAQCAtMjI4Niw3ICsyMjUxLDkgQEAKIAlmb3JtYXRfZXJyb3JzID0gMDsKIAljb250ID0gJmZvcm1hdF9jb250OwogCWVycm9ycyA9ICZmb3JtYXRfZXJyb3JzOwotCUlXQUlUKHJlZG9fZm9ybWF0KTsKKwlyZXQgPSB3YWl0X3RpbF9kb25lKHJlZG9fZm9ybWF0LCB0cnVlKTsKKwlpZiAocmV0ID09IC1FSU5UUikKKwkJcmV0dXJuIC1FSU5UUjsKIAlwcm9jZXNzX2ZkX3JlcXVlc3QoKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjMyMCwxMiArMjI4NywxNCBAQAogCXN0cnVjdCByZXF1ZXN0ICpyZXEgPSBjdXJyZW50X3JlcTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBibG9jazsKKwljaGFyIG1zZ1tzaXplb2YoInJlcXVlc3QgZG9uZSAiKSArIHNpemVvZihpbnQpICogM107CiAKIAlwcm9iaW5nID0gMDsKLQlyZXNjaGVkdWxlX3RpbWVvdXQoTUFYVElNRU9VVCwgInJlcXVlc3QgZG9uZSAlZCIsIHVwdG9kYXRlKTsKKwlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAicmVxdWVzdCBkb25lICVkIiwgdXB0b2RhdGUpOworCXJlc2NoZWR1bGVfdGltZW91dChNQVhUSU1FT1VULCBtc2cpOwogCiAJaWYgKCFyZXEpIHsKLQkJcHJpbnRrKCJmbG9wcHkuYzogbm8gcmVxdWVzdCBpbiByZXF1ZXN0X2RvbmVcbiIpOworCQlwcl9pbmZvKCJmbG9wcHkuYzogbm8gcmVxdWVzdCBpbiByZXF1ZXN0X2RvbmVcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMzc3LDcgKzIzNDYsNyBAQAogCQlEUlMtPmZpcnN0X3JlYWRfZGF0ZSA9IGppZmZpZXM7CiAKIAlucl9zZWN0b3JzID0gMDsKLQlDT0RFMlNJWkU7CisJc3NpemUgPSBESVZfUk9VTkRfVVAoMSA8PCBTSVpFQ09ERSwgNCk7CiAKIAlpZiAoU1QxICYgU1QxX0VPQykKIAkJZW9jID0gMTsKQEAgLTIzOTMsMjAgKzIzNjIsMTggQEAKIAkJICAgICAgIFJfSEVBRCAtIEhFQUQpICogU0VDVF9QRVJfVFJBQ0sgKwogCQkgICAgICBSX1NFQ1RPUiAtIFNFQ1RPUiArIGVvYykgPDwgU0laRUNPREUgPj4gMjsKIAotI2lmZGVmIEZMT1BQWV9TQU5JVFlfQ0hFQ0sKIAlpZiAobnJfc2VjdG9ycyAvIHNzaXplID4KIAkgICAgRElWX1JPVU5EX1VQKGluX3NlY3Rvcl9vZmZzZXQgKyBjdXJyZW50X2NvdW50X3NlY3RvcnMsIHNzaXplKSkgewogCQlEUFJJTlQoImxvbmcgcnc6ICV4IGluc3RlYWQgb2YgJWx4XG4iLAogCQkgICAgICAgbnJfc2VjdG9ycywgY3VycmVudF9jb3VudF9zZWN0b3JzKTsKLQkJcHJpbnRrKCJycz0lZCBzPSVkXG4iLCBSX1NFQ1RPUiwgU0VDVE9SKTsKLQkJcHJpbnRrKCJyaD0lZCBoPSVkXG4iLCBSX0hFQUQsIEhFQUQpOwotCQlwcmludGsoInJ0PSVkIHQ9JWRcbiIsIFJfVFJBQ0ssIFRSQUNLKTsKLQkJcHJpbnRrKCJoZWFkcz0lZCBlb2M9JWRcbiIsIGhlYWRzLCBlb2MpOwotCQlwcmludGsoInNwdD0lZCBzdD0lZCBzcz0lZFxuIiwgU0VDVF9QRVJfVFJBQ0ssCi0JCSAgICAgICBmc2VjdG9yX3QsIHNzaXplKTsKLQkJcHJpbnRrKCJpbl9zZWN0b3Jfb2Zmc2V0PSVkXG4iLCBpbl9zZWN0b3Jfb2Zmc2V0KTsKKwkJcHJfaW5mbygicnM9JWQgcz0lZFxuIiwgUl9TRUNUT1IsIFNFQ1RPUik7CisJCXByX2luZm8oInJoPSVkIGg9JWRcbiIsIFJfSEVBRCwgSEVBRCk7CisJCXByX2luZm8oInJ0PSVkIHQ9JWRcbiIsIFJfVFJBQ0ssIFRSQUNLKTsKKwkJcHJfaW5mbygiaGVhZHM9JWQgZW9jPSVkXG4iLCBoZWFkcywgZW9jKTsKKwkJcHJfaW5mbygic3B0PSVkIHN0PSVkIHNzPSVkXG4iLAorCQkJU0VDVF9QRVJfVFJBQ0ssIGZzZWN0b3JfdCwgc3NpemUpOworCQlwcl9pbmZvKCJpbl9zZWN0b3Jfb2Zmc2V0PSVkXG4iLCBpbl9zZWN0b3Jfb2Zmc2V0KTsKIAl9Ci0jZW5kaWYKIAogCW5yX3NlY3RvcnMgLT0gaW5fc2VjdG9yX29mZnNldDsKIAlJTkZCT1VORChucl9zZWN0b3JzLCAwKTsKQEAgLTI1MTEsMTkgKzI0NzgsMTcgQEAKIAkJCQkJICAgICAgYmxrX3JxX3NlY3RvcnMoY3VycmVudF9yZXEpKTsKIAogCXJlbWFpbmluZyA9IGN1cnJlbnRfY291bnRfc2VjdG9ycyA8PCA5OwotI2lmZGVmIEZMT1BQWV9TQU5JVFlfQ0hFQ0sKIAlpZiAocmVtYWluaW5nID4gYmxrX3JxX2J5dGVzKGN1cnJlbnRfcmVxKSAmJiBDVChDT01NQU5EKSA9PSBGRF9XUklURSkgewogCQlEUFJJTlQoImluIGNvcHkgYnVmZmVyXG4iKTsKLQkJcHJpbnRrKCJjdXJyZW50X2NvdW50X3NlY3RvcnM9JWxkXG4iLCBjdXJyZW50X2NvdW50X3NlY3RvcnMpOwotCQlwcmludGsoInJlbWFpbmluZz0lZFxuIiwgcmVtYWluaW5nID4+IDkpOwotCQlwcmludGsoImN1cnJlbnRfcmVxLT5ucl9zZWN0b3JzPSV1XG4iLAotCQkgICAgICAgYmxrX3JxX3NlY3RvcnMoY3VycmVudF9yZXEpKTsKLQkJcHJpbnRrKCJjdXJyZW50X3JlcS0+Y3VycmVudF9ucl9zZWN0b3JzPSV1XG4iLAotCQkgICAgICAgYmxrX3JxX2N1cl9zZWN0b3JzKGN1cnJlbnRfcmVxKSk7Ci0JCXByaW50aygibWF4X3NlY3Rvcj0lZFxuIiwgbWF4X3NlY3Rvcik7Ci0JCXByaW50aygic3NpemU9JWRcbiIsIHNzaXplKTsKKwkJcHJfaW5mbygiY3VycmVudF9jb3VudF9zZWN0b3JzPSVsZFxuIiwgY3VycmVudF9jb3VudF9zZWN0b3JzKTsKKwkJcHJfaW5mbygicmVtYWluaW5nPSVkXG4iLCByZW1haW5pbmcgPj4gOSk7CisJCXByX2luZm8oImN1cnJlbnRfcmVxLT5ucl9zZWN0b3JzPSV1XG4iLAorCQkJYmxrX3JxX3NlY3RvcnMoY3VycmVudF9yZXEpKTsKKwkJcHJfaW5mbygiY3VycmVudF9yZXEtPmN1cnJlbnRfbnJfc2VjdG9ycz0ldVxuIiwKKwkJCWJsa19ycV9jdXJfc2VjdG9ycyhjdXJyZW50X3JlcSkpOworCQlwcl9pbmZvKCJtYXhfc2VjdG9yPSVkXG4iLCBtYXhfc2VjdG9yKTsKKwkJcHJfaW5mbygic3NpemU9JWRcbiIsIHNzaXplKTsKIAl9Ci0jZW5kaWYKIAogCWJ1ZmZlcl9tYXggPSBtYXgobWF4X3NlY3RvciwgYnVmZmVyX21heCk7CiAKQEAgLTI1MzksMjYgKzI1MDQsMjQgQEAKIAkJU1VQQk9VTkQoc2l6ZSwgcmVtYWluaW5nKTsKIAogCQlidWZmZXIgPSBwYWdlX2FkZHJlc3MoYnYtPmJ2X3BhZ2UpICsgYnYtPmJ2X29mZnNldDsKLSNpZmRlZiBGTE9QUFlfU0FOSVRZX0NIRUNLCiAJCWlmIChkbWFfYnVmZmVyICsgc2l6ZSA+CiAJCSAgICBmbG9wcHlfdHJhY2tfYnVmZmVyICsgKG1heF9idWZmZXJfc2VjdG9ycyA8PCAxMCkgfHwKIAkJICAgIGRtYV9idWZmZXIgPCBmbG9wcHlfdHJhY2tfYnVmZmVyKSB7CiAJCQlEUFJJTlQoImJ1ZmZlciBvdmVycnVuIGluIGNvcHkgYnVmZmVyICVkXG4iLAotCQkJICAgICAgIChpbnQpKChmbG9wcHlfdHJhY2tfYnVmZmVyIC0KLQkJCQkgICAgICBkbWFfYnVmZmVyKSA+PiA5KSk7Ci0JCQlwcmludGsoImZzZWN0b3JfdD0lZCBidWZmZXJfbWluPSVkXG4iLAotCQkJICAgICAgIGZzZWN0b3JfdCwgYnVmZmVyX21pbik7Ci0JCQlwcmludGsoImN1cnJlbnRfY291bnRfc2VjdG9ycz0lbGRcbiIsCi0JCQkgICAgICAgY3VycmVudF9jb3VudF9zZWN0b3JzKTsKKwkJCSAgICAgICAoaW50KSgoZmxvcHB5X3RyYWNrX2J1ZmZlciAtIGRtYV9idWZmZXIpID4+IDkpKTsKKwkJCXByX2luZm8oImZzZWN0b3JfdD0lZCBidWZmZXJfbWluPSVkXG4iLAorCQkJCWZzZWN0b3JfdCwgYnVmZmVyX21pbik7CisJCQlwcl9pbmZvKCJjdXJyZW50X2NvdW50X3NlY3RvcnM9JWxkXG4iLAorCQkJCWN1cnJlbnRfY291bnRfc2VjdG9ycyk7CiAJCQlpZiAoQ1QoQ09NTUFORCkgPT0gRkRfUkVBRCkKLQkJCQlwcmludGsoInJlYWRcbiIpOworCQkJCXByX2luZm8oInJlYWRcbiIpOwogCQkJaWYgKENUKENPTU1BTkQpID09IEZEX1dSSVRFKQotCQkJCXByaW50aygid3JpdGVcbiIpOworCQkJCXByX2luZm8oIndyaXRlXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJCWlmICgoKHVuc2lnbmVkIGxvbmcpYnVmZmVyKSAlIDUxMikKIAkJCURQUklOVCgiJXAgYnVmZmVyIG5vdCBhbGlnbmVkXG4iLCBidWZmZXIpOwotI2VuZGlmCisKIAkJaWYgKENUKENPTU1BTkQpID09IEZEX1JFQUQpCiAJCQltZW1jcHkoYnVmZmVyLCBkbWFfYnVmZmVyLCBzaXplKTsKIAkJZWxzZQpAQCAtMjU2NywxMyArMjUzMCwxMSBAQAogCQlyZW1haW5pbmcgLT0gc2l6ZTsKIAkJZG1hX2J1ZmZlciArPSBzaXplOwogCX0KLSNpZmRlZiBGTE9QUFlfU0FOSVRZX0NIRUNLCiAJaWYgKHJlbWFpbmluZykgewogCQlpZiAocmVtYWluaW5nID4gMCkKIAkJCW1heF9zZWN0b3IgLT0gcmVtYWluaW5nID4+IDk7CiAJCURQUklOVCgid2VpcmRuZXNzOiByZW1haW5pbmcgJWRcbiIsIHJlbWFpbmluZyA+PiA5KTsKIAl9Ci0jZW5kaWYKIH0KIAogLyogd29yayBhcm91bmQgYSBidWcgaW4gcHNldWRvIERNQQpAQCAtMjU5MywxNSArMjU1NCwxNCBAQAogCiAJCWhhcmRfc2VjdG9ycyA9IHJhd19jbWQtPmxlbmd0aCA+PiAoNyArIFNJWkVDT0RFKTsKIAkJZW5kX3NlY3RvciA9IFNFQ1RPUiArIGhhcmRfc2VjdG9ycyAtIDE7Ci0jaWZkZWYgRkxPUFBZX1NBTklUWV9DSEVDSwogCQlpZiAoZW5kX3NlY3RvciA+IFNFQ1RfUEVSX1RSQUNLKSB7Ci0JCQlwcmludGsoInRvbyBtYW55IHNlY3RvcnMgJWQgPiAlZFxuIiwKLQkJCSAgICAgICBlbmRfc2VjdG9yLCBTRUNUX1BFUl9UUkFDSyk7CisJCQlwcl9pbmZvKCJ0b28gbWFueSBzZWN0b3JzICVkID4gJWRcbiIsCisJCQkJZW5kX3NlY3RvciwgU0VDVF9QRVJfVFJBQ0spOwogCQkJcmV0dXJuOwogCQl9Ci0jZW5kaWYKLQkJU0VDVF9QRVJfVFJBQ0sgPSBlbmRfc2VjdG9yOwkvKiBtYWtlIHN1cmUgU0VDVF9QRVJfVFJBQ0sgcG9pbnRzCi0JCQkJCQkgKiB0byBlbmQgb2YgdHJhbnNmZXIgKi8KKwkJU0VDVF9QRVJfVFJBQ0sgPSBlbmRfc2VjdG9yOworCQkJCQkvKiBtYWtlIHN1cmUgU0VDVF9QRVJfVFJBQ0sKKwkJCQkJICogcG9pbnRzIHRvIGVuZCBvZiB0cmFuc2ZlciAqLwogCX0KIH0KIApAQCAtMjYyNCw3ICsyNTg0LDcgQEAKIAlpbnQgc3NpemU7CiAKIAlpZiAobWF4X2J1ZmZlcl9zZWN0b3JzID09IDApIHsKLQkJcHJpbnRrKCJWRlM6IEJsb2NrIEkvTyBzY2hlZHVsZWQgb24gdW5vcGVuZWQgZGV2aWNlXG4iKTsKKwkJcHJfaW5mbygiVkZTOiBCbG9jayBJL08gc2NoZWR1bGVkIG9uIHVub3BlbmVkIGRldmljZVxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjY0MSw3ICsyNjAxLDcgQEAKIAkJcmF3X2NtZC0+ZmxhZ3MgfD0gRkRfUkFXX1dSSVRFOwogCQlDT01NQU5EID0gRk1fTU9ERShfZmxvcHB5LCBGRF9XUklURSk7CiAJfSBlbHNlIHsKLQkJRFBSSU5UKCJtYWtlX3Jhd19yd19yZXF1ZXN0OiB1bmtub3duIGNvbW1hbmRcbiIpOworCQlEUFJJTlQoIiVzOiB1bmtub3duIGNvbW1hbmRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yNjU5LDcgKzI2MTksOCBAQAogCUhFQUQgPSBmc2VjdG9yX3QgLyBfZmxvcHB5LT5zZWN0OwogCiAJaWYgKCgoX2Zsb3BweS0+c3RyZXRjaCAmIChGRF9TV0FQU0lERVMgfCBGRF9TRUNUQkFTRU1BU0spKSB8fAotCSAgICAgVEVTVEYoRkRfTkVFRF9UV0FERExFKSkgJiYgZnNlY3Rvcl90IDwgX2Zsb3BweS0+c2VjdCkKKwkgICAgIHRlc3RfYml0KEZEX05FRURfVFdBRERMRV9CSVQsICZEUlMtPmZsYWdzKSkgJiYKKwkgICAgZnNlY3Rvcl90IDwgX2Zsb3BweS0+c2VjdCkKIAkJbWF4X3NlY3RvciA9IF9mbG9wcHktPnNlY3Q7CiAKIAkvKiAyTSBkaXNrcyBoYXZlIHBoYW50b20gc2VjdG9ycyBvbiB0aGUgZmlyc3QgdHJhY2sgKi8KQEAgLTI2ODUsNyArMjY0Niw3IEBACiAJcmF3X2NtZC0+dHJhY2sgPSBUUkFDSyA8PCBTVFJFVENIKF9mbG9wcHkpOwogCURSX1NFTEVDVCA9IFVOSVQoY3VycmVudF9kcml2ZSkgKyBQSF9IRUFEKF9mbG9wcHksIEhFQUQpOwogCUdBUCA9IF9mbG9wcHktPmdhcDsKLQlDT0RFMlNJWkU7CisJc3NpemUgPSBESVZfUk9VTkRfVVAoMSA8PCBTSVpFQ09ERSwgNCk7CiAJU0VDVF9QRVJfVFJBQ0sgPSBfZmxvcHB5LT5zZWN0IDw8IDIgPj4gU0laRUNPREU7CiAJU0VDVE9SID0gKChmc2VjdG9yX3QgJSBfZmxvcHB5LT5zZWN0KSA8PCAyID4+IFNJWkVDT0RFKSArCiAJICAgIEZEX1NFQ1RCQVNFKF9mbG9wcHkpOwpAQCAtMjczMCw4ICsyNjkxLDEwIEBACiAJCX0KIAl9IGVsc2UgaWYgKGluX3NlY3Rvcl9vZmZzZXQgfHwgYmxrX3JxX3NlY3RvcnMoY3VycmVudF9yZXEpIDwgc3NpemUpIHsKIAkJaWYgKENUKENPTU1BTkQpID09IEZEX1dSSVRFKSB7Ci0JCQlpZiAoZnNlY3Rvcl90ICsgYmxrX3JxX3NlY3RvcnMoY3VycmVudF9yZXEpID4gc3NpemUgJiYKLQkJCSAgICBmc2VjdG9yX3QgKyBibGtfcnFfc2VjdG9ycyhjdXJyZW50X3JlcSkgPCBzc2l6ZSArIHNzaXplKQorCQkJdW5zaWduZWQgaW50IHNlY3RvcnM7CisKKwkJCXNlY3RvcnMgPSBmc2VjdG9yX3QgKyBibGtfcnFfc2VjdG9ycyhjdXJyZW50X3JlcSk7CisJCQlpZiAoc2VjdG9ycyA+IHNzaXplICYmIHNlY3RvcnMgPCBzc2l6ZSArIHNzaXplKQogCQkJCW1heF9zaXplID0gc3NpemUgKyBzc2l6ZTsKIAkJCWVsc2UKIAkJCQltYXhfc2l6ZSA9IHNzaXplOwpAQCAtMjc1MiwxMiArMjcxNSwxMCBAQAogCQkgKiBvbiBhIDY0IGJpdCBtYWNoaW5lIQogCQkgKi8KIAkJbWF4X3NpemUgPSBidWZmZXJfY2hhaW5fc2l6ZSgpOwotCQlkbWFfbGltaXQgPQotCQkgICAgKE1BWF9ETUFfQUREUkVTUyAtCi0JCSAgICAgKCh1bnNpZ25lZCBsb25nKWN1cnJlbnRfcmVxLT5idWZmZXIpKSA+PiA5OwotCQlpZiAoKHVuc2lnbmVkIGxvbmcpbWF4X3NpemUgPiBkbWFfbGltaXQpIHsKKwkJZG1hX2xpbWl0ID0gKE1BWF9ETUFfQUREUkVTUyAtCisJCQkgICAgICgodW5zaWduZWQgbG9uZyljdXJyZW50X3JlcS0+YnVmZmVyKSkgPj4gOTsKKwkJaWYgKCh1bnNpZ25lZCBsb25nKW1heF9zaXplID4gZG1hX2xpbWl0KQogCQkJbWF4X3NpemUgPSBkbWFfbGltaXQ7Ci0JCX0KIAkJLyogNjQga2IgYm91bmRhcmllcyAqLwogCQlpZiAoQ1JPU1NfNjRLQihjdXJyZW50X3JlcS0+YnVmZmVyLCBtYXhfc2l6ZSA8PCA5KSkKIAkJCW1heF9zaXplID0gKEtfNjQgLQpAQCAtMjc3MywxNiArMjczNCwxNiBAQAogCQkgKi8KIAkJaWYgKCFkaXJlY3QgfHwKIAkJICAgIChpbmRpcmVjdCAqIDIgPiBkaXJlY3QgKiAzICYmCi0JCSAgICAgKmVycm9ycyA8IERQLT5tYXhfZXJyb3JzLnJlYWRfdHJhY2sgJiYgKCghcHJvYmluZwotCQkgICAgICAgfHwgKERQLT5yZWFkX3RyYWNrICYgKDEgPDwgRFJTLT5wcm9iZWRfZm9ybWF0KSkpKSkpIHsKKwkJICAgICAqZXJyb3JzIDwgRFAtPm1heF9lcnJvcnMucmVhZF90cmFjayAmJgorCQkgICAgICgoIXByb2JpbmcgfHwKKwkJICAgICAgIChEUC0+cmVhZF90cmFjayAmICgxIDw8IERSUy0+cHJvYmVkX2Zvcm1hdCkpKSkpKSB7CiAJCQltYXhfc2l6ZSA9IGJsa19ycV9zZWN0b3JzKGN1cnJlbnRfcmVxKTsKIAkJfSBlbHNlIHsKIAkJCXJhd19jbWQtPmtlcm5lbF9kYXRhID0gY3VycmVudF9yZXEtPmJ1ZmZlcjsKIAkJCXJhd19jbWQtPmxlbmd0aCA9IGN1cnJlbnRfY291bnRfc2VjdG9ycyA8PCA5OwogCQkJaWYgKHJhd19jbWQtPmxlbmd0aCA9PSAwKSB7Ci0JCQkJRFBSSU5UCi0JCQkJICAgICgiemVybyBkbWEgdHJhbnNmZXIgYXR0ZW1wdGVkIGZyb20gbWFrZV9yYXdfcmVxdWVzdFxuIik7Ci0JCQkJRFBSSU5UKCJpbmRpcmVjdD0lZCBkaXJlY3Q9JWQgZnNlY3Rvcl90PSVkIiwKKwkJCQlEUFJJTlQoIiVzOiB6ZXJvIGRtYSB0cmFuc2ZlciBhdHRlbXB0ZWRcbiIsIF9fZnVuY19fKTsKKwkJCQlEUFJJTlQoImluZGlyZWN0PSVkIGRpcmVjdD0lZCBmc2VjdG9yX3Q9JWRcbiIsCiAJCQkJICAgICAgIGluZGlyZWN0LCBkaXJlY3QsIGZzZWN0b3JfdCk7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CkBAIC0yODAyLDI1ICsyNzYzLDIyIEBACiAJICAgICgoQ1QoQ09NTUFORCkgPT0gRkRfUkVBRCB8fAogCSAgICAgICghaW5fc2VjdG9yX29mZnNldCAmJiBibGtfcnFfc2VjdG9ycyhjdXJyZW50X3JlcSkgPj0gc3NpemUpKSAmJgogCSAgICAgbWF4X3NlY3RvciA+IDIgKiBtYXhfYnVmZmVyX3NlY3RvcnMgKyBidWZmZXJfbWluICYmCi0JICAgICBtYXhfc2l6ZSArIGZzZWN0b3JfdCA+IDIgKiBtYXhfYnVmZmVyX3NlY3RvcnMgKyBidWZmZXJfbWluKQotCSAgICAvKiBub3QgZW5vdWdoIHNwYWNlICovCi0JICAgICkgeworCSAgICAgbWF4X3NpemUgKyBmc2VjdG9yX3QgPiAyICogbWF4X2J1ZmZlcl9zZWN0b3JzICsgYnVmZmVyX21pbikpIHsKKwkJLyogbm90IGVub3VnaCBzcGFjZSAqLwogCQlidWZmZXJfdHJhY2sgPSAtMTsKIAkJYnVmZmVyX2RyaXZlID0gY3VycmVudF9kcml2ZTsKIAkJYnVmZmVyX21heCA9IGJ1ZmZlcl9taW4gPSBhbGlnbmVkX3NlY3Rvcl90OwogCX0KIAlyYXdfY21kLT5rZXJuZWxfZGF0YSA9IGZsb3BweV90cmFja19idWZmZXIgKwotCSAgICAoKGFsaWduZWRfc2VjdG9yX3QgLSBidWZmZXJfbWluKSA8PCA5KTsKKwkJKChhbGlnbmVkX3NlY3Rvcl90IC0gYnVmZmVyX21pbikgPDwgOSk7CiAKIAlpZiAoQ1QoQ09NTUFORCkgPT0gRkRfV1JJVEUpIHsKIAkJLyogY29weSB3cml0ZSBidWZmZXIgdG8gdHJhY2sgYnVmZmVyLgogCQkgKiBpZiB3ZSBnZXQgaGVyZSwgd2Uga25vdyB0aGF0IHRoZSB3cml0ZQogCQkgKiBpcyBlaXRoZXIgYWxpZ25lZCBvciB0aGUgZGF0YSBhbHJlYWR5IGluIHRoZSBidWZmZXIKIAkJICogKGJ1ZmZlciB3aWxsIGJlIG92ZXJ3cml0dGVuKSAqLwotI2lmZGVmIEZMT1BQWV9TQU5JVFlfQ0hFQ0sKIAkJaWYgKGluX3NlY3Rvcl9vZmZzZXQgJiYgYnVmZmVyX3RyYWNrID09IC0xKQogCQkJRFBSSU5UKCJpbnRlcm5hbCBlcnJvciBvZmZzZXQgIT0wIG9uIHdyaXRlXG4iKTsKLSNlbmRpZgogCQlidWZmZXJfdHJhY2sgPSByYXdfY21kLT50cmFjazsKIAkJYnVmZmVyX2RyaXZlID0gY3VycmVudF9kcml2ZTsKIAkJY29weV9idWZmZXIoc3NpemUsIG1heF9zZWN0b3IsCkBAIC0yODM0LDcgKzI3OTIsNiBAQAogCXJhd19jbWQtPmxlbmd0aCA9IGluX3NlY3Rvcl9vZmZzZXQgKyBjdXJyZW50X2NvdW50X3NlY3RvcnM7CiAJcmF3X2NtZC0+bGVuZ3RoID0gKChyYXdfY21kLT5sZW5ndGggLSAxKSB8IChzc2l6ZSAtIDEpKSArIDE7CiAJcmF3X2NtZC0+bGVuZ3RoIDw8PSA5OwotI2lmZGVmIEZMT1BQWV9TQU5JVFlfQ0hFQ0sKIAlpZiAoKHJhd19jbWQtPmxlbmd0aCA8IGN1cnJlbnRfY291bnRfc2VjdG9ycyA8PCA5KSB8fAogCSAgICAocmF3X2NtZC0+a2VybmVsX2RhdGEgIT0gY3VycmVudF9yZXEtPmJ1ZmZlciAmJgogCSAgICAgQ1QoQ09NTUFORCkgPT0gRkRfV1JJVEUgJiYKQEAgLTI4NDUsMTkgKzI4MDIsMTkgQEAKIAkJRFBSSU5UKCJmcmFjdGlvbmFyeSBjdXJyZW50IGNvdW50IGI9JWx4IHM9JWx4XG4iLAogCQkgICAgICAgcmF3X2NtZC0+bGVuZ3RoLCBjdXJyZW50X2NvdW50X3NlY3RvcnMpOwogCQlpZiAocmF3X2NtZC0+a2VybmVsX2RhdGEgIT0gY3VycmVudF9yZXEtPmJ1ZmZlcikKLQkJCXByaW50aygiYWRkcj0lZCwgbGVuZ3RoPSVsZFxuIiwKLQkJCSAgICAgICAoaW50KSgocmF3X2NtZC0+a2VybmVsX2RhdGEgLQotCQkJCSAgICAgIGZsb3BweV90cmFja19idWZmZXIpID4+IDkpLAotCQkJICAgICAgIGN1cnJlbnRfY291bnRfc2VjdG9ycyk7Ci0JCXByaW50aygic3Q9JWQgYXN0PSVkIG1zZT0lZCBtc2k9JWRcbiIsCi0JCSAgICAgICBmc2VjdG9yX3QsIGFsaWduZWRfc2VjdG9yX3QsIG1heF9zZWN0b3IsIG1heF9zaXplKTsKLQkJcHJpbnRrKCJzc2l6ZT0leCBTSVpFQ09ERT0lZFxuIiwgc3NpemUsIFNJWkVDT0RFKTsKLQkJcHJpbnRrKCJjb21tYW5kPSV4IFNFQ1RPUj0lZCBIRUFEPSVkLCBUUkFDSz0lZFxuIiwKLQkJICAgICAgIENPTU1BTkQsIFNFQ1RPUiwgSEVBRCwgVFJBQ0spOwotCQlwcmludGsoImJ1ZmZlciBkcml2ZT0lZFxuIiwgYnVmZmVyX2RyaXZlKTsKLQkJcHJpbnRrKCJidWZmZXIgdHJhY2s9JWRcbiIsIGJ1ZmZlcl90cmFjayk7Ci0JCXByaW50aygiYnVmZmVyX21pbj0lZFxuIiwgYnVmZmVyX21pbik7Ci0JCXByaW50aygiYnVmZmVyX21heD0lZFxuIiwgYnVmZmVyX21heCk7CisJCQlwcl9pbmZvKCJhZGRyPSVkLCBsZW5ndGg9JWxkXG4iLAorCQkJCShpbnQpKChyYXdfY21kLT5rZXJuZWxfZGF0YSAtCisJCQkJICAgICAgIGZsb3BweV90cmFja19idWZmZXIpID4+IDkpLAorCQkJCWN1cnJlbnRfY291bnRfc2VjdG9ycyk7CisJCXByX2luZm8oInN0PSVkIGFzdD0lZCBtc2U9JWQgbXNpPSVkXG4iLAorCQkJZnNlY3Rvcl90LCBhbGlnbmVkX3NlY3Rvcl90LCBtYXhfc2VjdG9yLCBtYXhfc2l6ZSk7CisJCXByX2luZm8oInNzaXplPSV4IFNJWkVDT0RFPSVkXG4iLCBzc2l6ZSwgU0laRUNPREUpOworCQlwcl9pbmZvKCJjb21tYW5kPSV4IFNFQ1RPUj0lZCBIRUFEPSVkLCBUUkFDSz0lZFxuIiwKKwkJCUNPTU1BTkQsIFNFQ1RPUiwgSEVBRCwgVFJBQ0spOworCQlwcl9pbmZvKCJidWZmZXIgZHJpdmU9JWRcbiIsIGJ1ZmZlcl9kcml2ZSk7CisJCXByX2luZm8oImJ1ZmZlciB0cmFjaz0lZFxuIiwgYnVmZmVyX3RyYWNrKTsKKwkJcHJfaW5mbygiYnVmZmVyX21pbj0lZFxuIiwgYnVmZmVyX21pbik7CisJCXByX2luZm8oImJ1ZmZlcl9tYXg9JWRcbiIsIGJ1ZmZlcl9tYXgpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTI4NjgsMTQgKzI4MjUsMTQgQEAKIAkJICAgIHJhd19jbWQtPmtlcm5lbF9kYXRhICsgcmF3X2NtZC0+bGVuZ3RoID4KIAkJICAgIGZsb3BweV90cmFja19idWZmZXIgKyAobWF4X2J1ZmZlcl9zZWN0b3JzIDw8IDEwKSkgewogCQkJRFBSSU5UKCJidWZmZXIgb3ZlcnJ1biBpbiBzY2hlZHVsZSBkbWFcbiIpOwotCQkJcHJpbnRrKCJmc2VjdG9yX3Q9JWQgYnVmZmVyX21pbj0lZCBjdXJyZW50X2NvdW50PSVsZFxuIiwKLQkJCSAgICAgICBmc2VjdG9yX3QsIGJ1ZmZlcl9taW4sIHJhd19jbWQtPmxlbmd0aCA+PiA5KTsKLQkJCXByaW50aygiY3VycmVudF9jb3VudF9zZWN0b3JzPSVsZFxuIiwKLQkJCSAgICAgICBjdXJyZW50X2NvdW50X3NlY3RvcnMpOworCQkJcHJfaW5mbygiZnNlY3Rvcl90PSVkIGJ1ZmZlcl9taW49JWQgY3VycmVudF9jb3VudD0lbGRcbiIsCisJCQkJZnNlY3Rvcl90LCBidWZmZXJfbWluLCByYXdfY21kLT5sZW5ndGggPj4gOSk7CisJCQlwcl9pbmZvKCJjdXJyZW50X2NvdW50X3NlY3RvcnM9JWxkXG4iLAorCQkJCWN1cnJlbnRfY291bnRfc2VjdG9ycyk7CiAJCQlpZiAoQ1QoQ09NTUFORCkgPT0gRkRfUkVBRCkKLQkJCQlwcmludGsoInJlYWRcbiIpOworCQkJCXByX2luZm8oInJlYWRcbiIpOwogCQkJaWYgKENUKENPTU1BTkQpID09IEZEX1dSSVRFKQotCQkJCXByaW50aygid3JpdGVcbiIpOworCQkJCXByX2luZm8oIndyaXRlXG4iKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfSBlbHNlIGlmIChyYXdfY21kLT5sZW5ndGggPiBibGtfcnFfYnl0ZXMoY3VycmVudF9yZXEpIHx8CkBAIC0yODg0LDE0ICsyODQxLDEzIEBACiAJCXJldHVybiAwOwogCX0gZWxzZSBpZiAocmF3X2NtZC0+bGVuZ3RoIDwgY3VycmVudF9jb3VudF9zZWN0b3JzIDw8IDkpIHsKIAkJRFBSSU5UKCJtb3JlIHNlY3RvcnMgdGhhbiBieXRlc1xuIik7Ci0JCXByaW50aygiYnl0ZXM9JWxkXG4iLCByYXdfY21kLT5sZW5ndGggPj4gOSk7Ci0JCXByaW50aygic2VjdG9ycz0lbGRcbiIsIGN1cnJlbnRfY291bnRfc2VjdG9ycyk7CisJCXByX2luZm8oImJ5dGVzPSVsZFxuIiwgcmF3X2NtZC0+bGVuZ3RoID4+IDkpOworCQlwcl9pbmZvKCJzZWN0b3JzPSVsZFxuIiwgY3VycmVudF9jb3VudF9zZWN0b3JzKTsKIAl9CiAJaWYgKHJhd19jbWQtPmxlbmd0aCA9PSAwKSB7CiAJCURQUklOVCgiemVybyBkbWEgdHJhbnNmZXIgYXR0ZW1wdGVkIGZyb20gbWFrZV9yYXdfcmVxdWVzdFxuIik7CiAJCXJldHVybiAwOwogCX0KLSNlbmRpZgogCiAJdmlydHVhbGRtYWJ1Z193b3JrYXJvdW5kKCk7CiAJcmV0dXJuIDI7CkBAIC0yODk5LDcgKzI4NTUsNiBAQAogCiBzdGF0aWMgdm9pZCByZWRvX2ZkX3JlcXVlc3Qodm9pZCkKIHsKLSNkZWZpbmUgUkVQRUFUIHtyZXF1ZXN0X2RvbmUoMCk7IGNvbnRpbnVlOyB9CiAJaW50IGRyaXZlOwogCWludCB0bXA7CiAKQEAgLTI5MDcsNjMgKzI4NjIsNjMgQEAKIAlpZiAoY3VycmVudF9kcml2ZSA8IE5fRFJJVkUpCiAJCWZsb3BweV9vZmYoY3VycmVudF9kcml2ZSk7CiAKLQlmb3IgKDs7KSB7Ci0JCWlmICghY3VycmVudF9yZXEpIHsKLQkJCXN0cnVjdCByZXF1ZXN0ICpyZXE7Citkb19yZXF1ZXN0OgorCWlmICghY3VycmVudF9yZXEpIHsKKwkJc3RydWN0IHJlcXVlc3QgKnJlcTsKIAotCQkJc3Bpbl9sb2NrX2lycShmbG9wcHlfcXVldWUtPnF1ZXVlX2xvY2spOwotCQkJcmVxID0gYmxrX2ZldGNoX3JlcXVlc3QoZmxvcHB5X3F1ZXVlKTsKLQkJCXNwaW5fdW5sb2NrX2lycShmbG9wcHlfcXVldWUtPnF1ZXVlX2xvY2spOwotCQkJaWYgKCFyZXEpIHsKLQkJCQlkb19mbG9wcHkgPSBOVUxMOwotCQkJCXVubG9ja19mZGMoKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQljdXJyZW50X3JlcSA9IHJlcTsKLQkJfQotCQlkcml2ZSA9IChsb25nKWN1cnJlbnRfcmVxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7Ci0JCXNldF9mZGMoZHJpdmUpOwotCQlyZXNjaGVkdWxlX3RpbWVvdXQoY3VycmVudF9yZXFELCAicmVkbyBmZCByZXF1ZXN0IiwgMCk7Ci0KLQkJc2V0X2Zsb3BweShkcml2ZSk7Ci0JCXJhd19jbWQgPSAmZGVmYXVsdF9yYXdfY21kOwotCQlyYXdfY21kLT5mbGFncyA9IDA7Ci0JCWlmIChzdGFydF9tb3RvcihyZWRvX2ZkX3JlcXVlc3QpKQorCQlzcGluX2xvY2tfaXJxKGZsb3BweV9xdWV1ZS0+cXVldWVfbG9jayk7CisJCXJlcSA9IGJsa19mZXRjaF9yZXF1ZXN0KGZsb3BweV9xdWV1ZSk7CisJCXNwaW5fdW5sb2NrX2lycShmbG9wcHlfcXVldWUtPnF1ZXVlX2xvY2spOworCQlpZiAoIXJlcSkgeworCQkJZG9fZmxvcHB5ID0gTlVMTDsKKwkJCXVubG9ja19mZGMoKTsKIAkJCXJldHVybjsKLQkJZGlza19jaGFuZ2UoY3VycmVudF9kcml2ZSk7Ci0JCWlmICh0ZXN0X2JpdChjdXJyZW50X2RyaXZlLCAmZmFrZV9jaGFuZ2UpIHx8Ci0JCSAgICBURVNURihGRF9ESVNLX0NIQU5HRUQpKSB7Ci0JCQlEUFJJTlQoImRpc2sgYWJzZW50IG9yIGNoYW5nZWQgZHVyaW5nIG9wZXJhdGlvblxuIik7Ci0JCQlSRVBFQVQ7CiAJCX0KLQkJaWYgKCFfZmxvcHB5KSB7CS8qIEF1dG9kZXRlY3Rpb24gKi8KLQkJCWlmICghcHJvYmluZykgewotCQkJCURSUy0+cHJvYmVkX2Zvcm1hdCA9IDA7Ci0JCQkJaWYgKG5leHRfdmFsaWRfZm9ybWF0KCkpIHsKLQkJCQkJRFBSSU5UKCJubyBhdXRvZGV0ZWN0YWJsZSBmb3JtYXRzXG4iKTsKLQkJCQkJX2Zsb3BweSA9IE5VTEw7Ci0JCQkJCVJFUEVBVDsKLQkJCQl9Ci0JCQl9Ci0JCQlwcm9iaW5nID0gMTsKLQkJCV9mbG9wcHkgPQotCQkJICAgIGZsb3BweV90eXBlICsgRFAtPmF1dG9kZXRlY3RbRFJTLT5wcm9iZWRfZm9ybWF0XTsKLQkJfSBlbHNlCi0JCQlwcm9iaW5nID0gMDsKLQkJZXJyb3JzID0gJihjdXJyZW50X3JlcS0+ZXJyb3JzKTsKLQkJdG1wID0gbWFrZV9yYXdfcndfcmVxdWVzdCgpOwotCQlpZiAodG1wIDwgMikgewotCQkJcmVxdWVzdF9kb25lKHRtcCk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChURVNURihGRF9ORUVEX1RXQURETEUpKQotCQkJdHdhZGRsZSgpOwotCQlzY2hlZHVsZV9iaChmbG9wcHlfc3RhcnQpOwotCQlkZWJ1Z3QoInF1ZXVlIGZkIHJlcXVlc3QiKTsKLQkJcmV0dXJuOworCQljdXJyZW50X3JlcSA9IHJlcTsKIAl9Ci0jdW5kZWYgUkVQRUFUCisJZHJpdmUgPSAobG9uZyljdXJyZW50X3JlcS0+cnFfZGlzay0+cHJpdmF0ZV9kYXRhOworCXNldF9mZGMoZHJpdmUpOworCXJlc2NoZWR1bGVfdGltZW91dChjdXJyZW50X3JlcUQsICJyZWRvIGZkIHJlcXVlc3QiKTsKKworCXNldF9mbG9wcHkoZHJpdmUpOworCXJhd19jbWQgPSAmZGVmYXVsdF9yYXdfY21kOworCXJhd19jbWQtPmZsYWdzID0gMDsKKwlpZiAoc3RhcnRfbW90b3IocmVkb19mZF9yZXF1ZXN0KSkKKwkJcmV0dXJuOworCisJZGlza19jaGFuZ2UoY3VycmVudF9kcml2ZSk7CisJaWYgKHRlc3RfYml0KGN1cnJlbnRfZHJpdmUsICZmYWtlX2NoYW5nZSkgfHwKKwkgICAgdGVzdF9iaXQoRkRfRElTS19DSEFOR0VEX0JJVCwgJkRSUy0+ZmxhZ3MpKSB7CisJCURQUklOVCgiZGlzayBhYnNlbnQgb3IgY2hhbmdlZCBkdXJpbmcgb3BlcmF0aW9uXG4iKTsKKwkJcmVxdWVzdF9kb25lKDApOworCQlnb3RvIGRvX3JlcXVlc3Q7CisJfQorCWlmICghX2Zsb3BweSkgewkvKiBBdXRvZGV0ZWN0aW9uICovCisJCWlmICghcHJvYmluZykgeworCQkJRFJTLT5wcm9iZWRfZm9ybWF0ID0gMDsKKwkJCWlmIChuZXh0X3ZhbGlkX2Zvcm1hdCgpKSB7CisJCQkJRFBSSU5UKCJubyBhdXRvZGV0ZWN0YWJsZSBmb3JtYXRzXG4iKTsKKwkJCQlfZmxvcHB5ID0gTlVMTDsKKwkJCQlyZXF1ZXN0X2RvbmUoMCk7CisJCQkJZ290byBkb19yZXF1ZXN0OworCQkJfQorCQl9CisJCXByb2JpbmcgPSAxOworCQlfZmxvcHB5ID0gZmxvcHB5X3R5cGUgKyBEUC0+YXV0b2RldGVjdFtEUlMtPnByb2JlZF9mb3JtYXRdOworCX0gZWxzZQorCQlwcm9iaW5nID0gMDsKKwllcnJvcnMgPSAmKGN1cnJlbnRfcmVxLT5lcnJvcnMpOworCXRtcCA9IG1ha2VfcmF3X3J3X3JlcXVlc3QoKTsKKwlpZiAodG1wIDwgMikgeworCQlyZXF1ZXN0X2RvbmUodG1wKTsKKwkJZ290byBkb19yZXF1ZXN0OworCX0KKworCWlmICh0ZXN0X2JpdChGRF9ORUVEX1RXQURETEVfQklULCAmRFJTLT5mbGFncykpCisJCXR3YWRkbGUoKTsKKwlzY2hlZHVsZV9iaChmbG9wcHlfc3RhcnQpOworCWRlYnVndChfX2Z1bmNfXywgInF1ZXVlIGZkIHJlcXVlc3QiKTsKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY29udF90IHJ3X2NvbnQgPSB7CkBAIC0yOTc5LDMwICsyOTM0LDMwIEBACiAJc2NoZWR1bGVfYmgocmVkb19mZF9yZXF1ZXN0KTsKIH0KIAotc3RhdGljIHZvaWQgZG9fZmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqIHEpCitzdGF0aWMgdm9pZCBkb19mZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKQogewogCWlmIChtYXhfYnVmZmVyX3NlY3RvcnMgPT0gMCkgewotCQlwcmludGsoIlZGUzogZG9fZmRfcmVxdWVzdCBjYWxsZWQgb24gbm9uLW9wZW4gZGV2aWNlXG4iKTsKKwkJcHJfaW5mbygiVkZTOiAlcyBjYWxsZWQgb24gbm9uLW9wZW4gZGV2aWNlXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAodXNhZ2VfY291bnQgPT0gMCkgewotCQlwcmludGsoIndhcm5pbmc6IHVzYWdlIGNvdW50PTAsIGN1cnJlbnRfcmVxPSVwIGV4aXRpbmdcbiIsCi0JCSAgICAgICBjdXJyZW50X3JlcSk7Ci0JCXByaW50aygic2VjdD0lbGQgdHlwZT0leCBmbGFncz0leFxuIiwKLQkJICAgICAgIChsb25nKWJsa19ycV9wb3MoY3VycmVudF9yZXEpLCBjdXJyZW50X3JlcS0+Y21kX3R5cGUsCi0JCSAgICAgICBjdXJyZW50X3JlcS0+Y21kX2ZsYWdzKTsKKwkJcHJfaW5mbygid2FybmluZzogdXNhZ2UgY291bnQ9MCwgY3VycmVudF9yZXE9JXAgZXhpdGluZ1xuIiwKKwkJCWN1cnJlbnRfcmVxKTsKKwkJcHJfaW5mbygic2VjdD0lbGQgdHlwZT0leCBmbGFncz0leFxuIiwKKwkJCShsb25nKWJsa19ycV9wb3MoY3VycmVudF9yZXEpLCBjdXJyZW50X3JlcS0+Y21kX3R5cGUsCisJCQljdXJyZW50X3JlcS0+Y21kX2ZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAlpZiAodGVzdF9iaXQoMCwgJmZkY19idXN5KSkgewogCQkvKiBmZGMgYnVzeSwgdGhpcyBuZXcgcmVxdWVzdCB3aWxsIGJlIHRyZWF0ZWQgd2hlbiB0aGUKIAkJICAgY3VycmVudCBvbmUgaXMgZG9uZSAqLwotCQlpc19hbGl2ZSgiZG8gZmQgcmVxdWVzdCwgb2xkIHJlcXVlc3QgcnVubmluZyIpOworCQlpc19hbGl2ZShfX2Z1bmNfXywgIm9sZCByZXF1ZXN0IHJ1bm5pbmciKTsKIAkJcmV0dXJuOwogCX0KLQlsb2NrX2ZkYyhNQVhUSU1FT1VULCAwKTsKKwlsb2NrX2ZkYyhNQVhUSU1FT1VULCBmYWxzZSk7CiAJcHJvY2Vzc19mZF9yZXF1ZXN0KCk7Ci0JaXNfYWxpdmUoImRvIGZkIHJlcXVlc3QiKTsKKwlpc19hbGl2ZShfX2Z1bmNfXywgIiIpOwogfQogCiBzdGF0aWMgc3RydWN0IGNvbnRfdCBwb2xsX2NvbnQgPSB7CkBAIC0zMDEyLDI0ICsyOTY3LDE4IEBACiAJLmRvbmUJCT0gZ2VuZXJpY19kb25lCiB9OwogCi1zdGF0aWMgaW50IHBvbGxfZHJpdmUoaW50IGludGVycnVwdGlibGUsIGludCBmbGFnKQorc3RhdGljIGludCBwb2xsX2RyaXZlKGJvb2wgaW50ZXJydXB0aWJsZSwgaW50IGZsYWcpCiB7Ci0JaW50IHJldDsKLQogCS8qIG5vIGF1dG8tc2Vuc2UsIGp1c3QgY2xlYXIgZGNsICovCiAJcmF3X2NtZCA9ICZkZWZhdWx0X3Jhd19jbWQ7CiAJcmF3X2NtZC0+ZmxhZ3MgPSBmbGFnOwogCXJhd19jbWQtPnRyYWNrID0gMDsKIAlyYXdfY21kLT5jbWRfY291bnQgPSAwOwogCWNvbnQgPSAmcG9sbF9jb250OwotI2lmZGVmIERDTF9ERUJVRwotCWlmIChEUC0+ZmxhZ3MgJiBGRF9ERUJVRykgewotCQlEUFJJTlQoInNldHRpbmcgTkVXQ0hBTkdFIGluIHBvbGxfZHJpdmVcbiIpOwotCX0KLSNlbmRpZgotCVNFVEYoRkRfRElTS19ORVdDSEFOR0UpOwotCVdBSVQoZmxvcHB5X3JlYWR5KTsKLQlyZXR1cm4gcmV0OworCWRlYnVnX2RjbChEUC0+ZmxhZ3MsICJzZXR0aW5nIE5FV0NIQU5HRSBpbiBwb2xsX2RyaXZlXG4iKTsKKwlzZXRfYml0KEZEX0RJU0tfTkVXQ0hBTkdFX0JJVCwgJkRSUy0+ZmxhZ3MpOworCisJcmV0dXJuIHdhaXRfdGlsX2RvbmUoZmxvcHB5X3JlYWR5LCBpbnRlcnJ1cHRpYmxlKTsKIH0KIAogLyoKQEAgLTMwMzksNyArMjk4OCw3IEBACiAKIHN0YXRpYyB2b2lkIHJlc2V0X2ludHIodm9pZCkKIHsKLQlwcmludGsoIndlaXJkLCByZXNldCBpbnRlcnJ1cHQgY2FsbGVkXG4iKTsKKwlwcl9pbmZvKCJ3ZWlyZCwgcmVzZXQgaW50ZXJydXB0IGNhbGxlZFxuIik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY29udF90IHJlc2V0X2NvbnQgPSB7CkBAIC0zMDQ5LDIwICsyOTk4LDIzIEBACiAJLmRvbmUJCT0gZ2VuZXJpY19kb25lCiB9OwogCi1zdGF0aWMgaW50IHVzZXJfcmVzZXRfZmRjKGludCBkcml2ZSwgaW50IGFyZywgaW50IGludGVycnVwdGlibGUpCitzdGF0aWMgaW50IHVzZXJfcmVzZXRfZmRjKGludCBkcml2ZSwgaW50IGFyZywgYm9vbCBpbnRlcnJ1cHRpYmxlKQogewogCWludCByZXQ7CiAKLQlyZXQgPSAwOwotCUxPQ0tfRkRDKGRyaXZlLCBpbnRlcnJ1cHRpYmxlKTsKKwlpZiAobG9ja19mZGMoZHJpdmUsIGludGVycnVwdGlibGUpKQorCQlyZXR1cm4gLUVJTlRSOworCiAJaWYgKGFyZyA9PSBGRF9SRVNFVF9BTFdBWVMpCiAJCUZEQ1MtPnJlc2V0ID0gMTsKIAlpZiAoRkRDUy0+cmVzZXQpIHsKIAkJY29udCA9ICZyZXNldF9jb250OwotCQlXQUlUKHJlc2V0X2ZkYyk7CisJCXJldCA9IHdhaXRfdGlsX2RvbmUocmVzZXRfZmRjLCBpbnRlcnJ1cHRpYmxlKTsKKwkJaWYgKHJldCA9PSAtRUlOVFIpCisJCQlyZXR1cm4gLUVJTlRSOwogCX0KIAlwcm9jZXNzX2ZkX3JlcXVlc3QoKTsKLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMzA3NSwxNyArMzAyNywxMiBAQAogCXJldHVybiBjb3B5X3RvX3VzZXIocGFyYW0sIGFkZHJlc3MsIHNpemUpID8gLUVGQVVMVCA6IDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZkX2NvcHlpbih2b2lkIF9fdXNlciAqcGFyYW0sIHZvaWQgKmFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGZkX2NvcHlpbih2b2lkIF9fdXNlciAqcGFyYW0sIHZvaWQgKmFkZHJlc3MsCisJCQkgICAgdW5zaWduZWQgbG9uZyBzaXplKQogewogCXJldHVybiBjb3B5X2Zyb21fdXNlcihhZGRyZXNzLCBwYXJhbSwgc2l6ZSkgPyAtRUZBVUxUIDogMDsKIH0KIAotI2RlZmluZSBfQ09QWU9VVCh4KSAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKXBhcmFtLCAmKHgpLCBzaXplb2YoeCkpID8gLUVGQVVMVCA6IDApCi0jZGVmaW5lIF9DT1BZSU4oeCkgKGNvcHlfZnJvbV91c2VyKCYoeCksICh2b2lkIF9fdXNlciAqKXBhcmFtLCBzaXplb2YoeCkpID8gLUVGQVVMVCA6IDApCi0KLSNkZWZpbmUgQ09QWU9VVCh4KSBFQ0FMTChfQ09QWU9VVCh4KSkKLSNkZWZpbmUgQ09QWUlOKHgpIEVDQUxMKF9DT1BZSU4oeCkpCi0KIHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqZHJpdmVfbmFtZShpbnQgdHlwZSwgaW50IGRyaXZlKQogewogCXN0cnVjdCBmbG9wcHlfc3RydWN0ICpmbG9wcHk7CkBAIC0zMTU2LDIzICszMTAzLDI5IEBACiAJLmRvbmUJCT0gcmF3X2NtZF9kb25lCiB9OwogCi1zdGF0aWMgaW5saW5lIGludCByYXdfY21kX2NvcHlvdXQoaW50IGNtZCwgY2hhciBfX3VzZXIgKnBhcmFtLAorc3RhdGljIGlubGluZSBpbnQgcmF3X2NtZF9jb3B5b3V0KGludCBjbWQsIHZvaWQgX191c2VyICpwYXJhbSwKIAkJCQkgIHN0cnVjdCBmbG9wcHlfcmF3X2NtZCAqcHRyKQogewogCWludCByZXQ7CiAKIAl3aGlsZSAocHRyKSB7Ci0JCUNPUFlPVVQoKnB0cik7CisJCXJldCA9IGNvcHlfdG9fdXNlcihwYXJhbSwgcHRyLCBzaXplb2YoKnB0cikpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXBhcmFtICs9IHNpemVvZihzdHJ1Y3QgZmxvcHB5X3Jhd19jbWQpOwogCQlpZiAoKHB0ci0+ZmxhZ3MgJiBGRF9SQVdfUkVBRCkgJiYgcHRyLT5idWZmZXJfbGVuZ3RoKSB7Ci0JCQlpZiAocHRyLT5sZW5ndGggPj0gMAotCQkJICAgICYmIHB0ci0+bGVuZ3RoIDw9IHB0ci0+YnVmZmVyX2xlbmd0aCkKLQkJCQlFQ0FMTChmZF9jb3B5b3V0Ci0JCQkJICAgICAgKHB0ci0+ZGF0YSwgcHRyLT5rZXJuZWxfZGF0YSwKLQkJCQkgICAgICAgcHRyLT5idWZmZXJfbGVuZ3RoIC0gcHRyLT5sZW5ndGgpKTsKKwkJCWlmIChwdHItPmxlbmd0aCA+PSAwICYmCisJCQkgICAgcHRyLT5sZW5ndGggPD0gcHRyLT5idWZmZXJfbGVuZ3RoKSB7CisJCQkJbG9uZyBsZW5ndGggPSBwdHItPmJ1ZmZlcl9sZW5ndGggLSBwdHItPmxlbmd0aDsKKwkJCQlyZXQgPSBmZF9jb3B5b3V0KHB0ci0+ZGF0YSwgcHRyLT5rZXJuZWxfZGF0YSwKKwkJCQkJCSBsZW5ndGgpOworCQkJCWlmIChyZXQpCisJCQkJCXJldHVybiByZXQ7CisJCQl9CiAJCX0KIAkJcHRyID0gcHRyLT5uZXh0OwogCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0zMTk1LDcgKzMxNDgsNyBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSBpbnQgcmF3X2NtZF9jb3B5aW4oaW50IGNtZCwgY2hhciBfX3VzZXIgKnBhcmFtLAorc3RhdGljIGlubGluZSBpbnQgcmF3X2NtZF9jb3B5aW4oaW50IGNtZCwgdm9pZCBfX3VzZXIgKnBhcmFtLAogCQkJCSBzdHJ1Y3QgZmxvcHB5X3Jhd19jbWQgKipyY21kKQogewogCXN0cnVjdCBmbG9wcHlfcmF3X2NtZCAqcHRyOwpAQCAtMzIwMywxNyArMzE1NiwxOSBAQAogCWludCBpOwogCiAJKnJjbWQgPSBOVUxMOwotCXdoaWxlICgxKSB7Ci0JCXB0ciA9IChzdHJ1Y3QgZmxvcHB5X3Jhd19jbWQgKikKLQkJICAgIGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmbG9wcHlfcmF3X2NtZCksIEdGUF9VU0VSKTsKLQkJaWYgKCFwdHIpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJKnJjbWQgPSBwdHI7Ci0JCUNPUFlJTigqcHRyKTsKLQkJcHRyLT5uZXh0ID0gTlVMTDsKLQkJcHRyLT5idWZmZXJfbGVuZ3RoID0gMDsKLQkJcGFyYW0gKz0gc2l6ZW9mKHN0cnVjdCBmbG9wcHlfcmF3X2NtZCk7Ci0JCWlmIChwdHItPmNtZF9jb3VudCA+IDMzKQorCitsb29wOgorCXB0ciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmbG9wcHlfcmF3X2NtZCksIEdGUF9VU0VSKTsKKwlpZiAoIXB0cikKKwkJcmV0dXJuIC1FTk9NRU07CisJKnJjbWQgPSBwdHI7CisJcmV0ID0gY29weV9mcm9tX3VzZXIocHRyLCBwYXJhbSwgc2l6ZW9mKCpwdHIpKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gLUVGQVVMVDsKKwlwdHItPm5leHQgPSBOVUxMOworCXB0ci0+YnVmZmVyX2xlbmd0aCA9IDA7CisJcGFyYW0gKz0gc2l6ZW9mKHN0cnVjdCBmbG9wcHlfcmF3X2NtZCk7CisJaWYgKHB0ci0+Y21kX2NvdW50ID4gMzMpCiAJCQkvKiB0aGUgY29tbWFuZCBtYXkgbm93IGFsc28gdGFrZSB1cCB0aGUgc3BhY2UKIAkJCSAqIGluaXRpYWxseSBpbnRlbmRlZCBmb3IgdGhlIHJlcGx5ICYgdGhlCiAJCQkgKiByZXBseSBjb3VudC4gTmVlZGVkIGZvciBsb25nIDgyMDc4IGNvbW1hbmRzCkBAIC0zMjIyLDMxICszMTc3LDM1IEBACiAJCQkgKiAxNiBieXRlcyBmb3IgYSBzdHJ1Y3R1cmUsIHlvdSdsbCBvbmUgZGF5CiAJCQkgKiBkaXNjb3ZlciB0aGF0IHlvdSByZWFsbHkgbmVlZCAxNy4uLgogCQkJICovCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJCXB0ci0+cmVwbHlbaV0gPSAwOworCXB0ci0+cmVzdWx0Y29kZSA9IDA7CisJcHRyLT5rZXJuZWxfZGF0YSA9IE5VTEw7CisKKwlpZiAocHRyLT5mbGFncyAmIChGRF9SQVdfUkVBRCB8IEZEX1JBV19XUklURSkpIHsKKwkJaWYgKHB0ci0+bGVuZ3RoIDw9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLQkJCXB0ci0+cmVwbHlbaV0gPSAwOwotCQlwdHItPnJlc3VsdGNvZGUgPSAwOwotCQlwdHItPmtlcm5lbF9kYXRhID0gTlVMTDsKLQotCQlpZiAocHRyLT5mbGFncyAmIChGRF9SQVdfUkVBRCB8IEZEX1JBV19XUklURSkpIHsKLQkJCWlmIChwdHItPmxlbmd0aCA8PSAwKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJcHRyLT5rZXJuZWxfZGF0YSA9Ci0JCQkgICAgKGNoYXIgKilmZF9kbWFfbWVtX2FsbG9jKHB0ci0+bGVuZ3RoKTsKLQkJCWZhbGxiYWNrX29uX25vZG1hX2FsbG9jKCZwdHItPmtlcm5lbF9kYXRhLCBwdHItPmxlbmd0aCk7Ci0JCQlpZiAoIXB0ci0+a2VybmVsX2RhdGEpCi0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQlwdHItPmJ1ZmZlcl9sZW5ndGggPSBwdHItPmxlbmd0aDsKLQkJfQotCQlpZiAocHRyLT5mbGFncyAmIEZEX1JBV19XUklURSkKLQkJCUVDQUxMKGZkX2NvcHlpbihwdHItPmRhdGEsIHB0ci0+a2VybmVsX2RhdGEsCi0JCQkJCXB0ci0+bGVuZ3RoKSk7Ci0JCXJjbWQgPSAmKHB0ci0+bmV4dCk7Ci0JCWlmICghKHB0ci0+ZmxhZ3MgJiBGRF9SQVdfTU9SRSkpCi0JCQlyZXR1cm4gMDsKLQkJcHRyLT5yYXRlICY9IDB4NDM7CisJCXB0ci0+a2VybmVsX2RhdGEgPSAoY2hhciAqKWZkX2RtYV9tZW1fYWxsb2MocHRyLT5sZW5ndGgpOworCQlmYWxsYmFja19vbl9ub2RtYV9hbGxvYygmcHRyLT5rZXJuZWxfZGF0YSwgcHRyLT5sZW5ndGgpOworCQlpZiAoIXB0ci0+a2VybmVsX2RhdGEpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJcHRyLT5idWZmZXJfbGVuZ3RoID0gcHRyLT5sZW5ndGg7CiAJfQorCWlmIChwdHItPmZsYWdzICYgRkRfUkFXX1dSSVRFKSB7CisJCXJldCA9IGZkX2NvcHlpbihwdHItPmRhdGEsIHB0ci0+a2VybmVsX2RhdGEsIHB0ci0+bGVuZ3RoKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHB0ci0+ZmxhZ3MgJiBGRF9SQVdfTU9SRSkgeworCQlyY21kID0gJihwdHItPm5leHQpOworCQlwdHItPnJhdGUgJj0gMHg0MzsKKwkJZ290byBsb29wOworCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJhd19jbWRfaW9jdGwoaW50IGNtZCwgdm9pZCBfX3VzZXIgKnBhcmFtKQpAQCAtMzI4MywxMiArMzI0Miw4IEBACiAKIAlyYXdfY21kID0gbXlfcmF3X2NtZDsKIAljb250ID0gJnJhd19jbWRfY29udDsKLQlyZXQgPSB3YWl0X3RpbF9kb25lKGZsb3BweV9zdGFydCwgMSk7Ci0jaWZkZWYgRENMX0RFQlVHCi0JaWYgKERQLT5mbGFncyAmIEZEX0RFQlVHKSB7Ci0JCURQUklOVCgiY2FsbGluZyBkaXNrIGNoYW5nZSBmcm9tIHJhd19jbWQgaW9jdGxcbiIpOwotCX0KLSNlbmRpZgorCXJldCA9IHdhaXRfdGlsX2RvbmUoZmxvcHB5X3N0YXJ0LCB0cnVlKTsKKwlkZWJ1Z19kY2woRFAtPmZsYWdzLCAiY2FsbGluZyBkaXNrIGNoYW5nZSBmcm9tIHJhd19jbWQgaW9jdGxcbiIpOwogCiAJaWYgKHJldCAhPSAtRUlOVFIgJiYgRkRDUy0+cmVzZXQpCiAJCXJldCA9IC1FSU87CkBAIC0zMzI3LDcgKzMyODIsNyBAQAogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQlyZXR1cm4gLUVQRVJNOwogCQltdXRleF9sb2NrKCZvcGVuX2xvY2spOwotCQlpZiAobG9ja19mZGMoZHJpdmUsIDEpKSB7CisJCWlmIChsb2NrX2ZkYyhkcml2ZSwgdHJ1ZSkpIHsKIAkJCW11dGV4X3VubG9jaygmb3Blbl9sb2NrKTsKIAkJCXJldHVybiAtRUlOVFI7CiAJCX0KQEAgLTMzNDYsMTEgKzMzMDEsMTUgQEAKIAkJbXV0ZXhfdW5sb2NrKCZvcGVuX2xvY2spOwogCX0gZWxzZSB7CiAJCWludCBvbGRTdHJldGNoOwotCQlMT0NLX0ZEQyhkcml2ZSwgMSk7Ci0JCWlmIChjbWQgIT0gRkRERUZQUk0pCisKKwkJaWYgKGxvY2tfZmRjKGRyaXZlLCB0cnVlKSkKKwkJCXJldHVybiAtRUlOVFI7CisJCWlmIChjbWQgIT0gRkRERUZQUk0pIHsKIAkJCS8qIG5vdGljZSBhIGRpc2sgY2hhbmdlIGltbWVkaWF0ZWx5LCBlbHNlCiAJCQkgKiB3ZSBsb3NlIG91ciBzZXR0aW5ncyBpbW1lZGlhdGVseSovCi0JCQlDQUxMKHBvbGxfZHJpdmUoMSwgRkRfUkFXX05FRURfRElTSykpOworCQkJaWYgKHBvbGxfZHJpdmUodHJ1ZSwgRkRfUkFXX05FRURfRElTSykgPT0gLUVJTlRSKQorCQkJCXJldHVybiAtRUlOVFI7CisJCX0KIAkJb2xkU3RyZXRjaCA9IGctPnN0cmV0Y2g7CiAJCXVzZXJfcGFyYW1zW2RyaXZlXSA9ICpnOwogCQlpZiAoYnVmZmVyX2RyaXZlID09IGRyaXZlKQpAQCAtMzQxNSw3ICszMzc0LDcgQEAKIAkJCSpzaXplID0gX0lPQ19TSVpFKCpjbWQpOwogCQkJKmNtZCA9IGlvY3RsX3RhYmxlW2ldOwogCQkJaWYgKCpzaXplID4gX0lPQ19TSVpFKCpjbWQpKSB7Ci0JCQkJcHJpbnRrKCJpb2N0bCBub3QgeWV0IHN1cHBvcnRlZFxuIik7CisJCQkJcHJfaW5mbygiaW9jdGwgbm90IHlldCBzdXBwb3J0ZWRcbiIpOwogCQkJCXJldHVybiAtRUZBVUxUOwogCQkJfQogCQkJcmV0dXJuIDA7CkBAIC0zNDI5LDggKzMzODgsMTAgQEAKIAlpZiAodHlwZSkKIAkJKmcgPSAmZmxvcHB5X3R5cGVbdHlwZV07CiAJZWxzZSB7Ci0JCUxPQ0tfRkRDKGRyaXZlLCAwKTsKLQkJQ0FMTChwb2xsX2RyaXZlKDAsIDApKTsKKwkJaWYgKGxvY2tfZmRjKGRyaXZlLCBmYWxzZSkpCisJCQlyZXR1cm4gLUVJTlRSOworCQlpZiAocG9sbF9kcml2ZShmYWxzZSwgMCkgPT0gLUVJTlRSKQorCQkJcmV0dXJuIC1FSU5UUjsKIAkJcHJvY2Vzc19mZF9yZXF1ZXN0KCk7CiAJCSpnID0gY3VycmVudF90eXBlW2RyaXZlXTsKIAl9CkBAIC0zNDU5LDEwICszNDIwLDYgQEAKIHN0YXRpYyBpbnQgZmRfaW9jdGwoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgZm1vZGVfdCBtb2RlLCB1bnNpZ25lZCBpbnQgY21kLAogCQkgICAgdW5zaWduZWQgbG9uZyBwYXJhbSkKIHsKLSNkZWZpbmUgRkRfSU9DVExfQUxMT1dFRCAobW9kZSAmIChGTU9ERV9XUklURXxGTU9ERV9XUklURV9JT0NUTCkpCi0jZGVmaW5lIE9VVChjLHgpIGNhc2UgYzogb3V0cGFyYW0gPSAoY29uc3QgY2hhciAqKSAoeCk7IGJyZWFrCi0jZGVmaW5lIElOKGMseCx0YWcpIGNhc2UgYzogKih4KSA9IGlucGFyYW0uIHRhZyA7IHJldHVybiAwCi0KIAlpbnQgZHJpdmUgPSAobG9uZyliZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CiAJaW50IHR5cGUgPSBJVFlQRShVRFJTLT5mZF9kZXZpY2UpOwogCWludCBpOwpAQCAtMzQ3NCwyNiArMzQzMSwyOCBAQAogCQlzdHJ1Y3QgZmxvcHB5X21heF9lcnJvcnMgbWF4X2Vycm9yczsKIAkJc3RydWN0IGZsb3BweV9kcml2ZV9wYXJhbXMgZHA7CiAJfSBpbnBhcmFtOwkJLyogcGFyYW1ldGVycyBjb21pbmcgZnJvbSB1c2VyIHNwYWNlICovCi0JY29uc3QgY2hhciAqb3V0cGFyYW07CS8qIHBhcmFtZXRlcnMgcGFzc2VkIGJhY2sgdG8gdXNlciBzcGFjZSAqLworCWNvbnN0IHZvaWQgKm91dHBhcmFtOwkvKiBwYXJhbWV0ZXJzIHBhc3NlZCBiYWNrIHRvIHVzZXIgc3BhY2UgKi8KIAogCS8qIGNvbnZlcnQgY29tcGF0aWJpbGl0eSBlamVjdCBpb2N0bHMgaW50byBmbG9wcHkgZWplY3QgaW9jdGwuCiAJICogV2UgZG8gdGhpcyBpbiBvcmRlciB0byBwcm92aWRlIGEgbWVhbnMgdG8gZWplY3QgZmxvcHB5IGRpc2tzIGJlZm9yZQogCSAqIGluc3RhbGxpbmcgdGhlIG5ldyBmZHV0aWxzIHBhY2thZ2UgKi8KIAlpZiAoY21kID09IENEUk9NRUpFQ1QgfHwJLyogQ0QtUk9NIGVqZWN0ICovCi0JICAgIGNtZCA9PSAweDY0NzAgLyogU3VuT1MgZmxvcHB5IGVqZWN0ICovICkgeworCSAgICBjbWQgPT0gMHg2NDcwKSB7CQkvKiBTdW5PUyBmbG9wcHkgZWplY3QgKi8KIAkJRFBSSU5UKCJvYnNvbGV0ZSBlamVjdCBpb2N0bFxuIik7CiAJCURQUklOVCgicGxlYXNlIHVzZSBmbG9wcHljb250cm9sIC0tZWplY3RcbiIpOwogCQljbWQgPSBGREVKRUNUOwogCX0KIAotCS8qIGNvbnZlcnQgdGhlIG9sZCBzdHlsZSBjb21tYW5kIGludG8gYSBuZXcgc3R5bGUgY29tbWFuZCAqLwotCWlmICgoY21kICYgMHhmZjAwKSA9PSAweDAyMDApIHsKLQkJRUNBTEwobm9ybWFsaXplX2lvY3RsKCZjbWQsICZzaXplKSk7Ci0JfSBlbHNlCisJaWYgKCEoKGNtZCAmIDB4ZmYwMCkgPT0gMHgwMjAwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBjb252ZXJ0IHRoZSBvbGQgc3R5bGUgY29tbWFuZCBpbnRvIGEgbmV3IHN0eWxlIGNvbW1hbmQgKi8KKwlyZXQgPSBub3JtYWxpemVfaW9jdGwoJmNtZCwgJnNpemUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKIAkvKiBwZXJtaXNzaW9uIGNoZWNrcyAqLwotCWlmICgoKGNtZCAmIDB4NDApICYmICFGRF9JT0NUTF9BTExPV0VEKSB8fAorCWlmICgoKGNtZCAmIDB4NDApICYmICEobW9kZSAmIChGTU9ERV9XUklURSB8IEZNT0RFX1dSSVRFX0lPQ1RMKSkpIHx8CiAJICAgICgoY21kICYgMHg4MCkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpKQogCQlyZXR1cm4gLUVQRVJNOwogCkBAIC0zNTAxLDEyOSArMzQ2MCwxNDIgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBjb3B5aW4gKi8KLQlDTEVBUlNUUlVDVCgmaW5wYXJhbSk7Ci0JaWYgKF9JT0NfRElSKGNtZCkgJiBfSU9DX1dSSVRFKQotCSAgICBFQ0FMTChmZF9jb3B5aW4oKHZvaWQgX191c2VyICopcGFyYW0sICZpbnBhcmFtLCBzaXplKSkKLQotCQlzd2l0Y2ggKGNtZCkgewotCQljYXNlIEZERUpFQ1Q6Ci0JCQlpZiAoVURSUy0+ZmRfcmVmICE9IDEpCi0JCQkJLyogc29tZWJvZHkgZWxzZSBoYXMgdGhpcyBkcml2ZSBvcGVuICovCi0JCQkJcmV0dXJuIC1FQlVTWTsKLQkJCUxPQ0tfRkRDKGRyaXZlLCAxKTsKLQotCQkJLyogZG8gdGhlIGFjdHVhbCBlamVjdC4gRmFpbHMgb24KLQkJCSAqIG5vbi1TcGFyYyBhcmNoaXRlY3R1cmVzICovCi0JCQlyZXQgPSBmZF9lamVjdChVTklUKGRyaXZlKSk7Ci0KLQkJCVVTRVRGKEZEX0RJU0tfQ0hBTkdFRCk7Ci0JCQlVU0VURihGRF9WRVJJRlkpOwotCQkJcHJvY2Vzc19mZF9yZXF1ZXN0KCk7CisJbWVtc2V0KCZpbnBhcmFtLCAwLCBzaXplb2YoaW5wYXJhbSkpOworCWlmIChfSU9DX0RJUihjbWQpICYgX0lPQ19XUklURSkgeworCQlyZXQgPSBmZF9jb3B5aW4oKHZvaWQgX191c2VyICopcGFyYW0sICZpbnBhcmFtLCBzaXplKTsKKwkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7Ci0JCWNhc2UgRkRDTFJQUk06Ci0JCQlMT0NLX0ZEQyhkcml2ZSwgMSk7Ci0JCQljdXJyZW50X3R5cGVbZHJpdmVdID0gTlVMTDsKLQkJCWZsb3BweV9zaXplc1tkcml2ZV0gPSBNQVhfRElTS19TSVpFIDw8IDE7Ci0JCQlVRFJTLT5rZWVwX2RhdGEgPSAwOwotCQkJcmV0dXJuIGludmFsaWRhdGVfZHJpdmUoYmRldik7Ci0JCWNhc2UgRkRTRVRQUk06Ci0JCWNhc2UgRkRERUZQUk06Ci0JCQlyZXR1cm4gc2V0X2dlb21ldHJ5KGNtZCwgJmlucGFyYW0uZywKLQkJCQkJICAgIGRyaXZlLCB0eXBlLCBiZGV2KTsKLQkJY2FzZSBGREdFVFBSTToKLQkJCUVDQUxMKGdldF9mbG9wcHlfZ2VvbWV0cnkoZHJpdmUsIHR5cGUsCi0JCQkJCQkgIChzdHJ1Y3QgZmxvcHB5X3N0cnVjdCAqKikKLQkJCQkJCSAgJm91dHBhcmFtKSk7Ci0JCQlicmVhazsKKwl9CiAKLQkJY2FzZSBGRE1TR09OOgotCQkJVURQLT5mbGFncyB8PSBGVERfTVNHOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgRkRNU0dPRkY6Ci0JCQlVRFAtPmZsYWdzICY9IH5GVERfTVNHOwotCQkJcmV0dXJuIDA7CisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEZERUpFQ1Q6CisJCWlmIChVRFJTLT5mZF9yZWYgIT0gMSkKKwkJCS8qIHNvbWVib2R5IGVsc2UgaGFzIHRoaXMgZHJpdmUgb3BlbiAqLworCQkJcmV0dXJuIC1FQlVTWTsKKwkJaWYgKGxvY2tfZmRjKGRyaXZlLCB0cnVlKSkKKwkJCXJldHVybiAtRUlOVFI7CiAKLQkJY2FzZSBGREZNVEJFRzoKLQkJCUxPQ0tfRkRDKGRyaXZlLCAxKTsKLQkJCUNBTEwocG9sbF9kcml2ZSgxLCBGRF9SQVdfTkVFRF9ESVNLKSk7Ci0JCQlyZXQgPSBVRFJTLT5mbGFnczsKLQkJCXByb2Nlc3NfZmRfcmVxdWVzdCgpOwotCQkJaWYgKHJldCAmIEZEX1ZFUklGWSkKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCWlmICghKHJldCAmIEZEX0RJU0tfV1JJVEFCTEUpKQotCQkJCXJldHVybiAtRVJPRlM7Ci0JCQlyZXR1cm4gMDsKLQkJY2FzZSBGREZNVFRSSzoKLQkJCWlmIChVRFJTLT5mZF9yZWYgIT0gMSkKLQkJCQlyZXR1cm4gLUVCVVNZOwotCQkJcmV0dXJuIGRvX2Zvcm1hdChkcml2ZSwgJmlucGFyYW0uZik7Ci0JCWNhc2UgRkRGTVRFTkQ6Ci0JCWNhc2UgRkRGTFVTSDoKLQkJCUxPQ0tfRkRDKGRyaXZlLCAxKTsKLQkJCXJldHVybiBpbnZhbGlkYXRlX2RyaXZlKGJkZXYpOworCQkvKiBkbyB0aGUgYWN0dWFsIGVqZWN0LiBGYWlscyBvbgorCQkgKiBub24tU3BhcmMgYXJjaGl0ZWN0dXJlcyAqLworCQlyZXQgPSBmZF9lamVjdChVTklUKGRyaXZlKSk7CiAKLQkJY2FzZSBGRFNFVEVNU0dUUkVTSDoKLQkJCVVEUC0+bWF4X2Vycm9ycy5yZXBvcnRpbmcgPQotCQkJICAgICh1bnNpZ25lZCBzaG9ydCkocGFyYW0gJiAweDBmKTsKLQkJCXJldHVybiAwOwotCQkJT1VUKEZER0VUTUFYRVJSUywgJlVEUC0+bWF4X2Vycm9ycyk7Ci0JCQlJTihGRFNFVE1BWEVSUlMsICZVRFAtPm1heF9lcnJvcnMsIG1heF9lcnJvcnMpOwotCi0JCWNhc2UgRkRHRVREUlZUWVA6Ci0JCQlvdXRwYXJhbSA9IGRyaXZlX25hbWUodHlwZSwgZHJpdmUpOwotCQkJU1VQQk9VTkQoc2l6ZSwgc3RybGVuKG91dHBhcmFtKSArIDEpOwotCQkJYnJlYWs7Ci0KLQkJCUlOKEZEU0VURFJWUFJNLCBVRFAsIGRwKTsKLQkJCU9VVChGREdFVERSVlBSTSwgVURQKTsKLQotCQljYXNlIEZEUE9MTERSVlNUQVQ6Ci0JCQlMT0NLX0ZEQyhkcml2ZSwgMSk7Ci0JCQlDQUxMKHBvbGxfZHJpdmUoMSwgRkRfUkFXX05FRURfRElTSykpOwotCQkJcHJvY2Vzc19mZF9yZXF1ZXN0KCk7Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJCU9VVChGREdFVERSVlNUQVQsIFVEUlMpOwotCi0JCWNhc2UgRkRSRVNFVDoKLQkJCXJldHVybiB1c2VyX3Jlc2V0X2ZkYyhkcml2ZSwgKGludClwYXJhbSwgMSk7Ci0KLQkJCU9VVChGREdFVEZEQ1NUQVQsIFVGRENTKTsKLQotCQljYXNlIEZEV0VSUk9SQ0xSOgotCQkJQ0xFQVJTVFJVQ1QoVURSV0UpOwotCQkJcmV0dXJuIDA7Ci0JCQlPVVQoRkRXRVJST1JHRVQsIFVEUldFKTsKLQotCQljYXNlIEZEUkFXQ01EOgotCQkJaWYgKHR5cGUpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlMT0NLX0ZEQyhkcml2ZSwgMSk7Ci0JCQlzZXRfZmxvcHB5KGRyaXZlKTsKLQkJCUNBTEwoaSA9IHJhd19jbWRfaW9jdGwoY21kLCAodm9pZCBfX3VzZXIgKilwYXJhbSkpOwotCQkJcHJvY2Vzc19mZF9yZXF1ZXN0KCk7Ci0JCQlyZXR1cm4gaTsKLQotCQljYXNlIEZEVFdBRERMRToKLQkJCUxPQ0tfRkRDKGRyaXZlLCAxKTsKLQkJCXR3YWRkbGUoKTsKLQkJCXByb2Nlc3NfZmRfcmVxdWVzdCgpOwotCQkJcmV0dXJuIDA7Ci0KLQkJZGVmYXVsdDoKKwkJc2V0X2JpdChGRF9ESVNLX0NIQU5HRURfQklULCAmVURSUy0+ZmxhZ3MpOworCQlzZXRfYml0KEZEX1ZFUklGWV9CSVQsICZVRFJTLT5mbGFncyk7CisJCXByb2Nlc3NfZmRfcmVxdWVzdCgpOworCQlyZXR1cm4gcmV0OworCWNhc2UgRkRDTFJQUk06CisJCWlmIChsb2NrX2ZkYyhkcml2ZSwgdHJ1ZSkpCisJCQlyZXR1cm4gLUVJTlRSOworCQljdXJyZW50X3R5cGVbZHJpdmVdID0gTlVMTDsKKwkJZmxvcHB5X3NpemVzW2RyaXZlXSA9IE1BWF9ESVNLX1NJWkUgPDwgMTsKKwkJVURSUy0+a2VlcF9kYXRhID0gMDsKKwkJcmV0dXJuIGludmFsaWRhdGVfZHJpdmUoYmRldik7CisJY2FzZSBGRFNFVFBSTToKKwljYXNlIEZEREVGUFJNOgorCQlyZXR1cm4gc2V0X2dlb21ldHJ5KGNtZCwgJmlucGFyYW0uZywgZHJpdmUsIHR5cGUsIGJkZXYpOworCWNhc2UgRkRHRVRQUk06CisJCXJldCA9IGdldF9mbG9wcHlfZ2VvbWV0cnkoZHJpdmUsIHR5cGUsCisJCQkJCSAgKHN0cnVjdCBmbG9wcHlfc3RydWN0ICoqKSZvdXRwYXJhbSk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlicmVhazsKKwljYXNlIEZETVNHT046CisJCVVEUC0+ZmxhZ3MgfD0gRlREX01TRzsKKwkJcmV0dXJuIDA7CisJY2FzZSBGRE1TR09GRjoKKwkJVURQLT5mbGFncyAmPSB+RlREX01TRzsKKwkJcmV0dXJuIDA7CisJY2FzZSBGREZNVEJFRzoKKwkJaWYgKGxvY2tfZmRjKGRyaXZlLCB0cnVlKSkKKwkJCXJldHVybiAtRUlOVFI7CisJCWlmIChwb2xsX2RyaXZlKHRydWUsIEZEX1JBV19ORUVEX0RJU0spID09IC1FSU5UUikKKwkJCXJldHVybiAtRUlOVFI7CisJCXJldCA9IFVEUlMtPmZsYWdzOworCQlwcm9jZXNzX2ZkX3JlcXVlc3QoKTsKKwkJaWYgKHJldCAmIEZEX1ZFUklGWSkKKwkJCXJldHVybiAtRU5PREVWOworCQlpZiAoIShyZXQgJiBGRF9ESVNLX1dSSVRBQkxFKSkKKwkJCXJldHVybiAtRVJPRlM7CisJCXJldHVybiAwOworCWNhc2UgRkRGTVRUUks6CisJCWlmIChVRFJTLT5mZF9yZWYgIT0gMSkKKwkJCXJldHVybiAtRUJVU1k7CisJCXJldHVybiBkb19mb3JtYXQoZHJpdmUsICZpbnBhcmFtLmYpOworCWNhc2UgRkRGTVRFTkQ6CisJY2FzZSBGREZMVVNIOgorCQlpZiAobG9ja19mZGMoZHJpdmUsIHRydWUpKQorCQkJcmV0dXJuIC1FSU5UUjsKKwkJcmV0dXJuIGludmFsaWRhdGVfZHJpdmUoYmRldik7CisJY2FzZSBGRFNFVEVNU0dUUkVTSDoKKwkJVURQLT5tYXhfZXJyb3JzLnJlcG9ydGluZyA9ICh1bnNpZ25lZCBzaG9ydCkocGFyYW0gJiAweDBmKTsKKwkJcmV0dXJuIDA7CisJY2FzZSBGREdFVE1BWEVSUlM6CisJCW91dHBhcmFtID0gJlVEUC0+bWF4X2Vycm9yczsKKwkJYnJlYWs7CisJY2FzZSBGRFNFVE1BWEVSUlM6CisJCVVEUC0+bWF4X2Vycm9ycyA9IGlucGFyYW0ubWF4X2Vycm9yczsKKwkJYnJlYWs7CisJY2FzZSBGREdFVERSVlRZUDoKKwkJb3V0cGFyYW0gPSBkcml2ZV9uYW1lKHR5cGUsIGRyaXZlKTsKKwkJU1VQQk9VTkQoc2l6ZSwgc3RybGVuKChjb25zdCBjaGFyICopb3V0cGFyYW0pICsgMSk7CisJCWJyZWFrOworCWNhc2UgRkRTRVREUlZQUk06CisJCSpVRFAgPSBpbnBhcmFtLmRwOworCQlicmVhazsKKwljYXNlIEZER0VURFJWUFJNOgorCQlvdXRwYXJhbSA9IFVEUDsKKwkJYnJlYWs7CisJY2FzZSBGRFBPTExEUlZTVEFUOgorCQlpZiAobG9ja19mZGMoZHJpdmUsIHRydWUpKQorCQkJcmV0dXJuIC1FSU5UUjsKKwkJaWYgKHBvbGxfZHJpdmUodHJ1ZSwgRkRfUkFXX05FRURfRElTSykgPT0gLUVJTlRSKQorCQkJcmV0dXJuIC1FSU5UUjsKKwkJcHJvY2Vzc19mZF9yZXF1ZXN0KCk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgRkRHRVREUlZTVEFUOgorCQlvdXRwYXJhbSA9IFVEUlM7CisJCWJyZWFrOworCWNhc2UgRkRSRVNFVDoKKwkJcmV0dXJuIHVzZXJfcmVzZXRfZmRjKGRyaXZlLCAoaW50KXBhcmFtLCB0cnVlKTsKKwljYXNlIEZER0VURkRDU1RBVDoKKwkJb3V0cGFyYW0gPSBVRkRDUzsKKwkJYnJlYWs7CisJY2FzZSBGRFdFUlJPUkNMUjoKKwkJbWVtc2V0KFVEUldFLCAwLCBzaXplb2YoKlVEUldFKSk7CisJCXJldHVybiAwOworCWNhc2UgRkRXRVJST1JHRVQ6CisJCW91dHBhcmFtID0gVURSV0U7CisJCWJyZWFrOworCWNhc2UgRkRSQVdDTUQ6CisJCWlmICh0eXBlKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KKwkJaWYgKGxvY2tfZmRjKGRyaXZlLCB0cnVlKSkKKwkJCXJldHVybiAtRUlOVFI7CisJCXNldF9mbG9wcHkoZHJpdmUpOworCQlpID0gcmF3X2NtZF9pb2N0bChjbWQsICh2b2lkIF9fdXNlciAqKXBhcmFtKTsKKwkJaWYgKGkgPT0gLUVJTlRSKQorCQkJcmV0dXJuIC1FSU5UUjsKKwkJcHJvY2Vzc19mZF9yZXF1ZXN0KCk7CisJCXJldHVybiBpOworCWNhc2UgRkRUV0FERExFOgorCQlpZiAobG9ja19mZGMoZHJpdmUsIHRydWUpKQorCQkJcmV0dXJuIC1FSU5UUjsKKwkJdHdhZGRsZSgpOworCQlwcm9jZXNzX2ZkX3JlcXVlc3QoKTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJaWYgKF9JT0NfRElSKGNtZCkgJiBfSU9DX1JFQUQpCiAJCXJldHVybiBmZF9jb3B5b3V0KCh2b2lkIF9fdXNlciAqKXBhcmFtLCBvdXRwYXJhbSwgc2l6ZSk7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLSN1bmRlZiBPVVQKLSN1bmRlZiBJTgorCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBjb25maWdfdHlwZXModm9pZCkKIHsKLQlpbnQgZmlyc3QgPSAxOworCWJvb2wgaGFzX2RyaXZlID0gZmFsc2U7CiAJaW50IGRyaXZlOwogCiAJLyogcmVhZCBkcml2ZSBpbmZvIG91dCBvZiBwaHlzaWNhbCBDTU9TICovCkBAIC0zNjU1LDE3ICszNjI3LDIyIEBACiAJCQluYW1lID0gdGVtcGFyZWE7CiAJCX0KIAkJaWYgKG5hbWUpIHsKLQkJCWNvbnN0IGNoYXIgKnByZXBlbmQgPSAiLCI7Ci0JCQlpZiAoZmlyc3QpIHsKLQkJCQlwcmVwZW5kID0gS0VSTl9JTkZPICJGbG9wcHkgZHJpdmUocyk6IjsKLQkJCQlmaXJzdCA9IDA7CisJCQljb25zdCBjaGFyICpwcmVwZW5kOworCQkJaWYgKCFoYXNfZHJpdmUpIHsKKwkJCQlwcmVwZW5kID0gIiI7CisJCQkJaGFzX2RyaXZlID0gdHJ1ZTsKKwkJCQlwcl9pbmZvKCJGbG9wcHkgZHJpdmUocyk6Iik7CisJCQl9IGVsc2UgeworCQkJCXByZXBlbmQgPSAiLCI7CiAJCQl9Ci0JCQlwcmludGsoIiVzIGZkJWQgaXMgJXMiLCBwcmVwZW5kLCBkcml2ZSwgbmFtZSk7CisKKwkJCXByX2NvbnQoIiVzIGZkJWQgaXMgJXMiLCBwcmVwZW5kLCBkcml2ZSwgbmFtZSk7CiAJCX0KIAkJKlVEUCA9ICpwYXJhbXM7CiAJfQotCWlmICghZmlyc3QpCi0JCXByaW50aygiXG4iKTsKKworCWlmIChoYXNfZHJpdmUpCisJCXByX2NvbnQoIlxuIik7CiB9CiAKIHN0YXRpYyBpbnQgZmxvcHB5X3JlbGVhc2Uoc3RydWN0IGdlbmRpc2sgKmRpc2ssIGZtb2RlX3QgbW9kZSkKQEAgLTM3MDUsOCArMzY4Miw4IEBACiAJCWdvdG8gb3V0MjsKIAogCWlmICghVURSUy0+ZmRfcmVmICYmIChVRFAtPmZsYWdzICYgRkRfQlJPS0VOX0RDTCkpIHsKLQkJVVNFVEYoRkRfRElTS19DSEFOR0VEKTsKLQkJVVNFVEYoRkRfVkVSSUZZKTsKKwkJc2V0X2JpdChGRF9ESVNLX0NIQU5HRURfQklULCAmVURSUy0+ZmxhZ3MpOworCQlzZXRfYml0KEZEX1ZFUklGWV9CSVQsICZVRFJTLT5mbGFncyk7CiAJfQogCiAJaWYgKFVEUlMtPmZkX3JlZiA9PSAtMSB8fCAoVURSUy0+ZmRfcmVmICYmIChtb2RlICYgRk1PREVfRVhDTCkpKQpAQCAtMzczNSw5ICszNzEyLDggQEAKIAkJCUlORkJPVU5EKHRyeSwgMTYpOwogCQkJdG1wID0gKGNoYXIgKilmZF9kbWFfbWVtX2FsbG9jKDEwMjQgKiB0cnkpOwogCQl9Ci0JCWlmICghdG1wICYmICFmbG9wcHlfdHJhY2tfYnVmZmVyKSB7CisJCWlmICghdG1wICYmICFmbG9wcHlfdHJhY2tfYnVmZmVyKQogCQkJZmFsbGJhY2tfb25fbm9kbWFfYWxsb2MoJnRtcCwgMjA0OCAqIHRyeSk7Ci0JCX0KIAkJaWYgKCF0bXAgJiYgIWZsb3BweV90cmFja19idWZmZXIpIHsKIAkJCURQUklOVCgiVW5hYmxlIHRvIGFsbG9jYXRlIERNQSBtZW1vcnlcbiIpOwogCQkJZ290byBvdXQ7CkBAIC0zNzY3LDExICszNzQzLDEyIEBACiAJCWlmIChtb2RlICYgKEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpKSB7CiAJCQlVRFJTLT5sYXN0X2NoZWNrZWQgPSAwOwogCQkJY2hlY2tfZGlza19jaGFuZ2UoYmRldik7Ci0JCQlpZiAoVVRFU1RGKEZEX0RJU0tfQ0hBTkdFRCkpCisJCQlpZiAodGVzdF9iaXQoRkRfRElTS19DSEFOR0VEX0JJVCwgJlVEUlMtPmZsYWdzKSkKIAkJCQlnb3RvIG91dDsKIAkJfQogCQlyZXMgPSAtRVJPRlM7Ci0JCWlmICgobW9kZSAmIEZNT0RFX1dSSVRFKSAmJiAhKFVURVNURihGRF9ESVNLX1dSSVRBQkxFKSkpCisJCWlmICgobW9kZSAmIEZNT0RFX1dSSVRFKSAmJgorCQkgICAgIXRlc3RfYml0KEZEX0RJU0tfV1JJVEFCTEVfQklULCAmVURSUy0+ZmxhZ3MpKQogCQkJZ290byBvdXQ7CiAJfQogCW11dGV4X3VubG9jaygmb3Blbl9sb2NrKTsKQEAgLTM3OTUsMTcgKzM3NzIsMTggQEAKIHsKIAlpbnQgZHJpdmUgPSAobG9uZylkaXNrLT5wcml2YXRlX2RhdGE7CiAKLQlpZiAoVVRFU1RGKEZEX0RJU0tfQ0hBTkdFRCkgfHwgVVRFU1RGKEZEX1ZFUklGWSkpCisJaWYgKHRlc3RfYml0KEZEX0RJU0tfQ0hBTkdFRF9CSVQsICZVRFJTLT5mbGFncykgfHwKKwkgICAgdGVzdF9iaXQoRkRfVkVSSUZZX0JJVCwgJlVEUlMtPmZsYWdzKSkKIAkJcmV0dXJuIDE7CiAKIAlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBVRFJTLT5sYXN0X2NoZWNrZWQgKyBVRFAtPmNoZWNrZnJlcSkpIHsKLQkJbG9ja19mZGMoZHJpdmUsIDApOwotCQlwb2xsX2RyaXZlKDAsIDApOworCQlsb2NrX2ZkYyhkcml2ZSwgZmFsc2UpOworCQlwb2xsX2RyaXZlKGZhbHNlLCAwKTsKIAkJcHJvY2Vzc19mZF9yZXF1ZXN0KCk7CiAJfQogCi0JaWYgKFVURVNURihGRF9ESVNLX0NIQU5HRUQpIHx8Ci0JICAgIFVURVNURihGRF9WRVJJRlkpIHx8CisJaWYgKHRlc3RfYml0KEZEX0RJU0tfQ0hBTkdFRF9CSVQsICZVRFJTLT5mbGFncykgfHwKKwkgICAgdGVzdF9iaXQoRkRfVkVSSUZZX0JJVCwgJlVEUlMtPmZsYWdzKSB8fAogCSAgICB0ZXN0X2JpdChkcml2ZSwgJmZha2VfY2hhbmdlKSB8fAogCSAgICAoIUlUWVBFKFVEUlMtPmZkX2RldmljZSkgJiYgIWN1cnJlbnRfdHlwZVtkcml2ZV0pKQogCQlyZXR1cm4gMTsKQEAgLTM4MTgsOCArMzc5Niw3IEBACiAgKiBhIGRpc2sgaW4gdGhlIGRyaXZlLCBhbmQgd2hldGhlciB0aGF0IGRpc2sgaXMgd3JpdGFibGUuCiAgKi8KIAotc3RhdGljIHZvaWQgZmxvcHB5X3JiMF9jb21wbGV0ZShzdHJ1Y3QgYmlvICpiaW8sCi0JCQkgICAgICAgaW50IGVycikKK3N0YXRpYyB2b2lkIGZsb3BweV9yYjBfY29tcGxldGUoc3RydWN0IGJpbyAqYmlvLCBpbnQgZXJyKQogewogCWNvbXBsZXRlKChzdHJ1Y3QgY29tcGxldGlvbiAqKWJpby0+YmlfcHJpdmF0ZSk7CiB9CkBAIC0zODc3LDE0ICszODU0LDE2IEBACiAJaW50IGNmOwogCWludCByZXMgPSAwOwogCi0JaWYgKFVURVNURihGRF9ESVNLX0NIQU5HRUQpIHx8Ci0JICAgIFVURVNURihGRF9WRVJJRlkpIHx8IHRlc3RfYml0KGRyaXZlLCAmZmFrZV9jaGFuZ2UpIHx8IE5PX0dFT00pIHsKKwlpZiAodGVzdF9iaXQoRkRfRElTS19DSEFOR0VEX0JJVCwgJlVEUlMtPmZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChGRF9WRVJJRllfQklULCAmVURSUy0+ZmxhZ3MpIHx8CisJICAgIHRlc3RfYml0KGRyaXZlLCAmZmFrZV9jaGFuZ2UpIHx8IE5PX0dFT00pIHsKIAkJaWYgKHVzYWdlX2NvdW50ID09IDApIHsKLQkJCXByaW50aygiVkZTOiByZXZhbGlkYXRlIGNhbGxlZCBvbiBub24tb3BlbiBkZXZpY2UuXG4iKTsKKwkJCXByX2luZm8oIlZGUzogcmV2YWxpZGF0ZSBjYWxsZWQgb24gbm9uLW9wZW4gZGV2aWNlLlxuIik7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQotCQlsb2NrX2ZkYyhkcml2ZSwgMCk7Ci0JCWNmID0gVVRFU1RGKEZEX0RJU0tfQ0hBTkdFRCkgfHwgVVRFU1RGKEZEX1ZFUklGWSk7CisJCWxvY2tfZmRjKGRyaXZlLCBmYWxzZSk7CisJCWNmID0gKHRlc3RfYml0KEZEX0RJU0tfQ0hBTkdFRF9CSVQsICZVRFJTLT5mbGFncykgfHwKKwkJICAgICAgdGVzdF9iaXQoRkRfVkVSSUZZX0JJVCwgJlVEUlMtPmZsYWdzKSk7CiAJCWlmICghKGNmIHx8IHRlc3RfYml0KGRyaXZlLCAmZmFrZV9jaGFuZ2UpIHx8IE5PX0dFT00pKSB7CiAJCQlwcm9jZXNzX2ZkX3JlcXVlc3QoKTsJLyphbHJlYWR5IGRvbmUgYnkgYW5vdGhlciB0aHJlYWQgKi8KIAkJCXJldHVybiAwOwpAQCAtMzg5NCw3ICszODczLDcgQEAKIAkJaWYgKGJ1ZmZlcl9kcml2ZSA9PSBkcml2ZSkKIAkJCWJ1ZmZlcl90cmFjayA9IC0xOwogCQljbGVhcl9iaXQoZHJpdmUsICZmYWtlX2NoYW5nZSk7Ci0JCVVDTEVBUkYoRkRfRElTS19DSEFOR0VEKTsKKwkJY2xlYXJfYml0KEZEX0RJU0tfQ0hBTkdFRF9CSVQsICZVRFJTLT5mbGFncyk7CiAJCWlmIChjZikKIAkJCVVEUlMtPmdlbmVyYXRpb24rKzsKIAkJaWYgKE5PX0dFT00pIHsKQEAgLTM5MDIsNyArMzg4MSw3IEBACiAJCQlyZXMgPSBfX2Zsb3BweV9yZWFkX2Jsb2NrXzAob3BlbmVkX2JkZXZbZHJpdmVdKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChjZikKLQkJCQlwb2xsX2RyaXZlKDAsIEZEX1JBV19ORUVEX0RJU0spOworCQkJCXBvbGxfZHJpdmUoZmFsc2UsIEZEX1JBV19ORUVEX0RJU0spOwogCQkJcHJvY2Vzc19mZF9yZXF1ZXN0KCk7CiAJCX0KIAl9CkBAIC0zOTM0LDIxICszOTEzLDIxIEBACiAJb3V0cHV0X2J5dGUoRkRfRFVNUFJFR1MpOwkvKiA4MjA3MiBhbmQgYmV0dGVyIGtub3cgRFVNUFJFR1MgKi8KIAlpZiAoRkRDUy0+cmVzZXQpCiAJCXJldHVybiBGRENfTk9ORTsKLQlpZiAoKHIgPSByZXN1bHQoKSkgPD0gMHgwMCkKKwlyID0gcmVzdWx0KCk7CisJaWYgKHIgPD0gMHgwMCkKIAkJcmV0dXJuIEZEQ19OT05FOwkvKiBObyBGREMgcHJlc2VudCA/Pz8gKi8KIAlpZiAoKHIgPT0gMSkgJiYgKHJlcGx5X2J1ZmZlclswXSA9PSAweDgwKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJGREMgJWQgaXMgYW4gODI3MkFcbiIsIGZkYyk7CisJCXByX2luZm8oIkZEQyAlZCBpcyBhbiA4MjcyQVxuIiwgZmRjKTsKIAkJcmV0dXJuIEZEQ184MjcyQTsJLyogODI3MmEvNzY1IGRvbid0IGtub3cgRFVNUFJFR1MgKi8KIAl9CiAJaWYgKHIgIT0gMTApIHsKLQkJcHJpbnRrCi0JCSAgICAoIkZEQyAlZCBpbml0OiBEVU1QUkVHUzogdW5leHBlY3RlZCByZXR1cm4gb2YgJWQgYnl0ZXMuXG4iLAotCQkgICAgIGZkYywgcik7CisJCXByX2luZm8oIkZEQyAlZCBpbml0OiBEVU1QUkVHUzogdW5leHBlY3RlZCByZXR1cm4gb2YgJWQgYnl0ZXMuXG4iLAorCQkJZmRjLCByKTsKIAkJcmV0dXJuIEZEQ19VTktOT1dOOwogCX0KIAogCWlmICghZmRjX2NvbmZpZ3VyZSgpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkZEQyAlZCBpcyBhbiA4MjA3MlxuIiwgZmRjKTsKKwkJcHJfaW5mbygiRkRDICVkIGlzIGFuIDgyMDcyXG4iLCBmZGMpOwogCQlyZXR1cm4gRkRDXzgyMDcyOwkvKiA4MjA3MiBkb2Vzbid0IGtub3cgQ09ORklHVVJFICovCiAJfQogCkBAIC0zOTU2LDUyICszOTM1LDUwIEBACiAJaWYgKG5lZWRfbW9yZV9vdXRwdXQoKSA9PSBNT1JFX09VVFBVVCkgewogCQlvdXRwdXRfYnl0ZSgwKTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9JTkZPICJGREMgJWQgaXMgYW4gODIwNzJBXG4iLCBmZGMpOworCQlwcl9pbmZvKCJGREMgJWQgaXMgYW4gODIwNzJBXG4iLCBmZGMpOwogCQlyZXR1cm4gRkRDXzgyMDcyQTsJLyogODIwNzJBIGFzIGZvdW5kIG9uIFNwYXJjcy4gKi8KIAl9CiAKIAlvdXRwdXRfYnl0ZShGRF9VTkxPQ0spOwogCXIgPSByZXN1bHQoKTsKIAlpZiAoKHIgPT0gMSkgJiYgKHJlcGx5X2J1ZmZlclswXSA9PSAweDgwKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJGREMgJWQgaXMgYSBwcmUtMTk5MSA4MjA3N1xuIiwgZmRjKTsKLQkJcmV0dXJuIEZEQ184MjA3N19PUklHOwkvKiBQcmUtMTk5MSA4MjA3NywgZG9lc24ndCBrbm93IAorCQlwcl9pbmZvKCJGREMgJWQgaXMgYSBwcmUtMTk5MSA4MjA3N1xuIiwgZmRjKTsKKwkJcmV0dXJuIEZEQ184MjA3N19PUklHOwkvKiBQcmUtMTk5MSA4MjA3NywgZG9lc24ndCBrbm93CiAJCQkJCSAqIExPQ0svVU5MT0NLICovCiAJfQogCWlmICgociAhPSAxKSB8fCAocmVwbHlfYnVmZmVyWzBdICE9IDB4MDApKSB7Ci0JCXByaW50aygiRkRDICVkIGluaXQ6IFVOTE9DSzogdW5leHBlY3RlZCByZXR1cm4gb2YgJWQgYnl0ZXMuXG4iLAotCQkgICAgICAgZmRjLCByKTsKKwkJcHJfaW5mbygiRkRDICVkIGluaXQ6IFVOTE9DSzogdW5leHBlY3RlZCByZXR1cm4gb2YgJWQgYnl0ZXMuXG4iLAorCQkJZmRjLCByKTsKIAkJcmV0dXJuIEZEQ19VTktOT1dOOwogCX0KIAlvdXRwdXRfYnl0ZShGRF9QQVJUSUQpOwogCXIgPSByZXN1bHQoKTsKIAlpZiAociAhPSAxKSB7Ci0JCXByaW50aygiRkRDICVkIGluaXQ6IFBBUlRJRDogdW5leHBlY3RlZCByZXR1cm4gb2YgJWQgYnl0ZXMuXG4iLAotCQkgICAgICAgZmRjLCByKTsKKwkJcHJfaW5mbygiRkRDICVkIGluaXQ6IFBBUlRJRDogdW5leHBlY3RlZCByZXR1cm4gb2YgJWQgYnl0ZXMuXG4iLAorCQkJZmRjLCByKTsKIAkJcmV0dXJuIEZEQ19VTktOT1dOOwogCX0KIAlpZiAocmVwbHlfYnVmZmVyWzBdID09IDB4ODApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRkRDICVkIGlzIGEgcG9zdC0xOTkxIDgyMDc3XG4iLCBmZGMpOworCQlwcl9pbmZvKCJGREMgJWQgaXMgYSBwb3N0LTE5OTEgODIwNzdcbiIsIGZkYyk7CiAJCXJldHVybiBGRENfODIwNzc7CS8qIFJldmlzZWQgODIwNzdBQSBwYXNzZXMgYWxsIHRoZSB0ZXN0cyAqLwogCX0KIAlzd2l0Y2ggKHJlcGx5X2J1ZmZlclswXSA+PiA1KSB7CiAJY2FzZSAweDA6CiAJCS8qIEVpdGhlciBhIDgyMDc4LTEgb3IgYSA4MjA3OFNMIHJ1bm5pbmcgYXQgNVZvbHQgKi8KLQkJcHJpbnRrKEtFUk5fSU5GTyAiRkRDICVkIGlzIGFuIDgyMDc4LlxuIiwgZmRjKTsKKwkJcHJfaW5mbygiRkRDICVkIGlzIGFuIDgyMDc4LlxuIiwgZmRjKTsKIAkJcmV0dXJuIEZEQ184MjA3ODsKIAljYXNlIDB4MToKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRkRDICVkIGlzIGEgNDRwaW4gODIwNzhcbiIsIGZkYyk7CisJCXByX2luZm8oIkZEQyAlZCBpcyBhIDQ0cGluIDgyMDc4XG4iLCBmZGMpOwogCQlyZXR1cm4gRkRDXzgyMDc4OwogCWNhc2UgMHgyOgotCQlwcmludGsoS0VSTl9JTkZPICJGREMgJWQgaXMgYSBTODIwNzhCXG4iLCBmZGMpOworCQlwcl9pbmZvKCJGREMgJWQgaXMgYSBTODIwNzhCXG4iLCBmZGMpOwogCQlyZXR1cm4gRkRDX1M4MjA3OEI7CiAJY2FzZSAweDM6Ci0JCXByaW50ayhLRVJOX0lORk8gIkZEQyAlZCBpcyBhIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEM4NzMwNlxuIiwKLQkJICAgICAgIGZkYyk7CisJCXByX2luZm8oIkZEQyAlZCBpcyBhIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgUEM4NzMwNlxuIiwgZmRjKTsKIAkJcmV0dXJuIEZEQ184NzMwNjsKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAiRkRDICVkIGluaXQ6IDgyMDc4IHZhcmlhbnQgd2l0aCB1bmtub3duIFBBUlRJRD0lZC5cbiIsCi0JCSAgICAgICBmZGMsIHJlcGx5X2J1ZmZlclswXSA+PiA1KTsKKwkJcHJfaW5mbygiRkRDICVkIGluaXQ6IDgyMDc4IHZhcmlhbnQgd2l0aCB1bmtub3duIFBBUlRJRD0lZC5cbiIsCisJCQlmZGMsIHJlcGx5X2J1ZmZlclswXSA+PiA1KTsKIAkJcmV0dXJuIEZEQ184MjA3OF9VTktOOwogCX0KIH0JCQkJLyogZ2V0X2ZkY192ZXJzaW9uICovCkBAIC00MTEzLDkgKzQwOTAsOSBAQAogCQkJCWVsc2UKIAkJCQkJcGFyYW0gPSBjb25maWdfcGFyYW1zW2ldLmRlZl9wYXJhbTsKIAkJCQlpZiAoY29uZmlnX3BhcmFtc1tpXS5mbikKLQkJCQkJY29uZmlnX3BhcmFtc1tpXS4KLQkJCQkJICAgIGZuKGludHMsIHBhcmFtLAotCQkJCQkgICAgICAgY29uZmlnX3BhcmFtc1tpXS5wYXJhbTIpOworCQkJCQljb25maWdfcGFyYW1zW2ldLmZuKGludHMsIHBhcmFtLAorCQkJCQkJCSAgICBjb25maWdfcGFyYW1zW2ldLgorCQkJCQkJCSAgICBwYXJhbTIpOwogCQkJCWlmIChjb25maWdfcGFyYW1zW2ldLnZhcikgewogCQkJCQlEUFJJTlQoIiVzPSVkXG4iLCBzdHIsIHBhcmFtKTsKIAkJCQkJKmNvbmZpZ19wYXJhbXNbaV0udmFyID0gcGFyYW07CkBAIC00MTI5LDggKzQxMDYsOCBAQAogCiAJCURQUklOVCgiYWxsb3dlZCBvcHRpb25zIGFyZToiKTsKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29uZmlnX3BhcmFtcyk7IGkrKykKLQkJCXByaW50aygiICVzIiwgY29uZmlnX3BhcmFtc1tpXS5uYW1lKTsKLQkJcHJpbnRrKCJcbiIpOworCQkJcHJfY29udCgiICVzIiwgY29uZmlnX3BhcmFtc1tpXS5uYW1lKTsKKwkJcHJfY29udCgiXG4iKTsKIAl9IGVsc2UKIAkJRFBSSU5UKCJib3RjaGVkIGZsb3BweSBvcHRpb25cbiIpOwogCURQUklOVCgiUmVhZCBEb2N1bWVudGF0aW9uL2Jsb2NrZGV2L2Zsb3BweS50eHRcbiIpOwpAQCAtNDE0OCw3ICs0MTI1LDggQEAKIAlkcml2ZSA9IHAtPmlkOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVYXG4iLCBVRFAtPmNtb3MpOwogfQotREVWSUNFX0FUVFIoY21vcyxTX0lSVUdPLGZsb3BweV9jbW9zX3Nob3csTlVMTCk7CisKK0RFVklDRV9BVFRSKGNtb3MsIFNfSVJVR08sIGZsb3BweV9jbW9zX3Nob3csIE5VTEwpOwogCiBzdGF0aWMgdm9pZCBmbG9wcHlfZGV2aWNlX3JlbGVhc2Uoc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtNDE2MCw3ICs0MTM4LDcgQEAKIAogCWZvciAoZmRjID0gMDsgZmRjIDwgTl9GREM7IGZkYysrKQogCQlpZiAoRkRDUy0+YWRkcmVzcyAhPSAtMSkKLQkJCXVzZXJfcmVzZXRfZmRjKC0xLCBGRF9SRVNFVF9BTFdBWVMsIDApOworCQkJdXNlcl9yZXNldF9mZGMoLTEsIEZEX1JFU0VUX0FMV0FZUywgZmFsc2UpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00MTcyLDggKzQxNTAsOCBAQAogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBmbG9wcHlfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gImZsb3BweSIsCi0JCS5wbSA9ICZmbG9wcHlfcG1fb3BzLAorCQkgICAubmFtZSA9ICJmbG9wcHkiLAorCQkgICAucG0gPSAmZmxvcHB5X3BtX29wcywKIAl9LAogfTsKIApAQCAtNDI0NSwxNiArNDIyMywxNiBAQAogCQllbHNlCiAJCQlmbG9wcHlfc2l6ZXNbaV0gPSBNQVhfRElTS19TSVpFIDw8IDE7CiAKLQlyZXNjaGVkdWxlX3RpbWVvdXQoTUFYVElNRU9VVCwgImZsb3BweSBpbml0IiwgTUFYVElNRU9VVCk7CisJcmVzY2hlZHVsZV90aW1lb3V0KE1BWFRJTUVPVVQsICJmbG9wcHkgaW5pdCIpOwogCWNvbmZpZ190eXBlcygpOwogCiAJZm9yIChpID0gMDsgaSA8IE5fRkRDOyBpKyspIHsKIAkJZmRjID0gaTsKLQkJQ0xFQVJTVFJVQ1QoRkRDUyk7CisJCW1lbXNldChGRENTLCAwLCBzaXplb2YoKkZEQ1MpKTsKIAkJRkRDUy0+ZHRyID0gLTE7CiAJCUZEQ1MtPmRvciA9IDB4NDsKICNpZiBkZWZpbmVkKF9fc3BhcmNfXykgfHwgZGVmaW5lZChfX21jNjgwMDBfXykKLQkJLypzcGFyY3Mvc3VuM3ggZG9uJ3QgaGF2ZSBhIERPUiByZXNldCB3aGljaCB3ZSBjYW4gZmFsbCBiYWNrIG9uIHRvICovCisJLypzcGFyY3Mvc3VuM3ggZG9uJ3QgaGF2ZSBhIERPUiByZXNldCB3aGljaCB3ZSBjYW4gZmFsbCBiYWNrIG9uIHRvICovCiAjaWZkZWYgX19tYzY4MDAwX18KIAkJaWYgKE1BQ0hfSVNfU1VOM1gpCiAjZW5kaWYKQEAgLTQyODMsMTEgKzQyNjEsMTEgQEAKIAogCS8qIGluaXRpYWxpc2UgZHJpdmUgc3RhdGUgKi8KIAlmb3IgKGRyaXZlID0gMDsgZHJpdmUgPCBOX0RSSVZFOyBkcml2ZSsrKSB7Ci0JCUNMRUFSU1RSVUNUKFVEUlMpOwotCQlDTEVBUlNUUlVDVChVRFJXRSk7Ci0JCVVTRVRGKEZEX0RJU0tfTkVXQ0hBTkdFKTsKLQkJVVNFVEYoRkRfRElTS19DSEFOR0VEKTsKLQkJVVNFVEYoRkRfVkVSSUZZKTsKKwkJbWVtc2V0KFVEUlMsIDAsIHNpemVvZigqVURSUykpOworCQltZW1zZXQoVURSV0UsIDAsIHNpemVvZigqVURSV0UpKTsKKwkJc2V0X2JpdChGRF9ESVNLX05FV0NIQU5HRV9CSVQsICZVRFJTLT5mbGFncyk7CisJCXNldF9iaXQoRkRfRElTS19DSEFOR0VEX0JJVCwgJlVEUlMtPmZsYWdzKTsKKwkJc2V0X2JpdChGRF9WRVJJRllfQklULCAmVURSUy0+ZmxhZ3MpOwogCQlVRFJTLT5mZF9kZXZpY2UgPSAtMTsKIAkJZmxvcHB5X3RyYWNrX2J1ZmZlciA9IE5VTEw7CiAJCW1heF9idWZmZXJfc2VjdG9ycyA9IDA7CkBAIC00MzA3LDcgKzQyODUsNyBAQAogCQlpZiAoRkRDUy0+YWRkcmVzcyA9PSAtMSkKIAkJCWNvbnRpbnVlOwogCQlGRENTLT5yYXdjbWQgPSAyOwotCQlpZiAodXNlcl9yZXNldF9mZGMoLTEsIEZEX1JFU0VUX0FMV0FZUywgMCkpIHsKKwkJaWYgKHVzZXJfcmVzZXRfZmRjKC0xLCBGRF9SRVNFVF9BTFdBWVMsIGZhbHNlKSkgewogCQkJLyogZnJlZSBpb3BvcnRzIHJlc2VydmVkIGJ5IGZsb3BweV9ncmFiX2lycV9hbmRfZG1hKCkgKi8KIAkJCWZsb3BweV9yZWxlYXNlX3JlZ2lvbnMoZmRjKTsKIAkJCUZEQ1MtPmFkZHJlc3MgPSAtMTsKQEAgLTQzMzAsMTIgKzQzMDgsMTIgQEAKIAkJICogcHJvcGVybHksIHNvIGZvcmNlIGEgcmVzZXQgZm9yIHRoZSBzdGFuZGFyZCBGREMgY2xvbmVzLAogCQkgKiB0byBhdm9pZCBpbnRlcnJ1cHQgZ2FyYmFnZS4KIAkJICovCi0JCXVzZXJfcmVzZXRfZmRjKC0xLCBGRF9SRVNFVF9BTFdBWVMsIDApOworCQl1c2VyX3Jlc2V0X2ZkYygtMSwgRkRfUkVTRVRfQUxXQVlTLCBmYWxzZSk7CiAJfQogCWZkYyA9IDA7CiAJZGVsX3RpbWVyKCZmZF90aW1lb3V0KTsKIAljdXJyZW50X2RyaXZlID0gMDsKLQlpbml0aWFsaXNpbmcgPSAwOworCWluaXRpYWxpemVkID0gdHJ1ZTsKIAlpZiAoaGF2ZV9ub19mZGMpIHsKIAkJRFBSSU5UKCJubyBmbG9wcHkgY29udHJvbGxlcnMgZm91bmRcbiIpOwogCQllcnIgPSBoYXZlX25vX2ZkYzsKQEAgLTQzNTYsNyArNDMzNCw4IEBACiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF9mbHVzaF93b3JrOwogCi0JCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmZmxvcHB5X2RldmljZVtkcml2ZV0uZGV2LCZkZXZfYXR0cl9jbW9zKTsKKwkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZmbG9wcHlfZGV2aWNlW2RyaXZlXS5kZXYsCisJCQkJCSAmZGV2X2F0dHJfY21vcyk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIG91dF91bnJlZ19wbGF0Zm9ybV9kZXY7CiAKQEAgLTQ0MjAsOCArNDM5OSwxMCBAQAogCWNvbnN0IHN0cnVjdCBpb19yZWdpb24gKnA7CiAKIAlmb3IgKHAgPSBpb19yZWdpb25zOyBwIDwgQVJSQVlfRU5EKGlvX3JlZ2lvbnMpOyBwKyspIHsKLQkJaWYgKCFyZXF1ZXN0X3JlZ2lvbihGRENTLT5hZGRyZXNzICsgcC0+b2Zmc2V0LCBwLT5zaXplLCAiZmxvcHB5IikpIHsKLQkJCURQUklOVCgiRmxvcHB5IGlvLXBvcnQgMHglMDRseCBpbiB1c2VcbiIsIEZEQ1MtPmFkZHJlc3MgKyBwLT5vZmZzZXQpOworCQlpZiAoIXJlcXVlc3RfcmVnaW9uKEZEQ1MtPmFkZHJlc3MgKyBwLT5vZmZzZXQsCisJCQkJICAgIHAtPnNpemUsICJmbG9wcHkiKSkgeworCQkJRFBSSU5UKCJGbG9wcHkgaW8tcG9ydCAweCUwNGx4IGluIHVzZVxuIiwKKwkJCSAgICAgICBGRENTLT5hZGRyZXNzICsgcC0+b2Zmc2V0KTsKIAkJCWZsb3BweV9yZWxlYXNlX2FsbG9jYXRlZF9yZWdpb25zKGZkYywgcCk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CkBAIC00NTEyLDExICs0NDkzLDkgQEAKIHN0YXRpYyB2b2lkIGZsb3BweV9yZWxlYXNlX2lycV9hbmRfZG1hKHZvaWQpCiB7CiAJaW50IG9sZF9mZGM7Ci0jaWZkZWYgRkxPUFBZX1NBTklUWV9DSEVDSwogI2lmbmRlZiBfX3NwYXJjX18KIAlpbnQgZHJpdmU7CiAjZW5kaWYKLSNlbmRpZgogCWxvbmcgdG1wc2l6ZTsKIAl1bnNpZ25lZCBsb25nIHRtcGFkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTQ1NDcsMjAgKzQ1MjYsMTggQEAKIAkJYnVmZmVyX21pbiA9IGJ1ZmZlcl9tYXggPSAtMTsKIAkJZmRfZG1hX21lbV9mcmVlKHRtcGFkZHIsIHRtcHNpemUpOwogCX0KLSNpZmRlZiBGTE9QUFlfU0FOSVRZX0NIRUNLCiAjaWZuZGVmIF9fc3BhcmNfXwogCWZvciAoZHJpdmUgPSAwOyBkcml2ZSA8IE5fRkRDICogNDsgZHJpdmUrKykKIAkJaWYgKHRpbWVyX3BlbmRpbmcobW90b3Jfb2ZmX3RpbWVyICsgZHJpdmUpKQotCQkJcHJpbnRrKCJtb3RvciBvZmYgdGltZXIgJWQgc3RpbGwgYWN0aXZlXG4iLCBkcml2ZSk7CisJCQlwcl9pbmZvKCJtb3RvciBvZmYgdGltZXIgJWQgc3RpbGwgYWN0aXZlXG4iLCBkcml2ZSk7CiAjZW5kaWYKIAogCWlmICh0aW1lcl9wZW5kaW5nKCZmZF90aW1lb3V0KSkKLQkJcHJpbnRrKCJmbG9wcHkgdGltZXIgc3RpbGwgYWN0aXZlOiVzXG4iLCB0aW1lb3V0X21lc3NhZ2UpOworCQlwcl9pbmZvKCJmbG9wcHkgdGltZXIgc3RpbGwgYWN0aXZlOiVzXG4iLCB0aW1lb3V0X21lc3NhZ2UpOwogCWlmICh0aW1lcl9wZW5kaW5nKCZmZF90aW1lcikpCi0JCXByaW50aygiYXV4aWxpYXJ5IGZsb3BweSB0aW1lciBzdGlsbCBhY3RpdmVcbiIpOworCQlwcl9pbmZvKCJhdXhpbGlhcnkgZmxvcHB5IHRpbWVyIHN0aWxsIGFjdGl2ZVxuIik7CiAJaWYgKHdvcmtfcGVuZGluZygmZmxvcHB5X3dvcmspKQotCQlwcmludGsoIndvcmsgc3RpbGwgcGVuZGluZ1xuIik7Ci0jZW5kaWYKKwkJcHJfaW5mbygid29yayBzdGlsbCBwZW5kaW5nXG4iKTsKIAlvbGRfZmRjID0gZmRjOwogCWZvciAoZmRjID0gMDsgZmRjIDwgTl9GREM7IGZkYysrKQogCQlpZiAoRkRDUy0+YWRkcmVzcyAhPSAtMSkKQEAgLTQ1NzcsNyArNDU1NCw5IEBACiAJY2hhciAqcHRyOwogCiAJd2hpbGUgKCpjZmcpIHsKLQkJZm9yIChwdHIgPSBjZmc7ICpjZmcgJiYgKmNmZyAhPSAnICcgJiYgKmNmZyAhPSAnXHQnOyBjZmcrKykgOworCQlwdHIgPSBjZmc7CisJCXdoaWxlICgqY2ZnICYmICpjZmcgIT0gJyAnICYmICpjZmcgIT0gJ1x0JykKKwkJCWNmZysrOwogCQlpZiAoKmNmZykgewogCQkJKmNmZyA9ICdcMCc7CiAJCQljZmcrKzsKQEAgLTQ2MjUsNiArNDYwNCw3IEBACiAJLyogZWplY3QgZGlzaywgaWYgYW55ICovCiAJZmRfZWplY3QoMCk7CiB9CisKIG1vZHVsZV9leGl0KGZsb3BweV9tb2R1bGVfZXhpdCk7CiAKIG1vZHVsZV9wYXJhbShmbG9wcHksIGNoYXJwLCAwKTsKQEAgLTQ2MzYsOSArNDYxNiwxMCBAQAogCiAvKiBUaGlzIGRvZXNuJ3QgYWN0dWFsbHkgZ2V0IHVzZWQgb3RoZXIgdGhhbiBmb3IgbW9kdWxlIGluZm9ybWF0aW9uICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgZmxvcHB5X3BucGlkc1tdID0gewotCXsgIlBOUDA3MDAiLCAwIH0sCi0JeyB9CisJeyJQTlAwNzAwIiwgMH0sCisJe30KIH07CisKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocG5wLCBmbG9wcHlfcG5waWRzKTsKIAogI2Vsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svb3NkYmxrLmMgYi9kcml2ZXJzL2Jsb2NrL29zZGJsay5jCmluZGV4IGE4MDhiMTUuLmViMjA5MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svb3NkYmxrLmMKKysrIGIvZHJpdmVycy9ibG9jay9vc2RibGsuYwpAQCAtNDc2LDcgKzQ3Niw5IEBACiAJa2ZyZWUoY2xzKTsKIH0KIAotc3RhdGljIHNzaXplX3QgY2xhc3Nfb3NkYmxrX2xpc3Qoc3RydWN0IGNsYXNzICpjLCBjaGFyICpkYXRhKQorc3RhdGljIHNzaXplX3QgY2xhc3Nfb3NkYmxrX2xpc3Qoc3RydWN0IGNsYXNzICpjLAorCQkJCXN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqZGF0YSkKIHsKIAlpbnQgbiA9IDA7CiAJc3RydWN0IGxpc3RfaGVhZCAqdG1wOwpAQCAtNTAwLDcgKzUwMiw5IEBACiAJcmV0dXJuIG47CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGNsYXNzX29zZGJsa19hZGQoc3RydWN0IGNsYXNzICpjLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IGNsYXNzX29zZGJsa19hZGQoc3RydWN0IGNsYXNzICpjLAorCQkJCXN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IG9zZGJsa19kZXZpY2UgKm9zZGV2OwogCXNzaXplX3QgcmM7CkBAIC01OTIsNyArNTk2LDkgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGNsYXNzX29zZGJsa19yZW1vdmUoc3RydWN0IGNsYXNzICpjLCBjb25zdCBjaGFyICpidWYsCitzdGF0aWMgc3NpemVfdCBjbGFzc19vc2RibGtfcmVtb3ZlKHN0cnVjdCBjbGFzcyAqYywKKwkJCQkJc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY29uc3QgY2hhciAqYnVmLAogCQkJCQlzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IG9zZGJsa19kZXZpY2UgKm9zZGV2ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jIGIvZHJpdmVycy9ibG9jay9wa3RjZHZkLmMKaW5kZXggYjcyOTM1YjguLjM5Yzg1MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCkBAIC0yODQsNyArMjg0LDcgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBrb2JqX3BrdF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBrb2JqX3BrdF9vcHMgPSB7CiAJLnNob3cgPSBrb2JqX3BrdF9zaG93LAogCS5zdG9yZSA9IGtvYmpfcGt0X3N0b3JlCiB9OwpAQCAtMzM3LDcgKzMzNyw5IEBACiB7CiAJa2ZyZWUoY2xzKTsKIH0KLXN0YXRpYyBzc2l6ZV90IGNsYXNzX3BrdGNkdmRfc2hvd19tYXAoc3RydWN0IGNsYXNzICpjLCBjaGFyICpkYXRhKQorc3RhdGljIHNzaXplX3QgY2xhc3NfcGt0Y2R2ZF9zaG93X21hcChzdHJ1Y3QgY2xhc3MgKmMsCisJCQkJCXN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNoYXIgKmRhdGEpCiB7CiAJaW50IG4gPSAwOwogCWludCBpZHg7CkBAIC0zNTYsNyArMzU4LDkgQEAKIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIHNzaXplX3QgY2xhc3NfcGt0Y2R2ZF9zdG9yZV9hZGQoc3RydWN0IGNsYXNzICpjLCBjb25zdCBjaGFyICpidWYsCitzdGF0aWMgc3NpemVfdCBjbGFzc19wa3RjZHZkX3N0b3JlX2FkZChzdHJ1Y3QgY2xhc3MgKmMsCisJCQkJCXN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkJCWNvbnN0IGNoYXIgKmJ1ZiwKIAkJCQkJc2l6ZV90IGNvdW50KQogewogCXVuc2lnbmVkIGludCBtYWpvciwgbWlub3I7CkBAIC0zNzYsNyArMzgwLDkgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIHNzaXplX3QgY2xhc3NfcGt0Y2R2ZF9zdG9yZV9yZW1vdmUoc3RydWN0IGNsYXNzICpjLCBjb25zdCBjaGFyICpidWYsCitzdGF0aWMgc3NpemVfdCBjbGFzc19wa3RjZHZkX3N0b3JlX3JlbW92ZShzdHJ1Y3QgY2xhc3MgKmMsCisJCQkJCSAgc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICBjb25zdCBjaGFyICpidWYsCiAJCQkJCXNpemVfdCBjb3VudCkKIHsKIAl1bnNpZ25lZCBpbnQgbWFqb3IsIG1pbm9yOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYXRoM2suYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2F0aDNrLmMKaW5kZXggYWRkOTQ4NS4uMTI4Y2FlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYXRoM2suYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9hdGgzay5jCkBAIC0xNDMsNiArMTQzLDggQEAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRhdGEpOwogCWlmIChhdGgza19sb2FkX2Zpcm13YXJlKGRhdGEsIGRhdGEtPmZ3X2RhdGEsIGRhdGEtPmZ3X3NpemUpKSB7CiAJCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7CisJCWtmcmVlKGRhdGEtPmZ3X2RhdGEpOworCQlrZnJlZShkYXRhKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9iY20yMDN4LmMgYi9kcml2ZXJzL2JsdWV0b290aC9iY20yMDN4LmMKaW5kZXggZWFmZDRhZi4uYjBjODRjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYmNtMjAzeC5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JjbTIwM3guYwpAQCAtMzksNyArMzksNyBAQAogCiAjZGVmaW5lIFZFUlNJT04gIjEuMiIKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGJjbTIwM3hfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBiY20yMDN4X3RhYmxlW10gPSB7CiAJLyogQnJvYWRjb20gQmx1dG9uaXVtIChCQ00yMDMzKSAqLwogCXsgVVNCX0RFVklDRSgweDBhNWMsIDB4MjAzMykgfSwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYmZ1c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2JmdXNiLmMKaW5kZXggMmEwMDcwNy4uMDA1OTE5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYmZ1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9iZnVzYi5jCkBAIC03MDMsNyArNzAzLDcgQEAKIAogCWRhdGEtPmhkZXYgPSBoZGV2OwogCi0JaGRldi0+dHlwZSA9IEhDSV9VU0I7CisJaGRldi0+YnVzID0gSENJX1VTQjsKIAloZGV2LT5kcml2ZXJfZGF0YSA9IGRhdGE7CiAJU0VUX0hDSURFVl9ERVYoaGRldiwgJmludGYtPmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JsdWVjYXJkX2NzLmMgYi9kcml2ZXJzL2JsdWV0b290aC9ibHVlY2FyZF9jcy5jCmluZGV4IGMyY2Y4MTEuLmQ5YmY4N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JsdWVjYXJkX2NzLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYmx1ZWNhcmRfY3MuYwpAQCAtNzM2LDcgKzczNiw3IEBACiAKIAlpbmZvLT5oZGV2ID0gaGRldjsKIAotCWhkZXYtPnR5cGUgPSBIQ0lfUENDQVJEOworCWhkZXYtPmJ1cyA9IEhDSV9QQ0NBUkQ7CiAJaGRldi0+ZHJpdmVyX2RhdGEgPSBpbmZvOwogCVNFVF9IQ0lERVZfREVWKGhkZXYsICZpbmZvLT5wX2Rldi0+ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnBhMTB4LmMgYi9kcml2ZXJzL2JsdWV0b290aC9icGExMHguYwppbmRleCBjMTE1Mjg1Li5kOTQ1Y2QxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9icGExMHguYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9icGExMHguYwpAQCAtNDY5LDcgKzQ2OSw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCWhkZXYtPnR5cGUgPSBIQ0lfVVNCOworCWhkZXYtPmJ1cyA9IEhDSV9VU0I7CiAJaGRldi0+ZHJpdmVyX2RhdGEgPSBkYXRhOwogCiAJZGF0YS0+aGRldiA9IGhkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idDNjX2NzLmMKaW5kZXggOWY1OTI2YS4uMDI3Y2I4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnQzY19jcy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0M2NfY3MuYwpAQCAtNTgyLDcgKzU4Miw3IEBACiAKIAlpbmZvLT5oZGV2ID0gaGRldjsKIAotCWhkZXYtPnR5cGUgPSBIQ0lfUENDQVJEOworCWhkZXYtPmJ1cyA9IEhDSV9QQ0NBUkQ7CiAJaGRldi0+ZHJpdmVyX2RhdGEgPSBpbmZvOwogCVNFVF9IQ0lERVZfREVWKGhkZXYsICZpbmZvLT5wX2Rldi0+ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX2RlYnVnZnMuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9kZWJ1Z2ZzLmMKaW5kZXggZDQzYjVjYi4uMzEyNmEzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX2RlYnVnZnMuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfZGVidWdmcy5jCkBAIC0yNiw3ICsyNiw4IEBACiAjaW5jbHVkZSAiYnRtcnZsX2Rydi5oIgogCiBzdHJ1Y3QgYnRtcnZsX2RlYnVnZnNfZGF0YSB7Ci0Jc3RydWN0IGRlbnRyeSAqcm9vdF9kaXIsICpjb25maWdfZGlyLCAqc3RhdHVzX2RpcjsKKwlzdHJ1Y3QgZGVudHJ5ICpjb25maWdfZGlyOworCXN0cnVjdCBkZW50cnkgKnN0YXR1c19kaXI7CiAKIAkvKiBjb25maWcgKi8KIAlzdHJ1Y3QgZGVudHJ5ICpwc21vZGU7CkBAIC0zNjMsNiArMzY0LDkgQEAKIAlzdHJ1Y3QgYnRtcnZsX3ByaXZhdGUgKnByaXYgPSBoZGV2LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgYnRtcnZsX2RlYnVnZnNfZGF0YSAqZGJnOwogCisJaWYgKCFoZGV2LT5kZWJ1Z2ZzKQorCQlyZXR1cm47CisKIAlkYmcgPSBremFsbG9jKHNpemVvZigqZGJnKSwgR0ZQX0tFUk5FTCk7CiAJcHJpdi0+ZGVidWdmc19kYXRhID0gZGJnOwogCkBAIC0zNzEsOSArMzc1LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWRiZy0+cm9vdF9kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImJ0bXJ2bCIsIE5VTEwpOwotCi0JZGJnLT5jb25maWdfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJjb25maWciLCBkYmctPnJvb3RfZGlyKTsKKwlkYmctPmNvbmZpZ19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImNvbmZpZyIsIGhkZXYtPmRlYnVnZnMpOwogCiAJZGJnLT5wc21vZGUgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJwc21vZGUiLCAwNjQ0LCBkYmctPmNvbmZpZ19kaXIsCiAJCQkJaGRldi0+ZHJpdmVyX2RhdGEsICZidG1ydmxfcHNtb2RlX2ZvcHMpOwpAQCAtMzg4LDcgKzM5MCw3IEBACiAJZGJnLT5oc2NmZ2NtZCA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImhzY2ZnY21kIiwgMDY0NCwgZGJnLT5jb25maWdfZGlyLAogCQkJCWhkZXYtPmRyaXZlcl9kYXRhLCAmYnRtcnZsX2hzY2ZnY21kX2ZvcHMpOwogCi0JZGJnLT5zdGF0dXNfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJzdGF0dXMiLCBkYmctPnJvb3RfZGlyKTsKKwlkYmctPnN0YXR1c19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInN0YXR1cyIsIGhkZXYtPmRlYnVnZnMpOwogCWRiZy0+Y3VycHNtb2RlID0gZGVidWdmc19jcmVhdGVfZmlsZSgiY3VycHNtb2RlIiwgMDQ0NCwKIAkJCQkJCWRiZy0+c3RhdHVzX2RpciwKIAkJCQkJCWhkZXYtPmRyaXZlcl9kYXRhLApAQCAtNDI1LDcgKzQyNyw1IEBACiAJZGVidWdmc19yZW1vdmUoZGJnLT50eGRubGRyZWFkeSk7CiAJZGVidWdmc19yZW1vdmUoZGJnLT5zdGF0dXNfZGlyKTsKIAotCWRlYnVnZnNfcmVtb3ZlKGRiZy0+cm9vdF9kaXIpOwotCiAJa2ZyZWUoZGJnKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9tYWluLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfbWFpbi5jCmluZGV4IGY5Nzc3MWMuLjUzYTQzYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9tYWluLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX21haW4uYwpAQCAtNTYzLDcgKzU2Myw3IEBACiAKIAlwcml2LT5idG1ydmxfZGV2LnR4X2RubGRfcmR5ID0gdHJ1ZTsKIAotCWhkZXYtPnR5cGUgPSBIQ0lfU0RJTzsKKwloZGV2LT5idXMgPSBIQ0lfU0RJTzsKIAloZGV2LT5vcGVuID0gYnRtcnZsX29wZW47CiAJaGRldi0+Y2xvc2UgPSBidG1ydmxfY2xvc2U7CiAJaGRldi0+Zmx1c2ggPSBidG1ydmxfZmx1c2g7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX3NkaW8uYwppbmRleCA1N2Q5NjViLi45NGYxZjU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmMKQEAgLTk3Niw3ICs5NzYsNyBAQAogCS5yZW1vdmUJCT0gYnRtcnZsX3NkaW9fcmVtb3ZlLAogfTsKIAotc3RhdGljIGludCBidG1ydmxfc2Rpb19pbml0X21vZHVsZSh2b2lkKQorc3RhdGljIGludCBfX2luaXQgYnRtcnZsX3NkaW9faW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpZiAoc2Rpb19yZWdpc3Rlcl9kcml2ZXIoJmJ0X21ydmxfc2RpbykgIT0gMCkgewogCQlCVF9FUlIoIlNESU8gRHJpdmVyIFJlZ2lzdHJhdGlvbiBGYWlsZWQiKTsKQEAgLTk4OSw3ICs5ODksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBidG1ydmxfc2Rpb19leGl0X21vZHVsZSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGJ0bXJ2bF9zZGlvX2V4aXRfbW9kdWxlKHZvaWQpCiB7CiAJLyogU2V0IHRoZSBmbGFnIGFzIHVzZXIgaXMgcmVtb3ZpbmcgdGhpcyBtb2R1bGUuICovCiAJdXNlcl9ybW1vZCA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9idHNkaW8uYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0c2Rpby5jCmluZGV4IDdlMjk4MjcuLjc2ZTUxMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2J0c2Rpby5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0c2Rpby5jCkBAIC0zMjYsNyArMzI2LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaGRldi0+dHlwZSA9IEhDSV9TRElPOworCWhkZXYtPmJ1cyA9IEhDSV9TRElPOwogCWhkZXYtPmRyaXZlcl9kYXRhID0gZGF0YTsKIAogCWRhdGEtPmhkZXYgPSBoZGV2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnR1YXJ0X2NzLmMgYi9kcml2ZXJzL2JsdWV0b290aC9idHVhcnRfY3MuYwppbmRleCA5MWM1MjMwLi42MGMwOTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9idHVhcnRfY3MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHVhcnRfY3MuYwpAQCAtNTAwLDcgKzUwMCw3IEBACiAKIAlpbmZvLT5oZGV2ID0gaGRldjsKIAotCWhkZXYtPnR5cGUgPSBIQ0lfUENDQVJEOworCWhkZXYtPmJ1cyA9IEhDSV9QQ0NBUkQ7CiAJaGRldi0+ZHJpdmVyX2RhdGEgPSBpbmZvOwogCVNFVF9IQ0lERVZfREVWKGhkZXYsICZpbmZvLT5wX2Rldi0+ZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmMKaW5kZXggYTY5OWYwOS4uNWQ5Y2M1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5jCkBAIC05MzksNyArOTM5LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaGRldi0+dHlwZSA9IEhDSV9VU0I7CisJaGRldi0+YnVzID0gSENJX1VTQjsKIAloZGV2LT5kcml2ZXJfZGF0YSA9IGRhdGE7CiAKIAlkYXRhLT5oZGV2ID0gaGRldjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2R0bDFfY3MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2R0bDFfY3MuYwppbmRleCA2OTc1OTE5Li4xNzc4ODMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9kdGwxX2NzLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvZHRsMV9jcy5jCkBAIC00ODUsNyArNDg1LDcgQEAKIAogCWluZm8tPmhkZXYgPSBoZGV2OwogCi0JaGRldi0+dHlwZSA9IEhDSV9QQ0NBUkQ7CisJaGRldi0+YnVzID0gSENJX1BDQ0FSRDsKIAloZGV2LT5kcml2ZXJfZGF0YSA9IGluZm87CiAJU0VUX0hDSURFVl9ERVYoaGRldiwgJmluZm8tPnBfZGV2LT5kZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jCmluZGV4IGFhMDkxOTMuLjc2YTFhYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jCisrKyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV9sZGlzYy5jCkBAIC0zODMsNyArMzgzLDcgQEAKIAogCWh1LT5oZGV2ID0gaGRldjsKIAotCWhkZXYtPnR5cGUgPSBIQ0lfVUFSVDsKKwloZGV2LT5idXMgPSBIQ0lfVUFSVDsKIAloZGV2LT5kcml2ZXJfZGF0YSA9IGh1OwogCiAJaGRldi0+b3BlbiAgPSBoY2lfdWFydF9vcGVuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX3ZoY2kuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV92aGNpLmMKaW5kZXggNzU5NTI3NDEuLmJiMGFlZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV92aGNpLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX3ZoY2kuYwpAQCAtMjM2LDcgKzIzNiw3IEBACiAKIAlkYXRhLT5oZGV2ID0gaGRldjsKIAotCWhkZXYtPnR5cGUgPSBIQ0lfVklSVFVBTDsKKwloZGV2LT5idXMgPSBIQ0lfVklSVFVBTDsKIAloZGV2LT5kcml2ZXJfZGF0YSA9IGRhdGE7CiAKIAloZGV2LT5vcGVuICAgICA9IHZoY2lfb3Blbl9kZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvQ2hhbmdlTG9nIGIvZHJpdmVycy9jaGFyL0NoYW5nZUxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTZiOGEyZS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvQ2hhbmdlTG9nCisrKyAvZGV2L251bGwKQEAgLTEsNzc1ICswLDAgQEAKLTIwMDEtMDgtMTEgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBzZXJpYWwuYyAoZ2V0X3BjaV9wb3J0KTogRGVhbCB3aXRoIGF3a3dhcmQgVGl0YW4gY2FyZHMuCi0KLTE5OTgtMDgtMjYgIFRoZW9kb3JlIFRzJ28gIDx0eXRzb0Byc3RzLTExLm1pdC5lZHU+Ci0KLQkqIHNlcmlhbC5jIChyc19vcGVuKTogQ29ycmVjdGx5IGRlY3JlbWVudCB0aGUgbW9kdWxlIGluLXVzZSBjb3VudAotCQlvbiBlcnJvcnMuCi0KLVRodSBGZWIgMTkgMTQ6MjQ6MDggMTk5OCAgVGhlb2RvcmUgVHMnbyAgPHR5dHNvQHJzdHMtMTEubWl0LmVkdT4KLQotCSogdHR5X2lvLmMgKHR0eV9uYW1lKTogUmVtb3ZlIHRoZSBub24tcmVlbnRyYW50IChhbmQgbm9uLVNNUCBzYWZlKQotCQl2ZXJzaW9uIG9mIHR0eV9uYW1lLCBhbmQgcmVuYW1lIHRoZSByZWVudHJhbnQgX3R0eV9uYW1lCi0JCWZ1bmN0aW9uIHRvIGJlIHR0eV9uYW1lLgotCQkodHR5X29wZW4pOiBBZGQgYSB3YXJuaW5nIG1lc3NhZ2Ugc3RhdGluZyBjYWxsb3V0IGRldmljZXMKLQkJYXJlIGRlcHJlY2F0ZWQuCi0KLU1vbiBEZWMgIDEgMDg6MjQ6MTUgMTk5NyAgVGhlb2RvcmUgVHMnbyAgPHR5dHNvQHJzdHMtMTEubWl0LmVkdT4KLQotCSogdHR5X2lvLmMgKHR0eV9nZXRfYmF1ZF9yYXRlKTogUHJpbnQgYSB3YXJuaW5nIHN5c2xvZyBpZiB0aGUKLQkJdHR5LT5hbHRfc3BlZWQga2x1ZGdlIGlzIHVzZWQ7IHRoaXMgbWVhbnMgdGhlIHN5c3RlbSBpcwotCQl1c2luZyB0aGUgZGVwcmVjYXRlZCBTUERfSEkgaW9jdGxzLgotCi1Nb24gTm92IDI0IDEwOjM3OjQ5IDE5OTcgIFRoZW9kb3JlIFRzJ28gIDx0eXRzb0Byc3RzLTExLm1pdC5lZHU+Ci0KLQkqIHNlcmlhbC5jLCBlc3AuYywgcm9ja2V0LmM6IENoYW5nZSBkcml2ZXJzIHRvIHRha2UgYWR2YW50YWdlIG9mCi0JIAl0dHlfZ2V0X2JhdWRfcmF0ZSgpLgotCQotCSogdHR5X2lvLmMgKHR0eV9nZXRfYmF1ZF9yYXRlKTogTmV3IGZ1bmN0aW9uIHdoaWNoIGNvbXB1dGVzIHRoZQotCQljb3JyZWN0IGJhdWQgcmF0ZSBmb3IgdGhlIHR0eS4gIE1vcmUgZmFjdG9yaW5nIG91dCBvZgotCQljb21tb24gY29kZSBvdXQgb2YgdGhlIHNlcmlhbCBkcml2ZXIgdG8gdGhlIGhpZ2gtbGV2ZWwgdHR5Ci0JCWZ1bmN0aW9ucy4uLi4KLQotU2F0IE5vdiAyMiAwNzo1MzozNiAxOTk3ICBUaGVvZG9yZSBUcydvICA8dHl0c29AcnN0cy0xMS5taXQuZWR1PgotCi0JKiBzZXJpYWwuYywgZXNwLmMsIHJvY2tldC5jOiBBZGQgdHR5LT5kcml2ZXIuYnJlYWsoKSByb3V0aW5lLCBhbmQKLSAJCWFsbG93IGhpZ2gtbGV2ZWwgdHR5IGNvZGUgdG8gaGFuZGxlIHRoZSBicmVhayBhbmQgc29mdAotIAkJY2FycmllciBpb2N0bHMuCi0JCi0JKiB0dHlfaW9jdGwuYyAobl90dHlfaW9jdGwpOiBTdXBwb3J0IFRJT0NHU09GVENBUiBhbmQKLSAJCVRJT0NTU09GVENBUiwgc28gdGhhdCBkZXZpY2UgZHJpdmVycyBkb24ndCBoYXZlIHRvIHN1cHBvcnQKLSAJCWl0LgotCi0JKiBzZXJpYWwuYyAoYXV0b2NvbmZpZyk6IENoYW5nZSAxNjc1MCB0ZXN0IHRvIGhvcGVmdWxseSBlbGltaW5hdGUKLQkJZmFsc2UgcmVzdWx0cyBieSBwZW9wbGUgd2l0aCBzdHJhbmdlIDE2NTUwQXMgYmVpbmcKLQkJZGV0ZWN0ZWQgYXMgMTY3NTBzLiAgSG9wZWZ1bGx5IDE2NzUwcyB3aWxsIHN0aWxsIGJlCi0JCWRldGVjdGVkIGFzIDE2NzUwLCBhbmQgb3RoZXIgd2VpcmQgVUFSVHMgd29uJ3QgZ2V0IHBvb3JseQotCQlhdXRvZGV0ZWN0ZWQuICBJZiB0aGlzIGRvZXNuJ3Qgd29yaywgSSdsbCBoYXZlIHRvIGRpc2FibGUKLQkJdGhlIGF1dG8gaWRlbnRpZmljYXRpb24gZm9yIHRoZSAxNjc1MC4KLQotCSogdHR5X2lvLmMgKHR0eV9oYW5ndXApOiBOb3cgYWN0dWFsbHkgZG8gdGhlIHR0eSBoYW5ndXAKLQkJcHJvY2Vzc2luZyBkdXJpbmcgdGhlIHRpbWVyIHByb2Nlc3NpbmcsIGFuZCBkaXNhYmxlCi0JCWludGVycnVwdHMgd2hpbGUgZG9pbmcgdGhlIGhhbmd1cCBwcm9jZXNzaW5nLiAgVGhpcyBhdm9pZHMKLQkJc2V2ZXJhbCBuYXN0eSByYWNlIGNvbmRpdGlvbnMgd2hpY2ggaGFwcGVuZWQgd2hlbiB0aGUKLQkJaGFuZ3VwIHByb2Nlc3Npbmcgd2FzIGRvbmUgYXN5bmNocm9ub3VzbHkuCi0JCSh0dHlfaW9jdGwpOiBEbyBicmVhayBoYW5kbGluZyBpbiB0aGUgdHR5IGRyaXZlciBpZgotCQlkcml2ZXIncyBicmVhayBmdW5jdGlvbiBpcyBzdXBwb3J0ZWQuICAKLQkJKHR0eV9mbGlwX2J1ZmZlcl9wdXNoKTogTmV3IGV4cG9ydGVkIGZ1bmN0aW9uIHdoaWNoIHNob3VsZAotCQliZSB1c2VkIGJ5IGRyaXZlcnMgdG8gcHVzaCBjaGFyYWN0ZXJzIGluIHRoZSBmbGlwIGJ1ZmZlcgotCQl0byB0aGUgdHR5IGhhbmRsZXIuICBUaGlzIG1heSBlaXRoZXIgYmUgZG9uZSB1c2luZyBhIHRhc2sKLQkJcXVldWUgZnVuY3Rpb24gZm9yIGJldHRlciBDUFUgZWZmaWNpZW5jeSwgb3IgZGlyZWN0bHkgZm9yCi0JCWxvdyBsYXRlbmN5IG9wZXJhdGlvbi4KLQotCSogc2VyaWFsLmMgKHJzX3NldF90ZXJtaW9zKTogRml4IGJ1ZyByc19zZXRfdGVybWlvcyB3aGVuCi0JCXRyYW5zaXRpb25pbmcgYXdheSBmcm9tIEIwLCBzdWJtaXR0ZWQgYnkgU3RhbmlzbGF2Ci0JCVZvcm9ueWkuIAotCi1UaHUgSnVuIDE5IDIwOjA1OjU4IDE5OTcgIFRoZW9kb3JlIFRzJ28gIDx0eXRzb0Byc3RzLTExLm1pdC5lZHU+Ci0KLQkqIHNlcmlhbC5jIChiZWdpbl9icmVhaywgZW5kX2JyZWFrLCByc19pb2N0bCk6IEFwcGxpZWQgcGF0Y2gKLQkJdG8gc3VwcG9ydCBCU0QgaW9jdGxzIHRvIHNldCBhbmQgY2xlYXIgdGhlIGJyZWFrCi0JCWNvbmRpdGlvbiBleHBsaWNpdGx5LgotCi0JKiBjb25zb2xlLmMgKHNjcnVwLCBzY3Jkb3duLCBpbnNlcnRfbGluZSwgZGVsZXRlX2xpbmUpOiBBcHBsaWVkCi0JCWZpeCBzdWdnZXN0ZWQgYnkgQWFyb24gVGllbnNpdnUgdG8gc3BlZWQgdXAgYmxvY2sgc2Nyb2xscwotCQl1cCBhbmQgZG93bi4KLQotCSogbl90dHkuYyAob3Bvc3RfYmxvY2ssIHdyaXRlX2NoYW4pOiBBZGRlZCBhIG1vZGlmaWVkICJmYXN0Ci0gCQljb25zb2xlIiBwYXRjaCB3aGljaCBwcm9jZXNzZXMgYSBibG9jayBvZiB0ZXh0IHZpYQotCQkiY29va2luZyIgZWZmaWNpZW50bHkuCi0KLVdlZCBKdW4gMTggMTU6MjU6NTAgMTk5NyAgVGhlb2RvcmUgVHMnbyAgPHR5dHNvQHJzdHMtMTEubWl0LmVkdT4KLQotCSogdHR5X2lvLmMgKGluaXRfZGV2LCByZWxlYXNlX2Rldik6IEFwcGxpZWQgZml4IHN1Z2dlc3RlZCBieSBCaWxsCi0JCUhhd2VzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGluIHRoZSB0dHkgY29kZS4KLQotCSogbl90dHkuYyAobl90dHlfY2hhcnNfaW5fYnVmZmVyKTogQXBwbGllZCBmaXggc3VnZ2VzdGVkIGJ5IEJpbGwKLQkJSGF3ZXMgc28gdGhhdCBuX3R0eV9jaGFyc19pbl9idWZmZXIgcmV0dXJucyB0aGUgY29ycmVjdAotCQl2YWx1ZSBpbiB0aGUgY2FzZSB3aGVuIHRoZSB0dHkgaXMgaW4gY2Fubm9uaWNhbCBtb2RlLiAgKFRvCi0JCWF2b2lkIGEgcHR5IGRlYWRsb2NrIHdpdGggdGVsbmV0ZC4pCi0KLVRodSBGZWIgMjcgMDE6NTM6MDggMTk5NyAgVGhlb2RvcmUgVHMnbyAgPHR5dHNvQHJzdHMtMTEubWl0LmVkdT4KLQotCSogc2VyaWFsLmMgKGNoYW5nZV9zcGVlZCk6IEFkZCBzdXBwb3J0IGZvciB0aGUgdGVybWlvcyBmbGFnCi0JCUNNU1BBUiwgd2hpY2ggYWxsb3dzIHRoZSB1c2VyIHRvIHNlbGVjdCBzdGljayBwYXJpdHkuCi0JCShpLmUsIGlmIFBBUk9ERCBpcyBzZXQsIHRoZSBwYXJpdHkgYml0IGlzIGFsd2F5cyAxOyBpZgotCQlQQVJST0REIGlzIG5vdCBzZXQsIHRoZW4gdGhlIHBhcml0eSBiaXQgaXMgYWx3YXlzIDApLgotCi1XZWQgRmViIDI2IDE5OjAzOjEwIDE5OTcgIFRoZW9kb3JlIFRzJ28gIDx0eXRzb0Byc3RzLTExLm1pdC5lZHU+Ci0KLQkqIHNlcmlhbC5jIChjbGVhbnVwX21vZHVsZSk6IEZpeCBtZW1vcnkgbGVhayB3aGVuIHVzaW5nIHRoZSBzZXJpYWwKLQkJZHJpdmVyIGFzIGEgbW9kdWxlOyBtYWtlIHN1cmUgdG1wX2J1ZiBnZXRzIGZyZWVkIQotCi1UdWUgRmViIDI1IDExOjAxOjU5IDE5OTcgIFRoZW9kb3JlIFRzJ28gIDx0eXRzb0Byc3RzLTExLm1pdC5lZHU+Ci0KLQkqIHNlcmlhbC5jIChzZXRfbW9kZW1faW5mbyk6IEFkZCBzdXBwb3J0IGZvciBzZXR0aW5nIGFuZCBjbGVhcmluZwotCQl0aGUgT1VUMSBhbmQgT1VUMiBiaXRzLiAgKEZvciBzcGVjaWFsIGNhc2UgVUFSVCdzLCB1c3VhbGx5Ci0JCWZvciBoYWxmLWR1cGxleC4pCi0JCShhdXRvY29uZmlnLCBjaGFuZ2Vfc3BlZWQpOiBGaXggVEkgMTY3NTAgc3VwcG9ydC4KLQotU3VuIEZlYiAxNiAwMDoxNDo0MyAxOTk3ICBUaGVvZG9yZSBUcydvICA8dHl0c29AcnN0cy0xMS5taXQuZWR1PgotCi0JKiB0dHlfaW8uYyAocmVsZWFzZV9kZXYpOiBBZGQgc2FuaXR5IGNoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUKLQkJbm8gd2FpdGVycyBvbiB0dHktPnJlYWRfd2FpdCBvciB0dHktPndyaXRlX3dhaXQuCi0KLQkqIHNlcmlhbC5jIChyc19pbml0KTogRG9uJ3QgYXV0b2NvbmZpZyBhIGRldmljZSBpZiB0aGUgSS9PIHJlZ2lvbgotCQlpcyBhbHJlYWR5IHJlc2VydmVkLgotCi0JKiBzZXJpYWwuYyAoc2VyaWFsX3Byb2NfaW5mbyk6IEFkZCBzdXBwb3J0IGZvciAvcHJvYy9zZXJpYWwuCi0KLVRodSBGZWIgMTMgMDA6NDk6MTAgMTk5NyAgVGhlb2RvcmUgVHMnbyAgPHR5dHNvQHJzdHMtMTEubWl0LmVkdT4KLQotCSogc2VyaWFsLmMgKHJlY2VpdmVfY2hhcnMpOiBXaGVuIHRoZSBVQVJUIHJlcG90cnMgYW4gb3ZlcnJ1bgotIAkJY29uZGl0aW9uLCBpdCBkb2VzIHNvIHdpdGggYSB2YWxpZCBjaGFyYWN0ZXIuICBDaGFuZ2VkIHRvCi0gCQlub3QgdGhyb3cgYXdheSB0aGUgdmFsaWQgY2hhcmFjdGVyLCBidXQgaW5zdGVhZCByZXBvcnQgdGhlCi0JCW92ZXJydW4gYWZ0ZXIgdGhlIHZhbGlkIGNoYXJhY3Rlci4KLQotCSogc2VyaWFsLmM6IEFkZGVkIG5ldyAjaWZkZWYncyBmb3Igc29tZSBvZiB0aGUgYWR2YW5jZWQgc2VyaWFsCi0JCWRyaXZlciBmZWF0dXJlcy4gIEEgbWluaW1hbCBkcml2ZXIgdGhhdCBvbmx5IHN1cHBvcnRzIENPTQotCQkxLzIvMy80IHdpdGhvdXQgc2hhcmluZyBzZXJpYWwgaW50ZXJydXB0cyBvbmx5IHRha2VzIDE3azsKLQkJdGhlIGZ1bGwgZHJpdmVyIHRha2VzIDMyay4KLQkJCi1XZWQgRmViIDEyIDE0OjUwOjQ0IDE5OTcgIFRoZW9kb3JlIFRzJ28gIDx0eXRzb0Byc3RzLTExLm1pdC5lZHU+Ci0KLQkqIHZ0LmM6Ci0JKiBwdHkuYzogCi0JKiB0dHlfaW9jdGwuYzogCi0JKiBzZXJpYWwuYzogVXBkYXRlIHJvdXRpbmVzIHRvIHVzZSB0aGUgbmV3IDIuMSBtZW1vcnkgYWNjZXNzCi0JIAlyb3V0aW5lcy4KLQotV2VkIERlYyAgNCAwNzo1MTo1MiAxOTk2ICBUaGVvZG9yZSBUcydvICA8dHl0c29AbG9jYWxob3N0Lm1pdC5lZHU+Ci0KLQkqIHNlcmlhbC5jIChjaGFuZ2Vfc3BlZWQpOiBVc2Ugc2F2ZV9mbGFncygpOyBjbGkoKSBhbmQKLQkJcmVzdG9yZV9mbGFncygpIGluIG9yZGVyIHRvIGVuc3VyZSB3ZSBkb24ndCBhY2NpZGVudGFsbHkKLQkJdHVybiBvbiBpbnRlcnJ1cHRzIHdoZW4gc3RhcnRpbmcgdXAgdGhlIHBvcnQuCi0JCShzdGFydHVwKTogTW92ZSB0aGUgaW5zZXJ0aW9uIG9mIHNlcmlhbCBzdHJ1Y3R1cmUgaW50byB0aGUKLQkJSVJRIGNoYWluIGVhcmxpZXIgaW50byB0aGUgc3RhcnR1cCBwcm9jZXNzaW5nLiAgSW50ZXJydXB0cwotCQlzaG91bGQgYmUgb2ZmIHRoaXMgd2hvbGUgdGltZSwgYnV0IHdlIGV2ZW50dWFsbHkgd2lsbCB3YW50Ci0JCXRvIHJlZHVjZSB0aGlzIHdpbmRvdy4KLQotVGh1IE5vdiAyMSAxMDowNToyMiAxOTk2ICBUaGVvZG9yZSBUcydvICA8dHl0c29AbG9jYWxob3N0Lm1pdC5lZHU+Ci0KLQkqIHR0eV9pb2N0bC5jICh0dHlfd2FpdF91bnRpbF9zZW50KTogQWx3YXlzIGNoZWNrIHRoZSBkcml2ZXIKLSAJCXdhaXRfdW50aWxfcmVhZHkgcm91dGluZSwgZXZlbiBpZiB0aGVyZSBhcmUgbm8gY2hhcmFjdGVycwotIAkJaW4gdGhlIHhtaXQgYnVmZmVyLiAgKFRoZXJlIG1heSBiZSBjaGFyYWN0ZXMgaW4gdGhlIGRldmljZQotIAkJRklGTy4pCi0JCShuX3R0eV9pb2N0bCk6IEFkZCBuZXcgZmxhZyB0dHktPmZsb3dfc3RvcHBlZCB3aGljaAotIAkJaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHR0eSBpcyBzdG9wcGVkIGR1ZSB0byBhIHJlcXVlc3QgYnkKLSAJCXRoZSBUQ1hPTkMgaW9jdGwgKHVzZWQgYnkgdGNmbG93KS4gIElmIHNvLCBkb24ndCBsZXQgYW4KLSAJCWluY29taW5nIFhPRkYgY2hhcmFjdGVyIHJlc3RhcnQgdGhlIHR0eS4gIFRoZSB0dHkgY2FuIG9ubHkKLSAJCWJlIHJlc3RhcnRlZCBieSBhbm90aGVyIFRDWE9OQyByZXF1ZXN0LgotCi0JKiB0dHlfaW8uYyAoc3RhcnRfdHR5KTogRG9uJ3QgYWxsb3cgdGhlIHR0eSB0byBiZSByZXN0YXJ0ZWQgaWYKLQkJdHR5LT5mbG93X3N0b3BwZWQgaXMgdHJ1ZS4KLQotCSogbl90dHkuYyAobl90dHlfcmVjZWl2ZV9jaGFyKTogSWYgdHR5LT5mbG93X3N0b3BwZWQgaXMgdHJ1ZSwgYW5kCi0gCQlJWEFOWSBpcyBzZXQsIGRvbid0IGVhdCBhIGNoYXJhY3RlciB0cnlpbmcgdG8gcmVzdGFydCB0aGUKLSAJCXR0eS4KLQotCSogc2VyaWFsLmMgKHN0YXJ0dXApOiBSZW1vdmUgbmVlZCBmb3IgTUNSX25vaW50IGZyb20gdGhlCi0gCQlhc3luY19zdHJ1Y3Qgc3RydWN0dXJlLiAgT25seSB0dXJuIG9uIERUUiBhbmQgUlRTIGlmIHRoZQotIAkJYmF1ZCByYXRlIGlzIG5vdCB6ZXJvLgotCQkoY2hhbmdlX3NwZWVkKTogTW9yZSBhY2N1cmF0ZWx5IGNhbGN1bGF0ZSB0aGUgdGltZW91dAotIAkJdmFsdWUgYmFzZWQgb24gdGhlIHdvcmQgc2l6ZS4gIE1vdmUgcmVzcG9uc2liaWxpdHkgb2YKLSAJCWhhbmd1cCB3aGVuIHNwZWVkIGJlY29tZXMgQjAgdG8gcnNfc2V0X3Rlcm1pb3MoKQotCQkoc2V0X3NlcmlhbF9pbmZvKTogV2hlbiBjaGFuZ2luZyB0aGUgVUFSVCB0eXBlIHNldCB0aGUKLSAJCWN1cnJlbnQgeG1pdF9maWZvX3NpemUgYXMgd2VsbCBhcyB0aGUgcGVybWFuZW50Ci0gCQl4bWl0X2ZpZm9fc2l6ZS4KLQkJKHJzX2lvY3RsKTogRml4IFRDU0JSSyAodXNlZCBieSB0Y2RyYWluKSBhbmQgVENTQlJLUAotIAkJaW9jdGxzIHRvIHJldHVybiBFSU5UUiBpZiBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4KLQkJKHJzX3NldF90ZXJtaW9zKTogSWYgdGhlIGJhdWQgcmF0ZSBjaGFuZ2VzIHRvIG9yIGZyb20gQjAsCi0gCQl0aGlzIGZ1bmN0aW9uIGlzIG5vdyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyBvciBjbGVhcmluZwotIAkJRFRSIGFuZCBSVFMuICBEVFIgYW5kIFJUUyBhcmUgb25seSBiZSBjaGFuZ2VkIG9uIHRoZQotIAkJdHJhbnNpdGlvbiB0byBvciBmcm9tIHRoZSBCMCBzdGF0ZS4KLQkJKHJzX2Nsb3NlKTogV2FpdCBmb3IgdGhlIGNoYXJhY3RlcnMgdG8gZHJhaW4gYmFzZWQgb24KLSAJCWluZm8tPnRpbWVvdXQuICBBdCBsb3cgYmF1ZCByYXRlcyAoNTAgYnBzKSwgaXQgbWF5IHRha2UgYQotIAkJbG9uZyB0aW1lIGZvciB0aGUgRklGTyB0byBjb21wbGV0ZWx5IGRyYWluIG91dCEKLQkJKHJzX3dhaXRfdW50aWxfc2VudCk6IEZpeGVkIHRpbWVvdXQgaGFuZGxpbmcuICBOb3cKLSAJCXJlbGVhc2VzIGNvbnRyb2wgdG8gdGhlIHNjaGVkdWxlciwgYnV0IGNoZWNrcyBmcmVxdWVudGx5Ci0gCQllbm91Z2ggc28gdGhhdCB0aGUgZnVuY3Rpb24gaXMgc2Vuc2l0aXZlIGVub3VnaCB0byBwYXNzCi0gCQl0aGUgdGltaW5nIHJlcXVpcmVtZW50cyBvZiB0aGUgTklTVC1QQ1RTLgotCQkoYmxvY2tfdGlsX3JlYWR5KTogV2hlbiBvcGVuaW5nIHRoZSBkZXZpY2UsIGRvbid0IHR1cm4gb24KLSAJCURUUiBhbmQgUlRTIGlmIHRoZSBiYXVkIHJhdGUgaXMgQjAuCi0KLVRodSBOb3YgMTQgMDA6MDY6MDkgMTk5NiAgVGhlb2RvcmUgVHMnbyAgPHR5dHNvQHJzdHMtMTEubWl0LmVkdT4KLQotCSogc2VyaWFsLmMgKGF1dG9jb25maWcpOiBGaXggYXV0b2NvbmZpZ3VyYXRpb24gcHJvYmxlbXM7Ci0JCWluZm8tPmZsYWdzIHdhc24ndCBnZXR0aW5nIGluaXRpYWxpemVkIGZyb20gdGhlIHN0YXRlCi0JCXN0cnVjdHVyZS4gIFB1dCBpbiBtb3JlIHBhcmFub2lkIHRlc3QgZm9yIHRoZSAxNjc1MC4KLQotRnJpIE5vdiAgOCAyMDoxOTo1MCAxOTk2ICBUaGVvZG9yZSBUcydvICA8dHl0c29AcnN0cy0xMS5taXQuZWR1PgotCi0JKiBuX3R0eS5jIChuX3R0eV9mbHVzaF9idWZmZXIpOiBPbmx5IGNhbGwgZHJpdmVyLT51bnRocm90dGxlKCkgaWYKLSAJCXRoZSB0dHkgd2FzIHByZXZpb3VzIHRocm90dGxlZC4KLQkJKG5fdHR5X3NldF90ZXJtaW9zLCB3cml0ZV9jaGFuKTogQWRkIGNoYW5nZXMgc3VnZ2VzdGVkIGJ5Ci0gCQkJU2ltb24gUC4gQWxsZW4gdG8gYWxsb3cgaGFyZHdhcmUgY29va2luZy4KLQotCSogdHR5X2lvY3RsLmMgKHNldF90ZXJtaW9zKTogSWYgd2UgZ2V0IGEgc2lnbmFsIHdoaWxlIHdhaXRpbmcgZm9yCi0JCXRoZSB0dHkgdG8gZHJhaW4sIHJldHVybiAtRUlOVFIuCi0JCi0JKiBzZXJpYWwuYyAoY2hhbmdlX3NwZWVkKTogQWRkIHN1cHBvcnQgZm9yIENSRUFELCBhcyByZXF1aXJlZCBieQotCSAJUE9TSVguCi0KLVNhdCBOb3YgIDIgMjA6NDM6MTAgMTk5NiAgVGhlb2RvcmUgVHMnbyAgPHR5dHNvQHJzdHMtMTEubWl0LmVkdT4KLQotCSogc2VyaWFsLmM6IFdob2xlc2FsZSBjaGFuZ2VzLiAgQWRkZWQgc3VwcG9ydCBmb3IgdGhlIFN0YXJ0ZWNoCi0gCQkxNjY1MCBhbmQgMTY2NTBWMiBjaGlwcy4gIChXQVJOSU5HOiB0aGUgbmV3IHN0YXJ0ZWNoCi0gCQkxNjY1MEEgbWF5IG9yIG1heSBub3Qgd29yayEpICBBZGRlZCBzdXBwb3J0IGZvciB0aGUKLSAJCVRJMTY3NTAgKG5vdCB5ZXQgdGVzdGVkKS4gIFNwbGl0IGFzeW5jX3N0cnVjdCBpbnRvIGEKLSAJCXRyYW5zaWVudCBwYXJ0IChhc3luY19zdHJ1Y3QpIGFuZCBhIHBlcm1hbmVudCBwYXJ0Ci0JCShzZXJpYWxfc3RhdGUpIHdoaWNoIGNvbnRhaW5zIHRoZSBjb25maWd1cmF0aW9uCi0gCQlpbmZvcm1hdGlvbiBmb3IgdGhlIHBvcnRzLiAgQWRkZWQgbmV3IGRyaXZlciByb3V0aW5lcwotIAkJd2FpdF91bnRpbF9zZW50KCkgYW5kIHNlbmRfeGNoYXIoKSB0byBoZWxwIHdpdGggUE9TSVgKLSAJCWNvbXBsaWFuY2UuICBBZGRlZCBzdXBwb3J0IGZvciByYWRpbyBjbG9ja3Mgd2hpY2ggd2FnZ2xlCi0JCXRoZSBjYXJyaWVyIGRldGVjdCBsaW5lIChDT05GSUdfSEFSRF9QUFMpLgotCQotCSogdHR5X2lvY3RsLmMgKHR0eV93YWl0X3VudGlsX3NlbnQpOiBBZGRlZCBjYWxsIHRvIG5ldyBkcml2ZXIKLQkJZnVuY3Rpb24gdHR5LT5kcml2ZXIud2FpdF91bnRpbF9zZW50KCksIHdoaWNoIHJldHVybnMgd2hlbgotCQl0aGUgdHR5J3MgZGV2aWNlIHhtaXQgYnVmZmVycyBhcmUgZHJhaW5lZC4gIE5lZWRlZCBmb3IKLQkJZnVsbCBQT1NJWCBjb21wbGlhbmNlLgotCi0JCShzZW5kX3ByaW9fY2hhcik6IE5ldyBmdW5jdGlvbiwgY2FsbGVkIGJ5IHRoZSBpb2N0bCdzCi0JCVRDSU9GRiBhbmQgVENJT047IHVzZXMgdGhlIG5ldyBkcml2ZXIgY2FsbCBzZW5kX3hjaGFyKCksCi0JCXdoaWNoIHdpbGwgc2VuZCB0aGUgWE9OIG9yIFhPRkYgY2hhcmFjdGVyIGF0IGhpZ2ggcHJpb3JpdHkKLQkJKGFuZCBldmVuIGlmIHR0eSBvdXRwdXQgaXMgc3RvcHBlZCkuCi0KLVdlZCBKdW4gIDUgMTg6NTI6MDQgMTk5NiAgVGhlb2RvcmUgVHMnbyAgPHR5dHNvQHJzdHMtMTEubWl0LmVkdT4KLQotCSogcHR5LmMgKHB0eV9jbG9zZSk6IFdoZW4gY2xvc2luZyBhIHB0eSwgbWFrZSBzdXJlIHBhY2tldCBtb2RlIGlzCi0JIAljbGVhcmVkLgotCi1TdW4gTWF5IDI2IDA5OjMzOjUyIDE5OTYgIFRoZW9kb3JlIFRzJ28gIDx0eXRzb0Byc3RzLTExLm1pdC5lZHU+Ci0KLQkqIHZlc2FfYmxhbmsuYyAoc2V0X3Zlc2FfYmxhbmtpbmcpOiBBZGQgbWlzc2luZyB2ZXJpZnlfYXJlYSgpIGNhbGwuCi0KLQkqIHNlbGVjdGlvbi5jIChzZXRfc2VsZWN0aW9uKTogQWRkIG1pc3NpbmcgdmVyaWZ5X2FyZWEoKSBjYWxsLgotCi0JKiB0dHlfaW8uYyAodHR5X2lvY3RsKTogQWRkIG1pc3NpbmcgdmVyaWZ5X2FyZWEoKSBjYWxscy4KLQotCSogc2VyaWFsLmMgKHJzX2lvY3RsKTogQWRkIG1pc3NpbmcgdmVyaWZ5X2FyZWEoKSBjYWxscy4KLQkJKHJzX2luaXQpOiBBbGxvdyBpbml0aWFsaXphdGlvbiBvZiBzZXJpYWwgZHJpdmVyCi0JCWNvbmZpZ3VyYXRpb24gZnJvbSBhIG1vZHVsZS4KLQotCSogcmFuZG9tLmMgKGV4dHJhY3RfZW50cm9weSk6IEFkZCBtaXNzaW5nIHZlcmlmeV9hcmVhIGNhbGwuCi0JCURvbid0IGxpbWl0IG51bWJlciBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIHRvCi0JCTMyLDc2OC4gRXh0cmFjdCBlbnRyb3B5IGlzIG5vdyBubyBsb25nZXIgYSBpbmxpbmVkCi0JCWZ1bmN0aW9uLgotCi0JCShyYW5kb21fcmVhZCk6IENoZWNrIHJldHVybiB2YWx1ZSBpbiBjYXNlIGV4dHJhY3RfZW50cm9weQotCQlyZXR1cm5zIGFuIGVycm9yLgotCi0JCShzZWN1cmVfdGNwX3NlcXVlbmNlX251bWJlcik6IE5ldyBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGEKLQkJc2VjdXJlIFRDUCBzZXF1ZW5jZSBudW1iZXIuICBUaGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IHNvbWUKLQkJbmFzdHkgVENQIGhpamFja2luZyBhdHRhY2tzLgotCQotCQkoaW5pdF9zdGRfZGF0YSk6IEluaXRpYWxpemUgdXNpbmcgZ2V0dGltZW9mZGF5KCkgaW5zdGVhZCBvZgotCQlzdHJ1Y3QgdGltZXZhbCB4dGltZS4KLQotCQkoZmFzdF9hZGRfZW50cm9weV93b3JkLCBhZGRfZW50cm9weV93b3JkKTogUmVuYW1lIHRoZQotCQlpbmxpbmUgZnVuY3Rpb24gYWRkX2VudHJvcHlfd29yZCgpIHRvCi0JCWZhc3RfYWRkX2VudHJvcHlfd29yZCgpLiAgTWFrZSBhZGRfZW50cm9weV93b3JkKCkgYmUgdGhlCi0JCW5vbi1pbmxpbmVkIGZ1bmN0aW9uIHdoaWNoIGlzIHVzZWQgaW4gbm9uLXRpbWluZyBjcml0aWNhbAotCQlwbGFjZXMsIGluIG9yZGVyIHRvIHNhdmUgc3BhY2UuCi0KLQkJKGluaXRpYWxpemVfYmVuY2htYXJrLCBiZWdpbl9iZW5jaG1hcmssIGVuZF9iZW5jaG1hcmspOiBOZXcKLQkJZnVuY3Rpb25zIGRlZmluZWQgd2hlbiBSQU5ET01fQkVOQ0hNQVJLIGlzIGRlZmluZWQuICBUaGV5Ci0JCWFsbG93IHVzIHRvIGJlbmNobWFyayB0aGUgc3BlZWQgb2YgdGhlCi0JCWFkZF90aW1lcl9yYW5kb21uZXNzKCkgY2FsbC4KLQotCQkoaW50X2xuLCByb3RhdGVfbGVmdCk6IEFkZCB0d28gbmV3IGlubGluZSBmdW5jdGlvbnMgd2l0aAotCQlpMzg2IG9wdGltaXplZCBhc20gaW5zdHJ1Y3Rpb25zLiAgVGhpcyBzcGVlZHMgdXAgdGhlCi0JCWNyaXRpY2FsIGFkZF9lbnRyb3B5X3dvcmQoKSBhbmQgYWRkX3RpbWVyX3JhbmRvbW5lc3MoKQotCQlmdW5jdGlvbnMsIHdoaWNoIGFyZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgaGFuZGxlcnMuCi0KLVR1ZSBNYXkgIDcgMjI6NTE6MTEgMTk5NiAgICA8dHl0c29AcnN0cy0xMS5taXQuZWR1PgotCi0JKiByYW5kb20uYyAoYWRkX3RpbWVyX3JhbmRvbW5lc3MpOiBMaW1pdCB0aGUgYW1vdW50IHJhbmRvbW5lc3MKLQkJdGhhdCB3ZSBlc3RpbWF0ZSB0byAxMiBiaXRzLiAgKEFuIGFyYml0cmFyeSBhbW91bnQpLgotCi0JCShleHRyYWN0X2VudHJvcHkpOiBUbyBtYWtlIGl0IGhhcmRlciB0byBhbmFseXplIHRoZSBoYXNoCi0JCWZ1bmN0aW9uLCBmb2xkIHRoZSBoYXNoIGZ1bmN0aW9uIGluIGhhbGYgdXNpbmcgWE9SLCBhbmQKLQkJdXNlIHRoZSBmb2xkZWQgcmVzdWx0IGFzIHRoZSB2YWx1ZSB0byBlbWl0IHRvIHRoZSB1c2VyLgotCQlBbHNvLCBhZGQgdGltZXIgcmFuZG9tbmVzcyBlYWNoIHBhc3MgdGhyb3VnaCB0aGUKLQkJZXhhY3RfZW50cm9weSBjYWxsLCB0byBpbmNyZWFzZSB0aGUgYW1vdW50IG9mIHVua25vd24KLQkJdmFsdWVzIGR1cmluZyB0aGUgZXh0cmFjdGlvbiBwcm9jZXNzLgotCi0JCShyYW5kb21faW9jdGwpOiBVc2UgSU9SL0lPVyBkZWZpbml0aW9ucyB0byBkZWZpbmUgdGhlCi0JCWlvY3RsIHZhbHVlcyB1c2VkIGJ5IHRoZSAvZGV2L3JhbmRvbSBkcml2ZXIuICBBbGxvdyB0aGUKLQkJb2xkIGlvY3RsIHZhbHVlcyB0byBiZSB1c2VkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQotCQkoZm9yIGEgbGltaXRlZCBhbW91bnQgb2YgdGltZSkuCi0KLVdlZCBBcHIgMjQgMTQ6MDI6MDQgMTk5NiAgVGhlb2RvcmUgVHMnbyAgPHR5dHNvQHJzdHMtMTEubWl0LmVkdT4KLQotCSogcmFuZG9tLmMgKGFkZF90aW1lcl9yYW5kb21uZXNzKTogVXNlIDJuZCBkZXJpdmF0aXZlIGFzIHdlbGwgdG8KLQkJYmV0dGVyIGVzdGltYXRlIGVudHJvcHkuCi0KLQkJKHJhbmRfaW5pdGlhbGl6ZSk6IEV4cGxpY2l0bHkgaW5pdGlhbGl6ZSBhbGwgdGhlIHBvaW50ZXJzCi0JCXRvIE5VTEwuICAoQ2xlYXJpbmcgcG9pbnRlcnMgdXNpbmcgbWVtc2V0IGlzbid0IHBvcnRhYmxlLikKLQkJSW5pdGlhbGl6ZSB0aGUgcmFuZG9tIHBvb2wgd2l0aCBPUy1kZXBlbmRlbnQgZGF0YS4KLQotCQkocmFuZG9tX3dyaXRlKTogQWRkIHNhbml0eSBjaGVja2luZyB0byB0aGUgYXJndW1lbnRzIHRvCi0JCXJhbmRvbV93cml0ZSgpLCBzbyB0aGF0IGJhZCBhcmd1bWVudHMgd29uJ3QgY2F1c2UgYSBrZXJuZWwKLQkJU0VHVi4gCi0KLQkJKHJhbmRvbV9yZWFkKTogVXBkYXRlIHRoZSBhY2Nlc3MgdGltZSBvZiB0aGUgZGV2aWNlIGlub2RlCi0JCXdoZW4geW91IHJldHVybiBkYXRhIHRvIHRoZSB1c2VyLgotCi0JCShyYW5kb21faW9jdGwpOiBXYWtlIHVwIHRoZSByYW5kb21fd2FpdCBjaGFubmVsIHdoZW4gdGhlcmUKLQkJYXJlIG9ubHkgV0FJVF9JTlBVVF9CSVRTIGF2YWlsYWJsZS4gIEFkZCBtb3JlIHBhcmFub2lhCi0JCWNoZWNrcyB0byBtYWtlIHN1cmUgZW50cm9weV9jb3VudCBkb2Vzbid0IGdvIGJleW9uZCB0aGUKLQkJYm91bmRzIG9mICgwLCBQT09MU0laRSkuICBBZGQgYSBmZXcgbWlzc2luZyB2ZXJpZnlfYXJlYQotCQljaGVja3MuICBBZGQgc3VwcG9ydCBmb3IgdGhlIFJORENMRUFSUE9PTCBpb2N0bCwgd2hpY2gKLQkJemFwcyB0aGUgcmFuZG9tIHBvb2wuCi0KLQkJKGFkZF90aW1lcl9yYW5kb21uZXNzKTogV2FrZSB1cCB0aGUgcmFuZG9tX3dhaXQKLQkJY2hhbm5lbCBvbmx5IHdoZW4gdGhlcmUgYXJlIFdBSVRfSU5QVVRfQklUUyBhdmFpbGFibGUuCi0KLQkJKHJhbmRvbV9zZWxlY3QpOiBBbGxvdyBhIHJhbmRvbSByZWZyZXNoIGRhZW1vbiBwcm9jZXNzIHRvCi0JCXNlbGVjdCBvbiAvZGV2L3JhbmRvbSBmb3Igd3JpdGluZzsgd2FrZSB1cCB0aGUgZGFlbW9uIHdoZW4KLQkJdGhlcmUgYXJlIGxlc3MgdGhhbiBXQUlUX09VVFBVVF9CSVRTIGJpdHMgb2YgcmFuZG9tbmVzcwotCQlhdmFpbGFibGUuCi0KLVR1ZSBBcHIgMjMgMjI6NTY6MDcgMTk5NiAgICA8dHl0c29AcnN0cy0xMS5taXQuZWR1PgotCi0JKiB0dHlfaW8uYyAoaW5pdF9kZXYpOiBDaGFuZ2UgcmV0dXJuIGNvZGUgd2hlbiB1c2VyIGF0dGVtcHRzIHRvCi0JCW9wZW4gbWFzdGVyIHB0eSB3aGljaCBpcyBhbHJlYWR5IG9wZW4gZnJvbSBFQUdBSU4gdG8gRUlPLAotCQl0byBtYXRjaCB3aXRoIEJTRCBleHBlY3RhdGlvbnMuICBFSU8gaXMgbW9yZSBjb3JyZWN0Ci0JCWFueXdheSwgc2luY2UgRUFHQUlOIGltcGxpZXMgdGhhdCByZXRyeWluZyB3aWxsIGJlCi0JCXN1Y2Nlc3NmdWwgLS0tIHdoaWNoIGl0IG1pZ2h0IGJlLi4uLiBFdmVudHVhbGx5ISEKLQotCSogcHR5LmMgKHB0eV9vcGVuLCBwdHlfY2xvc2UpOiBGaXggd2FpdCBsb29wIHNvIHRoYXQgd2UgZG9uJ3QKLQkJYnVzeSBsb29wIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBtYXN0ZXIgc2lkZSB0byBvcGVuLgotCQlGaXggdHR5IG9wZW5pbmcvY2xvc2luZyBsb2dpYy4gIFRUWV9TTEFWRV9DTE9TRUQgd2FzCi0JCXJlbmFtZWQgdG8gVFRZX09USEVSX0NMT1NFRCwgc28gdGhhdCB0aGUgbmFtZSBpcyBtb3JlCi0JCWRlc2NyaXB0aXZlLiAgQWxzbyBmaXhlZCBjb2RlIHNvIHRoYXQgdGhlIHR0eSBmbGFnCi0JCWFjdHVhbGx5IHdvcmtzIGNvcnJlY3RseSBub3cuLi4uCi0KLU1vbiBBcHIgIDEgMTA6MjI6MDEgMTk5NiAgICA8dHl0c29AcnN0cy0xMS5taXQuZWR1PgotCi0JKiBzZXJpYWwuYyAocnNfY2xvc2UpOiBDbGVhbmVkIHVwIG1vZHVsYXJpemF0aW9uIGNoYW5nZXMuCi0JCVJlbW92ZSBjb2RlIHdoaWNoIGZvcmNlZCBsaW5lIGRpc2NpcGxpbmUgYmFjayB0byBOX1RUWQotCQl0aGlzIGlzIGRvbmUgaW4gdGhlIHR0eSB1cHBlciBsYXllcnMsIGFuZCB0aGVyZSdzIG5vCi0JCXJlYXNvbiB0byBkbyBpdCBoZXJlLiAgKE1ha2luZyB0aGlzIGNoYW5nZSBhbHNvCi0JCXJlbW92ZWQgdGhlIHJlcXVpcmVtZW50IHRoYXQgdGhlIHNlcmlhbCBtb2R1bGUgYWNjZXNzCi0JCXRoZSBpbnRlcm5hbCBrZXJuZWwgc3ltYm9sICJsZGlzY3MiLikKLQotCSogdHR5X2lvLmMgKHR0eV9pbml0KTogRm9ybWFsbHkgcmVnaXN0ZXIgYSB0dHlfZHJpdmVyIGVudHJ5IGZvcgotCQkvZGV2L3R0eSAoZGV2aWNlIDQsIDApIGFuZCAvZGV2L2NvbnNvbGUgKGRldmljZSA1LCAwKS4KLQkJVGhpcyBndWFyYW50ZWVzIHRoYXQgbWFqb3IgZGV2aWNlIG51bWJlcnMgNCBhbmQgNSB3aWxsIGJlCi0JCXJlc2VydmVkIGZvciB0aGUgdHR5IHN1YnN5c3RlbSAoYXMgdGhleSBoYXZlIHRvIGJlIGJlY2F1c2UKLQkJb2YgL2Rldi90dHkgYW5kIC9kZXYvY29uc29sZSkuICBSZW1vdmVkIHR0eV9yZWdkZXYsIGFzCi0JCXRoaXMgaW50ZXJmYWNlIGlzIG5vIGxvbmdlciBuZWNlc3NhcnkuCi0KLVN1biBNYXIgMTcgMjA6NDI6NDcgR01UIDE5OTYgPGFoQGRvYy5pYy5hYy51az4KLQotCSogc2VyaWFsLmMgOiBtb2R1bGFyaXNhdGlvbiAoY2hhbmdlcyBpbiBsaW51eC9mcy9kZXZpY2UuYyBhbGxvdwotCQlrZXJuZWxkIHRvIGF1dG9tYXRpY2FsbHkgbG9hZCB0aGUgc2VyaWFsIG1vZHVsZSkuCi0KLQkqIE1ha2VmaWxlLCBDb25maWcuaW4gOiBzZXJpYWwgbW9kdWxhcmlzYXRpb24gYWRkcy4KLQotCSogdHR5X2lvLmMgOiB0dHlfaW5pdF9jdHR5IHVzZWQgYnkgdG8gcmVnaXN0ZXIgImN1YSIgZHJpdmVyIGp1c3QKLQkJZm9yIHRoZSAvZGV2L3R0eSBkZXZpY2UgKDUsMCkuICBBZGRlZCB0dHlfcmVnZGV2LgotCQotCSogc2VyaWFsLmMgKHNodXRkb3duLCByc19pb2N0bCkgOiB3aGVuIHBvcnQgc2h1dHMgZG93biB3YWtldXAgcHJvY2Vzc2VzCi0JICB3YWl0aW5nIG9uIGRlbHRhX21zcl93YWl0LiBUaGUgVElPQ01JV0FJVCBpb2N0bCByZXR1cm5zIEVJTwotCSAgaWYgbm8gY2hhbmdlIHdhcyBkb25lIHNpbmNlIHRoZSB0aW1lIG9mIGNhbGwuCi0KLVNhdCBNYXIgMTYgMTQ6MzM6MTMgMTk5NiA8YWViQGN3aS5ubD4KLQotCSogdHR5X2lvLmMgKGRpc2Fzc29jaWF0ZV9jdHR5KTogSWYgZGlzYXNzb2NpYXRlX2N0dHkgaXMgY2FsbGVkIGJ5Ci0JCWV4aXQsIGRvIG5vdCBwZXJmb3JtIGFuIGltcGxpY2l0IHZoYW5ndXAgb24gYSBwdHkuCi0KLUZyaSBGZWIgIDkgMTQ6MTU6NDcgMTk5NiAgICA8dHl0c29AcnN0cy0xMS5taXQuZWR1PgotCi0JKiBzZXJpYWwuYyAoYmxvY2tfdGlsX3JlYWR5KTogRml4ZWQgYW5vdGhlciByYWNlIGNvbmRpdGlvbiB3aGljaAotCQloYXBwZW5zIGlmIGEgaGFuZ3VwIGhhcHBlbnMgZHVyaW5nIHRoZSBvcGVuLgotCi1XZWQgSmFuIDEwIDEwOjA4OjAwIDE5OTYgICAgPHR5dHNvQHJzdHMtMTEubWl0LmVkdT4KLQotCSogc2VyaWFsLmMgKGJsb2NrX3RpbF9yZWFkeSk6IFJlbW92ZSByYWNlIGNvbmRpdGlvbiB3aGljaCBoYXBwZW5lZAotCQlpZiBhIGhhbmd1cCBjb25kaXRpb24gaGFwcGVuZWQgZHVyaW5nIHRoZSBzZXR1cCBvZiB0aGUKLQkJVUFSVCwgYmVmb3JlIHJzX29wZW4oKSBjYWxsZWQgYmxvY2tfdGlsX3JlYWR5KCkuICBUaGlzCi0JCWNhdXNlZCB0aGUgaW5mby0+Y291bnQgY291bnRlciB0byBiZSBlcnJvbmVvdXNseQotCQlkZWNyZW1lbnRlZC4KLQotCSogc2VyaWFsLmMgKHN0YXJ0dXAsIHJzX29wZW4pOiBSZW1vdmUgcmFjZSBjb25kaXRpb24gdGhhdCBjb3VsZAotCQljYXVzZSBhIG1lbW9yeSBsZWFrIG9mIG9uZSBwYWdlLiAgKEZvcnR1bmF0ZWx5LCBib3RoIHJhY2UKLQkJY29uZGl0aW9ucyB3ZXJlIHJlbGF0aXZlbHkgcmFyZSBpbiBwcmFjdGljZS4pCi0KLVR1ZSBEZWMgIDUgMTM6MjE6MjcgMTk5NSAgICA8dHl0c29AcnN0cy0xMS5taXQuZWR1PgotCi0JKiBzZXJpYWwuYyAoY2hlY2tfbW9kZW1fc3RhdHVzLCByc19pb2N0bCk6IFN1cHBvcnQgdGhlIG5ldwotCQlpb2N0bCgpJ3MgVElPQ0dJQ09VTlQsIFRJT0NNSVdBSVQuICBUaGVzZSBhbGxvdyBhbgotCQlhcHBsaWNhdGlvbiBwcm9ncmFtIHRvIHdhaXQgb24gYSBtb2RlbSBzZXJpYWwgcmVnaXN0ZXIKLQkJc3RhdHVzIGJpdCBjaGFuZ2UsIGFuZCB0byBmaW5kIG91dCBob3cgbWFueSBjaGFuZ2VzIGhhdmUKLQkJdGFrZW4gcGxhY2UgZm9yIHRoZSBNU1IgYml0cy4KLQotCQkocnNfd3JpdGUpOiBFbGltaW5hdGUgYSByYWNlIGNvbmRpdGlvbiB3aGljaCBpcyBpbnRyb2R1Y2VkCi0JCWlmIGl0IGlzIG5lY2Vzc2FyeSB0byB3YWl0IGZvciB0aGUgc2VtYXBob3JlLgotCi1TYXQgTm92ICA0IDE3OjE0OjQ1IDE5OTUgICAgPHR5dHNvQHJzdHMtMTEubWl0LmVkdT4KLQotCSogdHR5X2lvLmMgKHR0eV9pbml0KTogTW92ZSByZWdpc3RyYXRpb24gb2YgVFRZX01BSk9SIGFuZAotCQlUVFlfQVVYX01BSk9SIHRvIHRoZSBlbmQsIHNvIHRoYXQgL3Byb2MvZGV2aWNlcyBsb29rcwotCQlwcmV0dGllci4gCi0KLQkqIHB0eS5jIChwdHlfaW5pdCk6IFVzZSBuZXcgbWFqb3IgbnVtYmVycyBmb3IgUFRZIG1hc3RlciBhbmQgc2xhdmUKLQkJZGV2aWNlcy4gIFRoaXMgYWxsb3cgdXMgdG8gaGF2ZSBtb3JlIHRoYW4gNjQgcHR5J3MuICBXZQotCQlyZWdpc3RlciB0aGUgb2xkIHB0eSBkZXZpY2VzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KLQkJTm90ZSB0aGF0IGEgc3lzdGVtIHNob3VsZCBlaXRoZXIgYmUgdXNpbmcgdGhlIG9sZCBwdHkKLQkJZGV2aWNlcyBvciB0aGUgbmV3IHB0eSBkZXZpY2VzIC0tLSBpbiBnZW5lcmFsLCBpdCBzaG91bGQKLQkJdHJ5IHRvIHVzZSBib3RoLCBzaW5jZSB0aGV5IG1hcCBpbnRvIHRoZSBzYW1lIHB0eSB0YWJsZS4KLQkJVGhlIG9sZCBwdHkgZGV2aWNlcyBhcmUgc3RyaWN0bHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgotCi1XZWQgT2N0IDExIDEyOjQ1OjI0IDE5OTUgICAgPHR5dHNvQHJzdHMtMTEubWl0LmVkdT4KLQotCSogdHR5X2lvLmMgKGRpc2Fzc29jaWF0ZV9jdHR5KTogSWYgZGlzYXNzb2NpYXRlX2N0dHkgaXMgY2FsbGVkIGJ5Ci0JCWV4aXQsIHBlcmZvcm0gYW4gaW1wbGljaXQgdmhhbmd1cCBvbiB0aGUgdHR5LgotCi0JKiBwdHkuYyAocHR5X2Nsb3NlKTogV2hlbiB0aGUgbWFzdGVyIHB0eSBpcyBjbG9zZWQsIHNlbmQgYSBoYW5ndXAKLQkJdG8gdGhlIHNsYXZlIHB0eS4KLQkJKHB0eV9vcGVuKTogVXNlIHRoZSBmbGFnIFRUWV9TTEFWRV9DTE9TRUQgdG8gdGVzdCB0byBzZWUKLQkJaWYgdGhlcmUgYXJlIGFueSBvcGVuIHNsYXZlIHB0eXMsIGluc3RlYWQgb2YgdXNpbmcKLQkJdHR5LT5saW5rLT5jb3VudC4gIFRoZSBvbGQgbWV0aG9kIGdvdCBjb25mdXNlZCBpZiB0aGVyZQotCQl3ZXJlIHByb2Nlc3NlcyB0aGF0IGhhZCBodW5nLXVwIGZpbGUgZGVzY3JpcHRvcnMgb24gdGhlCi0JCXNsYXZlIHR0eS4KLQotVHVlIE1heSAgMiAwMDo1MzoyNSAxOTk1ICAgIDx0eXRzb0Byc3gtMTEubWl0LmVkdT4KLQotCSogdHR5X2lvLmMgKHR0eV9zZXRfbGRpc2MpOiBXYWl0IHVudGlsIHRoZSBvdXRwdXQgYnVmZmVyIGlzCi0JCWRyYWluZWQgYmVmb3JlIGNsb3NpbmcgdGhlIG9sZCBsaW5lIGRpc2NpcGxpbmUgLS0tIG5lZWRlZAotCQlpbiBvbmx5IG9uZSBjYXNlOiBYT04vWE9GRiBwcm9jZXNzaW5nLgotCi0JKiBuX3R0eS5jIChuX3R0eV9jbG9zZSk6IERvbid0IGJvdGhlciB3YWl0aW5nIHVudGlsIHRoZSBvdXRwdXQKLQkJZHJpdmVyIGlzIGNsb3NlZDsgaW4gZ2VuZXJhbCwgdGhlIGxpbmUgZGlzY2lwbGluZQotCQlzaG91bGRuJ3QgY2FyZSBpZiB0aGUgaGFyZHdhcmUgaXMgZmluaXNoZWQKLQkJdHJhbnNtaXR0aW5nIGJlZm9yZSB0aGUgbGluZSBkaXNjaXBsaW5lIHRlcm1pbmF0ZXMuCi0KLQkqIHR0eV9pby5jIChyZWxlYXNlX2Rldik6IFNodXRkb3duIHRoZSBsaW5lIGRpc2NpcGxpbmUgYWZ0ZXIKLQkJZGVjcmVtZW50aW5nIHRoZSB0dHkgY291bnQgdmFyaWFibGU7IGJ1dCBzZXQgdGhlCi0JCVRUWV9DTE9TSU5HIGZsYWcgc28gdGhhdCB3ZSBrbm93IHRoYXQgdGhpcyB0dHkgc3RydWN0dXJlCi0JCWlzbid0IGxvbmcgZm9yIHRoaXMgd29ybGQuCi0KLQkqIHR0eV9pby5jIChpbml0X2Rldik6IEFkZCBzYW5pdHkgY29kZSB0byBjaGVjayB0byBzZWUgaWYKLQkJVFRZX0NMT1NJTkcgaXMgc2V0IG9uIGEgdHR5IHN0cnVjdHVyZTsgaWYgc28sIHNvbWV0aGluZwotCQliYWQgaGFzIGhhcHBlbmVkIChwcm9iYWJseSBhIGxpbmUgZGlzY2lwbGluZSBjbG9zZSBibG9ja2VkCi0JCXdoZW4gaXQgc2hvdWxkbid0IGhhdmU7IHNvIGRvIGEga2VybmVsIHByaW50ayBhbmQgdGhlbgotCQlyZXR1cm4gYW4gZXJyb3IpLgotCi1XZWQgQXByIDI2IDEwOjIzOjQ0IDE5OTUgIFRoZW9kb3JlIFkuIFRzJ28gIDx0eXRzb0Bsb2NhbGhvc3Q+Ci0KLQkqIHR0eV9pby5jIChyZWxlYXNlX2Rldik6IFRyeSB0byBzaHV0ZG93biB0aGUgbGluZSBkaXNjaXBsaW5lCi0JCSpiZWZvcmUqIGRlY3JlbWVudGluZyB0aGUgdHR5IGNvdW50IHZhcmlhYmxlOyB0aGlzIHJlbW92ZXMKLQkJYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gd2hpY2ggb2NjdXJzIHdoZW4gdGhlIGxpbmUKLQkJZGlzY2lwbGluZSBjbG9zZSBibG9ja3MsIGFuZCBhbm90aGVyIHByb2Nlc3MgdGhlbiB0cmllcwotCQlvcGVuIHRoZSBzYW1lIHNlcmlhbCBwb3J0LgotCi0JKiBzZXJpYWwuYyAocnNfaGFuZ3VwKTogV2hlbiBoYW5naW5nIHVwLCBmbHVzaCB0aGUgb3V0cHV0IGJ1ZmZlcgotCQliZWZvcmUgc2h1dHRpbmcgZG93biB0aGUgVUFSVC4gIE90aGVyd2lzZSB0aGUgbGluZQotCQlkaXNjaXBsaW5lIGNsb3NlIGJsb2NrcyB3YWl0aW5nIGZvciB0aGUgY2hhcmFjdGVycyB0byBnZXQKLQkJZmx1c2hlZCwgd2hpY2ggbmV2ZXIgaGFwcGVucyB1bnRpbCB0aGUgc2VyaWFsIHBvcnQgZ2V0cyByZXVzZWQuCi0KLVdlZCBBcHIgMTIgMDg6MDY6MTYgMTk5NSAgVGhlb2RvcmUgWS4gVHMnbyAgPHR5dHNvQGxvY2FsaG9zdD4KLQotCSogc2VyaWFsLmMgKGRvX3NlcmlhbF9oYW5ndXAsIGRvX3NvZnRpbnQsIGNoZWNrX21vZGVtX3N0YXR1cywKLQkJcnNfaW5pdCk6ICBIYW5ndXBzIGFyZSBub3cgc2NoZWR1bGVkIHZpYSBhIHNlcGFyYXRlIHRxdWV1ZQotCQlzdHJ1Y3R1cmUgaW4gdGhlIGFzeW5jX3N0cnVjdCBzdHJ1Y3R1cmUsIHRxdWV1ZV9oYW5ndXAuCi0JCVRoaXMgdGFzayBpcyBwdXNoZWQgb24gdG8gdGhlIHRxX3NjaGVkdWxlIHF1ZXVlLCBzbyB0aGF0Ci0JCWl0IGlzIHByb2Nlc3NlZCBzeW5jaHJvbm91c2x5IGJ5IHRoZSBzY2hlZHVsZXIuCi0KLVNhdCBGZWIgMTggMTI6MTM6NTEgMTk5NSAgVGhlb2RvcmUgWS4gVHMnbyAgKHR5dHNvQHJ0LTExKQotCi0JKiB0dHlfaW8uYyAoZGlzYXNzb2NpYXRlX2N0dHksIHR0eV9vcGVuLCB0dHlfaW9jdGwpOiBDbGVhcgotCQljdXJyZW50LT50dHlfb2xkX3BncnAgZmllbGQgd2hlbiBhIHNlc3Npb24gbGVhZGVyCi0JCWFjcXVpcmVzIGEgY29udHJvbGxpbmcgdHR5LCBhbmQgYWZ0ZXIgYSBzZXNzaW9uIGxlYWRlcgotCQloYXMgZGlzYXNzb2NpYXRlZCBmcm9tIGEgY29udHJvbGxpbmcgdHR5LgotCi1GcmkgRmViIDE3IDA5OjM0OjA5IDE5OTUgIFRoZW9kb3JlIFkuIFRzJ28gICh0eXRzb0BydC0xMSkKLQotCSogc2VyaWFsLmMgKHJzX2ludGVycnVwdF9zaW5nbGUsIHJzX2ludGVycnVwdCwgcnNfaW50ZXJydXB0X211bHRpKTogCi0JCUNoYW5nZSB0aGUgbnVtYmVyIG9mIHBhc3NlcyBtYWRlIGZyb20gNjQgdG8gYmUgMjU2LAotCQljb25maWd1cmFibGUgd2l0aCB0aGUgI2RlZmluZSBSU19JU1JfUEFTU19MSU1JVC4KLQotCSogc2VyaWFsLmMgKHJzX2luaXQsIHNldF9zZXJpYWxfaW5mbywgZ2V0X3NlcmlhbF9pbmZvLCByc19jbG9zZSk6Ci0JCVJlbW92ZSBzdXBwb3J0IGZvciBjbG9zaW5nX3dhaXQyLiAgSW5zdGVhZCwgc2V0Ci0JCXR0eS0+Y2xvc2luZyBhbmQgcmVseSBvbiB0aGUgbGluZSBkaXNjaXBsaW5lIHRvIHByZXZlbnQKLQkJZWNobyB3YXJzLgotCi0JKiBuX3R0eS5jIChuX3R0eV9yZWNlaXZlX2NoYXIpOiAgSUVYVEVOIGRvZXMgbm90IG5lZWQgdG8gYmUKLQkJZW5hYmxlZCBpbiBvcmRlciBmb3IgSVhBTlkgdG8gYmUgYWN0aXZlLgotCi0JCUlmIHR0eS0+Y2xvc2luZyBpcyBzZXQsIHRoZW4gb25seSBwcm9jZXNzIFhPTiBhbmQgWE9GRgotICAgICAgICAgICAgICAgIGNoYXJhY3RlcnMuCi0KLVN1biBGZWIgMTIgMjM6NTc6NDggMTk5NSAgVGhlb2RvcmUgWS4gVHMnbyAgKHR5dHNvQHJ0LTExKQotCi0JKiBzZXJpYWwuYyAocnNfdGltZXIpOiBDaGFuZ2UgdGhlIGludGVycnVwdCBwb2xsIHRpbWUgZnJvbSA2MAotCQlzZWNvbmRzIHRvIDEwIHNlY29uZHMsIGNvbmZpZ3VyYWJsZSB3aXRoIHRoZSAjZGVmaW5lCi0JCVJTX1NUUk9CRV9USU1FLgotCi0JKiBzZXJpYWwuYyAocnNfaW50ZXJydXB0X211bHRpLCBzdGFydHVwLCBzaHV0ZG93biwgcnNfaW9jdGwsCi0JCXNldF9tdWx0aXBvcnRfc3RydWN0LCBnZXRfbXVsdGlwb3J0X3N0cnVjdCk6IEFkZAotCQlwcm92aXNpb25zIGZvciBhIG5ldyB0eXBlIG9mIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUsCi0JCXdoaWNoIGJldHRlciBzdXBwb3J0cyBtdWx0aXBsZSBzZXJpYWwgcG9ydHMgb24gYSBzaW5nbGUKLQkJSVJRLiAgCi0KLVN1biBGZWIgIDUgMTk6MzU6MTEgMTk5NSAgVGhlb2RvcmUgWS4gVHMnbyAgKHR5dHNvQHJ0LTExKQotCi0JKiB0dHlfaW9jdGwuYyAobl90dHlfaW9jdGwsIHNldF90ZXJtaW9zLCB0dHlfd2FpdF91bnRpbF9zZW50KTogCi0JKiBzZXJpYWwuYyAocnNfaW9jdGwsIHJzX2Nsb3NlKTogCi0JKiBjeWNsYWRlcy5jIChjeV9pb2N0bCwgY3lfY2xvc2UpOiAKLQkqIG5fdHR5LmMgKG5fdHR5X2Nsb3NlKTogIFJlbmFtZSB3YWl0X3VudGlsX3NlbnQgdG8KLQkJdHR5X3dhaXRfdW50aWxfc2VudCwgc28gdGhhdCBpdCdzIGEgYmV0dGVyIG5hbWUgdG8gZXhwb3J0Ci0JCWluIGtzeW1zLmMuCi0KLVNhdCBGZWIgIDQgMjM6MzY6MjAgMTk5NSAgVGhlb2RvcmUgWS4gVHMnbyAgKHR5dHNvQHJ0LTExKQotCi0JKiBzZXJpYWwuYyAocnNfY2xvc2UpOiBBZGRlZCBtaXNzaW5nIGNoZWNrIGZvciBjbG9zaW5nX3dhaXQyIGJlaW5nCi0JCUFTWU5DX0NMT1NJTkdfV0FJVF9OT05FLgotCi1UaHUgSmFuIDI2IDA5OjAyOjQ5IDE5OTUgIFRoZW9kb3JlIFkuIFRzJ28gICh0eXRzb0BydC0xMSkKLQotCSogc2VyaWFsLmMgKHJzX2luaXQsIHNldF9zZXJpYWxfaW5mbywgZ2V0X3NlcmlhbF9pbmZvLAotCQlyc19jbG9zZSk6IFN1cHBvcnQgY2xvc2Vfd2FpdCBpbiB0aGUgc2VyaWFsIGRyaXZlci4KLQkJVGhpcyBpcyBoZWxwZnVsIGZvciBzbG93IGRldmljZXMgKGxpa2Ugc2VyaWFsCi0JCXBsb3R0ZXJzKSBzbyB0aGF0IHRoZWlyIG91dHB1dHMgZG9uJ3QgZ2V0IGZsdXNoZWQgdXBvbgotCQlkZXZpY2UgY2xvc2UuICBUaGlzIGhhcyB0byBiZSBjb25maWd1cmFibGUgYmVjYXVzZQotCQlub3JtYWxseSB3ZSBkb24ndCB3YW50IHBvcnRzIHRvIGJlIGh1bmcgdXAgZm9yIGxvbmcKLQkJcGVyaW9kcyBvZiB0aW1lIGR1cmluZyBhIGNsb3NlIHdoZW4gdGhleSBhcmUgbm90Ci0JCWNvbm5lY3RlZCB0byBhIGRldmljZSwgb3IgdGhlIGRldmljZSBpcyBwb3dlcmVkIG9mZi4KLQotCQlUaGUgZGVmYXVsdCBpcyB0byB3YWl0IDMwIHNlY29uZHM7IGluIHRoZSBjYXNlIG9mIGEKLQkJdmVyeSBzbG93IGRldmljZSwgdGhlIGNsb3NlX3dhaXQgdGltZW91dCBzaG91bGQgYmUKLQkJbGVuZ3RoZW5lZC4gIElmIGl0IGlzIHNldCB0byAwLCB0aGUga2VybmVsIHdpbGwgd2FpdAotCQlmb3JldmVyIGZvciBhbGwgb2YgdGhlIGRhdGEgdG8gYmUgdHJhbnNtaXR0ZWQuCi0KLVRodSBKYW4gMTcgMDE6MTc6MjAgMTk5NSAgVGhlb2RvcmUgWS4gVHMnbyAgKHR5dHNvQHJ0LTExKQotCi0JKiBzZXJpYWwuYyAoc3RhcnR1cCwgY2hhbmdlX3NwZWVkLCByc19pbml0KTogQWRkIHN1cHBvcnQgdG8gZGV0ZWN0Ci0JCXRoZSBTdGFyVGVjaCAxNjY1MCBjaGlwLiAgVHJlYXQgaXQgYXMgYSAxNjQ1MCBmb3Igbm93LAotCQliZWNhdXNlIG9mIGl0cyBGSUZPIGJ1Z3MuCi0KLVRodSBKYW4gIDUgMjE6MjE6NTcgMTk5NSAgPGRhaGluZHNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotCi0JKiBzZXJpYWwuYzogKHJlY2VpdmVfY2hhcik6IEFkZGVkIGNvdW50ZXIgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wCi0JCXdoZW4gYSBQQ01DSUEgc2VyaWFsIGRldmljZSBpcyBlamVjdGVkLgotCi1UaHUgRGVjIDI5IDE3OjUzOjQ4IDE5OTQgICAgPHR5dHNvQHJzeC0xMS5taXQuZWR1PgotCi0JKiB0dHlfaW8uYyAoY2hlY2tfdHR5X2NvdW50KTogTmV3IHByb2NlZHVyZSB3aGljaCBjaGVja3MKLQkJdHR5LT5jb3VudCB0byBtYWtlIHN1cmUgdGhhdCBpdCBtYXRjaGVzIHdpdGggdGhlIG51bWJlciBvZgotCQlvcGVuIGZpbGUgZGVzY3JpcHRvcnMgd2hpY2ggcG9pbnQgYXQgdGhlIHN0cnVjdHVyZS4gIElmCi0JCXRoZSBudW1iZXIgZG9lc24ndCBtYXRjaCwgaXQgcHJpbnRzIGEgd2FybmluZyBtZXNzYWdlLgotCi1XZWQgRGVjIDI4IDE1OjQxOjUxIDE5OTQgICAgPHR5dHNvQHJzeC0xMS5taXQuZWR1PgotCi0JKiB0dHlfaW8uYyAoZG9fdHR5X2hhbmd1cCwgZGlzYXNzb2NpYXRlX2N0dHkpOiBBdCBoYW5ndXAgdGltZSwKLQkJc2F2ZSB0aGUgdHR5J3MgY3VycmVudCBmb3JlZ3JvdW5kIHByb2Nlc3MgZ3JvdXAgaW4gdGhlCi0JCXNlc3Npb24gbGVhZGVyJ3MgdGFzayBzdHJ1Y3R1cmUuICBXaGVuIHRoZSBzZXNzaW9uIGxlYWRlcgotCQl0ZXJtaW5hdGVzLCBzZW5kIGEgU0lHSFVQLCBTSUdDT05UIHRvIHRoYXQgcHJvY2VzcyBncm91cC4KLQkJVGhpcyBpcyBub3QgcmVxdWlyZWQgYnkgUE9TSVgsIGJ1dCBpdCdzIG5vdCBwcm9oaWJpdGVkCi0JCWVpdGhlciwgYW5kIGl0IGFwcGVhcnMgdG8gYmUgdGhlIGxlYXN0IGludHJ1c2l2ZSB3YXkKLQkJdG8gZml4IGEgcHJvYmxlbSB0aGF0IGRpYWx1cCBzZXJ2ZXJzIGhhdmUgd2l0aAotCQlvcnBoYW5lZCBwcm9jZXNzIGdyb3VwcyBjYXVzZWQgYnkgbW9kZW0gaGFuZ3Vwcy4KLQotVGh1IERlYyAgOCAxNDo1MjoxMSAxOTk0ICAgIDx0eXRzb0Byc3gtMTEubWl0LmVkdT4KLQotCSogc2VyaWFsLmMgKHJzX2lvY3RsKTogRG9uJ3QgYWxsb3cgbW9zdCBpb2N0bCdzIGlmIHRoZSBzZXJpYWwgcG9ydAotCQlpc24ndCBpbml0aWFsaXplZC4KLQotCSogc2VyaWFsLmMgKHJzX2Nsb3NlKTogRG9uJ3QgY2xlYXIgdGhlIElFUiBpZiB0aGUgc2VyaWFsIHBvcnQKLQkJaXNuJ3QgaW5pdGlhbGl6ZWQuIAotCi0JKiBzZXJpYWwuYyAoYmxvY2tfdGlsX3JlYWR5KTogRG9uJ3QgdHJ5IHRvIGJsb2NrIG9uIHRoZSBkaWFsaW4KLQkJcG9ydCBpZiB0aGUgc2VyaWFsIHBvcnQgaXNuJ3QgaW5pdGlhbGl6ZWQuCi0KLVdlZCBEZWMgIDcgMTA6NDg6MzAgMTk5NCAgU2kgUGFyayAoc2lAd2ltcG9sLmRlbW9uLmNvLnVrKQotCSogdHR5X2lvLmMgKHR0eV9yZWdpc3Rlcl9kcml2ZXIpOiBGaXggYnVnIHdoZW4gbGlua2luZyBvbnRvCi0JCXRoZSB0dHlfZHJpdmVycyBsaXN0LiBXZSBub3cgdGVzdCB0aGF0IHRoZXJlIGFyZSBlbGVtZW50cwotCQlhbHJlYWR5IG9uIHRoZSBsaXN0IGJlZm9yZSBzZXR0aW5nIHRoZSBiYWNrIGxpbmsgZnJvbSB0aGUKLQkJZmlyc3QgZWxlbWVudCB0byB0aGUgbmV3IGRyaXZlci4KLQotCSogdHR5X2lvLmMgKHR0eV91bnJlZ2lzdGVyX2RyaXZlcik6IEZpeCBidWcgaW4gdW5saW5raW5nIHRoZQotCQlzcGVjaWZpZWQgZHJpdmVyIGZyb20gdGhlIHR0eV9kcml2ZXJzIGxpc3QuIFdlIHdlcmUgbm90Ci0JCXNldHRpbmcgdGhlIGJhY2sgbGluayBjb3JyZWN0bHkuIFRoaXMgdXNlZCB0byByZXN1bHQgaW4KLQkJYSBkYW5nbGluZyBiYWNrIGxpbmsgcG9pbnRlciBhbmQgY2F1c2UgcGFuaWNzIG9uIHRoZSBuZXh0Ci0JCWNhbGwgdG8gZ2V0X3R0eV9kcml2ZXIoKS4KLQotVHVlIE5vdiAyOSAxMDoyMTowOSAxOTk0ICBUaGVvZG9yZSBZLiBUcydvICAodHl0c29AcnQtMTEpCi0KLQkqIHR0eV9pby5jICh0dHlfdW5yZWdpc3Rlcl9kcml2ZXIpOiBGaXggYnVnIGluCi0JCXR0eV91bnJlZ2lzdGVyX2RyaXZlciB3aGVyZSB0aGUgcG9pbnRlciB0byB0aGUgcmVmY291bnQgaXMKLQkJdGVzdGVkLCBpbnN0ZWFkIG9mIHRoZSByZWZjb3VudCBpdHNlbGYuICBUaGlzIGNhdXNlZAotCQl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIgdG8gYWx3YXlzIHJldHVybiBFQlVTWS4KLQotU2F0IE5vdiAyNiAxMTo1OToyNCAxOTk0ICBUaGVvZG9yZSBZLiBUcydvICAodHl0c29AcnQtMTEpCi0KLQkqIHR0eV9pby5jICh0dHlfaW9jdGwpOiBBZGQgc3VwcG9ydCBmb3IgdGhlIG5ldyBpb2N0bAotCQlUSU9DVFRZR1NUUlVDVCwgd2hpY2ggYWxsb3cgYSBrZXJuZWwgZGVidWdnaW5nIHByb2dyYW0KLQkJZGlyZWN0IHJlYWQgYWNjZXNzIHRvIHRoZSB0dHkgYW5kIHR0eV9kcml2ZXIgc3RydWN0dXJlcy4KLQotRnJpIE5vdiAyNSAxNzoyNjoyMiAxOTk0ICBUaGVvZG9yZSBZLiBUcydvICAodHl0c29AcnQtMTEpCi0KLQkqIHNlcmlhbC5jIChyc19zZXRfdGVybWlvcyk6IERvbid0IHdha2UgdXAgcHJvY2Vzc2VzIGJsb2NrZWQgaW4KLQkJb3BlbiB3aGVuIHRoZSBDTE9DQUwgZmxhZyBjaGFuZ2VzLCBzaW5jZSBhIGJsb2NraW5nCi0JCW9wZW4gb25seSBzYW1wbGVzIHRoZSBDTE9DQUwgZmxhZyBvbmNlIHdoZW4gaXQgYmxvY2tzLAotCQlhbmQgZG9lc24ndCBjaGVjayBpdCBhZ2Fpbi4gIChuLmIuICBGcmVlQlNEIGhhcyBhCi0JCWRpZmZlcmVudCBiZWhhdmlvciBmb3IgYmxvY2tpbmcgb3BlbnM7IGl0J3Mgbm90IGNsZWFyCi0JCXdoZXRoZXIgTGludXggb3IgRnJlZUJTRCdzIGludGVycHJldGF0aW9uIGlzIGNvcnJlY3QuCi0JCVBPU0lYIGRvZXNuJ3QgZ2l2ZSBjbGVhciBndWlkYW5jZSBvbiB0aGlzIGlzc3VlLCBzbwotCQl0aGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZS4uLi4pCi0KLQkqIHNlcmlhbC5jIChibG9ja190aWxfcmVhZHkpOiBVc2UgdGhlIGNvcnJlY3QgdGVybWlvcyBzdHJ1Y3R1cmUgdG8KLQkJY2hlY2sgdGhlIENMT0NBTCBmbGFnLiAgSWYgdGhlIGN1YVhYIGRldmljZSBpcyBhY3RpdmUsCi0JCXRoZW4gY2hlY2sgdGhlIHNhdmVkIHRlcm1pb3MgZm9yIHRoZSB0dHlTWFggZGV2aWNlLgotCQlPdGhlcndpc2UsIHVzZSB0aGUgY3VycmVudGx5IGFjdGl2ZSB0ZXJtaW9zIHN0cnVjdHVyZS4KLQotU3VuIE5vdiAgNiAyMTowNTo0NCAxOTk0ICBUaGVvZG9yZSBZLiBUcydvICAodHl0c29AcnQtMTEpCi0KLQkqIHNlcmlhbC5jIChjaGFuZ2Vfc3BlZWQpOiBBZGQgc3VwcG9ydCBmb3IgZGlyZWN0IGFjY2VzcyBvZgotCQk1Nyw2MDAgYW5kIDExNSwyMDAgYnBzLgotCi1XZWQgTm92ICAyIDEwOjMyOjM2IDE5OTQgIFRoZW9kb3JlIFkuIFRzJ28gICh0eXRzb0BydC0xMSkKLQotCSogbl90dHkuYyAobl90dHlfcmVjZWl2ZV9yb29tKTogT25seSBhbGxvdyBleGNlc3MgY2hhcmFjdGVycwotCQl0aHJvdWdoIGlmIHdlIGFyZSBpbiBJQ0FOT04gbW9kZSAqYW5kKiB0aGVyZSBhcmUgb3RoZXIgbm8KLQkJcGVuZGluZyBsaW5lcyBpbiB0aGUgYnVmZmVyLiAgT3RoZXJ3aXNlIGN1dCBhbmQgcGFzdGUgb3ZlcgotCQk0ayBicmVha3MuCi0KLVNhdCBPY3QgMjkgMTg6MTc6MzQgMTk5NCAgVGhlb2RvcmUgWS4gVHMnbyAgKHR5dHNvQHJ0LTExKQotCi0JKiBzZXJpYWwuYyAocnNfaW9jdGwsIGdldF9sc3JfaW5mbyk6IEFkZGVkIHBhdGNoIHN1Z2dlc3RlZCBieSBBcm5lCi0JCVJpaWJlciBzbyB0aGF0IHVzZXIgbW9kZSBwcm9ncmFtcyBjYW4gdGVsbCB3aGVuIHRoZQotCQl0cmFuc21pdHRlciBzaGlmdCByZWdpc3RlciBpcyBlbXB0eS4KLQotVGh1IE9jdCAyNyAyMzoxNDoyOSAxOTk0ICBUaGVvZG9yZSBZLiBUcydvICAodHl0c29AcnQtMTEpCi0KLQkqIHR0eV9pb2N0bC5jICh3YWl0X3VudGlsX3NlbnQpOiBBZGRlZCBkZWJ1Z2dpbmcgcHJpbnRrIHN0YXRlbWVudHMKLQkJKHVuZGVyIHRoZSAjaWZkZWYgVFRZX0RFQlVHX1dBSVRfVU5USUxfU0VOVCkgIAotCi0JKiBzZXJpYWwuYyAocnNfaW50ZXJydXB0LCByc19pbnRlcnJ1cHRfc2luZ2xlLCByZWNlaXZlX2NoYXJzLAotCQljaGFuZ2Vfc3BlZWQsIHJzX2Nsb3NlKTogcnNfY2xvc2Ugbm93IGRpc2FibGVzIHJlY2VpdmVyCi0JCWludGVycnVwdHMgd2hlbiBjbG9zaW5nIHRoZSBzZXJpYWwgcG9ydC4gIFRoaXMgYWxsb3dzIHRoZQotCQlzZXJpYWwgcG9ydCB0byBjbG9zZSBxdWlja2x5IHdoZW4gTGludXggYW5kIGEgbW9kZW0gKG9yIGEKLQkJbW91c2UpIGFyZSBlbmdhZ2VkIGluIGFuIGVjaG8gd2FyOyB3aGVuIGNsb3NpbmcgdGhlIHNlcmlhbAotCQlwb3J0LCB3ZSBub3cgZmlyc3Qgc3RvcCBsaXN0ZW5pbmcgdG8gaW5jb21pbmcgY2hhcmFjdGVycywKLQkJYW5kICp0aGVuKiB3YWl0IGZvciB0aGUgdHJhbnNtaXQgYnVmZmVyIHRvIGRyYWluLiAgCi0KLQkJSW4gb3JkZXIgdG8gbWFrZSB0aGlzIGNoYW5nZSwgdGhlIGluZm8tPnJlYWRfc3RhdHVzX21hc2sKLQkJaXMgbm93IHVzZWQgdG8gY29udHJvbCB3aGF0IGJpdHMgb2YgdGhlIGxpbmUgc3RhdHVzCi0JCXJlZ2lzdGVyIGFyZSBsb29rZWQgYXQgaW4gdGhlIGludGVycnVwdCByb3V0aW5lIGluIGFsbAotCQljYXNlczsgcHJldmlvdXNseSBpdCB3YXMgb25seSB1c2VkIGluIHJlY2VpdmVfY2hhcnMgdG8KLQkJc2VsZWN0IGEgZmV3IG9mIHRoZSBzdGF0dXMgYml0cy4KLQotTW9uIE9jdCAyNCAyMzozNjoyMSAxOTk0ICBUaGVvZG9yZSBZLiBUcydvICAodHl0c29AcnQtMTEpCi0KLQkqIHNlcmlhbC5jIChyc19jbG9zZSk6IEFkZCBhIHRpbWVvdXQgdG8gdGhlIHRyYW5zbWl0dGVyIGZsdXNoCi0JCWxvb3A7IHRoaXMgaXMganVzdCBhIHNhbml0eSBjaGVjayBpbiBjYXNlIHdlIGhhdmUgZmxha3kKLQkJKG9yIG5vbi1leGlzdGVudC1idXQtY29uZmlndXJlZC1ieS10aGUtdXNlcikgaGFyZHdhcmUuCi0KLUZyaSBPY3QgMjEgMDk6Mzc6MjMgMTk5NCAgVGhlb2RvcmUgWS4gVHMnbyAgKHR5dHNvQHJ0LTExKQotCi0JKiB0dHlfaW8uYyAodHR5X2Zhc3luYyk6IFdoZW4gYXN5bmNocm9ub3VzIEkvTyBpcyBlbmFibGVkLCBpZiB0aGUKLQkJcHJvY2VzcyBvciBwcm9jZXNzIGdyb3VwIGhhcyBub3QgYmUgc3BlY2lmaWVkIHlldCwgc2V0IGl0Ci0JCXRvIGJlIHRoZSB0dHkncyBwcm9jZXNzIGdyb3VwLCBvciBpZiB0aGF0IGlzIG5vdCB5ZXQgc2V0LAotCQl0byB0aGUgY3VycmVudCBwcm9jZXNzJ3MgcGlkLgotCi1UaHUgT2N0IDIwIDIzOjE3OjI4IDE5OTQgIFRoZW9kb3JlIFkuIFRzJ28gICh0eXRzb0BydC0xMSkKLQotCSogbl90dHkuYyAobl90dHlfcmVjZWl2ZV9yb29tKTogSWYgd2UgYXJlIGRvaW5nIGlucHV0Ci0JCWNhbm9uaWNhbGl6YXRpb24sIGxldCBhcyBtYW55IGNoYXJhY3RlcnMgdGhyb3VnaCBhcwotCQlwb3NzaWJsZSwgc28gdGhhdCB0aGUgZXhjZXNzIGNoYXJhY3RlcnMgY2FuIGJlICJiZWVwZWQiLgotCi1UdWUgT2N0IDE4IDEwOjAyOjQzIDE5OTQgIFRoZW9kb3JlIFkuIFRzJ28gICh0eXRzb0BydC0xMSkKLQotCSogc2VyaWFsLmMgKHJzX3N0YXJ0KTogUmVtb3ZlZCBhbiBpbmNvcnJlY3QgJyEnIHRoYXQgd2FzCi0JCXByZXZlbnRpbmcgdHJhbnNtaXQgaW50ZXJydXB0cyBmcm9tIGJlaW5nIHJlLWVuYWJsZWQgaW4KLQkJcnNfc3RhcnQoKS4gIEZvcnR1bmF0ZWx5IGluIG1vc3QgY2FzZXMgaXQgd291bGQgYmUKLQkJcmUtZW5hYmxlZCBlbHNld2hlcmUsIGJ1dCB0aGlzIHN0aWxsIHNob3VsZCBiZSBmaXhlZAotCQljb3JyZWN0bHkuCi0KLVN1biBPY3QgIDkgMjM6NDY6MDMgMTk5NCAgVGhlb2RvcmUgWS4gVHMnbyAgKHR5dHNvQHJ0LTExKQotCi0JKiB0dHlfaW8uYyAoZG9fdHR5X2hhbmd1cCk6IElmIHRoZSB0dHkgZHJpdmVyIGZsYWdzCi0JCVRUWV9EUklWRVJfUkVTRVRfVEVSTUlPUyBpcyBzZXQsIHRoZW4gcmVzZXQgdGhlIHRlcm1pb3MKLQkJc2V0dGluZ3MgYmFjayB0byB0aGUgZHJpdmVyJ3MgaW5pdGlhbCBjb25maWd1cmF0aW9uLiAgVGhpcwotCQlhbGxvd3MgdGhlIHRlcm1pb3Mgc2V0dGluZ3MgdG8gYmUgcmVzZXQgZXZlbiBpZiBhIHByb2Nlc3MKLQkJaGFzIGh1bmcgdXAgZmlsZSBkZXNjcmlwdG9ycyBrZWVwaW5nIGEgcHR5J3MgdGVybWlvcyBmcm9tCi0JCWJlaW5nIGZyZWVkIGFuZCByZXNldC4KLQotCSogdHR5X2lvLmMgKHJlbGVhc2VfZGV2KTogRml4IG1lbW9yeSBsZWFrLiAgVGhlIHB0eSdzIG90aGVyCi0JCXRlcm1pb3Mgc3RydWN0dXJlIHNob3VsZCBhbHNvIGJlIGZyZWVkLgotCi0JKiBzZXJpYWwuYyAocnNfY2xvc2UsIHNodXRkb3duKTogQ2hhbmdlIGhvdyB3ZSB3YWl0IGZvciB0aGUKLQkJdHJhbnNtaXR0ZXIgdG8gY29tcGxldGVseSBkcmFpbiBiZWZvcmUgc2h1dHRpbmcgZG93biB0aGUKLQkJc2VyaWFsIHBvcnQuICBXZSBub3cgZG8gaXQgYnkgc2NoZWR1bGluZyBpbiBhbm90aGVyCi0JCXByb2Nlc3MgaW5zdGVhZCBvZiBidXN5IGxvb3Bpbmcgd2l0aCB0aGUgaW50ZXJydXB0cyB0dXJuZWQKLQkJb24uICBUaGlzIG1heSBlbGltaW5hdGUgc29tZSByYWNlIGNvbmRpdGlvbiBwcm9ibGVtcyB0aGF0Ci0JCXNvbWUgcGVvcGxlIHNlZW0gdG8gYmUgcmVwb3J0aW5nLgotCi1TdW4gU2VwIDI1IDE0OjE4OjE0IDE5OTQgIFRoZW9kb3JlIFkuIFRzJ28gICh0eXRzb0BydC0xMSkKLQotCSogdHR5X2lvLmMgKHJlbGVhc2VfZGV2KTogV2hlbiBmcmVlaW5nIGEgdHR5IG1ha2Ugc3VyZSB0aGF0IGJvdGgKLQkJdGhlIHR0eSBhbmQgdGhlIG9fdHR5IChpZiBwcmVzZW50KSBhcmVuJ3QgYSBwcm9jZXNzJ3MKLQkJY29udHJvbGxpbmcgdHR5LiAgKFByZXZpb3VzbHksIHdlIG9ubHkgY2hlY2tlZCB0aGUgdHR5LikKLQotCSogc2VyaWFsLmMgKGNoYW5nZV9zcGVlZCk6IE9ubHkgZW5hYmxlIHRoZSBNb2RlbSBTdGF0dXMKLQkJSW50ZXJydXB0IGZvciBhIHBvcnQgaWYgQ0xPQ0FMIGlzIG5vdCBzZXQgb3IgQ1JUU0NUUwotCQlpcyBzZXQuICBJZiB3ZSdyZSBub3QgY2hlY2tpbmcgdGhlIGNhcnJpZXIgZGV0ZWN0IGFuZAotCQlDVFMgbGluZSwgdGhlcmUncyBubyBwb2ludCBpbiBlbmFibGluZyB0aGUgbW9kZW0KLQkJc3RhdHVzIGludGVycnVwdC4gIFRoaXMgd2lsbCBzYXZlIHNwdXJpb3VzIGludGVycnVwdHMKLQkJZnJvbSBzbG93aW5nIGRvd24gc3lzdGVtcyB3aG8gaGF2ZSB0ZXJtaW5hbHMgdGhhdAotCQlkb24ndCBzdXBwb3J0IGVpdGhlciBsaW5lLiAgKE9mIGNvdXJzZSwgaWYgeW91IHdhbnQKLQkJb25seSBvbmUgb2YgQ0QgYW5kIENUUyBzdXBwb3J0LCB5b3Ugd2lsbCBuZWVkIGEKLQkJcHJvcGVybHkgd2lyZWQgc2VyaWFsIGNhYmxlLikKLQotVGh1IFNlcCAyMiAwODozMjo0OCAxOTk0ICBUaGVvZG9yZSBZLiBUcydvICAodHl0c29AcnQtMTEpCi0KLQkqIHR0eV9pby5jIChkb19TQUspOiBSZXR1cm4gaWYgdHR5IGlzIG51bGwuCi0KLQkqIHR0eV9pby5jIChfdHR5X25hbWUpOiBSZXR1cm4gIk5VTEwgdHR5IiBpZiB0aGUgcGFzc2VkIGluIHR0eSBpcwotCQlOVUxMLgotCi1TYXQgU2VwIDE3IDEzOjE5OjI1IDE5OTQgIFRoZW9kb3JlIFkuIFRzJ28gICh0eXRzb0BydC0xMSkKLQotCSogdHR5X2lvY3RsLmMgKG5fdHR5X2lvY3RsKTogRml4IFRJT0NHTENLVFJNSU9TIGFuZAotCQlUSU9DU0xDS1RSTUlPUywgd2hpY2ggd2VyZSB0b3RhbGx5IGJyb2tlbi4gIFJlbW92ZQotCQlleHRyYSBpbmRpcmVjdGlvbiBmcm9tIGFyZ3VtZW50OyBpdCBzaG91bGQgYmUgYSBzdHJ1Y3QKLQkJdGVybWlvcyAqLCBub3QgYSBzdHJ1Y3QgdGVybWlvcyAqKi4KLQkJJnJlYWxfdHR5LT50ZXJtaW9zX2xvY2tlZCBzaG91bGQgaGF2ZSBiZWVuCi0JCXJlYWxfdHR5LT50ZXJtaW9zX2xvY2tlZC4gIFRoaXMgY2F1c2VkIHVzIHRvIGJlCi0JCXJlYWRpbmcgYW5kIHdyaXRpbmcgdGhlIHRlcm1pb3NfbG9ja2VkIHN0cnVjdHVyZSB0bwotCQlyYW5kb20gcGxhY2VzIGluIGtlcm5lbCBtZW1vcnkuICAKLQotCSogdHR5X2lvLmMgKHJlbGVhc2VfZGV2KTogT29wcyEgIEZvcmdvdCB0byBkZWxldGUgYSBjcml0aWNhbCBrZnJlZQotCQlvZiB0aGUgbG9ja2VkX3Rlcm1pb3MuICBUaGlzIGxlYXZlcyB0aGUgbG9ja2VkX3Rlcm1pb3MKLQkJc3RydWN0dXJlIHBvaW50ZWQgYXQgYSBmcmVlZCBvYmplY3QuICAKLQotRnJpIFNlcCAxNiAwODoxMzoyNSAxOTk0ICBUaGVvZG9yZSBZLiBUcydvICAodHl0c29AcnQtMTEpCi0KLQkqIHR0eV9pby5jICh0dHlfb3Blbik6IERvbid0IGNoZWNrIGZvciBhbiBleGNsdXNpdmUgb3BlbiB1bnRpbAotCQlhZnRlciB0aGUgZGV2aWNlIHNwZWNpZmljIG9wZW4gcm91dGluZSBoYXMgYmVlbiBjYWxsZWQuCi0JCU90aGVyd2lzZSwgdGhlIHNlcmlhbCBkZXZpY2UgcmVmIGNvdW50aW5nIHdpbGwgYmUgc2NyZXdlZAotCQl1cC4KLQotCSogc2VyaWFsLmMgKHJzX29wZW4sIGJsb2NrX3RpbF9yZWFkeSk6IERvbid0IHNldCB0ZXJtaW9zIHN0cnVjdHVyZQotCQl1bnRpbCBhZnRlciBibG9ja190aWxfcmVhZHkgaGFzIHJldHVybmVkIHN1Y2Nlc3NmdWxseS4KLQkJTW9kaWZ5IGJsb2NrX3RpbF9yZWFkeSB0byBjaGVjayB0aGUgbm9ybWFsX3Rlcm1pb3MKLQkJc3RydWN0dXJlIGRpcmVjdGx5LCBzbyBpdCBkb2Vzbid0IHJlbHkgb24gdGVybWlvcyBiZWluZwotCQlzZXQgYmVmb3JlIGl0J3MgY2FsbGVkLgotCi1UaHUgU2VwIDE1IDIzOjM0OjAxIDE5OTQgIFRoZW9kb3JlIFkuIFRzJ28gICh0eXRzb0BydC0xMSkKLQotCSogc2VyaWFsLmMgKHJzX2Nsb3NlKTogVHVybiBvZmYgaW50ZXJydXB0cyBkdXJpbmcgcnNfY2xvc2UoKSB0bwotCQlwcmV2ZW50IGEgcmFjZSBjb25kaXRpb24gd2l0aCB0aGUgaGFuZ3VwIGNvZGUgKHdoaWNoCi0JCXJ1bnMgZHVyaW5nIGEgc29mdHdhcmUgaW50ZXJydXB0KS4KLQotCSogdHR5X2lvLmMgKHJlbGVhc2VfZGV2KTogRG9uJ3QgZnJlZSB0aGUgbG9ja2VkX3Rlcm1pb3Mgc3RydWN0dXJlOwotCQlpdHMgc3RhdGUgbXVzdCBiZSByZXRhaW5lZCBhY3Jvc3MgZGV2aWNlIG9wZW5zLgotCi0KLQkqIHR0eV9pby5jICh0dHlfdW5yZWdpc3Rlcl9kcml2ZXIpOiBBZGRlZCBmdW5jdGlvbiB0byB1bnJlZ2lzdGVyIGEKLQkJdHR5IGRyaXZlci4gIChGb3IgbG9hZGFibGUgZGV2aWNlIGRyaXZlcnMuKQotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMgYi9kcml2ZXJzL2NoYXIvYWdwL2ludGVsLWFncC5jCmluZGV4IDhhNzEzZjEuLmEzZTEwZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9hZ3AvaW50ZWwtYWdwLmMKKysrIGIvZHJpdmVycy9jaGFyL2FncC9pbnRlbC1hZ3AuYwpAQCAtMTEsNiArMTEsOSBAQAogI2luY2x1ZGUgPGFzbS9zbXAuaD4KICNpbmNsdWRlICJhZ3AuaCIKIAoraW50IGludGVsX2FncF9lbmFibGVkOworRVhQT1JUX1NZTUJPTChpbnRlbF9hZ3BfZW5hYmxlZCk7CisKIC8qCiAgKiBJZiB3ZSBoYXZlIEludGVsIGdyYXBoaWNzLCB3ZSdyZSBub3QgZ29pbmcgdG8gaGF2ZSBhbnl0aGluZyBvdGhlciB0aGFuCiAgKiBhbiBJbnRlbCBJT01NVS4gU28gbWFrZSB0aGUgY29ycmVjdCB1c2Ugb2YgdGhlIFBDSSBETUEgQVBJIGNvbnRpbmdlbnQKQEAgLTY1LDYgKzY4LDEwIEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSVJPTkxBS0VfTUFfSEIJICAgIDB4MDA2MgogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lST05MQUtFX01DMl9IQiAgICAweDAwNmEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JUk9OTEFLRV9NX0lHCSAgICAweDAwNDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9TQU5EWUJSSURHRV9IQiAgMHgwMTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfU0FORFlCUklER0VfSUcgIDB4MDEwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1NBTkRZQlJJREdFX01fSEIgIDB4MDEwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1NBTkRZQlJJREdFX01fSUcgIDB4MDEwNgogCiAvKiBjb3ZlciA5MTUgYW5kIDk0NSB2YXJpYW50cyAqLwogI2RlZmluZSBJU19JOTE1IChhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0U3MjIxX0hCIHx8IFwKQEAgLTk5LDcgKzEwNiw5IEBACiAJCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSVJPTkxBS0VfRF9IQiB8fCBcCiAJCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSVJPTkxBS0VfTV9IQiB8fCBcCiAJCWFncF9icmlkZ2UtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSU5URUxfSVJPTkxBS0VfTUFfSEIgfHwgXAotCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lST05MQUtFX01DMl9IQikKKwkJYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9JUk9OTEFLRV9NQzJfSEIgfHwgXAorCQlhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX1NBTkRZQlJJREdFX0hCIHx8IFwKKwkJYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9TQU5EWUJSSURHRV9NX0hCKQogCiBleHRlcm4gaW50IGFncF9tZW1vcnlfcmVzZXJ2ZWQ7CiAKQEAgLTE0OCw2ICsxNTcsMjUgQEAKICNkZWZpbmUgSU5URUxfSTc1MDVfQUdQQ1RSTAkweDcwCiAjZGVmaW5lIElOVEVMX0k3NTA1X01DSENGRwkweDUwCiAKKyNkZWZpbmUgU05CX0dNQ0hfQ1RSTAkweDUwCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fTUFTSwkweEY4CisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fMzJNCQkoMSA8PCAzKQorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOXzY0TQkJKDIgPDwgMykKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl85Nk0JCSgzIDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fMTI4TQkoNCA8PCAzKQorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOXzE2ME0JKDUgPDwgMykKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl8xOTJNCSg2IDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fMjI0TQkoNyA8PCAzKQorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOXzI1Nk0JKDggPDwgMykKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl8yODhNCSg5IDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fMzIwTQkoMHhhIDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fMzUyTQkoMHhiIDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fMzg0TQkoMHhjIDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fNDE2TQkoMHhkIDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fNDQ4TQkoMHhlIDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fNDgwTQkoMHhmIDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fNTEyTQkoMHgxMCA8PCAzKQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFwZXJfc2l6ZV9pbmZvX2ZpeGVkIGludGVsX2k4MTBfc2l6ZXNbXSA9CiB7CiAJezY0LCAxNjM4NCwgNH0sCkBAIC0yNzAsNyArMjk4LDcgQEAKIAkJCWorKzsKIAkJfQogCX0gZWxzZSB7Ci0JCS8qIHNnIG1heSBtZXJnZSBwYWdlcywgYnV0IHdlIGhhdmUgdG8gc2VwZXJhdGUKKwkJLyogc2cgbWF5IG1lcmdlIHBhZ2VzLCBidXQgd2UgaGF2ZSB0byBzZXBhcmF0ZQogCQkgKiBwZXItcGFnZSBhZGRyIGZvciBHVFQgKi8KIAkJdW5zaWduZWQgaW50IGxlbiwgbTsKIApAQCAtMjk0LDYgKzMyMiwxMyBAQAogCQkJCQlvZmZfdCBwZ19zdGFydCwgaW50IG1hc2tfdHlwZSkKIHsKIAlpbnQgaSwgajsKKwl1MzIgY2FjaGVfYml0cyA9IDA7CisKKwlpZiAoYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9TQU5EWUJSSURHRV9IQiB8fAorCSAgICBhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX1NBTkRZQlJJREdFX01fSEIpCisJeworCQljYWNoZV9iaXRzID0gSTgzMF9QVEVfU1lTVEVNX0NBQ0hFRDsKKwl9CiAKIAlmb3IgKGkgPSAwLCBqID0gcGdfc3RhcnQ7IGkgPCBtZW0tPnBhZ2VfY291bnQ7IGkrKywgaisrKSB7CiAJCXdyaXRlbChhZ3BfYnJpZGdlLT5kcml2ZXItPm1hc2tfbWVtb3J5KGFncF9icmlkZ2UsCkBAIC02MTQsNyArNjQ5LDcgQEAKIHN0YXRpYyB2b2lkIGludGVsX2k4MzBfaW5pdF9ndHRfZW50cmllcyh2b2lkKQogewogCXUxNiBnbWNoX2N0cmw7Ci0JaW50IGd0dF9lbnRyaWVzOworCWludCBndHRfZW50cmllcyA9IDA7CiAJdTggcmRjdDsKIAlpbnQgbG9jYWwgPSAwOwogCXN0YXRpYyBjb25zdCBpbnQgZGR0WzRdID0geyAwLCAxNiwgMzIsIDY0IH07CkBAIC03MDYsNiArNzQxLDYzIEBACiAJCQlndHRfZW50cmllcyA9IDA7CiAJCQlicmVhazsKIAkJfQorCX0gZWxzZSBpZiAoYWdwX2JyaWRnZS0+ZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9JTlRFTF9TQU5EWUJSSURHRV9IQiB8fAorCQkgICBhZ3BfYnJpZGdlLT5kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMX1NBTkRZQlJJREdFX01fSEIpIHsKKwkJLyoKKwkJICogU2FuZHlCcmlkZ2UgaGFzIG5ldyBtZW1vcnkgY29udHJvbCByZWcgYXQgMHg1MC53CisJCSAqLworCQl1MTYgc25iX2dtY2hfY3RsOworCQlwY2lfcmVhZF9jb25maWdfd29yZChpbnRlbF9wcml2YXRlLnBjaWRldiwgU05CX0dNQ0hfQ1RSTCwgJnNuYl9nbWNoX2N0bCk7CisJCXN3aXRjaCAoc25iX2dtY2hfY3RsICYgU05CX0dNQ0hfR01TX1NUT0xFTl9NQVNLKSB7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl8zMk06CisJCQlndHRfZW50cmllcyA9IE1CKDMyKSAtIEtCKHNpemUpOworCQkJYnJlYWs7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl82NE06CisJCQlndHRfZW50cmllcyA9IE1CKDY0KSAtIEtCKHNpemUpOworCQkJYnJlYWs7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl85Nk06CisJCQlndHRfZW50cmllcyA9IE1CKDk2KSAtIEtCKHNpemUpOworCQkJYnJlYWs7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl8xMjhNOgorCQkJZ3R0X2VudHJpZXMgPSBNQigxMjgpIC0gS0Ioc2l6ZSk7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzE2ME06CisJCQlndHRfZW50cmllcyA9IE1CKDE2MCkgLSBLQihzaXplKTsKKwkJCWJyZWFrOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fMTkyTToKKwkJCWd0dF9lbnRyaWVzID0gTUIoMTkyKSAtIEtCKHNpemUpOworCQkJYnJlYWs7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl8yMjRNOgorCQkJZ3R0X2VudHJpZXMgPSBNQigyMjQpIC0gS0Ioc2l6ZSk7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzI1Nk06CisJCQlndHRfZW50cmllcyA9IE1CKDI1NikgLSBLQihzaXplKTsKKwkJCWJyZWFrOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fMjg4TToKKwkJCWd0dF9lbnRyaWVzID0gTUIoMjg4KSAtIEtCKHNpemUpOworCQkJYnJlYWs7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl8zMjBNOgorCQkJZ3R0X2VudHJpZXMgPSBNQigzMjApIC0gS0Ioc2l6ZSk7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzM1Mk06CisJCQlndHRfZW50cmllcyA9IE1CKDM1MikgLSBLQihzaXplKTsKKwkJCWJyZWFrOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fMzg0TToKKwkJCWd0dF9lbnRyaWVzID0gTUIoMzg0KSAtIEtCKHNpemUpOworCQkJYnJlYWs7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl80MTZNOgorCQkJZ3R0X2VudHJpZXMgPSBNQig0MTYpIC0gS0Ioc2l6ZSk7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzQ0OE06CisJCQlndHRfZW50cmllcyA9IE1CKDQ0OCkgLSBLQihzaXplKTsKKwkJCWJyZWFrOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fNDgwTToKKwkJCWd0dF9lbnRyaWVzID0gTUIoNDgwKSAtIEtCKHNpemUpOworCQkJYnJlYWs7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl81MTJNOgorCQkJZ3R0X2VudHJpZXMgPSBNQig1MTIpIC0gS0Ioc2l6ZSk7CisJCQlicmVhazsKKwkJfQogCX0gZWxzZSB7CiAJCXN3aXRjaCAoZ21jaF9jdHJsICYgSTg1NV9HTUNIX0dNU19NQVNLKSB7CiAJCWNhc2UgSTg1NV9HTUNIX0dNU19TVE9MRU5fMU06CkBAIC0xMzU3LDYgKzE0NDksOCBAQAogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JUk9OTEFLRV9NX0hCOgogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JUk9OTEFLRV9NQV9IQjoKIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfSVJPTkxBS0VfTUMyX0hCOgorCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9TQU5EWUJSSURHRV9IQjoKKwljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfU0FORFlCUklER0VfTV9IQjoKIAkJKmd0dF9vZmZzZXQgPSAqZ3R0X3NpemUgPSBNQigyKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTIzMzgsOSArMjQzMiw5IEBACiAJCU5VTEwsICZpbnRlbF9nMzNfZHJpdmVyIH0sCiAJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX1EzM19IQiwgUENJX0RFVklDRV9JRF9JTlRFTF9RMzNfSUcsIDAsICJRMzMiLAogCQlOVUxMLCAmaW50ZWxfZzMzX2RyaXZlciB9LAotCXsgUENJX0RFVklDRV9JRF9JTlRFTF9QSU5FVklFV19NX0hCLCBQQ0lfREVWSUNFX0lEX0lOVEVMX1BJTkVWSUVXX01fSUcsIDAsICJQaW5ldmlldyIsCisJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX1BJTkVWSUVXX01fSEIsIFBDSV9ERVZJQ0VfSURfSU5URUxfUElORVZJRVdfTV9JRywgMCwgIkdNQTMxNTAiLAogCQlOVUxMLCAmaW50ZWxfZzMzX2RyaXZlciB9LAotCXsgUENJX0RFVklDRV9JRF9JTlRFTF9QSU5FVklFV19IQiwgUENJX0RFVklDRV9JRF9JTlRFTF9QSU5FVklFV19JRywgMCwgIlBpbmV2aWV3IiwKKwl7IFBDSV9ERVZJQ0VfSURfSU5URUxfUElORVZJRVdfSEIsIFBDSV9ERVZJQ0VfSURfSU5URUxfUElORVZJRVdfSUcsIDAsICJHTUEzMTUwIiwKIAkJTlVMTCwgJmludGVsX2czM19kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfR000NV9IQiwgUENJX0RFVklDRV9JRF9JTlRFTF9HTTQ1X0lHLCAwLAogCSAgICAiR000NSIsIE5VTEwsICZpbnRlbF9pOTY1X2RyaXZlciB9LApAQCAtMjM1NSwxMyArMjQ0OSwxNyBAQAogCXsgUENJX0RFVklDRV9JRF9JTlRFTF9HNDFfSEIsIFBDSV9ERVZJQ0VfSURfSU5URUxfRzQxX0lHLCAwLAogCSAgICAiRzQxIiwgTlVMTCwgJmludGVsX2k5NjVfZHJpdmVyIH0sCiAJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX0lST05MQUtFX0RfSEIsIFBDSV9ERVZJQ0VfSURfSU5URUxfSVJPTkxBS0VfRF9JRywgMCwKLQkgICAgIklyb25sYWtlL0QiLCBOVUxMLCAmaW50ZWxfaTk2NV9kcml2ZXIgfSwKKwkgICAgIkhEIEdyYXBoaWNzIiwgTlVMTCwgJmludGVsX2k5NjVfZHJpdmVyIH0sCiAJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX0lST05MQUtFX01fSEIsIFBDSV9ERVZJQ0VfSURfSU5URUxfSVJPTkxBS0VfTV9JRywgMCwKLQkgICAgIklyb25sYWtlL00iLCBOVUxMLCAmaW50ZWxfaTk2NV9kcml2ZXIgfSwKKwkgICAgIkhEIEdyYXBoaWNzIiwgTlVMTCwgJmludGVsX2k5NjVfZHJpdmVyIH0sCiAJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX0lST05MQUtFX01BX0hCLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lST05MQUtFX01fSUcsIDAsCi0JICAgICJJcm9ubGFrZS9NQSIsIE5VTEwsICZpbnRlbF9pOTY1X2RyaXZlciB9LAorCSAgICAiSEQgR3JhcGhpY3MiLCBOVUxMLCAmaW50ZWxfaTk2NV9kcml2ZXIgfSwKIAl7IFBDSV9ERVZJQ0VfSURfSU5URUxfSVJPTkxBS0VfTUMyX0hCLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lST05MQUtFX01fSUcsIDAsCi0JICAgICJJcm9ubGFrZS9NQzIiLCBOVUxMLCAmaW50ZWxfaTk2NV9kcml2ZXIgfSwKKwkgICAgIkhEIEdyYXBoaWNzIiwgTlVMTCwgJmludGVsX2k5NjVfZHJpdmVyIH0sCisJeyBQQ0lfREVWSUNFX0lEX0lOVEVMX1NBTkRZQlJJREdFX0hCLCBQQ0lfREVWSUNFX0lEX0lOVEVMX1NBTkRZQlJJREdFX0lHLCAwLAorCSAgICAiU2FuZHlicmlkZ2UiLCBOVUxMLCAmaW50ZWxfaTk2NV9kcml2ZXIgfSwKKwl7IFBDSV9ERVZJQ0VfSURfSU5URUxfU0FORFlCUklER0VfTV9IQiwgUENJX0RFVklDRV9JRF9JTlRFTF9TQU5EWUJSSURHRV9NX0lHLCAwLAorCSAgICAiU2FuZHlicmlkZ2UiLCBOVUxMLCAmaW50ZWxfaTk2NV9kcml2ZXIgfSwKIAl7IDAsIDAsIDAsIE5VTEwsIE5VTEwsIE5VTEwgfQogfTsKIApAQCAtMjM3MSw3ICsyNDY5LDcgQEAKIAlzdHJ1Y3QgYWdwX2JyaWRnZV9kYXRhICpicmlkZ2U7CiAJdTggY2FwX3B0ciA9IDA7CiAJc3RydWN0IHJlc291cmNlICpyOwotCWludCBpOworCWludCBpLCBlcnI7CiAKIAljYXBfcHRyID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0FHUCk7CiAKQEAgLTI0NjMsNyArMjU2MSwxMCBAQAogCX0KIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBicmlkZ2UpOwotCXJldHVybiBhZ3BfYWRkX2JyaWRnZShicmlkZ2UpOworCWVyciA9IGFncF9hZGRfYnJpZGdlKGJyaWRnZSk7CisJaWYgKCFlcnIpCisJCWludGVsX2FncF9lbmFibGVkID0gMTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgYWdwX2ludGVsX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKQEAgLTI1NjgsNiArMjY2OSw4IEBACiAJSUQoUENJX0RFVklDRV9JRF9JTlRFTF9JUk9OTEFLRV9NX0hCKSwKIAlJRChQQ0lfREVWSUNFX0lEX0lOVEVMX0lST05MQUtFX01BX0hCKSwKIAlJRChQQ0lfREVWSUNFX0lEX0lOVEVMX0lST05MQUtFX01DMl9IQiksCisJSUQoUENJX0RFVklDRV9JRF9JTlRFTF9TQU5EWUJSSURHRV9IQiksCisJSUQoUENJX0RFVklDRV9JRF9JTlRFTF9TQU5EWUJSSURHRV9NX0hCKSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9hcHBsaWNvbS5jIGIvZHJpdmVycy9jaGFyL2FwcGxpY29tLmMKaW5kZXggZmUyY2IyZi4uYTc0MjRiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2FwcGxpY29tLmMKKysrIGIvZHJpdmVycy9jaGFyL2FwcGxpY29tLmMKQEAgLTE0LDcgKzE0LDcgQEAKIC8qIGV0IHBhc3NlIGVuIGFyZ3VtZW50IGEgYWNpbml0LCBtYWlzIGVzdCBzY3J1dGUgc3VyIGxlIGJ1cyBwb3VyIHMnYWRhcHRlciAgKi8KIC8qIGF1IG5vbWJyZSBkZSBjYXJ0ZXMgcHJlc2VudGVzIHN1ciBsZSBidXMuIElPQ0wgY29kZSA2IGFmZmljaGFpdCBWMi40LjMgICAgKi8KIC8qIEYuTEFGT1JTRSAyOC8xMS85NSBjcmVhdGlvbiBkZSBmaWNoaWVycyBhY1hYLm8gYXZlYyBsZXMgZGlmZmVyZW50ZXMgICAgICAgKi8KLS8qIGFkcmVzc2VzIGRlIGJhc2UgZGVzIGNhcnRlcywgSU9DVEwgNiBwbHVzIGNvbXBsZXQgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIGFkZHJlc3NlcyBkZSBiYXNlIGRlcyBjYXJ0ZXMsIElPQ1RMIDYgcGx1cyBjb21wbGV0ICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiBKLlBBR0VUIGxlIDE5LzA4Lzk2IGNvcGllIGRlIGxhIHZlcnNpb24gVjIuNiBlbiBWMi44LjAgc2FucyBtb2RpZmljYXRpb24gICovCiAvKiBkZSBjb2RlIGF1dHJlIHF1ZSBsZSB0ZXh0ZSBWMi42LjEgZW4gVjIuOC4wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvY3ljbGFkZXMuYyBiL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jCmluZGV4IDQyNTQ0NTcuLmI4NjFjMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jCisrKyBiL2RyaXZlcnMvY2hhci9jeWNsYWRlcy5jCkBAIC0xNTgsMTMgKzE1OCwxMSBAQAogCiAjZGVmaW5lIE5SX0lTQV9BRERSUyBBUlJBWV9TSVpFKGN5X2lzYV9hZGRyZXNzZXMpCiAKLSNpZmRlZiBNT0RVTEUKIHN0YXRpYyBsb25nIG1hZGRyW05SX0NBUkRTXTsKIHN0YXRpYyBpbnQgaXJxW05SX0NBUkRTXTsKIAogbW9kdWxlX3BhcmFtX2FycmF5KG1hZGRyLCBsb25nLCBOVUxMLCAwKTsKIG1vZHVsZV9wYXJhbV9hcnJheShpcnEsIGludCwgTlVMTCwgMCk7Ci0jZW5kaWYKIAogI2VuZGlmCQkJCS8qIENPTkZJR19JU0EgKi8KIApAQCAtNTk4LDEyICs1OTYsNiBAQAogCXNhdmVfY2FyID0gcmVhZGIoYmFzZV9hZGRyICsgKEN5Q0FSIDw8IGluZGV4KSk7CiAJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeUNBUiA8PCBpbmRleCksIHNhdmVfeGlyKTsKIAotCS8qIHZhbGlkYXRlIHRoZSBwb3J0IyAoYXMgY29uZmlndXJlZCBhbmQgb3BlbikgKi8KLQlpZiAoY2hhbm5lbCArIGNoaXAgKiA0ID49IGNpbmZvLT5ucG9ydHMpIHsKLQkJY3lfd3JpdGViKGJhc2VfYWRkciArIChDeVNSRVIgPDwgaW5kZXgpLAotCQkJICByZWFkYihiYXNlX2FkZHIgKyAoQ3lTUkVSIDw8IGluZGV4KSkgJiB+Q3lUeFJkeSk7Ci0JCWdvdG8gZW5kOwotCX0KIAlpbmZvID0gJmNpbmZvLT5wb3J0c1tjaGFubmVsICsgY2hpcCAqIDRdOwogCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJmluZm8tPnBvcnQpOwogCWlmICh0dHkgPT0gTlVMTCkgewpAQCAtMzMxNiwxMyArMzMwOCwxMCBAQAogCXVuc2lnbmVkIHNob3J0IGN5X2lzYV9pcnEsIG5ib2FyZDsKIAl2b2lkIF9faW9tZW0gKmN5X2lzYV9hZGRyZXNzOwogCXVuc2lnbmVkIHNob3J0IGksIGosIGN5X2lzYV9uY2hhbjsKLSNpZmRlZiBNT0RVTEUKIAlpbnQgaXNwYXJhbSA9IDA7Ci0jZW5kaWYKIAogCW5ib2FyZCA9IDA7CiAKLSNpZmRlZiBNT0RVTEUKIAkvKiBDaGVjayBmb3IgbW9kdWxlIHBhcmFtZXRlcnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTlJfQ0FSRFM7IGkrKykgewogCQlpZiAobWFkZHJbaV0gfHwgaSkgewpAQCAtMzMzMiw3ICszMzIxLDYgQEAKIAkJaWYgKCFtYWRkcltpXSkKIAkJCWJyZWFrOwogCX0KLSNlbmRpZgogCiAJLyogc2NhbiB0aGUgYWRkcmVzcyB0YWJsZSBwcm9iaW5nIGZvciBDeWNsb20tWS9JU0EgYm9hcmRzICovCiAJZm9yIChpID0gMDsgaSA8IE5SX0lTQV9BRERSUzsgaSsrKSB7CkBAIC0zMzUzLDExICszMzQxLDEwIEBACiAJCQlpb3VubWFwKGN5X2lzYV9hZGRyZXNzKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0jaWZkZWYgTU9EVUxFCisKIAkJaWYgKGlzcGFyYW0gJiYgaSA8IE5SX0NBUkRTICYmIGlycVtpXSkKIAkJCWN5X2lzYV9pcnEgPSBpcnFbaV07CiAJCWVsc2UKLSNlbmRpZgogCQkJLyogZmluZCBvdXQgdGhlIGJvYXJkJ3MgaXJxIGJ5IHByb2JpbmcgKi8KIAkJCWN5X2lzYV9pcnEgPSBkZXRlY3RfaXNhX2lycShjeV9pc2FfYWRkcmVzcyk7CiAJCWlmIChjeV9pc2FfaXJxID09IDApIHsKQEAgLTQyMDgsMyArNDE5NSw0IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfVkVSU0lPTihDWV9WRVJTSU9OKTsKIE1PRFVMRV9BTElBU19DSEFSREVWX01BSk9SKENZQ0xBREVTX01BSk9SKTsKK01PRFVMRV9GSVJNV0FSRSgiY3l6ZmlybS5iaW4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKaW5kZXggNGMzYjU5Yi4uNDY1MTg1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19jb25zb2xlLmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCQlyZXR1cm47CiAKIAkvKiBUaGlzIGNvbnNvbGUgYWRhcHRlciB3YXMgcmVtb3ZlZCBzbyBpdCBpcyBub3QgdXNhYmxlLiAqLwotCWlmICh2dGVybW5vc1tpbmRleF0gPCAwKQorCWlmICh2dGVybW5vc1tpbmRleF0gPT0gLTEpCiAJCXJldHVybjsKIAogCXdoaWxlIChjb3VudCA+IDAgfHwgaSA+IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9odmNfaXNlcmllcy5jIGIvZHJpdmVycy9jaGFyL2h2Y19pc2VyaWVzLmMKaW5kZXggZmQwMjQyNi4uMjFjNTQ5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h2Y19pc2VyaWVzLmMKKysrIGIvZHJpdmVycy9jaGFyL2h2Y19pc2VyaWVzLmMKQEAgLTM1Myw3ICszNTMsNyBAQAogCiAJaWYgKCFodmxwZXZlbnRfaXNfaW50KGV2ZW50KSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkiaHZjOiBnb3QgdW5leHBlY3RlZCBjbG9zZSBhY2tub3dsZWdlbWVudFxuIik7CisJCQkiaHZjOiBnb3QgdW5leHBlY3RlZCBjbG9zZSBhY2tub3dsZWRnZW1lbnRcbiIpOwogCQlyZXR1cm47CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaHZjX2l1Y3YuYyBiL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jCmluZGV4IDIxNjgxYTguLjM3YjA1NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jCisrKyBiL2RyaXZlcnMvY2hhci9odmNfaXVjdi5jCkBAIC0xMzksNiArMTM5LDggQEAKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGFsbG9jYXRlcyBhIG5ldyBzdHJ1Y3QgaXVjdl90dHlfYnVmZmVyIGVsZW1lbnQgYW5kLCBvcHRpb25hbGx5LAogICogYWxsb2NhdGVzIGFuIGludGVybmFsIGRhdGEgYnVmZmVyIHdpdGggdGhlIHNwZWNpZmllZCBzaXplIEBzaXplLgorICogVGhlIGludGVybmFsIGRhdGEgYnVmZmVyIGlzIGFsd2F5cyBhbGxvY2F0ZWQgd2l0aCBHRlBfRE1BIHdoaWNoIGlzCisgKiByZXF1aXJlZCBmb3IgcmVjZWl2aW5nIGFuZCBzZW5kaW5nIGRhdGEgd2l0aCBJVUNWLgogICogTm90ZTogVGhlIHRvdGFsIG1lc3NhZ2Ugc2l6ZSBhcmlzZXMgZnJvbSB0aGUgaW50ZXJuYWwgYnVmZmVyIHNpemUgYW5kIHRoZQogICoJIG1lbWJlcnMgb2YgdGhlIGl1Y3ZfdHR5X21zZyBzdHJ1Y3R1cmUuCiAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBOVUxMIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGhhcyBmYWlsZWQuCkBAIC0xNTQsNyArMTU2LDcgQEAKIAogCWlmIChzaXplID4gMCkgewogCQlidWZwLT5tc2cubGVuZ3RoID0gTVNHX1NJWkUoc2l6ZSk7Ci0JCWJ1ZnAtPm1idWYgPSBrbWFsbG9jKGJ1ZnAtPm1zZy5sZW5ndGgsIGZsYWdzKTsKKwkJYnVmcC0+bWJ1ZiA9IGttYWxsb2MoYnVmcC0+bXNnLmxlbmd0aCwgZmxhZ3MgfCBHRlBfRE1BKTsKIAkJaWYgKCFidWZwLT5tYnVmKSB7CiAJCQltZW1wb29sX2ZyZWUoYnVmcCwgaHZjX2l1Y3ZfbWVtcG9vbCk7CiAJCQlyZXR1cm4gTlVMTDsKQEAgLTIzNyw3ICsyMzksNyBAQAogCWlmICghcmItPm1idWYpIHsgLyogbWVzc2FnZSBub3QgeWV0IHJlY2VpdmVkIC4uLiAqLwogCQkvKiBhbGxvY2F0ZSBtZW0gdG8gc3RvcmUgbXNnIGRhdGE7IGlmIG5vIG1lbW9yeSBpcyBhdmFpbGFibGUKIAkJICogdGhlbiBsZWF2ZSB0aGUgYnVmZmVyIG9uIHRoZSBsaXN0IGFuZCByZS10cnkgbGF0ZXIgKi8KLQkJcmItPm1idWYgPSBrbWFsbG9jKHJiLT5tc2cubGVuZ3RoLCBHRlBfQVRPTUlDKTsKKwkJcmItPm1idWYgPSBrbWFsbG9jKHJiLT5tc2cubGVuZ3RoLCBHRlBfQVRPTUlDIHwgR0ZQX0RNQSk7CiAJCWlmICghcmItPm1idWYpCiAJCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9LY29uZmlnCmluZGV4IDZlYTEwMTQuLmQzMTQ4M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL0tjb25maWcKQEAgLTExNCw3ICsxMTQsNyBAQAogCiBjb25maWcgSFdfUkFORE9NX09NQVAKIAl0cmlzdGF0ZSAiT01BUCBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciBzdXBwb3J0IgotCWRlcGVuZHMgb24gSFdfUkFORE9NICYmIChBUkNIX09NQVAxNlhYIHx8IEFSQ0hfT01BUDI0WFgpCisJZGVwZW5kcyBvbiBIV19SQU5ET00gJiYgKEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQMikKIAlkZWZhdWx0IEhXX1JBTkRPTQogIAktLS1oZWxwLS0tCiAgCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMga2VybmVsLXNpZGUgc3VwcG9ydCBmb3IgdGhlIFJhbmRvbSBOdW1iZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vbjItZHJ2LmMgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL24yLWRydi5jCmluZGV4IDliM2UwOWMuLjEwZjg2OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9od19yYW5kb20vbjItZHJ2LmMKKysrIGIvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9uMi1kcnYuYwpAQCAtNzEsNyArNzEsNyBAQAogICogICAgICAgIHgyMiArIHgyMSArIHgxNyArIHgxNSArIHgxMyArIHgxMiArIHgxMSArIHg3ICsgeDUgKyB4ICsgMQogICoKICAqIFRoZSBSTkdfQ1RMX1ZDTyB2YWx1ZSBvZiBlYWNoIG5vaXNlIGNlbGwgbXVzdCBiZSBwcm9ncmFtbWVkCi0gKiBzZXBlcmF0ZWx5LiAgVGhpcyBpcyB3aHkgNCBjb250cm9sIHJlZ2lzdGVyIHZhbHVlcyBtdXN0IGJlIHByb3ZpZGVkCisgKiBzZXBhcmF0ZWx5LiAgVGhpcyBpcyB3aHkgNCBjb250cm9sIHJlZ2lzdGVyIHZhbHVlcyBtdXN0IGJlIHByb3ZpZGVkCiAgKiB0byB0aGUgaHlwZXJ2aXNvci4gIER1cmluZyBhIHdyaXRlLCB0aGUgaHlwZXJ2aXNvciB3cml0ZXMgdGhlbSBhbGwsCiAgKiBvbmUgYXQgYSB0aW1lLCB0byB0aGUgYWN0dWFsIFJOR19DVEwgcmVnaXN0ZXIuICBUaGUgZmlyc3QgdGhyZWUKICAqIHZhbHVlcyBhcmUgdXNlZCB0byBzZXR1cCB0aGUgZGVzaXJlZCBSTkdfQ1RMX1ZDTyBmb3IgZWFjaCBlbnRyb3B5CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXAyL2kyaHcuaCBiL2RyaXZlcnMvY2hhci9pcDIvaTJody5oCmluZGV4IDhhYTZlN2EuLmMwYmE2YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcDIvaTJody5oCisrKyBiL2RyaXZlcnMvY2hhci9pcDIvaTJody5oCkBAIC01NTksNyArNTU5LDcgQEAKIAogMikgSXQgbWF5IGJlIGhhcmQtY29kZWQgaW50byB5b3VyIHNvdXJjZSBieSBpbmNsdWRpbmcgYSAuaCBmaWxlICh0eXBpY2FsbHkKIAlzdXBwbGllZCBieSBDb21wdXRvbmUpLCB3aGljaCBkZWNsYXJlcyBhIGRhdGEgYXJyYXkgYW5kIGluaXRpYWxpemVzIGV2ZXJ5Ci0JZWxlbWVudC4gVGhpcyBhY2hlaXZlcyB0aGUgc2FtZSByZXN1bHQgYXMgaWYgYW4gZW50aXJlIGxvYWR3YXJlIGZpbGUgaGFkIAorCWVsZW1lbnQuIFRoaXMgYWNoaWV2ZXMgdGhlIHNhbWUgcmVzdWx0IGFzIGlmIGFuIGVudGlyZSBsb2Fkd2FyZSBmaWxlIGhhZCAKIAliZWVuIHJlYWQgaW50byB0aGUgYXJyYXkuCiAKIAlUaGlzIHJlcXVpcmVzIG1vcmUgZGF0YSBzcGFjZSBpbiB5b3VyIHByb2dyYW0sIGJ1dCBhY2Nlc3MgdG8gdGhlIGZpbGUgc3lzdGVtCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXAyL2lwMm1haW4uYyBiL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jCmluZGV4IDUxNzI3MWMuLjkxMWUxZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jCisrKyBiL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jCkBAIC0yMDgsNiArMjA4LDcgQEAKIAogc3RhdGljIHZvaWQgaXAyX2luaXRfYm9hcmQoaW50LCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKik7CiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZmluZF9laXNhX2JvYXJkKGludCk7CitzdGF0aWMgaW50IGlwMl9zZXR1cChjaGFyICpzdHIpOwogCiAvKioqKioqKioqKioqKioqLwogLyogU3RhdGljIERhdGEgKi8KQEAgLTI2Myw3ICsyNjQsNyBAQAogLyogTWFjcm9zICovCiAvKioqKioqKioqKi8KIAotI2lmIGRlZmluZWQoTU9EVUxFKSAmJiBkZWZpbmVkKElQMkRFQlVHX09QRU4pCisjaWZkZWYgSVAyREVCVUdfT1BFTgogI2RlZmluZSBEQkdfQ05UKHMpIHByaW50ayhLRVJOX0RFQlVHICIoJXMpOiBbJXhdIHR0eWM9JWQsIG1vZGM9JXggLT4gJXNcbiIsIFwKIAkJICAgIHR0eS0+bmFtZSwocENoLT5mbGFncyksIFwKIAkJICAgIHR0eS0+Y291bnQsLypHRVRfVVNFX0NPVU5UKG1vZHVsZSkqLzAscykKQEAgLTI4NSw3ICsyODYsMTAgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiQ29tcHV0b25lIEludGVsbGlQb3J0IFBsdXMgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKyNkZWZpbmUJTUFYX0NNRF9TVFIJNTAKKwogc3RhdGljIGludCBwb2xsX29ubHk7CitzdGF0aWMgY2hhciBjbWRbTUFYX0NNRF9TVFJdOwogCiBzdGF0aWMgaW50IEVpc2FfaXJxOwogc3RhdGljIGludCBFaXNhX3Nsb3Q7CkBAIC0zMDksNiArMzEzLDggQEAKIE1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gcG9ydHMgZm9yIEludGVsbGlQb3J0IENhcmRzIik7CiBtb2R1bGVfcGFyYW0ocG9sbF9vbmx5LCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocG9sbF9vbmx5LCAiRG8gbm90IHVzZSBjYXJkIGludGVycnVwdHMiKTsKK21vZHVsZV9wYXJhbV9zdHJpbmcoaXAyLCBjbWQsIE1BWF9DTURfU1RSLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaXAyLCAiQ29udGFpbnMgbW9kdWxlIHBhcmFtZXRlciBwYXNzZWQgd2l0aCAnaXAyPSciKTsKIAogLyogZm9yIHN5c2ZzIGNsYXNzIHN1cHBvcnQgKi8KIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmlwMl9jbGFzczsKQEAgLTQ4Nyw3ICs0OTMsNiBAQAogCXJldHVybiBmdzsKIH0KIAotI2lmbmRlZiBNT0RVTEUKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCWlwMl9zZXR1cDoKICAqCQlzdHI6IGtlcm5lbCBjb21tYW5kIGxpbmUgc3RyaW5nCkBAIC01MzEsNyArNTM2LDYgQEAKIAlyZXR1cm4gMTsKIH0KIF9fc2V0dXAoImlwMj0iLCBpcDJfc2V0dXApOwotI2VuZGlmIC8qICFNT0RVTEUgKi8KIAogc3RhdGljIGludCBfX2luaXQgaXAyX2xvYWRtYWluKHZvaWQpCiB7CkBAIC01MzksMTQgKzU0MywyMCBAQAogCWludCBlcnIgPSAwOwogCWkyZUJvcmRTdHJQdHIgcEIgPSBOVUxMOwogCWludCByYyA9IC0xOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gTlVMTDsKKwljaGFyICpzdHI7CisKKwlzdHIgPSBjbWQ7CiAKIAlpZiAocG9sbF9vbmx5KSB7CiAJCS8qIEhhcmQgbG9jayB0aGUgaW50ZXJydXB0cyB0byB6ZXJvICovCiAJCWlycVswXSA9IGlycVsxXSA9IGlycVsyXSA9IGlycVszXSA9IHBvbGxfb25seSA9IDA7CiAJfQogCisJLyogQ2hlY2sgbW9kdWxlIHBhcmFtZXRlciB3aXRoICdpcDI9JyBoYXMgYmVlbiBwYXNzZWQgb3Igbm90ICovCisJaWYgKCFwb2xsX29ubHkgJiYgKCFzdHJuY21wKHN0ciwgImlwMj0iLCA0KSkpCisJCWlwMl9zZXR1cChzdHIpOworCiAJaXAydHJhY2UoSVRSQ19OT19QT1JULCBJVFJDX0lOSVQsIElUUkNfRU5URVIsIDApOwogCiAJLyogcHJvY2VzcyBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHRvIG1vZHByb2JlIG9yCkBAIC02MTIsNiArNjIyLDcgQEAKIAkJY2FzZSBQQ0k6CiAjaWZkZWYgQ09ORklHX1BDSQogCQl7CisJCQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CiAJCQl1MzIgYWRkcjsKIAkJCWludCBzdGF0dXM7CiAKQEAgLTYyNiw3ICs2MzcsNyBAQAogCiAJCQlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKIAkJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW4ndCBlbmFibGUgZGV2aWNlXG4iKTsKLQkJCQlicmVhazsKKwkJCQlnb3RvIG91dDsKIAkJCX0KIAkJCWlwMmNvbmZpZy50eXBlW2ldID0gUENJOwogCQkJaXAyY29uZmlnLnBjaV9kZXZbaV0gPSBwY2lfZGV2X2dldChwZGV2KTsKQEAgLTYzOCw2ICs2NDksOCBAQAogCQkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkkvTyBhZGRyZXNzIGVycm9yXG4iKTsKIAogCQkJaXAyY29uZmlnLmlycVtpXSA9IHBkZXYtPmlycTsKK291dDoKKwkJCXBjaV9kZXZfcHV0KHBkZXYpOwogCQl9CiAjZWxzZQogCQkJcHJpbnRrKEtFUk5fRVJSICJJUDI6IFBDSSBjYXJkIHNwZWNpZmllZCBidXQgUENJICIKQEAgLTY1Niw3ICs2NjksNiBAQAogCQkJYnJlYWs7CiAJCX0JLyogc3dpdGNoICovCiAJfQkvKiBmb3IgKi8KLQlwY2lfZGV2X3B1dChwZGV2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBJUDJfTUFYX0JPQVJEUzsgKytpKSB7CiAJCWlmIChpcDJjb25maWcuYWRkcltpXSkgewpAQCAtMzE5NywzICszMjA5LDUgQEAKIH07CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBpcDJtYWluX3BjaV90YmwpOworCitNT0RVTEVfRklSTVdBUkUoImludGVsbGlwb3J0Mi5iaW4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKaW5kZXggMTc2ZjE3NS4uNDQ2MmIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKQEAgLTI5NSw2ICsyOTUsOSBAQAogc3RhdGljIGludCBmb3JjZV9raXBtaWRbU0lfTUFYX1BBUk1TXTsKIHN0YXRpYyBpbnQgbnVtX2ZvcmNlX2tpcG1pZDsKIAorc3RhdGljIHVuc2lnbmVkIGludCBraXBtaWRfbWF4X2J1c3lfdXNbU0lfTUFYX1BBUk1TXTsKK3N0YXRpYyBpbnQgbnVtX21heF9idXN5X3VzOworCiBzdGF0aWMgaW50IHVubG9hZF93aGVuX2VtcHR5ID0gMTsKIAogc3RhdGljIGludCB0cnlfc21pX2luaXQoc3RydWN0IHNtaV9pbmZvICpzbWkpOwpAQCAtOTI1LDIzICs5MjgsNzcgQEAKIAl9CiB9CiAKKy8qCisgKiBVc2UgLTEgaW4gdGhlIG5zZWMgdmFsdWUgb2YgdGhlIGJ1c3kgd2FpdGluZyB0aW1lc3BlYyB0byB0ZWxsIHRoYXQKKyAqIHdlIGFyZSBzcGlubmluZyBpbiBraXBtaWQgbG9va2luZyBmb3Igc29tZXRoaW5nIGFuZCBub3QgZGVsYXlpbmcKKyAqIGJldHdlZW4gY2hlY2tzCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpcG1pX3NpX3NldF9ub3RfYnVzeShzdHJ1Y3QgdGltZXNwZWMgKnRzKQoreworCXRzLT50dl9uc2VjID0gLTE7Cit9CitzdGF0aWMgaW5saW5lIGludCBpcG1pX3NpX2lzX2J1c3koc3RydWN0IHRpbWVzcGVjICp0cykKK3sKKwlyZXR1cm4gdHMtPnR2X25zZWMgIT0gLTE7Cit9CisKK3N0YXRpYyBpbnQgaXBtaV90aHJlYWRfYnVzeV93YWl0KGVudW0gc2lfc21fcmVzdWx0IHNtaV9yZXN1bHQsCisJCQkJIGNvbnN0IHN0cnVjdCBzbWlfaW5mbyAqc21pX2luZm8sCisJCQkJIHN0cnVjdCB0aW1lc3BlYyAqYnVzeV91bnRpbCkKK3sKKwl1bnNpZ25lZCBpbnQgbWF4X2J1c3lfdXMgPSAwOworCisJaWYgKHNtaV9pbmZvLT5pbnRmX251bSA8IG51bV9tYXhfYnVzeV91cykKKwkJbWF4X2J1c3lfdXMgPSBraXBtaWRfbWF4X2J1c3lfdXNbc21pX2luZm8tPmludGZfbnVtXTsKKwlpZiAobWF4X2J1c3lfdXMgPT0gMCB8fCBzbWlfcmVzdWx0ICE9IFNJX1NNX0NBTExfV0lUSF9ERUxBWSkKKwkJaXBtaV9zaV9zZXRfbm90X2J1c3koYnVzeV91bnRpbCk7CisJZWxzZSBpZiAoIWlwbWlfc2lfaXNfYnVzeShidXN5X3VudGlsKSkgeworCQlnZXRuc3RpbWVvZmRheShidXN5X3VudGlsKTsKKwkJdGltZXNwZWNfYWRkX25zKGJ1c3lfdW50aWwsIG1heF9idXN5X3VzKk5TRUNfUEVSX1VTRUMpOworCX0gZWxzZSB7CisJCXN0cnVjdCB0aW1lc3BlYyBub3c7CisJCWdldG5zdGltZW9mZGF5KCZub3cpOworCQlpZiAodW5saWtlbHkodGltZXNwZWNfY29tcGFyZSgmbm93LCBidXN5X3VudGlsKSA+IDApKSB7CisJCQlpcG1pX3NpX3NldF9ub3RfYnVzeShidXN5X3VudGlsKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAxOworfQorCisKKy8qCisgKiBBIGJ1c3ktd2FpdGluZyBsb29wIGZvciBzcGVlZGluZyB1cCBJUE1JIG9wZXJhdGlvbi4KKyAqCisgKiBMb3VzeSBoYXJkd2FyZSBtYWtlcyB0aGlzIGhhcmQuICBUaGlzIGlzIG9ubHkgZW5hYmxlZCBmb3Igc3lzdGVtcworICogdGhhdCBhcmUgbm90IEJUIGFuZCBkbyBub3QgaGF2ZSBpbnRlcnJ1cHRzLiAgSXQgc3RhcnRzIHNwaW5uaW5nCisgKiB3aGVuIGFuIG9wZXJhdGlvbiBpcyBjb21wbGV0ZSBvciB1bnRpbCBtYXhfYnVzeSB0ZWxscyBpdCB0byBzdG9wCisgKiAoaWYgdGhhdCBpcyBlbmFibGVkKS4gIFNlZSB0aGUgcGFyYWdyYXBoIG9uIGtpbWlkX21heF9idXN5X3VzIGluCisgKiBEb2N1bWVudGF0aW9uL0lQTUkudHh0IGZvciBkZXRhaWxzLgorICovCiBzdGF0aWMgaW50IGlwbWlfdGhyZWFkKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHNtaV9pbmZvICpzbWlfaW5mbyA9IGRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAllbnVtIHNpX3NtX3Jlc3VsdCBzbWlfcmVzdWx0OworCXN0cnVjdCB0aW1lc3BlYyBidXN5X3VudGlsOwogCisJaXBtaV9zaV9zZXRfbm90X2J1c3koJmJ1c3lfdW50aWwpOwogCXNldF91c2VyX25pY2UoY3VycmVudCwgMTkpOwogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7CisJCWludCBidXN5X3dhaXQ7CisKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJihzbWlfaW5mby0+c2lfbG9jayksIGZsYWdzKTsKIAkJc21pX3Jlc3VsdCA9IHNtaV9ldmVudF9oYW5kbGVyKHNtaV9pbmZvLCAwKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKHNtaV9pbmZvLT5zaV9sb2NrKSwgZmxhZ3MpOworCQlidXN5X3dhaXQgPSBpcG1pX3RocmVhZF9idXN5X3dhaXQoc21pX3Jlc3VsdCwgc21pX2luZm8sCisJCQkJCQkgICZidXN5X3VudGlsKTsKIAkJaWYgKHNtaV9yZXN1bHQgPT0gU0lfU01fQ0FMTF9XSVRIT1VUX0RFTEFZKQogCQkJOyAvKiBkbyBub3RoaW5nICovCi0JCWVsc2UgaWYgKHNtaV9yZXN1bHQgPT0gU0lfU01fQ0FMTF9XSVRIX0RFTEFZKQorCQllbHNlIGlmIChzbWlfcmVzdWx0ID09IFNJX1NNX0NBTExfV0lUSF9ERUxBWSAmJiBidXN5X3dhaXQpCiAJCQlzY2hlZHVsZSgpOwogCQllbHNlCi0JCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoMSk7CisJCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoMCk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTE0NCw3ICsxMjAxLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbnVtX3JlZ3NpemVzOwogc3RhdGljIGludCAgICAgICAgICAgcmVnc2hpZnRzW1NJX01BWF9QQVJNU107CiBzdGF0aWMgdW5zaWduZWQgaW50IG51bV9yZWdzaGlmdHM7Ci1zdGF0aWMgaW50IHNsYXZlX2FkZHJzW1NJX01BWF9QQVJNU107CitzdGF0aWMgaW50IHNsYXZlX2FkZHJzW1NJX01BWF9QQVJNU107IC8qIExlYXZpbmcgMCBjaG9vc2VzIHRoZSBkZWZhdWx0IHZhbHVlICovCiBzdGF0aWMgdW5zaWduZWQgaW50IG51bV9zbGF2ZV9hZGRyczsKIAogI2RlZmluZSBJUE1JX0lPX0FERFJfU1BBQ0UgIDAKQEAgLTEyMTIsNiArMTI2OSwxMSBAQAogTU9EVUxFX1BBUk1fREVTQyh1bmxvYWRfd2hlbl9lbXB0eSwgIlVubG9hZCB0aGUgbW9kdWxlIGlmIG5vIGludGVyZmFjZXMgYXJlIgogCQkgIiBzcGVjaWZpZWQgb3IgZm91bmQsIGRlZmF1bHQgaXMgMS4gIFNldHRpbmcgdG8gMCIKIAkJICIgaXMgdXNlZnVsIGZvciBob3QgYWRkIG9mIGRldmljZXMgdXNpbmcgaG90bW9kLiIpOworbW9kdWxlX3BhcmFtX2FycmF5KGtpcG1pZF9tYXhfYnVzeV91cywgdWludCwgJm51bV9tYXhfYnVzeV91cywgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGtpcG1pZF9tYXhfYnVzeV91cywKKwkJICJNYXggdGltZSAoaW4gbWljcm9zZWNvbmRzKSB0byBidXN5LXdhaXQgZm9yIElQTUkgZGF0YSBiZWZvcmUiCisJCSAiIHNsZWVwaW5nLiAwIChkZWZhdWx0KSBtZWFucyB0byB3YWl0IGZvcmV2ZXIuIFNldCB0byAxMDAtNTAwIgorCQkgIiBpZiBraXBtaWQgaXMgdXNpbmcgdXAgYSBsb3Qgb2YgQ1BVIHRpbWUuIik7CiAKIAogc3RhdGljIHZvaWQgc3RkX2lycV9jbGVhbnVwKHN0cnVjdCBzbWlfaW5mbyAqaW5mbykKQEAgLTE2MDcsNyArMTY2OSw3IEBACiAJCXJlZ3NpemUgPSAxOwogCQlyZWdzaGlmdCA9IDA7CiAJCWlycSA9IDA7Ci0JCWlwbWIgPSAweDIwOworCQlpcG1iID0gMDsgLyogQ2hvb3NlIHRoZSBkZWZhdWx0IGlmIG5vdCBzcGVjaWZpZWQgKi8KIAogCQluZXh0ID0gc3RyY2hyKGN1cnIsICc6Jyk7CiAJCWlmIChuZXh0KSB7CkBAIC0xNzk5LDYgKzE4NjEsNyBAQAogCQlpbmZvLT5pcnEgPSBpcnFzW2ldOwogCQlpZiAoaW5mby0+aXJxKQogCQkJaW5mby0+aXJxX3NldHVwID0gc3RkX2lycV9zZXR1cDsKKwkJaW5mby0+c2xhdmVfYWRkciA9IHNsYXZlX2FkZHJzW2ldOwogCiAJCXRyeV9zbWlfaW5pdChpbmZvKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXNpY29tLmMgYi9kcml2ZXJzL2NoYXIvaXNpY29tLmMKaW5kZXggMzAwZDViZC4uYmUyZThmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lzaWNvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9pc2ljb20uYwpAQCAtMTEzLDYgKzExMyw4IEBACiAgKgkJNjQtYml0IHZlcmlmaWNhdGlvbgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xNDAsNyArMTQyLDYgQEAKICNkZWZpbmUgSW50ZXJydXB0VGhlQ2FyZChiYXNlKSBvdXR3KDAsIChiYXNlKSArIDB4YykKICNkZWZpbmUgQ2xlYXJJbnRlcnJ1cHQoYmFzZSkgaW53KChiYXNlKSArIDB4MGEpCiAKLSNkZWZpbmUgcHJfZGJnKHN0ci4uLikgcHJfZGVidWcoIklTSUNPTTogIiBzdHIpCiAjaWZkZWYgREVCVUcKICNkZWZpbmUgaXNpY29tX3BhcmFub2lhX2NoZWNrKGEsIGIsIGMpIF9faXNpY29tX3BhcmFub2lhX2NoZWNrKChhKSwgKGIpLCAoYykpCiAjZWxzZQpAQCAtMjQ5LDggKzI1MCw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmNhcmRfbG9jaywgY2FyZC0+ZmxhZ3MpOwogCQltc2xlZXAoMTApOwogCX0KLQlwcmludGsoS0VSTl9XQVJOSU5HICJJU0lDT006IEZhaWxlZCB0byBsb2NrIENhcmQgKDB4JWx4KVxuIiwKLQkJY2FyZC0+YmFzZSk7CisJcHJfd2FybmluZygiRmFpbGVkIHRvIGxvY2sgQ2FyZCAoMHglbHgpXG4iLCBjYXJkLT5iYXNlKTsKIAogCXJldHVybiAwOwkvKiBGYWlsZWQgdG8gYWNxdWlyZSB0aGUgY2FyZCEgKi8KIH0KQEAgLTM3OSwxMyArMzc5LDEzIEBACiAJY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcm91dGluZSkKIHsKIAlpZiAoIXBvcnQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSVNJQ09NOiBXYXJuaW5nOiBiYWQgaXNpY29tIG1hZ2ljIGZvciAiCi0JCQkiZGV2ICVzIGluICVzLlxuIiwgbmFtZSwgcm91dGluZSk7CisJCXByX3dhcm5pbmcoIldhcm5pbmc6IGJhZCBpc2ljb20gbWFnaWMgZm9yIGRldiAlcyBpbiAlcy5cbiIsCisJCQkgICBuYW1lLCByb3V0aW5lKTsKIAkJcmV0dXJuIDE7CiAJfQogCWlmIChwb3J0LT5tYWdpYyAhPSBJU0lDT01fTUFHSUMpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSVNJQ09NOiBXYXJuaW5nOiBOVUxMIGlzaWNvbSBwb3J0IGZvciAiCi0JCQkiZGV2ICVzIGluICVzLlxuIiwgbmFtZSwgcm91dGluZSk7CisJCXByX3dhcm5pbmcoIldhcm5pbmc6IE5VTEwgaXNpY29tIHBvcnQgZm9yIGRldiAlcyBpbiAlcy5cbiIsCisJCQkgICBuYW1lLCByb3V0aW5lKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC00NTAsOCArNDUwLDggQEAKIAkJaWYgKCEoaW53KGJhc2UgKyAweDAyKSAmICgxIDw8IHBvcnQtPmNoYW5uZWwpKSkKIAkJCWNvbnRpbnVlOwogCi0JCXByX2RiZygidHhpbmcgJWQgYnl0ZXMsIHBvcnQlZC5cbiIsIHR4Y291bnQsCi0JCQlwb3J0LT5jaGFubmVsICsgMSk7CisJCXByX2RlYnVnKCJ0eGluZyAlZCBieXRlcywgcG9ydCVkLlxuIiwKKwkJCSB0eGNvdW50LCBwb3J0LT5jaGFubmVsICsgMSk7CiAJCW91dHcoKHBvcnQtPmNoYW5uZWwgPDwgaXNpX2NhcmRbY2FyZF0uc2hpZnRfY291bnQpIHwgdHhjb3VudCwKIAkJCWJhc2UpOwogCQlyZXNpZHVlID0gTk87CkBAIC01NDcsOCArNTQ3LDggQEAKIAlieXRlX2NvdW50ID0gaGVhZGVyICYgMHhmZjsKIAogCWlmIChjaGFubmVsICsgMSA+IGNhcmQtPnBvcnRfY291bnQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSVNJQ09NOiBpc2ljb21faW50ZXJydXB0KDB4JWx4KTogIgotCQkJIiVkKGNoYW5uZWwpID4gcG9ydF9jb3VudC5cbiIsIGJhc2UsIGNoYW5uZWwrMSk7CisJCXByX3dhcm5pbmcoIiVzKDB4JWx4KTogJWQoY2hhbm5lbCkgPiBwb3J0X2NvdW50LlxuIiwKKwkJCSAgIF9fZnVuY19fLCBiYXNlLCBjaGFubmVsKzEpOwogCQlvdXR3KDB4MDAwMCwgYmFzZSsweDA0KTsgLyogZW5hYmxlIGludGVycnVwdHMgKi8KIAkJc3Bpbl91bmxvY2soJmNhcmQtPmNhcmRfbG9jayk7CiAJCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTU4MiwxNCArNTgyLDE1IEBACiAJCQkJaWYgKHBvcnQtPnN0YXR1cyAmIElTSV9EQ0QpIHsKIAkJCQkJaWYgKCEoaGVhZGVyICYgSVNJX0RDRCkpIHsKIAkJCQkJLyogQ2FycmllciBoYXMgYmVlbiBsb3N0ICAqLwotCQkJCQkJcHJfZGJnKCJpbnRlcnJ1cHQ6IERDRC0+bG93LlxuIgotCQkJCQkJCSk7CisJCQkJCQlwcl9kZWJ1ZygiJXM6IERDRC0+bG93LlxuIiwKKwkJCQkJCQkgX19mdW5jX18pOwogCQkJCQkJcG9ydC0+c3RhdHVzICY9IH5JU0lfRENEOwogCQkJCQkJdHR5X2hhbmd1cCh0dHkpOwogCQkJCQl9CiAJCQkJfSBlbHNlIGlmIChoZWFkZXIgJiBJU0lfRENEKSB7CiAJCQkJLyogQ2FycmllciBoYXMgYmVlbiBkZXRlY3RlZCAqLwotCQkJCQlwcl9kYmcoImludGVycnVwdDogRENELT5oaWdoLlxuIik7CisJCQkJCXByX2RlYnVnKCIlczogRENELT5oaWdoLlxuIiwKKwkJCQkJCV9fZnVuY19fKTsKIAkJCQkJcG9ydC0+c3RhdHVzIHw9IElTSV9EQ0Q7CiAJCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcG9ydC0+cG9ydC5vcGVuX3dhaXQpOwogCQkJCX0KQEAgLTY0MSwxNyArNjQyLDE5IEBACiAJCQlicmVhazsKIAogCQljYXNlIDI6CS8qIFN0YXRpc3RpY3MJCSAqLwotCQkJcHJfZGJnKCJpc2ljb21faW50ZXJydXB0OiBzdGF0cyEhIS5cbiIpOworCQkJcHJfZGVidWcoIiVzOiBzdGF0cyEhIVxuIiwgX19mdW5jX18pOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCXByX2RiZygiSW50cjogVW5rbm93biBjb2RlIGluIHN0YXR1cyBwYWNrZXQuXG4iKTsKKwkJCXByX2RlYnVnKCIlczogVW5rbm93biBjb2RlIGluIHN0YXR1cyBwYWNrZXQuXG4iLAorCQkJCSBfX2Z1bmNfXyk7CiAJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7CQkJCS8qIERhdGEgICBQYWNrZXQgKi8KIAogCQljb3VudCA9IHR0eV9wcmVwYXJlX2ZsaXBfc3RyaW5nKHR0eSwgJnJwLCBieXRlX2NvdW50ICYgfjEpOwotCQlwcl9kYmcoIkludHI6IENhbiByeCAlZCBvZiAlZCBieXRlcy5cbiIsIGNvdW50LCBieXRlX2NvdW50KTsKKwkJcHJfZGVidWcoIiVzOiBDYW4gcnggJWQgb2YgJWQgYnl0ZXMuXG4iLAorCQkJIF9fZnVuY19fLCBjb3VudCwgYnl0ZV9jb3VudCk7CiAJCXdvcmRfY291bnQgPSBjb3VudCA+PiAxOwogCQlpbnN3KGJhc2UsIHJwLCB3b3JkX2NvdW50KTsKIAkJYnl0ZV9jb3VudCAtPSAod29yZF9jb3VudCA8PCAxKTsKQEAgLTY2MSw4ICs2NjQsOCBAQAogCQkJYnl0ZV9jb3VudCAtPSAyOwogCQl9CiAJCWlmIChieXRlX2NvdW50ID4gMCkgewotCQkJcHJfZGJnKCJJbnRyKDB4JWx4OiVkKTogRmxpcCBidWZmZXIgb3ZlcmZsb3chIGRyb3BwaW5nICIKLQkJCQkiYnl0ZXMuLi5cbiIsIGJhc2UsIGNoYW5uZWwgKyAxKTsKKwkJCXByX2RlYnVnKCIlcygweCVseDolZCk6IEZsaXAgYnVmZmVyIG92ZXJmbG93ISBkcm9wcGluZyBieXRlcy4uLlxuIiwKKwkJCQkgX19mdW5jX18sIGJhc2UsIGNoYW5uZWwgKyAxKTsKIAkJLyogZHJhaW4gb3V0IHVucmVhZCB4dHJhIGRhdGEgKi8KIAkJd2hpbGUgKGJ5dGVfY291bnQgPiAwKSB7CiAJCQkJaW53KGJhc2UpOwpAQCAtODg4LDggKzg5MSw4IEBACiAJc3RydWN0IGlzaV9ib2FyZCAqY2FyZCA9IHBvcnQtPmNhcmQ7CiAKIAlpZiAoLS1jYXJkLT5jb3VudCA8IDApIHsKLQkJcHJfZGJnKCJpc2ljb21fc2h1dGRvd25fcG9ydDogYmFkIGJvYXJkKDB4JWx4KSBjb3VudCAlZC5cbiIsCi0JCQljYXJkLT5iYXNlLCBjYXJkLT5jb3VudCk7CisJCXByX2RlYnVnKCIlczogYmFkIGJvYXJkKDB4JWx4KSBjb3VudCAlZC5cbiIsCisJCQkgX19mdW5jX18sIGNhcmQtPmJhc2UsIGNhcmQtPmNvdW50KTsKIAkJY2FyZC0+Y291bnQgPSAwOwogCX0KIAkvKiBsYXN0IHBvcnQgd2FzIGNsb3NlZCwgc2h1dGRvd24gdGhhdCBib2FyZCB0b28gKi8KQEAgLTE2ODEsMTMgKzE2ODQsMTMgQEAKIAogCXJldHZhbCA9IHR0eV9yZWdpc3Rlcl9kcml2ZXIoaXNpY29tX25vcm1hbCk7CiAJaWYgKHJldHZhbCkgewotCQlwcl9kYmcoIkNvdWxkbid0IHJlZ2lzdGVyIHRoZSBkaWFsaW4gZHJpdmVyXG4iKTsKKwkJcHJfZGVidWcoIkNvdWxkbid0IHJlZ2lzdGVyIHRoZSBkaWFsaW4gZHJpdmVyXG4iKTsKIAkJZ290byBlcnJfcHV0dHR5OwogCX0KIAogCXJldHZhbCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmlzaWNvbV9kcml2ZXIpOwogCWlmIChyZXR2YWwgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSVNJQ09NOiBVbmFibGUgdG8gcmVnaXN0ZXIgcGNpIGRyaXZlci5cbiIpOworCQlwcl9lcnIoIlVuYWJsZSB0byByZWdpc3RlciBwY2kgZHJpdmVyLlxuIik7CiAJCWdvdG8gZXJyX3VucnR0eTsKIAl9CiAKQEAgLTE3MTcsMyArMTcyMCw4IEBACiBNT0RVTEVfQVVUSE9SKCJNdWx0aVRlY2giKTsKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB0aGUgSVNJIHNlcmllcyBvZiBjYXJkcyBieSBNdWx0aVRlY2giKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9GSVJNV0FSRSgiaXNpNjA4LmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJpc2k2MDhlbS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgiaXNpNjE2ZW0uYmluIik7CitNT0RVTEVfRklSTVdBUkUoImlzaTQ2MDguYmluIik7CitNT0RVTEVfRklSTVdBUkUoImlzaTQ2MTYuYmluIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9kcml2ZXJzL2NoYXIvbWVtLmMKaW5kZXggNDg3ODhkYi4uMWYzMjE1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jCisrKyBiL2RyaXZlcnMvY2hhci9tZW0uYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcwogICoKLSAqICBBZGRlZCBkZXZmcyBzdXBwb3J0LiAKKyAqICBBZGRlZCBkZXZmcyBzdXBwb3J0LgogICogICAgSmFuLTExLTE5OTgsIEMuIFNjb3R0IEFuYW5pYW4gPGNhbmFuaWFuQGFsdW1uaS5wcmluY2V0b24uZWR1PgogICogIFNoYXJlZCAvZGV2L3plcm8gbW1hcHBpbmcgc3VwcG9ydCwgRmViIDIwMDAsIEthbm9qIFNhcmNhciA8a2Fub2pAc2dpLmNvbT4KICAqLwpAQCAtNDQsMzYgKzQ0LDYgQEAKIAlyZXR1cm4gbWluKHN6LCBzaXplKTsKIH0KIAotLyoKLSAqIEFyY2hpdGVjdHVyZXMgdmFyeSBpbiBob3cgdGhleSBoYW5kbGUgY2FjaGluZyBmb3IgYWRkcmVzc2VzCi0gKiBvdXRzaWRlIG9mIG1haW4gbWVtb3J5LgotICoKLSAqLwotc3RhdGljIGlubGluZSBpbnQgdW5jYWNoZWRfYWNjZXNzKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0jaWYgZGVmaW5lZChDT05GSUdfSUE2NCkKLQkvKgotCSAqIE9uIGlhNjQsIHdlIGlnbm9yZSBPX0RTWU5DIGJlY2F1c2Ugd2UgY2Fubm90IHRvbGVyYXRlIG1lbW9yeSBhdHRyaWJ1dGUgYWxpYXNlcy4KLQkgKi8KLQlyZXR1cm4gIShlZmlfbWVtX2F0dHJpYnV0ZXMoYWRkcikgJiBFRklfTUVNT1JZX1dCKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX01JUFMpCi0JewotCQlleHRlcm4gaW50IF9fdW5jYWNoZWRfYWNjZXNzKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcik7Ci0KLQkJcmV0dXJuIF9fdW5jYWNoZWRfYWNjZXNzKGZpbGUsIGFkZHIpOwotCX0KLSNlbHNlCi0JLyoKLQkgKiBBY2Nlc3NpbmcgbWVtb3J5IGFib3ZlIHRoZSB0b3AgdGhlIGtlcm5lbCBrbm93cyBhYm91dCBvciB0aHJvdWdoIGEgZmlsZSBwb2ludGVyCi0JICogdGhhdCB3YXMgbWFya2VkIE9fRFNZTkMgd2lsbCBiZSBkb25lIG5vbi1jYWNoZWQuCi0JICovCi0JaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX0RTWU5DKQotCQlyZXR1cm4gMTsKLQlyZXR1cm4gYWRkciA+PSBfX3BhKGhpZ2hfbWVtb3J5KTsKLSNlbmRpZgotfQotCiAjaWZuZGVmIEFSQ0hfSEFTX1ZBTElEX1BIWVNfQUREUl9SQU5HRQogc3RhdGljIGlubGluZSBpbnQgdmFsaWRfcGh5c19hZGRyX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZV90IGNvdW50KQogewpAQCAtMTE1LDE1ICs4NSwxNSBAQAogfQogI2VuZGlmCiAKLXZvaWQgX19hdHRyaWJ1dGVfXygod2VhaykpIHVueGxhdGVfZGV2X21lbV9wdHIodW5zaWduZWQgbG9uZyBwaHlzLCB2b2lkICphZGRyKQordm9pZCBfX3dlYWsgdW54bGF0ZV9kZXZfbWVtX3B0cih1bnNpZ25lZCBsb25nIHBoeXMsIHZvaWQgKmFkZHIpCiB7CiB9CiAKIC8qCi0gKiBUaGlzIGZ1bmNpb24gcmVhZHMgdGhlICpwaHlzaWNhbCogbWVtb3J5LiBUaGUgZl9wb3MgcG9pbnRzIGRpcmVjdGx5IHRvIHRoZSAKLSAqIG1lbW9yeSBsb2NhdGlvbi4gCisgKiBUaGlzIGZ1bmNpb24gcmVhZHMgdGhlICpwaHlzaWNhbCogbWVtb3J5LiBUaGUgZl9wb3MgcG9pbnRzIGRpcmVjdGx5IHRvIHRoZQorICogbWVtb3J5IGxvY2F0aW9uLgogICovCi1zdGF0aWMgc3NpemVfdCByZWFkX21lbShzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgX191c2VyICogYnVmLAorc3RhdGljIHNzaXplX3QgcmVhZF9tZW0oc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAl1bnNpZ25lZCBsb25nIHAgPSAqcHBvczsKQEAgLTE0MCwxMCArMTEwLDEwIEBACiAJCWlmIChzeiA+IDApIHsKIAkJCWlmIChjbGVhcl91c2VyKGJ1Ziwgc3opKQogCQkJCXJldHVybiAtRUZBVUxUOwotCQkJYnVmICs9IHN6OyAKLQkJCXAgKz0gc3o7IAotCQkJY291bnQgLT0gc3o7IAotCQkJcmVhZCArPSBzejsgCisJCQlidWYgKz0gc3o7CisJCQlwICs9IHN6OworCQkJY291bnQgLT0gc3o7CisJCQlyZWFkICs9IHN6OwogCQl9CiAJfQogI2VuZGlmCkBAIC0xNTcsOSArMTI3LDkgQEAKIAkJCXJldHVybiAtRVBFUk07CiAKIAkJLyoKLQkJICogT24gaWE2NCBpZiBhIHBhZ2UgaGFzIGJlZW4gbWFwcGVkIHNvbWV3aGVyZSBhcwotCQkgKiB1bmNhY2hlZCwgdGhlbiBpdCBtdXN0IGFsc28gYmUgYWNjZXNzZWQgdW5jYWNoZWQKLQkJICogYnkgdGhlIGtlcm5lbCBvciBkYXRhIGNvcnJ1cHRpb24gbWF5IG9jY3VyCisJCSAqIE9uIGlhNjQgaWYgYSBwYWdlIGhhcyBiZWVuIG1hcHBlZCBzb21ld2hlcmUgYXMgdW5jYWNoZWQsIHRoZW4KKwkJICogaXQgbXVzdCBhbHNvIGJlIGFjY2Vzc2VkIHVuY2FjaGVkIGJ5IHRoZSBrZXJuZWwgb3IgZGF0YQorCQkgKiBjb3JydXB0aW9uIG1heSBvY2N1ci4KIAkJICovCiAJCXB0ciA9IHhsYXRlX2Rldl9tZW1fcHRyKHApOwogCQlpZiAoIXB0cikKQEAgLTE4MCw3ICsxNTAsNyBAQAogCXJldHVybiByZWFkOwogfQogCi1zdGF0aWMgc3NpemVfdCB3cml0ZV9tZW0oc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZiwgCitzdGF0aWMgc3NpemVfdCB3cml0ZV9tZW0oc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJdW5zaWduZWQgbG9uZyBwID0gKnBwb3M7CkBAIC0yMTIsOSArMTgyLDkgQEAKIAkJCXJldHVybiAtRVBFUk07CiAKIAkJLyoKLQkJICogT24gaWE2NCBpZiBhIHBhZ2UgaGFzIGJlZW4gbWFwcGVkIHNvbWV3aGVyZSBhcwotCQkgKiB1bmNhY2hlZCwgdGhlbiBpdCBtdXN0IGFsc28gYmUgYWNjZXNzZWQgdW5jYWNoZWQKLQkJICogYnkgdGhlIGtlcm5lbCBvciBkYXRhIGNvcnJ1cHRpb24gbWF5IG9jY3VyCisJCSAqIE9uIGlhNjQgaWYgYSBwYWdlIGhhcyBiZWVuIG1hcHBlZCBzb21ld2hlcmUgYXMgdW5jYWNoZWQsIHRoZW4KKwkJICogaXQgbXVzdCBhbHNvIGJlIGFjY2Vzc2VkIHVuY2FjaGVkIGJ5IHRoZSBrZXJuZWwgb3IgZGF0YQorCQkgKiBjb3JydXB0aW9uIG1heSBvY2N1ci4KIAkJICovCiAJCXB0ciA9IHhsYXRlX2Rldl9tZW1fcHRyKHApOwogCQlpZiAoIXB0cikgewpAQCAtMjQyLDEzICsyMTIsNDYgQEAKIAlyZXR1cm4gd3JpdHRlbjsKIH0KIAotaW50IF9fYXR0cmlidXRlX18oKHdlYWspKSBwaHlzX21lbV9hY2Nlc3NfcHJvdF9hbGxvd2VkKHN0cnVjdCBmaWxlICpmaWxlLAoraW50IF9fd2VhayBwaHlzX21lbV9hY2Nlc3NfcHJvdF9hbGxvd2VkKHN0cnVjdCBmaWxlICpmaWxlLAogCXVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90ICp2bWFfcHJvdCkKIHsKIAlyZXR1cm4gMTsKIH0KIAogI2lmbmRlZiBfX0hBVkVfUEhZU19NRU1fQUNDRVNTX1BST1QKKworLyoKKyAqIEFyY2hpdGVjdHVyZXMgdmFyeSBpbiBob3cgdGhleSBoYW5kbGUgY2FjaGluZyBmb3IgYWRkcmVzc2VzCisgKiBvdXRzaWRlIG9mIG1haW4gbWVtb3J5LgorICoKKyAqLworc3RhdGljIGludCB1bmNhY2hlZF9hY2Nlc3Moc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKyNpZiBkZWZpbmVkKENPTkZJR19JQTY0KQorCS8qCisJICogT24gaWE2NCwgd2UgaWdub3JlIE9fRFNZTkMgYmVjYXVzZSB3ZSBjYW5ub3QgdG9sZXJhdGUgbWVtb3J5CisJICogYXR0cmlidXRlIGFsaWFzZXMuCisJICovCisJcmV0dXJuICEoZWZpX21lbV9hdHRyaWJ1dGVzKGFkZHIpICYgRUZJX01FTU9SWV9XQik7CisjZWxpZiBkZWZpbmVkKENPTkZJR19NSVBTKQorCXsKKwkJZXh0ZXJuIGludCBfX3VuY2FjaGVkX2FjY2VzcyhzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIpOworCisJCXJldHVybiBfX3VuY2FjaGVkX2FjY2VzcyhmaWxlLCBhZGRyKTsKKwl9CisjZWxzZQorCS8qCisJICogQWNjZXNzaW5nIG1lbW9yeSBhYm92ZSB0aGUgdG9wIHRoZSBrZXJuZWwga25vd3MgYWJvdXQgb3IgdGhyb3VnaCBhCisJICogZmlsZSBwb2ludGVyCisJICogdGhhdCB3YXMgbWFya2VkIE9fRFNZTkMgd2lsbCBiZSBkb25lIG5vbi1jYWNoZWQuCisJICovCisJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX0RTWU5DKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gYWRkciA+PSBfX3BhKGhpZ2hfbWVtb3J5KTsKKyNlbmRpZgorfQorCiBzdGF0aWMgcGdwcm90X3QgcGh5c19tZW1fYWNjZXNzX3Byb3Qoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgcGZuLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCB2bWFfcHJvdCkKIHsKQEAgLTI5NCw3ICsyOTcsNyBAQAogI2VuZGlmCiB9OwogCi1zdGF0aWMgaW50IG1tYXBfbWVtKHN0cnVjdCBmaWxlICogZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hKQorc3RhdGljIGludCBtbWFwX21lbShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc2l6ZV90IHNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7CiAKQEAgLTMyOSw3ICszMzIsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX0RFVktNRU0KLXN0YXRpYyBpbnQgbW1hcF9rbWVtKHN0cnVjdCBmaWxlICogZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hKQorc3RhdGljIGludCBtbWFwX2ttZW0oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXVuc2lnbmVkIGxvbmcgcGZuOwogCkBAIC0zMzcsOSArMzQwLDkgQEAKIAlwZm4gPSBfX3BhKCh1NjQpdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUKSA+PiBQQUdFX1NISUZUOwogCiAJLyoKLQkgKiBSRUQtUEVOOiBvbiBzb21lIGFyY2hpdGVjdHVyZXMgdGhlcmUgaXMgbW9yZSBtYXBwZWQgbWVtb3J5Ci0JICogdGhhbiBhdmFpbGFibGUgaW4gbWVtX21hcCB3aGljaCBwZm5fdmFsaWQgY2hlY2tzCi0JICogZm9yLiBQZXJoYXBzIHNob3VsZCBhZGQgYSBuZXcgbWFjcm8gaGVyZS4KKwkgKiBSRUQtUEVOOiBvbiBzb21lIGFyY2hpdGVjdHVyZXMgdGhlcmUgaXMgbW9yZSBtYXBwZWQgbWVtb3J5IHRoYW4KKwkgKiBhdmFpbGFibGUgaW4gbWVtX21hcCB3aGljaCBwZm5fdmFsaWQgY2hlY2tzIGZvci4gUGVyaGFwcyBzaG91bGQgYWRkIGEKKwkgKiBuZXcgbWFjcm8gaGVyZS4KIAkgKgogCSAqIFJFRC1QRU46IHZtYWxsb2MgaXMgbm90IHN1cHBvcnRlZCByaWdodCBub3cuCiAJICovCkBAIC0zODksNyArMzkyLDcgQEAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSAqdmlydHVhbCogbWVtb3J5IGFzIHNlZW4gYnkgdGhlIGtlcm5lbC4KICAqLwotc3RhdGljIHNzaXplX3QgcmVhZF9rbWVtKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCAKK3N0YXRpYyBzc2l6ZV90IHJlYWRfa21lbShzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAl1bnNpZ25lZCBsb25nIHAgPSAqcHBvczsKQEAgLTQwMCw4ICs0MDMsOCBAQAogCXJlYWQgPSAwOwogCWlmIChwIDwgKHVuc2lnbmVkIGxvbmcpIGhpZ2hfbWVtb3J5KSB7CiAJCWxvd19jb3VudCA9IGNvdW50OwotCQlpZiAoY291bnQgPiAodW5zaWduZWQgbG9uZykgaGlnaF9tZW1vcnkgLSBwKQotCQkJbG93X2NvdW50ID0gKHVuc2lnbmVkIGxvbmcpIGhpZ2hfbWVtb3J5IC0gcDsKKwkJaWYgKGNvdW50ID4gKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgLSBwKQorCQkJbG93X2NvdW50ID0gKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgLSBwOwogCiAjaWZkZWYgX19BUkNIX0hBU19OT19QQUdFX1pFUk9fTUFQUEVECiAJCS8qIHdlIGRvbid0IGhhdmUgcGFnZSAwIG1hcHBlZCBvbiBzcGFyYyBhbmQgbTY4ay4uICovCkBAIC00NjUsOSArNDY4LDggQEAKIH0KIAogCi1zdGF0aWMgaW5saW5lIHNzaXplX3QKLWRvX3dyaXRlX2ttZW0odW5zaWduZWQgbG9uZyBwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAotCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorc3RhdGljIHNzaXplX3QgZG9fd3JpdGVfa21lbSh1bnNpZ25lZCBsb25nIHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3NpemVfdCB3cml0dGVuLCBzejsKIAl1bnNpZ25lZCBsb25nIGNvcGllZDsKQEAgLTQ5MSw5ICs0OTMsOSBAQAogCQlzeiA9IHNpemVfaW5zaWRlX3BhZ2UocCwgY291bnQpOwogCiAJCS8qCi0JCSAqIE9uIGlhNjQgaWYgYSBwYWdlIGhhcyBiZWVuIG1hcHBlZCBzb21ld2hlcmUgYXMKLQkJICogdW5jYWNoZWQsIHRoZW4gaXQgbXVzdCBhbHNvIGJlIGFjY2Vzc2VkIHVuY2FjaGVkCi0JCSAqIGJ5IHRoZSBrZXJuZWwgb3IgZGF0YSBjb3JydXB0aW9uIG1heSBvY2N1cgorCQkgKiBPbiBpYTY0IGlmIGEgcGFnZSBoYXMgYmVlbiBtYXBwZWQgc29tZXdoZXJlIGFzIHVuY2FjaGVkLCB0aGVuCisJCSAqIGl0IG11c3QgYWxzbyBiZSBhY2Nlc3NlZCB1bmNhY2hlZCBieSB0aGUga2VybmVsIG9yIGRhdGEKKwkJICogY29ycnVwdGlvbiBtYXkgb2NjdXIuCiAJCSAqLwogCQlwdHIgPSB4bGF0ZV9kZXZfa21lbV9wdHIoKGNoYXIgKilwKTsKIApAQCAtNTE0LDExICs1MTYsMTAgQEAKIAlyZXR1cm4gd3JpdHRlbjsKIH0KIAotCiAvKgogICogVGhpcyBmdW5jdGlvbiB3cml0ZXMgdG8gdGhlICp2aXJ0dWFsKiBtZW1vcnkgYXMgc2VlbiBieSB0aGUga2VybmVsLgogICovCi1zdGF0aWMgc3NpemVfdCB3cml0ZV9rbWVtKHN0cnVjdCBmaWxlICogZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWYsIAorc3RhdGljIHNzaXplX3Qgd3JpdGVfa21lbShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJdW5zaWduZWQgbG9uZyBwID0gKnBwb3M7CkBAIC01NzAsMTcgKzU3MSwxNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfREVWUE9SVAotc3RhdGljIHNzaXplX3QgcmVhZF9wb3J0KHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsCitzdGF0aWMgc3NpemVfdCByZWFkX3BvcnQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJdW5zaWduZWQgbG9uZyBpID0gKnBwb3M7CiAJY2hhciBfX3VzZXIgKnRtcCA9IGJ1ZjsKIAogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgYnVmLCBjb3VudCkpCi0JCXJldHVybiAtRUZBVUxUOyAKKwkJcmV0dXJuIC1FRkFVTFQ7CiAJd2hpbGUgKGNvdW50LS0gPiAwICYmIGkgPCA2NTUzNikgewotCQlpZiAoX19wdXRfdXNlcihpbmIoaSksdG1wKSA8IDApIAotCQkJcmV0dXJuIC1FRkFVTFQ7ICAKKwkJaWYgKF9fcHV0X3VzZXIoaW5iKGkpLCB0bXApIDwgMCkKKwkJCXJldHVybiAtRUZBVUxUOwogCQlpKys7CiAJCXRtcCsrOwogCX0KQEAgLTU4OCwyMiArNTg5LDIyIEBACiAJcmV0dXJuIHRtcC1idWY7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHdyaXRlX3BvcnQoc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZiwKK3N0YXRpYyBzc2l6ZV90IHdyaXRlX3BvcnQoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXVuc2lnbmVkIGxvbmcgaSA9ICpwcG9zOwogCWNvbnN0IGNoYXIgX191c2VyICogdG1wID0gYnVmOwogCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsYnVmLGNvdW50KSkKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYnVmLCBjb3VudCkpCiAJCXJldHVybiAtRUZBVUxUOwogCXdoaWxlIChjb3VudC0tID4gMCAmJiBpIDwgNjU1MzYpIHsKIAkJY2hhciBjOwogCQlpZiAoX19nZXRfdXNlcihjLCB0bXApKSB7CiAJCQlpZiAodG1wID4gYnVmKQogCQkJCWJyZWFrOwotCQkJcmV0dXJuIC1FRkFVTFQ7IAorCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCX0KLQkJb3V0YihjLGkpOworCQlvdXRiKGMsIGkpOwogCQlpKys7CiAJCXRtcCsrOwogCX0KQEAgLTYxMiwxMyArNjEzLDEzIEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHNzaXplX3QgcmVhZF9udWxsKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsCitzdGF0aWMgc3NpemVfdCByZWFkX251bGwoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCiAJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHdyaXRlX251bGwoc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZiwKK3N0YXRpYyBzc2l6ZV90IHdyaXRlX251bGwoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCiAJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXJldHVybiBjb3VudDsKQEAgLTYzMCwxMyArNjMxLDEzIEBACiAJcmV0dXJuIHNkLT5sZW47CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNwbGljZV93cml0ZV9udWxsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsc3RydWN0IGZpbGUgKm91dCwKK3N0YXRpYyBzc2l6ZV90IHNwbGljZV93cml0ZV9udWxsKHN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGUsIHN0cnVjdCBmaWxlICpvdXQsCiAJCQkJIGxvZmZfdCAqcHBvcywgc2l6ZV90IGxlbiwgdW5zaWduZWQgaW50IGZsYWdzKQogewogCXJldHVybiBzcGxpY2VfZnJvbV9waXBlKHBpcGUsIG91dCwgcHBvcywgbGVuLCBmbGFncywgcGlwZV90b19udWxsKTsKIH0KIAotc3RhdGljIHNzaXplX3QgcmVhZF96ZXJvKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsIAorc3RhdGljIHNzaXplX3QgcmVhZF96ZXJvKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLAogCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXNpemVfdCB3cml0dGVuOwpAQCAtNjY3LDcgKzY2OCw3IEBACiAJcmV0dXJuIHdyaXR0ZW4gPyB3cml0dGVuIDogLUVGQVVMVDsKIH0KIAotc3RhdGljIGludCBtbWFwX3plcm8oc3RydWN0IGZpbGUgKiBmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEpCitzdGF0aWMgaW50IG1tYXBfemVybyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAjaWZuZGVmIENPTkZJR19NTVUKIAlyZXR1cm4gLUVOT1NZUzsKQEAgLTY3Nyw3ICs2NzgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdCB3cml0ZV9mdWxsKHN0cnVjdCBmaWxlICogZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWYsCitzdGF0aWMgc3NpemVfdCB3cml0ZV9mdWxsKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlyZXR1cm4gLUVOT1NQQzsKQEAgLTY4OCw4ICs2ODksNyBAQAogICogY2FuIGZvcGVuKCkgYm90aCBkZXZpY2VzIHdpdGggImEiIG5vdy4gIFRoaXMgd2FzIHByZXZpb3VzbHkgaW1wb3NzaWJsZS4KICAqIC0tIFNSQi4KICAqLwotCi1zdGF0aWMgbG9mZl90IG51bGxfbHNlZWsoc3RydWN0IGZpbGUgKiBmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZykKK3N0YXRpYyBsb2ZmX3QgbnVsbF9sc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpCiB7CiAJcmV0dXJuIGZpbGUtPmZfcG9zID0gMDsKIH0KQEAgLTcwMiwyNCArNzAyLDMxIEBACiAgKiBhbHNvIG5vdGUgdGhhdCBzZWVraW5nIHJlbGF0aXZlIHRvIHRoZSAiZW5kIG9mIGZpbGUiIGlzbid0IHN1cHBvcnRlZDoKICAqIGl0IGhhcyBubyBtZWFuaW5nLCBzbyBpdCByZXR1cm5zIC1FSU5WQUwuCiAgKi8KLXN0YXRpYyBsb2ZmX3QgbWVtb3J5X2xzZWVrKHN0cnVjdCBmaWxlICogZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpCitzdGF0aWMgbG9mZl90IG1lbW9yeV9sc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpCiB7CiAJbG9mZl90IHJldDsKIAogCW11dGV4X2xvY2soJmZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCXN3aXRjaCAob3JpZykgewotCQljYXNlIDA6Ci0JCQlmaWxlLT5mX3BvcyA9IG9mZnNldDsKLQkJCXJldCA9IGZpbGUtPmZfcG9zOwotCQkJZm9yY2Vfc3VjY2Vzc2Z1bF9zeXNjYWxsX3JldHVybigpOworCWNhc2UgU0VFS19DVVI6CisJCW9mZnNldCArPSBmaWxlLT5mX3BvczsKKwkJaWYgKCh1bnNpZ25lZCBsb25nIGxvbmcpb2Zmc2V0IDwKKwkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpZmlsZS0+Zl9wb3MpIHsKKwkJCXJldCA9IC1FT1ZFUkZMT1c7CiAJCQlicmVhazsKLQkJY2FzZSAxOgotCQkJZmlsZS0+Zl9wb3MgKz0gb2Zmc2V0OwotCQkJcmV0ID0gZmlsZS0+Zl9wb3M7Ci0JCQlmb3JjZV9zdWNjZXNzZnVsX3N5c2NhbGxfcmV0dXJuKCk7CisJCX0KKwljYXNlIFNFRUtfU0VUOgorCQkvKiB0byBhdm9pZCB1c2VybGFuZCBtaXN0YWtpbmcgZl9wb3M9LTkgYXMgLUVCQURGPS05ICovCisJCWlmICgodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCA+PSB+MHhGRkZVTEwpIHsKKwkJCXJldCA9IC1FT1ZFUkZMT1c7CiAJCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldCA9IC1FSU5WQUw7CisJCX0KKwkJZmlsZS0+Zl9wb3MgPSBvZmZzZXQ7CisJCXJldCA9IGZpbGUtPmZfcG9zOworCQlmb3JjZV9zdWNjZXNzZnVsX3N5c2NhbGxfcmV0dXJuKCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CiAJfQogCW11dGV4X3VubG9jaygmZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHJldDsKQEAgLTgwMyw3ICs4MTAsNyBAQAogfTsKICNlbmRpZgogCi1zdGF0aWMgc3NpemVfdCBrbXNnX3dyaXRlKHN0cnVjdCBmaWxlICogZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWYsCitzdGF0aWMgc3NpemVfdCBrbXNnX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAogCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAljaGFyICp0bXA7CkBAIC04MjUsNyArODMyLDcgQEAKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMga21zZ19mb3BzID0gewotCS53cml0ZSA9CWttc2dfd3JpdGUsCisJLndyaXRlID0ga21zZ193cml0ZSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtZGV2IHsKQEAgLTg3Niw3ICs4ODMsNyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZW1vcnlfZm9wcyA9IHsKLQkub3BlbgkJPSBtZW1vcnlfb3BlbiwKKwkub3BlbiA9IG1lbW9yeV9vcGVuLAogfTsKIAogc3RhdGljIGNoYXIgKm1lbV9kZXZub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgbW9kZV90ICptb2RlKQpAQCAtODk3LDcgKzkwNCw3IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmIChyZWdpc3Rlcl9jaHJkZXYoTUVNX01BSk9SLCJtZW0iLCZtZW1vcnlfZm9wcykpCisJaWYgKHJlZ2lzdGVyX2NocmRldihNRU1fTUFKT1IsICJtZW0iLCAmbWVtb3J5X2ZvcHMpKQogCQlwcmludGsoInVuYWJsZSB0byBnZXQgbWFqb3IgJWQgZm9yIG1lbW9yeSBkZXZzXG4iLCBNRU1fTUFKT1IpOwogCiAJbWVtX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAibWVtIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbW10aW1lci5jIGIvZHJpdmVycy9jaGFyL21tdGltZXIuYwppbmRleCA5MTg3MTFhLi4wNGZkMGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbW10aW1lci5jCisrKyBiL2RyaXZlcnMvY2hhci9tbXRpbWVyLmMKQEAgLTU0Niw3ICs1NDYsNyBAQAogewogCWludCBub2RlaWQgPSBkYXRhOwogCXN0cnVjdCBtbXRpbWVyX25vZGUgKm1uID0gJnRpbWVyc1tub2RlaWRdOwotCXN0cnVjdCBtbXRpbWVyICp4ID0gcmJfZW50cnkobW4tPm5leHQsIHN0cnVjdCBtbXRpbWVyLCBsaXN0KTsKKwlzdHJ1Y3QgbW10aW1lciAqeDsKIAlzdHJ1Y3Qga19pdGltZXIgKnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21veGEuYyBiL2RyaXZlcnMvY2hhci9tb3hhLmMKaW5kZXggNjNlZTNiYi4uMTY2NDk1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21veGEuYworKysgYi9kcml2ZXJzL2NoYXIvbW94YS5jCkBAIC0xNjQsMjQgKzE2NCwyNSBAQAogc3RhdGljIHVuc2lnbmVkIGludCBtb3hhTG93V2F0ZXJDaGs7CiBzdGF0aWMgREVGSU5FX01VVEVYKG1veGFfb3BlbmxvY2spOwogc3RhdGljIERFRklORV9TUElOTE9DSyhtb3hhX2xvY2spOwotLyogVmFyaWFibGVzIGZvciBpbnNtb2QgKi8KLSNpZmRlZiBNT0RVTEUKKwogc3RhdGljIHVuc2lnbmVkIGxvbmcgYmFzZWFkZHJbTUFYX0JPQVJEU107CiBzdGF0aWMgdW5zaWduZWQgaW50IHR5cGVbTUFYX0JPQVJEU107CiBzdGF0aWMgdW5zaWduZWQgaW50IG51bXBvcnRzW01BWF9CT0FSRFNdOwotI2VuZGlmCiAKIE1PRFVMRV9BVVRIT1IoIldpbGxpYW0gQ2hlbiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJNT1hBIEludGVsbGlvIEZhbWlseSBNdWx0aXBvcnQgQm9hcmQgRGV2aWNlIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotI2lmZGVmIE1PRFVMRQorTU9EVUxFX0ZJUk1XQVJFKCJjMjE4dHVueC5jb2QiKTsKK01PRFVMRV9GSVJNV0FSRSgiY3AyMDR1bnguY29kIik7CitNT0RVTEVfRklSTVdBUkUoImMzMjB0dW54LmNvZCIpOworCiBtb2R1bGVfcGFyYW1fYXJyYXkodHlwZSwgdWludCwgTlVMTCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHR5cGUsICJjYXJkIHR5cGU6IEMyMTg9MiwgQzMyMD00Iik7CiBtb2R1bGVfcGFyYW1fYXJyYXkoYmFzZWFkZHIsIHVsb25nLCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoYmFzZWFkZHIsICJiYXNlIGFkZHJlc3MiKTsKIG1vZHVsZV9wYXJhbV9hcnJheShudW1wb3J0cywgdWludCwgTlVMTCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG51bXBvcnRzLCAibnVtcG9ydHMgKGlnbm9yZWQgZm9yIEMyMTgpIik7Ci0jZW5kaWYKKwogbW9kdWxlX3BhcmFtKHR0eW1ham9yLCBpbnQsIDApOwogCiAvKgpAQCAtMTAyNCw2ICsxMDI1LDggQEAKIHsKIAl1bnNpZ25lZCBpbnQgaXNhYnJkcyA9IDA7CiAJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IG1veGFfYm9hcmRfY29uZiAqYnJkID0gbW94YV9ib2FyZHM7CisJdW5zaWduZWQgaW50IGk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJNT1hBIEludGVsbGlvIGZhbWlseSBkcml2ZXIgdmVyc2lvbiAlc1xuIiwKIAkJCU1PWEFfVkVSU0lPTik7CkBAIC0xMDUxLDEwICsxMDU0LDcgQEAKIAl9CiAKIAkvKiBGaW5kIHRoZSBib2FyZHMgZGVmaW5lZCBmcm9tIG1vZHVsZSBhcmdzLiAqLwotI2lmZGVmIE1PRFVMRQotCXsKLQlzdHJ1Y3QgbW94YV9ib2FyZF9jb25mICpicmQgPSBtb3hhX2JvYXJkczsKLQl1bnNpZ25lZCBpbnQgaTsKKwogCWZvciAoaSA9IDA7IGkgPCBNQVhfQk9BUkRTOyBpKyspIHsKIAkJaWYgKCFiYXNlYWRkcltpXSkKIAkJCWJyZWFrOwpAQCAtMTA4Nyw4ICsxMDg3LDYgQEAKIAkJCWlzYWJyZHMrKzsKIAkJfQogCX0KLQl9Ci0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19QQ0kKIAlyZXR2YWwgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZtb3hhX3BjaV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL214c2VyLmMgYi9kcml2ZXJzL2NoYXIvbXhzZXIuYwppbmRleCAzZDkyMzA2Li5lMGM1ZDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbXhzZXIuYworKysgYi9kcml2ZXJzL2NoYXIvbXhzZXIuYwpAQCAtODk1LDggKzg5NSw3IEBACiAJaWYgKGluYihpbmZvLT5pb2FkZHIgKyBVQVJUX0xTUikgPT0gMHhmZikgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5zbG9jaywgZmxhZ3MpOwogCQlpZiAoY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgewotCQkJaWYgKHR0eSkKLQkJCQlzZXRfYml0KFRUWV9JT19FUlJPUiwgJnR0eS0+ZmxhZ3MpOworCQkJc2V0X2JpdChUVFlfSU9fRVJST1IsICZ0dHktPmZsYWdzKTsKIAkJCXJldHVybiAwOwogCQl9IGVsc2UKIAkJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL25fdHR5LmMgYi9kcml2ZXJzL2NoYXIvbl90dHkuYwppbmRleCAyZTUwZjRkLi5iZGFlODMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbl90dHkuYworKysgYi9kcml2ZXJzL2NoYXIvbl90dHkuYwpAQCAtNDgsNiArNDgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApAQCAtMjA5MSwzICsyMDkyLDE5IEBACiAJLnJlY2VpdmVfYnVmICAgICA9IG5fdHR5X3JlY2VpdmVfYnVmLAogCS53cml0ZV93YWtldXAgICAgPSBuX3R0eV93cml0ZV93YWtldXAKIH07CisKKy8qKgorICoJbl90dHlfaW5oZXJpdF9vcHMJLQlpbmhlcml0IE5fVFRZIG1ldGhvZHMKKyAqCUBvcHM6IHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHdoZXJlIHRvIHNhdmUgTl9UVFkgbWV0aG9kcworICoKKyAqCVVzZWQgYnkgYSBnZW5lcmljIHN0cnVjdCB0dHlfbGRpc2Nfb3BzIHRvIGVhc2lseSBpbmhlcml0IE5fVFRZCisgKgltZXRob2RzLgorICovCisKK3ZvaWQgbl90dHlfaW5oZXJpdF9vcHMoc3RydWN0IHR0eV9sZGlzY19vcHMgKm9wcykKK3sKKwkqb3BzID0gdHR5X2xkaXNjX05fVFRZOworCW9wcy0+b3duZXIgPSBOVUxMOworCW9wcy0+cmVmY291bnQgPSBvcHMtPmZsYWdzID0gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5fdHR5X2luaGVyaXRfb3BzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9ub3pvbWkuYyBiL2RyaXZlcnMvY2hhci9ub3pvbWkuYwppbmRleCAyYWQ3ZDM3Li5hM2YzMmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbm96b21pLmMKKysrIGIvZHJpdmVycy9jaGFyL25vem9taS5jCkBAIC0xMzYsMTAgKzEzNiw2IEBACiAjZGVmaW5lIFJFQ0VJVkVfQlVGX01BWAkJNAogCiAKLS8qIERlZmluZSBhbGwgdHlwZXMgb2YgdmVuZG9ycyBhbmQgZGV2aWNlcyB0byBzdXBwb3J0ICovCi0jZGVmaW5lIFZFTkRPUjEJCTB4MTkzMQkvKiBWZW5kb3IgT3B0aW9uICovCi0jZGVmaW5lIERFVklDRTEJCTB4MDAwYwkvKiBIU0RQQSBjYXJkICovCi0KICNkZWZpbmUgUl9JSVIJCTB4MDAwMAkvKiBJbnRlcnJ1cHQgSWRlbnRpdHkgUmVnaXN0ZXIgKi8KICNkZWZpbmUgUl9GQ1IJCTB4MDAwMAkvKiBGbG93IENvbnRyb2wgUmVnaXN0ZXIgKi8KICNkZWZpbmUgUl9JRVIJCTB4MDAwNAkvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCkBAIC0zNzEsNiArMzY3LDggQEAKIAlzdHJ1Y3QgbXV0ZXggdHR5X3NlbTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB0dHlfd2FpdDsKIAlzdHJ1Y3QgYXN5bmNfaWNvdW50IHR0eV9pY291bnQ7CisKKwlzdHJ1Y3Qgbm96b21pICpkYzsKIH07CiAKIC8qIFByaXZhdGUgZGF0YSBvbmUgZm9yIGVhY2ggY2FyZCBpbiB0aGUgc3lzdGVtICovCkBAIC00MDUsNyArNDAzLDcgQEAKIAogLyogICAgR2xvYmFsIHZhcmlhYmxlcyAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5vem9taV9wY2lfdGJsW10gX19kZXZpbml0Y29uc3QgPSB7Ci0Je1BDSV9ERVZJQ0UoVkVORE9SMSwgREVWSUNFMSl9LAorCXtQQ0lfREVWSUNFKDB4MTkzMSwgMHgwMDBjKX0sCS8qIE5vem9taSBIU0RQQSAqLwogCXt9LAogfTsKIApAQCAtNDE0LDYgKzQxMiw4IEBACiBzdGF0aWMgc3RydWN0IG5vem9taSAqbmRldnNbTk9aT01JX01BWF9DQVJEU107CiBzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKm50dHlfZHJpdmVyOwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9wb3J0X29wZXJhdGlvbnMgbm96X3R0eV9wb3J0X29wczsKKwogLyoKICAqIGZpbmQgY2FyZCBieSB0dHlfaW5kZXgKICAqLwpAQCAtODUzLDggKzg1Myw2IEBACiAJCWdvdG8gcHV0OwogCX0KIAotCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgc2l6ZSk7Ci0KIAl3aGlsZSAoc2l6ZSA+IDApIHsKIAkJcmVhZF9tZW0zMigodTMyICopIGJ1ZiwgYWRkciArIG9mZnNldCwgUkVDRUlWRV9CVUZfTUFYKTsKIApAQCAtMTQ3Myw5ICsxNDcxLDExIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX1BPUlQ7IGkrKykgewogCQlzdHJ1Y3QgZGV2aWNlICp0dHlfZGV2OwotCi0JCW11dGV4X2luaXQoJmRjLT5wb3J0W2ldLnR0eV9zZW0pOwotCQl0dHlfcG9ydF9pbml0KCZkYy0+cG9ydFtpXS5wb3J0KTsKKwkJc3RydWN0IHBvcnQgKnBvcnQgPSAmZGMtPnBvcnRbaV07CisJCXBvcnQtPmRjID0gZGM7CisJCW11dGV4X2luaXQoJnBvcnQtPnR0eV9zZW0pOworCQl0dHlfcG9ydF9pbml0KCZwb3J0LT5wb3J0KTsKKwkJcG9ydC0+cG9ydC5vcHMgPSAmbm96X3R0eV9wb3J0X29wczsKIAkJdHR5X2RldiA9IHR0eV9yZWdpc3Rlcl9kZXZpY2UobnR0eV9kcml2ZXIsIGRjLT5pbmRleF9zdGFydCArIGksCiAJCQkJCQkJJnBkZXYtPmRldik7CiAKQEAgLTE2MDAsNjcgKzE2MDAsNzQgQEAKICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqLwogCi0vKiBDYWxsZWQgd2hlbiB0aGUgdXNlcnNwYWNlIHByb2Nlc3Mgb3BlbnMgdGhlIHR0eSwgL2Rldi9ub3oqLiAgKi8KLXN0YXRpYyBpbnQgbnR0eV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBudHR5X2luc3RhbGwoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgcG9ydCAqcG9ydCA9IGdldF9wb3J0X2J5X3R0eSh0dHkpOwogCXN0cnVjdCBub3pvbWkgKmRjID0gZ2V0X2RjX2J5X3R0eSh0dHkpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KKwlpbnQgcmV0OwogCWlmICghcG9ydCB8fCAhZGMgfHwgZGMtPnN0YXRlICE9IE5PWk9NSV9TVEFURV9SRUFEWSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZwb3J0LT50dHlfc2VtKSkKLQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQotCXBvcnQtPnBvcnQuY291bnQrKzsKLQlkYy0+b3Blbl90dHlzKys7Ci0KLQkvKiBFbmFibGUgaW50ZXJydXB0IGRvd25saW5rIGZvciBjaGFubmVsICovCi0JaWYgKHBvcnQtPnBvcnQuY291bnQgPT0gMSkgewotCQl0dHktPmRyaXZlcl9kYXRhID0gcG9ydDsKLQkJdHR5X3BvcnRfdHR5X3NldCgmcG9ydC0+cG9ydCwgdHR5KTsKLQkJREJHMSgib3BlbjogJWQiLCBwb3J0LT50b2tlbl9kbCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZkYy0+c3Bpbl9tdXRleCwgZmxhZ3MpOwotCQlkYy0+bGFzdF9pZXIgPSBkYy0+bGFzdF9pZXIgfCBwb3J0LT50b2tlbl9kbDsKLQkJd3JpdGV3KGRjLT5sYXN0X2llciwgZGMtPnJlZ19pZXIpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYy0+c3Bpbl9tdXRleCwgZmxhZ3MpOworCXJldCA9IHR0eV9pbml0X3Rlcm1pb3ModHR5KTsKKwlpZiAocmV0ID09IDApIHsKKwkJdHR5X2RyaXZlcl9rcmVmX2dldChkcml2ZXIpOworCQlkcml2ZXItPnR0eXNbdHR5LT5pbmRleF0gPSB0dHk7CiAJfQotCW11dGV4X3VubG9jaygmcG9ydC0+dHR5X3NlbSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbnR0eV9jbGVhbnVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgbnR0eV9hY3RpdmF0ZShzdHJ1Y3QgdHR5X3BvcnQgKnRwb3J0LCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBwb3J0ICpwb3J0ID0gY29udGFpbmVyX29mKHRwb3J0LCBzdHJ1Y3QgcG9ydCwgcG9ydCk7CisJc3RydWN0IG5vem9taSAqZGMgPSBwb3J0LT5kYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJREJHMSgib3BlbjogJWQiLCBwb3J0LT50b2tlbl9kbCk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRjLT5zcGluX211dGV4LCBmbGFncyk7CisJZGMtPmxhc3RfaWVyID0gZGMtPmxhc3RfaWVyIHwgcG9ydC0+dG9rZW5fZGw7CisJd3JpdGV3KGRjLT5sYXN0X2llciwgZGMtPnJlZ19pZXIpOworCWRjLT5vcGVuX3R0eXMrKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYy0+c3Bpbl9tdXRleCwgZmxhZ3MpOworCXByaW50aygibm96OiBhY3RpdmF0ZWQgJWQ6ICVwXG4iLCB0dHktPmluZGV4LCB0cG9ydCk7CiAJcmV0dXJuIDA7CiB9CiAKLS8qIENhbGxlZCB3aGVuIHRoZSB1c2Vyc3BhY2UgcHJvY2VzcyBjbG9zZSB0aGUgdHR5LCAvZGV2L25veiouIEFsc28KLSAgIGNhbGxlZCBpbW1lZGlhdGVseSBpZiBudHR5X29wZW4gZmFpbHMgaW4gd2hpY2ggY2FzZSB0dHktPmRyaXZlcl9kYXRhCi0gICB3aWxsIGJlIE5VTEwgYW4gd2UgZXhpdCBieSB0aGUgZmlyc3QgcmV0dXJuICovCi0KLXN0YXRpYyB2b2lkIG50dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IG50dHlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlzdHJ1Y3Qgbm96b21pICpkYyA9IGdldF9kY19ieV90dHkodHR5KTsKLQlzdHJ1Y3QgcG9ydCAqbnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwotCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZucG9ydC0+cG9ydDsKKwlzdHJ1Y3QgcG9ydCAqcG9ydCA9IGdldF9wb3J0X2J5X3R0eSh0dHkpOworCXJldHVybiB0dHlfcG9ydF9vcGVuKCZwb3J0LT5wb3J0LCB0dHksIGZpbHApOworfQorCitzdGF0aWMgdm9pZCBudHR5X3NodXRkb3duKHN0cnVjdCB0dHlfcG9ydCAqdHBvcnQpCit7CisJc3RydWN0IHBvcnQgKnBvcnQgPSBjb250YWluZXJfb2YodHBvcnQsIHN0cnVjdCBwb3J0LCBwb3J0KTsKKwlzdHJ1Y3Qgbm96b21pICpkYyA9IHBvcnQtPmRjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIWRjIHx8ICFucG9ydCkKLQkJcmV0dXJuOwotCi0JLyogVXNlcnMgY2Fubm90IGludGVycnVwdCBhIGNsb3NlICovCi0JbXV0ZXhfbG9jaygmbnBvcnQtPnR0eV9zZW0pOwotCi0JV0FSTl9PTighcG9ydC0+Y291bnQpOwotCisJREJHMSgiY2xvc2U6ICVkIiwgcG9ydC0+dG9rZW5fZGwpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkYy0+c3Bpbl9tdXRleCwgZmxhZ3MpOworCWRjLT5sYXN0X2llciAmPSB+KHBvcnQtPnRva2VuX2RsKTsKKwl3cml0ZXcoZGMtPmxhc3RfaWVyLCBkYy0+cmVnX2llcik7CiAJZGMtPm9wZW5fdHR5cy0tOwotCXBvcnQtPmNvdW50LS07CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGMtPnNwaW5fbXV0ZXgsIGZsYWdzKTsKKwlwcmludGsoIm5vejogc2h1dGRvd24gJXBcbiIsIHRwb3J0KTsKK30KIAotCWlmIChwb3J0LT5jb3VudCA9PSAwKSB7Ci0JCURCRzEoImNsb3NlOiAlZCIsIG5wb3J0LT50b2tlbl9kbCk7Ci0JCXR0eV9wb3J0X3R0eV9zZXQocG9ydCwgTlVMTCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZkYy0+c3Bpbl9tdXRleCwgZmxhZ3MpOwotCQlkYy0+bGFzdF9pZXIgJj0gfihucG9ydC0+dG9rZW5fZGwpOwotCQl3cml0ZXcoZGMtPmxhc3RfaWVyLCBkYy0+cmVnX2llcik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRjLT5zcGluX211dGV4LCBmbGFncyk7Ci0JfQotCW11dGV4X3VubG9jaygmbnBvcnQtPnR0eV9zZW0pOworc3RhdGljIHZvaWQgbnR0eV9jbG9zZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaWYgKHBvcnQpCisJCXR0eV9wb3J0X2Nsb3NlKCZwb3J0LT5wb3J0LCB0dHksIGZpbHApOworfQorCitzdGF0aWMgdm9pZCBudHR5X2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQoreworCXN0cnVjdCBwb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKKwl0dHlfcG9ydF9oYW5ndXAoJnBvcnQtPnBvcnQpOwogfQogCiAvKgpAQCAtMTY4MCwxNSArMTY4Nyw3IEBACiAJaWYgKCFkYyB8fCAhcG9ydCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlpZiAodW5saWtlbHkoIW11dGV4X3RyeWxvY2soJnBvcnQtPnR0eV9zZW0pKSkgewotCQkvKgotCQkgKiBtdXN0IHRlc3QgbG9jayBhcyB0dHkgbGF5ZXIgd3JhcHMgY2FsbHMKLQkJICogdG8gdGhpcyBmdW5jdGlvbiB3aXRoIEJLTAotCQkgKi8KLQkJZGV2X2VycigmZGMtPnBkZXYtPmRldiwgIldvdWxkIGhhdmUgZGVhZGxvY2tlZCAtICIKLQkJCSJyZXR1cm4gRUFHQUlOXG4iKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQorCW11dGV4X2xvY2soJnBvcnQtPnR0eV9zZW0pOwogCiAJaWYgKHVubGlrZWx5KCFwb3J0LT5wb3J0LmNvdW50KSkgewogCQlEQkcxKCIgIik7CkBAIC0xNzI4LDI1ICsxNzI3LDIzIEBACiAgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYnkgdGhlIHVwcGVyIHR0eSBsYXllci4KICAqICAgI2FjY29yZGluZyB0byBzb3VyY2VzIE5fVFRZLmMgaXQgZXhwZWN0cyBhIHZhbHVlID49IDAgYW5kCiAgKiAgICBkb2VzIG5vdCBjaGVjayBmb3IgbmVnYXRpdmUgdmFsdWVzLgorICoKKyAqIElmIHRoZSBwb3J0IGlzIHVucGx1Z2dlZCByZXBvcnQgbG90cyBvZiByb29tIGFuZCBsZXQgdGhlIGJpdHMKKyAqIGRyaWJibGUgYXdheSBzbyB3ZSBkb24ndCBibG9jayBhbnl0aGluZy4KICAqLwogc3RhdGljIGludCBudHR5X3dyaXRlX3Jvb20oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JaW50IHJvb20gPSAwOworCWludCByb29tID0gNDA5NjsKIAljb25zdCBzdHJ1Y3Qgbm96b21pICpkYyA9IGdldF9kY19ieV90dHkodHR5KTsKIAotCWlmICghZGMgfHwgIXBvcnQpCi0JCXJldHVybiAwOwotCWlmICghbXV0ZXhfdHJ5bG9jaygmcG9ydC0+dHR5X3NlbSkpCi0JCXJldHVybiAwOwotCi0JaWYgKCFwb3J0LT5wb3J0LmNvdW50KQotCQlnb3RvIGV4aXQ7Ci0KLQlyb29tID0gcG9ydC0+Zmlmb191bC5zaXplIC0ga2ZpZm9fbGVuKCZwb3J0LT5maWZvX3VsKTsKLQotZXhpdDoKLQltdXRleF91bmxvY2soJnBvcnQtPnR0eV9zZW0pOworCWlmIChkYykgeworCQltdXRleF9sb2NrKCZwb3J0LT50dHlfc2VtKTsKKwkJaWYgKHBvcnQtPnBvcnQuY291bnQpCisJCQlyb29tID0gcG9ydC0+Zmlmb191bC5zaXplIC0KKwkJCQkJa2ZpZm9fbGVuKCZwb3J0LT5maWZvX3VsKTsKKwkJbXV0ZXhfdW5sb2NrKCZwb3J0LT50dHlfc2VtKTsKKwl9CiAJcmV0dXJuIHJvb207CiB9CiAKQEAgLTE5MDYsMTAgKzE5MDMsMTYgQEAKIAlyZXR1cm4gcnZhbDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfcG9ydF9vcGVyYXRpb25zIG5vel90dHlfcG9ydF9vcHMgPSB7CisJLmFjdGl2YXRlID0gbnR0eV9hY3RpdmF0ZSwKKwkuc2h1dGRvd24gPSBudHR5X3NodXRkb3duLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyB0dHlfb3BzID0gewogCS5pb2N0bCA9IG50dHlfaW9jdGwsCiAJLm9wZW4gPSBudHR5X29wZW4sCiAJLmNsb3NlID0gbnR0eV9jbG9zZSwKKwkuaGFuZ3VwID0gbnR0eV9oYW5ndXAsCiAJLndyaXRlID0gbnR0eV93cml0ZSwKIAkud3JpdGVfcm9vbSA9IG50dHlfd3JpdGVfcm9vbSwKIAkudW50aHJvdHRsZSA9IG50dHlfdW50aHJvdHRsZSwKQEAgLTE5MTcsNiArMTkyMCw4IEBACiAJLmNoYXJzX2luX2J1ZmZlciA9IG50dHlfY2hhcnNfaW5fYnVmZmVyLAogCS50aW9jbWdldCA9IG50dHlfdGlvY21nZXQsCiAJLnRpb2Ntc2V0ID0gbnR0eV90aW9jbXNldCwKKwkuaW5zdGFsbCA9IG50dHlfaW5zdGFsbCwKKwkuY2xlYW51cCA9IG50dHlfY2xlYW51cCwKIH07CiAKIC8qIE1vZHVsZSBpbml0aWFsaXphdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3B0eS5jIGIvZHJpdmVycy9jaGFyL3B0eS5jCmluZGV4IDM4NWM0NGIuLjVlZTQyNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9wdHkuYworKysgYi9kcml2ZXJzL2NoYXIvcHR5LmMKQEAgLTIyMCw3ICsyMjAsNyBAQAogICoJQHR0eTogdHR5IGJlaW5nIHJlc2l6ZWQKICAqCUB3czogd2luZG93IHNpemUgYmVpbmcgc2V0LgogICoKLSAqCVVwZGF0ZSB0aGUgdGVybWlvcyB2YXJpYWJsZXMgYW5kIHNlbmQgdGhlIG5lY2Nlc3Nhcnkgc2lnbmFscyB0bworICoJVXBkYXRlIHRoZSB0ZXJtaW9zIHZhcmlhYmxlcyBhbmQgc2VuZCB0aGUgbmVjZXNzYXJ5IHNpZ25hbHMgdG8KICAqCXBlZm9ybSBhIHRlcm1pbmFsIHJlc2l6ZSBjb3JyZWN0bHkKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmFuZG9tLmMgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKaW5kZXggMjg0OTcxMy4uMmZkM2QzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jCisrKyBiL2RyaXZlcnMvY2hhci9yYW5kb20uYwpAQCAtMTE5MSw3ICsxMTkxLDcgQEAKIHZvaWQgZ2VuZXJhdGVfcmFuZG9tX3V1aWQodW5zaWduZWQgY2hhciB1dWlkX291dFsxNl0pCiB7CiAJZ2V0X3JhbmRvbV9ieXRlcyh1dWlkX291dCwgMTYpOwotCS8qIFNldCBVVUlEIHZlcnNpb24gdG8gNCAtLS0gdHJ1ZWx5IHJhbmRvbSBnZW5lcmF0aW9uICovCisJLyogU2V0IFVVSUQgdmVyc2lvbiB0byA0IC0tLSB0cnVseSByYW5kb20gZ2VuZXJhdGlvbiAqLwogCXV1aWRfb3V0WzZdID0gKHV1aWRfb3V0WzZdICYgMHgwRikgfCAweDQwOwogCS8qIFNldCB0aGUgVVVJRCB2YXJpYW50IHRvIERDRSAqLwogCXV1aWRfb3V0WzhdID0gKHV1aWRfb3V0WzhdICYgMHgzRikgfCAweDgwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NlcmlhbDE2Ny5jIGIvZHJpdmVycy9jaGFyL3NlcmlhbDE2Ny5jCmluZGV4IDQ1MjM3MGEuLjFlYzNkNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zZXJpYWwxNjcuYworKysgYi9kcml2ZXJzL2NoYXIvc2VyaWFsMTY3LmMKQEAgLTY1OCw4ICs2NTgsNyBAQAogCQkJaW5mby0+bW9uLmNoYXJfbWF4ID0gY2hhcl9jb3VudDsKIAkJaW5mby0+bW9uLmNoYXJfbGFzdCA9IGNoYXJfY291bnQ7CiAjZW5kaWYKLQkJbGVuID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBjaGFyX2NvdW50KTsKLQkJd2hpbGUgKGxlbi0tKSB7CisJCXdoaWxlIChjaGFyX2NvdW50LS0pIHsKIAkJCWRhdGEgPSBiYXNlX2FkZHJbQ3lSRFJdOwogCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhLCBUVFlfTk9STUFMKTsKICNpZmRlZiBDWUNMT01fMTZZX0hBQ0sKQEAgLTE5OTAsNyArMTk4OSw3IEBACiAJLyoKIAkgKiBBdHRlbXB0IHRvIHNldCB1cCBhbGwgY2hhbm5lbHMgdG8gc29tZXRoaW5nIHJlYXNvbmFibGUsIGFuZAogCSAqIGJhbmcgb3V0IGEgSU5JVF9DSEFOIGNvbW1hbmQuICBXZSBzaG91bGQgdGhlbiBiZSBhYmxlIHRvIGxpbWl0Ci0JICogdGhlIGFtbW91bnQgb2YgZmlkZGxpbmcgd2UgaGF2ZSB0byBkbyBpbiBub3JtYWwgcnVubmluZy4KKwkgKiB0aGUgYW1vdW50IG9mIGZpZGRsaW5nIHdlIGhhdmUgdG8gZG8gaW4gbm9ybWFsIHJ1bm5pbmcuCiAJICovCiAKIAlmb3IgKGNoID0gMzsgY2ggPj0gMDsgY2gtLSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NwZWNpYWxpeC5jIGIvZHJpdmVycy9jaGFyL3NwZWNpYWxpeC5jCmluZGV4IDI2OGUxN2YuLjA3YWMxNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zcGVjaWFsaXguYworKysgYi9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMKQEAgLTY0Niw4ICs2NDYsNiBAQAogCWRwcmludGsoU1hfREVCVUdfUlgsICJwb3J0OiAlcDogY291bnQ6ICVkXG4iLCBwb3J0LCBjb3VudCk7CiAJcG9ydC0+aGl0c1tjb3VudCA+IDggPyA5IDogY291bnRdKys7CiAKLQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIGNvdW50KTsKLQogCXdoaWxlIChjb3VudC0tKQogCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIHN4X2luKGJwLCBDRDE4NnhfUkRSKSwgVFRZX05PUk1BTCk7CiAJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9zeW5jbGluay5jIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKaW5kZXggNDg0NmI3My4uMDY1OGZjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKKysrIGIvZHJpdmVycy9jaGFyL3N5bmNsaW5rLmMKQEAgLTIwMzEsNyArMjAzMSw3IEBACiAJaWYgKG1nc2xfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAibWdzbF9wdXRfY2hhciIpKQogCQlyZXR1cm4gMDsKIAotCWlmICghdHR5IHx8ICFpbmZvLT54bWl0X2J1ZikKKwlpZiAoIWluZm8tPnhtaXRfYnVmKQogCQlyZXR1cm4gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5pcnFfc3BpbmxvY2ssIGZsYWdzKTsKQEAgLTIxMjEsNyArMjEyMSw3IEBACiAJaWYgKG1nc2xfcGFyYW5vaWFfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAibWdzbF93cml0ZSIpKQogCQlnb3RvIGNsZWFudXA7CiAKLQlpZiAoIXR0eSB8fCAhaW5mby0+eG1pdF9idWYpCisJaWYgKCFpbmZvLT54bWl0X2J1ZikKIAkJZ290byBjbGVhbnVwOwogCiAJaWYgKCBpbmZvLT5wYXJhbXMubW9kZSA9PSBNR1NMX01PREVfSERMQyB8fApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3N5bmNsaW5rX2d0LmMgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYwppbmRleCA4Njc4ZjBjLi40NTYxY2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYworKysgYi9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYwpAQCAtNDY4LDcgKzQ2OCw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHRidWZfYnl0ZXMoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbyk7CiBzdGF0aWMgdm9pZCByZXNldF90YnVmcyhzdHJ1Y3Qgc2xndF9pbmZvICppbmZvKTsKIHN0YXRpYyB2b2lkIHRkbWFfcmVzZXQoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgdm9pZCB0eF9sb2FkKHN0cnVjdCBzbGd0X2luZm8gKmluZm8sIGNvbnN0IGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGNvdW50KTsKK3N0YXRpYyBib29sIHR4X2xvYWQoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgY291bnQpOwogCiBzdGF0aWMgdm9pZCBnZXRfc2lnbmFscyhzdHJ1Y3Qgc2xndF9pbmZvICppbmZvKTsKIHN0YXRpYyB2b2lkIHNldF9zaWduYWxzKHN0cnVjdCBzbGd0X2luZm8gKmluZm8pOwpAQCAtODEzLDU5ICs4MTMsMzIgQEAKIAlpbnQgcmV0ID0gMDsKIAlzdHJ1Y3Qgc2xndF9pbmZvICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCBidWZzX25lZWRlZDsKIAogCWlmIChzYW5pdHlfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAid3JpdGUiKSkKLQkJZ290byBjbGVhbnVwOworCQlyZXR1cm4gLUVJTzsKKwogCURCR0lORk8oKCIlcyB3cml0ZSBjb3VudD0lZFxuIiwgaW5mby0+ZGV2aWNlX25hbWUsIGNvdW50KSk7CiAKLQlpZiAoIWluZm8tPnR4X2J1ZikKLQkJZ290byBjbGVhbnVwOworCWlmICghaW5mby0+dHhfYnVmIHx8IChjb3VudCA+IGluZm8tPm1heF9mcmFtZV9zaXplKSkKKwkJcmV0dXJuIC1FSU87CiAKLQlpZiAoY291bnQgPiBpbmZvLT5tYXhfZnJhbWVfc2l6ZSkgewotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGNsZWFudXA7Ci0JfQorCWlmICghY291bnQgfHwgdHR5LT5zdG9wcGVkIHx8IHR0eS0+aHdfc3RvcHBlZCkKKwkJcmV0dXJuIDA7CiAKLQlpZiAoIWNvdW50KQotCQlnb3RvIGNsZWFudXA7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKIAotCWlmICghaW5mby0+dHhfYWN0aXZlICYmIGluZm8tPnR4X2NvdW50KSB7CisJaWYgKGluZm8tPnR4X2NvdW50KSB7CiAJCS8qIHNlbmQgYWNjdW11bGF0ZWQgZGF0YSBmcm9tIHNlbmRfY2hhcigpICovCi0JCXR4X2xvYWQoaW5mbywgaW5mby0+dHhfYnVmLCBpbmZvLT50eF9jb3VudCk7Ci0JCWdvdG8gc3RhcnQ7CisJCWlmICghdHhfbG9hZChpbmZvLCBpbmZvLT50eF9idWYsIGluZm8tPnR4X2NvdW50KSkKKwkJCWdvdG8gY2xlYW51cDsKKwkJaW5mby0+dHhfY291bnQgPSAwOwogCX0KLQlidWZzX25lZWRlZCA9IChjb3VudC9ETUFCVUZTSVpFKTsKLQlpZiAoY291bnQgJSBETUFCVUZTSVpFKQotCQkrK2J1ZnNfbmVlZGVkOwotCWlmIChidWZzX25lZWRlZCA+IGZyZWVfdGJ1Zl9jb3VudChpbmZvKSkKLQkJZ290byBjbGVhbnVwOwogCi0JcmV0ID0gaW5mby0+dHhfY291bnQgPSBjb3VudDsKLQl0eF9sb2FkKGluZm8sIGJ1ZiwgY291bnQpOwotCWdvdG8gc3RhcnQ7Ci0KLXN0YXJ0OgotIAlpZiAoaW5mby0+dHhfY291bnQgJiYgIXR0eS0+c3RvcHBlZCAmJiAhdHR5LT5od19zdG9wcGVkKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLGZsYWdzKTsKLQkJaWYgKCFpbmZvLT50eF9hY3RpdmUpCi0JCSAJdHhfc3RhcnQoaW5mbyk7Ci0JCWVsc2UgaWYgKCEocmRfcmVnMzIoaW5mbywgVERDU1IpICYgQklUMCkpIHsKLQkJCS8qIHRyYW5zbWl0IHN0aWxsIGFjdGl2ZSBidXQgdHJhbnNtaXQgRE1BIHN0b3BwZWQgKi8KLQkJCXVuc2lnbmVkIGludCBpID0gaW5mby0+dGJ1Zl9jdXJyZW50OwotCQkJaWYgKCFpKQotCQkJCWkgPSBpbmZvLT50YnVmX2NvdW50OwotCQkJaS0tOwotCQkJLyogaWYgRE1BIGJ1ZiB1bnNlbnQgbXVzdCB0cnkgbGF0ZXIgYWZ0ZXIgdHggaWRsZSAqLwotCQkJaWYgKGRlc2NfY291bnQoaW5mby0+dGJ1ZnNbaV0pKQotCQkJCXJldCA9IDA7Ci0JCX0KLQkJaWYgKHJldCA+IDApCi0JCQl1cGRhdGVfdHhfdGltZXIoaW5mbyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssZmxhZ3MpOwotIAl9CisJaWYgKHR4X2xvYWQoaW5mbywgYnVmLCBjb3VudCkpCisJCXJldCA9IGNvdW50OwogCiBjbGVhbnVwOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKIAlEQkdJTkZPKCgiJXMgd3JpdGUgcmM9JWRcbiIsIGluZm8tPmRldmljZV9uYW1lLCByZXQpKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtODgyLDcgKzg1NSw3IEBACiAJaWYgKCFpbmZvLT50eF9idWYpCiAJCXJldHVybiAwOwogCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLGZsYWdzKTsKLQlpZiAoIWluZm8tPnR4X2FjdGl2ZSAmJiAoaW5mby0+dHhfY291bnQgPCBpbmZvLT5tYXhfZnJhbWVfc2l6ZSkpIHsKKwlpZiAoaW5mby0+dHhfY291bnQgPCBpbmZvLT5tYXhfZnJhbWVfc2l6ZSkgewogCQlpbmZvLT50eF9idWZbaW5mby0+dHhfY291bnQrK10gPSBjaDsKIAkJcmV0ID0gMTsKIAl9CkBAIC05ODEsMTAgKzk1NCw4IEBACiAJREJHSU5GTygoIiVzIGZsdXNoX2NoYXJzIHN0YXJ0IHRyYW5zbWl0XG4iLCBpbmZvLT5kZXZpY2VfbmFtZSkpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssZmxhZ3MpOwotCWlmICghaW5mby0+dHhfYWN0aXZlICYmIGluZm8tPnR4X2NvdW50KSB7Ci0JCXR4X2xvYWQoaW5mbywgaW5mby0+dHhfYnVmLGluZm8tPnR4X2NvdW50KTsKLQkgCXR4X3N0YXJ0KGluZm8pOwotCX0KKwlpZiAoaW5mby0+dHhfY291bnQgJiYgdHhfbG9hZChpbmZvLCBpbmZvLT50eF9idWYsIGluZm8tPnR4X2NvdW50KSkKKwkJaW5mby0+dHhfY291bnQgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssZmxhZ3MpOwogfQogCkBAIC05OTcsMTAgKzk2OCw5IEBACiAJCXJldHVybjsKIAlEQkdJTkZPKCgiJXMgZmx1c2hfYnVmZmVyXG4iLCBpbmZvLT5kZXZpY2VfbmFtZSkpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssZmxhZ3MpOwotCWlmICghaW5mby0+dHhfYWN0aXZlKQotCQlpbmZvLT50eF9jb3VudCA9IDA7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jayxmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwlpbmZvLT50eF9jb3VudCA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jaywgZmxhZ3MpOwogCiAJdHR5X3dha2V1cCh0dHkpOwogfQpAQCAtMTAzMywxMiArMTAwMywxMCBAQAogCWlmIChzYW5pdHlfY2hlY2soaW5mbywgdHR5LT5uYW1lLCAidHhfcmVsZWFzZSIpKQogCQlyZXR1cm47CiAJREJHSU5GTygoIiVzIHR4X3JlbGVhc2VcbiIsIGluZm8tPmRldmljZV9uYW1lKSk7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssZmxhZ3MpOwotCWlmICghaW5mby0+dHhfYWN0aXZlICYmIGluZm8tPnR4X2NvdW50KSB7Ci0JCXR4X2xvYWQoaW5mbywgaW5mby0+dHhfYnVmLCBpbmZvLT50eF9jb3VudCk7Ci0JIAl0eF9zdGFydChpbmZvKTsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW5mby0+bG9jayxmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKKwlpZiAoaW5mby0+dHhfY291bnQgJiYgdHhfbG9hZChpbmZvLCBpbmZvLT50eF9idWYsIGluZm8tPnR4X2NvdW50KSkKKwkJaW5mby0+dHhfY291bnQgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoKQEAgLTE1MDYsMjcgKzE0NzQsMjUgQEAKIAogCURCR0lORk8oKCIlcyBoZGxjX3htaXRcbiIsIGRldi0+bmFtZSkpOwogCisJaWYgKCFza2ItPmxlbikKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwogCS8qIHN0b3Agc2VuZGluZyB1bnRpbCB0aGlzIGZyYW1lIGNvbXBsZXRlcyAqLwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotCS8qIGNvcHkgZGF0YSB0byBkZXZpY2UgYnVmZmVycyAqLwotCWluZm8tPnR4X2NvdW50ID0gc2tiLT5sZW47Ci0JdHhfbG9hZChpbmZvLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKLQogCS8qIHVwZGF0ZSBuZXR3b3JrIHN0YXRpc3RpY3MgKi8KIAlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCi0JLyogZG9uZSB3aXRoIHNvY2tldCBidWZmZXIsIHNvIGZyZWUgaXQgKi8KLQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0KIAkvKiBzYXZlIHN0YXJ0IHRpbWUgZm9yIHRyYW5zbWl0IHRpbWVvdXQgZGV0ZWN0aW9uICovCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW5mby0+bG9jayxmbGFncyk7Ci0JdHhfc3RhcnQoaW5mbyk7Ci0JdXBkYXRlX3R4X3RpbWVyKGluZm8pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisJdHhfbG9hZChpbmZvLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbmZvLT5sb2NrLCBmbGFncyk7CisKKwkvKiBkb25lIHdpdGggc29ja2V0IGJ1ZmZlciwgc28gZnJlZSBpdCAqLworCWRldl9rZnJlZV9za2Ioc2tiKTsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CkBAIC0yMTgwLDcgKzIxNDYsNyBAQAogCiAJaWYgKGluZm8tPnBhcmFtcy5tb2RlID09IE1HU0xfTU9ERV9BU1lOQykgewogCQlpZiAoc3RhdHVzICYgSVJRX1RYSURMRSkgewotCQkJaWYgKGluZm8tPnR4X2NvdW50KQorCQkJaWYgKGluZm8tPnR4X2FjdGl2ZSkKIAkJCQlpc3JfdHhlb20oaW5mbywgc3RhdHVzKTsKIAkJfQogCQlpZiAoaW5mby0+cnhfcGlvICYmIChzdGF0dXMgJiBJUlFfUlhEQVRBKSkKQEAgLTIyNzYsMTMgKzIyNDIsNDIgQEAKIAl9CiB9CiAKKy8qCisgKiByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBhcmUgdW5zZW50IHR4IERNQSBidWZmZXJzLCBvdGhlcndpc2UgZmFsc2UKKyAqCisgKiBpZiB0aGVyZSBhcmUgdW5zZW50IGJ1ZmZlcnMgdGhlbiBpbmZvLT50YnVmX3N0YXJ0CisgKiBpcyBzZXQgdG8gaW5kZXggb2YgZmlyc3QgdW5zZW50IGJ1ZmZlcgorICovCitzdGF0aWMgYm9vbCB1bnNlbnRfdGJ1ZnMoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgaSA9IGluZm8tPnRidWZfY3VycmVudDsKKwlib29sIHJjID0gZmFsc2U7CisKKwkvKgorCSAqIHNlYXJjaCBiYWNrd2FyZHMgZnJvbSBsYXN0IGxvYWRlZCBidWZmZXIgKHByZWNlZGVzIHRidWZfY3VycmVudCkKKwkgKiBmb3IgZmlyc3QgdW5zZW50IGJ1ZmZlciAoZGVzY19jb3VudCA+IDApCisJICovCisKKwlkbyB7CisJCWlmIChpKQorCQkJaS0tOworCQllbHNlCisJCQlpID0gaW5mby0+dGJ1Zl9jb3VudCAtIDE7CisJCWlmICghZGVzY19jb3VudChpbmZvLT50YnVmc1tpXSkpCisJCQlicmVhazsKKwkJaW5mby0+dGJ1Zl9zdGFydCA9IGk7CisJCXJjID0gdHJ1ZTsKKwl9IHdoaWxlIChpICE9IGluZm8tPnRidWZfY3VycmVudCk7CisKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyB2b2lkIGlzcl90eGVvbShzdHJ1Y3Qgc2xndF9pbmZvICppbmZvLCB1bnNpZ25lZCBzaG9ydCBzdGF0dXMpCiB7CiAJREJHSVNSKCgiJXMgdHhlb20gc3RhdHVzPSUwNHhcbiIsIGluZm8tPmRldmljZV9uYW1lLCBzdGF0dXMpKTsKIAogCXNsZ3RfaXJxX29mZihpbmZvLCBJUlFfVFhEQVRBICsgSVJRX1RYSURMRSArIElSUV9UWFVOREVSKTsKIAl0ZG1hX3Jlc2V0KGluZm8pOwotCXJlc2V0X3RidWZzKGluZm8pOwogCWlmIChzdGF0dXMgJiBJUlFfVFhVTkRFUikgewogCQl1bnNpZ25lZCBzaG9ydCB2YWwgPSByZF9yZWcxNihpbmZvLCBUQ1IpOwogCQl3cl9yZWcxNihpbmZvLCBUQ1IsICh1bnNpZ25lZCBzaG9ydCkodmFsIHwgQklUMikpOyAvKiBzZXQgcmVzZXQgYml0ICovCkBAIC0yMjk3LDggKzIyOTIsMTIgQEAKIAkJCQlpbmZvLT5pY291bnQudHhvaysrOwogCQl9CiAKKwkJaWYgKHVuc2VudF90YnVmcyhpbmZvKSkgeworCQkJdHhfc3RhcnQoaW5mbyk7CisJCQl1cGRhdGVfdHhfdGltZXIoaW5mbyk7CisJCQlyZXR1cm47CisJCX0KIAkJaW5mby0+dHhfYWN0aXZlID0gZmFsc2U7Ci0JCWluZm8tPnR4X2NvdW50ID0gMDsKIAogCQlkZWxfdGltZXIoJmluZm8tPnR4X3RpbWVyKTsKIApAQCAtMzk0OSw3ICszOTQ4LDcgQEAKIAkJaW5mby0+dHhfZW5hYmxlZCA9IHRydWU7CiAJfQogCi0JaWYgKGluZm8tPnR4X2NvdW50KSB7CisJaWYgKGRlc2NfY291bnQoaW5mby0+dGJ1ZnNbaW5mby0+dGJ1Zl9zdGFydF0pKSB7CiAJCWluZm8tPmRyb3BfcnRzX29uX3R4X2RvbmUgPSBmYWxzZTsKIAogCQlpZiAoaW5mby0+cGFyYW1zLm1vZGUgIT0gTUdTTF9NT0RFX0FTWU5DKSB7CkBAIC00NzcyLDI1ICs0NzcxLDM2IEBACiB9CiAKIC8qCi0gKiBsb2FkIHRyYW5zbWl0IERNQSBidWZmZXIocykgd2l0aCBkYXRhCisgKiBsb2FkIGRhdGEgaW50byB0cmFuc21pdCBETUEgYnVmZmVyIHJpbmcgYW5kIHN0YXJ0IHRyYW5zbWl0dGVyIGlmIG5lZWRlZAorICogcmV0dXJuIHRydWUgaWYgZGF0YSBhY2NlcHRlZCwgb3RoZXJ3aXNlIGZhbHNlIChidWZmZXJzIGZ1bGwpCiAgKi8KLXN0YXRpYyB2b2lkIHR4X2xvYWQoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3N0YXRpYyBib29sIHR4X2xvYWQoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqYnVmLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKIAl1bnNpZ25lZCBzaG9ydCBjb3VudDsKIAl1bnNpZ25lZCBpbnQgaTsKIAlzdHJ1Y3Qgc2xndF9kZXNjICpkOwogCi0JaWYgKHNpemUgPT0gMCkKLQkJcmV0dXJuOworCS8qIGNoZWNrIHJlcXVpcmVkIGJ1ZmZlciBzcGFjZSAqLworCWlmIChESVZfUk9VTkRfVVAoc2l6ZSwgRE1BQlVGU0laRSkgPiBmcmVlX3RidWZfY291bnQoaW5mbykpCisJCXJldHVybiBmYWxzZTsKIAogCURCR0RBVEEoaW5mbywgYnVmLCBzaXplLCAidHgiKTsKIAorCS8qCisJICogY29weSBkYXRhIHRvIG9uZSBvciBtb3JlIERNQSBidWZmZXJzIGluIGNpcmN1bGFyIHJpbmcKKwkgKiB0YnVmX3N0YXJ0ICAgPSBmaXJzdCBidWZmZXIgZm9yIHRoaXMgZGF0YQorCSAqIHRidWZfY3VycmVudCA9IG5leHQgZnJlZSBidWZmZXIKKwkgKgorCSAqIENvcHkgYWxsIGRhdGEgYmVmb3JlIG1ha2luZyBkYXRhIHZpc2libGUgdG8gRE1BIGNvbnRyb2xsZXIgYnkKKwkgKiBzZXR0aW5nIGRlc2NyaXB0b3IgY291bnQgb2YgdGhlIGZpcnN0IGJ1ZmZlci4KKwkgKiBUaGlzIHByZXZlbnRzIGFuIGFjdGl2ZSBETUEgY29udHJvbGxlciBmcm9tIHJlYWRpbmcgdGhlIGZpcnN0IERNQQorCSAqIGJ1ZmZlcnMgb2YgYSBmcmFtZSBhbmQgc3RvcHBpbmcgYmVmb3JlIHRoZSBmaW5hbCBidWZmZXJzIGFyZSBmaWxsZWQuCisJICovCisKIAlpbmZvLT50YnVmX3N0YXJ0ID0gaSA9IGluZm8tPnRidWZfY3VycmVudDsKIAogCXdoaWxlIChzaXplKSB7CiAJCWQgPSAmaW5mby0+dGJ1ZnNbaV07Ci0JCWlmICgrK2kgPT0gaW5mby0+dGJ1Zl9jb3VudCkKLQkJCWkgPSAwOwogCiAJCWNvdW50ID0gKHVuc2lnbmVkIHNob3J0KSgoc2l6ZSA+IERNQUJVRlNJWkUpID8gRE1BQlVGU0laRSA6IHNpemUpOwogCQltZW1jcHkoZC0+YnVmLCBidWYsIGNvdW50KTsKQEAgLTQ4MDgsMTEgKzQ4MTgsMjcgQEAKIAkJZWxzZQogCQkJc2V0X2Rlc2NfZW9mKCpkLCAwKTsKIAotCQlzZXRfZGVzY19jb3VudCgqZCwgY291bnQpOworCQkvKiBzZXQgZGVzY3JpcHRvciBjb3VudCBmb3IgYWxsIGJ1dCBmaXJzdCBidWZmZXIgKi8KKwkJaWYgKGkgIT0gaW5mby0+dGJ1Zl9zdGFydCkKKwkJCXNldF9kZXNjX2NvdW50KCpkLCBjb3VudCk7CiAJCWQtPmJ1Zl9jb3VudCA9IGNvdW50OworCisJCWlmICgrK2kgPT0gaW5mby0+dGJ1Zl9jb3VudCkKKwkJCWkgPSAwOwogCX0KIAogCWluZm8tPnRidWZfY3VycmVudCA9IGk7CisKKwkvKiBzZXQgZmlyc3QgYnVmZmVyIGNvdW50IHRvIG1ha2UgbmV3IGRhdGEgdmlzaWJsZSB0byBETUEgY29udHJvbGxlciAqLworCWQgPSAmaW5mby0+dGJ1ZnNbaW5mby0+dGJ1Zl9zdGFydF07CisJc2V0X2Rlc2NfY291bnQoKmQsIGQtPmJ1Zl9jb3VudCk7CisKKwkvKiBzdGFydCB0cmFuc21pdHRlciBpZiBuZWVkZWQgYW5kIHVwZGF0ZSB0cmFuc21pdCB0aW1lb3V0ICovCisJaWYgKCFpbmZvLT50eF9hY3RpdmUpCisJCXR4X3N0YXJ0KGluZm8pOworCXVwZGF0ZV90eF90aW1lcihpbmZvKTsKKworCXJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgaW50IHJlZ2lzdGVyX3Rlc3Qoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbykKQEAgLTQ5MzQsOSArNDk2MCw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmluZm8tPmxvY2ssZmxhZ3MpOwogCWFzeW5jX21vZGUoaW5mbyk7CiAJcnhfc3RhcnQoaW5mbyk7Ci0JaW5mby0+dHhfY291bnQgPSBjb3VudDsKIAl0eF9sb2FkKGluZm8sIGJ1ZiwgY291bnQpOwotCXR4X3N0YXJ0KGluZm8pOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKIAogCS8qIHdhaXQgZm9yIHJlY2VpdmUgY29tcGxldGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfYXVkaXQuYyBiL2RyaXZlcnMvY2hhci90dHlfYXVkaXQuYwppbmRleCBhYzE2ZmJlLi4yODNhMTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2F1ZGl0LmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9hdWRpdC5jCkBAIC0xNDgsNyArMTQ4LDYgQEAKIAlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKIAlzaWctPmF1ZGl0X3R0eSA9IGN1cnJlbnQtPnNpZ25hbC0+YXVkaXRfdHR5OwogCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0Jc2lnLT50dHlfYXVkaXRfYnVmID0gTlVMTDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdHR5X2J1ZmZlci5jIGIvZHJpdmVycy9jaGFyL3R0eV9idWZmZXIuYwppbmRleCA2NmZhNGUxLi5hZjhkOTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfYnVmZmVyLmMKQEAgLTIzMSw5ICsyMzEsMTAgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKTsKIAogLyoqCi0gKgl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nCS0JQWRkIGNoYXJhY3RlcnMgdG8gdGhlIHR0eSBidWZmZXIKKyAqCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZml4ZWRfZmxhZyAtIEFkZCBjaGFyYWN0ZXJzIHRvIHRoZSB0dHkgYnVmZmVyCiAgKglAdHR5OiB0dHkgc3RydWN0dXJlCiAgKglAY2hhcnM6IGNoYXJhY3RlcnMKKyAqCUBmbGFnOiBmbGFnIHZhbHVlIGZvciBlYWNoIGNoYXJhY3RlcgogICoJQHNpemU6IHNpemUKICAqCiAgKglRdWV1ZSBhIHNlcmllcyBvZiBieXRlcyB0byB0aGUgdHR5IGJ1ZmZlcmluZy4gQWxsIHRoZSBjaGFyYWN0ZXJzCkBAIC0yNDIsMTggKzI0MywxOSBAQAogICoJTG9ja2luZzogQ2FsbGVkIGZ1bmN0aW9ucyBtYXkgdGFrZSB0dHktPmJ1Zi5sb2NrCiAgKi8KIAotaW50IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmcoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY2hhcnMsCi0JCQkJc2l6ZV90IHNpemUpCitpbnQgdHR5X2luc2VydF9mbGlwX3N0cmluZ19maXhlZF9mbGFnKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoYXJzLCBjaGFyIGZsYWcsIHNpemVfdCBzaXplKQogewogCWludCBjb3BpZWQgPSAwOwogCWRvIHsKLQkJaW50IHNwYWNlID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBzaXplIC0gY29waWVkKTsKKwkJaW50IGdvYWwgPSBtaW4oc2l6ZSAtIGNvcGllZCwgVFRZX0JVRkZFUl9QQUdFKTsKKwkJaW50IHNwYWNlID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBnb2FsKTsKIAkJc3RydWN0IHR0eV9idWZmZXIgKnRiID0gdHR5LT5idWYudGFpbDsKIAkJLyogSWYgdGhlcmUgaXMgbm8gc3BhY2UgdGhlbiB0YiBtYXkgYmUgTlVMTCAqLwogCQlpZiAodW5saWtlbHkoc3BhY2UgPT0gMCkpCiAJCQlicmVhazsKIAkJbWVtY3B5KHRiLT5jaGFyX2J1Zl9wdHIgKyB0Yi0+dXNlZCwgY2hhcnMsIHNwYWNlKTsKLQkJbWVtc2V0KHRiLT5mbGFnX2J1Zl9wdHIgKyB0Yi0+dXNlZCwgVFRZX05PUk1BTCwgc3BhY2UpOworCQltZW1zZXQodGItPmZsYWdfYnVmX3B0ciArIHRiLT51c2VkLCBmbGFnLCBzcGFjZSk7CiAJCXRiLT51c2VkICs9IHNwYWNlOwogCQljb3BpZWQgKz0gc3BhY2U7CiAJCWNoYXJzICs9IHNwYWNlOwpAQCAtMjYyLDcgKzI2NCw3IEBACiAJfSB3aGlsZSAodW5saWtlbHkoc2l6ZSA+IGNvcGllZCkpOwogCXJldHVybiBjb3BpZWQ7CiB9Ci1FWFBPUlRfU1lNQk9MKHR0eV9pbnNlcnRfZmxpcF9zdHJpbmcpOworRVhQT1JUX1NZTUJPTCh0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZpeGVkX2ZsYWcpOwogCiAvKioKICAqCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZmxhZ3MJLQlBZGQgY2hhcmFjdGVycyB0byB0aGUgdHR5IGJ1ZmZlcgpAQCAtMjgzLDcgKzI4NSw4IEBACiB7CiAJaW50IGNvcGllZCA9IDA7CiAJZG8gewotCQlpbnQgc3BhY2UgPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHNpemUgLSBjb3BpZWQpOworCQlpbnQgZ29hbCA9IG1pbihzaXplIC0gY29waWVkLCBUVFlfQlVGRkVSX1BBR0UpOworCQlpbnQgc3BhY2UgPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIGdvYWwpOwogCQlzdHJ1Y3QgdHR5X2J1ZmZlciAqdGIgPSB0dHktPmJ1Zi50YWlsOwogCQkvKiBJZiB0aGVyZSBpcyBubyBzcGFjZSB0aGVuIHRiIG1heSBiZSBOVUxMICovCiAJCWlmICh1bmxpa2VseShzcGFjZSA9PSAwKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfaW8uYyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwppbmRleCBkY2I5MDgzLi5hNDJjNDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2lvLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9pby5jCkBAIC0yMDI4LDcgKzIwMjgsNyBAQAogICoJQHJvd3M6IHJvd3MgKGNoYXJhY3RlcikKICAqCUBjb2xzOiBjb2xzIChjaGFyYWN0ZXIpCiAgKgotICoJVXBkYXRlIHRoZSB0ZXJtaW9zIHZhcmlhYmxlcyBhbmQgc2VuZCB0aGUgbmVjY2Vzc2FyeSBzaWduYWxzIHRvCisgKglVcGRhdGUgdGhlIHRlcm1pb3MgdmFyaWFibGVzIGFuZCBzZW5kIHRoZSBuZWNlc3Nhcnkgc2lnbmFscyB0bwogICoJcGVmb3JtIGEgdGVybWluYWwgcmVzaXplIGNvcnJlY3RseQogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfbGRpc2MuYyBiL2RyaXZlcnMvY2hhci90dHlfbGRpc2MuYwppbmRleCAzZjY1M2Y3Li41MDBlNzQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdHR5X2xkaXNjLmMKKysrIGIvZHJpdmVycy9jaGFyL3R0eV9sZGlzYy5jCkBAIC03MDYsMTIgKzcwNiwxMyBAQAogLyoqCiAgKgl0dHlfbGRpc2NfcmVpbml0CS0JcmVpbml0aWFsaXNlIHRoZSB0dHkgbGRpc2MKICAqCUB0dHk6IHR0eSB0byByZWluaXQKKyAqCUBsZGlzYzogbGluZSBkaXNjaXBsaW5lIHRvIHJlaW5pdGlhbGl6ZQogICoKLSAqCVN3aXRjaCB0aGUgdHR5IGJhY2sgdG8gTl9UVFkgbGluZSBkaXNjaXBsaW5lIGFuZCBsZWF2ZSB0aGUKLSAqCWxkaXNjIHN0YXRlIGNsb3NlZAorICoJU3dpdGNoIHRoZSB0dHkgdG8gYSBsaW5lIGRpc2NpcGxpbmUgYW5kIGxlYXZlIHRoZSBsZGlzYworICoJc3RhdGUgY2xvc2VkCiAgKi8KIAotc3RhdGljIHZvaWQgdHR5X2xkaXNjX3JlaW5pdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQorc3RhdGljIHZvaWQgdHR5X2xkaXNjX3JlaW5pdChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgbGRpc2MpCiB7CiAJc3RydWN0IHR0eV9sZGlzYyAqbGQ7CiAKQEAgLTcyMSwxMCArNzIyLDEwIEBACiAJLyoKIAkgKglTd2l0Y2ggdGhlIGxpbmUgZGlzY2lwbGluZSBiYWNrCiAJICovCi0JbGQgPSB0dHlfbGRpc2NfZ2V0KE5fVFRZKTsKKwlsZCA9IHR0eV9sZGlzY19nZXQobGRpc2MpOwogCUJVR19PTihJU19FUlIobGQpKTsKIAl0dHlfbGRpc2NfYXNzaWduKHR0eSwgbGQpOwotCXR0eV9zZXRfdGVybWlvc19sZGlzYyh0dHksIE5fVFRZKTsKKwl0dHlfc2V0X3Rlcm1pb3NfbGRpc2ModHR5LCBsZGlzYyk7CiB9CiAKIC8qKgpAQCAtNzQ1LDYgKzc0Niw4IEBACiB2b2lkIHR0eV9sZGlzY19oYW5ndXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKKwlpbnQgcmVzZXQgPSB0dHktPmRyaXZlci0+ZmxhZ3MgJiBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1M7CisJaW50IGVyciA9IDA7CiAKIAkvKgogCSAqIEZJWE1FISBXaGF0IGFyZSB0aGUgbG9ja2luZyBpc3N1ZXMgaGVyZT8gVGhpcyBtYXkgbWUgb3ZlcmRvaW5nCkBAIC03NzIsMjUgKzc3NSwzMiBAQAogCXdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKCZ0dHktPnJlYWRfd2FpdCwgUE9MTElOKTsKIAkvKgogCSAqIFNodXRkb3duIHRoZSBjdXJyZW50IGxpbmUgZGlzY2lwbGluZSwgYW5kIHJlc2V0IGl0IHRvCi0JICogTl9UVFkuCisJICogTl9UVFkgaWYgbmVlZCBiZS4KKwkgKgorCSAqIEF2b2lkIHJhY2luZyBzZXRfbGRpc2Mgb3IgdHR5X2xkaXNjX3JlbGVhc2UKIAkgKi8KLQlpZiAodHR5LT5kcml2ZXItPmZsYWdzICYgVFRZX0RSSVZFUl9SRVNFVF9URVJNSU9TKSB7Ci0JCS8qIEF2b2lkIHJhY2luZyBzZXRfbGRpc2Mgb3IgdHR5X2xkaXNjX3JlbGVhc2UgKi8KLQkJbXV0ZXhfbG9jaygmdHR5LT5sZGlzY19tdXRleCk7Ci0JCXR0eV9sZGlzY19oYWx0KHR0eSk7Ci0JCWlmICh0dHktPmxkaXNjKSB7CS8qIE5vdCB5ZXQgY2xvc2VkICovCi0JCQkvKiBTd2l0Y2ggYmFjayB0byBOX1RUWSAqLwotCQkJdHR5X2xkaXNjX3JlaW5pdCh0dHkpOwotCQkJLyogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGEgY2xvc2VkIGxkaXNjIGFuZCB3ZSB3YW50IHRvCi0JCQkgICByZW9wZW4gaXQuIFdlIGNvdWxkIGRlZmVyIHRoaXMgdG8gdGhlIG5leHQgb3BlbiBidXQKLQkJCSAgIGl0IG1lYW5zIGF1ZGl0aW5nIGEgbG90IG9mIG90aGVyIHBhdGhzIHNvIHRoaXMgaXMKLQkJCSAgIGEgRklYTUUgKi8KLQkJCVdBUk5fT04odHR5X2xkaXNjX29wZW4odHR5LCB0dHktPmxkaXNjKSk7Ci0JCQl0dHlfbGRpc2NfZW5hYmxlKHR0eSk7CisJbXV0ZXhfbG9jaygmdHR5LT5sZGlzY19tdXRleCk7CisJdHR5X2xkaXNjX2hhbHQodHR5KTsKKwkvKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgYSBjbG9zZWQgbGRpc2MgYW5kIHdlIHdhbnQgdG8KKwkgICByZW9wZW4gaXQuIFdlIGNvdWxkIGRlZmVyIHRoaXMgdG8gdGhlIG5leHQgb3BlbiBidXQKKwkgICBpdCBtZWFucyBhdWRpdGluZyBhIGxvdCBvZiBvdGhlciBwYXRocyBzbyB0aGlzIGlzCisJICAgYSBGSVhNRSAqLworCWlmICh0dHktPmxkaXNjKSB7CS8qIE5vdCB5ZXQgY2xvc2VkICovCisJCWlmIChyZXNldCA9PSAwKSB7CisJCQl0dHlfbGRpc2NfcmVpbml0KHR0eSwgdHR5LT50ZXJtaW9zLT5jX2xpbmUpOworCQkJZXJyID0gdHR5X2xkaXNjX29wZW4odHR5LCB0dHktPmxkaXNjKTsKIAkJfQotCQltdXRleF91bmxvY2soJnR0eS0+bGRpc2NfbXV0ZXgpOwotCQl0dHlfcmVzZXRfdGVybWlvcyh0dHkpOworCQkvKiBJZiB0aGUgcmUtb3BlbiBmYWlscyBvciB3ZSByZXNldCB0aGVuIGdvIHRvIE5fVFRZLiBUaGUKKwkJICAgTl9UVFkgb3BlbiBjYW5ub3QgZmFpbCAqLworCQlpZiAocmVzZXQgfHwgZXJyKSB7CisJCQl0dHlfbGRpc2NfcmVpbml0KHR0eSwgTl9UVFkpOworCQkJV0FSTl9PTih0dHlfbGRpc2Nfb3Blbih0dHksIHR0eS0+bGRpc2MpKTsKKwkJfQorCQl0dHlfbGRpc2NfZW5hYmxlKHR0eSk7CiAJfQorCW11dGV4X3VubG9jaygmdHR5LT5sZGlzY19tdXRleCk7CisJaWYgKHJlc2V0KQorCQl0dHlfcmVzZXRfdGVybWlvcyh0dHkpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92aXJ0aW9fY29uc29sZS5jIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKaW5kZXggMjEzMzczYi4uZjQwNGNjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKKysrIGIvZHJpdmVycy9jaGFyL3ZpcnRpb19jb25zb2xlLmMKQEAgLTM3OSw3ICszNzksNyBAQAogCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKIAlzdHJ1Y3QgdmlydGlvX2NvbnNvbGVfY29udHJvbCBjcGt0OwogCXN0cnVjdCB2aXJ0cXVldWUgKnZxOwotCWludCBsZW47CisJdW5zaWduZWQgaW50IGxlbjsKIAogCWlmICghdXNlX211bHRpcG9ydChwb3J0LT5wb3J0ZGV2KSkKIAkJcmV0dXJuIDA7CkBAIC0xMDcxLDI3ICsxMDcxLDI3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IGZpbGxfcXVldWUoc3RydWN0IHZpcnRxdWV1ZSAqdnEsIHNwaW5sb2NrX3QgKmxvY2spCiB7CiAJc3RydWN0IHBvcnRfYnVmZmVyICpidWY7Ci0JdW5zaWduZWQgaW50IHJldDsKLQlpbnQgZXJyOworCXVuc2lnbmVkIGludCBucl9hZGRlZF9idWZzOworCWludCByZXQ7CiAKLQlyZXQgPSAwOworCW5yX2FkZGVkX2J1ZnMgPSAwOwogCWRvIHsKIAkJYnVmID0gYWxsb2NfYnVmKFBBR0VfU0laRSk7CiAJCWlmICghYnVmKQogCQkJYnJlYWs7CiAKIAkJc3Bpbl9sb2NrX2lycShsb2NrKTsKLQkJZXJyID0gYWRkX2luYnVmKHZxLCBidWYpOwotCQlpZiAoZXJyIDwgMCkgeworCQlyZXQgPSBhZGRfaW5idWYodnEsIGJ1Zik7CisJCWlmIChyZXQgPCAwKSB7CiAJCQlzcGluX3VubG9ja19pcnEobG9jayk7CiAJCQlmcmVlX2J1ZihidWYpOwogCQkJYnJlYWs7CiAJCX0KLQkJcmV0Kys7CisJCW5yX2FkZGVkX2J1ZnMrKzsKIAkJc3Bpbl91bmxvY2tfaXJxKGxvY2spOwotCX0gd2hpbGUgKGVyciA+IDApOworCX0gd2hpbGUgKHJldCA+IDApOwogCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gbnJfYWRkZWRfYnVmczsKIH0KIAogc3RhdGljIGludCBhZGRfcG9ydChzdHJ1Y3QgcG9ydHNfZGV2aWNlICpwb3J0ZGV2LCB1MzIgaWQpCkBAIC0xMTAwLDYgKzExMDAsNyBAQAogCXN0cnVjdCBwb3J0ICpwb3J0OwogCXN0cnVjdCBwb3J0X2J1ZmZlciAqYnVmOwogCWRldl90IGRldnQ7CisJdW5zaWduZWQgaW50IG5yX2FkZGVkX2J1ZnM7CiAJaW50IGVycjsKIAogCXBvcnQgPSBrbWFsbG9jKHNpemVvZigqcG9ydCksIEdGUF9LRVJORUwpOwpAQCAtMTE0NCw4ICsxMTQ1LDggQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwb3J0LT53YWl0cXVldWUpOwogCiAJLyogRmlsbCB0aGUgaW5fdnEgd2l0aCBidWZmZXJzIHNvIHRoZSBob3N0IGNhbiBzZW5kIHVzIGRhdGEuICovCi0JZXJyID0gZmlsbF9xdWV1ZShwb3J0LT5pbl92cSwgJnBvcnQtPmluYnVmX2xvY2spOwotCWlmICghZXJyKSB7CisJbnJfYWRkZWRfYnVmcyA9IGZpbGxfcXVldWUocG9ydC0+aW5fdnEsICZwb3J0LT5pbmJ1Zl9sb2NrKTsKKwlpZiAoIW5yX2FkZGVkX2J1ZnMpIHsKIAkJZGV2X2Vycihwb3J0LT5kZXYsICJFcnJvciBhbGxvY2F0aW5nIGluYnVmc1xuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZnJlZV9kZXZpY2U7CkBAIC0xNDQyLDEyICsxNDQzLDE0IEBACiAJSU5JVF9MSVNUX0hFQUQoJnBvcnRkZXYtPnBvcnRzKTsKIAogCWlmIChtdWx0aXBvcnQpIHsKKwkJdW5zaWduZWQgaW50IG5yX2FkZGVkX2J1ZnM7CisKIAkJc3Bpbl9sb2NrX2luaXQoJnBvcnRkZXYtPmN2cV9sb2NrKTsKIAkJSU5JVF9XT1JLKCZwb3J0ZGV2LT5jb250cm9sX3dvcmssICZjb250cm9sX3dvcmtfaGFuZGxlcik7CiAJCUlOSVRfV09SSygmcG9ydGRldi0+Y29uZmlnX3dvcmssICZjb25maWdfd29ya19oYW5kbGVyKTsKIAotCQllcnIgPSBmaWxsX3F1ZXVlKHBvcnRkZXYtPmNfaXZxLCAmcG9ydGRldi0+Y3ZxX2xvY2spOwotCQlpZiAoIWVycikgeworCQlucl9hZGRlZF9idWZzID0gZmlsbF9xdWV1ZShwb3J0ZGV2LT5jX2l2cSwgJnBvcnRkZXYtPmN2cV9sb2NrKTsKKwkJaWYgKCFucl9hZGRlZF9idWZzKSB7CiAJCQlkZXZfZXJyKCZ2ZGV2LT5kZXYsCiAJCQkJIkVycm9yIGFsbG9jYXRpbmcgYnVmZmVycyBmb3IgY29udHJvbCBxdWV1ZVxuIik7CiAJCQllcnIgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Z0LmMgYi9kcml2ZXJzL2NoYXIvdnQuYwppbmRleCA1MGZhYTFmLi5iZDFkMTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnQuYworKysgYi9kcml2ZXJzL2NoYXIvdnQuYwpAQCAtODIxLDcgKzgyMSw3IEBACiAgKgogICoJUmVzaXplIGEgdmlydHVhbCBjb25zb2xlLCBjbGlwcGluZyBhY2NvcmRpbmcgdG8gdGhlIGFjdHVhbCBjb25zdHJhaW50cy4KICAqCUlmIHRoZSBjYWxsZXIgcGFzc2VzIGEgdHR5IHN0cnVjdHVyZSB0aGVuIHVwZGF0ZSB0aGUgdGVybWlvcyB3aW5zaXplCi0gKglpbmZvcm1hdGlvbiBhbmQgcGVyZm9ybSBhbnkgbmVjY2Vzc2FyeSBzaWduYWwgaGFuZGxpbmcuCisgKglpbmZvcm1hdGlvbiBhbmQgcGVyZm9ybSBhbnkgbmVjZXNzYXJ5IHNpZ25hbCBoYW5kbGluZy4KICAqCiAgKglDYWxsZXIgbXVzdCBob2xkIHRoZSBjb25zb2xlIHNlbWFwaG9yZS4gVGFrZXMgdGhlIHRlcm1pb3MgbXV0ZXggYW5kCiAgKgljdHJsX2xvY2sgb2YgdGhlIHR0eSBJRkYgYSB0dHkgaXMgcGFzc2VkLgpAQCAtMjExOSw4ICsyMTE5LDYgQEAKIAl1aW50OF90IGludmVyc2U7CiAJdWludDhfdCB3aWR0aDsKIAl1MTYgaGltYXNrLCBjaGFybWFzazsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpvcmlnX2J1ZiA9IE5VTEw7Ci0JaW50IG9yaWdfY291bnQ7CiAKIAlpZiAoaW5faW50ZXJydXB0KCkpCiAJCXJldHVybiBjb3VudDsKQEAgLTIxNDIsOCArMjE0MCw2IEBACiAJICAgIHJlbGVhc2VfY29uc29sZV9zZW0oKTsKIAkgICAgcmV0dXJuIDA7CiAJfQotCW9yaWdfYnVmID0gYnVmOwotCW9yaWdfY291bnQgPSBjb3VudDsKIAogCWhpbWFzayA9IHZjLT52Y19oaV9mb250X21hc2s7CiAJY2hhcm1hc2sgPSBoaW1hc2sgPyAweDFmZiA6IDB4ZmY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYyBiL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCmluZGV4IDZhYTEwMjguLjg3Nzc4ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvY2hhci92dF9pb2N0bC5jCkBAIC04ODgsNyArODg4LDcgQEAKIAkJCXJldCA9IC1FRkFVTFQ7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlpZiAodG1wLm1vZGUgIT0gVlRfQVVUTyAmJiB0bXAubW9kZSAhPSBWVF9QUk9DRVNTKSB7CisJCWlmICh0bXAubW9kZSAhPSBWVF9BVVRPICYmIHRtcC5tb2RlICE9IFZUX1BST0NFU1MgJiYgdG1wLm1vZGUgIT0gVlRfUFJPQ0VTU19BVVRPKSB7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTE2MjIsNyArMTYyMiw3IEBACiAJICogdGVsbGluZyBpdCB0aGF0IGl0IGhhcyBhY3F1aXJlZC4gQWxzbyBjaGVjayBpZiBpdCBoYXMgZGllZCBhbmQKIAkgKiBjbGVhbiB1cCAoc2ltaWxhciB0byBsb2dpYyBlbXBsb3llZCBpbiBjaGFuZ2VfY29uc29sZSgpKQogCSAqLwotCWlmICh2Yy0+dnRfbW9kZS5tb2RlID09IFZUX1BST0NFU1MpIHsKKwlpZiAodmMtPnZ0X21vZGUubW9kZSA9PSBWVF9QUk9DRVNTIHx8IHZjLT52dF9tb2RlLm1vZGUgPT0gVlRfUFJPQ0VTU19BVVRPKSB7CiAJCS8qCiAJCSAqIFNlbmQgdGhlIHNpZ25hbCBhcyBwcml2aWxlZ2VkIC0ga2lsbF9waWQoKSB3aWxsCiAJCSAqIHRlbGwgdXMgaWYgdGhlIHByb2Nlc3MgaGFzIGdvbmUgb3Igc29tZXRoaW5nIGVsc2UKQEAgLTE2ODIsNyArMTY4Miw3IEBACiAJICogdnQgdG8gYXV0byBjb250cm9sLgogCSAqLwogCXZjID0gdmNfY29uc1tmZ19jb25zb2xlXS5kOwotCWlmICh2Yy0+dnRfbW9kZS5tb2RlID09IFZUX1BST0NFU1MpIHsKKwlpZiAodmMtPnZ0X21vZGUubW9kZSA9PSBWVF9QUk9DRVNTIHx8IHZjLT52dF9tb2RlLm1vZGUgPT0gVlRfUFJPQ0VTU19BVVRPKSB7CiAJCS8qCiAJCSAqIFNlbmQgdGhlIHNpZ25hbCBhcyBwcml2aWxlZ2VkIC0ga2lsbF9waWQoKSB3aWxsCiAJCSAqIHRlbGwgdXMgaWYgdGhlIHByb2Nlc3MgaGFzIGdvbmUgb3Igc29tZXRoaW5nIGVsc2UKQEAgLTE2OTMsMjcgKzE2OTMsMjggQEAKIAkJICovCiAJCXZjLT52dF9uZXd2dCA9IG5ld192Yy0+dmNfbnVtOwogCQlpZiAoa2lsbF9waWQodmMtPnZ0X3BpZCwgdmMtPnZ0X21vZGUucmVsc2lnLCAxKSA9PSAwKSB7CisJCQlpZih2Yy0+dnRfbW9kZS5tb2RlID09IFZUX1BST0NFU1MpCisJCQkJLyoKKwkJCQkgKiBJdCB3b3JrZWQuIE1hcmsgdGhlIHZ0IHRvIHN3aXRjaCB0byBhbmQKKwkJCQkgKiByZXR1cm4uIFRoZSBwcm9jZXNzIG5lZWRzIHRvIHNlbmQgdXMgYQorCQkJCSAqIFZUX1JFTERJU1AgaW9jdGwgdG8gY29tcGxldGUgdGhlIHN3aXRjaC4KKwkJCQkgKi8KKwkJCQlyZXR1cm47CisJCX0gZWxzZSB7CiAJCQkvKgotCQkJICogSXQgd29ya2VkLiBNYXJrIHRoZSB2dCB0byBzd2l0Y2ggdG8gYW5kCi0JCQkgKiByZXR1cm4uIFRoZSBwcm9jZXNzIG5lZWRzIHRvIHNlbmQgdXMgYQotCQkJICogVlRfUkVMRElTUCBpb2N0bCB0byBjb21wbGV0ZSB0aGUgc3dpdGNoLgorCQkJICogVGhlIGNvbnRyb2xsaW5nIHByb2Nlc3MgaGFzIGRpZWQsIHNvIHdlIHJldmVydCBiYWNrIHRvCisJCQkgKiBub3JtYWwgb3BlcmF0aW9uLiBJbiB0aGlzIGNhc2UsIHdlJ2xsIGFsc28gY2hhbmdlIGJhY2sKKwkJCSAqIHRvIEtEX1RFWFQgbW9kZS4gSSdtIG5vdCBzdXJlIGlmIHRoaXMgaXMgc3RyaWN0bHkgY29ycmVjdAorCQkJICogYnV0IGl0IHNhdmVzIHRoZSBhZ29ueSB3aGVuIHRoZSBYIHNlcnZlciBkaWVzIGFuZCB0aGUgc2NyZWVuCisJCQkgKiByZW1haW5zIGJsYW5rZWQgZHVlIHRvIEtEX0dSQVBISUNTISBJdCB3b3VsZCBiZSBuaWNlIHRvIGRvCisJCQkgKiB0aGlzIG91dHNpZGUgb2YgVlRfUFJPQ0VTUyBidXQgdGhlcmUgaXMgbm8gc2luZ2xlIHByb2Nlc3MKKwkJCSAqIHRvIGFjY291bnQgZm9yIGFuZCB0cmFja2luZyB0dHkgY291bnQgbWF5IGJlIHVuZGVzaXJhYmxlLgogCQkJICovCi0JCQlyZXR1cm47CisJCQlyZXNldF92Yyh2Yyk7CiAJCX0KIAogCQkvKgotCQkgKiBUaGUgY29udHJvbGxpbmcgcHJvY2VzcyBoYXMgZGllZCwgc28gd2UgcmV2ZXJ0IGJhY2sgdG8KLQkJICogbm9ybWFsIG9wZXJhdGlvbi4gSW4gdGhpcyBjYXNlLCB3ZSdsbCBhbHNvIGNoYW5nZSBiYWNrCi0JCSAqIHRvIEtEX1RFWFQgbW9kZS4gSSdtIG5vdCBzdXJlIGlmIHRoaXMgaXMgc3RyaWN0bHkgY29ycmVjdAotCQkgKiBidXQgaXQgc2F2ZXMgdGhlIGFnb255IHdoZW4gdGhlIFggc2VydmVyIGRpZXMgYW5kIHRoZSBzY3JlZW4KLQkJICogcmVtYWlucyBibGFua2VkIGR1ZSB0byBLRF9HUkFQSElDUyEgSXQgd291bGQgYmUgbmljZSB0byBkbwotCQkgKiB0aGlzIG91dHNpZGUgb2YgVlRfUFJPQ0VTUyBidXQgdGhlcmUgaXMgbm8gc2luZ2xlIHByb2Nlc3MKLQkJICogdG8gYWNjb3VudCBmb3IgYW5kIHRyYWNraW5nIHR0eSBjb3VudCBtYXkgYmUgdW5kZXNpcmFibGUuCi0JCSAqLwotCQlyZXNldF92Yyh2Yyk7Ci0KLQkJLyoKLQkJICogRmFsbCB0aHJvdWdoIHRvIG5vcm1hbCAoVlRfQVVUTykgaGFuZGxpbmcgb2YgdGhlIHN3aXRjaC4uLgorCQkgKiBGYWxsIHRocm91Z2ggdG8gbm9ybWFsIChWVF9BVVRPIGFuZCBWVF9QUk9DRVNTX0FVVE8pIGhhbmRsaW5nIG9mIHRoZSBzd2l0Y2guLi4KIAkJICovCiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWcgYi9kcml2ZXJzL2Nsb2Nrc291cmNlL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4ZjcyNmMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9jbG9ja3NvdXJjZS9LY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsOSArMCwwIEBACi1jb25maWcgQ1M1NTM1X0NMT0NLX0VWRU5UX1NSQwotCXRyaXN0YXRlICJDUzU1MzUvQ1M1NTM2IGhpZ2gtcmVzIHRpbWVyIChNRkdQVCkgZXZlbnRzIgotCWRlcGVuZHMgb24gR0VORVJJQ19USU1FICYmIEdFTkVSSUNfQ0xPQ0tFVkVOVFMgJiYgQ1M1NTM1X01GR1BUCi0JaGVscAotCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgYSBjbG9jayBldmVudCBzb3VyY2UgYmFzZWQgb24gdGhlIE1GR1BUCi0JICB0aW1lcihzKSBpbiB0aGUgQ1M1NTM1IGFuZCBDUzU1MzYgY29tcGFuaW9uIGNoaXBzLgotCSAgTUZHUFRzIGhhdmUgYSBiZXR0ZXIgcmVzb2x1dGlvbiBhbmQgbWF4IGludGVydmFsIHRoYW4gdGhlCi0JICBnZW5lcmljIFBJVCwgYW5kIGFyZSBzdWl0YWJsZSBmb3IgdXNlIGFzIGhpZ2gtcmVzIHRpbWVycy4KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKaW5kZXggNjdiYzJlYy4uMmQ1ZDU3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYworKysgYi9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCkBAIC03NjYsNyArNzY2LDcgQEAKIAljb21wbGV0ZSgmcG9saWN5LT5rb2JqX3VucmVnaXN0ZXIpOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBzeXNmc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBzeXNmc19vcHMgPSB7CiAJLnNob3cJPSBzaG93LAogCS5zdG9yZQk9IHN0b3JlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9nb3Zlcm5vcnMvbWVudS5jIGIvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9tZW51LmMKaW5kZXggNzM2NTVhZS4uMWFlYTcxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9tZW51LmMKKysrIGIvZHJpdmVycy9jcHVpZGxlL2dvdmVybm9ycy9tZW51LmMKQEAgLTEwMCw4ICsxMDAsOCBAQAogCWludCAgICAgICAgICAgICBuZWVkc191cGRhdGU7CiAKIAl1bnNpZ25lZCBpbnQJZXhwZWN0ZWRfdXM7Ci0JdTY0CQlwcmVkaWN0ZWRfdXM7CiAJdW5zaWduZWQgaW50CW1lYXN1cmVkX3VzOworCXU2NAkJcHJlZGljdGVkX3VzOwogCXVuc2lnbmVkIGludAlleGl0X3VzOwogCXVuc2lnbmVkIGludAlidWNrZXQ7CiAJdTY0CQljb3JyZWN0aW9uX2ZhY3RvcltCVUNLRVRTXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY3B1aWRsZS9zeXNmcy5jIGIvZHJpdmVycy9jcHVpZGxlL3N5c2ZzLmMKaW5kZXggOTdiMDAzOC4uODcxOWIzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jcHVpZGxlL3N5c2ZzLmMKKysrIGIvZHJpdmVycy9jcHVpZGxlL3N5c2ZzLmMKQEAgLTIyLDYgKzIyLDcgQEAKIF9fc2V0dXAoImNwdWlkbGVfc3lzZnNfc3dpdGNoIiwgY3B1aWRsZV9zeXNmc19zZXR1cCk7CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfYXZhaWxhYmxlX2dvdmVybm9ycyhzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbGFzcywKKwkJCQkJc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCWNoYXIgKmJ1ZikKIHsKIAlzc2l6ZV90IGkgPSAwOwpAQCAtNDEsNiArNDIsNyBAQAogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X2N1cnJlbnRfZHJpdmVyKHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLAorCQkJCSAgIHN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICphdHRyLAogCQkJCSAgIGNoYXIgKmJ1ZikKIHsKIAlzc2l6ZV90IHJldDsKQEAgLTU2LDYgKzU4LDcgQEAKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19jdXJyZW50X2dvdmVybm9yKHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLAorCQkJCSAgICAgc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICAgICBjaGFyICpidWYpCiB7CiAJc3NpemVfdCByZXQ7CkBAIC03MSw2ICs3NCw3IEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2N1cnJlbnRfZ292ZXJub3Ioc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsCisJCQkJICAgICAgc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJY2hhciBnb3ZfbmFtZVtDUFVJRExFX05BTUVfTEVOXTsKQEAgLTE5MSw3ICsxOTUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIGNwdWlkbGVfc3lzZnNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgY3B1aWRsZV9zeXNmc19vcHMgPSB7CiAJLnNob3cgPSBjcHVpZGxlX3Nob3csCiAJLnN0b3JlID0gY3B1aWRsZV9zdG9yZSwKIH07CkBAIC0yNzcsNyArMjgxLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBjcHVpZGxlX3N0YXRlX3N5c2ZzX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIGNwdWlkbGVfc3RhdGVfc3lzZnNfb3BzID0gewogCS5zaG93ID0gY3B1aWRsZV9zdGF0ZV9zaG93LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jcnlwdG8vaGlmbl83OTV4LmMgYi9kcml2ZXJzL2NyeXB0by9oaWZuXzc5NXguYwppbmRleCAwOWFkOTE1Li43M2U4YjE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NyeXB0by9oaWZuXzc5NXguYworKysgYi9kcml2ZXJzL2NyeXB0by9oaWZuXzc5NXguYwpAQCAtMzIxLDcgKzMyMSw3IEBACiAjZGVmaW5lCUhJRk5fUFVCT1BMRU5fTU9EX00JMHgwMDAwMDA3ZgkvKiBtb2R1bHVzIGxlbmd0aCBtYXNrICovCiAjZGVmaW5lCUhJRk5fUFVCT1BMRU5fTU9EX1MJMAkJLyogbW9kdWx1cyBsZW5ndGggc2hpZnQgKi8KICNkZWZpbmUJSElGTl9QVUJPUExFTl9FWFBfTQkweDAwMDNmZjgwCS8qIGV4cG9uZW50IGxlbmd0aCBtYXNrICovCi0jZGVmaW5lCUhJRk5fUFVCT1BMRU5fRVhQX1MJNwkJLyogZXhwb25lbnQgbGVuZ2h0IHNoaWZ0ICovCisjZGVmaW5lCUhJRk5fUFVCT1BMRU5fRVhQX1MJNwkJLyogZXhwb25lbnQgbGVuZ3RoIHNoaWZ0ICovCiAjZGVmaW5lCUhJRk5fUFVCT1BMRU5fUkVEX00JMHgwMDNjMDAwMAkvKiByZWR1Y2VuZCBsZW5ndGggbWFzayAqLwogI2RlZmluZQlISUZOX1BVQk9QTEVOX1JFRF9TCTE4CQkvKiByZWR1Y2VuZCBsZW5ndGggc2hpZnQgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvS2NvbmZpZyBiL2RyaXZlcnMvZG1hL0tjb25maWcKaW5kZXggZTAyZDc0Yi4uYzI3ZjgwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvS2NvbmZpZworKysgYi9kcml2ZXJzL2RtYS9LY29uZmlnCkBAIC0xMyw2ICsxMywyMiBAQAogCSAgRE1BIERldmljZSBkcml2ZXJzIHN1cHBvcnRlZCBieSB0aGUgY29uZmlndXJlZCBhcmNoLCBpdCBtYXkKIAkgIGJlIGVtcHR5IGluIHNvbWUgY2FzZXMuCiAKK2NvbmZpZyBETUFERVZJQ0VTX0RFQlVHCisgICAgICAgIGJvb2wgIkRNQSBFbmdpbmUgZGVidWdnaW5nIgorICAgICAgICBkZXBlbmRzIG9uIERNQURFVklDRVMgIT0gbgorICAgICAgICBoZWxwCisgICAgICAgICAgVGhpcyBpcyBhbiBvcHRpb24gZm9yIHVzZSBieSBkZXZlbG9wZXJzOyBtb3N0IHBlb3BsZSBzaG91bGQKKyAgICAgICAgICBzYXkgTiBoZXJlLiAgVGhpcyBlbmFibGVzIERNQSBlbmdpbmUgY29yZSBhbmQgZHJpdmVyIGRlYnVnZ2luZy4KKworY29uZmlnIERNQURFVklDRVNfVkRFQlVHCisgICAgICAgIGJvb2wgIkRNQSBFbmdpbmUgdmVyYm9zZSBkZWJ1Z2dpbmciCisgICAgICAgIGRlcGVuZHMgb24gRE1BREVWSUNFU19ERUJVRyAhPSBuCisgICAgICAgIGhlbHAKKyAgICAgICAgICBUaGlzIGlzIGFuIG9wdGlvbiBmb3IgdXNlIGJ5IGRldmVsb3BlcnM7IG1vc3QgcGVvcGxlIHNob3VsZAorICAgICAgICAgIHNheSBOIGhlcmUuICBUaGlzIGVuYWJsZXMgZGVlcGVyIChtb3JlIHZlcmJvc2UpIGRlYnVnZ2luZyBvZgorICAgICAgICAgIHRoZSBETUEgZW5naW5lIGNvcmUgYW5kIGRyaXZlcnMuCisKKwogaWYgRE1BREVWSUNFUwogCiBjb21tZW50ICJETUEgRGV2aWNlcyIKQEAgLTY5LDYgKzg1LDEzIEBACiAJICBUaGUgRWxvIGlzIHRoZSBETUEgY29udHJvbGxlciBvbiBzb21lIDgyeHggYW5kIDgzeHggcGFydHMsIGFuZCB0aGUKIAkgIEVsbyBQbHVzIGlzIHRoZSBETUEgY29udHJvbGxlciBvbiA4NXh4IGFuZCA4Nnh4IHBhcnRzLgogCitjb25maWcgTVBDNTEyWF9ETUEKKwl0cmlzdGF0ZSAiRnJlZXNjYWxlIE1QQzUxMnggYnVpbHQtaW4gRE1BIGVuZ2luZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gUFBDX01QQzUxMngKKwlzZWxlY3QgRE1BX0VOR0lORQorCS0tLWhlbHAtLS0KKwkgIEVuYWJsZSBzdXBwb3J0IGZvciB0aGUgRnJlZXNjYWxlIE1QQzUxMnggYnVpbHQtaW4gRE1BIGVuZ2luZS4KKwogY29uZmlnIE1WX1hPUgogCWJvb2wgIk1hcnZlbGwgWE9SIGVuZ2luZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gUExBVF9PUklPTgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvTWFrZWZpbGUgYi9kcml2ZXJzL2RtYS9NYWtlZmlsZQppbmRleCA4MDcwNTNkLi4yMmJiYTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2RtYS9NYWtlZmlsZQpAQCAtMSw5ICsxLDE3IEBACitpZmVxICgkKENPTkZJR19ETUFERVZJQ0VTX0RFQlVHKSx5KQorCUVYVFJBX0NGTEFHUwkrPSAtRERFQlVHCitlbmRpZgoraWZlcSAoJChDT05GSUdfRE1BREVWSUNFU19WREVCVUcpLHkpCisJRVhUUkFfQ0ZMQUdTCSs9IC1EVkVSQk9TRV9ERUJVRworZW5kaWYKKwogb2JqLSQoQ09ORklHX0RNQV9FTkdJTkUpICs9IGRtYWVuZ2luZS5vCiBvYmotJChDT05GSUdfTkVUX0RNQSkgKz0gaW92bG9jay5vCiBvYmotJChDT05GSUdfRE1BVEVTVCkgKz0gZG1hdGVzdC5vCiBvYmotJChDT05GSUdfSU5URUxfSU9BVERNQSkgKz0gaW9hdC8KIG9iai0kKENPTkZJR19JTlRFTF9JT1BfQURNQSkgKz0gaW9wLWFkbWEubwogb2JqLSQoQ09ORklHX0ZTTF9ETUEpICs9IGZzbGRtYS5vCitvYmotJChDT05GSUdfTVBDNTEyWF9ETUEpICs9IG1wYzUxMnhfZG1hLm8KIG9iai0kKENPTkZJR19NVl9YT1IpICs9IG12X3hvci5vCiBvYmotJChDT05GSUdfRFdfRE1BQykgKz0gZHdfZG1hYy5vCiBvYmotJChDT05GSUdfQVRfSERNQUMpICs9IGF0X2hkbWFjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2NvaDkwMTMxOC5jIGIvZHJpdmVycy9kbWEvY29oOTAxMzE4LmMKaW5kZXggNjRhOTM3Mi4uMTY1NmZkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvY29oOTAxMzE4LmMKKysrIGIvZHJpdmVycy9kbWEvY29oOTAxMzE4LmMKQEAgLTM5LDcgKzM5LDYgQEAKIAl1bnNpZ25lZCBpbnQgc2dfbGVuOwogCXN0cnVjdCBjb2g5MDEzMThfbGxpICpkYXRhOwogCWVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcjsKLQlpbnQgcGVuZGluZ19pcnFzOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiB9OwogCkBAIC03Miw3ICs3MSw2IEBACiAKIAl1bnNpZ25lZCBsb25nIG5icl9hY3RpdmVfZG9uZTsKIAl1bnNpZ25lZCBsb25nIGJ1c3k7Ci0JaW50IHBlbmRpbmdfaXJxczsKIAogCXN0cnVjdCBjb2g5MDEzMThfYmFzZSAqYmFzZTsKIH07CkBAIC04MCwxOCArNzgsMTYgQEAKIHN0YXRpYyB2b2lkIGNvaDkwMTMxOF9saXN0X3ByaW50KHN0cnVjdCBjb2g5MDEzMThfY2hhbiAqY29oYywKIAkJCQkgc3RydWN0IGNvaDkwMTMxOF9sbGkgKmxsaSkKIHsKLQlzdHJ1Y3QgY29oOTAxMzE4X2xsaSAqbDsKLQlkbWFfYWRkcl90IGFkZHIgPSAgdmlydF90b19waHlzKGxsaSk7CisJc3RydWN0IGNvaDkwMTMxOF9sbGkgKmwgPSBsbGk7CiAJaW50IGkgPSAwOwogCi0Jd2hpbGUgKGFkZHIpIHsKLQkJbCA9IHBoeXNfdG9fdmlydChhZGRyKTsKKwl3aGlsZSAobCkgewogCQlkZXZfdmRiZyhDT0hDXzJfREVWKGNvaGMpLCAiaSAlZCwgbGxpICVwLCBjdHJsIDB4JXgsIHNyYyAweCV4IgotCQkJICIsIGRzdCAweCV4LCBsaW5rIDB4JXggbGlua192aXJ0IDB4JXBcbiIsCisJCQkgIiwgZHN0IDB4JXgsIGxpbmsgMHgleCB2aXJ0X2xpbmtfYWRkciAweCVwXG4iLAogCQkJIGksIGwsIGwtPmNvbnRyb2wsIGwtPnNyY19hZGRyLCBsLT5kc3RfYWRkciwKLQkJCSBsLT5saW5rX2FkZHIsIHBoeXNfdG9fdmlydChsLT5saW5rX2FkZHIpKTsKKwkJCSBsLT5saW5rX2FkZHIsIGwtPnZpcnRfbGlua19hZGRyKTsKIAkJaSsrOwotCQlhZGRyID0gbC0+bGlua19hZGRyOworCQlsID0gbC0+dmlydF9saW5rX2FkZHI7CiAJfQogfQogCkBAIC0xMjUsNyArMTIxLDcgQEAKIAkJZ290byBlcnJfa21hbGxvYzsKIAl0bXAgPSBkZXZfYnVmOwogCi0JdG1wICs9IHNwcmludGYodG1wLCAiRE1BIC0tIGVuYWJsZSBkbWEgY2hhbm5lbHNcbiIpOworCXRtcCArPSBzcHJpbnRmKHRtcCwgIkRNQSAtLSBlbmFibGVkIGRtYSBjaGFubmVsc1xuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGVidWdmc19kbWFfYmFzZS0+cGxhdGZvcm0tPm1heF9jaGFubmVsczsgaSsrKQogCQlpZiAoc3RhcnRlZF9jaGFubmVscyAmICgxIDw8IGkpKQpAQCAtMzM3LDE2ICszMzMsMjIgQEAKIAkJICogVE9ETzogYWxsb2MgYSBwaWxlIG9mIGRlc2NzIGluc3RlYWQgb2YganVzdCBvbmUsCiAJCSAqIGF2b2lkIG1hbnkgc21hbGwgYWxsb2NhdGlvbnMuCiAJCSAqLwotCQlkZXNjID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNvaDkwMTMxOF9kZXNjKSwgR0ZQX05PV0FJVCk7CisJCWRlc2MgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY29oOTAxMzE4X2Rlc2MpLCBHRlBfTk9XQUlUKTsKIAkJaWYgKGRlc2MgPT0gTlVMTCkKIAkJCWdvdG8gb3V0OwogCQlJTklUX0xJU1RfSEVBRCgmZGVzYy0+bm9kZSk7CisJCWRtYV9hc3luY190eF9kZXNjcmlwdG9yX2luaXQoJmRlc2MtPmRlc2MsICZjb2hjLT5jaGFuKTsKIAl9IGVsc2UgewogCQkvKiBSZXVzZSBhbiBvbGQgZGVzYy4gKi8KIAkJZGVzYyA9IGxpc3RfZmlyc3RfZW50cnkoJmNvaGMtPmZyZWUsCiAJCQkJCXN0cnVjdCBjb2g5MDEzMThfZGVzYywKIAkJCQkJbm9kZSk7CiAJCWxpc3RfZGVsKCZkZXNjLT5ub2RlKTsKKwkJLyogSW5pdGlhbGl6ZSBpdCBhIGJpdCBzbyBpdCdzIG5vdCBpbnNhbmUgKi8KKwkJZGVzYy0+c2cgPSBOVUxMOworCQlkZXNjLT5zZ19sZW4gPSAwOworCQlkZXNjLT5kZXNjLmNhbGxiYWNrID0gTlVMTDsKKwkJZGVzYy0+ZGVzYy5jYWxsYmFja19wYXJhbSA9IE5VTEw7CiAJfQogCiAgb3V0OgpAQCAtMzY0LDEwICszNjYsNiBAQAogY29oOTAxMzE4X2Rlc2Nfc3VibWl0KHN0cnVjdCBjb2g5MDEzMThfY2hhbiAqY29oYywgc3RydWN0IGNvaDkwMTMxOF9kZXNjICpkZXNjKQogewogCWxpc3RfYWRkX3RhaWwoJmRlc2MtPm5vZGUsICZjb2hjLT5hY3RpdmUpOwotCi0JQlVHX09OKGNvaGMtPnBlbmRpbmdfaXJxcyAhPSAwKTsKLQotCWNvaGMtPnBlbmRpbmdfaXJxcyA9IGRlc2MtPnBlbmRpbmdfaXJxczsKIH0KIAogc3RhdGljIHN0cnVjdCBjb2g5MDEzMThfZGVzYyAqCkBAIC01OTIsNiArNTkwLDEwIEBACiAJcmV0dXJuIGNvaGRfcXVlOwogfQogCisvKgorICogVGhpcyB0YXNrbGV0IGlzIGNhbGxlZCBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciB0bworICogaGFuZGxlIGVhY2ggZGVzY3JpcHRvciAoRE1BIGpvYikgdGhhdCBpcyBzZW50IHRvIGEgY2hhbm5lbC4KKyAqLwogc3RhdGljIHZvaWQgZG1hX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBjb2g5MDEzMThfY2hhbiAqY29oYyA9IChzdHJ1Y3QgY29oOTAxMzE4X2NoYW4gKikgZGF0YTsKQEAgLTYwMCw1NSArNjAyLDU4IEBACiAJZG1hX2FzeW5jX3R4X2NhbGxiYWNrIGNhbGxiYWNrOwogCXZvaWQgKmNhbGxiYWNrX3BhcmFtOwogCisJZGV2X3ZkYmcoQ09IQ18yX0RFVihjb2hjKSwgIlslc10gY2hhbl9pZCAlZCIKKwkJICIgbmJyX2FjdGl2ZV9kb25lICVsZFxuIiwgX19mdW5jX18sCisJCSBjb2hjLT5pZCwgY29oYy0+bmJyX2FjdGl2ZV9kb25lKTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZjb2hjLT5sb2NrLCBmbGFncyk7CiAKLQkvKiBnZXQgZmlyc3QgYWN0aXZlIGVudHJ5IGZyb20gbGlzdCAqLworCS8qIGdldCBmaXJzdCBhY3RpdmUgZGVzY3JpcHRvciBlbnRyeSBmcm9tIGxpc3QgKi8KIAljb2hkX2ZpbiA9IGNvaDkwMTMxOF9maXJzdF9hY3RpdmVfZ2V0KGNvaGMpOwogCi0JQlVHX09OKGNvaGRfZmluLT5wZW5kaW5nX2lycXMgPT0gMCk7Ci0KIAlpZiAoY29oZF9maW4gPT0gTlVMTCkKIAkJZ290byBlcnI7CiAKLQljb2hkX2Zpbi0+cGVuZGluZ19pcnFzLS07Ci0JY29oYy0+Y29tcGxldGVkID0gY29oZF9maW4tPmRlc2MuY29va2llOwotCi0JaWYgKGNvaGMtPm5icl9hY3RpdmVfZG9uZSA9PSAwKQotCQlyZXR1cm47Ci0KLQlpZiAoIWNvaGRfZmluLT5wZW5kaW5nX2lycXMpIHsKLQkJLyogcmVsZWFzZSB0aGUgbGxpIGFsbG9jYXRpb24qLwotCQljb2g5MDEzMThfbGxpX2ZyZWUoJmNvaGMtPmJhc2UtPnBvb2wsICZjb2hkX2Zpbi0+ZGF0YSk7Ci0JfQotCi0JZGV2X3ZkYmcoQ09IQ18yX0RFVihjb2hjKSwgIlslc10gY2hhbl9pZCAlZCBwZW5kaW5nX2lycXMgJWQiCi0JCSAiIG5icl9hY3RpdmVfZG9uZSAlbGRcbiIsIF9fZnVuY19fLAotCQkgY29oYy0+aWQsIGNvaGMtPnBlbmRpbmdfaXJxcywgY29oYy0+bmJyX2FjdGl2ZV9kb25lKTsKLQotCS8qIGNhbGxiYWNrIHRvIGNsaWVudCAqLworCS8qIGxvY2F0ZSBjYWxsYmFjayB0byBjbGllbnQgKi8KIAljYWxsYmFjayA9IGNvaGRfZmluLT5kZXNjLmNhbGxiYWNrOwogCWNhbGxiYWNrX3BhcmFtID0gY29oZF9maW4tPmRlc2MuY2FsbGJhY2tfcGFyYW07CiAKLQlpZiAoIWNvaGRfZmluLT5wZW5kaW5nX2lycXMpIHsKLQkJY29oOTAxMzE4X2Rlc2NfcmVtb3ZlKGNvaGRfZmluKTsKKwkvKiBzaWduIHRoaXMgam9iIGFzIGNvbXBsZXRlZCBvbiB0aGUgY2hhbm5lbCAqLworCWNvaGMtPmNvbXBsZXRlZCA9IGNvaGRfZmluLT5kZXNjLmNvb2tpZTsKIAotCQkvKiByZXR1cm4gZGVzYyB0byBmcmVlLWxpc3QgKi8KLQkJY29oOTAxMzE4X2Rlc2NfZnJlZShjb2hjLCBjb2hkX2Zpbik7Ci0JfQorCS8qIHJlbGVhc2UgdGhlIGxsaSBhbGxvY2F0aW9uIGFuZCByZW1vdmUgdGhlIGRlc2NyaXB0b3IgKi8KKwljb2g5MDEzMThfbGxpX2ZyZWUoJmNvaGMtPmJhc2UtPnBvb2wsICZjb2hkX2Zpbi0+ZGF0YSk7CiAKLQlpZiAoY29oYy0+bmJyX2FjdGl2ZV9kb25lKQotCQljb2hjLT5uYnJfYWN0aXZlX2RvbmUtLTsKKwkvKiByZXR1cm4gZGVzYyB0byBmcmVlLWxpc3QgKi8KKwljb2g5MDEzMThfZGVzY19yZW1vdmUoY29oZF9maW4pOworCWNvaDkwMTMxOF9kZXNjX2ZyZWUoY29oYywgY29oZF9maW4pOwogCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29oYy0+bG9jaywgZmxhZ3MpOworCisJLyogQ2FsbCB0aGUgY2FsbGJhY2sgd2hlbiB3ZSdyZSBkb25lICovCisJaWYgKGNhbGxiYWNrKQorCQljYWxsYmFjayhjYWxsYmFja19wYXJhbSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY29oYy0+bG9jaywgZmxhZ3MpOworCisJLyoKKwkgKiBJZiBhbm90aGVyIGludGVycnVwdCBmaXJlZCB3aGlsZSB0aGUgdGFza2xldCB3YXMgc2NoZWR1bGluZywKKwkgKiB3ZSBkb24ndCBnZXQgY2FsbGVkIHR3aWNlLCBzbyB3ZSBoYXZlIHRoaXMgbnVtYmVyIG9mIGFjdGl2ZQorCSAqIGNvdW50ZXIgdGhhdCBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgSVJRcyBleHBlY3RlZCB0bworCSAqIGJlIGhhbmRsZWQgZm9yIHRoaXMgY2hhbm5lbC4gSWYgdGhlcmUgaGFwcGVuIHRvIGJlIG1vcmUgdGhhbgorCSAqIG9uZSBJUlEgdG8gYmUgYWNrOmVkLCB3ZSBzaW1wbHkgc2NoZWR1bGUgdGhpcyB0YXNrbGV0IGFnYWluLgorCSAqLworCWNvaGMtPm5icl9hY3RpdmVfZG9uZS0tOwogCWlmIChjb2hjLT5uYnJfYWN0aXZlX2RvbmUpIHsKKwkJZGV2X2RiZyhDT0hDXzJfREVWKGNvaGMpLCAic2NoZWR1bGluZyB0YXNrbGV0IGFnYWluLCBuZXcgSVJRcyAiCisJCQkiY2FtZSBpbiB3aGlsZSB3ZSB3ZXJlIHNjaGVkdWxpbmcgdGhpcyB0YXNrbGV0XG4iKTsKIAkJaWYgKGNvaGNfY2hhbl9jb25mKGNvaGMpLT5wcmlvcml0eV9oaWdoKQogCQkJdGFza2xldF9oaV9zY2hlZHVsZSgmY29oYy0+dGFza2xldCk7CiAJCWVsc2UKIAkJCXRhc2tsZXRfc2NoZWR1bGUoJmNvaGMtPnRhc2tsZXQpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2hjLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoY2FsbGJhY2spCi0JCWNhbGxiYWNrKGNhbGxiYWNrX3BhcmFtKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2hjLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm47CiAKQEAgLTY2NywxNiArNjcyLDE3IEBACiAJaWYgKCFjb2hjLT5hbGxvY2F0ZWQpCiAJCXJldHVybjsKIAotCUJVR19PTihjb2hjLT5wZW5kaW5nX2lycXMgPT0gMCk7CisJc3Bpbl9sb2NrKCZjb2hjLT5sb2NrKTsKIAotCWNvaGMtPnBlbmRpbmdfaXJxcy0tOwogCWNvaGMtPm5icl9hY3RpdmVfZG9uZSsrOwogCi0JaWYgKGNvaGMtPnBlbmRpbmdfaXJxcyA9PSAwICYmIGNvaDkwMTMxOF9xdWV1ZV9zdGFydChjb2hjKSA9PSBOVUxMKQorCWlmIChjb2g5MDEzMThfcXVldWVfc3RhcnQoY29oYykgPT0gTlVMTCkKIAkJY29oYy0+YnVzeSA9IDA7CiAKIAlCVUdfT04obGlzdF9lbXB0eSgmY29oYy0+YWN0aXZlKSk7CiAKKwlzcGluX3VubG9jaygmY29oYy0+bG9jayk7CisKIAlpZiAoY29oY19jaGFuX2NvbmYoY29oYyktPnByaW9yaXR5X2hpZ2gpCiAJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJmNvaGMtPnRhc2tsZXQpOwogCWVsc2UKQEAgLTg3MCw2ICs4NzYsNyBAQAogCXN0cnVjdCBjb2g5MDEzMThfY2hhbiAqY29oYyA9IHRvX2NvaDkwMTMxOF9jaGFuKGNoYW4pOwogCWludCBsbGlfbGVuOwogCXUzMiBjdHJsX2xhc3QgPSBjb2hjX2NoYW5fcGFyYW0oY29oYyktPmN0cmxfbGxpX2xhc3Q7CisJaW50IHJldDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjb2hjLT5sb2NrLCBmbGcpOwogCkBAIC04OTAsMjIgKzg5NywxOSBAQAogCWlmIChkYXRhID09IE5VTEwpCiAJCWdvdG8gZXJyOwogCi0JY29oZCA9IGNvaDkwMTMxOF9kZXNjX2dldChjb2hjKTsKLQljb2hkLT5zZyA9IE5VTEw7Ci0JY29oZC0+c2dfbGVuID0gMDsKLQljb2hkLT5kYXRhID0gZGF0YTsKLQotCWNvaGQtPnBlbmRpbmdfaXJxcyA9Ci0JCWNvaDkwMTMxOF9sbGlfZmlsbF9tZW1jcHkoCi0JCQkJJmNvaGMtPmJhc2UtPnBvb2wsIGRhdGEsIHNyYywgc2l6ZSwgZGVzdCwKLQkJCQljb2hjX2NoYW5fcGFyYW0oY29oYyktPmN0cmxfbGxpX2NoYWluZWQsCi0JCQkJY3RybF9sYXN0KTsKLQljb2hkLT5mbGFncyA9IGZsYWdzOworCXJldCA9IGNvaDkwMTMxOF9sbGlfZmlsbF9tZW1jcHkoCisJCSZjb2hjLT5iYXNlLT5wb29sLCBkYXRhLCBzcmMsIHNpemUsIGRlc3QsCisJCWNvaGNfY2hhbl9wYXJhbShjb2hjKS0+Y3RybF9sbGlfY2hhaW5lZCwKKwkJY3RybF9sYXN0KTsKKwlpZiAocmV0KQorCQlnb3RvIGVycjsKIAogCUNPSF9EQkcoY29oOTAxMzE4X2xpc3RfcHJpbnQoY29oYywgZGF0YSkpOwogCi0JZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3JfaW5pdCgmY29oZC0+ZGVzYywgY2hhbik7Ci0KKwkvKiBQaWNrIGEgZGVzY3JpcHRvciB0byBoYW5kbGUgdGhpcyB0cmFuc2ZlciAqLworCWNvaGQgPSBjb2g5MDEzMThfZGVzY19nZXQoY29oYyk7CisJY29oZC0+ZGF0YSA9IGRhdGE7CisJY29oZC0+ZmxhZ3MgPSBmbGFnczsKIAljb2hkLT5kZXNjLnR4X3N1Ym1pdCA9IGNvaDkwMTMxOF90eF9zdWJtaXQ7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2hjLT5sb2NrLCBmbGcpOwpAQCAtOTI0LDYgKzkyOCw3IEBACiAJc3RydWN0IGNvaDkwMTMxOF9jaGFuICpjb2hjID0gdG9fY29oOTAxMzE4X2NoYW4oY2hhbik7CiAJc3RydWN0IGNvaDkwMTMxOF9sbGkgKmRhdGE7CiAJc3RydWN0IGNvaDkwMTMxOF9kZXNjICpjb2hkOworCWNvbnN0IHN0cnVjdCBjb2g5MDEzMThfcGFyYW1zICpwYXJhbXM7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAlpbnQgbGVuID0gMDsKIAlpbnQgc2l6ZTsKQEAgLTkzMSw3ICs5MzYsOSBAQAogCXUzMiBjdHJsX2NoYWluZWQgPSBjb2hjX2NoYW5fcGFyYW0oY29oYyktPmN0cmxfbGxpX2NoYWluZWQ7CiAJdTMyIGN0cmwgPSBjb2hjX2NoYW5fcGFyYW0oY29oYyktPmN0cmxfbGxpOwogCXUzMiBjdHJsX2xhc3QgPSBjb2hjX2NoYW5fcGFyYW0oY29oYyktPmN0cmxfbGxpX2xhc3Q7CisJdTMyIGNvbmZpZzsKIAl1bnNpZ25lZCBsb25nIGZsZzsKKwlpbnQgcmV0OwogCiAJaWYgKCFzZ2wpCiAJCWdvdG8gb3V0OwpAQCAtOTQ3LDE1ICs5NTQsMTQgQEAKIAkJLyogVHJpZ2dlciBpbnRlcnJ1cHQgYWZ0ZXIgbGFzdCBsbGkgKi8KIAkJY3RybF9sYXN0IHw9IENPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEU7CiAKLQljb2hkID0gY29oOTAxMzE4X2Rlc2NfZ2V0KGNvaGMpOwotCWNvaGQtPnNnID0gTlVMTDsKLQljb2hkLT5zZ19sZW4gPSAwOwotCWNvaGQtPmRpciA9IGRpcmVjdGlvbjsKKwlwYXJhbXMgPSBjb2hjX2NoYW5fcGFyYW0oY29oYyk7CisJY29uZmlnID0gcGFyYW1zLT5jb25maWc7CiAKIAlpZiAoZGlyZWN0aW9uID09IERNQV9UT19ERVZJQ0UpIHsKIAkJdTMyIHR4X2ZsYWdzID0gQ09IOTAxMzE4X0NYX0NUUkxfUFJERF9TT1VSQ0UgfAogCQkJQ09IOTAxMzE4X0NYX0NUUkxfU1JDX0FERFJfSU5DX0VOQUJMRTsKIAorCQljb25maWcgfD0gQ09IOTAxMzE4X0NYX0NGR19STV9NRU1PUllfVE9fUFJJTUFSWTsKIAkJY3RybF9jaGFpbmVkIHw9IHR4X2ZsYWdzOwogCQljdHJsX2xhc3QgfD0gdHhfZmxhZ3M7CiAJCWN0cmwgfD0gdHhfZmxhZ3M7CkBAIC05NjMsMTYgKzk2OSwxNCBAQAogCQl1MzIgcnhfZmxhZ3MgPSBDT0g5MDEzMThfQ1hfQ1RSTF9QUkREX0RFU1QgfAogCQkJQ09IOTAxMzE4X0NYX0NUUkxfRFNUX0FERFJfSU5DX0VOQUJMRTsKIAorCQljb25maWcgfD0gQ09IOTAxMzE4X0NYX0NGR19STV9QUklNQVJZX1RPX01FTU9SWTsKIAkJY3RybF9jaGFpbmVkIHw9IHJ4X2ZsYWdzOwogCQljdHJsX2xhc3QgfD0gcnhfZmxhZ3M7CiAJCWN0cmwgfD0gcnhfZmxhZ3M7CiAJfSBlbHNlCiAJCWdvdG8gZXJyX2RpcmVjdGlvbjsKIAotCWRtYV9hc3luY190eF9kZXNjcmlwdG9yX2luaXQoJmNvaGQtPmRlc2MsIGNoYW4pOwotCi0JY29oZC0+ZGVzYy50eF9zdWJtaXQgPSBjb2g5MDEzMThfdHhfc3VibWl0OwotCisJY29oOTAxMzE4X3NldF9jb25mKGNvaGMsIGNvbmZpZyk7CiAKIAkvKiBUaGUgZG1hIG9ubHkgc3VwcG9ydHMgdHJhbnNtaXR0aW5nIHBhY2thZ2VzIHVwIHRvCiAJICogTUFYX0RNQV9QQUNLRVRfU0laRS4gQ2FsY3VsYXRlIHRvIHRvdGFsIG51bWJlciBvZgpAQCAtOTk0LDMyICs5OTgsMzcgQEAKIAkJbGVuICs9IGZhY3RvcjsKIAl9CiAKKwlwcl9kZWJ1ZygiQWxsb2NhdGUgJWQgbGxpOnMgZm9yIHRoaXMgdHJhbnNmZXJcbiIsIGxlbik7CiAJZGF0YSA9IGNvaDkwMTMxOF9sbGlfYWxsb2MoJmNvaGMtPmJhc2UtPnBvb2wsIGxlbik7CiAKIAlpZiAoZGF0YSA9PSBOVUxMKQogCQlnb3RvIGVycl9kbWFfYWxsb2M7CiAKIAkvKiBpbml0aWF0ZSBhbGxvY2F0ZWQgZGF0YSBsaXN0ICovCi0JY29oZC0+cGVuZGluZ19pcnFzID0KLQkJY29oOTAxMzE4X2xsaV9maWxsX3NnKCZjb2hjLT5iYXNlLT5wb29sLCBkYXRhLCBzZ2wsIHNnX2xlbiwKLQkJCQkgICAgICBjb2hjX2Rldl9hZGRyKGNvaGMpLAotCQkJCSAgICAgIGN0cmxfY2hhaW5lZCwKLQkJCQkgICAgICBjdHJsLAotCQkJCSAgICAgIGN0cmxfbGFzdCwKLQkJCQkgICAgICBkaXJlY3Rpb24sIENPSDkwMTMxOF9DWF9DVFJMX1RDX0lSUV9FTkFCTEUpOwotCWNvaGQtPmRhdGEgPSBkYXRhOwotCi0JY29oZC0+ZmxhZ3MgPSBmbGFnczsKKwlyZXQgPSBjb2g5MDEzMThfbGxpX2ZpbGxfc2coJmNvaGMtPmJhc2UtPnBvb2wsIGRhdGEsIHNnbCwgc2dfbGVuLAorCQkJCSAgICBjb2hjX2Rldl9hZGRyKGNvaGMpLAorCQkJCSAgICBjdHJsX2NoYWluZWQsCisJCQkJICAgIGN0cmwsCisJCQkJICAgIGN0cmxfbGFzdCwKKwkJCQkgICAgZGlyZWN0aW9uLCBDT0g5MDEzMThfQ1hfQ1RSTF9UQ19JUlFfRU5BQkxFKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9sbGlfZmlsbDsKIAogCUNPSF9EQkcoY29oOTAxMzE4X2xpc3RfcHJpbnQoY29oYywgZGF0YSkpOwogCisJLyogUGljayBhIGRlc2NyaXB0b3IgdG8gaGFuZGxlIHRoaXMgdHJhbnNmZXIgKi8KKwljb2hkID0gY29oOTAxMzE4X2Rlc2NfZ2V0KGNvaGMpOworCWNvaGQtPmRpciA9IGRpcmVjdGlvbjsKKwljb2hkLT5mbGFncyA9IGZsYWdzOworCWNvaGQtPmRlc2MudHhfc3VibWl0ID0gY29oOTAxMzE4X3R4X3N1Ym1pdDsKKwljb2hkLT5kYXRhID0gZGF0YTsKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvaGMtPmxvY2ssIGZsZyk7CiAKIAlyZXR1cm4gJmNvaGQtPmRlc2M7CisgZXJyX2xsaV9maWxsOgogIGVycl9kbWFfYWxsb2M6CiAgZXJyX2RpcmVjdGlvbjoKLQljb2g5MDEzMThfZGVzY19yZW1vdmUoY29oZCk7Ci0JY29oOTAxMzE4X2Rlc2NfZnJlZShjb2hjLCBjb2hkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2hjLT5sb2NrLCBmbGcpOwogIG91dDoKIAlyZXR1cm4gTlVMTDsKQEAgLTEwOTIsOSArMTEwMSw4IEBACiAJCS8qIHJlbGVhc2UgdGhlIGxsaSBhbGxvY2F0aW9uKi8KIAkJY29oOTAxMzE4X2xsaV9mcmVlKCZjb2hjLT5iYXNlLT5wb29sLCAmY29oZC0+ZGF0YSk7CiAKLQkJY29oOTAxMzE4X2Rlc2NfcmVtb3ZlKGNvaGQpOwotCiAJCS8qIHJldHVybiBkZXNjIHRvIGZyZWUtbGlzdCAqLworCQljb2g5MDEzMThfZGVzY19yZW1vdmUoY29oZCk7CiAJCWNvaDkwMTMxOF9kZXNjX2ZyZWUoY29oYywgY29oZCk7CiAJfQogCkBAIC0xMTAyLDE2ICsxMTEwLDE0IEBACiAJCS8qIHJlbGVhc2UgdGhlIGxsaSBhbGxvY2F0aW9uKi8KIAkJY29oOTAxMzE4X2xsaV9mcmVlKCZjb2hjLT5iYXNlLT5wb29sLCAmY29oZC0+ZGF0YSk7CiAKLQkJY29oOTAxMzE4X2Rlc2NfcmVtb3ZlKGNvaGQpOwotCiAJCS8qIHJldHVybiBkZXNjIHRvIGZyZWUtbGlzdCAqLworCQljb2g5MDEzMThfZGVzY19yZW1vdmUoY29oZCk7CiAJCWNvaDkwMTMxOF9kZXNjX2ZyZWUoY29oYywgY29oZCk7CiAJfQogCiAKIAljb2hjLT5uYnJfYWN0aXZlX2RvbmUgPSAwOwogCWNvaGMtPmJ1c3kgPSAwOwotCWNvaGMtPnBlbmRpbmdfaXJxcyA9IDA7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb2hjLT5sb2NrLCBmbGFncyk7CiB9CkBAIC0xMTM4LDcgKzExNDQsNiBAQAogCiAJCQlzcGluX2xvY2tfaW5pdCgmY29oYy0+bG9jayk7CiAKLQkJCWNvaGMtPnBlbmRpbmdfaXJxcyA9IDA7CiAJCQljb2hjLT5uYnJfYWN0aXZlX2RvbmUgPSAwOwogCQkJY29oYy0+YnVzeSA9IDA7CiAJCQlJTklUX0xJU1RfSEVBRCgmY29oYy0+ZnJlZSk7CkBAIC0xMjU0LDEyICsxMjU5LDE3IEBACiAJYmFzZS0+ZG1hX21lbWNweS5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IGNvaDkwMTMxOF9pc3N1ZV9wZW5kaW5nOwogCWJhc2UtPmRtYV9tZW1jcHkuZGV2aWNlX3Rlcm1pbmF0ZV9hbGwgPSBjb2g5MDEzMThfdGVybWluYXRlX2FsbDsKIAliYXNlLT5kbWFfbWVtY3B5LmRldiA9ICZwZGV2LT5kZXY7CisJLyoKKwkgKiBUaGlzIGNvbnRyb2xsZXIgY2FuIG9ubHkgYWNjZXNzIGFkZHJlc3MgYXQgZXZlbiAzMmJpdCBib3VuZGFyaWVzLAorCSAqIGkuZS4gMl4yCisJICovCisJYmFzZS0+ZG1hX21lbWNweS5jb3B5X2FsaWduID0gMjsKIAllcnIgPSBkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZiYXNlLT5kbWFfbWVtY3B5KTsKIAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX3JlZ2lzdGVyX21lbWNweTsKIAotCWRldl9kYmcoJnBkZXYtPmRldiwgIkluaXRpYWxpemVkIENPSDkwMTMxOCBETUEgb24gdmlydHVhbCBiYXNlIDB4JTA4eFxuIiwKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiSW5pdGlhbGl6ZWQgQ09IOTAxMzE4IERNQSBvbiB2aXJ0dWFsIGJhc2UgMHglMDh4XG4iLAogCQkodTMyKSBiYXNlLT52aXJ0YmFzZSk7CiAKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvY29oOTAxMzE4X2xsaS5jIGIvZHJpdmVycy9kbWEvY29oOTAxMzE4X2xsaS5jCmluZGV4IGY1MTIwZjIuLjcxZDU4YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2NvaDkwMTMxOF9sbGkuYworKysgYi9kcml2ZXJzL2RtYS9jb2g5MDEzMThfbGxpLmMKQEAgLTc0LDYgKzc0LDggQEAKIAogCWxsaSA9IGhlYWQ7CiAJbGxpLT5waHlfdGhpcyA9IHBoeTsKKwlsbGktPmxpbmtfYWRkciA9IDB4MDAwMDAwMDA7CisJbGxpLT52aXJ0X2xpbmtfYWRkciA9IDB4MDAwMDAwMDBVOwogCiAJZm9yIChpID0gMTsgaSA8IGxlbjsgaSsrKSB7CiAJCWxsaV9wcmV2ID0gbGxpOwpAQCAtODUsMTMgKzg3LDEzIEBACiAKIAkJREVCVUdGU19QT09MX0NPVU5URVJfQUREKHBvb2wsIDEpOwogCQlsbGktPnBoeV90aGlzID0gcGh5OworCQlsbGktPmxpbmtfYWRkciA9IDB4MDAwMDAwMDA7CisJCWxsaS0+dmlydF9saW5rX2FkZHIgPSAweDAwMDAwMDAwVTsKIAogCQlsbGlfcHJldi0+bGlua19hZGRyID0gcGh5OwogCQlsbGlfcHJldi0+dmlydF9saW5rX2FkZHIgPSBsbGk7CiAJfQogCi0JbGxpLT5saW5rX2FkZHIgPSAweDAwMDAwMDAwVTsKLQogCXNwaW5fdW5sb2NrKCZwb29sLT5sb2NrKTsKIAogCXJldHVybiBoZWFkOwpAQCAtMTY2LDggKzE2OCw3IEBACiAJbGxpLT5zcmNfYWRkciA9IHNyYzsKIAlsbGktPmRzdF9hZGRyID0gZHN0OwogCi0JLyogT25lIGlycSBwZXIgc2luZ2xlIHRyYW5zZmVyICovCi0JcmV0dXJuIDE7CisJcmV0dXJuIDA7CiB9CiAKIGludApAQCAtMjIzLDggKzIyNCw3IEBACiAJbGxpLT5zcmNfYWRkciA9IHNyYzsKIAlsbGktPmRzdF9hZGRyID0gZHN0OwogCi0JLyogT25lIGlycSBwZXIgc2luZ2xlIHRyYW5zZmVyICovCi0JcmV0dXJuIDE7CisJcmV0dXJuIDA7CiB9CiAKIGludApAQCAtMjQwLDcgKzI0MCw2IEBACiAJdTMyIGN0cmxfc2c7CiAJZG1hX2FkZHJfdCBzcmMgPSAwOwogCWRtYV9hZGRyX3QgZHN0ID0gMDsKLQlpbnQgbmJyX29mX2lycSA9IDA7CiAJdTMyIGJ5dGVzX3RvX3RyYW5zZmVyOwogCXUzMiBlbGVtX3NpemU7CiAKQEAgLTI2OSwxNSArMjY4LDEyIEBACiAJCQljdHJsX3NnID0gY3RybCA/IGN0cmwgOiBjdHJsX2xhc3Q7CiAKIAotCQlpZiAoKGN0cmxfc2cgJiBjdHJsX2lycV9tYXNrKSkKLQkJCW5icl9vZl9pcnErKzsKLQogCQlpZiAoZGlyID09IERNQV9UT19ERVZJQ0UpCiAJCQkvKiBpbmNyZW1lbnQgc291cmNlIGFkZHJlc3MgKi8KLQkJCXNyYyA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJCXNyYyA9IHNnX3BoeXMoc2cpOwogCQllbHNlCiAJCQkvKiBpbmNyZW1lbnQgZGVzdGluYXRpb24gYWRkcmVzcyAqLwotCQkJZHN0ID0gIHNnX2RtYV9hZGRyZXNzKHNnKTsKKwkJCWRzdCA9ICBzZ19waHlzKHNnKTsKIAogCQlieXRlc190b190cmFuc2ZlciA9IHNnX2RtYV9sZW4oc2cpOwogCkBAIC0zMTAsOCArMzA2LDcgQEAKIAl9CiAJc3Bpbl91bmxvY2soJnBvb2wtPmxvY2spOwogCi0JLyogVGhlcmUgY2FuIGJlIG1hbnkgSVJRcyBwZXIgc2cgdHJhbnNmZXIgKi8KLQlyZXR1cm4gbmJyX29mX2lycTsKKwlyZXR1cm4gMDsKICBlcnI6CiAJc3Bpbl91bmxvY2soJnBvb2wtPmxvY2spOwogCXJldHVybiAtRUlOVkFMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvY29oOTAxMzE4X2xsaS5oIGIvZHJpdmVycy9kbWEvY29oOTAxMzE4X2xsaS5oCmluZGV4IDdiZjcxM2IuLjdhNWM4MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZG1hL2NvaDkwMTMxOF9sbGkuaAorKysgYi9kcml2ZXJzL2RtYS9jb2g5MDEzMThfbGxpLmgKQEAgLTMwLDcgKzMwLDcgQEAKICAqIEBwb29sOiBwb29sIGhhbmRsZQogICogQGRldjogZG1hIGRldmljZQogICogQGxsaV9uYnI6IG51bWJlciBvZiBsbGk6cyBpbiB0aGUgcG9vbAotICogQGFsZ2luOiBhZHJlc3MgYWxpZ25lbXRuIG9mIGxsaTpzCisgKiBAYWxnaW46IGFkZHJlc3MgYWxpZ25lbXRuIG9mIGxsaTpzCiAgKiByZXR1cm5zIDAgb24gc3VjY2VzcyBvdGhlcndpc2Ugbm9uZSB6ZXJvCiAgKi8KIGludCBjb2g5MDEzMThfcG9vbF9jcmVhdGUoc3RydWN0IGNvaDkwMTMxOF9wb29sICpwb29sLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZG1hZW5naW5lLmMgYi9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYwppbmRleCBlN2EzMjMwLi44NzM5OWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYworKysgYi9kcml2ZXJzL2RtYS9kbWFlbmdpbmUuYwpAQCAtMjg0LDcgKzI4NCw3IEBACiAvKioKICAqIGNoYW5uZWxfdGFibGUgLSBwZXJjcHUgbG9va3VwIHRhYmxlIGZvciBtZW1vcnktdG8tbWVtb3J5IG9mZmxvYWQgcHJvdmlkZXJzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgZG1hX2NoYW5fdGJsX2VudCAqY2hhbm5lbF90YWJsZVtETUFfVFhfVFlQRV9FTkRdOworc3RhdGljIHN0cnVjdCBkbWFfY2hhbl90YmxfZW50IF9fcGVyY3B1ICpjaGFubmVsX3RhYmxlW0RNQV9UWF9UWVBFX0VORF07CiAKIHN0YXRpYyBpbnQgX19pbml0IGRtYV9jaGFubmVsX3RhYmxlX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2RtYXRlc3QuYyBiL2RyaXZlcnMvZG1hL2RtYXRlc3QuYwppbmRleCA5NDhkNTYzLi42ZmE1NWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9kbWF0ZXN0LmMKKysrIGIvZHJpdmVycy9kbWEvZG1hdGVzdC5jCkBAIC0yMzcsNyArMjM3LDcgQEAKIAlkbWFfY29va2llX3QJCWNvb2tpZTsKIAllbnVtIGRtYV9zdGF0dXMJCXN0YXR1czsKIAllbnVtIGRtYV9jdHJsX2ZsYWdzIAlmbGFnczsKLQl1OAkJCXBxX2NvZWZzW3BxX3NvdXJjZXNdOworCXU4CQkJcHFfY29lZnNbcHFfc291cmNlcyArIDFdOwogCWludAkJCXJldDsKIAlpbnQJCQlzcmNfY250OwogCWludAkJCWRzdF9jbnQ7CkBAIC0yNTcsNyArMjU3LDcgQEAKIAl9IGVsc2UgaWYgKHRocmVhZC0+dHlwZSA9PSBETUFfUFEpIHsKIAkJc3JjX2NudCA9IHBxX3NvdXJjZXMgfCAxOyAvKiBmb3JjZSBvZGQgdG8gZW5zdXJlIGRzdCA9IHNyYyAqLwogCQlkc3RfY250ID0gMjsKLQkJZm9yIChpID0gMDsgaSA8IHBxX3NvdXJjZXM7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IHNyY19jbnQ7IGkrKykKIAkJCXBxX2NvZWZzW2ldID0gMTsKIAl9IGVsc2UKIAkJZ290byBlcnJfc3JjczsKQEAgLTM0Nyw3ICszNDcsNyBAQAogCQllbHNlIGlmICh0aHJlYWQtPnR5cGUgPT0gRE1BX1hPUikKIAkJCXR4ID0gZGV2LT5kZXZpY2VfcHJlcF9kbWFfeG9yKGNoYW4sCiAJCQkJCQkgICAgICBkbWFfZHN0c1swXSArIGRzdF9vZmYsCi0JCQkJCQkgICAgICBkbWFfc3JjcywgeG9yX3NvdXJjZXMsCisJCQkJCQkgICAgICBkbWFfc3Jjcywgc3JjX2NudCwKIAkJCQkJCSAgICAgIGxlbiwgZmxhZ3MpOwogCQllbHNlIGlmICh0aHJlYWQtPnR5cGUgPT0gRE1BX1BRKSB7CiAJCQlkbWFfYWRkcl90IGRtYV9wcVtkc3RfY250XTsKQEAgLTM1NSw3ICszNTUsNyBAQAogCQkJZm9yIChpID0gMDsgaSA8IGRzdF9jbnQ7IGkrKykKIAkJCQlkbWFfcHFbaV0gPSBkbWFfZHN0c1tpXSArIGRzdF9vZmY7CiAJCQl0eCA9IGRldi0+ZGV2aWNlX3ByZXBfZG1hX3BxKGNoYW4sIGRtYV9wcSwgZG1hX3NyY3MsCi0JCQkJCQkgICAgIHBxX3NvdXJjZXMsIHBxX2NvZWZzLAorCQkJCQkJICAgICBzcmNfY250LCBwcV9jb2VmcywKIAkJCQkJCSAgICAgbGVuLCBmbGFncyk7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvZnNsZG1hLmMgYi9kcml2ZXJzL2RtYS9mc2xkbWEuYwppbmRleCAyOTZmOWU3Li5iYmI0YmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9mc2xkbWEuYworKysgYi9kcml2ZXJzL2RtYS9mc2xkbWEuYwpAQCAtMzcsMTkgKzM3LDE5IEBACiAjaW5jbHVkZSA8YXNtL2ZzbGRtYS5oPgogI2luY2x1ZGUgImZzbGRtYS5oIgogCi1zdGF0aWMgdm9pZCBkbWFfaW5pdChzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbikKK3N0YXRpYyB2b2lkIGRtYV9pbml0KHN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbikKIHsKIAkvKiBSZXNldCB0aGUgY2hhbm5lbCAqLwotCURNQV9PVVQoZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPm1yLCAwLCAzMik7CisJRE1BX09VVChjaGFuLCAmY2hhbi0+cmVncy0+bXIsIDAsIDMyKTsKIAotCXN3aXRjaCAoZnNsX2NoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0lQX01BU0spIHsKKwlzd2l0Y2ggKGNoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0lQX01BU0spIHsKIAljYXNlIEZTTF9ETUFfSVBfODVYWDoKIAkJLyogU2V0IHRoZSBjaGFubmVsIHRvIGJlbG93IG1vZGVzOgogCQkgKiBFSUUgLSBFcnJvciBpbnRlcnJ1cHQgZW5hYmxlCiAJCSAqIEVPU0lFIC0gRW5kIG9mIHNlZ21lbnRzIGludGVycnVwdCBlbmFibGUgKGJhc2ljIG1vZGUpCiAJCSAqIEVPTE5JRSAtIEVuZCBvZiBsaW5rcyBpbnRlcnJ1cHQgZW5hYmxlCiAJCSAqLwotCQlETUFfT1VUKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwgRlNMX0RNQV9NUl9FSUUKKwkJRE1BX09VVChjaGFuLCAmY2hhbi0+cmVncy0+bXIsIEZTTF9ETUFfTVJfRUlFCiAJCQkJfCBGU0xfRE1BX01SX0VPTE5JRSB8IEZTTF9ETUFfTVJfRU9TSUUsIDMyKTsKIAkJYnJlYWs7CiAJY2FzZSBGU0xfRE1BX0lQXzgzWFg6CkBAIC01NywxNzAgKzU3LDE0NiBAQAogCQkgKiBFT1RJRSAtIEVuZC1vZi10cmFuc2ZlciBpbnRlcnJ1cHQgZW5hYmxlCiAJCSAqIFBSQ19STSAtIFBDSSByZWFkIG11bHRpcGxlCiAJCSAqLwotCQlETUFfT1VUKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwgRlNMX0RNQV9NUl9FT1RJRQorCQlETUFfT1VUKGNoYW4sICZjaGFuLT5yZWdzLT5tciwgRlNMX0RNQV9NUl9FT1RJRQogCQkJCXwgRlNMX0RNQV9NUl9QUkNfUk0sIDMyKTsKIAkJYnJlYWs7CiAJfQotCiB9CiAKLXN0YXRpYyB2b2lkIHNldF9zcihzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiwgdTMyIHZhbCkKK3N0YXRpYyB2b2lkIHNldF9zcihzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4sIHUzMiB2YWwpCiB7Ci0JRE1BX09VVChmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+c3IsIHZhbCwgMzIpOworCURNQV9PVVQoY2hhbiwgJmNoYW4tPnJlZ3MtPnNyLCB2YWwsIDMyKTsKIH0KIAotc3RhdGljIHUzMiBnZXRfc3Ioc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4pCitzdGF0aWMgdTMyIGdldF9zcihzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4pCiB7Ci0JcmV0dXJuIERNQV9JTihmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+c3IsIDMyKTsKKwlyZXR1cm4gRE1BX0lOKGNoYW4sICZjaGFuLT5yZWdzLT5zciwgMzIpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfZGVzY19jbnQoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4sCitzdGF0aWMgdm9pZCBzZXRfZGVzY19jbnQoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuLAogCQkJCXN0cnVjdCBmc2xfZG1hX2xkX2h3ICpodywgdTMyIGNvdW50KQogewotCWh3LT5jb3VudCA9IENQVV9UT19ETUEoZnNsX2NoYW4sIGNvdW50LCAzMik7CisJaHctPmNvdW50ID0gQ1BVX1RPX0RNQShjaGFuLCBjb3VudCwgMzIpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRfZGVzY19zcmMoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4sCitzdGF0aWMgdm9pZCBzZXRfZGVzY19zcmMoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuLAogCQkJCXN0cnVjdCBmc2xfZG1hX2xkX2h3ICpodywgZG1hX2FkZHJfdCBzcmMpCiB7CiAJdTY0IHNub29wX2JpdHM7CiAKLQlzbm9vcF9iaXRzID0gKChmc2xfY2hhbi0+ZmVhdHVyZSAmIEZTTF9ETUFfSVBfTUFTSykgPT0gRlNMX0RNQV9JUF84NVhYKQorCXNub29wX2JpdHMgPSAoKGNoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0lQX01BU0spID09IEZTTF9ETUFfSVBfODVYWCkKIAkJPyAoKHU2NClGU0xfRE1BX1NBVFJfU1JFQURUWVBFX1NOT09QX1JFQUQgPDwgMzIpIDogMDsKLQlody0+c3JjX2FkZHIgPSBDUFVfVE9fRE1BKGZzbF9jaGFuLCBzbm9vcF9iaXRzIHwgc3JjLCA2NCk7CisJaHctPnNyY19hZGRyID0gQ1BVX1RPX0RNQShjaGFuLCBzbm9vcF9iaXRzIHwgc3JjLCA2NCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9kZXNjX2Rlc3Qoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4sCi0JCQkJc3RydWN0IGZzbF9kbWFfbGRfaHcgKmh3LCBkbWFfYWRkcl90IGRlc3QpCitzdGF0aWMgdm9pZCBzZXRfZGVzY19kc3Qoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuLAorCQkJCXN0cnVjdCBmc2xfZG1hX2xkX2h3ICpodywgZG1hX2FkZHJfdCBkc3QpCiB7CiAJdTY0IHNub29wX2JpdHM7CiAKLQlzbm9vcF9iaXRzID0gKChmc2xfY2hhbi0+ZmVhdHVyZSAmIEZTTF9ETUFfSVBfTUFTSykgPT0gRlNMX0RNQV9JUF84NVhYKQorCXNub29wX2JpdHMgPSAoKGNoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0lQX01BU0spID09IEZTTF9ETUFfSVBfODVYWCkKIAkJPyAoKHU2NClGU0xfRE1BX0RBVFJfRFdSSVRFVFlQRV9TTk9PUF9XUklURSA8PCAzMikgOiAwOwotCWh3LT5kc3RfYWRkciA9IENQVV9UT19ETUEoZnNsX2NoYW4sIHNub29wX2JpdHMgfCBkZXN0LCA2NCk7CisJaHctPmRzdF9hZGRyID0gQ1BVX1RPX0RNQShjaGFuLCBzbm9vcF9iaXRzIHwgZHN0LCA2NCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9kZXNjX25leHQoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4sCitzdGF0aWMgdm9pZCBzZXRfZGVzY19uZXh0KHN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbiwKIAkJCQlzdHJ1Y3QgZnNsX2RtYV9sZF9odyAqaHcsIGRtYV9hZGRyX3QgbmV4dCkKIHsKIAl1NjQgc25vb3BfYml0czsKIAotCXNub29wX2JpdHMgPSAoKGZzbF9jaGFuLT5mZWF0dXJlICYgRlNMX0RNQV9JUF9NQVNLKSA9PSBGU0xfRE1BX0lQXzgzWFgpCisJc25vb3BfYml0cyA9ICgoY2hhbi0+ZmVhdHVyZSAmIEZTTF9ETUFfSVBfTUFTSykgPT0gRlNMX0RNQV9JUF84M1hYKQogCQk/IEZTTF9ETUFfU05FTiA6IDA7Ci0JaHctPm5leHRfbG5fYWRkciA9IENQVV9UT19ETUEoZnNsX2NoYW4sIHNub29wX2JpdHMgfCBuZXh0LCA2NCk7CisJaHctPm5leHRfbG5fYWRkciA9IENQVV9UT19ETUEoY2hhbiwgc25vb3BfYml0cyB8IG5leHQsIDY0KTsKIH0KIAotc3RhdGljIHZvaWQgc2V0X2NkYXIoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4sIGRtYV9hZGRyX3QgYWRkcikKK3N0YXRpYyB2b2lkIHNldF9jZGFyKHN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBhZGRyKQogewotCURNQV9PVVQoZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPmNkYXIsIGFkZHIgfCBGU0xfRE1BX1NORU4sIDY0KTsKKwlETUFfT1VUKGNoYW4sICZjaGFuLT5yZWdzLT5jZGFyLCBhZGRyIHwgRlNMX0RNQV9TTkVOLCA2NCk7CiB9CiAKLXN0YXRpYyBkbWFfYWRkcl90IGdldF9jZGFyKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuKQorc3RhdGljIGRtYV9hZGRyX3QgZ2V0X2NkYXIoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuKQogewotCXJldHVybiBETUFfSU4oZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPmNkYXIsIDY0KSAmIH5GU0xfRE1BX1NORU47CisJcmV0dXJuIERNQV9JTihjaGFuLCAmY2hhbi0+cmVncy0+Y2RhciwgNjQpICYgfkZTTF9ETUFfU05FTjsKIH0KIAotc3RhdGljIHZvaWQgc2V0X25kYXIoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4sIGRtYV9hZGRyX3QgYWRkcikKK3N0YXRpYyBkbWFfYWRkcl90IGdldF9uZGFyKHN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbikKIHsKLQlETUFfT1VUKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5uZGFyLCBhZGRyLCA2NCk7CisJcmV0dXJuIERNQV9JTihjaGFuLCAmY2hhbi0+cmVncy0+bmRhciwgNjQpOwogfQogCi1zdGF0aWMgZG1hX2FkZHJfdCBnZXRfbmRhcihzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbikKK3N0YXRpYyB1MzIgZ2V0X2JjcihzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4pCiB7Ci0JcmV0dXJuIERNQV9JTihmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bmRhciwgNjQpOworCXJldHVybiBETUFfSU4oY2hhbiwgJmNoYW4tPnJlZ3MtPmJjciwgMzIpOwogfQogCi1zdGF0aWMgdTMyIGdldF9iY3Ioc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4pCitzdGF0aWMgaW50IGRtYV9pc19pZGxlKHN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbikKIHsKLQlyZXR1cm4gRE1BX0lOKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5iY3IsIDMyKTsKLX0KLQotc3RhdGljIGludCBkbWFfaXNfaWRsZShzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbikKLXsKLQl1MzIgc3IgPSBnZXRfc3IoZnNsX2NoYW4pOworCXUzMiBzciA9IGdldF9zcihjaGFuKTsKIAlyZXR1cm4gKCEoc3IgJiBGU0xfRE1BX1NSX0NCKSkgfHwgKHNyICYgRlNMX0RNQV9TUl9DSCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRtYV9zdGFydChzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbikKK3N0YXRpYyB2b2lkIGRtYV9zdGFydChzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4pCiB7Ci0JdTMyIG1yX3NldCA9IDA7CisJdTMyIG1vZGU7CiAKLQlpZiAoZnNsX2NoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0NIQU5fUEFVU0VfRVhUKSB7Ci0JCURNQV9PVVQoZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPmJjciwgMCwgMzIpOwotCQltcl9zZXQgfD0gRlNMX0RNQV9NUl9FTVBfRU47Ci0JfSBlbHNlIGlmICgoZnNsX2NoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0lQX01BU0spID09IEZTTF9ETUFfSVBfODVYWCkgewotCQlETUFfT1VUKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwKLQkJCURNQV9JTihmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bXIsIDMyKQotCQkJCSYgfkZTTF9ETUFfTVJfRU1QX0VOLCAzMik7CisJbW9kZSA9IERNQV9JTihjaGFuLCAmY2hhbi0+cmVncy0+bXIsIDMyKTsKKworCWlmICgoY2hhbi0+ZmVhdHVyZSAmIEZTTF9ETUFfSVBfTUFTSykgPT0gRlNMX0RNQV9JUF84NVhYKSB7CisJCWlmIChjaGFuLT5mZWF0dXJlICYgRlNMX0RNQV9DSEFOX1BBVVNFX0VYVCkgeworCQkJRE1BX09VVChjaGFuLCAmY2hhbi0+cmVncy0+YmNyLCAwLCAzMik7CisJCQltb2RlIHw9IEZTTF9ETUFfTVJfRU1QX0VOOworCQl9IGVsc2UgeworCQkJbW9kZSAmPSB+RlNMX0RNQV9NUl9FTVBfRU47CisJCX0KIAl9CiAKLQlpZiAoZnNsX2NoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0NIQU5fU1RBUlRfRVhUKQotCQltcl9zZXQgfD0gRlNMX0RNQV9NUl9FTVNfRU47CisJaWYgKGNoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0NIQU5fU1RBUlRfRVhUKQorCQltb2RlIHw9IEZTTF9ETUFfTVJfRU1TX0VOOwogCWVsc2UKLQkJbXJfc2V0IHw9IEZTTF9ETUFfTVJfQ1M7CisJCW1vZGUgfD0gRlNMX0RNQV9NUl9DUzsKIAotCURNQV9PVVQoZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPm1yLAotCQkJRE1BX0lOKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwgMzIpCi0JCQl8IG1yX3NldCwgMzIpOworCURNQV9PVVQoY2hhbiwgJmNoYW4tPnJlZ3MtPm1yLCBtb2RlLCAzMik7CiB9CiAKLXN0YXRpYyB2b2lkIGRtYV9oYWx0KHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuKQorc3RhdGljIHZvaWQgZG1hX2hhbHQoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuKQogeworCXUzMiBtb2RlOwogCWludCBpOwogCi0JRE1BX09VVChmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bXIsCi0JCURNQV9JTihmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bXIsIDMyKSB8IEZTTF9ETUFfTVJfQ0EsCi0JCTMyKTsKLQlETUFfT1VUKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwKLQkJRE1BX0lOKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwgMzIpICYgfihGU0xfRE1BX01SX0NTCi0JCXwgRlNMX0RNQV9NUl9FTVNfRU4gfCBGU0xfRE1BX01SX0NBKSwgMzIpOworCW1vZGUgPSBETUFfSU4oY2hhbiwgJmNoYW4tPnJlZ3MtPm1yLCAzMik7CisJbW9kZSB8PSBGU0xfRE1BX01SX0NBOworCURNQV9PVVQoY2hhbiwgJmNoYW4tPnJlZ3MtPm1yLCBtb2RlLCAzMik7CisKKwltb2RlICY9IH4oRlNMX0RNQV9NUl9DUyB8IEZTTF9ETUFfTVJfRU1TX0VOIHwgRlNMX0RNQV9NUl9DQSk7CisJRE1BX09VVChjaGFuLCAmY2hhbi0+cmVncy0+bXIsIG1vZGUsIDMyKTsKIAogCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewotCQlpZiAoZG1hX2lzX2lkbGUoZnNsX2NoYW4pKQotCQkJYnJlYWs7CisJCWlmIChkbWFfaXNfaWRsZShjaGFuKSkKKwkJCXJldHVybjsKKwogCQl1ZGVsYXkoMTApOwogCX0KLQlpZiAoaSA+PSAxMDAgJiYgIWRtYV9pc19pZGxlKGZzbF9jaGFuKSkKLQkJZGV2X2Vycihmc2xfY2hhbi0+ZGV2LCAiRE1BIGhhbHQgdGltZW91dCFcbiIpOworCisJaWYgKCFkbWFfaXNfaWRsZShjaGFuKSkKKwkJZGV2X2VycihjaGFuLT5kZXYsICJETUEgaGFsdCB0aW1lb3V0IVxuIik7CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9sZF9lb2woc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4sCitzdGF0aWMgdm9pZCBzZXRfbGRfZW9sKHN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbiwKIAkJCXN0cnVjdCBmc2xfZGVzY19zdyAqZGVzYykKIHsKIAl1NjQgc25vb3BfYml0czsKIAotCXNub29wX2JpdHMgPSAoKGZzbF9jaGFuLT5mZWF0dXJlICYgRlNMX0RNQV9JUF9NQVNLKSA9PSBGU0xfRE1BX0lQXzgzWFgpCisJc25vb3BfYml0cyA9ICgoY2hhbi0+ZmVhdHVyZSAmIEZTTF9ETUFfSVBfTUFTSykgPT0gRlNMX0RNQV9JUF84M1hYKQogCQk/IEZTTF9ETUFfU05FTiA6IDA7CiAKLQlkZXNjLT5ody5uZXh0X2xuX2FkZHIgPSBDUFVfVE9fRE1BKGZzbF9jaGFuLAotCQlETUFfVE9fQ1BVKGZzbF9jaGFuLCBkZXNjLT5ody5uZXh0X2xuX2FkZHIsIDY0KSB8IEZTTF9ETUFfRU9MCisJZGVzYy0+aHcubmV4dF9sbl9hZGRyID0gQ1BVX1RPX0RNQShjaGFuLAorCQlETUFfVE9fQ1BVKGNoYW4sIGRlc2MtPmh3Lm5leHRfbG5fYWRkciwgNjQpIHwgRlNMX0RNQV9FT0wKIAkJCXwgc25vb3BfYml0cywgNjQpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBlbmRfbGRfcXVldWUoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4sCi0JCXN0cnVjdCBmc2xfZGVzY19zdyAqbmV3X2Rlc2MpCi17Ci0Jc3RydWN0IGZzbF9kZXNjX3N3ICpxdWV1ZV90YWlsID0gdG9fZnNsX2Rlc2MoZnNsX2NoYW4tPmxkX3F1ZXVlLnByZXYpOwotCi0JaWYgKGxpc3RfZW1wdHkoJmZzbF9jaGFuLT5sZF9xdWV1ZSkpCi0JCXJldHVybjsKLQotCS8qIExpbmsgdG8gdGhlIG5ldyBkZXNjcmlwdG9yIHBoeXNpY2FsIGFkZHJlc3MgYW5kCi0JICogRW5hYmxlIEVuZC1vZi1zZWdtZW50IGludGVycnVwdCBmb3IKLQkgKiB0aGUgbGFzdCBsaW5rIGRlc2NyaXB0b3IuCi0JICogKHRoZSBwcmV2aW91cyBub2RlJ3MgbmV4dCBsaW5rIGRlc2NyaXB0b3IpCi0JICoKLQkgKiBGb3IgRlNMX0RNQV9JUF84M3h4LCB0aGUgc25vb3AgZW5hYmxlIGJpdCBuZWVkIGJlIHNldC4KLQkgKi8KLQlxdWV1ZV90YWlsLT5ody5uZXh0X2xuX2FkZHIgPSBDUFVfVE9fRE1BKGZzbF9jaGFuLAotCQkJbmV3X2Rlc2MtPmFzeW5jX3R4LnBoeXMgfCBGU0xfRE1BX0VPU0lFIHwKLQkJCSgoKGZzbF9jaGFuLT5mZWF0dXJlICYgRlNMX0RNQV9JUF9NQVNLKQotCQkJCT09IEZTTF9ETUFfSVBfODNYWCkgPyBGU0xfRE1BX1NORU4gOiAwKSwgNjQpOwotfQotCiAvKioKICAqIGZzbF9jaGFuX3NldF9zcmNfbG9vcF9zaXplIC0gU2V0IHNvdXJjZSBhZGRyZXNzIGhvbGQgdHJhbnNmZXIgc2l6ZQotICogQGZzbF9jaGFuIDogRnJlZXNjYWxlIERNQSBjaGFubmVsCisgKiBAY2hhbiA6IEZyZWVzY2FsZSBETUEgY2hhbm5lbAogICogQHNpemUgICAgIDogQWRkcmVzcyBsb29wIHNpemUsIDAgZm9yIGRpc2FibGUgbG9vcAogICoKICAqIFRoZSBzZXQgc291cmNlIGFkZHJlc3MgaG9sZCB0cmFuc2ZlciBzaXplLiBUaGUgc291cmNlCkBAIC0yMjksMjkgKzIwNSwzMCBAQAogICogcmVhZCBkYXRhIGZyb20gU0EsIFNBICsgMSwgU0EgKyAyLCBTQSArIDMsIHRoZW4gbG9vcCBiYWNrIHRvIFNBLAogICogU0EgKyAxIC4uLiBhbmQgc28gb24uCiAgKi8KLXN0YXRpYyB2b2lkIGZzbF9jaGFuX3NldF9zcmNfbG9vcF9zaXplKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuLCBpbnQgc2l6ZSkKK3N0YXRpYyB2b2lkIGZzbF9jaGFuX3NldF9zcmNfbG9vcF9zaXplKHN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbiwgaW50IHNpemUpCiB7CisJdTMyIG1vZGU7CisKKwltb2RlID0gRE1BX0lOKGNoYW4sICZjaGFuLT5yZWdzLT5tciwgMzIpOworCiAJc3dpdGNoIChzaXplKSB7CiAJY2FzZSAwOgotCQlETUFfT1VUKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwKLQkJCURNQV9JTihmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bXIsIDMyKSAmCi0JCQkofkZTTF9ETUFfTVJfU0FIRSksIDMyKTsKKwkJbW9kZSAmPSB+RlNMX0RNQV9NUl9TQUhFOwogCQlicmVhazsKIAljYXNlIDE6CiAJY2FzZSAyOgogCWNhc2UgNDoKIAljYXNlIDg6Ci0JCURNQV9PVVQoZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPm1yLAotCQkJRE1BX0lOKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwgMzIpIHwKLQkJCUZTTF9ETUFfTVJfU0FIRSB8IChfX2lsb2cyKHNpemUpIDw8IDE0KSwKLQkJCTMyKTsKKwkJbW9kZSB8PSBGU0xfRE1BX01SX1NBSEUgfCAoX19pbG9nMihzaXplKSA8PCAxNCk7CiAJCWJyZWFrOwogCX0KKworCURNQV9PVVQoY2hhbiwgJmNoYW4tPnJlZ3MtPm1yLCBtb2RlLCAzMik7CiB9CiAKIC8qKgotICogZnNsX2NoYW5fc2V0X2Rlc3RfbG9vcF9zaXplIC0gU2V0IGRlc3RpbmF0aW9uIGFkZHJlc3MgaG9sZCB0cmFuc2ZlciBzaXplCi0gKiBAZnNsX2NoYW4gOiBGcmVlc2NhbGUgRE1BIGNoYW5uZWwKKyAqIGZzbF9jaGFuX3NldF9kc3RfbG9vcF9zaXplIC0gU2V0IGRlc3RpbmF0aW9uIGFkZHJlc3MgaG9sZCB0cmFuc2ZlciBzaXplCisgKiBAY2hhbiA6IEZyZWVzY2FsZSBETUEgY2hhbm5lbAogICogQHNpemUgICAgIDogQWRkcmVzcyBsb29wIHNpemUsIDAgZm9yIGRpc2FibGUgbG9vcAogICoKICAqIFRoZSBzZXQgZGVzdGluYXRpb24gYWRkcmVzcyBob2xkIHRyYW5zZmVyIHNpemUuIFRoZSBkZXN0aW5hdGlvbgpAQCAtMjYwLDI5ICsyMzcsMzAgQEAKICAqIHdyaXRlIGRhdGEgdG8gVEEsIFRBICsgMSwgVEEgKyAyLCBUQSArIDMsIHRoZW4gbG9vcCBiYWNrIHRvIFRBLAogICogVEEgKyAxIC4uLiBhbmQgc28gb24uCiAgKi8KLXN0YXRpYyB2b2lkIGZzbF9jaGFuX3NldF9kZXN0X2xvb3Bfc2l6ZShzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiwgaW50IHNpemUpCitzdGF0aWMgdm9pZCBmc2xfY2hhbl9zZXRfZHN0X2xvb3Bfc2l6ZShzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4sIGludCBzaXplKQogeworCXUzMiBtb2RlOworCisJbW9kZSA9IERNQV9JTihjaGFuLCAmY2hhbi0+cmVncy0+bXIsIDMyKTsKKwogCXN3aXRjaCAoc2l6ZSkgewogCWNhc2UgMDoKLQkJRE1BX09VVChmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bXIsCi0JCQlETUFfSU4oZnNsX2NoYW4sICZmc2xfY2hhbi0+cmVnX2Jhc2UtPm1yLCAzMikgJgotCQkJKH5GU0xfRE1BX01SX0RBSEUpLCAzMik7CisJCW1vZGUgJj0gfkZTTF9ETUFfTVJfREFIRTsKIAkJYnJlYWs7CiAJY2FzZSAxOgogCWNhc2UgMjoKIAljYXNlIDQ6CiAJY2FzZSA4OgotCQlETUFfT1VUKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwKLQkJCURNQV9JTihmc2xfY2hhbiwgJmZzbF9jaGFuLT5yZWdfYmFzZS0+bXIsIDMyKSB8Ci0JCQlGU0xfRE1BX01SX0RBSEUgfCAoX19pbG9nMihzaXplKSA8PCAxNiksCi0JCQkzMik7CisJCW1vZGUgfD0gRlNMX0RNQV9NUl9EQUhFIHwgKF9faWxvZzIoc2l6ZSkgPDwgMTYpOwogCQlicmVhazsKIAl9CisKKwlETUFfT1VUKGNoYW4sICZjaGFuLT5yZWdzLT5tciwgbW9kZSwgMzIpOwogfQogCiAvKioKICAqIGZzbF9jaGFuX3NldF9yZXF1ZXN0X2NvdW50IC0gU2V0IERNQSBSZXF1ZXN0IENvdW50IGZvciBleHRlcm5hbCBjb250cm9sCi0gKiBAZnNsX2NoYW4gOiBGcmVlc2NhbGUgRE1BIGNoYW5uZWwKKyAqIEBjaGFuIDogRnJlZXNjYWxlIERNQSBjaGFubmVsCiAgKiBAc2l6ZSAgICAgOiBOdW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIgaW4gYSBzaW5nbGUgcmVxdWVzdAogICoKICAqIFRoZSBGcmVlc2NhbGUgRE1BIGNoYW5uZWwgY2FuIGJlIGNvbnRyb2xsZWQgYnkgdGhlIGV4dGVybmFsIHNpZ25hbCBEUkVRIy4KQEAgLTI5MiwzNSArMjcwLDM4IEBACiAgKgogICogQSBzaXplIG9mIDAgZGlzYWJsZXMgZXh0ZXJuYWwgcGF1c2UgY29udHJvbC4gVGhlIG1heGltdW0gc2l6ZSBpcyAxMDI0LgogICovCi1zdGF0aWMgdm9pZCBmc2xfY2hhbl9zZXRfcmVxdWVzdF9jb3VudChzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiwgaW50IHNpemUpCitzdGF0aWMgdm9pZCBmc2xfY2hhbl9zZXRfcmVxdWVzdF9jb3VudChzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4sIGludCBzaXplKQogeworCXUzMiBtb2RlOworCiAJQlVHX09OKHNpemUgPiAxMDI0KTsKLQlETUFfT1VUKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwKLQkJRE1BX0lOKGZzbF9jaGFuLCAmZnNsX2NoYW4tPnJlZ19iYXNlLT5tciwgMzIpCi0JCQl8ICgoX19pbG9nMihzaXplKSA8PCAyNCkgJiAweDBmMDAwMDAwKSwKLQkJMzIpOworCisJbW9kZSA9IERNQV9JTihjaGFuLCAmY2hhbi0+cmVncy0+bXIsIDMyKTsKKwltb2RlIHw9IChfX2lsb2cyKHNpemUpIDw8IDI0KSAmIDB4MGYwMDAwMDA7CisKKwlETUFfT1VUKGNoYW4sICZjaGFuLT5yZWdzLT5tciwgbW9kZSwgMzIpOwogfQogCiAvKioKICAqIGZzbF9jaGFuX3RvZ2dsZV9leHRfcGF1c2UgLSBUb2dnbGUgY2hhbm5lbCBleHRlcm5hbCBwYXVzZSBzdGF0dXMKLSAqIEBmc2xfY2hhbiA6IEZyZWVzY2FsZSBETUEgY2hhbm5lbAorICogQGNoYW4gOiBGcmVlc2NhbGUgRE1BIGNoYW5uZWwKICAqIEBlbmFibGUgICA6IDAgaXMgZGlzYWJsZWQsIDEgaXMgZW5hYmxlZC4KICAqCiAgKiBUaGUgRnJlZXNjYWxlIERNQSBjaGFubmVsIGNhbiBiZSBjb250cm9sbGVkIGJ5IHRoZSBleHRlcm5hbCBzaWduYWwgRFJFUSMuCiAgKiBUaGUgRE1BIFJlcXVlc3QgQ291bnQgZmVhdHVyZSBzaG91bGQgYmUgdXNlZCBpbiBhZGRpdGlvbiB0byB0aGlzIGZlYXR1cmUKICAqIHRvIHNldCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIHRyYW5zZmVyIGJlZm9yZSBwYXVzaW5nIHRoZSBjaGFubmVsLgogICovCi1zdGF0aWMgdm9pZCBmc2xfY2hhbl90b2dnbGVfZXh0X3BhdXNlKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuLCBpbnQgZW5hYmxlKQorc3RhdGljIHZvaWQgZnNsX2NoYW5fdG9nZ2xlX2V4dF9wYXVzZShzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4sIGludCBlbmFibGUpCiB7CiAJaWYgKGVuYWJsZSkKLQkJZnNsX2NoYW4tPmZlYXR1cmUgfD0gRlNMX0RNQV9DSEFOX1BBVVNFX0VYVDsKKwkJY2hhbi0+ZmVhdHVyZSB8PSBGU0xfRE1BX0NIQU5fUEFVU0VfRVhUOwogCWVsc2UKLQkJZnNsX2NoYW4tPmZlYXR1cmUgJj0gfkZTTF9ETUFfQ0hBTl9QQVVTRV9FWFQ7CisJCWNoYW4tPmZlYXR1cmUgJj0gfkZTTF9ETUFfQ0hBTl9QQVVTRV9FWFQ7CiB9CiAKIC8qKgogICogZnNsX2NoYW5fdG9nZ2xlX2V4dF9zdGFydCAtIFRvZ2dsZSBjaGFubmVsIGV4dGVybmFsIHN0YXJ0IHN0YXR1cwotICogQGZzbF9jaGFuIDogRnJlZXNjYWxlIERNQSBjaGFubmVsCisgKiBAY2hhbiA6IEZyZWVzY2FsZSBETUEgY2hhbm5lbAogICogQGVuYWJsZSAgIDogMCBpcyBkaXNhYmxlZCwgMSBpcyBlbmFibGVkLgogICoKICAqIElmIGVuYWJsZSB0aGUgZXh0ZXJuYWwgc3RhcnQsIHRoZSBjaGFubmVsIGNhbiBiZSBzdGFydGVkIGJ5IGFuCkBAIC0zMjgsMTQxICszMDksMTk2IEBACiAgKiB0cmFuc2ZlciBpbW1lZGlhdGVseS4gVGhlIERNQSBjaGFubmVsIHdpbGwgd2FpdCBmb3IgdGhlCiAgKiBjb250cm9sIHBpbiBhc3NlcnRlZC4KICAqLwotc3RhdGljIHZvaWQgZnNsX2NoYW5fdG9nZ2xlX2V4dF9zdGFydChzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiwgaW50IGVuYWJsZSkKK3N0YXRpYyB2b2lkIGZzbF9jaGFuX3RvZ2dsZV9leHRfc3RhcnQoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuLCBpbnQgZW5hYmxlKQogewogCWlmIChlbmFibGUpCi0JCWZzbF9jaGFuLT5mZWF0dXJlIHw9IEZTTF9ETUFfQ0hBTl9TVEFSVF9FWFQ7CisJCWNoYW4tPmZlYXR1cmUgfD0gRlNMX0RNQV9DSEFOX1NUQVJUX0VYVDsKIAllbHNlCi0JCWZzbF9jaGFuLT5mZWF0dXJlICY9IH5GU0xfRE1BX0NIQU5fU1RBUlRfRVhUOworCQljaGFuLT5mZWF0dXJlICY9IH5GU0xfRE1BX0NIQU5fU1RBUlRfRVhUOworfQorCitzdGF0aWMgdm9pZCBhcHBlbmRfbGRfcXVldWUoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuLAorCQkJICAgIHN0cnVjdCBmc2xfZGVzY19zdyAqZGVzYykKK3sKKwlzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKnRhaWwgPSB0b19mc2xfZGVzYyhjaGFuLT5sZF9wZW5kaW5nLnByZXYpOworCisJaWYgKGxpc3RfZW1wdHkoJmNoYW4tPmxkX3BlbmRpbmcpKQorCQlnb3RvIG91dF9zcGxpY2U7CisKKwkvKgorCSAqIEFkZCB0aGUgaGFyZHdhcmUgZGVzY3JpcHRvciB0byB0aGUgY2hhaW4gb2YgaGFyZHdhcmUgZGVzY3JpcHRvcnMKKwkgKiB0aGF0IGFscmVhZHkgZXhpc3RzIGluIG1lbW9yeS4KKwkgKgorCSAqIFRoaXMgd2lsbCB1bi1zZXQgdGhlIEVPTCBiaXQgb2YgdGhlIGV4aXN0aW5nIHRyYW5zYWN0aW9uLCBhbmQgdGhlCisJICogbGFzdCBsaW5rIGluIHRoaXMgdHJhbnNhY3Rpb24gd2lsbCBiZWNvbWUgdGhlIEVPTCBkZXNjcmlwdG9yLgorCSAqLworCXNldF9kZXNjX25leHQoY2hhbiwgJnRhaWwtPmh3LCBkZXNjLT5hc3luY190eC5waHlzKTsKKworCS8qCisJICogQWRkIHRoZSBzb2Z0d2FyZSBkZXNjcmlwdG9yIGFuZCBhbGwgY2hpbGRyZW4gdG8gdGhlIGxpc3QKKwkgKiBvZiBwZW5kaW5nIHRyYW5zYWN0aW9ucworCSAqLworb3V0X3NwbGljZToKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoJmRlc2MtPnR4X2xpc3QsICZjaGFuLT5sZF9wZW5kaW5nKTsKIH0KIAogc3RhdGljIGRtYV9jb29raWVfdCBmc2xfZG1hX3R4X3N1Ym1pdChzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKnR4KQogewotCXN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2NoYW4odHgtPmNoYW4pOworCXN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbiA9IHRvX2ZzbF9jaGFuKHR4LT5jaGFuKTsKIAlzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmRlc2MgPSB0eF90b19mc2xfZGVzYyh0eCk7CiAJc3RydWN0IGZzbF9kZXNjX3N3ICpjaGlsZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWRtYV9jb29raWVfdCBjb29raWU7CiAKLQkvKiBjb29raWUgaW5jcmVtZW50IGFuZCBhZGRpbmcgdG8gbGRfcXVldWUgbXVzdCBiZSBhdG9taWMgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2NoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKIAotCWNvb2tpZSA9IGZzbF9jaGFuLT5jb21tb24uY29va2llOworCS8qCisJICogYXNzaWduIGNvb2tpZXMgdG8gYWxsIG9mIHRoZSBzb2Z0d2FyZSBkZXNjcmlwdG9ycworCSAqIHRoYXQgbWFrZSB1cCB0aGlzIHRyYW5zYWN0aW9uCisJICovCisJY29va2llID0gY2hhbi0+Y29tbW9uLmNvb2tpZTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoaWxkLCAmZGVzYy0+dHhfbGlzdCwgbm9kZSkgewogCQljb29raWUrKzsKIAkJaWYgKGNvb2tpZSA8IDApCiAJCQljb29raWUgPSAxOwogCi0JCWRlc2MtPmFzeW5jX3R4LmNvb2tpZSA9IGNvb2tpZTsKKwkJY2hpbGQtPmFzeW5jX3R4LmNvb2tpZSA9IGNvb2tpZTsKIAl9CiAKLQlmc2xfY2hhbi0+Y29tbW9uLmNvb2tpZSA9IGNvb2tpZTsKLQlhcHBlbmRfbGRfcXVldWUoZnNsX2NoYW4sIGRlc2MpOwotCWxpc3Rfc3BsaWNlX2luaXQoJmRlc2MtPnR4X2xpc3QsIGZzbF9jaGFuLT5sZF9xdWV1ZS5wcmV2KTsKKwljaGFuLT5jb21tb24uY29va2llID0gY29va2llOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZnNsX2NoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOworCS8qIHB1dCB0aGlzIHRyYW5zYWN0aW9uIG9udG8gdGhlIHRhaWwgb2YgdGhlIHBlbmRpbmcgcXVldWUgKi8KKwlhcHBlbmRfbGRfcXVldWUoY2hhbiwgZGVzYyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBjb29raWU7CiB9CiAKIC8qKgogICogZnNsX2RtYV9hbGxvY19kZXNjcmlwdG9yIC0gQWxsb2NhdGUgZGVzY3JpcHRvciBmcm9tIGNoYW5uZWwncyBETUEgcG9vbC4KLSAqIEBmc2xfY2hhbiA6IEZyZWVzY2FsZSBETUEgY2hhbm5lbAorICogQGNoYW4gOiBGcmVlc2NhbGUgRE1BIGNoYW5uZWwKICAqCiAgKiBSZXR1cm4gLSBUaGUgZGVzY3JpcHRvciBhbGxvY2F0ZWQuIE5VTEwgZm9yIGZhaWxlZC4KICAqLwogc3RhdGljIHN0cnVjdCBmc2xfZGVzY19zdyAqZnNsX2RtYV9hbGxvY19kZXNjcmlwdG9yKAotCQkJCQlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbikKKwkJCQkJc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuKQogeworCXN0cnVjdCBmc2xfZGVzY19zdyAqZGVzYzsKIAlkbWFfYWRkcl90IHBkZXNjOwotCXN0cnVjdCBmc2xfZGVzY19zdyAqZGVzY19zdzsKIAotCWRlc2Nfc3cgPSBkbWFfcG9vbF9hbGxvYyhmc2xfY2hhbi0+ZGVzY19wb29sLCBHRlBfQVRPTUlDLCAmcGRlc2MpOwotCWlmIChkZXNjX3N3KSB7Ci0JCW1lbXNldChkZXNjX3N3LCAwLCBzaXplb2Yoc3RydWN0IGZzbF9kZXNjX3N3KSk7Ci0JCUlOSVRfTElTVF9IRUFEKCZkZXNjX3N3LT50eF9saXN0KTsKLQkJZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3JfaW5pdCgmZGVzY19zdy0+YXN5bmNfdHgsCi0JCQkJCQkmZnNsX2NoYW4tPmNvbW1vbik7Ci0JCWRlc2Nfc3ctPmFzeW5jX3R4LnR4X3N1Ym1pdCA9IGZzbF9kbWFfdHhfc3VibWl0OwotCQlkZXNjX3N3LT5hc3luY190eC5waHlzID0gcGRlc2M7CisJZGVzYyA9IGRtYV9wb29sX2FsbG9jKGNoYW4tPmRlc2NfcG9vbCwgR0ZQX0FUT01JQywgJnBkZXNjKTsKKwlpZiAoIWRlc2MpIHsKKwkJZGV2X2RiZyhjaGFuLT5kZXYsICJvdXQgb2YgbWVtb3J5IGZvciBsaW5rIGRlc2NcbiIpOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlyZXR1cm4gZGVzY19zdzsKKwltZW1zZXQoZGVzYywgMCwgc2l6ZW9mKCpkZXNjKSk7CisJSU5JVF9MSVNUX0hFQUQoJmRlc2MtPnR4X2xpc3QpOworCWRtYV9hc3luY190eF9kZXNjcmlwdG9yX2luaXQoJmRlc2MtPmFzeW5jX3R4LCAmY2hhbi0+Y29tbW9uKTsKKwlkZXNjLT5hc3luY190eC50eF9zdWJtaXQgPSBmc2xfZG1hX3R4X3N1Ym1pdDsKKwlkZXNjLT5hc3luY190eC5waHlzID0gcGRlc2M7CisKKwlyZXR1cm4gZGVzYzsKIH0KIAogCiAvKioKICAqIGZzbF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMgLSBBbGxvY2F0ZSByZXNvdXJjZXMgZm9yIERNQSBjaGFubmVsLgotICogQGZzbF9jaGFuIDogRnJlZXNjYWxlIERNQSBjaGFubmVsCisgKiBAY2hhbiA6IEZyZWVzY2FsZSBETUEgY2hhbm5lbAogICoKICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBjcmVhdGUgYSBkbWEgcG9vbCBmb3IgZGVzY3JpcHRvciBhbGxvY2F0aW9uLgogICoKICAqIFJldHVybiAtIFRoZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgYWxsb2NhdGVkLgogICovCi1zdGF0aWMgaW50IGZzbF9kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXMoc3RydWN0IGRtYV9jaGFuICpjaGFuKQorc3RhdGljIGludCBmc2xfZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqZGNoYW4pCiB7Ci0Jc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4gPSB0b19mc2xfY2hhbihjaGFuKTsKKwlzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4gPSB0b19mc2xfY2hhbihkY2hhbik7CiAKIAkvKiBIYXMgdGhpcyBjaGFubmVsIGFscmVhZHkgYmVlbiBhbGxvY2F0ZWQ/ICovCi0JaWYgKGZzbF9jaGFuLT5kZXNjX3Bvb2wpCisJaWYgKGNoYW4tPmRlc2NfcG9vbCkKIAkJcmV0dXJuIDE7CiAKLQkvKiBXZSBuZWVkIHRoZSBkZXNjcmlwdG9yIHRvIGJlIGFsaWduZWQgdG8gMzJieXRlcworCS8qCisJICogV2UgbmVlZCB0aGUgZGVzY3JpcHRvciB0byBiZSBhbGlnbmVkIHRvIDMyYnl0ZXMKIAkgKiBmb3IgbWVldGluZyBGU0wgRE1BIHNwZWNpZmljYXRpb24gcmVxdWlyZW1lbnQuCiAJICovCi0JZnNsX2NoYW4tPmRlc2NfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZSgiZnNsX2RtYV9lbmdpbmVfZGVzY19wb29sIiwKLQkJCWZzbF9jaGFuLT5kZXYsIHNpemVvZihzdHJ1Y3QgZnNsX2Rlc2Nfc3cpLAotCQkJMzIsIDApOwotCWlmICghZnNsX2NoYW4tPmRlc2NfcG9vbCkgewotCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsICJObyBtZW1vcnkgZm9yIGNoYW5uZWwgJWQgIgotCQkJImRlc2NyaXB0b3IgZG1hIHBvb2wuXG4iLCBmc2xfY2hhbi0+aWQpOwotCQlyZXR1cm4gMDsKKwljaGFuLT5kZXNjX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUoImZzbF9kbWFfZW5naW5lX2Rlc2NfcG9vbCIsCisJCQkJCSAgY2hhbi0+ZGV2LAorCQkJCQkgIHNpemVvZihzdHJ1Y3QgZnNsX2Rlc2Nfc3cpLAorCQkJCQkgIF9fYWxpZ25vZl9fKHN0cnVjdCBmc2xfZGVzY19zdyksIDApOworCWlmICghY2hhbi0+ZGVzY19wb29sKSB7CisJCWRldl9lcnIoY2hhbi0+ZGV2LCAidW5hYmxlIHRvIGFsbG9jYXRlIGNoYW5uZWwgJWQgIgorCQkJCSAgICJkZXNjcmlwdG9yIHBvb2xcbiIsIGNoYW4tPmlkKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJLyogdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGRlc2NyaXB0b3IgZnJlZSB0byBiZSBhbGxvY2F0ZWQgKi8KIAlyZXR1cm4gMTsKIH0KIAogLyoqCi0gKiBmc2xfZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXMgLSBGcmVlIGFsbCByZXNvdXJjZXMgb2YgdGhlIGNoYW5uZWwuCi0gKiBAZnNsX2NoYW4gOiBGcmVlc2NhbGUgRE1BIGNoYW5uZWwKKyAqIGZzbGRtYV9mcmVlX2Rlc2NfbGlzdCAtIEZyZWUgYWxsIGRlc2NyaXB0b3JzIGluIGEgcXVldWUKKyAqIEBjaGFuOiBGcmVlc2NhZSBETUEgY2hhbm5lbAorICogQGxpc3Q6IHRoZSBsaXN0IHRvIGZyZWUKKyAqCisgKiBMT0NLSU5HOiBtdXN0IGhvbGQgY2hhbi0+ZGVzY19sb2NrCiAgKi8KLXN0YXRpYyB2b2lkIGZzbF9kbWFfZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCitzdGF0aWMgdm9pZCBmc2xkbWFfZnJlZV9kZXNjX2xpc3Qoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuLAorCQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCkKIHsKLQlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9jaGFuKGNoYW4pOwogCXN0cnVjdCBmc2xfZGVzY19zdyAqZGVzYywgKl9kZXNjOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlc2MsIF9kZXNjLCBsaXN0LCBub2RlKSB7CisJCWxpc3RfZGVsKCZkZXNjLT5ub2RlKTsKKwkJZG1hX3Bvb2xfZnJlZShjaGFuLT5kZXNjX3Bvb2wsIGRlc2MsIGRlc2MtPmFzeW5jX3R4LnBoeXMpOworCX0KK30KKworc3RhdGljIHZvaWQgZnNsZG1hX2ZyZWVfZGVzY19saXN0X3JldmVyc2Uoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuLAorCQkJCQkgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCit7CisJc3RydWN0IGZzbF9kZXNjX3N3ICpkZXNjLCAqX2Rlc2M7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShkZXNjLCBfZGVzYywgbGlzdCwgbm9kZSkgeworCQlsaXN0X2RlbCgmZGVzYy0+bm9kZSk7CisJCWRtYV9wb29sX2ZyZWUoY2hhbi0+ZGVzY19wb29sLCBkZXNjLCBkZXNjLT5hc3luY190eC5waHlzKTsKKwl9Cit9CisKKy8qKgorICogZnNsX2RtYV9mcmVlX2NoYW5fcmVzb3VyY2VzIC0gRnJlZSBhbGwgcmVzb3VyY2VzIG9mIHRoZSBjaGFubmVsLgorICogQGNoYW4gOiBGcmVlc2NhbGUgRE1BIGNoYW5uZWwKKyAqLworc3RhdGljIHZvaWQgZnNsX2RtYV9mcmVlX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqZGNoYW4pCit7CisJc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuID0gdG9fZnNsX2NoYW4oZGNoYW4pOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsICJGcmVlIGFsbCBjaGFubmVsIHJlc291cmNlcy5cbiIpOwotCXNwaW5fbG9ja19pcnFzYXZlKCZmc2xfY2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlc2MsIF9kZXNjLCAmZnNsX2NoYW4tPmxkX3F1ZXVlLCBub2RlKSB7Ci0jaWZkZWYgRlNMX0RNQV9MRF9ERUJVRwotCQlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsCi0JCQkJIkxEICVwIHdpbGwgYmUgcmVsZWFzZWQuXG4iLCBkZXNjKTsKLSNlbmRpZgotCQlsaXN0X2RlbCgmZGVzYy0+bm9kZSk7Ci0JCS8qIGZyZWUgbGluayBkZXNjcmlwdG9yICovCi0JCWRtYV9wb29sX2ZyZWUoZnNsX2NoYW4tPmRlc2NfcG9vbCwgZGVzYywgZGVzYy0+YXN5bmNfdHgucGh5cyk7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKLQlkbWFfcG9vbF9kZXN0cm95KGZzbF9jaGFuLT5kZXNjX3Bvb2wpOworCWRldl9kYmcoY2hhbi0+ZGV2LCAiRnJlZSBhbGwgY2hhbm5lbCByZXNvdXJjZXMuXG4iKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7CisJZnNsZG1hX2ZyZWVfZGVzY19saXN0KGNoYW4sICZjaGFuLT5sZF9wZW5kaW5nKTsKKwlmc2xkbWFfZnJlZV9kZXNjX2xpc3QoY2hhbiwgJmNoYW4tPmxkX3J1bm5pbmcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOwogCi0JZnNsX2NoYW4tPmRlc2NfcG9vbCA9IE5VTEw7CisJZG1hX3Bvb2xfZGVzdHJveShjaGFuLT5kZXNjX3Bvb2wpOworCWNoYW4tPmRlc2NfcG9vbCA9IE5VTEw7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKgotZnNsX2RtYV9wcmVwX2ludGVycnVwdChzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCitmc2xfZG1hX3ByZXBfaW50ZXJydXB0KHN0cnVjdCBkbWFfY2hhbiAqZGNoYW4sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0Jc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW47CisJc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuOwogCXN0cnVjdCBmc2xfZGVzY19zdyAqbmV3OwogCi0JaWYgKCFjaGFuKQorCWlmICghZGNoYW4pCiAJCXJldHVybiBOVUxMOwogCi0JZnNsX2NoYW4gPSB0b19mc2xfY2hhbihjaGFuKTsKKwljaGFuID0gdG9fZnNsX2NoYW4oZGNoYW4pOwogCi0JbmV3ID0gZnNsX2RtYV9hbGxvY19kZXNjcmlwdG9yKGZzbF9jaGFuKTsKKwluZXcgPSBmc2xfZG1hX2FsbG9jX2Rlc2NyaXB0b3IoY2hhbik7CiAJaWYgKCFuZXcpIHsKLQkJZGV2X2Vycihmc2xfY2hhbi0+ZGV2LCAiTm8gZnJlZSBtZW1vcnkgZm9yIGxpbmsgZGVzY3JpcHRvclxuIik7CisJCWRldl9lcnIoY2hhbi0+ZGV2LCAiTm8gZnJlZSBtZW1vcnkgZm9yIGxpbmsgZGVzY3JpcHRvclxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtNDczLDUxICs1MDksNTAgQEAKIAlsaXN0X2FkZF90YWlsKCZuZXctPm5vZGUsICZuZXctPnR4X2xpc3QpOwogCiAJLyogU2V0IEVuZC1vZi1saW5rIHRvIHRoZSBsYXN0IGxpbmsgZGVzY3JpcHRvciBvZiBuZXcgbGlzdCovCi0Jc2V0X2xkX2VvbChmc2xfY2hhbiwgbmV3KTsKKwlzZXRfbGRfZW9sKGNoYW4sIG5ldyk7CiAKIAlyZXR1cm4gJm5ldy0+YXN5bmNfdHg7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmZzbF9kbWFfcHJlcF9tZW1jcHkoCi0Jc3RydWN0IGRtYV9jaGFuICpjaGFuLCBkbWFfYWRkcl90IGRtYV9kZXN0LCBkbWFfYWRkcl90IGRtYV9zcmMsCisJc3RydWN0IGRtYV9jaGFuICpkY2hhbiwgZG1hX2FkZHJfdCBkbWFfZHN0LCBkbWFfYWRkcl90IGRtYV9zcmMsCiAJc2l6ZV90IGxlbiwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbjsKKwlzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW47CiAJc3RydWN0IGZzbF9kZXNjX3N3ICpmaXJzdCA9IE5VTEwsICpwcmV2ID0gTlVMTCwgKm5ldzsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwogCXNpemVfdCBjb3B5OwogCi0JaWYgKCFjaGFuKQorCWlmICghZGNoYW4pCiAJCXJldHVybiBOVUxMOwogCiAJaWYgKCFsZW4pCiAJCXJldHVybiBOVUxMOwogCi0JZnNsX2NoYW4gPSB0b19mc2xfY2hhbihjaGFuKTsKKwljaGFuID0gdG9fZnNsX2NoYW4oZGNoYW4pOwogCiAJZG8gewogCiAJCS8qIEFsbG9jYXRlIHRoZSBsaW5rIGRlc2NyaXB0b3IgZnJvbSBETUEgcG9vbCAqLwotCQluZXcgPSBmc2xfZG1hX2FsbG9jX2Rlc2NyaXB0b3IoZnNsX2NoYW4pOworCQluZXcgPSBmc2xfZG1hX2FsbG9jX2Rlc2NyaXB0b3IoY2hhbik7CiAJCWlmICghbmV3KSB7Ci0JCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsCisJCQlkZXZfZXJyKGNoYW4tPmRldiwKIAkJCQkJIk5vIGZyZWUgbWVtb3J5IGZvciBsaW5rIGRlc2NyaXB0b3JcbiIpOwogCQkJZ290byBmYWlsOwogCQl9CiAjaWZkZWYgRlNMX0RNQV9MRF9ERUJVRwotCQlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsICJuZXcgbGluayBkZXNjIGFsbG9jICVwXG4iLCBuZXcpOworCQlkZXZfZGJnKGNoYW4tPmRldiwgIm5ldyBsaW5rIGRlc2MgYWxsb2MgJXBcbiIsIG5ldyk7CiAjZW5kaWYKIAogCQljb3B5ID0gbWluKGxlbiwgKHNpemVfdClGU0xfRE1BX0JDUl9NQVhfQ05UKTsKIAotCQlzZXRfZGVzY19jbnQoZnNsX2NoYW4sICZuZXctPmh3LCBjb3B5KTsKLQkJc2V0X2Rlc2Nfc3JjKGZzbF9jaGFuLCAmbmV3LT5odywgZG1hX3NyYyk7Ci0JCXNldF9kZXNjX2Rlc3QoZnNsX2NoYW4sICZuZXctPmh3LCBkbWFfZGVzdCk7CisJCXNldF9kZXNjX2NudChjaGFuLCAmbmV3LT5odywgY29weSk7CisJCXNldF9kZXNjX3NyYyhjaGFuLCAmbmV3LT5odywgZG1hX3NyYyk7CisJCXNldF9kZXNjX2RzdChjaGFuLCAmbmV3LT5odywgZG1hX2RzdCk7CiAKIAkJaWYgKCFmaXJzdCkKIAkJCWZpcnN0ID0gbmV3OwogCQllbHNlCi0JCQlzZXRfZGVzY19uZXh0KGZzbF9jaGFuLCAmcHJldi0+aHcsIG5ldy0+YXN5bmNfdHgucGh5cyk7CisJCQlzZXRfZGVzY19uZXh0KGNoYW4sICZwcmV2LT5odywgbmV3LT5hc3luY190eC5waHlzKTsKIAogCQluZXctPmFzeW5jX3R4LmNvb2tpZSA9IDA7CiAJCWFzeW5jX3R4X2FjaygmbmV3LT5hc3luY190eCk7CkBAIC01MjUsNyArNTYwLDcgQEAKIAkJcHJldiA9IG5ldzsKIAkJbGVuIC09IGNvcHk7CiAJCWRtYV9zcmMgKz0gY29weTsKLQkJZG1hX2Rlc3QgKz0gY29weTsKKwkJZG1hX2RzdCArPSBjb3B5OwogCiAJCS8qIEluc2VydCB0aGUgbGluayBkZXNjcmlwdG9yIHRvIHRoZSBMRCByaW5nICovCiAJCWxpc3RfYWRkX3RhaWwoJm5ldy0+bm9kZSwgJmZpcnN0LT50eF9saXN0KTsKQEAgLTUzNSw3ICs1NzAsNyBAQAogCW5ldy0+YXN5bmNfdHguY29va2llID0gLUVCVVNZOwogCiAJLyogU2V0IEVuZC1vZi1saW5rIHRvIHRoZSBsYXN0IGxpbmsgZGVzY3JpcHRvciBvZiBuZXcgbGlzdCovCi0Jc2V0X2xkX2VvbChmc2xfY2hhbiwgbmV3KTsKKwlzZXRfbGRfZW9sKGNoYW4sIG5ldyk7CiAKIAlyZXR1cm4gJmZpcnN0LT5hc3luY190eDsKIApAQCAtNTQzLDEyICs1NzgsNyBAQAogCWlmICghZmlyc3QpCiAJCXJldHVybiBOVUxMOwogCi0JbGlzdCA9ICZmaXJzdC0+dHhfbGlzdDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShuZXcsIHByZXYsIGxpc3QsIG5vZGUpIHsKLQkJbGlzdF9kZWwoJm5ldy0+bm9kZSk7Ci0JCWRtYV9wb29sX2ZyZWUoZnNsX2NoYW4tPmRlc2NfcG9vbCwgbmV3LCBuZXctPmFzeW5jX3R4LnBoeXMpOwotCX0KLQorCWZzbGRtYV9mcmVlX2Rlc2NfbGlzdF9yZXZlcnNlKGNoYW4sICZmaXJzdC0+dHhfbGlzdCk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTU2NSwxMyArNTk1LDEyIEBACiAgKiBjaGFuLT5wcml2YXRlIHZhcmlhYmxlLgogICovCiBzdGF0aWMgc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpmc2xfZG1hX3ByZXBfc2xhdmVfc2coCi0Jc3RydWN0IGRtYV9jaGFuICpjaGFuLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgdW5zaWduZWQgaW50IHNnX2xlbiwKKwlzdHJ1Y3QgZG1hX2NoYW4gKmRjaGFuLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgdW5zaWduZWQgaW50IHNnX2xlbiwKIAllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24sIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7Ci0Jc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW47CisJc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuOwogCXN0cnVjdCBmc2xfZGVzY19zdyAqZmlyc3QgPSBOVUxMLCAqcHJldiA9IE5VTEwsICpuZXcgPSBOVUxMOwogCXN0cnVjdCBmc2xfZG1hX3NsYXZlICpzbGF2ZTsKLQlzdHJ1Y3QgbGlzdF9oZWFkICp0eF9saXN0OwogCXNpemVfdCBjb3B5OwogCiAJaW50IGk7CkBAIC01ODEsMTQgKzYxMCwxNCBAQAogCXN0cnVjdCBmc2xfZG1hX2h3X2FkZHIgKmh3OwogCWRtYV9hZGRyX3QgZG1hX2RzdCwgZG1hX3NyYzsKIAotCWlmICghY2hhbikKKwlpZiAoIWRjaGFuKQogCQlyZXR1cm4gTlVMTDsKIAotCWlmICghY2hhbi0+cHJpdmF0ZSkKKwlpZiAoIWRjaGFuLT5wcml2YXRlKQogCQlyZXR1cm4gTlVMTDsKIAotCWZzbF9jaGFuID0gdG9fZnNsX2NoYW4oY2hhbik7Ci0Jc2xhdmUgPSBjaGFuLT5wcml2YXRlOworCWNoYW4gPSB0b19mc2xfY2hhbihkY2hhbik7CisJc2xhdmUgPSBkY2hhbi0+cHJpdmF0ZTsKIAogCWlmIChsaXN0X2VtcHR5KCZzbGF2ZS0+YWRkcmVzc2VzKSkKIAkJcmV0dXJuIE5VTEw7CkBAIC02MzcsMTQgKzY2NiwxNCBAQAogCQkJfQogCiAJCQkvKiBBbGxvY2F0ZSB0aGUgbGluayBkZXNjcmlwdG9yIGZyb20gRE1BIHBvb2wgKi8KLQkJCW5ldyA9IGZzbF9kbWFfYWxsb2NfZGVzY3JpcHRvcihmc2xfY2hhbik7CisJCQluZXcgPSBmc2xfZG1hX2FsbG9jX2Rlc2NyaXB0b3IoY2hhbik7CiAJCQlpZiAoIW5ldykgewotCQkJCWRldl9lcnIoZnNsX2NoYW4tPmRldiwgIk5vIGZyZWUgbWVtb3J5IGZvciAiCisJCQkJZGV2X2VycihjaGFuLT5kZXYsICJObyBmcmVlIG1lbW9yeSBmb3IgIgogCQkJCQkJICAgICAgICJsaW5rIGRlc2NyaXB0b3JcbiIpOwogCQkJCWdvdG8gZmFpbDsKIAkJCX0KICNpZmRlZiBGU0xfRE1BX0xEX0RFQlVHCi0JCQlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsICJuZXcgbGluayBkZXNjIGFsbG9jICVwXG4iLCBuZXcpOworCQkJZGV2X2RiZyhjaGFuLT5kZXYsICJuZXcgbGluayBkZXNjIGFsbG9jICVwXG4iLCBuZXcpOwogI2VuZGlmCiAKIAkJCS8qCkBAIC02NzEsOSArNzAwLDkgQEAKIAkJCX0KIAogCQkJLyogRmlsbCBpbiB0aGUgZGVzY3JpcHRvciAqLwotCQkJc2V0X2Rlc2NfY250KGZzbF9jaGFuLCAmbmV3LT5odywgY29weSk7Ci0JCQlzZXRfZGVzY19zcmMoZnNsX2NoYW4sICZuZXctPmh3LCBkbWFfc3JjKTsKLQkJCXNldF9kZXNjX2Rlc3QoZnNsX2NoYW4sICZuZXctPmh3LCBkbWFfZHN0KTsKKwkJCXNldF9kZXNjX2NudChjaGFuLCAmbmV3LT5odywgY29weSk7CisJCQlzZXRfZGVzY19zcmMoY2hhbiwgJm5ldy0+aHcsIGRtYV9zcmMpOworCQkJc2V0X2Rlc2NfZHN0KGNoYW4sICZuZXctPmh3LCBkbWFfZHN0KTsKIAogCQkJLyoKIAkJCSAqIElmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBkZXNjcmlwdG9yLCBjaGFpbiB0aGUKQEAgLTY4Miw3ICs3MTEsNyBAQAogCQkJaWYgKCFmaXJzdCkgewogCQkJCWZpcnN0ID0gbmV3OwogCQkJfSBlbHNlIHsKLQkJCQlzZXRfZGVzY19uZXh0KGZzbF9jaGFuLCAmcHJldi0+aHcsCisJCQkJc2V0X2Rlc2NfbmV4dChjaGFuLCAmcHJldi0+aHcsCiAJCQkJCSAgICAgIG5ldy0+YXN5bmNfdHgucGh5cyk7CiAJCQl9CiAKQEAgLTcwOCwyMyArNzM3LDIzIEBACiAJbmV3LT5hc3luY190eC5jb29raWUgPSAtRUJVU1k7CiAKIAkvKiBTZXQgRW5kLW9mLWxpbmsgdG8gdGhlIGxhc3QgbGluayBkZXNjcmlwdG9yIG9mIG5ldyBsaXN0ICovCi0Jc2V0X2xkX2VvbChmc2xfY2hhbiwgbmV3KTsKKwlzZXRfbGRfZW9sKGNoYW4sIG5ldyk7CiAKIAkvKiBFbmFibGUgZXh0cmEgY29udHJvbGxlciBmZWF0dXJlcyAqLwotCWlmIChmc2xfY2hhbi0+c2V0X3NyY19sb29wX3NpemUpCi0JCWZzbF9jaGFuLT5zZXRfc3JjX2xvb3Bfc2l6ZShmc2xfY2hhbiwgc2xhdmUtPnNyY19sb29wX3NpemUpOworCWlmIChjaGFuLT5zZXRfc3JjX2xvb3Bfc2l6ZSkKKwkJY2hhbi0+c2V0X3NyY19sb29wX3NpemUoY2hhbiwgc2xhdmUtPnNyY19sb29wX3NpemUpOwogCi0JaWYgKGZzbF9jaGFuLT5zZXRfZGVzdF9sb29wX3NpemUpCi0JCWZzbF9jaGFuLT5zZXRfZGVzdF9sb29wX3NpemUoZnNsX2NoYW4sIHNsYXZlLT5kc3RfbG9vcF9zaXplKTsKKwlpZiAoY2hhbi0+c2V0X2RzdF9sb29wX3NpemUpCisJCWNoYW4tPnNldF9kc3RfbG9vcF9zaXplKGNoYW4sIHNsYXZlLT5kc3RfbG9vcF9zaXplKTsKIAotCWlmIChmc2xfY2hhbi0+dG9nZ2xlX2V4dF9zdGFydCkKLQkJZnNsX2NoYW4tPnRvZ2dsZV9leHRfc3RhcnQoZnNsX2NoYW4sIHNsYXZlLT5leHRlcm5hbF9zdGFydCk7CisJaWYgKGNoYW4tPnRvZ2dsZV9leHRfc3RhcnQpCisJCWNoYW4tPnRvZ2dsZV9leHRfc3RhcnQoY2hhbiwgc2xhdmUtPmV4dGVybmFsX3N0YXJ0KTsKIAotCWlmIChmc2xfY2hhbi0+dG9nZ2xlX2V4dF9wYXVzZSkKLQkJZnNsX2NoYW4tPnRvZ2dsZV9leHRfcGF1c2UoZnNsX2NoYW4sIHNsYXZlLT5leHRlcm5hbF9wYXVzZSk7CisJaWYgKGNoYW4tPnRvZ2dsZV9leHRfcGF1c2UpCisJCWNoYW4tPnRvZ2dsZV9leHRfcGF1c2UoY2hhbiwgc2xhdmUtPmV4dGVybmFsX3BhdXNlKTsKIAotCWlmIChmc2xfY2hhbi0+c2V0X3JlcXVlc3RfY291bnQpCi0JCWZzbF9jaGFuLT5zZXRfcmVxdWVzdF9jb3VudChmc2xfY2hhbiwgc2xhdmUtPnJlcXVlc3RfY291bnQpOworCWlmIChjaGFuLT5zZXRfcmVxdWVzdF9jb3VudCkKKwkJY2hhbi0+c2V0X3JlcXVlc3RfY291bnQoY2hhbiwgc2xhdmUtPnJlcXVlc3RfY291bnQpOwogCiAJcmV0dXJuICZmaXJzdC0+YXN5bmNfdHg7CiAKQEAgLTc0MSwyMTUgKzc3MCwyMTYgQEAKIAkgKgogCSAqIFdlJ3JlIHJlLXVzaW5nIHZhcmlhYmxlcyBmb3IgdGhlIGxvb3AsIG9oIHdlbGwKIAkgKi8KLQl0eF9saXN0ID0gJmZpcnN0LT50eF9saXN0OwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKG5ldywgcHJldiwgdHhfbGlzdCwgbm9kZSkgewotCQlsaXN0X2RlbF9pbml0KCZuZXctPm5vZGUpOwotCQlkbWFfcG9vbF9mcmVlKGZzbF9jaGFuLT5kZXNjX3Bvb2wsIG5ldywgbmV3LT5hc3luY190eC5waHlzKTsKLQl9Ci0KKwlmc2xkbWFfZnJlZV9kZXNjX2xpc3RfcmV2ZXJzZShjaGFuLCAmZmlyc3QtPnR4X2xpc3QpOwogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgdm9pZCBmc2xfZG1hX2RldmljZV90ZXJtaW5hdGVfYWxsKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3N0YXRpYyB2b2lkIGZzbF9kbWFfZGV2aWNlX3Rlcm1pbmF0ZV9hbGwoc3RydWN0IGRtYV9jaGFuICpkY2hhbikKIHsKLQlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbjsKLQlzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmRlc2MsICp0bXA7CisJc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoIWNoYW4pCisJaWYgKCFkY2hhbikKIAkJcmV0dXJuOwogCi0JZnNsX2NoYW4gPSB0b19mc2xfY2hhbihjaGFuKTsKKwljaGFuID0gdG9fZnNsX2NoYW4oZGNoYW4pOwogCiAJLyogSGFsdCB0aGUgRE1BIGVuZ2luZSAqLwotCWRtYV9oYWx0KGZzbF9jaGFuKTsKKwlkbWFfaGFsdChjaGFuKTsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZmc2xfY2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOwogCiAJLyogUmVtb3ZlIGFuZCBmcmVlIGFsbCBvZiB0aGUgZGVzY3JpcHRvcnMgaW4gdGhlIExEIHF1ZXVlICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlc2MsIHRtcCwgJmZzbF9jaGFuLT5sZF9xdWV1ZSwgbm9kZSkgewotCQlsaXN0X2RlbCgmZGVzYy0+bm9kZSk7Ci0JCWRtYV9wb29sX2ZyZWUoZnNsX2NoYW4tPmRlc2NfcG9vbCwgZGVzYywgZGVzYy0+YXN5bmNfdHgucGh5cyk7Ci0JfQorCWZzbGRtYV9mcmVlX2Rlc2NfbGlzdChjaGFuLCAmY2hhbi0+bGRfcGVuZGluZyk7CisJZnNsZG1hX2ZyZWVfZGVzY19saXN0KGNoYW4sICZjaGFuLT5sZF9ydW5uaW5nKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoqCiAgKiBmc2xfZG1hX3VwZGF0ZV9jb21wbGV0ZWRfY29va2llIC0gVXBkYXRlIHRoZSBjb21wbGV0ZWQgY29va2llLgotICogQGZzbF9jaGFuIDogRnJlZXNjYWxlIERNQSBjaGFubmVsCisgKiBAY2hhbiA6IEZyZWVzY2FsZSBETUEgY2hhbm5lbAorICoKKyAqIENPTlRFWFQ6IGhhcmRpcnEKICAqLwotc3RhdGljIHZvaWQgZnNsX2RtYV91cGRhdGVfY29tcGxldGVkX2Nvb2tpZShzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbikKK3N0YXRpYyB2b2lkIGZzbF9kbWFfdXBkYXRlX2NvbXBsZXRlZF9jb29raWUoc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuKQogewotCXN0cnVjdCBmc2xfZGVzY19zdyAqY3VyX2Rlc2MsICpkZXNjOwotCWRtYV9hZGRyX3QgbGRfcGh5OworCXN0cnVjdCBmc2xfZGVzY19zdyAqZGVzYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWRtYV9jb29raWVfdCBjb29raWU7CiAKLQlsZF9waHkgPSBnZXRfY2Rhcihmc2xfY2hhbikgJiBGU0xfRE1BX05MREFfTUFTSzsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmY2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7CiAKLQlpZiAobGRfcGh5KSB7Ci0JCWN1cl9kZXNjID0gTlVMTDsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXNjLCAmZnNsX2NoYW4tPmxkX3F1ZXVlLCBub2RlKQotCQkJaWYgKGRlc2MtPmFzeW5jX3R4LnBoeXMgPT0gbGRfcGh5KSB7Ci0JCQkJY3VyX2Rlc2MgPSBkZXNjOwotCQkJCWJyZWFrOwotCQkJfQotCi0JCWlmIChjdXJfZGVzYyAmJiBjdXJfZGVzYy0+YXN5bmNfdHguY29va2llKSB7Ci0JCQlpZiAoZG1hX2lzX2lkbGUoZnNsX2NoYW4pKQotCQkJCWZzbF9jaGFuLT5jb21wbGV0ZWRfY29va2llID0KLQkJCQkJY3VyX2Rlc2MtPmFzeW5jX3R4LmNvb2tpZTsKLQkJCWVsc2UKLQkJCQlmc2xfY2hhbi0+Y29tcGxldGVkX2Nvb2tpZSA9Ci0JCQkJCWN1cl9kZXNjLT5hc3luY190eC5jb29raWUgLSAxOwotCQl9CisJaWYgKGxpc3RfZW1wdHkoJmNoYW4tPmxkX3J1bm5pbmcpKSB7CisJCWRldl9kYmcoY2hhbi0+ZGV2LCAibm8gcnVubmluZyBkZXNjcmlwdG9yc1xuIik7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CisKKwkvKiBHZXQgdGhlIGxhc3QgZGVzY3JpcHRvciwgdXBkYXRlIHRoZSBjb29raWUgdG8gdGhhdCAqLworCWRlc2MgPSB0b19mc2xfZGVzYyhjaGFuLT5sZF9ydW5uaW5nLnByZXYpOworCWlmIChkbWFfaXNfaWRsZShjaGFuKSkKKwkJY29va2llID0gZGVzYy0+YXN5bmNfdHguY29va2llOworCWVsc2UgeworCQljb29raWUgPSBkZXNjLT5hc3luY190eC5jb29raWUgLSAxOworCQlpZiAodW5saWtlbHkoY29va2llIDwgRE1BX01JTl9DT09LSUUpKQorCQkJY29va2llID0gRE1BX01BWF9DT09LSUU7CisJfQorCisJY2hhbi0+Y29tcGxldGVkX2Nvb2tpZSA9IGNvb2tpZTsKKworb3V0X3VubG9jazoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKK30KKworLyoqCisgKiBmc2xkbWFfZGVzY19zdGF0dXMgLSBDaGVjayB0aGUgc3RhdHVzIG9mIGEgZGVzY3JpcHRvcgorICogQGNoYW46IEZyZWVzY2FsZSBETUEgY2hhbm5lbAorICogQGRlc2M6IERNQSBTVyBkZXNjcmlwdG9yCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSBnaXZlbiBkZXNjcmlwdG9yCisgKi8KK3N0YXRpYyBlbnVtIGRtYV9zdGF0dXMgZnNsZG1hX2Rlc2Nfc3RhdHVzKHN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbiwKKwkJCQkJICBzdHJ1Y3QgZnNsX2Rlc2Nfc3cgKmRlc2MpCit7CisJcmV0dXJuIGRtYV9hc3luY19pc19jb21wbGV0ZShkZXNjLT5hc3luY190eC5jb29raWUsCisJCQkJICAgICBjaGFuLT5jb21wbGV0ZWRfY29va2llLAorCQkJCSAgICAgY2hhbi0+Y29tbW9uLmNvb2tpZSk7CiB9CiAKIC8qKgogICogZnNsX2NoYW5fbGRfY2xlYW51cCAtIENsZWFuIHVwIGxpbmsgZGVzY3JpcHRvcnMKLSAqIEBmc2xfY2hhbiA6IEZyZWVzY2FsZSBETUEgY2hhbm5lbAorICogQGNoYW4gOiBGcmVlc2NhbGUgRE1BIGNoYW5uZWwKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNsZWFuIHVwIHRoZSBsZF9xdWV1ZSBvZiBETUEgY2hhbm5lbC4KLSAqIElmICdpbl9pbnRyJyBpcyBzZXQsIHRoZSBmdW5jdGlvbiB3aWxsIG1vdmUgdGhlIGxpbmsgZGVzY3JpcHRvciB0bwotICogdGhlIHJlY3ljbGUgbGlzdC4gT3RoZXJ3aXNlLCBmcmVlIGl0IGRpcmVjdGx5LgogICovCi1zdGF0aWMgdm9pZCBmc2xfY2hhbl9sZF9jbGVhbnVwKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuKQorc3RhdGljIHZvaWQgZnNsX2NoYW5fbGRfY2xlYW51cChzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4pCiB7CiAJc3RydWN0IGZzbF9kZXNjX3N3ICpkZXNjLCAqX2Rlc2M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZmc2xfY2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOwogCi0JZGV2X2RiZyhmc2xfY2hhbi0+ZGV2LCAiY2hhbiBjb21wbGV0ZWRfY29va2llID0gJWRcbiIsCi0JCQlmc2xfY2hhbi0+Y29tcGxldGVkX2Nvb2tpZSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlc2MsIF9kZXNjLCAmZnNsX2NoYW4tPmxkX3F1ZXVlLCBub2RlKSB7CisJZGV2X2RiZyhjaGFuLT5kZXYsICJjaGFuIGNvbXBsZXRlZF9jb29raWUgPSAlZFxuIiwgY2hhbi0+Y29tcGxldGVkX2Nvb2tpZSk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRlc2MsIF9kZXNjLCAmY2hhbi0+bGRfcnVubmluZywgbm9kZSkgewogCQlkbWFfYXN5bmNfdHhfY2FsbGJhY2sgY2FsbGJhY2s7CiAJCXZvaWQgKmNhbGxiYWNrX3BhcmFtOwogCi0JCWlmIChkbWFfYXN5bmNfaXNfY29tcGxldGUoZGVzYy0+YXN5bmNfdHguY29va2llLAotCQkJICAgIGZzbF9jaGFuLT5jb21wbGV0ZWRfY29va2llLCBmc2xfY2hhbi0+Y29tbW9uLmNvb2tpZSkKLQkJCQk9PSBETUFfSU5fUFJPR1JFU1MpCisJCWlmIChmc2xkbWFfZGVzY19zdGF0dXMoY2hhbiwgZGVzYykgPT0gRE1BX0lOX1BST0dSRVNTKQogCQkJYnJlYWs7CiAKLQkJY2FsbGJhY2sgPSBkZXNjLT5hc3luY190eC5jYWxsYmFjazsKLQkJY2FsbGJhY2tfcGFyYW0gPSBkZXNjLT5hc3luY190eC5jYWxsYmFja19wYXJhbTsKLQotCQkvKiBSZW1vdmUgZnJvbSBsZF9xdWV1ZSBsaXN0ICovCisJCS8qIFJlbW92ZSBmcm9tIHRoZSBsaXN0IG9mIHJ1bm5pbmcgdHJhbnNhY3Rpb25zICovCiAJCWxpc3RfZGVsKCZkZXNjLT5ub2RlKTsKIAotCQlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsICJsaW5rIGRlc2NyaXB0b3IgJXAgd2lsbCBiZSByZWN5Y2xlLlxuIiwKLQkJCQlkZXNjKTsKLQkJZG1hX3Bvb2xfZnJlZShmc2xfY2hhbi0+ZGVzY19wb29sLCBkZXNjLCBkZXNjLT5hc3luY190eC5waHlzKTsKLQogCQkvKiBSdW4gdGhlIGxpbmsgZGVzY3JpcHRvciBjYWxsYmFjayBmdW5jdGlvbiAqLworCQljYWxsYmFjayA9IGRlc2MtPmFzeW5jX3R4LmNhbGxiYWNrOworCQljYWxsYmFja19wYXJhbSA9IGRlc2MtPmFzeW5jX3R4LmNhbGxiYWNrX3BhcmFtOwogCQlpZiAoY2FsbGJhY2spIHsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKLQkJCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgImxpbmsgZGVzY3JpcHRvciAlcCBjYWxsYmFja1xuIiwKLQkJCQkJZGVzYyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKKwkJCWRldl9kYmcoY2hhbi0+ZGV2LCAiTEQgJXAgY2FsbGJhY2tcbiIsIGRlc2MpOwogCQkJY2FsbGJhY2soY2FsbGJhY2tfcGFyYW0pOwotCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKIAkJfQorCisJCS8qIFJ1biBhbnkgZGVwZW5kZW5jaWVzLCB0aGVuIGZyZWUgdGhlIGRlc2NyaXB0b3IgKi8KKwkJZG1hX3J1bl9kZXBlbmRlbmNpZXMoJmRlc2MtPmFzeW5jX3R4KTsKKwkJZG1hX3Bvb2xfZnJlZShjaGFuLT5kZXNjX3Bvb2wsIGRlc2MsIGRlc2MtPmFzeW5jX3R4LnBoeXMpOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoqCi0gKiBmc2xfY2hhbl94ZmVyX2xkX3F1ZXVlIC0gVHJhbnNmZXIgbGluayBkZXNjcmlwdG9ycyBpbiBjaGFubmVsIGxkX3F1ZXVlLgotICogQGZzbF9jaGFuIDogRnJlZXNjYWxlIERNQSBjaGFubmVsCisgKiBmc2xfY2hhbl94ZmVyX2xkX3F1ZXVlIC0gdHJhbnNmZXIgYW55IHBlbmRpbmcgdHJhbnNhY3Rpb25zCisgKiBAY2hhbiA6IEZyZWVzY2FsZSBETUEgY2hhbm5lbAorICoKKyAqIFRoaXMgd2lsbCBtYWtlIHN1cmUgdGhhdCBhbnkgcGVuZGluZyB0cmFuc2FjdGlvbnMgd2lsbCBiZSBydW4uCisgKiBJZiB0aGUgRE1BIGNvbnRyb2xsZXIgaXMgaWRsZSwgaXQgd2lsbCBiZSBzdGFydGVkLiBPdGhlcndpc2UsCisgKiB0aGUgRE1BIGNvbnRyb2xsZXIncyBpbnRlcnJ1cHQgaGFuZGxlciB3aWxsIHN0YXJ0IGFueSBwZW5kaW5nCisgKiB0cmFuc2FjdGlvbnMgd2hlbiBpdCBiZWNvbWVzIGlkbGUuCiAgKi8KLXN0YXRpYyB2b2lkIGZzbF9jaGFuX3hmZXJfbGRfcXVldWUoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4pCitzdGF0aWMgdm9pZCBmc2xfY2hhbl94ZmVyX2xkX3F1ZXVlKHN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbikKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsZF9ub2RlOwotCWRtYV9hZGRyX3QgbmV4dF9kZXN0X2FkZHI7CisJc3RydWN0IGZzbF9kZXNjX3N3ICpkZXNjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZnNsX2NoYW4tPmRlc2NfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZjaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKIAotCWlmICghZG1hX2lzX2lkbGUoZnNsX2NoYW4pKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KLQlkbWFfaGFsdChmc2xfY2hhbik7Ci0KLQkvKiBJZiB0aGVyZSBhcmUgc29tZSBsaW5rIGRlc2NyaXB0b3JzCi0JICogbm90IHRyYW5zZmVyZWQgaW4gcXVldWUuIFdlIG5lZWQgdG8gc3RhcnQgaXQuCisJLyoKKwkgKiBJZiB0aGUgbGlzdCBvZiBwZW5kaW5nIGRlc2NyaXB0b3JzIGlzIGVtcHR5LCB0aGVuIHdlCisJICogZG9uJ3QgbmVlZCB0byBkbyBhbnkgd29yayBhdCBhbGwKIAkgKi8KLQotCS8qIEZpbmQgdGhlIGZpcnN0IHVuLXRyYW5zZmVyIGRlc2NpcHRvciAqLwotCWZvciAobGRfbm9kZSA9IGZzbF9jaGFuLT5sZF9xdWV1ZS5uZXh0OwotCQkobGRfbm9kZSAhPSAmZnNsX2NoYW4tPmxkX3F1ZXVlKQotCQkJJiYgKGRtYV9hc3luY19pc19jb21wbGV0ZSgKLQkJCQl0b19mc2xfZGVzYyhsZF9ub2RlKS0+YXN5bmNfdHguY29va2llLAotCQkJCWZzbF9jaGFuLT5jb21wbGV0ZWRfY29va2llLAotCQkJCWZzbF9jaGFuLT5jb21tb24uY29va2llKSA9PSBETUFfU1VDQ0VTUyk7Ci0JCWxkX25vZGUgPSBsZF9ub2RlLT5uZXh0KTsKLQotCWlmIChsZF9ub2RlICE9ICZmc2xfY2hhbi0+bGRfcXVldWUpIHsKLQkJLyogR2V0IHRoZSBsZCBzdGFydCBhZGRyZXNzIGZyb20gbGRfcXVldWUgKi8KLQkJbmV4dF9kZXN0X2FkZHIgPSB0b19mc2xfZGVzYyhsZF9ub2RlKS0+YXN5bmNfdHgucGh5czsKLQkJZGV2X2RiZyhmc2xfY2hhbi0+ZGV2LCAieGZlciBMRHMgc3RhcmluZyBmcm9tIDB4JWxseFxuIiwKLQkJCQkodW5zaWduZWQgbG9uZyBsb25nKW5leHRfZGVzdF9hZGRyKTsKLQkJc2V0X2NkYXIoZnNsX2NoYW4sIG5leHRfZGVzdF9hZGRyKTsKLQkJZG1hX3N0YXJ0KGZzbF9jaGFuKTsKLQl9IGVsc2UgewotCQlzZXRfY2Rhcihmc2xfY2hhbiwgMCk7Ci0JCXNldF9uZGFyKGZzbF9jaGFuLCAwKTsKKwlpZiAobGlzdF9lbXB0eSgmY2hhbi0+bGRfcGVuZGluZykpIHsKKwkJZGV2X2RiZyhjaGFuLT5kZXYsICJubyBwZW5kaW5nIExEc1xuIik7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKKwkvKgorCSAqIFRoZSBETUEgY29udHJvbGxlciBpcyBub3QgaWRsZSwgd2hpY2ggbWVhbnMgdGhlIGludGVycnVwdAorCSAqIGhhbmRsZXIgd2lsbCBzdGFydCBhbnkgcXVldWVkIHRyYW5zYWN0aW9ucyB3aGVuIGl0IHJ1bnMKKwkgKiBhdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uCisJICovCisJaWYgKCFkbWFfaXNfaWRsZShjaGFuKSkgeworCQlkZXZfZGJnKGNoYW4tPmRldiwgIkRNQSBjb250cm9sbGVyIHN0aWxsIGJ1c3lcbiIpOworCQlnb3RvIG91dF91bmxvY2s7CisJfQorCisJLyoKKwkgKiBUT0RPOgorCSAqIG1ha2Ugc3VyZSB0aGUgZG1hX2hhbHQoKSBmdW5jdGlvbiByZWFsbHkgdW4td2VkZ2VzIHRoZQorCSAqIGNvbnRyb2xsZXIgYXMgbXVjaCBhcyBwb3NzaWJsZQorCSAqLworCWRtYV9oYWx0KGNoYW4pOworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgc29tZSBsaW5rIGRlc2NyaXB0b3JzIHdoaWNoIGhhdmUgbm90IGJlZW4KKwkgKiB0cmFuc2ZlcnJlZCwgd2UgbmVlZCB0byBzdGFydCB0aGUgY29udHJvbGxlcgorCSAqLworCisJLyoKKwkgKiBNb3ZlIGFsbCBlbGVtZW50cyBmcm9tIHRoZSBxdWV1ZSBvZiBwZW5kaW5nIHRyYW5zYWN0aW9ucworCSAqIG9udG8gdGhlIGxpc3Qgb2YgcnVubmluZyB0cmFuc2FjdGlvbnMKKwkgKi8KKwlkZXNjID0gbGlzdF9maXJzdF9lbnRyeSgmY2hhbi0+bGRfcGVuZGluZywgc3RydWN0IGZzbF9kZXNjX3N3LCBub2RlKTsKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoJmNoYW4tPmxkX3BlbmRpbmcsICZjaGFuLT5sZF9ydW5uaW5nKTsKKworCS8qCisJICogUHJvZ3JhbSB0aGUgZGVzY3JpcHRvcidzIGFkZHJlc3MgaW50byB0aGUgRE1BIGNvbnRyb2xsZXIsCisJICogdGhlbiBzdGFydCB0aGUgRE1BIHRyYW5zYWN0aW9uCisJICovCisJc2V0X2NkYXIoY2hhbiwgZGVzYy0+YXN5bmNfdHgucGh5cyk7CisJZG1hX3N0YXJ0KGNoYW4pOworCiBvdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZzbF9jaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKIH0KIAogLyoqCiAgKiBmc2xfZG1hX21lbWNweV9pc3N1ZV9wZW5kaW5nIC0gSXNzdWUgdGhlIERNQSBzdGFydCBjb21tYW5kCi0gKiBAZnNsX2NoYW4gOiBGcmVlc2NhbGUgRE1BIGNoYW5uZWwKKyAqIEBjaGFuIDogRnJlZXNjYWxlIERNQSBjaGFubmVsCiAgKi8KLXN0YXRpYyB2b2lkIGZzbF9kbWFfbWVtY3B5X2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9jaGFuICpjaGFuKQorc3RhdGljIHZvaWQgZnNsX2RtYV9tZW1jcHlfaXNzdWVfcGVuZGluZyhzdHJ1Y3QgZG1hX2NoYW4gKmRjaGFuKQogewotCXN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuID0gdG9fZnNsX2NoYW4oY2hhbik7Ci0KLSNpZmRlZiBGU0xfRE1BX0xEX0RFQlVHCi0Jc3RydWN0IGZzbF9kZXNjX3N3ICpsZDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZzbF9jaGFuLT5kZXNjX2xvY2ssIGZsYWdzKTsKLQlpZiAobGlzdF9lbXB0eSgmZnNsX2NoYW4tPmxkX3F1ZXVlKSkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKLQl9Ci0KLQlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsICItLW1lbWNweSBpc3N1ZS0tXG4iKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxkLCAmZnNsX2NoYW4tPmxkX3F1ZXVlLCBub2RlKSB7Ci0JCWludCBpOwotCQlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsICJDaCAlZCwgTEQgJTA4eFxuIiwKLQkJCQlmc2xfY2hhbi0+aWQsIGxkLT5hc3luY190eC5waHlzKTsKLQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgIkxEIG9mZnNldCAlZDogJTA4eFxuIiwKLQkJCQkJaSwgKigoKHUzMiAqKSZsZC0+aHcpICsgaSkpOwotCX0KLQlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsICItLS0tLS0tLS0tLS0tLS0tXG4iKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmc2xfY2hhbi0+ZGVzY19sb2NrLCBmbGFncyk7Ci0jZW5kaWYKLQotCWZzbF9jaGFuX3hmZXJfbGRfcXVldWUoZnNsX2NoYW4pOworCXN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbiA9IHRvX2ZzbF9jaGFuKGRjaGFuKTsKKwlmc2xfY2hhbl94ZmVyX2xkX3F1ZXVlKGNoYW4pOwogfQogCiAvKioKICAqIGZzbF9kbWFfaXNfY29tcGxldGUgLSBEZXRlcm1pbmUgdGhlIERNQSBzdGF0dXMKLSAqIEBmc2xfY2hhbiA6IEZyZWVzY2FsZSBETUEgY2hhbm5lbAorICogQGNoYW4gOiBGcmVlc2NhbGUgRE1BIGNoYW5uZWwKICAqLwotc3RhdGljIGVudW0gZG1hX3N0YXR1cyBmc2xfZG1hX2lzX2NvbXBsZXRlKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwKK3N0YXRpYyBlbnVtIGRtYV9zdGF0dXMgZnNsX2RtYV9pc19jb21wbGV0ZShzdHJ1Y3QgZG1hX2NoYW4gKmRjaGFuLAogCQkJCQlkbWFfY29va2llX3QgY29va2llLAogCQkJCQlkbWFfY29va2llX3QgKmRvbmUsCiAJCQkJCWRtYV9jb29raWVfdCAqdXNlZCkKIHsKLQlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiA9IHRvX2ZzbF9jaGFuKGNoYW4pOworCXN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbiA9IHRvX2ZzbF9jaGFuKGRjaGFuKTsKIAlkbWFfY29va2llX3QgbGFzdF91c2VkOwogCWRtYV9jb29raWVfdCBsYXN0X2NvbXBsZXRlOwogCi0JZnNsX2NoYW5fbGRfY2xlYW51cChmc2xfY2hhbik7CisJZnNsX2NoYW5fbGRfY2xlYW51cChjaGFuKTsKIAotCWxhc3RfdXNlZCA9IGNoYW4tPmNvb2tpZTsKLQlsYXN0X2NvbXBsZXRlID0gZnNsX2NoYW4tPmNvbXBsZXRlZF9jb29raWU7CisJbGFzdF91c2VkID0gZGNoYW4tPmNvb2tpZTsKKwlsYXN0X2NvbXBsZXRlID0gY2hhbi0+Y29tcGxldGVkX2Nvb2tpZTsKIAogCWlmIChkb25lKQogCQkqZG9uZSA9IGxhc3RfY29tcGxldGU7CkBAIC05NjAsMzIgKzk5MCwzNyBAQAogCXJldHVybiBkbWFfYXN5bmNfaXNfY29tcGxldGUoY29va2llLCBsYXN0X2NvbXBsZXRlLCBsYXN0X3VzZWQpOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgZnNsX2RtYV9jaGFuX2RvX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKQorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEludGVycnVwdCBIYW5kbGluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCitzdGF0aWMgaXJxcmV0dXJuX3QgZnNsZG1hX2NoYW5faXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4gPSAoc3RydWN0IGZzbF9kbWFfY2hhbiAqKWRhdGE7Ci0JdTMyIHN0YXQ7CisJc3RydWN0IGZzbGRtYV9jaGFuICpjaGFuID0gZGF0YTsKIAlpbnQgdXBkYXRlX2Nvb2tpZSA9IDA7CiAJaW50IHhmZXJfbGRfcSA9IDA7CisJdTMyIHN0YXQ7CiAKLQlzdGF0ID0gZ2V0X3NyKGZzbF9jaGFuKTsKLQlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsICJldmVudDogY2hhbm5lbCAlZCwgc3RhdCA9IDB4JXhcbiIsCi0JCQkJCQlmc2xfY2hhbi0+aWQsIHN0YXQpOwotCXNldF9zcihmc2xfY2hhbiwgc3RhdCk7CQkvKiBDbGVhciB0aGUgZXZlbnQgcmVnaXN0ZXIgKi8KKwkvKiBzYXZlIGFuZCBjbGVhciB0aGUgc3RhdHVzIHJlZ2lzdGVyICovCisJc3RhdCA9IGdldF9zcihjaGFuKTsKKwlzZXRfc3IoY2hhbiwgc3RhdCk7CisJZGV2X2RiZyhjaGFuLT5kZXYsICJpcnE6IGNoYW5uZWwgJWQsIHN0YXQgPSAweCV4XG4iLCBjaGFuLT5pZCwgc3RhdCk7CiAKIAlzdGF0ICY9IH4oRlNMX0RNQV9TUl9DQiB8IEZTTF9ETUFfU1JfQ0gpOwogCWlmICghc3RhdCkKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJaWYgKHN0YXQgJiBGU0xfRE1BX1NSX1RFKQotCQlkZXZfZXJyKGZzbF9jaGFuLT5kZXYsICJUcmFuc2ZlciBFcnJvciFcbiIpOworCQlkZXZfZXJyKGNoYW4tPmRldiwgIlRyYW5zZmVyIEVycm9yIVxuIik7CiAKLQkvKiBQcm9ncmFtbWluZyBFcnJvcgorCS8qCisJICogUHJvZ3JhbW1pbmcgRXJyb3IKIAkgKiBUaGUgRE1BX0lOVEVSUlVQVCBhc3luY190eCBpcyBhIE5VTEwgdHJhbnNmZXIsIHdoaWNoIHdpbGwKIAkgKiB0cmlnZXIgYSBQRSBpbnRlcnJ1cHQuCiAJICovCiAJaWYgKHN0YXQgJiBGU0xfRE1BX1NSX1BFKSB7Ci0JCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgImV2ZW50OiBQcm9ncmFtbWluZyBFcnJvciBJTlRcbiIpOwotCQlpZiAoZ2V0X2Jjcihmc2xfY2hhbikgPT0gMCkgeworCQlkZXZfZGJnKGNoYW4tPmRldiwgImlycTogUHJvZ3JhbW1pbmcgRXJyb3IgSU5UXG4iKTsKKwkJaWYgKGdldF9iY3IoY2hhbikgPT0gMCkgewogCQkJLyogQkNSIHJlZ2lzdGVyIGlzIDAsIHRoaXMgaXMgYSBETUFfSU5URVJSVVBUIGFzeW5jX3R4LgogCQkJICogTm93LCB1cGRhdGUgdGhlIGNvbXBsZXRlZCBjb29raWUsIGFuZCBjb250aW51ZSB0aGUKIAkJCSAqIG5leHQgdW5jb21wbGV0ZWQgdHJhbnNmZXIuCkBAIC05OTYsMjA4ICsxMDMxLDI5NiBAQAogCQlzdGF0ICY9IH5GU0xfRE1BX1NSX1BFOwogCX0KIAotCS8qIElmIHRoZSBsaW5rIGRlc2NyaXB0b3Igc2VnbWVudCB0cmFuc2ZlciBmaW5pc2hlcywKKwkvKgorCSAqIElmIHRoZSBsaW5rIGRlc2NyaXB0b3Igc2VnbWVudCB0cmFuc2ZlciBmaW5pc2hlcywKIAkgKiB3ZSB3aWxsIHJlY3ljbGUgdGhlIHVzZWQgZGVzY3JpcHRvci4KIAkgKi8KIAlpZiAoc3RhdCAmIEZTTF9ETUFfU1JfRU9TSSkgewotCQlkZXZfZGJnKGZzbF9jaGFuLT5kZXYsICJldmVudDogRW5kLW9mLXNlZ21lbnRzIElOVFxuIik7Ci0JCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgImV2ZW50OiBjbG5kYXIgMHglbGx4LCBubG5kYXIgMHglbGx4XG4iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylnZXRfY2Rhcihmc2xfY2hhbiksCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKWdldF9uZGFyKGZzbF9jaGFuKSk7CisJCWRldl9kYmcoY2hhbi0+ZGV2LCAiaXJxOiBFbmQtb2Ytc2VnbWVudHMgSU5UXG4iKTsKKwkJZGV2X2RiZyhjaGFuLT5kZXYsICJpcnE6IGNsbmRhciAweCVsbHgsIG5sbmRhciAweCVsbHhcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKWdldF9jZGFyKGNoYW4pLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylnZXRfbmRhcihjaGFuKSk7CiAJCXN0YXQgJj0gfkZTTF9ETUFfU1JfRU9TSTsKIAkJdXBkYXRlX2Nvb2tpZSA9IDE7CiAJfQogCi0JLyogRm9yIE1QQzgzNDksIEVPQ0RJIGV2ZW50IG5lZWQgdG8gdXBkYXRlIGNvb2tpZQorCS8qCisJICogRm9yIE1QQzgzNDksIEVPQ0RJIGV2ZW50IG5lZWQgdG8gdXBkYXRlIGNvb2tpZQogCSAqIGFuZCBzdGFydCB0aGUgbmV4dCB0cmFuc2ZlciBpZiBpdCBleGlzdC4KIAkgKi8KIAlpZiAoc3RhdCAmIEZTTF9ETUFfU1JfRU9DREkpIHsKLQkJZGV2X2RiZyhmc2xfY2hhbi0+ZGV2LCAiZXZlbnQ6IEVuZC1vZi1DaGFpbiBsaW5rIElOVFxuIik7CisJCWRldl9kYmcoY2hhbi0+ZGV2LCAiaXJxOiBFbmQtb2YtQ2hhaW4gbGluayBJTlRcbiIpOwogCQlzdGF0ICY9IH5GU0xfRE1BX1NSX0VPQ0RJOwogCQl1cGRhdGVfY29va2llID0gMTsKIAkJeGZlcl9sZF9xID0gMTsKIAl9CiAKLQkvKiBJZiBpdCBjdXJyZW50IHRyYW5zZmVyIGlzIHRoZSBlbmQtb2YtdHJhbnNmZXIsCisJLyoKKwkgKiBJZiBpdCBjdXJyZW50IHRyYW5zZmVyIGlzIHRoZSBlbmQtb2YtdHJhbnNmZXIsCiAJICogd2Ugc2hvdWxkIGNsZWFyIHRoZSBDaGFubmVsIFN0YXJ0IGJpdCBmb3IKIAkgKiBwcmVwYXJlIG5leHQgdHJhbnNmZXIuCiAJICovCiAJaWYgKHN0YXQgJiBGU0xfRE1BX1NSX0VPTE5JKSB7Ci0JCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgImV2ZW50OiBFbmQtb2YtbGluayBJTlRcbiIpOworCQlkZXZfZGJnKGNoYW4tPmRldiwgImlycTogRW5kLW9mLWxpbmsgSU5UXG4iKTsKIAkJc3RhdCAmPSB+RlNMX0RNQV9TUl9FT0xOSTsKIAkJeGZlcl9sZF9xID0gMTsKIAl9CiAKIAlpZiAodXBkYXRlX2Nvb2tpZSkKLQkJZnNsX2RtYV91cGRhdGVfY29tcGxldGVkX2Nvb2tpZShmc2xfY2hhbik7CisJCWZzbF9kbWFfdXBkYXRlX2NvbXBsZXRlZF9jb29raWUoY2hhbik7CiAJaWYgKHhmZXJfbGRfcSkKLQkJZnNsX2NoYW5feGZlcl9sZF9xdWV1ZShmc2xfY2hhbik7CisJCWZzbF9jaGFuX3hmZXJfbGRfcXVldWUoY2hhbik7CiAJaWYgKHN0YXQpCi0JCWRldl9kYmcoZnNsX2NoYW4tPmRldiwgImV2ZW50OiB1bmhhbmRsZWQgc3IgMHglMDJ4XG4iLAotCQkJCQlzdGF0KTsKKwkJZGV2X2RiZyhjaGFuLT5kZXYsICJpcnE6IHVuaGFuZGxlZCBzciAweCUwMnhcbiIsIHN0YXQpOwogCi0JZGV2X2RiZyhmc2xfY2hhbi0+ZGV2LCAiZXZlbnQ6IEV4aXRcbiIpOwotCXRhc2tsZXRfc2NoZWR1bGUoJmZzbF9jaGFuLT50YXNrbGV0KTsKKwlkZXZfZGJnKGNoYW4tPmRldiwgImlycTogRXhpdFxuIik7CisJdGFza2xldF9zY2hlZHVsZSgmY2hhbi0+dGFza2xldCk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgZnNsX2RtYV9kb19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UgKmZkZXYgPSAoc3RydWN0IGZzbF9kbWFfZGV2aWNlICopZGF0YTsKLQl1MzIgZ3NyOwotCWludCBjaF9ucjsKLQotCWdzciA9IChmZGV2LT5mZWF0dXJlICYgRlNMX0RNQV9CSUdfRU5ESUFOKSA/IGluX2JlMzIoZmRldi0+cmVnX2Jhc2UpCi0JCQk6IGluX2xlMzIoZmRldi0+cmVnX2Jhc2UpOwotCWNoX25yID0gKDMyIC0gZmZzKGdzcikpIC8gODsKLQotCXJldHVybiBmZGV2LT5jaGFuW2NoX25yXSA/IGZzbF9kbWFfY2hhbl9kb19pbnRlcnJ1cHQoaXJxLAotCQkJZmRldi0+Y2hhbltjaF9ucl0pIDogSVJRX05PTkU7Ci19Ci0KIHN0YXRpYyB2b2lkIGRtYV9kb190YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiA9IChzdHJ1Y3QgZnNsX2RtYV9jaGFuICopZGF0YTsKLQlmc2xfY2hhbl9sZF9jbGVhbnVwKGZzbF9jaGFuKTsKKwlzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4gPSAoc3RydWN0IGZzbGRtYV9jaGFuICopZGF0YTsKKwlmc2xfY2hhbl9sZF9jbGVhbnVwKGNoYW4pOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBmc2xfZG1hX2NoYW5fcHJvYmUoc3RydWN0IGZzbF9kbWFfZGV2aWNlICpmZGV2LAotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgdTMyIGZlYXR1cmUsIGNvbnN0IGNoYXIgKmNvbXBhdGlibGUpCitzdGF0aWMgaXJxcmV0dXJuX3QgZnNsZG1hX2N0cmxfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGZzbF9kbWFfY2hhbiAqbmV3X2ZzbF9jaGFuOwotCWludCBlcnI7CisJc3RydWN0IGZzbGRtYV9kZXZpY2UgKmZkZXYgPSBkYXRhOworCXN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbjsKKwl1bnNpZ25lZCBpbnQgaGFuZGxlZCA9IDA7CisJdTMyIGdzciwgbWFzazsKKwlpbnQgaTsKIAotCS8qIGFsbG9jIGNoYW5uZWwgKi8KLQluZXdfZnNsX2NoYW4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZnNsX2RtYV9jaGFuKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFuZXdfZnNsX2NoYW4pIHsKLQkJZGV2X2VycihmZGV2LT5kZXYsICJObyBmcmVlIG1lbW9yeSBmb3IgYWxsb2NhdGluZyAiCi0JCQkJImRtYSBjaGFubmVscyFcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwlnc3IgPSAoZmRldi0+ZmVhdHVyZSAmIEZTTF9ETUFfQklHX0VORElBTikgPyBpbl9iZTMyKGZkZXYtPnJlZ3MpCisJCQkJCQkgICA6IGluX2xlMzIoZmRldi0+cmVncyk7CisJbWFzayA9IDB4ZmYwMDAwMDA7CisJZGV2X2RiZyhmZGV2LT5kZXYsICJJUlE6IGdzciAweCUuOHhcbiIsIGdzcik7CisKKwlmb3IgKGkgPSAwOyBpIDwgRlNMX0RNQV9NQVhfQ0hBTlNfUEVSX0RFVklDRTsgaSsrKSB7CisJCWNoYW4gPSBmZGV2LT5jaGFuW2ldOworCQlpZiAoIWNoYW4pCisJCQljb250aW51ZTsKKworCQlpZiAoZ3NyICYgbWFzaykgeworCQkJZGV2X2RiZyhmZGV2LT5kZXYsICJJUlE6IGNoYW4gJWRcbiIsIGNoYW4tPmlkKTsKKwkJCWZzbGRtYV9jaGFuX2lycShpcnEsIGNoYW4pOworCQkJaGFuZGxlZCsrOworCQl9CisKKwkJZ3NyICY9IH5tYXNrOworCQltYXNrID4+PSA4OwogCX0KIAotCS8qIGdldCBkbWEgY2hhbm5lbCByZWdpc3RlciBiYXNlICovCi0JZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShub2RlLCAwLCAmbmV3X2ZzbF9jaGFuLT5yZWcpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycihmZGV2LT5kZXYsICJDYW4ndCBnZXQgJXMgcHJvcGVydHkgJ3JlZydcbiIsCi0JCQkJbm9kZS0+ZnVsbF9uYW1lKTsKLQkJZ290byBlcnJfbm9fcmVnOworCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOworfQorCitzdGF0aWMgdm9pZCBmc2xkbWFfZnJlZV9pcnFzKHN0cnVjdCBmc2xkbWFfZGV2aWNlICpmZGV2KQoreworCXN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbjsKKwlpbnQgaTsKKworCWlmIChmZGV2LT5pcnEgIT0gTk9fSVJRKSB7CisJCWRldl9kYmcoZmRldi0+ZGV2LCAiZnJlZSBwZXItY29udHJvbGxlciBJUlFcbiIpOworCQlmcmVlX2lycShmZGV2LT5pcnEsIGZkZXYpOworCQlyZXR1cm47CiAJfQogCi0JbmV3X2ZzbF9jaGFuLT5mZWF0dXJlID0gZmVhdHVyZTsKLQotCWlmICghZmRldi0+ZmVhdHVyZSkKLQkJZmRldi0+ZmVhdHVyZSA9IG5ld19mc2xfY2hhbi0+ZmVhdHVyZTsKLQotCS8qIElmIHRoZSBETUEgZGV2aWNlJ3MgZmVhdHVyZSBpcyBkaWZmZXJlbnQgdGhhbiBpdHMgY2hhbm5lbHMnLAotCSAqIHJlcG9ydCB0aGUgYnVnLgotCSAqLwotCVdBUk5fT04oZmRldi0+ZmVhdHVyZSAhPSBuZXdfZnNsX2NoYW4tPmZlYXR1cmUpOwotCi0JbmV3X2ZzbF9jaGFuLT5kZXYgPSBmZGV2LT5kZXY7Ci0JbmV3X2ZzbF9jaGFuLT5yZWdfYmFzZSA9IGlvcmVtYXAobmV3X2ZzbF9jaGFuLT5yZWcuc3RhcnQsCi0JCQluZXdfZnNsX2NoYW4tPnJlZy5lbmQgLSBuZXdfZnNsX2NoYW4tPnJlZy5zdGFydCArIDEpOwotCi0JbmV3X2ZzbF9jaGFuLT5pZCA9ICgobmV3X2ZzbF9jaGFuLT5yZWcuc3RhcnQgLSAweDEwMCkgJiAweGZmZikgPj4gNzsKLQlpZiAobmV3X2ZzbF9jaGFuLT5pZCA+PSBGU0xfRE1BX01BWF9DSEFOU19QRVJfREVWSUNFKSB7Ci0JCWRldl9lcnIoZmRldi0+ZGV2LCAiVGhlcmUgaXMgbm8gJWQgY2hhbm5lbCFcbiIsCi0JCQkJbmV3X2ZzbF9jaGFuLT5pZCk7Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyX25vX2NoYW47CisJZm9yIChpID0gMDsgaSA8IEZTTF9ETUFfTUFYX0NIQU5TX1BFUl9ERVZJQ0U7IGkrKykgeworCQljaGFuID0gZmRldi0+Y2hhbltpXTsKKwkJaWYgKGNoYW4gJiYgY2hhbi0+aXJxICE9IE5PX0lSUSkgeworCQkJZGV2X2RiZyhmZGV2LT5kZXYsICJmcmVlIGNoYW5uZWwgJWQgSVJRXG4iLCBjaGFuLT5pZCk7CisJCQlmcmVlX2lycShjaGFuLT5pcnEsIGNoYW4pOworCQl9CiAJfQotCWZkZXYtPmNoYW5bbmV3X2ZzbF9jaGFuLT5pZF0gPSBuZXdfZnNsX2NoYW47Ci0JdGFza2xldF9pbml0KCZuZXdfZnNsX2NoYW4tPnRhc2tsZXQsIGRtYV9kb190YXNrbGV0LAotCQkJKHVuc2lnbmVkIGxvbmcpbmV3X2ZzbF9jaGFuKTsKK30KIAotCS8qIEluaXQgdGhlIGNoYW5uZWwgKi8KLQlkbWFfaW5pdChuZXdfZnNsX2NoYW4pOworc3RhdGljIGludCBmc2xkbWFfcmVxdWVzdF9pcnFzKHN0cnVjdCBmc2xkbWFfZGV2aWNlICpmZGV2KQoreworCXN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbjsKKwlpbnQgcmV0OworCWludCBpOwogCi0JLyogQ2xlYXIgY2RhciByZWdpc3RlcnMgKi8KLQlzZXRfY2RhcihuZXdfZnNsX2NoYW4sIDApOwotCi0Jc3dpdGNoIChuZXdfZnNsX2NoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0lQX01BU0spIHsKLQljYXNlIEZTTF9ETUFfSVBfODVYWDoKLQkJbmV3X2ZzbF9jaGFuLT50b2dnbGVfZXh0X3BhdXNlID0gZnNsX2NoYW5fdG9nZ2xlX2V4dF9wYXVzZTsKLQljYXNlIEZTTF9ETUFfSVBfODNYWDoKLQkJbmV3X2ZzbF9jaGFuLT50b2dnbGVfZXh0X3N0YXJ0ID0gZnNsX2NoYW5fdG9nZ2xlX2V4dF9zdGFydDsKLQkJbmV3X2ZzbF9jaGFuLT5zZXRfc3JjX2xvb3Bfc2l6ZSA9IGZzbF9jaGFuX3NldF9zcmNfbG9vcF9zaXplOwotCQluZXdfZnNsX2NoYW4tPnNldF9kZXN0X2xvb3Bfc2l6ZSA9IGZzbF9jaGFuX3NldF9kZXN0X2xvb3Bfc2l6ZTsKLQkJbmV3X2ZzbF9jaGFuLT5zZXRfcmVxdWVzdF9jb3VudCA9IGZzbF9jaGFuX3NldF9yZXF1ZXN0X2NvdW50OworCS8qIGlmIHdlIGhhdmUgYSBwZXItY29udHJvbGxlciBJUlEsIHVzZSB0aGF0ICovCisJaWYgKGZkZXYtPmlycSAhPSBOT19JUlEpIHsKKwkJZGV2X2RiZyhmZGV2LT5kZXYsICJyZXF1ZXN0IHBlci1jb250cm9sbGVyIElSUVxuIik7CisJCXJldCA9IHJlcXVlc3RfaXJxKGZkZXYtPmlycSwgZnNsZG1hX2N0cmxfaXJxLCBJUlFGX1NIQVJFRCwKKwkJCQkgICJmc2xkbWEtY29udHJvbGxlciIsIGZkZXYpOworCQlyZXR1cm4gcmV0OwogCX0KIAotCXNwaW5fbG9ja19pbml0KCZuZXdfZnNsX2NoYW4tPmRlc2NfbG9jayk7Ci0JSU5JVF9MSVNUX0hFQUQoJm5ld19mc2xfY2hhbi0+bGRfcXVldWUpOworCS8qIG5vIHBlci1jb250cm9sbGVyIElSUSwgdXNlIHRoZSBwZXItY2hhbm5lbCBJUlFzICovCisJZm9yIChpID0gMDsgaSA8IEZTTF9ETUFfTUFYX0NIQU5TX1BFUl9ERVZJQ0U7IGkrKykgeworCQljaGFuID0gZmRldi0+Y2hhbltpXTsKKwkJaWYgKCFjaGFuKQorCQkJY29udGludWU7CiAKLQluZXdfZnNsX2NoYW4tPmNvbW1vbi5kZXZpY2UgPSAmZmRldi0+Y29tbW9uOworCQlpZiAoY2hhbi0+aXJxID09IE5PX0lSUSkgeworCQkJZGV2X2VycihmZGV2LT5kZXYsICJubyBpbnRlcnJ1cHRzIHByb3BlcnR5IGRlZmluZWQgZm9yICIKKwkJCQkJICAgIkRNQSBjaGFubmVsICVkLiBQbGVhc2UgZml4IHlvdXIgIgorCQkJCQkgICAiZGV2aWNlIHRyZWVcbiIsIGNoYW4tPmlkKTsKKwkJCXJldCA9IC1FTk9ERVY7CisJCQlnb3RvIG91dF91bndpbmQ7CisJCX0KIAotCS8qIEFkZCB0aGUgY2hhbm5lbCB0byBETUEgZGV2aWNlIGNoYW5uZWwgbGlzdCAqLwotCWxpc3RfYWRkX3RhaWwoJm5ld19mc2xfY2hhbi0+Y29tbW9uLmRldmljZV9ub2RlLAotCQkJJmZkZXYtPmNvbW1vbi5jaGFubmVscyk7Ci0JZmRldi0+Y29tbW9uLmNoYW5jbnQrKzsKLQotCW5ld19mc2xfY2hhbi0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobm9kZSwgMCk7Ci0JaWYgKG5ld19mc2xfY2hhbi0+aXJxICE9IE5PX0lSUSkgewotCQllcnIgPSByZXF1ZXN0X2lycShuZXdfZnNsX2NoYW4tPmlycSwKLQkJCQkJJmZzbF9kbWFfY2hhbl9kb19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAotCQkJCQkiZnNsZG1hLWNoYW5uZWwiLCBuZXdfZnNsX2NoYW4pOwotCQlpZiAoZXJyKSB7Ci0JCQlkZXZfZXJyKGZkZXYtPmRldiwgIkRNQSBjaGFubmVsICVzIHJlcXVlc3RfaXJxIGVycm9yICIKLQkJCQkid2l0aCByZXR1cm4gJWRcbiIsIG5vZGUtPmZ1bGxfbmFtZSwgZXJyKTsKLQkJCWdvdG8gZXJyX25vX2lycTsKKwkJZGV2X2RiZyhmZGV2LT5kZXYsICJyZXF1ZXN0IGNoYW5uZWwgJWQgSVJRXG4iLCBjaGFuLT5pZCk7CisJCXJldCA9IHJlcXVlc3RfaXJxKGNoYW4tPmlycSwgZnNsZG1hX2NoYW5faXJxLCBJUlFGX1NIQVJFRCwKKwkJCQkgICJmc2xkbWEtY2hhbiIsIGNoYW4pOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKGZkZXYtPmRldiwgInVuYWJsZSB0byByZXF1ZXN0IElSUSBmb3IgRE1BICIKKwkJCQkJICAgImNoYW5uZWwgJWRcbiIsIGNoYW4tPmlkKTsKKwkJCWdvdG8gb3V0X3Vud2luZDsKIAkJfQogCX0KIAotCWRldl9pbmZvKGZkZXYtPmRldiwgIiMlZCAoJXMpLCBpcnEgJWRcbiIsIG5ld19mc2xfY2hhbi0+aWQsCi0JCSBjb21wYXRpYmxlLAotCQkgbmV3X2ZzbF9jaGFuLT5pcnEgIT0gTk9fSVJRID8gbmV3X2ZzbF9jaGFuLT5pcnEgOiBmZGV2LT5pcnEpOworCXJldHVybiAwOworCitvdXRfdW53aW5kOgorCWZvciAoLyogbm9uZSAqLzsgaSA+PSAwOyBpLS0pIHsKKwkJY2hhbiA9IGZkZXYtPmNoYW5baV07CisJCWlmICghY2hhbikKKwkJCWNvbnRpbnVlOworCisJCWlmIChjaGFuLT5pcnEgPT0gTk9fSVJRKQorCQkJY29udGludWU7CisKKwkJZnJlZV9pcnEoY2hhbi0+aXJxLCBjaGFuKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogT3BlbkZpcm13YXJlIFN1YnN5c3RlbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGZzbF9kbWFfY2hhbl9wcm9iZShzdHJ1Y3QgZnNsZG1hX2RldmljZSAqZmRldiwKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIHUzMiBmZWF0dXJlLCBjb25zdCBjaGFyICpjb21wYXRpYmxlKQoreworCXN0cnVjdCBmc2xkbWFfY2hhbiAqY2hhbjsKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzOworCWludCBlcnI7CisKKwkvKiBhbGxvYyBjaGFubmVsICovCisJY2hhbiA9IGt6YWxsb2Moc2l6ZW9mKCpjaGFuKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjaGFuKSB7CisJCWRldl9lcnIoZmRldi0+ZGV2LCAibm8gZnJlZSBtZW1vcnkgZm9yIERNQSBjaGFubmVscyFcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9yZXR1cm47CisJfQorCisJLyogaW9yZW1hcCByZWdpc3RlcnMgZm9yIHVzZSAqLworCWNoYW4tPnJlZ3MgPSBvZl9pb21hcChub2RlLCAwKTsKKwlpZiAoIWNoYW4tPnJlZ3MpIHsKKwkJZGV2X2VycihmZGV2LT5kZXYsICJ1bmFibGUgdG8gaW9yZW1hcCByZWdpc3RlcnNcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX2NoYW47CisJfQorCisJZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShub2RlLCAwLCAmcmVzKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoZmRldi0+ZGV2LCAidW5hYmxlIHRvIGZpbmQgJ3JlZycgcHJvcGVydHlcbiIpOworCQlnb3RvIG91dF9pb3VubWFwX3JlZ3M7CisJfQorCisJY2hhbi0+ZmVhdHVyZSA9IGZlYXR1cmU7CisJaWYgKCFmZGV2LT5mZWF0dXJlKQorCQlmZGV2LT5mZWF0dXJlID0gY2hhbi0+ZmVhdHVyZTsKKworCS8qCisJICogSWYgdGhlIERNQSBkZXZpY2UncyBmZWF0dXJlIGlzIGRpZmZlcmVudCB0aGFuIHRoZSBmZWF0dXJlCisJICogb2YgaXRzIGNoYW5uZWxzLCByZXBvcnQgdGhlIGJ1ZworCSAqLworCVdBUk5fT04oZmRldi0+ZmVhdHVyZSAhPSBjaGFuLT5mZWF0dXJlKTsKKworCWNoYW4tPmRldiA9IGZkZXYtPmRldjsKKwljaGFuLT5pZCA9ICgocmVzLnN0YXJ0IC0gMHgxMDApICYgMHhmZmYpID4+IDc7CisJaWYgKGNoYW4tPmlkID49IEZTTF9ETUFfTUFYX0NIQU5TX1BFUl9ERVZJQ0UpIHsKKwkJZGV2X2VycihmZGV2LT5kZXYsICJ0b28gbWFueSBjaGFubmVscyBmb3IgZGV2aWNlXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXRfaW91bm1hcF9yZWdzOworCX0KKworCWZkZXYtPmNoYW5bY2hhbi0+aWRdID0gY2hhbjsKKwl0YXNrbGV0X2luaXQoJmNoYW4tPnRhc2tsZXQsIGRtYV9kb190YXNrbGV0LCAodW5zaWduZWQgbG9uZyljaGFuKTsKKworCS8qIEluaXRpYWxpemUgdGhlIGNoYW5uZWwgKi8KKwlkbWFfaW5pdChjaGFuKTsKKworCS8qIENsZWFyIGNkYXIgcmVnaXN0ZXJzICovCisJc2V0X2NkYXIoY2hhbiwgMCk7CisKKwlzd2l0Y2ggKGNoYW4tPmZlYXR1cmUgJiBGU0xfRE1BX0lQX01BU0spIHsKKwljYXNlIEZTTF9ETUFfSVBfODVYWDoKKwkJY2hhbi0+dG9nZ2xlX2V4dF9wYXVzZSA9IGZzbF9jaGFuX3RvZ2dsZV9leHRfcGF1c2U7CisJY2FzZSBGU0xfRE1BX0lQXzgzWFg6CisJCWNoYW4tPnRvZ2dsZV9leHRfc3RhcnQgPSBmc2xfY2hhbl90b2dnbGVfZXh0X3N0YXJ0OworCQljaGFuLT5zZXRfc3JjX2xvb3Bfc2l6ZSA9IGZzbF9jaGFuX3NldF9zcmNfbG9vcF9zaXplOworCQljaGFuLT5zZXRfZHN0X2xvb3Bfc2l6ZSA9IGZzbF9jaGFuX3NldF9kc3RfbG9vcF9zaXplOworCQljaGFuLT5zZXRfcmVxdWVzdF9jb3VudCA9IGZzbF9jaGFuX3NldF9yZXF1ZXN0X2NvdW50OworCX0KKworCXNwaW5fbG9ja19pbml0KCZjaGFuLT5kZXNjX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZjaGFuLT5sZF9wZW5kaW5nKTsKKwlJTklUX0xJU1RfSEVBRCgmY2hhbi0+bGRfcnVubmluZyk7CisKKwljaGFuLT5jb21tb24uZGV2aWNlID0gJmZkZXYtPmNvbW1vbjsKKworCS8qIGZpbmQgdGhlIElSUSBsaW5lLCBpZiBpdCBleGlzdHMgaW4gdGhlIGRldmljZSB0cmVlICovCisJY2hhbi0+aXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobm9kZSwgMCk7CisKKwkvKiBBZGQgdGhlIGNoYW5uZWwgdG8gRE1BIGRldmljZSBjaGFubmVsIGxpc3QgKi8KKwlsaXN0X2FkZF90YWlsKCZjaGFuLT5jb21tb24uZGV2aWNlX25vZGUsICZmZGV2LT5jb21tb24uY2hhbm5lbHMpOworCWZkZXYtPmNvbW1vbi5jaGFuY250Kys7CisKKwlkZXZfaW5mbyhmZGV2LT5kZXYsICIjJWQgKCVzKSwgaXJxICVkXG4iLCBjaGFuLT5pZCwgY29tcGF0aWJsZSwKKwkJIGNoYW4tPmlycSAhPSBOT19JUlEgPyBjaGFuLT5pcnEgOiBmZGV2LT5pcnEpOwogCiAJcmV0dXJuIDA7CiAKLWVycl9ub19pcnE6Ci0JbGlzdF9kZWwoJm5ld19mc2xfY2hhbi0+Y29tbW9uLmRldmljZV9ub2RlKTsKLWVycl9ub19jaGFuOgotCWlvdW5tYXAobmV3X2ZzbF9jaGFuLT5yZWdfYmFzZSk7Ci1lcnJfbm9fcmVnOgotCWtmcmVlKG5ld19mc2xfY2hhbik7CitvdXRfaW91bm1hcF9yZWdzOgorCWlvdW5tYXAoY2hhbi0+cmVncyk7CitvdXRfZnJlZV9jaGFuOgorCWtmcmVlKGNoYW4pOworb3V0X3JldHVybjoKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBmc2xfZG1hX2NoYW5fcmVtb3ZlKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZjaGFuKQorc3RhdGljIHZvaWQgZnNsX2RtYV9jaGFuX3JlbW92ZShzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW4pCiB7Ci0JaWYgKGZjaGFuLT5pcnEgIT0gTk9fSVJRKQotCQlmcmVlX2lycShmY2hhbi0+aXJxLCBmY2hhbik7Ci0JbGlzdF9kZWwoJmZjaGFuLT5jb21tb24uZGV2aWNlX25vZGUpOwotCWlvdW5tYXAoZmNoYW4tPnJlZ19iYXNlKTsKLQlrZnJlZShmY2hhbik7CisJaXJxX2Rpc3Bvc2VfbWFwcGluZyhjaGFuLT5pcnEpOworCWxpc3RfZGVsKCZjaGFuLT5jb21tb24uZGV2aWNlX25vZGUpOworCWlvdW5tYXAoY2hhbi0+cmVncyk7CisJa2ZyZWUoY2hhbik7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IG9mX2ZzbF9kbWFfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqZGV2LAorc3RhdGljIGludCBfX2RldmluaXQgZnNsZG1hX29mX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9wLAogCQkJY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqbWF0Y2gpCiB7Ci0JaW50IGVycjsKLQlzdHJ1Y3QgZnNsX2RtYV9kZXZpY2UgKmZkZXY7CisJc3RydWN0IGZzbGRtYV9kZXZpY2UgKmZkZXY7CiAJc3RydWN0IGRldmljZV9ub2RlICpjaGlsZDsKKwlpbnQgZXJyOwogCi0JZmRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmc2xfZG1hX2RldmljZSksIEdGUF9LRVJORUwpOworCWZkZXYgPSBremFsbG9jKHNpemVvZigqZmRldiksIEdGUF9LRVJORUwpOwogCWlmICghZmRldikgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIk5vIGVub3VnaCBtZW1vcnkgZm9yICdwcml2J1xuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiTm8gZW5vdWdoIG1lbW9yeSBmb3IgJ3ByaXYnXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfcmV0dXJuOwogCX0KLQlmZGV2LT5kZXYgPSAmZGV2LT5kZXY7CisKKwlmZGV2LT5kZXYgPSAmb3AtPmRldjsKIAlJTklUX0xJU1RfSEVBRCgmZmRldi0+Y29tbW9uLmNoYW5uZWxzKTsKIAotCS8qIGdldCBETUEgY29udHJvbGxlciByZWdpc3RlciBiYXNlICovCi0JZXJyID0gb2ZfYWRkcmVzc190b19yZXNvdXJjZShkZXYtPm5vZGUsIDAsICZmZGV2LT5yZWcpOwotCWlmIChlcnIpIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJDYW4ndCBnZXQgJXMgcHJvcGVydHkgJ3JlZydcbiIsCi0JCQkJZGV2LT5ub2RlLT5mdWxsX25hbWUpOwotCQlnb3RvIGVycl9ub19yZWc7CisJLyogaW9yZW1hcCB0aGUgcmVnaXN0ZXJzIGZvciB1c2UgKi8KKwlmZGV2LT5yZWdzID0gb2ZfaW9tYXAob3AtPm5vZGUsIDApOworCWlmICghZmRldi0+cmVncykgeworCQlkZXZfZXJyKCZvcC0+ZGV2LCAidW5hYmxlIHRvIGlvcmVtYXAgcmVnaXN0ZXJzXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV9mZGV2OwogCX0KIAotCWRldl9pbmZvKCZkZXYtPmRldiwgIlByb2JlIHRoZSBGcmVlc2NhbGUgRE1BIGRyaXZlciBmb3IgJXMgIgotCQkJImNvbnRyb2xsZXIgYXQgMHglbGx4Li4uXG4iLAotCQkJbWF0Y2gtPmNvbXBhdGlibGUsICh1bnNpZ25lZCBsb25nIGxvbmcpZmRldi0+cmVnLnN0YXJ0KTsKLQlmZGV2LT5yZWdfYmFzZSA9IGlvcmVtYXAoZmRldi0+cmVnLnN0YXJ0LCBmZGV2LT5yZWcuZW5kCi0JCQkJCQktIGZkZXYtPnJlZy5zdGFydCArIDEpOworCS8qIG1hcCB0aGUgY2hhbm5lbCBJUlEgaWYgaXQgZXhpc3RzLCBidXQgZG9uJ3QgaG9va3VwIHRoZSBoYW5kbGVyIHlldCAqLworCWZkZXYtPmlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG9wLT5ub2RlLCAwKTsKIAogCWRtYV9jYXBfc2V0KERNQV9NRU1DUFksIGZkZXYtPmNvbW1vbi5jYXBfbWFzayk7CiAJZG1hX2NhcF9zZXQoRE1BX0lOVEVSUlVQVCwgZmRldi0+Y29tbW9uLmNhcF9tYXNrKTsKQEAgLTEyMTAsMTAzICsxMzMzLDExMSBAQAogCWZkZXYtPmNvbW1vbi5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IGZzbF9kbWFfbWVtY3B5X2lzc3VlX3BlbmRpbmc7CiAJZmRldi0+Y29tbW9uLmRldmljZV9wcmVwX3NsYXZlX3NnID0gZnNsX2RtYV9wcmVwX3NsYXZlX3NnOwogCWZkZXYtPmNvbW1vbi5kZXZpY2VfdGVybWluYXRlX2FsbCA9IGZzbF9kbWFfZGV2aWNlX3Rlcm1pbmF0ZV9hbGw7Ci0JZmRldi0+Y29tbW9uLmRldiA9ICZkZXYtPmRldjsKKwlmZGV2LT5jb21tb24uZGV2ID0gJm9wLT5kZXY7CiAKLQlmZGV2LT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChkZXYtPm5vZGUsIDApOwotCWlmIChmZGV2LT5pcnEgIT0gTk9fSVJRKSB7Ci0JCWVyciA9IHJlcXVlc3RfaXJxKGZkZXYtPmlycSwgJmZzbF9kbWFfZG9faW50ZXJydXB0LCBJUlFGX1NIQVJFRCwKLQkJCQkJImZzbGRtYS1kZXZpY2UiLCBmZGV2KTsKLQkJaWYgKGVycikgewotCQkJZGV2X2VycigmZGV2LT5kZXYsICJETUEgZGV2aWNlIHJlcXVlc3RfaXJxIGVycm9yICIKLQkJCQkid2l0aCByZXR1cm4gJWRcbiIsIGVycik7Ci0JCQlnb3RvIGVycjsKLQkJfQotCX0KKwlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIGZkZXYpOwogCi0JZGV2X3NldF9kcnZkYXRhKCYoZGV2LT5kZXYpLCBmZGV2KTsKLQotCS8qIFdlIGNhbm5vdCB1c2Ugb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKCkgYmVjYXVzZSB0aGVyZSBpcyBubwotCSAqIG9mX3BsYXRmb3JtX2J1c19yZW1vdmUuICBJbnN0ZWFkLCB3ZSBtYW51YWxseSBpbnN0YW50aWF0ZSBldmVyeSBETUEKKwkvKgorCSAqIFdlIGNhbm5vdCB1c2Ugb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKCkgYmVjYXVzZSB0aGVyZSBpcyBubworCSAqIG9mX3BsYXRmb3JtX2J1c19yZW1vdmUoKS4gSW5zdGVhZCwgd2UgbWFudWFsbHkgaW5zdGFudGlhdGUgZXZlcnkgRE1BCiAJICogY2hhbm5lbCBvYmplY3QuCiAJICovCi0JZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShkZXYtPm5vZGUsIGNoaWxkKSB7Ci0JCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShjaGlsZCwgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIikpCisJZm9yX2VhY2hfY2hpbGRfb2Zfbm9kZShvcC0+bm9kZSwgY2hpbGQpIHsKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGNoaWxkLCAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiKSkgewogCQkJZnNsX2RtYV9jaGFuX3Byb2JlKGZkZXYsIGNoaWxkLAogCQkJCUZTTF9ETUFfSVBfODVYWCB8IEZTTF9ETUFfQklHX0VORElBTiwKIAkJCQkiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiKTsKLQkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGNoaWxkLCAiZnNsLGVsby1kbWEtY2hhbm5lbCIpKQorCQl9CisKKwkJaWYgKG9mX2RldmljZV9pc19jb21wYXRpYmxlKGNoaWxkLCAiZnNsLGVsby1kbWEtY2hhbm5lbCIpKSB7CiAJCQlmc2xfZG1hX2NoYW5fcHJvYmUoZmRldiwgY2hpbGQsCiAJCQkJRlNMX0RNQV9JUF84M1hYIHwgRlNMX0RNQV9MSVRUTEVfRU5ESUFOLAogCQkJCSJmc2wsZWxvLWRtYS1jaGFubmVsIik7CisJCX0KKwl9CisKKwkvKgorCSAqIEhvb2t1cCB0aGUgSVJRIGhhbmRsZXIocykKKwkgKgorCSAqIElmIHdlIGhhdmUgYSBwZXItY29udHJvbGxlciBpbnRlcnJ1cHQsIHdlIHByZWZlciB0aGF0IHRvIHRoZQorCSAqIHBlci1jaGFubmVsIGludGVycnVwdHMgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2hhcmVkIGludGVycnVwdAorCSAqIGhhbmRsZXJzIG9uIHRoZSBzYW1lIElSUSBsaW5lCisJICovCisJZXJyID0gZnNsZG1hX3JlcXVlc3RfaXJxcyhmZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoZmRldi0+ZGV2LCAidW5hYmxlIHRvIHJlcXVlc3QgSVJRc1xuIik7CisJCWdvdG8gb3V0X2ZyZWVfZmRldjsKIAl9CiAKIAlkbWFfYXN5bmNfZGV2aWNlX3JlZ2lzdGVyKCZmZGV2LT5jb21tb24pOwogCXJldHVybiAwOwogCi1lcnI6Ci0JaW91bm1hcChmZGV2LT5yZWdfYmFzZSk7Ci1lcnJfbm9fcmVnOgorb3V0X2ZyZWVfZmRldjoKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKGZkZXYtPmlycSk7CiAJa2ZyZWUoZmRldik7CitvdXRfcmV0dXJuOgogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgb2ZfZnNsX2RtYV9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZfZGV2KQorc3RhdGljIGludCBmc2xkbWFfb2ZfcmVtb3ZlKHN0cnVjdCBvZl9kZXZpY2UgKm9wKQogewotCXN0cnVjdCBmc2xfZG1hX2RldmljZSAqZmRldjsKKwlzdHJ1Y3QgZnNsZG1hX2RldmljZSAqZmRldjsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCWZkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJm9mX2Rldi0+ZGV2KTsKLQorCWZkZXYgPSBkZXZfZ2V0X2RydmRhdGEoJm9wLT5kZXYpOwogCWRtYV9hc3luY19kZXZpY2VfdW5yZWdpc3RlcigmZmRldi0+Y29tbW9uKTsKIAotCWZvciAoaSA9IDA7IGkgPCBGU0xfRE1BX01BWF9DSEFOU19QRVJfREVWSUNFOyBpKyspCisJZnNsZG1hX2ZyZWVfaXJxcyhmZGV2KTsKKworCWZvciAoaSA9IDA7IGkgPCBGU0xfRE1BX01BWF9DSEFOU19QRVJfREVWSUNFOyBpKyspIHsKIAkJaWYgKGZkZXYtPmNoYW5baV0pCiAJCQlmc2xfZG1hX2NoYW5fcmVtb3ZlKGZkZXYtPmNoYW5baV0pOworCX0KIAotCWlmIChmZGV2LT5pcnEgIT0gTk9fSVJRKQotCQlmcmVlX2lycShmZGV2LT5pcnEsIGZkZXYpOwotCi0JaW91bm1hcChmZGV2LT5yZWdfYmFzZSk7Ci0KKwlpb3VubWFwKGZkZXYtPnJlZ3MpOworCWRldl9zZXRfZHJ2ZGF0YSgmb3AtPmRldiwgTlVMTCk7CiAJa2ZyZWUoZmRldik7Ci0JZGV2X3NldF9kcnZkYXRhKCZvZl9kZXYtPmRldiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfZnNsX2RtYV9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGZzbGRtYV9vZl9pZHNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImZzbCxlbG9wbHVzLWRtYSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsZWxvLWRtYSIsIH0sCiAJe30KIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG9mX2ZzbF9kbWFfZHJpdmVyID0gewotCS5uYW1lID0gImZzbC1lbG8tZG1hIiwKLQkubWF0Y2hfdGFibGUgPSBvZl9mc2xfZG1hX2lkcywKLQkucHJvYmUgPSBvZl9mc2xfZG1hX3Byb2JlLAotCS5yZW1vdmUgPSBvZl9mc2xfZG1hX3JlbW92ZSwKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIGZzbGRtYV9vZl9kcml2ZXIgPSB7CisJLm5hbWUJCT0gImZzbC1lbG8tZG1hIiwKKwkubWF0Y2hfdGFibGUJPSBmc2xkbWFfb2ZfaWRzLAorCS5wcm9iZQkJPSBmc2xkbWFfb2ZfcHJvYmUsCisJLnJlbW92ZQkJPSBmc2xkbWFfb2ZfcmVtb3ZlLAogfTsKIAotc3RhdGljIF9faW5pdCBpbnQgb2ZfZnNsX2RtYV9pbml0KHZvaWQpCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogTW9kdWxlIEluaXQgLyBFeGl0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBfX2luaXQgaW50IGZzbGRtYV9pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKIAogCXByX2luZm8oIkZyZWVzY2FsZSBFbG8gLyBFbG8gUGx1cyBETUEgZHJpdmVyXG4iKTsKIAotCXJldCA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmb2ZfZnNsX2RtYV9kcml2ZXIpOworCXJldCA9IG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZnNsZG1hX29mX2RyaXZlcik7CiAJaWYgKHJldCkKIAkJcHJfZXJyKCJmc2xkbWE6IGZhaWxlZCB0byByZWdpc3RlciBwbGF0Zm9ybSBkcml2ZXJcbiIpOwogCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IG9mX2ZzbF9kbWFfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGZzbGRtYV9leGl0KHZvaWQpCiB7Ci0Jb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm9mX2ZzbF9kbWFfZHJpdmVyKTsKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZnNsZG1hX29mX2RyaXZlcik7CiB9CiAKLXN1YnN5c19pbml0Y2FsbChvZl9mc2xfZG1hX2luaXQpOwotbW9kdWxlX2V4aXQob2ZfZnNsX2RtYV9leGl0KTsKK3N1YnN5c19pbml0Y2FsbChmc2xkbWFfaW5pdCk7Cittb2R1bGVfZXhpdChmc2xkbWFfZXhpdCk7CiAKIE1PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIEVsbyAvIEVsbyBQbHVzIERNQSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2ZzbGRtYS5oIGIvZHJpdmVycy9kbWEvZnNsZG1hLmgKaW5kZXggMGRmMTRjYi4uY2I0ZDZmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvZnNsZG1hLmgKKysrIGIvZHJpdmVycy9kbWEvZnNsZG1hLmgKQEAgLTkyLDExICs5Miw5IEBACiAJc3RydWN0IGxpc3RfaGVhZCBub2RlOwogCXN0cnVjdCBsaXN0X2hlYWQgdHhfbGlzdDsKIAlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgYXN5bmNfdHg7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGQ7Ci0Jdm9pZCAqcHJpdjsKIH0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgzMikpKTsKIAotc3RydWN0IGZzbF9kbWFfY2hhbl9yZWdzIHsKK3N0cnVjdCBmc2xkbWFfY2hhbl9yZWdzIHsKIAl1MzIgbXI7CS8qIDB4MDAgLSBNb2RlIFJlZ2lzdGVyICovCiAJdTMyIHNyOwkvKiAweDA0IC0gU3RhdHVzIFJlZ2lzdGVyICovCiAJdTY0IGNkYXI7CS8qIDB4MDggLSBDdXJyZW50IGRlc2NyaXB0b3IgYWRkcmVzcyByZWdpc3RlciAqLwpAQCAtMTA2LDIwICsxMDQsMTkgQEAKIAl1NjQgbmRhcjsJLyogMHgyNCAtIE5leHQgRGVzY3JpcHRvciBBZGRyZXNzIFJlZ2lzdGVyICovCiB9OwogCi1zdHJ1Y3QgZnNsX2RtYV9jaGFuOworc3RydWN0IGZzbGRtYV9jaGFuOwogI2RlZmluZSBGU0xfRE1BX01BWF9DSEFOU19QRVJfREVWSUNFIDQKIAotc3RydWN0IGZzbF9kbWFfZGV2aWNlIHsKLQl2b2lkIF9faW9tZW0gKnJlZ19iYXNlOwkvKiBER1NSIHJlZ2lzdGVyIGJhc2UgKi8KLQlzdHJ1Y3QgcmVzb3VyY2UgcmVnOwkvKiBSZXNvdXJjZSBmb3IgcmVnaXN0ZXIgKi8KK3N0cnVjdCBmc2xkbWFfZGV2aWNlIHsKKwl2b2lkIF9faW9tZW0gKnJlZ3M7CS8qIERHU1IgcmVnaXN0ZXIgYmFzZSAqLwogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgZG1hX2RldmljZSBjb21tb247Ci0Jc3RydWN0IGZzbF9kbWFfY2hhbiAqY2hhbltGU0xfRE1BX01BWF9DSEFOU19QRVJfREVWSUNFXTsKKwlzdHJ1Y3QgZnNsZG1hX2NoYW4gKmNoYW5bRlNMX0RNQV9NQVhfQ0hBTlNfUEVSX0RFVklDRV07CiAJdTMyIGZlYXR1cmU7CQkvKiBUaGUgc2FtZSBhcyBETUEgY2hhbm5lbHMgKi8KIAlpbnQgaXJxOwkJLyogQ2hhbm5lbCBJUlEgKi8KIH07CiAKLS8qIERlZmluZSBtYWNyb3MgZm9yIGZzbF9kbWFfY2hhbi0+ZmVhdHVyZSBwcm9wZXJ0eSAqLworLyogRGVmaW5lIG1hY3JvcyBmb3IgZnNsZG1hX2NoYW4tPmZlYXR1cmUgcHJvcGVydHkgKi8KICNkZWZpbmUgRlNMX0RNQV9MSVRUTEVfRU5ESUFOCTB4MDAwMDAwMDAKICNkZWZpbmUgRlNMX0RNQV9CSUdfRU5ESUFOCTB4MDAwMDAwMDEKIApAQCAtMTMwLDI4ICsxMjcsMjggQEAKICNkZWZpbmUgRlNMX0RNQV9DSEFOX1BBVVNFX0VYVAkweDAwMDAxMDAwCiAjZGVmaW5lIEZTTF9ETUFfQ0hBTl9TVEFSVF9FWFQJMHgwMDAwMjAwMAogCi1zdHJ1Y3QgZnNsX2RtYV9jaGFuIHsKLQlzdHJ1Y3QgZnNsX2RtYV9jaGFuX3JlZ3MgX19pb21lbSAqcmVnX2Jhc2U7CitzdHJ1Y3QgZnNsZG1hX2NoYW4geworCXN0cnVjdCBmc2xkbWFfY2hhbl9yZWdzIF9faW9tZW0gKnJlZ3M7CiAJZG1hX2Nvb2tpZV90IGNvbXBsZXRlZF9jb29raWU7CS8qIFRoZSBtYXhpbXVtIGNvb2tpZSBjb21wbGV0ZWQgKi8KIAlzcGlubG9ja190IGRlc2NfbG9jazsJCS8qIERlc2NyaXB0b3Igb3BlcmF0aW9uIGxvY2sgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGxkX3F1ZXVlOwkvKiBMaW5rIGRlc2NyaXB0b3JzIHF1ZXVlICovCisJc3RydWN0IGxpc3RfaGVhZCBsZF9wZW5kaW5nOwkvKiBMaW5rIGRlc2NyaXB0b3JzIHF1ZXVlICovCisJc3RydWN0IGxpc3RfaGVhZCBsZF9ydW5uaW5nOwkvKiBMaW5rIGRlc2NyaXB0b3JzIHF1ZXVlICovCiAJc3RydWN0IGRtYV9jaGFuIGNvbW1vbjsJCS8qIERNQSBjb21tb24gY2hhbm5lbCAqLwogCXN0cnVjdCBkbWFfcG9vbCAqZGVzY19wb29sOwkvKiBEZXNjcmlwdG9ycyBwb29sICovCiAJc3RydWN0IGRldmljZSAqZGV2OwkJLyogQ2hhbm5lbCBkZXZpY2UgKi8KLQlzdHJ1Y3QgcmVzb3VyY2UgcmVnOwkJLyogUmVzb3VyY2UgZm9yIHJlZ2lzdGVyICovCiAJaW50IGlycTsJCQkvKiBDaGFubmVsIElSUSAqLwogCWludCBpZDsJCQkJLyogUmF3IGlkIG9mIHRoaXMgY2hhbm5lbCAqLwogCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0YXNrbGV0OwogCXUzMiBmZWF0dXJlOwogCi0Jdm9pZCAoKnRvZ2dsZV9leHRfcGF1c2UpKHN0cnVjdCBmc2xfZG1hX2NoYW4gKmZzbF9jaGFuLCBpbnQgZW5hYmxlKTsKLQl2b2lkICgqdG9nZ2xlX2V4dF9zdGFydCkoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4sIGludCBlbmFibGUpOwotCXZvaWQgKCpzZXRfc3JjX2xvb3Bfc2l6ZSkoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4sIGludCBzaXplKTsKLQl2b2lkICgqc2V0X2Rlc3RfbG9vcF9zaXplKShzdHJ1Y3QgZnNsX2RtYV9jaGFuICpmc2xfY2hhbiwgaW50IHNpemUpOwotCXZvaWQgKCpzZXRfcmVxdWVzdF9jb3VudCkoc3RydWN0IGZzbF9kbWFfY2hhbiAqZnNsX2NoYW4sIGludCBzaXplKTsKKwl2b2lkICgqdG9nZ2xlX2V4dF9wYXVzZSkoc3RydWN0IGZzbGRtYV9jaGFuICpmc2xfY2hhbiwgaW50IGVuYWJsZSk7CisJdm9pZCAoKnRvZ2dsZV9leHRfc3RhcnQpKHN0cnVjdCBmc2xkbWFfY2hhbiAqZnNsX2NoYW4sIGludCBlbmFibGUpOworCXZvaWQgKCpzZXRfc3JjX2xvb3Bfc2l6ZSkoc3RydWN0IGZzbGRtYV9jaGFuICpmc2xfY2hhbiwgaW50IHNpemUpOworCXZvaWQgKCpzZXRfZHN0X2xvb3Bfc2l6ZSkoc3RydWN0IGZzbGRtYV9jaGFuICpmc2xfY2hhbiwgaW50IHNpemUpOworCXZvaWQgKCpzZXRfcmVxdWVzdF9jb3VudCkoc3RydWN0IGZzbGRtYV9jaGFuICpmc2xfY2hhbiwgaW50IHNpemUpOwogfTsKIAotI2RlZmluZSB0b19mc2xfY2hhbihjaGFuKSBjb250YWluZXJfb2YoY2hhbiwgc3RydWN0IGZzbF9kbWFfY2hhbiwgY29tbW9uKQorI2RlZmluZSB0b19mc2xfY2hhbihjaGFuKSBjb250YWluZXJfb2YoY2hhbiwgc3RydWN0IGZzbGRtYV9jaGFuLCBjb21tb24pCiAjZGVmaW5lIHRvX2ZzbF9kZXNjKGxoKSBjb250YWluZXJfb2YobGgsIHN0cnVjdCBmc2xfZGVzY19zdywgbm9kZSkKICNkZWZpbmUgdHhfdG9fZnNsX2Rlc2ModHgpIGNvbnRhaW5lcl9vZih0eCwgc3RydWN0IGZzbF9kZXNjX3N3LCBhc3luY190eCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdC9kbWEuYyBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hLmMKaW5kZXggZGNjNGFiNy4uMDA5OTM0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdC9kbWEuYworKysgYi9kcml2ZXJzL2RtYS9pb2F0L2RtYS5jCkBAIC03MSw3ICs3MSw3IEBACiAJfQogCiAJYXR0bnN0YXR1cyA9IHJlYWRsKGluc3RhbmNlLT5yZWdfYmFzZSArIElPQVRfQVRUTlNUQVRVU19PRkZTRVQpOwotCWZvcl9lYWNoX2JpdChiaXQsICZhdHRuc3RhdHVzLCBCSVRTX1BFUl9MT05HKSB7CisJZm9yX2VhY2hfc2V0X2JpdChiaXQsICZhdHRuc3RhdHVzLCBCSVRTX1BFUl9MT05HKSB7CiAJCWNoYW4gPSBpb2F0X2NoYW5fYnlfaW5kZXgoaW5zdGFuY2UsIGJpdCk7CiAJCXRhc2tsZXRfc2NoZWR1bGUoJmNoYW4tPmNsZWFudXBfdGFzayk7CiAJfQpAQCAtOTQsMTYgKzk0LDEyIEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgdm9pZCBpb2F0MV9jbGVhbnVwX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKTsKLQogLyogY29tbW9uIGNoYW5uZWwgaW5pdGlhbGl6YXRpb24gKi8KLXZvaWQgaW9hdF9pbml0X2NoYW5uZWwoc3RydWN0IGlvYXRkbWFfZGV2aWNlICpkZXZpY2UsCi0JCSAgICAgICBzdHJ1Y3QgaW9hdF9jaGFuX2NvbW1vbiAqY2hhbiwgaW50IGlkeCwKLQkJICAgICAgIHZvaWQgKCp0aW1lcl9mbikodW5zaWduZWQgbG9uZyksCi0JCSAgICAgICB2b2lkICgqdGFza2xldCkodW5zaWduZWQgbG9uZyksCi0JCSAgICAgICB1bnNpZ25lZCBsb25nIGlvYXQpCit2b2lkIGlvYXRfaW5pdF9jaGFubmVsKHN0cnVjdCBpb2F0ZG1hX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3QgaW9hdF9jaGFuX2NvbW1vbiAqY2hhbiwgaW50IGlkeCkKIHsKIAlzdHJ1Y3QgZG1hX2RldmljZSAqZG1hID0gJmRldmljZS0+Y29tbW9uOworCXN0cnVjdCBkbWFfY2hhbiAqYyA9ICZjaGFuLT5jb21tb247CisJdW5zaWduZWQgbG9uZyBkYXRhID0gKHVuc2lnbmVkIGxvbmcpIGM7CiAKIAljaGFuLT5kZXZpY2UgPSBkZXZpY2U7CiAJY2hhbi0+cmVnX2Jhc2UgPSBkZXZpY2UtPnJlZ19iYXNlICsgKDB4ODAgKiAoaWR4ICsgMSkpOwpAQCAtMTEyLDE0ICsxMDgsMTIgQEAKIAlsaXN0X2FkZF90YWlsKCZjaGFuLT5jb21tb24uZGV2aWNlX25vZGUsICZkbWEtPmNoYW5uZWxzKTsKIAlkZXZpY2UtPmlkeFtpZHhdID0gY2hhbjsKIAlpbml0X3RpbWVyKCZjaGFuLT50aW1lcik7Ci0JY2hhbi0+dGltZXIuZnVuY3Rpb24gPSB0aW1lcl9mbjsKLQljaGFuLT50aW1lci5kYXRhID0gaW9hdDsKLQl0YXNrbGV0X2luaXQoJmNoYW4tPmNsZWFudXBfdGFzaywgdGFza2xldCwgaW9hdCk7CisJY2hhbi0+dGltZXIuZnVuY3Rpb24gPSBkZXZpY2UtPnRpbWVyX2ZuOworCWNoYW4tPnRpbWVyLmRhdGEgPSBkYXRhOworCXRhc2tsZXRfaW5pdCgmY2hhbi0+Y2xlYW51cF90YXNrLCBkZXZpY2UtPmNsZWFudXBfZm4sIGRhdGEpOwogCXRhc2tsZXRfZGlzYWJsZSgmY2hhbi0+Y2xlYW51cF90YXNrKTsKIH0KIAotc3RhdGljIHZvaWQgaW9hdDFfdGltZXJfZXZlbnQodW5zaWduZWQgbG9uZyBkYXRhKTsKLQogLyoqCiAgKiBpb2F0MV9kbWFfZW51bWVyYXRlX2NoYW5uZWxzIC0gZmluZCBhbmQgaW5pdGlhbGl6ZSB0aGUgZGV2aWNlJ3MgY2hhbm5lbHMKICAqIEBkZXZpY2U6IHRoZSBkZXZpY2UgdG8gYmUgZW51bWVyYXRlZApAQCAtMTU1LDEwICsxNDksNyBAQAogCQlpZiAoIWlvYXQpCiAJCQlicmVhazsKIAotCQlpb2F0X2luaXRfY2hhbm5lbChkZXZpY2UsICZpb2F0LT5iYXNlLCBpLAotCQkJCSAgaW9hdDFfdGltZXJfZXZlbnQsCi0JCQkJICBpb2F0MV9jbGVhbnVwX3Rhc2tsZXQsCi0JCQkJICAodW5zaWduZWQgbG9uZykgaW9hdCk7CisJCWlvYXRfaW5pdF9jaGFubmVsKGRldmljZSwgJmlvYXQtPmJhc2UsIGkpOwogCQlpb2F0LT54ZmVyY2FwID0geGZlcmNhcDsKIAkJc3Bpbl9sb2NrX2luaXQoJmlvYXQtPmRlc2NfbG9jayk7CiAJCUlOSVRfTElTVF9IRUFEKCZpb2F0LT5mcmVlX2Rlc2MpOwpAQCAtNTMyLDEyICs1MjMsMTIgQEAKIAlyZXR1cm4gJmRlc2MtPnR4ZDsKIH0KIAotc3RhdGljIHZvaWQgaW9hdDFfY2xlYW51cF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIGlvYXQxX2NsZWFudXBfZXZlbnQodW5zaWduZWQgbG9uZyBkYXRhKQogewotCXN0cnVjdCBpb2F0X2RtYV9jaGFuICpjaGFuID0gKHZvaWQgKilkYXRhOworCXN0cnVjdCBpb2F0X2RtYV9jaGFuICppb2F0ID0gdG9faW9hdF9jaGFuKCh2b2lkICopIGRhdGEpOwogCi0JaW9hdDFfY2xlYW51cChjaGFuKTsKLQl3cml0ZXcoSU9BVF9DSEFOQ1RSTF9SVU4sIGNoYW4tPmJhc2UucmVnX2Jhc2UgKyBJT0FUX0NIQU5DVFJMX09GRlNFVCk7CisJaW9hdDFfY2xlYW51cChpb2F0KTsKKwl3cml0ZXcoSU9BVF9DSEFOQ1RSTF9SVU4sIGlvYXQtPmJhc2UucmVnX2Jhc2UgKyBJT0FUX0NIQU5DVFJMX09GRlNFVCk7CiB9CiAKIHZvaWQgaW9hdF9kbWFfdW5tYXAoc3RydWN0IGlvYXRfY2hhbl9jb21tb24gKmNoYW4sIGVudW0gZG1hX2N0cmxfZmxhZ3MgZmxhZ3MsCkBAIC02ODcsNyArNjc4LDcgQEAKIAogc3RhdGljIHZvaWQgaW9hdDFfdGltZXJfZXZlbnQodW5zaWduZWQgbG9uZyBkYXRhKQogewotCXN0cnVjdCBpb2F0X2RtYV9jaGFuICppb2F0ID0gKHZvaWQgKikgZGF0YTsKKwlzdHJ1Y3QgaW9hdF9kbWFfY2hhbiAqaW9hdCA9IHRvX2lvYXRfY2hhbigodm9pZCAqKSBkYXRhKTsKIAlzdHJ1Y3QgaW9hdF9jaGFuX2NvbW1vbiAqY2hhbiA9ICZpb2F0LT5iYXNlOwogCiAJZGV2X2RiZyh0b19kZXYoY2hhbiksICIlczogc3RhdGU6ICVseFxuIiwgX19mdW5jX18sIGNoYW4tPnN0YXRlKTsKQEAgLTczNCwxNiArNzI1LDE3IEBACiAJc3Bpbl91bmxvY2tfYmgoJmNoYW4tPmNsZWFudXBfbG9jayk7CiB9CiAKLXN0YXRpYyBlbnVtIGRtYV9zdGF0dXMKLWlvYXQxX2RtYV9pc19jb21wbGV0ZShzdHJ1Y3QgZG1hX2NoYW4gKmMsIGRtYV9jb29raWVfdCBjb29raWUsCitlbnVtIGRtYV9zdGF0dXMKK2lvYXRfaXNfZG1hX2NvbXBsZXRlKHN0cnVjdCBkbWFfY2hhbiAqYywgZG1hX2Nvb2tpZV90IGNvb2tpZSwKIAkJICAgICAgZG1hX2Nvb2tpZV90ICpkb25lLCBkbWFfY29va2llX3QgKnVzZWQpCiB7Ci0Jc3RydWN0IGlvYXRfZG1hX2NoYW4gKmlvYXQgPSB0b19pb2F0X2NoYW4oYyk7CisJc3RydWN0IGlvYXRfY2hhbl9jb21tb24gKmNoYW4gPSB0b19jaGFuX2NvbW1vbihjKTsKKwlzdHJ1Y3QgaW9hdGRtYV9kZXZpY2UgKmRldmljZSA9IGNoYW4tPmRldmljZTsKIAogCWlmIChpb2F0X2lzX2NvbXBsZXRlKGMsIGNvb2tpZSwgZG9uZSwgdXNlZCkgPT0gRE1BX1NVQ0NFU1MpCiAJCXJldHVybiBETUFfU1VDQ0VTUzsKIAotCWlvYXQxX2NsZWFudXAoaW9hdCk7CisJZGV2aWNlLT5jbGVhbnVwX2ZuKCh1bnNpZ25lZCBsb25nKSBjKTsKIAogCXJldHVybiBpb2F0X2lzX2NvbXBsZXRlKGMsIGNvb2tpZSwgZG9uZSwgdXNlZCk7CiB9CkBAIC0xMTQ2LDcgKzExMzgsNyBAQAogCXJldHVybiBlbnRyeS0+c2hvdygmY2hhbi0+Y29tbW9uLCBwYWdlKTsKIH0KIAotc3RydWN0IHN5c2ZzX29wcyBpb2F0X3N5c2ZzX29wcyA9IHsKK2NvbnN0IHN0cnVjdCBzeXNmc19vcHMgaW9hdF9zeXNmc19vcHMgPSB7CiAJLnNob3cJPSBpb2F0X2F0dHJfc2hvdywKIH07CiAKQEAgLTExOTksMTIgKzExOTEsMTQgQEAKIAlkZXZpY2UtPmludHJfcXVpcmsgPSBpb2F0MV9pbnRyX3F1aXJrOwogCWRldmljZS0+ZW51bWVyYXRlX2NoYW5uZWxzID0gaW9hdDFfZW51bWVyYXRlX2NoYW5uZWxzOwogCWRldmljZS0+c2VsZl90ZXN0ID0gaW9hdF9kbWFfc2VsZl90ZXN0OworCWRldmljZS0+dGltZXJfZm4gPSBpb2F0MV90aW1lcl9ldmVudDsKKwlkZXZpY2UtPmNsZWFudXBfZm4gPSBpb2F0MV9jbGVhbnVwX2V2ZW50OwogCWRtYSA9ICZkZXZpY2UtPmNvbW1vbjsKIAlkbWEtPmRldmljZV9wcmVwX2RtYV9tZW1jcHkgPSBpb2F0MV9kbWFfcHJlcF9tZW1jcHk7CiAJZG1hLT5kZXZpY2VfaXNzdWVfcGVuZGluZyA9IGlvYXQxX2RtYV9tZW1jcHlfaXNzdWVfcGVuZGluZzsKIAlkbWEtPmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyA9IGlvYXQxX2RtYV9hbGxvY19jaGFuX3Jlc291cmNlczsKIAlkbWEtPmRldmljZV9mcmVlX2NoYW5fcmVzb3VyY2VzID0gaW9hdDFfZG1hX2ZyZWVfY2hhbl9yZXNvdXJjZXM7Ci0JZG1hLT5kZXZpY2VfaXNfdHhfY29tcGxldGUgPSBpb2F0MV9kbWFfaXNfY29tcGxldGU7CisJZG1hLT5kZXZpY2VfaXNfdHhfY29tcGxldGUgPSBpb2F0X2lzX2RtYV9jb21wbGV0ZTsKIAogCWVyciA9IGlvYXRfcHJvYmUoZGV2aWNlKTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdC9kbWEuaCBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hLmgKaW5kZXggYmJjM2U3OC4uODZiOTdhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdC9kbWEuaAorKysgYi9kcml2ZXJzL2RtYS9pb2F0L2RtYS5oCkBAIC02MSw3ICs2MSw3IEBACiAgKiBAaW50cl9xdWlyazogaW50ZXJydXB0IHNldHVwIHF1aXJrIChmb3IgaW9hdF92MSBkZXZpY2VzKQogICogQGVudW1lcmF0ZV9jaGFubmVsczogaHcgdmVyc2lvbiBzcGVjaWZpYyBjaGFubmVsIGVudW1lcmF0aW9uCiAgKiBAcmVzZXRfaHc6IGh3IHZlcnNpb24gc3BlY2lmaWMgY2hhbm5lbCAocmUpaW5pdGlhbGl6YXRpb24KLSAqIEBjbGVhbnVwX3Rhc2tsZXQ6IHNlbGVjdCBiZXR3ZWVuIHRoZSB2MiBhbmQgdjMgY2xlYW51cCByb3V0aW5lcworICogQGNsZWFudXBfZm46IHNlbGVjdCBiZXR3ZWVuIHRoZSB2MiBhbmQgdjMgY2xlYW51cCByb3V0aW5lcwogICogQHRpbWVyX2ZuOiBzZWxlY3QgYmV0d2VlbiB0aGUgdjIgYW5kIHYzIHRpbWVyIHdhdGNoZG9nIHJvdXRpbmVzCiAgKiBAc2VsZl90ZXN0OiBoYXJkd2FyZSB2ZXJzaW9uIHNwZWNpZmljIHNlbGYgdGVzdCBmb3IgZWFjaCBzdXBwb3J0ZWQgb3AgdHlwZQogICoKQEAgLTgwLDcgKzgwLDcgQEAKIAl2b2lkICgqaW50cl9xdWlyaykoc3RydWN0IGlvYXRkbWFfZGV2aWNlICpkZXZpY2UpOwogCWludCAoKmVudW1lcmF0ZV9jaGFubmVscykoc3RydWN0IGlvYXRkbWFfZGV2aWNlICpkZXZpY2UpOwogCWludCAoKnJlc2V0X2h3KShzdHJ1Y3QgaW9hdF9jaGFuX2NvbW1vbiAqY2hhbik7Ci0Jdm9pZCAoKmNsZWFudXBfdGFza2xldCkodW5zaWduZWQgbG9uZyBkYXRhKTsKKwl2b2lkICgqY2xlYW51cF9mbikodW5zaWduZWQgbG9uZyBkYXRhKTsKIAl2b2lkICgqdGltZXJfZm4pKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAJaW50ICgqc2VsZl90ZXN0KShzdHJ1Y3QgaW9hdGRtYV9kZXZpY2UgKmRldmljZSk7CiB9OwpAQCAtMzM3LDE3ICszMzcsMTYgQEAKIAkJCQkJICAgICAgdm9pZCBfX2lvbWVtICppb2Jhc2UpOwogdW5zaWduZWQgbG9uZyBpb2F0X2dldF9jdXJyZW50X2NvbXBsZXRpb24oc3RydWN0IGlvYXRfY2hhbl9jb21tb24gKmNoYW4pOwogdm9pZCBpb2F0X2luaXRfY2hhbm5lbChzdHJ1Y3QgaW9hdGRtYV9kZXZpY2UgKmRldmljZSwKLQkJICAgICAgIHN0cnVjdCBpb2F0X2NoYW5fY29tbW9uICpjaGFuLCBpbnQgaWR4LAotCQkgICAgICAgdm9pZCAoKnRpbWVyX2ZuKSh1bnNpZ25lZCBsb25nKSwKLQkJICAgICAgIHZvaWQgKCp0YXNrbGV0KSh1bnNpZ25lZCBsb25nKSwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgaW9hdCk7CisJCSAgICAgICBzdHJ1Y3QgaW9hdF9jaGFuX2NvbW1vbiAqY2hhbiwgaW50IGlkeCk7CitlbnVtIGRtYV9zdGF0dXMgaW9hdF9pc19kbWFfY29tcGxldGUoc3RydWN0IGRtYV9jaGFuICpjLCBkbWFfY29va2llX3QgY29va2llLAorCQkJCSAgICAgZG1hX2Nvb2tpZV90ICpkb25lLCBkbWFfY29va2llX3QgKnVzZWQpOwogdm9pZCBpb2F0X2RtYV91bm1hcChzdHJ1Y3QgaW9hdF9jaGFuX2NvbW1vbiAqY2hhbiwgZW51bSBkbWFfY3RybF9mbGFncyBmbGFncywKIAkJICAgIHNpemVfdCBsZW4sIHN0cnVjdCBpb2F0X2RtYV9kZXNjcmlwdG9yICpodyk7CiBib29sIGlvYXRfY2xlYW51cF9wcmVhbWJsZShzdHJ1Y3QgaW9hdF9jaGFuX2NvbW1vbiAqY2hhbiwKIAkJCSAgIHVuc2lnbmVkIGxvbmcgKnBoeXNfY29tcGxldGUpOwogdm9pZCBpb2F0X2tvYmplY3RfYWRkKHN0cnVjdCBpb2F0ZG1hX2RldmljZSAqZGV2aWNlLCBzdHJ1Y3Qga29ial90eXBlICp0eXBlKTsKIHZvaWQgaW9hdF9rb2JqZWN0X2RlbChzdHJ1Y3QgaW9hdGRtYV9kZXZpY2UgKmRldmljZSk7Ci1leHRlcm4gc3RydWN0IHN5c2ZzX29wcyBpb2F0X3N5c2ZzX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIGlvYXRfc3lzZnNfb3BzOwogZXh0ZXJuIHN0cnVjdCBpb2F0X3N5c2ZzX2VudHJ5IGlvYXRfdmVyc2lvbl9hdHRyOwogZXh0ZXJuIHN0cnVjdCBpb2F0X3N5c2ZzX2VudHJ5IGlvYXRfY2FwX2F0dHI7CiAjZW5kaWYgLyogSU9BVERNQV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0L2RtYV92Mi5jIGIvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjIuYwppbmRleCA1Y2MzN2FmLi4xZWQ1ZDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0L2RtYV92Mi5jCisrKyBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YyLmMKQEAgLTUxLDQ4ICs1MSw0MCBAQAogCiB2b2lkIF9faW9hdDJfaXNzdWVfcGVuZGluZyhzdHJ1Y3QgaW9hdDJfZG1hX2NoYW4gKmlvYXQpCiB7Ci0Jdm9pZCAqIF9faW9tZW0gcmVnX2Jhc2UgPSBpb2F0LT5iYXNlLnJlZ19iYXNlOworCXN0cnVjdCBpb2F0X2NoYW5fY29tbW9uICpjaGFuID0gJmlvYXQtPmJhc2U7CiAKLQlpb2F0LT5wZW5kaW5nID0gMDsKIAlpb2F0LT5kbWFjb3VudCArPSBpb2F0Ml9yaW5nX3BlbmRpbmcoaW9hdCk7CiAJaW9hdC0+aXNzdWVkID0gaW9hdC0+aGVhZDsKIAkvKiBtYWtlIGRlc2NyaXB0b3IgdXBkYXRlcyBnbG9iYWxseSB2aXNpYmxlIGJlZm9yZSBub3RpZnlpbmcgY2hhbm5lbCAqLwogCXdtYigpOwotCXdyaXRldyhpb2F0LT5kbWFjb3VudCwgcmVnX2Jhc2UgKyBJT0FUX0NIQU5fRE1BQ09VTlRfT0ZGU0VUKTsKLQlkZXZfZGJnKHRvX2RldigmaW9hdC0+YmFzZSksCisJd3JpdGV3KGlvYXQtPmRtYWNvdW50LCBjaGFuLT5yZWdfYmFzZSArIElPQVRfQ0hBTl9ETUFDT1VOVF9PRkZTRVQpOworCWRldl9kYmcodG9fZGV2KGNoYW4pLAogCQkiJXM6IGhlYWQ6ICUjeCB0YWlsOiAlI3ggaXNzdWVkOiAlI3ggY291bnQ6ICUjeFxuIiwKIAkJX19mdW5jX18sIGlvYXQtPmhlYWQsIGlvYXQtPnRhaWwsIGlvYXQtPmlzc3VlZCwgaW9hdC0+ZG1hY291bnQpOwogfQogCi12b2lkIGlvYXQyX2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9jaGFuICpjaGFuKQordm9pZCBpb2F0Ml9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqYykKIHsKLQlzdHJ1Y3QgaW9hdDJfZG1hX2NoYW4gKmlvYXQgPSB0b19pb2F0Ml9jaGFuKGNoYW4pOworCXN0cnVjdCBpb2F0Ml9kbWFfY2hhbiAqaW9hdCA9IHRvX2lvYXQyX2NoYW4oYyk7CiAKLQlzcGluX2xvY2tfYmgoJmlvYXQtPnJpbmdfbG9jayk7Ci0JaWYgKGlvYXQtPnBlbmRpbmcgPT0gMSkKKwlpZiAoaW9hdDJfcmluZ19wZW5kaW5nKGlvYXQpKSB7CisJCXNwaW5fbG9ja19iaCgmaW9hdC0+cmluZ19sb2NrKTsKIAkJX19pb2F0Ml9pc3N1ZV9wZW5kaW5nKGlvYXQpOwotCXNwaW5fdW5sb2NrX2JoKCZpb2F0LT5yaW5nX2xvY2spOworCQlzcGluX3VubG9ja19iaCgmaW9hdC0+cmluZ19sb2NrKTsKKwl9CiB9CiAKIC8qKgogICogaW9hdDJfdXBkYXRlX3BlbmRpbmcgLSBsb2cgcGVuZGluZyBkZXNjcmlwdG9ycwogICogQGlvYXQ6IGlvYXQyKyBjaGFubmVsCiAgKgotICogc2V0IHBlbmRpbmcgdG8gJzEnIHVubGVzcyBwZW5kaW5nIGlzIGFscmVhZHkgc2V0IHRvICcyJywgcGVuZGluZyA9PSAyCi0gKiBpbmRpY2F0ZXMgdGhhdCBzdWJtaXNzaW9uIGlzIHRlbXBvcmFyaWx5IGJsb2NrZWQgZHVlIHRvIGFuIGluLWZsaWdodAotICogcmVzZXQuICBJZiB3ZSBhcmUgYWxyZWFkeSBhYm92ZSB0aGUgaW9hdF9wZW5kaW5nX2xldmVsIHRocmVzaG9sZCB0aGVuCi0gKiBqdXN0IGlzc3VlIHBlbmRpbmcuCi0gKgotICogY2FsbGVkIHdpdGggcmluZ19sb2NrIGhlbGQKKyAqIENoZWNrIGlmIHRoZSBudW1iZXIgb2YgdW5zdWJtaXR0ZWQgZGVzY3JpcHRvcnMgaGFzIGV4Y2VlZGVkIHRoZQorICogd2F0ZXJtYXJrLiAgQ2FsbGVkIHdpdGggcmluZ19sb2NrIGhlbGQKICAqLwogc3RhdGljIHZvaWQgaW9hdDJfdXBkYXRlX3BlbmRpbmcoc3RydWN0IGlvYXQyX2RtYV9jaGFuICppb2F0KQogewotCWlmICh1bmxpa2VseShpb2F0LT5wZW5kaW5nID09IDIpKQotCQlyZXR1cm47Ci0JZWxzZSBpZiAoaW9hdDJfcmluZ19wZW5kaW5nKGlvYXQpID4gaW9hdF9wZW5kaW5nX2xldmVsKQorCWlmIChpb2F0Ml9yaW5nX3BlbmRpbmcoaW9hdCkgPiBpb2F0X3BlbmRpbmdfbGV2ZWwpCiAJCV9faW9hdDJfaXNzdWVfcGVuZGluZyhpb2F0KTsKLQllbHNlCi0JCWlvYXQtPnBlbmRpbmcgPSAxOwogfQogCiBzdGF0aWMgdm9pZCBfX2lvYXQyX3N0YXJ0X251bGxfZGVzYyhzdHJ1Y3QgaW9hdDJfZG1hX2NoYW4gKmlvYXQpCkBAIC0xNjYsNyArMTU4LDcgQEAKIAkJCXNlZW5fY3VycmVudCA9IHRydWU7CiAJfQogCWlvYXQtPnRhaWwgKz0gaTsKLQlCVUdfT04oIXNlZW5fY3VycmVudCk7IC8qIG5vIGFjdGl2ZSBkZXNjcyBoYXZlIHdyaXR0ZW4gYSBjb21wbGV0aW9uPyAqLworCUJVR19PTihhY3RpdmUgJiYgIXNlZW5fY3VycmVudCk7IC8qIG5vIGFjdGl2ZSBkZXNjcyBoYXZlIHdyaXR0ZW4gYSBjb21wbGV0aW9uPyAqLwogCiAJY2hhbi0+bGFzdF9jb21wbGV0aW9uID0gcGh5c19jb21wbGV0ZTsKIAlpZiAoaW9hdC0+aGVhZCA9PSBpb2F0LT50YWlsKSB7CkBAIC0yMDcsOSArMTk5LDkgQEAKIAlzcGluX3VubG9ja19iaCgmY2hhbi0+Y2xlYW51cF9sb2NrKTsKIH0KIAotdm9pZCBpb2F0Ml9jbGVhbnVwX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQordm9pZCBpb2F0Ml9jbGVhbnVwX2V2ZW50KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgaW9hdDJfZG1hX2NoYW4gKmlvYXQgPSAodm9pZCAqKSBkYXRhOworCXN0cnVjdCBpb2F0Ml9kbWFfY2hhbiAqaW9hdCA9IHRvX2lvYXQyX2NoYW4oKHZvaWQgKikgZGF0YSk7CiAKIAlpb2F0Ml9jbGVhbnVwKGlvYXQpOwogCXdyaXRldyhJT0FUX0NIQU5DVFJMX1JVTiwgaW9hdC0+YmFzZS5yZWdfYmFzZSArIElPQVRfQ0hBTkNUUkxfT0ZGU0VUKTsKQEAgLTI5MSw3ICsyODMsNyBAQAogCiB2b2lkIGlvYXQyX3RpbWVyX2V2ZW50KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgaW9hdDJfZG1hX2NoYW4gKmlvYXQgPSAodm9pZCAqKSBkYXRhOworCXN0cnVjdCBpb2F0Ml9kbWFfY2hhbiAqaW9hdCA9IHRvX2lvYXQyX2NoYW4oKHZvaWQgKikgZGF0YSk7CiAJc3RydWN0IGlvYXRfY2hhbl9jb21tb24gKmNoYW4gPSAmaW9hdC0+YmFzZTsKIAogCXNwaW5fbG9ja19iaCgmY2hhbi0+Y2xlYW51cF9sb2NrKTsKQEAgLTM5NywxMCArMzg5LDcgQEAKIAkJaWYgKCFpb2F0KQogCQkJYnJlYWs7CiAKLQkJaW9hdF9pbml0X2NoYW5uZWwoZGV2aWNlLCAmaW9hdC0+YmFzZSwgaSwKLQkJCQkgIGRldmljZS0+dGltZXJfZm4sCi0JCQkJICBkZXZpY2UtPmNsZWFudXBfdGFza2xldCwKLQkJCQkgICh1bnNpZ25lZCBsb25nKSBpb2F0KTsKKwkJaW9hdF9pbml0X2NoYW5uZWwoZGV2aWNlLCAmaW9hdC0+YmFzZSwgaSk7CiAJCWlvYXQtPnhmZXJjYXBfbG9nID0geGZlcmNhcF9sb2c7CiAJCXNwaW5fbG9ja19pbml0KCZpb2F0LT5yaW5nX2xvY2spOwogCQlpZiAoZGV2aWNlLT5yZXNldF9odygmaW9hdC0+YmFzZSkpIHsKQEAgLTU0Niw3ICs1MzUsNiBAQAogCWlvYXQtPmhlYWQgPSAwOwogCWlvYXQtPmlzc3VlZCA9IDA7CiAJaW9hdC0+dGFpbCA9IDA7Ci0JaW9hdC0+cGVuZGluZyA9IDA7CiAJaW9hdC0+YWxsb2Nfb3JkZXIgPSBvcmRlcjsKIAlzcGluX3VubG9ja19iaCgmaW9hdC0+cmluZ19sb2NrKTsKIApAQCAtNzAxLDcgKzY4OSw3IEBACiAKIAkJCW1vZF90aW1lcigmY2hhbi0+dGltZXIsIGppZmZpZXMgKyBDT01QTEVUSU9OX1RJTUVPVVQpOwogCQkJc3Bpbl91bmxvY2tfYmgoJmNoYW4tPmNsZWFudXBfbG9jayk7Ci0JCQlkZXZpY2UtPnRpbWVyX2ZuKCh1bnNpZ25lZCBsb25nKSBpb2F0KTsKKwkJCWRldmljZS0+dGltZXJfZm4oKHVuc2lnbmVkIGxvbmcpICZjaGFuLT5jb21tb24pOwogCQl9IGVsc2UKIAkJCXNwaW5fdW5sb2NrX2JoKCZjaGFuLT5jbGVhbnVwX2xvY2spOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTc4NSw3ICs3NzMsNyBAQAogCiAJdGFza2xldF9kaXNhYmxlKCZjaGFuLT5jbGVhbnVwX3Rhc2spOwogCWRlbF90aW1lcl9zeW5jKCZjaGFuLT50aW1lcik7Ci0JZGV2aWNlLT5jbGVhbnVwX3Rhc2tsZXQoKHVuc2lnbmVkIGxvbmcpIGlvYXQpOworCWRldmljZS0+Y2xlYW51cF9mbigodW5zaWduZWQgbG9uZykgYyk7CiAJZGV2aWNlLT5yZXNldF9odyhjaGFuKTsKIAogCXNwaW5fbG9ja19iaCgmaW9hdC0+cmluZ19sb2NrKTsKQEAgLTgxNSwyNSArODAzLDkgQEAKIAogCWNoYW4tPmxhc3RfY29tcGxldGlvbiA9IDA7CiAJY2hhbi0+Y29tcGxldGlvbl9kbWEgPSAwOwotCWlvYXQtPnBlbmRpbmcgPSAwOwogCWlvYXQtPmRtYWNvdW50ID0gMDsKIH0KIAotZW51bSBkbWFfc3RhdHVzCi1pb2F0Ml9pc19jb21wbGV0ZShzdHJ1Y3QgZG1hX2NoYW4gKmMsIGRtYV9jb29raWVfdCBjb29raWUsCi0JCSAgICAgZG1hX2Nvb2tpZV90ICpkb25lLCBkbWFfY29va2llX3QgKnVzZWQpCi17Ci0Jc3RydWN0IGlvYXQyX2RtYV9jaGFuICppb2F0ID0gdG9faW9hdDJfY2hhbihjKTsKLQlzdHJ1Y3QgaW9hdGRtYV9kZXZpY2UgKmRldmljZSA9IGlvYXQtPmJhc2UuZGV2aWNlOwotCi0JaWYgKGlvYXRfaXNfY29tcGxldGUoYywgY29va2llLCBkb25lLCB1c2VkKSA9PSBETUFfU1VDQ0VTUykKLQkJcmV0dXJuIERNQV9TVUNDRVNTOwotCi0JZGV2aWNlLT5jbGVhbnVwX3Rhc2tsZXQoKHVuc2lnbmVkIGxvbmcpIGlvYXQpOwotCi0JcmV0dXJuIGlvYXRfaXNfY29tcGxldGUoYywgY29va2llLCBkb25lLCB1c2VkKTsKLX0KLQogc3RhdGljIHNzaXplX3QgcmluZ19zaXplX3Nob3coc3RydWN0IGRtYV9jaGFuICpjLCBjaGFyICpwYWdlKQogewogCXN0cnVjdCBpb2F0Ml9kbWFfY2hhbiAqaW9hdCA9IHRvX2lvYXQyX2NoYW4oYyk7CkBAIC04NzQsNyArODQ2LDcgQEAKIAogCWRldmljZS0+ZW51bWVyYXRlX2NoYW5uZWxzID0gaW9hdDJfZW51bWVyYXRlX2NoYW5uZWxzOwogCWRldmljZS0+cmVzZXRfaHcgPSBpb2F0Ml9yZXNldF9odzsKLQlkZXZpY2UtPmNsZWFudXBfdGFza2xldCA9IGlvYXQyX2NsZWFudXBfdGFza2xldDsKKwlkZXZpY2UtPmNsZWFudXBfZm4gPSBpb2F0Ml9jbGVhbnVwX2V2ZW50OwogCWRldmljZS0+dGltZXJfZm4gPSBpb2F0Ml90aW1lcl9ldmVudDsKIAlkZXZpY2UtPnNlbGZfdGVzdCA9IGlvYXRfZG1hX3NlbGZfdGVzdDsKIAlkbWEgPSAmZGV2aWNlLT5jb21tb247CkBAIC04ODIsNyArODU0LDcgQEAKIAlkbWEtPmRldmljZV9pc3N1ZV9wZW5kaW5nID0gaW9hdDJfaXNzdWVfcGVuZGluZzsKIAlkbWEtPmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyA9IGlvYXQyX2FsbG9jX2NoYW5fcmVzb3VyY2VzOwogCWRtYS0+ZGV2aWNlX2ZyZWVfY2hhbl9yZXNvdXJjZXMgPSBpb2F0Ml9mcmVlX2NoYW5fcmVzb3VyY2VzOwotCWRtYS0+ZGV2aWNlX2lzX3R4X2NvbXBsZXRlID0gaW9hdDJfaXNfY29tcGxldGU7CisJZG1hLT5kZXZpY2VfaXNfdHhfY29tcGxldGUgPSBpb2F0X2lzX2RtYV9jb21wbGV0ZTsKIAogCWVyciA9IGlvYXRfcHJvYmUoZGV2aWNlKTsKIAlpZiAoZXJyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjIuaCBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YyLmgKaW5kZXggM2FmYWQ4ZC4uZWYyODcxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjIuaAorKysgYi9kcml2ZXJzL2RtYS9pb2F0L2RtYV92Mi5oCkBAIC00Nyw3ICs0Nyw2IEBACiAgKiBAaGVhZDogYWxsb2NhdGVkIGluZGV4CiAgKiBAaXNzdWVkOiBoYXJkd2FyZSBub3RpZmljYXRpb24gcG9pbnQKICAqIEB0YWlsOiBjbGVhbnVwIGluZGV4Ci0gKiBAcGVuZGluZzogbG9jayBmcmVlIGluZGljYXRvciBmb3IgaXNzdWVkICE9IGhlYWQKICAqIEBkbWFjb3VudDogaWRlbnRpY2FsIHRvICdoZWFkJyBleGNlcHQgZm9yIG9jY2FzaW9uYWxseSByZXNldHRpbmcgdG8gemVybwogICogQGFsbG9jX29yZGVyOiBsb2cyIG9mIHRoZSBudW1iZXIgb2YgYWxsb2NhdGVkIGRlc2NyaXB0b3JzCiAgKiBAcmluZzogc29mdHdhcmUgcmluZyBidWZmZXIgaW1wbGVtZW50YXRpb24gb2YgaGFyZHdhcmUgcmluZwpAQCAtNjEsNyArNjAsNiBAQAogCXUxNiB0YWlsOwogCXUxNiBkbWFjb3VudDsKIAl1MTYgYWxsb2Nfb3JkZXI7Ci0JaW50IHBlbmRpbmc7CiAJc3RydWN0IGlvYXRfcmluZ19lbnQgKipyaW5nOwogCXNwaW5sb2NrX3QgcmluZ19sb2NrOwogfTsKQEAgLTE3OCwxMiArMTc2LDEwIEBACiB2b2lkIGlvYXQyX2lzc3VlX3BlbmRpbmcoc3RydWN0IGRtYV9jaGFuICpjaGFuKTsKIGludCBpb2F0Ml9hbGxvY19jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmMpOwogdm9pZCBpb2F0Ml9mcmVlX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqYyk7Ci1lbnVtIGRtYV9zdGF0dXMgaW9hdDJfaXNfY29tcGxldGUoc3RydWN0IGRtYV9jaGFuICpjLCBkbWFfY29va2llX3QgY29va2llLAotCQkJCSAgZG1hX2Nvb2tpZV90ICpkb25lLCBkbWFfY29va2llX3QgKnVzZWQpOwogdm9pZCBfX2lvYXQyX3Jlc3RhcnRfY2hhbihzdHJ1Y3QgaW9hdDJfZG1hX2NoYW4gKmlvYXQpOwogYm9vbCByZXNoYXBlX3Jpbmcoc3RydWN0IGlvYXQyX2RtYV9jaGFuICppb2F0LCBpbnQgb3JkZXIpOwogdm9pZCBfX2lvYXQyX2lzc3VlX3BlbmRpbmcoc3RydWN0IGlvYXQyX2RtYV9jaGFuICppb2F0KTsKLXZvaWQgaW9hdDJfY2xlYW51cF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSk7Cit2b2lkIGlvYXQyX2NsZWFudXBfZXZlbnQodW5zaWduZWQgbG9uZyBkYXRhKTsKIHZvaWQgaW9hdDJfdGltZXJfZXZlbnQodW5zaWduZWQgbG9uZyBkYXRhKTsKIGludCBpb2F0Ml9xdWllc2NlKHN0cnVjdCBpb2F0X2NoYW5fY29tbW9uICpjaGFuLCB1bnNpZ25lZCBsb25nIHRtbyk7CiBpbnQgaW9hdDJfcmVzZXRfc3luYyhzdHJ1Y3QgaW9hdF9jaGFuX2NvbW1vbiAqY2hhbiwgdW5zaWduZWQgbG9uZyB0bW8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjMuYyBiL2RyaXZlcnMvZG1hL2lvYXQvZG1hX3YzLmMKaW5kZXggOTkwOGM5ZS4uMjZmZWJjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvaW9hdC9kbWFfdjMuYworKysgYi9kcml2ZXJzL2RtYS9pb2F0L2RtYV92My5jCkBAIC0yOTMsMTcgKzI5MywyNSBAQAogCQl9CiAJfQogCWlvYXQtPnRhaWwgKz0gaTsKLQlCVUdfT04oIXNlZW5fY3VycmVudCk7IC8qIG5vIGFjdGl2ZSBkZXNjcyBoYXZlIHdyaXR0ZW4gYSBjb21wbGV0aW9uPyAqLworCUJVR19PTihhY3RpdmUgJiYgIXNlZW5fY3VycmVudCk7IC8qIG5vIGFjdGl2ZSBkZXNjcyBoYXZlIHdyaXR0ZW4gYSBjb21wbGV0aW9uPyAqLwogCWNoYW4tPmxhc3RfY29tcGxldGlvbiA9IHBoeXNfY29tcGxldGU7Ci0JaWYgKGlvYXQtPmhlYWQgPT0gaW9hdC0+dGFpbCkgeworCisJYWN0aXZlID0gaW9hdDJfcmluZ19hY3RpdmUoaW9hdCk7CisJaWYgKGFjdGl2ZSA9PSAwKSB7CiAJCWRldl9kYmcodG9fZGV2KGNoYW4pLCAiJXM6IGNhbmNlbCBjb21wbGV0aW9uIHRpbWVvdXRcbiIsCiAJCQlfX2Z1bmNfXyk7CiAJCWNsZWFyX2JpdChJT0FUX0NPTVBMRVRJT05fUEVORElORywgJmNoYW4tPnN0YXRlKTsKIAkJbW9kX3RpbWVyKCZjaGFuLT50aW1lciwgamlmZmllcyArIElETEVfVElNRU9VVCk7CiAJfQorCS8qIDUgbWljcm9zZWNvbmQgZGVsYXkgcGVyIHBlbmRpbmcgZGVzY3JpcHRvciAqLworCXdyaXRldyhtaW4oKDUgKiBhY3RpdmUpLCBJT0FUX0lOVFJERUxBWV9NQVNLKSwKKwkgICAgICAgY2hhbi0+ZGV2aWNlLT5yZWdfYmFzZSArIElPQVRfSU5UUkRFTEFZX09GRlNFVCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlvYXQzX2NsZWFudXAoc3RydWN0IGlvYXQyX2RtYV9jaGFuICppb2F0KQorLyogdHJ5IHRvIGNsZWFudXAsIGJ1dCB5aWVsZCAodmlhIHNwaW5fdHJ5bG9jaykgdG8gaW5jb21pbmcgc3VibWlzc2lvbnMKKyAqIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgd2Ugd2lsbCBpbW1lZGlhdGVseSBwb2xsIGFnYWluIHNob3J0bHkKKyAqLworc3RhdGljIHZvaWQgaW9hdDNfY2xlYW51cF9wb2xsKHN0cnVjdCBpb2F0Ml9kbWFfY2hhbiAqaW9hdCkKIHsKIAlzdHJ1Y3QgaW9hdF9jaGFuX2NvbW1vbiAqY2hhbiA9ICZpb2F0LT5iYXNlOwogCXVuc2lnbmVkIGxvbmcgcGh5c19jb21wbGV0ZTsKQEAgLTMyOSwyOSArMzM3LDQxIEBACiAJc3Bpbl91bmxvY2tfYmgoJmNoYW4tPmNsZWFudXBfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIGlvYXQzX2NsZWFudXBfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpCisvKiBydW4gY2xlYW51cCBub3cgYmVjYXVzZSB3ZSBhbHJlYWR5IGRlbGF5ZWQgdGhlIGludGVycnVwdCB2aWEgSU5UUkRFTEFZICovCitzdGF0aWMgdm9pZCBpb2F0M19jbGVhbnVwX3N5bmMoc3RydWN0IGlvYXQyX2RtYV9jaGFuICppb2F0KQogewotCXN0cnVjdCBpb2F0Ml9kbWFfY2hhbiAqaW9hdCA9ICh2b2lkICopIGRhdGE7CisJc3RydWN0IGlvYXRfY2hhbl9jb21tb24gKmNoYW4gPSAmaW9hdC0+YmFzZTsKKwl1bnNpZ25lZCBsb25nIHBoeXNfY29tcGxldGU7CiAKLQlpb2F0M19jbGVhbnVwKGlvYXQpOwotCXdyaXRldyhJT0FUX0NIQU5DVFJMX1JVTiB8IElPQVQzX0NIQU5DVFJMX0NPTVBMX0RDQV9FTiwKLQkgICAgICAgaW9hdC0+YmFzZS5yZWdfYmFzZSArIElPQVRfQ0hBTkNUUkxfT0ZGU0VUKTsKKwlwcmVmZXRjaChjaGFuLT5jb21wbGV0aW9uKTsKKworCXNwaW5fbG9ja19iaCgmY2hhbi0+Y2xlYW51cF9sb2NrKTsKKwlpZiAoIWlvYXRfY2xlYW51cF9wcmVhbWJsZShjaGFuLCAmcGh5c19jb21wbGV0ZSkpIHsKKwkJc3Bpbl91bmxvY2tfYmgoJmNoYW4tPmNsZWFudXBfbG9jayk7CisJCXJldHVybjsKKwl9CisJc3Bpbl9sb2NrX2JoKCZpb2F0LT5yaW5nX2xvY2spOworCisJX19jbGVhbnVwKGlvYXQsIHBoeXNfY29tcGxldGUpOworCisJc3Bpbl91bmxvY2tfYmgoJmlvYXQtPnJpbmdfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmNoYW4tPmNsZWFudXBfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGlvYXQzX2NsZWFudXBfZXZlbnQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpb2F0Ml9kbWFfY2hhbiAqaW9hdCA9IHRvX2lvYXQyX2NoYW4oKHZvaWQgKikgZGF0YSk7CisKKwlpb2F0M19jbGVhbnVwX3N5bmMoaW9hdCk7CisJd3JpdGV3KElPQVRfQ0hBTkNUUkxfUlVOLCBpb2F0LT5iYXNlLnJlZ19iYXNlICsgSU9BVF9DSEFOQ1RSTF9PRkZTRVQpOwogfQogCiBzdGF0aWMgdm9pZCBpb2F0M19yZXN0YXJ0X2NoYW5uZWwoc3RydWN0IGlvYXQyX2RtYV9jaGFuICppb2F0KQogewogCXN0cnVjdCBpb2F0X2NoYW5fY29tbW9uICpjaGFuID0gJmlvYXQtPmJhc2U7CiAJdW5zaWduZWQgbG9uZyBwaHlzX2NvbXBsZXRlOwotCXUzMiBzdGF0dXM7CiAKLQlzdGF0dXMgPSBpb2F0X2NoYW5zdHMoY2hhbik7Ci0JaWYgKGlzX2lvYXRfYWN0aXZlKHN0YXR1cykgfHwgaXNfaW9hdF9pZGxlKHN0YXR1cykpCi0JCWlvYXRfc3VzcGVuZChjaGFuKTsKLQl3aGlsZSAoaXNfaW9hdF9hY3RpdmUoc3RhdHVzKSB8fCBpc19pb2F0X2lkbGUoc3RhdHVzKSkgewotCQlzdGF0dXMgPSBpb2F0X2NoYW5zdHMoY2hhbik7Ci0JCWNwdV9yZWxheCgpOwotCX0KLQorCWlvYXQyX3F1aWVzY2UoY2hhbiwgMCk7CiAJaWYgKGlvYXRfY2xlYW51cF9wcmVhbWJsZShjaGFuLCAmcGh5c19jb21wbGV0ZSkpCiAJCV9fY2xlYW51cChpb2F0LCBwaHlzX2NvbXBsZXRlKTsKIApAQCAtMzYwLDcgKzM4MCw3IEBACiAKIHN0YXRpYyB2b2lkIGlvYXQzX3RpbWVyX2V2ZW50KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLQlzdHJ1Y3QgaW9hdDJfZG1hX2NoYW4gKmlvYXQgPSAodm9pZCAqKSBkYXRhOworCXN0cnVjdCBpb2F0Ml9kbWFfY2hhbiAqaW9hdCA9IHRvX2lvYXQyX2NoYW4oKHZvaWQgKikgZGF0YSk7CiAJc3RydWN0IGlvYXRfY2hhbl9jb21tb24gKmNoYW4gPSAmaW9hdC0+YmFzZTsKIAogCXNwaW5fbG9ja19iaCgmY2hhbi0+Y2xlYW51cF9sb2NrKTsKQEAgLTQyNiw3ICs0NDYsNyBAQAogCWlmIChpb2F0X2lzX2NvbXBsZXRlKGMsIGNvb2tpZSwgZG9uZSwgdXNlZCkgPT0gRE1BX1NVQ0NFU1MpCiAJCXJldHVybiBETUFfU1VDQ0VTUzsKIAotCWlvYXQzX2NsZWFudXAoaW9hdCk7CisJaW9hdDNfY2xlYW51cF9wb2xsKGlvYXQpOwogCiAJcmV0dXJuIGlvYXRfaXNfY29tcGxldGUoYywgY29va2llLCBkb25lLCB1c2VkKTsKIH0KQEAgLTEyMzksMTEgKzEyNTksMTEgQEAKIAogCWlmIChpc19yYWlkX2RldmljZSkgewogCQlkbWEtPmRldmljZV9pc190eF9jb21wbGV0ZSA9IGlvYXQzX2lzX2NvbXBsZXRlOwotCQlkZXZpY2UtPmNsZWFudXBfdGFza2xldCA9IGlvYXQzX2NsZWFudXBfdGFza2xldDsKKwkJZGV2aWNlLT5jbGVhbnVwX2ZuID0gaW9hdDNfY2xlYW51cF9ldmVudDsKIAkJZGV2aWNlLT50aW1lcl9mbiA9IGlvYXQzX3RpbWVyX2V2ZW50OwogCX0gZWxzZSB7Ci0JCWRtYS0+ZGV2aWNlX2lzX3R4X2NvbXBsZXRlID0gaW9hdDJfaXNfY29tcGxldGU7Ci0JCWRldmljZS0+Y2xlYW51cF90YXNrbGV0ID0gaW9hdDJfY2xlYW51cF90YXNrbGV0OworCQlkbWEtPmRldmljZV9pc190eF9jb21wbGV0ZSA9IGlvYXRfaXNfZG1hX2NvbXBsZXRlOworCQlkZXZpY2UtPmNsZWFudXBfZm4gPSBpb2F0Ml9jbGVhbnVwX2V2ZW50OwogCQlkZXZpY2UtPnRpbWVyX2ZuID0gaW9hdDJfdGltZXJfZXZlbnQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9pb2F0L3JlZ2lzdGVycy5oIGIvZHJpdmVycy9kbWEvaW9hdC9yZWdpc3RlcnMuaAppbmRleCBlOGFlNjNiLi4xMzkxNzk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pb2F0L3JlZ2lzdGVycy5oCisrKyBiL2RyaXZlcnMvZG1hL2lvYXQvcmVnaXN0ZXJzLmgKQEAgLTYwLDcgKzYwLDcgQEAKICNkZWZpbmUgSU9BVF9QRVJQT1JUT0ZGU0VUX09GRlNFVAkJMHgwQQkvKiAxNi1iaXQgKi8KIAogI2RlZmluZSBJT0FUX0lOVFJERUxBWV9PRkZTRVQJCQkweDBDCS8qIDE2LWJpdCAqLwotI2RlZmluZSBJT0FUX0lOVFJERUxBWV9JTlRfREVMQVlfTUFTSwkJMHgzRkZGCS8qIEludGVycnVwdCBEZWxheSBUaW1lICovCisjZGVmaW5lIElPQVRfSU5UUkRFTEFZX01BU0sJCQkweDNGRkYJLyogSW50ZXJydXB0IERlbGF5IFRpbWUgKi8KICNkZWZpbmUgSU9BVF9JTlRSREVMQVlfQ09BTEVTRV9TVVBQT1JUCQkweDgwMDAJLyogSW50ZXJydXB0IENvYWxlc2NpbmcgU3VwcG9ydGVkICovCiAKICNkZWZpbmUgSU9BVF9ERVZJQ0VfU1RBVFVTX09GRlNFVAkJMHgwRQkvKiAxNi1iaXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZG1hL2lwdS9pcHVfaWRtYWMuYyBiL2RyaXZlcnMvZG1hL2lwdS9pcHVfaWRtYWMuYwppbmRleCBlODBiYWUxLi4yYTQ0NjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9pcHUvaXB1X2lkbWFjLmMKKysrIGIvZHJpdmVycy9kbWEvaXB1L2lwdV9pZG1hYy5jCkBAIC0zNDgsNiArMzQ4LDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBJUFVfUElYX0ZNVF9CR1JBMzI6CiAJY2FzZSBJUFVfUElYX0ZNVF9CR1IzMjoKKwljYXNlIElQVV9QSVhfRk1UX0FCR1IzMjoKIAkJcGFyYW1zLT5pcC5icHAJPSAwOwogCQlwYXJhbXMtPmlwLnBmcwk9IDQ7CiAJCXBhcmFtcy0+aXAubnBiCT0gNzsKQEAgLTM3NiwyMCArMzc3LDYgQEAKIAkJcGFyYW1zLT5pcC53aWQyCT0gNzsJCS8qIEJsdWUgYml0IHdpZHRoIC0gMSAqLwogCQlwYXJhbXMtPmlwLndpZDMJPSA3OwkJLyogQWxwaGEgYml0IHdpZHRoIC0gMSAqLwogCQlicmVhazsKLQljYXNlIElQVV9QSVhfRk1UX0FCR1IzMjoKLQkJcGFyYW1zLT5pcC5icHAJPSAwOwotCQlwYXJhbXMtPmlwLnBmcwk9IDQ7Ci0JCXBhcmFtcy0+aXAubnBiCT0gNzsKLQkJcGFyYW1zLT5pcC5zYXQJPSAyOwkJLyogU0FUID0gMzItYml0IGFjY2VzcyAqLwotCQlwYXJhbXMtPmlwLm9mczAJPSA4OwkJLyogUmVkIGJpdCBvZmZzZXQgKi8KLQkJcGFyYW1zLT5pcC5vZnMxCT0gMTY7CQkvKiBHcmVlbiBiaXQgb2Zmc2V0ICovCi0JCXBhcmFtcy0+aXAub2ZzMgk9IDI0OwkJLyogQmx1ZSBiaXQgb2Zmc2V0ICovCi0JCXBhcmFtcy0+aXAub2ZzMwk9IDA7CQkvKiBBbHBoYSBiaXQgb2Zmc2V0ICovCi0JCXBhcmFtcy0+aXAud2lkMAk9IDc7CQkvKiBSZWQgYml0IHdpZHRoIC0gMSAqLwotCQlwYXJhbXMtPmlwLndpZDEJPSA3OwkJLyogR3JlZW4gYml0IHdpZHRoIC0gMSAqLwotCQlwYXJhbXMtPmlwLndpZDIJPSA3OwkJLyogQmx1ZSBiaXQgd2lkdGggLSAxICovCi0JCXBhcmFtcy0+aXAud2lkMwk9IDc7CQkvKiBBbHBoYSBiaXQgd2lkdGggLSAxICovCi0JCWJyZWFrOwogCWNhc2UgSVBVX1BJWF9GTVRfVVlWWToKIAkJcGFyYW1zLT5pcC5icHAJPSAyOwogCQlwYXJhbXMtPmlwLnBmcwk9IDY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9tcGM1MTJ4X2RtYS5jIGIvZHJpdmVycy9kbWEvbXBjNTEyeF9kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmRmMWY0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9kbWEvbXBjNTEyeF9kbWEuYwpAQCAtMCwwICsxLDgwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgRnJlZXNjYWxlIFNlbWljb25kdXRvciwgSW5jLiAyMDA3LCAyMDA4LgorICogQ29weXJpZ2h0IChDKSBTZW1paGFsZiAyMDA5CisgKgorICogV3JpdHRlbiBieSBQaW90ciBaaWVjaWsgPGtvc21vQHNlbWloYWxmLmNvbT4uIEhhcmR3YXJlIGRlc2NyaXB0aW9uCisgKiAoZGVmaW5lcywgc3RydWN0dXJlcyBhbmQgY29tbWVudHMpIHdhcyB0YWtlbiBmcm9tIE1QQzUxMjEgRE1BIGRyaXZlcgorICogd3JpdHRlbiBieSBIb25nanVuIENoZW4gPGhvbmctanVuLmNoZW5AZnJlZXNjYWxlLmNvbT4uCisgKgorICogQXBwcm92ZWQgYXMgT1NBREwgcHJvamVjdCBieSBhIG1ham9yaXR5IG9mIE9TQURMIG1lbWJlcnMgYW5kIGZ1bmRlZAorICogYnkgT1NBREwgbWVtYmVyc2hpcCBmZWVzIGluIDIwMDk7ICBmb3IgZGV0YWlscyBzZWUgd3d3Lm9zYWRsLm9yZy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKKyAqIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5CisgKiBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbiB0aGUKKyAqIGZpbGUgY2FsbGVkIENPUFlJTkcuCisgKi8KKworLyoKKyAqIFRoaXMgaXMgaW5pdGlhbCB2ZXJzaW9uIG9mIE1QQzUxMjEgRE1BIGRyaXZlci4gT25seSBtZW1vcnkgdG8gbWVtb3J5CisgKiB0cmFuc2ZlcnMgYXJlIHN1cHBvcnRlZCAodGVzdGVkIHVzaW5nIGRtYXRlc3QgbW9kdWxlKS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZG1hZW5naW5lLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L29mX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKworLyogTnVtYmVyIG9mIERNQSBUcmFuc2ZlciBkZXNjcmlwdG9ycyBhbGxvY2F0ZWQgcGVyIGNoYW5uZWwgKi8KKyNkZWZpbmUgTVBDX0RNQV9ERVNDUklQVE9SUwk2NAorCisvKiBNYWNybyBkZWZpbml0aW9ucyAqLworI2RlZmluZSBNUENfRE1BX0NIQU5ORUxTCTY0CisjZGVmaW5lIE1QQ19ETUFfVENEX09GRlNFVAkweDEwMDAKKworLyogQXJiaXRyYXRpb24gbW9kZSBvZiBncm91cCBhbmQgY2hhbm5lbCAqLworI2RlZmluZSBNUENfRE1BX0RNQUNSX0VEQ0cJKDEgPDwgMzEpCisjZGVmaW5lIE1QQ19ETUFfRE1BQ1JfRVJHQQkoMSA8PCAzKQorI2RlZmluZSBNUENfRE1BX0RNQUNSX0VSQ0EJKDEgPDwgMikKKworLyogRXJyb3IgY29kZXMgKi8KKyNkZWZpbmUgTVBDX0RNQV9ETUFFU19WTEQJKDEgPDwgMzEpCisjZGVmaW5lIE1QQ19ETUFfRE1BRVNfR1BFCSgxIDw8IDE1KQorI2RlZmluZSBNUENfRE1BX0RNQUVTX0NQRQkoMSA8PCAxNCkKKyNkZWZpbmUgTVBDX0RNQV9ETUFFU19FUlJDSE4oZXJyKSBcCisJCQkJKCgoZXJyKSA+PiA4KSAmIDB4M2YpCisjZGVmaW5lIE1QQ19ETUFfRE1BRVNfU0FFCSgxIDw8IDcpCisjZGVmaW5lIE1QQ19ETUFfRE1BRVNfU09FCSgxIDw8IDYpCisjZGVmaW5lIE1QQ19ETUFfRE1BRVNfREFFCSgxIDw8IDUpCisjZGVmaW5lIE1QQ19ETUFfRE1BRVNfRE9FCSgxIDw8IDQpCisjZGVmaW5lIE1QQ19ETUFfRE1BRVNfTkNFCSgxIDw8IDMpCisjZGVmaW5lIE1QQ19ETUFfRE1BRVNfU0dFCSgxIDw8IDIpCisjZGVmaW5lIE1QQ19ETUFfRE1BRVNfU0JFCSgxIDw8IDEpCisjZGVmaW5lIE1QQ19ETUFfRE1BRVNfREJFCSgxIDw8IDApCisKKyNkZWZpbmUgTVBDX0RNQV9UU0laRV8xCQkweDAwCisjZGVmaW5lIE1QQ19ETUFfVFNJWkVfMgkJMHgwMQorI2RlZmluZSBNUENfRE1BX1RTSVpFXzQJCTB4MDIKKyNkZWZpbmUgTVBDX0RNQV9UU0laRV8xNgkweDA0CisjZGVmaW5lIE1QQ19ETUFfVFNJWkVfMzIJMHgwNQorCisvKiBNUEM1MTIxIERNQSBlbmdpbmUgcmVnaXN0ZXJzICovCitzdHJ1Y3QgX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSBtcGNfZG1hX3JlZ3MgeworCS8qIDB4MDAgKi8KKwl1MzIgZG1hY3I7CQkvKiBETUEgY29udHJvbCByZWdpc3RlciAqLworCXUzMiBkbWFlczsJCS8qIERNQSBlcnJvciBzdGF0dXMgKi8KKwkvKiAweDA4ICovCisJdTMyIGRtYWVycWg7CQkvKiBETUEgZW5hYmxlIHJlcXVlc3QgaGlnaChjaGFubmVscyA2M34zMikgKi8KKwl1MzIgZG1hZXJxbDsJCS8qIERNQSBlbmFibGUgcmVxdWVzdCBsb3coY2hhbm5lbHMgMzF+MCkgKi8KKwl1MzIgZG1hZWVpaDsJCS8qIERNQSBlbmFibGUgZXJyb3IgaW50ZXJydXB0IGhpZ2goY2g2M34zMikgKi8KKwl1MzIgZG1hZWVpbDsJCS8qIERNQSBlbmFibGUgZXJyb3IgaW50ZXJydXB0IGxvdyhjaDMxfjApICovCisJLyogMHgxOCAqLworCXU4IGRtYXNlcnE7CQkvKiBETUEgc2V0IGVuYWJsZSByZXF1ZXN0ICovCisJdTggZG1hY2VycTsJCS8qIERNQSBjbGVhciBlbmFibGUgcmVxdWVzdCAqLworCXU4IGRtYXNlZWk7CQkvKiBETUEgc2V0IGVuYWJsZSBlcnJvciBpbnRlcnJ1cHQgKi8KKwl1OCBkbWFjZWVpOwkJLyogRE1BIGNsZWFyIGVuYWJsZSBlcnJvciBpbnRlcnJ1cHQgKi8KKwkvKiAweDFjICovCisJdTggZG1hY2ludDsJCS8qIERNQSBjbGVhciBpbnRlcnJ1cHQgcmVxdWVzdCAqLworCXU4IGRtYWNlcnI7CQkvKiBETUEgY2xlYXIgZXJyb3IgKi8KKwl1OCBkbWFzc3J0OwkJLyogRE1BIHNldCBzdGFydCBiaXQgKi8KKwl1OCBkbWFjZG5lOwkJLyogRE1BIGNsZWFyIERPTkUgc3RhdHVzIGJpdCAqLworCS8qIDB4MjAgKi8KKwl1MzIgZG1haW50aDsJCS8qIERNQSBpbnRlcnJ1cHQgcmVxdWVzdCBoaWdoKGNoNjN+MzIpICovCisJdTMyIGRtYWludGw7CQkvKiBETUEgaW50ZXJydXB0IHJlcXVlc3QgbG93KGNoMzF+MCkgKi8KKwl1MzIgZG1hZXJyaDsJCS8qIERNQSBlcnJvciBoaWdoKGNoNjN+MzIpICovCisJdTMyIGRtYWVycmw7CQkvKiBETUEgZXJyb3IgbG93KGNoMzF+MCkgKi8KKwkvKiAweDMwICovCisJdTMyIGRtYWhyc2g7CQkvKiBETUEgaHcgcmVxdWVzdCBzdGF0dXMgaGlnaChjaDYzfjMyKSAqLworCXUzMiBkbWFocnNsOwkJLyogRE1BIGhhcmR3YXJlIHJlcXVlc3Qgc3RhdHVzIGxvdyhjaDMxfjApICovCisJdTMyIGRtYWloc2E7CQkvKiBETUEgaW50ZXJydXB0IGhpZ2ggc2VsZWN0IEFYRShjaDYzfjMyKSAqLworCXUzMiBkbWFpbHNhOwkJLyogRE1BIGludGVycnVwdCBsb3cgc2VsZWN0IEFYRShjaDMxfjApICovCisJLyogMHg0MCB+IDB4ZmYgKi8KKwl1MzIgcmVzZXJ2ZTBbNDhdOwkvKiBSZXNlcnZlZCAqLworCS8qIDB4MTAwICovCisJdTggZGNocHJpW01QQ19ETUFfQ0hBTk5FTFNdOworCS8qIERNQSBjaGFubmVscygwfjYzKSBwcmlvcml0eSAqLworfTsKKworc3RydWN0IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSkgbXBjX2RtYV90Y2QgeworCS8qIDB4MDAgKi8KKwl1MzIgc2FkZHI7CQkvKiBTb3VyY2UgYWRkcmVzcyAqLworCisJdTMyIHNtb2Q6NTsJCS8qIFNvdXJjZSBhZGRyZXNzIG1vZHVsbyAqLworCXUzMiBzc2l6ZTozOwkJLyogU291cmNlIGRhdGEgdHJhbnNmZXIgc2l6ZSAqLworCXUzMiBkbW9kOjU7CQkvKiBEZXN0aW5hdGlvbiBhZGRyZXNzIG1vZHVsbyAqLworCXUzMiBkc2l6ZTozOwkJLyogRGVzdGluYXRpb24gZGF0YSB0cmFuc2ZlciBzaXplICovCisJdTMyIHNvZmY6MTY7CQkvKiBTaWduZWQgc291cmNlIGFkZHJlc3Mgb2Zmc2V0ICovCisKKwkvKiAweDA4ICovCisJdTMyIG5ieXRlczsJCS8qIElubmVyICJtaW5vciIgYnl0ZSBjb3VudCAqLworCXUzMiBzbGFzdDsJCS8qIExhc3Qgc291cmNlIGFkZHJlc3MgYWRqdXN0bWVudCAqLworCXUzMiBkYWRkcjsJCS8qIERlc3RpbmF0aW9uIGFkZHJlc3MgKi8KKworCS8qIDB4MTQgKi8KKwl1MzIgY2l0ZXJfZWxpbms6MTsJLyogRW5hYmxlIGNoYW5uZWwtdG8tY2hhbm5lbCBsaW5raW5nIG9uCisJCQkJICogbWlub3IgbG9vcCBjb21wbGV0ZQorCQkJCSAqLworCXUzMiBjaXRlcl9saW5rY2g6NjsJLyogTGluayBjaGFubmVsIGZvciBtaW5vciBsb29wIGNvbXBsZXRlICovCisJdTMyIGNpdGVyOjk7CQkvKiBDdXJyZW50ICJtYWpvciIgaXRlcmF0aW9uIGNvdW50ICovCisJdTMyIGRvZmY6MTY7CQkvKiBTaWduZWQgZGVzdGluYXRpb24gYWRkcmVzcyBvZmZzZXQgKi8KKworCS8qIDB4MTggKi8KKwl1MzIgZGxhc3Rfc2dhOwkJLyogTGFzdCBEZXN0aW5hdGlvbiBhZGRyZXNzIGFkanVzdG1lbnQvc2NhdHRlcgorCQkJCSAqIGdhdGhlciBhZGRyZXNzCisJCQkJICovCisKKwkvKiAweDFjICovCisJdTMyIGJpdGVyX2VsaW5rOjE7CS8qIEVuYWJsZSBjaGFubmVsLXRvLWNoYW5uZWwgbGlua2luZyBvbiBtYWpvcgorCQkJCSAqIGxvb3AgY29tcGxldGUKKwkJCQkgKi8KKwl1MzIgYml0ZXJfbGlua2NoOjY7CisJdTMyIGJpdGVyOjk7CQkvKiBCZWdpbm5pbmcgIm1ham9yIiBpdGVyYXRpb24gY291bnQgKi8KKwl1MzIgYndjOjI7CQkvKiBCYW5kd2lkdGggY29udHJvbCAqLworCXUzMiBtYWpvcl9saW5rY2g6NjsJLyogTGluayBjaGFubmVsIG51bWJlciAqLworCXUzMiBkb25lOjE7CQkvKiBDaGFubmVsIGRvbmUgKi8KKwl1MzIgYWN0aXZlOjE7CQkvKiBDaGFubmVsIGFjdGl2ZSAqLworCXUzMiBtYWpvcl9lbGluazoxOwkvKiBFbmFibGUgY2hhbm5lbC10by1jaGFubmVsIGxpbmtpbmcgb24gbWFqb3IKKwkJCQkgKiBsb29wIGNvbXBsZXRlCisJCQkJICovCisJdTMyIGVfc2c6MTsJCS8qIEVuYWJsZSBzY2F0dGVyL2dhdGhlciBwcm9jZXNzaW5nICovCisJdTMyIGRfcmVxOjE7CQkvKiBEaXNhYmxlIHJlcXVlc3QgKi8KKwl1MzIgaW50X2hhbGY6MTsJCS8qIEVuYWJsZSBhbiBpbnRlcnJ1cHQgd2hlbiBtYWpvciBjb3VudGVyIGlzCisJCQkJICogaGFsZiBjb21wbGV0ZQorCQkJCSAqLworCXUzMiBpbnRfbWFqOjE7CQkvKiBFbmFibGUgYW4gaW50ZXJydXB0IHdoZW4gbWFqb3IgaXRlcmF0aW9uCisJCQkJICogY291bnQgY29tcGxldGVzCisJCQkJICovCisJdTMyIHN0YXJ0OjE7CQkvKiBDaGFubmVsIHN0YXJ0ICovCit9OworCitzdHJ1Y3QgbXBjX2RtYV9kZXNjIHsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IJZGVzYzsKKwlzdHJ1Y3QgbXBjX2RtYV90Y2QJCSp0Y2Q7CisJZG1hX2FkZHJfdAkJCXRjZF9wYWRkcjsKKwlpbnQJCQkJZXJyb3I7CisJc3RydWN0IGxpc3RfaGVhZAkJbm9kZTsKK307CisKK3N0cnVjdCBtcGNfZG1hX2NoYW4geworCXN0cnVjdCBkbWFfY2hhbgkJCWNoYW47CisJc3RydWN0IGxpc3RfaGVhZAkJZnJlZTsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlwcmVwYXJlZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkCQlxdWV1ZWQ7CisJc3RydWN0IGxpc3RfaGVhZAkJYWN0aXZlOworCXN0cnVjdCBsaXN0X2hlYWQJCWNvbXBsZXRlZDsKKwlzdHJ1Y3QgbXBjX2RtYV90Y2QJCSp0Y2Q7CisJZG1hX2FkZHJfdAkJCXRjZF9wYWRkcjsKKwlkbWFfY29va2llX3QJCQljb21wbGV0ZWRfY29va2llOworCisJLyogTG9jayBmb3IgdGhpcyBzdHJ1Y3R1cmUgKi8KKwlzcGlubG9ja190CQkJbG9jazsKK307CisKK3N0cnVjdCBtcGNfZG1hIHsKKwlzdHJ1Y3QgZG1hX2RldmljZQkJZG1hOworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdAkJdGFza2xldDsKKwlzdHJ1Y3QgbXBjX2RtYV9jaGFuCQljaGFubmVsc1tNUENfRE1BX0NIQU5ORUxTXTsKKwlzdHJ1Y3QgbXBjX2RtYV9yZWdzIF9faW9tZW0JKnJlZ3M7CisJc3RydWN0IG1wY19kbWFfdGNkIF9faW9tZW0JKnRjZDsKKwlpbnQJCQkJaXJxOworCXVpbnQJCQkJZXJyb3Jfc3RhdHVzOworCisJLyogTG9jayBmb3IgZXJyb3Jfc3RhdHVzIGZpZWxkIGluIHRoaXMgc3RydWN0dXJlICovCisJc3BpbmxvY2tfdAkJCWVycm9yX3N0YXR1c19sb2NrOworfTsKKworI2RlZmluZSBEUlZfTkFNRQkibXBjNTEyeF9kbWEiCisKKy8qIENvbnZlcnQgc3RydWN0IGRtYV9jaGFuIHRvIHN0cnVjdCBtcGNfZG1hX2NoYW4gKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1wY19kbWFfY2hhbiAqZG1hX2NoYW5fdG9fbXBjX2RtYV9jaGFuKHN0cnVjdCBkbWFfY2hhbiAqYykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGMsIHN0cnVjdCBtcGNfZG1hX2NoYW4sIGNoYW4pOworfQorCisvKiBDb252ZXJ0IHN0cnVjdCBkbWFfY2hhbiB0byBzdHJ1Y3QgbXBjX2RtYSAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgbXBjX2RtYSAqZG1hX2NoYW5fdG9fbXBjX2RtYShzdHJ1Y3QgZG1hX2NoYW4gKmMpCit7CisJc3RydWN0IG1wY19kbWFfY2hhbiAqbWNoYW4gPSBkbWFfY2hhbl90b19tcGNfZG1hX2NoYW4oYyk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihtY2hhbiwgc3RydWN0IG1wY19kbWEsIGNoYW5uZWxzW2MtPmNoYW5faWRdKTsKK30KKworLyoKKyAqIEV4ZWN1dGUgYWxsIHF1ZXVlZCBETUEgZGVzY3JpcHRvcnMuCisgKgorICogRm9sbG93aW5nIHJlcXVpcmVtZW50cyBtdXN0IGJlIG1ldCB3aGlsZSBjYWxsaW5nIG1wY19kbWFfZXhlY3V0ZSgpOgorICogCWEpIG1jaGFuLT5sb2NrIGlzIGFjcXVpcmVkLAorICogCWIpIG1jaGFuLT5hY3RpdmUgbGlzdCBpcyBlbXB0eSwKKyAqIAljKSBtY2hhbi0+cXVldWVkIGxpc3QgY29udGFpbnMgYXQgbGVhc3Qgb25lIGVudHJ5LgorICovCitzdGF0aWMgdm9pZCBtcGNfZG1hX2V4ZWN1dGUoc3RydWN0IG1wY19kbWFfY2hhbiAqbWNoYW4pCit7CisJc3RydWN0IG1wY19kbWEgKm1kbWEgPSBkbWFfY2hhbl90b19tcGNfZG1hKCZtY2hhbi0+Y2hhbik7CisJc3RydWN0IG1wY19kbWFfZGVzYyAqZmlyc3QgPSBOVUxMOworCXN0cnVjdCBtcGNfZG1hX2Rlc2MgKnByZXYgPSBOVUxMOworCXN0cnVjdCBtcGNfZG1hX2Rlc2MgKm1kZXNjOworCWludCBjaWQgPSBtY2hhbi0+Y2hhbi5jaGFuX2lkOworCisJLyogTW92ZSBhbGwgcXVldWVkIGRlc2NyaXB0b3JzIHRvIGFjdGl2ZSBsaXN0ICovCisJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZtY2hhbi0+cXVldWVkLCAmbWNoYW4tPmFjdGl2ZSk7CisKKwkvKiBDaGFpbiBkZXNjcmlwdG9ycyBpbnRvIG9uZSB0cmFuc2FjdGlvbiAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkobWRlc2MsICZtY2hhbi0+YWN0aXZlLCBub2RlKSB7CisJCWlmICghZmlyc3QpCisJCQlmaXJzdCA9IG1kZXNjOworCisJCWlmICghcHJldikgeworCQkJcHJldiA9IG1kZXNjOworCQkJY29udGludWU7CisJCX0KKworCQlwcmV2LT50Y2QtPmRsYXN0X3NnYSA9IG1kZXNjLT50Y2RfcGFkZHI7CisJCXByZXYtPnRjZC0+ZV9zZyA9IDE7CisJCW1kZXNjLT50Y2QtPnN0YXJ0ID0gMTsKKworCQlwcmV2ID0gbWRlc2M7CisJfQorCisJcHJldi0+dGNkLT5zdGFydCA9IDA7CisJcHJldi0+dGNkLT5pbnRfbWFqID0gMTsKKworCS8qIFNlbmQgZmlyc3QgZGVzY3JpcHRvciBpbiBjaGFpbiBpbnRvIGhhcmR3YXJlICovCisJbWVtY3B5X3RvaW8oJm1kbWEtPnRjZFtjaWRdLCBmaXJzdC0+dGNkLCBzaXplb2Yoc3RydWN0IG1wY19kbWFfdGNkKSk7CisJb3V0XzgoJm1kbWEtPnJlZ3MtPmRtYXNzcnQsIGNpZCk7Cit9CisKKy8qIEhhbmRsZSBpbnRlcnJ1cHQgb24gb25lIGhhbGYgb2YgRE1BIGNvbnRyb2xsZXIgKDMyIGNoYW5uZWxzKSAqLworc3RhdGljIHZvaWQgbXBjX2RtYV9pcnFfcHJvY2VzcyhzdHJ1Y3QgbXBjX2RtYSAqbWRtYSwgdTMyIGlzLCB1MzIgZXMsIGludCBvZmYpCit7CisJc3RydWN0IG1wY19kbWFfY2hhbiAqbWNoYW47CisJc3RydWN0IG1wY19kbWFfZGVzYyAqbWRlc2M7CisJdTMyIHN0YXR1cyA9IGlzIHwgZXM7CisJaW50IGNoOworCisJd2hpbGUgKChjaCA9IGZscyhzdGF0dXMpIC0gMSkgPj0gMCkgeworCQlzdGF0dXMgJj0gfigxIDw8IGNoKTsKKwkJbWNoYW4gPSAmbWRtYS0+Y2hhbm5lbHNbY2ggKyBvZmZdOworCisJCXNwaW5fbG9jaygmbWNoYW4tPmxvY2spOworCisJCS8qIENoZWNrIGVycm9yIHN0YXR1cyAqLworCQlpZiAoZXMgJiAoMSA8PCBjaCkpCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1kZXNjLCAmbWNoYW4tPmFjdGl2ZSwgbm9kZSkKKwkJCQltZGVzYy0+ZXJyb3IgPSAtRUlPOworCisJCS8qIEV4ZWN1dGUgcXVldWVkIGRlc2NyaXB0b3JzICovCisJCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmbWNoYW4tPmFjdGl2ZSwgJm1jaGFuLT5jb21wbGV0ZWQpOworCQlpZiAoIWxpc3RfZW1wdHkoJm1jaGFuLT5xdWV1ZWQpKQorCQkJbXBjX2RtYV9leGVjdXRlKG1jaGFuKTsKKworCQlzcGluX3VubG9jaygmbWNoYW4tPmxvY2spOworCX0KK30KKworLyogSW50ZXJydXB0IGhhbmRsZXIgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBtcGNfZG1hX2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtcGNfZG1hICptZG1hID0gZGF0YTsKKwl1aW50IGVzOworCisJLyogU2F2ZSBlcnJvciBzdGF0dXMgcmVnaXN0ZXIgKi8KKwllcyA9IGluX2JlMzIoJm1kbWEtPnJlZ3MtPmRtYWVzKTsKKwlzcGluX2xvY2soJm1kbWEtPmVycm9yX3N0YXR1c19sb2NrKTsKKwlpZiAoKGVzICYgTVBDX0RNQV9ETUFFU19WTEQpICYmIG1kbWEtPmVycm9yX3N0YXR1cyA9PSAwKQorCQltZG1hLT5lcnJvcl9zdGF0dXMgPSBlczsKKwlzcGluX3VubG9jaygmbWRtYS0+ZXJyb3Jfc3RhdHVzX2xvY2spOworCisJLyogSGFuZGxlIGludGVycnVwdCBvbiBlYWNoIGNoYW5uZWwgKi8KKwltcGNfZG1hX2lycV9wcm9jZXNzKG1kbWEsIGluX2JlMzIoJm1kbWEtPnJlZ3MtPmRtYWludGgpLAorCQkJCQlpbl9iZTMyKCZtZG1hLT5yZWdzLT5kbWFlcnJoKSwgMzIpOworCW1wY19kbWFfaXJxX3Byb2Nlc3MobWRtYSwgaW5fYmUzMigmbWRtYS0+cmVncy0+ZG1haW50bCksCisJCQkJCWluX2JlMzIoJm1kbWEtPnJlZ3MtPmRtYWVycmwpLCAwKTsKKworCS8qIEFjayBpbnRlcnJ1cHQgb24gYWxsIGNoYW5uZWxzICovCisJb3V0X2JlMzIoJm1kbWEtPnJlZ3MtPmRtYWludGgsIDB4RkZGRkZGRkYpOworCW91dF9iZTMyKCZtZG1hLT5yZWdzLT5kbWFpbnRsLCAweEZGRkZGRkZGKTsKKwlvdXRfYmUzMigmbWRtYS0+cmVncy0+ZG1hZXJyaCwgMHhGRkZGRkZGRik7CisJb3V0X2JlMzIoJm1kbWEtPnJlZ3MtPmRtYWVycmwsIDB4RkZGRkZGRkYpOworCisJLyogU2NoZWR1bGUgdGFza2xldCAqLworCXRhc2tsZXRfc2NoZWR1bGUoJm1kbWEtPnRhc2tsZXQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKiBETUEgVGFza2xldCAqLworc3RhdGljIHZvaWQgbXBjX2RtYV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbXBjX2RtYSAqbWRtYSA9ICh2b2lkICopZGF0YTsKKwlkbWFfY29va2llX3QgbGFzdF9jb29raWUgPSAwOworCXN0cnVjdCBtcGNfZG1hX2NoYW4gKm1jaGFuOworCXN0cnVjdCBtcGNfZG1hX2Rlc2MgKm1kZXNjOworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqZGVzYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUxJU1RfSEVBRChsaXN0KTsKKwl1aW50IGVzOworCWludCBpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1kbWEtPmVycm9yX3N0YXR1c19sb2NrLCBmbGFncyk7CisJZXMgPSBtZG1hLT5lcnJvcl9zdGF0dXM7CisJbWRtYS0+ZXJyb3Jfc3RhdHVzID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZG1hLT5lcnJvcl9zdGF0dXNfbG9jaywgZmxhZ3MpOworCisJLyogUHJpbnQgbmljZSBlcnJvciByZXBvcnQgKi8KKwlpZiAoZXMpIHsKKwkJZGV2X2VycihtZG1hLT5kbWEuZGV2LAorCQkJIkhhcmR3YXJlIHJlcG9ydGVkIGZvbGxvd2luZyBlcnJvcihzKSBvbiBjaGFubmVsICV1OlxuIiwKKwkJCQkJCSAgICAgIE1QQ19ETUFfRE1BRVNfRVJSQ0hOKGVzKSk7CisKKwkJaWYgKGVzICYgTVBDX0RNQV9ETUFFU19HUEUpCisJCQlkZXZfZXJyKG1kbWEtPmRtYS5kZXYsICItIEdyb3VwIFByaW9yaXR5IEVycm9yXG4iKTsKKwkJaWYgKGVzICYgTVBDX0RNQV9ETUFFU19DUEUpCisJCQlkZXZfZXJyKG1kbWEtPmRtYS5kZXYsICItIENoYW5uZWwgUHJpb3JpdHkgRXJyb3JcbiIpOworCQlpZiAoZXMgJiBNUENfRE1BX0RNQUVTX1NBRSkKKwkJCWRldl9lcnIobWRtYS0+ZG1hLmRldiwgIi0gU291cmNlIEFkZHJlc3MgRXJyb3JcbiIpOworCQlpZiAoZXMgJiBNUENfRE1BX0RNQUVTX1NPRSkKKwkJCWRldl9lcnIobWRtYS0+ZG1hLmRldiwgIi0gU291cmNlIE9mZnNldCIKKwkJCQkJCSIgQ29uZmlndXJhdGlvbiBFcnJvclxuIik7CisJCWlmIChlcyAmIE1QQ19ETUFfRE1BRVNfREFFKQorCQkJZGV2X2VycihtZG1hLT5kbWEuZGV2LCAiLSBEZXN0aW5hdGlvbiBBZGRyZXNzIgorCQkJCQkJCQkiIEVycm9yXG4iKTsKKwkJaWYgKGVzICYgTVBDX0RNQV9ETUFFU19ET0UpCisJCQlkZXZfZXJyKG1kbWEtPmRtYS5kZXYsICItIERlc3RpbmF0aW9uIE9mZnNldCIKKwkJCQkJCSIgQ29uZmlndXJhdGlvbiBFcnJvclxuIik7CisJCWlmIChlcyAmIE1QQ19ETUFfRE1BRVNfTkNFKQorCQkJZGV2X2VycihtZG1hLT5kbWEuZGV2LCAiLSBOQnl0ZXMvQ2l0dGVyIgorCQkJCQkJIiBDb25maWd1cmF0aW9uIEVycm9yXG4iKTsKKwkJaWYgKGVzICYgTVBDX0RNQV9ETUFFU19TR0UpCisJCQlkZXZfZXJyKG1kbWEtPmRtYS5kZXYsICItIFNjYXR0ZXIvR2F0aGVyIgorCQkJCQkJIiBDb25maWd1cmF0aW9uIEVycm9yXG4iKTsKKwkJaWYgKGVzICYgTVBDX0RNQV9ETUFFU19TQkUpCisJCQlkZXZfZXJyKG1kbWEtPmRtYS5kZXYsICItIFNvdXJjZSBCdXMgRXJyb3JcbiIpOworCQlpZiAoZXMgJiBNUENfRE1BX0RNQUVTX0RCRSkKKwkJCWRldl9lcnIobWRtYS0+ZG1hLmRldiwgIi0gRGVzdGluYXRpb24gQnVzIEVycm9yXG4iKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbWRtYS0+ZG1hLmNoYW5jbnQ7IGkrKykgeworCQltY2hhbiA9ICZtZG1hLT5jaGFubmVsc1tpXTsKKworCQkvKiBHZXQgYWxsIGNvbXBsZXRlZCBkZXNjcmlwdG9ycyAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWNoYW4tPmxvY2ssIGZsYWdzKTsKKwkJaWYgKCFsaXN0X2VtcHR5KCZtY2hhbi0+Y29tcGxldGVkKSkKKwkJCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmbWNoYW4tPmNvbXBsZXRlZCwgJmxpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2hhbi0+bG9jaywgZmxhZ3MpOworCisJCWlmIChsaXN0X2VtcHR5KCZsaXN0KSkKKwkJCWNvbnRpbnVlOworCisJCS8qIEV4ZWN1dGUgY2FsbGJhY2tzIGFuZCBydW4gZGVwZW5kZW5jaWVzICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnkobWRlc2MsICZsaXN0LCBub2RlKSB7CisJCQlkZXNjID0gJm1kZXNjLT5kZXNjOworCisJCQlpZiAoZGVzYy0+Y2FsbGJhY2spCisJCQkJZGVzYy0+Y2FsbGJhY2soZGVzYy0+Y2FsbGJhY2tfcGFyYW0pOworCisJCQlsYXN0X2Nvb2tpZSA9IGRlc2MtPmNvb2tpZTsKKwkJCWRtYV9ydW5fZGVwZW5kZW5jaWVzKGRlc2MpOworCQl9CisKKwkJLyogRnJlZSBkZXNjcmlwdG9ycyAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWNoYW4tPmxvY2ssIGZsYWdzKTsKKwkJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZsaXN0LCAmbWNoYW4tPmZyZWUpOworCQltY2hhbi0+Y29tcGxldGVkX2Nvb2tpZSA9IGxhc3RfY29va2llOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2hhbi0+bG9jaywgZmxhZ3MpOworCX0KK30KKworLyogU3VibWl0IGRlc2NyaXB0b3IgdG8gaGFyZHdhcmUgKi8KK3N0YXRpYyBkbWFfY29va2llX3QgbXBjX2RtYV90eF9zdWJtaXQoc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eGQpCit7CisJc3RydWN0IG1wY19kbWFfY2hhbiAqbWNoYW4gPSBkbWFfY2hhbl90b19tcGNfZG1hX2NoYW4odHhkLT5jaGFuKTsKKwlzdHJ1Y3QgbXBjX2RtYV9kZXNjICptZGVzYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWRtYV9jb29raWVfdCBjb29raWU7CisKKwltZGVzYyA9IGNvbnRhaW5lcl9vZih0eGQsIHN0cnVjdCBtcGNfZG1hX2Rlc2MsIGRlc2MpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1jaGFuLT5sb2NrLCBmbGFncyk7CisKKwkvKiBNb3ZlIGRlc2NyaXB0b3IgdG8gcXVldWUgKi8KKwlsaXN0X21vdmVfdGFpbCgmbWRlc2MtPm5vZGUsICZtY2hhbi0+cXVldWVkKTsKKworCS8qIElmIGNoYW5uZWwgaXMgaWRsZSwgZXhlY3V0ZSBhbGwgcXVldWVkIGRlc2NyaXB0b3JzICovCisJaWYgKGxpc3RfZW1wdHkoJm1jaGFuLT5hY3RpdmUpKQorCQltcGNfZG1hX2V4ZWN1dGUobWNoYW4pOworCisJLyogVXBkYXRlIGNvb2tpZSAqLworCWNvb2tpZSA9IG1jaGFuLT5jaGFuLmNvb2tpZSArIDE7CisJaWYgKGNvb2tpZSA8PSAwKQorCQljb29raWUgPSAxOworCisJbWNoYW4tPmNoYW4uY29va2llID0gY29va2llOworCW1kZXNjLT5kZXNjLmNvb2tpZSA9IGNvb2tpZTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jaGFuLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gY29va2llOworfQorCisvKiBBbGxvYyBjaGFubmVsIHJlc291cmNlcyAqLworc3RhdGljIGludCBtcGNfZG1hX2FsbG9jX2NoYW5fcmVzb3VyY2VzKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwlzdHJ1Y3QgbXBjX2RtYSAqbWRtYSA9IGRtYV9jaGFuX3RvX21wY19kbWEoY2hhbik7CisJc3RydWN0IG1wY19kbWFfY2hhbiAqbWNoYW4gPSBkbWFfY2hhbl90b19tcGNfZG1hX2NoYW4oY2hhbik7CisJc3RydWN0IG1wY19kbWFfZGVzYyAqbWRlc2M7CisJc3RydWN0IG1wY19kbWFfdGNkICp0Y2Q7CisJZG1hX2FkZHJfdCB0Y2RfcGFkZHI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlMSVNUX0hFQUQoZGVzY3MpOworCWludCBpOworCisJLyogQWxsb2MgRE1BIG1lbW9yeSBmb3IgVHJhbnNmZXIgQ29udHJvbCBEZXNjcmlwdG9ycyAqLworCXRjZCA9IGRtYV9hbGxvY19jb2hlcmVudChtZG1hLT5kbWEuZGV2LAorCQkJTVBDX0RNQV9ERVNDUklQVE9SUyAqIHNpemVvZihzdHJ1Y3QgbXBjX2RtYV90Y2QpLAorCQkJCQkJCSZ0Y2RfcGFkZHIsIEdGUF9LRVJORUwpOworCWlmICghdGNkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIEFsbG9jIGRlc2NyaXB0b3JzIGZvciB0aGlzIGNoYW5uZWwgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTVBDX0RNQV9ERVNDUklQVE9SUzsgaSsrKSB7CisJCW1kZXNjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1wY19kbWFfZGVzYyksIEdGUF9LRVJORUwpOworCQlpZiAoIW1kZXNjKSB7CisJCQlkZXZfbm90aWNlKG1kbWEtPmRtYS5kZXYsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvci4gIgorCQkJCQkiQWxsb2NhdGVkIG9ubHkgJXUgZGVzY3JpcHRvcnNcbiIsIGkpOworCQkJYnJlYWs7CisJCX0KKworCQlkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcl9pbml0KCZtZGVzYy0+ZGVzYywgY2hhbik7CisJCW1kZXNjLT5kZXNjLmZsYWdzID0gRE1BX0NUUkxfQUNLOworCQltZGVzYy0+ZGVzYy50eF9zdWJtaXQgPSBtcGNfZG1hX3R4X3N1Ym1pdDsKKworCQltZGVzYy0+dGNkID0gJnRjZFtpXTsKKwkJbWRlc2MtPnRjZF9wYWRkciA9IHRjZF9wYWRkciArIChpICogc2l6ZW9mKHN0cnVjdCBtcGNfZG1hX3RjZCkpOworCisJCWxpc3RfYWRkX3RhaWwoJm1kZXNjLT5ub2RlLCAmZGVzY3MpOworCX0KKworCS8qIFJldHVybiBlcnJvciBvbmx5IGlmIG5vIGRlc2NyaXB0b3JzIHdlcmUgYWxsb2NhdGVkICovCisJaWYgKGkgPT0gMCkgeworCQlkbWFfZnJlZV9jb2hlcmVudChtZG1hLT5kbWEuZGV2LAorCQkJTVBDX0RNQV9ERVNDUklQVE9SUyAqIHNpemVvZihzdHJ1Y3QgbXBjX2RtYV90Y2QpLAorCQkJCQkJCQl0Y2QsIHRjZF9wYWRkcik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZtY2hhbi0+bG9jaywgZmxhZ3MpOworCW1jaGFuLT50Y2QgPSB0Y2Q7CisJbWNoYW4tPnRjZF9wYWRkciA9IHRjZF9wYWRkcjsKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoJmRlc2NzLCAmbWNoYW4tPmZyZWUpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1jaGFuLT5sb2NrLCBmbGFncyk7CisKKwkvKiBFbmFibGUgRXJyb3IgSW50ZXJydXB0ICovCisJb3V0XzgoJm1kbWEtPnJlZ3MtPmRtYXNlZWksIGNoYW4tPmNoYW5faWQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIEZyZWUgY2hhbm5lbCByZXNvdXJjZXMgKi8KK3N0YXRpYyB2b2lkIG1wY19kbWFfZnJlZV9jaGFuX3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4pCit7CisJc3RydWN0IG1wY19kbWEgKm1kbWEgPSBkbWFfY2hhbl90b19tcGNfZG1hKGNoYW4pOworCXN0cnVjdCBtcGNfZG1hX2NoYW4gKm1jaGFuID0gZG1hX2NoYW5fdG9fbXBjX2RtYV9jaGFuKGNoYW4pOworCXN0cnVjdCBtcGNfZG1hX2Rlc2MgKm1kZXNjLCAqdG1wOworCXN0cnVjdCBtcGNfZG1hX3RjZCAqdGNkOworCWRtYV9hZGRyX3QgdGNkX3BhZGRyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJTElTVF9IRUFEKGRlc2NzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZtY2hhbi0+bG9jaywgZmxhZ3MpOworCisJLyogQ2hhbm5lbCBtdXN0IGJlIGlkbGUgKi8KKwlCVUdfT04oIWxpc3RfZW1wdHkoJm1jaGFuLT5wcmVwYXJlZCkpOworCUJVR19PTighbGlzdF9lbXB0eSgmbWNoYW4tPnF1ZXVlZCkpOworCUJVR19PTighbGlzdF9lbXB0eSgmbWNoYW4tPmFjdGl2ZSkpOworCUJVR19PTighbGlzdF9lbXB0eSgmbWNoYW4tPmNvbXBsZXRlZCkpOworCisJLyogTW92ZSBkYXRhICovCisJbGlzdF9zcGxpY2VfdGFpbF9pbml0KCZtY2hhbi0+ZnJlZSwgJmRlc2NzKTsKKwl0Y2QgPSBtY2hhbi0+dGNkOworCXRjZF9wYWRkciA9IG1jaGFuLT50Y2RfcGFkZHI7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2hhbi0+bG9jaywgZmxhZ3MpOworCisJLyogRnJlZSBETUEgbWVtb3J5IHVzZWQgYnkgZGVzY3JpcHRvcnMgKi8KKwlkbWFfZnJlZV9jb2hlcmVudChtZG1hLT5kbWEuZGV2LAorCQkJTVBDX0RNQV9ERVNDUklQVE9SUyAqIHNpemVvZihzdHJ1Y3QgbXBjX2RtYV90Y2QpLAorCQkJCQkJCQl0Y2QsIHRjZF9wYWRkcik7CisKKwkvKiBGcmVlIGRlc2NyaXB0b3JzICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1kZXNjLCB0bXAsICZkZXNjcywgbm9kZSkKKwkJa2ZyZWUobWRlc2MpOworCisJLyogRGlzYWJsZSBFcnJvciBJbnRlcnJ1cHQgKi8KKwlvdXRfOCgmbWRtYS0+cmVncy0+ZG1hY2VlaSwgY2hhbi0+Y2hhbl9pZCk7Cit9CisKKy8qIFNlbmQgYWxsIHBlbmRpbmcgZGVzY3JpcHRvciB0byBoYXJkd2FyZSAqLworc3RhdGljIHZvaWQgbXBjX2RtYV9pc3N1ZV9wZW5kaW5nKHN0cnVjdCBkbWFfY2hhbiAqY2hhbikKK3sKKwkvKgorCSAqIFdlIGFyZSBwb3N0aW5nIGRlc2NyaXB0b3JzIHRvIHRoZSBoYXJkd2FyZSBhcyBzb29uIGFzCisJICogdGhleSBhcmUgcmVhZHksIHNvIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLgorCSAqLworfQorCisvKiBDaGVjayByZXF1ZXN0IGNvbXBsZXRpb24gc3RhdHVzICovCitzdGF0aWMgZW51bSBkbWFfc3RhdHVzCittcGNfZG1hX2lzX3R4X2NvbXBsZXRlKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgZG1hX2Nvb2tpZV90IGNvb2tpZSwKKwkJCQkJZG1hX2Nvb2tpZV90ICpkb25lLCBkbWFfY29va2llX3QgKnVzZWQpCit7CisJc3RydWN0IG1wY19kbWFfY2hhbiAqbWNoYW4gPSBkbWFfY2hhbl90b19tcGNfZG1hX2NoYW4oY2hhbik7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlkbWFfY29va2llX3QgbGFzdF91c2VkOworCWRtYV9jb29raWVfdCBsYXN0X2NvbXBsZXRlOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1jaGFuLT5sb2NrLCBmbGFncyk7CisJbGFzdF91c2VkID0gbWNoYW4tPmNoYW4uY29va2llOworCWxhc3RfY29tcGxldGUgPSBtY2hhbi0+Y29tcGxldGVkX2Nvb2tpZTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2hhbi0+bG9jaywgZmxhZ3MpOworCisJaWYgKGRvbmUpCisJCSpkb25lID0gbGFzdF9jb21wbGV0ZTsKKworCWlmICh1c2VkKQorCQkqdXNlZCA9IGxhc3RfdXNlZDsKKworCXJldHVybiBkbWFfYXN5bmNfaXNfY29tcGxldGUoY29va2llLCBsYXN0X2NvbXBsZXRlLCBsYXN0X3VzZWQpOworfQorCisvKiBQcmVwYXJlIGRlc2NyaXB0b3IgZm9yIG1lbW9yeSB0byBtZW1vcnkgY29weSAqLworc3RhdGljIHN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqCittcGNfZG1hX3ByZXBfbWVtY3B5KHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgZG1hX2FkZHJfdCBkc3QsIGRtYV9hZGRyX3Qgc3JjLAorCQkJCQlzaXplX3QgbGVuLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBtcGNfZG1hX2NoYW4gKm1jaGFuID0gZG1hX2NoYW5fdG9fbXBjX2RtYV9jaGFuKGNoYW4pOworCXN0cnVjdCBtcGNfZG1hX2Rlc2MgKm1kZXNjID0gTlVMTDsKKwlzdHJ1Y3QgbXBjX2RtYV90Y2QgKnRjZDsKKwl1bnNpZ25lZCBsb25nIGlmbGFnczsKKworCS8qIEdldCBmcmVlIGRlc2NyaXB0b3IgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWNoYW4tPmxvY2ssIGlmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZtY2hhbi0+ZnJlZSkpIHsKKwkJbWRlc2MgPSBsaXN0X2ZpcnN0X2VudHJ5KCZtY2hhbi0+ZnJlZSwgc3RydWN0IG1wY19kbWFfZGVzYywKKwkJCQkJCQkJCW5vZGUpOworCQlsaXN0X2RlbCgmbWRlc2MtPm5vZGUpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2hhbi0+bG9jaywgaWZsYWdzKTsKKworCWlmICghbWRlc2MpCisJCXJldHVybiBOVUxMOworCisJbWRlc2MtPmVycm9yID0gMDsKKwl0Y2QgPSBtZGVzYy0+dGNkOworCisJLyogUHJlcGFyZSBUcmFuc2ZlciBDb250cm9sIERlc2NyaXB0b3IgZm9yIHRoaXMgdHJhbnNhY3Rpb24gKi8KKwltZW1zZXQodGNkLCAwLCBzaXplb2Yoc3RydWN0IG1wY19kbWFfdGNkKSk7CisKKwlpZiAoSVNfQUxJR05FRChzcmMgfCBkc3QgfCBsZW4sIDMyKSkgeworCQl0Y2QtPnNzaXplID0gTVBDX0RNQV9UU0laRV8zMjsKKwkJdGNkLT5kc2l6ZSA9IE1QQ19ETUFfVFNJWkVfMzI7CisJCXRjZC0+c29mZiA9IDMyOworCQl0Y2QtPmRvZmYgPSAzMjsKKwl9IGVsc2UgaWYgKElTX0FMSUdORUQoc3JjIHwgZHN0IHwgbGVuLCAxNikpIHsKKwkJdGNkLT5zc2l6ZSA9IE1QQ19ETUFfVFNJWkVfMTY7CisJCXRjZC0+ZHNpemUgPSBNUENfRE1BX1RTSVpFXzE2OworCQl0Y2QtPnNvZmYgPSAxNjsKKwkJdGNkLT5kb2ZmID0gMTY7CisJfSBlbHNlIGlmIChJU19BTElHTkVEKHNyYyB8IGRzdCB8IGxlbiwgNCkpIHsKKwkJdGNkLT5zc2l6ZSA9IE1QQ19ETUFfVFNJWkVfNDsKKwkJdGNkLT5kc2l6ZSA9IE1QQ19ETUFfVFNJWkVfNDsKKwkJdGNkLT5zb2ZmID0gNDsKKwkJdGNkLT5kb2ZmID0gNDsKKwl9IGVsc2UgaWYgKElTX0FMSUdORUQoc3JjIHwgZHN0IHwgbGVuLCAyKSkgeworCQl0Y2QtPnNzaXplID0gTVBDX0RNQV9UU0laRV8yOworCQl0Y2QtPmRzaXplID0gTVBDX0RNQV9UU0laRV8yOworCQl0Y2QtPnNvZmYgPSAyOworCQl0Y2QtPmRvZmYgPSAyOworCX0gZWxzZSB7CisJCXRjZC0+c3NpemUgPSBNUENfRE1BX1RTSVpFXzE7CisJCXRjZC0+ZHNpemUgPSBNUENfRE1BX1RTSVpFXzE7CisJCXRjZC0+c29mZiA9IDE7CisJCXRjZC0+ZG9mZiA9IDE7CisJfQorCisJdGNkLT5zYWRkciA9IHNyYzsKKwl0Y2QtPmRhZGRyID0gZHN0OworCXRjZC0+bmJ5dGVzID0gbGVuOworCXRjZC0+Yml0ZXIgPSAxOworCXRjZC0+Y2l0ZXIgPSAxOworCisJLyogUGxhY2UgZGVzY3JpcHRvciBpbiBwcmVwYXJlZCBsaXN0ICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1jaGFuLT5sb2NrLCBpZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJm1kZXNjLT5ub2RlLCAmbWNoYW4tPnByZXBhcmVkKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtY2hhbi0+bG9jaywgaWZsYWdzKTsKKworCXJldHVybiAmbWRlc2MtPmRlc2M7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1wY19kbWFfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb3AsCisJCQkJCWNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4gPSBvcC0+bm9kZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmb3AtPmRldjsKKwlzdHJ1Y3QgZG1hX2RldmljZSAqZG1hOworCXN0cnVjdCBtcGNfZG1hICptZG1hOworCXN0cnVjdCBtcGNfZG1hX2NoYW4gKm1jaGFuOworCXN0cnVjdCByZXNvdXJjZSByZXM7CisJdWxvbmcgcmVnc19zdGFydCwgcmVnc19zaXplOworCWludCByZXR2YWwsIGk7CisKKwltZG1hID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKHN0cnVjdCBtcGNfZG1hKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtZG1hKSB7CisJCWRldl9lcnIoZGV2LCAiTWVtb3J5IGV4aGF1c3RlZCFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZG1hLT5pcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChkbiwgMCk7CisJaWYgKG1kbWEtPmlycSA9PSBOT19JUlEpIHsKKwkJZGV2X2VycihkZXYsICJFcnJvciBtYXBwaW5nIElSUSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR2YWwgPSBvZl9hZGRyZXNzX3RvX3Jlc291cmNlKGRuLCAwLCAmcmVzKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoZGV2LCAiRXJyb3IgcGFyc2luZyBtZW1vcnkgcmVnaW9uIVxuIik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJcmVnc19zdGFydCA9IHJlcy5zdGFydDsKKwlyZWdzX3NpemUgPSByZXMuZW5kIC0gcmVzLnN0YXJ0ICsgMTsKKworCWlmICghZGV2bV9yZXF1ZXN0X21lbV9yZWdpb24oZGV2LCByZWdzX3N0YXJ0LCByZWdzX3NpemUsIERSVl9OQU1FKSkgeworCQlkZXZfZXJyKGRldiwgIkVycm9yIHJlcXVlc3RpbmcgbWVtb3J5IHJlZ2lvbiFcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCW1kbWEtPnJlZ3MgPSBkZXZtX2lvcmVtYXAoZGV2LCByZWdzX3N0YXJ0LCByZWdzX3NpemUpOworCWlmICghbWRtYS0+cmVncykgeworCQlkZXZfZXJyKGRldiwgIkVycm9yIG1hcHBpbmcgbWVtb3J5IHJlZ2lvbiFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZG1hLT50Y2QgPSAoc3RydWN0IG1wY19kbWFfdGNkICopKCh1OCAqKShtZG1hLT5yZWdzKQorCQkJCQkJCSsgTVBDX0RNQV9UQ0RfT0ZGU0VUKTsKKworCXJldHZhbCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBtZG1hLT5pcnEsICZtcGNfZG1hX2lycSwgMCwgRFJWX05BTUUsCisJCQkJCQkJCQltZG1hKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoZGV2LCAiRXJyb3IgcmVxdWVzdGluZyBJUlEhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3Bpbl9sb2NrX2luaXQoJm1kbWEtPmVycm9yX3N0YXR1c19sb2NrKTsKKworCWRtYSA9ICZtZG1hLT5kbWE7CisJZG1hLT5kZXYgPSBkZXY7CisJZG1hLT5jaGFuY250ID0gTVBDX0RNQV9DSEFOTkVMUzsKKwlkbWEtPmRldmljZV9hbGxvY19jaGFuX3Jlc291cmNlcyA9IG1wY19kbWFfYWxsb2NfY2hhbl9yZXNvdXJjZXM7CisJZG1hLT5kZXZpY2VfZnJlZV9jaGFuX3Jlc291cmNlcyA9IG1wY19kbWFfZnJlZV9jaGFuX3Jlc291cmNlczsKKwlkbWEtPmRldmljZV9pc3N1ZV9wZW5kaW5nID0gbXBjX2RtYV9pc3N1ZV9wZW5kaW5nOworCWRtYS0+ZGV2aWNlX2lzX3R4X2NvbXBsZXRlID0gbXBjX2RtYV9pc190eF9jb21wbGV0ZTsKKwlkbWEtPmRldmljZV9wcmVwX2RtYV9tZW1jcHkgPSBtcGNfZG1hX3ByZXBfbWVtY3B5OworCisJSU5JVF9MSVNUX0hFQUQoJmRtYS0+Y2hhbm5lbHMpOworCWRtYV9jYXBfc2V0KERNQV9NRU1DUFksIGRtYS0+Y2FwX21hc2spOworCisJZm9yIChpID0gMDsgaSA8IGRtYS0+Y2hhbmNudDsgaSsrKSB7CisJCW1jaGFuID0gJm1kbWEtPmNoYW5uZWxzW2ldOworCisJCW1jaGFuLT5jaGFuLmRldmljZSA9IGRtYTsKKwkJbWNoYW4tPmNoYW4uY2hhbl9pZCA9IGk7CisJCW1jaGFuLT5jaGFuLmNvb2tpZSA9IDE7CisJCW1jaGFuLT5jb21wbGV0ZWRfY29va2llID0gbWNoYW4tPmNoYW4uY29va2llOworCisJCUlOSVRfTElTVF9IRUFEKCZtY2hhbi0+ZnJlZSk7CisJCUlOSVRfTElTVF9IRUFEKCZtY2hhbi0+cHJlcGFyZWQpOworCQlJTklUX0xJU1RfSEVBRCgmbWNoYW4tPnF1ZXVlZCk7CisJCUlOSVRfTElTVF9IRUFEKCZtY2hhbi0+YWN0aXZlKTsKKwkJSU5JVF9MSVNUX0hFQUQoJm1jaGFuLT5jb21wbGV0ZWQpOworCisJCXNwaW5fbG9ja19pbml0KCZtY2hhbi0+bG9jayk7CisJCWxpc3RfYWRkX3RhaWwoJm1jaGFuLT5jaGFuLmRldmljZV9ub2RlLCAmZG1hLT5jaGFubmVscyk7CisJfQorCisJdGFza2xldF9pbml0KCZtZG1hLT50YXNrbGV0LCBtcGNfZG1hX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKW1kbWEpOworCisJLyoKKwkgKiBDb25maWd1cmUgRE1BIEVuZ2luZToKKwkgKiAtIER5bmFtaWMgY2xvY2ssCisJICogLSBSb3VuZC1yb2JpbiBncm91cCBhcmJpdHJhdGlvbiwKKwkgKiAtIFJvdW5kLXJvYmluIGNoYW5uZWwgYXJiaXRyYXRpb24uCisJICovCisJb3V0X2JlMzIoJm1kbWEtPnJlZ3MtPmRtYWNyLCBNUENfRE1BX0RNQUNSX0VEQ0cgfAorCQkJCU1QQ19ETUFfRE1BQ1JfRVJHQSB8IE1QQ19ETUFfRE1BQ1JfRVJDQSk7CisKKwkvKiBEaXNhYmxlIGhhcmR3YXJlIERNQSByZXF1ZXN0cyAqLworCW91dF9iZTMyKCZtZG1hLT5yZWdzLT5kbWFlcnFoLCAwKTsKKwlvdXRfYmUzMigmbWRtYS0+cmVncy0+ZG1hZXJxbCwgMCk7CisKKwkvKiBEaXNhYmxlIGVycm9yIGludGVycnVwdHMgKi8KKwlvdXRfYmUzMigmbWRtYS0+cmVncy0+ZG1hZWVpaCwgMCk7CisJb3V0X2JlMzIoJm1kbWEtPnJlZ3MtPmRtYWVlaWwsIDApOworCisJLyogQ2xlYXIgaW50ZXJydXB0cyBzdGF0dXMgKi8KKwlvdXRfYmUzMigmbWRtYS0+cmVncy0+ZG1haW50aCwgMHhGRkZGRkZGRik7CisJb3V0X2JlMzIoJm1kbWEtPnJlZ3MtPmRtYWludGwsIDB4RkZGRkZGRkYpOworCW91dF9iZTMyKCZtZG1hLT5yZWdzLT5kbWFlcnJoLCAweEZGRkZGRkZGKTsKKwlvdXRfYmUzMigmbWRtYS0+cmVncy0+ZG1hZXJybCwgMHhGRkZGRkZGRik7CisKKwkvKiBSb3V0ZSBpbnRlcnJ1cHRzIHRvIElQSUMgKi8KKwlvdXRfYmUzMigmbWRtYS0+cmVncy0+ZG1haWhzYSwgMCk7CisJb3V0X2JlMzIoJm1kbWEtPnJlZ3MtPmRtYWlsc2EsIDApOworCisJLyogUmVnaXN0ZXIgRE1BIGVuZ2luZSAqLworCWRldl9zZXRfZHJ2ZGF0YShkZXYsIG1kbWEpOworCXJldHZhbCA9IGRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoZG1hKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldm1fZnJlZV9pcnEoZGV2LCBtZG1hLT5pcnEsIG1kbWEpOworCQlpcnFfZGlzcG9zZV9tYXBwaW5nKG1kbWEtPmlycSk7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbXBjX2RtYV9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb3ApCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJm9wLT5kZXY7CisJc3RydWN0IG1wY19kbWEgKm1kbWEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWRtYV9hc3luY19kZXZpY2VfdW5yZWdpc3RlcigmbWRtYS0+ZG1hKTsKKwlkZXZtX2ZyZWVfaXJxKGRldiwgbWRtYS0+aXJxLCBtZG1hKTsKKwlpcnFfZGlzcG9zZV9tYXBwaW5nKG1kbWEtPmlycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjX2RtYV9tYXRjaFtdID0geworCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtZG1hIiwgfSwKKwl7fSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG1wY19kbWFfZHJpdmVyID0geworCS5tYXRjaF90YWJsZQk9IG1wY19kbWFfbWF0Y2gsCisJLnByb2JlCQk9IG1wY19kbWFfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtcGNfZG1hX3JlbW92ZSksCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gRFJWX05BTUUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtcGNfZG1hX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZtcGNfZG1hX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChtcGNfZG1hX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbXBjX2RtYV9leGl0KHZvaWQpCit7CisJb2ZfdW5yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJm1wY19kbWFfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1wY19kbWFfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIlBpb3RyIFppZWNpayA8a29zbW9Ac2VtaWhhbGYuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9kbWEvcHBjNHh4L2FkbWEuYyBiL2RyaXZlcnMvZG1hL3BwYzR4eC9hZG1hLmMKaW5kZXggMGEzNDc4ZS4uZTY5ZDg3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9kbWEvcHBjNHh4L2FkbWEuYworKysgYi9kcml2ZXJzL2RtYS9wcGM0eHgvYWRtYS5jCkBAIC00OTQwLDcgKzQ5NDAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9fZGV2aW5pdGRhdGEgcHBjNDQwc3BlX2FkbWFfb2ZfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHBwYzQ0MHNwZV9hZG1hX29mX21hdGNoW10gX19kZXZpbml0Y29uc3QgPSB7CiAJeyAuY29tcGF0aWJsZQk9ICJpYm0sZG1hLTQ0MHNwZSIsIH0sCiAJeyAuY29tcGF0aWJsZQk9ICJhbWNjLHhvci1hY2NlbGVyYXRvciIsIH0sCiAJe30sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zaGRtYS5jIGIvZHJpdmVycy9kbWEvc2hkbWEuYwppbmRleCBiNzVjZThiLi41ZDE3ZTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zaGRtYS5jCisrKyBiL2RyaXZlcnMvZG1hL3NoZG1hLmMKQEAgLTI0LDggKzI0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGNwdS9kbWEuaD4KLSNpbmNsdWRlIDxhc20vZG1hLXNoLmg+CisjaW5jbHVkZSA8bGludXgvcG1fcnVudGltZS5oPgorCisjaW5jbHVkZSA8YXNtL2RtYWVuZ2luZS5oPgorCiAjaW5jbHVkZSAic2hkbWEuaCIKIAogLyogRE1BIGRlc2NyaXB0b3IgY29udHJvbCAqLwpAQCAtMzgsMzAgKzQwLDMyIEBACiB9OwogCiAjZGVmaW5lIE5SX0RFU0NTX1BFUl9DSEFOTkVMIDMyCi0vKgotICogRGVmaW5lIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZm9yIGR1YWwgYWRkcmVzcyBtZW1vcnktbWVtb3J5IHRyYW5zZmVyLgotICogVGhlIDB4NDAwIHZhbHVlIHJlcHJlc2VudHMgYXV0by1yZXF1ZXN0LCBleHRlcm5hbC0+ZXh0ZXJuYWwuCi0gKgotICogQW5kIHRoaXMgZHJpdmVyIHNldCA0Ynl0ZSBidXJzdCBtb2RlLgotICogSWYgeW91IHdhbnQgdG8gY2hhbmdlIG1vZGUsIHlvdSBuZWVkIHRvIGNoYW5nZSBSU19ERUZBVUxUIG9mIHZhbHVlLgotICogKGV4IDFieXRlIGJ1cnN0IG1vZGUgLT4gKFJTX0RVQUwgJiB+VFNfMzIpCi0gKi8KLSNkZWZpbmUgUlNfREVGQVVMVCAgKFJTX0RVQUwpCisvKiBEZWZhdWx0IE1FTUNQWSB0cmFuc2ZlciBzaXplID0gMl4yID0gNCBieXRlcyAqLworI2RlZmluZSBMT0cyX0RFRkFVTFRfWEZFUl9TSVpFCTIKIAogLyogQSBiaXRtYXNrIHdpdGggYml0cyBlbm91Z2ggZm9yIGVudW0gc2hfZG1hZV9zbGF2ZV9jaGFuX2lkICovCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaF9kbWFlX3NsYXZlX3VzZWRbQklUU19UT19MT05HUyhTSERNQV9TTEFWRV9OVU1CRVIpXTsKIAogc3RhdGljIHZvaWQgc2hfZG1hZV9jaGFuX2xkX2NsZWFudXAoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgYm9vbCBhbGwpOwogCi0jZGVmaW5lIFNIX0RNQUNfQ0hBTl9CQVNFKGlkKSAoZG1hX2Jhc2VfYWRkcltpZF0pCiBzdGF0aWMgdm9pZCBzaF9kbWFlX3dyaXRlbChzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9kYywgdTMyIGRhdGEsIHUzMiByZWcpCiB7Ci0JY3RybF9vdXRsKGRhdGEsIFNIX0RNQUNfQ0hBTl9CQVNFKHNoX2RjLT5pZCkgKyByZWcpOworCV9fcmF3X3dyaXRlbChkYXRhLCBzaF9kYy0+YmFzZSArIHJlZyAvIHNpemVvZih1MzIpKTsKIH0KIAogc3RhdGljIHUzMiBzaF9kbWFlX3JlYWRsKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2RjLCB1MzIgcmVnKQogewotCXJldHVybiBjdHJsX2lubChTSF9ETUFDX0NIQU5fQkFTRShzaF9kYy0+aWQpICsgcmVnKTsKKwlyZXR1cm4gX19yYXdfcmVhZGwoc2hfZGMtPmJhc2UgKyByZWcgLyBzaXplb2YodTMyKSk7Cit9CisKK3N0YXRpYyB1MTYgZG1hb3JfcmVhZChzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKnNoZGV2KQoreworCXJldHVybiBfX3Jhd19yZWFkdyhzaGRldi0+Y2hhbl9yZWcgKyBETUFPUiAvIHNpemVvZih1MzIpKTsKK30KKworc3RhdGljIHZvaWQgZG1hb3Jfd3JpdGUoc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldiwgdTE2IGRhdGEpCit7CisJX19yYXdfd3JpdGV3KGRhdGEsIHNoZGV2LT5jaGFuX3JlZyArIERNQU9SIC8gc2l6ZW9mKHUzMikpOwogfQogCiAvKgpAQCAtNjksMjQgKzczLDIzIEBACiAgKgogICogU0g3NzgwIGhhcyB0d28gRE1BT1IgcmVnaXN0ZXIKICAqLwotc3RhdGljIHZvaWQgc2hfZG1hZV9jdGxfc3RvcChpbnQgaWQpCitzdGF0aWMgdm9pZCBzaF9kbWFlX2N0bF9zdG9wKHN0cnVjdCBzaF9kbWFlX2RldmljZSAqc2hkZXYpCiB7Ci0JdW5zaWduZWQgc2hvcnQgZG1hb3IgPSBkbWFvcl9yZWFkX3JlZyhpZCk7CisJdW5zaWduZWQgc2hvcnQgZG1hb3IgPSBkbWFvcl9yZWFkKHNoZGV2KTsKIAotCWRtYW9yICY9IH4oRE1BT1JfTk1JRiB8IERNQU9SX0FFKTsKLQlkbWFvcl93cml0ZV9yZWcoaWQsIGRtYW9yKTsKKwlkbWFvcl93cml0ZShzaGRldiwgZG1hb3IgJiB+KERNQU9SX05NSUYgfCBETUFPUl9BRSB8IERNQU9SX0RNRSkpOwogfQogCi1zdGF0aWMgaW50IHNoX2RtYWVfcnN0KGludCBpZCkKK3N0YXRpYyBpbnQgc2hfZG1hZV9yc3Qoc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldikKIHsKIAl1bnNpZ25lZCBzaG9ydCBkbWFvcjsKIAotCXNoX2RtYWVfY3RsX3N0b3AoaWQpOwotCWRtYW9yID0gZG1hb3JfcmVhZF9yZWcoaWQpIHwgRE1BT1JfSU5JVDsKKwlzaF9kbWFlX2N0bF9zdG9wKHNoZGV2KTsKKwlkbWFvciA9IGRtYW9yX3JlYWQoc2hkZXYpIHwgc2hkZXYtPnBkYXRhLT5kbWFvcl9pbml0OwogCi0JZG1hb3Jfd3JpdGVfcmVnKGlkLCBkbWFvcik7Ci0JaWYgKGRtYW9yX3JlYWRfcmVnKGlkKSAmIChETUFPUl9BRSB8IERNQU9SX05NSUYpKSB7Ci0JCXByX3dhcm5pbmcoS0VSTl9FUlIgImRtYS1zaDogQ2FuJ3QgaW5pdGlhbGl6ZSBETUFPUi5cbiIpOworCWRtYW9yX3dyaXRlKHNoZGV2LCBkbWFvcik7CisJaWYgKGRtYW9yX3JlYWQoc2hkZXYpICYgKERNQU9SX0FFIHwgRE1BT1JfTk1JRikpIHsKKwkJcHJfd2FybmluZygiZG1hLXNoOiBDYW4ndCBpbml0aWFsaXplIERNQU9SLlxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKQEAgLTEwMiwxMyArMTA1LDM2IEBACiAJcmV0dXJuIGZhbHNlOyAvKiB3YWl0aW5nICovCiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgdHNfc2hpZnRbXSA9IFRTX1NISUZUOwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2FsY194bWl0X3NoaWZ0KHUzMiBjaGNyKQorc3RhdGljIHVuc2lnbmVkIGludCBjYWxjX3htaXRfc2hpZnQoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiwgdTMyIGNoY3IpCiB7Ci0JaW50IGNudCA9ICgoY2hjciAmIENIQ1JfVFNfTE9XX01BU0spID4+IENIQ1JfVFNfTE9XX1NISUZUKSB8Ci0JCSgoY2hjciAmIENIQ1JfVFNfSElHSF9NQVNLKSA+PiBDSENSX1RTX0hJR0hfU0hJRlQpOworCXN0cnVjdCBzaF9kbWFlX2RldmljZSAqc2hkZXYgPSBjb250YWluZXJfb2Yoc2hfY2hhbi0+Y29tbW9uLmRldmljZSwKKwkJCQkJCXN0cnVjdCBzaF9kbWFlX2RldmljZSwgY29tbW9uKTsKKwlzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSAqcGRhdGEgPSBzaGRldi0+cGRhdGE7CisJaW50IGNudCA9ICgoY2hjciAmIHBkYXRhLT50c19sb3dfbWFzaykgPj4gcGRhdGEtPnRzX2xvd19zaGlmdCkgfAorCQkoKGNoY3IgJiBwZGF0YS0+dHNfaGlnaF9tYXNrKSA+PiBwZGF0YS0+dHNfaGlnaF9zaGlmdCk7CiAKLQlyZXR1cm4gdHNfc2hpZnRbY250XTsKKwlpZiAoY250ID49IHBkYXRhLT50c19zaGlmdF9udW0pCisJCWNudCA9IDA7CisKKwlyZXR1cm4gcGRhdGEtPnRzX3NoaWZ0W2NudF07Cit9CisKK3N0YXRpYyB1MzIgbG9nMnNpemVfdG9fY2hjcihzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCBpbnQgbDJzaXplKQoreworCXN0cnVjdCBzaF9kbWFlX2RldmljZSAqc2hkZXYgPSBjb250YWluZXJfb2Yoc2hfY2hhbi0+Y29tbW9uLmRldmljZSwKKwkJCQkJCXN0cnVjdCBzaF9kbWFlX2RldmljZSwgY29tbW9uKTsKKwlzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSAqcGRhdGEgPSBzaGRldi0+cGRhdGE7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPnRzX3NoaWZ0X251bTsgaSsrKQorCQlpZiAocGRhdGEtPnRzX3NoaWZ0W2ldID09IGwyc2l6ZSkKKwkJCWJyZWFrOworCisJaWYgKGkgPT0gcGRhdGEtPnRzX3NoaWZ0X251bSkKKwkJaSA9IDA7CisKKwlyZXR1cm4gKChpIDw8IHBkYXRhLT50c19sb3dfc2hpZnQpICYgcGRhdGEtPnRzX2xvd19tYXNrKSB8CisJCSgoaSA8PCBwZGF0YS0+dHNfaGlnaF9zaGlmdCkgJiBwZGF0YS0+dHNfaGlnaF9tYXNrKTsKIH0KIAogc3RhdGljIHZvaWQgZG1hZV9zZXRfcmVnKHN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4sIHN0cnVjdCBzaF9kbWFlX3JlZ3MgKmh3KQpAQCAtMTM2LDggKzE2MiwxMyBAQAogCiBzdGF0aWMgdm9pZCBkbWFlX2luaXQoc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbikKIHsKLQl1MzIgY2hjciA9IFJTX0RFRkFVTFQ7IC8qIGRlZmF1bHQgaXMgRFVBTCBtb2RlICovCi0Jc2hfY2hhbi0+eG1pdF9zaGlmdCA9IGNhbGNfeG1pdF9zaGlmdChjaGNyKTsKKwkvKgorCSAqIERlZmF1bHQgY29uZmlndXJhdGlvbiBmb3IgZHVhbCBhZGRyZXNzIG1lbW9yeS1tZW1vcnkgdHJhbnNmZXIuCisJICogMHg0MDAgcmVwcmVzZW50cyBhdXRvLXJlcXVlc3QuCisJICovCisJdTMyIGNoY3IgPSBETV9JTkMgfCBTTV9JTkMgfCAweDQwMCB8IGxvZzJzaXplX3RvX2NoY3Ioc2hfY2hhbiwKKwkJCQkJCSAgIExPRzJfREVGQVVMVF9YRkVSX1NJWkUpOworCXNoX2NoYW4tPnhtaXRfc2hpZnQgPSBjYWxjX3htaXRfc2hpZnQoc2hfY2hhbiwgY2hjcik7CiAJc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgY2hjciwgQ0hDUik7CiB9CiAKQEAgLTE0NywzNyArMTc4LDI2IEBACiAJaWYgKGRtYWVfaXNfYnVzeShzaF9jaGFuKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCXNoX2NoYW4tPnhtaXRfc2hpZnQgPSBjYWxjX3htaXRfc2hpZnQodmFsKTsKKwlzaF9jaGFuLT54bWl0X3NoaWZ0ID0gY2FsY194bWl0X3NoaWZ0KHNoX2NoYW4sIHZhbCk7CiAJc2hfZG1hZV93cml0ZWwoc2hfY2hhbiwgdmFsLCBDSENSKTsKIAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIERNQVJTX1NISUZUCTgKLSNkZWZpbmUgRE1BUlNfQ0hBTl9NU0sJMHgwMQogc3RhdGljIGludCBkbWFlX3NldF9kbWFycyhzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuLCB1MTYgdmFsKQogewotCXUzMiBhZGRyOwotCWludCBzaGlmdCA9IDA7CisJc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldiA9IGNvbnRhaW5lcl9vZihzaF9jaGFuLT5jb21tb24uZGV2aWNlLAorCQkJCQkJc3RydWN0IHNoX2RtYWVfZGV2aWNlLCBjb21tb24pOworCXN0cnVjdCBzaF9kbWFlX3BkYXRhICpwZGF0YSA9IHNoZGV2LT5wZGF0YTsKKwlzdHJ1Y3Qgc2hfZG1hZV9jaGFubmVsICpjaGFuX3BkYXRhID0gJnBkYXRhLT5jaGFubmVsW3NoX2NoYW4tPmlkXTsKKwl1MTYgX19pb21lbSAqYWRkciA9IHNoZGV2LT5kbWFycyArIGNoYW5fcGRhdGEtPmRtYXJzIC8gc2l6ZW9mKHUxNik7CisJaW50IHNoaWZ0ID0gY2hhbl9wZGF0YS0+ZG1hcnNfYml0OwogCiAJaWYgKGRtYWVfaXNfYnVzeShzaF9jaGFuKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCWlmIChzaF9jaGFuLT5pZCAmIERNQVJTX0NIQU5fTVNLKQotCQlzaGlmdCA9IERNQVJTX1NISUZUOwotCi0JaWYgKHNoX2NoYW4tPmlkIDwgNikKLQkJLyogRE1BMFJTMCAtIERNQTBSUzIgKi8KLQkJYWRkciA9IFNIX0RNQVJTX0JBU0UwICsgKHNoX2NoYW4tPmlkIC8gMikgKiA0OwotI2lmZGVmIFNIX0RNQVJTX0JBU0UxCi0JZWxzZSBpZiAoc2hfY2hhbi0+aWQgPCAxMikKLQkJLyogRE1BMVJTMCAtIERNQTFSUzIgKi8KLQkJYWRkciA9IFNIX0RNQVJTX0JBU0UxICsgKChzaF9jaGFuLT5pZCAtIDYpIC8gMikgKiA0OwotI2VuZGlmCi0JZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWN0cmxfb3V0dygodmFsIDw8IHNoaWZ0KSB8IChjdHJsX2ludyhhZGRyKSAmICgweEZGMDAgPj4gc2hpZnQpKSwgYWRkcik7CisJX19yYXdfd3JpdGV3KChfX3Jhd19yZWFkdyhhZGRyKSAmICgweGZmMDAgPj4gc2hpZnQpKSB8ICh2YWwgPDwgc2hpZnQpLAorCQkgICAgIGFkZHIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNTEsMTUgKzI3MSwxNSBAQAogCXN0cnVjdCBkbWFfZGV2aWNlICpkbWFfZGV2ID0gc2hfY2hhbi0+Y29tbW9uLmRldmljZTsKIAlzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKnNoZGV2ID0gY29udGFpbmVyX29mKGRtYV9kZXYsCiAJCQkJCXN0cnVjdCBzaF9kbWFlX2RldmljZSwgY29tbW9uKTsKLQlzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSAqcGRhdGEgPSAmc2hkZXYtPnBkYXRhOworCXN0cnVjdCBzaF9kbWFlX3BkYXRhICpwZGF0YSA9IHNoZGV2LT5wZGF0YTsKIAlpbnQgaTsKIAogCWlmICgodW5zaWduZWQpc2xhdmVfaWQgPj0gU0hETUFfU0xBVkVfTlVNQkVSKQogCQlyZXR1cm4gTlVMTDsKIAotCWZvciAoaSA9IDA7IGkgPCBwZGF0YS0+Y29uZmlnX251bTsgaSsrKQotCQlpZiAocGRhdGEtPmNvbmZpZ1tpXS5zbGF2ZV9pZCA9PSBzbGF2ZV9pZCkKLQkJCXJldHVybiBwZGF0YS0+Y29uZmlnICsgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPnNsYXZlX251bTsgaSsrKQorCQlpZiAocGRhdGEtPnNsYXZlW2ldLnNsYXZlX2lkID09IHNsYXZlX2lkKQorCQkJcmV0dXJuIHBkYXRhLT5zbGF2ZSArIGk7CiAKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTI3MCw2ICsyOTAsOCBAQAogCXN0cnVjdCBzaF9kZXNjICpkZXNjOwogCXN0cnVjdCBzaF9kbWFlX3NsYXZlICpwYXJhbSA9IGNoYW4tPnByaXZhdGU7CiAKKwlwbV9ydW50aW1lX2dldF9zeW5jKHNoX2NoYW4tPmRldik7CisKIAkvKgogCSAqIFRoaXMgcmVsaWVzIG9uIHRoZSBndWFyYW50ZWUgZnJvbSBkbWFlbmdpbmUgdGhhdCBhbGxvY19jaGFuX3Jlc291cmNlcwogCSAqIG5ldmVyIHJ1bnMgY29uY3VycmVudGx5IHdpdGggaXRzZWxmIG9yIGZyZWVfY2hhbl9yZXNvdXJjZXMuCkBAIC0yODgsOSArMzEwLDggQEAKIAogCQlkbWFlX3NldF9kbWFycyhzaF9jaGFuLCBjZmctPm1pZF9yaWQpOwogCQlkbWFlX3NldF9jaGNyKHNoX2NoYW4sIGNmZy0+Y2hjcik7Ci0JfSBlbHNlIHsKLQkJaWYgKChzaF9kbWFlX3JlYWRsKHNoX2NoYW4sIENIQ1IpICYgMHg3MDApICE9IDB4NDAwKQotCQkJZG1hZV9zZXRfY2hjcihzaF9jaGFuLCBSU19ERUZBVUxUKTsKKwl9IGVsc2UgaWYgKChzaF9kbWFlX3JlYWRsKHNoX2NoYW4sIENIQ1IpICYgMHhmMDApICE9IDB4NDAwKSB7CisJCWRtYWVfaW5pdChzaF9jaGFuKTsKIAl9CiAKIAlzcGluX2xvY2tfYmgoJnNoX2NoYW4tPmRlc2NfbG9jayk7CkBAIC0zMTIsNiArMzMzLDkgQEAKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJnNoX2NoYW4tPmRlc2NfbG9jayk7CiAKKwlpZiAoIXNoX2NoYW4tPmRlc2NzX2FsbG9jYXRlZCkKKwkJcG1fcnVudGltZV9wdXQoc2hfY2hhbi0+ZGV2KTsKKwogCXJldHVybiBzaF9jaGFuLT5kZXNjc19hbGxvY2F0ZWQ7CiB9CiAKQEAgLTMyMyw2ICszNDcsNyBAQAogCXN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4gPSB0b19zaF9jaGFuKGNoYW4pOwogCXN0cnVjdCBzaF9kZXNjICpkZXNjLCAqX2Rlc2M7CiAJTElTVF9IRUFEKGxpc3QpOworCWludCBkZXNjcyA9IHNoX2NoYW4tPmRlc2NzX2FsbG9jYXRlZDsKIAogCWRtYWVfaGFsdChzaF9jaGFuKTsKIApAQCAtMzQzLDYgKzM2OCw5IEBACiAKIAlzcGluX3VubG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAorCWlmIChkZXNjcyA+IDApCisJCXBtX3J1bnRpbWVfcHV0KHNoX2NoYW4tPmRldik7CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGVzYywgX2Rlc2MsICZsaXN0LCBub2RlKQogCQlrZnJlZShkZXNjKTsKIH0KQEAgLTU1OSw2ICs1ODcsMTkgQEAKIAlpZiAoIWNoYW4pCiAJCXJldHVybjsKIAorCWRtYWVfaGFsdChzaF9jaGFuKTsKKworCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKKwlpZiAoIWxpc3RfZW1wdHkoJnNoX2NoYW4tPmxkX3F1ZXVlKSkgeworCQkvKiBSZWNvcmQgcGFydGlhbCB0cmFuc2ZlciAqLworCQlzdHJ1Y3Qgc2hfZGVzYyAqZGVzYyA9IGxpc3RfZW50cnkoc2hfY2hhbi0+bGRfcXVldWUubmV4dCwKKwkJCQkJCSAgc3RydWN0IHNoX2Rlc2MsIG5vZGUpOworCQlkZXNjLT5wYXJ0aWFsID0gKGRlc2MtPmh3LnRjciAtIHNoX2RtYWVfcmVhZGwoc2hfY2hhbiwgVENSKSkgPDwKKwkJCXNoX2NoYW4tPnhtaXRfc2hpZnQ7CisKKwl9CisJc3Bpbl91bmxvY2tfYmgoJnNoX2NoYW4tPmRlc2NfbG9jayk7CisKIAlzaF9kbWFlX2NoYW5fbGRfY2xlYW51cChzaF9jaGFuLCB0cnVlKTsKIH0KIApAQCAtNjYxLDcgKzcwMiw3IEBACiAKIHN0YXRpYyB2b2lkIHNoX2NoYW5feGZlcl9sZF9xdWV1ZShzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuKQogewotCXN0cnVjdCBzaF9kZXNjICpzZDsKKwlzdHJ1Y3Qgc2hfZGVzYyAqZGVzYzsKIAogCXNwaW5fbG9ja19iaCgmc2hfY2hhbi0+ZGVzY19sb2NrKTsKIAkvKiBETUEgd29yayBjaGVjayAqLwpAQCAtNjcxLDEwICs3MTIsMTMgQEAKIAl9CiAKIAkvKiBGaW5kIHRoZSBmaXJzdCBub3QgdHJhbnNmZXJyZWQgZGVzY2lwdG9yICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZCwgJnNoX2NoYW4tPmxkX3F1ZXVlLCBub2RlKQotCQlpZiAoc2QtPm1hcmsgPT0gREVTQ19TVUJNSVRURUQpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc2MsICZzaF9jaGFuLT5sZF9xdWV1ZSwgbm9kZSkKKwkJaWYgKGRlc2MtPm1hcmsgPT0gREVTQ19TVUJNSVRURUQpIHsKKwkJCWRldl9kYmcoc2hfY2hhbi0+ZGV2LCAiUXVldWUgIyVkIHRvICVkOiAldUAleCAtPiAleFxuIiwKKwkJCQlkZXNjLT5hc3luY190eC5jb29raWUsIHNoX2NoYW4tPmlkLAorCQkJCWRlc2MtPmh3LnRjciwgZGVzYy0+aHcuc2FyLCBkZXNjLT5ody5kYXIpOwogCQkJLyogR2V0IHRoZSBsZCBzdGFydCBhZGRyZXNzIGZyb20gbGRfcXVldWUgKi8KLQkJCWRtYWVfc2V0X3JlZyhzaF9jaGFuLCAmc2QtPmh3KTsKKwkJCWRtYWVfc2V0X3JlZyhzaF9jaGFuLCAmZGVzYy0+aHcpOwogCQkJZG1hZV9zdGFydChzaF9jaGFuKTsKIAkJCWJyZWFrOwogCQl9CkBAIC02OTYsNiArNzQwLDcgQEAKIAlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpzaF9jaGFuID0gdG9fc2hfY2hhbihjaGFuKTsKIAlkbWFfY29va2llX3QgbGFzdF91c2VkOwogCWRtYV9jb29raWVfdCBsYXN0X2NvbXBsZXRlOworCWVudW0gZG1hX3N0YXR1cyBzdGF0dXM7CiAKIAlzaF9kbWFlX2NoYW5fbGRfY2xlYW51cChzaF9jaGFuLCBmYWxzZSk7CiAKQEAgLTcwOSw3ICs3NTQsMjcgQEAKIAlpZiAodXNlZCkKIAkJKnVzZWQgPSBsYXN0X3VzZWQ7CiAKLQlyZXR1cm4gZG1hX2FzeW5jX2lzX2NvbXBsZXRlKGNvb2tpZSwgbGFzdF9jb21wbGV0ZSwgbGFzdF91c2VkKTsKKwlzcGluX2xvY2tfYmgoJnNoX2NoYW4tPmRlc2NfbG9jayk7CisKKwlzdGF0dXMgPSBkbWFfYXN5bmNfaXNfY29tcGxldGUoY29va2llLCBsYXN0X2NvbXBsZXRlLCBsYXN0X3VzZWQpOworCisJLyoKKwkgKiBJZiB3ZSBkb24ndCBmaW5kIGNvb2tpZSBvbiB0aGUgcXVldWUsIGl0IGhhcyBiZWVuIGFib3J0ZWQgYW5kIHdlIGhhdmUKKwkgKiB0byByZXBvcnQgZXJyb3IKKwkgKi8KKwlpZiAoc3RhdHVzICE9IERNQV9TVUNDRVNTKSB7CisJCXN0cnVjdCBzaF9kZXNjICpkZXNjOworCQlzdGF0dXMgPSBETUFfRVJST1I7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZGVzYywgJnNoX2NoYW4tPmxkX3F1ZXVlLCBub2RlKQorCQkJaWYgKGRlc2MtPmNvb2tpZSA9PSBjb29raWUpIHsKKwkJCQlzdGF0dXMgPSBETUFfSU5fUFJPR1JFU1M7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCisJc3Bpbl91bmxvY2tfYmgoJnNoX2NoYW4tPmRlc2NfbG9jayk7CisKKwlyZXR1cm4gc3RhdHVzOwogfQogCiBzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfZG1hZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGF0YSkKQEAgLTczMiw0MCArNzk3LDMyIEBACiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKIHN0YXRpYyBpcnFyZXR1cm5fdCBzaF9kbWFlX2VycihpbnQgaXJxLCB2b2lkICpkYXRhKQogewotCWludCBlcnIgPSAwOwogCXN0cnVjdCBzaF9kbWFlX2RldmljZSAqc2hkZXYgPSAoc3RydWN0IHNoX2RtYWVfZGV2aWNlICopZGF0YTsKKwlpbnQgaTsKIAotCS8qIElSUSBNdWx0aSAqLwotCWlmIChzaGRldi0+cGRhdGEubW9kZSAmIFNIRE1BX01JWF9JUlEpIHsKLQkJaW50IF9fbWF5YmVfdW51c2VkIGNudCA9IDA7Ci0JCXN3aXRjaCAoaXJxKSB7Ci0jaWYgZGVmaW5lZChETVRFNl9JUlEpICYmIGRlZmluZWQoRE1BRTFfSVJRKQotCQljYXNlIERNVEU2X0lSUToKLQkJCWNudCsrOwotI2VuZGlmCi0JCWNhc2UgRE1URTBfSVJROgotCQkJaWYgKGRtYW9yX3JlYWRfcmVnKGNudCkgJiAoRE1BT1JfTk1JRiB8IERNQU9SX0FFKSkgewotCQkJCWRpc2FibGVfaXJxKGlycSk7Ci0JCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCS8qIGhhbHQgdGhlIGRtYSBjb250cm9sbGVyICovCisJc2hfZG1hZV9jdGxfc3RvcChzaGRldik7CisKKwkvKiBXZSBjYW5ub3QgZGV0ZWN0LCB3aGljaCBjaGFubmVsIGNhdXNlZCB0aGUgZXJyb3IsIGhhdmUgdG8gcmVzZXQgYWxsICovCisJZm9yIChpID0gMDsgaSA8IFNIX0RNQUNfTUFYX0NIQU5ORUxTOyBpKyspIHsKKwkJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hfY2hhbiA9IHNoZGV2LT5jaGFuW2ldOworCQlpZiAoc2hfY2hhbikgeworCQkJc3RydWN0IHNoX2Rlc2MgKmRlc2M7CisJCQkvKiBTdG9wIHRoZSBjaGFubmVsICovCisJCQlkbWFlX2hhbHQoc2hfY2hhbik7CisJCQkvKiBDb21wbGV0ZSBhbGwgICovCisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRlc2MsICZzaF9jaGFuLT5sZF9xdWV1ZSwgbm9kZSkgeworCQkJCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHggPSAmZGVzYy0+YXN5bmNfdHg7CisJCQkJZGVzYy0+bWFyayA9IERFU0NfSURMRTsKKwkJCQlpZiAodHgtPmNhbGxiYWNrKQorCQkJCQl0eC0+Y2FsbGJhY2sodHgtPmNhbGxiYWNrX3BhcmFtKTsKIAkJCX0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiBJUlFfTk9ORTsKKwkJCWxpc3Rfc3BsaWNlX2luaXQoJnNoX2NoYW4tPmxkX3F1ZXVlLCAmc2hfY2hhbi0+bGRfZnJlZSk7CiAJCX0KLQl9IGVsc2UgewotCQkvKiByZXNldCBkbWEgY29udHJvbGxlciAqLwotCQllcnIgPSBzaF9kbWFlX3JzdCgwKTsKLQkJaWYgKGVycikKLQkJCXJldHVybiBlcnI7Ci0jaWZkZWYgU0hfRE1BQ19CQVNFMQotCQlpZiAoc2hkZXYtPnBkYXRhLm1vZGUgJiBTSERNQV9ETUFPUjEpIHsKLQkJCWVyciA9IHNoX2RtYWVfcnN0KDEpOwotCQkJaWYgKGVycikKLQkJCQlyZXR1cm4gZXJyOwotCQl9Ci0jZW5kaWYKLQkJZGlzYWJsZV9pcnEoaXJxKTsKLQkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KKwlzaF9kbWFlX3JzdChzaGRldik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAjZW5kaWYKIApAQCAtNzk2LDE5ICs4NTMsMTIgQEAKIAlzaF9kbWFlX2NoYW5fbGRfY2xlYW51cChzaF9jaGFuLCBmYWxzZSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2RtYWVfaXJxKHVuc2lnbmVkIGludCBpZCkKLXsKLQl1bnNpZ25lZCBpbnQgaXJxID0gMDsKLQlpZiAoaWQgPCBBUlJBWV9TSVpFKGRtdGVfaXJxX21hcCkpCi0JCWlycSA9IGRtdGVfaXJxX21hcFtpZF07Ci0JcmV0dXJuIGlycTsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgc2hfZG1hZV9jaGFuX3Byb2JlKHN0cnVjdCBzaF9kbWFlX2RldmljZSAqc2hkZXYsIGludCBpZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNoX2RtYWVfY2hhbl9wcm9iZShzdHJ1Y3Qgc2hfZG1hZV9kZXZpY2UgKnNoZGV2LCBpbnQgaWQsCisJCQkJCWludCBpcnEsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJaW50IGVycjsKLQl1bnNpZ25lZCBpbnQgaXJxID0gZ2V0X2RtYWVfaXJxKGlkKTsKLQl1bnNpZ25lZCBsb25nIGlycWZsYWdzID0gSVJRRl9ESVNBQkxFRDsKKwlzdHJ1Y3Qgc2hfZG1hZV9jaGFubmVsICpjaGFuX3BkYXRhID0gJnNoZGV2LT5wZGF0YS0+Y2hhbm5lbFtpZF07CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShzaGRldi0+Y29tbW9uLmRldik7CiAJc3RydWN0IHNoX2RtYWVfY2hhbiAqbmV3X3NoX2NoYW47CiAKIAkvKiBhbGxvYyBjaGFubmVsICovCkBAIC04MTksOCArODY5LDEzIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCS8qIGNvcHkgc3RydWN0IGRtYV9kZXZpY2UgKi8KKwluZXdfc2hfY2hhbi0+Y29tbW9uLmRldmljZSA9ICZzaGRldi0+Y29tbW9uOworCiAJbmV3X3NoX2NoYW4tPmRldiA9IHNoZGV2LT5jb21tb24uZGV2OwogCW5ld19zaF9jaGFuLT5pZCA9IGlkOworCW5ld19zaF9jaGFuLT5pcnEgPSBpcnE7CisJbmV3X3NoX2NoYW4tPmJhc2UgPSBzaGRldi0+Y2hhbl9yZWcgKyBjaGFuX3BkYXRhLT5vZmZzZXQgLyBzaXplb2YodTMyKTsKIAogCS8qIEluaXQgRE1BIHRhc2tsZXQgKi8KIAl0YXNrbGV0X2luaXQoJm5ld19zaF9jaGFuLT50YXNrbGV0LCBkbWFlX2RvX3Rhc2tsZXQsCkBAIC04MzUsMjkgKzg5MCwyMCBAQAogCUlOSVRfTElTVF9IRUFEKCZuZXdfc2hfY2hhbi0+bGRfcXVldWUpOwogCUlOSVRfTElTVF9IRUFEKCZuZXdfc2hfY2hhbi0+bGRfZnJlZSk7CiAKLQkvKiBjb3B5IHN0cnVjdCBkbWFfZGV2aWNlICovCi0JbmV3X3NoX2NoYW4tPmNvbW1vbi5kZXZpY2UgPSAmc2hkZXYtPmNvbW1vbjsKLQogCS8qIEFkZCB0aGUgY2hhbm5lbCB0byBETUEgZGV2aWNlIGNoYW5uZWwgbGlzdCAqLwogCWxpc3RfYWRkX3RhaWwoJm5ld19zaF9jaGFuLT5jb21tb24uZGV2aWNlX25vZGUsCiAJCQkmc2hkZXYtPmNvbW1vbi5jaGFubmVscyk7CiAJc2hkZXYtPmNvbW1vbi5jaGFuY250Kys7CiAKLQlpZiAoc2hkZXYtPnBkYXRhLm1vZGUgJiBTSERNQV9NSVhfSVJRKSB7Ci0JCWlycWZsYWdzID0gSVJRRl9TSEFSRUQ7Ci0jaWYgZGVmaW5lZChETVRFNl9JUlEpCi0JCWlmIChpcnEgPj0gRE1URTZfSVJRKQotCQkJaXJxID0gRE1URTZfSVJROwotCQllbHNlCi0jZW5kaWYKLQkJCWlycSA9IERNVEUwX0lSUTsKLQl9Ci0KLQlzbnByaW50ZihuZXdfc2hfY2hhbi0+ZGV2X2lkLCBzaXplb2YobmV3X3NoX2NoYW4tPmRldl9pZCksCi0JCSAic2gtZG1hZSVkIiwgbmV3X3NoX2NoYW4tPmlkKTsKKwlpZiAocGRldi0+aWQgPj0gMCkKKwkJc25wcmludGYobmV3X3NoX2NoYW4tPmRldl9pZCwgc2l6ZW9mKG5ld19zaF9jaGFuLT5kZXZfaWQpLAorCQkJICJzaC1kbWFlJWQuJWQiLCBwZGV2LT5pZCwgbmV3X3NoX2NoYW4tPmlkKTsKKwllbHNlCisJCXNucHJpbnRmKG5ld19zaF9jaGFuLT5kZXZfaWQsIHNpemVvZihuZXdfc2hfY2hhbi0+ZGV2X2lkKSwKKwkJCSAic2gtZG1hJWQiLCBuZXdfc2hfY2hhbi0+aWQpOwogCiAJLyogc2V0IHVwIGNoYW5uZWwgaXJxICovCi0JZXJyID0gcmVxdWVzdF9pcnEoaXJxLCAmc2hfZG1hZV9pbnRlcnJ1cHQsIGlycWZsYWdzLAorCWVyciA9IHJlcXVlc3RfaXJxKGlycSwgJnNoX2RtYWVfaW50ZXJydXB0LCBmbGFncywKIAkJCSAgbmV3X3NoX2NoYW4tPmRldl9pZCwgbmV3X3NoX2NoYW4pOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycihzaGRldi0+Y29tbW9uLmRldiwgIkRNQSBjaGFubmVsICVkIHJlcXVlc3RfaXJxIGVycm9yICIKQEAgLTg4MSwxMiArOTI3LDEyIEBACiAKIAlmb3IgKGkgPSBzaGRldi0+Y29tbW9uLmNoYW5jbnQgLSAxIDsgaSA+PSAwIDsgaS0tKSB7CiAJCWlmIChzaGRldi0+Y2hhbltpXSkgewotCQkJc3RydWN0IHNoX2RtYWVfY2hhbiAqc2hjaGFuID0gc2hkZXYtPmNoYW5baV07Ci0JCQlpZiAoIShzaGRldi0+cGRhdGEubW9kZSAmIFNIRE1BX01JWF9JUlEpKQotCQkJCWZyZWVfaXJxKGRtdGVfaXJxX21hcFtpXSwgc2hjaGFuKTsKKwkJCXN0cnVjdCBzaF9kbWFlX2NoYW4gKnNoX2NoYW4gPSBzaGRldi0+Y2hhbltpXTsKIAotCQkJbGlzdF9kZWwoJnNoY2hhbi0+Y29tbW9uLmRldmljZV9ub2RlKTsKLQkJCWtmcmVlKHNoY2hhbik7CisJCQlmcmVlX2lycShzaF9jaGFuLT5pcnEsIHNoX2NoYW4pOworCisJCQlsaXN0X2RlbCgmc2hfY2hhbi0+Y29tbW9uLmRldmljZV9ub2RlKTsKKwkJCWtmcmVlKHNoX2NoYW4pOwogCQkJc2hkZXYtPmNoYW5baV0gPSBOVUxMOwogCQl9CiAJfQpAQCAtODk1LDQ3ICs5NDEsODQgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2hfZG1hZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCWludCBlcnIgPSAwLCBjbnQsIGVjbnQ7Ci0JdW5zaWduZWQgbG9uZyBpcnFmbGFncyA9IElSUUZfRElTQUJMRUQ7Ci0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKLQlpbnQgZWlycVtdID0geyBETUFFMF9JUlEsCi0jaWYgZGVmaW5lZChETUFFMV9JUlEpCi0JCQlETUFFMV9JUlEKLSNlbmRpZgotCQl9OwotI2VuZGlmCisJc3RydWN0IHNoX2RtYWVfcGRhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJdW5zaWduZWQgbG9uZyBpcnFmbGFncyA9IElSUUZfRElTQUJMRUQsCisJCWNoYW5fZmxhZ1tTSF9ETUFDX01BWF9DSEFOTkVMU10gPSB7fTsKKwlpbnQgZXJyaXJxLCBjaGFuX2lycVtTSF9ETUFDX01BWF9DSEFOTkVMU107CisJaW50IGVyciwgaSwgaXJxX2NudCA9IDAsIGlycXJlcyA9IDA7CiAJc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldjsKKwlzdHJ1Y3QgcmVzb3VyY2UgKmNoYW4sICpkbWFycywgKmVycmlycV9yZXMsICpjaGFuaXJxX3JlczsKIAogCS8qIGdldCBwbGF0Zm9ybSBkYXRhICovCi0JaWYgKCFwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkKKwlpZiAoIXBkYXRhIHx8ICFwZGF0YS0+Y2hhbm5lbF9udW0pCiAJCXJldHVybiAtRU5PREVWOwogCisJY2hhbiA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJLyogRE1BUlMgYXJlYSBpcyBvcHRpb25hbCwgaWYgYWJzZW50LCB0aGlzIGNvbnRyb2xsZXIgY2Fubm90IGRvIHNsYXZlIERNQSAqLworCWRtYXJzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwkvKgorCSAqIElSUSByZXNvdXJjZXM6CisJICogMS4gdGhlcmUgYWx3YXlzIG11c3QgYmUgYXQgbGVhc3Qgb25lIElSUSBJTy1yZXNvdXJjZS4gT24gU0g0IGl0IGlzCisJICogICAgdGhlIGVycm9yIElSUSwgaW4gd2hpY2ggY2FzZSBpdCBpcyB0aGUgb25seSBJUlEgaW4gdGhpcyByZXNvdXJjZToKKwkgKiAgICBzdGFydCA9PSBlbmQuIElmIGl0IGlzIHRoZSBvbmx5IElSUSByZXNvdXJjZSwgYWxsIGNoYW5uZWxzIGFsc28KKwkgKiAgICB1c2UgdGhlIHNhbWUgSVJRLgorCSAqIDIuIERNQSBjaGFubmVsIElSUSByZXNvdXJjZXMgY2FuIGJlIHNwZWNpZmllZCBvbmUgcGVyIHJlc291cmNlIG9yIGluCisJICogICAgcmFuZ2VzIChzdGFydCAhPSBlbmQpCisJICogMy4gaWZmIGFsbCBldmVudHMgKGNoYW5uZWxzIGFuZCwgb3B0aW9uYWxseSwgZXJyb3IpIG9uIHRoaXMKKwkgKiAgICBjb250cm9sbGVyIHVzZSB0aGUgc2FtZSBJUlEsIG9ubHkgb25lIElSUSByZXNvdXJjZSBjYW4gYmUKKwkgKiAgICBzcGVjaWZpZWQsIG90aGVyd2lzZSB0aGVyZSBtdXN0IGJlIG9uZSBJUlEgcGVyIGNoYW5uZWwsIGV2ZW4gaWYKKwkgKiAgICBzb21lIG9mIHRoZW0gYXJlIGVxdWFsCisJICogNC4gaWYgYWxsIElSUXMgb24gdGhpcyBjb250cm9sbGVyIGFyZSBlcXVhbCBvciBpZiBzb21lIHNwZWNpZmljIElSUXMKKwkgKiAgICBzcGVjaWZ5IElPUkVTT1VSQ0VfSVJRX1NIQVJFQUJMRSBpbiB0aGVpciByZXNvdXJjZXMsIHRoZXkgd2lsbCBiZQorCSAqICAgIHJlcXVlc3RlZCB3aXRoIHRoZSBJUlFGX1NIQVJFRCBmbGFnCisJICovCisJZXJyaXJxX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFjaGFuIHx8ICFlcnJpcnFfcmVzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGNoYW4tPnN0YXJ0LCByZXNvdXJjZV9zaXplKGNoYW4pLCBwZGV2LT5uYW1lKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJETUFDIHJlZ2lzdGVyIHJlZ2lvbiBhbHJlYWR5IGNsYWltZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWlmIChkbWFycyAmJiAhcmVxdWVzdF9tZW1fcmVnaW9uKGRtYXJzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShkbWFycyksIHBkZXYtPm5hbWUpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkRNQUMgRE1BUlMgcmVnaW9uIGFscmVhZHkgY2xhaW1lZFxuIik7CisJCWVyciA9IC1FQlVTWTsKKwkJZ290byBlcm1yZG1hcnM7CisJfQorCisJZXJyID0gLUVOT01FTTsKIAlzaGRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzaF9kbWFlX2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmICghc2hkZXYpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gZW5vdWdoIG1lbW9yeVxuIik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJOb3QgZW5vdWdoIG1lbW9yeVxuIik7CisJCWdvdG8gZWFsbG9jOworCX0KKworCXNoZGV2LT5jaGFuX3JlZyA9IGlvcmVtYXAoY2hhbi0+c3RhcnQsIHJlc291cmNlX3NpemUoY2hhbikpOworCWlmICghc2hkZXYtPmNoYW5fcmVnKQorCQlnb3RvIGVtYXBjaGFuOworCWlmIChkbWFycykgeworCQlzaGRldi0+ZG1hcnMgPSBpb3JlbWFwKGRtYXJzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShkbWFycykpOworCQlpZiAoIXNoZGV2LT5kbWFycykKKwkJCWdvdG8gZW1hcGRtYXJzOwogCX0KIAogCS8qIHBsYXRmb3JtIGRhdGEgKi8KLQltZW1jcHkoJnNoZGV2LT5wZGF0YSwgcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEsCi0JCQlzaXplb2Yoc3RydWN0IHNoX2RtYWVfcGRhdGEpKTsKKwlzaGRldi0+cGRhdGEgPSBwZGF0YTsKKworCXBtX3J1bnRpbWVfZW5hYmxlKCZwZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJnBkZXYtPmRldik7CiAKIAkvKiByZXNldCBkbWEgY29udHJvbGxlciAqLwotCWVyciA9IHNoX2RtYWVfcnN0KDApOworCWVyciA9IHNoX2RtYWVfcnN0KHNoZGV2KTsKIAlpZiAoZXJyKQogCQlnb3RvIHJzdF9lcnI7CiAKLQkvKiBTSDc3ODAvODUvMjMgaGFzIERNQU9SMSAqLwotCWlmIChzaGRldi0+cGRhdGEubW9kZSAmIFNIRE1BX0RNQU9SMSkgewotCQllcnIgPSBzaF9kbWFlX3JzdCgxKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gcnN0X2VycjsKLQl9Ci0KIAlJTklUX0xJU1RfSEVBRCgmc2hkZXYtPmNvbW1vbi5jaGFubmVscyk7CiAKIAlkbWFfY2FwX3NldChETUFfTUVNQ1BZLCBzaGRldi0+Y29tbW9uLmNhcF9tYXNrKTsKLQlkbWFfY2FwX3NldChETUFfU0xBVkUsIHNoZGV2LT5jb21tb24uY2FwX21hc2spOworCWlmIChkbWFycykKKwkJZG1hX2NhcF9zZXQoRE1BX1NMQVZFLCBzaGRldi0+Y29tbW9uLmNhcF9tYXNrKTsKIAogCXNoZGV2LT5jb21tb24uZGV2aWNlX2FsbG9jX2NoYW5fcmVzb3VyY2VzCiAJCT0gc2hfZG1hZV9hbGxvY19jaGFuX3Jlc291cmNlczsKQEAgLTk1MCwzNyArMTAzMyw3MiBAQAogCiAJc2hkZXYtPmNvbW1vbi5kZXYgPSAmcGRldi0+ZGV2OwogCS8qIERlZmF1bHQgdHJhbnNmZXIgc2l6ZSBvZiAzMiBieXRlcyByZXF1aXJlcyAzMi1ieXRlIGFsaWdubWVudCAqLwotCXNoZGV2LT5jb21tb24uY29weV9hbGlnbiA9IDU7CisJc2hkZXYtPmNvbW1vbi5jb3B5X2FsaWduID0gTE9HMl9ERUZBVUxUX1hGRVJfU0laRTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDQpCi0JLyogTm9uIE1peCBJUlEgbW9kZSBTSDc3MjIvU0g3NzMwIGV0Yy4uLiAqLwotCWlmIChzaGRldi0+cGRhdGEubW9kZSAmIFNIRE1BX01JWF9JUlEpIHsKKwljaGFuaXJxX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMSk7CisKKwlpZiAoIWNoYW5pcnFfcmVzKQorCQljaGFuaXJxX3JlcyA9IGVycmlycV9yZXM7CisJZWxzZQorCQlpcnFyZXMrKzsKKworCWlmIChjaGFuaXJxX3JlcyA9PSBlcnJpcnFfcmVzIHx8CisJICAgIChlcnJpcnFfcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfQklUUykgPT0gSU9SRVNPVVJDRV9JUlFfU0hBUkVBQkxFKQogCQlpcnFmbGFncyA9IElSUUZfU0hBUkVEOwotCQllaXJxWzBdID0gRE1URTBfSVJROwotI2lmIGRlZmluZWQoRE1URTZfSVJRKSAmJiBkZWZpbmVkKERNQUUxX0lSUSkKLQkJZWlycVsxXSA9IERNVEU2X0lSUTsKLSNlbmRpZgorCisJZXJyaXJxID0gZXJyaXJxX3Jlcy0+c3RhcnQ7CisKKwllcnIgPSByZXF1ZXN0X2lycShlcnJpcnEsIHNoX2RtYWVfZXJyLCBpcnFmbGFncywKKwkJCSAgIkRNQUMgQWRkcmVzcyBFcnJvciIsIHNoZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwKKwkJCSJETUEgZmFpbGVkIHJlcXVlc3RpbmcgaXJxICMlZCwgZXJyb3IgJWRcbiIsCisJCQllcnJpcnEsIGVycik7CisJCWdvdG8gZWlycV9lcnI7CiAJfQogCi0JZm9yIChlY250ID0gMCA7IGVjbnQgPCBBUlJBWV9TSVpFKGVpcnEpOyBlY250KyspIHsKLQkJZXJyID0gcmVxdWVzdF9pcnEoZWlycVtlY250XSwgc2hfZG1hZV9lcnIsIGlycWZsYWdzLAotCQkJCSAgIkRNQUMgQWRkcmVzcyBFcnJvciIsIHNoZGV2KTsKLQkJaWYgKGVycikgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRE1BIGRldmljZSByZXF1ZXN0X2lycSIKLQkJCQkiZXJyb3IgKGlycSAlZCkgd2l0aCByZXR1cm4gJWRcbiIsCi0JCQkJZWlycVtlY250XSwgZXJyKTsKLQkJCWdvdG8gZWlycV9lcnI7Ci0JCX0KLQl9CisjZWxzZQorCWNoYW5pcnFfcmVzID0gZXJyaXJxX3JlczsKICNlbmRpZiAvKiBDT05GSUdfQ1BVX1NINCAqLwogCisJaWYgKGNoYW5pcnFfcmVzLT5zdGFydCA9PSBjaGFuaXJxX3Jlcy0+ZW5kICYmCisJICAgICFwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDEpKSB7CisJCS8qIFNwZWNpYWwgY2FzZSAtIGFsbCBtdWx0aXBsZXhlZCAqLworCQlmb3IgKDsgaXJxX2NudCA8IHBkYXRhLT5jaGFubmVsX251bTsgaXJxX2NudCsrKSB7CisJCQljaGFuX2lycVtpcnFfY250XSA9IGNoYW5pcnFfcmVzLT5zdGFydDsKKwkJCWNoYW5fZmxhZ1tpcnFfY250XSA9IElSUUZfU0hBUkVEOworCQl9CisJfSBlbHNlIHsKKwkJZG8geworCQkJZm9yIChpID0gY2hhbmlycV9yZXMtPnN0YXJ0OyBpIDw9IGNoYW5pcnFfcmVzLT5lbmQ7IGkrKykgeworCQkJCWlmICgoZXJyaXJxX3Jlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0JJVFMpID09CisJCQkJICAgIElPUkVTT1VSQ0VfSVJRX1NIQVJFQUJMRSkKKwkJCQkJY2hhbl9mbGFnW2lycV9jbnRdID0gSVJRRl9TSEFSRUQ7CisJCQkJZWxzZQorCQkJCQljaGFuX2ZsYWdbaXJxX2NudF0gPSBJUlFGX0RJU0FCTEVEOworCQkJCWRldl9kYmcoJnBkZXYtPmRldiwKKwkJCQkJIkZvdW5kIElSUSAlZCBmb3IgY2hhbm5lbCAlZFxuIiwKKwkJCQkJaSwgaXJxX2NudCk7CisJCQkJY2hhbl9pcnFbaXJxX2NudCsrXSA9IGk7CisJCQl9CisJCQljaGFuaXJxX3JlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LAorCQkJCQkJSU9SRVNPVVJDRV9JUlEsICsraXJxcmVzKTsKKwkJfSB3aGlsZSAoaXJxX2NudCA8IHBkYXRhLT5jaGFubmVsX251bSAmJiBjaGFuaXJxX3Jlcyk7CisJfQorCisJaWYgKGlycV9jbnQgPCBwZGF0YS0+Y2hhbm5lbF9udW0pCisJCWdvdG8gZWlycXJlczsKKwogCS8qIENyZWF0ZSBETUEgQ2hhbm5lbCAqLwotCWZvciAoY250ID0gMCA7IGNudCA8IE1BWF9ETUFfQ0hBTk5FTFMgOyBjbnQrKykgewotCQllcnIgPSBzaF9kbWFlX2NoYW5fcHJvYmUoc2hkZXYsIGNudCk7CisJZm9yIChpID0gMDsgaSA8IHBkYXRhLT5jaGFubmVsX251bTsgaSsrKSB7CisJCWVyciA9IHNoX2RtYWVfY2hhbl9wcm9iZShzaGRldiwgaSwgY2hhbl9pcnFbaV0sIGNoYW5fZmxhZ1tpXSk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGNoYW5fcHJvYmVfZXJyOwogCX0KIAorCXBtX3J1bnRpbWVfcHV0KCZwZGV2LT5kZXYpOworCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgc2hkZXYpOwogCWRtYV9hc3luY19kZXZpY2VfcmVnaXN0ZXIoJnNoZGV2LT5jb21tb24pOwogCkBAIC05ODgsMTMgKzExMDYsMjQgQEAKIAogY2hhbl9wcm9iZV9lcnI6CiAJc2hfZG1hZV9jaGFuX3JlbW92ZShzaGRldik7Ci0KK2VpcnFyZXM6CisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKKwlmcmVlX2lycShlcnJpcnEsIHNoZGV2KTsKIGVpcnFfZXJyOgotCWZvciAoZWNudC0tIDsgZWNudCA+PSAwOyBlY250LS0pCi0JCWZyZWVfaXJxKGVpcnFbZWNudF0sIHNoZGV2KTsKLQorI2VuZGlmCiByc3RfZXJyOgorCXBtX3J1bnRpbWVfcHV0KCZwZGV2LT5kZXYpOworCWlmIChkbWFycykKKwkJaW91bm1hcChzaGRldi0+ZG1hcnMpOworZW1hcGRtYXJzOgorCWlvdW5tYXAoc2hkZXYtPmNoYW5fcmVnKTsKK2VtYXBjaGFuOgogCWtmcmVlKHNoZGV2KTsKK2VhbGxvYzoKKwlpZiAoZG1hcnMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihkbWFycy0+c3RhcnQsIHJlc291cmNlX3NpemUoZG1hcnMpKTsKK2VybXJkbWFyczoKKwlyZWxlYXNlX21lbV9yZWdpb24oY2hhbi0+c3RhcnQsIHJlc291cmNlX3NpemUoY2hhbikpOwogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTEwMDIsMzYgKzExMzEsMzkgQEAKIHN0YXRpYyBpbnQgX19leGl0IHNoX2RtYWVfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHNoX2RtYWVfZGV2aWNlICpzaGRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBlcnJpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCiAJZG1hX2FzeW5jX2RldmljZV91bnJlZ2lzdGVyKCZzaGRldi0+Y29tbW9uKTsKIAotCWlmIChzaGRldi0+cGRhdGEubW9kZSAmIFNIRE1BX01JWF9JUlEpIHsKLQkJZnJlZV9pcnEoRE1URTBfSVJRLCBzaGRldik7Ci0jaWYgZGVmaW5lZChETVRFNl9JUlEpCi0JCWZyZWVfaXJxKERNVEU2X0lSUSwgc2hkZXYpOwotI2VuZGlmCi0JfQorCWlmIChlcnJpcnEgPiAwKQorCQlmcmVlX2lycShlcnJpcnEsIHNoZGV2KTsKIAogCS8qIGNoYW5uZWwgZGF0YSByZW1vdmUgKi8KIAlzaF9kbWFlX2NoYW5fcmVtb3ZlKHNoZGV2KTsKIAotCWlmICghKHNoZGV2LT5wZGF0YS5tb2RlICYgU0hETUFfTUlYX0lSUSkpIHsKLQkJZnJlZV9pcnEoRE1BRTBfSVJRLCBzaGRldik7Ci0jaWYgZGVmaW5lZChETUFFMV9JUlEpCi0JCWZyZWVfaXJxKERNQUUxX0lSUSwgc2hkZXYpOwotI2VuZGlmCi0JfQorCXBtX3J1bnRpbWVfZGlzYWJsZSgmcGRldi0+ZGV2KTsKKworCWlmIChzaGRldi0+ZG1hcnMpCisJCWlvdW5tYXAoc2hkZXYtPmRtYXJzKTsKKwlpb3VubWFwKHNoZGV2LT5jaGFuX3JlZyk7CisKIAlrZnJlZShzaGRldik7CiAKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyZXMpCisJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMSk7CisJaWYgKHJlcykKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgc2hfZG1hZV9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzaF9kbWFlX2RldmljZSAqc2hkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzaF9kbWFlX2N0bF9zdG9wKDApOwotCWlmIChzaGRldi0+cGRhdGEubW9kZSAmIFNIRE1BX0RNQU9SMSkKLQkJc2hfZG1hZV9jdGxfc3RvcCgxKTsKKwlzaF9kbWFlX2N0bF9zdG9wKHNoZGV2KTsKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2hfZG1hZV9kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2RtYS9zaGRtYS5oIGIvZHJpdmVycy9kbWEvc2hkbWEuaAppbmRleCA3ZTIyN2YzLi4xNTM2MDlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2RtYS9zaGRtYS5oCisrKyBiL2RyaXZlcnMvZG1hL3NoZG1hLmgKQEAgLTE3LDI0ICsxNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAorI2luY2x1ZGUgPGFzbS9kbWFlbmdpbmUuaD4KKwogI2RlZmluZSBTSF9ETUFfVENSX01BWCAweDAwRkZGRkZGCS8qIDE2TUIgKi8KIAotc3RydWN0IHNoX2RtYWVfcmVncyB7Ci0JdTMyIHNhcjsgLyogU0FSIC8gc291cmNlIGFkZHJlc3MgKi8KLQl1MzIgZGFyOyAvKiBEQVIgLyBkZXN0aW5hdGlvbiBhZGRyZXNzICovCi0JdTMyIHRjcjsgLyogVENSIC8gdHJhbnNmZXIgY291bnQgKi8KLX07Ci0KLXN0cnVjdCBzaF9kZXNjIHsKLQlzdHJ1Y3Qgc2hfZG1hZV9yZWdzIGh3OwotCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgYXN5bmNfdHg7Ci0JZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uOwotCWRtYV9jb29raWVfdCBjb29raWU7Ci0JaW50IGNodW5rczsKLQlpbnQgbWFyazsKLX07Ci0KIHN0cnVjdCBkZXZpY2U7CiAKIHN0cnVjdCBzaF9kbWFlX2NoYW4gewpAQCAtNDcsMTQgKzMzLDE4IEBACiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRhc2tsZXQ7CS8qIFRhc2tsZXQgKi8KIAlpbnQgZGVzY3NfYWxsb2NhdGVkOwkJLyogZGVzYyBjb3VudCAqLwogCWludCB4bWl0X3NoaWZ0OwkJCS8qIGxvZ18yKGJ5dGVzX3Blcl94ZmVyKSAqLworCWludCBpcnE7CiAJaW50IGlkOwkJCQkvKiBSYXcgaWQgb2YgdGhpcyBjaGFubmVsICovCisJdTMyIF9faW9tZW0gKmJhc2U7CiAJY2hhciBkZXZfaWRbMTZdOwkJLyogdW5pcXVlIG5hbWUgcGVyIERNQUMgb2YgY2hhbm5lbCAqLwogfTsKIAogc3RydWN0IHNoX2RtYWVfZGV2aWNlIHsKIAlzdHJ1Y3QgZG1hX2RldmljZSBjb21tb247Ci0Jc3RydWN0IHNoX2RtYWVfY2hhbiAqY2hhbltNQVhfRE1BX0NIQU5ORUxTXTsKLQlzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSBwZGF0YTsKKwlzdHJ1Y3Qgc2hfZG1hZV9jaGFuICpjaGFuW1NIX0RNQUNfTUFYX0NIQU5ORUxTXTsKKwlzdHJ1Y3Qgc2hfZG1hZV9wZGF0YSAqcGRhdGE7CisJdTMyIF9faW9tZW0gKmNoYW5fcmVnOworCXUxNiBfX2lvbWVtICpkbWFyczsKIH07CiAKICNkZWZpbmUgdG9fc2hfY2hhbihjaGFuKSBjb250YWluZXJfb2YoY2hhbiwgc3RydWN0IHNoX2RtYWVfY2hhbiwgY29tbW9uKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmMKaW5kZXggMzM5MWU2Ny4uY2YxN2RiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5jCkBAIC0xMyw3ICsxMyw3IEBACiBzdGF0aWMgaW50IGVjY19lbmFibGVfb3ZlcnJpZGU7CiBtb2R1bGVfcGFyYW0oZWNjX2VuYWJsZV9vdmVycmlkZSwgaW50LCAwNjQ0KTsKIAotc3RhdGljIHN0cnVjdCBtc3IgKm1zcnM7CitzdGF0aWMgc3RydWN0IG1zciBfX3BlcmNwdSAqbXNyczsKIAogLyogTG9va3VwIHRhYmxlIGZvciBhbGwgcG9zc2libGUgTUMgY29udHJvbCBpbnN0YW5jZXMgKi8KIHN0cnVjdCBhbWQ2NF9wdnQ7CkBAIC0yNTUzLDE0ICsyNTUzLDE0IEBACiAKIAkJaWYgKG9uKSB7CiAJCQlpZiAocmVnLT5sICYgSzhfTVNSX01DR0NUTF9OQkUpCi0JCQkJcHZ0LT5mbGFncy5lY2NfcmVwb3J0ID0gMTsKKwkJCQlwdnQtPmZsYWdzLm5iX21jZV9lbmFibGUgPSAxOwogCiAJCQlyZWctPmwgfD0gSzhfTVNSX01DR0NUTF9OQkU7CiAJCX0gZWxzZSB7CiAJCQkvKgotCQkJICogVHVybiBvZmYgRUNDIHJlcG9ydGluZyBvbmx5IHdoZW4gaXQgd2FzIG9mZiBiZWZvcmUKKwkJCSAqIFR1cm4gb2ZmIE5CIE1DRSByZXBvcnRpbmcgb25seSB3aGVuIGl0IHdhcyBvZmYgYmVmb3JlCiAJCQkgKi8KLQkJCWlmICghcHZ0LT5mbGFncy5lY2NfcmVwb3J0KQorCQkJaWYgKCFwdnQtPmZsYWdzLm5iX21jZV9lbmFibGUpCiAJCQkJcmVnLT5sICY9IH5LOF9NU1JfTUNHQ1RMX05CRTsKIAkJfQogCX0KQEAgLTI1NzEsMjIgKzI1NzEsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIE9ubHkgaWYgJ2VjY19lbmFibGVfb3ZlcnJpZGUnIGlzIHNldCBBTkQgQklPUyBoYWQgRUNDIGRpc2FibGVkLCBkbyAid2UiCi0gKiBlbmFibGUgaXQuCi0gKi8KIHN0YXRpYyB2b2lkIGFtZDY0X2VuYWJsZV9lY2NfZXJyb3JfcmVwb3J0aW5nKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSkKIHsKIAlzdHJ1Y3QgYW1kNjRfcHZ0ICpwdnQgPSBtY2ktPnB2dF9pbmZvOwogCXUzMiB2YWx1ZSwgbWFzayA9IEs4X05CQ1RMX0NFQ0NFbiB8IEs4X05CQ1RMX1VFQ0NFbjsKIAotCWlmICghZWNjX2VuYWJsZV9vdmVycmlkZSkKLQkJcmV0dXJuOwotCi0JYW1kNjRfcHJpbnRrKEtFUk5fV0FSTklORywKLQkJIidlY2NfZW5hYmxlX292ZXJyaWRlJyBwYXJhbWV0ZXIgaXMgYWN0aXZlLCAiCi0JCSJFbmFibGluZyBBTUQgRUNDIGhhcmR3YXJlIG5vdzogQ0FVVElPTlxuIik7Ci0KIAlhbWQ2NF9yZWFkX3BjaV9jZmcocHZ0LT5taXNjX2YzX2N0bCwgSzhfTkJDVEwsICZ2YWx1ZSk7CiAKIAkvKiB0dXJuIG9uIFVFQ0NuIGFuZCBDRUNDRW4gYml0cyAqLwpAQCAtMjYxMSw2ICsyNjAwLDggQEAKIAkJCSJUaGlzIG5vZGUgcmVwb3J0cyB0aGF0IERSQU0gRUNDIGlzICIKIAkJCSJjdXJyZW50bHkgRGlzYWJsZWQ7IEVOQUJMSU5HIG5vd1xuIik7CiAKKwkJcHZ0LT5mbGFncy5uYl9lY2NfcHJldiA9IDA7CisKIAkJLyogQXR0ZW1wdCB0byB0dXJuIG9uIERSQU0gRUNDIEVuYWJsZSAqLwogCQl2YWx1ZSB8PSBLOF9OQkNGR19FQ0NfRU5BQkxFOwogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHB2dC0+bWlzY19mM19jdGwsIEs4X05CQ0ZHLCB2YWx1ZSk7CkBAIC0yNjI1LDcgKzI2MTYsMTAgQEAKIAkJCWFtZDY0X3ByaW50ayhLRVJOX0RFQlVHLAogCQkJCSJIYXJkd2FyZSBhY2NlcHRlZCBEUkFNIEVDQyBFbmFibGVcbiIpOwogCQl9CisJfSBlbHNlIHsKKwkJcHZ0LT5mbGFncy5uYl9lY2NfcHJldiA9IDE7CiAJfQorCiAJZGVidWdmMCgiTkJDRkcoMik9IDB4JXggIENISVBLSUxMPSAlcyBFQ0NfRU5BQkxFPSAlc1xuIiwgdmFsdWUsCiAJCSh2YWx1ZSAmIEs4X05CQ0ZHX0NISVBLSUxMKSA/ICJFbmFibGVkIiA6ICJEaXNhYmxlZCIsCiAJCSh2YWx1ZSAmIEs4X05CQ0ZHX0VDQ19FTkFCTEUpID8gIkVuYWJsZWQiIDogIkRpc2FibGVkIik7CkBAIC0yNjQ0LDEyICsyNjM4LDE4IEBACiAJdmFsdWUgJj0gfm1hc2s7CiAJdmFsdWUgfD0gcHZ0LT5vbGRfbmJjdGw7CiAKLQkvKiByZXN0b3JlIHRoZSBOQiBFbmFibGUgTUNHQ1RMIGJpdCAqLwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQocHZ0LT5taXNjX2YzX2N0bCwgSzhfTkJDVEwsIHZhbHVlKTsKIAorCS8qIHJlc3RvcmUgcHJldmlvdXMgQklPUyBEUkFNIEVDQyAib2ZmIiBzZXR0aW5nIHdoaWNoIHdlIGZvcmNlLWVuYWJsZWQgKi8KKwlpZiAoIXB2dC0+ZmxhZ3MubmJfZWNjX3ByZXYpIHsKKwkJYW1kNjRfcmVhZF9wY2lfY2ZnKHB2dC0+bWlzY19mM19jdGwsIEs4X05CQ0ZHLCAmdmFsdWUpOworCQl2YWx1ZSAmPSB+SzhfTkJDRkdfRUNDX0VOQUJMRTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwdnQtPm1pc2NfZjNfY3RsLCBLOF9OQkNGRywgdmFsdWUpOworCX0KKworCS8qIHJlc3RvcmUgdGhlIE5CIEVuYWJsZSBNQ0dDVEwgYml0ICovCiAJaWYgKGFtZDY0X3RvZ2dsZV9lY2NfZXJyX3JlcG9ydGluZyhwdnQsIE9GRikpCi0JCWFtZDY0X3ByaW50ayhLRVJOX1dBUk5JTkcsICJFcnJvciByZXN0b3JpbmcgRUNDIHJlcG9ydGluZyBvdmVyICIKLQkJCQkJICAgIk1DR0NUTCFcbiIpOworCQlhbWQ2NF9wcmludGsoS0VSTl9XQVJOSU5HLCAiRXJyb3IgcmVzdG9yaW5nIE5CIE1DR0NUTCBzZXR0aW5ncyFcbiIpOwogfQogCiAvKgpAQCAtMjY5MCw4ICsyNjkwLDkgQEAKIAkJaWYgKCFlY2NfZW5hYmxlX292ZXJyaWRlKSB7CiAJCQlhbWQ2NF9wcmludGsoS0VSTl9OT1RJQ0UsICIlcyIsIGVjY19tc2cpOwogCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0gZWxzZSB7CisJCQlhbWQ2NF9wcmludGsoS0VSTl9XQVJOSU5HLCAiRm9yY2luZyBFQ0MgY2hlY2tpbmcgb24hXG4iKTsKIAkJfQotCQllY2NfZW5hYmxlX292ZXJyaWRlID0gMDsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmggYi9kcml2ZXJzL2VkYWMvYW1kNjRfZWRhYy5oCmluZGV4IDQxYmM1NjEuLjBkNGJmNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9hbWQ2NF9lZGFjLmgKKysrIGIvZHJpdmVycy9lZGFjL2FtZDY0X2VkYWMuaApAQCAtNDg3LDcgKzQ4Nyw4IEBACiAJLyogbWlzYyBzZXR0aW5ncyAqLwogCXN0cnVjdCBmbGFncyB7CiAJCXVuc2lnbmVkIGxvbmcgY2Y4X2V4dGNmZzoxOwotCQl1bnNpZ25lZCBsb25nIGVjY19yZXBvcnQ6MTsKKwkJdW5zaWduZWQgbG9uZyBuYl9tY2VfZW5hYmxlOjE7CisJCXVuc2lnbmVkIGxvbmcgbmJfZWNjX3ByZXY6MTsKIAl9IGZsYWdzOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL2U3NTJ4X2VkYWMuYyBiL2RyaXZlcnMvZWRhYy9lNzUyeF9lZGFjLmMKaW5kZXggZDIwNWQ0OS4uMjQzZTlhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2U3NTJ4X2VkYWMuYworKysgYi9kcml2ZXJzL2VkYWMvZTc1MnhfZWRhYy5jCkBAIC03NSw2ICs3NSwxNCBAQAogI2RlZmluZSBFNzUyWF9OUl9DU1JPV1MJCTgJLyogbnVtYmVyIG9mIGNzcm93cyAqLwogCiAvKiBFNzUyWCByZWdpc3RlciBhZGRyZXNzZXMgLSBkZXZpY2UgMCBmdW5jdGlvbiAwICovCisjZGVmaW5lIEU3NTJYX01DSFNDUkIJCTB4NTIJLyogTWVtb3J5IFNjcnViIHJlZ2lzdGVyICgxNmIpICovCisJCQkJCS8qCisJCQkJCSAqIDY6NSAgICAgU2NydWIgQ29tcGxldGlvbiBDb3VudAorCQkJCQkgKiAzOjIgICAgIFNjcnViIFJhdGUgKGkzMTAwIG9ubHkpCisJCQkJCSAqICAgICAgMDE9ZmFzdCAxMD1ub3JtYWwKKwkJCQkJICogMTowICAgICBTY3J1YiBNb2RlIGVuYWJsZQorCQkJCQkgKiAgICAgIDAwPW9mZiAxMD1vbgorCQkJCQkgKi8KICNkZWZpbmUgRTc1MlhfRFJCCQkweDYwCS8qIERSQU0gcm93IGJvdW5kYXJ5IHJlZ2lzdGVyICg4YikgKi8KICNkZWZpbmUgRTc1MlhfRFJBCQkweDcwCS8qIERSQU0gcm93IGF0dHJpYnV0ZSByZWdpc3RlciAoOGIpICovCiAJCQkJCS8qCkBAIC0yNDAsNiArMjQ4LDQxIEBACiAJCS5jdGxfbmFtZSA9ICIzMTAwIn0sCiB9OwogCisvKiBWYWxpZCBzY3J1YiByYXRlcyBmb3IgdGhlIGU3NTJ4LzMxMDAgaGFyZHdhcmUgbWVtb3J5IHNjcnViYmVyLiBXZQorICogbWFwIHRoZSBzY3J1YmJpbmcgYmFuZHdpZHRoIHRvIGEgaGFyZHdhcmUgcmVnaXN0ZXIgdmFsdWUuIFRoZSAnc2V0JworICogb3BlcmF0aW9uIGZpbmRzIHRoZSAnbWF0Y2hpbmcgb3IgaGlnaGVyIHZhbHVlJy4gIE5vdGUgdGhhdCBzY3J1YmJpbmcKKyAqIG9uIHRoZSBlNzUyeCBjYW4gb25seSBiZSBlbmFibGVkL2Rpc2FibGVkLiAgVGhlIDMxMDAgc3VwcG9ydHMKKyAqIGEgbm9ybWFsIGFuZCBmYXN0IG1vZGUuCisgKi8KKworI2RlZmluZSBTRFJBVEVfRU9UIDB4RkZGRkZGRkYKKworc3RydWN0IHNjcnVicmF0ZSB7CisJdTMyIGJhbmR3aWR0aDsJLyogYmFuZHdpZHRoIGNvbnN1bWVkIGJ5IHNjcnViYmluZyBpbiBieXRlcy9zZWMgKi8KKwl1MTYgc2NydWJ2YWw7CS8qIHJlZ2lzdGVyIHZhbHVlIGZvciBzY3J1YiByYXRlICovCit9OworCisvKiBSYXRlIGJlbG93IGFzc3VtZXMgc2FtZSBwZXJmb3JtYW5jZSBhcyBpMzEwMCB1c2luZyBQQzMyMDAgRERSMiBpbgorICogbm9ybWFsIG1vZGUuICBlNzUyeCBicmlkZ2VzIGRvbid0IHN1cHBvcnQgY2hvb3Npbmcgbm9ybWFsIG9yIGZhc3QgbW9kZSwKKyAqIHNvIHRoZSBzY3J1YmJpbmcgYmFuZHdpZHRoIHZhbHVlIGlzbid0IGFsbCB0aGF0IGltcG9ydGFudCAtIHNjcnViYmluZyBpcworICogZWl0aGVyIG9uIG9yIG9mZi4KKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzY3J1YnJhdGUgc2NydWJyYXRlc19lNzUyeFtdID0geworCXswLAkJMHgwMH0sCS8qIFNjcnViYmluZyBPZmYgKi8KKwl7NTAwMDAwLAkweDAyfSwJLyogU2NydWJiaW5nIE9uICovCisJe1NEUkFURV9FT1QsCTB4MDB9CS8qIEVuZCBvZiBUYWJsZSAqLworfTsKKworLyogRmFzdCBtb2RlOiAyIEdCeXRlIFBDMzIwMCBERFIyIHNjcnViYmVkIGluIDMzcyA9IDYzMTYxMjgzIGJ5dGVzL3MKKyAqIE5vcm1hbCBtb2RlOiAxMjUgKDMyMDAwIC8gMjU2KSB0aW1lcyBzbG93ZXIgdGhhbiBmYXN0IG1vZGUuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2NydWJyYXRlIHNjcnVicmF0ZXNfaTMxMDBbXSA9IHsKKwl7MCwJCTB4MDB9LAkvKiBTY3J1YmJpbmcgT2ZmICovCisJezUwMDAwMCwJMHgwYX0sCS8qIE5vcm1hbCBtb2RlIC0gMzJrIGNsb2NrcyAqLworCXs2MjUwMDAwMCwJMHgwNn0sCS8qIEZhc3QgbW9kZSAtIDI1NiBjbG9ja3MgKi8KKwl7U0RSQVRFX0VPVCwJMHgwMH0JLyogRW5kIG9mIFRhYmxlICovCit9OworCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBjdGxfcGFnZV90b19waHlzKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwKIAkJCQl1bnNpZ25lZCBsb25nIHBhZ2UpCiB7CkBAIC05MTUsNiArOTU4LDY4IEBACiAJZTc1MnhfcHJvY2Vzc19lcnJvcl9pbmZvKG1jaSwgJmluZm8sIDEpOwogfQogCisvKiBQcm9ncmFtIGJ5dGUvc2VjIGJhbmR3aWR0aCBzY3J1YiByYXRlIHRvIGhhcmR3YXJlICovCitzdGF0aWMgaW50IHNldF9zZHJhbV9zY3J1Yl9yYXRlKHN0cnVjdCBtZW1fY3RsX2luZm8gKm1jaSwgdTMyICpuZXdfYncpCit7CisJY29uc3Qgc3RydWN0IHNjcnVicmF0ZSAqc2NydWJyYXRlczsKKwlzdHJ1Y3QgZTc1MnhfcHZ0ICpwdnQgPSAoc3RydWN0IGU3NTJ4X3B2dCAqKSBtY2ktPnB2dF9pbmZvOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcHZ0LT5kZXZfZDBmMDsKKwlpbnQgaTsKKworCWlmIChwdnQtPmRldl9pbmZvLT5jdGxfZGV2ID09IFBDSV9ERVZJQ0VfSURfSU5URUxfMzEwMF8wKQorCQlzY3J1YnJhdGVzID0gc2NydWJyYXRlc19pMzEwMDsKKwllbHNlCisJCXNjcnVicmF0ZXMgPSBzY3J1YnJhdGVzX2U3NTJ4OworCisJLyogVHJhbnNsYXRlIHRoZSBkZXNpcmVkIHNjcnViIHJhdGUgdG8gYSBlNzUyeC8zMTAwIHJlZ2lzdGVyIHZhbHVlLgorCSAqIFNlYXJjaCBmb3IgdGhlIGJhbmR3aWR0aCB0aGF0IGlzIGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiB0aGUKKwkgKiBkZXNpcmVkIHJhdGUgYW5kIHByb2dyYW0gdGhlIGNvb3Jlc3BvbmRpbmcgcmVnaXN0ZXIgdmFsdWUuCisJICovCisJZm9yIChpID0gMDsgc2NydWJyYXRlc1tpXS5iYW5kd2lkdGggIT0gU0RSQVRFX0VPVDsgaSsrKQorCQlpZiAoc2NydWJyYXRlc1tpXS5iYW5kd2lkdGggPj0gKm5ld19idykKKwkJCWJyZWFrOworCisJaWYgKHNjcnVicmF0ZXNbaV0uYmFuZHdpZHRoID09IFNEUkFURV9FT1QpCisJCXJldHVybiAtMTsKKworCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBFNzUyWF9NQ0hTQ1JCLCBzY3J1YnJhdGVzW2ldLnNjcnVidmFsKTsKKworCXJldHVybiAwOworfQorCisvKiBDb252ZXJ0IGN1cnJlbnQgc2NydWIgcmF0ZSB2YWx1ZSBpbnRvIGJ5dGUvc2VjIGJhbmR3aWR0aCAqLworc3RhdGljIGludCBnZXRfc2RyYW1fc2NydWJfcmF0ZShzdHJ1Y3QgbWVtX2N0bF9pbmZvICptY2ksIHUzMiAqYncpCit7CisJY29uc3Qgc3RydWN0IHNjcnVicmF0ZSAqc2NydWJyYXRlczsKKwlzdHJ1Y3QgZTc1MnhfcHZ0ICpwdnQgPSAoc3RydWN0IGU3NTJ4X3B2dCAqKSBtY2ktPnB2dF9pbmZvOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcHZ0LT5kZXZfZDBmMDsKKwl1MTYgc2NydWJ2YWw7CisJaW50IGk7CisKKwlpZiAocHZ0LT5kZXZfaW5mby0+Y3RsX2RldiA9PSBQQ0lfREVWSUNFX0lEX0lOVEVMXzMxMDBfMCkKKwkJc2NydWJyYXRlcyA9IHNjcnVicmF0ZXNfaTMxMDA7CisJZWxzZQorCQlzY3J1YnJhdGVzID0gc2NydWJyYXRlc19lNzUyeDsKKworCS8qIEZpbmQgdGhlIGJhbmR3aWR0aCBtYXRjaGluZyB0aGUgbWVtb3J5IHNjcnViYmVyIGNvbmZpZ3VyYXRpb24gKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBFNzUyWF9NQ0hTQ1JCLCAmc2NydWJ2YWwpOworCXNjcnVidmFsID0gc2NydWJ2YWwgJiAweDBmOworCisJZm9yIChpID0gMDsgc2NydWJyYXRlc1tpXS5iYW5kd2lkdGggIT0gU0RSQVRFX0VPVDsgaSsrKQorCQlpZiAoc2NydWJyYXRlc1tpXS5zY3J1YnZhbCA9PSBzY3J1YnZhbCkKKwkJCWJyZWFrOworCisJaWYgKHNjcnVicmF0ZXNbaV0uYmFuZHdpZHRoID09IFNEUkFURV9FT1QpIHsKKwkJZTc1MnhfcHJpbnRrKEtFUk5fV0FSTklORywKKwkJCSJJbnZhbGlkIHNkcmFtIHNjcnViIGNvbnRyb2wgdmFsdWU6IDB4JXhcbiIsIHNjcnVidmFsKTsKKwkJcmV0dXJuIC0xOworCX0KKworCSpidyA9IHNjcnVicmF0ZXNbaV0uYmFuZHdpZHRoOworCisJcmV0dXJuIDA7Cit9CisKIC8qIFJldHVybiAxIGlmIGR1YWwgY2hhbm5lbCBtb2RlIGlzIGFjdGl2ZS4gIEVsc2UgcmV0dXJuIDAuICovCiBzdGF0aWMgaW5saW5lIGludCBkdWFsX2NoYW5uZWxfYWN0aXZlKHUxNiBkZHJjc3IpCiB7CkBAIC0xMDczLDEwICsxMTc4LDcgQEAKIAogLyogU2V0dXAgc3lzdGVtIGJ1cyBwYXJpdHkgbWFzayByZWdpc3Rlci4KICAqIFN5c2J1cyBwYXJpdHkgc3VwcG9ydGVkIG9uOgotICogICBlNzMyMC9lNzUyMC9lNzUyNSArIFhlb24KLSAqICAgaTMxMDAgKyBYZW9uL0NlbGVyb24KLSAqIFN5c2J1cyBwYXJpdHkgbm90IHN1cHBvcnRlZCBvbjoKLSAqICAgaTMxMDAgKyBQZW50aXVtIE0vQ2VsZXJvbiBNL0NvcmUgRHVvL0NvcmUyIER1bworICogZTczMjAvZTc1MjAvZTc1MjUgKyBYZW9uCiAgKi8KIHN0YXRpYyB2b2lkIGU3NTJ4X2luaXRfc3lzYnVzX3Bhcml0eV9tYXNrKHN0cnVjdCBlNzUyeF9wdnQgKnB2dCkKIHsKQEAgLTEwODcsMTAgKzExODksNyBAQAogCS8qIEFsbG93IG1vZHVsZSBwYXJhbWV0ZXIgb3ZlcnJpZGUsIGVsc2Ugc2VlIGlmIENQVSBzdXBwb3J0cyBwYXJpdHkgKi8KIAlpZiAoc3lzYnVzX3Bhcml0eSAhPSAtMSkgewogCQllbmFibGUgPSBzeXNidXNfcGFyaXR5OwotCX0gZWxzZSBpZiAoY3B1X2lkWzBdICYmCi0JCSAgICgoc3Ryc3RyKGNwdV9pZCwgIlBlbnRpdW0iKSAmJiBzdHJzdHIoY3B1X2lkLCAiIE0gIikpIHx8Ci0JCSAgICAoc3Ryc3RyKGNwdV9pZCwgIkNlbGVyb24iKSAmJiBzdHJzdHIoY3B1X2lkLCAiIE0gIikpIHx8Ci0JCSAgICAoc3Ryc3RyKGNwdV9pZCwgIkNvcmUiKSAmJiBzdHJzdHIoY3B1X2lkLCAiRHVvIikpKSkgeworCX0gZWxzZSBpZiAoY3B1X2lkWzBdICYmICFzdHJzdHIoY3B1X2lkLCAiWGVvbiIpKSB7CiAJCWU3NTJ4X3ByaW50ayhLRVJOX0lORk8sICJTeXN0ZW0gQnVzIFBhcml0eSBub3QgIgogCQkJICAgICAic3VwcG9ydGVkIGJ5IENQVSwgZGlzYWJsaW5nXG4iKTsKIAkJZW5hYmxlID0gMDsKQEAgLTExODcsNiArMTI4Niw4IEBACiAJbWNpLT5kZXZfbmFtZSA9IHBjaV9uYW1lKHBkZXYpOwogCW1jaS0+ZWRhY19jaGVjayA9IGU3NTJ4X2NoZWNrOwogCW1jaS0+Y3RsX3BhZ2VfdG9fcGh5cyA9IGN0bF9wYWdlX3RvX3BoeXM7CisJbWNpLT5zZXRfc2RyYW1fc2NydWJfcmF0ZSA9IHNldF9zZHJhbV9zY3J1Yl9yYXRlOworCW1jaS0+Z2V0X3NkcmFtX3NjcnViX3JhdGUgPSBnZXRfc2RyYW1fc2NydWJfcmF0ZTsKIAogCS8qIHNldCB0aGUgbWFwIHR5cGUuICAxID0gbm9ybWFsLCAwID0gcmV2ZXJzZWQKIAkgKiBNdXN0IGJlIHNldCBiZWZvcmUgZTc1MnhfaW5pdF9jc3Jvd3MgaW4gY2FzZSBjc3JvdyBtYXBwaW5nCmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvZWRhY19kZXZpY2Vfc3lzZnMuYyBiL2RyaXZlcnMvZWRhYy9lZGFjX2RldmljZV9zeXNmcy5jCmluZGV4IDUzNzY0NTcuLjVmZGVkYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9lZGFjX2RldmljZV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvZWRhYy9lZGFjX2RldmljZV9zeXNmcy5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIH0KIAogLyogZWRhY19kZXYgZmlsZSBvcGVyYXRpb25zIGZvciBhbiAnY3RsX2luZm8nICovCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBkZXZpY2VfY3RsX2luZm9fb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgZGV2aWNlX2N0bF9pbmZvX29wcyA9IHsKIAkuc2hvdyA9IGVkYWNfZGV2X2N0bF9pbmZvX3Nob3csCiAJLnN0b3JlID0gZWRhY19kZXZfY3RsX2luZm9fc3RvcmUKIH07CkBAIC0zNzMsNyArMzczLDcgQEAKIH0KIAogLyogZWRhY19kZXYgZmlsZSBvcGVyYXRpb25zIGZvciBhbiAnaW5zdGFuY2UnICovCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBkZXZpY2VfaW5zdGFuY2Vfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgZGV2aWNlX2luc3RhbmNlX29wcyA9IHsKIAkuc2hvdyA9IGVkYWNfZGV2X2luc3RhbmNlX3Nob3csCiAJLnN0b3JlID0gZWRhY19kZXZfaW5zdGFuY2Vfc3RvcmUKIH07CkBAIC00NzYsNyArNDc2LDcgQEAKIH0KIAogLyogZWRhY19kZXYgZmlsZSBvcGVyYXRpb25zIGZvciBhICdibG9jaycgKi8KLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIGRldmljZV9ibG9ja19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBkZXZpY2VfYmxvY2tfb3BzID0gewogCS5zaG93ID0gZWRhY19kZXZfYmxvY2tfc2hvdywKIAkuc3RvcmUgPSBlZGFjX2Rldl9ibG9ja19zdG9yZQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9lZGFjX21jX3N5c2ZzLmMgYi9kcml2ZXJzL2VkYWMvZWRhY19tY19zeXNmcy5jCmluZGV4IGUxZDRjZTAuLjg4ODQwZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9lZGFjX21jX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9lZGFjL2VkYWNfbWNfc3lzZnMuYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAJcmV0dXJuIC1FSU87CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIGNzcm93ZnNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgY3Nyb3dmc19vcHMgPSB7CiAJLnNob3cgPSBjc3Jvd2Rldl9zaG93LAogCS5zdG9yZSA9IGNzcm93ZGV2X3N0b3JlCiB9OwpAQCAtNTc1LDcgKzU3NSw3IEBACiB9CiAKIC8qIEludGVybWVkaWF0ZSBzaG93L3N0b3JlIHRhYmxlICovCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBtY2lfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgbWNpX29wcyA9IHsKIAkuc2hvdyA9IG1jaWRldl9zaG93LAogCS5zdG9yZSA9IG1jaWRldl9zdG9yZQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWRhYy9lZGFjX3BjaV9zeXNmcy5jIGIvZHJpdmVycy9lZGFjL2VkYWNfcGNpX3N5c2ZzLmMKaW5kZXggZmI2MGE4Ny4uYmVmOTRlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL2VkYWNfcGNpX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9lZGFjL2VkYWNfcGNpX3N5c2ZzLmMKQEAgLTEyMSw3ICsxMjEsNyBAQAogfQogCiAvKiBmc19vcHMgdGFibGUgKi8KLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIHBjaV9pbnN0YW5jZV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBwY2lfaW5zdGFuY2Vfb3BzID0gewogCS5zaG93ID0gZWRhY19wY2lfaW5zdGFuY2Vfc2hvdywKIAkuc3RvcmUgPSBlZGFjX3BjaV9pbnN0YW5jZV9zdG9yZQogfTsKQEAgLTI2MSw3ICsyNjEsNyBAQAogCXJldHVybiAtRUlPOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBlZGFjX3BjaV9zeXNmc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBlZGFjX3BjaV9zeXNmc19vcHMgPSB7CiAJLnNob3cgPSBlZGFjX3BjaV9kZXZfc2hvdywKIAkuc3RvcmUgPSBlZGFjX3BjaV9kZXZfc3RvcmUKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmMKaW5kZXggZWNkNTkyOC4uOTRjYWMwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5jCisrKyBiL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuYwpAQCAtMjM5LDE2ICsyMzksMTUgQEAKIAkvKiB3ZSBvbmx5IG5lZWQgdGhlIGVycm9yIHJlZ2lzdGVycyAqLwogCXIuc3RhcnQgKz0gMHhlMDA7CiAKLQlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZvcC0+ZGV2LCByLnN0YXJ0LAotCQkJCQlyLmVuZCAtIHIuc3RhcnQgKyAxLCBwZGF0YS0+bmFtZSkpIHsKKwlpZiAoIWRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZvcC0+ZGV2LCByLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZyKSwKKwkJCQkJcGRhdGEtPm5hbWUpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIHdoaWxlIHJlcXVlc3RpbmcgbWVtIHJlZ2lvblxuIiwKIAkJICAgICAgIF9fZnVuY19fKTsKIAkJcmVzID0gLUVCVVNZOwogCQlnb3RvIGVycjsKIAl9CiAKLQlwZGF0YS0+cGNpX3ZiYXNlID0gZGV2bV9pb3JlbWFwKCZvcC0+ZGV2LCByLnN0YXJ0LAotCQkJCQlyLmVuZCAtIHIuc3RhcnQgKyAxKTsKKwlwZGF0YS0+cGNpX3ZiYXNlID0gZGV2bV9pb3JlbWFwKCZvcC0+ZGV2LCByLnN0YXJ0LCByZXNvdXJjZV9zaXplKCZyKSk7CiAJaWYgKCFwZGF0YS0+cGNpX3ZiYXNlKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuYWJsZSB0byBzZXR1cCBQQ0kgZXJyIHJlZ3NcbiIsIF9fZnVuY19fKTsKIAkJcmVzID0gLUVOT01FTTsKQEAgLTY2OCwxNSArNjY3LDEyNSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBNQyBFcnIgZGV2aWNlICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorLyoKKyAqIFRha2VuIGZyb20gdGFibGUgOC01NSBpbiB0aGUgTVBDODY0MSBVc2VyJ3MgTWFudWFsIGFuZC9vciA5LTYxIGluIHRoZQorICogTVBDODU3MiBVc2VyJ3MgTWFudWFsLiAgRWFjaCBsaW5lIHJlcHJlc2VudHMgYSBzeW5kcm9tZSBiaXQgY29sdW1uIGFzIGEKKyAqIDY0LWJpdCB2YWx1ZSwgYnV0IHNwbGl0IGludG8gYW4gdXBwZXIgYW5kIGxvd2VyIDMyLWJpdCBjaHVuay4gIFRoZSBsYWJlbHMKKyAqIGJlbG93IGNvcnJlc3BvbmQgdG8gRnJlZXNjYWxlJ3MgbWFudWFscy4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBlY2NfdGFibGVbMTZdID0geworCS8qIE1TQiAgICAgICAgICAgTFNCICovCisJLyogWzA6MzFdICAgIFszMjo2M10gKi8KKwkweGYwMGZlMTFlLCAweGMzM2MwZmY3LAkvKiBTeW5kcm9tZSBiaXQgNyAqLworCTB4MDBmZjAwZmYsIDB4MDBmZmYwZmYsCisJMHgwZjBmMGYwZiwgMHgwZjBmZmYwMCwKKwkweDExMTEzMzMzLCAweDc3NzcwMDBmLAorCTB4MjIyMjQ0NDQsIDB4ODg4ODIyMmYsCisJMHg0NDQ0ODg4OCwgMHhmZmZmNDQ0MSwKKwkweDg4ODhmZmZmLCAweDExMTE4ODgyLAorCTB4ZmZmZjExMTEsIDB4MjIyMjExMTQsCS8qIFN5bmRyb21lIGJpdCAwICovCit9OworCisvKgorICogQ2FsY3VsYXRlIHRoZSBjb3JyZWN0IEVDQyB2YWx1ZSBmb3IgYSA2NC1iaXQgdmFsdWUgc3BlY2lmaWVkIGJ5IGhpZ2g6bG93CisgKi8KK3N0YXRpYyB1OCBjYWxjdWxhdGVfZWNjKHUzMiBoaWdoLCB1MzIgbG93KQoreworCXUzMiBtYXNrX2xvdzsKKwl1MzIgbWFza19oaWdoOworCWludCBiaXRfY250OworCXU4IGVjYyA9IDA7CisJaW50IGk7CisJaW50IGo7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCW1hc2tfaGlnaCA9IGVjY190YWJsZVtpICogMl07CisJCW1hc2tfbG93ID0gZWNjX3RhYmxlW2kgKiAyICsgMV07CisJCWJpdF9jbnQgPSAwOworCisJCWZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB7CisJCQlpZiAoKG1hc2tfaGlnaCA+PiBqKSAmIDEpCisJCQkJYml0X2NudCBePSAoaGlnaCA+PiBqKSAmIDE7CisJCQlpZiAoKG1hc2tfbG93ID4+IGopICYgMSkKKwkJCQliaXRfY250IF49IChsb3cgPj4gaikgJiAxOworCQl9CisKKwkJZWNjIHw9IGJpdF9jbnQgPDwgaTsKKwl9CisKKwlyZXR1cm4gZWNjOworfQorCisvKgorICogQ3JlYXRlIHRoZSBzeW5kcm9tZSBjb2RlIHdoaWNoIGlzIGdlbmVyYXRlZCBpZiB0aGUgZGF0YSBsaW5lIHNwZWNpZmllZCBieQorICogJ2JpdCcgZmFpbGVkLiAgRWcgZ2VuZXJhdGUgYW4gOC1iaXQgY29kZXMgc2VlbiBpbiBUYWJsZSA4LTU1IGluIHRoZSBNUEM4NjQxCisgKiBVc2VyJ3MgTWFudWFsIGFuZCA5LTYxIGluIHRoZSBNUEM4NTcyIFVzZXIncyBNYW51YWwuCisgKi8KK3N0YXRpYyB1OCBzeW5kcm9tZV9mcm9tX2JpdCh1bnNpZ25lZCBpbnQgYml0KSB7CisJaW50IGk7CisJdTggc3luZHJvbWUgPSAwOworCisJLyoKKwkgKiBDeWNsZSB0aHJvdWdoIHRoZSB1cHBlciBvciBsb3dlciAzMi1iaXQgcG9ydGlvbiBvZiBlYWNoIHZhbHVlIGluCisJICogZWNjX3RhYmxlIGRlcGVuZGluZyBvbiBpZiAnYml0JyBpcyBpbiB0aGUgdXBwZXIgb3IgbG93ZXIgaGFsZiBvZgorCSAqIDY0LWJpdCBkYXRhLgorCSAqLworCWZvciAoaSA9IGJpdCA8IDMyOyBpIDwgMTY7IGkgKz0gMikKKwkJc3luZHJvbWUgfD0gKChlY2NfdGFibGVbaV0gPj4gKGJpdCAlIDMyKSkgJiAxKSA8PCAoaSAvIDIpOworCisJcmV0dXJuIHN5bmRyb21lOworfQorCisvKgorICogRGVjb2RlIGRhdGEgYW5kIGVjYyBzeW5kcm9tZSB0byBkZXRlcm1pbmUgd2hhdCB3ZW50IHdyb25nCisgKiBOb3RlOiBUaGlzIGNhbiBvbmx5IGRlY29kZSBzaW5nbGUtYml0IGVycm9ycworICovCitzdGF0aWMgdm9pZCBzYmVfZWNjX2RlY29kZSh1MzIgY2FwX2hpZ2gsIHUzMiBjYXBfbG93LCB1MzIgY2FwX2VjYywKKwkJICAgICAgIGludCAqYmFkX2RhdGFfYml0LCBpbnQgKmJhZF9lY2NfYml0KQoreworCWludCBpOworCXU4IHN5bmRyb21lOworCisJKmJhZF9kYXRhX2JpdCA9IC0xOworCSpiYWRfZWNjX2JpdCA9IC0xOworCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIEVDQyBvZiB0aGUgY2FwdHVyZWQgZGF0YSBhbmQgWE9SIGl0IHdpdGggdGhlIGNhcHR1cmVkCisJICogRUNDIHRvIGZpbmQgYW4gRUNDIHN5bmRyb21lIHZhbHVlIHdlIGNhbiBzZWFyY2ggZm9yCisJICovCisJc3luZHJvbWUgPSBjYWxjdWxhdGVfZWNjKGNhcF9oaWdoLCBjYXBfbG93KSBeIGNhcF9lY2M7CisKKwkvKiBDaGVjayBpZiBhIGRhdGEgbGluZSBpcyBzdHVjay4uLiAqLworCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7CisJCWlmIChzeW5kcm9tZSA9PSBzeW5kcm9tZV9mcm9tX2JpdChpKSkgeworCQkJKmJhZF9kYXRhX2JpdCA9IGk7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBJZiBkYXRhIGlzIGNvcnJlY3QsIGNoZWNrIEVDQyBiaXRzIGZvciBlcnJvcnMuLi4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmICgoc3luZHJvbWUgPj4gaSkgJiAweDEpIHsKKwkJCSpiYWRfZWNjX2JpdCA9IGk7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9CisKIHN0YXRpYyB2b2lkIG1wYzg1eHhfbWNfY2hlY2soc3RydWN0IG1lbV9jdGxfaW5mbyAqbWNpKQogewogCXN0cnVjdCBtcGM4NXh4X21jX3BkYXRhICpwZGF0YSA9IG1jaS0+cHZ0X2luZm87CiAJc3RydWN0IGNzcm93X2luZm8gKmNzcm93OworCXUzMiBidXNfd2lkdGg7CiAJdTMyIGVycl9kZXRlY3Q7CiAJdTMyIHN5bmRyb21lOwogCXUzMiBlcnJfYWRkcjsKIAl1MzIgcGZuOwogCWludCByb3dfaW5kZXg7CisJdTMyIGNhcF9oaWdoOworCXUzMiBjYXBfbG93OworCWludCBiYWRfZGF0YV9iaXQ7CisJaW50IGJhZF9lY2NfYml0OwogCiAJZXJyX2RldGVjdCA9IGluX2JlMzIocGRhdGEtPm1jX3ZiYXNlICsgTVBDODVYWF9NQ19FUlJfREVURUNUKTsKIAlpZiAoIWVycl9kZXRlY3QpCkBAIC02OTIsNiArODAxLDE1IEBACiAJfQogCiAJc3luZHJvbWUgPSBpbl9iZTMyKHBkYXRhLT5tY192YmFzZSArIE1QQzg1WFhfTUNfQ0FQVFVSRV9FQ0MpOworCisJLyogTWFzayBvZmYgYXBwcm9wcmlhdGUgYml0cyBvZiBzeW5kcm9tZSBiYXNlZCBvbiBidXMgd2lkdGggKi8KKwlidXNfd2lkdGggPSAoaW5fYmUzMihwZGF0YS0+bWNfdmJhc2UgKyBNUEM4NVhYX01DX0REUl9TRFJBTV9DRkcpICYKKwkJCURTQ19EQldfTUFTSykgPyAzMiA6IDY0OworCWlmIChidXNfd2lkdGggPT0gNjQpCisJCXN5bmRyb21lICY9IDB4ZmY7CisJZWxzZQorCQlzeW5kcm9tZSAmPSAweGZmZmY7CisKIAllcnJfYWRkciA9IGluX2JlMzIocGRhdGEtPm1jX3ZiYXNlICsgTVBDODVYWF9NQ19DQVBUVVJFX0FERFJFU1MpOwogCXBmbiA9IGVycl9hZGRyID4+IFBBR0VfU0hJRlQ7CiAKQEAgLTcwMSwxNCArODE5LDM1IEBACiAJCQlicmVhazsKIAl9CiAKLQltcGM4NXh4X21jX3ByaW50ayhtY2ksIEtFUk5fRVJSLCAiQ2FwdHVyZSBEYXRhIEhpZ2g6ICUjOC44eFxuIiwKLQkJCSAgaW5fYmUzMihwZGF0YS0+bWNfdmJhc2UgKwotCQkJCSAgTVBDODVYWF9NQ19DQVBUVVJFX0RBVEFfSEkpKTsKLQltcGM4NXh4X21jX3ByaW50ayhtY2ksIEtFUk5fRVJSLCAiQ2FwdHVyZSBEYXRhIExvdzogJSM4Ljh4XG4iLAotCQkJICBpbl9iZTMyKHBkYXRhLT5tY192YmFzZSArCi0JCQkJICBNUEM4NVhYX01DX0NBUFRVUkVfREFUQV9MTykpOwotCW1wYzg1eHhfbWNfcHJpbnRrKG1jaSwgS0VSTl9FUlIsICJzeW5kcm9tZTogJSM4Ljh4XG4iLCBzeW5kcm9tZSk7Ci0JbXBjODV4eF9tY19wcmludGsobWNpLCBLRVJOX0VSUiwgImVyciBhZGRyOiAlIzguOHhcbiIsIGVycl9hZGRyKTsKKwljYXBfaGlnaCA9IGluX2JlMzIocGRhdGEtPm1jX3ZiYXNlICsgTVBDODVYWF9NQ19DQVBUVVJFX0RBVEFfSEkpOworCWNhcF9sb3cgPSBpbl9iZTMyKHBkYXRhLT5tY192YmFzZSArIE1QQzg1WFhfTUNfQ0FQVFVSRV9EQVRBX0xPKTsKKworCS8qCisJICogQW5hbHl6ZSBzaW5nbGUtYml0IGVycm9ycyBvbiA2NC1iaXQgd2lkZSBidXNlcworCSAqIFRPRE86IEFkZCBzdXBwb3J0IGZvciAzMi1iaXQgd2lkZSBidXNlcworCSAqLworCWlmICgoZXJyX2RldGVjdCAmIEREUl9FREVfU0JFKSAmJiAoYnVzX3dpZHRoID09IDY0KSkgeworCQlzYmVfZWNjX2RlY29kZShjYXBfaGlnaCwgY2FwX2xvdywgc3luZHJvbWUsCisJCQkJJmJhZF9kYXRhX2JpdCwgJmJhZF9lY2NfYml0KTsKKworCQlpZiAoYmFkX2RhdGFfYml0ICE9IC0xKQorCQkJbXBjODV4eF9tY19wcmludGsobWNpLCBLRVJOX0VSUiwKKwkJCQkiRmF1bHR5IERhdGEgYml0OiAlZFxuIiwgYmFkX2RhdGFfYml0KTsKKwkJaWYgKGJhZF9lY2NfYml0ICE9IC0xKQorCQkJbXBjODV4eF9tY19wcmludGsobWNpLCBLRVJOX0VSUiwKKwkJCQkiRmF1bHR5IEVDQyBiaXQ6ICVkXG4iLCBiYWRfZWNjX2JpdCk7CisKKwkJbXBjODV4eF9tY19wcmludGsobWNpLCBLRVJOX0VSUiwKKwkJCSJFeHBlY3RlZCBEYXRhIC8gRUNDOlx0JSM4Ljh4XyUwOHggLyAlIzIuMnhcbiIsCisJCQljYXBfaGlnaCBeICgxIDw8IChiYWRfZGF0YV9iaXQgLSAzMikpLAorCQkJY2FwX2xvdyBeICgxIDw8IGJhZF9kYXRhX2JpdCksCisJCQlzeW5kcm9tZSBeICgxIDw8IGJhZF9lY2NfYml0KSk7CisJfQorCisJbXBjODV4eF9tY19wcmludGsobWNpLCBLRVJOX0VSUiwKKwkJCSJDYXB0dXJlZCBEYXRhIC8gRUNDOlx0JSM4Ljh4XyUwOHggLyAlIzIuMnhcbiIsCisJCQljYXBfaGlnaCwgY2FwX2xvdywgc3luZHJvbWUpOworCW1wYzg1eHhfbWNfcHJpbnRrKG1jaSwgS0VSTl9FUlIsICJFcnIgYWRkcjogJSM4Ljh4XG4iLCBlcnJfYWRkcik7CiAJbXBjODV4eF9tY19wcmludGsobWNpLCBLRVJOX0VSUiwgIlBGTjogJSM4Ljh4XG4iLCBwZm4pOwogCiAJLyogd2UgYXJlIG91dCBvZiByYW5nZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5oIGIvZHJpdmVycy9lZGFjL21wYzg1eHhfZWRhYy5oCmluZGV4IDUyNDMyZWUuLmNiMjRkZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZWRhYy9tcGM4NXh4X2VkYWMuaAorKysgYi9kcml2ZXJzL2VkYWMvbXBjODV4eF9lZGFjLmgKQEAgLTQ4LDYgKzQ4LDkgQEAKICNkZWZpbmUgRFNDX01FTV9FTgkweDgwMDAwMDAwCiAjZGVmaW5lIERTQ19FQ0NfRU4JMHgyMDAwMDAwMAogI2RlZmluZSBEU0NfUkRfRU4JMHgxMDAwMDAwMAorI2RlZmluZSBEU0NfREJXX01BU0sJMHgwMDE4MDAwMAorI2RlZmluZSBEU0NfREJXXzMyCTB4MDAwODAwMDAKKyNkZWZpbmUgRFNDX0RCV182NAkweDAwMDAwMDAwCiAKICNkZWZpbmUgRFNDX1NEVFlQRV9NQVNLCQkweDA3MDAwMDAwCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZWlzYS9laXNhLWJ1cy5jIGIvZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMKaW5kZXggNjY5NThiMy4uODA2Yzc3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMKKysrIGIvZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMKQEAgLTM5LDEwICszOSwxMCBAQAogc3RhdGljIGludCBkaXNhYmxlX2RldltFSVNBX01BWF9GT1JDRURfREVWXTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgZGlzYWJsZV9kZXZfY291bnQ7CiAKLXN0YXRpYyBpbnQgaXNfZm9yY2VkX2RldiAoaW50ICpmb3JjZWRfdGFiLAotCQkJICBpbnQgZm9yY2VkX2NvdW50LAotCQkJICBzdHJ1Y3QgZWlzYV9yb290X2RldmljZSAqcm9vdCwKLQkJCSAgc3RydWN0IGVpc2FfZGV2aWNlICplZGV2KQorc3RhdGljIGludCBpc19mb3JjZWRfZGV2KGludCAqZm9yY2VkX3RhYiwKKwkJCSBpbnQgZm9yY2VkX2NvdW50LAorCQkJIHN0cnVjdCBlaXNhX3Jvb3RfZGV2aWNlICpyb290LAorCQkJIHN0cnVjdCBlaXNhX2RldmljZSAqZWRldikKIHsKIAlpbnQgaSwgeDsKIApAQCAtNTUsMjEgKzU1LDIxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBlaXNhX25hbWVfZGV2aWNlIChzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXYpCitzdGF0aWMgdm9pZCBfX2luaXQgZWlzYV9uYW1lX2RldmljZShzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXYpCiB7CiAjaWZkZWYgQ09ORklHX0VJU0FfTkFNRVMKIAlpbnQgaTsKIAlmb3IgKGkgPSAwOyBpIDwgRUlTQV9JTkZPUzsgaSsrKSB7Ci0JCWlmICghc3RyY21wIChlZGV2LT5pZC5zaWcsIGVpc2FfdGFibGVbaV0uaWQuc2lnKSkgewotCQkJc3RybGNweSAoZWRldi0+cHJldHR5X25hbWUsCi0JCQkJIGVpc2FfdGFibGVbaV0ubmFtZSwKLQkJCQkgc2l6ZW9mKGVkZXYtPnByZXR0eV9uYW1lKSk7CisJCWlmICghc3RyY21wKGVkZXYtPmlkLnNpZywgZWlzYV90YWJsZVtpXS5pZC5zaWcpKSB7CisJCQlzdHJsY3B5KGVkZXYtPnByZXR0eV9uYW1lLAorCQkJCWVpc2FfdGFibGVbaV0ubmFtZSwKKwkJCQlzaXplb2YoZWRldi0+cHJldHR5X25hbWUpKTsKIAkJCXJldHVybjsKIAkJfQogCX0KIAogCS8qIE5vIG5hbWUgd2FzIGZvdW5kICovCi0Jc3ByaW50ZiAoZWRldi0+cHJldHR5X25hbWUsICJFSVNBIGRldmljZSAlLjdzIiwgZWRldi0+aWQuc2lnKTsKKwlzcHJpbnRmKGVkZXYtPnByZXR0eV9uYW1lLCAiRUlTQSBkZXZpY2UgJS43cyIsIGVkZXYtPmlkLnNpZyk7CiAjZW5kaWYKIH0KIApAQCAtOTEsNyArOTEsNyBAQAogCQkgKi8KIAkJb3V0YigweDgwICsgaSwgYWRkcik7CiAjZW5kaWYKLQkJc2lnW2ldID0gaW5iIChhZGRyICsgaSk7CisJCXNpZ1tpXSA9IGluYihhZGRyICsgaSk7CiAKIAkJaWYgKCFpICYmIChzaWdbMF0gJiAweDgwKSkKIAkJCXJldHVybiBOVUxMOwpAQCAtMTA2LDE3ICsxMDYsMTcgQEAKICAgICAgICAgcmV0dXJuIHNpZ19zdHI7CiB9CiAKLXN0YXRpYyBpbnQgZWlzYV9idXNfbWF0Y2ggKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRydikKK3N0YXRpYyBpbnQgZWlzYV9idXNfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogewotCXN0cnVjdCBlaXNhX2RldmljZSAqZWRldiA9IHRvX2Vpc2FfZGV2aWNlIChkZXYpOwotCXN0cnVjdCBlaXNhX2RyaXZlciAqZWRydiA9IHRvX2Vpc2FfZHJpdmVyIChkcnYpOworCXN0cnVjdCBlaXNhX2RldmljZSAqZWRldiA9IHRvX2Vpc2FfZGV2aWNlKGRldik7CisJc3RydWN0IGVpc2FfZHJpdmVyICplZHJ2ID0gdG9fZWlzYV9kcml2ZXIoZHJ2KTsKIAljb25zdCBzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQgKmVpZHMgPSBlZHJ2LT5pZF90YWJsZTsKIAogCWlmICghZWlkcykKIAkJcmV0dXJuIDA7CiAKLQl3aGlsZSAoc3RybGVuIChlaWRzLT5zaWcpKSB7Ci0JCWlmICghc3RyY21wIChlaWRzLT5zaWcsIGVkZXYtPmlkLnNpZykgJiYKKwl3aGlsZSAoc3RybGVuKGVpZHMtPnNpZykpIHsKKwkJaWYgKCFzdHJjbXAoZWlkcy0+c2lnLCBlZGV2LT5pZC5zaWcpICYmCiAJCSAgICBlZGV2LT5zdGF0ZSAmIEVJU0FfQ09ORklHX0VOQUJMRUQpIHsKIAkJCWVkZXYtPmlkLmRyaXZlcl9kYXRhID0gZWlkcy0+ZHJpdmVyX2RhdGE7CiAJCQlyZXR1cm4gMTsKQEAgLTE0MSw2MSArMTQxLDcxIEBACiAJLm1hdGNoID0gZWlzYV9idXNfbWF0Y2gsCiAJLnVldmVudCA9IGVpc2FfYnVzX3VldmVudCwKIH07CitFWFBPUlRfU1lNQk9MKGVpc2FfYnVzX3R5cGUpOwogCi1pbnQgZWlzYV9kcml2ZXJfcmVnaXN0ZXIgKHN0cnVjdCBlaXNhX2RyaXZlciAqZWRydikKK2ludCBlaXNhX2RyaXZlcl9yZWdpc3RlcihzdHJ1Y3QgZWlzYV9kcml2ZXIgKmVkcnYpCiB7CiAJZWRydi0+ZHJpdmVyLmJ1cyA9ICZlaXNhX2J1c190eXBlOwotCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIgKCZlZHJ2LT5kcml2ZXIpOworCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmVkcnYtPmRyaXZlcik7CiB9CitFWFBPUlRfU1lNQk9MKGVpc2FfZHJpdmVyX3JlZ2lzdGVyKTsKIAotdm9pZCBlaXNhX2RyaXZlcl91bnJlZ2lzdGVyIChzdHJ1Y3QgZWlzYV9kcml2ZXIgKmVkcnYpCit2b2lkIGVpc2FfZHJpdmVyX3VucmVnaXN0ZXIoc3RydWN0IGVpc2FfZHJpdmVyICplZHJ2KQogewotCWRyaXZlcl91bnJlZ2lzdGVyICgmZWRydi0+ZHJpdmVyKTsKKwlkcml2ZXJfdW5yZWdpc3RlcigmZWRydi0+ZHJpdmVyKTsKIH0KK0VYUE9SVF9TWU1CT0woZWlzYV9kcml2ZXJfdW5yZWdpc3Rlcik7CiAKLXN0YXRpYyBzc2l6ZV90IGVpc2Ffc2hvd19zaWcgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGVpc2Ffc2hvd19zaWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY2hhciAqYnVmKQogewotICAgICAgICBzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXYgPSB0b19laXNhX2RldmljZSAoZGV2KTsKLSAgICAgICAgcmV0dXJuIHNwcmludGYgKGJ1ZiwiJXNcbiIsIGVkZXYtPmlkLnNpZyk7CisJc3RydWN0IGVpc2FfZGV2aWNlICplZGV2ID0gdG9fZWlzYV9kZXZpY2UoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZWRldi0+aWQuc2lnKTsKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKHNpZ25hdHVyZSwgU19JUlVHTywgZWlzYV9zaG93X3NpZywgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IGVpc2Ffc2hvd19zdGF0ZSAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgZWlzYV9zaG93X3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgICBjaGFyICpidWYpCiB7Ci0gICAgICAgIHN0cnVjdCBlaXNhX2RldmljZSAqZWRldiA9IHRvX2Vpc2FfZGV2aWNlIChkZXYpOwotICAgICAgICByZXR1cm4gc3ByaW50ZiAoYnVmLCIlZFxuIiwgZWRldi0+c3RhdGUgJiBFSVNBX0NPTkZJR19FTkFCTEVEKTsKKwlzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXYgPSB0b19laXNhX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBlZGV2LT5zdGF0ZSAmIEVJU0FfQ09ORklHX0VOQUJMRUQpOwogfQogCiBzdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlZCwgU19JUlVHTywgZWlzYV9zaG93X3N0YXRlLCBOVUxMKTsKIAotc3RhdGljIHNzaXplX3QgZWlzYV9zaG93X21vZGFsaWFzIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBlaXNhX3Nob3dfbW9kYWxpYXMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICBjaGFyICpidWYpCiB7Ci0gICAgICAgIHN0cnVjdCBlaXNhX2RldmljZSAqZWRldiA9IHRvX2Vpc2FfZGV2aWNlIChkZXYpOwotICAgICAgICByZXR1cm4gc3ByaW50ZiAoYnVmLCBFSVNBX0RFVklDRV9NT0RBTElBU19GTVQgIlxuIiwgZWRldi0+aWQuc2lnKTsKKwlzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXYgPSB0b19laXNhX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgRUlTQV9ERVZJQ0VfTU9EQUxJQVNfRk1UICJcbiIsIGVkZXYtPmlkLnNpZyk7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihtb2RhbGlhcywgU19JUlVHTywgZWlzYV9zaG93X21vZGFsaWFzLCBOVUxMKTsKIAotc3RhdGljIGludCBfX2luaXQgZWlzYV9pbml0X2RldmljZSAoc3RydWN0IGVpc2Ffcm9vdF9kZXZpY2UgKnJvb3QsCi0JCQkJICAgIHN0cnVjdCBlaXNhX2RldmljZSAqZWRldiwKLQkJCQkgICAgaW50IHNsb3QpCitzdGF0aWMgaW50IF9faW5pdCBlaXNhX2luaXRfZGV2aWNlKHN0cnVjdCBlaXNhX3Jvb3RfZGV2aWNlICpyb290LAorCQkJCSAgIHN0cnVjdCBlaXNhX2RldmljZSAqZWRldiwKKwkJCQkgICBpbnQgc2xvdCkKIHsKIAljaGFyICpzaWc7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgc2lnX2FkZHI7CisJdW5zaWduZWQgbG9uZyBzaWdfYWRkcjsKIAlpbnQgaTsKIAotCXNpZ19hZGRyID0gU0xPVF9BRERSRVNTIChyb290LCBzbG90KSArIEVJU0FfVkVORE9SX0lEX09GRlNFVDsKKwlzaWdfYWRkciA9IFNMT1RfQUREUkVTUyhyb290LCBzbG90KSArIEVJU0FfVkVORE9SX0lEX09GRlNFVDsKIAotCWlmICghKHNpZyA9IGRlY29kZV9laXNhX3NpZyAoc2lnX2FkZHIpKSkKKwlzaWcgPSBkZWNvZGVfZWlzYV9zaWcoc2lnX2FkZHIpOworCWlmICghc2lnKQogCQlyZXR1cm4gLTE7CS8qIE5vIEVJU0EgZGV2aWNlIGhlcmUgKi8KIAkKLQltZW1jcHkgKGVkZXYtPmlkLnNpZywgc2lnLCBFSVNBX1NJR19MRU4pOworCW1lbWNweShlZGV2LT5pZC5zaWcsIHNpZywgRUlTQV9TSUdfTEVOKTsKIAllZGV2LT5zbG90ID0gc2xvdDsKLQllZGV2LT5zdGF0ZSA9IGluYiAoU0xPVF9BRERSRVNTIChyb290LCBzbG90KSArIEVJU0FfQ09ORklHX09GRlNFVCkgJiBFSVNBX0NPTkZJR19FTkFCTEVEOwotCWVkZXYtPmJhc2VfYWRkciA9IFNMT1RfQUREUkVTUyAocm9vdCwgc2xvdCk7CisJZWRldi0+c3RhdGUgPSBpbmIoU0xPVF9BRERSRVNTKHJvb3QsIHNsb3QpICsgRUlTQV9DT05GSUdfT0ZGU0VUKQorCQkgICAgICAmIEVJU0FfQ09ORklHX0VOQUJMRUQ7CisJZWRldi0+YmFzZV9hZGRyID0gU0xPVF9BRERSRVNTKHJvb3QsIHNsb3QpOwogCWVkZXYtPmRtYV9tYXNrID0gcm9vdC0+ZG1hX21hc2s7IC8qIERlZmF1bHQgRE1BIG1hc2sgKi8KLQllaXNhX25hbWVfZGV2aWNlIChlZGV2KTsKKwllaXNhX25hbWVfZGV2aWNlKGVkZXYpOwogCWVkZXYtPmRldi5wYXJlbnQgPSByb290LT5kZXY7CiAJZWRldi0+ZGV2LmJ1cyA9ICZlaXNhX2J1c190eXBlOwogCWVkZXYtPmRldi5kbWFfbWFzayA9ICZlZGV2LT5kbWFfbWFzazsKQEAgLTIxMCw0MiArMjIwLDQ1IEBACiAjZW5kaWYKIAl9CiAKLQlpZiAoaXNfZm9yY2VkX2RldiAoZW5hYmxlX2RldiwgZW5hYmxlX2Rldl9jb3VudCwgcm9vdCwgZWRldikpCisJaWYgKGlzX2ZvcmNlZF9kZXYoZW5hYmxlX2RldiwgZW5hYmxlX2Rldl9jb3VudCwgcm9vdCwgZWRldikpCiAJCWVkZXYtPnN0YXRlID0gRUlTQV9DT05GSUdfRU5BQkxFRCB8IEVJU0FfQ09ORklHX0ZPUkNFRDsKIAkKLQlpZiAoaXNfZm9yY2VkX2RldiAoZGlzYWJsZV9kZXYsIGRpc2FibGVfZGV2X2NvdW50LCByb290LCBlZGV2KSkKKwlpZiAoaXNfZm9yY2VkX2RldihkaXNhYmxlX2RldiwgZGlzYWJsZV9kZXZfY291bnQsIHJvb3QsIGVkZXYpKQogCQllZGV2LT5zdGF0ZSA9IEVJU0FfQ09ORklHX0ZPUkNFRDsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBlaXNhX3JlZ2lzdGVyX2RldmljZSAoc3RydWN0IGVpc2FfZGV2aWNlICplZGV2KQorc3RhdGljIGludCBfX2luaXQgZWlzYV9yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IGVpc2FfZGV2aWNlICplZGV2KQogewotCWludCByYyA9IGRldmljZV9yZWdpc3RlciAoJmVkZXYtPmRldik7CisJaW50IHJjID0gZGV2aWNlX3JlZ2lzdGVyKCZlZGV2LT5kZXYpOwogCWlmIChyYykKIAkJcmV0dXJuIHJjOwogCi0JcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUgKCZlZGV2LT5kZXYsICZkZXZfYXR0cl9zaWduYXR1cmUpOwotCWlmIChyYykgZ290byBlcnJfZGV2cmVnOwotCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlICgmZWRldi0+ZGV2LCAmZGV2X2F0dHJfZW5hYmxlZCk7Ci0JaWYgKHJjKSBnb3RvIGVycl9zaWc7Ci0JcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUgKCZlZGV2LT5kZXYsICZkZXZfYXR0cl9tb2RhbGlhcyk7Ci0JaWYgKHJjKSBnb3RvIGVycl9lbmFiOworCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZlZGV2LT5kZXYsICZkZXZfYXR0cl9zaWduYXR1cmUpOworCWlmIChyYykKKwkJZ290byBlcnJfZGV2cmVnOworCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZlZGV2LT5kZXYsICZkZXZfYXR0cl9lbmFibGVkKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX3NpZzsKKwlyYyA9IGRldmljZV9jcmVhdGVfZmlsZSgmZWRldi0+ZGV2LCAmZGV2X2F0dHJfbW9kYWxpYXMpOworCWlmIChyYykKKwkJZ290byBlcnJfZW5hYjsKIAogCXJldHVybiAwOwogCiBlcnJfZW5hYjoKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUgKCZlZGV2LT5kZXYsICZkZXZfYXR0cl9lbmFibGVkKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmVkZXYtPmRldiwgJmRldl9hdHRyX2VuYWJsZWQpOwogZXJyX3NpZzoKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUgKCZlZGV2LT5kZXYsICZkZXZfYXR0cl9zaWduYXR1cmUpOworCWRldmljZV9yZW1vdmVfZmlsZSgmZWRldi0+ZGV2LCAmZGV2X2F0dHJfc2lnbmF0dXJlKTsKIGVycl9kZXZyZWc6CiAJZGV2aWNlX3VucmVnaXN0ZXIoJmVkZXYtPmRldik7CiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBlaXNhX3JlcXVlc3RfcmVzb3VyY2VzIChzdHJ1Y3QgZWlzYV9yb290X2RldmljZSAqcm9vdCwKLQkJCQkJICBzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXYsCi0JCQkJCSAgaW50IHNsb3QpCitzdGF0aWMgaW50IF9faW5pdCBlaXNhX3JlcXVlc3RfcmVzb3VyY2VzKHN0cnVjdCBlaXNhX3Jvb3RfZGV2aWNlICpyb290LAorCQkJCQkgc3RydWN0IGVpc2FfZGV2aWNlICplZGV2LAorCQkJCQkgaW50IHNsb3QpCiB7CiAJaW50IGk7CiAKQEAgLTI2MywxNyArMjc2LDE5IEBACiAJCQogCQlpZiAoc2xvdCkgewogCQkJZWRldi0+cmVzW2ldLm5hbWUgID0gTlVMTDsKLQkJCWVkZXYtPnJlc1tpXS5zdGFydCA9IFNMT1RfQUREUkVTUyAocm9vdCwgc2xvdCkgKyAoaSAqIDB4NDAwKTsKKwkJCWVkZXYtPnJlc1tpXS5zdGFydCA9IFNMT1RfQUREUkVTUyhyb290LCBzbG90KQorCQkJCQkgICAgICsgKGkgKiAweDQwMCk7CiAJCQllZGV2LT5yZXNbaV0uZW5kICAgPSBlZGV2LT5yZXNbaV0uc3RhcnQgKyAweGZmOwogCQkJZWRldi0+cmVzW2ldLmZsYWdzID0gSU9SRVNPVVJDRV9JTzsKIAkJfSBlbHNlIHsKIAkJCWVkZXYtPnJlc1tpXS5uYW1lICA9IE5VTEw7Ci0JCQllZGV2LT5yZXNbaV0uc3RhcnQgPSBTTE9UX0FERFJFU1MgKHJvb3QsIHNsb3QpICsgRUlTQV9WRU5ET1JfSURfT0ZGU0VUOworCQkJZWRldi0+cmVzW2ldLnN0YXJ0ID0gU0xPVF9BRERSRVNTKHJvb3QsIHNsb3QpCisJCQkJCSAgICAgKyBFSVNBX1ZFTkRPUl9JRF9PRkZTRVQ7CiAJCQllZGV2LT5yZXNbaV0uZW5kICAgPSBlZGV2LT5yZXNbaV0uc3RhcnQgKyAzOwogCQkJZWRldi0+cmVzW2ldLmZsYWdzID0gSU9SRVNPVVJDRV9CVVNZOwogCQl9CiAKLQkJaWYgKHJlcXVlc3RfcmVzb3VyY2UgKHJvb3QtPnJlcywgJmVkZXYtPnJlc1tpXSkpCisJCWlmIChyZXF1ZXN0X3Jlc291cmNlKHJvb3QtPnJlcywgJmVkZXYtPnJlc1tpXSkpCiAJCQlnb3RvIGZhaWxlZDsKIAl9CiAKQEAgLTI4MSw5OSArMjk2LDEwMCBAQAogCQogIGZhaWxlZDoKIAl3aGlsZSAoLS1pID49IDApCi0JCXJlbGVhc2VfcmVzb3VyY2UgKCZlZGV2LT5yZXNbaV0pOworCQlyZWxlYXNlX3Jlc291cmNlKCZlZGV2LT5yZXNbaV0pOwogCiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZWlzYV9yZWxlYXNlX3Jlc291cmNlcyAoc3RydWN0IGVpc2FfZGV2aWNlICplZGV2KQorc3RhdGljIHZvaWQgX19pbml0IGVpc2FfcmVsZWFzZV9yZXNvdXJjZXMoc3RydWN0IGVpc2FfZGV2aWNlICplZGV2KQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IEVJU0FfTUFYX1JFU09VUkNFUzsgaSsrKQogCQlpZiAoZWRldi0+cmVzW2ldLnN0YXJ0IHx8IGVkZXYtPnJlc1tpXS5lbmQpCi0JCQlyZWxlYXNlX3Jlc291cmNlICgmZWRldi0+cmVzW2ldKTsKKwkJCXJlbGVhc2VfcmVzb3VyY2UoJmVkZXYtPnJlc1tpXSk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGVpc2FfcHJvYmUgKHN0cnVjdCBlaXNhX3Jvb3RfZGV2aWNlICpyb290KQorc3RhdGljIGludCBfX2luaXQgZWlzYV9wcm9iZShzdHJ1Y3QgZWlzYV9yb290X2RldmljZSAqcm9vdCkKIHsKICAgICAgICAgaW50IGksIGM7CiAJc3RydWN0IGVpc2FfZGV2aWNlICplZGV2OwogCi0gICAgICAgIHByaW50ayAoS0VSTl9JTkZPICJFSVNBOiBQcm9iaW5nIGJ1cyAlZCBhdCAlc1xuIiwKLQkJcm9vdC0+YnVzX25yLCBkZXZfbmFtZShyb290LT5kZXYpKTsKKwlwcmludGsoS0VSTl9JTkZPICJFSVNBOiBQcm9iaW5nIGJ1cyAlZCBhdCAlc1xuIiwKKwkgICAgICAgcm9vdC0+YnVzX25yLCBkZXZfbmFtZShyb290LT5kZXYpKTsKIAogCS8qIEZpcnN0IHRyeSB0byBnZXQgaG9sZCBvZiBzbG90IDAuIElmIHRoZXJlIGlzIG5vIGRldmljZQogCSAqIGhlcmUsIHNpbXBseSBmYWlsLCB1bmxlc3Mgcm9vdC0+Zm9yY2VfcHJvYmUgaXMgc2V0LiAqLwogCQotCWlmICghKGVkZXYgPSBremFsbG9jIChzaXplb2YgKCplZGV2KSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgIkVJU0E6IENvdWxkbid0IGFsbG9jYXRlIG1haW5ib2FyZCBzbG90XG4iKTsKKwllZGV2ID0ga3phbGxvYyhzaXplb2YoKmVkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVkZXYpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFSVNBOiBDb3VsZG4ndCBhbGxvY2F0ZSBtYWluYm9hcmQgc2xvdFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAkJCi0JaWYgKGVpc2FfcmVxdWVzdF9yZXNvdXJjZXMgKHJvb3QsIGVkZXYsIDApKSB7Ci0JCXByaW50ayAoS0VSTl9XQVJOSU5HIFwKLQkJCSJFSVNBOiBDYW5ub3QgYWxsb2NhdGUgcmVzb3VyY2UgZm9yIG1haW5ib2FyZFxuIik7Ci0JCWtmcmVlIChlZGV2KTsKKwlpZiAoZWlzYV9yZXF1ZXN0X3Jlc291cmNlcyhyb290LCBlZGV2LCAwKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIFwKKwkJICAgICAgICJFSVNBOiBDYW5ub3QgYWxsb2NhdGUgcmVzb3VyY2UgZm9yIG1haW5ib2FyZFxuIik7CisJCWtmcmVlKGVkZXYpOwogCQlpZiAoIXJvb3QtPmZvcmNlX3Byb2JlKQogCQkJcmV0dXJuIC1FQlVTWTsKIAkJZ290byBmb3JjZV9wcm9iZTsKIAl9CiAKLQlpZiAoZWlzYV9pbml0X2RldmljZSAocm9vdCwgZWRldiwgMCkpIHsKLQkJZWlzYV9yZWxlYXNlX3Jlc291cmNlcyAoZWRldik7Ci0JCWtmcmVlIChlZGV2KTsKKwlpZiAoZWlzYV9pbml0X2RldmljZShyb290LCBlZGV2LCAwKSkgeworCQllaXNhX3JlbGVhc2VfcmVzb3VyY2VzKGVkZXYpOworCQlrZnJlZShlZGV2KTsKIAkJaWYgKCFyb290LT5mb3JjZV9wcm9iZSkKIAkJCXJldHVybiAtRU5PREVWOwogCQlnb3RvIGZvcmNlX3Byb2JlOwogCX0KIAotCXByaW50ayAoS0VSTl9JTkZPICJFSVNBOiBNYWluYm9hcmQgJXMgZGV0ZWN0ZWQuXG4iLCBlZGV2LT5pZC5zaWcpOworCXByaW50ayhLRVJOX0lORk8gIkVJU0E6IE1haW5ib2FyZCAlcyBkZXRlY3RlZC5cbiIsIGVkZXYtPmlkLnNpZyk7CiAKLQlpZiAoZWlzYV9yZWdpc3Rlcl9kZXZpY2UgKGVkZXYpKSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgIkVJU0E6IEZhaWxlZCB0byByZWdpc3RlciAlc1xuIiwKLQkJCWVkZXYtPmlkLnNpZyk7Ci0JCWVpc2FfcmVsZWFzZV9yZXNvdXJjZXMgKGVkZXYpOwotCQlrZnJlZSAoZWRldik7CisJaWYgKGVpc2FfcmVnaXN0ZXJfZGV2aWNlKGVkZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRUlTQTogRmFpbGVkIHRvIHJlZ2lzdGVyICVzXG4iLAorCQkgICAgICAgZWRldi0+aWQuc2lnKTsKKwkJZWlzYV9yZWxlYXNlX3Jlc291cmNlcyhlZGV2KTsKKwkJa2ZyZWUoZWRldik7CiAJfQogCQogIGZvcmNlX3Byb2JlOgogCQogICAgICAgICBmb3IgKGMgPSAwLCBpID0gMTsgaSA8PSByb290LT5zbG90czsgaSsrKSB7Ci0JCWlmICghKGVkZXYgPSBremFsbG9jIChzaXplb2YgKCplZGV2KSwgR0ZQX0tFUk5FTCkpKSB7Ci0JCQlwcmludGsgKEtFUk5fRVJSICJFSVNBOiBPdXQgb2YgbWVtb3J5IGZvciBzbG90ICVkXG4iLAotCQkJCWkpOworCQllZGV2ID0ga3phbGxvYyhzaXplb2YoKmVkZXYpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFlZGV2KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkVJU0E6IE91dCBvZiBtZW1vcnkgZm9yIHNsb3QgJWRcbiIsIGkpOwogCQkJY29udGludWU7CiAJCX0KIAotCQlpZiAoZWlzYV9yZXF1ZXN0X3Jlc291cmNlcyAocm9vdCwgZWRldiwgaSkpIHsKLQkJCXByaW50ayAoS0VSTl9XQVJOSU5HIFwKLQkJCQkiQ2Fubm90IGFsbG9jYXRlIHJlc291cmNlIGZvciBFSVNBIHNsb3QgJWRcbiIsCi0JCQkJaSk7Ci0JCQlrZnJlZSAoZWRldik7CisJCWlmIChlaXNhX3JlcXVlc3RfcmVzb3VyY2VzKHJvb3QsIGVkZXYsIGkpKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HIFwKKwkJCSAgICAgICAiQ2Fubm90IGFsbG9jYXRlIHJlc291cmNlIGZvciBFSVNBIHNsb3QgJWRcbiIsCisJCQkgICAgICAgaSk7CisJCQlrZnJlZShlZGV2KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLSAgICAgICAgICAgICAgICBpZiAoZWlzYV9pbml0X2RldmljZSAocm9vdCwgZWRldiwgaSkpIHsKLQkJCWVpc2FfcmVsZWFzZV9yZXNvdXJjZXMgKGVkZXYpOwotCQkJa2ZyZWUgKGVkZXYpOworCQlpZiAoZWlzYV9pbml0X2RldmljZShyb290LCBlZGV2LCBpKSkgeworCQkJZWlzYV9yZWxlYXNlX3Jlc291cmNlcyhlZGV2KTsKKwkJCWtmcmVlKGVkZXYpOwogCQkJY29udGludWU7CiAJCX0KIAkJCi0JCXByaW50ayAoS0VSTl9JTkZPICJFSVNBOiBzbG90ICVkIDogJXMgZGV0ZWN0ZWQiLAotCQkJaSwgZWRldi0+aWQuc2lnKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRUlTQTogc2xvdCAlZCA6ICVzIGRldGVjdGVkIiwKKwkJICAgICAgIGksIGVkZXYtPmlkLnNpZyk7CiAJCQkKIAkJc3dpdGNoIChlZGV2LT5zdGF0ZSkgewogCQljYXNlIEVJU0FfQ09ORklHX0VOQUJMRUQgfCBFSVNBX0NPTkZJR19GT1JDRUQ6Ci0JCQlwcmludGsgKCIgKGZvcmNlZCBlbmFibGVkKSIpOworCQkJcHJpbnRrKCIgKGZvcmNlZCBlbmFibGVkKSIpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBFSVNBX0NPTkZJR19GT1JDRUQ6Ci0JCQlwcmludGsgKCIgKGZvcmNlZCBkaXNhYmxlZCkiKTsKKwkJCXByaW50aygiIChmb3JjZWQgZGlzYWJsZWQpIik7CiAJCQlicmVhazsKIAogCQljYXNlIDA6Ci0JCQlwcmludGsgKCIgKGRpc2FibGVkKSIpOworCQkJcHJpbnRrKCIgKGRpc2FibGVkKSIpOwogCQkJYnJlYWs7CiAJCX0KIAkJCQpAQCAtMzgxLDE1ICszOTcsMTUgQEAKIAogCQljKys7CiAKLQkJaWYgKGVpc2FfcmVnaXN0ZXJfZGV2aWNlIChlZGV2KSkgewotCQkJcHJpbnRrIChLRVJOX0VSUiAiRUlTQTogRmFpbGVkIHRvIHJlZ2lzdGVyICVzXG4iLAotCQkJCWVkZXYtPmlkLnNpZyk7Ci0JCQllaXNhX3JlbGVhc2VfcmVzb3VyY2VzIChlZGV2KTsKLQkJCWtmcmVlIChlZGV2KTsKKwkJaWYgKGVpc2FfcmVnaXN0ZXJfZGV2aWNlKGVkZXYpKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkVJU0E6IEZhaWxlZCB0byByZWdpc3RlciAlc1xuIiwKKwkJCSAgICAgICBlZGV2LT5pZC5zaWcpOworCQkJZWlzYV9yZWxlYXNlX3Jlc291cmNlcyhlZGV2KTsKKwkJCWtmcmVlKGVkZXYpOwogCQl9CiAgICAgICAgIH0KIAotICAgICAgICBwcmludGsgKEtFUk5fSU5GTyAiRUlTQTogRGV0ZWN0ZWQgJWQgY2FyZCVzLlxuIiwgYywgYyA9PSAxID8gIiIgOiAicyIpOworCXByaW50ayhLRVJOX0lORk8gIkVJU0E6IERldGVjdGVkICVkIGNhcmQlcy5cbiIsIGMsIGMgPT0gMSA/ICIiIDogInMiKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDAzLDcgKzQxOSw3IEBACiAKIHN0YXRpYyBpbnQgZWlzYV9idXNfY291bnQ7CiAKLWludCBfX2luaXQgZWlzYV9yb290X3JlZ2lzdGVyIChzdHJ1Y3QgZWlzYV9yb290X2RldmljZSAqcm9vdCkKK2ludCBfX2luaXQgZWlzYV9yb290X3JlZ2lzdGVyKHN0cnVjdCBlaXNhX3Jvb3RfZGV2aWNlICpyb290KQogewogCWludCBlcnI7CiAKQEAgLTQxNywzNSArNDMzLDM1IEBACiAJcm9vdC0+ZWlzYV9yb290X3Jlcy5lbmQgICA9IHJvb3QtPnJlcy0+ZW5kOwogCXJvb3QtPmVpc2Ffcm9vdF9yZXMuZmxhZ3MgPSBJT1JFU09VUkNFX0JVU1k7CiAKLQlpZiAoKGVyciA9IHJlcXVlc3RfcmVzb3VyY2UgKCZlaXNhX3Jvb3RfcmVzLCAmcm9vdC0+ZWlzYV9yb290X3JlcykpKQorCWVyciA9IHJlcXVlc3RfcmVzb3VyY2UoJmVpc2Ffcm9vdF9yZXMsICZyb290LT5laXNhX3Jvb3RfcmVzKTsKKwlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCQogCXJvb3QtPmJ1c19uciA9IGVpc2FfYnVzX2NvdW50Kys7CiAKLQlpZiAoKGVyciA9IGVpc2FfcHJvYmUgKHJvb3QpKSkKLQkJcmVsZWFzZV9yZXNvdXJjZSAoJnJvb3QtPmVpc2Ffcm9vdF9yZXMpOworCWVyciA9IGVpc2FfcHJvYmUocm9vdCk7CisJaWYgKGVycikKKwkJcmVsZWFzZV9yZXNvdXJjZSgmcm9vdC0+ZWlzYV9yb290X3Jlcyk7CiAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBlaXNhX2luaXQgKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBlaXNhX2luaXQodm9pZCkKIHsKIAlpbnQgcjsKIAkKLQlpZiAoKHIgPSBidXNfcmVnaXN0ZXIgKCZlaXNhX2J1c190eXBlKSkpCisJciA9IGJ1c19yZWdpc3RlcigmZWlzYV9idXNfdHlwZSk7CisJaWYgKHIpCiAJCXJldHVybiByOwogCi0JcHJpbnRrIChLRVJOX0lORk8gIkVJU0EgYnVzIHJlZ2lzdGVyZWRcbiIpOworCXByaW50ayhLRVJOX0lORk8gIkVJU0EgYnVzIHJlZ2lzdGVyZWRcbiIpOwogCXJldHVybiAwOwogfQogCiBtb2R1bGVfcGFyYW1fYXJyYXkoZW5hYmxlX2RldiwgaW50LCAmZW5hYmxlX2Rldl9jb3VudCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkoZGlzYWJsZV9kZXYsIGludCwgJmRpc2FibGVfZGV2X2NvdW50LCAwNDQ0KTsKIAotcG9zdGNvcmVfaW5pdGNhbGwgKGVpc2FfaW5pdCk7Citwb3N0Y29yZV9pbml0Y2FsbChlaXNhX2luaXQpOwogCiBpbnQgRUlTQV9idXM7CQkvKiBmb3IgbGVnYWN5IGRyaXZlcnMgKi8KLUVYUE9SVF9TWU1CT0wgKEVJU0FfYnVzKTsKLUVYUE9SVF9TWU1CT0wgKGVpc2FfYnVzX3R5cGUpOwotRVhQT1JUX1NZTUJPTCAoZWlzYV9kcml2ZXJfcmVnaXN0ZXIpOwotRVhQT1JUX1NZTUJPTCAoZWlzYV9kcml2ZXJfdW5yZWdpc3Rlcik7CitFWFBPUlRfU1lNQk9MKEVJU0FfYnVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtY2Rldi5jCmluZGV4IDRlZWFlZDUuLjhiZTcyMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1jZGV2LmMKKysrIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWNkZXYuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpcmV3aXJlLmg+CiAjaW5jbHVkZSA8bGludXgvZmlyZXdpcmUtY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KQEAgLTMyLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgpAQCAtMzY4LDM5ICszNjgsNTYgQEAKIAlmb3JfZWFjaF9jbGllbnQoZGV2aWNlLCB3YWtlX3VwX2NsaWVudCk7CiB9CiAKLXN0YXRpYyBpbnQgaW9jdGxfZ2V0X2luZm8oc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCit1bmlvbiBpb2N0bF9hcmcgeworCXN0cnVjdCBmd19jZGV2X2dldF9pbmZvCQkJZ2V0X2luZm87CisJc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXF1ZXN0CQlzZW5kX3JlcXVlc3Q7CisJc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGUJCQlhbGxvY2F0ZTsKKwlzdHJ1Y3QgZndfY2Rldl9kZWFsbG9jYXRlCQlkZWFsbG9jYXRlOworCXN0cnVjdCBmd19jZGV2X3NlbmRfcmVzcG9uc2UJCXNlbmRfcmVzcG9uc2U7CisJc3RydWN0IGZ3X2NkZXZfaW5pdGlhdGVfYnVzX3Jlc2V0CWluaXRpYXRlX2J1c19yZXNldDsKKwlzdHJ1Y3QgZndfY2Rldl9hZGRfZGVzY3JpcHRvcgkJYWRkX2Rlc2NyaXB0b3I7CisJc3RydWN0IGZ3X2NkZXZfcmVtb3ZlX2Rlc2NyaXB0b3IJcmVtb3ZlX2Rlc2NyaXB0b3I7CisJc3RydWN0IGZ3X2NkZXZfY3JlYXRlX2lzb19jb250ZXh0CWNyZWF0ZV9pc29fY29udGV4dDsKKwlzdHJ1Y3QgZndfY2Rldl9xdWV1ZV9pc28JCXF1ZXVlX2lzbzsKKwlzdHJ1Y3QgZndfY2Rldl9zdGFydF9pc28JCXN0YXJ0X2lzbzsKKwlzdHJ1Y3QgZndfY2Rldl9zdG9wX2lzbwkJCXN0b3BfaXNvOworCXN0cnVjdCBmd19jZGV2X2dldF9jeWNsZV90aW1lcgkJZ2V0X2N5Y2xlX3RpbWVyOworCXN0cnVjdCBmd19jZGV2X2FsbG9jYXRlX2lzb19yZXNvdXJjZQlhbGxvY2F0ZV9pc29fcmVzb3VyY2U7CisJc3RydWN0IGZ3X2NkZXZfc2VuZF9zdHJlYW1fcGFja2V0CXNlbmRfc3RyZWFtX3BhY2tldDsKKwlzdHJ1Y3QgZndfY2Rldl9nZXRfY3ljbGVfdGltZXIyCQlnZXRfY3ljbGVfdGltZXIyOworfTsKKworc3RhdGljIGludCBpb2N0bF9nZXRfaW5mbyhzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHVuaW9uIGlvY3RsX2FyZyAqYXJnKQogewotCXN0cnVjdCBmd19jZGV2X2dldF9pbmZvICpnZXRfaW5mbyA9IGJ1ZmZlcjsKKwlzdHJ1Y3QgZndfY2Rldl9nZXRfaW5mbyAqYSA9ICZhcmctPmdldF9pbmZvOwogCXN0cnVjdCBmd19jZGV2X2V2ZW50X2J1c19yZXNldCBidXNfcmVzZXQ7CiAJdW5zaWduZWQgbG9uZyByZXQgPSAwOwogCi0JY2xpZW50LT52ZXJzaW9uID0gZ2V0X2luZm8tPnZlcnNpb247Ci0JZ2V0X2luZm8tPnZlcnNpb24gPSBGV19DREVWX1ZFUlNJT047Ci0JZ2V0X2luZm8tPmNhcmQgPSBjbGllbnQtPmRldmljZS0+Y2FyZC0+aW5kZXg7CisJY2xpZW50LT52ZXJzaW9uID0gYS0+dmVyc2lvbjsKKwlhLT52ZXJzaW9uID0gRldfQ0RFVl9WRVJTSU9OOworCWEtPmNhcmQgPSBjbGllbnQtPmRldmljZS0+Y2FyZC0+aW5kZXg7CiAKIAlkb3duX3JlYWQoJmZ3X2RldmljZV9yd3NlbSk7CiAKLQlpZiAoZ2V0X2luZm8tPnJvbSAhPSAwKSB7Ci0JCXZvaWQgX191c2VyICp1cHRyID0gdTY0X3RvX3VwdHIoZ2V0X2luZm8tPnJvbSk7Ci0JCXNpemVfdCB3YW50ID0gZ2V0X2luZm8tPnJvbV9sZW5ndGg7CisJaWYgKGEtPnJvbSAhPSAwKSB7CisJCXNpemVfdCB3YW50ID0gYS0+cm9tX2xlbmd0aDsKIAkJc2l6ZV90IGhhdmUgPSBjbGllbnQtPmRldmljZS0+Y29uZmlnX3JvbV9sZW5ndGggKiA0OwogCi0JCXJldCA9IGNvcHlfdG9fdXNlcih1cHRyLCBjbGllbnQtPmRldmljZS0+Y29uZmlnX3JvbSwKLQkJCQkgICBtaW4od2FudCwgaGF2ZSkpOworCQlyZXQgPSBjb3B5X3RvX3VzZXIodTY0X3RvX3VwdHIoYS0+cm9tKSwKKwkJCQkgICBjbGllbnQtPmRldmljZS0+Y29uZmlnX3JvbSwgbWluKHdhbnQsIGhhdmUpKTsKIAl9Ci0JZ2V0X2luZm8tPnJvbV9sZW5ndGggPSBjbGllbnQtPmRldmljZS0+Y29uZmlnX3JvbV9sZW5ndGggKiA0OworCWEtPnJvbV9sZW5ndGggPSBjbGllbnQtPmRldmljZS0+Y29uZmlnX3JvbV9sZW5ndGggKiA0OwogCiAJdXBfcmVhZCgmZndfZGV2aWNlX3J3c2VtKTsKIAogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQljbGllbnQtPmJ1c19yZXNldF9jbG9zdXJlID0gZ2V0X2luZm8tPmJ1c19yZXNldF9jbG9zdXJlOwotCWlmIChnZXRfaW5mby0+YnVzX3Jlc2V0ICE9IDApIHsKLQkJdm9pZCBfX3VzZXIgKnVwdHIgPSB1NjRfdG9fdXB0cihnZXRfaW5mby0+YnVzX3Jlc2V0KTsKLQorCWNsaWVudC0+YnVzX3Jlc2V0X2Nsb3N1cmUgPSBhLT5idXNfcmVzZXRfY2xvc3VyZTsKKwlpZiAoYS0+YnVzX3Jlc2V0ICE9IDApIHsKIAkJZmlsbF9idXNfcmVzZXRfZXZlbnQoJmJ1c19yZXNldCwgY2xpZW50KTsKLQkJaWYgKGNvcHlfdG9fdXNlcih1cHRyLCAmYnVzX3Jlc2V0LCBzaXplb2YoYnVzX3Jlc2V0KSkpCisJCWlmIChjb3B5X3RvX3VzZXIodTY0X3RvX3VwdHIoYS0+YnVzX3Jlc2V0KSwKKwkJCQkgJmJ1c19yZXNldCwgc2l6ZW9mKGJ1c19yZXNldCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCkBAIC01NzEsMTEgKzU4OCw5IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpb2N0bF9zZW5kX3JlcXVlc3Qoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCitzdGF0aWMgaW50IGlvY3RsX3NlbmRfcmVxdWVzdChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHVuaW9uIGlvY3RsX2FyZyAqYXJnKQogewotCXN0cnVjdCBmd19jZGV2X3NlbmRfcmVxdWVzdCAqcmVxdWVzdCA9IGJ1ZmZlcjsKLQotCXN3aXRjaCAocmVxdWVzdC0+dGNvZGUpIHsKKwlzd2l0Y2ggKGFyZy0+c2VuZF9yZXF1ZXN0LnRjb2RlKSB7CiAJY2FzZSBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1Q6CiAJY2FzZSBUQ09ERV9XUklURV9CTE9DS19SRVFVRVNUOgogCWNhc2UgVENPREVfUkVBRF9RVUFETEVUX1JFUVVFU1Q6CkBAIC01OTIsNyArNjA3LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmV0dXJuIGluaXRfcmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGNsaWVudC0+ZGV2aWNlLT5ub2RlX2lkLAorCXJldHVybiBpbml0X3JlcXVlc3QoY2xpZW50LCAmYXJnLT5zZW5kX3JlcXVlc3QsIGNsaWVudC0+ZGV2aWNlLT5ub2RlX2lkLAogCQkJICAgIGNsaWVudC0+ZGV2aWNlLT5tYXhfc3BlZWQpOwogfQogCkBAIC02ODMsOSArNjk4LDkgQEAKIAlrZnJlZShyKTsKIH0KIAotc3RhdGljIGludCBpb2N0bF9hbGxvY2F0ZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3N0YXRpYyBpbnQgaW9jdGxfYWxsb2NhdGUoc3RydWN0IGNsaWVudCAqY2xpZW50LCB1bmlvbiBpb2N0bF9hcmcgKmFyZykKIHsKLQlzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZSAqcmVxdWVzdCA9IGJ1ZmZlcjsKKwlzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZSAqYSA9ICZhcmctPmFsbG9jYXRlOwogCXN0cnVjdCBhZGRyZXNzX2hhbmRsZXJfcmVzb3VyY2UgKnI7CiAJc3RydWN0IGZ3X2FkZHJlc3NfcmVnaW9uIHJlZ2lvbjsKIAlpbnQgcmV0OwpAQCAtNjk0LDEzICs3MDksMTMgQEAKIAlpZiAociA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXJlZ2lvbi5zdGFydCA9IHJlcXVlc3QtPm9mZnNldDsKLQlyZWdpb24uZW5kID0gcmVxdWVzdC0+b2Zmc2V0ICsgcmVxdWVzdC0+bGVuZ3RoOwotCXItPmhhbmRsZXIubGVuZ3RoID0gcmVxdWVzdC0+bGVuZ3RoOworCXJlZ2lvbi5zdGFydCA9IGEtPm9mZnNldDsKKwlyZWdpb24uZW5kICAgPSBhLT5vZmZzZXQgKyBhLT5sZW5ndGg7CisJci0+aGFuZGxlci5sZW5ndGggICAgICAgICAgID0gYS0+bGVuZ3RoOwogCXItPmhhbmRsZXIuYWRkcmVzc19jYWxsYmFjayA9IGhhbmRsZV9yZXF1ZXN0OwotCXItPmhhbmRsZXIuY2FsbGJhY2tfZGF0YSA9IHI7Ci0Jci0+Y2xvc3VyZSA9IHJlcXVlc3QtPmNsb3N1cmU7Ci0Jci0+Y2xpZW50ID0gY2xpZW50OworCXItPmhhbmRsZXIuY2FsbGJhY2tfZGF0YSAgICA9IHI7CisJci0+Y2xvc3VyZSAgID0gYS0+Y2xvc3VyZTsKKwlyLT5jbGllbnQgICAgPSBjbGllbnQ7CiAKIAlyZXQgPSBmd19jb3JlX2FkZF9hZGRyZXNzX2hhbmRsZXIoJnItPmhhbmRsZXIsICZyZWdpb24pOwogCWlmIChyZXQgPCAwKSB7CkBAIC03MTQsMjcgKzcyOSwyNSBAQAogCQlyZWxlYXNlX2FkZHJlc3NfaGFuZGxlcihjbGllbnQsICZyLT5yZXNvdXJjZSk7CiAJCXJldHVybiByZXQ7CiAJfQotCXJlcXVlc3QtPmhhbmRsZSA9IHItPnJlc291cmNlLmhhbmRsZTsKKwlhLT5oYW5kbGUgPSByLT5yZXNvdXJjZS5oYW5kbGU7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpb2N0bF9kZWFsbG9jYXRlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQorc3RhdGljIGludCBpb2N0bF9kZWFsbG9jYXRlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5pb24gaW9jdGxfYXJnICphcmcpCiB7Ci0Jc3RydWN0IGZ3X2NkZXZfZGVhbGxvY2F0ZSAqcmVxdWVzdCA9IGJ1ZmZlcjsKLQotCXJldHVybiByZWxlYXNlX2NsaWVudF9yZXNvdXJjZShjbGllbnQsIHJlcXVlc3QtPmhhbmRsZSwKKwlyZXR1cm4gcmVsZWFzZV9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCBhcmctPmRlYWxsb2NhdGUuaGFuZGxlLAogCQkJCSAgICAgICByZWxlYXNlX2FkZHJlc3NfaGFuZGxlciwgTlVMTCk7CiB9CiAKLXN0YXRpYyBpbnQgaW9jdGxfc2VuZF9yZXNwb25zZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3N0YXRpYyBpbnQgaW9jdGxfc2VuZF9yZXNwb25zZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHVuaW9uIGlvY3RsX2FyZyAqYXJnKQogewotCXN0cnVjdCBmd19jZGV2X3NlbmRfcmVzcG9uc2UgKnJlcXVlc3QgPSBidWZmZXI7CisJc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXNwb25zZSAqYSA9ICZhcmctPnNlbmRfcmVzcG9uc2U7CiAJc3RydWN0IGNsaWVudF9yZXNvdXJjZSAqcmVzb3VyY2U7CiAJc3RydWN0IGluYm91bmRfdHJhbnNhY3Rpb25fcmVzb3VyY2UgKnI7CiAJaW50IHJldCA9IDA7CiAKLQlpZiAocmVsZWFzZV9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCByZXF1ZXN0LT5oYW5kbGUsCisJaWYgKHJlbGVhc2VfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgYS0+aGFuZGxlLAogCQkJCSAgICByZWxlYXNlX3JlcXVlc3QsICZyZXNvdXJjZSkgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNzQzLDI4ICs3NTYsMjQgQEAKIAlpZiAoaXNfZmNwX3JlcXVlc3Qoci0+cmVxdWVzdCkpCiAJCWdvdG8gb3V0OwogCi0JaWYgKHJlcXVlc3QtPmxlbmd0aCA8IHItPmxlbmd0aCkKLQkJci0+bGVuZ3RoID0gcmVxdWVzdC0+bGVuZ3RoOwotCWlmIChjb3B5X2Zyb21fdXNlcihyLT5kYXRhLCB1NjRfdG9fdXB0cihyZXF1ZXN0LT5kYXRhKSwgci0+bGVuZ3RoKSkgeworCWlmIChhLT5sZW5ndGggPCByLT5sZW5ndGgpCisJCXItPmxlbmd0aCA9IGEtPmxlbmd0aDsKKwlpZiAoY29weV9mcm9tX3VzZXIoci0+ZGF0YSwgdTY0X3RvX3VwdHIoYS0+ZGF0YSksIHItPmxlbmd0aCkpIHsKIAkJcmV0ID0gLUVGQVVMVDsKIAkJa2ZyZWUoci0+cmVxdWVzdCk7CiAJCWdvdG8gb3V0OwogCX0KLQlmd19zZW5kX3Jlc3BvbnNlKGNsaWVudC0+ZGV2aWNlLT5jYXJkLCByLT5yZXF1ZXN0LCByZXF1ZXN0LT5yY29kZSk7CisJZndfc2VuZF9yZXNwb25zZShjbGllbnQtPmRldmljZS0+Y2FyZCwgci0+cmVxdWVzdCwgYS0+cmNvZGUpOwogIG91dDoKIAlrZnJlZShyKTsKIAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaW9jdGxfaW5pdGlhdGVfYnVzX3Jlc2V0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQorc3RhdGljIGludCBpb2N0bF9pbml0aWF0ZV9idXNfcmVzZXQoc3RydWN0IGNsaWVudCAqY2xpZW50LCB1bmlvbiBpb2N0bF9hcmcgKmFyZykKIHsKLQlzdHJ1Y3QgZndfY2Rldl9pbml0aWF0ZV9idXNfcmVzZXQgKnJlcXVlc3QgPSBidWZmZXI7Ci0JaW50IHNob3J0X3Jlc2V0OwotCi0Jc2hvcnRfcmVzZXQgPSAocmVxdWVzdC0+dHlwZSA9PSBGV19DREVWX1NIT1JUX1JFU0VUKTsKLQotCXJldHVybiBmd19jb3JlX2luaXRpYXRlX2J1c19yZXNldChjbGllbnQtPmRldmljZS0+Y2FyZCwgc2hvcnRfcmVzZXQpOworCXJldHVybiBmd19jb3JlX2luaXRpYXRlX2J1c19yZXNldChjbGllbnQtPmRldmljZS0+Y2FyZCwKKwkJCWFyZy0+aW5pdGlhdGVfYnVzX3Jlc2V0LnR5cGUgPT0gRldfQ0RFVl9TSE9SVF9SRVNFVCk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbGVhc2VfZGVzY3JpcHRvcihzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCkBAIC03NzcsOSArNzg2LDkgQEAKIAlrZnJlZShyKTsKIH0KIAotc3RhdGljIGludCBpb2N0bF9hZGRfZGVzY3JpcHRvcihzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3N0YXRpYyBpbnQgaW9jdGxfYWRkX2Rlc2NyaXB0b3Ioc3RydWN0IGNsaWVudCAqY2xpZW50LCB1bmlvbiBpb2N0bF9hcmcgKmFyZykKIHsKLQlzdHJ1Y3QgZndfY2Rldl9hZGRfZGVzY3JpcHRvciAqcmVxdWVzdCA9IGJ1ZmZlcjsKKwlzdHJ1Y3QgZndfY2Rldl9hZGRfZGVzY3JpcHRvciAqYSA9ICZhcmctPmFkZF9kZXNjcmlwdG9yOwogCXN0cnVjdCBkZXNjcmlwdG9yX3Jlc291cmNlICpyOwogCWludCByZXQ7CiAKQEAgLTc4NywyMiArNzk2LDIxIEBACiAJaWYgKCFjbGllbnQtPmRldmljZS0+aXNfbG9jYWwpCiAJCXJldHVybiAtRU5PU1lTOwogCi0JaWYgKHJlcXVlc3QtPmxlbmd0aCA+IDI1NikKKwlpZiAoYS0+bGVuZ3RoID4gMjU2KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXIgPSBrbWFsbG9jKHNpemVvZigqcikgKyByZXF1ZXN0LT5sZW5ndGggKiA0LCBHRlBfS0VSTkVMKTsKKwlyID0ga21hbGxvYyhzaXplb2YoKnIpICsgYS0+bGVuZ3RoICogNCwgR0ZQX0tFUk5FTCk7CiAJaWYgKHIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoci0+ZGF0YSwKLQkJCSAgIHU2NF90b191cHRyKHJlcXVlc3QtPmRhdGEpLCByZXF1ZXN0LT5sZW5ndGggKiA0KSkgeworCWlmIChjb3B5X2Zyb21fdXNlcihyLT5kYXRhLCB1NjRfdG9fdXB0cihhLT5kYXRhKSwgYS0+bGVuZ3RoICogNCkpIHsKIAkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBmYWlsZWQ7CiAJfQogCi0Jci0+ZGVzY3JpcHRvci5sZW5ndGggICAgPSByZXF1ZXN0LT5sZW5ndGg7Ci0Jci0+ZGVzY3JpcHRvci5pbW1lZGlhdGUgPSByZXF1ZXN0LT5pbW1lZGlhdGU7Ci0Jci0+ZGVzY3JpcHRvci5rZXkgICAgICAgPSByZXF1ZXN0LT5rZXk7CisJci0+ZGVzY3JpcHRvci5sZW5ndGggICAgPSBhLT5sZW5ndGg7CisJci0+ZGVzY3JpcHRvci5pbW1lZGlhdGUgPSBhLT5pbW1lZGlhdGU7CisJci0+ZGVzY3JpcHRvci5rZXkgICAgICAgPSBhLT5rZXk7CiAJci0+ZGVzY3JpcHRvci5kYXRhICAgICAgPSByLT5kYXRhOwogCiAJcmV0ID0gZndfY29yZV9hZGRfZGVzY3JpcHRvcigmci0+ZGVzY3JpcHRvcik7CkBAIC04MTUsNyArODIzLDcgQEAKIAkJZndfY29yZV9yZW1vdmVfZGVzY3JpcHRvcigmci0+ZGVzY3JpcHRvcik7CiAJCWdvdG8gZmFpbGVkOwogCX0KLQlyZXF1ZXN0LT5oYW5kbGUgPSByLT5yZXNvdXJjZS5oYW5kbGU7CisJYS0+aGFuZGxlID0gci0+cmVzb3VyY2UuaGFuZGxlOwogCiAJcmV0dXJuIDA7CiAgZmFpbGVkOgpAQCAtODI0LDExICs4MzIsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaW9jdGxfcmVtb3ZlX2Rlc2NyaXB0b3Ioc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCitzdGF0aWMgaW50IGlvY3RsX3JlbW92ZV9kZXNjcmlwdG9yKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5pb24gaW9jdGxfYXJnICphcmcpCiB7Ci0Jc3RydWN0IGZ3X2NkZXZfcmVtb3ZlX2Rlc2NyaXB0b3IgKnJlcXVlc3QgPSBidWZmZXI7Ci0KLQlyZXR1cm4gcmVsZWFzZV9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCByZXF1ZXN0LT5oYW5kbGUsCisJcmV0dXJuIHJlbGVhc2VfY2xpZW50X3Jlc291cmNlKGNsaWVudCwgYXJnLT5yZW1vdmVfZGVzY3JpcHRvci5oYW5kbGUsCiAJCQkJICAgICAgIHJlbGVhc2VfZGVzY3JpcHRvciwgTlVMTCk7CiB9CiAKQEAgLTg1MSw0OSArODU3LDQ0IEBACiAJCSAgICBzaXplb2YoZS0+aW50ZXJydXB0KSArIGhlYWRlcl9sZW5ndGgsIE5VTEwsIDApOwogfQogCi1zdGF0aWMgaW50IGlvY3RsX2NyZWF0ZV9pc29fY29udGV4dChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3N0YXRpYyBpbnQgaW9jdGxfY3JlYXRlX2lzb19jb250ZXh0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5pb24gaW9jdGxfYXJnICphcmcpCiB7Ci0Jc3RydWN0IGZ3X2NkZXZfY3JlYXRlX2lzb19jb250ZXh0ICpyZXF1ZXN0ID0gYnVmZmVyOworCXN0cnVjdCBmd19jZGV2X2NyZWF0ZV9pc29fY29udGV4dCAqYSA9ICZhcmctPmNyZWF0ZV9pc29fY29udGV4dDsKIAlzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmNvbnRleHQ7CiAKIAkvKiBXZSBvbmx5IHN1cHBvcnQgb25lIGNvbnRleHQgYXQgdGhpcyB0aW1lLiAqLwogCWlmIChjbGllbnQtPmlzb19jb250ZXh0ICE9IE5VTEwpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlpZiAocmVxdWVzdC0+Y2hhbm5lbCA+IDYzKQorCWlmIChhLT5jaGFubmVsID4gNjMpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3dpdGNoIChyZXF1ZXN0LT50eXBlKSB7CisJc3dpdGNoIChhLT50eXBlKSB7CiAJY2FzZSBGV19JU09fQ09OVEVYVF9SRUNFSVZFOgotCQlpZiAocmVxdWVzdC0+aGVhZGVyX3NpemUgPCA0IHx8IChyZXF1ZXN0LT5oZWFkZXJfc2l6ZSAmIDMpKQorCQlpZiAoYS0+aGVhZGVyX3NpemUgPCA0IHx8IChhLT5oZWFkZXJfc2l6ZSAmIDMpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJYnJlYWs7CiAKIAljYXNlIEZXX0lTT19DT05URVhUX1RSQU5TTUlUOgotCQlpZiAocmVxdWVzdC0+c3BlZWQgPiBTQ09ERV8zMjAwKQorCQlpZiAoYS0+c3BlZWQgPiBTQ09ERV8zMjAwKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQljb250ZXh0ID0gIGZ3X2lzb19jb250ZXh0X2NyZWF0ZShjbGllbnQtPmRldmljZS0+Y2FyZCwKLQkJCQkJIHJlcXVlc3QtPnR5cGUsCi0JCQkJCSByZXF1ZXN0LT5jaGFubmVsLAotCQkJCQkgcmVxdWVzdC0+c3BlZWQsCi0JCQkJCSByZXF1ZXN0LT5oZWFkZXJfc2l6ZSwKLQkJCQkJIGlzb19jYWxsYmFjaywgY2xpZW50KTsKKwljb250ZXh0ID0gZndfaXNvX2NvbnRleHRfY3JlYXRlKGNsaWVudC0+ZGV2aWNlLT5jYXJkLCBhLT50eXBlLAorCQkJCQlhLT5jaGFubmVsLCBhLT5zcGVlZCwgYS0+aGVhZGVyX3NpemUsCisJCQkJCWlzb19jYWxsYmFjaywgY2xpZW50KTsKIAlpZiAoSVNfRVJSKGNvbnRleHQpKQogCQlyZXR1cm4gUFRSX0VSUihjb250ZXh0KTsKIAotCWNsaWVudC0+aXNvX2Nsb3N1cmUgPSByZXF1ZXN0LT5jbG9zdXJlOworCWNsaWVudC0+aXNvX2Nsb3N1cmUgPSBhLT5jbG9zdXJlOwogCWNsaWVudC0+aXNvX2NvbnRleHQgPSBjb250ZXh0OwogCiAJLyogV2Ugb25seSBzdXBwb3J0IG9uZSBjb250ZXh0IGF0IHRoaXMgdGltZS4gKi8KLQlyZXF1ZXN0LT5oYW5kbGUgPSAwOworCWEtPmhhbmRsZSA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTkwNiw5ICs5MDcsOSBAQAogI2RlZmluZSBHRVRfU1kodikJCSgoKHYpID4+IDIwKSAmIDB4MGYpCiAjZGVmaW5lIEdFVF9IRUFERVJfTEVOR1RIKHYpCSgoKHYpID4+IDI0KSAmIDB4ZmYpCiAKLXN0YXRpYyBpbnQgaW9jdGxfcXVldWVfaXNvKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQorc3RhdGljIGludCBpb2N0bF9xdWV1ZV9pc28oc3RydWN0IGNsaWVudCAqY2xpZW50LCB1bmlvbiBpb2N0bF9hcmcgKmFyZykKIHsKLQlzdHJ1Y3QgZndfY2Rldl9xdWV1ZV9pc28gKnJlcXVlc3QgPSBidWZmZXI7CisJc3RydWN0IGZ3X2NkZXZfcXVldWVfaXNvICphID0gJmFyZy0+cXVldWVfaXNvOwogCXN0cnVjdCBmd19jZGV2X2lzb19wYWNrZXQgX191c2VyICpwLCAqZW5kLCAqbmV4dDsKIAlzdHJ1Y3QgZndfaXNvX2NvbnRleHQgKmN0eCA9IGNsaWVudC0+aXNvX2NvbnRleHQ7CiAJdW5zaWduZWQgbG9uZyBwYXlsb2FkLCBidWZmZXJfZW5kLCBoZWFkZXJfbGVuZ3RoOwpAQCAtOTE5LDcgKzkyMCw3IEBACiAJCXU4IGhlYWRlclsyNTZdOwogCX0gdTsKIAotCWlmIChjdHggPT0gTlVMTCB8fCByZXF1ZXN0LT5oYW5kbGUgIT0gMCkKKwlpZiAoY3R4ID09IE5VTEwgfHwgYS0+aGFuZGxlICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyoKQEAgLTkyOSwyMyArOTMwLDIzIEBACiAJICogc2V0IHRoZW0gYm90aCB0byAwLCB3aGljaCB3aWxsIHN0aWxsIGxldCBwYWNrZXRzIHdpdGgKIAkgKiBwYXlsb2FkX2xlbmd0aCA9PSAwIHRocm91Z2guICBJbiBvdGhlciB3b3JkcywgaWYgbm8gcGFja2V0cwogCSAqIHVzZSB0aGUgaW5kaXJlY3QgcGF5bG9hZCwgdGhlIGlzbyBidWZmZXIgbmVlZCBub3QgYmUgbWFwcGVkCi0JICogYW5kIHRoZSByZXF1ZXN0LT5kYXRhIHBvaW50ZXIgaXMgaWdub3JlZC4KKwkgKiBhbmQgdGhlIGEtPmRhdGEgcG9pbnRlciBpcyBpZ25vcmVkLgogCSAqLwogCi0JcGF5bG9hZCA9ICh1bnNpZ25lZCBsb25nKXJlcXVlc3QtPmRhdGEgLSBjbGllbnQtPnZtX3N0YXJ0OworCXBheWxvYWQgPSAodW5zaWduZWQgbG9uZylhLT5kYXRhIC0gY2xpZW50LT52bV9zdGFydDsKIAlidWZmZXJfZW5kID0gY2xpZW50LT5idWZmZXIucGFnZV9jb3VudCA8PCBQQUdFX1NISUZUOwotCWlmIChyZXF1ZXN0LT5kYXRhID09IDAgfHwgY2xpZW50LT5idWZmZXIucGFnZXMgPT0gTlVMTCB8fAorCWlmIChhLT5kYXRhID09IDAgfHwgY2xpZW50LT5idWZmZXIucGFnZXMgPT0gTlVMTCB8fAogCSAgICBwYXlsb2FkID49IGJ1ZmZlcl9lbmQpIHsKIAkJcGF5bG9hZCA9IDA7CiAJCWJ1ZmZlcl9lbmQgPSAwOwogCX0KIAotCXAgPSAoc3RydWN0IGZ3X2NkZXZfaXNvX3BhY2tldCBfX3VzZXIgKil1NjRfdG9fdXB0cihyZXF1ZXN0LT5wYWNrZXRzKTsKKwlwID0gKHN0cnVjdCBmd19jZGV2X2lzb19wYWNrZXQgX191c2VyICopdTY0X3RvX3VwdHIoYS0+cGFja2V0cyk7CiAKLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgcCwgcmVxdWVzdC0+c2l6ZSkpCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIHAsIGEtPnNpemUpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWVuZCA9ICh2b2lkIF9fdXNlciAqKXAgKyByZXF1ZXN0LT5zaXplOworCWVuZCA9ICh2b2lkIF9fdXNlciAqKXAgKyBhLT5zaXplOwogCWNvdW50ID0gMDsKIAl3aGlsZSAocCA8IGVuZCkgewogCQlpZiAoZ2V0X3VzZXIoY29udHJvbCwgJnAtPmNvbnRyb2wpKQpAQCAtOTk1LDYxICs5OTYsNzggQEAKIAkJY291bnQrKzsKIAl9CiAKLQlyZXF1ZXN0LT5zaXplICAgIC09IHVwdHJfdG9fdTY0KHApIC0gcmVxdWVzdC0+cGFja2V0czsKLQlyZXF1ZXN0LT5wYWNrZXRzICA9IHVwdHJfdG9fdTY0KHApOwotCXJlcXVlc3QtPmRhdGEgICAgID0gY2xpZW50LT52bV9zdGFydCArIHBheWxvYWQ7CisJYS0+c2l6ZSAgICAtPSB1cHRyX3RvX3U2NChwKSAtIGEtPnBhY2tldHM7CisJYS0+cGFja2V0cyAgPSB1cHRyX3RvX3U2NChwKTsKKwlhLT5kYXRhICAgICA9IGNsaWVudC0+dm1fc3RhcnQgKyBwYXlsb2FkOwogCiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgaW50IGlvY3RsX3N0YXJ0X2lzbyhzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3N0YXRpYyBpbnQgaW9jdGxfc3RhcnRfaXNvKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5pb24gaW9jdGxfYXJnICphcmcpCiB7Ci0Jc3RydWN0IGZ3X2NkZXZfc3RhcnRfaXNvICpyZXF1ZXN0ID0gYnVmZmVyOworCXN0cnVjdCBmd19jZGV2X3N0YXJ0X2lzbyAqYSA9ICZhcmctPnN0YXJ0X2lzbzsKIAotCWlmIChjbGllbnQtPmlzb19jb250ZXh0ID09IE5VTEwgfHwgcmVxdWVzdC0+aGFuZGxlICE9IDApCisJaWYgKGNsaWVudC0+aXNvX2NvbnRleHQgPT0gTlVMTCB8fCBhLT5oYW5kbGUgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoY2xpZW50LT5pc29fY29udGV4dC0+dHlwZSA9PSBGV19JU09fQ09OVEVYVF9SRUNFSVZFKSB7Ci0JCWlmIChyZXF1ZXN0LT50YWdzID09IDAgfHwgcmVxdWVzdC0+dGFncyA+IDE1KQotCQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNsaWVudC0+aXNvX2NvbnRleHQtPnR5cGUgPT0gRldfSVNPX0NPTlRFWFRfUkVDRUlWRSAmJgorCSAgICAoYS0+dGFncyA9PSAwIHx8IGEtPnRhZ3MgPiAxNSB8fCBhLT5zeW5jID4gMTUpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAocmVxdWVzdC0+c3luYyA+IDE1KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIGZ3X2lzb19jb250ZXh0X3N0YXJ0KGNsaWVudC0+aXNvX2NvbnRleHQsIHJlcXVlc3QtPmN5Y2xlLAotCQkJCSAgICByZXF1ZXN0LT5zeW5jLCByZXF1ZXN0LT50YWdzKTsKKwlyZXR1cm4gZndfaXNvX2NvbnRleHRfc3RhcnQoY2xpZW50LT5pc29fY29udGV4dCwKKwkJCQkgICAgYS0+Y3ljbGUsIGEtPnN5bmMsIGEtPnRhZ3MpOwogfQogCi1zdGF0aWMgaW50IGlvY3RsX3N0b3BfaXNvKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQorc3RhdGljIGludCBpb2N0bF9zdG9wX2lzbyhzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHVuaW9uIGlvY3RsX2FyZyAqYXJnKQogewotCXN0cnVjdCBmd19jZGV2X3N0b3BfaXNvICpyZXF1ZXN0ID0gYnVmZmVyOworCXN0cnVjdCBmd19jZGV2X3N0b3BfaXNvICphID0gJmFyZy0+c3RvcF9pc287CiAKLQlpZiAoY2xpZW50LT5pc29fY29udGV4dCA9PSBOVUxMIHx8IHJlcXVlc3QtPmhhbmRsZSAhPSAwKQorCWlmIChjbGllbnQtPmlzb19jb250ZXh0ID09IE5VTEwgfHwgYS0+aGFuZGxlICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0dXJuIGZ3X2lzb19jb250ZXh0X3N0b3AoY2xpZW50LT5pc29fY29udGV4dCk7CiB9CiAKLXN0YXRpYyBpbnQgaW9jdGxfZ2V0X2N5Y2xlX3RpbWVyKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQorc3RhdGljIGludCBpb2N0bF9nZXRfY3ljbGVfdGltZXIyKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdW5pb24gaW9jdGxfYXJnICphcmcpCiB7Ci0Jc3RydWN0IGZ3X2NkZXZfZ2V0X2N5Y2xlX3RpbWVyICpyZXF1ZXN0ID0gYnVmZmVyOworCXN0cnVjdCBmd19jZGV2X2dldF9jeWNsZV90aW1lcjIgKmEgPSAmYXJnLT5nZXRfY3ljbGVfdGltZXIyOwogCXN0cnVjdCBmd19jYXJkICpjYXJkID0gY2xpZW50LT5kZXZpY2UtPmNhcmQ7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGJ1c190aW1lOwotCXN0cnVjdCB0aW1ldmFsIHR2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHRpbWVzcGVjIHRzID0gezAsIDB9OworCXUzMiBjeWNsZV90aW1lOworCWludCByZXQgPSAwOwogCi0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKLQlidXNfdGltZSA9IGNhcmQtPmRyaXZlci0+Z2V0X2J1c190aW1lKGNhcmQpOwotCWRvX2dldHRpbWVvZmRheSgmdHYpOworCWN5Y2xlX3RpbWUgPSBjYXJkLT5kcml2ZXItPmdldF9jeWNsZV90aW1lKGNhcmQpOwogCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXByZWVtcHRfZW5hYmxlKCk7CisJc3dpdGNoIChhLT5jbGtfaWQpIHsKKwljYXNlIENMT0NLX1JFQUxUSU1FOiAgICAgIGdldG5zdGltZW9mZGF5KCZ0cyk7ICAgICAgICAgICAgICAgICAgIGJyZWFrOworCWNhc2UgQ0xPQ0tfTU9OT1RPTklDOiAgICAgZG9fcG9zaXhfY2xvY2tfbW9ub3RvbmljX2dldHRpbWUoJnRzKTsgYnJlYWs7CisJY2FzZSBDTE9DS19NT05PVE9OSUNfUkFXOiBnZXRyYXdtb25vdG9uaWMoJnRzKTsgICAgICAgICAgICAgICAgICBicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KIAotCXJlcXVlc3QtPmxvY2FsX3RpbWUgPSB0di50dl9zZWMgKiAxMDAwMDAwVUxMICsgdHYudHZfdXNlYzsKLQlyZXF1ZXN0LT5jeWNsZV90aW1lciA9IGJ1c190aW1lICYgMHhmZmZmZmZmZjsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwlhLT50dl9zZWMgICAgICA9IHRzLnR2X3NlYzsKKwlhLT50dl9uc2VjICAgICA9IHRzLnR2X25zZWM7CisJYS0+Y3ljbGVfdGltZXIgPSBjeWNsZV90aW1lOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBpb2N0bF9nZXRfY3ljbGVfdGltZXIoc3RydWN0IGNsaWVudCAqY2xpZW50LCB1bmlvbiBpb2N0bF9hcmcgKmFyZykKK3sKKwlzdHJ1Y3QgZndfY2Rldl9nZXRfY3ljbGVfdGltZXIgKmEgPSAmYXJnLT5nZXRfY3ljbGVfdGltZXI7CisJc3RydWN0IGZ3X2NkZXZfZ2V0X2N5Y2xlX3RpbWVyMiBjdDI7CisKKwljdDIuY2xrX2lkID0gQ0xPQ0tfUkVBTFRJTUU7CisJaW9jdGxfZ2V0X2N5Y2xlX3RpbWVyMihjbGllbnQsICh1bmlvbiBpb2N0bF9hcmcgKikmY3QyKTsKKworCWEtPmxvY2FsX3RpbWUgPSBjdDIudHZfc2VjICogVVNFQ19QRVJfU0VDICsgY3QyLnR2X25zZWMgLyBOU0VDX1BFUl9VU0VDOworCWEtPmN5Y2xlX3RpbWVyID0gY3QyLmN5Y2xlX3RpbWVyOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyMjAsMzMgKzEyMzgsMzIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGlvY3RsX2FsbG9jYXRlX2lzb19yZXNvdXJjZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3N0YXRpYyBpbnQgaW9jdGxfYWxsb2NhdGVfaXNvX3Jlc291cmNlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwKKwkJCQkgICAgICAgdW5pb24gaW9jdGxfYXJnICphcmcpCiB7Ci0Jc3RydWN0IGZ3X2NkZXZfYWxsb2NhdGVfaXNvX3Jlc291cmNlICpyZXF1ZXN0ID0gYnVmZmVyOwotCi0JcmV0dXJuIGluaXRfaXNvX3Jlc291cmNlKGNsaWVudCwgcmVxdWVzdCwgSVNPX1JFU19BTExPQyk7CisJcmV0dXJuIGluaXRfaXNvX3Jlc291cmNlKGNsaWVudCwKKwkJCSZhcmctPmFsbG9jYXRlX2lzb19yZXNvdXJjZSwgSVNPX1JFU19BTExPQyk7CiB9CiAKLXN0YXRpYyBpbnQgaW9jdGxfZGVhbGxvY2F0ZV9pc29fcmVzb3VyY2Uoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCitzdGF0aWMgaW50IGlvY3RsX2RlYWxsb2NhdGVfaXNvX3Jlc291cmNlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwKKwkJCQkJIHVuaW9uIGlvY3RsX2FyZyAqYXJnKQogewotCXN0cnVjdCBmd19jZGV2X2RlYWxsb2NhdGUgKnJlcXVlc3QgPSBidWZmZXI7Ci0KLQlyZXR1cm4gcmVsZWFzZV9jbGllbnRfcmVzb3VyY2UoY2xpZW50LCByZXF1ZXN0LT5oYW5kbGUsCi0JCQkJICAgICAgIHJlbGVhc2VfaXNvX3Jlc291cmNlLCBOVUxMKTsKKwlyZXR1cm4gcmVsZWFzZV9jbGllbnRfcmVzb3VyY2UoY2xpZW50LAorCQkJYXJnLT5kZWFsbG9jYXRlLmhhbmRsZSwgcmVsZWFzZV9pc29fcmVzb3VyY2UsIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IGlvY3RsX2FsbG9jYXRlX2lzb19yZXNvdXJjZV9vbmNlKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQorc3RhdGljIGludCBpb2N0bF9hbGxvY2F0ZV9pc29fcmVzb3VyY2Vfb25jZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCisJCQkJCSAgICB1bmlvbiBpb2N0bF9hcmcgKmFyZykKIHsKLQlzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZV9pc29fcmVzb3VyY2UgKnJlcXVlc3QgPSBidWZmZXI7Ci0KLQlyZXR1cm4gaW5pdF9pc29fcmVzb3VyY2UoY2xpZW50LCByZXF1ZXN0LCBJU09fUkVTX0FMTE9DX09OQ0UpOworCXJldHVybiBpbml0X2lzb19yZXNvdXJjZShjbGllbnQsCisJCQkmYXJnLT5hbGxvY2F0ZV9pc29fcmVzb3VyY2UsIElTT19SRVNfQUxMT0NfT05DRSk7CiB9CiAKLXN0YXRpYyBpbnQgaW9jdGxfZGVhbGxvY2F0ZV9pc29fcmVzb3VyY2Vfb25jZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHZvaWQgKmJ1ZmZlcikKK3N0YXRpYyBpbnQgaW9jdGxfZGVhbGxvY2F0ZV9pc29fcmVzb3VyY2Vfb25jZShzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCisJCQkJCSAgICAgIHVuaW9uIGlvY3RsX2FyZyAqYXJnKQogewotCXN0cnVjdCBmd19jZGV2X2FsbG9jYXRlX2lzb19yZXNvdXJjZSAqcmVxdWVzdCA9IGJ1ZmZlcjsKLQotCXJldHVybiBpbml0X2lzb19yZXNvdXJjZShjbGllbnQsIHJlcXVlc3QsIElTT19SRVNfREVBTExPQ19PTkNFKTsKKwlyZXR1cm4gaW5pdF9pc29fcmVzb3VyY2UoY2xpZW50LAorCQkJJmFyZy0+YWxsb2NhdGVfaXNvX3Jlc291cmNlLCBJU09fUkVTX0RFQUxMT0NfT05DRSk7CiB9CiAKIC8qCkBAIC0xMjU0LDE2ICsxMjcxLDE3IEBACiAgKiBsaW1pdGVkIGJ5IHRoZSBkZXZpY2UncyBsaW5rIHNwZWVkLCB0aGUgbG9jYWwgbm9kZSdzIGxpbmsgc3BlZWQsCiAgKiBhbmQgYWxsIFBIWSBwb3J0IHNwZWVkcyBiZXR3ZWVuIHRoZSB0d28gbGlua3MuCiAgKi8KLXN0YXRpYyBpbnQgaW9jdGxfZ2V0X3NwZWVkKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQorc3RhdGljIGludCBpb2N0bF9nZXRfc3BlZWQoc3RydWN0IGNsaWVudCAqY2xpZW50LCB1bmlvbiBpb2N0bF9hcmcgKmFyZykKIHsKIAlyZXR1cm4gY2xpZW50LT5kZXZpY2UtPm1heF9zcGVlZDsKIH0KIAotc3RhdGljIGludCBpb2N0bF9zZW5kX2Jyb2FkY2FzdF9yZXF1ZXN0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKQorc3RhdGljIGludCBpb2N0bF9zZW5kX2Jyb2FkY2FzdF9yZXF1ZXN0KHN0cnVjdCBjbGllbnQgKmNsaWVudCwKKwkJCQkJdW5pb24gaW9jdGxfYXJnICphcmcpCiB7Ci0Jc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXF1ZXN0ICpyZXF1ZXN0ID0gYnVmZmVyOworCXN0cnVjdCBmd19jZGV2X3NlbmRfcmVxdWVzdCAqYSA9ICZhcmctPnNlbmRfcmVxdWVzdDsKIAotCXN3aXRjaCAocmVxdWVzdC0+dGNvZGUpIHsKKwlzd2l0Y2ggKGEtPnRjb2RlKSB7CiAJY2FzZSBUQ09ERV9XUklURV9RVUFETEVUX1JFUVVFU1Q6CiAJY2FzZSBUQ09ERV9XUklURV9CTE9DS19SRVFVRVNUOgogCQlicmVhazsKQEAgLTEyNzIsMzYgKzEyOTAsMzYgQEAKIAl9CiAKIAkvKiBTZWN1cml0eSBwb2xpY3k6IE9ubHkgYWxsb3cgYWNjZXNzZXMgdG8gVW5pdHMgU3BhY2UuICovCi0JaWYgKHJlcXVlc3QtPm9mZnNldCA8IENTUl9SRUdJU1RFUl9CQVNFICsgQ1NSX0NPTkZJR19ST01fRU5EKQorCWlmIChhLT5vZmZzZXQgPCBDU1JfUkVHSVNURVJfQkFTRSArIENTUl9DT05GSUdfUk9NX0VORCkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKLQlyZXR1cm4gaW5pdF9yZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgTE9DQUxfQlVTIHwgMHgzZiwgU0NPREVfMTAwKTsKKwlyZXR1cm4gaW5pdF9yZXF1ZXN0KGNsaWVudCwgYSwgTE9DQUxfQlVTIHwgMHgzZiwgU0NPREVfMTAwKTsKIH0KIAotc3RhdGljIGludCBpb2N0bF9zZW5kX3N0cmVhbV9wYWNrZXQoc3RydWN0IGNsaWVudCAqY2xpZW50LCB2b2lkICpidWZmZXIpCitzdGF0aWMgaW50IGlvY3RsX3NlbmRfc3RyZWFtX3BhY2tldChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsIHVuaW9uIGlvY3RsX2FyZyAqYXJnKQogewotCXN0cnVjdCBmd19jZGV2X3NlbmRfc3RyZWFtX3BhY2tldCAqcCA9IGJ1ZmZlcjsKKwlzdHJ1Y3QgZndfY2Rldl9zZW5kX3N0cmVhbV9wYWNrZXQgKmEgPSAmYXJnLT5zZW5kX3N0cmVhbV9wYWNrZXQ7CiAJc3RydWN0IGZ3X2NkZXZfc2VuZF9yZXF1ZXN0IHJlcXVlc3Q7CiAJaW50IGRlc3Q7CiAKLQlpZiAocC0+c3BlZWQgPiBjbGllbnQtPmRldmljZS0+Y2FyZC0+bGlua19zcGVlZCB8fAotCSAgICBwLT5sZW5ndGggPiAxMDI0IDw8IHAtPnNwZWVkKQorCWlmIChhLT5zcGVlZCA+IGNsaWVudC0+ZGV2aWNlLT5jYXJkLT5saW5rX3NwZWVkIHx8CisJICAgIGEtPmxlbmd0aCA+IDEwMjQgPDwgYS0+c3BlZWQpCiAJCXJldHVybiAtRUlPOwogCi0JaWYgKHAtPnRhZyA+IDMgfHwgcC0+Y2hhbm5lbCA+IDYzIHx8IHAtPnN5ID4gMTUpCisJaWYgKGEtPnRhZyA+IDMgfHwgYS0+Y2hhbm5lbCA+IDYzIHx8IGEtPnN5ID4gMTUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZGVzdCA9IGZ3X3N0cmVhbV9wYWNrZXRfZGVzdGluYXRpb25faWQocC0+dGFnLCBwLT5jaGFubmVsLCBwLT5zeSk7CisJZGVzdCA9IGZ3X3N0cmVhbV9wYWNrZXRfZGVzdGluYXRpb25faWQoYS0+dGFnLCBhLT5jaGFubmVsLCBhLT5zeSk7CiAJcmVxdWVzdC50Y29kZQkJPSBUQ09ERV9TVFJFQU1fREFUQTsKLQlyZXF1ZXN0Lmxlbmd0aAkJPSBwLT5sZW5ndGg7Ci0JcmVxdWVzdC5jbG9zdXJlCQk9IHAtPmNsb3N1cmU7Ci0JcmVxdWVzdC5kYXRhCQk9IHAtPmRhdGE7Ci0JcmVxdWVzdC5nZW5lcmF0aW9uCT0gcC0+Z2VuZXJhdGlvbjsKKwlyZXF1ZXN0Lmxlbmd0aAkJPSBhLT5sZW5ndGg7CisJcmVxdWVzdC5jbG9zdXJlCQk9IGEtPmNsb3N1cmU7CisJcmVxdWVzdC5kYXRhCQk9IGEtPmRhdGE7CisJcmVxdWVzdC5nZW5lcmF0aW9uCT0gYS0+Z2VuZXJhdGlvbjsKIAotCXJldHVybiBpbml0X3JlcXVlc3QoY2xpZW50LCAmcmVxdWVzdCwgZGVzdCwgcC0+c3BlZWQpOworCXJldHVybiBpbml0X3JlcXVlc3QoY2xpZW50LCAmcmVxdWVzdCwgZGVzdCwgYS0+c3BlZWQpOwogfQogCi1zdGF0aWMgaW50ICgqIGNvbnN0IGlvY3RsX2hhbmRsZXJzW10pKHN0cnVjdCBjbGllbnQgKmNsaWVudCwgdm9pZCAqYnVmZmVyKSA9IHsKK3N0YXRpYyBpbnQgKCogY29uc3QgaW9jdGxfaGFuZGxlcnNbXSkoc3RydWN0IGNsaWVudCAqLCB1bmlvbiBpb2N0bF9hcmcgKikgPSB7CiAJaW9jdGxfZ2V0X2luZm8sCiAJaW9jdGxfc2VuZF9yZXF1ZXN0LAogCWlvY3RsX2FsbG9jYXRlLApAQCAtMTMyMiw0NyArMTM0MCwzNSBAQAogCWlvY3RsX2dldF9zcGVlZCwKIAlpb2N0bF9zZW5kX2Jyb2FkY2FzdF9yZXF1ZXN0LAogCWlvY3RsX3NlbmRfc3RyZWFtX3BhY2tldCwKKwlpb2N0bF9nZXRfY3ljbGVfdGltZXIyLAogfTsKIAogc3RhdGljIGludCBkaXNwYXRjaF9pb2N0bChzdHJ1Y3QgY2xpZW50ICpjbGllbnQsCiAJCQkgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpCiB7Ci0JY2hhciBidWZmZXJbc2l6ZW9mKHVuaW9uIHsKLQkJc3RydWN0IGZ3X2NkZXZfZ2V0X2luZm8JCQlfMDA7Ci0JCXN0cnVjdCBmd19jZGV2X3NlbmRfcmVxdWVzdAkJXzAxOwotCQlzdHJ1Y3QgZndfY2Rldl9hbGxvY2F0ZQkJCV8wMjsKLQkJc3RydWN0IGZ3X2NkZXZfZGVhbGxvY2F0ZQkJXzAzOwotCQlzdHJ1Y3QgZndfY2Rldl9zZW5kX3Jlc3BvbnNlCQlfMDQ7Ci0JCXN0cnVjdCBmd19jZGV2X2luaXRpYXRlX2J1c19yZXNldAlfMDU7Ci0JCXN0cnVjdCBmd19jZGV2X2FkZF9kZXNjcmlwdG9yCQlfMDY7Ci0JCXN0cnVjdCBmd19jZGV2X3JlbW92ZV9kZXNjcmlwdG9yCV8wNzsKLQkJc3RydWN0IGZ3X2NkZXZfY3JlYXRlX2lzb19jb250ZXh0CV8wODsKLQkJc3RydWN0IGZ3X2NkZXZfcXVldWVfaXNvCQlfMDk7Ci0JCXN0cnVjdCBmd19jZGV2X3N0YXJ0X2lzbwkJXzBhOwotCQlzdHJ1Y3QgZndfY2Rldl9zdG9wX2lzbwkJCV8wYjsKLQkJc3RydWN0IGZ3X2NkZXZfZ2V0X2N5Y2xlX3RpbWVyCQlfMGM7Ci0JCXN0cnVjdCBmd19jZGV2X2FsbG9jYXRlX2lzb19yZXNvdXJjZQlfMGQ7Ci0JCXN0cnVjdCBmd19jZGV2X3NlbmRfc3RyZWFtX3BhY2tldAlfMTM7Ci0JfSldOworCXVuaW9uIGlvY3RsX2FyZyBidWZmZXI7CiAJaW50IHJldDsKIAorCWlmIChmd19kZXZpY2VfaXNfc2h1dGRvd24oY2xpZW50LT5kZXZpY2UpKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWlmIChfSU9DX1RZUEUoY21kKSAhPSAnIycgfHwKIAkgICAgX0lPQ19OUihjbWQpID49IEFSUkFZX1NJWkUoaW9jdGxfaGFuZGxlcnMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChfSU9DX0RJUihjbWQpICYgX0lPQ19XUklURSkgewogCQlpZiAoX0lPQ19TSVpFKGNtZCkgPiBzaXplb2YoYnVmZmVyKSB8fAotCQkgICAgY29weV9mcm9tX3VzZXIoYnVmZmVyLCBhcmcsIF9JT0NfU0laRShjbWQpKSkKKwkJICAgIGNvcHlfZnJvbV91c2VyKCZidWZmZXIsIGFyZywgX0lPQ19TSVpFKGNtZCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JcmV0ID0gaW9jdGxfaGFuZGxlcnNbX0lPQ19OUihjbWQpXShjbGllbnQsIGJ1ZmZlcik7CisJcmV0ID0gaW9jdGxfaGFuZGxlcnNbX0lPQ19OUihjbWQpXShjbGllbnQsICZidWZmZXIpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJaWYgKF9JT0NfRElSKGNtZCkgJiBfSU9DX1JFQUQpIHsKIAkJaWYgKF9JT0NfU0laRShjbWQpID4gc2l6ZW9mKGJ1ZmZlcikgfHwKLQkJICAgIGNvcHlfdG9fdXNlcihhcmcsIGJ1ZmZlciwgX0lPQ19TSVpFKGNtZCkpKQorCQkgICAgY29weV90b191c2VyKGFyZywgJmJ1ZmZlciwgX0lPQ19TSVpFKGNtZCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCkBAIC0xMzcyLDI0ICsxMzc4LDE0IEBACiBzdGF0aWMgbG9uZyBmd19kZXZpY2Vfb3BfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7Ci0Jc3RydWN0IGNsaWVudCAqY2xpZW50ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JaWYgKGZ3X2RldmljZV9pc19zaHV0ZG93bihjbGllbnQtPmRldmljZSkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JcmV0dXJuIGRpc3BhdGNoX2lvY3RsKGNsaWVudCwgY21kLCAodm9pZCBfX3VzZXIgKikgYXJnKTsKKwlyZXR1cm4gZGlzcGF0Y2hfaW9jdGwoZmlsZS0+cHJpdmF0ZV9kYXRhLCBjbWQsICh2b2lkIF9fdXNlciAqKWFyZyk7CiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCiBzdGF0aWMgbG9uZyBmd19kZXZpY2Vfb3BfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBjbGllbnQgKmNsaWVudCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCWlmIChmd19kZXZpY2VfaXNfc2h1dGRvd24oY2xpZW50LT5kZXZpY2UpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXJldHVybiBkaXNwYXRjaF9pb2N0bChjbGllbnQsIGNtZCwgY29tcGF0X3B0cihhcmcpKTsKKwlyZXR1cm4gZGlzcGF0Y2hfaW9jdGwoZmlsZS0+cHJpdmF0ZV9kYXRhLCBjbWQsIGNvbXBhdF9wdHIoYXJnKSk7CiB9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9jb3JlLWRldmljZS5jIGIvZHJpdmVycy9maXJld2lyZS9jb3JlLWRldmljZS5jCmluZGV4IDlkMGRmY2IuLjVkYjA1MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS1kZXZpY2UuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtZGV2aWNlLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KQEAgLTMyLDcgKzMzLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3J3c2VtLmg+Ci0jaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KQEAgLTQzLDcgKzQzLDcgQEAKIAogI2luY2x1ZGUgImNvcmUuaCIKIAotdm9pZCBmd19jc3JfaXRlcmF0b3JfaW5pdChzdHJ1Y3QgZndfY3NyX2l0ZXJhdG9yICpjaSwgdTMyICogcCkKK3ZvaWQgZndfY3NyX2l0ZXJhdG9yX2luaXQoc3RydWN0IGZ3X2Nzcl9pdGVyYXRvciAqY2ksIGNvbnN0IHUzMiAqcCkKIHsKIAljaS0+cCA9IHAgKyAxOwogCWNpLT5lbmQgPSBjaS0+cCArIChwWzBdID4+IDE2KTsKQEAgLTU5LDkgKzU5LDc2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGZ3X2Nzcl9pdGVyYXRvcl9uZXh0KTsKIAorc3RhdGljIGNvbnN0IHUzMiAqc2VhcmNoX2xlYWYoY29uc3QgdTMyICpkaXJlY3RvcnksIGludCBzZWFyY2hfa2V5KQoreworCXN0cnVjdCBmd19jc3JfaXRlcmF0b3IgY2k7CisJaW50IGxhc3Rfa2V5ID0gMCwga2V5LCB2YWx1ZTsKKworCWZ3X2Nzcl9pdGVyYXRvcl9pbml0KCZjaSwgZGlyZWN0b3J5KTsKKwl3aGlsZSAoZndfY3NyX2l0ZXJhdG9yX25leHQoJmNpLCAma2V5LCAmdmFsdWUpKSB7CisJCWlmIChsYXN0X2tleSA9PSBzZWFyY2hfa2V5ICYmCisJCSAgICBrZXkgPT0gKENTUl9ERVNDUklQVE9SIHwgQ1NSX0xFQUYpKQorCQkJcmV0dXJuIGNpLnAgLSAxICsgdmFsdWU7CisKKwkJbGFzdF9rZXkgPSBrZXk7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgdGV4dHVhbF9sZWFmX3RvX3N0cmluZyhjb25zdCB1MzIgKmJsb2NrLCBjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworCXVuc2lnbmVkIGludCBxdWFkbGV0cywgaTsKKwljaGFyIGM7CisKKwlpZiAoIXNpemUgfHwgIWJ1ZikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlxdWFkbGV0cyA9IG1pbihibG9ja1swXSA+PiAxNiwgMjU2VSk7CisJaWYgKHF1YWRsZXRzIDwgMikKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJaWYgKGJsb2NrWzFdICE9IDAgfHwgYmxvY2tbMl0gIT0gMCkKKwkJLyogdW5rbm93biBsYW5ndWFnZS9jaGFyYWN0ZXIgc2V0ICovCisJCXJldHVybiAtRU5PREFUQTsKKworCWJsb2NrICs9IDM7CisJcXVhZGxldHMgLT0gMjsKKwlmb3IgKGkgPSAwOyBpIDwgcXVhZGxldHMgKiA0ICYmIGkgPCBzaXplIC0gMTsgaSsrKSB7CisJCWMgPSBibG9ja1tpIC8gNF0gPj4gKDI0IC0gOCAqIChpICUgNCkpOworCQlpZiAoYyA9PSAnXDAnKQorCQkJYnJlYWs7CisJCWJ1ZltpXSA9IGM7CisJfQorCWJ1ZltpXSA9ICdcMCc7CisKKwlyZXR1cm4gaTsKK30KKworLyoqCisgKiBmd19jc3Jfc3RyaW5nIC0gcmVhZHMgYSBzdHJpbmcgZnJvbSB0aGUgY29uZmlndXJhdGlvbiBST00KKyAqIEBkaXJlY3Rvcnk6IGUuZy4gcm9vdCBkaXJlY3Rvcnkgb3IgdW5pdCBkaXJlY3RvcnkKKyAqIEBrZXk6IHRoZSBrZXkgb2YgdGhlIHByZWNlZGluZyBkaXJlY3RvcnkgZW50cnkKKyAqIEBidWY6IHdoZXJlIHRvIHB1dCB0aGUgc3RyaW5nCisgKiBAc2l6ZTogc2l6ZSBvZiBAYnVmLCBpbiBieXRlcworICoKKyAqIFRoZSBzdHJpbmcgaXMgdGFrZW4gZnJvbSBhIG1pbmltYWwgQVNDSUkgdGV4dCBkZXNjcmlwdG9yIGxlYWYgYWZ0ZXIKKyAqIHRoZSBpbW1lZGlhdGUgZW50cnkgd2l0aCBAa2V5LiAgVGhlIHN0cmluZyBpcyB6ZXJvLXRlcm1pbmF0ZWQuCisgKiBSZXR1cm5zIHN0cmxlbihidWYpIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLworaW50IGZ3X2Nzcl9zdHJpbmcoY29uc3QgdTMyICpkaXJlY3RvcnksIGludCBrZXksIGNoYXIgKmJ1Ziwgc2l6ZV90IHNpemUpCit7CisJY29uc3QgdTMyICpsZWFmID0gc2VhcmNoX2xlYWYoZGlyZWN0b3J5LCBrZXkpOworCWlmICghbGVhZikKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlyZXR1cm4gdGV4dHVhbF9sZWFmX3RvX3N0cmluZyhsZWFmLCBidWYsIHNpemUpOworfQorRVhQT1JUX1NZTUJPTChmd19jc3Jfc3RyaW5nKTsKKwogc3RhdGljIGJvb2wgaXNfZndfdW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCi1zdGF0aWMgaW50IG1hdGNoX3VuaXRfZGlyZWN0b3J5KHUzMiAqZGlyZWN0b3J5LCB1MzIgbWF0Y2hfZmxhZ3MsCitzdGF0aWMgaW50IG1hdGNoX3VuaXRfZGlyZWN0b3J5KGNvbnN0IHUzMiAqZGlyZWN0b3J5LCB1MzIgbWF0Y2hfZmxhZ3MsCiAJCQkJY29uc3Qgc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IGZ3X2Nzcl9pdGVyYXRvciBjaTsKQEAgLTE5NSw3ICsyNjIsNyBAQAogCXN0cnVjdCBjb25maWdfcm9tX2F0dHJpYnV0ZSAqYXR0ciA9CiAJCWNvbnRhaW5lcl9vZihkYXR0ciwgc3RydWN0IGNvbmZpZ19yb21fYXR0cmlidXRlLCBhdHRyKTsKIAlzdHJ1Y3QgZndfY3NyX2l0ZXJhdG9yIGNpOwotCXUzMiAqZGlyOworCWNvbnN0IHUzMiAqZGlyOwogCWludCBrZXksIHZhbHVlLCByZXQgPSAtRU5PRU5UOwogCiAJZG93bl9yZWFkKCZmd19kZXZpY2VfcndzZW0pOwpAQCAtMjI2LDEwICsyOTMsMTAgQEAKIHsKIAlzdHJ1Y3QgY29uZmlnX3JvbV9hdHRyaWJ1dGUgKmF0dHIgPQogCQljb250YWluZXJfb2YoZGF0dHIsIHN0cnVjdCBjb25maWdfcm9tX2F0dHJpYnV0ZSwgYXR0cik7Ci0Jc3RydWN0IGZ3X2Nzcl9pdGVyYXRvciBjaTsKLQl1MzIgKmRpciwgKmJsb2NrID0gTlVMTCwgKnAsICplbmQ7Ci0JaW50IGxlbmd0aCwga2V5LCB2YWx1ZSwgbGFzdF9rZXkgPSAwLCByZXQgPSAtRU5PRU5UOwotCWNoYXIgKmI7CisJY29uc3QgdTMyICpkaXI7CisJc2l6ZV90IGJ1ZnNpemU7CisJY2hhciBkdW1teV9idWZbMl07CisJaW50IHJldDsKIAogCWRvd25fcmVhZCgmZndfZGV2aWNlX3J3c2VtKTsKIApAQCAtMjM4LDQwICszMDUsMjMgQEAKIAllbHNlCiAJCWRpciA9IGZ3X2RldmljZShkZXYpLT5jb25maWdfcm9tICsgNTsKIAotCWZ3X2Nzcl9pdGVyYXRvcl9pbml0KCZjaSwgZGlyKTsKLQl3aGlsZSAoZndfY3NyX2l0ZXJhdG9yX25leHQoJmNpLCAma2V5LCAmdmFsdWUpKSB7Ci0JCWlmIChhdHRyLT5rZXkgPT0gbGFzdF9rZXkgJiYKLQkJICAgIGtleSA9PSAoQ1NSX0RFU0NSSVBUT1IgfCBDU1JfTEVBRikpCi0JCQlibG9jayA9IGNpLnAgLSAxICsgdmFsdWU7Ci0JCWxhc3Rfa2V5ID0ga2V5OworCWlmIChidWYpIHsKKwkJYnVmc2l6ZSA9IFBBR0VfU0laRSAtIDE7CisJfSBlbHNlIHsKKwkJYnVmID0gZHVtbXlfYnVmOworCQlidWZzaXplID0gMTsKIAl9CiAKLQlpZiAoYmxvY2sgPT0gTlVMTCkKLQkJZ290byBvdXQ7CisJcmV0ID0gZndfY3NyX3N0cmluZyhkaXIsIGF0dHItPmtleSwgYnVmLCBidWZzaXplKTsKIAotCWxlbmd0aCA9IG1pbihibG9ja1swXSA+PiAxNiwgMjU2VSk7Ci0JaWYgKGxlbmd0aCA8IDMpCi0JCWdvdG8gb3V0OwotCi0JaWYgKGJsb2NrWzFdICE9IDAgfHwgYmxvY2tbMl0gIT0gMCkKLQkJLyogVW5rbm93biBlbmNvZGluZy4gKi8KLQkJZ290byBvdXQ7Ci0KLQlpZiAoYnVmID09IE5VTEwpIHsKLQkJcmV0ID0gbGVuZ3RoICogNDsKLQkJZ290byBvdXQ7CisJaWYgKHJldCA+PSAwKSB7CisJCS8qIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UgYW5kIGFkZCBuZXdsaW5lLiAqLworCQl3aGlsZSAocmV0ID4gMCAmJiBpc3NwYWNlKGJ1ZltyZXQgLSAxXSkpCisJCQlyZXQtLTsKKwkJc3RyY3B5KGJ1ZiArIHJldCwgIlxuIik7CisJCXJldCsrOwogCX0KIAotCWIgPSBidWY7Ci0JZW5kID0gJmJsb2NrW2xlbmd0aCArIDFdOwotCWZvciAocCA9ICZibG9ja1szXTsgcCA8IGVuZDsgcCsrLCBiICs9IDQpCi0JCSogKHUzMiAqKSBiID0gKF9fZm9yY2UgdTMyKSBfX2NwdV90b19iZTMyKCpwKTsKLQotCS8qIFN0cmlwIHRyYWlsaW5nIHdoaXRlc3BhY2UgYW5kIGFkZCBuZXdsaW5lLiAqLwotCXdoaWxlIChiLS0sIChpc3NwYWNlKCpiKSB8fCAqYiA9PSAnXDAnKSAmJiBiID4gYnVmKTsKLQlzdHJjcHkoYiArIDEsICJcbiIpOwotCXJldCA9IGIgKyAyIC0gYnVmOwotIG91dDoKIAl1cF9yZWFkKCZmd19kZXZpY2VfcndzZW0pOwogCiAJcmV0dXJuIHJldDsKQEAgLTM3MSw3ICs0MjEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdW5pdHNfc3ByaW50ZihjaGFyICpidWYsIHUzMiAqZGlyZWN0b3J5KQorc3RhdGljIGludCB1bml0c19zcHJpbnRmKGNoYXIgKmJ1ZiwgY29uc3QgdTMyICpkaXJlY3RvcnkpCiB7CiAJc3RydWN0IGZ3X2Nzcl9pdGVyYXRvciBjaTsKIAlpbnQga2V5LCB2YWx1ZTsKQEAgLTQ0MSwyOCArNDkxLDI5IEBACiAJcmV0dXJuIHJjb2RlOwogfQogCi0jZGVmaW5lIFJFQURfQklCX1JPTV9TSVpFCTI1NgotI2RlZmluZSBSRUFEX0JJQl9TVEFDS19TSVpFCTE2CisjZGVmaW5lIE1BWF9DT05GSUdfUk9NX1NJWkUgMjU2CiAKIC8qCiAgKiBSZWFkIHRoZSBidXMgaW5mbyBibG9jaywgcGVyZm9ybSBhIHNwZWVkIHByb2JlLCBhbmQgcmVhZCBhbGwgb2YgdGhlIHJlc3Qgb2YKICAqIHRoZSBjb25maWcgUk9NLiAgV2UgZG8gYWxsIHRoaXMgd2l0aCBhIGNhY2hlZCBidXMgZ2VuZXJhdGlvbi4gIElmIHRoZSBidXMKLSAqIGdlbmVyYXRpb24gY2hhbmdlcyB1bmRlciB1cywgcmVhZF9idXNfaW5mb19ibG9jayB3aWxsIGZhaWwgYW5kIGdldCByZXRyaWVkLgorICogZ2VuZXJhdGlvbiBjaGFuZ2VzIHVuZGVyIHVzLCByZWFkX2NvbmZpZ19yb20gd2lsbCBmYWlsIGFuZCBnZXQgcmV0cmllZC4KICAqIEl0J3MgYmV0dGVyIHRvIHN0YXJ0IGFsbCBvdmVyIGluIHRoaXMgY2FzZSBiZWNhdXNlIHRoZSBub2RlIGZyb20gd2hpY2ggd2UKICAqIGFyZSByZWFkaW5nIHRoZSBST00gbWF5IGhhdmUgY2hhbmdlZCB0aGUgUk9NIGR1cmluZyB0aGUgcmVzZXQuCiAgKi8KLXN0YXRpYyBpbnQgcmVhZF9idXNfaW5mb19ibG9jayhzdHJ1Y3QgZndfZGV2aWNlICpkZXZpY2UsIGludCBnZW5lcmF0aW9uKQorc3RhdGljIGludCByZWFkX2NvbmZpZ19yb20oc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlLCBpbnQgZ2VuZXJhdGlvbikKIHsKLQl1MzIgKnJvbSwgKnN0YWNrLCAqb2xkX3JvbSwgKm5ld19yb207CisJY29uc3QgdTMyICpvbGRfcm9tLCAqbmV3X3JvbTsKKwl1MzIgKnJvbSwgKnN0YWNrOwogCXUzMiBzcCwga2V5OwogCWludCBpLCBlbmQsIGxlbmd0aCwgcmV0ID0gLTE7CiAKLQlyb20gPSBrbWFsbG9jKHNpemVvZigqcm9tKSAqIFJFQURfQklCX1JPTV9TSVpFICsKLQkJICAgICAgc2l6ZW9mKCpzdGFjaykgKiBSRUFEX0JJQl9TVEFDS19TSVpFLCBHRlBfS0VSTkVMKTsKKwlyb20gPSBrbWFsbG9jKHNpemVvZigqcm9tKSAqIE1BWF9DT05GSUdfUk9NX1NJWkUgKworCQkgICAgICBzaXplb2YoKnN0YWNrKSAqIE1BWF9DT05GSUdfUk9NX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmIChyb20gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlzdGFjayA9ICZyb21bUkVBRF9CSUJfUk9NX1NJWkVdOworCXN0YWNrID0gJnJvbVtNQVhfQ09ORklHX1JPTV9TSVpFXTsKKwltZW1zZXQocm9tLCAwLCBzaXplb2YoKnJvbSkgKiBNQVhfQ09ORklHX1JPTV9TSVpFKTsKIAogCWRldmljZS0+bWF4X3NwZWVkID0gU0NPREVfMTAwOwogCkBAIC01MjksNDAgKzU4MCw1NCBAQAogCQkgKi8KIAkJa2V5ID0gc3RhY2tbLS1zcF07CiAJCWkgPSBrZXkgJiAweGZmZmZmZjsKLQkJaWYgKGkgPj0gUkVBRF9CSUJfUk9NX1NJWkUpCi0JCQkvKgotCQkJICogVGhlIHJlZmVyZW5jZSBwb2ludHMgb3V0c2lkZSB0aGUgc3RhbmRhcmQKLQkJCSAqIGNvbmZpZyByb20gYXJlYSwgc29tZXRoaW5nJ3MgZmlzaHkuCi0JCQkgKi8KKwkJaWYgKFdBUk5fT04oaSA+PSBNQVhfQ09ORklHX1JPTV9TSVpFKSkKIAkJCWdvdG8gb3V0OwogCiAJCS8qIFJlYWQgaGVhZGVyIHF1YWRsZXQgZm9yIHRoZSBibG9jayB0byBnZXQgdGhlIGxlbmd0aC4gKi8KIAkJaWYgKHJlYWRfcm9tKGRldmljZSwgZ2VuZXJhdGlvbiwgaSwgJnJvbVtpXSkgIT0gUkNPREVfQ09NUExFVEUpCiAJCQlnb3RvIG91dDsKIAkJZW5kID0gaSArIChyb21baV0gPj4gMTYpICsgMTsKLQkJaSsrOwotCQlpZiAoZW5kID4gUkVBRF9CSUJfUk9NX1NJWkUpCisJCWlmIChlbmQgPiBNQVhfQ09ORklHX1JPTV9TSVpFKSB7CiAJCQkvKgotCQkJICogVGhpcyBibG9jayBleHRlbmRzIG91dHNpZGUgc3RhbmRhcmQgY29uZmlnCi0JCQkgKiBhcmVhIChhbmQgdGhlIGFycmF5IHdlJ3JlIHJlYWRpbmcgaXQKLQkJCSAqIGludG8pLiAgVGhhdCdzIGJyb2tlbiwgc28gaWdub3JlIHRoaXMKLQkJCSAqIGRldmljZS4KKwkJCSAqIFRoaXMgYmxvY2sgZXh0ZW5kcyBvdXRzaWRlIHRoZSBjb25maWcgUk9NIHdoaWNoIGlzCisJCQkgKiBhIGZpcm13YXJlIGJ1Zy4gIElnbm9yZSB0aGlzIHdob2xlIGJsb2NrLCBpLmUuCisJCQkgKiBzaW1wbHkgc2V0IGEgZmFrZSBibG9jayBsZW5ndGggb2YgMC4KIAkJCSAqLwotCQkJZ290byBvdXQ7CisJCQlmd19lcnJvcigic2tpcHBlZCBpbnZhbGlkIFJPTSBibG9jayAleCBhdCAlbGx4XG4iLAorCQkJCSByb21baV0sCisJCQkJIGkgKiA0IHwgQ1NSX1JFR0lTVEVSX0JBU0UgfCBDU1JfQ09ORklHX1JPTSk7CisJCQlyb21baV0gPSAwOworCQkJZW5kID0gaTsKKwkJfQorCQlpKys7CiAKIAkJLyoKIAkJICogTm93IHJlYWQgaW4gdGhlIGJsb2NrLiAgSWYgdGhpcyBpcyBhIGRpcmVjdG9yeQogCQkgKiBibG9jaywgY2hlY2sgdGhlIGVudHJpZXMgYXMgd2UgcmVhZCB0aGVtIHRvIHNlZSBpZgogCQkgKiBpdCByZWZlcmVuY2VzIGFub3RoZXIgYmxvY2ssIGFuZCBwdXNoIGl0IGluIHRoYXQgY2FzZS4KIAkJICovCi0JCXdoaWxlIChpIDwgZW5kKSB7CisJCWZvciAoOyBpIDwgZW5kOyBpKyspIHsKIAkJCWlmIChyZWFkX3JvbShkZXZpY2UsIGdlbmVyYXRpb24sIGksICZyb21baV0pICE9CiAJCQkgICAgUkNPREVfQ09NUExFVEUpCiAJCQkJZ290byBvdXQ7Ci0JCQlpZiAoKGtleSA+PiAzMCkgPT0gMyAmJiAocm9tW2ldID4+IDMwKSA+IDEgJiYKLQkJCSAgICBzcCA8IFJFQURfQklCX1NUQUNLX1NJWkUpCi0JCQkJc3RhY2tbc3ArK10gPSBpICsgcm9tW2ldOwotCQkJaSsrOworCisJCQlpZiAoKGtleSA+PiAzMCkgIT0gMyB8fCAocm9tW2ldID4+IDMwKSA8IDIpCisJCQkJY29udGludWU7CisJCQkvKgorCQkJICogT2Zmc2V0IHBvaW50cyBvdXRzaWRlIHRoZSBST00uICBNYXkgYmUgYSBmaXJtd2FyZQorCQkJICogYnVnIG9yIGFuIEV4dGVuZGVkIFJPTSBlbnRyeSAoSUVFRSAxMjEyLTIwMDEgY2xhdXNlCisJCQkgKiA3LjcuMTgpLiAgU2ltcGx5IG92ZXJ3cml0ZSB0aGlzIHBvaW50ZXIgaGVyZSBieSBhCisJCQkgKiBmYWtlIGltbWVkaWF0ZSBlbnRyeSBzbyB0aGF0IGxhdGVyIGl0ZXJhdG9ycyBvdmVyCisJCQkgKiB0aGUgUk9NIGRvbid0IGhhdmUgdG8gY2hlY2sgb2Zmc2V0cyBhbGwgdGhlIHRpbWUuCisJCQkgKi8KKwkJCWlmIChpICsgKHJvbVtpXSAmIDB4ZmZmZmZmKSA+PSBNQVhfQ09ORklHX1JPTV9TSVpFKSB7CisJCQkJZndfZXJyb3IoInNraXBwZWQgdW5zdXBwb3J0ZWQgUk9NIGVudHJ5ICV4IGF0ICVsbHhcbiIsCisJCQkJCSByb21baV0sCisJCQkJCSBpICogNCB8IENTUl9SRUdJU1RFUl9CQVNFIHwgQ1NSX0NPTkZJR19ST00pOworCQkJCXJvbVtpXSA9IDA7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzdGFja1tzcCsrXSA9IGkgKyByb21baV07CiAJCX0KIAkJaWYgKGxlbmd0aCA8IGkpCiAJCQlsZW5ndGggPSBpOwpAQCAtNzYyLDkgKzgyNyw5IEBACiAJc3RydWN0IGZ3X2RyaXZlciAqZHJpdmVyID0gKHN0cnVjdCBmd19kcml2ZXIgKilkZXYtPmRyaXZlcjsKIAogCWlmIChpc19md191bml0KGRldikgJiYgZHJpdmVyICE9IE5VTEwgJiYgZHJpdmVyLT51cGRhdGUgIT0gTlVMTCkgewotCQlkb3duKCZkZXYtPnNlbSk7CisJCWRldmljZV9sb2NrKGRldik7CiAJCWRyaXZlci0+dXBkYXRlKHVuaXQpOwotCQl1cCgmZGV2LT5zZW0pOworCQlkZXZpY2VfdW5sb2NrKGRldik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC05MDUsNyArOTcwLDcgQEAKIAkgKiBkZXZpY2UuCiAJICovCiAKLQlpZiAocmVhZF9idXNfaW5mb19ibG9jayhkZXZpY2UsIGRldmljZS0+Z2VuZXJhdGlvbikgPCAwKSB7CisJaWYgKHJlYWRfY29uZmlnX3JvbShkZXZpY2UsIGRldmljZS0+Z2VuZXJhdGlvbikgPCAwKSB7CiAJCWlmIChkZXZpY2UtPmNvbmZpZ19yb21fcmV0cmllcyA8IE1BWF9SRVRSSUVTICYmCiAJCSAgICBhdG9taWNfcmVhZCgmZGV2aWNlLT5zdGF0ZSkgPT0gRldfREVWSUNFX0lOSVRJQUxJWklORykgewogCQkJZGV2aWNlLT5jb25maWdfcm9tX3JldHJpZXMrKzsKQEAgLTEwMjIsNyArMTA4Nyw3IEBACiB9OwogCiAvKiBSZXJlYWQgYW5kIGNvbXBhcmUgYnVzIGluZm8gYmxvY2sgYW5kIGhlYWRlciBvZiByb290IGRpcmVjdG9yeSAqLwotc3RhdGljIGludCByZXJlYWRfYnVzX2luZm9fYmxvY2soc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlLCBpbnQgZ2VuZXJhdGlvbikKK3N0YXRpYyBpbnQgcmVyZWFkX2NvbmZpZ19yb20oc3RydWN0IGZ3X2RldmljZSAqZGV2aWNlLCBpbnQgZ2VuZXJhdGlvbikKIHsKIAl1MzIgcTsKIAlpbnQgaTsKQEAgLTEwNDgsNyArMTExMyw3IEBACiAJc3RydWN0IGZ3X2NhcmQgKmNhcmQgPSBkZXZpY2UtPmNhcmQ7CiAJaW50IG5vZGVfaWQgPSBkZXZpY2UtPm5vZGVfaWQ7CiAKLQlzd2l0Y2ggKHJlcmVhZF9idXNfaW5mb19ibG9jayhkZXZpY2UsIGRldmljZS0+Z2VuZXJhdGlvbikpIHsKKwlzd2l0Y2ggKHJlcmVhZF9jb25maWdfcm9tKGRldmljZSwgZGV2aWNlLT5nZW5lcmF0aW9uKSkgewogCWNhc2UgUkVSRUFEX0JJQl9FUlJPUjoKIAkJaWYgKGRldmljZS0+Y29uZmlnX3JvbV9yZXRyaWVzIDwgTUFYX1JFVFJJRVMgLyAyICYmCiAJCSAgICBhdG9taWNfcmVhZCgmZGV2aWNlLT5zdGF0ZSkgPT0gRldfREVWSUNFX0lOSVRJQUxJWklORykgewpAQCAtMTA4Miw3ICsxMTQ3LDcgQEAKIAkgKi8KIAlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmRldmljZS0+ZGV2aWNlLCBOVUxMLCBzaHV0ZG93bl91bml0KTsKIAotCWlmIChyZWFkX2J1c19pbmZvX2Jsb2NrKGRldmljZSwgZGV2aWNlLT5nZW5lcmF0aW9uKSA8IDApIHsKKwlpZiAocmVhZF9jb25maWdfcm9tKGRldmljZSwgZGV2aWNlLT5nZW5lcmF0aW9uKSA8IDApIHsKIAkJaWYgKGRldmljZS0+Y29uZmlnX3JvbV9yZXRyaWVzIDwgTUFYX1JFVFJJRVMgJiYKIAkJICAgIGF0b21pY19yZWFkKCZkZXZpY2UtPnN0YXRlKSA9PSBGV19ERVZJQ0VfSU5JVElBTElaSU5HKSB7CiAJCQlkZXZpY2UtPmNvbmZpZ19yb21fcmV0cmllcysrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9jb3JlLXRyYW5zYWN0aW9uLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtdHJhbnNhY3Rpb24uYwppbmRleCA0OTU4NDllLi42NzNiMDNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtdHJhbnNhY3Rpb24uYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUtdHJhbnNhY3Rpb24uYwpAQCAtOTIxLDIzICs5MjEsMTUgQEAKIAkJdm9pZCAqcGF5bG9hZCwgc2l6ZV90IGxlbmd0aCwgdm9pZCAqY2FsbGJhY2tfZGF0YSkKIHsKIAlpbnQgcmVnID0gb2Zmc2V0ICYgfkNTUl9SRUdJU1RFUl9CQVNFOwotCXVuc2lnbmVkIGxvbmcgbG9uZyBidXNfdGltZTsKIAlfX2JlMzIgKmRhdGEgPSBwYXlsb2FkOwogCWludCByY29kZSA9IFJDT0RFX0NPTVBMRVRFOwogCiAJc3dpdGNoIChyZWcpIHsKIAljYXNlIENTUl9DWUNMRV9USU1FOgotCWNhc2UgQ1NSX0JVU19USU1FOgotCQlpZiAoIVRDT0RFX0lTX1JFQURfUkVRVUVTVCh0Y29kZSkgfHwgbGVuZ3RoICE9IDQpIHsKLQkJCXJjb2RlID0gUkNPREVfVFlQRV9FUlJPUjsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJYnVzX3RpbWUgPSBjYXJkLT5kcml2ZXItPmdldF9idXNfdGltZShjYXJkKTsKLQkJaWYgKHJlZyA9PSBDU1JfQ1lDTEVfVElNRSkKLQkJCSpkYXRhID0gY3B1X3RvX2JlMzIoYnVzX3RpbWUpOworCQlpZiAoVENPREVfSVNfUkVBRF9SRVFVRVNUKHRjb2RlKSAmJiBsZW5ndGggPT0gNCkKKwkJCSpkYXRhID0gY3B1X3RvX2JlMzIoY2FyZC0+ZHJpdmVyLT5nZXRfY3ljbGVfdGltZShjYXJkKSk7CiAJCWVsc2UKLQkJCSpkYXRhID0gY3B1X3RvX2JlMzIoYnVzX3RpbWUgPj4gMjUpOworCQkJcmNvZGUgPSBSQ09ERV9UWVBFX0VSUk9SOwogCQlicmVhazsKIAogCWNhc2UgQ1NSX0JST0FEQ0FTVF9DSEFOTkVMOgpAQCAtOTY4LDYgKzk2MCw5IEBACiAJY2FzZSBDU1JfQlVTWV9USU1FT1VUOgogCQkvKiBGSVhNRTogSW1wbGVtZW50IHRoaXMuICovCiAKKwljYXNlIENTUl9CVVNfVElNRToKKwkJLyogVXNlbGVzcyB3aXRob3V0IGluaXRpYWxpemF0aW9uIGJ5IHRoZSBidXMgbWFuYWdlci4gKi8KKwogCWRlZmF1bHQ6CiAJCXJjb2RlID0gUkNPREVfQUREUkVTU19FUlJPUjsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL2NvcmUuaCBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS5oCmluZGV4IGVkM2IxYTcuLmZiMDMyMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvY29yZS5oCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvY29yZS5oCkBAIC03MCw3ICs3MCw3IEBACiAJaW50ICgqZW5hYmxlX3BoeXNfZG1hKShzdHJ1Y3QgZndfY2FyZCAqY2FyZCwKIAkJCSAgICAgICBpbnQgbm9kZV9pZCwgaW50IGdlbmVyYXRpb24pOwogCi0JdTY0ICgqZ2V0X2J1c190aW1lKShzdHJ1Y3QgZndfY2FyZCAqY2FyZCk7CisJdTMyICgqZ2V0X2N5Y2xlX3RpbWUpKHN0cnVjdCBmd19jYXJkICpjYXJkKTsKIAogCXN0cnVjdCBmd19pc29fY29udGV4dCAqCiAJKCphbGxvY2F0ZV9pc29fY29udGV4dCkoc3RydWN0IGZ3X2NhcmQgKmNhcmQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZpcmV3aXJlL29oY2kuYyBiL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCmluZGV4IDQzZWJmMzMuLjc1ZGM2OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCisrKyBiL2RyaXZlcnMvZmlyZXdpcmUvb2hjaS5jCkBAIC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KIAotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CkBAIC03MywyMCArNzIsNiBAQAogCV9fbGUxNiB0cmFuc2Zlcl9zdGF0dXM7CiB9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTYpKSk7CiAKLXN0cnVjdCBkYl9kZXNjcmlwdG9yIHsKLQlfX2xlMTYgZmlyc3Rfc2l6ZTsKLQlfX2xlMTYgY29udHJvbDsKLQlfX2xlMTYgc2Vjb25kX3JlcV9jb3VudDsKLQlfX2xlMTYgZmlyc3RfcmVxX2NvdW50OwotCV9fbGUzMiBicmFuY2hfYWRkcmVzczsKLQlfX2xlMTYgc2Vjb25kX3Jlc19jb3VudDsKLQlfX2xlMTYgZmlyc3RfcmVzX2NvdW50OwotCV9fbGUzMiByZXNlcnZlZDA7Ci0JX19sZTMyIGZpcnN0X2J1ZmZlcjsKLQlfX2xlMzIgc2Vjb25kX2J1ZmZlcjsKLQlfX2xlMzIgcmVzZXJ2ZWQxOwotfSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDE2KSkpOwotCiAjZGVmaW5lIENPTlRST0xfU0VUKHJlZ3MpCShyZWdzKQogI2RlZmluZSBDT05UUk9MX0NMRUFSKHJlZ3MpCSgocmVncykgKyA0KQogI2RlZmluZSBDT01NQU5EX1BUUihyZWdzKQkoKHJlZ3MpICsgMTIpCkBAIC0xODEsMzEgKzE2NiwxNiBAQAogCXN0cnVjdCBmd19jYXJkIGNhcmQ7CiAKIAlfX2lvbWVtIGNoYXIgKnJlZ2lzdGVyczsKLQlkbWFfYWRkcl90IHNlbGZfaWRfYnVzOwotCV9fbGUzMiAqc2VsZl9pZF9jcHU7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IGJ1c19yZXNldF90YXNrbGV0OwogCWludCBub2RlX2lkOwogCWludCBnZW5lcmF0aW9uOwogCWludCByZXF1ZXN0X2dlbmVyYXRpb247CS8qIGZvciB0aW1lc3RhbXBpbmcgaW5jb21pbmcgcmVxdWVzdHMgKi8KLQlhdG9taWNfdCBidXNfc2Vjb25kczsKLQotCWJvb2wgdXNlX2R1YWxidWZmZXI7Ci0JYm9vbCBvbGRfdW5pbm9ydGg7Ci0JYm9vbCBidXNfcmVzZXRfcGFja2V0X3F1aXJrOworCXVuc2lnbmVkIHF1aXJrczsKIAogCS8qCiAJICogU3BpbmxvY2sgZm9yIGFjY2Vzc2luZyBmd19vaGNpIGRhdGEuICBOZXZlciBjYWxsIG91dCBvZgogCSAqIHRoaXMgZHJpdmVyIHdpdGggdGhpcyBsb2NrIGhlbGQuCiAJICovCiAJc3BpbmxvY2tfdCBsb2NrOwotCXUzMiBzZWxmX2lkX2J1ZmZlcls1MTJdOwotCi0JLyogQ29uZmlnIHJvbSBidWZmZXJzICovCi0JX19iZTMyICpjb25maWdfcm9tOwotCWRtYV9hZGRyX3QgY29uZmlnX3JvbV9idXM7Ci0JX19iZTMyICpuZXh0X2NvbmZpZ19yb207Ci0JZG1hX2FkZHJfdCBuZXh0X2NvbmZpZ19yb21fYnVzOwotCV9fYmUzMiBuZXh0X2hlYWRlcjsKIAogCXN0cnVjdCBhcl9jb250ZXh0IGFyX3JlcXVlc3RfY3R4OwogCXN0cnVjdCBhcl9jb250ZXh0IGFyX3Jlc3BvbnNlX2N0eDsKQEAgLTIxNyw2ICsxODcsMTggQEAKIAl1NjQgaXJfY29udGV4dF9jaGFubmVsczsKIAl1MzIgaXJfY29udGV4dF9tYXNrOwogCXN0cnVjdCBpc29fY29udGV4dCAqaXJfY29udGV4dF9saXN0OworCisJX19iZTMyICAgICpjb25maWdfcm9tOworCWRtYV9hZGRyX3QgY29uZmlnX3JvbV9idXM7CisJX19iZTMyICAgICpuZXh0X2NvbmZpZ19yb207CisJZG1hX2FkZHJfdCBuZXh0X2NvbmZpZ19yb21fYnVzOworCV9fYmUzMiAgICAgbmV4dF9oZWFkZXI7CisKKwlfX2xlMzIgICAgKnNlbGZfaWRfY3B1OworCWRtYV9hZGRyX3Qgc2VsZl9pZF9idXM7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IGJ1c19yZXNldF90YXNrbGV0OworCisJdTMyIHNlbGZfaWRfYnVmZmVyWzUxMl07CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBmd19vaGNpICpmd19vaGNpKHN0cnVjdCBmd19jYXJkICpjYXJkKQpAQCAtMjQ5LDYgKzIzMSwzMCBAQAogCiBzdGF0aWMgY2hhciBvaGNpX2RyaXZlcl9uYW1lW10gPSBLQlVJTERfTU9ETkFNRTsKIAorI2RlZmluZSBRVUlSS19DWUNMRV9USU1FUgkJMQorI2RlZmluZSBRVUlSS19SRVNFVF9QQUNLRVQJCTIKKyNkZWZpbmUgUVVJUktfQkVfSEVBREVSUwkJNAorCisvKiBJbiBjYXNlIG9mIG11bHRpcGxlIG1hdGNoZXMgaW4gb2hjaV9xdWlya3NbXSwgb25seSB0aGUgZmlyc3Qgb25lIGlzIHVzZWQuICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCB2ZW5kb3IsIGRldmljZSwgZmxhZ3M7Cit9IG9oY2lfcXVpcmtzW10gPSB7CisJe1BDSV9WRU5ET1JfSURfVEksCVBDSV9BTllfSUQsCVFVSVJLX1JFU0VUX1BBQ0tFVH0sCisJe1BDSV9WRU5ET1JfSURfQUwsCVBDSV9BTllfSUQsCVFVSVJLX0NZQ0xFX1RJTUVSfSwKKwl7UENJX1ZFTkRPUl9JRF9ORUMsCVBDSV9BTllfSUQsCVFVSVJLX0NZQ0xFX1RJTUVSfSwKKwl7UENJX1ZFTkRPUl9JRF9WSUEsCVBDSV9BTllfSUQsCVFVSVJLX0NZQ0xFX1RJTUVSfSwKKwl7UENJX1ZFTkRPUl9JRF9BUFBMRSwJUENJX0RFVklDRV9JRF9BUFBMRV9VTklfTl9GVywgUVVJUktfQkVfSEVBREVSU30sCit9OworCisvKiBUaGlzIG92ZXJyaWRlcyBhbnl0aGluZyB0aGF0IHdhcyBmb3VuZCBpbiBvaGNpX3F1aXJrc1tdLiAqLworc3RhdGljIGludCBwYXJhbV9xdWlya3M7Cittb2R1bGVfcGFyYW1fbmFtZWQocXVpcmtzLCBwYXJhbV9xdWlya3MsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHF1aXJrcywgIkNoaXAgcXVpcmtzIChkZWZhdWx0ID0gMCIKKwkiLCBub25hdG9taWMgY3ljbGUgdGltZXIgPSAiCV9fc3RyaW5naWZ5KFFVSVJLX0NZQ0xFX1RJTUVSKQorCSIsIHJlc2V0IHBhY2tldCBnZW5lcmF0aW9uID0gIglfX3N0cmluZ2lmeShRVUlSS19SRVNFVF9QQUNLRVQpCisJIiwgQVIvc2VsZklEIGVuZGlhbmVzcyA9ICIJX19zdHJpbmdpZnkoUVVJUktfQkVfSEVBREVSUykKKwkiKSIpOworCiAjaWZkZWYgQ09ORklHX0ZJUkVXSVJFX09IQ0lfREVCVUcKIAogI2RlZmluZSBPSENJX1BBUkFNX0RFQlVHX0FUX0FSCQkxCkBAIC0yNzUsNyArMjgxLDcgQEAKIAkgICAgIShldnQgJiBPSENJMTM5NF9idXNSZXNldCkpCiAJCXJldHVybjsKIAotCWZ3X25vdGlmeSgiSVJRICUwOHglcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzXG4iLCBldnQsCisJZndfbm90aWZ5KCJJUlEgJTA4eCVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzXG4iLCBldnQsCiAJICAgIGV2dCAmIE9IQ0kxMzk0X3NlbGZJRENvbXBsZXRlCT8gIiBzZWxmSUQiCQk6ICIiLAogCSAgICBldnQgJiBPSENJMTM5NF9SUVBrdAkJPyAiIEFSX3JlcSIJCTogIiIsCiAJICAgIGV2dCAmIE9IQ0kxMzk0X1JTUGt0CQk/ICIgQVJfcmVzcCIJCTogIiIsCkBAIC0yODUsNyArMjkxLDYgQEAKIAkgICAgZXZ0ICYgT0hDSTEzOTRfaXNvY2hUeAkJPyAiIElUIgkJCTogIiIsCiAJICAgIGV2dCAmIE9IQ0kxMzk0X3Bvc3RlZFdyaXRlRXJyCT8gIiBwb3N0ZWRXcml0ZUVyciIJOiAiIiwKIAkgICAgZXZ0ICYgT0hDSTEzOTRfY3ljbGVUb29Mb25nCQk/ICIgY3ljbGVUb29Mb25nIgk6ICIiLAotCSAgICBldnQgJiBPSENJMTM5NF9jeWNsZTY0U2Vjb25kcwk/ICIgY3ljbGU2NFNlY29uZHMiCTogIiIsCiAJICAgIGV2dCAmIE9IQ0kxMzk0X2N5Y2xlSW5jb25zaXN0ZW50CT8gIiBjeWNsZUluY29uc2lzdGVudCIJOiAiIiwKIAkgICAgZXZ0ICYgT0hDSTEzOTRfcmVnQWNjZXNzRmFpbAk/ICIgcmVnQWNjZXNzRmFpbCIJOiAiIiwKIAkgICAgZXZ0ICYgT0hDSTEzOTRfYnVzUmVzZXQJCT8gIiBidXNSZXNldCIJCTogIiIsCkBAIC0yOTMsOCArMjk4LDcgQEAKIAkJICAgIE9IQ0kxMzk0X1JTUGt0IHwgT0hDSTEzOTRfcmVxVHhDb21wbGV0ZSB8CiAJCSAgICBPSENJMTM5NF9yZXNwVHhDb21wbGV0ZSB8IE9IQ0kxMzk0X2lzb2NoUnggfAogCQkgICAgT0hDSTEzOTRfaXNvY2hUeCB8IE9IQ0kxMzk0X3Bvc3RlZFdyaXRlRXJyIHwKLQkJICAgIE9IQ0kxMzk0X2N5Y2xlVG9vTG9uZyB8IE9IQ0kxMzk0X2N5Y2xlNjRTZWNvbmRzIHwKLQkJICAgIE9IQ0kxMzk0X2N5Y2xlSW5jb25zaXN0ZW50IHwKKwkJICAgIE9IQ0kxMzk0X2N5Y2xlVG9vTG9uZyB8IE9IQ0kxMzk0X2N5Y2xlSW5jb25zaXN0ZW50IHwKIAkJICAgIE9IQ0kxMzk0X3JlZ0FjY2Vzc0ZhaWwgfCBPSENJMTM5NF9idXNSZXNldCkKIAkJCQkJCT8gIiA/IgkJCTogIiIpOwogfQpAQCAtNTI0LDcgKzUyOCw3IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19QUENfUE1BQykgJiYgZGVmaW5lZChDT05GSUdfUFBDMzIpCiAjZGVmaW5lIGNvbmRfbGUzMl90b19jcHUodikgXAotCShvaGNpLT5vbGRfdW5pbm9ydGggPyAoX19mb3JjZSBfX3UzMikodikgOiBsZTMyX3RvX2NwdSh2KSkKKwkob2hjaS0+cXVpcmtzICYgUVVJUktfQkVfSEVBREVSUyA/IChfX2ZvcmNlIF9fdTMyKSh2KSA6IGxlMzJfdG9fY3B1KHYpKQogI2Vsc2UKICNkZWZpbmUgY29uZF9sZTMyX3RvX2NwdSh2KSBsZTMyX3RvX2NwdSh2KQogI2VuZGlmCkBAIC02MDUsNyArNjA5LDcgQEAKIAkgKiBhdCBhIHNsaWdodGx5IGluY29ycmVjdCB0aW1lIChpbiBidXNfcmVzZXRfdGFza2xldCkuCiAJICovCiAJaWYgKGV2dCA9PSBPSENJMTM5NF9ldnRfYnVzX3Jlc2V0KSB7Ci0JCWlmICghb2hjaS0+YnVzX3Jlc2V0X3BhY2tldF9xdWlyaykKKwkJaWYgKCEob2hjaS0+cXVpcmtzICYgUVVJUktfUkVTRVRfUEFDS0VUKSkKIAkJCW9oY2ktPnJlcXVlc3RfZ2VuZXJhdGlvbiA9IChwLmhlYWRlclsyXSA+PiAxNikgJiAweGZmOwogCX0gZWxzZSBpZiAoY3R4ID09ICZvaGNpLT5hcl9yZXF1ZXN0X2N0eCkgewogCQlmd19jb3JlX2hhbmRsZV9yZXF1ZXN0KCZvaGNpLT5jYXJkLCAmcCk7CkBAIC0xMzI5LDcgKzEzMzMsNyBAQAogCWNvbnRleHRfc3RvcCgmb2hjaS0+YXRfcmVzcG9uc2VfY3R4KTsKIAlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSW50RXZlbnRDbGVhciwgT0hDSTEzOTRfYnVzUmVzZXQpOwogCi0JaWYgKG9oY2ktPmJ1c19yZXNldF9wYWNrZXRfcXVpcmspCisJaWYgKG9oY2ktPnF1aXJrcyAmIFFVSVJLX1JFU0VUX1BBQ0tFVCkKIAkJb2hjaS0+cmVxdWVzdF9nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjsKIAogCS8qCkBAIC0xMzg0LDcgKzEzODgsNyBAQAogc3RhdGljIGlycXJldHVybl90IGlycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGZ3X29oY2kgKm9oY2kgPSBkYXRhOwotCXUzMiBldmVudCwgaXNvX2V2ZW50LCBjeWNsZV90aW1lOworCXUzMiBldmVudCwgaXNvX2V2ZW50OwogCWludCBpOwogCiAJZXZlbnQgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9JbnRFdmVudENsZWFyKTsKQEAgLTE0NTQsMTIgKzE0NTgsNiBAQAogCQkJZndfbm90aWZ5KCJpc29jaHJvbm91cyBjeWNsZSBpbmNvbnNpc3RlbnRcbiIpOwogCX0KIAotCWlmIChldmVudCAmIE9IQ0kxMzk0X2N5Y2xlNjRTZWNvbmRzKSB7Ci0JCWN5Y2xlX3RpbWUgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9Jc29jaHJvbm91c0N5Y2xlVGltZXIpOwotCQlpZiAoKGN5Y2xlX3RpbWUgJiAweDgwMDAwMDAwKSA9PSAwKQotCQkJYXRvbWljX2luYygmb2hjaS0+YnVzX3NlY29uZHMpOwotCX0KLQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMTU1Myw4ICsxNTUxLDcgQEAKIAkJICBPSENJMTM5NF9yZXFUeENvbXBsZXRlIHwgT0hDSTEzOTRfcmVzcFR4Q29tcGxldGUgfAogCQkgIE9IQ0kxMzk0X2lzb2NoUnggfCBPSENJMTM5NF9pc29jaFR4IHwKIAkJICBPSENJMTM5NF9wb3N0ZWRXcml0ZUVyciB8IE9IQ0kxMzk0X2N5Y2xlVG9vTG9uZyB8Ci0JCSAgT0hDSTEzOTRfY3ljbGVJbmNvbnNpc3RlbnQgfAotCQkgIE9IQ0kxMzk0X2N5Y2xlNjRTZWNvbmRzIHwgT0hDSTEzOTRfcmVnQWNjZXNzRmFpbCB8CisJCSAgT0hDSTEzOTRfY3ljbGVJbmNvbnNpc3RlbnQgfCBPSENJMTM5NF9yZWdBY2Nlc3NGYWlsIHwKIAkJICBPSENJMTM5NF9tYXN0ZXJJbnRFbmFibGUpOwogCWlmIChwYXJhbV9kZWJ1ZyAmIE9IQ0lfUEFSQU1fREVCVUdfQlVTUkVTRVRTKQogCQlyZWdfd3JpdGUob2hjaSwgT0hDSTEzOTRfSW50TWFza1NldCwgT0hDSTEzOTRfYnVzUmVzZXQpOwpAQCAtMTc5NCwxNiArMTc5MSw2MSBAQAogI2VuZGlmIC8qIENPTkZJR19GSVJFV0lSRV9PSENJX1JFTU9URV9ETUEgKi8KIH0KIAotc3RhdGljIHU2NCBvaGNpX2dldF9idXNfdGltZShzdHJ1Y3QgZndfY2FyZCAqY2FyZCkKK3N0YXRpYyB1MzIgY3ljbGVfdGltZXJfdGlja3ModTMyIGN5Y2xlX3RpbWVyKQoreworCXUzMiB0aWNrczsKKworCXRpY2tzID0gY3ljbGVfdGltZXIgJiAweGZmZjsKKwl0aWNrcyArPSAzMDcyICogKChjeWNsZV90aW1lciA+PiAxMikgJiAweDFmZmYpOworCXRpY2tzICs9ICgzMDcyICogODAwMCkgKiAoY3ljbGVfdGltZXIgPj4gMjUpOworCisJcmV0dXJuIHRpY2tzOworfQorCisvKgorICogU29tZSBjb250cm9sbGVycyBleGhpYml0IG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgYnVncyB3aGVuIHVwZGF0aW5nIHRoZQorICogaXNvIGN5Y2xlIHRpbWVyIHJlZ2lzdGVyOgorICogIC0gV2hlbiB0aGUgbG93ZXN0IHNpeCBiaXRzIGFyZSB3cmFwcGluZyBhcm91bmQgdG8gemVybywgYSByZWFkIHRoYXQgaGFwcGVucworICogICAgYXQgdGhlIHNhbWUgdGltZSB3aWxsIHJldHVybiBnYXJiYWdlIGluIHRoZSBsb3dlc3QgdGVuIGJpdHMuCisgKiAgLSBXaGVuIHRoZSBjeWNsZU9mZnNldCBmaWVsZCB3cmFwcyBhcm91bmQgdG8gemVybywgdGhlIGN5Y2xlQ291bnQgZmllbGQgaXMKKyAqICAgIG5vdCBpbmNyZW1lbnRlZCBmb3IgYWJvdXQgNjAgbnMuCisgKiAgLSBPY2Nhc2lvbmFsbHksIHRoZSBlbnRpcmUgcmVnaXN0ZXIgcmVhZHMgemVyby4KKyAqCisgKiBUbyBjYXRjaCB0aGVzZSwgd2UgcmVhZCB0aGUgcmVnaXN0ZXIgdGhyZWUgdGltZXMgYW5kIGVuc3VyZSB0aGF0IHRoZQorICogZGlmZmVyZW5jZSBiZXR3ZWVuIGVhY2ggdHdvIGNvbnNlY3V0aXZlIHJlYWRzIGlzIGFwcHJveGltYXRlbHkgdGhlIHNhbWUsIGkuZS4KKyAqIGxlc3MgdGhhbiB0d2ljZSB0aGUgb3RoZXIuICBGdXJ0aGVybW9yZSwgYW55IG5lZ2F0aXZlIGRpZmZlcmVuY2UgaW5kaWNhdGVzIGFuCisgKiBlcnJvci4gIChBIFBDSSByZWFkIHNob3VsZCB0YWtlIGF0IGxlYXN0IDIwIHRpY2tzIG9mIHRoZSAyNC41NzYgTUh6IHRpbWVyIHRvCisgKiBleGVjdXRlLCBzbyB3ZSBoYXZlIGVub3VnaCBwcmVjaXNpb24gdG8gY29tcHV0ZSB0aGUgcmF0aW8gb2YgdGhlIGRpZmZlcmVuY2VzLikKKyAqLworc3RhdGljIHUzMiBvaGNpX2dldF9jeWNsZV90aW1lKHN0cnVjdCBmd19jYXJkICpjYXJkKQogewogCXN0cnVjdCBmd19vaGNpICpvaGNpID0gZndfb2hjaShjYXJkKTsKLQl1MzIgY3ljbGVfdGltZTsKLQl1NjQgYnVzX3RpbWU7CisJdTMyIGMwLCBjMSwgYzI7CisJdTMyIHQwLCB0MSwgdDI7CisJczMyIGRpZmYwMSwgZGlmZjEyOworCWludCBpOwogCi0JY3ljbGVfdGltZSA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0lzb2Nocm9ub3VzQ3ljbGVUaW1lcik7Ci0JYnVzX3RpbWUgPSAoKHU2NClhdG9taWNfcmVhZCgmb2hjaS0+YnVzX3NlY29uZHMpIDw8IDMyKSB8IGN5Y2xlX3RpbWU7CisJYzIgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9Jc29jaHJvbm91c0N5Y2xlVGltZXIpOwogCi0JcmV0dXJuIGJ1c190aW1lOworCWlmIChvaGNpLT5xdWlya3MgJiBRVUlSS19DWUNMRV9USU1FUikgeworCQlpID0gMDsKKwkJYzEgPSBjMjsKKwkJYzIgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9Jc29jaHJvbm91c0N5Y2xlVGltZXIpOworCQlkbyB7CisJCQljMCA9IGMxOworCQkJYzEgPSBjMjsKKwkJCWMyID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfSXNvY2hyb25vdXNDeWNsZVRpbWVyKTsKKwkJCXQwID0gY3ljbGVfdGltZXJfdGlja3MoYzApOworCQkJdDEgPSBjeWNsZV90aW1lcl90aWNrcyhjMSk7CisJCQl0MiA9IGN5Y2xlX3RpbWVyX3RpY2tzKGMyKTsKKwkJCWRpZmYwMSA9IHQxIC0gdDA7CisJCQlkaWZmMTIgPSB0MiAtIHQxOworCQl9IHdoaWxlICgoZGlmZjAxIDw9IDAgfHwgZGlmZjEyIDw9IDAgfHwKKwkJCSAgZGlmZjAxIC8gZGlmZjEyID49IDIgfHwgZGlmZjEyIC8gZGlmZjAxID49IDIpCisJCQkgJiYgaSsrIDwgMjApOworCX0KKworCXJldHVybiBjMjsKIH0KIAogc3RhdGljIHZvaWQgY29weV9pc29faGVhZGVycyhzdHJ1Y3QgaXNvX2NvbnRleHQgKmN0eCwgdm9pZCAqcCkKQEAgLTE4MjgsNTIgKzE4NzAsNiBAQAogCWN0eC0+aGVhZGVyX2xlbmd0aCArPSBjdHgtPmJhc2UuaGVhZGVyX3NpemU7CiB9CiAKLXN0YXRpYyBpbnQgaGFuZGxlX2lyX2R1YWxidWZmZXJfcGFja2V0KHN0cnVjdCBjb250ZXh0ICpjb250ZXh0LAotCQkJCSAgICAgICBzdHJ1Y3QgZGVzY3JpcHRvciAqZCwKLQkJCQkgICAgICAgc3RydWN0IGRlc2NyaXB0b3IgKmxhc3QpCi17Ci0Jc3RydWN0IGlzb19jb250ZXh0ICpjdHggPQotCQljb250YWluZXJfb2YoY29udGV4dCwgc3RydWN0IGlzb19jb250ZXh0LCBjb250ZXh0KTsKLQlzdHJ1Y3QgZGJfZGVzY3JpcHRvciAqZGIgPSAoc3RydWN0IGRiX2Rlc2NyaXB0b3IgKikgZDsKLQlfX2xlMzIgKmlyX2hlYWRlcjsKLQlzaXplX3QgaGVhZGVyX2xlbmd0aDsKLQl2b2lkICpwLCAqZW5kOwotCi0JaWYgKGRiLT5maXJzdF9yZXNfY291bnQgIT0gMCAmJiBkYi0+c2Vjb25kX3Jlc19jb3VudCAhPSAwKSB7Ci0JCWlmIChjdHgtPmV4Y2Vzc19ieXRlcyA8PSBsZTE2X3RvX2NwdShkYi0+c2Vjb25kX3JlcV9jb3VudCkpIHsKLQkJCS8qIFRoaXMgZGVzY3JpcHRvciBpc24ndCBkb25lIHlldCwgc3RvcCBpdGVyYXRpb24uICovCi0JCQlyZXR1cm4gMDsKLQkJfQotCQljdHgtPmV4Y2Vzc19ieXRlcyAtPSBsZTE2X3RvX2NwdShkYi0+c2Vjb25kX3JlcV9jb3VudCk7Ci0JfQotCi0JaGVhZGVyX2xlbmd0aCA9IGxlMTZfdG9fY3B1KGRiLT5maXJzdF9yZXFfY291bnQpIC0KLQkJbGUxNl90b19jcHUoZGItPmZpcnN0X3Jlc19jb3VudCk7Ci0KLQlwID0gZGIgKyAxOwotCWVuZCA9IHAgKyBoZWFkZXJfbGVuZ3RoOwotCXdoaWxlIChwIDwgZW5kKSB7Ci0JCWNvcHlfaXNvX2hlYWRlcnMoY3R4LCBwKTsKLQkJY3R4LT5leGNlc3NfYnl0ZXMgKz0KLQkJCShsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKShwICsgNCkpID4+IDE2KSAmIDB4ZmZmZjsKLQkJcCArPSBtYXgoY3R4LT5iYXNlLmhlYWRlcl9zaXplLCAoc2l6ZV90KTgpOwotCX0KLQotCWN0eC0+ZXhjZXNzX2J5dGVzIC09IGxlMTZfdG9fY3B1KGRiLT5zZWNvbmRfcmVxX2NvdW50KSAtCi0JCWxlMTZfdG9fY3B1KGRiLT5zZWNvbmRfcmVzX2NvdW50KTsKLQotCWlmIChsZTE2X3RvX2NwdShkYi0+Y29udHJvbCkgJiBERVNDUklQVE9SX0lSUV9BTFdBWVMpIHsKLQkJaXJfaGVhZGVyID0gKF9fbGUzMiAqKSAoZGIgKyAxKTsKLQkJY3R4LT5iYXNlLmNhbGxiYWNrKCZjdHgtPmJhc2UsCi0JCQkJICAgbGUzMl90b19jcHUoaXJfaGVhZGVyWzBdKSAmIDB4ZmZmZiwKLQkJCQkgICBjdHgtPmhlYWRlcl9sZW5ndGgsIGN0eC0+aGVhZGVyLAotCQkJCSAgIGN0eC0+YmFzZS5jYWxsYmFja19kYXRhKTsKLQkJY3R4LT5oZWFkZXJfbGVuZ3RoID0gMDsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIGludCBoYW5kbGVfaXJfcGFja2V0X3Blcl9idWZmZXIoc3RydWN0IGNvbnRleHQgKmNvbnRleHQsCiAJCQkJICAgICAgIHN0cnVjdCBkZXNjcmlwdG9yICpkLAogCQkJCSAgICAgICBzdHJ1Y3QgZGVzY3JpcHRvciAqbGFzdCkKQEAgLTE5NjAsMTAgKzE5NTYsNyBAQAogCQljaGFubmVscyA9ICZvaGNpLT5pcl9jb250ZXh0X2NoYW5uZWxzOwogCQltYXNrID0gJm9oY2ktPmlyX2NvbnRleHRfbWFzazsKIAkJbGlzdCA9IG9oY2ktPmlyX2NvbnRleHRfbGlzdDsKLQkJaWYgKG9oY2ktPnVzZV9kdWFsYnVmZmVyKQotCQkJY2FsbGJhY2sgPSBoYW5kbGVfaXJfZHVhbGJ1ZmZlcl9wYWNrZXQ7Ci0JCWVsc2UKLQkJCWNhbGxiYWNrID0gaGFuZGxlX2lyX3BhY2tldF9wZXJfYnVmZmVyOworCQljYWxsYmFjayA9IGhhbmRsZV9pcl9wYWNrZXRfcGVyX2J1ZmZlcjsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmb2hjaS0+bG9jaywgZmxhZ3MpOwpAQCAtMjAyNiw4ICsyMDE5LDYgQEAKIAl9IGVsc2UgewogCQlpbmRleCA9IGN0eCAtIG9oY2ktPmlyX2NvbnRleHRfbGlzdDsKIAkJY29udHJvbCA9IElSX0NPTlRFWFRfSVNPQ0hfSEVBREVSOwotCQlpZiAob2hjaS0+dXNlX2R1YWxidWZmZXIpCi0JCQljb250cm9sIHw9IElSX0NPTlRFWFRfRFVBTF9CVUZGRVJfTU9ERTsKIAkJbWF0Y2ggPSAodGFncyA8PCAyOCkgfCAoc3luYyA8PCA4KSB8IGN0eC0+YmFzZS5jaGFubmVsOwogCQlpZiAoY3ljbGUgPj0gMCkgewogCQkJbWF0Y2ggfD0gKGN5Y2xlICYgMHgwN2ZmZikgPDwgMTI7CkBAIC0yMTg4LDkyICsyMTc5LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBvaGNpX3F1ZXVlX2lzb19yZWNlaXZlX2R1YWxidWZmZXIoc3RydWN0IGZ3X2lzb19jb250ZXh0ICpiYXNlLAotCQkJCQkgICAgIHN0cnVjdCBmd19pc29fcGFja2V0ICpwYWNrZXQsCi0JCQkJCSAgICAgc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKLQkJCQkJICAgICB1bnNpZ25lZCBsb25nIHBheWxvYWQpCi17Ci0Jc3RydWN0IGlzb19jb250ZXh0ICpjdHggPSBjb250YWluZXJfb2YoYmFzZSwgc3RydWN0IGlzb19jb250ZXh0LCBiYXNlKTsKLQlzdHJ1Y3QgZGJfZGVzY3JpcHRvciAqZGIgPSBOVUxMOwotCXN0cnVjdCBkZXNjcmlwdG9yICpkOwotCXN0cnVjdCBmd19pc29fcGFja2V0ICpwOwotCWRtYV9hZGRyX3QgZF9idXMsIHBhZ2VfYnVzOwotCXUzMiB6LCBoZWFkZXJfeiwgbGVuZ3RoLCByZXN0OwotCWludCBwYWdlLCBvZmZzZXQsIHBhY2tldF9jb3VudCwgaGVhZGVyX3NpemU7Ci0KLQkvKgotCSAqIEZJWE1FOiBDeWNsZSBsb3N0IGJlaGF2aW9yIHNob3VsZCBiZSBjb25maWd1cmFibGU6IGxvc2UKLQkgKiBwYWNrZXQsIHJldHJhbnNtaXQgb3IgdGVybWluYXRlLi4KLQkgKi8KLQotCXAgPSBwYWNrZXQ7Ci0JeiA9IDI7Ci0KLQkvKgotCSAqIFRoZSBPSENJIGNvbnRyb2xsZXIgcHV0cyB0aGUgaXNvY2hyb25vdXMgaGVhZGVyIGFuZCB0cmFpbGVyIGluIHRoZQotCSAqIGJ1ZmZlciwgc28gd2UgbmVlZCBhdCBsZWFzdCA4IGJ5dGVzLgotCSAqLwotCXBhY2tldF9jb3VudCA9IHAtPmhlYWRlcl9sZW5ndGggLyBjdHgtPmJhc2UuaGVhZGVyX3NpemU7Ci0JaGVhZGVyX3NpemUgPSBwYWNrZXRfY291bnQgKiBtYXgoY3R4LT5iYXNlLmhlYWRlcl9zaXplLCAoc2l6ZV90KTgpOwotCi0JLyogR2V0IGhlYWRlciBzaXplIGluIG51bWJlciBvZiBkZXNjcmlwdG9ycy4gKi8KLQloZWFkZXJfeiA9IERJVl9ST1VORF9VUChoZWFkZXJfc2l6ZSwgc2l6ZW9mKCpkKSk7Ci0JcGFnZSAgICAgPSBwYXlsb2FkID4+IFBBR0VfU0hJRlQ7Ci0Jb2Zmc2V0ICAgPSBwYXlsb2FkICYgflBBR0VfTUFTSzsKLQlyZXN0ICAgICA9IHAtPnBheWxvYWRfbGVuZ3RoOwotCS8qCi0JICogVGhlIGNvbnRyb2xsZXJzIEkndmUgdGVzdGVkIGhhdmUgbm90IHdvcmtlZCBjb3JyZWN0bHkgd2hlbgotCSAqIHNlY29uZF9yZXFfY291bnQgaXMgemVyby4gIFJhdGhlciB0aGFuIGRvIHNvbWV0aGluZyB3ZSBrbm93IHdvbid0Ci0JICogd29yaywgcmV0dXJuIGFuIGVycm9yCi0JICovCi0JaWYgKHJlc3QgPT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl3aGlsZSAocmVzdCA+IDApIHsKLQkJZCA9IGNvbnRleHRfZ2V0X2Rlc2NyaXB0b3JzKCZjdHgtPmNvbnRleHQsCi0JCQkJCSAgICB6ICsgaGVhZGVyX3osICZkX2J1cyk7Ci0JCWlmIChkID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlkYiA9IChzdHJ1Y3QgZGJfZGVzY3JpcHRvciAqKSBkOwotCQlkYi0+Y29udHJvbCA9IGNwdV90b19sZTE2KERFU0NSSVBUT1JfU1RBVFVTIHwKLQkJCQkJICBERVNDUklQVE9SX0JSQU5DSF9BTFdBWVMpOwotCQlkYi0+Zmlyc3Rfc2l6ZSA9Ci0JCSAgICBjcHVfdG9fbGUxNihtYXgoY3R4LT5iYXNlLmhlYWRlcl9zaXplLCAoc2l6ZV90KTgpKTsKLQkJaWYgKHAtPnNraXAgJiYgcmVzdCA9PSBwLT5wYXlsb2FkX2xlbmd0aCkgewotCQkJZGItPmNvbnRyb2wgfD0gY3B1X3RvX2xlMTYoREVTQ1JJUFRPUl9XQUlUKTsKLQkJCWRiLT5maXJzdF9yZXFfY291bnQgPSBkYi0+Zmlyc3Rfc2l6ZTsKLQkJfSBlbHNlIHsKLQkJCWRiLT5maXJzdF9yZXFfY291bnQgPSBjcHVfdG9fbGUxNihoZWFkZXJfc2l6ZSk7Ci0JCX0KLQkJZGItPmZpcnN0X3Jlc19jb3VudCA9IGRiLT5maXJzdF9yZXFfY291bnQ7Ci0JCWRiLT5maXJzdF9idWZmZXIgPSBjcHVfdG9fbGUzMihkX2J1cyArIHNpemVvZigqZGIpKTsKLQotCQlpZiAocC0+c2tpcCAmJiByZXN0ID09IHAtPnBheWxvYWRfbGVuZ3RoKQotCQkJbGVuZ3RoID0gNDsKLQkJZWxzZSBpZiAob2Zmc2V0ICsgcmVzdCA8IFBBR0VfU0laRSkKLQkJCWxlbmd0aCA9IHJlc3Q7Ci0JCWVsc2UKLQkJCWxlbmd0aCA9IFBBR0VfU0laRSAtIG9mZnNldDsKLQotCQlkYi0+c2Vjb25kX3JlcV9jb3VudCA9IGNwdV90b19sZTE2KGxlbmd0aCk7Ci0JCWRiLT5zZWNvbmRfcmVzX2NvdW50ID0gZGItPnNlY29uZF9yZXFfY291bnQ7Ci0JCXBhZ2VfYnVzID0gcGFnZV9wcml2YXRlKGJ1ZmZlci0+cGFnZXNbcGFnZV0pOwotCQlkYi0+c2Vjb25kX2J1ZmZlciA9IGNwdV90b19sZTMyKHBhZ2VfYnVzICsgb2Zmc2V0KTsKLQotCQlpZiAocC0+aW50ZXJydXB0ICYmIGxlbmd0aCA9PSByZXN0KQotCQkJZGItPmNvbnRyb2wgfD0gY3B1X3RvX2xlMTYoREVTQ1JJUFRPUl9JUlFfQUxXQVlTKTsKLQotCQljb250ZXh0X2FwcGVuZCgmY3R4LT5jb250ZXh0LCBkLCB6LCBoZWFkZXJfeik7Ci0JCW9mZnNldCA9IChvZmZzZXQgKyBsZW5ndGgpICYgflBBR0VfTUFTSzsKLQkJcmVzdCAtPSBsZW5ndGg7Ci0JCWlmIChvZmZzZXQgPT0gMCkKLQkJCXBhZ2UrKzsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBvaGNpX3F1ZXVlX2lzb19yZWNlaXZlX3BhY2tldF9wZXJfYnVmZmVyKHN0cnVjdCBmd19pc29fY29udGV4dCAqYmFzZSwKIAkJCQkJc3RydWN0IGZ3X2lzb19wYWNrZXQgKnBhY2tldCwKIAkJCQkJc3RydWN0IGZ3X2lzb19idWZmZXIgKmJ1ZmZlciwKQEAgLTIzNjQsOSArMjI2OSw2IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmN0eC0+Y29udGV4dC5vaGNpLT5sb2NrLCBmbGFncyk7CiAJaWYgKGJhc2UtPnR5cGUgPT0gRldfSVNPX0NPTlRFWFRfVFJBTlNNSVQpCiAJCXJldCA9IG9oY2lfcXVldWVfaXNvX3RyYW5zbWl0KGJhc2UsIHBhY2tldCwgYnVmZmVyLCBwYXlsb2FkKTsKLQllbHNlIGlmIChjdHgtPmNvbnRleHQub2hjaS0+dXNlX2R1YWxidWZmZXIpCi0JCXJldCA9IG9oY2lfcXVldWVfaXNvX3JlY2VpdmVfZHVhbGJ1ZmZlcihiYXNlLCBwYWNrZXQsCi0JCQkJCQkJYnVmZmVyLCBwYXlsb2FkKTsKIAllbHNlCiAJCXJldCA9IG9oY2lfcXVldWVfaXNvX3JlY2VpdmVfcGFja2V0X3Blcl9idWZmZXIoYmFzZSwgcGFja2V0LAogCQkJCQkJCWJ1ZmZlciwgcGF5bG9hZCk7CkBAIC0yMzgzLDcgKzIyODUsNyBAQAogCS5zZW5kX3Jlc3BvbnNlCQk9IG9oY2lfc2VuZF9yZXNwb25zZSwKIAkuY2FuY2VsX3BhY2tldAkJPSBvaGNpX2NhbmNlbF9wYWNrZXQsCiAJLmVuYWJsZV9waHlzX2RtYQk9IG9oY2lfZW5hYmxlX3BoeXNfZG1hLAotCS5nZXRfYnVzX3RpbWUJCT0gb2hjaV9nZXRfYnVzX3RpbWUsCisJLmdldF9jeWNsZV90aW1lCQk9IG9oY2lfZ2V0X2N5Y2xlX3RpbWUsCiAKIAkuYWxsb2NhdGVfaXNvX2NvbnRleHQJPSBvaGNpX2FsbG9jYXRlX2lzb19jb250ZXh0LAogCS5mcmVlX2lzb19jb250ZXh0CT0gb2hjaV9mcmVlX2lzb19jb250ZXh0LApAQCAtMjQyMSwxNyArMjMyMywxMyBAQAogI2RlZmluZSBvaGNpX3BtYWNfb2ZmKGRldikKICNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgKi8KIAotI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FHRVJFCQlQQ0lfVkVORE9SX0lEX0FUVAotI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FHRVJFX0ZXNjQzCTB4NTkwMQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1RTQjQzQUIyMwkweDgwMjQKLQogc3RhdGljIGludCBfX2RldmluaXQgcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlzdHJ1Y3QgZndfb2hjaSAqb2hjaTsKIAl1MzIgYnVzX29wdGlvbnMsIG1heF9yZWNlaXZlLCBsaW5rX3NwZWVkLCB2ZXJzaW9uOwogCXU2NCBndWlkOwotCWludCBlcnI7CisJaW50IGksIGVyciwgbl9pciwgbl9pdDsKIAlzaXplX3Qgc2l6ZTsKIAogCW9oY2kgPSBremFsbG9jKHNpemVvZigqb2hjaSksIEdGUF9LRVJORUwpOwpAQCAtMjQ3MiwzNiArMjM3MCwxNSBAQAogCQlnb3RvIGZhaWxfaW9tZW07CiAJfQogCi0JdmVyc2lvbiA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X1ZlcnNpb24pICYgMHgwMGZmMDBmZjsKLSNpZiAwCi0JLyogRklYTUU6IG1ha2UgaXQgYSBjb250ZXh0IG9wdGlvbiBvciByZW1vdmUgZHVhbC1idWZmZXIgbW9kZSAqLwotCW9oY2ktPnVzZV9kdWFsYnVmZmVyID0gdmVyc2lvbiA+PSBPSENJX1ZFUlNJT05fMV8xOwotI2VuZGlmCi0KLQkvKiBkdWFsLWJ1ZmZlciBtb2RlIGlzIGJyb2tlbiBpZiBtb3JlIHRoYW4gb25lIElSIGNvbnRleHQgaXMgYWN0aXZlICovCi0JaWYgKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQUdFUkUgJiYKLQkgICAgZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9BR0VSRV9GVzY0MykKLQkJb2hjaS0+dXNlX2R1YWxidWZmZXIgPSBmYWxzZTsKLQotCS8qIGR1YWwtYnVmZmVyIG1vZGUgaXMgYnJva2VuICovCi0JaWYgKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfUklDT0ggJiYKLQkgICAgZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9SSUNPSF9SNUM4MzIpCi0JCW9oY2ktPnVzZV9kdWFsYnVmZmVyID0gZmFsc2U7Ci0KLS8qIHg4Ni0zMiBjdXJyZW50bHkgZG9lc24ndCB1c2UgaGlnaG1lbSBmb3IgZG1hX2FsbG9jX2NvaGVyZW50ICovCi0jaWYgIWRlZmluZWQoQ09ORklHX1g4Nl8zMikKLQkvKiBkdWFsLWJ1ZmZlciBtb2RlIGlzIGJyb2tlbiB3aXRoIGRlc2NyaXB0b3IgYWRkcmVzc2VzIGFib3ZlIDJHICovCi0JaWYgKGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfVEkgJiYKLQkgICAgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfVElfVFNCNDNBQjIyIHx8Ci0JICAgICBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1RJX1RTQjQzQUIyMykpCi0JCW9oY2ktPnVzZV9kdWFsYnVmZmVyID0gZmFsc2U7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX1BQQ19QTUFDKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKLQlvaGNpLT5vbGRfdW5pbm9ydGggPSBkZXYtPnZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0FQUExFICYmCi0JCQkgICAgIGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfQVBQTEVfVU5JX05fRlc7Ci0jZW5kaWYKLQlvaGNpLT5idXNfcmVzZXRfcGFja2V0X3F1aXJrID0gZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9USTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShvaGNpX3F1aXJrcyk7IGkrKykKKwkJaWYgKG9oY2lfcXVpcmtzW2ldLnZlbmRvciA9PSBkZXYtPnZlbmRvciAmJgorCQkgICAgKG9oY2lfcXVpcmtzW2ldLmRldmljZSA9PSBkZXYtPmRldmljZSB8fAorCQkgICAgIG9oY2lfcXVpcmtzW2ldLmRldmljZSA9PSAodW5zaWduZWQgc2hvcnQpUENJX0FOWV9JRCkpIHsKKwkJCW9oY2ktPnF1aXJrcyA9IG9oY2lfcXVpcmtzW2ldLmZsYWdzOworCQkJYnJlYWs7CisJCX0KKwlpZiAocGFyYW1fcXVpcmtzKQorCQlvaGNpLT5xdWlya3MgPSBwYXJhbV9xdWlya3M7CiAKIAlhcl9jb250ZXh0X2luaXQoJm9oY2ktPmFyX3JlcXVlc3RfY3R4LCBvaGNpLAogCQkJT0hDSTEzOTRfQXNSZXFSY3ZDb250ZXh0Q29udHJvbFNldCk7CkBAIC0yNTE2LDE3ICsyMzkzLDE5IEBACiAJCSAgICAgT0hDSTEzOTRfQXNSc3BUckNvbnRleHRDb250cm9sU2V0LCBoYW5kbGVfYXRfcGFja2V0KTsKIAogCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29SZWN2SW50TWFza1NldCwgfjApOwotCW9oY2ktPml0X2NvbnRleHRfbWFzayA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0lzb1JlY3ZJbnRNYXNrU2V0KTsKKwlvaGNpLT5pcl9jb250ZXh0X2NoYW5uZWxzID0gfjBVTEw7CisJb2hjaS0+aXJfY29udGV4dF9tYXNrID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfSXNvUmVjdkludE1hc2tTZXQpOwogCXJlZ193cml0ZShvaGNpLCBPSENJMTM5NF9Jc29SZWN2SW50TWFza0NsZWFyLCB+MCk7Ci0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXNvX2NvbnRleHQpICogaHdlaWdodDMyKG9oY2ktPml0X2NvbnRleHRfbWFzayk7Ci0Jb2hjaS0+aXRfY29udGV4dF9saXN0ID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwluX2lyID0gaHdlaWdodDMyKG9oY2ktPmlyX2NvbnRleHRfbWFzayk7CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXNvX2NvbnRleHQpICogbl9pcjsKKwlvaGNpLT5pcl9jb250ZXh0X2xpc3QgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1htaXRJbnRNYXNrU2V0LCB+MCk7Ci0Jb2hjaS0+aXJfY29udGV4dF9jaGFubmVscyA9IH4wVUxMOwotCW9oY2ktPmlyX2NvbnRleHRfbWFzayA9IHJlZ19yZWFkKG9oY2ksIE9IQ0kxMzk0X0lzb1htaXRJbnRNYXNrU2V0KTsKKwlvaGNpLT5pdF9jb250ZXh0X21hc2sgPSByZWdfcmVhZChvaGNpLCBPSENJMTM5NF9Jc29YbWl0SW50TWFza1NldCk7CiAJcmVnX3dyaXRlKG9oY2ksIE9IQ0kxMzk0X0lzb1htaXRJbnRNYXNrQ2xlYXIsIH4wKTsKLQlzaXplID0gc2l6ZW9mKHN0cnVjdCBpc29fY29udGV4dCkgKiBod2VpZ2h0MzIob2hjaS0+aXJfY29udGV4dF9tYXNrKTsKLQlvaGNpLT5pcl9jb250ZXh0X2xpc3QgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCW5faXQgPSBod2VpZ2h0MzIob2hjaS0+aXRfY29udGV4dF9tYXNrKTsKKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBpc29fY29udGV4dCkgKiBuX2l0OworCW9oY2ktPml0X2NvbnRleHRfbGlzdCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAob2hjaS0+aXRfY29udGV4dF9saXN0ID09IE5VTEwgfHwgb2hjaS0+aXJfY29udGV4dF9saXN0ID09IE5VTEwpIHsKIAkJZXJyID0gLUVOT01FTTsKQEAgLTI1NTMsOCArMjQzMiwxMSBAQAogCWlmIChlcnIpCiAJCWdvdG8gZmFpbF9zZWxmX2lkOwogCi0JZndfbm90aWZ5KCJBZGRlZCBmdy1vaGNpIGRldmljZSAlcywgT0hDSSB2ZXJzaW9uICV4LiV4XG4iLAotCQkgIGRldl9uYW1lKCZkZXYtPmRldiksIHZlcnNpb24gPj4gMTYsIHZlcnNpb24gJiAweGZmKTsKKwl2ZXJzaW9uID0gcmVnX3JlYWQob2hjaSwgT0hDSTEzOTRfVmVyc2lvbikgJiAweDAwZmYwMGZmOworCWZ3X25vdGlmeSgiQWRkZWQgZnctb2hjaSBkZXZpY2UgJXMsIE9IQ0kgdiV4LiV4LCAiCisJCSAgIiVkIElSICsgJWQgSVQgY29udGV4dHMsIHF1aXJrcyAweCV4XG4iLAorCQkgIGRldl9uYW1lKCZkZXYtPmRldiksIHZlcnNpb24gPj4gMTYsIHZlcnNpb24gJiAweGZmLAorCQkgIG5faXIsIG5faXQsIG9oY2ktPnF1aXJrcyk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMjY2Miw3ICsyNTQ0LDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX3RhYmxlW10gPSB7CiAJeyBQQ0lfREVWSUNFX0NMQVNTKFBDSV9DTEFTU19TRVJJQUxfRklSRVdJUkVfT0hDSSwgfjApIH0sCiAJeyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJld2lyZS9zYnAyLmMgYi9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYwppbmRleCA3MGZlZjQwLi5jYTI2NGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYworKysgYi9kcml2ZXJzL2ZpcmV3aXJlL3NicDIuYwpAQCAtMTAxNCw3ICsxMDE0LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYnAyX3NjYW5fbG9naWNhbF91bml0X2RpcihzdHJ1Y3Qgc2JwMl90YXJnZXQgKnRndCwgdTMyICpkaXJlY3RvcnkpCitzdGF0aWMgaW50IHNicDJfc2Nhbl9sb2dpY2FsX3VuaXRfZGlyKHN0cnVjdCBzYnAyX3RhcmdldCAqdGd0LAorCQkJCSAgICAgIGNvbnN0IHUzMiAqZGlyZWN0b3J5KQogewogCXN0cnVjdCBmd19jc3JfaXRlcmF0b3IgY2k7CiAJaW50IGtleSwgdmFsdWU7CkBAIC0xMDI3LDcgKzEwMjgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNicDJfc2Nhbl91bml0X2RpcihzdHJ1Y3Qgc2JwMl90YXJnZXQgKnRndCwgdTMyICpkaXJlY3RvcnksCitzdGF0aWMgaW50IHNicDJfc2Nhbl91bml0X2RpcihzdHJ1Y3Qgc2JwMl90YXJnZXQgKnRndCwgY29uc3QgdTMyICpkaXJlY3RvcnksCiAJCQkgICAgICB1MzIgKm1vZGVsLCB1MzIgKmZpcm13YXJlX3JldmlzaW9uKQogewogCXN0cnVjdCBmd19jc3JfaXRlcmF0b3IgY2k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VkZC5jIGIvZHJpdmVycy9maXJtd2FyZS9lZGQuYwppbmRleCA5ZTRmNTlkLi4xMTBlMjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Zpcm13YXJlL2VkZC5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWRkLmMKQEAgLTEyMiw3ICsxMjIsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIGVkZF9hdHRyX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIGVkZF9hdHRyX29wcyA9IHsKIAkuc2hvdyA9IGVkZF9hdHRyX3Nob3csCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2VmaXZhcnMuYyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpdmFycy5jCmluZGV4IGY0ZjcwOWQuLjA4MmYwNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvZWZpdmFycy5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZWZpdmFycy5jCkBAIC0zNjIsNyArMzYyLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBlZml2YXJfYXR0cl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBlZml2YXJfYXR0cl9vcHMgPSB7CiAJLnNob3cgPSBlZml2YXJfYXR0cl9zaG93LAogCS5zdG9yZSA9IGVmaXZhcl9hdHRyX3N0b3JlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvaXNjc2lfaWJmdC5jIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKaW5kZXggZjgyYmNkYS4uZWQyODAxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9pc2NzaV9pYmZ0LmMKQEAgLTM4MCw3ICszODAsNiBAQAogCXN0cnVjdCBpYmZ0X25pYyAqbmljID0gZW50cnktPm5pYzsKIAl2b2lkICppYmZ0X2xvYyA9IGVudHJ5LT5oZWFkZXI7CiAJY2hhciAqc3RyID0gYnVmOwotCWNoYXIgKm1hYzsKIAlfX2JlMzIgdmFsOwogCiAJaWYgKCFuaWMpCkBAIC00MTksMTAgKzQxOCw3IEBACiAJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVkXG4iLCBuaWMtPnZsYW4pOwogCQlicmVhazsKIAljYXNlIGliZnRfZXRoX21hYzoKLQkJbWFjID0gbmljLT5tYWM7Ci0JCXN0ciArPSBzcHJpbnRmKHN0ciwgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAotCQkJICAgICAgICh1OCltYWNbMF0sICh1OCltYWNbMV0sICh1OCltYWNbMl0sCi0JCQkgICAgICAgKHU4KW1hY1szXSwgKHU4KW1hY1s0XSwgKHU4KW1hY1s1XSk7CisJCXN0ciArPSBzcHJpbnRmKHN0ciwgIiVwTVxuIiwgbmljLT5tYWMpOwogCQlicmVhazsKIAljYXNlIGliZnRfZXRoX2hvc3RuYW1lOgogCQlzdHIgKz0gc3ByaW50Zl9zdHJpbmcoc3RyLCBuaWMtPmhvc3RuYW1lX2xlbiwKQEAgLTUyMyw3ICs1MTksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIGliZnRfYXR0cl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBpYmZ0X2F0dHJfb3BzID0gewogCS5zaG93ID0gaWJmdF9zaG93X2F0dHJpYnV0ZSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvbWVtbWFwLmMgYi9kcml2ZXJzL2Zpcm13YXJlL21lbW1hcC5jCmluZGV4IDU2ZjkyMzQuLmQ1OWY3Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvbWVtbWFwLmMKKysrIGIvZHJpdmVycy9maXJtd2FyZS9tZW1tYXAuYwpAQCAtNzQsNyArNzQsNyBAQAogCU5VTEwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIG1lbW1hcF9hdHRyX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIG1lbW1hcF9hdHRyX29wcyA9IHsKIAkuc2hvdyA9IG1lbW1hcF9hdHRyX3Nob3csCiB9OwogCkBAIC0xMjIsMjkgKzEyMiw1MyBAQAogCXJldHVybiAwOwogfQogCisvKgorICogQWRkIG1lbW1hcCBlbnRyeSBvbiBzeXNmcworICovCitzdGF0aWMgaW50IGFkZF9zeXNmc19md19tYXBfZW50cnkoc3RydWN0IGZpcm13YXJlX21hcF9lbnRyeSAqZW50cnkpCit7CisJc3RhdGljIGludCBtYXBfZW50cmllc19ucjsKKwlzdGF0aWMgc3RydWN0IGtzZXQgKm1tYXBfa3NldDsKKworCWlmICghbW1hcF9rc2V0KSB7CisJCW1tYXBfa3NldCA9IGtzZXRfY3JlYXRlX2FuZF9hZGQoIm1lbW1hcCIsIE5VTEwsIGZpcm13YXJlX2tvYmopOworCQlpZiAoIW1tYXBfa3NldCkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKworCWVudHJ5LT5rb2JqLmtzZXQgPSBtbWFwX2tzZXQ7CisJaWYgKGtvYmplY3RfYWRkKCZlbnRyeS0+a29iaiwgTlVMTCwgIiVkIiwgbWFwX2VudHJpZXNfbnIrKykpCisJCWtvYmplY3RfcHV0KCZlbnRyeS0+a29iaik7CisKKwlyZXR1cm4gMDsKK30KKwogLyoqCi0gKiBmaXJtd2FyZV9tYXBfYWRkKCkgLSBBZGRzIGEgZmlybXdhcmUgbWFwcGluZyBlbnRyeS4KKyAqIGZpcm13YXJlX21hcF9hZGRfaG90cGx1ZygpIC0gQWRkcyBhIGZpcm13YXJlIG1hcHBpbmcgZW50cnkgd2hlbiB3ZSBkbworICogbWVtb3J5IGhvdHBsdWcuCiAgKiBAc3RhcnQ6IFN0YXJ0IG9mIHRoZSBtZW1vcnkgcmFuZ2UuCiAgKiBAZW5kOiAgIEVuZCBvZiB0aGUgbWVtb3J5IHJhbmdlIChpbmNsdXNpdmUpLgogICogQHR5cGU6ICBUeXBlIG9mIHRoZSBtZW1vcnkgcmFuZ2UuCiAgKgotICogVGhpcyBmdW5jdGlvbiB1c2VzIGttYWxsb2MoKSBmb3IgbWVtb3J5Ci0gKiBhbGxvY2F0aW9uLiBVc2UgZmlybXdhcmVfbWFwX2FkZF9lYXJseSgpIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgYm9vdG1lbQotICogYWxsb2NhdG9yLgotICoKLSAqIFRoYXQgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGxhdGVfaW5pdGNhbGwuCisgKiBBZGRzIGEgZmlybXdhcmUgbWFwcGluZyBlbnRyeS4gVGhpcyBmdW5jdGlvbiBpcyBmb3IgbWVtb3J5IGhvdHBsdWcsIGl0IGlzCisgKiBzaW1pbGFyIHRvIGZ1bmN0aW9uIGZpcm13YXJlX21hcF9hZGRfZWFybHkoKS4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0CisgKiBpdCB3aWxsIGNyZWF0ZSB0aGUgc3lmcyBlbnRyeSBkeW5hbWljYWxseS4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgb3IgLUVOT01FTSBpZiBubyBtZW1vcnkgY291bGQgYmUgYWxsb2NhdGVkLgogICoqLwotaW50IGZpcm13YXJlX21hcF9hZGQodTY0IHN0YXJ0LCB1NjQgZW5kLCBjb25zdCBjaGFyICp0eXBlKQoraW50IF9fbWVtaW5pdCBmaXJtd2FyZV9tYXBfYWRkX2hvdHBsdWcodTY0IHN0YXJ0LCB1NjQgZW5kLCBjb25zdCBjaGFyICp0eXBlKQogewogCXN0cnVjdCBmaXJtd2FyZV9tYXBfZW50cnkgKmVudHJ5OwogCi0JZW50cnkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZmlybXdhcmVfbWFwX2VudHJ5KSwgR0ZQX0FUT01JQyk7CisJZW50cnkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZmlybXdhcmVfbWFwX2VudHJ5KSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFlbnRyeSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyZXR1cm4gZmlybXdhcmVfbWFwX2FkZF9lbnRyeShzdGFydCwgZW5kLCB0eXBlLCBlbnRyeSk7CisJZmlybXdhcmVfbWFwX2FkZF9lbnRyeShzdGFydCwgZW5kLCB0eXBlLCBlbnRyeSk7CisJLyogY3JlYXRlIHRoZSBtZW1tYXAgZW50cnkgKi8KKwlhZGRfc3lzZnNfZndfbWFwX2VudHJ5KGVudHJ5KTsKKworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTE1NCw3ICsxNzgsNyBAQAogICogQHR5cGU6ICBUeXBlIG9mIHRoZSBtZW1vcnkgcmFuZ2UuCiAgKgogICogQWRkcyBhIGZpcm13YXJlIG1hcHBpbmcgZW50cnkuIFRoaXMgZnVuY3Rpb24gdXNlcyB0aGUgYm9vdG1lbSBhbGxvY2F0b3IKLSAqIGZvciBtZW1vcnkgYWxsb2NhdGlvbi4gVXNlIGZpcm13YXJlX21hcF9hZGQoKSBpZiB5b3Ugd2FudCB0byB1c2Uga21hbGxvYygpLgorICogZm9yIG1lbW9yeSBhbGxvY2F0aW9uLgogICoKICAqIFRoYXQgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYmVmb3JlIGxhdGVfaW5pdGNhbGwuCiAgKgpAQCAtMjE0LDE5ICsyMzgsMTAgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgbWVtbWFwX2luaXQodm9pZCkKIHsKLQlpbnQgaSA9IDA7CiAJc3RydWN0IGZpcm13YXJlX21hcF9lbnRyeSAqZW50cnk7Ci0Jc3RydWN0IGtzZXQgKm1lbW1hcF9rc2V0OwogCi0JbWVtbWFwX2tzZXQgPSBrc2V0X2NyZWF0ZV9hbmRfYWRkKCJtZW1tYXAiLCBOVUxMLCBmaXJtd2FyZV9rb2JqKTsKLQlpZiAoV0FSTl9PTighbWVtbWFwX2tzZXQpKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZtYXBfZW50cmllcywgbGlzdCkgewotCQllbnRyeS0+a29iai5rc2V0ID0gbWVtbWFwX2tzZXQ7Ci0JCWlmIChrb2JqZWN0X2FkZCgmZW50cnktPmtvYmosIE5VTEwsICIlZCIsIGkrKykpCi0JCQlrb2JqZWN0X3B1dCgmZW50cnktPmtvYmopOwotCX0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmbWFwX2VudHJpZXMsIGxpc3QpCisJCWFkZF9zeXNmc19md19tYXBfZW50cnkoZW50cnkpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vS2NvbmZpZyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCmluZGV4IDFmMWQ4OGEuLmZlZTY3OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3Bpby9LY29uZmlnCkBAIC02NSw4ICs2NSwxNyBAQAogCiAjIHB1dCBleHBhbmRlcnMgaW4gdGhlIHJpZ2h0IHNlY3Rpb24sIGluIGFscGhhYmV0aWNhbCBvcmRlcgogCitjb25maWcgR1BJT19NQVg3MzBYCisJdHJpc3RhdGUKKwogY29tbWVudCAiTWVtb3J5IG1hcHBlZCBHUElPIGV4cGFuZGVyczoiCiAKK2NvbmZpZyBHUElPX0lUODc2MUUKKwl0cmlzdGF0ZSAiSVQ4NzYxRSBHUElPIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBHUElPTElCCisJaGVscAorCSAgU2F5IHllcyBoZXJlIHRvIHN1cHBvcnQgR1BJTyBmdW5jdGlvbmFsaXR5IG9mIElUODc2MUUgc3VwZXIgSS9PIGNoaXAuCisKIGNvbmZpZyBHUElPX1BMMDYxCiAJYm9vbCAiUHJpbWVDZWxsIFBMMDYxIEdQSU8gc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEFSTV9BTUJBCkBAIC04NSw4ICs5NCwzMiBAQAogCWhlbHAKIAkgIFNheSB5ZXMgaGVyZSB0byBzdXBwb3J0IHRoZSBORUMgVlI0MTAwIHNlcmllcyBHZW5lcmFsLXB1cnBvc2UgSS9PIFVpbnQKIAorY29uZmlnIEdQSU9fU0NICisJdHJpc3RhdGUgIkludGVsIFNDSCBHUElPIgorCWRlcGVuZHMgb24gR1BJT0xJQiAmJiBQQ0kKKwlzZWxlY3QgTUZEX0NPUkUKKwlzZWxlY3QgTFBDX1NDSAorCWhlbHAKKwkgIFNheSB5ZXMgaGVyZSB0byBzdXBwb3J0IEdQSU8gaW50ZXJmYWNlIG9uIEludGVsIFBvdWxzYm8gU0NILgorCSAgVGhlIEludGVsIFNDSCBjb250YWlucyBhIHRvdGFsIG9mIDE0IEdQSU8gcGlucy4gVGVuIEdQSU9zIGFyZQorCSAgcG93ZXJlZCBieSB0aGUgY29yZSBwb3dlciByYWlsIGFuZCBhcmUgdHVybmVkIG9mZiBkdXJpbmcgc2xlZXAKKwkgIG1vZGVzIChTMyBhbmQgaGlnaGVyKS4gVGhlIHJlbWFpbmluZyBmb3VyIEdQSU9zIGFyZSBwb3dlcmVkIGJ5CisJICB0aGUgSW50ZWwgU0NIIHN1c3BlbmQgcG93ZXIgc3VwcGx5LiBUaGVzZSBHUElPcyByZW1haW4KKwkgIGFjdGl2ZSBkdXJpbmcgUzMuIFRoZSBzdXNwZW5kIHBvd2VyZWQgR1BJT3MgY2FuIGJlIHVzZWQgdG8gd2FrZSB0aGUKKwkgIHN5c3RlbSBmcm9tIHRoZSBTdXNwZW5kLXRvLVJBTSBzdGF0ZS4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBzY2gtZ3Bpby4KKwogY29tbWVudCAiSTJDIEdQSU8gZXhwYW5kZXJzOiIKIAorY29uZmlnIEdQSU9fTUFYNzMwMAorCXRyaXN0YXRlICJNYXhpbSBNQVg3MzAwIEdQSU8gZXhwYW5kZXIiCisJZGVwZW5kcyBvbiBJMkMKKwlzZWxlY3QgR1BJT19NQVg3MzBYCisJaGVscAorCSAgR1BJTyBkcml2ZXIgZm9yIE1heGltIE1BWDczMDEgSTJDLWJhc2VkIEdQSU8gZXhwYW5kZXIuCisKIGNvbmZpZyBHUElPX01BWDczMlgKIAl0cmlzdGF0ZSAiTUFYNzMxOSwgTUFYNzMyMC03MzI3IEkyQyBQb3J0IEV4cGFuZGVycyIKIAlkZXBlbmRzIG9uIEkyQwpAQCAtMTI0LDYgKzE1NywxMyBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgcGNhOTUzeC4KIAorY29uZmlnIEdQSU9fUENBOTUzWF9JUlEKKwlib29sICJJbnRlcnJ1cHQgY29udHJvbGxlciBzdXBwb3J0IGZvciBQQ0E5NTN4IgorCWRlcGVuZHMgb24gR1BJT19QQ0E5NTNYPXkKKwloZWxwCisJICBTYXkgeWVzIGhlcmUgdG8gZW5hYmxlIHRoZSBwY2E5NTN4IHRvIGJlIHVzZWQgYXMgYW4gaW50ZXJydXB0CisJICBjb250cm9sbGVyLiBJdCByZXF1aXJlcyB0aGUgZHJpdmVyIHRvIGJlIGJ1aWx0IGluIHRoZSBrZXJuZWwuCisKIGNvbmZpZyBHUElPX1BDRjg1N1gKIAl0cmlzdGF0ZSAiUENGODU3eCwgUENBezg1LDk2fTd4LCBhbmQgTUFYNzMyWzg5XSBJMkMgR1BJTyBleHBhbmRlcnMiCiAJZGVwZW5kcyBvbiBJMkMKQEAgLTE2Miw2ICsyMDIsMjAgQEAKIAkgIFNheSB5ZXMgaGVyZSB0byBhY2Nlc3MgdGhlIEdQSU8gc2lnbmFscyBvZiBXTTgzMXggcG93ZXIgbWFuYWdlbWVudAogCSAgY2hpcHMgZnJvbSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MuCiAKK2NvbmZpZyBHUElPX1dNODM1MAorCXRyaXN0YXRlICJXTTgzNTAgR1BJT3MiCisJZGVwZW5kcyBvbiBNRkRfV004MzUwCisJaGVscAorCSAgU2F5IHllcyBoZXJlIHRvIGFjY2VzcyB0aGUgR1BJTyBzaWduYWxzIG9mIFdNODM1MCBwb3dlciBtYW5hZ2VtZW50CisJICBjaGlwcyBmcm9tIFdvbGZzb24gTWljcm9lbGVjdHJvbmljcy4KKworY29uZmlnIEdQSU9fV004OTk0CisJdHJpc3RhdGUgIldNODk5NCBHUElPcyIKKwlkZXBlbmRzIG9uIE1GRF9XTTg5OTQKKwloZWxwCisJICBTYXkgeWVzIGhlcmUgdG8gYWNjZXNzIHRoZSBHUElPIHNpZ25hbHMgb2YgV004OTk0IGF1ZGlvIGh1YgorCSAgQ09ERUNzIGZyb20gV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzLgorCiBjb25maWcgR1BJT19BRFA1NTIwCiAJdHJpc3RhdGUgIkdQSU8gU3VwcG9ydCBmb3IgQURQNTUyMCBQTUlDIgogCWRlcGVuZHMgb24gUE1JQ19BRFA1NTIwCkBAIC0yMjYsOCArMjgwLDkgQEAKIGNvbmZpZyBHUElPX01BWDczMDEKIAl0cmlzdGF0ZSAiTWF4aW0gTUFYNzMwMSBHUElPIGV4cGFuZGVyIgogCWRlcGVuZHMgb24gU1BJX01BU1RFUgorCXNlbGVjdCBHUElPX01BWDczMFgKIAloZWxwCi0JICBncGlvIGRyaXZlciBmb3IgTWF4aW0gTUFYNzMwMSBTUEkgR1BJTyBleHBhbmRlci4KKwkgIEdQSU8gZHJpdmVyIGZvciBNYXhpbSBNQVg3MzAxIFNQSS1iYXNlZCBHUElPIGV4cGFuZGVyLgogCiBjb25maWcgR1BJT19NQ1AyM1MwOAogCXRyaXN0YXRlICJNaWNyb2NoaXAgTUNQMjNTMDggSS9PIGV4cGFuZGVyIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL01ha2VmaWxlIGIvZHJpdmVycy9ncGlvL01ha2VmaWxlCmluZGV4IDQ4Njg3MjMuLjEwZjNmOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwaW8vTWFrZWZpbGUKQEAgLTcsNiArNyw4IEBACiBvYmotJChDT05GSUdfR1BJT19BRFA1NTIwKQkrPSBhZHA1NTIwLWdwaW8ubwogb2JqLSQoQ09ORklHX0dQSU9fQURQNTU4OCkJKz0gYWRwNTU4OC1ncGlvLm8KIG9iai0kKENPTkZJR19HUElPX0xBTkdXRUxMKQkrPSBsYW5nd2VsbF9ncGlvLm8KK29iai0kKENPTkZJR19HUElPX01BWDczMFgpCSs9IG1heDczMHgubworb2JqLSQoQ09ORklHX0dQSU9fTUFYNzMwMCkJKz0gbWF4NzMwMC5vCiBvYmotJChDT05GSUdfR1BJT19NQVg3MzAxKQkrPSBtYXg3MzAxLm8KIG9iai0kKENPTkZJR19HUElPX01BWDczMlgpCSs9IG1heDczMngubwogb2JqLSQoQ09ORklHX0dQSU9fTUMzMzg4MCkJKz0gbWMzMzg4MC5vCkBAIC0yMCw1ICsyMiw5IEBACiBvYmotJChDT05GSUdfR1BJT19YSUxJTlgpCSs9IHhpbGlueF9ncGlvLm8KIG9iai0kKENPTkZJR19HUElPX0NTNTUzNSkJKz0gY3M1NTM1LWdwaW8ubwogb2JqLSQoQ09ORklHX0dQSU9fQlQ4WFgpCSs9IGJ0OHh4Z3Bpby5vCitvYmotJChDT05GSUdfR1BJT19JVDg3NjFFKQkrPSBpdDg3NjFlX2dwaW8ubwogb2JqLSQoQ09ORklHX0dQSU9fVlI0MVhYKQkrPSB2cjQxeHhfZ2l1Lm8KIG9iai0kKENPTkZJR19HUElPX1dNODMxWCkJKz0gd204MzF4LWdwaW8ubworb2JqLSQoQ09ORklHX0dQSU9fV004MzUwKQkrPSB3bTgzNTAtZ3Bpb2xpYi5vCitvYmotJChDT05GSUdfR1BJT19XTTg5OTQpCSs9IHdtODk5NC1ncGlvLm8KK29iai0kKENPTkZJR19HUElPX1NDSCkJCSs9IHNjaF9ncGlvLm8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vY3M1NTM1LWdwaW8uYyBiL2RyaXZlcnMvZ3Bpby9jczU1MzUtZ3Bpby5jCmluZGV4IDBmZGJlOTQuLjBjM2M0OTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9jczU1MzUtZ3Bpby5jCisrKyBiL2RyaXZlcnMvZ3Bpby9jczU1MzUtZ3Bpby5jCkBAIC0xNTQsNyArMTU0LDcgQEAKIAogc3RhdGljIGludCBjaGlwX2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKLQlyZXR1cm4gY3M1NTM1X2dwaW9faXNzZXQob2Zmc2V0LCBHUElPX09VVFBVVF9WQUwpOworCXJldHVybiBjczU1MzVfZ3Bpb19pc3NldChvZmZzZXQsIEdQSU9fUkVBRF9CQUNLKTsKIH0KIAogc3RhdGljIHZvaWQgY2hpcF9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWwpCkBAIC0xNzIsNiArMTcyLDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CiAJX19jczU1MzVfZ3Bpb19zZXQoY2hpcCwgb2Zmc2V0LCBHUElPX0lOUFVUX0VOQUJMRSk7CisJX19jczU1MzVfZ3Bpb19jbGVhcihjaGlwLCBvZmZzZXQsIEdQSU9fT1VUUFVUX0VOQUJMRSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC0xODQsNiArMTg1LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjaGlwLT5sb2NrLCBmbGFncyk7CiAKKwlfX2NzNTUzNV9ncGlvX3NldChjaGlwLCBvZmZzZXQsIEdQSU9fSU5QVVRfRU5BQkxFKTsKIAlfX2NzNTUzNV9ncGlvX3NldChjaGlwLCBvZmZzZXQsIEdQSU9fT1VUUFVUX0VOQUJMRSk7CiAJaWYgKHZhbCkKIAkJX19jczU1MzVfZ3Bpb19zZXQoY2hpcCwgb2Zmc2V0LCBHUElPX09VVFBVVF9WQUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2dwaW9saWIuYyBiL2RyaXZlcnMvZ3Bpby9ncGlvbGliLmMKaW5kZXggMzUwODQyYS4uNmQxYjg2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL2dwaW9saWIuYworKysgYi9kcml2ZXJzL2dwaW8vZ3Bpb2xpYi5jCkBAIC02MjMsNyArNjIzLDkgQEAKICAqIC9zeXMvY2xhc3MvZ3Bpby91bmV4cG9ydCAuLi4gd3JpdGUtb25seQogICoJaW50ZWdlciBOIC4uLiBudW1iZXIgb2YgR1BJTyB0byB1bmV4cG9ydAogICovCi1zdGF0aWMgc3NpemVfdCBleHBvcnRfc3RvcmUoc3RydWN0IGNsYXNzICpjbGFzcywgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQorc3RhdGljIHNzaXplX3QgZXhwb3J0X3N0b3JlKHN0cnVjdCBjbGFzcyAqY2xhc3MsCisJCQkJc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiB7CiAJbG9uZwlncGlvOwogCWludAlzdGF0dXM7CkBAIC02NTMsNyArNjU1LDkgQEAKIAlyZXR1cm4gc3RhdHVzID8gOiBsZW47CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHVuZXhwb3J0X3N0b3JlKHN0cnVjdCBjbGFzcyAqY2xhc3MsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3N0YXRpYyBzc2l6ZV90IHVuZXhwb3J0X3N0b3JlKHN0cnVjdCBjbGFzcyAqY2xhc3MsCisJCQkJc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiB7CiAJbG9uZwlncGlvOwogCWludAlzdGF0dXM7CkBAIC0xMjM3LDYgKzEyNDEsNjQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGdwaW9fZnJlZSk7CiAKKy8qKgorICogZ3Bpb19yZXF1ZXN0X29uZSAtIHJlcXVlc3QgYSBzaW5nbGUgR1BJTyB3aXRoIGluaXRpYWwgY29uZmlndXJhdGlvbgorICogQGdwaW86CXRoZSBHUElPIG51bWJlcgorICogQGZsYWdzOglHUElPIGNvbmZpZ3VyYXRpb24gYXMgc3BlY2lmaWVkIGJ5IEdQSU9GXyoKKyAqIEBsYWJlbDoJYSBsaXRlcmFsIGRlc2NyaXB0aW9uIHN0cmluZyBvZiB0aGlzIEdQSU8KKyAqLworaW50IGdwaW9fcmVxdWVzdF9vbmUodW5zaWduZWQgZ3BpbywgdW5zaWduZWQgbG9uZyBmbGFncywgY29uc3QgY2hhciAqbGFiZWwpCit7CisJaW50IGVycjsKKworCWVyciA9IGdwaW9fcmVxdWVzdChncGlvLCBsYWJlbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChmbGFncyAmIEdQSU9GX0RJUl9JTikKKwkJZXJyID0gZ3Bpb19kaXJlY3Rpb25faW5wdXQoZ3Bpbyk7CisJZWxzZQorCQllcnIgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQoZ3BpbywKKwkJCQkoZmxhZ3MgJiBHUElPRl9JTklUX0hJR0gpID8gMSA6IDApOworCisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGdwaW9fcmVxdWVzdF9vbmUpOworCisvKioKKyAqIGdwaW9fcmVxdWVzdF9hcnJheSAtIHJlcXVlc3QgbXVsdGlwbGUgR1BJT3MgaW4gYSBzaW5nbGUgY2FsbAorICogQGFycmF5OglhcnJheSBvZiB0aGUgJ3N0cnVjdCBncGlvJworICogQG51bToJaG93IG1hbnkgR1BJT3MgaW4gdGhlIGFycmF5CisgKi8KK2ludCBncGlvX3JlcXVlc3RfYXJyYXkoc3RydWN0IGdwaW8gKmFycmF5LCBzaXplX3QgbnVtKQoreworCWludCBpLCBlcnI7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyssIGFycmF5KyspIHsKKwkJZXJyID0gZ3Bpb19yZXF1ZXN0X29uZShhcnJheS0+Z3BpbywgYXJyYXktPmZsYWdzLCBhcnJheS0+bGFiZWwpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfZnJlZTsKKwl9CisJcmV0dXJuIDA7CisKK2Vycl9mcmVlOgorCXdoaWxlIChpLS0pCisJCWdwaW9fZnJlZSgoLS1hcnJheSktPmdwaW8pOworCXJldHVybiBlcnI7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChncGlvX3JlcXVlc3RfYXJyYXkpOworCisvKioKKyAqIGdwaW9fZnJlZV9hcnJheSAtIHJlbGVhc2UgbXVsdGlwbGUgR1BJT3MgaW4gYSBzaW5nbGUgY2FsbAorICogQGFycmF5OglhcnJheSBvZiB0aGUgJ3N0cnVjdCBncGlvJworICogQG51bToJaG93IG1hbnkgR1BJT3MgaW4gdGhlIGFycmF5CisgKi8KK3ZvaWQgZ3Bpb19mcmVlX2FycmF5KHN0cnVjdCBncGlvICphcnJheSwgc2l6ZV90IG51bSkKK3sKKwl3aGlsZSAobnVtLS0pCisJCWdwaW9fZnJlZSgoYXJyYXkrKyktPmdwaW8pOworfQorRVhQT1JUX1NZTUJPTF9HUEwoZ3Bpb19mcmVlX2FycmF5KTsKIAogLyoqCiAgKiBncGlvY2hpcF9pc19yZXF1ZXN0ZWQgLSByZXR1cm4gc3RyaW5nIGlmZiBzaWduYWwgd2FzIHJlcXVlc3RlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL2l0ODc2MWVfZ3Bpby5jIGIvZHJpdmVycy9ncGlvL2l0ODc2MWVfZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MzIxOWMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwaW8vaXQ4NzYxZV9ncGlvLmMKQEAgLTAsMCArMSwyMzEgQEAKKy8qCisgKiAgaXQ4NzYxX2dwaW8uYyAtIEdQSU8gaW50ZXJmYWNlIGZvciBJVDg3NjFFIFN1cGVyIEkvTyBjaGlwCisgKgorICogIEF1dGhvcjogRGVuaXMgVHVyaXNjaGV2IDxkZW5pc0Bjb21wdWxhYi5jby5pbD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisKKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNkZWZpbmUgU0lPX0NISVBfSUQJCTB4ODc2MQorI2RlZmluZSBDSElQX0lEX0hJR0hfQllURQkweDIwCisjZGVmaW5lIENISVBfSURfTE9XX0JZVEUJMHgyMQorCitzdGF0aWMgdTggcG9ydHNbMl0gPSB7IDB4MmUsIDB4NGUgfTsKK3N0YXRpYyB1OCBwb3J0OworCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNpb19sb2NrKTsKKworI2RlZmluZSBHUElPX05BTUUJCSJpdDg3NjEtZ3BpbyIKKyNkZWZpbmUgR1BJT19CQV9ISUdIX0JZVEUJMHg2MAorI2RlZmluZSBHUElPX0JBX0xPV19CWVRFCTB4NjEKKyNkZWZpbmUgR1BJT19JT1NJWkUJCTQKKyNkZWZpbmUgR1BJTzFYX0lPCQkweGYwCisjZGVmaW5lIEdQSU8yWF9JTwkJMHhmMQorCitzdGF0aWMgdTE2IGdwaW9fYmE7CisKK3N0YXRpYyB1OCByZWFkX3JlZyh1OCBhZGRyLCB1OCBwb3J0KQoreworCW91dGIoYWRkciwgcG9ydCk7CisJcmV0dXJuIGluYihwb3J0ICsgMSk7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlX3JlZyh1OCBkYXRhLCB1OCBhZGRyLCB1OCBwb3J0KQoreworCW91dGIoYWRkciwgcG9ydCk7CisJb3V0YihkYXRhLCBwb3J0ICsgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGVudGVyX2NvbmZfbW9kZSh1OCBwb3J0KQoreworCW91dGIoMHg4NywgcG9ydCk7CisJb3V0YigweDYxLCBwb3J0KTsKKwlvdXRiKDB4NTUsIHBvcnQpOworCW91dGIoKHBvcnQgPT0gMHgyZSkgPyAweDU1IDogMHhhYSwgcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIGV4aXRfY29uZl9tb2RlKHU4IHBvcnQpCit7CisJb3V0YigweDIsIHBvcnQpOworCW91dGIoMHgyLCBwb3J0ICsgMSk7Cit9CisKK3N0YXRpYyB2b2lkIGVudGVyX2dwaW9fbW9kZSh1OCBwb3J0KQoreworCXdyaXRlX3JlZygweDIsIDB4NywgcG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgaXQ4NzYxZV9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgZ3Bpb19udW0pCit7CisJdTE2IHJlZzsKKwl1OCBiaXQ7CisKKwliaXQgPSBncGlvX251bSAlIDc7CisJcmVnID0gKGdwaW9fbnVtID49IDcpID8gZ3Bpb19iYSArIDEgOiBncGlvX2JhOworCisJcmV0dXJuICEhKGluYihyZWcpICYgKDEgPDwgYml0KSk7Cit9CisKK3N0YXRpYyBpbnQgaXQ4NzYxZV9ncGlvX2RpcmVjdGlvbl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgZ3Bpb19udW0pCit7CisJdTggY3Vycl9kaXJzOworCXU4IGlvX3JlZywgYml0OworCisJYml0ID0gZ3Bpb19udW0gJSA3OworCWlvX3JlZyA9IChncGlvX251bSA+PSA3KSA/IEdQSU8yWF9JTyA6IEdQSU8xWF9JTzsKKworCXNwaW5fbG9jaygmc2lvX2xvY2spOworCisJZW50ZXJfY29uZl9tb2RlKHBvcnQpOworCWVudGVyX2dwaW9fbW9kZShwb3J0KTsKKworCWN1cnJfZGlycyA9IHJlYWRfcmVnKGlvX3JlZywgcG9ydCk7CisKKwlpZiAoY3Vycl9kaXJzICYgKDEgPDwgYml0KSkKKwkJd3JpdGVfcmVnKGN1cnJfZGlycyAmIH4oMSA8PCBiaXQpLCBpb19yZWcsIHBvcnQpOworCisJZXhpdF9jb25mX21vZGUocG9ydCk7CisKKwlzcGluX3VubG9jaygmc2lvX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpdDg3NjFlX2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLAorCQkJCXVuc2lnbmVkIGdwaW9fbnVtLCBpbnQgdmFsKQoreworCXU4IGN1cnJfdmFscywgYml0OworCXUxNiByZWc7CisKKwliaXQgPSBncGlvX251bSAlIDc7CisJcmVnID0gKGdwaW9fbnVtID49IDcpID8gZ3Bpb19iYSArIDEgOiBncGlvX2JhOworCisJc3Bpbl9sb2NrKCZzaW9fbG9jayk7CisKKwljdXJyX3ZhbHMgPSBpbmIocmVnKTsKKwlpZiAodmFsKQorCQlvdXRiKGN1cnJfdmFscyB8ICgxIDw8IGJpdCkgLCByZWcpOworCWVsc2UKKwkJb3V0YihjdXJyX3ZhbHMgJiB+KDEgPDwgYml0KSwgcmVnKTsKKworCXNwaW5fdW5sb2NrKCZzaW9fbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgaXQ4NzYxZV9ncGlvX2RpcmVjdGlvbl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsCisJCQkJCXVuc2lnbmVkIGdwaW9fbnVtLCBpbnQgdmFsKQoreworCXU4IGN1cnJfZGlycywgaW9fcmVnLCBiaXQ7CisKKwliaXQgPSBncGlvX251bSAlIDc7CisJaW9fcmVnID0gKGdwaW9fbnVtID49IDcpID8gR1BJTzJYX0lPIDogR1BJTzFYX0lPOworCisJaXQ4NzYxZV9ncGlvX3NldChnYywgZ3Bpb19udW0sIHZhbCk7CisKKwlzcGluX2xvY2soJnNpb19sb2NrKTsKKworCWVudGVyX2NvbmZfbW9kZShwb3J0KTsKKwllbnRlcl9ncGlvX21vZGUocG9ydCk7CisKKwljdXJyX2RpcnMgPSByZWFkX3JlZyhpb19yZWcsIHBvcnQpOworCisJaWYgKCEoY3Vycl9kaXJzICYgKDEgPDwgYml0KSkpCisJCXdyaXRlX3JlZyhjdXJyX2RpcnMgfCAoMSA8PCBiaXQpLCBpb19yZWcsIHBvcnQpOworCisJZXhpdF9jb25mX21vZGUocG9ydCk7CisKKwlzcGluX3VubG9jaygmc2lvX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGdwaW9fY2hpcCBpdDg3NjFlX2dwaW9fY2hpcCA9IHsKKwkubGFiZWwJCQk9IEdQSU9fTkFNRSwKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5nZXQJCQk9IGl0ODc2MWVfZ3Bpb19nZXQsCisJLmRpcmVjdGlvbl9pbnB1dAk9IGl0ODc2MWVfZ3Bpb19kaXJlY3Rpb25faW4sCisJLnNldAkJCT0gaXQ4NzYxZV9ncGlvX3NldCwKKwkuZGlyZWN0aW9uX291dHB1dAk9IGl0ODc2MWVfZ3Bpb19kaXJlY3Rpb25fb3V0LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaXQ4NzYxZV9ncGlvX2luaXQodm9pZCkKK3sKKwlpbnQgaSwgaWQsIGVycjsKKworCS8qIGNoaXAgYW5kIHBvcnQgZGV0ZWN0aW9uICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG9ydHMpOyBpKyspIHsKKwkJc3Bpbl9sb2NrKCZzaW9fbG9jayk7CisJCWVudGVyX2NvbmZfbW9kZShwb3J0c1tpXSk7CisKKwkJaWQgPSAocmVhZF9yZWcoQ0hJUF9JRF9ISUdIX0JZVEUsIHBvcnRzW2ldKSA8PCA4KSArCisJCQkJcmVhZF9yZWcoQ0hJUF9JRF9MT1dfQllURSwgcG9ydHNbaV0pOworCisJCWV4aXRfY29uZl9tb2RlKHBvcnRzW2ldKTsKKwkJc3Bpbl91bmxvY2soJnNpb19sb2NrKTsKKworCQlpZiAoaWQgPT0gU0lPX0NISVBfSUQpIHsKKwkJCXBvcnQgPSBwb3J0c1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKCFwb3J0KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIGZldGNoIEdQSU8gYmFzZSBhZGRyZXNzICovCisJZW50ZXJfY29uZl9tb2RlKHBvcnQpOworCWVudGVyX2dwaW9fbW9kZShwb3J0KTsKKwlncGlvX2JhID0gKHJlYWRfcmVnKEdQSU9fQkFfSElHSF9CWVRFLCBwb3J0KSA8PCA4KSArCisJCQkJcmVhZF9yZWcoR1BJT19CQV9MT1dfQllURSwgcG9ydCk7CisJZXhpdF9jb25mX21vZGUocG9ydCk7CisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGdwaW9fYmEsIEdQSU9fSU9TSVpFLCBHUElPX05BTUUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaXQ4NzYxZV9ncGlvX2NoaXAuYmFzZSA9IC0xOworCWl0ODc2MWVfZ3Bpb19jaGlwLm5ncGlvID0gMTQ7CisKKwllcnIgPSBncGlvY2hpcF9hZGQoJml0ODc2MWVfZ3Bpb19jaGlwKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBncGlvY2hpcF9hZGRfZXJyOworCisJcmV0dXJuIDA7CisKK2dwaW9jaGlwX2FkZF9lcnI6CisJcmVsZWFzZV9yZWdpb24oZ3Bpb19iYSwgR1BJT19JT1NJWkUpOworCWdwaW9fYmEgPSAwOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpdDg3NjFlX2dwaW9fZXhpdCh2b2lkKQoreworCWlmIChncGlvX2JhKSB7CisJCWdwaW9jaGlwX3JlbW92ZSgmaXQ4NzYxZV9ncGlvX2NoaXApOworCisJCXJlbGVhc2VfcmVnaW9uKGdwaW9fYmEsIEdQSU9fSU9TSVpFKTsKKwkJZ3Bpb19iYSA9IDA7CisJfQorfQorbW9kdWxlX2luaXQoaXQ4NzYxZV9ncGlvX2luaXQpOworbW9kdWxlX2V4aXQoaXQ4NzYxZV9ncGlvX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJEZW5pcyBUdXJpc2NoZXYgPGRlbmlzQGNvbXB1bGFiLmNvLmlsPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHUElPIGludGVyZmFjZSBmb3IgSVQ4NzYxRSBTdXBlciBJL08gY2hpcCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL21heDczMDAuYyBiL2RyaXZlcnMvZ3Bpby9tYXg3MzAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ3NGVlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3Bpby9tYXg3MzAwLmMKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIGRyaXZlcnMvZ3Bpby9tYXg3MzAwLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgV29sZnJhbSBTYW5nLCBQZW5ndXRyb25peAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQ2hlY2sgbWF4NzMweC5jIGZvciBmdXJ0aGVyIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaS9tYXg3MzAxLmg+CisKK3N0YXRpYyBpbnQgbWF4NzMwMF9pMmNfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnLAorCQkJCXVuc2lnbmVkIGludCB2YWwpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKworCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWwpOworfQorCitzdGF0aWMgaW50IG1heDczMDBfaTJjX3JlYWQoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisKKwlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgbWF4NzMwMF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgbWF4NzMwMSAqdHM7CisJaW50IHJldDsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLAorCQkJSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKKwkJcmV0dXJuIC1FSU87CisKKwl0cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtYXg3MzAxKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0cy0+cmVhZCA9IG1heDczMDBfaTJjX3JlYWQ7CisJdHMtPndyaXRlID0gbWF4NzMwMF9pMmNfd3JpdGU7CisJdHMtPmRldiA9ICZjbGllbnQtPmRldjsKKworCXJldCA9IF9fbWF4NzMweF9wcm9iZSh0cyk7CisJaWYgKHJldCkKKwkJa2ZyZWUodHMpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1heDczMDBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJcmV0dXJuIF9fbWF4NzMweF9yZW1vdmUoJmNsaWVudC0+ZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG1heDczMDBfaWRbXSA9IHsKKwl7ICJtYXg3MzAwIiwgMCB9LAorCXsgfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBtYXg3MzAwX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1heDczMDBfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gIm1heDczMDAiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IG1heDczMDBfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG1heDczMDBfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSBtYXg3MzAwX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWF4NzMwMF9pbml0KHZvaWQpCit7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZtYXg3MzAwX2RyaXZlcik7Cit9CitzdWJzeXNfaW5pdGNhbGwobWF4NzMwMF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1heDczMDBfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZtYXg3MzAwX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChtYXg3MzAwX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJXb2xmcmFtIFNhbmciKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTUFYNzMwMCBHUElPLUV4cGFuZGVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vbWF4NzMwMS5jIGIvZHJpdmVycy9ncGlvL21heDczMDEuYwppbmRleCA0ODA5NTZmLi45NjVkOWIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vbWF4NzMwMS5jCisrKyBiL2RyaXZlcnMvZ3Bpby9tYXg3MzAxLmMKQEAgLTEsOTggKzEsNDEgQEAKLS8qKgorLyoKICAqIGRyaXZlcnMvZ3Bpby9tYXg3MzAxLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSnVlcmdlbiBCZWlzZXJ0LCBQZW5ndXRyb25peAogICogQ29weXJpZ2h0IChDKSAyMDA4IEd1ZW5uYWRpIExpYWtob3ZldHNraSwgUGVuZ3V0cm9uaXgKKyAqIENvcHlyaWdodCAoQykgMjAwOSBXb2xmcmFtIFNhbmcsIFBlbmd1dHJvbml4CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCi0gKiBUaGUgTWF4aW0ncyBNQVg3MzAxIGRldmljZSBpcyBhbiBTUEkgZHJpdmVuIEdQSU8gZXhwYW5kZXIuIFRoZXJlIGFyZQotICogMjggR1BJT3MuIDggb2YgdGhlbSBjYW4gdHJpZ2dlciBhbiBpbnRlcnJ1cHQuIFNlZSBkYXRhc2hlZXQgZm9yIG1vcmUKLSAqIGRldGFpbHMKLSAqIE5vdGU6Ci0gKiAtIERJTiBtdXN0IGJlIHN0YWJsZSBhdCB0aGUgcmlzaW5nIGVkZ2Ugb2YgY2xvY2suCi0gKiAtIHdoZW4gd3JpdGluZzoKLSAqICAgLSBhbHdheXMgY2xvY2sgaW4gMTYgY2xvY2tzIGF0IG9uY2UKLSAqICAgLSBhdCBESU46IEQxNSBmaXJzdCwgRDAgbGFzdAotICogICAtIEQwLi5ENyA9IGRhdGFieXRlLCBEOC4uRDE0ID0gY29tbWFuZGJ5dGUKLSAqICAgLSBEMTUgPSBsb3cgLT4gd3JpdGUgY29tbWFuZAotICogLSB3aGVuIHJlYWRpbmcKLSAqICAgLSBhbHdheXMgY2xvY2sgaW4gMTYgY2xvY2tzIGF0IG9uY2UKLSAqICAgLSBhdCBESU46IEQxNSBmaXJzdCwgRDAgbGFzdAotICogICAtIEQwLi5ENyA9IGR1bW15LCBEOC4uRDE0ID0gcmVnaXN0ZXIgYWRkcmVzcwotICogICAtIEQxNSA9IGhpZ2ggLT4gcmVhZCBjb21tYW5kCi0gKiAgIC0gcmFpc2UgQ1MgYW5kIGFzc2VydCBpdCBhZ2FpbgotICogICAtIGFsd2F5cyBjbG9jayBpbiAxNiBjbG9ja3MgYXQgb25jZQotICogICAtIGF0IERPVVQ6IEQxNSBmaXJzdCwgRDAgbGFzdAotICogICAtIEQwLi5ENyBjb250YWlucyB0aGUgZGF0YSBmcm9tIHRoZSBmaXJzdCBjeWNsZQotICoKLSAqIFRoZSBkcml2ZXIgZXhwb3J0cyBhIHN0YW5kYXJkIGdwaW9jaGlwIGludGVyZmFjZQorICogQ2hlY2sgbWF4NzMweC5jIGZvciBmdXJ0aGVyIGRldGFpbHMuCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvbWF4NzMwMS5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAotI2RlZmluZSBEUklWRVJfTkFNRSAibWF4NzMwMSIKLQotLyoKLSAqIFBpbiBjb25maWd1cmF0aW9ucywgc2VlIE1BWDczMDEgZGF0YXNoZWV0IHBhZ2UgNgotICovCi0jZGVmaW5lIFBJTl9DT05GSUdfTUFTSyAweDAzCi0jZGVmaW5lIFBJTl9DT05GSUdfSU5fUFVMTFVQIDB4MDMKLSNkZWZpbmUgUElOX0NPTkZJR19JTl9XT19QVUxMVVAgMHgwMgotI2RlZmluZSBQSU5fQ09ORklHX09VVCAweDAxCi0KLSNkZWZpbmUgUElOX05VTUJFUiAyOAotCi0KLS8qCi0gKiBTb21lIHJlZ2lzdGVycyBtdXN0IGJlIHJlYWQgYmFjayB0byBtb2RpZnkuCi0gKiBUbyBzYXZlIHRpbWUgd2UgY2FjaGUgdGhlbSBoZXJlIGluIG1lbW9yeQotICovCi1zdHJ1Y3QgbWF4NzMwMSB7Ci0Jc3RydWN0IG11dGV4CWxvY2s7Ci0JdTgJCXBvcnRfY29uZmlnWzhdOwkvKiBmaWVsZCAwIGlzIHVudXNlZCAqLwotCXUzMgkJb3V0X2xldmVsOwkvKiBjYWNoZWQgb3V0cHV0IGxldmVscyAqLwotCXN0cnVjdCBncGlvX2NoaXAgY2hpcDsKLQlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpOwotfTsKLQotLyoqCi0gKiBtYXg3MzAxX3dyaXRlIC0gV3JpdGUgYSBuZXcgcmVnaXN0ZXIgY29udGVudAotICogQHNwaTogVGhlIFNQSSBkZXZpY2UKLSAqIEByZWc6IFJlZ2lzdGVyIG9mZnNldAotICogQHZhbDogVmFsdWUgdG8gd3JpdGUKLSAqCi0gKiBBIHdyaXRlIHRvIHRoZSBNQVg3MzAxIG1lYW5zIG9uZSBtZXNzYWdlIHdpdGggb25lIHRyYW5zZmVyCi0gKgotICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwgb3IgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvcgotICovCi1zdGF0aWMgaW50IG1heDczMDFfd3JpdGUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCkKKy8qIEEgd3JpdGUgdG8gdGhlIE1BWDczMDEgbWVhbnMgb25lIG1lc3NhZ2Ugd2l0aCBvbmUgdHJhbnNmZXIgKi8KK3N0YXRpYyBpbnQgbWF4NzMwMV9zcGlfd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnLAorCQkJCXVuc2lnbmVkIGludCB2YWwpCiB7CisJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKIAl1MTYgd29yZCA9ICgocmVnICYgMHg3RikgPDwgOCkgfCAodmFsICYgMHhGRik7CisKIAlyZXR1cm4gc3BpX3dyaXRlKHNwaSwgKGNvbnN0IHU4ICopJndvcmQsIHNpemVvZih3b3JkKSk7CiB9CiAKLS8qKgotICogbWF4NzMwMV9yZWFkIC0gUmVhZCBiYWNrIHJlZ2lzdGVyIGNvbnRlbnQKLSAqIEBzcGk6IFRoZSBTUEkgZGV2aWNlCi0gKiBAcmVnOiBSZWdpc3RlciBvZmZzZXQKLSAqCi0gKiBBIHJlYWQgZnJvbSB0aGUgTUFYNzMwMSBtZWFucyB0d28gdHJhbnNmZXJzOyBoZXJlLCBvbmUgbWVzc2FnZSBlYWNoCi0gKgotICogUmV0dXJucyBwb3NpdGl2ZSA4IGJpdCB2YWx1ZSBmcm9tIGRldmljZSBpZiBzdWNjZXNzZnVsIG9yIGEKLSAqIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yCi0gKi8KLXN0YXRpYyBpbnQgbWF4NzMwMV9yZWFkKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHVuc2lnbmVkIGludCByZWcpCisvKiBBIHJlYWQgZnJvbSB0aGUgTUFYNzMwMSBtZWFucyB0d28gdHJhbnNmZXJzOyBoZXJlLCBvbmUgbWVzc2FnZSBlYWNoICovCisKK3N0YXRpYyBpbnQgbWF4NzMwMV9zcGlfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZWcpCiB7CiAJaW50IHJldDsKIAl1MTYgd29yZDsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShkZXYpOwogCiAJd29yZCA9IDB4ODAwMCB8IChyZWcgPDwgOCk7CiAJcmV0ID0gc3BpX3dyaXRlKHNwaSwgKGNvbnN0IHU4ICopJndvcmQsIHNpemVvZih3b3JkKSk7CkBAIC0xMDgsMTI1ICs1MSwxMyBAQAogCXJldHVybiB3b3JkICYgMHhmZjsKIH0KIAotc3RhdGljIGludCBtYXg3MzAxX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCi17Ci0Jc3RydWN0IG1heDczMDEgKnRzID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBtYXg3MzAxLCBjaGlwKTsKLQl1OCAqY29uZmlnOwotCWludCByZXQ7Ci0KLQkvKiBGaXJzdCA0IHBpbnMgYXJlIHVudXNlZCBpbiB0aGUgY29udHJvbGxlciAqLwotCW9mZnNldCArPSA0OwotCi0JY29uZmlnID0gJnRzLT5wb3J0X2NvbmZpZ1tvZmZzZXQgPj4gMl07Ci0KLQltdXRleF9sb2NrKCZ0cy0+bG9jayk7Ci0KLQkvKiBTdGFuZGFyZCBHUElPIEFQSSBkb2Vzbid0IHN1cHBvcnQgcHVsbC11cHMsIGhhcyB0byBiZSBleHRlbmRlZC4KLQkgKiBIYXJkLWNvZGluZyBubyBwb2xsdXAgZm9yIG5vdy4gKi8KLQkqY29uZmlnID0gKCpjb25maWcgJiB+KDMgPDwgKG9mZnNldCAmIDMpKSkgfCAoMSA8PCAob2Zmc2V0ICYgMykpOwotCi0JcmV0ID0gbWF4NzMwMV93cml0ZSh0cy0+c3BpLCAweDA4ICsgKG9mZnNldCA+PiAyKSwgKmNvbmZpZyk7Ci0KLQltdXRleF91bmxvY2soJnRzLT5sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19tYXg3MzAxX3NldChzdHJ1Y3QgbWF4NzMwMSAqdHMsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQotewotCWlmICh2YWx1ZSkgewotCQl0cy0+b3V0X2xldmVsIHw9IDEgPDwgb2Zmc2V0OwotCQlyZXR1cm4gbWF4NzMwMV93cml0ZSh0cy0+c3BpLCAweDIwICsgb2Zmc2V0LCAweDAxKTsKLQl9IGVsc2UgewotCQl0cy0+b3V0X2xldmVsICY9IH4oMSA8PCBvZmZzZXQpOwotCQlyZXR1cm4gbWF4NzMwMV93cml0ZSh0cy0+c3BpLCAweDIwICsgb2Zmc2V0LCAweDAwKTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgbWF4NzMwMV9kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwKLQkJCQkgICAgaW50IHZhbHVlKQotewotCXN0cnVjdCBtYXg3MzAxICp0cyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbWF4NzMwMSwgY2hpcCk7Ci0JdTggKmNvbmZpZzsKLQlpbnQgcmV0OwotCi0JLyogRmlyc3QgNCBwaW5zIGFyZSB1bnVzZWQgaW4gdGhlIGNvbnRyb2xsZXIgKi8KLQlvZmZzZXQgKz0gNDsKLQotCWNvbmZpZyA9ICZ0cy0+cG9ydF9jb25maWdbb2Zmc2V0ID4+IDJdOwotCi0JbXV0ZXhfbG9jaygmdHMtPmxvY2spOwotCi0JKmNvbmZpZyA9ICgqY29uZmlnICYgfigzIDw8IChvZmZzZXQgJiAzKSkpIHwgKDEgPDwgKG9mZnNldCAmIDMpKTsKLQotCXJldCA9IF9fbWF4NzMwMV9zZXQodHMsIG9mZnNldCwgdmFsdWUpOwotCi0JaWYgKCFyZXQpCi0JCXJldCA9IG1heDczMDFfd3JpdGUodHMtPnNwaSwgMHgwOCArIChvZmZzZXQgPj4gMiksICpjb25maWcpOwotCi0JbXV0ZXhfdW5sb2NrKCZ0cy0+bG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG1heDczMDFfZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKLXsKLQlzdHJ1Y3QgbWF4NzMwMSAqdHMgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG1heDczMDEsIGNoaXApOwotCWludCBjb25maWcsIGxldmVsID0gLUVJTlZBTDsKLQotCS8qIEZpcnN0IDQgcGlucyBhcmUgdW51c2VkIGluIHRoZSBjb250cm9sbGVyICovCi0Jb2Zmc2V0ICs9IDQ7Ci0KLQltdXRleF9sb2NrKCZ0cy0+bG9jayk7Ci0KLQljb25maWcgPSAodHMtPnBvcnRfY29uZmlnW29mZnNldCA+PiAyXSA+PiAoKG9mZnNldCAmIDMpICogMikpICYgMzsKLQotCXN3aXRjaCAoY29uZmlnKSB7Ci0JY2FzZSAxOgotCQkvKiBPdXRwdXQ6IHJldHVybiBjYWNoZWQgbGV2ZWwgKi8KLQkJbGV2ZWwgPSAgISEodHMtPm91dF9sZXZlbCAmICgxIDw8IG9mZnNldCkpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JY2FzZSAzOgotCQkvKiBJbnB1dDogcmVhZCBvdXQgKi8KLQkJbGV2ZWwgPSBtYXg3MzAxX3JlYWQodHMtPnNwaSwgMHgyMCArIG9mZnNldCkgJiAweDAxOwotCX0KLQltdXRleF91bmxvY2soJnRzLT5sb2NrKTsKLQotCXJldHVybiBsZXZlbDsKLX0KLQotc3RhdGljIHZvaWQgbWF4NzMwMV9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCi17Ci0Jc3RydWN0IG1heDczMDEgKnRzID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBtYXg3MzAxLCBjaGlwKTsKLQotCS8qIEZpcnN0IDQgcGlucyBhcmUgdW51c2VkIGluIHRoZSBjb250cm9sbGVyICovCi0Jb2Zmc2V0ICs9IDQ7Ci0KLQltdXRleF9sb2NrKCZ0cy0+bG9jayk7Ci0KLQlfX21heDczMDFfc2V0KHRzLCBvZmZzZXQsIHZhbHVlKTsKLQotCW11dGV4X3VubG9jaygmdHMtPmxvY2spOwotfQotCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBtYXg3MzAxX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IG1heDczMDEgKnRzOwotCXN0cnVjdCBtYXg3MzAxX3BsYXRmb3JtX2RhdGEgKnBkYXRhOwotCWludCBpLCByZXQ7CisJaW50IHJldDsKIAotCXBkYXRhID0gc3BpLT5kZXYucGxhdGZvcm1fZGF0YTsKLQlpZiAoIXBkYXRhIHx8ICFwZGF0YS0+YmFzZSkgewotCQlkZXZfZGJnKCZzcGktPmRldiwgImluY29ycmVjdCBvciBtaXNzaW5nIHBsYXRmb3JtIGRhdGFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIGJpdHNfcGVyX3dvcmQgY2Fubm90IGJlIGNvbmZpZ3VyZWQgaW4gcGxhdGZvcm0gZGF0YQotCSAqLworCS8qIGJpdHNfcGVyX3dvcmQgY2Fubm90IGJlIGNvbmZpZ3VyZWQgaW4gcGxhdGZvcm0gZGF0YSAqLwogCXNwaS0+Yml0c19wZXJfd29yZCA9IDE2OwotCiAJcmV0ID0gc3BpX3NldHVwKHNwaSk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CkBAIC0yMzUsOTAgKzY2LDM1IEBACiAJaWYgKCF0cykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltdXRleF9pbml0KCZ0cy0+bG9jayk7CisJdHMtPnJlYWQgPSBtYXg3MzAxX3NwaV9yZWFkOworCXRzLT53cml0ZSA9IG1heDczMDFfc3BpX3dyaXRlOworCXRzLT5kZXYgPSAmc3BpLT5kZXY7CiAKLQlkZXZfc2V0X2RydmRhdGEoJnNwaS0+ZGV2LCB0cyk7Ci0KLQkvKiBQb3dlciB1cCB0aGUgY2hpcCBhbmQgZGlzYWJsZSBJUlEgb3V0cHV0ICovCi0JbWF4NzMwMV93cml0ZShzcGksIDB4MDQsIDB4MDEpOwotCi0JdHMtPnNwaSA9IHNwaTsKLQotCXRzLT5jaGlwLmxhYmVsID0gRFJJVkVSX05BTUUsCi0KLQl0cy0+Y2hpcC5kaXJlY3Rpb25faW5wdXQgPSBtYXg3MzAxX2RpcmVjdGlvbl9pbnB1dDsKLQl0cy0+Y2hpcC5nZXQgPSBtYXg3MzAxX2dldDsKLQl0cy0+Y2hpcC5kaXJlY3Rpb25fb3V0cHV0ID0gbWF4NzMwMV9kaXJlY3Rpb25fb3V0cHV0OwotCXRzLT5jaGlwLnNldCA9IG1heDczMDFfc2V0OwotCi0JdHMtPmNoaXAuYmFzZSA9IHBkYXRhLT5iYXNlOwotCXRzLT5jaGlwLm5ncGlvID0gUElOX05VTUJFUjsKLQl0cy0+Y2hpcC5jYW5fc2xlZXAgPSAxOwotCXRzLT5jaGlwLmRldiA9ICZzcGktPmRldjsKLQl0cy0+Y2hpcC5vd25lciA9IFRISVNfTU9EVUxFOwotCi0JLyoKLQkgKiB0cmlzdGF0ZSBhbGwgcGlucyBpbiBoYXJkd2FyZSBhbmQgY2FjaGUgdGhlCi0JICogcmVnaXN0ZXIgdmFsdWVzIGZvciBsYXRlciB1c2UuCi0JICovCi0JZm9yIChpID0gMTsgaSA8IDg7IGkrKykgewotCQlpbnQgajsKLQkJLyogMHhBQSBtZWFucyBpbnB1dCB3aXRoIGludGVybmFsIHB1bGx1cCBkaXNhYmxlZCAqLwotCQltYXg3MzAxX3dyaXRlKHNwaSwgMHgwOCArIGksIDB4QUEpOwotCQl0cy0+cG9ydF9jb25maWdbaV0gPSAweEFBOwotCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7Ci0JCQlpbnQgb2Zmc2V0ID0gKGkgLSAxKSAqIDQgKyBqOwotCQkJcmV0ID0gbWF4NzMwMV9kaXJlY3Rpb25faW5wdXQoJnRzLT5jaGlwLCBvZmZzZXQpOwotCQkJaWYgKHJldCkKLQkJCQlnb3RvIGV4aXRfZGVzdHJveTsKLQkJfQotCX0KLQotCXJldCA9IGdwaW9jaGlwX2FkZCgmdHMtPmNoaXApOworCXJldCA9IF9fbWF4NzMweF9wcm9iZSh0cyk7CiAJaWYgKHJldCkKLQkJZ290byBleGl0X2Rlc3Ryb3k7Ci0KLQlyZXR1cm4gcmV0OwotCi1leGl0X2Rlc3Ryb3k6Ci0JZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgTlVMTCk7Ci0JbXV0ZXhfZGVzdHJveSgmdHMtPmxvY2spOwotCWtmcmVlKHRzKTsKKwkJa2ZyZWUodHMpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IG1heDczMDFfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7Ci0Jc3RydWN0IG1heDczMDEgKnRzOwotCWludCByZXQ7Ci0KLQl0cyA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwotCWlmICh0cyA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIE5VTEwpOwotCi0JLyogUG93ZXIgZG93biB0aGUgY2hpcCBhbmQgZGlzYWJsZSBJUlEgb3V0cHV0ICovCi0JbWF4NzMwMV93cml0ZShzcGksIDB4MDQsIDB4MDApOwotCi0JcmV0ID0gZ3Bpb2NoaXBfcmVtb3ZlKCZ0cy0+Y2hpcCk7Ci0JaWYgKCFyZXQpIHsKLQkJbXV0ZXhfZGVzdHJveSgmdHMtPmxvY2spOwotCQlrZnJlZSh0cyk7Ci0JfSBlbHNlCi0JCWRldl9lcnIoJnNwaS0+ZGV2LCAiRmFpbGVkIHRvIHJlbW92ZSB0aGUgR1BJTyBjb250cm9sbGVyOiAlZFxuIiwKLQkJCXJldCk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBfX21heDczMHhfcmVtb3ZlKCZzcGktPmRldik7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3BpX2RldmljZV9pZCBtYXg3MzAxX2lkW10gPSB7CisJeyAibWF4NzMwMSIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHNwaSwgbWF4NzMwMV9pZCk7CisKIHN0YXRpYyBzdHJ1Y3Qgc3BpX2RyaXZlciBtYXg3MzAxX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZQkJPSBEUklWRVJfTkFNRSwKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCQkubmFtZSA9ICJtYXg3MzAxIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJfSwKLQkucHJvYmUJCT0gbWF4NzMwMV9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1heDczMDFfcmVtb3ZlKSwKKwkucHJvYmUgPSBtYXg3MzAxX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChtYXg3MzAxX3JlbW92ZSksCisJLmlkX3RhYmxlID0gbWF4NzMwMV9pZCwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG1heDczMDFfaW5pdCh2b2lkKQpAQCAtMzM2LDcgKzExMiw2IEBACiB9CiBtb2R1bGVfZXhpdChtYXg3MzAxX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCJKdWVyZ2VuIEJlaXNlcnQiKTsKK01PRFVMRV9BVVRIT1IoIkp1ZXJnZW4gQmVpc2VydCwgV29sZnJhbSBTYW5nIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk1BWDczMDEgU1BJIGJhc2VkIEdQSU8tRXhwYW5kZXIiKTsKLU1PRFVMRV9BTElBUygic3BpOiIgRFJJVkVSX05BTUUpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJNQVg3MzAxIEdQSU8tRXhwYW5kZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9tYXg3MzB4LmMgYi9kcml2ZXJzL2dwaW8vbWF4NzMweC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YmNlZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwaW8vbWF4NzMweC5jCkBAIC0wLDAgKzEsMjQ0IEBACisvKioKKyAqIGRyaXZlcnMvZ3Bpby9tYXg3MzAxLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSnVlcmdlbiBCZWlzZXJ0LCBQZW5ndXRyb25peAorICogQ29weXJpZ2h0IChDKSAyMDA4IEd1ZW5uYWRpIExpYWtob3ZldHNraSwgUGVuZ3V0cm9uaXgKKyAqIENvcHlyaWdodCAoQykgMjAwOSBXb2xmcmFtIFNhbmcsIFBlbmd1dHJvbml4CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGUgTWF4aW0gTUFYNzMwMC8xIGRldmljZSBpcyBhbiBJMkMvU1BJIGRyaXZlbiBHUElPIGV4cGFuZGVyLiBUaGVyZSBhcmUKKyAqIDI4IEdQSU9zLiA4IG9mIHRoZW0gY2FuIHRyaWdnZXIgYW4gaW50ZXJydXB0LiBTZWUgZGF0YXNoZWV0IGZvciBtb3JlCisgKiBkZXRhaWxzCisgKiBOb3RlOgorICogLSBESU4gbXVzdCBiZSBzdGFibGUgYXQgdGhlIHJpc2luZyBlZGdlIG9mIGNsb2NrLgorICogLSB3aGVuIHdyaXRpbmc6CisgKiAgIC0gYWx3YXlzIGNsb2NrIGluIDE2IGNsb2NrcyBhdCBvbmNlCisgKiAgIC0gYXQgRElOOiBEMTUgZmlyc3QsIEQwIGxhc3QKKyAqICAgLSBEMC4uRDcgPSBkYXRhYnl0ZSwgRDguLkQxNCA9IGNvbW1hbmRieXRlCisgKiAgIC0gRDE1ID0gbG93IC0+IHdyaXRlIGNvbW1hbmQKKyAqIC0gd2hlbiByZWFkaW5nCisgKiAgIC0gYWx3YXlzIGNsb2NrIGluIDE2IGNsb2NrcyBhdCBvbmNlCisgKiAgIC0gYXQgRElOOiBEMTUgZmlyc3QsIEQwIGxhc3QKKyAqICAgLSBEMC4uRDcgPSBkdW1teSwgRDguLkQxNCA9IHJlZ2lzdGVyIGFkZHJlc3MKKyAqICAgLSBEMTUgPSBoaWdoIC0+IHJlYWQgY29tbWFuZAorICogICAtIHJhaXNlIENTIGFuZCBhc3NlcnQgaXQgYWdhaW4KKyAqICAgLSBhbHdheXMgY2xvY2sgaW4gMTYgY2xvY2tzIGF0IG9uY2UKKyAqICAgLSBhdCBET1VUOiBEMTUgZmlyc3QsIEQwIGxhc3QKKyAqICAgLSBEMC4uRDcgY29udGFpbnMgdGhlIGRhdGEgZnJvbSB0aGUgZmlyc3QgY3ljbGUKKyAqCisgKiBUaGUgZHJpdmVyIGV4cG9ydHMgYSBzdGFuZGFyZCBncGlvY2hpcCBpbnRlcmZhY2UKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpL21heDczMDEuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKy8qCisgKiBQaW4gY29uZmlndXJhdGlvbnMsIHNlZSBNQVg3MzAxIGRhdGFzaGVldCBwYWdlIDYKKyAqLworI2RlZmluZSBQSU5fQ09ORklHX01BU0sgMHgwMworI2RlZmluZSBQSU5fQ09ORklHX0lOX1BVTExVUCAweDAzCisjZGVmaW5lIFBJTl9DT05GSUdfSU5fV09fUFVMTFVQIDB4MDIKKyNkZWZpbmUgUElOX0NPTkZJR19PVVQgMHgwMQorCisjZGVmaW5lIFBJTl9OVU1CRVIgMjgKKworc3RhdGljIGludCBtYXg3MzAxX2RpcmVjdGlvbl9pbnB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IG1heDczMDEgKnRzID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBtYXg3MzAxLCBjaGlwKTsKKwl1OCAqY29uZmlnOworCXU4IG9mZnNldF9iaXRzOworCWludCByZXQ7CisKKwkvKiBGaXJzdCA0IHBpbnMgYXJlIHVudXNlZCBpbiB0aGUgY29udHJvbGxlciAqLworCW9mZnNldCArPSA0OworCW9mZnNldF9iaXRzID0gKG9mZnNldCAmIDMpIDw8IDE7CisKKwljb25maWcgPSAmdHMtPnBvcnRfY29uZmlnW29mZnNldCA+PiAyXTsKKworCW11dGV4X2xvY2soJnRzLT5sb2NrKTsKKworCS8qIFN0YW5kYXJkIEdQSU8gQVBJIGRvZXNuJ3Qgc3VwcG9ydCBwdWxsLXVwcywgaGFzIHRvIGJlIGV4dGVuZGVkLgorCSAqIEhhcmQtY29kaW5nIG5vIHBvbGx1cCBmb3Igbm93LiAqLworCSpjb25maWcgPSAoKmNvbmZpZyAmIH4oUElOX0NPTkZJR19NQVNLIDw8IG9mZnNldF9iaXRzKSkKKwkJCSAgIHwgKFBJTl9DT05GSUdfSU5fV09fUFVMTFVQIDw8IG9mZnNldF9iaXRzKTsKKworCXJldCA9IHRzLT53cml0ZSh0cy0+ZGV2LCAweDA4ICsgKG9mZnNldCA+PiAyKSwgKmNvbmZpZyk7CisKKwltdXRleF91bmxvY2soJnRzLT5sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19tYXg3MzAxX3NldChzdHJ1Y3QgbWF4NzMwMSAqdHMsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCWlmICh2YWx1ZSkgeworCQl0cy0+b3V0X2xldmVsIHw9IDEgPDwgb2Zmc2V0OworCQlyZXR1cm4gdHMtPndyaXRlKHRzLT5kZXYsIDB4MjAgKyBvZmZzZXQsIDB4MDEpOworCX0gZWxzZSB7CisJCXRzLT5vdXRfbGV2ZWwgJj0gfigxIDw8IG9mZnNldCk7CisJCXJldHVybiB0cy0+d3JpdGUodHMtPmRldiwgMHgyMCArIG9mZnNldCwgMHgwMCk7CisJfQorfQorCitzdGF0aWMgaW50IG1heDczMDFfZGlyZWN0aW9uX291dHB1dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsCisJCQkJICAgIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3QgbWF4NzMwMSAqdHMgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IG1heDczMDEsIGNoaXApOworCXU4ICpjb25maWc7CisJdTggb2Zmc2V0X2JpdHM7CisJaW50IHJldDsKKworCS8qIEZpcnN0IDQgcGlucyBhcmUgdW51c2VkIGluIHRoZSBjb250cm9sbGVyICovCisJb2Zmc2V0ICs9IDQ7CisJb2Zmc2V0X2JpdHMgPSAob2Zmc2V0ICYgMykgPDwgMTsKKworCWNvbmZpZyA9ICZ0cy0+cG9ydF9jb25maWdbb2Zmc2V0ID4+IDJdOworCisJbXV0ZXhfbG9jaygmdHMtPmxvY2spOworCisJKmNvbmZpZyA9ICgqY29uZmlnICYgfihQSU5fQ09ORklHX01BU0sgPDwgb2Zmc2V0X2JpdHMpKQorCQkJICAgfCAoUElOX0NPTkZJR19PVVQgPDwgb2Zmc2V0X2JpdHMpOworCisJcmV0ID0gX19tYXg3MzAxX3NldCh0cywgb2Zmc2V0LCB2YWx1ZSk7CisKKwlpZiAoIXJldCkKKwkJcmV0ID0gdHMtPndyaXRlKHRzLT5kZXYsIDB4MDggKyAob2Zmc2V0ID4+IDIpLCAqY29uZmlnKTsKKworCW11dGV4X3VubG9jaygmdHMtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYXg3MzAxX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IG1heDczMDEgKnRzID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBtYXg3MzAxLCBjaGlwKTsKKwlpbnQgY29uZmlnLCBsZXZlbCA9IC1FSU5WQUw7CisKKwkvKiBGaXJzdCA0IHBpbnMgYXJlIHVudXNlZCBpbiB0aGUgY29udHJvbGxlciAqLworCW9mZnNldCArPSA0OworCisJbXV0ZXhfbG9jaygmdHMtPmxvY2spOworCisJY29uZmlnID0gKHRzLT5wb3J0X2NvbmZpZ1tvZmZzZXQgPj4gMl0gPj4gKChvZmZzZXQgJiAzKSA8PCAxKSkKKwkJCSYgUElOX0NPTkZJR19NQVNLOworCisJc3dpdGNoIChjb25maWcpIHsKKwljYXNlIFBJTl9DT05GSUdfT1VUOgorCQkvKiBPdXRwdXQ6IHJldHVybiBjYWNoZWQgbGV2ZWwgKi8KKwkJbGV2ZWwgPSAgISEodHMtPm91dF9sZXZlbCAmICgxIDw8IG9mZnNldCkpOworCQlicmVhazsKKwljYXNlIFBJTl9DT05GSUdfSU5fV09fUFVMTFVQOgorCWNhc2UgUElOX0NPTkZJR19JTl9QVUxMVVA6CisJCS8qIElucHV0OiByZWFkIG91dCAqLworCQlsZXZlbCA9IHRzLT5yZWFkKHRzLT5kZXYsIDB4MjAgKyBvZmZzZXQpICYgMHgwMTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ0cy0+bG9jayk7CisKKwlyZXR1cm4gbGV2ZWw7Cit9CisKK3N0YXRpYyB2b2lkIG1heDczMDFfc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCBtYXg3MzAxICp0cyA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgbWF4NzMwMSwgY2hpcCk7CisKKwkvKiBGaXJzdCA0IHBpbnMgYXJlIHVudXNlZCBpbiB0aGUgY29udHJvbGxlciAqLworCW9mZnNldCArPSA0OworCisJbXV0ZXhfbG9jaygmdHMtPmxvY2spOworCisJX19tYXg3MzAxX3NldCh0cywgb2Zmc2V0LCB2YWx1ZSk7CisKKwltdXRleF91bmxvY2soJnRzLT5sb2NrKTsKK30KKworaW50IF9fZGV2aW5pdCBfX21heDczMHhfcHJvYmUoc3RydWN0IG1heDczMDEgKnRzKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IHRzLT5kZXY7CisJc3RydWN0IG1heDczMDFfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJaW50IGksIHJldDsKKworCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEgfHwgIXBkYXRhLT5iYXNlKSB7CisJCWRldl9lcnIoZGV2LCAiaW5jb3JyZWN0IG9yIG1pc3NpbmcgcGxhdGZvcm0gZGF0YVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2luaXQoJnRzLT5sb2NrKTsKKwlkZXZfc2V0X2RydmRhdGEoZGV2LCB0cyk7CisKKwkvKiBQb3dlciB1cCB0aGUgY2hpcCBhbmQgZGlzYWJsZSBJUlEgb3V0cHV0ICovCisJdHMtPndyaXRlKGRldiwgMHgwNCwgMHgwMSk7CisKKwl0cy0+Y2hpcC5sYWJlbCA9IGRldi0+ZHJpdmVyLT5uYW1lOworCisJdHMtPmNoaXAuZGlyZWN0aW9uX2lucHV0ID0gbWF4NzMwMV9kaXJlY3Rpb25faW5wdXQ7CisJdHMtPmNoaXAuZ2V0ID0gbWF4NzMwMV9nZXQ7CisJdHMtPmNoaXAuZGlyZWN0aW9uX291dHB1dCA9IG1heDczMDFfZGlyZWN0aW9uX291dHB1dDsKKwl0cy0+Y2hpcC5zZXQgPSBtYXg3MzAxX3NldDsKKworCXRzLT5jaGlwLmJhc2UgPSBwZGF0YS0+YmFzZTsKKwl0cy0+Y2hpcC5uZ3BpbyA9IFBJTl9OVU1CRVI7CisJdHMtPmNoaXAuY2FuX3NsZWVwID0gMTsKKwl0cy0+Y2hpcC5kZXYgPSBkZXY7CisJdHMtPmNoaXAub3duZXIgPSBUSElTX01PRFVMRTsKKworCS8qCisJICogdHJpc3RhdGUgYWxsIHBpbnMgaW4gaGFyZHdhcmUgYW5kIGNhY2hlIHRoZQorCSAqIHJlZ2lzdGVyIHZhbHVlcyBmb3IgbGF0ZXIgdXNlLgorCSAqLworCWZvciAoaSA9IDE7IGkgPCA4OyBpKyspIHsKKwkJaW50IGo7CisJCS8qIDB4QUEgbWVhbnMgaW5wdXQgd2l0aCBpbnRlcm5hbCBwdWxsdXAgZGlzYWJsZWQgKi8KKwkJdHMtPndyaXRlKGRldiwgMHgwOCArIGksIDB4QUEpOworCQl0cy0+cG9ydF9jb25maWdbaV0gPSAweEFBOworCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKSB7CisJCQlpbnQgb2Zmc2V0ID0gKGkgLSAxKSAqIDQgKyBqOworCQkJcmV0ID0gbWF4NzMwMV9kaXJlY3Rpb25faW5wdXQoJnRzLT5jaGlwLCBvZmZzZXQpOworCQkJaWYgKHJldCkKKwkJCQlnb3RvIGV4aXRfZGVzdHJveTsKKwkJfQorCX0KKworCXJldCA9IGdwaW9jaGlwX2FkZCgmdHMtPmNoaXApOworCWlmIChyZXQpCisJCWdvdG8gZXhpdF9kZXN0cm95OworCisJcmV0dXJuIHJldDsKKworZXhpdF9kZXN0cm95OgorCWRldl9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCW11dGV4X2Rlc3Ryb3koJnRzLT5sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwoX19tYXg3MzB4X3Byb2JlKTsKKworaW50IF9fZGV2ZXhpdCBfX21heDczMHhfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgbWF4NzMwMSAqdHMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcmV0OworCisJaWYgKHRzID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CisKKwkvKiBQb3dlciBkb3duIHRoZSBjaGlwIGFuZCBkaXNhYmxlIElSUSBvdXRwdXQgKi8KKwl0cy0+d3JpdGUoZGV2LCAweDA0LCAweDAwKTsKKworCXJldCA9IGdwaW9jaGlwX3JlbW92ZSgmdHMtPmNoaXApOworCWlmICghcmV0KSB7CisJCW11dGV4X2Rlc3Ryb3koJnRzLT5sb2NrKTsKKwkJa2ZyZWUodHMpOworCX0gZWxzZQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byByZW1vdmUgR1BJTyBjb250cm9sbGVyOiAlZFxuIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX21heDczMHhfcmVtb3ZlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMgYi9kcml2ZXJzL2dwaW8vcGNhOTUzeC5jCmluZGV4IDZhMmZiM2YuLmFiNWRhYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3Bpby9wY2E5NTN4LmMKKysrIGIvZHJpdmVycy9ncGlvL3BjYTk1M3guYwpAQCAtMTQsNiArMTQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjL3BjYTk1M3guaD4KICNpZmRlZiBDT05GSUdfT0ZfR1BJTwpAQCAtMjYsMjMgKzI4LDI4IEBACiAjZGVmaW5lIFBDQTk1M1hfSU5WRVJUICAgICAgICAgMgogI2RlZmluZSBQQ0E5NTNYX0RJUkVDVElPTiAgICAgIDMKIAorI2RlZmluZSBQQ0E5NTNYX0dQSU9TCSAgICAgICAweDAwRkYKKyNkZWZpbmUgUENBOTUzWF9JTlQJICAgICAgIDB4MDEwMAorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgcGNhOTUzeF9pZFtdID0gewotCXsgInBjYTk1MzQiLCA4LCB9LAotCXsgInBjYTk1MzUiLCAxNiwgfSwKKwl7ICJwY2E5NTM0IiwgOCAgfCBQQ0E5NTNYX0lOVCwgfSwKKwl7ICJwY2E5NTM1IiwgMTYgfCBQQ0E5NTNYX0lOVCwgfSwKIAl7ICJwY2E5NTM2IiwgNCwgfSwKLQl7ICJwY2E5NTM3IiwgNCwgfSwKLQl7ICJwY2E5NTM4IiwgOCwgfSwKLQl7ICJwY2E5NTM5IiwgMTYsIH0sCi0JeyAicGNhOTU1NCIsIDgsIH0sCi0JeyAicGNhOTU1NSIsIDE2LCB9LAorCXsgInBjYTk1MzciLCA0ICB8IFBDQTk1M1hfSU5ULCB9LAorCXsgInBjYTk1MzgiLCA4ICB8IFBDQTk1M1hfSU5ULCB9LAorCXsgInBjYTk1MzkiLCAxNiB8IFBDQTk1M1hfSU5ULCB9LAorCXsgInBjYTk1NTQiLCA4ICB8IFBDQTk1M1hfSU5ULCB9LAorCXsgInBjYTk1NTUiLCAxNiB8IFBDQTk1M1hfSU5ULCB9LAogCXsgInBjYTk1NTYiLCA4LCB9LAogCXsgInBjYTk1NTciLCA4LCB9LAogCiAJeyAibWF4NzMxMCIsIDgsIH0sCi0JeyAibWF4NzMxNSIsIDgsIH0sCi0JeyAicGNhNjEwNyIsIDgsIH0sCi0JeyAidGNhNjQwOCIsIDgsIH0sCi0JeyAidGNhNjQxNiIsIDE2LCB9LAorCXsgIm1heDczMTIiLCAxNiB8IFBDQTk1M1hfSU5ULCB9LAorCXsgIm1heDczMTMiLCAxNiB8IFBDQTk1M1hfSU5ULCB9LAorCXsgIm1heDczMTUiLCA4ICB8IFBDQTk1M1hfSU5ULCB9LAorCXsgInBjYTYxMDciLCA4ICB8IFBDQTk1M1hfSU5ULCB9LAorCXsgInRjYTY0MDgiLCA4ICB8IFBDQTk1M1hfSU5ULCB9LAorCXsgInRjYTY0MTYiLCAxNiB8IFBDQTk1M1hfSU5ULCB9LAogCS8qIE5ZRVQ6ICB7ICJ0Y2E2NDI0IiwgMjQsIH0sICovCiAJeyB9CiB9OwpAQCAtNTMsNiArNjAsMTUgQEAKIAl1aW50MTZfdCByZWdfb3V0cHV0OwogCXVpbnQxNl90IHJlZ19kaXJlY3Rpb247CiAKKyNpZmRlZiBDT05GSUdfR1BJT19QQ0E5NTNYX0lSUQorCXN0cnVjdCBtdXRleCBpcnFfbG9jazsKKwl1aW50MTZfdCBpcnFfbWFzazsKKwl1aW50MTZfdCBpcnFfc3RhdDsKKwl1aW50MTZfdCBpcnFfdHJpZ19yYWlzZTsKKwl1aW50MTZfdCBpcnFfdHJpZ19mYWxsOworCWludAkgaXJxX2Jhc2U7CisjZW5kaWYKKwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHBjYTk1M3hfcGxhdGZvcm1fZGF0YSAqZHluX3BkYXRhOwogCXN0cnVjdCBncGlvX2NoaXAgZ3Bpb19jaGlwOwpAQCAtMjAyLDYgKzIxOCwyMTAgQEAKIAlnYy0+bmFtZXMgPSBjaGlwLT5uYW1lczsKIH0KIAorI2lmZGVmIENPTkZJR19HUElPX1BDQTk1M1hfSVJRCitzdGF0aWMgaW50IHBjYTk1M3hfZ3Bpb190b19pcnEoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIG9mZikKK3sKKwlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwOworCisJY2hpcCA9IGNvbnRhaW5lcl9vZihnYywgc3RydWN0IHBjYTk1M3hfY2hpcCwgZ3Bpb19jaGlwKTsKKwlyZXR1cm4gY2hpcC0+aXJxX2Jhc2UgKyBvZmY7Cit9CisKK3N0YXRpYyB2b2lkIHBjYTk1M3hfaXJxX21hc2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKworCWNoaXAtPmlycV9tYXNrICY9IH4oMSA8PCAoaXJxIC0gY2hpcC0+aXJxX2Jhc2UpKTsKK30KKworc3RhdGljIHZvaWQgcGNhOTUzeF9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IHBjYTk1M3hfY2hpcCAqY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisKKwljaGlwLT5pcnFfbWFzayB8PSAxIDw8IChpcnEgLSBjaGlwLT5pcnFfYmFzZSk7Cit9CisKK3N0YXRpYyB2b2lkIHBjYTk1M3hfaXJxX2J1c19sb2NrKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IHBjYTk1M3hfY2hpcCAqY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisKKwltdXRleF9sb2NrKCZjaGlwLT5pcnFfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIHBjYTk1M3hfaXJxX2J1c19zeW5jX3VubG9jayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pcnFfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgcGNhOTUzeF9pcnFfc2V0X3R5cGUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IHR5cGUpCit7CisJc3RydWN0IHBjYTk1M3hfY2hpcCAqY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJdWludDE2X3QgbGV2ZWwgPSBpcnEgLSBjaGlwLT5pcnFfYmFzZTsKKwl1aW50MTZfdCBtYXNrID0gMSA8PCBsZXZlbDsKKworCWlmICghKHR5cGUgJiBJUlFfVFlQRV9FREdFX0JPVEgpKSB7CisJCWRldl9lcnIoJmNoaXAtPmNsaWVudC0+ZGV2LCAiaXJxICVkOiB1bnN1cHBvcnRlZCB0eXBlICVkXG4iLAorCQkJaXJxLCB0eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHR5cGUgJiBJUlFfVFlQRV9FREdFX0ZBTExJTkcpCisJCWNoaXAtPmlycV90cmlnX2ZhbGwgfD0gbWFzazsKKwllbHNlCisJCWNoaXAtPmlycV90cmlnX2ZhbGwgJj0gfm1hc2s7CisKKwlpZiAodHlwZSAmIElSUV9UWVBFX0VER0VfUklTSU5HKQorCQljaGlwLT5pcnFfdHJpZ19yYWlzZSB8PSBtYXNrOworCWVsc2UKKwkJY2hpcC0+aXJxX3RyaWdfcmFpc2UgJj0gfm1hc2s7CisKKwlyZXR1cm4gcGNhOTUzeF9ncGlvX2RpcmVjdGlvbl9pbnB1dCgmY2hpcC0+Z3Bpb19jaGlwLCBsZXZlbCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgcGNhOTUzeF9pcnFfY2hpcCA9IHsKKwkubmFtZQkJCT0gInBjYTk1M3giLAorCS5tYXNrCQkJPSBwY2E5NTN4X2lycV9tYXNrLAorCS51bm1hc2sJCQk9IHBjYTk1M3hfaXJxX3VubWFzaywKKwkuYnVzX2xvY2sJCT0gcGNhOTUzeF9pcnFfYnVzX2xvY2ssCisJLmJ1c19zeW5jX3VubG9jawk9IHBjYTk1M3hfaXJxX2J1c19zeW5jX3VubG9jaywKKwkuc2V0X3R5cGUJCT0gcGNhOTUzeF9pcnFfc2V0X3R5cGUsCit9OworCitzdGF0aWMgdWludDE2X3QgcGNhOTUzeF9pcnFfcGVuZGluZyhzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwKQoreworCXVpbnQxNl90IGN1cl9zdGF0OworCXVpbnQxNl90IG9sZF9zdGF0OworCXVpbnQxNl90IHBlbmRpbmc7CisJdWludDE2X3QgdHJpZ2dlcjsKKwlpbnQgcmV0OworCisJcmV0ID0gcGNhOTUzeF9yZWFkX3JlZyhjaGlwLCBQQ0E5NTNYX0lOUFVULCAmY3VyX3N0YXQpOworCWlmIChyZXQpCisJCXJldHVybiAwOworCisJLyogUmVtb3ZlIG91dHB1dCBwaW5zIGZyb20gdGhlIGVxdWF0aW9uICovCisJY3VyX3N0YXQgJj0gY2hpcC0+cmVnX2RpcmVjdGlvbjsKKworCW9sZF9zdGF0ID0gY2hpcC0+aXJxX3N0YXQ7CisJdHJpZ2dlciA9IChjdXJfc3RhdCBeIG9sZF9zdGF0KSAmIGNoaXAtPmlycV9tYXNrOworCisJaWYgKCF0cmlnZ2VyKQorCQlyZXR1cm4gMDsKKworCWNoaXAtPmlycV9zdGF0ID0gY3VyX3N0YXQ7CisKKwlwZW5kaW5nID0gKG9sZF9zdGF0ICYgY2hpcC0+aXJxX3RyaWdfZmFsbCkgfAorCQkgIChjdXJfc3RhdCAmIGNoaXAtPmlycV90cmlnX3JhaXNlKTsKKwlwZW5kaW5nICY9IHRyaWdnZXI7CisKKwlyZXR1cm4gcGVuZGluZzsKK30KKworc3RhdGljIGlycXJldHVybl90IHBjYTk1M3hfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2aWQpCit7CisJc3RydWN0IHBjYTk1M3hfY2hpcCAqY2hpcCA9IGRldmlkOworCXVpbnQxNl90IHBlbmRpbmc7CisJdWludDE2X3QgbGV2ZWw7CisKKwlwZW5kaW5nID0gcGNhOTUzeF9pcnFfcGVuZGluZyhjaGlwKTsKKworCWlmICghcGVuZGluZykKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJZG8geworCQlsZXZlbCA9IF9fZmZzKHBlbmRpbmcpOworCQloYW5kbGVfbmVzdGVkX2lycShsZXZlbCArIGNoaXAtPmlycV9iYXNlKTsKKworCQlwZW5kaW5nICY9IH4oMSA8PCBsZXZlbCk7CisJfSB3aGlsZSAocGVuZGluZyk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgcGNhOTUzeF9pcnFfc2V0dXAoc3RydWN0IHBjYTk1M3hfY2hpcCAqY2hpcCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBjaGlwLT5jbGllbnQ7CisJc3RydWN0IHBjYTk1M3hfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCByZXQ7CisKKwlpZiAocGRhdGEtPmlycV9iYXNlICYmIChpZC0+ZHJpdmVyX2RhdGEgJiBQQ0E5NTNYX0lOVCkpIHsKKwkJaW50IGx2bDsKKworCQlyZXQgPSBwY2E5NTN4X3JlYWRfcmVnKGNoaXAsIFBDQTk1M1hfSU5QVVQsCisJCQkJICAgICAgICZjaGlwLT5pcnFfc3RhdCk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dF9mYWlsZWQ7CisKKwkJLyoKKwkJICogVGhlcmUgaXMgbm8gd2F5IHRvIGtub3cgd2hpY2ggR1BJTyBsaW5lIGdlbmVyYXRlZCB0aGUKKwkJICogaW50ZXJydXB0LiAgV2UgaGF2ZSB0byByZWx5IG9uIHRoZSBwcmV2aW91cyByZWFkIGZvcgorCQkgKiB0aGlzIHB1cnBvc2UuCisJCSAqLworCQljaGlwLT5pcnFfc3RhdCAmPSBjaGlwLT5yZWdfZGlyZWN0aW9uOworCQljaGlwLT5pcnFfYmFzZSA9IHBkYXRhLT5pcnFfYmFzZTsKKwkJbXV0ZXhfaW5pdCgmY2hpcC0+aXJxX2xvY2spOworCisJCWZvciAobHZsID0gMDsgbHZsIDwgY2hpcC0+Z3Bpb19jaGlwLm5ncGlvOyBsdmwrKykgeworCQkJaW50IGlycSA9IGx2bCArIGNoaXAtPmlycV9iYXNlOworCisJCQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsIGNoaXApOworCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGlycSwgJnBjYTk1M3hfaXJxX2NoaXAsCisJCQkJCQkgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJCXNldF9pcnFfbmVzdGVkX3RocmVhZChpcnEsIDEpOworI2lmZGVmIENPTkZJR19BUk0KKwkJCXNldF9pcnFfZmxhZ3MoaXJxLCBJUlFGX1ZBTElEKTsKKyNlbHNlCisJCQlzZXRfaXJxX25vcHJvYmUoaXJxKTsKKyNlbmRpZgorCQl9CisKKwkJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoY2xpZW50LT5pcnEsCisJCQkJCSAgIE5VTEwsCisJCQkJCSAgIHBjYTk1M3hfaXJxX2hhbmRsZXIsCisJCQkJCSAgIElSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9PTkVTSE9ULAorCQkJCQkgICBkZXZfbmFtZSgmY2xpZW50LT5kZXYpLCBjaGlwKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gcmVxdWVzdCBpcnEgJWRcbiIsCisJCQkJY2xpZW50LT5pcnEpOworCQkJZ290byBvdXRfZmFpbGVkOworCQl9CisKKwkJY2hpcC0+Z3Bpb19jaGlwLnRvX2lycSA9IHBjYTk1M3hfZ3Bpb190b19pcnE7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9mYWlsZWQ6CisJY2hpcC0+aXJxX2Jhc2UgPSAwOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHBjYTk1M3hfaXJxX3RlYXJkb3duKHN0cnVjdCBwY2E5NTN4X2NoaXAgKmNoaXApCit7CisJaWYgKGNoaXAtPmlycV9iYXNlKQorCQlmcmVlX2lycShjaGlwLT5jbGllbnQtPmlycSwgY2hpcCk7Cit9CisjZWxzZSAvKiBDT05GSUdfR1BJT19QQ0E5NTNYX0lSUSAqLworc3RhdGljIGludCBwY2E5NTN4X2lycV9zZXR1cChzdHJ1Y3QgcGNhOTUzeF9jaGlwICpjaGlwLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGNoaXAtPmNsaWVudDsKKwlzdHJ1Y3QgcGNhOTUzeF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlpZiAocGRhdGEtPmlycV9iYXNlICYmIChpZC0+ZHJpdmVyX2RhdGEgJiBQQ0E5NTNYX0lOVCkpCisJCWRldl93YXJuKCZjbGllbnQtPmRldiwgImludGVycnVwdCBzdXBwb3J0IG5vdCBjb21waWxlZCBpblxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGNhOTUzeF9pcnFfdGVhcmRvd24oc3RydWN0IHBjYTk1M3hfY2hpcCAqY2hpcCkKK3sKK30KKyNlbmRpZgorCiAvKgogICogSGFuZGxlcnMgZm9yIGFsdGVybmF0aXZlIHNvdXJjZXMgb2YgcGxhdGZvcm1fZGF0YQogICovCkBAIC0yODYsNyArNTA2LDcgQEAKIAkvKiBpbml0aWFsaXplIGNhY2hlZCByZWdpc3RlcnMgZnJvbSB0aGVpciBvcmlnaW5hbCB2YWx1ZXMuCiAJICogd2UgY2FuJ3Qgc2hhcmUgdGhpcyBjaGlwIHdpdGggYW5vdGhlciBpMmMgbWFzdGVyLgogCSAqLwotCXBjYTk1M3hfc2V0dXBfZ3BpbyhjaGlwLCBpZC0+ZHJpdmVyX2RhdGEpOworCXBjYTk1M3hfc2V0dXBfZ3BpbyhjaGlwLCBpZC0+ZHJpdmVyX2RhdGEgJiBQQ0E5NTNYX0dQSU9TKTsKIAogCXJldCA9IHBjYTk1M3hfcmVhZF9yZWcoY2hpcCwgUENBOTUzWF9PVVRQVVQsICZjaGlwLT5yZWdfb3V0cHV0KTsKIAlpZiAocmV0KQpAQCAtMzAxLDYgKzUyMSw5IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfZmFpbGVkOwogCisJcmV0ID0gcGNhOTUzeF9pcnFfc2V0dXAoY2hpcCwgaWQpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2ZhaWxlZDsKIAogCXJldCA9IGdwaW9jaGlwX2FkZCgmY2hpcC0+Z3Bpb19jaGlwKTsKIAlpZiAocmV0KQpAQCAtMzE3LDYgKzU0MCw3IEBACiAJcmV0dXJuIDA7CiAKIG91dF9mYWlsZWQ6CisJcGNhOTUzeF9pcnFfdGVhcmRvd24oY2hpcCk7CiAJa2ZyZWUoY2hpcC0+ZHluX3BkYXRhKTsKIAlrZnJlZShjaGlwKTsKIAlyZXR1cm4gcmV0OwpAQCAtMzQ1LDYgKzU2OSw3IEBACiAJCXJldHVybiByZXQ7CiAJfQogCisJcGNhOTUzeF9pcnFfdGVhcmRvd24oY2hpcCk7CiAJa2ZyZWUoY2hpcC0+ZHluX3BkYXRhKTsKIAlrZnJlZShjaGlwKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3Bpby9wbDA2MS5jIGIvZHJpdmVycy9ncGlvL3BsMDYxLmMKaW5kZXggNGVlNGM4My4uM2FkMWVlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncGlvL3BsMDYxLmMKKysrIGIvZHJpdmVycy9ncGlvL3BsMDYxLmMKQEAgLTIxOSw3ICsyMTksNyBAQAogCQlpZiAocGVuZGluZyA9PSAwKQogCQkJY29udGludWU7CiAKLQkJZm9yX2VhY2hfYml0KG9mZnNldCwgJnBlbmRpbmcsIFBMMDYxX0dQSU9fTlIpCisJCWZvcl9lYWNoX3NldF9iaXQob2Zmc2V0LCAmcGVuZGluZywgUEwwNjFfR1BJT19OUikKIAkJCWdlbmVyaWNfaGFuZGxlX2lycShwbDA2MV90b19pcnEoJmNoaXAtPmdjLCBvZmZzZXQpKTsKIAl9CiAJZGVzYy0+Y2hpcC0+dW5tYXNrKGlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwaW8vc2NoX2dwaW8uYyBiL2RyaXZlcnMvZ3Bpby9zY2hfZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MzUyMTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwaW8vc2NoX2dwaW8uYwpAQCAtMCwwICsxLDI5NSBAQAorLyoKKyAqICBzY2hfZ3Bpby5jIC0gR1BJTyBpbnRlcmZhY2UgZm9yIEludGVsIFBvdWxzYm8gU0NICisgKgorICogIENvcHlyaWdodCAoYykgMjAxMCBDb21wdUxhYiBMdGQKKyAqICBBdXRob3I6IERlbmlzIFR1cmlzY2hldiA8ZGVuaXNAY29tcHVsYWIuY28uaWw+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAyIGFzIHB1Ymxpc2hlZAorICogIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKworc3RhdGljIERFRklORV9TUElOTE9DSyhncGlvX2xvY2spOworCisjZGVmaW5lIENHRU4JKDB4MDApCisjZGVmaW5lIENHSU8JKDB4MDQpCisjZGVmaW5lIENHTFYJKDB4MDgpCisKKyNkZWZpbmUgUkdFTgkoMHgyMCkKKyNkZWZpbmUgUkdJTwkoMHgyNCkKKyNkZWZpbmUgUkdMVgkoMHgyOCkKKworc3RhdGljIHVuc2lnbmVkIHNob3J0IGdwaW9fYmE7CisKK3N0YXRpYyBpbnQgc2NoX2dwaW9fY29yZV9kaXJlY3Rpb25faW4oc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkICBncGlvX251bSkKK3sKKwl1OCBjdXJyX2RpcnM7CisJdW5zaWduZWQgc2hvcnQgb2Zmc2V0LCBiaXQ7CisKKwlzcGluX2xvY2soJmdwaW9fbG9jayk7CisKKwlvZmZzZXQgPSBDR0lPICsgZ3Bpb19udW0gLyA4OworCWJpdCA9IGdwaW9fbnVtICUgODsKKworCWN1cnJfZGlycyA9IGluYihncGlvX2JhICsgb2Zmc2V0KTsKKworCWlmICghKGN1cnJfZGlycyAmICgxIDw8IGJpdCkpKQorCQlvdXRiKGN1cnJfZGlycyB8ICgxIDw8IGJpdCksIGdwaW9fYmEgKyBvZmZzZXQpOworCisJc3Bpbl91bmxvY2soJmdwaW9fbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2NoX2dwaW9fY29yZV9nZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGdwaW9fbnVtKQoreworCWludCByZXM7CisJdW5zaWduZWQgc2hvcnQgb2Zmc2V0LCBiaXQ7CisKKwlvZmZzZXQgPSBDR0xWICsgZ3Bpb19udW0gLyA4OworCWJpdCA9IGdwaW9fbnVtICUgODsKKworCXJlcyA9ICEhKGluYihncGlvX2JhICsgb2Zmc2V0KSAmICgxIDw8IGJpdCkpOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyB2b2lkIHNjaF9ncGlvX2NvcmVfc2V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBncGlvX251bSwgaW50IHZhbCkKK3sKKwl1OCBjdXJyX3ZhbHM7CisJdW5zaWduZWQgc2hvcnQgb2Zmc2V0LCBiaXQ7CisKKwlzcGluX2xvY2soJmdwaW9fbG9jayk7CisKKwlvZmZzZXQgPSBDR0xWICsgZ3Bpb19udW0gLyA4OworCWJpdCA9IGdwaW9fbnVtICUgODsKKworCWN1cnJfdmFscyA9IGluYihncGlvX2JhICsgb2Zmc2V0KTsKKworCWlmICh2YWwpCisJCW91dGIoY3Vycl92YWxzIHwgKDEgPDwgYml0KSwgZ3Bpb19iYSArIG9mZnNldCk7CisJZWxzZQorCQlvdXRiKChjdXJyX3ZhbHMgJiB+KDEgPDwgYml0KSksIGdwaW9fYmEgKyBvZmZzZXQpOworCXNwaW5fdW5sb2NrKCZncGlvX2xvY2spOworfQorCitzdGF0aWMgaW50IHNjaF9ncGlvX2NvcmVfZGlyZWN0aW9uX291dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywKKwkJCQkJdW5zaWduZWQgZ3Bpb19udW0sIGludCB2YWwpCit7CisJdTggY3Vycl9kaXJzOworCXVuc2lnbmVkIHNob3J0IG9mZnNldCwgYml0OworCisJc2NoX2dwaW9fY29yZV9zZXQoZ2MsIGdwaW9fbnVtLCB2YWwpOworCisJc3Bpbl9sb2NrKCZncGlvX2xvY2spOworCisJb2Zmc2V0ID0gQ0dJTyArIGdwaW9fbnVtIC8gODsKKwliaXQgPSBncGlvX251bSAlIDg7CisKKwljdXJyX2RpcnMgPSBpbmIoZ3Bpb19iYSArIG9mZnNldCk7CisJaWYgKGN1cnJfZGlycyAmICgxIDw8IGJpdCkpCisJCW91dGIoY3Vycl9kaXJzICYgfigxIDw8IGJpdCksIGdwaW9fYmEgKyBvZmZzZXQpOworCisJc3Bpbl91bmxvY2soJmdwaW9fbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIHNjaF9ncGlvX2NvcmUgPSB7CisJLmxhYmVsCQkJPSAic2NoX2dwaW9fY29yZSIsCisJLm93bmVyCQkJPSBUSElTX01PRFVMRSwKKwkuZGlyZWN0aW9uX2lucHV0CT0gc2NoX2dwaW9fY29yZV9kaXJlY3Rpb25faW4sCisJLmdldAkJCT0gc2NoX2dwaW9fY29yZV9nZXQsCisJLmRpcmVjdGlvbl9vdXRwdXQJPSBzY2hfZ3Bpb19jb3JlX2RpcmVjdGlvbl9vdXQsCisJLnNldAkJCT0gc2NoX2dwaW9fY29yZV9zZXQsCit9OworCitzdGF0aWMgaW50IHNjaF9ncGlvX3Jlc3VtZV9kaXJlY3Rpb25faW4oc3RydWN0IGdwaW9fY2hpcCAqZ2MsCisJCQkJCXVuc2lnbmVkIGdwaW9fbnVtKQoreworCXU4IGN1cnJfZGlyczsKKworCXNwaW5fbG9jaygmZ3Bpb19sb2NrKTsKKworCWN1cnJfZGlycyA9IGluYihncGlvX2JhICsgUkdJTyk7CisKKwlpZiAoIShjdXJyX2RpcnMgJiAoMSA8PCBncGlvX251bSkpKQorCQlvdXRiKGN1cnJfZGlycyB8ICgxIDw8IGdwaW9fbnVtKSAsIGdwaW9fYmEgKyBSR0lPKTsKKworCXNwaW5fdW5sb2NrKCZncGlvX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNjaF9ncGlvX3Jlc3VtZV9nZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGdwaW9fbnVtKQoreworCXJldHVybiAhIShpbmIoZ3Bpb19iYSArIFJHTFYpICYgKDEgPDwgZ3Bpb19udW0pKTsKK30KKworc3RhdGljIHZvaWQgc2NoX2dwaW9fcmVzdW1lX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywKKwkJCQl1bnNpZ25lZCBncGlvX251bSwgaW50IHZhbCkKK3sKKwl1OCBjdXJyX3ZhbHM7CisKKwlzcGluX2xvY2soJmdwaW9fbG9jayk7CisKKwljdXJyX3ZhbHMgPSBpbmIoZ3Bpb19iYSArIFJHTFYpOworCisJaWYgKHZhbCkKKwkJb3V0YihjdXJyX3ZhbHMgfCAoMSA8PCBncGlvX251bSksIGdwaW9fYmEgKyBSR0xWKTsKKwllbHNlCisJCW91dGIoKGN1cnJfdmFscyAmIH4oMSA8PCBncGlvX251bSkpLCBncGlvX2JhICsgUkdMVik7CisKKwlzcGluX3VubG9jaygmZ3Bpb19sb2NrKTsKK30KKworc3RhdGljIGludCBzY2hfZ3Bpb19yZXN1bWVfZGlyZWN0aW9uX291dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywKKwkJCQkJdW5zaWduZWQgZ3Bpb19udW0sIGludCB2YWwpCit7CisJdTggY3Vycl9kaXJzOworCisJc2NoX2dwaW9fcmVzdW1lX3NldChnYywgZ3Bpb19udW0sIHZhbCk7CisKKwlzcGluX2xvY2soJmdwaW9fbG9jayk7CisKKwljdXJyX2RpcnMgPSBpbmIoZ3Bpb19iYSArIFJHSU8pOworCWlmIChjdXJyX2RpcnMgJiAoMSA8PCBncGlvX251bSkpCisJCW91dGIoY3Vycl9kaXJzICYgfigxIDw8IGdwaW9fbnVtKSwgZ3Bpb19iYSArIFJHSU8pOworCisJc3Bpbl91bmxvY2soJmdwaW9fbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIHNjaF9ncGlvX3Jlc3VtZSA9IHsKKwkubGFiZWwJCQk9ICJzY2hfZ3Bpb19yZXN1bWUiLAorCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLmRpcmVjdGlvbl9pbnB1dAk9IHNjaF9ncGlvX3Jlc3VtZV9kaXJlY3Rpb25faW4sCisJLmdldAkJCT0gc2NoX2dwaW9fcmVzdW1lX2dldCwKKwkuZGlyZWN0aW9uX291dHB1dAk9IHNjaF9ncGlvX3Jlc3VtZV9kaXJlY3Rpb25fb3V0LAorCS5zZXQJCQk9IHNjaF9ncGlvX3Jlc3VtZV9zZXQsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzY2hfZ3Bpb19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCBlcnI7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CisJaWYgKCFyZXMpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlncGlvX2JhID0gcmVzLT5zdGFydDsKKworCXNjaF9ncGlvX2NvcmUuYmFzZSA9IDA7CisJc2NoX2dwaW9fY29yZS5uZ3BpbyA9IDEwOworCXNjaF9ncGlvX2NvcmUuZGV2ID0gJnBkZXYtPmRldjsKKworCXNjaF9ncGlvX3Jlc3VtZS5iYXNlID0gMTA7CisJc2NoX2dwaW9fcmVzdW1lLm5ncGlvID0gNDsKKwlzY2hfZ3Bpb19yZXN1bWUuZGV2ID0gJnBkZXYtPmRldjsKKworCWVyciA9IGdwaW9jaGlwX2FkZCgmc2NoX2dwaW9fY29yZSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX3NjaF9ncGlvX2NvcmU7CisKKwllcnIgPSBncGlvY2hpcF9hZGQoJnNjaF9ncGlvX3Jlc3VtZSk7CisJaWYgKGVyciA8IDApCisJCWdvdG8gZXJyX3NjaF9ncGlvX3Jlc3VtZTsKKworCS8qCisJICogR1BJT1s2OjBdIGVuYWJsZWQgYnkgZGVmYXVsdAorCSAqIEdQSU83IGlzIGNvbmZpZ3VyZWQgYnkgdGhlIENNQyBhcyBTTFBJT1ZSCisJICogRW5hYmxlIEdQSU9bOTo4XSBjb3JlIHBvd2VyZWQgZ3Bpb3MgZXhwbGljaXRseQorCSAqLworCW91dGIoMHgzLCBncGlvX2JhICsgQ0dFTiArIDEpOworCS8qCisJICogU1VTX0dQSU9bMjowXSBlbmFibGVkIGJ5IGRlZmF1bHQKKwkgKiBFbmFibGUgU1VTX0dQSU8zIHJlc3VtZSBwb3dlcmVkIGdwaW8gZXhwbGljaXRseQorCSAqLworCW91dGIoMHg4LCBncGlvX2JhICsgUkdFTik7CisKKwlyZXR1cm4gMDsKKworZXJyX3NjaF9ncGlvX3Jlc3VtZToKKwllcnIgPSBncGlvY2hpcF9yZW1vdmUoJnNjaF9ncGlvX2NvcmUpOworCWlmIChlcnIpCisJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzIGZhaWxlZCwgJWRcbiIsCisJCQkJImdwaW9jaGlwX3JlbW92ZSgpIiwgZXJyKTsKKworZXJyX3NjaF9ncGlvX2NvcmU6CisJcmVsZWFzZV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlncGlvX2JhID0gMDsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNjaF9ncGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWlmIChncGlvX2JhKSB7CisJCWludCBlcnI7CisKKwkJZXJyICA9IGdwaW9jaGlwX3JlbW92ZSgmc2NoX2dwaW9fY29yZSk7CisJCWlmIChlcnIpCisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICIlcyBmYWlsZWQsICVkXG4iLAorCQkJCSJncGlvY2hpcF9yZW1vdmUoKSIsIGVycik7CisJCWVyciA9IGdwaW9jaGlwX3JlbW92ZSgmc2NoX2dwaW9fcmVzdW1lKTsKKwkJaWYgKGVycikKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIiVzIGZhaWxlZCwgJWRcbiIsCisJCQkJImdwaW9jaGlwX3JlbW92ZSgpIiwgZXJyKTsKKworCQlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CisKKwkJcmVsZWFzZV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwkJZ3Bpb19iYSA9IDA7CisKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2NoX2dwaW9fZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInNjaF9ncGlvIiwKKwkJLm93bmVyID0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gc2NoX2dwaW9fcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzY2hfZ3Bpb19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2NoX2dwaW9faW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNjaF9ncGlvX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzY2hfZ3Bpb19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNjaF9ncGlvX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHNjaF9ncGlvX2luaXQpOworbW9kdWxlX2V4aXQoc2NoX2dwaW9fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkRlbmlzIFR1cmlzY2hldiA8ZGVuaXNAY29tcHVsYWIuY28uaWw+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkdQSU8gaW50ZXJmYWNlIGZvciBJbnRlbCBQb3Vsc2JvIFNDSCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTpzY2hfZ3BpbyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3RpbWJncGlvLmMgYi9kcml2ZXJzL2dwaW8vdGltYmdwaW8uYwppbmRleCBhNGQzNDRiLi5kNDI5NWZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vdGltYmdwaW8uYworKysgYi9kcml2ZXJzL2dwaW8vdGltYmdwaW8uYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWJfZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtMzcsNiArMzgsOCBAQAogI2RlZmluZSBUR1BJT19JQ1IJMHgxNAogI2RlZmluZSBUR1BJT19GTFIJMHgxOAogI2RlZmluZSBUR1BJT19MVlIJMHgxYworI2RlZmluZSBUR1BJT19WRVIJMHgyMAorI2RlZmluZSBUR1BJT19CRkxSCTB4MjQKIAogc3RydWN0IHRpbWJncGlvIHsKIAl2b2lkIF9faW9tZW0JCSptZW1iYXNlOwpAQCAtMTI1LDE3ICsxMjgsMjMgQEAKIAlzdHJ1Y3QgdGltYmdwaW8gKnRncGlvID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKIAlpbnQgb2Zmc2V0ID0gaXJxIC0gdGdwaW8tPmlycV9iYXNlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIGx2ciwgZmxyOworCXUzMiBsdnIsIGZsciwgYmZsciA9IDA7CisJdTMyIHZlcjsKIAogCWlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IHRncGlvLT5ncGlvLm5ncGlvKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCXZlciA9IGlvcmVhZDMyKHRncGlvLT5tZW1iYXNlICsgVEdQSU9fVkVSKTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZ0Z3Bpby0+bG9jaywgZmxhZ3MpOwogCiAJbHZyID0gaW9yZWFkMzIodGdwaW8tPm1lbWJhc2UgKyBUR1BJT19MVlIpOwogCWZsciA9IGlvcmVhZDMyKHRncGlvLT5tZW1iYXNlICsgVEdQSU9fRkxSKTsKKwlpZiAodmVyID4gMikKKwkJYmZsciA9IGlvcmVhZDMyKHRncGlvLT5tZW1iYXNlICsgVEdQSU9fQkZMUik7CiAKIAlpZiAodHJpZ2dlciAmIChJUlFfVFlQRV9MRVZFTF9ISUdIIHwgSVJRX1RZUEVfTEVWRUxfTE9XKSkgeworCQliZmxyICY9IH4oMSA8PCBvZmZzZXQpOwogCQlmbHIgJj0gfigxIDw8IG9mZnNldCk7CiAJCWlmICh0cmlnZ2VyICYgSVJRX1RZUEVfTEVWRUxfSElHSCkKIAkJCWx2ciB8PSAxIDw8IG9mZnNldDsKQEAgLTE0MywyMSArMTUyLDI3IEBACiAJCQlsdnIgJj0gfigxIDw8IG9mZnNldCk7CiAJfQogCi0JaWYgKCh0cmlnZ2VyICYgSVJRX1RZUEVfRURHRV9CT1RIKSA9PSBJUlFfVFlQRV9FREdFX0JPVEgpCi0JCXJldHVybiAtRUlOVkFMOwotCWVsc2UgeworCWlmICgodHJpZ2dlciAmIElSUV9UWVBFX0VER0VfQk9USCkgPT0gSVJRX1RZUEVfRURHRV9CT1RIKSB7CisJCWlmICh2ZXIgPCAzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWVsc2UgeworCQkJZmxyIHw9IDEgPDwgb2Zmc2V0OworCQkJYmZsciB8PSAxIDw8IG9mZnNldDsKKwkJfQorCX0gZWxzZSB7CisJCWJmbHIgJj0gfigxIDw8IG9mZnNldCk7CiAJCWZsciB8PSAxIDw8IG9mZnNldDsKLQkJLyogb3Bwb3NpdGUgY29tcGFyZWQgdG8gdGhlIGRhdGFzaGVldCwgYnV0IGl0IG1pcnJvcnMgdGhlCi0JCSAqIHJlYWxpdHkKLQkJICovCiAJCWlmICh0cmlnZ2VyICYgSVJRX1RZUEVfRURHRV9GQUxMSU5HKQotCQkJbHZyIHw9IDEgPDwgb2Zmc2V0OwotCQllbHNlCiAJCQlsdnIgJj0gfigxIDw8IG9mZnNldCk7CisJCWVsc2UKKwkJCWx2ciB8PSAxIDw8IG9mZnNldDsKIAl9CiAKIAlpb3dyaXRlMzIobHZyLCB0Z3Bpby0+bWVtYmFzZSArIFRHUElPX0xWUik7CiAJaW93cml0ZTMyKGZsciwgdGdwaW8tPm1lbWJhc2UgKyBUR1BJT19GTFIpOworCWlmICh2ZXIgPiAyKQorCQlpb3dyaXRlMzIoYmZsciwgdGdwaW8tPm1lbWJhc2UgKyBUR1BJT19CRkxSKTsKKwogCWlvd3JpdGUzMigxIDw8IG9mZnNldCwgdGdwaW8tPm1lbWJhc2UgKyBUR1BJT19JQ1IpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRncGlvLT5sb2NrLCBmbGFncyk7CiAKQEAgLTE3NCw3ICsxODksNyBAQAogCWlwciA9IGlvcmVhZDMyKHRncGlvLT5tZW1iYXNlICsgVEdQSU9fSVBSKTsKIAlpb3dyaXRlMzIoaXByLCB0Z3Bpby0+bWVtYmFzZSArIFRHUElPX0lDUik7CiAKLQlmb3JfZWFjaF9iaXQob2Zmc2V0LCAmaXByLCB0Z3Bpby0+Z3Bpby5uZ3BpbykKKwlmb3JfZWFjaF9zZXRfYml0KG9mZnNldCwgJmlwciwgdGdwaW8tPmdwaW8ubmdwaW8pCiAJCWdlbmVyaWNfaGFuZGxlX2lycSh0aW1iZ3Bpb190b19pcnEoJnRncGlvLT5ncGlvLCBvZmZzZXQpKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3dtODMxeC1ncGlvLmMgYi9kcml2ZXJzL2dwaW8vd204MzF4LWdwaW8uYwppbmRleCBiNDQ2OGI2Li5kMDkwMjFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwaW8vd204MzF4LWdwaW8uYworKysgYi9kcml2ZXJzL2dwaW8vd204MzF4LWdwaW8uYwpAQCAtMzgsMTAgKzM4LDE0IEBACiB7CiAJc3RydWN0IHdtODMxeF9ncGlvICp3bTgzMXhfZ3BpbyA9IHRvX3dtODMxeF9ncGlvKGNoaXApOwogCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IHdtODMxeF9ncGlvLT53bTgzMXg7CisJaW50IHZhbCA9IFdNODMxWF9HUE5fRElSOworCisJaWYgKHdtODMxeC0+aGFzX2dwaW9fZW5hKQorCQl2YWwgfD0gV004MzFYX0dQTl9UUkk7CiAKIAlyZXR1cm4gd204MzF4X3NldF9iaXRzKHdtODMxeCwgV004MzFYX0dQSU8xX0NPTlRST0wgKyBvZmZzZXQsCi0JCQkgICAgICAgV004MzFYX0dQTl9ESVIgfCBXTTgzMVhfR1BOX1RSSSwKLQkJCSAgICAgICBXTTgzMVhfR1BOX0RJUik7CisJCQkgICAgICAgV004MzFYX0dQTl9ESVIgfCBXTTgzMVhfR1BOX1RSSSB8CisJCQkgICAgICAgV004MzFYX0dQTl9GTl9NQVNLLCB2YWwpOwogfQogCiBzdGF0aWMgaW50IHdtODMxeF9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCkBAIC02MCwxNiArNjQsNiBAQAogCQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3bTgzMXhfZ3Bpb19kaXJlY3Rpb25fb3V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCi0JCQkJICAgICB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKLXsKLQlzdHJ1Y3Qgd204MzF4X2dwaW8gKndtODMxeF9ncGlvID0gdG9fd204MzF4X2dwaW8oY2hpcCk7Ci0Jc3RydWN0IHdtODMxeCAqd204MzF4ID0gd204MzF4X2dwaW8tPndtODMxeDsKLQotCXJldHVybiB3bTgzMXhfc2V0X2JpdHMod204MzF4LCBXTTgzMVhfR1BJTzFfQ09OVFJPTCArIG9mZnNldCwKLQkJCSAgICAgICBXTTgzMVhfR1BOX0RJUiB8IFdNODMxWF9HUE5fVFJJLCAwKTsKLX0KLQogc3RhdGljIHZvaWQgd204MzF4X2dwaW9fc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQogewogCXN0cnVjdCB3bTgzMXhfZ3BpbyAqd204MzF4X2dwaW8gPSB0b193bTgzMXhfZ3BpbyhjaGlwKTsKQEAgLTc5LDYgKzczLDI5IEBACiAJCQl2YWx1ZSA8PCBvZmZzZXQpOwogfQogCitzdGF0aWMgaW50IHdtODMxeF9ncGlvX2RpcmVjdGlvbl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCB3bTgzMXhfZ3BpbyAqd204MzF4X2dwaW8gPSB0b193bTgzMXhfZ3BpbyhjaGlwKTsKKwlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSB3bTgzMXhfZ3Bpby0+d204MzF4OworCWludCB2YWwgPSAwOworCWludCByZXQ7CisKKwlpZiAod204MzF4LT5oYXNfZ3Bpb19lbmEpCisJCXZhbCB8PSBXTTgzMVhfR1BOX1RSSTsKKworCXJldCA9IHdtODMxeF9zZXRfYml0cyh3bTgzMXgsIFdNODMxWF9HUElPMV9DT05UUk9MICsgb2Zmc2V0LAorCQkJICAgICAgV004MzFYX0dQTl9ESVIgfCBXTTgzMVhfR1BOX1RSSSB8CisJCQkgICAgICBXTTgzMVhfR1BOX0ZOX01BU0ssIHZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBDYW4gb25seSBzZXQgR1BJTyBzdGF0ZSBvbmNlIGl0J3MgaW4gb3V0cHV0IG1vZGUgKi8KKwl3bTgzMXhfZ3Bpb19zZXQoY2hpcCwgb2Zmc2V0LCB2YWx1ZSk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB3bTgzMXhfZ3Bpb190b19pcnEoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewogCXN0cnVjdCB3bTgzMXhfZ3BpbyAqd204MzF4X2dwaW8gPSB0b193bTgzMXhfZ3BpbyhjaGlwKTsKQEAgLTk1LDcgKzExMiw3IEBACiB7CiAJc3RydWN0IHdtODMxeF9ncGlvICp3bTgzMXhfZ3BpbyA9IHRvX3dtODMxeF9ncGlvKGNoaXApOwogCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IHdtODMxeF9ncGlvLT53bTgzMXg7Ci0JaW50IGk7CisJaW50IGksIHRyaXN0YXRlZDsKIAogCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5uZ3BpbzsgaSsrKSB7CiAJCWludCBncGlvID0gaSArIGNoaXAtPmJhc2U7CkBAIC0xNjIsMTUgKzE3OSwxOSBAQAogCQkJYnJlYWs7CiAJCX0KIAorCQl0cmlzdGF0ZWQgPSByZWcgJiBXTTgzMVhfR1BOX1RSSTsKKwkJaWYgKHdtODMxeC0+aGFzX2dwaW9fZW5hKQorCQkJdHJpc3RhdGVkID0gIXRyaXN0YXRlZDsKKwogCQlzZXFfcHJpbnRmKHMsICIgJXMgJXMgJXMgJXMlc1xuIgogCQkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAlcyVzICgweCU0eClcbiIsCiAJCQkgICByZWcgJiBXTTgzMVhfR1BOX0RJUiA/ICJpbiIgOiAib3V0IiwKIAkJCSAgIHdtODMxeF9ncGlvX2dldChjaGlwLCBpKSA/ICJoaWdoIiA6ICJsb3ciLAogCQkJICAgcHVsbCwKIAkJCSAgIHBvd2VyZG9tYWluLAotCQkJICAgcmVnICYgV004MzFYX0dQTl9QT0wgPyAiIGludmVydGVkIiA6ICIiLAorCQkJICAgcmVnICYgV004MzFYX0dQTl9QT0wgPyAiIiA6ICIgaW52ZXJ0ZWQiLAogCQkJICAgcmVnICYgV004MzFYX0dQTl9PRCA/ICJvcGVuLWRyYWluIiA6ICJDTU9TIiwKLQkJCSAgIHJlZyAmIFdNODMxWF9HUE5fVFJJID8gIiB0cmlzdGF0ZWQiIDogIiIsCisJCQkgICB0cmlzdGF0ZWQgPyAiIHRyaXN0YXRlZCIgOiAiIiwKIAkJCSAgIHJlZyk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3dtODM1MC1ncGlvbGliLmMgYi9kcml2ZXJzL2dwaW8vd204MzUwLWdwaW9saWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTE4NDBkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncGlvL3dtODM1MC1ncGlvbGliLmMKQEAgLTAsMCArMSwxODEgQEAKKy8qCisgKiB3bTgzNXgtZ3Bpb2xpYi5jICAtLSAgZ3Bpb2xpYiBzdXBwb3J0IGZvciBXb2xmc29uIFdNODM1eCBQTUlDcworICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2dwaW8uaD4KKworc3RydWN0IHdtODM1MF9ncGlvX2RhdGEgeworCXN0cnVjdCB3bTgzNTAgKndtODM1MDsKKwlzdHJ1Y3QgZ3Bpb19jaGlwIGdwaW9fY2hpcDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHdtODM1MF9ncGlvX2RhdGEgKnRvX3dtODM1MF9ncGlvKHN0cnVjdCBncGlvX2NoaXAgKmNoaXApCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3Qgd204MzUwX2dwaW9fZGF0YSwgZ3Bpb19jaGlwKTsKK30KKworc3RhdGljIGludCB3bTgzNTBfZ3Bpb19kaXJlY3Rpb25faW4oc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQoreworCXN0cnVjdCB3bTgzNTBfZ3Bpb19kYXRhICp3bTgzNTBfZ3BpbyA9IHRvX3dtODM1MF9ncGlvKGNoaXApOworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHdtODM1MF9ncGlvLT53bTgzNTA7CisKKwlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0dQSU9fQ09ORklHVVJBVElPTl9JX08sCisJCQkgICAgICAgMSA8PCBvZmZzZXQpOworfQorCitzdGF0aWMgaW50IHdtODM1MF9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQpCit7CisJc3RydWN0IHdtODM1MF9ncGlvX2RhdGEgKndtODM1MF9ncGlvID0gdG9fd204MzUwX2dwaW8oY2hpcCk7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gd204MzUwX2dwaW8tPndtODM1MDsKKwlpbnQgcmV0OworCisJcmV0ID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0dQSU9fTEVWRUwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKHJldCAmICgxIDw8IG9mZnNldCkpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdtODM1MF9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgd204MzUwX2dwaW9fZGF0YSAqd204MzUwX2dwaW8gPSB0b193bTgzNTBfZ3BpbyhjaGlwKTsKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSB3bTgzNTBfZ3Bpby0+d204MzUwOworCisJaWYgKHZhbHVlKQorCQl3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfR1BJT19MRVZFTCwgMSA8PCBvZmZzZXQpOworCWVsc2UKKwkJd204MzUwX2NsZWFyX2JpdHMod204MzUwLCBXTTgzNTBfR1BJT19MRVZFTCwgMSA8PCBvZmZzZXQpOworfQorCitzdGF0aWMgaW50IHdtODM1MF9ncGlvX2RpcmVjdGlvbl9vdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkgICAgIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCXN0cnVjdCB3bTgzNTBfZ3Bpb19kYXRhICp3bTgzNTBfZ3BpbyA9IHRvX3dtODM1MF9ncGlvKGNoaXApOworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IHdtODM1MF9ncGlvLT53bTgzNTA7CisJaW50IHJldDsKKworCXJldCA9IHdtODM1MF9jbGVhcl9iaXRzKHdtODM1MCwgV004MzUwX0dQSU9fQ09ORklHVVJBVElPTl9JX08sCisJCQkJMSA8PCBvZmZzZXQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyogRG9uJ3QgaGF2ZSBhbiBhdG9taWMgZGlyZWN0aW9uL3ZhbHVlIHNldHVwICovCisJd204MzUwX2dwaW9fc2V0KGNoaXAsIG9mZnNldCwgdmFsdWUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204MzUwX2dwaW9fdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3Qgd204MzUwX2dwaW9fZGF0YSAqd204MzUwX2dwaW8gPSB0b193bTgzNTBfZ3BpbyhjaGlwKTsKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSB3bTgzNTBfZ3Bpby0+d204MzUwOworCisJaWYgKCF3bTgzNTAtPmlycV9iYXNlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiB3bTgzNTAtPmlycV9iYXNlICsgV004MzUwX0lSUV9HUElPKG9mZnNldCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZ3Bpb19jaGlwIHRlbXBsYXRlX2NoaXAgPSB7CisJLmxhYmVsCQkJPSAid204MzUwIiwKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5kaXJlY3Rpb25faW5wdXQJPSB3bTgzNTBfZ3Bpb19kaXJlY3Rpb25faW4sCisJLmdldAkJCT0gd204MzUwX2dwaW9fZ2V0LAorCS5kaXJlY3Rpb25fb3V0cHV0CT0gd204MzUwX2dwaW9fZGlyZWN0aW9uX291dCwKKwkuc2V0CQkJPSB3bTgzNTBfZ3Bpb19zZXQsCisJLnRvX2lycQkJCT0gd204MzUwX2dwaW9fdG9faXJxLAorCS5jYW5fc2xlZXAJCT0gMSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHdtODM1MF9ncGlvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCB3bTgzNTBfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSB3bTgzNTAtPmRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgd204MzUwX2dwaW9fZGF0YSAqd204MzUwX2dwaW87CisJaW50IHJldDsKKworCXdtODM1MF9ncGlvID0ga3phbGxvYyhzaXplb2YoKndtODM1MF9ncGlvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHdtODM1MF9ncGlvID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJd204MzUwX2dwaW8tPndtODM1MCA9IHdtODM1MDsKKwl3bTgzNTBfZ3Bpby0+Z3Bpb19jaGlwID0gdGVtcGxhdGVfY2hpcDsKKwl3bTgzNTBfZ3Bpby0+Z3Bpb19jaGlwLm5ncGlvID0gMTM7CisJd204MzUwX2dwaW8tPmdwaW9fY2hpcC5kZXYgPSAmcGRldi0+ZGV2OworCWlmIChwZGF0YSAmJiBwZGF0YS0+Z3Bpb19iYXNlKQorCQl3bTgzNTBfZ3Bpby0+Z3Bpb19jaGlwLmJhc2UgPSBwZGF0YS0+Z3Bpb19iYXNlOworCWVsc2UKKwkJd204MzUwX2dwaW8tPmdwaW9fY2hpcC5iYXNlID0gLTE7CisKKwlyZXQgPSBncGlvY2hpcF9hZGQoJndtODM1MF9ncGlvLT5ncGlvX2NoaXApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvdWxkIG5vdCByZWdpc3RlciBncGlvY2hpcCwgJWRcbiIsCisJCQlyZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB3bTgzNTBfZ3Bpbyk7CisKKwlyZXR1cm4gcmV0OworCitlcnI6CisJa2ZyZWUod204MzUwX2dwaW8pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHdtODM1MF9ncGlvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3bTgzNTBfZ3Bpb19kYXRhICp3bTgzNTBfZ3BpbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBncGlvY2hpcF9yZW1vdmUoJndtODM1MF9ncGlvLT5ncGlvX2NoaXApOworCWlmIChyZXQgPT0gMCkKKwkJa2ZyZWUod204MzUwX2dwaW8pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgd204MzUwX2dwaW9fZHJpdmVyID0geworCS5kcml2ZXIubmFtZQk9ICJ3bTgzNTAtZ3BpbyIsCisJLmRyaXZlci5vd25lcgk9IFRISVNfTU9EVUxFLAorCS5wcm9iZQkJPSB3bTgzNTBfZ3Bpb19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdtODM1MF9ncGlvX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3bTgzNTBfZ3Bpb19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd204MzUwX2dwaW9fZHJpdmVyKTsKK30KK3N1YnN5c19pbml0Y2FsbCh3bTgzNTBfZ3Bpb19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODM1MF9ncGlvX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmd204MzUwX2dwaW9fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHdtODM1MF9ncGlvX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1BJTyBpbnRlcmZhY2UgZm9yIFdNODM1MCBQTUlDcyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp3bTgzNTAtZ3BpbyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncGlvL3dtODk5NC1ncGlvLmMgYi9kcml2ZXJzL2dwaW8vd204OTk0LWdwaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTI4YjRhNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3Bpby93bTg5OTQtZ3Bpby5jCkBAIC0wLDAgKzEsMjA0IEBACisvKgorICogd204OTk0LWdwaW8uYyAgLS0gIGdwaW9saWIgc3VwcG9ydCBmb3IgV29sZnNvbiBXTTg5OTQKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCisjaW5jbHVkZSA8bGludXgvbWZkL3dtODk5NC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkL3dtODk5NC9wZGF0YS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTg5OTQvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTg5OTQvcmVnaXN0ZXJzLmg+CisKK3N0cnVjdCB3bTg5OTRfZ3BpbyB7CisJc3RydWN0IHdtODk5NCAqd204OTk0OworCXN0cnVjdCBncGlvX2NoaXAgZ3Bpb19jaGlwOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3Qgd204OTk0X2dwaW8gKnRvX3dtODk5NF9ncGlvKHN0cnVjdCBncGlvX2NoaXAgKmNoaXApCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3Qgd204OTk0X2dwaW8sIGdwaW9fY2hpcCk7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X2dwaW9fZGlyZWN0aW9uX2luKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3Qgd204OTk0X2dwaW8gKndtODk5NF9ncGlvID0gdG9fd204OTk0X2dwaW8oY2hpcCk7CisJc3RydWN0IHdtODk5NCAqd204OTk0ID0gd204OTk0X2dwaW8tPndtODk5NDsKKworCXJldHVybiB3bTg5OTRfc2V0X2JpdHMod204OTk0LCBXTTg5OTRfR1BJT18xICsgb2Zmc2V0LAorCQkJICAgICAgIFdNODk5NF9HUE5fRElSLCBXTTg5OTRfR1BOX0RJUik7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X2dwaW9fZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3Qgd204OTk0X2dwaW8gKndtODk5NF9ncGlvID0gdG9fd204OTk0X2dwaW8oY2hpcCk7CisJc3RydWN0IHdtODk5NCAqd204OTk0ID0gd204OTk0X2dwaW8tPndtODk5NDsKKwlpbnQgcmV0OworCisJcmV0ID0gd204OTk0X3JlZ19yZWFkKHdtODk5NCwgV004OTk0X0dQSU9fMSArIG9mZnNldCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAocmV0ICYgV004OTk0X0dQTl9MVkwpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X2dwaW9fZGlyZWN0aW9uX291dChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLAorCQkJCSAgICAgdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCit7CisJc3RydWN0IHdtODk5NF9ncGlvICp3bTg5OTRfZ3BpbyA9IHRvX3dtODk5NF9ncGlvKGNoaXApOworCXN0cnVjdCB3bTg5OTQgKndtODk5NCA9IHdtODk5NF9ncGlvLT53bTg5OTQ7CisKKwlyZXR1cm4gd204OTk0X3NldF9iaXRzKHdtODk5NCwgV004OTk0X0dQSU9fMSArIG9mZnNldCwKKwkJCSAgICAgICBXTTg5OTRfR1BOX0RJUiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIHdtODk5NF9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpjaGlwLCB1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKK3sKKwlzdHJ1Y3Qgd204OTk0X2dwaW8gKndtODk5NF9ncGlvID0gdG9fd204OTk0X2dwaW8oY2hpcCk7CisJc3RydWN0IHdtODk5NCAqd204OTk0ID0gd204OTk0X2dwaW8tPndtODk5NDsKKworCWlmICh2YWx1ZSkKKwkJdmFsdWUgPSBXTTg5OTRfR1BOX0xWTDsKKworCXdtODk5NF9zZXRfYml0cyh3bTg5OTQsIFdNODk5NF9HUElPXzEgKyBvZmZzZXQsIFdNODk5NF9HUE5fTFZMLCB2YWx1ZSk7Cit9CisKKyNpZmRlZiBDT05GSUdfREVCVUdfRlMKK3N0YXRpYyB2b2lkIHdtODk5NF9ncGlvX2RiZ19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgc3RydWN0IGdwaW9fY2hpcCAqY2hpcCkKK3sKKwlzdHJ1Y3Qgd204OTk0X2dwaW8gKndtODk5NF9ncGlvID0gdG9fd204OTk0X2dwaW8oY2hpcCk7CisJc3RydWN0IHdtODk5NCAqd204OTk0ID0gd204OTk0X2dwaW8tPndtODk5NDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjaGlwLT5uZ3BpbzsgaSsrKSB7CisJCWludCBncGlvID0gaSArIGNoaXAtPmJhc2U7CisJCWludCByZWc7CisJCWNvbnN0IGNoYXIgKmxhYmVsOworCisJCS8qIFdlIHJlcG9ydCB0aGUgR1BJTyBldmVuIGlmIGl0J3Mgbm90IHJlcXVlc3RlZCBzaW5jZQorCQkgKiB3ZSdyZSBhbHNvIHJlcG9ydGluZyB0aGluZ3MgbGlrZSBhbHRlcm5hdGUKKwkJICogZnVuY3Rpb25zIHdoaWNoIGFwcGx5IGV2ZW4gd2hlbiB0aGUgR1BJTyBpcyBub3QgaW4KKwkJICogdXNlIGFzIGEgR1BJTy4KKwkJICovCisJCWxhYmVsID0gZ3Bpb2NoaXBfaXNfcmVxdWVzdGVkKGNoaXAsIGkpOworCQlpZiAoIWxhYmVsKQorCQkJbGFiZWwgPSAiVW5yZXF1ZXN0ZWQiOworCisJCXNlcV9wcmludGYocywgIiBncGlvLSUtM2QgKCUtMjAuMjBzKSAiLCBncGlvLCBsYWJlbCk7CisKKwkJcmVnID0gd204OTk0X3JlZ19yZWFkKHdtODk5NCwgV004OTk0X0dQSU9fMSArIGkpOworCQlpZiAocmVnIDwgMCkgeworCQkJZGV2X2Vycih3bTg5OTQtPmRldiwKKwkJCQkiR1BJTyBjb250cm9sICVkIHJlYWQgZmFpbGVkOiAlZFxuIiwKKwkJCQlncGlvLCByZWcpOworCQkJc2VxX3ByaW50ZihzLCAiXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogTm8gZGVjb2RlIHlldDsgbm90ZSB0aGF0IEdQSU8yIGlzIHNwZWNpYWwgKi8KKwkJc2VxX3ByaW50ZihzLCAiKCV4KVxuIiwgcmVnKTsKKwl9Cit9CisjZWxzZQorI2RlZmluZSB3bTg5OTRfZ3Bpb19kYmdfc2hvdyBOVUxMCisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBncGlvX2NoaXAgdGVtcGxhdGVfY2hpcCA9IHsKKwkubGFiZWwJCQk9ICJ3bTg5OTQiLAorCS5vd25lcgkJCT0gVEhJU19NT0RVTEUsCisJLmRpcmVjdGlvbl9pbnB1dAk9IHdtODk5NF9ncGlvX2RpcmVjdGlvbl9pbiwKKwkuZ2V0CQkJPSB3bTg5OTRfZ3Bpb19nZXQsCisJLmRpcmVjdGlvbl9vdXRwdXQJPSB3bTg5OTRfZ3Bpb19kaXJlY3Rpb25fb3V0LAorCS5zZXQJCQk9IHdtODk5NF9ncGlvX3NldCwKKwkuZGJnX3Nob3cJCT0gd204OTk0X2dwaW9fZGJnX3Nob3csCisJLmNhbl9zbGVlcAkJPSAxLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgd204OTk0X2dwaW9fcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgd204OTk0ICp3bTg5OTQgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHdtODk5NF9wZGF0YSAqcGRhdGEgPSB3bTg5OTQtPmRldi0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3Qgd204OTk0X2dwaW8gKndtODk5NF9ncGlvOworCWludCByZXQ7CisKKwl3bTg5OTRfZ3BpbyA9IGt6YWxsb2Moc2l6ZW9mKCp3bTg5OTRfZ3BpbyksIEdGUF9LRVJORUwpOworCWlmICh3bTg5OTRfZ3BpbyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXdtODk5NF9ncGlvLT53bTg5OTQgPSB3bTg5OTQ7CisJd204OTk0X2dwaW8tPmdwaW9fY2hpcCA9IHRlbXBsYXRlX2NoaXA7CisJd204OTk0X2dwaW8tPmdwaW9fY2hpcC5uZ3BpbyA9IFdNODk5NF9HUElPX01BWDsKKwl3bTg5OTRfZ3Bpby0+Z3Bpb19jaGlwLmRldiA9ICZwZGV2LT5kZXY7CisJaWYgKHBkYXRhICYmIHBkYXRhLT5ncGlvX2Jhc2UpCisJCXdtODk5NF9ncGlvLT5ncGlvX2NoaXAuYmFzZSA9IHBkYXRhLT5ncGlvX2Jhc2U7CisJZWxzZQorCQl3bTg5OTRfZ3Bpby0+Z3Bpb19jaGlwLmJhc2UgPSAtMTsKKworCXJldCA9IGdwaW9jaGlwX2FkZCgmd204OTk0X2dwaW8tPmdwaW9fY2hpcCk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIGdwaW9jaGlwLCAlZFxuIiwKKwkJCXJldCk7CisJCWdvdG8gZXJyOworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHdtODk5NF9ncGlvKTsKKworCXJldHVybiByZXQ7CisKK2VycjoKKwlrZnJlZSh3bTg5OTRfZ3Bpbyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgd204OTk0X2dwaW9fcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHdtODk5NF9ncGlvICp3bTg5OTRfZ3BpbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBncGlvY2hpcF9yZW1vdmUoJndtODk5NF9ncGlvLT5ncGlvX2NoaXApOworCWlmIChyZXQgPT0gMCkKKwkJa2ZyZWUod204OTk0X2dwaW8pOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgd204OTk0X2dwaW9fZHJpdmVyID0geworCS5kcml2ZXIubmFtZQk9ICJ3bTg5OTQtZ3BpbyIsCisJLmRyaXZlci5vd25lcgk9IFRISVNfTU9EVUxFLAorCS5wcm9iZQkJPSB3bTg5OTRfZ3Bpb19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHdtODk5NF9ncGlvX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3bTg5OTRfZ3Bpb19pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmd204OTk0X2dwaW9fZHJpdmVyKTsKK30KK3N1YnN5c19pbml0Y2FsbCh3bTg5OTRfZ3Bpb19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODk5NF9ncGlvX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmd204OTk0X2dwaW9fZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHdtODk5NF9ncGlvX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1BJTyBpbnRlcmZhY2UgZm9yIFdNODk5NCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTp3bTg5OTQtZ3BpbyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCmluZGV4IDM5YzVhYTcuLmFiZTNmNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKIGNjZmxhZ3MteSA6PSAtSWluY2x1ZGUvZHJtCiAKLWRybS15ICAgICAgIDo9CWRybV9hdXRoLm8gZHJtX2J1ZnMubyBkcm1fY2FjaGUubyBcCitkcm0teSAgICAgICA6PQlkcm1fYXV0aC5vIGRybV9idWZmZXIubyBkcm1fYnVmcy5vIGRybV9jYWNoZS5vIFwKIAkJZHJtX2NvbnRleHQubyBkcm1fZG1hLm8gZHJtX2RyYXdhYmxlLm8gXAogCQlkcm1fZHJ2Lm8gZHJtX2ZvcHMubyBkcm1fZ2VtLm8gZHJtX2lvY3RsLm8gZHJtX2lycS5vIFwKIAkJZHJtX2xvY2subyBkcm1fbWVtb3J5Lm8gZHJtX3Byb2MubyBkcm1fc3R1Yi5vIGRybV92bS5vIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnVmZmVyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2J1ZmZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZDAzZWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2J1ZmZlci5jCkBAIC0wLDAgKzEsMTg0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgMjAxMCBQYXVsaSBOaWVtaW5lbi4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVJTLCBBVVRIT1JTIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFCisgKiBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogTXVsdGlwYXJ0IGJ1ZmZlciBmb3IgY29waW5nIGRhdGEgd2hpY2ggaXMgbGFyZ2VyIHRoYW4gdGhlIHBhZ2Ugc2l6ZS4KKyAqCisgKiBBdXRob3JzOgorICogUGF1bGkgTmllbWluZW4gPHN1b2trb3MtYXQtZ21haWwtZG90LWNvbT4KKyAqLworCisjaW5jbHVkZSAiZHJtX2J1ZmZlci5oIgorCisvKioKKyAqIEFsbG9jYXRlIHRoZSBkcm0gYnVmZmVyIG9iamVjdC4KKyAqCisgKiAgIGJ1ZjogUG9pbnRlciB0byBhIHBvaW50ZXIgd2hlcmUgdGhlIG9iamVjdCBpcyBzdG9yZWQuCisgKiAgIHNpemU6IFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGUuCisgKi8KK2ludCBkcm1fYnVmZmVyX2FsbG9jKHN0cnVjdCBkcm1fYnVmZmVyICoqYnVmLCBpbnQgc2l6ZSkKK3sKKwlpbnQgbnJfcGFnZXMgPSBzaXplIC8gUEFHRV9TSVpFICsgMTsKKwlpbnQgaWR4OworCisJLyogQWxsb2NhdGluZyBwb2ludGVyIHRhYmxlIHRvIGVuZCBvZiBzdHJ1Y3R1cmUgbWFrZXMgZHJtX2J1ZmZlcgorCSAqIHZhcmlhYmxlIHNpemVkICovCisJKmJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkcm1fYnVmZmVyKSArIG5yX3BhZ2VzKnNpemVvZihjaGFyICopLAorCQkJR0ZQX0tFUk5FTCk7CisKKwlpZiAoKmJ1ZiA9PSBOVUxMKSB7CisJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIGRybSBidWZmZXIgb2JqZWN0IHRvIGhvbGQiCisJCQkJIiAlZCBieXRlcyBpbiAlZCBwYWdlcy5cbiIsCisJCQkJc2l6ZSwgbnJfcGFnZXMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkoKmJ1ZiktPnNpemUgPSBzaXplOworCisJZm9yIChpZHggPSAwOyBpZHggPCBucl9wYWdlczsgKytpZHgpIHsKKworCQkoKmJ1ZiktPmRhdGFbaWR4XSA9CisJCQlrbWFsbG9jKG1pbihQQUdFX1NJWkUsIHNpemUgLSBpZHggKiBQQUdFX1NJWkUpLAorCQkJCUdGUF9LRVJORUwpOworCisKKwkJaWYgKCgqYnVmKS0+ZGF0YVtpZHhdID09IE5VTEwpIHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlICVkdGggcGFnZSBmb3IgZHJtIgorCQkJCQkiIGJ1ZmZlciB3aXRoICVkIGJ5dGVzIGFuZCAlZCBwYWdlcy5cbiIsCisJCQkJCWlkeCArIDEsIHNpemUsIG5yX3BhZ2VzKTsKKwkJCWdvdG8gZXJyb3Jfb3V0OworCQl9CisKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyb3Jfb3V0OgorCisJLyogT25seSBsYXN0IGVsZW1lbnQgY2FuIGJlIG51bGwgcG9pbnRlciBzbyBjaGVjayBmb3IgaXQgZmlyc3QuICovCisJaWYgKCgqYnVmKS0+ZGF0YVtpZHhdKQorCQlrZnJlZSgoKmJ1ZiktPmRhdGFbaWR4XSk7CisKKwlmb3IgKC0taWR4OyBpZHggPj0gMDsgLS1pZHgpCisJCWtmcmVlKCgqYnVmKS0+ZGF0YVtpZHhdKTsKKworCWtmcmVlKCpidWYpOworCXJldHVybiAtRU5PTUVNOworfQorRVhQT1JUX1NZTUJPTChkcm1fYnVmZmVyX2FsbG9jKTsKKworLyoqCisgKiBDb3B5IHRoZSB1c2VyIGRhdGEgdG8gdGhlIGJlZ2luIG9mIHRoZSBidWZmZXIgYW5kIHJlc2V0IHRoZSBwcm9jZXNzaW5nCisgKiBpdGVyYXRvci4KKyAqCisgKiAgIHVzZXJfZGF0YTogQSBwb2ludGVyIHRoZSBkYXRhIHRoYXQgaXMgY29waWVkIHRvIHRoZSBidWZmZXIuCisgKiAgIHNpemU6IFRoZSBOdW1iZXIgb2YgYnl0ZXMgdG8gY29weS4KKyAqLworZXh0ZXJuIGludCBkcm1fYnVmZmVyX2NvcHlfZnJvbV91c2VyKHN0cnVjdCBkcm1fYnVmZmVyICpidWYsCisJCXZvaWQgX191c2VyICp1c2VyX2RhdGEsIGludCBzaXplKQoreworCWludCBucl9wYWdlcyA9IHNpemUgLyBQQUdFX1NJWkUgKyAxOworCWludCBpZHg7CisKKwlpZiAoc2l6ZSA+IGJ1Zi0+c2l6ZSkgeworCQlEUk1fRVJST1IoIlJlcXVlc3RpbmcgdG8gY29weSAlZCBieXRlcyB0byBhIGRybSBidWZmZXIgd2l0aCIKKwkJCQkiICVkIGJ5dGVzIHNwYWNlXG4iLAorCQkJCXNpemUsIGJ1Zi0+c2l6ZSk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKworCWZvciAoaWR4ID0gMDsgaWR4IDwgbnJfcGFnZXM7ICsraWR4KSB7CisKKwkJaWYgKERSTV9DT1BZX0ZST01fVVNFUihidWYtPmRhdGFbaWR4XSwKKwkJCXVzZXJfZGF0YSArIGlkeCAqIFBBR0VfU0laRSwKKwkJCW1pbihQQUdFX1NJWkUsIHNpemUgLSBpZHggKiBQQUdFX1NJWkUpKSkgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gY29weSB1c2VyIGRhdGEgKCVwKSB0byBkcm0gYnVmZmVyIgorCQkJCQkiICglcCkgJWR0aCBwYWdlLlxuIiwKKwkJCQkJdXNlcl9kYXRhLCBidWYsIGlkeCk7CisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQl9CisJfQorCWJ1Zi0+aXRlcmF0b3IgPSAwOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChkcm1fYnVmZmVyX2NvcHlfZnJvbV91c2VyKTsKKworLyoqCisgKiBGcmVlIHRoZSBkcm0gYnVmZmVyIG9iamVjdAorICovCit2b2lkIGRybV9idWZmZXJfZnJlZShzdHJ1Y3QgZHJtX2J1ZmZlciAqYnVmKQoreworCisJaWYgKGJ1ZiAhPSBOVUxMKSB7CisKKwkJaW50IG5yX3BhZ2VzID0gYnVmLT5zaXplIC8gUEFHRV9TSVpFICsgMTsKKwkJaW50IGlkeDsKKwkJZm9yIChpZHggPSAwOyBpZHggPCBucl9wYWdlczsgKytpZHgpCisJCQlrZnJlZShidWYtPmRhdGFbaWR4XSk7CisKKwkJa2ZyZWUoYnVmKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGRybV9idWZmZXJfZnJlZSk7CisKKy8qKgorICogUmVhZCBhbiBvYmplY3QgZnJvbSBidWZmZXIgdGhhdCBtYXkgYmUgc3BsaXQgdG8gbXVsdGlwbGUgcGFydHMuIElmIG9iamVjdAorICogaXMgbm90IHNwbGl0IGZ1bmN0aW9uIGp1c3QgcmV0dXJucyB0aGUgcG9pbnRlciB0byBvYmplY3QgaW4gYnVmZmVyLiBCdXQgaW4KKyAqIGNhc2Ugb2Ygc3BsaXQgb2JqZWN0IGRhdGEgaXMgY29waWVkIHRvIGdpdmVuIHN0YWNrIG9iamVjdCB0aGF0IGlzIHN1cGxpZWQKKyAqIGJ5IGNhbGxlci4KKyAqCisgKiBUaGUgcHJvY2Vzc2luZyBsb2NhdGlvbiBvZiB0aGUgYnVmZmVyIGlzIGFsc28gYWR2YW5jZWQgdG8gdGhlIG5leHQgYnl0ZQorICogYWZ0ZXIgdGhlIG9iamVjdC4KKyAqCisgKiAgIG9ianNpemU6IFRoZSBzaXplIG9mIHRoZSBvYmpldCBpbiBieXRlcy4KKyAqICAgc3RhY2tfb2JqOiBBIHBvaW50ZXIgdG8gYSBtZW1vcnkgbG9jYXRpb24gd2hlcmUgb2JqZWN0IGNhbiBiZSBjb3BpZWQuCisgKi8KK3ZvaWQgKmRybV9idWZmZXJfcmVhZF9vYmplY3Qoc3RydWN0IGRybV9idWZmZXIgKmJ1ZiwKKwkJaW50IG9ianNpemUsIHZvaWQgKnN0YWNrX29iaikKK3sKKwlpbnQgaWR4ID0gZHJtX2J1ZmZlcl9pbmRleChidWYpOworCWludCBwYWdlID0gZHJtX2J1ZmZlcl9wYWdlKGJ1Zik7CisJdm9pZCAqb2JqID0gMDsKKworCWlmIChpZHggKyBvYmpzaXplIDw9IFBBR0VfU0laRSkgeworCQlvYmogPSAmYnVmLT5kYXRhW3BhZ2VdW2lkeF07CisJfSBlbHNlIHsKKwkJLyogVGhlIG9iamVjdCBpcyBzcGxpdCB3aGljaCBmb3JjZXMgY29weSB0byB0ZW1wb3Jhcnkgb2JqZWN0LiovCisJCWludCBiZWdpbnN6ID0gUEFHRV9TSVpFIC0gaWR4OworCQltZW1jcHkoc3RhY2tfb2JqLCAmYnVmLT5kYXRhW3BhZ2VdW2lkeF0sIGJlZ2luc3opOworCisJCW1lbWNweShzdGFja19vYmogKyBiZWdpbnN6LCAmYnVmLT5kYXRhW3BhZ2UgKyAxXVswXSwKKwkJCQlvYmpzaXplIC0gYmVnaW5zeik7CisKKwkJb2JqID0gc3RhY2tfb2JqOworCX0KKworCWRybV9idWZmZXJfYWR2YW5jZShidWYsIG9ianNpemUpOworCXJldHVybiBvYmo7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9idWZmZXJfcmVhZF9vYmplY3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9jcnRjX2hlbHBlci5jCmluZGV4IDdkMGYwMGEuLmYyYWFmMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY3J0Y19oZWxwZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2NydGNfaGVscGVyLmMKQEAgLTgzNiwxMSArODM2LDcgQEAKIAkJCW1vZGVfY2hhbmdlZCA9IHRydWU7CiAJCX0gZWxzZSBpZiAoc2V0LT5mYiA9PSBOVUxMKSB7CiAJCQltb2RlX2NoYW5nZWQgPSB0cnVlOwotCQl9IGVsc2UgaWYgKChzZXQtPmZiLT5iaXRzX3Blcl9waXhlbCAhPQotCQkJIHNldC0+Y3J0Yy0+ZmItPmJpdHNfcGVyX3BpeGVsKSB8fAotCQkJIHNldC0+ZmItPmRlcHRoICE9IHNldC0+Y3J0Yy0+ZmItPmRlcHRoKQotCQkJZmJfY2hhbmdlZCA9IHRydWU7Ci0JCWVsc2UKKwkJfSBlbHNlCiAJCQlmYl9jaGFuZ2VkID0gdHJ1ZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCmluZGV4IDc2NmM0NjguLmYzYzU4ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwpAQCAtMTI1LDI4ICsxMjUsMjggQEAKIAogCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX1VQREFURV9EUkFXLCBkcm1fdXBkYXRlX2RyYXdhYmxlX2luZm8sIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWSksCiAKLQlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9HRU1fQ0xPU0UsIGRybV9nZW1fY2xvc2VfaW9jdGwsIDApLAotCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX0dFTV9GTElOSywgZHJtX2dlbV9mbGlua19pb2N0bCwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX0dFTV9PUEVOLCBkcm1fZ2VtX29wZW5faW9jdGwsIERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9HRU1fQ0xPU0UsIGRybV9nZW1fY2xvc2VfaW9jdGwsIERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfR0VNX0ZMSU5LLCBkcm1fZ2VtX2ZsaW5rX2lvY3RsLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX0dFTV9PUEVOLCBkcm1fZ2VtX29wZW5faW9jdGwsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksCiAKLQlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0dFVFJFU09VUkNFUywgZHJtX21vZGVfZ2V0cmVzb3VyY2VzLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XKSwKLQlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0dFVENSVEMsIGRybV9tb2RlX2dldGNydGMsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1cpLAotCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfU0VUQ1JUQywgZHJtX21vZGVfc2V0Y3J0YywgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPVyksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9DVVJTT1IsIGRybV9tb2RlX2N1cnNvcl9pb2N0bCwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPVyksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9HRVRHQU1NQSwgZHJtX21vZGVfZ2FtbWFfZ2V0X2lvY3RsLCBEUk1fTUFTVEVSKSwKLQlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX1NFVEdBTU1BLCBkcm1fbW9kZV9nYW1tYV9zZXRfaW9jdGwsIERSTV9NQVNURVIpLAotCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfR0VURU5DT0RFUiwgZHJtX21vZGVfZ2V0ZW5jb2RlciwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPVyksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9HRVRDT05ORUNUT1IsIGRybV9tb2RlX2dldGNvbm5lY3RvciwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPVyksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9BVFRBQ0hNT0RFLCBkcm1fbW9kZV9hdHRhY2htb2RlX2lvY3RsLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XKSwKLQlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0RFVEFDSE1PREUsIGRybV9tb2RlX2RldGFjaG1vZGVfaW9jdGwsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1cpLAotCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfR0VUUFJPUEVSVFksIGRybV9tb2RlX2dldHByb3BlcnR5X2lvY3RsLCBEUk1fTUFTVEVSIHwgRFJNX0NPTlRST0xfQUxMT1cpLAotCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfU0VUUFJPUEVSVFksIGRybV9tb2RlX2Nvbm5lY3Rvcl9wcm9wZXJ0eV9zZXRfaW9jdGwsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1cpLAotCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfR0VUUFJPUEJMT0IsIGRybV9tb2RlX2dldGJsb2JfaW9jdGwsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1cpLAotCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfR0VURkIsIGRybV9tb2RlX2dldGZiLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XKSwKLQlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0FEREZCLCBkcm1fbW9kZV9hZGRmYiwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPVyksCi0JRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9STUZCLCBkcm1fbW9kZV9ybWZiLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XKSwKLQlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX1BBR0VfRkxJUCwgZHJtX21vZGVfcGFnZV9mbGlwX2lvY3RsLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XKSwKLQlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0RJUlRZRkIsIGRybV9tb2RlX2RpcnR5ZmJfaW9jdGwsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1cpCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9HRVRSRVNPVVJDRVMsIGRybV9tb2RlX2dldHJlc291cmNlcywgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPV3xEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfR0VUQ1JUQywgZHJtX21vZGVfZ2V0Y3J0YywgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPV3xEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfU0VUQ1JUQywgZHJtX21vZGVfc2V0Y3J0YywgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPV3xEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfQ1VSU09SLCBkcm1fbW9kZV9jdXJzb3JfaW9jdGwsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1d8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0dFVEdBTU1BLCBkcm1fbW9kZV9nYW1tYV9nZXRfaW9jdGwsIERSTV9NQVNURVJ8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX1NFVEdBTU1BLCBkcm1fbW9kZV9nYW1tYV9zZXRfaW9jdGwsIERSTV9NQVNURVJ8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0dFVEVOQ09ERVIsIGRybV9tb2RlX2dldGVuY29kZXIsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1d8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0dFVENPTk5FQ1RPUiwgZHJtX21vZGVfZ2V0Y29ubmVjdG9yLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9BVFRBQ0hNT0RFLCBkcm1fbW9kZV9hdHRhY2htb2RlX2lvY3RsLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9ERVRBQ0hNT0RFLCBkcm1fbW9kZV9kZXRhY2htb2RlX2lvY3RsLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9HRVRQUk9QRVJUWSwgZHJtX21vZGVfZ2V0cHJvcGVydHlfaW9jdGwsIERSTV9NQVNURVIgfCBEUk1fQ09OVFJPTF9BTExPV3xEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfU0VUUFJPUEVSVFksIGRybV9tb2RlX2Nvbm5lY3Rvcl9wcm9wZXJ0eV9zZXRfaW9jdGwsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1d8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0dFVFBST1BCTE9CLCBkcm1fbW9kZV9nZXRibG9iX2lvY3RsLCBEUk1fTUFTVEVSfERSTV9DT05UUk9MX0FMTE9XfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fSU9DVExfTU9ERV9HRVRGQiwgZHJtX21vZGVfZ2V0ZmIsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1d8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0FEREZCLCBkcm1fbW9kZV9hZGRmYiwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPV3xEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfUk1GQiwgZHJtX21vZGVfcm1mYiwgRFJNX01BU1RFUnxEUk1fQ09OVFJPTF9BTExPV3xEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX0lPQ1RMX01PREVfUEFHRV9GTElQLCBkcm1fbW9kZV9wYWdlX2ZsaXBfaW9jdGwsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1d8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9JT0NUTF9NT0RFX0RJUlRZRkIsIGRybV9tb2RlX2RpcnR5ZmJfaW9jdGwsIERSTV9NQVNURVJ8RFJNX0NPTlRST0xfQUxMT1d8RFJNX1VOTE9DS0VEKQogfTsKIAogI2RlZmluZSBEUk1fQ09SRV9JT0NUTF9DT1VOVAlBUlJBWV9TSVpFKCBkcm1faW9jdGxzICkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKaW5kZXggYWI2Yzk3My4uZjk3ZTdjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKQEAgLTYwLDggKzYwLDcgQEAKICNkZWZpbmUgRURJRF9RVUlSS19GSVJTVF9ERVRBSUxFRF9QUkVGRVJSRUQJKDEgPDwgNSkKIC8qIHVzZSAraHN5bmMgK3ZzeW5jIGZvciBkZXRhaWxlZCBtb2RlICovCiAjZGVmaW5lIEVESURfUVVJUktfREVUQUlMRURfU1lOQ19QUAkJKDEgPDwgNikKLS8qIGRlZmluZSB0aGUgbnVtYmVyIG9mIEV4dGVuc2lvbiBFRElEIGJsb2NrICovCi0jZGVmaW5lIE1BWF9FRElEX0VYVF9OVU0gNAorCiAKICNkZWZpbmUgTEVWRUxfRE1UCTAKICNkZWZpbmUgTEVWRUxfR1RGCTEKQEAgLTExNCwxNCArMTEzLDE0IEBACiB9OwogCiAvKioKLSAqIGVkaWRfaXNfdmFsaWQgLSBzYW5pdHkgY2hlY2sgRURJRCBkYXRhCisgKiBkcm1fZWRpZF9pc192YWxpZCAtIHNhbml0eSBjaGVjayBFRElEIGRhdGEKICAqIEBlZGlkOiBFRElEIGRhdGEKICAqCiAgKiBTYW5pdHkgY2hlY2sgdGhlIEVESUQgYmxvY2sgYnkgbG9va2luZyBhdCB0aGUgaGVhZGVyLCB0aGUgdmVyc2lvbiBudW1iZXIKICAqIGFuZCB0aGUgY2hlY2tzdW0uICBSZXR1cm4gMCBpZiB0aGUgRURJRCBkb2Vzbid0IGNoZWNrIG91dCwgb3IgMSBpZiBpdCdzCiAgKiB2YWxpZC4KICAqLwotc3RhdGljIGJvb2wgZWRpZF9pc192YWxpZChzdHJ1Y3QgZWRpZCAqZWRpZCkKK2Jvb2wgZHJtX2VkaWRfaXNfdmFsaWQoc3RydWN0IGVkaWQgKmVkaWQpCiB7CiAJaW50IGksIHNjb3JlID0gMDsKIAl1OCBjc3VtID0gMDsKQEAgLTE2Myw2ICsxNjIsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0woZHJtX2VkaWRfaXNfdmFsaWQpOwogCiAvKioKICAqIGVkaWRfdmVuZG9yIC0gbWF0Y2ggYSBzdHJpbmcgYWdhaW5zdCBFRElEJ3Mgb2JmdXNjYXRlZCB2ZW5kb3IgZmllbGQKQEAgLTExMTIsOCArMTExMiw4IEBACiAJfQogCiAJLyogQ2hvc2UgcmVhbCBFRElEIGV4dGVuc2lvbiBudW1iZXIgKi8KLQllZGlkX2V4dF9udW0gPSBlZGlkLT5leHRlbnNpb25zID4gTUFYX0VESURfRVhUX05VTSA/Ci0JCSAgICAgICBNQVhfRURJRF9FWFRfTlVNIDogZWRpZC0+ZXh0ZW5zaW9uczsKKwllZGlkX2V4dF9udW0gPSBlZGlkLT5leHRlbnNpb25zID4gRFJNX01BWF9FRElEX0VYVF9OVU0gPworCQlEUk1fTUFYX0VESURfRVhUX05VTSA6IGVkaWQtPmV4dGVuc2lvbnM7CiAKIAkvKiBGaW5kIENFQSBleHRlbnNpb24gKi8KIAlmb3IgKGkgPSAwOyBpIDwgZWRpZF9leHRfbnVtOyBpKyspIHsKQEAgLTExOTUsNyArMTE5NSw3IEBACiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQlpZiAoZHJtX2RvX3Byb2JlX2RkY19lZGlkKGFkYXB0ZXIsIGJ1ZiwgbGVuKSkKIAkJCXJldHVybiAtMTsKLQkJaWYgKGVkaWRfaXNfdmFsaWQoKHN0cnVjdCBlZGlkICopYnVmKSkKKwkJaWYgKGRybV9lZGlkX2lzX3ZhbGlkKChzdHJ1Y3QgZWRpZCAqKWJ1ZikpCiAJCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTEyMjAsNyArMTIyMCw3IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgZWRpZCAqZWRpZDsKIAotCWVkaWQgPSBrbWFsbG9jKEVESURfTEVOR1RIICogKE1BWF9FRElEX0VYVF9OVU0gKyAxKSwKKwllZGlkID0ga21hbGxvYyhFRElEX0xFTkdUSCAqIChEUk1fTUFYX0VESURfRVhUX05VTSArIDEpLAogCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKGVkaWQgPT0gTlVMTCkgewogCQlkZXZfd2FybigmY29ubmVjdG9yLT5kZXYtPnBkZXYtPmRldiwKQEAgLTEyMzgsMTQgKzEyMzgsMTQgQEAKIAlpZiAoZWRpZC0+ZXh0ZW5zaW9ucyAhPSAwKSB7CiAJCWludCBlZGlkX2V4dF9udW0gPSBlZGlkLT5leHRlbnNpb25zOwogCi0JCWlmIChlZGlkX2V4dF9udW0gPiBNQVhfRURJRF9FWFRfTlVNKSB7CisJCWlmIChlZGlkX2V4dF9udW0gPiBEUk1fTUFYX0VESURfRVhUX05VTSkgewogCQkJZGV2X3dhcm4oJmNvbm5lY3Rvci0+ZGV2LT5wZGV2LT5kZXYsCiAJCQkJICJUaGUgbnVtYmVyIG9mIGV4dGVuc2lvbiglZCkgaXMgIgogCQkJCSAib3ZlciBtYXggKCVkKSwgYWN0dWFsbHkgcmVhZCBudW1iZXIgKCVkKVxuIiwKLQkJCQkgZWRpZF9leHRfbnVtLCBNQVhfRURJRF9FWFRfTlVNLAotCQkJCSBNQVhfRURJRF9FWFRfTlVNKTsKKwkJCQkgZWRpZF9leHRfbnVtLCBEUk1fTUFYX0VESURfRVhUX05VTSwKKwkJCQkgRFJNX01BWF9FRElEX0VYVF9OVU0pOwogCQkJLyogUmVzZXQgRURJRCBleHRlbnNpb24gbnVtYmVyIHRvIGJlIHJlYWQgKi8KLQkJCWVkaWRfZXh0X251bSA9IE1BWF9FRElEX0VYVF9OVU07CisJCQllZGlkX2V4dF9udW0gPSBEUk1fTUFYX0VESURfRVhUX05VTTsKIAkJfQogCQkvKiBSZWFkIEVESUQgaW5jbHVkaW5nIGV4dGVuc2lvbnMgdG9vICovCiAJCXJldCA9IGRybV9kZGNfcmVhZF9lZGlkKGNvbm5lY3RvciwgYWRhcHRlciwgKGNoYXIgKillZGlkLApAQCAtMTI4OCw4ICsxMjg4LDggQEAKIAkJZ290byBlbmQ7CiAKIAkvKiBDaG9zZSByZWFsIEVESUQgZXh0ZW5zaW9uIG51bWJlciAqLwotCWVkaWRfZXh0X251bSA9IGVkaWQtPmV4dGVuc2lvbnMgPiBNQVhfRURJRF9FWFRfTlVNID8KLQkJICAgICAgIE1BWF9FRElEX0VYVF9OVU0gOiBlZGlkLT5leHRlbnNpb25zOworCWVkaWRfZXh0X251bSA9IGVkaWQtPmV4dGVuc2lvbnMgPiBEUk1fTUFYX0VESURfRVhUX05VTSA/CisJCSAgICAgICBEUk1fTUFYX0VESURfRVhUX05VTSA6IGVkaWQtPmV4dGVuc2lvbnM7CiAKIAkvKiBGaW5kIENFQSBleHRlbnNpb24gKi8KIAlmb3IgKGkgPSAwOyBpIDwgZWRpZF9leHRfbnVtOyBpKyspIHsKQEAgLTEzNDYsNyArMTM0Niw3IEBACiAJaWYgKGVkaWQgPT0gTlVMTCkgewogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKCFlZGlkX2lzX3ZhbGlkKGVkaWQpKSB7CisJaWYgKCFkcm1fZWRpZF9pc192YWxpZChlZGlkKSkgewogCQlkZXZfd2FybigmY29ubmVjdG9yLT5kZXYtPnBkZXYtPmRldiwgIiVzOiBFRElEIGludmFsaWQuXG4iLAogCQkJIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKaW5kZXggMGY5ZTkwNTUuLjUwNTQ5NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVyLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9mYl9oZWxwZXIuYwpAQCAtMjcsNiArMjcsNyBAQAogICogICAgICBEYXZlIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KICAqICAgICAgSmVzc2UgQmFybmVzIDxqZXNzZS5iYXJuZXNAaW50ZWwuY29tPgogICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgImRybVAuaCIKQEAgLTUwLDIxICs1MSw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRybV9mYl9oZWxwZXJfYWRkX2Nvbm5lY3Rvcik7CiAKLXN0YXRpYyBpbnQgbXlfYXRvaShjb25zdCBjaGFyICpuYW1lKQotewotCWludCB2YWwgPSAwOwotCi0JZm9yICg7OyBuYW1lKyspIHsKLQkJc3dpdGNoICgqbmFtZSkgewotCQljYXNlICcwJyAuLi4gJzknOgotCQkJdmFsID0gMTAqdmFsKygqbmFtZS0nMCcpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gdmFsOwotCQl9Ci0JfQotfQotCiAvKioKICAqIGRybV9mYl9oZWxwZXJfY29ubmVjdG9yX3BhcnNlX2NvbW1hbmRfbGluZSAtIHBhcnNlIGNvbW1hbmQgbGluZSBmb3IgY29ubmVjdG9yCiAgKiBAY29ubmVjdG9yIC0gY29ubmVjdG9yIHRvIHBhcnNlIGxpbmUgZm9yCkBAIC0xMTEsNyArOTcsNyBAQAogCQkJbmFtZWxlbiA9IGk7CiAJCQlpZiAoIXJlZnJlc2hfc3BlY2lmaWVkICYmICFicHBfc3BlY2lmaWVkICYmCiAJCQkgICAgIXlyZXNfc3BlY2lmaWVkKSB7Ci0JCQkJcmVmcmVzaCA9IG15X2F0b2koJm5hbWVbaSsxXSk7CisJCQkJcmVmcmVzaCA9IHNpbXBsZV9zdHJ0b2woJm5hbWVbaSsxXSwgTlVMTCwgMTApOwogCQkJCXJlZnJlc2hfc3BlY2lmaWVkID0gMTsKIAkJCQlpZiAoY3Z0IHx8IHJiKQogCQkJCQljdnQgPSAwOwpAQCAtMTIxLDcgKzEwNyw3IEBACiAJCWNhc2UgJy0nOgogCQkJbmFtZWxlbiA9IGk7CiAJCQlpZiAoIWJwcF9zcGVjaWZpZWQgJiYgIXlyZXNfc3BlY2lmaWVkKSB7Ci0JCQkJYnBwID0gbXlfYXRvaSgmbmFtZVtpKzFdKTsKKwkJCQlicHAgPSBzaW1wbGVfc3RydG9sKCZuYW1lW2krMV0sIE5VTEwsIDEwKTsKIAkJCQlicHBfc3BlY2lmaWVkID0gMTsKIAkJCQlpZiAoY3Z0IHx8IHJiKQogCQkJCQljdnQgPSAwOwpAQCAtMTMwLDcgKzExNiw3IEBACiAJCQlicmVhazsKIAkJY2FzZSAneCc6CiAJCQlpZiAoIXlyZXNfc3BlY2lmaWVkKSB7Ci0JCQkJeXJlcyA9IG15X2F0b2koJm5hbWVbaSsxXSk7CisJCQkJeXJlcyA9IHNpbXBsZV9zdHJ0b2woJm5hbWVbaSsxXSwgTlVMTCwgMTApOwogCQkJCXlyZXNfc3BlY2lmaWVkID0gMTsKIAkJCX0gZWxzZQogCQkJCWdvdG8gZG9uZTsKQEAgLTE3MCw3ICsxNTYsNyBAQAogCQl9CiAJfQogCWlmIChpIDwgMCAmJiB5cmVzX3NwZWNpZmllZCkgewotCQl4cmVzID0gbXlfYXRvaShuYW1lKTsKKwkJeHJlcyA9IHNpbXBsZV9zdHJ0b2wobmFtZSwgTlVMTCwgMTApOwogCQlyZXNfc3BlY2lmaWVkID0gMTsKIAl9CiBkb25lOgpAQCAtNjk0LDcgKzY4MCw3IEBACiAJaW50IGk7CiAKIAlpZiAodmFyLT5waXhjbG9jayAhPSAwKSB7Ci0JCURSTV9FUlJPUigiUElYRUwgQ0xDT0sgU0VUXG4iKTsKKwkJRFJNX0VSUk9SKCJQSVhFTCBDTE9DSyBTRVRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCmluZGV4IDhiZjM3NzAuLmFhODlkNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYwpAQCAtMTkyLDkgKzE5Miw3IEBACiAJaWRyX3JlbW92ZSgmZmlscC0+b2JqZWN0X2lkciwgaGFuZGxlKTsKIAlzcGluX3VubG9jaygmZmlscC0+dGFibGVfbG9jayk7CiAKLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JZHJtX2dlbV9vYmplY3RfaGFuZGxlX3VucmVmZXJlbmNlKG9iaik7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfaGFuZGxlX3VucmVmZXJlbmNlX3VubG9ja2VkKG9iaik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMyNSw5ICszMjMsNyBAQAogCX0KIAogZXJyOgotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG9iaik7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzU4LDkgKzM1NCw3IEBACiAJCXJldHVybiAtRU5PRU5UOwogCiAJcmV0ID0gZHJtX2dlbV9oYW5kbGVfY3JlYXRlKGZpbGVfcHJpdiwgb2JqLCAmaGFuZGxlKTsKLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTM5MCw3ICszODQsNyBAQAogewogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gcHRyOwogCi0JZHJtX2dlbV9vYmplY3RfaGFuZGxlX3VucmVmZXJlbmNlKG9iaik7CisJZHJtX2dlbV9vYmplY3RfaGFuZGxlX3VucmVmZXJlbmNlX3VubG9ja2VkKG9iaik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQwMywxNiArMzk3LDI1IEBACiB2b2lkCiBkcm1fZ2VtX3JlbGVhc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUpCiB7Ci0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCWlkcl9mb3JfZWFjaCgmZmlsZV9wcml2YXRlLT5vYmplY3RfaWRyLAogCQkgICAgICZkcm1fZ2VtX29iamVjdF9yZWxlYXNlX2hhbmRsZSwgTlVMTCk7CiAKIAlpZHJfZGVzdHJveSgmZmlsZV9wcml2YXRlLT5vYmplY3RfaWRyKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKK30KKworc3RhdGljIHZvaWQKK2RybV9nZW1fb2JqZWN0X2ZyZWVfY29tbW9uKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlmcHV0KG9iai0+ZmlscCk7CisJYXRvbWljX2RlYygmZGV2LT5vYmplY3RfY291bnQpOworCWF0b21pY19zdWIob2JqLT5zaXplLCAmZGV2LT5vYmplY3RfbWVtb3J5KTsKKwlrZnJlZShvYmopOwogfQogCiAvKioKICAqIENhbGxlZCBhZnRlciB0aGUgbGFzdCByZWZlcmVuY2UgdG8gdGhlIG9iamVjdCBoYXMgYmVlbiBsb3N0LgorICogTXVzdCBiZSBjYWxsZWQgaG9sZGluZyBzdHJ1Y3RfIG11dGV4CiAgKgogICogRnJlZXMgdGhlIG9iamVjdAogICovCkBAIC00MjcsMTQgKzQzMCw0MCBAQAogCWlmIChkZXYtPmRyaXZlci0+Z2VtX2ZyZWVfb2JqZWN0ICE9IE5VTEwpCiAJCWRldi0+ZHJpdmVyLT5nZW1fZnJlZV9vYmplY3Qob2JqKTsKIAotCWZwdXQob2JqLT5maWxwKTsKLQlhdG9taWNfZGVjKCZkZXYtPm9iamVjdF9jb3VudCk7Ci0JYXRvbWljX3N1YihvYmotPnNpemUsICZkZXYtPm9iamVjdF9tZW1vcnkpOwotCWtmcmVlKG9iaik7CisJZHJtX2dlbV9vYmplY3RfZnJlZV9jb21tb24ob2JqKTsKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2dlbV9vYmplY3RfZnJlZSk7CiAKIC8qKgorICogQ2FsbGVkIGFmdGVyIHRoZSBsYXN0IHJlZmVyZW5jZSB0byB0aGUgb2JqZWN0IGhhcyBiZWVuIGxvc3QuCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRob3V0IGhvbGRpbmcgc3RydWN0X211dGV4CisgKgorICogRnJlZXMgdGhlIG9iamVjdAorICovCit2b2lkCitkcm1fZ2VtX29iamVjdF9mcmVlX3VubG9ja2VkKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqKSBrcmVmOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKworCWlmIChkZXYtPmRyaXZlci0+Z2VtX2ZyZWVfb2JqZWN0X3VubG9ja2VkICE9IE5VTEwpCisJCWRldi0+ZHJpdmVyLT5nZW1fZnJlZV9vYmplY3RfdW5sb2NrZWQob2JqKTsKKwllbHNlIGlmIChkZXYtPmRyaXZlci0+Z2VtX2ZyZWVfb2JqZWN0ICE9IE5VTEwpIHsKKwkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlkZXYtPmRyaXZlci0+Z2VtX2ZyZWVfb2JqZWN0KG9iaik7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCX0KKworCWRybV9nZW1fb2JqZWN0X2ZyZWVfY29tbW9uKG9iaik7Cit9CitFWFBPUlRfU1lNQk9MKGRybV9nZW1fb2JqZWN0X2ZyZWVfdW5sb2NrZWQpOworCitzdGF0aWMgdm9pZCBkcm1fZ2VtX29iamVjdF9yZWZfYnVnKHN0cnVjdCBrcmVmICpsaXN0X2tyZWYpCit7CisJQlVHKCk7Cit9CisKKy8qKgogICogQ2FsbGVkIGFmdGVyIHRoZSBsYXN0IGhhbmRsZSB0byB0aGUgb2JqZWN0IGhhcyBiZWVuIGNsb3NlZAogICoKICAqIFJlbW92ZXMgYW55IG5hbWUgZm9yIHRoZSBvYmplY3QuIE5vdGUgdGhhdCB0aGlzIG11c3QgYmUKQEAgLTQ1OCw4ICs0ODcsMTAgQEAKIAkJLyoKIAkJICogVGhlIG9iamVjdCBuYW1lIGhlbGQgYSByZWZlcmVuY2UgdG8gdGhpcyBvYmplY3QsIGRyb3AKIAkJICogdGhhdCBub3cuCisJCSoKKwkJKiBUaGlzIGNhbm5vdCBiZSB0aGUgbGFzdCByZWZlcmVuY2UsIHNpbmNlIHRoZSBoYW5kbGUgaG9sZHMgb25lIHRvby4KIAkJICovCi0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCWtyZWZfcHV0KCZvYmotPnJlZmNvdW50LCBkcm1fZ2VtX29iamVjdF9yZWZfYnVnKTsKIAl9IGVsc2UKIAkJc3Bpbl91bmxvY2soJmRldi0+b2JqZWN0X25hbWVfbG9jayk7CiAKQEAgLTQ3NywxMSArNTA4LDggQEAKIHZvaWQgZHJtX2dlbV92bV9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IHZtYS0+dm1fcHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKIAotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG9iaik7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9nZW1fdm1fY2xvc2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKaW5kZXggN2U0MmI3ZS4uMDE0Y2UyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYwpAQCAtNzAsMTkgKzcwLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIERpc3BsYXkgdGhlIHZlcnNpb24gb2YgZHJtX2NvcmUuIFRoaXMgZG9lc24ndCB3b3JrIHJpZ2h0IGluIGN1cnJlbnQgZGVzaWduICovCi1zdGF0aWMgc3NpemVfdCB2ZXJzaW9uX3Nob3coc3RydWN0IGNsYXNzICpkZXYsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlcyAlZC4lZC4lZCAlc1xuIiwgQ09SRV9OQU1FLCBDT1JFX01BSk9SLAotCQkgICAgICAgQ09SRV9NSU5PUiwgQ09SRV9QQVRDSExFVkVMLCBDT1JFX0RBVEUpOwotfQotCiBzdGF0aWMgY2hhciAqZHJtX2Rldm5vZGUoc3RydWN0IGRldmljZSAqZGV2LCBtb2RlX3QgKm1vZGUpCiB7CiAJcmV0dXJuIGthc3ByaW50ZihHRlBfS0VSTkVMLCAiZHJpLyVzIiwgZGV2X25hbWUoZGV2KSk7CiB9CiAKLXN0YXRpYyBDTEFTU19BVFRSKHZlcnNpb24sIFNfSVJVR08sIHZlcnNpb25fc2hvdywgTlVMTCk7CitzdGF0aWMgQ0xBU1NfQVRUUl9TVFJJTkcodmVyc2lvbiwgU19JUlVHTywKKwkJQ09SRV9OQU1FICIgIgorCQlfX3N0cmluZ2lmeShDT1JFX01BSk9SKSAiLiIKKwkJX19zdHJpbmdpZnkoQ09SRV9NSU5PUikgIi4iCisJCV9fc3RyaW5naWZ5KENPUkVfUEFUQ0hMRVZFTCkgIiAiCisJCUNPUkVfREFURSk7CiAKIC8qKgogICogZHJtX3N5c2ZzX2NyZWF0ZSAtIGNyZWF0ZSBhIHN0cnVjdCBkcm1fc3lzZnNfY2xhc3Mgc3RydWN0dXJlCkBAIC0xMDksNyArMTA3LDcgQEAKIAljbGFzcy0+c3VzcGVuZCA9IGRybV9jbGFzc19zdXNwZW5kOwogCWNsYXNzLT5yZXN1bWUgPSBkcm1fY2xhc3NfcmVzdW1lOwogCi0JZXJyID0gY2xhc3NfY3JlYXRlX2ZpbGUoY2xhc3MsICZjbGFzc19hdHRyX3ZlcnNpb24pOworCWVyciA9IGNsYXNzX2NyZWF0ZV9maWxlKGNsYXNzLCAmY2xhc3NfYXR0cl92ZXJzaW9uLmF0dHIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9jbGFzczsKIApAQCAtMTMyLDcgKzEzMCw3IEBACiB7CiAJaWYgKChkcm1fY2xhc3MgPT0gTlVMTCkgfHwgKElTX0VSUihkcm1fY2xhc3MpKSkKIAkJcmV0dXJuOwotCWNsYXNzX3JlbW92ZV9maWxlKGRybV9jbGFzcywgJmNsYXNzX2F0dHJfdmVyc2lvbik7CisJY2xhc3NfcmVtb3ZlX2ZpbGUoZHJtX2NsYXNzLCAmY2xhc3NfYXR0cl92ZXJzaW9uLmF0dHIpOwogCWNsYXNzX2Rlc3Ryb3koZHJtX2NsYXNzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwppbmRleCBhODk0YWRlLi4xMzc2ZGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlpZiAoIUlTX0lST05MQUtFKGRldikpIHsKKwlpZiAoIUhBU19QQ0hfU1BMSVQoZGV2KSkgewogCQlzZXFfcHJpbnRmKG0sICJJbnRlcnJ1cHQgZW5hYmxlOiAgICAlMDh4XG4iLAogCQkJICAgSTkxNV9SRUFEKElFUikpOwogCQlzZXFfcHJpbnRmKG0sICJJbnRlcnJ1cHQgaWRlbnRpdHk6ICAlMDh4XG4iLApAQCAtMzUwLDYgKzM1MCwzNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3QgY2hhciAqcGluX2ZsYWcoaW50IHBpbm5lZCkKK3sKKwlpZiAocGlubmVkID4gMCkKKwkJcmV0dXJuICIgUCI7CisJZWxzZSBpZiAocGlubmVkIDwgMCkKKwkJcmV0dXJuICIgcCI7CisJZWxzZQorCQlyZXR1cm4gIiI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICp0aWxpbmdfZmxhZyhpbnQgdGlsaW5nKQoreworCXN3aXRjaCAodGlsaW5nKSB7CisJZGVmYXVsdDoKKwljYXNlIEk5MTVfVElMSU5HX05PTkU6IHJldHVybiAiIjsKKwljYXNlIEk5MTVfVElMSU5HX1g6IHJldHVybiAiIFgiOworCWNhc2UgSTkxNV9USUxJTkdfWTogcmV0dXJuICIgWSI7CisJfQorfQorCitzdGF0aWMgY29uc3QgY2hhciAqZGlydHlfZmxhZyhpbnQgZGlydHkpCit7CisJcmV0dXJuIGRpcnR5ID8gIiBkaXJ0eSIgOiAiIjsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKnB1cmdlYWJsZV9mbGFnKGludCBwdXJnZWFibGUpCit7CisJcmV0dXJuIHB1cmdlYWJsZSA/ICIgcHVyZ2VhYmxlIiA6ICIiOworfQorCiBzdGF0aWMgaW50IGk5MTVfZXJyb3Jfc3RhdGUoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCiB7CiAJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKQEAgLTM1Nyw2ICszODcsNyBAQAogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZSAqZXJyb3I7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaSwgcGFnZSwgb2Zmc2V0LCBlbHQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmVycm9yX2xvY2ssIGZsYWdzKTsKIAlpZiAoIWRldl9wcml2LT5maXJzdF9lcnJvcikgewpAQCAtMzY4LDYgKzM5OSw3IEBACiAKIAlzZXFfcHJpbnRmKG0sICJUaW1lOiAlbGQgcyAlbGQgdXNcbiIsIGVycm9yLT50aW1lLnR2X3NlYywKIAkJICAgZXJyb3ItPnRpbWUudHZfdXNlYyk7CisJc2VxX3ByaW50ZihtLCAiUENJIElEOiAweCUwNHhcbiIsIGRldi0+cGNpX2RldmljZSk7CiAJc2VxX3ByaW50ZihtLCAiRUlSOiAweCUwOHhcbiIsIGVycm9yLT5laXIpOwogCXNlcV9wcmludGYobSwgIiAgUEdUQkxfRVI6IDB4JTA4eFxuIiwgZXJyb3ItPnBndGJsX2VyKTsKIAlzZXFfcHJpbnRmKG0sICIgIElOU1RQTTogMHglMDh4XG4iLCBlcnJvci0+aW5zdHBtKTsKQEAgLTM3OSw2ICs0MTEsNTkgQEAKIAkJc2VxX3ByaW50ZihtLCAiICBJTlNUUFM6IDB4JTA4eFxuIiwgZXJyb3ItPmluc3Rwcyk7CiAJCXNlcV9wcmludGYobSwgIiAgSU5TVERPTkUxOiAweCUwOHhcbiIsIGVycm9yLT5pbnN0ZG9uZTEpOwogCX0KKwlzZXFfcHJpbnRmKG0sICJzZXFubzogMHglMDh4XG4iLCBlcnJvci0+c2Vxbm8pOworCisJaWYgKGVycm9yLT5hY3RpdmVfYm9fY291bnQpIHsKKwkJc2VxX3ByaW50ZihtLCAiQnVmZmVycyBbJWRdOlxuIiwgZXJyb3ItPmFjdGl2ZV9ib19jb3VudCk7CisKKwkJZm9yIChpID0gMDsgaSA8IGVycm9yLT5hY3RpdmVfYm9fY291bnQ7IGkrKykgeworCQkJc2VxX3ByaW50ZihtLCAiICAlMDh4ICU4emQgJTA4eCAlMDh4ICUwOHglcyVzJXMlcyIsCisJCQkJICAgZXJyb3ItPmFjdGl2ZV9ib1tpXS5ndHRfb2Zmc2V0LAorCQkJCSAgIGVycm9yLT5hY3RpdmVfYm9baV0uc2l6ZSwKKwkJCQkgICBlcnJvci0+YWN0aXZlX2JvW2ldLnJlYWRfZG9tYWlucywKKwkJCQkgICBlcnJvci0+YWN0aXZlX2JvW2ldLndyaXRlX2RvbWFpbiwKKwkJCQkgICBlcnJvci0+YWN0aXZlX2JvW2ldLnNlcW5vLAorCQkJCSAgIHBpbl9mbGFnKGVycm9yLT5hY3RpdmVfYm9baV0ucGlubmVkKSwKKwkJCQkgICB0aWxpbmdfZmxhZyhlcnJvci0+YWN0aXZlX2JvW2ldLnRpbGluZyksCisJCQkJICAgZGlydHlfZmxhZyhlcnJvci0+YWN0aXZlX2JvW2ldLmRpcnR5KSwKKwkJCQkgICBwdXJnZWFibGVfZmxhZyhlcnJvci0+YWN0aXZlX2JvW2ldLnB1cmdlYWJsZSkpOworCisJCQlpZiAoZXJyb3ItPmFjdGl2ZV9ib1tpXS5uYW1lKQorCQkJCXNlcV9wcmludGYobSwgIiAobmFtZTogJWQpIiwgZXJyb3ItPmFjdGl2ZV9ib1tpXS5uYW1lKTsKKwkJCWlmIChlcnJvci0+YWN0aXZlX2JvW2ldLmZlbmNlX3JlZyAhPSBJOTE1X0ZFTkNFX1JFR19OT05FKQorCQkJCXNlcV9wcmludGYobSwgIiAoZmVuY2U6ICVkKSIsIGVycm9yLT5hY3RpdmVfYm9baV0uZmVuY2VfcmVnKTsKKworCQkJc2VxX3ByaW50ZihtLCAiXG4iKTsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVycm9yLT5iYXRjaGJ1ZmZlcik7IGkrKykgeworCQlpZiAoZXJyb3ItPmJhdGNoYnVmZmVyW2ldKSB7CisJCQlzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfb2JqZWN0ICpvYmogPSBlcnJvci0+YmF0Y2hidWZmZXJbaV07CisKKwkJCXNlcV9wcmludGYobSwgIi0tLSBndHRfb2Zmc2V0ID0gMHglMDh4XG4iLCBvYmotPmd0dF9vZmZzZXQpOworCQkJb2Zmc2V0ID0gMDsKKwkJCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBvYmotPnBhZ2VfY291bnQ7IHBhZ2UrKykgeworCQkJCWZvciAoZWx0ID0gMDsgZWx0IDwgUEFHRV9TSVpFLzQ7IGVsdCsrKSB7CisJCQkJCXNlcV9wcmludGYobSwgIiUwOHggOiAgJTA4eFxuIiwgb2Zmc2V0LCBvYmotPnBhZ2VzW3BhZ2VdW2VsdF0pOworCQkJCQlvZmZzZXQgKz0gNDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXJyb3ItPnJpbmdidWZmZXIpIHsKKwkJc3RydWN0IGRybV9pOTE1X2Vycm9yX29iamVjdCAqb2JqID0gZXJyb3ItPnJpbmdidWZmZXI7CisKKwkJc2VxX3ByaW50ZihtLCAiLS0tIHJpbmdidWZmZXIgPSAweCUwOHhcbiIsIG9iai0+Z3R0X29mZnNldCk7CisJCW9mZnNldCA9IDA7CisJCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBvYmotPnBhZ2VfY291bnQ7IHBhZ2UrKykgeworCQkJZm9yIChlbHQgPSAwOyBlbHQgPCBQQUdFX1NJWkUvNDsgZWx0KyspIHsKKwkJCQlzZXFfcHJpbnRmKG0sICIlMDh4IDogICUwOHhcbiIsIG9mZnNldCwgb2JqLT5wYWdlc1twYWdlXVtlbHRdKTsKKwkJCQlvZmZzZXQgKz0gNDsKKwkJCX0KKwkJfQorCX0KIAogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5lcnJvcl9sb2NrLCBmbGFncyk7CkBAIC0zODYsNiArNDcxLDE2NSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGk5MTVfcnN0ZGJ5X2RlbGF5cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUxNiBjcnN0YW5kZGVsYXkgPSBJOTE1X1JFQUQxNihDUlNUQU5EVklEKTsKKworCXNlcV9wcmludGYobSwgIncvY3R4OiAlZCwgdy9vIGN0eDogJWRcbiIsIChjcnN0YW5kZGVsYXkgPj4gOCkgJiAweDNmLCAoY3JzdGFuZGRlbGF5ICYgMHgzZikpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9jdXJfZGVsYXlpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdTE2IHJndnN3Y3RsID0gSTkxNV9SRUFEMTYoTUVNU1dDVEwpOworCisJc2VxX3ByaW50ZihtLCAiTGFzdCBjb21tYW5kOiAweCUwMXhcbiIsIChyZ3Zzd2N0bCA+PiAxMykgJiAweDMpOworCXNlcV9wcmludGYobSwgIkNvbW1hbmQgc3RhdHVzOiAlZFxuIiwgKHJndnN3Y3RsID4+IDEyKSAmIDEpOworCXNlcV9wcmludGYobSwgIlAlZCBERUxBWSAweCUwMnhcbiIsIChyZ3Zzd2N0bCA+PiA4KSAmIDB4ZiwKKwkJICAgcmd2c3djdGwgJiAweDNmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGk5MTVfZGVsYXlmcmVxX3RhYmxlKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdW51c2VkKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG5vZGUtPm1pbm9yLT5kZXY7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJdTMyIGRlbGF5ZnJlcTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCWRlbGF5ZnJlcSA9IEk5MTVfUkVBRChQWFZGUkVRX0JBU0UgKyBpICogNCk7CisJCXNlcV9wcmludGYobSwgIlAlMDJkVklERlJFUTogMHglMDh4XG4iLCBpLCBkZWxheWZyZXEpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBNQVBfVE9fTVYoaW50IG1hcCkKK3sKKwlyZXR1cm4gMTI1MCAtIChtYXAgKiAyNSk7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9pbnR0b2V4dF90YWJsZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBpbnR0b2V4dDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDE7IGkgPD0gMzI7IGkrKykgeworCQlpbnR0b2V4dCA9IEk5MTVfUkVBRChJTlRUT0VYVF9CQVNFX0lMSyArIGkgKiA0KTsKKwkJc2VxX3ByaW50ZihtLCAiSU5UVE9FWFQlMDJkOiAweCUwOHhcbiIsIGksIGludHRvZXh0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X2RycGNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqbm9kZSA9IChzdHJ1Y3QgZHJtX2luZm9fbm9kZSAqKSBtLT5wcml2YXRlOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBub2RlLT5taW5vci0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMiByZ3Ztb2RlY3RsID0gSTkxNV9SRUFEKE1FTU1PREVDVEwpOworCisJc2VxX3ByaW50ZihtLCAiSEQgYm9vc3Q6ICVzXG4iLCAocmd2bW9kZWN0bCAmIE1FTU1PREVfQk9PU1RfRU4pID8KKwkJICAgInllcyIgOiAibm8iKTsKKwlzZXFfcHJpbnRmKG0sICJCb29zdCBmcmVxOiAlZFxuIiwKKwkJICAgKHJndm1vZGVjdGwgJiBNRU1NT0RFX0JPT1NUX0ZSRVFfTUFTSykgPj4KKwkJICAgTUVNTU9ERV9CT09TVF9GUkVRX1NISUZUKTsKKwlzZXFfcHJpbnRmKG0sICJIVyBjb250cm9sIGVuYWJsZWQ6ICVzXG4iLAorCQkgICByZ3Ztb2RlY3RsICYgTUVNTU9ERV9IV0lETEVfRU4gPyAieWVzIiA6ICJubyIpOworCXNlcV9wcmludGYobSwgIlNXIGNvbnRyb2wgZW5hYmxlZDogJXNcbiIsCisJCSAgIHJndm1vZGVjdGwgJiBNRU1NT0RFX1NXTU9ERV9FTiA/ICJ5ZXMiIDogIm5vIik7CisJc2VxX3ByaW50ZihtLCAiR2F0ZWQgdm9sdGFnZSBjaGFuZ2U6ICVzXG4iLAorCQkgICByZ3Ztb2RlY3RsICYgTUVNTU9ERV9SQ0xLX0dBVEUgPyAieWVzIiA6ICJubyIpOworCXNlcV9wcmludGYobSwgIlN0YXJ0aW5nIGZyZXF1ZW5jeTogUCVkXG4iLAorCQkgICAocmd2bW9kZWN0bCAmIE1FTU1PREVfRlNUQVJUX01BU0spID4+IE1FTU1PREVfRlNUQVJUX1NISUZUKTsKKwlzZXFfcHJpbnRmKG0sICJNYXggZnJlcXVlbmN5OiBQJWRcbiIsCisJCSAgIChyZ3Ztb2RlY3RsICYgTUVNTU9ERV9GTUFYX01BU0spID4+IE1FTU1PREVfRk1BWF9TSElGVCk7CisJc2VxX3ByaW50ZihtLCAiTWluIGZyZXF1ZW5jeTogUCVkXG4iLCAocmd2bW9kZWN0bCAmIE1FTU1PREVfRk1JTl9NQVNLKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpOTE1X2ZiY19zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlzdHJ1Y3QgZHJtX2NydGMgKmNydGM7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJYm9vbCBmYmNfZW5hYmxlZCA9IGZhbHNlOworCisJaWYgKCFkZXZfcHJpdi0+ZGlzcGxheS5mYmNfZW5hYmxlZCkgeworCQlzZXFfcHJpbnRmKG0sICJGQkMgdW5zdXBwb3J0ZWQgb24gdGhpcyBjaGlwc2V0XG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKKwkJaWYgKCFjcnRjLT5lbmFibGVkKQorCQkJY29udGludWU7CisJCWlmIChkZXZfcHJpdi0+ZGlzcGxheS5mYmNfZW5hYmxlZChjcnRjKSkKKwkJCWZiY19lbmFibGVkID0gdHJ1ZTsKKwl9CisKKwlpZiAoZmJjX2VuYWJsZWQpIHsKKwkJc2VxX3ByaW50ZihtLCAiRkJDIGVuYWJsZWRcbiIpOworCX0gZWxzZSB7CisJCXNlcV9wcmludGYobSwgIkZCQyBkaXNhYmxlZDogIik7CisJCXN3aXRjaCAoZGV2X3ByaXYtPm5vX2ZiY19yZWFzb24pIHsKKwkJY2FzZSBGQkNfU1RPTEVOX1RPT19TTUFMTDoKKwkJCXNlcV9wcmludGYobSwgIm5vdCBlbm91Z2ggc3RvbGVuIG1lbW9yeSIpOworCQkJYnJlYWs7CisJCWNhc2UgRkJDX1VOU1VQUE9SVEVEX01PREU6CisJCQlzZXFfcHJpbnRmKG0sICJtb2RlIG5vdCBzdXBwb3J0ZWQiKTsKKwkJCWJyZWFrOworCQljYXNlIEZCQ19NT0RFX1RPT19MQVJHRToKKwkJCXNlcV9wcmludGYobSwgIm1vZGUgdG9vIGxhcmdlIik7CisJCQlicmVhazsKKwkJY2FzZSBGQkNfQkFEX1BMQU5FOgorCQkJc2VxX3ByaW50ZihtLCAiRkJDIHVuc3VwcG9ydGVkIG9uIHBsYW5lIik7CisJCQlicmVhazsKKwkJY2FzZSBGQkNfTk9UX1RJTEVEOgorCQkJc2VxX3ByaW50ZihtLCAic2Nhbm91dCBidWZmZXIgbm90IHRpbGVkIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNlcV9wcmludGYobSwgInVua25vd24gcmVhc29uIik7CisJCX0KKwkJc2VxX3ByaW50ZihtLCAiXG4iKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaTkxNV9zcl9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlib29sIHNyX2VuYWJsZWQgPSBmYWxzZTsKKworCWlmIChJU19JOTY1RyhkZXYpIHx8IElTX0k5NDVHKGRldikgfHwgSVNfSTk0NUdNKGRldikpCisJCXNyX2VuYWJsZWQgPSBJOTE1X1JFQUQoRldfQkxDX1NFTEYpICYgRldfQkxDX1NFTEZfRU47CisJZWxzZSBpZiAoSVNfSTkxNUdNKGRldikpCisJCXNyX2VuYWJsZWQgPSBJOTE1X1JFQUQoSU5TVFBNKSAmIElOU1RQTV9TRUxGX0VOOworCWVsc2UgaWYgKElTX1BJTkVWSUVXKGRldikpCisJCXNyX2VuYWJsZWQgPSBJOTE1X1JFQUQoRFNQRlczKSAmIFBJTkVWSUVXX1NFTEZfUkVGUkVTSF9FTjsKKworCXNlcV9wcmludGYobSwgInNlbGYtcmVmcmVzaDogJXNcbiIsIHNyX2VuYWJsZWQgPyAiZW5hYmxlZCIgOgorCQkgICAiZGlzYWJsZWQiKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50CiBpOTE1X3dlZGdlZF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCSBzdHJ1Y3QgZmlsZSAqZmlscCkKQEAgLTUwMyw2ICs3NDcsMTMgQEAKIAl7Imk5MTVfcmluZ2J1ZmZlcl9pbmZvIiwgaTkxNV9yaW5nYnVmZmVyX2luZm8sIDB9LAogCXsiaTkxNV9iYXRjaGJ1ZmZlcnMiLCBpOTE1X2JhdGNoYnVmZmVyX2luZm8sIDB9LAogCXsiaTkxNV9lcnJvcl9zdGF0ZSIsIGk5MTVfZXJyb3Jfc3RhdGUsIDB9LAorCXsiaTkxNV9yc3RkYnlfZGVsYXlzIiwgaTkxNV9yc3RkYnlfZGVsYXlzLCAwfSwKKwl7Imk5MTVfY3VyX2RlbGF5aW5mbyIsIGk5MTVfY3VyX2RlbGF5aW5mbywgMH0sCisJeyJpOTE1X2RlbGF5ZnJlcV90YWJsZSIsIGk5MTVfZGVsYXlmcmVxX3RhYmxlLCAwfSwKKwl7Imk5MTVfaW50dG9leHRfdGFibGUiLCBpOTE1X2ludHRvZXh0X3RhYmxlLCAwfSwKKwl7Imk5MTVfZHJwY19pbmZvIiwgaTkxNV9kcnBjX2luZm8sIDB9LAorCXsiaTkxNV9mYmNfc3RhdHVzIiwgaTkxNV9mYmNfc3RhdHVzLCAwfSwKKwl7Imk5MTVfc3Jfc3RhdHVzIiwgaTkxNV9zcl9zdGF0dXMsIDB9LAogfTsKICNkZWZpbmUgSTkxNV9ERUJVR0ZTX0VOVFJJRVMgQVJSQVlfU0laRShpOTE1X2RlYnVnZnNfbGlzdCkKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKaW5kZXggMjMwN2Y5OC4uOGJmYzBiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCkBAIC0zNSw2ICszNSw5IEBACiAjaW5jbHVkZSAiaTkxNV9kcnYuaCIKICNpbmNsdWRlICJpOTE1X3RyYWNlLmgiCiAjaW5jbHVkZSA8bGludXgvdmdhYXJiLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BucC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZnYV9zd2l0Y2hlcm9vLmg+CiAKIC8qIFJlYWxseSB3YW50IGFuIE9TLWluZGVwZW5kZW50IHJlc2V0dGFibGUgdGltZXIuICBXb3VsZCBsaWtlIHRvIGhhdmUKICAqIHRoaXMgbG9vcCBydW4gZm9yIChlZykgMyBzZWMsIGJ1dCBoYXZlIHRoZSB0aW1lciByZXNldCBldmVyeSB0aW1lCkBAIC05MzMsNiArOTM2LDEyMCBAQAogCXJldHVybiAwOwogfQogCisjZGVmaW5lIE1DSEJBUl9JOTE1IDB4NDQKKyNkZWZpbmUgTUNIQkFSX0k5NjUgMHg0OAorI2RlZmluZSBNQ0hCQVJfU0laRSAoNCo0MDk2KQorCisjZGVmaW5lIERFVkVOX1JFRyAweDU0CisjZGVmaW5lICAgREVWRU5fTUNIQkFSX0VOICgxIDw8IDI4KQorCisvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIE1DSCByZWdzIGlmIG5lZWRlZCwgcmV0dXJuIG5vbnplcm8gb24gZXJyb3IgKi8KK3N0YXRpYyBpbnQKK2ludGVsX2FsbG9jX21jaGJhcl9yZXNvdXJjZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCByZWcgPSBJU19JOTY1RyhkZXYpID8gTUNIQkFSX0k5NjUgOiBNQ0hCQVJfSTkxNTsKKwl1MzIgdGVtcF9sbywgdGVtcF9oaSA9IDA7CisJdTY0IG1jaGJhcl9hZGRyOworCWludCByZXQgPSAwOworCisJaWYgKElTX0k5NjVHKGRldikpCisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgcmVnICsgNCwgJnRlbXBfaGkpOworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgcmVnLCAmdGVtcF9sbyk7CisJbWNoYmFyX2FkZHIgPSAoKHU2NCl0ZW1wX2hpIDw8IDMyKSB8IHRlbXBfbG87CisKKwkvKiBJZiBBQ1BJIGRvZXNuJ3QgaGF2ZSBpdCwgYXNzdW1lIHdlIG5lZWQgdG8gYWxsb2NhdGUgaXQgb3Vyc2VsdmVzICovCisjaWZkZWYgQ09ORklHX1BOUAorCWlmIChtY2hiYXJfYWRkciAmJgorCSAgICBwbnBfcmFuZ2VfcmVzZXJ2ZWQobWNoYmFyX2FkZHIsIG1jaGJhcl9hZGRyICsgTUNIQkFSX1NJWkUpKSB7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0OworCX0KKyNlbmRpZgorCisJLyogR2V0IHNvbWUgc3BhY2UgZm9yIGl0ICovCisJcmV0ID0gcGNpX2J1c19hbGxvY19yZXNvdXJjZShkZXZfcHJpdi0+YnJpZGdlX2Rldi0+YnVzLCAmZGV2X3ByaXYtPm1jaF9yZXMsCisJCQkJICAgICBNQ0hCQVJfU0laRSwgTUNIQkFSX1NJWkUsCisJCQkJICAgICBQQ0lCSU9TX01JTl9NRU0sCisJCQkJICAgICAwLCAgIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2UsCisJCQkJICAgICBkZXZfcHJpdi0+YnJpZGdlX2Rldik7CisJaWYgKHJldCkgeworCQlEUk1fREVCVUdfRFJJVkVSKCJmYWlsZWQgYnVzIGFsbG9jOiAlZFxuIiwgcmV0KTsKKwkJZGV2X3ByaXYtPm1jaF9yZXMuc3RhcnQgPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoSVNfSTk2NUcoZGV2KSkKKwkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgcmVnICsgNCwKKwkJCQkgICAgICAgdXBwZXJfMzJfYml0cyhkZXZfcHJpdi0+bWNoX3Jlcy5zdGFydCkpOworCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgcmVnLAorCQkJICAgICAgIGxvd2VyXzMyX2JpdHMoZGV2X3ByaXYtPm1jaF9yZXMuc3RhcnQpKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKiBTZXR1cCBNQ0hCQVIgaWYgcG9zc2libGUsIHJldHVybiB0cnVlIGlmIHdlIHNob3VsZCBkaXNhYmxlIGl0IGFnYWluICovCitzdGF0aWMgdm9pZAoraW50ZWxfc2V0dXBfbWNoYmFyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IG1jaGJhcl9yZWcgPSBJU19JOTY1RyhkZXYpID8gTUNIQkFSX0k5NjUgOiBNQ0hCQVJfSTkxNTsKKwl1MzIgdGVtcDsKKwlib29sIGVuYWJsZWQ7CisKKwlkZXZfcHJpdi0+bWNoYmFyX25lZWRfZGlzYWJsZSA9IGZhbHNlOworCisJaWYgKElTX0k5MTVHKGRldikgfHwgSVNfSTkxNUdNKGRldikpIHsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBERVZFTl9SRUcsICZ0ZW1wKTsKKwkJZW5hYmxlZCA9ICEhKHRlbXAgJiBERVZFTl9NQ0hCQVJfRU4pOworCX0gZWxzZSB7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgbWNoYmFyX3JlZywgJnRlbXApOworCQllbmFibGVkID0gdGVtcCAmIDE7CisJfQorCisJLyogSWYgaXQncyBhbHJlYWR5IGVuYWJsZWQsIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcgKi8KKwlpZiAoZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKGludGVsX2FsbG9jX21jaGJhcl9yZXNvdXJjZShkZXYpKQorCQlyZXR1cm47CisKKwlkZXZfcHJpdi0+bWNoYmFyX25lZWRfZGlzYWJsZSA9IHRydWU7CisKKwkvKiBTcGFjZSBpcyBhbGxvY2F0ZWQgb3IgcmVzZXJ2ZWQsIHNvIGVuYWJsZSBpdC4gKi8KKwlpZiAoSVNfSTkxNUcoZGV2KSB8fCBJU19JOTE1R00oZGV2KSkgeworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBERVZFTl9SRUcsCisJCQkJICAgICAgIHRlbXAgfCBERVZFTl9NQ0hCQVJfRU4pOworCX0gZWxzZSB7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgbWNoYmFyX3JlZywgJnRlbXApOworCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBtY2hiYXJfcmVnLCB0ZW1wIHwgMSk7CisJfQorfQorCitzdGF0aWMgdm9pZAoraW50ZWxfdGVhcmRvd25fbWNoYmFyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IG1jaGJhcl9yZWcgPSBJU19JOTY1RyhkZXYpID8gTUNIQkFSX0k5NjUgOiBNQ0hCQVJfSTkxNTsKKwl1MzIgdGVtcDsKKworCWlmIChkZXZfcHJpdi0+bWNoYmFyX25lZWRfZGlzYWJsZSkgeworCQlpZiAoSVNfSTkxNUcoZGV2KSB8fCBJU19JOTE1R00oZGV2KSkgeworCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBERVZFTl9SRUcsICZ0ZW1wKTsKKwkJCXRlbXAgJj0gfkRFVkVOX01DSEJBUl9FTjsKKwkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIERFVkVOX1JFRywgdGVtcCk7CisJCX0gZWxzZSB7CisJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIG1jaGJhcl9yZWcsICZ0ZW1wKTsKKwkJCXRlbXAgJj0gfjE7CisJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBtY2hiYXJfcmVnLCB0ZW1wKTsKKwkJfQorCX0KKworCWlmIChkZXZfcHJpdi0+bWNoX3Jlcy5zdGFydCkKKwkJcmVsZWFzZV9yZXNvdXJjZSgmZGV2X3ByaXYtPm1jaF9yZXMpOworfQorCiAvKioKICAqIGk5MTVfcHJvYmVfYWdwIC0gZ2V0IEFHUCBib290dXAgY29uZmlndXJhdGlvbgogICogQHBkZXY6IFBDSSBkZXZpY2UKQEAgLTk3OCw1OSArMTA5NSwxMjMgQEAKIAkgKiBTb21lIG9mIHRoZSBwcmVhbGxvY2F0ZWQgc3BhY2UgaXMgdGFrZW4gYnkgdGhlIEdUVAogCSAqIGFuZCBwb3B1cC4gIEdUVCBpcyAxSyBwZXIgTUIgb2YgYXBlcnR1cmUgc2l6ZSwgYW5kIHBvcHVwIGlzIDRLLgogCSAqLwotCWlmIChJU19HNFgoZGV2KSB8fCBJU19QSU5FVklFVyhkZXYpIHx8IElTX0lST05MQUtFKGRldikpCisJaWYgKElTX0c0WChkZXYpIHx8IElTX1BJTkVWSUVXKGRldikgfHwgSVNfSVJPTkxBS0UoZGV2KSB8fCBJU19HRU42KGRldikpCiAJCW92ZXJoZWFkID0gNDA5NjsKIAllbHNlCiAJCW92ZXJoZWFkID0gKCphcGVydHVyZV9zaXplIC8gMTAyNCkgKyA0MDk2OwogCi0Jc3dpdGNoICh0bXAgJiBJTlRFTF9HTUNIX0dNU19NQVNLKSB7Ci0JY2FzZSBJTlRFTF84NTVfR01DSF9HTVNfRElTQUJMRUQ6Ci0JCURSTV9FUlJPUigidmlkZW8gbWVtb3J5IGlzIGRpc2FibGVkXG4iKTsKLQkJcmV0dXJuIC0xOwotCWNhc2UgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl8xTToKLQkJc3RvbGVuID0gMSAqIDEwMjQgKiAxMDI0OwotCQlicmVhazsKLQljYXNlIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fNE06Ci0JCXN0b2xlbiA9IDQgKiAxMDI0ICogMTAyNDsKLQkJYnJlYWs7Ci0JY2FzZSBJTlRFTF84NTVfR01DSF9HTVNfU1RPTEVOXzhNOgotCQlzdG9sZW4gPSA4ICogMTAyNCAqIDEwMjQ7Ci0JCWJyZWFrOwotCWNhc2UgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl8xNk06Ci0JCXN0b2xlbiA9IDE2ICogMTAyNCAqIDEwMjQ7Ci0JCWJyZWFrOwotCWNhc2UgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl8zMk06Ci0JCXN0b2xlbiA9IDMyICogMTAyNCAqIDEwMjQ7Ci0JCWJyZWFrOwotCWNhc2UgSU5URUxfOTE1R19HTUNIX0dNU19TVE9MRU5fNDhNOgotCQlzdG9sZW4gPSA0OCAqIDEwMjQgKiAxMDI0OwotCQlicmVhazsKLQljYXNlIElOVEVMXzkxNUdfR01DSF9HTVNfU1RPTEVOXzY0TToKLQkJc3RvbGVuID0gNjQgKiAxMDI0ICogMTAyNDsKLQkJYnJlYWs7Ci0JY2FzZSBJTlRFTF9HTUNIX0dNU19TVE9MRU5fMTI4TToKLQkJc3RvbGVuID0gMTI4ICogMTAyNCAqIDEwMjQ7Ci0JCWJyZWFrOwotCWNhc2UgSU5URUxfR01DSF9HTVNfU1RPTEVOXzI1Nk06Ci0JCXN0b2xlbiA9IDI1NiAqIDEwMjQgKiAxMDI0OwotCQlicmVhazsKLQljYXNlIElOVEVMX0dNQ0hfR01TX1NUT0xFTl85Nk06Ci0JCXN0b2xlbiA9IDk2ICogMTAyNCAqIDEwMjQ7Ci0JCWJyZWFrOwotCWNhc2UgSU5URUxfR01DSF9HTVNfU1RPTEVOXzE2ME06Ci0JCXN0b2xlbiA9IDE2MCAqIDEwMjQgKiAxMDI0OwotCQlicmVhazsKLQljYXNlIElOVEVMX0dNQ0hfR01TX1NUT0xFTl8yMjRNOgotCQlzdG9sZW4gPSAyMjQgKiAxMDI0ICogMTAyNDsKLQkJYnJlYWs7Ci0JY2FzZSBJTlRFTF9HTUNIX0dNU19TVE9MRU5fMzUyTToKLQkJc3RvbGVuID0gMzUyICogMTAyNCAqIDEwMjQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCURSTV9FUlJPUigidW5leHBlY3RlZCBHTUNIX0dNUyB2YWx1ZTogMHglMDJ4XG4iLAotCQkJdG1wICYgSU5URUxfR01DSF9HTVNfTUFTSyk7Ci0JCXJldHVybiAtMTsKKwlpZiAoSVNfR0VONihkZXYpKSB7CisJCS8qIFNOQiBoYXMgbWVtb3J5IGNvbnRyb2wgcmVnIGF0IDB4NTAudyAqLworCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYtPnBkZXYsIFNOQl9HTUNIX0NUUkwsICZ0bXApOworCisJCXN3aXRjaCAodG1wICYgU05CX0dNQ0hfR01TX1NUT0xFTl9NQVNLKSB7CisJCWNhc2UgSU5URUxfODU1X0dNQ0hfR01TX0RJU0FCTEVEOgorCQkJRFJNX0VSUk9SKCJ2aWRlbyBtZW1vcnkgaXMgZGlzYWJsZWRcbiIpOworCQkJcmV0dXJuIC0xOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fMzJNOgorCQkJc3RvbGVuID0gMzIgKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fNjRNOgorCQkJc3RvbGVuID0gNjQgKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fOTZNOgorCQkJc3RvbGVuID0gOTYgKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fMTI4TToKKwkJCXN0b2xlbiA9IDEyOCAqIDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl8xNjBNOgorCQkJc3RvbGVuID0gMTYwICogMTAyNCAqIDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzE5Mk06CisJCQlzdG9sZW4gPSAxOTIgKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fMjI0TToKKwkJCXN0b2xlbiA9IDIyNCAqIDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl8yNTZNOgorCQkJc3RvbGVuID0gMjU2ICogMTAyNCAqIDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzI4OE06CisJCQlzdG9sZW4gPSAyODggKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fMzIwTToKKwkJCXN0b2xlbiA9IDMyMCAqIDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl8zNTJNOgorCQkJc3RvbGVuID0gMzUyICogMTAyNCAqIDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzM4NE06CisJCQlzdG9sZW4gPSAzODQgKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fNDE2TToKKwkJCXN0b2xlbiA9IDQxNiAqIDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgU05CX0dNQ0hfR01TX1NUT0xFTl80NDhNOgorCQkJc3RvbGVuID0gNDQ4ICogMTAyNCAqIDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSBTTkJfR01DSF9HTVNfU1RPTEVOXzQ4ME06CisJCQlzdG9sZW4gPSA0ODAgKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIFNOQl9HTUNIX0dNU19TVE9MRU5fNTEyTToKKwkJCXN0b2xlbiA9IDUxMiAqIDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoInVuZXhwZWN0ZWQgR01DSF9HTVMgdmFsdWU6IDB4JTAyeFxuIiwKKwkJCQkgIHRtcCAmIFNOQl9HTUNIX0dNU19TVE9MRU5fTUFTSyk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKHRtcCAmIElOVEVMX0dNQ0hfR01TX01BU0spIHsKKwkJY2FzZSBJTlRFTF84NTVfR01DSF9HTVNfRElTQUJMRUQ6CisJCQlEUk1fRVJST1IoInZpZGVvIG1lbW9yeSBpcyBkaXNhYmxlZFxuIik7CisJCQlyZXR1cm4gLTE7CisJCWNhc2UgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl8xTToKKwkJCXN0b2xlbiA9IDEgKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIElOVEVMXzg1NV9HTUNIX0dNU19TVE9MRU5fNE06CisJCQlzdG9sZW4gPSA0ICogMTAyNCAqIDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSBJTlRFTF84NTVfR01DSF9HTVNfU1RPTEVOXzhNOgorCQkJc3RvbGVuID0gOCAqIDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl8xNk06CisJCQlzdG9sZW4gPSAxNiAqIDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgSU5URUxfODU1X0dNQ0hfR01TX1NUT0xFTl8zMk06CisJCQlzdG9sZW4gPSAzMiAqIDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgSU5URUxfOTE1R19HTUNIX0dNU19TVE9MRU5fNDhNOgorCQkJc3RvbGVuID0gNDggKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIElOVEVMXzkxNUdfR01DSF9HTVNfU1RPTEVOXzY0TToKKwkJCXN0b2xlbiA9IDY0ICogMTAyNCAqIDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSBJTlRFTF9HTUNIX0dNU19TVE9MRU5fMTI4TToKKwkJCXN0b2xlbiA9IDEyOCAqIDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgSU5URUxfR01DSF9HTVNfU1RPTEVOXzI1Nk06CisJCQlzdG9sZW4gPSAyNTYgKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIElOVEVMX0dNQ0hfR01TX1NUT0xFTl85Nk06CisJCQlzdG9sZW4gPSA5NiAqIDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCWNhc2UgSU5URUxfR01DSF9HTVNfU1RPTEVOXzE2ME06CisJCQlzdG9sZW4gPSAxNjAgKiAxMDI0ICogMTAyNDsKKwkJCWJyZWFrOworCQljYXNlIElOVEVMX0dNQ0hfR01TX1NUT0xFTl8yMjRNOgorCQkJc3RvbGVuID0gMjI0ICogMTAyNCAqIDEwMjQ7CisJCQlicmVhazsKKwkJY2FzZSBJTlRFTF9HTUNIX0dNU19TVE9MRU5fMzUyTToKKwkJCXN0b2xlbiA9IDM1MiAqIDEwMjQgKiAxMDI0OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoInVuZXhwZWN0ZWQgR01DSF9HTVMgdmFsdWU6IDB4JTAyeFxuIiwKKwkJCQkgIHRtcCAmIElOVEVMX0dNQ0hfR01TX01BU0spOworCQkJcmV0dXJuIC0xOworCQl9CiAJfQorCiAJKnByZWFsbG9jYXRlZF9zaXplID0gc3RvbGVuIC0gb3ZlcmhlYWQ7CiAJKnN0YXJ0ID0gb3ZlcmhlYWQ7CiAKQEAgLTEwNjQsNyArMTI0NSw3IEBACiAJaW50IGd0dF9vZmZzZXQsIGd0dF9zaXplOwogCiAJaWYgKElTX0k5NjVHKGRldikpIHsKLQkJaWYgKElTX0c0WChkZXYpIHx8IElTX0lST05MQUtFKGRldikpIHsKKwkJaWYgKElTX0c0WChkZXYpIHx8IElTX0lST05MQUtFKGRldikgfHwgSVNfR0VONihkZXYpKSB7CiAJCQlndHRfb2Zmc2V0ID0gMioxMDI0KjEwMjQ7CiAJCQlndHRfc2l6ZSA9IDIqMTAyNCoxMDI0OwogCQl9IGVsc2UgewpAQCAtMTEzMyw2ICsxMzE0LDcgQEAKIAkvKiBMZWF2ZSAxTSBmb3IgbGluZSBsZW5ndGggYnVmZmVyICYgbWlzYy4gKi8KIAljb21wcmVzc2VkX2ZiID0gZHJtX21tX3NlYXJjaF9mcmVlKCZkZXZfcHJpdi0+dnJhbSwgc2l6ZSwgNDA5NiwgMCk7CiAJaWYgKCFjb21wcmVzc2VkX2ZiKSB7CisJCWRldl9wcml2LT5ub19mYmNfcmVhc29uID0gRkJDX1NUT0xFTl9UT09fU01BTEw7CiAJCWk5MTVfd2Fybl9zdG9sZW4oZGV2KTsKIAkJcmV0dXJuOwogCX0KQEAgLTExNDAsNiArMTMyMiw3IEBACiAJY29tcHJlc3NlZF9mYiA9IGRybV9tbV9nZXRfYmxvY2soY29tcHJlc3NlZF9mYiwgc2l6ZSwgNDA5Nik7CiAJaWYgKCFjb21wcmVzc2VkX2ZiKSB7CiAJCWk5MTVfd2Fybl9zdG9sZW4oZGV2KTsKKwkJZGV2X3ByaXYtPm5vX2ZiY19yZWFzb24gPSBGQkNfU1RPTEVOX1RPT19TTUFMTDsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTE5OSw2ICsxMzgyLDMyIEBACiAJCXJldHVybiBWR0FfUlNSQ19OT1JNQUxfSU8gfCBWR0FfUlNSQ19OT1JNQUxfTUVNOwogfQogCitzdGF0aWMgdm9pZCBpOTE1X3N3aXRjaGVyb29fc2V0X3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHZnYV9zd2l0Y2hlcm9vX3N0YXRlIHN0YXRlKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJcG1fbWVzc2FnZV90IHBtbSA9IHsgLmV2ZW50ID0gUE1fRVZFTlRfU1VTUEVORCB9OworCWlmIChzdGF0ZSA9PSBWR0FfU1dJVENIRVJPT19PTikgeworCQlwcmludGsoS0VSTl9JTkZPICJpOTE1OiBzd2l0Y2hlZCBvZmZcbiIpOworCQkvKiBpOTE1IHJlc3VtZSBoYW5kbGVyIGRvZXNuJ3Qgc2V0IHRvIEQwICovCisJCXBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LT5wZGV2LCBQQ0lfRDApOworCQlpOTE1X3Jlc3VtZShkZXYpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiaTkxNTogc3dpdGNoZWQgb2ZmXG4iKTsKKwkJaTkxNV9zdXNwZW5kKGRldiwgcG1tKTsKKwl9Cit9CisKK3N0YXRpYyBib29sIGk5MTVfc3dpdGNoZXJvb19jYW5fc3dpdGNoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJYm9vbCBjYW5fc3dpdGNoOworCisJc3Bpbl9sb2NrKCZkZXYtPmNvdW50X2xvY2spOworCWNhbl9zd2l0Y2ggPSAoZGV2LT5vcGVuX2NvdW50ID09IDApOworCXNwaW5fdW5sb2NrKCZkZXYtPmNvdW50X2xvY2spOworCXJldHVybiBjYW5fc3dpdGNoOworfQorCiBzdGF0aWMgaW50IGk5MTVfbG9hZF9tb2Rlc2V0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgcHJlYWxsb2Nfc3RhcnQsCiAJCQkJICB1bnNpZ25lZCBsb25nIHByZWFsbG9jX3NpemUsCkBAIC0xMjYwLDYgKzE0NjksMTIgQEAKIAlpZiAocmV0KQogCQlnb3RvIGRlc3Ryb3lfcmluZ2J1ZmZlcjsKIAorCXJldCA9IHZnYV9zd2l0Y2hlcm9vX3JlZ2lzdGVyX2NsaWVudChkZXYtPnBkZXYsCisJCQkJCSAgICAgaTkxNV9zd2l0Y2hlcm9vX3NldF9zdGF0ZSwKKwkJCQkJICAgICBpOTE1X3N3aXRjaGVyb29fY2FuX3N3aXRjaCk7CisJaWYgKHJldCkKKwkJZ290byBkZXN0cm95X3JpbmdidWZmZXI7CisKIAlpbnRlbF9tb2Rlc2V0X2luaXQoZGV2KTsKIAogCXJldCA9IGRybV9pcnFfaW5zdGFsbChkZXYpOwpAQCAtMTI4MSw3ICsxNDk2LDkgQEAKIAlyZXR1cm4gMDsKIAogZGVzdHJveV9yaW5nYnVmZmVyOgorCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAlpOTE1X2dlbV9jbGVhbnVwX3JpbmdidWZmZXIoZGV2KTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTQ0NSwxMSArMTY2MiwxNCBAQAogCiAJZGV2LT5kcml2ZXItPmdldF92YmxhbmtfY291bnRlciA9IGk5MTVfZ2V0X3ZibGFua19jb3VudGVyOwogCWRldi0+bWF4X3ZibGFua19jb3VudCA9IDB4ZmZmZmZmOyAvKiBvbmx5IDI0IGJpdHMgb2YgZnJhbWUgY291bnQgKi8KLQlpZiAoSVNfRzRYKGRldikgfHwgSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChJU19HNFgoZGV2KSB8fCBJU19JUk9OTEFLRShkZXYpIHx8IElTX0dFTjYoZGV2KSkgewogCQlkZXYtPm1heF92YmxhbmtfY291bnQgPSAweGZmZmZmZmZmOyAvKiBmdWxsIDMyIGJpdCBjb3VudGVyICovCiAJCWRldi0+ZHJpdmVyLT5nZXRfdmJsYW5rX2NvdW50ZXIgPSBnbTQ1X2dldF92YmxhbmtfY291bnRlcjsKIAl9CiAKKwkvKiBUcnkgdG8gbWFrZSBzdXJlIE1DSEJBUiBpcyBlbmFibGVkIGJlZm9yZSBwb2tpbmcgYXQgaXQgKi8KKwlpbnRlbF9zZXR1cF9tY2hiYXIoZGV2KTsKKwogCWk5MTVfZ2VtX2xvYWQoZGV2KTsKIAogCS8qIEluaXQgSFdTICovCkBAIC0xNTIzLDYgKzE3NDMsOCBAQAogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKKwlpOTE1X2Rlc3Ryb3lfZXJyb3Jfc3RhdGUoZGV2KTsKKwogCWRlc3Ryb3lfd29ya3F1ZXVlKGRldl9wcml2LT53cSk7CiAJZGVsX3RpbWVyX3N5bmMoJmRldl9wcml2LT5oYW5nY2hlY2tfdGltZXIpOwogCkBAIC0xNTQ0LDYgKzE3NjYsNyBAQAogCQkJZGV2X3ByaXYtPmNoaWxkX2Rldl9udW0gPSAwOwogCQl9CiAJCWRybV9pcnFfdW5pbnN0YWxsKGRldik7CisJCXZnYV9zd2l0Y2hlcm9vX3VucmVnaXN0ZXJfY2xpZW50KGRldi0+cGRldik7CiAJCXZnYV9jbGllbnRfcmVnaXN0ZXIoZGV2LT5wZGV2LCBOVUxMLCBOVUxMLCBOVUxMKTsKIAl9CiAKQEAgLTE1NjksNiArMTc5Miw4IEBACiAJCWludGVsX2NsZWFudXBfb3ZlcmxheShkZXYpOwogCX0KIAorCWludGVsX3RlYXJkb3duX21jaGJhcihkZXYpOworCiAJcGNpX2Rldl9wdXQoZGV2X3ByaXYtPmJyaWRnZV9kZXYpOwogCWtmcmVlKGRldi0+ZGV2X3ByaXZhdGUpOwogCkBAIC0xNjExLDYgKzE4MzYsNyBAQAogCiAJaWYgKCFkZXZfcHJpdiB8fCBkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7CiAJCWRybV9mYl9oZWxwZXJfcmVzdG9yZSgpOworCQl2Z2Ffc3dpdGNoZXJvb19wcm9jZXNzX2RlbGF5ZWRfc3dpdGNoKCk7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCmluZGV4IGNmNGNiM2UuLjFiMmU5NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwpAQCAtNDksNiArNDksNyBAQAogbW9kdWxlX3BhcmFtX25hbWVkKGx2ZHNfZG93bmNsb2NrLCBpOTE1X2x2ZHNfZG93bmNsb2NrLCBpbnQsIDA0MDApOwogCiBzdGF0aWMgc3RydWN0IGRybV9kcml2ZXIgZHJpdmVyOworZXh0ZXJuIGludCBpbnRlbF9hZ3BfZW5hYmxlZDsKIAogI2RlZmluZSBJTlRFTF9WR0FfREVWSUNFKGlkLCBpbmZvKSB7CQlcCiAJLmNsYXNzID0gUENJX0NMQVNTX0RJU1BMQVlfVkdBIDw8IDgsCVwKQEAgLTEzNiw2ICsxMzcsMTYgQEAKIAkuaGFzX2hvdHBsdWcgPSAxLAogfTsKIAorY29uc3Qgc3RhdGljIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9zYW5keWJyaWRnZV9kX2luZm8gPSB7CisJLmlzX2k5NjVnID0gMSwgLmlzX2k5eHggPSAxLCAubmVlZF9nZnhfaHdzID0gMSwKKwkuaGFzX2hvdHBsdWcgPSAxLAorfTsKKworY29uc3Qgc3RhdGljIHN0cnVjdCBpbnRlbF9kZXZpY2VfaW5mbyBpbnRlbF9zYW5keWJyaWRnZV9tX2luZm8gPSB7CisJLmlzX2k5NjVnID0gMSwgLmlzX21vYmlsZSA9IDEsIC5pc19pOXh4ID0gMSwgLm5lZWRfZ2Z4X2h3cyA9IDEsCisJLmhhc19ob3RwbHVnID0gMSwKK307CisKIGNvbnN0IHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lpZGxpc3RbXSA9IHsKIAlJTlRFTF9WR0FfREVWSUNFKDB4MzU3NywgJmludGVsX2k4MzBfaW5mbyksCiAJSU5URUxfVkdBX0RFVklDRSgweDI1NjIsICZpbnRlbF84NDVnX2luZm8pLApAQCAtMTY3LDYgKzE3OCw4IEBACiAJSU5URUxfVkdBX0RFVklDRSgweGEwMTEsICZpbnRlbF9waW5ldmlld19pbmZvKSwKIAlJTlRFTF9WR0FfREVWSUNFKDB4MDA0MiwgJmludGVsX2lyb25sYWtlX2RfaW5mbyksCiAJSU5URUxfVkdBX0RFVklDRSgweDAwNDYsICZpbnRlbF9pcm9ubGFrZV9tX2luZm8pLAorCUlOVEVMX1ZHQV9ERVZJQ0UoMHgwMTAyLCAmaW50ZWxfc2FuZHlicmlkZ2VfZF9pbmZvKSwKKwlJTlRFTF9WR0FfREVWSUNFKDB4MDEwNiwgJmludGVsX3NhbmR5YnJpZGdlX21faW5mbyksCiAJezAsIDAsIDB9CiB9OwogCkBAIC0yMDEsNyArMjE0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpOTE1X3N1c3BlbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoraW50IGk5MTVfc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJaW50IGVycm9yOwogCkBAIC0yNTUsNyArMjY4LDcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgaTkxNV9yZXN1bWUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK2ludCBpOTE1X3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXYtPnBkZXYpKQogCQlyZXR1cm4gLUVJTzsKQEAgLTU0Niw2ICs1NTksMTEgQEAKIAogc3RhdGljIGludCBfX2luaXQgaTkxNV9pbml0KHZvaWQpCiB7CisJaWYgKCFpbnRlbF9hZ3BfZW5hYmxlZCkgeworCQlEUk1fRVJST1IoImRybS9pOTE1IGNhbid0IHdvcmsgd2l0aG91dCBpbnRlbF9hZ3AgbW9kdWxlIVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKwogCWRyaXZlci5udW1faW9jdGxzID0gaTkxNV9tYXhfaW9jdGw7CiAKIAlpOTE1X2dlbV9zaHJpbmtlcl9pbml0KCk7CkBAIC01NzEsNiArNTg5LDExIEBACiAJCWRyaXZlci5kcml2ZXJfZmVhdHVyZXMgJj0gfkRSSVZFUl9NT0RFU0VUOwogI2VuZGlmCiAKKwlpZiAoIShkcml2ZXIuZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX01PREVTRVQpKSB7CisJCWRyaXZlci5zdXNwZW5kID0gaTkxNV9zdXNwZW5kOworCQlkcml2ZXIucmVzdW1lID0gaTkxNV9yZXN1bWU7CisJfQorCiAJcmV0dXJuIGRybV9pbml0KCZkcml2ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAppbmRleCBiOTliNmE4Li45Nzk0MzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKQEAgLTE1MCw3ICsxNTAsMjcgQEAKIAl1MzIgaW5zdHBzOwogCXUzMiBpbnN0ZG9uZTE7CiAJdTMyIHNlcW5vOworCXU2NCBiYmFkZHI7CiAJc3RydWN0IHRpbWV2YWwgdGltZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jfb2JqZWN0IHsKKwkJaW50IHBhZ2VfY291bnQ7CisJCXUzMiBndHRfb2Zmc2V0OworCQl1MzIgKnBhZ2VzWzBdOworCX0gKnJpbmdidWZmZXIsICpiYXRjaGJ1ZmZlclsyXTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfYnVmZmVyIHsKKwkJc2l6ZV90IHNpemU7CisJCXUzMiBuYW1lOworCQl1MzIgc2Vxbm87CisJCXUzMiBndHRfb2Zmc2V0OworCQl1MzIgcmVhZF9kb21haW5zOworCQl1MzIgd3JpdGVfZG9tYWluOworCQl1MzIgZmVuY2VfcmVnOworCQlzMzIgcGlubmVkOjI7CisJCXUzMiB0aWxpbmc6MjsKKwkJdTMyIGRpcnR5OjE7CisJCXUzMiBwdXJnZWFibGU6MTsKKwl9ICphY3RpdmVfYm87CisJdTMyIGFjdGl2ZV9ib19jb3VudDsKIH07CiAKIHN0cnVjdCBkcm1faTkxNV9kaXNwbGF5X2Z1bmNzIHsKQEAgLTE5Miw2ICsyMTIsMTQgQEAKIAl1OCBjdXJzb3JfbmVlZHNfcGh5c2ljYWwgOiAxOwogfTsKIAorZW51bSBub19mYmNfcmVhc29uIHsKKwlGQkNfU1RPTEVOX1RPT19TTUFMTCwgLyogbm90IGVub3VnaCBzcGFjZSB0byBob2xkIGNvbXByZXNzZWQgYnVmZmVycyAqLworCUZCQ19VTlNVUFBPUlRFRF9NT0RFLCAvKiBpbnRlcmxhY2Ugb3IgZG91Ymxlc2Nhbm5lZCBtb2RlICovCisJRkJDX01PREVfVE9PX0xBUkdFLCAvKiBtb2RlIHRvbyBsYXJnZSBmb3IgY29tcHJlc3Npb24gKi8KKwlGQkNfQkFEX1BMQU5FLCAvKiBmYmMgbm90IHN1cHBvcnRlZCBvbiBwbGFuZSAqLworCUZCQ19OT1RfVElMRUQsIC8qIGJ1ZmZlciBub3QgdGlsZWQgKi8KK307CisKIHR5cGVkZWYgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CiAKQEAgLTQ1Miw2ICs0ODAsNyBAQAogCXUzMiBzYXZlUElQRUJfREFUQV9OMTsKIAl1MzIgc2F2ZVBJUEVCX0xJTktfTTE7CiAJdTMyIHNhdmVQSVBFQl9MSU5LX04xOworCXUzMiBzYXZlTUNIQkFSX1JFTkRFUl9TVEFOREJZOwogCiAJc3RydWN0IHsKIAkJc3RydWN0IGRybV9tbSBndHRfc3BhY2U7CkBAIC01OTAsNiArNjE5LDE0IEBACiAJaW50IGNoaWxkX2Rldl9udW07CiAJc3RydWN0IGNoaWxkX2RldmljZV9jb25maWcgKmNoaWxkX2RldjsKIAlzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqaW50X2x2ZHNfY29ubmVjdG9yOworCisJYm9vbCBtY2hiYXJfbmVlZF9kaXNhYmxlOworCisJdTggY3VyX2RlbGF5OworCXU4IG1pbl9kZWxheTsKKwl1OCBtYXhfZGVsYXk7CisKKwllbnVtIG5vX2ZiY19yZWFzb24gbm9fZmJjX3JlYXNvbjsKIH0gZHJtX2k5MTVfcHJpdmF0ZV90OwogCiAvKiogZHJpdmVyIHByaXZhdGUgc3RydWN0dXJlIGF0dGFjaGVkIHRvIGVhY2ggZHJtX2dlbV9vYmplY3QgKi8KQEAgLTczNiw2ICs3NzMsOCBAQAogZXh0ZXJuIHVuc2lnbmVkIGludCBpOTE1X3Bvd2Vyc2F2ZTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgaTkxNV9sdmRzX2Rvd25jbG9jazsKIAorZXh0ZXJuIGludCBpOTE1X3N1c3BlbmQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKK2V4dGVybiBpbnQgaTkxNV9yZXN1bWUoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCBpOTE1X3NhdmVfZGlzcGxheShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIGk5MTVfcmVzdG9yZV9kaXNwbGF5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIGludCBpOTE1X21hc3Rlcl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9tYXN0ZXIgKm1hc3Rlcik7CkBAIC03NjEsNiArODAwLDcgQEAKIAogLyogaTkxNV9pcnEuYyAqLwogdm9pZCBpOTE1X2hhbmdjaGVja19lbGFwc2VkKHVuc2lnbmVkIGxvbmcgZGF0YSk7Cit2b2lkIGk5MTVfZGVzdHJveV9lcnJvcl9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiBpbnQgaTkxNV9pcnFfZW1pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpbnQgaTkxNV9pcnFfd2FpdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLApAQCAtODk3LDcgKzkzNyw4IEBACiB2b2lkIGk5MTVfZ2VtX29iamVjdF9zYXZlX2JpdF8xN19zd2l6emxlKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKIGJvb2wgaTkxNV90aWxpbmdfb2soc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IHN0cmlkZSwgaW50IHNpemUsCiAJCSAgICBpbnQgdGlsaW5nX21vZGUpOwotYm9vbCBpOTE1X29ial9mZW5jZWFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOworYm9vbCBpOTE1X2dlbV9vYmplY3RfZmVuY2Vfb2Zmc2V0X29rKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqLAorCQkJCSAgICAgaW50IHRpbGluZ19tb2RlKTsKIAogLyogaTkxNV9nZW1fZGVidWcuYyAqLwogdm9pZCBpOTE1X2dlbV9kdW1wX29iamVjdChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiwgaW50IGxlbiwKQEAgLTEwMjYsNyArMTA2Nyw3IEBACiAjZGVmaW5lIElTXzg0NUcoZGV2KQkJKChkZXYpLT5wY2lfZGV2aWNlID09IDB4MjU2MikKICNkZWZpbmUgSVNfSTg1WChkZXYpCQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgzNTgyKQogI2RlZmluZSBJU19JODY1RyhkZXYpCQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyNTcyKQotI2RlZmluZSBJU19JOFhYKGRldikJCShJTlRFTF9JTkZPKGRldiktPmlzX2k4eHgpCisjZGVmaW5lIElTX0dFTjIoZGV2KQkJKElOVEVMX0lORk8oZGV2KS0+aXNfaTh4eCkKICNkZWZpbmUgSVNfSTkxNUcoZGV2KQkJKElOVEVMX0lORk8oZGV2KS0+aXNfaTkxNWcpCiAjZGVmaW5lIElTX0k5MTVHTShkZXYpCQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyNTkyKQogI2RlZmluZSBJU19JOTQ1RyhkZXYpCQkoKGRldiktPnBjaV9kZXZpY2UgPT0gMHgyNzcyKQpAQCAtMTA0NSw4ICsxMDg2LDI5IEBACiAjZGVmaW5lIElTX0k5WFgoZGV2KQkJKElOVEVMX0lORk8oZGV2KS0+aXNfaTl4eCkKICNkZWZpbmUgSVNfTU9CSUxFKGRldikJCShJTlRFTF9JTkZPKGRldiktPmlzX21vYmlsZSkKIAorI2RlZmluZSBJU19HRU4zKGRldikJKElTX0k5MTVHKGRldikgfHwJCQlcCisJCQkgSVNfSTkxNUdNKGRldikgfHwJCQlcCisJCQkgSVNfSTk0NUcoZGV2KSB8fAkJCVwKKwkJCSBJU19JOTQ1R00oZGV2KSB8fAkJCVwKKwkJCSBJU19HMzMoZGV2KSB8fCBcCisJCQkgSVNfUElORVZJRVcoZGV2KSkKKyNkZWZpbmUgSVNfR0VONChkZXYpCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweDI5NzIgfHwJCVwKKwkJCSAoZGV2KS0+cGNpX2RldmljZSA9PSAweDI5ODIgfHwJCVwKKwkJCSAoZGV2KS0+cGNpX2RldmljZSA9PSAweDI5OTIgfHwJCVwKKwkJCSAoZGV2KS0+cGNpX2RldmljZSA9PSAweDI5QTIgfHwJCVwKKwkJCSAoZGV2KS0+cGNpX2RldmljZSA9PSAweDJBMDIgfHwJCVwKKwkJCSAoZGV2KS0+cGNpX2RldmljZSA9PSAweDJBMTIgfHwJCVwKKwkJCSAoZGV2KS0+cGNpX2RldmljZSA9PSAweDJFMDIgfHwJCVwKKwkJCSAoZGV2KS0+cGNpX2RldmljZSA9PSAweDJFMTIgfHwJCVwKKwkJCSAoZGV2KS0+cGNpX2RldmljZSA9PSAweDJFMjIgfHwJCVwKKwkJCSAoZGV2KS0+cGNpX2RldmljZSA9PSAweDJFMzIgfHwJCVwKKwkJCSAoZGV2KS0+cGNpX2RldmljZSA9PSAweDJBNDIgfHwJCVwKKwkJCSAoZGV2KS0+cGNpX2RldmljZSA9PSAweDJFNDIpCisKICNkZWZpbmUgSTkxNV9ORUVEX0dGWF9IV1MoZGV2KQkoSU5URUxfSU5GTyhkZXYpLT5uZWVkX2dmeF9od3MpCiAKKyNkZWZpbmUgSVNfR0VONihkZXYpCSgoZGV2KS0+cGNpX2RldmljZSA9PSAweDAxMDIpCisKIC8qIFdpdGggdGhlIDk0NSBhbmQgbGF0ZXIsIFkgdGlsaW5nIGdvdCBhZGp1c3RlZCBzbyB0aGF0IGl0IHdhcyAzMiAxMjgtYnl0ZQogICogcm93cywgd2hpY2ggY2hhbmdlZCB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50cyBhbmQgZmVuY2UgcHJvZ3JhbW1pbmcuCiAgKi8KQEAgLTEwNjcsNiArMTEyOSw5IEBACiAjZGVmaW5lIEk5MTVfSEFTX0ZCQyhkZXYpIChJTlRFTF9JTkZPKGRldiktPmhhc19mYmMpCiAjZGVmaW5lIEk5MTVfSEFTX1JDNihkZXYpIChJTlRFTF9JTkZPKGRldiktPmhhc19yYzYpCiAKKyNkZWZpbmUgSEFTX1BDSF9TUExJVChkZXYpIChJU19JUk9OTEFLRShkZXYpIHx8CVwKKwkJCSAgICBJU19HRU42KGRldikpCisKICNkZWZpbmUgUFJJTUFSWV9SSU5HQlVGRkVSX1NJWkUgICAgICAgICAoMTI4KjEwMjQpCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKaW5kZXggZWM4YTBkNy4uZmJhMzdlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCkBAIC0xMjgsOSArMTI4LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCBvYmosICZoYW5kbGUpOwotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlkcm1fZ2VtX29iamVjdF9oYW5kbGVfdW5yZWZlcmVuY2Uob2JqKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF9oYW5kbGVfdW5yZWZlcmVuY2VfdW5sb2NrZWQob2JqKTsKIAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC00ODgsNyArNDg2LDcgQEAKIAkgKi8KIAlpZiAoYXJncy0+b2Zmc2V0ID4gb2JqLT5zaXplIHx8IGFyZ3MtPnNpemUgPiBvYmotPnNpemUgfHwKIAkgICAgYXJncy0+b2Zmc2V0ICsgYXJncy0+c2l6ZSA+IG9iai0+c2l6ZSkgewotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTUwMSw3ICs0OTksNyBAQAogCQkJCQkJCWZpbGVfcHJpdik7CiAJfQogCi0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTk2MSw3ICs5NTksNyBAQAogCSAqLwogCWlmIChhcmdzLT5vZmZzZXQgPiBvYmotPnNpemUgfHwgYXJncy0+c2l6ZSA+IG9iai0+c2l6ZSB8fAogCSAgICBhcmdzLT5vZmZzZXQgKyBhcmdzLT5zaXplID4gb2JqLT5zaXplKSB7Ci0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG9iaik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtOTk1LDcgKzk5Myw3IEBACiAJCURSTV9JTkZPKCJwd3JpdGUgZmFpbGVkICVkXG4iLCByZXQpOwogI2VuZGlmCiAKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG9iaik7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTEzOCw5ICsxMTM2LDcgQEAKIAkJICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIE1BUF9TSEFSRUQsCiAJCSAgICAgICBhcmdzLT5vZmZzZXQpOwogCXVwX3dyaXRlKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG9iaik7CiAJaWYgKElTX0VSUigodm9pZCAqKWFkZHIpKQogCQlyZXR1cm4gYWRkcjsKIApAQCAtMTU2Miw2ICsxNTU4LDM4IEBACiAJaTkxNV92ZXJpZnlfaW5hY3RpdmUoZGV2LCBfX0ZJTEVfXywgX19MSU5FX18pOwogfQogCitzdGF0aWMgdm9pZAoraTkxNV9nZW1fcHJvY2Vzc19mbHVzaGluZ19saXN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgICAgdWludDMyX3QgZmx1c2hfZG9tYWlucywgdWludDMyX3Qgc2Vxbm8pCit7CisJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2LCAqbmV4dDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShvYmpfcHJpdiwgbmV4dCwKKwkJCQkgJmRldl9wcml2LT5tbS5ncHVfd3JpdGVfbGlzdCwKKwkJCQkgZ3B1X3dyaXRlX2xpc3QpIHsKKwkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBvYmpfcHJpdi0+b2JqOworCisJCWlmICgob2JqLT53cml0ZV9kb21haW4gJiBmbHVzaF9kb21haW5zKSA9PQorCQkgICAgb2JqLT53cml0ZV9kb21haW4pIHsKKwkJCXVpbnQzMl90IG9sZF93cml0ZV9kb21haW4gPSBvYmotPndyaXRlX2RvbWFpbjsKKworCQkJb2JqLT53cml0ZV9kb21haW4gPSAwOworCQkJbGlzdF9kZWxfaW5pdCgmb2JqX3ByaXYtPmdwdV93cml0ZV9saXN0KTsKKwkJCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2FjdGl2ZShvYmosIHNlcW5vKTsKKworCQkJLyogdXBkYXRlIHRoZSBmZW5jZSBscnUgbGlzdCAqLworCQkJaWYgKG9ial9wcml2LT5mZW5jZV9yZWcgIT0gSTkxNV9GRU5DRV9SRUdfTk9ORSkKKwkJCQlsaXN0X21vdmVfdGFpbCgmb2JqX3ByaXYtPmZlbmNlX2xpc3QsCisJCQkJCQkmZGV2X3ByaXYtPm1tLmZlbmNlX2xpc3QpOworCisJCQl0cmFjZV9pOTE1X2dlbV9vYmplY3RfY2hhbmdlX2RvbWFpbihvYmosCisJCQkJCQkJICAgIG9iai0+cmVhZF9kb21haW5zLAorCQkJCQkJCSAgICBvbGRfd3JpdGVfZG9tYWluKTsKKwkJfQorCX0KK30KKwogLyoqCiAgKiBDcmVhdGVzIGEgbmV3IHNlcXVlbmNlIG51bWJlciwgZW1pdHRpbmcgYSB3cml0ZSBvZiBpdCB0byB0aGUgc3RhdHVzIHBhZ2UKICAqIHBsdXMgYW4gaW50ZXJydXB0LCB3aGljaCB3aWxsIHRyaWdnZXIgaTkxNV91c2VyX2ludGVycnVwdF9oYW5kbGVyLgpAQCAtMTYyMCwyOSArMTY0OCw4IEBACiAJLyogQXNzb2NpYXRlIGFueSBvYmplY3RzIG9uIHRoZSBmbHVzaGluZyBsaXN0IG1hdGNoaW5nIHRoZSB3cml0ZQogCSAqIGRvbWFpbiB3ZSdyZSBmbHVzaGluZyB3aXRoIG91ciBmbHVzaC4KIAkgKi8KLQlpZiAoZmx1c2hfZG9tYWlucyAhPSAwKSB7Ci0JCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiwgKm5leHQ7Ci0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9ial9wcml2LCBuZXh0LAotCQkJCQkgJmRldl9wcml2LT5tbS5ncHVfd3JpdGVfbGlzdCwKLQkJCQkJIGdwdV93cml0ZV9saXN0KSB7Ci0JCQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaiA9IG9ial9wcml2LT5vYmo7Ci0KLQkJCWlmICgob2JqLT53cml0ZV9kb21haW4gJiBmbHVzaF9kb21haW5zKSA9PQotCQkJICAgIG9iai0+d3JpdGVfZG9tYWluKSB7Ci0JCQkJdWludDMyX3Qgb2xkX3dyaXRlX2RvbWFpbiA9IG9iai0+d3JpdGVfZG9tYWluOwotCi0JCQkJb2JqLT53cml0ZV9kb21haW4gPSAwOwotCQkJCWxpc3RfZGVsX2luaXQoJm9ial9wcml2LT5ncHVfd3JpdGVfbGlzdCk7Ci0JCQkJaTkxNV9nZW1fb2JqZWN0X21vdmVfdG9fYWN0aXZlKG9iaiwgc2Vxbm8pOwotCi0JCQkJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X2NoYW5nZV9kb21haW4ob2JqLAotCQkJCQkJCQkgICAgb2JqLT5yZWFkX2RvbWFpbnMsCi0JCQkJCQkJCSAgICBvbGRfd3JpdGVfZG9tYWluKTsKLQkJCX0KLQkJfQotCi0JfQorCWlmIChmbHVzaF9kb21haW5zICE9IDApIAorCQlpOTE1X2dlbV9wcm9jZXNzX2ZsdXNoaW5nX2xpc3QoZGV2LCBmbHVzaF9kb21haW5zLCBzZXFubyk7CiAKIAlpZiAoIWRldl9wcml2LT5tbS5zdXNwZW5kZWQpIHsKIAkJbW9kX3RpbWVyKCZkZXZfcHJpdi0+aGFuZ2NoZWNrX3RpbWVyLCBqaWZmaWVzICsgRFJNX0k5MTVfSEFOR0NIRUNLX1BFUklPRCk7CkBAIC0xODIyLDcgKzE4MjksNyBAQAogCQlyZXR1cm4gLUVJTzsKIAogCWlmICghaTkxNV9zZXFub19wYXNzZWQoaTkxNV9nZXRfZ2VtX3NlcW5vKGRldiksIHNlcW5vKSkgewotCQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwkJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJCWllciA9IEk5MTVfUkVBRChERUlFUikgfCBJOTE1X1JFQUQoR1RJRVIpOwogCQllbHNlCiAJCQlpZXIgPSBJOTE1X1JFQUQoSUVSKTsKQEAgLTE5OTEsNiArMTk5OCw3IEBACiBpOTE1X2dlbV9vYmplY3RfdW5iaW5kKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvYmotPmRldjsKKwlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOwogCWludCByZXQgPSAwOwogCkBAIC0yMDQ2LDggKzIwNTQsMTAgQEAKIAl9CiAKIAkvKiBSZW1vdmUgb3Vyc2VsdmVzIGZyb20gdGhlIExSVSBsaXN0IGlmIHByZXNlbnQuICovCisJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CiAJaWYgKCFsaXN0X2VtcHR5KCZvYmpfcHJpdi0+bGlzdCkpCiAJCWxpc3RfZGVsX2luaXQoJm9ial9wcml2LT5saXN0KTsKKwlzcGluX3VubG9jaygmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0X2xvY2spOwogCiAJaWYgKGk5MTVfZ2VtX29iamVjdF9pc19wdXJnZWFibGUob2JqX3ByaXYpKQogCQlpOTE1X2dlbV9vYmplY3RfdHJ1bmNhdGUob2JqKTsKQEAgLTIwODUsMTEgKzIwOTUsMzQgQEAKIH0KIAogc3RhdGljIGludAoraTkxNV9ncHVfaWRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCWJvb2wgbGlzdHNfZW1wdHk7CisJdWludDMyX3Qgc2Vxbm87CisKKwlzcGluX2xvY2soJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdF9sb2NrKTsKKwlsaXN0c19lbXB0eSA9IGxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSAmJgorCQkgICAgICBsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QpOworCXNwaW5fdW5sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CisKKwlpZiAobGlzdHNfZW1wdHkpCisJCXJldHVybiAwOworCisJLyogRmx1c2ggZXZlcnl0aGluZyBvbnRvIHRoZSBpbmFjdGl2ZSBsaXN0LiAqLworCWk5MTVfZ2VtX2ZsdXNoKGRldiwgSTkxNV9HRU1fR1BVX0RPTUFJTlMsIEk5MTVfR0VNX0dQVV9ET01BSU5TKTsKKwlzZXFubyA9IGk5MTVfYWRkX3JlcXVlc3QoZGV2LCBOVUxMLCBJOTE1X0dFTV9HUFVfRE9NQUlOUyk7CisJaWYgKHNlcW5vID09IDApCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIGk5MTVfd2FpdF9yZXF1ZXN0KGRldiwgc2Vxbm8pOworfQorCitzdGF0aWMgaW50CiBpOTE1X2dlbV9ldmljdF9ldmVyeXRoaW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJaW50IHJldDsKLQl1aW50MzJfdCBzZXFubzsKIAlib29sIGxpc3RzX2VtcHR5OwogCiAJc3Bpbl9sb2NrKCZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3RfbG9jayk7CkBAIC0yMTAyLDEyICsyMTM1LDcgQEAKIAkJcmV0dXJuIC1FTk9TUEM7CiAKIAkvKiBGbHVzaCBldmVyeXRoaW5nIChvbiB0byB0aGUgaW5hY3RpdmUgbGlzdHMpIGFuZCBldmljdCAqLwotCWk5MTVfZ2VtX2ZsdXNoKGRldiwgSTkxNV9HRU1fR1BVX0RPTUFJTlMsIEk5MTVfR0VNX0dQVV9ET01BSU5TKTsKLQlzZXFubyA9IGk5MTVfYWRkX3JlcXVlc3QoZGV2LCBOVUxMLCBJOTE1X0dFTV9HUFVfRE9NQUlOUyk7Ci0JaWYgKHNlcW5vID09IDApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JcmV0ID0gaTkxNV93YWl0X3JlcXVlc3QoZGV2LCBzZXFubyk7CisJcmV0ID0gaTkxNV9ncHVfaWRsZShkZXYpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTIyNjUsNiArMjI5MywyOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBzYW5keWJyaWRnZV93cml0ZV9mZW5jZV9yZWcoc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAqcmVnKQoreworCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gcmVnLT5vYmo7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IG9iai0+ZGV2OworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJaW50IHJlZ251bSA9IG9ial9wcml2LT5mZW5jZV9yZWc7CisJdWludDY0X3QgdmFsOworCisJdmFsID0gKHVpbnQ2NF90KSgob2JqX3ByaXYtPmd0dF9vZmZzZXQgKyBvYmotPnNpemUgLSA0MDk2KSAmCisJCSAgICAweGZmZmZmMDAwKSA8PCAzMjsKKwl2YWwgfD0gb2JqX3ByaXYtPmd0dF9vZmZzZXQgJiAweGZmZmZmMDAwOworCXZhbCB8PSAodWludDY0X3QpKChvYmpfcHJpdi0+c3RyaWRlIC8gMTI4KSAtIDEpIDw8CisJCVNBTkRZQlJJREdFX0ZFTkNFX1BJVENIX1NISUZUOworCisJaWYgKG9ial9wcml2LT50aWxpbmdfbW9kZSA9PSBJOTE1X1RJTElOR19ZKQorCQl2YWwgfD0gMSA8PCBJOTY1X0ZFTkNFX1RJTElOR19ZX1NISUZUOworCXZhbCB8PSBJOTY1X0ZFTkNFX1JFR19WQUxJRDsKKworCUk5MTVfV1JJVEU2NChGRU5DRV9SRUdfU0FORFlCUklER0VfMCArIChyZWdudW0gKiA4KSwgdmFsKTsKK30KKwogc3RhdGljIHZvaWQgaTk2NV93cml0ZV9mZW5jZV9yZWcoc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAqcmVnKQogewogCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gcmVnLT5vYmo7CkBAIC0yMzYxLDYgKzI0MTEsNTggQEAKIAlJOTE1X1dSSVRFKEZFTkNFX1JFR184MzBfMCArIChyZWdudW0gKiA0KSwgdmFsKTsKIH0KIAorc3RhdGljIGludCBpOTE1X2ZpbmRfZmVuY2VfcmVnKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAqcmVnID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBOVUxMOworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBOVUxMOworCWludCBpLCBhdmFpbCwgcmV0OworCisJLyogRmlyc3QgdHJ5IHRvIGZpbmQgYSBmcmVlIHJlZyAqLworCWF2YWlsID0gMDsKKwlmb3IgKGkgPSBkZXZfcHJpdi0+ZmVuY2VfcmVnX3N0YXJ0OyBpIDwgZGV2X3ByaXYtPm51bV9mZW5jZV9yZWdzOyBpKyspIHsKKwkJcmVnID0gJmRldl9wcml2LT5mZW5jZV9yZWdzW2ldOworCQlpZiAoIXJlZy0+b2JqKQorCQkJcmV0dXJuIGk7CisKKwkJb2JqX3ByaXYgPSByZWctPm9iai0+ZHJpdmVyX3ByaXZhdGU7CisJCWlmICghb2JqX3ByaXYtPnBpbl9jb3VudCkKKwkJICAgIGF2YWlsKys7CisJfQorCisJaWYgKGF2YWlsID09IDApCisJCXJldHVybiAtRU5PU1BDOworCisJLyogTm9uZSBhdmFpbGFibGUsIHRyeSB0byBzdGVhbCBvbmUgb3Igd2FpdCBmb3IgYSB1c2VyIHRvIGZpbmlzaCAqLworCWkgPSBJOTE1X0ZFTkNFX1JFR19OT05FOworCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uZmVuY2VfbGlzdCwKKwkJCSAgICBmZW5jZV9saXN0KSB7CisJCW9iaiA9IG9ial9wcml2LT5vYmo7CisKKwkJaWYgKG9ial9wcml2LT5waW5fY291bnQpCisJCQljb250aW51ZTsKKworCQkvKiBmb3VuZCBvbmUhICovCisJCWkgPSBvYmpfcHJpdi0+ZmVuY2VfcmVnOworCQlicmVhazsKKwl9CisKKwlCVUdfT04oaSA9PSBJOTE1X0ZFTkNFX1JFR19OT05FKTsKKworCS8qIFdlIG9ubHkgaGF2ZSBhIHJlZmVyZW5jZSBvbiBvYmogZnJvbSB0aGUgYWN0aXZlIGxpc3QuIHB1dF9mZW5jZV9yZWcKKwkgKiBtaWdodCBkcm9wIHRoYXQgb25lLCBjYXVzaW5nIGEgdXNlLWFmdGVyLWZyZWUgaW4gaXQuIFNvIGhvbGQgYQorCSAqIHByaXZhdGUgcmVmZXJlbmNlIHRvIG9iaiBsaWtlIHRoZSBvdGhlciBjYWxsZXJzIG9mIHB1dF9mZW5jZV9yZWcKKwkgKiAoc2V0X3RpbGluZyBpb2N0bCkgZG8uICovCisJZHJtX2dlbV9vYmplY3RfcmVmZXJlbmNlKG9iaik7CisJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3B1dF9mZW5jZV9yZWcob2JqKTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvYmopOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBpOworfQorCiAvKioKICAqIGk5MTVfZ2VtX29iamVjdF9nZXRfZmVuY2VfcmVnIC0gc2V0IHVwIGEgZmVuY2UgcmVnIGZvciBhbiBvYmplY3QKICAqIEBvYmo6IG9iamVjdCB0byBtYXAgdGhyb3VnaCBhIGZlbmNlIHJlZwpAQCAtMjM4MSw4ICsyNDgzLDcgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CiAJc3RydWN0IGRybV9pOTE1X2ZlbmNlX3JlZyAqcmVnID0gTlVMTDsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2xkX29ial9wcml2ID0gTlVMTDsKLQlpbnQgaSwgcmV0LCBhdmFpbDsKKwlpbnQgcmV0OwogCiAJLyogSnVzdCB1cGRhdGUgb3VyIHBsYWNlIGluIHRoZSBMUlUgaWYgb3VyIGZlbmNlIGlzIGdldHRpbmcgdXNlZC4gKi8KIAlpZiAob2JqX3ByaXYtPmZlbmNlX3JlZyAhPSBJOTE1X0ZFTkNFX1JFR19OT05FKSB7CkBAIC0yNDEwLDg2ICsyNTExLDI3IEBACiAJCWJyZWFrOwogCX0KIAotCS8qIEZpcnN0IHRyeSB0byBmaW5kIGEgZnJlZSByZWcgKi8KLQlhdmFpbCA9IDA7Ci0JZm9yIChpID0gZGV2X3ByaXYtPmZlbmNlX3JlZ19zdGFydDsgaSA8IGRldl9wcml2LT5udW1fZmVuY2VfcmVnczsgaSsrKSB7Ci0JCXJlZyA9ICZkZXZfcHJpdi0+ZmVuY2VfcmVnc1tpXTsKLQkJaWYgKCFyZWctPm9iaikKLQkJCWJyZWFrOworCXJldCA9IGk5MTVfZmluZF9mZW5jZV9yZWcoZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAotCQlvbGRfb2JqX3ByaXYgPSByZWctPm9iai0+ZHJpdmVyX3ByaXZhdGU7Ci0JCWlmICghb2xkX29ial9wcml2LT5waW5fY291bnQpCi0JCSAgICBhdmFpbCsrOwotCX0KLQotCS8qIE5vbmUgYXZhaWxhYmxlLCB0cnkgdG8gc3RlYWwgb25lIG9yIHdhaXQgZm9yIGEgdXNlciB0byBmaW5pc2ggKi8KLQlpZiAoaSA9PSBkZXZfcHJpdi0+bnVtX2ZlbmNlX3JlZ3MpIHsKLQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvbGRfb2JqID0gTlVMTDsKLQotCQlpZiAoYXZhaWwgPT0gMCkKLQkJCXJldHVybiAtRU5PU1BDOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkob2xkX29ial9wcml2LCAmZGV2X3ByaXYtPm1tLmZlbmNlX2xpc3QsCi0JCQkJICAgIGZlbmNlX2xpc3QpIHsKLQkJCW9sZF9vYmogPSBvbGRfb2JqX3ByaXYtPm9iajsKLQotCQkJaWYgKG9sZF9vYmpfcHJpdi0+cGluX2NvdW50KQotCQkJCWNvbnRpbnVlOwotCi0JCQkvKiBUYWtlIGEgcmVmZXJlbmNlLCBhcyBvdGhlcndpc2UgdGhlIHdhaXRfcmVuZGVyaW5nCi0JCQkgKiBiZWxvdyBtYXkgY2F1c2UgdGhlIG9iamVjdCB0byBnZXQgZnJlZWQgb3V0IGZyb20KLQkJCSAqIHVuZGVyIHVzLgotCQkJICovCi0JCQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2Uob2xkX29iaik7Ci0KLQkJCS8qIGk5MTUgdXNlcyBmZW5jZXMgZm9yIEdQVSBhY2Nlc3MgdG8gdGlsZWQgYnVmZmVycyAqLwotCQkJaWYgKElTX0k5NjVHKGRldikgfHwgIW9sZF9vYmpfcHJpdi0+YWN0aXZlKQotCQkJCWJyZWFrOwotCi0JCQkvKiBUaGlzIGJyaW5ncyB0aGUgb2JqZWN0IHRvIHRoZSBoZWFkIG9mIHRoZSBMUlUgaWYgaXQKLQkJCSAqIGhhZCBiZWVuIHdyaXR0ZW4gdG8uICBUaGUgb25seSB3YXkgdGhpcyBzaG91bGQKLQkJCSAqIHJlc3VsdCBpbiB1cyB3YWl0aW5nIGxvbmdlciB0aGFuIHRoZSBleHBlY3RlZAotCQkJICogb3B0aW1hbCBhbW91bnQgb2YgdGltZSBpcyBpZiB0aGVyZSB3YXMgYQotCQkJICogZmVuY2UtdXNpbmcgYnVmZmVyIGxhdGVyIHRoYXQgd2FzIHJlYWQtb25seS4KLQkJCSAqLwotCQkJaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2dwdV93cml0ZV9kb21haW4ob2xkX29iaik7Ci0JCQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcob2xkX29iaik7Ci0JCQlpZiAocmV0ICE9IDApIHsKLQkJCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvbGRfb2JqKTsKLQkJCQlyZXR1cm4gcmV0OwotCQkJfQotCi0JCQlicmVhazsKLQkJfQotCi0JCS8qCi0JCSAqIFphcCB0aGlzIHZpcnR1YWwgbWFwcGluZyBzbyB3ZSBjYW4gc2V0IHVwIGEgZmVuY2UgYWdhaW4KLQkJICogZm9yIHRoaXMgb2JqZWN0IG5leHQgdGltZSB3ZSBuZWVkIGl0LgotCQkgKi8KLQkJaTkxNV9nZW1fcmVsZWFzZV9tbWFwKG9sZF9vYmopOwotCi0JCWkgPSBvbGRfb2JqX3ByaXYtPmZlbmNlX3JlZzsKLQkJcmVnID0gJmRldl9wcml2LT5mZW5jZV9yZWdzW2ldOwotCi0JCW9sZF9vYmpfcHJpdi0+ZmVuY2VfcmVnID0gSTkxNV9GRU5DRV9SRUdfTk9ORTsKLQkJbGlzdF9kZWxfaW5pdCgmb2xkX29ial9wcml2LT5mZW5jZV9saXN0KTsKLQotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShvbGRfb2JqKTsKLQl9Ci0KLQlvYmpfcHJpdi0+ZmVuY2VfcmVnID0gaTsKKwlvYmpfcHJpdi0+ZmVuY2VfcmVnID0gcmV0OworCXJlZyA9ICZkZXZfcHJpdi0+ZmVuY2VfcmVnc1tvYmpfcHJpdi0+ZmVuY2VfcmVnXTsKIAlsaXN0X2FkZF90YWlsKCZvYmpfcHJpdi0+ZmVuY2VfbGlzdCwgJmRldl9wcml2LT5tbS5mZW5jZV9saXN0KTsKIAogCXJlZy0+b2JqID0gb2JqOwogCi0JaWYgKElTX0k5NjVHKGRldikpCisJaWYgKElTX0dFTjYoZGV2KSkKKwkJc2FuZHlicmlkZ2Vfd3JpdGVfZmVuY2VfcmVnKHJlZyk7CisJZWxzZSBpZiAoSVNfSTk2NUcoZGV2KSkKIAkJaTk2NV93cml0ZV9mZW5jZV9yZWcocmVnKTsKIAllbHNlIGlmIChJU19JOVhYKGRldikpCiAJCWk5MTVfd3JpdGVfZmVuY2VfcmVnKHJlZyk7CiAJZWxzZQogCQlpODMwX3dyaXRlX2ZlbmNlX3JlZyhyZWcpOwogCi0JdHJhY2VfaTkxNV9nZW1fb2JqZWN0X2dldF9mZW5jZShvYmosIGksIG9ial9wcml2LT50aWxpbmdfbW9kZSk7CisJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X2dldF9mZW5jZShvYmosIG9ial9wcml2LT5mZW5jZV9yZWcsCisJCQlvYmpfcHJpdi0+dGlsaW5nX21vZGUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNTA4LDkgKzI1NTAsMTIgQEAKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqX3ByaXYgPSBvYmotPmRyaXZlcl9wcml2YXRlOwogCi0JaWYgKElTX0k5NjVHKGRldikpCisJaWYgKElTX0dFTjYoZGV2KSkgeworCQlJOTE1X1dSSVRFNjQoRkVOQ0VfUkVHX1NBTkRZQlJJREdFXzAgKworCQkJICAgICAob2JqX3ByaXYtPmZlbmNlX3JlZyAqIDgpLCAwKTsKKwl9IGVsc2UgaWYgKElTX0k5NjVHKGRldikpIHsKIAkJSTkxNV9XUklURTY0KEZFTkNFX1JFR185NjVfMCArIChvYmpfcHJpdi0+ZmVuY2VfcmVnICogOCksIDApOwotCWVsc2UgeworCX0gZWxzZSB7CiAJCXVpbnQzMl90IGZlbmNlX3JlZzsKIAogCQlpZiAob2JqX3ByaXYtPmZlbmNlX3JlZyA8IDgpCkBAIC0yNTQ0LDYgKzI1ODksMTIgQEAKIAlpZiAob2JqX3ByaXYtPmZlbmNlX3JlZyA9PSBJOTE1X0ZFTkNFX1JFR19OT05FKQogCQlyZXR1cm4gMDsKIAorCS8qIElmIHdlJ3ZlIGNoYW5nZWQgdGlsaW5nLCBHVFQtbWFwcGluZ3Mgb2YgdGhlIG9iamVjdAorCSAqIG5lZWQgdG8gcmUtZmF1bHQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgZmVuY2UgcmVnaXN0ZXIKKwkgKiBzZXR1cCBpcyBpbiBwbGFjZS4KKwkgKi8KKwlpOTE1X2dlbV9yZWxlYXNlX21tYXAob2JqKTsKKwogCS8qIE9uIHRoZSBpOTE1LCBHUFUgYWNjZXNzIHRvIHRpbGVkIGJ1ZmZlcnMgaXMgdmlhIGEgZmVuY2UsCiAJICogdGhlcmVmb3JlIHdlIG11c3Qgd2FpdCBmb3IgYW55IG91dHN0YW5kaW5nIGFjY2VzcyB0byBjb21wbGV0ZQogCSAqIGJlZm9yZSBjbGVhcmluZyB0aGUgZmVuY2UuCkBAIC0yNTUyLDEyICsyNjAzLDEyIEBACiAJCWludCByZXQ7CiAKIAkJaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2dwdV93cml0ZV9kb21haW4ob2JqKTsKLQkJaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2d0dF93cml0ZV9kb21haW4ob2JqKTsKIAkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaik7CiAJCWlmIChyZXQgIT0gMCkKIAkJCXJldHVybiByZXQ7CiAJfQogCisJaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2d0dF93cml0ZV9kb21haW4ob2JqKTsKIAlpOTE1X2dlbV9jbGVhcl9mZW5jZV9yZWcgKG9iaik7CiAKIAlyZXR1cm4gMDsKQEAgLTI2OTcsNyArMjc0OCw2IEBACiBpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3B1X3dyaXRlX2RvbWFpbihzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaikKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7Ci0JdWludDMyX3Qgc2Vxbm87CiAJdWludDMyX3Qgb2xkX3dyaXRlX2RvbWFpbjsKIAogCWlmICgob2JqLT53cml0ZV9kb21haW4gJiBJOTE1X0dFTV9HUFVfRE9NQUlOUykgPT0gMCkKQEAgLTI3MDYsOSArMjc1Niw4IEBACiAJLyogUXVldWUgdGhlIEdQVSB3cml0ZSBjYWNoZSBmbHVzaGluZyB3ZSBuZWVkLiAqLwogCW9sZF93cml0ZV9kb21haW4gPSBvYmotPndyaXRlX2RvbWFpbjsKIAlpOTE1X2dlbV9mbHVzaChkZXYsIDAsIG9iai0+d3JpdGVfZG9tYWluKTsKLQlzZXFubyA9IGk5MTVfYWRkX3JlcXVlc3QoZGV2LCBOVUxMLCBvYmotPndyaXRlX2RvbWFpbik7CisJKHZvaWQpIGk5MTVfYWRkX3JlcXVlc3QoZGV2LCBOVUxMLCBvYmotPndyaXRlX2RvbWFpbik7CiAJQlVHX09OKG9iai0+d3JpdGVfZG9tYWluKTsKLQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19hY3RpdmUob2JqLCBzZXFubyk7CiAKIAl0cmFjZV9pOTE1X2dlbV9vYmplY3RfY2hhbmdlX2RvbWFpbihvYmosCiAJCQkJCSAgICBvYmotPnJlYWRfZG9tYWlucywKQEAgLTMyNDcsNyArMzI5Niw4IEBACiAJICAgICAgICAgICAgIG9ial9wcml2LT50aWxpbmdfbW9kZSAhPSBJOTE1X1RJTElOR19OT05FOwogCiAJLyogQ2hlY2sgZmVuY2UgcmVnIGNvbnN0cmFpbnRzIGFuZCByZWJpbmQgaWYgbmVjZXNzYXJ5ICovCi0JaWYgKG5lZWRfZmVuY2UgJiYgIWk5MTVfb2JqX2ZlbmNlYWJsZShkZXYsIG9iaikpCisJaWYgKG5lZWRfZmVuY2UgJiYgIWk5MTVfZ2VtX29iamVjdF9mZW5jZV9vZmZzZXRfb2sob2JqLAorCSAgICBvYmpfcHJpdi0+dGlsaW5nX21vZGUpKQogCQlpOTE1X2dlbV9vYmplY3RfdW5iaW5kKG9iaik7CiAKIAkvKiBDaG9vc2UgdGhlIEdUVCBvZmZzZXQgZm9yIG91ciBidWZmZXIgYW5kIHB1dCBpdCB0aGVyZS4gKi8KQEAgLTMzMTcsNiArMzM2NywxNiBAQAogCQl9CiAKIAkJLyogVmFsaWRhdGUgdGhhdCB0aGUgdGFyZ2V0IGlzIGluIGEgdmFsaWQgci93IEdQVSBkb21haW4gKi8KKwkJaWYgKHJlbG9jLT53cml0ZV9kb21haW4gJiAocmVsb2MtPndyaXRlX2RvbWFpbiAtIDEpKSB7CisJCQlEUk1fRVJST1IoInJlbG9jIHdpdGggbXVsdGlwbGUgd3JpdGUgZG9tYWluczogIgorCQkJCSAgIm9iaiAlcCB0YXJnZXQgJWQgb2Zmc2V0ICVkICIKKwkJCQkgICJyZWFkICUwOHggd3JpdGUgJTA4eCIsCisJCQkJICBvYmosIHJlbG9jLT50YXJnZXRfaGFuZGxlLAorCQkJCSAgKGludCkgcmVsb2MtPm9mZnNldCwKKwkJCQkgIHJlbG9jLT5yZWFkX2RvbWFpbnMsCisJCQkJICByZWxvYy0+d3JpdGVfZG9tYWluKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CiAJCWlmIChyZWxvYy0+d3JpdGVfZG9tYWluICYgSTkxNV9HRU1fRE9NQUlOX0NQVSB8fAogCQkgICAgcmVsb2MtPnJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0RPTUFJTl9DUFUpIHsKIAkJCURSTV9FUlJPUigicmVsb2Mgd2l0aCByZWFkL3dyaXRlIENQVSBkb21haW5zOiAiCkBAIC00NDQ1LDggKzQ1MDUsNyBAQAogaTkxNV9nZW1faWRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVpbnQzMl90IHNlcW5vLCBjdXJfc2Vxbm8sIGxhc3Rfc2Vxbm87Ci0JaW50IHN0dWNrLCByZXQ7CisJaW50IHJldDsKIAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKIApAQCAtNDQ1NSwxMTUgKzQ1MTQsMzYgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogSGFjayEgIERvbid0IGxldCBhbnlib2R5IGRvIGV4ZWNidWYgd2hpbGUgd2UgZG9uJ3QgY29udHJvbCB0aGUgY2hpcC4KLQkgKiBXZSBuZWVkIHRvIHJlcGxhY2UgdGhpcyB3aXRoIGEgc2VtYXBob3JlLCBvciBzb21ldGhpbmcuCi0JICovCi0JZGV2X3ByaXYtPm1tLnN1c3BlbmRlZCA9IDE7Ci0JZGVsX3RpbWVyKCZkZXZfcHJpdi0+aGFuZ2NoZWNrX3RpbWVyKTsKLQotCS8qIENhbmNlbCB0aGUgcmV0aXJlIHdvcmsgaGFuZGxlciwgd2FpdCBmb3IgaXQgdG8gZmluaXNoIGlmIHJ1bm5pbmcKLQkgKi8KLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRldl9wcml2LT5tbS5yZXRpcmVfd29yayk7Ci0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCi0JaTkxNV9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7Ci0KLQkvKiBGbHVzaCB0aGUgR1BVIGFsb25nIHdpdGggYWxsIG5vbi1DUFUgd3JpdGUgZG9tYWlucwotCSAqLwotCWk5MTVfZ2VtX2ZsdXNoKGRldiwgSTkxNV9HRU1fR1BVX0RPTUFJTlMsIEk5MTVfR0VNX0dQVV9ET01BSU5TKTsKLQlzZXFubyA9IGk5MTVfYWRkX3JlcXVlc3QoZGV2LCBOVUxMLCBJOTE1X0dFTV9HUFVfRE9NQUlOUyk7Ci0KLQlpZiAoc2Vxbm8gPT0gMCkgewotCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JZGV2X3ByaXYtPm1tLndhaXRpbmdfZ2VtX3NlcW5vID0gc2Vxbm87Ci0JbGFzdF9zZXFubyA9IDA7Ci0Jc3R1Y2sgPSAwOwotCWZvciAoOzspIHsKLQkJY3VyX3NlcW5vID0gaTkxNV9nZXRfZ2VtX3NlcW5vKGRldik7Ci0JCWlmIChpOTE1X3NlcW5vX3Bhc3NlZChjdXJfc2Vxbm8sIHNlcW5vKSkKLQkJCWJyZWFrOwotCQlpZiAobGFzdF9zZXFubyA9PSBjdXJfc2Vxbm8pIHsKLQkJCWlmIChzdHVjaysrID4gMTAwKSB7Ci0JCQkJRFJNX0VSUk9SKCJoYXJkd2FyZSB3ZWRnZWRcbiIpOwotCQkJCWF0b21pY19zZXQoJmRldl9wcml2LT5tbS53ZWRnZWQsIDEpOwotCQkJCURSTV9XQUtFVVAoJmRldl9wcml2LT5pcnFfcXVldWUpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCW1zbGVlcCgxMCk7Ci0JCWxhc3Rfc2Vxbm8gPSBjdXJfc2Vxbm87Ci0JfQotCWRldl9wcml2LT5tbS53YWl0aW5nX2dlbV9zZXFubyA9IDA7Ci0KLQlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHMoZGV2KTsKLQotCXNwaW5fbG9jaygmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0X2xvY2spOwotCWlmICghYXRvbWljX3JlYWQoJmRldl9wcml2LT5tbS53ZWRnZWQpKSB7Ci0JCS8qIEFjdGl2ZSBhbmQgZmx1c2hpbmcgc2hvdWxkIG5vdyBiZSBlbXB0eSBhcyB3ZSd2ZQotCQkgKiB3YWl0ZWQgZm9yIGEgc2VxdWVuY2UgaGlnaGVyIHRoYW4gYW55IHBlbmRpbmcgZXhlY2J1ZmZlcgotCQkgKi8KLQkJV0FSTl9PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0KSk7Ci0JCVdBUk5fT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5mbHVzaGluZ19saXN0KSk7Ci0JCS8qIFJlcXVlc3Qgc2hvdWxkIG5vdyBiZSBlbXB0eSBhcyB3ZSd2ZSBhbHNvIHdhaXRlZAotCQkgKiBmb3IgdGhlIGxhc3QgcmVxdWVzdCBpbiB0aGUgbGlzdAotCQkgKi8KLQkJV0FSTl9PTighbGlzdF9lbXB0eSgmZGV2X3ByaXYtPm1tLnJlcXVlc3RfbGlzdCkpOwotCX0KLQotCS8qIEVtcHR5IHRoZSBhY3RpdmUgYW5kIGZsdXNoaW5nIGxpc3RzIHRvIGluYWN0aXZlLiAgSWYgdGhlcmUncwotCSAqIGFueXRoaW5nIGxlZnQgYXQgdGhpcyBwb2ludCwgaXQgbWVhbnMgdGhhdCB3ZSdyZSB3ZWRnZWQgYW5kCi0JICogbm90aGluZyBnb29kJ3MgZ29pbmcgdG8gaGFwcGVuIGJ5IGxlYXZpbmcgdGhlbSB0aGVyZS4gIFNvIHN0cmlwCi0JICogdGhlIEdQVSBkb21haW5zIGFuZCBqdXN0IHN0dWZmIHRoZW0gb250byBpbmFjdGl2ZS4KLQkgKi8KLQl3aGlsZSAoIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5hY3RpdmVfbGlzdCkpIHsKLQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Ci0JCXVpbnQzMl90IG9sZF93cml0ZV9kb21haW47Ci0KLQkJb2JqID0gbGlzdF9maXJzdF9lbnRyeSgmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0LAotCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCwKLQkJCQkgICAgICAgbGlzdCktPm9iajsKLQkJb2xkX3dyaXRlX2RvbWFpbiA9IG9iai0+d3JpdGVfZG9tYWluOwotCQlvYmotPndyaXRlX2RvbWFpbiAmPSB+STkxNV9HRU1fR1BVX0RPTUFJTlM7Ci0JCWk5MTVfZ2VtX29iamVjdF9tb3ZlX3RvX2luYWN0aXZlKG9iaik7Ci0KLQkJdHJhY2VfaTkxNV9nZW1fb2JqZWN0X2NoYW5nZV9kb21haW4ob2JqLAotCQkJCQkJICAgIG9iai0+cmVhZF9kb21haW5zLAotCQkJCQkJICAgIG9sZF93cml0ZV9kb21haW4pOwotCX0KLQlzcGluX3VubG9jaygmZGV2X3ByaXYtPm1tLmFjdGl2ZV9saXN0X2xvY2spOwotCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZkZXZfcHJpdi0+bW0uZmx1c2hpbmdfbGlzdCkpIHsKLQkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmo7Ci0JCXVpbnQzMl90IG9sZF93cml0ZV9kb21haW47Ci0KLQkJb2JqID0gbGlzdF9maXJzdF9lbnRyeSgmZGV2X3ByaXYtPm1tLmZsdXNoaW5nX2xpc3QsCi0JCQkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LAotCQkJCSAgICAgICBsaXN0KS0+b2JqOwotCQlvbGRfd3JpdGVfZG9tYWluID0gb2JqLT53cml0ZV9kb21haW47Ci0JCW9iai0+d3JpdGVfZG9tYWluICY9IH5JOTE1X0dFTV9HUFVfRE9NQUlOUzsKLQkJaTkxNV9nZW1fb2JqZWN0X21vdmVfdG9faW5hY3RpdmUob2JqKTsKLQotCQl0cmFjZV9pOTE1X2dlbV9vYmplY3RfY2hhbmdlX2RvbWFpbihvYmosCi0JCQkJCQkgICAgb2JqLT5yZWFkX2RvbWFpbnMsCi0JCQkJCQkgICAgb2xkX3dyaXRlX2RvbWFpbik7Ci0JfQotCi0KLQkvKiBNb3ZlIGFsbCBpbmFjdGl2ZSBidWZmZXJzIG91dCBvZiB0aGUgR1RULiAqLwotCXJldCA9IGk5MTVfZ2VtX2V2aWN0X2Zyb21faW5hY3RpdmVfbGlzdChkZXYpOwotCVdBUk5fT04oIWxpc3RfZW1wdHkoJmRldl9wcml2LT5tbS5pbmFjdGl2ZV9saXN0KSk7CisJcmV0ID0gaTkxNV9ncHVfaWRsZShkZXYpOwogCWlmIChyZXQpIHsKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJCXJldHVybiByZXQ7CiAJfQogCisJLyogVW5kZXIgVU1TLCBiZSBwYXJhbm9pZCBhbmQgZXZpY3QuICovCisJaWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7CisJCXJldCA9IGk5MTVfZ2VtX2V2aWN0X2Zyb21faW5hY3RpdmVfbGlzdChkZXYpOworCQlpZiAocmV0KSB7CisJCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwkvKiBIYWNrISAgRG9uJ3QgbGV0IGFueWJvZHkgZG8gZXhlY2J1ZiB3aGlsZSB3ZSBkb24ndCBjb250cm9sIHRoZSBjaGlwLgorCSAqIFdlIG5lZWQgdG8gcmVwbGFjZSB0aGlzIHdpdGggYSBzZW1hcGhvcmUsIG9yIHNvbWV0aGluZy4KKwkgKiBBbmQgbm90IGNvbmZvdW5kIG1tLnN1c3BlbmRlZCEKKwkgKi8KKwlkZXZfcHJpdi0+bW0uc3VzcGVuZGVkID0gMTsKKwlkZWxfdGltZXIoJmRldl9wcml2LT5oYW5nY2hlY2tfdGltZXIpOworCisJaTkxNV9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7CiAJaTkxNV9nZW1fY2xlYW51cF9yaW5nYnVmZmVyKGRldik7CisKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAorCS8qIENhbmNlbCB0aGUgcmV0aXJlIHdvcmsgaGFuZGxlciwgd2hpY2ggc2hvdWxkIGJlIGlkbGUgbm93LiAqLworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGV2X3ByaXYtPm1tLnJldGlyZV93b3JrKTsKKwogCXJldHVybiAwOwogfQogCkBAIC00NjA3LDggKzQ1ODcsMTMgQEAKIAl9CiAJZGV2X3ByaXYtPmh3c19vYmogPSBvYmo7CiAJbWVtc2V0KGRldl9wcml2LT5od19zdGF0dXNfcGFnZSwgMCwgUEFHRV9TSVpFKTsKLQlJOTE1X1dSSVRFKEhXU19QR0EsIGRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIpOwotCUk5MTVfUkVBRChIV1NfUEdBKTsgLyogcG9zdGluZyByZWFkICovCisJaWYgKElTX0dFTjYoZGV2KSkgeworCQlJOTE1X1dSSVRFKEhXU19QR0FfR0VONiwgZGV2X3ByaXYtPnN0YXR1c19nZnhfYWRkcik7CisJCUk5MTVfUkVBRChIV1NfUEdBX0dFTjYpOyAvKiBwb3N0aW5nIHJlYWQgKi8KKwl9IGVsc2UgeworCQlJOTE1X1dSSVRFKEhXU19QR0EsIGRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIpOworCQlJOTE1X1JFQUQoSFdTX1BHQSk7IC8qIHBvc3RpbmcgcmVhZCAqLworCX0KIAlEUk1fREVCVUdfRFJJVkVSKCJod3Mgb2Zmc2V0OiAweCUwOHhcbiIsIGRldl9wcml2LT5zdGF0dXNfZ2Z4X2FkZHIpOwogCiAJcmV0dXJuIDA7CkBAIC00ODUwLDcgKzQ4MzUsOCBAQAogCXNwaW5fdW5sb2NrKCZzaHJpbmtfbGlzdF9sb2NrKTsKIAogCS8qIE9sZCBYIGRyaXZlcnMgd2lsbCB0YWtlIDAtMiBmb3IgZnJvbnQsIGJhY2ssIGRlcHRoIGJ1ZmZlcnMgKi8KLQlkZXZfcHJpdi0+ZmVuY2VfcmVnX3N0YXJ0ID0gMzsKKwlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpCisJCWRldl9wcml2LT5mZW5jZV9yZWdfc3RhcnQgPSAzOwogCiAJaWYgKElTX0k5NjVHKGRldikgfHwgSVNfSTk0NUcoZGV2KSB8fCBJU19JOTQ1R00oZGV2KSB8fCBJU19HMzMoZGV2KSkKIAkJZGV2X3ByaXYtPm51bV9mZW5jZV9yZWdzID0gMTY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV90aWxpbmcuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCmluZGV4IGRmMjc4YjIuLmI1YzU1ZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3RpbGluZy5jCkBAIC0yNSw4ICsyNSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9hY3BpLmg+Ci0jaW5jbHVkZSA8bGludXgvcG5wLmg+CiAjaW5jbHVkZSAibGludXgvc3RyaW5nLmgiCiAjaW5jbHVkZSAibGludXgvYml0b3BzLmgiCiAjaW5jbHVkZSAiZHJtUC5oIgpAQCAtODMsMTIwICs4MSw2IEBACiAgKiB0byBtYXRjaCB3aGF0IHRoZSBHUFUgZXhwZWN0cy4KICAqLwogCi0jZGVmaW5lIE1DSEJBUl9JOTE1IDB4NDQKLSNkZWZpbmUgTUNIQkFSX0k5NjUgMHg0OAotI2RlZmluZSBNQ0hCQVJfU0laRSAoNCo0MDk2KQotCi0jZGVmaW5lIERFVkVOX1JFRyAweDU0Ci0jZGVmaW5lICAgREVWRU5fTUNIQkFSX0VOICgxIDw8IDI4KQotCi0vKiBBbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIE1DSCByZWdzIGlmIG5lZWRlZCwgcmV0dXJuIG5vbnplcm8gb24gZXJyb3IgKi8KLXN0YXRpYyBpbnQKLWludGVsX2FsbG9jX21jaGJhcl9yZXNvdXJjZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWludCByZWcgPSBJU19JOTY1RyhkZXYpID8gTUNIQkFSX0k5NjUgOiBNQ0hCQVJfSTkxNTsKLQl1MzIgdGVtcF9sbywgdGVtcF9oaSA9IDA7Ci0JdTY0IG1jaGJhcl9hZGRyOwotCWludCByZXQgPSAwOwotCi0JaWYgKElTX0k5NjVHKGRldikpCi0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgcmVnICsgNCwgJnRlbXBfaGkpOwotCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgcmVnLCAmdGVtcF9sbyk7Ci0JbWNoYmFyX2FkZHIgPSAoKHU2NCl0ZW1wX2hpIDw8IDMyKSB8IHRlbXBfbG87Ci0KLQkvKiBJZiBBQ1BJIGRvZXNuJ3QgaGF2ZSBpdCwgYXNzdW1lIHdlIG5lZWQgdG8gYWxsb2NhdGUgaXQgb3Vyc2VsdmVzICovCi0jaWZkZWYgQ09ORklHX1BOUAotCWlmIChtY2hiYXJfYWRkciAmJgotCSAgICBwbnBfcmFuZ2VfcmVzZXJ2ZWQobWNoYmFyX2FkZHIsIG1jaGJhcl9hZGRyICsgTUNIQkFSX1NJWkUpKSB7Ci0JCXJldCA9IDA7Ci0JCWdvdG8gb3V0OwotCX0KLSNlbmRpZgotCi0JLyogR2V0IHNvbWUgc3BhY2UgZm9yIGl0ICovCi0JcmV0ID0gcGNpX2J1c19hbGxvY19yZXNvdXJjZShkZXZfcHJpdi0+YnJpZGdlX2Rldi0+YnVzLCAmZGV2X3ByaXYtPm1jaF9yZXMsCi0JCQkJICAgICBNQ0hCQVJfU0laRSwgTUNIQkFSX1NJWkUsCi0JCQkJICAgICBQQ0lCSU9TX01JTl9NRU0sCi0JCQkJICAgICAwLCAgIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2UsCi0JCQkJICAgICBkZXZfcHJpdi0+YnJpZGdlX2Rldik7Ci0JaWYgKHJldCkgewotCQlEUk1fREVCVUdfRFJJVkVSKCJmYWlsZWQgYnVzIGFsbG9jOiAlZFxuIiwgcmV0KTsKLQkJZGV2X3ByaXYtPm1jaF9yZXMuc3RhcnQgPSAwOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoSVNfSTk2NUcoZGV2KSkKLQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgcmVnICsgNCwKLQkJCQkgICAgICAgdXBwZXJfMzJfYml0cyhkZXZfcHJpdi0+bWNoX3Jlcy5zdGFydCkpOwotCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgcmVnLAotCQkJICAgICAgIGxvd2VyXzMyX2JpdHMoZGV2X3ByaXYtPm1jaF9yZXMuc3RhcnQpKTsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi0vKiBTZXR1cCBNQ0hCQVIgaWYgcG9zc2libGUsIHJldHVybiB0cnVlIGlmIHdlIHNob3VsZCBkaXNhYmxlIGl0IGFnYWluICovCi1zdGF0aWMgYm9vbAotaW50ZWxfc2V0dXBfbWNoYmFyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IG1jaGJhcl9yZWcgPSBJU19JOTY1RyhkZXYpID8gTUNIQkFSX0k5NjUgOiBNQ0hCQVJfSTkxNTsKLQl1MzIgdGVtcDsKLQlib29sIG5lZWRfZGlzYWJsZSA9IGZhbHNlLCBlbmFibGVkOwotCi0JaWYgKElTX0k5MTVHKGRldikgfHwgSVNfSTkxNUdNKGRldikpIHsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBERVZFTl9SRUcsICZ0ZW1wKTsKLQkJZW5hYmxlZCA9ICEhKHRlbXAgJiBERVZFTl9NQ0hCQVJfRU4pOwotCX0gZWxzZSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgbWNoYmFyX3JlZywgJnRlbXApOwotCQllbmFibGVkID0gdGVtcCAmIDE7Ci0JfQotCi0JLyogSWYgaXQncyBhbHJlYWR5IGVuYWJsZWQsIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcgKi8KLQlpZiAoZW5hYmxlZCkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoaW50ZWxfYWxsb2NfbWNoYmFyX3Jlc291cmNlKGRldikpCi0JCWdvdG8gb3V0OwotCi0JbmVlZF9kaXNhYmxlID0gdHJ1ZTsKLQotCS8qIFNwYWNlIGlzIGFsbG9jYXRlZCBvciByZXNlcnZlZCwgc28gZW5hYmxlIGl0LiAqLwotCWlmIChJU19JOTE1RyhkZXYpIHx8IElTX0k5MTVHTShkZXYpKSB7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIERFVkVOX1JFRywKLQkJCQkgICAgICAgdGVtcCB8IERFVkVOX01DSEJBUl9FTik7Ci0JfSBlbHNlIHsKLQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldl9wcml2LT5icmlkZ2VfZGV2LCBtY2hiYXJfcmVnLCAmdGVtcCk7Ci0JCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIG1jaGJhcl9yZWcsIHRlbXAgfCAxKTsKLQl9Ci1vdXQ6Ci0JcmV0dXJuIG5lZWRfZGlzYWJsZTsKLX0KLQotc3RhdGljIHZvaWQKLWludGVsX3RlYXJkb3duX21jaGJhcihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBib29sIGRpc2FibGUpCi17Ci0JZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IG1jaGJhcl9yZWcgPSBJU19JOTY1RyhkZXYpID8gTUNIQkFSX0k5NjUgOiBNQ0hCQVJfSTkxNTsKLQl1MzIgdGVtcDsKLQotCWlmIChkaXNhYmxlKSB7Ci0JCWlmIChJU19JOTE1RyhkZXYpIHx8IElTX0k5MTVHTShkZXYpKSB7Ci0JCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIERFVkVOX1JFRywgJnRlbXApOwotCQkJdGVtcCAmPSB+REVWRU5fTUNIQkFSX0VOOwotCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgREVWRU5fUkVHLCB0ZW1wKTsKLQkJfSBlbHNlIHsKLQkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXZfcHJpdi0+YnJpZGdlX2RldiwgbWNoYmFyX3JlZywgJnRlbXApOwotCQkJdGVtcCAmPSB+MTsKLQkJCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2X3ByaXYtPmJyaWRnZV9kZXYsIG1jaGJhcl9yZWcsIHRlbXApOwotCQl9Ci0JfQotCi0JaWYgKGRldl9wcml2LT5tY2hfcmVzLnN0YXJ0KQotCQlyZWxlYXNlX3Jlc291cmNlKCZkZXZfcHJpdi0+bWNoX3Jlcyk7Ci19Ci0KIC8qKgogICogRGV0ZWN0cyBiaXQgNiBzd2l6emxpbmcgb2YgYWRkcmVzcyBsb29rdXAgYmV0d2VlbiBJR0QgYWNjZXNzIGFuZCBDUFUKICAqIGFjY2VzcyB0aHJvdWdoIG1haW4gbWVtb3J5LgpAQCAtMjA3LDkgKzkxLDggQEAKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1aW50MzJfdCBzd2l6emxlX3ggPSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTjsKIAl1aW50MzJfdCBzd2l6emxlX3kgPSBJOTE1X0JJVF82X1NXSVpaTEVfVU5LTk9XTjsKLQlib29sIG5lZWRfZGlzYWJsZTsKIAotCWlmIChJU19JUk9OTEFLRShkZXYpKSB7CisJaWYgKElTX0lST05MQUtFKGRldikgfHwgSVNfR0VONihkZXYpKSB7CiAJCS8qIE9uIElyb25sYWtlIHdoYXRldmVyIERSQU0gY29uZmlnLCBHUFUgYWx3YXlzIGRvCiAJCSAqIHNhbWUgc3dpenpsaW5nIHNldHVwLgogCQkgKi8KQEAgLTIyNCw5ICsxMDcsNiBAQAogCX0gZWxzZSBpZiAoSVNfTU9CSUxFKGRldikpIHsKIAkJdWludDMyX3QgZGNjOwogCi0JCS8qIFRyeSB0byBtYWtlIHN1cmUgTUNIQkFSIGlzIGVuYWJsZWQgYmVmb3JlIHBva2luZyBhdCBpdCAqLwotCQluZWVkX2Rpc2FibGUgPSBpbnRlbF9zZXR1cF9tY2hiYXIoZGV2KTsKLQogCQkvKiBPbiBtb2JpbGUgOXh4IGNoaXBzZXRzLCBjaGFubmVsIGludGVybGVhdmUgYnkgdGhlIENQVSBpcwogCQkgKiBkZXRlcm1pbmVkIGJ5IERDQy4gIEZvciBzaW5nbGUtY2hhbm5lbCwgbmVpdGhlciB0aGUgQ1BVCiAJCSAqIG5vciB0aGUgR1BVIGRvIHN3aXp6bGluZy4gIEZvciBkdWFsIGNoYW5uZWwgaW50ZXJsZWF2ZWQsCkBAIC0yNjYsOCArMTQ2LDYgQEAKIAkJCXN3aXp6bGVfeCA9IEk5MTVfQklUXzZfU1dJWlpMRV9VTktOT1dOOwogCQkJc3dpenpsZV95ID0gSTkxNV9CSVRfNl9TV0laWkxFX1VOS05PV047CiAJCX0KLQotCQlpbnRlbF90ZWFyZG93bl9tY2hiYXIoZGV2LCBuZWVkX2Rpc2FibGUpOwogCX0gZWxzZSB7CiAJCS8qIFRoZSA5NjUsIEczMywgYW5kIG5ld2VyLCBoYXZlIGEgdmVyeSBmbGV4aWJsZSBtZW1vcnkKIAkJICogY29uZmlndXJhdGlvbi4gIEl0IHdpbGwgZW5hYmxlIGR1YWwtY2hhbm5lbCBtb2RlCkBAIC0zMDIsMzkgKzE4MCw2IEBACiAJZGV2X3ByaXYtPm1tLmJpdF82X3N3aXp6bGVfeSA9IHN3aXp6bGVfeTsKIH0KIAotCi0vKioKLSAqIFJldHVybnMgd2hldGhlciBhbiBvYmplY3QgaXMgY3VycmVudGx5IGZlbmNlYWJsZS4gIElmIG5vdCwgaXQgbWF5IG5lZWQKLSAqIHRvIGJlIHVuYm91bmQgYW5kIGhhdmUgaXRzIHBpdGNoIGFkanVzdGVkLgotICovCi1ib29sCi1pOTE1X29ial9mZW5jZWFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCi17Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2ID0gb2JqLT5kcml2ZXJfcHJpdmF0ZTsKLQotCWlmIChJU19JOTY1RyhkZXYpKSB7Ci0JCS8qIFRoZSA5NjUgY2FuIGhhdmUgZmVuY2VzIGF0IGFueSBwYWdlIGJvdW5kYXJ5LiAqLwotCQlpZiAob2JqLT5zaXplICYgNDA5NSkKLQkJCXJldHVybiBmYWxzZTsKLQkJcmV0dXJuIHRydWU7Ci0JfSBlbHNlIGlmIChJU19JOVhYKGRldikpIHsKLQkJaWYgKG9ial9wcml2LT5ndHRfb2Zmc2V0ICYgfkk5MTVfRkVOQ0VfU1RBUlRfTUFTSykKLQkJCXJldHVybiBmYWxzZTsKLQl9IGVsc2UgewotCQlpZiAob2JqX3ByaXYtPmd0dF9vZmZzZXQgJiB+STgzMF9GRU5DRV9TVEFSVF9NQVNLKQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCS8qIFBvd2VyIG9mIHR3byBzaXplZC4uLiAqLwotCWlmIChvYmotPnNpemUgJiAob2JqLT5zaXplIC0gMSkpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qIE9iamVjdHMgbXVzdCBiZSBzaXplIGFsaWduZWQgYXMgd2VsbCAqLwotCWlmIChvYmpfcHJpdi0+Z3R0X29mZnNldCAmIChvYmotPnNpemUgLSAxKSkKLQkJcmV0dXJuIGZhbHNlOwotCXJldHVybiB0cnVlOwotfQotCiAvKiBDaGVjayBwaXRjaCBjb25zdHJpYW50cyBmb3IgYWxsIGNoaXBzICYgdGlsaW5nIGZvcm1hdHMgKi8KIGJvb2wKIGk5MTVfdGlsaW5nX29rKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBzdHJpZGUsIGludCBzaXplLCBpbnQgdGlsaW5nX21vZGUpCkBAIC0zOTEsNyArMjM2LDcgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wKK2Jvb2wKIGk5MTVfZ2VtX29iamVjdF9mZW5jZV9vZmZzZXRfb2soc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmosIGludCB0aWxpbmdfbW9kZSkKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5kZXY7CkBAIC00MzgsOSArMjgzLDcgQEAKIAlvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CiAKIAlpZiAoIWk5MTVfdGlsaW5nX29rKGRldiwgYXJncy0+c3RyaWRlLCBvYmotPnNpemUsIGFyZ3MtPnRpbGluZ19tb2RlKSkgewotCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQ5MywxMiArMzM2LDYgQEAKIAkJCWdvdG8gZXJyOwogCQl9CiAKLQkJLyogSWYgd2UndmUgY2hhbmdlZCB0aWxpbmcsIEdUVC1tYXBwaW5ncyBvZiB0aGUgb2JqZWN0Ci0JCSAqIG5lZWQgdG8gcmUtZmF1bHQgdG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgZmVuY2UgcmVnaXN0ZXIKLQkJICogc2V0dXAgaXMgaW4gcGxhY2UuCi0JCSAqLwotCQlpOTE1X2dlbV9yZWxlYXNlX21tYXAob2JqKTsKLQogCQlvYmpfcHJpdi0+dGlsaW5nX21vZGUgPSBhcmdzLT50aWxpbmdfbW9kZTsKIAkJb2JqX3ByaXYtPnN0cmlkZSA9IGFyZ3MtPnN0cmlkZTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYwppbmRleCBhMTdkNmJkZi4uNTM4ODM1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2lycS5jCkBAIC0xNjYsNyArMTY2LDcgQEAKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwogCi0JaWYgKElTX0lST05MQUtFKGRldikpCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJaXJvbmxha2VfZW5hYmxlX2Rpc3BsYXlfaXJxKGRldl9wcml2LCBERV9HU0UpOwogCWVsc2UKIAkJaTkxNV9lbmFibGVfcGlwZXN0YXQoZGV2X3ByaXYsIDEsCkBAIC0yNjksNiArMjY5LDU3IEBACiAJZHJtX3N5c2ZzX2hvdHBsdWdfZXZlbnQoZGV2KTsKIH0KIAorc3RhdGljIHZvaWQgaTkxNV9oYW5kbGVfcnBzX2NoYW5nZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBidXN5X3VwLCBidXN5X2Rvd24sIG1heF9hdmcsIG1pbl9hdmc7CisJdTE2IHJndnN3Y3RsOworCXU4IG5ld19kZWxheSA9IGRldl9wcml2LT5jdXJfZGVsYXk7CisKKwlJOTE1X1dSSVRFKE1FTUlOVFJTVFMsIEk5MTVfUkVBRChNRU1JTlRSU1RTKSAmIH5NRU1JTlRfRVZBTF9DSEcpOworCWJ1c3lfdXAgPSBJOTE1X1JFQUQoUkNQUkVWQlNZVFVQQVZHKTsKKwlidXN5X2Rvd24gPSBJOTE1X1JFQUQoUkNQUkVWQlNZVEROQVZHKTsKKwltYXhfYXZnID0gSTkxNV9SRUFEKFJDQk1BWEFWRyk7CisJbWluX2F2ZyA9IEk5MTVfUkVBRChSQ0JNSU5BVkcpOworCisJLyogSGFuZGxlIFJDUyBjaGFuZ2UgcmVxdWVzdCBmcm9tIGh3ICovCisJaWYgKGJ1c3lfdXAgPiBtYXhfYXZnKSB7CisJCWlmIChkZXZfcHJpdi0+Y3VyX2RlbGF5ICE9IGRldl9wcml2LT5tYXhfZGVsYXkpCisJCQluZXdfZGVsYXkgPSBkZXZfcHJpdi0+Y3VyX2RlbGF5IC0gMTsKKwkJaWYgKG5ld19kZWxheSA8IGRldl9wcml2LT5tYXhfZGVsYXkpCisJCQluZXdfZGVsYXkgPSBkZXZfcHJpdi0+bWF4X2RlbGF5OworCX0gZWxzZSBpZiAoYnVzeV9kb3duIDwgbWluX2F2ZykgeworCQlpZiAoZGV2X3ByaXYtPmN1cl9kZWxheSAhPSBkZXZfcHJpdi0+bWluX2RlbGF5KQorCQkJbmV3X2RlbGF5ID0gZGV2X3ByaXYtPmN1cl9kZWxheSArIDE7CisJCWlmIChuZXdfZGVsYXkgPiBkZXZfcHJpdi0+bWluX2RlbGF5KQorCQkJbmV3X2RlbGF5ID0gZGV2X3ByaXYtPm1pbl9kZWxheTsKKwl9CisKKwlEUk1fREVCVUcoInJwcyBjaGFuZ2UgcmVxdWVzdGVkOiAlZCAtPiAlZFxuIiwKKwkJICBkZXZfcHJpdi0+Y3VyX2RlbGF5LCBuZXdfZGVsYXkpOworCisJcmd2c3djdGwgPSBJOTE1X1JFQUQoTUVNU1dDVEwpOworCWlmIChyZ3Zzd2N0bCAmIE1FTUNUTF9DTURfU1RTKSB7CisJCURSTV9FUlJPUigiZ3B1IGJ1c3ksIFJDUyBjaGFuZ2UgcmVqZWN0ZWRcbiIpOworCQlyZXR1cm47IC8qIHN0aWxsIGJ1c3kgd2l0aCBhbm90aGVyIGNvbW1hbmQgKi8KKwl9CisKKwkvKiBQcm9ncmFtIHRoZSBuZXcgc3RhdGUgKi8KKwlyZ3Zzd2N0bCA9IChNRU1DVExfQ01EX0NIRlJFUSA8PCBNRU1DVExfQ01EX1NISUZUKSB8CisJCShuZXdfZGVsYXkgPDwgTUVNQ1RMX0ZSRVFfU0hJRlQpIHwgTUVNQ1RMX1NGQ0FWTTsKKwlJOTE1X1dSSVRFKE1FTVNXQ1RMLCByZ3Zzd2N0bCk7CisJUE9TVElOR19SRUFEKE1FTVNXQ1RMKTsKKworCXJndnN3Y3RsIHw9IE1FTUNUTF9DTURfU1RTOworCUk5MTVfV1JJVEUoTUVNU1dDVEwsIHJndnN3Y3RsKTsKKworCWRldl9wcml2LT5jdXJfZGVsYXkgPSBuZXdfZGVsYXk7CisKKwlEUk1fREVCVUcoInJwcyBjaGFuZ2VkXG4iKTsKKworCXJldHVybjsKK30KKwogaXJxcmV0dXJuX3QgaXJvbmxha2VfaXJxX2hhbmRsZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV9pOTE1X3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMzMxLDYgKzM4MiwxMSBAQAogCQlxdWV1ZV93b3JrKGRldl9wcml2LT53cSwgJmRldl9wcml2LT5ob3RwbHVnX3dvcmspOwogCX0KIAorCWlmIChkZV9paXIgJiBERV9QQ1VfRVZFTlQpIHsKKwkJSTkxNV9XUklURShNRU1JTlRSU1RTLCBJOTE1X1JFQUQoTUVNSU5UUlNUUykpOworCQlpOTE1X2hhbmRsZV9ycHNfY2hhbmdlKGRldik7CisJfQorCiAJLyogc2hvdWxkIGNsZWFyIFBDSCBob3RwbHVnIGV2ZW50IGJlZm9yZSBjbGVhciBDUFUgaXJxICovCiAJSTkxNV9XUklURShTREVJSVIsIHBjaF9paXIpOwogCUk5MTVfV1JJVEUoR1RJSVIsIGd0X2lpcik7CkBAIC0zNzYsNiArNDMyLDEyMSBAQAogCX0KIH0KIAorc3RhdGljIHN0cnVjdCBkcm1faTkxNV9lcnJvcl9vYmplY3QgKgoraTkxNV9lcnJvcl9vYmplY3RfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRybV9nZW1fb2JqZWN0ICpzcmMpCit7CisJc3RydWN0IGRybV9pOTE1X2Vycm9yX29iamVjdCAqZHN0OworCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpzcmNfcHJpdjsKKwlpbnQgcGFnZSwgcGFnZV9jb3VudDsKKworCWlmIChzcmMgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlzcmNfcHJpdiA9IHNyYy0+ZHJpdmVyX3ByaXZhdGU7CisJaWYgKHNyY19wcml2LT5wYWdlcyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXBhZ2VfY291bnQgPSBzcmMtPnNpemUgLyBQQUdFX1NJWkU7CisKKwlkc3QgPSBrbWFsbG9jKHNpemVvZigqZHN0KSArIHBhZ2VfY291bnQgKiBzaXplb2YgKHUzMiAqKSwgR0ZQX0FUT01JQyk7CisJaWYgKGRzdCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAocGFnZSA9IDA7IHBhZ2UgPCBwYWdlX2NvdW50OyBwYWdlKyspIHsKKwkJdm9pZCAqcywgKmQgPSBrbWFsbG9jKFBBR0VfU0laRSwgR0ZQX0FUT01JQyk7CisJCWlmIChkID09IE5VTEwpCisJCQlnb3RvIHVud2luZDsKKwkJcyA9IGttYXBfYXRvbWljKHNyY19wcml2LT5wYWdlc1twYWdlXSwgS01fVVNFUjApOworCQltZW1jcHkoZCwgcywgUEFHRV9TSVpFKTsKKwkJa3VubWFwX2F0b21pYyhzLCBLTV9VU0VSMCk7CisJCWRzdC0+cGFnZXNbcGFnZV0gPSBkOworCX0KKwlkc3QtPnBhZ2VfY291bnQgPSBwYWdlX2NvdW50OworCWRzdC0+Z3R0X29mZnNldCA9IHNyY19wcml2LT5ndHRfb2Zmc2V0OworCisJcmV0dXJuIGRzdDsKKwordW53aW5kOgorCXdoaWxlIChwYWdlLS0pCisJCWtmcmVlKGRzdC0+cGFnZXNbcGFnZV0pOworCWtmcmVlKGRzdCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X2Vycm9yX29iamVjdF9mcmVlKHN0cnVjdCBkcm1faTkxNV9lcnJvcl9vYmplY3QgKm9iaikKK3sKKwlpbnQgcGFnZTsKKworCWlmIChvYmogPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm9yIChwYWdlID0gMDsgcGFnZSA8IG9iai0+cGFnZV9jb3VudDsgcGFnZSsrKQorCQlrZnJlZShvYmotPnBhZ2VzW3BhZ2VdKTsKKworCWtmcmVlKG9iaik7Cit9CisKK3N0YXRpYyB2b2lkCitpOTE1X2Vycm9yX3N0YXRlX2ZyZWUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJICAgICAgc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlICplcnJvcikKK3sKKwlpOTE1X2Vycm9yX29iamVjdF9mcmVlKGVycm9yLT5iYXRjaGJ1ZmZlclswXSk7CisJaTkxNV9lcnJvcl9vYmplY3RfZnJlZShlcnJvci0+YmF0Y2hidWZmZXJbMV0pOworCWk5MTVfZXJyb3Jfb2JqZWN0X2ZyZWUoZXJyb3ItPnJpbmdidWZmZXIpOworCWtmcmVlKGVycm9yLT5hY3RpdmVfYm8pOworCWtmcmVlKGVycm9yKTsKK30KKworc3RhdGljIHUzMgoraTkxNV9nZXRfYmJhZGRyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiAqcmluZykKK3sKKwl1MzIgY21kOworCisJaWYgKElTX0k4MzAoZGV2KSB8fCBJU184NDVHKGRldikpCisJCWNtZCA9IE1JX0JBVENIX0JVRkZFUjsKKwllbHNlIGlmIChJU19JOTY1RyhkZXYpKQorCQljbWQgPSAoTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgKDIgPDwgNikgfAorCQkgICAgICAgTUlfQkFUQ0hfTk9OX1NFQ1VSRV9JOTY1KTsKKwllbHNlCisJCWNtZCA9IChNSV9CQVRDSF9CVUZGRVJfU1RBUlQgfCAoMiA8PCA2KSk7CisKKwlyZXR1cm4gcmluZ1swXSA9PSBjbWQgPyByaW5nWzFdIDogMDsKK30KKworc3RhdGljIHUzMgoraTkxNV9yaW5nYnVmZmVyX2xhc3RfYmF0Y2goc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMiBoZWFkLCBiYmFkZHI7CisJdTMyICpyaW5nOworCisJLyogTG9jYXRlIHRoZSBjdXJyZW50IHBvc2l0aW9uIGluIHRoZSByaW5nYnVmZmVyIGFuZCB3YWxrIGJhY2sKKwkgKiB0byBmaW5kIHRoZSBtb3N0IHJlY2VudGx5IGRpc3BhdGNoZWQgYmF0Y2ggYnVmZmVyLgorCSAqLworCWJiYWRkciA9IDA7CisJaGVhZCA9IEk5MTVfUkVBRChQUkIwX0hFQUQpICYgSEVBRF9BRERSOworCXJpbmcgPSAodTMyICopKGRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQgKyBoZWFkKTsKKworCXdoaWxlICgtLXJpbmcgPj0gKHUzMiAqKWRldl9wcml2LT5yaW5nLnZpcnR1YWxfc3RhcnQpIHsKKwkJYmJhZGRyID0gaTkxNV9nZXRfYmJhZGRyKGRldiwgcmluZyk7CisJCWlmIChiYmFkZHIpCisJCQlicmVhazsKKwl9CisKKwlpZiAoYmJhZGRyID09IDApIHsKKwkJcmluZyA9ICh1MzIgKikoZGV2X3ByaXYtPnJpbmcudmlydHVhbF9zdGFydCArIGRldl9wcml2LT5yaW5nLlNpemUpOworCQl3aGlsZSAoLS1yaW5nID49ICh1MzIgKilkZXZfcHJpdi0+cmluZy52aXJ0dWFsX3N0YXJ0KSB7CisJCQliYmFkZHIgPSBpOTE1X2dldF9iYmFkZHIoZGV2LCByaW5nKTsKKwkJCWlmIChiYmFkZHIpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gYmJhZGRyOworfQorCiAvKioKICAqIGk5MTVfY2FwdHVyZV9lcnJvcl9zdGF0ZSAtIGNhcHR1cmUgYW4gZXJyb3IgcmVjb3JkIGZvciBsYXRlciBhbmFseXNpcwogICogQGRldjogZHJtIGRldmljZQpAQCAtMzg4LDE5ICs1NTksMjYgQEAKIHN0YXRpYyB2b2lkIGk5MTVfY2FwdHVyZV9lcnJvcl9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9ial9wcml2OwogCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZSAqZXJyb3I7CisJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpiYXRjaGJ1ZmZlclsyXTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBiYmFkZHI7CisJaW50IGNvdW50OwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5lcnJvcl9sb2NrLCBmbGFncyk7Ci0JaWYgKGRldl9wcml2LT5maXJzdF9lcnJvcikKLQkJZ290byBvdXQ7CisJZXJyb3IgPSBkZXZfcHJpdi0+Zmlyc3RfZXJyb3I7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmVycm9yX2xvY2ssIGZsYWdzKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybjsKIAogCWVycm9yID0ga21hbGxvYyhzaXplb2YoKmVycm9yKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFlcnJvcikgewotCQlEUk1fREVCVUdfRFJJVkVSKCJvdXQgb3QgbWVtb3J5LCBub3QgY2FwdHVyaW5nIGVycm9yIHN0YXRlXG4iKTsKLQkJZ290byBvdXQ7CisJCURSTV9ERUJVR19EUklWRVIoIm91dCBvZiBtZW1vcnksIG5vdCBjYXB0dXJpbmcgZXJyb3Igc3RhdGVcbiIpOworCQlyZXR1cm47CiAJfQogCisJZXJyb3ItPnNlcW5vID0gaTkxNV9nZXRfZ2VtX3NlcW5vKGRldik7CiAJZXJyb3ItPmVpciA9IEk5MTVfUkVBRChFSVIpOwogCWVycm9yLT5wZ3RibF9lciA9IEk5MTVfUkVBRChQR1RCTF9FUik7CiAJZXJyb3ItPnBpcGVhc3RhdCA9IEk5MTVfUkVBRChQSVBFQVNUQVQpOwpAQCAtNDExLDYgKzU4OSw3IEBACiAJCWVycm9yLT5pcGVociA9IEk5MTVfUkVBRChJUEVIUik7CiAJCWVycm9yLT5pbnN0ZG9uZSA9IEk5MTVfUkVBRChJTlNURE9ORSk7CiAJCWVycm9yLT5hY3RoZCA9IEk5MTVfUkVBRChBQ1RIRCk7CisJCWVycm9yLT5iYmFkZHIgPSAwOwogCX0gZWxzZSB7CiAJCWVycm9yLT5pcGVpciA9IEk5MTVfUkVBRChJUEVJUl9JOTY1KTsKIAkJZXJyb3ItPmlwZWhyID0gSTkxNV9SRUFEKElQRUhSX0k5NjUpOwpAQCAtNDE4LDE0ICs1OTcsMTAxIEBACiAJCWVycm9yLT5pbnN0cHMgPSBJOTE1X1JFQUQoSU5TVFBTKTsKIAkJZXJyb3ItPmluc3Rkb25lMSA9IEk5MTVfUkVBRChJTlNURE9ORTEpOwogCQllcnJvci0+YWN0aGQgPSBJOTE1X1JFQUQoQUNUSERfSTk2NSk7CisJCWVycm9yLT5iYmFkZHIgPSBJOTE1X1JFQUQ2NChCQl9BRERSKTsKKwl9CisKKwliYmFkZHIgPSBpOTE1X3JpbmdidWZmZXJfbGFzdF9iYXRjaChkZXYpOworCisJLyogR3JhYiB0aGUgY3VycmVudCBiYXRjaGJ1ZmZlciwgbW9zdCBsaWtlbHkgdG8gaGF2ZSBjcmFzaGVkLiAqLworCWJhdGNoYnVmZmVyWzBdID0gTlVMTDsKKwliYXRjaGJ1ZmZlclsxXSA9IE5VTEw7CisJY291bnQgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmogPSBvYmpfcHJpdi0+b2JqOworCisJCWlmIChiYXRjaGJ1ZmZlclswXSA9PSBOVUxMICYmCisJCSAgICBiYmFkZHIgPj0gb2JqX3ByaXYtPmd0dF9vZmZzZXQgJiYKKwkJICAgIGJiYWRkciA8IG9ial9wcml2LT5ndHRfb2Zmc2V0ICsgb2JqLT5zaXplKQorCQkJYmF0Y2hidWZmZXJbMF0gPSBvYmo7CisKKwkJaWYgKGJhdGNoYnVmZmVyWzFdID09IE5VTEwgJiYKKwkJICAgIGVycm9yLT5hY3RoZCA+PSBvYmpfcHJpdi0+Z3R0X29mZnNldCAmJgorCQkgICAgZXJyb3ItPmFjdGhkIDwgb2JqX3ByaXYtPmd0dF9vZmZzZXQgKyBvYmotPnNpemUgJiYKKwkJICAgIGJhdGNoYnVmZmVyWzBdICE9IG9iaikKKwkJCWJhdGNoYnVmZmVyWzFdID0gb2JqOworCisJCWNvdW50Kys7CisJfQorCisJLyogV2UgbmVlZCB0byBjb3B5IHRoZXNlIHRvIGFuIGFub255bW91cyBidWZmZXIgYXMgdGhlIHNpbXBsZXN0CisJICogbWV0aG9kIHRvIGF2b2lkIGJlaW5nIG92ZXJ3cml0dGVuIGJ5IHVzZXJwYWNlLgorCSAqLworCWVycm9yLT5iYXRjaGJ1ZmZlclswXSA9IGk5MTVfZXJyb3Jfb2JqZWN0X2NyZWF0ZShkZXYsIGJhdGNoYnVmZmVyWzBdKTsKKwllcnJvci0+YmF0Y2hidWZmZXJbMV0gPSBpOTE1X2Vycm9yX29iamVjdF9jcmVhdGUoZGV2LCBiYXRjaGJ1ZmZlclsxXSk7CisKKwkvKiBSZWNvcmQgdGhlIHJpbmdidWZmZXIgKi8KKwllcnJvci0+cmluZ2J1ZmZlciA9IGk5MTVfZXJyb3Jfb2JqZWN0X2NyZWF0ZShkZXYsIGRldl9wcml2LT5yaW5nLnJpbmdfb2JqKTsKKworCS8qIFJlY29yZCBidWZmZXJzIG9uIHRoZSBhY3RpdmUgbGlzdC4gKi8KKwllcnJvci0+YWN0aXZlX2JvID0gTlVMTDsKKwllcnJvci0+YWN0aXZlX2JvX2NvdW50ID0gMDsKKworCWlmIChjb3VudCkKKwkJZXJyb3ItPmFjdGl2ZV9ibyA9IGttYWxsb2Moc2l6ZW9mKCplcnJvci0+YWN0aXZlX2JvKSpjb3VudCwKKwkJCQkJICAgR0ZQX0FUT01JQyk7CisKKwlpZiAoZXJyb3ItPmFjdGl2ZV9ibykgeworCQlpbnQgaSA9IDA7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqX3ByaXYsICZkZXZfcHJpdi0+bW0uYWN0aXZlX2xpc3QsIGxpc3QpIHsKKwkJCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqID0gb2JqX3ByaXYtPm9iajsKKworCQkJZXJyb3ItPmFjdGl2ZV9ib1tpXS5zaXplID0gb2JqLT5zaXplOworCQkJZXJyb3ItPmFjdGl2ZV9ib1tpXS5uYW1lID0gb2JqLT5uYW1lOworCQkJZXJyb3ItPmFjdGl2ZV9ib1tpXS5zZXFubyA9IG9ial9wcml2LT5sYXN0X3JlbmRlcmluZ19zZXFubzsKKwkJCWVycm9yLT5hY3RpdmVfYm9baV0uZ3R0X29mZnNldCA9IG9ial9wcml2LT5ndHRfb2Zmc2V0OworCQkJZXJyb3ItPmFjdGl2ZV9ib1tpXS5yZWFkX2RvbWFpbnMgPSBvYmotPnJlYWRfZG9tYWluczsKKwkJCWVycm9yLT5hY3RpdmVfYm9baV0ud3JpdGVfZG9tYWluID0gb2JqLT53cml0ZV9kb21haW47CisJCQllcnJvci0+YWN0aXZlX2JvW2ldLmZlbmNlX3JlZyA9IG9ial9wcml2LT5mZW5jZV9yZWc7CisJCQllcnJvci0+YWN0aXZlX2JvW2ldLnBpbm5lZCA9IDA7CisJCQlpZiAob2JqX3ByaXYtPnBpbl9jb3VudCA+IDApCisJCQkJZXJyb3ItPmFjdGl2ZV9ib1tpXS5waW5uZWQgPSAxOworCQkJaWYgKG9ial9wcml2LT51c2VyX3Bpbl9jb3VudCA+IDApCisJCQkJZXJyb3ItPmFjdGl2ZV9ib1tpXS5waW5uZWQgPSAtMTsKKwkJCWVycm9yLT5hY3RpdmVfYm9baV0udGlsaW5nID0gb2JqX3ByaXYtPnRpbGluZ19tb2RlOworCQkJZXJyb3ItPmFjdGl2ZV9ib1tpXS5kaXJ0eSA9IG9ial9wcml2LT5kaXJ0eTsKKwkJCWVycm9yLT5hY3RpdmVfYm9baV0ucHVyZ2VhYmxlID0gb2JqX3ByaXYtPm1hZHYgIT0gSTkxNV9NQURWX1dJTExORUVEOworCisJCQlpZiAoKytpID09IGNvdW50KQorCQkJCWJyZWFrOworCQl9CisJCWVycm9yLT5hY3RpdmVfYm9fY291bnQgPSBpOwogCX0KIAogCWRvX2dldHRpbWVvZmRheSgmZXJyb3ItPnRpbWUpOwogCi0JZGV2X3ByaXYtPmZpcnN0X2Vycm9yID0gZXJyb3I7Ci0KLW91dDoKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmVycm9yX2xvY2ssIGZsYWdzKTsKKwlpZiAoZGV2X3ByaXYtPmZpcnN0X2Vycm9yID09IE5VTEwpIHsKKwkJZGV2X3ByaXYtPmZpcnN0X2Vycm9yID0gZXJyb3I7CisJCWVycm9yID0gTlVMTDsKKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmVycm9yX2xvY2ssIGZsYWdzKTsKKworCWlmIChlcnJvcikKKwkJaTkxNV9lcnJvcl9zdGF0ZV9mcmVlKGRldiwgZXJyb3IpOworfQorCit2b2lkIGk5MTVfZGVzdHJveV9lcnJvcl9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlICplcnJvcjsKKworCXNwaW5fbG9jaygmZGV2X3ByaXYtPmVycm9yX2xvY2spOworCWVycm9yID0gZGV2X3ByaXYtPmZpcnN0X2Vycm9yOworCWRldl9wcml2LT5maXJzdF9lcnJvciA9IE5VTEw7CisJc3Bpbl91bmxvY2soJmRldl9wcml2LT5lcnJvcl9sb2NrKTsKKworCWlmIChlcnJvcikKKwkJaTkxNV9lcnJvcl9zdGF0ZV9mcmVlKGRldiwgZXJyb3IpOwogfQogCiAvKioKQEAgLTU3Niw3ICs4NDIsNyBAQAogCiAJYXRvbWljX2luYygmZGV2X3ByaXYtPmlycV9yZWNlaXZlZCk7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlyZXR1cm4gaXJvbmxha2VfaXJxX2hhbmRsZXIoZGV2KTsKIAogCWlpciA9IEk5MTVfUkVBRChJSVIpOwpAQCAtNzM3LDcgKzEwMDMsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51c2VyX2lycV9sb2NrLCBpcnFmbGFncyk7CiAJaWYgKGRldi0+aXJxX2VuYWJsZWQgJiYgKCsrZGV2X3ByaXYtPnVzZXJfaXJxX3JlZmNvdW50ID09IDEpKSB7Ci0JCWlmIChJU19JUk9OTEFLRShkZXYpKQorCQlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQkJaXJvbmxha2VfZW5hYmxlX2dyYXBoaWNzX2lycShkZXZfcHJpdiwgR1RfVVNFUl9JTlRFUlJVUFQpOwogCQllbHNlCiAJCQlpOTE1X2VuYWJsZV9pcnEoZGV2X3ByaXYsIEk5MTVfVVNFUl9JTlRFUlJVUFQpOwpAQCAtNzUzLDcgKzEwMTksNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZfcHJpdi0+dXNlcl9pcnFfbG9jaywgaXJxZmxhZ3MpOwogCUJVR19PTihkZXYtPmlycV9lbmFibGVkICYmIGRldl9wcml2LT51c2VyX2lycV9yZWZjb3VudCA8PSAwKTsKIAlpZiAoZGV2LT5pcnFfZW5hYmxlZCAmJiAoLS1kZXZfcHJpdi0+dXNlcl9pcnFfcmVmY291bnQgPT0gMCkpIHsKLQkJaWYgKElTX0lST05MQUtFKGRldikpCisJCWlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCQlpcm9ubGFrZV9kaXNhYmxlX2dyYXBoaWNzX2lycShkZXZfcHJpdiwgR1RfVVNFUl9JTlRFUlJVUFQpOwogCQllbHNlCiAJCQlpOTE1X2Rpc2FibGVfaXJxKGRldl9wcml2LCBJOTE1X1VTRVJfSU5URVJSVVBUKTsKQEAgLTg2MSw3ICsxMTI3LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPnVzZXJfaXJxX2xvY2ssIGlycWZsYWdzKTsKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlpcm9ubGFrZV9lbmFibGVfZGlzcGxheV9pcnEoZGV2X3ByaXYsIChwaXBlID09IDApID8gCiAJCQkJCSAgICBERV9QSVBFQV9WQkxBTks6IERFX1BJUEVCX1ZCTEFOSyk7CiAJZWxzZSBpZiAoSVNfSTk2NUcoZGV2KSkKQEAgLTg4Myw3ICsxMTQ5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGlycWZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT51c2VyX2lycV9sb2NrLCBpcnFmbGFncyk7Ci0JaWYgKElTX0lST05MQUtFKGRldikpCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJaXJvbmxha2VfZGlzYWJsZV9kaXNwbGF5X2lycShkZXZfcHJpdiwgKHBpcGUgPT0gMCkgPyAKIAkJCQkJICAgICBERV9QSVBFQV9WQkxBTks6IERFX1BJUEVCX1ZCTEFOSyk7CiAJZWxzZQpAQCAtODk3LDcgKzExNjMsNyBAQAogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlpZiAoIUlTX0lST05MQUtFKGRldikpCisJaWYgKCFIQVNfUENIX1NQTElUKGRldikpCiAJCW9wcmVnaW9uX2VuYWJsZV9hc2xlKGRldik7CiAJZGV2X3ByaXYtPmlycV9lbmFibGVkID0gMTsKIH0KQEAgLTk3Myw3ICsxMjM5LDExIEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZHJtX2RldmljZSAqKWRhdGE7CiAJZHJtX2k5MTVfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdWludDMyX3QgYWN0aGQ7Ci0gICAgICAgCisKKwkvKiBObyByZXNldCBzdXBwb3J0IG9uIHRoaXMgY2hpcCB5ZXQuICovCisJaWYgKElTX0dFTjYoZGV2KSkKKwkJcmV0dXJuOworCiAJaWYgKCFJU19JOTY1RyhkZXYpKQogCQlhY3RoZCA9IEk5MTVfUkVBRChBQ1RIRCk7CiAJZWxzZQpAQCAtMTA2NCw2ICsxMzM0LDEzIEBACiAJSTkxNV9XUklURShTREVJRVIsIGRldl9wcml2LT5wY2hfaXJxX2VuYWJsZV9yZWcpOwogCSh2b2lkKSBJOTE1X1JFQUQoU0RFSUVSKTsKIAorCWlmIChJU19JUk9OTEFLRV9NKGRldikpIHsKKwkJLyogQ2xlYXIgJiBlbmFibGUgUENVIGV2ZW50IGludGVycnVwdHMgKi8KKwkJSTkxNV9XUklURShERUlJUiwgREVfUENVX0VWRU5UKTsKKwkJSTkxNV9XUklURShERUlFUiwgSTkxNV9SRUFEKERFSUVSKSB8IERFX1BDVV9FVkVOVCk7CisJCWlyb25sYWtlX2VuYWJsZV9kaXNwbGF5X2lycShkZXZfcHJpdiwgREVfUENVX0VWRU5UKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA3Niw3ICsxMzUzLDcgQEAKIAlJTklUX1dPUksoJmRldl9wcml2LT5ob3RwbHVnX3dvcmssIGk5MTVfaG90cGx1Z193b3JrX2Z1bmMpOwogCUlOSVRfV09SSygmZGV2X3ByaXYtPmVycm9yX3dvcmssIGk5MTVfZXJyb3Jfd29ya19mdW5jKTsKIAotCWlmIChJU19JUk9OTEFLRShkZXYpKSB7CisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgewogCQlpcm9ubGFrZV9pcnFfcHJlaW5zdGFsbChkZXYpOwogCQlyZXR1cm47CiAJfQpAQCAtMTEwOCw3ICsxMzg1LDcgQEAKIAogCWRldl9wcml2LT52YmxhbmtfcGlwZSA9IERSTV9JOTE1X1ZCTEFOS19QSVBFX0EgfCBEUk1fSTkxNV9WQkxBTktfUElQRV9COwogCi0JaWYgKElTX0lST05MQUtFKGRldikpCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJcmV0dXJuIGlyb25sYWtlX2lycV9wb3N0aW5zdGFsbChkZXYpOwogCiAJLyogVW5tYXNrIHRoZSBpbnRlcnJ1cHRzIHRoYXQgd2UgYWx3YXlzIHdhbnQgb24uICovCkBAIC0xMTk2LDcgKzE0NzMsNyBAQAogCiAJZGV2X3ByaXYtPnZibGFua19waXBlID0gMDsKIAotCWlmIChJU19JUk9OTEFLRShkZXYpKSB7CisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgewogCQlpcm9ubGFrZV9pcnFfdW5pbnN0YWxsKGRldik7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZWcuaAppbmRleCBhYjFiZDJkLi4zZDU5ODYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVnLmgKQEAgLTUzLDYgKzUzLDI1IEBACiAjZGVmaW5lIElOVEVMX0dNQ0hfR01TX1NUT0xFTl8yMjRNCSgweGMgPDwgNCkKICNkZWZpbmUgSU5URUxfR01DSF9HTVNfU1RPTEVOXzM1Mk0JKDB4ZCA8PCA0KQogCisjZGVmaW5lIFNOQl9HTUNIX0NUUkwJMHg1MAorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOX01BU0sJMHhGOAorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOXzMyTQkJKDEgPDwgMykKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl82NE0JCSgyIDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fOTZNCQkoMyA8PCAzKQorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOXzEyOE0JKDQgPDwgMykKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl8xNjBNCSg1IDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fMTkyTQkoNiA8PCAzKQorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOXzIyNE0JKDcgPDwgMykKKyNkZWZpbmUgU05CX0dNQ0hfR01TX1NUT0xFTl8yNTZNCSg4IDw8IDMpCisjZGVmaW5lIFNOQl9HTUNIX0dNU19TVE9MRU5fMjg4TQkoOSA8PCAzKQorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOXzMyME0JKDB4YSA8PCAzKQorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOXzM1Mk0JKDB4YiA8PCAzKQorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOXzM4NE0JKDB4YyA8PCAzKQorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOXzQxNk0JKDB4ZCA8PCAzKQorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOXzQ0OE0JKDB4ZSA8PCAzKQorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOXzQ4ME0JKDB4ZiA8PCAzKQorI2RlZmluZSBTTkJfR01DSF9HTVNfU1RPTEVOXzUxMk0JKDB4MTAgPDwgMykKKwogLyogUENJIGNvbmZpZyBzcGFjZSAqLwogCiAjZGVmaW5lIEhQTExDQwkweGMwIC8qIDg1NSBvbmx5ICovCkBAIC02MSw2ICs4MCw3IEBACiAjZGVmaW5lICAgR0NfQ0xPQ0tfMTAwXzIwMAkJKDEgPDwgMCkKICNkZWZpbmUgICBHQ19DTE9DS18xMDBfMTMzCQkoMiA8PCAwKQogI2RlZmluZSAgIEdDX0NMT0NLXzE2Nl8yNTAJCSgzIDw8IDApCisjZGVmaW5lIEdDRkdDMgkweGRhCiAjZGVmaW5lIEdDRkdDCTB4ZjAgLyogOTE1KyBvbmx5ICovCiAjZGVmaW5lICAgR0NfTE9XX0ZSRVFVRU5DWV9FTkFCTEUJKDEgPDwgNykKICNkZWZpbmUgICBHQ19ESVNQTEFZX0NMT0NLXzE5MF8yMDBfTUhaCSgwIDw8IDQpCkBAIC0yMzQsNiArMjU0LDkgQEAKICNkZWZpbmUgICBJOTY1X0ZFTkNFX1JFR19WQUxJRAkJKDE8PDApCiAjZGVmaW5lICAgSTk2NV9GRU5DRV9NQVhfUElUQ0hfVkFMCTB4MDQwMAogCisjZGVmaW5lIEZFTkNFX1JFR19TQU5EWUJSSURHRV8wCQkweDEwMDAwMAorI2RlZmluZSAgIFNBTkRZQlJJREdFX0ZFTkNFX1BJVENIX1NISUZUCTMyCisKIC8qCiAgKiBJbnN0cnVjdGlvbiBhbmQgaW50ZXJydXB0IGNvbnRyb2wgcmVncwogICovCkBAIC0yNjUsNiArMjg4LDcgQEAKICNkZWZpbmUgSU5TVERPTkUxCTB4MDIwN2MgLyogOTY1KyBvbmx5ICovCiAjZGVmaW5lIEFDVEhEX0k5NjUJMHgwMjA3NAogI2RlZmluZSBIV1NfUEdBCQkweDAyMDgwCisjZGVmaW5lIEhXU19QR0FfR0VONgkweDA0MDgwCiAjZGVmaW5lIEhXU19BRERSRVNTX01BU0sJMHhmZmZmZjAwMAogI2RlZmluZSBIV1NfU1RBUlRfQUREUkVTU19TSElGVAk0CiAjZGVmaW5lIFBXUkNUWEEJCTB4MjA4OCAvKiA5NjVHTSsgb25seSAqLwpAQCAtMjgyLDcgKzMwNiw3IEBACiAjZGVmaW5lICAgSTkxNV9QSVBFX0NPTlRST0xfTk9USUZZX0lOVEVSUlVQVAkJKDE8PDE4KQogI2RlZmluZSAgIEk5MTVfRElTUExBWV9QT1JUX0lOVEVSUlVQVAkJCSgxPDwxNykKICNkZWZpbmUgICBJOTE1X1JFTkRFUl9DT01NQU5EX1BBUlNFUl9FUlJPUl9JTlRFUlJVUFQJKDE8PDE1KQotI2RlZmluZSAgIEk5MTVfR01DSF9USEVSTUFMX1NFTlNPUl9FVkVOVF9JTlRFUlJVUFQJKDE8PDE0KQorI2RlZmluZSAgIEk5MTVfR01DSF9USEVSTUFMX1NFTlNPUl9FVkVOVF9JTlRFUlJVUFQJKDE8PDE0KSAvKiBwLXN0YXRlICovCiAjZGVmaW5lICAgSTkxNV9IV0JfT09NX0lOVEVSUlVQVAkJCSgxPDwxMykKICNkZWZpbmUgICBJOTE1X1NZTkNfU1RBVFVTX0lOVEVSUlVQVAkJCSgxPDwxMikKICNkZWZpbmUgICBJOTE1X0RJU1BMQVlfUExBTkVfQV9GTElQX1BFTkRJTkdfSU5URVJSVVBUCSgxPDwxMSkKQEAgLTMwNiwxMSArMzMwLDE0IEBACiAjZGVmaW5lICAgSTkxNV9FUlJPUl9NRU1PUllfUkVGUkVTSAkJCSgxPDwxKQogI2RlZmluZSAgIEk5MTVfRVJST1JfSU5TVFJVQ1RJT04JCQkoMTw8MCkKICNkZWZpbmUgSU5TVFBNCSAgICAgICAgMHgwMjBjMAorI2RlZmluZSAgIElOU1RQTV9TRUxGX0VOICgxPDwxMikgLyogOTE1R00gb25seSAqLwogI2RlZmluZSBBQ1RIRAkgICAgICAgIDB4MDIwYzgKICNkZWZpbmUgRldfQkxDCQkweDAyMGQ4CiAjZGVmaW5lIEZXX0JMQzIJIAkweDAyMGRjCiAjZGVmaW5lIEZXX0JMQ19TRUxGCTB4MDIwZTAgLyogOTE1KyBvbmx5ICovCi0jZGVmaW5lICAgRldfQkxDX1NFTEZfRU4gKDE8PDE1KQorI2RlZmluZSAgIEZXX0JMQ19TRUxGX0VOX01BU0sgICAgICAoMTw8MzEpCisjZGVmaW5lICAgRldfQkxDX1NFTEZfRklGT19NQVNLICAgICgxPDwxNikgLyogOTQ1IG9ubHkgKi8KKyNkZWZpbmUgICBGV19CTENfU0VMRl9FTiAgICAgICAgICAgKDE8PDE1KSAvKiA5NDUgb25seSAqLwogI2RlZmluZSBNTV9CVVJTVF9MRU5HVEggICAgIDB4MDA3MDAwMDAKICNkZWZpbmUgTU1fRklGT19XQVRFUk1BUksgICAweDAwMDFGMDAwCiAjZGVmaW5lIExNX0JVUlNUX0xFTkdUSCAgICAgMHgwMDAwMDcwMApAQCAtMzI0LDYgKzM1MSw3IEBACiAjZGVmaW5lICAgQ00wX0NPTE9SX0VWSUNUX0RJU0FCTEUgKDE8PDMpCiAjZGVmaW5lICAgQ00wX0RFUFRIX1dSSVRFX0RJU0FCTEUgKDE8PDEpCiAjZGVmaW5lICAgQ00wX1JDX09QX0ZMVVNIX0RJU0FCTEUgKDE8PDApCisjZGVmaW5lIEJCX0FERFIJCTB4MDIxNDAgLyogOCBieXRlcyAqLwogI2RlZmluZSBHRlhfRkxTSF9DTlRMCTB4MDIxNzAgLyogOTE1KyBvbmx5ICovCiAKIApAQCAtNzg0LDEwICs4MTIsMTQ0IEBACiAjZGVmaW5lIENMS0NGR19NRU1fODAwCQkJCQkoMyA8PCA0KQogI2RlZmluZSBDTEtDRkdfTUVNX01BU0sJCQkJCSg3IDw8IDQpCiAKLS8qKiBHTTk2NSBHTTQ1IHJlbmRlciBzdGFuZGJ5IHJlZ2lzdGVyICovCi0jZGVmaW5lIE1DSEJBUl9SRU5ERVJfU1RBTkRCWQkweDExMUI4CisjZGVmaW5lIENSU1RBTkRWSUQJCTB4MTExMDAKKyNkZWZpbmUgUFhWRlJFUV9CQVNFCQkweDExMTEwIC8qIFBbMC0xNV1WSURGUkVRICgweDExMTRjKSAoSXJvbmxha2UpICovCisjZGVmaW5lICAgUFhWRlJFUV9QWF9NQVNLCTB4N2YwMDAwMDAKKyNkZWZpbmUgICBQWFZGUkVRX1BYX1NISUZUCTI0CisjZGVmaW5lIFZJREZSRVFfQkFTRQkJMHgxMTExMAorI2RlZmluZSBWSURGUkVRMQkJMHgxMTExMCAvKiBWSURGUkVRMS00ICgweDExMTFjKSAoQ2FudGlnYSkgKi8KKyNkZWZpbmUgVklERlJFUTIJCTB4MTExMTQKKyNkZWZpbmUgVklERlJFUTMJCTB4MTExMTgKKyNkZWZpbmUgVklERlJFUTQJCTB4MTExMWMKKyNkZWZpbmUgICBWSURGUkVRX1AwX01BU0sJMHgxZjAwMDAwMAorI2RlZmluZSAgIFZJREZSRVFfUDBfU0hJRlQJMjQKKyNkZWZpbmUgICBWSURGUkVRX1AwX0NTQ0xLX01BU0sJMHgwMGYwMDAwMAorI2RlZmluZSAgIFZJREZSRVFfUDBfQ1NDTEtfU0hJRlQgMjAKKyNkZWZpbmUgICBWSURGUkVRX1AwX0NSQ0xLX01BU0sJMHgwMDBmMDAwMAorI2RlZmluZSAgIFZJREZSRVFfUDBfQ1JDTEtfU0hJRlQgMTYKKyNkZWZpbmUgICBWSURGUkVRX1AxX01BU0sJMHgwMDAwMWYwMAorI2RlZmluZSAgIFZJREZSRVFfUDFfU0hJRlQJOAorI2RlZmluZSAgIFZJREZSRVFfUDFfQ1NDTEtfTUFTSwkweDAwMDAwMGYwCisjZGVmaW5lICAgVklERlJFUV9QMV9DU0NMS19TSElGVCA0CisjZGVmaW5lICAgVklERlJFUV9QMV9DUkNMS19NQVNLCTB4MDAwMDAwMGYKKyNkZWZpbmUgSU5UVE9FWFRfQkFTRV9JTEsJMHgxMTMwMAorI2RlZmluZSBJTlRUT0VYVF9CQVNFCQkweDExMTIwIC8qIElOVFRPRVhUMS04ICgweDExMTNjKSAqLworI2RlZmluZSAgIElOVFRPRVhUX01BUDNfU0hJRlQJMjQKKyNkZWZpbmUgICBJTlRUT0VYVF9NQVAzX01BU0sJKDB4MWYgPDwgSU5UVE9FWFRfTUFQM19TSElGVCkKKyNkZWZpbmUgICBJTlRUT0VYVF9NQVAyX1NISUZUCTE2CisjZGVmaW5lICAgSU5UVE9FWFRfTUFQMl9NQVNLCSgweDFmIDw8IElOVFRPRVhUX01BUDJfU0hJRlQpCisjZGVmaW5lICAgSU5UVE9FWFRfTUFQMV9TSElGVAk4CisjZGVmaW5lICAgSU5UVE9FWFRfTUFQMV9NQVNLCSgweDFmIDw8IElOVFRPRVhUX01BUDFfU0hJRlQpCisjZGVmaW5lICAgSU5UVE9FWFRfTUFQMF9TSElGVAkwCisjZGVmaW5lICAgSU5UVE9FWFRfTUFQMF9NQVNLCSgweDFmIDw8IElOVFRPRVhUX01BUDBfU0hJRlQpCisjZGVmaW5lIE1FTVNXQ1RMCQkweDExMTcwIC8qIElyb25sYWtlIG9ubHkgKi8KKyNkZWZpbmUgICBNRU1DVExfQ01EX01BU0sJMHhlMDAwCisjZGVmaW5lICAgTUVNQ1RMX0NNRF9TSElGVAkxMworI2RlZmluZSAgIE1FTUNUTF9DTURfUkNMS19PRkYJMAorI2RlZmluZSAgIE1FTUNUTF9DTURfUkNMS19PTgkxCisjZGVmaW5lICAgTUVNQ1RMX0NNRF9DSEZSRVEJMgorI2RlZmluZSAgIE1FTUNUTF9DTURfQ0hWSUQJMworI2RlZmluZSAgIE1FTUNUTF9DTURfVk1NT0ZGCTQKKyNkZWZpbmUgICBNRU1DVExfQ01EX1ZNTU9OCTUKKyNkZWZpbmUgICBNRU1DVExfQ01EX1NUUwkoMTw8MTIpIC8qIHdyaXRlIDEgdHJpZ2dlcnMgY29tbWFuZCwgY2xlYXJzCisJCQkJCSAgIHdoZW4gY29tbWFuZCBjb21wbGV0ZSAqLworI2RlZmluZSAgIE1FTUNUTF9GUkVRX01BU0sJMHgwZjAwIC8qIGppdHRlciwgZnJvbSAwLTE1ICovCisjZGVmaW5lICAgTUVNQ1RMX0ZSRVFfU0hJRlQJOAorI2RlZmluZSAgIE1FTUNUTF9TRkNBVk0JCSgxPDw3KQorI2RlZmluZSAgIE1FTUNUTF9UR1RfVklEX01BU0sJMHgwMDdmCisjZGVmaW5lIE1FTUlIWVNUCQkweDExMTdjCisjZGVmaW5lIE1FTUlOVFJFTgkJMHgxMTE4MCAvKiAxNiBiaXRzICovCisjZGVmaW5lICAgTUVNSU5UX1JTRVhJVF9FTgkoMTw8OCkKKyNkZWZpbmUgICBNRU1JTlRfQ1hfU1VQUl9FTgkoMTw8NykKKyNkZWZpbmUgICBNRU1JTlRfQ09OVF9CVVNZX0VOCSgxPDw2KQorI2RlZmluZSAgIE1FTUlOVF9BVkdfQlVTWV9FTgkoMTw8NSkKKyNkZWZpbmUgICBNRU1JTlRfRVZBTF9DSEdfRU4JKDE8PDQpCisjZGVmaW5lICAgTUVNSU5UX01PTl9JRExFX0VOCSgxPDwzKQorI2RlZmluZSAgIE1FTUlOVF9VUF9FVkFMX0VOCSgxPDwyKQorI2RlZmluZSAgIE1FTUlOVF9ET1dOX0VWQUxfRU4JKDE8PDEpCisjZGVmaW5lICAgTUVNSU5UX1NXX0NNRF9FTgkoMTw8MCkKKyNkZWZpbmUgTUVNSU5UUlNUUgkJMHgxMTE4MiAvKiAxNiBiaXRzICovCisjZGVmaW5lICAgTUVNX1JTRVhJVF9NQVNLCTB4YzAwMAorI2RlZmluZSAgIE1FTV9SU0VYSVRfU0hJRlQJMTQKKyNkZWZpbmUgICBNRU1fQ09OVF9CVVNZX01BU0sJMHgzMDAwCisjZGVmaW5lICAgTUVNX0NPTlRfQlVTWV9TSElGVAkxMgorI2RlZmluZSAgIE1FTV9BVkdfQlVTWV9NQVNLCTB4MGMwMAorI2RlZmluZSAgIE1FTV9BVkdfQlVTWV9TSElGVAkxMAorI2RlZmluZSAgIE1FTV9FVkFMX0NIR19NQVNLCTB4MDMwMAorI2RlZmluZSAgIE1FTV9FVkFMX0JVU1lfU0hJRlQJOAorI2RlZmluZSAgIE1FTV9NT05fSURMRV9NQVNLCTB4MDBjMAorI2RlZmluZSAgIE1FTV9NT05fSURMRV9TSElGVAk2CisjZGVmaW5lICAgTUVNX1VQX0VWQUxfTUFTSwkweDAwMzAKKyNkZWZpbmUgICBNRU1fVVBfRVZBTF9TSElGVAk0CisjZGVmaW5lICAgTUVNX0RPV05fRVZBTF9NQVNLCTB4MDAwYworI2RlZmluZSAgIE1FTV9ET1dOX0VWQUxfU0hJRlQJMgorI2RlZmluZSAgIE1FTV9TV19DTURfTUFTSwkweDAwMDMKKyNkZWZpbmUgICBNRU1fSU5UX1NURUVSX0dGWAkwCisjZGVmaW5lICAgTUVNX0lOVF9TVEVFUl9DTVIJMQorI2RlZmluZSAgIE1FTV9JTlRfU1RFRVJfU01JCTIKKyNkZWZpbmUgICBNRU1fSU5UX1NURUVSX1NDSQkzCisjZGVmaW5lIE1FTUlOVFJTVFMJCTB4MTExODQKKyNkZWZpbmUgICBNRU1JTlRfUlNFWElUCQkoMTw8NykKKyNkZWZpbmUgICBNRU1JTlRfQ09OVF9CVVNZCSgxPDw2KQorI2RlZmluZSAgIE1FTUlOVF9BVkdfQlVTWQkoMTw8NSkKKyNkZWZpbmUgICBNRU1JTlRfRVZBTF9DSEcJKDE8PDQpCisjZGVmaW5lICAgTUVNSU5UX01PTl9JRExFCSgxPDwzKQorI2RlZmluZSAgIE1FTUlOVF9VUF9FVkFMCSgxPDwyKQorI2RlZmluZSAgIE1FTUlOVF9ET1dOX0VWQUwJKDE8PDEpCisjZGVmaW5lICAgTUVNSU5UX1NXX0NNRAkJKDE8PDApCisjZGVmaW5lIE1FTU1PREVDVEwJCTB4MTExOTAKKyNkZWZpbmUgICBNRU1NT0RFX0JPT1NUX0VOCSgxPDwzMSkKKyNkZWZpbmUgICBNRU1NT0RFX0JPT1NUX0ZSRVFfTUFTSyAweDBmMDAwMDAwIC8qIGppdHRlciBmb3IgYm9vc3QsIDAtMTUgKi8KKyNkZWZpbmUgICBNRU1NT0RFX0JPT1NUX0ZSRVFfU0hJRlQgMjQKKyNkZWZpbmUgICBNRU1NT0RFX0lETEVfTU9ERV9NQVNLIDB4MDAwMzAwMDAKKyNkZWZpbmUgICBNRU1NT0RFX0lETEVfTU9ERV9TSElGVCAxNgorI2RlZmluZSAgIE1FTU1PREVfSURMRV9NT0RFX0VWQUwgMAorI2RlZmluZSAgIE1FTU1PREVfSURMRV9NT0RFX0NPTlQgMQorI2RlZmluZSAgIE1FTU1PREVfSFdJRExFX0VOCSgxPDwxNSkKKyNkZWZpbmUgICBNRU1NT0RFX1NXTU9ERV9FTgkoMTw8MTQpCisjZGVmaW5lICAgTUVNTU9ERV9SQ0xLX0dBVEUJKDE8PDEzKQorI2RlZmluZSAgIE1FTU1PREVfSFdfVVBEQVRFCSgxPDwxMikKKyNkZWZpbmUgICBNRU1NT0RFX0ZTVEFSVF9NQVNLCTB4MDAwMDBmMDAgLyogc3RhcnRpbmcgaml0dGVyLCAwLTE1ICovCisjZGVmaW5lICAgTUVNTU9ERV9GU1RBUlRfU0hJRlQJOAorI2RlZmluZSAgIE1FTU1PREVfRk1BWF9NQVNLCTB4MDAwMDAwZjAgLyogbWF4IGppdHRlciwgMC0xNSAqLworI2RlZmluZSAgIE1FTU1PREVfRk1BWF9TSElGVAk0CisjZGVmaW5lICAgTUVNTU9ERV9GTUlOX01BU0sJMHgwMDAwMDAwZiAvKiBtaW4gaml0dGVyLCAwLTE1ICovCisjZGVmaW5lIFJDQk1BWEFWRwkJMHgxMTE5YworI2RlZmluZSBNRU1TV0NUTDIJCTB4MTExOWUgLyogQ2FudGlnYSBvbmx5ICovCisjZGVmaW5lICAgU1dNRU1DTURfUkVOREVSX09GRgkoMCA8PCAxMykKKyNkZWZpbmUgICBTV01FTUNNRF9SRU5ERVJfT04JKDEgPDwgMTMpCisjZGVmaW5lICAgU1dNRU1DTURfU1dGUkVRCSgyIDw8IDEzKQorI2RlZmluZSAgIFNXTUVNQ01EX1RBUlZJRAkoMyA8PCAxMykKKyNkZWZpbmUgICBTV01FTUNNRF9WUk1fT0ZGCSg0IDw8IDEzKQorI2RlZmluZSAgIFNXTUVNQ01EX1ZSTV9PTgkoNSA8PCAxMykKKyNkZWZpbmUgICBDTURTVFMJCSgxPDwxMikKKyNkZWZpbmUgICBTRkNBVk0JCSgxPDwxMSkKKyNkZWZpbmUgICBTV0ZSRVFfTUFTSwkJMHgwMzgwIC8qIFAwLTcgKi8KKyNkZWZpbmUgICBTV0ZSRVFfU0hJRlQJCTcKKyNkZWZpbmUgICBUQVJWSURfTUFTSwkJMHgwMDFmCisjZGVmaW5lIE1FTVNUQVRfQ1RHCQkweDExMWEwCisjZGVmaW5lIFJDQk1JTkFWRwkJMHgxMTFhMAorI2RlZmluZSBSQ1VQRUkJCQkweDExMWIwCisjZGVmaW5lIFJDRE5FSQkJCTB4MTExYjQKKyNkZWZpbmUgTUNIQkFSX1JFTkRFUl9TVEFOREJZCQkweDExMWI4CiAjZGVmaW5lICAgUkNYX1NXX0VYSVQJCSgxPDwyMykKICNkZWZpbmUgICBSU1hfU1RBVFVTX01BU0sJMHgwMDcwMDAwMAorI2RlZmluZSBWSURDVEwJCQkweDExMWMwCisjZGVmaW5lIFZJRFNUUwkJCTB4MTExYzgKKyNkZWZpbmUgVklEU1RBUlQJCTB4MTExY2MgLyogOCBiaXRzICovCisjZGVmaW5lIE1FTVNUQVRfSUxLCQkJMHgxMTFmOAorI2RlZmluZSAgIE1FTVNUQVRfVklEX01BU0sJMHg3ZjAwCisjZGVmaW5lICAgTUVNU1RBVF9WSURfU0hJRlQJOAorI2RlZmluZSAgIE1FTVNUQVRfUFNUQVRFX01BU0sJMHgwMGY4CisjZGVmaW5lICAgTUVNU1RBVF9QU1RBVEVfU0hJRlQgIDMKKyNkZWZpbmUgICBNRU1TVEFUX01PTl9BQ1RWCSgxPDwyKQorI2RlZmluZSAgIE1FTVNUQVRfU1JDX0NUTF9NQVNLCTB4MDAwMworI2RlZmluZSAgIE1FTVNUQVRfU1JDX0NUTF9DT1JFCTAKKyNkZWZpbmUgICBNRU1TVEFUX1NSQ19DVExfVFJCCTEKKyNkZWZpbmUgICBNRU1TVEFUX1NSQ19DVExfVEhNCTIKKyNkZWZpbmUgICBNRU1TVEFUX1NSQ19DVExfU1REQlkgMworI2RlZmluZSBSQ1BSRVZCU1lUVVBBVkcJCTB4MTEzYjgKKyNkZWZpbmUgUkNQUkVWQlNZVEROQVZHCQkweDExM2JjCiAjZGVmaW5lIFBFR19CQU5EX0dBUF9EQVRBCTB4MTRkNjgKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc3VzcGVuZC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKaW5kZXggYTNiOTBjOS4uYWMwZDFhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zdXNwZW5kLmMKQEAgLTY4Miw2ICs2ODIsOCBAQAogCQlJOTE1X1dSSVRFKFBDSF9QUF9PRkZfREVMQVlTLCBkZXZfcHJpdi0+c2F2ZVBQX09GRl9ERUxBWVMpOwogCQlJOTE1X1dSSVRFKFBDSF9QUF9ESVZJU09SLCBkZXZfcHJpdi0+c2F2ZVBQX0RJVklTT1IpOwogCQlJOTE1X1dSSVRFKFBDSF9QUF9DT05UUk9MLCBkZXZfcHJpdi0+c2F2ZVBQX0NPTlRST0wpOworCQlJOTE1X1dSSVRFKE1DSEJBUl9SRU5ERVJfU1RBTkRCWSwKKwkJCSAgIGRldl9wcml2LT5zYXZlTUNIQkFSX1JFTkRFUl9TVEFOREJZKTsKIAl9IGVsc2UgewogCQlJOTE1X1dSSVRFKFBGSVRfUEdNX1JBVElPUywgZGV2X3ByaXYtPnNhdmVQRklUX1BHTV9SQVRJT1MpOwogCQlJOTE1X1dSSVRFKEJMQ19QV01fQ1RMLCBkZXZfcHJpdi0+c2F2ZUJMQ19QV01fQ1RMKTsKQEAgLTc0NSwxMSArNzQ3LDE2IEBACiAJCWRldl9wcml2LT5zYXZlR1RJTVIgPSBJOTE1X1JFQUQoR1RJTVIpOwogCQlkZXZfcHJpdi0+c2F2ZUZESV9SWEFfSU1SID0gSTkxNV9SRUFEKEZESV9SWEFfSU1SKTsKIAkJZGV2X3ByaXYtPnNhdmVGRElfUlhCX0lNUiA9IEk5MTVfUkVBRChGRElfUlhCX0lNUik7CisJCWRldl9wcml2LT5zYXZlTUNIQkFSX1JFTkRFUl9TVEFOREJZID0KKwkJCUk5MTVfUkVBRChNQ0hCQVJfUkVOREVSX1NUQU5EQlkpOwogCX0gZWxzZSB7CiAJCWRldl9wcml2LT5zYXZlSUVSID0gSTkxNV9SRUFEKElFUik7CiAJCWRldl9wcml2LT5zYXZlSU1SID0gSTkxNV9SRUFEKElNUik7CiAJfQogCisJaWYgKElTX0lST05MQUtFX00oZGV2KSkKKwkJaXJvbmxha2VfZGlzYWJsZV9kcnBzKGRldik7CisKIAkvKiBDYWNoZSBtb2RlIHN0YXRlICovCiAJZGV2X3ByaXYtPnNhdmVDQUNIRV9NT0RFXzAgPSBJOTE1X1JFQUQoQ0FDSEVfTU9ERV8wKTsKIApAQCAtODIwLDYgKzgyNyw5IEBACiAJLyogQ2xvY2sgZ2F0aW5nIHN0YXRlICovCiAJaW50ZWxfaW5pdF9jbG9ja19nYXRpbmcoZGV2KTsKIAorCWlmIChJU19JUk9OTEFLRV9NKGRldikpCisJCWlyb25sYWtlX2VuYWJsZV9kcnBzKGRldik7CisKIAkvKiBDYWNoZSBtb2RlIHN0YXRlICovCiAJSTkxNV9XUklURSAoQ0FDSEVfTU9ERV8wLCBkZXZfcHJpdi0+c2F2ZUNBQ0hFX01PREVfMCB8IDB4ZmZmZjAwMDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9zLmMKaW5kZXggMTVmYmMxYi4uNzBjOWQ0YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYwpAQCAtMjQ3LDYgKzI0Nyw3IEBACiBwYXJzZV9nZW5lcmFsX2ZlYXR1cmVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKIAkJICAgICAgIHN0cnVjdCBiZGJfaGVhZGVyICpiZGIpCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGRldl9wcml2LT5kZXY7CiAJc3RydWN0IGJkYl9nZW5lcmFsX2ZlYXR1cmVzICpnZW5lcmFsOwogCiAJLyogU2V0IHNlbnNpYmxlIGRlZmF1bHRzIGluIGNhc2Ugd2UgY2FuJ3QgZmluZCB0aGUgZ2VuZXJhbCBibG9jayAqLwpAQCAtMjYzLDcgKzI2NCw3IEBACiAJCQlpZiAoSVNfSTg1WChkZXZfcHJpdi0+ZGV2KSkKIAkJCQlkZXZfcHJpdi0+bHZkc19zc2NfZnJlcSA9CiAJCQkJCWdlbmVyYWwtPnNzY19mcmVxID8gNjYgOiA0ODsKLQkJCWVsc2UgaWYgKElTX0lST05MQUtFKGRldl9wcml2LT5kZXYpKQorCQkJZWxzZSBpZiAoSVNfSVJPTkxBS0UoZGV2X3ByaXYtPmRldikgfHwgSVNfR0VONihkZXYpKQogCQkJCWRldl9wcml2LT5sdmRzX3NzY19mcmVxID0KIAkJCQkJZ2VuZXJhbC0+c3NjX2ZyZXEgPyAxMDAgOiAxMjA7CiAJCQllbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9jcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCmluZGV4IDc5ZGQ0MDIuLmZjY2YwNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2NydC5jCkBAIC0zOSw3ICszOSw3IEBACiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1MzIgdGVtcCwgcmVnOwogCi0JaWYgKElTX0lST05MQUtFKGRldikpCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJcmVnID0gUENIX0FEUEE7CiAJZWxzZQogCQlyZWcgPSBBRFBBOwpAQCAtMTEzLDcgKzExMyw3IEBACiAJZWxzZQogCQlkcGxsX21kX3JlZyA9IERQTExfQl9NRDsKIAotCWlmIChJU19JUk9OTEFLRShkZXYpKQorCWlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCWFkcGFfcmVnID0gUENIX0FEUEE7CiAJZWxzZQogCQlhZHBhX3JlZyA9IEFEUEE7CkBAIC0xMjIsNyArMTIyLDcgQEAKIAkgKiBEaXNhYmxlIHNlcGFyYXRlIG1vZGUgbXVsdGlwbGllciB1c2VkIHdoZW4gY2xvbmluZyBTRFZPIHRvIENSVAogCSAqIFhYWCB0aGlzIG5lZWRzIHRvIGJlIGFkanVzdGVkIHdoZW4gd2UgcmVhbGx5IGFyZSBjbG9uaW5nCiAJICovCi0JaWYgKElTX0k5NjVHKGRldikgJiYgIUlTX0lST05MQUtFKGRldikpIHsKKwlpZiAoSVNfSTk2NUcoZGV2KSAmJiAhSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCWRwbGxfbWQgPSBJOTE1X1JFQUQoZHBsbF9tZF9yZWcpOwogCQlJOTE1X1dSSVRFKGRwbGxfbWRfcmVnLAogCQkJICAgZHBsbF9tZCAmIH5EUExMX01EX1VESV9NVUxUSVBMSUVSX01BU0spOwpAQCAtMTM2LDExICsxMzYsMTEgQEAKIAogCWlmIChpbnRlbF9jcnRjLT5waXBlID09IDApIHsKIAkJYWRwYSB8PSBBRFBBX1BJUEVfQV9TRUxFQ1Q7Ci0JCWlmICghSVNfSVJPTkxBS0UoZGV2KSkKKwkJaWYgKCFIQVNfUENIX1NQTElUKGRldikpCiAJCQlJOTE1X1dSSVRFKEJDTFJQQVRfQSwgMCk7CiAJfSBlbHNlIHsKIAkJYWRwYSB8PSBBRFBBX1BJUEVfQl9TRUxFQ1Q7Ci0JCWlmICghSVNfSVJPTkxBS0UoZGV2KSkKKwkJaWYgKCFIQVNfUENIX1NQTElUKGRldikpCiAJCQlJOTE1X1dSSVRFKEJDTFJQQVRfQiwgMCk7CiAJfQogCkBAIC0yMDIsNyArMjAyLDcgQEAKIAl1MzIgaG90cGx1Z19lbjsKIAlpbnQgaSwgdHJpZXMgPSAwOwogCi0JaWYgKElTX0lST05MQUtFKGRldikpCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJcmV0dXJuIGludGVsX2lyb25sYWtlX2NydF9kZXRlY3RfaG90cGx1Zyhjb25uZWN0b3IpOwogCiAJLyoKQEAgLTUyNCw3ICs1MjQsNyBAQAogCQkJCQkgICZpbnRlbF9vdXRwdXQtPmVuYyk7CiAKIAkvKiBTZXQgdXAgdGhlIEREQyBidXMuICovCi0JaWYgKElTX0lST05MQUtFKGRldikpCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJaTJjX3JlZyA9IFBDSF9HUElPQTsKIAllbHNlIHsKIAkJaTJjX3JlZyA9IEdQSU9BOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZGlzcGxheS5jCmluZGV4IGIyNzIwMmQuLjljZDZkZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kaXNwbGF5LmMKQEAgLTIzMiw3ICsyMzIsNyBAQAogI2RlZmluZSBHNFhfUDJfRElTUExBWV9QT1JUX0ZBU1QgICAgICAgICAgIDEwCiAjZGVmaW5lIEc0WF9QMl9ESVNQTEFZX1BPUlRfTElNSVQgICAgICAgICAgMAogCi0vKiBJcm9ubGFrZSAqLworLyogSXJvbmxha2UgLyBTYW5keWJyaWRnZSAqLwogLyogYXMgd2UgY2FsY3VsYXRlIGNsb2NrIHVzaW5nIChyZWdpc3Rlcl92YWx1ZSArIDIpIGZvcgogICAgTi9NMS9NMiwgc28gaGVyZSB0aGUgcmFuZ2UgdmFsdWUgZm9yIHRoZW0gaXMgKGFjdHVhbF92YWx1ZS0yKS4KICAqLwpAQCAtNjkwLDcgKzY5MCw3IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKIAljb25zdCBpbnRlbF9saW1pdF90ICpsaW1pdDsKIAotCWlmIChJU19JUk9OTEFLRShkZXYpKQorCWlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCWxpbWl0ID0gaW50ZWxfaXJvbmxha2VfbGltaXQoY3J0Yyk7CiAJZWxzZSBpZiAoSVNfRzRYKGRldikpIHsKIAkJbGltaXQgPSBpbnRlbF9nNHhfbGltaXQoY3J0Yyk7CkBAIC04ODYsNyArODg2LDcgQEAKIAlpZiAoaW50ZWxfcGlwZV9oYXNfdHlwZShjcnRjLCBJTlRFTF9PVVRQVVRfTFZEUykpIHsKIAkJaW50IGx2ZHNfcmVnOwogCi0JCWlmIChJU19JUk9OTEFLRShkZXYpKQorCQlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQkJbHZkc19yZWcgPSBQQ0hfTFZEUzsKIAkJZWxzZQogCQkJbHZkc19yZWcgPSBMVkRTOwpAQCAtMTE4OCwyNSArMTE4OCwzMCBAQAogCWlmIChpbnRlbF9mYi0+b2JqLT5zaXplID4gZGV2X3ByaXYtPmNmYl9zaXplKSB7CiAJCURSTV9ERUJVR19LTVMoImZyYW1lYnVmZmVyIHRvbyBsYXJnZSwgZGlzYWJsaW5nICIKIAkJCQkiY29tcHJlc3Npb25cbiIpOworCQlkZXZfcHJpdi0+bm9fZmJjX3JlYXNvbiA9IEZCQ19TVE9MRU5fVE9PX1NNQUxMOwogCQlnb3RvIG91dF9kaXNhYmxlOwogCX0KIAlpZiAoKG1vZGUtPmZsYWdzICYgRFJNX01PREVfRkxBR19JTlRFUkxBQ0UpIHx8CiAJICAgIChtb2RlLT5mbGFncyAmIERSTV9NT0RFX0ZMQUdfREJMU0NBTikpIHsKIAkJRFJNX0RFQlVHX0tNUygibW9kZSBpbmNvbXBhdGlibGUgd2l0aCBjb21wcmVzc2lvbiwgIgogCQkJCSJkaXNhYmxpbmdcbiIpOworCQlkZXZfcHJpdi0+bm9fZmJjX3JlYXNvbiA9IEZCQ19VTlNVUFBPUlRFRF9NT0RFOwogCQlnb3RvIG91dF9kaXNhYmxlOwogCX0KIAlpZiAoKG1vZGUtPmhkaXNwbGF5ID4gMjA0OCkgfHwKIAkgICAgKG1vZGUtPnZkaXNwbGF5ID4gMTUzNikpIHsKIAkJRFJNX0RFQlVHX0tNUygibW9kZSB0b28gbGFyZ2UgZm9yIGNvbXByZXNzaW9uLCBkaXNhYmxpbmdcbiIpOworCQlkZXZfcHJpdi0+bm9fZmJjX3JlYXNvbiA9IEZCQ19NT0RFX1RPT19MQVJHRTsKIAkJZ290byBvdXRfZGlzYWJsZTsKIAl9CiAJaWYgKChJU19JOTE1R00oZGV2KSB8fCBJU19JOTQ1R00oZGV2KSkgJiYgcGxhbmUgIT0gMCkgewogCQlEUk1fREVCVUdfS01TKCJwbGFuZSBub3QgMCwgZGlzYWJsaW5nIGNvbXByZXNzaW9uXG4iKTsKKwkJZGV2X3ByaXYtPm5vX2ZiY19yZWFzb24gPSBGQkNfQkFEX1BMQU5FOwogCQlnb3RvIG91dF9kaXNhYmxlOwogCX0KIAlpZiAob2JqX3ByaXYtPnRpbGluZ19tb2RlICE9IEk5MTVfVElMSU5HX1gpIHsKIAkJRFJNX0RFQlVHX0tNUygiZnJhbWVidWZmZXIgbm90IHRpbGVkLCBkaXNhYmxpbmcgY29tcHJlc3Npb25cbiIpOworCQlkZXZfcHJpdi0+bm9fZmJjX3JlYXNvbiA9IEZCQ19OT1RfVElMRUQ7CiAJCWdvdG8gb3V0X2Rpc2FibGU7CiAJfQogCkBAIC0xMzY2LDcgKzEzNzEsNyBAQAogCQkJZHNwY250ciAmPSB+RElTUFBMQU5FX1RJTEVEOwogCX0KIAotCWlmIChJU19JUk9OTEFLRShkZXYpKQorCWlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCS8qIG11c3QgZGlzYWJsZSAqLwogCQlkc3BjbnRyIHw9IERJU1BQTEFORV9UUklDS0xFX0ZFRURfRElTQUJMRTsKIApAQCAtMTQyNyw3ICsxNDMyLDcgQEAKIAl1OCBzcjE7CiAJdTMyIHZnYV9yZWc7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQl2Z2FfcmVnID0gQ1BVX1ZHQUNOVFJMOwogCWVsc2UKIAkJdmdhX3JlZyA9IFZHQUNOVFJMOwpAQCAtMjExMSw3ICsyMTE2LDcgQEAKIAkJCQkgIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICphZGp1c3RlZF9tb2RlKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7Ci0JaWYgKElTX0lST05MQUtFKGRldikpIHsKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCS8qIEZESSBsaW5rIGNsb2NrIGlzIGZpeGVkIGF0IDIuN0cgKi8KIAkJaWYgKG1vZGUtPmNsb2NrICogMyA+IDI3MDAwICogNCkKIAkJCXJldHVybiBNT0RFX0NMT0NLX0hJR0g7CkBAIC0yNzU3LDExICsyNzYyLDIyIEBACiAJCXNyd20gPSB0b3RhbF9zaXplIC0gc3JfZW50cmllczsKIAkJaWYgKHNyd20gPCAwKQogCQkJc3J3bSA9IDE7Ci0JCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIEZXX0JMQ19TRUxGX0VOIHwgKHNyd20gJiAweDNmKSk7CisKKwkJaWYgKElTX0k5NDVHKGRldikgfHwgSVNfSTk0NUdNKGRldikpCisJCQlJOTE1X1dSSVRFKEZXX0JMQ19TRUxGLCBGV19CTENfU0VMRl9GSUZPX01BU0sgfCAoc3J3bSAmIDB4ZmYpKTsKKwkJZWxzZSBpZiAoSVNfSTkxNUdNKGRldikpIHsKKwkJCS8qIDkxNU0gaGFzIGEgc21hbGxlciBTUldNIGZpZWxkICovCisJCQlJOTE1X1dSSVRFKEZXX0JMQ19TRUxGLCBzcndtICYgMHgzZik7CisJCQlJOTE1X1dSSVRFKElOU1RQTSwgSTkxNV9SRUFEKElOU1RQTSkgfCBJTlNUUE1fU0VMRl9FTik7CisJCX0KIAl9IGVsc2UgewogCQkvKiBUdXJuIG9mZiBzZWxmIHJlZnJlc2ggaWYgYm90aCBwaXBlcyBhcmUgZW5hYmxlZCAqLwotCQlJOTE1X1dSSVRFKEZXX0JMQ19TRUxGLCBJOTE1X1JFQUQoRldfQkxDX1NFTEYpCi0JCQkJCSYgfkZXX0JMQ19TRUxGX0VOKTsKKwkJaWYgKElTX0k5NDVHKGRldikgfHwgSVNfSTk0NUdNKGRldikpIHsKKwkJCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIEk5MTVfUkVBRChGV19CTENfU0VMRikKKwkJCQkgICAmIH5GV19CTENfU0VMRl9FTik7CisJCX0gZWxzZSBpZiAoSVNfSTkxNUdNKGRldikpIHsKKwkJCUk5MTVfV1JJVEUoSU5TVFBNLCBJOTE1X1JFQUQoSU5TVFBNKSAmIH5JTlNUUE1fU0VMRl9FTik7CisJCX0KIAl9CiAKIAlEUk1fREVCVUdfS01TKCJTZXR0aW5nIEZJRk8gd2F0ZXJtYXJrcyAtIEE6ICVkLCBCOiAlZCwgQzogJWQsIFNSICVkXG4iLApAQCAtMjk2Nyw3ICsyOTgzLDcgQEAKIAkJCQkJcmVmY2xrIC8gMTAwMCk7CiAJfSBlbHNlIGlmIChJU19JOVhYKGRldikpIHsKIAkJcmVmY2xrID0gOTYwMDA7Ci0JCWlmIChJU19JUk9OTEFLRShkZXYpKQorCQlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQkJcmVmY2xrID0gMTIwMDAwOyAvKiAxMjBNaHogcmVmY2xrICovCiAJfSBlbHNlIHsKIAkJcmVmY2xrID0gNDgwMDA7CkBAIC0zMDI1LDcgKzMwNDEsNyBAQAogCX0KIAogCS8qIEZESSBsaW5rICovCi0JaWYgKElTX0lST05MQUtFKGRldikpIHsKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCWludCBsYW5lLCBsaW5rX2J3LCBicHA7CiAJCS8qIGVEUCBkb2Vzbid0IHJlcXVpcmUgRkRJIGxpbmssIHNvIGp1c3Qgc2V0IERQIE0vTgogCQkgICBhY2NvcmRpbmcgdG8gY3VycmVudCBsaW5rIGNvbmZpZyAqLwpAQCAtMzEwMiw3ICszMTE4LDcgQEAKIAkgKiBQQ0ggQiBzdGVwcGluZywgcHJldmlvdXMgY2hpcHNldCBzdGVwcGluZyBzaG91bGQgYmUKIAkgKiBpZ25vcmluZyB0aGlzIHNldHRpbmcuCiAJICovCi0JaWYgKElTX0lST05MQUtFKGRldikpIHsKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCXRlbXAgPSBJOTE1X1JFQUQoUENIX0RSRUZfQ09OVFJPTCk7CiAJCS8qIEFsd2F5cyBlbmFibGUgbm9uc3ByZWFkIHNvdXJjZSAqLwogCQl0ZW1wICY9IH5EUkVGX05PTlNQUkVBRF9TT1VSQ0VfTUFTSzsKQEAgLTMxNDksNyArMzE2NSw3IEBACiAJCQkJcmVkdWNlZF9jbG9jay5tMjsKIAl9CiAKLQlpZiAoIUlTX0lST05MQUtFKGRldikpCisJaWYgKCFIQVNfUENIX1NQTElUKGRldikpCiAJCWRwbGwgPSBEUExMX1ZHQV9NT0RFX0RJUzsKIAogCWlmIChJU19JOVhYKGRldikpIHsKQEAgLTMxNjIsNyArMzE3OCw3IEBACiAJCQlzZHZvX3BpeGVsX211bHRpcGx5ID0gYWRqdXN0ZWRfbW9kZS0+Y2xvY2sgLyBtb2RlLT5jbG9jazsKIAkJCWlmIChJU19JOTQ1RyhkZXYpIHx8IElTX0k5NDVHTShkZXYpIHx8IElTX0czMyhkZXYpKQogCQkJCWRwbGwgfD0gKHNkdm9fcGl4ZWxfbXVsdGlwbHkgLSAxKSA8PCBTRFZPX01VTFRJUExJRVJfU0hJRlRfSElSRVM7Ci0JCQllbHNlIGlmIChJU19JUk9OTEFLRShkZXYpKQorCQkJZWxzZSBpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQkJCWRwbGwgfD0gKHNkdm9fcGl4ZWxfbXVsdGlwbHkgLSAxKSA8PCBQTExfUkVGX1NEVk9fSERNSV9NVUxUSVBMSUVSX1NISUZUOwogCQl9CiAJCWlmIChpc19kcCkKQEAgLTMxNzQsNyArMzE5MCw3IEBACiAJCWVsc2UgewogCQkJZHBsbCB8PSAoMSA8PCAoY2xvY2sucDEgLSAxKSkgPDwgRFBMTF9GUEEwMV9QMV9QT1NUX0RJVl9TSElGVDsKIAkJCS8qIGFsc28gRlBBMSAqLwotCQkJaWYgKElTX0lST05MQUtFKGRldikpCisJCQlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQkJCWRwbGwgfD0gKDEgPDwgKGNsb2NrLnAxIC0gMSkpIDw8IERQTExfRlBBMV9QMV9QT1NUX0RJVl9TSElGVDsKIAkJCWlmIChJU19HNFgoZGV2KSAmJiBoYXNfcmVkdWNlZF9jbG9jaykKIAkJCQlkcGxsIHw9ICgxIDw8IChyZWR1Y2VkX2Nsb2NrLnAxIC0gMSkpIDw8IERQTExfRlBBMV9QMV9QT1NUX0RJVl9TSElGVDsKQEAgLTMxOTMsNyArMzIwOSw3IEBACiAJCQlkcGxsIHw9IERQTExCX0xWRFNfUDJfQ0xPQ0tfRElWXzE0OwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKElTX0k5NjVHKGRldikgJiYgIUlTX0lST05MQUtFKGRldikpCisJCWlmIChJU19JOTY1RyhkZXYpICYmICFIQVNfUENIX1NQTElUKGRldikpCiAJCQlkcGxsIHw9ICg2IDw8IFBMTF9MT0FEX1BVTFNFX1BIQVNFX1NISUZUKTsKIAl9IGVsc2UgewogCQlpZiAoaXNfbHZkcykgewpAQCAtMzIyNyw3ICszMjQzLDcgQEAKIAogCS8qIElyb25sYWtlJ3MgcGxhbmUgaXMgZm9yY2VkIHRvIHBpcGUsIGJpdCAyNCBpcyB0bwogCSAgIGVuYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uICovCi0JaWYgKCFJU19JUk9OTEFLRShkZXYpKSB7CisJaWYgKCFIQVNfUENIX1NQTElUKGRldikpIHsKIAkJaWYgKHBpcGUgPT0gMCkKIAkJCWRzcGNudHIgJj0gfkRJU1BQTEFORV9TRUxfUElQRV9NQVNLOwogCQllbHNlCkBAIC0zMjU0LDE0ICszMjcwLDE0IEBACiAKIAogCS8qIERpc2FibGUgdGhlIHBhbmVsIGZpdHRlciBpZiBpdCB3YXMgb24gb3VyIHBpcGUgKi8KLQlpZiAoIUlTX0lST05MQUtFKGRldikgJiYgaW50ZWxfcGFuZWxfZml0dGVyX3BpcGUoZGV2KSA9PSBwaXBlKQorCWlmICghSEFTX1BDSF9TUExJVChkZXYpICYmIGludGVsX3BhbmVsX2ZpdHRlcl9waXBlKGRldikgPT0gcGlwZSkKIAkJSTkxNV9XUklURShQRklUX0NPTlRST0wsIDApOwogCiAJRFJNX0RFQlVHX0tNUygiTW9kZSBmb3IgcGlwZSAlYzpcbiIsIHBpcGUgPT0gMCA/ICdBJyA6ICdCJyk7CiAJZHJtX21vZGVfZGVidWdfcHJpbnRtb2RlbGluZShtb2RlKTsKIAogCS8qIGFzc2lnbiB0byBJcm9ubGFrZSByZWdpc3RlcnMgKi8KLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKIAkJZnBfcmVnID0gcGNoX2ZwX3JlZzsKIAkJZHBsbF9yZWcgPSBwY2hfZHBsbF9yZWc7CiAJfQpAQCAtMzI4Miw3ICszMjk4LDcgQEAKIAlpZiAoaXNfbHZkcykgewogCQl1MzIgbHZkczsKIAotCQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwkJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJCWx2ZHNfcmVnID0gUENIX0xWRFM7CiAKIAkJbHZkcyA9IEk5MTVfUkVBRChsdmRzX3JlZyk7CkBAIC0zMzA0LDEyICszMzIwLDEyIEBACiAJCS8qIHNldCB0aGUgZGl0aGVyaW5nIGZsYWcgKi8KIAkJaWYgKElTX0k5NjVHKGRldikpIHsKIAkJCWlmIChkZXZfcHJpdi0+bHZkc19kaXRoZXIpIHsKLQkJCQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwkJCQlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQkJCQlwaXBlY29uZiB8PSBQSVBFX0VOQUJMRV9ESVRIRVI7CiAJCQkJZWxzZQogCQkJCQlsdmRzIHw9IExWRFNfRU5BQkxFX0RJVEhFUjsKIAkJCX0gZWxzZSB7Ci0JCQkJaWYgKElTX0lST05MQUtFKGRldikpCisJCQkJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJCQkJcGlwZWNvbmYgJj0gflBJUEVfRU5BQkxFX0RJVEhFUjsKIAkJCQllbHNlCiAJCQkJCWx2ZHMgJj0gfkxWRFNfRU5BQkxFX0RJVEhFUjsKQEAgLTMzMjgsNyArMzM0NCw3IEBACiAJCS8qIFdhaXQgZm9yIHRoZSBjbG9ja3MgdG8gc3RhYmlsaXplLiAqLwogCQl1ZGVsYXkoMTUwKTsKIAotCQlpZiAoSVNfSTk2NUcoZGV2KSAmJiAhSVNfSVJPTkxBS0UoZGV2KSkgeworCQlpZiAoSVNfSTk2NUcoZGV2KSAmJiAhSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCQlpZiAoaXNfc2R2bykgewogCQkJCXNkdm9fcGl4ZWxfbXVsdGlwbHkgPSBhZGp1c3RlZF9tb2RlLT5jbG9jayAvIG1vZGUtPmNsb2NrOwogCQkJCUk5MTVfV1JJVEUoZHBsbF9tZF9yZWcsICgwIDw8IERQTExfTURfVURJX0RJVklERVJfU0hJRlQpIHwKQEAgLTMzNzUsMTQgKzMzOTEsMTQgQEAKIAkvKiBwaXBlc3JjIGFuZCBkc3BzaXplIGNvbnRyb2wgdGhlIHNpemUgdGhhdCBpcyBzY2FsZWQgZnJvbSwgd2hpY2ggc2hvdWxkCiAJICogYWx3YXlzIGJlIHRoZSB1c2VyJ3MgcmVxdWVzdGVkIHNpemUuCiAJICovCi0JaWYgKCFJU19JUk9OTEFLRShkZXYpKSB7CisJaWYgKCFIQVNfUENIX1NQTElUKGRldikpIHsKIAkJSTkxNV9XUklURShkc3BzaXplX3JlZywgKChtb2RlLT52ZGlzcGxheSAtIDEpIDw8IDE2KSB8CiAJCQkJKG1vZGUtPmhkaXNwbGF5IC0gMSkpOwogCQlJOTE1X1dSSVRFKGRzcHBvc19yZWcsIDApOwogCX0KIAlJOTE1X1dSSVRFKHBpcGVzcmNfcmVnLCAoKG1vZGUtPmhkaXNwbGF5IC0gMSkgPDwgMTYpIHwgKG1vZGUtPnZkaXNwbGF5IC0gMSkpOwogCi0JaWYgKElTX0lST05MQUtFKGRldikpIHsKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCUk5MTVfV1JJVEUoZGF0YV9tMV9yZWcsIFRVX1NJWkUobV9uLnR1KSB8IG1fbi5nbWNoX20pOwogCQlJOTE1X1dSSVRFKGRhdGFfbjFfcmVnLCBUVV9TSVpFKG1fbi50dSkgfCBtX24uZ21jaF9uKTsKIAkJSTkxNV9XUklURShsaW5rX20xX3JlZywgbV9uLmxpbmtfbSk7CkBAIC0zNDM4LDcgKzM0NTQsNyBAQAogCQlyZXR1cm47CiAKIAkvKiB1c2UgbGVnYWN5IHBhbGV0dGUgZm9yIElyb25sYWtlICovCi0JaWYgKElTX0lST05MQUtFKGRldikpCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJcGFscmVnID0gKGludGVsX2NydGMtPnBpcGUgPT0gMCkgPyBMR0NfUEFMRVRURV9BIDoKIAkJCQkJCSAgIExHQ19QQUxFVFRFX0I7CiAKQEAgLTM1NTMsMTEgKzM1NjksMTAgQEAKIAlpbnRlbF9jcnRjLT5jdXJzb3JfYm8gPSBibzsKIAogCXJldHVybiAwOwotZmFpbDoKLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiBmYWlsX2xvY2tlZDoKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShibyk7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CitmYWlsOgorCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGJvKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zOTIyLDcgKzM5MzcsNyBAQAogCWludCBkcGxsX3JlZyA9IChwaXBlID09IDApID8gRFBMTF9BIDogRFBMTF9COwogCWludCBkcGxsID0gSTkxNV9SRUFEKGRwbGxfcmVnKTsKIAotCWlmIChJU19JUk9OTEFLRShkZXYpKQorCWlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCXJldHVybjsKIAogCWlmICghZGV2X3ByaXYtPmx2ZHNfZG93bmNsb2NrX2F2YWlsKQpAQCAtMzk2MSw3ICszOTc2LDcgQEAKIAlpbnQgZHBsbF9yZWcgPSAocGlwZSA9PSAwKSA/IERQTExfQSA6IERQTExfQjsKIAlpbnQgZHBsbCA9IEk5MTVfUkVBRChkcGxsX3JlZyk7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlyZXR1cm47CiAKIAlpZiAoIWRldl9wcml2LT5sdmRzX2Rvd25jbG9ja19hdmFpbCkKQEAgLTQwMTEsNiArNDAyNiwxMSBAQAogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCisJaWYgKElTX0k5NDVHKGRldikgfHwgSVNfSTk0NUdNKGRldikpIHsKKwkJRFJNX0RFQlVHX0RSSVZFUigiZW5hYmxlIG1lbW9yeSBzZWxmIHJlZnJlc2ggb24gOTQ1XG4iKTsKKwkJSTkxNV9XUklURShGV19CTENfU0VMRiwgRldfQkxDX1NFTEZfRU5fTUFTSyB8IEZXX0JMQ19TRUxGX0VOKTsKKwl9CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCQkvKiBTa2lwIGluYWN0aXZlIENSVENzICovCiAJCWlmICghY3J0Yy0+ZmIpCkBAIC00MDQ0LDkgKzQwNjQsMTcgQEAKIAlpZiAoIWRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpCiAJCXJldHVybjsKIAotCWlmICghZGV2X3ByaXYtPmJ1c3kpCisJaWYgKCFkZXZfcHJpdi0+YnVzeSkgeworCQlpZiAoSVNfSTk0NUcoZGV2KSB8fCBJU19JOTQ1R00oZGV2KSkgeworCQkJdTMyIGZ3X2JsY19zZWxmOworCisJCQlEUk1fREVCVUdfRFJJVkVSKCJkaXNhYmxlIG1lbW9yeSBzZWxmIHJlZnJlc2ggb24gOTQ1XG4iKTsKKwkJCWZ3X2JsY19zZWxmID0gSTkxNV9SRUFEKEZXX0JMQ19TRUxGKTsKKwkJCWZ3X2JsY19zZWxmICY9IH5GV19CTENfU0VMRl9FTjsKKwkJCUk5MTVfV1JJVEUoRldfQkxDX1NFTEYsIGZ3X2JsY19zZWxmIHwgRldfQkxDX1NFTEZfRU5fTUFTSyk7CisJCX0KIAkJZGV2X3ByaXYtPmJ1c3kgPSB0cnVlOwotCWVsc2UKKwl9IGVsc2UKIAkJbW9kX3RpbWVyKCZkZXZfcHJpdi0+aWRsZV90aW1lciwgamlmZmllcyArCiAJCQkgIG1zZWNzX3RvX2ppZmZpZXMoR1BVX0lETEVfVElNRU9VVCkpOwogCkBAIC00MDU4LDYgKzQwODYsMTQgQEAKIAkJaW50ZWxfZmIgPSB0b19pbnRlbF9mcmFtZWJ1ZmZlcihjcnRjLT5mYik7CiAJCWlmIChpbnRlbF9mYi0+b2JqID09IG9iaikgewogCQkJaWYgKCFpbnRlbF9jcnRjLT5idXN5KSB7CisJCQkJaWYgKElTX0k5NDVHKGRldikgfHwgSVNfSTk0NUdNKGRldikpIHsKKwkJCQkJdTMyIGZ3X2JsY19zZWxmOworCisJCQkJCURSTV9ERUJVR19EUklWRVIoImRpc2FibGUgbWVtb3J5IHNlbGYgcmVmcmVzaCBvbiA5NDVcbiIpOworCQkJCQlmd19ibGNfc2VsZiA9IEk5MTVfUkVBRChGV19CTENfU0VMRik7CisJCQkJCWZ3X2JsY19zZWxmICY9IH5GV19CTENfU0VMRl9FTjsKKwkJCQkJSTkxNV9XUklURShGV19CTENfU0VMRiwgZndfYmxjX3NlbGYgfCBGV19CTENfU0VMRl9FTl9NQVNLKTsKKwkJCQl9CiAJCQkJLyogTm9uLWJ1c3kgLT4gYnVzeSwgdXBjbG9jayAqLwogCQkJCWludGVsX2luY3JlYXNlX3BsbGNsb2NrKGNydGMsIHRydWUpOwogCQkJCWludGVsX2NydGMtPmJ1c3kgPSB0cnVlOwpAQCAtNDM4Miw3ICs0NDE4LDcgQEAKIAlpZiAoSVNfTU9CSUxFKGRldikgJiYgIUlTX0k4MzAoZGV2KSkKIAkJaW50ZWxfbHZkc19pbml0KGRldik7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKIAkJaW50IGZvdW5kOwogCiAJCWlmIChJU19NT0JJTEUoZGV2KSAmJiAoSTkxNV9SRUFEKERQX0EpICYgRFBfREVURUNURUQpKQpAQCAtNDQ1MSw3ICs0NDg3LDcgQEAKIAkJCURSTV9ERUJVR19LTVMoInByb2JpbmcgRFBfRFxuIik7CiAJCQlpbnRlbF9kcF9pbml0KGRldiwgRFBfRCk7CiAJCX0KLQl9IGVsc2UgaWYgKElTX0k4WFgoZGV2KSkKKwl9IGVsc2UgaWYgKElTX0dFTjIoZGV2KSkKIAkJaW50ZWxfZHZvX2luaXQoZGV2KTsKIAogCWlmIChTVVBQT1JUU19UVihkZXYpKQpAQCAtNDQ3Niw5ICs0NTEyLDcgQEAKIAkJaW50ZWxmYl9yZW1vdmUoZGV2LCBmYik7CiAKIAlkcm1fZnJhbWVidWZmZXJfY2xlYW51cChmYik7Ci0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGludGVsX2ZiLT5vYmopOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGludGVsX2ZiLT5vYmopOwogCiAJa2ZyZWUoaW50ZWxfZmIpOwogfQpAQCAtNDU0MSw5ICs0NTc1LDcgQEAKIAogCXJldCA9IGludGVsX2ZyYW1lYnVmZmVyX2NyZWF0ZShkZXYsIG1vZGVfY21kLCAmZmIsIG9iaik7CiAJaWYgKHJldCkgewotCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG9iaik7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTQ1OTEsNiArNDYyMyw5MSBAQAogCXJldHVybiBOVUxMOwogfQogCit2b2lkIGlyb25sYWtlX2VuYWJsZV9kcnBzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgcmd2bW9kZWN0bCA9IEk5MTVfUkVBRChNRU1NT0RFQ1RMKSwgcmd2c3djdGw7CisJdTggZm1heCwgZm1pbiwgZnN0YXJ0LCB2c3RhcnQ7CisJaW50IGkgPSAwOworCisJLyogMTAwbXMgUkMgZXZhbHVhdGlvbiBpbnRlcnZhbHMgKi8KKwlJOTE1X1dSSVRFKFJDVVBFSSwgMTAwMDAwKTsKKwlJOTE1X1dSSVRFKFJDRE5FSSwgMTAwMDAwKTsKKworCS8qIFNldCBtYXgvbWluIHRocmVzaG9sZHMgdG8gOTBtcyBhbmQgODBtcyByZXNwZWN0aXZlbHkgKi8KKwlJOTE1X1dSSVRFKFJDQk1BWEFWRywgOTAwMDApOworCUk5MTVfV1JJVEUoUkNCTUlOQVZHLCA4MDAwMCk7CisKKwlJOTE1X1dSSVRFKE1FTUlIWVNULCAxKTsKKworCS8qIFNldCB1cCBtaW4sIG1heCwgYW5kIGN1ciBmb3IgaW50ZXJydXB0IGhhbmRsaW5nICovCisJZm1heCA9IChyZ3Ztb2RlY3RsICYgTUVNTU9ERV9GTUFYX01BU0spID4+IE1FTU1PREVfRk1BWF9TSElGVDsKKwlmbWluID0gKHJndm1vZGVjdGwgJiBNRU1NT0RFX0ZNSU5fTUFTSyk7CisJZnN0YXJ0ID0gKHJndm1vZGVjdGwgJiBNRU1NT0RFX0ZTVEFSVF9NQVNLKSA+PgorCQlNRU1NT0RFX0ZTVEFSVF9TSElGVDsKKwl2c3RhcnQgPSAoSTkxNV9SRUFEKFBYVkZSRVFfQkFTRSArIChmc3RhcnQgKiA0KSkgJiBQWFZGUkVRX1BYX01BU0spID4+CisJCVBYVkZSRVFfUFhfU0hJRlQ7CisKKwlkZXZfcHJpdi0+bWF4X2RlbGF5ID0gZnN0YXJ0OyAvKiBjYW4ndCBnbyB0byBmbWF4IHcvbyBJUFMgKi8KKwlkZXZfcHJpdi0+bWluX2RlbGF5ID0gZm1pbjsKKwlkZXZfcHJpdi0+Y3VyX2RlbGF5ID0gZnN0YXJ0OworCisJSTkxNV9XUklURShNRU1JTlRSRU4sIE1FTUlOVF9DWF9TVVBSX0VOIHwgTUVNSU5UX0VWQUxfQ0hHX0VOKTsKKworCS8qCisJICogSW50ZXJydXB0cyB3aWxsIGJlIGVuYWJsZWQgaW4gaXJvbmxha2VfaXJxX3Bvc3RpbnN0YWxsCisJICovCisKKwlJOTE1X1dSSVRFKFZJRFNUQVJULCB2c3RhcnQpOworCVBPU1RJTkdfUkVBRChWSURTVEFSVCk7CisKKwlyZ3Ztb2RlY3RsIHw9IE1FTU1PREVfU1dNT0RFX0VOOworCUk5MTVfV1JJVEUoTUVNTU9ERUNUTCwgcmd2bW9kZWN0bCk7CisKKwl3aGlsZSAoSTkxNV9SRUFEKE1FTVNXQ1RMKSAmIE1FTUNUTF9DTURfU1RTKSB7CisJCWlmIChpKysgPiAxMDApIHsKKwkJCURSTV9FUlJPUigic3R1Y2sgdHJ5aW5nIHRvIGNoYW5nZSBwZXJmIG1vZGVcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJbXNsZWVwKDEpOworCX0KKwltc2xlZXAoMSk7CisKKwlyZ3Zzd2N0bCA9IChNRU1DVExfQ01EX0NIRlJFUSA8PCBNRU1DVExfQ01EX1NISUZUKSB8CisJCShmc3RhcnQgPDwgTUVNQ1RMX0ZSRVFfU0hJRlQpIHwgTUVNQ1RMX1NGQ0FWTTsKKwlJOTE1X1dSSVRFKE1FTVNXQ1RMLCByZ3Zzd2N0bCk7CisJUE9TVElOR19SRUFEKE1FTVNXQ1RMKTsKKworCXJndnN3Y3RsIHw9IE1FTUNUTF9DTURfU1RTOworCUk5MTVfV1JJVEUoTUVNU1dDVEwsIHJndnN3Y3RsKTsKK30KKwordm9pZCBpcm9ubGFrZV9kaXNhYmxlX2RycHMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMiByZ3Zzd2N0bDsKKwl1OCBmc3RhcnQ7CisKKwkvKiBBY2sgaW50ZXJydXB0cywgZGlzYWJsZSBFRkMgaW50ZXJydXB0ICovCisJSTkxNV9XUklURShNRU1JTlRSRU4sIEk5MTVfUkVBRChNRU1JTlRSRU4pICYgfk1FTUlOVF9FVkFMX0NIR19FTik7CisJSTkxNV9XUklURShNRU1JTlRSU1RTLCBNRU1JTlRfRVZBTF9DSEcpOworCUk5MTVfV1JJVEUoREVJRVIsIEk5MTVfUkVBRChERUlFUikgJiB+REVfUENVX0VWRU5UKTsKKwlJOTE1X1dSSVRFKERFSUlSLCBERV9QQ1VfRVZFTlQpOworCUk5MTVfV1JJVEUoREVJTVIsIEk5MTVfUkVBRChERUlNUikgfCBERV9QQ1VfRVZFTlQpOworCisJLyogR28gYmFjayB0byB0aGUgc3RhcnRpbmcgZnJlcXVlbmN5ICovCisJZnN0YXJ0ID0gKEk5MTVfUkVBRChNRU1NT0RFQ1RMKSAmIE1FTU1PREVfRlNUQVJUX01BU0spID4+CisJCU1FTU1PREVfRlNUQVJUX1NISUZUOworCXJndnN3Y3RsID0gKE1FTUNUTF9DTURfQ0hGUkVRIDw8IE1FTUNUTF9DTURfU0hJRlQpIHwKKwkJKGZzdGFydCA8PCBNRU1DVExfRlJFUV9TSElGVCkgfCBNRU1DVExfU0ZDQVZNOworCUk5MTVfV1JJVEUoTUVNU1dDVEwsIHJndnN3Y3RsKTsKKwltc2xlZXAoMSk7CisJcmd2c3djdGwgfD0gTUVNQ1RMX0NNRF9TVFM7CisJSTkxNV9XUklURShNRU1TV0NUTCwgcmd2c3djdGwpOworCW1zbGVlcCgxKTsKKworfQorCiB2b2lkIGludGVsX2luaXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKQEAgLTQ1OTksNyArNDcxNiw3IEBACiAJICogRGlzYWJsZSBjbG9jayBnYXRpbmcgcmVwb3J0ZWQgdG8gd29yayBpbmNvcnJlY3RseSBhY2NvcmRpbmcgdG8gdGhlCiAJICogc3BlY3MsIGJ1dCBlbmFibGUgYXMgbXVjaCBlbHNlIGFzIHdlIGNhbi4KIAkgKi8KLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKIAkJcmV0dXJuOwogCX0gZWxzZSBpZiAoSVNfRzRYKGRldikpIHsKIAkJdWludDMyX3QgZHNwY2xrX2dhdGU7CkBAIC00NjcyLDcgKzQ3ODksNyBAQAogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKIAkvKiBXZSBhbHdheXMgd2FudCBhIERQTVMgZnVuY3Rpb24gKi8KLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlkZXZfcHJpdi0+ZGlzcGxheS5kcG1zID0gaXJvbmxha2VfY3J0Y19kcG1zOwogCWVsc2UKIAkJZGV2X3ByaXYtPmRpc3BsYXkuZHBtcyA9IGk5eHhfY3J0Y19kcG1zOwpAQCAtNDcxNSw3ICs0ODMyLDcgQEAKIAkJCWk4MzBfZ2V0X2Rpc3BsYXlfY2xvY2tfc3BlZWQ7CiAKIAkvKiBGb3IgRklGTyB3YXRlcm1hcmsgdXBkYXRlcyAqLwotCWlmIChJU19JUk9OTEFLRShkZXYpKQorCWlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IE5VTEw7CiAJZWxzZSBpZiAoSVNfRzRYKGRldikpCiAJCWRldl9wcml2LT5kaXNwbGF5LnVwZGF0ZV93bSA9IGc0eF91cGRhdGVfd207CkBAIC00Nzc0LDExICs0ODkxLDYgQEAKIAlEUk1fREVCVUdfS01TKCIlZCBkaXNwbGF5IHBpcGUlcyBhdmFpbGFibGUuXG4iLAogCQkgIG51bV9waXBlLCBudW1fcGlwZSA+IDEgPyAicyIgOiAiIik7CiAKLQlpZiAoSVNfSTg1WChkZXYpKQotCQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYtPnBkZXYsIEhQTExDQywgJmRldl9wcml2LT5vcmlnX2Nsb2NrKTsKLQllbHNlIGlmIChJU19JOVhYKGRldikgfHwgSVNfRzRYKGRldikpCi0JCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldi0+cGRldiwgR0NGR0MsICZkZXZfcHJpdi0+b3JpZ19jbG9jayk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgbnVtX3BpcGU7IGkrKykgewogCQlpbnRlbF9jcnRjX2luaXQoZGV2LCBpKTsKIAl9CkBAIC00Nzg3LDYgKzQ4OTksOSBAQAogCiAJaW50ZWxfaW5pdF9jbG9ja19nYXRpbmcoZGV2KTsKIAorCWlmIChJU19JUk9OTEFLRV9NKGRldikpCisJCWlyb25sYWtlX2VuYWJsZV9kcnBzKGRldik7CisKIAlJTklUX1dPUksoJmRldl9wcml2LT5pZGxlX3dvcmssIGludGVsX2lkbGVfdXBkYXRlKTsKIAlzZXR1cF90aW1lcigmZGV2X3ByaXYtPmlkbGVfdGltZXIsIGludGVsX2dwdV9pZGxlX3RpbWVyLAogCQkgICAgKHVuc2lnbmVkIGxvbmcpZGV2KTsKQEAgLTQ4MzQsNiArNDk0OSw5IEBACiAJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGRldl9wcml2LT5wd3JjdHgpOwogCX0KIAorCWlmIChJU19JUk9OTEFLRV9NKGRldikpCisJCWlyb25sYWtlX2Rpc2FibGVfZHJwcyhkZXYpOworCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAlkcm1fbW9kZV9jb25maWdfY2xlYW51cChkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2RwLmMKaW5kZXggNDM5NTA2Yy4uM2VmM2EwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcC5jCkBAIC0yMzEsNyArMjMxLDcgQEAKIAkgKi8KIAlpZiAoSVNfZURQKGludGVsX291dHB1dCkpCiAJCWF1eF9jbG9ja19kaXZpZGVyID0gMjI1OyAvKiBlRFAgaW5wdXQgY2xvY2sgYXQgNDUwTWh6ICovCi0JZWxzZSBpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwllbHNlIGlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCWF1eF9jbG9ja19kaXZpZGVyID0gNjI7IC8qIElSTCBpbnB1dCBjbG9jayBmaXhlZCBhdCAxMjVNaHogKi8KIAllbHNlCiAJCWF1eF9jbG9ja19kaXZpZGVyID0gaW50ZWxfaHJhd2NsayhkZXYpIC8gMjsKQEAgLTU4NCw3ICs1ODQsNyBAQAogCWludGVsX2RwX2NvbXB1dGVfbV9uKDMsIGxhbmVfY291bnQsCiAJCQkgICAgIG1vZGUtPmNsb2NrLCBhZGp1c3RlZF9tb2RlLT5jbG9jaywgJm1fbik7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKIAkJaWYgKGludGVsX2NydGMtPnBpcGUgPT0gMCkgewogCQkJSTkxNV9XUklURShUUkFOU0FfREFUQV9NMSwKIAkJCQkgICAoKG1fbi50dSAtIDEpIDw8IFBJUEVfR01DSF9EQVRBX01fVFVfU0laRV9TSElGVCkgfApAQCAtMTE3Niw3ICsxMTc2LDcgQEAKIAogCWRwX3ByaXYtPmhhc19hdWRpbyA9IGZhbHNlOwogCi0JaWYgKElTX0lST05MQUtFKGRldikpCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJcmV0dXJuIGlyb25sYWtlX2RwX2RldGVjdChjb25uZWN0b3IpOwogCiAJdGVtcCA9IEk5MTVfUkVBRChQT1JUX0hPVFBMVUdfRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAppbmRleCBhNTE1NzNkLi4zYTQ2N2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9kcnYuaApAQCAtMjA5LDYgKzIwOSw4IEBACiBleHRlcm4gdm9pZCBpbnRlbF9jcnRjX2ZiX2dhbW1hX2dldChzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIHUxNiAqcmVkLCB1MTYgKmdyZWVuLAogCQkJCSAgICB1MTYgKmJsdWUsIGludCByZWdubyk7CiBleHRlcm4gdm9pZCBpbnRlbF9pbml0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGlyb25sYWtlX2VuYWJsZV9kcnBzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgaXJvbmxha2VfZGlzYWJsZV9kcnBzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCiBleHRlcm4gaW50IGludGVsX2ZyYW1lYnVmZmVyX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfZmJfY21kICptb2RlX2NtZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9mYi5jCmluZGV4IGFhYWJiY2IuLjhjZDc5MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2ZiLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZmIuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdmdhX3N3aXRjaGVyb28uaD4KIAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm0uaCIKQEAgLTIzNSw2ICsyMzYsNyBAQAogCQkJb2JqX3ByaXYtPmd0dF9vZmZzZXQsIGZibyk7CiAKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwl2Z2Ffc3dpdGNoZXJvb19jbGllbnRfZmJfc2V0KGRldi0+cGRldiwgaW5mbyk7CiAJcmV0dXJuIDA7CiAKIG91dF91bnBpbjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hkbWkuYwppbmRleCAwZTI2OGRlLi5hMzBmOGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZG1pLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRtaS5jCkBAIC04Miw3ICs4Miw3IEBACiAJLyogSFcgd29ya2Fyb3VuZCwgbmVlZCB0byB0b2dnbGUgZW5hYmxlIGJpdCBvZmYgYW5kIG9uIGZvciAxMmJwYywgYnV0CiAJICogd2UgZG8gdGhpcyBhbnl3YXkgd2hpY2ggc2hvd3MgbW9yZSBzdGFibGUgaW4gdGVzdGluZy4KIAkgKi8KLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKIAkJSTkxNV9XUklURShoZG1pX3ByaXYtPnNkdm94X3JlZywgdGVtcCAmIH5TRFZPX0VOQUJMRSk7CiAJCVBPU1RJTkdfUkVBRChoZG1pX3ByaXYtPnNkdm94X3JlZyk7CiAJfQpAQCAtOTksNyArOTksNyBAQAogCS8qIEhXIHdvcmthcm91bmQsIG5lZWQgdG8gd3JpdGUgdGhpcyB0d2ljZSBmb3IgaXNzdWUgdGhhdCBtYXkgcmVzdWx0CiAJICogaW4gZmlyc3Qgd3JpdGUgZ2V0dGluZyBtYXNrZWQuCiAJICovCi0JaWYgKElTX0lST05MQUtFKGRldikpIHsKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCUk5MTVfV1JJVEUoaGRtaV9wcml2LT5zZHZveF9yZWcsIHRlbXApOwogCQlQT1NUSU5HX1JFQUQoaGRtaV9wcml2LT5zZHZveF9yZWcpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2kyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaTJjLmMKaW5kZXggODY3M2M3My4uZmNjNzUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaTJjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaTJjLmMKQEAgLTEyOCw3ICsxMjgsNyBAQAogewogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKIAkJSTkxNV9XUklURShQQ0hfR01CVVMwLCAwKTsKIAl9IGVsc2UgewogCQlJOTE1X1dSSVRFKEdNQlVTMCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9sdmRzLmMKaW5kZXggYzJlOGE0NS4uMTRlNTE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHZkcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2x2ZHMuYwpAQCAtNTYsNyArNTYsNyBAQAogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJdTMyIGJsY19wd21fY3RsLCByZWc7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlyZWcgPSBCTENfUFdNX0NQVV9DVEw7CiAJZWxzZQogCQlyZWcgPSBCTENfUFdNX0NUTDsKQEAgLTc0LDcgKzc0LDcgQEAKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXUzMiByZWc7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlyZWcgPSBCTENfUFdNX1BDSF9DVEwyOwogCWVsc2UKIAkJcmVnID0gQkxDX1BXTV9DVEw7CkBAIC04OSwxNyArODksMjIgQEAKIHN0YXRpYyB2b2lkIGludGVsX2x2ZHNfc2V0X3Bvd2VyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGJvb2wgb24pCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1MzIgcHBfc3RhdHVzLCBjdGxfcmVnLCBzdGF0dXNfcmVnOworCXUzMiBwcF9zdGF0dXMsIGN0bF9yZWcsIHN0YXR1c19yZWcsIGx2ZHNfcmVnOwogCi0JaWYgKElTX0lST05MQUtFKGRldikpIHsKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCWN0bF9yZWcgPSBQQ0hfUFBfQ09OVFJPTDsKIAkJc3RhdHVzX3JlZyA9IFBDSF9QUF9TVEFUVVM7CisJCWx2ZHNfcmVnID0gUENIX0xWRFM7CiAJfSBlbHNlIHsKIAkJY3RsX3JlZyA9IFBQX0NPTlRST0w7CiAJCXN0YXR1c19yZWcgPSBQUF9TVEFUVVM7CisJCWx2ZHNfcmVnID0gTFZEUzsKIAl9CiAKIAlpZiAob24pIHsKKwkJSTkxNV9XUklURShsdmRzX3JlZywgSTkxNV9SRUFEKGx2ZHNfcmVnKSB8IExWRFNfUE9SVF9FTik7CisJCVBPU1RJTkdfUkVBRChsdmRzX3JlZyk7CisKIAkJSTkxNV9XUklURShjdGxfcmVnLCBJOTE1X1JFQUQoY3RsX3JlZykgfAogCQkJICAgUE9XRVJfVEFSR0VUX09OKTsKIAkJZG8gewpAQCAtMTE1LDYgKzEyMCw5IEBACiAJCWRvIHsKIAkJCXBwX3N0YXR1cyA9IEk5MTVfUkVBRChzdGF0dXNfcmVnKTsKIAkJfSB3aGlsZSAocHBfc3RhdHVzICYgUFBfT04pOworCisJCUk5MTVfV1JJVEUobHZkc19yZWcsIEk5MTVfUkVBRChsdmRzX3JlZykgJiB+TFZEU19QT1JUX0VOKTsKKwkJUE9TVElOR19SRUFEKGx2ZHNfcmVnKTsKIAl9CiB9CiAKQEAgLTEzNyw3ICsxNDUsNyBAQAogCXUzMiBwcF9vbl9yZWcsIHBwX29mZl9yZWcsIHBwX2N0bF9yZWcsIHBwX2Rpdl9yZWc7CiAJdTMyIHB3bV9jdGxfcmVnOwogCi0JaWYgKElTX0lST05MQUtFKGRldikpIHsKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKSB7CiAJCXBwX29uX3JlZyA9IFBDSF9QUF9PTl9ERUxBWVM7CiAJCXBwX29mZl9yZWcgPSBQQ0hfUFBfT0ZGX0RFTEFZUzsKIAkJcHBfY3RsX3JlZyA9IFBDSF9QUF9DT05UUk9MOwpAQCAtMTc0LDcgKzE4Miw3IEBACiAJdTMyIHBwX29uX3JlZywgcHBfb2ZmX3JlZywgcHBfY3RsX3JlZywgcHBfZGl2X3JlZzsKIAl1MzIgcHdtX2N0bF9yZWc7CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKIAkJcHBfb25fcmVnID0gUENIX1BQX09OX0RFTEFZUzsKIAkJcHBfb2ZmX3JlZyA9IFBDSF9QUF9PRkZfREVMQVlTOwogCQlwcF9jdGxfcmVnID0gUENIX1BQX0NPTlRST0w7CkBAIC0yOTcsNyArMzA1LDcgQEAKIAl9CiAKIAkvKiBmdWxsIHNjcmVlbiBzY2FsZSBmb3Igbm93ICovCi0JaWYgKElTX0lST05MQUtFKGRldikpCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJZ290byBvdXQ7CiAKIAkvKiA5NjUrIHdhbnRzIGZ1enp5IGZpdHRpbmcgKi8KQEAgLTMyNyw3ICszMzUsNyBAQAogCSAqIHRvIHJlZ2lzdGVyIGRlc2NyaXB0aW9uIGFuZCBQUk0uCiAJICogQ2hhbmdlIHRoZSB2YWx1ZSBoZXJlIHRvIHNlZSB0aGUgYm9yZGVycyBmb3IgZGVidWdnaW5nCiAJICovCi0JaWYgKCFJU19JUk9OTEFLRShkZXYpKSB7CisJaWYgKCFIQVNfUENIX1NQTElUKGRldikpIHsKIAkJSTkxNV9XUklURShCQ0xSUEFUX0EsIDApOwogCQlJOTE1X1dSSVRFKEJDTFJQQVRfQiwgMCk7CiAJfQpAQCAtNTQ4LDcgKzU1Niw3IEBACiAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1MzIgcmVnOwogCi0JaWYgKElTX0lST05MQUtFKGRldikpCisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkKIAkJcmVnID0gQkxDX1BXTV9DUFVfQ1RMOwogCWVsc2UKIAkJcmVnID0gQkxDX1BXTV9DVEw7CkBAIC01ODcsNyArNTk1LDcgQEAKIAkgKiBzZXR0aW5ncy4KIAkgKi8KIAotCWlmIChJU19JUk9OTEFLRShkZXYpKQorCWlmIChIQVNfUENIX1NQTElUKGRldikpCiAJCXJldHVybjsKIAogCS8qCkBAIC02NTUsOCArNjYzLDE1IEBACiAgKi8KIHN0YXRpYyBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIGludGVsX2x2ZHNfZGV0ZWN0KHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OwogCWVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAKKwkvKiBBQ1BJIGxpZCBtZXRob2RzIHdlcmUgZ2VuZXJhbGx5IHVucmVsaWFibGUgaW4gdGhpcyBnZW5lcmF0aW9uLCBzbworCSAqIGRvbid0IGV2ZW4gYm90aGVyLgorCSAqLworCWlmIChJU19HRU4yKGRldikpCisJCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwogCWlmICghZG1pX2NoZWNrX3N5c3RlbShiYWRfbGlkX3N0YXR1cykgJiYgIWFjcGlfbGlkX29wZW4oKSkKIAkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CiAKQEAgLTEwMjAsNyArMTAzNSw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkgeworCWlmIChIQVNfUENIX1NQTElUKGRldikpIHsKIAkJaWYgKChJOTE1X1JFQUQoUENIX0xWRFMpICYgTFZEU19ERVRFQ1RFRCkgPT0gMCkKIAkJCXJldHVybjsKIAkJaWYgKGRldl9wcml2LT5lZHBfc3VwcG9ydCkgewpAQCAtMTEyMyw3ICsxMTM4LDcgQEAKIAkgKi8KIAogCS8qIElyb25sYWtlOiBGSVhNRSBpZiBzdGlsbCBmYWlsLCBub3QgdHJ5IHBpcGUgbW9kZSBub3cgKi8KLQlpZiAoSVNfSVJPTkxBS0UoZGV2KSkKKwlpZiAoSEFTX1BDSF9TUExJVChkZXYpKQogCQlnb3RvIGZhaWxlZDsKIAogCWx2ZHMgPSBJOTE1X1JFQUQoTFZEUyk7CkBAIC0xMTQ0LDcgKzExNTksNyBAQAogCQlnb3RvIGZhaWxlZDsKIAogb3V0OgotCWlmIChJU19JUk9OTEFLRShkZXYpKSB7CisJaWYgKEhBU19QQ0hfU1BMSVQoZGV2KSkgewogCQl1MzIgcHdtOwogCQkvKiBtYWtlIHN1cmUgUFdNIGlzIGVuYWJsZWQgKi8KIAkJcHdtID0gSTkxNV9SRUFEKEJMQ19QV01fQ1BVX0NUTDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ZlcmxheS5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ZlcmxheS5jCmluZGV4IDI2Mzk1OTEuLmQzNTVkMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX292ZXJsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vdmVybGF5LmMKQEAgLTE3Miw3ICsxNzIsNyBAQAogI2RlZmluZSBPRkNfVVBEQVRFCQkweDEKIAogI2RlZmluZSBPVkVSTEFZX05PTlBIWVNJQ0FMKGRldikgKElTX0czMyhkZXYpIHx8IElTX0k5NjVHKGRldikpCi0jZGVmaW5lIE9WRVJMQVlfRVhJU1RTKGRldikgKCFJU19HNFgoZGV2KSAmJiAhSVNfSVJPTkxBS0UoZGV2KSkKKyNkZWZpbmUgT1ZFUkxBWV9FWElTVFMoZGV2KSAoIUlTX0c0WChkZXYpICYmICFJU19JUk9OTEFLRShkZXYpICYmICFJU19HRU42KGRldikpCiAKIAogc3RhdGljIHN0cnVjdCBvdmVybGF5X3JlZ2lzdGVycyAqaW50ZWxfb3ZlcmxheV9tYXBfcmVnc19hdG9taWMoc3RydWN0IGludGVsX292ZXJsYXkgKm92ZXJsYXkpCkBAIC0xOTksMTYgKzE5OSwxMSBAQAogCiBzdGF0aWMgdm9pZCBpbnRlbF9vdmVybGF5X3VubWFwX3JlZ3NfYXRvbWljKHN0cnVjdCBpbnRlbF9vdmVybGF5ICpvdmVybGF5KQogewotCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBvdmVybGF5LT5kZXY7Ci0gICAgICAgIGRybV9pOTE1X3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCiAJaWYgKE9WRVJMQVlfTk9OUEhZU0lDQUwob3ZlcmxheS0+ZGV2KSkKIAkJaW9fbWFwcGluZ191bm1hcF9hdG9taWMob3ZlcmxheS0+dmlydF9hZGRyKTsKIAogCW92ZXJsYXktPnZpcnRfYWRkciA9IE5VTEw7CiAKLQlJOTE1X1JFQUQoT1ZBREQpOyAvKiBmbHVzaCB3YyBjYXNoZXMgKi8KLQogCXJldHVybjsKIH0KIApAQCAtMjI1LDkgKzIyMCw3IEBACiAJb3ZlcmxheS0+YWN0aXZlID0gMTsKIAlvdmVybGF5LT5od193ZWRnZWQgPSBORUVEU19XQUlUX0ZPUl9GTElQOwogCi0JQkVHSU5fTFBfUklORyg2KTsKLQlPVVRfUklORyhNSV9GTFVTSCk7Ci0JT1VUX1JJTkcoTUlfTk9PUCk7CisJQkVHSU5fTFBfUklORyg0KTsKIAlPVVRfUklORyhNSV9PVkVSTEFZX0ZMSVAgfCBNSV9PVkVSTEFZX09OKTsKIAlPVVRfUklORyhvdmVybGF5LT5mbGlwX2FkZHIgfCBPRkNfVVBEQVRFKTsKIAlPVVRfUklORyhNSV9XQUlUX0ZPUl9FVkVOVCB8IE1JX1dBSVRfRk9SX09WRVJMQVlfRkxJUCk7CkBAIC0yNjcsOSArMjYwLDcgQEAKIAlpZiAodG1wICYgKDEgPDwgMTcpKQogCQlEUk1fREVCVUcoIm92ZXJsYXkgdW5kZXJydW4sIERPVlNUQTogJXhcbiIsIHRtcCk7CiAKLQlCRUdJTl9MUF9SSU5HKDQpOwotCU9VVF9SSU5HKE1JX0ZMVVNIKTsKLQlPVVRfUklORyhNSV9OT09QKTsKKwlCRUdJTl9MUF9SSU5HKDIpOwogCU9VVF9SSU5HKE1JX09WRVJMQVlfRkxJUCB8IE1JX09WRVJMQVlfQ09OVElOVUUpOwogCU9VVF9SSU5HKGZsaXBfYWRkcik7CiAgICAgICAgIEFEVkFOQ0VfTFBfUklORygpOwpAQCAtMzM4LDkgKzMyOSw3IEBACiAJLyogd2FpdCBmb3Igb3ZlcmxheSB0byBnbyBpZGxlICovCiAJb3ZlcmxheS0+aHdfd2VkZ2VkID0gU1dJVENIX09GRl9TVEFHRV8xOwogCi0JQkVHSU5fTFBfUklORyg2KTsKLQlPVVRfUklORyhNSV9GTFVTSCk7Ci0JT1VUX1JJTkcoTUlfTk9PUCk7CisJQkVHSU5fTFBfUklORyg0KTsKIAlPVVRfUklORyhNSV9PVkVSTEFZX0ZMSVAgfCBNSV9PVkVSTEFZX0NPTlRJTlVFKTsKIAlPVVRfUklORyhmbGlwX2FkZHIpOwogICAgICAgICBPVVRfUklORyhNSV9XQUlUX0ZPUl9FVkVOVCB8IE1JX1dBSVRfRk9SX09WRVJMQVlfRkxJUCk7CkBAIC0zNTgsOSArMzQ3LDcgQEAKIAkvKiB0dXJuIG92ZXJsYXkgb2ZmICovCiAJb3ZlcmxheS0+aHdfd2VkZ2VkID0gU1dJVENIX09GRl9TVEFHRV8yOwogCi0JQkVHSU5fTFBfUklORyg2KTsKLSAgICAgICAgT1VUX1JJTkcoTUlfRkxVU0gpOwotICAgICAgICBPVVRfUklORyhNSV9OT09QKTsKKwlCRUdJTl9MUF9SSU5HKDQpOwogICAgICAgICBPVVRfUklORyhNSV9PVkVSTEFZX0ZMSVAgfCBNSV9PVkVSTEFZX09GRik7CiAJT1VUX1JJTkcoZmxpcF9hZGRyKTsKICAgICAgICAgT1VUX1JJTkcoTUlfV0FJVF9GT1JfRVZFTlQgfCBNSV9XQUlUX0ZPUl9PVkVSTEFZX0ZMSVApOwpAQCAtNDM1LDkgKzQyMiw3IEBACiAKIAkJCW92ZXJsYXktPmh3X3dlZGdlZCA9IFNXSVRDSF9PRkZfU1RBR0VfMjsKIAotCQkJQkVHSU5fTFBfUklORyg2KTsKLQkJCU9VVF9SSU5HKE1JX0ZMVVNIKTsKLQkJCU9VVF9SSU5HKE1JX05PT1ApOworCQkJQkVHSU5fTFBfUklORyg0KTsKIAkJCU9VVF9SSU5HKE1JX09WRVJMQVlfRkxJUCB8IE1JX09WRVJMQVlfT0ZGKTsKIAkJCU9VVF9SSU5HKGZsaXBfYWRkcik7CiAJCQlPVVRfUklORyhNSV9XQUlUX0ZPUl9FVkVOVCB8IE1JX1dBSVRfRk9SX09WRVJMQVlfRkxJUCk7CkBAIC0xMTc5LDcgKzExNjQsNyBAQAogb3V0X3VubG9jazoKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAltdXRleF91bmxvY2soJmRldi0+bW9kZV9jb25maWcubXV0ZXgpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKG5ld19ibyk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQobmV3X2JvKTsKIAlrZnJlZShwYXJhbXMpOwogCiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX3Nkdm8uYwppbmRleCA4MjY3OGQzLi40OGRhZWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9zZHZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfc2R2by5jCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiaTkxNV9kcm0uaCIKICNpbmNsdWRlICJpOTE1X2Rydi5oIgogI2luY2x1ZGUgImludGVsX3Nkdm9fcmVncy5oIgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgogCiBzdGF0aWMgY2hhciAqdHZfZm9ybWF0X25hbWVzW10gPSB7CiAJIk5UU0NfTSIgICAsICJOVFNDX0oiICAsICJOVFNDXzQ0MyIsCkBAIC0yMjgzLDYgKzIyODQsMjUgQEAKIAkJcmV0dXJuIDB4NzI7CiB9CiAKK3N0YXRpYyBpbnQgaW50ZWxfc2R2b19iYWRfdHZfY2FsbGJhY2soY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQoreworCURSTV9ERUJVR19LTVMoIklnbm9yaW5nIGJhZCBTRFZPIFRWIGNvbm5lY3RvciBmb3IgJXNcbiIsIGlkLT5pZGVudCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBpbnRlbF9zZHZvX2JhZF90dltdID0geworCXsKKwkJLmNhbGxiYWNrID0gaW50ZWxfc2R2b19iYWRfdHZfY2FsbGJhY2ssCisJCS5pZGVudCA9ICJJbnRlbEc0NS9JQ0gxMFIvRE1FMTczNyIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiSUJNIENPUlBPUkFUSU9OIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIjQ4MDA3ODQiKSwKKwkJfSwKKwl9LAorCisJeyB9CS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCiBzdGF0aWMgYm9vbAogaW50ZWxfc2R2b19vdXRwdXRfc2V0dXAoc3RydWN0IGludGVsX291dHB1dCAqaW50ZWxfb3V0cHV0LCB1aW50MTZfdCBmbGFncykKIHsKQEAgLTIzMjMsNyArMjM0Myw4IEBACiAJCQkJCSgxIDw8IElOVEVMX1NEVk9fTk9OX1RWX0NMT05FX0JJVCkgfAogCQkJCQkoMSA8PCBJTlRFTF9BTkFMT0dfQ0xPTkVfQklUKTsKIAkJfQotCX0gZWxzZSBpZiAoZmxhZ3MgJiBTRFZPX09VVFBVVF9TVklEMCkgeworCX0gZWxzZSBpZiAoKGZsYWdzICYgU0RWT19PVVRQVVRfU1ZJRDApICYmCisJCSAgICFkbWlfY2hlY2tfc3lzdGVtKGludGVsX3Nkdm9fYmFkX3R2KSkgewogCiAJCXNkdm9fcHJpdi0+Y29udHJvbGxlZF9vdXRwdXQgPSBTRFZPX09VVFBVVF9TVklEMDsKIAkJZW5jb2Rlci0+ZW5jb2Rlcl90eXBlID0gRFJNX01PREVfRU5DT0RFUl9UVkRBQzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvTWFrZWZpbGUKaW5kZXggNDhjMjkwYi4uMzJkYjgwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvTWFrZWZpbGUKQEAgLTE2LDcgKzE2LDcgQEAKICAgICAgICAgICAgICBudjA0X2ZpZm8ubyBudjEwX2ZpZm8ubyBudjQwX2ZpZm8ubyBudjUwX2ZpZm8ubyBcCiAgICAgICAgICAgICAgbnYwNF9ncmFwaC5vIG52MTBfZ3JhcGgubyBudjIwX2dyYXBoLm8gXAogICAgICAgICAgICAgIG52NDBfZ3JhcGgubyBudjUwX2dyYXBoLm8gXAotICAgICAgICAgICAgIG52NDBfZ3JjdHgubyBcCisgICAgICAgICAgICAgbnY0MF9ncmN0eC5vIG52NTBfZ3JjdHgubyBcCiAgICAgICAgICAgICAgbnYwNF9pbnN0bWVtLm8gbnY1MF9pbnN0bWVtLm8gXAogICAgICAgICAgICAgIG52NTBfY3J0Yy5vIG52NTBfZGFjLm8gbnY1MF9zb3IubyBcCiAgICAgICAgICAgICAgbnY1MF9jdXJzb3IubyBudjUwX2Rpc3BsYXkubyBudjUwX2ZiY29uLm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9hY3BpLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2FjcGkuYwppbmRleCA0ODIyN2U3Li4wZTA3MzBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2FjcGkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2FjcGkuYwpAQCAtMTEsNiArMTEsOCBAQAogI2luY2x1ZGUgIm5vdXZlYXVfZHJtLmgiCiAjaW5jbHVkZSAibnY1MF9kaXNwbGF5LmgiCiAKKyNpbmNsdWRlIDxsaW51eC92Z2Ffc3dpdGNoZXJvby5oPgorCiAjZGVmaW5lIE5PVVZFQVVfRFNNX1NVUFBPUlRFRCAweDAwCiAjZGVmaW5lIE5PVVZFQVVfRFNNX1NVUFBPUlRFRF9GVU5DVElPTlMgMHgwMAogCkBAIC0yOCwzMSArMzAsMzAgQEAKICNkZWZpbmUgTk9VVkVBVV9EU01fUE9XRVJfU1BFRUQgMHgwMQogI2RlZmluZSBOT1VWRUFVX0RTTV9QT1dFUl9TVEFNSU5BIDB4MDIKIAotc3RhdGljIGludCBub3V2ZWF1X2RzbShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgZnVuYywgaW50IGFyZywgaW50ICpyZXN1bHQpCi17Ci0Jc3RhdGljIGNoYXIgbXVpZFtdID0gewotCQkweEEwLCAweEEwLCAweDk1LCAweDlELCAweDYwLCAweDAwLCAweDQ4LCAweDRELAotCQkweEIzLCAweDRELCAweDdFLCAweDVGLCAweEVBLCAweDEyLCAweDlGLCAweEQ0LAotCX07CitzdGF0aWMgc3RydWN0IG5vdXZlYXVfZHNtX3ByaXYgeworCWJvb2wgZHNtX2RldGVjdGVkOworCWFjcGlfaGFuZGxlIGRoYW5kbGU7CisJYWNwaV9oYW5kbGUgZHNtX2hhbmRsZTsKK30gbm91dmVhdV9kc21fcHJpdjsKIAotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gZGV2LT5wZGV2OwotCXN0cnVjdCBhY3BpX2hhbmRsZSAqaGFuZGxlOworc3RhdGljIGNvbnN0IGNoYXIgbm91dmVhdV9kc21fbXVpZFtdID0geworCTB4QTAsIDB4QTAsIDB4OTUsIDB4OUQsIDB4NjAsIDB4MDAsIDB4NDgsIDB4NEQsCisJMHhCMywgMHg0RCwgMHg3RSwgMHg1RiwgMHhFQSwgMHgxMiwgMHg5RiwgMHhENCwKK307CisKK3N0YXRpYyBpbnQgbm91dmVhdV9kc20oYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgZnVuYywgaW50IGFyZywgaW50ICpyZXN1bHQpCit7CiAJc3RydWN0IGFjcGlfYnVmZmVyIG91dHB1dCA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKIAlzdHJ1Y3QgYWNwaV9vYmplY3RfbGlzdCBpbnB1dDsKIAl1bmlvbiBhY3BpX29iamVjdCBwYXJhbXNbNF07CiAJdW5pb24gYWNwaV9vYmplY3QgKm9iajsKIAlpbnQgZXJyOwogCi0JaGFuZGxlID0gREVWSUNFX0FDUElfSEFORExFKCZwZGV2LT5kZXYpOwotCi0JaWYgKCFoYW5kbGUpCi0JCXJldHVybiAtRU5PREVWOwotCiAJaW5wdXQuY291bnQgPSA0OwogCWlucHV0LnBvaW50ZXIgPSBwYXJhbXM7CiAJcGFyYW1zWzBdLnR5cGUgPSBBQ1BJX1RZUEVfQlVGRkVSOwotCXBhcmFtc1swXS5idWZmZXIubGVuZ3RoID0gc2l6ZW9mKG11aWQpOwotCXBhcmFtc1swXS5idWZmZXIucG9pbnRlciA9IChjaGFyICopbXVpZDsKKwlwYXJhbXNbMF0uYnVmZmVyLmxlbmd0aCA9IHNpemVvZihub3V2ZWF1X2RzbV9tdWlkKTsKKwlwYXJhbXNbMF0uYnVmZmVyLnBvaW50ZXIgPSAoY2hhciAqKW5vdXZlYXVfZHNtX211aWQ7CiAJcGFyYW1zWzFdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKIAlwYXJhbXNbMV0uaW50ZWdlci52YWx1ZSA9IDB4MDAwMDAxMDI7CiAJcGFyYW1zWzJdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKQEAgLTYyLDcgKzYzLDcgQEAKIAogCWVyciA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgIl9EU00iLCAmaW5wdXQsICZvdXRwdXQpOwogCWlmIChlcnIpIHsKLQkJTlZfSU5GTyhkZXYsICJmYWlsZWQgdG8gZXZhbHVhdGUgX0RTTTogJWRcbiIsIGVycik7CisJCXByaW50ayhLRVJOX0lORk8gImZhaWxlZCB0byBldmFsdWF0ZSBfRFNNOiAlZFxuIiwgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTg2LDQwICs4NywxMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IG5vdXZlYXVfaHlicmlkX3NldHVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG5vdXZlYXVfZHNtX3N3aXRjaF9tdXgoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgbXV4X2lkKQogewotCWludCByZXN1bHQ7CisJcmV0dXJuIG5vdXZlYXVfZHNtKGhhbmRsZSwgTk9VVkVBVV9EU01fTEVELCBtdXhfaWQsIE5VTEwpOworfQogCi0JaWYgKG5vdXZlYXVfZHNtKGRldiwgTk9VVkVBVV9EU01fUE9XRVIsIE5PVVZFQVVfRFNNX1BPV0VSX1NUQVRFLAotCQkJCQkJCQkmcmVzdWx0KSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlOVl9JTkZPKGRldiwgIl9EU00gaGFyZHdhcmUgc3RhdHVzIGdhdmUgMHgleFxuIiwgcmVzdWx0KTsKLQotCWlmIChyZXN1bHQpIHsgLyogRW5zdXJlIHRoYXQgdGhlIGV4dGVybmFsIEdQVSBpcyBlbmFibGVkICovCi0JCW5vdXZlYXVfZHNtKGRldiwgTk9VVkVBVV9EU01fTEVELCBOT1VWRUFVX0RTTV9MRURfU1BFRUQsIE5VTEwpOwotCQlub3V2ZWF1X2RzbShkZXYsIE5PVVZFQVVfRFNNX1BPV0VSLCBOT1VWRUFVX0RTTV9QT1dFUl9TUEVFRCwKLQkJCQkJCQkJCU5VTEwpOwotCX0gZWxzZSB7IC8qIFN0YW1pbmEgbW9kZSAtIGRpc2FibGUgdGhlIGV4dGVybmFsIEdQVSAqLwotCQlub3V2ZWF1X2RzbShkZXYsIE5PVVZFQVVfRFNNX0xFRCwgTk9VVkVBVV9EU01fTEVEX1NUQU1JTkEsCi0JCQkJCQkJCQlOVUxMKTsKLQkJbm91dmVhdV9kc20oZGV2LCBOT1VWRUFVX0RTTV9QT1dFUiwgTk9VVkVBVV9EU01fUE9XRVJfU1RBTUlOQSwKLQkJCQkJCQkJCU5VTEwpOwotCX0KLQorc3RhdGljIGludCBub3V2ZWF1X2RzbV9zZXRfZGlzY3JldGVfc3RhdGUoYWNwaV9oYW5kbGUgaGFuZGxlLCBlbnVtIHZnYV9zd2l0Y2hlcm9vX3N0YXRlIHN0YXRlKQoreworCWludCBhcmc7CisJaWYgKHN0YXRlID09IFZHQV9TV0lUQ0hFUk9PX09OKQorCQlhcmcgPSBOT1VWRUFVX0RTTV9QT1dFUl9TUEVFRDsKKwllbHNlCisJCWFyZyA9IE5PVVZFQVVfRFNNX1BPV0VSX1NUQU1JTkE7CisJbm91dmVhdV9kc20oaGFuZGxlLCBOT1VWRUFVX0RTTV9QT1dFUiwgYXJnLCBOVUxMKTsKIAlyZXR1cm4gMDsKIH0KIAotYm9vbCBub3V2ZWF1X2RzbV9wcm9iZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBub3V2ZWF1X2RzbV9zd2l0Y2h0byhlbnVtIHZnYV9zd2l0Y2hlcm9vX2NsaWVudF9pZCBpZCkKIHsKLQlpbnQgc3VwcG9ydCA9IDA7CisJaWYgKGlkID09IFZHQV9TV0lUQ0hFUk9PX0lHRCkKKwkJcmV0dXJuIG5vdXZlYXVfZHNtX3N3aXRjaF9tdXgobm91dmVhdV9kc21fcHJpdi5kc21faGFuZGxlLCBOT1VWRUFVX0RTTV9MRURfU1RBTUlOQSk7CisJZWxzZQorCQlyZXR1cm4gbm91dmVhdV9kc21fc3dpdGNoX211eChub3V2ZWF1X2RzbV9wcml2LmRzbV9oYW5kbGUsIE5PVVZFQVVfRFNNX0xFRF9TUEVFRCk7Cit9CiAKLQlpZiAobm91dmVhdV9kc20oZGV2LCBOT1VWRUFVX0RTTV9TVVBQT1JURUQsCi0JCQkJTk9VVkVBVV9EU01fU1VQUE9SVEVEX0ZVTkNUSU9OUywgJnN1cHBvcnQpKQorc3RhdGljIGludCBub3V2ZWF1X2RzbV9wb3dlcl9zdGF0ZShlbnVtIHZnYV9zd2l0Y2hlcm9vX2NsaWVudF9pZCBpZCwKKwkJCQkgICBlbnVtIHZnYV9zd2l0Y2hlcm9vX3N0YXRlIHN0YXRlKQoreworCWlmIChpZCA9PSBWR0FfU1dJVENIRVJPT19JR0QpCisJCXJldHVybiAwOworCisJcmV0dXJuIG5vdXZlYXVfZHNtX3NldF9kaXNjcmV0ZV9zdGF0ZShub3V2ZWF1X2RzbV9wcml2LmRzbV9oYW5kbGUsIHN0YXRlKTsKK30KKworc3RhdGljIGludCBub3V2ZWF1X2RzbV9pbml0KHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbm91dmVhdV9kc21fZ2V0X2NsaWVudF9pZChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpZiAobm91dmVhdV9kc21fcHJpdi5kaGFuZGxlID09IERFVklDRV9BQ1BJX0hBTkRMRSgmcGRldi0+ZGV2KSkKKwkJcmV0dXJuIFZHQV9TV0lUQ0hFUk9PX0lHRDsKKwllbHNlCisJCXJldHVybiBWR0FfU1dJVENIRVJPT19ESVM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmdhX3N3aXRjaGVyb29faGFuZGxlciBub3V2ZWF1X2RzbV9oYW5kbGVyID0geworCS5zd2l0Y2h0byA9IG5vdXZlYXVfZHNtX3N3aXRjaHRvLAorCS5wb3dlcl9zdGF0ZSA9IG5vdXZlYXVfZHNtX3Bvd2VyX3N0YXRlLAorCS5pbml0ID0gbm91dmVhdV9kc21faW5pdCwKKwkuZ2V0X2NsaWVudF9pZCA9IG5vdXZlYXVfZHNtX2dldF9jbGllbnRfaWQsCit9OworCitzdGF0aWMgYm9vbCBub3V2ZWF1X2RzbV9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJYWNwaV9oYW5kbGUgZGhhbmRsZSwgbnZpZGlhX2hhbmRsZTsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJaW50IHJldDsKKwl1aW50MzJfdCByZXN1bHQ7CisKKwlkaGFuZGxlID0gREVWSUNFX0FDUElfSEFORExFKCZwZGV2LT5kZXYpOworCWlmICghZGhhbmRsZSkKKwkJcmV0dXJuIGZhbHNlOworCXN0YXR1cyA9IGFjcGlfZ2V0X2hhbmRsZShkaGFuZGxlLCAiX0RTTSIsICZudmlkaWFfaGFuZGxlKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldD0gbm91dmVhdV9kc20obnZpZGlhX2hhbmRsZSwgTk9VVkVBVV9EU01fU1VQUE9SVEVELAorCQkJIE5PVVZFQVVfRFNNX1NVUFBPUlRFRF9GVU5DVElPTlMsICZyZXN1bHQpOworCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlpZiAoIXN1cHBvcnQpCi0JCXJldHVybiBmYWxzZTsKLQorCW5vdXZlYXVfZHNtX3ByaXYuZGhhbmRsZSA9IGRoYW5kbGU7CisJbm91dmVhdV9kc21fcHJpdi5kc21faGFuZGxlID0gbnZpZGlhX2hhbmRsZTsKIAlyZXR1cm4gdHJ1ZTsKIH0KKworc3RhdGljIGJvb2wgbm91dmVhdV9kc21fZGV0ZWN0KHZvaWQpCit7CisJY2hhciBhY3BpX21ldGhvZF9uYW1lWzI1NV0gPSB7IDAgfTsKKwlzdHJ1Y3QgYWNwaV9idWZmZXIgYnVmZmVyID0ge3NpemVvZihhY3BpX21ldGhvZF9uYW1lKSwgYWNwaV9tZXRob2RfbmFtZX07CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOworCWludCBoYXNfZHNtID0gMDsKKwlpbnQgdmdhX2NvdW50ID0gMDsKKwl3aGlsZSAoKHBkZXYgPSBwY2lfZ2V0X2NsYXNzKFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCBwZGV2KSkgIT0gTlVMTCkgeworCQl2Z2FfY291bnQrKzsKKworCQloYXNfZHNtIHw9IChub3V2ZWF1X2RzbV9wY2lfcHJvYmUocGRldikgPT0gdHJ1ZSk7CisJfQorCisJaWYgKHZnYV9jb3VudCA9PSAyICYmIGhhc19kc20pIHsKKwkJYWNwaV9nZXRfbmFtZShub3V2ZWF1X2RzbV9wcml2LmRzbV9oYW5kbGUsIEFDUElfRlVMTF9QQVRITkFNRSwgJmJ1ZmZlcik7CisJCXByaW50ayhLRVJOX0lORk8gIlZHQSBzd2l0Y2hlcm9vOiBkZXRlY3RlZCBEU00gc3dpdGNoaW5nIG1ldGhvZCAlcyBoYW5kbGVcbiIsCisJCSAgICAgICBhY3BpX21ldGhvZF9uYW1lKTsKKwkJbm91dmVhdV9kc21fcHJpdi5kc21fZGV0ZWN0ZWQgPSB0cnVlOworCQlyZXR1cm4gdHJ1ZTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCit2b2lkIG5vdXZlYXVfcmVnaXN0ZXJfZHNtX2hhbmRsZXIodm9pZCkKK3sKKwlib29sIHI7CisKKwlyID0gbm91dmVhdV9kc21fZGV0ZWN0KCk7CisJaWYgKCFyKQorCQlyZXR1cm47CisKKwl2Z2Ffc3dpdGNoZXJvb19yZWdpc3Rlcl9oYW5kbGVyKCZub3V2ZWF1X2RzbV9oYW5kbGVyKTsKK30KKwordm9pZCBub3V2ZWF1X3VucmVnaXN0ZXJfZHNtX2hhbmRsZXIodm9pZCkKK3sKKwl2Z2Ffc3dpdGNoZXJvb191bnJlZ2lzdGVyX2hhbmRsZXIoKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9iaW9zLmMKaW5kZXggMGU5Y2QxZC4uNzViY2VlZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5jCkBAIC0zMTEsMTEgKzMxMSwxMSBAQAogCiAJLyogQzUxIGhhcyBtaXNhbGlnbmVkIHJlZ3Mgb24gcHVycG9zZS4gTWFydmVsbG91cyAqLwogCWlmIChyZWcgJiAweDIgfHwKLQkgICAgKHJlZyAmIDB4MSAmJiBkZXZfcHJpdi0+VkJJT1MucHViLmNoaXBfdmVyc2lvbiAhPSAweDUxKSkKKwkgICAgKHJlZyAmIDB4MSAmJiBkZXZfcHJpdi0+dmJpb3MuY2hpcF92ZXJzaW9uICE9IDB4NTEpKQogCQlOVl9FUlJPUihkZXYsICI9PT09PT09IG1pc2FsaWduZWQgcmVnIDB4JTA4WCA9PT09PT09XG4iLCByZWcpOwogCiAJLyogd2FybiBvbiBDNTEgcmVncyB0aGF0IGhhdmVuJ3QgYmVlbiB2ZXJpZmllZCBhY2Nlc3NpYmxlIGluIHRyYWNpbmcgKi8KLQlpZiAocmVnICYgMHgxICYmIGRldl9wcml2LT5WQklPUy5wdWIuY2hpcF92ZXJzaW9uID09IDB4NTEgJiYKKwlpZiAocmVnICYgMHgxICYmIGRldl9wcml2LT52Ymlvcy5jaGlwX3ZlcnNpb24gPT0gMHg1MSAmJgogCSAgICByZWcgIT0gMHgxMzBkICYmIHJlZyAhPSAweDEzMTEgJiYgcmVnICE9IDB4NjAwODFkKQogCQlOVl9XQVJOKGRldiwgIj09PSBDNTEgbWlzYWxpZ25lZCByZWcgMHglMDhYIG5vdCB2ZXJpZmllZCA9PT1cbiIsCiAJCQlyZWcpOwpAQCAtNDIwLDcgKzQyMCw3IEBACiAJTE9HX09MRF9WQUxVRShiaW9zX3JkMzIoYmlvcywgcmVnKSk7CiAJQklPU0xPRyhiaW9zLCAiCVdyaXRlOiBSZWc6IDB4JTA4WCwgRGF0YTogMHglMDhYXG4iLCByZWcsIGRhdGEpOwogCi0JaWYgKGRldl9wcml2LT5WQklPUy5leGVjdXRlKSB7CisJaWYgKGRldl9wcml2LT52Ymlvcy5leGVjdXRlKSB7CiAJCXN0aWxsX2FsaXZlKCk7CiAJCW52X3dyMzIoYmlvcy0+ZGV2LCByZWcsIGRhdGEpOwogCX0KQEAgLTY0Nyw3ICs2NDcsNyBAQAogCXJlZzAgPSAocmVnMCAmIDB4ZmZmOGZmZmYpIHwgKHBsbC5sb2cyUCA8PCAxNik7CiAJcmVnMSA9IChyZWcxICYgMHhmZmZmMDAwMCkgfCAocGxsLk4xIDw8IDgpIHwgcGxsLk0xOwogCi0JaWYgKGRldl9wcml2LT5WQklPUy5leGVjdXRlKSB7CisJaWYgKGRldl9wcml2LT52Ymlvcy5leGVjdXRlKSB7CiAJCXN0aWxsX2FsaXZlKCk7CiAJCW52X3dyMzIoZGV2LCByZWcgKyA0LCByZWcxKTsKIAkJbnZfd3IzMihkZXYsIHJlZyArIDAsIHJlZzApOwpAQCAtNjg5LDcgKzY4OSw3IEBACiBzdGF0aWMgaW50IGRjYl9lbnRyeV9pZHhfZnJvbV9jcnRjaGVhZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CiAKIAkvKgogCSAqIEZvciB0aGUgcmVzdWx0cyBvZiB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNvcnJlY3QsIENSNDQgbXVzdCBoYXZlIGJlZW4KQEAgLTcwMCw3ICs3MDAsNyBAQAogCiAJdWludDhfdCBkY2JfZW50cnkgPSBOVlJlYWRWZ2FDcnRjNTc1OChkZXYsIGJpb3MtPnN0YXRlLmNydGNoZWFkLCAwKTsKIAotCWlmIChkY2JfZW50cnkgPiBiaW9zLT5iZGNiLmRjYi5lbnRyaWVzKSB7CisJaWYgKGRjYl9lbnRyeSA+IGJpb3MtPmRjYi5lbnRyaWVzKSB7CiAJCU5WX0VSUk9SKGRldiwgIkNSNTggZG9lc24ndCBoYXZlIGEgdmFsaWQgRENCIGVudHJ5IGN1cnJlbnRseSAiCiAJCQkJIiglMDJYKVxuIiwgZGNiX2VudHJ5KTsKIAkJZGNiX2VudHJ5ID0gMHg3ZjsJLyogdW51c2VkIC8gaW52YWxpZCBtYXJrZXIgKi8KQEAgLTcxMywyNSArNzEzLDI2IEBACiBpbml0X2kyY19kZXZpY2VfZmluZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaTJjX2luZGV4KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGJpb3NfcGFyc2VkX2RjYiAqYmRjYiA9ICZkZXZfcHJpdi0+VkJJT1MuYmRjYjsKKwlzdHJ1Y3QgZGNiX3RhYmxlICpkY2IgPSAmZGV2X3ByaXYtPnZiaW9zLmRjYjsKIAogCWlmIChpMmNfaW5kZXggPT0gMHhmZikgewogCQkvKiBub3RlOiBkY2JfZW50cnlfaWR4X2Zyb21fY3J0Y2hlYWQgbmVlZHMgcHJlLXNjcmlwdCBzZXQtdXAgKi8KIAkJaW50IGlkeCA9IGRjYl9lbnRyeV9pZHhfZnJvbV9jcnRjaGVhZChkZXYpLCBzaGlmdCA9IDA7Ci0JCWludCBkZWZhdWx0X2luZGljZXMgPSBiZGNiLT5pMmNfZGVmYXVsdF9pbmRpY2VzOworCQlpbnQgZGVmYXVsdF9pbmRpY2VzID0gZGNiLT5pMmNfZGVmYXVsdF9pbmRpY2VzOwogCi0JCWlmIChpZHggIT0gMHg3ZiAmJiBiZGNiLT5kY2IuZW50cnlbaWR4XS5pMmNfdXBwZXJfZGVmYXVsdCkKKwkJaWYgKGlkeCAhPSAweDdmICYmIGRjYi0+ZW50cnlbaWR4XS5pMmNfdXBwZXJfZGVmYXVsdCkKIAkJCXNoaWZ0ID0gNDsKIAogCQlpMmNfaW5kZXggPSAoZGVmYXVsdF9pbmRpY2VzID4+IHNoaWZ0KSAmIDB4ZjsKIAl9CiAJaWYgKGkyY19pbmRleCA9PSAweDgwKQkvKiBnODArICovCi0JCWkyY19pbmRleCA9IGJkY2ItPmkyY19kZWZhdWx0X2luZGljZXMgJiAweGY7CisJCWkyY19pbmRleCA9IGRjYi0+aTJjX2RlZmF1bHRfaW5kaWNlcyAmIDB4ZjsKIAogCXJldHVybiBub3V2ZWF1X2kyY19maW5kKGRldiwgaTJjX2luZGV4KTsKIH0KIAotc3RhdGljIHVpbnQzMl90IGdldF90bWRzX2luZGV4X3JlZyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1aW50OF90IG1sdikKK3N0YXRpYyB1aW50MzJfdAorZ2V0X3RtZHNfaW5kZXhfcmVnKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQ4X3QgbWx2KQogewogCS8qCiAJICogRm9yIG1sdiA8IDB4ODAsIGl0IGlzIGFuIGluZGV4IGludG8gYSB0YWJsZSBvZiBUTURTIGJhc2UgYWRkcmVzc2VzLgpAQCAtNzQ0LDYgKzc0NSw3IEBACiAJICovCiAKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPnZiaW9zOwogCWNvbnN0IGludCBwcmFtZGFjX29mZnNldFsxM10gPSB7CiAJCTAsIDAsIDB4OCwgMCwgMHgyMDAwLCAwLCAwLCAwLCAweDIwMDgsIDAsIDAsIDAsIDB4MjAwMCB9OwogCWNvbnN0IHVpbnQzMl90IHByYW1kYWNfdGFibGVbNF0gPSB7CkBAIC03NTYsMTMgKzc1OCwxMiBAQAogCQlkY2JfZW50cnkgPSBkY2JfZW50cnlfaWR4X2Zyb21fY3J0Y2hlYWQoZGV2KTsKIAkJaWYgKGRjYl9lbnRyeSA9PSAweDdmKQogCQkJcmV0dXJuIDA7Ci0JCWRhY29mZnNldCA9IHByYW1kYWNfb2Zmc2V0WwotCQkJCWRldl9wcml2LT5WQklPUy5iZGNiLmRjYi5lbnRyeVtkY2JfZW50cnldLm9yXTsKKwkJZGFjb2Zmc2V0ID0gcHJhbWRhY19vZmZzZXRbYmlvcy0+ZGNiLmVudHJ5W2RjYl9lbnRyeV0ub3JdOwogCQlpZiAobWx2ID09IDB4ODEpCiAJCQlkYWNvZmZzZXQgXj0gODsKIAkJcmV0dXJuIDB4NjgwOGIwICsgZGFjb2Zmc2V0OwogCX0gZWxzZSB7Ci0JCWlmIChtbHYgPiBBUlJBWV9TSVpFKHByYW1kYWNfdGFibGUpKSB7CisJCWlmIChtbHYgPj0gQVJSQVlfU0laRShwcmFtZGFjX3RhYmxlKSkgewogCQkJTlZfRVJST1IoZGV2LCAiTWFnaWMgTG9va3VwIFZhbHVlIHRvbyBiaWcgKCUwMlgpXG4iLAogCQkJCQkJCQkJbWx2KTsKIAkJCXJldHVybiAwOwpAQCAtMjU3NCwxOSArMjU3NSwxOSBAQAogCiAJY29uc3QgdWludDMyX3QgbnY1MF9ncGlvX3JlZ1s0XSA9IHsgMHhlMTA0LCAweGUxMDgsIDB4ZTI4MCwgMHhlMjg0IH07CiAJY29uc3QgdWludDMyX3QgbnY1MF9ncGlvX2N0bFsyXSA9IHsgMHhlMTAwLCAweGUyOGMgfTsKLQljb25zdCB1aW50OF90ICpncGlvX3RhYmxlID0gJmJpb3MtPmRhdGFbYmlvcy0+YmRjYi5ncGlvX3RhYmxlX3B0cl07CisJY29uc3QgdWludDhfdCAqZ3Bpb190YWJsZSA9ICZiaW9zLT5kYXRhW2Jpb3MtPmRjYi5ncGlvX3RhYmxlX3B0cl07CiAJY29uc3QgdWludDhfdCAqZ3Bpb19lbnRyeTsKIAlpbnQgaTsKIAogCWlmICghaWV4ZWMtPmV4ZWN1dGUpCiAJCXJldHVybiAxOwogCi0JaWYgKGJpb3MtPmJkY2IudmVyc2lvbiAhPSAweDQwKSB7CisJaWYgKGJpb3MtPmRjYi52ZXJzaW9uICE9IDB4NDApIHsKIAkJTlZfRVJST1IoYmlvcy0+ZGV2LCAiRENCIHRhYmxlIG5vdCB2ZXJzaW9uIDQuMFxuIik7CiAJCXJldHVybiAwOwogCX0KIAotCWlmICghYmlvcy0+YmRjYi5ncGlvX3RhYmxlX3B0cikgeworCWlmICghYmlvcy0+ZGNiLmdwaW9fdGFibGVfcHRyKSB7CiAJCU5WX1dBUk4oYmlvcy0+ZGV2LCAiSW52YWxpZCBwb2ludGVyIHRvIElOSVRfOEUgdGFibGVcbiIpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0zMTIzLDcgKzMxMjQsNyBAQAogCQkgICAgICBzdHJ1Y3QgZGNiX2VudHJ5ICpkY2JlbnQsIGludCBoZWFkLCBib29sIGRsKQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CiAJc3RydWN0IGluaXRfZXhlYyBpZXhlYyA9IHt0cnVlLCBmYWxzZX07CiAKIAlOVl9UUkFDRShkZXYsICIweCUwNFg6IFBhcnNpbmcgZGlnaXRhbCBvdXRwdXQgc2NyaXB0IHRhYmxlXG4iLApAQCAtMzE0MCw3ICszMTQxLDcgQEAKIHN0YXRpYyBpbnQgY2FsbF9sdmRzX21hbnVmYWN0dXJlcl9zY3JpcHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRjYl9lbnRyeSAqZGNiZW50LCBpbnQgaGVhZCwgZW51bSBMVkRTX3NjcmlwdCBzY3JpcHQpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT5WQklPUzsKKwlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT52YmlvczsKIAl1aW50OF90IHN1YiA9IGJpb3MtPmRhdGFbYmlvcy0+ZnAueGxhdGVkX2VudHJ5ICsgc2NyaXB0XSArIChiaW9zLT5mcC5saW5rX2NfaW5jcmVtZW50ICYmIGRjYmVudC0+b3IgJiBPVVRQVVRfQyA/IDEgOiAwKTsKIAl1aW50MTZfdCBzY3JpcHRvZnMgPSBST00xNihiaW9zLT5kYXRhW2Jpb3MtPmluaXRfc2NyaXB0X3RibHNfcHRyICsgc3ViICogMl0pOwogCkBAIC0zMTk0LDcgKzMxOTUsNyBAQAogCSAqIG9mIGEgbGlzdCBvZiBweGNsa3MgYW5kIHNjcmlwdCBwb2ludGVycy4KIAkgKi8KIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPlZCSU9TOworCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPnZiaW9zOwogCXVuc2lnbmVkIGludCBvdXRwdXRzZXQgPSAoZGNiZW50LT5vciA9PSA0KSA/IDEgOiAwOwogCXVpbnQxNl90IHNjcmlwdHB0ciA9IDAsIGNsa3RhYmxlOwogCXVpbnQ4X3QgY2xrdGFibGVwdHIgPSAwOwpAQCAtMzI2MSw3ICszMjYyLDcgQEAKIAkgKi8KIAogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CiAJdWludDhfdCBsdmRzX3ZlciA9IGJpb3MtPmRhdGFbYmlvcy0+ZnAubHZkc21hbnVmYWN0dXJlcnBvaW50ZXJdOwogCXVpbnQzMl90IHNlbF9jbGtfYmluZGluZywgc2VsX2NsazsKIAlpbnQgcmV0OwpAQCAtMzM5NSw3ICszMzk2LDcgQEAKICNpZm5kZWYgX19wb3dlcnBjX18KIAkJTlZfRVJST1IoZGV2LCAiUG9pbnRlciB0byBmbGF0IHBhbmVsIHRhYmxlIGludmFsaWRcbiIpOwogI2VuZGlmCi0JCWJpb3MtPnB1Yi5kaWdpdGFsX21pbl9mcm9udF9wb3JjaCA9IDB4NGI7CisJCWJpb3MtPmRpZ2l0YWxfbWluX2Zyb250X3BvcmNoID0gMHg0YjsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zNDI4LDcgKzM0MjksNyBAQAogCQkgKiBmcHRhYmxlWzRdIGlzIHRoZSBtaW5pbXVtCiAJCSAqIFJBTURBQ19GUF9IQ1JUQyAtPiBSQU1EQUNfRlBfSFNZTkNfU1RBUlQgZ2FwCiAJCSAqLwotCQliaW9zLT5wdWIuZGlnaXRhbF9taW5fZnJvbnRfcG9yY2ggPSBmcHRhYmxlWzRdOworCQliaW9zLT5kaWdpdGFsX21pbl9mcm9udF9wb3JjaCA9IGZwdGFibGVbNF07CiAJCW9mcyA9IC03OwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMzQ2Nyw3ICszNDY4LDcgQEAKIAogCS8qIG52NHggY2FyZHMgbmVlZCBib3RoIGEgc3RyYXAgdmFsdWUgYW5kIGZwaW5kZXggb2YgMHhmIHRvIHVzZSBEREMgKi8KIAlpZiAobHRoLmx2ZHNfdmVyID4gMHgxMCkKLQkJYmlvcy0+cHViLmZwX25vX2RkYyA9IGZwc3RyYXBwaW5nICE9IDB4ZiB8fCBmcGluZGV4ICE9IDB4ZjsKKwkJYmlvcy0+ZnBfbm9fZGRjID0gZnBzdHJhcHBpbmcgIT0gMHhmIHx8IGZwaW5kZXggIT0gMHhmOwogCiAJLyoKIAkgKiBJZiBlaXRoZXIgdGhlIHN0cmFwIG9yIHhsYXRlZCBmcGluZGV4IHZhbHVlIGFyZSAweGYgdGhlcmUgaXMgbm8KQEAgLTM0OTEsNyArMzQ5Miw3IEBACiBib29sIG5vdXZlYXVfYmlvc19mcF9tb2RlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CiAJdWludDhfdCAqbW9kZV9lbnRyeSA9ICZiaW9zLT5kYXRhW2Jpb3MtPmZwLm1vZGVfcHRyXTsKIAogCWlmICghbW9kZSkJLyoganVzdCBjaGVja2luZyB3aGV0aGVyIHdlIGNhbiBwcm9kdWNlIGEgbW9kZSAqLwpAQCAtMzU0NCw3ICszNTQ1LDcgQEAKIAkgKiBhdCB3aGljaCBtb2RlcyBzaG91bGQgYmUgc2V0IHVwIGluIHRoZSBkdWFsIGxpbmsgc3R5bGUuCiAJICoKIAkgKiBGb2xsb3dpbmcgdGhlIGhlYWRlciwgdGhlIEJNUCAodmVyIDB4YSkgdGFibGUgaGFzIHNldmVyYWwgcmVjb3JkcywKLQkgKiBpbmRleGVkIGJ5IGEgc2VwZXJhdGUgeGxhdCB0YWJsZSwgaW5kZXhlZCBpbiB0dXJuIGJ5IHRoZSBmcCBzdHJhcCBpbgorCSAqIGluZGV4ZWQgYnkgYSBzZXBhcmF0ZSB4bGF0IHRhYmxlLCBpbmRleGVkIGluIHR1cm4gYnkgdGhlIGZwIHN0cmFwIGluCiAJICogRVhUREVWX0JPT1QuIEVhY2ggcmVjb3JkIGhhZCBhIGNvbmZpZyBieXRlLCBmb2xsb3dlZCBieSA2IHNjcmlwdAogCSAqIG51bWJlcnMgZm9yIHVzZSBieSBJTklUX1NVQiB3aGljaCBjb250cm9sbGVkIHBhbmVsIGluaXQgYW5kIHBvd2VyLAogCSAqIGFuZCBmaW5hbGx5IGEgZHdvcmQgb2YgbXMgdG8gc2xlZXAgYmV0d2VlbiBwb3dlciBvZmYgYW5kIG9uCkBAIC0zNTYyLDExICszNTYzLDExIEBACiAJICogdW50aWwgbGF0ZXIsIHdoZW4gdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIHdpdGggbm9uLXplcm8gcHhjbGsKIAkgKi8KIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPlZCSU9TOworCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPnZiaW9zOwogCWludCBmcHN0cmFwcGluZyA9IGdldF9mcF9zdHJhcChkZXYsIGJpb3MpLCBsdmRzbWFudWZhY3R1cmVyaW5kZXggPSAwOwogCXN0cnVjdCBsdmRzdGFibGVoZWFkZXIgbHRoOwogCXVpbnQxNl90IGx2ZHNvZnM7Ci0JaW50IHJldCwgY2hpcF92ZXJzaW9uID0gYmlvcy0+cHViLmNoaXBfdmVyc2lvbjsKKwlpbnQgcmV0LCBjaGlwX3ZlcnNpb24gPSBiaW9zLT5jaGlwX3ZlcnNpb247CiAKIAlyZXQgPSBwYXJzZV9sdmRzX21hbnVmYWN0dXJlcl90YWJsZV9oZWFkZXIoZGV2LCBiaW9zLCAmbHRoKTsKIAlpZiAocmV0KQpAQCAtMzY4Miw3ICszNjgzLDcgQEAKIAkJCSB1aW50MTZfdCByZWNvcmQsIGludCByZWNvcmRfbGVuLCBpbnQgcmVjb3JkX25yKQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CiAJdWludDMyX3QgZW50cnk7CiAJdWludDE2X3QgdGFibGU7CiAJaW50IGksIHY7CkBAIC0zNzE2LDcgKzM3MTcsNyBAQAogCQkgICAgICBpbnQgKmxlbmd0aCkKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPlZCSU9TOworCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPnZiaW9zOwogCXVpbnQ4X3QgKnRhYmxlOwogCiAJaWYgKCFiaW9zLT5kaXNwbGF5LmRwX3RhYmxlX3B0cikgewpAQCAtMzcyNSw3ICszNzI2LDcgQEAKIAl9CiAJdGFibGUgPSAmYmlvcy0+ZGF0YVtiaW9zLT5kaXNwbGF5LmRwX3RhYmxlX3B0cl07CiAKLQlpZiAodGFibGVbMF0gIT0gMHgyMSkgeworCWlmICh0YWJsZVswXSAhPSAweDIwICYmIHRhYmxlWzBdICE9IDB4MjEpIHsKIAkJTlZfRVJST1IoZGV2LCAiRGlzcGxheVBvcnQgdGFibGUgdmVyc2lvbiAweCUwMnggdW5rbm93blxuIiwKIAkJCSB0YWJsZVswXSk7CiAJCXJldHVybiBOVUxMOwpAQCAtMzc2NSw3ICszNzY2LDcgQEAKIAkgKi8KIAogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CiAJdWludDhfdCAqdGFibGUgPSAmYmlvcy0+ZGF0YVtiaW9zLT5kaXNwbGF5LnNjcmlwdF90YWJsZV9wdHJdOwogCXVpbnQ4X3QgKm90YWJsZSA9IE5VTEw7CiAJdWludDE2X3Qgc2NyaXB0OwpAQCAtMzkxOCw4ICszOTE5LDggQEAKIAkgKi8KIAogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7Ci0JaW50IGN2ID0gYmlvcy0+cHViLmNoaXBfdmVyc2lvbjsKKwlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT52YmlvczsKKwlpbnQgY3YgPSBiaW9zLT5jaGlwX3ZlcnNpb247CiAJdWludDE2X3QgY2xrdGFibGUgPSAwLCBzY3JpcHRwdHI7CiAJdWludDMyX3Qgc2VsX2Nsa19iaW5kaW5nLCBzZWxfY2xrOwogCkBAIC0zOTc4LDggKzM5NzksOCBAQAogCSAqLwogCiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT5WQklPUzsKLQlpbnQgY3YgPSBiaW9zLT5wdWIuY2hpcF92ZXJzaW9uLCBwbGxpbmRleCA9IDA7CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CisJaW50IGN2ID0gYmlvcy0+Y2hpcF92ZXJzaW9uLCBwbGxpbmRleCA9IDA7CiAJdWludDhfdCBwbGxfbGltX3ZlciA9IDAsIGhlYWRlcmxlbiA9IDAsIHJlY29yZGxlbiA9IDAsIGVudHJpZXMgPSAwOwogCXVpbnQzMl90IGNyeXN0YWxfc3RyYXBfbWFzaywgY3J5c3RhbF9zdHJhcHM7CiAKQEAgLTQzMzIsNyArNDMzMyw3IEBACiAJICovCiAKIAliaW9zLT5tYWpvcl92ZXJzaW9uID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAzXTsKLQliaW9zLT5wdWIuY2hpcF92ZXJzaW9uID0gYmlvcy0+ZGF0YVtvZmZzZXQgKyAyXTsKKwliaW9zLT5jaGlwX3ZlcnNpb24gPSBiaW9zLT5kYXRhW29mZnNldCArIDJdOwogCU5WX1RSQUNFKGRldiwgIkJpb3MgdmVyc2lvbiAlMDJ4LiUwMnguJTAyeC4lMDJ4XG4iLAogCQkgYmlvcy0+ZGF0YVtvZmZzZXQgKyAzXSwgYmlvcy0+ZGF0YVtvZmZzZXQgKyAyXSwKIAkJIGJpb3MtPmRhdGFbb2Zmc2V0ICsgMV0sIGJpb3MtPmRhdGFbb2Zmc2V0XSk7CkBAIC00NDAyLDcgKzQ0MDMsNyBAQAogCX0KIAogCS8qIEZpcnN0IGVudHJ5IGlzIG5vcm1hbCBkYWMsIDJuZCB0di1vdXQgcGVyaGFwcz8gKi8KLQliaW9zLT5wdWIuZGFjdGVzdHZhbCA9IFJPTTMyKGJpb3MtPmRhdGFbbG9hZF90YWJsZV9wdHIgKyBoZWFkZXJsZW5dKSAmIDB4M2ZmOworCWJpb3MtPmRhY3Rlc3R2YWwgPSBST00zMihiaW9zLT5kYXRhW2xvYWRfdGFibGVfcHRyICsgaGVhZGVybGVuXSkgJiAweDNmZjsKIAogCXJldHVybiAwOwogfQpAQCAtNDUyNiw4ICs0NTI3LDggQEAKIAkJcmV0dXJuIC1FTk9TWVM7CiAJfQogCi0JYmlvcy0+cHViLmRhY3Rlc3R2YWwgPSBST00zMihiaW9zLT5kYXRhW2RhY2NtcG9mZnNldCArIGRhY2hlYWRlcmxlbl0pOwotCWJpb3MtPnB1Yi50dmRhY3Rlc3R2YWwgPSBST00zMihiaW9zLT5kYXRhW2RhY2NtcG9mZnNldCArIGRhY2hlYWRlcmxlbiArIDRdKTsKKwliaW9zLT5kYWN0ZXN0dmFsID0gUk9NMzIoYmlvcy0+ZGF0YVtkYWNjbXBvZmZzZXQgKyBkYWNoZWFkZXJsZW5dKTsKKwliaW9zLT50dmRhY3Rlc3R2YWwgPSBST00zMihiaW9zLT5kYXRhW2RhY2NtcG9mZnNldCArIGRhY2hlYWRlcmxlbiArIDRdKTsKIAogCXJldHVybiAwOwogfQpAQCAtNDc5NiwxMSArNDc5NywxMSBAQAogCXVpbnQxNl90IGxlZ2FjeV9zY3JpcHRzX29mZnNldCwgbGVnYWN5X2kyY19vZmZzZXQ7CiAKIAkvKiBsb2FkIG5lZWRlZCBkZWZhdWx0cyBpbiBjYXNlIHdlIGNhbid0IHBhcnNlIHRoaXMgaW5mbyAqLwotCWJpb3MtPmJkY2IuZGNiLmkyY1swXS53cml0ZSA9IE5WX0NJT19DUkVfRERDX1dSX19JTkRFWDsKLQliaW9zLT5iZGNiLmRjYi5pMmNbMF0ucmVhZCA9IE5WX0NJT19DUkVfRERDX1NUQVRVU19fSU5ERVg7Ci0JYmlvcy0+YmRjYi5kY2IuaTJjWzFdLndyaXRlID0gTlZfQ0lPX0NSRV9EREMwX1dSX19JTkRFWDsKLQliaW9zLT5iZGNiLmRjYi5pMmNbMV0ucmVhZCA9IE5WX0NJT19DUkVfRERDMF9TVEFUVVNfX0lOREVYOwotCWJpb3MtPnB1Yi5kaWdpdGFsX21pbl9mcm9udF9wb3JjaCA9IDB4NGI7CisJYmlvcy0+ZGNiLmkyY1swXS53cml0ZSA9IE5WX0NJT19DUkVfRERDX1dSX19JTkRFWDsKKwliaW9zLT5kY2IuaTJjWzBdLnJlYWQgPSBOVl9DSU9fQ1JFX0REQ19TVEFUVVNfX0lOREVYOworCWJpb3MtPmRjYi5pMmNbMV0ud3JpdGUgPSBOVl9DSU9fQ1JFX0REQzBfV1JfX0lOREVYOworCWJpb3MtPmRjYi5pMmNbMV0ucmVhZCA9IE5WX0NJT19DUkVfRERDMF9TVEFUVVNfX0lOREVYOworCWJpb3MtPmRpZ2l0YWxfbWluX2Zyb250X3BvcmNoID0gMHg0YjsKIAliaW9zLT5mbWF4dmNvID0gMjU2MDAwOwogCWJpb3MtPmZtaW52Y28gPSAxMjgwMDA7CiAJYmlvcy0+ZnAuZHVhbGxpbmtfdHJhbnNpdGlvbl9jbGsgPSA5MDAwMDsKQEAgLTQ5MDcsMTAgKzQ5MDgsMTAgQEAKIAliaW9zLT5sZWdhY3kuaTJjX2luZGljZXMuY3J0ID0gYmlvcy0+ZGF0YVtsZWdhY3lfaTJjX29mZnNldF07CiAJYmlvcy0+bGVnYWN5LmkyY19pbmRpY2VzLnR2ID0gYmlvcy0+ZGF0YVtsZWdhY3lfaTJjX29mZnNldCArIDFdOwogCWJpb3MtPmxlZ2FjeS5pMmNfaW5kaWNlcy5wYW5lbCA9IGJpb3MtPmRhdGFbbGVnYWN5X2kyY19vZmZzZXQgKyAyXTsKLQliaW9zLT5iZGNiLmRjYi5pMmNbMF0ud3JpdGUgPSBiaW9zLT5kYXRhW2xlZ2FjeV9pMmNfb2Zmc2V0ICsgNF07Ci0JYmlvcy0+YmRjYi5kY2IuaTJjWzBdLnJlYWQgPSBiaW9zLT5kYXRhW2xlZ2FjeV9pMmNfb2Zmc2V0ICsgNV07Ci0JYmlvcy0+YmRjYi5kY2IuaTJjWzFdLndyaXRlID0gYmlvcy0+ZGF0YVtsZWdhY3lfaTJjX29mZnNldCArIDZdOwotCWJpb3MtPmJkY2IuZGNiLmkyY1sxXS5yZWFkID0gYmlvcy0+ZGF0YVtsZWdhY3lfaTJjX29mZnNldCArIDddOworCWJpb3MtPmRjYi5pMmNbMF0ud3JpdGUgPSBiaW9zLT5kYXRhW2xlZ2FjeV9pMmNfb2Zmc2V0ICsgNF07CisJYmlvcy0+ZGNiLmkyY1swXS5yZWFkID0gYmlvcy0+ZGF0YVtsZWdhY3lfaTJjX29mZnNldCArIDVdOworCWJpb3MtPmRjYi5pMmNbMV0ud3JpdGUgPSBiaW9zLT5kYXRhW2xlZ2FjeV9pMmNfb2Zmc2V0ICsgNl07CisJYmlvcy0+ZGNiLmkyY1sxXS5yZWFkID0gYmlvcy0+ZGF0YVtsZWdhY3lfaTJjX29mZnNldCArIDddOwogCiAJaWYgKGJtcGxlbmd0aCA+IDc0KSB7CiAJCWJpb3MtPmZtYXh2Y28gPSBST00zMihibXBbNjddKTsKQEAgLTQ5ODQsNyArNDk4NSw4IEBACiAJCWVsc2UKIAkJCU5WX1dBUk4oZGV2LAogCQkJCSJEQ0IgSTJDIHRhYmxlIGhhcyBtb3JlIGVudHJpZXMgdGhhbiBpbmRleGFibGUgIgotCQkJCSIoJWQgZW50cmllcywgbWF4IGluZGV4IDE1KVxuIiwgaTJjdGFibGVbMl0pOworCQkJCSIoJWQgZW50cmllcywgbWF4ICVkKVxuIiwgaTJjdGFibGVbMl0sCisJCQkJRENCX01BWF9OVU1fSTJDX0VOVFJJRVMpOwogCQllbnRyeV9sZW4gPSBpMmN0YWJsZVszXTsKIAkJLyogWzRdIGlzIGkyY19kZWZhdWx0X2luZGljZXMsIHJlYWQgaW4gcGFyc2VfZGNiX3RhYmxlKCkgKi8KIAl9CkBAIC01MDAwLDggKzUwMDIsOCBAQAogCiAJaWYgKGluZGV4ID09IDB4ZikKIAkJcmV0dXJuIDA7Ci0JaWYgKGluZGV4ID4gaTJjX2VudHJpZXMpIHsKLQkJTlZfRVJST1IoZGV2LCAiRENCIEkyQyBpbmRleCB0b28gYmlnICglZCA+ICVkKVxuIiwKKwlpZiAoaW5kZXggPj0gaTJjX2VudHJpZXMpIHsKKwkJTlZfRVJST1IoZGV2LCAiRENCIEkyQyBpbmRleCB0b28gYmlnICglZCA+PSAlZClcbiIsCiAJCQkgaW5kZXgsIGkyY3RhYmxlWzJdKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJfQpAQCAtNTAzNiw3ICs1MDM4LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZGNiX2dwaW9fZW50cnkgKgogbmV3X2dwaW9fZW50cnkoc3RydWN0IG52YmlvcyAqYmlvcykKIHsKLQlzdHJ1Y3QgcGFyc2VkX2RjYl9ncGlvICpncGlvID0gJmJpb3MtPmJkY2IuZ3BpbzsKKwlzdHJ1Y3QgZGNiX2dwaW9fdGFibGUgKmdwaW8gPSAmYmlvcy0+ZGNiLmdwaW87CiAKIAlyZXR1cm4gJmdwaW8tPmVudHJ5W2dwaW8tPmVudHJpZXMrK107CiB9CkBAIC01MDQ1LDE0ICs1MDQ3LDE0IEBACiBub3V2ZWF1X2Jpb3NfZ3Bpb19lbnRyeShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBlbnVtIGRjYl9ncGlvX3RhZyB0YWcpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT5WQklPUzsKKwlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT52YmlvczsKIAlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBiaW9zLT5iZGNiLmdwaW8uZW50cmllczsgaSsrKSB7Ci0JCWlmIChiaW9zLT5iZGNiLmdwaW8uZW50cnlbaV0udGFnICE9IHRhZykKKwlmb3IgKGkgPSAwOyBpIDwgYmlvcy0+ZGNiLmdwaW8uZW50cmllczsgaSsrKSB7CisJCWlmIChiaW9zLT5kY2IuZ3Bpby5lbnRyeVtpXS50YWcgIT0gdGFnKQogCQkJY29udGludWU7CiAKLQkJcmV0dXJuICZiaW9zLT5iZGNiLmdwaW8uZW50cnlbaV07CisJCXJldHVybiAmYmlvcy0+ZGNiLmdwaW8uZW50cnlbaV07CiAJfQogCiAJcmV0dXJuIE5VTEw7CkBAIC01MTAwLDcgKzUxMDIsNyBAQAogcGFyc2VfZGNiX2dwaW9fdGFibGUoc3RydWN0IG52YmlvcyAqYmlvcykKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gYmlvcy0+ZGV2OwotCXVpbnQxNl90IGdwaW9fdGFibGVfcHRyID0gYmlvcy0+YmRjYi5ncGlvX3RhYmxlX3B0cjsKKwl1aW50MTZfdCBncGlvX3RhYmxlX3B0ciA9IGJpb3MtPmRjYi5ncGlvX3RhYmxlX3B0cjsKIAl1aW50OF90ICpncGlvX3RhYmxlID0gJmJpb3MtPmRhdGFbZ3Bpb190YWJsZV9wdHJdOwogCWludCBoZWFkZXJfbGVuID0gZ3Bpb190YWJsZVsxXSwKIAkgICAgZW50cmllcyA9IGdwaW9fdGFibGVbMl0sCkBAIC01MTA4LDcgKzUxMTAsNyBAQAogCXZvaWQgKCpwYXJzZV9lbnRyeSkoc3RydWN0IG52YmlvcyAqLCB1aW50MTZfdCkgPSBOVUxMOwogCWludCBpOwogCi0JaWYgKGJpb3MtPmJkY2IudmVyc2lvbiA+PSAweDQwKSB7CisJaWYgKGJpb3MtPmRjYi52ZXJzaW9uID49IDB4NDApIHsKIAkJaWYgKGdwaW9fdGFibGVfcHRyICYmIGVudHJ5X2xlbiAhPSA0KSB7CiAJCQlOVl9XQVJOKGRldiwgIkludmFsaWQgRENCIEdQSU8gdGFibGUgZW50cnkgbGVuZ3RoLlxuIik7CiAJCQlyZXR1cm47CkBAIC01MTE2LDcgKzUxMTgsNyBAQAogCiAJCXBhcnNlX2VudHJ5ID0gcGFyc2VfZGNiNDBfZ3Bpb19lbnRyeTsKIAotCX0gZWxzZSBpZiAoYmlvcy0+YmRjYi52ZXJzaW9uID49IDB4MzApIHsKKwl9IGVsc2UgaWYgKGJpb3MtPmRjYi52ZXJzaW9uID49IDB4MzApIHsKIAkJaWYgKGdwaW9fdGFibGVfcHRyICYmIGVudHJ5X2xlbiAhPSAyKSB7CiAJCQlOVl9XQVJOKGRldiwgIkludmFsaWQgRENCIEdQSU8gdGFibGUgZW50cnkgbGVuZ3RoLlxuIik7CiAJCQlyZXR1cm47CkBAIC01MTI0LDcgKzUxMjYsNyBAQAogCiAJCXBhcnNlX2VudHJ5ID0gcGFyc2VfZGNiMzBfZ3Bpb19lbnRyeTsKIAotCX0gZWxzZSBpZiAoYmlvcy0+YmRjYi52ZXJzaW9uID49IDB4MjIpIHsKKwl9IGVsc2UgaWYgKGJpb3MtPmRjYi52ZXJzaW9uID49IDB4MjIpIHsKIAkJLyoKIAkJICogRENCcyBvbGRlciB0aGFuIHYzLjAgZG9uJ3QgcmVhbGx5IGhhdmUgYSBHUElPCiAJCSAqIHRhYmxlLCBpbnN0ZWFkIHRoZXkga2VlcCBzb21lIEdQSU8gaW5mbyBhdCBmaXhlZApAQCAtNTE1OCwzMCArNTE2MCw2NyBAQAogbm91dmVhdV9iaW9zX2Nvbm5lY3Rvcl9lbnRyeShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT5WQklPUzsKKwlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT52YmlvczsKIAlzdHJ1Y3QgZGNiX2Nvbm5lY3Rvcl90YWJsZV9lbnRyeSAqY3RlOwogCi0JaWYgKGluZGV4ID49IGJpb3MtPmJkY2IuY29ubmVjdG9yLmVudHJpZXMpCisJaWYgKGluZGV4ID49IGJpb3MtPmRjYi5jb25uZWN0b3IuZW50cmllcykKIAkJcmV0dXJuIE5VTEw7CiAKLQljdGUgPSAmYmlvcy0+YmRjYi5jb25uZWN0b3IuZW50cnlbaW5kZXhdOworCWN0ZSA9ICZiaW9zLT5kY2IuY29ubmVjdG9yLmVudHJ5W2luZGV4XTsKIAlpZiAoY3RlLT50eXBlID09IDB4ZmYpCiAJCXJldHVybiBOVUxMOwogCiAJcmV0dXJuIGN0ZTsKIH0KIAorc3RhdGljIGVudW0gZGNiX2Nvbm5lY3Rvcl90eXBlCitkaXZpbmVfY29ubmVjdG9yX3R5cGUoc3RydWN0IG52YmlvcyAqYmlvcywgaW50IGluZGV4KQoreworCXN0cnVjdCBkY2JfdGFibGUgKmRjYiA9ICZiaW9zLT5kY2I7CisJdW5zaWduZWQgZW5jb2RlcnMgPSAwLCB0eXBlID0gRENCX0NPTk5FQ1RPUl9OT05FOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGRjYi0+ZW50cmllczsgaSsrKSB7CisJCWlmIChkY2ItPmVudHJ5W2ldLmNvbm5lY3RvciA9PSBpbmRleCkKKwkJCWVuY29kZXJzIHw9ICgxIDw8IGRjYi0+ZW50cnlbaV0udHlwZSk7CisJfQorCisJaWYgKGVuY29kZXJzICYgKDEgPDwgT1VUUFVUX0RQKSkgeworCQlpZiAoZW5jb2RlcnMgJiAoMSA8PCBPVVRQVVRfVE1EUykpCisJCQl0eXBlID0gRENCX0NPTk5FQ1RPUl9EUDsKKwkJZWxzZQorCQkJdHlwZSA9IERDQl9DT05ORUNUT1JfZURQOworCX0gZWxzZQorCWlmIChlbmNvZGVycyAmICgxIDw8IE9VVFBVVF9UTURTKSkgeworCQlpZiAoZW5jb2RlcnMgJiAoMSA8PCBPVVRQVVRfQU5BTE9HKSkKKwkJCXR5cGUgPSBEQ0JfQ09OTkVDVE9SX0RWSV9JOworCQllbHNlCisJCQl0eXBlID0gRENCX0NPTk5FQ1RPUl9EVklfRDsKKwl9IGVsc2UKKwlpZiAoZW5jb2RlcnMgJiAoMSA8PCBPVVRQVVRfQU5BTE9HKSkgeworCQl0eXBlID0gRENCX0NPTk5FQ1RPUl9WR0E7CisJfSBlbHNlCisJaWYgKGVuY29kZXJzICYgKDEgPDwgT1VUUFVUX0xWRFMpKSB7CisJCXR5cGUgPSBEQ0JfQ09OTkVDVE9SX0xWRFM7CisJfSBlbHNlCisJaWYgKGVuY29kZXJzICYgKDEgPDwgT1VUUFVUX1RWKSkgeworCQl0eXBlID0gRENCX0NPTk5FQ1RPUl9UVl8wOworCX0KKworCXJldHVybiB0eXBlOworfQorCiBzdGF0aWMgdm9pZAogcGFyc2VfZGNiX2Nvbm5lY3Rvcl90YWJsZShzdHJ1Y3QgbnZiaW9zICpiaW9zKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBiaW9zLT5kZXY7Ci0Jc3RydWN0IGRjYl9jb25uZWN0b3JfdGFibGUgKmN0ID0gJmJpb3MtPmJkY2IuY29ubmVjdG9yOworCXN0cnVjdCBkY2JfY29ubmVjdG9yX3RhYmxlICpjdCA9ICZiaW9zLT5kY2IuY29ubmVjdG9yOwogCXN0cnVjdCBkY2JfY29ubmVjdG9yX3RhYmxlX2VudHJ5ICpjdGU7Ci0JdWludDhfdCAqY29ubnRhYiA9ICZiaW9zLT5kYXRhW2Jpb3MtPmJkY2IuY29ubmVjdG9yX3RhYmxlX3B0cl07CisJdWludDhfdCAqY29ubnRhYiA9ICZiaW9zLT5kYXRhW2Jpb3MtPmRjYi5jb25uZWN0b3JfdGFibGVfcHRyXTsKIAl1aW50OF90ICplbnRyeTsKIAlpbnQgaTsKIAotCWlmICghYmlvcy0+YmRjYi5jb25uZWN0b3JfdGFibGVfcHRyKSB7CisJaWYgKCFiaW9zLT5kY2IuY29ubmVjdG9yX3RhYmxlX3B0cikgewogCQlOVl9ERUJVR19LTVMoZGV2LCAiTm8gRENCIGNvbm5lY3RvciB0YWJsZSBwcmVzZW50XG4iKTsKIAkJcmV0dXJuOwogCX0KQEAgLTUyMDMsNiArNTI0Miw3IEBACiAJCQljdGUtPmVudHJ5ID0gUk9NMTYoZW50cnlbMF0pOwogCQllbHNlCiAJCQljdGUtPmVudHJ5ID0gUk9NMzIoZW50cnlbMF0pOworCiAJCWN0ZS0+dHlwZSAgPSAoY3RlLT5lbnRyeSAmIDB4MDAwMDAwZmYpID4+IDA7CiAJCWN0ZS0+aW5kZXggPSAoY3RlLT5lbnRyeSAmIDB4MDAwMDBmMDApID4+IDg7CiAJCXN3aXRjaCAoY3RlLT5lbnRyeSAmIDB4MDAwMzMwMDApIHsKQEAgLTUyMjgsMTAgKzUyNjgsMzMgQEAKIAogCQlOVl9JTkZPKGRldiwgIiAgJWQ6IDB4JTA4eDogdHlwZSAweCUwMnggaWR4ICVkIHRhZyAweCUwMnhcbiIsCiAJCQlpLCBjdGUtPmVudHJ5LCBjdGUtPnR5cGUsIGN0ZS0+aW5kZXgsIGN0ZS0+Z3Bpb190YWcpOworCisJCS8qIGNoZWNrIGZvciBrbm93biB0eXBlcywgZmFsbGJhY2sgdG8gZ3Vlc3NpbmcgdGhlIHR5cGUKKwkJICogZnJvbSBhdHRhY2hlZCBlbmNvZGVycyBpZiB3ZSBoaXQgYW4gdW5rbm93bi4KKwkJICovCisJCXN3aXRjaCAoY3RlLT50eXBlKSB7CisJCWNhc2UgRENCX0NPTk5FQ1RPUl9WR0E6CisJCWNhc2UgRENCX0NPTk5FQ1RPUl9UVl8wOgorCQljYXNlIERDQl9DT05ORUNUT1JfVFZfMToKKwkJY2FzZSBEQ0JfQ09OTkVDVE9SX1RWXzM6CisJCWNhc2UgRENCX0NPTk5FQ1RPUl9EVklfSToKKwkJY2FzZSBEQ0JfQ09OTkVDVE9SX0RWSV9EOgorCQljYXNlIERDQl9DT05ORUNUT1JfTFZEUzoKKwkJY2FzZSBEQ0JfQ09OTkVDVE9SX0RQOgorCQljYXNlIERDQl9DT05ORUNUT1JfZURQOgorCQljYXNlIERDQl9DT05ORUNUT1JfSERNSV8wOgorCQljYXNlIERDQl9DT05ORUNUT1JfSERNSV8xOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljdGUtPnR5cGUgPSBkaXZpbmVfY29ubmVjdG9yX3R5cGUoYmlvcywgY3RlLT5pbmRleCk7CisJCQlOVl9XQVJOKGRldiwgInVua25vd24gdHlwZSwgdXNpbmcgMHglMDJ4IiwgY3RlLT50eXBlKTsKKwkJCWJyZWFrOworCQl9CisKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZGNiX2VudHJ5ICpuZXdfZGNiX2VudHJ5KHN0cnVjdCBwYXJzZWRfZGNiICpkY2IpCitzdGF0aWMgc3RydWN0IGRjYl9lbnRyeSAqbmV3X2RjYl9lbnRyeShzdHJ1Y3QgZGNiX3RhYmxlICpkY2IpCiB7CiAJc3RydWN0IGRjYl9lbnRyeSAqZW50cnkgPSAmZGNiLT5lbnRyeVtkY2ItPmVudHJpZXNdOwogCkBAIC01MjQxLDcgKzUzMDQsNyBAQAogCXJldHVybiBlbnRyeTsKIH0KIAotc3RhdGljIHZvaWQgZmFicmljYXRlX3ZnYV9vdXRwdXQoc3RydWN0IHBhcnNlZF9kY2IgKmRjYiwgaW50IGkyYywgaW50IGhlYWRzKQorc3RhdGljIHZvaWQgZmFicmljYXRlX3ZnYV9vdXRwdXQoc3RydWN0IGRjYl90YWJsZSAqZGNiLCBpbnQgaTJjLCBpbnQgaGVhZHMpCiB7CiAJc3RydWN0IGRjYl9lbnRyeSAqZW50cnkgPSBuZXdfZGNiX2VudHJ5KGRjYik7CiAKQEAgLTUyNTIsNyArNTMxNSw3IEBACiAJLyogIm9yIiBtb3N0bHkgdW51c2VkIGluIGVhcmx5IGdlbiBjcnQgbW9kZXNldHRpbmcsIDAgaXMgZmluZSAqLwogfQogCi1zdGF0aWMgdm9pZCBmYWJyaWNhdGVfZHZpX2lfb3V0cHV0KHN0cnVjdCBwYXJzZWRfZGNiICpkY2IsIGJvb2wgdHdvSGVhZHMpCitzdGF0aWMgdm9pZCBmYWJyaWNhdGVfZHZpX2lfb3V0cHV0KHN0cnVjdCBkY2JfdGFibGUgKmRjYiwgYm9vbCB0d29IZWFkcykKIHsKIAlzdHJ1Y3QgZGNiX2VudHJ5ICplbnRyeSA9IG5ld19kY2JfZW50cnkoZGNiKTsKIApAQCAtNTI3OSw3ICs1MzQyLDcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBmYWJyaWNhdGVfdHZfb3V0cHV0KHN0cnVjdCBwYXJzZWRfZGNiICpkY2IsIGJvb2wgdHdvSGVhZHMpCitzdGF0aWMgdm9pZCBmYWJyaWNhdGVfdHZfb3V0cHV0KHN0cnVjdCBkY2JfdGFibGUgKmRjYiwgYm9vbCB0d29IZWFkcykKIHsKIAlzdHJ1Y3QgZGNiX2VudHJ5ICplbnRyeSA9IG5ld19kY2JfZW50cnkoZGNiKTsKIApAQCAtNTI5MCwxMyArNTM1MywxMyBAQAogfQogCiBzdGF0aWMgYm9vbAotcGFyc2VfZGNiMjBfZW50cnkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGJpb3NfcGFyc2VkX2RjYiAqYmRjYiwKK3BhcnNlX2RjYjIwX2VudHJ5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkY2JfdGFibGUgKmRjYiwKIAkJICB1aW50MzJfdCBjb25uLCB1aW50MzJfdCBjb25mLCBzdHJ1Y3QgZGNiX2VudHJ5ICplbnRyeSkKIHsKIAllbnRyeS0+dHlwZSA9IGNvbm4gJiAweGY7CiAJZW50cnktPmkyY19pbmRleCA9IChjb25uID4+IDQpICYgMHhmOwogCWVudHJ5LT5oZWFkcyA9IChjb25uID4+IDgpICYgMHhmOwotCWlmIChiZGNiLT52ZXJzaW9uID49IDB4NDApCisJaWYgKGRjYi0+dmVyc2lvbiA+PSAweDQwKQogCQllbnRyeS0+Y29ubmVjdG9yID0gKGNvbm4gPj4gMTIpICYgMHhmOwogCWVudHJ5LT5idXMgPSAoY29ubiA+PiAxNikgJiAweGY7CiAJZW50cnktPmxvY2F0aW9uID0gKGNvbm4gPj4gMjApICYgMHgzOwpAQCAtNTMxNCw3ICs1Mzc3LDcgQEAKIAkJICogQWx0aG91Z2ggdGhlIHJlc3Qgb2YgYSBDUlQgY29uZiBkd29yZCBpcyB1c3VhbGx5CiAJCSAqIHplcm9zLCBtYWMgYmlvc2VuIGhhdmUgc3R1ZmYgdGhlcmUgc28gd2UgbXVzdCBtYXNrCiAJCSAqLwotCQllbnRyeS0+Y3J0Y29uZi5tYXhmcmVxID0gKGJkY2ItPnZlcnNpb24gPCAweDMwKSA/CisJCWVudHJ5LT5jcnRjb25mLm1heGZyZXEgPSAoZGNiLT52ZXJzaW9uIDwgMHgzMCkgPwogCQkJCQkgKGNvbmYgJiAweGZmZmYpICogMTAgOgogCQkJCQkgKGNvbmYgJiAweGZmKSAqIDEwMDAwOwogCQlicmVhazsKQEAgLTUzMjMsNyArNTM4Niw3IEBACiAJCXVpbnQzMl90IG1hc2s7CiAJCWlmIChjb25mICYgMHgxKQogCQkJZW50cnktPmx2ZHNjb25mLnVzZV9zdHJhcHNfZm9yX21vZGUgPSB0cnVlOwotCQlpZiAoYmRjYi0+dmVyc2lvbiA8IDB4MjIpIHsKKwkJaWYgKGRjYi0+dmVyc2lvbiA8IDB4MjIpIHsKIAkJCW1hc2sgPSB+MHhkOwogCQkJLyoKIAkJCSAqIFRoZSBsYXB0b3AgaW4gYnVnIDE0NTY3IGxpZXMgYW5kIGNsYWltcyB0byBub3QgdXNlCkBAIC01MzQ3LDcgKzU0MTAsNyBAQAogCQkJICogVW50aWwgd2UgZXZlbiB0cnkgdG8gdXNlIHRoZXNlIG9uIEc4eCwgaXQncwogCQkJICogdXNlbGVzcyByZXBvcnRpbmcgdW5rbm93biBiaXRzLiAgVGhleSBhbGwgYXJlLgogCQkJICovCi0JCQlpZiAoYmRjYi0+dmVyc2lvbiA+PSAweDQwKQorCQkJaWYgKGRjYi0+dmVyc2lvbiA+PSAweDQwKQogCQkJCWJyZWFrOwogCiAJCQlOVl9FUlJPUihkZXYsICJVbmtub3duIExWRFMgY29uZmlndXJhdGlvbiBiaXRzLCAiCkBAIC01MzU3LDcgKzU0MjAsNyBAQAogCQl9CiAJY2FzZSBPVVRQVVRfVFY6CiAJewotCQlpZiAoYmRjYi0+dmVyc2lvbiA+PSAweDMwKQorCQlpZiAoZGNiLT52ZXJzaW9uID49IDB4MzApCiAJCQllbnRyeS0+dHZjb25mLmhhc19jb21wb25lbnRfb3V0cHV0ID0gY29uZiAmICgweDggPDwgNCk7CiAJCWVsc2UKIAkJCWVudHJ5LT50dmNvbmYuaGFzX2NvbXBvbmVudF9vdXRwdXQgPSBmYWxzZTsKQEAgLTUzODQsOCArNTQ0NywxMCBAQAogCQlicmVhazsKIAljYXNlIDB4ZToKIAkJLyogd2VpcmQgZzgwIG1vYmlsZSB0eXBlIHRoYXQgIm52IiB0cmVhdHMgYXMgYSB0ZXJtaW5hdG9yICovCi0JCWJkY2ItPmRjYi5lbnRyaWVzLS07CisJCWRjYi0+ZW50cmllcy0tOwogCQlyZXR1cm4gZmFsc2U7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCiAJLyogdW5zdXJlIHdoYXQgRENCIHZlcnNpb24gaW50cm9kdWNlcyB0aGlzLCAzLjA/ICovCkBAIC01Mzk2LDcgKzU0NjEsNyBAQAogfQogCiBzdGF0aWMgYm9vbAotcGFyc2VfZGNiMTVfZW50cnkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IHBhcnNlZF9kY2IgKmRjYiwKK3BhcnNlX2RjYjE1X2VudHJ5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkY2JfdGFibGUgKmRjYiwKIAkJICB1aW50MzJfdCBjb25uLCB1aW50MzJfdCBjb25mLCBzdHJ1Y3QgZGNiX2VudHJ5ICplbnRyeSkKIHsKIAlzd2l0Y2ggKGNvbm4gJiAweDAwMDAwMDBmKSB7CkBAIC01NDYyLDI3ICs1NTI3LDI3IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIHBhcnNlX2RjYl9lbnRyeShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgYmlvc19wYXJzZWRfZGNiICpiZGNiLAorc3RhdGljIGJvb2wgcGFyc2VfZGNiX2VudHJ5KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkY2JfdGFibGUgKmRjYiwKIAkJCSAgICB1aW50MzJfdCBjb25uLCB1aW50MzJfdCBjb25mKQogewotCXN0cnVjdCBkY2JfZW50cnkgKmVudHJ5ID0gbmV3X2RjYl9lbnRyeSgmYmRjYi0+ZGNiKTsKKwlzdHJ1Y3QgZGNiX2VudHJ5ICplbnRyeSA9IG5ld19kY2JfZW50cnkoZGNiKTsKIAlib29sIHJldDsKIAotCWlmIChiZGNiLT52ZXJzaW9uID49IDB4MjApCi0JCXJldCA9IHBhcnNlX2RjYjIwX2VudHJ5KGRldiwgYmRjYiwgY29ubiwgY29uZiwgZW50cnkpOworCWlmIChkY2ItPnZlcnNpb24gPj0gMHgyMCkKKwkJcmV0ID0gcGFyc2VfZGNiMjBfZW50cnkoZGV2LCBkY2IsIGNvbm4sIGNvbmYsIGVudHJ5KTsKIAllbHNlCi0JCXJldCA9IHBhcnNlX2RjYjE1X2VudHJ5KGRldiwgJmJkY2ItPmRjYiwgY29ubiwgY29uZiwgZW50cnkpOworCQlyZXQgPSBwYXJzZV9kY2IxNV9lbnRyeShkZXYsIGRjYiwgY29ubiwgY29uZiwgZW50cnkpOwogCWlmICghcmV0KQogCQlyZXR1cm4gcmV0OwogCi0JcmVhZF9kY2JfaTJjX2VudHJ5KGRldiwgYmRjYi0+dmVyc2lvbiwgYmRjYi0+aTJjX3RhYmxlLAotCQkJICAgZW50cnktPmkyY19pbmRleCwgJmJkY2ItPmRjYi5pMmNbZW50cnktPmkyY19pbmRleF0pOworCXJlYWRfZGNiX2kyY19lbnRyeShkZXYsIGRjYi0+dmVyc2lvbiwgZGNiLT5pMmNfdGFibGUsCisJCQkgICBlbnRyeS0+aTJjX2luZGV4LCAmZGNiLT5pMmNbZW50cnktPmkyY19pbmRleF0pOwogCiAJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYwotdm9pZCBtZXJnZV9saWtlX2RjYl9lbnRyaWVzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBwYXJzZWRfZGNiICpkY2IpCit2b2lkIG1lcmdlX2xpa2VfZGNiX2VudHJpZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRjYl90YWJsZSAqZGNiKQogewogCS8qCiAJICogRENCIHYyLjAgbGlzdHMgZWFjaCBvdXRwdXQgY29tYmluYXRpb24gc2VwYXJhdGVseS4KQEAgLTU1MzQsOCArNTU5OSw3IEBACiBwYXJzZV9kY2JfdGFibGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IG52YmlvcyAqYmlvcywgYm9vbCB0d29IZWFkcykKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBiaW9zX3BhcnNlZF9kY2IgKmJkY2IgPSAmYmlvcy0+YmRjYjsKLQlzdHJ1Y3QgcGFyc2VkX2RjYiAqZGNiOworCXN0cnVjdCBkY2JfdGFibGUgKmRjYiA9ICZiaW9zLT5kY2I7CiAJdWludDE2X3QgZGNicHRyID0gMCwgaTJjdGFicHRyID0gMDsKIAl1aW50OF90ICpkY2J0YWJsZTsKIAl1aW50OF90IGhlYWRlcmxlbiA9IDB4NCwgZW50cmllcyA9IERDQl9NQVhfTlVNX0VOVFJJRVM7CkBAIC01NTQzLDkgKzU2MDcsNiBAQAogCWludCByZWNvcmRsZW5ndGggPSA4LCBjb25mb2ZzID0gNDsKIAlpbnQgaTsKIAotCWRjYiA9IGJpb3MtPnB1Yi5kY2IgPSAmYmRjYi0+ZGNiOwotCWRjYi0+ZW50cmllcyA9IDA7Ci0KIAkvKiBnZXQgdGhlIG9mZnNldCBmcm9tIDB4MzYgKi8KIAlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+IE5WXzA0KSB7CiAJCWRjYnB0ciA9IFJPTTE2KGJpb3MtPmRhdGFbMHgzNl0pOwpAQCAtNTU2NywyMSArNTYyOCwyMSBAQAogCWRjYnRhYmxlID0gJmJpb3MtPmRhdGFbZGNicHRyXTsKIAogCS8qIGdldCBEQ0IgdmVyc2lvbiAqLwotCWJkY2ItPnZlcnNpb24gPSBkY2J0YWJsZVswXTsKKwlkY2ItPnZlcnNpb24gPSBkY2J0YWJsZVswXTsKIAlOVl9UUkFDRShkZXYsICJGb3VuZCBEaXNwbGF5IENvbmZpZ3VyYXRpb24gQmxvY2sgdmVyc2lvbiAlZC4lZFxuIiwKLQkJIGJkY2ItPnZlcnNpb24gPj4gNCwgYmRjYi0+dmVyc2lvbiAmIDB4Zik7CisJCSBkY2ItPnZlcnNpb24gPj4gNCwgZGNiLT52ZXJzaW9uICYgMHhmKTsKIAotCWlmIChiZGNiLT52ZXJzaW9uID49IDB4MjApIHsgLyogTlYxNysgKi8KKwlpZiAoZGNiLT52ZXJzaW9uID49IDB4MjApIHsgLyogTlYxNysgKi8KIAkJdWludDMyX3Qgc2lnOwogCi0JCWlmIChiZGNiLT52ZXJzaW9uID49IDB4MzApIHsgLyogTlY0MCsgKi8KKwkJaWYgKGRjYi0+dmVyc2lvbiA+PSAweDMwKSB7IC8qIE5WNDArICovCiAJCQloZWFkZXJsZW4gPSBkY2J0YWJsZVsxXTsKIAkJCWVudHJpZXMgPSBkY2J0YWJsZVsyXTsKIAkJCXJlY29yZGxlbmd0aCA9IGRjYnRhYmxlWzNdOwogCQkJaTJjdGFicHRyID0gUk9NMTYoZGNidGFibGVbNF0pOwogCQkJc2lnID0gUk9NMzIoZGNidGFibGVbNl0pOwotCQkJYmRjYi0+Z3Bpb190YWJsZV9wdHIgPSBST00xNihkY2J0YWJsZVsxMF0pOwotCQkJYmRjYi0+Y29ubmVjdG9yX3RhYmxlX3B0ciA9IFJPTTE2KGRjYnRhYmxlWzIwXSk7CisJCQlkY2ItPmdwaW9fdGFibGVfcHRyID0gUk9NMTYoZGNidGFibGVbMTBdKTsKKwkJCWRjYi0+Y29ubmVjdG9yX3RhYmxlX3B0ciA9IFJPTTE2KGRjYnRhYmxlWzIwXSk7CiAJCX0gZWxzZSB7CiAJCQlpMmN0YWJwdHIgPSBST00xNihkY2J0YWJsZVsyXSk7CiAJCQlzaWcgPSBST00zMihkY2J0YWJsZVs0XSk7CkBAIC01NTkzLDcgKzU2NTQsNyBAQAogCQkJCQkic2lnbmF0dXJlICglMDhYKVxuIiwgc2lnKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JfSBlbHNlIGlmIChiZGNiLT52ZXJzaW9uID49IDB4MTUpIHsgLyogc29tZSBOVjExIGFuZCBOVjIwICovCisJfSBlbHNlIGlmIChkY2ItPnZlcnNpb24gPj0gMHgxNSkgeyAvKiBzb21lIE5WMTEgYW5kIE5WMjAgKi8KIAkJY2hhciBzaWdbOF0gPSB7IDAgfTsKIAogCQlzdHJuY3B5KHNpZywgKGNoYXIgKikmZGNidGFibGVbLTddLCA3KTsKQEAgLTU2NDEsMTQgKzU3MDIsMTEgQEAKIAlpZiAoIWkyY3RhYnB0cikKIAkJTlZfV0FSTihkZXYsICJObyBwb2ludGVyIHRvIERDQiBJMkMgcG9ydCB0YWJsZVxuIik7CiAJZWxzZSB7Ci0JCWJkY2ItPmkyY190YWJsZSA9ICZiaW9zLT5kYXRhW2kyY3RhYnB0cl07Ci0JCWlmIChiZGNiLT52ZXJzaW9uID49IDB4MzApCi0JCQliZGNiLT5pMmNfZGVmYXVsdF9pbmRpY2VzID0gYmRjYi0+aTJjX3RhYmxlWzRdOworCQlkY2ItPmkyY190YWJsZSA9ICZiaW9zLT5kYXRhW2kyY3RhYnB0cl07CisJCWlmIChkY2ItPnZlcnNpb24gPj0gMHgzMCkKKwkJCWRjYi0+aTJjX2RlZmF1bHRfaW5kaWNlcyA9IGRjYi0+aTJjX3RhYmxlWzRdOwogCX0KIAotCXBhcnNlX2RjYl9ncGlvX3RhYmxlKGJpb3MpOwotCXBhcnNlX2RjYl9jb25uZWN0b3JfdGFibGUoYmlvcyk7Ci0KIAlpZiAoZW50cmllcyA+IERDQl9NQVhfTlVNX0VOVFJJRVMpCiAJCWVudHJpZXMgPSBEQ0JfTUFYX05VTV9FTlRSSUVTOwogCkBAIC01NjczLDcgKzU3MzEsNyBAQAogCQlOVl9UUkFDRVdBUk4oZGV2LCAiUmF3IERDQiBlbnRyeSAlZDogJTA4eCAlMDh4XG4iLAogCQkJICAgICBkY2ItPmVudHJpZXMsIGNvbm5lY3Rpb24sIGNvbmZpZyk7CiAKLQkJaWYgKCFwYXJzZV9kY2JfZW50cnkoZGV2LCBiZGNiLCBjb25uZWN0aW9uLCBjb25maWcpKQorCQlpZiAoIXBhcnNlX2RjYl9lbnRyeShkZXYsIGRjYiwgY29ubmVjdGlvbiwgY29uZmlnKSkKIAkJCWJyZWFrOwogCX0KIApAQCAtNTY4MSwxOCArNTczOSwyMiBAQAogCSAqIGFwYXJ0IGZvciB2Mi4xKyBub3QgYmVpbmcga25vd24gZm9yIHJlcXVpcmluZyBtZXJnaW5nLCB0aGlzCiAJICogZ3VhcmFudGVlcyBkY2JlbnQtPmluZGV4IGlzIHRoZSBpbmRleCBvZiB0aGUgZW50cnkgaW4gdGhlIHJvbSBpbWFnZQogCSAqLwotCWlmIChiZGNiLT52ZXJzaW9uIDwgMHgyMSkKKwlpZiAoZGNiLT52ZXJzaW9uIDwgMHgyMSkKIAkJbWVyZ2VfbGlrZV9kY2JfZW50cmllcyhkZXYsIGRjYik7CiAKLQlyZXR1cm4gZGNiLT5lbnRyaWVzID8gMCA6IC1FTlhJTzsKKwlpZiAoIWRjYi0+ZW50cmllcykKKwkJcmV0dXJuIC1FTlhJTzsKKworCXBhcnNlX2RjYl9ncGlvX3RhYmxlKGJpb3MpOworCXBhcnNlX2RjYl9jb25uZWN0b3JfdGFibGUoYmlvcyk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkCiBmaXh1cF9sZWdhY3lfY29ubmVjdG9yKHN0cnVjdCBudmJpb3MgKmJpb3MpCiB7Ci0Jc3RydWN0IGJpb3NfcGFyc2VkX2RjYiAqYmRjYiA9ICZiaW9zLT5iZGNiOwotCXN0cnVjdCBwYXJzZWRfZGNiICpkY2IgPSAmYmRjYi0+ZGNiOwotCWludCBoaWdoID0gMCwgaTsKKwlzdHJ1Y3QgZGNiX3RhYmxlICpkY2IgPSAmYmlvcy0+ZGNiOworCWludCBpLCBpMmMsIGkyY19jb25uW0RDQl9NQVhfTlVNX0kyQ19FTlRSSUVTXSA9IHsgfTsKIAogCS8qCiAJICogRENCIDMuMCBhbHNvIGhhcyB0aGUgdGFibGUgaW4gbW9zdCBjYXNlcywgYnV0IHRoZXJlIGFyZSBzb21lIGNhcmRzCkBAIC01NzAwLDkgKzU3NjIsMTEgQEAKIAkgKiBpbmRpY2VzIGFyZSBhbGwgMC4gIFdlIGRvbid0IG5lZWQgdGhlIGNvbm5lY3RvciBpbmRpY2VzIG9uIHByZS1HODAKIAkgKiBjaGlwcyAoeWV0Pykgc28gbGltaXQgdGhlIHVzZSB0byBEQ0IgNC4wIGFuZCBhYm92ZS4KIAkgKi8KLQlpZiAoYmRjYi0+dmVyc2lvbiA+PSAweDQwKQorCWlmIChkY2ItPnZlcnNpb24gPj0gMHg0MCkKIAkJcmV0dXJuOwogCisJZGNiLT5jb25uZWN0b3IuZW50cmllcyA9IDA7CisKIAkvKgogCSAqIE5vIGtub3duIGNvbm5lY3RvciBpbmZvIGJlZm9yZSB2My4wLCBzbyBtYWtlIGl0IHVwLiAgdGhlIHJ1bGUgaGVyZQogCSAqIGlzOiBhbnl0aGluZyBvbiB0aGUgc2FtZSBpMmMgYnVzIGlzIGNvbnNpZGVyZWQgdG8gYmUgb24gdGhlIHNhbWUKQEAgLTU3MTAsMzcgKzU3NzQsMzggQEAKIAkgKiBpdHMgb3duIHVuaXF1ZSBjb25uZWN0b3IgaW5kZXguCiAJICovCiAJZm9yIChpID0gMDsgaSA8IGRjYi0+ZW50cmllczsgaSsrKSB7Ci0JCWlmIChkY2ItPmVudHJ5W2ldLmkyY19pbmRleCA9PSAweGYpCi0JCQljb250aW51ZTsKLQogCQkvKgogCQkgKiBJZ25vcmUgdGhlIEkyQyBpbmRleCBmb3Igb24tY2hpcCBUVi1vdXQsIGFzIHRoZXJlCiAJCSAqIGFyZSBjYXJkcyB3aXRoIGJvZ3VzIHZhbHVlcyAobnYzMW0gaW4gYnVnIDIzMjEyKSwKIAkJICogYW5kIGl0J3Mgb3RoZXJ3aXNlIHVzZWxlc3MuCiAJCSAqLwogCQlpZiAoZGNiLT5lbnRyeVtpXS50eXBlID09IE9VVFBVVF9UViAmJgotCQkgICAgZGNiLT5lbnRyeVtpXS5sb2NhdGlvbiA9PSBEQ0JfTE9DX09OX0NISVApIHsKKwkJICAgIGRjYi0+ZW50cnlbaV0ubG9jYXRpb24gPT0gRENCX0xPQ19PTl9DSElQKQogCQkJZGNiLT5lbnRyeVtpXS5pMmNfaW5kZXggPSAweGY7CisJCWkyYyA9IGRjYi0+ZW50cnlbaV0uaTJjX2luZGV4OworCisJCWlmIChpMmNfY29ubltpMmNdKSB7CisJCQlkY2ItPmVudHJ5W2ldLmNvbm5lY3RvciA9IGkyY19jb25uW2kyY10gLSAxOwogCQkJY29udGludWU7CiAJCX0KIAotCQlkY2ItPmVudHJ5W2ldLmNvbm5lY3RvciA9IGRjYi0+ZW50cnlbaV0uaTJjX2luZGV4OwotCQlpZiAoZGNiLT5lbnRyeVtpXS5jb25uZWN0b3IgPiBoaWdoKQotCQkJaGlnaCA9IGRjYi0+ZW50cnlbaV0uY29ubmVjdG9yOworCQlkY2ItPmVudHJ5W2ldLmNvbm5lY3RvciA9IGRjYi0+Y29ubmVjdG9yLmVudHJpZXMrKzsKKwkJaWYgKGkyYyAhPSAweGYpCisJCQlpMmNfY29ubltpMmNdID0gZGNiLT5jb25uZWN0b3IuZW50cmllczsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgZGNiLT5lbnRyaWVzOyBpKyspIHsKLQkJaWYgKGRjYi0+ZW50cnlbaV0uaTJjX2luZGV4ICE9IDB4ZikKLQkJCWNvbnRpbnVlOwotCi0JCWRjYi0+ZW50cnlbaV0uY29ubmVjdG9yID0gKytoaWdoOworCS8qIEZha2UgdGhlIGNvbm5lY3RvciB0YWJsZSBhcyB3ZWxsIGFzIGp1c3QgY29ubmVjdG9yIGluZGljZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgZGNiLT5jb25uZWN0b3IuZW50cmllczsgaSsrKSB7CisJCWRjYi0+Y29ubmVjdG9yLmVudHJ5W2ldLmluZGV4ID0gaTsKKwkJZGNiLT5jb25uZWN0b3IuZW50cnlbaV0udHlwZSA9IGRpdmluZV9jb25uZWN0b3JfdHlwZShiaW9zLCBpKTsKKwkJZGNiLT5jb25uZWN0b3IuZW50cnlbaV0uZ3Bpb190YWcgPSAweGZmOwogCX0KIH0KIAogc3RhdGljIHZvaWQKIGZpeHVwX2xlZ2FjeV9pMmMoc3RydWN0IG52YmlvcyAqYmlvcykKIHsKLQlzdHJ1Y3QgcGFyc2VkX2RjYiAqZGNiID0gJmJpb3MtPmJkY2IuZGNiOworCXN0cnVjdCBkY2JfdGFibGUgKmRjYiA9ICZiaW9zLT5kY2I7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGNiLT5lbnRyaWVzOyBpKyspIHsKQEAgLTU4MjYsNyArNTg5MSw3IEBACiB1aW50OF90ICpub3V2ZWF1X2Jpb3NfZW1iZWRkZWRfZWRpZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CiAJY29uc3QgdWludDhfdCBlZGlkX3NpZ1tdID0gewogCQkJMHgwMCwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMCB9OwogCXVpbnQxNl90IG9mZnNldCA9IDA7CkBAIC01ODU5LDcgKzU5MjQsNyBAQAogCQkJICAgIHN0cnVjdCBkY2JfZW50cnkgKmRjYmVudCkKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPlZCSU9TOworCXN0cnVjdCBudmJpb3MgKmJpb3MgPSAmZGV2X3ByaXYtPnZiaW9zOwogCXN0cnVjdCBpbml0X2V4ZWMgaWV4ZWMgPSB7IHRydWUsIGZhbHNlIH07CiAKIAltdXRleF9sb2NrKCZiaW9zLT5sb2NrKTsKQEAgLTU4NzIsNyArNTkzNyw3IEBACiBzdGF0aWMgYm9vbCBOVkluaXRWQklPUyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+VkJJT1M7CisJc3RydWN0IG52YmlvcyAqYmlvcyA9ICZkZXZfcHJpdi0+dmJpb3M7CiAKIAltZW1zZXQoYmlvcywgMCwgc2l6ZW9mKHN0cnVjdCBudmJpb3MpKTsKIAltdXRleF9pbml0KCZiaW9zLT5sb2NrKTsKQEAgLTU4ODgsNyArNTk1Myw3IEBACiBzdGF0aWMgaW50IG5vdXZlYXVfcGFyc2VfdmJpb3Nfc3RydWN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT5WQklPUzsKKwlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT52YmlvczsKIAljb25zdCB1aW50OF90IGJpdF9zaWduYXR1cmVbXSA9IHsgMHhmZiwgMHhiOCwgJ0InLCAnSScsICdUJyB9OwogCWNvbnN0IHVpbnQ4X3QgYm1wX3NpZ25hdHVyZVtdID0geyAweGZmLCAweDdmLCAnTicsICdWJywgMHgwIH07CiAJaW50IG9mZnNldDsKQEAgLTU5MTUsNyArNTk4MCw3IEBACiBub3V2ZWF1X3J1bl92Ymlvc19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT5WQklPUzsKKwlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT52YmlvczsKIAlpbnQgaSwgcmV0ID0gMDsKIAogCU5WTG9ja1ZnYUNydGNzKGRldiwgZmFsc2UpOwpAQCAtNTk0Niw5ICs2MDExLDkgQEAKIAl9CiAKIAlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkgewotCQlmb3IgKGkgPSAwOyBpIDwgYmlvcy0+YmRjYi5kY2IuZW50cmllczsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBiaW9zLT5kY2IuZW50cmllczsgaSsrKSB7CiAJCQlub3V2ZWF1X2Jpb3NfcnVuX2Rpc3BsYXlfdGFibGUoZGV2LAotCQkJCQkJICAgICAgICZiaW9zLT5iZGNiLmRjYi5lbnRyeVtpXSwKKwkJCQkJCSAgICAgICAmYmlvcy0+ZGNiLmVudHJ5W2ldLAogCQkJCQkJICAgICAgIDAsIDApOwogCQl9CiAJfQpAQCAtNTk2MiwxMSArNjAyNywxMSBAQAogbm91dmVhdV9iaW9zX2kyY19kZXZpY2VzX3Rha2Vkb3duKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT5WQklPUzsKKwlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT52YmlvczsKIAlzdHJ1Y3QgZGNiX2kyY19lbnRyeSAqZW50cnk7CiAJaW50IGk7CiAKLQllbnRyeSA9ICZiaW9zLT5iZGNiLmRjYi5pMmNbMF07CisJZW50cnkgPSAmYmlvcy0+ZGNiLmkyY1swXTsKIAlmb3IgKGkgPSAwOyBpIDwgRENCX01BWF9OVU1fSTJDX0VOVFJJRVM7IGkrKywgZW50cnkrKykKIAkJbm91dmVhdV9pMmNfZmluaShkZXYsIGVudHJ5KTsKIH0KQEAgLTU5NzUsMTMgKzYwNDAsMTEgQEAKIG5vdXZlYXVfYmlvc19pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT5WQklPUzsKKwlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT52YmlvczsKIAl1aW50MzJfdCBzYXZlZF9udl9wZXh0ZGV2X2Jvb3RfMDsKIAlib29sIHdhc19sb2NrZWQ7CiAJaW50IHJldDsKIAotCWRldl9wcml2LT52YmlvcyA9ICZiaW9zLT5wdWI7Ci0KIAlpZiAoIU5WSW5pdFZCSU9TKGRldikpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC02MDIzLDEwICs2MDg2LDggQEAKIAliaW9zX3dyMzIoYmlvcywgTlZfUEVYVERFVl9CT09UXzAsIHNhdmVkX252X3BleHRkZXZfYm9vdF8wKTsKIAogCXJldCA9IG5vdXZlYXVfcnVuX3ZiaW9zX2luaXQoZGV2KTsKLQlpZiAocmV0KSB7Ci0JCWRldl9wcml2LT52YmlvcyA9IE5VTEw7CisJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKLQl9CiAKIAkvKiBmZWF0dXJlX2J5dGUgb24gQk1QIGlzIHBvb3IsIGJ1dCBpbml0IGFsd2F5cyBzZXRzIENSNEIgKi8KIAl3YXNfbG9ja2VkID0gTlZMb2NrVmdhQ3J0Y3MoZGV2LCBmYWxzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Jpb3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5oCmluZGV4IGZkOTRiZDYuLjlmNjg4YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfYmlvcy5oCkBAIC0zNCw5ICszNCw2NyBAQAogCiAjZGVmaW5lIERDQl9MT0NfT05fQ0hJUCAwCiAKK3N0cnVjdCBkY2JfaTJjX2VudHJ5IHsKKwl1aW50OF90IHBvcnRfdHlwZTsKKwl1aW50OF90IHJlYWQsIHdyaXRlOworCXN0cnVjdCBub3V2ZWF1X2kyY19jaGFuICpjaGFuOworfTsKKworZW51bSBkY2JfZ3Bpb190YWcgeworCURDQl9HUElPX1RWREFDMCA9IDB4YywKKwlEQ0JfR1BJT19UVkRBQzEgPSAweDJkLAorfTsKKworc3RydWN0IGRjYl9ncGlvX2VudHJ5IHsKKwllbnVtIGRjYl9ncGlvX3RhZyB0YWc7CisJaW50IGxpbmU7CisJYm9vbCBpbnZlcnQ7Cit9OworCitzdHJ1Y3QgZGNiX2dwaW9fdGFibGUgeworCWludCBlbnRyaWVzOworCXN0cnVjdCBkY2JfZ3Bpb19lbnRyeSBlbnRyeVtEQ0JfTUFYX05VTV9HUElPX0VOVFJJRVNdOworfTsKKworZW51bSBkY2JfY29ubmVjdG9yX3R5cGUgeworCURDQl9DT05ORUNUT1JfVkdBID0gMHgwMCwKKwlEQ0JfQ09OTkVDVE9SX1RWXzAgPSAweDEwLAorCURDQl9DT05ORUNUT1JfVFZfMSA9IDB4MTEsCisJRENCX0NPTk5FQ1RPUl9UVl8zID0gMHgxMywKKwlEQ0JfQ09OTkVDVE9SX0RWSV9JID0gMHgzMCwKKwlEQ0JfQ09OTkVDVE9SX0RWSV9EID0gMHgzMSwKKwlEQ0JfQ09OTkVDVE9SX0xWRFMgPSAweDQwLAorCURDQl9DT05ORUNUT1JfRFAgPSAweDQ2LAorCURDQl9DT05ORUNUT1JfZURQID0gMHg0NywKKwlEQ0JfQ09OTkVDVE9SX0hETUlfMCA9IDB4NjAsCisJRENCX0NPTk5FQ1RPUl9IRE1JXzEgPSAweDYxLAorCURDQl9DT05ORUNUT1JfTk9ORSA9IDB4ZmYKK307CisKK3N0cnVjdCBkY2JfY29ubmVjdG9yX3RhYmxlX2VudHJ5IHsKKwl1aW50MzJfdCBlbnRyeTsKKwllbnVtIGRjYl9jb25uZWN0b3JfdHlwZSB0eXBlOworCXVpbnQ4X3QgaW5kZXg7CisJdWludDhfdCBncGlvX3RhZzsKK307CisKK3N0cnVjdCBkY2JfY29ubmVjdG9yX3RhYmxlIHsKKwlpbnQgZW50cmllczsKKwlzdHJ1Y3QgZGNiX2Nvbm5lY3Rvcl90YWJsZV9lbnRyeSBlbnRyeVtEQ0JfTUFYX05VTV9DT05ORUNUT1JfRU5UUklFU107Cit9OworCitlbnVtIGRjYl90eXBlIHsKKwlPVVRQVVRfQU5BTE9HID0gMCwKKwlPVVRQVVRfVFYgPSAxLAorCU9VVFBVVF9UTURTID0gMiwKKwlPVVRQVVRfTFZEUyA9IDMsCisJT1VUUFVUX0RQID0gNiwKKwlPVVRQVVRfQU5ZID0gLTEKK307CisKIHN0cnVjdCBkY2JfZW50cnkgewogCWludCBpbmRleDsJLyogbWF5IG5vdCBiZSByYXcgZGNiIGluZGV4IGlmIG1lcmdpbmcgaGFzIGhhcHBlbmVkICovCi0JdWludDhfdCB0eXBlOworCWVudW0gZGNiX3R5cGUgdHlwZTsKIAl1aW50OF90IGkyY19pbmRleDsKIAl1aW50OF90IGhlYWRzOwogCXVpbnQ4X3QgY29ubmVjdG9yOwpAQCAtNzEsNjkgKzEyOSwyMiBAQAogCWJvb2wgaTJjX3VwcGVyX2RlZmF1bHQ7CiB9OwogCi1zdHJ1Y3QgZGNiX2kyY19lbnRyeSB7Ci0JdWludDhfdCBwb3J0X3R5cGU7Ci0JdWludDhfdCByZWFkLCB3cml0ZTsKLQlzdHJ1Y3Qgbm91dmVhdV9pMmNfY2hhbiAqY2hhbjsKLX07Ci0KLXN0cnVjdCBwYXJzZWRfZGNiIHsKLQlpbnQgZW50cmllczsKLQlzdHJ1Y3QgZGNiX2VudHJ5IGVudHJ5W0RDQl9NQVhfTlVNX0VOVFJJRVNdOwotCXN0cnVjdCBkY2JfaTJjX2VudHJ5IGkyY1tEQ0JfTUFYX05VTV9JMkNfRU5UUklFU107Ci19OwotCi1lbnVtIGRjYl9ncGlvX3RhZyB7Ci0JRENCX0dQSU9fVFZEQUMwID0gMHhjLAotCURDQl9HUElPX1RWREFDMSA9IDB4MmQsCi19OwotCi1zdHJ1Y3QgZGNiX2dwaW9fZW50cnkgewotCWVudW0gZGNiX2dwaW9fdGFnIHRhZzsKLQlpbnQgbGluZTsKLQlib29sIGludmVydDsKLX07Ci0KLXN0cnVjdCBwYXJzZWRfZGNiX2dwaW8gewotCWludCBlbnRyaWVzOwotCXN0cnVjdCBkY2JfZ3Bpb19lbnRyeSBlbnRyeVtEQ0JfTUFYX05VTV9HUElPX0VOVFJJRVNdOwotfTsKLQotc3RydWN0IGRjYl9jb25uZWN0b3JfdGFibGVfZW50cnkgewotCXVpbnQzMl90IGVudHJ5OwotCXVpbnQ4X3QgdHlwZTsKLQl1aW50OF90IGluZGV4OwotCXVpbnQ4X3QgZ3Bpb190YWc7Ci19OwotCi1zdHJ1Y3QgZGNiX2Nvbm5lY3Rvcl90YWJsZSB7Ci0JaW50IGVudHJpZXM7Ci0Jc3RydWN0IGRjYl9jb25uZWN0b3JfdGFibGVfZW50cnkgZW50cnlbRENCX01BWF9OVU1fQ09OTkVDVE9SX0VOVFJJRVNdOwotfTsKLQotc3RydWN0IGJpb3NfcGFyc2VkX2RjYiB7CitzdHJ1Y3QgZGNiX3RhYmxlIHsKIAl1aW50OF90IHZlcnNpb247CiAKLQlzdHJ1Y3QgcGFyc2VkX2RjYiBkY2I7CisJaW50IGVudHJpZXM7CisJc3RydWN0IGRjYl9lbnRyeSBlbnRyeVtEQ0JfTUFYX05VTV9FTlRSSUVTXTsKIAogCXVpbnQ4X3QgKmkyY190YWJsZTsKIAl1aW50OF90IGkyY19kZWZhdWx0X2luZGljZXM7CisJc3RydWN0IGRjYl9pMmNfZW50cnkgaTJjW0RDQl9NQVhfTlVNX0kyQ19FTlRSSUVTXTsKIAogCXVpbnQxNl90IGdwaW9fdGFibGVfcHRyOwotCXN0cnVjdCBwYXJzZWRfZGNiX2dwaW8gZ3BpbzsKKwlzdHJ1Y3QgZGNiX2dwaW9fdGFibGUgZ3BpbzsKIAl1aW50MTZfdCBjb25uZWN0b3JfdGFibGVfcHRyOwogCXN0cnVjdCBkY2JfY29ubmVjdG9yX3RhYmxlIGNvbm5lY3RvcjsKIH07CiAKLWVudW0gbm91dmVhdV9lbmNvZGVyX3R5cGUgewotCU9VVFBVVF9BTkFMT0cgPSAwLAotCU9VVFBVVF9UViA9IDEsCi0JT1VUUFVUX1RNRFMgPSAyLAotCU9VVFBVVF9MVkRTID0gMywKLQlPVVRQVVRfRFAgPSA2LAotCU9VVFBVVF9BTlkgPSAtMQotfTsKLQogZW51bSBub3V2ZWF1X29yIHsKIAlPVVRQVVRfQSA9ICgxIDw8IDApLAogCU9VVFBVVF9CID0gKDEgPDwgMSksCkBAIC0xOTAsOCArMjAxLDggQEAKIAlpbnQgcmVmY2xrOwogfTsKIAotc3RydWN0IG5vdXZlYXVfYmlvc19pbmZvIHsKLQlzdHJ1Y3QgcGFyc2VkX2RjYiAqZGNiOworc3RydWN0IG52YmlvcyB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldjsKIAogCXVpbnQ4X3QgY2hpcF92ZXJzaW9uOwogCkBAIC0xOTksMTEgKzIxMCw2IEBACiAJdWludDMyX3QgdHZkYWN0ZXN0dmFsOwogCXVpbnQ4X3QgZGlnaXRhbF9taW5fZnJvbnRfcG9yY2g7CiAJYm9vbCBmcF9ub19kZGM7Ci19OwotCi1zdHJ1Y3QgbnZiaW9zIHsKLQlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2OwotCXN0cnVjdCBub3V2ZWF1X2Jpb3NfaW5mbyBwdWI7CiAKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIApAQCAtMjM0LDcgKzI0MCw3IEBACiAJdWludDE2X3Qgc29tZV9zY3JpcHRfcHRyOyAvKiBCSVQgSSArIDE0ICovCiAJdWludDE2X3QgaW5pdDk2X3RibF9wdHI7IC8qIEJJVCBJICsgMTYgKi8KIAotCXN0cnVjdCBiaW9zX3BhcnNlZF9kY2IgYmRjYjsKKwlzdHJ1Y3QgZGNiX3RhYmxlIGRjYjsKIAogCXN0cnVjdCB7CiAJCWludCBjcnRjaGVhZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY2FsYy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jYWxjLmMKaW5kZXggZWUyYjg0NS4uODhmOWJjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jYWxjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jYWxjLmMKQEAgLTI3NCw3ICsyNzQsNyBAQAogCSAqIHJldHVybnMgY2FsY3VsYXRlZCBjbG9jawogCSAqLwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IGN2ID0gZGV2X3ByaXYtPnZiaW9zLT5jaGlwX3ZlcnNpb247CisJaW50IGN2ID0gZGV2X3ByaXYtPnZiaW9zLmNoaXBfdmVyc2lvbjsKIAlpbnQgbWludmNvID0gcGxsX2xpbS0+dmNvMS5taW5mcmVxLCBtYXh2Y28gPSBwbGxfbGltLT52Y28xLm1heGZyZXE7CiAJaW50IG1pbk0gPSBwbGxfbGltLT52Y28xLm1pbl9tLCBtYXhNID0gcGxsX2xpbS0+dmNvMS5tYXhfbTsKIAlpbnQgbWluTiA9IHBsbF9saW0tPnZjbzEubWluX24sIG1heE4gPSBwbGxfbGltLT52Y28xLm1heF9uOwpAQCAtMzczLDcgKzM3Myw3IEBACiAJICogcmV0dXJucyBjYWxjdWxhdGVkIGNsb2NrCiAJICovCiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgY2hpcF92ZXJzaW9uID0gZGV2X3ByaXYtPnZiaW9zLT5jaGlwX3ZlcnNpb247CisJaW50IGNoaXBfdmVyc2lvbiA9IGRldl9wcml2LT52Ymlvcy5jaGlwX3ZlcnNpb247CiAJaW50IG1pbnZjbzEgPSBwbGxfbGltLT52Y28xLm1pbmZyZXEsIG1heHZjbzEgPSBwbGxfbGltLT52Y28xLm1heGZyZXE7CiAJaW50IG1pbnZjbzIgPSBwbGxfbGltLT52Y28yLm1pbmZyZXEsIG1heHZjbzIgPSBwbGxfbGltLT52Y28yLm1heGZyZXE7CiAJaW50IG1pblUxID0gcGxsX2xpbS0+dmNvMS5taW5faW5wdXRmcmVxLCBtaW5VMiA9IHBsbF9saW0tPnZjbzIubWluX2lucHV0ZnJlcTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY2hhbm5lbC5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jaGFubmVsLmMKaW5kZXggMjI4MWY5OS4uNmRmYjQyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jaGFubmVsLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jaGFubmVsLmMKQEAgLTM1LDIyICszNSwyNyBAQAogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG5vdXZlYXVfYm8gKnBiID0gY2hhbi0+cHVzaGJ1Zl9ibzsKIAlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKnB1c2hidWYgPSBOVUxMOwotCXVpbnQzMl90IHN0YXJ0ID0gcGItPmJvLm1lbS5tbV9ub2RlLT5zdGFydCA8PCBQQUdFX1NISUZUOwogCWludCByZXQ7CiAKKwlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkgeworCQlyZXQgPSBub3V2ZWF1X2dwdW9ial9kbWFfbmV3KGNoYW4sIE5WX0NMQVNTX0RNQV9JTl9NRU1PUlksIDAsCisJCQkJCSAgICAgZGV2X3ByaXYtPnZtX2VuZCwgTlZfRE1BX0FDQ0VTU19STywKKwkJCQkJICAgICBOVl9ETUFfVEFSR0VUX0FHUCwgJnB1c2hidWYpOworCQljaGFuLT5wdXNoYnVmX2Jhc2UgPSBwYi0+Ym8ub2Zmc2V0OworCX0gZWxzZQogCWlmIChwYi0+Ym8ubWVtLm1lbV90eXBlID09IFRUTV9QTF9UVCkgewogCQlyZXQgPSBub3V2ZWF1X2dwdW9ial9nYXJ0X2RtYV9uZXcoY2hhbiwgMCwKIAkJCQkJCSAgZGV2X3ByaXYtPmdhcnRfaW5mby5hcGVyX3NpemUsCiAJCQkJCQkgIE5WX0RNQV9BQ0NFU1NfUk8sICZwdXNoYnVmLAogCQkJCQkJICBOVUxMKTsKLQkJY2hhbi0+cHVzaGJ1Zl9iYXNlID0gc3RhcnQ7CisJCWNoYW4tPnB1c2hidWZfYmFzZSA9IHBiLT5iby5tZW0ubW1fbm9kZS0+c3RhcnQgPDwgUEFHRV9TSElGVDsKIAl9IGVsc2UKIAlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSAhPSBOVl8wNCkgewogCQlyZXQgPSBub3V2ZWF1X2dwdW9ial9kbWFfbmV3KGNoYW4sIE5WX0NMQVNTX0RNQV9JTl9NRU1PUlksIDAsCiAJCQkJCSAgICAgZGV2X3ByaXYtPmZiX2F2YWlsYWJsZV9zaXplLAogCQkJCQkgICAgIE5WX0RNQV9BQ0NFU1NfUk8sCiAJCQkJCSAgICAgTlZfRE1BX1RBUkdFVF9WSURNRU0sICZwdXNoYnVmKTsKLQkJY2hhbi0+cHVzaGJ1Zl9iYXNlID0gc3RhcnQ7CisJCWNoYW4tPnB1c2hidWZfYmFzZSA9IHBiLT5iby5tZW0ubW1fbm9kZS0+c3RhcnQgPDwgUEFHRV9TSElGVDsKIAl9IGVsc2UgewogCQkvKiBOVjA0IGNtZGJ1ZiBoYWNrLCBmcm9tIG9yaWdpbmFsIGRkeC4uIG5vdCBzdXJlIG9mIGl0J3MKIAkJICogZXhhY3QgcmVhc29uIGZvciBleGlzdGluZyA6KSAgUENJIGFjY2VzcyB0byBjbWRidWYgaW4KQEAgLTYxLDcgKzY2LDcgQEAKIAkJCQkJICAgICBkZXZfcHJpdi0+ZmJfYXZhaWxhYmxlX3NpemUsCiAJCQkJCSAgICAgTlZfRE1BX0FDQ0VTU19STywKIAkJCQkJICAgICBOVl9ETUFfVEFSR0VUX1BDSSwgJnB1c2hidWYpOwotCQljaGFuLT5wdXNoYnVmX2Jhc2UgPSBzdGFydDsKKwkJY2hhbi0+cHVzaGJ1Zl9iYXNlID0gcGItPmJvLm1lbS5tbV9ub2RlLT5zdGFydCA8PCBQQUdFX1NISUZUOwogCX0KIAogCXJldCA9IG5vdXZlYXVfZ3B1b2JqX3JlZl9hZGQoZGV2LCBjaGFuLCAwLCBwdXNoYnVmLCAmY2hhbi0+cHVzaGJ1Zik7CkBAIC0yNzUsOSArMjgwLDE4IEBACiAJICovCiAJbm91dmVhdV9mZW5jZV9maW5pKGNoYW4pOwogCi0JLyogRW5zdXJlIHRoZSBjaGFubmVsIGlzIG5vIGxvbmdlciBhY3RpdmUgb24gdGhlIEdQVSAqLworCS8qIFRoaXMgd2lsbCBwcmV2ZW50IHBmaWZvIGZyb20gc3dpdGNoaW5nIGNoYW5uZWxzLiAqLwogCXBmaWZvLT5yZWFzc2lnbihkZXYsIGZhbHNlKTsKIAorCS8qIFdlIHdhbnQgdG8gZ2l2ZSBwZ3JhcGggYSBjaGFuY2UgdG8gaWRsZSBhbmQgZ2V0IHJpZCBvZiBhbGwgcG90ZW50aWFsCisJICogZXJyb3JzLiBXZSBuZWVkIHRvIGRvIHRoaXMgYmVmb3JlIHRoZSBsb2NrLCBvdGhlcndpc2UgdGhlIGlycSBoYW5kbGVyCisJICogaXMgdW5hYmxlIHRvIHByb2Nlc3MgdGhlbS4KKwkgKi8KKwlpZiAocGdyYXBoLT5jaGFubmVsKGRldikgPT0gY2hhbikKKwkJbm91dmVhdV93YWl0X2Zvcl9pZGxlKGRldik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2ssIGZsYWdzKTsKKwogCXBncmFwaC0+Zmlmb19hY2Nlc3MoZGV2LCBmYWxzZSk7CiAJaWYgKHBncmFwaC0+Y2hhbm5lbChkZXYpID09IGNoYW4pCiAJCXBncmFwaC0+dW5sb2FkX2NvbnRleHQoZGV2KTsKQEAgLTI5Myw2ICszMDcsOCBAQAogCiAJcGZpZm8tPnJlYXNzaWduKGRldiwgdHJ1ZSk7CiAKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOworCiAJLyogUmVsZWFzZSB0aGUgY2hhbm5lbCdzIHJlc291cmNlcyAqLwogCW5vdXZlYXVfZ3B1b2JqX3JlZl9kZWwoZGV2LCAmY2hhbi0+cHVzaGJ1Zik7CiAJaWYgKGNoYW4tPnB1c2hidWZfYm8pIHsKQEAgLTM2OSw2ICszODUsMTQgQEAKIAkJcmV0dXJuIHJldDsKIAlpbml0LT5jaGFubmVsICA9IGNoYW4tPmlkOwogCisJaWYgKGNoYW4tPmRtYS5pYl9tYXgpCisJCWluaXQtPnB1c2hidWZfZG9tYWlucyA9IE5PVVZFQVVfR0VNX0RPTUFJTl9WUkFNIHwKKwkJCQkJTk9VVkVBVV9HRU1fRE9NQUlOX0dBUlQ7CisJZWxzZSBpZiAoY2hhbi0+cHVzaGJ1Zl9iby0+Ym8ubWVtLm1lbV90eXBlID09IFRUTV9QTF9WUkFNKQorCQlpbml0LT5wdXNoYnVmX2RvbWFpbnMgPSBOT1VWRUFVX0dFTV9ET01BSU5fVlJBTTsKKwllbHNlCisJCWluaXQtPnB1c2hidWZfZG9tYWlucyA9IE5PVVZFQVVfR0VNX0RPTUFJTl9HQVJUOworCiAJaW5pdC0+c3ViY2hhblswXS5oYW5kbGUgPSBOdk0yTUY7CiAJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPCBOVl81MCkKIAkJaW5pdC0+c3ViY2hhblswXS5ncmNsYXNzID0gMHgwMDM5OwpAQCAtNDA4LDcgKzQzMiw2IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIHN0cnVjdCBkcm1faW9jdGxfZGVzYyBub3V2ZWF1X2lvY3Rsc1tdID0gewotCURSTV9JT0NUTF9ERUYoRFJNX05PVVZFQVVfQ0FSRF9JTklULCBub3V2ZWF1X2lvY3RsX2NhcmRfaW5pdCwgRFJNX0FVVEgpLAogCURSTV9JT0NUTF9ERUYoRFJNX05PVVZFQVVfR0VUUEFSQU0sIG5vdXZlYXVfaW9jdGxfZ2V0cGFyYW0sIERSTV9BVVRIKSwKIAlEUk1fSU9DVExfREVGKERSTV9OT1VWRUFVX1NFVFBBUkFNLCBub3V2ZWF1X2lvY3RsX3NldHBhcmFtLCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFkpLAogCURSTV9JT0NUTF9ERUYoRFJNX05PVVZFQVVfQ0hBTk5FTF9BTExPQywgbm91dmVhdV9pb2N0bF9maWZvX2FsbG9jLCBEUk1fQVVUSCksCkBAIC00MTgsMTMgKzQ0MSw5IEBACiAJRFJNX0lPQ1RMX0RFRihEUk1fTk9VVkVBVV9HUFVPQkpfRlJFRSwgbm91dmVhdV9pb2N0bF9ncHVvYmpfZnJlZSwgRFJNX0FVVEgpLAogCURSTV9JT0NUTF9ERUYoRFJNX05PVVZFQVVfR0VNX05FVywgbm91dmVhdV9nZW1faW9jdGxfbmV3LCBEUk1fQVVUSCksCiAJRFJNX0lPQ1RMX0RFRihEUk1fTk9VVkVBVV9HRU1fUFVTSEJVRiwgbm91dmVhdV9nZW1faW9jdGxfcHVzaGJ1ZiwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX05PVVZFQVVfR0VNX1BVU0hCVUZfQ0FMTCwgbm91dmVhdV9nZW1faW9jdGxfcHVzaGJ1Zl9jYWxsLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fTk9VVkVBVV9HRU1fUElOLCBub3V2ZWF1X2dlbV9pb2N0bF9waW4sIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGKERSTV9OT1VWRUFVX0dFTV9VTlBJTiwgbm91dmVhdV9nZW1faW9jdGxfdW5waW4sIERSTV9BVVRIKSwKIAlEUk1fSU9DVExfREVGKERSTV9OT1VWRUFVX0dFTV9DUFVfUFJFUCwgbm91dmVhdV9nZW1faW9jdGxfY3B1X3ByZXAsIERSTV9BVVRIKSwKIAlEUk1fSU9DVExfREVGKERSTV9OT1VWRUFVX0dFTV9DUFVfRklOSSwgbm91dmVhdV9nZW1faW9jdGxfY3B1X2ZpbmksIERSTV9BVVRIKSwKIAlEUk1fSU9DVExfREVGKERSTV9OT1VWRUFVX0dFTV9JTkZPLCBub3V2ZWF1X2dlbV9pb2N0bF9pbmZvLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fTk9VVkVBVV9HRU1fUFVTSEJVRl9DQUxMMiwgbm91dmVhdV9nZW1faW9jdGxfcHVzaGJ1Zl9jYWxsMiwgRFJNX0FVVEgpLAogfTsKIAogaW50IG5vdXZlYXVfbWF4X2lvY3RsID0gRFJNX0FSUkFZX1NJWkUobm91dmVhdV9pb2N0bHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmMKaW5kZXggZDJmNjMzNS4uMjQzMjdmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5jCkBAIC0yMTgsNyArMjE4LDcgQEAKIAkJCWNvbm5lY3Rvci0+aW50ZXJsYWNlX2FsbG93ZWQgPSB0cnVlOwogCX0KIAotCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJKSB7CisJaWYgKG52X2Nvbm5lY3Rvci0+ZGNiLT50eXBlID09IERDQl9DT05ORUNUT1JfRFZJX0kpIHsKIAkJZHJtX2Nvbm5lY3Rvcl9wcm9wZXJ0eV9zZXRfdmFsdWUoY29ubmVjdG9yLAogCQkJZGV2LT5tb2RlX2NvbmZpZy5kdmlfaV9zdWJjb25uZWN0b3JfcHJvcGVydHksCiAJCQludl9lbmNvZGVyLT5kY2ItPnR5cGUgPT0gT1VUUFVUX1RNRFMgPwpAQCAtMjM2LDE1ICsyMzYsMTcgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9pMmNfY2hhbiAqaTJjOwogCWludCB0eXBlLCBmbGFnczsKIAotCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTKQorCWlmIChudl9jb25uZWN0b3ItPmRjYi0+dHlwZSA9PSBEQ0JfQ09OTkVDVE9SX0xWRFMpCiAJCW52X2VuY29kZXIgPSBmaW5kX2VuY29kZXJfYnlfdHlwZShjb25uZWN0b3IsIE9VVFBVVF9MVkRTKTsKIAlpZiAobnZfZW5jb2RlciAmJiBudl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlKSB7CisJCXVuc2lnbmVkIHN0YXR1cyA9IGNvbm5lY3Rvcl9zdGF0dXNfY29ubmVjdGVkOworCiAjaWZkZWYgQ09ORklHX0FDUEkKIAkJaWYgKCFub3V2ZWF1X2lnbm9yZWxpZCAmJiAhYWNwaV9saWRfb3BlbigpKQotCQkJcmV0dXJuIGNvbm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOworCQkJc3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c191bmtub3duOwogI2VuZGlmCiAJCW5vdXZlYXVfY29ubmVjdG9yX3NldF9lbmNvZGVyKGNvbm5lY3RvciwgbnZfZW5jb2Rlcik7Ci0JCXJldHVybiBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKKwkJcmV0dXJuIHN0YXR1czsKIAl9CiAKIAkvKiBDbGVhbnVwIHRoZSBwcmV2aW91cyBFRElEIGJsb2NrLiAqLwpAQCAtMjc5LDcgKzI4MSw3IEBACiAJCSAqIHNhbWUgaTJjIGNoYW5uZWwgc28gdGhlIHZhbHVlIHJldHVybmVkIGZyb20gZGRjX2RldGVjdAogCQkgKiBpc24ndCBuZWNlc3NhcmlseSBjb3JyZWN0LgogCQkgKi8KLQkJaWYgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpIHsKKwkJaWYgKG52X2Nvbm5lY3Rvci0+ZGNiLT50eXBlID09IERDQl9DT05ORUNUT1JfRFZJX0kpIHsKIAkJCWlmIChudl9jb25uZWN0b3ItPmVkaWQtPmlucHV0ICYgRFJNX0VESURfSU5QVVRfRElHSVRBTCkKIAkJCQl0eXBlID0gT1VUUFVUX1RNRFM7CiAJCQllbHNlCkBAIC0zMjEsMTEgKzMyMywxMSBAQAogc3RhdGljIHZvaWQKIG5vdXZlYXVfY29ubmVjdG9yX2ZvcmNlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpCiB7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNvbm5lY3Rvci0+ZGV2OworCXN0cnVjdCBub3V2ZWF1X2Nvbm5lY3RvciAqbnZfY29ubmVjdG9yID0gbm91dmVhdV9jb25uZWN0b3IoY29ubmVjdG9yKTsKIAlzdHJ1Y3Qgbm91dmVhdV9lbmNvZGVyICpudl9lbmNvZGVyOwogCWludCB0eXBlOwogCi0JaWYgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkpIHsKKwlpZiAobnZfY29ubmVjdG9yLT5kY2ItPnR5cGUgPT0gRENCX0NPTk5FQ1RPUl9EVklfSSkgewogCQlpZiAoY29ubmVjdG9yLT5mb3JjZSA9PSBEUk1fRk9SQ0VfT05fRElHSVRBTCkKIAkJCXR5cGUgPSBPVVRQVVRfVE1EUzsKIAkJZWxzZQpAQCAtMzM1LDcgKzMzNyw3IEBACiAKIAludl9lbmNvZGVyID0gZmluZF9lbmNvZGVyX2J5X3R5cGUoY29ubmVjdG9yLCB0eXBlKTsKIAlpZiAoIW52X2VuY29kZXIpIHsKLQkJTlZfRVJST1IoZGV2LCAiY2FuJ3QgZmluZCBlbmNvZGVyIHRvIGZvcmNlICVzIG9uIVxuIiwKKwkJTlZfRVJST1IoY29ubmVjdG9yLT5kZXYsICJjYW4ndCBmaW5kIGVuY29kZXIgdG8gZm9yY2UgJXMgb24hXG4iLAogCQkJIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7CiAJCWNvbm5lY3Rvci0+c3RhdHVzID0gY29ubmVjdG9yX3N0YXR1c19kaXNjb25uZWN0ZWQ7CiAJCXJldHVybjsKQEAgLTM2OSw3ICszNzEsNyBAQAogCQl9CiAKIAkJLyogTFZEUyBhbHdheXMgbmVlZHMgZ3B1IHNjYWxpbmcgKi8KLQkJaWYgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0xWRFMgJiYKKwkJaWYgKG52X2Nvbm5lY3Rvci0+ZGNiLT50eXBlID09IERDQl9DT05ORUNUT1JfTFZEUyAmJgogCQkgICAgdmFsdWUgPT0gRFJNX01PREVfU0NBTEVfTk9ORSkKIAkJCXJldHVybiAtRUlOVkFMOwogCkBAIC01MzUsNyArNTM3LDcgQEAKIAkvKiBJZiB3ZSdyZSBub3QgTFZEUywgZGVzdHJveSB0aGUgcHJldmlvdXMgbmF0aXZlIG1vZGUsIHRoZSBhdHRhY2hlZAogCSAqIG1vbml0b3IgY291bGQgaGF2ZSBjaGFuZ2VkLgogCSAqLwotCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTICYmCisJaWYgKG52X2Nvbm5lY3Rvci0+ZGNiLT50eXBlICE9IERDQl9DT05ORUNUT1JfTFZEUyAmJgogCSAgICBudl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlKSB7CiAJCWRybV9tb2RlX2Rlc3Ryb3koZGV2LCBudl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlKTsKIAkJbnZfY29ubmVjdG9yLT5uYXRpdmVfbW9kZSA9IE5VTEw7CkBAIC01NjMsNyArNTY1LDcgQEAKIAkJcmV0ID0gZ2V0X3NsYXZlX2Z1bmNzKG52X2VuY29kZXIpLT4KIAkJCWdldF9tb2Rlcyh0b19kcm1fZW5jb2Rlcihudl9lbmNvZGVyKSwgY29ubmVjdG9yKTsKIAotCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTKQorCWlmIChudl9lbmNvZGVyLT5kY2ItPnR5cGUgPT0gT1VUUFVUX0xWRFMpCiAJCXJldCArPSBub3V2ZWF1X2Nvbm5lY3Rvcl9zY2FsZXJfbW9kZXNfYWRkKGNvbm5lY3Rvcik7CiAKIAlyZXR1cm4gcmV0OwpAQCAtNjEzLDYgKzYxNSw5IEBACiAKIAkJY2xvY2sgKj0gMzsKIAkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHX09OKDEpOworCQlyZXR1cm4gTU9ERV9CQUQ7CiAJfQogCiAJaWYgKGNsb2NrIDwgbWluX2Nsb2NrKQpAQCAtNjgwLDcgKzY4NSw3IEBACiAJLyogRmlyc3RseSB0cnkgZ2V0dGluZyBFRElEIG92ZXIgRERDLCBpZiBhbGxvd2VkIGFuZCBJMkMgY2hhbm5lbAogCSAqIGlzIGF2YWlsYWJsZS4KIAkgKi8KLQlpZiAoIWRldl9wcml2LT5WQklPUy5wdWIuZnBfbm9fZGRjICYmIG52X2VuY29kZXItPmRjYi0+aTJjX2luZGV4IDwgMHhmKQorCWlmICghZGV2X3ByaXYtPnZiaW9zLmZwX25vX2RkYyAmJiBudl9lbmNvZGVyLT5kY2ItPmkyY19pbmRleCA8IDB4ZikKIAkJaTJjID0gbm91dmVhdV9pMmNfZmluZChkZXYsIG52X2VuY29kZXItPmRjYi0+aTJjX2luZGV4KTsKIAogCWlmIChpMmMpIHsKQEAgLTY5NSw3ICs3MDAsNyBAQAogCSAqLwogCWlmICghbnZfY29ubmVjdG9yLT5lZGlkICYmIG5vdXZlYXVfYmlvc19mcF9tb2RlKGRldiwgJm5hdGl2ZSkgJiYKIAkgICAgIChudl9lbmNvZGVyLT5kY2ItPmx2ZHNjb25mLnVzZV9zdHJhcHNfZm9yX21vZGUgfHwKLQkgICAgICBkZXZfcHJpdi0+VkJJT1MucHViLmZwX25vX2RkYykpIHsKKwkgICAgICBkZXZfcHJpdi0+dmJpb3MuZnBfbm9fZGRjKSkgewogCQludl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlID0gZHJtX21vZGVfZHVwbGljYXRlKGRldiwgJm5hdGl2ZSk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTcwNCw3ICs3MDksNyBAQAogCSAqIHN0b3JlZCBmb3IgdGhlIHBhbmVsIHN0b3JlZCBpbiB0aGVtLgogCSAqLwogCWlmICghbnZfY29ubmVjdG9yLT5lZGlkICYmICFudl9jb25uZWN0b3ItPm5hdGl2ZV9tb2RlICYmCi0JICAgICFkZXZfcHJpdi0+VkJJT1MucHViLmZwX25vX2RkYykgeworCSAgICAhZGV2X3ByaXYtPnZiaW9zLmZwX25vX2RkYykgewogCQlzdHJ1Y3QgZWRpZCAqZWRpZCA9CiAJCQkoc3RydWN0IGVkaWQgKilub3V2ZWF1X2Jpb3NfZW1iZWRkZWRfZWRpZChkZXYpOwogCQlpZiAoZWRpZCkgewpAQCAtNzM5LDQ2ICs3NDQsNjYgQEAKIH0KIAogaW50Ci1ub3V2ZWF1X2Nvbm5lY3Rvcl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGluZGV4LCBpbnQgdHlwZSkKK25vdXZlYXVfY29ubmVjdG9yX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBkY2JfY29ubmVjdG9yX3RhYmxlX2VudHJ5ICpkY2IpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3Qgbm91dmVhdV9jb25uZWN0b3IgKm52X2Nvbm5lY3RvciA9IE5VTEw7CiAJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCB0eXBlOwogCiAJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CiAKKwlzd2l0Y2ggKGRjYi0+dHlwZSkgeworCWNhc2UgRENCX0NPTk5FQ1RPUl9OT05FOgorCQlyZXR1cm4gMDsKKwljYXNlIERDQl9DT05ORUNUT1JfVkdBOgorCQlOVl9JTkZPKGRldiwgIkRldGVjdGVkIGEgVkdBIGNvbm5lY3RvclxuIik7CisJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBOworCQlicmVhazsKKwljYXNlIERDQl9DT05ORUNUT1JfVFZfMDoKKwljYXNlIERDQl9DT05ORUNUT1JfVFZfMToKKwljYXNlIERDQl9DT05ORUNUT1JfVFZfMzoKKwkJTlZfSU5GTyhkZXYsICJEZXRlY3RlZCBhIFRWIGNvbm5lY3RvclxuIik7CisJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfVFY7CisJCWJyZWFrOworCWNhc2UgRENCX0NPTk5FQ1RPUl9EVklfSToKKwkJTlZfSU5GTyhkZXYsICJEZXRlY3RlZCBhIERWSS1JIGNvbm5lY3RvclxuIik7CisJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSTsKKwkJYnJlYWs7CisJY2FzZSBEQ0JfQ09OTkVDVE9SX0RWSV9EOgorCQlOVl9JTkZPKGRldiwgIkRldGVjdGVkIGEgRFZJLUQgY29ubmVjdG9yXG4iKTsKKwkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOworCQlicmVhazsKKwljYXNlIERDQl9DT05ORUNUT1JfSERNSV8wOgorCWNhc2UgRENCX0NPTk5FQ1RPUl9IRE1JXzE6CisJCU5WX0lORk8oZGV2LCAiRGV0ZWN0ZWQgYSBIRE1JIGNvbm5lY3RvclxuIik7CisJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfSERNSUE7CisJCWJyZWFrOworCWNhc2UgRENCX0NPTk5FQ1RPUl9MVkRTOgorCQlOVl9JTkZPKGRldiwgIkRldGVjdGVkIGEgTFZEUyBjb25uZWN0b3JcbiIpOworCQl0eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX0xWRFM7CisJCWJyZWFrOworCWNhc2UgRENCX0NPTk5FQ1RPUl9EUDoKKwkJTlZfSU5GTyhkZXYsICJEZXRlY3RlZCBhIERpc3BsYXlQb3J0IGNvbm5lY3RvclxuIik7CisJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQ7CisJCWJyZWFrOworCWNhc2UgRENCX0NPTk5FQ1RPUl9lRFA6CisJCU5WX0lORk8oZGV2LCAiRGV0ZWN0ZWQgYW4gZURQIGNvbm5lY3RvclxuIik7CisJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfZURQOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlOVl9FUlJPUihkZXYsICJ1bmtub3duIGNvbm5lY3RvciB0eXBlOiAweCUwMnghIVxuIiwgZGNiLT50eXBlKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJbnZfY29ubmVjdG9yID0ga3phbGxvYyhzaXplb2YoKm52X2Nvbm5lY3RvciksIEdGUF9LRVJORUwpOwogCWlmICghbnZfY29ubmVjdG9yKQogCQlyZXR1cm4gLUVOT01FTTsKLQludl9jb25uZWN0b3ItPmRjYiA9IG5vdXZlYXVfYmlvc19jb25uZWN0b3JfZW50cnkoZGV2LCBpbmRleCk7CisJbnZfY29ubmVjdG9yLT5kY2IgPSBkY2I7CiAJY29ubmVjdG9yID0gJm52X2Nvbm5lY3Rvci0+YmFzZTsKIAotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1ZHQToKLQkJTlZfSU5GTyhkZXYsICJEZXRlY3RlZCBhIFZHQSBjb25uZWN0b3JcbiIpOwotCQlicmVhazsKLQljYXNlIERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOgotCQlOVl9JTkZPKGRldiwgIkRldGVjdGVkIGEgRFZJLUQgY29ubmVjdG9yXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSToKLQkJTlZfSU5GTyhkZXYsICJEZXRlY3RlZCBhIERWSS1JIGNvbm5lY3RvclxuIik7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX0xWRFM6Ci0JCU5WX0lORk8oZGV2LCAiRGV0ZWN0ZWQgYSBMVkRTIGNvbm5lY3RvclxuIik7Ci0JCWJyZWFrOwotCWNhc2UgRFJNX01PREVfQ09OTkVDVE9SX1RWOgotCQlOVl9JTkZPKGRldiwgIkRldGVjdGVkIGEgVFYgY29ubmVjdG9yXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQ6Ci0JCU5WX0lORk8oZGV2LCAiRGV0ZWN0ZWQgYSBEaXNwbGF5UG9ydCBjb25uZWN0b3JcbiIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlOVl9FUlJPUihkZXYsICJVbmtub3duIGNvbm5lY3RvciwgdGhpcyBpcyBub3QgZ29vZC5cbiIpOwotCQlicmVhazsKLQl9Ci0KIAkvKiBkZWZhdWx0cywgd2lsbCBnZXQgb3ZlcnJpZGRlbiBpbiBkZXRlY3QoKSAqLwogCWNvbm5lY3Rvci0+aW50ZXJsYWNlX2FsbG93ZWQgPSBmYWxzZTsKIAljb25uZWN0b3ItPmRvdWJsZXNjYW5fYWxsb3dlZCA9IGZhbHNlOwpAQCAtNzg2LDQ0ICs4MTEsMTEgQEAKIAlkcm1fY29ubmVjdG9yX2luaXQoZGV2LCBjb25uZWN0b3IsICZub3V2ZWF1X2Nvbm5lY3Rvcl9mdW5jcywgdHlwZSk7CiAJZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfYWRkKGNvbm5lY3RvciwgJm5vdXZlYXVfY29ubmVjdG9yX2hlbHBlcl9mdW5jcyk7CiAKLQkvKiBJbml0IERWSS1JIHNwZWNpZmljIHByb3BlcnRpZXMgKi8KLQlpZiAodHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSSkgewotCQlkcm1fbW9kZV9jcmVhdGVfZHZpX2lfcHJvcGVydGllcyhkZXYpOwotCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsIGRldi0+bW9kZV9jb25maWcuZHZpX2lfc3ViY29ubmVjdG9yX3Byb3BlcnR5LCAwKTsKLQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLCBkZXYtPm1vZGVfY29uZmlnLmR2aV9pX3NlbGVjdF9zdWJjb25uZWN0b3JfcHJvcGVydHksIDApOwotCX0KLQotCWlmICh0eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTKQotCQludl9jb25uZWN0b3ItPnVzZV9kaXRoZXJpbmcgPSBmYWxzZTsKLQotCWlmICh0eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEIHx8Ci0JICAgIHR5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0RWSUkgfHwKLQkgICAgdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfTFZEUyB8fAotCSAgICB0eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkgewotCQludl9jb25uZWN0b3ItPnNjYWxpbmdfbW9kZSA9IERSTV9NT0RFX1NDQUxFX0ZVTExTQ1JFRU47Ci0KLQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLCBkZXYtPm1vZGVfY29uZmlnLnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSwKLQkJCQkJICAgICAgbnZfY29ubmVjdG9yLT5zY2FsaW5nX21vZGUpOwotCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsIGRldi0+bW9kZV9jb25maWcuZGl0aGVyaW5nX21vZGVfcHJvcGVydHksCi0JCQkJCSAgICAgIG52X2Nvbm5lY3Rvci0+dXNlX2RpdGhlcmluZyA/IERSTV9NT0RFX0RJVEhFUklOR19PTgotCQkJCQkgICAgICA6IERSTV9NT0RFX0RJVEhFUklOR19PRkYpOwotCi0JfSBlbHNlIHsKLQkJbnZfY29ubmVjdG9yLT5zY2FsaW5nX21vZGUgPSBEUk1fTU9ERV9TQ0FMRV9OT05FOwotCi0JCWlmICh0eXBlID09IERSTV9NT0RFX0NPTk5FQ1RPUl9WR0EgICYmCi0JCQkJZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkgewotCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLAotCQkJCQlkZXYtPm1vZGVfY29uZmlnLnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSwKLQkJCQkJbnZfY29ubmVjdG9yLT5zY2FsaW5nX21vZGUpOwotCQl9Ci0JfQotCiAJLyogYXR0YWNoIGVuY29kZXJzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKIAkJc3RydWN0IG5vdXZlYXVfZW5jb2RlciAqbnZfZW5jb2RlciA9IG5vdXZlYXVfZW5jb2RlcihlbmNvZGVyKTsKIAotCQlpZiAobnZfZW5jb2Rlci0+ZGNiLT5jb25uZWN0b3IgIT0gaW5kZXgpCisJCWlmIChudl9lbmNvZGVyLT5kY2ItPmNvbm5lY3RvciAhPSBkY2ItPmluZGV4KQogCQkJY29udGludWU7CiAKIAkJaWYgKGdldF9zbGF2ZV9mdW5jcyhudl9lbmNvZGVyKSkKQEAgLTgzMiw5ICs4MjQsNTIgQEAKIAkJZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5lY3RvciwgZW5jb2Rlcik7CiAJfQogCisJaWYgKCFjb25uZWN0b3ItPmVuY29kZXJfaWRzWzBdKSB7CisJCU5WX1dBUk4oZGV2LCAiICBubyBlbmNvZGVycywgaWdub3JpbmdcbiIpOworCQlkcm1fY29ubmVjdG9yX2NsZWFudXAoY29ubmVjdG9yKTsKKwkJa2ZyZWUoY29ubmVjdG9yKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogSW5pdCBEVkktSSBzcGVjaWZpYyBwcm9wZXJ0aWVzICovCisJaWYgKGRjYi0+dHlwZSA9PSBEQ0JfQ09OTkVDVE9SX0RWSV9JKSB7CisJCWRybV9tb2RlX2NyZWF0ZV9kdmlfaV9wcm9wZXJ0aWVzKGRldik7CisJCWRybV9jb25uZWN0b3JfYXR0YWNoX3Byb3BlcnR5KGNvbm5lY3RvciwgZGV2LT5tb2RlX2NvbmZpZy5kdmlfaV9zdWJjb25uZWN0b3JfcHJvcGVydHksIDApOworCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsIGRldi0+bW9kZV9jb25maWcuZHZpX2lfc2VsZWN0X3N1YmNvbm5lY3Rvcl9wcm9wZXJ0eSwgMCk7CisJfQorCisJaWYgKGRjYi0+dHlwZSAhPSBEQ0JfQ09OTkVDVE9SX0xWRFMpCisJCW52X2Nvbm5lY3Rvci0+dXNlX2RpdGhlcmluZyA9IGZhbHNlOworCisJc3dpdGNoIChkY2ItPnR5cGUpIHsKKwljYXNlIERDQl9DT05ORUNUT1JfVkdBOgorCQlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl81MCkgeworCQkJZHJtX2Nvbm5lY3Rvcl9hdHRhY2hfcHJvcGVydHkoY29ubmVjdG9yLAorCQkJCQlkZXYtPm1vZGVfY29uZmlnLnNjYWxpbmdfbW9kZV9wcm9wZXJ0eSwKKwkJCQkJbnZfY29ubmVjdG9yLT5zY2FsaW5nX21vZGUpOworCQl9CisJCS8qIGZhbGwtdGhyb3VnaCAqLworCWNhc2UgRENCX0NPTk5FQ1RPUl9UVl8wOgorCWNhc2UgRENCX0NPTk5FQ1RPUl9UVl8xOgorCWNhc2UgRENCX0NPTk5FQ1RPUl9UVl8zOgorCQludl9jb25uZWN0b3ItPnNjYWxpbmdfbW9kZSA9IERSTV9NT0RFX1NDQUxFX05PTkU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCW52X2Nvbm5lY3Rvci0+c2NhbGluZ19tb2RlID0gRFJNX01PREVfU0NBTEVfRlVMTFNDUkVFTjsKKworCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsCisJCQkJZGV2LT5tb2RlX2NvbmZpZy5zY2FsaW5nX21vZGVfcHJvcGVydHksCisJCQkJbnZfY29ubmVjdG9yLT5zY2FsaW5nX21vZGUpOworCQlkcm1fY29ubmVjdG9yX2F0dGFjaF9wcm9wZXJ0eShjb25uZWN0b3IsCisJCQkJZGV2LT5tb2RlX2NvbmZpZy5kaXRoZXJpbmdfbW9kZV9wcm9wZXJ0eSwKKwkJCQludl9jb25uZWN0b3ItPnVzZV9kaXRoZXJpbmcgPworCQkJCURSTV9NT0RFX0RJVEhFUklOR19PTiA6IERSTV9NT0RFX0RJVEhFUklOR19PRkYpOworCQlicmVhazsKKwl9CisKIAlkcm1fc3lzZnNfY29ubmVjdG9yX2FkZChjb25uZWN0b3IpOwogCi0JaWYgKGNvbm5lY3Rvci0+Y29ubmVjdG9yX3R5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX0xWRFMpIHsKKwlpZiAoZGNiLT50eXBlID09IERDQl9DT05ORUNUT1JfTFZEUykgewogCQlyZXQgPSBub3V2ZWF1X2Nvbm5lY3Rvcl9jcmVhdGVfbHZkcyhkZXYsIGNvbm5lY3Rvcik7CiAJCWlmIChyZXQpIHsKIAkJCWNvbm5lY3Rvci0+ZnVuY3MtPmRlc3Ryb3koY29ubmVjdG9yKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmggYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Nvbm5lY3Rvci5oCmluZGV4IDcyOGI4MDkuLjRlZjM4YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfY29ubmVjdG9yLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9jb25uZWN0b3IuaApAQCAtNDksNiArNDksNyBAQAogCXJldHVybiBjb250YWluZXJfb2YoY29uLCBzdHJ1Y3Qgbm91dmVhdV9jb25uZWN0b3IsIGJhc2UpOwogfQogCi1pbnQgbm91dmVhdV9jb25uZWN0b3JfY3JlYXRlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBpMmNfaW5kZXgsIGludCB0eXBlKTsKK2ludCBub3V2ZWF1X2Nvbm5lY3Rvcl9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKiwKKwkJCSAgICAgc3RydWN0IGRjYl9jb25uZWN0b3JfdGFibGVfZW50cnkgKik7CiAKICNlbmRpZiAvKiBfX05PVVZFQVVfQ09OTkVDVE9SX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RlYnVnZnMuYwppbmRleCBkNzlkYjM2Li44ZmY5ZWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RlYnVnZnMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RlYnVnZnMuYwpAQCAtNDcsMTIgKzQ3LDIzIEBACiAJc2VxX3ByaW50ZihtLCAiICAgICAgICAgICBjdXI6IDB4JTA4eFxuIiwgY2hhbi0+ZG1hLmN1ciA8PCAyKTsKIAlzZXFfcHJpbnRmKG0sICIgICAgICAgICAgIHB1dDogMHglMDh4XG4iLCBjaGFuLT5kbWEucHV0IDw8IDIpOwogCXNlcV9wcmludGYobSwgIiAgICAgICAgICBmcmVlOiAweCUwOHhcbiIsIGNoYW4tPmRtYS5mcmVlIDw8IDIpOworCWlmIChjaGFuLT5kbWEuaWJfbWF4KSB7CisJCXNlcV9wcmludGYobSwgIiAgICAgICAgaWIgbWF4OiAweCUwOHhcbiIsIGNoYW4tPmRtYS5pYl9tYXgpOworCQlzZXFfcHJpbnRmKG0sICIgICAgICAgIGliIHB1dDogMHglMDh4XG4iLCBjaGFuLT5kbWEuaWJfcHV0KTsKKwkJc2VxX3ByaW50ZihtLCAiICAgICAgIGliIGZyZWU6IDB4JTA4eFxuIiwgY2hhbi0+ZG1hLmliX2ZyZWUpOworCX0KIAogCXNlcV9wcmludGYobSwgImdwdSBmaWZvIHN0YXRlOlxuIik7CiAJc2VxX3ByaW50ZihtLCAiICAgICAgICAgICBnZXQ6IDB4JTA4eFxuIiwKIAkJCQkJbnZjaGFuX3JkMzIoY2hhbiwgY2hhbi0+dXNlcl9nZXQpKTsKIAlzZXFfcHJpbnRmKG0sICIgICAgICAgICAgIHB1dDogMHglMDh4XG4iLAogCQkJCQludmNoYW5fcmQzMihjaGFuLCBjaGFuLT51c2VyX3B1dCkpOworCWlmIChjaGFuLT5kbWEuaWJfbWF4KSB7CisJCXNlcV9wcmludGYobSwgIiAgICAgICAgaWIgZ2V0OiAweCUwOHhcbiIsCisJCQkgICBudmNoYW5fcmQzMihjaGFuLCAweDg4KSk7CisJCXNlcV9wcmludGYobSwgIiAgICAgICAgaWIgcHV0OiAweCUwOHhcbiIsCisJCQkgICBudmNoYW5fcmQzMihjaGFuLCAweDhjKSk7CisJfQogCiAJc2VxX3ByaW50ZihtLCAibGFzdCBmZW5jZSAgICA6ICVkXG4iLCBjaGFuLT5mZW5jZS5zZXF1ZW5jZSk7CiAJc2VxX3ByaW50ZihtLCAibGFzdCBzaWduYWxsZWQ6ICVkXG4iLCBjaGFuLT5mZW5jZS5zZXF1ZW5jZV9hY2spOwpAQCAtMTMzLDkgKzE0NCwyMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50Citub3V2ZWF1X2RlYnVnZnNfdmJpb3NfaW1hZ2Uoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkcm1faW5mb19ub2RlICpub2RlID0gKHN0cnVjdCBkcm1faW5mb19ub2RlICopIG0tPnByaXZhdGU7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gbm9kZS0+bWlub3ItPmRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPnZiaW9zLmxlbmd0aDsgaSsrKQorCQlzZXFfcHJpbnRmKG0sICIlYyIsIGRldl9wcml2LT52Ymlvcy5kYXRhW2ldKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBkcm1faW5mb19saXN0IG5vdXZlYXVfZGVidWdmc19saXN0W10gPSB7CiAJeyAiY2hpcHNldCIsIG5vdXZlYXVfZGVidWdmc19jaGlwc2V0X2luZm8sIDAsIE5VTEwgfSwKIAl7ICJtZW1vcnkiLCBub3V2ZWF1X2RlYnVnZnNfbWVtb3J5X2luZm8sIDAsIE5VTEwgfSwKKwl7ICJ2Ymlvcy5yb20iLCBub3V2ZWF1X2RlYnVnZnNfdmJpb3NfaW1hZ2UsIDAsIE5VTEwgfSwKIH07CiAjZGVmaW5lIE5PVVZFQVVfREVCVUdGU19FTlRSSUVTIEFSUkFZX1NJWkUobm91dmVhdV9kZWJ1Z2ZzX2xpc3QpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZGlzcGxheS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kaXNwbGF5LmMKaW5kZXggZGZjOTQzOS4uY2YxYzVjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kaXNwbGF5LmMKQEAgLTM5LDExICszOSw4IEBACiAJaWYgKGRybV9mYi0+ZmJkZXYpCiAJCW5vdXZlYXVfZmJjb25fcmVtb3ZlKGRldiwgZHJtX2ZiKTsKIAotCWlmIChmYi0+bnZibykgewotCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGZiLT5udmJvLT5nZW0pOwotCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQl9CisJaWYgKGZiLT5udmJvKQorCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChmYi0+bnZiby0+Z2VtKTsKIAogCWRybV9mcmFtZWJ1ZmZlcl9jbGVhbnVwKGRybV9mYik7CiAJa2ZyZWUoZmIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmMKaW5kZXggNTBkOWU2Ny4uYzg0ODJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5jCkBAIC0zMiw3ICszMiwyMiBAQAogdm9pZAogbm91dmVhdV9kbWFfcHJlX2luaXQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbikKIHsKLQljaGFuLT5kbWEubWF4ICA9IChjaGFuLT5wdXNoYnVmX2JvLT5iby5tZW0uc2l6ZSA+PiAyKSAtIDI7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY2hhbi0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3Qgbm91dmVhdV9ibyAqcHVzaGJ1ZiA9IGNoYW4tPnB1c2hidWZfYm87CisKKwlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA9PSBOVl81MCkgeworCQljb25zdCBpbnQgaWJfc2l6ZSA9IHB1c2hidWYtPmJvLm1lbS5zaXplIC8gMjsKKworCQljaGFuLT5kbWEuaWJfYmFzZSA9IChwdXNoYnVmLT5iby5tZW0uc2l6ZSAtIGliX3NpemUpID4+IDI7CisJCWNoYW4tPmRtYS5pYl9tYXggPSAoaWJfc2l6ZSAvIDgpIC0gMTsKKwkJY2hhbi0+ZG1hLmliX3B1dCA9IDA7CisJCWNoYW4tPmRtYS5pYl9mcmVlID0gY2hhbi0+ZG1hLmliX21heCAtIGNoYW4tPmRtYS5pYl9wdXQ7CisKKwkJY2hhbi0+ZG1hLm1heCA9IChwdXNoYnVmLT5iby5tZW0uc2l6ZSAtIGliX3NpemUpID4+IDI7CisJfSBlbHNlIHsKKwkJY2hhbi0+ZG1hLm1heCAgPSAocHVzaGJ1Zi0+Ym8ubWVtLnNpemUgPj4gMikgLSAyOworCX0KKwogCWNoYW4tPmRtYS5wdXQgID0gMDsKIAljaGFuLT5kbWEuY3VyICA9IGNoYW4tPmRtYS5wdXQ7CiAJY2hhbi0+ZG1hLmZyZWUgPSBjaGFuLT5kbWEubWF4IC0gY2hhbi0+ZG1hLmN1cjsKQEAgLTE2MiwxMiArMTc3LDEwMSBAQAogCXJldHVybiAodmFsIC0gY2hhbi0+cHVzaGJ1Zl9iYXNlKSA+PiAyOwogfQogCit2b2lkCitudjUwX2RtYV9wdXNoKHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIHN0cnVjdCBub3V2ZWF1X2JvICpibywKKwkgICAgICBpbnQgZGVsdGEsIGludCBsZW5ndGgpCit7CisJc3RydWN0IG5vdXZlYXVfYm8gKnBiID0gY2hhbi0+cHVzaGJ1Zl9ibzsKKwl1aW50NjRfdCBvZmZzZXQgPSBiby0+Ym8ub2Zmc2V0ICsgZGVsdGE7CisJaW50IGlwID0gKGNoYW4tPmRtYS5pYl9wdXQgKiAyKSArIGNoYW4tPmRtYS5pYl9iYXNlOworCisJQlVHX09OKGNoYW4tPmRtYS5pYl9mcmVlIDwgMSk7CisJbm91dmVhdV9ib193cjMyKHBiLCBpcCsrLCBsb3dlcl8zMl9iaXRzKG9mZnNldCkpOworCW5vdXZlYXVfYm9fd3IzMihwYiwgaXArKywgdXBwZXJfMzJfYml0cyhvZmZzZXQpIHwgbGVuZ3RoIDw8IDgpOworCisJY2hhbi0+ZG1hLmliX3B1dCA9IChjaGFuLT5kbWEuaWJfcHV0ICsgMSkgJiBjaGFuLT5kbWEuaWJfbWF4OworCW52Y2hhbl93cjMyKGNoYW4sIDB4OGMsIGNoYW4tPmRtYS5pYl9wdXQpOworCWNoYW4tPmRtYS5pYl9mcmVlLS07Cit9CisKK3N0YXRpYyBpbnQKK252NTBfZG1hX3B1c2hfd2FpdChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLCBpbnQgY291bnQpCit7CisJdWludDMyX3QgY250ID0gMCwgcHJldl9nZXQgPSAwOworCisJd2hpbGUgKGNoYW4tPmRtYS5pYl9mcmVlIDwgY291bnQpIHsKKwkJdWludDMyX3QgZ2V0ID0gbnZjaGFuX3JkMzIoY2hhbiwgMHg4OCk7CisJCWlmIChnZXQgIT0gcHJldl9nZXQpIHsKKwkJCXByZXZfZ2V0ID0gZ2V0OworCQkJY250ID0gMDsKKwkJfQorCisJCWlmICgoKytjbnQgJiAweGZmKSA9PSAwKSB7CisJCQlEUk1fVURFTEFZKDEpOworCQkJaWYgKGNudCA+IDEwMDAwMCkKKwkJCQlyZXR1cm4gLUVCVVNZOworCQl9CisKKwkJY2hhbi0+ZG1hLmliX2ZyZWUgPSBnZXQgLSBjaGFuLT5kbWEuaWJfcHV0OworCQlpZiAoY2hhbi0+ZG1hLmliX2ZyZWUgPD0gMCkKKwkJCWNoYW4tPmRtYS5pYl9mcmVlICs9IGNoYW4tPmRtYS5pYl9tYXggKyAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitudjUwX2RtYV93YWl0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBzbG90cywgaW50IGNvdW50KQoreworCXVpbnQzMl90IGNudCA9IDAsIHByZXZfZ2V0ID0gMDsKKwlpbnQgcmV0OworCisJcmV0ID0gbnY1MF9kbWFfcHVzaF93YWl0KGNoYW4sIHNsb3RzICsgMSk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCXJldHVybiByZXQ7CisKKwl3aGlsZSAoY2hhbi0+ZG1hLmZyZWUgPCBjb3VudCkgeworCQlpbnQgZ2V0ID0gUkVBRF9HRVQoY2hhbiwgJnByZXZfZ2V0LCAmY250KTsKKwkJaWYgKHVubGlrZWx5KGdldCA8IDApKSB7CisJCQlpZiAoZ2V0ID09IC1FSU5WQUwpCisJCQkJY29udGludWU7CisKKwkJCXJldHVybiBnZXQ7CisJCX0KKworCQlpZiAoZ2V0IDw9IGNoYW4tPmRtYS5jdXIpIHsKKwkJCWNoYW4tPmRtYS5mcmVlID0gY2hhbi0+ZG1hLm1heCAtIGNoYW4tPmRtYS5jdXI7CisJCQlpZiAoY2hhbi0+ZG1hLmZyZWUgPj0gY291bnQpCisJCQkJYnJlYWs7CisKKwkJCUZJUkVfUklORyhjaGFuKTsKKwkJCWRvIHsKKwkJCQlnZXQgPSBSRUFEX0dFVChjaGFuLCAmcHJldl9nZXQsICZjbnQpOworCQkJCWlmICh1bmxpa2VseShnZXQgPCAwKSkgeworCQkJCQlpZiAoZ2V0ID09IC1FSU5WQUwpCisJCQkJCQljb250aW51ZTsKKwkJCQkJcmV0dXJuIGdldDsKKwkJCQl9CisJCQl9IHdoaWxlIChnZXQgPT0gMCk7CisJCQljaGFuLT5kbWEuY3VyID0gMDsKKwkJCWNoYW4tPmRtYS5wdXQgPSAwOworCQl9CisKKwkJY2hhbi0+ZG1hLmZyZWUgPSBnZXQgLSBjaGFuLT5kbWEuY3VyIC0gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogaW50Ci1ub3V2ZWF1X2RtYV93YWl0KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBzaXplKQorbm91dmVhdV9kbWFfd2FpdChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLCBpbnQgc2xvdHMsIGludCBzaXplKQogewogCXVpbnQzMl90IHByZXZfZ2V0ID0gMCwgY250ID0gMDsKIAlpbnQgZ2V0OwogCisJaWYgKGNoYW4tPmRtYS5pYl9tYXgpCisJCXJldHVybiBudjUwX2RtYV93YWl0KGNoYW4sIHNsb3RzLCBzaXplKTsKKwogCXdoaWxlIChjaGFuLT5kbWEuZnJlZSA8IHNpemUpIHsKIAkJZ2V0ID0gUkVBRF9HRVQoY2hhbiwgJnByZXZfZ2V0LCAmY250KTsKIAkJaWYgKHVubGlrZWx5KGdldCA9PSAtRUJVU1kpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWEuaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZG1hLmgKaW5kZXggZGFiZmQ2NS4uOGIwNWMxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kbWEuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RtYS5oCkBAIC0zMSw2ICszMSw5IEBACiAjZGVmaW5lIE5PVVZFQVVfRE1BX0RFQlVHIDAKICNlbmRpZgogCit2b2lkIG52NTBfZG1hX3B1c2goc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqLCBzdHJ1Y3Qgbm91dmVhdV9ibyAqLAorCQkgICBpbnQgZGVsdGEsIGludCBsZW5ndGgpOworCiAvKgogICogVGhlcmUncyBhIGh3IHJhY2UgY29uZGl0aW9uIHdoZXJlIHlvdSBjYW4ndCBqdW1wIHRvIHlvdXIgUFVUIG9mZnNldCwKICAqIHRvIGF2b2lkIHRoaXMgd2UganVtcCB0byBvZmZzZXQgKyBTS0lQUyBhbmQgZmlsbCB0aGUgZGlmZmVyZW5jZSB3aXRoCkBAIC05NiwxMyArOTksMTEgQEAKIHN0YXRpYyBfX211c3RfY2hlY2sgaW5saW5lIGludAogUklOR19TUEFDRShzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuLCBpbnQgc2l6ZSkKIHsKLQlpZiAoY2hhbi0+ZG1hLmZyZWUgPCBzaXplKSB7Ci0JCWludCByZXQ7CisJaW50IHJldDsKIAotCQlyZXQgPSBub3V2ZWF1X2RtYV93YWl0KGNoYW4sIHNpemUpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIHJldDsKLQl9CisJcmV0ID0gbm91dmVhdV9kbWFfd2FpdChjaGFuLCAxLCBzaXplKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJY2hhbi0+ZG1hLmZyZWUgLT0gc2l6ZTsKIAlyZXR1cm4gMDsKQEAgLTE0Niw3ICsxNDcsMTMgQEAKIAkJcmV0dXJuOwogCWNoYW4tPmFjY2VsX2RvbmUgPSB0cnVlOwogCi0JV1JJVEVfUFVUKGNoYW4tPmRtYS5jdXIpOworCWlmIChjaGFuLT5kbWEuaWJfbWF4KSB7CisJCW52NTBfZG1hX3B1c2goY2hhbiwgY2hhbi0+cHVzaGJ1Zl9ibywgY2hhbi0+ZG1hLnB1dCA8PCAyLAorCQkJICAgICAgKGNoYW4tPmRtYS5jdXIgLSBjaGFuLT5kbWEucHV0KSA8PCAyKTsKKwl9IGVsc2UgeworCQlXUklURV9QVVQoY2hhbi0+ZG1hLmN1cik7CisJfQorCiAJY2hhbi0+ZG1hLnB1dCA9IGNoYW4tPmRtYS5jdXI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5jCmluZGV4IGRhM2I5M2IuLjMwY2MwOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuYwpAQCAtNzUsMTEgKzc1LDExIEBACiBpbnQgbm91dmVhdV9pZ25vcmVsaWQgPSAwOwogbW9kdWxlX3BhcmFtX25hbWVkKGlnbm9yZWxpZCwgbm91dmVhdV9pZ25vcmVsaWQsIGludCwgMDQwMCk7CiAKLU1PRFVMRV9QQVJNX0RFU0Mobm9hZ3AsICJEaXNhYmxlIGFsbCBhY2NlbGVyYXRpb24iKTsKK01PRFVMRV9QQVJNX0RFU0Mobm9hY2NlbCwgIkRpc2FibGUgYWxsIGFjY2VsZXJhdGlvbiIpOwogaW50IG5vdXZlYXVfbm9hY2NlbCA9IDA7CiBtb2R1bGVfcGFyYW1fbmFtZWQobm9hY2NlbCwgbm91dmVhdV9ub2FjY2VsLCBpbnQsIDA0MDApOwogCi1NT0RVTEVfUEFSTV9ERVNDKG5vYWdwLCAiRGlzYWJsZSBmYmNvbiBhY2NlbGVyYXRpb24iKTsKK01PRFVMRV9QQVJNX0RFU0Mobm9mYmFjY2VsLCAiRGlzYWJsZSBmYmNvbiBhY2NlbGVyYXRpb24iKTsKIGludCBub3V2ZWF1X25vZmJhY2NlbCA9IDA7CiBtb2R1bGVfcGFyYW1fbmFtZWQobm9mYmFjY2VsLCBub3V2ZWF1X25vZmJhY2NlbCwgaW50LCAwNDAwKTsKIApAQCAtMTM1LDcgKzEzNSw3IEBACiAJZHJtX3B1dF9kZXYoZGV2KTsKIH0KIAotc3RhdGljIGludAoraW50CiBub3V2ZWF1X3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3QgcG1fc3RhdGUpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKQEAgLTIzMyw3ICsyMzMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQKK2ludAogbm91dmVhdV9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CkBAIC00MDIsOCArNDAyLDEwIEBACiAJCQlub3V2ZWF1X21vZGVzZXQgPSAxOwogCX0KIAotCWlmIChub3V2ZWF1X21vZGVzZXQgPT0gMSkKKwlpZiAobm91dmVhdV9tb2Rlc2V0ID09IDEpIHsKIAkJZHJpdmVyLmRyaXZlcl9mZWF0dXJlcyB8PSBEUklWRVJfTU9ERVNFVDsKKwkJbm91dmVhdV9yZWdpc3Rlcl9kc21faGFuZGxlcigpOworCX0KIAogCXJldHVybiBkcm1faW5pdCgmZHJpdmVyKTsKIH0KQEAgLTQxMSw2ICs0MTMsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IG5vdXZlYXVfZXhpdCh2b2lkKQogewogCWRybV9leGl0KCZkcml2ZXIpOworCW5vdXZlYXVfdW5yZWdpc3Rlcl9kc21faGFuZGxlcigpOwogfQogCiBtb2R1bGVfaW5pdChub3V2ZWF1X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJ2LmgKaW5kZXggMWMxNWVmMy4uNGI5YWFmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2Rydi5oCkBAIC0zNCw3ICszNCw3IEBACiAKICNkZWZpbmUgRFJJVkVSX01BSk9SCQkwCiAjZGVmaW5lIERSSVZFUl9NSU5PUgkJMAotI2RlZmluZSBEUklWRVJfUEFUQ0hMRVZFTAkxNQorI2RlZmluZSBEUklWRVJfUEFUQ0hMRVZFTAkxNgogCiAjZGVmaW5lIE5PVVZFQVVfRkFNSUxZICAgMHgwMDAwRkZGRgogI2RlZmluZSBOT1VWRUFVX0ZMQUdTICAgIDB4RkZGRjAwMDAKQEAgLTgzLDYgKzgzLDcgQEAKIAlzdHJ1Y3QgZHJtX2ZpbGUgKnJlc2VydmVkX2J5OwogCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CiAJaW50IHBiYm9faW5kZXg7CisJYm9vbCB2YWxpZGF0ZV9tYXBwZWQ7CiAKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFubmVsOwogCkBAIC0yMzksNiArMjQwLDExIEBACiAJCWludCBjdXI7CiAJCWludCBwdXQ7CiAJCS8qIGFjY2VzcyB2aWEgcHVzaGJ1Zl9ibyAqLworCisJCWludCBpYl9iYXNlOworCQlpbnQgaWJfbWF4OworCQlpbnQgaWJfZnJlZTsKKwkJaW50IGliX3B1dDsKIAl9IGRtYTsKIAogCXVpbnQzMl90IHN3X3N1YmNoYW5uZWxbOF07CkBAIC01MzMsNiArNTM5LDkgQEAKIAlzdHJ1Y3Qgbm91dmVhdV9lbmdpbmUgZW5naW5lOwogCXN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW5uZWw7CiAKKwkvKiBGb3IgUEZJRk8gYW5kIFBHUkFQSC4gKi8KKwlzcGlubG9ja190IGNvbnRleHRfc3dpdGNoX2xvY2s7CisKIAkvKiBSQU1JTiBjb25maWd1cmF0aW9uLCBSQU1GQywgUkFNSFQgYW5kIFJBTVJPIG9mZnNldHMgKi8KIAlzdHJ1Y3Qgbm91dmVhdV9ncHVvYmogKnJhbWh0OwogCXVpbnQzMl90IHJhbWluX3JzdmRfdnJhbTsKQEAgLTU0NCw3ICs1NTMsNyBAQAogCXVpbnQzMl90IHJhbXJvX29mZnNldDsKIAl1aW50MzJfdCByYW1yb19zaXplOwogCi0JLyogYmFzZSBwaHlzaWNhbCBhZHJlc3NlcyAqLworCS8qIGJhc2UgcGh5c2ljYWwgYWRkcmVzc2VzICovCiAJdWludDY0X3QgZmJfcGh5czsKIAl1aW50NjRfdCBmYl9hdmFpbGFibGVfc2l6ZTsKIAl1aW50NjRfdCBmYl9tYXBwYWJsZV9wYWdlczsKQEAgLTU5Niw4ICs2MDUsNyBAQAogCiAJc3RydWN0IGxpc3RfaGVhZCBncHVvYmpfbGlzdDsKIAotCXN0cnVjdCBudmJpb3MgVkJJT1M7Ci0Jc3RydWN0IG5vdXZlYXVfYmlvc19pbmZvICp2YmlvczsKKwlzdHJ1Y3QgbnZiaW9zIHZiaW9zOwogCiAJc3RydWN0IG52MDRfbW9kZV9zdGF0ZSBtb2RlX3JlZzsKIAlzdHJ1Y3QgbnYwNF9tb2RlX3N0YXRlIHNhdmVkX3JlZzsKQEAgLTYxNCw3ICs2MjIsNiBAQAogCX0gc3VzcmVzOwogCiAJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodDsKLQlib29sIGFjcGlfZHNtOwogCiAJc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqZXZvOwogCkBAIC02ODIsNiArNjg5LDkgQEAKIGV4dGVybiBpbnQgbm91dmVhdV9ub2ZiYWNjZWw7CiBleHRlcm4gaW50IG5vdXZlYXVfbm9hY2NlbDsKIAorZXh0ZXJuIGludCBub3V2ZWF1X3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3QgcG1fc3RhdGUpOworZXh0ZXJuIGludCBub3V2ZWF1X3BjaV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworCiAvKiBub3V2ZWF1X3N0YXRlLmMgKi8KIGV4dGVybiB2b2lkIG5vdXZlYXVfcHJlY2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICopOwogZXh0ZXJuIGludCAgbm91dmVhdV9sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICosIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwpAQCAtNjk2LDEyICs3MDYsNiBAQAogCQkJICAgICAgIHVpbnQzMl90IHJlZywgdWludDMyX3QgbWFzaywgdWludDMyX3QgdmFsKTsKIGV4dGVybiBib29sIG5vdXZlYXVfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgZHJtX2RldmljZSAqKTsKIGV4dGVybiBpbnQgIG5vdXZlYXVfY2FyZF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICopOwotZXh0ZXJuIGludCAgbm91dmVhdV9pb2N0bF9jYXJkX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKiwgdm9pZCAqZGF0YSwKLQkJCQkgICAgc3RydWN0IGRybV9maWxlICopOwotZXh0ZXJuIGludCAgbm91dmVhdV9pb2N0bF9zdXNwZW5kKHN0cnVjdCBkcm1fZGV2aWNlICosIHZvaWQgKmRhdGEsCi0JCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKik7Ci1leHRlcm4gaW50ICBub3V2ZWF1X2lvY3RsX3Jlc3VtZShzdHJ1Y3QgZHJtX2RldmljZSAqLCB2b2lkICpkYXRhLAotCQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKik7CiAKIC8qIG5vdXZlYXVfbWVtLmMgKi8KIGV4dGVybiBpbnQgIG5vdXZlYXVfbWVtX2luaXRfaGVhcChzdHJ1Y3QgbWVtX2Jsb2NrICoqLCB1aW50NjRfdCBzdGFydCwKQEAgLTg0NSwyMSArODQ5LDE1IEBACiAvKiBub3V2ZWF1X2RtYS5jICovCiBleHRlcm4gdm9pZCBub3V2ZWF1X2RtYV9wcmVfaW5pdChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwogZXh0ZXJuIGludCAgbm91dmVhdV9kbWFfaW5pdChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICopOwotZXh0ZXJuIGludCAgbm91dmVhdV9kbWFfd2FpdChzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICosIGludCBzaXplKTsKK2V4dGVybiBpbnQgIG5vdXZlYXVfZG1hX3dhaXQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqLCBpbnQgc2xvdHMsIGludCBzaXplKTsKIAogLyogbm91dmVhdV9hY3BpLmMgKi8KLSNpZmRlZiBDT05GSUdfQUNQSQotZXh0ZXJuIGludCBub3V2ZWF1X2h5YnJpZF9zZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLWV4dGVybiBib29sIG5vdXZlYXVfZHNtX3Byb2JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworI2lmIGRlZmluZWQoQ09ORklHX0FDUEkpCit2b2lkIG5vdXZlYXVfcmVnaXN0ZXJfZHNtX2hhbmRsZXIodm9pZCk7Cit2b2lkIG5vdXZlYXVfdW5yZWdpc3Rlcl9kc21faGFuZGxlcih2b2lkKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIGludCBub3V2ZWF1X2h5YnJpZF9zZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQotewotCXJldHVybiAwOwotfQotc3RhdGljIGlubGluZSBib29sIG5vdXZlYXVfZHNtX3Byb2JlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCi17Ci0JcmV0dXJuIGZhbHNlOwotfQorc3RhdGljIGlubGluZSB2b2lkIG5vdXZlYXVfcmVnaXN0ZXJfZHNtX2hhbmRsZXIodm9pZCkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBub3V2ZWF1X3VucmVnaXN0ZXJfZHNtX2hhbmRsZXIodm9pZCkge30KICNlbmRpZgogCiAvKiBub3V2ZWF1X2JhY2tsaWdodC5jICovCkBAIC0xMDI3LDYgKzEwMjUsNyBAQAogZXh0ZXJuIGludCAgbnY1MF9ncmFwaF9sb2FkX2NvbnRleHQoc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqKTsKIGV4dGVybiBpbnQgIG52NTBfZ3JhcGhfdW5sb2FkX2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKik7CiBleHRlcm4gdm9pZCBudjUwX2dyYXBoX2NvbnRleHRfc3dpdGNoKHN0cnVjdCBkcm1fZGV2aWNlICopOworZXh0ZXJuIGludCAgbnY1MF9ncmN0eF9pbml0KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICopOwogCiAvKiBub3V2ZWF1X2dyY3R4LmMgKi8KIGV4dGVybiBpbnQgIG5vdXZlYXVfZ3JjdHhfcHJvZ19sb2FkKHN0cnVjdCBkcm1fZGV2aWNlICopOwpAQCAtMTE1MiwxNiArMTE1MSw2IEBACiAJCQkJIHN0cnVjdCBkcm1fZmlsZSAqKTsKIGV4dGVybiBpbnQgbm91dmVhdV9nZW1faW9jdGxfcHVzaGJ1ZihzdHJ1Y3QgZHJtX2RldmljZSAqLCB2b2lkICosCiAJCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKik7Ci1leHRlcm4gaW50IG5vdXZlYXVfZ2VtX2lvY3RsX3B1c2hidWZfY2FsbChzdHJ1Y3QgZHJtX2RldmljZSAqLCB2b2lkICosCi0JCQkJCSAgc3RydWN0IGRybV9maWxlICopOwotZXh0ZXJuIGludCBub3V2ZWF1X2dlbV9pb2N0bF9wdXNoYnVmX2NhbGwyKHN0cnVjdCBkcm1fZGV2aWNlICosIHZvaWQgKiwKLQkJCQkJICAgc3RydWN0IGRybV9maWxlICopOwotZXh0ZXJuIGludCBub3V2ZWF1X2dlbV9pb2N0bF9waW4oc3RydWN0IGRybV9kZXZpY2UgKiwgdm9pZCAqLAotCQkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKik7Ci1leHRlcm4gaW50IG5vdXZlYXVfZ2VtX2lvY3RsX3VucGluKHN0cnVjdCBkcm1fZGV2aWNlICosIHZvaWQgKiwKLQkJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKik7Ci1leHRlcm4gaW50IG5vdXZlYXVfZ2VtX2lvY3RsX3RpbGUoc3RydWN0IGRybV9kZXZpY2UgKiwgdm9pZCAqLAotCQkJCSAgc3RydWN0IGRybV9maWxlICopOwogZXh0ZXJuIGludCBub3V2ZWF1X2dlbV9pb2N0bF9jcHVfcHJlcChzdHJ1Y3QgZHJtX2RldmljZSAqLCB2b2lkICosCiAJCQkJICAgICAgc3RydWN0IGRybV9maWxlICopOwogZXh0ZXJuIGludCBub3V2ZWF1X2dlbV9pb2N0bF9jcHVfZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqLCB2b2lkICosCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2ZiY29uLmMKaW5kZXggZWE4NzlhMi4uNjhjZWRkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZmJjb24uYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjcmVlbl9pbmZvLmg+CisjaW5jbHVkZSA8bGludXgvdmdhX3N3aXRjaGVyb28uaD4KIAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm0uaCIKQEAgLTM3MCw2ICszNzEsNyBAQAogCQkJCQkJbnZiby0+Ym8ub2Zmc2V0LCBudmJvKTsKIAogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXZnYV9zd2l0Y2hlcm9vX2NsaWVudF9mYl9zZXQoZGV2LT5wZGV2LCBpbmZvKTsKIAlyZXR1cm4gMDsKIAogb3V0X3VucmVmOgpAQCAtNDAxLDEwICs0MDMsOCBAQAogCiAJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiAJCW5vdXZlYXVfYm9fdW5tYXAobm91dmVhdV9mYi0+bnZibyk7Ci0JCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uobm91dmVhdV9mYi0+bnZiby0+Z2VtKTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQobm91dmVhdV9mYi0+bnZiby0+Z2VtKTsKIAkJbm91dmVhdV9mYi0+bnZibyA9IE5VTEw7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCQlpZiAocGFyKQogCQkJZHJtX2ZiX2hlbHBlcl9mcmVlKCZwYXItPmhlbHBlcik7CiAJCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9nZW0uYwppbmRleCA3MGNjMzA4Li4wZDIyZjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2dlbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZ2VtLmMKQEAgLTE2NywxMiArMTY3LDEwIEBACiAKIAlyZXQgPSBkcm1fZ2VtX2hhbmRsZV9jcmVhdGUoZmlsZV9wcml2LCBudmJvLT5nZW0sICZyZXEtPmluZm8uaGFuZGxlKTsKIG91dDoKLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JZHJtX2dlbV9vYmplY3RfaGFuZGxlX3VucmVmZXJlbmNlKG52Ym8tPmdlbSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfaGFuZGxlX3VucmVmZXJlbmNlX3VubG9ja2VkKG52Ym8tPmdlbSk7CiAKIAlpZiAocmV0KQotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShudmJvLT5nZW0pOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChudmJvLT5nZW0pOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI0Myw2ICsyNDEsMTEgQEAKIAkJCW5vdXZlYXVfZmVuY2VfdW5yZWYoKHZvaWQgKikmcHJldl9mZW5jZSk7CiAJCX0KIAorCQlpZiAodW5saWtlbHkobnZiby0+dmFsaWRhdGVfbWFwcGVkKSkgeworCQkJdHRtX2JvX2t1bm1hcCgmbnZiby0+a21hcCk7CisJCQludmJvLT52YWxpZGF0ZV9tYXBwZWQgPSBmYWxzZTsKKwkJfQorCiAJCWxpc3RfZGVsKCZudmJvLT5lbnRyeSk7CiAJCW52Ym8tPnJlc2VydmVkX2J5ID0gTlVMTDsKIAkJdHRtX2JvX3VucmVzZXJ2ZSgmbnZiby0+Ym8pOwpAQCAtMzAyLDExICszMDUsMTQgQEAKIAkJCWlmIChyZXQgPT0gLUVBR0FJTikKIAkJCQlyZXQgPSB0dG1fYm9fd2FpdF91bnJlc2VydmVkKCZudmJvLT5ibywgZmFsc2UpOwogCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZ2VtKTsKLQkJCWlmIChyZXQpCisJCQlpZiAocmV0KSB7CisJCQkJTlZfRVJST1IoZGV2LCAiZmFpbCByZXNlcnZlXG4iKTsKIAkJCQlyZXR1cm4gcmV0OworCQkJfQogCQkJZ290byByZXRyeTsKIAkJfQogCisJCWItPnVzZXJfcHJpdiA9ICh1aW50NjRfdCkodW5zaWduZWQgbG9uZyludmJvOwogCQludmJvLT5yZXNlcnZlZF9ieSA9IGZpbGVfcHJpdjsKIAkJbnZiby0+cGJib19pbmRleCA9IGk7CiAJCWlmICgoYi0+dmFsaWRfZG9tYWlucyAmIE5PVVZFQVVfR0VNX0RPTUFJTl9WUkFNKSAmJgpAQCAtMzM2LDggKzM0MiwxMCBAQAogCQkJfQogCiAJCQlyZXQgPSB0dG1fYm9fd2FpdF9jcHUoJm52Ym8tPmJvLCBmYWxzZSk7Ci0JCQlpZiAocmV0KQorCQkJaWYgKHJldCkgeworCQkJCU5WX0VSUk9SKGRldiwgImZhaWwgd2FpdF9jcHVcbiIpOwogCQkJCXJldHVybiByZXQ7CisJCQl9CiAJCQlnb3RvIHJldHJ5OwogCQl9CiAJfQpAQCAtMzUxLDYgKzM1OSw3IEBACiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9wdXNoYnVmX2JvIF9fdXNlciAqdXBiYm8gPQogCQkJCSh2b2lkIF9fZm9yY2UgX191c2VyICopKHVpbnRwdHJfdCl1c2VyX3BiYm9fcHRyOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CiAJc3RydWN0IG5vdXZlYXVfYm8gKm52Ym87CiAJaW50IHJldCwgcmVsb2NzID0gMDsKIApAQCAtMzYyLDM5ICszNzEsNDYgQEAKIAkJCXNwaW5fbG9jaygmbnZiby0+Ym8ubG9jayk7CiAJCQlyZXQgPSB0dG1fYm9fd2FpdCgmbnZiby0+Ym8sIGZhbHNlLCBmYWxzZSwgZmFsc2UpOwogCQkJc3Bpbl91bmxvY2soJm52Ym8tPmJvLmxvY2spOwotCQkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJCU5WX0VSUk9SKGRldiwgImZhaWwgd2FpdCBvdGhlciBjaGFuXG4iKTsKIAkJCQlyZXR1cm4gcmV0OworCQkJfQogCQl9CiAKIAkJcmV0ID0gbm91dmVhdV9nZW1fc2V0X2RvbWFpbihudmJvLT5nZW0sIGItPnJlYWRfZG9tYWlucywKIAkJCQkJICAgICBiLT53cml0ZV9kb21haW5zLAogCQkJCQkgICAgIGItPnZhbGlkX2RvbWFpbnMpOwotCQlpZiAodW5saWtlbHkocmV0KSkKKwkJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJCU5WX0VSUk9SKGRldiwgImZhaWwgc2V0X2RvbWFpblxuIik7CiAJCQlyZXR1cm4gcmV0OworCQl9CiAKIAkJbnZiby0+Y2hhbm5lbCA9IGNoYW47CiAJCXJldCA9IHR0bV9ib192YWxpZGF0ZSgmbnZiby0+Ym8sICZudmJvLT5wbGFjZW1lbnQsCiAJCQkJICAgICAgZmFsc2UsIGZhbHNlKTsKIAkJbnZiby0+Y2hhbm5lbCA9IE5VTEw7Ci0JCWlmICh1bmxpa2VseShyZXQpKQorCQlpZiAodW5saWtlbHkocmV0KSkgeworCQkJTlZfRVJST1IoZGV2LCAiZmFpbCB0dG1fdmFsaWRhdGVcbiIpOwogCQkJcmV0dXJuIHJldDsKKwkJfQogCi0JCWlmIChudmJvLT5iby5vZmZzZXQgPT0gYi0+cHJlc3VtZWRfb2Zmc2V0ICYmCisJCWlmIChudmJvLT5iby5vZmZzZXQgPT0gYi0+cHJlc3VtZWQub2Zmc2V0ICYmCiAJCSAgICAoKG52Ym8tPmJvLm1lbS5tZW1fdHlwZSA9PSBUVE1fUExfVlJBTSAmJgotCQkgICAgICBiLT5wcmVzdW1lZF9kb21haW4gJiBOT1VWRUFVX0dFTV9ET01BSU5fVlJBTSkgfHwKKwkJICAgICAgYi0+cHJlc3VtZWQuZG9tYWluICYgTk9VVkVBVV9HRU1fRE9NQUlOX1ZSQU0pIHx8CiAJCSAgICAgKG52Ym8tPmJvLm1lbS5tZW1fdHlwZSA9PSBUVE1fUExfVFQgJiYKLQkJICAgICAgYi0+cHJlc3VtZWRfZG9tYWluICYgTk9VVkVBVV9HRU1fRE9NQUlOX0dBUlQpKSkKKwkJICAgICAgYi0+cHJlc3VtZWQuZG9tYWluICYgTk9VVkVBVV9HRU1fRE9NQUlOX0dBUlQpKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChudmJvLT5iby5tZW0ubWVtX3R5cGUgPT0gVFRNX1BMX1RUKQotCQkJYi0+cHJlc3VtZWRfZG9tYWluID0gTk9VVkVBVV9HRU1fRE9NQUlOX0dBUlQ7CisJCQliLT5wcmVzdW1lZC5kb21haW4gPSBOT1VWRUFVX0dFTV9ET01BSU5fR0FSVDsKIAkJZWxzZQotCQkJYi0+cHJlc3VtZWRfZG9tYWluID0gTk9VVkVBVV9HRU1fRE9NQUlOX1ZSQU07Ci0JCWItPnByZXN1bWVkX29mZnNldCA9IG52Ym8tPmJvLm9mZnNldDsKLQkJYi0+cHJlc3VtZWRfb2sgPSAwOworCQkJYi0+cHJlc3VtZWQuZG9tYWluID0gTk9VVkVBVV9HRU1fRE9NQUlOX1ZSQU07CisJCWItPnByZXN1bWVkLm9mZnNldCA9IG52Ym8tPmJvLm9mZnNldDsKKwkJYi0+cHJlc3VtZWQudmFsaWQgPSAwOwogCQlyZWxvY3MrKzsKIAotCQlpZiAoRFJNX0NPUFlfVE9fVVNFUigmdXBiYm9bbnZiby0+cGJib19pbmRleF0sIGIsIHNpemVvZigqYikpKQorCQlpZiAoRFJNX0NPUFlfVE9fVVNFUigmdXBiYm9bbnZiby0+cGJib19pbmRleF0ucHJlc3VtZWQsCisJCQkJICAgICAmYi0+cHJlc3VtZWQsIHNpemVvZihiLT5wcmVzdW1lZCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCkBAIC00MDgsNiArNDI0LDcgQEAKIAkJCSAgICAgdWludDY0X3QgdXNlcl9idWZmZXJzLCBpbnQgbnJfYnVmZmVycywKIAkJCSAgICAgc3RydWN0IHZhbGlkYXRlX29wICpvcCwgaW50ICphcHBseV9yZWxvY3MpCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlpbnQgcmV0LCByZWxvY3MgPSAwOwogCiAJSU5JVF9MSVNUX0hFQUQoJm9wLT52cmFtX2xpc3QpOwpAQCAtNDE4LDExICs0MzUsMTQgQEAKIAkJcmV0dXJuIDA7CiAKIAlyZXQgPSB2YWxpZGF0ZV9pbml0KGNoYW4sIGZpbGVfcHJpdiwgcGJibywgbnJfYnVmZmVycywgb3ApOwotCWlmICh1bmxpa2VseShyZXQpKQorCWlmICh1bmxpa2VseShyZXQpKSB7CisJCU5WX0VSUk9SKGRldiwgInZhbGlkYXRlX2luaXRcbiIpOwogCQlyZXR1cm4gcmV0OworCX0KIAogCXJldCA9IHZhbGlkYXRlX2xpc3QoY2hhbiwgJm9wLT52cmFtX2xpc3QsIHBiYm8sIHVzZXJfYnVmZmVycyk7CiAJaWYgKHVubGlrZWx5KHJldCA8IDApKSB7CisJCU5WX0VSUk9SKGRldiwgInZhbGlkYXRlIHZyYW1fbGlzdFxuIik7CiAJCXZhbGlkYXRlX2Zpbmkob3AsIE5VTEwpOwogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTQzMCw2ICs0NTAsNyBAQAogCiAJcmV0ID0gdmFsaWRhdGVfbGlzdChjaGFuLCAmb3AtPmdhcnRfbGlzdCwgcGJibywgdXNlcl9idWZmZXJzKTsKIAlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKKwkJTlZfRVJST1IoZGV2LCAidmFsaWRhdGUgZ2FydF9saXN0XG4iKTsKIAkJdmFsaWRhdGVfZmluaShvcCwgTlVMTCk7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtNDM3LDYgKzQ1OCw3IEBACiAKIAlyZXQgPSB2YWxpZGF0ZV9saXN0KGNoYW4sICZvcC0+Ym90aF9saXN0LCBwYmJvLCB1c2VyX2J1ZmZlcnMpOwogCWlmICh1bmxpa2VseShyZXQgPCAwKSkgeworCQlOVl9FUlJPUihkZXYsICJ2YWxpZGF0ZSBib3RoX2xpc3RcbiIpOwogCQl2YWxpZGF0ZV9maW5pKG9wLCBOVUxMKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC00NjUsNTkgKzQ4Nyw4MiBAQAogfQogCiBzdGF0aWMgaW50Ci1ub3V2ZWF1X2dlbV9wdXNoYnVmX3JlbG9jX2FwcGx5KHN0cnVjdCBub3V2ZWF1X2NoYW5uZWwgKmNoYW4sIGludCBucl9ibywKLQkJCQlzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWZfYm8gKmJvLAotCQkJCXVuc2lnbmVkIG5yX3JlbG9jcywgdWludDY0X3QgcHRyX3JlbG9jcywKLQkJCQl1bnNpZ25lZCBucl9kd29yZHMsIHVuc2lnbmVkIGZpcnN0X2R3b3JkLAotCQkJCXVpbnQzMl90ICpwdXNoYnVmLCBib29sIGlzX2lvbWVtKQorbm91dmVhdV9nZW1fcHVzaGJ1Zl9yZWxvY19hcHBseShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBkcm1fbm91dmVhdV9nZW1fcHVzaGJ1ZiAqcmVxLAorCQkJCXN0cnVjdCBkcm1fbm91dmVhdV9nZW1fcHVzaGJ1Zl9ibyAqYm8pCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9wdXNoYnVmX3JlbG9jICpyZWxvYyA9IE5VTEw7Ci0Jc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNoYW4tPmRldjsKIAlpbnQgcmV0ID0gMDsKIAl1bnNpZ25lZCBpOwogCi0JcmVsb2MgPSB1X21lbWNweWEocHRyX3JlbG9jcywgbnJfcmVsb2NzLCBzaXplb2YoKnJlbG9jKSk7CisJcmVsb2MgPSB1X21lbWNweWEocmVxLT5yZWxvY3MsIHJlcS0+bnJfcmVsb2NzLCBzaXplb2YoKnJlbG9jKSk7CiAJaWYgKElTX0VSUihyZWxvYykpCiAJCXJldHVybiBQVFJfRVJSKHJlbG9jKTsKIAotCWZvciAoaSA9IDA7IGkgPCBucl9yZWxvY3M7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCByZXEtPm5yX3JlbG9jczsgaSsrKSB7CiAJCXN0cnVjdCBkcm1fbm91dmVhdV9nZW1fcHVzaGJ1Zl9yZWxvYyAqciA9ICZyZWxvY1tpXTsKIAkJc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9wdXNoYnVmX2JvICpiOworCQlzdHJ1Y3Qgbm91dmVhdV9ibyAqbnZibzsKIAkJdWludDMyX3QgZGF0YTsKIAotCQlpZiAoci0+Ym9faW5kZXggPj0gbnJfYm8gfHwgci0+cmVsb2NfaW5kZXggPCBmaXJzdF9kd29yZCB8fAotCQkgICAgci0+cmVsb2NfaW5kZXggPj0gZmlyc3RfZHdvcmQgKyBucl9kd29yZHMpIHsKLQkJCU5WX0VSUk9SKGRldiwgIkJhZCByZWxvY2F0aW9uICVkXG4iLCBpKTsKLQkJCU5WX0VSUk9SKGRldiwgIiAgYm86ICVkIG1heCAlZFxuIiwgci0+Ym9faW5kZXgsIG5yX2JvKTsKLQkJCU5WX0VSUk9SKGRldiwgIiAgaWQ6ICVkIG1heCAlZFxuIiwgci0+cmVsb2NfaW5kZXgsIG5yX2R3b3Jkcyk7CisJCWlmICh1bmxpa2VseShyLT5ib19pbmRleCA+IHJlcS0+bnJfYnVmZmVycykpIHsKKwkJCU5WX0VSUk9SKGRldiwgInJlbG9jIGJvIGluZGV4IGludmFsaWRcbiIpOwogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CiAKIAkJYiA9ICZib1tyLT5ib19pbmRleF07Ci0JCWlmIChiLT5wcmVzdW1lZF9vaykKKwkJaWYgKGItPnByZXN1bWVkLnZhbGlkKQogCQkJY29udGludWU7CiAKKwkJaWYgKHVubGlrZWx5KHItPnJlbG9jX2JvX2luZGV4ID4gcmVxLT5ucl9idWZmZXJzKSkgeworCQkJTlZfRVJST1IoZGV2LCAicmVsb2MgY29udGFpbmVyIGJvIGluZGV4IGludmFsaWRcbiIpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCW52Ym8gPSAodm9pZCAqKSh1bnNpZ25lZCBsb25nKWJvW3ItPnJlbG9jX2JvX2luZGV4XS51c2VyX3ByaXY7CisKKwkJaWYgKHVubGlrZWx5KHItPnJlbG9jX2JvX29mZnNldCArIDQgPgorCQkJICAgICBudmJvLT5iby5tZW0ubnVtX3BhZ2VzIDw8IFBBR0VfU0hJRlQpKSB7CisJCQlOVl9FUlJPUihkZXYsICJyZWxvYyBvdXRzaWRlIG9mIGJvXG4iKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCWlmICghbnZiby0+a21hcC52aXJ0dWFsKSB7CisJCQlyZXQgPSB0dG1fYm9fa21hcCgmbnZiby0+Ym8sIDAsIG52Ym8tPmJvLm1lbS5udW1fcGFnZXMsCisJCQkJCSAgJm52Ym8tPmttYXApOworCQkJaWYgKHJldCkgeworCQkJCU5WX0VSUk9SKGRldiwgImZhaWxlZCBrbWFwIGZvciByZWxvY1xuIik7CisJCQkJYnJlYWs7CisJCQl9CisJCQludmJvLT52YWxpZGF0ZV9tYXBwZWQgPSB0cnVlOworCQl9CisKIAkJaWYgKHItPmZsYWdzICYgTk9VVkVBVV9HRU1fUkVMT0NfTE9XKQotCQkJZGF0YSA9IGItPnByZXN1bWVkX29mZnNldCArIHItPmRhdGE7CisJCQlkYXRhID0gYi0+cHJlc3VtZWQub2Zmc2V0ICsgci0+ZGF0YTsKIAkJZWxzZQogCQlpZiAoci0+ZmxhZ3MgJiBOT1VWRUFVX0dFTV9SRUxPQ19ISUdIKQotCQkJZGF0YSA9IChiLT5wcmVzdW1lZF9vZmZzZXQgKyByLT5kYXRhKSA+PiAzMjsKKwkJCWRhdGEgPSAoYi0+cHJlc3VtZWQub2Zmc2V0ICsgci0+ZGF0YSkgPj4gMzI7CiAJCWVsc2UKIAkJCWRhdGEgPSByLT5kYXRhOwogCiAJCWlmIChyLT5mbGFncyAmIE5PVVZFQVVfR0VNX1JFTE9DX09SKSB7Ci0JCQlpZiAoYi0+cHJlc3VtZWRfZG9tYWluID09IE5PVVZFQVVfR0VNX0RPTUFJTl9HQVJUKQorCQkJaWYgKGItPnByZXN1bWVkLmRvbWFpbiA9PSBOT1VWRUFVX0dFTV9ET01BSU5fR0FSVCkKIAkJCQlkYXRhIHw9IHItPnRvcjsKIAkJCWVsc2UKIAkJCQlkYXRhIHw9IHItPnZvcjsKIAkJfQogCi0JCWlmIChpc19pb21lbSkKLQkJCWlvd3JpdGUzMl9uYXRpdmUoZGF0YSwgKHZvaWQgX19mb3JjZSBfX2lvbWVtICopCi0JCQkJCQkmcHVzaGJ1ZltyLT5yZWxvY19pbmRleF0pOwotCQllbHNlCi0JCQlwdXNoYnVmW3ItPnJlbG9jX2luZGV4XSA9IGRhdGE7CisJCXNwaW5fbG9jaygmbnZiby0+Ym8ubG9jayk7CisJCXJldCA9IHR0bV9ib193YWl0KCZudmJvLT5ibywgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CisJCXNwaW5fdW5sb2NrKCZudmJvLT5iby5sb2NrKTsKKwkJaWYgKHJldCkgeworCQkJTlZfRVJST1IoZGV2LCAicmVsb2Mgd2FpdF9pZGxlIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCQlicmVhazsKKwkJfQorCisJCW5vdXZlYXVfYm9fd3IzMihudmJvLCByLT5yZWxvY19ib19vZmZzZXQgPj4gMiwgZGF0YSk7CiAJfQogCiAJa2ZyZWUocmVsb2MpOwpAQCAtNTI4LDM3ICs1NzMsNDggQEAKIG5vdXZlYXVfZ2VtX2lvY3RsX3B1c2hidWYoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWYgKnJlcSA9IGRhdGE7Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9wdXNoYnVmX2JvICpibyA9IE5VTEw7CisJc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9wdXNoYnVmX3B1c2ggKnB1c2g7CisJc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9wdXNoYnVmX2JvICpibzsKIAlzdHJ1Y3Qgbm91dmVhdV9jaGFubmVsICpjaGFuOwogCXN0cnVjdCB2YWxpZGF0ZV9vcCBvcDsKLQlzdHJ1Y3Qgbm91dmVhdV9mZW5jZSogZmVuY2UgPSAwOwotCXVpbnQzMl90ICpwdXNoYnVmID0gTlVMTDsKLQlpbnQgcmV0ID0gMCwgZG9fcmVsb2MgPSAwLCBpOworCXN0cnVjdCBub3V2ZWF1X2ZlbmNlICpmZW5jZSA9IDA7CisJaW50IGksIGosIHJldCA9IDAsIGRvX3JlbG9jID0gMDsKIAogCU5PVVZFQVVfQ0hFQ0tfSU5JVElBTElTRURfV0lUSF9SRVRVUk47CiAJTk9VVkVBVV9HRVRfVVNFUl9DSEFOTkVMX1dJVEhfUkVUVVJOKHJlcS0+Y2hhbm5lbCwgZmlsZV9wcml2LCBjaGFuKTsKIAotCWlmIChyZXEtPm5yX2R3b3JkcyA+PSBjaGFuLT5kbWEubWF4IHx8Ci0JICAgIHJlcS0+bnJfYnVmZmVycyA+IE5PVVZFQVVfR0VNX01BWF9CVUZGRVJTIHx8Ci0JICAgIHJlcS0+bnJfcmVsb2NzID4gTk9VVkVBVV9HRU1fTUFYX1JFTE9DUykgewotCQlOVl9FUlJPUihkZXYsICJQdXNoYnVmIGNvbmZpZyBleGNlZWRzIGxpbWl0czpcbiIpOwotCQlOVl9FUlJPUihkZXYsICIgIGR3b3JkcyA6ICVkIG1heCAlZFxuIiwgcmVxLT5ucl9kd29yZHMsCi0JCQkgY2hhbi0+ZG1hLm1heCAtIDEpOwotCQlOVl9FUlJPUihkZXYsICIgIGJ1ZmZlcnM6ICVkIG1heCAlZFxuIiwgcmVxLT5ucl9idWZmZXJzLAotCQkJIE5PVVZFQVVfR0VNX01BWF9CVUZGRVJTKTsKLQkJTlZfRVJST1IoZGV2LCAiICByZWxvY3MgOiAlZCBtYXggJWRcbiIsIHJlcS0+bnJfcmVsb2NzLAotCQkJIE5PVVZFQVVfR0VNX01BWF9SRUxPQ1MpOworCXJlcS0+dnJhbV9hdmFpbGFibGUgPSBkZXZfcHJpdi0+ZmJfYXBlcl9mcmVlOworCXJlcS0+Z2FydF9hdmFpbGFibGUgPSBkZXZfcHJpdi0+Z2FydF9pbmZvLmFwZXJfZnJlZTsKKwlpZiAodW5saWtlbHkocmVxLT5ucl9wdXNoID09IDApKQorCQlnb3RvIG91dF9uZXh0OworCisJaWYgKHVubGlrZWx5KHJlcS0+bnJfcHVzaCA+IE5PVVZFQVVfR0VNX01BWF9QVVNIKSkgeworCQlOVl9FUlJPUihkZXYsICJwdXNoYnVmIHB1c2ggY291bnQgZXhjZWVkcyBsaW1pdDogJWQgbWF4ICVkXG4iLAorCQkJIHJlcS0+bnJfcHVzaCwgTk9VVkVBVV9HRU1fTUFYX1BVU0gpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlwdXNoYnVmID0gdV9tZW1jcHlhKHJlcS0+ZHdvcmRzLCByZXEtPm5yX2R3b3Jkcywgc2l6ZW9mKHVpbnQzMl90KSk7Ci0JaWYgKElTX0VSUihwdXNoYnVmKSkKLQkJcmV0dXJuIFBUUl9FUlIocHVzaGJ1Zik7CisJaWYgKHVubGlrZWx5KHJlcS0+bnJfYnVmZmVycyA+IE5PVVZFQVVfR0VNX01BWF9CVUZGRVJTKSkgeworCQlOVl9FUlJPUihkZXYsICJwdXNoYnVmIGJvIGNvdW50IGV4Y2VlZHMgbGltaXQ6ICVkIG1heCAlZFxuIiwKKwkJCSByZXEtPm5yX2J1ZmZlcnMsIE5PVVZFQVVfR0VNX01BWF9CVUZGRVJTKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHVubGlrZWx5KHJlcS0+bnJfcmVsb2NzID4gTk9VVkVBVV9HRU1fTUFYX1JFTE9DUykpIHsKKwkJTlZfRVJST1IoZGV2LCAicHVzaGJ1ZiByZWxvYyBjb3VudCBleGNlZWRzIGxpbWl0OiAlZCBtYXggJWRcbiIsCisJCQkgcmVxLT5ucl9yZWxvY3MsIE5PVVZFQVVfR0VNX01BWF9SRUxPQ1MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlwdXNoID0gdV9tZW1jcHlhKHJlcS0+cHVzaCwgcmVxLT5ucl9wdXNoLCBzaXplb2YoKnB1c2gpKTsKKwlpZiAoSVNfRVJSKHB1c2gpKQorCQlyZXR1cm4gUFRSX0VSUihwdXNoKTsKIAogCWJvID0gdV9tZW1jcHlhKHJlcS0+YnVmZmVycywgcmVxLT5ucl9idWZmZXJzLCBzaXplb2YoKmJvKSk7CiAJaWYgKElTX0VSUihibykpIHsKLQkJa2ZyZWUocHVzaGJ1Zik7CisJCWtmcmVlKHB1c2gpOwogCQlyZXR1cm4gUFRSX0VSUihibyk7CiAJfQogCkBAIC01NjcsMjE1ICs2MjMsODkgQEAKIAkvKiBWYWxpZGF0ZSBidWZmZXIgbGlzdCAqLwogCXJldCA9IG5vdXZlYXVfZ2VtX3B1c2hidWZfdmFsaWRhdGUoY2hhbiwgZmlsZV9wcml2LCBibywgcmVxLT5idWZmZXJzLAogCQkJCQkgICByZXEtPm5yX2J1ZmZlcnMsICZvcCwgJmRvX3JlbG9jKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKLQotCS8qIEFwcGx5IGFueSByZWxvY2F0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCAqLwotCWlmIChkb19yZWxvYykgewotCQlyZXQgPSBub3V2ZWF1X2dlbV9wdXNoYnVmX3JlbG9jX2FwcGx5KGNoYW4sIHJlcS0+bnJfYnVmZmVycywKLQkJCQkJCSAgICAgIGJvLCByZXEtPm5yX3JlbG9jcywKLQkJCQkJCSAgICAgIHJlcS0+cmVsb2NzLAotCQkJCQkJICAgICAgcmVxLT5ucl9kd29yZHMsIDAsCi0JCQkJCQkgICAgICBwdXNoYnVmLCBmYWxzZSk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQkvKiBFbWl0IHB1c2ggYnVmZmVyIHRvIHRoZSBodwotCSAqLwotCXJldCA9IFJJTkdfU1BBQ0UoY2hhbiwgcmVxLT5ucl9kd29yZHMpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JT1VUX1JJTkdwKGNoYW4sIHB1c2hidWYsIHJlcS0+bnJfZHdvcmRzKTsKLQotCXJldCA9IG5vdXZlYXVfZmVuY2VfbmV3KGNoYW4sICZmZW5jZSwgdHJ1ZSk7Ci0JaWYgKHJldCkgewotCQlOVl9FUlJPUihkZXYsICJlcnJvciBmZW5jaW5nIHB1c2hidWY6ICVkXG4iLCByZXQpOwotCQlXSU5EX1JJTkcoY2hhbik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWlmIChub3V2ZWF1X2dlbV9wdXNoYnVmX3N5bmMoY2hhbikpIHsKLQkJcmV0ID0gbm91dmVhdV9mZW5jZV93YWl0KGZlbmNlLCBOVUxMLCBmYWxzZSwgZmFsc2UpOwotCQlpZiAocmV0KSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgcmVxLT5ucl9kd29yZHM7IGkrKykKLQkJCQlOVl9FUlJPUihkZXYsICIweCUwOHhcbiIsIHB1c2hidWZbaV0pOwotCQkJTlZfRVJST1IoZGV2LCAiXl4gYWJvdmUgcHVzaCBidWZmZXIgaXMgZmFpbCA6KFxuIik7Ci0JCX0KLQl9Ci0KLW91dDoKLQl2YWxpZGF0ZV9maW5pKCZvcCwgZmVuY2UpOwotCW5vdXZlYXVfZmVuY2VfdW5yZWYoKHZvaWQqKikmZmVuY2UpOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWtmcmVlKHB1c2hidWYpOwotCWtmcmVlKGJvKTsKLQlyZXR1cm4gcmV0OwotfQotCi0jZGVmaW5lIFBVU0hCVUZfQ0FMIChkZXZfcHJpdi0+Y2FyZF90eXBlID49IE5WXzIwKQotCi1pbnQKLW5vdXZlYXVfZ2VtX2lvY3RsX3B1c2hidWZfY2FsbChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAotCQkJICAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQotewotCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9wdXNoYnVmX2NhbGwgKnJlcSA9IGRhdGE7Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9wdXNoYnVmX2JvICpibyA9IE5VTEw7Ci0Jc3RydWN0IG5vdXZlYXVfY2hhbm5lbCAqY2hhbjsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbTsKLQlzdHJ1Y3Qgbm91dmVhdV9ibyAqcGJibzsKLQlzdHJ1Y3QgdmFsaWRhdGVfb3Agb3A7Ci0Jc3RydWN0IG5vdXZlYXVfZmVuY2UqIGZlbmNlID0gMDsKLQlpbnQgaSwgcmV0ID0gMCwgZG9fcmVsb2MgPSAwOwotCi0JTk9VVkVBVV9DSEVDS19JTklUSUFMSVNFRF9XSVRIX1JFVFVSTjsKLQlOT1VWRUFVX0dFVF9VU0VSX0NIQU5ORUxfV0lUSF9SRVRVUk4ocmVxLT5jaGFubmVsLCBmaWxlX3ByaXYsIGNoYW4pOwotCi0JaWYgKHVubGlrZWx5KHJlcS0+aGFuZGxlID09IDApKQotCQlnb3RvIG91dF9uZXh0OwotCi0JaWYgKHJlcS0+bnJfYnVmZmVycyA+IE5PVVZFQVVfR0VNX01BWF9CVUZGRVJTIHx8Ci0JICAgIHJlcS0+bnJfcmVsb2NzID4gTk9VVkVBVV9HRU1fTUFYX1JFTE9DUykgewotCQlOVl9FUlJPUihkZXYsICJQdXNoYnVmIGNvbmZpZyBleGNlZWRzIGxpbWl0czpcbiIpOwotCQlOVl9FUlJPUihkZXYsICIgIGJ1ZmZlcnM6ICVkIG1heCAlZFxuIiwgcmVxLT5ucl9idWZmZXJzLAotCQkJIE5PVVZFQVVfR0VNX01BWF9CVUZGRVJTKTsKLQkJTlZfRVJST1IoZGV2LCAiICByZWxvY3MgOiAlZCBtYXggJWRcbiIsIHJlcS0+bnJfcmVsb2NzLAotCQkJIE5PVVZFQVVfR0VNX01BWF9SRUxPQ1MpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlibyA9IHVfbWVtY3B5YShyZXEtPmJ1ZmZlcnMsIHJlcS0+bnJfYnVmZmVycywgc2l6ZW9mKCpibykpOwotCWlmIChJU19FUlIoYm8pKQotCQlyZXR1cm4gUFRSX0VSUihibyk7Ci0KLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0KLQkvKiBWYWxpZGF0ZSBidWZmZXIgbGlzdCAqLwotCXJldCA9IG5vdXZlYXVfZ2VtX3B1c2hidWZfdmFsaWRhdGUoY2hhbiwgZmlsZV9wcml2LCBibywgcmVxLT5idWZmZXJzLAotCQkJCQkgICByZXEtPm5yX2J1ZmZlcnMsICZvcCwgJmRvX3JlbG9jKTsKIAlpZiAocmV0KSB7CiAJCU5WX0VSUk9SKGRldiwgInZhbGlkYXRlOiAlZFxuIiwgcmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCi0JLyogVmFsaWRhdGUgRE1BIHB1c2ggYnVmZmVyICovCi0JZ2VtID0gZHJtX2dlbV9vYmplY3RfbG9va3VwKGRldiwgZmlsZV9wcml2LCByZXEtPmhhbmRsZSk7Ci0JaWYgKCFnZW0pIHsKLQkJTlZfRVJST1IoZGV2LCAiVW5rbm93biBwYiBoYW5kbGUgMHglMDh4XG4iLCByZXEtPmhhbmRsZSk7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQlwYmJvID0gbm91dmVhdV9nZW1fb2JqZWN0KGdlbSk7Ci0KLQlpZiAoKHJlcS0+b2Zmc2V0ICYgMykgfHwgcmVxLT5ucl9kd29yZHMgPCAyIHx8Ci0JICAgICh1bnNpZ25lZCBsb25nKXJlcS0+b2Zmc2V0ID4gKHVuc2lnbmVkIGxvbmcpcGJiby0+Ym8ubWVtLnNpemUgfHwKLQkgICAgKHVuc2lnbmVkIGxvbmcpcmVxLT5ucl9kd29yZHMgPgotCSAgICAgKCh1bnNpZ25lZCBsb25nKShwYmJvLT5iby5tZW0uc2l6ZSAtIHJlcS0+b2Zmc2V0ICkgPj4gMikpIHsKLQkJTlZfRVJST1IoZGV2LCAicGIgY2FsbCBtaXNhbGlnbmVkIG9yIG91dCBvZiBib3VuZHM6ICIKLQkJCSAgICAgICIlZCArICVkICogNCA+ICVsZFxuIiwKLQkJCSByZXEtPm9mZnNldCwgcmVxLT5ucl9kd29yZHMsIHBiYm8tPmJvLm1lbS5zaXplKTsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZ2VtKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gdHRtX2JvX3Jlc2VydmUoJnBiYm8tPmJvLCBmYWxzZSwgZmFsc2UsIHRydWUsCi0JCQkgICAgIGNoYW4tPmZlbmNlLnNlcXVlbmNlKTsKLQlpZiAocmV0KSB7Ci0JCU5WX0VSUk9SKGRldiwgInJlc3YgcGI6ICVkXG4iLCByZXQpOwotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShnZW0pOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlub3V2ZWF1X2JvX3BsYWNlbWVudF9zZXQocGJibywgMSA8PCBjaGFuLT5wdXNoYnVmX2JvLT5iby5tZW0ubWVtX3R5cGUpOwotCXJldCA9IHR0bV9ib192YWxpZGF0ZSgmcGJiby0+Ym8sICZwYmJvLT5wbGFjZW1lbnQsIGZhbHNlLCBmYWxzZSk7Ci0JaWYgKHJldCkgewotCQlOVl9FUlJPUihkZXYsICJ2YWxpZGF0ZSBwYjogJWRcbiIsIHJldCk7Ci0JCXR0bV9ib191bnJlc2VydmUoJnBiYm8tPmJvKTsKLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZ2VtKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbGlzdF9hZGRfdGFpbCgmcGJiby0+ZW50cnksICZvcC5ib3RoX2xpc3QpOwotCi0JLyogSWYgcHJlc3VtZWQgcmV0dXJuIGFkZHJlc3MgZG9lc24ndCBtYXRjaCwgd2UgbmVlZCB0byBtYXAgdGhlCi0JICogcHVzaCBidWZmZXIgYW5kIGZpeCBpdC4uCi0JICovCi0JaWYgKCFQVVNIQlVGX0NBTCkgewotCQl1aW50MzJfdCByZXRhZGR5OwotCi0JCWlmIChjaGFuLT5kbWEuZnJlZSA8IDQgKyBOT1VWRUFVX0RNQV9TS0lQUykgewotCQkJcmV0ID0gbm91dmVhdV9kbWFfd2FpdChjaGFuLCA0ICsgTk9VVkVBVV9ETUFfU0tJUFMpOwotCQkJaWYgKHJldCkgewotCQkJCU5WX0VSUk9SKGRldiwgImptcF9zcGFjZTogJWRcbiIsIHJldCk7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0KLQotCQlyZXRhZGR5ICA9IGNoYW4tPnB1c2hidWZfYmFzZSArICgoY2hhbi0+ZG1hLmN1ciArIDIpIDw8IDIpOwotCQlyZXRhZGR5IHw9IDB4MjAwMDAwMDA7Ci0JCWlmIChyZXRhZGR5ICE9IHJlcS0+c3VmZml4MCkgewotCQkJcmVxLT5zdWZmaXgwID0gcmV0YWRkeTsKLQkJCWRvX3JlbG9jID0gMTsKLQkJfQotCX0KLQogCS8qIEFwcGx5IGFueSByZWxvY2F0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCAqLwogCWlmIChkb19yZWxvYykgewotCQl2b2lkICpwYnZpcnQ7Ci0JCWJvb2wgaXNfaW9tZW07Ci0JCXJldCA9IHR0bV9ib19rbWFwKCZwYmJvLT5ibywgMCwgcGJiby0+Ym8ubWVtLm51bV9wYWdlcywKLQkJCQkgICZwYmJvLT5rbWFwKTsKLQkJaWYgKHJldCkgewotCQkJTlZfRVJST1IoZGV2LCAia21hcCBwYjogJWRcbiIsIHJldCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JCXBidmlydCA9IHR0bV9rbWFwX29ial92aXJ0dWFsKCZwYmJvLT5rbWFwLCAmaXNfaW9tZW0pOwotCQlyZXQgPSBub3V2ZWF1X2dlbV9wdXNoYnVmX3JlbG9jX2FwcGx5KGNoYW4sIHJlcS0+bnJfYnVmZmVycywgYm8sCi0JCQkJCQkgICAgICByZXEtPm5yX3JlbG9jcywKLQkJCQkJCSAgICAgIHJlcS0+cmVsb2NzLAotCQkJCQkJICAgICAgcmVxLT5ucl9kd29yZHMsCi0JCQkJCQkgICAgICByZXEtPm9mZnNldCAvIDQsCi0JCQkJCQkgICAgICBwYnZpcnQsIGlzX2lvbWVtKTsKLQotCQlpZiAoIVBVU0hCVUZfQ0FMKSB7Ci0JCQlub3V2ZWF1X2JvX3dyMzIocGJibywKLQkJCQkJcmVxLT5vZmZzZXQgLyA0ICsgcmVxLT5ucl9kd29yZHMgLSAyLAotCQkJCQlyZXEtPnN1ZmZpeDApOwotCQl9Ci0KLQkJdHRtX2JvX2t1bm1hcCgmcGJiby0+a21hcCk7CisJCXJldCA9IG5vdXZlYXVfZ2VtX3B1c2hidWZfcmVsb2NfYXBwbHkoZGV2LCByZXEsIGJvKTsKIAkJaWYgKHJldCkgewogCQkJTlZfRVJST1IoZGV2LCAicmVsb2MgYXBwbHk6ICVkXG4iLCByZXQpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKLQlpZiAoUFVTSEJVRl9DQUwpIHsKLQkJcmV0ID0gUklOR19TUEFDRShjaGFuLCAyKTsKKwlpZiAoY2hhbi0+ZG1hLmliX21heCkgeworCQlyZXQgPSBub3V2ZWF1X2RtYV93YWl0KGNoYW4sIHJlcS0+bnJfcHVzaCArIDEsIDYpOworCQlpZiAocmV0KSB7CisJCQlOVl9JTkZPKGRldiwgIm52NTBjYWxfc3BhY2U6ICVkXG4iLCByZXQpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgcmVxLT5ucl9wdXNoOyBpKyspIHsKKwkJCXN0cnVjdCBub3V2ZWF1X2JvICpudmJvID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykKKwkJCQlib1twdXNoW2ldLmJvX2luZGV4XS51c2VyX3ByaXY7CisKKwkJCW52NTBfZG1hX3B1c2goY2hhbiwgbnZibywgcHVzaFtpXS5vZmZzZXQsCisJCQkJICAgICAgcHVzaFtpXS5sZW5ndGgpOworCQl9CisJfSBlbHNlCisJaWYgKGRldl9wcml2LT5jYXJkX3R5cGUgPj0gTlZfMjApIHsKKwkJcmV0ID0gUklOR19TUEFDRShjaGFuLCByZXEtPm5yX3B1c2ggKiAyKTsKIAkJaWYgKHJldCkgewogCQkJTlZfRVJST1IoZGV2LCAiY2FsX3NwYWNlOiAlZFxuIiwgcmV0KTsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCU9VVF9SSU5HKGNoYW4sICgocGJiby0+Ym8ubWVtLm1tX25vZGUtPnN0YXJ0IDw8IFBBR0VfU0hJRlQpICsKLQkJCQkgIHJlcS0+b2Zmc2V0KSB8IDIpOwotCQlPVVRfUklORyhjaGFuLCAwKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgcmVxLT5ucl9wdXNoOyBpKyspIHsKKwkJCXN0cnVjdCBub3V2ZWF1X2JvICpudmJvID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykKKwkJCQlib1twdXNoW2ldLmJvX2luZGV4XS51c2VyX3ByaXY7CisJCQlzdHJ1Y3QgZHJtX21tX25vZGUgKm1lbSA9IG52Ym8tPmJvLm1lbS5tbV9ub2RlOworCisJCQlPVVRfUklORyhjaGFuLCAoKG1lbS0+c3RhcnQgPDwgUEFHRV9TSElGVCkgKworCQkJCQlwdXNoW2ldLm9mZnNldCkgfCAyKTsKKwkJCU9VVF9SSU5HKGNoYW4sIDApOworCQl9CiAJfSBlbHNlIHsKLQkJcmV0ID0gUklOR19TUEFDRShjaGFuLCAyICsgTk9VVkVBVV9ETUFfU0tJUFMpOworCQlyZXQgPSBSSU5HX1NQQUNFKGNoYW4sIHJlcS0+bnJfcHVzaCAqICgyICsgTk9VVkVBVV9ETUFfU0tJUFMpKTsKIAkJaWYgKHJldCkgewogCQkJTlZfRVJST1IoZGV2LCAiam1wX3NwYWNlOiAlZFxuIiwgcmV0KTsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCU9VVF9SSU5HKGNoYW4sICgocGJiby0+Ym8ubWVtLm1tX25vZGUtPnN0YXJ0IDw8IFBBR0VfU0hJRlQpICsKLQkJCQkgIHJlcS0+b2Zmc2V0KSB8IDB4MjAwMDAwMDApOwotCQlPVVRfUklORyhjaGFuLCAwKTsKIAotCQkvKiBTcGFjZSB0aGUganVtcHMgYXBhcnQgd2l0aCBOT1BzLiAqLwotCQlmb3IgKGkgPSAwOyBpIDwgTk9VVkVBVV9ETUFfU0tJUFM7IGkrKykKKwkJZm9yIChpID0gMDsgaSA8IHJlcS0+bnJfcHVzaDsgaSsrKSB7CisJCQlzdHJ1Y3Qgbm91dmVhdV9ibyAqbnZibyA9ICh2b2lkICopKHVuc2lnbmVkIGxvbmcpCisJCQkJYm9bcHVzaFtpXS5ib19pbmRleF0udXNlcl9wcml2OworCQkJc3RydWN0IGRybV9tbV9ub2RlICptZW0gPSBudmJvLT5iby5tZW0ubW1fbm9kZTsKKwkJCXVpbnQzMl90IGNtZDsKKworCQkJY21kID0gY2hhbi0+cHVzaGJ1Zl9iYXNlICsgKChjaGFuLT5kbWEuY3VyICsgMikgPDwgMik7CisJCQljbWQgfD0gMHgyMDAwMDAwMDsKKwkJCWlmICh1bmxpa2VseShjbWQgIT0gcmVxLT5zdWZmaXgwKSkgeworCQkJCWlmICghbnZiby0+a21hcC52aXJ0dWFsKSB7CisJCQkJCXJldCA9IHR0bV9ib19rbWFwKCZudmJvLT5ibywgMCwKKwkJCQkJCQkgIG52Ym8tPmJvLm1lbS4KKwkJCQkJCQkgIG51bV9wYWdlcywKKwkJCQkJCQkgICZudmJvLT5rbWFwKTsKKwkJCQkJaWYgKHJldCkgeworCQkJCQkJV0lORF9SSU5HKGNoYW4pOworCQkJCQkJZ290byBvdXQ7CisJCQkJCX0KKwkJCQkJbnZiby0+dmFsaWRhdGVfbWFwcGVkID0gdHJ1ZTsKKwkJCQl9CisKKwkJCQlub3V2ZWF1X2JvX3dyMzIobnZibywgKHB1c2hbaV0ub2Zmc2V0ICsKKwkJCQkJCXB1c2hbaV0ubGVuZ3RoIC0gOCkgLyA0LCBjbWQpOworCQkJfQorCisJCQlPVVRfUklORyhjaGFuLCAoKG1lbS0+c3RhcnQgPDwgUEFHRV9TSElGVCkgKworCQkJCQlwdXNoW2ldLm9mZnNldCkgfCAweDIwMDAwMDAwKTsKIAkJCU9VVF9SSU5HKGNoYW4sIDApOworCQkJZm9yIChqID0gMDsgaiA8IE5PVVZFQVVfRE1BX1NLSVBTOyBqKyspCisJCQkJT1VUX1JJTkcoY2hhbiwgMCk7CisJCX0KIAl9CiAKIAlyZXQgPSBub3V2ZWF1X2ZlbmNlX25ldyhjaGFuLCAmZmVuY2UsIHRydWUpOwpAQCAtNzkwLDkgKzcyMCwxNCBAQAogCW5vdXZlYXVfZmVuY2VfdW5yZWYoKHZvaWQqKikmZmVuY2UpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCWtmcmVlKGJvKTsKKwlrZnJlZShwdXNoKTsKIAogb3V0X25leHQ6Ci0JaWYgKFBVU0hCVUZfQ0FMKSB7CisJaWYgKGNoYW4tPmRtYS5pYl9tYXgpIHsKKwkJcmVxLT5zdWZmaXgwID0gMHgwMDAwMDAwMDsKKwkJcmVxLT5zdWZmaXgxID0gMHgwMDAwMDAwMDsKKwl9IGVsc2UKKwlpZiAoZGV2X3ByaXYtPmNhcmRfdHlwZSA+PSBOVl8yMCkgewogCQlyZXEtPnN1ZmZpeDAgPSAweDAwMDIwMDAwOwogCQlyZXEtPnN1ZmZpeDEgPSAweDAwMDAwMDAwOwogCX0gZWxzZSB7CkBAIC04MDQsMTkgKzczOSw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50Ci1ub3V2ZWF1X2dlbV9pb2N0bF9wdXNoYnVmX2NhbGwyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCi17Ci0Jc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWZfY2FsbCAqcmVxID0gZGF0YTsKLQotCXJlcS0+dnJhbV9hdmFpbGFibGUgPSBkZXZfcHJpdi0+ZmJfYXBlcl9mcmVlOwotCXJlcS0+Z2FydF9hdmFpbGFibGUgPSBkZXZfcHJpdi0+Z2FydF9pbmZvLmFwZXJfZnJlZTsKLQotCXJldHVybiBub3V2ZWF1X2dlbV9pb2N0bF9wdXNoYnVmX2NhbGwoZGV2LCBkYXRhLCBmaWxlX3ByaXYpOwotfQotCiBzdGF0aWMgaW5saW5lIHVpbnQzMl90CiBkb21haW5fdG9fdHRtKHN0cnVjdCBub3V2ZWF1X2JvICpudmJvLCB1aW50MzJfdCBkb21haW4pCiB7CkBAIC04MzEsNzQgKzc1Myw2IEBACiB9CiAKIGludAotbm91dmVhdV9nZW1faW9jdGxfcGluKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCSAgICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQotewotCXN0cnVjdCBkcm1fbm91dmVhdV9nZW1fcGluICpyZXEgPSBkYXRhOwotCXN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ2VtOwotCXN0cnVjdCBub3V2ZWF1X2JvICpudmJvOwotCWludCByZXQgPSAwOwotCi0JTk9VVkVBVV9DSEVDS19JTklUSUFMSVNFRF9XSVRIX1JFVFVSTjsKLQotCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7Ci0JCU5WX0VSUk9SKGRldiwgInBpbiBvbmx5IGFsbG93ZWQgd2l0aG91dCBrZXJuZWwgbW9kZXNldHRpbmdcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlpZiAoIURSTV9TVVNFUihEUk1fQ1VSUFJPQykpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlnZW0gPSBkcm1fZ2VtX29iamVjdF9sb29rdXAoZGV2LCBmaWxlX3ByaXYsIHJlcS0+aGFuZGxlKTsKLQlpZiAoIWdlbSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JbnZibyA9IG5vdXZlYXVfZ2VtX29iamVjdChnZW0pOwotCi0JcmV0ID0gbm91dmVhdV9ib19waW4obnZibywgZG9tYWluX3RvX3R0bShudmJvLCByZXEtPmRvbWFpbikpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0OwotCi0JcmVxLT5vZmZzZXQgPSBudmJvLT5iby5vZmZzZXQ7Ci0JaWYgKG52Ym8tPmJvLm1lbS5tZW1fdHlwZSA9PSBUVE1fUExfVFQpCi0JCXJlcS0+ZG9tYWluID0gTk9VVkVBVV9HRU1fRE9NQUlOX0dBUlQ7Ci0JZWxzZQotCQlyZXEtPmRvbWFpbiA9IE5PVVZFQVVfR0VNX0RPTUFJTl9WUkFNOwotCi1vdXQ6Ci0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGdlbSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQKLW5vdXZlYXVfZ2VtX2lvY3RsX3VucGluKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKLXsKLQlzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3BpbiAqcmVxID0gZGF0YTsKLQlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdlbTsKLQlpbnQgcmV0OwotCi0JTk9VVkVBVV9DSEVDS19JTklUSUFMSVNFRF9XSVRIX1JFVFVSTjsKLQotCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWdlbSA9IGRybV9nZW1fb2JqZWN0X2xvb2t1cChkZXYsIGZpbGVfcHJpdiwgcmVxLT5oYW5kbGUpOwotCWlmICghZ2VtKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldCA9IG5vdXZlYXVfYm9fdW5waW4obm91dmVhdV9nZW1fb2JqZWN0KGdlbSkpOwotCi0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGdlbSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1pbnQKIG5vdXZlYXVfZ2VtX2lvY3RsX2NwdV9wcmVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKQEAgLTkzNSw5ICs3ODksNyBAQAogCX0KIAogb3V0OgotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShnZW0pOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdlbSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtOTY1LDkgKzgxNyw3IEBACiAJcmV0ID0gMDsKIAogb3V0OgotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShnZW0pOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdlbSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtOTg2LDkgKzgzNiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJcmV0ID0gbm91dmVhdV9nZW1faW5mbyhnZW0sIHJlcSk7Ci0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGdlbSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ2VtKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2h3LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2h3LmMKaW5kZXggZGM0Njc5Mi4uNzg1NWIzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ody5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaHcuYwpAQCAtMTYwLDcgKzE2MCw3IEBACiBzZXRQTExfc2luZ2xlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVpbnQzMl90IHJlZywgc3RydWN0IG5vdXZlYXVfcGxsX3ZhbHMgKnB2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IGNoaXBfdmVyc2lvbiA9IGRldl9wcml2LT52Ymlvcy0+Y2hpcF92ZXJzaW9uOworCWludCBjaGlwX3ZlcnNpb24gPSBkZXZfcHJpdi0+dmJpb3MuY2hpcF92ZXJzaW9uOwogCXVpbnQzMl90IG9sZHBsbCA9IE5WUmVhZFJBTURBQyhkZXYsIDAsIHJlZyk7CiAJaW50IG9sZE4gPSAob2xkcGxsID4+IDgpICYgMHhmZiwgb2xkTSA9IG9sZHBsbCAmIDB4ZmY7CiAJdWludDMyX3QgcGxsID0gKG9sZHBsbCAmIDB4ZmZmODAwMDApIHwgcHYtPmxvZzJQIDw8IDE2IHwgcHYtPk5NMTsKQEAgLTIxNiw3ICsyMTYsNyBAQAogCQkgICAgICAgc3RydWN0IG5vdXZlYXVfcGxsX3ZhbHMgKnB2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IGNoaXBfdmVyc2lvbiA9IGRldl9wcml2LT52Ymlvcy0+Y2hpcF92ZXJzaW9uOworCWludCBjaGlwX3ZlcnNpb24gPSBkZXZfcHJpdi0+dmJpb3MuY2hpcF92ZXJzaW9uOwogCWJvb2wgbnYzMDM1ID0gY2hpcF92ZXJzaW9uID09IDB4MzAgfHwgY2hpcF92ZXJzaW9uID09IDB4MzU7CiAJdWludDMyX3QgcmVnMiA9IHJlZzEgKyAoKHJlZzEgPT0gTlZfUkFNREFDX1ZQTEwyKSA/IDB4NWMgOiAweDcwKTsKIAl1aW50MzJfdCBvbGRwbGwxID0gTlZSZWFkUkFNREFDKGRldiwgMCwgcmVnMSk7CkBAIC0zNzQsNyArMzc0LDcgQEAKIAkJICBzdHJ1Y3Qgbm91dmVhdV9wbGxfdmFscyAqcHYpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgY3YgPSBkZXZfcHJpdi0+dmJpb3MtPmNoaXBfdmVyc2lvbjsKKwlpbnQgY3YgPSBkZXZfcHJpdi0+dmJpb3MuY2hpcF92ZXJzaW9uOwogCiAJaWYgKGN2ID09IDB4MzAgfHwgY3YgPT0gMHgzMSB8fCBjdiA9PSAweDM1IHx8IGN2ID09IDB4MzYgfHwKIAkgICAgY3YgPj0gMHg0MCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9pMmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaTJjLmMKaW5kZXggNzBlOTk0ZC4uODg1ODNlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9pMmMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2kyYy5jCkBAIC0yNTQsMTYgKzI1NCwxNiBAQAogbm91dmVhdV9pMmNfZmluZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgaW5kZXgpCiB7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT5WQklPUzsKKwlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT52YmlvczsKIAotCWlmIChpbmRleCA+IERDQl9NQVhfTlVNX0kyQ19FTlRSSUVTKQorCWlmIChpbmRleCA+PSBEQ0JfTUFYX05VTV9JMkNfRU5UUklFUykKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAoIWJpb3MtPmJkY2IuZGNiLmkyY1tpbmRleF0uY2hhbikgewotCQlpZiAobm91dmVhdV9pMmNfaW5pdChkZXYsICZiaW9zLT5iZGNiLmRjYi5pMmNbaW5kZXhdLCBpbmRleCkpCisJaWYgKCFiaW9zLT5kY2IuaTJjW2luZGV4XS5jaGFuKSB7CisJCWlmIChub3V2ZWF1X2kyY19pbml0KGRldiwgJmJpb3MtPmRjYi5pMmNbaW5kZXhdLCBpbmRleCkpCiAJCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlyZXR1cm4gYmlvcy0+YmRjYi5kY2IuaTJjW2luZGV4XS5jaGFuOworCXJldHVybiBiaW9zLT5kY2IuaTJjW2luZGV4XS5jaGFuOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9pcnEuYwppbmRleCA0NDdmOWY2Li45NTIyMGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2lycS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfaXJxLmMKQEAgLTY5MSwxMSArNjkxLDE0IEBACiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgZHJtX2RldmljZSAqKWFyZzsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXVpbnQzMl90IHN0YXR1cywgZmJkZXZfZmxhZ3MgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzdGF0dXMgPSBudl9yZDMyKGRldiwgTlYwM19QTUNfSU5UUl8wKTsKIAlpZiAoIXN0YXR1cykKIAkJcmV0dXJuIElSUV9OT05FOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CisKIAlpZiAoZGV2X3ByaXYtPmZiZGV2X2luZm8pIHsKIAkJZmJkZXZfZmxhZ3MgPSBkZXZfcHJpdi0+ZmJkZXZfaW5mby0+ZmxhZ3M7CiAJCWRldl9wcml2LT5mYmRldl9pbmZvLT5mbGFncyB8PSBGQklORk9fSFdBQ0NFTF9ESVNBQkxFRDsKQEAgLTczMyw1ICs3MzYsNyBAQAogCWlmIChkZXZfcHJpdi0+ZmJkZXZfaW5mbykKIAkJZGV2X3ByaXYtPmZiZGV2X2luZm8tPmZsYWdzID0gZmJkZXZfZmxhZ3M7CiAKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ub3RpZmllci5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9ub3RpZmllci5jCmluZGV4IGQ5OWRjMDguLjk1MzdmM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfbm90aWZpZXIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X25vdGlmaWVyLmMKQEAgLTYxLDExICs2MSw4IEBACiAKIAljaGFuLT5ub3RpZmllcl9ibyA9IG50Znk7CiBvdXRfZXJyOgotCWlmIChyZXQpIHsKLQkJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShudGZ5LT5nZW0pOwotCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQl9CisJaWYgKHJldCkKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQobnRmeS0+Z2VtKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC04MSw4ICs3OCw4IEBACiAJbm91dmVhdV9ib191bm1hcChjaGFuLT5ub3RpZmllcl9ibyk7CiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCW5vdXZlYXVfYm9fdW5waW4oY2hhbi0+bm90aWZpZXJfYm8pOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGNoYW4tPm5vdGlmaWVyX2JvLT5nZW0pOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGNoYW4tPm5vdGlmaWVyX2JvLT5nZW0pOwogCW5vdXZlYXVfbWVtX3Rha2Vkb3duKCZjaGFuLT5ub3RpZmllcl9oZWFwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9zdGF0ZS5jCmluZGV4IGE0ODUxYWYuLmViOGYwODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X3N0YXRlLmMKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJkcm1fc2FyZWEuaCIKICNpbmNsdWRlICJkcm1fY3J0Y19oZWxwZXIuaCIKICNpbmNsdWRlIDxsaW51eC92Z2FhcmIuaD4KKyNpbmNsdWRlIDxsaW51eC92Z2Ffc3dpdGNoZXJvby5oPgogCiAjaW5jbHVkZSAibm91dmVhdV9kcnYuaCIKICNpbmNsdWRlICJub3V2ZWF1X2RybS5oIgpAQCAtMzcxLDYgKzM3MiwzMCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIG5vdXZlYXVfc3dpdGNoZXJvb19zZXRfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJCSBlbnVtIHZnYV9zd2l0Y2hlcm9vX3N0YXRlIHN0YXRlKQoreworCXBtX21lc3NhZ2VfdCBwbW0gPSB7IC5ldmVudCA9IFBNX0VWRU5UX1NVU1BFTkQgfTsKKwlpZiAoc3RhdGUgPT0gVkdBX1NXSVRDSEVST09fT04pIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJWR0Egc3dpdGNoZXJvbzogc3dpdGNoZWQgbm91dmVhdSBvblxuIik7CisJCW5vdXZlYXVfcGNpX3Jlc3VtZShwZGV2KTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIlZHQSBzd2l0Y2hlcm9vOiBzd2l0Y2hlZCBub3V2ZWF1IG9mZlxuIik7CisJCW5vdXZlYXVfcGNpX3N1c3BlbmQocGRldiwgcG1tKTsKKwl9Cit9CisKK3N0YXRpYyBib29sIG5vdXZlYXVfc3dpdGNoZXJvb19jYW5fc3dpdGNoKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJYm9vbCBjYW5fc3dpdGNoOworCisJc3Bpbl9sb2NrKCZkZXYtPmNvdW50X2xvY2spOworCWNhbl9zd2l0Y2ggPSAoZGV2LT5vcGVuX2NvdW50ID09IDApOworCXNwaW5fdW5sb2NrKCZkZXYtPmNvdW50X2xvY2spOworCXJldHVybiBjYW5fc3dpdGNoOworfQorCiBpbnQKIG5vdXZlYXVfY2FyZF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CkBAIC0zODQsNiArNDA5LDggQEAKIAkJcmV0dXJuIDA7CiAKIAl2Z2FfY2xpZW50X3JlZ2lzdGVyKGRldi0+cGRldiwgZGV2LCBOVUxMLCBub3V2ZWF1X3ZnYV9zZXRfZGVjb2RlKTsKKwl2Z2Ffc3dpdGNoZXJvb19yZWdpc3Rlcl9jbGllbnQoZGV2LT5wZGV2LCBub3V2ZWF1X3N3aXRjaGVyb29fc2V0X3N0YXRlLAorCQkJCSAgICAgICBub3V2ZWF1X3N3aXRjaGVyb29fY2FuX3N3aXRjaCk7CiAKIAkvKiBJbml0aWFsaXNlIGludGVybmFsIGRyaXZlciBBUEkgaG9va3MgKi8KIAlyZXQgPSBub3V2ZWF1X2luaXRfZW5naW5lX3B0cnMoZGV2KTsKQEAgLTM5MSw2ICs0MTgsNyBAQAogCQlnb3RvIG91dDsKIAllbmdpbmUgPSAmZGV2X3ByaXYtPmVuZ2luZTsKIAlkZXZfcHJpdi0+aW5pdF9zdGF0ZSA9IE5PVVZFQVVfQ0FSRF9JTklUX0ZBSUxFRDsKKwlzcGluX2xvY2tfaW5pdCgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2spOwogCiAJLyogUGFyc2UgQklPUyB0YWJsZXMgLyBSdW4gaW5pdCB0YWJsZXMgaWYgY2FyZCBub3QgUE9TVGVkICovCiAJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfTU9ERVNFVCkpIHsKQEAgLTYxNywxMSArNjQ1LDYgQEAKIAlOVl9ERUJVRyhkZXYsICJ2ZW5kb3I6IDB4JVggZGV2aWNlOiAweCVYIGNsYXNzOiAweCVYXG4iLAogCQkgZGV2LT5wY2lfdmVuZG9yLCBkZXYtPnBjaV9kZXZpY2UsIGRldi0+cGRldi0+Y2xhc3MpOwogCi0JZGV2X3ByaXYtPmFjcGlfZHNtID0gbm91dmVhdV9kc21fcHJvYmUoZGV2KTsKLQotCWlmIChkZXZfcHJpdi0+YWNwaV9kc20pCi0JCW5vdXZlYXVfaHlicmlkX3NldHVwKGRldik7Ci0KIAlkZXZfcHJpdi0+d3EgPSBjcmVhdGVfd29ya3F1ZXVlKCJub3V2ZWF1Iik7CiAJaWYgKCFkZXZfcHJpdi0+d3EpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzc2LDEzICs3OTksNiBAQAogCXJldHVybiAwOwogfQogCi1pbnQKLW5vdXZlYXVfaW9jdGxfY2FyZF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCi0JCQlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKLXsKLQlyZXR1cm4gbm91dmVhdV9jYXJkX2luaXQoZGV2KTsKLX0KLQogaW50IG5vdXZlYXVfaW9jdGxfZ2V0cGFyYW0oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYwppbmRleCBkMmYxNDNlLi5hMWQxZWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2NydGMuYwpAQCAtOTI2LDkgKzkyNiw3IEBACiAJbnZfY3J0Yy0+Y3Vyc29yLnNldF9vZmZzZXQobnZfY3J0YywgbnZfY3J0Yy0+Y3Vyc29yLm9mZnNldCk7CiAJbnZfY3J0Yy0+Y3Vyc29yLnNob3cobnZfY3J0YywgdHJ1ZSk7CiBvdXQ6Ci0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGdlbSk7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ2VtKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RhYy5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kYWMuYwppbmRleCAxZDczYjE1Li4xY2IxOWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RhYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGFjLmMKQEAgLTIzMCwxMyArMjMwLDEzIEBACiAJaWYgKGRjYi0+dHlwZSA9PSBPVVRQVVRfVFYpIHsKIAkJdGVzdHZhbCA9IFJHQl9URVNUX0RBVEEoMHhhMCwgMHhhMCwgMHhhMCk7CiAKLQkJaWYgKGRldl9wcml2LT52Ymlvcy0+dHZkYWN0ZXN0dmFsKQotCQkJdGVzdHZhbCA9IGRldl9wcml2LT52Ymlvcy0+dHZkYWN0ZXN0dmFsOworCQlpZiAoZGV2X3ByaXYtPnZiaW9zLnR2ZGFjdGVzdHZhbCkKKwkJCXRlc3R2YWwgPSBkZXZfcHJpdi0+dmJpb3MudHZkYWN0ZXN0dmFsOwogCX0gZWxzZSB7CiAJCXRlc3R2YWwgPSBSR0JfVEVTVF9EQVRBKDB4MTQwLCAweDE0MCwgMHgxNDApOyAvKiAweDk0MDUwMTQwICovCiAKLQkJaWYgKGRldl9wcml2LT52Ymlvcy0+ZGFjdGVzdHZhbCkKLQkJCXRlc3R2YWwgPSBkZXZfcHJpdi0+dmJpb3MtPmRhY3Rlc3R2YWw7CisJCWlmIChkZXZfcHJpdi0+dmJpb3MuZGFjdGVzdHZhbCkKKwkJCXRlc3R2YWwgPSBkZXZfcHJpdi0+dmJpb3MuZGFjdGVzdHZhbDsKIAl9CiAKIAlzYXZlZF9ydGVzdF9jdHJsID0gTlZSZWFkUkFNREFDKGRldiwgMCwgTlZfUFJBTURBQ19URVNUX0NPTlRST0wgKyByZWdvZmZzZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kZnAuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZGZwLmMKaW5kZXggNDgzZjg3NS4uNDE2MzRkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kZnAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2RmcC5jCkBAIC0yNjksMTAgKzI2OSwxMCBAQAogCXJlZ3AtPmZwX2hvcml6X3JlZ3NbRlBfVE9UQUxdID0gb3V0cHV0X21vZGUtPmh0b3RhbCAtIDE7CiAJaWYgKCFudl9nZjRfZGlzcF9hcmNoKGRldikgfHwKIAkgICAgKG91dHB1dF9tb2RlLT5oc3luY19zdGFydCAtIG91dHB1dF9tb2RlLT5oZGlzcGxheSkgPj0KLQkJCQkJZGV2X3ByaXYtPnZiaW9zLT5kaWdpdGFsX21pbl9mcm9udF9wb3JjaCkKKwkJCQkJZGV2X3ByaXYtPnZiaW9zLmRpZ2l0YWxfbWluX2Zyb250X3BvcmNoKQogCQlyZWdwLT5mcF9ob3Jpel9yZWdzW0ZQX0NSVENdID0gb3V0cHV0X21vZGUtPmhkaXNwbGF5OwogCWVsc2UKLQkJcmVncC0+ZnBfaG9yaXpfcmVnc1tGUF9DUlRDXSA9IG91dHB1dF9tb2RlLT5oc3luY19zdGFydCAtIGRldl9wcml2LT52Ymlvcy0+ZGlnaXRhbF9taW5fZnJvbnRfcG9yY2ggLSAxOworCQlyZWdwLT5mcF9ob3Jpel9yZWdzW0ZQX0NSVENdID0gb3V0cHV0X21vZGUtPmhzeW5jX3N0YXJ0IC0gZGV2X3ByaXYtPnZiaW9zLmRpZ2l0YWxfbWluX2Zyb250X3BvcmNoIC0gMTsKIAlyZWdwLT5mcF9ob3Jpel9yZWdzW0ZQX1NZTkNfU1RBUlRdID0gb3V0cHV0X21vZGUtPmhzeW5jX3N0YXJ0IC0gMTsKIAlyZWdwLT5mcF9ob3Jpel9yZWdzW0ZQX1NZTkNfRU5EXSA9IG91dHB1dF9tb2RlLT5oc3luY19lbmQgLSAxOwogCXJlZ3AtPmZwX2hvcml6X3JlZ3NbRlBfVkFMSURfU1RBUlRdID0gb3V0cHV0X21vZGUtPmhza2V3OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9kaXNwbGF5LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2Rpc3BsYXkuYwppbmRleCBlZjc3MjE1Li5jNzg5OGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2Rpc3BsYXkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2Rpc3BsYXkuYwpAQCAtOTMsMTAgKzkzLDkgQEAKIG52MDRfZGlzcGxheV9jcmVhdGUoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXN0cnVjdCBwYXJzZWRfZGNiICpkY2IgPSBkZXZfcHJpdi0+dmJpb3MtPmRjYjsKKwlzdHJ1Y3QgZGNiX3RhYmxlICpkY2IgPSAmZGV2X3ByaXYtPnZiaW9zLmRjYjsKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXI7CiAJc3RydWN0IGRybV9jcnRjICpjcnRjOwotCXVpbnQxNl90IGNvbm5lY3RvclsxNl0gPSB7IDAgfTsKIAlpbnQgaSwgcmV0OwogCiAJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CkBAIC0xNTQsNTIgKzE1MywxMCBAQAogCiAJCWlmIChyZXQpCiAJCQljb250aW51ZTsKLQotCQljb25uZWN0b3JbZGNiZW50LT5jb25uZWN0b3JdIHw9ICgxIDw8IGRjYmVudC0+dHlwZSk7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IGRjYi0+ZW50cmllczsgaSsrKSB7Ci0JCXN0cnVjdCBkY2JfZW50cnkgKmRjYmVudCA9ICZkY2ItPmVudHJ5W2ldOwotCQl1aW50MTZfdCBlbmNvZGVyczsKLQkJaW50IHR5cGU7Ci0KLQkJZW5jb2RlcnMgPSBjb25uZWN0b3JbZGNiZW50LT5jb25uZWN0b3JdOwotCQlpZiAoIShlbmNvZGVycyAmICgxIDw8IGRjYmVudC0+dHlwZSkpKQotCQkJY29udGludWU7Ci0JCWNvbm5lY3RvcltkY2JlbnQtPmNvbm5lY3Rvcl0gPSAwOwotCi0JCXN3aXRjaCAoZGNiZW50LT50eXBlKSB7Ci0JCWNhc2UgT1VUUFVUX0FOQUxPRzoKLQkJCWlmICghTVVMVElQTEVfRU5DT0RFUlMoZW5jb2RlcnMpKQotCQkJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfVkdBOwotCQkJZWxzZQotCQkJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSTsKLQkJCWJyZWFrOwotCQljYXNlIE9VVFBVVF9UTURTOgotCQkJaWYgKCFNVUxUSVBMRV9FTkNPREVSUyhlbmNvZGVycykpCi0JCQkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEOwotCQkJZWxzZQotCQkJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJSTsKLQkJCWJyZWFrOwotCQljYXNlIE9VVFBVVF9MVkRTOgotCQkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTOwotI2lmIDAKLQkJCS8qIGRvbid0IGNyZWF0ZSBpMmMgYWRhcHRlciB3aGVuIGx2ZHMgZGRjIG5vdCBhbGxvd2VkICovCi0JCQlpZiAoZGNiZW50LT5sdmRzY29uZi51c2Vfc3RyYXBzX2Zvcl9tb2RlIHx8Ci0JCQkgICAgZGV2X3ByaXYtPnZiaW9zLT5mcF9ub19kZGMpCi0JCQkJaTJjX2luZGV4ID0gMHhmOwotI2VuZGlmCi0JCQlicmVhazsKLQkJY2FzZSBPVVRQVVRfVFY6Ci0JCQl0eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX1RWOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQl0eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd247Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCW5vdXZlYXVfY29ubmVjdG9yX2NyZWF0ZShkZXYsIGRjYmVudC0+Y29ubmVjdG9yLCB0eXBlKTsKLQl9CisJZm9yIChpID0gMDsgaSA8IGRjYi0+Y29ubmVjdG9yLmVudHJpZXM7IGkrKykKKwkJbm91dmVhdV9jb25uZWN0b3JfY3JlYXRlKGRldiwgJmRjYi0+Y29ubmVjdG9yLmVudHJ5W2ldKTsKIAogCS8qIFNhdmUgcHJldmlvdXMgc3RhdGUgKi8KIAlOVkxvY2tWZ2FDcnRjcyhkZXYsIGZhbHNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZmJjb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZmJjb24uYwppbmRleCBmZDAxY2FhLi4zZGE5MGMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X2ZiY29uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9mYmNvbi5jCkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCXdpZHRoID0gKGltYWdlLT53aWR0aCArIDMxKSAmIH4zMTsKKwl3aWR0aCA9IEFMSUdOKGltYWdlLT53aWR0aCwgMzIpOwogCWRzaXplID0gKHdpZHRoICogaW1hZ2UtPmhlaWdodCkgPj4gNTsKIAogCWlmIChpbmZvLT5maXgudmlzdWFsID09IEZCX1ZJU1VBTF9UUlVFQ09MT1IgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfZmlmby5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9maWZvLmMKaW5kZXggZjMxMzQ3Yi4uNjZmZTU1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9maWZvLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF9maWZvLmMKQEAgLTExNyw2ICsxMTcsNyBAQAogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQ7CiAKIAlyZXQgPSBub3V2ZWF1X2dwdW9ial9uZXdfZmFrZShkZXYsIE5WMDRfUkFNRkMoY2hhbi0+aWQpLCB+MCwKQEAgLTEyNyw2ICsxMjgsOCBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2ssIGZsYWdzKTsKKwogCS8qIFNldHVwIGluaXRpYWwgc3RhdGUgKi8KIAlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MoZGV2LCB0cnVlKTsKIAlSQU1GQ19XUihETUFfUFVULCBjaGFuLT5wdXNoYnVmX2Jhc2UpOwpAQCAtMTQ0LDYgKzE0Nyw4IEBACiAJLyogZW5hYmxlIHRoZSBmaWZvIGRtYSBvcGVyYXRpb24gKi8KIAludl93cjMyKGRldiwgTlYwNF9QRklGT19NT0RFLAogCQludl9yZDMyKGRldiwgTlYwNF9QRklGT19NT0RFKSB8ICgxIDw8IGNoYW4tPmlkKSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZfcHJpdi0+Y29udGV4dF9zd2l0Y2hfbG9jaywgZmxhZ3MpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X3R2LmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjA0X3R2LmMKaW5kZXggOWM2MzA5OS4uYzRlMzQwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYwNF90di5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MDRfdHYuYwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJbnZfZW5jb2Rlci0+b3IgPSBmZnMoZW50cnktPm9yKSAtIDE7CiAKIAkvKiBSdW4gdGhlIHNsYXZlLXNwZWNpZmljIGluaXRpYWxpemF0aW9uICovCi0JYWRhcCA9ICZkZXZfcHJpdi0+dmJpb3MtPmRjYi0+aTJjW2kyY19pbmRleF0uY2hhbi0+YWRhcHRlcjsKKwlhZGFwID0gJmRldl9wcml2LT52Ymlvcy5kY2IuaTJjW2kyY19pbmRleF0uY2hhbi0+YWRhcHRlcjsKIAogCXdhc19sb2NrZWQgPSBOVkxvY2tWZ2FDcnRjcyhkZXYsIGZhbHNlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxN190di5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnYxN190di5jCmluZGV4IDIxYWM2ZTQuLjc0Yzg4MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252MTdfdHYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjE3X3R2LmMKQEAgLTQ1LDggKzQ1LDggQEAKIAogI2RlZmluZSBSR0JfVEVTVF9EQVRBKHIsIGcsIGIpIChyIDw8IDAgfCBnIDw8IDEwIHwgYiA8PCAyMCkKIAl0ZXN0dmFsID0gUkdCX1RFU1RfREFUQSgweDgyLCAweGViLCAweDgyKTsKLQlpZiAoZGV2X3ByaXYtPnZiaW9zLT50dmRhY3Rlc3R2YWwpCi0JCXRlc3R2YWwgPSBkZXZfcHJpdi0+dmJpb3MtPnR2ZGFjdGVzdHZhbDsKKwlpZiAoZGV2X3ByaXYtPnZiaW9zLnR2ZGFjdGVzdHZhbCkKKwkJdGVzdHZhbCA9IGRldl9wcml2LT52Ymlvcy50dmRhY3Rlc3R2YWw7CiAKIAlkYWNjbGsgPSBOVlJlYWRSQU1EQUMoZGV2LCAwLCBOVl9QUkFNREFDX0RBQ0NMSyArIHJlZ29mZnNldCk7CiAJaGVhZCA9IChkYWNjbGsgJiAweDEwMCkgPj4gODsKQEAgLTM2Nyw3ICszNjcsNyBAQAogCQkJICAgICAhZW5jLT5jcnRjICYmCiAJCQkgICAgIG52MDRfZGZwX2dldF9ib3VuZF9oZWFkKGRldiwgZGNiKSA9PSBoZWFkKSB7CiAJCQkJbnYwNF9kZnBfYmluZF9oZWFkKGRldiwgZGNiLCBoZWFkIF4gMSwKLQkJCQkJCWRldl9wcml2LT5WQklPUy5mcC5kdWFsX2xpbmspOworCQkJCQkJZGV2X3ByaXYtPnZiaW9zLmZwLmR1YWxfbGluayk7CiAJCQl9CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY0MF9maWZvLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2ZpZm8uYwppbmRleCBiNGYxOWNjLi42YjJlZjRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2ZpZm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjQwX2ZpZm8uYwpAQCAtMzcsNiArMzcsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjaGFuLT5kZXY7CiAJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAl1aW50MzJfdCBmYyA9IE5WNDBfUkFNRkMoY2hhbi0+aWQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAogCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ld19mYWtlKGRldiwgTlY0MF9SQU1GQyhjaGFuLT5pZCksIH4wLApAQCAtNDUsNiArNDYsOCBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2ssIGZsYWdzKTsKKwogCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5wcmVwYXJlX2FjY2VzcyhkZXYsIHRydWUpOwogCW52X3dpMzIoZGV2LCBmYyArICAwLCBjaGFuLT5wdXNoYnVmX2Jhc2UpOwogCW52X3dpMzIoZGV2LCBmYyArICA0LCBjaGFuLT5wdXNoYnVmX2Jhc2UpOwpAQCAtNjMsNiArNjYsOCBAQAogCS8qIGVuYWJsZSB0aGUgZmlmbyBkbWEgb3BlcmF0aW9uICovCiAJbnZfd3IzMihkZXYsIE5WMDRfUEZJRk9fTU9ERSwKIAkJbnZfcmQzMihkZXYsIE5WMDRfUEZJRk9fTU9ERSkgfCAoMSA8PCBjaGFuLT5pZCkpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2X3ByaXYtPmNvbnRleHRfc3dpdGNoX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9jcnRjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2NydGMuYwppbmRleCBkMWE2NTFlLi5jZmFiZWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2NydGMuYwpAQCAtMzU4LDkgKzM1OCw3IEBACiAJbnZfY3J0Yy0+Y3Vyc29yLnNob3cobnZfY3J0YywgdHJ1ZSk7CiAKIG91dDoKLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZ2VtKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnZW0pOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGFjLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2RhYy5jCmluZGV4IGYwOGYwNDIuLjFmZDk1MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGFjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9kYWMuYwpAQCAtNzksOCArNzksOCBAQAogCX0KIAogCS8qIFVzZSBiaW9zIHByb3ZpZGVkIHZhbHVlIGlmIHBvc3NpYmxlLiAqLwotCWlmIChkZXZfcHJpdi0+dmJpb3MtPmRhY3Rlc3R2YWwpIHsKLQkJbG9hZF9wYXR0ZXJuID0gZGV2X3ByaXYtPnZiaW9zLT5kYWN0ZXN0dmFsOworCWlmIChkZXZfcHJpdi0+dmJpb3MuZGFjdGVzdHZhbCkgeworCQlsb2FkX3BhdHRlcm4gPSBkZXZfcHJpdi0+dmJpb3MuZGFjdGVzdHZhbDsKIAkJTlZfREVCVUdfS01TKGRldiwgIlVzaW5nIGJpb3MgcHJvdmlkZWQgbG9hZF9wYXR0ZXJuIG9mICVkXG4iLAogCQkJICBsb2FkX3BhdHRlcm4pOwogCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGlzcGxheS5jCmluZGV4IDkwZjBiZjUuLjYxYTg5ZjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZGlzcGxheS5jCkBAIC0zNzAsOSArMzcwLDcgQEAKIAkJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpjb25uID0gbm91dmVhdV9jb25uZWN0b3IoY29ubmVjdG9yKTsKIAkJc3RydWN0IGRjYl9ncGlvX2VudHJ5ICpncGlvOwogCi0JCWlmIChjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJICYmCi0JCSAgICBjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklEICYmCi0JCSAgICBjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydCkKKwkJaWYgKGNvbm4tPmRjYi0+Z3Bpb190YWcgPT0gMHhmZikKIAkJCWNvbnRpbnVlOwogCiAJCWdwaW8gPSBub3V2ZWF1X2Jpb3NfZ3Bpb19lbnRyeShkZXYsIGNvbm4tPmRjYi0+Z3Bpb190YWcpOwpAQCAtNDY1LDggKzQ2Myw3IEBACiBpbnQgbnY1MF9kaXNwbGF5X2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0Jc3RydWN0IHBhcnNlZF9kY2IgKmRjYiA9IGRldl9wcml2LT52Ymlvcy0+ZGNiOwotCXVpbnQzMl90IGNvbm5lY3RvclsxNl0gPSB7fTsKKwlzdHJ1Y3QgZGNiX3RhYmxlICpkY2IgPSAmZGV2X3ByaXYtPnZiaW9zLmRjYjsKIAlpbnQgcmV0LCBpOwogCiAJTlZfREVCVUdfS01TKGRldiwgIlxuIik7CkBAIC01MjIsNDQgKzUxOSwxMyBAQAogCQkJTlZfV0FSTihkZXYsICJEQ0IgZW5jb2RlciAlZCB1bmtub3duXG4iLCBlbnRyeS0+dHlwZSk7CiAJCQljb250aW51ZTsKIAkJfQotCi0JCWNvbm5lY3RvcltlbnRyeS0+Y29ubmVjdG9yXSB8PSAoMSA8PCBlbnRyeS0+dHlwZSk7CiAJfQogCi0JLyogSXQgYXBwZWFycyB0aGF0IERDQiAzLjArIFZCSU9TIGhhcyBhIGNvbm5lY3RvciB0YWJsZSwgaG93ZXZlciwKLQkgKiBJJ20gbm90IDEwMCUgY2VydGFpbiBob3cgdG8gZGVjb2RlIGl0IGNvcnJlY3RseSB5ZXQgc28ganVzdAotCSAqIGxvb2sgYXQgd2hhdCBlbmNvZGVycyBhcmUgcHJlc2VudCBvbiBlYWNoIGNvbm5lY3RvciBpbmRleCBhbmQKLQkgKiBhdHRlbXB0IHRvIGRlcml2ZSB0aGUgY29ubmVjdG9yIHR5cGUgZnJvbSB0aGF0LgotCSAqLwotCWZvciAoaSA9IDAgOyBpIDwgZGNiLT5lbnRyaWVzOyBpKyspIHsKLQkJc3RydWN0IGRjYl9lbnRyeSAqZW50cnkgPSAmZGNiLT5lbnRyeVtpXTsKLQkJdWludDE2X3QgZW5jb2RlcnM7Ci0JCWludCB0eXBlOwotCi0JCWVuY29kZXJzID0gY29ubmVjdG9yW2VudHJ5LT5jb25uZWN0b3JdOwotCQlpZiAoIShlbmNvZGVycyAmICgxIDw8IGVudHJ5LT50eXBlKSkpCisJZm9yIChpID0gMCA7IGkgPCBkY2ItPmNvbm5lY3Rvci5lbnRyaWVzOyBpKyspIHsKKwkJaWYgKGkgIT0gMCAmJiBkY2ItPmNvbm5lY3Rvci5lbnRyeVtpXS5pbmRleCA9PQorCQkJICAgICAgZGNiLT5jb25uZWN0b3IuZW50cnlbaSAtIDFdLmluZGV4KQogCQkJY29udGludWU7Ci0JCWNvbm5lY3RvcltlbnRyeS0+Y29ubmVjdG9yXSA9IDA7Ci0KLQkJaWYgKGVuY29kZXJzICYgKDEgPDwgT1VUUFVUX0RQKSkgewotCQkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EaXNwbGF5UG9ydDsKLQkJfSBlbHNlIGlmIChlbmNvZGVycyAmICgxIDw8IE9VVFBVVF9UTURTKSkgewotCQkJaWYgKGVuY29kZXJzICYgKDEgPDwgT1VUUFVUX0FOQUxPRykpCi0JCQkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9EVklJOwotCQkJZWxzZQotCQkJCXR5cGUgPSBEUk1fTU9ERV9DT05ORUNUT1JfRFZJRDsKLQkJfSBlbHNlIGlmIChlbmNvZGVycyAmICgxIDw8IE9VVFBVVF9BTkFMT0cpKSB7Ci0JCQl0eXBlID0gRFJNX01PREVfQ09OTkVDVE9SX1ZHQTsKLQkJfSBlbHNlIGlmIChlbmNvZGVycyAmICgxIDw8IE9VVFBVVF9MVkRTKSkgewotCQkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9MVkRTOwotCQl9IGVsc2UgewotCQkJdHlwZSA9IERSTV9NT0RFX0NPTk5FQ1RPUl9Vbmtub3duOwotCQl9Ci0KLQkJaWYgKHR5cGUgPT0gRFJNX01PREVfQ09OTkVDVE9SX1Vua25vd24pCi0JCQljb250aW51ZTsKLQotCQlub3V2ZWF1X2Nvbm5lY3Rvcl9jcmVhdGUoZGV2LCBlbnRyeS0+Y29ubmVjdG9yLCB0eXBlKTsKKwkJbm91dmVhdV9jb25uZWN0b3JfY3JlYXRlKGRldiwgJmRjYi0+Y29ubmVjdG9yLmVudHJ5W2ldKTsKIAl9CiAKIAlyZXQgPSBudjUwX2Rpc3BsYXlfaW5pdChkZXYpOwpAQCAtNjY3LDggKzYzMyw4IEBACiAJCXJldHVybiAtMTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPnZiaW9zLT5kY2ItPmVudHJpZXM7IGkrKykgewotCQlzdHJ1Y3QgZGNiX2VudHJ5ICpkY2JlbnQgPSAmZGV2X3ByaXYtPnZiaW9zLT5kY2ItPmVudHJ5W2ldOworCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+dmJpb3MuZGNiLmVudHJpZXM7IGkrKykgeworCQlzdHJ1Y3QgZGNiX2VudHJ5ICpkY2JlbnQgPSAmZGV2X3ByaXYtPnZiaW9zLmRjYi5lbnRyeVtpXTsKIAogCQlpZiAoZGNiZW50LT50eXBlICE9IHR5cGUpCiAJCQljb250aW51ZTsKQEAgLTY5Miw3ICs2NTgsNyBAQAogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG5vdXZlYXVfY29ubmVjdG9yICpudl9jb25uZWN0b3IgPSBOVUxMOwogCXN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcjsKLQlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT5WQklPUzsKKwlzdHJ1Y3QgbnZiaW9zICpiaW9zID0gJmRldl9wcml2LT52YmlvczsKIAl1aW50MzJfdCBtYywgc2NyaXB0ID0gMCwgb3I7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewpAQCAtNzEwLDcgKzY3Niw3IEBACiAJc3dpdGNoIChkY2JlbnQtPnR5cGUpIHsKIAljYXNlIE9VVFBVVF9MVkRTOgogCQlzY3JpcHQgPSAobWMgPj4gOCkgJiAweGY7Ci0JCWlmIChiaW9zLT5wdWIuZnBfbm9fZGRjKSB7CisJCWlmIChiaW9zLT5mcF9ub19kZGMpIHsKIAkJCWlmIChiaW9zLT5mcC5kdWFsX2xpbmspCiAJCQkJc2NyaXB0IHw9IDB4MDEwMDsKIAkJCWlmIChiaW9zLT5mcC5pZl9pc18yNGJpdCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmJjb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmJjb24uYwppbmRleCAwZjU3Y2RmLi45OTNjNzEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZiY29uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9mYmNvbi5jCkBAIC0xMDksNyArMTA5LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCXdpZHRoID0gKGltYWdlLT53aWR0aCArIDMxKSAmIH4zMTsKKwl3aWR0aCA9IEFMSUdOKGltYWdlLT53aWR0aCwgMzIpOwogCWR3b3JkcyA9ICh3aWR0aCAqIGltYWdlLT5oZWlnaHQpID4+IDU7CiAKIAlCRUdJTl9SSU5HKGNoYW4sIE52U3ViMkQsIDB4MDgxNCwgMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2ZpZm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmlmby5jCmluZGV4IDIwNGE3OWYuLmUyMGMwZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmlmby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZmlmby5jCkBAIC0yNDMsNiArMjQzLDcgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OwogCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IG5vdXZlYXVfZ3B1b2JqICpyYW1mYyA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0OwogCiAJTlZfREVCVUcoZGV2LCAiY2glZFxuIiwgY2hhbi0+aWQpOwpAQCAtMjc4LDE5ICsyNzksMjEgQEAKIAkJCXJldHVybiByZXQ7CiAJfQogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CisKIAlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MoZGV2LCB0cnVlKTsKIAotCW52X3dvMzIoZGV2LCByYW1mYywgMHgwOC80LCBjaGFuLT5wdXNoYnVmX2Jhc2UpOwotCW52X3dvMzIoZGV2LCByYW1mYywgMHgxMC80LCBjaGFuLT5wdXNoYnVmX2Jhc2UpOwogCW52X3dvMzIoZGV2LCByYW1mYywgMHg0OC80LCBjaGFuLT5wdXNoYnVmLT5pbnN0YW5jZSA+PiA0KTsKIAludl93bzMyKGRldiwgcmFtZmMsIDB4ODAvNCwgKDB4YyA8PCAyNCkgfCAoY2hhbi0+cmFtaHQtPmluc3RhbmNlID4+IDQpKTsKLQludl93bzMyKGRldiwgcmFtZmMsIDB4M2MvNCwgMHgwMDA4NjA3OCk7CiAJbnZfd28zMihkZXYsIHJhbWZjLCAweDQ0LzQsIDB4MjEwMWZmZmYpOwogCW52X3dvMzIoZGV2LCByYW1mYywgMHg2MC80LCAweDdmZmZmZmZmKTsKIAludl93bzMyKGRldiwgcmFtZmMsIDB4NDAvNCwgMHgwMDAwMDAwMCk7CiAJbnZfd28zMihkZXYsIHJhbWZjLCAweDdjLzQsIDB4MzAwMDAwMDEpOwogCW52X3dvMzIoZGV2LCByYW1mYywgMHg3OC80LCAweDAwMDAwMDAwKTsKLQludl93bzMyKGRldiwgcmFtZmMsIDB4NGMvNCwgMHhmZmZmZmZmZik7CisJbnZfd28zMihkZXYsIHJhbWZjLCAweDNjLzQsIDB4NDAzZjYwNzgpOworCW52X3dvMzIoZGV2LCByYW1mYywgMHg1MC80LCBjaGFuLT5wdXNoYnVmX2Jhc2UgKworCQkJCSAgICBjaGFuLT5kbWEuaWJfYmFzZSAqIDQpOworCW52X3dvMzIoZGV2LCByYW1mYywgMHg1NC80LCBkcm1fb3JkZXIoY2hhbi0+ZG1hLmliX21heCArIDEpIDw8IDE2KTsKIAogCWlmICghSVNfRzgwKSB7CiAJCW52X3dvMzIoZGV2LCBjaGFuLT5yYW1pbi0+Z3B1b2JqLCAwLCBjaGFuLT5pZCk7CkBAIC0zMDYsMTAgKzMwOSwxMiBAQAogCXJldCA9IG52NTBfZmlmb19jaGFubmVsX2VuYWJsZShkZXYsIGNoYW4tPmlkLCBmYWxzZSk7CiAJaWYgKHJldCkgewogCQlOVl9FUlJPUihkZXYsICJlcnJvciBlbmFibGluZyBjaCVkOiAlZFxuIiwgY2hhbi0+aWQsIHJldCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CiAJCW5vdXZlYXVfZ3B1b2JqX3JlZl9kZWwoZGV2LCAmY2hhbi0+cmFtZmMpOwogCQlyZXR1cm4gcmV0OwogCX0KIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldl9wcml2LT5jb250ZXh0X3N3aXRjaF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JhcGguYwppbmRleCA2ZDUwNDgwLi44NTdhMDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9udjUwX2dyYXBoLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmFwaC5jCkBAIC0yOCwzMCArMjgsNyBAQAogI2luY2x1ZGUgImRybS5oIgogI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCiAKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjUwLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjUwLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjg0LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjg0LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjg2LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjg2LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjkyLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjkyLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjk0LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjk0LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjk2LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjk2LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjk4LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udjk4LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmEwLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmEwLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmE1LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmE1LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmE4LmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmE4LmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmFhLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmFhLmN0eHZhbHMiKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmFjLmN0eHByb2ciKTsKLU1PRFVMRV9GSVJNV0FSRSgibm91dmVhdS9udmFjLmN0eHZhbHMiKTsKKyNpbmNsdWRlICJub3V2ZWF1X2dyY3R4LmgiCiAKICNkZWZpbmUgSVNfRzgwICgoZGV2X3ByaXYtPmNoaXBzZXQgJiAweGYwKSA9PSAweDUwKQogCkBAIC0xMTEsOSArODgsMzQgQEAKIAogCU5WX0RFQlVHKGRldiwgIlxuIik7CiAKLQlub3V2ZWF1X2dyY3R4X3Byb2dfbG9hZChkZXYpOwotCWlmICghZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5jdHhwcm9nKQotCQlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmFjY2VsX2Jsb2NrZWQgPSB0cnVlOworCWlmIChub3V2ZWF1X2N0eGZ3KSB7CisJCW5vdXZlYXVfZ3JjdHhfcHJvZ19sb2FkKGRldik7CisJCWRldl9wcml2LT5lbmdpbmUuZ3JhcGguZ3JjdHhfc2l6ZSA9IDB4NzAwMDA7CisJfQorCWlmICghZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5jdHhwcm9nKSB7CisJCXN0cnVjdCBub3V2ZWF1X2dyY3R4IGN0eCA9IHt9OworCQl1aW50MzJfdCAqY3AgPSBrbWFsbG9jKDUxMiAqIDQsIEdGUF9LRVJORUwpOworCQlpbnQgaTsKKwkJaWYgKCFjcCkgeworCQkJTlZfRVJST1IoZGV2LCAiQ291bGRuJ3QgYWxsb2MgY3R4cHJvZyEgRGlzYWJsaW5nIGFjY2VsZXJhdGlvbi5cbiIpOworCQkJZGV2X3ByaXYtPmVuZ2luZS5ncmFwaC5hY2NlbF9ibG9ja2VkID0gdHJ1ZTsKKwkJCXJldHVybiAwOworCQl9CisJCWN0eC5kZXYgPSBkZXY7CisJCWN0eC5tb2RlID0gTk9VVkVBVV9HUkNUWF9QUk9HOworCQljdHguZGF0YSA9IGNwOworCQljdHguY3R4cHJvZ19tYXggPSA1MTI7CisJCWlmICghbnY1MF9ncmN0eF9pbml0KCZjdHgpKSB7CisJCQlkZXZfcHJpdi0+ZW5naW5lLmdyYXBoLmdyY3R4X3NpemUgPSBjdHguY3R4dmFsc19wb3MgKiA0OworCisJCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfQ1RYQ1RMX1VDT0RFX0lOREVYLCAwKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBjdHguY3R4cHJvZ19sZW47IGkrKykKKwkJCQludl93cjMyKGRldiwgTlY0MF9QR1JBUEhfQ1RYQ1RMX1VDT0RFX0RBVEEsIGNwW2ldKTsKKwkJfSBlbHNlIHsKKwkJCWRldl9wcml2LT5lbmdpbmUuZ3JhcGguYWNjZWxfYmxvY2tlZCA9IHRydWU7CisJCX0KKwkJa2ZyZWUoY3ApOworCX0KIAogCW52X3dyMzIoZGV2LCAweDQwMDMyMCwgNCk7CiAJbnZfd3IzMihkZXYsIE5WNDBfUEdSQVBIX0NUWENUTF9DVVIsIDApOwpAQCAtMTkzLDEzICsxOTUsMTMgQEAKIAlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqcmFtaW4gPSBjaGFuLT5yYW1pbi0+Z3B1b2JqOwogCXN0cnVjdCBub3V2ZWF1X2dwdW9iaiAqY3R4OwotCXVpbnQzMl90IGdyY3R4X3NpemUgPSAweDcwMDAwOworCXN0cnVjdCBub3V2ZWF1X3BncmFwaF9lbmdpbmUgKnBncmFwaCA9ICZkZXZfcHJpdi0+ZW5naW5lLmdyYXBoOwogCWludCBoZHIsIHJldDsKIAogCU5WX0RFQlVHKGRldiwgImNoJWRcbiIsIGNoYW4tPmlkKTsKIAotCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ld19yZWYoZGV2LCBjaGFuLCBOVUxMLCAwLCBncmN0eF9zaXplLCAweDEwMDAsCi0JCQkJICAgICBOVk9CSl9GTEFHX1pFUk9fQUxMT0MgfAorCXJldCA9IG5vdXZlYXVfZ3B1b2JqX25ld19yZWYoZGV2LCBjaGFuLCBOVUxMLCAwLCBwZ3JhcGgtPmdyY3R4X3NpemUsCisJCQkJICAgICAweDEwMDAsIE5WT0JKX0ZMQUdfWkVST19BTExPQyB8CiAJCQkJICAgICBOVk9CSl9GTEFHX1pFUk9fRlJFRSwgJmNoYW4tPnJhbWluX2dyY3R4KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMjA5LDcgKzIxMSw3IEBACiAJZGV2X3ByaXYtPmVuZ2luZS5pbnN0bWVtLnByZXBhcmVfYWNjZXNzKGRldiwgdHJ1ZSk7CiAJbnZfd28zMihkZXYsIHJhbWluLCAoaGRyICsgMHgwMCkvNCwgMHgwMDE5MDAwMik7CiAJbnZfd28zMihkZXYsIHJhbWluLCAoaGRyICsgMHgwNCkvNCwgY2hhbi0+cmFtaW5fZ3JjdHgtPmluc3RhbmNlICsKLQkJCQkJICAgZ3JjdHhfc2l6ZSAtIDEpOworCQkJCQkgICBwZ3JhcGgtPmdyY3R4X3NpemUgLSAxKTsKIAludl93bzMyKGRldiwgcmFtaW4sIChoZHIgKyAweDA4KS80LCBjaGFuLT5yYW1pbl9ncmN0eC0+aW5zdGFuY2UpOwogCW52X3dvMzIoZGV2LCByYW1pbiwgKGhkciArIDB4MGMpLzQsIDApOwogCW52X3dvMzIoZGV2LCByYW1pbiwgKGhkciArIDB4MTApLzQsIDApOwpAQCAtMjE3LDcgKzIxOSwxNSBAQAogCWRldl9wcml2LT5lbmdpbmUuaW5zdG1lbS5maW5pc2hfYWNjZXNzKGRldik7CiAKIAlkZXZfcHJpdi0+ZW5naW5lLmluc3RtZW0ucHJlcGFyZV9hY2Nlc3MoZGV2LCB0cnVlKTsKLQlub3V2ZWF1X2dyY3R4X3ZhbHNfbG9hZChkZXYsIGN0eCk7CisJaWYgKCFwZ3JhcGgtPmN0eHByb2cpIHsKKwkJc3RydWN0IG5vdXZlYXVfZ3JjdHggY3R4ID0ge307CisJCWN0eC5kZXYgPSBjaGFuLT5kZXY7CisJCWN0eC5tb2RlID0gTk9VVkVBVV9HUkNUWF9WQUxTOworCQljdHguZGF0YSA9IGNoYW4tPnJhbWluX2dyY3R4LT5ncHVvYmo7CisJCW52NTBfZ3JjdHhfaW5pdCgmY3R4KTsKKwl9IGVsc2UgeworCQlub3V2ZWF1X2dyY3R4X3ZhbHNfbG9hZChkZXYsIGN0eCk7CisJfQogCW52X3dvMzIoZGV2LCBjdHgsIDB4MDAwMDAvNCwgY2hhbi0+cmFtaW4tPmluc3RhbmNlID4+IDEyKTsKIAlpZiAoKGRldl9wcml2LT5jaGlwc2V0ICYgMHhmMCkgPT0gMHhhMCkKIAkJbnZfd28zMihkZXYsIGN0eCwgMHgwMDAwNC80LCAweDAwMDAwMDAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JjdHguYyBiL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfZ3JjdHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTA1ZmNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9ncmN0eC5jCkBAIC0wLDAgKzEsMjM2NyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA5IE1hcmNpbiBLb8WbY2llbG5pY2tpCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2RlZmluZSBDUF9GTEFHX0NMRUFSICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENQX0ZMQUdfU0VUICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19TV0FQX0RJUkVDVElPTiAgICAgICAgKCgwICogMzIpICsgMCkKKyNkZWZpbmUgQ1BfRkxBR19TV0FQX0RJUkVDVElPTl9MT0FEICAgMAorI2RlZmluZSBDUF9GTEFHX1NXQVBfRElSRUNUSU9OX1NBVkUgICAxCisjZGVmaW5lIENQX0ZMQUdfVU5LMDEgICAgICAgICAgICAgICAgICgoMCAqIDMyKSArIDEpCisjZGVmaW5lIENQX0ZMQUdfVU5LMDFfQ0xFQVIgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BfRkxBR19VTkswMV9TRVQgICAgICAgICAgICAgMQorI2RlZmluZSBDUF9GTEFHX1VOSzAzICAgICAgICAgICAgICAgICAoKDAgKiAzMikgKyAzKQorI2RlZmluZSBDUF9GTEFHX1VOSzAzX0NMRUFSICAgICAgICAgICAwCisjZGVmaW5lIENQX0ZMQUdfVU5LMDNfU0VUICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19VU0VSX1NBVkUgICAgICAgICAgICAgKCgwICogMzIpICsgNSkKKyNkZWZpbmUgQ1BfRkxBR19VU0VSX1NBVkVfTk9UX1BFTkRJTkcgMAorI2RlZmluZSBDUF9GTEFHX1VTRVJfU0FWRV9QRU5ESU5HICAgICAxCisjZGVmaW5lIENQX0ZMQUdfVVNFUl9MT0FEICAgICAgICAgICAgICgoMCAqIDMyKSArIDYpCisjZGVmaW5lIENQX0ZMQUdfVVNFUl9MT0FEX05PVF9QRU5ESU5HIDAKKyNkZWZpbmUgQ1BfRkxBR19VU0VSX0xPQURfUEVORElORyAgICAgMQorI2RlZmluZSBDUF9GTEFHX1VOSzBCICAgICAgICAgICAgICAgICAoKDAgKiAzMikgKyAweGIpCisjZGVmaW5lIENQX0ZMQUdfVU5LMEJfQ0xFQVIgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BfRkxBR19VTkswQl9TRVQgICAgICAgICAgICAgMQorI2RlZmluZSBDUF9GTEFHX1VOSzFEICAgICAgICAgICAgICAgICAoKDAgKiAzMikgKyAweDFkKQorI2RlZmluZSBDUF9GTEFHX1VOSzFEX0NMRUFSICAgICAgICAgICAwCisjZGVmaW5lIENQX0ZMQUdfVU5LMURfU0VUICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19VTksyMCAgICAgICAgICAgICAgICAgKCgxICogMzIpICsgMCkKKyNkZWZpbmUgQ1BfRkxBR19VTksyMF9DTEVBUiAgICAgICAgICAgMAorI2RlZmluZSBDUF9GTEFHX1VOSzIwX1NFVCAgICAgICAgICAgICAxCisjZGVmaW5lIENQX0ZMQUdfU1RBVFVTICAgICAgICAgICAgICAgICgoMiAqIDMyKSArIDApCisjZGVmaW5lIENQX0ZMQUdfU1RBVFVTX0JVU1kgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BfRkxBR19TVEFUVVNfSURMRSAgICAgICAgICAgMQorI2RlZmluZSBDUF9GTEFHX0FVVE9fU0FWRSAgICAgICAgICAgICAoKDIgKiAzMikgKyA0KQorI2RlZmluZSBDUF9GTEFHX0FVVE9fU0FWRV9OT1RfUEVORElORyAwCisjZGVmaW5lIENQX0ZMQUdfQVVUT19TQVZFX1BFTkRJTkcgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19BVVRPX0xPQUQgICAgICAgICAgICAgKCgyICogMzIpICsgNSkKKyNkZWZpbmUgQ1BfRkxBR19BVVRPX0xPQURfTk9UX1BFTkRJTkcgMAorI2RlZmluZSBDUF9GTEFHX0FVVE9fTE9BRF9QRU5ESU5HICAgICAxCisjZGVmaW5lIENQX0ZMQUdfWEZFUiAgICAgICAgICAgICAgICAgICgoMiAqIDMyKSArIDExKQorI2RlZmluZSBDUF9GTEFHX1hGRVJfSURMRSAgICAgICAgICAgICAwCisjZGVmaW5lIENQX0ZMQUdfWEZFUl9CVVNZICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ1BfRkxBR19ORVdDVFggICAgICAgICAgICAgICAgKCgyICogMzIpICsgMTIpCisjZGVmaW5lIENQX0ZMQUdfTkVXQ1RYX0JVU1kgICAgICAgICAgIDAKKyNkZWZpbmUgQ1BfRkxBR19ORVdDVFhfRE9ORSAgICAgICAgICAgMQorI2RlZmluZSBDUF9GTEFHX0FMV0FZUyAgICAgICAgICAgICAgICAoKDIgKiAzMikgKyAxMykKKyNkZWZpbmUgQ1BfRkxBR19BTFdBWVNfRkFMU0UgICAgICAgICAgMAorI2RlZmluZSBDUF9GTEFHX0FMV0FZU19UUlVFICAgICAgICAgICAxCisKKyNkZWZpbmUgQ1BfQ1RYICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDAKKyNkZWZpbmUgQ1BfQ1RYX0NPVU5UICAgICAgICAgICAgIDB4MDAwZjAwMDAKKyNkZWZpbmUgQ1BfQ1RYX0NPVU5UX1NISUZUICAgICAgICAgICAgICAgMTYKKyNkZWZpbmUgQ1BfQ1RYX1JFRyAgICAgICAgICAgICAgIDB4MDAwMDNmZmYKKyNkZWZpbmUgQ1BfTE9BRF9TUiAgICAgICAgICAgICAgIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ1BfTE9BRF9TUl9WQUxVRSAgICAgICAgIDB4MDAwZmZmZmYKKyNkZWZpbmUgQ1BfQlJBICAgICAgICAgICAgICAgICAgIDB4MDA0MDAwMDAKKyNkZWZpbmUgQ1BfQlJBX0lQICAgICAgICAgICAgICAgIDB4MDAwMWZmMDAKKyNkZWZpbmUgQ1BfQlJBX0lQX1NISUZUICAgICAgICAgICAgICAgICAgIDgKKyNkZWZpbmUgQ1BfQlJBX0lGX0NMRUFSICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BfQlJBX0ZMQUcgICAgICAgICAgICAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgQ1BfV0FJVCAgICAgICAgICAgICAgICAgIDB4MDA1MDAwMDAKKyNkZWZpbmUgQ1BfV0FJVF9TRVQgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BfV0FJVF9GTEFHICAgICAgICAgICAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgQ1BfU0VUICAgICAgICAgICAgICAgICAgIDB4MDA3MDAwMDAKKyNkZWZpbmUgQ1BfU0VUXzEgICAgICAgICAgICAgICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgQ1BfU0VUX0ZMQUcgICAgICAgICAgICAgIDB4MDAwMDAwN2YKKyNkZWZpbmUgQ1BfTkVXQ1RYICAgICAgICAgICAgICAgIDB4MDA2MDAwMDQKKyNkZWZpbmUgQ1BfTkVYVF9UT19TV0FQICAgICAgICAgIDB4MDA2MDAwMDUKKyNkZWZpbmUgQ1BfU0VUX0NPTlRFWFRfUE9JTlRFUiAgIDB4MDA2MDAwMDYKKyNkZWZpbmUgQ1BfU0VUX1hGRVJfUE9JTlRFUiAgICAgIDB4MDA2MDAwMDcKKyNkZWZpbmUgQ1BfRU5BQkxFICAgICAgICAgICAgICAgIDB4MDA2MDAwMDkKKyNkZWZpbmUgQ1BfRU5EICAgICAgICAgICAgICAgICAgIDB4MDA2MDAwMGMKKyNkZWZpbmUgQ1BfTkVYVF9UT19DVVJSRU5UICAgICAgIDB4MDA2MDAwMGQKKyNkZWZpbmUgQ1BfRElTQUJMRTEgICAgICAgICAgICAgIDB4MDA5MGZmZmYKKyNkZWZpbmUgQ1BfRElTQUJMRTIgICAgICAgICAgICAgIDB4MDA5MWZmZmYKKyNkZWZpbmUgQ1BfWEZFUl8xICAgICAgMHgwMDgwMDBmZgorI2RlZmluZSBDUF9YRkVSXzIgICAgICAweDAwODgwMGZmCisjZGVmaW5lIENQX1NFRUtfMSAgICAgIDB4MDBjMDAwZmYKKyNkZWZpbmUgQ1BfU0VFS18yICAgICAgMHgwMGM4MDBmZgorCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgIm5vdXZlYXVfZHJ2LmgiCisjaW5jbHVkZSAibm91dmVhdV9ncmN0eC5oIgorCisvKgorICogVGhpcyBjb2RlIGRlYWxzIHdpdGggUEdSQVBIIGNvbnRleHRzIG9uIE5WNTAgZmFtaWx5IGNhcmRzLiBMaWtlIE5WNDAsIGl0J3MKKyAqIHRoZSBHUFUgaXRzZWxmIHRoYXQgZG9lcyBjb250ZXh0LXN3aXRjaGluZywgYnV0IGl0IG5lZWRzIGEgc3BlY2lhbAorICogbWljcm9jb2RlIHRvIGRvIGl0LiBBbmQgaXQncyB0aGUgZHJpdmVyJ3MgdGFzayB0byBzdXBwbHkgdGhpcyBtaWNyb2NvZGUsCisgKiBmdXJ0aGVyIGtub3duIGFzIGN0eHByb2csIGFzIHdlbGwgYXMgdGhlIGluaXRpYWwgY29udGV4dCB2YWx1ZXMsIGtub3duCisgKiBhcyBjdHh2YWxzLgorICoKKyAqIFdpdGhvdXQgY3R4cHJvZywgeW91IGNhbm5vdCBzd2l0Y2ggY29udGV4dHMuIE5vdCBldmVuIGluIHNvZnR3YXJlLCBzaW5jZQorICogdGhlIG1ham9yaXR5IG9mIGNvbnRleHQgW3hmZXIgc3RyYW5kc10gaXNuJ3QgYWNjZXNzaWJsZSBkaXJlY3RseS4gWW91J3JlCisgKiBzdHVjayB3aXRoIGEgc2luZ2xlIGNoYW5uZWwsIGFuZCB5b3UgYWxzbyBzdWZmZXIgYWxsIHRoZSBwcm9ibGVtcyByZXN1bHRpbmcKKyAqIGZyb20gbWlzc2luZyBjdHh2YWxzLCBzaW5jZSB5b3UgY2Fubm90IGxvYWQgdGhlbS4KKyAqCisgKiBXaXRob3V0IGN0eHZhbHMsIHlvdSdyZSBzdHVjayB3aXRoIFBHUkFQSCdzIGRlZmF1bHQgY29udGV4dC4gSXQncyBlbm91Z2ggdG8KKyAqIHJ1biAyZCBvcGVyYXRpb25zLCBidXQgdHJ5aW5nIHRvIHV0aWxpc2UgM2Qgb3IgQ1VEQSB3aWxsIGp1c3QgbG9jayB5b3UgdXAsCisgKiBzaW5jZSB5b3UgZG9uJ3QgaGF2ZS4uLiBzb21lIHNvcnQgb2YgbmVlZGVkIHNldHVwLgorICoKKyAqIE5vdXZlYXUgd2lsbCBqdXN0IGRpc2FibGUgYWNjZWxlcmF0aW9uIGlmIG5vdCBnaXZlbiBjdHhwcm9nICsgY3R4dmFscywgc2luY2UKKyAqIGl0J3MgdG9vIG11Y2ggaGFzc2xlIHRvIGhhbmRsZSBuby1jdHhwcm9nIGFzIGEgc3BlY2lhbCBjYXNlLgorICovCisKKy8qCisgKiBIb3cgY3R4cHJvZ3Mgd29yay4KKyAqCisgKiBUaGUgY3R4cHJvZyBpcyB3cml0dGVuIGluIGl0cyBvd24ga2luZCBvZiBtaWNyb2NvZGUsIHdpdGggdmVyeSBzbWFsbCBhbmQKKyAqIGNyYXBweSBzZXQgb2YgYXZhaWxhYmxlIGNvbW1hbmRzLiBZb3UgdXBsb2FkIGl0IHRvIGEgc21hbGwgWzUxMiBpbnNuc10KKyAqIGFyZWEgb2YgbWVtb3J5IG9uIFBHUkFQSCwgYW5kIGl0J2xsIGJlIHJ1biB3aGVuIFBGSUZPIHdhbnRzIFBHUkFQSCB0bworICogc3dpdGNoIGNoYW5uZWwuIG9yIHdoZW4gdGhlIGRyaXZlciBleHBsaWNpdGVseSByZXF1ZXN0cyBpdC4gU3R1ZmYgdmlzaWJsZQorICogdG8gY3R4cHJvZyBjb25zaXN0cyBvZjogUEdSQVBIIE1NSU8gcmVnaXN0ZXJzLCBQR1JBUEggY29udGV4dCBzdHJhbmRzLAorICogdGhlIHBlci1jaGFubmVsIGNvbnRleHQgc2F2ZSBhcmVhIGluIFZSQU0gW2tub3duIGFzIGN0eHZhbHMgb3IgZ3JjdHhdLAorICogNCBmbGFncyByZWdpc3RlcnMsIGEgc2NyYXRjaCByZWdpc3RlciwgdHdvIGdyY3R4IHBvaW50ZXJzLCBwbHVzIG1hbnkKKyAqIHJhbmRvbSBwb29ybHktdW5kZXJzdG9vZCBkZXRhaWxzLgorICoKKyAqIFdoZW4gY3R4cHJvZyBydW5zLCBpdCdzIHN1cHBvc2VkIHRvIGNoZWNrIHdoYXQgb3BlcmF0aW9ucyBhcmUgYXNrZWQgb2YgaXQsCisgKiBzYXZlIG9sZCBjb250ZXh0IGlmIHJlcXVlc3RlZCwgb3B0aW9uYWxseSByZXNldCBQR1JBUEggYW5kIHN3aXRjaCB0byB0aGUKKyAqIG5ldyBjaGFubmVsLCBhbmQgbG9hZCB0aGUgbmV3IGNvbnRleHQuIENvbnRleHQgY29uc2lzdHMgb2YgdGhyZWUgbWFqb3IKKyAqIHBhcnRzOiBzdWJzZXQgb2YgTU1JTyByZWdpc3RlcnMgYW5kIHR3byAieGZlciBhcmVhcyIuCisgKi8KKworLyogVE9ETzoKKyAqICAtIGRvY3VtZW50IHVuaW1wbGVtZW50ZWQgYml0cyBjb21wYXJlZCB0byBudmlkaWEKKyAqICAtIE5WQXg6IG1ha2UgYSBUUCBzdWJyb3V0aW5lLCB1c2UgaXQuCisgKiAgLSB1c2UgMHg0MDA4ZmMgaW5zdGVhZCBvZiAweDE1NDA/CisgKi8KKworZW51bSBjcF9sYWJlbCB7CisJY3BfY2hlY2tfbG9hZCA9IDEsCisJY3Bfc2V0dXBfYXV0b19sb2FkLAorCWNwX3NldHVwX2xvYWQsCisJY3Bfc2V0dXBfc2F2ZSwKKwljcF9zd2FwX3N0YXRlLAorCWNwX3ByZXBhcmVfZXhpdCwKKwljcF9leGl0LAorfTsKKworc3RhdGljIHZvaWQgbnY1MF9ncmFwaF9jb25zdHJ1Y3RfbW1pbyhzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4KTsKK3N0YXRpYyB2b2lkIG52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXIxKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpOworc3RhdGljIHZvaWQgbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcjIoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CisKKy8qIE1haW4gZnVuY3Rpb246IGNvbnN0cnVjdCB0aGUgY3R4cHJvZyBza2VsZXRvbiwgY2FsbCB0aGUgb3RoZXIgZnVuY3Rpb25zLiAqLworCitpbnQKK252NTBfZ3JjdHhfaW5pdChzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGN0eC0+ZGV2LT5kZXZfcHJpdmF0ZTsKKworCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIDB4NTA6CisJY2FzZSAweDg0OgorCWNhc2UgMHg4NjoKKwljYXNlIDB4OTI6CisJY2FzZSAweDk0OgorCWNhc2UgMHg5NjoKKwljYXNlIDB4OTg6CisJY2FzZSAweGEwOgorCWNhc2UgMHhhNToKKwljYXNlIDB4YTg6CisJY2FzZSAweGFhOgorCWNhc2UgMHhhYzoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJTlZfRVJST1IoY3R4LT5kZXYsICJJIGRvbid0IGtub3cgaG93IHRvIG1ha2UgYSBjdHhwcm9nIGZvciAiCisJCQkJICAgInlvdXIgTlYleCBjYXJkLlxuIiwgZGV2X3ByaXYtPmNoaXBzZXQpOworCQlOVl9FUlJPUihjdHgtPmRldiwgIkRpc2FibGluZyBhY2NlbGVyYXRpb24uIFBsZWFzZSBjb250YWN0ICIKKwkJCQkgICAidGhlIGRldnMuXG4iKTsKKwkJcmV0dXJuIC1FTk9TWVM7CisJfQorCS8qIGRlY2lkZSB3aGV0aGVyIHdlJ3JlIGxvYWRpbmcvdW5sb2FkaW5nIHRoZSBjb250ZXh0ICovCisJY3BfYnJhIChjdHgsIEFVVE9fU0FWRSwgUEVORElORywgY3Bfc2V0dXBfc2F2ZSk7CisJY3BfYnJhIChjdHgsIFVTRVJfU0FWRSwgUEVORElORywgY3Bfc2V0dXBfc2F2ZSk7CisKKwljcF9uYW1lKGN0eCwgY3BfY2hlY2tfbG9hZCk7CisJY3BfYnJhIChjdHgsIEFVVE9fTE9BRCwgUEVORElORywgY3Bfc2V0dXBfYXV0b19sb2FkKTsKKwljcF9icmEgKGN0eCwgVVNFUl9MT0FELCBQRU5ESU5HLCBjcF9zZXR1cF9sb2FkKTsKKwljcF9icmEgKGN0eCwgQUxXQVlTLCBUUlVFLCBjcF9leGl0KTsKKworCS8qIHNldHVwIGZvciBjb250ZXh0IGxvYWQgKi8KKwljcF9uYW1lKGN0eCwgY3Bfc2V0dXBfYXV0b19sb2FkKTsKKwljcF9vdXQgKGN0eCwgQ1BfRElTQUJMRTEpOworCWNwX291dCAoY3R4LCBDUF9ESVNBQkxFMik7CisJY3Bfb3V0IChjdHgsIENQX0VOQUJMRSk7CisJY3Bfb3V0IChjdHgsIENQX05FWFRfVE9fU1dBUCk7CisJY3Bfc2V0IChjdHgsIFVOSzAxLCBTRVQpOworCWNwX25hbWUoY3R4LCBjcF9zZXR1cF9sb2FkKTsKKwljcF9vdXQgKGN0eCwgQ1BfTkVXQ1RYKTsKKwljcF93YWl0KGN0eCwgTkVXQ1RYLCBCVVNZKTsKKwljcF9zZXQgKGN0eCwgVU5LMUQsIENMRUFSKTsKKwljcF9zZXQgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIExPQUQpOworCWNwX2JyYSAoY3R4LCBVTkswQiwgU0VULCBjcF9wcmVwYXJlX2V4aXQpOworCWNwX2JyYSAoY3R4LCBBTFdBWVMsIFRSVUUsIGNwX3N3YXBfc3RhdGUpOworCisJLyogc2V0dXAgZm9yIGNvbnRleHQgc2F2ZSAqLworCWNwX25hbWUoY3R4LCBjcF9zZXR1cF9zYXZlKTsKKwljcF9zZXQgKGN0eCwgVU5LMUQsIFNFVCk7CisJY3Bfd2FpdChjdHgsIFNUQVRVUywgQlVTWSk7CisJY3Bfc2V0IChjdHgsIFVOSzAxLCBTRVQpOworCWNwX3NldCAoY3R4LCBTV0FQX0RJUkVDVElPTiwgU0FWRSk7CisKKwkvKiBnZW5lcmFsIFBHUkFQSCBzdGF0ZSAqLworCWNwX25hbWUoY3R4LCBjcF9zd2FwX3N0YXRlKTsKKwljcF9zZXQgKGN0eCwgVU5LMDMsIFNFVCk7CisJY3BfcG9zIChjdHgsIDB4MDAwMDQvNCk7CisJY3BfY3R4IChjdHgsIDB4NDAwODI4LCAxKTsgLyogbmVlZGVkLiBvdGhlcndpc2UsIGZsaWNrZXJpbmcgaGFwcGVucy4gKi8KKwljcF9wb3MgKGN0eCwgMHgwMDEwMC80KTsKKwludjUwX2dyYXBoX2NvbnN0cnVjdF9tbWlvKGN0eCk7CisJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcjEoY3R4KTsKKwludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyMihjdHgpOworCisJY3BfYnJhIChjdHgsIFNXQVBfRElSRUNUSU9OLCBTQVZFLCBjcF9jaGVja19sb2FkKTsKKworCWNwX3NldCAoY3R4LCBVTksyMCwgU0VUKTsKKwljcF9zZXQgKGN0eCwgU1dBUF9ESVJFQ1RJT04sIFNBVkUpOyAvKiBubyBpZGVhIHdoeSB0aGlzIGlzIG5lZWRlZCwgYnV0IGZpeGVzIGF0IGxlYXN0IG9uZSBsb2NrdXAuICovCisJY3BfbHNyIChjdHgsIGN0eC0+Y3R4dmFsc19iYXNlKTsKKwljcF9vdXQgKGN0eCwgQ1BfU0VUX1hGRVJfUE9JTlRFUik7CisJY3BfbHNyIChjdHgsIDQpOworCWNwX291dCAoY3R4LCBDUF9TRUVLXzEpOworCWNwX291dCAoY3R4LCBDUF9YRkVSXzEpOworCWNwX3dhaXQoY3R4LCBYRkVSLCBCVVNZKTsKKworCS8qIHByZS1leGl0IHN0YXRlIHVwZGF0ZXMgKi8KKwljcF9uYW1lKGN0eCwgY3BfcHJlcGFyZV9leGl0KTsKKwljcF9zZXQgKGN0eCwgVU5LMDEsIENMRUFSKTsKKwljcF9zZXQgKGN0eCwgVU5LMDMsIENMRUFSKTsKKwljcF9zZXQgKGN0eCwgVU5LMUQsIENMRUFSKTsKKworCWNwX2JyYSAoY3R4LCBVU0VSX1NBVkUsIFBFTkRJTkcsIGNwX2V4aXQpOworCWNwX291dCAoY3R4LCBDUF9ORVhUX1RPX0NVUlJFTlQpOworCisJY3BfbmFtZShjdHgsIGNwX2V4aXQpOworCWNwX3NldCAoY3R4LCBVU0VSX1NBVkUsIE5PVF9QRU5ESU5HKTsKKwljcF9zZXQgKGN0eCwgVVNFUl9MT0FELCBOT1RfUEVORElORyk7CisJY3Bfb3V0IChjdHgsIENQX0VORCk7CisJY3R4LT5jdHh2YWxzX3BvcyArPSAweDQwMDsgLyogcGFkZGluZy4uLiBubyBpZGVhIHdoeSB5b3UgbmVlZCBpdCAqLworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDb25zdHJ1Y3RzIE1NSU8gcGFydCBvZiBjdHhwcm9nIGFuZCBjdHh2YWxzLiBKdXN0IGEgbWF0dGVyIG9mIGtub3dpbmcgd2hpY2gKKyAqIHJlZ2lzdGVycyB0byBzYXZlL3Jlc3RvcmUgYW5kIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlbS4KKyAqLworCitzdGF0aWMgdm9pZAorbnY1MF9ncmFwaF9jb25zdHJ1Y3RfbW1pbyhzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGN0eC0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgaSwgajsKKwlpbnQgb2Zmc2V0LCBiYXNlOworCXVpbnQzMl90IHVuaXRzID0gbnZfcmQzMiAoY3R4LT5kZXYsIDB4MTU0MCk7CisKKwkvKiAwODAwICovCisJY3BfY3R4KGN0eCwgMHg0MDA4MDgsIDcpOworCWdyX2RlZihjdHgsIDB4NDAwODE0LCAweDAwMDAwMDMwKTsKKwljcF9jdHgoY3R4LCAweDQwMDgzNCwgMHgzMik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApIHsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4MzQsIDB4ZmY0MDAwNDApOworCQlncl9kZWYoY3R4LCAweDQwMDgzOCwgMHhmZmYwMDA4MCk7CisJCWdyX2RlZihjdHgsIDB4NDAwODNjLCAweGZmZjcwMDkwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDA4NDAsIDB4ZmZlODA2YTgpOworCX0KKwlncl9kZWYoY3R4LCAweDQwMDg0NCwgMHgwMDAwMDAwMik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpCisJCWdyX2RlZihjdHgsIDB4NDAwODk0LCAweDAwMDAxMDAwKTsKKwlncl9kZWYoY3R4LCAweDQwMDhlOCwgMHgwMDAwMDAwMyk7CisJZ3JfZGVmKGN0eCwgMHg0MDA4ZWMsIDB4MDAwMDEwMDApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQljcF9jdHgoY3R4LCAweDQwMDkwOCwgMHhiKTsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCWNwX2N0eChjdHgsIDB4NDAwOTA4LCAweGMpOworCWVsc2UKKwkJY3BfY3R4KGN0eCwgMHg0MDA5MDgsIDB4ZSk7CisKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkKKwkJY3BfY3R4KGN0eCwgMHg0MDBiMDAsIDB4MSk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDBiMTAsIDB4MSk7CisJCWdyX2RlZihjdHgsIDB4NDAwYjEwLCAweDAwMDE2MjlkKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDBiMjAsIDB4MSk7CisJCWdyX2RlZihjdHgsIDB4NDAwYjIwLCAweDAwMDE2MjlkKTsKKwl9CisKKwkvKiAwQzAwICovCisJY3BfY3R4KGN0eCwgMHg0MDBjMDgsIDB4Mik7CisJZ3JfZGVmKGN0eCwgMHg0MDBjMDgsIDB4MDAwMGZlMGMpOworCisJLyogMTAwMCAqLworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDEwMDgsIDB4NCk7CisJCWdyX2RlZihjdHgsIDB4NDAxMDE0LCAweDAwMDAxMDAwKTsKKwl9IGVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTAgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhYSkgeworCQljcF9jdHgoY3R4LCAweDQwMTAwOCwgMHg1KTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDEwMTgsIDB4MDAwMDEwMDApOworCX0gZWxzZSB7CisJCWNwX2N0eChjdHgsIDB4NDAxMDA4LCAweDUpOworCQlncl9kZWYoY3R4LCAweDQwMTAxOCwgMHgwMDAwNDAwMCk7CisJfQorCisJLyogMTQwMCAqLworCWNwX2N0eChjdHgsIDB4NDAxNDAwLCAweDgpOworCWNwX2N0eChjdHgsIDB4NDAxNDI0LCAweDMpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQlncl9kZWYoY3R4LCAweDQwMTQyYywgMHgwMDAxZmQ4Nyk7CisJZWxzZQorCQlncl9kZWYoY3R4LCAweDQwMTQyYywgMHgwMDAwMDE4Nyk7CisJY3BfY3R4KGN0eCwgMHg0MDE1NDAsIDB4NSk7CisJZ3JfZGVmKGN0eCwgMHg0MDE1NTAsIDB4MDAwMDEwMTgpOworCisJLyogMTgwMCAqLworCWNwX2N0eChjdHgsIDB4NDAxODE0LCAweDEpOworCWdyX2RlZihjdHgsIDB4NDAxODE0LCAweDAwMDAwMGZmKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkgeworCQljcF9jdHgoY3R4LCAweDQwMTgxYywgMHhlKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDE4NTAsIDB4MDAwMDAwMDQpOworCX0gZWxzZSBpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweGEwKSB7CisJCWNwX2N0eChjdHgsIDB4NDAxODFjLCAweGYpOworCQlncl9kZWYoY3R4LCAweDQwMTg1NCwgMHgwMDAwMDAwNCk7CisJfSBlbHNlIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDE4MWMsIDB4MTMpOworCQlncl9kZWYoY3R4LCAweDQwMTg2NCwgMHgwMDAwMDAwNCk7CisJfQorCisJLyogMUMwMCAqLworCWNwX2N0eChjdHgsIDB4NDAxYzAwLCAweDEpOworCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwljYXNlIDB4NTA6CisJCWdyX2RlZihjdHgsIDB4NDAxYzAwLCAweDAwMDEwMDVmKTsKKwkJYnJlYWs7CisJY2FzZSAweDg0OgorCWNhc2UgMHg4NjoKKwljYXNlIDB4OTQ6CisJCWdyX2RlZihjdHgsIDB4NDAxYzAwLCAweDA0NGQwMGRmKTsKKwkJYnJlYWs7CisJY2FzZSAweDkyOgorCWNhc2UgMHg5NjoKKwljYXNlIDB4OTg6CisJY2FzZSAweGEwOgorCWNhc2UgMHhhYToKKwljYXNlIDB4YWM6CisJCWdyX2RlZihjdHgsIDB4NDAxYzAwLCAweDA0MjUwMGRmKTsKKwkJYnJlYWs7CisJY2FzZSAweGE1OgorCWNhc2UgMHhhODoKKwkJZ3JfZGVmKGN0eCwgMHg0MDFjMDAsIDB4MTQyNTAwZGYpOworCQlicmVhazsKKwl9CisKKwkvKiAyNDAwICovCisJY3BfY3R4KGN0eCwgMHg0MDI0MDAsIDB4MSk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCWNwX2N0eChjdHgsIDB4NDAyNDA4LCAweDEpOworCWVsc2UKKwkJY3BfY3R4KGN0eCwgMHg0MDI0MDgsIDB4Mik7CisJZ3JfZGVmKGN0eCwgMHg0MDI0MDgsIDB4MDAwMDA2MDApOworCisJLyogMjgwMCAqLworCWNwX2N0eChjdHgsIDB4NDAyODAwLCAweDEpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQlncl9kZWYoY3R4LCAweDQwMjgwMCwgMHgwMDAwMDAwNik7CisKKwkvKiAyQzAwICovCisJY3BfY3R4KGN0eCwgMHg0MDJjMDgsIDB4Nik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NTApCisJCWdyX2RlZihjdHgsIDB4NDAyYzE0LCAweDAxMDAwMDAwKTsKKwlncl9kZWYoY3R4LCAweDQwMmMxOCwgMHgwMDAwMDBmZik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCWNwX2N0eChjdHgsIDB4NDAyY2EwLCAweDEpOworCWVsc2UKKwkJY3BfY3R4KGN0eCwgMHg0MDJjYTAsIDB4Mik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJZ3JfZGVmKGN0eCwgMHg0MDJjYTAsIDB4MDAwMDA0MDApOworCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTAgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhYSkKKwkJZ3JfZGVmKGN0eCwgMHg0MDJjYTAsIDB4MDAwMDA4MDApOworCWVsc2UKKwkJZ3JfZGVmKGN0eCwgMHg0MDJjYTAsIDB4MDAwMDA0MDApOworCWNwX2N0eChjdHgsIDB4NDAyY2FjLCAweDQpOworCisJLyogMzAwMCAqLworCWNwX2N0eChjdHgsIDB4NDAzMDA0LCAweDEpOworCWdyX2RlZihjdHgsIDB4NDAzMDA0LCAweDAwMDAwMDAxKTsKKworCS8qIDM0MDQgKi8KKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkgeworCQljcF9jdHgoY3R4LCAweDQwMzQwNCwgMHgxKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDM0MDQsIDB4MDAwMDAwMDEpOworCX0KKworCS8qIDUwMDAgKi8KKwljcF9jdHgoY3R4LCAweDQwNTAwMCwgMHgxKTsKKwlzd2l0Y2ggKGRldl9wcml2LT5jaGlwc2V0KSB7CisJY2FzZSAweDUwOgorCQlncl9kZWYoY3R4LCAweDQwNTAwMCwgMHgwMDMwMDA4MCk7CisJCWJyZWFrOworCWNhc2UgMHg4NDoKKwljYXNlIDB4YTA6CisJY2FzZSAweGE1OgorCWNhc2UgMHhhODoKKwljYXNlIDB4YWE6CisJY2FzZSAweGFjOgorCQlncl9kZWYoY3R4LCAweDQwNTAwMCwgMHgwMDBlMDA4MCk7CisJCWJyZWFrOworCWNhc2UgMHg4NjoKKwljYXNlIDB4OTI6CisJY2FzZSAweDk0OgorCWNhc2UgMHg5NjoKKwljYXNlIDB4OTg6CisJCWdyX2RlZihjdHgsIDB4NDA1MDAwLCAweDAwMDAwMDgwKTsKKwkJYnJlYWs7CisJfQorCWNwX2N0eChjdHgsIDB4NDA1MDE0LCAweDEpOworCWdyX2RlZihjdHgsIDB4NDA1MDE0LCAweDAwMDAwMDA0KTsKKwljcF9jdHgoY3R4LCAweDQwNTAxYywgMHgxKTsKKwljcF9jdHgoY3R4LCAweDQwNTAyNCwgMHgxKTsKKwljcF9jdHgoY3R4LCAweDQwNTAyYywgMHgxKTsKKworCS8qIDU0MDAgb3IgbWF5YmUgNDgwMCAqLworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKSB7CisJCW9mZnNldCA9IDB4NDA1NDAwOworCQljcF9jdHgoY3R4LCAweDQwNTQwMCwgMHhlYSk7CisJfSBlbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4OTQpIHsKKwkJb2Zmc2V0ID0gMHg0MDU0MDA7CisJCWNwX2N0eChjdHgsIDB4NDA1NDAwLCAweGNiKTsKKwl9IGVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkgeworCQlvZmZzZXQgPSAweDQwNTQwMDsKKwkJY3BfY3R4KGN0eCwgMHg0MDU0MDAsIDB4Y2MpOworCX0gZWxzZSBpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkgeworCQlvZmZzZXQgPSAweDQwNDgwMDsKKwkJY3BfY3R4KGN0eCwgMHg0MDQ4MDAsIDB4ZGEpOworCX0gZWxzZSB7CisJCW9mZnNldCA9IDB4NDA1NDAwOworCQljcF9jdHgoY3R4LCAweDQwNTQwMCwgMHhkNCk7CisJfQorCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MGMsIDB4MDAwMDAwMDIpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MTAsIDB4MDAwMDAwMDEpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweDk0KQorCQlvZmZzZXQgKz0gNDsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDFjLCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDIwLCAweDAwMDAwMTAwKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDM4LCAweDAwMDAwMDAyKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDNjLCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDQwLCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDUwLCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDU0LCAweDAwM2ZmZmZmKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDU4LCAweDAwMDAxZmZmKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDYwLCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDY0LCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDZjLCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDcwLCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDc0LCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDc4LCAweDAwMDAwMDA0KTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDdjLCAweDAwMDAwMDAxKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkKKwkJb2Zmc2V0ICs9IDQ7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg4MCwgMHgwMDAwMDAwMSk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg4NCwgMHgwMDAwMDAwMSk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg4OCwgMHgwMDAwMDAwNyk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg4YywgMHgwMDAwMDAwMSk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg5MCwgMHgwMDAwMDAwNyk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg5NCwgMHgwMDAwMDAwMSk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg5OCwgMHgwMDAwMDAwMSk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg5YywgMHgwMDAwMDAwMSk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApIHsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4YjAsIDB4MDAwMDAwMDEpOworCQkgZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHhiNCwgMHgwMDAwMDAwMSk7CisJCSBncl9kZWYoY3R4LCBvZmZzZXQgKyAweGJjLCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4YzAsIDB4MDAwMDAwMGEpOworCQkgZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHhkMCwgMHgwMDAwMDA0MCk7CisJCSBncl9kZWYoY3R4LCBvZmZzZXQgKyAweGQ4LCAweDAwMDAwMDAyKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4ZGMsIDB4MDAwMDAxMDApOworCQkgZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHhlMCwgMHgwMDAwMDAwMSk7CisJCSBncl9kZWYoY3R4LCBvZmZzZXQgKyAweGU0LCAweDAwMDAwMTAwKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTAwLCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTI0LCAweDAwMDAwMDA0KTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTNjLCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTQwLCAweDAwMDAwMTAwKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTQ4LCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTU0LCAweDAwMDAwMTAwKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTU4LCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTVjLCAweDAwMDAwMTAwKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTY0LCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTcwLCAweDAwMDAwMTAwKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTc0LCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTdjLCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTg4LCAweDAwMDAwMDAyKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTkwLCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MTk4LCAweDAwMDAwMDAxKTsKKwkJIGdyX2RlZihjdHgsIG9mZnNldCArIDB4MWFjLCAweDAwMDAwMDAzKTsKKwkJIG9mZnNldCArPSAweGQwOworCX0gZWxzZSB7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4YjAsIDB4MDAwMDAwMDEpOworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweGI0LCAweDAwMDAwMTAwKTsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHhiYywgMHgwMDAwMDAwMSk7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4YzgsIDB4MDAwMDAxMDApOworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweGNjLCAweDAwMDAwMDAxKTsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHhkMCwgMHgwMDAwMDEwMCk7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4ZDgsIDB4MDAwMDAwMDEpOworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweGU0LCAweDAwMDAwMTAwKTsKKwl9CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHhmOCwgMHgwMDAwMDAwNCk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHhmYywgMHgwMDAwMDA3MCk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxMDAsIDB4MDAwMDAwODApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQlvZmZzZXQgKz0gNDsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDExNCwgMHgwMDAwMDAwYyk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCW9mZnNldCAtPSA0OworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MTFjLCAweDAwMDAwMDA4KTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDEyMCwgMHgwMDAwMDAxNCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApIHsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxMjQsIDB4MDAwMDAwMjYpOworCQlvZmZzZXQgLT0gMHgxODsKKwl9IGVsc2UgeworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDEyOCwgMHgwMDAwMDAyOSk7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MTJjLCAweDAwMDAwMDI3KTsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxMzAsIDB4MDAwMDAwMjYpOworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDEzNCwgMHgwMDAwMDAwOCk7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MTM4LCAweDAwMDAwMDA0KTsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxM2MsIDB4MDAwMDAwMjcpOworCX0KKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDE0OCwgMHgwMDAwMDAwMSk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxNGMsIDB4MDAwMDAwMDIpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MTUwLCAweDAwMDAwMDAzKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDE1NCwgMHgwMDAwMDAwNCk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxNTgsIDB4MDAwMDAwMDUpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MTVjLCAweDAwMDAwMDA2KTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDE2MCwgMHgwMDAwMDAwNyk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxNjQsIDB4MDAwMDAwMDEpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWE4LCAweDAwMDAwMGNmKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJb2Zmc2V0IC09IDQ7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxZDgsIDB4MDAwMDAwODApOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWRjLCAweDAwMDAwMDA0KTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDFlMCwgMHgwMDAwMDAwNCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCW9mZnNldCAtPSA0OworCWVsc2UKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxZTQsIDB4MDAwMDAwMDMpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKSB7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWVjLCAweDAwMDAwMDAzKTsKKwkJb2Zmc2V0ICs9IDg7CisJfQorCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWU4LCAweDAwMDAwMDAxKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJb2Zmc2V0IC09IDQ7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxZjQsIDB4MDAwMDAwMTIpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWY4LCAweDAwMDAwMDEwKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDFmYywgMHgwMDAwMDAwYyk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyMDAsIDB4MDAwMDAwMDEpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MjEwLCAweDAwMDAwMDA0KTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDIxNCwgMHgwMDAwMDAwMik7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyMTgsIDB4MDAwMDAwMDQpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGEwKQorCQlvZmZzZXQgKz0gNDsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDIyNCwgMHgwMDNmZmZmZik7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyMjgsIDB4MDAwMDFmZmYpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQlvZmZzZXQgLT0gMHgyMDsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGEwKSB7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MjUwLCAweDAwMDAwMDAxKTsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyNTQsIDB4MDAwMDAwMDEpOworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDI1OCwgMHgwMDAwMDAwMik7CisJCW9mZnNldCArPSAweDEwOworCX0KKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDI1MCwgMHgwMDAwMDAwNCk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyNTQsIDB4MDAwMDAwMTQpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MjU4LCAweDAwMDAwMDAxKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkKKwkJb2Zmc2V0ICs9IDQ7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyNjQsIDB4MDAwMDAwMDIpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGEwKQorCQlvZmZzZXQgKz0gODsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDI3MCwgMHgwMDAwMDAwMSk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyNzgsIDB4MDAwMDAwMDIpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MjdjLCAweDAwMDAxMDAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJb2Zmc2V0IC09IDB4YzsKKwllbHNlIHsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyODAsIDB4MDAwMDBlMDApOworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDI4NCwgMHgwMDAwMTAwMCk7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4Mjg4LCAweDAwMDAxZTAwKTsKKwl9CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyOTAsIDB4MDAwMDAwMDEpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4Mjk0LCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDI5OCwgMHgwMDAwMDAwMSk7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyOWMsIDB4MDAwMDAwMDEpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MmEwLCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDJiMCwgMHgwMDAwMDIwMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpIHsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyYjQsIDB4MDAwMDAyMDApOworCQlvZmZzZXQgKz0gNDsKKwl9CisJaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkgeworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDJiOCwgMHgwMDAwMDAwMSk7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MmJjLCAweDAwMDAwMDcwKTsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyYzAsIDB4MDAwMDAwODApOworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDJjYywgMHgwMDAwMDAwMSk7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MmQwLCAweDAwMDAwMDcwKTsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyZDQsIDB4MDAwMDAwODApOworCX0gZWxzZSB7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MmI4LCAweDAwMDAwMDAxKTsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyYmMsIDB4MDAwMDAwZjApOworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDJjMCwgMHgwMDAwMDBmZik7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MmNjLCAweDAwMDAwMDAxKTsKKwkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyZDAsIDB4MDAwMDAwZjApOworCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDJkNCwgMHgwMDAwMDBmZik7CisJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MmRjLCAweDAwMDAwMDA5KTsKKwkJb2Zmc2V0ICs9IDQ7CisJfQorCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MmU0LCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDJlOCwgMHgwMDAwMDBjZik7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyZjAsIDB4MDAwMDAwMDEpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MzAwLCAweDAwMDAwMGNmKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDMwOCwgMHgwMDAwMDAwMik7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgzMTAsIDB4MDAwMDAwMDEpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MzE4LCAweDAwMDAwMDAxKTsKKwlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDMyMCwgMHgwMDAwMDBjZik7CisJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgzMjQsIDB4MDAwMDAwY2YpOworCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MzI4LCAweDAwMDAwMDAxKTsKKworCS8qIDYwMDA/ICovCisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCWNwX2N0eChjdHgsIDB4NDA2M2UwLCAweDEpOworCisJLyogNjgwMCAqLworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4OTApIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDY4MTQsIDB4MmIpOworCQlncl9kZWYoY3R4LCAweDQwNjgxOCwgMHgwMDAwMGY4MCk7CisJCWdyX2RlZihjdHgsIDB4NDA2ODYwLCAweDAwN2YwMDgwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDY4OWMsIDB4MDA3ZjAwODApOworCX0gZWxzZSB7CisJCWNwX2N0eChjdHgsIDB4NDA2ODE0LCAweDQpOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg5OCkKKwkJCWdyX2RlZihjdHgsIDB4NDA2ODE4LCAweDAwMDAwZjgwKTsKKwkJZWxzZQorCQkJZ3JfZGVmKGN0eCwgMHg0MDY4MTgsIDB4MDAwMDFmODApOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkKKwkJCWdyX2RlZihjdHgsIDB4NDA2ODFjLCAweDAwMDAwMDMwKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDY4MzAsIDB4Myk7CisJfQorCisJLyogNzAwMDogcGVyLVJPUCBncm91cCBzdGF0ZSAqLworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaWYgKHVuaXRzICYgKDE8PChpKzE2KSkpIHsKKwkJCWNwX2N0eChjdHgsIDB4NDA3MDAwICsgKGk8PDgpLCAzKTsKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQkJCWdyX2RlZihjdHgsIDB4NDA3MDAwICsgKGk8PDgpLCAweDFiNzRmODIwKTsKKwkJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4YTUpCisJCQkJZ3JfZGVmKGN0eCwgMHg0MDcwMDAgKyAoaTw8OCksIDB4M2I3NGY4MjEpOworCQkJZWxzZQorCQkJCWdyX2RlZihjdHgsIDB4NDA3MDAwICsgKGk8PDgpLCAweDdiNzRmODIxKTsKKwkJCWdyX2RlZihjdHgsIDB4NDA3MDA0ICsgKGk8PDgpLCAweDg5MDU4MDAxKTsKKworCQkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApIHsKKwkJCQljcF9jdHgoY3R4LCAweDQwNzAxMCArIChpPDw4KSwgMSk7CisJCQl9IGVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkgeworCQkJCWNwX2N0eChjdHgsIDB4NDA3MDEwICsgKGk8PDgpLCAyKTsKKwkJCQlncl9kZWYoY3R4LCAweDQwNzAxMCArIChpPDw4KSwgMHgwMDAwMTAwMCk7CisJCQkJZ3JfZGVmKGN0eCwgMHg0MDcwMTQgKyAoaTw8OCksIDB4MDAwMDAwMWYpOworCQkJfSBlbHNlIHsKKwkJCQljcF9jdHgoY3R4LCAweDQwNzAxMCArIChpPDw4KSwgMyk7CisJCQkJZ3JfZGVmKGN0eCwgMHg0MDcwMTAgKyAoaTw8OCksIDB4MDAwMDEwMDApOworCQkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweGE1KQorCQkJCQlncl9kZWYoY3R4LCAweDQwNzAxNCArIChpPDw4KSwgMHgwMDAwMDBmZik7CisJCQkJZWxzZQorCQkJCQlncl9kZWYoY3R4LCAweDQwNzAxNCArIChpPDw4KSwgMHgwMDAwMDFmZik7CisJCQl9CisKKwkJCWNwX2N0eChjdHgsIDB4NDA3MDgwICsgKGk8PDgpLCA0KTsKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweGE1KQorCQkJCWdyX2RlZihjdHgsIDB4NDA3MDgwICsgKGk8PDgpLCAweDAyN2MxMGZhKTsKKwkJCWVsc2UKKwkJCQlncl9kZWYoY3R4LCAweDQwNzA4MCArIChpPDw4KSwgMHg4MjdjMTBmYSk7CisJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJCQlncl9kZWYoY3R4LCAweDQwNzA4NCArIChpPDw4KSwgMHgwMDAwMDBjMCk7CisJCQllbHNlCisJCQkJZ3JfZGVmKGN0eCwgMHg0MDcwODQgKyAoaTw8OCksIDB4NDAwMDAwYzApOworCQkJZ3JfZGVmKGN0eCwgMHg0MDcwODggKyAoaTw8OCksIDB4Yjc4OTIwODApOworCisJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweGEwKQorCQkJCWNwX2N0eChjdHgsIDB4NDA3MDk0ICsgKGk8PDgpLCAxKTsKKwkJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDw9IDB4YTAgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhYSkKKwkJCQljcF9jdHgoY3R4LCAweDQwNzA5NCArIChpPDw4KSwgMyk7CisJCQllbHNlIHsKKwkJCQljcF9jdHgoY3R4LCAweDQwNzA5NCArIChpPDw4KSwgNCk7CisJCQkJZ3JfZGVmKGN0eCwgMHg0MDcwYTAgKyAoaTw8OCksIDEpOworCQkJfQorCQl9CisJfQorCisJY3BfY3R4KGN0eCwgMHg0MDdjMDAsIDB4Myk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHg5MCkKKwkJZ3JfZGVmKGN0eCwgMHg0MDdjMDAsIDB4MDAwMTAwNDApOworCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJZ3JfZGVmKGN0eCwgMHg0MDdjMDAsIDB4MDAzOTAwNDApOworCWVsc2UKKwkJZ3JfZGVmKGN0eCwgMHg0MDdjMDAsIDB4MDAzZDAwNDApOworCWdyX2RlZihjdHgsIDB4NDA3YzA4LCAweDAwMDAwMDIyKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkgeworCQljcF9jdHgoY3R4LCAweDQwN2MxMCwgMHgzKTsKKwkJY3BfY3R4KGN0eCwgMHg0MDdjMjAsIDB4MSk7CisJCWNwX2N0eChjdHgsIDB4NDA3YzJjLCAweDEpOworCX0KKworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDdkMDAsIDB4OSk7CisJfSBlbHNlIHsKKwkJY3BfY3R4KGN0eCwgMHg0MDdkMDAsIDB4MTUpOworCX0KKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg5OCkKKwkJZ3JfZGVmKGN0eCwgMHg0MDdkMDgsIDB4MDAzODAwNDApOworCWVsc2UgeworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweDkwKQorCQkJZ3JfZGVmKGN0eCwgMHg0MDdkMDgsIDB4MDAwMTAwNDApOworCQllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCQlncl9kZWYoY3R4LCAweDQwN2QwOCwgMHgwMDM5MDA0MCk7CisJCWVsc2UKKwkJCWdyX2RlZihjdHgsIDB4NDA3ZDA4LCAweDAwM2QwMDQwKTsKKwkJZ3JfZGVmKGN0eCwgMHg0MDdkMGMsIDB4MDAwMDAwMjIpOworCX0KKworCS8qIDgwMDArOiBwZXItVFAgc3RhdGUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQlpZiAodW5pdHMgJiAoMTw8aSkpIHsKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCQkJYmFzZSA9IDB4NDA4MDAwICsgKGk8PDEyKTsKKwkJCWVsc2UKKwkJCQliYXNlID0gMHg0MDgwMDAgKyAoaTw8MTEpOworCQkJaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJCQlvZmZzZXQgPSBiYXNlICsgMHhjMDA7CisJCQllbHNlCisJCQkJb2Zmc2V0ID0gYmFzZSArIDB4ODA7CisJCQljcF9jdHgoY3R4LCBvZmZzZXQgKyAweDAwLCAxKTsKKwkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MDAsIDB4MDAwMGZmMGEpOworCQkJY3BfY3R4KGN0eCwgb2Zmc2V0ICsgMHgwOCwgMSk7CisKKwkJCS8qIHBlci1NUCBzdGF0ZSAqLworCQkJZm9yIChqID0gMDsgaiA8IChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTAgPyAyIDogNCk7IGorKykgeworCQkJCWlmICghKHVuaXRzICYgKDEgPDwgKGorMjQpKSkpIGNvbnRpbnVlOworCQkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCQkJCW9mZnNldCA9IGJhc2UgKyAweDIwMCArIChqPDw3KTsKKwkJCQllbHNlCisJCQkJCW9mZnNldCA9IGJhc2UgKyAweDEwMCArIChqPDw3KTsKKwkJCQljcF9jdHgoY3R4LCBvZmZzZXQsIDB4MjApOworCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MDAsIDB4MDE4MDAwMDApOworCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MDQsIDB4MDAxNjAwMDApOworCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MDgsIDB4MDE4MDAwMDApOworCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MTgsIDB4MDAwM2ZmZmYpOworCQkJCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwkJCQljYXNlIDB4NTA6CisJCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWMsIDB4MDAwODAwMDApOworCQkJCQlicmVhazsKKwkJCQljYXNlIDB4ODQ6CisJCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWMsIDB4MDA4ODAwMDApOworCQkJCQlicmVhazsKKwkJCQljYXNlIDB4ODY6CisJCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWMsIDB4MDA4YzAwMDApOworCQkJCQlicmVhazsKKwkJCQljYXNlIDB4OTI6CisJCQkJY2FzZSAweDk2OgorCQkJCWNhc2UgMHg5ODoKKwkJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxYywgMHgxMThjMDAwMCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMHg5NDoKKwkJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxYywgMHgxMDg4MDAwMCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMHhhMDoKKwkJCQljYXNlIDB4YTU6CisJCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWMsIDB4MzEwYzAwMDApOworCQkJCQlicmVhazsKKwkJCQljYXNlIDB4YTg6CisJCQkJY2FzZSAweGFhOgorCQkJCWNhc2UgMHhhYzoKKwkJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxYywgMHgzMDBjMDAwMCk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDQwLCAweDAwMDEwNDAxKTsKKwkJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg0OCwgMHgwMDAwMDA0MCk7CisJCQkJZWxzZQorCQkJCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDQ4LCAweDAwMDAwMDc4KTsKKwkJCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDUwLCAweDAwMDAwMGJmKTsKKwkJCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDU4LCAweDAwMDAxMjEwKTsKKwkJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg1YywgMHgwMDAwMDA4MCk7CisJCQkJZWxzZQorCQkJCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDVjLCAweDA4MDAwMDgwKTsKKwkJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkKKwkJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg2OCwgMHgwMDAwMDAzZSk7CisJCQl9CisKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCQkJY3BfY3R4KGN0eCwgYmFzZSArIDB4MzAwLCAweDQpOworCQkJZWxzZQorCQkJCWNwX2N0eChjdHgsIGJhc2UgKyAweDMwMCwgMHg1KTsKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQkJCWdyX2RlZihjdHgsIGJhc2UgKyAweDMwNCwgMHgwMDAwNzA3MCk7CisJCQllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCQkJZ3JfZGVmKGN0eCwgYmFzZSArIDB4MzA0LCAweDAwMDI3MDcwKTsKKwkJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDw9IDB4YTAgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhYSkKKwkJCQlncl9kZWYoY3R4LCBiYXNlICsgMHgzMDQsIDB4MDExMjcwNzApOworCQkJZWxzZQorCQkJCWdyX2RlZihjdHgsIGJhc2UgKyAweDMwNCwgMHgwNTEyNzA3MCk7CisKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCQkJY3BfY3R4KGN0eCwgYmFzZSArIDB4MzE4LCAxKTsKKwkJCWVsc2UKKwkJCQljcF9jdHgoY3R4LCBiYXNlICsgMHgzMjAsIDEpOworCQkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCQkJZ3JfZGVmKGN0eCwgYmFzZSArIDB4MzE4LCAweDAwMDNmZmZmKTsKKwkJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJCQlncl9kZWYoY3R4LCBiYXNlICsgMHgzMTgsIDB4MDNmZmZmZmYpOworCQkJZWxzZQorCQkJCWdyX2RlZihjdHgsIGJhc2UgKyAweDMyMCwgMHgwN2ZmZmZmZik7CisKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCQkJY3BfY3R4KGN0eCwgYmFzZSArIDB4MzI0LCA1KTsKKwkJCWVsc2UKKwkJCQljcF9jdHgoY3R4LCBiYXNlICsgMHgzMjgsIDQpOworCisJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweGEwKSB7CisJCQkJY3BfY3R4KGN0eCwgYmFzZSArIDB4MzQwLCA5KTsKKwkJCQlvZmZzZXQgPSBiYXNlICsgMHgzNDA7CisJCQl9IGVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDw9IDB4YTAgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhYSkgeworCQkJCWNwX2N0eChjdHgsIGJhc2UgKyAweDMzYywgMHhiKTsKKwkJCQlvZmZzZXQgPSBiYXNlICsgMHgzNDQ7CisJCQl9IGVsc2UgeworCQkJCWNwX2N0eChjdHgsIGJhc2UgKyAweDMzYywgMHhkKTsKKwkJCQlvZmZzZXQgPSBiYXNlICsgMHgzNDQ7CisJCQl9CisJCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDAsIDB4MDAxMjA0MDcpOworCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg0LCAweDA1MDkxNTA3KTsKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDg0KQorCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4OCwgMHgwNTEwMDIwMik7CisJCQllbHNlCisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg4LCAweDA1MDEwMjAyKTsKKwkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4YywgMHgwMDAzMDIwMSk7CisKKwkJCWNwX2N0eChjdHgsIGJhc2UgKyAweDQwMCwgMik7CisJCQlncl9kZWYoY3R4LCBiYXNlICsgMHg0MDQsIDB4MDAwMDAwNDApOworCQkJY3BfY3R4KGN0eCwgYmFzZSArIDB4NDBjLCAyKTsKKwkJCWdyX2RlZihjdHgsIGJhc2UgKyAweDQwYywgMHgwZDBjMGIwYSk7CisJCQlncl9kZWYoY3R4LCBiYXNlICsgMHg0MTAsIDB4MDAxNDEyMTApOworCisJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweGEwKQorCQkJCW9mZnNldCA9IGJhc2UgKyAweDgwMDsKKwkJCWVsc2UKKwkJCQlvZmZzZXQgPSBiYXNlICsgMHg1MDA7CisJCQljcF9jdHgoY3R4LCBvZmZzZXQsIDYpOworCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgwLCAweDAwMDAwMWYwKTsKKwkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4NCwgMHgwMDAwMDAwMSk7CisJCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDgsIDB4MDAwMDAwMDMpOworCQkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTAgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhYSkKKwkJCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweGMsIDB4MDAwMDgwMDApOworCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgxNCwgMHgwMDAzOWUwMCk7CisJCQljcF9jdHgoY3R4LCBvZmZzZXQgKyAweDFjLCAyKTsKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWMsIDB4MDAwMDAwNDApOworCQkJZWxzZQorCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4MWMsIDB4MDAwMDAxMDApOworCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHgyMCwgMHgwMDAwMzgwMCk7CisKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGEwKSB7CisJCQkJY3BfY3R4KGN0eCwgYmFzZSArIDB4NTRjLCAyKTsKKwkJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPD0gMHhhMCB8fCBkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGFhKQorCQkJCQlncl9kZWYoY3R4LCBiYXNlICsgMHg1NGMsIDB4MDAzZmUwMDYpOworCQkJCWVsc2UKKwkJCQkJZ3JfZGVmKGN0eCwgYmFzZSArIDB4NTRjLCAweDAwM2ZlMDA3KTsKKwkJCQlncl9kZWYoY3R4LCBiYXNlICsgMHg1NTAsIDB4MDAzZmUwMDApOworCQkJfQorCisJCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweGEwKQorCQkJCW9mZnNldCA9IGJhc2UgKyAweGEwMDsKKwkJCWVsc2UKKwkJCQlvZmZzZXQgPSBiYXNlICsgMHg2ODA7CisJCQljcF9jdHgoY3R4LCBvZmZzZXQsIDEpOworCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0LCAweDAwNDA0MDQwKTsKKworCQkJaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJCQlvZmZzZXQgPSBiYXNlICsgMHhlMDA7CisJCQllbHNlCisJCQkJb2Zmc2V0ID0gYmFzZSArIDB4NzAwOworCQkJY3BfY3R4KGN0eCwgb2Zmc2V0LCAyKTsKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0LCAweDAwNzdmMDA1KTsKKwkJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTUpCisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0LCAweDZjZjdmMDA3KTsKKwkJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTgpCisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0LCAweDZjZmZmMDA3KTsKKwkJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YWMpCisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0LCAweDBjZmZmMDA3KTsKKwkJCWVsc2UKKwkJCQlncl9kZWYoY3R4LCBvZmZzZXQsIDB4MGNmN2YwMDcpOworCQkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg0LCAweDAwMDA3ZmZmKTsKKwkJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJCQlncl9kZWYoY3R4LCBvZmZzZXQgKyAweDQsIDB4MDAzZjdmZmYpOworCQkJZWxzZQorCQkJCWdyX2RlZihjdHgsIG9mZnNldCArIDB4NCwgMHgwMmJmN2ZmZik7CisJCQljcF9jdHgoY3R4LCBvZmZzZXQgKyAweDJjLCAxKTsKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKSB7CisJCQkJY3BfY3R4KGN0eCwgb2Zmc2V0ICsgMHg1MCwgOSk7CisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg1NCwgMHgwMDAwMDNmZik7CisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg1OCwgMHgwMDAwMDAwMyk7CisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg1YywgMHgwMDAwMDAwMyk7CisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg2MCwgMHgwMDAwMDFmZik7CisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg2NCwgMHgwMDAwMDAxZik7CisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg2OCwgMHgwMDAwMDAwZik7CisJCQkJZ3JfZGVmKGN0eCwgb2Zmc2V0ICsgMHg2YywgMHgwMDAwMDAwZik7CisJCQl9IGVsc2UgaWYoZGV2X3ByaXYtPmNoaXBzZXQgPCAweGEwKSB7CisJCQkJY3BfY3R4KGN0eCwgb2Zmc2V0ICsgMHg1MCwgMSk7CisJCQkJY3BfY3R4KGN0eCwgb2Zmc2V0ICsgMHg3MCwgMSk7CisJCQl9IGVsc2UgeworCQkJCWNwX2N0eChjdHgsIG9mZnNldCArIDB4NTAsIDEpOworCQkJCWNwX2N0eChjdHgsIG9mZnNldCArIDB4NjAsIDUpOworCQkJfQorCQl9CisJfQorfQorCisvKgorICogeGZlciBhcmVhcy4gVGhlc2UgYXJlIGEgcGFpbi4KKyAqCisgKiBUaGVyZSBhcmUgMiB4ZmVyIGFyZWFzOiB0aGUgZmlyc3Qgb25lIGlzIGJpZyBhbmQgY29udGFpbnMgYWxsIHNvcnRzIG9mCisgKiBzdHVmZiwgdGhlIHNlY29uZCBpcyBzbWFsbCBhbmQgY29udGFpbnMgc29tZSBwZXItVFAgY29udGV4dC4KKyAqCisgKiBFYWNoIGFyZWEgaXMgc3BsaXQgaW50byA4ICJzdHJhbmRzIi4gVGhlIGFyZWFzLCB3aGVuIHNhdmVkIHRvIGdyY3R4LAorICogYXJlIG1hZGUgb2YgOC13b3JkIGJsb2Nrcy4gRWFjaCBibG9jayBjb250YWlucyBhIHNpbmdsZSB3b3JkIGZyb20KKyAqIGVhY2ggc3RyYW5kLiBUaGUgc3RyYW5kcyBhcmUgaW5kZXBlbmRlbnQgb2YgZWFjaCBvdGhlciwgdGhlaXIKKyAqIGFkZHJlc3NlcyBhcmUgdW5yZWxhdGVkIHRvIGVhY2ggb3RoZXIsIGFuZCBkYXRhIGluIHRoZW0gaXMgY2xvc2VseQorICogcGFja2VkIHRvZ2V0aGVyLiBUaGUgc3RyYW5kIGxheW91dCB2YXJpZXMgYSBiaXQgYmV0d2VlbiBjYXJkczogaGVyZQorICogYW5kIHRoZXJlLCBhIHNpbmdsZSB3b3JkIGlzIHRocm93biBvdXQgaW4gdGhlIG1pZGRsZSBhbmQgdGhlIHdob2xlCisgKiBzdHJhbmQgaXMgb2Zmc2V0IGJ5IGEgYml0IGZyb20gY29ycmVzcG9uZGluZyBvbmUgb24gYW5vdGhlciBjaGlwc2V0LgorICogRm9yIHRoaXMgcmVhc29uLCBhZGRyZXNzZXMgb2Ygc3R1ZmYgaW4gc3RyYW5kcyBhcmUgYWxtb3N0IHVzZWxlc3MuCisgKiBLbm93aW5nIHNlcXVlbmNlIG9mIHN0dWZmIGFuZCBzaXplIG9mIGdhcHMgYmV0d2VlbiB0aGVtIGlzIG11Y2ggbW9yZQorICogdXNlZnVsLCBhbmQgdGhhdCdzIGhvdyB3ZSBidWlsZCB0aGUgc3RyYW5kcyBpbiBvdXIgZ2VuZXJhdG9yLgorICoKKyAqIE5WQTAgdGFrZXMgdGhpcyBtZXNzIHRvIGEgd2hvbGUgbmV3IGxldmVsIGJ5IGN1dHRpbmcgdGhlIG9sZCBzdHJhbmRzCisgKiBpbnRvIGEgZmV3IGRvemVuIHBpZWNlcyBba25vd24gYXMgZ2VuZXNdLCByZWFycmFuZ2luZyB0aGVtIHJhbmRvbWx5LAorICogYW5kIHB1dHRpbmcgdGhlbSBiYWNrIHRvZ2V0aGVyIHRvIG1ha2UgbmV3IHN0cmFuZHMuIEhvcGVmdWxseSB0aGVzZQorICogZ2VuZXMgY29ycmVzcG9uZCBtb3JlIG9yIGxlc3MgZGlyZWN0bHkgdG8gdGhlIHNhbWUgUEdSQVBIIHN1YnVuaXRzCisgKiBhcyBpbiA0MDAwNDAgcmVnaXN0ZXIuCisgKgorICogVGhlIG1vc3QgY29tbW9uIHZhbHVlIGluIGRlZmF1bHQgY29udGV4dCBpcyAwLCBhbmQgd2hlbiB0aGUgZ2VuZXMKKyAqIGFyZSBzZXBhcmF0ZWQgYnkgMCdzLCBnZW5lIGJvdW5kdWFyaWVzIGFyZSBxdWl0ZSBzcGVjdWxhdGl2ZS4uLgorICogc29tZSBvZiB0aGVtIGNhbiBiZSBjbGVhcmx5IGRlZHVjZWQsIG90aGVycyBjYW4gYmUgZ3Vlc3NlZCwgYW5kIHlldAorICogb3RoZXJzIHdvbid0IGJlIHJlc29sdmVkIHdpdGhvdXQgZmlndXJpbmcgb3V0IHRoZSByZWFsIG1lYW5pbmcgb2YKKyAqIGdpdmVuIGN0eHZhbC4gRm9yIHRoZSBzYW1lIHJlYXNvbiwgZW5kaW5nIHBvaW50IG9mIGVhY2ggc3RyYW5kCisgKiBpcyB1bmtub3duLiBFeGNlcHQgZm9yIHN0cmFuZCAwLCB3aGljaCBpcyB0aGUgbG9uZ2VzdCBzdHJhbmQgYW5kCisgKiBpdHMgZW5kIGNvcnJlc3BvbmRzIHRvIGVuZCBvZiB0aGUgd2hvbGUgeGZlci4KKyAqCisgKiBBbiB1bnNvbHZlZCBteXN0ZXJ5IGlzIHRoZSBzZWVrIGluc3RydWN0aW9uOiBpdCB0YWtlcyBhbiBhcmd1bWVudAorICogaW4gYml0cyA4LTE4LCBhbmQgdGhhdCBhcmd1bWVudCBpcyBjbGVhcmx5IHRoZSBwbGFjZSBpbiBzdHJhbmRzIHRvCisgKiBzZWVrIHRvLi4uIGJ1dCB0aGUgb2Zmc2V0cyBkb24ndCBzZWVtIHRvIGNvcnJlc3BvbmQgdG8gb2Zmc2V0cyBhcworICogc2VlbiBpbiBncmN0eC4gUGVyaGFwcyB0aGVyZSdzIGFub3RoZXIsIHJlYWwsIG5vdCByYW5kb21seS1jaGFuZ2luZworICogYWRkcmVzc2luZyBpbiBzdHJhbmRzLCBhbmQgdGhlIHhmZXIgaW5zbiBqdXN0IGhhcHBlbnMgdG8gc2tpcCBvdmVyCisgKiB0aGUgdW51c2VkIGJpdHM/IE5WMTAtTlYzMCBQSVBFIGNvbWVzIHRvIG1pbmQuLi4KKyAqCisgKiBBcyBmYXIgYXMgSSBrbm93LCB0aGVyZSdzIG5vIHdheSB0byBhY2Nlc3MgdGhlIHhmZXIgYXJlYXMgZGlyZWN0bHkKKyAqIHdpdGhvdXQgdGhlIGhlbHAgb2YgY3R4cHJvZy4KKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQKK3hmX2VtaXQoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCwgaW50IG51bSwgdWludDMyX3QgdmFsKSB7CisJaW50IGk7CisJaWYgKHZhbCAmJiBjdHgtPm1vZGUgPT0gTk9VVkVBVV9HUkNUWF9WQUxTKQorCQlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspCisJCQludl93bzMyKGN0eC0+ZGV2LCBjdHgtPmRhdGEsIGN0eC0+Y3R4dmFsc19wb3MgKyAoaSA8PCAzKSwgdmFsKTsKKwljdHgtPmN0eHZhbHNfcG9zICs9IG51bSA8PCAzOworfQorCisvKiBHZW5lIGRlY2xhcmF0aW9ucy4uLiAqLworCitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX20ybWYoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazEoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazIoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazMoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazQoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazUoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazYoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3Vuazcoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3Vuazgoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3Vuazkoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCk7CitzdGF0aWMgdm9pZCBudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazEwKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpOworc3RhdGljIHZvaWQgbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV9yb3BjKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpOworc3RhdGljIHZvaWQgbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cChzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4KTsKKworc3RhdGljIHZvaWQKK252NTBfZ3JhcGhfY29uc3RydWN0X3hmZXIxKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY3R4LT5kZXYtPmRldl9wcml2YXRlOworCWludCBpOworCWludCBvZmZzZXQ7CisJaW50IHNpemUgPSAwOworCXVpbnQzMl90IHVuaXRzID0gbnZfcmQzMiAoY3R4LT5kZXYsIDB4MTU0MCk7CisKKwlvZmZzZXQgPSAoY3R4LT5jdHh2YWxzX3BvcysweDNmKSZ+MHgzZjsKKwljdHgtPmN0eHZhbHNfYmFzZSA9IG9mZnNldDsKKworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApIHsKKwkJLyogU3RyYW5kIDAgKi8KKwkJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldDsKKwkJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCQljYXNlIDB4NTA6CisJCQl4Zl9lbWl0KGN0eCwgMHg5OSwgMCk7CisJCQlicmVhazsKKwkJY2FzZSAweDg0OgorCQljYXNlIDB4ODY6CisJCQl4Zl9lbWl0KGN0eCwgMHgzODQsIDApOworCQkJYnJlYWs7CisJCWNhc2UgMHg5MjoKKwkJY2FzZSAweDk0OgorCQljYXNlIDB4OTY6CisJCWNhc2UgMHg5ODoKKwkJCXhmX2VtaXQoY3R4LCAweDM4MCwgMCk7CisJCQlicmVhazsKKwkJfQorCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX20ybWYgKGN0eCk7CisJCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwkJY2FzZSAweDUwOgorCQljYXNlIDB4ODQ6CisJCWNhc2UgMHg4NjoKKwkJY2FzZSAweDk4OgorCQkJeGZfZW1pdChjdHgsIDB4NGM0LCAwKTsKKwkJCWJyZWFrOworCQljYXNlIDB4OTI6CisJCWNhc2UgMHg5NDoKKwkJY2FzZSAweDk2OgorCQkJeGZfZW1pdChjdHgsIDB4OTg0LCAwKTsKKwkJCWJyZWFrOworCQl9CisJCW52NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rNShjdHgpOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJCXhmX2VtaXQoY3R4LCAweGEsIDApOworCQllbHNlCisJCQl4Zl9lbWl0KGN0eCwgMHhiLCAwKTsKKwkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV91bms0KGN0eCk7CisJCW52NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rMyhjdHgpOworCQlpZiAoKGN0eC0+Y3R4dmFsc19wb3Mtb2Zmc2V0KS84ID4gc2l6ZSkKKwkJCXNpemUgPSAoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzg7CisKKwkJLyogU3RyYW5kIDEgKi8KKwkJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldCArIDB4MTsKKwkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV91bms2KGN0eCk7CisJCW52NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rNyhjdHgpOworCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazgoY3R4KTsKKwkJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCQljYXNlIDB4NTA6CisJCWNhc2UgMHg5MjoKKwkJCXhmX2VtaXQoY3R4LCAweGZiLCAwKTsKKwkJCWJyZWFrOworCQljYXNlIDB4ODQ6CisJCQl4Zl9lbWl0KGN0eCwgMHhkMywgMCk7CisJCQlicmVhazsKKwkJY2FzZSAweDk0OgorCQljYXNlIDB4OTY6CisJCQl4Zl9lbWl0KGN0eCwgMHhhYiwgMCk7CisJCQlicmVhazsKKwkJY2FzZSAweDg2OgorCQljYXNlIDB4OTg6CisJCQl4Zl9lbWl0KGN0eCwgMHg2YiwgMCk7CisJCQlicmVhazsKKwkJfQorCQl4Zl9lbWl0KGN0eCwgMiwgMHg0ZTNiZmRmKTsKKwkJeGZfZW1pdChjdHgsIDQsIDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMHgwZmFjNjg4MSk7CisJCXhmX2VtaXQoY3R4LCAweGIsIDApOworCQl4Zl9lbWl0KGN0eCwgMiwgMHg0ZTNiZmRmKTsKKwkJaWYgKChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvOCA+IHNpemUpCisJCQlzaXplID0gKGN0eC0+Y3R4dmFsc19wb3Mtb2Zmc2V0KS84OworCisJCS8qIFN0cmFuZCAyICovCisJCWN0eC0+Y3R4dmFsc19wb3MgPSBvZmZzZXQgKyAweDI7CisJCXN3aXRjaCAoZGV2X3ByaXYtPmNoaXBzZXQpIHsKKwkJY2FzZSAweDUwOgorCQljYXNlIDB4OTI6CisJCQl4Zl9lbWl0KGN0eCwgMHhhODAsIDApOworCQkJYnJlYWs7CisJCWNhc2UgMHg4NDoKKwkJCXhmX2VtaXQoY3R4LCAweGE3ZSwgMCk7CisJCQlicmVhazsKKwkJY2FzZSAweDk0OgorCQljYXNlIDB4OTY6CisJCQl4Zl9lbWl0KGN0eCwgMHhhN2MsIDApOworCQkJYnJlYWs7CisJCWNhc2UgMHg4NjoKKwkJY2FzZSAweDk4OgorCQkJeGZfZW1pdChjdHgsIDB4YTdhLCAwKTsKKwkJCWJyZWFrOworCQl9CisJCXhmX2VtaXQoY3R4LCAxLCAweDNmZmZmZik7CisJCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwkJeGZfZW1pdChjdHgsIDEsIDB4MWZmZik7CisJCXhmX2VtaXQoY3R4LCAweGUsIDApOworCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazkoY3R4KTsKKwkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV91bmsyKGN0eCk7CisJCW52NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rMShjdHgpOworCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazEwKGN0eCk7CisJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJc2l6ZSA9IChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvODsKKworCQkvKiBTdHJhbmQgMzogcGVyLVJPUCBncm91cCBzdGF0ZSAqLworCQljdHgtPmN0eHZhbHNfcG9zID0gb2Zmc2V0ICsgMzsKKwkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJCWlmICh1bml0cyAmICgxIDw8IChpICsgMTYpKSkKKwkJCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3JvcGMoY3R4KTsKKwkJaWYgKChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvOCA+IHNpemUpCisJCQlzaXplID0gKGN0eC0+Y3R4dmFsc19wb3Mtb2Zmc2V0KS84OworCisJCS8qIFN0cmFuZHMgNC03OiBwZXItVFAgc3RhdGUgKi8KKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQkJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldCArIDQgKyBpOworCQkJaWYgKHVuaXRzICYgKDEgPDwgKDIgKiBpKSkpCisJCQkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cChjdHgpOworCQkJaWYgKHVuaXRzICYgKDEgPDwgKDIgKiBpICsgMSkpKQorCQkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAoY3R4KTsKKwkJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJCXNpemUgPSAoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzg7CisJCX0KKwl9IGVsc2UgeworCQkvKiBTdHJhbmQgMCAqLworCQljdHgtPmN0eHZhbHNfcG9zID0gb2Zmc2V0OworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkKKwkJCXhmX2VtaXQoY3R4LCAweDM4NSwgMCk7CisJCWVsc2UKKwkJCXhmX2VtaXQoY3R4LCAweDM4NCwgMCk7CisJCW52NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfbTJtZihjdHgpOworCQl4Zl9lbWl0KGN0eCwgMHg5NTAsIDApOworCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazEwKGN0eCk7CisJCXhmX2VtaXQoY3R4LCAxLCAweDBmYWM2ODgxKTsKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpIHsKKwkJCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwkJCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwkJfQorCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazgoY3R4KTsKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTApCisJCQl4Zl9lbWl0KGN0eCwgMHgxODksIDApOworCQllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTgpCisJCQl4Zl9lbWl0KGN0eCwgMHg5OSwgMCk7CisJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YWEpCisJCQl4Zl9lbWl0KGN0eCwgMHg2NSwgMCk7CisJCWVsc2UKKwkJCXhmX2VtaXQoY3R4LCAweDZkLCAwKTsKKwkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV91bms5KGN0eCk7CisJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJc2l6ZSA9IChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvODsKKworCQkvKiBTdHJhbmQgMSAqLworCQljdHgtPmN0eHZhbHNfcG9zID0gb2Zmc2V0ICsgMTsKKwkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV91bmsxKGN0eCk7CisJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJc2l6ZSA9IChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvODsKKworCQkvKiBTdHJhbmQgMiAqLworCQljdHgtPmN0eHZhbHNfcG9zID0gb2Zmc2V0ICsgMjsKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTApIHsKKwkJCW52NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rMihjdHgpOworCQl9CisJCXhmX2VtaXQoY3R4LCAweDM2LCAwKTsKKwkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV91bms1KGN0eCk7CisJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJc2l6ZSA9IChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvODsKKworCQkvKiBTdHJhbmQgMyAqLworCQljdHgtPmN0eHZhbHNfcG9zID0gb2Zmc2V0ICsgMzsKKwkJeGZfZW1pdChjdHgsIDEsIDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJCW52NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rNihjdHgpOworCQlpZiAoKGN0eC0+Y3R4dmFsc19wb3Mtb2Zmc2V0KS84ID4gc2l6ZSkKKwkJCXNpemUgPSAoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzg7CisKKwkJLyogU3RyYW5kIDQgKi8KKwkJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldCArIDQ7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweGEwKQorCQkJeGZfZW1pdChjdHgsIDB4YTgwLCAwKTsKKwkJZWxzZQorCQkJeGZfZW1pdChjdHgsIDB4YTdhLCAwKTsKKwkJeGZfZW1pdChjdHgsIDEsIDB4M2ZmZmZmKTsKKwkJeGZfZW1pdChjdHgsIDIsIDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMHgxZmZmKTsKKwkJaWYgKChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvOCA+IHNpemUpCisJCQlzaXplID0gKGN0eC0+Y3R4dmFsc19wb3Mtb2Zmc2V0KS84OworCisJCS8qIFN0cmFuZCA1ICovCisJCWN0eC0+Y3R4dmFsc19wb3MgPSBvZmZzZXQgKyA1OworCQl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJCXhmX2VtaXQoY3R4LCAxLCAweDBmYWM2ODgxKTsKKwkJeGZfZW1pdChjdHgsIDB4YiwgMCk7CisJCXhmX2VtaXQoY3R4LCAyLCAweDRlM2JmZGYpOworCQl4Zl9lbWl0KGN0eCwgMywgMCk7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQkJeGZfZW1pdChjdHgsIDEsIDB4MTEpOworCQl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJCXhmX2VtaXQoY3R4LCAyLCAweDRlM2JmZGYpOworCQl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQkJeGZfZW1pdChjdHgsIDEsIDB4MTEpOworCQl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspCisJCQlpZiAodW5pdHMgJiAoMTw8KGkrMTYpKSkKKwkJCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3JvcGMoY3R4KTsKKwkJaWYgKChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvOCA+IHNpemUpCisJCQlzaXplID0gKGN0eC0+Y3R4dmFsc19wb3Mtb2Zmc2V0KS84OworCisJCS8qIFN0cmFuZCA2ICovCisJCWN0eC0+Y3R4dmFsc19wb3MgPSBvZmZzZXQgKyA2OworCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazMoY3R4KTsKKwkJeGZfZW1pdChjdHgsIDB4YiwgMCk7CisJCW52NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rNChjdHgpOworCQludjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazcoY3R4KTsKKwkJaWYgKHVuaXRzICYgKDEgPDwgMCkpCisJCQludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwKGN0eCk7CisJCWlmICh1bml0cyAmICgxIDw8IDEpKQorCQkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cChjdHgpOworCQlpZiAodW5pdHMgJiAoMSA8PCAyKSkKKwkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAoY3R4KTsKKwkJaWYgKHVuaXRzICYgKDEgPDwgMykpCisJCQludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwKGN0eCk7CisJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJc2l6ZSA9IChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvODsKKworCQkvKiBTdHJhbmQgNyAqLworCQljdHgtPmN0eHZhbHNfcG9zID0gb2Zmc2V0ICsgNzsKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTApIHsKKwkJCWlmICh1bml0cyAmICgxIDw8IDQpKQorCQkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAoY3R4KTsKKwkJCWlmICh1bml0cyAmICgxIDw8IDUpKQorCQkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAoY3R4KTsKKwkJCWlmICh1bml0cyAmICgxIDw8IDYpKQorCQkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAoY3R4KTsKKwkJCWlmICh1bml0cyAmICgxIDw8IDcpKQorCQkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAoY3R4KTsKKwkJCWlmICh1bml0cyAmICgxIDw8IDgpKQorCQkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAoY3R4KTsKKwkJCWlmICh1bml0cyAmICgxIDw8IDkpKQorCQkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAoY3R4KTsKKwkJfSBlbHNlIHsKKwkJCW52NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rMihjdHgpOworCQl9CisJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJc2l6ZSA9IChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvODsKKwl9CisKKwljdHgtPmN0eHZhbHNfcG9zID0gb2Zmc2V0ICsgc2l6ZSAqIDg7CisJY3R4LT5jdHh2YWxzX3BvcyA9IChjdHgtPmN0eHZhbHNfcG9zKzB4M2YpJn4weDNmOworCWNwX2xzciAoY3R4LCBvZmZzZXQpOworCWNwX291dCAoY3R4LCBDUF9TRVRfWEZFUl9QT0lOVEVSKTsKKwljcF9sc3IgKGN0eCwgc2l6ZSk7CisJY3Bfb3V0IChjdHgsIENQX1NFRUtfMSk7CisJY3Bfb3V0IChjdHgsIENQX1hGRVJfMSk7CisJY3Bfd2FpdChjdHgsIFhGRVIsIEJVU1kpOworfQorCisvKgorICogbm9uLXRyaXZpYWwgZGVtYWdpY2VkIHBhcnRzIG9mIGN0eCBpbml0IGdvIGhlcmUKKyAqLworCitzdGF0aWMgdm9pZAorbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV9tMm1mKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJLyogbTJtZiBzdGF0ZSAqLworCXhmX2VtaXQgKGN0eCwgMSwgMCk7CQkvKiBETUFfTk9USUZZIGluc3RhbmNlID4+IDQgKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDApOwkJLyogRE1BX0JVRkZFUl9JTiBpbnN0YW5jZSA+PiA0ICovCisJeGZfZW1pdCAoY3R4LCAxLCAwKTsJCS8qIERNQV9CVUZGRVJfT1VUIGluc3RhbmNlID4+IDQgKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDApOwkJLyogT0ZGU0VUX0lOICovCisJeGZfZW1pdCAoY3R4LCAxLCAwKTsJCS8qIE9GRlNFVF9PVVQgKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDApOwkJLyogUElUQ0hfSU4gKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDApOwkJLyogUElUQ0hfT1VUICovCisJeGZfZW1pdCAoY3R4LCAxLCAwKTsJCS8qIExJTkVfTEVOR1RIICovCisJeGZfZW1pdCAoY3R4LCAxLCAwKTsJCS8qIExJTkVfQ09VTlQgKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDB4MjEpOwkJLyogRk9STUFUOiBiaXRzIDAtNCBJTlBVVF9JTkMsIGJpdHMgNS05IE9VVFBVVF9JTkMgKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDEpOwkJLyogTElORUFSX0lOICovCisJeGZfZW1pdCAoY3R4LCAxLCAweDIpOwkJLyogVElMSU5HX01PREVfSU46IGJpdHMgMC0yIHkgdGlsaW5nLCBiaXRzIDMtNSB6IHRpbGluZyAqLworCXhmX2VtaXQgKGN0eCwgMSwgMHgxMDApOwkvKiBUSUxJTkdfUElUQ0hfSU4gKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDB4MTAwKTsJLyogVElMSU5HX0hFSUdIVF9JTiAqLworCXhmX2VtaXQgKGN0eCwgMSwgMSk7CQkvKiBUSUxJTkdfREVQVEhfSU4gKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDApOwkJLyogVElMSU5HX1BPU0lUSU9OX0lOX1ogKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDApOwkJLyogVElMSU5HX1BPU0lUSU9OX0lOICovCisJeGZfZW1pdCAoY3R4LCAxLCAxKTsJCS8qIExJTkVBUl9PVVQgKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDB4Mik7CQkvKiBUSUxJTkdfTU9ERV9PVVQ6IGJpdHMgMC0yIHkgdGlsaW5nLCBiaXRzIDMtNSB6IHRpbGluZyAqLworCXhmX2VtaXQgKGN0eCwgMSwgMHgxMDApOwkvKiBUSUxJTkdfUElUQ0hfT1VUICovCisJeGZfZW1pdCAoY3R4LCAxLCAweDEwMCk7CS8qIFRJTElOR19IRUlHSFRfT1VUICovCisJeGZfZW1pdCAoY3R4LCAxLCAxKTsJCS8qIFRJTElOR19ERVBUSF9PVVQgKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDApOwkJLyogVElMSU5HX1BPU0lUSU9OX09VVF9aICovCisJeGZfZW1pdCAoY3R4LCAxLCAwKTsJCS8qIFRJTElOR19QT1NJVElPTl9PVVQgKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDApOwkJLyogT0ZGU0VUX0lOX0hJR0ggKi8KKwl4Zl9lbWl0IChjdHgsIDEsIDApOwkJLyogT0ZGU0VUX09VVF9ISUdIICovCit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazEoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmRldi0+ZGV2X3ByaXZhdGU7CisJLyogZW5kIG9mIGFyZWEgMiBvbiBwcmUtTlZBMCwgYXJlYSAxIG9uIE5WQXggKi8KKwl4Zl9lbWl0KGN0eCwgMiwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDgwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDB4ODBjMTQpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJeGZfZW1pdChjdHgsIDEsIDB4M2ZmKTsKKwllbHNlCisJCXhmX2VtaXQoY3R4LCAxLCAweDdmZik7CisJc3dpdGNoIChkZXZfcHJpdi0+Y2hpcHNldCkgeworCWNhc2UgMHg1MDoKKwljYXNlIDB4ODY6CisJY2FzZSAweDk4OgorCWNhc2UgMHhhYToKKwljYXNlIDB4YWM6CisJCXhmX2VtaXQoY3R4LCAweDU0MiwgMCk7CisJCWJyZWFrOworCWNhc2UgMHg4NDoKKwljYXNlIDB4OTI6CisJY2FzZSAweDk0OgorCWNhc2UgMHg5NjoKKwkJeGZfZW1pdChjdHgsIDB4OTQyLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAweGEwOgorCQl4Zl9lbWl0KGN0eCwgMHgyMDQyLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAweGE1OgorCWNhc2UgMHhhODoKKwkJeGZfZW1pdChjdHgsIDB4ODQyLCAwKTsKKwkJYnJlYWs7CisJfQorCXhmX2VtaXQoY3R4LCAyLCA0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4ODApOworCXhmX2VtaXQoY3R4LCAxLCA0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDI3KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MjYpOworCXhmX2VtaXQoY3R4LCAzLCAwKTsKK30KKworc3RhdGljIHZvaWQKK252NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rMTAoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwkvKiBlbmQgb2YgYXJlYSAyIG9uIHByZS1OVkEwLCBhcmVhIDEgb24gTlZBeCAqLworCXhmX2VtaXQoY3R4LCAweDEwLCAweDA0MDAwMDAwKTsKKwl4Zl9lbWl0KGN0eCwgMHgyNCwgMCk7CisJeGZfZW1pdChjdHgsIDIsIDB4MDRlM2JmZGYpOworCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxZmUyMSk7Cit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazIoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmRldi0+ZGV2X3ByaXZhdGU7CisJLyogbWlkZGxlIG9mIGFyZWEgMiBvbiBwcmUtTlZBMCwgYmVnaW5uaW5nIG9mIGFyZWEgMiBvbiBOVkEwLCBhcmVhIDcgb24gPk5WQTAgKi8KKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg1MCkgeworCQl4Zl9lbWl0KGN0eCwgNSwgMCk7CisJCXhmX2VtaXQoY3R4LCAxLCAweDgwYzE0KTsKKwkJeGZfZW1pdChjdHgsIDIsIDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMHg4MDQpOworCQl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJCXhmX2VtaXQoY3R4LCAyLCA0KTsKKwkJeGZfZW1pdChjdHgsIDEsIDB4ODEwMGMxMik7CisJfQorCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMiwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDEwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJeGZfZW1pdChjdHgsIDMsIDApOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDQsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDgwNCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAweDFhKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg1MCkKKwkJeGZfZW1pdChjdHgsIDEsIDB4N2YpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDB4ODBjMTQpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHg4MTAwYzEyKTsKKwl4Zl9lbWl0KGN0eCwgMiwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDEwKTsKKwl4Zl9lbWl0KGN0eCwgMywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAweDgxMDBjMTIpOworCXhmX2VtaXQoY3R4LCA2LCAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJeGZfZW1pdChjdHgsIDEsIDB4M2ZmKTsKKwllbHNlCisJCXhmX2VtaXQoY3R4LCAxLCAweDdmZik7CisJeGZfZW1pdChjdHgsIDEsIDB4ODBjMTQpOworCXhmX2VtaXQoY3R4LCAweDM4LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDIsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDEwKTsKKwl4Zl9lbWl0KGN0eCwgMHgzOCwgMCk7CisJeGZfZW1pdChjdHgsIDIsIDB4ODgpOworCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgNCk7CisJeGZfZW1pdChjdHgsIDB4MTYsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDI2KTsKKwl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4M2Y4MDAwMDApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MWEpOworCXhmX2VtaXQoY3R4LCAxLCAweDEwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgIT0gMHg1MCkKKwkJeGZfZW1pdChjdHgsIDB4MjgsIDApOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDB4MjUsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDUyKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MjYpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMiwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDFhKTsKKwl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MDBmZmZmMDApOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKK30KKworc3RhdGljIHZvaWQKK252NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rMyhzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGN0eC0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwkvKiBlbmQgb2YgYXJlYSAwIG9uIHByZS1OVkEwLCBiZWdpbm5pbmcgb2YgYXJlYSA2IG9uIE5WQXggKi8KKwl4Zl9lbWl0KGN0eCwgMSwgMHgzZik7CisJeGZfZW1pdChjdHgsIDB4YSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCXhmX2VtaXQoY3R4LCAyLCAweDA0MDAwMDAwKTsKKwl4Zl9lbWl0KGN0eCwgOCwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgNCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCXhmX2VtaXQoY3R4LCAweDEwLCAwKTsKKwllbHNlCisJCXhmX2VtaXQoY3R4LCAweDExLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDB4MTAwMSk7CisJeGZfZW1pdChjdHgsIDQsIDB4ZmZmZik7CisJeGZfZW1pdChjdHgsIDB4MjAsIDApOworCXhmX2VtaXQoY3R4LCAweDEwLCAweDNmODAwMDAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwllbHNlCisJCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMyk7CisJeGZfZW1pdChjdHgsIDIsIDApOworfQorCitzdGF0aWMgdm9pZAorbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV91bms0KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJLyogbWlkZGxlIG9mIGFyZWEgMCBvbiBwcmUtTlZBMCwgbWlkZGxlIG9mIGFyZWEgNiBvbiBOVkF4ICovCisJeGZfZW1pdChjdHgsIDIsIDB4MDQwMDAwMDApOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHg4MCk7CisJeGZfZW1pdChjdHgsIDMsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDgwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazUoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmRldi0+ZGV2X3ByaXZhdGU7CisJLyogbWlkZGxlIG9mIGFyZWEgMCBvbiBwcmUtTlZBMCBbYWZ0ZXIgbTJtZl0sIGVuZCBvZiBhcmVhIDIgb24gTlZBeCAqLworCXhmX2VtaXQoY3R4LCAyLCA0KTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkKKwkJeGZfZW1pdChjdHgsIDB4MWM0ZCwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMHgxYzRiLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMiwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDB4ODEwMGMxMik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NTApCisJCXhmX2VtaXQoY3R4LCAxLCAzKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4ODEwMGMxMik7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDgwYzE0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4YTApCisJCXhmX2VtaXQoY3R4LCAyLCA0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHg4MGMxNCk7CisJeGZfZW1pdChjdHgsIDIsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDgxMDBjMTIpOworCXhmX2VtaXQoY3R4LCAxLCAweDI3KTsKKwl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAweDNjMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAweDE2LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHg4MTAwYzEyKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3VuazYoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmRldi0+ZGV2X3ByaXZhdGU7CisJLyogYmVnaW5uaW5nIG9mIGFyZWEgMSBvbiBwcmUtTlZBMCBbYWZ0ZXIgbTJtZl0sIGFyZWEgMyBvbiBOVkF4ICovCisJeGZfZW1pdChjdHgsIDQsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweGYpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgOCwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MjApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMHgxMSwgMCk7CisJZWxzZSBpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkKKwkJeGZfZW1pdChjdHgsIDB4ZiwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMHhlLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxYSk7CisJeGZfZW1pdChjdHgsIDB4ZCwgMCk7CisJeGZfZW1pdChjdHgsIDIsIDQpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDgpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJeGZfZW1pdChjdHgsIDEsIDB4M2ZmKTsKKwllbHNlCisJCXhmX2VtaXQoY3R4LCAxLCAweDdmZik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4YTgpCisJCXhmX2VtaXQoY3R4LCAxLCAweDFlMDApOworCXhmX2VtaXQoY3R4LCAweGMsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweGYpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQl4Zl9lbWl0KGN0eCwgMHgxMjUsIDApOworCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJeGZfZW1pdChjdHgsIDB4MTI2LCAwKTsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweGEwIHx8IGRldl9wcml2LT5jaGlwc2V0ID49IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAweDEyNCwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMHgxZjcsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweGYpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMywgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMHhhMSwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMHg1YSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4Zik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJeGZfZW1pdChjdHgsIDB4ODM0LCAwKTsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweGEwKQorCQl4Zl9lbWl0KGN0eCwgMHgxODczLCAwKTsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMHg4YmEsIDApOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDB4ODMzLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHhmKTsKKwl4Zl9lbWl0KGN0eCwgMHhmLCAwKTsKK30KKworc3RhdGljIHZvaWQKK252NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfdW5rNyhzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGN0eC0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwkvKiBtaWRkbGUgb2YgYXJlYSAxIG9uIHByZS1OVkEwIFthZnRlciBtMm1mXSwgbWlkZGxlIG9mIGFyZWEgNiBvbiBOVkF4ICovCisJeGZfZW1pdChjdHgsIDIsIDApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQl4Zl9lbWl0KGN0eCwgMiwgMSk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMiwgMHgxMDApOworCXhmX2VtaXQoY3R4LCAxLCAweDExKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDgpOworCXhmX2VtaXQoY3R4LCA1LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAzLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHhjZik7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCXhmX2VtaXQoY3R4LCA2LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAzLCAxKTsKKwl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDB4MTUpOworCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHg0NDQ0NDgwKTsKKwl4Zl9lbWl0KGN0eCwgMHgzNywgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dyYXBoX2NvbnN0cnVjdF9nZW5lX3Vuazgoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwkvKiBtaWRkbGUgb2YgYXJlYSAxIG9uIHByZS1OVkEwIFthZnRlciBtMm1mXSwgbWlkZGxlIG9mIGFyZWEgMCBvbiBOVkF4ICovCisJeGZfZW1pdChjdHgsIDQsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDgxMDBjMTIpOworCXhmX2VtaXQoY3R4LCA0LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMDApOworCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMDAwMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDEwMDAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDB4MTAwMDEpOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworfQorCitzdGF0aWMgdm9pZAorbnY1MF9ncmFwaF9jb25zdHJ1Y3RfZ2VuZV91bms5KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY3R4LT5kZXYtPmRldl9wcml2YXRlOworCS8qIG1pZGRsZSBvZiBhcmVhIDIgb24gcHJlLU5WQTAgW2FmdGVyIG0ybWZdLCBlbmQgb2YgYXJlYSAwIG9uIE5WQXggKi8KKwl4Zl9lbWl0KGN0eCwgMSwgMHgzZjgwMDAwMCk7CisJeGZfZW1pdChjdHgsIDYsIDApOworCXhmX2VtaXQoY3R4LCAxLCA0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxYSk7CisJeGZfZW1pdChjdHgsIDIsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMHgxMiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MDBmZmZmMDApOworCXhmX2VtaXQoY3R4LCA2LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHhmKTsKKwl4Zl9lbWl0KGN0eCwgNywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MGZhYzY4ODEpOworCXhmX2VtaXQoY3R4LCAxLCAweDExKTsKKwl4Zl9lbWl0KGN0eCwgMHhmLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgNCk7CisJeGZfZW1pdChjdHgsIDIsIDApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMSwgMyk7CisJZWxzZSBpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkKKwkJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMik7CisJeGZfZW1pdChjdHgsIDIsIDB4MDQwMDAwMDApOworCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgNSk7CisJeGZfZW1pdChjdHgsIDEsIDB4NTIpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKSB7CisJCXhmX2VtaXQoY3R4LCAweDEzLCAwKTsKKwl9IGVsc2UgeworCQl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpCisJCQl4Zl9lbWl0KGN0eCwgMHgxMSwgMCk7CisJCWVsc2UKKwkJCXhmX2VtaXQoY3R4LCAweDEwLCAwKTsKKwl9CisJeGZfZW1pdChjdHgsIDB4MTAsIDB4M2Y4MDAwMDApOworCXhmX2VtaXQoY3R4LCAxLCAweDEwKTsKKwl4Zl9lbWl0KGN0eCwgMHgyNiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4ODEwMGMxMik7CisJeGZfZW1pdChjdHgsIDEsIDUpOworCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCA0LCAweGZmZmYpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDUwKQorCQl4Zl9lbWl0KGN0eCwgMSwgMyk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJeGZfZW1pdChjdHgsIDB4MWYsIDApOworCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAweGMsIDApOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDMsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDAwZmZmZjAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxYSk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4NTApIHsKKwkJeGZfZW1pdChjdHgsIDEsIDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMyk7CisJfQorCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApCisJCXhmX2VtaXQoY3R4LCAweDI2LCAwKTsKKwllbHNlCisJCXhmX2VtaXQoY3R4LCAweDNjLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMDIpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgNCwgNCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4YTApCisJCXhmX2VtaXQoY3R4LCA4LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMiwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQl4Zl9lbWl0KGN0eCwgMSwgMHgzZmYpOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDEsIDB4N2ZmKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MTAyKTsKKwl4Zl9lbWl0KGN0eCwgOSwgMCk7CisJeGZfZW1pdChjdHgsIDQsIDQpOworCXhmX2VtaXQoY3R4LCAweDJjLCAwKTsKK30KKworc3RhdGljIHZvaWQKK252NTBfZ3JhcGhfY29uc3RydWN0X2dlbmVfcm9wYyhzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGN0eC0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgbWFnaWMyOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKSB7CisJCW1hZ2ljMiA9IDB4MDAwMDNlNjA7CisJfSBlbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA8PSAweGEwIHx8IGRldl9wcml2LT5jaGlwc2V0ID49IDB4YWEpIHsKKwkJbWFnaWMyID0gMHgwMDFmZmU2NzsKKwl9IGVsc2UgeworCQltYWdpYzIgPSAweDAwMDg3ZTY3OworCX0KKwl4Zl9lbWl0KGN0eCwgOCwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgbWFnaWMyKTsKKwl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgNywgMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMSwgMHgxNSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMCk7CisJeGZfZW1pdChjdHgsIDIsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4ODYgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg5MiB8fCBkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDk4IHx8IGRldl9wcml2LT5jaGlwc2V0ID49IDB4YTApIHsKKwkJeGZfZW1pdChjdHgsIDEsIDQpOworCQl4Zl9lbWl0KGN0eCwgMSwgMHg0MDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMHgzMDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMHgxMDAxKTsKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IDB4YTApIHsKKwkJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQkJCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwkJCWVsc2UKKwkJCQl4Zl9lbWl0KGN0eCwgMSwgMHgxNSk7CisJCX0KKwkJeGZfZW1pdChjdHgsIDMsIDApOworCX0KKwl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCXhmX2VtaXQoY3R4LCA4LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDB4MTApOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDB4MTMsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDEwKTsKKwl4Zl9lbWl0KGN0eCwgMHgxMCwgMCk7CisJeGZfZW1pdChjdHgsIDB4MTAsIDB4M2Y4MDAwMDApOworCXhmX2VtaXQoY3R4LCAweDE5LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMCk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDNmKTsKKwl4Zl9lbWl0KGN0eCwgNiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkgeworCQl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJCXhmX2VtaXQoY3R4LCAxLCAweDEwMDEpOworCQl4Zl9lbWl0KGN0eCwgMHhiLCAwKTsKKwl9IGVsc2UgeworCQl4Zl9lbWl0KGN0eCwgMHhjLCAwKTsKKwl9CisJeGZfZW1pdChjdHgsIDEsIDB4MTEpOworCXhmX2VtaXQoY3R4LCA3LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHhmKTsKKwl4Zl9lbWl0KGN0eCwgNywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MTEpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgNiwgMCk7CisJeGZfZW1pdChjdHgsIDMsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAyKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIG1hZ2ljMik7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDBmYWM2ODgxKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkgeworCQl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJCXhmX2VtaXQoY3R4LCAweDE4LCAxKTsKKwkJeGZfZW1pdChjdHgsIDgsIDIpOworCQl4Zl9lbWl0KGN0eCwgOCwgMSk7CisJCXhmX2VtaXQoY3R4LCA4LCAyKTsKKwkJeGZfZW1pdChjdHgsIDgsIDEpOworCQl4Zl9lbWl0KGN0eCwgMywgMCk7CisJCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwkJeGZfZW1pdChjdHgsIDUsIDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJCXhmX2VtaXQoY3R4LCAweDE2LCAwKTsKKwl9IGVsc2UgeworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkKKwkJCXhmX2VtaXQoY3R4LCAweDFiLCAwKTsKKwkJZWxzZQorCQkJeGZfZW1pdChjdHgsIDB4MTUsIDApOworCX0KKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCXhmX2VtaXQoY3R4LCAyLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMik7CisJeGZfZW1pdChjdHgsIDIsIDEpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGEwKQorCQl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMywgMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpIHsKKwkJeGZfZW1pdChjdHgsIDB4MTAsIDEpOworCQl4Zl9lbWl0KGN0eCwgOCwgMik7CisJCXhmX2VtaXQoY3R4LCAweDEwLCAxKTsKKwkJeGZfZW1pdChjdHgsIDgsIDIpOworCQl4Zl9lbWl0KGN0eCwgOCwgMSk7CisJCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl9CisJeGZfZW1pdChjdHgsIDEsIDB4MTEpOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMHg1YiwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwX3gxKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY3R4LT5kZXYtPmRldl9wcml2YXRlOworCWludCBtYWdpYzM7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCW1hZ2ljMyA9IDB4MTAwMDsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDg2IHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4OTggfHwgZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhOCkKKwkJbWFnaWMzID0gMHgxZTAwOworCWVsc2UKKwkJbWFnaWMzID0gMDsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMHgyNCwgMCk7CisJZWxzZSBpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkKKwkJeGZfZW1pdChjdHgsIDB4MTQsIDApOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDB4MTUsIDApOworCXhmX2VtaXQoY3R4LCAyLCA0KTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhMCkKKwkJeGZfZW1pdChjdHgsIDEsIDB4MDMwMjAxMDApOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDEsIDB4MDA2MDgwODApOworCXhmX2VtaXQoY3R4LCA0LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgNCk7CisJeGZfZW1pdChjdHgsIDIsIDApOworCXhmX2VtaXQoY3R4LCAyLCA0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHg4MCk7CisJaWYgKG1hZ2ljMykKKwkJeGZfZW1pdChjdHgsIDEsIG1hZ2ljMyk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCXhmX2VtaXQoY3R4LCAweDI0LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgNCk7CisJeGZfZW1pdChjdHgsIDEsIDB4ODApOworCXhmX2VtaXQoY3R4LCAxLCA0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgwMzAyMDEwMCk7CisJeGZfZW1pdChjdHgsIDEsIDMpOworCWlmIChtYWdpYzMpCisJCXhmX2VtaXQoY3R4LCAxLCBtYWdpYzMpOworCXhmX2VtaXQoY3R4LCAxLCA0KTsKKwl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCXhmX2VtaXQoY3R4LCAxLCAzKTsKKwl4Zl9lbWl0KGN0eCwgMywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDk0IHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4OTYpCisJCXhmX2VtaXQoY3R4LCAweDEwMjQsIDApOworCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkKKwkJeGZfZW1pdChjdHgsIDB4YTI0LCAwKTsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweGEwIHx8IGRldl9wcml2LT5jaGlwc2V0ID49IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAweDIxNCwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMHg0MTQsIDApOworCXhmX2VtaXQoY3R4LCAxLCA0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMyk7CisJeGZfZW1pdChjdHgsIDIsIDApOworfQorCitzdGF0aWMgdm9pZAorbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cF94MihzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGN0eC0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgbWFnaWMxLCBtYWdpYzI7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApIHsKKwkJbWFnaWMxID0gMHgzZmY7CisJCW1hZ2ljMiA9IDB4MDAwMDNlNjA7CisJfSBlbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA8PSAweGEwIHx8IGRldl9wcml2LT5jaGlwc2V0ID49IDB4YWEpIHsKKwkJbWFnaWMxID0gMHg3ZmY7CisJCW1hZ2ljMiA9IDB4MDAxZmZlNjc7CisJfSBlbHNlIHsKKwkJbWFnaWMxID0gMHg3ZmY7CisJCW1hZ2ljMiA9IDB4MDAwODdlNjc7CisJfQorCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkKKwkJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAweGMsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweGYpOworCXhmX2VtaXQoY3R4LCAweGIsIDApOworCXhmX2VtaXQoY3R4LCAxLCA0KTsKKwl4Zl9lbWl0KGN0eCwgNCwgMHhmZmZmKTsKKwl4Zl9lbWl0KGN0eCwgOCwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDUsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpIHsKKwkJeGZfZW1pdChjdHgsIDEsIDMpOworCQl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJfSBlbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGEwKQorCQl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDB4YSwgMCk7CisJeGZfZW1pdChjdHgsIDIsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAyKTsKKwl4Zl9lbWl0KGN0eCwgMiwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKSB7CisJCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwkJeGZfZW1pdChjdHgsIDB4MTgsIDEpOworCQl4Zl9lbWl0KGN0eCwgOCwgMik7CisJCXhmX2VtaXQoY3R4LCA4LCAxKTsKKwkJeGZfZW1pdChjdHgsIDgsIDIpOworCQl4Zl9lbWl0KGN0eCwgOCwgMSk7CisJCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl9CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMSk7CisJeGZfZW1pdChjdHgsIDcsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDBmYWM2ODgxKTsKKwl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMSk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMywgMHhjZik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMHhhLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMiwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCXhmX2VtaXQoY3R4LCAyLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMik7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgOCwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDB4MTEpOworCXhmX2VtaXQoY3R4LCA3LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgwZmFjNjg4MSk7CisJeGZfZW1pdChjdHgsIDEsIDB4Zik7CisJeGZfZW1pdChjdHgsIDcsIDApOworCXhmX2VtaXQoY3R4LCAxLCBtYWdpYzIpOworCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMSk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAyLCAxKTsKKwllbHNlCisJCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwlpZihkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCXhmX2VtaXQoY3R4LCA1LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDQsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDExKTsKKwl4Zl9lbWl0KGN0eCwgNywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MGZhYzY4ODEpOworCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMSk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIG1hZ2ljMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkKKwkJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAweDI4LCAwKTsKKwl4Zl9lbWl0KGN0eCwgOCwgOCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MTEpOworCXhmX2VtaXQoY3R4LCA3LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgwZmFjNjg4MSk7CisJeGZfZW1pdChjdHgsIDgsIDB4NDAwKTsKKwl4Zl9lbWl0KGN0eCwgOCwgMHgzMDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHhmKTsKKwl4Zl9lbWl0KGN0eCwgNywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MjApOworCXhmX2VtaXQoY3R4LCAxLCAweDExKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMDApOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDIsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDQwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMDApOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMyk7CisJeGZfZW1pdChjdHgsIDQsIDApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIG1hZ2ljMik7CisJeGZfZW1pdChjdHgsIDMsIDApOworCXhmX2VtaXQoY3R4LCAxLCAyKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgwZmFjNjg4MSk7CisJeGZfZW1pdChjdHgsIDksIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDB4NDAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgzMDApOworCXhmX2VtaXQoY3R4LCAxLCAweDEwMDEpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MTEpOworCXhmX2VtaXQoY3R4LCA3LCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgwZmFjNjg4MSk7CisJeGZfZW1pdChjdHgsIDEsIDB4Zik7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpIHsKKwkJeGZfZW1pdChjdHgsIDB4MTUsIDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl9IGVsc2UKKwkJeGZfZW1pdChjdHgsIDB4MTcsIDApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGEwKQorCQl4Zl9lbWl0KGN0eCwgMSwgMHgwZmFjNjg4MSk7CisJeGZfZW1pdChjdHgsIDEsIG1hZ2ljMik7CisJeGZfZW1pdChjdHgsIDMsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDExKTsKKwl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDQpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMiwgMSk7CisJeGZfZW1pdChjdHgsIDMsIDApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMiwgMSk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSAweDUwKQorCQl4Zl9lbWl0KGN0eCwgMSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwX3gzKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY3R4LT5kZXYtPmRldl9wcml2YXRlOworCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJeGZfZW1pdChjdHgsIDIsIDApOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDMsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDJhNzEyNDg4KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4NDA4NWMwMDApOworCXhmX2VtaXQoY3R4LCAxLCAweDQwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgxMDApOworCXhmX2VtaXQoY3R4LCAxLCAweDEwMTAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgwMjgwMDAwMCk7Cit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwX3g0KHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY3R4LT5kZXYtPmRldl9wcml2YXRlOworCXhmX2VtaXQoY3R4LCAyLCAweDA0ZTNiZmRmKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDAwZmZmZjAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkKKwkJeGZfZW1pdChjdHgsIDIsIDEpOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHgwMGZmZmYwMCk7CisJeGZfZW1pdChjdHgsIDgsIDApOworCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAweDMwMjAxMDAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMHg3MDYwNTA0MCk7CisJeGZfZW1pdChjdHgsIDEsIDB4YjhhODk4ODgpOworCXhmX2VtaXQoY3R4LCAxLCAweGY4ZThkOGM4KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MWEpOworfQorCitzdGF0aWMgdm9pZAorbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cF94NShzdHJ1Y3Qgbm91dmVhdV9ncmN0eCAqY3R4KQoreworCXN0cnVjdCBkcm1fbm91dmVhdV9wcml2YXRlICpkZXZfcHJpdiA9IGN0eC0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwl4Zl9lbWl0KGN0eCwgMywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4ZmFjNjg4MSk7CisJeGZfZW1pdChjdHgsIDQsIDApOworCXhmX2VtaXQoY3R4LCAxLCA0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDIsIDEpOworCXhmX2VtaXQoY3R4LCAyLCAwKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAweGIsIDApOworCWVsc2UKKwkJeGZfZW1pdChjdHgsIDB4YSwgMCk7CisJeGZfZW1pdChjdHgsIDgsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAweDExKTsKKwl4Zl9lbWl0KGN0eCwgNywgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4ZmFjNjg4MSk7CisJeGZfZW1pdChjdHgsIDEsIDB4Zik7CisJeGZfZW1pdChjdHgsIDcsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDExKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpIHsKKwkJeGZfZW1pdChjdHgsIDYsIDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJCXhmX2VtaXQoY3R4LCA2LCAwKTsKKwl9IGVsc2UgeworCQl4Zl9lbWl0KGN0eCwgMHhiLCAwKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitudjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY3R4LT5kZXYtPmRldl9wcml2YXRlOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTApIHsKKwkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cF94MShjdHgpOworCQludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwX3gyKGN0eCk7CisJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHBfeDMoY3R4KTsKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID09IDB4NTApCisJCQl4Zl9lbWl0KGN0eCwgMHhmLCAwKTsKKwkJZWxzZQorCQkJeGZfZW1pdChjdHgsIDB4MTIsIDApOworCQludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwX3g0KGN0eCk7CisJfSBlbHNlIHsKKwkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cF94MyhjdHgpOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQkJeGZfZW1pdChjdHgsIDB4YywgMCk7CisJCWVsc2UKKwkJCXhmX2VtaXQoY3R4LCAweGEsIDApOworCQludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwX3gyKGN0eCk7CisJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHBfeDUoY3R4KTsKKwkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cF94NChjdHgpOworCQludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwX3gxKGN0eCk7CisJfQorfQorCitzdGF0aWMgdm9pZAorbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cDIoc3RydWN0IG5vdXZlYXVfZ3JjdHggKmN0eCkKK3sKKwlzdHJ1Y3QgZHJtX25vdXZlYXVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBjdHgtPmRldi0+ZGV2X3ByaXZhdGU7CisJaW50IGksIG1wY250OworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDk4IHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4YWEpCisJCW1wY250ID0gMTsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YTAgfHwgZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhOCkKKwkJbXBjbnQgPSAyOworCWVsc2UKKwkJbXBjbnQgPSAzOworCWZvciAoaSA9IDA7IGkgPCBtcGNudDsgaSsrKSB7CisJCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwkJeGZfZW1pdChjdHgsIDEsIDB4ODApOworCQl4Zl9lbWl0KGN0eCwgMSwgMHg4MDAwNzAwNCk7CisJCXhmX2VtaXQoY3R4LCAxLCAweDA0MDAwNDAwKTsKKwkJaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4YTApCisJCQl4Zl9lbWl0KGN0eCwgMSwgMHhjMCk7CisJCXhmX2VtaXQoY3R4LCAxLCAweDEwMDApOworCQl4Zl9lbWl0KGN0eCwgMiwgMCk7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDg2IHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4OTggfHwgZGV2X3ByaXYtPmNoaXBzZXQgPj0gMHhhOCkgeworCQkJeGZfZW1pdChjdHgsIDEsIDB4ZTAwKTsKKwkJCXhmX2VtaXQoY3R4LCAxLCAweDFlMDApOworCQl9CisJCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwkJeGZfZW1pdChjdHgsIDIsIDApOworCQlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPT0gMHg1MCkKKwkJCXhmX2VtaXQoY3R4LCAyLCAweDEwMDApOworCQl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwkJeGZfZW1pdChjdHgsIDEsIDQpOworCQl4Zl9lbWl0KGN0eCwgMSwgMik7CisJCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+PSAweGFhKQorCQkJeGZfZW1pdChjdHgsIDB4YiwgMCk7CisJCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4YTApCisJCQl4Zl9lbWl0KGN0eCwgMHhjLCAwKTsKKwkJZWxzZQorCQkJeGZfZW1pdChjdHgsIDB4YSwgMCk7CisJfQorCXhmX2VtaXQoY3R4LCAxLCAweDA4MTAwYzEyKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID49IDB4YTApIHsKKwkJeGZfZW1pdChjdHgsIDEsIDB4MWZlMjEpOworCX0KKwl4Zl9lbWl0KGN0eCwgNSwgMCk7CisJeGZfZW1pdChjdHgsIDQsIDB4ZmZmZik7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAyLCAweDEwMDAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDFmZTIxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ID4gMHhhMCAmJiBkZXZfcHJpdi0+Y2hpcHNldCA8IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAxLCAxKTsKKwl4Zl9lbWl0KGN0eCwgNCwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4MDgxMDBjMTIpOworCXhmX2VtaXQoY3R4LCAxLCA0KTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCXhmX2VtaXQoY3R4LCAxLCAweDExKTsKKwl4Zl9lbWl0KGN0eCwgOCwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDB4ZmFjNjg4MSk7CisJeGZfZW1pdChjdHgsIDEsIDApOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA+IDB4YTAgJiYgZGV2X3ByaXYtPmNoaXBzZXQgPCAweGFhKQorCQl4Zl9lbWl0KGN0eCwgMSwgMyk7CisJeGZfZW1pdChjdHgsIDMsIDApOworCXhmX2VtaXQoY3R4LCAxLCA0KTsKKwl4Zl9lbWl0KGN0eCwgOSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDIpOworCXhmX2VtaXQoY3R4LCAyLCAxKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMik7CisJeGZfZW1pdChjdHgsIDMsIDEpOworCXhmX2VtaXQoY3R4LCAxLCAwKTsKKwlpZiAoZGV2X3ByaXYtPmNoaXBzZXQgPiAweGEwICYmIGRldl9wcml2LT5jaGlwc2V0IDwgMHhhYSkgeworCQl4Zl9lbWl0KGN0eCwgOCwgMik7CisJCXhmX2VtaXQoY3R4LCAweDEwLCAxKTsKKwkJeGZfZW1pdChjdHgsIDgsIDIpOworCQl4Zl9lbWl0KGN0eCwgMHgxOCwgMSk7CisJCXhmX2VtaXQoY3R4LCAzLCAwKTsKKwl9CisJeGZfZW1pdChjdHgsIDEsIDQpOworCWlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDUwKQorCQl4Zl9lbWl0KGN0eCwgMHgzYTAsIDApOworCWVsc2UgaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHg5NCkKKwkJeGZfZW1pdChjdHgsIDB4M2EyLCAwKTsKKwllbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCA9PSAweDk4IHx8IGRldl9wcml2LT5jaGlwc2V0ID09IDB4YWEpCisJCXhmX2VtaXQoY3R4LCAweDM5ZiwgMCk7CisJZWxzZQorCQl4Zl9lbWl0KGN0eCwgMHgzYTMsIDApOworCXhmX2VtaXQoY3R4LCAxLCAweDExKTsKKwl4Zl9lbWl0KGN0eCwgMSwgMCk7CisJeGZfZW1pdChjdHgsIDEsIDEpOworCXhmX2VtaXQoY3R4LCAweDJkLCAwKTsKK30KKworc3RhdGljIHZvaWQKK252NTBfZ3JhcGhfY29uc3RydWN0X3hmZXIyKHN0cnVjdCBub3V2ZWF1X2dyY3R4ICpjdHgpCit7CisJc3RydWN0IGRybV9ub3V2ZWF1X3ByaXZhdGUgKmRldl9wcml2ID0gY3R4LT5kZXYtPmRldl9wcml2YXRlOworCWludCBpOworCXVpbnQzMl90IG9mZnNldDsKKwl1aW50MzJfdCB1bml0cyA9IG52X3JkMzIgKGN0eC0+ZGV2LCAweDE1NDApOworCWludCBzaXplID0gMDsKKworCW9mZnNldCA9IChjdHgtPmN0eHZhbHNfcG9zKzB4M2YpJn4weDNmOworCisJaWYgKGRldl9wcml2LT5jaGlwc2V0IDwgMHhhMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCQljdHgtPmN0eHZhbHNfcG9zID0gb2Zmc2V0ICsgaTsKKwkJCWlmIChpID09IDApCisJCQkJeGZfZW1pdChjdHgsIDEsIDB4MDgxMDBjMTIpOworCQkJaWYgKHVuaXRzICYgKDEgPDwgaSkpCisJCQkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cDIoY3R4KTsKKwkJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJCXNpemUgPSAoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzg7CisJCX0KKwl9IGVsc2UgeworCQkvKiBTdHJhbmQgMDogVFBzIDAsIDEgKi8KKwkJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldDsKKwkJeGZfZW1pdChjdHgsIDEsIDB4MDgxMDBjMTIpOworCQlpZiAodW5pdHMgJiAoMSA8PCAwKSkKKwkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAyKGN0eCk7CisJCWlmICh1bml0cyAmICgxIDw8IDEpKQorCQkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cDIoY3R4KTsKKwkJaWYgKChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvOCA+IHNpemUpCisJCQlzaXplID0gKGN0eC0+Y3R4dmFsc19wb3Mtb2Zmc2V0KS84OworCisJCS8qIFN0cmFuZCAwOiBUUHMgMiwgMyAqLworCQljdHgtPmN0eHZhbHNfcG9zID0gb2Zmc2V0ICsgMTsKKwkJaWYgKHVuaXRzICYgKDEgPDwgMikpCisJCQludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwMihjdHgpOworCQlpZiAodW5pdHMgJiAoMSA8PCAzKSkKKwkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAyKGN0eCk7CisJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJc2l6ZSA9IChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvODsKKworCQkvKiBTdHJhbmQgMDogVFBzIDQsIDUsIDYgKi8KKwkJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldCArIDI7CisJCWlmICh1bml0cyAmICgxIDw8IDQpKQorCQkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cDIoY3R4KTsKKwkJaWYgKHVuaXRzICYgKDEgPDwgNSkpCisJCQludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwMihjdHgpOworCQlpZiAodW5pdHMgJiAoMSA8PCA2KSkKKwkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAyKGN0eCk7CisJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJc2l6ZSA9IChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvODsKKworCQkvKiBTdHJhbmQgMDogVFBzIDcsIDgsIDkgKi8KKwkJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldCArIDM7CisJCWlmICh1bml0cyAmICgxIDw8IDcpKQorCQkJbnY1MF9ncmFwaF9jb25zdHJ1Y3RfeGZlcl90cDIoY3R4KTsKKwkJaWYgKHVuaXRzICYgKDEgPDwgOCkpCisJCQludjUwX2dyYXBoX2NvbnN0cnVjdF94ZmVyX3RwMihjdHgpOworCQlpZiAodW5pdHMgJiAoMSA8PCA5KSkKKwkJCW52NTBfZ3JhcGhfY29uc3RydWN0X3hmZXJfdHAyKGN0eCk7CisJCWlmICgoY3R4LT5jdHh2YWxzX3Bvcy1vZmZzZXQpLzggPiBzaXplKQorCQkJc2l6ZSA9IChjdHgtPmN0eHZhbHNfcG9zLW9mZnNldCkvODsKKwl9CisJY3R4LT5jdHh2YWxzX3BvcyA9IG9mZnNldCArIHNpemUgKiA4OworCWN0eC0+Y3R4dmFsc19wb3MgPSAoY3R4LT5jdHh2YWxzX3BvcysweDNmKSZ+MHgzZjsKKwljcF9sc3IgKGN0eCwgb2Zmc2V0KTsKKwljcF9vdXQgKGN0eCwgQ1BfU0VUX1hGRVJfUE9JTlRFUik7CisJY3BfbHNyIChjdHgsIHNpemUpOworCWNwX291dCAoY3R4LCBDUF9TRUVLXzIpOworCWNwX291dCAoY3R4LCBDUF9YRkVSXzIpOworCWNwX3dhaXQoY3R4LCBYRkVSLCBCVVNZKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ub3V2ZWF1L252NTBfaW5zdG1lbS5jIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9pbnN0bWVtLmMKaW5kZXggZjBkYzRlMy4uZGUxZjViMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9pbnN0bWVtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbnY1MF9pbnN0bWVtLmMKQEAgLTM5MCw3ICszOTAsNyBAQAogCWlmIChncHVvYmotPmltX2JhY2tpbmcpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JKnN6ID0gKCpzeiArIChOVjUwX0lOU1RNRU1fUEFHRV9TSVpFLTEpKSAmIH4oTlY1MF9JTlNUTUVNX1BBR0VfU0laRS0xKTsKKwkqc3ogPSBBTElHTigqc3osIE5WNTBfSU5TVE1FTV9QQUdFX1NJWkUpOwogCWlmICgqc3ogPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL01ha2VmaWxlCmluZGV4IDFjYzdiOTMuLmVkMzgyNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQpAQCAtMzAsNiArMzAsOSBAQAogJChvYmopL3JzNjAwX3JlZ19zYWZlLmg6ICQoc3JjKS9yZWdfc3Jjcy9yczYwMCAkKG9iaikvbWtyZWd0YWJsZQogCSQoY2FsbCBpZl9jaGFuZ2VkLG1rcmVndGFibGUpCiAKKyQob2JqKS9yNjAwX3JlZ19zYWZlLmg6ICQoc3JjKS9yZWdfc3Jjcy9yNjAwICQob2JqKS9ta3JlZ3RhYmxlCisJJChjYWxsIGlmX2NoYW5nZWQsbWtyZWd0YWJsZSkKKwogJChvYmopL3IxMDAubzogJChvYmopL3IxMDBfcmVnX3NhZmUuaCAkKG9iaikvcm41MF9yZWdfc2FmZS5oCiAKICQob2JqKS9yMjAwLm86ICQob2JqKS9yMjAwX3JlZ19zYWZlLmgKQEAgLTQyLDYgKzQ1LDggQEAKIAogJChvYmopL3JzNjAwLm86ICQob2JqKS9yczYwMF9yZWdfc2FmZS5oCiAKKyQob2JqKS9yNjAwX2NzLm86ICQob2JqKS9yNjAwX3JlZ19zYWZlLmgKKwogcmFkZW9uLXkgOj0gcmFkZW9uX2Rydi5vIHJhZGVvbl9jcC5vIHJhZGVvbl9zdGF0ZS5vIHJhZGVvbl9tZW0ubyBcCiAJcmFkZW9uX2lycS5vIHIzMDBfY21kYnVmLm8gcjYwMF9jcC5vCiAjIGFkZCBLTVMgZHJpdmVyCkBAIC01NCw4ICs1OSwxMCBAQAogCXJhZGVvbl9jcy5vIHJhZGVvbl9iaW9zLm8gcmFkZW9uX2JlbmNobWFyay5vIHIxMDAubyByMzAwLm8gcjQyMC5vIFwKIAlyczQwMC5vIHJzNjAwLm8gcnM2OTAubyBydjUxNS5vIHI1MjAubyByNjAwLm8gcnY3NzAubyByYWRlb25fdGVzdC5vIFwKIAlyMjAwLm8gcmFkZW9uX2xlZ2FjeV90di5vIHI2MDBfY3MubyByNjAwX2JsaXQubyByNjAwX2JsaXRfc2hhZGVycy5vIFwKLQlyNjAwX2JsaXRfa21zLm8gcmFkZW9uX3BtLm8gYXRvbWJpb3NfZHAubyByNjAwX2F1ZGlvLm8gcjYwMF9oZG1pLm8KKwlyNjAwX2JsaXRfa21zLm8gcmFkZW9uX3BtLm8gYXRvbWJpb3NfZHAubyByNjAwX2F1ZGlvLm8gcjYwMF9oZG1pLm8gXAorCWV2ZXJncmVlbi5vCiAKIHJhZGVvbi0kKENPTkZJR19DT01QQVQpICs9IHJhZGVvbl9pb2MzMi5vCityYWRlb24tJChDT05GSUdfVkdBX1NXSVRDSEVST08pICs9IHJhZGVvbl9hdHB4X2hhbmRsZXIubwogCiBvYmotJChDT05GSUdfRFJNX1JBREVPTikrPSByYWRlb24ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYwppbmRleCA3ZjE1MmY2Li5kNzU3ODhmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b20uYwpAQCAtODgxLDggKzg4MSw2IEBACiAJdWludDhfdCBhdHRyID0gVTgoKCpwdHIpKyspLCBzaGlmdDsKIAl1aW50MzJfdCBzYXZlZCwgZHN0OwogCWludCBkcHRyID0gKnB0cjsKLQlhdHRyICY9IDB4Mzg7Ci0JYXR0ciB8PSBhdG9tX2RlZl9kc3RbYXR0ciA+PiAzXSA8PCA2OwogCVNERUJVRygiICAgZHN0OiAiKTsKIAlkc3QgPSBhdG9tX2dldF9kc3QoY3R4LCBhcmcsIGF0dHIsIHB0ciwgJnNhdmVkLCAxKTsKIAlzaGlmdCA9IGF0b21fZ2V0X3NyYyhjdHgsIGF0dHIsIHB0cik7CkBAIC04OTcsOCArODk1LDYgQEAKIAl1aW50OF90IGF0dHIgPSBVOCgoKnB0cikrKyksIHNoaWZ0OwogCXVpbnQzMl90IHNhdmVkLCBkc3Q7CiAJaW50IGRwdHIgPSAqcHRyOwotCWF0dHIgJj0gMHgzODsKLQlhdHRyIHw9IGF0b21fZGVmX2RzdFthdHRyID4+IDNdIDw8IDY7CiAJU0RFQlVHKCIgICBkc3Q6ICIpOwogCWRzdCA9IGF0b21fZ2V0X2RzdChjdHgsIGFyZywgYXR0ciwgcHRyLCAmc2F2ZWQsIDEpOwogCXNoaWZ0ID0gYXRvbV9nZXRfc3JjKGN0eCwgYXR0ciwgcHRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3MuaAppbmRleCA5MWFkMGQxLi42NzMyYjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvcy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAyMDA2LTIwMDcgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDYtMjAwNyBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICAKICAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQogICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKQEAgLTIwLDEwICsyMCwxMiBAQAogICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgogICovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCiAvKlBvcnRpb24gSTogRGVmaW5pdGlvbnMgIHNoYXJlZCBiZXR3ZWVuIFZCSU9TIGFuZCBEcml2ZXIgICAgICAgICAgICAgICAgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisKICNpZm5kZWYgX0FUT01CSU9TX0gKICNkZWZpbmUgX0FUT01CSU9TX0gKIApAQCAtNDAsMzkgKzQyLDQ2IEBACiAjZW5kaWYKIAogI2lmZGVmIF9IMklOQwotI2lmbmRlZiBVTE9ORwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIFVMT05HOwotI2VuZGlmCisgICNpZm5kZWYgVUxPTkcgCisgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIFVMT05HOworICAjZW5kaWYKIAotI2lmbmRlZiBVQ0hBUgotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIFVDSEFSOwotI2VuZGlmCisgICNpZm5kZWYgVUNIQVIKKyAgICB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgVUNIQVI7CisgICNlbmRpZgogCi0jaWZuZGVmIFVTSE9SVAotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBVU0hPUlQ7CisgICNpZm5kZWYgVVNIT1JUIAorICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgVVNIT1JUOworICAjZW5kaWYKICNlbmRpZgotI2VuZGlmCi0KLSNkZWZpbmUgQVRPTV9EQUNfQSAgICAgICAgICAgIDAKKyAgICAgIAorI2RlZmluZSBBVE9NX0RBQ19BICAgICAgICAgICAgMCAKICNkZWZpbmUgQVRPTV9EQUNfQiAgICAgICAgICAgIDEKICNkZWZpbmUgQVRPTV9FWFRfREFDICAgICAgICAgIDIKIAogI2RlZmluZSBBVE9NX0NSVEMxICAgICAgICAgICAgMAogI2RlZmluZSBBVE9NX0NSVEMyICAgICAgICAgICAgMQorI2RlZmluZSBBVE9NX0NSVEMzICAgICAgICAgICAgMgorI2RlZmluZSBBVE9NX0NSVEM0ICAgICAgICAgICAgMworI2RlZmluZSBBVE9NX0NSVEM1ICAgICAgICAgICAgNAorI2RlZmluZSBBVE9NX0NSVEM2ICAgICAgICAgICAgNQorI2RlZmluZSBBVE9NX0NSVENfSU5WQUxJRCAgICAgMHhGRgogCiAjZGVmaW5lIEFUT01fRElHQSAgICAgICAgICAgICAwCiAjZGVmaW5lIEFUT01fRElHQiAgICAgICAgICAgICAxCiAKICNkZWZpbmUgQVRPTV9QUExMMSAgICAgICAgICAgIDAKICNkZWZpbmUgQVRPTV9QUExMMiAgICAgICAgICAgIDEKKyNkZWZpbmUgQVRPTV9EQ1BMTCAgICAgICAgICAgIDIKKyNkZWZpbmUgQVRPTV9QUExMX0lOVkFMSUQgICAgIDB4RkYKIAogI2RlZmluZSBBVE9NX1NDQUxFUjEgICAgICAgICAgMAogI2RlZmluZSBBVE9NX1NDQUxFUjIgICAgICAgICAgMQogCi0jZGVmaW5lIEFUT01fU0NBTEVSX0RJU0FCTEUgICAwCi0jZGVmaW5lIEFUT01fU0NBTEVSX0NFTlRFUiAgICAxCi0jZGVmaW5lIEFUT01fU0NBTEVSX0VYUEFOU0lPTiAyCi0jZGVmaW5lIEFUT01fU0NBTEVSX01VTFRJX0VYICAzCisjZGVmaW5lIEFUT01fU0NBTEVSX0RJU0FCTEUgICAwICAgCisjZGVmaW5lIEFUT01fU0NBTEVSX0NFTlRFUiAgICAxICAgCisjZGVmaW5lIEFUT01fU0NBTEVSX0VYUEFOU0lPTiAyICAgCisjZGVmaW5lIEFUT01fU0NBTEVSX01VTFRJX0VYICAzICAgCiAKICNkZWZpbmUgQVRPTV9ESVNBQkxFICAgICAgICAgIDAKICNkZWZpbmUgQVRPTV9FTkFCTEUgICAgICAgICAgIDEKQEAgLTgyLDYgKzkxLDcgQEAKICNkZWZpbmUgQVRPTV9MQ0RfU0VMRlRFU1RfU1RBUlQJCQkJCQkJCQkoQVRPTV9ESVNBQkxFKzUpCiAjZGVmaW5lIEFUT01fTENEX1NFTEZURVNUX1NUT1AJCQkJCQkJCQkoQVRPTV9FTkFCTEUrNSkKICNkZWZpbmUgQVRPTV9FTkNPREVSX0lOSVQJCQkgICAgICAgICAgICAgICAgICAoQVRPTV9ESVNBQkxFKzcpCisjZGVmaW5lIEFUT01fR0VUX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAoQVRPTV9ESVNBQkxFKzgpCiAKICNkZWZpbmUgQVRPTV9CTEFOS0lORyAgICAgICAgIDEKICNkZWZpbmUgQVRPTV9CTEFOS0lOR19PRkYgICAgIDAKQEAgLTExNCw3ICsxMjQsNyBAQAogI2RlZmluZSBBVE9NX0RBQzJfQ1YgICAgICAgICAgQVRPTV9EQUMxX0NWCiAjZGVmaW5lIEFUT01fREFDMl9OVFNDICAgICAgICBBVE9NX0RBQzFfTlRTQwogI2RlZmluZSBBVE9NX0RBQzJfUEFMICAgICAgICAgQVRPTV9EQUMxX1BBTAotCisgCiAjZGVmaW5lIEFUT01fUE1fT04gICAgICAgICAgICAwCiAjZGVmaW5lIEFUT01fUE1fU1RBTkRCWSAgICAgICAxCiAjZGVmaW5lIEFUT01fUE1fU1VTUEVORCAgICAgICAyCkBAIC0xMzQsNiArMTQ0LDcgQEAKICNkZWZpbmUgQVRPTV9QQU5FTF9NSVNDX1RFTVBPUkFMICAgICAgICAgICAweDAwMDAwMDQwCiAjZGVmaW5lIEFUT01fUEFORUxfTUlTQ19BUElfRU5BQkxFRCAgICAgICAgMHgwMDAwMDA4MAogCisKICNkZWZpbmUgTUVNVFlQRV9ERFIxICAgICAgICAgICAgICAiRERSMSIKICNkZWZpbmUgTUVNVFlQRV9ERFIyICAgICAgICAgICAgICAiRERSMiIKICNkZWZpbmUgTUVNVFlQRV9ERFIzICAgICAgICAgICAgICAiRERSMyIKQEAgLTE0NSwxOSArMTU2LDE5IEBACiAKIC8qIE1heGltdW0gc2l6ZSBvZiB0aGF0IEZpcmVHTCBmbGFnIHN0cmluZyAqLwogCi0jZGVmaW5lIEFUT01fRklSRUdMX0ZMQUdfU1RSSU5HICAgICAiRkdMIgkvKiBGbGFnIHVzZWQgdG8gZW5hYmxlIEZpcmVHTCBTdXBwb3J0ICovCi0jZGVmaW5lIEFUT01fTUFYX1NJWkVfT0ZfRklSRUdMX0ZMQUdfU1RSSU5HICAzCS8qIHNpemVvZiggQVRPTV9GSVJFR0xfRkxBR19TVFJJTkcgKSAqLworI2RlZmluZSBBVE9NX0ZJUkVHTF9GTEFHX1NUUklORyAgICAgIkZHTCIgICAgICAgICAgICAgLy9GbGFnIHVzZWQgdG8gZW5hYmxlIEZpcmVHTCBTdXBwb3J0CisjZGVmaW5lIEFUT01fTUFYX1NJWkVfT0ZfRklSRUdMX0ZMQUdfU1RSSU5HICAzICAgICAgICAvL3NpemVvZiggQVRPTV9GSVJFR0xfRkxBR19TVFJJTkcgKQogCi0jZGVmaW5lIEFUT01fRkFLRV9ERVNLVE9QX1NUUklORyAgICAiRFNLIgkvKiBGbGFnIHVzZWQgdG8gZW5hYmxlIG1vYmlsZSBBU0lDIG9uIERlc2t0b3AgKi8KLSNkZWZpbmUgQVRPTV9NQVhfU0laRV9PRl9GQUtFX0RFU0tUT1BfU1RSSU5HICBBVE9NX01BWF9TSVpFX09GX0ZJUkVHTF9GTEFHX1NUUklORworI2RlZmluZSBBVE9NX0ZBS0VfREVTS1RPUF9TVFJJTkcgICAgIkRTSyIgICAgICAgICAgICAgLy9GbGFnIHVzZWQgdG8gZW5hYmxlIG1vYmlsZSBBU0lDIG9uIERlc2t0b3AKKyNkZWZpbmUgQVRPTV9NQVhfU0laRV9PRl9GQUtFX0RFU0tUT1BfU1RSSU5HICBBVE9NX01BWF9TSVpFX09GX0ZJUkVHTF9GTEFHX1NUUklORyAKIAotI2RlZmluZSBBVE9NX001NFRfRkxBR19TVFJJTkcgICAgICAgIk01NFQiCS8qIEZsYWcgdXNlZCB0byBlbmFibGUgTTU0VCBTdXBwb3J0ICovCi0jZGVmaW5lIEFUT01fTUFYX1NJWkVfT0ZfTTU0VF9GTEFHX1NUUklORyAgICA0CS8qIHNpemVvZiggQVRPTV9NNTRUX0ZMQUdfU1RSSU5HICkgKi8KKyNkZWZpbmUgQVRPTV9NNTRUX0ZMQUdfU1RSSU5HICAgICAgICJNNTRUIiAgICAgICAgICAgIC8vRmxhZyB1c2VkIHRvIGVuYWJsZSBNNTRUIFN1cHBvcnQKKyNkZWZpbmUgQVRPTV9NQVhfU0laRV9PRl9NNTRUX0ZMQUdfU1RSSU5HICAgIDQgICAgICAgIC8vc2l6ZW9mKCBBVE9NX001NFRfRkxBR19TVFJJTkcgKQogCiAjZGVmaW5lIEhXX0FTU0lTVEVEX0kyQ19TVEFUVVNfRkFJTFVSRSAgICAgICAgICAyCiAjZGVmaW5lIEhXX0FTU0lTVEVEX0kyQ19TVEFUVVNfU1VDQ0VTUyAgICAgICAgICAxCiAKLSNwcmFnbWEgcGFjaygxKQkJCS8qIEJJT1MgZGF0YSBtdXN0IHVzZSBieXRlIGFsaWdtZW50ICovCisjcHJhZ21hIHBhY2soMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCSU9TIGRhdGEgbXVzdCB1c2UgYnl0ZSBhbGlnbWVudCAqLwogCiAvKiAgRGVmaW5lIG9mZnNldCB0byBsb2NhdGlvbiBvZiBST00gaGVhZGVyLiAqLwogCkBAIC0xNjUsMzY3ICsxNzYsNDEwIEBACiAjZGVmaW5lIE9GRlNFVF9UT19BVE9NX1JPTV9JTUFHRV9TSVpFCQkJCSAgICAweDAwMDAwMDAyTAogCiAjZGVmaW5lIE9GRlNFVF9UT19BVE9NQklPU19BU0lDX0JVU19NRU1fVFlQRSAgICAweDk0Ci0jZGVmaW5lIE1BWFNJWkVfT0ZfQVRPTUJJT1NfQVNJQ19CVVNfTUVNX1RZUEUgICAyMAkvKiBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0b3IgMHgwISAqLworI2RlZmluZSBNQVhTSVpFX09GX0FUT01CSU9TX0FTSUNfQlVTX01FTV9UWVBFICAgMjAgICAgLyogaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdG9yIDB4MCEgKi8KICNkZWZpbmUJT0ZGU0VUX1RPX0dFVF9BVE9NQklPU19TVFJJTkdTX05VTUJFUgkJMHgwMDJmCiAjZGVmaW5lCU9GRlNFVF9UT19HRVRfQVRPTUJJT1NfU1RSSU5HU19TVEFSVAkJMHgwMDZlCiAKIC8qIENvbW1vbiBoZWFkZXIgZm9yIGFsbCBST00gRGF0YSB0YWJsZXMuCi0gIEV2ZXJ5IHRhYmxlIHBvaW50ZWQgIF9BVE9NX01BU1RFUl9EQVRBX1RBQkxFIGhhcyB0aGlzIGNvbW1vbiBoZWFkZXIuCisgIEV2ZXJ5IHRhYmxlIHBvaW50ZWQgIF9BVE9NX01BU1RFUl9EQVRBX1RBQkxFIGhhcyB0aGlzIGNvbW1vbiBoZWFkZXIuIAogICBBbmQgdGhlIHBvaW50ZXIgYWN0dWFsbHkgcG9pbnRzIHRvIHRoaXMgaGVhZGVyLiAqLwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHsKLQlVU0hPUlQgdXNTdHJ1Y3R1cmVTaXplOwotCVVDSEFSIHVjVGFibGVGb3JtYXRSZXZpc2lvbjsJLypDaGFuZ2UgaXQgd2hlbiB0aGUgUGFyc2VyIGlzIG5vdCBiYWNrd2FyZCBjb21wYXRpYmxlICovCi0JVUNIQVIgdWNUYWJsZUNvbnRlbnRSZXZpc2lvbjsJLypDaGFuZ2UgaXQgb25seSB3aGVuIHRoZSB0YWJsZSBuZWVkcyB0byBjaGFuZ2UgYnV0IHRoZSBmaXJtd2FyZSAqLwotCS8qSW1hZ2UgY2FuJ3QgYmUgdXBkYXRlZCwgd2hpbGUgRHJpdmVyIG5lZWRzIHRvIGNhcnJ5IHRoZSBuZXcgdGFibGUhICovCi19IEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUjsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIKK3sKKyAgVVNIT1JUIHVzU3RydWN0dXJlU2l6ZTsKKyAgVUNIQVIgIHVjVGFibGVGb3JtYXRSZXZpc2lvbjsgICAvKkNoYW5nZSBpdCB3aGVuIHRoZSBQYXJzZXIgaXMgbm90IGJhY2t3YXJkIGNvbXBhdGlibGUgKi8KKyAgVUNIQVIgIHVjVGFibGVDb250ZW50UmV2aXNpb247ICAvKkNoYW5nZSBpdCBvbmx5IHdoZW4gdGhlIHRhYmxlIG5lZWRzIHRvIGNoYW5nZSBidXQgdGhlIGZpcm13YXJlICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypJbWFnZSBjYW4ndCBiZSB1cGRhdGVkLCB3aGlsZSBEcml2ZXIgbmVlZHMgdG8gY2FycnkgdGhlIG5ldyB0YWJsZSEgKi8KK31BVE9NX0NPTU1PTl9UQUJMRV9IRUFERVI7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1JPTV9IRUFERVIgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVDSEFSIHVhRmlybVdhcmVTaWduYXR1cmVbNF07CS8qU2lnbmF0dXJlIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gQXRvbWJpb3MgYW5kIG5vbi1hdG9tYmlvcywKLQkJCQkJICAgYXRvbWJpb3Mgc2hvdWxkIGluaXQgaXQgYXMgIkFUT00iLCBkb24ndCBjaGFuZ2UgdGhlIHBvc2l0aW9uICovCi0JVVNIT1JUIHVzQmlvc1J1bnRpbWVTZWdtZW50QWRkcmVzczsKLQlVU0hPUlQgdXNQcm90ZWN0ZWRNb2RlSW5mb09mZnNldDsKLQlVU0hPUlQgdXNDb25maWdGaWxlbmFtZU9mZnNldDsKLQlVU0hPUlQgdXNDUkNfQmxvY2tPZmZzZXQ7Ci0JVVNIT1JUIHVzQklPU19Cb290dXBNZXNzYWdlT2Zmc2V0OwotCVVTSE9SVCB1c0ludDEwT2Zmc2V0OwotCVVTSE9SVCB1c1BjaUJ1c0RldkluaXRDb2RlOwotCVVTSE9SVCB1c0lvQmFzZUFkZHJlc3M7Ci0JVVNIT1JUIHVzU3Vic3lzdGVtVmVuZG9ySUQ7Ci0JVVNIT1JUIHVzU3Vic3lzdGVtSUQ7Ci0JVVNIT1JUIHVzUENJX0luZm9PZmZzZXQ7Ci0JVVNIT1JUIHVzTWFzdGVyQ29tbWFuZFRhYmxlT2Zmc2V0OwkvKk9mZnNldCBmb3IgU1cgdG8gZ2V0IGFsbCBjb21tYW5kIHRhYmxlIG9mZnNldHMsIERvbid0IGNoYW5nZSB0aGUgcG9zaXRpb24gKi8KLQlVU0hPUlQgdXNNYXN0ZXJEYXRhVGFibGVPZmZzZXQ7CS8qT2Zmc2V0IGZvciBTVyB0byBnZXQgYWxsIGRhdGEgdGFibGUgb2Zmc2V0cywgRG9uJ3QgY2hhbmdlIHRoZSBwb3NpdGlvbiAqLwotCVVDSEFSIHVjRXh0ZW5kZWRGdW5jdGlvbkNvZGU7Ci0JVUNIQVIgdWNSZXNlcnZlZDsKLX0gQVRPTV9ST01fSEVBREVSOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fUk9NX0hFQURFUgoreworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIJCXNIZWFkZXI7CisgIFVDSEFSCSB1YUZpcm1XYXJlU2lnbmF0dXJlWzRdOyAgICAvKlNpZ25hdHVyZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIEF0b21iaW9zIGFuZCBub24tYXRvbWJpb3MsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9tYmlvcyBzaG91bGQgaW5pdCBpdCBhcyAiQVRPTSIsIGRvbid0IGNoYW5nZSB0aGUgcG9zaXRpb24gKi8KKyAgVVNIT1JUIHVzQmlvc1J1bnRpbWVTZWdtZW50QWRkcmVzczsKKyAgVVNIT1JUIHVzUHJvdGVjdGVkTW9kZUluZm9PZmZzZXQ7CisgIFVTSE9SVCB1c0NvbmZpZ0ZpbGVuYW1lT2Zmc2V0OworICBVU0hPUlQgdXNDUkNfQmxvY2tPZmZzZXQ7CisgIFVTSE9SVCB1c0JJT1NfQm9vdHVwTWVzc2FnZU9mZnNldDsKKyAgVVNIT1JUIHVzSW50MTBPZmZzZXQ7CisgIFVTSE9SVCB1c1BjaUJ1c0RldkluaXRDb2RlOworICBVU0hPUlQgdXNJb0Jhc2VBZGRyZXNzOworICBVU0hPUlQgdXNTdWJzeXN0ZW1WZW5kb3JJRDsKKyAgVVNIT1JUIHVzU3Vic3lzdGVtSUQ7CisgIFVTSE9SVCB1c1BDSV9JbmZvT2Zmc2V0OyAKKyAgVVNIT1JUIHVzTWFzdGVyQ29tbWFuZFRhYmxlT2Zmc2V0OyAvKk9mZnNldCBmb3IgU1cgdG8gZ2V0IGFsbCBjb21tYW5kIHRhYmxlIG9mZnNldHMsIERvbid0IGNoYW5nZSB0aGUgcG9zaXRpb24gKi8KKyAgVVNIT1JUIHVzTWFzdGVyRGF0YVRhYmxlT2Zmc2V0OyAgIC8qT2Zmc2V0IGZvciBTVyB0byBnZXQgYWxsIGRhdGEgdGFibGUgb2Zmc2V0cywgRG9uJ3QgY2hhbmdlIHRoZSBwb3NpdGlvbiAqLworICBVQ0hBUiAgdWNFeHRlbmRlZEZ1bmN0aW9uQ29kZTsKKyAgVUNIQVIgIHVjUmVzZXJ2ZWQ7Cit9QVRPTV9ST01fSEVBREVSOwogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PUNvbW1hbmQgVGFibGUgUG9ydGlvbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCiAjaWZkZWYJVUVGSV9CVUlMRAotI2RlZmluZQlVVEVNUAlVU0hPUlQKLSNkZWZpbmUJVVNIT1JUCXZvaWQqCisJI2RlZmluZQlVVEVNUAlVU0hPUlQKKwkjZGVmaW5lCVVTSE9SVAl2b2lkKgogI2VuZGlmCiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX01BU1RFUl9MSVNUX09GX0NPTU1BTkRfVEFCTEVTIHsKLQlVU0hPUlQgQVNJQ19Jbml0OwkvKiBGdW5jdGlvbiBUYWJsZSwgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIEdldERpc3BsYXlTdXJmYWNlU2l6ZTsJLyogQXRvbWljIFRhYmxlLCAgVXNlZCBieSBCaW9zIHdoZW4gZW5hYmxpbmcgSFcgSUNPTiAqLwotCVVTSE9SVCBBU0lDX1JlZ2lzdGVyc0luaXQ7CS8qIEF0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gQVNJQ19Jbml0ICovCi0JVVNIT1JUIFZSQU1fQmxvY2tWZW5kZXJEZXRlY3Rpb247CS8qIEF0b21pYyBUYWJsZSwgIHVzZWQgb25seSBieSBCaW9zICovCi0JVVNIT1JUIERJR3hFbmNvZGVyQ29udHJvbDsJLyogT25seSB1c2VkIGJ5IEJpb3MgKi8KLQlVU0hPUlQgTWVtb3J5Q29udHJvbGxlckluaXQ7CS8qIEF0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gQVNJQ19Jbml0ICovCi0JVVNIT1JUIEVuYWJsZUNSVENNZW1SZXE7CS8qIEZ1bmN0aW9uIFRhYmxlLGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDIuMSAqLwotCVVTSE9SVCBNZW1vcnlQYXJhbUFkanVzdDsJLyogQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBTZXRNZW1vcnlDbG9jayBpZiBuZWVkZWQgKi8KLQlVU0hPUlQgRFZPRW5jb2RlckNvbnRyb2w7CS8qIEZ1bmN0aW9uIFRhYmxlLGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMiAqLwotCVVTSE9SVCBHUElPUGluQ29udHJvbDsJLyogQXRvbWljIFRhYmxlLCAgb25seSB1c2VkIGJ5IEJpb3MgKi8KLQlVU0hPUlQgU2V0RW5naW5lQ2xvY2s7CS8qRnVuY3Rpb24gVGFibGUsZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIFNldE1lbW9yeUNsb2NrOwkvKiBGdW5jdGlvbiBUYWJsZSxkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgU2V0UGl4ZWxDbG9jazsJLypGdW5jdGlvbiBUYWJsZSxkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjIgKi8KLQlVU0hPUlQgRHluYW1pY0Nsb2NrR2F0aW5nOwkvKiBBdG9taWMgVGFibGUsICBpbmRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGNhbGxlZCBmcm9tIEFTSUNfSW5pdCAqLwotCVVTSE9SVCBSZXNldE1lbW9yeURMTDsJLyogQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBTZXRNZW1vcnlDbG9jayAqLwotCVVTSE9SVCBSZXNldE1lbW9yeURldmljZTsJLyogQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBTZXRNZW1vcnlDbG9jayAqLwotCVVTSE9SVCBNZW1vcnlQTExJbml0OwotCVVTSE9SVCBBZGp1c3REaXNwbGF5UGxsOwkvKiBvbmx5IHVzZWQgYnkgQmlvcyAqLwotCVVTSE9SVCBBZGp1c3RNZW1vcnlDb250cm9sbGVyOwkvKiBBdG9taWMgVGFibGUsICBpbmRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGNhbGxlZCBmcm9tIFNldE1lbW9yeUNsb2NrICovCi0JVVNIT1JUIEVuYWJsZUFTSUNfU3RhdGljUHdyTWd0OwkvKiBBdG9taWMgVGFibGUsICBvbmx5IHVzZWQgYnkgQmlvcyAqLwotCVVTSE9SVCBBU0lDX1N0YXRpY1B3ck1ndFN0YXR1c0NoYW5nZTsJLyogT2Jzb2xldGUsIG9ubHkgdXNlZCBieSBCaW9zICovCi0JVVNIT1JUIERBQ19Mb2FkRGV0ZWN0aW9uOwkvKiBBdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjIgKi8KLQlVU0hPUlQgTFZUTUFFbmNvZGVyQ29udHJvbDsJLyogQXRvbWljIFRhYmxlLGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMyAqLwotCVVTSE9SVCBMQ0QxT3V0cHV0Q29udHJvbDsJLyogQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIERBQzFFbmNvZGVyQ29udHJvbDsJLyogQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIERBQzJFbmNvZGVyQ29udHJvbDsJLyogQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIERWT091dHB1dENvbnRyb2w7CS8qIEF0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBDVjFPdXRwdXRDb250cm9sOwkvKiBBdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgR2V0Q29uZGl0aW9uYWxHb2xkZW5TZXR0aW5nOwkvKiBvbmx5IHVzZWQgYnkgQmlvcyAqLwotCVVTSE9SVCBUVkVuY29kZXJDb250cm9sOwkvKiBGdW5jdGlvbiBUYWJsZSxkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgVE1EU0FFbmNvZGVyQ29udHJvbDsJLyogQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4zICovCi0JVVNIT1JUIExWRFNFbmNvZGVyQ29udHJvbDsJLyogQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4zICovCi0JVVNIT1JUIFRWMU91dHB1dENvbnRyb2w7CS8qIEF0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBFbmFibGVTY2FsZXI7CS8qIEF0b21pYyBUYWJsZSwgIHVzZWQgb25seSBieSBCaW9zICovCi0JVVNIT1JUIEJsYW5rQ1JUQzsJLyogQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIEVuYWJsZUNSVEM7CS8qIEF0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBHZXRQaXhlbENsb2NrOwkvKiBBdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgRW5hYmxlVkdBX1JlbmRlcjsJLyogRnVuY3Rpb24gVGFibGUsZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIEVuYWJsZVZHQV9BY2Nlc3M7CS8qIE9ic29sZXRlICwgICAgIG9ubHkgdXNlZCBieSBCaW9zICovCi0JVVNIT1JUIFNldENSVENfVGltaW5nOwkvKiBBdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgU2V0Q1JUQ19PdmVyU2NhbjsJLyogQXRvbWljIFRhYmxlLCAgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIFNldENSVENfUmVwbGljYXRpb247CS8qIEF0b21pYyBUYWJsZSwgIHVzZWQgb25seSBieSBCaW9zICovCi0JVVNIT1JUIFNlbGVjdENSVENfU291cmNlOwkvKiBBdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgRW5hYmxlR3JhcGhTdXJmYWNlczsJLyogQXRvbWljIFRhYmxlLCAgdXNlZCBvbmx5IGJ5IEJpb3MgKi8KLQlVU0hPUlQgVXBkYXRlQ1JUQ19Eb3VibGVCdWZmZXJSZWdpc3RlcnM7Ci0JVVNIT1JUIExVVF9BdXRvRmlsbDsJLyogQXRvbWljIFRhYmxlLCAgb25seSB1c2VkIGJ5IEJpb3MgKi8KLQlVU0hPUlQgRW5hYmxlSFdfSWNvbkN1cnNvcjsJLyogQXRvbWljIFRhYmxlLCAgb25seSB1c2VkIGJ5IEJpb3MgKi8KLQlVU0hPUlQgR2V0TWVtb3J5Q2xvY2s7CS8qIEF0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBHZXRFbmdpbmVDbG9jazsJLyogQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIFNldENSVENfVXNpbmdEVERUaW1pbmc7CS8qIEF0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBFeHRlcm5hbEVuY29kZXJDb250cm9sOwkvKiBBdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAyLjEgKi8KLQlVU0hPUlQgTFZUTUFPdXRwdXRDb250cm9sOwkvKiBBdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgVlJBTV9CbG9ja0RldGVjdGlvbkJ5U3RyYXA7CS8qIEF0b21pYyBUYWJsZSwgIHVzZWQgb25seSBieSBCaW9zICovCi0JVVNIT1JUIE1lbW9yeUNsZWFuVXA7CS8qIEF0b21pYyBUYWJsZSwgIG9ubHkgdXNlZCBieSBCaW9zICovCi0JVVNIT1JUIFByb2Nlc3NJMmNDaGFubmVsVHJhbnNhY3Rpb247CS8qIEZ1bmN0aW9uIFRhYmxlLG9ubHkgdXNlZCBieSBCaW9zICovCi0JVVNIT1JUIFdyaXRlT25lQnl0ZVRvSFdBc3Npc3RlZEkyQzsJLyogRnVuY3Rpb24gVGFibGUsaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyAqLwotCVVTSE9SVCBSZWFkSFdBc3Npc3RlZEkyQ1N0YXR1czsJLyogQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyAqLwotCVVTSE9SVCBTcGVlZEZhbkNvbnRyb2w7CS8qIEZ1bmN0aW9uIFRhYmxlLGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gQVNJQ19Jbml0ICovCi0JVVNIT1JUIFBvd2VyQ29ubmVjdG9yRGV0ZWN0aW9uOwkvKiBBdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgTUNfU3luY2hyb25pemF0aW9uOwkvKiBBdG9taWMgVGFibGUsICBpbmRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGNhbGxlZCBmcm9tIFNldE1lbW9yeUNsb2NrICovCi0JVVNIT1JUIENvbXB1dGVNZW1vcnlFbmdpbmVQTEw7CS8qIEF0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gU2V0TWVtb3J5L0VuZ2luZUNsb2NrICovCi0JVVNIT1JUIE1lbW9yeVJlZnJlc2hDb252ZXJzaW9uOwkvKiBBdG9taWMgVGFibGUsICBpbmRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGNhbGxlZCBmcm9tIFNldE1lbW9yeSBvciBTZXRFbmdpbmVDbG9jayAqLwotCVVTSE9SVCBWUkFNX0dldEN1cnJlbnRJbmZvQmxvY2s7CS8qIEF0b21pYyBUYWJsZSwgIHVzZWQgb25seSBieSBCaW9zICovCi0JVVNIT1JUIER5bmFtaWNNZW1vcnlTZXR0aW5nczsJLyogQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBTZXRNZW1vcnlDbG9jayAqLwotCVVTSE9SVCBNZW1vcnlUcmFpbmluZzsJLyogQXRvbWljIFRhYmxlLCAgdXNlZCBvbmx5IGJ5IEJpb3MgKi8KLQlVU0hPUlQgRW5hYmxlU3ByZWFkU3BlY3RydW1PblBQTEw7CS8qIEF0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMiAqLwotCVVTSE9SVCBUTURTQU91dHB1dENvbnRyb2w7CS8qIEF0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBTZXRWb2x0YWdlOwkvKiBGdW5jdGlvbiBUYWJsZSxkaXJlY3RseSBhbmQvb3IgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgREFDMU91dHB1dENvbnRyb2w7CS8qIEF0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBEQUMyT3V0cHV0Q29udHJvbDsJLyogQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIFNldHVwSFdBc3Npc3RlZEkyQ1N0YXR1czsJLyogRnVuY3Rpb24gVGFibGUsb25seSB1c2VkIGJ5IEJpb3MsIG9ic29sZXRlIHNvb24uU3dpdGNoIHRvIHVzZSAiUmVhZEVESURGcm9tSFdBc3Npc3RlZEkyQyIgKi8KLQlVU0hPUlQgQ2xvY2tTb3VyY2U7CS8qIEF0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gQVNJQ19Jbml0ICovCi0JVVNIT1JUIE1lbW9yeURldmljZUluaXQ7CS8qIEF0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gU2V0TWVtb3J5Q2xvY2sgKi8KLQlVU0hPUlQgRW5hYmxlWVVWOwkvKiBBdG9taWMgVGFibGUsICBpbmRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGNhbGxlZCBmcm9tIEVuYWJsZVZHQVJlbmRlciAqLwotCVVTSE9SVCBESUcxRW5jb2RlckNvbnRyb2w7CS8qIEF0b21pYyBUYWJsZSxkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgRElHMkVuY29kZXJDb250cm9sOwkvKiBBdG9taWMgVGFibGUsZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIERJRzFUcmFuc21pdHRlckNvbnRyb2w7CS8qIEF0b21pYyBUYWJsZSxkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgRElHMlRyYW5zbWl0dGVyQ29udHJvbDsJLyogQXRvbWljIFRhYmxlLGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBQcm9jZXNzQXV4Q2hhbm5lbFRyYW5zYWN0aW9uOwkvKiBGdW5jdGlvbiBUYWJsZSxvbmx5IHVzZWQgYnkgQmlvcyAqLwotCVVTSE9SVCBEUEVuY29kZXJTZXJ2aWNlOwkvKiBGdW5jdGlvbiBUYWJsZSxvbmx5IHVzZWQgYnkgQmlvcyAqLwotfSBBVE9NX01BU1RFUl9MSVNUX09GX0NPTU1BTkRfVEFCTEVTOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fTUFTVEVSX0xJU1RfT0ZfQ09NTUFORF9UQUJMRVN7CisgIFVTSE9SVCBBU0lDX0luaXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9GdW5jdGlvbiBUYWJsZSwgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xCisgIFVTSE9SVCBHZXREaXNwbGF5U3VyZmFjZVNpemU7ICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBVc2VkIGJ5IEJpb3Mgd2hlbiBlbmFibGluZyBIVyBJQ09OCisgIFVTSE9SVCBBU0lDX1JlZ2lzdGVyc0luaXQ7ICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBpbmRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGNhbGxlZCBmcm9tIEFTSUNfSW5pdAorICBVU0hPUlQgVlJBTV9CbG9ja1ZlbmRlckRldGVjdGlvbjsgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgdXNlZCBvbmx5IGJ5IEJpb3MKKyAgVVNIT1JUIERJR3hFbmNvZGVyQ29udHJvbDsJCQkJCQkJCQkJIC8vT25seSB1c2VkIGJ5IEJpb3MKKyAgVVNIT1JUIE1lbW9yeUNvbnRyb2xsZXJJbml0OyAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gQVNJQ19Jbml0CisgIFVTSE9SVCBFbmFibGVDUlRDTWVtUmVxOyAgICAgICAgICAgICAgICAgICAgICAgLy9GdW5jdGlvbiBUYWJsZSxkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAyLjEKKyAgVVNIT1JUIE1lbW9yeVBhcmFtQWRqdXN0OyAJCQkJCQkJCQkJIC8vQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBTZXRNZW1vcnlDbG9jayBpZiBuZWVkZWQKKyAgVVNIT1JUIERWT0VuY29kZXJDb250cm9sOyAgICAgICAgICAgICAgICAgICAgICAvL0Z1bmN0aW9uIFRhYmxlLGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMgorICBVU0hPUlQgR1BJT1BpbkNvbnRyb2w7CQkJCQkJCQkJCQkJIC8vQXRvbWljIFRhYmxlLCAgb25seSB1c2VkIGJ5IEJpb3MKKyAgVVNIT1JUIFNldEVuZ2luZUNsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAvL0Z1bmN0aW9uIFRhYmxlLGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMQorICBVU0hPUlQgU2V0TWVtb3J5Q2xvY2s7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vRnVuY3Rpb24gVGFibGUsZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xCisgIFVTSE9SVCBTZXRQaXhlbENsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy9GdW5jdGlvbiBUYWJsZSxkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjIgIAorICBVU0hPUlQgRHluYW1pY0Nsb2NrR2F0aW5nOyAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBBU0lDX0luaXQKKyAgVVNIT1JUIFJlc2V0TWVtb3J5RExMOyAgICAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gU2V0TWVtb3J5Q2xvY2sKKyAgVVNIT1JUIFJlc2V0TWVtb3J5RGV2aWNlOyAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gU2V0TWVtb3J5Q2xvY2sKKyAgVVNIT1JUIE1lbW9yeVBMTEluaXQ7CisgIFVTSE9SVCBBZGp1c3REaXNwbGF5UGxsOwkJCQkJCQkJCQkJCS8vb25seSB1c2VkIGJ5IEJpb3MKKyAgVVNIT1JUIEFkanVzdE1lbW9yeUNvbnRyb2xsZXI7ICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gU2V0TWVtb3J5Q2xvY2sgICAgICAgICAgICAgICAgCisgIFVTSE9SVCBFbmFibGVBU0lDX1N0YXRpY1B3ck1ndDsgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBvbmx5IHVzZWQgYnkgQmlvcworICBVU0hPUlQgQVNJQ19TdGF0aWNQd3JNZ3RTdGF0dXNDaGFuZ2U7ICAgICAgICAgIC8vT2Jzb2xldGUgLCAgICAgb25seSB1c2VkIGJ5IEJpb3MgICAKKyAgVVNIT1JUIERBQ19Mb2FkRGV0ZWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMiAgCisgIFVTSE9SVCBMVlRNQUVuY29kZXJDb250cm9sOyAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4zCisgIFVTSE9SVCBMQ0QxT3V0cHV0Q29udHJvbDsgICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgCisgIFVTSE9SVCBEQUMxRW5jb2RlckNvbnRyb2w7ICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgIAorICBVU0hPUlQgREFDMkVuY29kZXJDb250cm9sOyAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xIAorICBVU0hPUlQgRFZPT3V0cHV0Q29udHJvbDsgICAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xIAorICBVU0hPUlQgQ1YxT3V0cHV0Q29udHJvbDsgICAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgQXRvbWljIFRhYmxlLCAgT2Jzb2xldGUgZnJvbSBSeTZ4eCwgdXNlIERBQzIgT3V0cHV0IGluc3RlYWQgCisgIFVTSE9SVCBHZXRDb25kaXRpb25hbEdvbGRlblNldHRpbmc7ICAgICAgICAgICAgLy9vbmx5IHVzZWQgYnkgQmlvcworICBVU0hPUlQgVFZFbmNvZGVyQ29udHJvbDsgICAgICAgICAgICAgICAgICAgICAgIC8vRnVuY3Rpb24gVGFibGUsZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xCisgIFVTSE9SVCBUTURTQUVuY29kZXJDb250cm9sOyAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjMKKyAgVVNIT1JUIExWRFNFbmNvZGVyQ29udHJvbDsgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMworICBVU0hPUlQgVFYxT3V0cHV0Q29udHJvbDsgICAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgT2Jzb2xldGUgZnJvbSBSeTZ4eCwgdXNlIERBQzIgT3V0cHV0IGluc3RlYWQKKyAgVVNIT1JUIEVuYWJsZVNjYWxlcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIHVzZWQgb25seSBieSBCaW9zCisgIFVTSE9SVCBCbGFua0NSVEM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgCisgIFVTSE9SVCBFbmFibGVDUlRDOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgCisgIFVTSE9SVCBHZXRQaXhlbENsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgCisgIFVTSE9SVCBFbmFibGVWR0FfUmVuZGVyOyAgICAgICAgICAgICAgICAgICAgICAgLy9GdW5jdGlvbiBUYWJsZSxkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEKKyAgVVNIT1JUIEdldFNDTEtPdmVyTUNMS1JhdGlvOyAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIG9ubHkgdXNlZCBieSBCaW9zCisgIFVTSE9SVCBTZXRDUlRDX1RpbWluZzsgICAgICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEKKyAgVVNIT1JUIFNldENSVENfT3ZlclNjYW47ICAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAKKyAgVVNIT1JUIFNldENSVENfUmVwbGljYXRpb247ICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIHVzZWQgb25seSBieSBCaW9zCisgIFVTSE9SVCBTZWxlY3RDUlRDX1NvdXJjZTsgICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgCisgIFVTSE9SVCBFbmFibGVHcmFwaFN1cmZhY2VzOyAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICB1c2VkIG9ubHkgYnkgQmlvcworICBVU0hPUlQgVXBkYXRlQ1JUQ19Eb3VibGVCdWZmZXJSZWdpc3RlcnM7CisgIFVTSE9SVCBMVVRfQXV0b0ZpbGw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBvbmx5IHVzZWQgYnkgQmlvcworICBVU0hPUlQgRW5hYmxlSFdfSWNvbkN1cnNvcjsgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgb25seSB1c2VkIGJ5IEJpb3MKKyAgVVNIT1JUIEdldE1lbW9yeUNsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAKKyAgVVNIT1JUIEdldEVuZ2luZUNsb2NrOyAgICAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAKKyAgVVNIT1JUIFNldENSVENfVXNpbmdEVERUaW1pbmc7ICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMQorICBVU0hPUlQgRXh0ZXJuYWxFbmNvZGVyQ29udHJvbDsgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMi4xCisgIFVTSE9SVCBMVlRNQU91dHB1dENvbnRyb2w7ICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEKKyAgVVNIT1JUIFZSQU1fQmxvY2tEZXRlY3Rpb25CeVN0cmFwOyAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIHVzZWQgb25seSBieSBCaW9zCisgIFVTSE9SVCBNZW1vcnlDbGVhblVwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICBvbmx5IHVzZWQgYnkgQmlvcyAgICAKKyAgVVNIT1JUIFByb2Nlc3NJMmNDaGFubmVsVHJhbnNhY3Rpb247ICAgICAgICAgICAvL0Z1bmN0aW9uIFRhYmxlLG9ubHkgdXNlZCBieSBCaW9zCisgIFVTSE9SVCBXcml0ZU9uZUJ5dGVUb0hXQXNzaXN0ZWRJMkM7ICAgICAgICAgICAgLy9GdW5jdGlvbiBUYWJsZSxpbmRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzIAorICBVU0hPUlQgUmVhZEhXQXNzaXN0ZWRJMkNTdGF0dXM7ICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cworICBVU0hPUlQgU3BlZWRGYW5Db250cm9sOyAgICAgICAgICAgICAgICAgICAgICAgIC8vRnVuY3Rpb24gVGFibGUsaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBBU0lDX0luaXQKKyAgVVNIT1JUIFBvd2VyQ29ubmVjdG9yRGV0ZWN0aW9uOyAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMQorICBVU0hPUlQgTUNfU3luY2hyb25pemF0aW9uOyAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBTZXRNZW1vcnlDbG9jaworICBVU0hPUlQgQ29tcHV0ZU1lbW9yeUVuZ2luZVBMTDsgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBTZXRNZW1vcnkvRW5naW5lQ2xvY2sKKyAgVVNIT1JUIE1lbW9yeVJlZnJlc2hDb252ZXJzaW9uOyAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gU2V0TWVtb3J5IG9yIFNldEVuZ2luZUNsb2NrCisgIFVTSE9SVCBWUkFNX0dldEN1cnJlbnRJbmZvQmxvY2s7ICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsICB1c2VkIG9ubHkgYnkgQmlvcworICBVU0hPUlQgRHluYW1pY01lbW9yeVNldHRpbmdzOyAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBTZXRNZW1vcnlDbG9jaworICBVU0hPUlQgTWVtb3J5VHJhaW5pbmc7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgdXNlZCBvbmx5IGJ5IEJpb3MKKyAgVVNIT1JUIEVuYWJsZVNwcmVhZFNwZWN0cnVtT25QUExMOyAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMgorICBVU0hPUlQgVE1EU0FPdXRwdXRDb250cm9sOyAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xCisgIFVTSE9SVCBTZXRWb2x0YWdlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9GdW5jdGlvbiBUYWJsZSxkaXJlY3RseSBhbmQvb3IgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEKKyAgVVNIT1JUIERBQzFPdXRwdXRDb250cm9sOyAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGRpcmVjdGx5IHVzZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMQorICBVU0hPUlQgREFDMk91dHB1dENvbnRyb2w7ICAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xCisgIFVTSE9SVCBTZXR1cEhXQXNzaXN0ZWRJMkNTdGF0dXM7ICAgICAgICAgICAgICAgLy9GdW5jdGlvbiBUYWJsZSxvbmx5IHVzZWQgYnkgQmlvcywgb2Jzb2xldGUgc29vbi5Td2l0Y2ggdG8gdXNlICJSZWFkRURJREZyb21IV0Fzc2lzdGVkSTJDIgorICBVU0hPUlQgQ2xvY2tTb3VyY2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQXRvbWljIFRhYmxlLCAgaW5kaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxjYWxsZWQgZnJvbSBBU0lDX0luaXQKKyAgVVNIT1JUIE1lbW9yeURldmljZUluaXQ7ICAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gU2V0TWVtb3J5Q2xvY2sKKyAgVVNIT1JUIEVuYWJsZVlVVjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSwgIGluZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsY2FsbGVkIGZyb20gRW5hYmxlVkdBUmVuZGVyCisgIFVTSE9SVCBESUcxRW5jb2RlckNvbnRyb2w7ICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xCisgIFVTSE9SVCBESUcyRW5jb2RlckNvbnRyb2w7ICAgICAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xCisgIFVTSE9SVCBESUcxVHJhbnNtaXR0ZXJDb250cm9sOyAgICAgICAgICAgICAgICAgLy9BdG9taWMgVGFibGUsZGlyZWN0bHkgdXNlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xCisgIFVTSE9SVCBESUcyVHJhbnNtaXR0ZXJDb250cm9sOwkgICAgICAgICAgICAgICAvL0F0b21pYyBUYWJsZSxkaXJlY3RseSB1c2VkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgCisgIFVTSE9SVCBQcm9jZXNzQXV4Q2hhbm5lbFRyYW5zYWN0aW9uOwkJCQkJIC8vRnVuY3Rpb24gVGFibGUsb25seSB1c2VkIGJ5IEJpb3MKKyAgVVNIT1JUIERQRW5jb2RlclNlcnZpY2U7CQkJCQkJCQkJCQkgLy9GdW5jdGlvbiBUYWJsZSxvbmx5IHVzZWQgYnkgQmlvcworfUFUT01fTUFTVEVSX0xJU1RfT0ZfQ09NTUFORF9UQUJMRVM7ICAgCiAKLS8qICBGb3IgYmFja3dhcmQgY29tcGF0aWJsZSAqLworLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGlibGUgCiAjZGVmaW5lIFJlYWRFRElERnJvbUhXQXNzaXN0ZWRJMkMgICAgICAgICAgICAgICAgUHJvY2Vzc0kyY0NoYW5uZWxUcmFuc2FjdGlvbgogI2RlZmluZSBVTklQSFlUcmFuc21pdHRlckNvbnRyb2wJCQkJCQkgICAgIERJRzFUcmFuc21pdHRlckNvbnRyb2wKICNkZWZpbmUgTFZUTUFUcmFuc21pdHRlckNvbnRyb2wJCQkJCQkJICAgICBESUcyVHJhbnNtaXR0ZXJDb250cm9sCiAjZGVmaW5lIFNldENSVENfRFBNX1N0YXRlICAgICAgICAgICAgICAgICAgICAgICAgR2V0Q29uZGl0aW9uYWxHb2xkZW5TZXR0aW5nCiAjZGVmaW5lIFNldFVuaXBoeUluc3RhbmNlICAgICAgICAgICAgICAgICAgICAgICAgQVNJQ19TdGF0aWNQd3JNZ3RTdGF0dXNDaGFuZ2UKKyNkZWZpbmUgSFBESW50ZXJydXB0U2VydmljZSAgICAgICAgICAgICAgICAgICAgICBSZWFkSFdBc3Npc3RlZEkyQ1N0YXR1cworI2RlZmluZSBFbmFibGVWR0FfQWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAgIEdldFNDTEtPdmVyTUNMS1JhdGlvCiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX01BU1RFUl9DT01NQU5EX1RBQkxFIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlBVE9NX01BU1RFUl9MSVNUX09GX0NPTU1BTkRfVEFCTEVTIExpc3RPZkNvbW1hbmRUYWJsZXM7Ci19IEFUT01fTUFTVEVSX0NPTU1BTkRfVEFCTEU7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9NQVNURVJfQ09NTUFORF9UQUJMRQoreworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgICAgICAgICAgIHNIZWFkZXI7CisgIEFUT01fTUFTVEVSX0xJU1RfT0ZfQ09NTUFORF9UQUJMRVMgTGlzdE9mQ29tbWFuZFRhYmxlczsKK31BVE9NX01BU1RFUl9DT01NQU5EX1RBQkxFOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgaW4gZXZlcnkgY29tbWFuZCB0YWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9UQUJMRV9BVFRSSUJVVEUgeworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGluIGV2ZXJ5IGNvbW1hbmQgdGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1RBQkxFX0FUVFJJQlVURQorewogI2lmIEFUT01fQklHX0VORElBTgotCVVTSE9SVCBVcGRhdGVkQnlVdGlsaXR5OjE7CS8qIFsxNV09VGFibGUgdXBkYXRlZCBieSB1dGlsaXR5IGZsYWcgKi8KLQlVU0hPUlQgUFNfU2l6ZUluQnl0ZXM6NzsJLyogWzE0OjhdPVNpemUgb2YgcGFyYW1ldGVyIHNwYWNlIGluIEJ5dGVzIChtdWx0aXBsZSBvZiBhIGR3b3JkKSwgKi8KLQlVU0hPUlQgV1NfU2l6ZUluQnl0ZXM6ODsJLyogWzc6MF09U2l6ZSBvZiB3b3Jrc3BhY2UgaW4gQnl0ZXMgKGluIG11bHRpcGxlIG9mIGEgZHdvcmQpLCAqLworICBVU0hPUlQgIFVwZGF0ZWRCeVV0aWxpdHk6MTsgICAgICAgICAvL1sxNV09VGFibGUgdXBkYXRlZCBieSB1dGlsaXR5IGZsYWcKKyAgVVNIT1JUICBQU19TaXplSW5CeXRlczo3OyAgICAgICAgICAgLy9bMTQ6OF09U2l6ZSBvZiBwYXJhbWV0ZXIgc3BhY2UgaW4gQnl0ZXMgKG11bHRpcGxlIG9mIGEgZHdvcmQpLCAKKyAgVVNIT1JUICBXU19TaXplSW5CeXRlczo4OyAgICAgICAgICAgLy9bNzowXT1TaXplIG9mIHdvcmtzcGFjZSBpbiBCeXRlcyAoaW4gbXVsdGlwbGUgb2YgYSBkd29yZCksIAogI2Vsc2UKLQlVU0hPUlQgV1NfU2l6ZUluQnl0ZXM6ODsJLyogWzc6MF09U2l6ZSBvZiB3b3Jrc3BhY2UgaW4gQnl0ZXMgKGluIG11bHRpcGxlIG9mIGEgZHdvcmQpLCAqLwotCVVTSE9SVCBQU19TaXplSW5CeXRlczo3OwkvKiBbMTQ6OF09U2l6ZSBvZiBwYXJhbWV0ZXIgc3BhY2UgaW4gQnl0ZXMgKG11bHRpcGxlIG9mIGEgZHdvcmQpLCAqLwotCVVTSE9SVCBVcGRhdGVkQnlVdGlsaXR5OjE7CS8qIFsxNV09VGFibGUgdXBkYXRlZCBieSB1dGlsaXR5IGZsYWcgKi8KKyAgVVNIT1JUICBXU19TaXplSW5CeXRlczo4OyAgICAgICAgICAgLy9bNzowXT1TaXplIG9mIHdvcmtzcGFjZSBpbiBCeXRlcyAoaW4gbXVsdGlwbGUgb2YgYSBkd29yZCksIAorICBVU0hPUlQgIFBTX1NpemVJbkJ5dGVzOjc7ICAgICAgICAgICAvL1sxNDo4XT1TaXplIG9mIHBhcmFtZXRlciBzcGFjZSBpbiBCeXRlcyAobXVsdGlwbGUgb2YgYSBkd29yZCksIAorICBVU0hPUlQgIFVwZGF0ZWRCeVV0aWxpdHk6MTsgICAgICAgICAvL1sxNV09VGFibGUgdXBkYXRlZCBieSB1dGlsaXR5IGZsYWcKICNlbmRpZgotfSBBVE9NX1RBQkxFX0FUVFJJQlVURTsKK31BVE9NX1RBQkxFX0FUVFJJQlVURTsKIAotdHlwZWRlZiB1bmlvbiBfQVRPTV9UQUJMRV9BVFRSSUJVVEVfQUNDRVNTIHsKLQlBVE9NX1RBQkxFX0FUVFJJQlVURSBzYmZBY2Nlc3M7Ci0JVVNIT1JUIHN1c0FjY2VzczsKLX0gQVRPTV9UQUJMRV9BVFRSSUJVVEVfQUNDRVNTOwordHlwZWRlZiB1bmlvbiBfQVRPTV9UQUJMRV9BVFRSSUJVVEVfQUNDRVNTCit7CisgIEFUT01fVEFCTEVfQVRUUklCVVRFIHNiZkFjY2VzczsKKyAgVVNIT1JUICAgICAgICAgICAgICAgc3VzQWNjZXNzOworfUFUT01fVEFCTEVfQVRUUklCVVRFX0FDQ0VTUzsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgQ29tbW9uIGhlYWRlciBmb3IgYWxsIGNvbW1hbmQgdGFibGVzLiAqLwotLyogIEV2ZXJ5IHRhYmxlIHBvaW50ZWQgYnkgX0FUT01fTUFTVEVSX0NPTU1BTkRfVEFCTEUgaGFzIHRoaXMgY29tbW9uIGhlYWRlci4gKi8KLS8qICBBbmQgdGhlIHBvaW50ZXIgYWN0dWFsbHkgcG9pbnRzIHRvIHRoaXMgaGVhZGVyLiAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9DT01NT05fUk9NX0NPTU1BTkRfVEFCTEVfSEVBREVSIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgQ29tbW9uSGVhZGVyOwotCUFUT01fVEFCTEVfQVRUUklCVVRFIFRhYmxlQXR0cmlidXRlOwotfSBBVE9NX0NPTU1PTl9ST01fQ09NTUFORF9UQUJMRV9IRUFERVI7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBDb21tb24gaGVhZGVyIGZvciBhbGwgY29tbWFuZCB0YWJsZXMuCisvLyBFdmVyeSB0YWJsZSBwb2ludGVkIGJ5IF9BVE9NX01BU1RFUl9DT01NQU5EX1RBQkxFIGhhcyB0aGlzIGNvbW1vbiBoZWFkZXIuIAorLy8gQW5kIHRoZSBwb2ludGVyIGFjdHVhbGx5IHBvaW50cyB0byB0aGlzIGhlYWRlci4KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0NPTU1PTl9ST01fQ09NTUFORF9UQUJMRV9IRUFERVIKK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIENvbW1vbkhlYWRlcjsKKyAgQVRPTV9UQUJMRV9BVFRSSUJVVEUgICAgIFRhYmxlQXR0cmlidXRlOwkKK31BVE9NX0NPTU1PTl9ST01fQ09NTUFORF9UQUJMRV9IRUFERVI7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBDb21wdXRlTWVtb3J5RW5naW5lUExMVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGJ5IENvbXB1dGVNZW1vcnlFbmdpbmVQTExUYWJsZQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQogI2RlZmluZSBDT01QVVRFX01FTU9SWV9QTExfUEFSQU0gICAgICAgIDEKICNkZWZpbmUgQ09NUFVURV9FTkdJTkVfUExMX1BBUkFNICAgICAgICAyCiAKLXR5cGVkZWYgc3RydWN0IF9DT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlMgewotCVVMT05HIHVsQ2xvY2s7CQkvKiBXaGVuIHJldHVyZW4sIGl0J3MgdGhlIHJlLWNhbGN1bGF0ZWQgY2xvY2sgYmFzZWQgb24gZ2l2ZW4gRmJfZGl2IFBvc3RfRGl2IGFuZCByZWZfZGl2ICovCi0JVUNIQVIgdWNBY3Rpb247CQkvKiAwOnJlc2VydmVkIC8vMTpNZW1vcnkgLy8yOkVuZ2luZSAqLwotCVVDSEFSIHVjUmVzZXJ2ZWQ7CS8qIG1heSBleHBhbmQgdG8gcmV0dXJuIGxhcmdlciBGYmRpdiBsYXRlciAqLwotCVVDSEFSIHVjRmJEaXY7CQkvKiByZXR1cm4gdmFsdWUgKi8KLQlVQ0hBUiB1Y1Bvc3REaXY7CS8qIHJldHVybiB2YWx1ZSAqLwotfSBDT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlM7Cit0eXBlZGVmIHN0cnVjdCBfQ09NUFVURV9NRU1PUllfRU5HSU5FX1BMTF9QQVJBTUVURVJTCit7CisgIFVMT05HICAgdWxDbG9jazsgICAgICAgIC8vV2hlbiByZXR1cmVuLCBpdCdzIHRoZSByZS1jYWxjdWxhdGVkIGNsb2NrIGJhc2VkIG9uIGdpdmVuIEZiX2RpdiBQb3N0X0RpdiBhbmQgcmVmX2RpdgorICBVQ0hBUiAgIHVjQWN0aW9uOyAgICAgICAvLzA6cmVzZXJ2ZWQgLy8xOk1lbW9yeSAvLzI6RW5naW5lICAKKyAgVUNIQVIgICB1Y1Jlc2VydmVkOyAgICAgLy9tYXkgZXhwYW5kIHRvIHJldHVybiBsYXJnZXIgRmJkaXYgbGF0ZXIKKyAgVUNIQVIgICB1Y0ZiRGl2OyAgICAgICAgLy9yZXR1cm4gdmFsdWUKKyAgVUNIQVIgICB1Y1Bvc3REaXY7ICAgICAgLy9yZXR1cm4gdmFsdWUKK31DT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlM7CiAKLXR5cGVkZWYgc3RydWN0IF9DT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlNfVjIgewotCVVMT05HIHVsQ2xvY2s7CQkvKiBXaGVuIHJldHVybiwgWzIzOjBdIHJldHVybiByZWFsIGNsb2NrICovCi0JVUNIQVIgdWNBY3Rpb247CQkvKiAwOnJlc2VydmVkO0NPTVBVVEVfTUVNT1JZX1BMTF9QQVJBTTpNZW1vcnk7Q09NUFVURV9FTkdJTkVfUExMX1BBUkFNOkVuZ2luZS4gaXQgcmV0dXJuIHJlZl9kaXYgdG8gYmUgd3JpdHRlbiB0byByZWdpc3RlciAqLwotCVVTSE9SVCB1c0ZiRGl2OwkJLyogcmV0dXJuIEZlZWRiYWNrIHZhbHVlIHRvIGJlIHdyaXR0ZW4gdG8gcmVnaXN0ZXIgKi8KLQlVQ0hBUiB1Y1Bvc3REaXY7CS8qIHJldHVybiBwb3N0IGRpdiB0byBiZSB3cml0dGVuIHRvIHJlZ2lzdGVyICovCi19IENPTVBVVEVfTUVNT1JZX0VOR0lORV9QTExfUEFSQU1FVEVSU19WMjsKK3R5cGVkZWYgc3RydWN0IF9DT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlNfVjIKK3sKKyAgVUxPTkcgICB1bENsb2NrOyAgICAgICAgLy9XaGVuIHJldHVybiwgWzIzOjBdIHJldHVybiByZWFsIGNsb2NrIAorICBVQ0hBUiAgIHVjQWN0aW9uOyAgICAgICAvLzA6cmVzZXJ2ZWQ7Q09NUFVURV9NRU1PUllfUExMX1BBUkFNOk1lbW9yeTtDT01QVVRFX0VOR0lORV9QTExfUEFSQU06RW5naW5lLiBpdCByZXR1cm4gcmVmX2RpdiB0byBiZSB3cml0dGVuIHRvIHJlZ2lzdGVyCisgIFVTSE9SVCAgdXNGYkRpdjsJCSAgICAvL3JldHVybiBGZWVkYmFjayB2YWx1ZSB0byBiZSB3cml0dGVuIHRvIHJlZ2lzdGVyCisgIFVDSEFSICAgdWNQb3N0RGl2OyAgICAgIC8vcmV0dXJuIHBvc3QgZGl2IHRvIGJlIHdyaXR0ZW4gdG8gcmVnaXN0ZXIKK31DT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlNfVjI7CiAjZGVmaW5lIENPTVBVVEVfTUVNT1JZX0VOR0lORV9QTExfUEFSQU1FVEVSU19QU19BTExPQ0FUSU9OICAgQ09NUFVURV9NRU1PUllfRU5HSU5FX1BMTF9QQVJBTUVURVJTCiAKLSNkZWZpbmUgU0VUX0NMT0NLX0ZSRVFfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDBGRkZGRkYJLyogQ2xvY2sgY2hhbmdlIHRhYmxlcyBvbmx5IHRha2UgYml0IFsyMzowXSBhcyB0aGUgcmVxdWVzdGVkIGNsb2NrIHZhbHVlICovCi0jZGVmaW5lIFVTRV9OT05fQlVTX0NMT0NLX01BU0sgICAgICAgICAgICAgICAgICAweDAxMDAwMDAwCS8qIEFwcGxpY2FibGUgdG8gYm90aCBtZW1vcnkgYW5kIGVuZ2luZSBjbG9jayBjaGFuZ2UsIHdoZW4gc2V0LCBpdCB1c2VzIGFub3RoZXIgY2xvY2sgYXMgdGhlIHRlbXBvcmFyeSBjbG9jayAoZW5naW5lIHVzZXMgbWVtb3J5IGFuZCB2aWNlIHZlcnNhKSAqLwotI2RlZmluZSBVU0VfTUVNT1JZX1NFTEZfUkVGUkVTSF9NQVNLICAgICAgICAgICAgMHgwMjAwMDAwMAkvKiBPbmx5IGFwcGxpY2FibGUgdG8gbWVtb3J5IGNsb2NrIGNoYW5nZSwgd2hlbiBzZXQsIHVzaW5nIG1lbW9yeSBzZWxmIHJlZnJlc2ggZHVyaW5nIGNsb2NrIHRyYW5zaXRpb24gKi8KLSNkZWZpbmUgU0tJUF9JTlRFUk5BTF9NRU1PUllfUEFSQU1FVEVSX0NIQU5HRSAgIDB4MDQwMDAwMDAJLyogT25seSBhcHBsaWNhYmxlIHRvIG1lbW9yeSBjbG9jayBjaGFuZ2UsIHdoZW4gc2V0LCB0aGUgdGFibGUgd2lsbCBza2lwIHByZWRlZmluZWQgaW50ZXJuYWwgbWVtb3J5IHBhcmFtZXRlciBjaGFuZ2UgKi8KLSNkZWZpbmUgRklSU1RfVElNRV9DSEFOR0VfQ0xPQ0sJCQkJCQkJCQkweDA4MDAwMDAwCS8qIEFwcGxpY2FibGUgdG8gYm90aCBtZW1vcnkgYW5kIGVuZ2luZSBjbG9jayBjaGFuZ2Usd2hlbiBzZXQsIGl0IG1lYW5zIHRoaXMgaXMgMXN0IHRpbWUgdG8gY2hhbmdlIGNsb2NrIGFmdGVyIEFTSUMgYm9vdHVwICovCi0jZGVmaW5lIFNLSVBfU1dfUFJPR1JBTV9QTEwJCQkJCQkJCQkJCTB4MTAwMDAwMDAJLyogQXBwbGljYWJsZSB0byBib3RoIG1lbW9yeSBhbmQgZW5naW5lIGNsb2NrIGNoYW5nZSwgd2hlbiBzZXQsIGl0IG1lYW5zIHRoZSB0YWJsZSB3aWxsIG5vdCBwcm9ncmFtIFNQTEwvTVBMTCAqLworCisjZGVmaW5lIFNFVF9DTE9DS19GUkVRX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwRkZGRkZGICAvL0Nsb2NrIGNoYW5nZSB0YWJsZXMgb25seSB0YWtlIGJpdCBbMjM6MF0gYXMgdGhlIHJlcXVlc3RlZCBjbG9jayB2YWx1ZQorI2RlZmluZSBVU0VfTk9OX0JVU19DTE9DS19NQVNLICAgICAgICAgICAgICAgICAgMHgwMTAwMDAwMCAgLy9BcHBsaWNhYmxlIHRvIGJvdGggbWVtb3J5IGFuZCBlbmdpbmUgY2xvY2sgY2hhbmdlLCB3aGVuIHNldCwgaXQgdXNlcyBhbm90aGVyIGNsb2NrIGFzIHRoZSB0ZW1wb3JhcnkgY2xvY2sgKGVuZ2luZSB1c2VzIG1lbW9yeSBhbmQgdmljZSB2ZXJzYSkKKyNkZWZpbmUgVVNFX01FTU9SWV9TRUxGX1JFRlJFU0hfTUFTSyAgICAgICAgICAgIDB4MDIwMDAwMDAJLy9Pbmx5IGFwcGxpY2FibGUgdG8gbWVtb3J5IGNsb2NrIGNoYW5nZSwgd2hlbiBzZXQsIHVzaW5nIG1lbW9yeSBzZWxmIHJlZnJlc2ggZHVyaW5nIGNsb2NrIHRyYW5zaXRpb24KKyNkZWZpbmUgU0tJUF9JTlRFUk5BTF9NRU1PUllfUEFSQU1FVEVSX0NIQU5HRSAgIDB4MDQwMDAwMDAgIC8vT25seSBhcHBsaWNhYmxlIHRvIG1lbW9yeSBjbG9jayBjaGFuZ2UsIHdoZW4gc2V0LCB0aGUgdGFibGUgd2lsbCBza2lwIHByZWRlZmluZWQgaW50ZXJuYWwgbWVtb3J5IHBhcmFtZXRlciBjaGFuZ2UKKyNkZWZpbmUgRklSU1RfVElNRV9DSEFOR0VfQ0xPQ0sJCQkJCQkJCQkweDA4MDAwMDAwCS8vQXBwbGljYWJsZSB0byBib3RoIG1lbW9yeSBhbmQgZW5naW5lIGNsb2NrIGNoYW5nZSx3aGVuIHNldCwgaXQgbWVhbnMgdGhpcyBpcyAxc3QgdGltZSB0byBjaGFuZ2UgY2xvY2sgYWZ0ZXIgQVNJQyBib290dXAKKyNkZWZpbmUgU0tJUF9TV19QUk9HUkFNX1BMTAkJCQkJCQkJCQkJMHgxMDAwMDAwMAkvL0FwcGxpY2FibGUgdG8gYm90aCBtZW1vcnkgYW5kIGVuZ2luZSBjbG9jayBjaGFuZ2UsIHdoZW4gc2V0LCBpdCBtZWFucyB0aGUgdGFibGUgd2lsbCBub3QgcHJvZ3JhbSBTUExML01QTEwKICNkZWZpbmUgVVNFX1NTX0VOQUJMRURfUElYRUxfQ0xPQ0sgIFVTRV9OT05fQlVTX0NMT0NLX01BU0sKIAotI2RlZmluZSBiM1VTRV9OT05fQlVTX0NMT0NLX01BU0sgICAgICAgICAgICAgICAgICAweDAxCS8qIEFwcGxpY2FibGUgdG8gYm90aCBtZW1vcnkgYW5kIGVuZ2luZSBjbG9jayBjaGFuZ2UsIHdoZW4gc2V0LCBpdCB1c2VzIGFub3RoZXIgY2xvY2sgYXMgdGhlIHRlbXBvcmFyeSBjbG9jayAoZW5naW5lIHVzZXMgbWVtb3J5IGFuZCB2aWNlIHZlcnNhKSAqLwotI2RlZmluZSBiM1VTRV9NRU1PUllfU0VMRl9SRUZSRVNIICAgICAgICAgICAgICAgICAweDAyCS8qIE9ubHkgYXBwbGljYWJsZSB0byBtZW1vcnkgY2xvY2sgY2hhbmdlLCB3aGVuIHNldCwgdXNpbmcgbWVtb3J5IHNlbGYgcmVmcmVzaCBkdXJpbmcgY2xvY2sgdHJhbnNpdGlvbiAqLwotI2RlZmluZSBiM1NLSVBfSU5URVJOQUxfTUVNT1JZX1BBUkFNRVRFUl9DSEFOR0UgICAweDA0CS8qIE9ubHkgYXBwbGljYWJsZSB0byBtZW1vcnkgY2xvY2sgY2hhbmdlLCB3aGVuIHNldCwgdGhlIHRhYmxlIHdpbGwgc2tpcCBwcmVkZWZpbmVkIGludGVybmFsIG1lbW9yeSBwYXJhbWV0ZXIgY2hhbmdlICovCi0jZGVmaW5lIGIzRklSU1RfVElNRV9DSEFOR0VfQ0xPQ0sJCQkJCQkJCQkweDA4CS8qIEFwcGxpY2FibGUgdG8gYm90aCBtZW1vcnkgYW5kIGVuZ2luZSBjbG9jayBjaGFuZ2Usd2hlbiBzZXQsIGl0IG1lYW5zIHRoaXMgaXMgMXN0IHRpbWUgdG8gY2hhbmdlIGNsb2NrIGFmdGVyIEFTSUMgYm9vdHVwICovCi0jZGVmaW5lIGIzU0tJUF9TV19QUk9HUkFNX1BMTAkJCQkJCQkJCQkJMHgxMAkvKiBBcHBsaWNhYmxlIHRvIGJvdGggbWVtb3J5IGFuZCBlbmdpbmUgY2xvY2sgY2hhbmdlLCB3aGVuIHNldCwgaXQgbWVhbnMgdGhlIHRhYmxlIHdpbGwgbm90IHByb2dyYW0gU1BMTC9NUExMICovCisjZGVmaW5lIGIzVVNFX05PTl9CVVNfQ0xPQ0tfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDEgICAgICAgLy9BcHBsaWNhYmxlIHRvIGJvdGggbWVtb3J5IGFuZCBlbmdpbmUgY2xvY2sgY2hhbmdlLCB3aGVuIHNldCwgaXQgdXNlcyBhbm90aGVyIGNsb2NrIGFzIHRoZSB0ZW1wb3JhcnkgY2xvY2sgKGVuZ2luZSB1c2VzIG1lbW9yeSBhbmQgdmljZSB2ZXJzYSkKKyNkZWZpbmUgYjNVU0VfTUVNT1JZX1NFTEZfUkVGUkVTSCAgICAgICAgICAgICAgICAgMHgwMgkgICAgIC8vT25seSBhcHBsaWNhYmxlIHRvIG1lbW9yeSBjbG9jayBjaGFuZ2UsIHdoZW4gc2V0LCB1c2luZyBtZW1vcnkgc2VsZiByZWZyZXNoIGR1cmluZyBjbG9jayB0cmFuc2l0aW9uCisjZGVmaW5lIGIzU0tJUF9JTlRFUk5BTF9NRU1PUllfUEFSQU1FVEVSX0NIQU5HRSAgIDB4MDQgICAgICAgLy9Pbmx5IGFwcGxpY2FibGUgdG8gbWVtb3J5IGNsb2NrIGNoYW5nZSwgd2hlbiBzZXQsIHRoZSB0YWJsZSB3aWxsIHNraXAgcHJlZGVmaW5lZCBpbnRlcm5hbCBtZW1vcnkgcGFyYW1ldGVyIGNoYW5nZQorI2RlZmluZSBiM0ZJUlNUX1RJTUVfQ0hBTkdFX0NMT0NLCQkJCQkJCQkJMHgwOCAgICAgICAvL0FwcGxpY2FibGUgdG8gYm90aCBtZW1vcnkgYW5kIGVuZ2luZSBjbG9jayBjaGFuZ2Usd2hlbiBzZXQsIGl0IG1lYW5zIHRoaXMgaXMgMXN0IHRpbWUgdG8gY2hhbmdlIGNsb2NrIGFmdGVyIEFTSUMgYm9vdHVwCisjZGVmaW5lIGIzU0tJUF9TV19QUk9HUkFNX1BMTAkJCQkJCQkJCQkJMHgxMAkJCSAvL0FwcGxpY2FibGUgdG8gYm90aCBtZW1vcnkgYW5kIGVuZ2luZSBjbG9jayBjaGFuZ2UsIHdoZW4gc2V0LCBpdCBtZWFucyB0aGUgdGFibGUgd2lsbCBub3QgcHJvZ3JhbSBTUExML01QTEwKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fQ09NUFVURV9DTE9DS19GUkVRIHsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0NPTVBVVEVfQ0xPQ0tfRlJFUQorewogI2lmIEFUT01fQklHX0VORElBTgotCVVMT05HIHVsQ29tcHV0ZUNsb2NrRmxhZzo4OwkvKiAgPTE6IENPTVBVVEVfTUVNT1JZX1BMTF9QQVJBTSwgPTI6IENPTVBVVEVfRU5HSU5FX1BMTF9QQVJBTSAqLwotCVVMT05HIHVsQ2xvY2tGcmVxOjI0OwkvKiAgaW4gdW5pdCBvZiAxMGtIeiAqLworICBVTE9ORyB1bENvbXB1dGVDbG9ja0ZsYWc6ODsgICAgICAgICAgICAgICAgIC8vID0xOiBDT01QVVRFX01FTU9SWV9QTExfUEFSQU0sID0yOiBDT01QVVRFX0VOR0lORV9QTExfUEFSQU0KKyAgVUxPTkcgdWxDbG9ja0ZyZXE6MjQ7ICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiB1bml0IG9mIDEwa0h6CiAjZWxzZQotCVVMT05HIHVsQ2xvY2tGcmVxOjI0OwkvKiAgaW4gdW5pdCBvZiAxMGtIeiAqLwotCVVMT05HIHVsQ29tcHV0ZUNsb2NrRmxhZzo4OwkvKiAgPTE6IENPTVBVVEVfTUVNT1JZX1BMTF9QQVJBTSwgPTI6IENPTVBVVEVfRU5HSU5FX1BMTF9QQVJBTSAqLworICBVTE9ORyB1bENsb2NrRnJlcToyNDsgICAgICAgICAgICAgICAgICAgICAgIC8vIGluIHVuaXQgb2YgMTBrSHoKKyAgVUxPTkcgdWxDb21wdXRlQ2xvY2tGbGFnOjg7ICAgICAgICAgICAgICAgICAvLyA9MTogQ09NUFVURV9NRU1PUllfUExMX1BBUkFNLCA9MjogQ09NUFVURV9FTkdJTkVfUExMX1BBUkFNCiAjZW5kaWYKLX0gQVRPTV9DT01QVVRFX0NMT0NLX0ZSRVE7Cit9QVRPTV9DT01QVVRFX0NMT0NLX0ZSRVE7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1NfTVBMTF9GQl9ESVZJREVSIHsKLQlVU0hPUlQgdXNGYkRpdkZyYWM7Ci0JVVNIT1JUIHVzRmJEaXY7Ci19IEFUT01fU19NUExMX0ZCX0RJVklERVI7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9TX01QTExfRkJfRElWSURFUgoreworICBVU0hPUlQgdXNGYkRpdkZyYWM7ICAKKyAgVVNIT1JUIHVzRmJEaXY7ICAKK31BVE9NX1NfTVBMTF9GQl9ESVZJREVSOwogCi10eXBlZGVmIHN0cnVjdCBfQ09NUFVURV9NRU1PUllfRU5HSU5FX1BMTF9QQVJBTUVURVJTX1YzIHsKLQl1bmlvbiB7Ci0JCUFUT01fQ09NUFVURV9DTE9DS19GUkVRIHVsQ2xvY2s7CS8qIElucHV0IFBhcmFtZXRlciAqLwotCQlBVE9NX1NfTVBMTF9GQl9ESVZJREVSIHVsRmJEaXY7CS8qIE91dHB1dCBQYXJhbWV0ZXIgKi8KLQl9OwotCVVDSEFSIHVjUmVmRGl2OwkJLyogT3V0cHV0IFBhcmFtZXRlciAqLwotCVVDSEFSIHVjUG9zdERpdjsJLyogT3V0cHV0IFBhcmFtZXRlciAqLwotCVVDSEFSIHVjQ250bEZsYWc7CS8qIE91dHB1dCBQYXJhbWV0ZXIgKi8KLQlVQ0hBUiB1Y1Jlc2VydmVkOwotfSBDT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlNfVjM7Cit0eXBlZGVmIHN0cnVjdCBfQ09NUFVURV9NRU1PUllfRU5HSU5FX1BMTF9QQVJBTUVURVJTX1YzCit7CisgIHVuaW9uCisgIHsKKyAgICBBVE9NX0NPTVBVVEVfQ0xPQ0tfRlJFUSAgdWxDbG9jazsgICAgICAgICAvL0lucHV0IFBhcmFtZXRlcgorICAgIEFUT01fU19NUExMX0ZCX0RJVklERVIgICB1bEZiRGl2OyAgICAgICAgIC8vT3V0cHV0IFBhcmFtZXRlcgorICB9OworICBVQ0hBUiAgIHVjUmVmRGl2OyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vT3V0cHV0IFBhcmFtZXRlciAgICAgIAorICBVQ0hBUiAgIHVjUG9zdERpdjsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vT3V0cHV0IFBhcmFtZXRlciAgICAgIAorICBVQ0hBUiAgIHVjQ250bEZsYWc7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vT3V0cHV0IFBhcmFtZXRlciAgICAgIAorICBVQ0hBUiAgIHVjUmVzZXJ2ZWQ7Cit9Q09NUFVURV9NRU1PUllfRU5HSU5FX1BMTF9QQVJBTUVURVJTX1YzOwogCi0vKiAgdWNDbnRsRmxhZyAqLworLy8gdWNDbnRsRmxhZwogI2RlZmluZSBBVE9NX1BMTF9DTlRMX0ZMQUdfUExMX1BPU1RfRElWX0VOICAgICAgICAgIDEKICNkZWZpbmUgQVRPTV9QTExfQ05UTF9GTEFHX01QTExfVkNPX01PREUgICAgICAgICAgICAyCiAjZGVmaW5lIEFUT01fUExMX0NOVExfRkxBR19GUkFDVElPTl9ESVNBQkxFICAgICAgICAgNAorI2RlZmluZSBBVE9NX1BMTF9DTlRMX0ZMQUdfU1BMTF9JU1BBUkVfOQkJCQkJCTgKIAotdHlwZWRlZiBzdHJ1Y3QgX0RZTkFNSUNFX01FTU9SWV9TRVRUSU5HU19QQVJBTUVURVIgewotCUFUT01fQ09NUFVURV9DTE9DS19GUkVRIHVsQ2xvY2s7Ci0JVUxPTkcgdWxSZXNlcnZlZFsyXTsKLX0gRFlOQU1JQ0VfTUVNT1JZX1NFVFRJTkdTX1BBUkFNRVRFUjsKIAotdHlwZWRlZiBzdHJ1Y3QgX0RZTkFNSUNFX0VOR0lORV9TRVRUSU5HU19QQVJBTUVURVIgewotCUFUT01fQ09NUFVURV9DTE9DS19GUkVRIHVsQ2xvY2s7Ci0JVUxPTkcgdWxNZW1vcnlDbG9jazsKLQlVTE9ORyB1bFJlc2VydmVkOwotfSBEWU5BTUlDRV9FTkdJTkVfU0VUVElOR1NfUEFSQU1FVEVSOworLy8gVjQgYXJlIG9ubHkgdXNlZCBmb3IgQVBVIHdoaWNoIFBMTCBvdXRzaWRlIEdQVQordHlwZWRlZiBzdHJ1Y3QgX0NPTVBVVEVfTUVNT1JZX0VOR0lORV9QTExfUEFSQU1FVEVSU19WNAoreworI2lmIEFUT01fQklHX0VORElBTgorICBVTE9ORyAgdWNQb3N0RGl2OyAgICAgICAgICAvL3JldHVybiBwYXJhbWV0ZXI6IHBvc3QgZGl2aWRlciB3aGljaCBpcyB1c2VkIHRvIHByb2dyYW0gdG8gcmVnaXN0ZXIgZGlyZWN0bHkKKyAgVUxPTkcgIHVsQ2xvY2s6MjQ7ICAgICAgICAgLy9JbnB1dD0gdGFyZ2V0IGNsb2NrLCBvdXRwdXQgPSBhY3R1YWwgY2xvY2sgCisjZWxzZQorICBVTE9ORyAgdWxDbG9jazoyNDsgICAgICAgICAvL0lucHV0PSB0YXJnZXQgY2xvY2ssIG91dHB1dCA9IGFjdHVhbCBjbG9jayAKKyAgVUxPTkcgIHVjUG9zdERpdjsgICAgICAgICAgLy9yZXR1cm4gcGFyYW1ldGVyOiBwb3N0IGRpdmlkZXIgd2hpY2ggaXMgdXNlZCB0byBwcm9ncmFtIHRvIHJlZ2lzdGVyIGRpcmVjdGx5CisjZW5kaWYKK31DT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlNfVjQ7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBTZXRFbmdpbmVDbG9ja1RhYmxlICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9TRVRfRU5HSU5FX0NMT0NLX1BBUkFNRVRFUlMgewotCVVMT05HIHVsVGFyZ2V0RW5naW5lQ2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLX0gU0VUX0VOR0lORV9DTE9DS19QQVJBTUVURVJTOwordHlwZWRlZiBzdHJ1Y3QgX0RZTkFNSUNFX01FTU9SWV9TRVRUSU5HU19QQVJBTUVURVIKK3sKKyAgQVRPTV9DT01QVVRFX0NMT0NLX0ZSRVEgdWxDbG9jazsKKyAgVUxPTkcgdWxSZXNlcnZlZFsyXTsKK31EWU5BTUlDRV9NRU1PUllfU0VUVElOR1NfUEFSQU1FVEVSOwogCi10eXBlZGVmIHN0cnVjdCBfU0VUX0VOR0lORV9DTE9DS19QU19BTExPQ0FUSU9OIHsKLQlVTE9ORyB1bFRhcmdldEVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JQ09NUFVURV9NRU1PUllfRU5HSU5FX1BMTF9QQVJBTUVURVJTX1BTX0FMTE9DQVRJT04gc1Jlc2VydmVkOwotfSBTRVRfRU5HSU5FX0NMT0NLX1BTX0FMTE9DQVRJT047Cit0eXBlZGVmIHN0cnVjdCBfRFlOQU1JQ0VfRU5HSU5FX1NFVFRJTkdTX1BBUkFNRVRFUgoreworICBBVE9NX0NPTVBVVEVfQ0xPQ0tfRlJFUSB1bENsb2NrOworICBVTE9ORyB1bE1lbW9yeUNsb2NrOworICBVTE9ORyB1bFJlc2VydmVkOworfURZTkFNSUNFX0VOR0lORV9TRVRUSU5HU19QQVJBTUVURVI7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBTZXRNZW1vcnlDbG9ja1RhYmxlICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9TRVRfTUVNT1JZX0NMT0NLX1BBUkFNRVRFUlMgewotCVVMT05HIHVsVGFyZ2V0TWVtb3J5Q2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLX0gU0VUX01FTU9SWV9DTE9DS19QQVJBTUVURVJTOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGJ5IFNldEVuZ2luZUNsb2NrVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9TRVRfRU5HSU5FX0NMT0NLX1BBUkFNRVRFUlMKK3sKKyAgVUxPTkcgdWxUYXJnZXRFbmdpbmVDbG9jazsgICAgICAgICAgLy9JbiAxMEtoeiB1bml0Cit9U0VUX0VOR0lORV9DTE9DS19QQVJBTUVURVJTOwogCi10eXBlZGVmIHN0cnVjdCBfU0VUX01FTU9SWV9DTE9DS19QU19BTExPQ0FUSU9OIHsKLQlVTE9ORyB1bFRhcmdldE1lbW9yeUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JQ09NUFVURV9NRU1PUllfRU5HSU5FX1BMTF9QQVJBTUVURVJTX1BTX0FMTE9DQVRJT04gc1Jlc2VydmVkOwotfSBTRVRfTUVNT1JZX0NMT0NLX1BTX0FMTE9DQVRJT047Cit0eXBlZGVmIHN0cnVjdCBfU0VUX0VOR0lORV9DTE9DS19QU19BTExPQ0FUSU9OCit7CisgIFVMT05HIHVsVGFyZ2V0RW5naW5lQ2xvY2s7ICAgICAgICAgIC8vSW4gMTBLaHogdW5pdAorICBDT01QVVRFX01FTU9SWV9FTkdJTkVfUExMX1BBUkFNRVRFUlNfUFNfQUxMT0NBVElPTiBzUmVzZXJ2ZWQ7Cit9U0VUX0VOR0lORV9DTE9DS19QU19BTExPQ0FUSU9OOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgQVNJQ19Jbml0LmN0YiAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfQVNJQ19JTklUX1BBUkFNRVRFUlMgewotCVVMT05HIHVsRGVmYXVsdEVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxEZWZhdWx0TWVtb3J5Q2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLX0gQVNJQ19JTklUX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgU2V0TWVtb3J5Q2xvY2tUYWJsZQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQordHlwZWRlZiBzdHJ1Y3QgX1NFVF9NRU1PUllfQ0xPQ0tfUEFSQU1FVEVSUworeworICBVTE9ORyB1bFRhcmdldE1lbW9yeUNsb2NrOyAgICAgICAgICAvL0luIDEwS2h6IHVuaXQKK31TRVRfTUVNT1JZX0NMT0NLX1BBUkFNRVRFUlM7CiAKLXR5cGVkZWYgc3RydWN0IF9BU0lDX0lOSVRfUFNfQUxMT0NBVElPTiB7Ci0JQVNJQ19JTklUX1BBUkFNRVRFUlMgc0FTSUNJbml0Q2xvY2tzOwotCVNFVF9FTkdJTkVfQ0xPQ0tfUFNfQUxMT0NBVElPTiBzUmVzZXJ2ZWQ7CS8qIENhbGxlciBkb2Vzbid0IG5lZWQgdG8gaW5pdCB0aGlzIHN0cnVjdHVyZSAqLwotfSBBU0lDX0lOSVRfUFNfQUxMT0NBVElPTjsKK3R5cGVkZWYgc3RydWN0IF9TRVRfTUVNT1JZX0NMT0NLX1BTX0FMTE9DQVRJT04KK3sKKyAgVUxPTkcgdWxUYXJnZXRNZW1vcnlDbG9jazsgICAgICAgICAgLy9JbiAxMEtoeiB1bml0CisgIENPTVBVVEVfTUVNT1JZX0VOR0lORV9QTExfUEFSQU1FVEVSU19QU19BTExPQ0FUSU9OIHNSZXNlcnZlZDsKK31TRVRfTUVNT1JZX0NMT0NLX1BTX0FMTE9DQVRJT047CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZSB1c2VkIGJ5IER5bmFtaWNDbG9ja0dhdGluZ1RhYmxlLmN0YiAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfRFlOQU1JQ19DTE9DS19HQVRJTkdfUEFSQU1FVEVSUyB7Ci0JVUNIQVIgdWNFbmFibGU7CQkvKiAgQVRPTV9FTkFCTEUgb3IgQVRPTV9ESVNBQkxFICovCi0JVUNIQVIgdWNQYWRkaW5nWzNdOwotfSBEWU5BTUlDX0NMT0NLX0dBVElOR19QQVJBTUVURVJTOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGJ5IEFTSUNfSW5pdC5jdGIKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9BU0lDX0lOSVRfUEFSQU1FVEVSUworeworICBVTE9ORyB1bERlZmF1bHRFbmdpbmVDbG9jazsgICAgICAgICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgdWxEZWZhdWx0TWVtb3J5Q2xvY2s7ICAgICAgICAgLy9JbiAxMEtoeiB1bml0Cit9QVNJQ19JTklUX1BBUkFNRVRFUlM7CisKK3R5cGVkZWYgc3RydWN0IF9BU0lDX0lOSVRfUFNfQUxMT0NBVElPTgoreworICBBU0lDX0lOSVRfUEFSQU1FVEVSUyBzQVNJQ0luaXRDbG9ja3M7CisgIFNFVF9FTkdJTkVfQ0xPQ0tfUFNfQUxMT0NBVElPTiBzUmVzZXJ2ZWQ7IC8vQ2FsbGVyIGRvZXNuJ3QgbmVlZCB0byBpbml0IHRoaXMgc3RydWN0dXJlCit9QVNJQ19JTklUX1BTX0FMTE9DQVRJT047CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZSB1c2VkIGJ5IER5bmFtaWNDbG9ja0dhdGluZ1RhYmxlLmN0YgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQordHlwZWRlZiBzdHJ1Y3QgX0RZTkFNSUNfQ0xPQ0tfR0FUSU5HX1BBUkFNRVRFUlMgCit7CisgIFVDSEFSIHVjRW5hYmxlOyAgICAgICAgICAgICAgICAgICAgIC8vIEFUT01fRU5BQkxFIG9yIEFUT01fRElTQUJMRQorICBVQ0hBUiB1Y1BhZGRpbmdbM107Cit9RFlOQU1JQ19DTE9DS19HQVRJTkdfUEFSQU1FVEVSUzsKICNkZWZpbmUgIERZTkFNSUNfQ0xPQ0tfR0FUSU5HX1BTX0FMTE9DQVRJT04gIERZTkFNSUNfQ0xPQ0tfR0FUSU5HX1BBUkFNRVRFUlMKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlIHVzZWQgYnkgRW5hYmxlQVNJQ19TdGF0aWNQd3JNZ3RUYWJsZS5jdGIgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9BU0lDX1NUQVRJQ19QV1JfTUdUX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjRW5hYmxlOwkJLyogIEFUT01fRU5BQkxFIG9yIEFUT01fRElTQUJMRSAqLwotCVVDSEFSIHVjUGFkZGluZ1szXTsKLX0gRU5BQkxFX0FTSUNfU1RBVElDX1BXUl9NR1RfUEFSQU1FVEVSUzsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZSB1c2VkIGJ5IEVuYWJsZUFTSUNfU3RhdGljUHdyTWd0VGFibGUuY3RiCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfRU5BQkxFX0FTSUNfU1RBVElDX1BXUl9NR1RfUEFSQU1FVEVSUworeworICBVQ0hBUiB1Y0VuYWJsZTsgICAgICAgICAgICAgICAgICAgICAvLyBBVE9NX0VOQUJMRSBvciBBVE9NX0RJU0FCTEUKKyAgVUNIQVIgdWNQYWRkaW5nWzNdOworfUVOQUJMRV9BU0lDX1NUQVRJQ19QV1JfTUdUX1BBUkFNRVRFUlM7CiAjZGVmaW5lIEVOQUJMRV9BU0lDX1NUQVRJQ19QV1JfTUdUX1BTX0FMTE9DQVRJT04gIEVOQUJMRV9BU0lDX1NUQVRJQ19QV1JfTUdUX1BBUkFNRVRFUlMKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlcyB1c2VkIGJ5IERBQ19Mb2FkRGV0ZWN0aW9uVGFibGUuY3RiICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9EQUNfTE9BRF9ERVRFQ1RJT05fUEFSQU1FVEVSUyB7Ci0JVVNIT1JUIHVzRGV2aWNlSUQ7CS8qIHtBVE9NX0RFVklDRV9DUlR4X1NVUFBPUlQsQVRPTV9ERVZJQ0VfVFZ4X1NVUFBPUlQsQVRPTV9ERVZJQ0VfQ1Z4X1NVUFBPUlR9ICovCi0JVUNIQVIgdWNEYWNUeXBlOwkvKiB7QVRPTV9EQUNfQSxBVE9NX0RBQ19CLCBBVE9NX0VYVF9EQUN9ICovCi0JVUNIQVIgdWNNaXNjOwkJLyogVmFsaWQgb25seSB3aGVuIHRhYmxlIHJldmlzaW9uID0xLjMgYW5kIGFib3ZlICovCi19IERBQ19MT0FEX0RFVEVDVElPTl9QQVJBTUVURVJTOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGJ5IERBQ19Mb2FkRGV0ZWN0aW9uVGFibGUuY3RiCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfREFDX0xPQURfREVURUNUSU9OX1BBUkFNRVRFUlMKK3sKKyAgVVNIT1JUIHVzRGV2aWNlSUQ7ICAgICAgICAgICAgICAgICAgLy97QVRPTV9ERVZJQ0VfQ1JUeF9TVVBQT1JULEFUT01fREVWSUNFX1RWeF9TVVBQT1JULEFUT01fREVWSUNFX0NWeF9TVVBQT1JUfQorICBVQ0hBUiAgdWNEYWNUeXBlOyAgICAgICAgICAgICAgICAgICAvL3tBVE9NX0RBQ19BLEFUT01fREFDX0IsIEFUT01fRVhUX0RBQ30KKyAgVUNIQVIgIHVjTWlzYzsJCQkJCQkJCQkJCS8vVmFsaWQgb25seSB3aGVuIHRhYmxlIHJldmlzaW9uID0xLjMgYW5kIGFib3ZlCit9REFDX0xPQURfREVURUNUSU9OX1BBUkFNRVRFUlM7CiAKLS8qICBEQUNfTE9BRF9ERVRFQ1RJT05fUEFSQU1FVEVSUy51Y01pc2MgKi8KKy8vIERBQ19MT0FEX0RFVEVDVElPTl9QQVJBTUVURVJTLnVjTWlzYwogI2RlZmluZSBEQUNfTE9BRF9NSVNDX1lQclBiCQkJCQkJMHgwMQogCi10eXBlZGVmIHN0cnVjdCBfREFDX0xPQURfREVURUNUSU9OX1BTX0FMTE9DQVRJT04gewotCURBQ19MT0FEX0RFVEVDVElPTl9QQVJBTUVURVJTIHNEYWNsb2FkOwotCVVMT05HIFJlc2VydmVkWzJdOwkvKiAgRG9uJ3Qgc2V0IHRoaXMgb25lLCBhbGxvY2F0aW9uIGZvciBFWFQgREFDICovCi19IERBQ19MT0FEX0RFVEVDVElPTl9QU19BTExPQ0FUSU9OOwordHlwZWRlZiBzdHJ1Y3QgX0RBQ19MT0FEX0RFVEVDVElPTl9QU19BTExPQ0FUSU9OCit7CisgIERBQ19MT0FEX0RFVEVDVElPTl9QQVJBTUVURVJTICAgICAgICAgICAgc0RhY2xvYWQ7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWRbMl07Ly8gRG9uJ3Qgc2V0IHRoaXMgb25lLCBhbGxvY2F0aW9uIGZvciBFWFQgREFDCit9REFDX0xPQURfREVURUNUSU9OX1BTX0FMTE9DQVRJT047CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBEQUMxRW5jb2RlckNvbnRyb2xUYWJsZS5jdGIgYW5kIERBQzJFbmNvZGVyQ29udHJvbFRhYmxlLmN0YiAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfREFDX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTIHsKLQlVU0hPUlQgdXNQaXhlbENsb2NrOwkvKiAgaW4gMTBLSHo7IGZvciBiaW9zIGNvbnZlbmllbnQgKi8KLQlVQ0hBUiB1Y0RhY1N0YW5kYXJkOwkvKiAgU2VlIGRlZmluaXRpb24gb2YgQVRPTV9EQUN4X3h4eCwgRm9yIERFQzMuMCwgYml0IDcgdXNlZCBhcyBpbnRlcm5hbCBmbGFnIHRvIGluZGljYXRlIERBQzIgKD09MSkgb3IgREFDMSAoPT0wKSAqLwotCVVDSEFSIHVjQWN0aW9uOwkJLyogIDA6IHR1cm4gb2ZmIGVuY29kZXIgKi8KLQkvKiAgMTogc2V0dXAgYW5kIHR1cm4gb24gZW5jb2RlciAqLwotCS8qICA3OiBBVE9NX0VOQ09ERVJfSU5JVCBJbml0aWFsaXplIERBQyAqLwotfSBEQUNfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgREFDMUVuY29kZXJDb250cm9sVGFibGUuY3RiIGFuZCBEQUMyRW5jb2RlckNvbnRyb2xUYWJsZS5jdGIKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9EQUNfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMgCit7CisgIFVTSE9SVCB1c1BpeGVsQ2xvY2s7ICAgICAgICAgICAgICAgIC8vIGluIDEwS0h6OyBmb3IgYmlvcyBjb252ZW5pZW50CisgIFVDSEFSICB1Y0RhY1N0YW5kYXJkOyAgICAgICAgICAgICAgIC8vIFNlZSBkZWZpbml0aW9uIG9mIEFUT01fREFDeF94eHgsIEZvciBERUMzLjAsIGJpdCA3IHVzZWQgYXMgaW50ZXJuYWwgZmxhZyB0byBpbmRpY2F0ZSBEQUMyICg9PTEpIG9yIERBQzEgKD09MCkKKyAgVUNIQVIgIHVjQWN0aW9uOyAgICAgICAgICAgICAgICAgICAgLy8gMDogdHVybiBvZmYgZW5jb2RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxOiBzZXR1cCBhbmQgdHVybiBvbiBlbmNvZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDc6IEFUT01fRU5DT0RFUl9JTklUIEluaXRpYWxpemUgREFDCit9REFDX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTOwogCiAjZGVmaW5lIERBQ19FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTiAgREFDX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBESUcxRW5jb2RlckNvbnRyb2xUYWJsZSAqLwotLyogICAgICAgICAgICAgICAgICAgICBESUcyRW5jb2RlckNvbnRyb2xUYWJsZSAqLwotLyogICAgICAgICAgICAgICAgICAgICBFeHRlcm5hbEVuY29kZXJDb250cm9sVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0RJR19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSUyB7Ci0JVVNIT1JUIHVzUGl4ZWxDbG9jazsJLyogIGluIDEwS0h6OyBmb3IgYmlvcyBjb252ZW5pZW50ICovCi0JVUNIQVIgdWNDb25maWc7Ci0JLyogIFsyXSBMaW5rIFNlbGVjdDogKi8KLQkvKiAgPTA6IFBIWSBsaW5rQSBpZiBiZkxhbmU8MyAqLwotCS8qICA9MTogUEhZIGxpbmtCIGlmIGJmTGFuZXM8MyAqLwotCS8qICA9MDogUEhZIGxpbmtBK0IgaWYgYmZMYW5lcz0zICovCi0JLyogIFszXSBUcmFuc21pdHRlciBTZWwgKi8KLQkvKiAgPTA6IFVOSVBIWSBvciBQQ0lFUEhZICovCi0JLyogID0xOiBMVlRNQSAqLwotCVVDSEFSIHVjQWN0aW9uOwkJLyogID0wOiB0dXJuIG9mZiBlbmNvZGVyICovCi0JLyogID0xOiB0dXJuIG9uIGVuY29kZXIgKi8KLQlVQ0hBUiB1Y0VuY29kZXJNb2RlOwotCS8qICA9MDogRFAgICBlbmNvZGVyICovCi0JLyogID0xOiBMVkRTIGVuY29kZXIgKi8KLQkvKiAgPTI6IERWSSAgZW5jb2RlciAqLwotCS8qICA9MzogSERNSSBlbmNvZGVyICovCi0JLyogID00OiBTRFZPIGVuY29kZXIgKi8KLQlVQ0hBUiB1Y0xhbmVOdW07CS8qICBob3cgbWFueSBsYW5lcyB0byBlbmFibGUgKi8KLQlVQ0hBUiB1Y1Jlc2VydmVkWzJdOwotfSBESUdfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgRElHMUVuY29kZXJDb250cm9sVGFibGUKKy8vICAgICAgICAgICAgICAgICAgICBESUcyRW5jb2RlckNvbnRyb2xUYWJsZQorLy8gICAgICAgICAgICAgICAgICAgIEV4dGVybmFsRW5jb2RlckNvbnRyb2xUYWJsZQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQordHlwZWRlZiBzdHJ1Y3QgX0RJR19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSUworeworICBVU0hPUlQgdXNQaXhlbENsb2NrOwkJLy8gaW4gMTBLSHo7IGZvciBiaW9zIGNvbnZlbmllbnQKKyAgVUNIQVIgIHVjQ29uZmlnOwkJICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBbMl0gTGluayBTZWxlY3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTA6IFBIWSBsaW5rQSBpZiBiZkxhbmU8MworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0xOiBQSFkgbGlua0IgaWYgYmZMYW5lczwzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTA6IFBIWSBsaW5rQStCIGlmIGJmTGFuZXM9MworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFszXSBUcmFuc21pdHRlciBTZWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA9MDogVU5JUEhZIG9yIFBDSUVQSFkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA9MTogTFZUTUEgCQkJCQkKKyAgVUNIQVIgdWNBY3Rpb247ICAgICAgICAgICAvLyA9MDogdHVybiBvZmYgZW5jb2RlcgkJCQkJCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTE6IHR1cm4gb24gZW5jb2RlcgkJCQorICBVQ0hBUiB1Y0VuY29kZXJNb2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0wOiBEUCAgIGVuY29kZXIgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA9MTogTFZEUyBlbmNvZGVyICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0yOiBEVkkgIGVuY29kZXIgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0zOiBIRE1JIGVuY29kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA9NDogU0RWTyBlbmNvZGVyCisgIFVDSEFSIHVjTGFuZU51bTsgICAgICAgICAgLy8gaG93IG1hbnkgbGFuZXMgdG8gZW5hYmxlCisgIFVDSEFSIHVjUmVzZXJ2ZWRbMl07Cit9RElHX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTOwogI2RlZmluZSBESUdfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04JCQkgIERJR19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSUwogI2RlZmluZSBFWFRFUk5BTF9FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSCQkJRElHX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTCiAKLS8qIHVjQ29uZmlnICovCisvL3VjQ29uZmlnCiAjZGVmaW5lIEFUT01fRU5DT0RFUl9DT05GSUdfRFBMSU5LUkFURV9NQVNLCQkJCTB4MDEKICNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19EUExJTktSQVRFXzFfNjJHSFoJCTB4MDAKICNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19EUExJTktSQVRFXzJfNzBHSFoJCTB4MDEKQEAgLTUzOSw1MiArNTkzLDU3IEBACiAjZGVmaW5lIEFUT01fRU5DT0RFUl9DT05GSUdfTFZUTUEJCQkJCQkJCSAgMHgwOAogI2RlZmluZSBBVE9NX0VOQ09ERVJfQ09ORklHX1RSQU5TTUlUVEVSMQkJCQkgIDB4MDAKICNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19UUkFOU01JVFRFUjIJCQkJICAweDA4Ci0jZGVmaW5lIEFUT01fRU5DT0RFUl9DT05GSUdfRElHQgkJCQkJCQkJICAweDgwCS8qICBWQklPUyBJbnRlcm5hbCB1c2UsIG91dHNpZGUgU1cgc2hvdWxkIHNldCB0aGlzIGJpdD0wICovCi0vKiAgdWNBY3Rpb24gKi8KLS8qICBBVE9NX0VOQUJMRTogIEVuYWJsZSBFbmNvZGVyICovCi0vKiAgQVRPTV9ESVNBQkxFOiBEaXNhYmxlIEVuY29kZXIgKi8KKyNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19ESUdCCQkJCQkJCQkgIDB4ODAJCQkvLyBWQklPUyBJbnRlcm5hbCB1c2UsIG91dHNpZGUgU1cgc2hvdWxkIHNldCB0aGlzIGJpdD0wCisvLyB1Y0FjdGlvbgorLy8gQVRPTV9FTkFCTEU6ICBFbmFibGUgRW5jb2RlcgorLy8gQVRPTV9ESVNBQkxFOiBEaXNhYmxlIEVuY29kZXIKIAotLyogdWNFbmNvZGVyTW9kZSAqLworLy91Y0VuY29kZXJNb2RlCiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX0RQCQkJCQkJCQkJCQkwCiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX0xWRFMJCQkJCQkJCQkJMQogI2RlZmluZSBBVE9NX0VOQ09ERVJfTU9ERV9EVkkJCQkJCQkJCQkJCTIKICNkZWZpbmUgQVRPTV9FTkNPREVSX01PREVfSERNSQkJCQkJCQkJCQkzCiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX1NEVk8JCQkJCQkJCQkJNAorI2RlZmluZSBBVE9NX0VOQ09ERVJfTU9ERV9EUF9BVURJTyAgICAgICAgICAgICAgICA1CiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX1RWCQkJCQkJCQkJCQkxMwogI2RlZmluZSBBVE9NX0VOQ09ERVJfTU9ERV9DVgkJCQkJCQkJCQkJMTQKICNkZWZpbmUgQVRPTV9FTkNPREVSX01PREVfQ1JUCQkJCQkJCQkJCQkxNQogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9ESUdfRU5DT0RFUl9DT05GSUdfVjIgewordHlwZWRlZiBzdHJ1Y3QgX0FUT01fRElHX0VOQ09ERVJfQ09ORklHX1YyCit7CiAjaWYgQVRPTV9CSUdfRU5ESUFOCi0JVUNIQVIgdWNSZXNlcnZlZDE6MjsKLQlVQ0hBUiB1Y1RyYW5zbWl0dGVyU2VsOjI7CS8qICA9MDogVW5pcGh5QUIsID0xOiBVbmlwaHlDRCAgPTI6IFVuaXBoeUVGICovCi0JVUNIQVIgdWNMaW5rU2VsOjE7CS8qICA9MDogbGlua0EvQy9FID0xOiBsaW5rQi9EL0YgKi8KLQlVQ0hBUiB1Y1Jlc2VydmVkOjE7Ci0JVUNIQVIgdWNEUExpbmtSYXRlOjE7CS8qICA9MDogMS42MkdoeiwgPTE6IDIuN0doeiAqLworICAgIFVDSEFSIHVjUmVzZXJ2ZWQxOjI7CisgICAgVUNIQVIgdWNUcmFuc21pdHRlclNlbDoyOyAgICAgLy8gPTA6IFVuaXBoeUFCLCA9MTogVW5pcGh5Q0QgID0yOiBVbmlwaHlFRgorICAgIFVDSEFSIHVjTGlua1NlbDoxOyAgICAgICAgICAgIC8vID0wOiBsaW5rQS9DL0UgPTE6IGxpbmtCL0QvRgorICAgIFVDSEFSIHVjUmVzZXJ2ZWQ6MTsKKyAgICBVQ0hBUiB1Y0RQTGlua1JhdGU6MTsgICAgICAgICAvLyA9MDogMS42MkdoeiwgPTE6IDIuN0doegogI2Vsc2UKLQlVQ0hBUiB1Y0RQTGlua1JhdGU6MTsJLyogID0wOiAxLjYyR2h6LCA9MTogMi43R2h6ICovCi0JVUNIQVIgdWNSZXNlcnZlZDoxOwotCVVDSEFSIHVjTGlua1NlbDoxOwkvKiAgPTA6IGxpbmtBL0MvRSA9MTogbGlua0IvRC9GICovCi0JVUNIQVIgdWNUcmFuc21pdHRlclNlbDoyOwkvKiAgPTA6IFVuaXBoeUFCLCA9MTogVW5pcGh5Q0QgID0yOiBVbmlwaHlFRiAqLwotCVVDSEFSIHVjUmVzZXJ2ZWQxOjI7CisgICAgVUNIQVIgdWNEUExpbmtSYXRlOjE7ICAgICAgICAgLy8gPTA6IDEuNjJHaHosID0xOiAyLjdHaHoKKyAgICBVQ0hBUiB1Y1Jlc2VydmVkOjE7CisgICAgVUNIQVIgdWNMaW5rU2VsOjE7ICAgICAgICAgICAgLy8gPTA6IGxpbmtBL0MvRSA9MTogbGlua0IvRC9GCisgICAgVUNIQVIgdWNUcmFuc21pdHRlclNlbDoyOyAgICAgLy8gPTA6IFVuaXBoeUFCLCA9MTogVW5pcGh5Q0QgID0yOiBVbmlwaHlFRgorICAgIFVDSEFSIHVjUmVzZXJ2ZWQxOjI7CiAjZW5kaWYKLX0gQVRPTV9ESUdfRU5DT0RFUl9DT05GSUdfVjI7Cit9QVRPTV9ESUdfRU5DT0RFUl9DT05GSUdfVjI7CiAKLXR5cGVkZWYgc3RydWN0IF9ESUdfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjIgewotCVVTSE9SVCB1c1BpeGVsQ2xvY2s7CS8qICBpbiAxMEtIejsgZm9yIGJpb3MgY29udmVuaWVudCAqLwotCUFUT01fRElHX0VOQ09ERVJfQ09ORklHX1YyIGFjQ29uZmlnOwotCVVDSEFSIHVjQWN0aW9uOwotCVVDSEFSIHVjRW5jb2Rlck1vZGU7Ci0JLyogID0wOiBEUCAgIGVuY29kZXIgKi8KLQkvKiAgPTE6IExWRFMgZW5jb2RlciAqLwotCS8qICA9MjogRFZJICBlbmNvZGVyICovCi0JLyogID0zOiBIRE1JIGVuY29kZXIgKi8KLQkvKiAgPTQ6IFNEVk8gZW5jb2RlciAqLwotCVVDSEFSIHVjTGFuZU51bTsJLyogIGhvdyBtYW55IGxhbmVzIHRvIGVuYWJsZSAqLwotCVVDSEFSIHVjUmVzZXJ2ZWRbMl07Ci19IERJR19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMjsKIAotLyogdWNDb25maWcgKi8KK3R5cGVkZWYgc3RydWN0IF9ESUdfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjIKK3sKKyAgVVNIT1JUIHVzUGl4ZWxDbG9jazsgICAgICAvLyBpbiAxMEtIejsgZm9yIGJpb3MgY29udmVuaWVudAorICBBVE9NX0RJR19FTkNPREVSX0NPTkZJR19WMiBhY0NvbmZpZzsKKyAgVUNIQVIgdWNBY3Rpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFVDSEFSIHVjRW5jb2Rlck1vZGU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTA6IERQICAgZW5jb2RlciAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0xOiBMVkRTIGVuY29kZXIgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTI6IERWSSAgZW5jb2RlciAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTM6IEhETUkgZW5jb2RlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID00OiBTRFZPIGVuY29kZXIKKyAgVUNIQVIgdWNMYW5lTnVtOyAgICAgICAgICAvLyBob3cgbWFueSBsYW5lcyB0byBlbmFibGUKKyAgVUNIQVIgdWNTdGF0dXM7ICAgICAgICAgICAvLyA9IERQX0xJTktfVFJBSU5JTkdfQ09NUExFVEUgb3IgRFBfTElOS19UUkFJTklOR19JTkNPTVBMRVRFLCBvbmx5IHVzZWQgYnkgVkJJT1Mgd2l0aCBjb21tYW5kIEFUT01fRU5DT0RFUl9DTURfUVVFUllfRFBfTElOS19UUkFJTklOR19TVEFUVVMKKyAgVUNIQVIgdWNSZXNlcnZlZDsKK31ESUdfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjI7CisKKy8vdWNDb25maWcKICNkZWZpbmUgQVRPTV9FTkNPREVSX0NPTkZJR19WMl9EUExJTktSQVRFX01BU0sJCQkJMHgwMQogI2RlZmluZSBBVE9NX0VOQ09ERVJfQ09ORklHX1YyX0RQTElOS1JBVEVfMV82MkdIWgkJICAweDAwCiAjZGVmaW5lIEFUT01fRU5DT0RFUl9DT05GSUdfVjJfRFBMSU5LUkFURV8yXzcwR0haCQkgIDB4MDEKQEAgLTU5Niw1OCArNjU1LDEyMiBAQAogI2RlZmluZSBBVE9NX0VOQ09ERVJfQ09ORklHX1YyX1RSQU5TTUlUVEVSMgkJCQkgICAgMHgwOAogI2RlZmluZSBBVE9NX0VOQ09ERVJfQ09ORklHX1YyX1RSQU5TTUlUVEVSMwkJCQkgICAgMHgxMAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgVU5JUEhZVHJhbnNtaXR0ZXJDb250cm9sVGFibGUgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgTFZUTUFUcmFuc21pdHRlckNvbnRyb2xUYWJsZSAqLwotLyogICAgICAgICAgICAgICAgICAgICBEVk9PdXRwdXRDb250cm9sVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fRFBfVlNfTU9ERSB7Ci0JVUNIQVIgdWNMYW5lU2VsOwotCVVDSEFSIHVjTGFuZVNldDsKLX0gQVRPTV9EUF9WU19NT0RFOworLy8gdWNBY3Rpb246CisvLyBBVE9NX0RJU0FCTEUKKy8vIEFUT01fRU5BQkxFCisjZGVmaW5lIEFUT01fRU5DT0RFUl9DTURfRFBfTElOS19UUkFJTklOR19TVEFSVCAgICAgICAweDA4CisjZGVmaW5lIEFUT01fRU5DT0RFUl9DTURfRFBfTElOS19UUkFJTklOR19QQVRURVJOMSAgICAweDA5CisjZGVmaW5lIEFUT01fRU5DT0RFUl9DTURfRFBfTElOS19UUkFJTklOR19QQVRURVJOMiAgICAweDBhCisjZGVmaW5lIEFUT01fRU5DT0RFUl9DTURfRFBfTElOS19UUkFJTklOR19DT01QTEVURSAgICAweDBiCisjZGVmaW5lIEFUT01fRU5DT0RFUl9DTURfRFBfVklERU9fT0ZGICAgICAgICAgICAgICAgICAweDBjCisjZGVmaW5lIEFUT01fRU5DT0RFUl9DTURfRFBfVklERU9fT04gICAgICAgICAgICAgICAgICAweDBkCisjZGVmaW5lIEFUT01fRU5DT0RFUl9DTURfUVVFUllfRFBfTElOS19UUkFJTklOR19TVEFUVVMgICAgMHgwZQorI2RlZmluZSBBVE9NX0VOQ09ERVJfQ01EX1NFVFVQICAgICAgICAgICAgICAgICAgICAgICAgMHgwZgogCi10eXBlZGVmIHN0cnVjdCBfRElHX1RSQU5TTUlUVEVSX0NPTlRST0xfUEFSQU1FVEVSUyB7Ci0JdW5pb24gewotCQlVU0hPUlQgdXNQaXhlbENsb2NrOwkvKiAgaW4gMTBLSHo7IGZvciBiaW9zIGNvbnZlbmllbnQgKi8KLQkJVVNIT1JUIHVzSW5pdEluZm87CS8qICB3aGVuIGluaXQgdW5pcGh5LGxvd2VyIDhiaXQgaXMgdXNlZCBmb3IgY29ubmVjdG9yIHR5cGUgZGVmaW5lZCBpbiBvYmplY3RpZC5oICovCi0JCUFUT01fRFBfVlNfTU9ERSBhc01vZGU7CS8qICBEUCBWb2x0YWdlIHN3aW5nIG1vZGUgKi8KKy8vIHVjU3RhdHVzCisjZGVmaW5lIEFUT01fRU5DT0RFUl9TVEFUVVNfTElOS19UUkFJTklOR19DT01QTEVURSAgICAweDEwCisjZGVmaW5lIEFUT01fRU5DT0RFUl9TVEFUVVNfTElOS19UUkFJTklOR19JTkNPTVBMRVRFICAweDAwCisKKy8vIEZvbGxvd2luZyBmdW5jdGlvbiBFTkFCTEUgc3ViLWZ1bmN0aW9uIHdpbGwgYmUgdXNlZCBieSBkcml2ZXIgd2hlbiBUTURTL0hETUkvTFZEUyBpcyB1c2VkLCBkaXNhYmxlIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCBieSBkcml2ZXIKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0RJR19FTkNPREVSX0NPTkZJR19WMworeworI2lmIEFUT01fQklHX0VORElBTgorICAgIFVDSEFSIHVjUmVzZXJ2ZWQxOjE7CisgICAgVUNIQVIgdWNEaWdTZWw6MzsgICAgICAgICAgICAgLy8gPTA6IERJR0EvQi9DL0QvRS9GCisgICAgVUNIQVIgdWNSZXNlcnZlZDozOworICAgIFVDSEFSIHVjRFBMaW5rUmF0ZToxOyAgICAgICAgIC8vID0wOiAxLjYyR2h6LCA9MTogMi43R2h6CisjZWxzZQorICAgIFVDSEFSIHVjRFBMaW5rUmF0ZToxOyAgICAgICAgIC8vID0wOiAxLjYyR2h6LCA9MTogMi43R2h6CisgICAgVUNIQVIgdWNSZXNlcnZlZDozOworICAgIFVDSEFSIHVjRGlnU2VsOjM7ICAgICAgICAgICAgIC8vID0wOiBESUdBL0IvQy9EL0UvRgorICAgIFVDSEFSIHVjUmVzZXJ2ZWQxOjE7CisjZW5kaWYKK31BVE9NX0RJR19FTkNPREVSX0NPTkZJR19WMzsKKworI2RlZmluZSBBVE9NX0VOQ09ERVJfQ09ORklHX1YzX0VOQ09ERVJfU0VMCQkJCQkgIDB4NzAKKworCit0eXBlZGVmIHN0cnVjdCBfRElHX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YzCit7CisgIFVTSE9SVCB1c1BpeGVsQ2xvY2s7ICAgICAgLy8gaW4gMTBLSHo7IGZvciBiaW9zIGNvbnZlbmllbnQKKyAgQVRPTV9ESUdfRU5DT0RFUl9DT05GSUdfVjMgYWNDb25maWc7CisgIFVDSEFSIHVjQWN0aW9uOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBVQ0hBUiB1Y0VuY29kZXJNb2RlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0wOiBEUCAgIGVuY29kZXIgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA9MTogTFZEUyBlbmNvZGVyICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0yOiBEVkkgIGVuY29kZXIgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0zOiBIRE1JIGVuY29kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA9NDogU0RWTyBlbmNvZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTU6IERQIGF1ZGlvCisgIFVDSEFSIHVjTGFuZU51bTsgICAgICAgICAgLy8gaG93IG1hbnkgbGFuZXMgdG8gZW5hYmxlCisgIFVDSEFSIHVjQml0UGVyQ29sb3I7ICAgICAgLy8gb25seSB2YWxpZCBmb3IgRFAgbW9kZSB3aGVuIHVjQWN0aW9uID0gQVRPTV9FTkNPREVSX0NNRF9TRVRVUAorICBVQ0hBUiB1Y1Jlc2VydmVkOworfURJR19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMzsKKworCisvLyBkZWZpbmUgdWNCaXRQZXJDb2xvcjogCisjZGVmaW5lIFBBTkVMX0JQQ19VTkRFRklORSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwCisjZGVmaW5lIFBBTkVMXzZCSVRfUEVSX0NPTE9SICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxIAorI2RlZmluZSBQQU5FTF84QklUX1BFUl9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBQQU5FTF8xMEJJVF9QRVJfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBQQU5FTF8xMkJJVF9QRVJfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBQQU5FTF8xNkJJVF9QRVJfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgVU5JUEhZVHJhbnNtaXR0ZXJDb250cm9sVGFibGUKKy8vICAgICAgICAgICAgICAgICAgICBMVlRNQVRyYW5zbWl0dGVyQ29udHJvbFRhYmxlCisvLyAgICAgICAgICAgICAgICAgICAgRFZPT3V0cHV0Q29udHJvbFRhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9EUF9WU19NT0RFCit7CisgIFVDSEFSIHVjTGFuZVNlbDsKKyAgVUNIQVIgdWNMYW5lU2V0OworfUFUT01fRFBfVlNfTU9ERTsKKwordHlwZWRlZiBzdHJ1Y3QgX0RJR19UUkFOU01JVFRFUl9DT05UUk9MX1BBUkFNRVRFUlMKK3sKKwl1bmlvbgorCXsKKyAgVVNIT1JUIHVzUGl4ZWxDbG9jazsJCS8vIGluIDEwS0h6OyBmb3IgYmlvcyBjb252ZW5pZW50CisJVVNIT1JUIHVzSW5pdEluZm87CQkJLy8gd2hlbiBpbml0IHVuaXBoeSxsb3dlciA4Yml0IGlzIHVzZWQgZm9yIGNvbm5lY3RvciB0eXBlIGRlZmluZWQgaW4gb2JqZWN0aWQuaAorICBBVE9NX0RQX1ZTX01PREUgYXNNb2RlOyAvLyBEUCBWb2x0YWdlIHN3aW5nIG1vZGUKIAl9OwotCVVDSEFSIHVjQ29uZmlnOwotCS8qICBbMF09MDogNCBsYW5lIExpbmssICovCi0JLyogICAgID0xOiA4IGxhbmUgTGluayAoIER1YWwgTGlua3MgVE1EUyApICovCi0JLyogIFsxXT0wOiBJbkNvaGVyZW50IG1vZGUgKi8KLQkvKiAgICAgPTE6IENvaGVyZW50IE1vZGUgKi8KLQkvKiAgWzJdIExpbmsgU2VsZWN0OiAqLwotCS8qICA9MDogUEhZIGxpbmtBICAgaWYgYmZMYW5lPDMgKi8KLQkvKiAgPTE6IFBIWSBsaW5rQiAgIGlmIGJmTGFuZXM8MyAqLwotCS8qICA9MDogUEhZIGxpbmtBK0IgaWYgYmZMYW5lcz0zICovCi0JLyogIFs1OjRdUENJRSBsYW5lIFNlbCAqLwotCS8qICA9MDogbGFuZSAwfjMgb3IgMH43ICovCi0JLyogID0xOiBsYW5lIDR+NyAqLwotCS8qICA9MjogbGFuZSA4fjExIG9yIDh+MTUgKi8KLQkvKiAgPTM6IGxhbmUgMTJ+MTUgKi8KLQlVQ0hBUiB1Y0FjdGlvbjsJCS8qICA9MDogdHVybiBvZmYgZW5jb2RlciAqLwotCS8qICA9MTogdHVybiBvbiBlbmNvZGVyICovCi0JVUNIQVIgdWNSZXNlcnZlZFs0XTsKLX0gRElHX1RSQU5TTUlUVEVSX0NPTlRST0xfUEFSQU1FVEVSUzsKKyAgVUNIQVIgdWNDb25maWc7CisJCQkJCQkJCQkJCQkJLy8gWzBdPTA6IDQgbGFuZSBMaW5rLCAgICAgIAorCQkJCQkJCQkJCQkJCS8vICAgID0xOiA4IGxhbmUgTGluayAoIER1YWwgTGlua3MgVE1EUyApIAorICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBbMV09MDogSW5Db2hlcmVudCBtb2RlICAgCisJCQkJCQkJCQkJCQkJLy8gICAgPTE6IENvaGVyZW50IE1vZGUJCQkJCQkJCQkJCisJCQkJCQkJCQkJCQkJLy8gWzJdIExpbmsgU2VsZWN0OgorICAJCQkJCQkJCQkJCQkvLyA9MDogUEhZIGxpbmtBICAgaWYgYmZMYW5lPDMKKwkJCQkJCQkJCQkJCQkvLyA9MTogUEhZIGxpbmtCICAgaWYgYmZMYW5lczwzCisJCSAgCQkJCQkJCQkJCS8vID0wOiBQSFkgbGlua0ErQiBpZiBiZkxhbmVzPTMJCQorICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBbNTo0XVBDSUUgbGFuZSBTZWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTA6IGxhbmUgMH4zIG9yIDB+NworICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA9MTogbGFuZSA0fjcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gPTI6IGxhbmUgOH4xMSBvciA4fjE1CisgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0zOiBsYW5lIDEyfjE1IAorCVVDSEFSIHVjQWN0aW9uOwkJCQkgIC8vID0wOiB0dXJuIG9mZiBlbmNvZGVyCQkJCQkKKwkgICAgICAgICAgICAgICAgICAgICAgICAvLyA9MTogdHVybiBvbiBlbmNvZGVyCQkJCisgIFVDSEFSIHVjUmVzZXJ2ZWRbNF07Cit9RElHX1RSQU5TTUlUVEVSX0NPTlRST0xfUEFSQU1FVEVSUzsKIAotI2RlZmluZSBESUdfVFJBTlNNSVRURVJfQ09OVFJPTF9QU19BTExPQ0FUSU9OCQlESUdfVFJBTlNNSVRURVJfQ09OVFJPTF9QQVJBTUVURVJTCisjZGVmaW5lIERJR19UUkFOU01JVFRFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04JCURJR19UUkFOU01JVFRFUl9DT05UUk9MX1BBUkFNRVRFUlMJCQkJCQogCi0vKiB1Y0luaXRJbmZvICovCi0jZGVmaW5lIEFUT01fVFJBTUlUVEVSX0lOSVRJTkZPX0NPTk5FQ1RPUl9NQVNLCTB4MDBmZgorLy91Y0luaXRJbmZvCisjZGVmaW5lIEFUT01fVFJBTUlUVEVSX0lOSVRJTkZPX0NPTk5FQ1RPUl9NQVNLCTB4MDBmZgkJCQogCi0vKiB1Y0NvbmZpZyAqLworLy91Y0NvbmZpZyAKICNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfOExBTkVfTElOSwkJCTB4MDEKICNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfQ09IRVJFTlQJCQkJMHgwMgogI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19MSU5LX1NFTF9NQVNLCQkweDA0CiAjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0xJTktBCQkJCQkJMHgwMAogI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19MSU5LQgkJCQkJCTB4MDQKLSNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfTElOS0FfQgkJCQkJMHgwMAorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19MSU5LQV9CCQkJCQkweDAwCQkJCiAjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0xJTktCX0EJCQkJCTB4MDQKIAotI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19FTkNPREVSX1NFTF9NQVNLCTB4MDgJLyogIG9ubHkgdXNlZCB3aGVuIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0VOQUJMRSAqLwotI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19ESUcxX0VOQ09ERVIJCTB4MDAJLyogIG9ubHkgdXNlZCB3aGVuIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0VOQUJMRSAqLwotI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19ESUcyX0VOQ09ERVIJCTB4MDgJLyogIG9ubHkgdXNlZCB3aGVuIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0VOQUJMRSAqLworI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19FTkNPREVSX1NFTF9NQVNLCTB4MDgJCQkvLyBvbmx5IHVzZWQgd2hlbiBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9FTkFCTEUKKyNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfRElHMV9FTkNPREVSCQkweDAwCQkJCS8vIG9ubHkgdXNlZCB3aGVuIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0VOQUJMRQorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19ESUcyX0VOQ09ERVIJCTB4MDgJCQkJLy8gb25seSB1c2VkIHdoZW4gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRU5BQkxFCiAKICNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfQ0xLU1JDX01BU0sJCQkweDMwCiAjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0NMS1NSQ19QUExMCQkJMHgwMApAQCAtNjYxLDcgKzc4NCw3IEBACiAjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0xBTkVfOF8xNQkJCQkweDgwCiAjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX0xBTkVfMTJfMTUJCQkweGMwCiAKLS8qIHVjQWN0aW9uICovCisvL3VjQWN0aW9uCiAjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0RJU0FCTEUJCQkJCSAgICAgICAwCiAjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0VOQUJMRQkJCQkJICAgICAgIDEKICNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fTENEX0JMT0ZGCQkJCSAgICAgICAyCkBAIC02NzQsOTMgKzc5NywxNjggQEAKICNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRU5BQkxFX09VVFBVVAkJICAgICAgIDkKICNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fU0VUVVAJCQkJCQkgICAgICAgMTAKICNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fU0VUVVBfVlNFTVBIICAgICAgICAgICAxMQorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9QT1dFUl9PTiAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX1BPV0VSX09GRiAgICAgICAgICAgICAgMTMKIAotLyogIEZvbGxvd2luZyBhcmUgdXNlZCBmb3IgRGlnVHJhbnNtaXR0ZXJDb250cm9sVGFibGUgdmVyMS4yICovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9ESUdfVFJBTlNNSVRURVJfQ09ORklHX1YyIHsKKy8vIEZvbGxvd2luZyBhcmUgdXNlZCBmb3IgRGlnVHJhbnNtaXR0ZXJDb250cm9sVGFibGUgdmVyMS4yCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9ESUdfVFJBTlNNSVRURVJfQ09ORklHX1YyCit7CiAjaWYgQVRPTV9CSUdfRU5ESUFOCi0JVUNIQVIgdWNUcmFuc21pdHRlclNlbDoyOwkvKiBiaXQ3OjY6ID0wIERpZyBUcmFuc21pdHRlciAxICggVW5pcGh5IEFCICkgKi8KLQkvKiAgICAgICAgID0xIERpZyBUcmFuc21pdHRlciAyICggVW5pcGh5IENEICkgKi8KLQkvKiAgICAgICAgID0yIERpZyBUcmFuc21pdHRlciAzICggVW5pcGh5IEVGICkgKi8KLQlVQ0hBUiB1Y1Jlc2VydmVkOjE7Ci0JVUNIQVIgZkRQQ29ubmVjdG9yOjE7CS8qIGJpdDQ9MDogRFAgY29ubmVjdG9yICA9MTogTm9uZSBEUCBjb25uZWN0b3IgKi8KLQlVQ0hBUiB1Y0VuY29kZXJTZWw6MTsJLyogYml0Mz0wOiBEYXRhL0NsayBwYXRoIHNvdXJjZSBmcm9tIERJR0EoIERJRyBpbnN0MCApLiA9MTogRGF0YS9jbGsgcGF0aCBzb3VyY2UgZnJvbSBESUdCICggRElHIGluc3QxICkgKi8KLQlVQ0hBUiB1Y0xpbmtTZWw6MTsJLyogYml0Mj0wOiBVbmlwaHkgTElOS0Egb3IgQyBvciBFIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTAuIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTEsIGl0IG1lYW5zIG1hc3RlciBsaW5rIG9mIGR1YWwgbGluayBpcyBBIG9yIEMgb3IgRSAqLwotCS8qICAgICA9MTogVW5pcGh5IExJTktCIG9yIEQgb3IgRiB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0wLiB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0xLCBpdCBtZWFucyBtYXN0ZXIgbGluayBvZiBkdWFsIGxpbmsgaXMgQiBvciBEIG9yIEYgKi8KKyAgVUNIQVIgdWNUcmFuc21pdHRlclNlbDoyOyAgICAgICAgIC8vYml0Nzo2OiA9MCBEaWcgVHJhbnNtaXR0ZXIgMSAoIFVuaXBoeSBBQiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgPTEgRGlnIFRyYW5zbWl0dGVyIDIgKCBVbmlwaHkgQ0QgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgID0yIERpZyBUcmFuc21pdHRlciAzICggVW5pcGh5IEVGICkKKyAgVUNIQVIgdWNSZXNlcnZlZDoxOyAgICAgICAgICAgICAgIAorICBVQ0hBUiBmRFBDb25uZWN0b3I6MTsgICAgICAgICAgICAgLy9iaXQ0PTA6IERQIGNvbm5lY3RvciAgPTE6IE5vbmUgRFAgY29ubmVjdG9yCisgIFVDSEFSIHVjRW5jb2RlclNlbDoxOyAgICAgICAgICAgICAvL2JpdDM9MDogRGF0YS9DbGsgcGF0aCBzb3VyY2UgZnJvbSBESUdBKCBESUcgaW5zdDAgKS4gPTE6IERhdGEvY2xrIHBhdGggc291cmNlIGZyb20gRElHQiAoIERJRyBpbnN0MSApCisgIFVDSEFSIHVjTGlua1NlbDoxOyAgICAgICAgICAgICAgICAvL2JpdDI9MDogVW5pcGh5IExJTktBIG9yIEMgb3IgRSB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0wLiB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0xLCBpdCBtZWFucyBtYXN0ZXIgbGluayBvZiBkdWFsIGxpbmsgaXMgQSBvciBDIG9yIEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgID0xOiBVbmlwaHkgTElOS0Igb3IgRCBvciBGIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTAuIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTEsIGl0IG1lYW5zIG1hc3RlciBsaW5rIG9mIGR1YWwgbGluayBpcyBCIG9yIEQgb3IgRgogCi0JVUNIQVIgZkNvaGVyZW50TW9kZToxOwkvKiBiaXQxPTE6IENvaGVyZW50IE1vZGUgKCBmb3IgRFZJL0hETUkgbW9kZSApICovCi0JVUNIQVIgZkR1YWxMaW5rQ29ubmVjdG9yOjE7CS8qIGJpdDA9MTogRHVhbCBMaW5rIERWSSBjb25uZWN0b3IgKi8KKyAgVUNIQVIgZkNvaGVyZW50TW9kZToxOyAgICAgICAgICAgIC8vYml0MT0xOiBDb2hlcmVudCBNb2RlICggZm9yIERWSS9IRE1JIG1vZGUgKQorICBVQ0hBUiBmRHVhbExpbmtDb25uZWN0b3I6MTsgICAgICAgLy9iaXQwPTE6IER1YWwgTGluayBEVkkgY29ubmVjdG9yCiAjZWxzZQotCVVDSEFSIGZEdWFsTGlua0Nvbm5lY3RvcjoxOwkvKiBiaXQwPTE6IER1YWwgTGluayBEVkkgY29ubmVjdG9yICovCi0JVUNIQVIgZkNvaGVyZW50TW9kZToxOwkvKiBiaXQxPTE6IENvaGVyZW50IE1vZGUgKCBmb3IgRFZJL0hETUkgbW9kZSApICovCi0JVUNIQVIgdWNMaW5rU2VsOjE7CS8qIGJpdDI9MDogVW5pcGh5IExJTktBIG9yIEMgb3IgRSB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0wLiB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0xLCBpdCBtZWFucyBtYXN0ZXIgbGluayBvZiBkdWFsIGxpbmsgaXMgQSBvciBDIG9yIEUgKi8KLQkvKiAgICAgPTE6IFVuaXBoeSBMSU5LQiBvciBEIG9yIEYgd2hlbiBmRHVhbExpbmtDb25uZWN0b3I9MC4gd2hlbiBmRHVhbExpbmtDb25uZWN0b3I9MSwgaXQgbWVhbnMgbWFzdGVyIGxpbmsgb2YgZHVhbCBsaW5rIGlzIEIgb3IgRCBvciBGICovCi0JVUNIQVIgdWNFbmNvZGVyU2VsOjE7CS8qIGJpdDM9MDogRGF0YS9DbGsgcGF0aCBzb3VyY2UgZnJvbSBESUdBKCBESUcgaW5zdDAgKS4gPTE6IERhdGEvY2xrIHBhdGggc291cmNlIGZyb20gRElHQiAoIERJRyBpbnN0MSApICovCi0JVUNIQVIgZkRQQ29ubmVjdG9yOjE7CS8qIGJpdDQ9MDogRFAgY29ubmVjdG9yICA9MTogTm9uZSBEUCBjb25uZWN0b3IgKi8KLQlVQ0hBUiB1Y1Jlc2VydmVkOjE7Ci0JVUNIQVIgdWNUcmFuc21pdHRlclNlbDoyOwkvKiBiaXQ3OjY6ID0wIERpZyBUcmFuc21pdHRlciAxICggVW5pcGh5IEFCICkgKi8KLQkvKiAgICAgICAgID0xIERpZyBUcmFuc21pdHRlciAyICggVW5pcGh5IENEICkgKi8KLQkvKiAgICAgICAgID0yIERpZyBUcmFuc21pdHRlciAzICggVW5pcGh5IEVGICkgKi8KKyAgVUNIQVIgZkR1YWxMaW5rQ29ubmVjdG9yOjE7ICAgICAgIC8vYml0MD0xOiBEdWFsIExpbmsgRFZJIGNvbm5lY3RvcgorICBVQ0hBUiBmQ29oZXJlbnRNb2RlOjE7ICAgICAgICAgICAgLy9iaXQxPTE6IENvaGVyZW50IE1vZGUgKCBmb3IgRFZJL0hETUkgbW9kZSApCisgIFVDSEFSIHVjTGlua1NlbDoxOyAgICAgICAgICAgICAgICAvL2JpdDI9MDogVW5pcGh5IExJTktBIG9yIEMgb3IgRSB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0wLiB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0xLCBpdCBtZWFucyBtYXN0ZXIgbGluayBvZiBkdWFsIGxpbmsgaXMgQSBvciBDIG9yIEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgID0xOiBVbmlwaHkgTElOS0Igb3IgRCBvciBGIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTAuIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTEsIGl0IG1lYW5zIG1hc3RlciBsaW5rIG9mIGR1YWwgbGluayBpcyBCIG9yIEQgb3IgRgorICBVQ0hBUiB1Y0VuY29kZXJTZWw6MTsgICAgICAgICAgICAgLy9iaXQzPTA6IERhdGEvQ2xrIHBhdGggc291cmNlIGZyb20gRElHQSggRElHIGluc3QwICkuID0xOiBEYXRhL2NsayBwYXRoIHNvdXJjZSBmcm9tIERJR0IgKCBESUcgaW5zdDEgKQorICBVQ0hBUiBmRFBDb25uZWN0b3I6MTsgICAgICAgICAgICAgLy9iaXQ0PTA6IERQIGNvbm5lY3RvciAgPTE6IE5vbmUgRFAgY29ubmVjdG9yCisgIFVDSEFSIHVjUmVzZXJ2ZWQ6MTsgICAgICAgICAgICAgICAKKyAgVUNIQVIgdWNUcmFuc21pdHRlclNlbDoyOyAgICAgICAgIC8vYml0Nzo2OiA9MCBEaWcgVHJhbnNtaXR0ZXIgMSAoIFVuaXBoeSBBQiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgPTEgRGlnIFRyYW5zbWl0dGVyIDIgKCBVbmlwaHkgQ0QgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgID0yIERpZyBUcmFuc21pdHRlciAzICggVW5pcGh5IEVGICkKICNlbmRpZgotfSBBVE9NX0RJR19UUkFOU01JVFRFUl9DT05GSUdfVjI7Cit9QVRPTV9ESUdfVFJBTlNNSVRURVJfQ09ORklHX1YyOwogCi0vKiB1Y0NvbmZpZyAqLwotLyogQml0MCAqLworLy91Y0NvbmZpZyAKKy8vQml0MAogI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WMl9EVUFMX0xJTktfQ09OTkVDVE9SCQkJMHgwMQogCi0vKiBCaXQxICovCisvL0JpdDEKICNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjJfQ09IRVJFTlQJCQkJICAgICAgICAgIDB4MDIKIAotLyogQml0MiAqLworLy9CaXQyCiAjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YyX0xJTktfU0VMX01BU0sJCSAgICAgICAgMHgwNAotI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WMl9MSU5LQQkJCSAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjJfTElOS0EgIAkJCSAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjJfTElOS0IJCQkJICAgICAgICAgICAgMHgwNAogCi0vKiAgQml0MyAqLworLy8gQml0MwogI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WMl9FTkNPREVSX1NFTF9NQVNLCSAgICAgICAgMHgwOAotI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WMl9ESUcxX0VOQ09ERVIJCSAgICAgICAgICAweDAwCS8qICBvbmx5IHVzZWQgd2hlbiB1Y0FjdGlvbiA9PSBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9FTkFCTEUgb3IgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fU0VUVVAgKi8KLSNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjJfRElHMl9FTkNPREVSCQkgICAgICAgICAgMHgwOAkvKiAgb25seSB1c2VkIHdoZW4gdWNBY3Rpb24gPT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRU5BQkxFIG9yIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX1NFVFVQICovCisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YyX0RJRzFfRU5DT0RFUgkJICAgICAgICAgIDB4MDAJCQkJLy8gb25seSB1c2VkIHdoZW4gdWNBY3Rpb24gPT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRU5BQkxFIG9yIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX1NFVFVQCisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YyX0RJRzJfRU5DT0RFUgkJICAgICAgICAgIDB4MDgJCQkJLy8gb25seSB1c2VkIHdoZW4gdWNBY3Rpb24gPT0gQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRU5BQkxFIG9yIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX1NFVFVQCiAKLS8qICBCaXQ0ICovCisvLyBCaXQ0CiAjZGVmaW5lIEFUT01fVFJBU01JVFRFUl9DT05GSUdfVjJfRFBfQ09OTkVDVE9SCQkJICAgICAgICAweDEwCiAKLS8qICBCaXQ3OjYgKi8KKy8vIEJpdDc6NgogI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WMl9UUkFOU01JVFRFUl9TRUxfTUFTSyAgICAgMHhDMAotI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WMl9UUkFOU01JVFRFUjEJCQkweDAwCS8qIEFCICovCi0jZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YyX1RSQU5TTUlUVEVSMgkJCTB4NDAJLyogQ0QgKi8KLSNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjJfVFJBTlNNSVRURVIzCQkJMHg4MAkvKiBFRiAqLworI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WMl9UUkFOU01JVFRFUjEgICAgICAgICAgIAkweDAwCS8vQUIKKyNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjJfVFJBTlNNSVRURVIyICAgICAgICAgICAJMHg0MAkvL0NECisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YyX1RSQU5TTUlUVEVSMyAgICAgICAgICAgCTB4ODAJLy9FRgogCi10eXBlZGVmIHN0cnVjdCBfRElHX1RSQU5TTUlUVEVSX0NPTlRST0xfUEFSQU1FVEVSU19WMiB7Ci0JdW5pb24gewotCQlVU0hPUlQgdXNQaXhlbENsb2NrOwkvKiAgaW4gMTBLSHo7IGZvciBiaW9zIGNvbnZlbmllbnQgKi8KLQkJVVNIT1JUIHVzSW5pdEluZm87CS8qICB3aGVuIGluaXQgdW5pcGh5LGxvd2VyIDhiaXQgaXMgdXNlZCBmb3IgY29ubmVjdG9yIHR5cGUgZGVmaW5lZCBpbiBvYmplY3RpZC5oICovCi0JCUFUT01fRFBfVlNfTU9ERSBhc01vZGU7CS8qICBEUCBWb2x0YWdlIHN3aW5nIG1vZGUgKi8KK3R5cGVkZWYgc3RydWN0IF9ESUdfVFJBTlNNSVRURVJfQ09OVFJPTF9QQVJBTUVURVJTX1YyCit7CisJdW5pb24KKwl7CisgIFVTSE9SVCB1c1BpeGVsQ2xvY2s7CQkvLyBpbiAxMEtIejsgZm9yIGJpb3MgY29udmVuaWVudAorCVVTSE9SVCB1c0luaXRJbmZvOwkJCS8vIHdoZW4gaW5pdCB1bmlwaHksbG93ZXIgOGJpdCBpcyB1c2VkIGZvciBjb25uZWN0b3IgdHlwZSBkZWZpbmVkIGluIG9iamVjdGlkLmgKKyAgQVRPTV9EUF9WU19NT0RFIGFzTW9kZTsgLy8gRFAgVm9sdGFnZSBzd2luZyBtb2RlCiAJfTsKLQlBVE9NX0RJR19UUkFOU01JVFRFUl9DT05GSUdfVjIgYWNDb25maWc7Ci0JVUNIQVIgdWNBY3Rpb247CQkvKiAgZGVmaW5lIGFzIEFUT01fVFJBTlNNSVRFUl9BQ1RJT05fWFhYICovCi0JVUNIQVIgdWNSZXNlcnZlZFs0XTsKLX0gRElHX1RSQU5TTUlUVEVSX0NPTlRST0xfUEFSQU1FVEVSU19WMjsKKyAgQVRPTV9ESUdfVFJBTlNNSVRURVJfQ09ORklHX1YyIGFjQ29uZmlnOworCVVDSEFSIHVjQWN0aW9uOwkJCQkgIC8vIGRlZmluZSBhcyBBVE9NX1RSQU5TTUlURVJfQUNUSU9OX1hYWAorICBVQ0hBUiB1Y1Jlc2VydmVkWzRdOworfURJR19UUkFOU01JVFRFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjI7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBEQUMxT3VwdXRDb250cm9sVGFibGUgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgREFDMk91cHV0Q29udHJvbFRhYmxlICovCi0vKiAgICAgICAgICAgICAgICAgICAgIExWVE1BT3V0cHV0Q29udHJvbFRhYmxlICAoQmVmb3JlIERFQzMwKSAqLwotLyogICAgICAgICAgICAgICAgICAgICBUTURTQU91dHB1dENvbnRyb2xUYWJsZSAgKEJlZm9yZSBERUMzMCkgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0RJU1BMQVlfREVWSUNFX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjQWN0aW9uOwkJLyogIFBvc3NpYmxlIGlucHV0OkFUT01fRU5BQkxFfHxBVE9NRElTQUJMRSAqLwotCS8qICBXaGVuIHRoZSBkaXNwbGF5IGlzIExDRCwgaW4gYWRkaXRpb24gdG8gYWJvdmU6ICovCi0JLyogIEFUT01fTENEX0JMT0ZGfHwgQVRPTV9MQ0RfQkxPTiB8fEFUT01fTENEX0JMX0JSSUdIVE5FU1NfQ09OVFJPTHx8QVRPTV9MQ0RfU0VMRlRFU1RfU1RBUlR8fCAqLwotCS8qICBBVE9NX0xDRF9TRUxGVEVTVF9TVE9QICovCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9ESUdfVFJBTlNNSVRURVJfQ09ORklHX1YzCit7CisjaWYgQVRPTV9CSUdfRU5ESUFOCisgIFVDSEFSIHVjVHJhbnNtaXR0ZXJTZWw6MjsgICAgICAgICAvL2JpdDc6NjogPTAgRGlnIFRyYW5zbWl0dGVyIDEgKCBVbmlwaHkgQUIgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgID0xIERpZyBUcmFuc21pdHRlciAyICggVW5pcGh5IENEICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICA9MiBEaWcgVHJhbnNtaXR0ZXIgMyAoIFVuaXBoeSBFRiApCisgIFVDSEFSIHVjUmVmQ2xrU291cmNlOjI7ICAgICAgICAgICAvL2JpdDU6NDogUFBMTDEgPTAsIFBQTEwyPTEsIEVYVF9DTEs9MgorICBVQ0hBUiB1Y0VuY29kZXJTZWw6MTsgICAgICAgICAgICAgLy9iaXQzPTA6IERhdGEvQ2xrIHBhdGggc291cmNlIGZyb20gRElHQS9DL0UuID0xOiBEYXRhL2NsayBwYXRoIHNvdXJjZSBmcm9tIERJR0IvRC9GCisgIFVDSEFSIHVjTGlua1NlbDoxOyAgICAgICAgICAgICAgICAvL2JpdDI9MDogVW5pcGh5IExJTktBIG9yIEMgb3IgRSB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0wLiB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0xLCBpdCBtZWFucyBtYXN0ZXIgbGluayBvZiBkdWFsIGxpbmsgaXMgQSBvciBDIG9yIEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgID0xOiBVbmlwaHkgTElOS0Igb3IgRCBvciBGIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTAuIHdoZW4gZkR1YWxMaW5rQ29ubmVjdG9yPTEsIGl0IG1lYW5zIG1hc3RlciBsaW5rIG9mIGR1YWwgbGluayBpcyBCIG9yIEQgb3IgRgorICBVQ0hBUiBmQ29oZXJlbnRNb2RlOjE7ICAgICAgICAgICAgLy9iaXQxPTE6IENvaGVyZW50IE1vZGUgKCBmb3IgRFZJL0hETUkgbW9kZSApCisgIFVDSEFSIGZEdWFsTGlua0Nvbm5lY3RvcjoxOyAgICAgICAvL2JpdDA9MTogRHVhbCBMaW5rIERWSSBjb25uZWN0b3IKKyNlbHNlCisgIFVDSEFSIGZEdWFsTGlua0Nvbm5lY3RvcjoxOyAgICAgICAvL2JpdDA9MTogRHVhbCBMaW5rIERWSSBjb25uZWN0b3IKKyAgVUNIQVIgZkNvaGVyZW50TW9kZToxOyAgICAgICAgICAgIC8vYml0MT0xOiBDb2hlcmVudCBNb2RlICggZm9yIERWSS9IRE1JIG1vZGUgKQorICBVQ0hBUiB1Y0xpbmtTZWw6MTsgICAgICAgICAgICAgICAgLy9iaXQyPTA6IFVuaXBoeSBMSU5LQSBvciBDIG9yIEUgd2hlbiBmRHVhbExpbmtDb25uZWN0b3I9MC4gd2hlbiBmRHVhbExpbmtDb25uZWN0b3I9MSwgaXQgbWVhbnMgbWFzdGVyIGxpbmsgb2YgZHVhbCBsaW5rIGlzIEEgb3IgQyBvciBFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICA9MTogVW5pcGh5IExJTktCIG9yIEQgb3IgRiB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0wLiB3aGVuIGZEdWFsTGlua0Nvbm5lY3Rvcj0xLCBpdCBtZWFucyBtYXN0ZXIgbGluayBvZiBkdWFsIGxpbmsgaXMgQiBvciBEIG9yIEYKKyAgVUNIQVIgdWNFbmNvZGVyU2VsOjE7ICAgICAgICAgICAgIC8vYml0Mz0wOiBEYXRhL0NsayBwYXRoIHNvdXJjZSBmcm9tIERJR0EvQy9FLiA9MTogRGF0YS9jbGsgcGF0aCBzb3VyY2UgZnJvbSBESUdCL0QvRgorICBVQ0hBUiB1Y1JlZkNsa1NvdXJjZToyOyAgICAgICAgICAgLy9iaXQ1OjQ6IFBQTEwxID0wLCBQUExMMj0xLCBFWFRfQ0xLPTIKKyAgVUNIQVIgdWNUcmFuc21pdHRlclNlbDoyOyAgICAgICAgIC8vYml0Nzo2OiA9MCBEaWcgVHJhbnNtaXR0ZXIgMSAoIFVuaXBoeSBBQiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgPTEgRGlnIFRyYW5zbWl0dGVyIDIgKCBVbmlwaHkgQ0QgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgID0yIERpZyBUcmFuc21pdHRlciAzICggVW5pcGh5IEVGICkKKyNlbmRpZgorfUFUT01fRElHX1RSQU5TTUlUVEVSX0NPTkZJR19WMzsKIAotCVVDSEFSIGF1Y1BhZGRpbmdbM107CS8qICBwYWRkaW5nIHRvIERXT1JEIGFsaWduZWQgKi8KLX0gRElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUEFSQU1FVEVSUzsKK3R5cGVkZWYgc3RydWN0IF9ESUdfVFJBTlNNSVRURVJfQ09OVFJPTF9QQVJBTUVURVJTX1YzCit7CisJdW5pb24KKwl7CisgICAgVVNIT1JUIHVzUGl4ZWxDbG9jazsJCS8vIGluIDEwS0h6OyBmb3IgYmlvcyBjb252ZW5pZW50CisJICBVU0hPUlQgdXNJbml0SW5mbzsJCQkvLyB3aGVuIGluaXQgdW5pcGh5LGxvd2VyIDhiaXQgaXMgdXNlZCBmb3IgY29ubmVjdG9yIHR5cGUgZGVmaW5lZCBpbiBvYmplY3RpZC5oCisgICAgQVRPTV9EUF9WU19NT0RFIGFzTW9kZTsgLy8gRFAgVm9sdGFnZSBzd2luZyBtb2RlCisJfTsKKyAgQVRPTV9ESUdfVFJBTlNNSVRURVJfQ09ORklHX1YzIGFjQ29uZmlnOworCVVDSEFSIHVjQWN0aW9uOwkJCQkgICAgLy8gZGVmaW5lIGFzIEFUT01fVFJBTlNNSVRFUl9BQ1RJT05fWFhYCisgIFVDSEFSIHVjTGFuZU51bTsKKyAgVUNIQVIgdWNSZXNlcnZlZFszXTsKK31ESUdfVFJBTlNNSVRURVJfQ09OVFJPTF9QQVJBTUVURVJTX1YzOworCisvL3VjQ29uZmlnIAorLy9CaXQwCisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YzX0RVQUxfTElOS19DT05ORUNUT1IJCQkweDAxCisKKy8vQml0MQorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WM19DT0hFUkVOVAkJCQkgICAgICAgICAgMHgwMgorCisvL0JpdDIKKyNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjNfTElOS19TRUxfTUFTSwkJICAgICAgICAweDA0CisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YzX0xJTktBICAJCQkgICAgICAgICAgICAweDAwCisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YzX0xJTktCCQkJCSAgICAgICAgICAgIDB4MDQKKworLy8gQml0MworI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WM19FTkNPREVSX1NFTF9NQVNLCSAgICAgICAgMHgwOAorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WM19ESUcxX0VOQ09ERVIJCSAgICAgICAgICAweDAwCisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YzX0RJRzJfRU5DT0RFUgkJICAgICAgICAgIDB4MDgKKworLy8gQml0NTo0CisjZGVmaW5lIEFUT01fVFJBU01JVFRFUl9DT05GSUdfVjNfUkVGQ0xLX1NFTF9NQVNLIAkgICAgICAgIDB4MzAKKyNkZWZpbmUgQVRPTV9UUkFTTUlUVEVSX0NPTkZJR19WM19QMVBMTCAgICAgICAgICAJCSAgICAgICAgMHgwMAorI2RlZmluZSBBVE9NX1RSQVNNSVRURVJfQ09ORklHX1YzX1AyUExMCQkgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIEFUT01fVFJBU01JVFRFUl9DT05GSUdfVjNfUkVGQ0xLX1NSQ19FWFQgICAgICAgICAgICAweDIwCisKKy8vIEJpdDc6NgorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WM19UUkFOU01JVFRFUl9TRUxfTUFTSyAgICAgMHhDMAorI2RlZmluZSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19WM19UUkFOU01JVFRFUjEgICAgICAgICAgIAkweDAwCS8vQUIKKyNkZWZpbmUgQVRPTV9UUkFOU01JVFRFUl9DT05GSUdfVjNfVFJBTlNNSVRURVIyICAgICAgICAgICAJMHg0MAkvL0NECisjZGVmaW5lIEFUT01fVFJBTlNNSVRURVJfQ09ORklHX1YzX1RSQU5TTUlUVEVSMyAgICAgICAgICAgCTB4ODAJLy9FRgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgREFDMU91cHV0Q29udHJvbFRhYmxlCisvLyAgICAgICAgICAgICAgICAgICAgREFDMk91cHV0Q29udHJvbFRhYmxlCisvLyAgICAgICAgICAgICAgICAgICAgTFZUTUFPdXRwdXRDb250cm9sVGFibGUgIChCZWZvcmUgREVDMzApCisvLyAgICAgICAgICAgICAgICAgICAgVE1EU0FPdXRwdXRDb250cm9sVGFibGUgIChCZWZvcmUgREVDMzApCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfRElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUEFSQU1FVEVSUworeworICBVQ0hBUiAgdWNBY3Rpb247ICAgICAgICAgICAgICAgICAgICAvLyBQb3NzaWJsZSBpbnB1dDpBVE9NX0VOQUJMRXx8QVRPTURJU0FCTEUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB0aGUgZGlzcGxheSBpcyBMQ0QsIGluIGFkZGl0aW9uIHRvIGFib3ZlOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBBVE9NX0xDRF9CTE9GRnx8IEFUT01fTENEX0JMT04gfHxBVE9NX0xDRF9CTF9CUklHSFRORVNTX0NPTlRST0x8fEFUT01fTENEX1NFTEZURVNUX1NUQVJUfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQVRPTV9MQ0RfU0VMRlRFU1RfU1RPUAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgVUNIQVIgIGF1Y1BhZGRpbmdbM107ICAgICAgICAgICAgICAgLy8gcGFkZGluZyB0byBEV09SRCBhbGlnbmVkCit9RElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUEFSQU1FVEVSUzsKIAogI2RlZmluZSBESVNQTEFZX0RFVklDRV9PVVRQVVRfQ09OVFJPTF9QU19BTExPQ0FUSU9OIERJU1BMQVlfREVWSUNFX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlMKIAotI2RlZmluZSBDUlQxX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlMgICAgIERJU1BMQVlfREVWSUNFX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlMKKworI2RlZmluZSBDUlQxX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlMgICAgIERJU1BMQVlfREVWSUNFX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlMgCiAjZGVmaW5lIENSVDFfT1VUUFVUX0NPTlRST0xfUFNfQUxMT0NBVElPTiAgRElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUFNfQUxMT0NBVElPTgogCi0jZGVmaW5lIENSVDJfT1VUUFVUX0NPTlRST0xfUEFSQU1FVEVSUyAgICAgRElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUEFSQU1FVEVSUworI2RlZmluZSBDUlQyX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlMgICAgIERJU1BMQVlfREVWSUNFX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlMgCiAjZGVmaW5lIENSVDJfT1VUUFVUX0NPTlRST0xfUFNfQUxMT0NBVElPTiAgRElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUFNfQUxMT0NBVElPTgogCiAjZGVmaW5lIENWMV9PVVRQVVRfQ09OVFJPTF9QQVJBTUVURVJTICAgICAgRElTUExBWV9ERVZJQ0VfT1VUUFVUX0NPTlRST0xfUEFSQU1FVEVSUwpAQCAtNzgyLDM5NyArOTgwLDU1MCBAQAogI2RlZmluZSBEVk9fT1VUUFVUX0NPTlRST0xfUFNfQUxMT0NBVElPTiAgIERJR19UUkFOU01JVFRFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04KICNkZWZpbmUgRFZPX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlNfVjMJIERJR19UUkFOU01JVFRFUl9DT05UUk9MX1BBUkFNRVRFUlMKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlcyB1c2VkIGJ5IEJsYW5rQ1JUQ1RhYmxlICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9CTEFOS19DUlRDX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjQ1JUQzsJCS8qICBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIgKi8KLQlVQ0hBUiB1Y0JsYW5raW5nOwkvKiAgQVRPTV9CTEFOS0lORyBvciBBVE9NX0JMQU5LSU5HT0ZGICovCi0JVVNIT1JUIHVzQmxhY2tDb2xvclJDcjsKLQlVU0hPUlQgdXNCbGFja0NvbG9yR1k7Ci0JVVNIT1JUIHVzQmxhY2tDb2xvckJDYjsKLX0gQkxBTktfQ1JUQ19QQVJBTUVURVJTOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGJ5IEJsYW5rQ1JUQ1RhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfQkxBTktfQ1JUQ19QQVJBTUVURVJTCit7CisgIFVDSEFSICB1Y0NSVEM7ICAgICAgICAgICAgICAgICAgICAJLy8gQVRPTV9DUlRDMSBvciBBVE9NX0NSVEMyCisgIFVDSEFSICB1Y0JsYW5raW5nOyAgICAgICAgICAgICAgICAgIC8vIEFUT01fQkxBTktJTkcgb3IgQVRPTV9CTEFOS0lOR09GRgorICBVU0hPUlQgdXNCbGFja0NvbG9yUkNyOworICBVU0hPUlQgdXNCbGFja0NvbG9yR1k7CisgIFVTSE9SVCB1c0JsYWNrQ29sb3JCQ2I7Cit9QkxBTktfQ1JUQ19QQVJBTUVURVJTOwogI2RlZmluZSBCTEFOS19DUlRDX1BTX0FMTE9DQVRJT04gICAgQkxBTktfQ1JUQ19QQVJBTUVURVJTCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBFbmFibGVDUlRDVGFibGUgKi8KLS8qICAgICAgICAgICAgICAgICAgICAgRW5hYmxlQ1JUQ01lbVJlcVRhYmxlICovCi0vKiAgICAgICAgICAgICAgICAgICAgIFVwZGF0ZUNSVENfRG91YmxlQnVmZmVyUmVnaXN0ZXJzVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9DUlRDX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjQ1JUQzsJCS8qICBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIgKi8KLQlVQ0hBUiB1Y0VuYWJsZTsJCS8qICBBVE9NX0VOQUJMRSBvciBBVE9NX0RJU0FCTEUgKi8KLQlVQ0hBUiB1Y1BhZGRpbmdbMl07Ci19IEVOQUJMRV9DUlRDX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgRW5hYmxlQ1JUQ1RhYmxlCisvLyAgICAgICAgICAgICAgICAgICAgRW5hYmxlQ1JUQ01lbVJlcVRhYmxlCisvLyAgICAgICAgICAgICAgICAgICAgVXBkYXRlQ1JUQ19Eb3VibGVCdWZmZXJSZWdpc3RlcnNUYWJsZQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQordHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9DUlRDX1BBUkFNRVRFUlMKK3sKKyAgVUNIQVIgdWNDUlRDOyAgICAgICAgICAgICAgICAgICAgCSAgLy8gQVRPTV9DUlRDMSBvciBBVE9NX0NSVEMyCisgIFVDSEFSIHVjRW5hYmxlOyAgICAgICAgICAgICAgICAgICAgIC8vIEFUT01fRU5BQkxFIG9yIEFUT01fRElTQUJMRSAKKyAgVUNIQVIgdWNQYWRkaW5nWzJdOworfUVOQUJMRV9DUlRDX1BBUkFNRVRFUlM7CiAjZGVmaW5lIEVOQUJMRV9DUlRDX1BTX0FMTE9DQVRJT04gICBFTkFCTEVfQ1JUQ19QQVJBTUVURVJTCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBTZXRDUlRDX092ZXJTY2FuVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX1NFVF9DUlRDX09WRVJTQ0FOX1BBUkFNRVRFUlMgewotCVVTSE9SVCB1c092ZXJzY2FuUmlnaHQ7CS8qICByaWdodCAqLwotCVVTSE9SVCB1c092ZXJzY2FuTGVmdDsJLyogIGxlZnQgKi8KLQlVU0hPUlQgdXNPdmVyc2NhbkJvdHRvbTsJLyogIGJvdHRvbSAqLwotCVVTSE9SVCB1c092ZXJzY2FuVG9wOwkvKiAgdG9wICovCi0JVUNIQVIgdWNDUlRDOwkJLyogIEFUT01fQ1JUQzEgb3IgQVRPTV9DUlRDMiAqLwotCVVDSEFSIHVjUGFkZGluZ1szXTsKLX0gU0VUX0NSVENfT1ZFUlNDQU5fUEFSQU1FVEVSUzsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZXMgdXNlZCBieSBTZXRDUlRDX092ZXJTY2FuVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9TRVRfQ1JUQ19PVkVSU0NBTl9QQVJBTUVURVJTCit7CisgIFVTSE9SVCB1c092ZXJzY2FuUmlnaHQ7ICAgICAgICAgICAgIC8vIHJpZ2h0CisgIFVTSE9SVCB1c092ZXJzY2FuTGVmdDsgICAgICAgICAgICAgIC8vIGxlZnQKKyAgVVNIT1JUIHVzT3ZlcnNjYW5Cb3R0b207ICAgICAgICAgICAgLy8gYm90dG9tCisgIFVTSE9SVCB1c092ZXJzY2FuVG9wOyAgICAgICAgICAgICAgIC8vIHRvcAorICBVQ0hBUiAgdWNDUlRDOyAgICAgICAgICAgICAgICAgICAgICAvLyBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIKKyAgVUNIQVIgIHVjUGFkZGluZ1szXTsKK31TRVRfQ1JUQ19PVkVSU0NBTl9QQVJBTUVURVJTOwogI2RlZmluZSBTRVRfQ1JUQ19PVkVSU0NBTl9QU19BTExPQ0FUSU9OICBTRVRfQ1JUQ19PVkVSU0NBTl9QQVJBTUVURVJTCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBTZXRDUlRDX1JlcGxpY2F0aW9uVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX1NFVF9DUlRDX1JFUExJQ0FUSU9OX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjSF9SZXBsaWNhdGlvbjsJLyogIGhvcml6b250YWwgcmVwbGljYXRpb24gKi8KLQlVQ0hBUiB1Y1ZfUmVwbGljYXRpb247CS8qICB2ZXJ0aWNhbCByZXBsaWNhdGlvbiAqLwotCVVDSEFSIHVzQ1JUQzsJCS8qICBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIgKi8KLQlVQ0hBUiB1Y1BhZGRpbmc7Ci19IFNFVF9DUlRDX1JFUExJQ0FUSU9OX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgU2V0Q1JUQ19SZXBsaWNhdGlvblRhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfU0VUX0NSVENfUkVQTElDQVRJT05fUEFSQU1FVEVSUworeworICBVQ0hBUiB1Y0hfUmVwbGljYXRpb247ICAgICAgICAgICAgICAvLyBob3Jpem9udGFsIHJlcGxpY2F0aW9uCisgIFVDSEFSIHVjVl9SZXBsaWNhdGlvbjsgICAgICAgICAgICAgIC8vIHZlcnRpY2FsIHJlcGxpY2F0aW9uCisgIFVDSEFSIHVzQ1JUQzsgICAgICAgICAgICAgICAgICAgICAgIC8vIEFUT01fQ1JUQzEgb3IgQVRPTV9DUlRDMgorICBVQ0hBUiB1Y1BhZGRpbmc7Cit9U0VUX0NSVENfUkVQTElDQVRJT05fUEFSQU1FVEVSUzsKICNkZWZpbmUgU0VUX0NSVENfUkVQTElDQVRJT05fUFNfQUxMT0NBVElPTiAgU0VUX0NSVENfUkVQTElDQVRJT05fUEFSQU1FVEVSUwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgU2VsZWN0Q1JUQ19Tb3VyY2VUYWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfU0VMRUNUX0NSVENfU09VUkNFX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjQ1JUQzsJCS8qICBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIgKi8KLQlVQ0hBUiB1Y0RldmljZTsJCS8qICBBVE9NX0RFVklDRV9DUlQxfEFUT01fREVWSUNFX0NSVDJ8Li4uLiAqLwotCVVDSEFSIHVjUGFkZGluZ1syXTsKLX0gU0VMRUNUX0NSVENfU09VUkNFX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgU2VsZWN0Q1JUQ19Tb3VyY2VUYWJsZQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQordHlwZWRlZiBzdHJ1Y3QgX1NFTEVDVF9DUlRDX1NPVVJDRV9QQVJBTUVURVJTCit7CisgIFVDSEFSIHVjQ1JUQzsgICAgICAgICAgICAgICAgICAgIAkgIC8vIEFUT01fQ1JUQzEgb3IgQVRPTV9DUlRDMgorICBVQ0hBUiB1Y0RldmljZTsgICAgICAgICAgICAgICAgICAgICAvLyBBVE9NX0RFVklDRV9DUlQxfEFUT01fREVWSUNFX0NSVDJ8Li4uLgorICBVQ0hBUiB1Y1BhZGRpbmdbMl07Cit9U0VMRUNUX0NSVENfU09VUkNFX1BBUkFNRVRFUlM7CiAjZGVmaW5lIFNFTEVDVF9DUlRDX1NPVVJDRV9QU19BTExPQ0FUSU9OICBTRUxFQ1RfQ1JUQ19TT1VSQ0VfUEFSQU1FVEVSUwogCi10eXBlZGVmIHN0cnVjdCBfU0VMRUNUX0NSVENfU09VUkNFX1BBUkFNRVRFUlNfVjIgewotCVVDSEFSIHVjQ1JUQzsJCS8qICBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIgKi8KLQlVQ0hBUiB1Y0VuY29kZXJJRDsJLyogIERBQzEvREFDMi9UVk9VVC9ESUcxL0RJRzIvRFZPICovCi0JVUNIQVIgdWNFbmNvZGVNb2RlOwkvKiAgRW5jb2RpbmcgbW9kZSwgb25seSB2YWxpZCB3aGVuIHVzaW5nIERJRzEvRElHMi9EVk8gKi8KLQlVQ0hBUiB1Y1BhZGRpbmc7Ci19IFNFTEVDVF9DUlRDX1NPVVJDRV9QQVJBTUVURVJTX1YyOwordHlwZWRlZiBzdHJ1Y3QgX1NFTEVDVF9DUlRDX1NPVVJDRV9QQVJBTUVURVJTX1YyCit7CisgIFVDSEFSIHVjQ1JUQzsgICAgICAgICAgICAgICAgICAgIAkgIC8vIEFUT01fQ1JUQzEgb3IgQVRPTV9DUlRDMgorICBVQ0hBUiB1Y0VuY29kZXJJRDsgICAgICAgICAgICAgICAgICAvLyBEQUMxL0RBQzIvVFZPVVQvRElHMS9ESUcyL0RWTworICBVQ0hBUiB1Y0VuY29kZU1vZGU7CQkJCQkJCQkJLy8gRW5jb2RpbmcgbW9kZSwgb25seSB2YWxpZCB3aGVuIHVzaW5nIERJRzEvRElHMi9EVk8KKyAgVUNIQVIgdWNQYWRkaW5nOworfVNFTEVDVF9DUlRDX1NPVVJDRV9QQVJBTUVURVJTX1YyOwogCi0vKiB1Y0VuY29kZXJJRCAqLwotLyogI2RlZmluZSBBU0lDX0lOVF9EQUMxX0VOQ09ERVJfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCAqLwotLyogI2RlZmluZSBBU0lDX0lOVF9UVl9FTkNPREVSX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMiAqLwotLyogI2RlZmluZSBBU0lDX0lOVF9ESUcxX0VOQ09ERVJfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMgKi8KLS8qICNkZWZpbmUgQVNJQ19JTlRfREFDMl9FTkNPREVSX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0ICovCi0vKiAjZGVmaW5lIEFTSUNfRVhUX1RWX0VOQ09ERVJfSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2ICovCi0vKiAjZGVmaW5lIEFTSUNfSU5UX0RWT19FTkNPREVSX0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3ICovCi0vKiAjZGVmaW5lIEFTSUNfSU5UX0RJRzJfRU5DT0RFUl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOSAqLwotLyogI2RlZmluZSBBU0lDX0VYVF9ESUdfRU5DT0RFUl9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwNSAqLworLy91Y0VuY29kZXJJRAorLy8jZGVmaW5lIEFTSUNfSU5UX0RBQzFfRU5DT0RFUl9JRCAgICAJCQkJCQkweDAwIAorLy8jZGVmaW5lIEFTSUNfSU5UX1RWX0VOQ09ERVJfSUQJCQkJCQkJCQkweDAyCisvLyNkZWZpbmUgQVNJQ19JTlRfRElHMV9FTkNPREVSX0lECQkJCQkJCQkweDAzCisvLyNkZWZpbmUgQVNJQ19JTlRfREFDMl9FTkNPREVSX0lECQkJCQkJCQkweDA0CisvLyNkZWZpbmUgQVNJQ19FWFRfVFZfRU5DT0RFUl9JRAkJCQkJCQkJCTB4MDYKKy8vI2RlZmluZSBBU0lDX0lOVF9EVk9fRU5DT0RFUl9JRAkJCQkJCQkJCTB4MDcKKy8vI2RlZmluZSBBU0lDX0lOVF9ESUcyX0VOQ09ERVJfSUQJCQkJCQkJCTB4MDkKKy8vI2RlZmluZSBBU0lDX0VYVF9ESUdfRU5DT0RFUl9JRAkJCQkJCQkJCTB4MDUKIAotLyogdWNFbmNvZGVNb2RlICovCi0vKiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX0RQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICovCi0vKiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX0xWRFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxICovCi0vKiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX0RWSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyICovCi0vKiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX0hETUkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzICovCi0vKiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX1NEVk8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0ICovCi0vKiAjZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX1RWICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMyAqLwotLyogI2RlZmluZSBBVE9NX0VOQ09ERVJfTU9ERV9DViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQgKi8KLS8qICNkZWZpbmUgQVRPTV9FTkNPREVSX01PREVfQ1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE1ICovCisvL3VjRW5jb2RlTW9kZQorLy8jZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX0RQCQkJCQkJCQkJCTAKKy8vI2RlZmluZSBBVE9NX0VOQ09ERVJfTU9ERV9MVkRTCQkJCQkJCQkJMQorLy8jZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX0RWSQkJCQkJCQkJCQkyCisvLyNkZWZpbmUgQVRPTV9FTkNPREVSX01PREVfSERNSQkJCQkJCQkJCTMKKy8vI2RlZmluZSBBVE9NX0VOQ09ERVJfTU9ERV9TRFZPCQkJCQkJCQkJNAorLy8jZGVmaW5lIEFUT01fRU5DT0RFUl9NT0RFX1RWCQkJCQkJCQkJCTEzCisvLyNkZWZpbmUgQVRPTV9FTkNPREVSX01PREVfQ1YJCQkJCQkJCQkJMTQKKy8vI2RlZmluZSBBVE9NX0VOQ09ERVJfTU9ERV9DUlQJCQkJCQkJCQkJMTUKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlcyB1c2VkIGJ5IFNldFBpeGVsQ2xvY2tUYWJsZSAqLwotLyogICAgICAgICAgICAgICAgICAgICBHZXRQaXhlbENsb2NrVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogTWFqb3IgcmV2aXNpb249MS4sIE1pbm9yIHJldmlzaW9uPTEgKi8KLXR5cGVkZWYgc3RydWN0IF9QSVhFTF9DTE9DS19QQVJBTUVURVJTIHsKLQlVU0hPUlQgdXNQaXhlbENsb2NrOwkvKiAgaW4gMTBrSHogdW5pdDsgZm9yIGJpb3MgY29udmVuaWVudCA9IChSZWZDbGsqRkJfRGl2KS8oUmVmX0RpdipQb3N0X0RpdikgKi8KLQkvKiAgMCBtZWFucyBkaXNhYmxlIFBQTEwgKi8KLQlVU0hPUlQgdXNSZWZEaXY7CS8qICBSZWZlcmVuY2UgZGl2aWRlciAqLwotCVVTSE9SVCB1c0ZiRGl2OwkJLyogIGZlZWRiYWNrIGRpdmlkZXIgKi8KLQlVQ0hBUiB1Y1Bvc3REaXY7CS8qICBwb3N0IGRpdmlkZXIgKi8KLQlVQ0hBUiB1Y0ZyYWNGYkRpdjsJLyogIGZyYWN0aW9uYWwgZmVlZGJhY2sgZGl2aWRlciAqLwotCVVDSEFSIHVjUHBsbDsJCS8qICBBVE9NX1BQTEwxIG9yIEFUT01fUFBMMiAqLwotCVVDSEFSIHVjUmVmRGl2U3JjOwkvKiAgQVRPTV9QSklUVEVSIG9yIEFUT19OT05QSklUVEVSICovCi0JVUNIQVIgdWNDUlRDOwkJLyogIFdoaWNoIENSVEMgdXNlcyB0aGlzIFBwbGwgKi8KLQlVQ0hBUiB1Y1BhZGRpbmc7Ci19IFBJWEVMX0NMT0NLX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgU2V0UGl4ZWxDbG9ja1RhYmxlCisvLyAgICAgICAgICAgICAgICAgICAgR2V0UGl4ZWxDbG9ja1RhYmxlIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy9NYWpvciByZXZpc2lvbj0xLiwgTWlub3IgcmV2aXNpb249MQordHlwZWRlZiBzdHJ1Y3QgX1BJWEVMX0NMT0NLX1BBUkFNRVRFUlMKK3sKKyAgVVNIT1JUIHVzUGl4ZWxDbG9jazsgICAgICAgICAgICAgICAgLy8gaW4gMTBrSHogdW5pdDsgZm9yIGJpb3MgY29udmVuaWVudCA9IChSZWZDbGsqRkJfRGl2KS8oUmVmX0RpdipQb3N0X0RpdikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCBtZWFucyBkaXNhYmxlIFBQTEwKKyAgVVNIT1JUIHVzUmVmRGl2OyAgICAgICAgICAgICAgICAgICAgLy8gUmVmZXJlbmNlIGRpdmlkZXIKKyAgVVNIT1JUIHVzRmJEaXY7ICAgICAgICAgICAgICAgICAgICAgLy8gZmVlZGJhY2sgZGl2aWRlcgorICBVQ0hBUiAgdWNQb3N0RGl2OyAgICAgICAgICAgICAgICAgICAvLyBwb3N0IGRpdmlkZXIJCisgIFVDSEFSICB1Y0ZyYWNGYkRpdjsgICAgICAgICAgICAgICAgIC8vIGZyYWN0aW9uYWwgZmVlZGJhY2sgZGl2aWRlcgorICBVQ0hBUiAgdWNQcGxsOyAgICAgICAgICAgICAgICAgICAgICAvLyBBVE9NX1BQTEwxIG9yIEFUT01fUFBMMgorICBVQ0hBUiAgdWNSZWZEaXZTcmM7ICAgICAgICAgICAgICAgICAvLyBBVE9NX1BKSVRURVIgb3IgQVRPX05PTlBKSVRURVIKKyAgVUNIQVIgIHVjQ1JUQzsgICAgICAgICAgICAgICAgICAgICAgLy8gV2hpY2ggQ1JUQyB1c2VzIHRoaXMgUHBsbAorICBVQ0hBUiAgdWNQYWRkaW5nOworfVBJWEVMX0NMT0NLX1BBUkFNRVRFUlM7CiAKLS8qIE1ham9yIHJldmlzaW9uPTEuLCBNaW5vciByZXZpc2lvbj0yLCBhZGQgdWNNaXNjSWZubyAqLwotLyogdWNNaXNjSW5mbzogKi8KKy8vTWFqb3IgcmV2aXNpb249MS4sIE1pbm9yIHJldmlzaW9uPTIsIGFkZCB1Y01pc2NJZm5vCisvL3VjTWlzY0luZm86CiAjZGVmaW5lIE1JU0NfRk9SQ0VfUkVQUk9HX1BJWEVMX0NMT0NLIDB4MQogI2RlZmluZSBNSVNDX0RFVklDRV9JTkRFWF9NQVNLICAgICAgICAweEYwCiAjZGVmaW5lIE1JU0NfREVWSUNFX0lOREVYX1NISUZUICAgICAgIDQKIAotdHlwZWRlZiBzdHJ1Y3QgX1BJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjIgewotCVVTSE9SVCB1c1BpeGVsQ2xvY2s7CS8qICBpbiAxMGtIeiB1bml0OyBmb3IgYmlvcyBjb252ZW5pZW50ID0gKFJlZkNsaypGQl9EaXYpLyhSZWZfRGl2KlBvc3RfRGl2KSAqLwotCS8qICAwIG1lYW5zIGRpc2FibGUgUFBMTCAqLwotCVVTSE9SVCB1c1JlZkRpdjsJLyogIFJlZmVyZW5jZSBkaXZpZGVyICovCi0JVVNIT1JUIHVzRmJEaXY7CQkvKiAgZmVlZGJhY2sgZGl2aWRlciAqLwotCVVDSEFSIHVjUG9zdERpdjsJLyogIHBvc3QgZGl2aWRlciAqLwotCVVDSEFSIHVjRnJhY0ZiRGl2OwkvKiAgZnJhY3Rpb25hbCBmZWVkYmFjayBkaXZpZGVyICovCi0JVUNIQVIgdWNQcGxsOwkJLyogIEFUT01fUFBMTDEgb3IgQVRPTV9QUEwyICovCi0JVUNIQVIgdWNSZWZEaXZTcmM7CS8qICBBVE9NX1BKSVRURVIgb3IgQVRPX05PTlBKSVRURVIgKi8KLQlVQ0hBUiB1Y0NSVEM7CQkvKiAgV2hpY2ggQ1JUQyB1c2VzIHRoaXMgUHBsbCAqLwotCVVDSEFSIHVjTWlzY0luZm87CS8qICBEaWZmZXJlbnQgYml0cyBmb3IgZGlmZmVyZW50IHB1cnBvc2UsIGJpdCBbNzo0XSBhcyBkZXZpY2UgaW5kZXgsIGJpdFswXT1Gb3JjZSBwcm9nICovCi19IFBJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjI7Cit0eXBlZGVmIHN0cnVjdCBfUElYRUxfQ0xPQ0tfUEFSQU1FVEVSU19WMgoreworICBVU0hPUlQgdXNQaXhlbENsb2NrOyAgICAgICAgICAgICAgICAvLyBpbiAxMGtIeiB1bml0OyBmb3IgYmlvcyBjb252ZW5pZW50ID0gKFJlZkNsaypGQl9EaXYpLyhSZWZfRGl2KlBvc3RfRGl2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIG1lYW5zIGRpc2FibGUgUFBMTAorICBVU0hPUlQgdXNSZWZEaXY7ICAgICAgICAgICAgICAgICAgICAvLyBSZWZlcmVuY2UgZGl2aWRlcgorICBVU0hPUlQgdXNGYkRpdjsgICAgICAgICAgICAgICAgICAgICAvLyBmZWVkYmFjayBkaXZpZGVyCisgIFVDSEFSICB1Y1Bvc3REaXY7ICAgICAgICAgICAgICAgICAgIC8vIHBvc3QgZGl2aWRlcgkKKyAgVUNIQVIgIHVjRnJhY0ZiRGl2OyAgICAgICAgICAgICAgICAgLy8gZnJhY3Rpb25hbCBmZWVkYmFjayBkaXZpZGVyCisgIFVDSEFSICB1Y1BwbGw7ICAgICAgICAgICAgICAgICAgICAgIC8vIEFUT01fUFBMTDEgb3IgQVRPTV9QUEwyCisgIFVDSEFSICB1Y1JlZkRpdlNyYzsgICAgICAgICAgICAgICAgIC8vIEFUT01fUEpJVFRFUiBvciBBVE9fTk9OUEpJVFRFUgorICBVQ0hBUiAgdWNDUlRDOyAgICAgICAgICAgICAgICAgICAgICAvLyBXaGljaCBDUlRDIHVzZXMgdGhpcyBQcGxsCisgIFVDSEFSICB1Y01pc2NJbmZvOyAgICAgICAgICAgICAgICAgIC8vIERpZmZlcmVudCBiaXRzIGZvciBkaWZmZXJlbnQgcHVycG9zZSwgYml0IFs3OjRdIGFzIGRldmljZSBpbmRleCwgYml0WzBdPUZvcmNlIHByb2cKK31QSVhFTF9DTE9DS19QQVJBTUVURVJTX1YyOwogCi0vKiBNYWpvciByZXZpc2lvbj0xLiwgTWlub3IgcmV2aXNpb249Mywgc3RydWN0dXJlL2RlZmluaXRpb24gY2hhbmdlICovCi0vKiB1Y0VuY29kZXJNb2RlOiAqLwotLyogQVRPTV9FTkNPREVSX01PREVfRFAgKi8KLS8qIEFUT01fRU5PQ0RFUl9NT0RFX0xWRFMgKi8KLS8qIEFUT01fRU5PQ0RFUl9NT0RFX0RWSSAqLwotLyogQVRPTV9FTk9DREVSX01PREVfSERNSSAqLwotLyogQVRPTV9FTk9DREVSX01PREVfU0RWTyAqLwotLyogQVRPTV9FTkNPREVSX01PREVfVFYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEzICovCi0vKiBBVE9NX0VOQ09ERVJfTU9ERV9DViAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQgKi8KLS8qIEFUT01fRU5DT0RFUl9NT0RFX0NSVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNSAqLworLy9NYWpvciByZXZpc2lvbj0xLiwgTWlub3IgcmV2aXNpb249Mywgc3RydWN0dXJlL2RlZmluaXRpb24gY2hhbmdlCisvL3VjRW5jb2Rlck1vZGU6CisvL0FUT01fRU5DT0RFUl9NT0RFX0RQCisvL0FUT01fRU5PQ0RFUl9NT0RFX0xWRFMKKy8vQVRPTV9FTk9DREVSX01PREVfRFZJCisvL0FUT01fRU5PQ0RFUl9NT0RFX0hETUkKKy8vQVRPTV9FTk9DREVSX01PREVfU0RWTworLy9BVE9NX0VOQ09ERVJfTU9ERV9UVgkJCQkJCQkJCQkxMworLy9BVE9NX0VOQ09ERVJfTU9ERV9DVgkJCQkJCQkJCQkxNAorLy9BVE9NX0VOQ09ERVJfTU9ERV9DUlQJCQkJCQkJCQkJMTUKIAotLyogdWNEVk9Db25maWcgKi8KLS8qICNkZWZpbmUgRFZPX0VOQ09ERVJfQ09ORklHX1JBVEVfU0VMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMSAqLwotLyogI2RlZmluZSBEVk9fRU5DT0RFUl9DT05GSUdfRERSX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMCAqLwotLyogI2RlZmluZSBEVk9fRU5DT0RFUl9DT05GSUdfU0RSX1NQRUVEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMSAqLwotLyogI2RlZmluZSBEVk9fRU5DT0RFUl9DT05GSUdfT1VUUFVUX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwYyAqLwotLyogI2RlZmluZSBEVk9fRU5DT0RFUl9DT05GSUdfTE9XMTJCSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwICovCi0vKiAjZGVmaW5lIERWT19FTkNPREVSX0NPTkZJR19VUFBFUjEyQklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA0ICovCi0vKiAjZGVmaW5lIERWT19FTkNPREVSX0NPTkZJR18yNEJJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwOCAqLworLy91Y0RWT0NvbmZpZworLy8jZGVmaW5lIERWT19FTkNPREVSX0NPTkZJR19SQVRFX1NFTAkJCQkJCQkweDAxCisvLyNkZWZpbmUgRFZPX0VOQ09ERVJfQ09ORklHX0REUl9TUEVFRAkJCQkJCTB4MDAKKy8vI2RlZmluZSBEVk9fRU5DT0RFUl9DT05GSUdfU0RSX1NQRUVECQkJCQkJMHgwMQorLy8jZGVmaW5lIERWT19FTkNPREVSX0NPTkZJR19PVVRQVVRfU0VMCQkJCQkJMHgwYworLy8jZGVmaW5lIERWT19FTkNPREVSX0NPTkZJR19MT1cxMkJJVAkJCQkJCQkweDAwCisvLyNkZWZpbmUgRFZPX0VOQ09ERVJfQ09ORklHX1VQUEVSMTJCSVQJCQkJCQkweDA0CisvLyNkZWZpbmUgRFZPX0VOQ09ERVJfQ09ORklHXzI0QklUCQkJCQkJCQkweDA4CiAKLS8qIHVjTWlzY0luZm86IGFsc28gY2hhbmdlZCwgc2VlIGJlbG93ICovCisvL3VjTWlzY0luZm86IGFsc28gY2hhbmdlZCwgc2VlIGJlbG93CiAjZGVmaW5lIFBJWEVMX0NMT0NLX01JU0NfRk9SQ0VfUFJPR19QUExMCQkJCQkJMHgwMQogI2RlZmluZSBQSVhFTF9DTE9DS19NSVNDX1ZHQV9NT0RFCQkJCQkJCQkJCTB4MDIKICNkZWZpbmUgUElYRUxfQ0xPQ0tfTUlTQ19DUlRDX1NFTF9NQVNLCQkJCQkJCTB4MDQKICNkZWZpbmUgUElYRUxfQ0xPQ0tfTUlTQ19DUlRDX1NFTF9DUlRDMQkJCQkJCQkweDAwCiAjZGVmaW5lIFBJWEVMX0NMT0NLX01JU0NfQ1JUQ19TRUxfQ1JUQzIJCQkJCQkJMHgwNAogI2RlZmluZSBQSVhFTF9DTE9DS19NSVNDX1VTRV9FTkdJTkVfRk9SX0RJU1BDTEsJCQkweDA4CisjZGVmaW5lIFBJWEVMX0NMT0NLX01JU0NfUkVGX0RJVl9TUkMgICAgICAgICAgICAgICAgICAgIDB4MTAKKy8vIFYxLjQgZm9yIFJvYWRSdW5uZXIKKyNkZWZpbmUgUElYRUxfQ0xPQ0tfVjRfTUlTQ19TU19FTkFCTEUgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIFBJWEVMX0NMT0NLX1Y0X01JU0NfQ09IRVJFTlRfTU9ERSAgICAgICAgICAgMHgyMAogCi10eXBlZGVmIHN0cnVjdCBfUElYRUxfQ0xPQ0tfUEFSQU1FVEVSU19WMyB7Ci0JVVNIT1JUIHVzUGl4ZWxDbG9jazsJLyogIGluIDEwa0h6IHVuaXQ7IGZvciBiaW9zIGNvbnZlbmllbnQgPSAoUmVmQ2xrKkZCX0RpdikvKFJlZl9EaXYqUG9zdF9EaXYpICovCi0JLyogIDAgbWVhbnMgZGlzYWJsZSBQUExMLiBGb3IgVkdBIFBQTEwsbWFrZSBzdXJlIHRoaXMgdmFsdWUgaXMgbm90IDAuICovCi0JVVNIT1JUIHVzUmVmRGl2OwkvKiAgUmVmZXJlbmNlIGRpdmlkZXIgKi8KLQlVU0hPUlQgdXNGYkRpdjsJCS8qICBmZWVkYmFjayBkaXZpZGVyICovCi0JVUNIQVIgdWNQb3N0RGl2OwkvKiAgcG9zdCBkaXZpZGVyICovCi0JVUNIQVIgdWNGcmFjRmJEaXY7CS8qICBmcmFjdGlvbmFsIGZlZWRiYWNrIGRpdmlkZXIgKi8KLQlVQ0hBUiB1Y1BwbGw7CQkvKiAgQVRPTV9QUExMMSBvciBBVE9NX1BQTDIgKi8KLQlVQ0hBUiB1Y1RyYW5zbWl0dGVySWQ7CS8qICBncmFwaGljIGVuY29kZXIgaWQgZGVmaW5lZCBpbiBvYmplY3RJZC5oICovCi0JdW5pb24gewotCQlVQ0hBUiB1Y0VuY29kZXJNb2RlOwkvKiAgZW5jb2RlciB0eXBlIGRlZmluZWQgYXMgQVRPTV9FTkNPREVSX01PREVfRFAvRFZJL0hETUkvICovCi0JCVVDSEFSIHVjRFZPQ29uZmlnOwkvKiAgd2hlbiB1c2UgRFZPLCBuZWVkIHRvIGtub3cgU0RSL0REUiwgMTJiaXQgb3IgMjRiaXQgKi8KK3R5cGVkZWYgc3RydWN0IF9QSVhFTF9DTE9DS19QQVJBTUVURVJTX1YzCit7CisgIFVTSE9SVCB1c1BpeGVsQ2xvY2s7ICAgICAgICAgICAgICAgIC8vIGluIDEwa0h6IHVuaXQ7IGZvciBiaW9zIGNvbnZlbmllbnQgPSAoUmVmQ2xrKkZCX0RpdikvKFJlZl9EaXYqUG9zdF9EaXYpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgbWVhbnMgZGlzYWJsZSBQUExMLiBGb3IgVkdBIFBQTEwsbWFrZSBzdXJlIHRoaXMgdmFsdWUgaXMgbm90IDAuCisgIFVTSE9SVCB1c1JlZkRpdjsgICAgICAgICAgICAgICAgICAgIC8vIFJlZmVyZW5jZSBkaXZpZGVyCisgIFVTSE9SVCB1c0ZiRGl2OyAgICAgICAgICAgICAgICAgICAgIC8vIGZlZWRiYWNrIGRpdmlkZXIKKyAgVUNIQVIgIHVjUG9zdERpdjsgICAgICAgICAgICAgICAgICAgLy8gcG9zdCBkaXZpZGVyCQorICBVQ0hBUiAgdWNGcmFjRmJEaXY7ICAgICAgICAgICAgICAgICAvLyBmcmFjdGlvbmFsIGZlZWRiYWNrIGRpdmlkZXIKKyAgVUNIQVIgIHVjUHBsbDsgICAgICAgICAgICAgICAgICAgICAgLy8gQVRPTV9QUExMMSBvciBBVE9NX1BQTDIKKyAgVUNIQVIgIHVjVHJhbnNtaXR0ZXJJZDsgICAgICAgICAgICAgLy8gZ3JhcGhpYyBlbmNvZGVyIGlkIGRlZmluZWQgaW4gb2JqZWN0SWQuaAorCXVuaW9uCisJeworICBVQ0hBUiAgdWNFbmNvZGVyTW9kZTsgICAgICAgICAgICAgICAvLyBlbmNvZGVyIHR5cGUgZGVmaW5lZCBhcyBBVE9NX0VOQ09ERVJfTU9ERV9EUC9EVkkvSERNSS8KKwlVQ0hBUiAgdWNEVk9Db25maWc7CQkJCQkJCQkJLy8gd2hlbiB1c2UgRFZPLCBuZWVkIHRvIGtub3cgU0RSL0REUiwgMTJiaXQgb3IgMjRiaXQKIAl9OwotCVVDSEFSIHVjTWlzY0luZm87CS8qICBiaXRbMF09Rm9yY2UgcHJvZ3JhbSwgYml0WzFdPSBzZXQgcGNsayBmb3IgVkdBLCBiWzJdPSBDUlRDIHNlbCAqLwotCS8qICBiaXRbM109MDp1c2UgUFBMTCBmb3IgZGlzcGNsayBzb3VyY2UsID0xOiB1c2UgZW5naW5lIGNsb2NrIGZvciBkaXNwY2xvY2sgc291cmNlICovCi19IFBJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjM7CisgIFVDSEFSICB1Y01pc2NJbmZvOyAgICAgICAgICAgICAgICAgIC8vIGJpdFswXT1Gb3JjZSBwcm9ncmFtLCBiaXRbMV09IHNldCBwY2xrIGZvciBWR0EsIGJbMl09IENSVEMgc2VsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdFszXT0wOnVzZSBQUExMIGZvciBkaXNwY2xrIHNvdXJjZSwgPTE6IHVzZSBlbmdpbmUgY2xvY2sgZm9yIGRpc3BjbG9jayBzb3VyY2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYml0WzRdPTA6dXNlIFhUQUxJTiBhcyB0aGUgc291cmNlIG9mIHJlZmVyZW5jZSBkaXZpZGVyLD0xIHVzZSB0aGUgcHJlLWRlZmluZWQgY2xvY2sgYXMgdGhlIHNvdXJjZSBvZiByZWZlcmVuY2UgZGl2aWRlcgorfVBJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjM7CiAKICNkZWZpbmUgUElYRUxfQ0xPQ0tfUEFSQU1FVEVSU19MQVNUCQkJUElYRUxfQ0xPQ0tfUEFSQU1FVEVSU19WMgogI2RlZmluZSBHRVRfUElYRUxfQ0xPQ0tfUFNfQUxMT0NBVElPTgkJUElYRUxfQ0xPQ0tfUEFSQU1FVEVSU19MQVNUCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBBZGp1c3REaXNwbGF5UGxsVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0FESlVTVF9ESVNQTEFZX1BMTF9QQVJBTUVURVJTIHsKK3R5cGVkZWYgc3RydWN0IF9QSVhFTF9DTE9DS19QQVJBTUVURVJTX1Y1Cit7CisgIFVDSEFSICB1Y0NSVEM7ICAgICAgICAgICAgIC8vIEFUT01fQ1JUQzF+NiwgaW5kaWNhdGUgdGhlIENSVEMgY29udHJvbGxlciB0byAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZHJpdmUgdGhlIHBpeGVsIGNsb2NrLiBub3QgdXNlZCBmb3IgRENQTEwgY2FzZS4KKyAgdW5pb257CisgIFVDSEFSICB1Y1Jlc2VydmVkOworICBVQ0hBUiAgdWNGcmFjRmJEaXY7ICAgICAgICAvLyBbZ3BoYW5dIHRlbXBvcmFyeSB0byBwcmV2ZW50IGJ1aWxkIHByb2JsZW0uICByZW1vdmUgaXQgYWZ0ZXIgZHJpdmVyIGNvZGUgaXMgY2hhbmdlZC4KKyAgfTsKKyAgVVNIT1JUIHVzUGl4ZWxDbG9jazsgICAgICAgLy8gdGFyZ2V0IHRoZSBwaXhlbCBjbG9jayB0byBkcml2ZSB0aGUgQ1JUQyB0aW1pbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCBtZWFucyBkaXNhYmxlIFBQTEwvRENQTEwuIAorICBVU0hPUlQgdXNGYkRpdjsgICAgICAgICAgICAvLyBmZWVkYmFjayBkaXZpZGVyIGludGVnZXIgcGFydC4gCisgIFVDSEFSICB1Y1Bvc3REaXY7ICAgICAgICAgIC8vIHBvc3QgZGl2aWRlci4gCisgIFVDSEFSICB1Y1JlZkRpdjsgICAgICAgICAgIC8vIFJlZmVyZW5jZSBkaXZpZGVyCisgIFVDSEFSICB1Y1BwbGw7ICAgICAgICAgICAgIC8vIEFUT01fUFBMTDEvQVRPTV9QUExMMi9BVE9NX0RDUExMCisgIFVDSEFSICB1Y1RyYW5zbWl0dGVySUQ7ICAgIC8vIEFTSUMgZW5jb2RlciBpZCBkZWZpbmVkIGluIG9iamVjdElkLmgsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmRpY2F0ZSB3aGljaCBncmFwaGljIGVuY29kZXIgd2lsbCBiZSB1c2VkLiAKKyAgVUNIQVIgIHVjRW5jb2Rlck1vZGU7ICAgICAgLy8gRW5jb2RlciBtb2RlOiAKKyAgVUNIQVIgIHVjTWlzY0luZm87ICAgICAgICAgLy8gYml0WzBdPSBGb3JjZSBwcm9ncmFtIFBQTEwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdFsxXT0gd2hlbiBWR0EgdGltaW5nIGlzIHVzZWQuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXRbMzoyXT0gSERNSSBwYW5lbCBiaXQgZGVwdGg6ID0wOiAyNGJwcCA9MTozMGJwcCwgPTI6MzJicHAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYml0WzRdPSBSZWZDbG9jayBzb3VyY2UgZm9yIFBQTEwuIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyA9MDogWFRMQUlOKCBkZWZhdWx0IG1vZGUgKQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vID0xOiBvdGhlciBleHRlcm5hbCBjbG9jayBzb3VyY2UsIHdoaWNoIGlzIHByZS1kZWZpbmVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBieSBWQklPUyBkZXBlbmQgb24gdGhlIGZlYXR1cmUgcmVxdWlyZWQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdFs3OjVdOiByZXNlcnZlZC4KKyAgVUxPTkcgIHVsRmJEaXZEZWNGcmFjOyAgICAgLy8gMjAgYml0IGZlZWRiYWNrIGRpdmlkZXIgZGVjaW1hbCBmcmFjdGlvbiBwYXJ0LCByYW5nZSBmcm9tIDF+OTk5OTk5ICggMC4wMDAwMDEgdG8gMC45OTk5OTkgKQorCit9UElYRUxfQ0xPQ0tfUEFSQU1FVEVSU19WNTsKKworI2RlZmluZSBQSVhFTF9DTE9DS19WNV9NSVNDX0ZPUkNFX1BST0dfUFBMTAkJCQkJMHgwMQorI2RlZmluZSBQSVhFTF9DTE9DS19WNV9NSVNDX1ZHQV9NT0RFCQkJCQkJCQkweDAyCisjZGVmaW5lIFBJWEVMX0NMT0NLX1Y1X01JU0NfSERNSV9CUFBfTUFTSyAgICAgICAgICAgMHgwYworI2RlZmluZSBQSVhFTF9DTE9DS19WNV9NSVNDX0hETUlfMjRCUFAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgUElYRUxfQ0xPQ0tfVjVfTUlTQ19IRE1JXzMwQlBQICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIFBJWEVMX0NMT0NLX1Y1X01JU0NfSERNSV8zMkJQUCAgICAgICAgICAgICAgMHgwOAorI2RlZmluZSBQSVhFTF9DTE9DS19WNV9NSVNDX1JFRl9ESVZfU1JDICAgICAgICAgICAgIDB4MTAKKwordHlwZWRlZiBzdHJ1Y3QgX0dFVF9ESVNQX1BMTF9TVEFUVVNfSU5QVVRfUEFSQU1FVEVSU19WMgoreworICBQSVhFTF9DTE9DS19QQVJBTUVURVJTX1YzIHNEaXNwQ2xrSW5wdXQ7Cit9R0VUX0RJU1BfUExMX1NUQVRVU19JTlBVVF9QQVJBTUVURVJTX1YyOworCit0eXBlZGVmIHN0cnVjdCBfR0VUX0RJU1BfUExMX1NUQVRVU19PVVRQVVRfUEFSQU1FVEVSU19WMgoreworICBVQ0hBUiAgdWNTdGF0dXM7CisgIFVDSEFSICB1Y1JlZkRpdlNyYzsgICAgICAgICAgICAgICAgIC8vID0xOiByZWZlcmVuY2UgY2xvY2sgc291cmNlIGZyb20gWFRBTElOLCA9MDogc291cmNlIGZyb20gUENJRSByZWYgY2xvY2sKKyAgVUNIQVIgIHVjUmVzZXJ2ZWRbMl07Cit9R0VUX0RJU1BfUExMX1NUQVRVU19PVVRQVVRfUEFSQU1FVEVSU19WMjsKKwordHlwZWRlZiBzdHJ1Y3QgX0dFVF9ESVNQX1BMTF9TVEFUVVNfSU5QVVRfUEFSQU1FVEVSU19WMworeworICBQSVhFTF9DTE9DS19QQVJBTUVURVJTX1Y1IHNEaXNwQ2xrSW5wdXQ7Cit9R0VUX0RJU1BfUExMX1NUQVRVU19JTlBVVF9QQVJBTUVURVJTX1YzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgQWRqdXN0RGlzcGxheVBsbFRhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfQURKVVNUX0RJU1BMQVlfUExMX1BBUkFNRVRFUlMKK3sKIAlVU0hPUlQgdXNQaXhlbENsb2NrOwogCVVDSEFSIHVjVHJhbnNtaXR0ZXJJRDsKIAlVQ0hBUiB1Y0VuY29kZU1vZGU7Ci0JdW5pb24gewotCQlVQ0hBUiB1Y0RWT0NvbmZpZzsJLyogaWYgRFZPLCBuZWVkIHBhc3NpbmcgbGluayByYXRlIGFuZCBvdXRwdXQgMTJiaXRsb3cgb3IgMjRiaXQgKi8KLQkJVUNIQVIgdWNDb25maWc7CS8qIGlmIG5vbmUgRFZPLCBub3QgZGVmaW5lZCB5ZXQgKi8KKwl1bmlvbgorCXsKKwkJVUNIQVIgdWNEVk9Db25maWc7CQkJCQkJCQkJLy9pZiBEVk8sIG5lZWQgcGFzc2luZyBsaW5rIHJhdGUgYW5kIG91dHB1dCAxMmJpdGxvdyBvciAyNGJpdAorCQlVQ0hBUiB1Y0NvbmZpZzsJCQkJCQkJCQkJCS8vaWYgbm9uZSBEVk8sIG5vdCBkZWZpbmVkIHlldAogCX07CiAJVUNIQVIgdWNSZXNlcnZlZFszXTsKLX0gQURKVVNUX0RJU1BMQVlfUExMX1BBUkFNRVRFUlM7Cit9QURKVVNUX0RJU1BMQVlfUExMX1BBUkFNRVRFUlM7CiAKICNkZWZpbmUgQURKVVNUX0RJU1BMQVlfQ09ORklHX1NTX0VOQUJMRSAgICAgICAweDEwCi0KICNkZWZpbmUgQURKVVNUX0RJU1BMQVlfUExMX1BTX0FMTE9DQVRJT04JCQlBREpVU1RfRElTUExBWV9QTExfUEFSQU1FVEVSUwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgRW5hYmxlWVVWVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9ZVVZfUEFSQU1FVEVSUyB7Ci0JVUNIQVIgdWNFbmFibGU7CQkvKiAgQVRPTV9FTkFCTEU6RW5hYmxlIFlVViBvciBBVE9NX0RJU0FCTEU6RGlzYWJsZSBZVVYgKFJHQikgKi8KLQlVQ0hBUiB1Y0NSVEM7CQkvKiAgV2hpY2ggQ1JUQyBuZWVkcyB0aGlzIFlVViBvciBSR0IgZm9ybWF0ICovCi0JVUNIQVIgdWNQYWRkaW5nWzJdOwotfSBFTkFCTEVfWVVWX1BBUkFNRVRFUlM7Cit0eXBlZGVmIHN0cnVjdCBfQURKVVNUX0RJU1BMQVlfUExMX0lOUFVUX1BBUkFNRVRFUlNfVjMKK3sKKwlVU0hPUlQgdXNQaXhlbENsb2NrOyAgICAgICAgICAgICAgICAgICAgLy8gdGFyZ2V0IHBpeGVsIGNsb2NrCisJVUNIQVIgdWNUcmFuc21pdHRlcklEOyAgICAgICAgICAgICAgICAgIC8vIHRyYW5zbWl0dGVyIGlkIGRlZmluZWQgaW4gb2JqZWN0aWQuaAorCVVDSEFSIHVjRW5jb2RlTW9kZTsgICAgICAgICAgICAgICAgICAgICAvLyBlbmNvZGVyIG1vZGU6IENSVCwgTFZEUywgRFAsIFRNRFMgb3IgSERNSQorICBVQ0hBUiB1Y0Rpc3BQbGxDb25maWc7ICAgICAgICAgICAgICAgICAvLyBkaXNwbGF5IHBsbCBjb25maWd1cmUgcGFyYW1ldGVyIGRlZmluZWQgYXMgZm9sbG93aW5nIERJU1BQTExfQ09ORklHX1hYWFgKKwlVQ0hBUiB1Y1Jlc2VydmVkWzNdOworfUFESlVTVF9ESVNQTEFZX1BMTF9JTlBVVF9QQVJBTUVURVJTX1YzOworCisvLyB1c0Rpc3BQbGxDb25maWcgdjEuMiBmb3IgUm9hZFJ1bm5lcgorI2RlZmluZSBESVNQUExMX0NPTkZJR19EVk9fUkFURV9TRUwgICAgICAgICAgICAgICAgMHgwMDAxICAgICAvLyBuZWVkIG9ubHkgd2hlbiB1Y1RyYW5zbWl0dGVySUQgPSBEVk8KKyNkZWZpbmUgRElTUFBMTF9DT05GSUdfRFZPX0REUl9TUEVFRCAgICAgICAgICAgICAgIDB4MDAwMCAgICAgLy8gbmVlZCBvbmx5IHdoZW4gdWNUcmFuc21pdHRlcklEID0gRFZPCisjZGVmaW5lIERJU1BQTExfQ09ORklHX0RWT19TRFJfU1BFRUQgICAgICAgICAgICAgICAweDAwMDEgICAgIC8vIG5lZWQgb25seSB3aGVuIHVjVHJhbnNtaXR0ZXJJRCA9IERWTworI2RlZmluZSBESVNQUExMX0NPTkZJR19EVk9fT1VUUFVUX1NFTCAgICAgICAgICAgICAgMHgwMDBjICAgICAvLyBuZWVkIG9ubHkgd2hlbiB1Y1RyYW5zbWl0dGVySUQgPSBEVk8KKyNkZWZpbmUgRElTUFBMTF9DT05GSUdfRFZPX0xPVzEyQklUICAgICAgICAgICAgICAgIDB4MDAwMCAgICAgLy8gbmVlZCBvbmx5IHdoZW4gdWNUcmFuc21pdHRlcklEID0gRFZPCisjZGVmaW5lIERJU1BQTExfQ09ORklHX0RWT19VUFBFUjEyQklUICAgICAgICAgICAgICAweDAwMDQgICAgIC8vIG5lZWQgb25seSB3aGVuIHVjVHJhbnNtaXR0ZXJJRCA9IERWTworI2RlZmluZSBESVNQUExMX0NPTkZJR19EVk9fMjRCSVQgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAgICAvLyBuZWVkIG9ubHkgd2hlbiB1Y1RyYW5zbWl0dGVySUQgPSBEVk8KKyNkZWZpbmUgRElTUFBMTF9DT05GSUdfU1NfRU5BQkxFICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgICAgLy8gT25seSB1c2VkIHdoZW4gdWNFbmNvZGVyTW9kZSA9IERQIG9yIExWRFMKKyNkZWZpbmUgRElTUFBMTF9DT05GSUdfQ09IRVJFTlRfTU9ERSAgICAgICAgICAgICAgIDB4MDAyMCAgICAgLy8gT25seSB1c2VkIHdoZW4gdWNFbmNvZGVyTW9kZSA9IFRNRFMgb3IgSERNSQorI2RlZmluZSBESVNQUExMX0NPTkZJR19EVUFMX0xJTksgICAgICAgICAgICAgICAgICAgMHgwMDQwICAgICAvLyBPbmx5IHVzZWQgd2hlbiB1Y0VuY29kZXJNb2RlID0gVE1EUyBvciBMVkRTCisKKwordHlwZWRlZiBzdHJ1Y3QgX0FESlVTVF9ESVNQTEFZX1BMTF9PVVRQVVRfUEFSQU1FVEVSU19WMworeworICBVTE9ORyB1bERpc3BQbGxGcmVxOyAgICAgICAgICAgICAgICAgLy8gcmV0dXJuIGRpc3BsYXkgUFBMTCBmcmVxIHdoaWNoIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHBpeGNsb2NrLCBhbmQgcmVsYXRlZCBpZGNsaywgc3ltY2xrIGV0YworICBVQ0hBUiB1Y1JlZkRpdjsgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgaXQgaXMgbm9uZS16ZXJvLCBpdCBpcyB1c2VkIHRvIGJlIGNhbGN1bGF0ZWQgdGhlIG90aGVyIHBwbGwgcGFyYW1ldGVyIGZiX2RpdmlkZXIgYW5kIHBvc3RfZGl2ICggaWYgaXQgaXMgbm90IGdpdmVuICkKKyAgVUNIQVIgdWNQb3N0RGl2OyAgICAgICAgICAgICAgICAgICAgIC8vIGlmIGl0IGlzIG5vbmUtemVybywgaXQgaXMgdXNlZCB0byBiZSBjYWxjdWxhdGVkIHRoZSBvdGhlciBwcGxsIHBhcmFtZXRlciBmYl9kaXZpZGVyCisgIFVDSEFSIHVjUmVzZXJ2ZWRbMl07ICAKK31BREpVU1RfRElTUExBWV9QTExfT1VUUFVUX1BBUkFNRVRFUlNfVjM7CisKK3R5cGVkZWYgc3RydWN0IF9BREpVU1RfRElTUExBWV9QTExfUFNfQUxMT0NBVElPTl9WMworeworICB1bmlvbiAKKyAgeworICAgIEFESlVTVF9ESVNQTEFZX1BMTF9JTlBVVF9QQVJBTUVURVJTX1YzICBzSW5wdXQ7CisgICAgQURKVVNUX0RJU1BMQVlfUExMX09VVFBVVF9QQVJBTUVURVJTX1YzIHNPdXRwdXQ7CisgIH07Cit9IEFESlVTVF9ESVNQTEFZX1BMTF9QU19BTExPQ0FUSU9OX1YzOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgRW5hYmxlWVVWVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9FTkFCTEVfWVVWX1BBUkFNRVRFUlMKK3sKKyAgVUNIQVIgdWNFbmFibGU7ICAgICAgICAgICAgICAgICAgICAgLy8gQVRPTV9FTkFCTEU6RW5hYmxlIFlVViBvciBBVE9NX0RJU0FCTEU6RGlzYWJsZSBZVVYgKFJHQikKKyAgVUNIQVIgdWNDUlRDOyAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hpY2ggQ1JUQyBuZWVkcyB0aGlzIFlVViBvciBSR0IgZm9ybWF0CisgIFVDSEFSIHVjUGFkZGluZ1syXTsKK31FTkFCTEVfWVVWX1BBUkFNRVRFUlM7CiAjZGVmaW5lIEVOQUJMRV9ZVVZfUFNfQUxMT0NBVElPTiBFTkFCTEVfWVVWX1BBUkFNRVRFUlMKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlcyB1c2VkIGJ5IEdldE1lbW9yeUNsb2NrVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0dFVF9NRU1PUllfQ0xPQ0tfUEFSQU1FVEVSUyB7Ci0JVUxPTkcgdWxSZXR1cm5NZW1vcnlDbG9jazsJLyogIGN1cnJlbnQgbWVtb3J5IHNwZWVkIGluIDEwS0h6IHVuaXQgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZXMgdXNlZCBieSBHZXRNZW1vcnlDbG9ja1RhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfR0VUX01FTU9SWV9DTE9DS19QQVJBTUVURVJTCit7CisgIFVMT05HIHVsUmV0dXJuTWVtb3J5Q2xvY2s7ICAgICAgICAgIC8vIGN1cnJlbnQgbWVtb3J5IHNwZWVkIGluIDEwS0h6IHVuaXQKIH0gR0VUX01FTU9SWV9DTE9DS19QQVJBTUVURVJTOwogI2RlZmluZSBHRVRfTUVNT1JZX0NMT0NLX1BTX0FMTE9DQVRJT04gIEdFVF9NRU1PUllfQ0xPQ0tfUEFSQU1FVEVSUwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgR2V0RW5naW5lQ2xvY2tUYWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfR0VUX0VOR0lORV9DTE9DS19QQVJBTUVURVJTIHsKLQlVTE9ORyB1bFJldHVybkVuZ2luZUNsb2NrOwkvKiAgY3VycmVudCBlbmdpbmUgc3BlZWQgaW4gMTBLSHogdW5pdCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGJ5IEdldEVuZ2luZUNsb2NrVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9HRVRfRU5HSU5FX0NMT0NLX1BBUkFNRVRFUlMKK3sKKyAgVUxPTkcgdWxSZXR1cm5FbmdpbmVDbG9jazsgICAgICAgICAgLy8gY3VycmVudCBlbmdpbmUgc3BlZWQgaW4gMTBLSHogdW5pdAogfSBHRVRfRU5HSU5FX0NMT0NLX1BBUkFNRVRFUlM7CiAjZGVmaW5lIEdFVF9FTkdJTkVfQ0xPQ0tfUFNfQUxMT0NBVElPTiAgR0VUX0VOR0lORV9DTE9DS19QQVJBTUVURVJTCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIEZvbGxvd2luZyBTdHJ1Y3R1cmVzIGFuZCBjb25zdGFudCBtYXkgYmUgb2Jzb2xldGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogTWF4aXVtIDggYnl0ZXMsdGhlIGRhdGEgcmVhZCBpbiB3aWxsIGJlIHBsYWNlZCBpbiB0aGUgcGFyYW1ldGVyIHNwYWNlLiAqLwotLyogUmVhZCBvcGVyYWlvbiBzdWNjZXNzZWZ1bCB3aGVuIHRoZSBwYXJhbXRlciBzcGFjZSBpcyBub24temVybywgb3RoZXJ3aXNlIHJlYWQgb3BlcmF0aW9uIGZhaWxlZCAqLwotdHlwZWRlZiBzdHJ1Y3QgX1JFQURfRURJRF9GUk9NX0hXX0kyQ19EQVRBX1BBUkFNRVRFUlMgewotCVVTSE9SVCB1c1ByZXNjYWxlOwkvKiBSYXRpbyBiZXR3ZWVuIEVuZ2luZSBjbG9jayBhbmQgSTJDIGNsb2NrICovCi0JVVNIT1JUIHVzVlJBTUFkZHJlc3M7CS8qIEFkcmVzcyBpbiBGcmFtZSBCdWZmZXIgd2hlcmUgdG8gcGFjZSByYXcgRURJRCAqLwotCVVTSE9SVCB1c1N0YXR1czsJLyogV2hlbiB1c2Ugb3V0cHV0OiBsb3dlciBieXRlIEVESUQgY2hlY2tzdW0sIGhpZ2ggYnl0ZSBoYXJkd2FyZSBzdGF0dXMgKi8KLQkvKiBXSGVuIHVzZSBpbnB1dDogIGxvd2VyIGJ5dGUgYXMgJ2J5dGUgdG8gcmVhZCc6Y3VycmVudGx5IGxpbWl0ZWQgdG8gMTI4Ynl0ZSBvciAxYnl0ZSAqLwotCVVDSEFSIHVjU2xhdmVBZGRyOwkvKiBSZWFkIGZyb20gd2hpY2ggc2xhdmUgKi8KLQlVQ0hBUiB1Y0xpbmVOdW1iZXI7CS8qIFJlYWQgZnJvbSB3aGljaCBIVyBhc3Npc3RlZCBsaW5lICovCi19IFJFQURfRURJRF9GUk9NX0hXX0kyQ19EQVRBX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBGb2xsb3dpbmcgU3RydWN0dXJlcyBhbmQgY29uc3RhbnQgbWF5IGJlIG9ic29sZXRlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvL01heGl1bSA4IGJ5dGVzLHRoZSBkYXRhIHJlYWQgaW4gd2lsbCBiZSBwbGFjZWQgaW4gdGhlIHBhcmFtZXRlciBzcGFjZS4KKy8vUmVhZCBvcGVyYWlvbiBzdWNjZXNzZWZ1bCB3aGVuIHRoZSBwYXJhbXRlciBzcGFjZSBpcyBub24temVybywgb3RoZXJ3aXNlIHJlYWQgb3BlcmF0aW9uIGZhaWxlZAordHlwZWRlZiBzdHJ1Y3QgX1JFQURfRURJRF9GUk9NX0hXX0kyQ19EQVRBX1BBUkFNRVRFUlMKK3sKKyAgVVNIT1JUICAgIHVzUHJlc2NhbGU7ICAgICAgICAgLy9SYXRpbyBiZXR3ZWVuIEVuZ2luZSBjbG9jayBhbmQgSTJDIGNsb2NrCisgIFVTSE9SVCAgICB1c1ZSQU1BZGRyZXNzOyAgICAgIC8vQWRyZXNzIGluIEZyYW1lIEJ1ZmZlciB3aGVyZSB0byBwYWNlIHJhdyBFRElECisgIFVTSE9SVCAgICB1c1N0YXR1czsgICAgICAgICAgIC8vV2hlbiB1c2Ugb3V0cHV0OiBsb3dlciBieXRlIEVESUQgY2hlY2tzdW0sIGhpZ2ggYnl0ZSBoYXJkd2FyZSBzdGF0dXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9XSGVuIHVzZSBpbnB1dDogIGxvd2VyIGJ5dGUgYXMgJ2J5dGUgdG8gcmVhZCc6Y3VycmVudGx5IGxpbWl0ZWQgdG8gMTI4Ynl0ZSBvciAxYnl0ZQorICBVQ0hBUiAgICAgdWNTbGF2ZUFkZHI7ICAgICAgICAvL1JlYWQgZnJvbSB3aGljaCBzbGF2ZQorICBVQ0hBUiAgICAgdWNMaW5lTnVtYmVyOyAgICAgICAvL1JlYWQgZnJvbSB3aGljaCBIVyBhc3Npc3RlZCBsaW5lCit9UkVBRF9FRElEX0ZST01fSFdfSTJDX0RBVEFfUEFSQU1FVEVSUzsKICNkZWZpbmUgUkVBRF9FRElEX0ZST01fSFdfSTJDX0RBVEFfUFNfQUxMT0NBVElPTiAgUkVBRF9FRElEX0ZST01fSFdfSTJDX0RBVEFfUEFSQU1FVEVSUwogCisKICNkZWZpbmUgIEFUT01fV1JJVEVfSTJDX0ZPUk1BVF9QU09GRlNFVF9QU0RBVEFCWVRFICAgICAgICAgICAgICAgICAgMAogI2RlZmluZSAgQVRPTV9XUklURV9JMkNfRk9STUFUX1BTT0ZGU0VUX1BTVFdPREFUQUJZVEVTICAgICAgICAgICAgICAxCiAjZGVmaW5lICBBVE9NX1dSSVRFX0kyQ19GT1JNQVRfUFNDT1VOVEVSX1BTT0ZGU0VUX0lEREFUQUJMT0NLICAgICAgIDIKICNkZWZpbmUgIEFUT01fV1JJVEVfSTJDX0ZPUk1BVF9QU0NPVU5URVJfSURPRkZTRVRfUExVU19JRERBVEFCTE9DSyAgMwogI2RlZmluZSAgQVRPTV9XUklURV9JMkNfRk9STUFUX0lEQ09VTlRFUl9JRE9GRlNFVF9JRERBVEFCTE9DSyAgICAgICA0CiAKLXR5cGVkZWYgc3RydWN0IF9XUklURV9PTkVfQllURV9IV19JMkNfREFUQV9QQVJBTUVURVJTIHsKLQlVU0hPUlQgdXNQcmVzY2FsZTsJLyogUmF0aW8gYmV0d2VlbiBFbmdpbmUgY2xvY2sgYW5kIEkyQyBjbG9jayAqLwotCVVTSE9SVCB1c0J5dGVPZmZzZXQ7CS8qIFdyaXRlIHRvIHdoaWNoIGJ5dGUgKi8KLQkvKiBVcHBlciBwb3J0aW9uIG9mIHVzQnl0ZU9mZnNldCBpcyBGb3JtYXQgb2YgZGF0YSAqLwotCS8qIDFieXRlUFMrb2Zmc2V0UFMgKi8KLQkvKiAyYnl0ZXNQUytvZmZzZXRQUyAqLwotCS8qIGJsb2NrSUQrb2Zmc2V0UFMgKi8KLQkvKiBibG9ja0lEK29mZnNldElEICovCi0JLyogYmxvY2tJRCtjb3VudGVySUQrb2Zmc2V0SUQgKi8KLQlVQ0hBUiB1Y0RhdGE7CQkvKiBQUyBkYXRhMSAqLwotCVVDSEFSIHVjU3RhdHVzOwkJLyogU3RhdHVzIGJ5dGUgMT1zdWNjZXNzLCAyPWZhaWx1cmUsIEFsc28gaXMgdXNlZCBhcyBQUyBkYXRhMiAqLwotCVVDSEFSIHVjU2xhdmVBZGRyOwkvKiBXcml0ZSB0byB3aGljaCBzbGF2ZSAqLwotCVVDSEFSIHVjTGluZU51bWJlcjsJLyogV3JpdGUgZnJvbSB3aGljaCBIVyBhc3Npc3RlZCBsaW5lICovCi19IFdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BBUkFNRVRFUlM7Cit0eXBlZGVmIHN0cnVjdCBfV1JJVEVfT05FX0JZVEVfSFdfSTJDX0RBVEFfUEFSQU1FVEVSUworeworICBVU0hPUlQgICAgdXNQcmVzY2FsZTsgICAgICAgICAvL1JhdGlvIGJldHdlZW4gRW5naW5lIGNsb2NrIGFuZCBJMkMgY2xvY2sKKyAgVVNIT1JUICAgIHVzQnl0ZU9mZnNldDsgICAgICAgLy9Xcml0ZSB0byB3aGljaCBieXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vVXBwZXIgcG9ydGlvbiBvZiB1c0J5dGVPZmZzZXQgaXMgRm9ybWF0IG9mIGRhdGEgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vMWJ5dGVQUytvZmZzZXRQUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzJieXRlc1BTK29mZnNldFBTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vYmxvY2tJRCtvZmZzZXRQUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Jsb2NrSUQrb2Zmc2V0SUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9ibG9ja0lEK2NvdW50ZXJJRCtvZmZzZXRJRAorICBVQ0hBUiAgICAgdWNEYXRhOyAgICAgICAgICAgICAvL1BTIGRhdGExCisgIFVDSEFSICAgICB1Y1N0YXR1czsgICAgICAgICAgIC8vU3RhdHVzIGJ5dGUgMT1zdWNjZXNzLCAyPWZhaWx1cmUsIEFsc28gaXMgdXNlZCBhcyBQUyBkYXRhMgorICBVQ0hBUiAgICAgdWNTbGF2ZUFkZHI7ICAgICAgICAvL1dyaXRlIHRvIHdoaWNoIHNsYXZlCisgIFVDSEFSICAgICB1Y0xpbmVOdW1iZXI7ICAgICAgIC8vV3JpdGUgZnJvbSB3aGljaCBIVyBhc3Npc3RlZCBsaW5lCit9V1JJVEVfT05FX0JZVEVfSFdfSTJDX0RBVEFfUEFSQU1FVEVSUzsKIAogI2RlZmluZSBXUklURV9PTkVfQllURV9IV19JMkNfREFUQV9QU19BTExPQ0FUSU9OICBXUklURV9PTkVfQllURV9IV19JMkNfREFUQV9QQVJBTUVURVJTCiAKLXR5cGVkZWYgc3RydWN0IF9TRVRfVVBfSFdfSTJDX0RBVEFfUEFSQU1FVEVSUyB7Ci0JVVNIT1JUIHVzUHJlc2NhbGU7CS8qIFJhdGlvIGJldHdlZW4gRW5naW5lIGNsb2NrIGFuZCBJMkMgY2xvY2sgKi8KLQlVQ0hBUiB1Y1NsYXZlQWRkcjsJLyogV3JpdGUgdG8gd2hpY2ggc2xhdmUgKi8KLQlVQ0hBUiB1Y0xpbmVOdW1iZXI7CS8qIFdyaXRlIGZyb20gd2hpY2ggSFcgYXNzaXN0ZWQgbGluZSAqLwotfSBTRVRfVVBfSFdfSTJDX0RBVEFfUEFSQU1FVEVSUzsKK3R5cGVkZWYgc3RydWN0IF9TRVRfVVBfSFdfSTJDX0RBVEFfUEFSQU1FVEVSUworeworICBVU0hPUlQgICAgdXNQcmVzY2FsZTsgICAgICAgICAvL1JhdGlvIGJldHdlZW4gRW5naW5lIGNsb2NrIGFuZCBJMkMgY2xvY2sKKyAgVUNIQVIgICAgIHVjU2xhdmVBZGRyOyAgICAgICAgLy9Xcml0ZSB0byB3aGljaCBzbGF2ZQorICBVQ0hBUiAgICAgdWNMaW5lTnVtYmVyOyAgICAgICAvL1dyaXRlIGZyb20gd2hpY2ggSFcgYXNzaXN0ZWQgbGluZQorfVNFVF9VUF9IV19JMkNfREFUQV9QQVJBTUVURVJTOworCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KICNkZWZpbmUgU1BFRURfRkFOX0NPTlRST0xfUFNfQUxMT0NBVElPTiAgIFdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BBUkFNRVRFUlMKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlcyB1c2VkIGJ5IFBvd2VyQ29ubmVjdG9yRGV0ZWN0aW9uVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX1BPV0VSX0NPTk5FQ1RPUl9ERVRFQ1RJT05fUEFSQU1FVEVSUyB7Ci0JVUNIQVIgdWNQb3dlckNvbm5lY3RvclN0YXR1czsJLyogVXNlZCBmb3IgcmV0dXJuIHZhbHVlIDA6IGRldGVjdGVkLCAxOm5vdCBkZXRlY3RlZCAqLwotCVVDSEFSIHVjUHdyQmVoYXZpb3JJZDsKLQlVU0hPUlQgdXNQd3JCdWRnZXQ7CS8qIGhvdyBtdWNoIHBvd2VyIGN1cnJlbnRseSBib290IHRvIGluIHVuaXQgb2Ygd2F0dCAqLwotfSBQT1dFUl9DT05ORUNUT1JfREVURUNUSU9OX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgUG93ZXJDb25uZWN0b3JEZXRlY3Rpb25UYWJsZQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQordHlwZWRlZiBzdHJ1Y3QJX1BPV0VSX0NPTk5FQ1RPUl9ERVRFQ1RJT05fUEFSQU1FVEVSUworeworICBVQ0hBUiAgIHVjUG93ZXJDb25uZWN0b3JTdGF0dXM7ICAgICAgLy9Vc2VkIGZvciByZXR1cm4gdmFsdWUgMDogZGV0ZWN0ZWQsIDE6bm90IGRldGVjdGVkCisJVUNIQVIgICB1Y1B3ckJlaGF2aW9ySWQ7CQkJCQkJCQorCVVTSE9SVAl1c1B3ckJ1ZGdldDsJCQkJCQkJCSAvL2hvdyBtdWNoIHBvd2VyIGN1cnJlbnRseSBib290IHRvIGluIHVuaXQgb2Ygd2F0dAorfVBPV0VSX0NPTk5FQ1RPUl9ERVRFQ1RJT05fUEFSQU1FVEVSUzsKIAotdHlwZWRlZiBzdHJ1Y3QgUE9XRVJfQ09OTkVDVE9SX0RFVEVDVElPTl9QU19BTExPQ0FUSU9OIHsKLQlVQ0hBUiB1Y1Bvd2VyQ29ubmVjdG9yU3RhdHVzOwkvKiBVc2VkIGZvciByZXR1cm4gdmFsdWUgMDogZGV0ZWN0ZWQsIDE6bm90IGRldGVjdGVkICovCi0JVUNIQVIgdWNSZXNlcnZlZDsKLQlVU0hPUlQgdXNQd3JCdWRnZXQ7CS8qIGhvdyBtdWNoIHBvd2VyIGN1cnJlbnRseSBib290IHRvIGluIHVuaXQgb2Ygd2F0dCAqLwotCVdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BTX0FMTE9DQVRJT04gc1Jlc2VydmVkOwotfSBQT1dFUl9DT05ORUNUT1JfREVURUNUSU9OX1BTX0FMTE9DQVRJT047Cit0eXBlZGVmIHN0cnVjdCBQT1dFUl9DT05ORUNUT1JfREVURUNUSU9OX1BTX0FMTE9DQVRJT04KK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFVDSEFSICAgdWNQb3dlckNvbm5lY3RvclN0YXR1czsgICAgICAvL1VzZWQgZm9yIHJldHVybiB2YWx1ZSAwOiBkZXRlY3RlZCwgMTpub3QgZGV0ZWN0ZWQKKwlVQ0hBUiAgIHVjUmVzZXJ2ZWQ7CisJVVNIT1JUCXVzUHdyQnVkZ2V0OwkJCQkJCQkJIC8vaG93IG11Y2ggcG93ZXIgY3VycmVudGx5IGJvb3QgdG8gaW4gdW5pdCBvZiB3YXR0CisgIFdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BTX0FMTE9DQVRJT04gICAgc1Jlc2VydmVkOworfVBPV0VSX0NPTk5FQ1RPUl9ERVRFQ1RJT05fUFNfQUxMT0NBVElPTjsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKipMVkRTIFNTIENvbW1hbmQgVGFibGUgRGVmaW5pdGlvbnMqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgRW5hYmxlU3ByZWFkU3BlY3RydW1PblBQTExUYWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfRU5BQkxFX0xWRFNfU1NfUEFSQU1FVEVSUyB7Ci0JVVNIT1JUIHVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlOwotCVVDSEFSIHVjU3ByZWFkU3BlY3RydW1UeXBlOwkvKiBCaXQxPTAgRG93biBTcHJlYWQsPTEgQ2VudGVyIFNwcmVhZC4gQml0MT0xIEV4dC4gPTAgSW50LiBPdGhlcnM6VEJEICovCi0JVUNIQVIgdWNTcHJlYWRTcGVjdHJ1bVN0ZXBTaXplX0RlbGF5OwkvKiBiaXRzMzoyIFNTX1NURVBfU0laRTsgYml0IDY6NCBTU19ERUxBWSAqLwotCVVDSEFSIHVjRW5hYmxlOwkJLyogQVRPTV9FTkFCTEUgb3IgQVRPTV9ESVNBQkxFICovCi0JVUNIQVIgdWNQYWRkaW5nWzNdOwotfSBFTkFCTEVfTFZEU19TU19QQVJBTUVURVJTOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGJ5IEVuYWJsZVNwcmVhZFNwZWN0cnVtT25QUExMVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0CV9FTkFCTEVfTFZEU19TU19QQVJBTUVURVJTCit7CisgIFVTSE9SVCAgdXNTcHJlYWRTcGVjdHJ1bVBlcmNlbnRhZ2U7ICAgICAgIAorICBVQ0hBUiAgIHVjU3ByZWFkU3BlY3RydW1UeXBlOyAgICAgICAgICAgLy9CaXQxPTAgRG93biBTcHJlYWQsPTEgQ2VudGVyIFNwcmVhZC4gQml0MT0xIEV4dC4gPTAgSW50LiBPdGhlcnM6VEJECisgIFVDSEFSICAgdWNTcHJlYWRTcGVjdHJ1bVN0ZXBTaXplX0RlbGF5OyAvL2JpdHMzOjIgU1NfU1RFUF9TSVpFOyBiaXQgNjo0IFNTX0RFTEFZCisgIFVDSEFSICAgdWNFbmFibGU7ICAgICAgICAgICAgICAgICAgICAgICAvL0FUT01fRU5BQkxFIG9yIEFUT01fRElTQUJMRQorICBVQ0hBUiAgIHVjUGFkZGluZ1szXTsKK31FTkFCTEVfTFZEU19TU19QQVJBTUVURVJTOwogCi0vKiB1Y1RhYmxlRm9ybWF0UmV2aXNpb249MSx1Y1RhYmxlQ29udGVudFJldmlzaW9uPTIgKi8KLXR5cGVkZWYgc3RydWN0IF9FTkFCTEVfTFZEU19TU19QQVJBTUVURVJTX1YyIHsKLQlVU0hPUlQgdXNTcHJlYWRTcGVjdHJ1bVBlcmNlbnRhZ2U7Ci0JVUNIQVIgdWNTcHJlYWRTcGVjdHJ1bVR5cGU7CS8qIEJpdDE9MCBEb3duIFNwcmVhZCw9MSBDZW50ZXIgU3ByZWFkLiBCaXQxPTEgRXh0LiA9MCBJbnQuIE90aGVyczpUQkQgKi8KLQlVQ0hBUiB1Y1NwcmVhZFNwZWN0cnVtU3RlcDsJLyogICovCi0JVUNIQVIgdWNFbmFibGU7CQkvKiBBVE9NX0VOQUJMRSBvciBBVE9NX0RJU0FCTEUgKi8KLQlVQ0hBUiB1Y1NwcmVhZFNwZWN0cnVtRGVsYXk7Ci0JVUNIQVIgdWNTcHJlYWRTcGVjdHJ1bVJhbmdlOwotCVVDSEFSIHVjUGFkZGluZzsKLX0gRU5BQkxFX0xWRFNfU1NfUEFSQU1FVEVSU19WMjsKKy8vdWNUYWJsZUZvcm1hdFJldmlzaW9uPTEsdWNUYWJsZUNvbnRlbnRSZXZpc2lvbj0yCit0eXBlZGVmIHN0cnVjdAlfRU5BQkxFX0xWRFNfU1NfUEFSQU1FVEVSU19WMgoreworICBVU0hPUlQgIHVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlOyAgICAgICAKKyAgVUNIQVIgICB1Y1NwcmVhZFNwZWN0cnVtVHlwZTsgICAgICAgICAgIC8vQml0MT0wIERvd24gU3ByZWFkLD0xIENlbnRlciBTcHJlYWQuIEJpdDE9MSBFeHQuID0wIEludC4gT3RoZXJzOlRCRAorICBVQ0hBUiAgIHVjU3ByZWFkU3BlY3RydW1TdGVwOyAgICAgICAgICAgLy8KKyAgVUNIQVIgICB1Y0VuYWJsZTsgICAgICAgICAgICAgICAgICAgICAgIC8vQVRPTV9FTkFCTEUgb3IgQVRPTV9ESVNBQkxFCisgIFVDSEFSICAgdWNTcHJlYWRTcGVjdHJ1bURlbGF5OworICBVQ0hBUiAgIHVjU3ByZWFkU3BlY3RydW1SYW5nZTsKKyAgVUNIQVIgICB1Y1BhZGRpbmc7Cit9RU5BQkxFX0xWRFNfU1NfUEFSQU1FVEVSU19WMjsKIAotLyogVGhpcyBuZXcgc3RydWN0dXJlIGlzIGJhc2VkIG9uIEVOQUJMRV9MVkRTX1NTX1BBUkFNRVRFUlMgYnV0IGV4cGFuZHMgdG8gU1Mgb24gUFBMTCwgc28gb3RoZXIgZGV2aWNlcyBjYW4gdXNlIFNTLiAqLwotdHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9TUFJFQURfU1BFQ1RSVU1fT05fUFBMTCB7Ci0JVVNIT1JUIHVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlOwotCVVDSEFSIHVjU3ByZWFkU3BlY3RydW1UeXBlOwkvKiAgQml0MT0wIERvd24gU3ByZWFkLD0xIENlbnRlciBTcHJlYWQuIEJpdDE9MSBFeHQuID0wIEludC4gT3RoZXJzOlRCRCAqLwotCVVDSEFSIHVjU3ByZWFkU3BlY3RydW1TdGVwOwkvKiAgKi8KLQlVQ0hBUiB1Y0VuYWJsZTsJCS8qICBBVE9NX0VOQUJMRSBvciBBVE9NX0RJU0FCTEUgKi8KLQlVQ0hBUiB1Y1NwcmVhZFNwZWN0cnVtRGVsYXk7Ci0JVUNIQVIgdWNTcHJlYWRTcGVjdHJ1bVJhbmdlOwotCVVDSEFSIHVjUHBsbDsJCS8qICBBVE9NX1BQTEwxL0FUT01fUFBMTDIgKi8KLX0gRU5BQkxFX1NQUkVBRF9TUEVDVFJVTV9PTl9QUExMOworLy9UaGlzIG5ldyBzdHJ1Y3R1cmUgaXMgYmFzZWQgb24gRU5BQkxFX0xWRFNfU1NfUEFSQU1FVEVSUyBidXQgZXhwYW5kcyB0byBTUyBvbiBQUExMLCBzbyBvdGhlciBkZXZpY2VzIGNhbiB1c2UgU1MuCit0eXBlZGVmIHN0cnVjdAlfRU5BQkxFX1NQUkVBRF9TUEVDVFJVTV9PTl9QUExMCit7CisgIFVTSE9SVCAgdXNTcHJlYWRTcGVjdHJ1bVBlcmNlbnRhZ2U7CisgIFVDSEFSICAgdWNTcHJlYWRTcGVjdHJ1bVR5cGU7ICAgICAgICAgICAvLyBCaXQxPTAgRG93biBTcHJlYWQsPTEgQ2VudGVyIFNwcmVhZC4gQml0MT0xIEV4dC4gPTAgSW50LiBPdGhlcnM6VEJECisgIFVDSEFSICAgdWNTcHJlYWRTcGVjdHJ1bVN0ZXA7ICAgICAgICAgICAvLworICBVQ0hBUiAgIHVjRW5hYmxlOyAgICAgICAgICAgICAgICAgICAgICAgLy8gQVRPTV9FTkFCTEUgb3IgQVRPTV9ESVNBQkxFCisgIFVDSEFSICAgdWNTcHJlYWRTcGVjdHJ1bURlbGF5OworICBVQ0hBUiAgIHVjU3ByZWFkU3BlY3RydW1SYW5nZTsKKyAgVUNIQVIgICB1Y1BwbGw7CQkJCQkJCQkJCQkJICAvLyBBVE9NX1BQTEwxL0FUT01fUFBMTDIKK31FTkFCTEVfU1BSRUFEX1NQRUNUUlVNX09OX1BQTEw7CisKK3R5cGVkZWYgc3RydWN0IF9FTkFCTEVfU1BSRUFEX1NQRUNUUlVNX09OX1BQTExfVjIKK3sKKyAgVVNIT1JUICB1c1NwcmVhZFNwZWN0cnVtUGVyY2VudGFnZTsKKyAgVUNIQVIgICB1Y1NwcmVhZFNwZWN0cnVtVHlwZTsJICAgICAgICAvLyBCaXRbMF06IDAtRG93biBTcHJlYWQsMS1DZW50ZXIgU3ByZWFkLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCaXRbMV06IDEtRXh0LiAwLUludC4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQml0WzM6Ml06ID0wIFAxUExMID0xIFAyUExMID0yIERDUExMCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQml0c1s3OjRdIHJlc2VydmVkCisgIFVDSEFSICAgdWNFbmFibGU7CSAgICAgICAgICAgICAgICAgICAgLy8gQVRPTV9FTkFCTEUgb3IgQVRPTV9ESVNBQkxFCisgIFVTSE9SVCAgdXNTcHJlYWRTcGVjdHJ1bUFtb3VudDsgICAgICAJLy8gSW5jbHVkZXMgU1NfQU1PVU5UX0ZCRElWWzc6MF0gYW5kIFNTX0FNT1VOVF9ORlJBQ19TTElQWzExOjhdICAgIAorICBVU0hPUlQgIHVzU3ByZWFkU3BlY3RydW1TdGVwOwkgICAgICAgIC8vIFNTX1NURVBfU0laRV9EU0ZSQUMKK31FTkFCTEVfU1BSRUFEX1NQRUNUUlVNX09OX1BQTExfVjI7CisKKyNkZWZpbmUgQVRPTV9QUExMX1NTX1RZUEVfVjJfRE9XTl9TUFJFQUQgICAgICAweDAwCisjZGVmaW5lIEFUT01fUFBMTF9TU19UWVBFX1YyX0NFTlRSRV9TUFJFQUQgICAgMHgwMQorI2RlZmluZSBBVE9NX1BQTExfU1NfVFlQRV9WMl9FWFRfU1BSRUFEICAgICAgIDB4MDIKKyNkZWZpbmUgQVRPTV9QUExMX1NTX1RZUEVfVjJfUFBMTF9TRUxfTUFTSyAgICAweDBjCisjZGVmaW5lIEFUT01fUFBMTF9TU19UWVBFX1YyX1AxUExMICAgICAgICAgICAgMHgwMAorI2RlZmluZSBBVE9NX1BQTExfU1NfVFlQRV9WMl9QMlBMTCAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgQVRPTV9QUExMX1NTX1RZUEVfVjJfRENQTEwgICAgICAgICAgICAweDA4CisjZGVmaW5lIEFUT01fUFBMTF9TU19BTU9VTlRfVjJfRkJESVZfTUFTSyAgICAgMHgwMEZGCisjZGVmaW5lIEFUT01fUFBMTF9TU19BTU9VTlRfVjJfRkJESVZfU0hJRlQgICAgMAorI2RlZmluZSBBVE9NX1BQTExfU1NfQU1PVU5UX1YyX05GUkFDX01BU0sgICAgIDB4MEYwMAorI2RlZmluZSBBVE9NX1BQTExfU1NfQU1PVU5UX1YyX05GUkFDX1NISUZUICAgIDgKIAogI2RlZmluZSBFTkFCTEVfU1BSRUFEX1NQRUNUUlVNX09OX1BQTExfUFNfQUxMT0NBVElPTiAgRU5BQkxFX1NQUkVBRF9TUEVDVFJVTV9PTl9QUExMCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdHlwZWRlZiBzdHJ1Y3QgX1NFVF9QSVhFTF9DTE9DS19QU19BTExPQ0FUSU9OIHsKLQlQSVhFTF9DTE9DS19QQVJBTUVURVJTIHNQQ0xLSW5wdXQ7Ci0JRU5BQkxFX1NQUkVBRF9TUEVDVFJVTV9PTl9QUExMIHNSZXNlcnZlZDsJLyogQ2FsbGVyIGRvZXNuJ3QgbmVlZCB0byBpbml0IHRoaXMgcG9ydGlvbiAqLwotfSBTRVRfUElYRUxfQ0xPQ0tfUFNfQUxMT0NBVElPTjsKK3R5cGVkZWYgc3RydWN0IF9TRVRfUElYRUxfQ0xPQ0tfUFNfQUxMT0NBVElPTgoreworICBQSVhFTF9DTE9DS19QQVJBTUVURVJTIHNQQ0xLSW5wdXQ7CisgIEVOQUJMRV9TUFJFQURfU1BFQ1RSVU1fT05fUFBMTCBzUmVzZXJ2ZWQ7Ly9DYWxsZXIgZG9lc24ndCBuZWVkIHRvIGluaXQgdGhpcyBwb3J0aW9uIAorfVNFVF9QSVhFTF9DTE9DS19QU19BTExPQ0FUSU9OOwogCiAjZGVmaW5lIEVOQUJMRV9WR0FfUkVOREVSX1BTX0FMTE9DQVRJT04gICBTRVRfUElYRUxfQ0xPQ0tfUFNfQUxMT0NBVElPTgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgIyMjICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9NRU1PUllfVFJBSU5JTkdfUEFSQU1FVEVSUyB7Ci0JVUxPTkcgdWxUYXJnZXRNZW1vcnlDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotfSBNRU1PUllfVFJBSU5JTkdfUEFSQU1FVEVSUzsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZXMgdXNlZCBieSAjIyMKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0CV9NRU1PUllfVFJBSU5JTkdfUEFSQU1FVEVSUworeworICBVTE9ORyB1bFRhcmdldE1lbW9yeUNsb2NrOyAgICAgICAgICAvL0luIDEwS2h6IHVuaXQKK31NRU1PUllfVFJBSU5JTkdfUEFSQU1FVEVSUzsKICNkZWZpbmUgTUVNT1JZX1RSQUlOSU5HX1BTX0FMTE9DQVRJT04gTUVNT1JZX1RSQUlOSU5HX1BBUkFNRVRFUlMKIAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKkxWRFMgYW5kIG90aGVyIGVuY29kZXIgY29tbWFuZCB0YWJsZSBkZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgTFZEU0VuY29kZXJDb250cm9sVGFibGUgICAoQmVmb3JlIERDRTMwKSAqLwotLyogICAgICAgICAgICAgICAgICAgICBMVlRNQUVuY29kZXJDb250cm9sVGFibGUgIChCZWZvcmUgRENFMzApICovCi0vKiAgICAgICAgICAgICAgICAgICAgIFRNRFNBRW5jb2RlckNvbnRyb2xUYWJsZSAgKEJlZm9yZSBEQ0UzMCkgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0xWRFNfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMgewotCVVTSE9SVCB1c1BpeGVsQ2xvY2s7CS8qICBpbiAxMEtIejsgZm9yIGJpb3MgY29udmVuaWVudCAqLwotCVVDSEFSIHVjTWlzYzsJCS8qICBiaXQwPTA6IEVuYWJsZSBzaW5nbGUgbGluayAqLwotCS8qICAgICAgPTE6IEVuYWJsZSBkdWFsIGxpbmsgKi8KLQkvKiAgQml0MT0wOiA2NjZSR0IgKi8KLQkvKiAgICAgID0xOiA4ODhSR0IgKi8KLQlVQ0hBUiB1Y0FjdGlvbjsJCS8qICAwOiB0dXJuIG9mZiBlbmNvZGVyICovCi0JLyogIDE6IHNldHVwIGFuZCB0dXJuIG9uIGVuY29kZXIgKi8KLX0gTFZEU19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSUzsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGJ5IExWRFNFbmNvZGVyQ29udHJvbFRhYmxlICAgKEJlZm9yZSBEQ0UzMCkKKy8vICAgICAgICAgICAgICAgICAgICBMVlRNQUVuY29kZXJDb250cm9sVGFibGUgIChCZWZvcmUgRENFMzApCisvLyAgICAgICAgICAgICAgICAgICAgVE1EU0FFbmNvZGVyQ29udHJvbFRhYmxlICAoQmVmb3JlIERDRTMwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQordHlwZWRlZiBzdHJ1Y3QgX0xWRFNfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMKK3sKKyAgVVNIT1JUIHVzUGl4ZWxDbG9jazsgIC8vIGluIDEwS0h6OyBmb3IgYmlvcyBjb252ZW5pZW50CisgIFVDSEFSICB1Y01pc2M7ICAgICAgICAvLyBiaXQwPTA6IEVuYWJsZSBzaW5nbGUgbGluaworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgID0xOiBFbmFibGUgZHVhbCBsaW5rCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBCaXQxPTA6IDY2NlJHQgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgID0xOiA4ODhSR0IKKyAgVUNIQVIgIHVjQWN0aW9uOyAgICAgIC8vIDA6IHR1cm4gb2ZmIGVuY29kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIDE6IHNldHVwIGFuZCB0dXJuIG9uIGVuY29kZXIKK31MVkRTX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTOwogCiAjZGVmaW5lIExWRFNfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04gIExWRFNfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMKLQorICAgCiAjZGVmaW5lIFRNRFMxX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTICAgIExWRFNfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMKICNkZWZpbmUgVE1EUzFfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04gVE1EUzFfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMKIAogI2RlZmluZSBUTURTMl9FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSUyAgICBUTURTMV9FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSUwogI2RlZmluZSBUTURTMl9FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTiBUTURTMl9FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSUwogCi0vKiB1Y1RhYmxlRm9ybWF0UmV2aXNpb249MSx1Y1RhYmxlQ29udGVudFJldmlzaW9uPTIgKi8KLXR5cGVkZWYgc3RydWN0IF9MVkRTX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YyIHsKLQlVU0hPUlQgdXNQaXhlbENsb2NrOwkvKiAgaW4gMTBLSHo7IGZvciBiaW9zIGNvbnZlbmllbnQgKi8KLQlVQ0hBUiB1Y01pc2M7CQkvKiAgc2VlIFBBTkVMX0VOQ09ERVJfTUlTQ194eCBkZWZpbml0aW9ucyBiZWxvdyAqLwotCVVDSEFSIHVjQWN0aW9uOwkJLyogIDA6IHR1cm4gb2ZmIGVuY29kZXIgKi8KLQkvKiAgMTogc2V0dXAgYW5kIHR1cm4gb24gZW5jb2RlciAqLwotCVVDSEFSIHVjVHJ1bmNhdGU7CS8qICBiaXQwPTA6IERpc2FibGUgdHJ1bmNhdGUgKi8KLQkvKiAgICAgID0xOiBFbmFibGUgdHJ1bmNhdGUgKi8KLQkvKiAgYml0ND0wOiA2NjZSR0IgKi8KLQkvKiAgICAgID0xOiA4ODhSR0IgKi8KLQlVQ0hBUiB1Y1NwYXRpYWw7CS8qICBiaXQwPTA6IERpc2FibGUgc3BhdGlhbCBkaXRoZXJpbmcgKi8KLQkvKiAgICAgID0xOiBFbmFibGUgc3BhdGlhbCBkaXRoZXJpbmcgKi8KLQkvKiAgYml0ND0wOiA2NjZSR0IgKi8KLQkvKiAgICAgID0xOiA4ODhSR0IgKi8KLQlVQ0hBUiB1Y1RlbXBvcmFsOwkvKiAgYml0MD0wOiBEaXNhYmxlIHRlbXBvcmFsIGRpdGhlcmluZyAqLwotCS8qICAgICAgPTE6IEVuYWJsZSB0ZW1wb3JhbCBkaXRoZXJpbmcgKi8KLQkvKiAgYml0ND0wOiA2NjZSR0IgKi8KLQkvKiAgICAgID0xOiA4ODhSR0IgKi8KLQkvKiAgYml0NT0wOiBHcmF5IGxldmVsIDIgKi8KLQkvKiAgICAgID0xOiBHcmF5IGxldmVsIDQgKi8KLQlVQ0hBUiB1Y0ZSQzsJCS8qICBiaXQ0PTA6IDI1RlJDX1NFTCBwYXR0ZXJuIEUgKi8KLQkvKiAgICAgID0xOiAyNUZSQ19TRUwgcGF0dGVybiBGICovCi0JLyogIGJpdDY6NT0wOiA1MEZSQ19TRUwgcGF0dGVybiBBICovCi0JLyogICAgICAgID0xOiA1MEZSQ19TRUwgcGF0dGVybiBCICovCi0JLyogICAgICAgID0yOiA1MEZSQ19TRUwgcGF0dGVybiBDICovCi0JLyogICAgICAgID0zOiA1MEZSQ19TRUwgcGF0dGVybiBEICovCi0JLyogIGJpdDc9MDogNzVGUkNfU0VMIHBhdHRlcm4gRSAqLwotCS8qICAgICAgPTE6IDc1RlJDX1NFTCBwYXR0ZXJuIEYgKi8KLX0gTFZEU19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMjsKKworLy91Y1RhYmxlRm9ybWF0UmV2aXNpb249MSx1Y1RhYmxlQ29udGVudFJldmlzaW9uPTIKK3R5cGVkZWYgc3RydWN0IF9MVkRTX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YyCit7CisgIFVTSE9SVCB1c1BpeGVsQ2xvY2s7ICAvLyBpbiAxMEtIejsgZm9yIGJpb3MgY29udmVuaWVudAorICBVQ0hBUiAgdWNNaXNjOyAgICAgICAgLy8gc2VlIFBBTkVMX0VOQ09ERVJfTUlTQ194eCBkZWZpbnRpb25zIGJlbG93CisgIFVDSEFSICB1Y0FjdGlvbjsgICAgICAvLyAwOiB0dXJuIG9mZiBlbmNvZGVyCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAxOiBzZXR1cCBhbmQgdHVybiBvbiBlbmNvZGVyCisgIFVDSEFSICB1Y1RydW5jYXRlOyAgICAvLyBiaXQwPTA6IERpc2FibGUgdHJ1bmNhdGUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICA9MTogRW5hYmxlIHRydW5jYXRlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXQ0PTA6IDY2NlJHQgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgID0xOiA4ODhSR0IKKyAgVUNIQVIgIHVjU3BhdGlhbDsgICAgIC8vIGJpdDA9MDogRGlzYWJsZSBzcGF0aWFsIGRpdGhlcmluZworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgID0xOiBFbmFibGUgc3BhdGlhbCBkaXRoZXJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdDQ9MDogNjY2UkdCCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgPTE6IDg4OFJHQgorICBVQ0hBUiAgdWNUZW1wb3JhbDsgICAgLy8gYml0MD0wOiBEaXNhYmxlIHRlbXBvcmFsIGRpdGhlcmluZworICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgID0xOiBFbmFibGUgdGVtcG9yYWwgZGl0aGVyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXQ0PTA6IDY2NlJHQgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgID0xOiA4ODhSR0IKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdDU9MDogR3JheSBsZXZlbCAyCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgPTE6IEdyYXkgbGV2ZWwgNAorICBVQ0hBUiAgdWNGUkM7ICAgICAgICAgLy8gYml0ND0wOiAyNUZSQ19TRUwgcGF0dGVybiBFCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgPTE6IDI1RlJDX1NFTCBwYXR0ZXJuIEYKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJpdDY6NT0wOiA1MEZSQ19TRUwgcGF0dGVybiBBCisgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICA9MTogNTBGUkNfU0VMIHBhdHRlcm4gQgorICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgPTI6IDUwRlJDX1NFTCBwYXR0ZXJuIEMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgID0zOiA1MEZSQ19TRUwgcGF0dGVybiBECisgICAgICAgICAgICAgICAgICAgICAgICAvLyBiaXQ3PTA6IDc1RlJDX1NFTCBwYXR0ZXJuIEUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICA9MTogNzVGUkNfU0VMIHBhdHRlcm4gRgorfUxWRFNfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjI7CiAKICNkZWZpbmUgTFZEU19FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTl9WMiAgTFZEU19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMgotCisgICAKICNkZWZpbmUgVE1EUzFfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjIgICAgTFZEU19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMgogI2RlZmluZSBUTURTMV9FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTl9WMiBUTURTMV9FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMgotCisgIAogI2RlZmluZSBUTURTMl9FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMiAgICBUTURTMV9FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMgogI2RlZmluZSBUTURTMl9FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTl9WMiBUTURTMl9FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMgogCkBAIC0xMTg1LDM4ICsxNTM2LDQyIEBACiAjZGVmaW5lIFRNRFMyX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YzICAgIExWRFNfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjMKICNkZWZpbmUgVE1EUzJfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT05fVjMgVE1EUzJfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjMKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlcyB1c2VkIGJ5ICMjIyAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfRU5BQkxFX0VYVEVSTkFMX1RNRFNfRU5DT0RFUl9QQVJBTUVURVJTIHsKLQlVQ0hBUiB1Y0VuYWJsZTsJCS8qICBFbmFibGUgb3IgRGlzYWJsZSBFeHRlcm5hbCBUTURTIGVuY29kZXIgKi8KLQlVQ0hBUiB1Y01pc2M7CQkvKiAgQml0MD0wOkVuYWJsZSBTaW5nbGUgbGluazs9MTpFbmFibGUgRHVhbCBsaW5rO0JpdDEgez0wOjY2NlJHQiwgPTE6ODg4UkdCfSAqLwotCVVDSEFSIHVjUGFkZGluZ1syXTsKLX0gRU5BQkxFX0VYVEVSTkFMX1RNRFNfRU5DT0RFUl9QQVJBTUVURVJTOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGJ5ICMjIworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQordHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9FWFRFUk5BTF9UTURTX0VOQ09ERVJfUEFSQU1FVEVSUworeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgVUNIQVIgICAgdWNFbmFibGU7ICAgICAgICAgICAgLy8gRW5hYmxlIG9yIERpc2FibGUgRXh0ZXJuYWwgVE1EUyBlbmNvZGVyCisgIFVDSEFSICAgIHVjTWlzYzsgICAgICAgICAgICAgIC8vIEJpdDA9MDpFbmFibGUgU2luZ2xlIGxpbms7PTE6RW5hYmxlIER1YWwgbGluaztCaXQxIHs9MDo2NjZSR0IsID0xOjg4OFJHQn0KKyAgVUNIQVIgICAgdWNQYWRkaW5nWzJdOworfUVOQUJMRV9FWFRFUk5BTF9UTURTX0VOQ09ERVJfUEFSQU1FVEVSUzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9FWFRFUk5BTF9UTURTX0VOQ09ERVJfUFNfQUxMT0NBVElPTiB7Ci0JRU5BQkxFX0VYVEVSTkFMX1RNRFNfRU5DT0RFUl9QQVJBTUVURVJTIHNYVG1kc0VuY29kZXI7Ci0JV1JJVEVfT05FX0JZVEVfSFdfSTJDX0RBVEFfUFNfQUxMT0NBVElPTiBzUmVzZXJ2ZWQ7CS8qIENhbGxlciBkb2Vzbid0IG5lZWQgdG8gaW5pdCB0aGlzIHBvcnRpb24gKi8KLX0gRU5BQkxFX0VYVEVSTkFMX1RNRFNfRU5DT0RFUl9QU19BTExPQ0FUSU9OOwordHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9FWFRFUk5BTF9UTURTX0VOQ09ERVJfUFNfQUxMT0NBVElPTgoreyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgRU5BQkxFX0VYVEVSTkFMX1RNRFNfRU5DT0RFUl9QQVJBTUVURVJTICAgIHNYVG1kc0VuY29kZXI7CisgIFdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BTX0FMTE9DQVRJT04gICBzUmVzZXJ2ZWQ7ICAgICAvL0NhbGxlciBkb2Vzbid0IG5lZWQgdG8gaW5pdCB0aGlzIHBvcnRpb24KK31FTkFCTEVfRVhURVJOQUxfVE1EU19FTkNPREVSX1BTX0FMTE9DQVRJT047CiAKICNkZWZpbmUgRU5BQkxFX0VYVEVSTkFMX1RNRFNfRU5DT0RFUl9QQVJBTUVURVJTX1YyICBMVkRTX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YyCiAKLXR5cGVkZWYgc3RydWN0IF9FTkFCTEVfRVhURVJOQUxfVE1EU19FTkNPREVSX1BTX0FMTE9DQVRJT05fVjIgewotCUVOQUJMRV9FWFRFUk5BTF9UTURTX0VOQ09ERVJfUEFSQU1FVEVSU19WMiBzWFRtZHNFbmNvZGVyOwotCVdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BTX0FMTE9DQVRJT04gc1Jlc2VydmVkOwkvKiBDYWxsZXIgZG9lc24ndCBuZWVkIHRvIGluaXQgdGhpcyBwb3J0aW9uICovCi19IEVOQUJMRV9FWFRFUk5BTF9UTURTX0VOQ09ERVJfUFNfQUxMT0NBVElPTl9WMjsKK3R5cGVkZWYgc3RydWN0IF9FTkFCTEVfRVhURVJOQUxfVE1EU19FTkNPREVSX1BTX0FMTE9DQVRJT05fVjIKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIEVOQUJMRV9FWFRFUk5BTF9UTURTX0VOQ09ERVJfUEFSQU1FVEVSU19WMiAgICBzWFRtZHNFbmNvZGVyOworICBXUklURV9PTkVfQllURV9IV19JMkNfREFUQV9QU19BTExPQ0FUSU9OICAgICAgc1Jlc2VydmVkOyAgICAgLy9DYWxsZXIgZG9lc24ndCBuZWVkIHRvIGluaXQgdGhpcyBwb3J0aW9uCit9RU5BQkxFX0VYVEVSTkFMX1RNRFNfRU5DT0RFUl9QU19BTExPQ0FUSU9OX1YyOwogCi10eXBlZGVmIHN0cnVjdCBfRVhURVJOQUxfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04gewotCURJR19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSUyBzRGlnRW5jb2RlcjsKLQlXUklURV9PTkVfQllURV9IV19JMkNfREFUQV9QU19BTExPQ0FUSU9OIHNSZXNlcnZlZDsKLX0gRVhURVJOQUxfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT047Cit0eXBlZGVmIHN0cnVjdCBfRVhURVJOQUxfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04KK3sKKyAgRElHX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTICAgICAgICAgICAgc0RpZ0VuY29kZXI7CisgIFdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BTX0FMTE9DQVRJT04gc1Jlc2VydmVkOworfUVYVEVSTkFMX0VOQ09ERVJfQ09OVFJPTF9QU19BTExPQ0FUSU9OOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgRFZPRW5jb2RlckNvbnRyb2xUYWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiB1Y1RhYmxlRm9ybWF0UmV2aXNpb249MSx1Y1RhYmxlQ29udGVudFJldmlzaW9uPTMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZXMgdXNlZCBieSBEVk9FbmNvZGVyQ29udHJvbFRhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvL3VjVGFibGVGb3JtYXRSZXZpc2lvbj0xLHVjVGFibGVDb250ZW50UmV2aXNpb249MwogCi0vKiB1Y0RWT0NvbmZpZzogKi8KKy8vdWNEVk9Db25maWc6CiAjZGVmaW5lIERWT19FTkNPREVSX0NPTkZJR19SQVRFX1NFTAkJCQkJCQkweDAxCiAjZGVmaW5lIERWT19FTkNPREVSX0NPTkZJR19ERFJfU1BFRUQJCQkJCQkweDAwCiAjZGVmaW5lIERWT19FTkNPREVSX0NPTkZJR19TRFJfU1BFRUQJCQkJCQkweDAxCkBAIC0xMjI1LDIxICsxNTgwLDIyIEBACiAjZGVmaW5lIERWT19FTkNPREVSX0NPTkZJR19VUFBFUjEyQklUCQkJCQkJMHgwNAogI2RlZmluZSBEVk9fRU5DT0RFUl9DT05GSUdfMjRCSVQJCQkJCQkJCTB4MDgKIAotdHlwZWRlZiBzdHJ1Y3QgX0RWT19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19WMyB7Ci0JVVNIT1JUIHVzUGl4ZWxDbG9jazsKLQlVQ0hBUiB1Y0RWT0NvbmZpZzsKLQlVQ0hBUiB1Y0FjdGlvbjsJCS8qIEFUT01fRU5BQkxFL0FUT01fRElTQUJMRS9BVE9NX0hQRF9JTklUICovCi0JVUNIQVIgdWNSZXNldmVkWzRdOwotfSBEVk9fRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjM7Cit0eXBlZGVmIHN0cnVjdCBfRFZPX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YzCit7CisgIFVTSE9SVCB1c1BpeGVsQ2xvY2s7IAorICBVQ0hBUiAgdWNEVk9Db25maWc7CisgIFVDSEFSICB1Y0FjdGlvbjsJCQkJCQkJCQkJCQkJCS8vQVRPTV9FTkFCTEUvQVRPTV9ESVNBQkxFL0FUT01fSFBEX0lOSVQKKyAgVUNIQVIgIHVjUmVzZXZlZFs0XTsKK31EVk9fRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjM7CiAjZGVmaW5lIERWT19FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTl9WMwlEVk9fRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjMKIAotLyogdWNUYWJsZUZvcm1hdFJldmlzaW9uPTEgKi8KLS8qIHVjVGFibGVDb250ZW50UmV2aXNpb249MyBzdHJ1Y3R1cmUgaXMgbm90IGNoYW5nZWQgYnV0IHVzTWlzYyBhZGQgYml0IDEgYXMgYW5vdGhlciBpbnB1dCBmb3IgKi8KLS8qICBiaXQxPTA6IG5vbi1jb2hlcmVudCBtb2RlICovCi0vKiAgICAgID0xOiBjb2hlcmVudCBtb2RlICovCisvL3VjVGFibGVGb3JtYXRSZXZpc2lvbj0xCisvL3VjVGFibGVDb250ZW50UmV2aXNpb249MyBzdHJ1Y3R1cmUgaXMgbm90IGNoYW5nZWQgYnV0IHVzTWlzYyBhZGQgYml0IDEgYXMgYW5vdGhlciBpbnB1dCBmb3IgCisvLyBiaXQxPTA6IG5vbi1jb2hlcmVudCBtb2RlCisvLyAgICAgPTE6IGNvaGVyZW50IG1vZGUKIAotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiBPbmx5IGNoYW5nZSBpcyBoZXJlIG5leHQgdGltZSB3aGVuIGNoYW5naW5nIGVuY29kZXIgcGFyYW1ldGVyIGRlZmluaXRpb25zIGFnYWluISAqLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vT25seSBjaGFuZ2UgaXMgaGVyZSBuZXh0IHRpbWUgd2hlbiBjaGFuZ2luZyBlbmNvZGVyIHBhcmFtZXRlciBkZWZpbml0aW9ucyBhZ2FpbiEKICNkZWZpbmUgTFZEU19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19MQVNUICAgICBMVkRTX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YzCiAjZGVmaW5lIExWRFNfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT05fTEFTVCAgTFZEU19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19MQVNUCiAKQEAgLTEyNTIsNyArMTYwOCw3IEBACiAjZGVmaW5lIERWT19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSU19MQVNUICAgICAgRFZPX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTCiAjZGVmaW5lIERWT19FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTl9MQVNUICAgRFZPX0VOQ09ERVJfQ09OVFJPTF9QU19BTExPQ0FUSU9OCiAKLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICNkZWZpbmUgUEFORUxfRU5DT0RFUl9NSVNDX0RVQUwgICAgICAgICAgICAgICAgMHgwMQogI2RlZmluZSBQQU5FTF9FTkNPREVSX01JU0NfQ09IRVJFTlQgICAgICAgICAgICAweDAyCiAjZGVmaW5lCVBBTkVMX0VOQ09ERVJfTUlTQ19UTURTX0xJTktCCQkJCQkgMHgwNApAQCAtMTI4MSwxNTkgKzE2MzcsMTU5IEBACiAjZGVmaW5lIFBBTkVMX0VOQ09ERVJfNzVGUkNfRSAgICAgICAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgUEFORUxfRU5DT0RFUl83NUZSQ19GICAgICAgICAgICAgICAgICAgMHg4MAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgYnkgU2V0Vm9sdGFnZVRhYmxlICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZXMgdXNlZCBieSBTZXRWb2x0YWdlVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKICNkZWZpbmUgU0VUX1ZPTFRBR0VfVFlQRV9BU0lDX1ZEREMgICAgICAgICAgICAgMQogI2RlZmluZSBTRVRfVk9MVEFHRV9UWVBFX0FTSUNfTVZEREMgICAgICAgICAgICAyCiAjZGVmaW5lIFNFVF9WT0xUQUdFX1RZUEVfQVNJQ19NVkREUSAgICAgICAgICAgIDMKICNkZWZpbmUgU0VUX1ZPTFRBR0VfVFlQRV9BU0lDX1ZERENJICAgICAgICAgICAgNAogI2RlZmluZSBTRVRfVk9MVEFHRV9JTklUX01PREUgICAgICAgICAgICAgICAgICA1Ci0jZGVmaW5lIFNFVF9WT0xUQUdFX0dFVF9NQVhfVk9MVEFHRSAgICAgICAgICAgIDYJLyogR2V0cyB0aGUgTWF4LiB2b2x0YWdlIGZvciB0aGUgc29sZGVyZWQgQXNpYyAqLworI2RlZmluZSBTRVRfVk9MVEFHRV9HRVRfTUFYX1ZPTFRBR0UgICAgICAgICAgICA2CQkJCQkvL0dldHMgdGhlIE1heC4gdm9sdGFnZSBmb3IgdGhlIHNvbGRlcmVkIEFzaWMKIAogI2RlZmluZSBTRVRfQVNJQ19WT0xUQUdFX01PREVfQUxMX1NPVVJDRSAgICAgICAweDEKICNkZWZpbmUgU0VUX0FTSUNfVk9MVEFHRV9NT0RFX1NPVVJDRV9BICAgICAgICAgMHgyCiAjZGVmaW5lIFNFVF9BU0lDX1ZPTFRBR0VfTU9ERV9TT1VSQ0VfQiAgICAgICAgIDB4NAogCiAjZGVmaW5lCVNFVF9BU0lDX1ZPTFRBR0VfTU9ERV9TRVRfVk9MVEFHRSAgICAgIDB4MAotI2RlZmluZQlTRVRfQVNJQ19WT0xUQUdFX01PREVfR0VUX0dQSU9WQUwgICAgICAweDEKKyNkZWZpbmUJU0VUX0FTSUNfVk9MVEFHRV9NT0RFX0dFVF9HUElPVkFMICAgICAgMHgxCQogI2RlZmluZQlTRVRfQVNJQ19WT0xUQUdFX01PREVfR0VUX0dQSU9NQVNLICAgICAweDIKIAotdHlwZWRlZiBzdHJ1Y3QgX1NFVF9WT0xUQUdFX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjVm9sdGFnZVR5cGU7CS8qICBUbyB0ZWxsIHdoaWNoIHZvbHRhZ2UgdG8gc2V0IHVwLCBWRERDL01WRERDL01WRERRICovCi0JVUNIQVIgdWNWb2x0YWdlTW9kZTsJLyogIFRvIHNldCBhbGwsIHRvIHNldCBzb3VyY2UgQSBvciBzb3VyY2UgQiBvciAuLi4gKi8KLQlVQ0hBUiB1Y1ZvbHRhZ2VJbmRleDsJLyogIEFuIGluZGV4IHRvIHRlbGwgd2hpY2ggdm9sdGFnZSBsZXZlbCAqLwotCVVDSEFSIHVjUmVzZXJ2ZWQ7Ci19IFNFVF9WT0xUQUdFX1BBUkFNRVRFUlM7Cit0eXBlZGVmIHN0cnVjdAlfU0VUX1ZPTFRBR0VfUEFSQU1FVEVSUworeworICBVQ0hBUiAgICB1Y1ZvbHRhZ2VUeXBlOyAgICAgICAgICAgICAgIC8vIFRvIHRlbGwgd2hpY2ggdm9sdGFnZSB0byBzZXQgdXAsIFZEREMvTVZEREMvTVZERFEKKyAgVUNIQVIgICAgdWNWb2x0YWdlTW9kZTsgICAgICAgICAgICAgICAvLyBUbyBzZXQgYWxsLCB0byBzZXQgc291cmNlIEEgb3Igc291cmNlIEIgb3IgLi4uCisgIFVDSEFSICAgIHVjVm9sdGFnZUluZGV4OyAgICAgICAgICAgICAgLy8gQW4gaW5kZXggdG8gdGVsbCB3aGljaCB2b2x0YWdlIGxldmVsCisgIFVDSEFSICAgIHVjUmVzZXJ2ZWQ7ICAgICAgICAgIAorfVNFVF9WT0xUQUdFX1BBUkFNRVRFUlM7CiAKLXR5cGVkZWYgc3RydWN0IF9TRVRfVk9MVEFHRV9QQVJBTUVURVJTX1YyIHsKLQlVQ0hBUiB1Y1ZvbHRhZ2VUeXBlOwkvKiAgVG8gdGVsbCB3aGljaCB2b2x0YWdlIHRvIHNldCB1cCwgVkREQy9NVkREQy9NVkREUSAqLwotCVVDSEFSIHVjVm9sdGFnZU1vZGU7CS8qICBOb3QgdXNlZCwgbWF5YmUgdXNlIGZvciBzdGF0ZSBtYWNoaW5lIGZvciBkaWZmZXJlbiBwb3dlciBtb2RlICovCi0JVVNIT1JUIHVzVm9sdGFnZUxldmVsOwkvKiAgcmVhbCB2b2x0YWdlIGxldmVsICovCi19IFNFVF9WT0xUQUdFX1BBUkFNRVRFUlNfVjI7Cit0eXBlZGVmIHN0cnVjdAlfU0VUX1ZPTFRBR0VfUEFSQU1FVEVSU19WMgoreworICBVQ0hBUiAgICB1Y1ZvbHRhZ2VUeXBlOyAgICAgICAgICAgICAgIC8vIFRvIHRlbGwgd2hpY2ggdm9sdGFnZSB0byBzZXQgdXAsIFZEREMvTVZEREMvTVZERFEKKyAgVUNIQVIgICAgdWNWb2x0YWdlTW9kZTsgICAgICAgICAgICAgICAvLyBOb3QgdXNlZCwgbWF5YmUgdXNlIGZvciBzdGF0ZSBtYWNoaW5lIGZvciBkaWZmZXJlbiBwb3dlciBtb2RlCisgIFVTSE9SVCAgIHVzVm9sdGFnZUxldmVsOyAgICAgICAgICAgICAgLy8gcmVhbCB2b2x0YWdlIGxldmVsCit9U0VUX1ZPTFRBR0VfUEFSQU1FVEVSU19WMjsKIAotdHlwZWRlZiBzdHJ1Y3QgX1NFVF9WT0xUQUdFX1BTX0FMTE9DQVRJT04gewotCVNFVF9WT0xUQUdFX1BBUkFNRVRFUlMgc0FTSUNTZXRWb2x0YWdlOwotCVdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BTX0FMTE9DQVRJT04gc1Jlc2VydmVkOwotfSBTRVRfVk9MVEFHRV9QU19BTExPQ0FUSU9OOwordHlwZWRlZiBzdHJ1Y3QgX1NFVF9WT0xUQUdFX1BTX0FMTE9DQVRJT04KK3sKKyAgU0VUX1ZPTFRBR0VfUEFSQU1FVEVSUyBzQVNJQ1NldFZvbHRhZ2U7CisgIFdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BTX0FMTE9DQVRJT04gc1Jlc2VydmVkOworfVNFVF9WT0xUQUdFX1BTX0FMTE9DQVRJT047CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBieSBUVkVuY29kZXJDb250cm9sVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX1RWX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTIHsKLQlVU0hPUlQgdXNQaXhlbENsb2NrOwkvKiAgaW4gMTBLSHo7IGZvciBiaW9zIGNvbnZlbmllbnQgKi8KLQlVQ0hBUiB1Y1R2U3RhbmRhcmQ7CS8qICBTZWUgZGVmaW5pdGlvbiAiQVRPTV9UVl9OVFNDIC4uLiIgKi8KLQlVQ0hBUiB1Y0FjdGlvbjsJCS8qICAwOiB0dXJuIG9mZiBlbmNvZGVyICovCi0JLyogIDE6IHNldHVwIGFuZCB0dXJuIG9uIGVuY29kZXIgKi8KLX0gVFZfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmVzIHVzZWQgYnkgVFZFbmNvZGVyQ29udHJvbFRhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfVFZfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMKK3sKKyAgVVNIT1JUIHVzUGl4ZWxDbG9jazsgICAgICAgICAgICAgICAgLy8gaW4gMTBLSHo7IGZvciBiaW9zIGNvbnZlbmllbnQKKyAgVUNIQVIgIHVjVHZTdGFuZGFyZDsgICAgICAgICAgICAgICAgLy8gU2VlIGRlZmluaXRpb24gIkFUT01fVFZfTlRTQyAuLi4iCisgIFVDSEFSICB1Y0FjdGlvbjsgICAgICAgICAgICAgICAgICAgIC8vIDA6IHR1cm4gb2ZmIGVuY29kZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMTogc2V0dXAgYW5kIHR1cm4gb24gZW5jb2RlcgorfVRWX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTOwogCi10eXBlZGVmIHN0cnVjdCBfVFZfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04gewotCVRWX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTIHNUVkVuY29kZXI7Ci0JV1JJVEVfT05FX0JZVEVfSFdfSTJDX0RBVEFfUFNfQUxMT0NBVElPTiBzUmVzZXJ2ZWQ7CS8qICBEb24ndCBzZXQgdGhpcyBvbmUgKi8KLX0gVFZfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT047Cit0eXBlZGVmIHN0cnVjdCBfVFZfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04KK3sKKyAgVFZfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMgc1RWRW5jb2RlcjsgICAgICAgICAgCisgIFdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BTX0FMTE9DQVRJT04gICAgc1Jlc2VydmVkOyAvLyBEb24ndCBzZXQgdGhpcyBvbmUKK31UVl9FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTjsKIAotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09RGF0YSBUYWJsZSBQb3J0aW9uPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PURhdGEgVGFibGUgUG9ydGlvbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogCi0jaWZkZWYJVUVGSV9CVUlMRAotI2RlZmluZQlVVEVNUAlVU0hPUlQKLSNkZWZpbmUJVVNIT1JUCXZvaWQqCi0jZW5kaWYKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZSB1c2VkIGluIERhdGEubXRiCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9NQVNURVJfTElTVF9PRl9EQVRBX1RBQkxFUworeworICBVU0hPUlQgICAgICAgIFV0aWxpdHlQaXBlTGluZTsJICAgICAgICAvLyBPZmZlc3QgZm9yIHRoZSB1dGlsaXR5IHRvIGdldCBwYXJzZXIgaW5mbyxEb24ndCBjaGFuZ2UgdGhpcyBwb3NpdGlvbiEKKyAgVVNIT1JUICAgICAgICBNdWx0aW1lZGlhQ2FwYWJpbGl0eUluZm87IC8vIE9ubHkgdXNlZCBieSBNTSBMaWIsbGF0ZXN0IHZlcnNpb24gMS4xLCBub3QgY29uZmlndWFibGUgZnJvbSBCaW9zLCBuZWVkIHRvIGluY2x1ZGUgdGhlIHRhYmxlIHRvIGJ1aWxkIEJpb3MgCisgIFVTSE9SVCAgICAgICAgTXVsdGltZWRpYUNvbmZpZ0luZm87ICAgICAvLyBPbmx5IHVzZWQgYnkgTU0gTGliLGxhdGVzdCB2ZXJzaW9uIDIuMSwgbm90IGNvbmZpZ3VhYmxlIGZyb20gQmlvcywgbmVlZCB0byBpbmNsdWRlIHRoZSB0YWJsZSB0byBidWlsZCBCaW9zCisgIFVTSE9SVCAgICAgICAgU3RhbmRhcmRWRVNBX1RpbWluZzsgICAgICAvLyBPbmx5IHVzZWQgYnkgQmlvcworICBVU0hPUlQgICAgICAgIEZpcm13YXJlSW5mbzsgICAgICAgICAgICAgLy8gU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjQKKyAgVVNIT1JUICAgICAgICBEQUNfSW5mbzsgICAgICAgICAgICAgICAgIC8vIFdpbGwgYmUgb2Jzb2xldGUgZnJvbSBSNjAwCisgIFVTSE9SVCAgICAgICAgTFZEU19JbmZvOyAgICAgICAgICAgICAgICAvLyBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAKKyAgVVNIT1JUICAgICAgICBUTURTX0luZm87ICAgICAgICAgICAgICAgIC8vIFdpbGwgYmUgb2Jzb2xldGUgZnJvbSBSNjAwCisgIFVTSE9SVCAgICAgICAgQW5hbG9nVFZfSW5mbzsgICAgICAgICAgICAvLyBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAKKyAgVVNIT1JUICAgICAgICBTdXBwb3J0ZWREZXZpY2VzSW5mbzsgICAgIC8vIFdpbGwgYmUgb2Jzb2xldGUgZnJvbSBSNjAwCisgIFVTSE9SVCAgICAgICAgR1BJT19JMkNfSW5mbzsgICAgICAgICAgICAvLyBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMiB3aWxsIGJlIHVzZWQgZnJvbSBSNjAwICAgICAgICAgICAKKyAgVVNIT1JUICAgICAgICBWUkFNX1VzYWdlQnlGaXJtd2FyZTsgICAgIC8vIFNoYXJlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4zIHdpbGwgYmUgdXNlZCBmcm9tIFI2MDAKKyAgVVNIT1JUICAgICAgICBHUElPX1Bpbl9MVVQ7ICAgICAgICAgICAgIC8vIFNoYXJlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xCisgIFVTSE9SVCAgICAgICAgVkVTQV9Ub0ludGVybmFsTW9kZUxVVDsgICAvLyBPbmx5IHVzZWQgYnkgQmlvcworICBVU0hPUlQgICAgICAgIENvbXBvbmVudFZpZGVvSW5mbzsgICAgICAgLy8gU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAyLjEgd2lsbCBiZSB1c2VkIGZyb20gUjYwMAorICBVU0hPUlQgICAgICAgIFBvd2VyUGxheUluZm87ICAgICAgICAgICAgLy8gU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAyLjEsbmV3IGRlc2lnbiBmcm9tIFI2MDAKKyAgVVNIT1JUICAgICAgICBDb21wYXNzaW9uYXRlRGF0YTsgICAgICAgIC8vIFdpbGwgYmUgb2Jzb2xldGUgZnJvbSBSNjAwCisgIFVTSE9SVCAgICAgICAgU2F2ZVJlc3RvcmVJbmZvOyAgICAgICAgICAvLyBPbmx5IHVzZWQgYnkgQmlvcworICBVU0hPUlQgICAgICAgIFBQTExfU1NfSW5mbzsgICAgICAgICAgICAgLy8gU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjIsIHVzZWQgdG8gY2FsbCBTU19JbmZvLCBjaGFuZ2UgdG8gbmV3IG5hbWUgYmVjYXVzZSBvZiBpbnQgQVNJQyBTUyBpbmZvCisgIFVTSE9SVCAgICAgICAgT2VtSW5mbzsgICAgICAgICAgICAgICAgICAvLyBEZWZpbmVkIGFuZCB1c2VkIGJ5IGV4dGVybmFsIFNXLCBzaG91bGQgYmUgb2Jzb2xldGUgc29vbgorICBVU0hPUlQgICAgICAgIFhUTURTX0luZm87ICAgICAgICAgICAgICAgLy8gV2lsbCBiZSBvYnNvbGV0ZSBmcm9tIFI2MDAKKyAgVVNIT1JUICAgICAgICBNY2xrU1NfSW5mbzsgICAgICAgICAgICAgIC8vIFNoYXJlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xLCBvbmx5IGVuYWJsZWQgd2hlbiBleHQgU1MgY2hpcCBpcyB1c2VkCisgIFVTSE9SVCAgICAgICAgT2JqZWN0X0hlYWRlcjsgICAgICAgICAgICAvLyBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMQorICBVU0hPUlQgICAgICAgIEluZGlyZWN0SU9BY2Nlc3M7ICAgICAgICAgLy8gT25seSB1c2VkIGJ5IEJpb3MsdGhpcyB0YWJsZSBwb3NpdGlvbiBjYW4ndCBjaGFuZ2UgYXQgYWxsISEKKyAgVVNIT1JUICAgICAgICBNQ19Jbml0UGFyYW1ldGVyOyAgICAgICAgIC8vIE9ubHkgdXNlZCBieSBjb21tYW5kIHRhYmxlCisgIFVTSE9SVCAgICAgICAgQVNJQ19WRERDX0luZm87CQkJCQkJLy8gV2lsbCBiZSBvYnNvbGV0ZSBmcm9tIFI2MDAKKyAgVVNIT1JUICAgICAgICBBU0lDX0ludGVybmFsU1NfSW5mbzsJCQkvLyBOZXcgdGFiZWwgbmFtZSBmcm9tIFI2MDAsIHVzZWQgdG8gYmUgY2FsbGVkICJBU0lDX01WRERDX0luZm8iCisgIFVTSE9SVCAgICAgICAgVFZfVmlkZW9Nb2RlOwkJCQkJCQkvLyBPbmx5IHVzZWQgYnkgY29tbWFuZCB0YWJsZQorICBVU0hPUlQgICAgICAgIFZSQU1fSW5mbzsJCQkJCQkJCS8vIE9ubHkgdXNlZCBieSBjb21tYW5kIHRhYmxlLCBsYXRlc3QgdmVyc2lvbiAxLjMKKyAgVVNIT1JUICAgICAgICBNZW1vcnlUcmFpbmluZ0luZm87CQkJCS8vIFVzZWQgZm9yIFZCSU9TIGFuZCBEaWFnIHV0aWxpdHkgZm9yIG1lbW9yeSB0cmFpbmluZyBwdXJwb3NlIHNpbmNlIFI2MDAuIHRoZSBuZXcgdGFibGUgcmV2IHN0YXJ0IGZyb20gMi4xCisgIFVTSE9SVCAgICAgICAgSW50ZWdyYXRlZFN5c3RlbUluZm87CQkJLy8gU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cworICBVU0hPUlQgICAgICAgIEFTSUNfUHJvZmlsaW5nSW5mbzsJCQkJLy8gTmV3IHRhYmxlIG5hbWUgZnJvbSBSNjAwLCB1c2VkIHRvIGJlIGNhbGxlZCAiQVNJQ19WRERDSV9JbmZvIiBmb3IgcHJlLVI2MDAKKyAgVVNIT1JUICAgICAgICBWb2x0YWdlT2JqZWN0SW5mbzsJCQkJLy8gU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cywgbGF0ZXN0IHZlcnNpb24gMS4xCisJVVNIT1JUCQkJCVBvd2VyU291cmNlSW5mbzsJCQkJCS8vIFNoYXJlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsIGxhdGVzdCB2ZXJzb2luIDEuMQorfUFUT01fTUFTVEVSX0xJU1RfT0ZfREFUQV9UQUJMRVM7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZSB1c2VkIGluIERhdGEubXRiICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9BVE9NX01BU1RFUl9MSVNUX09GX0RBVEFfVEFCTEVTIHsKLQlVU0hPUlQgVXRpbGl0eVBpcGVMaW5lOwkvKiAgT2ZmZXN0IGZvciB0aGUgdXRpbGl0eSB0byBnZXQgcGFyc2VyIGluZm8sRG9uJ3QgY2hhbmdlIHRoaXMgcG9zaXRpb24hICovCi0JVVNIT1JUIE11bHRpbWVkaWFDYXBhYmlsaXR5SW5mbzsJLyogIE9ubHkgdXNlZCBieSBNTSBMaWIsbGF0ZXN0IHZlcnNpb24gMS4xLCBub3QgY29uZmlndWFibGUgZnJvbSBCaW9zLCBuZWVkIHRvIGluY2x1ZGUgdGhlIHRhYmxlIHRvIGJ1aWxkIEJpb3MgKi8KLQlVU0hPUlQgTXVsdGltZWRpYUNvbmZpZ0luZm87CS8qICBPbmx5IHVzZWQgYnkgTU0gTGliLGxhdGVzdCB2ZXJzaW9uIDIuMSwgbm90IGNvbmZpZ3VhYmxlIGZyb20gQmlvcywgbmVlZCB0byBpbmNsdWRlIHRoZSB0YWJsZSB0byBidWlsZCBCaW9zICovCi0JVVNIT1JUIFN0YW5kYXJkVkVTQV9UaW1pbmc7CS8qICBPbmx5IHVzZWQgYnkgQmlvcyAqLwotCVVTSE9SVCBGaXJtd2FyZUluZm87CS8qICBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuNCAqLwotCVVTSE9SVCBEQUNfSW5mbzsJLyogIFdpbGwgYmUgb2Jzb2xldGUgZnJvbSBSNjAwICovCi0JVVNIT1JUIExWRFNfSW5mbzsJLyogIFNoYXJlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsbGF0ZXN0IHZlcnNpb24gMS4xICovCi0JVVNIT1JUIFRNRFNfSW5mbzsJLyogIFdpbGwgYmUgb2Jzb2xldGUgZnJvbSBSNjAwICovCi0JVVNIT1JUIEFuYWxvZ1RWX0luZm87CS8qICBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBTdXBwb3J0ZWREZXZpY2VzSW5mbzsJLyogIFdpbGwgYmUgb2Jzb2xldGUgZnJvbSBSNjAwICovCi0JVVNIT1JUIEdQSU9fSTJDX0luZm87CS8qICBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMiB3aWxsIGJlIHVzZWQgZnJvbSBSNjAwICovCi0JVVNIT1JUIFZSQU1fVXNhZ2VCeUZpcm13YXJlOwkvKiAgU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjMgd2lsbCBiZSB1c2VkIGZyb20gUjYwMCAqLwotCVVTSE9SVCBHUElPX1Bpbl9MVVQ7CS8qICBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBWRVNBX1RvSW50ZXJuYWxNb2RlTFVUOwkvKiAgT25seSB1c2VkIGJ5IEJpb3MgKi8KLQlVU0hPUlQgQ29tcG9uZW50VmlkZW9JbmZvOwkvKiAgU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAyLjEgd2lsbCBiZSB1c2VkIGZyb20gUjYwMCAqLwotCVVTSE9SVCBQb3dlclBsYXlJbmZvOwkvKiAgU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAyLjEsbmV3IGRlc2lnbiBmcm9tIFI2MDAgKi8KLQlVU0hPUlQgQ29tcGFzc2lvbmF0ZURhdGE7CS8qICBXaWxsIGJlIG9ic29sZXRlIGZyb20gUjYwMCAqLwotCVVTSE9SVCBTYXZlUmVzdG9yZUluZm87CS8qICBPbmx5IHVzZWQgYnkgQmlvcyAqLwotCVVTSE9SVCBQUExMX1NTX0luZm87CS8qICBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMiwgdXNlZCB0byBjYWxsIFNTX0luZm8sIGNoYW5nZSB0byBuZXcgbmFtZSBiZWNhdXNlIG9mIGludCBBU0lDIFNTIGluZm8gKi8KLQlVU0hPUlQgT2VtSW5mbzsJCS8qICBEZWZpbmVkIGFuZCB1c2VkIGJ5IGV4dGVybmFsIFNXLCBzaG91bGQgYmUgb2Jzb2xldGUgc29vbiAqLwotCVVTSE9SVCBYVE1EU19JbmZvOwkvKiAgV2lsbCBiZSBvYnNvbGV0ZSBmcm9tIFI2MDAgKi8KLQlVU0hPUlQgTWNsa1NTX0luZm87CS8qICBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLGxhdGVzdCB2ZXJzaW9uIDEuMSwgb25seSBlbmFibGVkIHdoZW4gZXh0IFNTIGNoaXAgaXMgdXNlZCAqLwotCVVTSE9SVCBPYmplY3RfSGVhZGVyOwkvKiAgU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyxsYXRlc3QgdmVyc2lvbiAxLjEgKi8KLQlVU0hPUlQgSW5kaXJlY3RJT0FjY2VzczsJLyogIE9ubHkgdXNlZCBieSBCaW9zLHRoaXMgdGFibGUgcG9zaXRpb24gY2FuJ3QgY2hhbmdlIGF0IGFsbCEhICovCi0JVVNIT1JUIE1DX0luaXRQYXJhbWV0ZXI7CS8qICBPbmx5IHVzZWQgYnkgY29tbWFuZCB0YWJsZSAqLwotCVVTSE9SVCBBU0lDX1ZERENfSW5mbzsJLyogIFdpbGwgYmUgb2Jzb2xldGUgZnJvbSBSNjAwICovCi0JVVNIT1JUIEFTSUNfSW50ZXJuYWxTU19JbmZvOwkvKiAgTmV3IHRhYmVsIG5hbWUgZnJvbSBSNjAwLCB1c2VkIHRvIGJlIGNhbGxlZCAiQVNJQ19NVkREQ19JbmZvIiAqLwotCVVTSE9SVCBUVl9WaWRlb01vZGU7CS8qICBPbmx5IHVzZWQgYnkgY29tbWFuZCB0YWJsZSAqLwotCVVTSE9SVCBWUkFNX0luZm87CS8qICBPbmx5IHVzZWQgYnkgY29tbWFuZCB0YWJsZSwgbGF0ZXN0IHZlcnNpb24gMS4zICovCi0JVVNIT1JUIE1lbW9yeVRyYWluaW5nSW5mbzsJLyogIFVzZWQgZm9yIFZCSU9TIGFuZCBEaWFnIHV0aWxpdHkgZm9yIG1lbW9yeSB0cmFpbmluZyBwdXJwb3NlIHNpbmNlIFI2MDAuIHRoZSBuZXcgdGFibGUgcmV2IHN0YXJ0IGZyb20gMi4xICovCi0JVVNIT1JUIEludGVncmF0ZWRTeXN0ZW1JbmZvOwkvKiAgU2hhcmVkIGJ5IHZhcmlvdXMgU1cgY29tcG9uZW50cyAqLwotCVVTSE9SVCBBU0lDX1Byb2ZpbGluZ0luZm87CS8qICBOZXcgdGFibGUgbmFtZSBmcm9tIFI2MDAsIHVzZWQgdG8gYmUgY2FsbGVkICJBU0lDX1ZERENJX0luZm8iIGZvciBwcmUtUjYwMCAqLwotCVVTSE9SVCBWb2x0YWdlT2JqZWN0SW5mbzsJLyogIFNoYXJlZCBieSB2YXJpb3VzIFNXIGNvbXBvbmVudHMsIGxhdGVzdCB2ZXJzaW9uIDEuMSAqLwotCVVTSE9SVCBQb3dlclNvdXJjZUluZm87CS8qICBTaGFyZWQgYnkgdmFyaW91cyBTVyBjb21wb25lbnRzLCBsYXRlc3QgdmVyc29pbiAxLjEgKi8KLX0gQVRPTV9NQVNURVJfTElTVF9PRl9EQVRBX1RBQkxFUzsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX01BU1RFUl9EQVRBX1RBQkxFCit7IAorICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsgIAorICBBVE9NX01BU1RFUl9MSVNUX09GX0RBVEFfVEFCTEVTICAgTGlzdE9mRGF0YVRhYmxlczsKK31BVE9NX01BU1RFUl9EQVRBX1RBQkxFOwogCi0jaWZkZWYJVUVGSV9CVUlMRAotI2RlZmluZQlVU0hPUlQJVVRFTVAKLSNlbmRpZgorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlIHVzZWQgaW4gTXVsdGltZWRpYUNhcGFiaWxpdHlJbmZvVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9BVE9NX01VTFRJTUVESUFfQ0FQQUJJTElUWV9JTkZPCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOyAgCisgIFVMT05HICAgICAgICAgICAgICAgICAgICB1bFNpZ25hdHVyZTsgICAgICAvLyBIVyBpbmZvIHRhYmxlIHNpZ25hdHVyZSBzdHJpbmcgIiRBVEkiCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y0kyQ19UeXBlOyAgICAgICAvLyBJMkMgdHlwZSAobm9ybWFsIEdQX0lPLCBJbXBhY3RUViBHUF9JTywgRGVkaWNhdGVkIEkyQyBwaW4sIGV0YykKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjVFZfT3V0SW5mbzsgICAgIC8vIFR5cGUgb2YgVFYgb3V0IHN1cHBvcnRlZCAoMzowKSBhbmQgdmlkZW8gb3V0IGNyeXN0YWwgZnJlcXVlbmN5ICg2OjQpIGFuZCBUViBkYXRhIHBvcnQgKDcpCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y1ZpZGVvUG9ydEluZm87ICAvLyBQcm92aWRlcyB0aGUgdmlkZW8gcG9ydCBjYXBhYmlsaXRpZXMKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjSG9zdFBvcnRJbmZvOyAgIC8vIFByb3ZpZGVzIGhvc3QgcG9ydCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCit9QVRPTV9NVUxUSU1FRElBX0NBUEFCSUxJVFlfSU5GTzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTUFTVEVSX0RBVEFfVEFCTEUgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCUFUT01fTUFTVEVSX0xJU1RfT0ZfREFUQV9UQUJMRVMgTGlzdE9mRGF0YVRhYmxlczsKLX0gQVRPTV9NQVNURVJfREFUQV9UQUJMRTsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZSB1c2VkIGluIE11bHRpbWVkaWFDb25maWdJbmZvVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9BVE9NX01VTFRJTUVESUFfQ09ORklHX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICB1bFNpZ25hdHVyZTsgICAgICAvLyBNTSBpbmZvIHRhYmxlIHNpZ25hdHVyZSBzdGluZyAiJE1NVCIKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjVHVuZXJJbmZvOyAgICAgIC8vIFR5cGUgb2YgdHVuZXIgaW5zdGFsbGVkIG9uIHRoZSBhZGFwdGVyICg0OjApIGFuZCB2aWRlbyBpbnB1dCBmb3IgdHVuZXIgKDc6NSkKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjQXVkaW9DaGlwSW5mbzsgIC8vIExpc3QgdGhlIGF1ZGlvIGNoaXAgdHlwZSAoMzowKSBwcm9kdWN0IHR5cGUgKDQpIGFuZCBPRU0gcmV2aXNpb24gKDc6NSkKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjUHJvZHVjdElEOyAgICAgIC8vIERlZmluZXMgYXMgT0VNIElEIG9yIEFUSSBib2FyZCBJRCBkZXBlbmRlbnQgb24gcHJvZHVjdCB0eXBlIHNldHRpbmcKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjTWlzY0luZm8xOyAgICAgIC8vIFR1bmVyIHZvbHRhZ2UgKDE6MCkgSFcgdGVsZXRleHQgc3VwcG9ydCAoMzoyKSBGTSBhdWRpbyBkZWNvZGVyICg1OjQpIHJlc2VydmVkICg2KSBhdWRpbyBzY3JhbWJsaW5nICg3KQorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgdWNNaXNjSW5mbzI7ICAgICAgLy8gSTJTIGlucHV0IGNvbmZpZyAoMCkgSTJTIG91dHB1dCBjb25maWcgKDEpIEkyUyBBdWRpbyBDaGlwICg0OjIpIFNQRElGIE91dHB1dCBDb25maWcgKDUpIHJlc2VydmVkICg3OjYpCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y01pc2NJbmZvMzsgICAgICAvLyBWaWRlbyBEZWNvZGVyIFR5cGUgKDM6MCkgVmlkZW8gSW4gU3RhbmRhcmQvQ3J5c3RhbCAoNzo0KQorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgdWNNaXNjSW5mbzQ7ICAgICAgLy8gVmlkZW8gRGVjb2RlciBIb3N0IENvbmZpZyAoMjowKSByZXNlcnZlZCAoNzozKQorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgdWNWaWRlb0lucHV0MEluZm87Ly8gVmlkZW8gSW5wdXQgMCBUeXBlICgxOjApIEYvQiBzZXR0aW5nICgyKSBwaHlzaWNhbCBjb25uZWN0b3IgSUQgKDU6MykgcmVzZXJ2ZWQgKDc6NikKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjVmlkZW9JbnB1dDFJbmZvOy8vIFZpZGVvIElucHV0IDEgVHlwZSAoMTowKSBGL0Igc2V0dGluZyAoMikgcGh5c2ljYWwgY29ubmVjdG9yIElEICg1OjMpIHJlc2VydmVkICg3OjYpCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y1ZpZGVvSW5wdXQySW5mbzsvLyBWaWRlbyBJbnB1dCAyIFR5cGUgKDE6MCkgRi9CIHNldHRpbmcgKDIpIHBoeXNpY2FsIGNvbm5lY3RvciBJRCAoNTozKSByZXNlcnZlZCAoNzo2KQorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgdWNWaWRlb0lucHV0M0luZm87Ly8gVmlkZW8gSW5wdXQgMyBUeXBlICgxOjApIEYvQiBzZXR0aW5nICgyKSBwaHlzaWNhbCBjb25uZWN0b3IgSUQgKDU6MykgcmVzZXJ2ZWQgKDc6NikKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjVmlkZW9JbnB1dDRJbmZvOy8vIFZpZGVvIElucHV0IDQgVHlwZSAoMTowKSBGL0Igc2V0dGluZyAoMikgcGh5c2ljYWwgY29ubmVjdG9yIElEICg1OjMpIHJlc2VydmVkICg3OjYpCit9QVRPTV9NVUxUSU1FRElBX0NPTkZJR19JTkZPOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmUgdXNlZCBpbiBNdWx0aW1lZGlhQ2FwYWJpbGl0eUluZm9UYWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9NVUxUSU1FRElBX0NBUEFCSUxJVFlfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVUxPTkcgdWxTaWduYXR1cmU7CS8qICBIVyBpbmZvIHRhYmxlIHNpZ25hdHVyZSBzdHJpbmcgIiRBVEkiICovCi0JVUNIQVIgdWNJMkNfVHlwZTsJLyogIEkyQyB0eXBlIChub3JtYWwgR1BfSU8sIEltcGFjdFRWIEdQX0lPLCBEZWRpY2F0ZWQgSTJDIHBpbiwgZXRjKSAqLwotCVVDSEFSIHVjVFZfT3V0SW5mbzsJLyogIFR5cGUgb2YgVFYgb3V0IHN1cHBvcnRlZCAoMzowKSBhbmQgdmlkZW8gb3V0IGNyeXN0YWwgZnJlcXVlbmN5ICg2OjQpIGFuZCBUViBkYXRhIHBvcnQgKDcpICovCi0JVUNIQVIgdWNWaWRlb1BvcnRJbmZvOwkvKiAgUHJvdmlkZXMgdGhlIHZpZGVvIHBvcnQgY2FwYWJpbGl0aWVzICovCi0JVUNIQVIgdWNIb3N0UG9ydEluZm87CS8qICBQcm92aWRlcyBob3N0IHBvcnQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiAqLwotfSBBVE9NX01VTFRJTUVESUFfQ0FQQUJJTElUWV9JTkZPOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlcyB1c2VkIGluIEZpcm13YXJlSW5mb1RhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZSB1c2VkIGluIE11bHRpbWVkaWFDb25maWdJbmZvVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTVVMVElNRURJQV9DT05GSUdfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVUxPTkcgdWxTaWduYXR1cmU7CS8qICBNTSBpbmZvIHRhYmxlIHNpZ25hdHVyZSBzdGluZyAiJE1NVCIgKi8KLQlVQ0hBUiB1Y1R1bmVySW5mbzsJLyogIFR5cGUgb2YgdHVuZXIgaW5zdGFsbGVkIG9uIHRoZSBhZGFwdGVyICg0OjApIGFuZCB2aWRlbyBpbnB1dCBmb3IgdHVuZXIgKDc6NSkgKi8KLQlVQ0hBUiB1Y0F1ZGlvQ2hpcEluZm87CS8qICBMaXN0IHRoZSBhdWRpbyBjaGlwIHR5cGUgKDM6MCkgcHJvZHVjdCB0eXBlICg0KSBhbmQgT0VNIHJldmlzaW9uICg3OjUpICovCi0JVUNIQVIgdWNQcm9kdWN0SUQ7CS8qICBEZWZpbmVzIGFzIE9FTSBJRCBvciBBVEkgYm9hcmQgSUQgZGVwZW5kZW50IG9uIHByb2R1Y3QgdHlwZSBzZXR0aW5nICovCi0JVUNIQVIgdWNNaXNjSW5mbzE7CS8qICBUdW5lciB2b2x0YWdlICgxOjApIEhXIHRlbGV0ZXh0IHN1cHBvcnQgKDM6MikgRk0gYXVkaW8gZGVjb2RlciAoNTo0KSByZXNlcnZlZCAoNikgYXVkaW8gc2NyYW1ibGluZyAoNykgKi8KLQlVQ0hBUiB1Y01pc2NJbmZvMjsJLyogIEkyUyBpbnB1dCBjb25maWcgKDApIEkyUyBvdXRwdXQgY29uZmlnICgxKSBJMlMgQXVkaW8gQ2hpcCAoNDoyKSBTUERJRiBPdXRwdXQgQ29uZmlnICg1KSByZXNlcnZlZCAoNzo2KSAqLwotCVVDSEFSIHVjTWlzY0luZm8zOwkvKiAgVmlkZW8gRGVjb2RlciBUeXBlICgzOjApIFZpZGVvIEluIFN0YW5kYXJkL0NyeXN0YWwgKDc6NCkgKi8KLQlVQ0hBUiB1Y01pc2NJbmZvNDsJLyogIFZpZGVvIERlY29kZXIgSG9zdCBDb25maWcgKDI6MCkgcmVzZXJ2ZWQgKDc6MykgKi8KLQlVQ0hBUiB1Y1ZpZGVvSW5wdXQwSW5mbzsJLyogIFZpZGVvIElucHV0IDAgVHlwZSAoMTowKSBGL0Igc2V0dGluZyAoMikgcGh5c2ljYWwgY29ubmVjdG9yIElEICg1OjMpIHJlc2VydmVkICg3OjYpICovCi0JVUNIQVIgdWNWaWRlb0lucHV0MUluZm87CS8qICBWaWRlbyBJbnB1dCAxIFR5cGUgKDE6MCkgRi9CIHNldHRpbmcgKDIpIHBoeXNpY2FsIGNvbm5lY3RvciBJRCAoNTozKSByZXNlcnZlZCAoNzo2KSAqLwotCVVDSEFSIHVjVmlkZW9JbnB1dDJJbmZvOwkvKiAgVmlkZW8gSW5wdXQgMiBUeXBlICgxOjApIEYvQiBzZXR0aW5nICgyKSBwaHlzaWNhbCBjb25uZWN0b3IgSUQgKDU6MykgcmVzZXJ2ZWQgKDc6NikgKi8KLQlVQ0hBUiB1Y1ZpZGVvSW5wdXQzSW5mbzsJLyogIFZpZGVvIElucHV0IDMgVHlwZSAoMTowKSBGL0Igc2V0dGluZyAoMikgcGh5c2ljYWwgY29ubmVjdG9yIElEICg1OjMpIHJlc2VydmVkICg3OjYpICovCi0JVUNIQVIgdWNWaWRlb0lucHV0NEluZm87CS8qICBWaWRlbyBJbnB1dCA0IFR5cGUgKDE6MCkgRi9CIHNldHRpbmcgKDIpIHBoeXNpY2FsIGNvbm5lY3RvciBJRCAoNTozKSByZXNlcnZlZCAoNzo2KSAqLwotfSBBVE9NX01VTFRJTUVESUFfQ09ORklHX0lORk87Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZXMgdXNlZCBpbiBGaXJtd2FyZUluZm9UYWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qICB1c0JJT1NDYXBhYmlsaXR5IERlZmluaXRpb246ICovCi0vKiAgQml0IDAgPSAwOiBCaW9zIGltYWdlIGlzIG5vdCBQb3N0ZWQsID0xOkJpb3MgaW1hZ2UgaXMgUG9zdGVkOyAqLwotLyogIEJpdCAxID0gMDogRHVhbCBDUlRDIGlzIG5vdCBzdXBwb3J0ZWQsID0xOiBEdWFsIENSVEMgaXMgc3VwcG9ydGVkOyAqLwotLyogIEJpdCAyID0gMDogRXh0ZW5kZWQgRGVza3RvcCBpcyBub3Qgc3VwcG9ydGVkLCA9MTogRXh0ZW5kZWQgRGVza3RvcCBpcyBzdXBwb3J0ZWQ7ICovCi0vKiAgT3RoZXJzOiBSZXNlcnZlZCAqLworLy8gdXNCSU9TQ2FwYWJpbGl0eSBEZWZpbnRpb246CisvLyBCaXQgMCA9IDA6IEJpb3MgaW1hZ2UgaXMgbm90IFBvc3RlZCwgPTE6QmlvcyBpbWFnZSBpcyBQb3N0ZWQ7IAorLy8gQml0IDEgPSAwOiBEdWFsIENSVEMgaXMgbm90IHN1cHBvcnRlZCwgPTE6IER1YWwgQ1JUQyBpcyBzdXBwb3J0ZWQ7IAorLy8gQml0IDIgPSAwOiBFeHRlbmRlZCBEZXNrdG9wIGlzIG5vdCBzdXBwb3J0ZWQsID0xOiBFeHRlbmRlZCBEZXNrdG9wIGlzIHN1cHBvcnRlZDsgCisvLyBPdGhlcnM6IFJlc2VydmVkCiAjZGVmaW5lIEFUT01fQklPU19JTkZPX0FUT01fRklSTVdBUkVfUE9TVEVEICAgICAgICAgMHgwMDAxCiAjZGVmaW5lIEFUT01fQklPU19JTkZPX0RVQUxfQ1JUQ19TVVBQT1JUICAgICAgICAgICAgMHgwMDAyCiAjZGVmaW5lIEFUT01fQklPU19JTkZPX0VYVEVOREVEX0RFU0tUT1BfU1VQUE9SVCAgICAgMHgwMDA0Ci0jZGVmaW5lIEFUT01fQklPU19JTkZPX01FTU9SWV9DTE9DS19TU19TVVBQT1JUICAgICAgMHgwMDA4Ci0jZGVmaW5lIEFUT01fQklPU19JTkZPX0VOR0lORV9DTE9DS19TU19TVVBQT1JUICAgICAgMHgwMDEwCisjZGVmaW5lIEFUT01fQklPU19JTkZPX01FTU9SWV9DTE9DS19TU19TVVBQT1JUICAgICAgMHgwMDA4CQkvLyAodmFsaWQgZnJvbSB2MS4xIH52MS40KTo9MTogbWVtY2xrIFNTIGVuYWJsZSwgPTAgbWVtY2xrIFNTIGRpc2FibGUuIAorI2RlZmluZSBBVE9NX0JJT1NfSU5GT19FTkdJTkVfQ0xPQ0tfU1NfU1VQUE9SVCAgICAgIDB4MDAxMAkJLy8gKHZhbGlkIGZyb20gdjEuMSB+djEuNCk6PTE6IGVuZ2NsayBTUyBlbmFibGUsID0wIGVuZ2NsayBTUyBkaXNhYmxlLiAKICNkZWZpbmUgQVRPTV9CSU9TX0lORk9fQkxfQ09OVFJPTExFRF9CWV9HUFUgICAgICAgICAweDAwMjAKICNkZWZpbmUgQVRPTV9CSU9TX0lORk9fV01JX1NVUFBPUlQgICAgICAgICAgICAgICAgICAweDAwNDAKICNkZWZpbmUgQVRPTV9CSU9TX0lORk9fUFBNT0RFX0FTU0lHTkdFRF9CWV9TWVNURU0gICAweDAwODAKQEAgLTE0NDEsMjQyICsxNzk3LDI5MiBAQAogI2RlZmluZSBBVE9NX0JJT1NfSU5GT19IWVBFUk1FTU9SWV9TSVpFX01BU0sgICAgICAgIDB4MUUwMAogI2RlZmluZSBBVE9NX0JJT1NfSU5GT19WUE9TVF9XSVRIT1VUX0ZJUlNUX01PREVfU0VUIDB4MjAwMAogI2RlZmluZSBBVE9NX0JJT1NfSU5GT19CSU9TX1NDUkFUQ0g2X1NDTDJfUkVERUZJTkUgIDB4NDAwMAorI2RlZmluZSBBVE9NX0JJT1NfSU5GT19NRU1PUllfQ0xPQ0tfRVhUX1NTX1NVUFBPUlQgIDB4MDAwOAkJLy8gKHZhbGlkIGZyb20gdjIuMSApOiA9MTogbWVtY2xrIHNzIGVuYWJsZSB3aXRoIGV4dGVybmFsIHNzIGNoaXAKKyNkZWZpbmUgQVRPTV9CSU9TX0lORk9fRU5HSU5FX0NMT0NLX0VYVF9TU19TVVBQT1JUICAweDAwMTAJCS8vICh2YWxpZCBmcm9tIHYyLjEgKTogPTE6IGVuZ2NsayBzcyBlbmFibGUgd2l0aCBleHRlcm5hbCBzcyBjaGlwCiAKICNpZm5kZWYgX0gySU5DCiAKLS8qIFBsZWFzZSBkb24ndCBhZGQgb3IgZXhwYW5kIHRoaXMgYml0ZmllbGQgc3RydWN0dXJlIGJlbG93LCB0aGlzIG9uZSB3aWxsIHJldGlyZSBzb29uLiEgKi8KLXR5cGVkZWYgc3RydWN0IF9BVE9NX0ZJUk1XQVJFX0NBUEFCSUxJVFkgeworLy9QbGVhc2UgZG9uJ3QgYWRkIG9yIGV4cGFuZCB0aGlzIGJpdGZpZWxkIHN0cnVjdHVyZSBiZWxvdywgdGhpcyBvbmUgd2lsbCByZXRpcmUgc29vbi4hCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZCit7CiAjaWYgQVRPTV9CSUdfRU5ESUFOCi0JVVNIT1JUIFJlc2VydmVkOjM7Ci0JVVNIT1JUIEh5cGVyTWVtb3J5X1NpemU6NDsKLQlVU0hPUlQgSHlwZXJNZW1vcnlfU3VwcG9ydDoxOwotCVVTSE9SVCBQUE1vZGVfQXNzaWduZWQ6MTsKLQlVU0hPUlQgV01JX1NVUFBPUlQ6MTsKLQlVU0hPUlQgR1BVQ29udHJvbHNCTDoxOwotCVVTSE9SVCBFbmdpbmVDbG9ja1NTX1N1cHBvcnQ6MTsKLQlVU0hPUlQgTWVtb3J5Q2xvY2tTU19TdXBwb3J0OjE7Ci0JVVNIT1JUIEV4dGVuZGVkRGVza3RvcFN1cHBvcnQ6MTsKLQlVU0hPUlQgRHVhbENSVENfU3VwcG9ydDoxOwotCVVTSE9SVCBGaXJtd2FyZVBvc3RlZDoxOworICBVU0hPUlQgUmVzZXJ2ZWQ6MzsKKyAgVVNIT1JUIEh5cGVyTWVtb3J5X1NpemU6NDsKKyAgVVNIT1JUIEh5cGVyTWVtb3J5X1N1cHBvcnQ6MTsKKyAgVVNIT1JUIFBQTW9kZV9Bc3NpZ25lZDoxOworICBVU0hPUlQgV01JX1NVUFBPUlQ6MTsKKyAgVVNIT1JUIEdQVUNvbnRyb2xzQkw6MTsKKyAgVVNIT1JUIEVuZ2luZUNsb2NrU1NfU3VwcG9ydDoxOworICBVU0hPUlQgTWVtb3J5Q2xvY2tTU19TdXBwb3J0OjE7CisgIFVTSE9SVCBFeHRlbmRlZERlc2t0b3BTdXBwb3J0OjE7CisgIFVTSE9SVCBEdWFsQ1JUQ19TdXBwb3J0OjE7CisgIFVTSE9SVCBGaXJtd2FyZVBvc3RlZDoxOwogI2Vsc2UKLQlVU0hPUlQgRmlybXdhcmVQb3N0ZWQ6MTsKLQlVU0hPUlQgRHVhbENSVENfU3VwcG9ydDoxOwotCVVTSE9SVCBFeHRlbmRlZERlc2t0b3BTdXBwb3J0OjE7Ci0JVVNIT1JUIE1lbW9yeUNsb2NrU1NfU3VwcG9ydDoxOwotCVVTSE9SVCBFbmdpbmVDbG9ja1NTX1N1cHBvcnQ6MTsKLQlVU0hPUlQgR1BVQ29udHJvbHNCTDoxOwotCVVTSE9SVCBXTUlfU1VQUE9SVDoxOwotCVVTSE9SVCBQUE1vZGVfQXNzaWduZWQ6MTsKLQlVU0hPUlQgSHlwZXJNZW1vcnlfU3VwcG9ydDoxOwotCVVTSE9SVCBIeXBlck1lbW9yeV9TaXplOjQ7Ci0JVVNIT1JUIFJlc2VydmVkOjM7CisgIFVTSE9SVCBGaXJtd2FyZVBvc3RlZDoxOworICBVU0hPUlQgRHVhbENSVENfU3VwcG9ydDoxOworICBVU0hPUlQgRXh0ZW5kZWREZXNrdG9wU3VwcG9ydDoxOworICBVU0hPUlQgTWVtb3J5Q2xvY2tTU19TdXBwb3J0OjE7CisgIFVTSE9SVCBFbmdpbmVDbG9ja1NTX1N1cHBvcnQ6MTsKKyAgVVNIT1JUIEdQVUNvbnRyb2xzQkw6MTsKKyAgVVNIT1JUIFdNSV9TVVBQT1JUOjE7CisgIFVTSE9SVCBQUE1vZGVfQXNzaWduZWQ6MTsKKyAgVVNIT1JUIEh5cGVyTWVtb3J5X1N1cHBvcnQ6MTsKKyAgVVNIT1JUIEh5cGVyTWVtb3J5X1NpemU6NDsKKyAgVVNIT1JUIFJlc2VydmVkOjM7CiAjZW5kaWYKLX0gQVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZOworfUFUT01fRklSTVdBUkVfQ0FQQUJJTElUWTsKIAotdHlwZWRlZiB1bmlvbiBfQVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZX0FDQ0VTUyB7Ci0JQVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZIHNiZkFjY2VzczsKLQlVU0hPUlQgc3VzQWNjZXNzOwotfSBBVE9NX0ZJUk1XQVJFX0NBUEFCSUxJVFlfQUNDRVNTOwordHlwZWRlZiB1bmlvbiBfQVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZX0FDQ0VTUworeworICBBVE9NX0ZJUk1XQVJFX0NBUEFCSUxJVFkgc2JmQWNjZXNzOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgc3VzQWNjZXNzOworfUFUT01fRklSTVdBUkVfQ0FQQUJJTElUWV9BQ0NFU1M7CiAKICNlbHNlCiAKLXR5cGVkZWYgdW5pb24gX0FUT01fRklSTVdBUkVfQ0FQQUJJTElUWV9BQ0NFU1MgewotCVVTSE9SVCBzdXNBY2Nlc3M7Ci19IEFUT01fRklSTVdBUkVfQ0FQQUJJTElUWV9BQ0NFU1M7Cit0eXBlZGVmIHVuaW9uIF9BVE9NX0ZJUk1XQVJFX0NBUEFCSUxJVFlfQUNDRVNTCit7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICBzdXNBY2Nlc3M7Cit9QVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZX0FDQ0VTUzsKIAogI2VuZGlmCiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0ZJUk1XQVJFX0lORk8gewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVMT05HIHVsRmlybXdhcmVSZXZpc2lvbjsKLQlVTE9ORyB1bERlZmF1bHRFbmdpbmVDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsRGVmYXVsdE1lbW9yeUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxEcml2ZXJUYXJnZXRFbmdpbmVDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsRHJpdmVyVGFyZ2V0TWVtb3J5Q2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVTE9ORyB1bE1heEVuZ2luZUNsb2NrUExMX091dHB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsTWF4TWVtb3J5Q2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxNYXhQaXhlbENsb2NrUExMX091dHB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsQVNJQ01heEVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxBU0lDTWF4TWVtb3J5Q2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVQ0hBUiB1Y0FTSUNNYXhUZW1wZXJhdHVyZTsKLQlVQ0hBUiB1Y1BhZGRpbmdbM107CS8qIERvbid0IHVzZSB0aGVtICovCi0JVUxPTkcgYXVsUmVzZXJ2ZWRGb3JCSU9TWzNdOwkvKiBEb24ndCB1c2UgdGhlbSAqLwotCVVTSE9SVCB1c01pbkVuZ2luZUNsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWF4RW5naW5lQ2xvY2tQTExfSW5wdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNaW5FbmdpbmVDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNaW5NZW1vcnlDbG9ja1BMTF9JbnB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c01heE1lbW9yeUNsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWluTWVtb3J5Q2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWF4UGl4ZWxDbG9jazsJLyogSW4gMTBLaHogdW5pdCwgTWF4LiAgUGNsayAqLwotCVVTSE9SVCB1c01pblBpeGVsQ2xvY2tQTExfSW5wdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNYXhQaXhlbENsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQsIHRoZSBkZWZpbml0aW9ucyBhYm92ZSBjYW4ndCBjaGFuZ2UhISEgKi8KLQlBVE9NX0ZJUk1XQVJFX0NBUEFCSUxJVFlfQUNDRVNTIHVzRmlybXdhcmVDYXBhYmlsaXR5OwotCVVTSE9SVCB1c1JlZmVyZW5jZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzUE1fUlRTX0xvY2F0aW9uOwkvKiBSVFMgUE00IHN0YXJ0aW5nIGxvY2F0aW9uIGluIFJPTSBpbiAxS2IgdW5pdCAqLwotCVVDSEFSIHVjUE1fUlRTX1N0cmVhbVNpemU7CS8qIFJUUyBQTTQgcGFja2V0cyBpbiBLYiB1bml0ICovCi0JVUNIQVIgdWNEZXNpZ25fSUQ7CS8qIEluZGljYXRlIHdoYXQgaXMgdGhlIGJvYXJkIGRlc2lnbiAqLwotCVVDSEFSIHVjTWVtb3J5TW9kdWxlX0lEOwkvKiBJbmRpY2F0ZSB3aGF0IGlzIHRoZSBib2FyZCBkZXNpZ24gKi8KLX0gQVRPTV9GSVJNV0FSRV9JTkZPOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fRklSTVdBUkVfSU5GTworeworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgICAgICAgIHNIZWFkZXI7IAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsRmlybXdhcmVSZXZpc2lvbjsKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bERlZmF1bHRFbmdpbmVDbG9jazsgICAgICAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxEZWZhdWx0TWVtb3J5Q2xvY2s7ICAgICAgIC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsRHJpdmVyVGFyZ2V0RW5naW5lQ2xvY2s7ICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bERyaXZlclRhcmdldE1lbW9yeUNsb2NrOyAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxNYXhFbmdpbmVDbG9ja1BMTF9PdXRwdXQ7IC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsTWF4TWVtb3J5Q2xvY2tQTExfT3V0cHV0OyAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bE1heFBpeGVsQ2xvY2tQTExfT3V0cHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxBU0lDTWF4RW5naW5lQ2xvY2s7ICAgICAgIC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsQVNJQ01heE1lbW9yeUNsb2NrOyAgICAgICAvL0luIDEwS2h6IHVuaXQKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y0FTSUNNYXhUZW1wZXJhdHVyZTsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y1BhZGRpbmdbM107ICAgICAgICAgICAgICAgLy9Eb24ndCB1c2UgdGhlbQorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1bFJlc2VydmVkRm9yQklPU1szXTsgICAgICAvL0Rvbid0IHVzZSB0aGVtCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5FbmdpbmVDbG9ja1BMTF9JbnB1dDsgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWF4RW5naW5lQ2xvY2tQTExfSW5wdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pbkVuZ2luZUNsb2NrUExMX091dHB1dDsgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5NZW1vcnlDbG9ja1BMTF9JbnB1dDsgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWF4TWVtb3J5Q2xvY2tQTExfSW5wdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pbk1lbW9yeUNsb2NrUExMX091dHB1dDsgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNYXhQaXhlbENsb2NrOyAgICAgICAgICAgIC8vSW4gMTBLaHogdW5pdCwgTWF4LiAgUGNsaworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWluUGl4ZWxDbG9ja1BMTF9JbnB1dDsgICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01heFBpeGVsQ2xvY2tQTExfSW5wdXQ7ICAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5QaXhlbENsb2NrUExMX091dHB1dDsgIC8vSW4gMTBLaHogdW5pdCwgdGhlIGRlZmluaXRpb25zIGFib3ZlIGNhbid0IGNoYW5nZSEhIQorICBBVE9NX0ZJUk1XQVJFX0NBUEFCSUxJVFlfQUNDRVNTIHVzRmlybXdhcmVDYXBhYmlsaXR5OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzUmVmZXJlbmNlQ2xvY2s7ICAgICAgICAgICAvL0luIDEwS2h6IHVuaXQJCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNQTV9SVFNfTG9jYXRpb247ICAgICAgICAgIC8vUlRTIFBNNCBzdGFydGluZyBsb2NhdGlvbiBpbiBST00gaW4gMUtiIHVuaXQgCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNQTV9SVFNfU3RyZWFtU2l6ZTsgICAgICAgIC8vUlRTIFBNNCBwYWNrZXRzIGluIEtiIHVuaXQKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y0Rlc2lnbl9JRDsgICAgICAgICAgICAgICAgLy9JbmRpY2F0ZSB3aGF0IGlzIHRoZSBib2FyZCBkZXNpZ24KKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y01lbW9yeU1vZHVsZV9JRDsgICAgICAgICAgLy9JbmRpY2F0ZSB3aGF0IGlzIHRoZSBib2FyZCBkZXNpZ24KK31BVE9NX0ZJUk1XQVJFX0lORk87CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0ZJUk1XQVJFX0lORk9fVjFfMiB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVUxPTkcgdWxGaXJtd2FyZVJldmlzaW9uOwotCVVMT05HIHVsRGVmYXVsdEVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxEZWZhdWx0TWVtb3J5Q2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVTE9ORyB1bERyaXZlclRhcmdldEVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxEcml2ZXJUYXJnZXRNZW1vcnlDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsTWF4RW5naW5lQ2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxNYXhNZW1vcnlDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVTE9ORyB1bE1heFBpeGVsQ2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxBU0lDTWF4RW5naW5lQ2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVTE9ORyB1bEFTSUNNYXhNZW1vcnlDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVDSEFSIHVjQVNJQ01heFRlbXBlcmF0dXJlOwotCVVDSEFSIHVjTWluQWxsb3dlZEJMX0xldmVsOwotCVVDSEFSIHVjUGFkZGluZ1syXTsJLyogRG9uJ3QgdXNlIHRoZW0gKi8KLQlVTE9ORyBhdWxSZXNlcnZlZEZvckJJT1NbMl07CS8qIERvbid0IHVzZSB0aGVtICovCi0JVUxPTkcgdWxNaW5QaXhlbENsb2NrUExMX091dHB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c01pbkVuZ2luZUNsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWF4RW5naW5lQ2xvY2tQTExfSW5wdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNaW5FbmdpbmVDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNaW5NZW1vcnlDbG9ja1BMTF9JbnB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c01heE1lbW9yeUNsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWluTWVtb3J5Q2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWF4UGl4ZWxDbG9jazsJLyogSW4gMTBLaHogdW5pdCwgTWF4LiAgUGNsayAqLwotCVVTSE9SVCB1c01pblBpeGVsQ2xvY2tQTExfSW5wdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNYXhQaXhlbENsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQgLSBsb3dlciAxNmJpdCBvZiB1bE1pblBpeGVsQ2xvY2tQTExfT3V0cHV0ICovCi0JQVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZX0FDQ0VTUyB1c0Zpcm13YXJlQ2FwYWJpbGl0eTsKLQlVU0hPUlQgdXNSZWZlcmVuY2VDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c1BNX1JUU19Mb2NhdGlvbjsJLyogUlRTIFBNNCBzdGFydGluZyBsb2NhdGlvbiBpbiBST00gaW4gMUtiIHVuaXQgKi8KLQlVQ0hBUiB1Y1BNX1JUU19TdHJlYW1TaXplOwkvKiBSVFMgUE00IHBhY2tldHMgaW4gS2IgdW5pdCAqLwotCVVDSEFSIHVjRGVzaWduX0lEOwkvKiBJbmRpY2F0ZSB3aGF0IGlzIHRoZSBib2FyZCBkZXNpZ24gKi8KLQlVQ0hBUiB1Y01lbW9yeU1vZHVsZV9JRDsJLyogSW5kaWNhdGUgd2hhdCBpcyB0aGUgYm9hcmQgZGVzaWduICovCi19IEFUT01fRklSTVdBUkVfSU5GT19WMV8yOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fRklSTVdBUkVfSU5GT19WMV8yCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgICAgICAgc0hlYWRlcjsgCisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxGaXJtd2FyZVJldmlzaW9uOworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsRGVmYXVsdEVuZ2luZUNsb2NrOyAgICAgICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bERlZmF1bHRNZW1vcnlDbG9jazsgICAgICAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxEcml2ZXJUYXJnZXRFbmdpbmVDbG9jazsgIC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsRHJpdmVyVGFyZ2V0TWVtb3J5Q2xvY2s7ICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bE1heEVuZ2luZUNsb2NrUExMX091dHB1dDsgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxNYXhNZW1vcnlDbG9ja1BMTF9PdXRwdXQ7IC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsTWF4UGl4ZWxDbG9ja1BMTF9PdXRwdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bEFTSUNNYXhFbmdpbmVDbG9jazsgICAgICAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxBU0lDTWF4TWVtb3J5Q2xvY2s7ICAgICAgIC8vSW4gMTBLaHogdW5pdAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjQVNJQ01heFRlbXBlcmF0dXJlOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjTWluQWxsb3dlZEJMX0xldmVsOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjUGFkZGluZ1syXTsgICAgICAgICAgICAgICAvL0Rvbid0IHVzZSB0aGVtCisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVsUmVzZXJ2ZWRGb3JCSU9TWzJdOyAgICAgIC8vRG9uJ3QgdXNlIHRoZW0KKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bE1pblBpeGVsQ2xvY2tQTExfT3V0cHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5FbmdpbmVDbG9ja1BMTF9JbnB1dDsgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWF4RW5naW5lQ2xvY2tQTExfSW5wdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pbkVuZ2luZUNsb2NrUExMX091dHB1dDsgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5NZW1vcnlDbG9ja1BMTF9JbnB1dDsgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWF4TWVtb3J5Q2xvY2tQTExfSW5wdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pbk1lbW9yeUNsb2NrUExMX091dHB1dDsgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNYXhQaXhlbENsb2NrOyAgICAgICAgICAgIC8vSW4gMTBLaHogdW5pdCwgTWF4LiAgUGNsaworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWluUGl4ZWxDbG9ja1BMTF9JbnB1dDsgICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01heFBpeGVsQ2xvY2tQTExfSW5wdXQ7ICAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5QaXhlbENsb2NrUExMX091dHB1dDsgIC8vSW4gMTBLaHogdW5pdCAtIGxvd2VyIDE2Yml0IG9mIHVsTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQKKyAgQVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZX0FDQ0VTUyB1c0Zpcm13YXJlQ2FwYWJpbGl0eTsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c1JlZmVyZW5jZUNsb2NrOyAgICAgICAgICAgLy9JbiAxMEtoeiB1bml0CQorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzUE1fUlRTX0xvY2F0aW9uOyAgICAgICAgICAvL1JUUyBQTTQgc3RhcnRpbmcgbG9jYXRpb24gaW4gUk9NIGluIDFLYiB1bml0IAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjUE1fUlRTX1N0cmVhbVNpemU7ICAgICAgICAvL1JUUyBQTTQgcGFja2V0cyBpbiBLYiB1bml0CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNEZXNpZ25fSUQ7ICAgICAgICAgICAgICAgIC8vSW5kaWNhdGUgd2hhdCBpcyB0aGUgYm9hcmQgZGVzaWduCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNNZW1vcnlNb2R1bGVfSUQ7ICAgICAgICAgIC8vSW5kaWNhdGUgd2hhdCBpcyB0aGUgYm9hcmQgZGVzaWduCit9QVRPTV9GSVJNV0FSRV9JTkZPX1YxXzI7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0ZJUk1XQVJFX0lORk9fVjFfMyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVUxPTkcgdWxGaXJtd2FyZVJldmlzaW9uOwotCVVMT05HIHVsRGVmYXVsdEVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxEZWZhdWx0TWVtb3J5Q2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVTE9ORyB1bERyaXZlclRhcmdldEVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxEcml2ZXJUYXJnZXRNZW1vcnlDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsTWF4RW5naW5lQ2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxNYXhNZW1vcnlDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVTE9ORyB1bE1heFBpeGVsQ2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxBU0lDTWF4RW5naW5lQ2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVTE9ORyB1bEFTSUNNYXhNZW1vcnlDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVDSEFSIHVjQVNJQ01heFRlbXBlcmF0dXJlOwotCVVDSEFSIHVjTWluQWxsb3dlZEJMX0xldmVsOwotCVVDSEFSIHVjUGFkZGluZ1syXTsJLyogRG9uJ3QgdXNlIHRoZW0gKi8KLQlVTE9ORyBhdWxSZXNlcnZlZEZvckJJT1M7CS8qIERvbid0IHVzZSB0aGVtICovCi0JVUxPTkcgdWwzREFjY2VsZXJhdGlvbkVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxNaW5QaXhlbENsb2NrUExMX091dHB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c01pbkVuZ2luZUNsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWF4RW5naW5lQ2xvY2tQTExfSW5wdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNaW5FbmdpbmVDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNaW5NZW1vcnlDbG9ja1BMTF9JbnB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c01heE1lbW9yeUNsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWluTWVtb3J5Q2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWF4UGl4ZWxDbG9jazsJLyogSW4gMTBLaHogdW5pdCwgTWF4LiAgUGNsayAqLwotCVVTSE9SVCB1c01pblBpeGVsQ2xvY2tQTExfSW5wdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNYXhQaXhlbENsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQgLSBsb3dlciAxNmJpdCBvZiB1bE1pblBpeGVsQ2xvY2tQTExfT3V0cHV0ICovCi0JQVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZX0FDQ0VTUyB1c0Zpcm13YXJlQ2FwYWJpbGl0eTsKLQlVU0hPUlQgdXNSZWZlcmVuY2VDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c1BNX1JUU19Mb2NhdGlvbjsJLyogUlRTIFBNNCBzdGFydGluZyBsb2NhdGlvbiBpbiBST00gaW4gMUtiIHVuaXQgKi8KLQlVQ0hBUiB1Y1BNX1JUU19TdHJlYW1TaXplOwkvKiBSVFMgUE00IHBhY2tldHMgaW4gS2IgdW5pdCAqLwotCVVDSEFSIHVjRGVzaWduX0lEOwkvKiBJbmRpY2F0ZSB3aGF0IGlzIHRoZSBib2FyZCBkZXNpZ24gKi8KLQlVQ0hBUiB1Y01lbW9yeU1vZHVsZV9JRDsJLyogSW5kaWNhdGUgd2hhdCBpcyB0aGUgYm9hcmQgZGVzaWduICovCi19IEFUT01fRklSTVdBUkVfSU5GT19WMV8zOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fRklSTVdBUkVfSU5GT19WMV8zCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgICAgICAgc0hlYWRlcjsgCisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxGaXJtd2FyZVJldmlzaW9uOworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsRGVmYXVsdEVuZ2luZUNsb2NrOyAgICAgICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bERlZmF1bHRNZW1vcnlDbG9jazsgICAgICAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxEcml2ZXJUYXJnZXRFbmdpbmVDbG9jazsgIC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsRHJpdmVyVGFyZ2V0TWVtb3J5Q2xvY2s7ICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bE1heEVuZ2luZUNsb2NrUExMX091dHB1dDsgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxNYXhNZW1vcnlDbG9ja1BMTF9PdXRwdXQ7IC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsTWF4UGl4ZWxDbG9ja1BMTF9PdXRwdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bEFTSUNNYXhFbmdpbmVDbG9jazsgICAgICAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxBU0lDTWF4TWVtb3J5Q2xvY2s7ICAgICAgIC8vSW4gMTBLaHogdW5pdAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjQVNJQ01heFRlbXBlcmF0dXJlOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjTWluQWxsb3dlZEJMX0xldmVsOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjUGFkZGluZ1syXTsgICAgICAgICAgICAgICAvL0Rvbid0IHVzZSB0aGVtCisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgYXVsUmVzZXJ2ZWRGb3JCSU9TOyAgICAgICAgIC8vRG9uJ3QgdXNlIHRoZW0KKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bDNEQWNjZWxlcmF0aW9uRW5naW5lQ2xvY2s7Ly9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxNaW5QaXhlbENsb2NrUExMX091dHB1dDsgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWluRW5naW5lQ2xvY2tQTExfSW5wdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01heEVuZ2luZUNsb2NrUExMX0lucHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5FbmdpbmVDbG9ja1BMTF9PdXRwdXQ7IC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWluTWVtb3J5Q2xvY2tQTExfSW5wdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01heE1lbW9yeUNsb2NrUExMX0lucHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5NZW1vcnlDbG9ja1BMTF9PdXRwdXQ7IC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWF4UGl4ZWxDbG9jazsgICAgICAgICAgICAvL0luIDEwS2h6IHVuaXQsIE1heC4gIFBjbGsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pblBpeGVsQ2xvY2tQTExfSW5wdXQ7ICAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNYXhQaXhlbENsb2NrUExMX0lucHV0OyAgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQ7ICAvL0luIDEwS2h6IHVuaXQgLSBsb3dlciAxNmJpdCBvZiB1bE1pblBpeGVsQ2xvY2tQTExfT3V0cHV0CisgIEFUT01fRklSTVdBUkVfQ0FQQUJJTElUWV9BQ0NFU1MgdXNGaXJtd2FyZUNhcGFiaWxpdHk7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNSZWZlcmVuY2VDbG9jazsgICAgICAgICAgIC8vSW4gMTBLaHogdW5pdAkKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c1BNX1JUU19Mb2NhdGlvbjsgICAgICAgICAgLy9SVFMgUE00IHN0YXJ0aW5nIGxvY2F0aW9uIGluIFJPTSBpbiAxS2IgdW5pdCAKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y1BNX1JUU19TdHJlYW1TaXplOyAgICAgICAgLy9SVFMgUE00IHBhY2tldHMgaW4gS2IgdW5pdAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjRGVzaWduX0lEOyAgICAgICAgICAgICAgICAvL0luZGljYXRlIHdoYXQgaXMgdGhlIGJvYXJkIGRlc2lnbgorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjTWVtb3J5TW9kdWxlX0lEOyAgICAgICAgICAvL0luZGljYXRlIHdoYXQgaXMgdGhlIGJvYXJkIGRlc2lnbgorfUFUT01fRklSTVdBUkVfSU5GT19WMV8zOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9GSVJNV0FSRV9JTkZPX1YxXzQgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVMT05HIHVsRmlybXdhcmVSZXZpc2lvbjsKLQlVTE9ORyB1bERlZmF1bHRFbmdpbmVDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsRGVmYXVsdE1lbW9yeUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxEcml2ZXJUYXJnZXRFbmdpbmVDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsRHJpdmVyVGFyZ2V0TWVtb3J5Q2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVTE9ORyB1bE1heEVuZ2luZUNsb2NrUExMX091dHB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsTWF4TWVtb3J5Q2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxNYXhQaXhlbENsb2NrUExMX091dHB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVMT05HIHVsQVNJQ01heEVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxBU0lDTWF4TWVtb3J5Q2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVQ0hBUiB1Y0FTSUNNYXhUZW1wZXJhdHVyZTsKLQlVQ0hBUiB1Y01pbkFsbG93ZWRCTF9MZXZlbDsKLQlVU0hPUlQgdXNCb290VXBWRERDVm9sdGFnZTsJLyogSW4gTVYgdW5pdCAqLwotCVVTSE9SVCB1c0xjZE1pblBpeGVsQ2xvY2tQTExfT3V0cHV0OwkvKiAgSW4gTUh6IHVuaXQgKi8KLQlVU0hPUlQgdXNMY2RNYXhQaXhlbENsb2NrUExMX091dHB1dDsJLyogIEluIE1IeiB1bml0ICovCi0JVUxPTkcgdWwzREFjY2VsZXJhdGlvbkVuZ2luZUNsb2NrOwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVUxPTkcgdWxNaW5QaXhlbENsb2NrUExMX091dHB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c01pbkVuZ2luZUNsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWF4RW5naW5lQ2xvY2tQTExfSW5wdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNaW5FbmdpbmVDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNaW5NZW1vcnlDbG9ja1BMTF9JbnB1dDsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c01heE1lbW9yeUNsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWluTWVtb3J5Q2xvY2tQTExfT3V0cHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWF4UGl4ZWxDbG9jazsJLyogSW4gMTBLaHogdW5pdCwgTWF4LiAgUGNsayAqLwotCVVTSE9SVCB1c01pblBpeGVsQ2xvY2tQTExfSW5wdXQ7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVU0hPUlQgdXNNYXhQaXhlbENsb2NrUExMX0lucHV0OwkvKiBJbiAxMEtoeiB1bml0ICovCi0JVVNIT1JUIHVzTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQ7CS8qIEluIDEwS2h6IHVuaXQgLSBsb3dlciAxNmJpdCBvZiB1bE1pblBpeGVsQ2xvY2tQTExfT3V0cHV0ICovCi0JQVRPTV9GSVJNV0FSRV9DQVBBQklMSVRZX0FDQ0VTUyB1c0Zpcm13YXJlQ2FwYWJpbGl0eTsKLQlVU0hPUlQgdXNSZWZlcmVuY2VDbG9jazsJLyogSW4gMTBLaHogdW5pdCAqLwotCVVTSE9SVCB1c1BNX1JUU19Mb2NhdGlvbjsJLyogUlRTIFBNNCBzdGFydGluZyBsb2NhdGlvbiBpbiBST00gaW4gMUtiIHVuaXQgKi8KLQlVQ0hBUiB1Y1BNX1JUU19TdHJlYW1TaXplOwkvKiBSVFMgUE00IHBhY2tldHMgaW4gS2IgdW5pdCAqLwotCVVDSEFSIHVjRGVzaWduX0lEOwkvKiBJbmRpY2F0ZSB3aGF0IGlzIHRoZSBib2FyZCBkZXNpZ24gKi8KLQlVQ0hBUiB1Y01lbW9yeU1vZHVsZV9JRDsJLyogSW5kaWNhdGUgd2hhdCBpcyB0aGUgYm9hcmQgZGVzaWduICovCi19IEFUT01fRklSTVdBUkVfSU5GT19WMV80OwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fRklSTVdBUkVfSU5GT19WMV80Cit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgICAgICAgc0hlYWRlcjsgCisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxGaXJtd2FyZVJldmlzaW9uOworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsRGVmYXVsdEVuZ2luZUNsb2NrOyAgICAgICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bERlZmF1bHRNZW1vcnlDbG9jazsgICAgICAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxEcml2ZXJUYXJnZXRFbmdpbmVDbG9jazsgIC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsRHJpdmVyVGFyZ2V0TWVtb3J5Q2xvY2s7ICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bE1heEVuZ2luZUNsb2NrUExMX091dHB1dDsgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxNYXhNZW1vcnlDbG9ja1BMTF9PdXRwdXQ7IC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsTWF4UGl4ZWxDbG9ja1BMTF9PdXRwdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bEFTSUNNYXhFbmdpbmVDbG9jazsgICAgICAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxBU0lDTWF4TWVtb3J5Q2xvY2s7ICAgICAgIC8vSW4gMTBLaHogdW5pdAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjQVNJQ01heFRlbXBlcmF0dXJlOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjTWluQWxsb3dlZEJMX0xldmVsOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzQm9vdFVwVkREQ1ZvbHRhZ2U7ICAgICAgICAvL0luIE1WIHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c0xjZE1pblBpeGVsQ2xvY2tQTExfT3V0cHV0OyAvLyBJbiBNSHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTGNkTWF4UGl4ZWxDbG9ja1BMTF9PdXRwdXQ7IC8vIEluIE1IeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWwzREFjY2VsZXJhdGlvbkVuZ2luZUNsb2NrOy8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pbkVuZ2luZUNsb2NrUExMX0lucHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNYXhFbmdpbmVDbG9ja1BMTF9JbnB1dDsgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWluRW5naW5lQ2xvY2tQTExfT3V0cHV0OyAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pbk1lbW9yeUNsb2NrUExMX0lucHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNYXhNZW1vcnlDbG9ja1BMTF9JbnB1dDsgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWluTWVtb3J5Q2xvY2tQTExfT3V0cHV0OyAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01heFBpeGVsQ2xvY2s7ICAgICAgICAgICAgLy9JbiAxMEtoeiB1bml0LCBNYXguICBQY2xrCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5QaXhlbENsb2NrUExMX0lucHV0OyAgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWF4UGl4ZWxDbG9ja1BMTF9JbnB1dDsgICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pblBpeGVsQ2xvY2tQTExfT3V0cHV0OyAgLy9JbiAxMEtoeiB1bml0IC0gbG93ZXIgMTZiaXQgb2YgdWxNaW5QaXhlbENsb2NrUExMX091dHB1dAorICBBVE9NX0ZJUk1XQVJFX0NBUEFCSUxJVFlfQUNDRVNTIHVzRmlybXdhcmVDYXBhYmlsaXR5OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzUmVmZXJlbmNlQ2xvY2s7ICAgICAgICAgICAvL0luIDEwS2h6IHVuaXQJCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNQTV9SVFNfTG9jYXRpb247ICAgICAgICAgIC8vUlRTIFBNNCBzdGFydGluZyBsb2NhdGlvbiBpbiBST00gaW4gMUtiIHVuaXQgCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNQTV9SVFNfU3RyZWFtU2l6ZTsgICAgICAgIC8vUlRTIFBNNCBwYWNrZXRzIGluIEtiIHVuaXQKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y0Rlc2lnbl9JRDsgICAgICAgICAgICAgICAgLy9JbmRpY2F0ZSB3aGF0IGlzIHRoZSBib2FyZCBkZXNpZ24KKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y01lbW9yeU1vZHVsZV9JRDsgICAgICAgICAgLy9JbmRpY2F0ZSB3aGF0IGlzIHRoZSBib2FyZCBkZXNpZ24KK31BVE9NX0ZJUk1XQVJFX0lORk9fVjFfNDsKIAotI2RlZmluZSBBVE9NX0ZJUk1XQVJFX0lORk9fTEFTVCAgQVRPTV9GSVJNV0FSRV9JTkZPX1YxXzQKKy8vdGhlIHN0cnVjdHVyZSBiZWxvdyB0byBiZSB1c2VkIGZyb20gQ3lwcmVzcwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fRklSTVdBUkVfSU5GT19WMl8xCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgICAgICAgc0hlYWRlcjsgCisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxGaXJtd2FyZVJldmlzaW9uOworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsRGVmYXVsdEVuZ2luZUNsb2NrOyAgICAgICAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bERlZmF1bHRNZW1vcnlDbG9jazsgICAgICAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxSZXNlcnZlZDE7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxSZXNlcnZlZDI7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxNYXhFbmdpbmVDbG9ja1BMTF9PdXRwdXQ7IC8vSW4gMTBLaHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsTWF4TWVtb3J5Q2xvY2tQTExfT3V0cHV0OyAvL0luIDEwS2h6IHVuaXQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgICAgICB1bE1heFBpeGVsQ2xvY2tQTExfT3V0cHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxCaW5hcnlBbHRlcmVkSW5mbzsgICAgICAgIC8vV2FzIHVsQVNJQ01heEVuZ2luZUNsb2NrCisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgICAgdWxEZWZhdWx0RGlzcEVuZ2luZUNsa0ZyZXE7IC8vSW4gMTBLaHogdW5pdAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjUmVzZXJ2ZWQxOyAgICAgICAgICAgICAgICAvL1dhcyB1Y0FTSUNNYXhUZW1wZXJhdHVyZTsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y01pbkFsbG93ZWRCTF9MZXZlbDsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c0Jvb3RVcFZERENWb2x0YWdlOyAgICAgICAgLy9JbiBNViB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNMY2RNaW5QaXhlbENsb2NrUExMX091dHB1dDsgLy8gSW4gTUh6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c0xjZE1heFBpeGVsQ2xvY2tQTExfT3V0cHV0OyAvLyBJbiBNSHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsUmVzZXJ2ZWQ0OyAgICAgICAgICAgICAgICAvL1dhcyB1bEFzaWNNYXhpbXVtVm9sdGFnZQorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsTWluUGl4ZWxDbG9ja1BMTF9PdXRwdXQ7ICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pbkVuZ2luZUNsb2NrUExMX0lucHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNYXhFbmdpbmVDbG9ja1BMTF9JbnB1dDsgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWluRW5naW5lQ2xvY2tQTExfT3V0cHV0OyAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pbk1lbW9yeUNsb2NrUExMX0lucHV0OyAgLy9JbiAxMEtoeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNYXhNZW1vcnlDbG9ja1BMTF9JbnB1dDsgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWluTWVtb3J5Q2xvY2tQTExfT3V0cHV0OyAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01heFBpeGVsQ2xvY2s7ICAgICAgICAgICAgLy9JbiAxMEtoeiB1bml0LCBNYXguICBQY2xrCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNaW5QaXhlbENsb2NrUExMX0lucHV0OyAgIC8vSW4gMTBLaHogdW5pdAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzTWF4UGl4ZWxDbG9ja1BMTF9JbnB1dDsgICAvL0luIDEwS2h6IHVuaXQKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c01pblBpeGVsQ2xvY2tQTExfT3V0cHV0OyAgLy9JbiAxMEtoeiB1bml0IC0gbG93ZXIgMTZiaXQgb2YgdWxNaW5QaXhlbENsb2NrUExMX091dHB1dAorICBBVE9NX0ZJUk1XQVJFX0NBUEFCSUxJVFlfQUNDRVNTIHVzRmlybXdhcmVDYXBhYmlsaXR5OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgICAgIHVzQ29yZVJlZmVyZW5jZUNsb2NrOyAgICAgICAvL0luIDEwS2h6IHVuaXQJCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNNZW1vcnlSZWZlcmVuY2VDbG9jazsgICAgIC8vSW4gMTBLaHogdW5pdAkKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgICAgICB1c1VuaXBoeURQTW9kZUV4dENsa0ZyZXE7ICAgLy9JbiAxMEtoeiB1bml0LCBpZiBpdCBpcyAwLCBJbiBEUCBNb2RlIFVuaXBoeSBJbnB1dCBjbG9jayBmcm9tIGludGVybmFsIFBQTEwsIG90aGVyd2lzZSBJbnB1dCBjbG9jayBmcm9tIGV4dGVybmFsIFNwcmVhZCBjbG9jaworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjTWVtb3J5TW9kdWxlX0lEOyAgICAgICAgICAvL0luZGljYXRlIHdoYXQgaXMgdGhlIGJvYXJkIGRlc2lnbgorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjUmVzZXJ2ZWQ0WzNdOworfUFUT01fRklSTVdBUkVfSU5GT19WMl8xOwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmVzIHVzZWQgaW4gSW50ZWdyYXRlZFN5c3RlbUluZm9UYWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQVRPTV9GSVJNV0FSRV9JTkZPX0xBU1QgIEFUT01fRklSTVdBUkVfSU5GT19WMl8xCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZXMgdXNlZCBpbiBJbnRlZ3JhdGVkU3lzdGVtSW5mb1RhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCiAjZGVmaW5lIElHUF9DQVBfRkxBR19EWU5BTUlDX0NMT0NLX0VOICAgICAgMHgyCiAjZGVmaW5lIElHUF9DQVBfRkxBR19BQ19DQVJEICAgICAgICAgICAgICAgMHg0CiAjZGVmaW5lIElHUF9DQVBfRkxBR19TRFZPX0NBUkQgICAgICAgICAgICAgMHg4CiAjZGVmaW5lIElHUF9DQVBfRkxBR19QT1NURElWX0JZXzJfTU9ERSAgICAgMHgxMAogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9JTlRFR1JBVEVEX1NZU1RFTV9JTkZPIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlVTE9ORyB1bEJvb3RVcEVuZ2luZUNsb2NrOwkvKiBpbiAxMGtIeiB1bml0ICovCi0JVUxPTkcgdWxCb290VXBNZW1vcnlDbG9jazsJLyogaW4gMTBrSHogdW5pdCAqLwotCVVMT05HIHVsTWF4U3lzdGVtTWVtb3J5Q2xvY2s7CS8qIGluIDEwa0h6IHVuaXQgKi8KLQlVTE9ORyB1bE1pblN5c3RlbU1lbW9yeUNsb2NrOwkvKiBpbiAxMGtIeiB1bml0ICovCi0JVUNIQVIgdWNOdW1iZXJPZkN5Y2xlc0luUGVyaW9kSGk7Ci0JVUNIQVIgdWNMQ0RUaW1pbmdTZWw7CS8qID0wOm5vdCB2YWxpZC4hPTAgc2VsIHRoaXMgdGltaW5nIGRlc2NyaXB0b3IgZnJvbSBMQ0QgRURJRC4gKi8KLQlVU0hPUlQgdXNSZXNlcnZlZDE7Ci0JVVNIT1JUIHVzSW50ZXJOQlZvbHRhZ2VMb3c7CS8qIEFuIGludGVybWlkaWF0ZSBQTVcgdmFsdWUgdG8gc2V0IHRoZSB2b2x0YWdlICovCi0JVVNIT1JUIHVzSW50ZXJOQlZvbHRhZ2VIaWdoOwkvKiBBbm90aGVyIGludGVybWlkaWF0ZSBQTVcgdmFsdWUgdG8gc2V0IHRoZSB2b2x0YWdlICovCi0JVUxPTkcgdWxSZXNlcnZlZFsyXTsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0lOVEVHUkFURURfU1lTVEVNX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSICAgICAgICBzSGVhZGVyOyAKKyAgVUxPTkcJICAgICAgICAgICAgICAgICAgICAgICAgICB1bEJvb3RVcEVuZ2luZUNsb2NrOwkJICAgIC8vaW4gMTBrSHogdW5pdAorICBVTE9ORwkgICAgICAgICAgICAgICAgICAgICAgICAgIHVsQm9vdFVwTWVtb3J5Q2xvY2s7CQkgICAgLy9pbiAxMGtIeiB1bml0CisgIFVMT05HCSAgICAgICAgICAgICAgICAgICAgICAgICAgdWxNYXhTeXN0ZW1NZW1vcnlDbG9jazsJICAgIC8vaW4gMTBrSHogdW5pdAorICBVTE9ORwkgICAgICAgICAgICAgICAgICAgICAgICAgIHVsTWluU3lzdGVtTWVtb3J5Q2xvY2s7CSAgICAvL2luIDEwa0h6IHVuaXQKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y051bWJlck9mQ3ljbGVzSW5QZXJpb2RIaTsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y0xDRFRpbWluZ1NlbDsgICAgICAgICAgICAgLy89MDpub3QgdmFsaWQuIT0wIHNlbCB0aGlzIHRpbWluZyBkZXNjcmlwdG9yIGZyb20gTENEIEVESUQuCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNSZXNlcnZlZDE7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNJbnRlck5CVm9sdGFnZUxvdzsgICAgICAgIC8vQW4gaW50ZXJtaWRpYXRlIFBNVyB2YWx1ZSB0byBzZXQgdGhlIHZvbHRhZ2UgCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNJbnRlck5CVm9sdGFnZUhpZ2g7ICAgICAgIC8vQW5vdGhlciBpbnRlcm1pZGlhdGUgUE1XIHZhbHVlIHRvIHNldCB0aGUgdm9sdGFnZSAKKyAgVUxPTkcJICAgICAgICAgICAgICAgICAgICAgICAgICB1bFJlc2VydmVkWzJdOwogCi0JVVNIT1JUIHVzRlNCQ2xvY2s7CS8qIEluIE1IeiB1bml0ICovCi0JVVNIT1JUIHVzQ2FwYWJpbGl0eUZsYWc7CS8qIEJpdDA9MSBpbmRpY2F0ZXMgdGhlIGZha2UgSERNSSBzdXBwb3J0LEJpdDE9MC8xIGZvciBEeW5hbWljIGNsb2NraW5nIGRpcy9lbmFibGUgKi8KLQkvKiBCaXRbMzoyXT09IDA6Tm8gUENJRSBjYXJkLCAxOkFDIGNhcmQsIDI6U0RWTyBjYXJkICovCi0JLyogQml0WzRdPT0xOiBQLzIgbW9kZSwgPT0wOiBQLzEgbW9kZSAqLwotCVVTSE9SVCB1c1BDSUVOQkNmZ1JlZzc7CS8qIGJpdFs3OjBdPU1VWF9TZWwsIGJpdFs5OjhdPU1VWF9TRUxfTEVWRUwyLCBiaXRbMTBdPUxhbmVfUmV2ZXJzYWwgKi8KLQlVU0hPUlQgdXNLOE1lbW9yeUNsb2NrOwkvKiBpbiBNSHogdW5pdCAqLwotCVVTSE9SVCB1c0s4U3luY1N0YXJ0RGVsYXk7CS8qIGluIDAuMDEgdXMgdW5pdCAqLwotCVVTSE9SVCB1c0s4RGF0YVJldHVyblRpbWU7CS8qIGluIDAuMDEgdXMgdW5pdCAqLwotCVVDSEFSIHVjTWF4TkJWb2x0YWdlOwotCVVDSEFSIHVjTWluTkJWb2x0YWdlOwotCVVDSEFSIHVjTWVtb3J5VHlwZTsJLyogWzc6NF09MTpERFIxOz0yOkREUjI7PTM6RERSMy5bMzowXSBpcyByZXNlcnZlZCAqLwotCVVDSEFSIHVjTnVtYmVyT2ZDeWNsZXNJblBlcmlvZDsJLyogQ0cuRlZUSFJPVF9QV01fQ1RSTF9SRUcwLk51bWJlck9mQ3ljbGVzSW5QZXJpb2QgKi8KLQlVQ0hBUiB1Y1N0YXJ0aW5nUFdNX0hpZ2hUaW1lOwkvKiBDRy5GVlRIUk9UX1BXTV9DVFJMX1JFRzAuU3RhcnRpbmdQV01fSGlnaFRpbWUgKi8KLQlVQ0hBUiB1Y0hUTGlua1dpZHRoOwkvKiAxNiBiaXQgdnMuIDggYml0ICovCi0JVUNIQVIgdWNNYXhOQlZvbHRhZ2VIaWdoOwotCVVDSEFSIHVjTWluTkJWb2x0YWdlSGlnaDsKLX0gQVRPTV9JTlRFR1JBVEVEX1NZU1RFTV9JTkZPOworICBVU0hPUlQJICAgICAgICAgICAgICAgICAgICAgICAgdXNGU0JDbG9jazsJCQkgICAgICAgICAgICAvL0luIE1IeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgdXNDYXBhYmlsaXR5RmxhZzsJCSAgICAgICAgLy9CaXQwPTEgaW5kaWNhdGVzIHRoZSBmYWtlIEhETUkgc3VwcG9ydCxCaXQxPTAvMSBmb3IgRHluYW1pYyBjbG9ja2luZyBkaXMvZW5hYmxlCisJCQkJCQkJCQkJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9CaXRbMzoyXT09IDA6Tm8gUENJRSBjYXJkLCAxOkFDIGNhcmQsIDI6U0RWTyBjYXJkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQml0WzRdPT0xOiBQLzIgbW9kZSwgPT0wOiBQLzEgbW9kZQorICBVU0hPUlQJICAgICAgICAgICAgICAgICAgICAgICAgdXNQQ0lFTkJDZmdSZWc3OwkJCQkgICAgLy9iaXRbNzowXT1NVVhfU2VsLCBiaXRbOTo4XT1NVVhfU0VMX0xFVkVMMiwgYml0WzEwXT1MYW5lX1JldmVyc2FsCisgIFVTSE9SVAkgICAgICAgICAgICAgICAgICAgICAgICB1c0s4TWVtb3J5Q2xvY2s7ICAgICAgICAgICAgLy9pbiBNSHogdW5pdAorICBVU0hPUlQJICAgICAgICAgICAgICAgICAgICAgICAgdXNLOFN5bmNTdGFydERlbGF5OyAgICAgICAgIC8vaW4gMC4wMSB1cyB1bml0CisgIFVTSE9SVAkgICAgICAgICAgICAgICAgICAgICAgICB1c0s4RGF0YVJldHVyblRpbWU7ICAgICAgICAgLy9pbiAwLjAxIHVzIHVuaXQKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y01heE5CVm9sdGFnZTsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y01pbk5CVm9sdGFnZTsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y01lbW9yeVR5cGU7CQkJCQkgICAgICAvL1s3OjRdPTE6RERSMTs9MjpERFIyOz0zOkREUjMuWzM6MF0gaXMgcmVzZXJ2ZWQKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y051bWJlck9mQ3ljbGVzSW5QZXJpb2Q7CQkvL0NHLkZWVEhST1RfUFdNX0NUUkxfUkVHMC5OdW1iZXJPZkN5Y2xlc0luUGVyaW9kIAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjU3RhcnRpbmdQV01fSGlnaFRpbWU7ICAgICAvL0NHLkZWVEhST1RfUFdNX0NUUkxfUkVHMC5TdGFydGluZ1BXTV9IaWdoVGltZQorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjSFRMaW5rV2lkdGg7ICAgICAgICAgICAgICAvLzE2IGJpdCB2cy4gOCBiaXQKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y01heE5CVm9sdGFnZUhpZ2g7ICAgIAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjTWluTkJWb2x0YWdlSGlnaDsKK31BVE9NX0lOVEVHUkFURURfU1lTVEVNX0lORk87CiAKIC8qIEV4cGxhbmF0aW9uIG9uIGVudHJpZXMgaW4gQVRPTV9JTlRFR1JBVEVEX1NZU1RFTV9JTkZPCi11bEJvb3RVcE1lbW9yeUNsb2NrOiAgICBGb3IgSW50ZWwgSUdQLGl0J3MgdGhlIFVNQSBzeXN0ZW0gbWVtb3J5IGNsb2NrCit1bEJvb3RVcE1lbW9yeUNsb2NrOiAgICBGb3IgSW50ZWwgSUdQLGl0J3MgdGhlIFVNQSBzeXN0ZW0gbWVtb3J5IGNsb2NrIAogICAgICAgICAgICAgICAgICAgICAgICAgRm9yIEFNRCBJR1AsaXQncyAwIGlmIG5vIFNpZGVQb3J0IG1lbW9yeSBpbnN0YWxsZWQgb3IgaXQncyB0aGUgYm9vdC11cCBTaWRlUG9ydCBtZW1vcnkgY2xvY2sKIHVsTWF4U3lzdGVtTWVtb3J5Q2xvY2s6IEZvciBJbnRlbCBJR1AsaXQncyB0aGUgTWF4IGZyZXEgZnJvbSBtZW1vcnkgU1BEIGlmIG1lbW9yeSBydW5zIGluIEFTWU5DIG1vZGUgb3Igb3RoZXJ3aXNlIChTWU5DIG1vZGUpIGl0J3MgMAogICAgICAgICAgICAgICAgICAgICAgICAgRm9yIEFNRCBJR1AsZm9yIG5vdyB0aGlzIGNhbiBiZSAwCi11bE1pblN5c3RlbU1lbW9yeUNsb2NrOiBGb3IgSW50ZWwgSUdQLGl0J3MgMTMzTUh6IGlmIG1lbW9yeSBydW5zIGluIEFTWU5DIG1vZGUgb3Igb3RoZXJ3aXNlIChTWU5DIG1vZGUpIGl0J3MgMAordWxNaW5TeXN0ZW1NZW1vcnlDbG9jazogRm9yIEludGVsIElHUCxpdCdzIDEzM01IeiBpZiBtZW1vcnkgcnVucyBpbiBBU1lOQyBtb2RlIG9yIG90aGVyd2lzZSAoU1lOQyBtb2RlKSBpdCdzIDAgCiAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgQU1EIElHUCxmb3Igbm93IHRoaXMgY2FuIGJlIDAKIAotdXNGU0JDbG9jazogICAgICAgICAgICAgRm9yIEludGVsIElHUCxpdCdzIEZTQiBGcmVxCit1c0ZTQkNsb2NrOiAgICAgICAgICAgICBGb3IgSW50ZWwgSUdQLGl0J3MgRlNCIEZyZXEgCiAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgQU1EIElHUCxpdCdzIEhUIExpbmsgU3BlZWQKIAogdXNLOE1lbW9yeUNsb2NrOiAgICAgICAgRm9yIEFNRCBJR1Agb25seS4gRm9yIFJldkYgQ1BVLCBzZXQgaXQgdG8gMjAwCkBAIC0xNjg3LDk4ICsyMDkzLDExMyBAQAogdWNNYXhOQlZvbHRhZ2U6ICAgICAgICAgVm9sdGFnZSByZWd1bGF0b3IgZGVwZW5kZW50IFBXTSB2YWx1ZS4gTG93IDggYml0cyBvZiB0aGUgdmFsdWUgZm9yIHRoZSBtYXggdm9sdGFnZS5TZXQgdGhpcyBvbmUgdG8gMHhGRiBpZiBWQyB3aXRob3V0IFBXTS4gU2V0IHRoaXMgdG8gMHgwIGlmIG5vIFZDIGF0IGFsbC4KIHVjTWluTkJWb2x0YWdlOiAgICAgICAgIFZvbHRhZ2UgcmVndWxhdG9yIGRlcGVuZGVudCBQV00gdmFsdWUuIExvdyA4IGJpdHMgb2YgdGhlIHZhbHVlIGZvciB0aGUgbWluIHZvbHRhZ2UuU2V0IHRoaXMgb25lIHRvIDB4MDAgaWYgVkMgd2l0aG91dCBQV00gb3Igbm8gVkMgYXQgYWxsLgogCi11Y051bWJlck9mQ3ljbGVzSW5QZXJpb2Q6ICAgSW5kaWNhdGUgaG93IG1hbnkgY3ljbGVzIHdoZW4gUFdNIGR1dHkgaXMgMTAwJS4gbG93IDggYml0cyBvZiB0aGUgdmFsdWUuCi11Y051bWJlck9mQ3ljbGVzSW5QZXJpb2RIaTogSW5kaWNhdGUgaG93IG1hbnkgY3ljbGVzIHdoZW4gUFdNIGR1dHkgaXMgMTAwJS4gaGlnaCA4IGJpdHMgb2YgdGhlIHZhbHVlLklmIHRoZSBQV00gaGFzIGFuIGludmVydGVyLHNldCBiaXQgWzddPT0xLG90aGVyd2lzZSBzZXQgaXQgMAordWNOdW1iZXJPZkN5Y2xlc0luUGVyaW9kOiAgIEluZGljYXRlIGhvdyBtYW55IGN5Y2xlcyB3aGVuIFBXTSBkdXR5IGlzIDEwMCUuIGxvdyA4IGJpdHMgb2YgdGhlIHZhbHVlLiAKK3VjTnVtYmVyT2ZDeWNsZXNJblBlcmlvZEhpOiBJbmRpY2F0ZSBob3cgbWFueSBjeWNsZXMgd2hlbiBQV00gZHV0eSBpcyAxMDAlLiBoaWdoIDggYml0cyBvZiB0aGUgdmFsdWUuSWYgdGhlIFBXTSBoYXMgYW4gaW52ZXJ0ZXIsc2V0IGJpdCBbN109PTEsb3RoZXJ3aXNlIHNldCBpdCAwIAogCiB1Y01heE5CVm9sdGFnZUhpZ2g6ICAgICBWb2x0YWdlIHJlZ3VsYXRvciBkZXBlbmRlbnQgUFdNIHZhbHVlLiBIaWdoIDggYml0cyBvZiAgdGhlIHZhbHVlIGZvciB0aGUgbWF4IHZvbHRhZ2UuU2V0IHRoaXMgb25lIHRvIDB4RkYgaWYgVkMgd2l0aG91dCBQV00uIFNldCB0aGlzIHRvIDB4MCBpZiBubyBWQyBhdCBhbGwuCiB1Y01pbk5CVm9sdGFnZUhpZ2g6ICAgICBWb2x0YWdlIHJlZ3VsYXRvciBkZXBlbmRlbnQgUFdNIHZhbHVlLiBIaWdoIDggYml0cyBvZiB0aGUgdmFsdWUgZm9yIHRoZSBtaW4gdm9sdGFnZS5TZXQgdGhpcyBvbmUgdG8gMHgwMCBpZiBWQyB3aXRob3V0IFBXTSBvciBubyBWQyBhdCBhbGwuCiAKKwogdXNJbnRlck5CVm9sdGFnZUxvdzogICAgVm9sdGFnZSByZWd1bGF0b3IgZGVwZW5kZW50IFBXTSB2YWx1ZS4gVGhlIHZhbHVlIG1ha2VzIHRoZSB0aGUgdm9sdGFnZSA+PU1pbiBOQiB2b2x0YWdlIGJ1dCA8PUludGVyTkJWb2x0YWdlSGlnaC4gU2V0IHRoaXMgdG8gMHgwMDAwIGlmIFZDIHdpdGhvdXQgUFdNIG9yIG5vIFZDIGF0IGFsbC4KIHVzSW50ZXJOQlZvbHRhZ2VIaWdoOiAgIFZvbHRhZ2UgcmVndWxhdG9yIGRlcGVuZGVudCBQV00gdmFsdWUuIFRoZSB2YWx1ZSBtYWtlcyB0aGUgdGhlIHZvbHRhZ2UgPj1JbnRlck5CVm9sdGFnZUxvdyBidXQgPD1NYXggTkIgdm9sdGFnZS5TZXQgdGhpcyB0byAweDAwMDAgaWYgVkMgd2l0aG91dCBQV00gb3Igbm8gVkMgYXQgYWxsLgogKi8KIAorCiAvKgogVGhlIGZvbGxvd2luZyBJR1AgdGFibGUgaXMgaW50cm9kdWNlZCBmcm9tIFJTNzgwLCB3aGljaCBpcyBzdXBwb3NlZCB0byBiZSBwdXQgYnkgU0JJT1MgaW4gRkIgYmVmb3JlIElHUCBWQklPUyBzdGFydHMgVlBPU1Q7Ci1UaGVuIFZCSU9TIHdpbGwgY29weSB0aGUgd2hvbGUgc3RydWN0dXJlIHRvIGl0cyBpbWFnZSBzbyBhbGwgR1BVIFNXIGNvbXBvbmVudHMgY2FuIGFjY2VzcyB0aGlzIGRhdGEgc3RydWN0dXJlIHRvIGdldCB3aGF0ZXZlciB0aGV5IG5lZWQuCitUaGVuIFZCSU9TIHdpbGwgY29weSB0aGUgd2hvbGUgc3RydWN0dXJlIHRvIGl0cyBpbWFnZSBzbyBhbGwgR1BVIFNXIGNvbXBvbmVudHMgY2FuIGFjY2VzcyB0aGlzIGRhdGEgc3RydWN0dXJlIHRvIGdldCB3aGF0ZXZlciB0aGV5IG5lZWQuIAogVGhlIGVub3VnaCByZXNlcnZhdGlvbiBzaG91bGQgYWxsb3cgdXMgdG8gbmV2ZXIgY2hhbmdlIHRhYmxlIHJldmlzaW9ucy4gV2hlbmV2ZXIgbmVlZGVkLCBhIEdQVSBTVyBjb21wb25lbnQgY2FuIHVzZSByZXNlcnZlZCBwb3J0aW9uIGZvciBuZXcgZGF0YSBlbnRyaWVzLgogCiBTVyBjb21wb25lbnRzIGNhbiBhY2Nlc3MgdGhlIElHUCBzeXN0ZW0gaW5mb3Igc3RydWN0dXJlIGluIHRoZSBzYW1lIHdheSBhcyBiZWZvcmUKICovCiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0lOVEVHUkFURURfU1lTVEVNX0lORk9fVjIgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVMT05HIHVsQm9vdFVwRW5naW5lQ2xvY2s7CS8qIGluIDEwa0h6IHVuaXQgKi8KLQlVTE9ORyB1bFJlc2VydmVkMVsyXTsJLyogbXVzdCBiZSAweDAgZm9yIHRoZSByZXNlcnZlZCAqLwotCVVMT05HIHVsQm9vdFVwVU1BQ2xvY2s7CS8qIGluIDEwa0h6IHVuaXQgKi8KLQlVTE9ORyB1bEJvb3RVcFNpZGVQb3J0Q2xvY2s7CS8qIGluIDEwa0h6IHVuaXQgKi8KLQlVTE9ORyB1bE1pblNpZGVQb3J0Q2xvY2s7CS8qIGluIDEwa0h6IHVuaXQgKi8KLQlVTE9ORyB1bFJlc2VydmVkMls2XTsJLyogbXVzdCBiZSAweDAgZm9yIHRoZSByZXNlcnZlZCAqLwotCVVMT05HIHVsU3lzdGVtQ29uZmlnOwkvKiBzZWUgZXhwbGFuYXRpb24gYmVsb3cgKi8KLQlVTE9ORyB1bEJvb3RVcFJlcURpc3BsYXlWZWN0b3I7Ci0JVUxPTkcgdWxPdGhlckRpc3BsYXlNaXNjOwotCVVMT05HIHVsRERJU2xvdDFDb25maWc7Ci0JVUxPTkcgdWxERElTbG90MkNvbmZpZzsKLQlVQ0hBUiB1Y01lbW9yeVR5cGU7CS8qIFszOjBdPTE6RERSMTs9MjpERFIyOz0zOkREUjMuWzc6NF0gaXMgcmVzZXJ2ZWQgKi8KLQlVQ0hBUiB1Y1VNQUNoYW5uZWxOdW1iZXI7Ci0JVUNIQVIgdWNEb2NraW5nUGluQml0OwotCVVDSEFSIHVjRG9ja2luZ1BpblBvbGFyaXR5OwotCVVMT05HIHVsRG9ja2luZ1BpbkNGR0luZm87Ci0JVUxPTkcgdWxDUFVDYXBJbmZvOwotCVVTSE9SVCB1c051bWJlck9mQ3ljbGVzSW5QZXJpb2Q7Ci0JVVNIT1JUIHVzTWF4TkJWb2x0YWdlOwotCVVTSE9SVCB1c01pbk5CVm9sdGFnZTsKLQlVU0hPUlQgdXNCb290VXBOQlZvbHRhZ2U7Ci0JVUxPTkcgdWxIVExpbmtGcmVxOwkvKiBpbiAxMEtoeiAqLwotCVVTSE9SVCB1c01pbkhUTGlua1dpZHRoOwotCVVTSE9SVCB1c01heEhUTGlua1dpZHRoOwotCVVTSE9SVCB1c1VNQVN5bmNTdGFydERlbGF5OwotCVVTSE9SVCB1c1VNQURhdGFSZXR1cm5UaW1lOwotCVVTSE9SVCB1c0xpbmtTdGF0dXNaZXJvVGltZTsKLQlVU0hPUlQgdXNSZXNlcnZlZDsKLQlVTE9ORyB1bEhpZ2hWb2x0YWdlSFRMaW5rRnJlcTsJLyogIGluIDEwS2h6ICovCi0JVUxPTkcgdWxMb3dWb2x0YWdlSFRMaW5rRnJlcTsJLyogIGluIDEwS2h6ICovCi0JVVNIT1JUIHVzTWF4VXBTdHJlYW1IVExpbmtXaWR0aDsKLQlVU0hPUlQgdXNNYXhEb3duU3RyZWFtSFRMaW5rV2lkdGg7Ci0JVVNIT1JUIHVzTWluVXBTdHJlYW1IVExpbmtXaWR0aDsKLQlVU0hPUlQgdXNNaW5Eb3duU3RyZWFtSFRMaW5rV2lkdGg7Ci0JVUxPTkcgdWxSZXNlcnZlZDNbOTddOwkvKiBtdXN0IGJlIDB4MCAqLwotfSBBVE9NX0lOVEVHUkFURURfU1lTVEVNX0lORk9fVjI7CisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0lOVEVHUkFURURfU1lTVEVNX0lORk9fVjIKK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSICAgc0hlYWRlcjsKKyAgVUxPTkcJICAgICAgICAgICAgICAgICAgICAgdWxCb290VXBFbmdpbmVDbG9jazsgICAgICAgLy9pbiAxMGtIeiB1bml0CisgIFVMT05HCQkJICAgICB1bFJlc2VydmVkMVsyXTsgICAgICAgICAgICAvL211c3QgYmUgMHgwIGZvciB0aGUgcmVzZXJ2ZWQKKyAgVUxPTkcJICAgICAgICAgICAgICAgICAgICAgdWxCb290VXBVTUFDbG9jazsgICAgICAgICAgLy9pbiAxMGtIeiB1bml0CisgIFVMT05HCSAgICAgICAgICAgICAgICAgICAgIHVsQm9vdFVwU2lkZVBvcnRDbG9jazsgICAgIC8vaW4gMTBrSHogdW5pdAorICBVTE9ORwkgICAgICAgICAgICAgICAgICAgICB1bE1pblNpZGVQb3J0Q2xvY2s7ICAgICAgICAvL2luIDEwa0h6IHVuaXQKKyAgVUxPTkcJCQkgICAgIHVsUmVzZXJ2ZWQyWzZdOyAgICAgICAgICAgIC8vbXVzdCBiZSAweDAgZm9yIHRoZSByZXNlcnZlZAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bFN5c3RlbUNvbmZpZzsgICAgICAgICAgICAvL3NlZSBleHBsYW5hdGlvbiBiZWxvdworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bEJvb3RVcFJlcURpc3BsYXlWZWN0b3I7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgIHVsT3RoZXJEaXNwbGF5TWlzYzsKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxERElTbG90MUNvbmZpZzsKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxERElTbG90MkNvbmZpZzsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNNZW1vcnlUeXBlOyAgICAgICAgICAgICAgLy9bMzowXT0xOkREUjE7PTI6RERSMjs9MzpERFIzLls3OjRdIGlzIHJlc2VydmVkCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjVU1BQ2hhbm5lbE51bWJlcjsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNEb2NraW5nUGluQml0OworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0RvY2tpbmdQaW5Qb2xhcml0eTsKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxEb2NraW5nUGluQ0ZHSW5mbzsKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxDUFVDYXBJbmZvOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c051bWJlck9mQ3ljbGVzSW5QZXJpb2Q7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzTWF4TkJWb2x0YWdlOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c01pbk5CVm9sdGFnZTsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNCb290VXBOQlZvbHRhZ2U7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgIHVsSFRMaW5rRnJlcTsgICAgICAgICAgICAgIC8vaW4gMTBLaHoKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNNaW5IVExpbmtXaWR0aDsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNNYXhIVExpbmtXaWR0aDsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNVTUFTeW5jU3RhcnREZWxheTsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNVTUFEYXRhUmV0dXJuVGltZTsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNMaW5rU3RhdHVzWmVyb1RpbWU7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzREFDRWZ1c2U7CQkJCS8vZm9yIHN0b3JpbmcgYmFkZ2FwIHZhbHVlIChmb3IgUlM4ODAgb25seSkKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxIaWdoVm9sdGFnZUhUTGlua0ZyZXE7ICAgICAvLyBpbiAxMEtoegorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bExvd1ZvbHRhZ2VIVExpbmtGcmVxOyAgICAgIC8vIGluIDEwS2h6CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzTWF4VXBTdHJlYW1IVExpbmtXaWR0aDsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNNYXhEb3duU3RyZWFtSFRMaW5rV2lkdGg7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzTWluVXBTdHJlYW1IVExpbmtXaWR0aDsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNNaW5Eb3duU3RyZWFtSFRMaW5rV2lkdGg7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzRmlybXdhcmVWZXJzaW9uOyAgICAgICAgIC8vMCBtZWFucyBGVyBpcyBub3Qgc3VwcG9ydGVkLiBPdGhlcndpc2UgaXQncyB0aGUgRlcgdmVyc2lvbiBsb2FkZWQgYnkgU0JJT1MgYW5kIGRyaXZlciBzaG91bGQgZW5hYmxlIEZXLgorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c0Z1bGxUMFRpbWU7ICAgICAgICAgICAgIC8vIElucHV0IHRvIGNhbGN1bGF0ZSBtaW5pbXVtIEhUIGxpbmsgY2hhbmdlIHRpbWUgcmVxdWlyZWQgYnkgTkIgUC1TdGF0ZS4gVW5pdCBpcyAwLjAxdXMuCisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgIHVsUmVzZXJ2ZWQzWzk2XTsgICAgICAgICAgLy9tdXN0IGJlIDB4MAorfUFUT01fSU5URUdSQVRFRF9TWVNURU1fSU5GT19WMjsgICAKIAogLyoKIHVsQm9vdFVwRW5naW5lQ2xvY2s6ICAgQm9vdC11cCBFbmdpbmUgQ2xvY2sgaW4gMTBLaHo7CiB1bEJvb3RVcFVNQUNsb2NrOiAgICAgIEJvb3QtdXAgVU1BIENsb2NrIGluIDEwS2h6OyBpdCBtdXN0IGJlIDB4MCB3aGVuIFVNQSBpcyBub3QgcHJlc2VudAogdWxCb290VXBTaWRlUG9ydENsb2NrOiBCb290LXVwIFNpZGVQb3J0IENsb2NrIGluIDEwS2h6OyBpdCBtdXN0IGJlIDB4MCB3aGVuIFNpZGVQb3J0IE1lbW9yeSBpcyBub3QgcHJlc2VudCx0aGlzIGNvdWxkIGJlIGVxdWFsIHRvIG9yIGxlc3MgdGhhbiBtYXhpbXVtIHN1cHBvcnRlZCBTaWRlcG9ydCBtZW1vcnkgY2xvY2sKIAotdWxTeXN0ZW1Db25maWc6Ci1CaXRbMF09MTogUG93ZXJFeHByZXNzIG1vZGUgPTAgTm9uLVBvd2VyRXhwcmVzcyBtb2RlOwordWxTeXN0ZW1Db25maWc6ICAKK0JpdFswXT0xOiBQb3dlckV4cHJlc3MgbW9kZSA9MCBOb24tUG93ZXJFeHByZXNzIG1vZGU7IAogQml0WzFdPTE6IHN5c3RlbSBib290cyB1cCBhdCBBTUQgb3ZlcmRyaXZlZCBzdGF0ZSBvciB1c2VyIGN1c3RvbWl6ZWQgIG1vZGUuIEluIHRoaXMgY2FzZSwgZHJpdmVyIHdpbGwganVzdCBzdGljayB0byB0aGlzIGJvb3QtdXAgbW9kZS4gTm8gb3RoZXIgUG93ZXJQbGF5IHN0YXRlCiAgICAgICA9MDogc3lzdGVtIGJvb3RzIHVwIGF0IGRyaXZlciBjb250cm9sIHN0YXRlLiBQb3dlciBzdGF0ZSBkZXBlbmRzIG9uIFBvd2VyUGxheSB0YWJsZS4KIEJpdFsyXT0xOiBQV00gbWV0aG9kIGlzIHVzZWQgb24gTkIgdm9sdGFnZSBjb250cm9sLiA9MDogR1BJTyBtZXRob2QgaXMgdXNlZC4KIEJpdFszXT0xOiBPbmx5IG9uZSBwb3dlciBzdGF0ZShQZXJmb3JtYW5jZSkgd2lsbCBiZSBzdXBwb3J0ZWQuCiAgICAgICA9MDogTXVsdGlwbGUgcG93ZXIgc3RhdGVzIHN1cHBvcnRlZCBmcm9tIFBvd2VyUGxheSB0YWJsZS4KLUJpdFs0XT0xOiBDTE1DIGlzIHN1cHBvcnRlZCBhbmQgZW5hYmxlZCBvbiBjdXJyZW50IHN5c3RlbS4KLSAgICAgID0wOiBDTE1DIGlzIG5vdCBzdXBwb3J0ZWQgb3IgZW5hYmxlZCBvbiBjdXJyZW50IHN5c3RlbS4gU0JJT1MgbmVlZCB0byBzdXBwb3J0IEhUIGxpbmsvZnJlcSBjaGFuZ2UgdGhyb3VnaCBBVElGIGludGVyZmFjZS4KLUJpdFs1XT0xOiBFbmFibGUgQ0RMVyBmb3IgYWxsIGRyaXZlciBjb250cm9sIHBvd2VyIHN0YXRlcy4gTWF4IEhUIHdpZHRoIGlzIGZyb20gU0JJT1MsIHdoaWxlIE1pbiBIVCB3aWR0aCBpcyBkZXRlcm1pbmVkIGJ5IGRpc3BsYXkgcmVxdWlyZW1lbnQuCitCaXRbNF09MTogQ0xNQyBpcyBzdXBwb3J0ZWQgYW5kIGVuYWJsZWQgb24gY3VycmVudCBzeXN0ZW0uIAorICAgICAgPTA6IENMTUMgaXMgbm90IHN1cHBvcnRlZCBvciBlbmFibGVkIG9uIGN1cnJlbnQgc3lzdGVtLiBTQklPUyBuZWVkIHRvIHN1cHBvcnQgSFQgbGluay9mcmVxIGNoYW5nZSB0aHJvdWdoIEFUSUYgaW50ZXJmYWNlLiAgCitCaXRbNV09MTogRW5hYmxlIENETFcgZm9yIGFsbCBkcml2ZXIgY29udHJvbCBwb3dlciBzdGF0ZXMuIE1heCBIVCB3aWR0aCBpcyBmcm9tIFNCSU9TLCB3aGlsZSBNaW4gSFQgd2lkdGggaXMgZGV0ZXJtaW5lZCBieSBkaXNwbGF5IHJlcXVpcmVtZW50LiAgCiAgICAgICA9MDogQ0RMVyBpcyBkaXNhYmxlZC4gSWYgQ0xNQyBpcyBlbmFibGVkIGNhc2UsIE1pbiBIVCB3aWR0aCB3aWxsIGJlIHNldCBlcXVhbCB0byBNYXggSFQgd2lkdGguIElmIENMTUMgZGlzYWJsZWQgY2FzZSwgTWF4IEhUIHdpZHRoIHdpbGwgYmUgYXBwbGllZC4KIEJpdFs2XT0xOiBIaWdoIFZvbHRhZ2UgcmVxdWVzdGVkIGZvciBhbGwgcG93ZXIgc3RhdGVzLiBJbiB0aGlzIGNhc2UsIHZvbHRhZ2Ugd2lsbCBiZSBmb3JjZWQgYXQgMS4xdiBhbmQgcG93ZXJwbGF5IHRhYmxlIHZvbHRhZ2UgZHJvcC90aHJvdHRsaW5nIHJlcXVlc3Qgd2lsbCBiZSBpZ25vcmVkLgogICAgICAgPTA6IFZvbHRhZ2Ugc2V0dGluZ3MgaXMgZGV0ZXJtaW5lZCBieSBwb3dlcnBsYXkgdGFibGUuCiBCaXRbN109MTogRW5hYmxlIENMTUMgYXMgaHlicmlkIE1vZGUuIENETEQgYW5kIENJTFIgd2lsbCBiZSBkaXNhYmxlZCBpbiB0aGlzIGNhc2UgYW5kIHdlJ3JlIHVzaW5nIGxlZ2FjeSBDMUUuIFRoaXMgaXMgd29ya2Fyb3VuZCBmb3IgQ1BVKEdyaWZmaW4pIHBlcmZvcm1hbmNlIGlzc3VlLgogICAgICAgPTA6IEVuYWJsZSBDTE1DIGFzIHJlZ3VsYXIgbW9kZSwgQ0RMRCBhbmQgQ0lMUiB3aWxsIGJlIGVuYWJsZWQuCitCaXRbOF09MTogQ0RMRiBpcyBzdXBwb3J0ZWQgYW5kIGVuYWJsZWQgb24gY3VycmVudCBzeXN0ZW0uCisgICAgICA9MDogQ0RMRiBpcyBub3Qgc3VwcG9ydGVkIG9yIGVuYWJsZWQgb24gY3VycmVudCBzeXN0ZW0uCitCaXRbOV09MTogRExMIFNodXQgRG93biBmZWF0dXJlIGlzIGVuYWJsZWQgb24gY3VycmVudCBzeXN0ZW0uCisgICAgICA9MDogRExMIFNodXQgRG93biBmZWF0dXJlIGlzIG5vdCBlbmFibGVkIG9yIHN1cHBvcnRlZCBvbiBjdXJyZW50IHN5c3RlbS4KIAogdWxCb290VXBSZXFEaXNwbGF5VmVjdG9yOiBUaGlzIGR3b3JkIGlzIGEgYml0IHZlY3RvciBpbmRpY2F0ZXMgd2hhdCBkaXNwbGF5IGRldmljZXMgYXJlIHJlcXVlc3RlZCBkdXJpbmcgYm9vdC11cC4gUmVmZXIgdG8gQVRPTV9ERVZJQ0VfeHh4X1NVUFBPUlQgZm9yIHRoZSBiaXQgdmVjdG9yIGRlZmluaXRpb25zLgogCiB1bE90aGVyRGlzcGxheU1pc2M6IFsxNTo4XS0gQm9vdHVwIExDRCBFeHBhbnNpb24gc2VsZWN0aW9uOyAwLWNlbnRlciwgMS1mdWxsIHBhbmVsIHNpemUgZXhwYW5zaW9uOwotCQkJICAgICAgICAgICAgICBbNzowXSAtIEJvb3R1cFRWIHN0YW5kYXJkIHNlbGVjdGlvbjsgVGhpcyBpcyBhIGJpdCB2ZWN0b3IgdG8gaW5kaWNhdGUgd2hhdCBUViBzdGFuZGFyZHMgYXJlIHN1cHBvcnRlZCBieSB0aGUgc3lzdGVtLiBSZWZlciB0byB1Y1RWU3VwcHBvcnRlZFN0ZCBkZWZpbml0aW9uOworCQkJICAgICAgICAgICAgICBbNzowXSAtIEJvb3R1cFRWIHN0YW5kYXJkIHNlbGVjdGlvbjsgVGhpcyBpcyBhIGJpdCB2ZWN0b3IgdG8gaW5kaWNhdGUgd2hhdCBUViBzdGFuZGFyZHMgYXJlIHN1cHBvcnRlZCBieSB0aGUgc3lzdGVtLiBSZWZlciB0byB1Y1RWU3VwcG9ydGVkU3RkIGRlZmluaXRpb247CiAKIHVsRERJU2xvdDFDb25maWc6IERlc2NyaWJlcyB0aGUgUENJRSBsYW5lIGNvbmZpZ3VyYXRpb24gb24gdGhpcyBEREkgUENJRSBzbG90IChBREQyIGNhcmQpIG9yIGNvbm5lY3RvciAoTW9iaWxlIGRlc2lnbikuCiAgICAgICBbMzowXSAgLSBCaXQgdmVjdG9yIHRvIGluZGljYXRlIFBDSUUgbGFuZSBjb25maWcgb2YgdGhlIERESSBzbG90L2Nvbm5lY3RvciBvbiBjaGFzc2lzIChiaXQgMD0xIGxhbmUgMzowOyBiaXQgMT0xIGxhbmUgNzo0OyBiaXQgMj0xIGxhbmUgMTE6ODsgYml0IDM9MSBsYW5lIDE1OjEyKQotCQkJWzc6NF0gIC0gQml0IHZlY3RvciB0byBpbmRpY2F0ZSBQQ0lFIGxhbmUgY29uZmlnIG9mIHRoZSBzYW1lIERESSBzbG90L2Nvbm5lY3RvciBvbiBkb2NraW5nIHN0YXRpb24gKGJpdCAwPTEgbGFuZSAzOjA7IGJpdCAxPTEgbGFuZSA3OjQ7IGJpdCAyPTEgbGFuZSAxMTo4OyBiaXQgMz0xIGxhbmUgMTU6MTIpCi0JCQlbMTU6OF0gLSBMYW5lIGNvbmZpZ3VyYXRpb24gYXR0cmlidXRlOworCQkJWzc6NF0gIC0gQml0IHZlY3RvciB0byBpbmRpY2F0ZSBQQ0lFIGxhbmUgY29uZmlnIG9mIHRoZSBzYW1lIERESSBzbG90L2Nvbm5lY3RvciBvbiBkb2NraW5nIHN0YXRpb24gKGJpdCA0PTEgbGFuZSAzOjA7IGJpdCA1PTEgbGFuZSA3OjQ7IGJpdCA2PTEgbGFuZSAxMTo4OyBiaXQgNz0xIGxhbmUgMTU6MTIpCisgICAgICBXaGVuIGEgRERJIGNvbm5lY3RvciBpcyBub3QgInBhaXJlZCIgKG1lYW1pbmcgdHdvIGNvbm5lY3Rpb25zIG11dHVhbGV4Y2x1c2l2ZSBvbiBjaGFzc2lzIG9yIGRvY2tpbmcsIG9ubHkgb25lIG9mIHRoZW0gY2FuIGJlIGNvbm5lY3RlZCBhdCBvbmUgdGltZS4KKyAgICAgIGluIGJvdGggY2hhc3NpcyBhbmQgZG9ja2luZywgU0JJT1MgaGFzIHRvIGR1cGxpY2F0ZSB0aGUgc2FtZSBQQ0lFIGxhbmUgaW5mbyBmcm9tIGNoYXNzaXMgdG8gZG9ja2luZyBvciB2aWNlIHZlcnNhLiBGb3IgZXhhbXBsZToKKyAgICAgIG9uZSBEREkgY29ubmVjdG9yIGlzIG9ubHkgcG9wdWxhdGVkIGluIGRvY2tpbmcgd2l0aCBQQ0lFIGxhbmUgOC0xMSwgYnV0IHRoZXJlIGlzIG5vIHBhaXJlZCBjb25uZWN0aW9uIG9uIGNoYXNzaXMsIFNCSU9TIGhhcyB0byBjb3B5IGJpdCA2IHRvIGJpdCAyLgorCisJCQlbMTU6OF0gLSBMYW5lIGNvbmZpZ3VyYXRpb24gYXR0cmlidXRlOyAKICAgICAgIFsyMzoxNl0tIENvbm5lY3RvciB0eXBlLCBwb3NzaWJsZSB2YWx1ZToKICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfU0lOR0xFX0xJTktfRFZJX0QKICAgICAgICAgICAgICAgIENPTk5FQ1RPUl9PQkpFQ1RfSURfRFVBTF9MSU5LX0RWSV9ECiAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0hETUlfVFlQRV9BCiAgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JUCisgICAgICAgICAgICAgICBDT05ORUNUT1JfT0JKRUNUX0lEX2VEUAogCQkJWzMxOjI0XS0gUmVzZXJ2ZWQKIAogdWxERElTbG90MkNvbmZpZzogU2FtZSBhcyBTbG90MS4KQEAgLTE3ODcsMjkgKzIyMDgsMzEgQEAKIAogdWNVTUFDaGFubmVsTnVtYmVyOiAgaG93IG1hbnkgY2hhbm5lbHMgZm9yIHRoZSBVTUE7CiAKLXVsRG9ja2luZ1BpbkNGR0luZm86IFsxNTowXS1CdXMvRGV2aWNlL0Z1bmN0aW9uICMgdG8gQ0ZHIHRvIHJlYWQgdGhpcyBEb2NraW5nIFBpbjsgWzMxOjE2XS1yZWcgb2Zmc2V0IGluIENGRyB0byByZWFkIHRoaXMgcGluCit1bERvY2tpbmdQaW5DRkdJbmZvOiBbMTU6MF0tQnVzL0RldmljZS9GdW5jdGlvbiAjIHRvIENGRyB0byByZWFkIHRoaXMgRG9ja2luZyBQaW47IFszMToxNl0tcmVnIG9mZnNldCBpbiBDRkcgdG8gcmVhZCB0aGlzIHBpbiAKIHVjRG9ja2luZ1BpbkJpdDogICAgIHdoaWNoIGJpdCBpbiB0aGlzIHJlZ2lzdGVyIHRvIHJlYWQgdGhlIHBpbiBzdGF0dXM7CiB1Y0RvY2tpbmdQaW5Qb2xhcml0eTpQb2xhcml0eSBvZiB0aGUgcGluIHdoZW4gZG9ja2VkOwogCiB1bENQVUNhcEluZm86ICAgICAgICBbNzowXT0xOkdyaWZmaW47Wzc6MF09MjpHcmV5aG91bmQ7Wzc6MF09MzpLOCwgb3RoZXIgYml0cyByZXNlcnZlZCBmb3Igbm93IGFuZCBtdXN0IGJlIDB4MAogCiB1c051bWJlck9mQ3ljbGVzSW5QZXJpb2Q6SW5kaWNhdGUgaG93IG1hbnkgY3ljbGVzIHdoZW4gUFdNIGR1dHkgaXMgMTAwJS4KLXVzTWF4TkJWb2x0YWdlOk1heC4gdm9sdGFnZSBjb250cm9sIHZhbHVlIGluIGVpdGhlciBQV00gb3IgR1BJTyBtb2RlLgorCit1c01heE5CVm9sdGFnZTpNYXguIHZvbHRhZ2UgY29udHJvbCB2YWx1ZSBpbiBlaXRoZXIgUFdNIG9yIEdQSU8gbW9kZS4gCiB1c01pbk5CVm9sdGFnZTpNaW4uIHZvbHRhZ2UgY29udHJvbCB2YWx1ZSBpbiBlaXRoZXIgUFdNIG9yIEdQSU8gbW9kZS4KICAgICAgICAgICAgICAgICAgICAgR1BJTyBtb2RlOiBib3RoIHVzTWF4TkJWb2x0YWdlICYgdXNNaW5OQlZvbHRhZ2UgaGF2ZSBhIHZhbGlkIHZhbHVlIHVsU3lzdGVtQ29uZmlnLlNZU1RFTV9DT05GSUdfVVNFX1BXTV9PTl9WT0xUQUdFPTAKICAgICAgICAgICAgICAgICAgICAgUFdNIG1vZGU6IGJvdGggdXNNYXhOQlZvbHRhZ2UgJiB1c01pbk5CVm9sdGFnZSBoYXZlIGEgdmFsaWQgdmFsdWUgdWxTeXN0ZW1Db25maWcuU1lTVEVNX0NPTkZJR19VU0VfUFdNX09OX1ZPTFRBR0U9MQogICAgICAgICAgICAgICAgICAgICBHUFUgU1cgZG9uJ3QgY29udHJvbCBtb2RlOiB1c01heE5CVm9sdGFnZSAmIHVzTWluTkJWb2x0YWdlPTAgYW5kIG5vIGNhcmUgYWJvdXQgdWxTeXN0ZW1Db25maWcuU1lTVEVNX0NPTkZJR19VU0VfUFdNX09OX1ZPTFRBR0UKKwogdXNCb290VXBOQlZvbHRhZ2U6Qm9vdC11cCB2b2x0YWdlIHJlZ3VsYXRvciBkZXBlbmRlbnQgUFdNIHZhbHVlLgogCiB1bEhUTGlua0ZyZXE6ICAgICAgIEJvb3R1cCBIVCBsaW5rIEZyZXF1ZW5jeSBpbiAxMEtoei4KLXVzTWluSFRMaW5rV2lkdGg6ICAgQm9vdHVwIG1pbmltdW0gSFQgbGluayB3aWR0aC4gSWYgQ0RMVyBkaXNhYmxlZCwgdGhpcyBpcyBlcXVhbCB0byB1c01heEhUTGlua1dpZHRoLgordXNNaW5IVExpbmtXaWR0aDogICBCb290dXAgbWluaW11bSBIVCBsaW5rIHdpZHRoLiBJZiBDRExXIGRpc2FibGVkLCB0aGlzIGlzIGVxdWFsIHRvIHVzTWF4SFRMaW5rV2lkdGguIAogICAgICAgICAgICAgICAgICAgICBJZiBDRExXIGVuYWJsZWQsIGJvdGggdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gd2lkdGggc2hvdWxkIGJlIHRoZSBzYW1lIGR1cmluZyBib290dXAuCi11c01heEhUTGlua1dpZHRoOiAgIEJvb3R1cCBtYXhpbXVtIEhUIGxpbmsgd2lkdGguIElmIENETFcgZGlzYWJsZWQsIHRoaXMgaXMgZXF1YWwgdG8gdXNNaW5IVExpbmtXaWR0aC4KLSAgICAgICAgICAgICAgICAgICAgSWYgQ0RMVyBlbmFibGVkLCBib3RoIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtIHdpZHRoIHNob3VsZCBiZSB0aGUgc2FtZSBkdXJpbmcgYm9vdHVwLgordXNNYXhIVExpbmtXaWR0aDogICBCb290dXAgbWF4aW11bSBIVCBsaW5rIHdpZHRoLiBJZiBDRExXIGRpc2FibGVkLCB0aGlzIGlzIGVxdWFsIHRvIHVzTWluSFRMaW5rV2lkdGguIAorICAgICAgICAgICAgICAgICAgICBJZiBDRExXIGVuYWJsZWQsIGJvdGggdXBzdHJlYW0gYW5kIGRvd25zdHJlYW0gd2lkdGggc2hvdWxkIGJlIHRoZSBzYW1lIGR1cmluZyBib290dXAuICAKIAotdXNVTUFTeW5jU3RhcnREZWxheTogTWVtb3J5IGFjY2VzcyBsYXRlbmN5LCByZXF1aXJlZCBmb3Igd2F0ZXJtYXJrIGNhbGN1bGF0aW9uCit1c1VNQVN5bmNTdGFydERlbGF5OiBNZW1vcnkgYWNjZXNzIGxhdGVuY3ksIHJlcXVpcmVkIGZvciB3YXRlcm1hcmsgY2FsY3VsYXRpb24gCiB1c1VNQURhdGFSZXR1cm5UaW1lOiBNZW1vcnkgYWNjZXNzIGxhdGVuY3ksIHJlcXVpcmVkIGZvciB3YXRlcm1hcmsgY2FsY3VsYXRpb24KLXVzTGlua1N0YXR1c1plcm9UaW1lOk1lbW9yeSBhY2Nlc3MgbGF0ZW5jeSByZXF1aXJlZCBmb3Igd2F0ZXJtYXJrIGNhbGN1bGF0aW9uLCBzZXQgdGhpcyB0byAweDAgZm9yIEs4IENQVSwgc2V0IGEgcHJvcGVyIHZhbHVlIGluIDAuMDEgdGhlIHVuaXQgb2YgdXMKK3VzTGlua1N0YXR1c1plcm9UaW1lOk1lbW9yeSBhY2Nlc3MgbGF0ZW5jeSByZXF1aXJlZCBmb3Igd2F0ZXJtYXJrIGNhbGN1bGF0aW9uLCBzZXQgdGhpcyB0byAweDAgZm9yIEs4IENQVSwgc2V0IGEgcHJvcGVyIHZhbHVlIGluIDAuMDEgdGhlIHVuaXQgb2YgdXMgCiBmb3IgR3JpZmZpbiBvciBHcmV5aG91bmQuIFNCSU9TIG5lZWRzIHRvIGNvbnZlcnQgdG8gYWN0dWFsIHRpbWUgYnk6CiAgICAgICAgICAgICAgICAgICAgICBpZiBUMFR0aW1lIFs1OjRdPTAwYiwgdGhlbiB1c0xpbmtTdGF0dXNaZXJvVGltZT1UMFR0aW1lIFszOjBdKjAuMXVzICgwLjAgdG8gMS41dXMpCiAgICAgICAgICAgICAgICAgICAgICBpZiBUMFR0aW1lIFs1OjRdPTAxYiwgdGhlbiB1c0xpbmtTdGF0dXNaZXJvVGltZT1UMFR0aW1lIFszOjBdKjAuNXVzICgwLjAgdG8gNy41dXMpCkBAIC0xODE3LDcgKzIyNDAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgaWYgVDBUdGltZSBbNTo0XT0xMWIsIGFuZCBUMFR0aW1lIFszOjBdPTB4MCB0byAweGEsIHRoZW4gdXNMaW5rU3RhdHVzWmVyb1RpbWU9VDBUdGltZSBbMzowXSoyMHVzICgwLjAgdG8gMjAwdXMpCiAKIHVsSGlnaFZvbHRhZ2VIVExpbmtGcmVxOiAgICAgSFQgbGluayBmcmVxdWVuY3kgZm9yIHBvd2VyIHN0YXRlIHdpdGggbG93IHZvbHRhZ2UuIElmIGJvb3QgdXAgcnVucyBpbiBIVDEsIHRoaXMgbXVzdCBiZSAwLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHVsSFRMaW5rRnJlcShib290dXAgZnJlcXVlbmN5KS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB1bEhUTGlua0ZyZXEoYm9vdHVwIGZyZXF1ZW5jeSkuIAogdWxMb3dWb2x0YWdlSFRMaW5rRnJlcTogICAgICBIVCBsaW5rIGZyZXF1ZW5jeSBmb3IgcG93ZXIgc3RhdGUgd2l0aCBsb3cgdm9sdGFnZSBvciB2b2x0YWdlIHNjYWxpbmcgMS4wdn4xLjF2LiBJZiBib290IHVwIHJ1bnMgaW4gSFQxLCB0aGlzIG11c3QgYmUgMC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB1bEhpZ2hWb2x0YWdlSFRMaW5rRnJlcS4KIApAQCAtMTgyNywxNCArMjI1MCwxNyBAQAogdXNNaW5Eb3duU3RyZWFtSFRMaW5rV2lkdGg6ICBzYW1lIGFzIGFib3ZlLgogKi8KIAorCiAjZGVmaW5lIFNZU1RFTV9DT05GSUdfUE9XRVJFWFBSRVNTX0VOQUJMRSAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQogI2RlZmluZSBTWVNURU1fQ09ORklHX1JVTl9BVF9PVkVSRFJJVkVfRU5HSU5FICAgICAgICAgICAgIDB4MDAwMDAwMDIKLSNkZWZpbmUgU1lTVEVNX0NPTkZJR19VU0VfUFdNX09OX1ZPTFRBR0UgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFNZU1RFTV9DT05GSUdfVVNFX1BXTV9PTl9WT0xUQUdFICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAKICNkZWZpbmUgU1lTVEVNX0NPTkZJR19QRVJGT1JNQU5DRV9QT1dFUlNUQVRFX09OTFkgICAgICAgICAweDAwMDAwMDA4CiAjZGVmaW5lIFNZU1RFTV9DT05GSUdfQ0xNQ19FTkFCTEVEICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMAogI2RlZmluZSBTWVNURU1fQ09ORklHX0NETFdfRU5BQkxFRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKICNkZWZpbmUgU1lTVEVNX0NPTkZJR19ISUdIX1ZPTFRBR0VfUkVRVUVTVEVEICAgICAgICAgICAgICAweDAwMDAwMDQwCiAjZGVmaW5lIFNZU1RFTV9DT05GSUdfQ0xNQ19IWUJSSURfTU9ERV9FTkFCTEVEICAgICAgICAgICAgMHgwMDAwMDA4MAorI2RlZmluZSBTWVNURU1fQ09ORklHX0NETEZfRU5BQkxFRCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgU1lTVEVNX0NPTkZJR19ETExfU0hVVERPV05fRU5BQkxFRCAgICAgICAgICAgICAgICAweDAwMDAwMjAwCiAKICNkZWZpbmUgSUdQX0RESV9TTE9UX0xBTkVfQ09ORklHX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGCiAKQEAgLTE4NTEsNiArMjI3Nyw0MSBAQAogCiAjZGVmaW5lIElHUF9ERElfU0xPVF9DT05ORUNUT1JfVFlQRV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMEZGMDAwMAogCisvLyBJbnRlZ3JhdGVkU3lzdGVtSW5mb1RhYmxlIG5ldyBSZXYgaXMgVjUgYWZ0ZXIgVjIsIGJlY2F1c2Ugb2YgdGhlIHJlYWwgcmV2IG9mIFYyIGlzIHYxLjQuIFRoaXMgcmV2IGlzIHVzZWQgZm9yIFJSCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9JTlRFR1JBVEVEX1NZU1RFTV9JTkZPX1Y1Cit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgIHNIZWFkZXI7CisgIFVMT05HCSAgICAgICAgICAgICAgICAgICAgIHVsQm9vdFVwRW5naW5lQ2xvY2s7ICAgICAgIC8vaW4gMTBrSHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bERlbnRpc3RWQ09GcmVxOyAgICAgICAgICAvL0RlbnRpc3QgVkNPIGNsb2NrIGluIDEwa0h6IHVuaXQsIHRoZSBzb3VyY2Ugb2YgR1BVIFNDTEssIExDTEssIFVDTEsgYW5kIFZDTEsuIAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bExDbG9ja0ZyZXE7ICAgICAgICAgICAgICAvL0dQVSBMY2xrIGZyZXEgaW4gMTBrSHogdW5pdCwgaGF2ZSByZWxhdGlvbnNoaXAgd2l0aCBOQ0xLIGluIE5vcnRoQnJpZGdlCisgIFVMT05HCSAgICAgICAgICAgICAgICAgICAgIHVsQm9vdFVwVU1BQ2xvY2s7ICAgICAgICAgIC8vaW4gMTBrSHogdW5pdAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bFJlc2VydmVkMVs4XTsgICAgICAgICAgICAvL211c3QgYmUgMHgwIGZvciB0aGUgcmVzZXJ2ZWQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxCb290VXBSZXFEaXNwbGF5VmVjdG9yOworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bE90aGVyRGlzcGxheU1pc2M7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgIHVsUmVzZXJ2ZWQyWzRdOyAgICAgICAgICAgIC8vbXVzdCBiZSAweDAgZm9yIHRoZSByZXNlcnZlZAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bFN5c3RlbUNvbmZpZzsgICAgICAgICAgICAvL1RCRAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bENQVUNhcEluZm87ICAgICAgICAgICAgICAvL1RCRAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c01heE5CVm9sdGFnZTsgICAgICAgICAgICAvL2hpZ2ggTkIgdm9sdGFnZSwgY2FsY3VsYXRlZCB1c2luZyBjdXJyZW50IFZERE5CIChEMjRGMnhEQykgYW5kIFZERE5CIG9mZnNldCBmdXNlOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c01pbk5CVm9sdGFnZTsgICAgICAgICAgICAvL2xvdyBOQiB2b2x0YWdlLCBjYWxjdWxhdGVkIHVzaW5nIGN1cnJlbnQgVkRETkIgKEQyNEYyeERDKSBhbmQgVkRETkIgb2Zmc2V0IGZ1c2U7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzQm9vdFVwTkJWb2x0YWdlOyAgICAgICAgIC8vYm9vdCB1cCBOQiB2b2x0YWdlCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjSHRjVG1wTG10OyAgICAgICAgICAgICAgIC8vYml0IFsyMjoxNl0gb2YgRDI0RjN4NjQgSGFyZHdhcmUgVGhlcm1hbCBDb250cm9sIChIVEMpIFJlZ2lzdGVyLCBtYXkgbm90IGJlIG5lZWRlZCwgVEJECisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjVGpPZmZzZXQ7ICAgICAgICAgICAgICAgIC8vYml0IFsyODoyMl0gb2YgRDI0RjN4RTQgVGhlcm10cmlwIFN0YXR1cyBSZWdpc3RlcixtYXkgbm90IGJlIG5lZWRlZCwgVEJECisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgIHVsUmVzZXJ2ZWQzWzRdOyAgICAgICAgICAgIC8vbXVzdCBiZSAweDAgZm9yIHRoZSByZXNlcnZlZAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bERESVNsb3QxQ29uZmlnOyAgICAgICAgICAvL3NlZSBhYm92ZSB1bERESVNsb3QxQ29uZmlnIGRlZmluaXRpb24KKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxERElTbG90MkNvbmZpZzsKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxERElTbG90M0NvbmZpZzsKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxERElTbG90NENvbmZpZzsKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxSZXNlcnZlZDRbNF07ICAgICAgICAgICAgLy9tdXN0IGJlIDB4MCBmb3IgdGhlIHJlc2VydmVkCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjTWVtb3J5VHlwZTsgICAgICAgICAgICAgIC8vWzM6MF09MTpERFIxOz0yOkREUjI7PTM6RERSMy5bNzo0XSBpcyByZXNlcnZlZAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y1VNQUNoYW5uZWxOdW1iZXI7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzUmVzZXJ2ZWQ7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgIHVsUmVzZXJ2ZWQ1WzRdOyAgICAgICAgICAgIC8vbXVzdCBiZSAweDAgZm9yIHRoZSByZXNlcnZlZAorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bENTUl9NM19BUkJfQ05UTF9ERUZBVUxUWzEwXTsvL2FycmF5cyB3aXRoIHZhbHVlcyBmb3IgQ1NSIE0zIGFyYml0ZXIgZm9yIGRlZmF1bHQKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxDU1JfTTNfQVJCX0NOVExfVVZEWzEwXTsgLy9hcnJheXMgd2l0aCB2YWx1ZXMgZm9yIENTUiBNMyBhcmJpdGVyIGZvciBVVkQgcGxheWJhY2sKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxDU1JfTTNfQVJCX0NOVExfRlMzRFsxMF07Ly9hcnJheXMgd2l0aCB2YWx1ZXMgZm9yIENTUiBNMyBhcmJpdGVyIGZvciBGdWxsIFNjcmVlbiAzRCBhcHBsaWNhdGlvbnMKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgdWxSZXNlcnZlZDZbNjFdOyAgICAgICAgICAgLy9tdXN0IGJlIDB4MAorfUFUT01fSU5URUdSQVRFRF9TWVNURU1fSU5GT19WNTsgICAKKwogI2RlZmluZSBBVE9NX0NSVF9JTlRfRU5DT0RFUjFfSU5ERVggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKICNkZWZpbmUgQVRPTV9MQ0RfSU5UX0VOQ09ERVIxX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCiAjZGVmaW5lIEFUT01fVFZfSU5UX0VOQ09ERVIxX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgpAQCAtMTg2Niw4ICsyMzI3LDggQEAKICNkZWZpbmUgQVRPTV9ERlBfSU5UX0VOQ09ERVIzX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCiAjZGVmaW5lIEFUT01fREZQX0lOVF9FTkNPREVSNF9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAogCi0vKiAgZGVmaW5lIEFTSUMgaW50ZXJuYWwgZW5jb2RlciBpZCAoIGJpdCB2ZWN0b3IgKSAqLwotI2RlZmluZSBBU0lDX0lOVF9EQUMxX0VOQ09ERVJfSUQJCQkJCQkJCQkJCTB4MDAKKy8vIGRlZmluZSBBU0lDIGludGVybmFsIGVuY29kZXIgaWQgKCBiaXQgdmVjdG9yICksIHVzZWQgZm9yIENSVENfU291cmNlU2VsVGFibGUKKyNkZWZpbmUgQVNJQ19JTlRfREFDMV9FTkNPREVSX0lEICAgIAkJCQkJCQkJCQkJMHgwMCAKICNkZWZpbmUgQVNJQ19JTlRfVFZfRU5DT0RFUl9JRAkJCQkJCQkJCQkJCQkJMHgwMgogI2RlZmluZSBBU0lDX0lOVF9ESUcxX0VOQ09ERVJfSUQJCQkJCQkJCQkJCQkJMHgwMwogI2RlZmluZSBBU0lDX0lOVF9EQUMyX0VOQ09ERVJfSUQJCQkJCQkJCQkJCQkJMHgwNApAQCAtMTg3NSwxMCArMjMzNiwyNCBAQAogI2RlZmluZSBBU0lDX0lOVF9EVk9fRU5DT0RFUl9JRAkJCQkJCQkJCQkJCQkJMHgwNwogI2RlZmluZSBBU0lDX0lOVF9ESUcyX0VOQ09ERVJfSUQJCQkJCQkJCQkJCQkJMHgwOQogI2RlZmluZSBBU0lDX0VYVF9ESUdfRU5DT0RFUl9JRAkJCQkJCQkJCQkJCQkJMHgwNQorI2RlZmluZSBBU0lDX0VYVF9ESUcyX0VOQ09ERVJfSUQJCQkJCQkJCQkJCQkJMHgwOAorI2RlZmluZSBBU0lDX0lOVF9ESUczX0VOQ09ERVJfSUQJCQkJCQkJCQkJCQkJMHgwYQorI2RlZmluZSBBU0lDX0lOVF9ESUc0X0VOQ09ERVJfSUQJCQkJCQkJCQkJCQkJMHgwYgorI2RlZmluZSBBU0lDX0lOVF9ESUc1X0VOQ09ERVJfSUQJCQkJCQkJCQkJCQkJMHgwYworI2RlZmluZSBBU0lDX0lOVF9ESUc2X0VOQ09ERVJfSUQJCQkJCQkJCQkJCQkJMHgwZAogCi0vKiBkZWZpbmUgRW5jb2RlciBhdHRyaWJ1dGUgKi8KKy8vZGVmaW5lIEVuY29kZXIgYXR0cmlidXRlCiAjZGVmaW5lIEFUT01fQU5BTE9HX0VOQ09ERVIJCQkJCQkJCQkJCQkJCQkJMAotI2RlZmluZSBBVE9NX0RJR0lUQUxfRU5DT0RFUgkJCQkJCQkJCQkJCQkJCTEKKyNkZWZpbmUgQVRPTV9ESUdJVEFMX0VOQ09ERVIJCQkJCQkJCQkJCQkJCQkxCQkKKyNkZWZpbmUgQVRPTV9EUF9FTkNPREVSCQkJCQkJCQkJCQkJCQkJICAgICAgMgkJCisKKyNkZWZpbmUgQVRPTV9FTkNPREVSX0VOVU1fTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwCisjZGVmaW5lIEFUT01fRU5DT0RFUl9FTlVNX0lEMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBBVE9NX0VOQ09ERVJfRU5VTV9JRDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MTAKKyNkZWZpbmUgQVRPTV9FTkNPREVSX0VOVU1fSUQzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwCisjZGVmaW5lIEFUT01fRU5DT0RFUl9FTlVNX0lENCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzMAorI2RlZmluZSBBVE9NX0VOQ09ERVJfRU5VTV9JRDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDAgCisjZGVmaW5lIEFUT01fRU5DT0RFUl9FTlVNX0lENiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1MAogCiAjZGVmaW5lIEFUT01fREVWSUNFX0NSVDFfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAogI2RlZmluZSBBVE9NX0RFVklDRV9MQ0QxX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKQEAgLTE4ODYsNDUgKzIzNjEsNDAgQEAKICNkZWZpbmUgQVRPTV9ERVZJQ0VfREZQMV9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCiAjZGVmaW5lIEFUT01fREVWSUNFX0NSVDJfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAogI2RlZmluZSBBVE9NX0RFVklDRV9MQ0QyX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKLSNkZWZpbmUgQVRPTV9ERVZJQ0VfVFYyX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEFUT01fREVWSUNFX0RGUDZfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgogI2RlZmluZSBBVE9NX0RFVklDRV9ERlAyX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKICNkZWZpbmUgQVRPTV9ERVZJQ0VfQ1ZfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIEFUT01fREVWSUNFX0RGUDNfSU5ERVgJCQkJCQkJCQkJCQkJCTB4MDAwMDAwMDkKLSNkZWZpbmUgQVRPTV9ERVZJQ0VfREZQNF9JTkRFWAkJCQkJCQkJCQkJCQkJMHgwMDAwMDAwQQotI2RlZmluZSBBVE9NX0RFVklDRV9ERlA1X0lOREVYCQkJCQkJCQkJCQkJCQkweDAwMDAwMDBCCisjZGVmaW5lIEFUT01fREVWSUNFX0RGUDNfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSBBVE9NX0RFVklDRV9ERlA0X0lOREVYICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgQVRPTV9ERVZJQ0VfREZQNV9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisKICNkZWZpbmUgQVRPTV9ERVZJQ0VfUkVTRVJWRURDX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBDCiAjZGVmaW5lIEFUT01fREVWSUNFX1JFU0VSVkVERF9JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRAogI2RlZmluZSBBVE9NX0RFVklDRV9SRVNFUlZFREVfSU5ERVggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKICNkZWZpbmUgQVRPTV9ERVZJQ0VfUkVTRVJWRURGX0lOREVYICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCiAjZGVmaW5lIEFUT01fTUFYX1NVUFBPUlRFRF9ERVZJQ0VfSU5GTyAgICAgICAgICAgICAgICAgICAgKEFUT01fREVWSUNFX0RGUDNfSU5ERVgrMSkKICNkZWZpbmUgQVRPTV9NQVhfU1VQUE9SVEVEX0RFVklDRV9JTkZPXzIgICAgICAgICAgICAgICAgICBBVE9NX01BWF9TVVBQT1JURURfREVWSUNFX0lORk8KLSNkZWZpbmUgQVRPTV9NQVhfU1VQUE9SVEVEX0RFVklDRV9JTkZPXzMgICAgICAgICAgICAgICAgICAoQVRPTV9ERVZJQ0VfREZQNV9JTkRFWCArIDEpCisjZGVmaW5lIEFUT01fTUFYX1NVUFBPUlRFRF9ERVZJQ0VfSU5GT18zICAgICAgICAgICAgICAgICAgKEFUT01fREVWSUNFX0RGUDVfSU5ERVggKyAxICkKIAogI2RlZmluZSBBVE9NX01BWF9TVVBQT1JURURfREVWSUNFICAgICAgICAgICAgICAgICAgICAgICAgIChBVE9NX0RFVklDRV9SRVNFUlZFREZfSU5ERVgrMSkKIAotI2RlZmluZSBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0NSVDFfSU5ERVgpCi0jZGVmaW5lIEFUT01fREVWSUNFX0xDRDFfU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MUwgPDwgQVRPTV9ERVZJQ0VfTENEMV9JTkRFWCkKLSNkZWZpbmUgQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxTCA8PCBBVE9NX0RFVklDRV9UVjFfSU5ERVgpCi0jZGVmaW5lIEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MUwgPDwgQVRPTV9ERVZJQ0VfREZQMV9JTkRFWCkKLSNkZWZpbmUgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAoMHgxTCA8PCBBVE9NX0RFVklDRV9DUlQyX0lOREVYKQotI2RlZmluZSBBVE9NX0RFVklDRV9MQ0QyX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0xDRDJfSU5ERVgpCi0jZGVmaW5lIEFUT01fREVWSUNFX1RWMl9TVVBQT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MUwgPDwgQVRPTV9ERVZJQ0VfVFYyX0lOREVYKQotI2RlZmluZSBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0RGUDJfSU5ERVgpCi0jZGVmaW5lIEFUT01fREVWSUNFX0NWX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MUwgPDwgQVRPTV9ERVZJQ0VfQ1ZfSU5ERVgpCi0jZGVmaW5lIEFUT01fREVWSUNFX0RGUDNfU1VQUE9SVAkJCQkJCQkJCQkJCQkoMHgxTCA8PCBBVE9NX0RFVklDRV9ERlAzX0lOREVYKQotI2RlZmluZSBBVE9NX0RFVklDRV9ERlA0X1NVUFBPUlQJCQkJCQkJCQkJCQkJKDB4MUwgPDwgQVRPTV9ERVZJQ0VfREZQNF9JTkRFWCApCi0jZGVmaW5lIEFUT01fREVWSUNFX0RGUDVfU1VQUE9SVAkJCQkJCQkJCQkJCQkoMHgxTCA8PCBBVE9NX0RFVklDRV9ERlA1X0lOREVYKQorI2RlZmluZSBBVE9NX0RFVklDRV9DUlQxX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0NSVDFfSU5ERVggKQorI2RlZmluZSBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0xDRDFfSU5ERVggKQorI2RlZmluZSBBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX1RWMV9JTkRFWCAgKQorI2RlZmluZSBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0RGUDFfSU5ERVggKQorI2RlZmluZSBBVE9NX0RFVklDRV9DUlQyX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0NSVDJfSU5ERVggKQorI2RlZmluZSBBVE9NX0RFVklDRV9MQ0QyX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0xDRDJfSU5ERVggKQorI2RlZmluZSBBVE9NX0RFVklDRV9ERlA2X1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0RGUDZfSU5ERVggKQorI2RlZmluZSBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0RGUDJfSU5ERVggKQorI2RlZmluZSBBVE9NX0RFVklDRV9DVl9TVVBQT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0NWX0lOREVYICAgKQorI2RlZmluZSBBVE9NX0RFVklDRV9ERlAzX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0RGUDNfSU5ERVggKQorI2RlZmluZSBBVE9NX0RFVklDRV9ERlA0X1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0RGUDRfSU5ERVggKQorI2RlZmluZSBBVE9NX0RFVklDRV9ERlA1X1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICgweDFMIDw8IEFUT01fREVWSUNFX0RGUDVfSU5ERVggKQogCi0jZGVmaW5lIEFUT01fREVWSUNFX0NSVF9TVVBQT1JUIFwKLQkoQVRPTV9ERVZJQ0VfQ1JUMV9TVVBQT1JUIHwgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUKQotI2RlZmluZSBBVE9NX0RFVklDRV9ERlBfU1VQUE9SVCBcCi0JKEFUT01fREVWSUNFX0RGUDFfU1VQUE9SVCB8IEFUT01fREVWSUNFX0RGUDJfU1VQUE9SVCB8IFwKLQkgQVRPTV9ERVZJQ0VfREZQM19TVVBQT1JUIHwgQVRPTV9ERVZJQ0VfREZQNF9TVVBQT1JUIHwgXAotCSBBVE9NX0RFVklDRV9ERlA1X1NVUFBPUlQpCi0jZGVmaW5lIEFUT01fREVWSUNFX1RWX1NVUFBPUlQgXAotCShBVE9NX0RFVklDRV9UVjFfU1VQUE9SVCAgfCBBVE9NX0RFVklDRV9UVjJfU1VQUE9SVCkKLSNkZWZpbmUgQVRPTV9ERVZJQ0VfTENEX1NVUFBPUlQgXAotCShBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQgfCBBVE9NX0RFVklDRV9MQ0QyX1NVUFBPUlQpCisjZGVmaW5lIEFUT01fREVWSUNFX0NSVF9TVVBQT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCB8IEFUT01fREVWSUNFX0NSVDJfU1VQUE9SVCkKKyNkZWZpbmUgQVRPTV9ERVZJQ0VfREZQX1NVUFBPUlQgICAgICAgICAgICAgICAgICAgICAgICAgICAoQVRPTV9ERVZJQ0VfREZQMV9TVVBQT1JUIHwgQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JUIHwgIEFUT01fREVWSUNFX0RGUDNfU1VQUE9SVCB8IEFUT01fREVWSUNFX0RGUDRfU1VQUE9SVCB8IEFUT01fREVWSUNFX0RGUDVfU1VQUE9SVCB8IEFUT01fREVWSUNFX0RGUDZfU1VQUE9SVCkKKyNkZWZpbmUgQVRPTV9ERVZJQ0VfVFZfU1VQUE9SVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQVRPTV9ERVZJQ0VfVFYxX1NVUFBPUlQpCisjZGVmaW5lIEFUT01fREVWSUNFX0xDRF9TVVBQT1JUICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFUT01fREVWSUNFX0xDRDFfU1VQUE9SVCB8IEFUT01fREVWSUNFX0xDRDJfU1VQUE9SVCkKIAogI2RlZmluZSBBVE9NX0RFVklDRV9DT05ORUNUT1JfVFlQRV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRjAKICNkZWZpbmUgQVRPTV9ERVZJQ0VfQ09OTkVDVE9SX1RZUEVfU0hJRlQgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CkBAIC0xOTQyLDYgKzI0MTIsNyBAQAogI2RlZmluZSBBVE9NX0RFVklDRV9DT05ORUNUT1JfQ0FTRV8xICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEUKICNkZWZpbmUgQVRPTV9ERVZJQ0VfQ09OTkVDVE9SX0RJU1BMQVlQT1JUICAgICAgICAgICAgICAgICAweDAwMDAwMDBGCiAKKwogI2RlZmluZSBBVE9NX0RFVklDRV9EQUNfSU5GT19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKICNkZWZpbmUgQVRPTV9ERVZJQ0VfREFDX0lORk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCiAjZGVmaW5lIEFUT01fREVWSUNFX0RBQ19JTkZPX05PREFDICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMApAQCAtMTk1OCwxMzkgKzI0MjksMTUwIEBACiAjZGVmaW5lIEFUT01fREVWSUNFX0kyQ19JRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAogI2RlZmluZSBBVE9NX0RFVklDRV9JMkNfSURfSVNfRk9SX05PTl9NTV9VU0UgICAgICAgICAgICAgIDB4MDAwMDAwMDEKICNkZWZpbmUgQVRPTV9ERVZJQ0VfSTJDX0lEX0lTX0ZPUl9NTV9VU0UgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5lIEFUT01fREVWSUNFX0kyQ19JRF9JU19GT1JfU0RWT19VU0UgICAgICAgICAgICAgICAgMHgwMDAwMDAwMwkvKiBGb3IgSUdQIFJTNjAwICovCi0jZGVmaW5lIEFUT01fREVWSUNFX0kyQ19JRF9JU19GT1JfREFDX1NDTCAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAkvKiBGb3IgSUdQIFJTNjkwICovCisjZGVmaW5lIEFUT01fREVWSUNFX0kyQ19JRF9JU19GT1JfU0RWT19VU0UgICAgICAgICAgICAgICAgMHgwMDAwMDAwMyAgICAvL0ZvciBJR1AgUlM2MDAKKyNkZWZpbmUgQVRPTV9ERVZJQ0VfSTJDX0lEX0lTX0ZPUl9EQUNfU0NMICAgICAgICAgICAgICAgICAweDAwMDAwMDA0ICAgIC8vRm9yIElHUCBSUzY5MAogCiAjZGVmaW5lIEFUT01fREVWSUNFX0kyQ19IQVJEV0FSRV9DQVBfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDA4MAogI2RlZmluZSBBVE9NX0RFVklDRV9JMkNfSEFSRFdBUkVfQ0FQX1NISUZUICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKICNkZWZpbmUJQVRPTV9ERVZJQ0VfVVNFU19TT0ZUV0FSRV9BU1NJU1RFRF9JMkMgICAgICAgICAgICAweDAwMDAwMDAwCiAjZGVmaW5lCUFUT01fREVWSUNFX1VTRVNfSEFSRFdBUkVfQVNTSVNURURfSTJDICAgICAgICAgICAgMHgwMDAwMDAwMQogCi0vKiAgIHVzRGV2aWNlU3VwcG9ydDogKi8KLS8qICAgQml0czAgICAgICAgPSAwIC0gbm8gQ1JUMSBzdXBwb3J0PSAxLSBDUlQxIGlzIHN1cHBvcnRlZCAqLwotLyogICBCaXQgMSAgICAgICA9IDAgLSBubyBMQ0QxIHN1cHBvcnQ9IDEtIExDRDEgaXMgc3VwcG9ydGVkICovCi0vKiAgIEJpdCAyICAgICAgID0gMCAtIG5vIFRWMSAgc3VwcG9ydD0gMS0gVFYxICBpcyBzdXBwb3J0ZWQgKi8KLS8qICAgQml0IDMgICAgICAgPSAwIC0gbm8gREZQMSBzdXBwb3J0PSAxLSBERlAxIGlzIHN1cHBvcnRlZCAqLwotLyogICBCaXQgNCAgICAgICA9IDAgLSBubyBDUlQyIHN1cHBvcnQ9IDEtIENSVDIgaXMgc3VwcG9ydGVkICovCi0vKiAgIEJpdCA1ICAgICAgID0gMCAtIG5vIExDRDIgc3VwcG9ydD0gMS0gTENEMiBpcyBzdXBwb3J0ZWQgKi8KLS8qICAgQml0IDYgICAgICAgPSAwIC0gbm8gVFYyICBzdXBwb3J0PSAxLSBUVjIgIGlzIHN1cHBvcnRlZCAqLwotLyogICBCaXQgNyAgICAgICA9IDAgLSBubyBERlAyIHN1cHBvcnQ9IDEtIERGUDIgaXMgc3VwcG9ydGVkICovCi0vKiAgIEJpdCA4ICAgICAgID0gMCAtIG5vIENWICAgc3VwcG9ydD0gMS0gQ1YgICBpcyBzdXBwb3J0ZWQgKi8KLS8qICAgQml0IDkgICAgICAgPSAwIC0gbm8gREZQMyBzdXBwb3J0PSAxLSBERlAzIGlzIHN1cHBvcnRlZCAqLwotLyogICBCeXRlMSAoU3VwcG9ydGVkIERldmljZSBJbmZvKSAqLwotLyogICBCaXQgMCAgICAgICA9ID0gMCAtIG5vIENWIHN1cHBvcnQ9IDEtIENWIGlzIHN1cHBvcnRlZCAqLwotLyogICovCi0vKiAgKi8KKy8vICB1c0RldmljZVN1cHBvcnQ6CisvLyAgQml0czAJPSAwIC0gbm8gQ1JUMSBzdXBwb3J0PSAxLSBDUlQxIGlzIHN1cHBvcnRlZAorLy8gIEJpdCAxCT0gMCAtIG5vIExDRDEgc3VwcG9ydD0gMS0gTENEMSBpcyBzdXBwb3J0ZWQKKy8vICBCaXQgMgk9IDAgLSBubyBUVjEgIHN1cHBvcnQ9IDEtIFRWMSAgaXMgc3VwcG9ydGVkCisvLyAgQml0IDMJPSAwIC0gbm8gREZQMSBzdXBwb3J0PSAxLSBERlAxIGlzIHN1cHBvcnRlZAorLy8gIEJpdCA0CT0gMCAtIG5vIENSVDIgc3VwcG9ydD0gMS0gQ1JUMiBpcyBzdXBwb3J0ZWQKKy8vICBCaXQgNQk9IDAgLSBubyBMQ0QyIHN1cHBvcnQ9IDEtIExDRDIgaXMgc3VwcG9ydGVkCisvLyAgQml0IDYJPSAwIC0gbm8gREZQNiBzdXBwb3J0PSAxLSBERlA2IGlzIHN1cHBvcnRlZAorLy8gIEJpdCA3CT0gMCAtIG5vIERGUDIgc3VwcG9ydD0gMS0gREZQMiBpcyBzdXBwb3J0ZWQKKy8vICBCaXQgOAk9IDAgLSBubyBDViAgIHN1cHBvcnQ9IDEtIENWICAgaXMgc3VwcG9ydGVkCisvLyAgQml0IDkJPSAwIC0gbm8gREZQMyBzdXBwb3J0PSAxLSBERlAzIGlzIHN1cHBvcnRlZAorLy8gIEJpdCAxMCAgICAgID0gMCAtIG5vIERGUDQgc3VwcG9ydD0gMS0gREZQNCBpcyBzdXBwb3J0ZWQKKy8vICBCaXQgMTEgICAgICA9IDAgLSBubyBERlA1IHN1cHBvcnQ9IDEtIERGUDUgaXMgc3VwcG9ydGVkCisvLyAgIAorLy8gIAogCi0vKiAgICAgICAgICAgICAgIHVjSTJDX0NvbmZpZ0lEICovCi0vKiAgICAgWzc6MF0gLSBJMkMgTElORSBBc3NvY2lhdGUgSUQgKi8KLS8qICAgICAgICAgICA9IDAgICAtIG5vIEkyQyAqLwotLyogICAgIFs3XSAgICAgICAgICAgICAgIC0gICAgICAgSFdfQ2FwICAgICAgICA9IDEsICBbNjowXT1IVyBhc3Npc3RlZCBJMkMgSUQoSFcgbGluZSBzZWxlY3Rpb24pICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gICAwLCAgWzY6MF09U1cgYXNzaXN0ZWQgSTJDIElEICovCi0vKiAgICAgWzYtNF0gICAgIC0gSFdfRU5HSU5FX0lEICA9ICAgICAgIDEsICBIVyBlbmdpbmUgZm9yIE5PTiBtdWx0aW1lZGlhIHVzZSAqLwotLyogICAgICAgICAgICAgICAgICAgICAgICAgICA9ICAgMiwgICAgICBIVyBlbmdpbmUgZm9yIE11bHRpbWVkaWEgdXNlICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgID0gICAzLTcgICAgIFJlc2VydmVkIGZvciBmdXR1cmUgSTJDIGVuZ2luZXMgKi8KLS8qICAgICAgICAgICAgICAgWzMtMF0gLSBJMkNfTElORV9NVVggID0gQSBNdXggbnVtYmVyIHdoZW4gaXQncyBIVyBhc3Npc3RlZCBJMkMgb3IgR1BJTyBJRCB3aGVuIGl0J3MgU1cgSTJDICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFN0cnVjdHVyZSB1c2VkIGluIE1jbGtTU19JbmZvVGFibGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvLwkJdWNJMkNfQ29uZmlnSUQKKy8vICAgIFs3OjBdIC0gSTJDIExJTkUgQXNzb2NpYXRlIElECisvLyAgICAgICAgICA9IDAgICAtIG5vIEkyQworLy8gICAgWzddCQktCUhXX0NhcCAgICAgICAgPQkxLCAgWzY6MF09SFcgYXNzaXN0ZWQgSTJDIElEKEhXIGxpbmUgc2VsZWN0aW9uKQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgID0JMCwgIFs2OjBdPVNXIGFzc2lzdGVkIEkyQyBJRAorLy8gICAgWzYtNF0JLSBIV19FTkdJTkVfSUQgID0JMSwgIEhXIGVuZ2luZSBmb3IgTk9OIG11bHRpbWVkaWEgdXNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgPQkyLAlIVyBlbmdpbmUgZm9yIE11bHRpbWVkaWEgdXNlCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgPQkzLTcJUmVzZXJ2ZWQgZm9yIGZ1dHVyZSBJMkMgZW5naW5lcworLy8JCVszLTBdIC0gSTJDX0xJTkVfTVVYICA9IEEgTXV4IG51bWJlciB3aGVuIGl0J3MgSFcgYXNzaXN0ZWQgSTJDIG9yIEdQSU8gSUQgd2hlbiBpdCdzIFNXIEkyQwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9JMkNfSURfQ09ORklHIHsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0kyQ19JRF9DT05GSUcKK3sKICNpZiBBVE9NX0JJR19FTkRJQU4KLQlVQ0hBUiBiZkhXX0NhcGFibGU6MTsKLQlVQ0hBUiBiZkhXX0VuZ2luZUlEOjM7Ci0JVUNIQVIgYmZJMkNfTGluZU11eDo0OworICBVQ0hBUiAgIGJmSFdfQ2FwYWJsZToxOworICBVQ0hBUiAgIGJmSFdfRW5naW5lSUQ6MzsKKyAgVUNIQVIgICBiZkkyQ19MaW5lTXV4OjQ7CiAjZWxzZQotCVVDSEFSIGJmSTJDX0xpbmVNdXg6NDsKLQlVQ0hBUiBiZkhXX0VuZ2luZUlEOjM7Ci0JVUNIQVIgYmZIV19DYXBhYmxlOjE7CisgIFVDSEFSICAgYmZJMkNfTGluZU11eDo0OworICBVQ0hBUiAgIGJmSFdfRW5naW5lSUQ6MzsKKyAgVUNIQVIgICBiZkhXX0NhcGFibGU6MTsKICNlbmRpZgotfSBBVE9NX0kyQ19JRF9DT05GSUc7Cit9QVRPTV9JMkNfSURfQ09ORklHOwogCi10eXBlZGVmIHVuaW9uIF9BVE9NX0kyQ19JRF9DT05GSUdfQUNDRVNTIHsKLQlBVE9NX0kyQ19JRF9DT05GSUcgc2JmQWNjZXNzOwotCVVDSEFSIHVjQWNjZXNzOwotfSBBVE9NX0kyQ19JRF9DT05GSUdfQUNDRVNTOwordHlwZWRlZiB1bmlvbiBfQVRPTV9JMkNfSURfQ09ORklHX0FDQ0VTUworeworICBBVE9NX0kyQ19JRF9DT05GSUcgc2JmQWNjZXNzOworICBVQ0hBUiAgICAgICAgICAgICAgdWNBY2Nlc3M7Cit9QVRPTV9JMkNfSURfQ09ORklHX0FDQ0VTUzsKKyAgIAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmUgdXNlZCBpbiBHUElPX0kyQ19JbmZvVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fR1BJT19JMkNfQVNTSUdNRU5UIHsKLQlVU0hPUlQgdXNDbGtNYXNrUmVnaXN0ZXJJbmRleDsKLQlVU0hPUlQgdXNDbGtFblJlZ2lzdGVySW5kZXg7Ci0JVVNIT1JUIHVzQ2xrWV9SZWdpc3RlckluZGV4OwotCVVTSE9SVCB1c0Nsa0FfUmVnaXN0ZXJJbmRleDsKLQlVU0hPUlQgdXNEYXRhTWFza1JlZ2lzdGVySW5kZXg7Ci0JVVNIT1JUIHVzRGF0YUVuUmVnaXN0ZXJJbmRleDsKLQlVU0hPUlQgdXNEYXRhWV9SZWdpc3RlckluZGV4OwotCVVTSE9SVCB1c0RhdGFBX1JlZ2lzdGVySW5kZXg7Ci0JQVRPTV9JMkNfSURfQ09ORklHX0FDQ0VTUyBzdWNJMmNJZDsKLQlVQ0hBUiB1Y0Nsa01hc2tTaGlmdDsKLQlVQ0hBUiB1Y0Nsa0VuU2hpZnQ7Ci0JVUNIQVIgdWNDbGtZX1NoaWZ0OwotCVVDSEFSIHVjQ2xrQV9TaGlmdDsKLQlVQ0hBUiB1Y0RhdGFNYXNrU2hpZnQ7Ci0JVUNIQVIgdWNEYXRhRW5TaGlmdDsKLQlVQ0hBUiB1Y0RhdGFZX1NoaWZ0OwotCVVDSEFSIHVjRGF0YUFfU2hpZnQ7Ci0JVUNIQVIgdWNSZXNlcnZlZDE7Ci0JVUNIQVIgdWNSZXNlcnZlZDI7Ci19IEFUT01fR1BJT19JMkNfQVNTSUdNRU5UOworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlIHVzZWQgaW4gR1BJT19JMkNfSW5mb1RhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9HUElPX0kyQ19BU1NJR01FTlQKK3sKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICB1c0Nsa01hc2tSZWdpc3RlckluZGV4OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzQ2xrRW5SZWdpc3RlckluZGV4OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzQ2xrWV9SZWdpc3RlckluZGV4OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzQ2xrQV9SZWdpc3RlckluZGV4OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzRGF0YU1hc2tSZWdpc3RlckluZGV4OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzRGF0YUVuUmVnaXN0ZXJJbmRleDsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICB1c0RhdGFZX1JlZ2lzdGVySW5kZXg7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgdXNEYXRhQV9SZWdpc3RlckluZGV4OworICBBVE9NX0kyQ19JRF9DT05GSUdfQUNDRVNTIHN1Y0kyY0lkOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgIHVjQ2xrTWFza1NoaWZ0OworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgIHVjQ2xrRW5TaGlmdDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICB1Y0Nsa1lfU2hpZnQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgdWNDbGtBX1NoaWZ0OworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgIHVjRGF0YU1hc2tTaGlmdDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICB1Y0RhdGFFblNoaWZ0OworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgIHVjRGF0YVlfU2hpZnQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgdWNEYXRhQV9TaGlmdDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICB1Y1Jlc2VydmVkMTsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICB1Y1Jlc2VydmVkMjsKK31BVE9NX0dQSU9fSTJDX0FTU0lHTUVOVDsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fR1BJT19JMkNfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JQVRPTV9HUElPX0kyQ19BU1NJR01FTlQgYXNHUElPX0luZm9bQVRPTV9NQVhfU1VQUE9SVEVEX0RFVklDRV07Ci19IEFUT01fR1BJT19JMkNfSU5GTzsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0dQSU9fSTJDX0lORk8KK3sgCisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUglzSGVhZGVyOworICBBVE9NX0dQSU9fSTJDX0FTU0lHTUVOVCAgIGFzR1BJT19JbmZvW0FUT01fTUFYX1NVUFBPUlRFRF9ERVZJQ0VdOworfUFUT01fR1BJT19JMkNfSU5GTzsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgQ29tbW9uIFN0cnVjdHVyZSB1c2VkIGluIG90aGVyIHN0cnVjdHVyZXMgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gQ29tbW9uIFN0cnVjdHVyZSB1c2VkIGluIG90aGVyIHN0cnVjdHVyZXMKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKIAogI2lmbmRlZiBfSDJJTkMKLQotLyogUGxlYXNlIGRvbid0IGFkZCBvciBleHBhbmQgdGhpcyBiaXRmaWVsZCBzdHJ1Y3R1cmUgYmVsb3csIHRoaXMgb25lIHdpbGwgcmV0aXJlIHNvb24uISAqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTU9ERV9NSVNDX0lORk8geworICAKKy8vUGxlYXNlIGRvbid0IGFkZCBvciBleHBhbmQgdGhpcyBiaXRmaWVsZCBzdHJ1Y3R1cmUgYmVsb3csIHRoaXMgb25lIHdpbGwgcmV0aXJlIHNvb24uIQordHlwZWRlZiBzdHJ1Y3QgX0FUT01fTU9ERV9NSVNDX0lORk8KK3sgCiAjaWYgQVRPTV9CSUdfRU5ESUFOCi0JVVNIT1JUIFJlc2VydmVkOjY7Ci0JVVNIT1JUIFJHQjg4ODoxOwotCVVTSE9SVCBEb3VibGVDbG9jazoxOwotCVVTSE9SVCBJbnRlcmxhY2U6MTsKLQlVU0hPUlQgQ29tcG9zaXRlU3luYzoxOwotCVVTSE9SVCBWX1JlcGxpY2F0aW9uQnkyOjE7Ci0JVVNIT1JUIEhfUmVwbGljYXRpb25CeTI6MTsKLQlVU0hPUlQgVmVydGljYWxDdXRPZmY6MTsKLQlVU0hPUlQgVlN5bmNQb2xhcml0eToxOwkvKiAwPUFjdGl2ZSBIaWdoLCAxPUFjdGl2ZSBMb3cgKi8KLQlVU0hPUlQgSFN5bmNQb2xhcml0eToxOwkvKiAwPUFjdGl2ZSBIaWdoLCAxPUFjdGl2ZSBMb3cgKi8KLQlVU0hPUlQgSG9yaXpvbnRhbEN1dE9mZjoxOworICBVU0hPUlQgUmVzZXJ2ZWQ6NjsKKyAgVVNIT1JUIFJHQjg4ODoxOworICBVU0hPUlQgRG91YmxlQ2xvY2s6MTsKKyAgVVNIT1JUIEludGVybGFjZToxOworICBVU0hPUlQgQ29tcG9zaXRlU3luYzoxOworICBVU0hPUlQgVl9SZXBsaWNhdGlvbkJ5MjoxOworICBVU0hPUlQgSF9SZXBsaWNhdGlvbkJ5MjoxOworICBVU0hPUlQgVmVydGljYWxDdXRPZmY6MTsKKyAgVVNIT1JUIFZTeW5jUG9sYXJpdHk6MTsgICAgICAvLzA9QWN0aXZlIEhpZ2gsIDE9QWN0aXZlIExvdworICBVU0hPUlQgSFN5bmNQb2xhcml0eToxOyAgICAgIC8vMD1BY3RpdmUgSGlnaCwgMT1BY3RpdmUgTG93CisgIFVTSE9SVCBIb3Jpem9udGFsQ3V0T2ZmOjE7CiAjZWxzZQotCVVTSE9SVCBIb3Jpem9udGFsQ3V0T2ZmOjE7Ci0JVVNIT1JUIEhTeW5jUG9sYXJpdHk6MTsJLyogMD1BY3RpdmUgSGlnaCwgMT1BY3RpdmUgTG93ICovCi0JVVNIT1JUIFZTeW5jUG9sYXJpdHk6MTsJLyogMD1BY3RpdmUgSGlnaCwgMT1BY3RpdmUgTG93ICovCi0JVVNIT1JUIFZlcnRpY2FsQ3V0T2ZmOjE7Ci0JVVNIT1JUIEhfUmVwbGljYXRpb25CeTI6MTsKLQlVU0hPUlQgVl9SZXBsaWNhdGlvbkJ5MjoxOwotCVVTSE9SVCBDb21wb3NpdGVTeW5jOjE7Ci0JVVNIT1JUIEludGVybGFjZToxOwotCVVTSE9SVCBEb3VibGVDbG9jazoxOwotCVVTSE9SVCBSR0I4ODg6MTsKLQlVU0hPUlQgUmVzZXJ2ZWQ6NjsKKyAgVVNIT1JUIEhvcml6b250YWxDdXRPZmY6MTsKKyAgVVNIT1JUIEhTeW5jUG9sYXJpdHk6MTsgICAgICAvLzA9QWN0aXZlIEhpZ2gsIDE9QWN0aXZlIExvdworICBVU0hPUlQgVlN5bmNQb2xhcml0eToxOyAgICAgIC8vMD1BY3RpdmUgSGlnaCwgMT1BY3RpdmUgTG93CisgIFVTSE9SVCBWZXJ0aWNhbEN1dE9mZjoxOworICBVU0hPUlQgSF9SZXBsaWNhdGlvbkJ5MjoxOworICBVU0hPUlQgVl9SZXBsaWNhdGlvbkJ5MjoxOworICBVU0hPUlQgQ29tcG9zaXRlU3luYzoxOworICBVU0hPUlQgSW50ZXJsYWNlOjE7CisgIFVTSE9SVCBEb3VibGVDbG9jazoxOworICBVU0hPUlQgUkdCODg4OjE7CisgIFVTSE9SVCBSZXNlcnZlZDo2OyAgICAgICAgICAgCiAjZW5kaWYKLX0gQVRPTV9NT0RFX01JU0NfSU5GTzsKLQotdHlwZWRlZiB1bmlvbiBfQVRPTV9NT0RFX01JU0NfSU5GT19BQ0NFU1MgewotCUFUT01fTU9ERV9NSVNDX0lORk8gc2JmQWNjZXNzOwotCVVTSE9SVCB1c0FjY2VzczsKLX0gQVRPTV9NT0RFX01JU0NfSU5GT19BQ0NFU1M7Ci0KK31BVE9NX01PREVfTUlTQ19JTkZPOworICAKK3R5cGVkZWYgdW5pb24gX0FUT01fTU9ERV9NSVNDX0lORk9fQUNDRVNTCit7IAorICBBVE9NX01PREVfTUlTQ19JTkZPIHNiZkFjY2VzczsKKyAgVVNIT1JUICAgICAgICAgICAgICB1c0FjY2VzczsKK31BVE9NX01PREVfTUlTQ19JTkZPX0FDQ0VTUzsKKyAgCiAjZWxzZQotCi10eXBlZGVmIHVuaW9uIF9BVE9NX01PREVfTUlTQ19JTkZPX0FDQ0VTUyB7Ci0JVVNIT1JUIHVzQWNjZXNzOwotfSBBVE9NX01PREVfTUlTQ19JTkZPX0FDQ0VTUzsKLQorICAKK3R5cGVkZWYgdW5pb24gX0FUT01fTU9ERV9NSVNDX0lORk9fQUNDRVNTCit7IAorICBVU0hPUlQgICAgICAgICAgICAgIHVzQWNjZXNzOworfUFUT01fTU9ERV9NSVNDX0lORk9fQUNDRVNTOworICAgCiAjZW5kaWYKIAotLyogIHVzTW9kZU1pc2NJbmZvLSAqLworLy8gdXNNb2RlTWlzY0luZm8tCiAjZGVmaW5lIEFUT01fSF9DVVRPRkYgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgQVRPTV9IU1lOQ19QT0xBUklUWSAgICAgMHgwMgkvKiAwPUFjdGl2ZSBIaWdoLCAxPUFjdGl2ZSBMb3cgKi8KLSNkZWZpbmUgQVRPTV9WU1lOQ19QT0xBUklUWSAgICAgMHgwNAkvKiAwPUFjdGl2ZSBIaWdoLCAxPUFjdGl2ZSBMb3cgKi8KKyNkZWZpbmUgQVRPTV9IU1lOQ19QT0xBUklUWSAgICAgMHgwMiAgICAgICAgICAgICAvLzA9QWN0aXZlIEhpZ2gsIDE9QWN0aXZlIExvdworI2RlZmluZSBBVE9NX1ZTWU5DX1BPTEFSSVRZICAgICAweDA0ICAgICAgICAgICAgIC8vMD1BY3RpdmUgSGlnaCwgMT1BY3RpdmUgTG93CiAjZGVmaW5lIEFUT01fVl9DVVRPRkYgICAgICAgICAgIDB4MDgKICNkZWZpbmUgQVRPTV9IX1JFUExJQ0FUSU9OQlkyICAgMHgxMAogI2RlZmluZSBBVE9NX1ZfUkVQTElDQVRJT05CWTIgICAweDIwCkBAIC0yMDk5LDEwICsyNTgxLDEwIEBACiAjZGVmaW5lIEFUT01fRE9VQkxFX0NMT0NLX01PREUgIDB4MTAwCiAjZGVmaW5lIEFUT01fUkdCODg4X01PREUgICAgICAgIDB4MjAwCiAKLS8qIHVzUmVmcmVzaFJhdGUtICovCisvL3VzUmVmcmVzaFJhdGUtCiAjZGVmaW5lIEFUT01fUkVGUkVTSF80MyAgICAgICAgIDQzCiAjZGVmaW5lIEFUT01fUkVGUkVTSF80NyAgICAgICAgIDQ3Ci0jZGVmaW5lIEFUT01fUkVGUkVTSF81NiAgICAgICAgIDU2CisjZGVmaW5lIEFUT01fUkVGUkVTSF81NiAgICAgICAgIDU2CQogI2RlZmluZSBBVE9NX1JFRlJFU0hfNjAgICAgICAgICA2MAogI2RlZmluZSBBVE9NX1JFRlJFU0hfNjUgICAgICAgICA2NQogI2RlZmluZSBBVE9NX1JFRlJFU0hfNzAgICAgICAgICA3MApAQCAtMjExMCwxOTIgKzI1OTIsMjMzIEBACiAjZGVmaW5lIEFUT01fUkVGUkVTSF83NSAgICAgICAgIDc1CiAjZGVmaW5lIEFUT01fUkVGUkVTSF84NSAgICAgICAgIDg1CiAKLS8qICBBVE9NX01PREVfVElNSU5HIGRhdGEgYXJlIGV4YWN0bHkgdGhlIHNhbWUgYXMgVkVTQSB0aW1pbmcgZGF0YS4gKi8KLS8qICBUcmFuc2xhdGlvbiBmcm9tIEVESUQgdG8gQVRPTV9NT0RFX1RJTUlORywgdXNlIHRoZSBmb2xsb3dpbmcgZm9ybXVsYS4gKi8KLS8qICAqLwotLyogICAgICAgVkVTQV9IVE9UQUwgICAgICAgICAgICAgICAgICAgICA9ICAgICAgIFZFU0FfQUNUSVZFICsgMiogVkVTQV9CT1JERVIgKyBWRVNBX0JMQU5LICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAgICAgICBFRElEX0hBICsgRURJRF9IQkwgKi8KLS8qICAgICAgIFZFU0FfSERJU1AgICAgICAgICAgICAgICAgICAgICAgPSAgICAgICBWRVNBX0FDVElWRSAgICAgPSAgICAgICBFRElEX0hBICovCi0vKiAgICAgICBWRVNBX0hTWU5DX1NUQVJUICAgICAgICA9ICAgICAgIFZFU0FfQUNUSVZFICsgVkVTQV9CT1JERVIgKyBWRVNBX0ZST05UX1BPUkNIICovCi0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAgICAgICBFRElEX0hBICsgRURJRF9IU08gKi8KLS8qICAgICAgIFZFU0FfSFNZTkNfV0lEVEggICAgICAgID0gICAgICAgVkVTQV9IU1lOQ19USU1FID0gICAgICAgRURJRF9IU1BXICovCi0vKiAgICAgICBWRVNBX0JPUkRFUiAgICAgICAgICAgICAgICAgICAgID0gICAgICAgRURJRF9CT1JERVIgKi8KKy8vIEFUT01fTU9ERV9USU1JTkcgZGF0YSBhcmUgZXhhY3RseSB0aGUgc2FtZSBhcyBWRVNBIHRpbWluZyBkYXRhLgorLy8gVHJhbnNsYXRpb24gZnJvbSBFRElEIHRvIEFUT01fTU9ERV9USU1JTkcsIHVzZSB0aGUgZm9sbG93aW5nIGZvcm11bGEuCisvLworLy8JVkVTQV9IVE9UQUwJCQk9CVZFU0FfQUNUSVZFICsgMiogVkVTQV9CT1JERVIgKyBWRVNBX0JMQU5LCisvLwkJCQkJCT0JRURJRF9IQSArIEVESURfSEJMCisvLwlWRVNBX0hESVNQCQkJPQlWRVNBX0FDVElWRQk9CUVESURfSEEKKy8vCVZFU0FfSFNZTkNfU1RBUlQJPQlWRVNBX0FDVElWRSArIFZFU0FfQk9SREVSICsgVkVTQV9GUk9OVF9QT1JDSAorLy8JCQkJCQk9CUVESURfSEEgKyBFRElEX0hTTworLy8JVkVTQV9IU1lOQ19XSURUSAk9CVZFU0FfSFNZTkNfVElNRQk9CUVESURfSFNQVworLy8JVkVTQV9CT1JERVIJCQk9CUVESURfQk9SREVSCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZSB1c2VkIGluIFNldENSVENfVXNpbmdEVERUaW1pbmdUYWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfU0VUX0NSVENfVVNJTkdfRFREX1RJTUlOR19QQVJBTUVURVJTIHsKLQlVU0hPUlQgdXNIX1NpemU7Ci0JVVNIT1JUIHVzSF9CbGFua2luZ19UaW1lOwotCVVTSE9SVCB1c1ZfU2l6ZTsKLQlVU0hPUlQgdXNWX0JsYW5raW5nX1RpbWU7Ci0JVVNIT1JUIHVzSF9TeW5jT2Zmc2V0OwotCVVTSE9SVCB1c0hfU3luY1dpZHRoOwotCVVTSE9SVCB1c1ZfU3luY09mZnNldDsKLQlVU0hPUlQgdXNWX1N5bmNXaWR0aDsKLQlBVE9NX01PREVfTUlTQ19JTkZPX0FDQ0VTUyBzdXNNb2RlTWlzY0luZm87Ci0JVUNIQVIgdWNIX0JvcmRlcjsJLyogIEZyb20gREZQIEVESUQgKi8KLQlVQ0hBUiB1Y1ZfQm9yZGVyOwotCVVDSEFSIHVjQ1JUQzsJCS8qICBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIgKi8KLQlVQ0hBUiB1Y1BhZGRpbmdbM107Ci19IFNFVF9DUlRDX1VTSU5HX0RURF9USU1JTkdfUEFSQU1FVEVSUzsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZSB1c2VkIGluIFNldENSVENfVXNpbmdEVERUaW1pbmdUYWJsZQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQordHlwZWRlZiBzdHJ1Y3QgX1NFVF9DUlRDX1VTSU5HX0RURF9USU1JTkdfUEFSQU1FVEVSUworeworICBVU0hPUlQgIHVzSF9TaXplOworICBVU0hPUlQgIHVzSF9CbGFua2luZ19UaW1lOworICBVU0hPUlQgIHVzVl9TaXplOworICBVU0hPUlQgIHVzVl9CbGFua2luZ19UaW1lOwkJCQorICBVU0hPUlQgIHVzSF9TeW5jT2Zmc2V0OworICBVU0hPUlQgIHVzSF9TeW5jV2lkdGg7CisgIFVTSE9SVCAgdXNWX1N5bmNPZmZzZXQ7CisgIFVTSE9SVCAgdXNWX1N5bmNXaWR0aDsKKyAgQVRPTV9NT0RFX01JU0NfSU5GT19BQ0NFU1MgIHN1c01vZGVNaXNjSW5mbzsgIAorICBVQ0hBUiAgIHVjSF9Cb3JkZXI7ICAgICAgICAgLy8gRnJvbSBERlAgRURJRAorICBVQ0hBUiAgIHVjVl9Cb3JkZXI7CisgIFVDSEFSICAgdWNDUlRDOyAgICAgICAgICAgICAvLyBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIgIAorICBVQ0hBUiAgIHVjUGFkZGluZ1szXTsKK31TRVRfQ1JUQ19VU0lOR19EVERfVElNSU5HX1BBUkFNRVRFUlM7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZSB1c2VkIGluIFNldENSVENfVGltaW5nVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX1NFVF9DUlRDX1RJTUlOR19QQVJBTUVURVJTIHsKLQlVU0hPUlQgdXNIX1RvdGFsOwkvKiAgaG9yaXpvbnRhbCB0b3RhbCAqLwotCVVTSE9SVCB1c0hfRGlzcDsJLyogIGhvcml6b250YWwgZGlzcGxheSAqLwotCVVTSE9SVCB1c0hfU3luY1N0YXJ0OwkvKiAgaG9yb3pvbnRhbCBTeW5jIHN0YXJ0ICovCi0JVVNIT1JUIHVzSF9TeW5jV2lkdGg7CS8qICBob3Jpem9udGFsIFN5bmMgd2lkdGggKi8KLQlVU0hPUlQgdXNWX1RvdGFsOwkvKiAgdmVydGljYWwgdG90YWwgKi8KLQlVU0hPUlQgdXNWX0Rpc3A7CS8qICB2ZXJ0aWNhbCBkaXNwbGF5ICovCi0JVVNIT1JUIHVzVl9TeW5jU3RhcnQ7CS8qICB2ZXJ0aWNhbCBTeW5jIHN0YXJ0ICovCi0JVVNIT1JUIHVzVl9TeW5jV2lkdGg7CS8qICB2ZXJ0aWNhbCBTeW5jIHdpZHRoICovCi0JQVRPTV9NT0RFX01JU0NfSU5GT19BQ0NFU1Mgc3VzTW9kZU1pc2NJbmZvOwotCVVDSEFSIHVjQ1JUQzsJCS8qICBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIgKi8KLQlVQ0hBUiB1Y092ZXJzY2FuUmlnaHQ7CS8qICByaWdodCAqLwotCVVDSEFSIHVjT3ZlcnNjYW5MZWZ0OwkvKiAgbGVmdCAqLwotCVVDSEFSIHVjT3ZlcnNjYW5Cb3R0b207CS8qICBib3R0b20gKi8KLQlVQ0hBUiB1Y092ZXJzY2FuVG9wOwkvKiAgdG9wICovCi0JVUNIQVIgdWNSZXNlcnZlZDsKLX0gU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlM7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmUgdXNlZCBpbiBTZXRDUlRDX1RpbWluZ1RhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlMKK3sKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgIHVzSF9Ub3RhbDsgICAgICAgIC8vIGhvcml6b250YWwgdG90YWwKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgIHVzSF9EaXNwOyAgICAgICAgIC8vIGhvcml6b250YWwgZGlzcGxheQorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgdXNIX1N5bmNTdGFydDsgICAgLy8gaG9yb3pvbnRhbCBTeW5jIHN0YXJ0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICB1c0hfU3luY1dpZHRoOyAgICAvLyBob3Jpem9udGFsIFN5bmMgd2lkdGgKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgIHVzVl9Ub3RhbDsgICAgICAgIC8vIHZlcnRpY2FsIHRvdGFsCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICB1c1ZfRGlzcDsgICAgICAgICAvLyB2ZXJ0aWNhbCBkaXNwbGF5CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICB1c1ZfU3luY1N0YXJ0OyAgICAvLyB2ZXJ0aWNhbCBTeW5jIHN0YXJ0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICB1c1ZfU3luY1dpZHRoOyAgICAvLyB2ZXJ0aWNhbCBTeW5jIHdpZHRoCisgIEFUT01fTU9ERV9NSVNDX0lORk9fQUNDRVNTICBzdXNNb2RlTWlzY0luZm87CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0NSVEM7ICAgICAgICAgICAvLyBBVE9NX0NSVEMxIG9yIEFUT01fQ1JUQzIKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjT3ZlcnNjYW5SaWdodDsgIC8vIHJpZ2h0CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y092ZXJzY2FuTGVmdDsgICAvLyBsZWZ0CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y092ZXJzY2FuQm90dG9tOyAvLyBib3R0b20KKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjT3ZlcnNjYW5Ub3A7ICAgIC8vIHRvcAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNSZXNlcnZlZDsKK31TRVRfQ1JUQ19USU1JTkdfUEFSQU1FVEVSUzsKICNkZWZpbmUgU0VUX0NSVENfVElNSU5HX1BBUkFNRVRFUlNfUFNfQUxMT0NBVElPTiBTRVRfQ1JUQ19USU1JTkdfUEFSQU1FVEVSUwogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmUgdXNlZCBpbiBTdGFuZGFyZFZFU0FfVGltaW5nVGFibGUgKi8KLS8qICAgICAgICAgICAgICAgICAgICBBbmFsb2dUVl9JbmZvVGFibGUgKi8KLS8qICAgICAgICAgICAgICAgICAgICBDb21wb25lbnRWaWRlb0luZm9UYWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9NT0RFX1RJTUlORyB7Ci0JVVNIT1JUIHVzQ1JUQ19IX1RvdGFsOwotCVVTSE9SVCB1c0NSVENfSF9EaXNwOwotCVVTSE9SVCB1c0NSVENfSF9TeW5jU3RhcnQ7Ci0JVVNIT1JUIHVzQ1JUQ19IX1N5bmNXaWR0aDsKLQlVU0hPUlQgdXNDUlRDX1ZfVG90YWw7Ci0JVVNIT1JUIHVzQ1JUQ19WX0Rpc3A7Ci0JVVNIT1JUIHVzQ1JUQ19WX1N5bmNTdGFydDsKLQlVU0hPUlQgdXNDUlRDX1ZfU3luY1dpZHRoOwotCVVTSE9SVCB1c1BpeGVsQ2xvY2s7CS8qIGluIDEwS2h6IHVuaXQgKi8KLQlBVE9NX01PREVfTUlTQ19JTkZPX0FDQ0VTUyBzdXNNb2RlTWlzY0luZm87Ci0JVVNIT1JUIHVzQ1JUQ19PdmVyc2NhblJpZ2h0OwotCVVTSE9SVCB1c0NSVENfT3ZlcnNjYW5MZWZ0OwotCVVTSE9SVCB1c0NSVENfT3ZlcnNjYW5Cb3R0b207Ci0JVVNIT1JUIHVzQ1JUQ19PdmVyc2NhblRvcDsKLQlVU0hPUlQgdXNSZXNlcnZlOwotCVVDSEFSIHVjSW50ZXJuYWxNb2RlTnVtYmVyOwotCVVDSEFSIHVjUmVmcmVzaFJhdGU7Ci19IEFUT01fTU9ERV9USU1JTkc7CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmUgdXNlZCBpbiBTdGFuZGFyZFZFU0FfVGltaW5nVGFibGUKKy8vICAgICAgICAgICAgICAgICAgIEFuYWxvZ1RWX0luZm9UYWJsZSAKKy8vICAgICAgICAgICAgICAgICAgIENvbXBvbmVudFZpZGVvSW5mb1RhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9NT0RFX1RJTUlORworeworICBVU0hPUlQgIHVzQ1JUQ19IX1RvdGFsOworICBVU0hPUlQgIHVzQ1JUQ19IX0Rpc3A7CisgIFVTSE9SVCAgdXNDUlRDX0hfU3luY1N0YXJ0OworICBVU0hPUlQgIHVzQ1JUQ19IX1N5bmNXaWR0aDsKKyAgVVNIT1JUICB1c0NSVENfVl9Ub3RhbDsKKyAgVVNIT1JUICB1c0NSVENfVl9EaXNwOworICBVU0hPUlQgIHVzQ1JUQ19WX1N5bmNTdGFydDsKKyAgVVNIT1JUICB1c0NSVENfVl9TeW5jV2lkdGg7CisgIFVTSE9SVCAgdXNQaXhlbENsb2NrOwkJCQkJICAgICAgICAgICAgICAgICAvL2luIDEwS2h6IHVuaXQKKyAgQVRPTV9NT0RFX01JU0NfSU5GT19BQ0NFU1MgIHN1c01vZGVNaXNjSW5mbzsKKyAgVVNIT1JUICB1c0NSVENfT3ZlcnNjYW5SaWdodDsKKyAgVVNIT1JUICB1c0NSVENfT3ZlcnNjYW5MZWZ0OworICBVU0hPUlQgIHVzQ1JUQ19PdmVyc2NhbkJvdHRvbTsKKyAgVVNIT1JUICB1c0NSVENfT3ZlcnNjYW5Ub3A7CisgIFVTSE9SVCAgdXNSZXNlcnZlOworICBVQ0hBUiAgIHVjSW50ZXJuYWxNb2RlTnVtYmVyOworICBVQ0hBUiAgIHVjUmVmcmVzaFJhdGU7Cit9QVRPTV9NT0RFX1RJTUlORzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fRFREX0ZPUk1BVCB7Ci0JVVNIT1JUIHVzUGl4Q2xrOwotCVVTSE9SVCB1c0hBY3RpdmU7Ci0JVVNIT1JUIHVzSEJsYW5raW5nX1RpbWU7Ci0JVVNIT1JUIHVzVkFjdGl2ZTsKLQlVU0hPUlQgdXNWQmxhbmtpbmdfVGltZTsKLQlVU0hPUlQgdXNIU3luY09mZnNldDsKLQlVU0hPUlQgdXNIU3luY1dpZHRoOwotCVVTSE9SVCB1c1ZTeW5jT2Zmc2V0OwotCVVTSE9SVCB1c1ZTeW5jV2lkdGg7Ci0JVVNIT1JUIHVzSW1hZ2VIU2l6ZTsKLQlVU0hPUlQgdXNJbWFnZVZTaXplOwotCVVDSEFSIHVjSEJvcmRlcjsKLQlVQ0hBUiB1Y1ZCb3JkZXI7Ci0JQVRPTV9NT0RFX01JU0NfSU5GT19BQ0NFU1Mgc3VzTW9kZU1pc2NJbmZvOwotCVVDSEFSIHVjSW50ZXJuYWxNb2RlTnVtYmVyOwotCVVDSEFSIHVjUmVmcmVzaFJhdGU7Ci19IEFUT01fRFREX0ZPUk1BVDsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0RURF9GT1JNQVQKK3sKKyAgVVNIT1JUICB1c1BpeENsazsKKyAgVVNIT1JUICB1c0hBY3RpdmU7CisgIFVTSE9SVCAgdXNIQmxhbmtpbmdfVGltZTsKKyAgVVNIT1JUICB1c1ZBY3RpdmU7CisgIFVTSE9SVCAgdXNWQmxhbmtpbmdfVGltZTsJCQkKKyAgVVNIT1JUICB1c0hTeW5jT2Zmc2V0OworICBVU0hPUlQgIHVzSFN5bmNXaWR0aDsKKyAgVVNIT1JUICB1c1ZTeW5jT2Zmc2V0OworICBVU0hPUlQgIHVzVlN5bmNXaWR0aDsKKyAgVVNIT1JUICB1c0ltYWdlSFNpemU7CisgIFVTSE9SVCAgdXNJbWFnZVZTaXplOworICBVQ0hBUiAgIHVjSEJvcmRlcjsKKyAgVUNIQVIgICB1Y1ZCb3JkZXI7CisgIEFUT01fTU9ERV9NSVNDX0lORk9fQUNDRVNTIHN1c01vZGVNaXNjSW5mbzsKKyAgVUNIQVIgICB1Y0ludGVybmFsTW9kZU51bWJlcjsKKyAgVUNIQVIgICB1Y1JlZnJlc2hSYXRlOworfUFUT01fRFREX0ZPUk1BVDsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlIHVzZWQgaW4gTFZEU19JbmZvVGFibGUgKi8KLS8qICAgKiBOZWVkIGEgZG9jdW1lbnQgdG8gZGVzY3JpYmUgdGhpcyB0YWJsZSAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmUgdXNlZCBpbiBMVkRTX0luZm9UYWJsZSAKKy8vICAqIE5lZWQgYSBkb2N1bWVudCB0byBkZXNjcmliZSB0aGlzIHRhYmxlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCiAjZGVmaW5lIFNVUFBPUlRFRF9MQ0RfUkVGUkVTSFJBVEVfMzBIeiAgICAgICAgICAweDAwMDQKICNkZWZpbmUgU1VQUE9SVEVEX0xDRF9SRUZSRVNIUkFURV80MEh6ICAgICAgICAgIDB4MDAwOAogI2RlZmluZSBTVVBQT1JURURfTENEX1JFRlJFU0hSQVRFXzUwSHogICAgICAgICAgMHgwMDEwCiAjZGVmaW5lIFNVUFBPUlRFRF9MQ0RfUkVGUkVTSFJBVEVfNjBIeiAgICAgICAgICAweDAwMjAKIAotLyogT25jZSBEQUwgc2VlcyB0aGlzIENBUCBpcyBzZXQsIGl0IHdpbGwgcmVhZCBFRElEIGZyb20gTENEIG9uIGl0cyBvd24gaW5zdGVhZCBvZiB1c2luZyBzTENEVGltaW5nIGluIEFUT01fTFZEU19JTkZPX1YxMi4gKi8KLS8qIE90aGVyIGVudHJpZXMgaW4gQVRPTV9MVkRTX0lORk9fVjEyIGFyZSBzdGlsbCB2YWxpZC91c2VmdWwgdG8gREFMICovCi0jZGVmaW5lCUxDRFBBTkVMX0NBUF9SRUFEX0VESUQJCQkJCQkJCQkweDEKKy8vdWNUYWJsZUZvcm1hdFJldmlzaW9uPTEKKy8vdWNUYWJsZUNvbnRlbnRSZXZpc2lvbj0xCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9MVkRTX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7ICAKKyAgQVRPTV9EVERfRk9STUFUICAgICBzTENEVGltaW5nOworICBVU0hPUlQgICAgICAgICAgICAgIHVzTW9kZVBhdGNoVGFibGVPZmZzZXQ7CisgIFVTSE9SVCAgICAgICAgICAgICAgdXNTdXBwb3J0ZWRSZWZyZXNoUmF0ZTsgICAgIC8vUmVmZXIgdG8gcGFuZWwgaW5mbyB0YWJsZSBpbiBBVE9NQklPUyBleHRlbnNpb24gU3BlYy4KKyAgVVNIT1JUICAgICAgICAgICAgICB1c09mZkRlbGF5SW5NczsKKyAgVUNIQVIgICAgICAgICAgICAgICB1Y1Bvd2VyU2VxdWVuY2VEaWdPbnRvREVpbjEwTXM7CisgIFVDSEFSICAgICAgICAgICAgICAgdWNQb3dlclNlcXVlbmNlREV0b0JMT25pbjEwTXM7CisgIFVDSEFSICAgICAgICAgICAgICAgdWNMVkRTX01pc2M7ICAgICAgICAgICAgICAgLy8gQml0MDp7PTA6c2luZ2xlLCA9MTpkdWFsfSxCaXQxIHs9MDo2NjZSR0IsID0xOjg4OFJHQn0sQml0MjozOntHcmV5IGxldmVsfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpdDQ6ez0wOkxESSBmb3JtYXQgZm9yIFJHQjg4OCwgPTEgRlBESSBmb3JtYXQgZm9yIFJHQjg4OH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCaXQ1Ons9MDpTcGF0aWFsIERpdGhlcmluZyBkaXNhYmxlZDsxIFNwYXRpYWwgRGl0aGVyaW5nIGVuYWJsZWR9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQml0Njp7PTA6VGVtcG9yYWwgRGl0aGVyaW5nIGRpc2FibGVkOzEgVGVtcG9yYWwgRGl0aGVyaW5nIGVuYWJsZWR9CisgIFVDSEFSICAgICAgICAgICAgICAgdWNQYW5lbERlZmF1bHRSZWZyZXNoUmF0ZTsKKyAgVUNIQVIgICAgICAgICAgICAgICB1Y1BhbmVsSWRlbnRpZmljYXRpb247CisgIFVDSEFSICAgICAgICAgICAgICAgdWNTU19JZDsKK31BVE9NX0xWRFNfSU5GTzsKIAotLyogdWNUYWJsZUZvcm1hdFJldmlzaW9uPTEgKi8KLS8qIHVjVGFibGVDb250ZW50UmV2aXNpb249MSAqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTFZEU19JTkZPIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlBVE9NX0RURF9GT1JNQVQgc0xDRFRpbWluZzsKLQlVU0hPUlQgdXNNb2RlUGF0Y2hUYWJsZU9mZnNldDsKLQlVU0hPUlQgdXNTdXBwb3J0ZWRSZWZyZXNoUmF0ZTsJLyogUmVmZXIgdG8gcGFuZWwgaW5mbyB0YWJsZSBpbiBBVE9NQklPUyBleHRlbnNpb24gU3BlYy4gKi8KLQlVU0hPUlQgdXNPZmZEZWxheUluTXM7Ci0JVUNIQVIgdWNQb3dlclNlcXVlbmNlRGlnT250b0RFaW4xME1zOwotCVVDSEFSIHVjUG93ZXJTZXF1ZW5jZURFdG9CTE9uaW4xME1zOwotCVVDSEFSIHVjTFZEU19NaXNjOwkvKiAgQml0MDp7PTA6c2luZ2xlLCA9MTpkdWFsfSxCaXQxIHs9MDo2NjZSR0IsID0xOjg4OFJHQn0sQml0MjozOntHcmV5IGxldmVsfSAqLwotCS8qICBCaXQ0Ons9MDpMREkgZm9ybWF0IGZvciBSR0I4ODgsID0xIEZQREkgZm9ybWF0IGZvciBSR0I4ODh9ICovCi0JLyogIEJpdDU6ez0wOlNwYXRpYWwgRGl0aGVyaW5nIGRpc2FibGVkOzEgU3BhdGlhbCBEaXRoZXJpbmcgZW5hYmxlZH0gKi8KLQkvKiAgQml0Njp7PTA6VGVtcG9yYWwgRGl0aGVyaW5nIGRpc2FibGVkOzEgVGVtcG9yYWwgRGl0aGVyaW5nIGVuYWJsZWR9ICovCi0JVUNIQVIgdWNQYW5lbERlZmF1bHRSZWZyZXNoUmF0ZTsKLQlVQ0hBUiB1Y1BhbmVsSWRlbnRpZmljYXRpb247Ci0JVUNIQVIgdWNTU19JZDsKLX0gQVRPTV9MVkRTX0lORk87CisvL3VjVGFibGVGb3JtYXRSZXZpc2lvbj0xCisvL3VjVGFibGVDb250ZW50UmV2aXNpb249MgordHlwZWRlZiBzdHJ1Y3QgX0FUT01fTFZEU19JTkZPX1YxMgoreworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsgIAorICBBVE9NX0RURF9GT1JNQVQgICAgIHNMQ0RUaW1pbmc7CisgIFVTSE9SVCAgICAgICAgICAgICAgdXNFeHRJbmZvVGFibGVPZmZzZXQ7CisgIFVTSE9SVCAgICAgICAgICAgICAgdXNTdXBwb3J0ZWRSZWZyZXNoUmF0ZTsgICAgIC8vUmVmZXIgdG8gcGFuZWwgaW5mbyB0YWJsZSBpbiBBVE9NQklPUyBleHRlbnNpb24gU3BlYy4KKyAgVVNIT1JUICAgICAgICAgICAgICB1c09mZkRlbGF5SW5NczsKKyAgVUNIQVIgICAgICAgICAgICAgICB1Y1Bvd2VyU2VxdWVuY2VEaWdPbnRvREVpbjEwTXM7CisgIFVDSEFSICAgICAgICAgICAgICAgdWNQb3dlclNlcXVlbmNlREV0b0JMT25pbjEwTXM7CisgIFVDSEFSICAgICAgICAgICAgICAgdWNMVkRTX01pc2M7ICAgICAgICAgICAgICAgLy8gQml0MDp7PTA6c2luZ2xlLCA9MTpkdWFsfSxCaXQxIHs9MDo2NjZSR0IsID0xOjg4OFJHQn0sQml0MjozOntHcmV5IGxldmVsfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJpdDQ6ez0wOkxESSBmb3JtYXQgZm9yIFJHQjg4OCwgPTEgRlBESSBmb3JtYXQgZm9yIFJHQjg4OH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBCaXQ1Ons9MDpTcGF0aWFsIERpdGhlcmluZyBkaXNhYmxlZDsxIFNwYXRpYWwgRGl0aGVyaW5nIGVuYWJsZWR9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQml0Njp7PTA6VGVtcG9yYWwgRGl0aGVyaW5nIGRpc2FibGVkOzEgVGVtcG9yYWwgRGl0aGVyaW5nIGVuYWJsZWR9CisgIFVDSEFSICAgICAgICAgICAgICAgdWNQYW5lbERlZmF1bHRSZWZyZXNoUmF0ZTsKKyAgVUNIQVIgICAgICAgICAgICAgICB1Y1BhbmVsSWRlbnRpZmljYXRpb247CisgIFVDSEFSICAgICAgICAgICAgICAgdWNTU19JZDsKKyAgVVNIT1JUICAgICAgICAgICAgICB1c0xDRFZlbmRlcklEOworICBVU0hPUlQgICAgICAgICAgICAgIHVzTENEUHJvZHVjdElEOworICBVQ0hBUiAgICAgICAgICAgICAgIHVjTENEUGFuZWxfU3BlY2lhbEhhbmRsaW5nQ2FwOyAKKwlVQ0hBUgkJCQkJCQkJdWNQYW5lbEluZm9TaXplOwkJCQkJLy8gIHN0YXJ0IGZyb20gQVRPTV9EVERfRk9STUFUIHRvIGVuZCBvZiBwYW5lbCBpbmZvLCBpbmNsdWRlIEV4dEluZm9UYWJsZQorICBVQ0hBUiAgICAgICAgICAgICAgIHVjUmVzZXJ2ZWRbMl07Cit9QVRPTV9MVkRTX0lORk9fVjEyOwogCi0vKiB1Y1RhYmxlRm9ybWF0UmV2aXNpb249MSAqLwotLyogdWNUYWJsZUNvbnRlbnRSZXZpc2lvbj0yICovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9MVkRTX0lORk9fVjEyIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlBVE9NX0RURF9GT1JNQVQgc0xDRFRpbWluZzsKLQlVU0hPUlQgdXNFeHRJbmZvVGFibGVPZmZzZXQ7Ci0JVVNIT1JUIHVzU3VwcG9ydGVkUmVmcmVzaFJhdGU7CS8qIFJlZmVyIHRvIHBhbmVsIGluZm8gdGFibGUgaW4gQVRPTUJJT1MgZXh0ZW5zaW9uIFNwZWMuICovCi0JVVNIT1JUIHVzT2ZmRGVsYXlJbk1zOwotCVVDSEFSIHVjUG93ZXJTZXF1ZW5jZURpZ09udG9ERWluMTBNczsKLQlVQ0hBUiB1Y1Bvd2VyU2VxdWVuY2VERXRvQkxPbmluMTBNczsKLQlVQ0hBUiB1Y0xWRFNfTWlzYzsJLyogIEJpdDA6ez0wOnNpbmdsZSwgPTE6ZHVhbH0sQml0MSB7PTA6NjY2UkdCLCA9MTo4ODhSR0J9LEJpdDI6Mzp7R3JleSBsZXZlbH0gKi8KLQkvKiAgQml0NDp7PTA6TERJIGZvcm1hdCBmb3IgUkdCODg4LCA9MSBGUERJIGZvcm1hdCBmb3IgUkdCODg4fSAqLwotCS8qICBCaXQ1Ons9MDpTcGF0aWFsIERpdGhlcmluZyBkaXNhYmxlZDsxIFNwYXRpYWwgRGl0aGVyaW5nIGVuYWJsZWR9ICovCi0JLyogIEJpdDY6ez0wOlRlbXBvcmFsIERpdGhlcmluZyBkaXNhYmxlZDsxIFRlbXBvcmFsIERpdGhlcmluZyBlbmFibGVkfSAqLwotCVVDSEFSIHVjUGFuZWxEZWZhdWx0UmVmcmVzaFJhdGU7Ci0JVUNIQVIgdWNQYW5lbElkZW50aWZpY2F0aW9uOwotCVVDSEFSIHVjU1NfSWQ7Ci0JVVNIT1JUIHVzTENEVmVuZGVySUQ7Ci0JVVNIT1JUIHVzTENEUHJvZHVjdElEOwotCVVDSEFSIHVjTENEUGFuZWxfU3BlY2lhbEhhbmRsaW5nQ2FwOwotCVVDSEFSIHVjUGFuZWxJbmZvU2l6ZTsJLyogICBzdGFydCBmcm9tIEFUT01fRFREX0ZPUk1BVCB0byBlbmQgb2YgcGFuZWwgaW5mbywgaW5jbHVkZSBFeHRJbmZvVGFibGUgKi8KLQlVQ0hBUiB1Y1Jlc2VydmVkWzJdOwotfSBBVE9NX0xWRFNfSU5GT19WMTI7CisvL0RlZmluaXRpb25zIGZvciB1Y0xDRFBhbmVsX1NwZWNpYWxIYW5kbGluZ0NhcDoKKworLy9PbmNlIERBTCBzZWVzIHRoaXMgQ0FQIGlzIHNldCwgaXQgd2lsbCByZWFkIEVESUQgZnJvbSBMQ0Qgb24gaXRzIG93biBpbnN0ZWFkIG9mIHVzaW5nIHNMQ0RUaW1pbmcgaW4gQVRPTV9MVkRTX0lORk9fVjEyLiAKKy8vT3RoZXIgZW50cmllcyBpbiBBVE9NX0xWRFNfSU5GT19WMTIgYXJlIHN0aWxsIHZhbGlkL3VzZWZ1bCB0byBEQUwgCisjZGVmaW5lCUxDRFBBTkVMX0NBUF9SRUFEX0VESUQgICAgICAgICAgICAgICAgICAweDEKKworLy9JZiBhIGRlc2lnbiBzdXBwb3J0cyBEUlIgKGR5bmFtaWMgcmVmcmVzaCByYXRlKSBvbiBpbnRlcm5hbCBwYW5lbHMgKExWRFMgb3IgRURQKSwgdGhpcyBjYXAgaXMgc2V0IGluIHVjTENEUGFuZWxfU3BlY2lhbEhhbmRsaW5nQ2FwIHRvZ2V0aGVyCisvL3dpdGggbXVsdGlwbGUgc3VwcG9ydGVkIHJlZnJlc2ggcmF0ZXNAdXNTdXBwb3J0ZWRSZWZyZXNoUmF0ZS4gVGhpcyBjYXAgc2hvdWxkIG5vdCBiZSBzZXQgd2hlbiBvbmx5IHNsb3cgcmVmcmVzaCByYXRlIGlzIHN1cHBvcnRlZCAoc3RhdGljCisvL3JlZnJlc2ggcmF0ZSBzd2l0Y2ggYnkgU1cuIFRoaXMgaXMgb25seSB2YWxpZCBmcm9tIEFUT01fTFZEU19JTkZPX1YxMgorI2RlZmluZQlMQ0RQQU5FTF9DQVBfRFJSX1NVUFBPUlRFRCAgICAgICAgICAgICAgMHgyCisKKy8vVXNlIHRoaXMgY2FwIGJpdCBmb3IgYSBxdWljayByZWZlcmVuY2Ugd2hldGhlciBhbiBlbWJhZGRlZCBwYW5lbCAoTENEMSApIGlzIExWRFMgb3IgZURQLgorI2RlZmluZQlMQ0RQQU5FTF9DQVBfZURQICAgICAgICAgICAgICAgICAgICAgICAgMHg0CisKKworLy9Db2xvciBCaXQgRGVwdGggZGVmaW5pdGlvbiBpbiBFRElEIFYxLjQgQEJZVEUgMTRoCisvL0JpdCA2ICA1ICA0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIDAgIDAgIDAgIC0gIENvbG9yIGJpdCBkZXB0aCBpcyB1bmRlZmluZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgMCAgMCAgMSAgLSAgNiBCaXRzIHBlciBQcmltYXJ5IENvbG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIDAgIDEgIDAgIC0gIDggQml0cyBwZXIgUHJpbWFyeSBDb2xvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAwICAxICAxICAtIDEwIEJpdHMgcGVyIFByaW1hcnkgQ29sb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgMSAgMCAgMCAgLSAxMiBCaXRzIHBlciBQcmltYXJ5IENvbG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIDEgIDAgIDEgIC0gMTQgQml0cyBwZXIgUHJpbWFyeSBDb2xvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAxICAxICAwICAtIDE2IEJpdHMgcGVyIFByaW1hcnkgQ29sb3IKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgMSAgMSAgMSAgLSBSZXNlcnZlZAorCisjZGVmaW5lIFBBTkVMX0NPTE9SX0JJVF9ERVBUSF9NQVNLICAgIDB4NzAKKworLy8gQml0Nzp7PTA6UmFuZG9tIERpdGhlcmluZyBkaXNhYmxlZDsxIFJhbmRvbSBEaXRoZXJpbmcgZW5hYmxlZH0gICAKKyNkZWZpbmUgUEFORUxfUkFORE9NX0RJVEhFUiAgIDB4ODAKKyNkZWZpbmUgUEFORUxfUkFORE9NX0RJVEhFUl9NQVNLICAgMHg4MAorCiAKICNkZWZpbmUgQVRPTV9MVkRTX0lORk9fTEFTVCAgQVRPTV9MVkRTX0lORk9fVjEyCiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1BBVENIX1JFQ09SRF9NT0RFIHsKLQlVQ0hBUiB1Y1JlY29yZFR5cGU7Ci0JVVNIT1JUIHVzSERpc3A7Ci0JVVNIT1JUIHVzVkRpc3A7Ci19IEFUT01fUEFUQ0hfUkVDT1JEX01PREU7Cit0eXBlZGVmIHN0cnVjdCAgX0FUT01fUEFUQ0hfUkVDT1JEX01PREUKK3sKKyAgVUNIQVIgICAgIHVjUmVjb3JkVHlwZTsKKyAgVVNIT1JUICAgIHVzSERpc3A7CisgIFVTSE9SVCAgICB1c1ZEaXNwOworfUFUT01fUEFUQ0hfUkVDT1JEX01PREU7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0xDRF9SVFNfUkVDT1JEIHsKLQlVQ0hBUiB1Y1JlY29yZFR5cGU7Ci0JVUNIQVIgdWNSVFNWYWx1ZTsKLX0gQVRPTV9MQ0RfUlRTX1JFQ09SRDsKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9MQ0RfUlRTX1JFQ09SRAoreworICBVQ0hBUiAgICAgdWNSZWNvcmRUeXBlOworICBVQ0hBUiAgICAgdWNSVFNWYWx1ZTsKK31BVE9NX0xDRF9SVFNfUkVDT1JEOwogCi0vKiAhISBJZiB0aGUgcmVjb3JkIGJlbG93IGV4aXRzLCBpdCBzaG91ZCBhbHdheXMgYmUgdGhlIGZpcnN0IHJlY29yZCBmb3IgZWFzeSB1c2UgaW4gY29tbWFuZCB0YWJsZSEhISAqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTENEX01PREVfQ09OVFJPTF9DQVAgewotCVVDSEFSIHVjUmVjb3JkVHlwZTsKLQlVU0hPUlQgdXNMQ0RDYXA7Ci19IEFUT01fTENEX01PREVfQ09OVFJPTF9DQVA7CisvLyEhIElmIHRoZSByZWNvcmQgYmVsb3cgZXhpdHMsIGl0IHNob3VkIGFsd2F5cyBiZSB0aGUgZmlyc3QgcmVjb3JkIGZvciBlYXN5IHVzZSBpbiBjb21tYW5kIHRhYmxlISEhIAorLy8gVGhlIHJlY29yZCBiZWxvdyBpcyBvbmx5IHVzZWQgd2hlbiBMVkRTX0luZm8gaXMgcHJlc2VudC4gRnJvbSBBVE9NX0xWRFNfSU5GT19WMTIsIHVzZSB1Y0xDRFBhbmVsX1NwZWNpYWxIYW5kbGluZ0NhcCBpbnN0ZWFkLgordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX0xDRF9NT0RFX0NPTlRST0xfQ0FQCit7CisgIFVDSEFSICAgICB1Y1JlY29yZFR5cGU7CisgIFVTSE9SVCAgICB1c0xDRENhcDsKK31BVE9NX0xDRF9NT0RFX0NPTlRST0xfQ0FQOwogCiAjZGVmaW5lIExDRF9NT0RFX0NBUF9CTF9PRkYgICAgICAgICAgICAgICAgICAgMQogI2RlZmluZSBMQ0RfTU9ERV9DQVBfQ1JUQ19PRkYgICAgICAgICAgICAgICAgIDIKICNkZWZpbmUgTENEX01PREVfQ0FQX1BBTkVMX09GRiAgICAgICAgICAgICAgICA0CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0ZBS0VfRURJRF9QQVRDSF9SRUNPUkQgewotCVVDSEFSIHVjUmVjb3JkVHlwZTsKLQlVQ0hBUiB1Y0Zha2VFRElETGVuZ3RoOwotCVVDSEFSIHVjRmFrZUVESURTdHJpbmdbMV07CS8qICBUaGlzIGFjdHVhbGx5IGhhcyB1Y0Zha2VFZGlkTGVuZ3RoIGVsZW1lbnRzLiAqLwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fRkFLRV9FRElEX1BBVENIX1JFQ09SRAoreworICBVQ0hBUiB1Y1JlY29yZFR5cGU7CisgIFVDSEFSIHVjRmFrZUVESURMZW5ndGg7CisgIFVDSEFSIHVjRmFrZUVESURTdHJpbmdbMV07ICAgIC8vIFRoaXMgYWN0dWFsbHkgaGFzIHVjRmFrZUVkaWRMZW5ndGggZWxlbWVudHMuCiB9IEFUT01fRkFLRV9FRElEX1BBVENIX1JFQ09SRDsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fUEFORUxfUkVTT0xVVElPTl9QQVRDSF9SRUNPUkQgewotCVVDSEFSIHVjUmVjb3JkVHlwZTsKLQlVU0hPUlQgdXNIU2l6ZTsKLQlVU0hPUlQgdXNWU2l6ZTsKLX0gQVRPTV9QQU5FTF9SRVNPTFVUSU9OX1BBVENIX1JFQ09SRDsKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9QQU5FTF9SRVNPTFVUSU9OX1BBVENIX1JFQ09SRAoreworICAgVUNIQVIgICAgdWNSZWNvcmRUeXBlOworICAgVVNIT1JUCQl1c0hTaXplOworICAgVVNIT1JUCQl1c1ZTaXplOworfUFUT01fUEFORUxfUkVTT0xVVElPTl9QQVRDSF9SRUNPUkQ7CiAKICNkZWZpbmUgTENEX01PREVfUEFUQ0hfUkVDT1JEX01PREVfVFlQRSAgICAgICAxCiAjZGVmaW5lIExDRF9SVFNfUkVDT1JEX1RZUEUgICAgICAgICAgICAgICAgICAgMgpAQCAtMjMwNiwyMSArMjgyOSwyNSBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKlNwcmVhZCBTcGVjdHJ1bSBJbmZvIFRhYmxlIERlZmluaXRpb25zICoqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qIHVjVGFibGVGb3JtYXRSZXZpc2lvbj0xICovCi0vKiB1Y1RhYmxlQ29udGVudFJldmlzaW9uPTIgKi8KLXR5cGVkZWYgc3RydWN0IF9BVE9NX1NQUkVBRF9TUEVDVFJVTV9BU1NJR05NRU5UIHsKLQlVU0hPUlQgdXNTcHJlYWRTcGVjdHJ1bVBlcmNlbnRhZ2U7Ci0JVUNIQVIgdWNTcHJlYWRTcGVjdHJ1bVR5cGU7CS8qIEJpdDE9MCBEb3duIFNwcmVhZCw9MSBDZW50ZXIgU3ByZWFkLiBCaXQxPTEgRXh0LiA9MCBJbnQuIE90aGVyczpUQkQgKi8KLQlVQ0hBUiB1Y1NTX1N0ZXA7Ci0JVUNIQVIgdWNTU19EZWxheTsKLQlVQ0hBUiB1Y1NTX0lkOwotCVVDSEFSIHVjUmVjb21tZW5kZWRSZWZfRGl2OwotCVVDSEFSIHVjU1NfUmFuZ2U7CS8qIGl0IHdhcyByZXNlcnZlZCBmb3IgVjExICovCi19IEFUT01fU1BSRUFEX1NQRUNUUlVNX0FTU0lHTk1FTlQ7CisvL3VjVGFibGVGb3JtYXRSZXZpc2lvbj0xCisvL3VjVGFibGVDb250ZW50UmV2aXNpb249MgordHlwZWRlZiBzdHJ1Y3QgX0FUT01fU1BSRUFEX1NQRUNUUlVNX0FTU0lHTk1FTlQKK3sKKyAgVVNIT1JUICAgICAgICAgICAgICB1c1NwcmVhZFNwZWN0cnVtUGVyY2VudGFnZTsgCisgIFVDSEFSICAgICAgICAgICAgICAgdWNTcHJlYWRTcGVjdHJ1bVR5cGU7CSAgICAvL0JpdDE9MCBEb3duIFNwcmVhZCw9MSBDZW50ZXIgU3ByZWFkLiBCaXQxPTEgRXh0LiA9MCBJbnQuIEJpdDI9MTogUENJRSBSRUZDTEsgU1MgPTAgaXRlcm5hbCBQUExMIFNTICBPdGhlcnM6VEJECisgIFVDSEFSICAgICAgICAgICAgICAgdWNTU19TdGVwOworICBVQ0hBUiAgICAgICAgICAgICAgIHVjU1NfRGVsYXk7CisgIFVDSEFSICAgICAgICAgICAgICAgdWNTU19JZDsKKyAgVUNIQVIgICAgICAgICAgICAgICB1Y1JlY29tbWVuZGVkUmVmX0RpdjsKKyAgVUNIQVIgICAgICAgICAgICAgICB1Y1NTX1JhbmdlOyAgICAgICAgICAgICAgIC8vaXQgd2FzIHJlc2VydmVkIGZvciBWMTEKK31BVE9NX1NQUkVBRF9TUEVDVFJVTV9BU1NJR05NRU5UOwogCiAjZGVmaW5lIEFUT01fTUFYX1NTX0VOVFJZICAgICAgICAgICAgICAgICAgICAgIDE2Ci0jZGVmaW5lIEFUT01fRFBfU1NfSUQxCQkJCQkJCQkJCQkJIDB4MGYxCS8qICBTUyBtb2R1bGF0aW9uIGZyZXE9MzBrICovCi0jZGVmaW5lIEFUT01fRFBfU1NfSUQyCQkJCQkJCQkJCQkJIDB4MGYyCS8qICBTUyBtb2R1bGF0aW9uIGZyZXE9MzNrICovCisjZGVmaW5lIEFUT01fRFBfU1NfSUQxCQkJCQkJCQkJCQkJIDB4MGYxCQkJLy8gU1MgSUQgZm9yIGludGVybmFsIERQIHN0cmVhbSBhdCAyLjdHaHouIGlmIEFUT01fRFBfU1NfSUQyIGRvZXMgbm90IGV4aXN0IGluIFNTX0luZm9UYWJsZSwgaXQgaXMgdXNlZCBmb3IgaW50ZXJuYWwgRFAgc3RyZWFtIGF0IDEuNjJHaHogYXMgd2VsbC4gCisjZGVmaW5lIEFUT01fRFBfU1NfSUQyCQkJCQkJCQkJCQkJIDB4MGYyCQkJLy8gU1MgSUQgZm9yIGludGVybmFsIERQIHN0cmVhbSBhdCAxLjYyR2h6LCBpZiBpdCBleGlzdHMgaW4gU1NfSW5mb1RhYmxlLiAKKyNkZWZpbmUgQVRPTV9MVkxJTktfMjcwME1Iel9TU19JRCAgICAgICAgICAgICAgMHgwZjMgICAgICAvLyBTUyBJRCBmb3IgTFYgbGluayB0cmFuc2xhdG9yIGNoaXAgYXQgMi43R2h6CisjZGVmaW5lIEFUT01fTFZMSU5LXzE2MjBNSHpfU1NfSUQgICAgICAgICAgICAgIDB4MGY0ICAgICAgLy8gU1MgSUQgZm9yIExWIGxpbmsgdHJhbnNsYXRvciBjaGlwIGF0IDEuNjJHaHoKKwogCiAjZGVmaW5lIEFUT01fU1NfRE9XTl9TUFJFQURfTU9ERV9NQVNLICAgICAgICAgIDB4MDAwMDAwMDAKICNkZWZpbmUgQVRPTV9TU19ET1dOX1NQUkVBRF9NT0RFICAgICAgICAgICAgICAgMHgwMDAwMDAwMApAQCAtMjMyOSwyOSArMjg1NiwzMCBAQAogI2RlZmluZSBBVE9NX0lOVEVSTkFMX1NTX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCiAjZGVmaW5lIEFUT01fRVhURVJOQUxfU1NfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKICNkZWZpbmUgRVhFQ19TU19TVEVQX1NJWkVfU0hJRlQgICAgICAgICAgICAgICAgMgotI2RlZmluZSBFWEVDX1NTX0RFTEFZX1NISUZUICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEVYRUNfU1NfREVMQVlfU0hJRlQgICAgICAgICAgICAgICAgICAgIDQgICAgCiAjZGVmaW5lIEFDVElWRURBVEFfVE9fQkxPTl9ERUxBWV9TSElGVCAgICAgICAgIDQKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fU1BSRUFEX1NQRUNUUlVNX0lORk8gewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCUFUT01fU1BSRUFEX1NQRUNUUlVNX0FTU0lHTk1FTlQgYXNTU19JbmZvW0FUT01fTUFYX1NTX0VOVFJZXTsKLX0gQVRPTV9TUFJFQURfU1BFQ1RSVU1fSU5GTzsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1NQUkVBRF9TUEVDVFJVTV9JTkZPCit7IAorICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIJc0hlYWRlcjsKKyAgQVRPTV9TUFJFQURfU1BFQ1RSVU1fQVNTSUdOTUVOVCAgIGFzU1NfSW5mb1tBVE9NX01BWF9TU19FTlRSWV07Cit9QVRPTV9TUFJFQURfU1BFQ1RSVU1fSU5GTzsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlIHVzZWQgaW4gQW5hbG9nVFZfSW5mb1RhYmxlIChUb3AgbGV2ZWwpICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIHVjVFZCb290VXBEZWZhdWx0U3RkIGRlZmluaXRvbjogKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZSB1c2VkIGluIEFuYWxvZ1RWX0luZm9UYWJsZSAoVG9wIGxldmVsKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy91Y1RWQm9vdFVwRGVmYXVsdFN0ZCBkZWZpbml0b246CiAKLS8qIEFUT01fVFZfTlRTQyAgICAgICAgICAgICAgICAxICovCi0vKiBBVE9NX1RWX05UU0NKICAgICAgICAgICAgICAgMiAqLwotLyogQVRPTV9UVl9QQUwgICAgICAgICAgICAgICAgIDMgKi8KLS8qIEFUT01fVFZfUEFMTSAgICAgICAgICAgICAgICA0ICovCi0vKiBBVE9NX1RWX1BBTENOICAgICAgICAgICAgICAgNSAqLwotLyogQVRPTV9UVl9QQUxOICAgICAgICAgICAgICAgIDYgKi8KLS8qIEFUT01fVFZfUEFMNjAgICAgICAgICAgICAgICA3ICovCi0vKiBBVE9NX1RWX1NFQ0FNICAgICAgICAgICAgICAgOCAqLworLy9BVE9NX1RWX05UU0MgICAgICAgICAgICAgICAgMQorLy9BVE9NX1RWX05UU0NKICAgICAgICAgICAgICAgMgorLy9BVE9NX1RWX1BBTCAgICAgICAgICAgICAgICAgMworLy9BVE9NX1RWX1BBTE0gICAgICAgICAgICAgICAgNAorLy9BVE9NX1RWX1BBTENOICAgICAgICAgICAgICAgNQorLy9BVE9NX1RWX1BBTE4gICAgICAgICAgICAgICAgNgorLy9BVE9NX1RWX1BBTDYwICAgICAgICAgICAgICAgNworLy9BVE9NX1RWX1NFQ0FNICAgICAgICAgICAgICAgOAogCi0vKiB1Y1RWU3VwcHBvcnRlZFN0ZCBkZWZpbml0aW9uOiAqLworLy91Y1RWU3VwcG9ydGVkU3RkIGRlZmluaXRpb246CiAjZGVmaW5lIE5UU0NfU1VQUE9SVCAgICAgICAgICAweDEKICNkZWZpbmUgTlRTQ0pfU1VQUE9SVCAgICAgICAgIDB4MgogCkBAIC0yMzY0LDQ2ICsyODkyLDU4IEBACiAKICNkZWZpbmUgTUFYX1NVUFBPUlRFRF9UVl9USU1JTkcgICAgMgogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9BTkFMT0dfVFZfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVUNIQVIgdWNUVl9TdXBwb3J0ZWRTdGFuZGFyZDsKLQlVQ0hBUiB1Y1RWX0Jvb3RVcERlZmF1bHRTdGFuZGFyZDsKLQlVQ0hBUiB1Y0V4dF9UVl9BU0lDX0lEOwotCVVDSEFSIHVjRXh0X1RWX0FTSUNfU2xhdmVBZGRyOwotCS8qQVRPTV9EVERfRk9STUFUICAgICAgICAgIGFNb2RlVGltaW5nc1tNQVhfU1VQUE9SVEVEX1RWX1RJTUlOR107ICovCi0JQVRPTV9NT0RFX1RJTUlORyBhTW9kZVRpbWluZ3NbTUFYX1NVUFBPUlRFRF9UVl9USU1JTkddOwotfSBBVE9NX0FOQUxPR19UVl9JTkZPOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fQU5BTE9HX1RWX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7ICAKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjVFZfU3VwcG9ydGVkU3RhbmRhcmQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y1RWX0Jvb3RVcERlZmF1bHRTdGFuZGFyZDsgCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y0V4dF9UVl9BU0lDX0lEOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgdWNFeHRfVFZfQVNJQ19TbGF2ZUFkZHI7CisgIC8qQVRPTV9EVERfRk9STUFUICAgICAgICAgIGFNb2RlVGltaW5nc1tNQVhfU1VQUE9SVEVEX1RWX1RJTUlOR107Ki8KKyAgQVRPTV9NT0RFX1RJTUlORyAgICAgICAgIGFNb2RlVGltaW5nc1tNQVhfU1VQUE9SVEVEX1RWX1RJTUlOR107Cit9QVRPTV9BTkFMT0dfVFZfSU5GTzsKIAogI2RlZmluZSBNQVhfU1VQUE9SVEVEX1RWX1RJTUlOR19WMV8yICAgIDMKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fQU5BTE9HX1RWX0lORk9fVjFfMiB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjVFZfU3VwcG9ydGVkU3RhbmRhcmQ7Ci0JVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjVFZfQm9vdFVwRGVmYXVsdFN0YW5kYXJkOwotCVVDSEFSICAgICAgICAgICAgICAgICAgICB1Y0V4dF9UVl9BU0lDX0lEOwotCVVDSEFSICAgICAgICAgICAgICAgICAgICB1Y0V4dF9UVl9BU0lDX1NsYXZlQWRkcjsKLQlBVE9NX0RURF9GT1JNQVQgICAgICAgICAgYU1vZGVUaW1pbmdzW01BWF9TVVBQT1JURURfVFZfVElNSU5HXTsKLX0gQVRPTV9BTkFMT0dfVFZfSU5GT19WMV8yOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fQU5BTE9HX1RWX0lORk9fVjFfMgoreworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsgIAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgdWNUVl9TdXBwb3J0ZWRTdGFuZGFyZDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjVFZfQm9vdFVwRGVmYXVsdFN0YW5kYXJkOyAKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjRXh0X1RWX0FTSUNfSUQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y0V4dF9UVl9BU0lDX1NsYXZlQWRkcjsKKyAgQVRPTV9EVERfRk9STUFUICAgICAgICAgIGFNb2RlVGltaW5nc1tNQVhfU1VQUE9SVEVEX1RWX1RJTUlOR107Cit9QVRPTV9BTkFMT0dfVFZfSU5GT19WMV8yOworCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9EUENEX0lORk8KK3sKKyAgVUNIQVIgICB1Y1JldmlzaW9uTnVtYmVyOyAgICAgICAgLy8xMGggOiBSZXZpc2lvbiAxLjA7IDExaCA6IFJldmlzaW9uIDEuMSAgIAorICBVQ0hBUiAgIHVjTWF4TGlua1JhdGU7ICAgICAgICAgICAvLzA2aCA6IDEuNjJHYnBzIHBlciBsYW5lOyAwQWggPSAyLjdHYnBzIHBlciBsYW5lCisgIFVDSEFSICAgdWNNYXhMYW5lOyAgICAgICAgICAgICAgIC8vQml0cyA0OjAgPSBNQVhfTEFORV9DT1VOVCAoMS8yLzQpLiBCaXQgNyA9IEVOSEFOQ0VEX0ZSQU1FX0NBUCAKKyAgVUNIQVIgICB1Y01heERvd25TcHJlYWQ7ICAgICAgICAgLy9CaXQwID0gMDogTm8gRG93biBzcHJlYWQ7IEJpdDAgPSAxOiAwLjUlIChTdWJqZWN0IHRvIGNoYW5nZSBhY2NvcmRpbmcgdG8gRFAgc3BlYykKK31BVE9NX0RQQ0RfSU5GTzsKKworI2RlZmluZSBBVE9NX0RQQ0RfTUFYX0xBTkVfTUFTSyAgICAweDFGCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBWUkFNIHVzYWdlIGFuZCB0aGVpciBkZWZpbml0aW9ucyAqLworLy8gVlJBTSB1c2FnZSBhbmQgdGhlaXIgZGVmaW50aW9ucwogCi0vKiAgT25lIGNodW5rIG9mIFZSQU0gdXNlZCBieSBCaW9zIGFyZSBmb3IgSFdJQ09OIHN1cmZhY2VzLEVESUQgZGF0YS4gKi8KLS8qICBDdXJyZW50IE1vZGUgdGltaW5nIGFuZCBEYWlsIFRpbWluZyBhbmQvb3IgU1REIHRpbWluZyBkYXRhIEVBQ0ggZGV2aWNlLiBUaGV5IGNhbiBiZSBicm9rZW4gZG93biBhcyBiZWxvdy4gKi8KLS8qICBBbGwgdGhlIGFkZHJlc3NlcyBiZWxvdyBhcmUgdGhlIG9mZnNldHMgZnJvbSB0aGUgZnJhbWUgYnVmZmVyIHN0YXJ0LlRoZXkgYWxsIE1VU1QgYmUgRHdvcmQgYWxpZ25lZCEgKi8KLS8qICBUbyBkcml2ZXI6IFRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgbWVtb3J5IHBvcnRpb249bW1GQl9TVEFSVCg0SyBhbGlnbmVkKStBVE9NQklPU19WUkFNX1VTQUdFX1NUQVJUX0FERFIrQVRPTV94X0FERFIgKi8KLS8qICBUbyBCaW9zOiAgQVRPTUJJT1NfVlJBTV9VU0FHRV9TVEFSVF9BRERSK0FUT01feF9BRERSLT5NTV9JTkRFWCAqLworLy8gT25lIGNodW5rIG9mIFZSQU0gdXNlZCBieSBCaW9zIGFyZSBmb3IgSFdJQ09OIHN1cmZhY2VzLEVESUQgZGF0YS4KKy8vIEN1cnJlbnQgTW9kZSB0aW1pbmcgYW5kIERhaWwgVGltaW5nIGFuZC9vciBTVEQgdGltaW5nIGRhdGEgRUFDSCBkZXZpY2UuIFRoZXkgY2FuIGJlIGJyb2tlbiBkb3duIGFzIGJlbG93LgorLy8gQWxsIHRoZSBhZGRyZXNzZXMgYmVsb3cgYXJlIHRoZSBvZmZzZXRzIGZyb20gdGhlIGZyYW1lIGJ1ZmZlciBzdGFydC5UaGV5IGFsbCBNVVNUIGJlIER3b3JkIGFsaWduZWQhCisvLyBUbyBkcml2ZXI6IFRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoaXMgbWVtb3J5IHBvcnRpb249bW1GQl9TVEFSVCg0SyBhbGlnbmVkKStBVE9NQklPU19WUkFNX1VTQUdFX1NUQVJUX0FERFIrQVRPTV94X0FERFIKKy8vIFRvIEJpb3M6ICBBVE9NQklPU19WUkFNX1VTQUdFX1NUQVJUX0FERFIrQVRPTV94X0FERFItPk1NX0lOREVYIAogCiAjaWZuZGVmIFZFU0FfTUVNT1JZX0lOXzY0S19CTE9DSwotI2RlZmluZSBWRVNBX01FTU9SWV9JTl82NEtfQkxPQ0sgICAgICAgIDB4MTAwCS8qIDI1Nio2NEs9MTZNYiAoTWF4LiBWRVNBIG1lbW9yeSBpcyAxNk1iISkgKi8KKyNkZWZpbmUgVkVTQV9NRU1PUllfSU5fNjRLX0JMT0NLICAgICAgICAweDEwMCAgICAgICAvLzI1Nio2NEs9MTZNYiAoTWF4LiBWRVNBIG1lbW9yeSBpcyAxNk1iISkKICNlbmRpZgogCi0jZGVmaW5lIEFUT01fRURJRF9SQVdfREFUQVNJWkUgICAgICAgICAgMjU2CS8qIEluIEJ5dGVzICovCi0jZGVmaW5lIEFUT01fSFdJQ09OX1NVUkZBQ0VfU0laRSAgICAgICAgNDA5NgkvKiBJbiBCeXRlcyAqLworI2RlZmluZSBBVE9NX0VESURfUkFXX0RBVEFTSVpFICAgICAgICAgIDI1NiAgICAgICAgIC8vSW4gQnl0ZXMKKyNkZWZpbmUgQVRPTV9IV0lDT05fU1VSRkFDRV9TSVpFICAgICAgICA0MDk2ICAgICAgICAvL0luIEJ5dGVzCiAjZGVmaW5lIEFUT01fSFdJQ09OX0lORk9UQUJMRV9TSVpFICAgICAgMzIKICNkZWZpbmUgTUFYX0RURF9NT0RFX0lOX1ZSQU0gICAgICAgICAgICA2Ci0jZGVmaW5lIEFUT01fRFREX01PREVfU1VQUE9SVF9UQkxfU0laRSAgKE1BWF9EVERfTU9ERV9JTl9WUkFNKjI4KQkvKiAyOD0gKFNJWkVPRiBBVE9NX0RURF9GT1JNQVQpICovCi0jZGVmaW5lIEFUT01fU1REX01PREVfU1VQUE9SVF9UQkxfU0laRSAgKDMyKjgpCS8qIDMyIGlzIGEgcHJlZGVmaW5lZCBudW1iZXIsOD0gKFNJWkVPRiBBVE9NX1NURF9GT1JNQVQpICovCisjZGVmaW5lIEFUT01fRFREX01PREVfU1VQUE9SVF9UQkxfU0laRSAgKE1BWF9EVERfTU9ERV9JTl9WUkFNKjI4KSAgICAvLzI4PSAoU0laRU9GIEFUT01fRFREX0ZPUk1BVCkgCisjZGVmaW5lIEFUT01fU1REX01PREVfU1VQUE9SVF9UQkxfU0laRSAgMzIqOCAgICAgICAgICAgICAgICAgICAgICAgICAvLzMyIGlzIGEgcHJlZGVmaW5lZCBudW1iZXIsOD0gKFNJWkVPRiBBVE9NX1NURF9GT1JNQVQpCiAjZGVmaW5lIERGUF9FTkNPREVSX1RZUEVfT0ZGU0VUCQkJCQkweDgwCiAjZGVmaW5lIERQX0VOQ09ERVJfTEFORV9OVU1fT0ZGU0VUCQkJMHg4NAogI2RlZmluZSBEUF9FTkNPREVSX0xJTktfUkFURV9PRkZTRVQJCQkweDg4CkBAIC0yNDE3LDcgKzI5NTcsNyBAQAogCiAjZGVmaW5lIEFUT01fTENEMV9FRElEX0FERFIgICAgICAgICAgICAgKEFUT01fQ1JUMV9TVERfTU9ERV9UQkxfQUREUiArIEFUT01fU1REX01PREVfU1VQUE9SVF9UQkxfU0laRSkKICNkZWZpbmUgQVRPTV9MQ0QxX0RURF9NT0RFX1RCTF9BRERSICAgICAoQVRPTV9MQ0QxX0VESURfQUREUiArIEFUT01fRURJRF9SQVdfREFUQVNJWkUpCi0jZGVmaW5lIEFUT01fTENEMV9TVERfTU9ERV9UQkxfQUREUgkoQVRPTV9MQ0QxX0RURF9NT0RFX1RCTF9BRERSICsgQVRPTV9EVERfTU9ERV9TVVBQT1JUX1RCTF9TSVpFKQorI2RlZmluZSBBVE9NX0xDRDFfU1REX01PREVfVEJMX0FERFIgICAJKEFUT01fTENEMV9EVERfTU9ERV9UQkxfQUREUiArIEFUT01fRFREX01PREVfU1VQUE9SVF9UQkxfU0laRSkKIAogI2RlZmluZSBBVE9NX1RWMV9EVERfTU9ERV9UQkxfQUREUiAgICAgIChBVE9NX0xDRDFfU1REX01PREVfVEJMX0FERFIgKyBBVE9NX1NURF9NT0RFX1NVUFBPUlRfVEJMX1NJWkUpCiAKQEAgLTI0MzEsMTMgKzI5NzEsMTMgQEAKIAogI2RlZmluZSBBVE9NX0xDRDJfRURJRF9BRERSICAgICAgICAgICAgIChBVE9NX0NSVDJfU1REX01PREVfVEJMX0FERFIgKyBBVE9NX1NURF9NT0RFX1NVUFBPUlRfVEJMX1NJWkUpCiAjZGVmaW5lIEFUT01fTENEMl9EVERfTU9ERV9UQkxfQUREUiAgICAgKEFUT01fTENEMl9FRElEX0FERFIgKyBBVE9NX0VESURfUkFXX0RBVEFTSVpFKQotI2RlZmluZSBBVE9NX0xDRDJfU1REX01PREVfVEJMX0FERFIJKEFUT01fTENEMl9EVERfTU9ERV9UQkxfQUREUiArIEFUT01fRFREX01PREVfU1VQUE9SVF9UQkxfU0laRSkKKyNkZWZpbmUgQVRPTV9MQ0QyX1NURF9NT0RFX1RCTF9BRERSICAgCShBVE9NX0xDRDJfRFREX01PREVfVEJMX0FERFIgKyBBVE9NX0RURF9NT0RFX1NVUFBPUlRfVEJMX1NJWkUpCiAKLSNkZWZpbmUgQVRPTV9UVjJfRURJRF9BRERSICAgICAgICAgICAgICAoQVRPTV9MQ0QyX1NURF9NT0RFX1RCTF9BRERSICsgQVRPTV9TVERfTU9ERV9TVVBQT1JUX1RCTF9TSVpFKQotI2RlZmluZSBBVE9NX1RWMl9EVERfTU9ERV9UQkxfQUREUiAgICAgIChBVE9NX1RWMl9FRElEX0FERFIgKyBBVE9NX0VESURfUkFXX0RBVEFTSVpFKQotI2RlZmluZSBBVE9NX1RWMl9TVERfTU9ERV9UQkxfQUREUgkgIChBVE9NX1RWMl9EVERfTU9ERV9UQkxfQUREUiArIEFUT01fRFREX01PREVfU1VQUE9SVF9UQkxfU0laRSkKKyNkZWZpbmUgQVRPTV9ERlA2X0VESURfQUREUiAgICAgICAgICAgICAoQVRPTV9MQ0QyX1NURF9NT0RFX1RCTF9BRERSICsgQVRPTV9TVERfTU9ERV9TVVBQT1JUX1RCTF9TSVpFKQorI2RlZmluZSBBVE9NX0RGUDZfRFREX01PREVfVEJMX0FERFIgICAgIChBVE9NX0RGUDZfRURJRF9BRERSICsgQVRPTV9FRElEX1JBV19EQVRBU0laRSkKKyNkZWZpbmUgQVRPTV9ERlA2X1NURF9NT0RFX1RCTF9BRERSICAgICAoQVRPTV9ERlA2X0RURF9NT0RFX1RCTF9BRERSICsgQVRPTV9EVERfTU9ERV9TVVBQT1JUX1RCTF9TSVpFKQogCi0jZGVmaW5lIEFUT01fREZQMl9FRElEX0FERFIgICAgICAgICAgICAgKEFUT01fVFYyX1NURF9NT0RFX1RCTF9BRERSICsgQVRPTV9TVERfTU9ERV9TVVBQT1JUX1RCTF9TSVpFKQorI2RlZmluZSBBVE9NX0RGUDJfRURJRF9BRERSICAgICAgICAgICAgIChBVE9NX0RGUDZfU1REX01PREVfVEJMX0FERFIgKyBBVE9NX1NURF9NT0RFX1NVUFBPUlRfVEJMX1NJWkUpCiAjZGVmaW5lIEFUT01fREZQMl9EVERfTU9ERV9UQkxfQUREUiAgICAgKEFUT01fREZQMl9FRElEX0FERFIgKyBBVE9NX0VESURfUkFXX0RBVEFTSVpFKQogI2RlZmluZSBBVE9NX0RGUDJfU1REX01PREVfVEJMX0FERFIgICAgIChBVE9NX0RGUDJfRFREX01PREVfVEJMX0FERFIgKyBBVE9NX0RURF9NT0RFX1NVUFBPUlRfVEJMX1NJWkUpCiAKQEAgLTI0NTcsNTMzICsyOTk3LDg1MCBAQAogI2RlZmluZSBBVE9NX0RGUDVfRFREX01PREVfVEJMX0FERFIgICAgIChBVE9NX0RGUDVfRURJRF9BRERSICsgQVRPTV9FRElEX1JBV19EQVRBU0laRSkKICNkZWZpbmUgQVRPTV9ERlA1X1NURF9NT0RFX1RCTF9BRERSICAgICAoQVRPTV9ERlA1X0RURF9NT0RFX1RCTF9BRERSICsgQVRPTV9EVERfTU9ERV9TVVBQT1JUX1RCTF9TSVpFKQogCi0jZGVmaW5lIEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIJKEFUT01fREZQNV9TVERfTU9ERV9UQkxfQUREUitBVE9NX1NURF9NT0RFX1NVUFBPUlRfVEJMX1NJWkUpCisjZGVmaW5lIEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIJCQkJKEFUT01fREZQNV9TVERfTU9ERV9UQkxfQUREUitBVE9NX1NURF9NT0RFX1NVUFBPUlRfVEJMX1NJWkUpICAgICAgIAogCi0jZGVmaW5lIEFUT01fU1RBQ0tfU1RPUkFHRV9TVEFSVCAgICAgICAgKEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIgKyAyNTYpCi0jZGVmaW5lIEFUT01fU1RBQ0tfU1RPUkFHRV9FTkQgICAgICAgICAgKEFUT01fU1RBQ0tfU1RPUkFHRV9TVEFSVCArIDUxMikKKyNkZWZpbmUgQVRPTV9TVEFDS19TVE9SQUdFX1NUQVJUICAgICAgICAoQVRPTV9EUF9UUkFJTklOR19UQkxfQUREUisyNTYpICAgICAgIAorI2RlZmluZSBBVE9NX1NUQUNLX1NUT1JBR0VfRU5EICAgICAgICAgIEFUT01fU1RBQ0tfU1RPUkFHRV9TVEFSVCs1MTIgICAgICAgIAogCi0vKiBUaGUgc2l6ZSBiZWxvdyBpcyBpbiBLYiEgKi8KKy8vVGhlIHNpemUgYmVsb3cgaXMgaW4gS2IhCiAjZGVmaW5lIEFUT01fVlJBTV9SRVNFUlZFX1NJWkUgICAgICAgICAoKCgoQVRPTV9TVEFDS19TVE9SQUdFX0VORCAtIEFUT01fSFdJQ09OMV9TVVJGQUNFX0FERFIpPj4xMCkrNCkmMHhGRkZDKQotCisgICAKICNkZWZpbmUJQVRPTV9WUkFNX09QRVJBVElPTl9GTEFHU19NQVNLICAgICAgICAgMHhDMDAwMDAwMEwKICNkZWZpbmUgQVRPTV9WUkFNX09QRVJBVElPTl9GTEFHU19TSElGVCAgICAgICAgMzAKICNkZWZpbmUJQVRPTV9WUkFNX0JMT0NLX05FRURTX05PX1JFU0VSVkFUSU9OICAgMHgxCiAjZGVmaW5lCUFUT01fVlJBTV9CTE9DS19ORUVEU19SRVNFUlZBVElPTiAgICAgIDB4MAogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlIHVzZWQgaW4gVlJBTV9Vc2FnZUJ5RmlybXdhcmVUYWJsZSAqLwotLyogIE5vdGUxOiBUaGlzIHRhYmxlIGlzIGZpbGxlZCBieSBTZXRCaW9zUmVzZXJ2YXRpb25TdGFydEluRkIgaW4gQ29yZUNvbW1TdWJzLmFzbSAqLwotLyogICAgICAgICBhdCBydW5uaW5nIHRpbWUuICovCi0vKiAgbm90ZTI6IEZyb20gUlY3NzAsIHRoZSBtZW1vcnkgaXMgbW9yZSB0aGFuIDMyYml0IGFkZHJlc3NhYmxlLCBzbyB3ZSB3aWxsIGNoYW5nZSAqLwotLyogICAgICAgICB1Y1RhYmxlRm9ybWF0UmV2aXNpb249MSx1Y1RhYmxlQ29udGVudFJldmlzaW9uPTQsIHRoZSBzdHJjdXR1cmUgcmVtYWlucyAqLwotLyogICAgICAgICBleGFjdGx5IHNhbWUgYXMgMS4xIGFuZCAxLjIgKDEuMyBpcyBuZXZlciBpbiB1c2UpLCBidXQgdWxTdGFydEFkZHJVc2VkQnlGaXJtd2FyZSAqLwotLyogICAgICAgICAoaW4gb2Zmc2V0IHRvIHN0YXJ0IG9mIG1lbW9yeSBhZGRyZXNzKSBpcyBLQiBhbGlnbmVkIGluc3RlYWQgb2YgYnl0ZSBhbGlnZW5kLiAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZSB1c2VkIGluIFZSQU1fVXNhZ2VCeUZpcm13YXJlVGFibGUKKy8vIE5vdGUxOiBUaGlzIHRhYmxlIGlzIGZpbGxlZCBieSBTZXRCaW9zUmVzZXJ2YXRpb25TdGFydEluRkIgaW4gQ29yZUNvbW1TdWJzLmFzbQorLy8gICAgICAgIGF0IHJ1bm5pbmcgdGltZS4gICAKKy8vIG5vdGUyOiBGcm9tIFJWNzcwLCB0aGUgbWVtb3J5IGlzIG1vcmUgdGhhbiAzMmJpdCBhZGRyZXNzYWJsZSwgc28gd2Ugd2lsbCBjaGFuZ2UgCisvLyAgICAgICAgdWNUYWJsZUZvcm1hdFJldmlzaW9uPTEsdWNUYWJsZUNvbnRlbnRSZXZpc2lvbj00LCB0aGUgc3RyY3V0dXJlIHJlbWFpbnMgCisvLyAgICAgICAgZXhhY3RseSBzYW1lIGFzIDEuMSBhbmQgMS4yICgxLjMgaXMgbmV2ZXIgaW4gdXNlKSwgYnV0IHVsU3RhcnRBZGRyVXNlZEJ5RmlybXdhcmUgCisvLyAgICAgICAgKGluIG9mZnNldCB0byBzdGFydCBvZiBtZW1vcnkgYWRkcmVzcykgaXMgS0IgYWxpZ25lZCBpbnN0ZWFkIG9mIGJ5dGUgYWxpZ2VuZC4KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBOb3RlMzoKKy8qIElmIHdlIGNoYW5nZSB1c1Jlc2VydmVkIHRvICJ1c0ZCVXNlZGJ5RHJ2SW5LQiIsIHRoZW4gdG8gVkJJT1MgdGhpcyB1c0ZCVXNlZGJ5RHJ2SW5LQiBpcyBhIHByZWRlZmluZWQsIHVuY2hhbmdlZCBjb25zdGFudCBhY3Jvc3MgVkdBIG9yIG5vbiBWR0EgYWRhcHRlciwKK2ZvciBDQUlMLCBUaGUgc2l6ZSBvZiBGQiBhY2Nlc3MgYXJlYSBpcyBrbm93biwgb25seSB0aGluZyBtaXNzaW5nIGlzIHRoZSBPZmZzZXQgb2YgRkIgQWNjZXNzIGFyZWEsIHNvIHdlIGNhbiAgaGF2ZToKKworSWYgKHVsU3RhcnRBZGRyVXNlZEJ5RmlybXdhcmUhPTApCitGQkFjY2Vzc0FyZWFPZmZzZXQ9IHVsU3RhcnRBZGRyVXNlZEJ5RmlybXdhcmUgLSB1c0ZCVXNlZGJ5RHJ2SW5LQjsKK1Jlc2VydmVkIGFyZWEgaGFzIGJlZW4gY2xhaW1lZCBieSBWQklPUyBpbmNsdWRpbmcgdGhpcyBGQiBhY2Nlc3MgYXJlYTsgQ0FJTCBkb2Vzbid0IG5lZWQgdG8gcmVzZXJ2ZSBhbnkgZXh0cmEgYXJlYSBmb3IgdGhpcyBwdXJwb3NlCitlbHNlCS8vTm9uIFZHQSBjYXNlCisgaWYgKEZCX1NpemU8PTJHYikKKyAgICBGQkFjY2Vzc0FyZWFPZmZzZXQ9IEZCX1NpemUgLSB1c0ZCVXNlZGJ5RHJ2SW5LQjsKKyBlbHNlCisJICBGQkFjY2Vzc0FyZWFPZmZzZXQ9IEFwZXJfU2l6ZSAtIHVzRkJVc2VkYnlEcnZJbktCCisKK0NBSUwgbmVlZHMgdG8gY2xhaW0gYW4gcmVzZXJ2ZWQgYXJlYSBkZWZpbmVkIGJ5IEZCQWNjZXNzQXJlYU9mZnNldCBhbmQgdXNGQlVzZWRieURydkluS0IgaW4gbm9uIFZHQSBjYXNlLiovCisKICNkZWZpbmUgQVRPTV9NQVhfRklSTVdBUkVfVlJBTV9VU0FHRV9JTkZPCQkJMQogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9GSVJNV0FSRV9WUkFNX1JFU0VSVkVfSU5GTyB7Ci0JVUxPTkcgdWxTdGFydEFkZHJVc2VkQnlGaXJtd2FyZTsKLQlVU0hPUlQgdXNGaXJtd2FyZVVzZUluS2I7Ci0JVVNIT1JUIHVzUmVzZXJ2ZWQ7Ci19IEFUT01fRklSTVdBUkVfVlJBTV9SRVNFUlZFX0lORk87Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9GSVJNV0FSRV9WUkFNX1JFU0VSVkVfSU5GTworeworICBVTE9ORyAgIHVsU3RhcnRBZGRyVXNlZEJ5RmlybXdhcmU7CisgIFVTSE9SVCAgdXNGaXJtd2FyZVVzZUluS2I7CisgIFVTSE9SVCAgdXNSZXNlcnZlZDsKK31BVE9NX0ZJUk1XQVJFX1ZSQU1fUkVTRVJWRV9JTkZPOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX1VTQUdFX0JZX0ZJUk1XQVJFIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlBVE9NX0ZJUk1XQVJFX1ZSQU1fUkVTRVJWRV9JTkZPCi0JICAgIGFzRmlybXdhcmVWcmFtUmVzZXJ2ZUluZm9bQVRPTV9NQVhfRklSTVdBUkVfVlJBTV9VU0FHRV9JTkZPXTsKLX0gQVRPTV9WUkFNX1VTQUdFX0JZX0ZJUk1XQVJFOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fVlJBTV9VU0FHRV9CWV9GSVJNV0FSRQoreworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsgIAorICBBVE9NX0ZJUk1XQVJFX1ZSQU1fUkVTRVJWRV9JTkZPCWFzRmlybXdhcmVWcmFtUmVzZXJ2ZUluZm9bQVRPTV9NQVhfRklSTVdBUkVfVlJBTV9VU0FHRV9JTkZPXTsKK31BVE9NX1ZSQU1fVVNBR0VfQllfRklSTVdBUkU7CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFN0cnVjdHVyZSB1c2VkIGluIEdQSU9fUGluX0xVVFRhYmxlICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9BVE9NX0dQSU9fUElOX0FTU0lHTk1FTlQgewotCVVTSE9SVCB1c0dwaW9QaW5fQUluZGV4OwotCVVDSEFSIHVjR3Bpb1BpbkJpdFNoaWZ0OwotCVVDSEFSIHVjR1BJT19JRDsKLX0gQVRPTV9HUElPX1BJTl9BU1NJR05NRU5UOworLy8gY2hhbmdlIHZlcmlvbiB0byAxLjUsIHdoZW4gYWxsb3cgZHJpdmVyIHRvIGFsbG9jYXRlIHRoZSB2cmFtIGFyZWEgZm9yIGNvbW1hbmQgdGFibGUgYWNjZXNzLiAKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0ZJUk1XQVJFX1ZSQU1fUkVTRVJWRV9JTkZPX1YxXzUKK3sKKyAgVUxPTkcgICB1bFN0YXJ0QWRkclVzZWRCeUZpcm13YXJlOworICBVU0hPUlQgIHVzRmlybXdhcmVVc2VJbktiOworICBVU0hPUlQgIHVzRkJVc2VkQnlEcnZJbktiOworfUFUT01fRklSTVdBUkVfVlJBTV9SRVNFUlZFX0lORk9fVjFfNTsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fR1BJT19QSU5fTFVUIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlBVE9NX0dQSU9fUElOX0FTU0lHTk1FTlQgYXNHUElPX1BpblsxXTsKLX0gQVRPTV9HUElPX1BJTl9MVVQ7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX1VTQUdFX0JZX0ZJUk1XQVJFX1YxXzUKK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7ICAKKyAgQVRPTV9GSVJNV0FSRV9WUkFNX1JFU0VSVkVfSU5GT19WMV81CWFzRmlybXdhcmVWcmFtUmVzZXJ2ZUluZm9bQVRPTV9NQVhfRklSTVdBUkVfVlJBTV9VU0FHRV9JTkZPXTsKK31BVE9NX1ZSQU1fVVNBR0VfQllfRklSTVdBUkVfVjFfNTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiAgU3RydWN0dXJlIHVzZWQgaW4gQ29tcG9uZW50VmlkZW9JbmZvVGFibGUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gU3RydWN0dXJlIHVzZWQgaW4gR1BJT19QaW5fTFVUVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0dQSU9fUElOX0FTU0lHTk1FTlQKK3sKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgIHVzR3Bpb1Bpbl9BSW5kZXg7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y0dwaW9QaW5CaXRTaGlmdDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIHVjR1BJT19JRDsKK31BVE9NX0dQSU9fUElOX0FTU0lHTk1FTlQ7CisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0dQSU9fUElOX0xVVAoreworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgIHNIZWFkZXI7CisgIEFUT01fR1BJT19QSU5fQVNTSUdOTUVOVAlhc0dQSU9fUGluWzFdOworfUFUT01fR1BJT19QSU5fTFVUOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvLyBTdHJ1Y3R1cmUgdXNlZCBpbiBDb21wb25lbnRWaWRlb0luZm9UYWJsZQkKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKICNkZWZpbmUgR1BJT19QSU5fQUNUSVZFX0hJR0ggICAgICAgICAgMHgxCiAKICNkZWZpbmUgTUFYX1NVUFBPUlRFRF9DVl9TVEFOREFSRFMgICAgNQogCi0vKiAgZGVmaW5pdGlvbnMgZm9yIEFUT01fRF9JTkZPLnVjU2V0dGluZ3MgKi8KLSNkZWZpbmUgQVRPTV9HUElPX1NFVFRJTkdTX0JJVFNISUZUX01BU0sgIDB4MUYJLyogIFs0OjBdICovCi0jZGVmaW5lIEFUT01fR1BJT19TRVRUSU5HU19SRVNFUlZFRF9NQVNLICAweDYwCS8qICBbNjo1XSA9IG11c3QgYmUgemVyb2VkIG91dCAqLwotI2RlZmluZSBBVE9NX0dQSU9fU0VUVElOR1NfQUNUSVZFX01BU0sgICAgMHg4MAkvKiAgWzddICovCisvLyBkZWZpbml0aW9ucyBmb3IgQVRPTV9EX0lORk8udWNTZXR0aW5ncworI2RlZmluZSBBVE9NX0dQSU9fU0VUVElOR1NfQklUU0hJRlRfTUFTSyAgMHgxRiAgICAvLyBbNDowXQorI2RlZmluZSBBVE9NX0dQSU9fU0VUVElOR1NfUkVTRVJWRURfTUFTSyAgMHg2MCAgICAvLyBbNjo1XSA9IG11c3QgYmUgemVyb2VkIG91dAorI2RlZmluZSBBVE9NX0dQSU9fU0VUVElOR1NfQUNUSVZFX01BU0sgICAgMHg4MCAgICAvLyBbN10KIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fR1BJT19JTkZPIHsKLQlVU0hPUlQgdXNBT2Zmc2V0OwotCVVDSEFSIHVjU2V0dGluZ3M7Ci0JVUNIQVIgdWNSZXNlcnZlZDsKLX0gQVRPTV9HUElPX0lORk87Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9HUElPX0lORk8KK3sKKyAgVVNIT1JUICB1c0FPZmZzZXQ7CisgIFVDSEFSICAgdWNTZXR0aW5nczsKKyAgVUNIQVIgICB1Y1Jlc2VydmVkOworfUFUT01fR1BJT19JTkZPOwogCi0vKiAgZGVmaW5pdGlvbnMgZm9yIEFUT01fQ09NUE9ORU5UX1ZJREVPX0lORk8udWNNaXNjSW5mbyAoYml0IHZlY3RvcikgKi8KKy8vIGRlZmluaXRpb25zIGZvciBBVE9NX0NPTVBPTkVOVF9WSURFT19JTkZPLnVjTWlzY0luZm8gKGJpdCB2ZWN0b3IpCiAjZGVmaW5lIEFUT01fQ1ZfUkVTVFJJQ1RfRk9STUFUX1NFTEVDVElPTiAgICAgICAgICAgMHgyCiAKLS8qICBkZWZpbml0aW9ucyBmb3IgQVRPTV9DT01QT05FTlRfVklERU9fSU5GTy51YzQ4MGkvdWM0ODBwL3VjNzIwcC91YzEwODBpICovCi0jZGVmaW5lIEFUT01fR1BJT19ERUZBVUxUX01PREVfRU4gICAgICAgICAgICAgICAgICAgMHg4MAkvKiBbN107ICovCi0jZGVmaW5lIEFUT01fR1BJT19TRVRUSU5HX1BFUk1PREVfTUFTSyAgICAgICAgICAgICAgMHg3RgkvKiBbNjowXSAqLworLy8gZGVmaW5pdGlvbnMgZm9yIEFUT01fQ09NUE9ORU5UX1ZJREVPX0lORk8udWM0ODBpL3VjNDgwcC91YzcyMHAvdWMxMDgwaQorI2RlZmluZSBBVE9NX0dQSU9fREVGQVVMVF9NT0RFX0VOICAgICAgICAgICAgICAgICAgIDB4ODAgLy9bN107CisjZGVmaW5lIEFUT01fR1BJT19TRVRUSU5HX1BFUk1PREVfTUFTSyAgICAgICAgICAgICAgMHg3RiAvL1s2OjBdCiAKLS8qICBkZWZpbml0aW9ucyBmb3IgQVRPTV9DT01QT05FTlRfVklERU9fSU5GTy51Y0xldHRlckJveE1vZGUgKi8KLS8qIExpbmUgMyBvdXQgcHV0IDVWLiAqLwotI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzE2XzlfR1BJT19BICAgICAgIDB4MDEJLyogcmVwcmVzZW50IGdwaW8gMyBzdGF0ZSBmb3IgMTY6OSAqLwotI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzE2XzlfR1BJT19CICAgICAgIDB4MDIJLyogcmVwcmVzZW50IGdwaW8gNCBzdGF0ZSBmb3IgMTY6OSAqLwotI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzE2XzlfR1BJT19TSElGVCAgIDB4MAorLy8gZGVmaW5pdGlvbnMgZm9yIEFUT01fQ09NUE9ORU5UX1ZJREVPX0lORk8udWNMZXR0ZXJCb3hNb2RlCisvL0xpbmUgMyBvdXQgcHV0IDVWLgorI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzE2XzlfR1BJT19BICAgICAgIDB4MDEgICAgIC8vcmVwcmVzZW50IGdwaW8gMyBzdGF0ZSBmb3IgMTY6OQorI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzE2XzlfR1BJT19CICAgICAgIDB4MDIgICAgIC8vcmVwcmVzZW50IGdwaW8gNCBzdGF0ZSBmb3IgMTY6OQorI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzE2XzlfR1BJT19TSElGVCAgIDB4MCAgIAogCi0vKiBMaW5lIDMgb3V0IHB1dCAyLjJWICovCi0jZGVmaW5lIEFUT01fQ1ZfTElORTNfQVNQRUNUUkFUSU9fNF8zX0xFVEJPWF9HUElPX0EgMHgwNAkvKiByZXByZXNlbnQgZ3BpbyAzIHN0YXRlIGZvciA0OjMgTGV0dGVyIGJveCAqLwotI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzRfM19MRVRCT1hfR1BJT19CIDB4MDgJLyogcmVwcmVzZW50IGdwaW8gNCBzdGF0ZSBmb3IgNDozIExldHRlciBib3ggKi8KLSNkZWZpbmUgQVRPTV9DVl9MSU5FM19BU1BFQ1RSQVRJT180XzNfTEVUQk9YX0dQSU9fU0hJRlQgMHgyCisvL0xpbmUgMyBvdXQgcHV0IDIuMlYgICAgICAgICAgICAgIAorI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzRfM19MRVRCT1hfR1BJT19BIDB4MDQgICAgIC8vcmVwcmVzZW50IGdwaW8gMyBzdGF0ZSBmb3IgNDozIExldHRlciBib3gKKyNkZWZpbmUgQVRPTV9DVl9MSU5FM19BU1BFQ1RSQVRJT180XzNfTEVUQk9YX0dQSU9fQiAweDA4ICAgICAvL3JlcHJlc2VudCBncGlvIDQgc3RhdGUgZm9yIDQ6MyBMZXR0ZXIgYm94CisjZGVmaW5lIEFUT01fQ1ZfTElORTNfQVNQRUNUUkFUSU9fNF8zX0xFVEJPWF9HUElPX1NISUZUIDB4MiAgICAgCiAKLS8qIExpbmUgMyBvdXQgcHV0IDBWICovCi0jZGVmaW5lIEFUT01fQ1ZfTElORTNfQVNQRUNUUkFUSU9fNF8zX0dQSU9fQSAgICAgICAgMHgxMAkvKiByZXByZXNlbnQgZ3BpbyAzIHN0YXRlIGZvciA0OjMgKi8KLSNkZWZpbmUgQVRPTV9DVl9MSU5FM19BU1BFQ1RSQVRJT180XzNfR1BJT19CICAgICAgICAweDIwCS8qIHJlcHJlc2VudCBncGlvIDQgc3RhdGUgZm9yIDQ6MyAqLwotI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzRfM19HUElPX1NISUZUICAgIDB4NAorLy9MaW5lIDMgb3V0IHB1dCAwVgorI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPXzRfM19HUElPX0EgICAgICAgIDB4MTAgICAgIC8vcmVwcmVzZW50IGdwaW8gMyBzdGF0ZSBmb3IgNDozCisjZGVmaW5lIEFUT01fQ1ZfTElORTNfQVNQRUNUUkFUSU9fNF8zX0dQSU9fQiAgICAgICAgMHgyMCAgICAgLy9yZXByZXNlbnQgZ3BpbyA0IHN0YXRlIGZvciA0OjMKKyNkZWZpbmUgQVRPTV9DVl9MSU5FM19BU1BFQ1RSQVRJT180XzNfR1BJT19TSElGVCAgICAweDQgCiAKLSNkZWZpbmUgQVRPTV9DVl9MSU5FM19BU1BFQ1RSQVRJT19NQVNLICAgICAgICAgICAgICAweDNGCS8qICBiaXQgWzU6MF0gKi8KKyNkZWZpbmUgQVRPTV9DVl9MSU5FM19BU1BFQ1RSQVRJT19NQVNLICAgICAgICAgICAgICAweDNGICAgICAvLyBiaXQgWzU6MF0KIAotI2RlZmluZSBBVE9NX0NWX0xJTkUzX0FTUEVDVFJBVElPX0VYSVNUICAgICAgICAgICAgIDB4ODAJLyogYml0IDcgKi8KKyNkZWZpbmUgQVRPTV9DVl9MSU5FM19BU1BFQ1RSQVRJT19FWElTVCAgICAgICAgICAgICAweDgwICAgICAvL2JpdCA3CiAKLS8qIEdQSU8gYml0IGluZGV4IGluIGdwaW8gc2V0dGluZyBwZXIgbW9kZSB2YWx1ZSwgYWxzbyByZXByZXNlbmQgdGhlIGJsb2NrIG5vLiBpbiBncGlvIGJsb2Nrcy4gKi8KLSNkZWZpbmUgQVRPTV9HUElPX0lOREVYX0xJTkUzX0FTUEVDUkFUSU9fR1BJT19BICAgMwkvKiBiaXQgMyBpbiB1YzQ4MGkvdWM0ODBwL3VjNzIwcC91YzEwODBpLCB3aGljaCByZXByZXNlbmQgdGhlIGRlZmF1bHQgZ3BpbyBiaXQgc2V0dGluZyBmb3IgdGhlIG1vZGUuICovCi0jZGVmaW5lIEFUT01fR1BJT19JTkRFWF9MSU5FM19BU1BFQ1JBVElPX0dQSU9fQiAgIDQJLyogYml0IDQgaW4gdWM0ODBpL3VjNDgwcC91YzcyMHAvdWMxMDgwaSwgd2hpY2ggcmVwcmVzZW5kIHRoZSBkZWZhdWx0IGdwaW8gYml0IHNldHRpbmcgZm9yIHRoZSBtb2RlLiAqLworLy9HUElPIGJpdCBpbmRleCBpbiBncGlvIHNldHRpbmcgcGVyIG1vZGUgdmFsdWUsIGFsc28gcmVwcmVzZW5kIHRoZSBibG9jayBuby4gaW4gZ3BpbyBibG9ja3MuCisjZGVmaW5lIEFUT01fR1BJT19JTkRFWF9MSU5FM19BU1BFQ1JBVElPX0dQSU9fQSAgIDMgICAvL2JpdCAzIGluIHVjNDgwaS91YzQ4MHAvdWM3MjBwL3VjMTA4MGksIHdoaWNoIHJlcHJlc2VuZCB0aGUgZGVmYXVsdCBncGlvIGJpdCBzZXR0aW5nIGZvciB0aGUgbW9kZS4KKyNkZWZpbmUgQVRPTV9HUElPX0lOREVYX0xJTkUzX0FTUEVDUkFUSU9fR1BJT19CICAgNCAgIC8vYml0IDQgaW4gdWM0ODBpL3VjNDgwcC91YzcyMHAvdWMxMDgwaSwgd2hpY2ggcmVwcmVzZW5kIHRoZSBkZWZhdWx0IGdwaW8gYml0IHNldHRpbmcgZm9yIHRoZSBtb2RlLgogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9DT01QT05FTlRfVklERU9fSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVVNIT1JUIHVzTWFza19QaW5SZWdpc3RlckluZGV4OwotCVVTSE9SVCB1c0VOX1BpblJlZ2lzdGVySW5kZXg7Ci0JVVNIT1JUIHVzWV9QaW5SZWdpc3RlckluZGV4OwotCVVTSE9SVCB1c0FfUGluUmVnaXN0ZXJJbmRleDsKLQlVQ0hBUiB1Y0JpdFNoaWZ0OwotCVVDSEFSIHVjUGluQWN0aXZlU3RhdGU7CS8qIHVjUGluQWN0aXZlU3RhdGU6IEJpdDA9MSBhY3RpdmUgaGlnaCwgPTAgYWN0aXZlIGxvdyAqLwotCUFUT01fRFREX0ZPUk1BVCBzUmVzZXJ2ZWQ7CS8qICBtdXN0IGJlIHplcm9lZCBvdXQgKi8KLQlVQ0hBUiB1Y01pc2NJbmZvOwotCVVDSEFSIHVjNDgwaTsKLQlVQ0hBUiB1YzQ4MHA7Ci0JVUNIQVIgdWM3MjBwOwotCVVDSEFSIHVjMTA4MGk7Ci0JVUNIQVIgdWNMZXR0ZXJCb3hNb2RlOwotCVVDSEFSIHVjUmVzZXJ2ZWRbM107Ci0JVUNIQVIgdWNOdW1PZldiR3Bpb0Jsb2NrczsJLyogRm9yIENvbXBvbmVudCB2aWRlbyBELUNvbm5lY3RvciBzdXBwb3J0LiBJZiB6ZXJlLCBOVFNDIHR5cGUgY29ubmVjdG9yICovCi0JQVRPTV9HUElPX0lORk8gYVdiR3Bpb1N0YXRlQmxvY2tbTUFYX1NVUFBPUlRFRF9DVl9TVEFOREFSRFNdOwotCUFUT01fRFREX0ZPUk1BVCBhTW9kZVRpbWluZ3NbTUFYX1NVUFBPUlRFRF9DVl9TVEFOREFSRFNdOwotfSBBVE9NX0NPTVBPTkVOVF9WSURFT19JTkZPOwogCi0vKiB1Y1RhYmxlRm9ybWF0UmV2aXNpb249MiAqLwotLyogdWNUYWJsZUNvbnRlbnRSZXZpc2lvbj0xICovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9DT01QT05FTlRfVklERU9fSU5GT19WMjEgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVDSEFSIHVjTWlzY0luZm87Ci0JVUNIQVIgdWM0ODBpOwotCVVDSEFSIHVjNDgwcDsKLQlVQ0hBUiB1YzcyMHA7Ci0JVUNIQVIgdWMxMDgwaTsKLQlVQ0hBUiB1Y1Jlc2VydmVkOwotCVVDSEFSIHVjTGV0dGVyQm94TW9kZTsKLQlVQ0hBUiB1Y051bU9mV2JHcGlvQmxvY2tzOwkvKiBGb3IgQ29tcG9uZW50IHZpZGVvIEQtQ29ubmVjdG9yIHN1cHBvcnQuIElmIHplcmUsIE5UU0MgdHlwZSBjb25uZWN0b3IgKi8KLQlBVE9NX0dQSU9fSU5GTyBhV2JHcGlvU3RhdGVCbG9ja1tNQVhfU1VQUE9SVEVEX0NWX1NUQU5EQVJEU107Ci0JQVRPTV9EVERfRk9STUFUIGFNb2RlVGltaW5nc1tNQVhfU1VQUE9SVEVEX0NWX1NUQU5EQVJEU107Ci19IEFUT01fQ09NUE9ORU5UX1ZJREVPX0lORk9fVjIxOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fQ09NUE9ORU5UX1ZJREVPX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7CisgIFVTSE9SVCAgICAgICAgICAgICB1c01hc2tfUGluUmVnaXN0ZXJJbmRleDsKKyAgVVNIT1JUICAgICAgICAgICAgIHVzRU5fUGluUmVnaXN0ZXJJbmRleDsKKyAgVVNIT1JUICAgICAgICAgICAgIHVzWV9QaW5SZWdpc3RlckluZGV4OworICBVU0hPUlQgICAgICAgICAgICAgdXNBX1BpblJlZ2lzdGVySW5kZXg7CisgIFVDSEFSICAgICAgICAgICAgICB1Y0JpdFNoaWZ0OworICBVQ0hBUiAgICAgICAgICAgICAgdWNQaW5BY3RpdmVTdGF0ZTsgIC8vdWNQaW5BY3RpdmVTdGF0ZTogQml0MD0xIGFjdGl2ZSBoaWdoLCA9MCBhY3RpdmUgbG93CisgIEFUT01fRFREX0ZPUk1BVCAgICBzUmVzZXJ2ZWQ7ICAgICAgICAgLy8gbXVzdCBiZSB6ZXJvZWQgb3V0CisgIFVDSEFSICAgICAgICAgICAgICB1Y01pc2NJbmZvOworICBVQ0hBUiAgICAgICAgICAgICAgdWM0ODBpOworICBVQ0hBUiAgICAgICAgICAgICAgdWM0ODBwOworICBVQ0hBUiAgICAgICAgICAgICAgdWM3MjBwOworICBVQ0hBUiAgICAgICAgICAgICAgdWMxMDgwaTsKKyAgVUNIQVIgICAgICAgICAgICAgIHVjTGV0dGVyQm94TW9kZTsKKyAgVUNIQVIgICAgICAgICAgICAgIHVjUmVzZXJ2ZWRbM107CisgIFVDSEFSICAgICAgICAgICAgICB1Y051bU9mV2JHcGlvQmxvY2tzOyAvL0ZvciBDb21wb25lbnQgdmlkZW8gRC1Db25uZWN0b3Igc3VwcG9ydC4gSWYgemVyZSwgTlRTQyB0eXBlIGNvbm5lY3RvcgorICBBVE9NX0dQSU9fSU5GTyAgICAgYVdiR3Bpb1N0YXRlQmxvY2tbTUFYX1NVUFBPUlRFRF9DVl9TVEFOREFSRFNdOworICBBVE9NX0RURF9GT1JNQVQgICAgYU1vZGVUaW1pbmdzW01BWF9TVVBQT1JURURfQ1ZfU1RBTkRBUkRTXTsKK31BVE9NX0NPTVBPTkVOVF9WSURFT19JTkZPOworCisvL3VjVGFibGVGb3JtYXRSZXZpc2lvbj0yCisvL3VjVGFibGVDb250ZW50UmV2aXNpb249MQordHlwZWRlZiBzdHJ1Y3QgX0FUT01fQ09NUE9ORU5UX1ZJREVPX0lORk9fVjIxCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOworICBVQ0hBUiAgICAgICAgICAgICAgdWNNaXNjSW5mbzsKKyAgVUNIQVIgICAgICAgICAgICAgIHVjNDgwaTsKKyAgVUNIQVIgICAgICAgICAgICAgIHVjNDgwcDsKKyAgVUNIQVIgICAgICAgICAgICAgIHVjNzIwcDsKKyAgVUNIQVIgICAgICAgICAgICAgIHVjMTA4MGk7CisgIFVDSEFSICAgICAgICAgICAgICB1Y1Jlc2VydmVkOworICBVQ0hBUiAgICAgICAgICAgICAgdWNMZXR0ZXJCb3hNb2RlOworICBVQ0hBUiAgICAgICAgICAgICAgdWNOdW1PZldiR3Bpb0Jsb2NrczsgLy9Gb3IgQ29tcG9uZW50IHZpZGVvIEQtQ29ubmVjdG9yIHN1cHBvcnQuIElmIHplcmUsIE5UU0MgdHlwZSBjb25uZWN0b3IKKyAgQVRPTV9HUElPX0lORk8gICAgIGFXYkdwaW9TdGF0ZUJsb2NrW01BWF9TVVBQT1JURURfQ1ZfU1RBTkRBUkRTXTsKKyAgQVRPTV9EVERfRk9STUFUICAgIGFNb2RlVGltaW5nc1tNQVhfU1VQUE9SVEVEX0NWX1NUQU5EQVJEU107Cit9QVRPTV9DT01QT05FTlRfVklERU9fSU5GT19WMjE7CiAKICNkZWZpbmUgQVRPTV9DT01QT05FTlRfVklERU9fSU5GT19MQVNUICBBVE9NX0NPTVBPTkVOVF9WSURFT19JTkZPX1YyMQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qICBTdHJ1Y3R1cmUgdXNlZCBpbiBvYmplY3RfSW5mb1RhYmxlICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9BVE9NX09CSkVDVF9IRUFERVIgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVTSE9SVCB1c0RldmljZVN1cHBvcnQ7Ci0JVVNIT1JUIHVzQ29ubmVjdG9yT2JqZWN0VGFibGVPZmZzZXQ7Ci0JVVNIT1JUIHVzUm91dGVyT2JqZWN0VGFibGVPZmZzZXQ7Ci0JVVNIT1JUIHVzRW5jb2Rlck9iamVjdFRhYmxlT2Zmc2V0OwotCVVTSE9SVCB1c1Byb3RlY3Rpb25PYmplY3RUYWJsZU9mZnNldDsJLyogb25seSBhdmFpbGFibGUgd2hlbiBQcm90ZWN0aW9uIGJsb2NrIGlzIGluZGVwZW5kZW50LiAqLwotCVVTSE9SVCB1c0Rpc3BsYXlQYXRoVGFibGVPZmZzZXQ7Ci19IEFUT01fT0JKRUNUX0hFQURFUjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vIFN0cnVjdHVyZSB1c2VkIGluIG9iamVjdF9JbmZvVGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0IF9BVE9NX09CSkVDVF9IRUFERVIKK3sgCisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUglzSGVhZGVyOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzRGV2aWNlU3VwcG9ydDsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICB1c0Nvbm5lY3Rvck9iamVjdFRhYmxlT2Zmc2V0OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzUm91dGVyT2JqZWN0VGFibGVPZmZzZXQ7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgdXNFbmNvZGVyT2JqZWN0VGFibGVPZmZzZXQ7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgdXNQcm90ZWN0aW9uT2JqZWN0VGFibGVPZmZzZXQ7IC8vb25seSBhdmFpbGFibGUgd2hlbiBQcm90ZWN0aW9uIGJsb2NrIGlzIGluZGVwZW5kZW50LgorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzRGlzcGxheVBhdGhUYWJsZU9mZnNldDsKK31BVE9NX09CSkVDVF9IRUFERVI7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0RJU1BMQVlfT0JKRUNUX1BBVEggewotCVVTSE9SVCB1c0RldmljZVRhZzsJLyogc3VwcG9ydGVkIGRldmljZSAqLwotCVVTSE9SVCB1c1NpemU7CQkvKiB0aGUgc2l6ZSBvZiBBVE9NX0RJU1BMQVlfT0JKRUNUX1BBVEggKi8KLQlVU0hPUlQgdXNDb25uT2JqZWN0SWQ7CS8qIENvbm5lY3RvciBPYmplY3QgSUQgKi8KLQlVU0hPUlQgdXNHUFVPYmplY3RJZDsJLyogR1BVIElEICovCi0JVVNIT1JUIHVzR3JhcGhpY09iaklkc1sxXTsJLyogMXN0IEVuY29kZXIgT2JqIHNvdXJjZSBmcm9tIEdQVSB0byBsYXN0IEdyYXBoaWMgT2JqIGRlc3RpbmF0ZSB0byBjb25uZWN0b3IuICovCi19IEFUT01fRElTUExBWV9PQkpFQ1RfUEFUSDsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX09CSkVDVF9IRUFERVJfVjMKK3sgCisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUglzSGVhZGVyOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzRGV2aWNlU3VwcG9ydDsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICB1c0Nvbm5lY3Rvck9iamVjdFRhYmxlT2Zmc2V0OworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzUm91dGVyT2JqZWN0VGFibGVPZmZzZXQ7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgdXNFbmNvZGVyT2JqZWN0VGFibGVPZmZzZXQ7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgdXNQcm90ZWN0aW9uT2JqZWN0VGFibGVPZmZzZXQ7IC8vb25seSBhdmFpbGFibGUgd2hlbiBQcm90ZWN0aW9uIGJsb2NrIGlzIGluZGVwZW5kZW50LgorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgIHVzRGlzcGxheVBhdGhUYWJsZU9mZnNldDsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICB1c01pc2NPYmplY3RUYWJsZU9mZnNldDsKK31BVE9NX09CSkVDVF9IRUFERVJfVjM7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0RJU1BMQVlfT0JKRUNUX1BBVEhfVEFCTEUgewotCVVDSEFSIHVjTnVtT2ZEaXNwUGF0aDsKLQlVQ0hBUiB1Y1ZlcnNpb247Ci0JVUNIQVIgdWNQYWRkaW5nWzJdOwotCUFUT01fRElTUExBWV9PQkpFQ1RfUEFUSCBhc0Rpc3BQYXRoWzFdOwotfSBBVE9NX0RJU1BMQVlfT0JKRUNUX1BBVEhfVEFCTEU7Ci0KLXR5cGVkZWYgc3RydWN0IF9BVE9NX09CSkVDVAkvKiBlYWNoIG9iamVjdCBoYXMgdGhpcyBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9ESVNQTEFZX09CSkVDVF9QQVRICiB7Ci0JVVNIT1JUIHVzT2JqZWN0SUQ7Ci0JVVNIT1JUIHVzU3JjRHN0VGFibGVPZmZzZXQ7Ci0JVVNIT1JUIHVzUmVjb3JkT2Zmc2V0OwkvKiB0aGlzIHBvaW50aW5nIHRvIGEgYnVuY2ggb2YgcmVjb3JkcyBkZWZpbmVkIGJlbG93ICovCi0JVVNIT1JUIHVzUmVzZXJ2ZWQ7Ci19IEFUT01fT0JKRUNUOworICBVU0hPUlQgICAgdXNEZXZpY2VUYWc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3N1cHBvcnRlZCBkZXZpY2UgCisgIFVTSE9SVCAgICB1c1NpemU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhlIHNpemUgb2YgQVRPTV9ESVNQTEFZX09CSkVDVF9QQVRICisgIFVTSE9SVCAgICB1c0Nvbm5PYmplY3RJZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vQ29ubmVjdG9yIE9iamVjdCBJRCAKKyAgVVNIT1JUICAgIHVzR1BVT2JqZWN0SWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9HUFUgSUQgCisgIFVTSE9SVCAgICB1c0dyYXBoaWNPYmpJZHNbMV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLzFzdCBFbmNvZGVyIE9iaiBzb3VyY2UgZnJvbSBHUFUgdG8gbGFzdCBHcmFwaGljIE9iaiBkZXN0aW5hdGUgdG8gY29ubmVjdG9yLgorfUFUT01fRElTUExBWV9PQkpFQ1RfUEFUSDsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fT0JKRUNUX1RBQkxFCS8qIEFib3ZlIDQgb2JqZWN0IHRhYmxlIG9mZnNldCBwb2ludGluZyB0byBhIGJ1bmNoIG9mIG9iamVjdHMgYWxsIGhhdmUgdGhpcyBzdHJ1Y3R1cmUgKi8KK3R5cGVkZWYgc3RydWN0IF9BVE9NX0RJU1BMQVlfT0JKRUNUX1BBVEhfVEFCTEUKIHsKLQlVQ0hBUiB1Y051bWJlck9mT2JqZWN0czsKLQlVQ0hBUiB1Y1BhZGRpbmdbM107Ci0JQVRPTV9PQkpFQ1QgYXNPYmplY3RzWzFdOwotfSBBVE9NX09CSkVDVF9UQUJMRTsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgICAgICB1Y051bU9mRGlzcFBhdGg7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNWZXJzaW9uOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVjUGFkZGluZ1syXTsKKyAgQVRPTV9ESVNQTEFZX09CSkVDVF9QQVRIICAgICAgICBhc0Rpc3BQYXRoWzFdOworfUFUT01fRElTUExBWV9PQkpFQ1RfUEFUSF9UQUJMRTsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fU1JDX0RTVF9UQUJMRV9GT1JfT05FX09CSkVDVAkvKiB1c1NyY0RzdFRhYmxlT2Zmc2V0IHBvaW50aW5nIHRvIHRoaXMgc3RydWN0dXJlICovCisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX09CSkVDVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9lYWNoIG9iamVjdCBoYXMgdGhpcyBzdHJ1Y3R1cmUgICAgCiB7Ci0JVUNIQVIgdWNOdW1iZXJPZlNyYzsKLQlVU0hPUlQgdXNTcmNPYmplY3RJRFsxXTsKLQlVQ0hBUiB1Y051bWJlck9mRHN0OwotCVVTSE9SVCB1c0RzdE9iamVjdElEWzFdOwotfSBBVE9NX1NSQ19EU1RfVEFCTEVfRk9SX09ORV9PQkpFQ1Q7CisgIFVTSE9SVCAgICAgICAgICAgICAgdXNPYmplY3RJRDsKKyAgVVNIT1JUICAgICAgICAgICAgICB1c1NyY0RzdFRhYmxlT2Zmc2V0OworICBVU0hPUlQgICAgICAgICAgICAgIHVzUmVjb3JkT2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgIC8vdGhpcyBwb2ludGluZyB0byBhIGJ1bmNoIG9mIHJlY29yZHMgZGVmaW5lZCBiZWxvdworICBVU0hPUlQgICAgICAgICAgICAgIHVzUmVzZXJ2ZWQ7Cit9QVRPTV9PQkpFQ1Q7CiAKLS8qIFJlbGF0ZWQgZGVmaW5pdGlvbnMsIGFsbCByZWNvcmRzIGFyZSBkaWZmZXJudCBidXQgdGhleSBoYXZlIGEgY29tbW9uZCBoZWFkZXIgKi8KLXR5cGVkZWYgc3RydWN0IF9BVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSIHsKLQlVQ0hBUiB1Y1JlY29yZFR5cGU7CS8qIEFuIGVtdW4gdG8gaW5kaWNhdGUgdGhlIHJlY29yZCB0eXBlICovCi0JVUNIQVIgdWNSZWNvcmRTaXplOwkvKiBUaGUgc2l6ZSBvZiB0aGUgd2hvbGUgcmVjb3JkIGluIGJ5dGUgKi8KLX0gQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUjsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX09CSkVDVF9UQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAvL0Fib3ZlIDQgb2JqZWN0IHRhYmxlIG9mZnNldCBwb2ludGluZyB0byBhIGJ1bmNoIG9mIG9iamVjdHMgYWxsIGhhdmUgdGhpcyBzdHJ1Y3R1cmUgICAgIAoreworICBVQ0hBUiAgICAgICAgICAgICAgIHVjTnVtYmVyT2ZPYmplY3RzOworICBVQ0hBUiAgICAgICAgICAgICAgIHVjUGFkZGluZ1szXTsKKyAgQVRPTV9PQkpFQ1QgICAgICAgICBhc09iamVjdHNbMV07Cit9QVRPTV9PQkpFQ1RfVEFCTEU7CiAKLSNkZWZpbmUgQVRPTV9JMkNfUkVDT1JEX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAxCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9TUkNfRFNUX1RBQkxFX0ZPUl9PTkVfT0JKRUNUICAgICAgICAgLy91c1NyY0RzdFRhYmxlT2Zmc2V0IHBvaW50aW5nIHRvIHRoaXMgc3RydWN0dXJlCit7CisgIFVDSEFSICAgICAgICAgICAgICAgdWNOdW1iZXJPZlNyYzsKKyAgVVNIT1JUICAgICAgICAgICAgICB1c1NyY09iamVjdElEWzFdOworICBVQ0hBUiAgICAgICAgICAgICAgIHVjTnVtYmVyT2ZEc3Q7CisgIFVTSE9SVCAgICAgICAgICAgICAgdXNEc3RPYmplY3RJRFsxXTsKK31BVE9NX1NSQ19EU1RfVEFCTEVfRk9SX09ORV9PQkpFQ1Q7CisKKworLy9Ud28gZGVmaW5pdGlvbnMgYmVsb3cgYXJlIGZvciBPUE0gb24gTVhNIG1vZHVsZSBkZXNpZ25zCisKKyNkZWZpbmUgRVhUX0hQRFBJTl9MVVRJTkRFWF8wICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgRVhUX0hQRFBJTl9MVVRJTkRFWF8xICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgRVhUX0hQRFBJTl9MVVRJTkRFWF8yICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgRVhUX0hQRFBJTl9MVVRJTkRFWF8zICAgICAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRVhUX0hQRFBJTl9MVVRJTkRFWF80ICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRVhUX0hQRFBJTl9MVVRJTkRFWF81ICAgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgRVhUX0hQRFBJTl9MVVRJTkRFWF82ICAgICAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgRVhUX0hQRFBJTl9MVVRJTkRFWF83ICAgICAgICAgICAgICAgICAgIDcKKyNkZWZpbmUgTUFYX05VTUJFUl9PRl9FWFRfSFBEUElOX0xVVF9FTlRSSUVTICAgKEVYVF9IUERQSU5fTFVUSU5ERVhfNysxKQorCisjZGVmaW5lIEVYVF9BVVhERENfTFVUSU5ERVhfMCAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEVYVF9BVVhERENfTFVUSU5ERVhfMSAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIEVYVF9BVVhERENfTFVUSU5ERVhfMiAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIEVYVF9BVVhERENfTFVUSU5ERVhfMyAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIEVYVF9BVVhERENfTFVUSU5ERVhfNCAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIEVYVF9BVVhERENfTFVUSU5ERVhfNSAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIEVYVF9BVVhERENfTFVUSU5ERVhfNiAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIEVYVF9BVVhERENfTFVUSU5ERVhfNyAgICAgICAgICAgICAgICAgICA3CisjZGVmaW5lIE1BWF9OVU1CRVJfT0ZfRVhUX0FVWEREQ19MVVRfRU5UUklFUyAgIChFWFRfQVVYRERDX0xVVElOREVYXzcrMSkKKwordHlwZWRlZiBzdHJ1Y3QgX0VYVF9ESVNQTEFZX1BBVEgKK3sKKyAgVVNIT1JUICB1c0RldmljZVRhZzsgICAgICAgICAgICAgICAgICAgIC8vQSBiaXQgdmVjdG9yIHRvIHNob3cgd2hhdCBkZXZpY2VzIGFyZSBzdXBwb3J0ZWQgCisgIFVTSE9SVCAgdXNEZXZpY2VBQ1BJRW51bTsgICAgICAgICAgICAgICAvLzE2Yml0IGRldmljZSBBQ1BJIGlkLiAKKyAgVVNIT1JUICB1c0RldmljZUNvbm5lY3RvcjsgICAgICAgICAgICAgIC8vQSBwaHlzaWNhbCBjb25uZWN0b3IgZm9yIGRpc3BsYXlzIHRvIHBsdWcgaW4sIHVzaW5nIG9iamVjdCBjb25uZWN0b3IgZGVmaW5pdGlvbnMKKyAgVUNIQVIgICB1Y0V4dEFVWEREQ0x1dEluZGV4OyAgICAgICAgICAgIC8vQW4gaW5kZXggaW50byBleHRlcm5hbCBBVVgvRERDIGNoYW5uZWwgTFVUCisgIFVDSEFSICAgdWNFeHRIUERQSU5MdXRJbmRleDsgICAgICAgICAgICAvL0FuIGluZGV4IGludG8gZXh0ZXJuYWwgSFBEIHBpbiBMVVQKKyAgVVNIT1JUICB1c0V4dEVuY29kZXJPYmpJZDsgICAgICAgICAgICAgIC8vZXh0ZXJuYWwgZW5jb2RlciBvYmplY3QgaWQKKyAgVVNIT1JUICB1c1Jlc2VydmVkWzNdOyAKK31FWFRfRElTUExBWV9QQVRIOworICAgCisjZGVmaW5lIE5VTUJFUl9PRl9VQ0hBUl9GT1JfR1VJRCAgICAgICAgICAxNgorI2RlZmluZSBNQVhfTlVNQkVSX09GX0VYVF9ESVNQTEFZX1BBVEggICAgNworCit0eXBlZGVmICBzdHJ1Y3QgX0FUT01fRVhURVJOQUxfRElTUExBWV9DT05ORUNUSU9OX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y0d1aWQgW05VTUJFUl9PRl9VQ0hBUl9GT1JfR1VJRF07ICAgICAvLyBhIEdVSUQgaXMgYSAxNiBieXRlIGxvbmcgc3RyaW5nCisgIEVYVF9ESVNQTEFZX1BBVEggICAgICAgICBzUGF0aFtNQVhfTlVNQkVSX09GX0VYVF9ESVNQTEFZX1BBVEhdOyAvLyB0b3RhbCBvZiBmaXhlZCA3IGVudHJpZXMuCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICB1Y0NoZWNrc3VtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhICBzaW1wbGUgQ2hlY2tzdW0gb2YgdGhlIHN1bSBvZiB3aG9sZSBzdHJ1Y3R1cmUgZXF1YWwgdG8gMHgwLiAKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgIFJlc2VydmVkIFs3XTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZvciBwb3RlbnRpYWwgZXhwYW5zaW9uCit9QVRPTV9FWFRFUk5BTF9ESVNQTEFZX0NPTk5FQ1RJT05fSU5GTzsKKworLy9SZWxhdGVkIGRlZmluaXRpb25zLCBhbGwgcmVjb3JkcyBhcmUgZGlmZmVybnQgYnV0IHRoZXkgaGF2ZSBhIGNvbW1vbmQgaGVhZGVyCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUgoreworICBVQ0hBUiAgICAgICAgICAgICAgIHVjUmVjb3JkVHlwZTsgICAgICAgICAgICAgICAgICAgICAgLy9BbiBlbXVuIHRvIGluZGljYXRlIHRoZSByZWNvcmQgdHlwZQorICBVQ0hBUiAgICAgICAgICAgICAgIHVjUmVjb3JkU2l6ZTsgICAgICAgICAgICAgICAgICAgICAgLy9UaGUgc2l6ZSBvZiB0aGUgd2hvbGUgcmVjb3JkIGluIGJ5dGUKK31BVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSOworCisKKyNkZWZpbmUgQVRPTV9JMkNfUkVDT1JEX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAxICAgICAgICAgCiAjZGVmaW5lIEFUT01fSFBEX0lOVF9SRUNPUkRfVFlQRSAgICAgICAgICAgICAgICAgICAgICAgMgogI2RlZmluZSBBVE9NX09VVFBVVF9QUk9URUNUSU9OX1JFQ09SRF9UWVBFICAgICAgICAgICAgIDMKICNkZWZpbmUgQVRPTV9DT05ORUNUT1JfREVWSUNFX1RBR19SRUNPUkRfVFlQRSAgICAgICAgICA0Ci0jZGVmaW5lCUFUT01fQ09OTkVDVE9SX0RWSV9FWFRfSU5QVVRfUkVDT1JEX1RZUEUJICAgICA1CS8qIE9ic29sZXRlLCBzd2l0Y2ggdG8gdXNlIEdQSU9fQ05UTF9SRUNPUkRfVFlQRSAqLwotI2RlZmluZSBBVE9NX0VOQ09ERVJfRlBHQV9DT05UUk9MX1JFQ09SRF9UWVBFICAgICAgICAgIDYJLyogT2Jzb2xldGUsIHN3aXRjaCB0byB1c2UgR1BJT19DTlRMX1JFQ09SRF9UWVBFICovCisjZGVmaW5lCUFUT01fQ09OTkVDVE9SX0RWSV9FWFRfSU5QVVRfUkVDT1JEX1RZUEUJICAgICA1IC8vT2Jzb2xldGUsIHN3aXRjaCB0byB1c2UgR1BJT19DTlRMX1JFQ09SRF9UWVBFCisjZGVmaW5lIEFUT01fRU5DT0RFUl9GUEdBX0NPTlRST0xfUkVDT1JEX1RZUEUgICAgICAgICAgNiAvL09ic29sZXRlLCBzd2l0Y2ggdG8gdXNlIEdQSU9fQ05UTF9SRUNPUkRfVFlQRQogI2RlZmluZSBBVE9NX0NPTk5FQ1RPUl9DVlRWX1NIQVJFX0RJTl9SRUNPUkRfVFlQRSAgICAgIDcKLSNkZWZpbmUgQVRPTV9KVEFHX1JFQ09SRF9UWVBFICAgICAgICAgICAgICAgICAgICAgICAgICA4CS8qIE9ic29sZXRlLCBzd2l0Y2ggdG8gdXNlIEdQSU9fQ05UTF9SRUNPUkRfVFlQRSAqLworI2RlZmluZSBBVE9NX0pUQUdfUkVDT1JEX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgIDggLy9PYnNvbGV0ZSwgc3dpdGNoIHRvIHVzZSBHUElPX0NOVExfUkVDT1JEX1RZUEUKICNkZWZpbmUgQVRPTV9PQkpFQ1RfR1BJT19DTlRMX1JFQ09SRF9UWVBFICAgICAgICAgICAgICA5CiAjZGVmaW5lIEFUT01fRU5DT0RFUl9EVk9fQ0ZfUkVDT1JEX1RZUEUgICAgICAgICAgICAgICAxMAogI2RlZmluZSBBVE9NX0NPTk5FQ1RPUl9DRl9SRUNPUkRfVFlQRSAgICAgICAgICAgICAgICAgMTEKICNkZWZpbmUJQVRPTV9DT05ORUNUT1JfSEFSRENPREVfRFREX1JFQ09SRF9UWVBFCSAgICAgIDEyCiAjZGVmaW5lIEFUT01fQ09OTkVDVE9SX1BDSUVfU1VCQ09OTkVDVE9SX1JFQ09SRF9UWVBFICAxMwotI2RlZmluZSBBVE9NX1JPVVRFUl9ERENfUEFUSF9TRUxFQ1RfUkVDT1JEX1RZUEUJCQkJMTQKLSNkZWZpbmUgQVRPTV9ST1VURVJfREFUQV9DTE9DS19QQVRIX1NFTEVDVF9SRUNPUkRfVFlQRQkJCQkJMTUKKyNkZWZpbmUgQVRPTV9ST1VURVJfRERDX1BBVEhfU0VMRUNUX1JFQ09SRF9UWVBFCSAgICAgIDE0CisjZGVmaW5lIEFUT01fUk9VVEVSX0RBVEFfQ0xPQ0tfUEFUSF9TRUxFQ1RfUkVDT1JEX1RZUEUJMTUKKyNkZWZpbmUgQVRPTV9DT05ORUNUT1JfSFBEUElOX0xVVF9SRUNPUkRfVFlQRSAgICAgICAgICAxNiAvL1RoaXMgaXMgZm9yIHRoZSBjYXNlIHdoZW4gY29ubmVjdG9ycyBhcmUgbm90IGtub3duIHRvIG9iamVjdCB0YWJsZQorI2RlZmluZSBBVE9NX0NPTk5FQ1RPUl9BVVhERENfTFVUX1JFQ09SRF9UWVBFICAgICAgICAgIDE3IC8vVGhpcyBpcyBmb3IgdGhlIGNhc2Ugd2hlbiBjb25uZWN0b3JzIGFyZSBub3Qga25vd24gdG8gb2JqZWN0IHRhYmxlCisjZGVmaW5lIEFUT01fT0JKRUNUX0xJTktfUkVDT1JEX1RZUEUgICAgICAgICAgICAgICAgICAgMTggLy9PbmNlIHRoaXMgcmVjb3JkIGlzIHByZXNlbnQgdW5kZXIgb25lIG9iamVjdCwgaXQgaW5kaWNhdHMgdGhlIG9vYmplY3QgaXMgbGlua2VkIHRvIGFub3RoZXIgb2JqIGRlc2NyaWJlZCBieSB0aGUgcmVjb3JkCisjZGVmaW5lIEFUT01fQ09OTkVDVE9SX1JFTU9URV9DQVBfUkVDT1JEX1RZUEUgICAgICAgICAgMTkKIAotLyogTXVzdCBiZSB1cGRhdGVkIHdoZW4gbmV3IHJlY29yZCB0eXBlIGlzIGFkZGVkLGVxdWFsIHRvIHRoYXQgcmVjb3JkIGRlZmluaXRpb24hICovCi0jZGVmaW5lIEFUT01fTUFYX09CSkVDVF9SRUNPUkRfTlVNQkVSICAgICAgICAgICAgIEFUT01fQ09OTkVDVE9SX0NGX1JFQ09SRF9UWVBFCiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0kyQ19SRUNPUkQgewotCUFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgc2hlYWRlcjsKLQlBVE9NX0kyQ19JRF9DT05GSUcgc3VjSTJjSWQ7Ci0JVUNIQVIgdWNJMkNBZGRyOwkvKiBUaGUgc2xhdmUgYWRkcmVzcywgaXQncyAwIHdoZW4gdGhlIHJlY29yZCBpcyBhdHRhY2hlZCB0byBjb25uZWN0b3IgZm9yIEREQyAqLwotfSBBVE9NX0kyQ19SRUNPUkQ7CisvL011c3QgYmUgdXBkYXRlZCB3aGVuIG5ldyByZWNvcmQgdHlwZSBpcyBhZGRlZCxlcXVhbCB0byB0aGF0IHJlY29yZCBkZWZpbml0aW9uIQorI2RlZmluZSBBVE9NX01BWF9PQkpFQ1RfUkVDT1JEX05VTUJFUiAgICAgICAgICAgICBBVE9NX0NPTk5FQ1RPUl9SRU1PVEVfQ0FQX1JFQ09SRF9UWVBFCiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0hQRF9JTlRfUkVDT1JEIHsKLQlBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSIHNoZWFkZXI7Ci0JVUNIQVIgdWNIUERJbnRHUElPSUQ7CS8qIENvcnJlc3BvbmRpbmcgYmxvY2sgaW4gR1BJT19QSU5fSU5GTyB0YWJsZSBnaXZlcyB0aGUgcGluIGluZm8gKi8KLQlVQ0hBUiB1Y1BsdWdnZWRfUGluU3RhdGU7Ci19IEFUT01fSFBEX0lOVF9SRUNPUkQ7Cit0eXBlZGVmIHN0cnVjdCAgX0FUT01fSTJDX1JFQ09SRAoreworICBBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSICAgc2hlYWRlcjsKKyAgQVRPTV9JMkNfSURfQ09ORklHICAgICAgICAgIHN1Y0kyY0lkOyAKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjSTJDQWRkcjsgICAgICAgICAgICAgIC8vVGhlIHNsYXZlIGFkZHJlc3MsIGl0J3MgMCB3aGVuIHRoZSByZWNvcmQgaXMgYXR0YWNoZWQgdG8gY29ubmVjdG9yIGZvciBEREMKK31BVE9NX0kyQ19SRUNPUkQ7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX09VVFBVVF9QUk9URUNUSU9OX1JFQ09SRCB7Ci0JQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiBzaGVhZGVyOwotCVVDSEFSIHVjUHJvdGVjdGlvbkZsYWc7Ci0JVUNIQVIgdWNSZXNlcnZlZDsKLX0gQVRPTV9PVVRQVVRfUFJPVEVDVElPTl9SRUNPUkQ7Cit0eXBlZGVmIHN0cnVjdCAgX0FUT01fSFBEX0lOVF9SRUNPUkQKK3sKKyAgQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiAgIHNoZWFkZXI7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0hQREludEdQSU9JRDsgICAgICAgICAvL0NvcnJlc3BvbmRpbmcgYmxvY2sgaW4gR1BJT19QSU5fSU5GTyB0YWJsZSBnaXZlcyB0aGUgcGluIGluZm8gICAgICAgICAgIAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNQbHVnZ2VkX1BpblN0YXRlOworfUFUT01fSFBEX0lOVF9SRUNPUkQ7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0NPTk5FQ1RPUl9ERVZJQ0VfVEFHIHsKLQlVTE9ORyB1bEFDUElEZXZpY2VFbnVtOwkvKiBSZXNlcnZlZCBmb3Igbm93ICovCi0JVVNIT1JUIHVzRGV2aWNlSUQ7CS8qIFRoaXMgSWQgaXMgc2FtZSBhcyAiQVRPTV9ERVZJQ0VfWFhYX1NVUFBPUlQiICovCi0JVVNIT1JUIHVzUGFkZGluZzsKLX0gQVRPTV9DT05ORUNUT1JfREVWSUNFX1RBRzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fQ09OTkVDVE9SX0RFVklDRV9UQUdfUkVDT1JEIHsKLQlBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSIHNoZWFkZXI7Ci0JVUNIQVIgdWNOdW1iZXJPZkRldmljZTsKLQlVQ0hBUiB1Y1Jlc2VydmVkOwotCUFUT01fQ09OTkVDVE9SX0RFVklDRV9UQUcgYXNEZXZpY2VUYWdbMV07CS8qIFRoaXMgSWQgaXMgc2FtZSBhcyAiQVRPTV9ERVZJQ0VfWFhYX1NVUFBPUlQiLCAxIGlzIG9ubHkgZm9yIGFsbG9jYXRpb24gKi8KLX0gQVRPTV9DT05ORUNUT1JfREVWSUNFX1RBR19SRUNPUkQ7Cit0eXBlZGVmIHN0cnVjdCAgX0FUT01fT1VUUFVUX1BST1RFQ1RJT05fUkVDT1JEIAoreworICBBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSICAgc2hlYWRlcjsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjUHJvdGVjdGlvbkZsYWc7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y1Jlc2VydmVkOworfUFUT01fT1VUUFVUX1BST1RFQ1RJT05fUkVDT1JEOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9DT05ORUNUT1JfRFZJX0VYVF9JTlBVVF9SRUNPUkQgewotCUFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgc2hlYWRlcjsKLQlVQ0hBUiB1Y0NvbmZpZ0dQSU9JRDsKLQlVQ0hBUiB1Y0NvbmZpZ0dQSU9TdGF0ZTsJLyogU2V0IHRvIDEgd2hlbiBpdCdzIGFjdGl2ZSBoaWdoIHRvIGVuYWJsZSBleHRlcm5hbCBmbG93IGluICovCi0JVUNIQVIgdWNGbG93aW5HUElQSUQ7Ci0JVUNIQVIgdWNFeHRJbkdQSVBJRDsKLX0gQVRPTV9DT05ORUNUT1JfRFZJX0VYVF9JTlBVVF9SRUNPUkQ7Cit0eXBlZGVmIHN0cnVjdCAgX0FUT01fQ09OTkVDVE9SX0RFVklDRV9UQUcKK3sKKyAgVUxPTkcgICAgICAgICAgICAgICAgICAgICAgIHVsQUNQSURldmljZUVudW07ICAgICAgIC8vUmVzZXJ2ZWQgZm9yIG5vdworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgdXNEZXZpY2VJRDsgICAgICAgICAgICAgLy9UaGlzIElkIGlzIHNhbWUgYXMgIkFUT01fREVWSUNFX1hYWF9TVVBQT1JUIgorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgdXNQYWRkaW5nOworfUFUT01fQ09OTkVDVE9SX0RFVklDRV9UQUc7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0VOQ09ERVJfRlBHQV9DT05UUk9MX1JFQ09SRCB7Ci0JQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiBzaGVhZGVyOwotCVVDSEFSIHVjQ1RMMUdQSU9fSUQ7Ci0JVUNIQVIgdWNDVEwxR1BJT1N0YXRlOwkvKiBTZXQgdG8gMSB3aGVuIGl0J3MgYWN0aXZlIGhpZ2ggKi8KLQlVQ0hBUiB1Y0NUTDJHUElPX0lEOwotCVVDSEFSIHVjQ1RMMkdQSU9TdGF0ZTsJLyogU2V0IHRvIDEgd2hlbiBpdCdzIGFjdGl2ZSBoaWdoICovCi0JVUNIQVIgdWNDVEwzR1BJT19JRDsKLQlVQ0hBUiB1Y0NUTDNHUElPU3RhdGU7CS8qIFNldCB0byAxIHdoZW4gaXQncyBhY3RpdmUgaGlnaCAqLwotCVVDSEFSIHVjQ1RMRlBHQV9JTl9JRDsKLQlVQ0hBUiB1Y1BhZGRpbmdbM107Ci19IEFUT01fRU5DT0RFUl9GUEdBX0NPTlRST0xfUkVDT1JEOwordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX0NPTk5FQ1RPUl9ERVZJQ0VfVEFHX1JFQ09SRAoreworICBBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSICAgc2hlYWRlcjsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjTnVtYmVyT2ZEZXZpY2U7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y1Jlc2VydmVkOworICBBVE9NX0NPTk5FQ1RPUl9ERVZJQ0VfVEFHICAgYXNEZXZpY2VUYWdbMV07ICAgICAgICAgLy9UaGlzIElkIGlzIHNhbWUgYXMgIkFUT01fREVWSUNFX1hYWF9TVVBQT1JUIiwgMSBpcyBvbmx5IGZvciBhbGxvY2F0aW9uCit9QVRPTV9DT05ORUNUT1JfREVWSUNFX1RBR19SRUNPUkQ7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0NPTk5FQ1RPUl9DVlRWX1NIQVJFX0RJTl9SRUNPUkQgewotCUFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgc2hlYWRlcjsKLQlVQ0hBUiB1Y0dQSU9JRDsJCS8qIENvcnJlc3BvbmRpbmcgYmxvY2sgaW4gR1BJT19QSU5fSU5GTyB0YWJsZSBnaXZlcyB0aGUgcGluIGluZm8gKi8KLQlVQ0hBUiB1Y1RWQWN0aXZlU3RhdGU7CS8qIEluZGljYXRpbmcgd2hlbiB0aGUgcGluPT0wIG9yIDEgd2hlbiBUViBpcyBjb25uZWN0ZWQgKi8KLX0gQVRPTV9DT05ORUNUT1JfQ1ZUVl9TSEFSRV9ESU5fUkVDT1JEOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9KVEFHX1JFQ09SRCB7Ci0JQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiBzaGVhZGVyOwotCVVDSEFSIHVjVE1TR1BJT19JRDsKLQlVQ0hBUiB1Y1RNU0dQSU9TdGF0ZTsJLyogU2V0IHRvIDEgd2hlbiBpdCdzIGFjdGl2ZSBoaWdoICovCi0JVUNIQVIgdWNUQ0tHUElPX0lEOwotCVVDSEFSIHVjVENLR1BJT1N0YXRlOwkvKiBTZXQgdG8gMSB3aGVuIGl0J3MgYWN0aXZlIGhpZ2ggKi8KLQlVQ0hBUiB1Y1RET0dQSU9fSUQ7Ci0JVUNIQVIgdWNURE9HUElPU3RhdGU7CS8qIFNldCB0byAxIHdoZW4gaXQncyBhY3RpdmUgaGlnaCAqLwotCVVDSEFSIHVjVERJR1BJT19JRDsKLQlVQ0hBUiB1Y1RESUdQSU9TdGF0ZTsJLyogU2V0IHRvIDEgd2hlbiBpdCdzIGFjdGl2ZSBoaWdoICovCi0JVUNIQVIgdWNQYWRkaW5nWzJdOwotfSBBVE9NX0pUQUdfUkVDT1JEOwordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX0NPTk5FQ1RPUl9EVklfRVhUX0lOUFVUX1JFQ09SRAoreworICBBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSICAgc2hlYWRlcjsKKyAgVUNIQVIJCQkJCQkgICAgICAgICAgICB1Y0NvbmZpZ0dQSU9JRDsKKyAgVUNIQVIJCQkJCQkgICAgICAgICAgICB1Y0NvbmZpZ0dQSU9TdGF0ZTsJICAgIC8vU2V0IHRvIDEgd2hlbiBpdCdzIGFjdGl2ZSBoaWdoIHRvIGVuYWJsZSBleHRlcm5hbCBmbG93IGluCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0Zsb3dpbkdQSVBJRDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjRXh0SW5HUElQSUQ7Cit9QVRPTV9DT05ORUNUT1JfRFZJX0VYVF9JTlBVVF9SRUNPUkQ7CiAKLS8qIFRoZSBmb2xsb3dpbmcgZ2VuZXJpYyBvYmplY3QgZ3BpbyBwaW4gY29udHJvbCByZWNvcmQgdHlwZSB3aWxsIHJlcGxhY2UgSlRBR19SRUNPUkQvRlBHQV9DT05UUk9MX1JFQ09SRC9EVklfRVhUX0lOUFVUX1JFQ09SRCBhYm92ZSBncmFkdWFsbHkgKi8KLXR5cGVkZWYgc3RydWN0IF9BVE9NX0dQSU9fUElOX0NPTlRST0xfUEFJUiB7Ci0JVUNIQVIgdWNHUElPSUQ7CQkvKiAgR1BJT19JRCwgZmluZCB0aGUgY29ycmVzcG9uZGluZyBJRCBpbiBHUElPX0xVVCB0YWJsZSAqLwotCVVDSEFSIHVjR1BJT19QaW5TdGF0ZTsJLyogIFBpbiBzdGF0ZSBzaG93aW5nIGhvdyB0byBzZXQtdXAgdGhlIHBpbiAqLwotfSBBVE9NX0dQSU9fUElOX0NPTlRST0xfUEFJUjsKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9FTkNPREVSX0ZQR0FfQ09OVFJPTF9SRUNPUkQKK3sKKyAgQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiAgIHNoZWFkZXI7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0NUTDFHUElPX0lEOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNDVEwxR1BJT1N0YXRlOyAgICAgICAgLy9TZXQgdG8gMSB3aGVuIGl0J3MgYWN0aXZlIGhpZ2gKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjQ1RMMkdQSU9fSUQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0NUTDJHUElPU3RhdGU7ICAgICAgICAvL1NldCB0byAxIHdoZW4gaXQncyBhY3RpdmUgaGlnaAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNDVEwzR1BJT19JRDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjQ1RMM0dQSU9TdGF0ZTsgICAgICAgIC8vU2V0IHRvIDEgd2hlbiBpdCdzIGFjdGl2ZSBoaWdoCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0NUTEZQR0FfSU5fSUQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y1BhZGRpbmdbM107Cit9QVRPTV9FTkNPREVSX0ZQR0FfQ09OVFJPTF9SRUNPUkQ7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX09CSkVDVF9HUElPX0NOVExfUkVDT1JEIHsKLQlBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSIHNoZWFkZXI7Ci0JVUNIQVIgdWNGbGFnczsJCS8qICBGdXR1cmUgZXhwbmFkaWJpbGl0eSAqLwotCVVDSEFSIHVjTnVtYmVyT2ZQaW5zOwkvKiAgTnVtYmVyIG9mIEdQSU8gcGlucyB1c2VkIHRvIGNvbnRyb2wgdGhlIG9iamVjdCAqLwotCUFUT01fR1BJT19QSU5fQ09OVFJPTF9QQUlSIGFzR3Bpb1sxXTsJLyogIHRoZSByZWFsIGdwaW8gcGluIHBhaXIgZGV0ZXJtaW5lZCBieSBudW1iZXIgb2YgcGlucyB1Y051bWJlck9mUGlucyAqLwotfSBBVE9NX09CSkVDVF9HUElPX0NOVExfUkVDT1JEOwordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX0NPTk5FQ1RPUl9DVlRWX1NIQVJFX0RJTl9SRUNPUkQKK3sKKyAgQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiAgIHNoZWFkZXI7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0dQSU9JRDsgICAgICAgICAgICAgICAvL0NvcnJlc3BvbmRpbmcgYmxvY2sgaW4gR1BJT19QSU5fSU5GTyB0YWJsZSBnaXZlcyB0aGUgcGluIGluZm8gCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y1RWQWN0aXZlU3RhdGU7ICAgICAgICAvL0luZGljYXRpbmcgd2hlbiB0aGUgcGluPT0wIG9yIDEgd2hlbiBUViBpcyBjb25uZWN0ZWQKK31BVE9NX0NPTk5FQ1RPUl9DVlRWX1NIQVJFX0RJTl9SRUNPUkQ7CiAKLS8qIERlZmluaXRpb25zIGZvciBHUElPIHBpbiBzdGF0ZSAqLwordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX0pUQUdfUkVDT1JECit7CisgIEFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgICBzaGVhZGVyOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNUTVNHUElPX0lEOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNUTVNHUElPU3RhdGU7ICAgICAgICAgLy9TZXQgdG8gMSB3aGVuIGl0J3MgYWN0aXZlIGhpZ2gKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjVENLR1BJT19JRDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjVENLR1BJT1N0YXRlOyAgICAgICAgIC8vU2V0IHRvIDEgd2hlbiBpdCdzIGFjdGl2ZSBoaWdoCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y1RET0dQSU9fSUQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y1RET0dQSU9TdGF0ZTsgICAgICAgICAvL1NldCB0byAxIHdoZW4gaXQncyBhY3RpdmUgaGlnaAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNURElHUElPX0lEOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNURElHUElPU3RhdGU7ICAgICAgICAgLy9TZXQgdG8gMSB3aGVuIGl0J3MgYWN0aXZlIGhpZ2gKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjUGFkZGluZ1syXTsKK31BVE9NX0pUQUdfUkVDT1JEOworCisKKy8vVGhlIGZvbGxvd2luZyBnZW5lcmljIG9iamVjdCBncGlvIHBpbiBjb250cm9sIHJlY29yZCB0eXBlIHdpbGwgcmVwbGFjZSBKVEFHX1JFQ09SRC9GUEdBX0NPTlRST0xfUkVDT1JEL0RWSV9FWFRfSU5QVVRfUkVDT1JEIGFib3ZlIGdyYWR1YWxseQordHlwZWRlZiBzdHJ1Y3QgX0FUT01fR1BJT19QSU5fQ09OVFJPTF9QQUlSCit7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0dQSU9JRDsgICAgICAgICAgICAgICAvLyBHUElPX0lELCBmaW5kIHRoZSBjb3JyZXNwb25kaW5nIElEIGluIEdQSU9fTFVUIHRhYmxlCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0dQSU9fUGluU3RhdGU7ICAgICAgICAvLyBQaW4gc3RhdGUgc2hvd2luZyBob3cgdG8gc2V0LXVwIHRoZSBwaW4KK31BVE9NX0dQSU9fUElOX0NPTlRST0xfUEFJUjsKKwordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX09CSkVDVF9HUElPX0NOVExfUkVDT1JECit7CisgIEFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgICBzaGVhZGVyOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNGbGFnczsgICAgICAgICAgICAgICAgLy8gRnV0dXJlIGV4cG5hZGliaWxpdHkKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjTnVtYmVyT2ZQaW5zOyAgICAgICAgIC8vIE51bWJlciBvZiBHUElPIHBpbnMgdXNlZCB0byBjb250cm9sIHRoZSBvYmplY3QKKyAgQVRPTV9HUElPX1BJTl9DT05UUk9MX1BBSVIgIGFzR3Bpb1sxXTsgICAgICAgICAgICAgIC8vIHRoZSByZWFsIGdwaW8gcGluIHBhaXIgZGV0ZXJtaW5lZCBieSBudW1iZXIgb2YgcGlucyB1Y051bWJlck9mUGlucworfUFUT01fT0JKRUNUX0dQSU9fQ05UTF9SRUNPUkQ7CisKKy8vRGVmaW5pdGlvbnMgZm9yIEdQSU8gcGluIHN0YXRlIAogI2RlZmluZSBHUElPX1BJTl9UWVBFX0lOUFVUICAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgR1BJT19QSU5fVFlQRV9PVVRQVVQgICAgICAgICAgICAweDEwCiAjZGVmaW5lIEdQSU9fUElOX1RZUEVfSFdfQ09OVFJPTCAgICAgICAgMHgyMAogCi0vKiBGb3IgR1BJT19QSU5fVFlQRV9PVVRQVVQgdGhlIGZvbGxvd2luZyBpcyBkZWZpbmVkICovCisvL0ZvciBHUElPX1BJTl9UWVBFX09VVFBVVCB0aGUgZm9sbG93aW5nIGlzIGRlZmluZWQgCiAjZGVmaW5lIEdQSU9fUElOX09VVFBVVF9TVEFURV9NQVNLICAgICAgMHgwMQogI2RlZmluZSBHUElPX1BJTl9PVVRQVVRfU1RBVEVfU0hJRlQgICAgIDAKICNkZWZpbmUgR1BJT19QSU5fU1RBVEVfQUNUSVZFX0xPVyAgICAgICAweDAKICNkZWZpbmUgR1BJT19QSU5fU1RBVEVfQUNUSVZFX0hJR0ggICAgICAweDEKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fRU5DT0RFUl9EVk9fQ0ZfUkVDT1JEIHsKLQlBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSIHNoZWFkZXI7Ci0JVUxPTkcgdWxTdHJlbmd0aENvbnRyb2w7CS8qICBEVk9BIHN0cmVuZ3RoIGNvbnRyb2wgZm9yIENGICovCi0JVUNIQVIgdWNQYWRkaW5nWzJdOwotfSBBVE9NX0VOQ09ERVJfRFZPX0NGX1JFQ09SRDsKKy8vIEluZGV4ZXMgdG8gR1BJTyBhcnJheSBpbiBHTFN5bmMgcmVjb3JkIAorI2RlZmluZSBBVE9NX0dQSU9fSU5ERVhfR0xTWU5DX1JFRkNMSyAgICAwCisjZGVmaW5lIEFUT01fR1BJT19JTkRFWF9HTFNZTkNfSFNZTkMgICAgIDEKKyNkZWZpbmUgQVRPTV9HUElPX0lOREVYX0dMU1lOQ19WU1lOQyAgICAgMgorI2RlZmluZSBBVE9NX0dQSU9fSU5ERVhfR0xTWU5DX1NXQVBfUkVRICAzCisjZGVmaW5lIEFUT01fR1BJT19JTkRFWF9HTFNZTkNfU1dBUF9HTlQgIDQKKyNkZWZpbmUgQVRPTV9HUElPX0lOREVYX0dMU1lOQ19JTlRFUlJVUFQgNQorI2RlZmluZSBBVE9NX0dQSU9fSU5ERVhfR0xTWU5DX1ZfUkVTRVQgICA2CisjZGVmaW5lIEFUT01fR1BJT19JTkRFWF9HTFNZTkNfTUFYICAgICAgIDcKIAotLyogIHZhbHVlIGZvciBBVE9NX0NPTk5FQ1RPUl9DRl9SRUNPUkQudWNDb25uZWN0ZWREdm9CdW5kbGUgKi8KK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9FTkNPREVSX0RWT19DRl9SRUNPUkQKK3sKKyAgQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiAgIHNoZWFkZXI7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICB1bFN0cmVuZ3RoQ29udHJvbDsgICAgICAvLyBEVk9BIHN0cmVuZ3RoIGNvbnRyb2wgZm9yIENGCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y1BhZGRpbmdbMl07Cit9QVRPTV9FTkNPREVSX0RWT19DRl9SRUNPUkQ7CisKKy8vIHZhbHVlIGZvciBBVE9NX0NPTk5FQ1RPUl9DRl9SRUNPUkQudWNDb25uZWN0ZWREdm9CdW5kbGUKICNkZWZpbmUgQVRPTV9DT05ORUNUT1JfQ0ZfUkVDT1JEX0NPTk5FQ1RFRF9VUFBFUjEyQklUQlVORExFQSAgIDEKICNkZWZpbmUgQVRPTV9DT05ORUNUT1JfQ0ZfUkVDT1JEX0NPTk5FQ1RFRF9MT1dFUjEyQklUQlVORExFQiAgIDIKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fQ09OTkVDVE9SX0NGX1JFQ09SRCB7Ci0JQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiBzaGVhZGVyOwotCVVTSE9SVCB1c01heFBpeENsazsKLQlVQ0hBUiB1Y0Zsb3dDbnRsR3Bpb0lkOwotCVVDSEFSIHVjU3dhcENudGxHcGlvSWQ7Ci0JVUNIQVIgdWNDb25uZWN0ZWREdm9CdW5kbGU7Ci0JVUNIQVIgdWNQYWRkaW5nOwotfSBBVE9NX0NPTk5FQ1RPUl9DRl9SRUNPUkQ7Cit0eXBlZGVmIHN0cnVjdCAgX0FUT01fQ09OTkVDVE9SX0NGX1JFQ09SRAoreworICBBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSICAgc2hlYWRlcjsKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgIHVzTWF4UGl4Q2xrOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNGbG93Q250bEdwaW9JZDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjU3dhcENudGxHcGlvSWQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y0Nvbm5lY3RlZER2b0J1bmRsZTsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjUGFkZGluZzsKK31BVE9NX0NPTk5FQ1RPUl9DRl9SRUNPUkQ7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0NPTk5FQ1RPUl9IQVJEQ09ERV9EVERfUkVDT1JEIHsKLQlBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSIHNoZWFkZXI7Ci0JQVRPTV9EVERfRk9STUFUIGFzVGltaW5nOwotfSBBVE9NX0NPTk5FQ1RPUl9IQVJEQ09ERV9EVERfUkVDT1JEOwordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX0NPTk5FQ1RPUl9IQVJEQ09ERV9EVERfUkVDT1JECit7CisgIEFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgICBzaGVhZGVyOworCUFUT01fRFREX0ZPUk1BVAkJCQkJCQlhc1RpbWluZzsKK31BVE9NX0NPTk5FQ1RPUl9IQVJEQ09ERV9EVERfUkVDT1JEOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9DT05ORUNUT1JfUENJRV9TVUJDT05ORUNUT1JfUkVDT1JEIHsKLQlBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSIHNoZWFkZXI7CS8qIEFUT01fQ09OTkVDVE9SX1BDSUVfU1VCQ09OTkVDVE9SX1JFQ09SRF9UWVBFICovCi0JVUNIQVIgdWNTdWJDb25uZWN0b3JUeXBlOwkvKiBDT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9EfFhfSURfRFVBTF9MSU5LX0RWSV9EfEhETUlfVFlQRV9BICovCi0JVUNIQVIgdWNSZXNlcnZlZDsKLX0gQVRPTV9DT05ORUNUT1JfUENJRV9TVUJDT05ORUNUT1JfUkVDT1JEOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fQ09OTkVDVE9SX1BDSUVfU1VCQ09OTkVDVE9SX1JFQ09SRAoreworICBBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSICAgc2hlYWRlcjsgICAgICAgICAgICAgICAgLy9BVE9NX0NPTk5FQ1RPUl9QQ0lFX1NVQkNPTk5FQ1RPUl9SRUNPUkRfVFlQRQorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICAgdWNTdWJDb25uZWN0b3JUeXBlOyAgICAgLy9DT05ORUNUT1JfT0JKRUNUX0lEX1NJTkdMRV9MSU5LX0RWSV9EfFhfSURfRFVBTF9MSU5LX0RWSV9EfEhETUlfVFlQRV9BCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICB1Y1Jlc2VydmVkOworfUFUT01fQ09OTkVDVE9SX1BDSUVfU1VCQ09OTkVDVE9SX1JFQ09SRDsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fUk9VVEVSX0REQ19QQVRIX1NFTEVDVF9SRUNPUkQgewotCUFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgc2hlYWRlcjsKLQlVQ0hBUiB1Y011eFR5cGU7CS8qIGRlY2lkZSB0aGUgbnVtYmVyIG9mIHVjTXV4U3RhdGUsID0wLCBubyBwaW4gc3RhdGUsID0xOiBzaW5nbGUgc3RhdGUgd2l0aCBjb21wbGVtZW50LCA+MTogbXVsdGlwbGUgc3RhdGUgKi8KLQlVQ0hBUiB1Y011eENvbnRyb2xQaW47Ci0JVUNIQVIgdWNNdXhTdGF0ZVsyXTsJLyogZm9yIGFsbGlnbWVudCBwdXJwb3NlICovCi19IEFUT01fUk9VVEVSX0REQ19QQVRIX1NFTEVDVF9SRUNPUkQ7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1JPVVRFUl9EQVRBX0NMT0NLX1BBVEhfU0VMRUNUX1JFQ09SRCB7Ci0JQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiBzaGVhZGVyOwotCVVDSEFSIHVjTXV4VHlwZTsKLQlVQ0hBUiB1Y011eENvbnRyb2xQaW47Ci0JVUNIQVIgdWNNdXhTdGF0ZVsyXTsJLyogZm9yIGFsbGlnbWVudCBwdXJwb3NlICovCi19IEFUT01fUk9VVEVSX0RBVEFfQ0xPQ0tfUEFUSF9TRUxFQ1RfUkVDT1JEOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fUk9VVEVSX0REQ19QQVRIX1NFTEVDVF9SRUNPUkQKK3sKKwlBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSICAgc2hlYWRlcjsgICAgICAgICAgICAgICAgCisJVUNIQVIJCQkJCQkJCQkJCQl1Y011eFR5cGU7CQkJCQkJCS8vZGVjaWRlIHRoZSBudW1iZXIgb2YgdWNNdXhTdGF0ZSwgPTAsIG5vIHBpbiBzdGF0ZSwgPTE6IHNpbmdsZSBzdGF0ZSB3aXRoIGNvbXBsZW1lbnQsID4xOiBtdWx0aXBsZSBzdGF0ZQorCVVDSEFSCQkJCQkJCQkJCQkJdWNNdXhDb250cm9sUGluOworCVVDSEFSCQkJCQkJCQkJCQkJdWNNdXhTdGF0ZVsyXTsJCQkJCS8vZm9yIGFsbGlnbWVudCBwdXJwb3NlCit9QVRPTV9ST1VURVJfRERDX1BBVEhfU0VMRUNUX1JFQ09SRDsKIAotLyogIGRlZmluZSB1Y011eFR5cGUgKi8KK3R5cGVkZWYgc3RydWN0IF9BVE9NX1JPVVRFUl9EQVRBX0NMT0NLX1BBVEhfU0VMRUNUX1JFQ09SRAoreworCUFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgICBzaGVhZGVyOyAgICAgICAgICAgICAgICAKKwlVQ0hBUgkJCQkJCQkJCQkJCXVjTXV4VHlwZTsKKwlVQ0hBUgkJCQkJCQkJCQkJCXVjTXV4Q29udHJvbFBpbjsKKwlVQ0hBUgkJCQkJCQkJCQkJCXVjTXV4U3RhdGVbMl07CQkJCQkvL2ZvciBhbGxpZ21lbnQgcHVycG9zZQorfUFUT01fUk9VVEVSX0RBVEFfQ0xPQ0tfUEFUSF9TRUxFQ1RfUkVDT1JEOworCisvLyBkZWZpbmUgdWNNdXhUeXBlCiAjZGVmaW5lIEFUT01fUk9VVEVSX01VWF9QSU5fU1RBVEVfTUFTSwkJCQkJCQkJMHgwZgogI2RlZmluZSBBVE9NX1JPVVRFUl9NVVhfUElOX1NJTkdMRV9TVEFURV9DT01QTEVNRU5UCQkweDAxCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIEFTSUMgdm9sdGFnZSBkYXRhIHRhYmxlICovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXR5cGVkZWYgc3RydWN0IF9BVE9NX1ZPTFRBR0VfSU5GT19IRUFERVIgewotCVVTSE9SVCB1c1ZERENCYXNlTGV2ZWw7CS8qIEluIG51bWJlciBvZiA1MG12IHVuaXQgKi8KLQlVU0hPUlQgdXNSZXNlcnZlZDsJLyogRm9yIHBvc3NpYmxlIGV4dGVuc2lvbiB0YWJsZSBvZmZzZXQgKi8KLQlVQ0hBUiB1Y051bU9mVm9sdGFnZUVudHJpZXM7Ci0JVUNIQVIgdWNCeXRlc1BlclZvbHRhZ2VFbnRyeTsKLQlVQ0hBUiB1Y1ZvbHRhZ2VTdGVwOwkvKiBJbmRpY2F0aW5nIGluIGhvdyBtYW55IG12IGluY3JlYW1lbnQgaXMgb25lIHN0ZXAsIDAuNW12IHVuaXQgKi8KLQlVQ0hBUiB1Y0RlZmF1bHRWb2x0YWdlRW50cnk7Ci0JVUNIQVIgdWNWb2x0YWdlQ29udHJvbEkyY0xpbmU7Ci0JVUNIQVIgdWNWb2x0YWdlQ29udHJvbEFkZHJlc3M7Ci0JVUNIQVIgdWNWb2x0YWdlQ29udHJvbE9mZnNldDsKLX0gQVRPTV9WT0xUQUdFX0lORk9fSEVBREVSOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fQ09OTkVDVE9SX0hQRFBJTl9MVVRfUkVDT1JEICAgICAvL3JlY29yZCBmb3IgQVRPTV9DT05ORUNUT1JfSFBEUElOX0xVVF9SRUNPUkRfVFlQRQoreworICBBVE9NX0NPTU1PTl9SRUNPUkRfSEVBREVSICAgc2hlYWRlcjsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgIHVjSFBEUElOTWFwW01BWF9OVU1CRVJfT0ZfRVhUX0hQRFBJTl9MVVRfRU5UUklFU107ICAvL0FuIGZpeGVkIHNpemUgYXJyYXkgd2hpY2ggbWFwcyBleHRlcm5hbCBwaW5zIHRvIGludGVybmFsIEdQSU9fUElOX0lORk8gdGFibGUgCit9QVRPTV9DT05ORUNUT1JfSFBEUElOX0xVVF9SRUNPUkQ7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1ZPTFRBR0VfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JQVRPTV9WT0xUQUdFX0lORk9fSEVBREVSIHZpSGVhZGVyOwotCVVDSEFSIHVjVm9sdGFnZUVudHJpZXNbNjRdOwkvKiA2NCBpcyBmb3IgYWxsb2NhdGlvbiwgdGhlIGFjdHVhbCBudW1iZXIgb2YgZW50cnkgaXMgcHJlc2VudCBhdCB1Y051bU9mVm9sdGFnZUVudHJpZXMqdWNCeXRlc1BlclZvbHRhZ2VFbnRyeSAqLwotfSBBVE9NX1ZPTFRBR0VfSU5GTzsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0NPTk5FQ1RPUl9BVVhERENfTFVUX1JFQ09SRCAgLy9yZWNvcmQgZm9yIEFUT01fQ09OTkVDVE9SX0FVWEREQ19MVVRfUkVDT1JEX1RZUEUKK3sKKyAgQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiAgIHNoZWFkZXI7CisgIEFUT01fSTJDX0lEX0NPTkZJRyAgICAgICAgICB1Y0FVWEREQ01hcFtNQVhfTlVNQkVSX09GX0VYVF9BVVhERENfTFVUX0VOVFJJRVNdOyAgLy9BbiBmaXhlZCBzaXplIGFycmF5IHdoaWNoIG1hcHMgZXh0ZXJuYWwgcGlucyB0byBpbnRlcm5hbCBEREMgSUQKK31BVE9NX0NPTk5FQ1RPUl9BVVhERENfTFVUX1JFQ09SRDsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fVk9MVEFHRV9GT1JNVUxBIHsKLQlVU0hPUlQgdXNWb2x0YWdlQmFzZUxldmVsOwkvKiAgSW4gbnVtYmVyIG9mIDFtdiB1bml0ICovCi0JVVNIT1JUIHVzVm9sdGFnZVN0ZXA7CS8qICBJbmRpY2F0aW5nIGluIGhvdyBtYW55IG12IGluY3JlYW1lbnQgaXMgb25lIHN0ZXAsIDFtdiB1bml0ICovCi0JVUNIQVIgdWNOdW1PZlZvbHRhZ2VFbnRyaWVzOwkvKiAgTnVtYmVyIG9mIFZvbHRhZ2UgRW50cnksIHdoaWNoIGluZGljYXRlIG1heCBWb2x0YWdlICovCi0JVUNIQVIgdWNGbGFnOwkJLyogIGJpdDA9MCA6c3RlcCBpcyAxbXYgPTEgMC41bXYgKi8KLQlVQ0hBUiB1Y0Jhc2VWSUQ7CS8qICBpZiB0aGVyZSBpcyBubyBsb29rdXAgdGFibGUsIFZJRD0gQmFzZVZJRCArICggVm9sIC0gQmFzZUxldmxlICkgL1ZvbHRhZ2VTdGVwICovCi0JVUNIQVIgdWNSZXNlcnZlZDsKLQlVQ0hBUiB1Y1ZJREFkanVzdEVudHJpZXNbMzJdOwkvKiAgMzIgaXMgZm9yIGFsbG9jYXRpb24sIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGVudHJ5IGlzIHByZXNlbnQgYXQgdWNOdW1PZlZvbHRhZ2VFbnRyaWVzICovCi19IEFUT01fVk9MVEFHRV9GT1JNVUxBOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fT0JKRUNUX0xJTktfUkVDT1JECit7CisgIEFUT01fQ09NTU9OX1JFQ09SRF9IRUFERVIgICBzaGVhZGVyOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICAgdXNPYmplY3RJRDsgICAgICAgICAvL2NvdWxkIGJlIGNvbm5lY3RvciwgZW5jb3JkZXIgb3Igb3RoZXIgb2JqZWN0IGluIG9iamVjdC5oCit9QVRPTV9PQkpFQ1RfTElOS19SRUNPUkQ7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1ZPTFRBR0VfQ09OVFJPTCB7Ci0JVUNIQVIgdWNWb2x0YWdlQ29udHJvbElkOwkvKiBJbmRpY2F0ZSBpdCBpcyBjb250cm9sbGVkIGJ5IEkyQyBvciBHUElPIG9yIEhXIHN0YXRlIG1hY2hpbmUgKi8KLQlVQ0hBUiB1Y1ZvbHRhZ2VDb250cm9sSTJjTGluZTsKLQlVQ0hBUiB1Y1ZvbHRhZ2VDb250cm9sQWRkcmVzczsKLQlVQ0hBUiB1Y1ZvbHRhZ2VDb250cm9sT2Zmc2V0OwotCVVTSE9SVCB1c0dwaW9QaW5fQUluZGV4OwkvKiBHUElPX1BBRCByZWdpc3RlciBpbmRleCAqLwotCVVDSEFSIHVjR3Bpb1BpbkJpdFNoaWZ0WzldOwkvKiBhdCBtb3N0IDggcGluIHN1cHBvcnQgMjU1IFZJRHMsIHRlcm1pbnRhdGUgd2l0aCAweGZmICovCi0JVUNIQVIgdWNSZXNlcnZlZDsKLX0gQVRPTV9WT0xUQUdFX0NPTlRST0w7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9DT05ORUNUT1JfUkVNT1RFX0NBUF9SRUNPUkQKK3sKKyAgQVRPTV9DT01NT05fUkVDT1JEX0hFQURFUiAgIHNoZWFkZXI7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICB1c1Jlc2VydmVkOworfUFUT01fQ09OTkVDVE9SX1JFTU9URV9DQVBfUkVDT1JEOwogCi0vKiAgRGVmaW5lIHVjVm9sdGFnZUNvbnRyb2xJZCAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy8gQVNJQyB2b2x0YWdlIGRhdGEgdGFibGUKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9WT0xUQUdFX0lORk9fSEVBREVSCit7CisgICBVU0hPUlQgICB1c1ZERENCYXNlTGV2ZWw7ICAgICAgICAgICAgICAgIC8vSW4gbnVtYmVyIG9mIDUwbXYgdW5pdAorICAgVVNIT1JUICAgdXNSZXNlcnZlZDsgICAgICAgICAgICAgICAgICAgICAvL0ZvciBwb3NzaWJsZSBleHRlbnNpb24gdGFibGUgb2Zmc2V0CisgICBVQ0hBUiAgICB1Y051bU9mVm9sdGFnZUVudHJpZXM7CisgICBVQ0hBUiAgICB1Y0J5dGVzUGVyVm9sdGFnZUVudHJ5OworICAgVUNIQVIgICAgdWNWb2x0YWdlU3RlcDsgICAgICAgICAgICAgICAgICAvL0luZGljYXRpbmcgaW4gaG93IG1hbnkgbXYgaW5jcmVhbWVudCBpcyBvbmUgc3RlcCwgMC41bXYgdW5pdAorICAgVUNIQVIgICAgdWNEZWZhdWx0Vm9sdGFnZUVudHJ5OworICAgVUNIQVIgICAgdWNWb2x0YWdlQ29udHJvbEkyY0xpbmU7CisgICBVQ0hBUiAgICB1Y1ZvbHRhZ2VDb250cm9sQWRkcmVzczsKKyAgIFVDSEFSICAgIHVjVm9sdGFnZUNvbnRyb2xPZmZzZXQ7Cit9QVRPTV9WT0xUQUdFX0lORk9fSEVBREVSOworCit0eXBlZGVmIHN0cnVjdCAgX0FUT01fVk9MVEFHRV9JTkZPCit7CisgICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIJc0hlYWRlcjsgCisgICBBVE9NX1ZPTFRBR0VfSU5GT19IRUFERVIgdmlIZWFkZXI7CisgICBVQ0hBUiAgICB1Y1ZvbHRhZ2VFbnRyaWVzWzY0XTsgICAgICAgICAgICAvLzY0IGlzIGZvciBhbGxvY2F0aW9uLCB0aGUgYWN0dWFsIG51bWJlciBvZiBlbnRyeSBpcyBwcmVzZW50IGF0IHVjTnVtT2ZWb2x0YWdlRW50cmllcyp1Y0J5dGVzUGVyVm9sdGFnZUVudHJ5Cit9QVRPTV9WT0xUQUdFX0lORk87CisKKwordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX1ZPTFRBR0VfRk9STVVMQQoreworICAgVVNIT1JUICAgdXNWb2x0YWdlQmFzZUxldmVsOyAgICAgICAgICAgICAvLyBJbiBudW1iZXIgb2YgMW12IHVuaXQKKyAgIFVTSE9SVCAgIHVzVm9sdGFnZVN0ZXA7ICAgICAgICAgICAgICAgICAgLy8gSW5kaWNhdGluZyBpbiBob3cgbWFueSBtdiBpbmNyZWFtZW50IGlzIG9uZSBzdGVwLCAxbXYgdW5pdAorCSBVQ0hBUgkJdWNOdW1PZlZvbHRhZ2VFbnRyaWVzOwkJCQkJLy8gTnVtYmVyIG9mIFZvbHRhZ2UgRW50cnksIHdoaWNoIGluZGljYXRlIG1heCBWb2x0YWdlCisJIFVDSEFSCQl1Y0ZsYWc7CQkJCQkJCQkJCQkJCS8vIGJpdDA9MCA6c3RlcCBpcyAxbXYgPTEgMC41bXYKKwkgVUNIQVIJCXVjQmFzZVZJRDsJCQkJCQkJCQkJCS8vIGlmIHRoZXJlIGlzIG5vIGxvb2t1cCB0YWJsZSwgVklEPSBCYXNlVklEICsgKCBWb2wgLSBCYXNlTGV2bGUgKSAvVm9sdGFnZVN0ZXAKKwkgVUNIQVIJCXVjUmVzZXJ2ZWQ7CisJIFVDSEFSCQl1Y1ZJREFkanVzdEVudHJpZXNbMzJdOwkJCQkJLy8gMzIgaXMgZm9yIGFsbG9jYXRpb24sIHRoZSBhY3R1YWwgbnVtYmVyIG9mIGVudHJ5IGlzIHByZXNlbnQgYXQgdWNOdW1PZlZvbHRhZ2VFbnRyaWVzCit9QVRPTV9WT0xUQUdFX0ZPUk1VTEE7CisKK3R5cGVkZWYgc3RydWN0ICBfVk9MVEFHRV9MVVRfRU5UUlkKK3sKKwkgVVNIT1JUCQl1c1ZvbHRhZ2VDb2RlOwkJCQkJCQkJCS8vIFRoZSBWb2x0YWdlIElELCBlaXRoZXIgR1BJTyBvciBJMkMgY29kZQorCSBVU0hPUlQJCXVzVm9sdGFnZVZhbHVlOwkJCQkJCQkJCS8vIFRoZSBjb3JyZXNwb25kaW5nIFZvbHRhZ2UgVmFsdWUsIGluIG1WCit9Vk9MVEFHRV9MVVRfRU5UUlk7CisKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9WT0xUQUdFX0ZPUk1VTEFfVjIKK3sKKwkgVUNIQVIJCXVjTnVtT2ZWb2x0YWdlRW50cmllczsJCQkJCS8vIE51bWJlciBvZiBWb2x0YWdlIEVudHJ5LCB3aGljaCBpbmRpY2F0ZSBtYXggVm9sdGFnZQorCSBVQ0hBUgkJdWNSZXNlcnZlZFszXTsKKwkgVk9MVEFHRV9MVVRfRU5UUlkgYXNWSURBZGp1c3RFbnRyaWVzWzMyXTsvLyAzMiBpcyBmb3IgYWxsb2NhdGlvbiwgdGhlIGFjdHVhbCBudW1iZXIgb2YgZW50cmllcyBpcyBpbiB1Y051bU9mVm9sdGFnZUVudHJpZXMKK31BVE9NX1ZPTFRBR0VfRk9STVVMQV9WMjsKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fVk9MVEFHRV9DT05UUk9MCit7CisJVUNIQVIJCSB1Y1ZvbHRhZ2VDb250cm9sSWQ7CQkJCQkJCS8vSW5kaWNhdGUgaXQgaXMgY29udHJvbGxlZCBieSBJMkMgb3IgR1BJTyBvciBIVyBzdGF0ZSBtYWNoaW5lCQkKKyAgVUNIQVIgICAgdWNWb2x0YWdlQ29udHJvbEkyY0xpbmU7CisgIFVDSEFSICAgIHVjVm9sdGFnZUNvbnRyb2xBZGRyZXNzOworICBVQ0hBUiAgICB1Y1ZvbHRhZ2VDb250cm9sT2Zmc2V0OwkgCQorICBVU0hPUlQgICB1c0dwaW9QaW5fQUluZGV4OwkJCQkJCQkJLy9HUElPX1BBRCByZWdpc3RlciBpbmRleAorICBVQ0hBUiAgICB1Y0dwaW9QaW5CaXRTaGlmdFs5XTsJCQkJCQkvL2F0IG1vc3QgOCBwaW4gc3VwcG9ydCAyNTUgVklEcywgdGVybWludGF0ZSB3aXRoIDB4ZmYKKwlVQ0hBUgkJIHVjUmVzZXJ2ZWQ7Cit9QVRPTV9WT0xUQUdFX0NPTlRST0w7CisKKy8vIERlZmluZSB1Y1ZvbHRhZ2VDb250cm9sSWQKICNkZWZpbmUJVk9MVEFHRV9DT05UUk9MTEVEX0JZX0hXCQkJCQkJCTB4MDAKICNkZWZpbmUJVk9MVEFHRV9DT05UUk9MTEVEX0JZX0kyQ19NQVNLCQkJCTB4N0YKICNkZWZpbmUJVk9MVEFHRV9DT05UUk9MTEVEX0JZX0dQSU8JCQkJCQkweDgwCi0jZGVmaW5lCVZPTFRBR0VfQ09OVFJPTF9JRF9MTTY0CQkJCQkJCQkweDAxCS8qIEkyQyBjb250cm9sLCB1c2VkIGZvciBSNXh4IENvcmUgVm9sdGFnZSAqLwotI2RlZmluZQlWT0xUQUdFX0NPTlRST0xfSURfREFDCQkJCQkJCQkweDAyCS8qIEkyQyBjb250cm9sLCB1c2VkIGZvciBSNXh4L1I2eHggTVZEREMsTVZERFEgb3IgVkREQ0kgKi8KLSNkZWZpbmUJVk9MVEFHRV9DT05UUk9MX0lEX1ZUMTE2eE0JCQkJCQkweDAzCS8qIEkyQyBjb250cm9sLCB1c2VkIGZvciBSNnh4IENvcmUgVm9sdGFnZSAqLwotI2RlZmluZSBWT0xUQUdFX0NPTlRST0xfSURfRFM0NDAyCQkJCQkJCTB4MDQKKyNkZWZpbmUJVk9MVEFHRV9DT05UUk9MX0lEX0xNNjQJCQkJCQkJCTB4MDEJCQkJCQkJCQkvL0kyQyBjb250cm9sLCB1c2VkIGZvciBSNXh4IENvcmUgVm9sdGFnZQorI2RlZmluZQlWT0xUQUdFX0NPTlRST0xfSURfREFDCQkJCQkJCQkweDAyCQkJCQkJCQkJLy9JMkMgY29udHJvbCwgdXNlZCBmb3IgUjV4eC9SNnh4IE1WRERDLE1WRERRIG9yIFZERENJCisjZGVmaW5lCVZPTFRBR0VfQ09OVFJPTF9JRF9WVDExNnhNCQkJCQkJMHgwMwkJCQkJCQkJCS8vSTJDIGNvbnRyb2wsIHVzZWQgZm9yIFI2eHggQ29yZSBWb2x0YWdlCisjZGVmaW5lIFZPTFRBR0VfQ09OVFJPTF9JRF9EUzQ0MDIJCQkJCQkJMHgwNAkJCQkJCQkJCQogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9WT0xUQUdFX09CSkVDVCB7Ci0JVUNIQVIgdWNWb2x0YWdlVHlwZTsJLyogSW5kaWNhdGUgVm9sdGFnZSBTb3VyY2U6IFZEREMsIE1WRERDLCBNVkREUSBvciBNVkREQ0kgKi8KLQlVQ0hBUiB1Y1NpemU7CQkvKiBTaXplIG9mIE9iamVjdCAqLwotCUFUT01fVk9MVEFHRV9DT05UUk9MIGFzQ29udHJvbDsJLyogZGVzY3JpYiBob3cgdG8gY29udHJvbCAqLwotCUFUT01fVk9MVEFHRV9GT1JNVUxBIGFzRm9ybXVsYTsJLyogSW5kaWNhdGUgSG93IHRvIGNvbnZlcnQgcmVhbCBWb2x0YWdlIHRvIFZJRCAqLwotfSBBVE9NX1ZPTFRBR0VfT0JKRUNUOwordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX1ZPTFRBR0VfT0JKRUNUCit7CisgCSBVQ0hBUgkJdWNWb2x0YWdlVHlwZTsJCQkJCQkJCQkvL0luZGljYXRlIFZvbHRhZ2UgU291cmNlOiBWRERDLCBNVkREQywgTVZERFEgb3IgTVZERENJCSAKKwkgVUNIQVIJCXVjU2l6ZTsJCQkJCQkJCQkJCQkJLy9TaXplIG9mIE9iamVjdAkKKwkgQVRPTV9WT0xUQUdFX0NPTlRST0wJCQlhc0NvbnRyb2w7CQkJLy9kZXNjcmliIGhvdyB0byBjb250cm9sIAkgCisgCSBBVE9NX1ZPTFRBR0VfRk9STVVMQQkJCWFzRm9ybXVsYTsJCQkvL0luZGljYXRlIEhvdyB0byBjb252ZXJ0IHJlYWwgVm9sdGFnZSB0byBWSUQgCit9QVRPTV9WT0xUQUdFX09CSkVDVDsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fVk9MVEFHRV9PQkpFQ1RfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JQVRPTV9WT0xUQUdFX09CSkVDVCBhc1ZvbHRhZ2VPYmpbM107CS8qIEluZm8gZm9yIFZvbHRhZ2UgY29udHJvbCAqLwotfSBBVE9NX1ZPTFRBR0VfT0JKRUNUX0lORk87Cit0eXBlZGVmIHN0cnVjdCAgX0FUT01fVk9MVEFHRV9PQkpFQ1RfVjIKK3sKKyAJIFVDSEFSCQl1Y1ZvbHRhZ2VUeXBlOwkJCQkJCQkJCS8vSW5kaWNhdGUgVm9sdGFnZSBTb3VyY2U6IFZEREMsIE1WRERDLCBNVkREUSBvciBNVkREQ0kJIAorCSBVQ0hBUgkJdWNTaXplOwkJCQkJCQkJCQkJCQkvL1NpemUgb2YgT2JqZWN0CQorCSBBVE9NX1ZPTFRBR0VfQ09OVFJPTAkJCWFzQ29udHJvbDsJCQkvL2Rlc2NyaWIgaG93IHRvIGNvbnRyb2wgCSAKKyAJIEFUT01fVk9MVEFHRV9GT1JNVUxBX1YyCWFzRm9ybXVsYTsJCQkvL0luZGljYXRlIEhvdyB0byBjb252ZXJ0IHJlYWwgVm9sdGFnZSB0byBWSUQgCit9QVRPTV9WT0xUQUdFX09CSkVDVF9WMjsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTEVBS0lEX1ZPTFRBR0UgewotCVVDSEFSIHVjTGVha2FnZUlkOwotCVVDSEFSIHVjUmVzZXJ2ZWQ7Ci0JVVNIT1JUIHVzVm9sdGFnZTsKLX0gQVRPTV9MRUFLSURfVk9MVEFHRTsKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9WT0xUQUdFX09CSkVDVF9JTkZPCit7CisgICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIJc0hlYWRlcjsgCisJIEFUT01fVk9MVEFHRV9PQkpFQ1QJCQlhc1ZvbHRhZ2VPYmpbM107CS8vSW5mbyBmb3IgVm9sdGFnZSBjb250cm9sCSAgCSAKK31BVE9NX1ZPTFRBR0VfT0JKRUNUX0lORk87CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0FTSUNfUFJPRklMRV9WT0xUQUdFIHsKLQlVQ0hBUiB1Y1Byb2ZpbGVJZDsKLQlVQ0hBUiB1Y1Jlc2VydmVkOwotCVVTSE9SVCB1c1NpemU7Ci0JVVNIT1JUIHVzRWZ1c2VTcGFyZVN0YXJ0QWRkcjsKLQlVU0hPUlQgdXNGdXNlSW5kZXhbOF07CS8qIGZyb20gTFNCIHRvIE1TQiwgTWF4IDhiaXQsZW5kIG9mIDB4ZmZmZiBpZiBsZXNzIHRoYW4gOCBlZnVzZSBpZCwgKi8KLQlBVE9NX0xFQUtJRF9WT0xUQUdFIGFzTGVha1ZvbFsyXTsJLyogTGVha2lkIGFuZCByZWxhdGQgdm9sdGFnZSAqLwotfSBBVE9NX0FTSUNfUFJPRklMRV9WT0xUQUdFOwordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX1ZPTFRBR0VfT0JKRUNUX0lORk9fVjIKK3sKKyAgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUglzSGVhZGVyOyAKKwkgQVRPTV9WT0xUQUdFX09CSkVDVF9WMgkJCWFzVm9sdGFnZU9ialszXTsJLy9JbmZvIGZvciBWb2x0YWdlIGNvbnRyb2wJICAJIAorfUFUT01fVk9MVEFHRV9PQkpFQ1RfSU5GT19WMjsKIAotLyogdWNQcm9maWxlSWQgKi8KLSNkZWZpbmUJQVRPTV9BU0lDX1BST0ZJTEVfSURfRUZVU0VfVk9MVEFHRQkJCTEKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9MRUFLSURfVk9MVEFHRQoreworCVVDSEFSCQl1Y0xlYWthZ2VJZDsKKwlVQ0hBUgkJdWNSZXNlcnZlZDsKKwlVU0hPUlQJdXNWb2x0YWdlOworfUFUT01fTEVBS0lEX1ZPTFRBR0U7CisKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9BU0lDX1BST0ZJTEVfVk9MVEFHRQoreworCVVDSEFSCQl1Y1Byb2ZpbGVJZDsKKwlVQ0hBUgkJdWNSZXNlcnZlZDsKKwlVU0hPUlQJdXNTaXplOworCVVTSE9SVAl1c0VmdXNlU3BhcmVTdGFydEFkZHI7CisJVVNIT1JUCXVzRnVzZUluZGV4WzhdOwkJCQkJCQkJCQkJCS8vZnJvbSBMU0IgdG8gTVNCLCBNYXggOGJpdCxlbmQgb2YgMHhmZmZmIGlmIGxlc3MgdGhhbiA4IGVmdXNlIGlkLCAKKwlBVE9NX0xFQUtJRF9WT0xUQUdFCQkJCQlhc0xlYWtWb2xbMl07CQkJLy9MZWFraWQgYW5kIHJlbGF0ZCB2b2x0YWdlCit9QVRPTV9BU0lDX1BST0ZJTEVfVk9MVEFHRTsKKworLy91Y1Byb2ZpbGVJZAorI2RlZmluZQlBVE9NX0FTSUNfUFJPRklMRV9JRF9FRlVTRV9WT0xUQUdFCQkJMQkJCiAjZGVmaW5lCUFUT01fQVNJQ19QUk9GSUxFX0lEX0VGVVNFX1BFUkZPUk1BTkNFX1ZPTFRBR0UJCQkxCiAjZGVmaW5lCUFUT01fQVNJQ19QUk9GSUxFX0lEX0VGVVNFX1RIRVJNQUxfVk9MVEFHRQkJCQkJMgogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9BU0lDX1BST0ZJTElOR19JTkZPIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgYXNIZWFkZXI7Ci0JQVRPTV9BU0lDX1BST0ZJTEVfVk9MVEFHRSBhc1ZvbHRhZ2U7Ci19IEFUT01fQVNJQ19QUk9GSUxJTkdfSU5GTzsKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9BU0lDX1BST0ZJTElOR19JTkZPCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUgkJCWFzSGVhZGVyOyAKKwlBVE9NX0FTSUNfUFJPRklMRV9WT0xUQUdFCQkJYXNWb2x0YWdlOworfUFUT01fQVNJQ19QUk9GSUxJTkdfSU5GTzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fUE9XRVJfU09VUkNFX09CSkVDVCB7Ci0JVUNIQVIgdWNQd3JTcmNJZDsJLyogIFBvd2VyIHNvdXJjZSAqLwotCVVDSEFSIHVjUHdyU2Vuc29yVHlwZTsJLyogIEdQSU8sIEkyQyBvciBub25lICovCi0JVUNIQVIgdWNQd3JTZW5zSWQ7CS8qICBpZiBHUElPIGRldGVjdCwgaXQgaXMgR1BJTyBpZCwgIGlmIEkyQyBkZXRlY3QsIGl0IGlzIEkyQyBpZCAqLwotCVVDSEFSIHVjUHdyU2Vuc1NsYXZlQWRkcjsJLyogIFNsYXZlIGFkZHJlc3MgaWYgSTJDIGRldGVjdCAqLwotCVVDSEFSIHVjUHdyU2Vuc1JlZ0luZGV4OwkvKiAgSTJDIHJlZ2lzdGVyIEluZGV4IGlmIEkyQyBkZXRlY3QgKi8KLQlVQ0hBUiB1Y1B3clNlbnNSZWdCaXRNYXNrOwkvKiAgZGV0ZWN0IHdoaWNoIGJpdCBpcyB1c2VkIGlmIEkyQyBkZXRlY3QgKi8KLQlVQ0hBUiB1Y1B3clNlbnNBY3RpdmVTdGF0ZTsJLyogIGhpZ2ggYWN0aXZlIG9yIGxvdyBhY3RpdmUgKi8KLQlVQ0hBUiB1Y1Jlc2VydmVbM107CS8qICByZXNlcnZlICovCi0JVVNIT1JUIHVzU2Vuc1B3cjsJLyogIGluIHVuaXQgb2Ygd2F0dCAqLwotfSBBVE9NX1BPV0VSX1NPVVJDRV9PQkpFQ1Q7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9QT1dFUl9TT1VSQ0VfT0JKRUNUCit7CisJVUNIQVIJdWNQd3JTcmNJZDsJCQkJCQkJCQkJCQkJLy8gUG93ZXIgc291cmNlCisJVUNIQVIJdWNQd3JTZW5zb3JUeXBlOwkJCQkJCQkJCQkvLyBHUElPLCBJMkMgb3Igbm9uZQorCVVDSEFSCXVjUHdyU2Vuc0lkOwkJCQkJCQkJCQkJICAvLyBpZiBHUElPIGRldGVjdCwgaXQgaXMgR1BJTyBpZCwgIGlmIEkyQyBkZXRlY3QsIGl0IGlzIEkyQyBpZAorCVVDSEFSCXVjUHdyU2Vuc1NsYXZlQWRkcjsJCQkJCQkJCQkvLyBTbGF2ZSBhZGRyZXNzIGlmIEkyQyBkZXRlY3QKKwlVQ0hBUiB1Y1B3clNlbnNSZWdJbmRleDsJCQkJCQkJCQkvLyBJMkMgcmVnaXN0ZXIgSW5kZXggaWYgSTJDIGRldGVjdAorCVVDSEFSIHVjUHdyU2Vuc1JlZ0JpdE1hc2s7CQkJCQkJCQkvLyBkZXRlY3Qgd2hpY2ggYml0IGlzIHVzZWQgaWYgSTJDIGRldGVjdAorCVVDSEFSCXVjUHdyU2Vuc0FjdGl2ZVN0YXRlOwkJCQkJCQkJLy8gaGlnaCBhY3RpdmUgb3IgbG93IGFjdGl2ZQorCVVDSEFSCXVjUmVzZXJ2ZVszXTsJCQkJCQkJCQkJCQkvLyByZXNlcnZlCQkKKwlVU0hPUlQgdXNTZW5zUHdyOwkJCQkJCQkJCQkJCQkvLyBpbiB1bml0IG9mIHdhdHQKK31BVE9NX1BPV0VSX1NPVVJDRV9PQkpFQ1Q7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1BPV0VSX1NPVVJDRV9JTkZPIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgYXNIZWFkZXI7Ci0JVUNIQVIgYXNQd3JiZWhhdmVbMTZdOwotCUFUT01fUE9XRVJfU09VUkNFX09CSkVDVCBhc1B3ck9ialsxXTsKLX0gQVRPTV9QT1dFUl9TT1VSQ0VfSU5GTzsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1BPV0VSX1NPVVJDRV9JTkZPCit7CisJCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUgkJYXNIZWFkZXI7CisJCVVDSEFSCQkJCQkJCQkJCQkJYXNQd3JiZWhhdmVbMTZdOworCQlBVE9NX1BPV0VSX1NPVVJDRV9PQkpFQ1QJCWFzUHdyT2JqWzFdOworfUFUT01fUE9XRVJfU09VUkNFX0lORk87CiAKLS8qIERlZmluZSB1Y1B3clNyY0lkICovCisKKy8vRGVmaW5lIHVjUHdyU3JjSWQKICNkZWZpbmUgUE9XRVJTT1VSQ0VfUENJRV9JRDEJCQkJCQkweDAwCiAjZGVmaW5lIFBPV0VSU09VUkNFXzZQSU5fQ09OTkVDVE9SX0lEMQkweDAxCiAjZGVmaW5lIFBPV0VSU09VUkNFXzhQSU5fQ09OTkVDVE9SX0lEMQkweDAyCiAjZGVmaW5lIFBPV0VSU09VUkNFXzZQSU5fQ09OTkVDVE9SX0lEMgkweDA0CiAjZGVmaW5lIFBPV0VSU09VUkNFXzhQSU5fQ09OTkVDVE9SX0lEMgkweDA4CiAKLS8qIGRlZmluZSB1Y1B3clNlbnNvcklkICovCisvL2RlZmluZSB1Y1B3clNlbnNvcklkCiAjZGVmaW5lIFBPV0VSX1NFTlNPUl9BTFdBWVMJCQkJCQkJMHgwMAogI2RlZmluZSBQT1dFUl9TRU5TT1JfR1BJTwkJCQkJCQkJMHgwMQogI2RlZmluZSBQT1dFUl9TRU5TT1JfSTJDCQkJCQkJCQkweDAyCiAKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0lOVEVHUkFURURfU1lTVEVNX0lORk9fVjYKK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSICAgc0hlYWRlcjsKKyAgVUxPTkcgIHVsQm9vdFVwRW5naW5lQ2xvY2s7CisgIFVMT05HICB1bERlbnRpc3RWQ09GcmVxOyAgICAgICAgICAKKyAgVUxPTkcgIHVsQm9vdFVwVU1BQ2xvY2s7ICAgICAgICAgIAorICBVTE9ORyAgdWxSZXNlcnZlZDFbOF07ICAgICAgICAgICAgCisgIFVMT05HICB1bEJvb3RVcFJlcURpc3BsYXlWZWN0b3I7CisgIFVMT05HICB1bE90aGVyRGlzcGxheU1pc2M7CisgIFVMT05HICB1bEdQVUNhcEluZm87CisgIFVMT05HICB1bFJlc2VydmVkMlszXTsgICAgICAgICAgICAKKyAgVUxPTkcgIHVsU3lzdGVtQ29uZmlnOyAgICAgICAgICAgIAorICBVTE9ORyAgdWxDUFVDYXBJbmZvOyAgICAgICAgICAgICAgCisgIFVTSE9SVCB1c01heE5CVm9sdGFnZTsgIAorICBVU0hPUlQgdXNNaW5OQlZvbHRhZ2U7ICAKKyAgVVNIT1JUIHVzQm9vdFVwTkJWb2x0YWdlOyAgICAgICAgIAorICBVU0hPUlQgdXNFeHREaXNwQ29ubkluZm9PZmZzZXQ7ICAKKyAgVUNIQVIgIHVjSHRjVG1wTG10OyAgIAorICBVQ0hBUiAgdWNUak9mZnNldDsgICAgCisgIFVDSEFSICB1Y01lbW9yeVR5cGU7ICAKKyAgVUNIQVIgIHVjVU1BQ2hhbm5lbE51bWJlcjsKKyAgVUxPTkcgIHVsQ1NSX00zX0FSQl9DTlRMX0RFRkFVTFRbMTBdOyAgCisgIFVMT05HICB1bENTUl9NM19BUkJfQ05UTF9VVkRbMTBdOyAKKyAgVUxPTkcgIHVsQ1NSX00zX0FSQl9DTlRMX0ZTM0RbMTBdOworICBVTE9ORyAgdWxSZXNlcnZlZDNbNDJdOyAKKyAgQVRPTV9FWFRFUk5BTF9ESVNQTEFZX0NPTk5FQ1RJT05fSU5GTyBzRXh0RGlzcENvbm5JbmZvOyAgIAorfUFUT01fSU5URUdSQVRFRF9TWVNURU1fSU5GT19WNjsgICAKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIEFUT01fSU5URUdSQVRFRF9TWVNURU1fSU5GT19WNiBEZXNjcmlwdGlvbgorLy91bEJvb3RVcEVuZ2luZUNsb2NrOiAgICAgICAgICAgICAgVkJJT1MgYm9vdHVwIEVuZ2luZSBjbG9jayBmcmVxdWVuY3ksIGluIDEwa0h6IHVuaXQuIAorLy91bERlbnRpc3RWQ09GcmVxOiAgICAgICAgICAgICAgICAgRGVudGlzdCBWQ08gY2xvY2sgaW4gMTBrSHogdW5pdC4gCisvL3VsQm9vdFVwVU1BQ2xvY2s6ICAgICAgICAgICAgICAgICBTeXN0ZW0gbWVtb3J5IGJvb3QgdXAgY2xvY2sgZnJlcXVlbmN5IGluIDEwS2h6IHVuaXQuIAorLy91bFJlc2VydmVkMVs4XSAgICAgICAgICAgICAgICAgICAgUmVzZXJ2ZWQgYnkgbm93LCBtdXN0IGJlIDB4MC4gCisvL3VsQm9vdFVwUmVxRGlzcGxheVZlY3RvcgkgICAgICAgIFZCSU9TIGJvb3QgdXAgZGlzcGxheSBJRHMKKy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFUT01fREVWSUNFX0NSVDFfU1VQUE9SVCAgICAgICAgICAgICAgICAgIDB4MDAwMQorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRPTV9ERVZJQ0VfQ1JUMl9TVVBQT1JUICAgICAgICAgICAgICAgICAgMHgwMDEwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVE9NX0RFVklDRV9ERlAxX1NVUFBPUlQgICAgICAgICAgICAgICAgICAweDAwMDggCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVE9NX0RFVklDRV9ERlA2X1NVUFBPUlQgICAgICAgICAgICAgICAgICAweDAwNDAgCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVE9NX0RFVklDRV9ERlAyX1NVUFBPUlQgICAgICAgICAgICAgICAgICAweDAwODAgICAgICAgCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVE9NX0RFVklDRV9ERlAzX1NVUFBPUlQgICAgICAgICAgICAgICAgICAweDAyMDAgICAgICAgCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVE9NX0RFVklDRV9ERlA0X1NVUFBPUlQgICAgICAgICAgICAgICAgICAweDA0MDAgICAgICAgIAorLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRPTV9ERVZJQ0VfREZQNV9TVVBQT1JUICAgICAgICAgICAgICAgICAgMHgwODAwCisvLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVE9NX0RFVklDRV9MQ0QxX1NVUFBPUlQgICAgICAgICAgICAgICAgICAweDAwMDIKKy8vdWxPdGhlckRpc3BsYXlNaXNjICAgICAgCSAgICAgICAgT3RoZXIgZGlzcGxheSByZWxhdGVkIGZsYWdzLCBub3QgZGVmaW5lZCB5ZXQuIAorLy91bEdQVUNhcEluZm8gICAgICAgICAgICAgICAgICAgICAgVEJECisvL3VsUmVzZXJ2ZWQyWzNdICAgICAgICAgICAgICAgICAgICBtdXN0IGJlIDB4MCBmb3IgdGhlIHJlc2VydmVkLgorLy91bFN5c3RlbUNvbmZpZyAgICAgICAgICAgICAgICAgICAgVEJECisvL3VsQ1BVQ2FwSW5mbyAgICAgICAgICAgICAgICAgICAgICBUQkQKKy8vdXNNYXhOQlZvbHRhZ2UgICAgICAgICAgICAgICAgICAgIEhpZ2ggTkIgdm9sdGFnZSBpbiB1bml0IG9mIG12LCBjYWxjdWxhdGVkIHVzaW5nIGN1cnJlbnQgVkRETkIgKEQyNEYyeERDKSBhbmQgVkRETkIgb2Zmc2V0IGZ1c2UuIAorLy91c01pbk5CVm9sdGFnZSAgICAgICAgICAgICAgICAgICAgTG93IE5CIHZvbHRhZ2UgaW4gdW5pdCBvZiBtdiwgY2FsY3VsYXRlZCB1c2luZyBjdXJyZW50IFZERE5CIChEMjRGMnhEQykgYW5kIFZERE5CIG9mZnNldCBmdXNlLgorLy91c0Jvb3RVcE5CVm9sdGFnZSAgICAgICAgICAgICAgICAgQm9vdCB1cCBOQiB2b2x0YWdlIGluIHVuaXQgb2YgbXYuCisvL3VjSHRjVG1wTG10ICAgICAgICAgICAgICAgICAgICAgICBCaXQgWzIyOjE2XSBvZiBEMjRGM3g2NCBUaGVybWFsIENvbnRyb2wgKEhUQykgUmVnaXN0ZXIuCisvL3VjVGpPZmZzZXQgICAgICAgICAgICAgICAgICAgICAgICBCaXQgWzI4OjIyXSBvZiBEMjRGM3hFNCBUaGVybXRyaXAgU3RhdHVzIFJlZ2lzdGVyLG1heSBub3QgYmUgbmVlZGVkLgorLy91Y01lbW9yeVR5cGUgICAgICAgICAgICAgICAgICAgICAgWzM6MF09MTpERFIxOz0yOkREUjI7PTM6RERSMy5bNzo0XSBpcyByZXNlcnZlZC4KKy8vdWNVTUFDaGFubmVsTnVtYmVyICAgICAgCSAgICAgICAgU3lzdGVtIG1lbW9yeSBjaGFubmVsIG51bWJlcnMuIAorLy91c0V4dERpc3BDb25uZWN0aW9uSW5mb09mZnNldCAgICAgQVRPTV9FWFRFUk5BTF9ESVNQTEFZX0NPTk5FQ1RJT05fSU5GTyBvZmZzZXQgcmVsYXRpdmUgdG8gYmVnaW5uaW5nIG9mIHRoaXMgdGFibGUuIAorLy91bENTUl9NM19BUkJfQ05UTF9ERUZBVUxUWzEwXSAgICAgQXJyYXlzIHdpdGggdmFsdWVzIGZvciBDU1IgTTMgYXJiaXRlciBmb3IgZGVmYXVsdAorLy91bENTUl9NM19BUkJfQ05UTF9VVkRbMTBdICAgICAgICAgQXJyYXlzIHdpdGggdmFsdWVzIGZvciBDU1IgTTMgYXJiaXRlciBmb3IgVVZEIHBsYXliYWNrLgorLy91bENTUl9NM19BUkJfQ05UTF9GUzNEWzEwXSAgICAgICAgQXJyYXlzIHdpdGggdmFsdWVzIGZvciBDU1IgTTMgYXJiaXRlciBmb3IgRnVsbCBTY3JlZW4gM0QgYXBwbGljYXRpb25zLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogIFRoaXMgcG9ydGlvbiBpcyBvbmx5IHVzZWQgd2hlbiBleHQgdGhlcm1hbCBjaGlwIG9yIGVuZ2luZS9tZW1vcnkgY2xvY2sgU1MgY2hpcCBpcyBwb3B1bGF0ZWQgb24gYSBkZXNpZ24gKi8KLS8qIE1lbW9yeSBTUyBJbmZvIFRhYmxlICovCi0vKiBEZWZpbmUgTWVtb3J5IENsb2NrIFNTIGNoaXAgSUQgKi8KKy8vIFRoaXMgcG9ydGlvbiBpcyBvbmx5IHVzZWQgd2hlbiBleHQgdGhlcm1hbCBjaGlwIG9yIGVuZ2luZS9tZW1vcnkgY2xvY2sgU1MgY2hpcCBpcyBwb3B1bGF0ZWQgb24gYSBkZXNpZ24KKy8vTWVtb3J5IFNTIEluZm8gVGFibGUKKy8vRGVmaW5lIE1lbW9yeSBDbG9jayBTUyBjaGlwIElECiAjZGVmaW5lIElDUzkxNzE5ICAxCiAjZGVmaW5lIElDUzkxNzIwICAyCiAKLS8qIERlZmluZSBvbmUgc3RydWN0dXJlIHRvIGluZm9ybSBTVyBhICJibG9jayBvZiBkYXRhIiB3cml0aW5nIHRvIGV4dGVybmFsIFNTIGNoaXAgdmlhIEkyQyBwcm90b2NvbCAqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fSTJDX0RBVEFfUkVDT1JEIHsKLQlVQ0hBUiB1Y051bmJlck9mQnl0ZXM7CS8qIEluZGljYXRlcyBob3cgbWFueSBieXRlcyBTVyBuZWVkcyB0byB3cml0ZSB0byB0aGUgZXh0ZXJuYWwgQVNJQyBmb3Igb25lIGJsb2NrLCBiZXNpZGVzIHRvICJTdGFydCIgYW5kICJTdG9wIiAqLwotCVVDSEFSIHVjSTJDRGF0YVsxXTsJLyogSTJDIGRhdGEgaW4gYnl0ZXMsIHNob3VsZCBiZSBsZXNzIHRoYW4gMTYgYnl0ZXMgdXN1YWxseSAqLwotfSBBVE9NX0kyQ19EQVRBX1JFQ09SRDsKKy8vRGVmaW5lIG9uZSBzdHJ1Y3R1cmUgdG8gaW5mb3JtIFNXIGEgImJsb2NrIG9mIGRhdGEiIHdyaXRpbmcgdG8gZXh0ZXJuYWwgU1MgY2hpcCB2aWEgSTJDIHByb3RvY29sCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9JMkNfREFUQV9SRUNPUkQKK3sKKyAgVUNIQVIgICAgICAgICB1Y051bmJlck9mQnl0ZXM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vSW5kaWNhdGVzIGhvdyBtYW55IGJ5dGVzIFNXIG5lZWRzIHRvIHdyaXRlIHRvIHRoZSBleHRlcm5hbCBBU0lDIGZvciBvbmUgYmxvY2ssIGJlc2lkZXMgdG8gIlN0YXJ0IiBhbmQgIlN0b3AiCisgIFVDSEFSICAgICAgICAgdWNJMkNEYXRhWzFdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0kyQyBkYXRhIGluIGJ5dGVzLCBzaG91bGQgYmUgbGVzcyB0aGFuIDE2IGJ5dGVzIHVzdWFsbHkKK31BVE9NX0kyQ19EQVRBX1JFQ09SRDsKIAotLyogRGVmaW5lIG9uZSBzdHJ1Y3R1cmUgdG8gaW5mb3JtIFNXIGhvdyBtYW55IGJsb2NrcyBvZiBkYXRhIHdyaXRpbmcgdG8gZXh0ZXJuYWwgU1MgY2hpcCB2aWEgSTJDIHByb3RvY29sLCBpbiBhZGRpdGlvbiB0byBvdGhlciBpbmZvcm1hdGlvbiAqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fSTJDX0RFVklDRV9TRVRVUF9JTkZPIHsKLQlBVE9NX0kyQ19JRF9DT05GSUdfQUNDRVNTIHN1Y0kyY0lkOwkvKiBJMkMgbGluZSBhbmQgSFcvU1cgYXNzaXN0ZWQgY2FwLiAqLwotCVVDSEFSIHVjU1NDaGlwSUQ7CS8qIFNTIGNoaXAgYmVpbmcgdXNlZCAqLwotCVVDSEFSIHVjU1NDaGlwU2xhdmVBZGRyOwkvKiBTbGF2ZSBBZGRyZXNzIHRvIHNldCB1cCB0aGlzIFNTIGNoaXAgKi8KLQlVQ0hBUiB1Y051bU9mSTJDRGF0YVJlY29yZHM7CS8qIG51bWJlciBvZiBkYXRhIGJsb2NrICovCi0JQVRPTV9JMkNfREFUQV9SRUNPUkQgYXNJMkNEYXRhWzFdOwotfSBBVE9NX0kyQ19ERVZJQ0VfU0VUVVBfSU5GTzsKIAotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9BU0lDX01WRERfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JQVRPTV9JMkNfREVWSUNFX1NFVFVQX0lORk8gYXNJMkNTZXR1cFsxXTsKLX0gQVRPTV9BU0lDX01WRERfSU5GTzsKKy8vRGVmaW5lIG9uZSBzdHJ1Y3R1cmUgdG8gaW5mb3JtIFNXIGhvdyBtYW55IGJsb2NrcyBvZiBkYXRhIHdyaXRpbmcgdG8gZXh0ZXJuYWwgU1MgY2hpcCB2aWEgSTJDIHByb3RvY29sLCBpbiBhZGRpdGlvbiB0byBvdGhlciBpbmZvcm1hdGlvbgordHlwZWRlZiBzdHJ1Y3QgX0FUT01fSTJDX0RFVklDRV9TRVRVUF9JTkZPCit7CisgIEFUT01fSTJDX0lEX0NPTkZJR19BQ0NFU1MgICAgICAgc3VjSTJjSWQ7ICAgICAgICAgICAgICAgLy9JMkMgbGluZSBhbmQgSFcvU1cgYXNzaXN0ZWQgY2FwLgorICBVQ0hBUgkJICAgICAgICAgICAgICAgICAgICAgICAgdWNTU0NoaXBJRDsgICAgICAgICAgICAgLy9TUyBjaGlwIGJlaW5nIHVzZWQKKyAgVUNIQVIJCSAgICAgICAgICAgICAgICAgICAgICAgIHVjU1NDaGlwU2xhdmVBZGRyOyAgICAgIC8vU2xhdmUgQWRkcmVzcyB0byBzZXQgdXAgdGhpcyBTUyBjaGlwCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgICAgICAgdWNOdW1PZkkyQ0RhdGFSZWNvcmRzOyAgLy9udW1iZXIgb2YgZGF0YSBibG9jaworICBBVE9NX0kyQ19EQVRBX1JFQ09SRCAgICAgICAgICAgIGFzSTJDRGF0YVsxXTsgIAorfUFUT01fSTJDX0RFVklDRV9TRVRVUF9JTkZPOwogCi0vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit0eXBlZGVmIHN0cnVjdCAgX0FUT01fQVNJQ19NVkREX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSCSAgICAgIHNIZWFkZXI7IAorICBBVE9NX0kyQ19ERVZJQ0VfU0VUVVBfSU5GTyAgICAgIGFzSTJDU2V0dXBbMV07Cit9QVRPTV9BU0lDX01WRERfSU5GTzsKKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICNkZWZpbmUgQVRPTV9NQ0xLX1NTX0lORk8gICAgICAgICBBVE9NX0FTSUNfTVZERF9JTkZPCiAKLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fQVNJQ19TU19BU1NJR05NRU5UIHsKLQlVTE9ORyB1bFRhcmdldENsb2NrUmFuZ2U7CS8qIENsb2NrIE91dCBmcmVxdWVuY2UgKFZDTyApLCBpbiB1bml0IG9mIDEwS2h6ICovCi0JVVNIT1JUIHVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlOwkvKiBpbiB1bml0IG9mIDAuMDElICovCi0JVVNIT1JUIHVzU3ByZWFkUmF0ZUluS2h6OwkvKiBpbiB1bml0IG9mIGtIeiwgbW9kdWxhdGlvbiBmcmVxICovCi0JVUNIQVIgdWNDbG9ja0luZGljYXRpb247CS8qIEluZGljYXRlIHdoaWNoIGNsb2NrIHNvdXJjZSBuZWVkcyBTUyAqLwotCVVDSEFSIHVjU3ByZWFkU3BlY3RydW1Nb2RlOwkvKiBCaXQxPTAgRG93biBTcHJlYWQsPTEgQ2VudGVyIFNwcmVhZC4gKi8KLQlVQ0hBUiB1Y1Jlc2VydmVkWzJdOwotfSBBVE9NX0FTSUNfU1NfQVNTSUdOTUVOVDsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0FTSUNfU1NfQVNTSUdOTUVOVAoreworCVVMT05HCQkJCQkJCQl1bFRhcmdldENsb2NrUmFuZ2U7CQkJCQkJLy9DbG9jayBPdXQgZnJlcXVlbmNlIChWQ08gKSwgaW4gdW5pdCBvZiAxMEtoegorICBVU0hPUlQgICAgICAgICAgICAgIHVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlOwkJLy9pbiB1bml0IG9mIDAuMDElCisJVVNIT1JUCQkJCQkJCXVzU3ByZWFkUmF0ZUluS2h6OwkJCQkJCS8vaW4gdW5pdCBvZiBrSHosIG1vZHVsYXRpb24gZnJlcQorICBVQ0hBUiAgICAgICAgICAgICAgIHVjQ2xvY2tJbmRpY2F0aW9uOwkJCQkJICAvL0luZGljYXRlIHdoaWNoIGNsb2NrIHNvdXJjZSBuZWVkcyBTUworCVVDSEFSCQkJCQkJCQl1Y1NwcmVhZFNwZWN0cnVtTW9kZTsJCQkJCS8vQml0MT0wIERvd24gU3ByZWFkLD0xIENlbnRlciBTcHJlYWQuCisJVUNIQVIJCQkJCQkJCXVjUmVzZXJ2ZWRbMl07Cit9QVRPTV9BU0lDX1NTX0FTU0lHTk1FTlQ7CiAKLS8qIERlZmluZSB1Y1NwcmVhZFNwZWN0cnVtVHlwZSAqLworLy9EZWZpbmUgdWNDbG9ja0luZGljYXRpb24sIFNXIHVzZXMgdGhlIElEcyBiZWxvdyB0byBzZWFyY2ggaWYgdGhlIFNTIGlzIHJlcXVyaWVkL2VuYWJsZWQgb24gYSBjbG9jayBicmFuY2gvc2lnbmFsIHR5cGUuCisvL1NTIGlzIG5vdCByZXF1aXJlZCBvciBlbmFibGVkIGlmIGEgbWF0Y2ggaXMgbm90IGZvdW5kLgogI2RlZmluZSBBU0lDX0lOVEVSTkFMX01FTU9SWV9TUwkJCTEKICNkZWZpbmUgQVNJQ19JTlRFUk5BTF9FTkdJTkVfU1MJCQkyCi0jZGVmaW5lIEFTSUNfSU5URVJOQUxfVVZEX1NTCQkJCTMKKyNkZWZpbmUgQVNJQ19JTlRFUk5BTF9VVkRfU1MgICAgICAgIDMKKyNkZWZpbmUgQVNJQ19JTlRFUk5BTF9TU19PTl9UTURTICAgIDQKKyNkZWZpbmUgQVNJQ19JTlRFUk5BTF9TU19PTl9IRE1JICAgIDUKKyNkZWZpbmUgQVNJQ19JTlRFUk5BTF9TU19PTl9MVkRTICAgIDYKKyNkZWZpbmUgQVNJQ19JTlRFUk5BTF9TU19PTl9EUCAgICAgIDcKKyNkZWZpbmUgQVNJQ19JTlRFUk5BTF9TU19PTl9EQ1BMTCAgIDgKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fQVNJQ19JTlRFUk5BTF9TU19JTkZPIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlBVE9NX0FTSUNfU1NfQVNTSUdOTUVOVCBhc1NwcmVhZFNwZWN0cnVtWzRdOwotfSBBVE9NX0FTSUNfSU5URVJOQUxfU1NfSU5GTzsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0FTSUNfU1NfQVNTSUdOTUVOVF9WMgoreworCVVMT05HCQkJCQkJCQl1bFRhcmdldENsb2NrUmFuZ2U7CQkJCQkJLy9Gb3IgbWVtL2VuZ2luZS91dmQsIENsb2NrIE91dCBmcmVxdWVuY2UgKFZDTyApLCBpbiB1bml0IG9mIDEwS2h6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9Gb3IgVE1EUy9IRE1JL0xWRFMsIGl0IGlzIHBpeGVsIGNsb2NrICwgZm9yIERQLCBpdCBpcyBsaW5rIGNsb2NrICggMjcwMDAgb3IgMTYyMDAgKQorICBVU0hPUlQgICAgICAgICAgICAgIHVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlOwkJLy9pbiB1bml0IG9mIDAuMDElCisJVVNIT1JUCQkJCQkJCXVzU3ByZWFkUmF0ZUluMTBIejsJCQkJCQkvL2luIHVuaXQgb2YgMTBIeiwgbW9kdWxhdGlvbiBmcmVxCisgIFVDSEFSICAgICAgICAgICAgICAgdWNDbG9ja0luZGljYXRpb247CQkJCQkgIC8vSW5kaWNhdGUgd2hpY2ggY2xvY2sgc291cmNlIG5lZWRzIFNTCisJVUNIQVIJCQkJCQkJCXVjU3ByZWFkU3BlY3RydW1Nb2RlOwkJCQkJLy9CaXQwPTAgRG93biBTcHJlYWQsPTEgQ2VudGVyIFNwcmVhZCwgYml0MT0wOiBpbnRlcm5hbCBTUyBiaXQxPTE6IGV4dGVybmFsIFNTCisJVUNIQVIJCQkJCQkJCXVjUmVzZXJ2ZWRbMl07Cit9QVRPTV9BU0lDX1NTX0FTU0lHTk1FTlRfVjI7CiAKLS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVNjcmF0Y2ggUGFkIERlZmluaXRpb24gUG9ydGlvbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8vdWNTcHJlYWRTcGVjdHJ1bU1vZGUKKy8vI2RlZmluZSBBVE9NX1NTX0RPV05fU1BSRUFEX01PREVfTUFTSyAgICAgICAgICAweDAwMDAwMDAwCisvLyNkZWZpbmUgQVRPTV9TU19ET1dOX1NQUkVBRF9NT0RFICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorLy8jZGVmaW5lIEFUT01fU1NfQ0VOVFJFX1NQUkVBRF9NT0RFX01BU0sgICAgICAgIDB4MDAwMDAwMDEKKy8vI2RlZmluZSBBVE9NX1NTX0NFTlRSRV9TUFJFQURfTU9ERSAgICAgICAgICAgICAweDAwMDAwMDAxCisvLyNkZWZpbmUgQVRPTV9JTlRFUk5BTF9TU19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorLy8jZGVmaW5lIEFUT01fRVhURVJOQUxfU1NfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fQVNJQ19JTlRFUk5BTF9TU19JTkZPCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUgkgICAgICBzSGVhZGVyOyAKKyAgQVRPTV9BU0lDX1NTX0FTU0lHTk1FTlQJCSAgICAgIGFzU3ByZWFkU3BlY3RydW1bNF07Cit9QVRPTV9BU0lDX0lOVEVSTkFMX1NTX0lORk87CisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0FTSUNfSU5URVJOQUxfU1NfSU5GT19WMgoreworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIJICAgICAgc0hlYWRlcjsgCisgIEFUT01fQVNJQ19TU19BU1NJR05NRU5UX1YyCQkgIGFzU3ByZWFkU3BlY3RydW1bMV07ICAgICAgLy90aGlzIGlzIHBvaW50IG9ubHkuIAorfUFUT01fQVNJQ19JTlRFUk5BTF9TU19JTkZPX1YyOworCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9BU0lDX1NTX0FTU0lHTk1FTlRfVjMKK3sKKwlVTE9ORwkJCQkJCQkJdWxUYXJnZXRDbG9ja1JhbmdlOwkJCQkJCS8vRm9yIG1lbS9lbmdpbmUvdXZkLCBDbG9jayBPdXQgZnJlcXVlbmNlIChWQ08gKSwgaW4gdW5pdCBvZiAxMEtoegorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vRm9yIFRNRFMvSERNSS9MVkRTLCBpdCBpcyBwaXhlbCBjbG9jayAsIGZvciBEUCwgaXQgaXMgbGluayBjbG9jayAoIDI3MDAwIG9yIDE2MjAwICkKKyAgVVNIT1JUICAgICAgICAgICAgICB1c1NwcmVhZFNwZWN0cnVtUGVyY2VudGFnZTsJCS8vaW4gdW5pdCBvZiAwLjAxJQorCVVTSE9SVAkJCQkJCQl1c1NwcmVhZFJhdGVJbjEwSHo7CQkJCQkJLy9pbiB1bml0IG9mIDEwSHosIG1vZHVsYXRpb24gZnJlcQorICBVQ0hBUiAgICAgICAgICAgICAgIHVjQ2xvY2tJbmRpY2F0aW9uOwkJCQkJICAvL0luZGljYXRlIHdoaWNoIGNsb2NrIHNvdXJjZSBuZWVkcyBTUworCVVDSEFSCQkJCQkJCQl1Y1NwcmVhZFNwZWN0cnVtTW9kZTsJCQkJCS8vQml0MD0wIERvd24gU3ByZWFkLD0xIENlbnRlciBTcHJlYWQsIGJpdDE9MDogaW50ZXJuYWwgU1MgYml0MT0xOiBleHRlcm5hbCBTUworCVVDSEFSCQkJCQkJCQl1Y1Jlc2VydmVkWzJdOworfUFUT01fQVNJQ19TU19BU1NJR05NRU5UX1YzOworCit0eXBlZGVmIHN0cnVjdCBfQVRPTV9BU0lDX0lOVEVSTkFMX1NTX0lORk9fVjMKK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSCSAgICAgIHNIZWFkZXI7IAorICBBVE9NX0FTSUNfU1NfQVNTSUdOTUVOVF9WMwkJICBhc1NwcmVhZFNwZWN0cnVtWzFdOyAgICAgIC8vdGhpcyBpcyBwb2ludGVyIG9ubHkuIAorfUFUT01fQVNJQ19JTlRFUk5BTF9TU19JTkZPX1YzOworCisKKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09U2NyYXRjaCBQYWQgRGVmaW5pdGlvbiBQb3J0aW9uPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogI2RlZmluZSBBVE9NX0RFVklDRV9DT05ORUNUX0lORk9fREVGICAwCiAjZGVmaW5lIEFUT01fUk9NX0xPQ0FUSU9OX0RFRiAgICAgICAgIDEKICNkZWZpbmUgQVRPTV9UVl9TVEFOREFSRF9ERUYgICAgICAgICAgMgpAQCAtMjk5NSw3ICszODUyLDggQEAKICNkZWZpbmUgQVRPTV9JMkNfQ0hBTk5FTF9TVEFUVVNfREVGICAgOAogI2RlZmluZSBBVE9NX0kyQ19DSEFOTkVMX1NUQVRVUzFfREVGICA5CiAKLS8qICBCSU9TXzBfU0NSQVRDSCBEZWZpbml0aW9uICovCisKKy8vIEJJT1NfMF9TQ1JBVENIIERlZmluaXRpb24gCiAjZGVmaW5lIEFUT01fUzBfQ1JUMV9NT05PICAgICAgICAgICAgICAgMHgwMDAwMDAwMUwKICNkZWZpbmUgQVRPTV9TMF9DUlQxX0NPTE9SICAgICAgICAgICAgICAweDAwMDAwMDAyTAogI2RlZmluZSBBVE9NX1MwX0NSVDFfTUFTSyAgICAgICAgICAgICAgIChBVE9NX1MwX0NSVDFfTU9OTytBVE9NX1MwX0NSVDFfQ09MT1IpCkBAIC0zMDA4LDYgKzM4NjYsNyBAQAogI2RlZmluZSBBVE9NX1MwX0NWX0RJTl9BICAgICAgICAgICAgICAgIDB4MDAwMDAwMjBMCiAjZGVmaW5lIEFUT01fUzBfQ1ZfTUFTS19BICAgICAgICAgICAgICAgKEFUT01fUzBfQ1ZfQStBVE9NX1MwX0NWX0RJTl9BKQogCisKICNkZWZpbmUgQVRPTV9TMF9DUlQyX01PTk8gICAgICAgICAgICAgICAweDAwMDAwMTAwTAogI2RlZmluZSBBVE9NX1MwX0NSVDJfQ09MT1IgICAgICAgICAgICAgIDB4MDAwMDAyMDBMCiAjZGVmaW5lIEFUT01fUzBfQ1JUMl9NQVNLICAgICAgICAgICAgICAgKEFUT01fUzBfQ1JUMl9NT05PK0FUT01fUzBfQ1JUMl9DT0xPUikKQEAgLTMwMjUsMjggKzM4ODQsMjcgQEAKICNkZWZpbmUgQVRPTV9TMF9ERlAyICAgICAgICAgICAgICAgICAgICAweDAwMDIwMDAwTAogI2RlZmluZSBBVE9NX1MwX0xDRDEgICAgICAgICAgICAgICAgICAgIDB4MDAwNDAwMDBMCiAjZGVmaW5lIEFUT01fUzBfTENEMiAgICAgICAgICAgICAgICAgICAgMHgwMDA4MDAwMEwKLSNkZWZpbmUgQVRPTV9TMF9UVjIgICAgICAgICAgICAgICAgICAgICAweDAwMTAwMDAwTAotI2RlZmluZSBBVE9NX1MwX0RGUDMJCQkweDAwMjAwMDAwTAotI2RlZmluZSBBVE9NX1MwX0RGUDQJCQkweDAwNDAwMDAwTAotI2RlZmluZSBBVE9NX1MwX0RGUDUJCQkweDAwODAwMDAwTAorI2RlZmluZSBBVE9NX1MwX0RGUDYgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBMCisjZGVmaW5lIEFUT01fUzBfREZQMyAgICAgICAgICAgICAgICAgICAgMHgwMDIwMDAwMEwKKyNkZWZpbmUgQVRPTV9TMF9ERlA0ICAgICAgICAgICAgICAgICAgICAweDAwNDAwMDAwTAorI2RlZmluZSBBVE9NX1MwX0RGUDUgICAgICAgICAgICAgICAgICAgIDB4MDA4MDAwMDBMCiAKLSNkZWZpbmUgQVRPTV9TMF9ERlBfTUFTSyBcCi0JKEFUT01fUzBfREZQMSB8IEFUT01fUzBfREZQMiB8IEFUT01fUzBfREZQMyB8IEFUT01fUzBfREZQNCB8IEFUT01fUzBfREZQNSkKKyNkZWZpbmUgQVRPTV9TMF9ERlBfTUFTSyAgICAgICAgICAgICAgICBBVE9NX1MwX0RGUDEgfCBBVE9NX1MwX0RGUDIgfCBBVE9NX1MwX0RGUDMgfCBBVE9NX1MwX0RGUDQgfCBBVE9NX1MwX0RGUDUgfCBBVE9NX1MwX0RGUDYKIAotI2RlZmluZSBBVE9NX1MwX0ZBRF9SRUdJU1RFUl9CVUcgICAgICAgIDB4MDIwMDAwMDBMCS8qICBJZiBzZXQsIGluZGljYXRlcyB3ZSBhcmUgcnVubmluZyBhIFBDSUUgYXNpYyB3aXRoICovCi0JCQkJCQkgICAgLyogIHRoZSBGQUQvSERQIHJlZyBhY2Nlc3MgYnVnLiAgQml0IGlzIHJlYWQgYnkgREFMICovCisjZGVmaW5lIEFUT01fUzBfRkFEX1JFR0lTVEVSX0JVRyAgICAgICAgMHgwMjAwMDAwMEwgLy8gSWYgc2V0LCBpbmRpY2F0ZXMgd2UgYXJlIHJ1bm5pbmcgYSBQQ0lFIGFzaWMgd2l0aCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgRkFEL0hEUCByZWcgYWNjZXNzIGJ1Zy4gIEJpdCBpcyByZWFkIGJ5IERBTCwgdGhpcyBpcyBvYnNvbGV0ZSBmcm9tIFJWNXh4CiAKICNkZWZpbmUgQVRPTV9TMF9USEVSTUFMX1NUQVRFX01BU0sgICAgICAweDFDMDAwMDAwTAogI2RlZmluZSBBVE9NX1MwX1RIRVJNQUxfU1RBVEVfU0hJRlQgICAgIDI2CiAKICNkZWZpbmUgQVRPTV9TMF9TWVNURU1fUE9XRVJfU1RBVEVfTUFTSyAweEUwMDAwMDAwTAotI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9TSElGVCAyOQorI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9TSElGVCAyOSAKIAogI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9WQUxVRV9BQyAgICAgMQogI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9WQUxVRV9EQyAgICAgMgogI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9WQUxVRV9MSVRFQUMgMwogCi0vKiBCeXRlIGFsaWduZWQgZGVmaW5pdGlvbiBmb3IgQklPUyB1c2FnZSAqLworLy9CeXRlIGFsaWduZWQgZGVmaW50aW9uIGZvciBCSU9TIHVzYWdlCiAjZGVmaW5lIEFUT01fUzBfQ1JUMV9NT05PYjAgICAgICAgICAgICAgMHgwMQogI2RlZmluZSBBVE9NX1MwX0NSVDFfQ09MT1JiMCAgICAgICAgICAgIDB4MDIKICNkZWZpbmUgQVRPTV9TMF9DUlQxX01BU0tiMCAgICAgICAgICAgICAoQVRPTV9TMF9DUlQxX01PTk9iMCtBVE9NX1MwX0NSVDFfQ09MT1JiMCkKQEAgLTMwNzYsOCArMzkzNCwxMSBAQAogI2RlZmluZSBBVE9NX1MwX0RGUDJiMiAgICAgICAgICAgICAgICAgIDB4MDIKICNkZWZpbmUgQVRPTV9TMF9MQ0QxYjIgICAgICAgICAgICAgICAgICAweDA0CiAjZGVmaW5lIEFUT01fUzBfTENEMmIyICAgICAgICAgICAgICAgICAgMHgwOAotI2RlZmluZSBBVE9NX1MwX1RWMmIyICAgICAgICAgICAgICAgICAgIDB4MTAKLSNkZWZpbmUgQVRPTV9TMF9ERlAzYjIJCQkJCQkJCQkweDIwCisjZGVmaW5lIEFUT01fUzBfREZQNmIyICAgICAgICAgICAgICAgICAgMHgxMAorI2RlZmluZSBBVE9NX1MwX0RGUDNiMiAgICAgICAgICAgICAgICAgIDB4MjAKKyNkZWZpbmUgQVRPTV9TMF9ERlA0YjIgICAgICAgICAgICAgICAgICAweDQwCisjZGVmaW5lIEFUT01fUzBfREZQNWIyICAgICAgICAgICAgICAgICAgMHg4MAorCiAKICNkZWZpbmUgQVRPTV9TMF9USEVSTUFMX1NUQVRFX01BU0tiMyAgICAweDFDCiAjZGVmaW5lIEFUT01fUzBfVEhFUk1BTF9TVEFURV9TSElGVGIzICAgMgpAQCAtMzA4NSw0MyArMzk0NiwyMCBAQAogI2RlZmluZSBBVE9NX1MwX1NZU1RFTV9QT1dFUl9TVEFURV9NQVNLYjMgMHhFMAogI2RlZmluZSBBVE9NX1MwX0xDRDFfU0hJRlQgICAgICAgICAgICAgIDE4CiAKLS8qICBCSU9TXzFfU0NSQVRDSCBEZWZpbml0aW9uICovCisvLyBCSU9TXzFfU0NSQVRDSCBEZWZpbml0aW9uCiAjZGVmaW5lIEFUT01fUzFfUk9NX0xPQ0FUSU9OX01BU0sgICAgICAgMHgwMDAwRkZGRkwKICNkZWZpbmUgQVRPTV9TMV9QQ0lfQlVTX0RFVl9NQVNLICAgICAgICAweEZGRkYwMDAwTAogCi0vKiAgICAgICBCSU9TXzJfU0NSQVRDSCBEZWZpbml0aW9uICovCisvLwlCSU9TXzJfU0NSQVRDSCBEZWZpbml0aW9uCiAjZGVmaW5lIEFUT01fUzJfVFYxX1NUQU5EQVJEX01BU0sgICAgICAgMHgwMDAwMDAwRkwKICNkZWZpbmUgQVRPTV9TMl9DVVJSRU5UX0JMX0xFVkVMX01BU0sgICAweDAwMDBGRjAwTAogI2RlZmluZSBBVE9NX1MyX0NVUlJFTlRfQkxfTEVWRUxfU0hJRlQgIDgKIAotI2RlZmluZSBBVE9NX1MyX0NSVDFfRFBNU19TVEFURSAgICAgICAgIDB4MDAwMTAwMDBMCi0jZGVmaW5lIEFUT01fUzJfTENEMV9EUE1TX1NUQVRFCSAgICAgICAgMHgwMDAyMDAwMEwKLSNkZWZpbmUgQVRPTV9TMl9UVjFfRFBNU19TVEFURSAgICAgICAgICAweDAwMDQwMDAwTAotI2RlZmluZSBBVE9NX1MyX0RGUDFfRFBNU19TVEFURSAgICAgICAgIDB4MDAwODAwMDBMCi0jZGVmaW5lIEFUT01fUzJfQ1JUMl9EUE1TX1NUQVRFICAgICAgICAgMHgwMDEwMDAwMEwKLSNkZWZpbmUgQVRPTV9TMl9MQ0QyX0RQTVNfU1RBVEUgICAgICAgICAweDAwMjAwMDAwTAotI2RlZmluZSBBVE9NX1MyX1RWMl9EUE1TX1NUQVRFICAgICAgICAgIDB4MDA0MDAwMDBMCi0jZGVmaW5lIEFUT01fUzJfREZQMl9EUE1TX1NUQVRFICAgICAgICAgMHgwMDgwMDAwMEwKLSNkZWZpbmUgQVRPTV9TMl9DVl9EUE1TX1NUQVRFICAgICAgICAgICAweDAxMDAwMDAwTAotI2RlZmluZSBBVE9NX1MyX0RGUDNfRFBNU19TVEFURQkJCQkJMHgwMjAwMDAwMEwKLSNkZWZpbmUgQVRPTV9TMl9ERlA0X0RQTVNfU1RBVEUJCQkJCTB4MDQwMDAwMDBMCi0jZGVmaW5lIEFUT01fUzJfREZQNV9EUE1TX1NUQVRFCQkJCQkweDA4MDAwMDAwTAotCi0jZGVmaW5lIEFUT01fUzJfREZQX0RQTV9TVEFURSBcCi0JKEFUT01fUzJfREZQMV9EUE1TX1NUQVRFIHwgQVRPTV9TMl9ERlAyX0RQTVNfU1RBVEUgfCBcCi0JIEFUT01fUzJfREZQM19EUE1TX1NUQVRFIHwgQVRPTV9TMl9ERlA0X0RQTVNfU1RBVEUgfCBcCi0JIEFUT01fUzJfREZQNV9EUE1TX1NUQVRFKQotCi0jZGVmaW5lIEFUT01fUzJfREVWSUNFX0RQTVNfU1RBVEUgXAotCShBVE9NX1MyX0NSVDFfRFBNU19TVEFURSArIEFUT01fUzJfTENEMV9EUE1TX1NUQVRFICsgXAotCSBBVE9NX1MyX1RWMV9EUE1TX1NUQVRFICsgQVRPTV9TMl9ERlBfRFBNU19TVEFURSArIFwKLQkgQVRPTV9TMl9DUlQyX0RQTVNfU1RBVEUgKyBBVE9NX1MyX0xDRDJfRFBNU19TVEFURSArIFwKLQkgQVRPTV9TMl9UVjJfRFBNU19TVEFURSArIEFUT01fUzJfQ1ZfRFBNU19TVEFURSkKLQogI2RlZmluZSBBVE9NX1MyX0ZPUkNFRExPV1BXUk1PREVfU1RBVEVfTUFTSyAgICAgICAweDBDMDAwMDAwTAogI2RlZmluZSBBVE9NX1MyX0ZPUkNFRExPV1BXUk1PREVfU1RBVEVfTUFTS19TSElGVCAyNgogI2RlZmluZSBBVE9NX1MyX0ZPUkNFRExPV1BXUk1PREVfU1RBVEVfQ0hBTkdFICAgICAweDEwMDAwMDAwTAogCisjZGVmaW5lIEFUT01fUzJfREVWSUNFX0RQTVNfU1RBVEUgICAgICAgMHgwMDAxMDAwMEwKICNkZWZpbmUgQVRPTV9TMl9WUklfQlJJR0hUX0VOQUJMRSAgICAgICAweDIwMDAwMDAwTAogCiAjZGVmaW5lIEFUT01fUzJfRElTUExBWV9ST1RBVElPTl8wX0RFR1JFRSAgICAgMHgwCkBAIC0zMTMxLDIxICszOTY5LDExIEBACiAjZGVmaW5lIEFUT01fUzJfRElTUExBWV9ST1RBVElPTl9ERUdSRUVfU0hJRlQgMzAKICNkZWZpbmUgQVRPTV9TMl9ESVNQTEFZX1JPVEFUSU9OX0FOR0xFX01BU0sgICAweEMwMDAwMDAwTAogCi0vKiBCeXRlIGFsaWduZWQgZGVmaW5pdGlvbiBmb3IgQklPUyB1c2FnZSAqLworCisvL0J5dGUgYWxpZ25lZCBkZWZpbnRpb24gZm9yIEJJT1MgdXNhZ2UKICNkZWZpbmUgQVRPTV9TMl9UVjFfU1RBTkRBUkRfTUFTS2IwICAgICAweDBGCiAjZGVmaW5lIEFUT01fUzJfQ1VSUkVOVF9CTF9MRVZFTF9NQVNLYjEgMHhGRgotI2RlZmluZSBBVE9NX1MyX0NSVDFfRFBNU19TVEFURWIyICAgICAgIDB4MDEKLSNkZWZpbmUgQVRPTV9TMl9MQ0QxX0RQTVNfU1RBVEViMiAgICAgICAweDAyCi0jZGVmaW5lIEFUT01fUzJfVFYxX0RQTVNfU1RBVEViMiAgICAgICAgMHgwNAotI2RlZmluZSBBVE9NX1MyX0RGUDFfRFBNU19TVEFURWIyICAgICAgIDB4MDgKLSNkZWZpbmUgQVRPTV9TMl9DUlQyX0RQTVNfU1RBVEViMiAgICAgICAweDEwCi0jZGVmaW5lIEFUT01fUzJfTENEMl9EUE1TX1NUQVRFYjIgICAgICAgMHgyMAotI2RlZmluZSBBVE9NX1MyX1RWMl9EUE1TX1NUQVRFYjIgICAgICAgIDB4NDAKLSNkZWZpbmUgQVRPTV9TMl9ERlAyX0RQTVNfU1RBVEViMiAgICAgICAweDgwCi0jZGVmaW5lIEFUT01fUzJfQ1ZfRFBNU19TVEFURWIzICAgICAgICAgMHgwMQotI2RlZmluZSBBVE9NX1MyX0RGUDNfRFBNU19TVEFURWIzCQkJCTB4MDIKLSNkZWZpbmUgQVRPTV9TMl9ERlA0X0RQTVNfU1RBVEViMwkJCQkweDA0Ci0jZGVmaW5lIEFUT01fUzJfREZQNV9EUE1TX1NUQVRFYjMJCQkJMHgwOAorI2RlZmluZSBBVE9NX1MyX0RFVklDRV9EUE1TX1NUQVRFYjIgICAgIDB4MDEKIAogI2RlZmluZSBBVE9NX1MyX0RFVklDRV9EUE1TX01BU0t3MSAgICAgIDB4M0ZGCiAjZGVmaW5lIEFUT01fUzJfRk9SQ0VETE9XUFdSTU9ERV9TVEFURV9NQVNLYjMgICAgIDB4MEMKQEAgLTMxNTMsMjEgKzM5ODEsMjIgQEAKICNkZWZpbmUgQVRPTV9TMl9WUklfQlJJR0hUX0VOQUJMRWIzICAgICAweDIwCiAjZGVmaW5lIEFUT01fUzJfUk9UQVRJT05fU1RBVEVfTUFTS2IzICAgMHhDMAogCi0vKiAgQklPU18zX1NDUkFUQ0ggRGVmaW5pdGlvbiAqLworCisvLyBCSU9TXzNfU0NSQVRDSCBEZWZpbml0aW9uCiAjZGVmaW5lIEFUT01fUzNfQ1JUMV9BQ1RJVkUgICAgICAgICAgICAgMHgwMDAwMDAwMUwKICNkZWZpbmUgQVRPTV9TM19MQ0QxX0FDVElWRSAgICAgICAgICAgICAweDAwMDAwMDAyTAogI2RlZmluZSBBVE9NX1MzX1RWMV9BQ1RJVkUgICAgICAgICAgICAgIDB4MDAwMDAwMDRMCiAjZGVmaW5lIEFUT01fUzNfREZQMV9BQ1RJVkUgICAgICAgICAgICAgMHgwMDAwMDAwOEwKICNkZWZpbmUgQVRPTV9TM19DUlQyX0FDVElWRSAgICAgICAgICAgICAweDAwMDAwMDEwTAogI2RlZmluZSBBVE9NX1MzX0xDRDJfQUNUSVZFICAgICAgICAgICAgIDB4MDAwMDAwMjBMCi0jZGVmaW5lIEFUT01fUzNfVFYyX0FDVElWRSAgICAgICAgICAgICAgMHgwMDAwMDA0MEwKKyNkZWZpbmUgQVRPTV9TM19ERlA2X0FDVElWRSAgICAgICAgICAgICAweDAwMDAwMDQwTAogI2RlZmluZSBBVE9NX1MzX0RGUDJfQUNUSVZFICAgICAgICAgICAgIDB4MDAwMDAwODBMCiAjZGVmaW5lIEFUT01fUzNfQ1ZfQUNUSVZFICAgICAgICAgICAgICAgMHgwMDAwMDEwMEwKICNkZWZpbmUgQVRPTV9TM19ERlAzX0FDVElWRQkJCQkJCQkweDAwMDAwMjAwTAogI2RlZmluZSBBVE9NX1MzX0RGUDRfQUNUSVZFCQkJCQkJCTB4MDAwMDA0MDBMCiAjZGVmaW5lIEFUT01fUzNfREZQNV9BQ1RJVkUJCQkJCQkJMHgwMDAwMDgwMEwKIAotI2RlZmluZSBBVE9NX1MzX0RFVklDRV9BQ1RJVkVfTUFTSyAgICAgIDB4MDAwMDAzRkZMCisjZGVmaW5lIEFUT01fUzNfREVWSUNFX0FDVElWRV9NQVNLICAgICAgMHgwMDAwMEZGRkwKIAogI2RlZmluZSBBVE9NX1MzX0xDRF9GVUxMRVhQQU5TSU9OX0FDVElWRSAgICAgICAgIDB4MDAwMDEwMDBMCiAjZGVmaW5lIEFUT01fUzNfTENEX0VYUEFOU0lPTl9BU1BFQ19SQVRJT19BQ1RJVkUgMHgwMDAwMjAwMEwKQEAgLTMxNzgsNyArNDAwNyw3IEBACiAjZGVmaW5lIEFUT01fUzNfREZQMV9DUlRDX0FDVElWRSAgICAgICAgMHgwMDA4MDAwMEwKICNkZWZpbmUgQVRPTV9TM19DUlQyX0NSVENfQUNUSVZFICAgICAgICAweDAwMTAwMDAwTAogI2RlZmluZSBBVE9NX1MzX0xDRDJfQ1JUQ19BQ1RJVkUgICAgICAgIDB4MDAyMDAwMDBMCi0jZGVmaW5lIEFUT01fUzNfVFYyX0NSVENfQUNUSVZFICAgICAgICAgMHgwMDQwMDAwMEwKKyNkZWZpbmUgQVRPTV9TM19ERlA2X0NSVENfQUNUSVZFICAgICAgICAweDAwNDAwMDAwTAogI2RlZmluZSBBVE9NX1MzX0RGUDJfQ1JUQ19BQ1RJVkUgICAgICAgIDB4MDA4MDAwMDBMCiAjZGVmaW5lIEFUT01fUzNfQ1ZfQ1JUQ19BQ1RJVkUgICAgICAgICAgMHgwMTAwMDAwMEwKICNkZWZpbmUgQVRPTV9TM19ERlAzX0NSVENfQUNUSVZFCQkJCTB4MDIwMDAwMDBMCkBAIC0zMTg3LDE3ICs0MDE2LDE4IEBACiAKICNkZWZpbmUgQVRPTV9TM19ERVZJQ0VfQ1JUQ19BQ1RJVkVfTUFTSyAweDBGRkYwMDAwTAogI2RlZmluZSBBVE9NX1MzX0FTSUNfR1VJX0VOR0lORV9IVU5HICAgIDB4MjAwMDAwMDBMCisvL0JlbG93IHR3byBkZWZpbml0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCBpbiBwcGxpYiwgYnV0IGluIHRoZSBvbGQgcG93ZXJwbGF5IGluIERBTAogI2RlZmluZSBBVE9NX1MzX0FMTE9XX0ZBU1RfUFdSX1NXSVRDSCAgIDB4NDAwMDAwMDBMCiAjZGVmaW5lIEFUT01fUzNfUlFTVF9HUFVfVVNFX01JTl9QV1IgICAgMHg4MDAwMDAwMEwKIAotLyogQnl0ZSBhbGlnbmVkIGRlZmluaXRpb24gZm9yIEJJT1MgdXNhZ2UgKi8KKy8vQnl0ZSBhbGlnbmVkIGRlZmludGlvbiBmb3IgQklPUyB1c2FnZQogI2RlZmluZSBBVE9NX1MzX0NSVDFfQUNUSVZFYjAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgQVRPTV9TM19MQ0QxX0FDVElWRWIwICAgICAgICAgICAweDAyCiAjZGVmaW5lIEFUT01fUzNfVFYxX0FDVElWRWIwICAgICAgICAgICAgMHgwNAogI2RlZmluZSBBVE9NX1MzX0RGUDFfQUNUSVZFYjAgICAgICAgICAgIDB4MDgKICNkZWZpbmUgQVRPTV9TM19DUlQyX0FDVElWRWIwICAgICAgICAgICAweDEwCiAjZGVmaW5lIEFUT01fUzNfTENEMl9BQ1RJVkViMCAgICAgICAgICAgMHgyMAotI2RlZmluZSBBVE9NX1MzX1RWMl9BQ1RJVkViMCAgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgQVRPTV9TM19ERlA2X0FDVElWRWIwICAgICAgICAgICAweDQwCiAjZGVmaW5lIEFUT01fUzNfREZQMl9BQ1RJVkViMCAgICAgICAgICAgMHg4MAogI2RlZmluZSBBVE9NX1MzX0NWX0FDVElWRWIxICAgICAgICAgICAgIDB4MDEKICNkZWZpbmUgQVRPTV9TM19ERlAzX0FDVElWRWIxCQkJCQkJMHgwMgpAQCAtMzIxMiw3ICs0MDQyLDcgQEAKICNkZWZpbmUgQVRPTV9TM19ERlAxX0NSVENfQUNUSVZFYjIgICAgICAweDA4CiAjZGVmaW5lIEFUT01fUzNfQ1JUMl9DUlRDX0FDVElWRWIyICAgICAgMHgxMAogI2RlZmluZSBBVE9NX1MzX0xDRDJfQ1JUQ19BQ1RJVkViMiAgICAgIDB4MjAKLSNkZWZpbmUgQVRPTV9TM19UVjJfQ1JUQ19BQ1RJVkViMiAgICAgICAweDQwCisjZGVmaW5lIEFUT01fUzNfREZQNl9DUlRDX0FDVElWRWIyICAgICAgMHg0MAogI2RlZmluZSBBVE9NX1MzX0RGUDJfQ1JUQ19BQ1RJVkViMiAgICAgIDB4ODAKICNkZWZpbmUgQVRPTV9TM19DVl9DUlRDX0FDVElWRWIzICAgICAgICAweDAxCiAjZGVmaW5lIEFUT01fUzNfREZQM19DUlRDX0FDVElWRWIzCQkJMHgwMgpAQCAtMzIyMSwzNSArNDA1MSwzMSBAQAogCiAjZGVmaW5lIEFUT01fUzNfQUNUSVZFX0NSVEMydzEgICAgICAgICAgMHhGRkYKIAotI2RlZmluZSBBVE9NX1MzX0FTSUNfR1VJX0VOR0lORV9IVU5HYjMJMHgyMAotI2RlZmluZSBBVE9NX1MzX0FMTE9XX0ZBU1RfUFdSX1NXSVRDSGIzIDB4NDAKLSNkZWZpbmUgQVRPTV9TM19SUVNUX0dQVV9VU0VfTUlOX1BXUmIzICAweDgwCi0KLS8qICBCSU9TXzRfU0NSQVRDSCBEZWZpbml0aW9uICovCisvLyBCSU9TXzRfU0NSQVRDSCBEZWZpbml0aW9uCiAjZGVmaW5lIEFUT01fUzRfTENEMV9QQU5FTF9JRF9NQVNLICAgICAgMHgwMDAwMDBGRkwKICNkZWZpbmUgQVRPTV9TNF9MQ0QxX1JFRlJFU0hfTUFTSyAgICAgICAweDAwMDBGRjAwTAogI2RlZmluZSBBVE9NX1M0X0xDRDFfUkVGUkVTSF9TSElGVCAgICAgIDgKIAotLyogQnl0ZSBhbGlnbmVkIGRlZmluaXRpb24gZm9yIEJJT1MgdXNhZ2UgKi8KKy8vQnl0ZSBhbGlnbmVkIGRlZmludGlvbiBmb3IgQklPUyB1c2FnZQogI2RlZmluZSBBVE9NX1M0X0xDRDFfUEFORUxfSURfTUFTS2IwCSAgMHgwRkYKICNkZWZpbmUgQVRPTV9TNF9MQ0QxX1JFRlJFU0hfTUFTS2IxCQkgIEFUT01fUzRfTENEMV9QQU5FTF9JRF9NQVNLYjAKICNkZWZpbmUgQVRPTV9TNF9WUkFNX0lORk9fTUFTS2IyICAgICAgICBBVE9NX1M0X0xDRDFfUEFORUxfSURfTUFTS2IwCiAKLS8qICBCSU9TXzVfU0NSQVRDSCBEZWZpbml0aW9uLCBCSU9TXzVfU0NSQVRDSCBpcyB1c2VkIGJ5IEZpcm13YXJlIG9ubHkgISEhISAqLworLy8gQklPU181X1NDUkFUQ0ggRGVmaW5pdGlvbiwgQklPU181X1NDUkFUQ0ggaXMgdXNlZCBieSBGaXJtd2FyZSBvbmx5ICEhISEKICNkZWZpbmUgQVRPTV9TNV9ET1NfUkVRX0NSVDFiMCAgICAgICAgICAweDAxCiAjZGVmaW5lIEFUT01fUzVfRE9TX1JFUV9MQ0QxYjAgICAgICAgICAgMHgwMgogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfVFYxYjAgICAgICAgICAgIDB4MDQKICNkZWZpbmUgQVRPTV9TNV9ET1NfUkVRX0RGUDFiMCAgICAgICAgICAweDA4CiAjZGVmaW5lIEFUT01fUzVfRE9TX1JFUV9DUlQyYjAgICAgICAgICAgMHgxMAogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfTENEMmIwICAgICAgICAgIDB4MjAKLSNkZWZpbmUgQVRPTV9TNV9ET1NfUkVRX1RWMmIwICAgICAgICAgICAweDQwCisjZGVmaW5lIEFUT01fUzVfRE9TX1JFUV9ERlA2YjAgICAgICAgICAgMHg0MAogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQMmIwICAgICAgICAgIDB4ODAKICNkZWZpbmUgQVRPTV9TNV9ET1NfUkVRX0NWYjEgICAgICAgICAgICAweDAxCiAjZGVmaW5lIEFUT01fUzVfRE9TX1JFUV9ERlAzYjEJCQkJCTB4MDIKICNkZWZpbmUgQVRPTV9TNV9ET1NfUkVRX0RGUDRiMQkJCQkJMHgwNAogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQNWIxCQkJCQkweDA4CiAKLSNkZWZpbmUgQVRPTV9TNV9ET1NfUkVRX0RFVklDRXcwICAgICAgICAweDAzRkYKKyNkZWZpbmUgQVRPTV9TNV9ET1NfUkVRX0RFVklDRXcwICAgICAgICAweDBGRkYKIAogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfQ1JUMSAgICAgICAgICAgIDB4MDAwMQogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfTENEMSAgICAgICAgICAgIDB4MDAwMgpAQCAtMzI1NywyMiArNDA4MywyMSBAQAogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQMSAgICAgICAgICAgIDB4MDAwOAogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfQ1JUMiAgICAgICAgICAgIDB4MDAxMAogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfTENEMiAgICAgICAgICAgIDB4MDAyMAotI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfVFYyICAgICAgICAgICAgIDB4MDA0MAorI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQNiAgICAgICAgICAgIDB4MDA0MAogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQMiAgICAgICAgICAgIDB4MDA4MAogI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfQ1YgICAgICAgICAgICAgIDB4MDEwMAotI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQMwkJCQkJCTB4MDIwMAotI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQNAkJCQkJCTB4MDQwMAotI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQNQkJCQkJCTB4MDgwMAorI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQMyAgICAgICAgICAgIDB4MDIwMAorI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQNCAgICAgICAgICAgIDB4MDQwMAorI2RlZmluZSBBVE9NX1M1X0RPU19SRVFfREZQNSAgICAgICAgICAgIDB4MDgwMAogCiAjZGVmaW5lIEFUT01fUzVfRE9TX0ZPUkNFX0NSVDFiMiAgICAgICAgQVRPTV9TNV9ET1NfUkVRX0NSVDFiMAogI2RlZmluZSBBVE9NX1M1X0RPU19GT1JDRV9UVjFiMiAgICAgICAgIEFUT01fUzVfRE9TX1JFUV9UVjFiMAogI2RlZmluZSBBVE9NX1M1X0RPU19GT1JDRV9DUlQyYjIgICAgICAgIEFUT01fUzVfRE9TX1JFUV9DUlQyYjAKICNkZWZpbmUgQVRPTV9TNV9ET1NfRk9SQ0VfQ1ZiMyAgICAgICAgICBBVE9NX1M1X0RPU19SRVFfQ1ZiMQotI2RlZmluZSBBVE9NX1M1X0RPU19GT1JDRV9ERVZJQ0V3MSBcCi0JKEFUT01fUzVfRE9TX0ZPUkNFX0NSVDFiMiArIEFUT01fUzVfRE9TX0ZPUkNFX1RWMWIyICsgXAotCSBBVE9NX1M1X0RPU19GT1JDRV9DUlQyYjIgKyAoQVRPTV9TNV9ET1NfRk9SQ0VfQ1ZiMyA8PCA4KSkKKyNkZWZpbmUgQVRPTV9TNV9ET1NfRk9SQ0VfREVWSUNFdzEgICAgICAoQVRPTV9TNV9ET1NfRk9SQ0VfQ1JUMWIyK0FUT01fUzVfRE9TX0ZPUkNFX1RWMWIyK0FUT01fUzVfRE9TX0ZPUkNFX0NSVDJiMitcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFUT01fUzVfRE9TX0ZPUkNFX0NWYjM8PDgpKQogCi0vKiAgQklPU182X1NDUkFUQ0ggRGVmaW5pdGlvbiAqLworLy8gQklPU182X1NDUkFUQ0ggRGVmaW5pdGlvbgogI2RlZmluZSBBVE9NX1M2X0RFVklDRV9DSEFOR0UgICAgICAgICAgIDB4MDAwMDAwMDFMCiAjZGVmaW5lIEFUT01fUzZfU0NBTEVSX0NIQU5HRSAgICAgICAgICAgMHgwMDAwMDAwMkwKICNkZWZpbmUgQVRPTV9TNl9MSURfQ0hBTkdFICAgICAgICAgICAgICAweDAwMDAwMDA0TApAQCAtMzI4NSwxMSArNDExMCwxMSBAQAogI2RlZmluZSBBVE9NX1M2X0hXX0kyQ19CVVNZX1NUQVRFICAgICAgIDB4MDAwMDAyMDBMCiAjZGVmaW5lIEFUT01fUzZfVEhFUk1BTF9TVEFURV9DSEFOR0UgICAgMHgwMDAwMDQwMEwKICNkZWZpbmUgQVRPTV9TNl9JTlRFUlJVUFRfU0VUX0JZX0JJT1MgICAweDAwMDAwODAwTAotI2RlZmluZSBBVE9NX1M2X1JFUV9MQ0RfRVhQQU5TSU9OX0ZVTEwgICAgICAgICAweDAwMDAxMDAwTAkvKiBOb3JtYWwgZXhwYW5zaW9uIFJlcXVlc3QgYml0IGZvciBMQ0QgKi8KLSNkZWZpbmUgQVRPTV9TNl9SRVFfTENEX0VYUEFOU0lPTl9BU1BFQ19SQVRJTyAgMHgwMDAwMjAwMEwJLyogQXNwZWN0IHJhdGlvIGV4cGFuc2lvbiBSZXF1ZXN0IGJpdCBmb3IgTENEICovCisjZGVmaW5lIEFUT01fUzZfUkVRX0xDRF9FWFBBTlNJT05fRlVMTCAgICAgICAgIDB4MDAwMDEwMDBMIC8vTm9ybWFsIGV4cGFuc2lvbiBSZXF1ZXN0IGJpdCBmb3IgTENECisjZGVmaW5lIEFUT01fUzZfUkVRX0xDRF9FWFBBTlNJT05fQVNQRUNfUkFUSU8gIDB4MDAwMDIwMDBMIC8vQXNwZWN0IHJhdGlvIGV4cGFuc2lvbiBSZXF1ZXN0IGJpdCBmb3IgTENECiAKLSNkZWZpbmUgQVRPTV9TNl9ESVNQTEFZX1NUQVRFX0NIQU5HRSAgICAweDAwMDA0MDAwTAkvKiBUaGlzIGJpdCBpcyByZWN5Y2xlZCB3aGVuIEFUT01fQklPU19JTkZPX0JJT1NfU0NSQVRDSDZfU0NMMl9SRURFRklORSBpcyBzZXQscHJldmlvdXNseSBpdCdzIFNDTDJfSF9leHBhbnNpb24gKi8KLSNkZWZpbmUgQVRPTV9TNl9JMkNfU1RBVEVfQ0hBTkdFICAgICAgICAweDAwMDA4MDAwTAkvKiBUaGlzIGJpdCBpcyByZWN5Y2xlZCx3aGVuIEFUT01fQklPU19JTkZPX0JJT1NfU0NSQVRDSDZfU0NMMl9SRURFRklORSBpcyBzZXQscHJldmlvdXNseSBpdCdzIFNDTDJfVl9leHBhbnNpb24gKi8KKyNkZWZpbmUgQVRPTV9TNl9ESVNQTEFZX1NUQVRFX0NIQU5HRSAgICAweDAwMDA0MDAwTCAgICAgICAgLy9UaGlzIGJpdCBpcyByZWN5Y2xlZCB3aGVuIEFUT01fQklPU19JTkZPX0JJT1NfU0NSQVRDSDZfU0NMMl9SRURFRklORSBpcyBzZXQscHJldmlvdXNseSBpdCdzIFNDTDJfSF9leHBhbnNpb24KKyNkZWZpbmUgQVRPTV9TNl9JMkNfU1RBVEVfQ0hBTkdFICAgICAgICAweDAwMDA4MDAwTCAgICAgICAgLy9UaGlzIGJpdCBpcyByZWN5Y2xlZCx3aGVuIEFUT01fQklPU19JTkZPX0JJT1NfU0NSQVRDSDZfU0NMMl9SRURFRklORSBpcyBzZXQscHJldmlvdXNseSBpdCdzIFNDTDJfVl9leHBhbnNpb24KIAogI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfQ1JUMSAgICAgICAgICAgIDB4MDAwMTAwMDBMCiAjZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9MQ0QxICAgICAgICAgICAgMHgwMDAyMDAwMEwKQEAgLTMyOTcsNyArNDEyMiw3IEBACiAjZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9ERlAxICAgICAgICAgICAgMHgwMDA4MDAwMEwKICNkZWZpbmUgQVRPTV9TNl9BQ0NfUkVRX0NSVDIgICAgICAgICAgICAweDAwMTAwMDAwTAogI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfTENEMiAgICAgICAgICAgIDB4MDAyMDAwMDBMCi0jZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9UVjIgICAgICAgICAgICAgMHgwMDQwMDAwMEwKKyNkZWZpbmUgQVRPTV9TNl9BQ0NfUkVRX0RGUDYgICAgICAgICAgICAweDAwNDAwMDAwTAogI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfREZQMiAgICAgICAgICAgIDB4MDA4MDAwMDBMCiAjZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9DViAgICAgICAgICAgICAgMHgwMTAwMDAwMEwKICNkZWZpbmUgQVRPTV9TNl9BQ0NfUkVRX0RGUDMJCQkJCQkweDAyMDAwMDAwTApAQCAtMzMxMCw3ICs0MTM1LDcgQEAKICNkZWZpbmUgQVRPTV9TNl9WUklfQlJJR0hUTkVTU19DSEFOR0UgICAgICAgMHg0MDAwMDAwMEwKICNkZWZpbmUgQVRPTV9TNl9DT05GSUdfRElTUExBWV9DSEFOR0VfTUFTSyAgMHg4MDAwMDAwMEwKIAotLyogQnl0ZSBhbGlnbmVkIGRlZmluaXRpb24gZm9yIEJJT1MgdXNhZ2UgKi8KKy8vQnl0ZSBhbGlnbmVkIGRlZmludGlvbiBmb3IgQklPUyB1c2FnZQogI2RlZmluZSBBVE9NX1M2X0RFVklDRV9DSEFOR0ViMCAgICAgICAgIDB4MDEKICNkZWZpbmUgQVRPTV9TNl9TQ0FMRVJfQ0hBTkdFYjAgICAgICAgICAweDAyCiAjZGVmaW5lIEFUT01fUzZfTElEX0NIQU5HRWIwICAgICAgICAgICAgMHgwNApAQCAtMzMyMCwxMSArNDE0NSwxMSBAQAogI2RlZmluZSBBVE9NX1M2X0xJRF9TVEFURWIwICAgICAgICAgICAgIDB4NDAKICNkZWZpbmUgQVRPTV9TNl9ET0NLX1NUQVRFYjAgICAgICAgICAgICAweDgwCiAjZGVmaW5lIEFUT01fUzZfQ1JJVElDQUxfU1RBVEViMSAgICAgICAgMHgwMQotI2RlZmluZSBBVE9NX1M2X0hXX0kyQ19CVVNZX1NUQVRFYjEgICAgIDB4MDIKKyNkZWZpbmUgQVRPTV9TNl9IV19JMkNfQlVTWV9TVEFURWIxICAgICAweDAyICAKICNkZWZpbmUgQVRPTV9TNl9USEVSTUFMX1NUQVRFX0NIQU5HRWIxICAweDA0CiAjZGVmaW5lIEFUT01fUzZfSU5URVJSVVBUX1NFVF9CWV9CSU9TYjEgMHgwOAotI2RlZmluZSBBVE9NX1M2X1JFUV9MQ0RfRVhQQU5TSU9OX0ZVTExiMSAgICAgICAgMHgxMAotI2RlZmluZSBBVE9NX1M2X1JFUV9MQ0RfRVhQQU5TSU9OX0FTUEVDX1JBVElPYjEgMHgyMAorI2RlZmluZSBBVE9NX1M2X1JFUV9MQ0RfRVhQQU5TSU9OX0ZVTExiMSAgICAgICAgMHgxMCAgICAKKyNkZWZpbmUgQVRPTV9TNl9SRVFfTENEX0VYUEFOU0lPTl9BU1BFQ19SQVRJT2IxIDB4MjAgCiAKICNkZWZpbmUgQVRPTV9TNl9BQ0NfUkVRX0NSVDFiMiAgICAgICAgICAweDAxCiAjZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9MQ0QxYjIgICAgICAgICAgMHgwMgpAQCAtMzMzMiwxMiArNDE1NywxMiBAQAogI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfREZQMWIyICAgICAgICAgIDB4MDgKICNkZWZpbmUgQVRPTV9TNl9BQ0NfUkVRX0NSVDJiMiAgICAgICAgICAweDEwCiAjZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9MQ0QyYjIgICAgICAgICAgMHgyMAotI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfVFYyYjIgICAgICAgICAgIDB4NDAKKyNkZWZpbmUgQVRPTV9TNl9BQ0NfUkVRX0RGUDZiMiAgICAgICAgICAweDQwCiAjZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9ERlAyYjIgICAgICAgICAgMHg4MAogI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfQ1ZiMyAgICAgICAgICAgIDB4MDEKLSNkZWZpbmUgQVRPTV9TNl9BQ0NfUkVRX0RGUDNiMwkJCQkJMHgwMgotI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfREZQNGIzCQkJCQkweDA0Ci0jZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9ERlA1YjMJCQkJCTB4MDgKKyNkZWZpbmUgQVRPTV9TNl9BQ0NfUkVRX0RGUDNiMyAgICAgICAgICAweDAyCisjZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9ERlA0YjMgICAgICAgICAgMHgwNAorI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfREZQNWIzICAgICAgICAgIDB4MDgKIAogI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfREVWSUNFdzEgICAgICAgIEFUT01fUzVfRE9TX1JFUV9ERVZJQ0V3MAogI2RlZmluZSBBVE9NX1M2X1NZU1RFTV9QT1dFUl9NT0RFX0NIQU5HRWIzIDB4MTAKQEAgLTMzNjYsNyArNDE5MSw3IEBACiAjZGVmaW5lIEFUT01fUzZfVlJJX0JSSUdIVE5FU1NfQ0hBTkdFX1NISUZUICAgICAzMAogI2RlZmluZSBBVE9NX1M2X0NPTkZJR19ESVNQTEFZX0NIQU5HRV9TSElGVCAgICAgMzEKIAotLyogIEJJT1NfN19TQ1JBVENIIERlZmluaXRpb24sIEJJT1NfN19TQ1JBVENIIGlzIHVzZWQgYnkgRmlybXdhcmUgb25seSAhISEhICovCisvLyBCSU9TXzdfU0NSQVRDSCBEZWZpbml0aW9uLCBCSU9TXzdfU0NSQVRDSCBpcyB1c2VkIGJ5IEZpcm13YXJlIG9ubHkgISEhIQogI2RlZmluZSBBVE9NX1M3X0RPU19NT0RFX1RZUEViMCAgICAgICAgICAgICAweDAzCiAjZGVmaW5lIEFUT01fUzdfRE9TX01PREVfVkdBYjAgICAgICAgICAgICAgIDB4MDAKICNkZWZpbmUgQVRPTV9TN19ET1NfTU9ERV9WRVNBYjAgICAgICAgICAgICAgMHgwMQpAQCAtMzM3OCwyMjAgKzQyMDMsMTk0IEBACiAKICNkZWZpbmUgQVRPTV9TN19ET1NfOEJJVF9EQUNfRU5fU0hJRlQgICAgICAgOAogCi0vKiAgQklPU184X1NDUkFUQ0ggRGVmaW5pdGlvbiAqLworLy8gQklPU184X1NDUkFUQ0ggRGVmaW5pdGlvbgogI2RlZmluZSBBVE9NX1M4X0kyQ19DSEFOTkVMX0JVU1lfTUFTSyAgICAgICAweDAwMDAwRkZGRgotI2RlZmluZSBBVE9NX1M4X0kyQ19IV19FTkdJTkVfQlVTWV9NQVNLICAgICAweDBGRkZGMDAwMAorI2RlZmluZSBBVE9NX1M4X0kyQ19IV19FTkdJTkVfQlVTWV9NQVNLICAgICAweDBGRkZGMDAwMCAgIAogCiAjZGVmaW5lIEFUT01fUzhfSTJDX0NIQU5ORUxfQlVTWV9TSElGVCAgICAgIDAKICNkZWZpbmUgQVRPTV9TOF9JMkNfRU5HSU5FX0JVU1lfU0hJRlQgICAgICAgMTYKIAotLyogIEJJT1NfOV9TQ1JBVENIIERlZmluaXRpb24gKi8KLSNpZm5kZWYgQVRPTV9TOV9JMkNfQ0hBTk5FTF9DT01QTEVURURfTUFTSworLy8gQklPU185X1NDUkFUQ0ggRGVmaW5pdGlvbgorI2lmbmRlZiBBVE9NX1M5X0kyQ19DSEFOTkVMX0NPTVBMRVRFRF9NQVNLIAogI2RlZmluZSBBVE9NX1M5X0kyQ19DSEFOTkVMX0NPTVBMRVRFRF9NQVNLICAweDAwMDBGRkZGCiAjZW5kaWYKLSNpZm5kZWYgQVRPTV9TOV9JMkNfQ0hBTk5FTF9BQk9SVEVEX01BU0sKKyNpZm5kZWYgQVRPTV9TOV9JMkNfQ0hBTk5FTF9BQk9SVEVEX01BU0sgIAogI2RlZmluZSBBVE9NX1M5X0kyQ19DSEFOTkVMX0FCT1JURURfTUFTSyAgICAweEZGRkYwMDAwCiAjZW5kaWYKLSNpZm5kZWYgQVRPTV9TOV9JMkNfQ0hBTk5FTF9DT01QTEVURURfU0hJRlQKKyNpZm5kZWYgQVRPTV9TOV9JMkNfQ0hBTk5FTF9DT01QTEVURURfU0hJRlQgCiAjZGVmaW5lIEFUT01fUzlfSTJDX0NIQU5ORUxfQ09NUExFVEVEX1NISUZUIDAKICNlbmRpZgotI2lmbmRlZiBBVE9NX1M5X0kyQ19DSEFOTkVMX0FCT1JURURfU0hJRlQKKyNpZm5kZWYgQVRPTV9TOV9JMkNfQ0hBTk5FTF9BQk9SVEVEX1NISUZUICAgCiAjZGVmaW5lIEFUT01fUzlfSTJDX0NIQU5ORUxfQUJPUlRFRF9TSElGVCAgIDE2CiAjZW5kaWYKIAorIAogI2RlZmluZSBBVE9NX0ZMQUdfU0VUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAKICNkZWZpbmUgQVRPTV9GTEFHX0NMRUFSICAgICAgICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIENMRUFSX0FUT01fUzZfQUNDX01PREUgXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M2X0FDQ19NT0RFX1NISUZUIHwgQVRPTV9GTEFHX0NMRUFSKQotI2RlZmluZSBTRVRfQVRPTV9TNl9ERVZJQ0VfQ0hBTkdFIFwKLQkoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4KSB8IFwKLQkgQVRPTV9TNl9ERVZJQ0VfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKLSNkZWZpbmUgU0VUX0FUT01fUzZfVlJJX0JSSUdIVE5FU1NfQ0hBTkdFIFwKLQkoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4KSB8IFwKLQkgQVRPTV9TNl9WUklfQlJJR0hUTkVTU19DSEFOR0VfU0hJRlQgfCBBVE9NX0ZMQUdfU0VUKQotI2RlZmluZSBTRVRfQVRPTV9TNl9TQ0FMRVJfQ0hBTkdFIFwKLQkoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4KSB8IFwKLQkgQVRPTV9TNl9TQ0FMRVJfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKLSNkZWZpbmUgU0VUX0FUT01fUzZfTElEX0NIQU5HRSBcCi0JKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCkgfCBcCi0JIEFUT01fUzZfTElEX0NIQU5HRV9TSElGVCB8IEFUT01fRkxBR19TRVQpCisjZGVmaW5lIENMRUFSX0FUT01fUzZfQUNDX01PREUgICAgICAgICAgICAgICAgKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCApfEFUT01fUzZfQUNDX01PREVfU0hJRlQgfCBBVE9NX0ZMQUdfQ0xFQVIpCisjZGVmaW5lIFNFVF9BVE9NX1M2X0RFVklDRV9DSEFOR0UgICAgICAgICAgICAgKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCApfEFUT01fUzZfREVWSUNFX0NIQU5HRV9TSElGVCB8IEFUT01fRkxBR19TRVQpCisjZGVmaW5lIFNFVF9BVE9NX1M2X1ZSSV9CUklHSFRORVNTX0NIQU5HRSAgICAgKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCApfEFUT01fUzZfVlJJX0JSSUdIVE5FU1NfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKKyNkZWZpbmUgU0VUX0FUT01fUzZfU0NBTEVSX0NIQU5HRSAgICAgICAgICAgICAoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4ICl8QVRPTV9TNl9TQ0FMRVJfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKKyNkZWZpbmUgU0VUX0FUT01fUzZfTElEX0NIQU5HRSAgICAgICAgICAgICAgICAoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4ICl8QVRPTV9TNl9MSURfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKIAotI2RlZmluZSBTRVRfQVRPTV9TNl9MSURfU1RBVEUgXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHxcCi0JIEFUT01fUzZfTElEX1NUQVRFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKLSNkZWZpbmUgQ0xFQVJfQVRPTV9TNl9MSURfU1RBVEUgXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M2X0xJRF9TVEFURV9TSElGVCB8IEFUT01fRkxBR19DTEVBUikKKyNkZWZpbmUgU0VUX0FUT01fUzZfTElEX1NUQVRFICAgICAgICAgICAgICAgICAoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4ICl8QVRPTV9TNl9MSURfU1RBVEVfU0hJRlQgfCBBVE9NX0ZMQUdfU0VUKQorI2RlZmluZSBDTEVBUl9BVE9NX1M2X0xJRF9TVEFURSAgICAgICAgICAgICAgICgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDggKXxBVE9NX1M2X0xJRF9TVEFURV9TSElGVCB8IEFUT01fRkxBR19DTEVBUikKIAotI2RlZmluZSBTRVRfQVRPTV9TNl9ET0NLX0NIQU5HRSBcCi0JKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCl8IFwKLQkgQVRPTV9TNl9ET0NLSU5HX0NIQU5HRV9TSElGVCB8IEFUT01fRkxBR19TRVQpCi0jZGVmaW5lIFNFVF9BVE9NX1M2X0RPQ0tfU1RBVEUgXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M2X0RPQ0tfU1RBVEVfU0hJRlQgfCBBVE9NX0ZMQUdfU0VUKQotI2RlZmluZSBDTEVBUl9BVE9NX1M2X0RPQ0tfU1RBVEUgXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M2X0RPQ0tfU1RBVEVfU0hJRlQgfCBBVE9NX0ZMQUdfQ0xFQVIpCisjZGVmaW5lIFNFVF9BVE9NX1M2X0RPQ0tfQ0hBTkdFCQkJICAgICAgICAgICgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDggKXxBVE9NX1M2X0RPQ0tJTkdfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKKyNkZWZpbmUgU0VUX0FUT01fUzZfRE9DS19TVEFURSAgICAgICAgICAgICAgICAoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4ICl8QVRPTV9TNl9ET0NLX1NUQVRFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKKyNkZWZpbmUgQ0xFQVJfQVRPTV9TNl9ET0NLX1NUQVRFICAgICAgICAgICAgICAoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4ICl8QVRPTV9TNl9ET0NLX1NUQVRFX1NISUZUIHwgQVRPTV9GTEFHX0NMRUFSKQogCi0jZGVmaW5lIFNFVF9BVE9NX1M2X1RIRVJNQUxfU1RBVEVfQ0hBTkdFIFwKLQkoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4KSB8IFwKLQkgQVRPTV9TNl9USEVSTUFMX1NUQVRFX0NIQU5HRV9TSElGVCB8IEFUT01fRkxBR19TRVQpCi0jZGVmaW5lIFNFVF9BVE9NX1M2X1NZU1RFTV9QT1dFUl9NT0RFX0NIQU5HRSBcCi0JKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCkgfCBcCi0JIEFUT01fUzZfU1lTVEVNX1BPV0VSX01PREVfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKLSNkZWZpbmUgU0VUX0FUT01fUzZfSU5URVJSVVBUX1NFVF9CWV9CSU9TIFwKLQkoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4KSB8IFwKLQkgQVRPTV9TNl9JTlRFUlJVUFRfU0VUX0JZX0JJT1NfU0hJRlQgfCBBVE9NX0ZMQUdfU0VUKQorI2RlZmluZSBTRVRfQVRPTV9TNl9USEVSTUFMX1NUQVRFX0NIQU5HRSAgICAgICgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDggKXxBVE9NX1M2X1RIRVJNQUxfU1RBVEVfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKKyNkZWZpbmUgU0VUX0FUT01fUzZfU1lTVEVNX1BPV0VSX01PREVfQ0hBTkdFICAoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4ICl8QVRPTV9TNl9TWVNURU1fUE9XRVJfTU9ERV9DSEFOR0VfU0hJRlQgfCBBVE9NX0ZMQUdfU0VUKQorI2RlZmluZSBTRVRfQVRPTV9TNl9JTlRFUlJVUFRfU0VUX0JZX0JJT1MgICAgICgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDggKXxBVE9NX1M2X0lOVEVSUlVQVF9TRVRfQllfQklPU19TSElGVCB8IEFUT01fRkxBR19TRVQpCiAKLSNkZWZpbmUgU0VUX0FUT01fUzZfQ1JJVElDQUxfU1RBVEUgXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M2X0NSSVRJQ0FMX1NUQVRFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKLSNkZWZpbmUgQ0xFQVJfQVRPTV9TNl9DUklUSUNBTF9TVEFURSBcCi0JKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCkgfCBcCi0JIEFUT01fUzZfQ1JJVElDQUxfU1RBVEVfU0hJRlQgfCBBVE9NX0ZMQUdfQ0xFQVIpCisjZGVmaW5lIFNFVF9BVE9NX1M2X0NSSVRJQ0FMX1NUQVRFICAgICAgICAgICAgKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCApfEFUT01fUzZfQ1JJVElDQUxfU1RBVEVfU0hJRlQgfCBBVE9NX0ZMQUdfU0VUKQorI2RlZmluZSBDTEVBUl9BVE9NX1M2X0NSSVRJQ0FMX1NUQVRFICAgICAgICAgICgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDggKXxBVE9NX1M2X0NSSVRJQ0FMX1NUQVRFX1NISUZUIHwgQVRPTV9GTEFHX0NMRUFSKQogCi0jZGVmaW5lIFNFVF9BVE9NX1M2X1JFUV9TQ0FMRVIgXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M2X1JFUV9TQ0FMRVJfU0hJRlQgfCBBVE9NX0ZMQUdfU0VUKQotI2RlZmluZSBDTEVBUl9BVE9NX1M2X1JFUV9TQ0FMRVIgXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M2X1JFUV9TQ0FMRVJfU0hJRlQgfCBBVE9NX0ZMQUdfQ0xFQVIgKQorI2RlZmluZSBTRVRfQVRPTV9TNl9SRVFfU0NBTEVSICAgICAgICAgICAgICAgICgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDggKXxBVE9NX1M2X1JFUV9TQ0FMRVJfU0hJRlQgfCBBVE9NX0ZMQUdfU0VUKSAgCisjZGVmaW5lIENMRUFSX0FUT01fUzZfUkVRX1NDQUxFUiAgICAgICAgICAgICAgKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCApfEFUT01fUzZfUkVRX1NDQUxFUl9TSElGVCB8IEFUT01fRkxBR19DTEVBUiApCiAKLSNkZWZpbmUgU0VUX0FUT01fUzZfUkVRX1NDQUxFUl9BUkFUSU8gXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M2X1JFUV9TQ0FMRVJfQVJBVElPX1NISUZUIHwgQVRPTV9GTEFHX1NFVCApCi0jZGVmaW5lIENMRUFSX0FUT01fUzZfUkVRX1NDQUxFUl9BUkFUSU8gXAotCSgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M2X1JFUV9TQ0FMRVJfQVJBVElPX1NISUZUIHwgQVRPTV9GTEFHX0NMRUFSICkKKyNkZWZpbmUgU0VUX0FUT01fUzZfUkVRX1NDQUxFUl9BUkFUSU8gICAgICAgICAoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4ICl8QVRPTV9TNl9SRVFfU0NBTEVSX0FSQVRJT19TSElGVCB8IEFUT01fRkxBR19TRVQgKQorI2RlZmluZSBDTEVBUl9BVE9NX1M2X1JFUV9TQ0FMRVJfQVJBVElPICAgICAgICgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDggKXxBVE9NX1M2X1JFUV9TQ0FMRVJfQVJBVElPX1NISUZUIHwgQVRPTV9GTEFHX0NMRUFSICkKIAotI2RlZmluZSBTRVRfQVRPTV9TNl9JMkNfU1RBVEVfQ0hBTkdFIFwKLQkoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4KSB8IFwKLQkgQVRPTV9TNl9JMkNfU1RBVEVfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCApCisjZGVmaW5lIFNFVF9BVE9NX1M2X0kyQ19TVEFURV9DSEFOR0UgICAgICAgICAgKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCApfEFUT01fUzZfSTJDX1NUQVRFX0NIQU5HRV9TSElGVCB8IEFUT01fRkxBR19TRVQgKQogCi0jZGVmaW5lIFNFVF9BVE9NX1M2X0RJU1BMQVlfU1RBVEVfQ0hBTkdFIFwKLQkoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4KSB8IFwKLQkgQVRPTV9TNl9ESVNQTEFZX1NUQVRFX0NIQU5HRV9TSElGVCB8IEFUT01fRkxBR19TRVQgKQorI2RlZmluZSBTRVRfQVRPTV9TNl9ESVNQTEFZX1NUQVRFX0NIQU5HRSAgICAgICgoQVRPTV9BQ0NfQ0hBTkdFX0lORk9fREVGIDw8IDggKXxBVE9NX1M2X0RJU1BMQVlfU1RBVEVfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCApCiAKLSNkZWZpbmUgU0VUX0FUT01fUzZfREVWSUNFX1JFQ09ORklHIFwKLQkoKEFUT01fQUNDX0NIQU5HRV9JTkZPX0RFRiA8PCA4KSB8IFwKLQkgQVRPTV9TNl9DT05GSUdfRElTUExBWV9DSEFOR0VfU0hJRlQgfCBBVE9NX0ZMQUdfU0VUKQotI2RlZmluZSBDTEVBUl9BVE9NX1MwX0xDRDEgXAotCSgoQVRPTV9ERVZJQ0VfQ09OTkVDVF9JTkZPX0RFRiA8PCA4ICkgfCBcCi0JIEFUT01fUzBfTENEMV9TSElGVCB8IEFUT01fRkxBR19DTEVBUiApCi0jZGVmaW5lIFNFVF9BVE9NX1M3X0RPU184QklUX0RBQ19FTiBcCi0JKChBVE9NX0RPU19NT0RFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M3X0RPU184QklUX0RBQ19FTl9TSElGVCB8IEFUT01fRkxBR19TRVQgKQotI2RlZmluZSBDTEVBUl9BVE9NX1M3X0RPU184QklUX0RBQ19FTiBcCi0JKChBVE9NX0RPU19NT0RFX0lORk9fREVGIDw8IDgpIHwgXAotCSBBVE9NX1M3X0RPU184QklUX0RBQ19FTl9TSElGVCB8IEFUT01fRkxBR19DTEVBUiApCisjZGVmaW5lIFNFVF9BVE9NX1M2X0RFVklDRV9SRUNPTkZJRyAgICAgICAgICAgKChBVE9NX0FDQ19DSEFOR0VfSU5GT19ERUYgPDwgOCApfEFUT01fUzZfQ09ORklHX0RJU1BMQVlfQ0hBTkdFX1NISUZUIHwgQVRPTV9GTEFHX1NFVCkKKyNkZWZpbmUgQ0xFQVJfQVRPTV9TMF9MQ0QxICAgICAgICAgICAgICAgICAgICAoKEFUT01fREVWSUNFX0NPTk5FQ1RfSU5GT19ERUYgPDwgOCApfCAgQVRPTV9TMF9MQ0QxX1NISUZUIHwgQVRPTV9GTEFHX0NMRUFSICkKKyNkZWZpbmUgU0VUX0FUT01fUzdfRE9TXzhCSVRfREFDX0VOICAgICAgICAgICAoKEFUT01fRE9TX01PREVfSU5GT19ERUYgPDwgOCApfEFUT01fUzdfRE9TXzhCSVRfREFDX0VOX1NISUZUIHwgQVRPTV9GTEFHX1NFVCApCisjZGVmaW5lIENMRUFSX0FUT01fUzdfRE9TXzhCSVRfREFDX0VOICAgICAgICAgKChBVE9NX0RPU19NT0RFX0lORk9fREVGIDw8IDggKXxBVE9NX1M3X0RPU184QklUX0RBQ19FTl9TSElGVCB8IEFUT01fRkxBR19DTEVBUiApCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogUG9ydGlvbiBJSTogRGVmaW5pdGlub3Mgb25seSB1c2VkIGluIERyaXZlciAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCQorLy9Qb3J0aW9uIElJOiBEZWZpbml0aW5vcyBvbmx5IHVzZWQgaW4gRHJpdmVyCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogIE1hY3JvcyB1c2VkIGJ5IGRyaXZlciAqLworLy8gTWFjcm9zIHVzZWQgYnkgZHJpdmVyCisjaWZkZWYgX19jcGx1c3BsdXMKKyNkZWZpbmUgR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoTWFzdGVyT3JEYXRhLCBGaWVsZE5hbWUpICgocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oJihzdGF0aWNfY2FzdDxBVE9NX01BU1RFUl9MSVNUX09GXyMjTWFzdGVyT3JEYXRhIyNfVEFCTEVTKj4oMCkpLT5GaWVsZE5hbWUpLXN0YXRpY19jYXN0PGNoYXIqPigwKSkvc2l6ZW9mKFVTSE9SVCkpCiAKLSNkZWZpbmUJR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoTWFzdGVyT3JEYXRhLCBGaWVsZE5hbWUpICgoKGNoYXIgKikoJigoQVRPTV9NQVNURVJfTElTVF9PRl8jI01hc3Rlck9yRGF0YSMjX1RBQkxFUyAqKTApLT5GaWVsZE5hbWUpLShjaGFyICopMCkvc2l6ZW9mKFVTSE9SVCkpCisjZGVmaW5lIEdFVF9DT01NQU5EX1RBQkxFX0NPTU1BTkRTRVRfUkVWSVNJT04oVEFCTEVfSEVBREVSX09GRlNFVCkgKCgoc3RhdGljX2Nhc3Q8QVRPTV9DT01NT05fVEFCTEVfSEVBREVSKj4oVEFCTEVfSEVBREVSX09GRlNFVCkpLT51Y1RhYmxlRm9ybWF0UmV2aXNpb24gKSYweDNGKQorI2RlZmluZSBHRVRfQ09NTUFORF9UQUJMRV9QQVJBTUVURVJfUkVWSVNJT04oVEFCTEVfSEVBREVSX09GRlNFVCkgICgoKHN0YXRpY19jYXN0PEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUio+KFRBQkxFX0hFQURFUl9PRkZTRVQpKS0+dWNUYWJsZUNvbnRlbnRSZXZpc2lvbikmMHgzRikKKyNlbHNlIC8vIG5vdCBfX2NwbHVzcGx1cworI2RlZmluZQlHZXRJbmRleEludG9NYXN0ZXJUYWJsZShNYXN0ZXJPckRhdGEsIEZpZWxkTmFtZSkgKCgoY2hhciopKCYoKEFUT01fTUFTVEVSX0xJU1RfT0ZfIyNNYXN0ZXJPckRhdGEjI19UQUJMRVMqKTApLT5GaWVsZE5hbWUpLShjaGFyKikwKS9zaXplb2YoVVNIT1JUKSkKIAogI2RlZmluZSBHRVRfQ09NTUFORF9UQUJMRV9DT01NQU5EU0VUX1JFVklTSU9OKFRBQkxFX0hFQURFUl9PRkZTRVQpICgoKChBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIqKVRBQkxFX0hFQURFUl9PRkZTRVQpLT51Y1RhYmxlRm9ybWF0UmV2aXNpb24pJjB4M0YpCiAjZGVmaW5lIEdFVF9DT01NQU5EX1RBQkxFX1BBUkFNRVRFUl9SRVZJU0lPTihUQUJMRV9IRUFERVJfT0ZGU0VUKSAgKCgoKEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiopVEFCTEVfSEVBREVSX09GRlNFVCktPnVjVGFibGVDb250ZW50UmV2aXNpb24pJjB4M0YpCisjZW5kaWYgLy8gX19jcGx1c3BsdXMKIAogI2RlZmluZSBHRVRfREFUQV9UQUJMRV9NQUpPUl9SRVZJU0lPTiBHRVRfQ09NTUFORF9UQUJMRV9DT01NQU5EU0VUX1JFVklTSU9OCiAjZGVmaW5lIEdFVF9EQVRBX1RBQkxFX01JTk9SX1JFVklTSU9OIEdFVF9DT01NQU5EX1RBQkxFX1BBUkFNRVRFUl9SRVZJU0lPTgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFBvcnRpb24gSUlJOiBEZWZpbml0aW5vcyBvbmx5IHVzZWQgaW4gVkJJT1MgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vUG9ydGlvbiBJSUk6IERlZmluaXRpbm9zIG9ubHkgdXNlZCBpbiBWQklPUwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAjZGVmaW5lIEFUT01fREFDX1NSQwkJCQkJMHg4MAogI2RlZmluZSBBVE9NX1NSQ19EQUMxCQkJCQkwCiAjZGVmaW5lIEFUT01fU1JDX0RBQzIJCQkJCTB4ODAKIAotI2lmZGVmCVVFRklfQlVJTEQKLSNkZWZpbmUJVVNIT1JUCVVURU1QCi0jZW5kaWYKLQotdHlwZWRlZiBzdHJ1Y3QgX01FTU9SWV9QTExJTklUX1BBUkFNRVRFUlMgewotCVVMT05HIHVsVGFyZ2V0TWVtb3J5Q2xvY2s7CS8qIEluIDEwS2h6IHVuaXQgKi8KLQlVQ0hBUiB1Y0FjdGlvbjsJCS8qIG5vdCBkZWZpbmUgeWV0ICovCi0JVUNIQVIgdWNGYkRpdl9IaTsJLyogRmJkaXYgSGkgYnl0ZSAqLwotCVVDSEFSIHVjRmJEaXY7CQkvKiBGQiB2YWx1ZSAqLwotCVVDSEFSIHVjUG9zdERpdjsJLyogUG9zdCBkaXYgKi8KLX0gTUVNT1JZX1BMTElOSVRfUEFSQU1FVEVSUzsKK3R5cGVkZWYgc3RydWN0IF9NRU1PUllfUExMSU5JVF9QQVJBTUVURVJTCit7CisgIFVMT05HIHVsVGFyZ2V0TWVtb3J5Q2xvY2s7IC8vSW4gMTBLaHogdW5pdAorICBVQ0hBUiAgIHVjQWN0aW9uOwkJCQkJIC8vbm90IGRlZmluZSB5ZXQKKyAgVUNIQVIgICB1Y0ZiRGl2X0hpOwkJCQkgLy9GYmRpdiBIaSBieXRlCisgIFVDSEFSICAgdWNGYkRpdjsJCQkJCSAvL0ZCIHZhbHVlCisgIFVDSEFSICAgdWNQb3N0RGl2OwkJCQkgLy9Qb3N0IGRpdgorfU1FTU9SWV9QTExJTklUX1BBUkFNRVRFUlM7CiAKICNkZWZpbmUgTUVNT1JZX1BMTElOSVRfUFNfQUxMT0NBVElPTiAgTUVNT1JZX1BMTElOSVRfUEFSQU1FVEVSUwogCi0jZGVmaW5lCUdQSU9fUElOX1dSSVRFCQkJCQkJCQkJCQkJCTB4MDEKKworI2RlZmluZQlHUElPX1BJTl9XUklURQkJCQkJCQkJCQkJCQkweDAxCQkJCiAjZGVmaW5lCUdQSU9fUElOX1JFQUQJCQkJCQkJCQkJCQkJCTB4MDAKIAotdHlwZWRlZiBzdHJ1Y3QgX0dQSU9fUElOX0NPTlRST0xfUEFSQU1FVEVSUyB7Ci0JVUNIQVIgdWNHUElPX0lEOwkvKiByZXR1cm4gdmFsdWUsIHJlYWQgZnJvbSBHUElPIHBpbnMgKi8KLQlVQ0hBUiB1Y0dQSU9CaXRTaGlmdDsJLyogZGVmaW5lIHdoaWNoIGJpdCBpbiB1R1BJT0JpdFZhbCBuZWVkIHRvIGJlIHVwZGF0ZSAqLwotCVVDSEFSIHVjR1BJT0JpdFZhbDsJLyogU2V0L1Jlc2V0IGNvcnJlc3BvbmRpbmcgYml0IGRlZmluZWQgaW4gdWNHUElPQml0TWFzayAqLwotCVVDSEFSIHVjQWN0aW9uOwkJLyogPUdQSU9fUElOX1dSSVRFOiBSZWFkOyA9R1BJT19QSU5fUkVBRDogV3JpdGUgKi8KLX0gR1BJT19QSU5fQ09OVFJPTF9QQVJBTUVURVJTOwordHlwZWRlZiBzdHJ1Y3QgIF9HUElPX1BJTl9DT05UUk9MX1BBUkFNRVRFUlMKK3sKKyAgVUNIQVIgdWNHUElPX0lEOyAgICAgICAgICAgLy9yZXR1cm4gdmFsdWUsIHJlYWQgZnJvbSBHUElPIHBpbnMKKyAgVUNIQVIgdWNHUElPQml0U2hpZnQ7CSAgICAgLy9kZWZpbmUgd2hpY2ggYml0IGluIHVHUElPQml0VmFsIG5lZWQgdG8gYmUgdXBkYXRlIAorCVVDSEFSIHVjR1BJT0JpdFZhbDsJCSAgICAgLy9TZXQvUmVzZXQgY29ycmVzcG9uZGluZyBiaXQgZGVmaW5lZCBpbiB1Y0dQSU9CaXRNYXNrCisgIFVDSEFSIHVjQWN0aW9uOwkJCQkgICAgIC8vPUdQSU9fUElOX1dSSVRFOiBSZWFkOyA9R1BJT19QSU5fUkVBRDogV3JpdGUKK31HUElPX1BJTl9DT05UUk9MX1BBUkFNRVRFUlM7CiAKLXR5cGVkZWYgc3RydWN0IF9FTkFCTEVfU0NBTEVSX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjU2NhbGVyOwkJLyogIEFUT01fU0NBTEVSMSwgQVRPTV9TQ0FMRVIyICovCi0JVUNIQVIgdWNFbmFibGU7CQkvKiAgQVRPTV9TQ0FMRVJfRElTQUJMRSBvciBBVE9NX1NDQUxFUl9DRU5URVIgb3IgQVRPTV9TQ0FMRVJfRVhQQU5TSU9OICovCi0JVUNIQVIgdWNUVlN0YW5kYXJkOwkvKiAgKi8KLQlVQ0hBUiB1Y1BhZGRpbmdbMV07Ci19IEVOQUJMRV9TQ0FMRVJfUEFSQU1FVEVSUzsKLSNkZWZpbmUgRU5BQkxFX1NDQUxFUl9QU19BTExPQ0FUSU9OIEVOQUJMRV9TQ0FMRVJfUEFSQU1FVEVSUwordHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9TQ0FMRVJfUEFSQU1FVEVSUworeworICBVQ0hBUiB1Y1NjYWxlcjsgICAgICAgICAgICAvLyBBVE9NX1NDQUxFUjEsIEFUT01fU0NBTEVSMgorICBVQ0hBUiB1Y0VuYWJsZTsgICAgICAgICAgICAvLyBBVE9NX1NDQUxFUl9ESVNBQkxFIG9yIEFUT01fU0NBTEVSX0NFTlRFUiBvciBBVE9NX1NDQUxFUl9FWFBBTlNJT04KKyAgVUNIQVIgdWNUVlN0YW5kYXJkOyAgICAgICAgLy8gCisgIFVDSEFSIHVjUGFkZGluZ1sxXTsKK31FTkFCTEVfU0NBTEVSX1BBUkFNRVRFUlM7IAorI2RlZmluZSBFTkFCTEVfU0NBTEVSX1BTX0FMTE9DQVRJT04gRU5BQkxFX1NDQUxFUl9QQVJBTUVURVJTIAogCi0vKiB1Y0VuYWJsZTogKi8KKy8vdWNFbmFibGU6CiAjZGVmaW5lIFNDQUxFUl9CWVBBU1NfQVVUT19DRU5URVJfTk9fUkVQTElDQVRJT04gICAgMAogI2RlZmluZSBTQ0FMRVJfQllQQVNTX0FVVE9fQ0VOVEVSX0FVVE9fUkVQTElDQVRJT04gIDEKICNkZWZpbmUgU0NBTEVSX0VOQUJMRV8yVEFQX0FMUEhBX01PREUgICAgICAgICAgICAgICAyCiAjZGVmaW5lIFNDQUxFUl9FTkFCTEVfTVVMVElUQVBfTU9ERSAgICAgICAgICAgICAgICAgMwogCi10eXBlZGVmIHN0cnVjdCBfRU5BQkxFX0hBUkRXQVJFX0lDT05fQ1VSU09SX1BBUkFNRVRFUlMgewotCVVMT05HIHVzSFdJY29uSG9yelZlcnRQb3NuOwkvKiAgSGFyZHdhcmUgSWNvbiBWZXJ0aWNhbCBwb3NpdGlvbiAqLwotCVVDSEFSIHVjSFdJY29uVmVydE9mZnNldDsJLyogIEhhcmR3YXJlIEljb24gVmVydGljYWwgb2Zmc2V0ICovCi0JVUNIQVIgdWNIV0ljb25Ib3J6T2Zmc2V0OwkvKiAgSGFyZHdhcmUgSWNvbiBIb3Jpem9udGFsIG9mZnNldCAqLwotCVVDSEFSIHVjU2VsZWN0aW9uOwkvKiAgQVRPTV9DVVJTT1IxIG9yIEFUT01fSUNPTjEgb3IgQVRPTV9DVVJTT1IyIG9yIEFUT01fSUNPTjIgKi8KLQlVQ0hBUiB1Y0VuYWJsZTsJCS8qICBBVE9NX0VOQUJMRSBvciBBVE9NX0RJU0FCTEUgKi8KLX0gRU5BQkxFX0hBUkRXQVJFX0lDT05fQ1VSU09SX1BBUkFNRVRFUlM7Cit0eXBlZGVmIHN0cnVjdCBfRU5BQkxFX0hBUkRXQVJFX0lDT05fQ1VSU09SX1BBUkFNRVRFUlMKK3sKKyAgVUxPTkcgIHVzSFdJY29uSG9yelZlcnRQb3NuOyAgICAgICAgLy8gSGFyZHdhcmUgSWNvbiBWZXJ0aWNhbCBwb3NpdGlvbgorICBVQ0hBUiAgdWNIV0ljb25WZXJ0T2Zmc2V0OyAgICAgICAgICAvLyBIYXJkd2FyZSBJY29uIFZlcnRpY2FsIG9mZnNldAorICBVQ0hBUiAgdWNIV0ljb25Ib3J6T2Zmc2V0OyAgICAgICAgICAvLyBIYXJkd2FyZSBJY29uIEhvcml6b250YWwgb2Zmc2V0CisgIFVDSEFSICB1Y1NlbGVjdGlvbjsgICAgICAgICAgICAgICAgIC8vIEFUT01fQ1VSU09SMSBvciBBVE9NX0lDT04xIG9yIEFUT01fQ1VSU09SMiBvciBBVE9NX0lDT04yCisgIFVDSEFSICB1Y0VuYWJsZTsgICAgICAgICAgICAgICAgICAgIC8vIEFUT01fRU5BQkxFIG9yIEFUT01fRElTQUJMRQorfUVOQUJMRV9IQVJEV0FSRV9JQ09OX0NVUlNPUl9QQVJBTUVURVJTOwogCi10eXBlZGVmIHN0cnVjdCBfRU5BQkxFX0hBUkRXQVJFX0lDT05fQ1VSU09SX1BTX0FMTE9DQVRJT04gewotCUVOQUJMRV9IQVJEV0FSRV9JQ09OX0NVUlNPUl9QQVJBTUVURVJTIHNFbmFibGVJY29uOwotCUVOQUJMRV9DUlRDX1BBUkFNRVRFUlMgc1Jlc2VydmVkOwotfSBFTkFCTEVfSEFSRFdBUkVfSUNPTl9DVVJTT1JfUFNfQUxMT0NBVElPTjsKK3R5cGVkZWYgc3RydWN0IF9FTkFCTEVfSEFSRFdBUkVfSUNPTl9DVVJTT1JfUFNfQUxMT0NBVElPTgoreworICBFTkFCTEVfSEFSRFdBUkVfSUNPTl9DVVJTT1JfUEFSQU1FVEVSUyAgc0VuYWJsZUljb247CisgIEVOQUJMRV9DUlRDX1BBUkFNRVRFUlMgICAgICAgICAgICAgICAgICBzUmVzZXJ2ZWQ7ICAKK31FTkFCTEVfSEFSRFdBUkVfSUNPTl9DVVJTT1JfUFNfQUxMT0NBVElPTjsKIAotdHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9HUkFQSF9TVVJGQUNFX1BBUkFNRVRFUlMgewotCVVTSE9SVCB1c0hpZ2h0OwkJLyogIEltYWdlIEhpZ2h0ICovCi0JVVNIT1JUIHVzV2lkdGg7CQkvKiAgSW1hZ2UgV2lkdGggKi8KLQlVQ0hBUiB1Y1N1cmZhY2U7CS8qICBTdXJmYWNlIDEgb3IgMiAqLwotCVVDSEFSIHVjUGFkZGluZ1szXTsKLX0gRU5BQkxFX0dSQVBIX1NVUkZBQ0VfUEFSQU1FVEVSUzsKK3R5cGVkZWYgc3RydWN0IF9FTkFCTEVfR1JBUEhfU1VSRkFDRV9QQVJBTUVURVJTCit7CisgIFVTSE9SVCB1c0hpZ2h0OyAgICAgICAgICAgICAgICAgICAgIC8vIEltYWdlIEhpZ2h0CisgIFVTSE9SVCB1c1dpZHRoOyAgICAgICAgICAgICAgICAgICAgIC8vIEltYWdlIFdpZHRoCisgIFVDSEFSICB1Y1N1cmZhY2U7ICAgICAgICAgICAgICAgICAgIC8vIFN1cmZhY2UgMSBvciAyCQorICBVQ0hBUiAgdWNQYWRkaW5nWzNdOworfUVOQUJMRV9HUkFQSF9TVVJGQUNFX1BBUkFNRVRFUlM7CiAKLXR5cGVkZWYgc3RydWN0IF9FTkFCTEVfR1JBUEhfU1VSRkFDRV9QQVJBTUVURVJTX1YxXzIgewotCVVTSE9SVCB1c0hpZ2h0OwkJLyogIEltYWdlIEhpZ2h0ICovCi0JVVNIT1JUIHVzV2lkdGg7CQkvKiAgSW1hZ2UgV2lkdGggKi8KLQlVQ0hBUiB1Y1N1cmZhY2U7CS8qICBTdXJmYWNlIDEgb3IgMiAqLwotCVVDSEFSIHVjRW5hYmxlOwkJLyogIEFUT01fRU5BQkxFIG9yIEFUT01fRElTQUJMRSAqLwotCVVDSEFSIHVjUGFkZGluZ1syXTsKLX0gRU5BQkxFX0dSQVBIX1NVUkZBQ0VfUEFSQU1FVEVSU19WMV8yOwordHlwZWRlZiBzdHJ1Y3QgX0VOQUJMRV9HUkFQSF9TVVJGQUNFX1BBUkFNRVRFUlNfVjFfMgoreworICBVU0hPUlQgdXNIaWdodDsgICAgICAgICAgICAgICAgICAgICAvLyBJbWFnZSBIaWdodAorICBVU0hPUlQgdXNXaWR0aDsgICAgICAgICAgICAgICAgICAgICAvLyBJbWFnZSBXaWR0aAorICBVQ0hBUiAgdWNTdXJmYWNlOyAgICAgICAgICAgICAgICAgICAvLyBTdXJmYWNlIDEgb3IgMgorICBVQ0hBUiAgdWNFbmFibGU7ICAgICAgICAgICAgICAgICAgICAvLyBBVE9NX0VOQUJMRSBvciBBVE9NX0RJU0FCTEUKKyAgVUNIQVIgIHVjUGFkZGluZ1syXTsKK31FTkFCTEVfR1JBUEhfU1VSRkFDRV9QQVJBTUVURVJTX1YxXzI7CiAKLXR5cGVkZWYgc3RydWN0IF9FTkFCTEVfR1JBUEhfU1VSRkFDRV9QU19BTExPQ0FUSU9OIHsKLQlFTkFCTEVfR1JBUEhfU1VSRkFDRV9QQVJBTUVURVJTIHNTZXRTdXJmYWNlOwotCUVOQUJMRV9ZVVZfUFNfQUxMT0NBVElPTiBzUmVzZXJ2ZWQ7CS8qICBEb24ndCBzZXQgdGhpcyBvbmUgKi8KLX0gRU5BQkxFX0dSQVBIX1NVUkZBQ0VfUFNfQUxMT0NBVElPTjsKK3R5cGVkZWYgc3RydWN0IF9FTkFCTEVfR1JBUEhfU1VSRkFDRV9QQVJBTUVURVJTX1YxXzMKK3sKKyAgVVNIT1JUIHVzSGlnaHQ7ICAgICAgICAgICAgICAgICAgICAgLy8gSW1hZ2UgSGlnaHQKKyAgVVNIT1JUIHVzV2lkdGg7ICAgICAgICAgICAgICAgICAgICAgLy8gSW1hZ2UgV2lkdGgKKyAgVUNIQVIgIHVjU3VyZmFjZTsgICAgICAgICAgICAgICAgICAgLy8gU3VyZmFjZSAxIG9yIDIKKyAgVUNIQVIgIHVjRW5hYmxlOyAgICAgICAgICAgICAgICAgICAgLy8gQVRPTV9FTkFCTEUgb3IgQVRPTV9ESVNBQkxFCisgIFVTSE9SVCB1c0RldmljZUlkOyAgICAgICAgICAgICAgICAgIC8vIEFjdGl2ZSBEZXZpY2UgSWQgZm9yIHRoaXMgc3VyZmFjZS4gSWYgbm8gZGV2aWNlLCBzZXQgdG8gMC4gCit9RU5BQkxFX0dSQVBIX1NVUkZBQ0VfUEFSQU1FVEVSU19WMV8zOwogCi10eXBlZGVmIHN0cnVjdCBfTUVNT1JZX0NMRUFOX1VQX1BBUkFNRVRFUlMgewotCVVTSE9SVCB1c01lbW9yeVN0YXJ0OwkvKiBpbiA4S2IgYm91bmRyeSwgb2Zmc2V0IGZyb20gbWVtb3J5IGJhc2UgYWRkcmVzcyAqLwotCVVTSE9SVCB1c01lbW9yeVNpemU7CS8qIDhLYiBibG9ja3MgYWxpZ25lZCAqLwotfSBNRU1PUllfQ0xFQU5fVVBfUEFSQU1FVEVSUzsKK3R5cGVkZWYgc3RydWN0IF9FTkFCTEVfR1JBUEhfU1VSRkFDRV9QU19BTExPQ0FUSU9OCit7CisgIEVOQUJMRV9HUkFQSF9TVVJGQUNFX1BBUkFNRVRFUlMgc1NldFN1cmZhY2U7ICAgICAgICAgIAorICBFTkFCTEVfWVVWX1BTX0FMTE9DQVRJT04gICAgICAgIHNSZXNlcnZlZDsgLy8gRG9uJ3Qgc2V0IHRoaXMgb25lCit9RU5BQkxFX0dSQVBIX1NVUkZBQ0VfUFNfQUxMT0NBVElPTjsKKwordHlwZWRlZiBzdHJ1Y3QgX01FTU9SWV9DTEVBTl9VUF9QQVJBTUVURVJTCit7CisgIFVTSE9SVCAgdXNNZW1vcnlTdGFydDsgICAgICAgICAgICAgICAgLy9pbiA4S2IgYm91bmRyeSwgb2Zmc2V0IGZyb20gbWVtb3J5IGJhc2UgYWRkcmVzcworICBVU0hPUlQgIHVzTWVtb3J5U2l6ZTsgICAgICAgICAgICAgICAgIC8vOEtiIGJsb2NrcyBhbGlnbmVkCit9TUVNT1JZX0NMRUFOX1VQX1BBUkFNRVRFUlM7CiAjZGVmaW5lIE1FTU9SWV9DTEVBTl9VUF9QU19BTExPQ0FUSU9OIE1FTU9SWV9DTEVBTl9VUF9QQVJBTUVURVJTCiAKLXR5cGVkZWYgc3RydWN0IF9HRVRfRElTUExBWV9TVVJGQUNFX1NJWkVfUEFSQU1FVEVSUyB7Ci0JVVNIT1JUIHVzWF9TaXplOwkvKiBXaGVuIHVzZSBhcyBpbnB1dCBwYXJhbWV0ZXIsIHVzWF9TaXplIGluZGljYXRlcyB3aGljaCBDUlRDICovCi0JVVNIT1JUIHVzWV9TaXplOwotfSBHRVRfRElTUExBWV9TVVJGQUNFX1NJWkVfUEFSQU1FVEVSUzsKK3R5cGVkZWYgc3RydWN0ICBfR0VUX0RJU1BMQVlfU1VSRkFDRV9TSVpFX1BBUkFNRVRFUlMKK3sKKyAgVVNIT1JUICB1c1hfU2l6ZTsgICAgICAgICAgICAgICAgICAgICAvL1doZW4gdXNlIGFzIGlucHV0IHBhcmFtZXRlciwgdXNYX1NpemUgaW5kaWNhdGVzIHdoaWNoIENSVEMgICAgICAgICAgICAgICAgIAorICBVU0hPUlQgIHVzWV9TaXplOworfUdFVF9ESVNQTEFZX1NVUkZBQ0VfU0laRV9QQVJBTUVURVJTOyAKIAotdHlwZWRlZiBzdHJ1Y3QgX0lORElSRUNUX0lPX0FDQ0VTUyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVUNIQVIgSU9BY2Nlc3NTZXF1ZW5jZVsyNTZdOwordHlwZWRlZiBzdHJ1Y3QgX0lORElSRUNUX0lPX0FDQ0VTUworeworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsgIAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgSU9BY2Nlc3NTZXF1ZW5jZVsyNTZdOwogfSBJTkRJUkVDVF9JT19BQ0NFU1M7CiAKICNkZWZpbmUgSU5ESVJFQ1RfUkVBRCAgICAgICAgICAgICAgMHgwMApAQCAtMzYxNSw5MyArNDQxNCwxMDggQEAKICNkZWZpbmUgSU5ESVJFQ1RfSU9fTkJNSVNDX1JFQUQgICAgSU5ESVJFQ1RfSU9fTkJNSVNDIHwgSU5ESVJFQ1RfUkVBRAogI2RlZmluZSBJTkRJUkVDVF9JT19OQk1JU0NfV1JJVEUgICBJTkRJUkVDVF9JT19OQk1JU0MgfCBJTkRJUkVDVF9XUklURQogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9PRU1fSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JQVRPTV9JMkNfSURfQ09ORklHX0FDQ0VTUyBzdWNJMmNJZDsKLX0gQVRPTV9PRU1fSU5GTzsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX09FTV9JTkZPCit7IAorICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIJc0hlYWRlcjsKKyAgQVRPTV9JMkNfSURfQ09ORklHX0FDQ0VTUyBzdWNJMmNJZDsKK31BVE9NX09FTV9JTkZPOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9UVl9NT0RFIHsKLQlVQ0hBUiB1Y1ZNb2RlX051bTsJLyogVmlkZW8gbW9kZSBudW1iZXIgKi8KLQlVQ0hBUiB1Y1RWX01vZGVfTnVtOwkvKiBJbnRlcm5hbCBUViBtb2RlIG51bWJlciAqLwotfSBBVE9NX1RWX01PREU7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9UVl9NT0RFCit7CisgICBVQ0hBUgl1Y1ZNb2RlX051bTsJCQkgIC8vVmlkZW8gbW9kZSBudW1iZXIKKyAgIFVDSEFSCXVjVFZfTW9kZV9OdW07CQkJLy9JbnRlcm5hbCBUViBtb2RlIG51bWJlcgorfUFUT01fVFZfTU9ERTsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fQklPU19JTlRfVFZTVERfTU9ERSB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVVNIT1JUIHVzVFZfTW9kZV9MVVRfT2Zmc2V0OwkvKiAgUG9pbnRlciB0byBzdGFuZGFyZCB0byBpbnRlcm5hbCBudW1iZXIgY29udmVyc2lvbiB0YWJsZSAqLwotCVVTSE9SVCB1c1RWX0ZJRk9fT2Zmc2V0OwkvKiAgUG9pbnRlciB0byBGSUZPIGVudHJ5IHRhYmxlICovCi0JVVNIT1JUIHVzTlRTQ19UYmxfT2Zmc2V0OwkvKiAgUG9pbnRlciB0byBTRFRWX01vZGVfTlRTQyB0YWJsZSAqLwotCVVTSE9SVCB1c1BBTF9UYmxfT2Zmc2V0OwkvKiAgUG9pbnRlciB0byBTRFRWX01vZGVfUEFMIHRhYmxlICovCi0JVVNIT1JUIHVzQ1ZfVGJsX09mZnNldDsJLyogIFBvaW50ZXIgdG8gU0RUVl9Nb2RlX1BBTCB0YWJsZSAqLwotfSBBVE9NX0JJT1NfSU5UX1RWU1REX01PREU7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9CSU9TX0lOVF9UVlNURF9NT0RFCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOyAgCisgICBVU0hPUlQJdXNUVl9Nb2RlX0xVVF9PZmZzZXQ7CS8vIFBvaW50ZXIgdG8gc3RhbmRhcmQgdG8gaW50ZXJuYWwgbnVtYmVyIGNvbnZlcnNpb24gdGFibGUKKyAgIFVTSE9SVAl1c1RWX0ZJRk9fT2Zmc2V0OwkJICAvLyBQb2ludGVyIHRvIEZJRk8gZW50cnkgdGFibGUKKyAgIFVTSE9SVAl1c05UU0NfVGJsX09mZnNldDsJCS8vIFBvaW50ZXIgdG8gU0RUVl9Nb2RlX05UU0MgdGFibGUKKyAgIFVTSE9SVAl1c1BBTF9UYmxfT2Zmc2V0OwkJICAvLyBQb2ludGVyIHRvIFNEVFZfTW9kZV9QQUwgdGFibGUgCisgICBVU0hPUlQJdXNDVl9UYmxfT2Zmc2V0OwkJICAvLyBQb2ludGVyIHRvIFNEVFZfTW9kZV9QQUwgdGFibGUgCit9QVRPTV9CSU9TX0lOVF9UVlNURF9NT0RFOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9UVl9NT0RFX1NDQUxFUl9QVFIgewotCVVTSE9SVCB1Y0ZpbHRlcjBfT2Zmc2V0OwkvKiBQb2ludGVyIHRvIGZpbHRlciBmb3JtYXQgMCBjb2VmZmljaWVudHMgKi8KLQlVU0hPUlQgdXNGaWx0ZXIxX09mZnNldDsJLyogUG9pbnRlciB0byBmaWx0ZXIgZm9ybWF0IDAgY29lZmZpY2llbnRzICovCi0JVUNIQVIgdWNUVl9Nb2RlX051bTsKLX0gQVRPTV9UVl9NT0RFX1NDQUxFUl9QVFI7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1NUQU5EQVJEX1ZFU0FfVElNSU5HIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlBVE9NX0RURF9GT1JNQVQgYU1vZGVUaW1pbmdzWzE2XTsJLyogIDE2IGlzIG5vdCB0aGUgcmVhbCBhcnJheSBudW1iZXIsIGp1c3QgZm9yIGluaXRpYWwgYWxsb2NhdGlvbiAqLwotfSBBVE9NX1NUQU5EQVJEX1ZFU0FfVElNSU5HOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fVFZfTU9ERV9TQ0FMRVJfUFRSCit7CisgICBVU0hPUlQJdWNGaWx0ZXIwX09mZnNldDsJCS8vUG9pbnRlciB0byBmaWx0ZXIgZm9ybWF0IDAgY29lZmZpY2llbnRzCisgICBVU0hPUlQJdXNGaWx0ZXIxX09mZnNldDsJCS8vUG9pbnRlciB0byBmaWx0ZXIgZm9ybWF0IDAgY29lZmZpY2llbnRzCisgICBVQ0hBUgl1Y1RWX01vZGVfTnVtOworfUFUT01fVFZfTU9ERV9TQ0FMRVJfUFRSOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9TVERfRk9STUFUIHsKLQlVU0hPUlQgdXNTVERfSERpc3A7Ci0JVVNIT1JUIHVzU1REX1ZEaXNwOwotCVVTSE9SVCB1c1NURF9SZWZyZXNoUmF0ZTsKLQlVU0hPUlQgdXNSZXNlcnZlZDsKLX0gQVRPTV9TVERfRk9STUFUOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fU1RBTkRBUkRfVkVTQV9USU1JTkcKK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7ICAKKyAgQVRPTV9EVERfRk9STUFUIAkJCQkgYU1vZGVUaW1pbmdzWzE2XTsgICAgICAvLyAxNiBpcyBub3QgdGhlIHJlYWwgYXJyYXkgbnVtYmVyLCBqdXN0IGZvciBpbml0aWFsIGFsbG9jYXRpb24KK31BVE9NX1NUQU5EQVJEX1ZFU0FfVElNSU5HOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9WRVNBX1RPX0VYVEVOREVEX01PREUgewotCVVTSE9SVCB1c1ZFU0FfTW9kZU51bWJlcjsKLQlVU0hPUlQgdXNFeHRlbmRlZE1vZGVOdW1iZXI7Ci19IEFUT01fVkVTQV9UT19FWFRFTkRFRF9NT0RFOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9WRVNBX1RPX0lOVEVOQUxfTU9ERV9MVVQgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCUFUT01fVkVTQV9UT19FWFRFTkRFRF9NT0RFIGFzVkVTQV9Ub0V4dGVuZGVkTW9kZUluZm9bNzZdOwotfSBBVE9NX1ZFU0FfVE9fSU5URU5BTF9NT0RFX0xVVDsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1NURF9GT1JNQVQKK3sgCisgIFVTSE9SVCAgICB1c1NURF9IRGlzcDsKKyAgVVNIT1JUICAgIHVzU1REX1ZEaXNwOworICBVU0hPUlQgICAgdXNTVERfUmVmcmVzaFJhdGU7CisgIFVTSE9SVCAgICB1c1Jlc2VydmVkOworfUFUT01fU1REX0ZPUk1BVDsKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fVkVTQV9UT19FWFRFTkRFRF9NT0RFCit7CisgIFVTSE9SVCAgdXNWRVNBX01vZGVOdW1iZXI7CisgIFVTSE9SVCAgdXNFeHRlbmRlZE1vZGVOdW1iZXI7Cit9QVRPTV9WRVNBX1RPX0VYVEVOREVEX01PREU7CisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1ZFU0FfVE9fSU5URU5BTF9NT0RFX0xVVAoreyAKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSICAgc0hlYWRlcjsgIAorICBBVE9NX1ZFU0FfVE9fRVhURU5ERURfTU9ERSBhc1ZFU0FfVG9FeHRlbmRlZE1vZGVJbmZvWzc2XTsKK31BVE9NX1ZFU0FfVE9fSU5URU5BTF9NT0RFX0xVVDsKIAogLyoqKioqKioqKioqKioqKiBBVE9NIE1lbW9yeSBSZWxhdGVkIERhdGEgU3RydWN0dXJlICoqKioqKioqKioqKioqKioqKioqKioqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTUVNT1JZX1ZFTkRPUl9CTE9DSyB7Ci0JVUNIQVIgdWNNZW1vcnlUeXBlOwotCVVDSEFSIHVjTWVtb3J5VmVuZG9yOwotCVVDSEFSIHVjQWRqTUNJZDsKLQlVQ0hBUiB1Y0R5bkNsa0lkOwotCVVMT05HIHVsRGxsUmVzZXRDbGtSYW5nZTsKLX0gQVRPTV9NRU1PUllfVkVORE9SX0JMT0NLOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fTUVNT1JZX1ZFTkRPUl9CTE9DS3sKKwlVQ0hBUgkJCQkJCQkJCQkJCXVjTWVtb3J5VHlwZTsKKwlVQ0hBUgkJCQkJCQkJCQkJCXVjTWVtb3J5VmVuZG9yOworCVVDSEFSCQkJCQkJCQkJCQkJdWNBZGpNQ0lkOworCVVDSEFSCQkJCQkJCQkJCQkJdWNEeW5DbGtJZDsKKwlVTE9ORwkJCQkJCQkJCQkJCXVsRGxsUmVzZXRDbGtSYW5nZTsKK31BVE9NX01FTU9SWV9WRU5ET1JfQkxPQ0s7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX01FTU9SWV9TRVRUSU5HX0lEX0NPTkZJRyB7CisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX01FTU9SWV9TRVRUSU5HX0lEX0NPTkZJR3sKICNpZiBBVE9NX0JJR19FTkRJQU4KLQlVTE9ORyB1Y01lbUJsa0lkOjg7Ci0JVUxPTkcgdWxNZW1DbG9ja1JhbmdlOjI0OworCVVMT05HCQkJCQkJCQkJCQkJdWNNZW1CbGtJZDo4OworCVVMT05HCQkJCQkJCQkJCQkJdWxNZW1DbG9ja1JhbmdlOjI0OwogI2Vsc2UKLQlVTE9ORyB1bE1lbUNsb2NrUmFuZ2U6MjQ7Ci0JVUxPTkcgdWNNZW1CbGtJZDo4OworCVVMT05HCQkJCQkJCQkJCQkJdWxNZW1DbG9ja1JhbmdlOjI0OworCVVMT05HCQkJCQkJCQkJCQkJdWNNZW1CbGtJZDo4OwogI2VuZGlmCi19IEFUT01fTUVNT1JZX1NFVFRJTkdfSURfQ09ORklHOworfUFUT01fTUVNT1JZX1NFVFRJTkdfSURfQ09ORklHOwogCi10eXBlZGVmIHVuaW9uIF9BVE9NX01FTU9SWV9TRVRUSU5HX0lEX0NPTkZJR19BQ0NFU1MgewotCUFUT01fTUVNT1JZX1NFVFRJTkdfSURfQ09ORklHIHNsQWNjZXNzOwotCVVMT05HIHVsQWNjZXNzOwotfSBBVE9NX01FTU9SWV9TRVRUSU5HX0lEX0NPTkZJR19BQ0NFU1M7Cit0eXBlZGVmIHVuaW9uIF9BVE9NX01FTU9SWV9TRVRUSU5HX0lEX0NPTkZJR19BQ0NFU1MKK3sKKyAgQVRPTV9NRU1PUllfU0VUVElOR19JRF9DT05GSUcgc2xBY2Nlc3M7CisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgICAgIHVsQWNjZXNzOworfUFUT01fTUVNT1JZX1NFVFRJTkdfSURfQ09ORklHX0FDQ0VTUzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTUVNT1JZX1NFVFRJTkdfREFUQV9CTE9DSyB7Ci0JQVRPTV9NRU1PUllfU0VUVElOR19JRF9DT05GSUdfQUNDRVNTIHVsTWVtb3J5SUQ7Ci0JVUxPTkcgYXVsTWVtRGF0YVsxXTsKLX0gQVRPTV9NRU1PUllfU0VUVElOR19EQVRBX0JMT0NLOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9JTklUX1JFR19JTkRFWF9GT1JNQVQgewotCVVTSE9SVCB1c1JlZ0luZGV4OwkvKiAgTUMgcmVnaXN0ZXIgaW5kZXggKi8KLQlVQ0hBUiB1Y1ByZVJlZ0RhdGFMZW5ndGg7CS8qICBvZmZzZXQgaW4gQVRPTV9JTklUX1JFR19EQVRBX0JMT0NLLnNhUmVnRGF0YUJ1ZiAqLwotfSBBVE9NX0lOSVRfUkVHX0lOREVYX0ZPUk1BVDsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX01FTU9SWV9TRVRUSU5HX0RBVEFfQkxPQ0t7CisJQVRPTV9NRU1PUllfU0VUVElOR19JRF9DT05GSUdfQUNDRVNTCQkJdWxNZW1vcnlJRDsKKwlVTE9ORwkJCQkJCQkJCQkJCQkJCSAgICAgICAgYXVsTWVtRGF0YVsxXTsKK31BVE9NX01FTU9SWV9TRVRUSU5HX0RBVEFfQkxPQ0s7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0lOSVRfUkVHX0JMT0NLIHsKLQlVU0hPUlQgdXNSZWdJbmRleFRibFNpemU7CS8qIHNpemUgb2YgYXNSZWdJbmRleEJ1ZiAqLwotCVVTSE9SVCB1c1JlZ0RhdGFCbGtTaXplOwkvKiBzaXplIG9mIEFUT01fTUVNT1JZX1NFVFRJTkdfREFUQV9CTE9DSyAqLwotCUFUT01fSU5JVF9SRUdfSU5ERVhfRk9STUFUIGFzUmVnSW5kZXhCdWZbMV07Ci0JQVRPTV9NRU1PUllfU0VUVElOR19EQVRBX0JMT0NLIGFzUmVnRGF0YUJ1ZlsxXTsKLX0gQVRPTV9JTklUX1JFR19CTE9DSzsKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fSU5JVF9SRUdfSU5ERVhfRk9STUFUeworCSBVU0hPUlQJCQkJCQkJCQkJCXVzUmVnSW5kZXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1DIHJlZ2lzdGVyIGluZGV4CisJIFVDSEFSCQkJCQkJCQkJCQl1Y1ByZVJlZ0RhdGFMZW5ndGg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvZmZzZXQgaW4gQVRPTV9JTklUX1JFR19EQVRBX0JMT0NLLnNhUmVnRGF0YUJ1ZgorfUFUT01fSU5JVF9SRUdfSU5ERVhfRk9STUFUOworCisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0lOSVRfUkVHX0JMT0NLeworCVVTSE9SVAkJCQkJCQkJCQkJCQl1c1JlZ0luZGV4VGJsU2l6ZTsJCQkJCQkJCQkJCQkJLy9zaXplIG9mIGFzUmVnSW5kZXhCdWYKKwlVU0hPUlQJCQkJCQkJCQkJCQkJdXNSZWdEYXRhQmxrU2l6ZTsJCQkJCQkJCQkJCQkJCS8vc2l6ZSBvZiBBVE9NX01FTU9SWV9TRVRUSU5HX0RBVEFfQkxPQ0sKKwlBVE9NX0lOSVRfUkVHX0lOREVYX0ZPUk1BVAkJCWFzUmVnSW5kZXhCdWZbMV07CisJQVRPTV9NRU1PUllfU0VUVElOR19EQVRBX0JMT0NLCWFzUmVnRGF0YUJ1ZlsxXTsKK31BVE9NX0lOSVRfUkVHX0JMT0NLOwogCiAjZGVmaW5lIEVORF9PRl9SRUdfSU5ERVhfQkxPQ0sgIDB4MGZmZmYKICNkZWZpbmUgRU5EX09GX1JFR19EQVRBX0JMT0NLICAgMHgwMDAwMDAwMApAQCAtMzcxNiwxNiArNDUzMCwxOSBAQAogI2RlZmluZSBJTkRFWF9BQ0NFU1NfUkFOR0VfRU5ECQkgICAgKElOREVYX0FDQ0VTU19SQU5HRV9CRUdJTiArIDEpCiAjZGVmaW5lIFZBTFVFX0lOREVYX0FDQ0VTU19TSU5HTEUJICAgIChJTkRFWF9BQ0NFU1NfUkFOR0VfRU5EICsgMSkKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTUNfSU5JVF9QQVJBTV9UQUJMRSB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVVNIT1JUIHVzQWRqdXN0QVJCX1NFUURhdGFPZmZzZXQ7Ci0JVVNIT1JUIHVzTUNJbml0TWVtVHlwZVRibE9mZnNldDsKLQlVU0hPUlQgdXNNQ0luaXRDb21tb25UYmxPZmZzZXQ7Ci0JVVNIT1JUIHVzTUNJbml0UG93ZXJEb3duVGJsT2Zmc2V0OwotCVVMT05HIHVsQVJCX1NFUURhdGFCdWZbMzJdOwotCUFUT01fSU5JVF9SRUdfQkxPQ0sgYXNNQ0luaXRNZW1UeXBlOwotCUFUT01fSU5JVF9SRUdfQkxPQ0sgYXNNQ0luaXRDb21tb247Ci19IEFUT01fTUNfSU5JVF9QQVJBTV9UQUJMRTsKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fTUNfSU5JVF9QQVJBTV9UQUJMRQoreyAKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSCQlzSGVhZGVyOworICBVU0hPUlQJCQkJCQkJCQkJCXVzQWRqdXN0QVJCX1NFUURhdGFPZmZzZXQ7CisgIFVTSE9SVAkJCQkJCQkJCQkJdXNNQ0luaXRNZW1UeXBlVGJsT2Zmc2V0OworICBVU0hPUlQJCQkJCQkJCQkJCXVzTUNJbml0Q29tbW9uVGJsT2Zmc2V0OworICBVU0hPUlQJCQkJCQkJCQkJCXVzTUNJbml0UG93ZXJEb3duVGJsT2Zmc2V0OworCVVMT05HCQkJCQkJCQkJCQkJdWxBUkJfU0VRRGF0YUJ1ZlszMl07CisJQVRPTV9JTklUX1JFR19CTE9DSwkJCQkJYXNNQ0luaXRNZW1UeXBlOworCUFUT01fSU5JVF9SRUdfQkxPQ0sJCQkJCWFzTUNJbml0Q29tbW9uOworfUFUT01fTUNfSU5JVF9QQVJBTV9UQUJMRTsKKwogCiAjZGVmaW5lIF80TXgxNiAgICAgICAgICAgICAgMHgyCiAjZGVmaW5lIF80TXgzMiAgICAgICAgICAgICAgMHgzCkBAIC0zNzUxLDIyMSArNDU2OCwyNzIgQEAKIAogI2RlZmluZSBRSU1PTkRBICAgICAgICAgICAgIElORklORU9OCiAjZGVmaW5lIFBST01PUyAgICAgICAgICAgICAgTU9TRUwKKyNkZWZpbmUgS1JFVE9OICAgICAgICAgICAgICBJTkZJTkVPTgogCi0vKiAvLy8vLy8vLy8vL1N1cHBvcnQgZm9yIEdERFI1IE1DIHVDb2RlIHRvIHJlc2lkZSBpbiB1cHBlciA2NEsgb2YgUk9NLy8vLy8vLy8vLy8vLyAqLworLy8vLy8vLy8vLy8vL1N1cHBvcnQgZm9yIEdERFI1IE1DIHVDb2RlIHRvIHJlc2lkZSBpbiB1cHBlciA2NEsgb2YgUk9NLy8vLy8vLy8vLy8vLwogCiAjZGVmaW5lIFVDT0RFX1JPTV9TVEFSVF9BRERSRVNTCQkweDFjMDAwCi0jZGVmaW5lCVVDT0RFX1NJR05BVFVSRQkJCTB4NDM3NTQzNGQJLyogICdNQ3VDJyAtIE1DIHVDb2RlICovCisjZGVmaW5lCVVDT0RFX1NJR05BVFVSRQkJCTB4NDM3NTQzNGQgLy8gJ01DdUMnIC0gTUMgdUNvZGUKIAotLyogdUNvZGUgYmxvY2sgaGVhZGVyIGZvciByZWZlcmVuY2UgKi8KKy8vdUNvZGUgYmxvY2sgaGVhZGVyIGZvciByZWZlcmVuY2UKIAotdHlwZWRlZiBzdHJ1Y3QgX01DdUNvZGVIZWFkZXIgewotCVVMT05HIHVsU2lnbmF0dXJlOwotCVVDSEFSIHVjUmV2aXNpb247Ci0JVUNIQVIgdWNDaGVja3N1bTsKLQlVQ0hBUiB1Y1Jlc2VydmVkMTsKLQlVQ0hBUiB1Y1Jlc2VydmVkMjsKLQlVU0hPUlQgdXNQYXJhbWV0ZXJzTGVuZ3RoOwotCVVTSE9SVCB1c1VDb2RlTGVuZ3RoOwotCVVTSE9SVCB1c1Jlc2VydmVkMTsKLQlVU0hPUlQgdXNSZXNlcnZlZDI7Cit0eXBlZGVmIHN0cnVjdCBfTUN1Q29kZUhlYWRlcgoreworICBVTE9ORyAgdWxTaWduYXR1cmU7CisgIFVDSEFSICB1Y1JldmlzaW9uOworICBVQ0hBUiAgdWNDaGVja3N1bTsKKyAgVUNIQVIgIHVjUmVzZXJ2ZWQxOworICBVQ0hBUiAgdWNSZXNlcnZlZDI7CisgIFVTSE9SVCB1c1BhcmFtZXRlcnNMZW5ndGg7CisgIFVTSE9SVCB1c1VDb2RlTGVuZ3RoOworICBVU0hPUlQgdXNSZXNlcnZlZDE7CisgIFVTSE9SVCB1c1Jlc2VydmVkMjsKIH0gTUN1Q29kZUhlYWRlcjsKIAotLyogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gKi8KKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogI2RlZmluZSBBVE9NX01BWF9OVU1CRVJfT0ZfVlJBTV9NT0RVTEUJMTYKIAogI2RlZmluZSBBVE9NX1ZSQU1fTU9EVUxFX01FTU9SWV9WRU5ET1JfSURfTUFTSwkweEYKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1ZSQU1fTU9EVUxFX1YxIHsKLQlVTE9ORyB1bFJlc2VydmVkOwotCVVTSE9SVCB1c0VNUlNWYWx1ZTsKLQlVU0hPUlQgdXNNUlNWYWx1ZTsKLQlVU0hPUlQgdXNSZXNlcnZlZDsKLQlVQ0hBUiB1Y0V4dE1lbW9yeUlEOwkvKiAgQW4gZXh0ZXJuYWwgaW5kaWNhdG9yIChieSBoYXJkY29kZSwgY2FsbGJhY2sgb3IgcGluKSB0byB0ZWxsIHdoYXQgaXMgdGhlIGN1cnJlbnQgbWVtb3J5IG1vZHVsZSAqLwotCVVDSEFSIHVjTWVtb3J5VHlwZTsJLyogIFs3OjRdPTB4MTpERFIxOz0weDI6RERSMjs9MHgzOkREUjM7PTB4NDpERFI0O1szOjBdIHJlc2VydmVkOyAqLwotCVVDSEFSIHVjTWVtb3J5VmVuZGVySUQ7CS8qICBQcmVkZWZpbmVkLG5ldmVyIGNoYW5nZSBhY3Jvc3MgZGVzaWducyBvciBtZW1vcnkgdHlwZS92ZW5kZXIgKi8KLQlVQ0hBUiB1Y01lbW9yeURldmljZUNmZzsJLyogIFs3OjRdPTB4MDo0TTs9MHgxOjhNOz0weDI6MTZNOzB4MzozMk0uLi4uWzM6MF09MHgwOng0Oz0weDE6eDg7PTB4Mjp4MTY7PTB4Mzp4MzIuLi4gKi8KLQlVQ0hBUiB1Y1JvdzsJCS8qICBOdW1iZXIgb2YgUm93LGluIHBvd2VyIG9mIDI7ICovCi0JVUNIQVIgdWNDb2x1bW47CQkvKiAgTnVtYmVyIG9mIENvbHVtbixpbiBwb3dlciBvZiAyOyAqLwotCVVDSEFSIHVjQmFuazsJCS8qICBOdW5iZXIgb2YgQmFuazsgKi8KLQlVQ0hBUiB1Y1Jhbms7CQkvKiAgTnVtYmVyIG9mIFJhbmssIGluIHBvd2VyIG9mIDIgKi8KLQlVQ0hBUiB1Y0NoYW5uZWxOdW07CS8qICBOdW1iZXIgb2YgY2hhbm5lbDsgKi8KLQlVQ0hBUiB1Y0NoYW5uZWxDb25maWc7CS8qICBbMzowXT1JbmRpY2F0aW9uIG9mIHdoYXQgY2hhbm5lbCBjb21iaW5hdGlvbjtbNDo3XT1DaGFubmVsIGJpdCB3aWR0aCwgaW4gbnVtYmVyIG9mIDIgKi8KLQlVQ0hBUiB1Y0RlZmF1bHRNVkREUV9JRDsJLyogIERlZmF1bHQgTVZERFEgc2V0dGluZyBmb3IgdGhpcyBtZW1vcnkgYmxvY2ssIElEIGxpbmtpbmcgdG8gTVZERFEgaW5mbyB0YWJsZSB0byBmaW5kIHJlYWwgc2V0LXVwIGRhdGE7ICovCi0JVUNIQVIgdWNEZWZhdWx0TVZERENfSUQ7CS8qICBEZWZhdWx0IE1WRERDIHNldHRpbmcgZm9yIHRoaXMgbWVtb3J5IGJsb2NrLCBJRCBsaW5raW5nIHRvIE1WRERDIGluZm8gdGFibGUgdG8gZmluZCByZWFsIHNldC11cCBkYXRhOyAqLwotCVVDSEFSIHVjUmVzZXJ2ZWRbMl07Ci19IEFUT01fVlJBTV9NT0RVTEVfVjE7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX01PRFVMRV9WMQoreworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bFJlc2VydmVkOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c0VNUlNWYWx1ZTsgIAorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c01SU1ZhbHVlOworICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c1Jlc2VydmVkOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0V4dE1lbW9yeUlEOyAgICAgLy8gQW4gZXh0ZXJuYWwgaW5kaWNhdG9yIChieSBoYXJkY29kZSwgY2FsbGJhY2sgb3IgcGluKSB0byB0ZWxsIHdoYXQgaXMgdGhlIGN1cnJlbnQgbWVtb3J5IG1vZHVsZQorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y01lbW9yeVR5cGU7ICAgICAgLy8gWzc6NF09MHgxOkREUjE7PTB4MjpERFIyOz0weDM6RERSMzs9MHg0OkREUjQ7WzM6MF0gcmVzZXJ2ZWQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjTWVtb3J5VmVuZGVySUQ7ICAvLyBQcmVkZWZpbmVkLG5ldmVyIGNoYW5nZSBhY3Jvc3MgZGVzaWducyBvciBtZW1vcnkgdHlwZS92ZW5kZXIgCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjTWVtb3J5RGV2aWNlQ2ZnOyAvLyBbNzo0XT0weDA6NE07PTB4MTo4TTs9MHgyOjE2TTsweDM6MzJNLi4uLlszOjBdPTB4MDp4NDs9MHgxOng4Oz0weDI6eDE2Oz0weDM6eDMyLi4uCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjUm93OyAgICAgICAgICAgICAvLyBOdW1iZXIgb2YgUm93LGluIHBvd2VyIG9mIDI7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjQ29sdW1uOyAgICAgICAgICAvLyBOdW1iZXIgb2YgQ29sdW1uLGluIHBvd2VyIG9mIDI7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjQmFuazsgICAgICAgICAgICAvLyBOdW5iZXIgb2YgQmFuazsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNSYW5rOyAgICAgICAgICAgIC8vIE51bWJlciBvZiBSYW5rLCBpbiBwb3dlciBvZiAyCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjQ2hhbm5lbE51bTsgICAgICAvLyBOdW1iZXIgb2YgY2hhbm5lbDsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNDaGFubmVsQ29uZmlnOyAgIC8vIFszOjBdPUluZGljYXRpb24gb2Ygd2hhdCBjaGFubmVsIGNvbWJpbmF0aW9uO1s0OjddPUNoYW5uZWwgYml0IHdpZHRoLCBpbiBudW1iZXIgb2YgMgorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0RlZmF1bHRNVkREUV9JRDsgLy8gRGVmYXVsdCBNVkREUSBzZXR0aW5nIGZvciB0aGlzIG1lbW9yeSBibG9jaywgSUQgbGlua2luZyB0byBNVkREUSBpbmZvIHRhYmxlIHRvIGZpbmQgcmVhbCBzZXQtdXAgZGF0YTsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNEZWZhdWx0TVZERENfSUQ7IC8vIERlZmF1bHQgTVZEREMgc2V0dGluZyBmb3IgdGhpcyBtZW1vcnkgYmxvY2ssIElEIGxpbmtpbmcgdG8gTVZEREMgaW5mbyB0YWJsZSB0byBmaW5kIHJlYWwgc2V0LXVwIGRhdGE7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjUmVzZXJ2ZWRbMl07Cit9QVRPTV9WUkFNX01PRFVMRV9WMTsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fVlJBTV9NT0RVTEVfVjIgewotCVVMT05HIHVsUmVzZXJ2ZWQ7Ci0JVUxPTkcgdWxGbGFnczsJCS8qICBUbyBlbmFibGUvZGlzYWJsZSBmdW5jdGlvbmFsaXRpZXMgYmFzZWQgb24gbWVtb3J5IHR5cGUgKi8KLQlVTE9ORyB1bEVuZ2luZUNsb2NrOwkvKiAgT3ZlcnJpZGUgb2YgZGVmYXVsdCBlbmdpbmUgY2xvY2sgZm9yIHBhcnRpY3VsYXIgbWVtb3J5IHR5cGUgKi8KLQlVTE9ORyB1bE1lbW9yeUNsb2NrOwkvKiAgT3ZlcnJpZGUgb2YgZGVmYXVsdCBtZW1vcnkgY2xvY2sgZm9yIHBhcnRpY3VsYXIgbWVtb3J5IHR5cGUgKi8KLQlVU0hPUlQgdXNFTVJTMlZhbHVlOwkvKiAgRU1SUzIgVmFsdWUgaXMgdXNlZCBmb3IgR0REUjIgYW5kIEdERFI0IG1lbW9yeSB0eXBlICovCi0JVVNIT1JUIHVzRU1SUzNWYWx1ZTsJLyogIEVNUlMzIFZhbHVlIGlzIHVzZWQgZm9yIEdERFIyIGFuZCBHRERSNCBtZW1vcnkgdHlwZSAqLwotCVVTSE9SVCB1c0VNUlNWYWx1ZTsKLQlVU0hPUlQgdXNNUlNWYWx1ZTsKLQlVU0hPUlQgdXNSZXNlcnZlZDsKLQlVQ0hBUiB1Y0V4dE1lbW9yeUlEOwkvKiAgQW4gZXh0ZXJuYWwgaW5kaWNhdG9yIChieSBoYXJkY29kZSwgY2FsbGJhY2sgb3IgcGluKSB0byB0ZWxsIHdoYXQgaXMgdGhlIGN1cnJlbnQgbWVtb3J5IG1vZHVsZSAqLwotCVVDSEFSIHVjTWVtb3J5VHlwZTsJLyogIFs3OjRdPTB4MTpERFIxOz0weDI6RERSMjs9MHgzOkREUjM7PTB4NDpERFI0O1szOjBdIC0gbXVzdCBub3QgYmUgdXNlZCBmb3Igbm93OyAqLwotCVVDSEFSIHVjTWVtb3J5VmVuZGVySUQ7CS8qICBQcmVkZWZpbmVkLG5ldmVyIGNoYW5nZSBhY3Jvc3MgZGVzaWducyBvciBtZW1vcnkgdHlwZS92ZW5kZXIuIElmIG5vdCBwcmVkZWZpbmVkLCB2ZW5kb3IgZGV0ZWN0aW9uIHRhYmxlIGdldHMgZXhlY3V0ZWQgKi8KLQlVQ0hBUiB1Y01lbW9yeURldmljZUNmZzsJLyogIFs3OjRdPTB4MDo0TTs9MHgxOjhNOz0weDI6MTZNOzB4MzozMk0uLi4uWzM6MF09MHgwOng0Oz0weDE6eDg7PTB4Mjp4MTY7PTB4Mzp4MzIuLi4gKi8KLQlVQ0hBUiB1Y1JvdzsJCS8qICBOdW1iZXIgb2YgUm93LGluIHBvd2VyIG9mIDI7ICovCi0JVUNIQVIgdWNDb2x1bW47CQkvKiAgTnVtYmVyIG9mIENvbHVtbixpbiBwb3dlciBvZiAyOyAqLwotCVVDSEFSIHVjQmFuazsJCS8qICBOdW5iZXIgb2YgQmFuazsgKi8KLQlVQ0hBUiB1Y1Jhbms7CQkvKiAgTnVtYmVyIG9mIFJhbmssIGluIHBvd2VyIG9mIDIgKi8KLQlVQ0hBUiB1Y0NoYW5uZWxOdW07CS8qICBOdW1iZXIgb2YgY2hhbm5lbDsgKi8KLQlVQ0hBUiB1Y0NoYW5uZWxDb25maWc7CS8qICBbMzowXT1JbmRpY2F0aW9uIG9mIHdoYXQgY2hhbm5lbCBjb21iaW5hdGlvbjtbNDo3XT1DaGFubmVsIGJpdCB3aWR0aCwgaW4gbnVtYmVyIG9mIDIgKi8KLQlVQ0hBUiB1Y0RlZmF1bHRNVkREUV9JRDsJLyogIERlZmF1bHQgTVZERFEgc2V0dGluZyBmb3IgdGhpcyBtZW1vcnkgYmxvY2ssIElEIGxpbmtpbmcgdG8gTVZERFEgaW5mbyB0YWJsZSB0byBmaW5kIHJlYWwgc2V0LXVwIGRhdGE7ICovCi0JVUNIQVIgdWNEZWZhdWx0TVZERENfSUQ7CS8qICBEZWZhdWx0IE1WRERDIHNldHRpbmcgZm9yIHRoaXMgbWVtb3J5IGJsb2NrLCBJRCBsaW5raW5nIHRvIE1WRERDIGluZm8gdGFibGUgdG8gZmluZCByZWFsIHNldC11cCBkYXRhOyAqLwotCVVDSEFSIHVjUmVmcmVzaFJhdGVGYWN0b3I7Ci0JVUNIQVIgdWNSZXNlcnZlZFszXTsKLX0gQVRPTV9WUkFNX01PRFVMRV9WMjsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fTUVNT1JZX1RJTUlOR19GT1JNQVQgewotCVVMT05HIHVsQ2xrUmFuZ2U7CS8qICBtZW1vcnkgY2xvY2sgaW4gMTBrSHogdW5pdCwgd2hlbiB0YXJnZXQgbWVtb3J5IGNsb2NrIGlzIGJlbG93IHRoaXMgY2xvY2ssIHVzZSB0aGlzIG1lbW9yeSB0aW1pbmcgKi8KLQl1bmlvbiB7Ci0JCVVTSE9SVCB1c01SUzsJLyogIG1vZGUgcmVnaXN0ZXIgKi8KLQkJVVNIT1JUIHVzRERSM19NUjA7Ci0JfTsKLQl1bmlvbiB7Ci0JCVVTSE9SVCB1c0VNUlM7CS8qICBleHRlbmRlZCBtb2RlIHJlZ2lzdGVyICovCi0JCVVTSE9SVCB1c0REUjNfTVIxOwotCX07Ci0JVUNIQVIgdWNDTDsJCS8qICBDQVMgbGF0ZW5jeSAqLwotCVVDSEFSIHVjV0w7CQkvKiAgV1JJVEUgTGF0ZW5jeSAqLwotCVVDSEFSIHVjdFJBUzsJCS8qICB0UkFTICovCi0JVUNIQVIgdWN0UkM7CQkvKiAgdFJDICovCi0JVUNIQVIgdWN0UkZDOwkJLyogIHRSRkMgKi8KLQlVQ0hBUiB1Y3RSQ0RSOwkJLyogIHRSQ0RSICovCi0JVUNIQVIgdWN0UkNEVzsJCS8qICB0UkNEVyAqLwotCVVDSEFSIHVjdFJQOwkJLyogIHRSUCAqLwotCVVDSEFSIHVjdFJSRDsJCS8qICB0UlJEICovCi0JVUNIQVIgdWN0V1I7CQkvKiAgdFdSICovCi0JVUNIQVIgdWN0V1RSOwkJLyogIHRXVFIgKi8KLQlVQ0hBUiB1Y3RQRElYOwkJLyogIHRQRElYICovCi0JVUNIQVIgdWN0RkFXOwkJLyogIHRGQVcgKi8KLQlVQ0hBUiB1Y3RBT05EOwkJLyogIHRBT05EICovCi0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJVUNIQVIgdWNmbGFnOwkvKiAgZmxhZyB0byBjb250cm9sIG1lbW9yeSB0aW1pbmcgY2FsY3VsYXRpb24uIGJpdDA9IGNvbnRyb2wgRU1SUzIgSW5maW5lb24gKi8KLQkJCVVDSEFSIHVjUmVzZXJ2ZWQ7Ci0JCX07Ci0JCVVTSE9SVCB1c0REUjNfTVIyOwotCX07Ci19IEFUT01fTUVNT1JZX1RJTUlOR19GT1JNQVQ7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX01PRFVMRV9WMgoreworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bFJlc2VydmVkOworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bEZsYWdzOyAgICAgCQkJLy8gVG8gZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25hbGl0aWVzIGJhc2VkIG9uIG1lbW9yeSB0eXBlCisgIFVMT05HICAgICAgICAgICAgICAgICAgICAgIHVsRW5naW5lQ2xvY2s7ICAgICAvLyBPdmVycmlkZSBvZiBkZWZhdWx0IGVuZ2luZSBjbG9jayBmb3IgcGFydGljdWxhciBtZW1vcnkgdHlwZQorICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bE1lbW9yeUNsb2NrOyAgICAgLy8gT3ZlcnJpZGUgb2YgZGVmYXVsdCBtZW1vcnkgY2xvY2sgZm9yIHBhcnRpY3VsYXIgbWVtb3J5IHR5cGUKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNFTVJTMlZhbHVlOyAgICAgIC8vIEVNUlMyIFZhbHVlIGlzIHVzZWQgZm9yIEdERFIyIGFuZCBHRERSNCBtZW1vcnkgdHlwZQorICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c0VNUlMzVmFsdWU7ICAgICAgLy8gRU1SUzMgVmFsdWUgaXMgdXNlZCBmb3IgR0REUjIgYW5kIEdERFI0IG1lbW9yeSB0eXBlCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzRU1SU1ZhbHVlOyAgCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzTVJTVmFsdWU7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzUmVzZXJ2ZWQ7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjRXh0TWVtb3J5SUQ7ICAgICAvLyBBbiBleHRlcm5hbCBpbmRpY2F0b3IgKGJ5IGhhcmRjb2RlLCBjYWxsYmFjayBvciBwaW4pIHRvIHRlbGwgd2hhdCBpcyB0aGUgY3VycmVudCBtZW1vcnkgbW9kdWxlCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjTWVtb3J5VHlwZTsgICAgICAvLyBbNzo0XT0weDE6RERSMTs9MHgyOkREUjI7PTB4MzpERFIzOz0weDQ6RERSNDtbMzowXSAtIG11c3Qgbm90IGJlIHVzZWQgZm9yIG5vdzsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNNZW1vcnlWZW5kZXJJRDsgIC8vIFByZWRlZmluZWQsbmV2ZXIgY2hhbmdlIGFjcm9zcyBkZXNpZ25zIG9yIG1lbW9yeSB0eXBlL3ZlbmRlci4gSWYgbm90IHByZWRlZmluZWQsIHZlbmRvciBkZXRlY3Rpb24gdGFibGUgZ2V0cyBleGVjdXRlZAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y01lbW9yeURldmljZUNmZzsgLy8gWzc6NF09MHgwOjRNOz0weDE6OE07PTB4MjoxNk07MHgzOjMyTS4uLi5bMzowXT0weDA6eDQ7PTB4MTp4ODs9MHgyOngxNjs9MHgzOngzMi4uLgorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y1JvdzsgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIFJvdyxpbiBwb3dlciBvZiAyOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0NvbHVtbjsgICAgICAgICAgLy8gTnVtYmVyIG9mIENvbHVtbixpbiBwb3dlciBvZiAyOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0Jhbms7ICAgICAgICAgICAgLy8gTnVuYmVyIG9mIEJhbms7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjUmFuazsgICAgICAgICAgICAvLyBOdW1iZXIgb2YgUmFuaywgaW4gcG93ZXIgb2YgMgorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0NoYW5uZWxOdW07ICAgICAgLy8gTnVtYmVyIG9mIGNoYW5uZWw7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjQ2hhbm5lbENvbmZpZzsgICAvLyBbMzowXT1JbmRpY2F0aW9uIG9mIHdoYXQgY2hhbm5lbCBjb21iaW5hdGlvbjtbNDo3XT1DaGFubmVsIGJpdCB3aWR0aCwgaW4gbnVtYmVyIG9mIDIKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNEZWZhdWx0TVZERFFfSUQ7IC8vIERlZmF1bHQgTVZERFEgc2V0dGluZyBmb3IgdGhpcyBtZW1vcnkgYmxvY2ssIElEIGxpbmtpbmcgdG8gTVZERFEgaW5mbyB0YWJsZSB0byBmaW5kIHJlYWwgc2V0LXVwIGRhdGE7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjRGVmYXVsdE1WRERDX0lEOyAvLyBEZWZhdWx0IE1WRERDIHNldHRpbmcgZm9yIHRoaXMgbWVtb3J5IGJsb2NrLCBJRCBsaW5raW5nIHRvIE1WRERDIGluZm8gdGFibGUgdG8gZmluZCByZWFsIHNldC11cCBkYXRhOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y1JlZnJlc2hSYXRlRmFjdG9yOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y1Jlc2VydmVkWzNdOworfUFUT01fVlJBTV9NT0RVTEVfVjI7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX01FTU9SWV9USU1JTkdfRk9STUFUX1YxIHsKLQlVTE9ORyB1bENsa1JhbmdlOwkvKiAgbWVtb3J5IGNsb2NrIGluIDEwa0h6IHVuaXQsIHdoZW4gdGFyZ2V0IG1lbW9yeSBjbG9jayBpcyBiZWxvdyB0aGlzIGNsb2NrLCB1c2UgdGhpcyBtZW1vcnkgdGltaW5nICovCi0JVVNIT1JUIHVzTVJTOwkJLyogIG1vZGUgcmVnaXN0ZXIgKi8KLQlVU0hPUlQgdXNFTVJTOwkJLyogIGV4dGVuZGVkIG1vZGUgcmVnaXN0ZXIgKi8KLQlVQ0hBUiB1Y0NMOwkJLyogIENBUyBsYXRlbmN5ICovCi0JVUNIQVIgdWNXTDsJCS8qICBXUklURSBMYXRlbmN5ICovCi0JVUNIQVIgdWN0UkFTOwkJLyogIHRSQVMgKi8KLQlVQ0hBUiB1Y3RSQzsJCS8qICB0UkMgKi8KLQlVQ0hBUiB1Y3RSRkM7CQkvKiAgdFJGQyAqLwotCVVDSEFSIHVjdFJDRFI7CQkvKiAgdFJDRFIgKi8KLQlVQ0hBUiB1Y3RSQ0RXOwkJLyogIHRSQ0RXICovCi0JVUNIQVIgdWN0UlA7CQkvKiAgdFJQICovCi0JVUNIQVIgdWN0UlJEOwkJLyogIHRSUkQgKi8KLQlVQ0hBUiB1Y3RXUjsJCS8qICB0V1IgKi8KLQlVQ0hBUiB1Y3RXVFI7CQkvKiAgdFdUUiAqLwotCVVDSEFSIHVjdFBESVg7CQkvKiAgdFBESVggKi8KLQlVQ0hBUiB1Y3RGQVc7CQkvKiAgdEZBVyAqLwotCVVDSEFSIHVjdEFPTkQ7CQkvKiAgdEFPTkQgKi8KLQlVQ0hBUiB1Y2ZsYWc7CQkvKiAgZmxhZyB0byBjb250cm9sIG1lbW9yeSB0aW1pbmcgY2FsY3VsYXRpb24uIGJpdDA9IGNvbnRyb2wgRU1SUzIgSW5maW5lb24gKi8KLS8qIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vR0REUiBwYXJhbWV0ZXJzLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8gKi8KLQlVQ0hBUiB1Y3RDQ0RMOwkJLyogICovCi0JVUNIQVIgdWN0Q1JDUkw7CQkvKiAgKi8KLQlVQ0hBUiB1Y3RDUkNXTDsJCS8qICAqLwotCVVDSEFSIHVjdENLRTsJCS8qICAqLwotCVVDSEFSIHVjdENLUlNFOwkJLyogICovCi0JVUNIQVIgdWN0Q0tSU1g7CQkvKiAgKi8KLQlVQ0hBUiB1Y3RGQVczMjsJCS8qICAqLwotCVVDSEFSIHVjUmVzZXJ2ZWQxOwkvKiAgKi8KLQlVQ0hBUiB1Y1Jlc2VydmVkMjsJLyogICovCi0JVUNIQVIgdWNUZXJtaW5hdG9yOwotfSBBVE9NX01FTU9SWV9USU1JTkdfRk9STUFUX1YxOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9NRU1PUllfRk9STUFUIHsKLQlVTE9ORyB1bERsbERpc0Nsb2NrOwkvKiAgbWVtb3J5IERMTCB3aWxsIGJlIGRpc2FibGUgd2hlbiB0YXJnZXQgbWVtb3J5IGNsb2NrIGlzIGJlbG93IHRoaXMgY2xvY2sgKi8KLQl1bmlvbiB7Ci0JCVVTSE9SVCB1c0VNUlMyVmFsdWU7CS8qICBFTVJTMiBWYWx1ZSBpcyB1c2VkIGZvciBHRERSMiBhbmQgR0REUjQgbWVtb3J5IHR5cGUgKi8KLQkJVVNIT1JUIHVzRERSM19SZXNlcnZlZDsJLyogIE5vdCB1c2VkIGZvciBERFIzIG1lbW9yeSAqLwotCX07Ci0JdW5pb24gewotCQlVU0hPUlQgdXNFTVJTM1ZhbHVlOwkvKiAgRU1SUzMgVmFsdWUgaXMgdXNlZCBmb3IgR0REUjIgYW5kIEdERFI0IG1lbW9yeSB0eXBlICovCi0JCVVTSE9SVCB1c0REUjNfTVIzOwkvKiAgVXNlZCBmb3IgRERSMyBtZW1vcnkgKi8KLQl9OwotCVVDSEFSIHVjTWVtb3J5VHlwZTsJLyogIFs3OjRdPTB4MTpERFIxOz0weDI6RERSMjs9MHgzOkREUjM7PTB4NDpERFI0O1szOjBdIC0gbXVzdCBub3QgYmUgdXNlZCBmb3Igbm93OyAqLwotCVVDSEFSIHVjTWVtb3J5VmVuZGVySUQ7CS8qICBQcmVkZWZpbmVkLG5ldmVyIGNoYW5nZSBhY3Jvc3MgZGVzaWducyBvciBtZW1vcnkgdHlwZS92ZW5kZXIuIElmIG5vdCBwcmVkZWZpbmVkLCB2ZW5kb3IgZGV0ZWN0aW9uIHRhYmxlIGdldHMgZXhlY3V0ZWQgKi8KLQlVQ0hBUiB1Y1JvdzsJCS8qICBOdW1iZXIgb2YgUm93LGluIHBvd2VyIG9mIDI7ICovCi0JVUNIQVIgdWNDb2x1bW47CQkvKiAgTnVtYmVyIG9mIENvbHVtbixpbiBwb3dlciBvZiAyOyAqLwotCVVDSEFSIHVjQmFuazsJCS8qICBOdW5iZXIgb2YgQmFuazsgKi8KLQlVQ0hBUiB1Y1Jhbms7CQkvKiAgTnVtYmVyIG9mIFJhbmssIGluIHBvd2VyIG9mIDIgKi8KLQlVQ0hBUiB1Y0J1cnN0U2l6ZTsJLyogIGJ1cnN0IHNpemUsIDA9IGJ1cnN0IHNpemU9NCAgMT0gYnVyc3Qgc2l6ZT04ICovCi0JVUNIQVIgdWNEbGxEaXNCaXQ7CS8qICBwb3NpdGlvbiBvZiBETEwgRW5hYmxlL0Rpc2FibGUgYml0IGluIEVNUlMgKCBFeHRlbmRlZCBNb2RlIFJlZ2lzdGVyICkgKi8KLQlVQ0hBUiB1Y1JlZnJlc2hSYXRlRmFjdG9yOwkvKiAgbWVtb3J5IHJlZnJlc2ggcmF0ZSBpbiB1bml0IG9mIG1zICovCi0JVUNIQVIgdWNEZW5zaXR5OwkvKiAgXzhNeDMyLCBfMTZNeDMyLCBfMTZNeDE2LCBfMzJNeDE2ICovCi0JVUNIQVIgdWNQcmVhbWJsZTsJLyogWzc6NF0gV3JpdGUgUHJlYW1ibGUsIFszOjBdIFJlYWQgUHJlYW1ibGUgKi8KLQlVQ0hBUiB1Y01lbUF0dHJpYjsJLyogIE1lbW9yeSBEZXZpY2UgQWRkcmlidXRlLCBsaWtlIFJEQkkvV0RCSSBldGMgKi8KLQlBVE9NX01FTU9SWV9USU1JTkdfRk9STUFUIGFzTWVtVGltaW5nWzVdOwkvKiBNZW1vcnkgVGltaW5nIGJsb2NrIHNvcnQgZnJvbSBsb3dlciBjbG9jayB0byBoaWdoZXIgY2xvY2sgKi8KLX0gQVRPTV9NRU1PUllfRk9STUFUOwordHlwZWRlZglzdHJ1Y3QgX0FUT01fTUVNT1JZX1RJTUlOR19GT1JNQVQKK3sKKwlVTE9ORwkJCQkJCQkJCQkJIHVsQ2xrUmFuZ2U7CQkJCS8vIG1lbW9yeSBjbG9jayBpbiAxMGtIeiB1bml0LCB3aGVuIHRhcmdldCBtZW1vcnkgY2xvY2sgaXMgYmVsb3cgdGhpcyBjbG9jaywgdXNlIHRoaXMgbWVtb3J5IHRpbWluZyAJCisgIHVuaW9ueworCSAgVVNIT1JUCQkJCQkJCQkJCSB1c01SUzsJCQkJCQkJLy8gbW9kZSByZWdpc3RlcgkJCQkJCQorICAgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzRERSM19NUjA7CisgIH07CisgIHVuaW9ueworCSAgVVNIT1JUCQkJCQkJCQkJCSB1c0VNUlM7CQkJCQkJLy8gZXh0ZW5kZWQgbW9kZSByZWdpc3RlcgorICAgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzRERSM19NUjE7CisgIH07CisJVUNIQVIJCQkJCQkJCQkJCSB1Y0NMOwkJCQkJCQkvLyBDQVMgbGF0ZW5jeQorCVVDSEFSCQkJCQkJCQkJCQkgdWNXTDsJCQkJCQkJLy8gV1JJVEUgTGF0ZW5jeQkJCQkKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFJBUzsJCQkJCQkvLyB0UkFTCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSQzsJCQkJCQkJLy8gdFJDCQorCVVDSEFSCQkJCQkJCQkJCQkgdWN0UkZDOwkJCQkJCS8vIHRSRkMKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFJDRFI7CQkJCQkJLy8gdFJDRFIJCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSQ0RXOwkJCQkJCS8vIHRSQ0RXCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSUDsJCQkJCQkJLy8gdFJQCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSUkQ7CQkJCQkJLy8gdFJSRAkKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFdSOwkJCQkJCQkvLyB0V1IKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFdUUjsJCQkJCQkvLyB0V1RSCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RQRElYOwkJCQkJCS8vIHRQRElYCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RGQVc7CQkJCQkJLy8gdEZBVworCVVDSEFSCQkJCQkJCQkJCQkgdWN0QU9ORDsJCQkJCQkvLyB0QU9ORAorICB1bmlvbiAKKyAgeworICAgIHN0cnVjdCB7CisJICAgIFVDSEFSCQkJCQkJCQkJCQkgdWNmbGFnOwkJCQkJCS8vIGZsYWcgdG8gY29udHJvbCBtZW1vcnkgdGltaW5nIGNhbGN1bGF0aW9uLiBiaXQwPSBjb250cm9sIEVNUlMyIEluZmluZW9uIAorCSAgICBVQ0hBUgkJCQkJCQkJCQkJIHVjUmVzZXJ2ZWQ7CQkJCQkJCisgICAgfTsKKyAgICBVU0hPUlQgICAgICAgICAgICAgICAgICAgdXNERFIzX01SMjsKKyAgfTsKK31BVE9NX01FTU9SWV9USU1JTkdfRk9STUFUOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX01PRFVMRV9WMyB7Ci0JVUxPTkcgdWxDaGFubmVsTWFwQ2ZnOwkvKiAgYm9hcmQgZGVwZW5kZW50IHBhcmFtZW50ZXI6Q2hhbm5lbCBjb21iaW5hdGlvbiAqLwotCVVTSE9SVCB1c1NpemU7CQkvKiAgc2l6ZSBvZiBBVE9NX1ZSQU1fTU9EVUxFX1YzICovCi0JVVNIT1JUIHVzRGVmYXVsdE1WRERROwkvKiAgYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcjpEZWZhdWx0IE1lbW9yeSBDb3JlIFZvbHRhZ2UgKi8KLQlVU0hPUlQgdXNEZWZhdWx0TVZEREM7CS8qICBib2FyZCBkZXBlbmRlbnQgcGFyYW1ldGVyOkRlZmF1bHQgTWVtb3J5IElPIFZvbHRhZ2UgKi8KLQlVQ0hBUiB1Y0V4dE1lbW9yeUlEOwkvKiAgQW4gZXh0ZXJuYWwgaW5kaWNhdG9yIChieSBoYXJkY29kZSwgY2FsbGJhY2sgb3IgcGluKSB0byB0ZWxsIHdoYXQgaXMgdGhlIGN1cnJlbnQgbWVtb3J5IG1vZHVsZSAqLwotCVVDSEFSIHVjQ2hhbm5lbE51bTsJLyogIGJvYXJkIGRlcGVuZGVudCBwYXJhbWV0ZXI6TnVtYmVyIG9mIGNoYW5uZWw7ICovCi0JVUNIQVIgdWNDaGFubmVsU2l6ZTsJLyogIGJvYXJkIGRlcGVuZGVudCBwYXJhbWV0ZXI6MzJiaXQgb3IgNjRiaXQgKi8KLQlVQ0hBUiB1Y1ZSRUZJOwkJLyogIGJvYXJkIGRlcGVuZG50IHBhcmFtZXRlcjogRVhUIG9yIElOVCArMTYwbXYgdG8gLTE0MG12ICovCi0JVUNIQVIgdWNOUExfUlQ7CQkvKiAgYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcjpOUEwgcm91bmQgdHJpcCBkZWxheSwgdXNlZCBmb3IgY2FsY3VsYXRlIG1lbW9yeSB0aW1pbmcgcGFyYW1ldGVycyAqLwotCVVDSEFSIHVjRmxhZzsJCS8qICBUbyBlbmFibGUvZGlzYWJsZSBmdW5jdGlvbmFsaXRpZXMgYmFzZWQgb24gbWVtb3J5IHR5cGUgKi8KLQlBVE9NX01FTU9SWV9GT1JNQVQgYXNNZW1vcnk7CS8qICBkZXNjcmliIGFsbCBvZiB2aWRlbyBtZW1vcnkgcGFyYW1ldGVycyBmcm9tIG1lbW9yeSBzcGVjICovCi19IEFUT01fVlJBTV9NT0RVTEVfVjM7CiAKLS8qIEFUT01fVlJBTV9NT0RVTEVfVjMudWNOUExfUlQgKi8KK3R5cGVkZWYJc3RydWN0IF9BVE9NX01FTU9SWV9USU1JTkdfRk9STUFUX1YxCit7CisJVUxPTkcJCQkJCQkJCQkJCSB1bENsa1JhbmdlOwkJCQkvLyBtZW1vcnkgY2xvY2sgaW4gMTBrSHogdW5pdCwgd2hlbiB0YXJnZXQgbWVtb3J5IGNsb2NrIGlzIGJlbG93IHRoaXMgY2xvY2ssIHVzZSB0aGlzIG1lbW9yeSB0aW1pbmcgCQorCVVTSE9SVAkJCQkJCQkJCQkgdXNNUlM7CQkJCQkJCS8vIG1vZGUgcmVnaXN0ZXIJCQkJCQkKKwlVU0hPUlQJCQkJCQkJCQkJIHVzRU1SUzsJCQkJCQkvLyBleHRlbmRlZCBtb2RlIHJlZ2lzdGVyCisJVUNIQVIJCQkJCQkJCQkJCSB1Y0NMOwkJCQkJCQkvLyBDQVMgbGF0ZW5jeQorCVVDSEFSCQkJCQkJCQkJCQkgdWNXTDsJCQkJCQkJLy8gV1JJVEUgTGF0ZW5jeQkJCQkKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFJBUzsJCQkJCQkvLyB0UkFTCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSQzsJCQkJCQkJLy8gdFJDCQorCVVDSEFSCQkJCQkJCQkJCQkgdWN0UkZDOwkJCQkJCS8vIHRSRkMKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFJDRFI7CQkJCQkJLy8gdFJDRFIJCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSQ0RXOwkJCQkJCS8vIHRSQ0RXCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSUDsJCQkJCQkJLy8gdFJQCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSUkQ7CQkJCQkJLy8gdFJSRAkKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFdSOwkJCQkJCQkvLyB0V1IKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFdUUjsJCQkJCQkvLyB0V1RSCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RQRElYOwkJCQkJCS8vIHRQRElYCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RGQVc7CQkJCQkJLy8gdEZBVworCVVDSEFSCQkJCQkJCQkJCQkgdWN0QU9ORDsJCQkJCQkvLyB0QU9ORAorCVVDSEFSCQkJCQkJCQkJCQkgdWNmbGFnOwkJCQkJCS8vIGZsYWcgdG8gY29udHJvbCBtZW1vcnkgdGltaW5nIGNhbGN1bGF0aW9uLiBiaXQwPSBjb250cm9sIEVNUlMyIEluZmluZW9uIAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vR0REUiBwYXJhbWV0ZXJzLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdENDREw7CQkJCQkJLy8gCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RDUkNSTDsJCQkJCQkvLyAKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdENSQ1dMOwkJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWN0Q0tFOwkJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWN0Q0tSU0U7CQkJCQkJLy8gCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RDS1JTWDsJCQkJCQkvLyAKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdEZBVzMyOwkJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWNNUjVsbzsJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWNNUjVoaTsJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWNUZXJtaW5hdG9yOworfUFUT01fTUVNT1JZX1RJTUlOR19GT1JNQVRfVjE7CisKK3R5cGVkZWYJc3RydWN0IF9BVE9NX01FTU9SWV9USU1JTkdfRk9STUFUX1YyCit7CisJVUxPTkcJCQkJCQkJCQkJCSB1bENsa1JhbmdlOwkJCQkvLyBtZW1vcnkgY2xvY2sgaW4gMTBrSHogdW5pdCwgd2hlbiB0YXJnZXQgbWVtb3J5IGNsb2NrIGlzIGJlbG93IHRoaXMgY2xvY2ssIHVzZSB0aGlzIG1lbW9yeSB0aW1pbmcgCQorCVVTSE9SVAkJCQkJCQkJCQkgdXNNUlM7CQkJCQkJCS8vIG1vZGUgcmVnaXN0ZXIJCQkJCQkKKwlVU0hPUlQJCQkJCQkJCQkJIHVzRU1SUzsJCQkJCQkvLyBleHRlbmRlZCBtb2RlIHJlZ2lzdGVyCisJVUNIQVIJCQkJCQkJCQkJCSB1Y0NMOwkJCQkJCQkvLyBDQVMgbGF0ZW5jeQorCVVDSEFSCQkJCQkJCQkJCQkgdWNXTDsJCQkJCQkJLy8gV1JJVEUgTGF0ZW5jeQkJCQkKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFJBUzsJCQkJCQkvLyB0UkFTCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSQzsJCQkJCQkJLy8gdFJDCQorCVVDSEFSCQkJCQkJCQkJCQkgdWN0UkZDOwkJCQkJCS8vIHRSRkMKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFJDRFI7CQkJCQkJLy8gdFJDRFIJCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSQ0RXOwkJCQkJCS8vIHRSQ0RXCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSUDsJCQkJCQkJLy8gdFJQCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RSUkQ7CQkJCQkJLy8gdFJSRAkKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFdSOwkJCQkJCQkvLyB0V1IKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdFdUUjsJCQkJCQkvLyB0V1RSCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RQRElYOwkJCQkJCS8vIHRQRElYCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RGQVc7CQkJCQkJLy8gdEZBVworCVVDSEFSCQkJCQkJCQkJCQkgdWN0QU9ORDsJCQkJCQkvLyB0QU9ORAorCVVDSEFSCQkJCQkJCQkJCQkgdWNmbGFnOwkJCQkJCS8vIGZsYWcgdG8gY29udHJvbCBtZW1vcnkgdGltaW5nIGNhbGN1bGF0aW9uLiBiaXQwPSBjb250cm9sIEVNUlMyIEluZmluZW9uIAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vR0REUiBwYXJhbWV0ZXJzLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdENDREw7CQkJCQkJLy8gCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RDUkNSTDsJCQkJCQkvLyAKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdENSQ1dMOwkJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWN0Q0tFOwkJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWN0Q0tSU0U7CQkJCQkJLy8gCisJVUNIQVIJCQkJCQkJCQkJCSB1Y3RDS1JTWDsJCQkJCQkvLyAKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjdEZBVzMyOwkJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWNNUjRsbzsJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWNNUjRoaTsJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWNNUjVsbzsJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWNNUjVoaTsJCQkJCS8vIAorCVVDSEFSCQkJCQkJCQkJCQkgdWNUZXJtaW5hdG9yOworCVVDSEFSCQkJCQkJCQkJCQkgdWNSZXNlcnZlZDsJCit9QVRPTV9NRU1PUllfVElNSU5HX0ZPUk1BVF9WMjsKKwordHlwZWRlZglzdHJ1Y3QgX0FUT01fTUVNT1JZX0ZPUk1BVAoreworCVVMT05HCQkJCQkJCQkJCQkgdWxEbGxEaXNDbG9jazsJCQkvLyBtZW1vcnkgRExMIHdpbGwgYmUgZGlzYWJsZSB3aGVuIHRhcmdldCBtZW1vcnkgY2xvY2sgaXMgYmVsb3cgdGhpcyBjbG9jaworICB1bmlvbnsKKyAgICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c0VNUlMyVmFsdWU7ICAgICAgLy8gRU1SUzIgVmFsdWUgaXMgdXNlZCBmb3IgR0REUjIgYW5kIEdERFI0IG1lbW9yeSB0eXBlCisgICAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNERFIzX1Jlc2VydmVkOyAgIC8vIE5vdCB1c2VkIGZvciBERFIzIG1lbW9yeQorICB9OworICB1bmlvbnsKKyAgICBVU0hPUlQgICAgICAgICAgICAgICAgICAgICB1c0VNUlMzVmFsdWU7ICAgICAgLy8gRU1SUzMgVmFsdWUgaXMgdXNlZCBmb3IgR0REUjIgYW5kIEdERFI0IG1lbW9yeSB0eXBlCisgICAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNERFIzX01SMzsgICAgICAgIC8vIFVzZWQgZm9yIEREUjMgbWVtb3J5CisgIH07CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjTWVtb3J5VHlwZTsgICAgICAvLyBbNzo0XT0weDE6RERSMTs9MHgyOkREUjI7PTB4MzpERFIzOz0weDQ6RERSNDtbMzowXSAtIG11c3Qgbm90IGJlIHVzZWQgZm9yIG5vdzsKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNNZW1vcnlWZW5kZXJJRDsgIC8vIFByZWRlZmluZWQsbmV2ZXIgY2hhbmdlIGFjcm9zcyBkZXNpZ25zIG9yIG1lbW9yeSB0eXBlL3ZlbmRlci4gSWYgbm90IHByZWRlZmluZWQsIHZlbmRvciBkZXRlY3Rpb24gdGFibGUgZ2V0cyBleGVjdXRlZAorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y1JvdzsgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIFJvdyxpbiBwb3dlciBvZiAyOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0NvbHVtbjsgICAgICAgICAgLy8gTnVtYmVyIG9mIENvbHVtbixpbiBwb3dlciBvZiAyOworICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0Jhbms7ICAgICAgICAgICAgLy8gTnVuYmVyIG9mIEJhbms7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjUmFuazsgICAgICAgICAgICAvLyBOdW1iZXIgb2YgUmFuaywgaW4gcG93ZXIgb2YgMgorCVVDSEFSCQkJCQkJCQkJCQkgdWNCdXJzdFNpemU7CQkJCS8vIGJ1cnN0IHNpemUsIDA9IGJ1cnN0IHNpemU9NCAgMT0gYnVyc3Qgc2l6ZT04CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjRGxsRGlzQml0OwkJCQkvLyBwb3NpdGlvbiBvZiBETEwgRW5hYmxlL0Rpc2FibGUgYml0IGluIEVNUlMgKCBFeHRlbmRlZCBNb2RlIFJlZ2lzdGVyICkKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNSZWZyZXNoUmF0ZUZhY3RvcjsJLy8gbWVtb3J5IHJlZnJlc2ggcmF0ZSBpbiB1bml0IG9mIG1zCQorCVVDSEFSCQkJCQkJCQkJCQkgdWNEZW5zaXR5OwkJCQkJLy8gXzhNeDMyLCBfMTZNeDMyLCBfMTZNeDE2LCBfMzJNeDE2CisJVUNIQVIJCQkJCQkJCQkJCSB1Y1ByZWFtYmxlOwkJCQkvL1s3OjRdIFdyaXRlIFByZWFtYmxlLCBbMzowXSBSZWFkIFByZWFtYmxlCisgIFVDSEFSCQkJCQkJCQkJCQkgdWNNZW1BdHRyaWI7CQkJCS8vIE1lbW9yeSBEZXZpY2UgQWRkcmlidXRlLCBsaWtlIFJEQkkvV0RCSSBldGMKKwlBVE9NX01FTU9SWV9USU1JTkdfRk9STUFUCSBhc01lbVRpbWluZ1s1XTsJCS8vTWVtb3J5IFRpbWluZyBibG9jayBzb3J0IGZyb20gbG93ZXIgY2xvY2sgdG8gaGlnaGVyIGNsb2NrCit9QVRPTV9NRU1PUllfRk9STUFUOworCisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1ZSQU1fTU9EVUxFX1YzCit7CisJVUxPTkcJCQkJCQkJCQkJCSB1bENoYW5uZWxNYXBDZmc7CQkvLyBib2FyZCBkZXBlbmRlbnQgcGFyYW1lbnRlcjpDaGFubmVsIGNvbWJpbmF0aW9uCisJVVNIT1JUCQkJCQkJCQkJCSB1c1NpemU7CQkJCQkJLy8gc2l6ZSBvZiBBVE9NX1ZSQU1fTU9EVUxFX1YzCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzRGVmYXVsdE1WRERROwkJLy8gYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcjpEZWZhdWx0IE1lbW9yeSBDb3JlIFZvbHRhZ2UKKyAgVVNIT1JUICAgICAgICAgICAgICAgICAgICAgdXNEZWZhdWx0TVZEREM7CQkvLyBib2FyZCBkZXBlbmRlbnQgcGFyYW1ldGVyOkRlZmF1bHQgTWVtb3J5IElPIFZvbHRhZ2UKKwlVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0V4dE1lbW9yeUlEOyAgICAgLy8gQW4gZXh0ZXJuYWwgaW5kaWNhdG9yIChieSBoYXJkY29kZSwgY2FsbGJhY2sgb3IgcGluKSB0byB0ZWxsIHdoYXQgaXMgdGhlIGN1cnJlbnQgbWVtb3J5IG1vZHVsZQorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y0NoYW5uZWxOdW07ICAgICAgLy8gYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcjpOdW1iZXIgb2YgY2hhbm5lbDsKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjQ2hhbm5lbFNpemU7CQkJLy8gYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcjozMmJpdCBvciA2NGJpdAkKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjVlJFRkk7CQkJCQkJLy8gYm9hcmQgZGVwZW5kbnQgcGFyYW1ldGVyOiBFWFQgb3IgSU5UICsxNjBtdiB0byAtMTQwbXYKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjTlBMX1JUOwkJCQkJLy8gYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcjpOUEwgcm91bmQgdHJpcCBkZWxheSwgdXNlZCBmb3IgY2FsY3VsYXRlIG1lbW9yeSB0aW1pbmcgcGFyYW1ldGVycworCVVDSEFSCQkJCQkJCQkJCQkgdWNGbGFnOwkJCQkJCS8vIFRvIGVuYWJsZS9kaXNhYmxlIGZ1bmN0aW9uYWxpdGllcyBiYXNlZCBvbiBtZW1vcnkgdHlwZQorCUFUT01fTUVNT1JZX0ZPUk1BVAkJCQkgYXNNZW1vcnk7CQkJCQkvLyBkZXNjcmliIGFsbCBvZiB2aWRlbyBtZW1vcnkgcGFyYW1ldGVycyBmcm9tIG1lbW9yeSBzcGVjCit9QVRPTV9WUkFNX01PRFVMRV9WMzsKKworCisvL0FUT01fVlJBTV9NT0RVTEVfVjMudWNOUExfUlQKICNkZWZpbmUgTlBMX1JUX01BU0sJCQkJCQkJCQkJCQkJCQkweDBmCiAjZGVmaW5lIEJBVFRFUllfT0RUX01BU0sJCQkJCQkJCQkJCQkweGMwCiAKICNkZWZpbmUgQVRPTV9WUkFNX01PRFVMRQkJIEFUT01fVlJBTV9NT0RVTEVfVjMKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fVlJBTV9NT0RVTEVfVjQgewotCVVMT05HIHVsQ2hhbm5lbE1hcENmZzsJLyogIGJvYXJkIGRlcGVuZGVudCBwYXJhbWV0ZXI6IENoYW5uZWwgY29tYmluYXRpb24gKi8KLQlVU0hPUlQgdXNNb2R1bGVTaXplOwkvKiAgc2l6ZSBvZiBBVE9NX1ZSQU1fTU9EVUxFX1Y0LCBtYWtlIGl0IGVhc3kgZm9yIFZCSU9TIHRvIGxvb2sgZm9yIG5leHQgZW50cnkgb2YgVlJBTV9NT0RVTEUgKi8KLQlVU0hPUlQgdXNQcml2YXRlUmVzZXJ2ZWQ7CS8qICBCSU9TIGludGVybmFsIHJlc2VydmVkIHNwYWNlIHRvIG9wdGltaXplIGNvZGUgc2l6ZSwgdXBkYXRlZCBieSB0aGUgY29tcGlsZXIsIHNob3VsZG4ndCBiZSBtb2RpZmllZCBtYW51YWxseSEhICovCi0JLyogIE1DX0FSQl9SQU1DRkcgKGluY2x1ZGVzIE5PT0ZCQU5LLE5PT0ZSQU5LUyxOT09GUk9XUyxOT09GQ09MUykgKi8KLQlVU0hPUlQgdXNSZXNlcnZlZDsKLQlVQ0hBUiB1Y0V4dE1lbW9yeUlEOwkvKiAgQW4gZXh0ZXJuYWwgaW5kaWNhdG9yIChieSBoYXJkY29kZSwgY2FsbGJhY2sgb3IgcGluKSB0byB0ZWxsIHdoYXQgaXMgdGhlIGN1cnJlbnQgbWVtb3J5IG1vZHVsZSAqLwotCVVDSEFSIHVjTWVtb3J5VHlwZTsJLyogIFs3OjRdPTB4MTpERFIxOz0weDI6RERSMjs9MHgzOkREUjM7PTB4NDpERFI0OyAweDU6RERSNSBbMzowXSAtIE11c3QgYmUgMHgwIGZvciBub3c7ICovCi0JVUNIQVIgdWNDaGFubmVsTnVtOwkvKiAgTnVtYmVyIG9mIGNoYW5uZWxzIHByZXNlbnQgaW4gdGhpcyBtb2R1bGUgY29uZmlnICovCi0JVUNIQVIgdWNDaGFubmVsV2lkdGg7CS8qICAwIC0gMzIgYml0czsgMSAtIDY0IGJpdHMgKi8KLQlVQ0hBUiB1Y0RlbnNpdHk7CS8qICBfOE14MzIsIF8xNk14MzIsIF8xNk14MTYsIF8zMk14MTYgKi8KLQlVQ0hBUiB1Y0ZsYWc7CQkvKiAgVG8gZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25hbGl0aWVzIGJhc2VkIG9uIG1lbW9yeSB0eXBlICovCi0JVUNIQVIgdWNNaXNjOwkJLyogIGJpdDA6IDAgLSBzaW5nbGUgcmFuazsgMSAtIGR1YWwgcmFuazsgICBiaXQyOiAwIC0gYnVyc3RsZW5ndGggNCwgMSAtIGJ1cnN0bGVuZ3RoIDggKi8KLQlVQ0hBUiB1Y1ZSRUZJOwkJLyogIGJvYXJkIGRlcGVuZGVudCBwYXJhbWV0ZXIgKi8KLQlVQ0hBUiB1Y05QTF9SVDsJCS8qICBib2FyZCBkZXBlbmRlbnQgcGFyYW1ldGVyOk5QTCByb3VuZCB0cmlwIGRlbGF5LCB1c2VkIGZvciBjYWxjdWxhdGUgbWVtb3J5IHRpbWluZyBwYXJhbWV0ZXJzICovCi0JVUNIQVIgdWNQcmVhbWJsZTsJLyogIFs3OjRdIFdyaXRlIFByZWFtYmxlLCBbMzowXSBSZWFkIFByZWFtYmxlICovCi0JVUNIQVIgdWNNZW1vcnlTaXplOwkvKiAgQklPUyBpbnRlcm5hbCByZXNlcnZlZCBzcGFjZSB0byBvcHRpbWl6ZSBjb2RlIHNpemUsIHVwZGF0ZWQgYnkgdGhlIGNvbXBpbGVyLCBzaG91bGRuJ3QgYmUgbW9kaWZpZWQgbWFudWFsbHkhISAqLwotCS8qICBUb3RhbCBtZW1vcnkgc2l6ZSBpbiB1bml0IG9mIDE2TUIgZm9yIENPTkZJR19NRU1TSVpFIC0gYml0WzIzOjBdIHplcm9zICovCi0JVUNIQVIgdWNSZXNlcnZlZFszXTsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1ZSQU1fTU9EVUxFX1Y0Cit7CisgIFVMT05HCSAgdWxDaGFubmVsTWFwQ2ZnOwkgICAgICAgICAgICAgICAgLy8gYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcjogQ2hhbm5lbCBjb21iaW5hdGlvbgorICBVU0hPUlQgIHVzTW9kdWxlU2l6ZTsgICAgICAgICAgICAgICAgICAgICAvLyBzaXplIG9mIEFUT01fVlJBTV9NT0RVTEVfVjQsIG1ha2UgaXQgZWFzeSBmb3IgVkJJT1MgdG8gbG9vayBmb3IgbmV4dCBlbnRyeSBvZiBWUkFNX01PRFVMRQorICBVU0hPUlQgIHVzUHJpdmF0ZVJlc2VydmVkOyAgICAgICAgICAgICAgICAvLyBCSU9TIGludGVybmFsIHJlc2VydmVkIHNwYWNlIHRvIG9wdGltaXplIGNvZGUgc2l6ZSwgdXBkYXRlZCBieSB0aGUgY29tcGlsZXIsIHNob3VsZG4ndCBiZSBtb2RpZmllZCBtYW51YWxseSEhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1DX0FSQl9SQU1DRkcgKGluY2x1ZGVzIE5PT0ZCQU5LLE5PT0ZSQU5LUyxOT09GUk9XUyxOT09GQ09MUykKKyAgVVNIT1JUICB1c1Jlc2VydmVkOworICBVQ0hBUiAgIHVjRXh0TWVtb3J5SUQ7ICAgIAkJICAgICAgICAgICAgLy8gQW4gZXh0ZXJuYWwgaW5kaWNhdG9yIChieSBoYXJkY29kZSwgY2FsbGJhY2sgb3IgcGluKSB0byB0ZWxsIHdoYXQgaXMgdGhlIGN1cnJlbnQgbWVtb3J5IG1vZHVsZQorICBVQ0hBUiAgIHVjTWVtb3J5VHlwZTsgICAgICAgICAgICAgICAgICAgICAvLyBbNzo0XT0weDE6RERSMTs9MHgyOkREUjI7PTB4MzpERFIzOz0weDQ6RERSNDsgMHg1OkREUjUgWzM6MF0gLSBNdXN0IGJlIDB4MCBmb3Igbm93OworICBVQ0hBUiAgIHVjQ2hhbm5lbE51bTsgICAgICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgb2YgY2hhbm5lbHMgcHJlc2VudCBpbiB0aGlzIG1vZHVsZSBjb25maWcKKyAgVUNIQVIgICB1Y0NoYW5uZWxXaWR0aDsgICAgICAgICAgICAgICAgICAgLy8gMCAtIDMyIGJpdHM7IDEgLSA2NCBiaXRzCisJVUNIQVIgICB1Y0RlbnNpdHk7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gXzhNeDMyLCBfMTZNeDMyLCBfMTZNeDE2LCBfMzJNeDE2CisJVUNIQVIJICB1Y0ZsYWc7CQkJCQkJICAgICAgICAgICAgICAgIC8vIFRvIGVuYWJsZS9kaXNhYmxlIGZ1bmN0aW9uYWxpdGllcyBiYXNlZCBvbiBtZW1vcnkgdHlwZQorCVVDSEFSCSAgdWNNaXNjOwkJCQkJCSAgICAgICAgICAgICAgICAvLyBiaXQwOiAwIC0gc2luZ2xlIHJhbms7IDEgLSBkdWFsIHJhbms7ICAgYml0MjogMCAtIGJ1cnN0bGVuZ3RoIDQsIDEgLSBidXJzdGxlbmd0aCA4CisgIFVDSEFSCQl1Y1ZSRUZJOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcgorICBVQ0hBUiAgIHVjTlBMX1JUOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBib2FyZCBkZXBlbmRlbnQgcGFyYW1ldGVyOk5QTCByb3VuZCB0cmlwIGRlbGF5LCB1c2VkIGZvciBjYWxjdWxhdGUgbWVtb3J5IHRpbWluZyBwYXJhbWV0ZXJzCisgIFVDSEFSCQl1Y1ByZWFtYmxlOyAgICAgICAgICAgICAgICAgICAgICAgLy8gWzc6NF0gV3JpdGUgUHJlYW1ibGUsIFszOjBdIFJlYWQgUHJlYW1ibGUKKyAgVUNIQVIgICB1Y01lbW9yeVNpemU7ICAgICAgICAgICAgICAgICAgICAgLy8gQklPUyBpbnRlcm5hbCByZXNlcnZlZCBzcGFjZSB0byBvcHRpbWl6ZSBjb2RlIHNpemUsIHVwZGF0ZWQgYnkgdGhlIGNvbXBpbGVyLCBzaG91bGRuJ3QgYmUgbW9kaWZpZWQgbWFudWFsbHkhIQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUb3RhbCBtZW1vcnkgc2l6ZSBpbiB1bml0IG9mIDE2TUIgZm9yIENPTkZJR19NRU1TSVpFIC0gYml0WzIzOjBdIHplcm9zCisgIFVDSEFSICAgdWNSZXNlcnZlZFszXTsKIAotLyogY29tcGFyZSB3aXRoIFYzLCB3ZSBmbGF0IHRoZSBzdHJ1Y3QgYnkgbWVyZ2luZyBBVE9NX01FTU9SWV9GT1JNQVQgKGFzIGlzKSBpbnRvIFY0IGFzIHRoZSBzYW1lIGxldmVsICovCi0JdW5pb24gewotCQlVU0hPUlQgdXNFTVJTMlZhbHVlOwkvKiAgRU1SUzIgVmFsdWUgaXMgdXNlZCBmb3IgR0REUjIgYW5kIEdERFI0IG1lbW9yeSB0eXBlICovCi0JCVVTSE9SVCB1c0REUjNfUmVzZXJ2ZWQ7Ci0JfTsKLQl1bmlvbiB7Ci0JCVVTSE9SVCB1c0VNUlMzVmFsdWU7CS8qICBFTVJTMyBWYWx1ZSBpcyB1c2VkIGZvciBHRERSMiBhbmQgR0REUjQgbWVtb3J5IHR5cGUgKi8KLQkJVVNIT1JUIHVzRERSM19NUjM7CS8qICBVc2VkIGZvciBERFIzIG1lbW9yeSAqLwotCX07Ci0JVUNIQVIgdWNNZW1vcnlWZW5kZXJJRDsJLyogIFByZWRlZmluZWQsIElmIG5vdCBwcmVkZWZpbmVkLCB2ZW5kb3IgZGV0ZWN0aW9uIHRhYmxlIGdldHMgZXhlY3V0ZWQgKi8KLQlVQ0hBUiB1Y1JlZnJlc2hSYXRlRmFjdG9yOwkvKiAgWzE6MF09UmVmcmVzaEZhY3RvciAoMDA9OG1zLCAwMT0xNm1zLCAxMD0zMm1zLDExPTY0bXMpICovCi0JVUNIQVIgdWNSZXNlcnZlZDJbMl07Ci0JQVRPTV9NRU1PUllfVElNSU5HX0ZPUk1BVCBhc01lbVRpbWluZ1s1XTsJLyogTWVtb3J5IFRpbWluZyBibG9jayBzb3J0IGZyb20gbG93ZXIgY2xvY2sgdG8gaGlnaGVyIGNsb2NrICovCi19IEFUT01fVlJBTV9NT0RVTEVfVjQ7CisvL2NvbXBhcmUgd2l0aCBWMywgd2UgZmxhdCB0aGUgc3RydWN0IGJ5IG1lcmdpbmcgQVRPTV9NRU1PUllfRk9STUFUIChhcyBpcykgaW50byBWNCBhcyB0aGUgc2FtZSBsZXZlbAorICB1bmlvbnsKKyAgICBVU0hPUlQJdXNFTVJTMlZhbHVlOyAgICAgICAgICAgICAgICAgICAvLyBFTVJTMiBWYWx1ZSBpcyB1c2VkIGZvciBHRERSMiBhbmQgR0REUjQgbWVtb3J5IHR5cGUKKyAgICBVU0hPUlQgIHVzRERSM19SZXNlcnZlZDsKKyAgfTsKKyAgdW5pb257CisgICAgVVNIT1JUCXVzRU1SUzNWYWx1ZTsgICAgICAgICAgICAgICAgICAgLy8gRU1SUzMgVmFsdWUgaXMgdXNlZCBmb3IgR0REUjIgYW5kIEdERFI0IG1lbW9yeSB0eXBlCisgICAgVVNIT1JUICB1c0REUjNfTVIzOyAgICAgICAgICAgICAgICAgICAgIC8vIFVzZWQgZm9yIEREUjMgbWVtb3J5CisgIH07ICAKKyAgVUNIQVIgICB1Y01lbW9yeVZlbmRlcklEOyAgCQkgICAgICAgICAgICAvLyBQcmVkZWZpbmVkLCBJZiBub3QgcHJlZGVmaW5lZCwgdmVuZG9yIGRldGVjdGlvbiB0YWJsZSBnZXRzIGV4ZWN1dGVkCisgIFVDSEFSCSAgdWNSZWZyZXNoUmF0ZUZhY3RvcjsgICAgICAgICAgICAgIC8vIFsxOjBdPVJlZnJlc2hGYWN0b3IgKDAwPThtcywgMDE9MTZtcywgMTA9MzJtcywxMT02NG1zKQorICBVQ0hBUiAgIHVjUmVzZXJ2ZWQyWzJdOworICBBVE9NX01FTU9SWV9USU1JTkdfRk9STUFUICBhc01lbVRpbWluZ1s1XTsvL01lbW9yeSBUaW1pbmcgYmxvY2sgc29ydCBmcm9tIGxvd2VyIGNsb2NrIHRvIGhpZ2hlciBjbG9jaworfUFUT01fVlJBTV9NT0RVTEVfVjQ7CiAKICNkZWZpbmUgVlJBTV9NT0RVTEVfVjRfTUlTQ19SQU5LX01BU0sgICAgICAgMHgzCiAjZGVmaW5lIFZSQU1fTU9EVUxFX1Y0X01JU0NfRFVBTF9SQU5LICAgICAgIDB4MQpAQCAtMzk3Myw5NiArNDg0MSwxMzkgQEAKICNkZWZpbmUgVlJBTV9NT0RVTEVfVjRfTUlTQ19CTDggICAgICAgICAgICAgMHg0CiAjZGVmaW5lIFZSQU1fTU9EVUxFX1Y0X01JU0NfRFVBTF9DUyAgICAgICAgIDB4MTAKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fVlJBTV9NT0RVTEVfVjUgewotCVVMT05HIHVsQ2hhbm5lbE1hcENmZzsJLyogIGJvYXJkIGRlcGVuZGVudCBwYXJhbWV0ZXI6IENoYW5uZWwgY29tYmluYXRpb24gKi8KLQlVU0hPUlQgdXNNb2R1bGVTaXplOwkvKiAgc2l6ZSBvZiBBVE9NX1ZSQU1fTU9EVUxFX1Y0LCBtYWtlIGl0IGVhc3kgZm9yIFZCSU9TIHRvIGxvb2sgZm9yIG5leHQgZW50cnkgb2YgVlJBTV9NT0RVTEUgKi8KLQlVU0hPUlQgdXNQcml2YXRlUmVzZXJ2ZWQ7CS8qICBCSU9TIGludGVybmFsIHJlc2VydmVkIHNwYWNlIHRvIG9wdGltaXplIGNvZGUgc2l6ZSwgdXBkYXRlZCBieSB0aGUgY29tcGlsZXIsIHNob3VsZG4ndCBiZSBtb2RpZmllZCBtYW51YWxseSEhICovCi0JLyogIE1DX0FSQl9SQU1DRkcgKGluY2x1ZGVzIE5PT0ZCQU5LLE5PT0ZSQU5LUyxOT09GUk9XUyxOT09GQ09MUykgKi8KLQlVU0hPUlQgdXNSZXNlcnZlZDsKLQlVQ0hBUiB1Y0V4dE1lbW9yeUlEOwkvKiAgQW4gZXh0ZXJuYWwgaW5kaWNhdG9yIChieSBoYXJkY29kZSwgY2FsbGJhY2sgb3IgcGluKSB0byB0ZWxsIHdoYXQgaXMgdGhlIGN1cnJlbnQgbWVtb3J5IG1vZHVsZSAqLwotCVVDSEFSIHVjTWVtb3J5VHlwZTsJLyogIFs3OjRdPTB4MTpERFIxOz0weDI6RERSMjs9MHgzOkREUjM7PTB4NDpERFI0OyAweDU6RERSNSBbMzowXSAtIE11c3QgYmUgMHgwIGZvciBub3c7ICovCi0JVUNIQVIgdWNDaGFubmVsTnVtOwkvKiAgTnVtYmVyIG9mIGNoYW5uZWxzIHByZXNlbnQgaW4gdGhpcyBtb2R1bGUgY29uZmlnICovCi0JVUNIQVIgdWNDaGFubmVsV2lkdGg7CS8qICAwIC0gMzIgYml0czsgMSAtIDY0IGJpdHMgKi8KLQlVQ0hBUiB1Y0RlbnNpdHk7CS8qICBfOE14MzIsIF8xNk14MzIsIF8xNk14MTYsIF8zMk14MTYgKi8KLQlVQ0hBUiB1Y0ZsYWc7CQkvKiAgVG8gZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25hbGl0aWVzIGJhc2VkIG9uIG1lbW9yeSB0eXBlICovCi0JVUNIQVIgdWNNaXNjOwkJLyogIGJpdDA6IDAgLSBzaW5nbGUgcmFuazsgMSAtIGR1YWwgcmFuazsgICBiaXQyOiAwIC0gYnVyc3RsZW5ndGggNCwgMSAtIGJ1cnN0bGVuZ3RoIDggKi8KLQlVQ0hBUiB1Y1ZSRUZJOwkJLyogIGJvYXJkIGRlcGVuZGVudCBwYXJhbWV0ZXIgKi8KLQlVQ0hBUiB1Y05QTF9SVDsJCS8qICBib2FyZCBkZXBlbmRlbnQgcGFyYW1ldGVyOk5QTCByb3VuZCB0cmlwIGRlbGF5LCB1c2VkIGZvciBjYWxjdWxhdGUgbWVtb3J5IHRpbWluZyBwYXJhbWV0ZXJzICovCi0JVUNIQVIgdWNQcmVhbWJsZTsJLyogIFs3OjRdIFdyaXRlIFByZWFtYmxlLCBbMzowXSBSZWFkIFByZWFtYmxlICovCi0JVUNIQVIgdWNNZW1vcnlTaXplOwkvKiAgQklPUyBpbnRlcm5hbCByZXNlcnZlZCBzcGFjZSB0byBvcHRpbWl6ZSBjb2RlIHNpemUsIHVwZGF0ZWQgYnkgdGhlIGNvbXBpbGVyLCBzaG91bGRuJ3QgYmUgbW9kaWZpZWQgbWFudWFsbHkhISAqLwotCS8qICBUb3RhbCBtZW1vcnkgc2l6ZSBpbiB1bml0IG9mIDE2TUIgZm9yIENPTkZJR19NRU1TSVpFIC0gYml0WzIzOjBdIHplcm9zICovCi0JVUNIQVIgdWNSZXNlcnZlZFszXTsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1ZSQU1fTU9EVUxFX1Y1Cit7CisgIFVMT05HCSAgdWxDaGFubmVsTWFwQ2ZnOwkgICAgICAgICAgICAgICAgLy8gYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcjogQ2hhbm5lbCBjb21iaW5hdGlvbgorICBVU0hPUlQgIHVzTW9kdWxlU2l6ZTsgICAgICAgICAgICAgICAgICAgICAvLyBzaXplIG9mIEFUT01fVlJBTV9NT0RVTEVfVjQsIG1ha2UgaXQgZWFzeSBmb3IgVkJJT1MgdG8gbG9vayBmb3IgbmV4dCBlbnRyeSBvZiBWUkFNX01PRFVMRQorICBVU0hPUlQgIHVzUHJpdmF0ZVJlc2VydmVkOyAgICAgICAgICAgICAgICAvLyBCSU9TIGludGVybmFsIHJlc2VydmVkIHNwYWNlIHRvIG9wdGltaXplIGNvZGUgc2l6ZSwgdXBkYXRlZCBieSB0aGUgY29tcGlsZXIsIHNob3VsZG4ndCBiZSBtb2RpZmllZCBtYW51YWxseSEhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1DX0FSQl9SQU1DRkcgKGluY2x1ZGVzIE5PT0ZCQU5LLE5PT0ZSQU5LUyxOT09GUk9XUyxOT09GQ09MUykKKyAgVVNIT1JUICB1c1Jlc2VydmVkOworICBVQ0hBUiAgIHVjRXh0TWVtb3J5SUQ7ICAgIAkJICAgICAgICAgICAgLy8gQW4gZXh0ZXJuYWwgaW5kaWNhdG9yIChieSBoYXJkY29kZSwgY2FsbGJhY2sgb3IgcGluKSB0byB0ZWxsIHdoYXQgaXMgdGhlIGN1cnJlbnQgbWVtb3J5IG1vZHVsZQorICBVQ0hBUiAgIHVjTWVtb3J5VHlwZTsgICAgICAgICAgICAgICAgICAgICAvLyBbNzo0XT0weDE6RERSMTs9MHgyOkREUjI7PTB4MzpERFIzOz0weDQ6RERSNDsgMHg1OkREUjUgWzM6MF0gLSBNdXN0IGJlIDB4MCBmb3Igbm93OworICBVQ0hBUiAgIHVjQ2hhbm5lbE51bTsgICAgICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgb2YgY2hhbm5lbHMgcHJlc2VudCBpbiB0aGlzIG1vZHVsZSBjb25maWcKKyAgVUNIQVIgICB1Y0NoYW5uZWxXaWR0aDsgICAgICAgICAgICAgICAgICAgLy8gMCAtIDMyIGJpdHM7IDEgLSA2NCBiaXRzCisJVUNIQVIgICB1Y0RlbnNpdHk7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gXzhNeDMyLCBfMTZNeDMyLCBfMTZNeDE2LCBfMzJNeDE2CisJVUNIQVIJICB1Y0ZsYWc7CQkJCQkJICAgICAgICAgICAgICAgIC8vIFRvIGVuYWJsZS9kaXNhYmxlIGZ1bmN0aW9uYWxpdGllcyBiYXNlZCBvbiBtZW1vcnkgdHlwZQorCVVDSEFSCSAgdWNNaXNjOwkJCQkJCSAgICAgICAgICAgICAgICAvLyBiaXQwOiAwIC0gc2luZ2xlIHJhbms7IDEgLSBkdWFsIHJhbms7ICAgYml0MjogMCAtIGJ1cnN0bGVuZ3RoIDQsIDEgLSBidXJzdGxlbmd0aCA4CisgIFVDSEFSCQl1Y1ZSRUZJOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYm9hcmQgZGVwZW5kZW50IHBhcmFtZXRlcgorICBVQ0hBUiAgIHVjTlBMX1JUOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBib2FyZCBkZXBlbmRlbnQgcGFyYW1ldGVyOk5QTCByb3VuZCB0cmlwIGRlbGF5LCB1c2VkIGZvciBjYWxjdWxhdGUgbWVtb3J5IHRpbWluZyBwYXJhbWV0ZXJzCisgIFVDSEFSCQl1Y1ByZWFtYmxlOyAgICAgICAgICAgICAgICAgICAgICAgLy8gWzc6NF0gV3JpdGUgUHJlYW1ibGUsIFszOjBdIFJlYWQgUHJlYW1ibGUKKyAgVUNIQVIgICB1Y01lbW9yeVNpemU7ICAgICAgICAgICAgICAgICAgICAgLy8gQklPUyBpbnRlcm5hbCByZXNlcnZlZCBzcGFjZSB0byBvcHRpbWl6ZSBjb2RlIHNpemUsIHVwZGF0ZWQgYnkgdGhlIGNvbXBpbGVyLCBzaG91bGRuJ3QgYmUgbW9kaWZpZWQgbWFudWFsbHkhIQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUb3RhbCBtZW1vcnkgc2l6ZSBpbiB1bml0IG9mIDE2TUIgZm9yIENPTkZJR19NRU1TSVpFIC0gYml0WzIzOjBdIHplcm9zCisgIFVDSEFSICAgdWNSZXNlcnZlZFszXTsKIAotLyogY29tcGFyZSB3aXRoIFYzLCB3ZSBmbGF0IHRoZSBzdHJ1Y3QgYnkgbWVyZ2luZyBBVE9NX01FTU9SWV9GT1JNQVQgKGFzIGlzKSBpbnRvIFY0IGFzIHRoZSBzYW1lIGxldmVsICovCi0JVVNIT1JUIHVzRU1SUzJWYWx1ZTsJLyogIEVNUlMyIFZhbHVlIGlzIHVzZWQgZm9yIEdERFIyIGFuZCBHRERSNCBtZW1vcnkgdHlwZSAqLwotCVVTSE9SVCB1c0VNUlMzVmFsdWU7CS8qICBFTVJTMyBWYWx1ZSBpcyB1c2VkIGZvciBHRERSMiBhbmQgR0REUjQgbWVtb3J5IHR5cGUgKi8KLQlVQ0hBUiB1Y01lbW9yeVZlbmRlcklEOwkvKiAgUHJlZGVmaW5lZCwgSWYgbm90IHByZWRlZmluZWQsIHZlbmRvciBkZXRlY3Rpb24gdGFibGUgZ2V0cyBleGVjdXRlZCAqLwotCVVDSEFSIHVjUmVmcmVzaFJhdGVGYWN0b3I7CS8qICBbMTowXT1SZWZyZXNoRmFjdG9yICgwMD04bXMsIDAxPTE2bXMsIDEwPTMybXMsMTE9NjRtcykgKi8KLQlVQ0hBUiB1Y0ZJRk9EZXB0aDsJLyogIEZJRk8gZGVwdGggc3VwcG9zZXMgdG8gYmUgZGV0ZWN0ZWQgZHVyaW5nIHZlbmRvciBkZXRlY3Rpb24sIGJ1dCBpZiB3ZSBkb250IGRvIHZlbmRvciBkZXRlY3Rpb24gd2UgaGF2ZSB0byBoYXJkY29kZSBGSUZPIERlcHRoICovCi0JVUNIQVIgdWNDRFJfQmFuZHdpZHRoOwkvKiAgWzA6M109UmVhZCBDRFIgYmFuZHdpZHRoLCBbNDo3XSAtIFdyaXRlIENEUiBCYW5kd2lkdGggKi8KLQlBVE9NX01FTU9SWV9USU1JTkdfRk9STUFUX1YxIGFzTWVtVGltaW5nWzVdOwkvKiBNZW1vcnkgVGltaW5nIGJsb2NrIHNvcnQgZnJvbSBsb3dlciBjbG9jayB0byBoaWdoZXIgY2xvY2sgKi8KLX0gQVRPTV9WUkFNX01PRFVMRV9WNTsKKy8vY29tcGFyZSB3aXRoIFYzLCB3ZSBmbGF0IHRoZSBzdHJ1Y3QgYnkgbWVyZ2luZyBBVE9NX01FTU9SWV9GT1JNQVQgKGFzIGlzKSBpbnRvIFY0IGFzIHRoZSBzYW1lIGxldmVsCisgIFVTSE9SVAl1c0VNUlMyVmFsdWU7ICAgICAgCQkgICAgICAgICAgICAvLyBFTVJTMiBWYWx1ZSBpcyB1c2VkIGZvciBHRERSMiBhbmQgR0REUjQgbWVtb3J5IHR5cGUKKyAgVVNIT1JUCXVzRU1SUzNWYWx1ZTsgICAgICAJCSAgICAgICAgICAgIC8vIEVNUlMzIFZhbHVlIGlzIHVzZWQgZm9yIEdERFIyIGFuZCBHRERSNCBtZW1vcnkgdHlwZQorICBVQ0hBUiAgIHVjTWVtb3J5VmVuZGVySUQ7ICAJCSAgICAgICAgICAgIC8vIFByZWRlZmluZWQsIElmIG5vdCBwcmVkZWZpbmVkLCB2ZW5kb3IgZGV0ZWN0aW9uIHRhYmxlIGdldHMgZXhlY3V0ZWQKKyAgVUNIQVIJICB1Y1JlZnJlc2hSYXRlRmFjdG9yOyAgICAgICAgICAgICAgLy8gWzE6MF09UmVmcmVzaEZhY3RvciAoMDA9OG1zLCAwMT0xNm1zLCAxMD0zMm1zLDExPTY0bXMpCisgIFVDSEFSCSAgdWNGSUZPRGVwdGg7CQkJICAgICAgICAgICAgICAgIC8vIEZJRk8gZGVwdGggc3VwcG9zZXMgdG8gYmUgZGV0ZWN0ZWQgZHVyaW5nIHZlbmRvciBkZXRlY3Rpb24sIGJ1dCBpZiB3ZSBkb250IGRvIHZlbmRvciBkZXRlY3Rpb24gd2UgaGF2ZSB0byBoYXJkY29kZSBGSUZPIERlcHRoCisgIFVDSEFSICAgdWNDRFJfQmFuZHdpZHRoOwkJICAgLy8gWzA6M109UmVhZCBDRFIgYmFuZHdpZHRoLCBbNDo3XSAtIFdyaXRlIENEUiBCYW5kd2lkdGgKKyAgQVRPTV9NRU1PUllfVElNSU5HX0ZPUk1BVF9WMSAgYXNNZW1UaW1pbmdbNV07Ly9NZW1vcnkgVGltaW5nIGJsb2NrIHNvcnQgZnJvbSBsb3dlciBjbG9jayB0byBoaWdoZXIgY2xvY2sKK31BVE9NX1ZSQU1fTU9EVUxFX1Y1OwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX0lORk9fVjIgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVDSEFSIHVjTnVtT2ZWUkFNTW9kdWxlOwotCUFUT01fVlJBTV9NT0RVTEUgYVZyYW1JbmZvW0FUT01fTUFYX05VTUJFUl9PRl9WUkFNX01PRFVMRV07CS8qICBqdXN0IGZvciBhbGxvY2F0aW9uLCByZWFsIG51bWJlciBvZiBibG9ja3MgaXMgaW4gdWNOdW1PZlZSQU1Nb2R1bGU7ICovCi19IEFUT01fVlJBTV9JTkZPX1YyOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fVlJBTV9NT0RVTEVfVjYKK3sKKyAgVUxPTkcJICB1bENoYW5uZWxNYXBDZmc7CSAgICAgICAgICAgICAgICAvLyBib2FyZCBkZXBlbmRlbnQgcGFyYW1ldGVyOiBDaGFubmVsIGNvbWJpbmF0aW9uCisgIFVTSE9SVCAgdXNNb2R1bGVTaXplOyAgICAgICAgICAgICAgICAgICAgIC8vIHNpemUgb2YgQVRPTV9WUkFNX01PRFVMRV9WNCwgbWFrZSBpdCBlYXN5IGZvciBWQklPUyB0byBsb29rIGZvciBuZXh0IGVudHJ5IG9mIFZSQU1fTU9EVUxFCisgIFVTSE9SVCAgdXNQcml2YXRlUmVzZXJ2ZWQ7ICAgICAgICAgICAgICAgIC8vIEJJT1MgaW50ZXJuYWwgcmVzZXJ2ZWQgc3BhY2UgdG8gb3B0aW1pemUgY29kZSBzaXplLCB1cGRhdGVkIGJ5IHRoZSBjb21waWxlciwgc2hvdWxkbid0IGJlIG1vZGlmaWVkIG1hbnVhbGx5ISEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTUNfQVJCX1JBTUNGRyAoaW5jbHVkZXMgTk9PRkJBTkssTk9PRlJBTktTLE5PT0ZST1dTLE5PT0ZDT0xTKQorICBVU0hPUlQgIHVzUmVzZXJ2ZWQ7CisgIFVDSEFSICAgdWNFeHRNZW1vcnlJRDsgICAgCQkgICAgICAgICAgICAvLyBBbiBleHRlcm5hbCBpbmRpY2F0b3IgKGJ5IGhhcmRjb2RlLCBjYWxsYmFjayBvciBwaW4pIHRvIHRlbGwgd2hhdCBpcyB0aGUgY3VycmVudCBtZW1vcnkgbW9kdWxlCisgIFVDSEFSICAgdWNNZW1vcnlUeXBlOyAgICAgICAgICAgICAgICAgICAgIC8vIFs3OjRdPTB4MTpERFIxOz0weDI6RERSMjs9MHgzOkREUjM7PTB4NDpERFI0OyAweDU6RERSNSBbMzowXSAtIE11c3QgYmUgMHgwIGZvciBub3c7CisgIFVDSEFSICAgdWNDaGFubmVsTnVtOyAgICAgICAgICAgICAgICAgICAgIC8vIE51bWJlciBvZiBjaGFubmVscyBwcmVzZW50IGluIHRoaXMgbW9kdWxlIGNvbmZpZworICBVQ0hBUiAgIHVjQ2hhbm5lbFdpZHRoOyAgICAgICAgICAgICAgICAgICAvLyAwIC0gMzIgYml0czsgMSAtIDY0IGJpdHMKKwlVQ0hBUiAgIHVjRGVuc2l0eTsgICAgICAgICAgICAgICAgICAgICAgICAvLyBfOE14MzIsIF8xNk14MzIsIF8xNk14MTYsIF8zMk14MTYKKwlVQ0hBUgkgIHVjRmxhZzsJCQkJCQkgICAgICAgICAgICAgICAgLy8gVG8gZW5hYmxlL2Rpc2FibGUgZnVuY3Rpb25hbGl0aWVzIGJhc2VkIG9uIG1lbW9yeSB0eXBlCisJVUNIQVIJICB1Y01pc2M7CQkJCQkJICAgICAgICAgICAgICAgIC8vIGJpdDA6IDAgLSBzaW5nbGUgcmFuazsgMSAtIGR1YWwgcmFuazsgICBiaXQyOiAwIC0gYnVyc3RsZW5ndGggNCwgMSAtIGJ1cnN0bGVuZ3RoIDgKKyAgVUNIQVIJCXVjVlJFRkk7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBib2FyZCBkZXBlbmRlbnQgcGFyYW1ldGVyCisgIFVDSEFSICAgdWNOUExfUlQ7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJvYXJkIGRlcGVuZGVudCBwYXJhbWV0ZXI6TlBMIHJvdW5kIHRyaXAgZGVsYXksIHVzZWQgZm9yIGNhbGN1bGF0ZSBtZW1vcnkgdGltaW5nIHBhcmFtZXRlcnMKKyAgVUNIQVIJCXVjUHJlYW1ibGU7ICAgICAgICAgICAgICAgICAgICAgICAvLyBbNzo0XSBXcml0ZSBQcmVhbWJsZSwgWzM6MF0gUmVhZCBQcmVhbWJsZQorICBVQ0hBUiAgIHVjTWVtb3J5U2l6ZTsgICAgICAgICAgICAgICAgICAgICAvLyBCSU9TIGludGVybmFsIHJlc2VydmVkIHNwYWNlIHRvIG9wdGltaXplIGNvZGUgc2l6ZSwgdXBkYXRlZCBieSB0aGUgY29tcGlsZXIsIHNob3VsZG4ndCBiZSBtb2RpZmllZCBtYW51YWxseSEhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRvdGFsIG1lbW9yeSBzaXplIGluIHVuaXQgb2YgMTZNQiBmb3IgQ09ORklHX01FTVNJWkUgLSBiaXRbMjM6MF0gemVyb3MKKyAgVUNIQVIgICB1Y1Jlc2VydmVkWzNdOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX0lORk9fVjMgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVTSE9SVCB1c01lbUFkanVzdFRibE9mZnNldDsJLyogIG9mZnNldCBvZiBBVE9NX0lOSVRfUkVHX0JMT0NLIHN0cnVjdHVyZSBmb3IgbWVtb3J5IHZlbmRvciBzcGVjaWZpYyBNQyBhZGp1c3Qgc2V0dGluZyAqLwotCVVTSE9SVCB1c01lbUNsa1BhdGNoVGJsT2Zmc2V0OwkvKiAgICAgIG9mZnNldCBvZiBBVE9NX0lOSVRfUkVHX0JMT0NLIHN0cnVjdHVyZSBmb3IgbWVtb3J5IGNsb2NrIHNwZWNpZmljIE1DIHNldHRpbmcgKi8KLQlVU0hPUlQgdXNSZXJzZXZlZDsKLQlVQ0hBUiBhVklEX1BpbnNTaGlmdFs5XTsJLyogIDggYml0IHN0cmFwIG1heGltdW0rdGVybWluYXRvciAqLwotCVVDSEFSIHVjTnVtT2ZWUkFNTW9kdWxlOwotCUFUT01fVlJBTV9NT0RVTEUgYVZyYW1JbmZvW0FUT01fTUFYX05VTUJFUl9PRl9WUkFNX01PRFVMRV07CS8qICBqdXN0IGZvciBhbGxvY2F0aW9uLCByZWFsIG51bWJlciBvZiBibG9ja3MgaXMgaW4gdWNOdW1PZlZSQU1Nb2R1bGU7ICovCi0JQVRPTV9JTklUX1JFR19CTE9DSyBhc01lbVBhdGNoOwkvKiAgZm9yIGFsbG9jYXRpb24gKi8KLQkvKiAgICAgIEFUT01fSU5JVF9SRUdfQkxPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhTWVtQWRqdXN0OyAqLwotfSBBVE9NX1ZSQU1fSU5GT19WMzsKKy8vY29tcGFyZSB3aXRoIFYzLCB3ZSBmbGF0IHRoZSBzdHJ1Y3QgYnkgbWVyZ2luZyBBVE9NX01FTU9SWV9GT1JNQVQgKGFzIGlzKSBpbnRvIFY0IGFzIHRoZSBzYW1lIGxldmVsCisgIFVTSE9SVAl1c0VNUlMyVmFsdWU7ICAgICAgCQkgICAgICAgICAgICAvLyBFTVJTMiBWYWx1ZSBpcyB1c2VkIGZvciBHRERSMiBhbmQgR0REUjQgbWVtb3J5IHR5cGUKKyAgVVNIT1JUCXVzRU1SUzNWYWx1ZTsgICAgICAJCSAgICAgICAgICAgIC8vIEVNUlMzIFZhbHVlIGlzIHVzZWQgZm9yIEdERFIyIGFuZCBHRERSNCBtZW1vcnkgdHlwZQorICBVQ0hBUiAgIHVjTWVtb3J5VmVuZGVySUQ7ICAJCSAgICAgICAgICAgIC8vIFByZWRlZmluZWQsIElmIG5vdCBwcmVkZWZpbmVkLCB2ZW5kb3IgZGV0ZWN0aW9uIHRhYmxlIGdldHMgZXhlY3V0ZWQKKyAgVUNIQVIJICB1Y1JlZnJlc2hSYXRlRmFjdG9yOyAgICAgICAgICAgICAgLy8gWzE6MF09UmVmcmVzaEZhY3RvciAoMDA9OG1zLCAwMT0xNm1zLCAxMD0zMm1zLDExPTY0bXMpCisgIFVDSEFSCSAgdWNGSUZPRGVwdGg7CQkJICAgICAgICAgICAgICAgIC8vIEZJRk8gZGVwdGggc3VwcG9zZXMgdG8gYmUgZGV0ZWN0ZWQgZHVyaW5nIHZlbmRvciBkZXRlY3Rpb24sIGJ1dCBpZiB3ZSBkb250IGRvIHZlbmRvciBkZXRlY3Rpb24gd2UgaGF2ZSB0byBoYXJkY29kZSBGSUZPIERlcHRoCisgIFVDSEFSICAgdWNDRFJfQmFuZHdpZHRoOwkJICAgLy8gWzA6M109UmVhZCBDRFIgYmFuZHdpZHRoLCBbNDo3XSAtIFdyaXRlIENEUiBCYW5kd2lkdGgKKyAgQVRPTV9NRU1PUllfVElNSU5HX0ZPUk1BVF9WMiAgYXNNZW1UaW1pbmdbNV07Ly9NZW1vcnkgVGltaW5nIGJsb2NrIHNvcnQgZnJvbSBsb3dlciBjbG9jayB0byBoaWdoZXIgY2xvY2sKK31BVE9NX1ZSQU1fTU9EVUxFX1Y2OworCisKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fVlJBTV9JTkZPX1YyCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgIHNIZWFkZXI7CisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjTnVtT2ZWUkFNTW9kdWxlOworICBBVE9NX1ZSQU1fTU9EVUxFICAgICAgICAgICBhVnJhbUluZm9bQVRPTV9NQVhfTlVNQkVSX09GX1ZSQU1fTU9EVUxFXTsgICAgICAvLyBqdXN0IGZvciBhbGxvY2F0aW9uLCByZWFsIG51bWJlciBvZiBibG9ja3MgaXMgaW4gdWNOdW1PZlZSQU1Nb2R1bGU7Cit9QVRPTV9WUkFNX0lORk9fVjI7CisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX1ZSQU1fSU5GT19WMworeworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgICBzSGVhZGVyOworCVVTSE9SVAkJCQkJCQkJCQkgdXNNZW1BZGp1c3RUYmxPZmZzZXQ7CQkJCQkJCQkJCQkJCSAvLyBvZmZzZXQgb2YgQVRPTV9JTklUX1JFR19CTE9DSyBzdHJ1Y3R1cmUgZm9yIG1lbW9yeSB2ZW5kb3Igc3BlY2lmaWMgTUMgYWRqdXN0IHNldHRpbmcKKwlVU0hPUlQJCQkJCQkJCQkJIHVzTWVtQ2xrUGF0Y2hUYmxPZmZzZXQ7CQkJCQkJCQkJCQkJIC8vCW9mZnNldCBvZiBBVE9NX0lOSVRfUkVHX0JMT0NLIHN0cnVjdHVyZSBmb3IgbWVtb3J5IGNsb2NrIHNwZWNpZmljIE1DIHNldHRpbmcKKwlVU0hPUlQJCQkJCQkJCQkJIHVzUmVyc2V2ZWQ7CisJVUNIQVIgICAgICAgICAgIAkgICAgICAgICBhVklEX1BpbnNTaGlmdFs5XTsJCQkJCQkJCQkJCQkJCQkgLy8gOCBiaXQgc3RyYXAgbWF4aW11bSt0ZXJtaW5hdG9yCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjTnVtT2ZWUkFNTW9kdWxlOworICBBVE9NX1ZSQU1fTU9EVUxFCQkgICAgICAgYVZyYW1JbmZvW0FUT01fTUFYX05VTUJFUl9PRl9WUkFNX01PRFVMRV07ICAgICAgLy8ganVzdCBmb3IgYWxsb2NhdGlvbiwgcmVhbCBudW1iZXIgb2YgYmxvY2tzIGlzIGluIHVjTnVtT2ZWUkFNTW9kdWxlOworCUFUT01fSU5JVF9SRUdfQkxPQ0sJCQkJIGFzTWVtUGF0Y2g7CQkJCQkJCQkJCQkJCQkJCQkJIC8vIGZvciBhbGxvY2F0aW9uCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSAvLwlBVE9NX0lOSVRfUkVHX0JMT0NLCQkJCSBhTWVtQWRqdXN0OworfUFUT01fVlJBTV9JTkZPX1YzOwogCiAjZGVmaW5lCUFUT01fVlJBTV9JTkZPX0xBU1QJICAgICBBVE9NX1ZSQU1fSU5GT19WMwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX0lORk9fVjQgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVTSE9SVCB1c01lbUFkanVzdFRibE9mZnNldDsJLyogIG9mZnNldCBvZiBBVE9NX0lOSVRfUkVHX0JMT0NLIHN0cnVjdHVyZSBmb3IgbWVtb3J5IHZlbmRvciBzcGVjaWZpYyBNQyBhZGp1c3Qgc2V0dGluZyAqLwotCVVTSE9SVCB1c01lbUNsa1BhdGNoVGJsT2Zmc2V0OwkvKiAgICAgIG9mZnNldCBvZiBBVE9NX0lOSVRfUkVHX0JMT0NLIHN0cnVjdHVyZSBmb3IgbWVtb3J5IGNsb2NrIHNwZWNpZmljIE1DIHNldHRpbmcgKi8KLQlVU0hPUlQgdXNSZXJzZXZlZDsKLQlVQ0hBUiB1Y01lbURRN18wQnl0ZVJlbWFwOwkvKiAgRFEgbGluZSBieXRlIHJlbWFwLCA9MDogTWVtb3J5IERhdGEgbGluZSBCWVRFMCwgPTE6IEJZVEUxLCA9MjogQllURTIsID0zOiBCWVRFMyAqLwotCVVMT05HIHVsTWVtRFE3XzBCaXRSZW1hcDsJLyogIGVhY2ggRFEgbGluZSAoIDd+MCkgdXNlIDNiaXRzLCBsaWtlOiBEUTA9Qml0WzI6MF0sIERRMTpbNTozXSwgLi4uIERRNzpbMjM6MjFdICovCi0JVUNIQVIgdWNSZXNlcnZkZVs0XTsKLQlVQ0hBUiB1Y051bU9mVlJBTU1vZHVsZTsKLQlBVE9NX1ZSQU1fTU9EVUxFX1Y0IGFWcmFtSW5mb1tBVE9NX01BWF9OVU1CRVJfT0ZfVlJBTV9NT0RVTEVdOwkvKiAganVzdCBmb3IgYWxsb2NhdGlvbiwgcmVhbCBudW1iZXIgb2YgYmxvY2tzIGlzIGluIHVjTnVtT2ZWUkFNTW9kdWxlOyAqLwotCUFUT01fSU5JVF9SRUdfQkxPQ0sgYXNNZW1QYXRjaDsJLyogIGZvciBhbGxvY2F0aW9uICovCi0JLyogICAgICBBVE9NX0lOSVRfUkVHX0JMT0NLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYU1lbUFkanVzdDsgKi8KLX0gQVRPTV9WUkFNX0lORk9fVjQ7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX0lORk9fVjQKK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSICAgc0hlYWRlcjsKKwlVU0hPUlQJCQkJCQkJCQkJIHVzTWVtQWRqdXN0VGJsT2Zmc2V0OwkJCQkJCQkJCQkJCQkgLy8gb2Zmc2V0IG9mIEFUT01fSU5JVF9SRUdfQkxPQ0sgc3RydWN0dXJlIGZvciBtZW1vcnkgdmVuZG9yIHNwZWNpZmljIE1DIGFkanVzdCBzZXR0aW5nCisJVVNIT1JUCQkJCQkJCQkJCSB1c01lbUNsa1BhdGNoVGJsT2Zmc2V0OwkJCQkJCQkJCQkJCSAvLwlvZmZzZXQgb2YgQVRPTV9JTklUX1JFR19CTE9DSyBzdHJ1Y3R1cmUgZm9yIG1lbW9yeSBjbG9jayBzcGVjaWZpYyBNQyBzZXR0aW5nCisJVVNIT1JUCQkJCQkJCQkJCSB1c1JlcnNldmVkOworCVVDSEFSICAgICAgICAgICAJICAgICAgICAgdWNNZW1EUTdfMEJ5dGVSZW1hcDsJCQkJCQkJCQkJCQkJICAgLy8gRFEgbGluZSBieXRlIHJlbWFwLCA9MDogTWVtb3J5IERhdGEgbGluZSBCWVRFMCwgPTE6IEJZVEUxLCA9MjogQllURTIsID0zOiBCWVRFMworICBVTE9ORyAgICAgICAgICAgICAgICAgICAgICB1bE1lbURRN18wQml0UmVtYXA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBlYWNoIERRIGxpbmUgKCA3fjApIHVzZSAzYml0cywgbGlrZTogRFEwPUJpdFsyOjBdLCBEUTE6WzU6M10sIC4uLiBEUTc6WzIzOjIxXQorICBVQ0hBUiAgICAgICAgICAgICAgICAgICAgICB1Y1Jlc2VydmRlWzRdOyAKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNOdW1PZlZSQU1Nb2R1bGU7CisgIEFUT01fVlJBTV9NT0RVTEVfVjQJCSAgICAgYVZyYW1JbmZvW0FUT01fTUFYX05VTUJFUl9PRl9WUkFNX01PRFVMRV07ICAgICAgLy8ganVzdCBmb3IgYWxsb2NhdGlvbiwgcmVhbCBudW1iZXIgb2YgYmxvY2tzIGlzIGluIHVjTnVtT2ZWUkFNTW9kdWxlOworCUFUT01fSU5JVF9SRUdfQkxPQ0sJCQkJIGFzTWVtUGF0Y2g7CQkJCQkJCQkJCQkJCQkJCQkJIC8vIGZvciBhbGxvY2F0aW9uCisJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSAvLwlBVE9NX0lOSVRfUkVHX0JMT0NLCQkJCSBhTWVtQWRqdXN0OworfUFUT01fVlJBTV9JTkZPX1Y0OwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX0dQSU9fREVURUNUSU9OX0lORk8gewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVDSEFSIGFWSURfUGluc1NoaWZ0WzldOwkvKiA4IGJpdCBzdHJhcCBtYXhpbXVtK3Rlcm1pbmF0b3IgKi8KLX0gQVRPTV9WUkFNX0dQSU9fREVURUNUSU9OX0lORk87Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9WUkFNX0dQSU9fREVURUNUSU9OX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSICAgc0hlYWRlcjsKKyAgVUNIQVIgICAgICAgICAgIAkgICAgICAgICBhVklEX1BpbnNTaGlmdFs5XTsgICAvLzggYml0IHN0cmFwIG1heGltdW0rdGVybWluYXRvcgorfUFUT01fVlJBTV9HUElPX0RFVEVDVElPTl9JTkZPOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9NRU1PUllfVFJBSU5JTkdfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVUNIQVIgdWNUcmFpbmluZ0xvb3A7Ci0JVUNIQVIgdWNSZXNlcnZlZFszXTsKLQlBVE9NX0lOSVRfUkVHX0JMT0NLIGFzTWVtVHJhaW5pbmdTZXR0aW5nOwotfSBBVE9NX01FTU9SWV9UUkFJTklOR19JTkZPOwogCi10eXBlZGVmIHN0cnVjdCBTV19JMkNfQ05UTF9EQVRBX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjQ29udHJvbDsKLQlVQ0hBUiB1Y0RhdGE7Ci0JVUNIQVIgdWNTYXR1czsKLQlVQ0hBUiB1Y1RlbXA7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9NRU1PUllfVFJBSU5JTkdfSU5GTworeworCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgIHNIZWFkZXI7CisJVUNIQVIJCQkJCQkJCQkJCSB1Y1RyYWluaW5nTG9vcDsKKwlVQ0hBUgkJCQkJCQkJCQkJIHVjUmVzZXJ2ZWRbM107CisJQVRPTV9JTklUX1JFR19CTE9DSwkJCQkgYXNNZW1UcmFpbmluZ1NldHRpbmc7Cit9QVRPTV9NRU1PUllfVFJBSU5JTkdfSU5GTzsKKworCit0eXBlZGVmIHN0cnVjdCBTV19JMkNfQ05UTF9EQVRBX1BBUkFNRVRFUlMKK3sKKyAgVUNIQVIgICAgdWNDb250cm9sOworICBVQ0hBUiAgICB1Y0RhdGE7IAorICBVQ0hBUiAgICB1Y1NhdHVzOyAKKyAgVUNIQVIgICAgdWNUZW1wOyAKIH0gU1dfSTJDX0NOVExfREFUQV9QQVJBTUVURVJTOwogCiAjZGVmaW5lIFNXX0kyQ19DTlRMX0RBVEFfUFNfQUxMT0NBVElPTiAgU1dfSTJDX0NOVExfREFUQV9QQVJBTUVURVJTCiAKLXR5cGVkZWYgc3RydWN0IF9TV19JMkNfSU9fREFUQV9QQVJBTUVURVJTIHsKLQlVU0hPUlQgR1BJT19JbmZvOwotCVVDSEFSIHVjQWN0OwotCVVDSEFSIHVjRGF0YTsKLX0gU1dfSTJDX0lPX0RBVEFfUEFSQU1FVEVSUzsKK3R5cGVkZWYgc3RydWN0IF9TV19JMkNfSU9fREFUQV9QQVJBTUVURVJTCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBVU0hPUlQgICBHUElPX0luZm87CisgIFVDSEFSICAgIHVjQWN0OyAKKyAgVUNIQVIgICAgdWNEYXRhOyAKKyB9IFNXX0kyQ19JT19EQVRBX1BBUkFNRVRFUlM7CiAKICNkZWZpbmUgU1dfSTJDX0lPX0RBVEFfUFNfQUxMT0NBVElPTiAgU1dfSTJDX0lPX0RBVEFfUEFSQU1FVEVSUwogCkBAIC00MDg3LDEyNyArNDk5OCwxMzYgQEAKICNkZWZpbmUgU1dfSTJDX0NOVExfQ0xPU0UgICAgIDUKICNkZWZpbmUgU1dfSTJDX0NOVExfV1JJVEUxQklUIDYKIAotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09VkVTQSBkZWZpbml0aW9uIFBvcnRpb249PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVZFU0EgZGVmaW5pdGlvbiBQb3J0aW9uPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogI2RlZmluZSBWRVNBX09FTV9QUk9EVUNUX1JFVgkJCSAgICAgICAgICAgICcwMS4wMCcKLSNkZWZpbmUgVkVTQV9NT0RFX0FUVFJJQlVURV9NT0RFX1NVUFBPUlQJICAgICAweEJCCS8qIHJlZmVyIHRvIFZCRSBzcGVjIHAuMzIsIG5vIFRUWSBzdXBwb3J0ICovCisjZGVmaW5lIFZFU0FfTU9ERV9BVFRSSUJVVEVfTU9ERV9TVVBQT1JUCSAgICAgMHhCQgkvL3JlZmVyIHRvIFZCRSBzcGVjIHAuMzIsIG5vIFRUWSBzdXBwb3J0CiAjZGVmaW5lIFZFU0FfTU9ERV9XSU5fQVRUUklCVVRFCQkJCQkJICAgICA3CiAjZGVmaW5lIFZFU0FfV0lOX1NJWkUJCQkJCQkJCQkJCSAgICAgNjQKIAotdHlwZWRlZiBzdHJ1Y3QgX1BUUl8zMl9CSVRfU1RSVUNUVVJFIHsKLQlVU0hPUlQgT2Zmc2V0MTY7Ci0JVVNIT1JUIFNlZ21lbnQxNjsKK3R5cGVkZWYgc3RydWN0IF9QVFJfMzJfQklUX1NUUlVDVFVSRQoreworCVVTSE9SVAlPZmZzZXQxNjsJCQkKKwlVU0hPUlQJU2VnbWVudDE2OwkJCQkKIH0gUFRSXzMyX0JJVF9TVFJVQ1RVUkU7CiAKLXR5cGVkZWYgdW5pb24gX1BUUl8zMl9CSVRfVU5JT04gewotCVBUUl8zMl9CSVRfU1RSVUNUVVJFIFNlZ21lbnRPZmZzZXQ7Ci0JVUxPTkcgUHRyMzJfQml0OwordHlwZWRlZiB1bmlvbiBfUFRSXzMyX0JJVF9VTklPTgoreworCVBUUl8zMl9CSVRfU1RSVUNUVVJFCVNlZ21lbnRPZmZzZXQ7CisJVUxPTkcJCQkJCSAgICAgICAgUHRyMzJfQml0OwogfSBQVFJfMzJfQklUX1VOSU9OOwogCi10eXBlZGVmIHN0cnVjdCBfVkJFXzFfMl9JTkZPX0JMT0NLX1VQREFUQUJMRSB7Ci0JVUNIQVIgVmJlU2lnbmF0dXJlWzRdOwotCVVTSE9SVCBWYmVWZXJzaW9uOwotCVBUUl8zMl9CSVRfVU5JT04gT2VtU3RyaW5nUHRyOwotCVVDSEFSIENhcGFiaWxpdGllc1s0XTsKLQlQVFJfMzJfQklUX1VOSU9OIFZpZGVvTW9kZVB0cjsKLQlVU0hPUlQgVG90YWxNZW1vcnk7Cit0eXBlZGVmIHN0cnVjdCBfVkJFXzFfMl9JTkZPX0JMT0NLX1VQREFUQUJMRQoreworCVVDSEFSCQkJCSAgICAgIFZiZVNpZ25hdHVyZVs0XTsKKwlVU0hPUlQJCQkJICAgIFZiZVZlcnNpb247CisJUFRSXzMyX0JJVF9VTklPTglPZW1TdHJpbmdQdHI7CisJVUNIQVIJCQkJICAgICAgQ2FwYWJpbGl0aWVzWzRdOworCVBUUl8zMl9CSVRfVU5JT04JVmlkZW9Nb2RlUHRyOworCVVTSE9SVAkJCQkgICAgVG90YWxNZW1vcnk7CiB9IFZCRV8xXzJfSU5GT19CTE9DS19VUERBVEFCTEU7CiAKLXR5cGVkZWYgc3RydWN0IF9WQkVfMl8wX0lORk9fQkxPQ0tfVVBEQVRBQkxFIHsKLQlWQkVfMV8yX0lORk9fQkxPQ0tfVVBEQVRBQkxFIENvbW1vbkJsb2NrOwotCVVTSE9SVCBPZW1Tb2Z0UmV2OwotCVBUUl8zMl9CSVRfVU5JT04gT2VtVmVuZG9yTmFtZVB0cjsKLQlQVFJfMzJfQklUX1VOSU9OIE9lbVByb2R1Y3ROYW1lUHRyOwotCVBUUl8zMl9CSVRfVU5JT04gT2VtUHJvZHVjdFJldlB0cjsKKwordHlwZWRlZiBzdHJ1Y3QgX1ZCRV8yXzBfSU5GT19CTE9DS19VUERBVEFCTEUKK3sKKwlWQkVfMV8yX0lORk9fQkxPQ0tfVVBEQVRBQkxFCUNvbW1vbkJsb2NrOworCVVTSE9SVAkJCQkJCQkgICAgT2VtU29mdFJldjsKKwlQVFJfMzJfQklUX1VOSU9OCQkJCU9lbVZlbmRvck5hbWVQdHI7CisJUFRSXzMyX0JJVF9VTklPTgkJCQlPZW1Qcm9kdWN0TmFtZVB0cjsKKwlQVFJfMzJfQklUX1VOSU9OCQkJCU9lbVByb2R1Y3RSZXZQdHI7CiB9IFZCRV8yXzBfSU5GT19CTE9DS19VUERBVEFCTEU7CiAKLXR5cGVkZWYgdW5pb24gX1ZCRV9WRVJTSU9OX1VOSU9OIHsKLQlWQkVfMl8wX0lORk9fQkxPQ0tfVVBEQVRBQkxFIFZCRV8yXzBfSW5mb0Jsb2NrOwotCVZCRV8xXzJfSU5GT19CTE9DS19VUERBVEFCTEUgVkJFXzFfMl9JbmZvQmxvY2s7Cit0eXBlZGVmIHVuaW9uIF9WQkVfVkVSU0lPTl9VTklPTgoreworCVZCRV8yXzBfSU5GT19CTE9DS19VUERBVEFCTEUJVkJFXzJfMF9JbmZvQmxvY2s7CisJVkJFXzFfMl9JTkZPX0JMT0NLX1VQREFUQUJMRQlWQkVfMV8yX0luZm9CbG9jazsKIH0gVkJFX1ZFUlNJT05fVU5JT047CiAKLXR5cGVkZWYgc3RydWN0IF9WQkVfSU5GT19CTE9DSyB7Ci0JVkJFX1ZFUlNJT05fVU5JT04gVXBkYXRhYmxlVkJFX0luZm87Ci0JVUNIQVIgUmVzZXJ2ZWRbMjIyXTsKLQlVQ0hBUiBPZW1EYXRhWzI1Nl07Cit0eXBlZGVmIHN0cnVjdCBfVkJFX0lORk9fQkxPQ0sKK3sKKwlWQkVfVkVSU0lPTl9VTklPTgkJCVVwZGF0YWJsZVZCRV9JbmZvOworCVVDSEFSCQkJCQkJICAgICAgUmVzZXJ2ZWRbMjIyXTsKKwlVQ0hBUgkJCQkJCSAgICAgIE9lbURhdGFbMjU2XTsKIH0gVkJFX0lORk9fQkxPQ0s7CiAKLXR5cGVkZWYgc3RydWN0IF9WQkVfRlBfSU5GTyB7Ci0JVVNIT1JUIEhTaXplOwotCVVTSE9SVCBWU2l6ZTsKLQlVU0hPUlQgRlBUeXBlOwotCVVDSEFSIFJlZEJQUDsKLQlVQ0hBUiBHcmVlbkJQUDsKLQlVQ0hBUiBCbHVlQlBQOwotCVVDSEFSIFJlc2VydmVkQlBQOwotCVVMT05HIFJzdmRPZmZTY3JuTWVtU2l6ZTsKLQlVTE9ORyBSc3ZkT2ZmU2Nybk1FbVB0cjsKLQlVQ0hBUiBSZXNlcnZlZFsxNF07Cit0eXBlZGVmIHN0cnVjdCBfVkJFX0ZQX0lORk8KK3sKKyAgVVNIT1JUCUhTaXplOworCVVTSE9SVAlWU2l6ZTsKKwlVU0hPUlQJRlBUeXBlOworCVVDSEFSCQlSZWRCUFA7CisJVUNIQVIJCUdyZWVuQlBQOworCVVDSEFSCQlCbHVlQlBQOworCVVDSEFSCQlSZXNlcnZlZEJQUDsKKwlVTE9ORwkJUnN2ZE9mZlNjcm5NZW1TaXplOworCVVMT05HCQlSc3ZkT2ZmU2Nybk1FbVB0cjsKKwlVQ0hBUgkJUmVzZXJ2ZWRbMTRdOwogfSBWQkVfRlBfSU5GTzsKIAotdHlwZWRlZiBzdHJ1Y3QgX1ZFU0FfTU9ERV9JTkZPX0JMT0NLIHsKLS8qICBNYW5kYXRvcnkgaW5mb3JtYXRpb24gZm9yIGFsbCBWQkUgcmV2aXNpb25zICovCi0JVVNIT1JUIE1vZGVBdHRyaWJ1dGVzOwkvKiAgICAgICAgICAgICAgICAgIGR3ICAgICAgPyAgICAgICA7IG1vZGUgYXR0cmlidXRlcyAqLwotCVVDSEFSIFdpbkFBdHRyaWJ1dGVzOwkvKiAgICAgICAgICAgICAgICAgICAgZGIgICAgICA/ICAgICAgIDsgd2luZG93IEEgYXR0cmlidXRlcyAqLwotCVVDSEFSIFdpbkJBdHRyaWJ1dGVzOwkvKiAgICAgICAgICAgICAgICAgICAgZGIgICAgICA/ICAgICAgIDsgd2luZG93IEIgYXR0cmlidXRlcyAqLwotCVVTSE9SVCBXaW5HcmFudWxhcml0eTsJLyogICAgICAgICAgICAgICAgICAgIGR3ICAgICAgPyAgICAgICA7IHdpbmRvdyBncmFudWxhcml0eSAqLwotCVVTSE9SVCBXaW5TaXplOwkJLyogICAgICAgICAgICAgICAgICAgIGR3ICAgICAgPyAgICAgICA7IHdpbmRvdyBzaXplICovCi0JVVNIT1JUIFdpbkFTZWdtZW50OwkvKiAgICAgICAgICAgICAgICAgICAgZHcgICAgICA/ICAgICAgIDsgd2luZG93IEEgc3RhcnQgc2VnbWVudCAqLwotCVVTSE9SVCBXaW5CU2VnbWVudDsJLyogICAgICAgICAgICAgICAgICAgIGR3ICAgICAgPyAgICAgICA7IHdpbmRvdyBCIHN0YXJ0IHNlZ21lbnQgKi8KLQlVTE9ORyBXaW5GdW5jUHRyOwkvKiAgICAgICAgICAgICAgICAgICAgZGQgICAgICA/ICAgICAgIDsgcmVhbCBtb2RlIHBvaW50ZXIgdG8gd2luZG93IGZ1bmN0aW9uICovCi0JVVNIT1JUIEJ5dGVzUGVyU2NhbkxpbmU7CS8qICAgICAgICAgICAgICAgICAgICBkdyAgICAgID8gICAgICAgOyBieXRlcyBwZXIgc2NhbiBsaW5lICovCit0eXBlZGVmIHN0cnVjdCBfVkVTQV9NT0RFX0lORk9fQkxPQ0sKK3sKKy8vIE1hbmRhdG9yeSBpbmZvcm1hdGlvbiBmb3IgYWxsIFZCRSByZXZpc2lvbnMKKyAgVVNIT1JUICAgIE1vZGVBdHRyaWJ1dGVzOyAgLy8JCQlkdwk/CTsgbW9kZSBhdHRyaWJ1dGVzCisJVUNIQVIgICAgIFdpbkFBdHRyaWJ1dGVzOyAgLy8JCQlkYgk/CTsgd2luZG93IEEgYXR0cmlidXRlcworCVVDSEFSICAgICBXaW5CQXR0cmlidXRlczsgIC8vCQkJZGIJPwk7IHdpbmRvdyBCIGF0dHJpYnV0ZXMKKwlVU0hPUlQgICAgV2luR3JhbnVsYXJpdHk7ICAvLwkJCWR3CT8JOyB3aW5kb3cgZ3JhbnVsYXJpdHkKKwlVU0hPUlQgICAgV2luU2l6ZTsgICAgICAgICAvLwkJCWR3CT8JOyB3aW5kb3cgc2l6ZQorCVVTSE9SVCAgICBXaW5BU2VnbWVudDsgICAgIC8vCQkJZHcJPwk7IHdpbmRvdyBBIHN0YXJ0IHNlZ21lbnQKKwlVU0hPUlQgICAgV2luQlNlZ21lbnQ7ICAgICAvLwkJCWR3CT8JOyB3aW5kb3cgQiBzdGFydCBzZWdtZW50CisJVUxPTkcgICAgIFdpbkZ1bmNQdHI7ICAgICAgLy8JCQlkZAk/CTsgcmVhbCBtb2RlIHBvaW50ZXIgdG8gd2luZG93IGZ1bmN0aW9uCisJVVNIT1JUICAgIEJ5dGVzUGVyU2NhbkxpbmU7Ly8JCQlkdwk/CTsgYnl0ZXMgcGVyIHNjYW4gbGluZQogCi0vKiA7IE1hbmRhdG9yeSBpbmZvcm1hdGlvbiBmb3IgVkJFIDEuMiBhbmQgYWJvdmUgKi8KLQlVU0hPUlQgWFJlc29sdXRpb247CS8qICAgICAgICAgICAgICAgICAgICAgICAgIGR3ICAgICAgPyAgICAgICA7IGhvcml6b250YWwgcmVzb2x1dGlvbiBpbiBwaXhlbHMgb3IgY2hhcmFjdGVycyAqLwotCVVTSE9SVCBZUmVzb2x1dGlvbjsJLyogICAgICAgICAgICAgICAgICAgZHcgICAgICA/ICAgICAgIDsgdmVydGljYWwgcmVzb2x1dGlvbiBpbiBwaXhlbHMgb3IgY2hhcmFjdGVycyAqLwotCVVDSEFSIFhDaGFyU2l6ZTsJLyogICAgICAgICAgICAgICAgICAgZGIgICAgICA/ICAgICAgIDsgY2hhcmFjdGVyIGNlbGwgd2lkdGggaW4gcGl4ZWxzICovCi0JVUNIQVIgWUNoYXJTaXplOwkvKiAgICAgICAgICAgICAgICAgICBkYiAgICAgID8gICAgICAgOyBjaGFyYWN0ZXIgY2VsbCBoZWlnaHQgaW4gcGl4ZWxzICovCi0JVUNIQVIgTnVtYmVyT2ZQbGFuZXM7CS8qICAgICAgICAgICAgICAgICAgIGRiICAgICAgPyAgICAgICA7IG51bWJlciBvZiBtZW1vcnkgcGxhbmVzICovCi0JVUNIQVIgQml0c1BlclBpeGVsOwkvKiAgICAgICAgICAgICAgICAgICBkYiAgICAgID8gICAgICAgOyBiaXRzIHBlciBwaXhlbCAqLwotCVVDSEFSIE51bWJlck9mQmFua3M7CS8qICAgICAgICAgICAgICAgICAgIGRiICAgICAgPyAgICAgICA7IG51bWJlciBvZiBiYW5rcyAqLwotCVVDSEFSIE1lbW9yeU1vZGVsOwkvKiAgICAgICAgICAgICAgICAgICBkYiAgICAgID8gICAgICAgOyBtZW1vcnkgbW9kZWwgdHlwZSAqLwotCVVDSEFSIEJhbmtTaXplOwkJLyogICAgICAgICAgICAgICAgICAgZGIgICAgICA/ICAgICAgIDsgYmFuayBzaXplIGluIEtCICovCi0JVUNIQVIgTnVtYmVyT2ZJbWFnZVBhZ2VzOwkvKiAgICAgICAgICAgIGRiICAgID8gICAgICAgOyBudW1iZXIgb2YgaW1hZ2VzICovCi0JVUNIQVIgUmVzZXJ2ZWRGb3JQYWdlRnVuY3Rpb247CS8qIGRiICAxICAgICAgIDsgcmVzZXJ2ZWQgZm9yIHBhZ2UgZnVuY3Rpb24gKi8KKy8vOyBNYW5kYXRvcnkgaW5mb3JtYXRpb24gZm9yIFZCRSAxLjIgYW5kIGFib3ZlCisgIFVTSE9SVCAgICBYUmVzb2x1dGlvbjsgICAgICAvLwkJCWR3CT8JOyBob3Jpem9udGFsIHJlc29sdXRpb24gaW4gcGl4ZWxzIG9yIGNoYXJhY3RlcnMKKwlVU0hPUlQgICAgWVJlc29sdXRpb247ICAgICAgLy8JCQlkdwk/CTsgdmVydGljYWwgcmVzb2x1dGlvbiBpbiBwaXhlbHMgb3IgY2hhcmFjdGVycworCVVDSEFSICAgICBYQ2hhclNpemU7ICAgICAgICAvLwkJCWRiCT8JOyBjaGFyYWN0ZXIgY2VsbCB3aWR0aCBpbiBwaXhlbHMKKwlVQ0hBUiAgICAgWUNoYXJTaXplOyAgICAgICAgLy8JCQlkYgk/CTsgY2hhcmFjdGVyIGNlbGwgaGVpZ2h0IGluIHBpeGVscworCVVDSEFSICAgICBOdW1iZXJPZlBsYW5lczsgICAvLwkJCWRiCT8JOyBudW1iZXIgb2YgbWVtb3J5IHBsYW5lcworCVVDSEFSICAgICBCaXRzUGVyUGl4ZWw7ICAgICAvLwkJCWRiCT8JOyBiaXRzIHBlciBwaXhlbAorCVVDSEFSICAgICBOdW1iZXJPZkJhbmtzOyAgICAvLwkJCWRiCT8JOyBudW1iZXIgb2YgYmFua3MKKwlVQ0hBUiAgICAgTWVtb3J5TW9kZWw7ICAgICAgLy8JCQlkYgk/CTsgbWVtb3J5IG1vZGVsIHR5cGUKKwlVQ0hBUiAgICAgQmFua1NpemU7ICAgICAgICAgLy8JCQlkYgk/CTsgYmFuayBzaXplIGluIEtCCisJVUNIQVIgICAgIE51bWJlck9mSW1hZ2VQYWdlczsvLwkJICBkYgk/CTsgbnVtYmVyIG9mIGltYWdlcworCVVDSEFSICAgICBSZXNlcnZlZEZvclBhZ2VGdW5jdGlvbjsvL2RiCTEJOyByZXNlcnZlZCBmb3IgcGFnZSBmdW5jdGlvbgogCi0vKiA7IERpcmVjdCBDb2xvciBmaWVsZHMocmVxdWlyZWQgZm9yIGRpcmVjdC82IGFuZCBZVVYvNyBtZW1vcnkgbW9kZWxzKSAqLwotCVVDSEFSIFJlZE1hc2tTaXplOwkvKiAgICAgICAgICAgZGIgICAgICA/ICAgICAgIDsgc2l6ZSBvZiBkaXJlY3QgY29sb3IgcmVkIG1hc2sgaW4gYml0cyAqLwotCVVDSEFSIFJlZEZpZWxkUG9zaXRpb247CS8qICAgICAgICAgICBkYiAgICAgID8gICAgICAgOyBiaXQgcG9zaXRpb24gb2YgbHNiIG9mIHJlZCBtYXNrICovCi0JVUNIQVIgR3JlZW5NYXNrU2l6ZTsJLyogICAgICAgICAgIGRiICAgICAgPyAgICAgICA7IHNpemUgb2YgZGlyZWN0IGNvbG9yIGdyZWVuIG1hc2sgaW4gYml0cyAqLwotCVVDSEFSIEdyZWVuRmllbGRQb3NpdGlvbjsJLyogICAgICAgICAgIGRiICAgICAgPyAgICAgICA7IGJpdCBwb3NpdGlvbiBvZiBsc2Igb2YgZ3JlZW4gbWFzayAqLwotCVVDSEFSIEJsdWVNYXNrU2l6ZTsJLyogICAgICAgICAgIGRiICAgICAgPyAgICAgICA7IHNpemUgb2YgZGlyZWN0IGNvbG9yIGJsdWUgbWFzayBpbiBiaXRzICovCi0JVUNIQVIgQmx1ZUZpZWxkUG9zaXRpb247CS8qICAgICAgICAgICBkYiAgICAgID8gICAgICAgOyBiaXQgcG9zaXRpb24gb2YgbHNiIG9mIGJsdWUgbWFzayAqLwotCVVDSEFSIFJzdmRNYXNrU2l6ZTsJLyogICAgICAgICAgIGRiICAgICAgPyAgICAgICA7IHNpemUgb2YgZGlyZWN0IGNvbG9yIHJlc2VydmVkIG1hc2sgaW4gYml0cyAqLwotCVVDSEFSIFJzdmRGaWVsZFBvc2l0aW9uOwkvKiAgICAgICAgICAgZGIgICAgICA/ICAgICAgIDsgYml0IHBvc2l0aW9uIG9mIGxzYiBvZiByZXNlcnZlZCBtYXNrICovCi0JVUNIQVIgRGlyZWN0Q29sb3JNb2RlSW5mbzsJLyogICAgICAgICAgIGRiICAgICAgPyAgICAgICA7IGRpcmVjdCBjb2xvciBtb2RlIGF0dHJpYnV0ZXMgKi8KKy8vOyBEaXJlY3QgQ29sb3IgZmllbGRzKHJlcXVpcmVkIGZvciBkaXJlY3QvNiBhbmQgWVVWLzcgbWVtb3J5IG1vZGVscykKKwlVQ0hBUgkJCVJlZE1hc2tTaXplOyAgICAgICAgLy8JCWRiCT8JOyBzaXplIG9mIGRpcmVjdCBjb2xvciByZWQgbWFzayBpbiBiaXRzCisJVUNIQVIJCQlSZWRGaWVsZFBvc2l0aW9uOyAgIC8vCQlkYgk/CTsgYml0IHBvc2l0aW9uIG9mIGxzYiBvZiByZWQgbWFzaworCVVDSEFSCQkJR3JlZW5NYXNrU2l6ZTsgICAgICAvLwkJZGIJPwk7IHNpemUgb2YgZGlyZWN0IGNvbG9yIGdyZWVuIG1hc2sgaW4gYml0cworCVVDSEFSCQkJR3JlZW5GaWVsZFBvc2l0aW9uOyAvLwkJZGIJPwk7IGJpdCBwb3NpdGlvbiBvZiBsc2Igb2YgZ3JlZW4gbWFzaworCVVDSEFSCQkJQmx1ZU1hc2tTaXplOyAgICAgICAvLwkJZGIJPwk7IHNpemUgb2YgZGlyZWN0IGNvbG9yIGJsdWUgbWFzayBpbiBiaXRzCisJVUNIQVIJCQlCbHVlRmllbGRQb3NpdGlvbjsgIC8vCQlkYgk/CTsgYml0IHBvc2l0aW9uIG9mIGxzYiBvZiBibHVlIG1hc2sKKwlVQ0hBUgkJCVJzdmRNYXNrU2l6ZTsgICAgICAgLy8JCWRiCT8JOyBzaXplIG9mIGRpcmVjdCBjb2xvciByZXNlcnZlZCBtYXNrIGluIGJpdHMKKwlVQ0hBUgkJCVJzdmRGaWVsZFBvc2l0aW9uOyAgLy8JCWRiCT8JOyBiaXQgcG9zaXRpb24gb2YgbHNiIG9mIHJlc2VydmVkIG1hc2sKKwlVQ0hBUgkJCURpcmVjdENvbG9yTW9kZUluZm87Ly8JCWRiCT8JOyBkaXJlY3QgY29sb3IgbW9kZSBhdHRyaWJ1dGVzCiAKLS8qIDsgTWFuZGF0b3J5IGluZm9ybWF0aW9uIGZvciBWQkUgMi4wIGFuZCBhYm92ZSAqLwotCVVMT05HIFBoeXNCYXNlUHRyOwkvKiAgICAgICAgICAgZGQgICAgICA/ICAgICAgIDsgcGh5c2ljYWwgYWRkcmVzcyBmb3IgZmxhdCBtZW1vcnkgZnJhbWUgYnVmZmVyICovCi0JVUxPTkcgUmVzZXJ2ZWRfMTsJLyogICAgICAgICAgIGRkICAgICAgMCAgICAgICA7IHJlc2VydmVkIC0gYWx3YXlzIHNldCB0byAwICovCi0JVVNIT1JUIFJlc2VydmVkXzI7CS8qICAgICBkdyAgICAwICAgICAgIDsgcmVzZXJ2ZWQgLSBhbHdheXMgc2V0IHRvIDAgKi8KKy8vOyBNYW5kYXRvcnkgaW5mb3JtYXRpb24gZm9yIFZCRSAyLjAgYW5kIGFib3ZlCisJVUxPTkcJCQlQaHlzQmFzZVB0cjsgICAgICAgIC8vCQlkZAk/CTsgcGh5c2ljYWwgYWRkcmVzcyBmb3IgZmxhdCBtZW1vcnkgZnJhbWUgYnVmZmVyCisJVUxPTkcJCQlSZXNlcnZlZF8xOyAgICAgICAgIC8vCQlkZAkwCTsgcmVzZXJ2ZWQgLSBhbHdheXMgc2V0IHRvIDAKKwlVU0hPUlQJCVJlc2VydmVkXzI7ICAgICAgICAgLy8JICBkdwkwCTsgcmVzZXJ2ZWQgLSBhbHdheXMgc2V0IHRvIDAKIAotLyogOyBNYW5kYXRvcnkgaW5mb3JtYXRpb24gZm9yIFZCRSAzLjAgYW5kIGFib3ZlICovCi0JVVNIT1JUIExpbkJ5dGVzUGVyU2NhbkxpbmU7CS8qICAgICAgICAgZHcgICAgICA/ICAgICAgIDsgYnl0ZXMgcGVyIHNjYW4gbGluZSBmb3IgbGluZWFyIG1vZGVzICovCi0JVUNIQVIgQm5rTnVtYmVyT2ZJbWFnZVBhZ2VzOwkvKiAgICAgICAgIGRiICAgICAgPyAgICAgICA7IG51bWJlciBvZiBpbWFnZXMgZm9yIGJhbmtlZCBtb2RlcyAqLwotCVVDSEFSIExpbk51bWJlck9mSW1hZ1BhZ2VzOwkvKiAgICAgICAgIGRiICAgICAgPyAgICAgICA7IG51bWJlciBvZiBpbWFnZXMgZm9yIGxpbmVhciBtb2RlcyAqLwotCVVDSEFSIExpblJlZE1hc2tTaXplOwkvKiAgICAgICAgIGRiICAgICAgPyAgICAgICA7IHNpemUgb2YgZGlyZWN0IGNvbG9yIHJlZCBtYXNrKGxpbmVhciBtb2RlcykgKi8KLQlVQ0hBUiBMaW5SZWRGaWVsZFBvc2l0aW9uOwkvKiAgICAgICAgIGRiICAgICAgPyAgICAgICA7IGJpdCBwb3NpdGlvbiBvZiBsc2Igb2YgcmVkIG1hc2sobGluZWFyIG1vZGVzKSAqLwotCVVDSEFSIExpbkdyZWVuTWFza1NpemU7CS8qICAgICAgICAgZGIgICAgICA/ICAgICAgIDsgc2l6ZSBvZiBkaXJlY3QgY29sb3IgZ3JlZW4gbWFzayhsaW5lYXIgbW9kZXMpICovCi0JVUNIQVIgTGluR3JlZW5GaWVsZFBvc2l0aW9uOwkvKiAgICAgICAgIGRiICAgICAgPyAgICAgICA7IGJpdCBwb3NpdGlvbiBvZiBsc2Igb2YgZ3JlZW4gbWFzayhsaW5lYXIgbW9kZXMpICovCi0JVUNIQVIgTGluQmx1ZU1hc2tTaXplOwkvKiAgICAgICAgIGRiICAgICAgPyAgICAgICA7IHNpemUgb2YgZGlyZWN0IGNvbG9yIGJsdWUgbWFzayhsaW5lYXIgbW9kZXMpICovCi0JVUNIQVIgTGluQmx1ZUZpZWxkUG9zaXRpb247CS8qICAgICAgICAgZGIgICAgICA/ICAgICAgIDsgYml0IHBvc2l0aW9uIG9mIGxzYiBvZiBibHVlIG1hc2sobGluZWFyIG1vZGVzKSAqLwotCVVDSEFSIExpblJzdmRNYXNrU2l6ZTsJLyogICAgICAgICBkYiAgICAgID8gICAgICAgOyBzaXplIG9mIGRpcmVjdCBjb2xvciByZXNlcnZlZCBtYXNrKGxpbmVhciBtb2RlcykgKi8KLQlVQ0hBUiBMaW5Sc3ZkRmllbGRQb3NpdGlvbjsJLyogICAgICAgICBkYiAgICAgID8gICAgICAgOyBiaXQgcG9zaXRpb24gb2YgbHNiIG9mIHJlc2VydmVkIG1hc2sobGluZWFyIG1vZGVzKSAqLwotCVVMT05HIE1heFBpeGVsQ2xvY2s7CS8qICAgICAgICAgZGQgICAgICA/ICAgICAgIDsgbWF4aW11bSBwaXhlbCBjbG9jayhpbiBIeikgZm9yIGdyYXBoaWNzIG1vZGUgKi8KLQlVQ0hBUiBSZXNlcnZlZDsJCS8qICAgICAgICAgZGIgICAgICAxOTAgZHVwICgwKSAqLworLy87IE1hbmRhdG9yeSBpbmZvcm1hdGlvbiBmb3IgVkJFIDMuMCBhbmQgYWJvdmUKKwlVU0hPUlQJCUxpbkJ5dGVzUGVyU2NhbkxpbmU7ICAvLwlkdwk/CTsgYnl0ZXMgcGVyIHNjYW4gbGluZSBmb3IgbGluZWFyIG1vZGVzCisJVUNIQVIJCQlCbmtOdW1iZXJPZkltYWdlUGFnZXM7Ly8JZGIJPwk7IG51bWJlciBvZiBpbWFnZXMgZm9yIGJhbmtlZCBtb2RlcworCVVDSEFSCQkJTGluTnVtYmVyT2ZJbWFnUGFnZXM7IC8vCWRiCT8JOyBudW1iZXIgb2YgaW1hZ2VzIGZvciBsaW5lYXIgbW9kZXMKKwlVQ0hBUgkJCUxpblJlZE1hc2tTaXplOyAgICAgICAvLwlkYgk/CTsgc2l6ZSBvZiBkaXJlY3QgY29sb3IgcmVkIG1hc2sobGluZWFyIG1vZGVzKQorCVVDSEFSCQkJTGluUmVkRmllbGRQb3NpdGlvbjsgIC8vCWRiCT8JOyBiaXQgcG9zaXRpb24gb2YgbHNiIG9mIHJlZCBtYXNrKGxpbmVhciBtb2RlcykKKwlVQ0hBUgkJCUxpbkdyZWVuTWFza1NpemU7ICAgICAvLwlkYgk/CTsgc2l6ZSBvZiBkaXJlY3QgY29sb3IgZ3JlZW4gbWFzayhsaW5lYXIgbW9kZXMpCisJVUNIQVIJCQlMaW5HcmVlbkZpZWxkUG9zaXRpb247Ly8JZGIJPwk7IGJpdCBwb3NpdGlvbiBvZiBsc2Igb2YgZ3JlZW4gbWFzayhsaW5lYXIgbW9kZXMpCisJVUNIQVIJCQlMaW5CbHVlTWFza1NpemU7ICAgICAgLy8JZGIJPwk7IHNpemUgb2YgZGlyZWN0IGNvbG9yIGJsdWUgbWFzayhsaW5lYXIgbW9kZXMpCisJVUNIQVIJCQlMaW5CbHVlRmllbGRQb3NpdGlvbjsgLy8JZGIJPwk7IGJpdCBwb3NpdGlvbiBvZiBsc2Igb2YgYmx1ZSBtYXNrKGxpbmVhciBtb2RlcykKKwlVQ0hBUgkJCUxpblJzdmRNYXNrU2l6ZTsgICAgICAvLwlkYgk/CTsgc2l6ZSBvZiBkaXJlY3QgY29sb3IgcmVzZXJ2ZWQgbWFzayhsaW5lYXIgbW9kZXMpCisJVUNIQVIJCQlMaW5Sc3ZkRmllbGRQb3NpdGlvbjsgLy8JZGIJPwk7IGJpdCBwb3NpdGlvbiBvZiBsc2Igb2YgcmVzZXJ2ZWQgbWFzayhsaW5lYXIgbW9kZXMpCisJVUxPTkcJCQlNYXhQaXhlbENsb2NrOyAgICAgICAgLy8JZGQJPwk7IG1heGltdW0gcGl4ZWwgY2xvY2soaW4gSHopIGZvciBncmFwaGljcyBtb2RlCisJVUNIQVIJCQlSZXNlcnZlZDsgICAgICAgICAgICAgLy8JZGIJMTkwIGR1cCAoMCkKIH0gVkVTQV9NT0RFX0lORk9fQkxPQ0s7CiAKLS8qICBCSU9TIGZ1bmN0aW9uIENBTExTICovCi0jZGVmaW5lIEFUT01fQklPU19FWFRFTkRFRF9GVU5DVElPTl9DT0RFICAgICAgICAweEEwCS8qICBBVEkgRXh0ZW5kZWQgRnVuY3Rpb24gY29kZSAqLworLy8gQklPUyBmdW5jdGlvbiBDQUxMUworI2RlZmluZSBBVE9NX0JJT1NfRVhURU5ERURfRlVOQ1RJT05fQ09ERSAgICAgICAgMHhBMAkgICAgICAgIC8vIEFUSSBFeHRlbmRlZCBGdW5jdGlvbiBjb2RlCiAjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9DT1BfTU9ERSAgICAgICAgICAgICAweDAwCiAjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9TSE9SVF9RVUVSWTEgICAgICAgICAweDA0CiAjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9TSE9SVF9RVUVSWTIgICAgICAgICAweDA1CiAjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9TSE9SVF9RVUVSWTMgICAgICAgICAweDA2Ci0jZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9HRVRfRERDICAgICAgICAgICAgICAweDBCCisjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9HRVRfRERDICAgICAgICAgICAgICAweDBCICAgCiAjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9BU0lDX0RTVEFURSAgICAgICAgICAweDBFCiAjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9ERUJVR19QTEFZICAgICAgICAgICAweDBGCiAjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9TVFZfU1REICAgICAgICAgICAgICAweDE2CkBAIC00MjE3LDEwMCArNTEzNywxMzUgQEAKICNkZWZpbmUgQVRPTV9CSU9TX0ZVTkNUSU9OX1BBTkVMX0NPTlRST0wgICAgICAgIDB4ODIKICNkZWZpbmUgQVRPTV9CSU9TX0ZVTkNUSU9OX09MRF9ERVZJQ0VfREVUICAgICAgIDB4ODMKICNkZWZpbmUgQVRPTV9CSU9TX0ZVTkNUSU9OX09MRF9ERVZJQ0VfU1dJVENIICAgIDB4ODQKLSNkZWZpbmUgQVRPTV9CSU9TX0ZVTkNUSU9OX0hXX0lDT04gICAgICAgICAgICAgIDB4OEEKKyNkZWZpbmUgQVRPTV9CSU9TX0ZVTkNUSU9OX0hXX0lDT04gICAgICAgICAgICAgIDB4OEEgCiAjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9TRVRfQ01PUyAgICAgICAgICAgICAweDhCCi0jZGVmaW5lIFNVQl9GVU5DVElPTl9VUERBVEVfRElTUExBWV9JTkZPICAgICAgICAweDgwMDAJLyogIFN1YiBmdW5jdGlvbiA4MCAqLwotI2RlZmluZSBTVUJfRlVOQ1RJT05fVVBEQVRFX0VYUEFOU0lPTl9JTkZPICAgICAgMHg4MTAwCS8qICBTdWIgZnVuY3Rpb24gODAgKi8KKyNkZWZpbmUgU1VCX0ZVTkNUSU9OX1VQREFURV9ESVNQTEFZX0lORk8gICAgICAgIDB4ODAwMCAgICAgICAgICAvLyBTdWIgZnVuY3Rpb24gODAKKyNkZWZpbmUgU1VCX0ZVTkNUSU9OX1VQREFURV9FWFBBTlNJT05fSU5GTyAgICAgIDB4ODEwMCAgICAgICAgICAvLyBTdWIgZnVuY3Rpb24gODAKIAogI2RlZmluZSBBVE9NX0JJT1NfRlVOQ1RJT05fRElTUExBWV9JTkZPICAgICAgICAgMHg4RAogI2RlZmluZSBBVE9NX0JJT1NfRlVOQ1RJT05fREVWSUNFX09OX09GRiAgICAgICAgMHg4RQotI2RlZmluZSBBVE9NX0JJT1NfRlVOQ1RJT05fVklERU9fU1RBVEUgICAgICAgICAgMHg4RgotI2RlZmluZSBBVE9NX1NVQl9GVU5DVElPTl9HRVRfQ1JJVElDQUxfU1RBVEUgICAgMHgwMzAwCS8qICBTdWIgZnVuY3Rpb24gMDMgKi8KLSNkZWZpbmUgQVRPTV9TVUJfRlVOQ1RJT05fR0VUX0xJRFNUQVRFICAgICAgICAgIDB4MDcwMAkvKiAgU3ViIGZ1bmN0aW9uIDcgKi8KLSNkZWZpbmUgQVRPTV9TVUJfRlVOQ1RJT05fVEhFUk1BTF9TVEFURV9OT1RJQ0UgIDB4MTQwMAkvKiAgTm90aWZ5IGNhbGxlciB0aGUgY3VycmVudCB0aGVybWFsIHN0YXRlICovCi0jZGVmaW5lIEFUT01fU1VCX0ZVTkNUSU9OX0NSSVRJQ0FMX1NUQVRFX05PVElDRSAweDgzMDAJLyogIE5vdGlmeSBjYWxsZXIgdGhlIGN1cnJlbnQgY3JpdGljYWwgc3RhdGUgKi8KLSNkZWZpbmUgQVRPTV9TVUJfRlVOQ1RJT05fU0VUX0xJRFNUQVRFICAgICAgICAgIDB4ODUwMAkvKiAgU3ViIGZ1bmN0aW9uIDg1ICovCi0jZGVmaW5lIEFUT01fU1VCX0ZVTkNUSU9OX0dFVF9SRVFfRElTUExBWV9GUk9NX1NCSU9TX01PREUgMHg4OTAwCS8qICBTdWIgZnVuY3Rpb24gODkgKi8KLSNkZWZpbmUgQVRPTV9TVUJfRlVOQ1RJT05fSU5GT1JNX0FEQ19TVVBQT1JUICAgIDB4OTQwMAkvKiAgTm90aWZ5IGNhbGxlciB0aGF0IEFEQyBpcyBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgQVRPTV9CSU9TX0ZVTkNUSU9OX1ZJREVPX1NUQVRFICAgICAgICAgIDB4OEYgCisjZGVmaW5lIEFUT01fU1VCX0ZVTkNUSU9OX0dFVF9DUklUSUNBTF9TVEFURSAgICAweDAzMDAgICAgICAgICAgLy8gU3ViIGZ1bmN0aW9uIDAzICAKKyNkZWZpbmUgQVRPTV9TVUJfRlVOQ1RJT05fR0VUX0xJRFNUQVRFICAgICAgICAgIDB4MDcwMCAgICAgICAgICAvLyBTdWIgZnVuY3Rpb24gNworI2RlZmluZSBBVE9NX1NVQl9GVU5DVElPTl9USEVSTUFMX1NUQVRFX05PVElDRSAgMHgxNDAwICAgICAgICAgIC8vIE5vdGlmeSBjYWxsZXIgdGhlIGN1cnJlbnQgdGhlcm1hbCBzdGF0ZQorI2RlZmluZSBBVE9NX1NVQl9GVU5DVElPTl9DUklUSUNBTF9TVEFURV9OT1RJQ0UgMHg4MzAwICAgICAgICAgIC8vIE5vdGlmeSBjYWxsZXIgdGhlIGN1cnJlbnQgY3JpdGljYWwgc3RhdGUKKyNkZWZpbmUgQVRPTV9TVUJfRlVOQ1RJT05fU0VUX0xJRFNUQVRFICAgICAgICAgIDB4ODUwMCAgICAgICAgICAvLyBTdWIgZnVuY3Rpb24gODUKKyNkZWZpbmUgQVRPTV9TVUJfRlVOQ1RJT05fR0VUX1JFUV9ESVNQTEFZX0ZST01fU0JJT1NfTU9ERSAweDg5MDAvLyBTdWIgZnVuY3Rpb24gODkKKyNkZWZpbmUgQVRPTV9TVUJfRlVOQ1RJT05fSU5GT1JNX0FEQ19TVVBQT1JUICAgIDB4OTQwMCAgICAgICAgICAvLyBOb3RpZnkgY2FsbGVyIHRoYXQgQURDIGlzIHN1cHBvcnRlZAorICAgICAKIAotI2RlZmluZSBBVE9NX0JJT1NfRlVOQ1RJT05fVkVTQV9EUE1TICAgICAgICAgICAgMHg0RjEwCS8qICBTZXQgRFBNUyAqLwotI2RlZmluZSBBVE9NX1NVQl9GVU5DVElPTl9TRVRfRFBNUyAgICAgICAgICAgICAgMHgwMDAxCS8qICBCTDogU3ViIGZ1bmN0aW9uIDAxICovCi0jZGVmaW5lIEFUT01fU1VCX0ZVTkNUSU9OX0dFVF9EUE1TICAgICAgICAgICAgICAweDAwMDIJLyogIEJMOiBTdWIgZnVuY3Rpb24gMDIgKi8KLSNkZWZpbmUgQVRPTV9QQVJBTUVURVJfVkVTQV9EUE1TX09OICAgICAgICAgICAgIDB4MDAwMAkvKiAgQkggUGFyYW1ldGVyIGZvciBEUE1TIE9OLiAqLwotI2RlZmluZSBBVE9NX1BBUkFNRVRFUl9WRVNBX0RQTVNfU1RBTkRCWSAgICAgICAgMHgwMTAwCS8qICBCSCBQYXJhbWV0ZXIgZm9yIERQTVMgU1RBTkRCWSAqLwotI2RlZmluZSBBVE9NX1BBUkFNRVRFUl9WRVNBX0RQTVNfU1VTUEVORCAgICAgICAgMHgwMjAwCS8qICBCSCBQYXJhbWV0ZXIgZm9yIERQTVMgU1VTUEVORCAqLwotI2RlZmluZSBBVE9NX1BBUkFNRVRFUl9WRVNBX0RQTVNfT0ZGICAgICAgICAgICAgMHgwNDAwCS8qICBCSCBQYXJhbWV0ZXIgZm9yIERQTVMgT0ZGICovCi0jZGVmaW5lIEFUT01fUEFSQU1FVEVSX1ZFU0FfRFBNU19SRURVQ0VfT04gICAgICAweDA4MDAJLyogIEJIIFBhcmFtZXRlciBmb3IgRFBNUyBSRURVQ0UgT04gKE5PVCBTVVBQT1JURUQpICovCisjZGVmaW5lIEFUT01fQklPU19GVU5DVElPTl9WRVNBX0RQTVMgICAgICAgICAgICAweDRGMTAgICAgICAgICAgLy8gU2V0IERQTVMgCisjZGVmaW5lIEFUT01fU1VCX0ZVTkNUSU9OX1NFVF9EUE1TICAgICAgICAgICAgICAweDAwMDEgICAgICAgICAgLy8gQkw6IFN1YiBmdW5jdGlvbiAwMSAKKyNkZWZpbmUgQVRPTV9TVUJfRlVOQ1RJT05fR0VUX0RQTVMgICAgICAgICAgICAgIDB4MDAwMiAgICAgICAgICAvLyBCTDogU3ViIGZ1bmN0aW9uIDAyIAorI2RlZmluZSBBVE9NX1BBUkFNRVRFUl9WRVNBX0RQTVNfT04gICAgICAgICAgICAgMHgwMDAwICAgICAgICAgIC8vIEJIIFBhcmFtZXRlciBmb3IgRFBNUyBPTi4gIAorI2RlZmluZSBBVE9NX1BBUkFNRVRFUl9WRVNBX0RQTVNfU1RBTkRCWSAgICAgICAgMHgwMTAwICAgICAgICAgIC8vIEJIIFBhcmFtZXRlciBmb3IgRFBNUyBTVEFOREJZICAKKyNkZWZpbmUgQVRPTV9QQVJBTUVURVJfVkVTQV9EUE1TX1NVU1BFTkQgICAgICAgIDB4MDIwMCAgICAgICAgICAvLyBCSCBQYXJhbWV0ZXIgZm9yIERQTVMgU1VTUEVORAorI2RlZmluZSBBVE9NX1BBUkFNRVRFUl9WRVNBX0RQTVNfT0ZGICAgICAgICAgICAgMHgwNDAwICAgICAgICAgIC8vIEJIIFBhcmFtZXRlciBmb3IgRFBNUyBPRkYKKyNkZWZpbmUgQVRPTV9QQVJBTUVURVJfVkVTQV9EUE1TX1JFRFVDRV9PTiAgICAgIDB4MDgwMCAgICAgICAgICAvLyBCSCBQYXJhbWV0ZXIgZm9yIERQTVMgUkVEVUNFIE9OIChOT1QgU1VQUE9SVEVEKQogCiAjZGVmaW5lIEFUT01fQklPU19SRVRVUk5fQ09ERV9NQVNLICAgICAgICAgICAgICAweDAwMDBGRjAwTAogI2RlZmluZSBBVE9NX0JJT1NfUkVHX0hJR0hfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwRkYwMEwKICNkZWZpbmUgQVRPTV9CSU9TX1JFR19MT1dfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwRkZMCiAKLS8qICBzdHJ1Y3R1cmUgdXNlZCBmb3IgVkJJT1Mgb25seSAqLworLy8gc3RydWN0dXJlIHVzZWQgZm9yIFZCSU9TIG9ubHkKIAotLyogRGlzcE91dEluZm9UYWJsZSAqLwotdHlwZWRlZiBzdHJ1Y3QgX0FTSUNfVFJBTlNNSVRURVJfSU5GTyB7CisvL0Rpc3BPdXRJbmZvVGFibGUKK3R5cGVkZWYgc3RydWN0IF9BU0lDX1RSQU5TTUlUVEVSX0lORk8KK3sKIAlVU0hPUlQgdXNUcmFuc21pdHRlck9iaklkOwogCVVTSE9SVCB1c1N1cHBvcnREZXZpY2U7Ci0JVUNIQVIgdWNUcmFuc21pdHRlckNtZFRibElkOwotCVVDSEFSIHVjQ29uZmlnOwotCVVDSEFSIHVjRW5jb2RlcklEOwkvKiBhdmFpbGFibGUgMXN0IGVuY29kZXIgKCBkZWZhdWx0ICkgKi8KLQlVQ0hBUiB1Y09wdGlvbkVuY29kZXJJRDsJLyogYXZhaWxhYmxlIDJuZCBlbmNvZGVyICggb3B0aW9uYWwgKSAqLwotCVVDSEFSIHVjMm5kRW5jb2RlcklEOwotCVVDSEFSIHVjUmVzZXJ2ZWQ7Ci19IEFTSUNfVFJBTlNNSVRURVJfSU5GTzsKKyAgVUNIQVIgIHVjVHJhbnNtaXR0ZXJDbWRUYmxJZDsKKwlVQ0hBUiAgdWNDb25maWc7CisJVUNIQVIgIHVjRW5jb2RlcklEOwkJCQkJIC8vYXZhaWxhYmxlIDFzdCBlbmNvZGVyICggZGVmYXVsdCApCisJVUNIQVIgIHVjT3B0aW9uRW5jb2RlcklEOyAgICAvL2F2YWlsYWJsZSAybmQgZW5jb2RlciAoIG9wdGlvbmFsICkKKwlVQ0hBUiAgdWMybmRFbmNvZGVySUQ7CisJVUNIQVIgIHVjUmVzZXJ2ZWQ7Cit9QVNJQ19UUkFOU01JVFRFUl9JTkZPOwogCi10eXBlZGVmIHN0cnVjdCBfQVNJQ19FTkNPREVSX0lORk8gewordHlwZWRlZiBzdHJ1Y3QgX0FTSUNfRU5DT0RFUl9JTkZPCit7CiAJVUNIQVIgdWNFbmNvZGVySUQ7CiAJVUNIQVIgdWNFbmNvZGVyQ29uZmlnOwotCVVTSE9SVCB1c0VuY29kZXJDbWRUYmxJZDsKLX0gQVNJQ19FTkNPREVSX0lORk87CisgIFVTSE9SVCB1c0VuY29kZXJDbWRUYmxJZDsKK31BU0lDX0VOQ09ERVJfSU5GTzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fRElTUF9PVVRfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9ESVNQX09VVF9JTkZPCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOyAgCiAJVVNIT1JUIHB0clRyYW5zbWl0dGVySW5mbzsKIAlVU0hPUlQgcHRyRW5jb2RlckluZm87Ci0JQVNJQ19UUkFOU01JVFRFUl9JTkZPIGFzVHJhbnNtaXR0ZXJJbmZvWzFdOwotCUFTSUNfRU5DT0RFUl9JTkZPIGFzRW5jb2RlckluZm9bMV07Ci19IEFUT01fRElTUF9PVVRfSU5GTzsKKwlBU0lDX1RSQU5TTUlUVEVSX0lORk8gIGFzVHJhbnNtaXR0ZXJJbmZvWzFdOworCUFTSUNfRU5DT0RFUl9JTkZPICAgICAgYXNFbmNvZGVySW5mb1sxXTsKK31BVE9NX0RJU1BfT1VUX0lORk87CiAKLS8qICBEaXNwRGV2aWNlUHJpb3JpdHlJbmZvICovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9ESVNQTEFZX0RFVklDRV9QUklPUklUWV9JTkZPIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0RJU1BfT1VUX0lORk9fVjIKK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7ICAKKwlVU0hPUlQgcHRyVHJhbnNtaXR0ZXJJbmZvOworCVVTSE9SVCBwdHJFbmNvZGVySW5mbzsKKyAgVVNIT1JUIHB0ck1haW5DYWxsUGFyc2VyRmFyOyAgICAgICAgICAgICAgICAgIC8vIGRpcmVjdCBhZGRyZXNzIG9mIG1haW4gcGFyc2VyIGNhbGwgaW4gVkJJT1MgYmluYXJ5LiAKKwlBU0lDX1RSQU5TTUlUVEVSX0lORk8gIGFzVHJhbnNtaXR0ZXJJbmZvWzFdOworCUFTSUNfRU5DT0RFUl9JTkZPICAgICAgYXNFbmNvZGVySW5mb1sxXTsKK31BVE9NX0RJU1BfT1VUX0lORk9fVjI7CisKKy8vIERpc3BEZXZpY2VQcmlvcml0eUluZm8KK3R5cGVkZWYgc3RydWN0IF9BVE9NX0RJU1BMQVlfREVWSUNFX1BSSU9SSVRZX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7ICAKIAlVU0hPUlQgYXNEZXZpY2VQcmlvcml0eVsxNl07Ci19IEFUT01fRElTUExBWV9ERVZJQ0VfUFJJT1JJVFlfSU5GTzsKK31BVE9NX0RJU1BMQVlfREVWSUNFX1BSSU9SSVRZX0lORk87CiAKLS8qIFByb2Nlc3NBdXhDaGFubmVsVHJhbnNhY3Rpb25UYWJsZSAqLwotdHlwZWRlZiBzdHJ1Y3QgX1BST0NFU1NfQVVYX0NIQU5ORUxfVFJBTlNBQ1RJT05fUEFSQU1FVEVSUyB7Ci0JVVNIT1JUIGxwQXV4UmVxdWVzdDsKLQlVU0hPUlQgbHBEYXRhT3V0OwotCVVDSEFSIHVjQ2hhbm5lbElEOwotCXVuaW9uIHsKLQkJVUNIQVIgdWNSZXBseVN0YXR1czsKLQkJVUNIQVIgdWNEZWxheTsKKy8vUHJvY2Vzc0F1eENoYW5uZWxUcmFuc2FjdGlvblRhYmxlCit0eXBlZGVmIHN0cnVjdCBfUFJPQ0VTU19BVVhfQ0hBTk5FTF9UUkFOU0FDVElPTl9QQVJBTUVURVJTCit7CisJVVNIT1JUCWxwQXV4UmVxdWVzdDsKKwlVU0hPUlQgIGxwRGF0YU91dDsKKwlVQ0hBUgkJdWNDaGFubmVsSUQ7CisJdW5pb24KKwl7CisgIFVDSEFSICAgdWNSZXBseVN0YXR1czsKKwlVQ0hBUiAgIHVjRGVsYXk7CiAJfTsKLQlVQ0hBUiB1Y0RhdGFPdXRMZW47Ci0JVUNIQVIgdWNSZXNlcnZlZDsKLX0gUFJPQ0VTU19BVVhfQ0hBTk5FTF9UUkFOU0FDVElPTl9QQVJBTUVURVJTOworICBVQ0hBUiAgIHVjRGF0YU91dExlbjsKKwlVQ0hBUiAgIHVjUmVzZXJ2ZWQ7Cit9UFJPQ0VTU19BVVhfQ0hBTk5FTF9UUkFOU0FDVElPTl9QQVJBTUVURVJTOworCisvL1Byb2Nlc3NBdXhDaGFubmVsVHJhbnNhY3Rpb25UYWJsZQordHlwZWRlZiBzdHJ1Y3QgX1BST0NFU1NfQVVYX0NIQU5ORUxfVFJBTlNBQ1RJT05fUEFSQU1FVEVSU19WMgoreworCVVTSE9SVAlscEF1eFJlcXVlc3Q7CisJVVNIT1JUICBscERhdGFPdXQ7CisJVUNIQVIJCXVjQ2hhbm5lbElEOworCXVuaW9uCisJeworICBVQ0hBUiAgIHVjUmVwbHlTdGF0dXM7CisJVUNIQVIgICB1Y0RlbGF5OworCX07CisgIFVDSEFSICAgdWNEYXRhT3V0TGVuOworCVVDSEFSICAgdWNIUERfSUQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89MDogSFBEMSwgPTE6IEhQRDIsID0yOiBIUEQzLCA9MzogSFBENCwgPTQ6IEhQRDUsID01OiBIUEQ2Cit9UFJPQ0VTU19BVVhfQ0hBTk5FTF9UUkFOU0FDVElPTl9QQVJBTUVURVJTX1YyOwogCiAjZGVmaW5lIFBST0NFU1NfQVVYX0NIQU5ORUxfVFJBTlNBQ1RJT05fUFNfQUxMT0NBVElPTgkJCVBST0NFU1NfQVVYX0NIQU5ORUxfVFJBTlNBQ1RJT05fUEFSQU1FVEVSUwogCi0vKiBHZXRTaW5rVHlwZSAqLworLy9HZXRTaW5rVHlwZQogCi10eXBlZGVmIHN0cnVjdCBfRFBfRU5DT0RFUl9TRVJWSUNFX1BBUkFNRVRFUlMgewordHlwZWRlZiBzdHJ1Y3QgX0RQX0VOQ09ERVJfU0VSVklDRV9QQVJBTUVURVJTCit7CiAJVVNIT1JUIHVjTGlua0Nsb2NrOwotCXVuaW9uIHsKLQkJVUNIQVIgdWNDb25maWc7CS8qICBmb3IgRFAgdHJhaW5pbmcgY29tbWFuZCAqLwotCQlVQ0hBUiB1Y0kyY0lkOwkvKiAgdXNlIGZvciBHRVRfU0lOS19UWVBFIGNvbW1hbmQgKi8KKwl1bmlvbiAKKwl7CisJVUNIQVIgdWNDb25maWc7CQkJCS8vIGZvciBEUCB0cmFpbmluZyBjb21tYW5kCisJVUNIQVIgdWNJMmNJZDsJCQkJLy8gdXNlIGZvciBHRVRfU0lOS19UWVBFIGNvbW1hbmQKIAl9OwogCVVDSEFSIHVjQWN0aW9uOwogCVVDSEFSIHVjU3RhdHVzOwogCVVDSEFSIHVjTGFuZU51bTsKIAlVQ0hBUiB1Y1Jlc2VydmVkWzJdOwotfSBEUF9FTkNPREVSX1NFUlZJQ0VfUEFSQU1FVEVSUzsKK31EUF9FTkNPREVSX1NFUlZJQ0VfUEFSQU1FVEVSUzsKIAotLyogIHVjQWN0aW9uICovCisvLyB1Y0FjdGlvbgogI2RlZmluZSBBVE9NX0RQX0FDVElPTl9HRVRfU0lOS19UWVBFCQkJCQkJCTB4MDEKKy8qIG9ic2VsZXRlICovCiAjZGVmaW5lIEFUT01fRFBfQUNUSU9OX1RSQUlOSU5HX1NUQVJUCQkJCQkJCTB4MDIKICNkZWZpbmUgQVRPTV9EUF9BQ1RJT05fVFJBSU5JTkdfQ09NUExFVEUJCQkJCTB4MDMKICNkZWZpbmUgQVRPTV9EUF9BQ1RJT05fVFJBSU5JTkdfUEFUVEVSTl9TRUwJCQkJMHgwNApAQCAtNDMxOCw3ICs1MjczLDcgQEAKICNkZWZpbmUgQVRPTV9EUF9BQ1RJT05fR0VUX1ZTV0lOR19QUkVFTVAJCQkJCTB4MDYKICNkZWZpbmUgQVRPTV9EUF9BQ1RJT05fQkxBTktJTkcgICAgICAgICAgICAgICAgICAgMHgwNwogCi0vKiAgdWNDb25maWcgKi8KKy8vIHVjQ29uZmlnCiAjZGVmaW5lIEFUT01fRFBfQ09ORklHX0VOQ09ERVJfU0VMX01BU0sJCQkJCQkweDAzCiAjZGVmaW5lIEFUT01fRFBfQ09ORklHX0RJRzFfRU5DT0RFUgkJCQkJCQkJMHgwMAogI2RlZmluZSBBVE9NX0RQX0NPTkZJR19ESUcyX0VOQ09ERVIJCQkJCQkJCTB4MDEKQEAgLTQzMjYsMTQgKzUyODEsMTQgQEAKICNkZWZpbmUgQVRPTV9EUF9DT05GSUdfTElOS19TRUxfTUFTSwkJCQkJCQkweDA0CiAjZGVmaW5lIEFUT01fRFBfQ09ORklHX0xJTktfQQkJCQkJCQkJCQkJMHgwMAogI2RlZmluZSBBVE9NX0RQX0NPTkZJR19MSU5LX0IJCQkJCQkJCQkJCTB4MDQKLQorLyogL29ic2VsZXRlICovCiAjZGVmaW5lIERQX0VOQ09ERVJfU0VSVklDRV9QU19BTExPQ0FUSU9OCQkJCVdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BBUkFNRVRFUlMKIAotLyogIERQX1RSQUlOSU5HX1RBQkxFICovCi0jZGVmaW5lIERQQ0RfU0VUX0xJTktSQVRFX0xBTkVOVU1fUEFUVEVSTjFfVEJMX0FERFIJCQkJQVRPTV9EUF9UUkFJTklOR19UQkxfQUREUgorLy8gRFBfVFJBSU5JTkdfVEFCTEUKKyNkZWZpbmUgRFBDRF9TRVRfTElOS1JBVEVfTEFORU5VTV9QQVRURVJOMV9UQkxfQUREUgkJCQlBVE9NX0RQX1RSQUlOSU5HX1RCTF9BRERSCQkKICNkZWZpbmUgRFBDRF9TRVRfU1NfQ05UTF9UQkxfQUREUgkJCQkJCQkJCQkJCQkoQVRPTV9EUF9UUkFJTklOR19UQkxfQUREUiArIDggKQotI2RlZmluZSBEUENEX1NFVF9MQU5FX1ZTV0lOR19QUkVFTVBfVEJMX0FERFIJCQkJCQkJKEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIgKyAxNikKLSNkZWZpbmUgRFBDRF9TRVRfVFJBSU5JTkdfUEFUVEVSTjBfVEJMX0FERFIJCQkJCQkJCShBVE9NX0RQX1RSQUlOSU5HX1RCTF9BRERSICsgMjQpCisjZGVmaW5lIERQQ0RfU0VUX0xBTkVfVlNXSU5HX1BSRUVNUF9UQkxfQUREUgkJCQkJCQkoQVRPTV9EUF9UUkFJTklOR19UQkxfQUREUiArIDE2ICkKKyNkZWZpbmUgRFBDRF9TRVRfVFJBSU5JTkdfUEFUVEVSTjBfVEJMX0FERFIJCQkJCQkJCShBVE9NX0RQX1RSQUlOSU5HX1RCTF9BRERSICsgMjQgKQogI2RlZmluZSBEUENEX1NFVF9UUkFJTklOR19QQVRURVJOMl9UQkxfQUREUgkJCQkJCQkJKEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIgKyAzMikKICNkZWZpbmUgRFBDRF9HRVRfTElOS1JBVEVfTEFORU5VTV9TU19UQkxfQUREUgkJCQkJCQkoQVRPTV9EUF9UUkFJTklOR19UQkxfQUREUiArIDQwKQogI2RlZmluZQlEUENEX0dFVF9MQU5FX1NUQVRVU19BREpVU1RfVEJMX0FERFIJCQkJCQkJKEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIgKyA0OCkKQEAgLTQzNDEsMTgzICs1Mjk2LDI0MSBAQAogI2RlZmluZSBEUF9JMkNfQVVYX0REQ19XUklURV9UQkxfQUREUgkJCQkJCQkJCQkJKEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIgKyA2NCkKICNkZWZpbmUgRFBfSTJDX0FVWF9ERENfUkVBRF9TVEFSVF9UQkxfQUREUgkJCQkJCQkJKEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIgKyA3MikKICNkZWZpbmUgRFBfSTJDX0FVWF9ERENfUkVBRF9UQkxfQUREUgkJCQkJCQkJCQkJKEFUT01fRFBfVFJBSU5JTkdfVEJMX0FERFIgKyA3NikKLSNkZWZpbmUgRFBfSTJDX0FVWF9ERENfUkVBRF9FTkRfVEJMX0FERFIJCQkJCQkJCQkoQVRPTV9EUF9UUkFJTklOR19UQkxfQUREUiArIDgwKQorI2RlZmluZSBEUF9JMkNfQVVYX0REQ19XUklURV9FTkRfVEJMX0FERFIgICAgICAgICAgICAgICAgIChBVE9NX0RQX1RSQUlOSU5HX1RCTF9BRERSICsgODApIAorI2RlZmluZSBEUF9JMkNfQVVYX0REQ19SRUFEX0VORF9UQkxfQUREUgkJCQkJCQkJCShBVE9NX0RQX1RSQUlOSU5HX1RCTF9BRERSICsgODQpCiAKLXR5cGVkZWYgc3RydWN0IF9QUk9DRVNTX0kyQ19DSEFOTkVMX1RSQU5TQUNUSU9OX1BBUkFNRVRFUlMgewotCVVDSEFSIHVjSTJDU3BlZWQ7Ci0JdW5pb24gewotCQlVQ0hBUiB1Y1JlZ0luZGV4OwotCQlVQ0hBUiB1Y1N0YXR1czsKK3R5cGVkZWYgc3RydWN0IF9QUk9DRVNTX0kyQ19DSEFOTkVMX1RSQU5TQUNUSU9OX1BBUkFNRVRFUlMKK3sKKwlVQ0hBUiAgIHVjSTJDU3BlZWQ7CisgCXVuaW9uCisJeworICAgVUNIQVIgdWNSZWdJbmRleDsKKyAgIFVDSEFSIHVjU3RhdHVzOwogCX07Ci0JVVNIT1JUIGxwSTJDRGF0YU91dDsKLQlVQ0hBUiB1Y0ZsYWc7Ci0JVUNIQVIgdWNUcmFuc0J5dGVzOwotCVVDSEFSIHVjU2xhdmVBZGRyOwotCVVDSEFSIHVjTGluZU51bWJlcjsKLX0gUFJPQ0VTU19JMkNfQ0hBTk5FTF9UUkFOU0FDVElPTl9QQVJBTUVURVJTOworCVVTSE9SVCAgbHBJMkNEYXRhT3V0OworICBVQ0hBUiAgIHVjRmxhZzsgICAgICAgICAgICAgICAKKyAgVUNIQVIgICB1Y1RyYW5zQnl0ZXM7CisgIFVDSEFSICAgdWNTbGF2ZUFkZHI7CisgIFVDSEFSICAgdWNMaW5lTnVtYmVyOworfVBST0NFU1NfSTJDX0NIQU5ORUxfVFJBTlNBQ1RJT05fUEFSQU1FVEVSUzsKIAogI2RlZmluZSBQUk9DRVNTX0kyQ19DSEFOTkVMX1RSQU5TQUNUSU9OX1BTX0FMTE9DQVRJT04gICAgICAgUFJPQ0VTU19JMkNfQ0hBTk5FTF9UUkFOU0FDVElPTl9QQVJBTUVURVJTCiAKLS8qIHVjRmxhZyAqLworLy91Y0ZsYWcKICNkZWZpbmUgSFdfSTJDX1dSSVRFICAgICAgICAxCiAjZGVmaW5lIEhXX0kyQ19SRUFEICAgICAgICAgMAorI2RlZmluZSBJMkNfMkJZVEVfQUREUiAgICAgIDB4MDIKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKiBQb3J0aW9uIFZJOiBEZWZpbml0aW5vcyBiZWluZyBvYm9zZWxldGUgKi8KK3R5cGVkZWYgc3RydWN0IF9TRVRfSFdCTE9DS19JTlNUQU5DRV9QQVJBTUVURVJfVjIKK3sKKyAgIFVDSEFSIHVjSFdCbGtJbnN0OyAgICAgICAgICAgICAgICAvLyBIVyBibG9jayBpbnN0YW5jZSwgMCwgMSwgMiwgLi4uCisgICBVQ0hBUiB1Y1Jlc2VydmVkWzNdOyAKK31TRVRfSFdCTE9DS19JTlNUQU5DRV9QQVJBTUVURVJfVjI7CisKKyNkZWZpbmUgSFdCTEtJTlNUX0lOU1RBTkNFX01BU0sgICAgICAgMHgwNworI2RlZmluZSBIV0JMS0lOU1RfSFdCTEtfTUFTSyAgICAgICAgICAweEYwCisjZGVmaW5lIEhXQkxLSU5TVF9IV0JMS19TSElGVCAgICAgICAgIDB4MDQKKworLy91Y0hXQmxvY2sKKyNkZWZpbmUgU0VMRUNUX0RJU1BfRU5HSU5FICAgICAgICAgICAgMAorI2RlZmluZSBTRUxFQ1RfRElTUF9QTEwgICAgICAgICAgICAgICAxCisjZGVmaW5lIFNFTEVDVF9EQ0lPX1VOSVBIWV9MSU5LMCAgICAgIDIKKyNkZWZpbmUgU0VMRUNUX0RDSU9fVU5JUEhZX0xJTksxICAgICAgMworI2RlZmluZSBTRUxFQ1RfRENJT19JTVBDQUwgICAgICAgICAgICA0CisjZGVmaW5lIFNFTEVDVF9EQ0lPX0RJRyAgICAgICAgICAgICAgIDYKKyNkZWZpbmUgU0VMRUNUX0NSVENfUElYRUxfUkFURSAgICAgICAgNworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8JCisvL1BvcnRpb24gVkk6IERlZmluaXRpbm9zIGZvciB2YmlvcyBNQyBzY3JhdGNoIHJlZ2lzdGVycyB0aGF0IGRyaXZlciB1c2VkCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi0vKiBSZW1vdmUgdGhlIGRlZmluaXRpb25zIGJlbG93IHdoZW4gZHJpdmVyIGlzIHJlYWR5ISAqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fREFDX0lORk8gewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVTSE9SVCB1c01heEZyZXF1ZW5jeTsJLyogIGluIDEwa0h6IHVuaXQgKi8KLQlVU0hPUlQgdXNSZXNlcnZlZDsKLX0gQVRPTV9EQUNfSU5GTzsKKyNkZWZpbmUgTUNfTUlTQzBfX01FTU9SWV9UWVBFX01BU0sgICAgMHhGMDAwMDAwMAorI2RlZmluZSBNQ19NSVNDMF9fTUVNT1JZX1RZUEVfX0dERFIxICAweDEwMDAwMDAwCisjZGVmaW5lIE1DX01JU0MwX19NRU1PUllfVFlQRV9fRERSMiAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgTUNfTUlTQzBfX01FTU9SWV9UWVBFX19HRERSMyAgMHgzMDAwMDAwMAorI2RlZmluZSBNQ19NSVNDMF9fTUVNT1JZX1RZUEVfX0dERFI0ICAweDQwMDAwMDAwCisjZGVmaW5lIE1DX01JU0MwX19NRU1PUllfVFlQRV9fR0REUjUgIDB4NTAwMDAwMDAKKyNkZWZpbmUgTUNfTUlTQzBfX01FTU9SWV9UWVBFX19ERFIzICAgMHhCMDAwMDAwMAogCi10eXBlZGVmIHN0cnVjdCBfQ09NUEFTU0lPTkFURV9EQVRBIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwkKKy8vUG9ydGlvbiBWSTogRGVmaW5pdGlub3MgYmVpbmcgb2Jvc2VsZXRlCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotCS8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgREFDMSBwb3J0aW9uICovCi0JVUNIQVIgdWNEQUMxX0JHX0FkanVzdG1lbnQ7Ci0JVUNIQVIgdWNEQUMxX0RBQ19BZGp1c3RtZW50OwotCVVTSE9SVCB1c0RBQzFfRk9SQ0VfRGF0YTsKLQkvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIERBQzIgcG9ydGlvbiAqLwotCVVDSEFSIHVjREFDMl9DUlQyX0JHX0FkanVzdG1lbnQ7Ci0JVUNIQVIgdWNEQUMyX0NSVDJfREFDX0FkanVzdG1lbnQ7Ci0JVVNIT1JUIHVzREFDMl9DUlQyX0ZPUkNFX0RhdGE7Ci0JVVNIT1JUIHVzREFDMl9DUlQyX01VWF9SZWdpc3RlckluZGV4OwotCVVDSEFSIHVjREFDMl9DUlQyX01VWF9SZWdpc3RlckluZm87CS8qIEJpdFs0OjBdPUJpdCBwb3NpdGlvbixCaXRbN109MTpBY3RpdmUgSGlnaDs9MCBBY3RpdmUgTG93ICovCi0JVUNIQVIgdWNEQUMyX05UU0NfQkdfQWRqdXN0bWVudDsKLQlVQ0hBUiB1Y0RBQzJfTlRTQ19EQUNfQWRqdXN0bWVudDsKLQlVU0hPUlQgdXNEQUMyX1RWMV9GT1JDRV9EYXRhOwotCVVTSE9SVCB1c0RBQzJfVFYxX01VWF9SZWdpc3RlckluZGV4OwotCVVDSEFSIHVjREFDMl9UVjFfTVVYX1JlZ2lzdGVySW5mbzsJLyogQml0WzQ6MF09Qml0IHBvc2l0aW9uLEJpdFs3XT0xOkFjdGl2ZSBIaWdoOz0wIEFjdGl2ZSBMb3cgKi8KLQlVQ0hBUiB1Y0RBQzJfQ1ZfQkdfQWRqdXN0bWVudDsKLQlVQ0hBUiB1Y0RBQzJfQ1ZfREFDX0FkanVzdG1lbnQ7Ci0JVVNIT1JUIHVzREFDMl9DVl9GT1JDRV9EYXRhOwotCVVTSE9SVCB1c0RBQzJfQ1ZfTVVYX1JlZ2lzdGVySW5kZXg7Ci0JVUNIQVIgdWNEQUMyX0NWX01VWF9SZWdpc3RlckluZm87CS8qIEJpdFs0OjBdPUJpdCBwb3NpdGlvbixCaXRbN109MTpBY3RpdmUgSGlnaDs9MCBBY3RpdmUgTG93ICovCi0JVUNIQVIgdWNEQUMyX1BBTF9CR19BZGp1c3RtZW50OwotCVVDSEFSIHVjREFDMl9QQUxfREFDX0FkanVzdG1lbnQ7Ci0JVVNIT1JUIHVzREFDMl9UVjJfRk9SQ0VfRGF0YTsKLX0gQ09NUEFTU0lPTkFURV9EQVRBOworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vUmVtb3ZlIHRoZSBkZWZpbml0aW9ucyBiZWxvdyB3aGVuIGRyaXZlciBpcyByZWFkeSEKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0RBQ19JTkZPCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOyAgCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICB1c01heEZyZXF1ZW5jeTsgICAgICAvLyBpbiAxMGtIeiB1bml0CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICB1c1Jlc2VydmVkOworfUFUT01fREFDX0lORk87CisKKwordHlwZWRlZiBzdHJ1Y3QgIF9DT01QQVNTSU9OQVRFX0RBVEEgICAgICAgICAgIAoreworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsgCisKKyAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIERBQzEgcG9ydGlvbgorICBVQ0hBUiAgIHVjREFDMV9CR19BZGp1c3RtZW50OworICBVQ0hBUiAgIHVjREFDMV9EQUNfQWRqdXN0bWVudDsKKyAgVVNIT1JUICB1c0RBQzFfRk9SQ0VfRGF0YTsKKyAgLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gIERBQzIgcG9ydGlvbgorICBVQ0hBUiAgIHVjREFDMl9DUlQyX0JHX0FkanVzdG1lbnQ7CisgIFVDSEFSICAgdWNEQUMyX0NSVDJfREFDX0FkanVzdG1lbnQ7CisgIFVTSE9SVCAgdXNEQUMyX0NSVDJfRk9SQ0VfRGF0YTsKKyAgVVNIT1JUICB1c0RBQzJfQ1JUMl9NVVhfUmVnaXN0ZXJJbmRleDsKKyAgVUNIQVIgICB1Y0RBQzJfQ1JUMl9NVVhfUmVnaXN0ZXJJbmZvOyAgICAgLy9CaXRbNDowXT1CaXQgcG9zaXRpb24sQml0WzddPTE6QWN0aXZlIEhpZ2g7PTAgQWN0aXZlIExvdworICBVQ0hBUiAgIHVjREFDMl9OVFNDX0JHX0FkanVzdG1lbnQ7CisgIFVDSEFSICAgdWNEQUMyX05UU0NfREFDX0FkanVzdG1lbnQ7CisgIFVTSE9SVCAgdXNEQUMyX1RWMV9GT1JDRV9EYXRhOworICBVU0hPUlQgIHVzREFDMl9UVjFfTVVYX1JlZ2lzdGVySW5kZXg7CisgIFVDSEFSICAgdWNEQUMyX1RWMV9NVVhfUmVnaXN0ZXJJbmZvOyAgICAgIC8vQml0WzQ6MF09Qml0IHBvc2l0aW9uLEJpdFs3XT0xOkFjdGl2ZSBIaWdoOz0wIEFjdGl2ZSBMb3cKKyAgVUNIQVIgICB1Y0RBQzJfQ1ZfQkdfQWRqdXN0bWVudDsKKyAgVUNIQVIgICB1Y0RBQzJfQ1ZfREFDX0FkanVzdG1lbnQ7CisgIFVTSE9SVCAgdXNEQUMyX0NWX0ZPUkNFX0RhdGE7CisgIFVTSE9SVCAgdXNEQUMyX0NWX01VWF9SZWdpc3RlckluZGV4OworICBVQ0hBUiAgIHVjREFDMl9DVl9NVVhfUmVnaXN0ZXJJbmZvOyAgICAgICAvL0JpdFs0OjBdPUJpdCBwb3NpdGlvbixCaXRbN109MTpBY3RpdmUgSGlnaDs9MCBBY3RpdmUgTG93CisgIFVDSEFSICAgdWNEQUMyX1BBTF9CR19BZGp1c3RtZW50OworICBVQ0hBUiAgIHVjREFDMl9QQUxfREFDX0FkanVzdG1lbnQ7CisgIFVTSE9SVCAgdXNEQUMyX1RWMl9GT1JDRV9EYXRhOworfUNPTVBBU1NJT05BVEVfREFUQTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKipTdXBwb3J0ZWQgRGV2aWNlIEluZm8gVGFibGUgRGVmaW5pdGlvbnMqKioqKioqKioqKioqKioqKioqKioqLwotLyogICB1Y0Nvbm5lY3RJbmZvOiAqLwotLyogICAgIFs3OjRdIC0gY29ubmVjdG9yIHR5cGUgKi8KLS8qICAgICAgID0gMSAgIC0gVkdBIGNvbm5lY3RvciAqLwotLyogICAgICAgPSAyICAgLSBEVkktSSAqLwotLyogICAgICAgPSAzICAgLSBEVkktRCAqLwotLyogICAgICAgPSA0ICAgLSBEVkktQSAqLwotLyogICAgICAgPSA1ICAgLSBTVklERU8gKi8KLS8qICAgICAgID0gNiAgIC0gQ09NUE9TSVRFICovCi0vKiAgICAgICA9IDcgICAtIExWRFMgKi8KLS8qICAgICAgID0gOCAgIC0gRElHSVRBTCBMSU5LICovCi0vKiAgICAgICA9IDkgICAtIFNDQVJUICovCi0vKiAgICAgICA9IDB4QSAtIEhETUlfdHlwZSBBICovCi0vKiAgICAgICA9IDB4QiAtIEhETUlfdHlwZSBCICovCi0vKiAgICAgICA9IDB4RSAtIFNwZWNpYWwgY2FzZTEgKERWSStESU4pICovCi0vKiAgICAgICBPdGhlcnM9VEJEICovCi0vKiAgICAgWzM6MF0gLSBEQUMgQXNzb2NpYXRlZCAqLwotLyogICAgICAgPSAwICAgLSBubyBEQUMgKi8KLS8qICAgICAgID0gMSAgIC0gREFDQSAqLwotLyogICAgICAgPSAyICAgLSBEQUNCICovCi0vKiAgICAgICA9IDMgICAtIEV4dGVybmFsIERBQyAqLwotLyogICAgICAgT3RoZXJzPVRCRCAqLwotLyogICovCisvLyAgdWNDb25uZWN0SW5mbzoKKy8vICAgIFs3OjRdIC0gY29ubmVjdG9yIHR5cGUKKy8vICAgICAgPSAxICAgLSBWR0EgY29ubmVjdG9yICAgCisvLyAgICAgID0gMiAgIC0gRFZJLUkKKy8vICAgICAgPSAzICAgLSBEVkktRAorLy8gICAgICA9IDQgICAtIERWSS1BCisvLyAgICAgID0gNSAgIC0gU1ZJREVPCisvLyAgICAgID0gNiAgIC0gQ09NUE9TSVRFCisvLyAgICAgID0gNyAgIC0gTFZEUworLy8gICAgICA9IDggICAtIERJR0lUQUwgTElOSworLy8gICAgICA9IDkgICAtIFNDQVJUCisvLyAgICAgID0gMHhBIC0gSERNSV90eXBlIEEKKy8vICAgICAgPSAweEIgLSBIRE1JX3R5cGUgQgorLy8gICAgICA9IDB4RSAtIFNwZWNpYWwgY2FzZTEgKERWSStESU4pCisvLyAgICAgIE90aGVycz1UQkQKKy8vICAgIFszOjBdIC0gREFDIEFzc29jaWF0ZWQKKy8vICAgICAgPSAwICAgLSBubyBEQUMKKy8vICAgICAgPSAxICAgLSBEQUNBCisvLyAgICAgID0gMiAgIC0gREFDQgorLy8gICAgICA9IDMgICAtIEV4dGVybmFsIERBQworLy8gICAgICBPdGhlcnM9VEJECisvLyAgICAKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fQ09OTkVDVE9SX0lORk8gewordHlwZWRlZiBzdHJ1Y3QgX0FUT01fQ09OTkVDVE9SX0lORk8KK3sKICNpZiBBVE9NX0JJR19FTkRJQU4KLQlVQ0hBUiBiZkNvbm5lY3RvclR5cGU6NDsKLQlVQ0hBUiBiZkFzc29jaWF0ZWREQUM6NDsKKyAgVUNIQVIgICBiZkNvbm5lY3RvclR5cGU6NDsKKyAgVUNIQVIgICBiZkFzc29jaWF0ZWREQUM6NDsKICNlbHNlCi0JVUNIQVIgYmZBc3NvY2lhdGVkREFDOjQ7Ci0JVUNIQVIgYmZDb25uZWN0b3JUeXBlOjQ7CisgIFVDSEFSICAgYmZBc3NvY2lhdGVkREFDOjQ7CisgIFVDSEFSICAgYmZDb25uZWN0b3JUeXBlOjQ7CiAjZW5kaWYKLX0gQVRPTV9DT05ORUNUT1JfSU5GTzsKK31BVE9NX0NPTk5FQ1RPUl9JTkZPOwogCi10eXBlZGVmIHVuaW9uIF9BVE9NX0NPTk5FQ1RPUl9JTkZPX0FDQ0VTUyB7Ci0JQVRPTV9DT05ORUNUT1JfSU5GTyBzYmZBY2Nlc3M7Ci0JVUNIQVIgdWNBY2Nlc3M7Ci19IEFUT01fQ09OTkVDVE9SX0lORk9fQUNDRVNTOwordHlwZWRlZiB1bmlvbiBfQVRPTV9DT05ORUNUT1JfSU5GT19BQ0NFU1MKK3sKKyAgQVRPTV9DT05ORUNUT1JfSU5GTyBzYmZBY2Nlc3M7CisgIFVDSEFSICAgICAgICAgICAgICAgdWNBY2Nlc3M7Cit9QVRPTV9DT05ORUNUT1JfSU5GT19BQ0NFU1M7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX0NPTk5FQ1RPUl9JTkZPX0kyQyB7Ci0JQVRPTV9DT05ORUNUT1JfSU5GT19BQ0NFU1Mgc3VjQ29ubmVjdG9ySW5mbzsKLQlBVE9NX0kyQ19JRF9DT05GSUdfQUNDRVNTIHN1Y0kyY0lkOwotfSBBVE9NX0NPTk5FQ1RPUl9JTkZPX0kyQzsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0NPTk5FQ1RPUl9JTkZPX0kyQworeworICBBVE9NX0NPTk5FQ1RPUl9JTkZPX0FDQ0VTUyBzdWNDb25uZWN0b3JJbmZvOworICBBVE9NX0kyQ19JRF9DT05GSUdfQUNDRVNTICBzdWNJMmNJZDsKK31BVE9NX0NPTk5FQ1RPUl9JTkZPX0kyQzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fU1VQUE9SVEVEX0RFVklDRVNfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVVNIT1JUIHVzRGV2aWNlU3VwcG9ydDsKLQlBVE9NX0NPTk5FQ1RPUl9JTkZPX0kyQyBhc0Nvbm5JbmZvW0FUT01fTUFYX1NVUFBPUlRFRF9ERVZJQ0VfSU5GT107Ci19IEFUT01fU1VQUE9SVEVEX0RFVklDRVNfSU5GTzsKKwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fU1VQUE9SVEVEX0RFVklDRVNfSU5GTworeyAKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSCXNIZWFkZXI7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgdXNEZXZpY2VTdXBwb3J0OworICBBVE9NX0NPTk5FQ1RPUl9JTkZPX0kyQyAgIGFzQ29ubkluZm9bQVRPTV9NQVhfU1VQUE9SVEVEX0RFVklDRV9JTkZPXTsKK31BVE9NX1NVUFBPUlRFRF9ERVZJQ0VTX0lORk87CiAKICNkZWZpbmUgTk9fSU5UX1NSQ19NQVBQRUQgICAgICAgMHhGRgogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9DT05ORUNUT1JfSU5DX1NSQ19CSVRNQVAgewotCVVDSEFSIHVjSW50U3JjQml0bWFwOwotfSBBVE9NX0NPTk5FQ1RPUl9JTkNfU1JDX0JJVE1BUDsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0NPTk5FQ1RPUl9JTkNfU1JDX0JJVE1BUAoreworICBVQ0hBUiAgIHVjSW50U3JjQml0bWFwOworfUFUT01fQ09OTkVDVE9SX0lOQ19TUkNfQklUTUFQOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9TVVBQT1JURURfREVWSUNFU19JTkZPXzIgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVTSE9SVCB1c0RldmljZVN1cHBvcnQ7Ci0JQVRPTV9DT05ORUNUT1JfSU5GT19JMkMgYXNDb25uSW5mb1tBVE9NX01BWF9TVVBQT1JURURfREVWSUNFX0lORk9fMl07Ci0JQVRPTV9DT05ORUNUT1JfSU5DX1NSQ19CSVRNQVAKLQkgICAgYXNJbnRTcmNJbmZvW0FUT01fTUFYX1NVUFBPUlRFRF9ERVZJQ0VfSU5GT18yXTsKLX0gQVRPTV9TVVBQT1JURURfREVWSUNFU19JTkZPXzI7Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9TVVBQT1JURURfREVWSUNFU19JTkZPXzIKK3sgCisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgICAgIHNIZWFkZXI7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgIHVzRGV2aWNlU3VwcG9ydDsKKyAgQVRPTV9DT05ORUNUT1JfSU5GT19JMkMgICAgICAgYXNDb25uSW5mb1tBVE9NX01BWF9TVVBQT1JURURfREVWSUNFX0lORk9fMl07CisgIEFUT01fQ09OTkVDVE9SX0lOQ19TUkNfQklUTUFQIGFzSW50U3JjSW5mb1tBVE9NX01BWF9TVVBQT1JURURfREVWSUNFX0lORk9fMl07Cit9QVRPTV9TVVBQT1JURURfREVWSUNFU19JTkZPXzI7CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1NVUFBPUlRFRF9ERVZJQ0VTX0lORk9fMmQxIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlVU0hPUlQgdXNEZXZpY2VTdXBwb3J0OwotCUFUT01fQ09OTkVDVE9SX0lORk9fSTJDIGFzQ29ubkluZm9bQVRPTV9NQVhfU1VQUE9SVEVEX0RFVklDRV07Ci0JQVRPTV9DT05ORUNUT1JfSU5DX1NSQ19CSVRNQVAgYXNJbnRTcmNJbmZvW0FUT01fTUFYX1NVUFBPUlRFRF9ERVZJQ0VdOwotfSBBVE9NX1NVUFBPUlRFRF9ERVZJQ0VTX0lORk9fMmQxOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fU1VQUE9SVEVEX0RFVklDRVNfSU5GT18yZDEKK3sgCisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiAgICAgIHNIZWFkZXI7CisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgICAgIHVzRGV2aWNlU3VwcG9ydDsKKyAgQVRPTV9DT05ORUNUT1JfSU5GT19JMkMgICAgICAgYXNDb25uSW5mb1tBVE9NX01BWF9TVVBQT1JURURfREVWSUNFXTsKKyAgQVRPTV9DT05ORUNUT1JfSU5DX1NSQ19CSVRNQVAgYXNJbnRTcmNJbmZvW0FUT01fTUFYX1NVUFBPUlRFRF9ERVZJQ0VdOworfUFUT01fU1VQUE9SVEVEX0RFVklDRVNfSU5GT18yZDE7CiAKICNkZWZpbmUgQVRPTV9TVVBQT1JURURfREVWSUNFU19JTkZPX0xBU1QgQVRPTV9TVVBQT1JURURfREVWSUNFU19JTkZPXzJkMQogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9NSVNDX0NPTlRST0xfSU5GTyB7Ci0JVVNIT1JUIHVzRnJlcXVlbmN5OwotCVVDSEFSIHVjUExMX0NoYXJnZVB1bXA7CS8qICBQTEwgY2hhcmdlLXB1bXAgZ2FpbiBjb250cm9sICovCi0JVUNIQVIgdWNQTExfRHV0eUN5Y2xlOwkvKiAgUExMIGR1dHkgY3ljbGUgY29udHJvbCAqLwotCVVDSEFSIHVjUExMX1ZDT19HYWluOwkvKiAgUExMIFZDTyBnYWluIGNvbnRyb2wgKi8KLQlVQ0hBUiB1Y1BMTF9Wb2x0YWdlU3dpbmc7CS8qICBQTEwgZHJpdmVyIHZvbHRhZ2Ugc3dpbmcgY29udHJvbCAqLwotfSBBVE9NX01JU0NfQ09OVFJPTF9JTkZPOworCisKK3R5cGVkZWYgc3RydWN0IF9BVE9NX01JU0NfQ09OVFJPTF9JTkZPCit7CisgICBVU0hPUlQgdXNGcmVxdWVuY3k7CisgICBVQ0hBUiAgdWNQTExfQ2hhcmdlUHVtcDsJCQkJICAgICAgICAgICAgICAgIC8vIFBMTCBjaGFyZ2UtcHVtcCBnYWluIGNvbnRyb2wKKyAgIFVDSEFSICB1Y1BMTF9EdXR5Q3ljbGU7CQkJCSAgICAgICAgICAgICAgICAvLyBQTEwgZHV0eSBjeWNsZSBjb250cm9sCisgICBVQ0hBUiAgdWNQTExfVkNPX0dhaW47CQkJCSAgICAgICAgICAgICAgICAgIC8vIFBMTCBWQ08gZ2FpbiBjb250cm9sCisgICBVQ0hBUiAgdWNQTExfVm9sdGFnZVN3aW5nOwkJCSAgICAgICAgICAgICAgICAvLyBQTEwgZHJpdmVyIHZvbHRhZ2Ugc3dpbmcgY29udHJvbAorfUFUT01fTUlTQ19DT05UUk9MX0lORk87ICAKKwogCiAjZGVmaW5lIEFUT01fTUFYX01JU0NfSU5GTyAgICAgICA0CiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1RNRFNfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVVNIT1JUIHVzTWF4RnJlcXVlbmN5OwkvKiAgaW4gMTBLaHogKi8KLQlBVE9NX01JU0NfQ09OVFJPTF9JTkZPIGFzTWlzY0luZm9bQVRPTV9NQVhfTUlTQ19JTkZPXTsKLX0gQVRPTV9UTURTX0lORk87Cit0eXBlZGVmIHN0cnVjdCBfQVRPTV9UTURTX0lORk8KK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7ICAKKyAgVVNIT1JUCQkJCQkJCXVzTWF4RnJlcXVlbmN5OyAgICAgICAgICAgICAvLyBpbiAxMEtoegorICBBVE9NX01JU0NfQ09OVFJPTF9JTkZPCQkJCWFzTWlzY0luZm9bQVRPTV9NQVhfTUlTQ19JTkZPXTsKK31BVE9NX1RNRFNfSU5GTzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fRU5DT0RFUl9BTkFMT0dfQVRUUklCVVRFIHsKLQlVQ0hBUiB1Y1RWU3RhbmRhcmQ7CS8qIFNhbWUgYXMgVFYgc3RhbmRhcmRzIGRlZmluZWQgYWJvdmUsICovCi0JVUNIQVIgdWNQYWRkaW5nWzFdOwotfSBBVE9NX0VOQ09ERVJfQU5BTE9HX0FUVFJJQlVURTsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fRU5DT0RFUl9ESUdJVEFMX0FUVFJJQlVURSB7Ci0JVUNIQVIgdWNBdHRyaWJ1dGU7CS8qIFNhbWUgYXMgb3RoZXIgZGlnaXRhbCBlbmNvZGVyIGF0dHJpYnV0ZXMgZGVmaW5lZCBhYm92ZSAqLwotCVVDSEFSIHVjUGFkZGluZ1sxXTsKLX0gQVRPTV9FTkNPREVSX0RJR0lUQUxfQVRUUklCVVRFOwordHlwZWRlZiBzdHJ1Y3QgX0FUT01fRU5DT0RFUl9BTkFMT0dfQVRUUklCVVRFCit7CisgIFVDSEFSIHVjVFZTdGFuZGFyZDsgICAgIC8vU2FtZSBhcyBUViBzdGFuZGFyZHMgZGVmaW5lZCBhYm92ZSwgCisgIFVDSEFSIHVjUGFkZGluZ1sxXTsKK31BVE9NX0VOQ09ERVJfQU5BTE9HX0FUVFJJQlVURTsKIAotdHlwZWRlZiB1bmlvbiBfQVRPTV9FTkNPREVSX0FUVFJJQlVURSB7Ci0JQVRPTV9FTkNPREVSX0FOQUxPR19BVFRSSUJVVEUgc0FsZ0F0dHJpYjsKLQlBVE9NX0VOQ09ERVJfRElHSVRBTF9BVFRSSUJVVEUgc0RpZ0F0dHJpYjsKLX0gQVRPTV9FTkNPREVSX0FUVFJJQlVURTsKK3R5cGVkZWYgc3RydWN0IF9BVE9NX0VOQ09ERVJfRElHSVRBTF9BVFRSSUJVVEUKK3sKKyAgVUNIQVIgdWNBdHRyaWJ1dGU7ICAgICAgLy9TYW1lIGFzIG90aGVyIGRpZ2l0YWwgZW5jb2RlciBhdHRyaWJ1dGVzIGRlZmluZWQgYWJvdmUKKyAgVUNIQVIgdWNQYWRkaW5nWzFdOwkJCit9QVRPTV9FTkNPREVSX0RJR0lUQUxfQVRUUklCVVRFOwogCi10eXBlZGVmIHN0cnVjdCBfRFZPX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTIHsKLQlVU0hPUlQgdXNQaXhlbENsb2NrOwotCVVTSE9SVCB1c0VuY29kZXJJRDsKLQlVQ0hBUiB1Y0RldmljZVR5cGU7CS8qIFVzZSBBVE9NX0RFVklDRV94eHgxX0luZGV4IHRvIGluZGljYXRlIGRldmljZSB0eXBlIG9ubHkuICovCi0JVUNIQVIgdWNBY3Rpb247CQkvKiBBVE9NX0VOQUJMRS9BVE9NX0RJU0FCTEUvQVRPTV9IUERfSU5JVCAqLwotCUFUT01fRU5DT0RFUl9BVFRSSUJVVEUgdXNEZXZBdHRyOwotfSBEVk9fRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlM7Cit0eXBlZGVmIHVuaW9uIF9BVE9NX0VOQ09ERVJfQVRUUklCVVRFCit7CisgIEFUT01fRU5DT0RFUl9BTkFMT0dfQVRUUklCVVRFIHNBbGdBdHRyaWI7CisgIEFUT01fRU5DT0RFUl9ESUdJVEFMX0FUVFJJQlVURSBzRGlnQXR0cmliOworfUFUT01fRU5DT0RFUl9BVFRSSUJVVEU7CiAKLXR5cGVkZWYgc3RydWN0IF9EVk9fRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04gewotCURWT19FTkNPREVSX0NPTlRST0xfUEFSQU1FVEVSUyBzRFZPRW5jb2RlcjsKLQlXUklURV9PTkVfQllURV9IV19JMkNfREFUQV9QU19BTExPQ0FUSU9OIHNSZXNlcnZlZDsJLyogQ2FsbGVyIGRvZXNuJ3QgbmVlZCB0byBpbml0IHRoaXMgcG9ydGlvbiAqLwotfSBEVk9fRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT047CisKK3R5cGVkZWYgc3RydWN0IF9EVk9fRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMKK3sKKyAgVVNIT1JUIHVzUGl4ZWxDbG9jazsgCisgIFVTSE9SVCB1c0VuY29kZXJJRDsgCisgIFVDSEFSICB1Y0RldmljZVR5cGU7CQkJCQkJCQkJCQkJLy9Vc2UgQVRPTV9ERVZJQ0VfeHh4MV9JbmRleCB0byBpbmRpY2F0ZSBkZXZpY2UgdHlwZSBvbmx5LgkKKyAgVUNIQVIgIHVjQWN0aW9uOwkJCQkJCQkJCQkJCQkJLy9BVE9NX0VOQUJMRS9BVE9NX0RJU0FCTEUvQVRPTV9IUERfSU5JVAorICBBVE9NX0VOQ09ERVJfQVRUUklCVVRFIHVzRGV2QXR0cjsgICAgIAkJCit9RFZPX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTOworCit0eXBlZGVmIHN0cnVjdCBfRFZPX0VOQ09ERVJfQ09OVFJPTF9QU19BTExPQ0FUSU9OCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICBEVk9fRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMgICAgc0RWT0VuY29kZXI7CisgIFdSSVRFX09ORV9CWVRFX0hXX0kyQ19EQVRBX1BTX0FMTE9DQVRJT04gICAgICBzUmVzZXJ2ZWQ7ICAgICAvL0NhbGxlciBkb2Vzbid0IG5lZWQgdG8gaW5pdCB0aGlzIHBvcnRpb24KK31EVk9fRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT047CisKIAogI2RlZmluZSBBVE9NX1hUTURTX0FTSUNfU0kxNjRfSUQgICAgICAgIDEKICNkZWZpbmUgQVRPTV9YVE1EU19BU0lDX1NJMTc4X0lEICAgICAgICAyCkBAIC00NTI2LDI3ICs1NTM5LDMwIEBACiAjZGVmaW5lIEFUT01fWFRNRFNfU1VQUE9SVEVEX0RVQUxMSU5LICAgMHgwMDAwMDAwMgogI2RlZmluZSBBVE9NX1hUTURTX01WUFVfRlBHQSAgICAgICAgICAgIDB4MDAwMDAwMDQKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fWFRNRFNfSU5GTyB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVVNIT1JUIHVzU2luZ2xlTGlua01heEZyZXF1ZW5jeTsKLQlBVE9NX0kyQ19JRF9DT05GSUdfQUNDRVNTIHN1Y0kyY0lkOwkvKiBQb2ludCB0aGUgSUQgb24gd2hpY2ggSTJDIGlzIHVzZWQgdG8gY29udHJvbCBleHRlcm5hbCBjaGlwICovCi0JVUNIQVIgdWNYdHJhbnNpbWl0dGVySUQ7Ci0JVUNIQVIgdWNTdXBwb3J0ZWRMaW5rOwkvKiAgQml0IGZpZWxkLCBiaXQwPTEsIHNpbmdsZSBsaW5rIHN1cHBvcnRlZDtiaXQxPTEsZHVhbCBsaW5rIHN1cHBvcnRlZCAqLwotCVVDSEFSIHVjU2VxdW5jZUFsdGVySUQ7CS8qICBFdmVuIHdpdGggdGhlIHNhbWUgZXh0ZXJuYWwgVE1EUyBhc2ljLCBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlIHByb2dyYW0gc2VxZW5jZSBhbHRlcnMgKi8KLQkvKiAgZHVlIHRvIGRlc2lnbi4gVGhpcyBJRCBpcyB1c2VkIHRvIGFsZXJ0IGRyaXZlciB0aGF0IHRoZSBzZXF1ZW5jZSBpcyBub3QgInN0YW5kYXJkIiEgKi8KLQlVQ0hBUiB1Y01hc3RlckFkZHJlc3M7CS8qICBBZGRyZXNzIHRvIGNvbnRyb2wgTWFzdGVyIHhUTURTIENoaXAgKi8KLQlVQ0hBUiB1Y1NsYXZlQWRkcmVzczsJLyogIEFkZHJlc3MgdG8gY29udHJvbCBTbGF2ZSB4VE1EUyBDaGlwICovCi19IEFUT01fWFRNRFNfSU5GTzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIAordHlwZWRlZiBzdHJ1Y3QgX0FUT01fWFRNRFNfSU5GTworeworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgICBzSGVhZGVyOyAgCisgIFVTSE9SVCAgICAgICAgICAgICAgICAgICAgIHVzU2luZ2xlTGlua01heEZyZXF1ZW5jeTsgCisgIEFUT01fSTJDX0lEX0NPTkZJR19BQ0NFU1MgIHN1Y0kyY0lkOyAgICAgICAgICAgLy9Qb2ludCB0aGUgSUQgb24gd2hpY2ggSTJDIGlzIHVzZWQgdG8gY29udHJvbCBleHRlcm5hbCBjaGlwCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjWHRyYW5zaW1pdHRlcklEOyAgICAgICAgICAKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNTdXBwb3J0ZWRMaW5rOyAgICAvLyBCaXQgZmllbGQsIGJpdDA9MSwgc2luZ2xlIGxpbmsgc3VwcG9ydGVkO2JpdDE9MSxkdWFsIGxpbmsgc3VwcG9ydGVkCisgIFVDSEFSICAgICAgICAgICAgICAgICAgICAgIHVjU2VxdW5jZUFsdGVySUQ7ICAgLy8gRXZlbiB3aXRoIHRoZSBzYW1lIGV4dGVybmFsIFRNRFMgYXNpYywgaXQncyBwb3NzaWJsZSB0aGF0IHRoZSBwcm9ncmFtIHNlcWVuY2UgYWx0ZXJzIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGR1ZSB0byBkZXNpZ24uIFRoaXMgSUQgaXMgdXNlZCB0byBhbGVydCBkcml2ZXIgdGhhdCB0aGUgc2VxdWVuY2UgaXMgbm90ICJzdGFuZGFyZCIhICAgICAgICAgICAgICAKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNNYXN0ZXJBZGRyZXNzOyAgICAvLyBBZGRyZXNzIHRvIGNvbnRyb2wgTWFzdGVyIHhUTURTIENoaXAKKyAgVUNIQVIgICAgICAgICAgICAgICAgICAgICAgdWNTbGF2ZUFkZHJlc3M7ICAgICAvLyBBZGRyZXNzIHRvIGNvbnRyb2wgU2xhdmUgeFRNRFMgQ2hpcAorfUFUT01fWFRNRFNfSU5GTzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0RGUF9EUE1TX1NUQVRVU19DSEFOR0VfUEFSQU1FVEVSUyB7Ci0JVUNIQVIgdWNFbmFibGU7CQkvKiAgQVRPTV9FTkFCTEU9T24gb3IgQVRPTV9ESVNBQkxFPU9mZiAqLwotCVVDSEFSIHVjRGV2aWNlOwkJLyogIEFUT01fREVWSUNFX0RGUDFfSU5ERVguLi4uICovCi0JVUNIQVIgdWNQYWRkaW5nWzJdOwotfSBERlBfRFBNU19TVEFUVVNfQ0hBTkdFX1BBUkFNRVRFUlM7Cit0eXBlZGVmIHN0cnVjdCBfREZQX0RQTVNfU1RBVFVTX0NIQU5HRV9QQVJBTUVURVJTCit7ICAKKyAgVUNIQVIgdWNFbmFibGU7ICAgICAgICAgICAgICAgICAgICAgLy8gQVRPTV9FTkFCTEU9T24gb3IgQVRPTV9ESVNBQkxFPU9mZgorICBVQ0hBUiB1Y0RldmljZTsgICAgICAgICAgICAgICAgICAgICAvLyBBVE9NX0RFVklDRV9ERlAxX0lOREVYLi4uLgorICBVQ0hBUiB1Y1BhZGRpbmdbMl07ICAgICAgICAgICAgIAorfURGUF9EUE1TX1NUQVRVU19DSEFOR0VfUEFSQU1FVEVSUzsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKipMZWdhY3kgUG93ZXIgUGxheSBUYWJsZSBEZWZpbml0aW9ucyAqKioqKioqKioqKioqKioqKioqKioqLwogCi0vKiBEZWZpbml0aW9ucyBmb3IgdWxQb3dlclBsYXlNaXNjSW5mbyAqLworLy9EZWZpbml0aW9ucyBmb3IgdWxQb3dlclBsYXlNaXNjSW5mbwogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX1NQTElUX0NMT0NLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMEwKICNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19VU0lOR19NQ0xLX1NSQyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDFMCiAjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk9fVVNJTkdfU0NMS19TUkMgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyTApAQCAtNDU1OCw4ICs1NTc0LDggQEAKIAogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0VOR0lORV9DTE9DS19DT05UUkxfRU4gICAgICAgICAgMHgwMDAwMDAyMEwKICNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19NRU1PUllfQ0xPQ0tfQ09OVFJMX0VOICAgICAgICAgIDB4MDAwMDAwNDBMCi0jZGVmaW5lIEFUT01fUE1fTUlTQ0lORk9fUFJPR1JBTV9WT0xUQUdFICAgICAgICAgICAgICAgICAweDAwMDAwMDgwTAkvKiBXaGVuIHRoaXMgYml0IHNldCwgdWNWb2x0YWdlRHJvcEluZGV4IGlzIG5vdCBhbiBpbmRleCBmb3IgR1BJTyBwaW4sIGJ1dCBhIHZvbHRhZ2UgSUQgdGhhdCBTVyBuZWVkcyBwcm9ncmFtICovCi0KKyNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19QUk9HUkFNX1ZPTFRBR0UgICAgICAgICAgICAgICAgIDB4MDAwMDAwODBMICAvL1doZW4gdGhpcyBiaXQgc2V0LCB1Y1ZvbHRhZ2VEcm9wSW5kZXggaXMgbm90IGFuIGluZGV4IGZvciBHUElPIHBpbiwgYnV0IGEgdm9sdGFnZSBJRCB0aGF0IFNXIG5lZWRzIHByb2dyYW0gIAorIAogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0FTSUNfUkVEVUNFRF9TUEVFRF9TQ0xLX0VOICAgICAgMHgwMDAwMDEwMEwKICNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19BU0lDX0RZTkFNSUNfVk9MVEFHRV9FTiAgICAgICAgIDB4MDAwMDAyMDBMCiAjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk9fQVNJQ19TTEVFUF9NT0RFX0VOICAgICAgICAgICAgICAweDAwMDAwNDAwTApAQCAtNDU2OSwyMiArNTU4NSwyMiBAQAogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0xPV19MQ0RfUkVGUkVTSF9SQVRFICAgICAgICAgICAgMHgwMDAwNDAwMEwKIAogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0RSSVZFUl9ERUZBVUxUX01PREUgICAgICAgICAgICAgMHgwMDAwODAwMEwKLSNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19PVkVSX0NMT0NLX01PREUgICAgICAgICAgICAgICAgIDB4MDAwMTAwMDBMCisjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk9fT1ZFUl9DTE9DS19NT0RFICAgICAgICAgICAgICAgICAweDAwMDEwMDAwTCAKICNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19PVkVSX0RSSVZFX01PREUgICAgICAgICAgICAgICAgIDB4MDAwMjAwMDBMCiAjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk9fUE9XRVJfU0FWSU5HX01PREUgICAgICAgICAgICAgICAweDAwMDQwMDAwTAogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX1RIRVJNQUxfRElPREVfTU9ERSAgICAgICAgICAgICAgMHgwMDA4MDAwMEwKIAotI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0ZSQU1FX01PRFVMQVRJT05fTUFTSyAgICAgICAgICAgMHgwMDMwMDAwMEwJLyogMC1GTSBEaXNhYmxlLCAxLTIgbGV2ZWwgRk0sIDItNCBsZXZlbCBGTSwgMy1SZXNlcnZlZCAqLwotI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0ZSQU1FX01PRFVMQVRJT05fU0hJRlQgICAgICAgICAgMjAKKyNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19GUkFNRV9NT0RVTEFUSU9OX01BU0sgICAgICAgICAgIDB4MDAzMDAwMDBMICAvLzAtRk0gRGlzYWJsZSwgMS0yIGxldmVsIEZNLCAyLTQgbGV2ZWwgRk0sIDMtUmVzZXJ2ZWQKKyNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19GUkFNRV9NT0RVTEFUSU9OX1NISUZUICAgICAgICAgIDIwIAogCiAjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk9fRFlOX0NMS18zRF9JRExFICAgICAgICAgICAgICAgICAweDAwNDAwMDAwTAogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0RZTkFNSUNfQ0xPQ0tfRElWSURFUl9CWV8yICAgICAgMHgwMDgwMDAwMEwKICNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19EWU5BTUlDX0NMT0NLX0RJVklERVJfQllfNCAgICAgIDB4MDEwMDAwMDBMCi0jZGVmaW5lIEFUT01fUE1fTUlTQ0lORk9fRFlOQU1JQ19IRFBfQkxPQ0tfRU4gICAgICAgICAgICAweDAyMDAwMDAwTAkvKiBXaGVuIHNldCwgRHluYW1pYyAqLwotI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0RZTkFNSUNfTUNfSE9TVF9CTE9DS19FTiAgICAgICAgMHgwNDAwMDAwMEwJLyogV2hlbiBzZXQsIER5bmFtaWMgKi8KLSNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT18zRF9BQ0NFTEVSQVRJT05fRU4gICAgICAgICAgICAgIDB4MDgwMDAwMDBMCS8qIFdoZW4gc2V0LCBUaGlzIG1vZGUgaXMgZm9yIGFjY2VsZWF0ZWQgM0QgbW9kZSAqLworI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0RZTkFNSUNfSERQX0JMT0NLX0VOICAgICAgICAgICAgMHgwMjAwMDAwMEwgIC8vV2hlbiBzZXQsIER5bmFtaWMgCisjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk9fRFlOQU1JQ19NQ19IT1NUX0JMT0NLX0VOICAgICAgICAweDA0MDAwMDAwTCAgLy9XaGVuIHNldCwgRHluYW1pYworI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPXzNEX0FDQ0VMRVJBVElPTl9FTiAgICAgICAgICAgICAgMHgwODAwMDAwMEwgIC8vV2hlbiBzZXQsIFRoaXMgbW9kZSBpcyBmb3IgYWNjZWxlYXRlZCAzRCBtb2RlCiAKLSNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19QT1dFUlBMQVlfU0VUVElOR1NfR1JPVVBfTUFTSyAgIDB4NzAwMDAwMDBMCS8qIDEtT3B0aW1hbCBCYXR0ZXJ5IExpZmUgR3JvdXAsIDItSGlnaCBCYXR0ZXJ5LCAzLUJhbGFuY2VkLCA0LUhpZ2ggUGVyZm9ybWFuY2UsIDUtIE9wdGltYWwgUGVyZm9ybWFuY2UgKERlZmF1bHQgc3RhdGUgd2l0aCBEZWZhdWx0IGNsb2NrcykgKi8KKyNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GT19QT1dFUlBMQVlfU0VUVElOR1NfR1JPVVBfTUFTSyAgIDB4NzAwMDAwMDBMICAvLzEtT3B0aW1hbCBCYXR0ZXJ5IExpZmUgR3JvdXAsIDItSGlnaCBCYXR0ZXJ5LCAzLUJhbGFuY2VkLCA0LUhpZ2ggUGVyZm9ybWFuY2UsIDUtIE9wdGltYWwgUGVyZm9ybWFuY2UgKERlZmF1bHQgc3RhdGUgd2l0aCBEZWZhdWx0IGNsb2NrcykgCiAjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk9fUE9XRVJQTEFZX1NFVFRJTkdTX0dST1VQX1NISUZUICAyOAogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPX0VOQUJMRV9CQUNLX0JJQVMgICAgICAgICAgICAgICAgMHg4MDAwMDAwMEwKIApAQCAtNDU5NCw1NSArNTYxMCw1OSBAQAogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPMl9GUzNEX09WRVJEUklWRV9JTkZPICAgICAgICAgICAgMHgwMDAwMDAwOEwKICNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GTzJfRk9SQ0VETE9XUFdSX01PREUgICAgICAgICAgICAgIDB4MDAwMDAwMTBMCiAjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk8yX1ZERENJX0RZTkFNSUNfVk9MVEFHRV9FTiAgICAgICAweDAwMDAwMDIwTAotI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPMl9WSURFT19QTEFZQkFDS19DQVBBQkxFICAgICAgICAgMHgwMDAwMDA0MEwJLyogSWYgdGhpcyBiaXQgaXMgc2V0IGluIG11bHRpLXBwIG1vZGUsIHRoZW4gZHJpdmVyIHdpbGwgcGFjayB1cCBvbmUgd2l0aCB0aGUgbWluaW9yIHBvd2VyIGNvbnN1bXB0aW9uLiAqLwotCQkJCQkJCQkgICAgICAvKiBJZiBpdCdzIG5vdCBzZXQgaW4gYW55IHBwIG1vZGUsIGRyaXZlciB3aWxsIHVzZSBpdHMgZGVmYXVsdCBsb2dpYyB0byBwaWNrIGEgcHAgbW9kZSBpbiB2aWRlbyBwbGF5YmFjayAqLworI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPMl9WSURFT19QTEFZQkFDS19DQVBBQkxFICAgICAgICAgMHgwMDAwMDA0MEwgIC8vSWYgdGhpcyBiaXQgaXMgc2V0IGluIG11bHRpLXBwIG1vZGUsIHRoZW4gZHJpdmVyIHdpbGwgcGFjayB1cCBvbmUgd2l0aCB0aGUgbWluaW9yIHBvd2VyIGNvbnN1bXB0aW9uLiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL0lmIGl0J3Mgbm90IHNldCBpbiBhbnkgcHAgbW9kZSwgZHJpdmVyIHdpbGwgdXNlIGl0cyBkZWZhdWx0IGxvZ2ljIHRvIHBpY2sgYSBwcCBtb2RlIGluIHZpZGVvIHBsYXliYWNrCiAjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk8yX05PVF9WQUxJRF9PTl9EQyAgICAgICAgICAgICAgICAweDAwMDAwMDgwTAogI2RlZmluZSBBVE9NX1BNX01JU0NJTkZPMl9TVFVUVEVSX01PREVfRU4gICAgICAgICAgICAgICAgMHgwMDAwMDEwMEwKLSNkZWZpbmUgQVRPTV9QTV9NSVNDSU5GTzJfVVZEX1NVUFBPUlRfTU9ERSAgICAgICAgICAgICAgIDB4MDAwMDAyMDBMCisjZGVmaW5lIEFUT01fUE1fTUlTQ0lORk8yX1VWRF9TVVBQT1JUX01PREUgICAgICAgICAgICAgICAweDAwMDAwMjAwTCAKIAotLyogdWNUYWJsZUZvcm1hdFJldmlzaW9uPTEgKi8KLS8qIHVjVGFibGVDb250ZW50UmV2aXNpb249MSAqLwotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fUE9XRVJNT0RFX0lORk8gewotCVVMT05HIHVsTWlzY0luZm87CS8qIFRoZSBwb3dlciBsZXZlbCBzaG91bGQgYmUgYXJyYW5nZWQgaW4gYXNjZW5kaW5nIG9yZGVyICovCi0JVUxPTkcgdWxSZXNlcnZlZDE7CS8qICBtdXN0IHNldCB0byAwICovCi0JVUxPTkcgdWxSZXNlcnZlZDI7CS8qICBtdXN0IHNldCB0byAwICovCi0JVVNIT1JUIHVzRW5naW5lQ2xvY2s7Ci0JVVNIT1JUIHVzTWVtb3J5Q2xvY2s7Ci0JVUNIQVIgdWNWb2x0YWdlRHJvcEluZGV4OwkvKiAgaW5kZXggdG8gR1BJTyB0YWJsZSAqLwotCVVDSEFSIHVjU2VsZWN0ZWRQYW5lbF9SZWZyZXNoUmF0ZTsJLyogIHBhbmVsIHJlZnJlc2ggcmF0ZSAqLwotCVVDSEFSIHVjTWluVGVtcGVyYXR1cmU7Ci0JVUNIQVIgdWNNYXhUZW1wZXJhdHVyZTsKLQlVQ0hBUiB1Y051bVBjaUVMYW5lczsJLyogIG51bWJlciBvZiBQQ0lFIGxhbmVzICovCi19IEFUT01fUE9XRVJNT0RFX0lORk87CisvL3VjVGFibGVGb3JtYXRSZXZpc2lvbj0xCisvL3VjVGFibGVDb250ZW50UmV2aXNpb249MQordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX1BPV0VSTU9ERV9JTkZPCit7CisgIFVMT05HICAgICB1bE1pc2NJbmZvOyAgICAgICAgICAgICAgICAgLy9UaGUgcG93ZXIgbGV2ZWwgc2hvdWxkIGJlIGFycmFuZ2VkIGluIGFzY2VuZGluZyBvcmRlcgorICBVTE9ORyAgICAgdWxSZXNlcnZlZDE7ICAgICAgICAgICAgICAgIC8vIG11c3Qgc2V0IHRvIDAKKyAgVUxPTkcgICAgIHVsUmVzZXJ2ZWQyOyAgICAgICAgICAgICAgICAvLyBtdXN0IHNldCB0byAwCisgIFVTSE9SVCAgICB1c0VuZ2luZUNsb2NrOworICBVU0hPUlQgICAgdXNNZW1vcnlDbG9jazsKKyAgVUNIQVIgICAgIHVjVm9sdGFnZURyb3BJbmRleDsgICAgICAgICAvLyBpbmRleCB0byBHUElPIHRhYmxlCisgIFVDSEFSICAgICB1Y1NlbGVjdGVkUGFuZWxfUmVmcmVzaFJhdGU7Ly8gcGFuZWwgcmVmcmVzaCByYXRlCisgIFVDSEFSICAgICB1Y01pblRlbXBlcmF0dXJlOworICBVQ0hBUiAgICAgdWNNYXhUZW1wZXJhdHVyZTsKKyAgVUNIQVIgICAgIHVjTnVtUGNpRUxhbmVzOyAgICAgICAgICAgICAvLyBudW1iZXIgb2YgUENJRSBsYW5lcworfUFUT01fUE9XRVJNT0RFX0lORk87CiAKLS8qIHVjVGFibGVGb3JtYXRSZXZpc2lvbj0yICovCi0vKiB1Y1RhYmxlQ29udGVudFJldmlzaW9uPTEgKi8KLXR5cGVkZWYgc3RydWN0IF9BVE9NX1BPV0VSTU9ERV9JTkZPX1YyIHsKLQlVTE9ORyB1bE1pc2NJbmZvOwkvKiBUaGUgcG93ZXIgbGV2ZWwgc2hvdWxkIGJlIGFycmFuZ2VkIGluIGFzY2VuZGluZyBvcmRlciAqLwotCVVMT05HIHVsTWlzY0luZm8yOwotCVVMT05HIHVsRW5naW5lQ2xvY2s7Ci0JVUxPTkcgdWxNZW1vcnlDbG9jazsKLQlVQ0hBUiB1Y1ZvbHRhZ2VEcm9wSW5kZXg7CS8qICBpbmRleCB0byBHUElPIHRhYmxlICovCi0JVUNIQVIgdWNTZWxlY3RlZFBhbmVsX1JlZnJlc2hSYXRlOwkvKiAgcGFuZWwgcmVmcmVzaCByYXRlICovCi0JVUNIQVIgdWNNaW5UZW1wZXJhdHVyZTsKLQlVQ0hBUiB1Y01heFRlbXBlcmF0dXJlOwotCVVDSEFSIHVjTnVtUGNpRUxhbmVzOwkvKiAgbnVtYmVyIG9mIFBDSUUgbGFuZXMgKi8KLX0gQVRPTV9QT1dFUk1PREVfSU5GT19WMjsKKy8vdWNUYWJsZUZvcm1hdFJldmlzaW9uPTIKKy8vdWNUYWJsZUNvbnRlbnRSZXZpc2lvbj0xCit0eXBlZGVmIHN0cnVjdCAgX0FUT01fUE9XRVJNT0RFX0lORk9fVjIKK3sKKyAgVUxPTkcgICAgIHVsTWlzY0luZm87ICAgICAgICAgICAgICAgICAvL1RoZSBwb3dlciBsZXZlbCBzaG91bGQgYmUgYXJyYW5nZWQgaW4gYXNjZW5kaW5nIG9yZGVyCisgIFVMT05HICAgICB1bE1pc2NJbmZvMjsgICAgICAgICAgICAgICAgCisgIFVMT05HICAgICB1bEVuZ2luZUNsb2NrOyAgICAgICAgICAgICAgICAKKyAgVUxPTkcgICAgIHVsTWVtb3J5Q2xvY2s7CisgIFVDSEFSICAgICB1Y1ZvbHRhZ2VEcm9wSW5kZXg7ICAgICAgICAgLy8gaW5kZXggdG8gR1BJTyB0YWJsZQorICBVQ0hBUiAgICAgdWNTZWxlY3RlZFBhbmVsX1JlZnJlc2hSYXRlOy8vIHBhbmVsIHJlZnJlc2ggcmF0ZQorICBVQ0hBUiAgICAgdWNNaW5UZW1wZXJhdHVyZTsKKyAgVUNIQVIgICAgIHVjTWF4VGVtcGVyYXR1cmU7CisgIFVDSEFSICAgICB1Y051bVBjaUVMYW5lczsgICAgICAgICAgICAgLy8gbnVtYmVyIG9mIFBDSUUgbGFuZXMKK31BVE9NX1BPV0VSTU9ERV9JTkZPX1YyOwogCi0vKiB1Y1RhYmxlRm9ybWF0UmV2aXNpb249MiAqLwotLyogdWNUYWJsZUNvbnRlbnRSZXZpc2lvbj0yICovCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9QT1dFUk1PREVfSU5GT19WMyB7Ci0JVUxPTkcgdWxNaXNjSW5mbzsJLyogVGhlIHBvd2VyIGxldmVsIHNob3VsZCBiZSBhcnJhbmdlZCBpbiBhc2NlbmRpbmcgb3JkZXIgKi8KLQlVTE9ORyB1bE1pc2NJbmZvMjsKLQlVTE9ORyB1bEVuZ2luZUNsb2NrOwotCVVMT05HIHVsTWVtb3J5Q2xvY2s7Ci0JVUNIQVIgdWNWb2x0YWdlRHJvcEluZGV4OwkvKiAgaW5kZXggdG8gQ29yZSAoVkREQykgdm90YWdlIHRhYmxlICovCi0JVUNIQVIgdWNTZWxlY3RlZFBhbmVsX1JlZnJlc2hSYXRlOwkvKiAgcGFuZWwgcmVmcmVzaCByYXRlICovCi0JVUNIQVIgdWNNaW5UZW1wZXJhdHVyZTsKLQlVQ0hBUiB1Y01heFRlbXBlcmF0dXJlOwotCVVDSEFSIHVjTnVtUGNpRUxhbmVzOwkvKiAgbnVtYmVyIG9mIFBDSUUgbGFuZXMgKi8KLQlVQ0hBUiB1Y1ZERENJX1ZvbHRhZ2VEcm9wSW5kZXg7CS8qICBpbmRleCB0byBWRERDSSB2b3RhZ2UgdGFibGUgKi8KLX0gQVRPTV9QT1dFUk1PREVfSU5GT19WMzsKKy8vdWNUYWJsZUZvcm1hdFJldmlzaW9uPTIKKy8vdWNUYWJsZUNvbnRlbnRSZXZpc2lvbj0yCit0eXBlZGVmIHN0cnVjdCAgX0FUT01fUE9XRVJNT0RFX0lORk9fVjMKK3sKKyAgVUxPTkcgICAgIHVsTWlzY0luZm87ICAgICAgICAgICAgICAgICAvL1RoZSBwb3dlciBsZXZlbCBzaG91bGQgYmUgYXJyYW5nZWQgaW4gYXNjZW5kaW5nIG9yZGVyCisgIFVMT05HICAgICB1bE1pc2NJbmZvMjsgICAgICAgICAgICAgICAgCisgIFVMT05HICAgICB1bEVuZ2luZUNsb2NrOyAgICAgICAgICAgICAgICAKKyAgVUxPTkcgICAgIHVsTWVtb3J5Q2xvY2s7CisgIFVDSEFSICAgICB1Y1ZvbHRhZ2VEcm9wSW5kZXg7ICAgICAgICAgLy8gaW5kZXggdG8gQ29yZSAoVkREQykgdm90YWdlIHRhYmxlCisgIFVDSEFSICAgICB1Y1NlbGVjdGVkUGFuZWxfUmVmcmVzaFJhdGU7Ly8gcGFuZWwgcmVmcmVzaCByYXRlCisgIFVDSEFSICAgICB1Y01pblRlbXBlcmF0dXJlOworICBVQ0hBUiAgICAgdWNNYXhUZW1wZXJhdHVyZTsKKyAgVUNIQVIgICAgIHVjTnVtUGNpRUxhbmVzOyAgICAgICAgICAgICAvLyBudW1iZXIgb2YgUENJRSBsYW5lcworICBVQ0hBUiAgICAgdWNWRERDSV9Wb2x0YWdlRHJvcEluZGV4OyAgIC8vIGluZGV4IHRvIFZERENJIHZvdGFnZSB0YWJsZQorfUFUT01fUE9XRVJNT0RFX0lORk9fVjM7CisKIAogI2RlZmluZSBBVE9NX01BWF9OVU1CRVJPRl9QT1dFUl9CTE9DSyAgOAogCkBAIC00NjU1LDQwICs1Njc1LDQ0IEBACiAjZGVmaW5lIEFUT01fUFBfT1ZFUkRSSVZFX1RIRVJNQUxDT05UUk9MTEVSX01VQTY2NDkgICAweDA0CiAjZGVmaW5lIEFUT01fUFBfT1ZFUkRSSVZFX1RIRVJNQUxDT05UUk9MTEVSX0xNNjQgICAgICAweDA1CiAjZGVmaW5lIEFUT01fUFBfT1ZFUkRSSVZFX1RIRVJNQUxDT05UUk9MTEVSX0Y3NTM3NSAgICAweDA2Ci0jZGVmaW5lIEFUT01fUFBfT1ZFUkRSSVZFX1RIRVJNQUxDT05UUk9MTEVSX0FTQzc1MTIgICAweDA3CS8qICBBbmRpZ2lsb2cgKi8KKyNkZWZpbmUgQVRPTV9QUF9PVkVSRFJJVkVfVEhFUk1BTENPTlRST0xMRVJfQVNDNzUxMiAgIDB4MDcJLy8gQW5kaWdpbG9nCiAKLXR5cGVkZWYgc3RydWN0IF9BVE9NX1BPV0VSUExBWV9JTkZPIHsKLQlBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIgc0hlYWRlcjsKLQlVQ0hBUiB1Y092ZXJkcml2ZVRoZXJtYWxDb250cm9sbGVyOwotCVVDSEFSIHVjT3ZlcmRyaXZlSTJjTGluZTsKLQlVQ0hBUiB1Y092ZXJkcml2ZUludEJpdG1hcDsKLQlVQ0hBUiB1Y092ZXJkcml2ZUNvbnRyb2xsZXJBZGRyZXNzOwotCVVDSEFSIHVjU2l6ZU9mUG93ZXJNb2RlRW50cnk7Ci0JVUNIQVIgdWNOdW1PZlBvd2VyTW9kZUVudHJpZXM7Ci0JQVRPTV9QT1dFUk1PREVfSU5GTyBhc1Bvd2VyUGxheUluZm9bQVRPTV9NQVhfTlVNQkVST0ZfUE9XRVJfQkxPQ0tdOwotfSBBVE9NX1BPV0VSUExBWV9JTkZPOwogCi10eXBlZGVmIHN0cnVjdCBfQVRPTV9QT1dFUlBMQVlfSU5GT19WMiB7Ci0JQVRPTV9DT01NT05fVEFCTEVfSEVBREVSIHNIZWFkZXI7Ci0JVUNIQVIgdWNPdmVyZHJpdmVUaGVybWFsQ29udHJvbGxlcjsKLQlVQ0hBUiB1Y092ZXJkcml2ZUkyY0xpbmU7Ci0JVUNIQVIgdWNPdmVyZHJpdmVJbnRCaXRtYXA7Ci0JVUNIQVIgdWNPdmVyZHJpdmVDb250cm9sbGVyQWRkcmVzczsKLQlVQ0hBUiB1Y1NpemVPZlBvd2VyTW9kZUVudHJ5OwotCVVDSEFSIHVjTnVtT2ZQb3dlck1vZGVFbnRyaWVzOwotCUFUT01fUE9XRVJNT0RFX0lORk9fVjIgYXNQb3dlclBsYXlJbmZvW0FUT01fTUFYX05VTUJFUk9GX1BPV0VSX0JMT0NLXTsKLX0gQVRPTV9QT1dFUlBMQVlfSU5GT19WMjsKK3R5cGVkZWYgc3RydWN0ICBfQVRPTV9QT1dFUlBMQVlfSU5GTworeworICBBVE9NX0NPTU1PTl9UQUJMRV9IRUFERVIJc0hlYWRlcjsgCisgIFVDSEFSICAgIHVjT3ZlcmRyaXZlVGhlcm1hbENvbnRyb2xsZXI7CisgIFVDSEFSICAgIHVjT3ZlcmRyaXZlSTJjTGluZTsKKyAgVUNIQVIgICAgdWNPdmVyZHJpdmVJbnRCaXRtYXA7CisgIFVDSEFSICAgIHVjT3ZlcmRyaXZlQ29udHJvbGxlckFkZHJlc3M7CisgIFVDSEFSICAgIHVjU2l6ZU9mUG93ZXJNb2RlRW50cnk7CisgIFVDSEFSICAgIHVjTnVtT2ZQb3dlck1vZGVFbnRyaWVzOworICBBVE9NX1BPV0VSTU9ERV9JTkZPIGFzUG93ZXJQbGF5SW5mb1tBVE9NX01BWF9OVU1CRVJPRl9QT1dFUl9CTE9DS107Cit9QVRPTV9QT1dFUlBMQVlfSU5GTzsKIAotdHlwZWRlZiBzdHJ1Y3QgX0FUT01fUE9XRVJQTEFZX0lORk9fVjMgewotCUFUT01fQ09NTU9OX1RBQkxFX0hFQURFUiBzSGVhZGVyOwotCVVDSEFSIHVjT3ZlcmRyaXZlVGhlcm1hbENvbnRyb2xsZXI7Ci0JVUNIQVIgdWNPdmVyZHJpdmVJMmNMaW5lOwotCVVDSEFSIHVjT3ZlcmRyaXZlSW50Qml0bWFwOwotCVVDSEFSIHVjT3ZlcmRyaXZlQ29udHJvbGxlckFkZHJlc3M7Ci0JVUNIQVIgdWNTaXplT2ZQb3dlck1vZGVFbnRyeTsKLQlVQ0hBUiB1Y051bU9mUG93ZXJNb2RlRW50cmllczsKLQlBVE9NX1BPV0VSTU9ERV9JTkZPX1YzIGFzUG93ZXJQbGF5SW5mb1tBVE9NX01BWF9OVU1CRVJPRl9QT1dFUl9CTE9DS107Ci19IEFUT01fUE9XRVJQTEFZX0lORk9fVjM7Cit0eXBlZGVmIHN0cnVjdCAgX0FUT01fUE9XRVJQTEFZX0lORk9fVjIKK3sKKyAgQVRPTV9DT01NT05fVEFCTEVfSEVBREVSCXNIZWFkZXI7IAorICBVQ0hBUiAgICB1Y092ZXJkcml2ZVRoZXJtYWxDb250cm9sbGVyOworICBVQ0hBUiAgICB1Y092ZXJkcml2ZUkyY0xpbmU7CisgIFVDSEFSICAgIHVjT3ZlcmRyaXZlSW50Qml0bWFwOworICBVQ0hBUiAgICB1Y092ZXJkcml2ZUNvbnRyb2xsZXJBZGRyZXNzOworICBVQ0hBUiAgICB1Y1NpemVPZlBvd2VyTW9kZUVudHJ5OworICBVQ0hBUiAgICB1Y051bU9mUG93ZXJNb2RlRW50cmllczsKKyAgQVRPTV9QT1dFUk1PREVfSU5GT19WMiBhc1Bvd2VyUGxheUluZm9bQVRPTV9NQVhfTlVNQkVST0ZfUE9XRVJfQkxPQ0tdOworfUFUT01fUE9XRVJQTEFZX0lORk9fVjI7CisgIAordHlwZWRlZiBzdHJ1Y3QgIF9BVE9NX1BPV0VSUExBWV9JTkZPX1YzCit7CisgIEFUT01fQ09NTU9OX1RBQkxFX0hFQURFUglzSGVhZGVyOyAKKyAgVUNIQVIgICAgdWNPdmVyZHJpdmVUaGVybWFsQ29udHJvbGxlcjsKKyAgVUNIQVIgICAgdWNPdmVyZHJpdmVJMmNMaW5lOworICBVQ0hBUiAgICB1Y092ZXJkcml2ZUludEJpdG1hcDsKKyAgVUNIQVIgICAgdWNPdmVyZHJpdmVDb250cm9sbGVyQWRkcmVzczsKKyAgVUNIQVIgICAgdWNTaXplT2ZQb3dlck1vZGVFbnRyeTsKKyAgVUNIQVIgICAgdWNOdW1PZlBvd2VyTW9kZUVudHJpZXM7CisgIEFUT01fUE9XRVJNT0RFX0lORk9fVjMgYXNQb3dlclBsYXlJbmZvW0FUT01fTUFYX05VTUJFUk9GX1BPV0VSX0JMT0NLXTsKK31BVE9NX1BPV0VSUExBWV9JTkZPX1YzOwogCiAvKiBOZXcgUFBsaWIgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQ4NzMsNDAgKzU4OTcsNDIgQEAKICAgICAgIFVDSEFSICB1Y01heEhUTGlua1dpZHRoOyAgICAgICAgICAgIC8vIEZyb20gU0JJT1MgLSB7MiwgNCwgOCwgMTZ9CiAgICAgICBVQ0hBUiAgdWNNaW5IVExpbmtXaWR0aDsgICAgICAgICAgICAvLyBGcm9tIFNCSU9TIC0gezIsIDQsIDgsIDE2fS4gRWZmZWN0aXZlIG9ubHkgaWYgQ0RMVyBlbmFibGVkLiBNaW5pbXVtIGRvd24gc3RyZWFtIHdpZHRoIGNvdWxkIGJlIGJpZ2dlciBhcyBkaXNwbGF5IEJXIHJlcXVyaWVtZW50LgogICAgICAgVVNIT1JUIHVzSFRMaW5rRnJlcTsgICAgICAgICAgICAgICAgLy8gU2VlIGRlZmluaXRpb24gQVRPTV9QUExJQl9SUzc4MF9IVExJTktGUkVRX3h4eCBvciBpbiBNSHooPj0yMDApLgotICAgICAgVUxPTkcgIHVsRmxhZ3M7CisgICAgICBVTE9ORyAgdWxGbGFnczsgCiB9IEFUT01fUFBMSUJfUlM3ODBfQ0xPQ0tfSU5GTzsKIAotI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX1ZPTFRBR0VfTk9ORSAgICAgICAwCi0jZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfVk9MVEFHRV9MT1cgICAgICAgIDEKLSNkZWZpbmUgQVRPTV9QUExJQl9SUzc4MF9WT0xUQUdFX0hJR0ggICAgICAgMgotI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX1ZPTFRBR0VfVkFSSUFCTEUgICAzCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfVk9MVEFHRV9OT05FICAgICAgIDAgCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfVk9MVEFHRV9MT1cgICAgICAgIDEgCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfVk9MVEFHRV9ISUdIICAgICAgIDIgCisjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfVk9MVEFHRV9WQVJJQUJMRSAgIDMgCiAKICNkZWZpbmUgQVRPTV9QUExJQl9SUzc4MF9TUE1DTEtfTk9ORSAgICAgICAgMCAgIC8vIFdlIGNhbm5vdCBjaGFuZ2UgdGhlIHNpZGUgcG9ydCBtZW1vcnkgY2xvY2ssIGxlYXZlIGl0IGFzIGl0IGlzLgogI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX1NQTUNMS19MT1cgICAgICAgICAxCiAjZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfU1BNQ0xLX0hJR0ggICAgICAgIDIKIAotI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX0hUTElOS0ZSRVFfTk9ORSAgICAgICAwCi0jZGVmaW5lIEFUT01fUFBMSUJfUlM3ODBfSFRMSU5LRlJFUV9MT1cgICAgICAgIDEKLSNkZWZpbmUgQVRPTV9QUExJQl9SUzc4MF9IVExJTktGUkVRX0hJR0ggICAgICAgMgorI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX0hUTElOS0ZSRVFfTk9ORSAgICAgICAwIAorI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX0hUTElOS0ZSRVFfTE9XICAgICAgICAxIAorI2RlZmluZSBBVE9NX1BQTElCX1JTNzgwX0hUTElOS0ZSRVFfSElHSCAgICAgICAyIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qICBGb2xsb3dpbmcgZGVmaW5pdGlvbnMgYXJlIGZvciBjb21wYXRpYmxpdHkgaXNzdWUgaW4gZGlmZmVyZW50IFNXIGNvbXBvbmVudHMuICovCisKKy8vIEZvbGxvd2luZyBkZWZpbml0aW9ucyBhcmUgZm9yIGNvbXBhdGlibGl0eSBpc3N1ZSBpbiBkaWZmZXJlbnQgU1cgY29tcG9uZW50cy4gCiAjZGVmaW5lIEFUT01fTUFTVEVSX0RBVEFfVEFCTEVfUkVWSVNJT04gICAweDAxCi0jZGVmaW5lIE9iamVjdF9JbmZvCQkJCQkJCQkJCQkJT2JqZWN0X0hlYWRlcgorI2RlZmluZSBPYmplY3RfSW5mbwkJCQkJCQkJCQkJCU9iamVjdF9IZWFkZXIJCQkKICNkZWZpbmUJQWRqdXN0QVJCX1NFUQkJCQkJCQkJCQkJTUNfSW5pdFBhcmFtZXRlcgogI2RlZmluZQlWUkFNX0dQSU9fRGV0ZWN0aW9uSW5mbwkJCQkJCVZvbHRhZ2VPYmplY3RJbmZvCi0jZGVmaW5lCUFTSUNfVkREQ0lfSW5mbyAgICAgICAgICAgICAgICAgICBBU0lDX1Byb2ZpbGluZ0luZm8KKyNkZWZpbmUJQVNJQ19WRERDSV9JbmZvICAgICAgICAgICAgICAgICAgIEFTSUNfUHJvZmlsaW5nSW5mbwkJCQkJCQkJCQkJCQkJCiAjZGVmaW5lIEFTSUNfTVZERFFfSW5mbwkJCQkJCQkJCQlNZW1vcnlUcmFpbmluZ0luZm8KLSNkZWZpbmUgU1NfSW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQTExfU1NfSW5mbworI2RlZmluZSBTU19JbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgUFBMTF9TU19JbmZvICAgICAgICAgICAgICAgICAgICAgIAogI2RlZmluZSBBU0lDX01WRERDX0luZm8gICAgICAgICAgICAgICAgICAgQVNJQ19JbnRlcm5hbFNTX0luZm8KICNkZWZpbmUgRGlzcERldmljZVByaW9yaXR5SW5mbwkJCQkJCVNhdmVSZXN0b3JlSW5mbwogI2RlZmluZSBEaXNwT3V0SW5mbwkJCQkJCQkJCQkJCVRWX1ZpZGVvTW9kZQogCisKICNkZWZpbmUgQVRPTV9FTkNPREVSX09CSkVDVF9UQUJMRSAgICAgICAgIEFUT01fT0JKRUNUX1RBQkxFCiAjZGVmaW5lIEFUT01fQ09OTkVDVE9SX09CSkVDVF9UQUJMRSAgICAgICBBVE9NX09CSkVDVF9UQUJMRQogCi0vKiBOZXcgZGV2aWNlIG5hbWluZywgcmVtb3ZlIHRoZW0gd2hlbiBib3RoIERBTC9WQklPUyBpcyByZWFkeSAqLworLy9OZXcgZGV2aWNlIG5hbWluZywgcmVtb3ZlIHRoZW0gd2hlbiBib3RoIERBTC9WQklPUyBpcyByZWFkeQogI2RlZmluZSBERlAySV9PVVRQVVRfQ09OVFJPTF9QQVJBTUVURVJTICAgIENSVDFfT1VUUFVUX0NPTlRST0xfUEFSQU1FVEVSUwogI2RlZmluZSBERlAySV9PVVRQVVRfQ09OVFJPTF9QU19BTExPQ0FUSU9OIERGUDJJX09VVFBVVF9DT05UUk9MX1BBUkFNRVRFUlMKIApAQCAtNDkyMSw3ICs1OTQ3LDcgQEAKIAogI2RlZmluZSBBVE9NX0RFVklDRV9ERlAxSV9JTkRFWCAgICAgICAgICAgIEFUT01fREVWSUNFX0RGUDFfSU5ERVgKICNkZWZpbmUgQVRPTV9ERVZJQ0VfREZQMVhfSU5ERVggICAgICAgICAgICBBVE9NX0RFVklDRV9ERlAyX0lOREVYCi0KKyAKICNkZWZpbmUgQVRPTV9ERVZJQ0VfREZQMklfSU5ERVggICAgICAgICAgICAweDAwMDAwMDA5CiAjZGVmaW5lIEFUT01fREVWSUNFX0RGUDJJX1NVUFBPUlQgICAgICAgICAgKDB4MUwgPDwgQVRPTV9ERVZJQ0VfREZQMklfSU5ERVgpCiAKQEAgLTQ5MzksNyArNTk2NSw3IEBACiAKICNkZWZpbmUgQVRPTV9TM19ERlAySV9BQ1RJVkViMSAgICAgICAgICAgICAweDAyCiAKLSNkZWZpbmUgQVRPTV9TM19ERlAxSV9BQ1RJVkUgICAgICAgICAgICAgICBBVE9NX1MzX0RGUDFfQUNUSVZFCisjZGVmaW5lIEFUT01fUzNfREZQMUlfQUNUSVZFICAgICAgICAgICAgICAgQVRPTV9TM19ERlAxX0FDVElWRSAKICNkZWZpbmUgQVRPTV9TM19ERlAxWF9BQ1RJVkUgICAgICAgICAgICAgICBBVE9NX1MzX0RGUDJfQUNUSVZFCiAKICNkZWZpbmUgQVRPTV9TM19ERlAySV9BQ1RJVkUgICAgICAgICAgICAgICAweDAwMDAwMjAwTApAQCAtNDk1OCwxNCArNTk4NCwxNCBAQAogI2RlZmluZSBBVE9NX1M2X0FDQ19SRVFfREZQMkliMyAgICAgICAgICAgIDB4MDIKICNkZWZpbmUgQVRPTV9TNl9BQ0NfUkVRX0RGUDJJICAgICAgICAgICAgICAweDAyMDAwMDAwTAogCi0jZGVmaW5lIFRNRFMxWEVuY29kZXJDb250cm9sICAgICAgICAgICAgICAgRFZPRW5jb2RlckNvbnRyb2wKKyNkZWZpbmUgVE1EUzFYRW5jb2RlckNvbnRyb2wgICAgICAgICAgICAgICBEVk9FbmNvZGVyQ29udHJvbCAgICAgICAgICAgCiAjZGVmaW5lIERGUDFYT3V0cHV0Q29udHJvbCAgICAgICAgICAgICAgICAgRFZPT3V0cHV0Q29udHJvbAogCiAjZGVmaW5lIEV4dGVybmFsREZQT3V0cHV0Q29udHJvbCAgICAgICAgICAgREZQMVhPdXRwdXRDb250cm9sCiAjZGVmaW5lIEVuYWJsZUV4dGVybmFsVE1EU19FbmNvZGVyICAgICAgICAgVE1EUzFYRW5jb2RlckNvbnRyb2wKIAogI2RlZmluZSBERlAxSU91dHB1dENvbnRyb2wgICAgICAgICAgICAgICAgIFRNRFNBT3V0cHV0Q29udHJvbAotI2RlZmluZSBERlAySU91dHB1dENvbnRyb2wgICAgICAgICAgICAgICAgIExWVE1BT3V0cHV0Q29udHJvbAorI2RlZmluZSBERlAySU91dHB1dENvbnRyb2wgICAgICAgICAgICAgICAgIExWVE1BT3V0cHV0Q29udHJvbCAgICAgIAogCiAjZGVmaW5lIERBQzFfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlMgICAgREFDX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTCiAjZGVmaW5lIERBQzFfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04gREFDX0VOQ09ERVJfQ09OVFJPTF9QU19BTExPQ0FUSU9OCkBAIC00OTc0LDcgKzYwMDAsNyBAQAogI2RlZmluZSBEQUMyX0VOQ09ERVJfQ09OVFJPTF9QU19BTExPQ0FUSU9OIERBQ19FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTgogCiAjZGVmaW5lIHVjRGFjMVN0YW5kYXJkICB1Y0RhY1N0YW5kYXJkCi0jZGVmaW5lIHVjRGFjMlN0YW5kYXJkICB1Y0RhY1N0YW5kYXJkCisjZGVmaW5lIHVjRGFjMlN0YW5kYXJkICB1Y0RhY1N0YW5kYXJkICAKIAogI2RlZmluZSBUTURTMUVuY29kZXJDb250cm9sIFRNRFNBRW5jb2RlckNvbnRyb2wKICNkZWZpbmUgVE1EUzJFbmNvZGVyQ29udHJvbCBMVlRNQUVuY29kZXJDb250cm9sCkBAIC00OTg0LDEyICs2MDEwLDU2IEBACiAjZGVmaW5lIENSVDFPdXRwdXRDb250cm9sICAgREFDMU91dHB1dENvbnRyb2wKICNkZWZpbmUgQ1JUMk91dHB1dENvbnRyb2wgICBEQUMyT3V0cHV0Q29udHJvbAogCi0vKiBUaGVzZSB0d28gbGluZXMgd2lsbCBiZSByZW1vdmVkIGZvciBzdXJlIGluIGEgZmV3IGRheXMsIHdpbGwgZm9sbG93IHVwIHdpdGggTWljaGFlbCBWLiAqLworLy9UaGVzZSB0d28gbGluZXMgd2lsbCBiZSByZW1vdmVkIGZvciBzdXJlIGluIGEgZmV3IGRheXMsIHdpbGwgZm9sbG93IHVwIHdpdGggTWljaGFlbCBWLgogI2RlZmluZSBFbmFibGVMVkRTX1NTICAgRW5hYmxlU3ByZWFkU3BlY3RydW1PblBQTEwKLSNkZWZpbmUgRU5BQkxFX0xWRFNfU1NfUEFSQU1FVEVSU19WMyAgRU5BQkxFX1NQUkVBRF9TUEVDVFJVTV9PTl9QUExMCisjZGVmaW5lIEVOQUJMRV9MVkRTX1NTX1BBUkFNRVRFUlNfVjMgIEVOQUJMRV9TUFJFQURfU1BFQ1RSVU1fT05fUFBMTCAgCisKKy8vI2RlZmluZSBBVE9NX1MyX0NSVDFfRFBNU19TVEFURSAgICAgICAgIDB4MDAwMTAwMDBMCisvLyNkZWZpbmUgQVRPTV9TMl9MQ0QxX0RQTVNfU1RBVEUJICAgICAgICBBVE9NX1MyX0NSVDFfRFBNU19TVEFURQorLy8jZGVmaW5lIEFUT01fUzJfVFYxX0RQTVNfU1RBVEUgICAgICAgICAgQVRPTV9TMl9DUlQxX0RQTVNfU1RBVEUKKy8vI2RlZmluZSBBVE9NX1MyX0RGUDFfRFBNU19TVEFURSAgICAgICAgIEFUT01fUzJfQ1JUMV9EUE1TX1NUQVRFCisvLyNkZWZpbmUgQVRPTV9TMl9DUlQyX0RQTVNfU1RBVEUgICAgICAgICBBVE9NX1MyX0NSVDFfRFBNU19TVEFURQorCisjZGVmaW5lIEFUT01fUzZfQUNDX1JFUV9UVjIgICAgICAgICAgICAgMHgwMDQwMDAwMEwKKyNkZWZpbmUgQVRPTV9ERVZJQ0VfVFYyX0lOREVYICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIEFUT01fREVWSUNFX1RWMl9TVVBQT1JUICAgICAgICAgKDB4MUwgPDwgQVRPTV9ERVZJQ0VfVFYyX0lOREVYKQorI2RlZmluZSBBVE9NX1MwX1RWMiAgICAgICAgICAgICAgICAgICAgIDB4MDAxMDAwMDBMCisjZGVmaW5lIEFUT01fUzNfVFYyX0FDVElWRSAgICAgICAgICAgICAgQVRPTV9TM19ERlA2X0FDVElWRQorI2RlZmluZSBBVE9NX1MzX1RWMl9DUlRDX0FDVElWRSAgICAgICAgIEFUT01fUzNfREZQNl9DUlRDX0FDVElWRQorCisvLworI2RlZmluZSBBVE9NX1MyX0NSVDFfRFBNU19TVEFURSAgICAgICAgIDB4MDAwMTAwMDBMCisjZGVmaW5lIEFUT01fUzJfTENEMV9EUE1TX1NUQVRFCSAgICAgICAgMHgwMDAyMDAwMEwKKyNkZWZpbmUgQVRPTV9TMl9UVjFfRFBNU19TVEFURSAgICAgICAgICAweDAwMDQwMDAwTAorI2RlZmluZSBBVE9NX1MyX0RGUDFfRFBNU19TVEFURSAgICAgICAgIDB4MDAwODAwMDBMCisjZGVmaW5lIEFUT01fUzJfQ1JUMl9EUE1TX1NUQVRFICAgICAgICAgMHgwMDEwMDAwMEwKKyNkZWZpbmUgQVRPTV9TMl9MQ0QyX0RQTVNfU1RBVEUgICAgICAgICAweDAwMjAwMDAwTAorI2RlZmluZSBBVE9NX1MyX1RWMl9EUE1TX1NUQVRFICAgICAgICAgIDB4MDA0MDAwMDBMCisjZGVmaW5lIEFUT01fUzJfREZQMl9EUE1TX1NUQVRFICAgICAgICAgMHgwMDgwMDAwMEwKKyNkZWZpbmUgQVRPTV9TMl9DVl9EUE1TX1NUQVRFICAgICAgICAgICAweDAxMDAwMDAwTAorI2RlZmluZSBBVE9NX1MyX0RGUDNfRFBNU19TVEFURQkJCQkJMHgwMjAwMDAwMEwKKyNkZWZpbmUgQVRPTV9TMl9ERlA0X0RQTVNfU1RBVEUJCQkJCTB4MDQwMDAwMDBMCisjZGVmaW5lIEFUT01fUzJfREZQNV9EUE1TX1NUQVRFCQkJCQkweDA4MDAwMDAwTAorCisjZGVmaW5lIEFUT01fUzJfQ1JUMV9EUE1TX1NUQVRFYjIgICAgICAgMHgwMQorI2RlZmluZSBBVE9NX1MyX0xDRDFfRFBNU19TVEFURWIyICAgICAgIDB4MDIKKyNkZWZpbmUgQVRPTV9TMl9UVjFfRFBNU19TVEFURWIyICAgICAgICAweDA0CisjZGVmaW5lIEFUT01fUzJfREZQMV9EUE1TX1NUQVRFYjIgICAgICAgMHgwOAorI2RlZmluZSBBVE9NX1MyX0NSVDJfRFBNU19TVEFURWIyICAgICAgIDB4MTAKKyNkZWZpbmUgQVRPTV9TMl9MQ0QyX0RQTVNfU1RBVEViMiAgICAgICAweDIwCisjZGVmaW5lIEFUT01fUzJfVFYyX0RQTVNfU1RBVEViMiAgICAgICAgMHg0MAorI2RlZmluZSBBVE9NX1MyX0RGUDJfRFBNU19TVEFURWIyICAgICAgIDB4ODAKKyNkZWZpbmUgQVRPTV9TMl9DVl9EUE1TX1NUQVRFYjMgICAgICAgICAweDAxCisjZGVmaW5lIEFUT01fUzJfREZQM19EUE1TX1NUQVRFYjMJCQkJMHgwMgorI2RlZmluZSBBVE9NX1MyX0RGUDRfRFBNU19TVEFURWIzCQkJCTB4MDQKKyNkZWZpbmUgQVRPTV9TMl9ERlA1X0RQTVNfU1RBVEViMwkJCQkweDA4CisKKyNkZWZpbmUgQVRPTV9TM19BU0lDX0dVSV9FTkdJTkVfSFVOR2IzCTB4MjAKKyNkZWZpbmUgQVRPTV9TM19BTExPV19GQVNUX1BXUl9TV0lUQ0hiMyAweDQwCisjZGVmaW5lIEFUT01fUzNfUlFTVF9HUFVfVVNFX01JTl9QV1JiMyAgMHg4MAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jcHJhZ21hIHBhY2soKQkJCS8qICBCSU9TIGRhdGEgbXVzdCB1c2UgYnl0ZSBhbGlnbWVudCAqLworI3ByYWdtYSBwYWNrKCkgLy8gQklPUyBkYXRhIG11c3QgdXNlIGJ5dGUgYWxpZ21lbnQKIAogI2VuZGlmIC8qIF9BVE9NQklPU19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfY3J0Yy5jCmluZGV4IGFmNDY0ZTM1Li5kZDlmZGY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2NydGMuYwpAQCAtMjQ1LDIxICsyNDUsMjUgQEAKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgRFJNX01PREVfRFBNU19PTjoKLQkJYXRvbWJpb3NfZW5hYmxlX2NydGMoY3J0YywgMSk7CisJCWF0b21iaW9zX2VuYWJsZV9jcnRjKGNydGMsIEFUT01fRU5BQkxFKTsKIAkJaWYgKEFTSUNfSVNfRENFMyhyZGV2KSkKLQkJCWF0b21iaW9zX2VuYWJsZV9jcnRjX21lbXJlcShjcnRjLCAxKTsKLQkJYXRvbWJpb3NfYmxhbmtfY3J0YyhjcnRjLCAwKTsKLQkJZHJtX3ZibGFua19wb3N0X21vZGVzZXQoZGV2LCByYWRlb25fY3J0Yy0+Y3J0Y19pZCk7CisJCQlhdG9tYmlvc19lbmFibGVfY3J0Y19tZW1yZXEoY3J0YywgQVRPTV9FTkFCTEUpOworCQlhdG9tYmlvc19ibGFua19jcnRjKGNydGMsIEFUT01fRElTQUJMRSk7CisJCS8qIFhYWCByZS1lbmFibGUgd2hlbiBpbnRlcnJ1cHQgc3VwcG9ydCBpcyBhZGRlZCAqLworCQlpZiAoIUFTSUNfSVNfRENFNChyZGV2KSkKKwkJCWRybV92YmxhbmtfcG9zdF9tb2Rlc2V0KGRldiwgcmFkZW9uX2NydGMtPmNydGNfaWQpOwogCQlyYWRlb25fY3J0Y19sb2FkX2x1dChjcnRjKTsKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9EUE1TX1NUQU5EQlk6CiAJY2FzZSBEUk1fTU9ERV9EUE1TX1NVU1BFTkQ6CiAJY2FzZSBEUk1fTU9ERV9EUE1TX09GRjoKLQkJZHJtX3ZibGFua19wcmVfbW9kZXNldChkZXYsIHJhZGVvbl9jcnRjLT5jcnRjX2lkKTsKLQkJYXRvbWJpb3NfYmxhbmtfY3J0YyhjcnRjLCAxKTsKKwkJLyogWFhYIHJlLWVuYWJsZSB3aGVuIGludGVycnVwdCBzdXBwb3J0IGlzIGFkZGVkICovCisJCWlmICghQVNJQ19JU19EQ0U0KHJkZXYpKQorCQkJZHJtX3ZibGFua19wcmVfbW9kZXNldChkZXYsIHJhZGVvbl9jcnRjLT5jcnRjX2lkKTsKKwkJYXRvbWJpb3NfYmxhbmtfY3J0YyhjcnRjLCBBVE9NX0VOQUJMRSk7CiAJCWlmIChBU0lDX0lTX0RDRTMocmRldikpCi0JCQlhdG9tYmlvc19lbmFibGVfY3J0Y19tZW1yZXEoY3J0YywgMCk7Ci0JCWF0b21iaW9zX2VuYWJsZV9jcnRjKGNydGMsIDApOworCQkJYXRvbWJpb3NfZW5hYmxlX2NydGNfbWVtcmVxKGNydGMsIEFUT01fRElTQUJMRSk7CisJCWF0b21iaW9zX2VuYWJsZV9jcnRjKGNydGMsIEFUT01fRElTQUJMRSk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTM0OSw2ICszNTMsMTEgQEAKIAlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKIH0KIAordW5pb24gYXRvbV9lbmFibGVfc3MgeworCUVOQUJMRV9MVkRTX1NTX1BBUkFNRVRFUlMgbGVnYWN5OworCUVOQUJMRV9TUFJFQURfU1BFQ1RSVU1fT05fUFBMTF9QU19BTExPQ0FUSU9OIHYxOworfTsKKwogc3RhdGljIHZvaWQgYXRvbWJpb3Nfc2V0X3NzKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IGVuYWJsZSkKIHsKIAlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7CkBAIC0zNTgsMTEgKzM2NywxNCBAQAogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSBOVUxMOwogCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqZGlnID0gTlVMTDsKIAlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBFbmFibGVTcHJlYWRTcGVjdHJ1bU9uUFBMTCk7Ci0JRU5BQkxFX1NQUkVBRF9TUEVDVFJVTV9PTl9QUExMX1BTX0FMTE9DQVRJT04gYXJnczsKLQlFTkFCTEVfTFZEU19TU19QQVJBTUVURVJTIGxlZ2FjeV9hcmdzOworCXVuaW9uIGF0b21fZW5hYmxlX3NzIGFyZ3M7CiAJdWludDE2X3QgcGVyY2VudGFnZSA9IDA7CiAJdWludDhfdCB0eXBlID0gMCwgc3RlcCA9IDAsIGRlbGF5ID0gMCwgcmFuZ2UgPSAwOwogCisJLyogWFhYIGFkZCBzcyBzdXBwb3J0IGZvciBEQ0U0ICovCisJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkKKwkJcmV0dXJuOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKIAkJaWYgKGVuY29kZXItPmNydGMgPT0gY3J0YykgewogCQkJcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKQEAgLTM4NiwyOSArMzk4LDI4IEBACiAJaWYgKCFyYWRlb25fZW5jb2RlcikKIAkJcmV0dXJuOwogCisJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwogCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7Ci0JCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKLQkJYXJncy51c1NwcmVhZFNwZWN0cnVtUGVyY2VudGFnZSA9IGNwdV90b19sZTE2KHBlcmNlbnRhZ2UpOwotCQlhcmdzLnVjU3ByZWFkU3BlY3RydW1UeXBlID0gdHlwZTsKLQkJYXJncy51Y1NwcmVhZFNwZWN0cnVtU3RlcCA9IHN0ZXA7Ci0JCWFyZ3MudWNTcHJlYWRTcGVjdHJ1bURlbGF5ID0gZGVsYXk7Ci0JCWFyZ3MudWNTcHJlYWRTcGVjdHJ1bVJhbmdlID0gcmFuZ2U7Ci0JCWFyZ3MudWNQcGxsID0gcmFkZW9uX2NydGMtPmNydGNfaWQgPyBBVE9NX1BQTEwyIDogQVRPTV9QUExMMTsKLQkJYXJncy51Y0VuYWJsZSA9IGVuYWJsZTsKLQkJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CisJCWFyZ3MudjEudXNTcHJlYWRTcGVjdHJ1bVBlcmNlbnRhZ2UgPSBjcHVfdG9fbGUxNihwZXJjZW50YWdlKTsKKwkJYXJncy52MS51Y1NwcmVhZFNwZWN0cnVtVHlwZSA9IHR5cGU7CisJCWFyZ3MudjEudWNTcHJlYWRTcGVjdHJ1bVN0ZXAgPSBzdGVwOworCQlhcmdzLnYxLnVjU3ByZWFkU3BlY3RydW1EZWxheSA9IGRlbGF5OworCQlhcmdzLnYxLnVjU3ByZWFkU3BlY3RydW1SYW5nZSA9IHJhbmdlOworCQlhcmdzLnYxLnVjUHBsbCA9IHJhZGVvbl9jcnRjLT5jcnRjX2lkID8gQVRPTV9QUExMMiA6IEFUT01fUFBMTDE7CisJCWFyZ3MudjEudWNFbmFibGUgPSBlbmFibGU7CiAJfSBlbHNlIHsKLQkJbWVtc2V0KCZsZWdhY3lfYXJncywgMCwgc2l6ZW9mKGxlZ2FjeV9hcmdzKSk7Ci0JCWxlZ2FjeV9hcmdzLnVzU3ByZWFkU3BlY3RydW1QZXJjZW50YWdlID0gY3B1X3RvX2xlMTYocGVyY2VudGFnZSk7Ci0JCWxlZ2FjeV9hcmdzLnVjU3ByZWFkU3BlY3RydW1UeXBlID0gdHlwZTsKLQkJbGVnYWN5X2FyZ3MudWNTcHJlYWRTcGVjdHJ1bVN0ZXBTaXplX0RlbGF5ID0gKHN0ZXAgJiAzKSA8PCAyOwotCQlsZWdhY3lfYXJncy51Y1NwcmVhZFNwZWN0cnVtU3RlcFNpemVfRGVsYXkgfD0gKGRlbGF5ICYgNykgPDwgNDsKLQkJbGVnYWN5X2FyZ3MudWNFbmFibGUgPSBlbmFibGU7Ci0JCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LCBpbmRleCwgKHVpbnQzMl90ICopJmxlZ2FjeV9hcmdzKTsKKwkJYXJncy5sZWdhY3kudXNTcHJlYWRTcGVjdHJ1bVBlcmNlbnRhZ2UgPSBjcHVfdG9fbGUxNihwZXJjZW50YWdlKTsKKwkJYXJncy5sZWdhY3kudWNTcHJlYWRTcGVjdHJ1bVR5cGUgPSB0eXBlOworCQlhcmdzLmxlZ2FjeS51Y1NwcmVhZFNwZWN0cnVtU3RlcFNpemVfRGVsYXkgPSAoc3RlcCAmIDMpIDw8IDI7CisJCWFyZ3MubGVnYWN5LnVjU3ByZWFkU3BlY3RydW1TdGVwU2l6ZV9EZWxheSB8PSAoZGVsYXkgJiA3KSA8PCA0OworCQlhcmdzLmxlZ2FjeS51Y0VuYWJsZSA9IGVuYWJsZTsKIAl9CisJYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7CiB9CiAKIHVuaW9uIGFkanVzdF9waXhlbF9jbG9jayB7CiAJQURKVVNUX0RJU1BMQVlfUExMX1BTX0FMTE9DQVRJT04gdjE7CisJQURKVVNUX0RJU1BMQVlfUExMX1BTX0FMTE9DQVRJT05fVjMgdjM7CiB9OwogCiBzdGF0aWMgdTMyIGF0b21iaW9zX2FkanVzdF9wbGwoc3RydWN0IGRybV9jcnRjICpjcnRjLApAQCAtNDIwLDEwICs0MzEsMjQgQEAKIAlzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIgPSBOVUxMOwogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSBOVUxMOwogCXUzMiBhZGp1c3RlZF9jbG9jayA9IG1vZGUtPmNsb2NrOworCWludCBlbmNvZGVyX21vZGUgPSAwOwogCiAJLyogcmVzZXQgdGhlIHBsbCBmbGFncyAqLwogCXBsbC0+ZmxhZ3MgPSAwOwogCisJLyogc2VsZWN0IHRoZSBQTEwgYWxnbyAqLworCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CisJCWlmIChyYWRlb25fbmV3X3BsbCA9PSAwKQorCQkJcGxsLT5hbGdvID0gUExMX0FMR09fTEVHQUNZOworCQllbHNlCisJCQlwbGwtPmFsZ28gPSBQTExfQUxHT19ORVc7CisJfSBlbHNlIHsKKwkJaWYgKHJhZGVvbl9uZXdfcGxsID09IDEpCisJCQlwbGwtPmFsZ28gPSBQTExfQUxHT19ORVc7CisJCWVsc2UKKwkJCXBsbC0+YWxnbyA9IFBMTF9BTEdPX0xFR0FDWTsKKwl9CisKIAlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgewogCQlpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNjAwKSB8fAogCQkgICAgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNjkwKSB8fApAQCAtNDQ4LDEwICs0NzMsMTYgQEAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewogCQlpZiAoZW5jb2Rlci0+Y3J0YyA9PSBjcnRjKSB7CiAJCQlyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCQkJZW5jb2Rlcl9tb2RlID0gYXRvbWJpb3NfZ2V0X2VuY29kZXJfbW9kZShlbmNvZGVyKTsKIAkJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CiAJCQkJLyogRFZPIHdhbnRzIDJ4IHBpeGVsIGNsb2NrIGlmIHRoZSBEVk8gY2hpcCBpcyBpbiAxMiBiaXQgbW9kZSAqLwogCQkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCA9PSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfRFZPMSkKIAkJCQkJYWRqdXN0ZWRfY2xvY2sgPSBtb2RlLT5jbG9jayAqIDI7CisJCQkJLyogTFZEUyBQTEwgcXVpcmtzICovCisJCQkJaWYgKGVuY29kZXItPmVuY29kZXJfdHlwZSA9PSBEUk1fTU9ERV9FTkNPREVSX0xWRFMpIHsKKwkJCQkJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnICpkaWcgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CisJCQkJCXBsbC0+YWxnbyA9IGRpZy0+cGxsX2FsZ287CisJCQkJfQogCQkJfSBlbHNlIHsKIAkJCQlpZiAoZW5jb2Rlci0+ZW5jb2Rlcl90eXBlICE9IERSTV9NT0RFX0VOQ09ERVJfREFDKQogCQkJCQlwbGwtPmZsYWdzIHw9IFJBREVPTl9QTExfTk9fT0REX1BPU1RfRElWOwpAQCAtNDY4LDE0ICs0OTksOSBAQAogCSAqLwogCWlmIChBU0lDX0lTX0RDRTMocmRldikpIHsKIAkJdW5pb24gYWRqdXN0X3BpeGVsX2Nsb2NrIGFyZ3M7Ci0JCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqZGlnOwogCQl1OCBmcmV2LCBjcmV2OwogCQlpbnQgaW5kZXg7CiAKLQkJaWYgKCFyYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXYpCi0JCQlyZXR1cm4gYWRqdXN0ZWRfY2xvY2s7Ci0JCWRpZyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKLQogCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIEFkanVzdERpc3BsYXlQbGwpOwogCQlhdG9tX3BhcnNlX2NtZF9oZWFkZXIocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICZmcmV2LAogCQkJCSAgICAgICZjcmV2KTsKQEAgLTQ4OSwxMiArNTE1LDUxIEBACiAJCQljYXNlIDI6CiAJCQkJYXJncy52MS51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihtb2RlLT5jbG9jayAvIDEwKTsKIAkJCQlhcmdzLnYxLnVjVHJhbnNtaXR0ZXJJRCA9IHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkOwotCQkJCWFyZ3MudjEudWNFbmNvZGVNb2RlID0gYXRvbWJpb3NfZ2V0X2VuY29kZXJfbW9kZShlbmNvZGVyKTsKKwkJCQlhcmdzLnYxLnVjRW5jb2RlTW9kZSA9IGVuY29kZXJfbW9kZTsKIAogCQkJCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LAogCQkJCQkJICAgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKIAkJCQlhZGp1c3RlZF9jbG9jayA9IGxlMTZfdG9fY3B1KGFyZ3MudjEudXNQaXhlbENsb2NrKSAqIDEwOwogCQkJCWJyZWFrOworCQkJY2FzZSAzOgorCQkJCWFyZ3MudjMuc0lucHV0LnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KG1vZGUtPmNsb2NrIC8gMTApOworCQkJCWFyZ3MudjMuc0lucHV0LnVjVHJhbnNtaXR0ZXJJRCA9IHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkOworCQkJCWFyZ3MudjMuc0lucHV0LnVjRW5jb2RlTW9kZSA9IGVuY29kZXJfbW9kZTsKKwkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgPSAwOworCQkJCWlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9ERlBfU1VQUE9SVCkpIHsKKwkJCQkJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnICpkaWcgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7CisKKwkJCQkJaWYgKGVuY29kZXJfbW9kZSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9EUCkKKwkJCQkJCWFyZ3MudjMuc0lucHV0LnVjRGlzcFBsbENvbmZpZyB8PQorCQkJCQkJCURJU1BQTExfQ09ORklHX0NPSEVSRU5UX01PREU7CisJCQkJCWVsc2UgeworCQkJCQkJaWYgKGRpZy0+Y29oZXJlbnRfbW9kZSkKKwkJCQkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgfD0KKwkJCQkJCQkJRElTUFBMTF9DT05GSUdfQ09IRVJFTlRfTU9ERTsKKwkJCQkJCWlmIChtb2RlLT5jbG9jayA+IDE2NTAwMCkKKwkJCQkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgfD0KKwkJCQkJCQkJRElTUFBMTF9DT05GSUdfRFVBTF9MSU5LOworCQkJCQl9CisJCQkJfSBlbHNlIGlmIChyYWRlb25fZW5jb2Rlci0+ZGV2aWNlcyAmIChBVE9NX0RFVklDRV9MQ0RfU1VQUE9SVCkpIHsKKwkJCQkJLyogbWF5IHdhbnQgdG8gZW5hYmxlIFNTIG9uIERQL2VEUCBldmVudHVhbGx5ICovCisJCQkJCWFyZ3MudjMuc0lucHV0LnVjRGlzcFBsbENvbmZpZyB8PQorCQkJCQkJRElTUFBMTF9DT05GSUdfU1NfRU5BQkxFOworCQkJCQlpZiAobW9kZS0+Y2xvY2sgPiAxNjUwMDApCisJCQkJCQlhcmdzLnYzLnNJbnB1dC51Y0Rpc3BQbGxDb25maWcgfD0KKwkJCQkJCQlESVNQUExMX0NPTkZJR19EVUFMX0xJTks7CisJCQkJfQorCQkJCWF0b21fZXhlY3V0ZV90YWJsZShyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0LAorCQkJCQkJICAgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKKwkJCQlhZGp1c3RlZF9jbG9jayA9IGxlMzJfdG9fY3B1KGFyZ3MudjMuc091dHB1dC51bERpc3BQbGxGcmVxKSAqIDEwOworCQkJCWlmIChhcmdzLnYzLnNPdXRwdXQudWNSZWZEaXYpIHsKKwkJCQkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX1VTRV9SRUZfRElWOworCQkJCQlwbGwtPnJlZmVyZW5jZV9kaXYgPSBhcmdzLnYzLnNPdXRwdXQudWNSZWZEaXY7CisJCQkJfQorCQkJCWlmIChhcmdzLnYzLnNPdXRwdXQudWNQb3N0RGl2KSB7CisJCQkJCXBsbC0+ZmxhZ3MgfD0gUkFERU9OX1BMTF9VU0VfUE9TVF9ESVY7CisJCQkJCXBsbC0+cG9zdF9kaXYgPSBhcmdzLnYzLnNPdXRwdXQudWNQb3N0RGl2OworCQkJCX0KKwkJCQlicmVhazsKIAkJCWRlZmF1bHQ6CiAJCQkJRFJNX0VSUk9SKCJVbmtub3duIHRhYmxlIHZlcnNpb24gJWQgJWRcbiIsIGZyZXYsIGNyZXYpOwogCQkJCXJldHVybiBhZGp1c3RlZF9jbG9jazsKQEAgLTUxMyw5ICs1NzgsNDcgQEAKIAlQSVhFTF9DTE9DS19QQVJBTUVURVJTIHYxOwogCVBJWEVMX0NMT0NLX1BBUkFNRVRFUlNfVjIgdjI7CiAJUElYRUxfQ0xPQ0tfUEFSQU1FVEVSU19WMyB2MzsKKwlQSVhFTF9DTE9DS19QQVJBTUVURVJTX1Y1IHY1OwogfTsKIAotdm9pZCBhdG9tYmlvc19jcnRjX3NldF9wbGwoc3RydWN0IGRybV9jcnRjICpjcnRjLCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSkKK3N0YXRpYyB2b2lkIGF0b21iaW9zX2NydGNfc2V0X2RjcGxsKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1OCBmcmV2LCBjcmV2OworCWludCBpbmRleDsKKwl1bmlvbiBzZXRfcGl4ZWxfY2xvY2sgYXJnczsKKworCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKworCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgU2V0UGl4ZWxDbG9jayk7CisJYXRvbV9wYXJzZV9jbWRfaGVhZGVyKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAmZnJldiwKKwkJCSAgICAgICZjcmV2KTsKKworCXN3aXRjaCAoZnJldikgeworCWNhc2UgMToKKwkJc3dpdGNoIChjcmV2KSB7CisJCWNhc2UgNToKKwkJCS8qIGlmIHRoZSBkZWZhdWx0IGRjcGxsIGNsb2NrIGlzIHNwZWNpZmllZCwKKwkJCSAqIFNldFBpeGVsQ2xvY2sgcHJvdmlkZXMgdGhlIGRpdmlkZXJzCisJCQkgKi8KKwkJCWFyZ3MudjUudWNDUlRDID0gQVRPTV9DUlRDX0lOVkFMSUQ7CisJCQlhcmdzLnY1LnVzUGl4ZWxDbG9jayA9IHJkZXYtPmNsb2NrLmRlZmF1bHRfZGlzcGNsazsKKwkJCWFyZ3MudjUudWNQcGxsID0gQVRPTV9EQ1BMTDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRFJNX0VSUk9SKCJVbmtub3duIHRhYmxlIHZlcnNpb24gJWQgJWRcbiIsIGZyZXYsIGNyZXYpOworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiVW5rbm93biB0YWJsZSB2ZXJzaW9uICVkICVkXG4iLCBmcmV2LCBjcmV2KTsKKwkJcmV0dXJuOworCX0KKwlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKK30KKworc3RhdGljIHZvaWQgYXRvbWJpb3NfY3J0Y19zZXRfcGxsKHN0cnVjdCBkcm1fY3J0YyAqY3J0Yywgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpCiB7CiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CkBAIC01MjksMTIgKzYzMiwxNCBAQAogCXUzMiByZWZfZGl2ID0gMCwgZmJfZGl2ID0gMCwgZnJhY19mYl9kaXYgPSAwLCBwb3N0X2RpdiA9IDA7CiAJc3RydWN0IHJhZGVvbl9wbGwgKnBsbDsKIAl1MzIgYWRqdXN0ZWRfY2xvY2s7CisJaW50IGVuY29kZXJfbW9kZSA9IDA7CiAKIAltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVuY29kZXIsICZkZXYtPm1vZGVfY29uZmlnLmVuY29kZXJfbGlzdCwgaGVhZCkgewogCQlpZiAoZW5jb2Rlci0+Y3J0YyA9PSBjcnRjKSB7CiAJCQlyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCQkJZW5jb2Rlcl9tb2RlID0gYXRvbWJpb3NfZ2V0X2VuY29kZXJfbW9kZShlbmNvZGVyKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNTQyLDI2ICs2NDcsMjQgQEAKIAlpZiAoIXJhZGVvbl9lbmNvZGVyKQogCQlyZXR1cm47CiAKLQlpZiAocmFkZW9uX2NydGMtPmNydGNfaWQgPT0gMCkKKwlzd2l0Y2ggKHJhZGVvbl9jcnRjLT5wbGxfaWQpIHsKKwljYXNlIEFUT01fUFBMTDE6CiAJCXBsbCA9ICZyZGV2LT5jbG9jay5wMXBsbDsKLQllbHNlCisJCWJyZWFrOworCWNhc2UgQVRPTV9QUExMMjoKIAkJcGxsID0gJnJkZXYtPmNsb2NrLnAycGxsOworCQlicmVhazsKKwljYXNlIEFUT01fRENQTEw6CisJY2FzZSBBVE9NX1BQTExfSU5WQUxJRDoKKwkJcGxsID0gJnJkZXYtPmNsb2NrLmRjcGxsOworCQlicmVhazsKKwl9CiAKIAkvKiBhZGp1c3QgcGl4ZWwgY2xvY2sgYXMgbmVlZGVkICovCiAJYWRqdXN0ZWRfY2xvY2sgPSBhdG9tYmlvc19hZGp1c3RfcGxsKGNydGMsIG1vZGUsIHBsbCk7CiAKLQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgewotCQlpZiAocmFkZW9uX25ld19wbGwpCi0JCQlyYWRlb25fY29tcHV0ZV9wbGxfYXZpdm8ocGxsLCBhZGp1c3RlZF9jbG9jaywgJnBsbF9jbG9jaywKLQkJCQkJCSAmZmJfZGl2LCAmZnJhY19mYl9kaXYsCi0JCQkJCQkgJnJlZl9kaXYsICZwb3N0X2Rpdik7Ci0JCWVsc2UKLQkJCXJhZGVvbl9jb21wdXRlX3BsbChwbGwsIGFkanVzdGVkX2Nsb2NrLCAmcGxsX2Nsb2NrLAotCQkJCQkgICAmZmJfZGl2LCAmZnJhY19mYl9kaXYsCi0JCQkJCSAgICZyZWZfZGl2LCAmcG9zdF9kaXYpOwotCX0gZWxzZQotCQlyYWRlb25fY29tcHV0ZV9wbGwocGxsLCBhZGp1c3RlZF9jbG9jaywgJnBsbF9jbG9jaywgJmZiX2RpdiwgJmZyYWNfZmJfZGl2LAotCQkJCSAgICZyZWZfZGl2LCAmcG9zdF9kaXYpOworCXJhZGVvbl9jb21wdXRlX3BsbChwbGwsIGFkanVzdGVkX2Nsb2NrLCAmcGxsX2Nsb2NrLCAmZmJfZGl2LCAmZnJhY19mYl9kaXYsCisJCQkgICAmcmVmX2RpdiwgJnBvc3RfZGl2KTsKIAogCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgU2V0UGl4ZWxDbG9jayk7CiAJYXRvbV9wYXJzZV9jbWRfaGVhZGVyKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAmZnJldiwKQEAgLTU3Niw4ICs2NzksNyBAQAogCQkJYXJncy52MS51c0ZiRGl2ID0gY3B1X3RvX2xlMTYoZmJfZGl2KTsKIAkJCWFyZ3MudjEudWNGcmFjRmJEaXYgPSBmcmFjX2ZiX2RpdjsKIAkJCWFyZ3MudjEudWNQb3N0RGl2ID0gcG9zdF9kaXY7Ci0JCQlhcmdzLnYxLnVjUHBsbCA9Ci0JCQkgICAgcmFkZW9uX2NydGMtPmNydGNfaWQgPyBBVE9NX1BQTEwyIDogQVRPTV9QUExMMTsKKwkJCWFyZ3MudjEudWNQcGxsID0gcmFkZW9uX2NydGMtPnBsbF9pZDsKIAkJCWFyZ3MudjEudWNDUlRDID0gcmFkZW9uX2NydGMtPmNydGNfaWQ7CiAJCQlhcmdzLnYxLnVjUmVmRGl2U3JjID0gMTsKIAkJCWJyZWFrOwpAQCAtNTg3LDggKzY4OSw3IEBACiAJCQlhcmdzLnYyLnVzRmJEaXYgPSBjcHVfdG9fbGUxNihmYl9kaXYpOwogCQkJYXJncy52Mi51Y0ZyYWNGYkRpdiA9IGZyYWNfZmJfZGl2OwogCQkJYXJncy52Mi51Y1Bvc3REaXYgPSBwb3N0X2RpdjsKLQkJCWFyZ3MudjIudWNQcGxsID0KLQkJCSAgICByYWRlb25fY3J0Yy0+Y3J0Y19pZCA/IEFUT01fUFBMTDIgOiBBVE9NX1BQTEwxOworCQkJYXJncy52Mi51Y1BwbGwgPSByYWRlb25fY3J0Yy0+cGxsX2lkOwogCQkJYXJncy52Mi51Y0NSVEMgPSByYWRlb25fY3J0Yy0+Y3J0Y19pZDsKIAkJCWFyZ3MudjIudWNSZWZEaXZTcmMgPSAxOwogCQkJYnJlYWs7CkBAIC01OTgsMTIgKzY5OSwyMiBAQAogCQkJYXJncy52My51c0ZiRGl2ID0gY3B1X3RvX2xlMTYoZmJfZGl2KTsKIAkJCWFyZ3MudjMudWNGcmFjRmJEaXYgPSBmcmFjX2ZiX2RpdjsKIAkJCWFyZ3MudjMudWNQb3N0RGl2ID0gcG9zdF9kaXY7Ci0JCQlhcmdzLnYzLnVjUHBsbCA9Ci0JCQkgICAgcmFkZW9uX2NydGMtPmNydGNfaWQgPyBBVE9NX1BQTEwyIDogQVRPTV9QUExMMTsKLQkJCWFyZ3MudjMudWNNaXNjSW5mbyA9IChyYWRlb25fY3J0Yy0+Y3J0Y19pZCA8PCAyKTsKKwkJCWFyZ3MudjMudWNQcGxsID0gcmFkZW9uX2NydGMtPnBsbF9pZDsKKwkJCWFyZ3MudjMudWNNaXNjSW5mbyA9IChyYWRlb25fY3J0Yy0+cGxsX2lkIDw8IDIpOwogCQkJYXJncy52My51Y1RyYW5zbWl0dGVySWQgPSByYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZDsKLQkJCWFyZ3MudjMudWNFbmNvZGVyTW9kZSA9Ci0JCQkgICAgYXRvbWJpb3NfZ2V0X2VuY29kZXJfbW9kZShlbmNvZGVyKTsKKwkJCWFyZ3MudjMudWNFbmNvZGVyTW9kZSA9IGVuY29kZXJfbW9kZTsKKwkJCWJyZWFrOworCQljYXNlIDU6CisJCQlhcmdzLnY1LnVjQ1JUQyA9IHJhZGVvbl9jcnRjLT5jcnRjX2lkOworCQkJYXJncy52NS51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihtb2RlLT5jbG9jayAvIDEwKTsKKwkJCWFyZ3MudjUudWNSZWZEaXYgPSByZWZfZGl2OworCQkJYXJncy52NS51c0ZiRGl2ID0gY3B1X3RvX2xlMTYoZmJfZGl2KTsKKwkJCWFyZ3MudjUudWxGYkRpdkRlY0ZyYWMgPSBjcHVfdG9fbGUzMihmcmFjX2ZiX2RpdiAqIDEwMDAwMCk7CisJCQlhcmdzLnY1LnVjUG9zdERpdiA9IHBvc3RfZGl2OworCQkJYXJncy52NS51Y01pc2NJbmZvID0gMDsgLyogSERNSSBkZXB0aCwgZXRjLiAqLworCQkJYXJncy52NS51Y1RyYW5zbWl0dGVySUQgPSByYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZDsKKwkJCWFyZ3MudjUudWNFbmNvZGVyTW9kZSA9IGVuY29kZXJfbW9kZTsKKwkJCWFyZ3MudjUudWNQcGxsID0gcmFkZW9uX2NydGMtPnBsbF9pZDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJRFJNX0VSUk9SKCJVbmtub3duIHRhYmxlIHZlcnNpb24gJWQgJWRcbiIsIGZyZXYsIGNyZXYpOwpAQCAtNjE4LDYgKzcyOSwxNDAgQEAKIAlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKIH0KIAorc3RhdGljIGludCBldmVyZ3JlZW5fY3J0Y19zZXRfYmFzZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsIGludCB4LCBpbnQgeSwKKwkJCQkgICBzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyICpvbGRfZmIpCit7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCByYWRlb25fZnJhbWVidWZmZXIgKnJhZGVvbl9mYjsKKwlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKKwlzdHJ1Y3QgcmFkZW9uX2JvICpyYm87CisJdWludDY0X3QgZmJfbG9jYXRpb247CisJdWludDMyX3QgZmJfZm9ybWF0LCBmYl9waXRjaF9waXhlbHMsIHRpbGluZ19mbGFnczsKKwlpbnQgcjsKKworCS8qIG5vIGZiIGJvdW5kICovCisJaWYgKCFjcnRjLT5mYikgeworCQlEUk1fREVCVUcoIk5vIEZCIGJvdW5kXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmFkZW9uX2ZiID0gdG9fcmFkZW9uX2ZyYW1lYnVmZmVyKGNydGMtPmZiKTsKKworCS8qIFBpbiBmcmFtZWJ1ZmZlciAmIGdldCB0aWxsaW5nIGluZm9ybWF0aW9ucyAqLworCW9iaiA9IHJhZGVvbl9mYi0+b2JqOworCXJibyA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CisJciA9IHJhZGVvbl9ib19yZXNlcnZlKHJibywgZmFsc2UpOworCWlmICh1bmxpa2VseShyICE9IDApKQorCQlyZXR1cm4gcjsKKwlyID0gcmFkZW9uX2JvX3BpbihyYm8sIFJBREVPTl9HRU1fRE9NQUlOX1ZSQU0sICZmYl9sb2NhdGlvbik7CisJaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsKKwkJcmFkZW9uX2JvX3VucmVzZXJ2ZShyYm8pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmFkZW9uX2JvX2dldF90aWxpbmdfZmxhZ3MocmJvLCAmdGlsaW5nX2ZsYWdzLCBOVUxMKTsKKwlyYWRlb25fYm9fdW5yZXNlcnZlKHJibyk7CisKKwlzd2l0Y2ggKGNydGMtPmZiLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgODoKKwkJZmJfZm9ybWF0ID0gKEVWRVJHUkVFTl9HUlBIX0RFUFRIKEVWRVJHUkVFTl9HUlBIX0RFUFRIXzhCUFApIHwKKwkJCSAgICAgRVZFUkdSRUVOX0dSUEhfRk9STUFUKEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF9JTkRFWEVEKSk7CisJCWJyZWFrOworCWNhc2UgMTU6CisJCWZiX2Zvcm1hdCA9IChFVkVSR1JFRU5fR1JQSF9ERVBUSChFVkVSR1JFRU5fR1JQSF9ERVBUSF8xNkJQUCkgfAorCQkJICAgICBFVkVSR1JFRU5fR1JQSF9GT1JNQVQoRVZFUkdSRUVOX0dSUEhfRk9STUFUX0FSR0IxNTU1KSk7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCWZiX2Zvcm1hdCA9IChFVkVSR1JFRU5fR1JQSF9ERVBUSChFVkVSR1JFRU5fR1JQSF9ERVBUSF8xNkJQUCkgfAorCQkJICAgICBFVkVSR1JFRU5fR1JQSF9GT1JNQVQoRVZFUkdSRUVOX0dSUEhfRk9STUFUX0FSR0I1NjUpKTsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwljYXNlIDMyOgorCQlmYl9mb3JtYXQgPSAoRVZFUkdSRUVOX0dSUEhfREVQVEgoRVZFUkdSRUVOX0dSUEhfREVQVEhfMzJCUFApIHwKKwkJCSAgICAgRVZFUkdSRUVOX0dSUEhfRk9STUFUKEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF9BUkdCODg4OCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIHNjcmVlbiBkZXB0aCAlZFxuIiwKKwkJCSAgY3J0Yy0+ZmItPmJpdHNfcGVyX3BpeGVsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc3dpdGNoIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCkgeworCWNhc2UgMDoKKwkJV1JFRzMyKEFWSVZPX0QxVkdBX0NPTlRST0wsIDApOworCQlicmVhazsKKwljYXNlIDE6CisJCVdSRUczMihBVklWT19EMlZHQV9DT05UUk9MLCAwKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlXUkVHMzIoRVZFUkdSRUVOX0QzVkdBX0NPTlRST0wsIDApOworCQlicmVhazsKKwljYXNlIDM6CisJCVdSRUczMihFVkVSR1JFRU5fRDRWR0FfQ09OVFJPTCwgMCk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJV1JFRzMyKEVWRVJHUkVFTl9ENVZHQV9DT05UUk9MLCAwKTsKKwkJYnJlYWs7CisJY2FzZSA1OgorCQlXUkVHMzIoRVZFUkdSRUVOX0Q2VkdBX0NPTlRST0wsIDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKKwkgICAgICAgdXBwZXJfMzJfYml0cyhmYl9sb2NhdGlvbikpOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJICAgICAgIHVwcGVyXzMyX2JpdHMoZmJfbG9jYXRpb24pKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJICAgICAgICh1MzIpZmJfbG9jYXRpb24gJiBFVkVSR1JFRU5fR1JQSF9TVVJGQUNFX0FERFJFU1NfTUFTSyk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJICAgICAgICh1MzIpIGZiX2xvY2F0aW9uICYgRVZFUkdSRUVOX0dSUEhfU1VSRkFDRV9BRERSRVNTX01BU0spOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCBmYl9mb3JtYXQpOworCisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NVUkZBQ0VfT0ZGU0VUX1ggKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TVVJGQUNFX09GRlNFVF9ZICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAwKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfWF9TVEFSVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1lfU1RBUlQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9YX0VORCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgY3J0Yy0+ZmItPndpZHRoKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfWV9FTkQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIGNydGMtPmZiLT5oZWlnaHQpOworCisJZmJfcGl0Y2hfcGl4ZWxzID0gY3J0Yy0+ZmItPnBpdGNoIC8gKGNydGMtPmZiLT5iaXRzX3Blcl9waXhlbCAvIDgpOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9QSVRDSCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgZmJfcGl0Y2hfcGl4ZWxzKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfRU5BQkxFICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LCAxKTsKKworCVdSRUczMihFVkVSR1JFRU5fREVTS1RPUF9IRUlHSFQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJICAgICAgIGNydGMtPm1vZGUudmRpc3BsYXkpOworCXggJj0gfjM7CisJeSAmPSB+MTsKKwlXUkVHMzIoRVZFUkdSRUVOX1ZJRVdQT1JUX1NUQVJUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LAorCSAgICAgICAoeCA8PCAxNikgfCB5KTsKKwlXUkVHMzIoRVZFUkdSRUVOX1ZJRVdQT1JUX1NJWkUgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJICAgICAgIChjcnRjLT5tb2RlLmhkaXNwbGF5IDw8IDE2KSB8IGNydGMtPm1vZGUudmRpc3BsYXkpOworCisJaWYgKGNydGMtPm1vZGUuZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkKKwkJV1JFRzMyKEVWRVJHUkVFTl9EQVRBX0ZPUk1BVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKKwkJICAgICAgIEVWRVJHUkVFTl9JTlRFUkxFQVZFX0VOKTsKKwllbHNlCisJCVdSRUczMihFVkVSR1JFRU5fREFUQV9GT1JNQVQgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOworCisJaWYgKG9sZF9mYiAmJiBvbGRfZmIgIT0gY3J0Yy0+ZmIpIHsKKwkJcmFkZW9uX2ZiID0gdG9fcmFkZW9uX2ZyYW1lYnVmZmVyKG9sZF9mYik7CisJCXJibyA9IHJhZGVvbl9mYi0+b2JqLT5kcml2ZXJfcHJpdmF0ZTsKKwkJciA9IHJhZGVvbl9ib19yZXNlcnZlKHJibywgZmFsc2UpOworCQlpZiAodW5saWtlbHkociAhPSAwKSkKKwkJCXJldHVybiByOworCQlyYWRlb25fYm9fdW5waW4ocmJvKTsKKwkJcmFkZW9uX2JvX3VucmVzZXJ2ZShyYm8pOworCX0KKworCS8qIEJ5dGVzIHBlciBwaXhlbCBtYXkgaGF2ZSBjaGFuZ2VkICovCisJcmFkZW9uX2JhbmR3aWR0aF91cGRhdGUocmRldik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBhdml2b19jcnRjX3NldF9iYXNlKHN0cnVjdCBkcm1fY3J0YyAqY3J0YywgaW50IHgsIGludCB5LAogCQkJICAgICAgIHN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKm9sZF9mYikKIHsKQEAgLTc1NSw3ICsxMDAwLDkgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY3J0Yy0+ZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCWlmIChBU0lDX0lTX0RDRTQocmRldikpCisJCXJldHVybiBldmVyZ3JlZW5fY3J0Y19zZXRfYmFzZShjcnRjLCB4LCB5LCBvbGRfZmIpOworCWVsc2UgaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCiAJCXJldHVybiBhdml2b19jcnRjX3NldF9iYXNlKGNydGMsIHgsIHksIG9sZF9mYik7CiAJZWxzZQogCQlyZXR1cm4gcmFkZW9uX2NydGNfc2V0X2Jhc2UoY3J0YywgeCwgeSwgb2xkX2ZiKTsKQEAgLTc4NSw2ICsxMDMyLDQ2IEBACiAJfQogfQogCitzdGF0aWMgaW50IHJhZGVvbl9hdG9tX3BpY2tfcGxsKHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKK3sKKwlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNydGMtPmRldjsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9lbmNvZGVyICp0ZXN0X2VuY29kZXI7CisJc3RydWN0IGRybV9jcnRjICp0ZXN0X2NydGM7CisJdWludDMyX3QgcGxsX2luX3VzZSA9IDA7CisKKwlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKSB7CisJCS8qIGlmIGNydGMgaXMgZHJpdmluZyBEUCBhbmQgd2UgaGF2ZSBhbiBleHQgY2xvY2ssIHVzZSB0aGF0ICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnkodGVzdF9lbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKKwkJCWlmICh0ZXN0X2VuY29kZXItPmNydGMgJiYgKHRlc3RfZW5jb2Rlci0+Y3J0YyA9PSBjcnRjKSkgeworCQkJCWlmIChhdG9tYmlvc19nZXRfZW5jb2Rlcl9tb2RlKHRlc3RfZW5jb2RlcikgPT0gQVRPTV9FTkNPREVSX01PREVfRFApIHsKKwkJCQkJaWYgKHJkZXYtPmNsb2NrLmRwX2V4dGNsaykKKwkJCQkJCXJldHVybiBBVE9NX1BQTExfSU5WQUxJRDsKKwkJCQl9CisJCQl9CisJCX0KKworCQkvKiBvdGhlcndpc2UsIHBpY2sgb25lIG9mIHRoZSBwbGxzICovCisJCWxpc3RfZm9yX2VhY2hfZW50cnkodGVzdF9jcnRjLCAmZGV2LT5tb2RlX2NvbmZpZy5jcnRjX2xpc3QsIGhlYWQpIHsKKwkJCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX3Rlc3RfY3J0YzsKKworCQkJaWYgKGNydGMgPT0gdGVzdF9jcnRjKQorCQkJCWNvbnRpbnVlOworCisJCQlyYWRlb25fdGVzdF9jcnRjID0gdG9fcmFkZW9uX2NydGModGVzdF9jcnRjKTsKKwkJCWlmICgocmFkZW9uX3Rlc3RfY3J0Yy0+cGxsX2lkID49IEFUT01fUFBMTDEpICYmCisJCQkgICAgKHJhZGVvbl90ZXN0X2NydGMtPnBsbF9pZCA8PSBBVE9NX1BQTEwyKSkKKwkJCQlwbGxfaW5fdXNlIHw9ICgxIDw8IHJhZGVvbl90ZXN0X2NydGMtPnBsbF9pZCk7CisJCX0KKwkJaWYgKCEocGxsX2luX3VzZSAmIDEpKQorCQkJcmV0dXJuIEFUT01fUFBMTDE7CisJCXJldHVybiBBVE9NX1BQTEwyOworCX0gZWxzZQorCQlyZXR1cm4gcmFkZW9uX2NydGMtPmNydGNfaWQ7CisKK30KKwogaW50IGF0b21iaW9zX2NydGNfbW9kZV9zZXQoc3RydWN0IGRybV9jcnRjICpjcnRjLAogCQkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSwKQEAgLTc5NiwxOSArMTA4MywyNyBAQAogCiAJLyogVE9ETyBjb2xvciB0aWxpbmcgKi8KIAorCS8qIHBpY2sgcGxsICovCisJcmFkZW9uX2NydGMtPnBsbF9pZCA9IHJhZGVvbl9hdG9tX3BpY2tfcGxsKGNydGMpOworCiAJYXRvbWJpb3Nfc2V0X3NzKGNydGMsIDApOworCS8qIGFsd2F5cyBzZXQgRENQTEwgKi8KKwlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKQorCQlhdG9tYmlvc19jcnRjX3NldF9kY3BsbChjcnRjKTsKIAlhdG9tYmlvc19jcnRjX3NldF9wbGwoY3J0YywgYWRqdXN0ZWRfbW9kZSk7CiAJYXRvbWJpb3Nfc2V0X3NzKGNydGMsIDEpOwotCWF0b21iaW9zX2NydGNfc2V0X3RpbWluZyhjcnRjLCBhZGp1c3RlZF9tb2RlKTsKIAotCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQotCQlhdG9tYmlvc19jcnRjX3NldF9iYXNlKGNydGMsIHgsIHksIG9sZF9mYik7CisJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkKKwkJYXRvbWJpb3Nfc2V0X2NydGNfZHRkX3RpbWluZyhjcnRjLCBhZGp1c3RlZF9tb2RlKTsKKwllbHNlIGlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCQlhdG9tYmlvc19jcnRjX3NldF90aW1pbmcoY3J0YywgYWRqdXN0ZWRfbW9kZSk7CiAJZWxzZSB7CisJCWF0b21iaW9zX2NydGNfc2V0X3RpbWluZyhjcnRjLCBhZGp1c3RlZF9tb2RlKTsKIAkJaWYgKHJhZGVvbl9jcnRjLT5jcnRjX2lkID09IDApCiAJCQlhdG9tYmlvc19zZXRfY3J0Y19kdGRfdGltaW5nKGNydGMsIGFkanVzdGVkX21vZGUpOwotCQlhdG9tYmlvc19jcnRjX3NldF9iYXNlKGNydGMsIHgsIHksIG9sZF9mYik7CiAJCXJhZGVvbl9sZWdhY3lfYXRvbV9maXh1cChjcnRjKTsKIAl9CisJYXRvbWJpb3NfY3J0Y19zZXRfYmFzZShjcnRjLCB4LCB5LCBvbGRfZmIpOwogCWF0b21iaW9zX292ZXJzY2FuX3NldHVwKGNydGMsIG1vZGUsIGFkanVzdGVkX21vZGUpOwogCWF0b21iaW9zX3NjYWxlcl9zZXR1cChjcnRjKTsKIAlyZXR1cm4gMDsKQEAgLTgyNSwxNCArMTEyMCwxNCBAQAogCiBzdGF0aWMgdm9pZCBhdG9tYmlvc19jcnRjX3ByZXBhcmUoc3RydWN0IGRybV9jcnRjICpjcnRjKQogewotCWF0b21iaW9zX2xvY2tfY3J0YyhjcnRjLCAxKTsKKwlhdG9tYmlvc19sb2NrX2NydGMoY3J0YywgQVRPTV9FTkFCTEUpOwogCWF0b21iaW9zX2NydGNfZHBtcyhjcnRjLCBEUk1fTU9ERV9EUE1TX09GRik7CiB9CiAKIHN0YXRpYyB2b2lkIGF0b21iaW9zX2NydGNfY29tbWl0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKIAlhdG9tYmlvc19jcnRjX2RwbXMoY3J0YywgRFJNX01PREVfRFBNU19PTik7Ci0JYXRvbWJpb3NfbG9ja19jcnRjKGNydGMsIDApOworCWF0b21iaW9zX2xvY2tfY3J0YyhjcnRjLCBBVE9NX0RJU0FCTEUpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9jcnRjX2hlbHBlcl9mdW5jcyBhdG9tYmlvc19oZWxwZXJfZnVuY3MgPSB7CkBAIC04NDgsOCArMTE0MywzNyBAQAogdm9pZCByYWRlb25fYXRvbWJpb3NfaW5pdF9jcnRjKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkgICAgICAgc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YykKIHsKLQlpZiAocmFkZW9uX2NydGMtPmNydGNfaWQgPT0gMSkKLQkJcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0ID0KLQkJICAgIEFWSVZPX0QyQ1JUQ19IX1RPVEFMIC0gQVZJVk9fRDFDUlRDX0hfVE9UQUw7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkgeworCQlzd2l0Y2ggKHJhZGVvbl9jcnRjLT5jcnRjX2lkKSB7CisJCWNhc2UgMDoKKwkJZGVmYXVsdDoKKwkJCXJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCA9IEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQ7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0ID0gRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVDsKKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlyYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQgPSBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VUOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCXJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCA9IEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQ7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0ID0gRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVDsKKwkJCWJyZWFrOworCQljYXNlIDU6CisJCQlyYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQgPSBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VUOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlpZiAocmFkZW9uX2NydGMtPmNydGNfaWQgPT0gMSkKKwkJCXJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCA9CisJCQkJQVZJVk9fRDJDUlRDX0hfVE9UQUwgLSBBVklWT19EMUNSVENfSF9UT1RBTDsKKwkJZWxzZQorCQkJcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0ID0gMDsKKwl9CisJcmFkZW9uX2NydGMtPnBsbF9pZCA9IC0xOwogCWRybV9jcnRjX2hlbHBlcl9hZGQoJnJhZGVvbl9jcnRjLT5iYXNlLCAmYXRvbWJpb3NfaGVscGVyX2Z1bmNzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXRvbWJpb3NfZHAuYwppbmRleCA5OTkxNWE2Li44YTEzM2JkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F0b21iaW9zX2RwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdG9tYmlvc19kcC5jCkBAIC0zMjEsNiArMzIxLDEwIEBACiAJCXRyYWluX3NldFtsYW5lXSA9IHYgfCBwOwogfQogCit1bmlvbiBhdXhfY2hhbm5lbF90cmFuc2FjdGlvbiB7CisJUFJPQ0VTU19BVVhfQ0hBTk5FTF9UUkFOU0FDVElPTl9QU19BTExPQ0FUSU9OIHYxOworCVBST0NFU1NfQVVYX0NIQU5ORUxfVFJBTlNBQ1RJT05fUEFSQU1FVEVSU19WMiB2MjsKK307CiAKIC8qIHJhZGVvbiBhdXggY2hhbiBmdW5jdGlvbnMgKi8KIGJvb2wgcmFkZW9uX3Byb2Nlc3NfYXV4X2NoKHN0cnVjdCByYWRlb25faTJjX2NoYW4gKmNoYW4sIHU4ICpyZXFfYnl0ZXMsCkBAIC0zMjksNyArMzMzLDcgQEAKIHsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2hhbi0+ZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlQUk9DRVNTX0FVWF9DSEFOTkVMX1RSQU5TQUNUSU9OX1BTX0FMTE9DQVRJT04gYXJnczsKKwl1bmlvbiBhdXhfY2hhbm5lbF90cmFuc2FjdGlvbiBhcmdzOwogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFByb2Nlc3NBdXhDaGFubmVsVHJhbnNhY3Rpb24pOwogCXVuc2lnbmVkIGNoYXIgKmJhc2U7CiAJaW50IHJldHJ5X2NvdW50ID0gMDsKQEAgLTM0MSwzMSArMzQ1LDMzIEBACiByZXRyeToKIAltZW1jcHkoYmFzZSwgcmVxX2J5dGVzLCBudW1fYnl0ZXMpOwogCi0JYXJncy5scEF1eFJlcXVlc3QgPSAwOwotCWFyZ3MubHBEYXRhT3V0ID0gMTY7Ci0JYXJncy51Y0RhdGFPdXRMZW4gPSAwOwotCWFyZ3MudWNDaGFubmVsSUQgPSBjaGFuLT5yZWMuaTJjX2lkOwotCWFyZ3MudWNEZWxheSA9IGRlbGF5IC8gMTA7CisJYXJncy52MS5scEF1eFJlcXVlc3QgPSAwOworCWFyZ3MudjEubHBEYXRhT3V0ID0gMTY7CisJYXJncy52MS51Y0RhdGFPdXRMZW4gPSAwOworCWFyZ3MudjEudWNDaGFubmVsSUQgPSBjaGFuLT5yZWMuaTJjX2lkOworCWFyZ3MudjEudWNEZWxheSA9IGRlbGF5IC8gMTA7CisJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkKKwkJYXJncy52Mi51Y0hQRF9JRCA9IGNoYW4tPnJlYy5ocGRfaWQ7CiAKIAlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKIAotCWlmIChhcmdzLnVjUmVwbHlTdGF0dXMgJiYgIWFyZ3MudWNEYXRhT3V0TGVuKSB7Ci0JCWlmIChhcmdzLnVjUmVwbHlTdGF0dXMgPT0gMHgyMCAmJiByZXRyeV9jb3VudCsrIDwgMTApCisJaWYgKGFyZ3MudjEudWNSZXBseVN0YXR1cyAmJiAhYXJncy52MS51Y0RhdGFPdXRMZW4pIHsKKwkJaWYgKGFyZ3MudjEudWNSZXBseVN0YXR1cyA9PSAweDIwICYmIHJldHJ5X2NvdW50KysgPCAxMCkKIAkJCWdvdG8gcmV0cnk7CiAJCURSTV9ERUJVRygiZmFpbGVkIHRvIGdldCBhdXhjaCAlMDJ4JTAyeCAlMDJ4ICUwMnggMHglMDJ4ICUwMnggYWZ0ZXIgJWQgcmV0cmllc1xuIiwKIAkJCSAgcmVxX2J5dGVzWzFdLCByZXFfYnl0ZXNbMF0sIHJlcV9ieXRlc1syXSwgcmVxX2J5dGVzWzNdLAotCQkJICBjaGFuLT5yZWMuaTJjX2lkLCBhcmdzLnVjUmVwbHlTdGF0dXMsIHJldHJ5X2NvdW50KTsKKwkJCSAgY2hhbi0+cmVjLmkyY19pZCwgYXJncy52MS51Y1JlcGx5U3RhdHVzLCByZXRyeV9jb3VudCk7CiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlpZiAoYXJncy51Y0RhdGFPdXRMZW4gJiYgcmVhZF9ieXRlICYmIHJlYWRfYnVmX2xlbikgewotCQlpZiAocmVhZF9idWZfbGVuIDwgYXJncy51Y0RhdGFPdXRMZW4pIHsKKwlpZiAoYXJncy52MS51Y0RhdGFPdXRMZW4gJiYgcmVhZF9ieXRlICYmIHJlYWRfYnVmX2xlbikgeworCQlpZiAocmVhZF9idWZfbGVuIDwgYXJncy52MS51Y0RhdGFPdXRMZW4pIHsKIAkJCURSTV9FUlJPUigiQnVmZmVyIHRvIHNtYWxsIGZvciByZXR1cm4gYW5zd2VyICVkICVkXG4iLAotCQkJCSAgcmVhZF9idWZfbGVuLCBhcmdzLnVjRGF0YU91dExlbik7CisJCQkJICByZWFkX2J1Zl9sZW4sIGFyZ3MudjEudWNEYXRhT3V0TGVuKTsKIAkJCXJldHVybiBmYWxzZTsKIAkJfQogCQl7Ci0JCQlpbnQgbGVuID0gbWluKHJlYWRfYnVmX2xlbiwgYXJncy51Y0RhdGFPdXRMZW4pOworCQkJaW50IGxlbiA9IG1pbihyZWFkX2J1Zl9sZW4sIGFyZ3MudjEudWNEYXRhT3V0TGVuKTsKIAkJCW1lbWNweShyZWFkX2J5dGUsIGJhc2UgKyAxNiwgbGVuKTsKIAkJfQogCX0KQEAgLTYyNiwxMiArNjMyLDE5IEBACiAJZHBfc2V0X2xpbmtfYndfbGFuZXMocmFkZW9uX2Nvbm5lY3RvciwgbGlua19jb25maWd1cmF0aW9uKTsKIAkvKiBkaXNhYmxlIGRvd25zcHJlYWQgb24gdGhlIHNpbmsgKi8KIAlkcF9zZXRfZG93bnNwcmVhZChyYWRlb25fY29ubmVjdG9yLCAwKTsKLQkvKiBzdGFydCB0cmFpbmluZyBvbiB0aGUgc291cmNlICovCi0JcmFkZW9uX2RwX2VuY29kZXJfc2VydmljZShyZGV2LCBBVE9NX0RQX0FDVElPTl9UUkFJTklOR19TVEFSVCwKLQkJCQkgIGRpZ19jb25uZWN0b3ItPmRwX2Nsb2NrLCBlbmNfaWQsIDApOwotCS8qIHNldCB0cmFpbmluZyBwYXR0ZXJuIDEgb24gdGhlIHNvdXJjZSAqLwotCXJhZGVvbl9kcF9lbmNvZGVyX3NlcnZpY2UocmRldiwgQVRPTV9EUF9BQ1RJT05fVFJBSU5JTkdfUEFUVEVSTl9TRUwsCi0JCQkJICBkaWdfY29ubmVjdG9yLT5kcF9jbG9jaywgZW5jX2lkLCAwKTsKKwlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKSB7CisJCS8qIHN0YXJ0IHRyYWluaW5nIG9uIHRoZSBzb3VyY2UgKi8KKwkJYXRvbWJpb3NfZGlnX2VuY29kZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9FTkNPREVSX0NNRF9EUF9MSU5LX1RSQUlOSU5HX1NUQVJUKTsKKwkJLyogc2V0IHRyYWluaW5nIHBhdHRlcm4gMSBvbiB0aGUgc291cmNlICovCisJCWF0b21iaW9zX2RpZ19lbmNvZGVyX3NldHVwKGVuY29kZXIsIEFUT01fRU5DT0RFUl9DTURfRFBfTElOS19UUkFJTklOR19QQVRURVJOMSk7CisJfSBlbHNlIHsKKwkJLyogc3RhcnQgdHJhaW5pbmcgb24gdGhlIHNvdXJjZSAqLworCQlyYWRlb25fZHBfZW5jb2Rlcl9zZXJ2aWNlKHJkZXYsIEFUT01fRFBfQUNUSU9OX1RSQUlOSU5HX1NUQVJULAorCQkJCQkgIGRpZ19jb25uZWN0b3ItPmRwX2Nsb2NrLCBlbmNfaWQsIDApOworCQkvKiBzZXQgdHJhaW5pbmcgcGF0dGVybiAxIG9uIHRoZSBzb3VyY2UgKi8KKwkJcmFkZW9uX2RwX2VuY29kZXJfc2VydmljZShyZGV2LCBBVE9NX0RQX0FDVElPTl9UUkFJTklOR19QQVRURVJOX1NFTCwKKwkJCQkJICBkaWdfY29ubmVjdG9yLT5kcF9jbG9jaywgZW5jX2lkLCAwKTsKKwl9CiAKIAkvKiBzZXQgaW5pdGlhbCB2cy9lbXBoICovCiAJbWVtc2V0KHRyYWluX3NldCwgMCwgNCk7CkBAIC02OTEsOCArNzA0LDExIEBACiAJLyogc2V0IHRyYWluaW5nIHBhdHRlcm4gMiBvbiB0aGUgc2luayAqLwogCWRwX3NldF90cmFpbmluZyhyYWRlb25fY29ubmVjdG9yLCBEUF9UUkFJTklOR19QQVRURVJOXzIpOwogCS8qIHNldCB0cmFpbmluZyBwYXR0ZXJuIDIgb24gdGhlIHNvdXJjZSAqLwotCXJhZGVvbl9kcF9lbmNvZGVyX3NlcnZpY2UocmRldiwgQVRPTV9EUF9BQ1RJT05fVFJBSU5JTkdfUEFUVEVSTl9TRUwsCi0JCQkJICBkaWdfY29ubmVjdG9yLT5kcF9jbG9jaywgZW5jX2lkLCAxKTsKKwlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKQorCQlhdG9tYmlvc19kaWdfZW5jb2Rlcl9zZXR1cChlbmNvZGVyLCBBVE9NX0VOQ09ERVJfQ01EX0RQX0xJTktfVFJBSU5JTkdfUEFUVEVSTjIpOworCWVsc2UKKwkJcmFkZW9uX2RwX2VuY29kZXJfc2VydmljZShyZGV2LCBBVE9NX0RQX0FDVElPTl9UUkFJTklOR19QQVRURVJOX1NFTCwKKwkJCQkJICBkaWdfY29ubmVjdG9yLT5kcF9jbG9jaywgZW5jX2lkLCAxKTsKIAogCS8qIGNoYW5uZWwgZXF1YWxpemF0aW9uIGxvb3AgKi8KIAl0cmllcyA9IDA7CkBAIC03MjksNyArNzQ1LDExIEBACiAJCQkgID4+IERQX1RSQUlOX1BSRV9FTVBIQVNJU19TSElGVCk7CiAKIAkvKiBkaXNhYmxlIHRoZSB0cmFpbmluZyBwYXR0ZXJuIG9uIHRoZSBzaW5rICovCi0JZHBfc2V0X3RyYWluaW5nKHJhZGVvbl9jb25uZWN0b3IsIERQX1RSQUlOSU5HX1BBVFRFUk5fRElTQUJMRSk7CisJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkKKwkJYXRvbWJpb3NfZGlnX2VuY29kZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9FTkNPREVSX0NNRF9EUF9MSU5LX1RSQUlOSU5HX0NPTVBMRVRFKTsKKwllbHNlCisJCXJhZGVvbl9kcF9lbmNvZGVyX3NlcnZpY2UocmRldiwgQVRPTV9EUF9BQ1RJT05fVFJBSU5JTkdfQ09NUExFVEUsCisJCQkJCSAgZGlnX2Nvbm5lY3Rvci0+ZHBfY2xvY2ssIGVuY19pZCwgMCk7CiAKIAlyYWRlb25fZHBfZW5jb2Rlcl9zZXJ2aWNlKHJkZXYsIEFUT01fRFBfQUNUSU9OX1RSQUlOSU5HX0NPTVBMRVRFLAogCQkJCSAgZGlnX2Nvbm5lY3Rvci0+ZHBfY2xvY2ssIGVuY19pZCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F2aXZvZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9hdml2b2QuaAppbmRleCBkNGU2ZTZlLi4zYzM5MWU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2F2aXZvZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vYXZpdm9kLmgKQEAgLTMwLDExICszMCwxMyBAQAogCiAjZGVmaW5lCUQxQ1JUQ19DT05UUk9MCQkJCQkweDYwODAKICNkZWZpbmUJCUNSVENfRU4JCQkJCQkoMSA8PCAwKQorI2RlZmluZQlEMUNSVENfU1RBVFVTCQkJCQkweDYwOWMKICNkZWZpbmUJRDFDUlRDX1VQREFURV9MT0NLCQkJCTB4NjBFOAogI2RlZmluZQlEMUdSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MJCQkweDYxMTAKICNkZWZpbmUJRDFHUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MJCTB4NjExOAogCiAjZGVmaW5lCUQyQ1JUQ19DT05UUk9MCQkJCQkweDY4ODAKKyNkZWZpbmUJRDJDUlRDX1NUQVRVUwkJCQkJMHg2ODljCiAjZGVmaW5lCUQyQ1JUQ19VUERBVEVfTE9DSwkJCQkweDY4RTgKICNkZWZpbmUJRDJHUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTCQkJMHg2OTEwCiAjZGVmaW5lCUQyR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTCQkweDY5MTgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMmU3YWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL2V2ZXJncmVlbi5jCkBAIC0wLDAgKzEsNzY3IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEFsZXggRGV1Y2hlcgorICovCisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAicmFkZW9uLmgiCisjaW5jbHVkZSAicmFkZW9uX2RybS5oIgorI2luY2x1ZGUgInJ2NzcwZC5oIgorI2luY2x1ZGUgImF0b20uaCIKKyNpbmNsdWRlICJhdml2b2QuaCIKKyNpbmNsdWRlICJldmVyZ3JlZW5fcmVnLmgiCisKK3N0YXRpYyB2b2lkIGV2ZXJncmVlbl9ncHVfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIGV2ZXJncmVlbl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKworYm9vbCBldmVyZ3JlZW5faHBkX3NlbnNlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBlbnVtIHJhZGVvbl9ocGRfaWQgaHBkKQoreworCWJvb2wgY29ubmVjdGVkID0gZmFsc2U7CisJLyogWFhYICovCisJcmV0dXJuIGNvbm5lY3RlZDsKK30KKwordm9pZCBldmVyZ3JlZW5faHBkX3NldF9wb2xhcml0eShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJCQllbnVtIHJhZGVvbl9ocGRfaWQgaHBkKQoreworCS8qIFhYWCAqLworfQorCit2b2lkIGV2ZXJncmVlbl9ocGRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBYWFggKi8KK30KKworCit2b2lkIGV2ZXJncmVlbl9iYW5kd2lkdGhfdXBkYXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIFhYWCAqLworfQorCit2b2lkIGV2ZXJncmVlbl9ocGRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBYWFggKi8KK30KKworc3RhdGljIGludCBldmVyZ3JlZW5fbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1bnNpZ25lZCBpOworCXUzMiB0bXA7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmRldi0+dXNlY190aW1lb3V0OyBpKyspIHsKKwkJLyogcmVhZCBNQ19TVEFUVVMgKi8KKwkJdG1wID0gUlJFRzMyKFNSQk1fU1RBVFVTKSAmIDB4MUYwMDsKKwkJaWYgKCF0bXApCisJCQlyZXR1cm4gMDsKKwkJdWRlbGF5KDEpOworCX0KKwlyZXR1cm4gLTE7Cit9CisKKy8qCisgKiBHQVJUCisgKi8KK2ludCBldmVyZ3JlZW5fcGNpZV9nYXJ0X2VuYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgdG1wOworCWludCByLCBpOworCisJaWYgKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqID09IE5VTEwpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICJObyBWUkFNIG9iamVjdCBmb3IgUENJRSBHQVJULlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyID0gcmFkZW9uX2dhcnRfdGFibGVfdnJhbV9waW4ocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXJhZGVvbl9nYXJ0X3Jlc3RvcmUocmRldik7CisJLyogU2V0dXAgTDIgY2FjaGUgKi8KKwlXUkVHMzIoVk1fTDJfQ05UTCwgRU5BQkxFX0wyX0NBQ0hFIHwgRU5BQkxFX0wyX0ZSQUdNRU5UX1BST0NFU1NJTkcgfAorCQkJCUVOQUJMRV9MMl9QVEVfQ0FDSEVfTFJVX1VQREFURV9CWV9XUklURSB8CisJCQkJRUZGRUNUSVZFX0wyX1FVRVVFX1NJWkUoNykpOworCVdSRUczMihWTV9MMl9DTlRMMiwgMCk7CisJV1JFRzMyKFZNX0wyX0NOVEwzLCBCQU5LX1NFTEVDVCgwKSB8IENBQ0hFX1VQREFURV9NT0RFKDIpKTsKKwkvKiBTZXR1cCBUTEIgY29udHJvbCAqLworCXRtcCA9IEVOQUJMRV9MMV9UTEIgfCBFTkFCTEVfTDFfRlJBR01FTlRfUFJPQ0VTU0lORyB8CisJCVNZU1RFTV9BQ0NFU1NfTU9ERV9OT1RfSU5fU1lTIHwKKwkJU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTU19QQVNTX1RIUlUgfAorCQlFRkZFQ1RJVkVfTDFfVExCX1NJWkUoNSkgfCBFRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSg1KTsKKwlXUkVHMzIoTUNfVk1fTURfTDFfVExCMF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NRF9MMV9UTEIxX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjJfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTUJfTDFfVExCMF9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIxX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjJfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTUJfTDFfVExCM19DTlRMLCB0bXApOworCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFIsIHJkZXYtPm1jLmd0dF9zdGFydCA+PiAxMik7CisJV1JFRzMyKFZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfRU5EX0FERFIsIHJkZXYtPm1jLmd0dF9lbmQgPj4gMTIpOworCVdSRUczMihWTV9DT05URVhUMF9QQUdFX1RBQkxFX0JBU0VfQUREUiwgcmRldi0+Z2FydC50YWJsZV9hZGRyID4+IDEyKTsKKwlXUkVHMzIoVk1fQ09OVEVYVDBfQ05UTCwgRU5BQkxFX0NPTlRFWFQgfCBQQUdFX1RBQkxFX0RFUFRIKDApIHwKKwkJCQlSQU5HRV9QUk9URUNUSU9OX0ZBVUxUX0VOQUJMRV9ERUZBVUxUKTsKKwlXUkVHMzIoVk1fQ09OVEVYVDBfUFJPVEVDVElPTl9GQVVMVF9ERUZBVUxUX0FERFIsCisJCQkodTMyKShyZGV2LT5kdW1teV9wYWdlLmFkZHIgPj4gMTIpKTsKKwlmb3IgKGkgPSAxOyBpIDwgNzsgaSsrKQorCQlXUkVHMzIoVk1fQ09OVEVYVDBfQ05UTCArIChpICogNCksIDApOworCisJcjYwMF9wY2llX2dhcnRfdGxiX2ZsdXNoKHJkZXYpOworCXJkZXYtPmdhcnQucmVhZHkgPSB0cnVlOworCXJldHVybiAwOworfQorCit2b2lkIGV2ZXJncmVlbl9wY2llX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgdG1wOworCWludCBpLCByOworCisJLyogRGlzYWJsZSBhbGwgdGFibGVzICovCisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykKKwkJV1JFRzMyKFZNX0NPTlRFWFQwX0NOVEwgKyAoaSAqIDQpLCAwKTsKKworCS8qIFNldHVwIEwyIGNhY2hlICovCisJV1JFRzMyKFZNX0wyX0NOVEwsIEVOQUJMRV9MMl9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKKwkJCQlFRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg3KSk7CisJV1JFRzMyKFZNX0wyX0NOVEwyLCAwKTsKKwlXUkVHMzIoVk1fTDJfQ05UTDMsIEJBTktfU0VMRUNUKDApIHwgQ0FDSEVfVVBEQVRFX01PREUoMikpOworCS8qIFNldHVwIFRMQiBjb250cm9sICovCisJdG1wID0gRUZGRUNUSVZFX0wxX1RMQl9TSVpFKDUpIHwgRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUoNSk7CisJV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjBfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTURfTDFfVExCMV9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NRF9MMV9UTEIyX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjBfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTUJfTDFfVExCMV9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIyX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjNfQ05UTCwgdG1wKTsKKwlpZiAocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmopIHsKKwkJciA9IHJhZGVvbl9ib19yZXNlcnZlKHJkZXYtPmdhcnQudGFibGUudnJhbS5yb2JqLCBmYWxzZSk7CisJCWlmIChsaWtlbHkociA9PSAwKSkgeworCQkJcmFkZW9uX2JvX2t1bm1hcChyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaik7CisJCQlyYWRlb25fYm9fdW5waW4ocmRldi0+Z2FydC50YWJsZS52cmFtLnJvYmopOworCQkJcmFkZW9uX2JvX3VucmVzZXJ2ZShyZGV2LT5nYXJ0LnRhYmxlLnZyYW0ucm9iaik7CisJCX0KKwl9Cit9CisKK3ZvaWQgZXZlcmdyZWVuX3BjaWVfZ2FydF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWV2ZXJncmVlbl9wY2llX2dhcnRfZGlzYWJsZShyZGV2KTsKKwlyYWRlb25fZ2FydF90YWJsZV92cmFtX2ZyZWUocmRldik7CisJcmFkZW9uX2dhcnRfZmluaShyZGV2KTsKK30KKworCit2b2lkIGV2ZXJncmVlbl9hZ3BfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXUzMiB0bXA7CisJaW50IGk7CisKKwkvKiBTZXR1cCBMMiBjYWNoZSAqLworCVdSRUczMihWTV9MMl9DTlRMLCBFTkFCTEVfTDJfQ0FDSEUgfCBFTkFCTEVfTDJfRlJBR01FTlRfUFJPQ0VTU0lORyB8CisJCQkJRU5BQkxFX0wyX1BURV9DQUNIRV9MUlVfVVBEQVRFX0JZX1dSSVRFIHwKKwkJCQlFRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg3KSk7CisJV1JFRzMyKFZNX0wyX0NOVEwyLCAwKTsKKwlXUkVHMzIoVk1fTDJfQ05UTDMsIEJBTktfU0VMRUNUKDApIHwgQ0FDSEVfVVBEQVRFX01PREUoMikpOworCS8qIFNldHVwIFRMQiBjb250cm9sICovCisJdG1wID0gRU5BQkxFX0wxX1RMQiB8IEVOQUJMRV9MMV9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKKwkJU1lTVEVNX0FDQ0VTU19NT0RFX05PVF9JTl9TWVMgfAorCQlTWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX1BBU1NfVEhSVSB8CisJCUVGRkVDVElWRV9MMV9UTEJfU0laRSg1KSB8IEVGRkVDVElWRV9MMV9RVUVVRV9TSVpFKDUpOworCVdSRUczMihNQ19WTV9NRF9MMV9UTEIwX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01EX0wxX1RMQjFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTURfTDFfVExCMl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIwX0NOVEwsIHRtcCk7CisJV1JFRzMyKE1DX1ZNX01CX0wxX1RMQjFfQ05UTCwgdG1wKTsKKwlXUkVHMzIoTUNfVk1fTUJfTDFfVExCMl9DTlRMLCB0bXApOworCVdSRUczMihNQ19WTV9NQl9MMV9UTEIzX0NOVEwsIHRtcCk7CisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykKKwkJV1JFRzMyKFZNX0NPTlRFWFQwX0NOVEwgKyAoaSAqIDQpLCAwKTsKK30KKworc3RhdGljIHZvaWQgZXZlcmdyZWVuX21jX3N0b3Aoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCBldmVyZ3JlZW5fbWNfc2F2ZSAqc2F2ZSkKK3sKKwlzYXZlLT52Z2FfY29udHJvbFswXSA9IFJSRUczMihEMVZHQV9DT05UUk9MKTsKKwlzYXZlLT52Z2FfY29udHJvbFsxXSA9IFJSRUczMihEMlZHQV9DT05UUk9MKTsKKwlzYXZlLT52Z2FfY29udHJvbFsyXSA9IFJSRUczMihFVkVSR1JFRU5fRDNWR0FfQ09OVFJPTCk7CisJc2F2ZS0+dmdhX2NvbnRyb2xbM10gPSBSUkVHMzIoRVZFUkdSRUVOX0Q0VkdBX0NPTlRST0wpOworCXNhdmUtPnZnYV9jb250cm9sWzRdID0gUlJFRzMyKEVWRVJHUkVFTl9ENVZHQV9DT05UUk9MKTsKKwlzYXZlLT52Z2FfY29udHJvbFs1XSA9IFJSRUczMihFVkVSR1JFRU5fRDZWR0FfQ09OVFJPTCk7CisJc2F2ZS0+dmdhX3JlbmRlcl9jb250cm9sID0gUlJFRzMyKFZHQV9SRU5ERVJfQ09OVFJPTCk7CisJc2F2ZS0+dmdhX2hkcF9jb250cm9sID0gUlJFRzMyKFZHQV9IRFBfQ09OVFJPTCk7CisJc2F2ZS0+Y3J0Y19jb250cm9sWzBdID0gUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzBfUkVHSVNURVJfT0ZGU0VUKTsKKwlzYXZlLT5jcnRjX2NvbnRyb2xbMV0gPSBSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZTRVQpOworCXNhdmUtPmNydGNfY29udHJvbFsyXSA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCk7CisJc2F2ZS0+Y3J0Y19jb250cm9sWzNdID0gUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VUKTsKKwlzYXZlLT5jcnRjX2NvbnRyb2xbNF0gPSBSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQpOworCXNhdmUtPmNydGNfY29udHJvbFs1XSA9IFJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCk7CisKKwkvKiBTdG9wIGFsbCB2aWRlbyAqLworCVdSRUczMihWR0FfUkVOREVSX0NPTlRST0wsIDApOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQsIDEpOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZTRVQsIDEpOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsIDEpOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQsIDEpOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQsIDEpOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQsIDEpOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VULCAwKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsIDApOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULCAwKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQsIDApOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQsIDApOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZTRVQsIDApOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsIDApOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQsIDApOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQsIDApOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQsIDApOworCisJV1JFRzMyKEQxVkdBX0NPTlRST0wsIDApOworCVdSRUczMihEMlZHQV9DT05UUk9MLCAwKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0QzVkdBX0NPTlRST0wsIDApOworCVdSRUczMihFVkVSR1JFRU5fRDRWR0FfQ09OVFJPTCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9ENVZHQV9DT05UUk9MLCAwKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0Q2VkdBX0NPTlRST0wsIDApOworfQorCitzdGF0aWMgdm9pZCBldmVyZ3JlZW5fbWNfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgZXZlcmdyZWVuX21jX3NhdmUgKnNhdmUpCit7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggKyBFVkVSR1JFRU5fQ1JUQzBfUkVHSVNURVJfT0ZGU0VULAorCSAgICAgICB1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLnZyYW1fc3RhcnQpKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCwKKwkgICAgICAgdXBwZXJfMzJfYml0cyhyZGV2LT5tYy52cmFtX3N0YXJ0KSk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCwKKwkgICAgICAgKHUzMilyZGV2LT5tYy52cmFtX3N0YXJ0KTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQsCisJICAgICAgICh1MzIpcmRldi0+bWMudnJhbV9zdGFydCk7CisKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCArIEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZTRVQsCisJICAgICAgIHVwcGVyXzMyX2JpdHMocmRldi0+bWMudnJhbV9zdGFydCkpOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VULAorCSAgICAgICB1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLnZyYW1fc3RhcnQpKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VULAorCSAgICAgICAodTMyKXJkZXYtPm1jLnZyYW1fc3RhcnQpOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICsgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCwKKwkgICAgICAgKHUzMilyZGV2LT5tYy52cmFtX3N0YXJ0KTsKKworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCwKKwkgICAgICAgdXBwZXJfMzJfYml0cyhyZGV2LT5tYy52cmFtX3N0YXJ0KSk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsCisJICAgICAgIHVwcGVyXzMyX2JpdHMocmRldi0+bWMudnJhbV9zdGFydCkpOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsCisJICAgICAgICh1MzIpcmRldi0+bWMudnJhbV9zdGFydCk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgKyBFVkVSR1JFRU5fQ1JUQzJfUkVHSVNURVJfT0ZGU0VULAorCSAgICAgICAodTMyKXJkZXYtPm1jLnZyYW1fc3RhcnQpOworCisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggKyBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VULAorCSAgICAgICB1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLnZyYW1fc3RhcnQpKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwKKwkgICAgICAgdXBwZXJfMzJfYml0cyhyZGV2LT5tYy52cmFtX3N0YXJ0KSk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1BSSU1BUllfU1VSRkFDRV9BRERSRVNTICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwKKwkgICAgICAgKHUzMilyZGV2LT5tYy52cmFtX3N0YXJ0KTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTUyArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQsCisJICAgICAgICh1MzIpcmRldi0+bWMudnJhbV9zdGFydCk7CisKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQsCisJICAgICAgIHVwcGVyXzMyX2JpdHMocmRldi0+bWMudnJhbV9zdGFydCkpOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTX0hJR0ggKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULAorCSAgICAgICB1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLnZyYW1fc3RhcnQpKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0dSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VULAorCSAgICAgICAodTMyKXJkZXYtPm1jLnZyYW1fc3RhcnQpOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9TRUNPTkRBUllfU1VSRkFDRV9BRERSRVNTICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwKKwkgICAgICAgKHUzMilyZGV2LT5tYy52cmFtX3N0YXJ0KTsKKworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwKKwkgICAgICAgdXBwZXJfMzJfYml0cyhyZGV2LT5tYy52cmFtX3N0YXJ0KSk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1NfSElHSCArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQsCisJICAgICAgIHVwcGVyXzMyX2JpdHMocmRldi0+bWMudnJhbV9zdGFydCkpOworCVdSRUczMihFVkVSR1JFRU5fR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTUyArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQsCisJICAgICAgICh1MzIpcmRldi0+bWMudnJhbV9zdGFydCk7CisJV1JFRzMyKEVWRVJHUkVFTl9HUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgKyBFVkVSR1JFRU5fQ1JUQzVfUkVHSVNURVJfT0ZGU0VULAorCSAgICAgICAodTMyKXJkZXYtPm1jLnZyYW1fc3RhcnQpOworCisJV1JFRzMyKEVWRVJHUkVFTl9WR0FfTUVNT1JZX0JBU0VfQUREUkVTU19ISUdILCB1cHBlcl8zMl9iaXRzKHJkZXYtPm1jLnZyYW1fc3RhcnQpKTsKKwlXUkVHMzIoRVZFUkdSRUVOX1ZHQV9NRU1PUllfQkFTRV9BRERSRVNTLCAodTMyKXJkZXYtPm1jLnZyYW1fc3RhcnQpOworCS8qIFVubG9jayBob3N0IGFjY2VzcyAqLworCVdSRUczMihWR0FfSERQX0NPTlRST0wsIHNhdmUtPnZnYV9oZHBfY29udHJvbCk7CisJbWRlbGF5KDEpOworCS8qIFJlc3RvcmUgdmlkZW8gc3RhdGUgKi8KKwlXUkVHMzIoRDFWR0FfQ09OVFJPTCwgc2F2ZS0+dmdhX2NvbnRyb2xbMF0pOworCVdSRUczMihEMlZHQV9DT05UUk9MLCBzYXZlLT52Z2FfY29udHJvbFsxXSk7CisJV1JFRzMyKEVWRVJHUkVFTl9EM1ZHQV9DT05UUk9MLCBzYXZlLT52Z2FfY29udHJvbFsyXSk7CisJV1JFRzMyKEVWRVJHUkVFTl9ENFZHQV9DT05UUk9MLCBzYXZlLT52Z2FfY29udHJvbFszXSk7CisJV1JFRzMyKEVWRVJHUkVFTl9ENVZHQV9DT05UUk9MLCBzYXZlLT52Z2FfY29udHJvbFs0XSk7CisJV1JFRzMyKEVWRVJHUkVFTl9ENlZHQV9DT05UUk9MLCBzYXZlLT52Z2FfY29udHJvbFs1XSk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCwgMSk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCwgMSk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCwgMSk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwgMSk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwgMSk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgMSk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzBfUkVHSVNURVJfT0ZGU0VULCBzYXZlLT5jcnRjX2NvbnRyb2xbMF0pOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCwgc2F2ZS0+Y3J0Y19jb250cm9sWzFdKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMl9SRUdJU1RFUl9PRkZTRVQsIHNhdmUtPmNydGNfY29udHJvbFsyXSk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VULCBzYXZlLT5jcnRjX2NvbnRyb2xbM10pOworCVdSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwgc2F2ZS0+Y3J0Y19jb250cm9sWzRdKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDNV9SRUdJU1RFUl9PRkZTRVQsIHNhdmUtPmNydGNfY29udHJvbFs1XSk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEMzX1JFR0lTVEVSX09GRlNFVCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEM0X1JFR0lTVEVSX09GRlNFVCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9DUlRDX1VQREFURV9MT0NLICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCwgMCk7CisJV1JFRzMyKFZHQV9SRU5ERVJfQ09OVFJPTCwgc2F2ZS0+dmdhX3JlbmRlcl9jb250cm9sKTsKK30KKworc3RhdGljIHZvaWQgZXZlcmdyZWVuX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJc3RydWN0IGV2ZXJncmVlbl9tY19zYXZlIHNhdmU7CisJdTMyIHRtcDsKKwlpbnQgaSwgajsKKworCS8qIEluaXRpYWxpemUgSERQICovCisJZm9yIChpID0gMCwgaiA9IDA7IGkgPCAzMjsgaSsrLCBqICs9IDB4MTgpIHsKKwkJV1JFRzMyKCgweDJjMTQgKyBqKSwgMHgwMDAwMDAwMCk7CisJCVdSRUczMigoMHgyYzE4ICsgaiksIDB4MDAwMDAwMDApOworCQlXUkVHMzIoKDB4MmMxYyArIGopLCAweDAwMDAwMDAwKTsKKwkJV1JFRzMyKCgweDJjMjAgKyBqKSwgMHgwMDAwMDAwMCk7CisJCVdSRUczMigoMHgyYzI0ICsgaiksIDB4MDAwMDAwMDApOworCX0KKwlXUkVHMzIoSERQX1JFR19DT0hFUkVOQ1lfRkxVU0hfQ05UTCwgMCk7CisKKwlldmVyZ3JlZW5fbWNfc3RvcChyZGV2LCAmc2F2ZSk7CisJaWYgKGV2ZXJncmVlbl9tY193YWl0X2Zvcl9pZGxlKHJkZXYpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwgIldhaXQgZm9yIE1DIGlkbGUgdGltZWRvdXQgIVxuIik7CisJfQorCS8qIExvY2tvdXQgYWNjZXNzIHRocm91Z2ggVkdBIGFwZXJ0dXJlKi8KKwlXUkVHMzIoVkdBX0hEUF9DT05UUk9MLCBWR0FfTUVNT1JZX0RJU0FCTEUpOworCS8qIFVwZGF0ZSBjb25maWd1cmF0aW9uICovCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlpZiAocmRldi0+bWMudnJhbV9zdGFydCA8IHJkZXYtPm1jLmd0dF9zdGFydCkgeworCQkJLyogVlJBTSBiZWZvcmUgQUdQICovCisJCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0xPV19BRERSLAorCQkJCXJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTIpOworCQkJV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIsCisJCQkJcmRldi0+bWMuZ3R0X2VuZCA+PiAxMik7CisJCX0gZWxzZSB7CisJCQkvKiBWUkFNIGFmdGVyIEFHUCAqLworCQkJV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwKKwkJCQlyZGV2LT5tYy5ndHRfc3RhcnQgPj4gMTIpOworCQkJV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIsCisJCQkJcmRldi0+bWMudnJhbV9lbmQgPj4gMTIpOworCQl9CisJfSBlbHNlIHsKKwkJV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwKKwkJCXJkZXYtPm1jLnZyYW1fc3RhcnQgPj4gMTIpOworCQlXUkVHMzIoTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwKKwkJCXJkZXYtPm1jLnZyYW1fZW5kID4+IDEyKTsKKwl9CisJV1JFRzMyKE1DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ERUZBVUxUX0FERFIsIDApOworCXRtcCA9ICgocmRldi0+bWMudnJhbV9lbmQgPj4gMjQpICYgMHhGRkZGKSA8PCAxNjsKKwl0bXAgfD0gKChyZGV2LT5tYy52cmFtX3N0YXJ0ID4+IDI0KSAmIDB4RkZGRik7CisJV1JFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OLCB0bXApOworCVdSRUczMihIRFBfTk9OU1VSRkFDRV9CQVNFLCAocmRldi0+bWMudnJhbV9zdGFydCA+PiA4KSk7CisJV1JFRzMyKEhEUF9OT05TVVJGQUNFX0lORk8sICgyIDw8IDcpKTsKKwlXUkVHMzIoSERQX05PTlNVUkZBQ0VfU0laRSwgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDEpIHwgMHgzRkYpOworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJV1JFRzMyKE1DX1ZNX0FHUF9UT1AsIHJkZXYtPm1jLmd0dF9lbmQgPj4gMTYpOworCQlXUkVHMzIoTUNfVk1fQUdQX0JPVCwgcmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDE2KTsKKwkJV1JFRzMyKE1DX1ZNX0FHUF9CQVNFLCByZGV2LT5tYy5hZ3BfYmFzZSA+PiAyMik7CisJfSBlbHNlIHsKKwkJV1JFRzMyKE1DX1ZNX0FHUF9CQVNFLCAwKTsKKwkJV1JFRzMyKE1DX1ZNX0FHUF9UT1AsIDB4MEZGRkZGRkYpOworCQlXUkVHMzIoTUNfVk1fQUdQX0JPVCwgMHgwRkZGRkZGRik7CisJfQorCWlmIChldmVyZ3JlZW5fbWNfd2FpdF9mb3JfaWRsZShyZGV2KSkgeworCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IGZvciBNQyBpZGxlIHRpbWVkb3V0ICFcbiIpOworCX0KKwlldmVyZ3JlZW5fbWNfcmVzdW1lKHJkZXYsICZzYXZlKTsKKwkvKiB3ZSBuZWVkIHRvIG93biBWUkFNLCBzbyB0dXJuIG9mZiB0aGUgVkdBIHJlbmRlcmVyIGhlcmUKKwkgKiB0byBzdG9wIGl0IG92ZXJ3cml0aW5nIG91ciBvYmplY3RzICovCisJcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOworfQorCisjaWYgMAorLyoKKyAqIENQLgorICovCitzdGF0aWMgdm9pZCBldmVyZ3JlZW5fY3Bfc3RvcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBYWFggKi8KK30KKworCitzdGF0aWMgaW50IGV2ZXJncmVlbl9jcF9sb2FkX21pY3JvY29kZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBYWFggKi8KKworCXJldHVybiAwOworfQorCisKKy8qCisgKiBDb3JlIGZ1bmN0aW9ucworICovCitzdGF0aWMgdTMyIGV2ZXJncmVlbl9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKHUzMiBudW1fdGlsZV9waXBlcywKKwkJCQkJCSAgdTMyIG51bV9iYWNrZW5kcywKKwkJCQkJCSAgdTMyIGJhY2tlbmRfZGlzYWJsZV9tYXNrKQoreworCXUzMiBiYWNrZW5kX21hcCA9IDA7CisKKwlyZXR1cm4gYmFja2VuZF9tYXA7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgZXZlcmdyZWVuX2dwdV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIFhYWCAqLworfQorCitpbnQgZXZlcmdyZWVuX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJZml4ZWQyMF8xMiBhOworCXUzMiB0bXA7CisJaW50IGNoYW5zaXplLCBudW1jaGFuOworCisJLyogR2V0IFZSQU0gaW5mb3JtYXRpb25zICovCisJcmRldi0+bWMudnJhbV9pc19kZHIgPSB0cnVlOworCXRtcCA9IFJSRUczMihNQ19BUkJfUkFNQ0ZHKTsKKwlpZiAodG1wICYgQ0hBTlNJWkVfT1ZFUlJJREUpIHsKKwkJY2hhbnNpemUgPSAxNjsKKwl9IGVsc2UgaWYgKHRtcCAmIENIQU5TSVpFX01BU0spIHsKKwkJY2hhbnNpemUgPSA2NDsKKwl9IGVsc2UgeworCQljaGFuc2l6ZSA9IDMyOworCX0KKwl0bXAgPSBSUkVHMzIoTUNfU0hBUkVEX0NITUFQKTsKKwlzd2l0Y2ggKCh0bXAgJiBOT09GQ0hBTl9NQVNLKSA+PiBOT09GQ0hBTl9TSElGVCkgeworCWNhc2UgMDoKKwlkZWZhdWx0OgorCQludW1jaGFuID0gMTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQludW1jaGFuID0gMjsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQludW1jaGFuID0gNDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQludW1jaGFuID0gODsKKwkJYnJlYWs7CisJfQorCXJkZXYtPm1jLnZyYW1fd2lkdGggPSBudW1jaGFuICogY2hhbnNpemU7CisJLyogQ291bGQgYXBlciBzaXplIHJlcG9ydCAwID8gKi8KKwlyZGV2LT5tYy5hcGVyX2Jhc2UgPSBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHJkZXYtPmRkZXYsIDApOworCXJkZXYtPm1jLmFwZXJfc2l6ZSA9IGRybV9nZXRfcmVzb3VyY2VfbGVuKHJkZXYtPmRkZXYsIDApOworCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KKwkvKiBzaXplIGluIE1CIG9uIGV2ZXJncmVlbiAqLworCXJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA9IFJSRUczMihDT05GSUdfTUVNU0laRSkgKiAxMDI0ICogMTAyNDsKKwlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IFJSRUczMihDT05GSUdfTUVNU0laRSkgKiAxMDI0ICogMTAyNDsKKwlyZGV2LT5tYy52aXNpYmxlX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKKwkvKiBGSVhNRSByZW1vdmUgdGhpcyBvbmNlIHdlIHN1cHBvcnQgdW5tYXBwYWJsZSBWUkFNICovCisJaWYgKHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA+IHJkZXYtPm1jLmFwZXJfc2l6ZSkgeworCQlyZGV2LT5tYy5tY192cmFtX3NpemUgPSByZGV2LT5tYy5hcGVyX3NpemU7CisJCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOworCX0KKwlyNjAwX3ZyYW1fZ3R0X2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYyk7CisJLyogRklYTUU6IHdlIHNob3VsZCBlbmZvcmNlIGRlZmF1bHQgY2xvY2sgaW4gY2FzZSBHUFUgaXMgbm90IGluCisJICogZGVmYXVsdCBzZXR1cAorCSAqLworCWEuZnVsbCA9IHJmaXhlZF9jb25zdCgxMDApOworCXJkZXYtPnBtLnNjbGsuZnVsbCA9IHJmaXhlZF9jb25zdChyZGV2LT5jbG9jay5kZWZhdWx0X3NjbGspOworCXJkZXYtPnBtLnNjbGsuZnVsbCA9IHJmaXhlZF9kaXYocmRldi0+cG0uc2NsaywgYSk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBldmVyZ3JlZW5fZ3B1X3Jlc2V0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCS8qIEZJWE1FOiBpbXBsZW1lbnQgZm9yIGV2ZXJncmVlbiAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGV2ZXJncmVlbl9zdGFydHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworI2lmIDAKKwlpbnQgcjsKKworCWlmICghcmRldi0+bWVfZncgfHwgIXJkZXYtPnBmcF9mdyB8fCAhcmRldi0+cmxjX2Z3KSB7CisJCXIgPSByNjAwX2luaXRfbWljcm9jb2RlKHJkZXYpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSFcbiIpOworCQkJcmV0dXJuIHI7CisJCX0KKwl9CisjZW5kaWYKKwlldmVyZ3JlZW5fbWNfcHJvZ3JhbShyZGV2KTsKKyNpZiAwCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlldmVyZ3JlZW1fYWdwX2VuYWJsZShyZGV2KTsKKwl9IGVsc2UgeworCQlyID0gZXZlcmdyZWVuX3BjaWVfZ2FydF9lbmFibGUocmRldik7CisJCWlmIChyKQorCQkJcmV0dXJuIHI7CisJfQorI2VuZGlmCisJZXZlcmdyZWVuX2dwdV9pbml0KHJkZXYpOworI2lmIDAKKwlpZiAoIXJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKSB7CisJCXIgPSByNjAwX2JsaXRfaW5pdChyZGV2KTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgYmxpdHRlciAoJWQpLlxuIiwgcik7CisJCQlyZXR1cm4gcjsKKwkJfQorCX0KKworCXIgPSByYWRlb25fYm9fcmVzZXJ2ZShyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgZmFsc2UpOworCWlmICh1bmxpa2VseShyICE9IDApKQorCQlyZXR1cm4gcjsKKwlyID0gcmFkZW9uX2JvX3BpbihyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaiwgUkFERU9OX0dFTV9ET01BSU5fVlJBTSwKKwkJCSZyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX2dwdV9hZGRyKTsKKwlyYWRlb25fYm9fdW5yZXNlcnZlKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKKwlpZiAocikgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBwaW4gYmxpdCBvYmplY3QgJWRcbiIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisKKwkvKiBFbmFibGUgSVJRICovCisJciA9IHI2MDBfaXJxX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJyYWRlb246IElIIGluaXQgZmFpbGVkICglZCkuXG4iLCByKTsKKwkJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwkJcmV0dXJuIHI7CisJfQorCXI2MDBfaXJxX3NldChyZGV2KTsKKworCXIgPSByYWRlb25fcmluZ19pbml0KHJkZXYsIHJkZXYtPmNwLnJpbmdfc2l6ZSk7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSBldmVyZ3JlZW5fY3BfbG9hZF9taWNyb2NvZGUocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCXIgPSByNjAwX2NwX3Jlc3VtZShyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogd3JpdGUgYmFjayBidWZmZXIgYXJlIG5vdCB2aXRhbCBzbyBkb24ndCB3b3JyeSBhYm91dCBmYWlsdXJlICovCisJcjYwMF93Yl9lbmFibGUocmRldik7CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworaW50IGV2ZXJncmVlbl9yZXN1bWUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwkvKiBEbyBub3QgcmVzZXQgR1BVIGJlZm9yZSBwb3N0aW5nLCBvbiBydjc3MCBodyB1bmxpa2Ugb24gcjUwMCBodywKKwkgKiBwb3N0aW5nIHdpbGwgcGVyZm9ybSBuZWNlc3NhcnkgdGFzayB0byBicmluZyBiYWNrIEdQVSBpbnRvIGdvb2QKKwkgKiBzaGFwZS4KKwkgKi8KKwkvKiBwb3N0IGNhcmQgKi8KKwlhdG9tX2FzaWNfaW5pdChyZGV2LT5tb2RlX2luZm8uYXRvbV9jb250ZXh0KTsKKwkvKiBJbml0aWFsaXplIGNsb2NrcyAqLworCXIgPSByYWRlb25fY2xvY2tzX2luaXQocmRldik7CisJaWYgKHIpIHsKKwkJcmV0dXJuIHI7CisJfQorCisJciA9IGV2ZXJncmVlbl9zdGFydHVwKHJkZXYpOworCWlmIChyKSB7CisJCURSTV9FUlJPUigicjYwMCBzdGFydHVwIGZhaWxlZCBvbiByZXN1bWVcbiIpOworCQlyZXR1cm4gcjsKKwl9CisjaWYgMAorCXIgPSByNjAwX2liX3Rlc3QocmRldik7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxsZWQgdGVzdGluZyBJQiAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKyNlbmRpZgorCXJldHVybiByOworCit9CisKK2ludCBldmVyZ3JlZW5fc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKyNpZiAwCisJaW50IHI7CisKKwkvKiBGSVhNRTogd2Ugc2hvdWxkIHdhaXQgZm9yIHJpbmcgdG8gYmUgZW1wdHkgKi8KKwlyNzAwX2NwX3N0b3AocmRldik7CisJcmRldi0+Y3AucmVhZHkgPSBmYWxzZTsKKwlyNjAwX3diX2Rpc2FibGUocmRldik7CisJZXZlcmdyZWVuX3BjaWVfZ2FydF9kaXNhYmxlKHJkZXYpOworCS8qIHVucGluIHNoYWRlcnMgYm8gKi8KKwlyID0gcmFkZW9uX2JvX3Jlc2VydmUocmRldi0+cjYwMF9ibGl0LnNoYWRlcl9vYmosIGZhbHNlKTsKKwlpZiAobGlrZWx5KHIgPT0gMCkpIHsKKwkJcmFkZW9uX2JvX3VucGluKHJkZXYtPnI2MDBfYmxpdC5zaGFkZXJfb2JqKTsKKwkJcmFkZW9uX2JvX3VucmVzZXJ2ZShyZGV2LT5yNjAwX2JsaXQuc2hhZGVyX29iaik7CisJfQorI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIGV2ZXJncmVlbl9jYXJkX3Bvc3RlZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwl1MzIgcmVnOworCisJLyogZmlyc3QgY2hlY2sgQ1JUQ3MgKi8KKwlyZWcgPSBSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMF9SRUdJU1RFUl9PRkZTRVQpIHwKKwkJUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzFfUkVHSVNURVJfT0ZGU0VUKSB8CisJCVJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCkgfAorCQlSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQpIHwKKwkJUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VUKSB8CisJCVJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCk7CisJaWYgKHJlZyAmIEVWRVJHUkVFTl9DUlRDX01BU1RFUl9FTikKKwkJcmV0dXJuIHRydWU7CisKKwkvKiB0aGVuIGNoZWNrIE1FTV9TSVpFLCBpbiBjYXNlIHRoZSBjcnRjcyBhcmUgb2ZmICovCisJaWYgKFJSRUczMihDT05GSUdfTUVNU0laRSkpCisJCXJldHVybiB0cnVlOworCisJcmV0dXJuIGZhbHNlOworfQorCisvKiBQbGFuIGlzIHRvIG1vdmUgaW5pdGlhbGl6YXRpb24gaW4gdGhhdCBmdW5jdGlvbiBhbmQgdXNlCisgKiBoZWxwZXIgZnVuY3Rpb24gc28gdGhhdCByYWRlb25fZGV2aWNlX2luaXQgcHJldHR5IG11Y2gKKyAqIGRvIG5vdGhpbmcgbW9yZSB0aGFuIGNhbGxpbmcgYXNpYyBzcGVjaWZpYyBmdW5jdGlvbi4gVGhpcworICogc2hvdWxkIGFsc28gYWxsb3cgdG8gcmVtb3ZlIGEgYnVuY2ggb2YgY2FsbGJhY2sgZnVuY3Rpb24KKyAqIGxpa2UgdnJhbV9pbmZvLgorICovCitpbnQgZXZlcmdyZWVuX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJaW50IHI7CisKKwlyID0gcmFkZW9uX2R1bW15X3BhZ2VfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogVGhpcyBkb24ndCBkbyBtdWNoICovCisJciA9IHJhZGVvbl9nZW1faW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogUmVhZCBCSU9TICovCisJaWYgKCFyYWRlb25fZ2V0X2Jpb3MocmRldikpIHsKKwkJaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogTXVzdCBiZSBhbiBBVE9NQklPUyAqLworCWlmICghcmRldi0+aXNfYXRvbV9iaW9zKSB7CisJCWRldl9lcnIocmRldi0+ZGV2LCAiRXhwZWN0aW5nIGF0b21iaW9zIGZvciBSNjAwIEdQVVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyID0gcmFkZW9uX2F0b21iaW9zX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOworCS8qIFBvc3QgY2FyZCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAoIWV2ZXJncmVlbl9jYXJkX3Bvc3RlZChyZGV2KSkgeworCQlpZiAoIXJkZXYtPmJpb3MpIHsKKwkJCWRldl9lcnIocmRldi0+ZGV2LCAiQ2FyZCBub3QgcG9zdGVkIGFuZCBubyBCSU9TIC0gaWdub3JpbmdcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJRFJNX0lORk8oIkdQVSBub3QgcG9zdGVkLiBwb3N0aW5nIG5vdy4uLlxuIik7CisJCWF0b21fYXNpY19pbml0KHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQpOworCX0KKwkvKiBJbml0aWFsaXplIHNjcmF0Y2ggcmVnaXN0ZXJzICovCisJcjYwMF9zY3JhdGNoX2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBzdXJmYWNlIHJlZ2lzdGVycyAqLworCXJhZGVvbl9zdXJmYWNlX2luaXQocmRldik7CisJLyogSW5pdGlhbGl6ZSBjbG9ja3MgKi8KKwlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CisJciA9IHJhZGVvbl9jbG9ja3NfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCisJcmFkZW9uX3BtX2luaXQocmRldik7CisJLyogRmVuY2UgZHJpdmVyICovCisJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJLyogaW5pdGlhbGl6ZSBBR1AgKi8KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCXIgPSByYWRlb25fYWdwX2luaXQocmRldik7CisJCWlmIChyKQorCQkJcmFkZW9uX2FncF9kaXNhYmxlKHJkZXYpOworCX0KKwkvKiBpbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyICovCisJciA9IGV2ZXJncmVlbl9tY19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKwkvKiBNZW1vcnkgbWFuYWdlciAqLworCXIgPSByYWRlb25fYm9faW5pdChyZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisjaWYgMAorCXIgPSByYWRlb25faXJxX2ttc19pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCXJkZXYtPmNwLnJpbmdfb2JqID0gTlVMTDsKKwlyNjAwX3JpbmdfaW5pdChyZGV2LCAxMDI0ICogMTAyNCk7CisKKwlyZGV2LT5paC5yaW5nX29iaiA9IE5VTEw7CisJcjYwMF9paF9yaW5nX2luaXQocmRldiwgNjQgKiAxMDI0KTsKKworCXIgPSByNjAwX3BjaWVfZ2FydF9pbml0KHJkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKyNlbmRpZgorCXJkZXYtPmFjY2VsX3dvcmtpbmcgPSBmYWxzZTsKKwlyID0gZXZlcmdyZWVuX3N0YXJ0dXAocmRldik7CisJaWYgKHIpIHsKKwkJZXZlcmdyZWVuX3N1c3BlbmQocmRldik7CisJCS8qcjYwMF93Yl9maW5pKHJkZXYpOyovCisJCS8qcmFkZW9uX3JpbmdfZmluaShyZGV2KTsqLworCQkvKmV2ZXJncmVlbl9wY2llX2dhcnRfZmluaShyZGV2KTsqLworCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CisJfQorCWlmIChyZGV2LT5hY2NlbF93b3JraW5nKSB7CisJCXIgPSByYWRlb25faWJfcG9vbF9pbml0KHJkZXYpOworCQlpZiAocikgeworCQkJRFJNX0VSUk9SKCJyYWRlb246IGZhaWxlZCBpbml0aWFsaXppbmcgSUIgcG9vbCAoJWQpLlxuIiwgcik7CisJCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CisJCX0KKwkJciA9IHI2MDBfaWJfdGVzdChyZGV2KTsKKwkJaWYgKHIpIHsKKwkJCURSTV9FUlJPUigicmFkZW9uOiBmYWlsZWQgdGVzdGluZyBJQiAoJWQpLlxuIiwgcik7CisJCQlyZGV2LT5hY2NlbF93b3JraW5nID0gZmFsc2U7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZXZlcmdyZWVuX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJZXZlcmdyZWVuX3N1c3BlbmQocmRldik7CisjaWYgMAorCXI2MDBfYmxpdF9maW5pKHJkZXYpOworCXI2MDBfaXJxX2ZpbmkocmRldik7CisJcmFkZW9uX2lycV9rbXNfZmluaShyZGV2KTsKKwlyYWRlb25fcmluZ19maW5pKHJkZXYpOworCXI2MDBfd2JfZmluaShyZGV2KTsKKwlldmVyZ3JlZW5fcGNpZV9nYXJ0X2ZpbmkocmRldik7CisjZW5kaWYKKwlyYWRlb25fZ2VtX2ZpbmkocmRldik7CisJcmFkZW9uX2ZlbmNlX2RyaXZlcl9maW5pKHJkZXYpOworCXJhZGVvbl9jbG9ja3NfZmluaShyZGV2KTsKKwlyYWRlb25fYWdwX2ZpbmkocmRldik7CisJcmFkZW9uX2JvX2ZpbmkocmRldik7CisJcmFkZW9uX2F0b21iaW9zX2ZpbmkocmRldik7CisJa2ZyZWUocmRldi0+Ymlvcyk7CisJcmRldi0+YmlvcyA9IE5VTEw7CisJcmFkZW9uX2R1bW15X3BhZ2VfZmluaShyZGV2KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ldmVyZ3JlZW5fcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdjN2M5NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vZXZlcmdyZWVuX3JlZy5oCkBAIC0wLDAgKzEsMTc2IEBACisvKgorICogQ29weXJpZ2h0IDIwMTAgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqIEF1dGhvcnM6IEFsZXggRGV1Y2hlcgorICovCisjaWZuZGVmIF9fRVZFUkdSRUVOX1JFR19IX18KKyNkZWZpbmUgX19FVkVSR1JFRU5fUkVHX0hfXworCisvKiBldmVyZ3JlZW4gKi8KKyNkZWZpbmUgRVZFUkdSRUVOX1ZHQV9NRU1PUllfQkFTRV9BRERSRVNTICAgICAgICAgICAgICAgMHgzMTAKKyNkZWZpbmUgRVZFUkdSRUVOX1ZHQV9NRU1PUllfQkFTRV9BRERSRVNTX0hJR0ggICAgICAgICAgMHgzMjQKKyNkZWZpbmUgRVZFUkdSRUVOX0QzVkdBX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgMHgzZTAKKyNkZWZpbmUgRVZFUkdSRUVOX0Q0VkdBX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgMHgzZTQKKyNkZWZpbmUgRVZFUkdSRUVOX0Q1VkdBX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgMHgzZTgKKyNkZWZpbmUgRVZFUkdSRUVOX0Q2VkdBX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgMHgzZWMKKworI2RlZmluZSBFVkVSR1JFRU5fUDFQTExfU1NfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDQxNAorI2RlZmluZSBFVkVSR1JFRU5fUDJQTExfU1NfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDQ1NAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX1B4UExMX1NTX0VOICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMikKKy8qIEdSUEggYmxvY2tzIGF0IDB4NjgwMCwgMHg3NDAwLCAweDEwMDAwLCAweDEwYzAwLCAweDExODAwLCAweDEyNDAwICovCisjZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjgwMAorI2RlZmluZSBFVkVSR1JFRU5fR1JQSF9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgICAweDY4MDQKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0RFUFRIKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDApCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9ERVBUSF84QlBQICAgICAgICAgICAgICAgIDAKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0RFUFRIXzE2QlBQICAgICAgICAgICAgICAgMQorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfREVQVEhfMzJCUFAgICAgICAgICAgICAgICAyCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9GT1JNQVQoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCA4KQorLyogOCBCUFAgKi8KKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF9JTkRFWEVEICAgICAgICAgICAgMAorLyogMTYgQlBQICovCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9GT1JNQVRfQVJHQjE1NTUgICAgICAgICAgIDAKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF9BUkdCNTY1ICAgICAgICAgICAgMQorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfRk9STUFUX0FSR0I0NDQ0ICAgICAgICAgICAyCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9GT1JNQVRfQUk4OCAgICAgICAgICAgICAgIDMKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF9NT05PMTYgICAgICAgICAgICAgNAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfRk9STUFUX0JHUkE1NTUxICAgICAgICAgICA1CisvKiAzMiBCUFAgKi8KKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF9BUkdCODg4OCAgICAgICAgICAgMAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfRk9STUFUX0FSR0IyMTAxMDEwICAgICAgICAxCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9GT1JNQVRfMzJCUFBfRElHICAgICAgICAgIDIKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF84Ql9BUkdCMjEwMTAxMCAgICAgMworIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfRk9STUFUX0JHUkExMDEwMTAyICAgICAgICA0CisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9GT1JNQVRfOEJfQkdSQTEwMTAxMDIgICAgIDUKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0ZPUk1BVF9SR0IxMTExMTAgICAgICAgICAgNgorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfRk9STUFUX0JHUjEwMTExMSAgICAgICAgICA3CisjZGVmaW5lIEVWRVJHUkVFTl9HUlBIX1NXQVBfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgIDB4NjgwYworIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfRU5ESUFOX1NXQVAoeCkgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMCkKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0VORElBTl9OT05FICAgICAgICAgICAgICAgMAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfRU5ESUFOXzhJTjE2ICAgICAgICAgICAgICAxCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9FTkRJQU5fOElOMzIgICAgICAgICAgICAgIDIKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0VORElBTl84SU42NCAgICAgICAgICAgICAgMworIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfUkVEX0NST1NTQkFSKHgpICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgNCkKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX1JFRF9TRUxfUiAgICAgICAgICAgICAgICAgMAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfUkVEX1NFTF9HICAgICAgICAgICAgICAgICAxCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9SRURfU0VMX0IgICAgICAgICAgICAgICAgIDIKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX1JFRF9TRUxfQSAgICAgICAgICAgICAgICAgMworIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfR1JFRU5fQ1JPU1NCQVIoeCkgICAgICAgICAoKCh4KSAmIDB4MykgPDwgNikKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0dSRUVOX1NFTF9HICAgICAgICAgICAgICAgMAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfR1JFRU5fU0VMX0IgICAgICAgICAgICAgICAxCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9HUkVFTl9TRUxfQSAgICAgICAgICAgICAgIDIKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0dSRUVOX1NFTF9SICAgICAgICAgICAgICAgMworIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfQkxVRV9DUk9TU0JBUih4KSAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgOCkKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0JMVUVfU0VMX0IgICAgICAgICAgICAgICAgMAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfQkxVRV9TRUxfQSAgICAgICAgICAgICAgICAxCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9CTFVFX1NFTF9SICAgICAgICAgICAgICAgIDIKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0JMVUVfU0VMX0cgICAgICAgICAgICAgICAgMworIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfQUxQSEFfQ1JPU1NCQVIoeCkgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMTApCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9BTFBIQV9TRUxfQSAgICAgICAgICAgICAgIDAKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9HUlBIX0FMUEhBX1NFTF9SICAgICAgICAgICAgICAgMQorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfQUxQSEFfU0VMX0cgICAgICAgICAgICAgICAyCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fR1JQSF9BTFBIQV9TRUxfQiAgICAgICAgICAgICAgIDMKKyNkZWZpbmUgRVZFUkdSRUVOX0dSUEhfUFJJTUFSWV9TVVJGQUNFX0FERFJFU1MgICAgICAgICAgMHg2ODEwCisjZGVmaW5lIEVWRVJHUkVFTl9HUlBIX1NFQ09OREFSWV9TVVJGQUNFX0FERFJFU1MgICAgICAgIDB4NjgxNAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfREZRX0VOQUJMRSAgICAgICAgICAgICAgICAoMSA8PCAwKQorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0dSUEhfU1VSRkFDRV9BRERSRVNTX01BU0sgICAgICAweGZmZmZmZjAwCisjZGVmaW5lIEVWRVJHUkVFTl9HUlBIX1BJVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjgxOAorI2RlZmluZSBFVkVSR1JFRU5fR1JQSF9QUklNQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICAgICAweDY4MWMKKyNkZWZpbmUgRVZFUkdSRUVOX0dSUEhfU0VDT05EQVJZX1NVUkZBQ0VfQUREUkVTU19ISUdIICAgMHg2ODIwCisjZGVmaW5lIEVWRVJHUkVFTl9HUlBIX1NVUkZBQ0VfT0ZGU0VUX1ggICAgICAgICAgICAgICAgIDB4NjgyNAorI2RlZmluZSBFVkVSR1JFRU5fR1JQSF9TVVJGQUNFX09GRlNFVF9ZICAgICAgICAgICAgICAgICAweDY4MjgKKyNkZWZpbmUgRVZFUkdSRUVOX0dSUEhfWF9TVEFSVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2ODJjCisjZGVmaW5lIEVWRVJHUkVFTl9HUlBIX1lfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjgzMAorI2RlZmluZSBFVkVSR1JFRU5fR1JQSF9YX0VORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY4MzQKKyNkZWZpbmUgRVZFUkdSRUVOX0dSUEhfWV9FTkQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2ODM4CisKKy8qIENVUiBibG9ja3MgYXQgMHg2OTk4LCAweDc1OTgsIDB4MTAxOTgsIDB4MTBkOTgsIDB4MTE5OTgsIDB4MTI1OTggKi8KKyNkZWZpbmUgRVZFUkdSRUVOX0NVUl9DT05UUk9MICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2OTk4CisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSU09SX0VOICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSU09SX01PREUoeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCA4KQorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0NVUlNPUl9NT05PICAgICAgICAgICAgICAgICAgICAwCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSU09SXzI0XzEgICAgICAgICAgICAgICAgICAgIDEKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9DVVJTT1JfMjRfOF9QUkVfTVVMVCAgICAgICAgICAgMgorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0NVUlNPUl8yNF84X1VOUFJFX01VTFQgICAgICAgICAzCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSU09SXzJYX01BR05JRlkgICAgICAgICAgICAgICgxIDw8IDE2KQorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0NVUlNPUl9GT1JDRV9NQ19PTiAgICAgICAgICAgICAoMSA8PCAyMCkKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9DVVJTT1JfVVJHRU5UX0NPTlRST0woeCkgICAgICAgKCgoeCkgJiAweDcpIDw8IDI0KQorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0NVUlNPUl9VUkdFTlRfQUxXQVlTICAgICAgICAgICAwCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSU09SX1VSR0VOVF8xXzggICAgICAgICAgICAgIDEKKyMgICAgICAgZGVmaW5lIEVWRVJHUkVFTl9DVVJTT1JfVVJHRU5UXzFfNCAgICAgICAgICAgICAgMgorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0NVUlNPUl9VUkdFTlRfM184ICAgICAgICAgICAgICAzCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSU09SX1VSR0VOVF8xXzIgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRVZFUkdSRUVOX0NVUl9TVVJGQUNFX0FERFJFU1MgICAgICAgICAgICAgICAgICAgMHg2OTljCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSX1NVUkZBQ0VfQUREUkVTU19NQVNLICAgICAgIDB4ZmZmZmYwMDAKKyNkZWZpbmUgRVZFUkdSRUVOX0NVUl9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2OWEwCisjZGVmaW5lIEVWRVJHUkVFTl9DVVJfU1VSRkFDRV9BRERSRVNTX0hJR0ggICAgICAgICAgICAgIDB4NjlhNAorI2RlZmluZSBFVkVSR1JFRU5fQ1VSX1BPU0lUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAweDY5YTgKKyNkZWZpbmUgRVZFUkdSRUVOX0NVUl9IT1RfU1BPVCAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2OWFjCisjZGVmaW5lIEVWRVJHUkVFTl9DVVJfQ09MT1IxICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjliMAorI2RlZmluZSBFVkVSR1JFRU5fQ1VSX0NPTE9SMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDY5YjQKKyNkZWZpbmUgRVZFUkdSRUVOX0NVUl9VUERBVEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2OWI4CisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSU09SX1VQREFURV9QRU5ESU5HICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSU09SX1VQREFURV9UQUtFTiAgICAgICAgICAgICgxIDw8IDEpCisjICAgICAgIGRlZmluZSBFVkVSR1JFRU5fQ1VSU09SX1VQREFURV9MT0NLICAgICAgICAgICAgICgxIDw8IDE2KQorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0NVUlNPUl9ESVNBQkxFX01VTFRJUExFX1VQREFURSAoMSA8PCAyNCkKKworLyogTFVUIGJsb2NrcyBhdCAweDY5ZTAsIDB4NzVlMCwgMHgxMDFlMCwgMHgxMGRlMCwgMHgxMTllMCwgMHgxMjVlMCAqLworI2RlZmluZSBFVkVSR1JFRU5fRENfTFVUX1JXX01PREUgICAgICAgICAgICAgICAgICAgICAgICAweDY5ZTAKKyNkZWZpbmUgRVZFUkdSRUVOX0RDX0xVVF9SV19JTkRFWCAgICAgICAgICAgICAgICAgICAgICAgMHg2OWU0CisjZGVmaW5lIEVWRVJHUkVFTl9EQ19MVVRfU0VRX0NPTE9SICAgICAgICAgICAgICAgICAgICAgIDB4NjllOAorI2RlZmluZSBFVkVSR1JFRU5fRENfTFVUX1BXTF9EQVRBICAgICAgICAgICAgICAgICAgICAgICAweDY5ZWMKKyNkZWZpbmUgRVZFUkdSRUVOX0RDX0xVVF8zMF9DT0xPUiAgICAgICAgICAgICAgICAgICAgICAgMHg2OWYwCisjZGVmaW5lIEVWRVJHUkVFTl9EQ19MVVRfVkdBX0FDQ0VTU19FTkFCTEUgICAgICAgICAgICAgIDB4NjlmNAorI2RlZmluZSBFVkVSR1JFRU5fRENfTFVUX1dSSVRFX0VOX01BU0sgICAgICAgICAgICAgICAgICAweDY5ZjgKKyNkZWZpbmUgRVZFUkdSRUVOX0RDX0xVVF9BVVRPRklMTCAgICAgICAgICAgICAgICAgICAgICAgMHg2OWZjCisjZGVmaW5lIEVWRVJHUkVFTl9EQ19MVVRfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgICAgIDB4NmEwMAorI2RlZmluZSBFVkVSR1JFRU5fRENfTFVUX0JMQUNLX09GRlNFVF9CTFVFICAgICAgICAgICAgICAweDZhMDQKKyNkZWZpbmUgRVZFUkdSRUVOX0RDX0xVVF9CTEFDS19PRkZTRVRfR1JFRU4gICAgICAgICAgICAgMHg2YTA4CisjZGVmaW5lIEVWRVJHUkVFTl9EQ19MVVRfQkxBQ0tfT0ZGU0VUX1JFRCAgICAgICAgICAgICAgIDB4NmEwYworI2RlZmluZSBFVkVSR1JFRU5fRENfTFVUX1dISVRFX09GRlNFVF9CTFVFICAgICAgICAgICAgICAweDZhMTAKKyNkZWZpbmUgRVZFUkdSRUVOX0RDX0xVVF9XSElURV9PRkZTRVRfR1JFRU4gICAgICAgICAgICAgMHg2YTE0CisjZGVmaW5lIEVWRVJHUkVFTl9EQ19MVVRfV0hJVEVfT0ZGU0VUX1JFRCAgICAgICAgICAgICAgIDB4NmExOAorCisjZGVmaW5lIEVWRVJHUkVFTl9EQVRBX0ZPUk1BVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NmIwMAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0lOVEVSTEVBVkVfRU4gICAgICAgICAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBFVkVSR1JFRU5fREVTS1RPUF9IRUlHSFQgICAgICAgICAgICAgICAgICAgICAgICAweDZiMDQKKworI2RlZmluZSBFVkVSR1JFRU5fVklFV1BPUlRfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAweDZkNzAKKyNkZWZpbmUgRVZFUkdSRUVOX1ZJRVdQT1JUX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgMHg2ZDc0CisKKy8qIGRpc3BsYXkgY29udHJvbGxlciBvZmZzZXRzIHVzZWQgZm9yIGNydGMvY3VyL2x1dC9ncnBoL3ZpZXdwb3J0L2V0Yy4gKi8KKyNkZWZpbmUgRVZFUkdSRUVOX0NSVEMwX1JFR0lTVEVSX09GRlNFVCAgICAgICAgICAgICAgICAgKDB4NmRmMCAtIDB4NmRmMCkKKyNkZWZpbmUgRVZFUkdSRUVOX0NSVEMxX1JFR0lTVEVSX09GRlNFVCAgICAgICAgICAgICAgICAgKDB4NzlmMCAtIDB4NmRmMCkKKyNkZWZpbmUgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCAgICAgICAgICAgICAgICAgKDB4MTA1ZjAgLSAweDZkZjApCisjZGVmaW5lIEVWRVJHUkVFTl9DUlRDM19SRUdJU1RFUl9PRkZTRVQgICAgICAgICAgICAgICAgICgweDExMWYwIC0gMHg2ZGYwKQorI2RlZmluZSBFVkVSR1JFRU5fQ1JUQzRfUkVHSVNURVJfT0ZGU0VUICAgICAgICAgICAgICAgICAoMHgxMWRmMCAtIDB4NmRmMCkKKyNkZWZpbmUgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCAgICAgICAgICAgICAgICAgKDB4MTI5ZjAgLSAweDZkZjApCisKKy8qIENSVEMgYmxvY2tzIGF0IDB4NmRmMCwgMHg3OWYwLCAweDEwNWYwLCAweDExMWYwLCAweDExZGYwLCAweDEyOWYwICovCisjZGVmaW5lIEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NmU3MAorIyAgICAgICBkZWZpbmUgRVZFUkdSRUVOX0NSVENfTUFTVEVSX0VOICAgICAgICAgICAgICAgICAoMSA8PCAwKQorI2RlZmluZSBFVkVSR1JFRU5fQ1JUQ19VUERBVEVfTE9DSyAgICAgICAgICAgICAgICAgICAgICAweDZlZDQKKworI2RlZmluZSBFVkVSR1JFRU5fRENfR1BJT19IUERfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDY0YjAKKyNkZWZpbmUgRVZFUkdSRUVOX0RDX0dQSU9fSFBEX0EgICAgICAgICAgICAgICAgICAgICAgICAgMHg2NGI0CisjZGVmaW5lIEVWRVJHUkVFTl9EQ19HUElPX0hQRF9FTiAgICAgICAgICAgICAgICAgICAgICAgIDB4NjRiOAorI2RlZmluZSBFVkVSR1JFRU5fRENfR1BJT19IUERfWSAgICAgICAgICAgICAgICAgICAgICAgICAweDY0YmMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IxMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCmluZGV4IGMwZDQ2NTAuLjkxZWI3NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjEwMC5jCkBAIC0xOTcsMTMgKzE5NywxMyBAQAogewogCXVpbnQzMl90IHRtcDsKIAorCXJhZGVvbl9nYXJ0X3Jlc3RvcmUocmRldik7CiAJLyogZGlzY2FyZCBtZW1vcnkgcmVxdWVzdCBvdXRzaWRlIG9mIGNvbmZpZ3VyZWQgcmFuZ2UgKi8KIAl0bXAgPSBSUkVHMzIoUkFERU9OX0FJQ19DTlRMKSB8IFJBREVPTl9ESVNfT1VUX09GX1BDSV9HQVJUX0FDQ0VTUzsKIAlXUkVHMzIoUkFERU9OX0FJQ19DTlRMLCB0bXApOwogCS8qIHNldCBhZGRyZXNzIHJhbmdlIGZvciBQQ0kgYWRkcmVzcyB0cmFuc2xhdGUgKi8KLQlXUkVHMzIoUkFERU9OX0FJQ19MT19BRERSLCByZGV2LT5tYy5ndHRfbG9jYXRpb24pOwotCXRtcCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKLQlXUkVHMzIoUkFERU9OX0FJQ19ISV9BRERSLCB0bXApOworCVdSRUczMihSQURFT05fQUlDX0xPX0FERFIsIHJkZXYtPm1jLmd0dF9zdGFydCk7CisJV1JFRzMyKFJBREVPTl9BSUNfSElfQUREUiwgcmRldi0+bWMuZ3R0X2VuZCk7CiAJLyogc2V0IFBDSSBHQVJUIHBhZ2UtdGFibGUgYmFzZSBhZGRyZXNzICovCiAJV1JFRzMyKFJBREVPTl9BSUNfUFRfQkFTRSwgcmRldi0+Z2FydC50YWJsZV9hZGRyKTsKIAl0bXAgPSBSUkVHMzIoUkFERU9OX0FJQ19DTlRMKSB8IFJBREVPTl9QQ0lHQVJUX1RSQU5TTEFURV9FTjsKQEAgLTMxMiw5ICszMTIsMTEgQEAKIAkJLyogVmVydGljYWwgYmxhbmsgaW50ZXJydXB0cyAqLwogCQlpZiAoc3RhdHVzICYgUkFERU9OX0NSVENfVkJMQU5LX1NUQVQpIHsKIAkJCWRybV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDApOworCQkJd2FrZV91cCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7CiAJCX0KIAkJaWYgKHN0YXR1cyAmIFJBREVPTl9DUlRDMl9WQkxBTktfU1RBVCkgewogCQkJZHJtX2hhbmRsZV92YmxhbmsocmRldi0+ZGRldiwgMSk7CisJCQl3YWtlX3VwKCZyZGV2LT5pcnEudmJsYW5rX3F1ZXVlKTsKIAkJfQogCQlpZiAoc3RhdHVzICYgUkFERU9OX0ZQX0RFVEVDVF9TVEFUKSB7CiAJCQlxdWV1ZV9ob3RwbHVnID0gdHJ1ZTsKQEAgLTM2Niw4ICszNjgsOCBAQAogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUkFERU9OX1JCM0RfWkNBQ0hFX0NUTFNUQVQsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBSQURFT05fUkIzRF9aQ19GTFVTSF9BTEwpOwogCS8qIFdhaXQgdW50aWwgSURMRSAmIENMRUFOICovCi0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMCgweDE3MjAsIDApKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoMSA8PCAxNikgfCAoMSA8PCAxNykpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUkFERU9OX1dBSVRfVU5USUwsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBSQURFT05fV0FJVF8yRF9JRExFQ0xFQU4gfCBSQURFT05fV0FJVF8zRF9JRExFQ0xFQU4pOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUkFERU9OX0hPU1RfUEFUSF9DTlRMLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgcmRldi0+Y29uZmlnLnIxMDAuaGRwX2NudGwgfAogCQkJCVJBREVPTl9IRFBfUkVBRF9CVUZGRVJfSU5WQUxJREFURSk7CkBAIC0xNzAxLDcgKzE3MDMsNyBAQAogCX0KIAlmb3IgKGkgPSAwOyBpIDwgcmRldi0+dXNlY190aW1lb3V0OyBpKyspIHsKIAkJdG1wID0gUlJFRzMyKFJBREVPTl9SQkJNX1NUQVRVUyk7Ci0JCWlmICghKHRtcCAmICgxIDw8IDMxKSkpIHsKKwkJaWYgKCEodG1wICYgUkFERU9OX1JCQk1fQUNUSVZFKSkgewogCQkJcmV0dXJuIDA7CiAJCX0KIAkJRFJNX1VERUxBWSgxKTsKQEAgLTE3MTYsOCArMTcxOCw4IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgcmRldi0+dXNlY190aW1lb3V0OyBpKyspIHsKIAkJLyogcmVhZCBNQ19TVEFUVVMgKi8KLQkJdG1wID0gUlJFRzMyKDB4MDE1MCk7Ci0JCWlmICh0bXAgJiAoMSA8PCAyKSkgeworCQl0bXAgPSBSUkVHMzIoUkFERU9OX01DX1NUQVRVUyk7CisJCWlmICh0bXAgJiBSQURFT05fTUNfSURMRSkgewogCQkJcmV0dXJuIDA7CiAJCX0KIAkJRFJNX1VERUxBWSgxKTsKQEAgLTE3OTAsNyArMTc5Miw3IEBACiAJfQogCS8qIENoZWNrIGlmIEdQVSBpcyBpZGxlICovCiAJc3RhdHVzID0gUlJFRzMyKFJBREVPTl9SQkJNX1NUQVRVUyk7Ci0JaWYgKHN0YXR1cyAmICgxIDw8IDMxKSkgeworCWlmIChzdGF0dXMgJiBSQURFT05fUkJCTV9BQ1RJVkUpIHsKIAkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gcmVzZXQgR1BVIChSQkJNX1NUQVRVUz0weCUwOFgpXG4iLCBzdGF0dXMpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtMTgwMCw2ICsxODAyLDkgQEAKIAogdm9pZCByMTAwX3NldF9jb21tb25fcmVncyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcmRldi0+ZGRldjsKKwlib29sIGZvcmNlX2RhYzIgPSBmYWxzZTsKKwogCS8qIHNldCB0aGVzZSBzbyB0aGV5IGRvbid0IGludGVyZmVyZSB3aXRoIGFueXRoaW5nICovCiAJV1JFRzMyKFJBREVPTl9PVjBfU0NBTEVfQ05UTCwgMCk7CiAJV1JFRzMyKFJBREVPTl9TVUJQSUNfQ05UTCwgMCk7CkBAIC0xODA4LDYgKzE4MTMsNjggQEAKIAlXUkVHMzIoUkFERU9OX0RWSV9JMkNfQ05UTF8xLCAwKTsKIAlXUkVHMzIoUkFERU9OX0NBUDBfVFJJR19DTlRMLCAwKTsKIAlXUkVHMzIoUkFERU9OX0NBUDFfVFJJR19DTlRMLCAwKTsKKworCS8qIGFsd2F5cyBzZXQgdXAgZGFjMiBvbiBybjUwIGFuZCBzb21lIHJ2MTAwIGFzIGxvdHMKKwkgKiBvZiBzZXJ2ZXJzIHNlZW0gdG8gd2lyZSBpdCB1cCB0byBhIFZHQSBwb3J0IGJ1dAorCSAqIGRvbid0IHJlcG9ydCBpdCBpbiB0aGUgYmlvcyBjb25uZWN0b3IKKwkgKiB0YWJsZS4KKwkgKi8KKwlzd2l0Y2ggKGRldi0+cGRldi0+ZGV2aWNlKSB7CisJCS8qIFJONTAgKi8KKwljYXNlIDB4NTE1ZToKKwljYXNlIDB4NTk2OToKKwkJZm9yY2VfZGFjMiA9IHRydWU7CisJCWJyZWFrOworCQkvKiBSVjEwMCovCisJY2FzZSAweDUxNTk6CisJY2FzZSAweDUxNWE6CisJCS8qIERFTEwgdHJpcGxlIGhlYWQgc2VydmVycyAqLworCQlpZiAoKGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwMjggLyogREVMTCAqLykgJiYKKwkJICAgICgoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE2YykgfHwKKwkJICAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE2ZCkgfHwKKwkJICAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE2ZSkgfHwKKwkJICAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE2ZikgfHwKKwkJICAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE3MCkgfHwKKwkJICAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE3ZCkgfHwKKwkJICAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE3ZSkgfHwKKwkJICAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE4MykgfHwKKwkJICAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE4YSkgfHwKKwkJICAgICAoZGV2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IDB4MDE5YSkpKQorCQkJZm9yY2VfZGFjMiA9IHRydWU7CisJCWJyZWFrOworCX0KKworCWlmIChmb3JjZV9kYWMyKSB7CisJCXUzMiBkaXNwX2h3X2RlYnVnID0gUlJFRzMyKFJBREVPTl9ESVNQX0hXX0RFQlVHKTsKKwkJdTMyIHR2X2RhY19jbnRsID0gUlJFRzMyKFJBREVPTl9UVl9EQUNfQ05UTCk7CisJCXUzMiBkYWMyX2NudGwgPSBSUkVHMzIoUkFERU9OX0RBQ19DTlRMMik7CisKKwkJLyogRm9yIENSVCBvbiBEQUMyLCBkb24ndCB0dXJuIGl0IG9uIGlmIEJJT1MgZGlkbid0CisJCSAgIGVuYWJsZSBpdCwgZXZlbiBpdCdzIGRldGVjdGVkLgorCQkqLworCisJCS8qIGZvcmNlIGl0IHRvIGNydGMwICovCisJCWRhYzJfY250bCAmPSB+UkFERU9OX0RBQzJfREFDX0NMS19TRUw7CisJCWRhYzJfY250bCB8PSBSQURFT05fREFDMl9EQUMyX0NMS19TRUw7CisJCWRpc3BfaHdfZGVidWcgfD0gUkFERU9OX0NSVDJfRElTUDFfU0VMOworCisJCS8qIHNldCB1cCB0aGUgVFYgREFDICovCisJCXR2X2RhY19jbnRsICY9IH4oUkFERU9OX1RWX0RBQ19QRURFU1RBTCB8CisJCQkJIFJBREVPTl9UVl9EQUNfU1REX01BU0sgfAorCQkJCSBSQURFT05fVFZfREFDX1JEQUNQRCB8CisJCQkJIFJBREVPTl9UVl9EQUNfR0RBQ1BEIHwKKwkJCQkgUkFERU9OX1RWX0RBQ19CREFDUEQgfAorCQkJCSBSQURFT05fVFZfREFDX0JHQURKX01BU0sgfAorCQkJCSBSQURFT05fVFZfREFDX0RBQ0FESl9NQVNLKTsKKwkJdHZfZGFjX2NudGwgfD0gKFJBREVPTl9UVl9EQUNfTkJMQU5LIHwKKwkJCQlSQURFT05fVFZfREFDX05IT0xEIHwKKwkJCQlSQURFT05fVFZfREFDX1NURF9QUzIgfAorCQkJCSgweDU4IDw8IDE2KSk7CisKKwkJV1JFRzMyKFJBREVPTl9UVl9EQUNfQ05UTCwgdHZfZGFjX2NudGwpOworCQlXUkVHMzIoUkFERU9OX0RJU1BfSFdfREVCVUcsIGRpc3BfaHdfZGVidWcpOworCQlXUkVHMzIoUkFERU9OX0RBQ19DTlRMMiwgZGFjMl9jbnRsKTsKKwl9CiB9CiAKIC8qCkBAIC0xODg5LDE3ICsxOTU2LDIwIEBACiB2b2lkIHIxMDBfdnJhbV9pbml0X3NpemVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXU2NCBjb25maWdfYXBlcl9zaXplOwotCXUzMiBhY2Nlc3NpYmxlOwogCisJLyogd29yayBvdXQgYWNjZXNzaWJsZSBWUkFNICovCisJcmRldi0+bWMuYXBlcl9iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChyZGV2LT5kZGV2LCAwKTsKKwlyZGV2LT5tYy5hcGVyX3NpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihyZGV2LT5kZGV2LCAwKTsKKwlyZGV2LT5tYy52aXNpYmxlX3ZyYW1fc2l6ZSA9IHIxMDBfZ2V0X2FjY2Vzc2libGVfdnJhbShyZGV2KTsKKwkvKiBGSVhNRSB3ZSBkb24ndCB1c2UgdGhlIHNlY29uZCBhcGVydHVyZSB5ZXQgd2hlbiB3ZSBjb3VsZCB1c2UgaXQgKi8KKwlpZiAocmRldi0+bWMudmlzaWJsZV92cmFtX3NpemUgPiByZGV2LT5tYy5hcGVyX3NpemUpCisJCXJkZXYtPm1jLnZpc2libGVfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOwogCWNvbmZpZ19hcGVyX3NpemUgPSBSUkVHMzIoUkFERU9OX0NPTkZJR19BUEVSX1NJWkUpOwotCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgewogCQl1aW50MzJfdCB0b207CiAJCS8qIHJlYWQgTkJfVE9NIHRvIGdldCB0aGUgYW1vdW50IG9mIHJhbSBzdG9sZW4gZm9yIHRoZSBHUFUgKi8KIAkJdG9tID0gUlJFRzMyKFJBREVPTl9OQl9UT00pOwogCQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9ICgoKHRvbSA+PiAxNikgLSAodG9tICYgMHhmZmZmKSArIDEpIDw8IDE2KTsKLQkJLyogZm9yIElHUHMgd2UgbmVlZCB0byBrZWVwIFZSQU0gd2hlcmUgaXQgd2FzIHB1dCBieSB0aGUgQklPUyAqLwotCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gKHRvbSAmIDB4ZmZmZikgPDwgMTY7CiAJCVdSRUczMihSQURFT05fQ09ORklHX01FTVNJWkUsIHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplKTsKIAkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMucmVhbF92cmFtX3NpemU7CiAJfSBlbHNlIHsKQEAgLTE5MTEsMzAgKzE5ODEsMTkgQEAKIAkJCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gODE5MiAqIDEwMjQ7CiAJCQlXUkVHMzIoUkFERU9OX0NPTkZJR19NRU1TSVpFLCByZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSk7CiAJCX0KLQkJLyogbGV0IGRyaXZlciBwbGFjZSBWUkFNICovCi0JCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweEZGRkZGRkZGVUw7Ci0JCSAvKiBGaXggZm9yIFJONTAsIE02LCBNNyB3aXRoIDgvMTYvMzIoPz8pIE1CcyBvZiBWUkFNIC0gCi0JCSAgKiBOb3ZlbGwgYnVnIDIwNDg4MiArIGFsb25nIHdpdGggbG90cyBvZiB1YnVudHUgb25lcyAqLworCQkvKiBGaXggZm9yIFJONTAsIE02LCBNNyB3aXRoIDgvMTYvMzIoPz8pIE1CcyBvZiBWUkFNIC0gCisJCSAqIE5vdmVsbCBidWcgMjA0ODgyICsgYWxvbmcgd2l0aCBsb3RzIG9mIHVidW50dSBvbmVzCisJCSAqLwogCQlpZiAoY29uZmlnX2FwZXJfc2l6ZSA+IHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplKQogCQkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gY29uZmlnX2FwZXJfc2l6ZTsKIAkJZWxzZQogCQkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMucmVhbF92cmFtX3NpemU7CiAJfQotCi0JLyogd29yayBvdXQgYWNjZXNzaWJsZSBWUkFNICovCi0JYWNjZXNzaWJsZSA9IHIxMDBfZ2V0X2FjY2Vzc2libGVfdnJhbShyZGV2KTsKLQotCXJkZXYtPm1jLmFwZXJfYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQocmRldi0+ZGRldiwgMCk7Ci0JcmRldi0+bWMuYXBlcl9zaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4ocmRldi0+ZGRldiwgMCk7Ci0KLQlpZiAoYWNjZXNzaWJsZSA+IHJkZXYtPm1jLmFwZXJfc2l6ZSkKLQkJYWNjZXNzaWJsZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKLQotCWlmIChyZGV2LT5tYy5tY192cmFtX3NpemUgPiByZGV2LT5tYy5hcGVyX3NpemUpCisJLyogRklYTUUgcmVtb3ZlIHRoaXMgb25jZSB3ZSBzdXBwb3J0IHVubWFwcGFibGUgVlJBTSAqLworCWlmIChyZGV2LT5tYy5tY192cmFtX3NpemUgPiByZGV2LT5tYy5hcGVyX3NpemUpIHsKIAkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOwotCi0JaWYgKHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKQogCQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKKwl9CiB9CiAKIHZvaWQgcjEwMF92Z2Ffc2V0X3N0YXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBib29sIHN0YXRlKQpAQCAtMTk1MSwxMSArMjAxMCwxOCBAQAogCVdSRUczMihSQURFT05fQ09ORklHX0NOVEwsIHRlbXApOwogfQogCi12b2lkIHIxMDBfdnJhbV9pbmZvKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQordm9pZCByMTAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JcjEwMF92cmFtX2dldF90eXBlKHJkZXYpOworCXU2NCBiYXNlOwogCisJcjEwMF92cmFtX2dldF90eXBlKHJkZXYpOwogCXIxMDBfdnJhbV9pbml0X3NpemVzKHJkZXYpOworCWJhc2UgPSByZGV2LT5tYy5hcGVyX2Jhc2U7CisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkKKwkJYmFzZSA9IChSUkVHMzIoUkFERU9OX05CX1RPTSkgJiAweGZmZmYpIDw8IDE2OworCXJhZGVvbl92cmFtX2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYywgYmFzZSk7CisJaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSkKKwkJcmFkZW9uX2d0dF9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMpOwogfQogCiAKQEAgLTMyMjYsMTAgKzMyOTIsOSBAQAogdm9pZCByMTAwX21jX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHIxMDBfbWNfc2F2ZSAqc2F2ZSkKIHsKIAkvKiBVcGRhdGUgYmFzZSBhZGRyZXNzIGZvciBjcnRjICovCi0JV1JFRzMyKFJfMDAwMjNDX0RJU1BMQVlfQkFTRV9BRERSLCByZGV2LT5tYy52cmFtX2xvY2F0aW9uKTsKKwlXUkVHMzIoUl8wMDAyM0NfRElTUExBWV9CQVNFX0FERFIsIHJkZXYtPm1jLnZyYW1fc3RhcnQpOwogCWlmICghKHJkZXYtPmZsYWdzICYgUkFERU9OX1NJTkdMRV9DUlRDKSkgewotCQlXUkVHMzIoUl8wMDAzM0NfQ1JUQzJfRElTUExBWV9CQVNFX0FERFIsCi0JCQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbik7CisJCVdSRUczMihSXzAwMDMzQ19DUlRDMl9ESVNQTEFZX0JBU0VfQUREUiwgcmRldi0+bWMudnJhbV9zdGFydCk7CiAJfQogCS8qIFJlc3RvcmUgQ1JUQyByZWdpc3RlcnMgKi8KIAlXUkVHOChSXzAwMDNDMl9HRU5NT19XVCwgc2F2ZS0+R0VOTU9fV1QpOwpAQCAtMzM5MCwzMiArMzQ1NSw2IEBACiAJcmRldi0+YmlvcyA9IE5VTEw7CiB9CiAKLWludCByMTAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JaW50IHI7Ci0JdTMyIHRtcDsKLQotCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7Ci0JCXRtcCA9IEdfMDAwMTVDX01DX0ZCX1NUQVJUKFJSRUczMihSXzAwMDE1Q19OQl9UT00pKTsKLQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IHRtcCA8PCAxNjsKLQl9Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewotCQlyID0gcmFkZW9uX2FncF9pbml0KHJkZXYpOwotCQlpZiAocikgewotCQkJcmFkZW9uX2FncF9kaXNhYmxlKHJkZXYpOwotCQl9IGVsc2UgewotCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gcmRldi0+bWMuYWdwX2Jhc2U7Ci0JCX0KLQl9Ci0JciA9IHJhZGVvbl9tY19zZXR1cChyZGV2KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7Ci0JcmV0dXJuIDA7Ci19Ci0KIGludCByMTAwX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJaW50IHI7CkBAIC0zNDU4LDEyICszNDk3LDE1IEBACiAJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOwogCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLwogCXJhZGVvbl9wbV9pbml0KHJkZXYpOwotCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLwotCXIxMDBfdnJhbV9pbmZvKHJkZXYpOwotCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCi0JciA9IHIxMDBfbWNfaW5pdChyZGV2KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7CisJLyogaW5pdGlhbGl6ZSBBR1AgKi8KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCXIgPSByYWRlb25fYWdwX2luaXQocmRldik7CisJCWlmIChyKSB7CisJCQlyYWRlb25fYWdwX2Rpc2FibGUocmRldik7CisJCX0KKwl9CisJLyogaW5pdGlhbGl6ZSBWUkFNICovCisJcjEwMF9tY19pbml0KHJkZXYpOwogCS8qIEZlbmNlIGRyaXZlciAqLwogCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CiAJaWYgKHIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IyMDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jCmluZGV4IGZmMWUwY2QuLjExNDZjOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjIwMC5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAicmFkZW9uX3JlZy5oIgogI2luY2x1ZGUgInJhZGVvbi5oIgogCisjaW5jbHVkZSAicjEwMGQuaCIKICNpbmNsdWRlICJyMjAwX3JlZ19zYWZlLmgiCiAKICNpbmNsdWRlICJyMTAwX3RyYWNrLmgiCkBAIC03OSw2ICs4MCw1MSBAQAogCXJldHVybiB2dHhfc2l6ZTsKIH0KIAoraW50IHIyMDBfY29weV9kbWEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCSAgdWludDY0X3Qgc3JjX29mZnNldCwKKwkJICB1aW50NjRfdCBkc3Rfb2Zmc2V0LAorCQkgIHVuc2lnbmVkIG51bV9wYWdlcywKKwkJICBzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSkKK3sKKwl1aW50MzJfdCBzaXplOworCXVpbnQzMl90IGN1cl9zaXplOworCWludCBpLCBudW1fbG9vcHM7CisJaW50IHIgPSAwOworCisJLyogcmFkZW9uIHBpdGNoIGlzIC82NCAqLworCXNpemUgPSBudW1fcGFnZXMgPDwgUEFHRV9TSElGVDsKKwludW1fbG9vcHMgPSBESVZfUk9VTkRfVVAoc2l6ZSwgMHgxRkZGRkYpOworCXIgPSByYWRlb25fcmluZ19sb2NrKHJkZXYsIG51bV9sb29wcyAqIDQgKyA2NCk7CisJaWYgKHIpIHsKKwkJRFJNX0VSUk9SKCJyYWRlb246IG1vdmluZyBibyAoJWQpLlxuIiwgcik7CisJCXJldHVybiByOworCX0KKwkvKiBNdXN0IHdhaXQgZm9yIDJEIGlkbGUgJiBjbGVhbiBiZWZvcmUgRE1BIG9yIGhhbmdzIG1pZ2h0IGhhcHBlbiAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUkFERU9OX1dBSVRfVU5USUwsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoMSA8PCAxNikpOworCWZvciAoaSA9IDA7IGkgPCBudW1fbG9vcHM7IGkrKykgeworCQljdXJfc2l6ZSA9IHNpemU7CisJCWlmIChjdXJfc2l6ZSA+IDB4MUZGRkZGKSB7CisJCQljdXJfc2l6ZSA9IDB4MUZGRkZGOworCQl9CisJCXNpemUgLT0gY3VyX3NpemU7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoMHg3MjAsIDIpKTsKKwkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgc3JjX29mZnNldCk7CisJCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGRzdF9vZmZzZXQpOworCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBjdXJfc2l6ZSB8ICgxIDw8IDMxKSB8ICgxIDw8IDMwKSk7CisJCXNyY19vZmZzZXQgKz0gY3VyX3NpemU7CisJCWRzdF9vZmZzZXQgKz0gY3VyX3NpemU7CisJfQorCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUkFERU9OX1dBSVRfVU5USUwsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBSQURFT05fV0FJVF9ETUFfR1VJX0lETEUpOworCWlmIChmZW5jZSkgeworCQlyID0gcmFkZW9uX2ZlbmNlX2VtaXQocmRldiwgZmVuY2UpOworCX0KKwlyYWRlb25fcmluZ191bmxvY2tfY29tbWl0KHJkZXYpOworCXJldHVybiByOworfQorCisKIHN0YXRpYyBpbnQgcjIwMF9nZXRfdnR4X3NpemVfMSh1aW50MzJfdCB2dHhfZm10XzEpCiB7CiAJaW50IHZ0eF9zaXplLCBpLCB0ZXhfc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKaW5kZXggNDNiNTVhMC4uNGNlZjkwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwLmMKQEAgLTExNywxOCArMTE3LDE5IEBACiAJciA9IHJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fcGluKHJkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKKwlyYWRlb25fZ2FydF9yZXN0b3JlKHJkZXYpOwogCS8qIGRpc2NhcmQgbWVtb3J5IHJlcXVlc3Qgb3V0c2lkZSBvZiBjb25maWd1cmVkIHJhbmdlICovCiAJdG1wID0gUkFERU9OX1BDSUVfVFhfR0FSVF9VTk1BUFBFRF9BQ0NFU1NfRElTQ0FSRDsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0NOVEwsIHRtcCk7Ci0JV1JFRzMyX1BDSUUoUkFERU9OX1BDSUVfVFhfR0FSVF9TVEFSVF9MTywgcmRldi0+bWMuZ3R0X2xvY2F0aW9uKTsKLQl0bXAgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIFJBREVPTl9HUFVfUEFHRV9TSVpFOworCVdSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0dBUlRfU1RBUlRfTE8sIHJkZXYtPm1jLmd0dF9zdGFydCk7CisJdG1wID0gcmRldi0+bWMuZ3R0X2VuZCAmIH5SQURFT05fR1BVX1BBR0VfTUFTSzsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0VORF9MTywgdG1wKTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX1NUQVJUX0hJLCAwKTsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0VORF9ISSwgMCk7CiAJdGFibGVfYWRkciA9IHJkZXYtPmdhcnQudGFibGVfYWRkcjsKIAlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9HQVJUX0JBU0UsIHRhYmxlX2FkZHIpOwogCS8qIEZJWE1FOiBzZXR1cCBkZWZhdWx0IHBhZ2UgKi8KLQlXUkVHMzJfUENJRShSQURFT05fUENJRV9UWF9ESVNDQVJEX1JEX0FERFJfTE8sIHJkZXYtPm1jLnZyYW1fbG9jYXRpb24pOworCVdSRUczMl9QQ0lFKFJBREVPTl9QQ0lFX1RYX0RJU0NBUkRfUkRfQUREUl9MTywgcmRldi0+bWMudnJhbV9zdGFydCk7CiAJV1JFRzMyX1BDSUUoUkFERU9OX1BDSUVfVFhfRElTQ0FSRF9SRF9BRERSX0hJLCAwKTsKIAkvKiBDbGVhciBlcnJvciAqLwogCVdSRUczMl9QQ0lFKDB4MTgsIDApOwpAQCAtMTc0LDE4ICsxNzUsMjAgQEAKIAkvKiBXaG8gZXZlciBjYWxsIHJhZGVvbl9mZW5jZV9lbWl0IHNob3VsZCBjYWxsIHJpbmdfbG9jayBhbmQgYXNrCiAJICogZm9yIGVub3VnaCBzcGFjZSAodG9kYXkgY2FsbGVyIGFyZSBpYiBzY2hlZHVsZSBhbmQgYnVmZmVyIG1vdmUpICovCiAJLyogV3JpdGUgU0MgcmVnaXN0ZXIgc28gU0MgJiBVUyBhc3NlcnQgaWRsZSAqLwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoMHg0M0UwLCAwKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChSMzAwX1JFX1NDSVNTT1JTX1RMLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgMCk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMCgweDQzRTQsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFIzMDBfUkVfU0NJU1NPUlNfQlIsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKIAkvKiBGbHVzaCAzRCBjYWNoZSAqLwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoMHg0RTRDLCAwKSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKDIgPDwgMCkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoMHg0RjE4LCAwKSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgKDEgPDwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUjMwMF9SQjNEX0RTVENBQ0hFX0NUTFNUQVQsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBSMzAwX1JCM0RfRENfRkxVU0gpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUjMwMF9SQjNEX1pDQUNIRV9DVExTVEFULCAwKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUjMwMF9aQ19GTFVTSCk7CiAJLyogV2FpdCB1bnRpbCBJRExFICYgQ0xFQU4gKi8KLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKDB4MTcyMCwgMCkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsICgxIDw8IDE3KSB8ICgxIDw8IDE2KSAgfCAoMSA8PCA5KSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChSQURFT05fV0FJVF9VTlRJTCwgMCkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChSQURFT05fV0FJVF8zRF9JRExFQ0xFQU4gfAorCQkJCSBSQURFT05fV0FJVF8yRF9JRExFQ0xFQU4gfAorCQkJCSBSQURFT05fV0FJVF9ETUFfR1VJX0lETEUpKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFJBREVPTl9IT1NUX1BBVEhfQ05UTCwgMCkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIHJkZXYtPmNvbmZpZy5yMzAwLmhkcF9jbnRsIHwKIAkJCQlSQURFT05fSERQX1JFQURfQlVGRkVSX0lOVkFMSURBVEUpOwpAQCAtMTk4LDUwICsyMDEsNiBAQAogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFJBREVPTl9TV19JTlRfRklSRSk7CiB9CiAKLWludCByMzAwX2NvcHlfZG1hKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAotCQkgIHVpbnQ2NF90IHNyY19vZmZzZXQsCi0JCSAgdWludDY0X3QgZHN0X29mZnNldCwKLQkJICB1bnNpZ25lZCBudW1fcGFnZXMsCi0JCSAgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpCi17Ci0JdWludDMyX3Qgc2l6ZTsKLQl1aW50MzJfdCBjdXJfc2l6ZTsKLQlpbnQgaSwgbnVtX2xvb3BzOwotCWludCByID0gMDsKLQotCS8qIHJhZGVvbiBwaXRjaCBpcyAvNjQgKi8KLQlzaXplID0gbnVtX3BhZ2VzIDw8IFBBR0VfU0hJRlQ7Ci0JbnVtX2xvb3BzID0gRElWX1JPVU5EX1VQKHNpemUsIDB4MUZGRkZGKTsKLQlyID0gcmFkZW9uX3JpbmdfbG9jayhyZGV2LCBudW1fbG9vcHMgKiA0ICsgNjQpOwotCWlmIChyKSB7Ci0JCURSTV9FUlJPUigicmFkZW9uOiBtb3ZpbmcgYm8gKCVkKS5cbiIsIHIpOwotCQlyZXR1cm4gcjsKLQl9Ci0JLyogTXVzdCB3YWl0IGZvciAyRCBpZGxlICYgY2xlYW4gYmVmb3JlIERNQSBvciBoYW5ncyBtaWdodCBoYXBwZW4gKi8KLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFJBREVPTl9XQUlUX1VOVElMLCAwICkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsICgxIDw8IDE2KSk7Ci0JZm9yIChpID0gMDsgaSA8IG51bV9sb29wczsgaSsrKSB7Ci0JCWN1cl9zaXplID0gc2l6ZTsKLQkJaWYgKGN1cl9zaXplID4gMHgxRkZGRkYpIHsKLQkJCWN1cl9zaXplID0gMHgxRkZGRkY7Ci0JCX0KLQkJc2l6ZSAtPSBjdXJfc2l6ZTsKLQkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMCgweDcyMCwgMikpOwotCQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBzcmNfb2Zmc2V0KTsKLQkJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZHN0X29mZnNldCk7Ci0JCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGN1cl9zaXplIHwgKDEgPDwgMzEpIHwgKDEgPDwgMzApKTsKLQkJc3JjX29mZnNldCArPSBjdXJfc2l6ZTsKLQkJZHN0X29mZnNldCArPSBjdXJfc2l6ZTsKLQl9Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChSQURFT05fV0FJVF9VTlRJTCwgMCkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFJBREVPTl9XQUlUX0RNQV9HVUlfSURMRSk7Ci0JaWYgKGZlbmNlKSB7Ci0JCXIgPSByYWRlb25fZmVuY2VfZW1pdChyZGV2LCBmZW5jZSk7Ci0JfQotCXJhZGVvbl9yaW5nX3VubG9ja19jb21taXQocmRldik7Ci0JcmV0dXJuIHI7Ci19Ci0KIHZvaWQgcjMwMF9yaW5nX3N0YXJ0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXVuc2lnbmVkIGdiX3RpbGVfY29uZmlnOwpAQCAtMjgxLDggKzI0MCw4IEBACiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwKIAkJCSAgUkFERU9OX1dBSVRfMkRfSURMRUNMRUFOIHwKIAkJCSAgUkFERU9OX1dBSVRfM0RfSURMRUNMRUFOKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKDB4MTcwQywgMCkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIDEgPDwgMzEpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUjMwMF9EU1RfUElQRV9DT05GSUcsIDApKTsKKwlyYWRlb25fcmluZ193cml0ZShyZGV2LCBSMzAwX1BJUEVfQVVUT19DT05GSUcpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDAoUjMwMF9HQl9TRUxFQ1QsIDApKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAwKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFIzMDBfR0JfRU5BQkxFLCAwKSk7CkBAIC0zNDksOCArMzA4LDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCByZGV2LT51c2VjX3RpbWVvdXQ7IGkrKykgewogCQkvKiByZWFkIE1DX1NUQVRVUyAqLwotCQl0bXAgPSBSUkVHMzIoMHgwMTUwKTsKLQkJaWYgKHRtcCAmICgxIDw8IDQpKSB7CisJCXRtcCA9IFJSRUczMihSQURFT05fTUNfU1RBVFVTKTsKKwkJaWYgKHRtcCAmIFIzMDBfTUNfSURMRSkgewogCQkJcmV0dXJuIDA7CiAJCX0KIAkJRFJNX1VERUxBWSgxKTsKQEAgLTM5NSw4ICszNTQsOCBAQAogCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwogCX0KIAotCXRtcCA9IFJSRUczMigweDE3MEMpOwotCVdSRUczMigweDE3MEMsIHRtcCB8ICgxIDw8IDMxKSk7CisJdG1wID0gUlJFRzMyKFIzMDBfRFNUX1BJUEVfQ09ORklHKTsKKwlXUkVHMzIoUjMwMF9EU1RfUElQRV9DT05GSUcsIHRtcCB8IFIzMDBfUElQRV9BVVRPX0NPTkZJRyk7CiAKIAlXUkVHMzIoUjMwMF9SQjJEX0RTVENBQ0hFX01PREUsCiAJICAgICAgIFIzMDBfRENfQVVUT0ZMVVNIX0VOQUJMRSB8CkBAIC00MzcsOCArMzk2LDggQEAKIAkJCS8qIEdBIHN0aWxsIGJ1c3kgc29mdCByZXNldCBpdCAqLwogCQkJV1JFRzMyKDB4NDI5QywgMHgyMDApOwogCQkJV1JFRzMyKFIzMDBfVkFQX1BWU19TVEFURV9GTFVTSF9SRUcsIDApOwotCQkJV1JFRzMyKDB4NDNFMCwgMCk7Ci0JCQlXUkVHMzIoMHg0M0U0LCAwKTsKKwkJCVdSRUczMihSMzAwX1JFX1NDSVNTT1JTX1RMLCAwKTsKKwkJCVdSRUczMihSMzAwX1JFX1NDSVNTT1JTX0JSLCAwKTsKIAkJCVdSRUczMigweDI0QUMsIDApOwogCQl9CiAJCS8qIFdhaXQgdG8gcHJldmVudCByYWNlIGluIFJCQk1fU1RBVFVTICovCkBAIC00ODgsNyArNDQ3LDcgQEAKIAl9CiAJLyogQ2hlY2sgaWYgR1BVIGlzIGlkbGUgKi8KIAlzdGF0dXMgPSBSUkVHMzIoUkFERU9OX1JCQk1fU1RBVFVTKTsKLQlpZiAoc3RhdHVzICYgKDEgPDwgMzEpKSB7CisJaWYgKHN0YXR1cyAmIFJBREVPTl9SQkJNX0FDVElWRSkgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZXNldCBHUFUgKFJCQk1fU1RBVFVTPTB4JTA4WClcbiIsIHN0YXR1cyk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC01MDAsMTMgKzQ1OSwxMyBAQAogLyoKICAqIHIzMDAscjM1MCxydjM1MCxydjM4MCBWUkFNIGluZm8KICAqLwotdm9pZCByMzAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcjMwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCXVpbnQzMl90IHRtcDsKKwl1NjQgYmFzZTsKKwl1MzIgdG1wOwogCiAJLyogRERSIGZvciBhbGwgY2FyZCBhZnRlciBSMzAwICYgSUdQICovCiAJcmRldi0+bWMudnJhbV9pc19kZHIgPSB0cnVlOwotCiAJdG1wID0gUlJFRzMyKFJBREVPTl9NRU1fQ05UTCk7CiAJdG1wICY9IFIzMDBfTUVNX05VTV9DSEFOTkVMU19NQVNLOwogCXN3aXRjaCAodG1wKSB7CkBAIC01MTUsOCArNDc0LDEzIEBACiAJY2FzZSAyOiByZGV2LT5tYy52cmFtX3dpZHRoID0gMjU2OyBicmVhazsKIAlkZWZhdWx0OiAgcmRldi0+bWMudnJhbV93aWR0aCA9IDEyODsgYnJlYWs7CiAJfQotCiAJcjEwMF92cmFtX2luaXRfc2l6ZXMocmRldik7CisJYmFzZSA9IHJkZXYtPm1jLmFwZXJfYmFzZTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKQorCQliYXNlID0gKFJSRUczMihSQURFT05fTkJfVE9NKSAmIDB4ZmZmZikgPDwgMTY7CisJcmFkZW9uX3ZyYW1fbG9jYXRpb24ocmRldiwgJnJkZXYtPm1jLCBiYXNlKTsKKwlpZiAoIShyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApKQorCQlyYWRlb25fZ3R0X2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYyk7CiB9CiAKIHZvaWQgcnYzNzBfc2V0X3BjaWVfbGFuZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBsYW5lcykKQEAgLTU3OCw2ICs1NDIsNDAgQEAKIAogfQogCitpbnQgcnYzNzBfZ2V0X3BjaWVfbGFuZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJdTMyIGxpbmtfd2lkdGhfY250bDsKKworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApCisJCXJldHVybiAwOworCisJaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkpCisJCXJldHVybiAwOworCisJLyogRklYTUUgd2FpdCBmb3IgaWRsZSAqLworCisJaWYgKHJkZXYtPmZhbWlseSA8IENISVBfUjYwMCkKKwkJbGlua193aWR0aF9jbnRsID0gUlJFRzMyX1BDSUUoUkFERU9OX1BDSUVfTENfTElOS19XSURUSF9DTlRMKTsKKwllbHNlCisJCWxpbmtfd2lkdGhfY250bCA9IFJSRUczMl9QQ0lFX1AoUkFERU9OX1BDSUVfTENfTElOS19XSURUSF9DTlRMKTsKKworCXN3aXRjaCAoKGxpbmtfd2lkdGhfY250bCAmIFJBREVPTl9QQ0lFX0xDX0xJTktfV0lEVEhfUkRfTUFTSykgPj4gUkFERU9OX1BDSUVfTENfTElOS19XSURUSF9SRF9TSElGVCkgeworCWNhc2UgUkFERU9OX1BDSUVfTENfTElOS19XSURUSF9YMDoKKwkJcmV0dXJuIDA7CisJY2FzZSBSQURFT05fUENJRV9MQ19MSU5LX1dJRFRIX1gxOgorCQlyZXR1cm4gMTsKKwljYXNlIFJBREVPTl9QQ0lFX0xDX0xJTktfV0lEVEhfWDI6CisJCXJldHVybiAyOworCWNhc2UgUkFERU9OX1BDSUVfTENfTElOS19XSURUSF9YNDoKKwkJcmV0dXJuIDQ7CisJY2FzZSBSQURFT05fUENJRV9MQ19MSU5LX1dJRFRIX1g4OgorCQlyZXR1cm4gODsKKwljYXNlIFJBREVPTl9QQ0lFX0xDX0xJTktfV0lEVEhfWDE2OgorCWRlZmF1bHQ6CisJCXJldHVybiAxNjsKKwl9Cit9CisKICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIHN0YXRpYyBpbnQgcnYzNzBfZGVidWdmc19wY2llX2dhcnRfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCiB7CkBAIC03MDcsNiArNzA1LDggQEAKIAkJCXRpbGVfZmxhZ3MgfD0gUjMwMF9UWE9fTUFDUk9fVElMRTsKIAkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pCiAJCQl0aWxlX2ZsYWdzIHw9IFIzMDBfVFhPX01JQ1JPX1RJTEU7CisJCWVsc2UgaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk9fU1FVQVJFKQorCQkJdGlsZV9mbGFncyB8PSBSMzAwX1RYT19NSUNST19USUxFX1NRVUFSRTsKIAogCQl0bXAgPSBpZHhfdmFsdWUgKyAoKHUzMilyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KTsKIAkJdG1wIHw9IHRpbGVfZmxhZ3M7CkBAIC03NTcsNiArNzU3LDggQEAKIAkJCXRpbGVfZmxhZ3MgfD0gUjMwMF9DT0xPUl9USUxFX0VOQUJMRTsKIAkJaWYgKHJlbG9jLT5sb2JqLnRpbGluZ19mbGFncyAmIFJBREVPTl9USUxJTkdfTUlDUk8pCiAJCQl0aWxlX2ZsYWdzIHw9IFIzMDBfQ09MT1JfTUlDUk9USUxFX0VOQUJMRTsKKwkJZWxzZSBpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NSUNST19TUVVBUkUpCisJCQl0aWxlX2ZsYWdzIHw9IFIzMDBfQ09MT1JfTUlDUk9USUxFX1NRVUFSRV9FTkFCTEU7CiAKIAkJdG1wID0gaWR4X3ZhbHVlICYgfigweDcgPDwgMTYpOwogCQl0bXAgfD0gdGlsZV9mbGFnczsKQEAgLTgyOCw3ICs4MzAsOSBAQAogCQlpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NQUNSTykKIAkJCXRpbGVfZmxhZ3MgfD0gUjMwMF9ERVBUSE1BQ1JPVElMRV9FTkFCTEU7CiAJCWlmIChyZWxvYy0+bG9iai50aWxpbmdfZmxhZ3MgJiBSQURFT05fVElMSU5HX01JQ1JPKQotCQkJdGlsZV9mbGFncyB8PSBSMzAwX0RFUFRITUlDUk9USUxFX1RJTEVEOzsKKwkJCXRpbGVfZmxhZ3MgfD0gUjMwMF9ERVBUSE1JQ1JPVElMRV9USUxFRDsKKwkJZWxzZSBpZiAocmVsb2MtPmxvYmoudGlsaW5nX2ZsYWdzICYgUkFERU9OX1RJTElOR19NSUNST19TUVVBUkUpCisJCQl0aWxlX2ZsYWdzIHw9IFIzMDBfREVQVEhNSUNST1RJTEVfVElMRURfU1FVQVJFOwogCiAJCXRtcCA9IGlkeF92YWx1ZSAmIH4oMHg3IDw8IDE2KTsKIAkJdG1wIHw9IHRpbGVfZmxhZ3M7CkBAIC0xMzg3LDEyICsxMzkxLDE1IEBACiAJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOwogCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLwogCXJhZGVvbl9wbV9pbml0KHJkZXYpOwotCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLwotCXIzMDBfdnJhbV9pbmZvKHJkZXYpOwotCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCi0JciA9IHI0MjBfbWNfaW5pdChyZGV2KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7CisJLyogaW5pdGlhbGl6ZSBBR1AgKi8KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCXIgPSByYWRlb25fYWdwX2luaXQocmRldik7CisJCWlmIChyKSB7CisJCQlyYWRlb25fYWdwX2Rpc2FibGUocmRldik7CisJCX0KKwl9CisJLyogaW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAqLworCXIzMDBfbWNfaW5pdChyZGV2KTsKIAkvKiBGZW5jZSBkcml2ZXIgKi8KIAlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOwogCWlmIChyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX2NtZGJ1Zi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX2NtZGJ1Zi5jCmluZGV4IDM0YmZmYTAuLmVhNDZkNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9jbWRidWYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfY21kYnVmLmMKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJkcm0uaCIKKyNpbmNsdWRlICJkcm1fYnVmZmVyLmgiCiAjaW5jbHVkZSAicmFkZW9uX2RybS5oIgogI2luY2x1ZGUgInJhZGVvbl9kcnYuaCIKICNpbmNsdWRlICJyMzAwX3JlZy5oIgpAQCAtMjk5LDQ2ICszMDAsNDIgQEAKIAlpbnQgcmVnOwogCWludCBzejsKIAlpbnQgaTsKLQlpbnQgdmFsdWVzWzY0XTsKKwl1MzIgKnZhbHVlOwogCVJJTkdfTE9DQUxTOwogCiAJc3ogPSBoZWFkZXIucGFja2V0MC5jb3VudDsKIAlyZWcgPSAoaGVhZGVyLnBhY2tldDAucmVnaGkgPDwgOCkgfCBoZWFkZXIucGFja2V0MC5yZWdsbzsKIAogCWlmICgoc3ogPiA2NCkgfHwgKHN6IDwgMCkpIHsKLQkJRFJNX0VSUk9SCi0JCSAgICAoIkNhbm5vdCBlbWl0IG1vcmUgdGhhbiA2NCB2YWx1ZXMgYXQgYSB0aW1lIChyZWc9JTA0eCBzej0lZClcbiIsCi0JCSAgICAgcmVnLCBzeik7CisJCURSTV9FUlJPUigiQ2Fubm90IGVtaXQgbW9yZSB0aGFuIDY0IHZhbHVlcyBhdCBhIHRpbWUgKHJlZz0lMDR4IHN6PSVkKVxuIiwKKwkJCSByZWcsIHN6KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCiAJZm9yIChpID0gMDsgaSA8IHN6OyBpKyspIHsKLQkJdmFsdWVzW2ldID0gKChpbnQgKiljbWRidWYtPmJ1ZilbaV07CiAJCXN3aXRjaCAocjMwMF9yZWdfZmxhZ3NbKHJlZyA+PiAyKSArIGldKSB7CiAJCWNhc2UgTUFSS19TQUZFOgogCQkJYnJlYWs7CiAJCWNhc2UgTUFSS19DSEVDS19PRkZTRVQ6Ci0JCQlpZiAoIXJhZGVvbl9jaGVja19vZmZzZXQoZGV2X3ByaXYsICh1MzIpIHZhbHVlc1tpXSkpIHsKLQkJCQlEUk1fRVJST1IKLQkJCQkgICAgKCJPZmZzZXQgZmFpbGVkIHJhbmdlIGNoZWNrIChyZWc9JTA0eCBzej0lZClcbiIsCi0JCQkJICAgICByZWcsIHN6KTsKKwkJCXZhbHVlID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCBpKTsKKwkJCWlmICghcmFkZW9uX2NoZWNrX29mZnNldChkZXZfcHJpdiwgKnZhbHVlKSkgeworCQkJCURSTV9FUlJPUigiT2Zmc2V0IGZhaWxlZCByYW5nZSBjaGVjayAocmVnPSUwNHggc3o9JWQpXG4iLAorCQkJCQkgcmVnLCBzeik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCURSTV9FUlJPUigiUmVnaXN0ZXIgJTA0eCBmYWlsZWQgY2hlY2sgYXMgZmxhZz0lMDJ4XG4iLAotCQkJCSAgcmVnICsgaSAqIDQsIHIzMDBfcmVnX2ZsYWdzWyhyZWcgPj4gMikgKyBpXSk7CisJCQkJcmVnICsgaSAqIDQsIHIzMDBfcmVnX2ZsYWdzWyhyZWcgPj4gMikgKyBpXSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAogCUJFR0lOX1JJTkcoMSArIHN6KTsKIAlPVVRfUklORyhDUF9QQUNLRVQwKHJlZywgc3ogLSAxKSk7Ci0JT1VUX1JJTkdfVEFCTEUodmFsdWVzLCBzeik7CisJT1VUX1JJTkdfRFJNX0JVRkZFUihjbWRidWYtPmJ1ZmZlciwgc3opOwogCUFEVkFOQ0VfUklORygpOwogCi0JY21kYnVmLT5idWYgKz0gc3ogKiA0OwotCWNtZGJ1Zi0+YnVmc3ogLT0gc3ogKiA0OwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM2Miw3ICszNTksNyBAQAogCWlmICghc3opCiAJCXJldHVybiAwOwogCi0JaWYgKHN6ICogNCA+IGNtZGJ1Zi0+YnVmc3opCisJaWYgKHN6ICogNCA+IGRybV9idWZmZXJfdW5wcm9jZXNzZWQoY21kYnVmLT5idWZmZXIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChyZWcgKyBzeiAqIDQgPj0gMHgxMDAwMCkgewpAQCAtMzgwLDEyICszNzcsOSBAQAogCiAJQkVHSU5fUklORygxICsgc3opOwogCU9VVF9SSU5HKENQX1BBQ0tFVDAocmVnLCBzeiAtIDEpKTsKLQlPVVRfUklOR19UQUJMRSgoaW50ICopY21kYnVmLT5idWYsIHN6KTsKKwlPVVRfUklOR19EUk1fQlVGRkVSKGNtZGJ1Zi0+YnVmZmVyLCBzeik7CiAJQURWQU5DRV9SSU5HKCk7CiAKLQljbWRidWYtPmJ1ZiArPSBzeiAqIDQ7Ci0JY21kYnVmLT5idWZzeiAtPSBzeiAqIDQ7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDA3LDcgKzQwMSw3IEBACiAKIAlpZiAoIXN6KQogCQlyZXR1cm4gMDsKLQlpZiAoc3ogKiAxNiA+IGNtZGJ1Zi0+YnVmc3opCisJaWYgKHN6ICogMTYgPiBkcm1fYnVmZmVyX3VucHJvY2Vzc2VkKGNtZGJ1Zi0+YnVmZmVyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBWQVAgaXMgdmVyeSBzZW5zaXRpdmUgc28gd2UgcHVyZ2UgY2FjaGUgYmVmb3JlIHdlIHByb2dyYW0gaXQKQEAgLTQyNiw3ICs0MjAsNyBAQAogCUJFR0lOX1JJTkcoMyArIHN6ICogNCk7CiAJT1VUX1JJTkdfUkVHKFIzMDBfVkFQX1BWU19VUExPQURfQUREUkVTUywgYWRkcik7CiAJT1VUX1JJTkcoQ1BfUEFDS0VUMF9UQUJMRShSMzAwX1ZBUF9QVlNfVVBMT0FEX0RBVEEsIHN6ICogNCAtIDEpKTsKLQlPVVRfUklOR19UQUJMRSgoaW50ICopY21kYnVmLT5idWYsIHN6ICogNCk7CisJT1VUX1JJTkdfRFJNX0JVRkZFUihjbWRidWYtPmJ1ZmZlciwgc3ogKiA0KTsKIAlBRFZBTkNFX1JJTkcoKTsKIAogCUJFR0lOX1JJTkcoMik7CkBAIC00MzQsOSArNDI4LDYgQEAKIAlPVVRfUklORygwKTsKIAlBRFZBTkNFX1JJTkcoKTsKIAotCWNtZGJ1Zi0+YnVmICs9IHN6ICogMTY7Ci0JY21kYnVmLT5idWZzeiAtPSBzeiAqIDE2OwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ0OSwxNCArNDQwLDE0IEBACiB7CiAJUklOR19MT0NBTFM7CiAKLQlpZiAoOCAqIDQgPiBjbWRidWYtPmJ1ZnN6KQorCWlmICg4ICogNCA+IGRybV9idWZmZXJfdW5wcm9jZXNzZWQoY21kYnVmLT5idWZmZXIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCUJFR0lOX1JJTkcoMTApOwogCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjIwMF8zRF9EUkFXX0lNTURfMiwgOCkpOwogCU9VVF9SSU5HKFIzMDBfUFJJTV9UWVBFX1BPSU5UIHwgUjMwMF9QUklNX1dBTEtfUklORyB8CiAJCSAoMSA8PCBSMzAwX1BSSU1fTlVNX1ZFUlRJQ0VTX1NISUZUKSk7Ci0JT1VUX1JJTkdfVEFCTEUoKGludCAqKWNtZGJ1Zi0+YnVmLCA4KTsKKwlPVVRfUklOR19EUk1fQlVGRkVSKGNtZGJ1Zi0+YnVmZmVyLCA4KTsKIAlBRFZBTkNFX1JJTkcoKTsKIAogCUJFR0lOX1JJTkcoNCk7CkBAIC00NjgsOSArNDU5LDYgQEAKIAkvKiBzZXQgZmx1c2ggZmxhZyAqLwogCWRldl9wcml2LT50cmFja19mbHVzaCB8PSBSQURFT05fRkxVU0hfRU1JVEVEOwogCi0JY21kYnVmLT5idWYgKz0gOCAqIDQ7Ci0JY21kYnVmLT5idWZzeiAtPSA4ICogNDsKLQogCXJldHVybiAwOwogfQogCkBAIC00ODAsMjggKzQ2OCwyOSBAQAogewogCWludCBjb3VudCwgaSwgazsKICNkZWZpbmUgTUFYX0FSUkFZX1BBQ0tFVCAgNjQKLQl1MzIgcGF5bG9hZFtNQVhfQVJSQVlfUEFDS0VUXTsKKwl1MzIgKmRhdGE7CiAJdTMyIG5hcnJheXM7CiAJUklOR19MT0NBTFM7CiAKLQljb3VudCA9IChoZWFkZXIgPj4gMTYpICYgMHgzZmZmOworCWNvdW50ID0gKGhlYWRlciAmIFJBREVPTl9DUF9QQUNLRVRfQ09VTlRfTUFTSykgPj4gMTY7CiAKIAlpZiAoKGNvdW50ICsgMSkgPiBNQVhfQVJSQVlfUEFDS0VUKSB7CiAJCURSTV9FUlJPUigiVG9vIGxhcmdlIHBheWxvYWQgaW4gM0RfTE9BRF9WQlBOVFIgKGNvdW50PSVkKVxuIiwKIAkJCSAgY291bnQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JbWVtc2V0KHBheWxvYWQsIDAsIE1BWF9BUlJBWV9QQUNLRVQgKiA0KTsKLQltZW1jcHkocGF5bG9hZCwgY21kYnVmLT5idWYgKyA0LCAoY291bnQgKyAxKSAqIDQpOwotCiAJLyogY2FyZWZ1bGx5IGNoZWNrIHBhY2tldCBjb250ZW50cyAqLwogCi0JbmFycmF5cyA9IHBheWxvYWRbMF07CisJLyogV2UgaGF2ZSBhbHJlYWR5IHJlYWQgdGhlIGhlYWRlciBzbyBhZHZhbmNlIHRoZSBidWZmZXIuICovCisJZHJtX2J1ZmZlcl9hZHZhbmNlKGNtZGJ1Zi0+YnVmZmVyLCA0KTsKKworCW5hcnJheXMgPSAqKHUzMiAqKWRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChjbWRidWYtPmJ1ZmZlciwgMCk7CiAJayA9IDA7CiAJaSA9IDE7CiAJd2hpbGUgKChrIDwgbmFycmF5cykgJiYgKGkgPCAoY291bnQgKyAxKSkpIHsKIAkJaSsrOwkJLyogc2tpcCBhdHRyaWJ1dGUgZmllbGQgKi8KLQkJaWYgKCFyYWRlb25fY2hlY2tfb2Zmc2V0KGRldl9wcml2LCBwYXlsb2FkW2ldKSkgeworCQlkYXRhID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCBpKTsKKwkJaWYgKCFyYWRlb25fY2hlY2tfb2Zmc2V0KGRldl9wcml2LCAqZGF0YSkpIHsKIAkJCURSTV9FUlJPUgogCQkJICAgICgiT2Zmc2V0IGZhaWxlZCByYW5nZSBjaGVjayAoaz0lZCBpPSVkKSB3aGlsZSBwcm9jZXNzaW5nIDNEX0xPQURfVkJQTlRSIHBhY2tldC5cbiIsCiAJCQkgICAgIGssIGkpOwpAQCAtNTEyLDcgKzUwMSw4IEBACiAJCWlmIChrID09IG5hcnJheXMpCiAJCQlicmVhazsKIAkJLyogaGF2ZSBvbmUgbW9yZSB0byBwcm9jZXNzLCB0aGV5IGNvbWUgaW4gcGFpcnMgKi8KLQkJaWYgKCFyYWRlb25fY2hlY2tfb2Zmc2V0KGRldl9wcml2LCBwYXlsb2FkW2ldKSkgeworCQlkYXRhID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCBpKTsKKwkJaWYgKCFyYWRlb25fY2hlY2tfb2Zmc2V0KGRldl9wcml2LCAqZGF0YSkpIHsKIAkJCURSTV9FUlJPUgogCQkJICAgICgiT2Zmc2V0IGZhaWxlZCByYW5nZSBjaGVjayAoaz0lZCBpPSVkKSB3aGlsZSBwcm9jZXNzaW5nIDNEX0xPQURfVkJQTlRSIHBhY2tldC5cbiIsCiAJCQkgICAgIGssIGkpOwpAQCAtNTMzLDMwICs1MjMsMzAgQEAKIAogCUJFR0lOX1JJTkcoY291bnQgKyAyKTsKIAlPVVRfUklORyhoZWFkZXIpOwotCU9VVF9SSU5HX1RBQkxFKHBheWxvYWQsIGNvdW50ICsgMSk7CisJT1VUX1JJTkdfRFJNX0JVRkZFUihjbWRidWYtPmJ1ZmZlciwgY291bnQgKyAxKTsKIAlBRFZBTkNFX1JJTkcoKTsKIAotCWNtZGJ1Zi0+YnVmICs9IChjb3VudCArIDIpICogNDsKLQljbWRidWYtPmJ1ZnN6IC09IChjb3VudCArIDIpICogNDsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgcjMwMF9lbWl0X2JpdGJsdF9tdWx0aShkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsCiAJCQkJCSAgICAgZHJtX3JhZGVvbl9rY21kX2J1ZmZlcl90ICpjbWRidWYpCiB7Ci0JdTMyICpjbWQgPSAodTMyICopIGNtZGJ1Zi0+YnVmOworCXUzMiAqY21kID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCAwKTsKIAlpbnQgY291bnQsIHJldDsKIAlSSU5HX0xPQ0FMUzsKIAotCWNvdW50PShjbWRbMF0+PjE2KSAmIDB4M2ZmZjsKIAotCWlmIChjbWRbMF0gJiAweDgwMDApIHsKKwljb3VudCA9ICgqY21kICYgUkFERU9OX0NQX1BBQ0tFVF9DT1VOVF9NQVNLKSA+PiAxNjsKKworCWlmICgqY21kICYgMHg4MDAwKSB7CiAJCXUzMiBvZmZzZXQ7Ci0KLQkJaWYgKGNtZFsxXSAmIChSQURFT05fR01DX1NSQ19QSVRDSF9PRkZTRVRfQ05UTAorCQl1MzIgKmNtZDEgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoY21kYnVmLT5idWZmZXIsIDEpOworCQlpZiAoKmNtZDEgJiAoUkFERU9OX0dNQ19TUkNfUElUQ0hfT0ZGU0VUX0NOVEwKIAkJCSAgICAgIHwgUkFERU9OX0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwpKSB7Ci0JCQlvZmZzZXQgPSBjbWRbMl0gPDwgMTA7CisKKwkJCXUzMiAqY21kMiA9IGRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChjbWRidWYtPmJ1ZmZlciwgMik7CisJCQlvZmZzZXQgPSAqY21kMiA8PCAxMDsKIAkJCXJldCA9ICFyYWRlb25fY2hlY2tfb2Zmc2V0KGRldl9wcml2LCBvZmZzZXQpOwogCQkJaWYgKHJldCkgewogCQkJCURSTV9FUlJPUigiSW52YWxpZCBiaXRibHQgZmlyc3Qgb2Zmc2V0IGlzICUwOFhcbiIsIG9mZnNldCk7CkBAIC01NjQsOSArNTU0LDEwIEBACiAJCQl9CiAJCX0KIAotCQlpZiAoKGNtZFsxXSAmIFJBREVPTl9HTUNfU1JDX1BJVENIX09GRlNFVF9DTlRMKSAmJgotCQkgICAgKGNtZFsxXSAmIFJBREVPTl9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMKSkgewotCQkJb2Zmc2V0ID0gY21kWzNdIDw8IDEwOworCQlpZiAoKCpjbWQxICYgUkFERU9OX0dNQ19TUkNfUElUQ0hfT0ZGU0VUX0NOVEwpICYmCisJCSAgICAoKmNtZDEgJiBSQURFT05fR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCkpIHsKKwkJCXUzMiAqY21kMyA9IGRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChjbWRidWYtPmJ1ZmZlciwgMyk7CisJCQlvZmZzZXQgPSAqY21kMyA8PCAxMDsKIAkJCXJldCA9ICFyYWRlb25fY2hlY2tfb2Zmc2V0KGRldl9wcml2LCBvZmZzZXQpOwogCQkJaWYgKHJldCkgewogCQkJCURSTV9FUlJPUigiSW52YWxpZCBiaXRibHQgc2Vjb25kIG9mZnNldCBpcyAlMDhYXG4iLCBvZmZzZXQpOwpAQCAtNTc3LDI4ICs1NjgsMjUgQEAKIAl9CiAKIAlCRUdJTl9SSU5HKGNvdW50KzIpOwotCU9VVF9SSU5HKGNtZFswXSk7Ci0JT1VUX1JJTkdfVEFCTEUoKGludCAqKShjbWRidWYtPmJ1ZiArIDQpLCBjb3VudCArIDEpOworCU9VVF9SSU5HX0RSTV9CVUZGRVIoY21kYnVmLT5idWZmZXIsIGNvdW50ICsgMik7CiAJQURWQU5DRV9SSU5HKCk7CiAKLQljbWRidWYtPmJ1ZiArPSAoY291bnQrMikqNDsKLQljbWRidWYtPmJ1ZnN6IC09IChjb3VudCsyKSo0OwotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIGludCByMzAwX2VtaXRfZHJhd19pbmR4XzIoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LAogCQkJCQkgICAgZHJtX3JhZGVvbl9rY21kX2J1ZmZlcl90ICpjbWRidWYpCiB7Ci0JdTMyICpjbWQ7CisJdTMyICpjbWQgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoY21kYnVmLT5idWZmZXIsIDApOworCXUzMiAqY21kMSA9IGRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChjbWRidWYtPmJ1ZmZlciwgMSk7CiAJaW50IGNvdW50OwogCWludCBleHBlY3RlZF9jb3VudDsKIAlSSU5HX0xPQ0FMUzsKIAotCWNtZCA9ICh1MzIgKikgY21kYnVmLT5idWY7Ci0JY291bnQgPSAoY21kWzBdPj4xNikgJiAweDNmZmY7Ci0JZXhwZWN0ZWRfY291bnQgPSBjbWRbMV0gPj4gMTY7Ci0JaWYgKCEoY21kWzFdICYgUjMwMF9WQVBfVkZfQ05UTF9fSU5ERVhfU0laRV8zMmJpdCkpCisJY291bnQgPSAoKmNtZCAmIFJBREVPTl9DUF9QQUNLRVRfQ09VTlRfTUFTSykgPj4gMTY7CisKKwlleHBlY3RlZF9jb3VudCA9ICpjbWQxID4+IDE2OworCWlmICghKCpjbWQxICYgUjMwMF9WQVBfVkZfQ05UTF9fSU5ERVhfU0laRV8zMmJpdCkpCiAJCWV4cGVjdGVkX2NvdW50ID0gKGV4cGVjdGVkX2NvdW50KzEpLzI7CiAKIAlpZiAoY291bnQgJiYgY291bnQgIT0gZXhwZWN0ZWRfY291bnQpIHsKQEAgLTYwOCw1NSArNTk2LDUzIEBACiAJfQogCiAJQkVHSU5fUklORyhjb3VudCsyKTsKLQlPVVRfUklORyhjbWRbMF0pOwotCU9VVF9SSU5HX1RBQkxFKChpbnQgKikoY21kYnVmLT5idWYgKyA0KSwgY291bnQgKyAxKTsKKwlPVVRfUklOR19EUk1fQlVGRkVSKGNtZGJ1Zi0+YnVmZmVyLCBjb3VudCArIDIpOwogCUFEVkFOQ0VfUklORygpOwogCi0JY21kYnVmLT5idWYgKz0gKGNvdW50KzIpKjQ7Ci0JY21kYnVmLT5idWZzeiAtPSAoY291bnQrMikqNDsKLQogCWlmICghY291bnQpIHsKLQkJZHJtX3IzMDBfY21kX2hlYWRlcl90IGhlYWRlcjsKKwkJZHJtX3IzMDBfY21kX2hlYWRlcl90IHN0YWNrX2hlYWRlciwgKmhlYWRlcjsKKwkJdTMyICpjbWQxLCAqY21kMiwgKmNtZDM7CiAKLQkJaWYgKGNtZGJ1Zi0+YnVmc3ogPCA0KjQgKyBzaXplb2YoaGVhZGVyKSkgeworCQlpZiAoZHJtX2J1ZmZlcl91bnByb2Nlc3NlZChjbWRidWYtPmJ1ZmZlcikKKwkJCQk8IDQqNCArIHNpemVvZihzdGFja19oZWFkZXIpKSB7CiAJCQlEUk1fRVJST1IoIjNEX0RSQVdfSU5EWF8yOiBleHBlY3Qgc3Vic2VxdWVudCBJTkRYX0JVRkZFUiwgYnV0IHN0cmVhbSBpcyB0b28gc2hvcnQuXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJaGVhZGVyLnUgPSAqKHVuc2lnbmVkIGludCAqKWNtZGJ1Zi0+YnVmOworCQloZWFkZXIgPSBkcm1fYnVmZmVyX3JlYWRfb2JqZWN0KGNtZGJ1Zi0+YnVmZmVyLAorCQkJCXNpemVvZihzdGFja19oZWFkZXIpLCAmc3RhY2tfaGVhZGVyKTsKIAotCQljbWRidWYtPmJ1ZiArPSBzaXplb2YoaGVhZGVyKTsKLQkJY21kYnVmLT5idWZzeiAtPSBzaXplb2YoaGVhZGVyKTsKLQkJY21kID0gKHUzMiAqKSBjbWRidWYtPmJ1ZjsKKwkJY21kID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCAwKTsKKwkJY21kMSA9IGRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChjbWRidWYtPmJ1ZmZlciwgMSk7CisJCWNtZDIgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoY21kYnVmLT5idWZmZXIsIDIpOworCQljbWQzID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCAzKTsKIAotCQlpZiAoaGVhZGVyLmhlYWRlci5jbWRfdHlwZSAhPSBSMzAwX0NNRF9QQUNLRVQzIHx8Ci0JCSAgICBoZWFkZXIucGFja2V0My5wYWNrZXQgIT0gUjMwMF9DTURfUEFDS0VUM19SQVcgfHwKLQkJICAgIGNtZFswXSAhPSBDUF9QQUNLRVQzKFJBREVPTl9DUF9JTkRYX0JVRkZFUiwgMikpIHsKKwkJaWYgKGhlYWRlci0+aGVhZGVyLmNtZF90eXBlICE9IFIzMDBfQ01EX1BBQ0tFVDMgfHwKKwkJICAgIGhlYWRlci0+cGFja2V0My5wYWNrZXQgIT0gUjMwMF9DTURfUEFDS0VUM19SQVcgfHwKKwkJICAgICpjbWQgIT0gQ1BfUEFDS0VUMyhSQURFT05fQ1BfSU5EWF9CVUZGRVIsIDIpKSB7CiAJCQlEUk1fRVJST1IoIjNEX0RSQVdfSU5EWF8yOiBleHBlY3Qgc3Vic2VxdWVudCBJTkRYX0JVRkZFUi5cbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAotCQlpZiAoKGNtZFsxXSAmIDB4ODAwMGZmZmYpICE9IDB4ODAwMDA4MTApIHsKLQkJCURSTV9FUlJPUigiSW52YWxpZCBpbmR4X2J1ZmZlciByZWcgYWRkcmVzcyAlMDhYXG4iLCBjbWRbMV0pOworCQlpZiAoKCpjbWQxICYgMHg4MDAwZmZmZikgIT0gMHg4MDAwMDgxMCkgeworCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGluZHhfYnVmZmVyIHJlZyBhZGRyZXNzICUwOFhcbiIsCisJCQkJCSpjbWQxKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmICghcmFkZW9uX2NoZWNrX29mZnNldChkZXZfcHJpdiwgY21kWzJdKSkgewotCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGluZHhfYnVmZmVyIG9mZnNldCBpcyAlMDhYXG4iLCBjbWRbMl0pOworCQlpZiAoIXJhZGVvbl9jaGVja19vZmZzZXQoZGV2X3ByaXYsICpjbWQyKSkgeworCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGluZHhfYnVmZmVyIG9mZnNldCBpcyAlMDhYXG4iLAorCQkJCQkqY21kMik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAoY21kWzNdICE9IGV4cGVjdGVkX2NvdW50KSB7CisJCWlmICgqY21kMyAhPSBleHBlY3RlZF9jb3VudCkgewogCQkJRFJNX0VSUk9SKCJJTkRYX0JVRkZFUjogYnVmZmVyIHNpemUgJWksIGV4cGVjdGVkICVpXG4iLAotCQkJCWNtZFszXSwgZXhwZWN0ZWRfY291bnQpOworCQkJCSpjbWQzLCBleHBlY3RlZF9jb3VudCk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCUJFR0lOX1JJTkcoNCk7Ci0JCU9VVF9SSU5HKGNtZFswXSk7Ci0JCU9VVF9SSU5HX1RBQkxFKChpbnQgKikoY21kYnVmLT5idWYgKyA0KSwgMyk7CisJCU9VVF9SSU5HX0RSTV9CVUZGRVIoY21kYnVmLT5idWZmZXIsIDQpOwogCQlBRFZBTkNFX1JJTkcoKTsKLQotCQljbWRidWYtPmJ1ZiArPSA0KjQ7Ci0JCWNtZGJ1Zi0+YnVmc3ogLT0gNCo0OwogCX0KIAogCXJldHVybiAwOwpAQCAtNjY1LDM5ICs2NTEsMzkgQEAKIHN0YXRpYyBfX2lubGluZV9fIGludCByMzAwX2VtaXRfcmF3X3BhY2tldDMoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LAogCQkJCQkgICAgZHJtX3JhZGVvbl9rY21kX2J1ZmZlcl90ICpjbWRidWYpCiB7Ci0JdTMyIGhlYWRlcjsKKwl1MzIgKmhlYWRlcjsKIAlpbnQgY291bnQ7CiAJUklOR19MT0NBTFM7CiAKLQlpZiAoNCA+IGNtZGJ1Zi0+YnVmc3opCisJaWYgKDQgPiBkcm1fYnVmZmVyX3VucHJvY2Vzc2VkKGNtZGJ1Zi0+YnVmZmVyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBGaXhtZSAhISBUaGlzIHNpbXBseSBlbWl0cyBhIHBhY2tldCB3aXRob3V0IG11Y2ggY2hlY2tpbmcuCiAJICAgV2UgbmVlZCB0byBiZSBzbWFydGVyLiAqLwogCiAJLyogb2J0YWluIGZpcnN0IHdvcmQgLSBhY3R1YWwgcGFja2V0MyBoZWFkZXIgKi8KLQloZWFkZXIgPSAqKHUzMiAqKSBjbWRidWYtPmJ1ZjsKKwloZWFkZXIgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoY21kYnVmLT5idWZmZXIsIDApOwogCiAJLyogSXMgaXQgcGFja2V0IDMgPyAqLwotCWlmICgoaGVhZGVyID4+IDMwKSAhPSAweDMpIHsKLQkJRFJNX0VSUk9SKCJOb3QgYSBwYWNrZXQzIGhlYWRlciAoMHglMDh4KVxuIiwgaGVhZGVyKTsKKwlpZiAoKCpoZWFkZXIgPj4gMzApICE9IDB4MykgeworCQlEUk1fRVJST1IoIk5vdCBhIHBhY2tldDMgaGVhZGVyICgweCUwOHgpXG4iLCAqaGVhZGVyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JY291bnQgPSAoaGVhZGVyID4+IDE2KSAmIDB4M2ZmZjsKKwljb3VudCA9ICgqaGVhZGVyID4+IDE2KSAmIDB4M2ZmZjsKIAogCS8qIENoZWNrIGFnYWluIG5vdyB0aGF0IHdlIGtub3cgaG93IG11Y2ggZGF0YSB0byBleHBlY3QgKi8KLQlpZiAoKGNvdW50ICsgMikgKiA0ID4gY21kYnVmLT5idWZzeikgeworCWlmICgoY291bnQgKyAyKSAqIDQgPiBkcm1fYnVmZmVyX3VucHJvY2Vzc2VkKGNtZGJ1Zi0+YnVmZmVyKSkgewogCQlEUk1fRVJST1IKIAkJICAgICgiRXhwZWN0ZWQgcGFja2V0MyBvZiBsZW5ndGggJWQgYnV0IGhhdmUgb25seSAlZCBieXRlcyBsZWZ0XG4iLAotCQkgICAgIChjb3VudCArIDIpICogNCwgY21kYnVmLT5idWZzeik7CisJCSAgICAgKGNvdW50ICsgMikgKiA0LCBkcm1fYnVmZmVyX3VucHJvY2Vzc2VkKGNtZGJ1Zi0+YnVmZmVyKSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCS8qIElzIGl0IGEgcGFja2V0IHR5cGUgd2Uga25vdyBhYm91dCA/ICovCi0Jc3dpdGNoIChoZWFkZXIgJiAweGZmMDApIHsKKwlzd2l0Y2ggKCpoZWFkZXIgJiAweGZmMDApIHsKIAljYXNlIFJBREVPTl8zRF9MT0FEX1ZCUE5UUjoJLyogbG9hZCB2ZXJ0ZXggYXJyYXkgcG9pbnRlcnMgKi8KLQkJcmV0dXJuIHIzMDBfZW1pdF8zZF9sb2FkX3ZicG50cihkZXZfcHJpdiwgY21kYnVmLCBoZWFkZXIpOworCQlyZXR1cm4gcjMwMF9lbWl0XzNkX2xvYWRfdmJwbnRyKGRldl9wcml2LCBjbWRidWYsICpoZWFkZXIpOwogCiAJY2FzZSBSQURFT05fQ05UTF9CSVRCTFRfTVVMVEk6CiAJCXJldHVybiByMzAwX2VtaXRfYml0Ymx0X211bHRpKGRldl9wcml2LCBjbWRidWYpOwpAQCAtNzIzLDE4ICs3MDksMTQgQEAKIAkJLyogdGhlc2UgcGFja2V0cyBhcmUgc2FmZSAqLwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlEUk1fRVJST1IoIlVua25vd24gcGFja2V0MyBoZWFkZXIgKDB4JTA4eClcbiIsIGhlYWRlcik7CisJCURSTV9FUlJPUigiVW5rbm93biBwYWNrZXQzIGhlYWRlciAoMHglMDh4KVxuIiwgKmhlYWRlcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCUJFR0lOX1JJTkcoY291bnQgKyAyKTsKLQlPVVRfUklORyhoZWFkZXIpOwotCU9VVF9SSU5HX1RBQkxFKChpbnQgKikoY21kYnVmLT5idWYgKyA0KSwgY291bnQgKyAxKTsKKwlPVVRfUklOR19EUk1fQlVGRkVSKGNtZGJ1Zi0+YnVmZmVyLCBjb3VudCArIDIpOwogCUFEVkFOQ0VfUklORygpOwogCi0JY21kYnVmLT5idWYgKz0gKGNvdW50ICsgMikgKiA0OwotCWNtZGJ1Zi0+YnVmc3ogLT0gKGNvdW50ICsgMikgKiA0OwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc0OCw4ICs3MzAsNyBAQAogewogCWludCBuOwogCWludCByZXQ7Ci0JY2hhciAqb3JpZ19idWYgPSBjbWRidWYtPmJ1ZjsKLQlpbnQgb3JpZ19idWZzeiA9IGNtZGJ1Zi0+YnVmc3o7CisJaW50IG9yaWdfaXRlciA9IGNtZGJ1Zi0+YnVmZmVyLT5pdGVyYXRvcjsKIAogCS8qIFRoaXMgaXMgYSBkby13aGlsZS1sb29wIHNvIHRoYXQgd2UgcnVuIHRoZSBpbnRlcmlvciBhdCBsZWFzdCBvbmNlLAogCSAqIGV2ZW4gaWYgY21kYnVmLT5uYm94IGlzIDAuIENvbXBhcmUgcjMwMF9lbWl0X2NsaXByZWN0cyBmb3IgcmF0aW9uYWxlLgpAQCAtNzYxLDggKzc0Miw3IEBACiAJCQlpZiAocmV0KQogCQkJCXJldHVybiByZXQ7CiAKLQkJCWNtZGJ1Zi0+YnVmID0gb3JpZ19idWY7Ci0JCQljbWRidWYtPmJ1ZnN6ID0gb3JpZ19idWZzejsKKwkJCWNtZGJ1Zi0+YnVmZmVyLT5pdGVyYXRvciA9IG9yaWdfaXRlcjsKIAkJfQogCiAJCXN3aXRjaCAoaGVhZGVyLnBhY2tldDMucGFja2V0KSB7CkBAIC03ODUsOSArNzY1LDkgQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlEUk1fRVJST1IoImJhZCBwYWNrZXQzIHR5cGUgJWkgYXQgJXBcbiIsCisJCQlEUk1fRVJST1IoImJhZCBwYWNrZXQzIHR5cGUgJWkgYXQgYnl0ZSAlZFxuIiwKIAkJCQkgIGhlYWRlci5wYWNrZXQzLnBhY2tldCwKLQkJCQkgIGNtZGJ1Zi0+YnVmIC0gc2l6ZW9mKGhlYWRlcikpOworCQkJCSAgY21kYnVmLT5idWZmZXItPml0ZXJhdG9yIC0gKGludClzaXplb2YoaGVhZGVyKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC05MjMsMTIgKzkwMywxMyBAQAogCQkJZHJtX3IzMDBfY21kX2hlYWRlcl90IGhlYWRlcikKIHsKIAl1MzIgKnJlZl9hZ2VfYmFzZTsKLQl1MzIgaSwgYnVmX2lkeCwgaF9wZW5kaW5nOwotCXU2NCBwdHJfYWRkcjsKKwl1MzIgaSwgKmJ1Zl9pZHgsIGhfcGVuZGluZzsKKwl1NjQgKnB0cl9hZGRyOworCXU2NCBzdGFja19wdHJfYWRkcjsKIAlSSU5HX0xPQ0FMUzsKIAotCWlmIChjbWRidWYtPmJ1ZnN6IDwKLQkgICAgKHNpemVvZih1NjQpICsgaGVhZGVyLnNjcmF0Y2gubl9idWZzICogc2l6ZW9mKGJ1Zl9pZHgpKSkgeworCWlmIChkcm1fYnVmZmVyX3VucHJvY2Vzc2VkKGNtZGJ1Zi0+YnVmZmVyKSA8CisJICAgIChzaXplb2YodTY0KSArIGhlYWRlci5zY3JhdGNoLm5fYnVmcyAqIHNpemVvZigqYnVmX2lkeCkpKSB7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtOTM4LDM2ICs5MTksMzUgQEAKIAogCWRldl9wcml2LT5zY3JhdGNoX2FnZXNbaGVhZGVyLnNjcmF0Y2gucmVnXSsrOwogCi0JcHRyX2FkZHIgPSBnZXRfdW5hbGlnbmVkKCh1NjQgKiljbWRidWYtPmJ1Zik7Ci0JcmVmX2FnZV9iYXNlID0gKHUzMiAqKSh1bnNpZ25lZCBsb25nKXB0cl9hZGRyOwotCi0JY21kYnVmLT5idWYgKz0gc2l6ZW9mKHU2NCk7Ci0JY21kYnVmLT5idWZzeiAtPSBzaXplb2YodTY0KTsKKwlwdHJfYWRkciA9IGRybV9idWZmZXJfcmVhZF9vYmplY3QoY21kYnVmLT5idWZmZXIsCisJCQlzaXplb2Yoc3RhY2tfcHRyX2FkZHIpLCAmc3RhY2tfcHRyX2FkZHIpOworCXJlZl9hZ2VfYmFzZSA9ICh1MzIgKikodW5zaWduZWQgbG9uZykqcHRyX2FkZHI7CiAKIAlmb3IgKGk9MDsgaSA8IGhlYWRlci5zY3JhdGNoLm5fYnVmczsgaSsrKSB7Ci0JCWJ1Zl9pZHggPSAqKHUzMiAqKWNtZGJ1Zi0+YnVmOwotCQlidWZfaWR4ICo9IDI7IC8qIDggYnl0ZXMgcGVyIGJ1ZiAqLworCQlidWZfaWR4ID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCAwKTsKKwkJKmJ1Zl9pZHggKj0gMjsgLyogOCBieXRlcyBwZXIgYnVmICovCiAKLQkJaWYgKERSTV9DT1BZX1RPX1VTRVIocmVmX2FnZV9iYXNlICsgYnVmX2lkeCwgJmRldl9wcml2LT5zY3JhdGNoX2FnZXNbaGVhZGVyLnNjcmF0Y2gucmVnXSwgc2l6ZW9mKHUzMikpKSB7CisJCWlmIChEUk1fQ09QWV9UT19VU0VSKHJlZl9hZ2VfYmFzZSArICpidWZfaWR4LAorCQkJCSZkZXZfcHJpdi0+c2NyYXRjaF9hZ2VzW2hlYWRlci5zY3JhdGNoLnJlZ10sCisJCQkJc2l6ZW9mKHUzMikpKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KIAotCQlpZiAoRFJNX0NPUFlfRlJPTV9VU0VSKCZoX3BlbmRpbmcsIHJlZl9hZ2VfYmFzZSArIGJ1Zl9pZHggKyAxLCBzaXplb2YodTMyKSkpIHsKKwkJaWYgKERSTV9DT1BZX0ZST01fVVNFUigmaF9wZW5kaW5nLAorCQkJCXJlZl9hZ2VfYmFzZSArICpidWZfaWR4ICsgMSwKKwkJCQlzaXplb2YodTMyKSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQogCi0JCWlmIChoX3BlbmRpbmcgPT0gMCkgeworCQlpZiAoaF9wZW5kaW5nID09IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQogCiAJCWhfcGVuZGluZy0tOwogCi0JCWlmIChEUk1fQ09QWV9UT19VU0VSKHJlZl9hZ2VfYmFzZSArIGJ1Zl9pZHggKyAxLCAmaF9wZW5kaW5nLCBzaXplb2YodTMyKSkpIHsKKwkJaWYgKERSTV9DT1BZX1RPX1VTRVIocmVmX2FnZV9iYXNlICsgKmJ1Zl9pZHggKyAxLAorCQkJCQkmaF9wZW5kaW5nLAorCQkJCQlzaXplb2YodTMyKSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQogCi0JCWNtZGJ1Zi0+YnVmICs9IHNpemVvZihidWZfaWR4KTsKLQkJY21kYnVmLT5idWZzeiAtPSBzaXplb2YoYnVmX2lkeCk7CisJCWRybV9idWZmZXJfYWR2YW5jZShjbWRidWYtPmJ1ZmZlciwgc2l6ZW9mKCpidWZfaWR4KSk7CiAJfQogCiAJQkVHSU5fUklORygyKTsKQEAgLTEwMDksMTkgKzk4OSwxNiBAQAogCURSTV9ERUJVRygicjUwMGZwICVkICVkIHR5cGU6ICVkXG4iLCBzeiwgYWRkciwgdHlwZSk7CiAJaWYgKCFzeikKIAkJcmV0dXJuIDA7Ci0JaWYgKHN6ICogc3RyaWRlICogNCA+IGNtZGJ1Zi0+YnVmc3opCisJaWYgKHN6ICogc3RyaWRlICogNCA+IGRybV9idWZmZXJfdW5wcm9jZXNzZWQoY21kYnVmLT5idWZmZXIpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCUJFR0lOX1JJTkcoMyArIHN6ICogc3RyaWRlKTsKIAlPVVRfUklOR19SRUcoUjUwMF9HQV9VU19WRUNUT1JfSU5ERVgsIGFkZHIpOwogCU9VVF9SSU5HKENQX1BBQ0tFVDBfVEFCTEUoUjUwMF9HQV9VU19WRUNUT1JfREFUQSwgc3ogKiBzdHJpZGUgLSAxKSk7Ci0JT1VUX1JJTkdfVEFCTEUoKGludCAqKWNtZGJ1Zi0+YnVmLCBzeiAqIHN0cmlkZSk7CisJT1VUX1JJTkdfRFJNX0JVRkZFUihjbWRidWYtPmJ1ZmZlciwgc3ogKiBzdHJpZGUpOwogCiAJQURWQU5DRV9SSU5HKCk7CiAKLQljbWRidWYtPmJ1ZiArPSBzeiAqIHN0cmlkZSAqIDQ7Ci0JY21kYnVmLT5idWZzeiAtPSBzeiAqIHN0cmlkZSAqIDQ7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA1MywxOSArMTAzMCwxOCBAQAogCQkJZ290byBjbGVhbnVwOwogCX0KIAotCXdoaWxlIChjbWRidWYtPmJ1ZnN6ID49IHNpemVvZihkcm1fcjMwMF9jbWRfaGVhZGVyX3QpKSB7CisJd2hpbGUgKGRybV9idWZmZXJfdW5wcm9jZXNzZWQoY21kYnVmLT5idWZmZXIpCisJCQk+PSBzaXplb2YoZHJtX3IzMDBfY21kX2hlYWRlcl90KSkgewogCQlpbnQgaWR4OwotCQlkcm1fcjMwMF9jbWRfaGVhZGVyX3QgaGVhZGVyOworCQlkcm1fcjMwMF9jbWRfaGVhZGVyX3QgKmhlYWRlciwgc3RhY2tfaGVhZGVyOwogCi0JCWhlYWRlci51ID0gKih1bnNpZ25lZCBpbnQgKiljbWRidWYtPmJ1ZjsKKwkJaGVhZGVyID0gZHJtX2J1ZmZlcl9yZWFkX29iamVjdChjbWRidWYtPmJ1ZmZlciwKKwkJCQlzaXplb2Yoc3RhY2tfaGVhZGVyKSwgJnN0YWNrX2hlYWRlcik7CiAKLQkJY21kYnVmLT5idWYgKz0gc2l6ZW9mKGhlYWRlcik7Ci0JCWNtZGJ1Zi0+YnVmc3ogLT0gc2l6ZW9mKGhlYWRlcik7Ci0KLQkJc3dpdGNoIChoZWFkZXIuaGVhZGVyLmNtZF90eXBlKSB7CisJCXN3aXRjaCAoaGVhZGVyLT5oZWFkZXIuY21kX3R5cGUpIHsKIAkJY2FzZSBSMzAwX0NNRF9QQUNLRVQwOgogCQkJRFJNX0RFQlVHKCJSMzAwX0NNRF9QQUNLRVQwXG4iKTsKLQkJCXJldCA9IHIzMDBfZW1pdF9wYWNrZXQwKGRldl9wcml2LCBjbWRidWYsIGhlYWRlcik7CisJCQlyZXQgPSByMzAwX2VtaXRfcGFja2V0MChkZXZfcHJpdiwgY21kYnVmLCAqaGVhZGVyKTsKIAkJCWlmIChyZXQpIHsKIAkJCQlEUk1fRVJST1IoInIzMDBfZW1pdF9wYWNrZXQwIGZhaWxlZFxuIik7CiAJCQkJZ290byBjbGVhbnVwOwpAQCAtMTA3NCw3ICsxMDUwLDcgQEAKIAogCQljYXNlIFIzMDBfQ01EX1ZQVToKIAkJCURSTV9ERUJVRygiUjMwMF9DTURfVlBVXG4iKTsKLQkJCXJldCA9IHIzMDBfZW1pdF92cHUoZGV2X3ByaXYsIGNtZGJ1ZiwgaGVhZGVyKTsKKwkJCXJldCA9IHIzMDBfZW1pdF92cHUoZGV2X3ByaXYsIGNtZGJ1ZiwgKmhlYWRlcik7CiAJCQlpZiAocmV0KSB7CiAJCQkJRFJNX0VSUk9SKCJyMzAwX2VtaXRfdnB1IGZhaWxlZFxuIik7CiAJCQkJZ290byBjbGVhbnVwOwpAQCAtMTA4Myw3ICsxMDU5LDcgQEAKIAogCQljYXNlIFIzMDBfQ01EX1BBQ0tFVDM6CiAJCQlEUk1fREVCVUcoIlIzMDBfQ01EX1BBQ0tFVDNcbiIpOwotCQkJcmV0ID0gcjMwMF9lbWl0X3BhY2tldDMoZGV2X3ByaXYsIGNtZGJ1ZiwgaGVhZGVyKTsKKwkJCXJldCA9IHIzMDBfZW1pdF9wYWNrZXQzKGRldl9wcml2LCBjbWRidWYsICpoZWFkZXIpOwogCQkJaWYgKHJldCkgewogCQkJCURSTV9FUlJPUigicjMwMF9lbWl0X3BhY2tldDMgZmFpbGVkXG4iKTsKIAkJCQlnb3RvIGNsZWFudXA7CkBAIC0xMTE3LDggKzEwOTMsOCBAQAogCQkJCWludCBpOwogCQkJCVJJTkdfTE9DQUxTOwogCi0JCQkJQkVHSU5fUklORyhoZWFkZXIuZGVsYXkuY291bnQpOwotCQkJCWZvciAoaSA9IDA7IGkgPCBoZWFkZXIuZGVsYXkuY291bnQ7IGkrKykKKwkJCQlCRUdJTl9SSU5HKGhlYWRlci0+ZGVsYXkuY291bnQpOworCQkJCWZvciAoaSA9IDA7IGkgPCBoZWFkZXItPmRlbGF5LmNvdW50OyBpKyspCiAJCQkJCU9VVF9SSU5HKFJBREVPTl9DUF9QQUNLRVQyKTsKIAkJCQlBRFZBTkNFX1JJTkcoKTsKIAkJCX0KQEAgLTExMjYsNyArMTEwMiw3IEBACiAKIAkJY2FzZSBSMzAwX0NNRF9ETUFfRElTQ0FSRDoKIAkJCURSTV9ERUJVRygiUkFERU9OX0NNRF9ETUFfRElTQ0FSRFxuIik7Ci0JCQlpZHggPSBoZWFkZXIuZG1hLmJ1Zl9pZHg7CisJCQlpZHggPSBoZWFkZXItPmRtYS5idWZfaWR4OwogCQkJaWYgKGlkeCA8IDAgfHwgaWR4ID49IGRtYS0+YnVmX2NvdW50KSB7CiAJCQkJRFJNX0VSUk9SKCJidWZmZXIgaW5kZXggJWQgKG9mICVkIG1heClcbiIsCiAJCQkJCSAgaWR4LCBkbWEtPmJ1Zl9jb3VudCAtIDEpOwpAQCAtMTE0OSwxMiArMTEyNSwxMiBAQAogCiAJCWNhc2UgUjMwMF9DTURfV0FJVDoKIAkJCURSTV9ERUJVRygiUjMwMF9DTURfV0FJVFxuIik7Ci0JCQlyMzAwX2NtZF93YWl0KGRldl9wcml2LCBoZWFkZXIpOworCQkJcjMwMF9jbWRfd2FpdChkZXZfcHJpdiwgKmhlYWRlcik7CiAJCQlicmVhazsKIAogCQljYXNlIFIzMDBfQ01EX1NDUkFUQ0g6CiAJCQlEUk1fREVCVUcoIlIzMDBfQ01EX1NDUkFUQ0hcbiIpOwotCQkJcmV0ID0gcjMwMF9zY3JhdGNoKGRldl9wcml2LCBjbWRidWYsIGhlYWRlcik7CisJCQlyZXQgPSByMzAwX3NjcmF0Y2goZGV2X3ByaXYsIGNtZGJ1ZiwgKmhlYWRlcik7CiAJCQlpZiAocmV0KSB7CiAJCQkJRFJNX0VSUk9SKCJyMzAwX3NjcmF0Y2ggZmFpbGVkXG4iKTsKIAkJCQlnb3RvIGNsZWFudXA7CkBAIC0xMTY4LDE2ICsxMTQ0LDE2IEBACiAJCQkJZ290byBjbGVhbnVwOwogCQkJfQogCQkJRFJNX0RFQlVHKCJSMzAwX0NNRF9SNTAwRlBcbiIpOwotCQkJcmV0ID0gcjMwMF9lbWl0X3I1MDBmcChkZXZfcHJpdiwgY21kYnVmLCBoZWFkZXIpOworCQkJcmV0ID0gcjMwMF9lbWl0X3I1MDBmcChkZXZfcHJpdiwgY21kYnVmLCAqaGVhZGVyKTsKIAkJCWlmIChyZXQpIHsKIAkJCQlEUk1fRVJST1IoInIzMDBfZW1pdF9yNTAwZnAgZmFpbGVkXG4iKTsKIAkJCQlnb3RvIGNsZWFudXA7CiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCURSTV9FUlJPUigiYmFkIGNtZF90eXBlICVpIGF0ICVwXG4iLAotCQkJCSAgaGVhZGVyLmhlYWRlci5jbWRfdHlwZSwKLQkJCQkgIGNtZGJ1Zi0+YnVmIC0gc2l6ZW9mKGhlYWRlcikpOworCQkJRFJNX0VSUk9SKCJiYWQgY21kX3R5cGUgJWkgYXQgYnl0ZSAlZFxuIiwKKwkJCQkgIGhlYWRlci0+aGVhZGVyLmNtZF90eXBlLAorCQkJCSAgY21kYnVmLT5idWZmZXItPml0ZXJhdG9yIC0gKGludClzaXplb2YoKmhlYWRlcikpOwogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gY2xlYW51cDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oCmluZGV4IDE3MzVhMmIuLjFhMGQ1MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfcmVnLmgKQEAgLTk1Miw2ICs5NTIsNyBAQAogIyAgICAgICBkZWZpbmUgUjMwMF9UWE9fRU5ESUFOX0hBTEZEV19TV0FQICAgICAgICgzIDw8IDApCiAjICAgICAgIGRlZmluZSBSMzAwX1RYT19NQUNST19USUxFICAgICAgICAgICAgICAgKDEgPDwgMikKICMgICAgICAgZGVmaW5lIFIzMDBfVFhPX01JQ1JPX1RJTEUgICAgICAgICAgICAgICAoMSA8PCAzKQorIyAgICAgICBkZWZpbmUgUjMwMF9UWE9fTUlDUk9fVElMRV9TUVVBUkUgICAgICAgICgyIDw8IDMpCiAjICAgICAgIGRlZmluZSBSMzAwX1RYT19PRkZTRVRfTUFTSyAgICAgICAgICAgICAgMHhmZmZmZmZlMAogIyAgICAgICBkZWZpbmUgUjMwMF9UWE9fT0ZGU0VUX1NISUZUICAgICAgICAgICAgIDUKIAkvKiBFTkQ6IEd1ZXNzIGZyb20gUjIwMCAqLwpAQCAtMTM2MCw2ICsxMzYxLDcgQEAKICMgICAgICAgZGVmaW5lIFIzMDBfQ09MT1JQSVRDSF9NQVNLICAgICAgICAgICAgICAweDAwMDAxRkY4IC8qIEdVRVNTICovCiAjICAgICAgIGRlZmluZSBSMzAwX0NPTE9SX1RJTEVfRU5BQkxFICAgICAgICAgICAgKDEgPDwgMTYpIC8qIEdVRVNTICovCiAjICAgICAgIGRlZmluZSBSMzAwX0NPTE9SX01JQ1JPVElMRV9FTkFCTEUgICAgICAgKDEgPDwgMTcpIC8qIEdVRVNTICovCisjICAgICAgIGRlZmluZSBSMzAwX0NPTE9SX01JQ1JPVElMRV9TUVVBUkVfRU5BQkxFICgyIDw8IDE3KQogIyAgICAgICBkZWZpbmUgUjMwMF9DT0xPUl9FTkRJQU5fTk9fU1dBUCAgICAgICAgICgwIDw8IDE4KSAvKiBHVUVTUyAqLwogIyAgICAgICBkZWZpbmUgUjMwMF9DT0xPUl9FTkRJQU5fV09SRF9TV0FQICAgICAgICgxIDw8IDE4KSAvKiBHVUVTUyAqLwogIyAgICAgICBkZWZpbmUgUjMwMF9DT0xPUl9FTkRJQU5fRFdPUkRfU1dBUCAgICAgICgyIDw8IDE4KSAvKiBHVUVTUyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNDIwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYwppbmRleCBkOTM3MzI0Li5jNzU5M2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I0MjAuYwpAQCAtNDAsMjggKzQwLDYgQEAKIAlyZGV2LT5jb25maWcucjMwMC5yZWdfc2FmZV9ibV9zaXplID0gQVJSQVlfU0laRShyNDIwX3JlZ19zYWZlX2JtKTsKIH0KIAotaW50IHI0MjBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQlpbnQgcjsKLQotCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7Ci0JCXIgPSByYWRlb25fYWdwX2luaXQocmRldik7Ci0JCWlmIChyKSB7Ci0JCQlyYWRlb25fYWdwX2Rpc2FibGUocmRldik7Ci0JCX0gZWxzZSB7Ci0JCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5hZ3BfYmFzZTsKLQkJfQotCX0KLQlyID0gcmFkZW9uX21jX3NldHVwKHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogdm9pZCByNDIwX3BpcGVzX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJdW5zaWduZWQgdG1wOwpAQCAtNjksNyArNDcsOCBAQAogCXVuc2lnbmVkIG51bV9waXBlczsKIAogCS8qIEdBX0VOSEFOQ0Ugd29ya2Fyb3VuZCBUQ0wgZGVhZGxvY2sgaXNzdWUgKi8KLQlXUkVHMzIoMHg0Mjc0LCAoMSA8PCAwKSB8ICgxIDw8IDEpIHwgKDEgPDwgMikgfCAoMSA8PCAzKSk7CisJV1JFRzMyKFIzMDBfR0FfRU5IQU5DRSwgUjMwMF9HQV9ERUFETE9DS19DTlRMIHwgUjMwMF9HQV9GQVNUU1lOQ19DTlRMIHwKKwkgICAgICAgKDEgPDwgMikgfCAoMSA8PCAzKSk7CiAJLyogYWRkIGlkbGUgd2FpdCBhcyBwZXIgZnJlZWRlc2t0b3Aub3JnIGJ1ZyAyNDA0MSAqLwogCWlmIChyMTAwX2d1aV93YWl0X2Zvcl9pZGxlKHJkZXYpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhaWxlZCB0byB3YWl0IEdVSSBpZGxlIHdoaWxlICIKQEAgLTk3LDE3ICs3NiwxNyBAQAogCQl0bXAgPSAoNyA8PCAxKTsKIAkJYnJlYWs7CiAJfQotCVdSRUczMigweDQyQzgsICgxIDw8IG51bV9waXBlcykgLSAxKTsKKwlXUkVHMzIoUjUwMF9TVV9SRUdfREVTVCwgKDEgPDwgbnVtX3BpcGVzKSAtIDEpOwogCS8qIFN1YiBwaXhlbCAxLzEyIHNvIHdlIGNhbiBoYXZlIDRLIHJlbmRlcmluZyBhY2NvcmRpbmcgdG8gZG9jICovCi0JdG1wIHw9ICgxIDw8IDQpIHwgKDEgPDwgMCk7Ci0JV1JFRzMyKDB4NDAxOCwgdG1wKTsKKwl0bXAgfD0gUjMwMF9USUxFX1NJWkVfMTYgfCBSMzAwX0VOQUJMRV9USUxJTkc7CisJV1JFRzMyKFIzMDBfR0JfVElMRV9DT05GSUcsIHRtcCk7CiAJaWYgKHIxMDBfZ3VpX3dhaXRfZm9yX2lkbGUocmRldikpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiRmFpbGVkIHRvIHdhaXQgR1VJIGlkbGUgd2hpbGUgIgogCQkgICAgICAgInByb2dyYW1taW5nIHBpcGVzLiBCYWQgdGhpbmdzIG1pZ2h0IGhhcHBlbi5cbiIpOwogCX0KIAotCXRtcCA9IFJSRUczMigweDE3MEMpOwotCVdSRUczMigweDE3MEMsIHRtcCB8ICgxIDw8IDMxKSk7CisJdG1wID0gUlJFRzMyKFIzMDBfRFNUX1BJUEVfQ09ORklHKTsKKwlXUkVHMzIoUjMwMF9EU1RfUElQRV9DT05GSUcsIHRtcCB8IFIzMDBfUElQRV9BVVRPX0NPTkZJRyk7CiAKIAlXUkVHMzIoUjMwMF9SQjJEX0RTVENBQ0hFX01PREUsCiAJICAgICAgIFJSRUczMihSMzAwX1JCMkRfRFNUQ0FDSEVfTU9ERSkgfApAQCAtMzQ4LDEzICszMjcsMTUgQEAKIAlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CiAJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCiAJcmFkZW9uX3BtX2luaXQocmRldik7Ci0JLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCi0JcjMwMF92cmFtX2luZm8ocmRldik7Ci0JLyogSW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAoYWxzbyB0ZXN0IEFHUCkgKi8KLQlyID0gcjQyMF9tY19pbml0KHJkZXYpOwotCWlmIChyKSB7Ci0JCXJldHVybiByOworCS8qIGluaXRpYWxpemUgQUdQICovCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlyID0gcmFkZW9uX2FncF9pbml0KHJkZXYpOworCQlpZiAocikgeworCQkJcmFkZW9uX2FncF9kaXNhYmxlKHJkZXYpOworCQl9CiAJfQorCS8qIGluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKi8KKwlyMzAwX21jX2luaXQocmRldik7CiAJcjQyMF9kZWJ1Z2ZzKHJkZXYpOwogCS8qIEZlbmNlIGRyaXZlciAqLwogCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MDBfcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I1MDBfcmVnLmgKaW5kZXggNzRhZDg5Yi4uMGNmMmFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTAwX3JlZy5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUwMF9yZWcuaApAQCAtNzE3LDU0ICs3MTcsNjIgQEAKICNkZWZpbmUgQVZJVk9fRFZPQV9CSVRfREVQVEhfQ09OVFJPTAkJCTB4Nzk4OAogCiAjZGVmaW5lIEFWSVZPX0RDX0dQSU9fSFBEX0EgICAgICAgICAgICAgICAgIDB4N2U5NAotCi0jZGVmaW5lIEFWSVZPX0dQSU9fMCAgICAgICAgICAgICAgICAgICAgICAgIDB4N2UzMAotI2RlZmluZSBBVklWT19HUElPXzEgICAgICAgICAgICAgICAgICAgICAgICAweDdlNDAKLSNkZWZpbmUgQVZJVk9fR1BJT18yICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZTUwCi0jZGVmaW5lIEFWSVZPX0dQSU9fMyAgICAgICAgICAgICAgICAgICAgICAgIDB4N2U2MAotCiAjZGVmaW5lIEFWSVZPX0RDX0dQSU9fSFBEX1kgICAgICAgICAgICAgICAgIDB4N2U5YwogCi0jZGVmaW5lIEFWSVZPX0kyQ19TVEFUVVMJCQkJCTB4N2QzMAotIwlkZWZpbmUgQVZJVk9fSTJDX1NUQVRVU19ET05FCQkJCSgxIDw8IDApCi0jCWRlZmluZSBBVklWT19JMkNfU1RBVFVTX05BQ0sJCQkJKDEgPDwgMSkKLSMJZGVmaW5lIEFWSVZPX0kyQ19TVEFUVVNfSEFMVAkJCQkoMSA8PCAyKQotIwlkZWZpbmUgQVZJVk9fSTJDX1NUQVRVU19HTwkJCQkoMSA8PCAzKQotIwlkZWZpbmUgQVZJVk9fSTJDX1NUQVRVU19NQVNLCQkJCTB4NwotLyogSWYgcmFkZW9uX21tX2kyYyBpcyB0byBiZSBiZWxpZXZlZCwgdGhpcyBpcyBIQUxULCBOQUNLLCBhbmQgbWF5YmUKLSAqIERPTkU/ICovCi0jCWRlZmluZSBBVklWT19JMkNfU1RBVFVTX0NNRF9SRVNFVAkJCTB4NwotIwlkZWZpbmUgQVZJVk9fSTJDX1NUQVRVU19DTURfV0FJVAkJCSgxIDw8IDMpCi0jZGVmaW5lIEFWSVZPX0kyQ19TVE9QCQkJCQkJMHg3ZDM0Ci0jZGVmaW5lIEFWSVZPX0kyQ19TVEFSVF9DTlRMCQkJCTB4N2QzOAotIwlkZWZpbmUgQVZJVk9fSTJDX1NUQVJUCQkJCQkJKDEgPDwgOCkKLSMJZGVmaW5lIEFWSVZPX0kyQ19DT05ORUNUT1IwCQkJCQkoMCA8PCAxNikKLSMJZGVmaW5lIEFWSVZPX0kyQ19DT05ORUNUT1IxCQkJCQkoMSA8PCAxNikKLSNkZWZpbmUgUjUyMF9JMkNfU1RBUlQgKDE8PDApCi0jZGVmaW5lIFI1MjBfSTJDX1NUT1AgKDE8PDEpCi0jZGVmaW5lIFI1MjBfSTJDX1JYICgxPDwyKQotI2RlZmluZSBSNTIwX0kyQ19FTiAoMTw8OCkKLSNkZWZpbmUgUjUyMF9JMkNfRERDMSAoMDw8MTYpCi0jZGVmaW5lIFI1MjBfSTJDX0REQzIgKDE8PDE2KQotI2RlZmluZSBSNTIwX0kyQ19EREMzICgyPDwxNikKLSNkZWZpbmUgUjUyMF9JMkNfRERDX01BU0sgKDM8PDE2KQotI2RlZmluZSBBVklWT19JMkNfQ09OVFJPTDIJCQkJCTB4N2QzYwotIwlkZWZpbmUgQVZJVk9fSTJDXzdEM0NfU0laRV9TSElGVAkJCTgKLSMJZGVmaW5lIEFWSVZPX0kyQ183RDNDX1NJWkVfTUFTSwkJCQkoMHhmIDw8IDgpCi0jZGVmaW5lIEFWSVZPX0kyQ19DT05UUk9MMwkJCQkJCTB4N2Q0MAotLyogUmVhZGluZyBpcyBkb25lIDQgYnl0ZXMgYXQgYSB0aW1lOiByZWFkIHRoZSBib3R0b20gOCBiaXRzIGZyb20KLSAqIDdkNDQsIGZvdXIgdGltZXMgaW4gYSByb3cuCi0gKiBXcml0aW5nIGlzIGEgbGl0dGxlIG1vcmUgY29tcGxleC4gIEZpcnN0IHdyaXRlIERBVEEgd2l0aAotICogMHhubm5ubm56eiwgdGhlbiAweG5ubm5ubnl5LCB3aGVyZSBubm5ubm4gaXMgc29tZSBub24tZGV0ZXJtaW5pc3RpYwotICogbWFnaWMgbnVtYmVyLCB6eiBpcywgSSB0aGluaywgdGhlIHNsYXZlIGFkZHJlc3MsIGFuZCB5eSBpcyB0aGUgYnl0ZQotICogeW91IHdhbnQgdG8gd3JpdGUuICovCi0jZGVmaW5lIEFWSVZPX0kyQ19EQVRBCQkJCQkJMHg3ZDQ0Ci0jZGVmaW5lIFI1MjBfSTJDX0FERFJfQ09VTlRfTUFTSyAoMHg3KQotI2RlZmluZSBSNTIwX0kyQ19EQVRBX0NPVU5UX1NISUZUICg4KQotI2RlZmluZSBSNTIwX0kyQ19EQVRBX0NPVU5UX01BU0sgKDB4RjAwKQotI2RlZmluZSBBVklWT19JMkNfQ05UTAkJCQkJCTB4N2Q1MAotIwlkZWZpbmUgQVZJVk9fSTJDX0VOCQkJCQkJCSgxIDw8IDApCi0jCWRlZmluZSBBVklWT19JMkNfUkVTRVQJCQkJCQkoMSA8PCA4KQorI2RlZmluZSBBVklWT19EQ19JMkNfU1RBVFVTMQkJCQkweDdkMzAKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19ET05FCQkJKDEgPDwgMCkKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19OQUNLCQkJKDEgPDwgMSkKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19IQUxUCQkJKDEgPDwgMikKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19HTwkJCSAgICAgICAgKDEgPDwgMykKKyNkZWZpbmUgQVZJVk9fRENfSTJDX1JFU0VUIAkJCQkweDdkMzQKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19TT0ZUX1JFU0VUCQkJKDEgPDwgMCkKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19BQk9SVAkJCSgxIDw8IDgpCisjZGVmaW5lIEFWSVZPX0RDX0kyQ19DT05UUk9MMSAJCQkJMHg3ZDM4CisjCWRlZmluZSBBVklWT19EQ19JMkNfU1RBUlQJCQkoMSA8PCAwKQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX1NUT1AJCQkoMSA8PCAxKQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX1JFQ0VJVkUJCQkoMSA8PCAyKQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX0VOCQkJICAgICAgICAoMSA8PCA4KQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX1BJTl9TRUxFQ1QoeCkJCSgoeCkgPDwgMTYpCisjCWRlZmluZSBBVklWT19TRUxfRERDMQkJCSAgICAgICAgMAorIwlkZWZpbmUgQVZJVk9fU0VMX0REQzIJCQkgICAgICAgIDEKKyMJZGVmaW5lIEFWSVZPX1NFTF9EREMzCQkJICAgICAgICAyCisjZGVmaW5lIEFWSVZPX0RDX0kyQ19DT05UUk9MMiAJCQkJMHg3ZDNjCisjCWRlZmluZSBBVklWT19EQ19JMkNfQUREUl9DT1VOVCh4KQkJKCh4KSA8PCAwKQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX0RBVEFfQ09VTlQoeCkJCSgoeCkgPDwgOCkKKyNkZWZpbmUgQVZJVk9fRENfSTJDX0NPTlRST0wzIAkJCQkweDdkNDAKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19EQVRBX0RSSVZFX0VOCQkoMSA8PCAwKQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX0RBVEFfRFJJVkVfU0VMCQkoMSA8PCAxKQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX0NMS19EUklWRV9FTgkJKDEgPDwgNykKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19SRF9JTlRSQV9CWVRFX0RFTEFZKHgpICAgICAgKCh4KSA8PCA4KQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX1dSX0lOVFJBX0JZVEVfREVMQVkoeCkJKCh4KSA8PCAxNikKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19USU1FX0xJTUlUKHgpCQkoKHgpIDw8IDI0KQorI2RlZmluZSBBVklWT19EQ19JMkNfREFUQSAJCQkJMHg3ZDQ0CisjZGVmaW5lIEFWSVZPX0RDX0kyQ19JTlRFUlJVUFRfQ09OVFJPTCAJCQkweDdkNDgKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19JTlRFUlJVUFRfU1RBVFVTCQkoMSA8PCAwKQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX0lOVEVSUlVQVF9BSwkJKDEgPDwgOCkKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19JTlRFUlJVUFRfRU5BQkxFCQkoMSA8PCAxNikKKyNkZWZpbmUgQVZJVk9fRENfSTJDX0FSQklUUkFUSU9OIAkJCTB4N2Q1MAorIwlkZWZpbmUgQVZJVk9fRENfSTJDX1NXX1dBTlRTX1RPX1VTRV9JMkMJCSgxIDw8IDApCisjCWRlZmluZSBBVklWT19EQ19JMkNfU1dfQ0FOX1VTRV9JMkMJCSgxIDw8IDEpCisjCWRlZmluZSBBVklWT19EQ19JMkNfU1dfRE9ORV9VU0lOR19JMkMJCSgxIDw8IDgpCisjCWRlZmluZSBBVklWT19EQ19JMkNfSFdfTkVFRFNfSTJDCQkoMSA8PCA5KQorIwlkZWZpbmUgQVZJVk9fRENfSTJDX0FCT1JUX0hEQ1BfSTJDCQkoMSA8PCAxNikKKyMJZGVmaW5lIEFWSVZPX0RDX0kyQ19IV19VU0lOR19JMkMJCSgxIDw8IDE3KQorCisjZGVmaW5lIEFWSVZPX0RDX0dQSU9fRERDMV9NQVNLIAkJICAgICAgICAweDdlNDAKKyNkZWZpbmUgQVZJVk9fRENfR1BJT19EREMxX0EgCQkgICAgICAgICAgICAgICAgMHg3ZTQ0CisjZGVmaW5lIEFWSVZPX0RDX0dQSU9fRERDMV9FTiAJCSAgICAgICAgICAgICAgICAweDdlNDgKKyNkZWZpbmUgQVZJVk9fRENfR1BJT19EREMxX1kgCQkgICAgICAgICAgICAgICAgMHg3ZTRjCisKKyNkZWZpbmUgQVZJVk9fRENfR1BJT19EREMyX01BU0sgCQkgICAgICAgIDB4N2U1MAorI2RlZmluZSBBVklWT19EQ19HUElPX0REQzJfQSAJCSAgICAgICAgICAgICAgICAweDdlNTQKKyNkZWZpbmUgQVZJVk9fRENfR1BJT19EREMyX0VOIAkJICAgICAgICAgICAgICAgIDB4N2U1OAorI2RlZmluZSBBVklWT19EQ19HUElPX0REQzJfWSAJCSAgICAgICAgICAgICAgICAweDdlNWMKKworI2RlZmluZSBBVklWT19EQ19HUElPX0REQzNfTUFTSyAJCSAgICAgICAgMHg3ZTYwCisjZGVmaW5lIEFWSVZPX0RDX0dQSU9fRERDM19BIAkJICAgICAgICAgICAgICAgIDB4N2U2NAorI2RlZmluZSBBVklWT19EQ19HUElPX0REQzNfRU4gCQkgICAgICAgICAgICAgICAgMHg3ZTY4CisjZGVmaW5lIEFWSVZPX0RDX0dQSU9fRERDM19ZIAkJICAgICAgICAgICAgICAgIDB4N2U2YwogCiAjZGVmaW5lIEFWSVZPX0RJU1BfSU5URVJSVVBUX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3ZWRjCiAjICAgICAgIGRlZmluZSBBVklWT19EMV9WQkxBTktfSU5URVJSVVBUICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgNCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjUyMC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKaW5kZXggZGRmNTczMS4uMmI4YTVkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNTIwLmMKQEAgLTExOSwxMyArMTE5LDE1IEBACiAJCXJkZXYtPm1jLnZyYW1fd2lkdGggKj0gMjsKIH0KIAotdm9pZCByNTIwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcjUyMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCWZpeGVkMjBfMTIgYTsKIAogCXI1MjBfdnJhbV9nZXRfdHlwZShyZGV2KTsKLQogCXIxMDBfdnJhbV9pbml0X3NpemVzKHJkZXYpOworCXJhZGVvbl92cmFtX2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYywgMCk7CisJaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSkKKwkJcmFkZW9uX2d0dF9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMpOwogCS8qIEZJWE1FOiB3ZSBzaG91bGQgZW5mb3JjZSBkZWZhdWx0IGNsb2NrIGluIGNhc2UgR1BVIGlzIG5vdCBpbgogCSAqIGRlZmF1bHQgc2V0dXAKIAkgKi8KQEAgLTI2NywxMiArMjY5LDE1IEBACiAJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOwogCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLwogCXJhZGVvbl9wbV9pbml0KHJkZXYpOwotCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLwotCXI1MjBfdnJhbV9pbmZvKHJkZXYpOwotCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCi0JciA9IHI0MjBfbWNfaW5pdChyZGV2KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7CisJLyogaW5pdGlhbGl6ZSBBR1AgKi8KKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCXIgPSByYWRlb25fYWdwX2luaXQocmRldik7CisJCWlmIChyKSB7CisJCQlyYWRlb25fYWdwX2Rpc2FibGUocmRldik7CisJCX0KKwl9CisJLyogaW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAqLworCXI1MjBfbWNfaW5pdChyZGV2KTsKIAlydjUxNV9kZWJ1Z2ZzKHJkZXYpOwogCS8qIEZlbmNlIGRyaXZlciAqLwogCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCmluZGV4IDJmZmNmNWEuLmM1MjI5MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMC5jCkBAIC0zNTMsMjMgKzM1MywxNCBAQAogLyoKICAqIFI2MDAgUENJRSBHQVJUCiAgKi8KLWludCByNjAwX2dhcnRfY2xlYXJfcGFnZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGkpCi17Ci0Jdm9pZCBfX2lvbWVtICpwdHIgPSAodm9pZCAqKXJkZXYtPmdhcnQudGFibGUudnJhbS5wdHI7Ci0JdTY0IHB0ZTsKLQotCWlmIChpIDwgMCB8fCBpID4gcmRldi0+Z2FydC5udW1fZ3B1X3BhZ2VzKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlwdGUgPSAwOwotCXdyaXRlcShwdGUsICgodm9pZCBfX2lvbWVtICopcHRyKSArIChpICogOCkpOwotCXJldHVybiAwOwotfQotCiB2b2lkIHI2MDBfcGNpZV9nYXJ0X3RsYl9mbHVzaChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1bnNpZ25lZCBpOwogCXUzMiB0bXA7CiAKKwkvKiBmbHVzaCBoZHAgY2FjaGUgc28gdXBkYXRlcyBoaXQgdnJhbSAqLworCVdSRUczMihSXzAwNTQ4MF9IRFBfTUVNX0NPSEVSRU5DWV9GTFVTSF9DTlRMLCAweDEpOworCiAJV1JFRzMyKFZNX0NPTlRFWFQwX0lOVkFMSURBVElPTl9MT1dfQUREUiwgcmRldi0+bWMuZ3R0X3N0YXJ0ID4+IDEyKTsKIAlXUkVHMzIoVk1fQ09OVEVYVDBfSU5WQUxJREFUSU9OX0hJR0hfQUREUiwgKHJkZXYtPm1jLmd0dF9lbmQgLSAxKSA+PiAxMik7CiAJV1JFRzMyKFZNX0NPTlRFWFQwX1JFUVVFU1RfUkVTUE9OU0UsIFJFUVVFU1RfVFlQRSgxKSk7CkBAIC00MTYsNiArNDA3LDcgQEAKIAlyID0gcmFkZW9uX2dhcnRfdGFibGVfdnJhbV9waW4ocmRldik7CiAJaWYgKHIpCiAJCXJldHVybiByOworCXJhZGVvbl9nYXJ0X3Jlc3RvcmUocmRldik7CiAKIAkvKiBTZXR1cCBMMiBjYWNoZSAqLwogCVdSRUczMihWTV9MMl9DTlRMLCBFTkFCTEVfTDJfQ0FDSEUgfCBFTkFCTEVfTDJfRlJBR01FTlRfUFJPQ0VTU0lORyB8CkBAIC02MTksNiArNjExLDY4IEBACiAJcnY1MTVfdmdhX3JlbmRlcl9kaXNhYmxlKHJkZXYpOwogfQogCisvKioKKyAqIHI2MDBfdnJhbV9ndHRfbG9jYXRpb24gLSB0cnkgdG8gZmluZCBWUkFNICYgR1RUIGxvY2F0aW9uCisgKiBAcmRldjogcmFkZW9uIGRldmljZSBzdHJ1Y3R1cmUgaG9sZGluZyBhbGwgbmVjZXNzYXJ5IGluZm9ybWF0aW9ucworICogQG1jOiBtZW1vcnkgY29udHJvbGxlciBzdHJ1Y3R1cmUgaG9sZGluZyBtZW1vcnkgaW5mb3JtYXRpb25zCisgKgorICogRnVuY3Rpb24gd2lsbCBwbGFjZSB0cnkgdG8gcGxhY2UgVlJBTSBhdCBzYW1lIHBsYWNlIGFzIGluIENQVSAoUENJKQorICogYWRkcmVzcyBzcGFjZSBhcyBzb21lIEdQVSBzZWVtcyB0byBoYXZlIGlzc3VlIHdoZW4gd2UgcmVwcm9ncmFtIGF0CisgKiBkaWZmZXJlbnQgYWRkcmVzcyBzcGFjZS4KKyAqCisgKiBJZiB0aGVyZSBpcyBub3QgZW5vdWdoIHNwYWNlIHRvIGZpdCB0aGUgdW52aXNpYmxlIFZSQU0gYWZ0ZXIgdGhlCisgKiBhcGVydHVyZSB0aGVuIHdlIGxpbWl0IHRoZSBWUkFNIHNpemUgdG8gdGhlIGFwZXJ0dXJlLgorICoKKyAqIElmIHdlIGFyZSB1c2luZyBBR1AgdGhlbiBwbGFjZSBWUkFNIGFkamFjZW50IHRvIEFHUCBhcGVydHVyZSBhcmUgd2UgbmVlZAorICogdGhlbSB0byBiZSBpbiBvbmUgZnJvbSBHUFUgcG9pbnQgb2YgdmlldyBzbyB0aGF0IHdlIGNhbiBwcm9ncmFtIEdQVSB0bworICogY2F0Y2ggYWNjZXNzIG91dHNpZGUgdGhlbSAod2VpcmQgR1BVIHBvbGljeSBzZWUgPz8pLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBuZXZlciBmYWlscywgd29yc3QgY2FzZSBhcmUgbGltaXRpbmcgVlJBTSBvciBHVFQuCisgKgorICogTm90ZTogR1RUIHN0YXJ0LCBlbmQsIHNpemUgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJlZm9yZSBjYWxsaW5nIHRoaXMKKyAqIGZ1bmN0aW9uIG9uIEFHUCBwbGF0Zm9ybS4KKyAqLwordm9pZCByNjAwX3ZyYW1fZ3R0X2xvY2F0aW9uKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX21jICptYykKK3sKKwl1NjQgc2l6ZV9iZiwgc2l6ZV9hZjsKKworCWlmIChtYy0+bWNfdnJhbV9zaXplID4gMHhFMDAwMDAwMCkgeworCQkvKiBsZWF2ZSByb29tIGZvciBhdCBsZWFzdCA1MTJNIEdUVCAqLworCQlkZXZfd2FybihyZGV2LT5kZXYsICJsaW1pdGluZyBWUkFNXG4iKTsKKwkJbWMtPnJlYWxfdnJhbV9zaXplID0gMHhFMDAwMDAwMDsKKwkJbWMtPm1jX3ZyYW1fc2l6ZSA9IDB4RTAwMDAwMDA7CisJfQorCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJc2l6ZV9iZiA9IG1jLT5ndHRfc3RhcnQ7CisJCXNpemVfYWYgPSAweEZGRkZGRkZGIC0gbWMtPmd0dF9lbmQgKyAxOworCQlpZiAoc2l6ZV9iZiA+IHNpemVfYWYpIHsKKwkJCWlmIChtYy0+bWNfdnJhbV9zaXplID4gc2l6ZV9iZikgeworCQkJCWRldl93YXJuKHJkZXYtPmRldiwgImxpbWl0aW5nIFZSQU1cbiIpOworCQkJCW1jLT5yZWFsX3ZyYW1fc2l6ZSA9IHNpemVfYmY7CisJCQkJbWMtPm1jX3ZyYW1fc2l6ZSA9IHNpemVfYmY7CisJCQl9CisJCQltYy0+dnJhbV9zdGFydCA9IG1jLT5ndHRfc3RhcnQgLSBtYy0+bWNfdnJhbV9zaXplOworCQl9IGVsc2UgeworCQkJaWYgKG1jLT5tY192cmFtX3NpemUgPiBzaXplX2FmKSB7CisJCQkJZGV2X3dhcm4ocmRldi0+ZGV2LCAibGltaXRpbmcgVlJBTVxuIik7CisJCQkJbWMtPnJlYWxfdnJhbV9zaXplID0gc2l6ZV9hZjsKKwkJCQltYy0+bWNfdnJhbV9zaXplID0gc2l6ZV9hZjsKKwkJCX0KKwkJCW1jLT52cmFtX3N0YXJ0ID0gbWMtPmd0dF9lbmQ7CisJCX0KKwkJbWMtPnZyYW1fZW5kID0gbWMtPnZyYW1fc3RhcnQgKyBtYy0+bWNfdnJhbV9zaXplIC0gMTsKKwkJZGV2X2luZm8ocmRldi0+ZGV2LCAiVlJBTTogJWxsdU0gMHglMDhsbFggLSAweCUwOGxsWCAoJWxsdU0gdXNlZClcbiIsCisJCQkJbWMtPm1jX3ZyYW1fc2l6ZSA+PiAyMCwgbWMtPnZyYW1fc3RhcnQsCisJCQkJbWMtPnZyYW1fZW5kLCBtYy0+cmVhbF92cmFtX3NpemUgPj4gMjApOworCX0gZWxzZSB7CisJCXU2NCBiYXNlID0gMDsKKwkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkKKwkJCWJhc2UgPSAoUlJFRzMyKE1DX1ZNX0ZCX0xPQ0FUSU9OKSAmIDB4RkZGRikgPDwgMjQ7CisJCXJhZGVvbl92cmFtX2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYywgYmFzZSk7CisJCXJhZGVvbl9ndHRfbG9jYXRpb24ocmRldiwgbWMpOworCX0KK30KKwogaW50IHI2MDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlmaXhlZDIwXzEyIGE7CkBAIC02NTgsNzUgKzcxMiwyMSBAQAogCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KIAlyZGV2LT5tYy5tY192cmFtX3NpemUgPSBSUkVHMzIoQ09ORklHX01FTVNJWkUpOwogCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gUlJFRzMyKENPTkZJR19NRU1TSVpFKTsKLQotCWlmIChyZGV2LT5tYy5tY192cmFtX3NpemUgPiByZGV2LT5tYy5hcGVyX3NpemUpCisJcmRldi0+bWMudmlzaWJsZV92cmFtX3NpemUgPSByZGV2LT5tYy5hcGVyX3NpemU7CisJLyogRklYTUUgcmVtb3ZlIHRoaXMgb25jZSB3ZSBzdXBwb3J0IHVubWFwcGFibGUgVlJBTSAqLworCWlmIChyZGV2LT5tYy5tY192cmFtX3NpemUgPiByZGV2LT5tYy5hcGVyX3NpemUpIHsKIAkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOwotCi0JaWYgKHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKQogCQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKLQotCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJLyogZ3R0X3NpemUgaXMgc2V0dXAgYnkgcmFkZW9uX2FncF9pbml0ICovCi0JCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLmFncF9iYXNlOwotCQl0bXAgPSAweEZGRkZGRkZGVUwgLSByZGV2LT5tYy5hZ3BfYmFzZSAtIHJkZXYtPm1jLmd0dF9zaXplOwotCQkvKiBUcnkgdG8gcHV0IHZyYW0gYmVmb3JlIG9yIGFmdGVyIEFHUCBiZWNhdXNlIHdlCi0JCSAqIHdlIHdhbnQgU1lTVEVNX0FQRVJUVVJFIHRvIGNvdmVyIGJvdGggVlJBTSBhbmQKLQkJICogQUdQIHNvIHRoYXQgR1BVIGNhbiBjYXRjaCBvdXQgb2YgVlJBTS9BR1AgYWNjZXNzCi0JCSAqLwotCQlpZiAocmRldi0+bWMuZ3R0X2xvY2F0aW9uID4gcmRldi0+bWMubWNfdnJhbV9zaXplKSB7Ci0JCQkvKiBFbm91Z2ggcGxhY2UgYmVmb3JlICovCi0JCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uIC0KLQkJCQkJCQlyZGV2LT5tYy5tY192cmFtX3NpemU7Ci0JCX0gZWxzZSBpZiAodG1wID4gcmRldi0+bWMubWNfdnJhbV9zaXplKSB7Ci0JCQkvKiBFbm91Z2ggcGxhY2UgYWZ0ZXIgKi8KLQkJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKwotCQkJCQkJCXJkZXYtPm1jLmd0dF9zaXplOwotCQl9IGVsc2UgewotCQkJLyogVHJ5IHRvIHNldHVwIFZSQU0gdGhlbiBBR1AgbWlnaHQgbm90Ci0JCQkgKiBub3Qgd29yayBvbiBzb21lIGNhcmQKLQkJCSAqLwotCQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4MDAwMDAwMDBVTDsKLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKLQkJfQotCX0gZWxzZSB7Ci0JCXJkZXYtPm1jLmd0dF9zaXplID0gcmFkZW9uX2dhcnRfc2l6ZSAqIDEwMjQgKiAxMDI0OwotCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gKFJSRUczMihNQ19WTV9GQl9MT0NBVElPTikgJgotCQkJCQkJCTB4RkZGRikgPDwgMjQ7Ci0JCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemU7Ci0JCWlmICgoMHhGRkZGRkZGRlVMIC0gdG1wKSA+PSByZGV2LT5tYy5ndHRfc2l6ZSkgewotCQkJLyogRW5vdWdoIHBsYWNlIGFmdGVyIHZyYW0gKi8KLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHRtcDsKLQkJfSBlbHNlIGlmIChyZGV2LT5tYy52cmFtX2xvY2F0aW9uID49IHJkZXYtPm1jLmd0dF9zaXplKSB7Ci0JCQkvKiBFbm91Z2ggcGxhY2UgYmVmb3JlIHZyYW0gKi8KLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBOb3QgZW5vdWdoIHBsYWNlIGFmdGVyIG9yIGJlZm9yZSBzaHJpbmsKLQkJCSAqIGdhcnQgc2l6ZQotCQkJICovCi0JCQlpZiAocmRldi0+bWMudnJhbV9sb2NhdGlvbiA+ICgweEZGRkZGRkZGVUwgLSB0bXApKSB7Ci0JCQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMDsKLQkJCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb247Ci0JCQl9IGVsc2UgewotCQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHRtcDsKLQkJCQlyZGV2LT5tYy5ndHRfc2l6ZSA9IDB4RkZGRkZGRkZVTCAtIHRtcDsKLQkJCX0KLQkJfQotCQlyZGV2LT5tYy5ndHRfbG9jYXRpb24gPSByZGV2LT5tYy5tY192cmFtX3NpemU7CiAJfQotCXJkZXYtPm1jLnZyYW1fc3RhcnQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOwotCXJkZXYtPm1jLnZyYW1fZW5kID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDE7Ci0JcmRldi0+bWMuZ3R0X3N0YXJ0ID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uOwotCXJkZXYtPm1jLmd0dF9lbmQgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7CisJcjYwMF92cmFtX2d0dF9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMpOwogCS8qIEZJWE1FOiB3ZSBzaG91bGQgZW5mb3JjZSBkZWZhdWx0IGNsb2NrIGluIGNhc2UgR1BVIGlzIG5vdCBpbgogCSAqIGRlZmF1bHQgc2V0dXAKIAkgKi8KIAlhLmZ1bGwgPSByZml4ZWRfY29uc3QoMTAwKTsKIAlyZGV2LT5wbS5zY2xrLmZ1bGwgPSByZml4ZWRfY29uc3QocmRldi0+Y2xvY2suZGVmYXVsdF9zY2xrKTsKIAlyZGV2LT5wbS5zY2xrLmZ1bGwgPSByZml4ZWRfZGl2KHJkZXYtPnBtLnNjbGssIGEpOwotCiAJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkKIAkJcmRldi0+bWMuaWdwX3NpZGVwb3J0X2VuYWJsZWQgPSByYWRlb25fYXRvbWJpb3Nfc2lkZXBvcnRfcHJlc2VudChyZGV2KTsKLQogCXJldHVybiAwOwogfQogCkBAIC05ODEsNiArOTgxLDkgQEAKIHsKIAl1MzIgdGlsaW5nX2NvbmZpZzsKIAl1MzIgcmFtY2ZnOworCXUzMiBiYWNrZW5kX21hcDsKKwl1MzIgY2NfcmJfYmFja2VuZF9kaXNhYmxlOworCXUzMiBjY19nY19zaGFkZXJfcGlwZV9jb25maWc7CiAJdTMyIHRtcDsKIAlpbnQgaSwgajsKIAl1MzIgc3FfY29uZmlnOwpAQCAtMTA5MCw4ICsxMDkzLDExIEBACiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQorCXJkZXYtPmNvbmZpZy5yNjAwLnRpbGluZ19ucGlwZXMgPSByZGV2LT5jb25maWcucjYwMC5tYXhfdGlsZV9waXBlczsKKwlyZGV2LT5jb25maWcucjYwMC50aWxpbmdfbmJhbmtzID0gNCA8PCAoKHJhbWNmZyAmIE5PT0ZCQU5LX01BU0spID4+IE5PT0ZCQU5LX1NISUZUKTsKIAl0aWxpbmdfY29uZmlnIHw9IEJBTktfVElMSU5HKChyYW1jZmcgJiBOT09GQkFOS19NQVNLKSA+PiBOT09GQkFOS19TSElGVCk7CiAJdGlsaW5nX2NvbmZpZyB8PSBHUk9VUF9TSVpFKDApOworCXJkZXYtPmNvbmZpZy5yNjAwLnRpbGluZ19ncm91cF9zaXplID0gMjU2OwogCXRtcCA9IChyYW1jZmcgJiBOT09GUk9XU19NQVNLKSA+PiBOT09GUk9XU19TSElGVDsKIAlpZiAodG1wID4gMykgewogCQl0aWxpbmdfY29uZmlnIHw9IFJPV19USUxJTkcoMyk7CkBAIC0xMTAxLDI0ICsxMTA3LDMzIEBACiAJCXRpbGluZ19jb25maWcgfD0gU0FNUExFX1NQTElUKHRtcCk7CiAJfQogCXRpbGluZ19jb25maWcgfD0gQkFOS19TV0FQUygxKTsKLQl0bXAgPSByNjAwX2dldF90aWxlX3BpcGVfdG9fYmFja2VuZF9tYXAocmRldi0+Y29uZmlnLnI2MDAubWF4X3RpbGVfcGlwZXMsCi0JCQkJCQlyZGV2LT5jb25maWcucjYwMC5tYXhfYmFja2VuZHMsCi0JCQkJCQkoMHhmZiA8PCByZGV2LT5jb25maWcucjYwMC5tYXhfYmFja2VuZHMpICYgMHhmZik7Ci0JdGlsaW5nX2NvbmZpZyB8PSBCQUNLRU5EX01BUCh0bXApOworCisJY2NfcmJfYmFja2VuZF9kaXNhYmxlID0gUlJFRzMyKENDX1JCX0JBQ0tFTkRfRElTQUJMRSkgJiAweDAwZmYwMDAwOworCWNjX3JiX2JhY2tlbmRfZGlzYWJsZSB8PQorCQlCQUNLRU5EX0RJU0FCTEUoKFI2WFhfTUFYX0JBQ0tFTkRTX01BU0sgPDwgcmRldi0+Y29uZmlnLnI2MDAubWF4X2JhY2tlbmRzKSAmIFI2WFhfTUFYX0JBQ0tFTkRTX01BU0spOworCisJY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnID0gUlJFRzMyKENDX0dDX1NIQURFUl9QSVBFX0NPTkZJRykgJiAweGZmZmZmZjAwOworCWNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyB8PQorCQlJTkFDVElWRV9RRF9QSVBFUygoUjZYWF9NQVhfUElQRVNfTUFTSyA8PCByZGV2LT5jb25maWcucjYwMC5tYXhfcGlwZXMpICYgUjZYWF9NQVhfUElQRVNfTUFTSyk7CisJY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnIHw9CisJCUlOQUNUSVZFX1NJTURTKChSNlhYX01BWF9TSU1EU19NQVNLIDw8IHJkZXYtPmNvbmZpZy5yNjAwLm1heF9zaW1kcykgJiBSNlhYX01BWF9TSU1EU19NQVNLKTsKKworCWJhY2tlbmRfbWFwID0gcjYwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKHJkZXYtPmNvbmZpZy5yNjAwLm1heF90aWxlX3BpcGVzLAorCQkJCQkJCShSNlhYX01BWF9CQUNLRU5EUyAtCisJCQkJCQkJIHI2MDBfY291bnRfcGlwZV9iaXRzKChjY19yYl9iYWNrZW5kX2Rpc2FibGUgJgorCQkJCQkJCQkJICAgICAgIFI2WFhfTUFYX0JBQ0tFTkRTX01BU0spID4+IDE2KSksCisJCQkJCQkJKGNjX3JiX2JhY2tlbmRfZGlzYWJsZSA+PiAxNikpOworCisJdGlsaW5nX2NvbmZpZyB8PSBCQUNLRU5EX01BUChiYWNrZW5kX21hcCk7CiAJV1JFRzMyKEdCX1RJTElOR19DT05GSUcsIHRpbGluZ19jb25maWcpOwogCVdSRUczMihEQ1BfVElMSU5HX0NPTkZJRywgdGlsaW5nX2NvbmZpZyAmIDB4ZmZmZik7CiAJV1JFRzMyKEhEUF9USUxJTkdfQ09ORklHLCB0aWxpbmdfY29uZmlnICYgMHhmZmZmKTsKIAotCXRtcCA9IEJBQ0tFTkRfRElTQUJMRSgoUjZYWF9NQVhfQkFDS0VORFNfTUFTSyA8PCByZGV2LT5jb25maWcucjYwMC5tYXhfYmFja2VuZHMpICYgUjZYWF9NQVhfQkFDS0VORFNfTUFTSyk7Ci0JV1JFRzMyKENDX1JCX0JBQ0tFTkRfRElTQUJMRSwgdG1wKTsKLQogCS8qIFNldHVwIHBpcGVzICovCi0JdG1wID0gSU5BQ1RJVkVfUURfUElQRVMoKFI2WFhfTUFYX1BJUEVTX01BU0sgPDwgcmRldi0+Y29uZmlnLnI2MDAubWF4X3BpcGVzKSAmIFI2WFhfTUFYX1BJUEVTX01BU0spOwotCXRtcCB8PSBJTkFDVElWRV9TSU1EUygoUjZYWF9NQVhfU0lNRFNfTUFTSyA8PCByZGV2LT5jb25maWcucjYwMC5tYXhfc2ltZHMpICYgUjZYWF9NQVhfU0lNRFNfTUFTSyk7Ci0JV1JFRzMyKENDX0dDX1NIQURFUl9QSVBFX0NPTkZJRywgdG1wKTsKLQlXUkVHMzIoR0NfVVNFUl9TSEFERVJfUElQRV9DT05GSUcsIHRtcCk7CisJV1JFRzMyKENDX1JCX0JBQ0tFTkRfRElTQUJMRSwgY2NfcmJfYmFja2VuZF9kaXNhYmxlKTsKKwlXUkVHMzIoQ0NfR0NfU0hBREVSX1BJUEVfQ09ORklHLCBjY19nY19zaGFkZXJfcGlwZV9jb25maWcpOwogCi0JdG1wID0gUjZYWF9NQVhfQkFDS0VORFMgLSByNjAwX2NvdW50X3BpcGVfYml0cyh0bXAgJiBJTkFDVElWRV9RRF9QSVBFU19NQVNLKTsKKwl0bXAgPSBSNlhYX01BWF9QSVBFUyAtIHI2MDBfY291bnRfcGlwZV9iaXRzKChjY19nY19zaGFkZXJfcGlwZV9jb25maWcgJiBJTkFDVElWRV9RRF9QSVBFU19NQVNLKSA+PiA4KTsKIAlXUkVHMzIoVkdUX09VVF9ERUFMTE9DX0NOVEwsICh0bXAgKiA0KSAmIERFQUxMT0NfRElTVF9NQVNLKTsKIAlXUkVHMzIoVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMLCAoKHRtcCAqIDQpIC0gMikgJiBWVFhfUkVVU0VfREVQVEhfTUFTSyk7CiAKQEAgLTE3ODMsMTIgKzE3OTgsMTcgQEAKIAkJCSAgc3RydWN0IHJhZGVvbl9mZW5jZSAqZmVuY2UpCiB7CiAJLyogQWxzbyBjb25zaWRlciBFVkVOVF9XUklURV9FT1AuICBpdCBoYW5kbGVzIHRoZSBpbnRlcnJ1cHRzICsgdGltZXN0YW1wcyArIGV2ZW50cyAqLworCisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0VWRU5UX1dSSVRFLCAwKSk7CisJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgQ0FDSEVfRkxVU0hfQU5EX0lOVl9FVkVOVCk7CisJLyogd2FpdCBmb3IgM0QgaWRsZSBjbGVhbiAqLworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09ORklHX1JFRywgMSkpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChXQUlUX1VOVElMIC0gUEFDS0VUM19TRVRfQ09ORklHX1JFR19PRkZTRVQpID4+IDIpOworCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFdBSVRfM0RfSURMRV9iaXQgfCBXQUlUXzNEX0lETEVDTEVBTl9iaXQpOwogCS8qIEVtaXQgZmVuY2Ugc2VxdWVuY2UgJiBmaXJlIElSUSAqLwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09ORklHX1JFRywgMSkpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsICgocmRldi0+ZmVuY2VfZHJ2LnNjcmF0Y2hfcmVnIC0gUEFDS0VUM19TRVRfQ09ORklHX1JFR19PRkZTRVQpID4+IDIpKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBmZW5jZS0+c2VxKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQwKFJfMDA1NDgwX0hEUF9NRU1fQ09IRVJFTkNZX0ZMVVNIX0NOVEwsIDApKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCAxKTsKIAkvKiBDUF9JTlRFUlJVUFQgcGFja2V0IDMgbm8gbG9uZ2VyIGV4aXN0cywgdXNlIHBhY2tldCAwICovCiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMChDUF9JTlRfU1RBVFVTLCAwKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUkJfSU5UX1NUQVQpOwpAQCAtMjc0NSw2ICsyNzY1LDcgQEAKIAkJCWNhc2UgMDogLyogRDEgdmJsYW5rICovCiAJCQkJaWYgKGRpc3BfaW50ICYgTEJfRDFfVkJMQU5LX0lOVEVSUlVQVCkgewogCQkJCQlkcm1faGFuZGxlX3ZibGFuayhyZGV2LT5kZGV2LCAwKTsKKwkJCQkJd2FrZV91cCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7CiAJCQkJCWRpc3BfaW50ICY9IH5MQl9EMV9WQkxBTktfSU5URVJSVVBUOwogCQkJCQlEUk1fREVCVUcoIklIOiBEMSB2YmxhbmtcbiIpOwogCQkJCX0KQEAgLTI3NjUsNiArMjc4Niw3IEBACiAJCQljYXNlIDA6IC8qIEQyIHZibGFuayAqLwogCQkJCWlmIChkaXNwX2ludCAmIExCX0QyX1ZCTEFOS19JTlRFUlJVUFQpIHsKIAkJCQkJZHJtX2hhbmRsZV92YmxhbmsocmRldi0+ZGRldiwgMSk7CisJCQkJCXdha2VfdXAoJnJkZXYtPmlycS52YmxhbmtfcXVldWUpOwogCQkJCQlkaXNwX2ludCAmPSB+TEJfRDJfVkJMQU5LX0lOVEVSUlVQVDsKIAkJCQkJRFJNX0RFQlVHKCJJSDogRDIgdmJsYW5rXG4iKTsKIAkJCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYXVkaW8uYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9hdWRpby5jCmluZGV4IDBkY2I2OTAuLmRiOTI4MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9hdWRpby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9hdWRpby5jCkBAIC0zNSw3ICszNSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcjYwMF9hdWRpb19jaGlwc2V0X3N1cHBvcnRlZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlyZXR1cm4gKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDAgJiYgcmRldi0+ZmFtaWx5IDwgQ0hJUF9SVjcxMCkKKwlyZXR1cm4gcmRldi0+ZmFtaWx5ID49IENISVBfUjYwMAogCQl8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzYwMAogCQl8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzY5MAogCQl8fCByZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzc0MDsKQEAgLTE0NywxNSArMTQ3LDIzIEBACiB9CiAKIC8qCisgKiB0dXJuIG9uL29mZiBhdWRpbyBlbmdpbmUKKyAqLworc3RhdGljIHZvaWQgcjYwMF9hdWRpb19lbmdpbmVfZW5hYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBib29sIGVuYWJsZSkKK3sKKwlEUk1fSU5GTygiJXMgYXVkaW8gc3VwcG9ydCIsIGVuYWJsZSA/ICJFbmFibGluZyIgOiAiRGlzYWJsaW5nIik7CisJV1JFRzMyX1AoUjYwMF9BVURJT19FTkFCTEUsIGVuYWJsZSA/IDB4ODEwMDAwMDAgOiAweDAsIH4weDgxMDAwMDAwKTsKK30KKworLyoKICAqIGluaXRpYWxpemUgdGhlIGF1ZGlvIHZhcnMgYW5kIHJlZ2lzdGVyIHRoZSB1cGRhdGUgdGltZXIKICAqLwogaW50IHI2MDBfYXVkaW9faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKLQlpZiAoIXI2MDBfYXVkaW9fY2hpcHNldF9zdXBwb3J0ZWQocmRldikpCisJaWYgKCFyYWRlb25fYXVkaW8gfHwgIXI2MDBfYXVkaW9fY2hpcHNldF9zdXBwb3J0ZWQocmRldikpCiAJCXJldHVybiAwOwogCi0JRFJNX0lORk8oIiVzIGF1ZGlvIHN1cHBvcnQiLCByYWRlb25fYXVkaW8gPyAiRW5hYmxpbmciIDogIkRpc2FibGluZyIpOwotCVdSRUczMl9QKFI2MDBfQVVESU9fRU5BQkxFLCByYWRlb25fYXVkaW8gPyAweDgxMDAwMDAwIDogMHgwLCB+MHg4MTAwMDAwMCk7CisJcjYwMF9hdWRpb19lbmdpbmVfZW5hYmxlKHJkZXYsIHRydWUpOwogCiAJcmRldi0+YXVkaW9fY2hhbm5lbHMgPSAtMTsKIAlyZGV2LT5hdWRpb19yYXRlID0gLTE7CkBAIC0yNTgsOSArMjY2LDEwIEBACiAgKi8KIHZvaWQgcjYwMF9hdWRpb19maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewotCWlmICghcjYwMF9hdWRpb19jaGlwc2V0X3N1cHBvcnRlZChyZGV2KSkKKwlpZiAoIXJhZGVvbl9hdWRpbyB8fCAhcjYwMF9hdWRpb19jaGlwc2V0X3N1cHBvcnRlZChyZGV2KSkKIAkJcmV0dXJuOwogCiAJZGVsX3RpbWVyKCZyZGV2LT5hdWRpb190aW1lcik7Ci0JV1JFRzMyX1AoUjYwMF9BVURJT19FTkFCTEUsIDB4MCwgfjB4ODEwMDAwMDApOworCisJcjYwMF9hdWRpb19lbmdpbmVfZW5hYmxlKHJkZXYsIGZhbHNlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdC5jCmluZGV4IDVlYTQzMjMuLmY0ZmI4OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXQuYwpAQCAtNDksNyArNDksNyBAQAogCVJJTkdfTE9DQUxTOwogCURSTV9ERUJVRygiXG4iKTsKIAotCWggPSAoaCArIDcpICYgfjc7CisJaCA9IEFMSUdOKGgsIDgpOwogCWlmIChoIDwgOCkKIAkJaCA9IDg7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKaW5kZXggNDQ2Yjc2NS4uZjZjNmM3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfa21zLmMKQEAgLTI1LDcgKzI1LDcgQEAKIAl1MzIgY2JfY29sb3JfaW5mbzsKIAlpbnQgcGl0Y2gsIHNsaWNlOwogCi0JaCA9IChoICsgNykgJiB+NzsKKwloID0gQUxJR04oaCwgOCk7CiAJaWYgKGggPCA4KQogCQloID0gODsKIApAQCAtMzk2LDE1ICszOTYsMTMgQEAKIAkJCQkgICAgTlVNX0VTX1NUQUNLX0VOVFJJRVMobnVtX2VzX3N0YWNrX2VudHJpZXMpKTsKIAogCS8qIGVtaXQgYW4gSUIgcG9pbnRpbmcgYXQgZGVmYXVsdCBzdGF0ZSAqLwotCWR3b3JkcyA9IChyZGV2LT5yNjAwX2JsaXQuc3RhdGVfbGVuICsgMHhmKSAmIH4weGY7CisJZHdvcmRzID0gQUxJR04ocmRldi0+cjYwMF9ibGl0LnN0YXRlX2xlbiwgMHgxMCk7CiAJZ3B1X2FkZHIgPSByZGV2LT5yNjAwX2JsaXQuc2hhZGVyX2dwdV9hZGRyICsgcmRldi0+cjYwMF9ibGl0LnN0YXRlX29mZnNldDsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfSU5ESVJFQ1RfQlVGRkVSLCAyKSk7CiAJcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgZ3B1X2FkZHIgJiAweEZGRkZGRkZDKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCB1cHBlcl8zMl9iaXRzKGdwdV9hZGRyKSAmIDB4RkYpOwogCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIGR3b3Jkcyk7CiAKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfRVZFTlRfV1JJVEUsIDApKTsKLQlyYWRlb25fcmluZ193cml0ZShyZGV2LCBDQUNIRV9GTFVTSF9BTkRfSU5WX0VWRU5UKTsKIAkvKiBTUSBjb25maWcgKi8KIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCBQQUNLRVQzKFBBQ0tFVDNfU0VUX0NPTkZJR19SRUcsIDYpKTsKIAlyYWRlb25fcmluZ193cml0ZShyZGV2LCAoU1FfQ09ORklHIC0gUEFDS0VUM19TRVRfQ09ORklHX1JFR19PRkZTRVQpID4+IDIpOwpAQCAtNTc4LDkgKzU3Niw5IEBACiAJcmluZ19zaXplID0gbnVtX2xvb3BzICogZHdvcmRzX3Blcl9sb29wOwogCS8qIHNldCBkZWZhdWx0ICArIHNoYWRlcnMgKi8KIAlyaW5nX3NpemUgKz0gNDA7IC8qIHNoYWRlcnMgKyBkZWYgc3RhdGUgKi8KLQlyaW5nX3NpemUgKz0gNzsgLyogZmVuY2UgZW1pdCBmb3IgVkIgSUIgKi8KKwlyaW5nX3NpemUgKz0gMTA7IC8qIGZlbmNlIGVtaXQgZm9yIFZCIElCICovCiAJcmluZ19zaXplICs9IDU7IC8qIGRvbmUgY29weSAqLwotCXJpbmdfc2l6ZSArPSA3OyAvKiBmZW5jZSBlbWl0IGZvciBkb25lIGNvcHkgKi8KKwlyaW5nX3NpemUgKz0gMTA7IC8qIGZlbmNlIGVtaXQgZm9yIGRvbmUgY29weSAqLwogCXIgPSByYWRlb25fcmluZ19sb2NrKHJkZXYsIHJpbmdfc2l6ZSk7CiAJaWYgKHIpCiAJCXJldHVybiByOwpAQCAtNTk0LDEzICs1OTIsNiBAQAogewogCWludCByOwogCi0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgUEFDS0VUMyhQQUNLRVQzX0VWRU5UX1dSSVRFLCAwKSk7Ci0JcmFkZW9uX3Jpbmdfd3JpdGUocmRldiwgQ0FDSEVfRkxVU0hfQU5EX0lOVl9FVkVOVCk7Ci0JLyogd2FpdCBmb3IgM0QgaWRsZSBjbGVhbiAqLwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFBBQ0tFVDMoUEFDS0VUM19TRVRfQ09ORklHX1JFRywgMSkpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIChXQUlUX1VOVElMIC0gUEFDS0VUM19TRVRfQ09ORklHX1JFR19PRkZTRVQpID4+IDIpOwotCXJhZGVvbl9yaW5nX3dyaXRlKHJkZXYsIFdBSVRfM0RfSURMRV9iaXQgfCBXQUlUXzNEX0lETEVDTEVBTl9iaXQpOwotCiAJaWYgKHJkZXYtPnI2MDBfYmxpdC52Yl9pYikKIAkJcjYwMF92Yl9pYl9wdXQocmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X3NoYWRlcnMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9ibGl0X3NoYWRlcnMuYwppbmRleCBkNzQ1ZTgxLi5hMTEyYzU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfYmxpdF9zaGFkZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2JsaXRfc2hhZGVycy5jCkBAIC05LDExICs5LDYgQEAKIAkweGMwMDEyODAwLAogCTB4ODAwMDAwMDAsCiAJMHg4MDAwMDAwMCwKLQkweGMwMDA0NjAwLAotCTB4MDAwMDAwMTYsCi0JMHhjMDAxNjgwMCwKLQkweDAwMDAwMDEwLAotCTB4MDAwMjgwMDAsCiAJMHhjMDAxNjgwMCwKIAkweDAwMDAwMDEwLAogCTB4MDAwMDgwMDAsCkBAIC01MzEsMTEgKzUyNiw2IEBACiAJMHhjMDAxMjgwMCwKIAkweDgwMDAwMDAwLAogCTB4ODAwMDAwMDAsCi0JMHhjMDAwNDYwMCwKLQkweDAwMDAwMDE2LAotCTB4YzAwMTY4MDAsCi0JMHgwMDAwMDAxMCwKLQkweDAwMDI4MDAwLAogCTB4YzAwMTY4MDAsCiAJMHgwMDAwMDAxMCwKIAkweDAwMDA4MDAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3AuYwppbmRleCA3NWJjZjM1Li40MDQxNmMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3AuYwpAQCAtNzM0LDggKzczNCw4IEBACiAJdTMyIGhkcF9ob3N0X3BhdGhfY250bDsKIAl1MzIgYmFja2VuZF9tYXA7CiAJdTMyIGdiX3RpbGluZ19jb25maWcgPSAwOwotCXUzMiBjY19yYl9iYWNrZW5kX2Rpc2FibGUgPSAwOwotCXUzMiBjY19nY19zaGFkZXJfcGlwZV9jb25maWcgPSAwOworCXUzMiBjY19yYl9iYWNrZW5kX2Rpc2FibGU7CisJdTMyIGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZzsKIAl1MzIgcmFtY2ZnOwogCiAJLyogc2V0dXAgY2hpcCBzcGVjcyAqLwpAQCAtODU3LDI5ICs4NTcsNDQgQEAKIAogCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9CQU5LX1NXQVBTKDEpOwogCi0JYmFja2VuZF9tYXAgPSByNjAwX2dldF90aWxlX3BpcGVfdG9fYmFja2VuZF9tYXAoZGV2X3ByaXYtPnI2MDBfbWF4X3RpbGVfcGlwZXMsCi0JCQkJCQkJZGV2X3ByaXYtPnI2MDBfbWF4X2JhY2tlbmRzLAotCQkJCQkJCSgweGZmIDw8IGRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcykgJiAweGZmKTsKLQlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfQkFDS0VORF9NQVAoYmFja2VuZF9tYXApOworCWNjX3JiX2JhY2tlbmRfZGlzYWJsZSA9IFJBREVPTl9SRUFEKFI2MDBfQ0NfUkJfQkFDS0VORF9ESVNBQkxFKSAmIDB4MDBmZjAwMDA7CisJY2NfcmJfYmFja2VuZF9kaXNhYmxlIHw9CisJCVI2MDBfQkFDS0VORF9ESVNBQkxFKChSNlhYX01BWF9CQUNLRU5EU19NQVNLIDw8IGRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcykgJiBSNlhYX01BWF9CQUNLRU5EU19NQVNLKTsKIAotCWNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyA9CisJY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnID0gUkFERU9OX1JFQUQoUjYwMF9DQ19HQ19TSEFERVJfUElQRV9DT05GSUcpICYgMHhmZmZmZmYwMDsKKwljY19nY19zaGFkZXJfcGlwZV9jb25maWcgfD0KIAkJUjYwMF9JTkFDVElWRV9RRF9QSVBFUygoUjZYWF9NQVhfUElQRVNfTUFTSyA8PCBkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMpICYgUjZYWF9NQVhfUElQRVNfTUFTSyk7CiAJY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnIHw9CiAJCVI2MDBfSU5BQ1RJVkVfU0lNRFMoKFI2WFhfTUFYX1NJTURTX01BU0sgPDwgZGV2X3ByaXYtPnI2MDBfbWF4X3NpbWRzKSAmIFI2WFhfTUFYX1NJTURTX01BU0spOwogCi0JY2NfcmJfYmFja2VuZF9kaXNhYmxlID0KLQkJUjYwMF9CQUNLRU5EX0RJU0FCTEUoKFI2WFhfTUFYX0JBQ0tFTkRTX01BU0sgPDwgZGV2X3ByaXYtPnI2MDBfbWF4X2JhY2tlbmRzKSAmIFI2WFhfTUFYX0JBQ0tFTkRTX01BU0spOworCWJhY2tlbmRfbWFwID0gcjYwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKGRldl9wcml2LT5yNjAwX21heF90aWxlX3BpcGVzLAorCQkJCQkJCShSNlhYX01BWF9CQUNLRU5EUyAtCisJCQkJCQkJIHI2MDBfY291bnRfcGlwZV9iaXRzKChjY19yYl9iYWNrZW5kX2Rpc2FibGUgJgorCQkJCQkJCQkJICAgICAgIFI2WFhfTUFYX0JBQ0tFTkRTX01BU0spID4+IDE2KSksCisJCQkJCQkJKGNjX3JiX2JhY2tlbmRfZGlzYWJsZSA+PiAxNikpOworCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9CQUNLRU5EX01BUChiYWNrZW5kX21hcCk7CiAKIAlSQURFT05fV1JJVEUoUjYwMF9HQl9USUxJTkdfQ09ORklHLCAgICAgIGdiX3RpbGluZ19jb25maWcpOwogCVJBREVPTl9XUklURShSNjAwX0RDUF9USUxJTkdfQ09ORklHLCAgICAoZ2JfdGlsaW5nX2NvbmZpZyAmIDB4ZmZmZikpOwogCVJBREVPTl9XUklURShSNjAwX0hEUF9USUxJTkdfQ09ORklHLCAgICAoZ2JfdGlsaW5nX2NvbmZpZyAmIDB4ZmZmZikpOworCWlmIChnYl90aWxpbmdfY29uZmlnICYgMHhjMCkgeworCQlkZXZfcHJpdi0+cjYwMF9ncm91cF9zaXplID0gNTEyOworCX0gZWxzZSB7CisJCWRldl9wcml2LT5yNjAwX2dyb3VwX3NpemUgPSAyNTY7CisJfQorCWRldl9wcml2LT5yNjAwX25waXBlcyA9IDEgPDwgKChnYl90aWxpbmdfY29uZmlnID4+IDEpICYgMHg3KTsKKwlpZiAoZ2JfdGlsaW5nX2NvbmZpZyAmIDB4MzApIHsKKwkJZGV2X3ByaXYtPnI2MDBfbmJhbmtzID0gODsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+cjYwMF9uYmFua3MgPSA0OworCX0KIAogCVJBREVPTl9XUklURShSNjAwX0NDX1JCX0JBQ0tFTkRfRElTQUJMRSwgICAgICBjY19yYl9iYWNrZW5kX2Rpc2FibGUpOwogCVJBREVPTl9XUklURShSNjAwX0NDX0dDX1NIQURFUl9QSVBFX0NPTkZJRywgICBjY19nY19zaGFkZXJfcGlwZV9jb25maWcpOwogCVJBREVPTl9XUklURShSNjAwX0dDX1VTRVJfU0hBREVSX1BJUEVfQ09ORklHLCBjY19nY19zaGFkZXJfcGlwZV9jb25maWcpOwogCiAJbnVtX3FkX3BpcGVzID0KLQkJUjZYWF9NQVhfQkFDS0VORFMgLSByNjAwX2NvdW50X3BpcGVfYml0cyhjY19nY19zaGFkZXJfcGlwZV9jb25maWcgJiBSNjAwX0lOQUNUSVZFX1FEX1BJUEVTX01BU0spOworCQlSNlhYX01BWF9QSVBFUyAtIHI2MDBfY291bnRfcGlwZV9iaXRzKChjY19nY19zaGFkZXJfcGlwZV9jb25maWcgJiBSNjAwX0lOQUNUSVZFX1FEX1BJUEVTX01BU0spID4+IDgpOwogCVJBREVPTl9XUklURShSNjAwX1ZHVF9PVVRfREVBTExPQ19DTlRMLCAobnVtX3FkX3BpcGVzICogNCkgJiBSNjAwX0RFQUxMT0NfRElTVF9NQVNLKTsKIAlSQURFT05fV1JJVEUoUjYwMF9WR1RfVkVSVEVYX1JFVVNFX0JMT0NLX0NOVEwsICgobnVtX3FkX3BpcGVzICogNCkgLSAyKSAmIFI2MDBfVlRYX1JFVVNFX0RFUFRIX01BU0spOwogCkBAIC0xMTUxLDcgKzExNjYsOCBAQAogCiB9CiAKLXN0YXRpYyB1MzIgcjcwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKHUzMiBudW1fdGlsZV9waXBlcywKK3N0YXRpYyB1MzIgcjcwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwKKwkJCQkJICAgICB1MzIgbnVtX3RpbGVfcGlwZXMsCiAJCQkJCSAgICAgdTMyIG51bV9iYWNrZW5kcywKIAkJCQkJICAgICB1MzIgYmFja2VuZF9kaXNhYmxlX21hc2spCiB7CkBAIC0xMTYyLDYgKzExNzgsNyBAQAogCXUzMiBzd2l6emxlX3BpcGVbUjdYWF9NQVhfUElQRVNdOwogCXUzMiBjdXJfYmFja2VuZDsKIAl1MzIgaTsKKwlib29sIGZvcmNlX25vX3N3aXp6bGU7CiAKIAlpZiAobnVtX3RpbGVfcGlwZXMgPiBSN1hYX01BWF9QSVBFUykKIAkJbnVtX3RpbGVfcGlwZXMgPSBSN1hYX01BWF9QSVBFUzsKQEAgLTExOTEsNiArMTIwOCwxOCBAQAogCWlmIChlbmFibGVkX2JhY2tlbmRzX2NvdW50ICE9IG51bV9iYWNrZW5kcykKIAkJbnVtX2JhY2tlbmRzID0gZW5hYmxlZF9iYWNrZW5kc19jb3VudDsKIAorCXN3aXRjaCAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSB7CisJY2FzZSBDSElQX1JWNzcwOgorCWNhc2UgQ0hJUF9SVjczMDoKKwkJZm9yY2Vfbm9fc3dpenpsZSA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIENISVBfUlY3MTA6CisJY2FzZSBDSElQX1JWNzQwOgorCWRlZmF1bHQ6CisJCWZvcmNlX25vX3N3aXp6bGUgPSB0cnVlOworCQlicmVhazsKKwl9CisKIAltZW1zZXQoKHVpbnQ4X3QgKikmc3dpenpsZV9waXBlWzBdLCAwLCBzaXplb2YodTMyKSAqIFI3WFhfTUFYX1BJUEVTKTsKIAlzd2l0Y2ggKG51bV90aWxlX3BpcGVzKSB7CiAJY2FzZSAxOgpAQCAtMTIwMSw0OSArMTIzMCwxMDAgQEAKIAkJc3dpenpsZV9waXBlWzFdID0gMTsKIAkJYnJlYWs7CiAJY2FzZSAzOgotCQlzd2l6emxlX3BpcGVbMF0gPSAwOwotCQlzd2l6emxlX3BpcGVbMV0gPSAyOwotCQlzd2l6emxlX3BpcGVbMl0gPSAxOworCQlpZiAoZm9yY2Vfbm9fc3dpenpsZSkgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDE7CisJCQlzd2l6emxlX3BpcGVbMl0gPSAyOworCQl9IGVsc2UgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCQlzd2l6emxlX3BpcGVbMl0gPSAxOworCQl9CiAJCWJyZWFrOwogCWNhc2UgNDoKLQkJc3dpenpsZV9waXBlWzBdID0gMDsKLQkJc3dpenpsZV9waXBlWzFdID0gMjsKLQkJc3dpenpsZV9waXBlWzJdID0gMzsKLQkJc3dpenpsZV9waXBlWzNdID0gMTsKKwkJaWYgKGZvcmNlX25vX3N3aXp6bGUpIHsKKwkJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQkJc3dpenpsZV9waXBlWzJdID0gMjsKKwkJCXN3aXp6bGVfcGlwZVszXSA9IDM7CisJCX0gZWxzZSB7CisJCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJCXN3aXp6bGVfcGlwZVsyXSA9IDM7CisJCQlzd2l6emxlX3BpcGVbM10gPSAxOworCQl9CiAJCWJyZWFrOwogCWNhc2UgNToKLQkJc3dpenpsZV9waXBlWzBdID0gMDsKLQkJc3dpenpsZV9waXBlWzFdID0gMjsKLQkJc3dpenpsZV9waXBlWzJdID0gNDsKLQkJc3dpenpsZV9waXBlWzNdID0gMTsKLQkJc3dpenpsZV9waXBlWzRdID0gMzsKKwkJaWYgKGZvcmNlX25vX3N3aXp6bGUpIHsKKwkJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQkJc3dpenpsZV9waXBlWzJdID0gMjsKKwkJCXN3aXp6bGVfcGlwZVszXSA9IDM7CisJCQlzd2l6emxlX3BpcGVbNF0gPSA0OworCQl9IGVsc2UgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQkJc3dpenpsZV9waXBlWzNdID0gMTsKKwkJCXN3aXp6bGVfcGlwZVs0XSA9IDM7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSA2OgotCQlzd2l6emxlX3BpcGVbMF0gPSAwOwotCQlzd2l6emxlX3BpcGVbMV0gPSAyOwotCQlzd2l6emxlX3BpcGVbMl0gPSA0OwotCQlzd2l6emxlX3BpcGVbM10gPSA1OwotCQlzd2l6emxlX3BpcGVbNF0gPSAzOwotCQlzd2l6emxlX3BpcGVbNV0gPSAxOworCQlpZiAoZm9yY2Vfbm9fc3dpenpsZSkgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDE7CisJCQlzd2l6emxlX3BpcGVbMl0gPSAyOworCQkJc3dpenpsZV9waXBlWzNdID0gMzsKKwkJCXN3aXp6bGVfcGlwZVs0XSA9IDQ7CisJCQlzd2l6emxlX3BpcGVbNV0gPSA1OworCQl9IGVsc2UgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQkJc3dpenpsZV9waXBlWzNdID0gNTsKKwkJCXN3aXp6bGVfcGlwZVs0XSA9IDM7CisJCQlzd2l6emxlX3BpcGVbNV0gPSAxOworCQl9CiAJCWJyZWFrOwogCWNhc2UgNzoKLQkJc3dpenpsZV9waXBlWzBdID0gMDsKLQkJc3dpenpsZV9waXBlWzFdID0gMjsKLQkJc3dpenpsZV9waXBlWzJdID0gNDsKLQkJc3dpenpsZV9waXBlWzNdID0gNjsKLQkJc3dpenpsZV9waXBlWzRdID0gMzsKLQkJc3dpenpsZV9waXBlWzVdID0gMTsKLQkJc3dpenpsZV9waXBlWzZdID0gNTsKKwkJaWYgKGZvcmNlX25vX3N3aXp6bGUpIHsKKwkJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQkJc3dpenpsZV9waXBlWzJdID0gMjsKKwkJCXN3aXp6bGVfcGlwZVszXSA9IDM7CisJCQlzd2l6emxlX3BpcGVbNF0gPSA0OworCQkJc3dpenpsZV9waXBlWzVdID0gNTsKKwkJCXN3aXp6bGVfcGlwZVs2XSA9IDY7CisJCX0gZWxzZSB7CisJCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJCXN3aXp6bGVfcGlwZVsyXSA9IDQ7CisJCQlzd2l6emxlX3BpcGVbM10gPSA2OworCQkJc3dpenpsZV9waXBlWzRdID0gMzsKKwkJCXN3aXp6bGVfcGlwZVs1XSA9IDE7CisJCQlzd2l6emxlX3BpcGVbNl0gPSA1OworCQl9CiAJCWJyZWFrOwogCWNhc2UgODoKLQkJc3dpenpsZV9waXBlWzBdID0gMDsKLQkJc3dpenpsZV9waXBlWzFdID0gMjsKLQkJc3dpenpsZV9waXBlWzJdID0gNDsKLQkJc3dpenpsZV9waXBlWzNdID0gNjsKLQkJc3dpenpsZV9waXBlWzRdID0gMzsKLQkJc3dpenpsZV9waXBlWzVdID0gMTsKLQkJc3dpenpsZV9waXBlWzZdID0gNzsKLQkJc3dpenpsZV9waXBlWzddID0gNTsKKwkJaWYgKGZvcmNlX25vX3N3aXp6bGUpIHsKKwkJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQkJc3dpenpsZV9waXBlWzJdID0gMjsKKwkJCXN3aXp6bGVfcGlwZVszXSA9IDM7CisJCQlzd2l6emxlX3BpcGVbNF0gPSA0OworCQkJc3dpenpsZV9waXBlWzVdID0gNTsKKwkJCXN3aXp6bGVfcGlwZVs2XSA9IDY7CisJCQlzd2l6emxlX3BpcGVbN10gPSA3OworCQl9IGVsc2UgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQkJc3dpenpsZV9waXBlWzNdID0gNjsKKwkJCXN3aXp6bGVfcGlwZVs0XSA9IDM7CisJCQlzd2l6emxlX3BpcGVbNV0gPSAxOworCQkJc3dpenpsZV9waXBlWzZdID0gNzsKKwkJCXN3aXp6bGVfcGlwZVs3XSA9IDU7CisJCX0KIAkJYnJlYWs7CiAJfQogCkBAIC0xMjY0LDggKzEzNDQsMTAgQEAKIAkJCSAgZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQogewogCWludCBpLCBqLCBudW1fcWRfcGlwZXM7CisJdTMyIHRhX2F1eF9jbnRsOwogCXUzMiBzeF9kZWJ1Z18xOwogCXUzMiBzbXhfZGNfY3RsMDsKKwl1MzIgZGJfZGVidWczOwogCXUzMiBudW1fZ3NfdmVydHNfcGVyX3RocmVhZDsKIAl1MzIgdmd0X2dzX3Blcl9lczsKIAl1MzIgZ3NfcHJpbV9idWZmZXJfZGVwdGggPSAwOwpAQCAtMTI3Niw4ICsxMzU4LDggQEAKIAl1MzIgc3FfZHluX2dwcl9zaXplX3NpbWRfYWJfMDsKIAl1MzIgYmFja2VuZF9tYXA7CiAJdTMyIGdiX3RpbGluZ19jb25maWcgPSAwOwotCXUzMiBjY19yYl9iYWNrZW5kX2Rpc2FibGUgPSAwOwotCXUzMiBjY19nY19zaGFkZXJfcGlwZV9jb25maWcgPSAwOworCXUzMiBjY19yYl9iYWNrZW5kX2Rpc2FibGU7CisJdTMyIGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZzsKIAl1MzIgbWNfYXJiX3JhbWNmZzsKIAl1MzIgZGJfZGVidWc0OwogCkBAIC0xNDI4LDM4ICsxNTEwLDUxIEBACiAKIAlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfQkFOS19TV0FQUygxKTsKIAotCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNzQwKQotCQliYWNrZW5kX21hcCA9IDB4Mjg7Ci0JZWxzZQotCQliYWNrZW5kX21hcCA9IHI3MDBfZ2V0X3RpbGVfcGlwZV90b19iYWNrZW5kX21hcChkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcywKLQkJCQkJCQkJZGV2X3ByaXYtPnI2MDBfbWF4X2JhY2tlbmRzLAotCQkJCQkJCQkoMHhmZiA8PCBkZXZfcHJpdi0+cjYwMF9tYXhfYmFja2VuZHMpICYgMHhmZik7Ci0JZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0JBQ0tFTkRfTUFQKGJhY2tlbmRfbWFwKTsKKwljY19yYl9iYWNrZW5kX2Rpc2FibGUgPSBSQURFT05fUkVBRChSNjAwX0NDX1JCX0JBQ0tFTkRfRElTQUJMRSkgJiAweDAwZmYwMDAwOworCWNjX3JiX2JhY2tlbmRfZGlzYWJsZSB8PQorCQlSNjAwX0JBQ0tFTkRfRElTQUJMRSgoUjdYWF9NQVhfQkFDS0VORFNfTUFTSyA8PCBkZXZfcHJpdi0+cjYwMF9tYXhfYmFja2VuZHMpICYgUjdYWF9NQVhfQkFDS0VORFNfTUFTSyk7CiAKLQljY19nY19zaGFkZXJfcGlwZV9jb25maWcgPQorCWNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyA9IFJBREVPTl9SRUFEKFI2MDBfQ0NfR0NfU0hBREVSX1BJUEVfQ09ORklHKSAmIDB4ZmZmZmZmMDA7CisJY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnIHw9CiAJCVI2MDBfSU5BQ1RJVkVfUURfUElQRVMoKFI3WFhfTUFYX1BJUEVTX01BU0sgPDwgZGV2X3ByaXYtPnI2MDBfbWF4X3BpcGVzKSAmIFI3WFhfTUFYX1BJUEVTX01BU0spOwogCWNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyB8PQogCQlSNjAwX0lOQUNUSVZFX1NJTURTKChSN1hYX01BWF9TSU1EU19NQVNLIDw8IGRldl9wcml2LT5yNjAwX21heF9zaW1kcykgJiBSN1hYX01BWF9TSU1EU19NQVNLKTsKIAotCWNjX3JiX2JhY2tlbmRfZGlzYWJsZSA9Ci0JCVI2MDBfQkFDS0VORF9ESVNBQkxFKChSN1hYX01BWF9CQUNLRU5EU19NQVNLIDw8IGRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcykgJiBSN1hYX01BWF9CQUNLRU5EU19NQVNLKTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjc0MCkKKwkJYmFja2VuZF9tYXAgPSAweDI4OworCWVsc2UKKwkJYmFja2VuZF9tYXAgPSByNzAwX2dldF90aWxlX3BpcGVfdG9fYmFja2VuZF9tYXAoZGV2X3ByaXYsCisJCQkJCQkJCWRldl9wcml2LT5yNjAwX21heF90aWxlX3BpcGVzLAorCQkJCQkJCQkoUjdYWF9NQVhfQkFDS0VORFMgLQorCQkJCQkJCQkgcjYwMF9jb3VudF9waXBlX2JpdHMoKGNjX3JiX2JhY2tlbmRfZGlzYWJsZSAmCisJCQkJCQkJCQkJICAgICAgIFI3WFhfTUFYX0JBQ0tFTkRTX01BU0spID4+IDE2KSksCisJCQkJCQkJCShjY19yYl9iYWNrZW5kX2Rpc2FibGUgPj4gMTYpKTsKKwlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfQkFDS0VORF9NQVAoYmFja2VuZF9tYXApOwogCiAJUkFERU9OX1dSSVRFKFI2MDBfR0JfVElMSU5HX0NPTkZJRywgICAgICBnYl90aWxpbmdfY29uZmlnKTsKIAlSQURFT05fV1JJVEUoUjYwMF9EQ1BfVElMSU5HX0NPTkZJRywgICAgKGdiX3RpbGluZ19jb25maWcgJiAweGZmZmYpKTsKIAlSQURFT05fV1JJVEUoUjYwMF9IRFBfVElMSU5HX0NPTkZJRywgICAgKGdiX3RpbGluZ19jb25maWcgJiAweGZmZmYpKTsKKwlpZiAoZ2JfdGlsaW5nX2NvbmZpZyAmIDB4YzApIHsKKwkJZGV2X3ByaXYtPnI2MDBfZ3JvdXBfc2l6ZSA9IDUxMjsKKwl9IGVsc2UgeworCQlkZXZfcHJpdi0+cjYwMF9ncm91cF9zaXplID0gMjU2OworCX0KKwlkZXZfcHJpdi0+cjYwMF9ucGlwZXMgPSAxIDw8ICgoZ2JfdGlsaW5nX2NvbmZpZyA+PiAxKSAmIDB4Nyk7CisJaWYgKGdiX3RpbGluZ19jb25maWcgJiAweDMwKSB7CisJCWRldl9wcml2LT5yNjAwX25iYW5rcyA9IDg7CisJfSBlbHNlIHsKKwkJZGV2X3ByaXYtPnI2MDBfbmJhbmtzID0gNDsKKwl9CiAKIAlSQURFT05fV1JJVEUoUjYwMF9DQ19SQl9CQUNLRU5EX0RJU0FCTEUsICAgICAgY2NfcmJfYmFja2VuZF9kaXNhYmxlKTsKIAlSQURFT05fV1JJVEUoUjYwMF9DQ19HQ19TSEFERVJfUElQRV9DT05GSUcsICAgY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnKTsKLQlSQURFT05fV1JJVEUoUjYwMF9HQ19VU0VSX1NIQURFUl9QSVBFX0NPTkZJRywgY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnKTsKIAogCVJBREVPTl9XUklURShSNzAwX0NDX1NZU19SQl9CQUNLRU5EX0RJU0FCTEUsIGNjX3JiX2JhY2tlbmRfZGlzYWJsZSk7CiAJUkFERU9OX1dSSVRFKFI3MDBfQ0dUU19TWVNfVENDX0RJU0FCTEUsIDApOwogCVJBREVPTl9XUklURShSNzAwX0NHVFNfVENDX0RJU0FCTEUsIDApOwotCVJBREVPTl9XUklURShSNzAwX0NHVFNfVVNFUl9TWVNfVENDX0RJU0FCTEUsIDApOwotCVJBREVPTl9XUklURShSNzAwX0NHVFNfVVNFUl9UQ0NfRElTQUJMRSwgMCk7CiAKIAludW1fcWRfcGlwZXMgPQotCQlSN1hYX01BWF9CQUNLRU5EUyAtIHI2MDBfY291bnRfcGlwZV9iaXRzKGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyAmIFI2MDBfSU5BQ1RJVkVfUURfUElQRVNfTUFTSyk7CisJCVI3WFhfTUFYX1BJUEVTIC0gcjYwMF9jb3VudF9waXBlX2JpdHMoKGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyAmIFI2MDBfSU5BQ1RJVkVfUURfUElQRVNfTUFTSykgPj4gOCk7CiAJUkFERU9OX1dSSVRFKFI2MDBfVkdUX09VVF9ERUFMTE9DX0NOVEwsIChudW1fcWRfcGlwZXMgKiA0KSAmIFI2MDBfREVBTExPQ19ESVNUX01BU0spOwogCVJBREVPTl9XUklURShSNjAwX1ZHVF9WRVJURVhfUkVVU0VfQkxPQ0tfQ05UTCwgKChudW1fcWRfcGlwZXMgKiA0KSAtIDIpICYgUjYwMF9WVFhfUkVVU0VfREVQVEhfTUFTSyk7CiAKQEAgLTE0NjksMTAgKzE1NjQsOCBAQAogCiAJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVRX1RIUkVTSE9MRFMsIFI3MDBfU1RRX1NQTElUKDB4MzApKTsKIAotCVJBREVPTl9XUklURShSNjAwX1RBX0NOVExfQVVYLCAoUjYwMF9ESVNBQkxFX0NVQkVfQU5JU08gfAotCQkJCQlSNjAwX1NZTkNfR1JBRElFTlQgfAotCQkJCQlSNjAwX1NZTkNfV0FMS0VSIHwKLQkJCQkJUjYwMF9TWU5DX0FMSUdORVIpKTsKKwl0YV9hdXhfY250bCA9IFJBREVPTl9SRUFEKFI2MDBfVEFfQ05UTF9BVVgpOworCVJBREVPTl9XUklURShSNjAwX1RBX0NOVExfQVVYLCB0YV9hdXhfY250bCB8IFI2MDBfRElTQUJMRV9DVUJFX0FOSVNPKTsKIAogCXN4X2RlYnVnXzEgPSBSQURFT05fUkVBRChSNzAwX1NYX0RFQlVHXzEpOwogCXN4X2RlYnVnXzEgfD0gUjcwMF9FTkFCTEVfTkVXX1NNWF9BRERSRVNTOwpAQCAtMTQ4MywxNCArMTU3NiwyOCBAQAogCXNteF9kY19jdGwwIHw9IFI3MDBfQ0FDSEVfREVQVEgoKGRldl9wcml2LT5yNzAwX3N4X251bV9vZl9zZXRzICogNjQpIC0gMSk7CiAJUkFERU9OX1dSSVRFKFI2MDBfU01YX0RDX0NUTDAsIHNteF9kY19jdGwwKTsKIAotCVJBREVPTl9XUklURShSNzAwX1NNWF9FVkVOVF9DVEwsIChSNzAwX0VTX0ZMVVNIX0NUTCg0KSB8Ci0JCQkJCSAgUjcwMF9HU19GTFVTSF9DVEwoNCkgfAotCQkJCQkgIFI3MDBfQUNLX0ZMVVNIX0NUTCgzKSB8Ci0JCQkJCSAgUjcwMF9TWU5DX0ZMVVNIX0NUTCkpOworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSAhPSBDSElQX1JWNzQwKQorCQlSQURFT05fV1JJVEUoUjcwMF9TTVhfRVZFTlRfQ1RMLCAoUjcwMF9FU19GTFVTSF9DVEwoNCkgfAorCQkJCQkJICBSNzAwX0dTX0ZMVVNIX0NUTCg0KSB8CisJCQkJCQkgIFI3MDBfQUNLX0ZMVVNIX0NUTCgzKSB8CisJCQkJCQkgIFI3MDBfU1lOQ19GTFVTSF9DVEwpKTsKIAotCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNzcwKQotCQlSQURFT05fV1JJVEUoUjcwMF9EQl9ERUJVRzMsIFI3MDBfREJfQ0xLX09GRl9ERUxBWSgweDFmKSk7Ci0JZWxzZSB7CisJZGJfZGVidWczID0gUkFERU9OX1JFQUQoUjcwMF9EQl9ERUJVRzMpOworCWRiX2RlYnVnMyAmPSB+UjcwMF9EQl9DTEtfT0ZGX0RFTEFZKDB4MWYpOworCXN3aXRjaCAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSB7CisJY2FzZSBDSElQX1JWNzcwOgorCWNhc2UgQ0hJUF9SVjc0MDoKKwkJZGJfZGVidWczIHw9IFI3MDBfREJfQ0xLX09GRl9ERUxBWSgweDFmKTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNzEwOgorCWNhc2UgQ0hJUF9SVjczMDoKKwlkZWZhdWx0OgorCQlkYl9kZWJ1ZzMgfD0gUjcwMF9EQl9DTEtfT0ZGX0RFTEFZKDIpOworCQlicmVhazsKKwl9CisJUkFERU9OX1dSSVRFKFI3MDBfREJfREVCVUczLCBkYl9kZWJ1ZzMpOworCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spICE9IENISVBfUlY3NzApIHsKIAkJZGJfZGVidWc0ID0gUkFERU9OX1JFQUQoUlY3MDBfREJfREVCVUc0KTsKIAkJZGJfZGVidWc0IHw9IFJWNzAwX0RJU0FCTEVfVElMRV9DT1ZFUkVEX0ZPUl9QU19JVEVSOwogCQlSQURFT05fV1JJVEUoUlY3MDBfREJfREVCVUc0LCBkYl9kZWJ1ZzQpOwpAQCAtMTUxOSwxMCArMTYyNiwxMCBAQAogCQkJICAgIFI2MDBfQUxVX1VQREFURV9GSUZPX0hJV0FURVIoMHg4KSk7CiAJc3dpdGNoIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spIHsKIAljYXNlIENISVBfUlY3NzA6Ci0JCXNxX21zX2ZpZm9fc2l6ZXMgfD0gUjYwMF9GRVRDSF9GSUZPX0hJV0FURVIoMHgxKTsKLQkJYnJlYWs7CiAJY2FzZSBDSElQX1JWNzMwOgogCWNhc2UgQ0hJUF9SVjcxMDoKKwkJc3FfbXNfZmlmb19zaXplcyB8PSBSNjAwX0ZFVENIX0ZJRk9fSElXQVRFUigweDEpOworCQlicmVhazsKIAljYXNlIENISVBfUlY3NDA6CiAJZGVmYXVsdDoKIAkJc3FfbXNfZmlmb19zaXplcyB8PSBSNjAwX0ZFVENIX0ZJRk9fSElXQVRFUigweDQpOwpAQCAtMjUyOSwzICsyNjM2LDEyIEBACiAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+Y3NfbXV0ZXgpOwogCXJldHVybiByOwogfQorCit2b2lkIHI2MDBfY3NfbGVnYWN5X2dldF90aWxpbmdfY29uZihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgKm5waXBlcywgdTMyICpuYmFua3MsIHUzMiAqZ3JvdXBfc2l6ZSkKK3sKKwlzdHJ1Y3QgZHJtX3JhZGVvbl9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwkqbnBpcGVzID0gZGV2X3ByaXYtPnI2MDBfbnBpcGVzOworCSpuYmFua3MgPSBkZXZfcHJpdi0+cjYwMF9uYmFua3M7CisJKmdyb3VwX3NpemUgPSBkZXZfcHJpdi0+cjYwMF9ncm91cF9zaXplOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYwppbmRleCBlNGM0NWVjLi5jZDJjNjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3MuYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKICNpbmNsdWRlICJyNjAwZC5oIgorI2luY2x1ZGUgInI2MDBfcmVnX3NhZmUuaCIKIAogc3RhdGljIGludCByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jX21tKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAogCQkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICoqY3NfcmVsb2MpOwpAQCAtMzUsMTEgKzM2LDMxMyBAQAogCQkJCQlzdHJ1Y3QgcmFkZW9uX2NzX3JlbG9jICoqY3NfcmVsb2MpOwogdHlwZWRlZiBpbnQgKCpuZXh0X3JlbG9jX3QpKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyKiwgc3RydWN0IHJhZGVvbl9jc19yZWxvYyoqKTsKIHN0YXRpYyBuZXh0X3JlbG9jX3QgcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyA9ICZyNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jX21tOworZXh0ZXJuIHZvaWQgcjYwMF9jc19sZWdhY3lfZ2V0X3RpbGluZ19jb25mKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiAqbnBpcGVzLCB1MzIgKm5iYW5rcywgdTMyICpncm91cF9zaXplKTsKKwogCiBzdHJ1Y3QgcjYwMF9jc190cmFjayB7Ci0JdTMyCWNiX2NvbG9yMF9iYXNlX2xhc3Q7CisJLyogY29uZmlndXJhdGlvbiB3ZSBtaXJvciBzbyB0aGF0IHdlIHVzZSBzYW1lIGNvZGUgYnR3IGttcy91bXMgKi8KKwl1MzIJCQlncm91cF9zaXplOworCXUzMgkJCW5iYW5rczsKKwl1MzIJCQlucGlwZXM7CisJLyogdmFsdWUgd2UgdHJhY2sgKi8KKwl1MzIJCQluc2FtcGxlczsKKwl1MzIJCQljYl9jb2xvcl9iYXNlX2xhc3RbOF07CisJc3RydWN0IHJhZGVvbl9ibwkqY2JfY29sb3JfYm9bOF07CisJdTMyCQkJY2JfY29sb3JfYm9fb2Zmc2V0WzhdOworCXN0cnVjdCByYWRlb25fYm8JKmNiX2NvbG9yX2ZyYWdfYm9bOF07CisJc3RydWN0IHJhZGVvbl9ibwkqY2JfY29sb3JfdGlsZV9ib1s4XTsKKwl1MzIJCQljYl9jb2xvcl9pbmZvWzhdOworCXUzMgkJCWNiX2NvbG9yX3NpemVfaWR4WzhdOworCXUzMgkJCWNiX3RhcmdldF9tYXNrOworCXUzMgkJCWNiX3NoYWRlcl9tYXNrOworCXUzMgkJCWNiX2NvbG9yX3NpemVbOF07CisJdTMyCQkJdmd0X3N0cm1vdXRfZW47CisJdTMyCQkJdmd0X3N0cm1vdXRfYnVmZmVyX2VuOworCXUzMgkJCWRiX2RlcHRoX2NvbnRyb2w7CisJdTMyCQkJZGJfZGVwdGhfaW5mbzsKKwl1MzIJCQlkYl9kZXB0aF9zaXplX2lkeDsKKwl1MzIJCQlkYl9kZXB0aF92aWV3OworCXUzMgkJCWRiX2RlcHRoX3NpemU7CisJdTMyCQkJZGJfb2Zmc2V0OworCXN0cnVjdCByYWRlb25fYm8JKmRiX2JvOwogfTsKIAorc3RhdGljIGlubGluZSBpbnQgcjYwMF9icGVfZnJvbV9mb3JtYXQodTMyICpicGUsIHUzMiBmb3JtYXQpCit7CisJc3dpdGNoIChmb3JtYXQpIHsKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzg6CisJY2FzZSBWXzAzODAwNF9DT0xPUl80XzQ6CisJY2FzZSBWXzAzODAwNF9DT0xPUl8zXzNfMjoKKwljYXNlIFZfMDM4MDA0X0ZNVF8xOgorCQkqYnBlID0gMTsKKwkJYnJlYWs7CisJY2FzZSBWXzAzODAwNF9DT0xPUl8xNjoKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzE2X0ZMT0FUOgorCWNhc2UgVl8wMzgwMDRfQ09MT1JfOF84OgorCWNhc2UgVl8wMzgwMDRfQ09MT1JfNV82XzU6CisJY2FzZSBWXzAzODAwNF9DT0xPUl82XzVfNToKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzFfNV81XzU6CisJY2FzZSBWXzAzODAwNF9DT0xPUl80XzRfNF80OgorCWNhc2UgVl8wMzgwMDRfQ09MT1JfNV81XzVfMToKKwkJKmJwZSA9IDI7CisJCWJyZWFrOworCWNhc2UgVl8wMzgwMDRfRk1UXzhfOF84OgorCQkqYnBlID0gMzsKKwkJYnJlYWs7CisJY2FzZSBWXzAzODAwNF9DT0xPUl8zMjoKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzMyX0ZMT0FUOgorCWNhc2UgVl8wMzgwMDRfQ09MT1JfMTZfMTY6CisJY2FzZSBWXzAzODAwNF9DT0xPUl8xNl8xNl9GTE9BVDoKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzhfMjQ6CisJY2FzZSBWXzAzODAwNF9DT0xPUl84XzI0X0ZMT0FUOgorCWNhc2UgVl8wMzgwMDRfQ09MT1JfMjRfODoKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzI0XzhfRkxPQVQ6CisJY2FzZSBWXzAzODAwNF9DT0xPUl8xMF8xMV8xMToKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzEwXzExXzExX0ZMT0FUOgorCWNhc2UgVl8wMzgwMDRfQ09MT1JfMTFfMTFfMTA6CisJY2FzZSBWXzAzODAwNF9DT0xPUl8xMV8xMV8xMF9GTE9BVDoKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzJfMTBfMTBfMTA6CisJY2FzZSBWXzAzODAwNF9DT0xPUl84XzhfOF84OgorCWNhc2UgVl8wMzgwMDRfQ09MT1JfMTBfMTBfMTBfMjoKKwljYXNlIFZfMDM4MDA0X0ZNVF81XzlfOV85X1NIQVJFREVYUDoKKwljYXNlIFZfMDM4MDA0X0ZNVF8zMl9BU184OgorCWNhc2UgVl8wMzgwMDRfRk1UXzMyX0FTXzhfODoKKwkJKmJwZSA9IDQ7CisJCWJyZWFrOworCWNhc2UgVl8wMzgwMDRfQ09MT1JfWDI0XzhfMzJfRkxPQVQ6CisJY2FzZSBWXzAzODAwNF9DT0xPUl8zMl8zMjoKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzMyXzMyX0ZMT0FUOgorCWNhc2UgVl8wMzgwMDRfQ09MT1JfMTZfMTZfMTZfMTY6CisJY2FzZSBWXzAzODAwNF9DT0xPUl8xNl8xNl8xNl8xNl9GTE9BVDoKKwkJKmJwZSA9IDg7CisJCWJyZWFrOworCWNhc2UgVl8wMzgwMDRfRk1UXzE2XzE2XzE2OgorCWNhc2UgVl8wMzgwMDRfRk1UXzE2XzE2XzE2X0ZMT0FUOgorCQkqYnBlID0gNjsKKwkJYnJlYWs7CisJY2FzZSBWXzAzODAwNF9GTVRfMzJfMzJfMzI6CisJY2FzZSBWXzAzODAwNF9GTVRfMzJfMzJfMzJfRkxPQVQ6CisJCSpicGUgPSAxMjsKKwkJYnJlYWs7CisJY2FzZSBWXzAzODAwNF9DT0xPUl8zMl8zMl8zMl8zMjoKKwljYXNlIFZfMDM4MDA0X0NPTE9SXzMyXzMyXzMyXzMyX0ZMT0FUOgorCQkqYnBlID0gMTY7CisJCWJyZWFrOworCWNhc2UgVl8wMzgwMDRfRk1UX0dCX0dSOgorCWNhc2UgVl8wMzgwMDRfRk1UX0JHX1JHOgorCWNhc2UgVl8wMzgwMDRfQ09MT1JfSU5WQUxJRDoKKwkJKmJwZSA9IDE2OworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHI2MDBfY3NfdHJhY2tfaW5pdChzdHJ1Y3QgcjYwMF9jc190cmFjayAqdHJhY2spCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXRyYWNrLT5jYl9jb2xvcl9iYXNlX2xhc3RbaV0gPSAwOworCQl0cmFjay0+Y2JfY29sb3Jfc2l6ZVtpXSA9IDA7CisJCXRyYWNrLT5jYl9jb2xvcl9zaXplX2lkeFtpXSA9IDA7CisJCXRyYWNrLT5jYl9jb2xvcl9pbmZvW2ldID0gMDsKKwkJdHJhY2stPmNiX2NvbG9yX2JvW2ldID0gTlVMTDsKKwkJdHJhY2stPmNiX2NvbG9yX2JvX29mZnNldFtpXSA9IDB4RkZGRkZGRkY7CisJfQorCXRyYWNrLT5jYl90YXJnZXRfbWFzayA9IDB4RkZGRkZGRkY7CisJdHJhY2stPmNiX3NoYWRlcl9tYXNrID0gMHhGRkZGRkZGRjsKKwl0cmFjay0+ZGJfYm8gPSBOVUxMOworCS8qIGFzc3VtZSB0aGUgYmlnZ2VzdCBmb3JtYXQgYW5kIHRoYXQgaHRpbGUgaXMgZW5hYmxlZCAqLworCXRyYWNrLT5kYl9kZXB0aF9pbmZvID0gNyB8ICgxIDw8IDI1KTsKKwl0cmFjay0+ZGJfZGVwdGhfdmlldyA9IDB4RkZGRkMwMDA7CisJdHJhY2stPmRiX2RlcHRoX3NpemUgPSAweEZGRkZGRkZGOworCXRyYWNrLT5kYl9kZXB0aF9zaXplX2lkeCA9IDA7CisJdHJhY2stPmRiX2RlcHRoX2NvbnRyb2wgPSAweEZGRkZGRkZGOworfQorCitzdGF0aWMgaW5saW5lIGludCByNjAwX2NzX3RyYWNrX3ZhbGlkYXRlX2NiKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLCBpbnQgaSkKK3sKKwlzdHJ1Y3QgcjYwMF9jc190cmFjayAqdHJhY2sgPSBwLT50cmFjazsKKwl1MzIgYnBlID0gMCwgcGl0Y2gsIHNsaWNlX3RpbGVfbWF4LCBzaXplLCB0bXAsIGhlaWdodDsKKwl2b2xhdGlsZSB1MzIgKmliID0gcC0+aWItPnB0cjsKKworCWlmIChHXzAyODBBMF9USUxFX01PREUodHJhY2stPmNiX2NvbG9yX2luZm9baV0pKSB7CisJCWRldl93YXJuKHAtPmRldiwgIkZNQVNLIG9yIENNQVNLIGJ1ZmZlciBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGlzIGtlcm5lbFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzaXplID0gcmFkZW9uX2JvX3NpemUodHJhY2stPmNiX2NvbG9yX2JvW2ldKTsKKwlpZiAocjYwMF9icGVfZnJvbV9mb3JtYXQoJmJwZSwgR18wMjgwQTBfRk9STUFUKHRyYWNrLT5jYl9jb2xvcl9pbmZvW2ldKSkpIHsKKwkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgY2IgaW52YWxpZCBmb3JtYXQgJWQgZm9yICVkICgweCUwOFgpXG4iLAorCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgR18wMjgwQTBfRk9STUFUKHRyYWNrLT5jYl9jb2xvcl9pbmZvW2ldKSwKKwkJCWksIHRyYWNrLT5jYl9jb2xvcl9pbmZvW2ldKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXBpdGNoID0gKEdfMDI4MDYwX1BJVENIX1RJTEVfTUFYKHRyYWNrLT5jYl9jb2xvcl9zaXplW2ldKSArIDEpIDw8IDM7CisJc2xpY2VfdGlsZV9tYXggPSBHXzAyODA2MF9TTElDRV9USUxFX01BWCh0cmFjay0+Y2JfY29sb3Jfc2l6ZVtpXSkgKyAxOworCWlmICghcGl0Y2gpIHsKKwkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgY2IgcGl0Y2ggKCVkKSBmb3IgJWQgaW52YWxpZCAoMHglMDhYKVxuIiwKKwkJCV9fZnVuY19fLCBfX0xJTkVfXywgcGl0Y2gsIGksIHRyYWNrLT5jYl9jb2xvcl9zaXplW2ldKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWhlaWdodCA9IHNpemUgLyAocGl0Y2ggKiBicGUpOworCWlmIChoZWlnaHQgPiA4MTkyKQorCQloZWlnaHQgPSA4MTkyOworCXN3aXRjaCAoR18wMjgwQTBfQVJSQVlfTU9ERSh0cmFjay0+Y2JfY29sb3JfaW5mb1tpXSkpIHsKKwljYXNlIFZfMDI4MEEwX0FSUkFZX0xJTkVBUl9HRU5FUkFMOgorCWNhc2UgVl8wMjgwQTBfQVJSQVlfTElORUFSX0FMSUdORUQ6CisJCWlmIChwaXRjaCAmIDB4M2YpIHsKKwkJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGNiIHBpdGNoICglZCB4ICVkID0gJWQpIGludmFsaWRcbiIsCisJCQkJX19mdW5jX18sIF9fTElORV9fLCBwaXRjaCwgYnBlLCBwaXRjaCAqIGJwZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAoKHBpdGNoICogYnBlKSAmICh0cmFjay0+Z3JvdXBfc2l6ZSAtIDEpKSB7CisJCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBjYiBwaXRjaCAoJWQpIGludmFsaWRcbiIsCisJCQkJX19mdW5jX18sIF9fTElORV9fLCBwaXRjaCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlicmVhazsKKwljYXNlIFZfMDI4MEEwX0FSUkFZXzFEX1RJTEVEX1RISU4xOgorCQlpZiAoKHBpdGNoICogOCAqIGJwZSAqIHRyYWNrLT5uc2FtcGxlcykgJiAodHJhY2stPmdyb3VwX3NpemUgLSAxKSkgeworCQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgY2IgcGl0Y2ggKCVkKSBpbnZhbGlkXG4iLAorCQkJCV9fZnVuY19fLCBfX0xJTkVfXywgcGl0Y2gpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaGVpZ2h0ICY9IH4weDc7CisJCWlmICghaGVpZ2h0KQorCQkJaGVpZ2h0ID0gODsKKwkJYnJlYWs7CisJY2FzZSBWXzAyODBBMF9BUlJBWV8yRF9USUxFRF9USElOMToKKwkJaWYgKHBpdGNoICYgKCg4ICogdHJhY2stPm5iYW5rcykgLSAxKSkgeworCQkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgY2IgcGl0Y2ggKCVkKSBpbnZhbGlkXG4iLAorCQkJCV9fZnVuY19fLCBfX0xJTkVfXywgcGl0Y2gpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJdG1wID0gcGl0Y2ggKiA4ICogYnBlICogdHJhY2stPm5zYW1wbGVzOworCQl0bXAgPSB0bXAgLyB0cmFjay0+bmJhbmtzOworCQlpZiAodG1wICYgKHRyYWNrLT5ncm91cF9zaXplIC0gMSkpIHsKKwkJCWRldl93YXJuKHAtPmRldiwgIiVzOiVkIGNiIHBpdGNoICglZCkgaW52YWxpZFxuIiwKKwkJCQlfX2Z1bmNfXywgX19MSU5FX18sIHBpdGNoKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWhlaWdodCAmPSB+KCgxNiAqIHRyYWNrLT5ucGlwZXMpIC0gMSk7CisJCWlmICghaGVpZ2h0KQorCQkJaGVpZ2h0ID0gMTYgKiB0cmFjay0+bnBpcGVzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfd2FybihwLT5kZXYsICIlcyBpbnZhbGlkIHRpbGluZyAlZCBmb3IgJWQgKDB4JTA4WClcbiIsIF9fZnVuY19fLAorCQkJR18wMjgwQTBfQVJSQVlfTU9ERSh0cmFjay0+Y2JfY29sb3JfaW5mb1tpXSksIGksCisJCQl0cmFjay0+Y2JfY29sb3JfaW5mb1tpXSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBjaGVjayBvZmZzZXQgKi8KKwl0bXAgPSBoZWlnaHQgKiBwaXRjaDsKKwlpZiAoKHRtcCArIHRyYWNrLT5jYl9jb2xvcl9ib19vZmZzZXRbaV0pID4gcmFkZW9uX2JvX3NpemUodHJhY2stPmNiX2NvbG9yX2JvW2ldKSkgeworCQlkZXZfd2FybihwLT5kZXYsICIlcyBvZmZzZXRbJWRdICVkIHRvIGJpZ1xuIiwgX19mdW5jX18sIGksIHRyYWNrLT5jYl9jb2xvcl9ib19vZmZzZXRbaV0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJLyogbGltaXQgbWF4IHRpbGUgKi8KKwl0bXAgPSAoaGVpZ2h0ICogcGl0Y2gpID4+IDY7CisJaWYgKHRtcCA8IHNsaWNlX3RpbGVfbWF4KQorCQlzbGljZV90aWxlX21heCA9IHRtcDsKKwl0bXAgPSBTXzAyODA2MF9QSVRDSF9USUxFX01BWCgocGl0Y2ggPj4gMykgLSAxKSB8CisJCVNfMDI4MDYwX1NMSUNFX1RJTEVfTUFYKHNsaWNlX3RpbGVfbWF4IC0gMSk7CisJaWJbdHJhY2stPmNiX2NvbG9yX3NpemVfaWR4W2ldXSA9IHRtcDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByNjAwX2NzX3RyYWNrX2NoZWNrKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwKQoreworCXN0cnVjdCByNjAwX2NzX3RyYWNrICp0cmFjayA9IHAtPnRyYWNrOworCXUzMiB0bXA7CisJaW50IHIsIGk7CisJdm9sYXRpbGUgdTMyICppYiA9IHAtPmliLT5wdHI7CisKKwkvKiBvbiBsZWdhY3kga2VybmVsIHdlIGRvbid0IHBlcmZvcm0gYWR2YW5jZWQgY2hlY2sgKi8KKwlpZiAocC0+cmRldiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwkvKiB3ZSBkb24ndCBzdXBwb3J0IG91dCBidWZmZXIgeWV0ICovCisJaWYgKHRyYWNrLT52Z3Rfc3RybW91dF9lbiB8fCB0cmFjay0+dmd0X3N0cm1vdXRfYnVmZmVyX2VuKSB7CisJCWRldl93YXJuKHAtPmRldiwgInRoaXMga2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCBTTVggb3V0cHV0IGJ1ZmZlclxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiBjaGVjayB0aGF0IHdlIGhhdmUgYSBjYiBmb3IgZWFjaCBlbmFibGVkIHRhcmdldCwgd2UgZG9uJ3QgY2hlY2sKKwkgKiBzaGFkZXJfbWFzayBiZWNhdXNlIGl0IHNlZW1zIG1lc2EgaXNuJ3QgYWx3YXlzIHNldHRpbmcgaXQgOigKKwkgKi8KKwl0bXAgPSB0cmFjay0+Y2JfdGFyZ2V0X21hc2s7CisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAoKHRtcCA+PiAoaSAqIDQpKSAmIDB4RikgeworCQkJLyogYXQgbGVhc3Qgb25lIGNvbXBvbmVudCBpcyBlbmFibGVkICovCisJCQlpZiAodHJhY2stPmNiX2NvbG9yX2JvW2ldID09IE5VTEwpIHsKKwkJCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBtYXNrIDB4JTA4WCB8IDB4JTA4WCBubyBjYiBmb3IgJWRcbiIsCisJCQkJCV9fZnVuY19fLCBfX0xJTkVfXywgdHJhY2stPmNiX3RhcmdldF9tYXNrLCB0cmFjay0+Y2Jfc2hhZGVyX21hc2ssIGkpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJLyogcGVyZm9ybSByZXdyaXRlIG9mIENCX0NPTE9SWzAtN11fU0laRSAqLworCQkJciA9IHI2MDBfY3NfdHJhY2tfdmFsaWRhdGVfY2IocCwgaSk7CisJCQlpZiAocikKKwkJCQlyZXR1cm4gcjsKKwkJfQorCX0KKwkvKiBDaGVjayBkZXB0aCBidWZmZXIgKi8KKwlpZiAoR18wMjg4MDBfU1RFTkNJTF9FTkFCTEUodHJhY2stPmRiX2RlcHRoX2NvbnRyb2wpIHx8CisJCUdfMDI4ODAwX1pfRU5BQkxFKHRyYWNrLT5kYl9kZXB0aF9jb250cm9sKSkgeworCQl1MzIgbnZpZXdzLCBicGUsIG50aWxlczsKKwkJaWYgKHRyYWNrLT5kYl9ibyA9PSBOVUxMKSB7CisJCQlkZXZfd2FybihwLT5kZXYsICJ6L3N0ZW5jaWwgd2l0aCBubyBkZXB0aCBidWZmZXJcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKEdfMDI4MDEwX1RJTEVfU1VSRkFDRV9FTkFCTEUodHJhY2stPmRiX2RlcHRoX2luZm8pKSB7CisJCQlkZXZfd2FybihwLT5kZXYsICJ0aGlzIGtlcm5lbCBkb2Vzbid0IHN1cHBvcnQgei9zdGVuY2lsIGh0aWxlXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCXN3aXRjaCAoR18wMjgwMTBfRk9STUFUKHRyYWNrLT5kYl9kZXB0aF9pbmZvKSkgeworCQljYXNlIFZfMDI4MDEwX0RFUFRIXzE2OgorCQkJYnBlID0gMjsKKwkJCWJyZWFrOworCQljYXNlIFZfMDI4MDEwX0RFUFRIX1g4XzI0OgorCQljYXNlIFZfMDI4MDEwX0RFUFRIXzhfMjQ6CisJCWNhc2UgVl8wMjgwMTBfREVQVEhfWDhfMjRfRkxPQVQ6CisJCWNhc2UgVl8wMjgwMTBfREVQVEhfOF8yNF9GTE9BVDoKKwkJY2FzZSBWXzAyODAxMF9ERVBUSF8zMl9GTE9BVDoKKwkJCWJwZSA9IDQ7CisJCQlicmVhazsKKwkJY2FzZSBWXzAyODAxMF9ERVBUSF9YMjRfOF8zMl9GTE9BVDoKKwkJCWJwZSA9IDg7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl93YXJuKHAtPmRldiwgInovc3RlbmNpbCB3aXRoIGludmFsaWQgZm9ybWF0ICVkXG4iLCBHXzAyODAxMF9GT1JNQVQodHJhY2stPmRiX2RlcHRoX2luZm8pKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmICgodHJhY2stPmRiX2RlcHRoX3NpemUgJiAweEZGRkZGQzAwKSA9PSAweEZGRkZGQzAwKSB7CisJCQlpZiAoIXRyYWNrLT5kYl9kZXB0aF9zaXplX2lkeCkgeworCQkJCWRldl93YXJuKHAtPmRldiwgInovc3RlbmNpbCBidWZmZXIgc2l6ZSBub3Qgc2V0XG4iKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCXByaW50a19vbmNlKEtFUk5fV0FSTklORyAiWW91IGhhdmUgb2xkICYgYnJva2VuIHVzZXJzcGFjZSBwbGVhc2UgY29uc2lkZXIgdXBkYXRpbmcgbWVzYVxuIik7CisJCQl0bXAgPSByYWRlb25fYm9fc2l6ZSh0cmFjay0+ZGJfYm8pIC0gdHJhY2stPmRiX29mZnNldDsKKwkJCXRtcCA9ICh0bXAgLyBicGUpID4+IDY7CisJCQlpZiAoIXRtcCkgeworCQkJCWRldl93YXJuKHAtPmRldiwgInovc3RlbmNpbCBidWZmZXIgdG9vIHNtYWxsICgweCUwOFggJWQgJWQgJWxkKVxuIiwKKwkJCQkJCXRyYWNrLT5kYl9kZXB0aF9zaXplLCBicGUsIHRyYWNrLT5kYl9vZmZzZXQsCisJCQkJCQlyYWRlb25fYm9fc2l6ZSh0cmFjay0+ZGJfYm8pKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWliW3RyYWNrLT5kYl9kZXB0aF9zaXplX2lkeF0gPSBTXzAyODAwMF9TTElDRV9USUxFX01BWCh0bXAgLSAxKSB8ICh0cmFjay0+ZGJfZGVwdGhfc2l6ZSAmIDB4M0ZGKTsKKwkJfSBlbHNlIHsKKwkJCW50aWxlcyA9IEdfMDI4MDAwX1NMSUNFX1RJTEVfTUFYKHRyYWNrLT5kYl9kZXB0aF9zaXplKSArIDE7CisJCQludmlld3MgPSBHXzAyODAwNF9TTElDRV9NQVgodHJhY2stPmRiX2RlcHRoX3ZpZXcpICsgMTsKKwkJCXRtcCA9IG50aWxlcyAqIGJwZSAqIDY0ICogbnZpZXdzOworCQkJaWYgKCh0bXAgKyB0cmFjay0+ZGJfb2Zmc2V0KSA+IHJhZGVvbl9ib19zaXplKHRyYWNrLT5kYl9ibykpIHsKKwkJCQlkZXZfd2FybihwLT5kZXYsICJ6L3N0ZW5jaWwgYnVmZmVyIHRvbyBzbWFsbCAoMHglMDhYICVkICVkICVkIC0+ICVkIGhhdmUgJWxkKVxuIiwKKwkJCQkJCXRyYWNrLT5kYl9kZXB0aF9zaXplLCBudGlsZXMsIG52aWV3cywgYnBlLCB0bXAgKyB0cmFjay0+ZGJfb2Zmc2V0LAorCQkJCQkJcmFkZW9uX2JvX3NpemUodHJhY2stPmRiX2JvKSk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qKgogICogcjYwMF9jc19wYWNrZXRfcGFyc2UoKSAtIHBhcnNlIGNwIHBhY2tldCBhbmQgcG9pbnQgaWIgaW5kZXggdG8gbmV4dCBwYWNrZXQKICAqIEBwYXJzZXI6CXBhcnNlciBzdHJ1Y3R1cmUgaG9sZGluZyBwYXJzaW5nIGNvbnRleHQuCkBAIC0zNTksNiArNjYyLDMzNCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIHI2MDBfY3NfY2hlY2tfcmVnKCkgLSBjaGVjayBpZiByZWdpc3RlciBpcyBhdXRob3JpemVkIG9yIG5vdAorICogQHBhcnNlcjogcGFyc2VyIHN0cnVjdHVyZSBob2xkaW5nIHBhcnNpbmcgY29udGV4dAorICogQHJlZzogcmVnaXN0ZXIgd2UgYXJlIHRlc3RpbmcKKyAqIEBpZHg6IGluZGV4IGludG8gdGhlIGNzIGJ1ZmZlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCB0ZXN0IGFnYWluc3QgcjYwMF9yZWdfc2FmZV9ibSBhbmQgcmV0dXJuIDAKKyAqIGlmIHJlZ2lzdGVyIGlzIHNhZmUuIElmIHJlZ2lzdGVyIGlzIG5vdCBmbGFnIGFzIHNhZmUgdGhpcyBmdW5jdGlvbgorICogd2lsbCB0ZXN0IGl0IGFnYWluc3QgYSBsaXN0IG9mIHJlZ2lzdGVyIG5lZWRpbmQgc3BlY2lhbCBoYW5kbGluZy4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcjYwMF9jc19jaGVja19yZWcoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsIHUzMiByZWcsIHUzMiBpZHgpCit7CisJc3RydWN0IHI2MDBfY3NfdHJhY2sgKnRyYWNrID0gKHN0cnVjdCByNjAwX2NzX3RyYWNrICopcC0+dHJhY2s7CisJc3RydWN0IHJhZGVvbl9jc19yZWxvYyAqcmVsb2M7CisJdTMyIGxhc3RfcmVnID0gQVJSQVlfU0laRShyNjAwX3JlZ19zYWZlX2JtKTsKKwl1MzIgbSwgaSwgdG1wLCAqaWI7CisJaW50IHI7CisKKwlpID0gKHJlZyA+PiA3KTsKKwlpZiAoaSA+IGxhc3RfcmVnKSB7CisJCWRldl93YXJuKHAtPmRldiwgImZvcmJpZGRlbiByZWdpc3RlciAweCUwOHggYXQgJWRcbiIsIHJlZywgaWR4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCW0gPSAxIDw8ICgocmVnID4+IDIpICYgMzEpOworCWlmICghKHI2MDBfcmVnX3NhZmVfYm1baV0gJiBtKSkKKwkJcmV0dXJuIDA7CisJaWIgPSBwLT5pYi0+cHRyOworCXN3aXRjaCAocmVnKSB7CisJLyogZm9yY2UgZm9sbG93aW5nIHJlZyB0byAwIGluIGFuIGF0dGVtcCB0byBkaXNhYmxlIG91dCBidWZmZXIKKwkgKiB3aGljaCB3aWxsIG5lZWQgdXMgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaG93IGl0IHdvcmtzIHRvIHBlcmZvcm0KKwkgKiBzZWN1cml0eSBjaGVjayBvbiBpdCAoSmVyb21lKQorCSAqLworCWNhc2UgUl8wMjg4QThfU1FfRVNHU19SSU5HX0lURU1TSVpFOgorCWNhc2UgUl8wMDhDNDRfU1FfRVNHU19SSU5HX1NJWkU6CisJY2FzZSBSXzAyODhCMF9TUV9FU1RNUF9SSU5HX0lURU1TSVpFOgorCWNhc2UgUl8wMDhDNTRfU1FfRVNUTVBfUklOR19TSVpFOgorCWNhc2UgUl8wMjg4QzBfU1FfRkJVRl9SSU5HX0lURU1TSVpFOgorCWNhc2UgUl8wMDhDNzRfU1FfRkJVRl9SSU5HX1NJWkU6CisJY2FzZSBSXzAyODhCNF9TUV9HU1RNUF9SSU5HX0lURU1TSVpFOgorCWNhc2UgUl8wMDhDNUNfU1FfR1NUTVBfUklOR19TSVpFOgorCWNhc2UgUl8wMjg4QUNfU1FfR1NWU19SSU5HX0lURU1TSVpFOgorCWNhc2UgUl8wMDhDNENfU1FfR1NWU19SSU5HX1NJWkU6CisJY2FzZSBSXzAyODhCQ19TUV9QU1RNUF9SSU5HX0lURU1TSVpFOgorCWNhc2UgUl8wMDhDNkNfU1FfUFNUTVBfUklOR19TSVpFOgorCWNhc2UgUl8wMjg4QzRfU1FfUkVEVUNfUklOR19JVEVNU0laRToKKwljYXNlIFJfMDA4QzdDX1NRX1JFRFVDX1JJTkdfU0laRToKKwljYXNlIFJfMDI4OEI4X1NRX1ZTVE1QX1JJTkdfSVRFTVNJWkU6CisJY2FzZSBSXzAwOEM2NF9TUV9WU1RNUF9SSU5HX1NJWkU6CisJY2FzZSBSXzAyODhDOF9TUV9HU19WRVJUX0lURU1TSVpFOgorCQkvKiBnZXQgdmFsdWUgdG8gcG9wdWxhdGUgdGhlIElCIGRvbid0IHJlbW92ZSAqLworCQl0bXAgPXJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwkJaWJbaWR4XSA9IDA7CisJCWJyZWFrOworCWNhc2UgUl8wMjg4MDBfREJfREVQVEhfQ09OVFJPTDoKKwkJdHJhY2stPmRiX2RlcHRoX2NvbnRyb2wgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CisJCWJyZWFrOworCWNhc2UgUl8wMjgwMTBfREJfREVQVEhfSU5GTzoKKwkJdHJhY2stPmRiX2RlcHRoX2luZm8gPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CisJCWJyZWFrOworCWNhc2UgUl8wMjgwMDRfREJfREVQVEhfVklFVzoKKwkJdHJhY2stPmRiX2RlcHRoX3ZpZXcgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CisJCWJyZWFrOworCWNhc2UgUl8wMjgwMDBfREJfREVQVEhfU0laRToKKwkJdHJhY2stPmRiX2RlcHRoX3NpemUgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CisJCXRyYWNrLT5kYl9kZXB0aF9zaXplX2lkeCA9IGlkeDsKKwkJYnJlYWs7CisJY2FzZSBSXzAyOEFCMF9WR1RfU1RSTU9VVF9FTjoKKwkJdHJhY2stPnZndF9zdHJtb3V0X2VuID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCQlicmVhazsKKwljYXNlIFJfMDI4QjIwX1ZHVF9TVFJNT1VUX0JVRkZFUl9FTjoKKwkJdHJhY2stPnZndF9zdHJtb3V0X2J1ZmZlcl9lbiA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwkJYnJlYWs7CisJY2FzZSBSXzAyODIzOF9DQl9UQVJHRVRfTUFTSzoKKwkJdHJhY2stPmNiX3RhcmdldF9tYXNrID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCQlicmVhazsKKwljYXNlIFJfMDI4MjNDX0NCX1NIQURFUl9NQVNLOgorCQl0cmFjay0+Y2Jfc2hhZGVyX21hc2sgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCk7CisJCWJyZWFrOworCWNhc2UgUl8wMjhDMDRfUEFfU0NfQUFfQ09ORklHOgorCQl0bXAgPSBHXzAyOEMwNF9NU0FBX05VTV9TQU1QTEVTKHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KSk7CisJCXRyYWNrLT5uc2FtcGxlcyA9IDEgPDwgdG1wOworCQlicmVhazsKKwljYXNlIFJfMDI4MEEwX0NCX0NPTE9SMF9JTkZPOgorCWNhc2UgUl8wMjgwQTRfQ0JfQ09MT1IxX0lORk86CisJY2FzZSBSXzAyODBBOF9DQl9DT0xPUjJfSU5GTzoKKwljYXNlIFJfMDI4MEFDX0NCX0NPTE9SM19JTkZPOgorCWNhc2UgUl8wMjgwQjBfQ0JfQ09MT1I0X0lORk86CisJY2FzZSBSXzAyODBCNF9DQl9DT0xPUjVfSU5GTzoKKwljYXNlIFJfMDI4MEI4X0NCX0NPTE9SNl9JTkZPOgorCWNhc2UgUl8wMjgwQkNfQ0JfQ09MT1I3X0lORk86CisJCXRtcCA9IChyZWcgLSBSXzAyODBBMF9DQl9DT0xPUjBfSU5GTykgLyA0OworCQl0cmFjay0+Y2JfY29sb3JfaW5mb1t0bXBdID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCQlicmVhazsKKwljYXNlIFJfMDI4MDYwX0NCX0NPTE9SMF9TSVpFOgorCWNhc2UgUl8wMjgwNjRfQ0JfQ09MT1IxX1NJWkU6CisJY2FzZSBSXzAyODA2OF9DQl9DT0xPUjJfU0laRToKKwljYXNlIFJfMDI4MDZDX0NCX0NPTE9SM19TSVpFOgorCWNhc2UgUl8wMjgwNzBfQ0JfQ09MT1I0X1NJWkU6CisJY2FzZSBSXzAyODA3NF9DQl9DT0xPUjVfU0laRToKKwljYXNlIFJfMDI4MDc4X0NCX0NPTE9SNl9TSVpFOgorCWNhc2UgUl8wMjgwN0NfQ0JfQ09MT1I3X1NJWkU6CisJCXRtcCA9IChyZWcgLSBSXzAyODA2MF9DQl9DT0xPUjBfU0laRSkgLyA0OworCQl0cmFjay0+Y2JfY29sb3Jfc2l6ZVt0bXBdID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCQl0cmFjay0+Y2JfY29sb3Jfc2l6ZV9pZHhbdG1wXSA9IGlkeDsKKwkJYnJlYWs7CisJCS8qIFRoaXMgcmVnaXN0ZXIgd2VyZSBhZGRlZCBsYXRlLCB0aGVyZSBpcyB1c2Vyc3BhY2UKKwkJICogd2hpY2ggZG9lcyBwcm92aWRlIHJlbG9jYXRpb24gZm9yIHRob3NlIGJ1dCBzZXQKKwkJICogMCBvZmZzZXQuIEluIG9yZGVyIHRvIGF2b2lkIGJyZWFraW5nIG9sZCB1c2Vyc3BhY2UKKwkJICogd2UgZGV0ZWN0IHRoaXMgYW5kIHNldCBhZGRyZXNzIHRvIHBvaW50IHRvIGxhc3QKKwkJICogQ0JfQ09MT1IwX0JBU0UsIG5vdGUgdGhhdCBpZiB1c2Vyc3BhY2UgZG9lc24ndCBzZXQKKwkJICogQ0JfQ09MT1IwX0JBU0UgYmVmb3JlIHRoaXMgcmVnaXN0ZXIgd2Ugd2lsbCByZXBvcnQKKwkJICogZXJyb3IuIE9sZCB1c2Vyc3BhY2UgYWx3YXlzIHNldCBDQl9DT0xPUjBfQkFTRQorCQkgKiBiZWZvcmUgYW55IG9mIHRoaXMuCisJCSAqLworCWNhc2UgUl8wMjgwRTBfQ0JfQ09MT1IwX0ZSQUc6CisJY2FzZSBSXzAyODBFNF9DQl9DT0xPUjFfRlJBRzoKKwljYXNlIFJfMDI4MEU4X0NCX0NPTE9SMl9GUkFHOgorCWNhc2UgUl8wMjgwRUNfQ0JfQ09MT1IzX0ZSQUc6CisJY2FzZSBSXzAyODBGMF9DQl9DT0xPUjRfRlJBRzoKKwljYXNlIFJfMDI4MEY0X0NCX0NPTE9SNV9GUkFHOgorCWNhc2UgUl8wMjgwRjhfQ0JfQ09MT1I2X0ZSQUc6CisJY2FzZSBSXzAyODBGQ19DQl9DT0xPUjdfRlJBRzoKKwkJdG1wID0gKHJlZyAtIFJfMDI4MEUwX0NCX0NPTE9SMF9GUkFHKSAvIDQ7CisJCWlmICghcjYwMF9jc19wYWNrZXRfbmV4dF9pc19wa3QzX25vcChwKSkgeworCQkJaWYgKCF0cmFjay0+Y2JfY29sb3JfYmFzZV9sYXN0W3RtcF0pIHsKKwkJCQlkZXZfZXJyKHAtPmRldiwgIkJyb2tlbiBvbGQgdXNlcnNwYWNlID8gbm8gY2JfY29sb3IwX2Jhc2Ugc3VwcGxpZWQgYmVmb3JlIHRyeWluZyB0byB3cml0ZSAweCUwOFhcbiIsIHJlZyk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpYltpZHhdID0gdHJhY2stPmNiX2NvbG9yX2Jhc2VfbGFzdFt0bXBdOworCQkJcHJpbnRrX29uY2UoS0VSTl9XQVJOSU5HICJZb3UgaGF2ZSBvbGQgJiBicm9rZW4gdXNlcnNwYWNlICIKKwkJCQkJInBsZWFzZSBjb25zaWRlciB1cGRhdGluZyBtZXNhICYgeGY4Ni12aWRlby1hdGlcbiIpOworCQkJdHJhY2stPmNiX2NvbG9yX2ZyYWdfYm9bdG1wXSA9IHRyYWNrLT5jYl9jb2xvcl9ib1t0bXBdOworCQl9IGVsc2UgeworCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJCWlmIChyKSB7CisJCQkJZGV2X2VycihwLT5kZXYsICJiYWQgU0VUX0NPTlRFWFRfUkVHIDB4JTA0WFxuIiwgcmVnKTsKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCX0KKwkJCWliW2lkeF0gKz0gKHUzMikoKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgPj4gOCkgJiAweGZmZmZmZmZmKTsKKwkJCXRyYWNrLT5jYl9jb2xvcl9mcmFnX2JvW3RtcF0gPSByZWxvYy0+cm9iajsKKwkJfQorCQlicmVhazsKKwljYXNlIFJfMDI4MEMwX0NCX0NPTE9SMF9USUxFOgorCWNhc2UgUl8wMjgwQzRfQ0JfQ09MT1IxX1RJTEU6CisJY2FzZSBSXzAyODBDOF9DQl9DT0xPUjJfVElMRToKKwljYXNlIFJfMDI4MENDX0NCX0NPTE9SM19USUxFOgorCWNhc2UgUl8wMjgwRDBfQ0JfQ09MT1I0X1RJTEU6CisJY2FzZSBSXzAyODBENF9DQl9DT0xPUjVfVElMRToKKwljYXNlIFJfMDI4MEQ4X0NCX0NPTE9SNl9USUxFOgorCWNhc2UgUl8wMjgwRENfQ0JfQ09MT1I3X1RJTEU6CisJCXRtcCA9IChyZWcgLSBSXzAyODBDMF9DQl9DT0xPUjBfVElMRSkgLyA0OworCQlpZiAoIXI2MDBfY3NfcGFja2V0X25leHRfaXNfcGt0M19ub3AocCkpIHsKKwkJCWlmICghdHJhY2stPmNiX2NvbG9yX2Jhc2VfbGFzdFt0bXBdKSB7CisJCQkJZGV2X2VycihwLT5kZXYsICJCcm9rZW4gb2xkIHVzZXJzcGFjZSA/IG5vIGNiX2NvbG9yMF9iYXNlIHN1cHBsaWVkIGJlZm9yZSB0cnlpbmcgdG8gd3JpdGUgMHglMDhYXG4iLCByZWcpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJaWJbaWR4XSA9IHRyYWNrLT5jYl9jb2xvcl9iYXNlX2xhc3RbdG1wXTsKKwkJCXByaW50a19vbmNlKEtFUk5fV0FSTklORyAiWW91IGhhdmUgb2xkICYgYnJva2VuIHVzZXJzcGFjZSAiCisJCQkJCSJwbGVhc2UgY29uc2lkZXIgdXBkYXRpbmcgbWVzYSAmIHhmODYtdmlkZW8tYXRpXG4iKTsKKwkJCXRyYWNrLT5jYl9jb2xvcl90aWxlX2JvW3RtcF0gPSB0cmFjay0+Y2JfY29sb3JfYm9bdG1wXTsKKwkJfSBlbHNlIHsKKwkJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCQlpZiAocikgeworCQkJCWRldl9lcnIocC0+ZGV2LCAiYmFkIFNFVF9DT05URVhUX1JFRyAweCUwNFhcbiIsIHJlZyk7CisJCQkJcmV0dXJuIC1FSU5WQUw7CisJCQl9CisJCQlpYltpZHhdICs9ICh1MzIpKChyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ID4+IDgpICYgMHhmZmZmZmZmZik7CisJCQl0cmFjay0+Y2JfY29sb3JfdGlsZV9ib1t0bXBdID0gcmVsb2MtPnJvYmo7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDQl9DT0xPUjBfQkFTRToKKwljYXNlIENCX0NPTE9SMV9CQVNFOgorCWNhc2UgQ0JfQ09MT1IyX0JBU0U6CisJY2FzZSBDQl9DT0xPUjNfQkFTRToKKwljYXNlIENCX0NPTE9SNF9CQVNFOgorCWNhc2UgQ0JfQ09MT1I1X0JBU0U6CisJY2FzZSBDQl9DT0xPUjZfQkFTRToKKwljYXNlIENCX0NPTE9SN19CQVNFOgorCQlyID0gcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOworCQlpZiAocikgeworCQkJZGV2X3dhcm4ocC0+ZGV2LCAiYmFkIFNFVF9DT05URVhUX1JFRyAiCisJCQkJCSIweCUwNFhcbiIsIHJlZyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQl0bXAgPSAocmVnIC0gQ0JfQ09MT1IwX0JBU0UpIC8gNDsKKwkJdHJhY2stPmNiX2NvbG9yX2JvX29mZnNldFt0bXBdID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgpOworCQlpYltpZHhdICs9ICh1MzIpKChyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ID4+IDgpICYgMHhmZmZmZmZmZik7CisJCXRyYWNrLT5jYl9jb2xvcl9iYXNlX2xhc3RbdG1wXSA9IGliW2lkeF07CisJCXRyYWNrLT5jYl9jb2xvcl9ib1t0bXBdID0gcmVsb2MtPnJvYmo7CisJCWJyZWFrOworCWNhc2UgREJfREVQVEhfQkFTRToKKwkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKKwkJaWYgKHIpIHsKKwkJCWRldl93YXJuKHAtPmRldiwgImJhZCBTRVRfQ09OVEVYVF9SRUcgIgorCQkJCQkiMHglMDRYXG4iLCByZWcpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJdHJhY2stPmRiX29mZnNldCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KTsKKwkJaWJbaWR4XSArPSAodTMyKSgocmVsb2MtPmxvYmouZ3B1X29mZnNldCA+PiA4KSAmIDB4ZmZmZmZmZmYpOworCQl0cmFjay0+ZGJfYm8gPSByZWxvYy0+cm9iajsKKwkJYnJlYWs7CisJY2FzZSBEQl9IVElMRV9EQVRBX0JBU0U6CisJY2FzZSBTUV9QR01fU1RBUlRfRlM6CisJY2FzZSBTUV9QR01fU1RBUlRfRVM6CisJY2FzZSBTUV9QR01fU1RBUlRfVlM6CisJY2FzZSBTUV9QR01fU1RBUlRfR1M6CisJY2FzZSBTUV9QR01fU1RBUlRfUFM6CisJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7CisJCWlmIChyKSB7CisJCQlkZXZfd2FybihwLT5kZXYsICJiYWQgU0VUX0NPTlRFWFRfUkVHICIKKwkJCQkJIjB4JTA0WFxuIiwgcmVnKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWliW2lkeF0gKz0gKHUzMikoKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgPj4gOCkgJiAweGZmZmZmZmZmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X3dhcm4ocC0+ZGV2LCAiZm9yYmlkZGVuIHJlZ2lzdGVyIDB4JTA4eCBhdCAlZFxuIiwgcmVnLCBpZHgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWluaWZ5KHVuc2lnbmVkIHNpemUsIHVuc2lnbmVkIGxldmVscykKK3sKKwlzaXplID0gc2l6ZSA+PiBsZXZlbHM7CisJaWYgKHNpemUgPCAxKQorCQlzaXplID0gMTsKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHZvaWQgcjYwMF90ZXh0dXJlX3NpemUodW5zaWduZWQgbmZhY2VzLCB1bnNpZ25lZCBibGV2ZWwsIHVuc2lnbmVkIG5sZXZlbHMsCisJCQkJdW5zaWduZWQgdzAsIHVuc2lnbmVkIGgwLCB1bnNpZ25lZCBkMCwgdW5zaWduZWQgYnBlLAorCQkJCXVuc2lnbmVkICpsMF9zaXplLCB1bnNpZ25lZCAqbWlwbWFwX3NpemUpCit7CisJdW5zaWduZWQgb2Zmc2V0LCBpLCBsZXZlbCwgZmFjZTsKKwl1bnNpZ25lZCB3aWR0aCwgaGVpZ2h0LCBkZXB0aCwgcm93c3RyaWRlLCBzaXplOworCisJdzAgPSBtaW5pZnkodzAsIDApOworCWgwID0gbWluaWZ5KGgwLCAwKTsKKwlkMCA9IG1pbmlmeShkMCwgMCk7CisJZm9yKGkgPSAwLCBvZmZzZXQgPSAwLCBsZXZlbCA9IGJsZXZlbDsgaSA8IG5sZXZlbHM7IGkrKywgbGV2ZWwrKykgeworCQl3aWR0aCA9IG1pbmlmeSh3MCwgaSk7CisJCWhlaWdodCA9IG1pbmlmeShoMCwgaSk7CisJCWRlcHRoID0gbWluaWZ5KGQwLCBpKTsKKwkJZm9yKGZhY2UgPSAwOyBmYWNlIDwgbmZhY2VzOyBmYWNlKyspIHsKKwkJCXJvd3N0cmlkZSA9ICgod2lkdGggKiBicGUpICsgMjU1KSAmIH4yNTU7CisJCQlzaXplID0gaGVpZ2h0ICogcm93c3RyaWRlICogZGVwdGg7CisJCQlvZmZzZXQgKz0gc2l6ZTsKKwkJCW9mZnNldCA9IChvZmZzZXQgKyAweDFmKSAmIH4weDFmOworCQl9CisJfQorCSpsMF9zaXplID0gKCgodzAgKiBicGUpICsgMjU1KSAmIH4yNTUpICogaDAgKiBkMDsKKwkqbWlwbWFwX3NpemUgPSBvZmZzZXQ7CisJaWYgKCFibGV2ZWwpCisJCSptaXBtYXBfc2l6ZSAtPSAqbDBfc2l6ZTsKKwlpZiAoIW5sZXZlbHMpCisJCSptaXBtYXBfc2l6ZSA9ICpsMF9zaXplOworfQorCisvKioKKyAqIHI2MDBfY2hlY2tfdGV4dHVyZV9yZXNvdXJjZSgpIC0gY2hlY2sgaWYgcmVnaXN0ZXIgaXMgYXV0aG9yaXplZCBvciBub3QKKyAqIEBwOiBwYXJzZXIgc3RydWN0dXJlIGhvbGRpbmcgcGFyc2luZyBjb250ZXh0CisgKiBAaWR4OiBpbmRleCBpbnRvIHRoZSBjcyBidWZmZXIKKyAqIEB0ZXh0dXJlOiB0ZXh0dXJlJ3MgYm8gc3RydWN0dXJlCisgKiBAbWlwbWFwOiBtaXBtYXAncyBibyBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2hlY2sgdGhhdCB0aGUgcmVzb3VyY2UgaGFzIHZhbGlkIGZpZWxkIGFuZCB0aGF0CisgKiB0aGUgdGV4dHVyZSBhbmQgbWlwbWFwIGJvIG9iamVjdCBhcmUgYmlnIGVub3VnaCB0byBjb3ZlciB0aGlzIHJlc291cmNlLgorICovCitzdGF0aWMgaW5saW5lIGludCByNjAwX2NoZWNrX3RleHR1cmVfcmVzb3VyY2Uoc3RydWN0IHJhZGVvbl9jc19wYXJzZXIgKnAsICB1MzIgaWR4LAorCQkJCQkJc3RydWN0IHJhZGVvbl9ibyAqdGV4dHVyZSwKKwkJCQkJCXN0cnVjdCByYWRlb25fYm8gKm1pcG1hcCkKK3sKKwl1MzIgbmZhY2VzLCBubGV2ZWxzLCBibGV2ZWwsIHcwLCBoMCwgZDAsIGJwZSA9IDA7CisJdTMyIHdvcmQwLCB3b3JkMSwgbDBfc2l6ZSwgbWlwbWFwX3NpemU7CisKKwkvKiBvbiBsZWdhY3kga2VybmVsIHdlIGRvbid0IHBlcmZvcm0gYWR2YW5jZWQgY2hlY2sgKi8KKwlpZiAocC0+cmRldiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwl3b3JkMCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgMCk7CisJd29yZDEgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDEpOworCXcwID0gR18wMzgwMDBfVEVYX1dJRFRIKHdvcmQwKSArIDE7CisJaDAgPSBHXzAzODAwNF9URVhfSEVJR0hUKHdvcmQxKSArIDE7CisJZDAgPSBHXzAzODAwNF9URVhfREVQVEgod29yZDEpOworCW5mYWNlcyA9IDE7CisJc3dpdGNoIChHXzAzODAwMF9ESU0od29yZDApKSB7CisJY2FzZSBWXzAzODAwMF9TUV9URVhfRElNXzFEOgorCWNhc2UgVl8wMzgwMDBfU1FfVEVYX0RJTV8yRDoKKwljYXNlIFZfMDM4MDAwX1NRX1RFWF9ESU1fM0Q6CisJCWJyZWFrOworCWNhc2UgVl8wMzgwMDBfU1FfVEVYX0RJTV9DVUJFTUFQOgorCQluZmFjZXMgPSA2OworCQlicmVhazsKKwljYXNlIFZfMDM4MDAwX1NRX1RFWF9ESU1fMURfQVJSQVk6CisJY2FzZSBWXzAzODAwMF9TUV9URVhfRElNXzJEX0FSUkFZOgorCWNhc2UgVl8wMzgwMDBfU1FfVEVYX0RJTV8yRF9NU0FBOgorCWNhc2UgVl8wMzgwMDBfU1FfVEVYX0RJTV8yRF9BUlJBWV9NU0FBOgorCWRlZmF1bHQ6CisJCWRldl93YXJuKHAtPmRldiwgInRoaXMga2VybmVsIGRvZXNuJ3Qgc3VwcG9ydCAlZCB0ZXh0dXJlIGRpbVxuIiwgR18wMzgwMDBfRElNKHdvcmQwKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAocjYwMF9icGVfZnJvbV9mb3JtYXQoJmJwZSwgIEdfMDM4MDA0X0RBVEFfRk9STUFUKHdvcmQxKSkpIHsKKwkJZGV2X3dhcm4ocC0+ZGV2LCAiJXM6JWQgdGV4dHVyZSBpbnZhbGlkIGZvcm1hdCAlZFxuIiwKKwkJCSBfX2Z1bmNfXywgX19MSU5FX18sIEdfMDM4MDA0X0RBVEFfRk9STUFUKHdvcmQxKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwl3b3JkMCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4ICsgNCk7CisJd29yZDEgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDUpOworCWJsZXZlbCA9IEdfMDM4MDEwX0JBU0VfTEVWRUwod29yZDApOworCW5sZXZlbHMgPSBHXzAzODAxNF9MQVNUX0xFVkVMKHdvcmQxKTsKKwlyNjAwX3RleHR1cmVfc2l6ZShuZmFjZXMsIGJsZXZlbCwgbmxldmVscywgdzAsIGgwLCBkMCwgYnBlLCAmbDBfc2l6ZSwgJm1pcG1hcF9zaXplKTsKKwkvKiB1c2luZyBnZXQgaWIgd2lsbCBnaXZlIHVzIHRoZSBvZmZzZXQgaW50byB0aGUgdGV4dHVyZSBibyAqLworCXdvcmQwID0gcmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHggKyAyKTsKKwlpZiAoKGwwX3NpemUgKyB3b3JkMCkgPiByYWRlb25fYm9fc2l6ZSh0ZXh0dXJlKSkgeworCQlkZXZfd2FybihwLT5kZXYsICJ0ZXh0dXJlIGJvIHRvbyBzbWFsbCAoJWQgJWQgJWQgJWQgLT4gJWQgaGF2ZSAlbGQpXG4iLAorCQkJdzAsIGgwLCBicGUsIHdvcmQwLCBsMF9zaXplLCByYWRlb25fYm9fc2l6ZSh0ZXh0dXJlKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwkvKiB1c2luZyBnZXQgaWIgd2lsbCBnaXZlIHVzIHRoZSBvZmZzZXQgaW50byB0aGUgbWlwbWFwIGJvICovCisJd29yZDAgPSByYWRlb25fZ2V0X2liX3ZhbHVlKHAsIGlkeCArIDMpOworCWlmICgobWlwbWFwX3NpemUgKyB3b3JkMCkgPiByYWRlb25fYm9fc2l6ZShtaXBtYXApKSB7CisJCWRldl93YXJuKHAtPmRldiwgIm1pcG1hcCBibyB0b28gc21hbGwgKCVkICVkICVkICVkICVkICVkIC0+ICVkIGhhdmUgJWxkKVxuIiwKKwkJCXcwLCBoMCwgYnBlLCBibGV2ZWwsIG5sZXZlbHMsIHdvcmQwLCBtaXBtYXBfc2l6ZSwgcmFkZW9uX2JvX3NpemUodGV4dHVyZSkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcjYwMF9wYWNrZXQzX2NoZWNrKHN0cnVjdCByYWRlb25fY3NfcGFyc2VyICpwLAogCQkJCXN0cnVjdCByYWRlb25fY3NfcGFja2V0ICpwa3QpCiB7CkBAIC00MDgsMTIgKzEwMzksMjIgQEAKIAkJfQogCQlpYltpZHgrMF0gPSBpZHhfdmFsdWUgKyAodTMyKShyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ICYgMHhmZmZmZmZmZik7CiAJCWliW2lkeCsxXSArPSB1cHBlcl8zMl9iaXRzKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZjsKKwkJciA9IHI2MDBfY3NfdHJhY2tfY2hlY2socCk7CisJCWlmIChyKSB7CisJCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBpbnZhbGlkIGNtZCBzdHJlYW1cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJCQlyZXR1cm4gcjsKKwkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfRFJBV19JTkRFWF9BVVRPOgogCQlpZiAocGt0LT5jb3VudCAhPSAxKSB7CiAJCQlEUk1fRVJST1IoImJhZCBEUkFXX0lOREVYX0FVVE9cbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKwkJciA9IHI2MDBfY3NfdHJhY2tfY2hlY2socCk7CisJCWlmIChyKSB7CisJCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBpbnZhbGlkIGNtZCBzdHJlYW0gJWRcbiIsIF9fZnVuY19fLCBfX0xJTkVfXywgaWR4KTsKKwkJCXJldHVybiByOworCQl9CiAJCWJyZWFrOwogCWNhc2UgUEFDS0VUM19EUkFXX0lOREVYX0lNTURfQkU6CiAJY2FzZSBQQUNLRVQzX0RSQVdfSU5ERVhfSU1NRDoKQEAgLTQyMSw2ICsxMDYyLDExIEBACiAJCQlEUk1fRVJST1IoImJhZCBEUkFXX0lOREVYX0lNTURcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKwkJciA9IHI2MDBfY3NfdHJhY2tfY2hlY2socCk7CisJCWlmIChyKSB7CisJCQlkZXZfd2FybihwLT5kZXYsICIlczolZCBpbnZhbGlkIGNtZCBzdHJlYW1cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7CisJCQlyZXR1cm4gcjsKKwkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfV0FJVF9SRUdfTUVNOgogCQlpZiAocGt0LT5jb3VudCAhPSA1KSB7CkBAIC00OTMsMzAgKzExMzksOSBAQAogCQl9CiAJCWZvciAoaSA9IDA7IGkgPCBwa3QtPmNvdW50OyBpKyspIHsKIAkJCXJlZyA9IHN0YXJ0X3JlZyArICg0ICogaSk7Ci0JCQlzd2l0Y2ggKHJlZykgewotCQkJY2FzZSBTUV9FU0dTX1JJTkdfQkFTRToKLQkJCWNhc2UgU1FfR1NWU19SSU5HX0JBU0U6Ci0JCQljYXNlIFNRX0VTVE1QX1JJTkdfQkFTRToKLQkJCWNhc2UgU1FfR1NUTVBfUklOR19CQVNFOgotCQkJY2FzZSBTUV9WU1RNUF9SSU5HX0JBU0U6Ci0JCQljYXNlIFNRX1BTVE1QX1JJTkdfQkFTRToKLQkJCWNhc2UgU1FfRkJVRl9SSU5HX0JBU0U6Ci0JCQljYXNlIFNRX1JFRFVDX1JJTkdfQkFTRToKLQkJCWNhc2UgU1hfTUVNT1JZX0VYUE9SVF9CQVNFOgotCQkJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQkJaWYgKHIpIHsKLQkJCQkJRFJNX0VSUk9SKCJiYWQgU0VUX0NPTkZJR19SRUcgIgotCQkJCQkJCSIweCUwNFhcbiIsIHJlZyk7Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCX0KLQkJCQlpYltpZHgrMStpXSArPSAodTMyKSgocmVsb2MtPmxvYmouZ3B1X29mZnNldCA+PiA4KSAmIDB4ZmZmZmZmZmYpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBDUF9DT0hFUl9CQVNFOgotCQkJCS8qIHVzZSBQQUNLRVQzX1NVUkZBQ0VfU1lOQyAqLwotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJCX0KKwkJCXIgPSByNjAwX2NzX2NoZWNrX3JlZyhwLCByZWcsIGlkeCsxK2kpOworCQkJaWYgKHIpCisJCQkJcmV0dXJuIHI7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQQUNLRVQzX1NFVF9DT05URVhUX1JFRzoKQEAgLTUzMCwxMDYgKzExNTUsOSBAQAogCQl9CiAJCWZvciAoaSA9IDA7IGkgPCBwa3QtPmNvdW50OyBpKyspIHsKIAkJCXJlZyA9IHN0YXJ0X3JlZyArICg0ICogaSk7Ci0JCQlzd2l0Y2ggKHJlZykgewotCQkJLyogVGhpcyByZWdpc3RlciB3ZXJlIGFkZGVkIGxhdGUsIHRoZXJlIGlzIHVzZXJzcGFjZQotCQkJICogd2hpY2ggZG9lcyBwcm92aWRlIHJlbG9jYXRpb24gZm9yIHRob3NlIGJ1dCBzZXQKLQkJCSAqIDAgb2Zmc2V0LiBJbiBvcmRlciB0byBhdm9pZCBicmVha2luZyBvbGQgdXNlcnNwYWNlCi0JCQkgKiB3ZSBkZXRlY3QgdGhpcyBhbmQgc2V0IGFkZHJlc3MgdG8gcG9pbnQgdG8gbGFzdAotCQkJICogQ0JfQ09MT1IwX0JBU0UsIG5vdGUgdGhhdCBpZiB1c2Vyc3BhY2UgZG9lc24ndCBzZXQKLQkJCSAqIENCX0NPTE9SMF9CQVNFIGJlZm9yZSB0aGlzIHJlZ2lzdGVyIHdlIHdpbGwgcmVwb3J0Ci0JCQkgKiBlcnJvci4gT2xkIHVzZXJzcGFjZSBhbHdheXMgc2V0IENCX0NPTE9SMF9CQVNFCi0JCQkgKiBiZWZvcmUgYW55IG9mIHRoaXMuCi0JCQkgKi8KLQkJCWNhc2UgUl8wMjgwRTBfQ0JfQ09MT1IwX0ZSQUc6Ci0JCQljYXNlIFJfMDI4MEU0X0NCX0NPTE9SMV9GUkFHOgotCQkJY2FzZSBSXzAyODBFOF9DQl9DT0xPUjJfRlJBRzoKLQkJCWNhc2UgUl8wMjgwRUNfQ0JfQ09MT1IzX0ZSQUc6Ci0JCQljYXNlIFJfMDI4MEYwX0NCX0NPTE9SNF9GUkFHOgotCQkJY2FzZSBSXzAyODBGNF9DQl9DT0xPUjVfRlJBRzoKLQkJCWNhc2UgUl8wMjgwRjhfQ0JfQ09MT1I2X0ZSQUc6Ci0JCQljYXNlIFJfMDI4MEZDX0NCX0NPTE9SN19GUkFHOgotCQkJY2FzZSBSXzAyODBDMF9DQl9DT0xPUjBfVElMRToKLQkJCWNhc2UgUl8wMjgwQzRfQ0JfQ09MT1IxX1RJTEU6Ci0JCQljYXNlIFJfMDI4MEM4X0NCX0NPTE9SMl9USUxFOgotCQkJY2FzZSBSXzAyODBDQ19DQl9DT0xPUjNfVElMRToKLQkJCWNhc2UgUl8wMjgwRDBfQ0JfQ09MT1I0X1RJTEU6Ci0JCQljYXNlIFJfMDI4MEQ0X0NCX0NPTE9SNV9USUxFOgotCQkJY2FzZSBSXzAyODBEOF9DQl9DT0xPUjZfVElMRToKLQkJCWNhc2UgUl8wMjgwRENfQ0JfQ09MT1I3X1RJTEU6Ci0JCQkJaWYgKCFyNjAwX2NzX3BhY2tldF9uZXh0X2lzX3BrdDNfbm9wKHApKSB7Ci0JCQkJCWlmICghdHJhY2stPmNiX2NvbG9yMF9iYXNlX2xhc3QpIHsKLQkJCQkJCWRldl9lcnIocC0+ZGV2LCAiQnJva2VuIG9sZCB1c2Vyc3BhY2UgPyBubyBjYl9jb2xvcjBfYmFzZSBzdXBwbGllZCBiZWZvcmUgdHJ5aW5nIHRvIHdyaXRlIDB4JTA4WFxuIiwgcmVnKTsKLQkJCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCQl9Ci0JCQkJCWliW2lkeCsxK2ldID0gdHJhY2stPmNiX2NvbG9yMF9iYXNlX2xhc3Q7Ci0JCQkJCXByaW50a19vbmNlKEtFUk5fV0FSTklORyAicmFkZW9uOiBZb3UgaGF2ZSBvbGQgJiBicm9rZW4gdXNlcnNwYWNlICIKLQkJCQkJCSJwbGVhc2UgY29uc2lkZXIgdXBkYXRpbmcgbWVzYSAmIHhmODYtdmlkZW8tYXRpXG4iKTsKLQkJCQl9IGVsc2UgewotCQkJCQlyID0gcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwotCQkJCQlpZiAocikgewotCQkJCQkJZGV2X2VycihwLT5kZXYsICJiYWQgU0VUX0NPTlRFWFRfUkVHIDB4JTA0WFxuIiwgcmVnKTsKLQkJCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCQl9Ci0JCQkJCWliW2lkeCsxK2ldICs9ICh1MzIpKChyZWxvYy0+bG9iai5ncHVfb2Zmc2V0ID4+IDgpICYgMHhmZmZmZmZmZik7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJY2FzZSBEQl9ERVBUSF9CQVNFOgotCQkJY2FzZSBEQl9IVElMRV9EQVRBX0JBU0U6Ci0JCQljYXNlIENCX0NPTE9SMF9CQVNFOgotCQkJCXIgPSByNjAwX2NzX3BhY2tldF9uZXh0X3JlbG9jKHAsICZyZWxvYyk7Ci0JCQkJaWYgKHIpIHsKLQkJCQkJRFJNX0VSUk9SKCJiYWQgU0VUX0NPTlRFWFRfUkVHICIKLQkJCQkJCQkiMHglMDRYXG4iLCByZWcpOwotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQl9Ci0JCQkJaWJbaWR4KzEraV0gKz0gKHUzMikoKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgPj4gOCkgJiAweGZmZmZmZmZmKTsKLQkJCQl0cmFjay0+Y2JfY29sb3IwX2Jhc2VfbGFzdCA9IGliW2lkeCsxK2ldOwotCQkJCWJyZWFrOwotCQkJY2FzZSBDQl9DT0xPUjFfQkFTRToKLQkJCWNhc2UgQ0JfQ09MT1IyX0JBU0U6Ci0JCQljYXNlIENCX0NPTE9SM19CQVNFOgotCQkJY2FzZSBDQl9DT0xPUjRfQkFTRToKLQkJCWNhc2UgQ0JfQ09MT1I1X0JBU0U6Ci0JCQljYXNlIENCX0NPTE9SNl9CQVNFOgotCQkJY2FzZSBDQl9DT0xPUjdfQkFTRToKLQkJCWNhc2UgU1FfUEdNX1NUQVJUX0ZTOgotCQkJY2FzZSBTUV9QR01fU1RBUlRfRVM6Ci0JCQljYXNlIFNRX1BHTV9TVEFSVF9WUzoKLQkJCWNhc2UgU1FfUEdNX1NUQVJUX0dTOgotCQkJY2FzZSBTUV9QR01fU1RBUlRfUFM6Ci0JCQkJciA9IHI2MDBfY3NfcGFja2V0X25leHRfcmVsb2MocCwgJnJlbG9jKTsKLQkJCQlpZiAocikgewotCQkJCQlEUk1fRVJST1IoImJhZCBTRVRfQ09OVEVYVF9SRUcgIgotCQkJCQkJCSIweCUwNFhcbiIsIHJlZyk7Ci0JCQkJCXJldHVybiAtRUlOVkFMOwotCQkJCX0KLQkJCQlpYltpZHgrMStpXSArPSAodTMyKSgocmVsb2MtPmxvYmouZ3B1X29mZnNldCA+PiA4KSAmIDB4ZmZmZmZmZmYpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBWR1RfRE1BX0JBU0U6Ci0JCQljYXNlIFZHVF9ETUFfQkFTRV9ISToKLQkJCQkvKiBUaGVzZSBzaG91bGQgYmUgaGFuZGxlZCBieSBEUkFXX0lOREVYIHBhY2tldCAzICovCi0JCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUXzA6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUXzE6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUXzI6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUXzM6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUX0hJXzA6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUX0hJXzE6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUX0hJXzI6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JBU0VfT0ZGU0VUX0hJXzM6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JVRkZFUl9CQVNFXzA6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JVRkZFUl9CQVNFXzE6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JVRkZFUl9CQVNFXzI6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JVRkZFUl9CQVNFXzM6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JVRkZFUl9PRkZTRVRfMDoKLQkJCWNhc2UgVkdUX1NUUk1PVVRfQlVGRkVSX09GRlNFVF8xOgotCQkJY2FzZSBWR1RfU1RSTU9VVF9CVUZGRVJfT0ZGU0VUXzI6Ci0JCQljYXNlIFZHVF9TVFJNT1VUX0JVRkZFUl9PRkZTRVRfMzoKLQkJCQkvKiBUaGVzZSBzaG91bGQgYmUgaGFuZGxlZCBieSBTVFJNT1VUX0JVRkZFUiBwYWNrZXQgMyAqLwotCQkJCURSTV9FUlJPUigiYmFkIGNvbnRleHQgcmVnOiAweCUwOHhcbiIsIHJlZyk7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlkZWZhdWx0OgotCQkJCWJyZWFrOwotCQkJfQorCQkJciA9IHI2MDBfY3NfY2hlY2tfcmVnKHAsIHJlZywgaWR4KzEraSk7CisJCQlpZiAocikKKwkJCQlyZXR1cm4gcjsKIAkJfQogCQlicmVhazsKIAljYXNlIFBBQ0tFVDNfU0VUX1JFU09VUkNFOgpAQCAtNjQ2LDYgKzExNzQsOSBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJZm9yIChpID0gMDsgaSA8IChwa3QtPmNvdW50IC8gNyk7IGkrKykgeworCQkJc3RydWN0IHJhZGVvbl9ibyAqdGV4dHVyZSwgKm1pcG1hcDsKKwkJCXUzMiBzaXplLCBvZmZzZXQ7CisKIAkJCXN3aXRjaCAoR19fU1FfVlRYX0NPTlNUQU5UX1RZUEUocmFkZW9uX2dldF9pYl92YWx1ZShwLCBpZHgrKGkqNykrNisxKSkpIHsKIAkJCWNhc2UgU1FfVEVYX1ZUWF9WQUxJRF9URVhUVVJFOgogCQkJCS8qIHRleCBiYXNlICovCkBAIC02NTUsNiArMTE4Niw3IEBACiAJCQkJCXJldHVybiAtRUlOVkFMOwogCQkJCX0KIAkJCQlpYltpZHgrMSsoaSo3KSsyXSArPSAodTMyKSgocmVsb2MtPmxvYmouZ3B1X29mZnNldCA+PiA4KSAmIDB4ZmZmZmZmZmYpOworCQkJCXRleHR1cmUgPSByZWxvYy0+cm9iajsKIAkJCQkvKiB0ZXggbWlwIGJhc2UgKi8KIAkJCQlyID0gcjYwMF9jc19wYWNrZXRfbmV4dF9yZWxvYyhwLCAmcmVsb2MpOwogCQkJCWlmIChyKSB7CkBAIC02NjIsNiArMTE5NCwxMSBAQAogCQkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCQl9CiAJCQkJaWJbaWR4KzErKGkqNykrM10gKz0gKHUzMikoKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQgPj4gOCkgJiAweGZmZmZmZmZmKTsKKwkJCQltaXBtYXAgPSByZWxvYy0+cm9iajsKKwkJCQlyID0gcjYwMF9jaGVja190ZXh0dXJlX3Jlc291cmNlKHAsICBpZHgrKGkqNykrMSwKKwkJCQkJCXRleHR1cmUsIG1pcG1hcCk7CisJCQkJaWYgKHIpCisJCQkJCXJldHVybiByOwogCQkJCWJyZWFrOwogCQkJY2FzZSBTUV9URVhfVlRYX1ZBTElEX0JVRkZFUjoKIAkJCQkvKiB2dHggYmFzZSAqLwpAQCAtNjcwLDYgKzEyMDcsMTMgQEAKIAkJCQkJRFJNX0VSUk9SKCJiYWQgU0VUX1JFU09VUkNFXG4iKTsKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQkJfQorCQkJCW9mZnNldCA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KzErKGkqNykrMCk7CisJCQkJc2l6ZSA9IHJhZGVvbl9nZXRfaWJfdmFsdWUocCwgaWR4KzErKGkqNykrMSk7CisJCQkJaWYgKHAtPnJkZXYgJiYgKHNpemUgKyBvZmZzZXQpID4gcmFkZW9uX2JvX3NpemUocmVsb2MtPnJvYmopKSB7CisJCQkJCS8qIGZvcmNlIHNpemUgdG8gc2l6ZSBvZiB0aGUgYnVmZmVyICovCisJCQkJCWRldl93YXJuKHAtPmRldiwgInZibyByZXNvdXJjZSBzZWVtcyB0b28gYmlnIGZvciB0aGUgYm9cbiIpOworCQkJCQlpYltpZHgrMSsoaSo3KSsxXSA9IHJhZGVvbl9ib19zaXplKHJlbG9jLT5yb2JqKTsKKwkJCQl9CiAJCQkJaWJbaWR4KzErKGkqNykrMF0gKz0gKHUzMikoKHJlbG9jLT5sb2JqLmdwdV9vZmZzZXQpICYgMHhmZmZmZmZmZik7CiAJCQkJaWJbaWR4KzErKGkqNykrMl0gKz0gdXBwZXJfMzJfYml0cyhyZWxvYy0+bG9iai5ncHVfb2Zmc2V0KSAmIDB4ZmY7CiAJCQkJYnJlYWs7CkBAIC03NjAsMTEgKzEzMDQsMjggQEAKIAlzdHJ1Y3QgcjYwMF9jc190cmFjayAqdHJhY2s7CiAJaW50IHI7CiAKLQl0cmFjayA9IGt6YWxsb2Moc2l6ZW9mKCp0cmFjayksIEdGUF9LRVJORUwpOwotCXAtPnRyYWNrID0gdHJhY2s7CisJaWYgKHAtPnRyYWNrID09IE5VTEwpIHsKKwkJLyogaW5pdGlhbGl6ZSB0cmFja2VyLCB3ZSBhcmUgaW4ga21zICovCisJCXRyYWNrID0ga3phbGxvYyhzaXplb2YoKnRyYWNrKSwgR0ZQX0tFUk5FTCk7CisJCWlmICh0cmFjayA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXI2MDBfY3NfdHJhY2tfaW5pdCh0cmFjayk7CisJCWlmIChwLT5yZGV2LT5mYW1pbHkgPCBDSElQX1JWNzcwKSB7CisJCQl0cmFjay0+bnBpcGVzID0gcC0+cmRldi0+Y29uZmlnLnI2MDAudGlsaW5nX25waXBlczsKKwkJCXRyYWNrLT5uYmFua3MgPSBwLT5yZGV2LT5jb25maWcucjYwMC50aWxpbmdfbmJhbmtzOworCQkJdHJhY2stPmdyb3VwX3NpemUgPSBwLT5yZGV2LT5jb25maWcucjYwMC50aWxpbmdfZ3JvdXBfc2l6ZTsKKwkJfSBlbHNlIGlmIChwLT5yZGV2LT5mYW1pbHkgPD0gQ0hJUF9SVjc0MCkgeworCQkJdHJhY2stPm5waXBlcyA9IHAtPnJkZXYtPmNvbmZpZy5ydjc3MC50aWxpbmdfbnBpcGVzOworCQkJdHJhY2stPm5iYW5rcyA9IHAtPnJkZXYtPmNvbmZpZy5ydjc3MC50aWxpbmdfbmJhbmtzOworCQkJdHJhY2stPmdyb3VwX3NpemUgPSBwLT5yZGV2LT5jb25maWcucnY3NzAudGlsaW5nX2dyb3VwX3NpemU7CisJCX0KKwkJcC0+dHJhY2sgPSB0cmFjazsKKwl9CiAJZG8gewogCQlyID0gcjYwMF9jc19wYWNrZXRfcGFyc2UocCwgJnBrdCwgcC0+aWR4KTsKIAkJaWYgKHIpIHsKKwkJCWtmcmVlKHAtPnRyYWNrKTsKKwkJCXAtPnRyYWNrID0gTlVMTDsKIAkJCXJldHVybiByOwogCQl9CiAJCXAtPmlkeCArPSBwa3QuY291bnQgKyAyOwpAQCAtNzc5LDkgKzEzNDAsMTMgQEAKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJRFJNX0VSUk9SKCJVbmtub3duIHBhY2tldCB0eXBlICVkICFcbiIsIHBrdC50eXBlKTsKKwkJCWtmcmVlKHAtPnRyYWNrKTsKKwkJCXAtPnRyYWNrID0gTlVMTDsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWlmIChyKSB7CisJCQlrZnJlZShwLT50cmFjayk7CisJCQlwLT50cmFjayA9IE5VTEw7CiAJCQlyZXR1cm4gcjsKIAkJfQogCX0gd2hpbGUgKHAtPmlkeCA8IHAtPmNodW5rc1twLT5jaHVua19pYl9pZHhdLmxlbmd0aF9kdyk7CkBAIC03OTEsNiArMTM1Niw4IEBACiAJCW1kZWxheSgxKTsKIAl9CiAjZW5kaWYKKwlrZnJlZShwLT50cmFjayk7CisJcC0+dHJhY2sgPSBOVUxMOwogCXJldHVybiAwOwogfQogCkBAIC04MzMsOSArMTQwMCwxNiBAQAogewogCXN0cnVjdCByYWRlb25fY3NfcGFyc2VyIHBhcnNlcjsKIAlzdHJ1Y3QgcmFkZW9uX2NzX2NodW5rICppYl9jaHVuazsKLQlzdHJ1Y3QgcmFkZW9uX2liCWZha2VfaWI7CisJc3RydWN0IHJhZGVvbl9pYiBmYWtlX2liOworCXN0cnVjdCByNjAwX2NzX3RyYWNrICp0cmFjazsKIAlpbnQgcjsKIAorCS8qIGluaXRpYWxpemUgdHJhY2tlciAqLworCXRyYWNrID0ga3phbGxvYyhzaXplb2YoKnRyYWNrKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHRyYWNrID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXI2MDBfY3NfdHJhY2tfaW5pdCh0cmFjayk7CisJcjYwMF9jc19sZWdhY3lfZ2V0X3RpbGluZ19jb25mKGRldiwgJnRyYWNrLT5ucGlwZXMsICZ0cmFjay0+bmJhbmtzLCAmdHJhY2stPmdyb3VwX3NpemUpOwogCS8qIGluaXRpYWxpemUgcGFyc2VyICovCiAJbWVtc2V0KCZwYXJzZXIsIDAsIHNpemVvZihzdHJ1Y3QgcmFkZW9uX2NzX3BhcnNlcikpOwogCXBhcnNlci5maWxwID0gZmlscDsKQEAgLTg0Myw2ICsxNDE3LDcgQEAKIAlwYXJzZXIucmRldiA9IE5VTEw7CiAJcGFyc2VyLmZhbWlseSA9IGZhbWlseTsKIAlwYXJzZXIuaWIgPSAmZmFrZV9pYjsKKwlwYXJzZXIudHJhY2sgPSB0cmFjazsKIAlmYWtlX2liLnB0ciA9IGliOwogCXIgPSByYWRlb25fY3NfcGFyc2VyX2luaXQoJnBhcnNlciwgZGF0YSk7CiAJaWYgKHIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMGQuaAppbmRleCAzMDQ4MDg4Li41YjJlNGQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBkLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwZC5oCkBAIC04ODMsNiArODgzLDE2IEBACiAKICNkZWZpbmUgUl8wMDU0ODBfSERQX01FTV9DT0hFUkVOQ1lfRkxVU0hfQ05UTAkJMHg1NDgwCiAKKyNkZWZpbmUgUl8wMjhDMDRfUEFfU0NfQUFfQ09ORklHICAgICAgICAgICAgICAgICAgICAgMHgwMjhDMDQKKyNkZWZpbmUgICBTXzAyOEMwNF9NU0FBX05VTV9TQU1QTEVTKHgpICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMCkKKyNkZWZpbmUgICBHXzAyOEMwNF9NU0FBX05VTV9TQU1QTEVTKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MykKKyNkZWZpbmUgICBDXzAyOEMwNF9NU0FBX05VTV9TQU1QTEVTICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZDCisjZGVmaW5lICAgU18wMjhDMDRfQUFfTUFTS19DRU5UUk9JRF9EVE1OKHgpICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDQpCisjZGVmaW5lICAgR18wMjhDMDRfQUFfTUFTS19DRU5UUk9JRF9EVE1OKHgpICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMjhDMDRfQUFfTUFTS19DRU5UUk9JRF9EVE1OICAgICAgICAgICAgICAgMHhGRkZGRkZFRgorI2RlZmluZSAgIFNfMDI4QzA0X01BWF9TQU1QTEVfRElTVCh4KSAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAxMykKKyNkZWZpbmUgICBHXzAyOEMwNF9NQVhfU0FNUExFX0RJU1QoeCkgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMykgJiAweEYpCisjZGVmaW5lICAgQ18wMjhDMDRfTUFYX1NBTVBMRV9ESVNUICAgICAgICAgICAgICAgICAgICAgMHhGRkZFMUZGRgogI2RlZmluZSBSXzAyODBFMF9DQl9DT0xPUjBfRlJBRyAgICAgICAgICAgICAgICAgICAgICAweDAyODBFMAogI2RlZmluZSAgIFNfMDI4MEUwX0JBU0VfMjU2Qih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKICNkZWZpbmUgICBHXzAyODBFMF9CQVNFXzI1NkIoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCkBAIC05MDUsNiArOTE1LDQ2MSBAQAogI2RlZmluZSBSXzAyODBENF9DQl9DT0xPUjVfVElMRSAgICAgICAgICAgICAgICAgICAgICAweDAyODBENAogI2RlZmluZSBSXzAyODBEOF9DQl9DT0xPUjZfVElMRSAgICAgICAgICAgICAgICAgICAgICAweDAyODBEOAogI2RlZmluZSBSXzAyODBEQ19DQl9DT0xPUjdfVElMRSAgICAgICAgICAgICAgICAgICAgICAweDAyODBEQwotCisjZGVmaW5lIFJfMDI4MEEwX0NCX0NPTE9SMF9JTkZPICAgICAgICAgICAgICAgICAgICAgIDB4MDI4MEEwCisjZGVmaW5lICAgU18wMjgwQTBfRU5ESUFOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDApCisjZGVmaW5lICAgR18wMjgwQTBfRU5ESUFOKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDMpCisjZGVmaW5lICAgQ18wMjgwQTBfRU5ESUFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGQworI2RlZmluZSAgIFNfMDI4MEEwX0ZPUk1BVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzRikgPDwgMikKKyNkZWZpbmUgICBHXzAyODBBMF9GT1JNQVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4M0YpCisjZGVmaW5lICAgQ18wMjgwQTBfRk9STUFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkYwMworI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzggICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl80XzQgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfM18zXzIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA1CisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl8xNl9GTE9BVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNgorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfOF84ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzVfNl81ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl82XzVfNSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOQorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfMV81XzVfNSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEEKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzRfNF80XzQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBCCisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl81XzVfNV8xICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQworI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfMzIgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEQKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzMyX0ZMT0FUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBFCisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl8xNl8xNiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRgorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfMTZfMTZfRkxPQVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzhfMjQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDExCisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl84XzI0X0ZMT0FUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfMjRfOCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTMKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzI0XzhfRkxPQVQgICAgICAgICAgICAgICAgICAweDAwMDAwMDE0CisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl8xMF8xMV8xMSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNQorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfMTBfMTFfMTFfRkxPQVQgICAgICAgICAgICAgIDB4MDAwMDAwMTYKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzExXzExXzEwICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE3CisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl8xMV8xMV8xMF9GTE9BVCAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfMl8xMF8xMF8xMCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzhfOF84XzggICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFBCisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl8xMF8xMF8xMF8yICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQgorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfWDI0XzhfMzJfRkxPQVQgICAgICAgICAgICAgIDB4MDAwMDAwMUMKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzMyXzMyICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFECisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl8zMl8zMl9GTE9BVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRQorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfMTZfMTZfMTZfMTYgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUYKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0NPTE9SXzE2XzE2XzE2XzE2X0ZMT0FUICAgICAgICAgICAweDAwMDAwMDIwCisjZGVmaW5lICAgICBWXzAyODBBMF9DT0xPUl8zMl8zMl8zMl8zMiAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSAgICAgVl8wMjgwQTBfQ09MT1JfMzJfMzJfMzJfMzJfRkxPQVQgICAgICAgICAgIDB4MDAwMDAwMjMKKyNkZWZpbmUgICBTXzAyODBBMF9BUlJBWV9NT0RFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgOCkKKyNkZWZpbmUgICBHXzAyODBBMF9BUlJBWV9NT0RFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4RikKKyNkZWZpbmUgICBDXzAyODBBMF9BUlJBWV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGMEZGCisjZGVmaW5lICAgICBWXzAyODBBMF9BUlJBWV9MSU5FQVJfR0VORVJBTCAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSAgICAgVl8wMjgwQTBfQVJSQVlfTElORUFSX0FMSUdORUQgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgICAgIFZfMDI4MEEwX0FSUkFZXzFEX1RJTEVEX1RISU4xICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lICAgICBWXzAyODBBMF9BUlJBWV8yRF9USUxFRF9USElOMSAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSAgIFNfMDI4MEEwX05VTUJFUl9UWVBFKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAxMikKKyNkZWZpbmUgICBHXzAyODBBMF9OVU1CRVJfVFlQRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDcpCisjZGVmaW5lICAgQ18wMjgwQTBfTlVNQkVSX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGOEZGRgorI2RlZmluZSAgIFNfMDI4MEEwX1JFQURfU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAyODBBMF9SRUFEX1NJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwQTBfUkVBRF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGN0ZGRgorI2RlZmluZSAgIFNfMDI4MEEwX0NPTVBfU1dBUCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAxNikKKyNkZWZpbmUgICBHXzAyODBBMF9DT01QX1NXQVAoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDMpCisjZGVmaW5lICAgQ18wMjgwQTBfQ09NUF9TV0FQICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZDRkZGRgorI2RlZmluZSAgIFNfMDI4MEEwX1RJTEVfTU9ERSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAxOCkKKyNkZWZpbmUgICBHXzAyODBBMF9USUxFX01PREUoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOCkgJiAweDMpCisjZGVmaW5lICAgQ18wMjgwQTBfVElMRV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkYzRkZGRgorI2RlZmluZSAgIFNfMDI4MEEwX0JMRU5EX0NMQU1QKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMCkKKyNkZWZpbmUgICBHXzAyODBBMF9CTEVORF9DTEFNUCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwQTBfQkxFTkRfQ0xBTVAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkVGRkZGRgorI2RlZmluZSAgIFNfMDI4MEEwX0NMRUFSX0NPTE9SKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMSkKKyNkZWZpbmUgICBHXzAyODBBMF9DTEVBUl9DT0xPUih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwQTBfQ0xFQVJfQ09MT1IgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkRGRkZGRgorI2RlZmluZSAgIFNfMDI4MEEwX0JMRU5EX0JZUEFTUyh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMikKKyNkZWZpbmUgICBHXzAyODBBMF9CTEVORF9CWVBBU1MoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwQTBfQkxFTkRfQllQQVNTICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkJGRkZGRgorI2RlZmluZSAgIFNfMDI4MEEwX0JMRU5EX0ZMT0FUMzIoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyMykKKyNkZWZpbmUgICBHXzAyODBBMF9CTEVORF9GTE9BVDMyKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMykgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwQTBfQkxFTkRfRkxPQVQzMiAgICAgICAgICAgICAgICAgICAgICAgMHhGRjdGRkZGRgorI2RlZmluZSAgIFNfMDI4MEEwX1NJTVBMRV9GTE9BVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNCkKKyNkZWZpbmUgICBHXzAyODBBMF9TSU1QTEVfRkxPQVQoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNCkgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwQTBfU0lNUExFX0ZMT0FUICAgICAgICAgICAgICAgICAgICAgICAgMHhGRUZGRkZGRgorI2RlZmluZSAgIFNfMDI4MEEwX1JPVU5EX01PREUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAyODBBMF9ST1VORF9NT0RFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwQTBfUk9VTkRfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDI4MEEwX1RJTEVfQ09NUEFDVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAyODBBMF9USUxFX0NPTVBBQ1QoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwQTBfVElMRV9DT01QQUNUICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDI4MEEwX1NPVVJDRV9GT1JNQVQoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNykKKyNkZWZpbmUgICBHXzAyODBBMF9TT1VSQ0VfRk9STUFUKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNykgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwQTBfU09VUkNFX0ZPUk1BVCAgICAgICAgICAgICAgICAgICAgICAgMHhGN0ZGRkZGRgorI2RlZmluZSBSXzAyODBBNF9DQl9DT0xPUjFfSU5GTyAgICAgICAgICAgICAgICAgICAgICAweDAyODBBNAorI2RlZmluZSBSXzAyODBBOF9DQl9DT0xPUjJfSU5GTyAgICAgICAgICAgICAgICAgICAgICAweDAyODBBOAorI2RlZmluZSBSXzAyODBBQ19DQl9DT0xPUjNfSU5GTyAgICAgICAgICAgICAgICAgICAgICAweDAyODBBQworI2RlZmluZSBSXzAyODBCMF9DQl9DT0xPUjRfSU5GTyAgICAgICAgICAgICAgICAgICAgICAweDAyODBCMAorI2RlZmluZSBSXzAyODBCNF9DQl9DT0xPUjVfSU5GTyAgICAgICAgICAgICAgICAgICAgICAweDAyODBCNAorI2RlZmluZSBSXzAyODBCOF9DQl9DT0xPUjZfSU5GTyAgICAgICAgICAgICAgICAgICAgICAweDAyODBCOAorI2RlZmluZSBSXzAyODBCQ19DQl9DT0xPUjdfSU5GTyAgICAgICAgICAgICAgICAgICAgICAweDAyODBCQworI2RlZmluZSBSXzAyODA2MF9DQl9DT0xPUjBfU0laRSAgICAgICAgICAgICAgICAgICAgICAweDAyODA2MAorI2RlZmluZSAgIFNfMDI4MDYwX1BJVENIX1RJTEVfTUFYKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzRkYpIDw8IDApCisjZGVmaW5lICAgR18wMjgwNjBfUElUQ0hfVElMRV9NQVgoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDNGRikKKyNkZWZpbmUgICBDXzAyODA2MF9QSVRDSF9USUxFX01BWCAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGQzAwCisjZGVmaW5lICAgU18wMjgwNjBfU0xJQ0VfVElMRV9NQVgoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAyODA2MF9TTElDRV9USUxFX01BWCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweEZGRkZGKQorI2RlZmluZSAgIENfMDI4MDYwX1NMSUNFX1RJTEVfTUFYICAgICAgICAgICAgICAgICAgICAgIDB4QzAwMDAzRkYKKyNkZWZpbmUgUl8wMjgwNjRfQ0JfQ09MT1IxX1NJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMjgwNjQKKyNkZWZpbmUgUl8wMjgwNjhfQ0JfQ09MT1IyX1NJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMjgwNjgKKyNkZWZpbmUgUl8wMjgwNkNfQ0JfQ09MT1IzX1NJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMjgwNkMKKyNkZWZpbmUgUl8wMjgwNzBfQ0JfQ09MT1I0X1NJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMjgwNzAKKyNkZWZpbmUgUl8wMjgwNzRfQ0JfQ09MT1I1X1NJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMjgwNzQKKyNkZWZpbmUgUl8wMjgwNzhfQ0JfQ09MT1I2X1NJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMjgwNzgKKyNkZWZpbmUgUl8wMjgwN0NfQ0JfQ09MT1I3X1NJWkUgICAgICAgICAgICAgICAgICAgICAgMHgwMjgwN0MKKyNkZWZpbmUgUl8wMjgyMzhfQ0JfVEFSR0VUX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMjgyMzgKKyNkZWZpbmUgICBTXzAyODIzOF9UQVJHRVQwX0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMCkKKyNkZWZpbmUgICBHXzAyODIzOF9UQVJHRVQwX0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RikKKyNkZWZpbmUgICBDXzAyODIzOF9UQVJHRVQwX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkYwCisjZGVmaW5lICAgU18wMjgyMzhfVEFSR0VUMV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDQpCisjZGVmaW5lICAgR18wMjgyMzhfVEFSR0VUMV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweEYpCisjZGVmaW5lICAgQ18wMjgyMzhfVEFSR0VUMV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkYwRgorI2RlZmluZSAgIFNfMDI4MjM4X1RBUkdFVDJfRU5BQkxFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCA4KQorI2RlZmluZSAgIEdfMDI4MjM4X1RBUkdFVDJfRU5BQkxFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjM4X1RBUkdFVDJfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkYwRkYKKyNkZWZpbmUgICBTXzAyODIzOF9UQVJHRVQzX0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTIpCisjZGVmaW5lICAgR18wMjgyMzhfVEFSR0VUM19FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjM4X1RBUkdFVDNfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjBGRkYKKyNkZWZpbmUgICBTXzAyODIzOF9UQVJHRVQ0X0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTYpCisjZGVmaW5lICAgR18wMjgyMzhfVEFSR0VUNF9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjM4X1RBUkdFVDRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RkZGMEZGRkYKKyNkZWZpbmUgICBTXzAyODIzOF9UQVJHRVQ1X0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjApCisjZGVmaW5lICAgR18wMjgyMzhfVEFSR0VUNV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjM4X1RBUkdFVDVfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RkYwRkZGRkYKKyNkZWZpbmUgICBTXzAyODIzOF9UQVJHRVQ2X0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjQpCisjZGVmaW5lICAgR18wMjgyMzhfVEFSR0VUNl9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjM4X1RBUkdFVDZfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RjBGRkZGRkYKKyNkZWZpbmUgICBTXzAyODIzOF9UQVJHRVQ3X0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjgpCisjZGVmaW5lICAgR18wMjgyMzhfVEFSR0VUN19FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjM4X1RBUkdFVDdfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4MEZGRkZGRkYKKyNkZWZpbmUgUl8wMjgyM0NfQ0JfU0hBREVSX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMjgyM0MKKyNkZWZpbmUgICBTXzAyODIzQ19PVVRQVVQwX0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMCkKKyNkZWZpbmUgICBHXzAyODIzQ19PVVRQVVQwX0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RikKKyNkZWZpbmUgICBDXzAyODIzQ19PVVRQVVQwX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkYwCisjZGVmaW5lICAgU18wMjgyM0NfT1VUUFVUMV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEYpIDw8IDQpCisjZGVmaW5lICAgR18wMjgyM0NfT1VUUFVUMV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNCkgJiAweEYpCisjZGVmaW5lICAgQ18wMjgyM0NfT1VUUFVUMV9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkYwRgorI2RlZmluZSAgIFNfMDI4MjNDX09VVFBVVDJfRU5BQkxFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCA4KQorI2RlZmluZSAgIEdfMDI4MjNDX09VVFBVVDJfRU5BQkxFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjNDX09VVFBVVDJfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkYwRkYKKyNkZWZpbmUgICBTXzAyODIzQ19PVVRQVVQzX0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTIpCisjZGVmaW5lICAgR18wMjgyM0NfT1VUUFVUM19FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTIpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjNDX09VVFBVVDNfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjBGRkYKKyNkZWZpbmUgICBTXzAyODIzQ19PVVRQVVQ0X0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMTYpCisjZGVmaW5lICAgR18wMjgyM0NfT1VUUFVUNF9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTYpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjNDX09VVFBVVDRfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RkZGMEZGRkYKKyNkZWZpbmUgICBTXzAyODIzQ19PVVRQVVQ1X0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjApCisjZGVmaW5lICAgR18wMjgyM0NfT1VUUFVUNV9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjNDX09VVFBVVDVfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RkYwRkZGRkYKKyNkZWZpbmUgICBTXzAyODIzQ19PVVRQVVQ2X0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjQpCisjZGVmaW5lICAgR18wMjgyM0NfT1VUUFVUNl9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjQpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjNDX09VVFBVVDZfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RjBGRkZGRkYKKyNkZWZpbmUgICBTXzAyODIzQ19PVVRQVVQ3X0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RikgPDwgMjgpCisjZGVmaW5lICAgR18wMjgyM0NfT1VUUFVUN19FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjgpICYgMHhGKQorI2RlZmluZSAgIENfMDI4MjNDX09VVFBVVDdfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4MEZGRkZGRkYKKyNkZWZpbmUgUl8wMjhBQjBfVkdUX1NUUk1PVVRfRU4gICAgICAgICAgICAgICAgICAgICAgMHgwMjhBQjAKKyNkZWZpbmUgICBTXzAyOEFCMF9TVFJFQU1PVVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAyOEFCMF9TVFJFQU1PVVQoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAyOEFCMF9TVFJFQU1PVVQgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lIFJfMDI4QjIwX1ZHVF9TVFJNT1VUX0JVRkZFUl9FTiAgICAgICAgICAgICAgIDB4MDI4QjIwCisjZGVmaW5lICAgU18wMjhCMjBfQlVGRkVSXzBfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDApCisjZGVmaW5lICAgR18wMjhCMjBfQlVGRkVSXzBfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMjhCMjBfQlVGRkVSXzBfRU4gICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRQorI2RlZmluZSAgIFNfMDI4QjIwX0JVRkZFUl8xX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxKQorI2RlZmluZSAgIEdfMDI4QjIwX0JVRkZFUl8xX0VOKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEpICYgMHgxKQorI2RlZmluZSAgIENfMDI4QjIwX0JVRkZFUl8xX0VOICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkQKKyNkZWZpbmUgICBTXzAyOEIyMF9CVUZGRVJfMl9FTih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMikKKyNkZWZpbmUgICBHXzAyOEIyMF9CVUZGRVJfMl9FTih4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAyOEIyMF9CVUZGRVJfMl9FTiAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZCCisjZGVmaW5lICAgU18wMjhCMjBfQlVGRkVSXzNfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMjhCMjBfQlVGRkVSXzNfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMjhCMjBfQlVGRkVSXzNfRU4gICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDI4QjIwX1NJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAyOEIyMF9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMjhCMjBfU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAzODAwMF9TUV9URVhfUkVTT1VSQ0VfV09SRDBfMCAgICAgICAgICAgICAweDAzODAwMAorI2RlZmluZSAgIFNfMDM4MDAwX0RJTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAwKQorI2RlZmluZSAgIEdfMDM4MDAwX0RJTSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3KQorI2RlZmluZSAgIENfMDM4MDAwX0RJTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjgKKyNkZWZpbmUgICAgIFZfMDM4MDAwX1NRX1RFWF9ESU1fMUQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lICAgICBWXzAzODAwMF9TUV9URVhfRElNXzJEICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSAgICAgVl8wMzgwMDBfU1FfVEVYX0RJTV8zRCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgICAgIFZfMDM4MDAwX1NRX1RFWF9ESU1fQ1VCRU1BUCAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lICAgICBWXzAzODAwMF9TUV9URVhfRElNXzFEX0FSUkFZICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSAgICAgVl8wMzgwMDBfU1FfVEVYX0RJTV8yRF9BUlJBWSAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgICAgIFZfMDM4MDAwX1NRX1RFWF9ESU1fMkRfTVNBQSAgICAgICAgICAgICAgICAweDAwMDAwMDA2CisjZGVmaW5lICAgICBWXzAzODAwMF9TUV9URVhfRElNXzJEX0FSUkFZX01TQUEgICAgICAgICAgMHgwMDAwMDAwNworI2RlZmluZSAgIFNfMDM4MDAwX1RJTEVfTU9ERSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAzKQorI2RlZmluZSAgIEdfMDM4MDAwX1RJTEVfTU9ERSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDMpICYgMHhGKQorI2RlZmluZSAgIENfMDM4MDAwX1RJTEVfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGODcKKyNkZWZpbmUgICBTXzAzODAwMF9USUxFX1RZUEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgNykKKyNkZWZpbmUgICBHXzAzODAwMF9USUxFX1RZUEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA3KSAmIDB4MSkKKyNkZWZpbmUgICBDXzAzODAwMF9USUxFX1RZUEUgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjdGCisjZGVmaW5lICAgU18wMzgwMDBfUElUQ0goeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGRikgPDwgOCkKKyNkZWZpbmUgICBHXzAzODAwMF9QSVRDSCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA4KSAmIDB4N0ZGKQorI2RlZmluZSAgIENfMDM4MDAwX1BJVENIICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGODAwRkYKKyNkZWZpbmUgICBTXzAzODAwMF9URVhfV0lEVEgoeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MUZGRikgPDwgMTkpCisjZGVmaW5lICAgR18wMzgwMDBfVEVYX1dJRFRIKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTkpICYgMHgxRkZGKQorI2RlZmluZSAgIENfMDM4MDAwX1RFWF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwN0ZGRkYKKyNkZWZpbmUgUl8wMzgwMDRfU1FfVEVYX1JFU09VUkNFX1dPUkQxXzAgICAgICAgICAgICAgMHgwMzgwMDQKKyNkZWZpbmUgICBTXzAzODAwNF9URVhfSEVJR0hUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MUZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAzODAwNF9URVhfSEVJR0hUKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MUZGRikKKyNkZWZpbmUgICBDXzAzODAwNF9URVhfSEVJR0hUICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZFMDAwCisjZGVmaW5lICAgU18wMzgwMDRfVEVYX0RFUFRIKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDFGRkYpIDw8IDEzKQorI2RlZmluZSAgIEdfMDM4MDA0X1RFWF9ERVBUSCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4MUZGRikKKyNkZWZpbmUgICBDXzAzODAwNF9URVhfREVQVEggICAgICAgICAgICAgICAgICAgICAgICAgICAweEZDMDAxRkZGCisjZGVmaW5lICAgU18wMzgwMDRfREFUQV9GT1JNQVQoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDNGKSA8PCAyNikKKyNkZWZpbmUgICBHXzAzODAwNF9EQVRBX0ZPUk1BVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDNGKQorI2RlZmluZSAgIENfMDM4MDA0X0RBVEFfRk9STUFUICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDNGRkZGRkYKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SX0lOVkFMSUQgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl84ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfNF80ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzNfM18yICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl8xNiAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfMTZfRkxPQVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzhfOCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl81XzZfNSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfNl81XzUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzFfNV81XzUgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBBCisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl80XzRfNF80ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwQgorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfNV81XzVfMSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEMKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzMyICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBECisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl8zMl9GTE9BVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwRQorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfMTZfMTYgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzE2XzE2X0ZMT0FUICAgICAgICAgICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl84XzI0ICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMQorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfOF8yNF9GTE9BVCAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzI0XzggICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDEzCisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl8yNF84X0ZMT0FUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfMTBfMTFfMTEgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTUKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzEwXzExXzExX0ZMT0FUICAgICAgICAgICAgICAweDAwMDAwMDE2CisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl8xMV8xMV8xMCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNworI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfMTFfMTFfMTBfRkxPQVQgICAgICAgICAgICAgIDB4MDAwMDAwMTgKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzJfMTBfMTBfMTAgICAgICAgICAgICAgICAgICAweDAwMDAwMDE5CisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl84XzhfOF84ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxQQorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfMTBfMTBfMTBfMiAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUIKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SX1gyNF84XzMyX0ZMT0FUICAgICAgICAgICAgICAweDAwMDAwMDFDCisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl8zMl8zMiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxRAorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfMzJfMzJfRkxPQVQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMUUKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzE2XzE2XzE2XzE2ICAgICAgICAgICAgICAgICAweDAwMDAwMDFGCisjZGVmaW5lICAgICBWXzAzODAwNF9DT0xPUl8xNl8xNl8xNl8xNl9GTE9BVCAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSAgICAgVl8wMzgwMDRfQ09MT1JfMzJfMzJfMzJfMzIgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0NPTE9SXzMyXzMyXzMyXzMyX0ZMT0FUICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lICAgICBWXzAzODAwNF9GTVRfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyNQorI2RlZmluZSAgICAgVl8wMzgwMDRfRk1UX0dCX0dSICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMjcKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0ZNVF9CR19SRyAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDI4CisjZGVmaW5lICAgICBWXzAzODAwNF9GTVRfMzJfQVNfOCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyOQorI2RlZmluZSAgICAgVl8wMzgwMDRfRk1UXzMyX0FTXzhfOCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkEKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0ZNVF81XzlfOV85X1NIQVJFREVYUCAgICAgICAgICAgICAweDAwMDAwMDJCCisjZGVmaW5lICAgICBWXzAzODAwNF9GTVRfOF84XzggICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyQworI2RlZmluZSAgICAgVl8wMzgwMDRfRk1UXzE2XzE2XzE2ICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMkQKKyNkZWZpbmUgICAgIFZfMDM4MDA0X0ZNVF8xNl8xNl8xNl9GTE9BVCAgICAgICAgICAgICAgICAweDAwMDAwMDJFCisjZGVmaW5lICAgICBWXzAzODAwNF9GTVRfMzJfMzJfMzIgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAyRgorI2RlZmluZSAgICAgVl8wMzgwMDRfRk1UXzMyXzMyXzMyX0ZMT0FUICAgICAgICAgICAgICAgIDB4MDAwMDAwMzAKKyNkZWZpbmUgUl8wMzgwMTBfU1FfVEVYX1JFU09VUkNFX1dPUkQ0XzAgICAgICAgICAgICAgMHgwMzgwMTAKKyNkZWZpbmUgICBTXzAzODAxMF9GT1JNQVRfQ09NUF9YKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgMCkKKyNkZWZpbmUgICBHXzAzODAxMF9GT1JNQVRfQ09NUF9YKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MykKKyNkZWZpbmUgICBDXzAzODAxMF9GT1JNQVRfQ09NUF9YICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZDCisjZGVmaW5lICAgU18wMzgwMTBfRk9STUFUX0NPTVBfWSh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDIpCisjZGVmaW5lICAgR18wMzgwMTBfRk9STUFUX0NPTVBfWSh4KSAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMikgJiAweDMpCisjZGVmaW5lICAgQ18wMzgwMTBfRk9STUFUX0NPTVBfWSAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGMworI2RlZmluZSAgIFNfMDM4MDEwX0ZPUk1BVF9DT01QX1ooeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCA0KQorI2RlZmluZSAgIEdfMDM4MDEwX0ZPUk1BVF9DT01QX1ooeCkgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDQpICYgMHgzKQorI2RlZmluZSAgIENfMDM4MDEwX0ZPUk1BVF9DT01QX1ogICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGQ0YKKyNkZWZpbmUgICBTXzAzODAxMF9GT1JNQVRfQ09NUF9XKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MykgPDwgNikKKyNkZWZpbmUgICBHXzAzODAxMF9GT1JNQVRfQ09NUF9XKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA2KSAmIDB4MykKKyNkZWZpbmUgICBDXzAzODAxMF9GT1JNQVRfQ09NUF9XICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjNGCisjZGVmaW5lICAgU18wMzgwMTBfTlVNX0ZPUk1BVF9BTEwoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDMpIDw8IDgpCisjZGVmaW5lICAgR18wMzgwMTBfTlVNX0ZPUk1BVF9BTEwoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gOCkgJiAweDMpCisjZGVmaW5lICAgQ18wMzgwMTBfTlVNX0ZPUk1BVF9BTEwgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkNGRgorI2RlZmluZSAgIFNfMDM4MDEwX1NSRl9NT0RFX0FMTCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAzODAxMF9TUkZfTU9ERV9BTEwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweDEpCisjZGVmaW5lICAgQ18wMzgwMTBfU1JGX01PREVfQUxMICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkJGRgorI2RlZmluZSAgIFNfMDM4MDEwX0ZPUkNFX0RFR0FNTUEoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAxMSkKKyNkZWZpbmUgICBHXzAzODAxMF9GT1JDRV9ERUdBTU1BKHgpICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMzgwMTBfRk9SQ0VfREVHQU1NQSAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjdGRgorI2RlZmluZSAgIFNfMDM4MDEwX0VORElBTl9TV0FQKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAxMikKKyNkZWZpbmUgICBHXzAzODAxMF9FTkRJQU5fU1dBUCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMikgJiAweDMpCisjZGVmaW5lICAgQ18wMzgwMTBfRU5ESUFOX1NXQVAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGQ0ZGRgorI2RlZmluZSAgIFNfMDM4MDEwX1JFUVVFU1RfU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzKSA8PCAxNCkKKyNkZWZpbmUgICBHXzAzODAxMF9SRVFVRVNUX1NJWkUoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNCkgJiAweDMpCisjZGVmaW5lICAgQ18wMzgwMTBfUkVRVUVTVF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGM0ZGRgorI2RlZmluZSAgIFNfMDM4MDEwX0RTVF9TRUxfWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAxNikKKyNkZWZpbmUgICBHXzAzODAxMF9EU1RfU0VMX1goeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNikgJiAweDcpCisjZGVmaW5lICAgQ18wMzgwMTBfRFNUX1NFTF9YICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY4RkZGRgorI2RlZmluZSAgIFNfMDM4MDEwX0RTVF9TRUxfWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAxOSkKKyNkZWZpbmUgICBHXzAzODAxMF9EU1RfU0VMX1koeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxOSkgJiAweDcpCisjZGVmaW5lICAgQ18wMzgwMTBfRFNUX1NFTF9ZICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkM3RkZGRgorI2RlZmluZSAgIFNfMDM4MDEwX0RTVF9TRUxfWih4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAyMikKKyNkZWZpbmUgICBHXzAzODAxMF9EU1RfU0VMX1ooeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyMikgJiAweDcpCisjZGVmaW5lICAgQ18wMzgwMTBfRFNUX1NFTF9aICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRTNGRkZGRgorI2RlZmluZSAgIFNfMDM4MDEwX0RTVF9TRUxfVyh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCAyNSkKKyNkZWZpbmUgICBHXzAzODAxMF9EU1RfU0VMX1coeCkgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDcpCisjZGVmaW5lICAgQ18wMzgwMTBfRFNUX1NFTF9XICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGMUZGRkZGRgorI2RlZmluZSAgIFNfMDM4MDEwX0JBU0VfTEVWRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAyOCkKKyNkZWZpbmUgICBHXzAzODAxMF9CQVNFX0xFVkVMKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyOCkgJiAweEYpCisjZGVmaW5lICAgQ18wMzgwMTBfQkFTRV9MRVZFTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRkZGRkZGRgorI2RlZmluZSBSXzAzODAxNF9TUV9URVhfUkVTT1VSQ0VfV09SRDVfMCAgICAgICAgICAgICAweDAzODAxNAorI2RlZmluZSAgIFNfMDM4MDE0X0xBU1RfTEVWRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAwKQorI2RlZmluZSAgIEdfMDM4MDE0X0xBU1RfTEVWRUwoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGKQorI2RlZmluZSAgIENfMDM4MDE0X0xBU1RfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRjAKKyNkZWZpbmUgICBTXzAzODAxNF9CQVNFX0FSUkFZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MUZGRikgPDwgNCkKKyNkZWZpbmUgICBHXzAzODAxNF9CQVNFX0FSUkFZKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4MUZGRikKKyNkZWZpbmUgICBDXzAzODAxNF9CQVNFX0FSUkFZICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkUwMDBGCisjZGVmaW5lICAgU18wMzgwMTRfTEFTVF9BUlJBWSh4KSAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDFGRkYpIDw8IDE3KQorI2RlZmluZSAgIEdfMDM4MDE0X0xBU1RfQVJSQVkoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDE3KSAmIDB4MUZGRikKKyNkZWZpbmUgICBDXzAzODAxNF9MQVNUX0FSUkFZICAgICAgICAgICAgICAgICAgICAgICAgICAweEMwMDFGRkZGCisjZGVmaW5lIFJfMDI4OEE4X1NRX0VTR1NfUklOR19JVEVNU0laRSAgICAgICAgICAgICAgIDB4MDI4OEE4CisjZGVmaW5lICAgU18wMjg4QThfSVRFTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMjg4QThfSVRFTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGRkYpCisjZGVmaW5lICAgQ18wMjg4QThfSVRFTVNJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGODAwMAorI2RlZmluZSBSXzAwOEM0NF9TUV9FU0dTX1JJTkdfU0laRSAgICAgICAgICAgICAgICAgICAweDAwOEM0NAorI2RlZmluZSAgIFNfMDA4QzQ0X01FTV9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwOEM0NF9NRU1fU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDhDNDRfTUVNX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAyODhCMF9TUV9FU1RNUF9SSU5HX0lURU1TSVpFICAgICAgICAgICAgICAweDAyODhCMAorI2RlZmluZSAgIFNfMDI4OEIwX0lURU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3RkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDI4OEIwX0lURU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RkZGKQorI2RlZmluZSAgIENfMDI4OEIwX0lURU1TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjgwMDAKKyNkZWZpbmUgUl8wMDhDNTRfU1FfRVNUTVBfUklOR19TSVpFICAgICAgICAgICAgICAgICAgMHgwMDhDNTQKKyNkZWZpbmUgICBTXzAwOEM1NF9NRU1fU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDhDNTRfTUVNX1NJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDA4QzU0X01FTV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMjg4QzBfU1FfRkJVRl9SSU5HX0lURU1TSVpFICAgICAgICAgICAgICAgMHgwMjg4QzAKKyNkZWZpbmUgICBTXzAyODhDMF9JVEVNU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0ZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAyODhDMF9JVEVNU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0ZGRikKKyNkZWZpbmUgICBDXzAyODhDMF9JVEVNU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkY4MDAwCisjZGVmaW5lIFJfMDA4Qzc0X1NRX0ZCVUZfUklOR19TSVpFICAgICAgICAgICAgICAgICAgIDB4MDA4Qzc0CisjZGVmaW5lICAgU18wMDhDNzRfTUVNX1NJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA4Qzc0X01FTV9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwOEM3NF9NRU1fU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDI4OEI0X1NRX0dTVE1QX1JJTkdfSVRFTVNJWkUgICAgICAgICAgICAgIDB4MDI4OEI0CisjZGVmaW5lICAgU18wMjg4QjRfSVRFTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMjg4QjRfSVRFTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGRkYpCisjZGVmaW5lICAgQ18wMjg4QjRfSVRFTVNJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGODAwMAorI2RlZmluZSBSXzAwOEM1Q19TUV9HU1RNUF9SSU5HX1NJWkUgICAgICAgICAgICAgICAgICAweDAwOEM1QworI2RlZmluZSAgIFNfMDA4QzVDX01FTV9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwOEM1Q19NRU1fU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDhDNUNfTUVNX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAyODhBQ19TUV9HU1ZTX1JJTkdfSVRFTVNJWkUgICAgICAgICAgICAgICAweDAyODhBQworI2RlZmluZSAgIFNfMDI4OEFDX0lURU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3RkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDI4OEFDX0lURU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RkZGKQorI2RlZmluZSAgIENfMDI4OEFDX0lURU1TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjgwMDAKKyNkZWZpbmUgUl8wMDhDNENfU1FfR1NWU19SSU5HX1NJWkUgICAgICAgICAgICAgICAgICAgMHgwMDhDNEMKKyNkZWZpbmUgICBTXzAwOEM0Q19NRU1fU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDhDNENfTUVNX1NJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDA4QzRDX01FTV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMjg4QkNfU1FfUFNUTVBfUklOR19JVEVNU0laRSAgICAgICAgICAgICAgMHgwMjg4QkMKKyNkZWZpbmUgICBTXzAyODhCQ19JVEVNU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0ZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAyODhCQ19JVEVNU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0ZGRikKKyNkZWZpbmUgICBDXzAyODhCQ19JVEVNU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkY4MDAwCisjZGVmaW5lIFJfMDA4QzZDX1NRX1BTVE1QX1JJTkdfU0laRSAgICAgICAgICAgICAgICAgIDB4MDA4QzZDCisjZGVmaW5lICAgU18wMDhDNkNfTUVNX1NJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGRkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDA4QzZDX01FTV9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHhGRkZGRkZGRikKKyNkZWZpbmUgICBDXzAwOEM2Q19NRU1fU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIFJfMDI4OEM0X1NRX1JFRFVDX1JJTkdfSVRFTVNJWkUgICAgICAgICAgICAgIDB4MDI4OEM0CisjZGVmaW5lICAgU18wMjg4QzRfSVRFTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDdGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMjg4QzRfSVRFTVNJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDdGRkYpCisjZGVmaW5lICAgQ18wMjg4QzRfSVRFTVNJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGODAwMAorI2RlZmluZSBSXzAwOEM3Q19TUV9SRURVQ19SSU5HX1NJWkUgICAgICAgICAgICAgICAgICAweDAwOEM3QworI2RlZmluZSAgIFNfMDA4QzdDX01FTV9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGRkZGRkZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAwOEM3Q19NRU1fU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4RkZGRkZGRkYpCisjZGVmaW5lICAgQ18wMDhDN0NfTUVNX1NJWkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMAorI2RlZmluZSBSXzAyODhCOF9TUV9WU1RNUF9SSU5HX0lURU1TSVpFICAgICAgICAgICAgICAweDAyODhCOAorI2RlZmluZSAgIFNfMDI4OEI4X0lURU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3RkZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDI4OEI4X0lURU1TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RkZGKQorI2RlZmluZSAgIENfMDI4OEI4X0lURU1TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRjgwMDAKKyNkZWZpbmUgUl8wMDhDNjRfU1FfVlNUTVBfUklOR19TSVpFICAgICAgICAgICAgICAgICAgMHgwMDhDNjQKKyNkZWZpbmUgICBTXzAwOEM2NF9NRU1fU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4RkZGRkZGRkYpIDw8IDApCisjZGVmaW5lICAgR18wMDhDNjRfTUVNX1NJWkUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweEZGRkZGRkZGKQorI2RlZmluZSAgIENfMDA4QzY0X01FTV9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgUl8wMjg4QzhfU1FfR1NfVkVSVF9JVEVNU0laRSAgICAgICAgICAgICAgICAgMHgwMjg4QzgKKyNkZWZpbmUgICBTXzAyODhDOF9JVEVNU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0ZGRikgPDwgMCkKKyNkZWZpbmUgICBHXzAyODhDOF9JVEVNU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4N0ZGRikKKyNkZWZpbmUgICBDXzAyODhDOF9JVEVNU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkY4MDAwCisjZGVmaW5lIFJfMDI4MDEwX0RCX0RFUFRIX0lORk8gICAgICAgICAgICAgICAgICAgICAgIDB4MDI4MDEwCisjZGVmaW5lICAgU18wMjgwMTBfRk9STUFUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDcpIDw8IDApCisjZGVmaW5lICAgR18wMjgwMTBfRk9STUFUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDcpCisjZGVmaW5lICAgQ18wMjgwMTBfRk9STUFUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGOAorI2RlZmluZSAgICAgVl8wMjgwMTBfREVQVEhfSU5WQUxJRCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDAKKyNkZWZpbmUgICAgIFZfMDI4MDEwX0RFUFRIXzE2ICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lICAgICBWXzAyODAxMF9ERVBUSF9YOF8yNCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSAgICAgVl8wMjgwMTBfREVQVEhfOF8yNCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgICAgIFZfMDI4MDEwX0RFUFRIX1g4XzI0X0ZMT0FUICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lICAgICBWXzAyODAxMF9ERVBUSF84XzI0X0ZMT0FUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQorI2RlZmluZSAgICAgVl8wMjgwMTBfREVQVEhfMzJfRkxPQVQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgICAgIFZfMDI4MDEwX0RFUFRIX1gyNF84XzMyX0ZMT0FUICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lICAgU18wMjgwMTBfUkVBRF9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDMpCisjZGVmaW5lICAgR18wMjgwMTBfUkVBRF9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMykgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwMTBfUkVBRF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGNworI2RlZmluZSAgIFNfMDI4MDEwX0FSUkFZX01PREUoeCkgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHhGKSA8PCAxNSkKKyNkZWZpbmUgICBHXzAyODAxMF9BUlJBWV9NT0RFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxNSkgJiAweEYpCisjZGVmaW5lICAgQ18wMjgwMTBfQVJSQVlfTU9ERSAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkY4N0ZGRgorI2RlZmluZSAgIFNfMDI4MDEwX1RJTEVfU1VSRkFDRV9FTkFCTEUoeCkgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNSkKKyNkZWZpbmUgICBHXzAyODAxMF9USUxFX1NVUkZBQ0VfRU5BQkxFKHgpICAgICAgICAgICAgICAoKCh4KSA+PiAyNSkgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwMTBfVElMRV9TVVJGQUNFX0VOQUJMRSAgICAgICAgICAgICAgICAgMHhGREZGRkZGRgorI2RlZmluZSAgIFNfMDI4MDEwX1RJTEVfQ09NUEFDVCh4KSAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyNikKKyNkZWZpbmUgICBHXzAyODAxMF9USUxFX0NPTVBBQ1QoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAyNikgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwMTBfVElMRV9DT01QQUNUICAgICAgICAgICAgICAgICAgICAgICAgMHhGQkZGRkZGRgorI2RlZmluZSAgIFNfMDI4MDEwX1pSQU5HRV9QUkVDSVNJT04oeCkgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAzMSkKKyNkZWZpbmUgICBHXzAyODAxMF9aUkFOR0VfUFJFQ0lTSU9OKHgpICAgICAgICAgICAgICAgICAoKCh4KSA+PiAzMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMjgwMTBfWlJBTkdFX1BSRUNJU0lPTiAgICAgICAgICAgICAgICAgICAgMHg3RkZGRkZGRgorI2RlZmluZSBSXzAyODAwMF9EQl9ERVBUSF9TSVpFICAgICAgICAgICAgICAgICAgICAgICAweDAyODAwMAorI2RlZmluZSAgIFNfMDI4MDAwX1BJVENIX1RJTEVfTUFYKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgzRkYpIDw8IDApCisjZGVmaW5lICAgR18wMjgwMDBfUElUQ0hfVElMRV9NQVgoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMCkgJiAweDNGRikKKyNkZWZpbmUgICBDXzAyODAwMF9QSVRDSF9USUxFX01BWCAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGQzAwCisjZGVmaW5lICAgU18wMjgwMDBfU0xJQ0VfVElMRV9NQVgoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweEZGRkZGKSA8PCAxMCkKKyNkZWZpbmUgICBHXzAyODAwMF9TTElDRV9USUxFX01BWCh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAxMCkgJiAweEZGRkZGKQorI2RlZmluZSAgIENfMDI4MDAwX1NMSUNFX1RJTEVfTUFYICAgICAgICAgICAgICAgICAgICAgIDB4QzAwMDAzRkYKKyNkZWZpbmUgUl8wMjgwMDRfREJfREVQVEhfVklFVyAgICAgICAgICAgICAgICAgICAgICAgMHgwMjgwMDQKKyNkZWZpbmUgICBTXzAyODAwNF9TTElDRV9TVEFSVCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4N0ZGKSA8PCAwKQorI2RlZmluZSAgIEdfMDI4MDA0X1NMSUNFX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDApICYgMHg3RkYpCisjZGVmaW5lICAgQ18wMjgwMDRfU0xJQ0VfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRjgwMAorI2RlZmluZSAgIFNfMDI4MDA0X1NMSUNFX01BWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3RkYpIDw8IDEzKQorI2RlZmluZSAgIEdfMDI4MDA0X1NMSUNFX01BWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDEzKSAmIDB4N0ZGKQorI2RlZmluZSAgIENfMDI4MDA0X1NMSUNFX01BWCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkYwMDFGRkYKKyNkZWZpbmUgUl8wMjg4MDBfREJfREVQVEhfQ09OVFJPTCAgICAgICAgICAgICAgICAgICAgMHgwMjg4MDAKKyNkZWZpbmUgICBTXzAyODgwMF9TVEVOQ0lMX0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4MSkgPDwgMCkKKyNkZWZpbmUgICBHXzAyODgwMF9TVEVOQ0lMX0VOQUJMRSh4KSAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiAwKSAmIDB4MSkKKyNkZWZpbmUgICBDXzAyODgwMF9TVEVOQ0lMX0VOQUJMRSAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRkZFCisjZGVmaW5lICAgU18wMjg4MDBfWl9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDEpCisjZGVmaW5lICAgR18wMjg4MDBfWl9FTkFCTEUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMSkgJiAweDEpCisjZGVmaW5lICAgQ18wMjg4MDBfWl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkZGRAorI2RlZmluZSAgIFNfMDI4ODAwX1pfV1JJVEVfRU5BQkxFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHgxKSA8PCAyKQorI2RlZmluZSAgIEdfMDI4ODAwX1pfV1JJVEVfRU5BQkxFKHgpICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDIpICYgMHgxKQorI2RlZmluZSAgIENfMDI4ODAwX1pfV1JJVEVfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkZGRkIKKyNkZWZpbmUgICBTXzAyODgwMF9aRlVOQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgNCkKKyNkZWZpbmUgICBHXzAyODgwMF9aRlVOQyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCh4KSA+PiA0KSAmIDB4NykKKyNkZWZpbmUgICBDXzAyODgwMF9aRlVOQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweEZGRkZGRjhGCisjZGVmaW5lICAgU18wMjg4MDBfQkFDS0ZBQ0VfRU5BQkxFKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgJiAweDEpIDw8IDcpCisjZGVmaW5lICAgR18wMjg4MDBfQkFDS0ZBQ0VfRU5BQkxFKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gNykgJiAweDEpCisjZGVmaW5lICAgQ18wMjg4MDBfQkFDS0ZBQ0VfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgMHhGRkZGRkY3RgorI2RlZmluZSAgIFNfMDI4ODAwX1NURU5DSUxGVU5DKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpICYgMHg3KSA8PCA4KQorI2RlZmluZSAgIEdfMDI4ODAwX1NURU5DSUxGVU5DKHgpICAgICAgICAgICAgICAgICAgICAgICgoKHgpID4+IDgpICYgMHg3KQorI2RlZmluZSAgIENfMDI4ODAwX1NURU5DSUxGVU5DICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkY4RkYKKyNkZWZpbmUgICBTXzAyODgwMF9TVEVOQ0lMRkFJTCh4KSAgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMTEpCisjZGVmaW5lICAgR18wMjg4MDBfU1RFTkNJTEZBSUwoeCkgICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTEpICYgMHg3KQorI2RlZmluZSAgIENfMDI4ODAwX1NURU5DSUxGQUlMICAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRkM3RkYKKyNkZWZpbmUgICBTXzAyODgwMF9TVEVOQ0lMWlBBU1MoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMTQpCisjZGVmaW5lICAgR18wMjg4MDBfU1RFTkNJTFpQQVNTKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTQpICYgMHg3KQorI2RlZmluZSAgIENfMDI4ODAwX1NURU5DSUxaUEFTUyAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRTNGRkYKKyNkZWZpbmUgICBTXzAyODgwMF9TVEVOQ0lMWkZBSUwoeCkgICAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMTcpCisjZGVmaW5lICAgR18wMjg4MDBfU1RFTkNJTFpGQUlMKHgpICAgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMTcpICYgMHg3KQorI2RlZmluZSAgIENfMDI4ODAwX1NURU5DSUxaRkFJTCAgICAgICAgICAgICAgICAgICAgICAgIDB4RkZGMUZGRkYKKyNkZWZpbmUgICBTXzAyODgwMF9TVEVOQ0lMRlVOQ19CRih4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMjApCisjZGVmaW5lICAgR18wMjg4MDBfU1RFTkNJTEZVTkNfQkYoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjApICYgMHg3KQorI2RlZmluZSAgIENfMDI4ODAwX1NURU5DSUxGVU5DX0JGICAgICAgICAgICAgICAgICAgICAgIDB4RkY4RkZGRkYKKyNkZWZpbmUgICBTXzAyODgwMF9TVEVOQ0lMRkFJTF9CRih4KSAgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMjMpCisjZGVmaW5lICAgR18wMjg4MDBfU1RFTkNJTEZBSUxfQkYoeCkgICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjMpICYgMHg3KQorI2RlZmluZSAgIENfMDI4ODAwX1NURU5DSUxGQUlMX0JGICAgICAgICAgICAgICAgICAgICAgIDB4RkM3RkZGRkYKKyNkZWZpbmUgICBTXzAyODgwMF9TVEVOQ0lMWlBBU1NfQkYoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMjYpCisjZGVmaW5lICAgR18wMjg4MDBfU1RFTkNJTFpQQVNTX0JGKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjYpICYgMHg3KQorI2RlZmluZSAgIENfMDI4ODAwX1NURU5DSUxaUEFTU19CRiAgICAgICAgICAgICAgICAgICAgIDB4RTNGRkZGRkYKKyNkZWZpbmUgICBTXzAyODgwMF9TVEVOQ0lMWkZBSUxfQkYoeCkgICAgICAgICAgICAgICAgICAoKCh4KSAmIDB4NykgPDwgMjkpCisjZGVmaW5lICAgR18wMjg4MDBfU1RFTkNJTFpGQUlMX0JGKHgpICAgICAgICAgICAgICAgICAgKCgoeCkgPj4gMjkpICYgMHg3KQorI2RlZmluZSAgIENfMDI4ODAwX1NURU5DSUxaRkFJTF9CRiAgICAgICAgICAgICAgICAgICAgIDB4MUZGRkZGRkYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAppbmRleCBjMDM1NmJiMS4uODI5ZTI2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb24uaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbi5oCkBAIC04OSw2ICs4OSw3IEBACiBleHRlcm4gaW50IHJhZGVvbl9jb25uZWN0b3JfdGFibGU7CiBleHRlcm4gaW50IHJhZGVvbl90djsKIGV4dGVybiBpbnQgcmFkZW9uX25ld19wbGw7CitleHRlcm4gaW50IHJhZGVvbl9keW5wbTsKIGV4dGVybiBpbnQgcmFkZW9uX2F1ZGlvOwogCiAvKgpAQCAtMTE4LDYgKzExOSwyMSBAQAogLyoKICAqIEJJT1MuCiAgKi8KKyNkZWZpbmUgQVRSTV9CSU9TX1BBR0UgNDA5NgorCisjaWYgZGVmaW5lZChDT05GSUdfVkdBX1NXSVRDSEVST08pCitib29sIHJhZGVvbl9hdHJtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldik7CitpbnQgcmFkZW9uX2F0cm1fZ2V0X2Jpb3NfY2h1bmsodWludDhfdCAqYmlvcywgaW50IG9mZnNldCwgaW50IGxlbik7CisjZWxzZQorc3RhdGljIGlubGluZSBib29sIHJhZGVvbl9hdHJtX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJhZGVvbl9hdHJtX2dldF9iaW9zX2NodW5rKHVpbnQ4X3QgKmJpb3MsIGludCBvZmZzZXQsIGludCBsZW4peworCXJldHVybiAtRUlOVkFMOworfQorI2VuZGlmCiBib29sIHJhZGVvbl9nZXRfYmlvcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIApAQCAtMTM4LDE3ICsxNTQsMjMgQEAKIHN0cnVjdCByYWRlb25fY2xvY2sgewogCXN0cnVjdCByYWRlb25fcGxsIHAxcGxsOwogCXN0cnVjdCByYWRlb25fcGxsIHAycGxsOworCXN0cnVjdCByYWRlb25fcGxsIGRjcGxsOwogCXN0cnVjdCByYWRlb25fcGxsIHNwbGw7CiAJc3RydWN0IHJhZGVvbl9wbGwgbXBsbDsKIAkvKiAxMCBLaHogdW5pdHMgKi8KIAl1aW50MzJfdCBkZWZhdWx0X21jbGs7CiAJdWludDMyX3QgZGVmYXVsdF9zY2xrOworCXVpbnQzMl90IGRlZmF1bHRfZGlzcGNsazsKKwl1aW50MzJfdCBkcF9leHRjbGs7CiB9OwogCiAvKgogICogUG93ZXIgbWFuYWdlbWVudAogICovCiBpbnQgcmFkZW9uX3BtX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCByYWRlb25fcG1fY29tcHV0ZV9jbG9ja3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCByYWRlb25fY29tYmlvc19nZXRfcG93ZXJfbW9kZXMoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwordm9pZCByYWRlb25fYXRvbWJpb3NfZ2V0X3Bvd2VyX21vZGVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIAogLyoKICAqIEZlbmNlcy4KQEAgLTI3NSw2ICsyOTcsNyBAQAogfTsKIAogI2RlZmluZSBSQURFT05fR1BVX1BBR0VfU0laRSA0MDk2CisjZGVmaW5lIFJBREVPTl9HUFVfUEFHRV9NQVNLIChSQURFT05fR1BVX1BBR0VfU0laRSAtIDEpCiAKIHN0cnVjdCByYWRlb25fZ2FydCB7CiAJZG1hX2FkZHJfdAkJCXRhYmxlX2FkZHI7CkBAIC0zMDksMjEgKzMzMiwxOSBAQAogCS8qIGZvciBzb21lIGNoaXBzIHdpdGggPD0gMzJNQiB3ZSBuZWVkIHRvIGxpZQogCSAqIGFib3V0IHZyYW0gc2l6ZSBuZWFyIG1jIGZiIGxvY2F0aW9uICovCiAJdTY0CQkJbWNfdnJhbV9zaXplOwotCXU2NAkJCWd0dF9sb2NhdGlvbjsKKwl1NjQJCQl2aXNpYmxlX3ZyYW1fc2l6ZTsKIAl1NjQJCQlndHRfc2l6ZTsKIAl1NjQJCQlndHRfc3RhcnQ7CiAJdTY0CQkJZ3R0X2VuZDsKLQl1NjQJCQl2cmFtX2xvY2F0aW9uOwogCXU2NAkJCXZyYW1fc3RhcnQ7CiAJdTY0CQkJdnJhbV9lbmQ7CiAJdW5zaWduZWQJCXZyYW1fd2lkdGg7CiAJdTY0CQkJcmVhbF92cmFtX3NpemU7CiAJaW50CQkJdnJhbV9tdHJyOwogCWJvb2wJCQl2cmFtX2lzX2RkcjsKLQlib29sICAgICAgICAgICAgICAgICAgICBpZ3Bfc2lkZXBvcnRfZW5hYmxlZDsKKwlib29sCQkJaWdwX3NpZGVwb3J0X2VuYWJsZWQ7CiB9OwogCi1pbnQgcmFkZW9uX21jX3NldHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGJvb2wgcmFkZW9uX2NvbWJpb3Nfc2lkZXBvcnRfcHJlc2VudChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBib29sIHJhZGVvbl9hdG9tYmlvc19zaWRlcG9ydF9wcmVzZW50KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIApAQCAtMzQ4LDYgKzM2OSw3IEBACiAJYm9vbAkJc3dfaW50OwogCS8qIEZJWE1FOiB1c2UgYSBkZWZpbmUgbWF4IGNydGMgcmF0aGVyIHRoYW4gaGFyZGNvZGUgaXQgKi8KIAlib29sCQljcnRjX3ZibGFua19pbnRbMl07CisJd2FpdF9xdWV1ZV9oZWFkX3QJdmJsYW5rX3F1ZXVlOwogCS8qIEZJWE1FOiB1c2UgZGVmaW5lcyBmb3IgbWF4IGhwZC9kYWNzICovCiAJYm9vbCAgICAgICAgICAgIGhwZFs2XTsKIAlzcGlubG9ja190IHN3X2xvY2s7CkBAIC0zNzksNiArNDAxLDcgQEAKIHN0cnVjdCByYWRlb25faWJfcG9vbCB7CiAJc3RydWN0IG11dGV4CQltdXRleDsKIAlzdHJ1Y3QgcmFkZW9uX2JvCSpyb2JqOworCXN0cnVjdCBsaXN0X2hlYWQJYm9ndXNfaWI7CiAJc3RydWN0IHJhZGVvbl9pYglpYnNbUkFERU9OX0lCX1BPT0xfU0laRV07CiAJYm9vbAkJCXJlYWR5OwogCXVuc2lnbmVkCQloZWFkX2lkOwpAQCAtNDMzLDYgKzQ1Niw3IEBACiBpbnQgcmFkZW9uX2liX3Bvb2xfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiB2b2lkIHJhZGVvbl9pYl9wb29sX2Zpbmkoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJhZGVvbl9pYl90ZXN0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2V4dGVybiB2b2lkIHJhZGVvbl9pYl9ib2d1c19hZGQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25faWIgKmliKTsKIC8qIFJpbmcgYWNjZXNzIGJldHdlZW4gYmVnaW4gJiBlbmQgY2Fubm90IHNsZWVwICovCiB2b2lkIHJhZGVvbl9yaW5nX2ZyZWVfc2l6ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBpbnQgcmFkZW9uX3JpbmdfbG9jayhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdW5zaWduZWQgbmR3KTsKQEAgLTU3MCw3ICs1OTQsOTkgQEAKICAqIEVxdWF0aW9uIGJldHdlZW4gZ3B1L21lbW9yeSBjbG9jayBhbmQgYXZhaWxhYmxlIGJhbmR3aWR0aCBpcyBodyBkZXBlbmRlbnQKICAqICh0eXBlIG9mIG1lbW9yeSwgYnVzIHNpemUsIGVmZmljaWVuY3ksIC4uLikKICAqLworZW51bSByYWRlb25fcG1fc3RhdGUgeworCVBNX1NUQVRFX0RJU0FCTEVELAorCVBNX1NUQVRFX01JTklNVU0sCisJUE1fU1RBVEVfUEFVU0VELAorCVBNX1NUQVRFX0FDVElWRQorfTsKK2VudW0gcmFkZW9uX3BtX2FjdGlvbiB7CisJUE1fQUNUSU9OX05PTkUsCisJUE1fQUNUSU9OX01JTklNVU0sCisJUE1fQUNUSU9OX0RPV05DTE9DSywKKwlQTV9BQ1RJT05fVVBDTE9DSworfTsKKworZW51bSByYWRlb25fdm9sdGFnZV90eXBlIHsKKwlWT0xUQUdFX05PTkUgPSAwLAorCVZPTFRBR0VfR1BJTywKKwlWT0xUQUdFX1ZEREMsCisJVk9MVEFHRV9TVworfTsKKworZW51bSByYWRlb25fcG1fc3RhdGVfdHlwZSB7CisJUE9XRVJfU1RBVEVfVFlQRV9ERUZBVUxULAorCVBPV0VSX1NUQVRFX1RZUEVfUE9XRVJTQVZFLAorCVBPV0VSX1NUQVRFX1RZUEVfQkFUVEVSWSwKKwlQT1dFUl9TVEFURV9UWVBFX0JBTEFOQ0VELAorCVBPV0VSX1NUQVRFX1RZUEVfUEVSRk9STUFOQ0UsCit9OworCitlbnVtIHJhZGVvbl9wbV9jbG9ja19tb2RlX3R5cGUgeworCVBPV0VSX01PREVfVFlQRV9ERUZBVUxULAorCVBPV0VSX01PREVfVFlQRV9MT1csCisJUE9XRVJfTU9ERV9UWVBFX01JRCwKKwlQT1dFUl9NT0RFX1RZUEVfSElHSCwKK307CisKK3N0cnVjdCByYWRlb25fdm9sdGFnZSB7CisJZW51bSByYWRlb25fdm9sdGFnZV90eXBlIHR5cGU7CisJLyogZ3BpbyB2b2x0YWdlICovCisJc3RydWN0IHJhZGVvbl9ncGlvX3JlYyBncGlvOworCXUzMiBkZWxheTsgLyogZGVsYXkgaW4gdXNlYyBmcm9tIHZvbHRhZ2UgZHJvcCB0byBzY2xrIGNoYW5nZSAqLworCWJvb2wgYWN0aXZlX2hpZ2g7IC8qIHZvbHRhZ2UgZHJvcCBpcyBhY3RpdmUgd2hlbiBiaXQgaXMgaGlnaCAqLworCS8qIFZEREMgdm9sdGFnZSAqLworCXU4IHZkZGNfaWQ7IC8qIGluZGV4IGludG8gdmRkYyB2b2x0YWdlIHRhYmxlICovCisJdTggdmRkY2lfaWQ7IC8qIGluZGV4IGludG8gdmRkY2kgdm9sdGFnZSB0YWJsZSAqLworCWJvb2wgdmRkY2lfZW5hYmxlZDsKKwkvKiByNnh4KyBzdyAqLworCXUzMiB2b2x0YWdlOworfTsKKworc3RydWN0IHJhZGVvbl9wbV9ub25fY2xvY2tfaW5mbyB7CisJLyogcGNpZSBsYW5lcyAqLworCWludCBwY2llX2xhbmVzOworCS8qIHN0YW5kYXJkaXplZCBub24tY2xvY2sgZmxhZ3MgKi8KKwl1MzIgZmxhZ3M7Cit9OworCitzdHJ1Y3QgcmFkZW9uX3BtX2Nsb2NrX2luZm8geworCS8qIG1lbW9yeSBjbG9jayAqLworCXUzMiBtY2xrOworCS8qIGVuZ2luZSBjbG9jayAqLworCXUzMiBzY2xrOworCS8qIHZvbHRhZ2UgaW5mbyAqLworCXN0cnVjdCByYWRlb25fdm9sdGFnZSB2b2x0YWdlOworCS8qIHN0YW5kYXJkaXplZCBjbG9jayBmbGFncyAtIG5vdCBzdXJlIHdlJ2xsIG5lZWQgdGhlc2UgKi8KKwl1MzIgZmxhZ3M7Cit9OworCitzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlIHsKKwllbnVtIHJhZGVvbl9wbV9zdGF0ZV90eXBlIHR5cGU7CisJLyogWFhYOiB1c2UgYSBkZWZpbmUgZm9yIG51bSBjbG9jayBtb2RlcyAqLworCXN0cnVjdCByYWRlb25fcG1fY2xvY2tfaW5mbyBjbG9ja19pbmZvWzhdOworCS8qIG51bWJlciBvZiB2YWxpZCBjbG9jayBtb2RlcyBpbiB0aGlzIHBvd2VyIHN0YXRlICovCisJaW50IG51bV9jbG9ja19tb2RlczsKKwlzdHJ1Y3QgcmFkZW9uX3BtX2Nsb2NrX2luZm8gKmRlZmF1bHRfY2xvY2tfbW9kZTsKKwkvKiBub24gY2xvY2sgaW5mbyBhYm91dCB0aGlzIHN0YXRlICovCisJc3RydWN0IHJhZGVvbl9wbV9ub25fY2xvY2tfaW5mbyBub25fY2xvY2tfaW5mbzsKKwlib29sIHZvbHRhZ2VfZHJvcF9hY3RpdmU7Cit9OworCisvKgorICogU29tZSBtb2RlcyBhcmUgb3ZlcmNsb2NrZWQgYnkgdmVyeSBsb3cgdmFsdWUsIGFjY2VwdCB0aGVtCisgKi8KKyNkZWZpbmUgUkFERU9OX01PREVfT1ZFUkNMT0NLX01BUkdJTiA1MDAgLyogNSBNSHogKi8KKwogc3RydWN0IHJhZGVvbl9wbSB7CisJc3RydWN0IG11dGV4CQltdXRleDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrCWlkbGVfd29yazsKKwllbnVtIHJhZGVvbl9wbV9zdGF0ZQlzdGF0ZTsKKwllbnVtIHJhZGVvbl9wbV9hY3Rpb24JcGxhbm5lZF9hY3Rpb247CisJdW5zaWduZWQgbG9uZwkJYWN0aW9uX3RpbWVvdXQ7CisJYm9vbCAJCQlkb3duY2xvY2tlZDsKKwlpbnQJCQlhY3RpdmVfY3J0Y3M7CisJaW50CQkJcmVxX3ZibGFuazsKIAlmaXhlZDIwXzEyCQltYXhfYmFuZHdpZHRoOwogCWZpeGVkMjBfMTIJCWlncF9zaWRlcG9ydF9tY2xrOwogCWZpeGVkMjBfMTIJCWlncF9zeXN0ZW1fbWNsazsKQEAgLTU4Miw2ICs2OTgsMTUgQEAKIAlmaXhlZDIwXzEyCQljb3JlX2JhbmR3aWR0aDsKIAlmaXhlZDIwXzEyCQlzY2xrOwogCWZpeGVkMjBfMTIJCW5lZWRlZF9iYW5kd2lkdGg7CisJLyogWFhYOiB1c2UgYSBkZWZpbmUgZm9yIG51bSBwb3dlciBtb2RlcyAqLworCXN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUgcG93ZXJfc3RhdGVbOF07CisJLyogbnVtYmVyIG9mIHZhbGlkIHBvd2VyIHN0YXRlcyAqLworCWludCAgICAgICAgICAgICAgICAgICAgIG51bV9wb3dlcl9zdGF0ZXM7CisJc3RydWN0IHJhZGVvbl9wb3dlcl9zdGF0ZSAqY3VycmVudF9wb3dlcl9zdGF0ZTsKKwlzdHJ1Y3QgcmFkZW9uX3BtX2Nsb2NrX2luZm8gKmN1cnJlbnRfY2xvY2tfbW9kZTsKKwlzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlICpyZXF1ZXN0ZWRfcG93ZXJfc3RhdGU7CisJc3RydWN0IHJhZGVvbl9wbV9jbG9ja19pbmZvICpyZXF1ZXN0ZWRfY2xvY2tfbW9kZTsKKwlzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlICpkZWZhdWx0X3Bvd2VyX3N0YXRlOwogfTsKIAogCkBAIC02NTEsNiArNzc2LDcgQEAKIAl2b2lkICgqc2V0X2VuZ2luZV9jbG9jaykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVpbnQzMl90IGVuZ19jbG9jayk7CiAJdWludDMyX3QgKCpnZXRfbWVtb3J5X2Nsb2NrKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKnNldF9tZW1vcnlfY2xvY2spKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCBtZW1fY2xvY2spOworCWludCAoKmdldF9wY2llX2xhbmVzKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAJdm9pZCAoKnNldF9wY2llX2xhbmVzKShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGxhbmVzKTsKIAl2b2lkICgqc2V0X2Nsb2NrX2dhdGluZykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBlbmFibGUpOwogCWludCAoKnNldF9zdXJmYWNlX3JlZykoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCByZWcsCkBAIC03MDEsNiArODI3LDkgQEAKIAl1bnNpZ25lZCBzeF9tYXhfZXhwb3J0X3Bvc19zaXplOwogCXVuc2lnbmVkIHN4X21heF9leHBvcnRfc214X3NpemU7CiAJdW5zaWduZWQgc3FfbnVtX2NmX2luc3RzOworCXVuc2lnbmVkIHRpbGluZ19uYmFua3M7CisJdW5zaWduZWQgdGlsaW5nX25waXBlczsKKwl1bnNpZ25lZCB0aWxpbmdfZ3JvdXBfc2l6ZTsKIH07CiAKIHN0cnVjdCBydjc3MF9hc2ljIHsKQEAgLTcyMSw2ICs4NTAsOSBAQAogCXVuc2lnbmVkIHNjX3ByaW1fZmlmb19zaXplOwogCXVuc2lnbmVkIHNjX2hpel90aWxlX2ZpZm9fc2l6ZTsKIAl1bnNpZ25lZCBzY19lYXJseXpfdGlsZV9maWZvX2ZpemU7CisJdW5zaWduZWQgdGlsaW5nX25iYW5rczsKKwl1bnNpZ25lZCB0aWxpbmdfbnBpcGVzOworCXVuc2lnbmVkIHRpbGluZ19ncm91cF9zaXplOwogfTsKIAogdW5pb24gcmFkZW9uX2FzaWNfY29uZmlnIHsKQEAgLTgzMCw2ICs5NjIsOCBAQAogCXN0cnVjdCByNjAwX2loIGloOyAvKiByNi83MDAgaW50ZXJydXB0IHJpbmcgKi8KIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CiAJc3RydWN0IHdvcmtfc3RydWN0IGhvdHBsdWdfd29yazsKKwlpbnQgbnVtX2NydGM7IC8qIG51bWJlciBvZiBjcnRjcyAqLworCXN0cnVjdCBtdXRleCBkY19od19pMmNfbXV0ZXg7IC8qIGRpc3BsYXkgY29udHJvbGxlciBodyBpMmMgbXV0ZXggKi8KIAogCS8qIGF1ZGlvIHN0dWZmICovCiAJc3RydWN0IHRpbWVyX2xpc3QJYXVkaW9fdGltZXI7CkBAIC04MzgsNiArOTcyLDggQEAKIAlpbnQJCQlhdWRpb19iaXRzX3Blcl9zYW1wbGU7CiAJdWludDhfdAkJCWF1ZGlvX3N0YXR1c19iaXRzOwogCXVpbnQ4X3QJCQlhdWRpb19jYXRlZ29yeV9jb2RlOworCisJYm9vbCBwb3dlcmVkX2Rvd247CiB9OwogCiBpbnQgcmFkZW9uX2RldmljZV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LApAQCAtODk1LDYgKzEwMzEsOCBAQAogI2RlZmluZSBXUkVHMzJfTUMocmVnLCB2KSByZGV2LT5tY193cmVnKHJkZXYsIChyZWcpLCAodikpCiAjZGVmaW5lIFJSRUczMl9QQ0lFKHJlZykgcnYzNzBfcGNpZV9ycmVnKHJkZXYsIChyZWcpKQogI2RlZmluZSBXUkVHMzJfUENJRShyZWcsIHYpIHJ2MzcwX3BjaWVfd3JlZyhyZGV2LCAocmVnKSwgKHYpKQorI2RlZmluZSBSUkVHMzJfUENJRV9QKHJlZykgcmRldi0+cGNpZXBfcnJlZyhyZGV2LCAocmVnKSkKKyNkZWZpbmUgV1JFRzMyX1BDSUVfUChyZWcsIHYpIHJkZXYtPnBjaWVwX3dyZWcocmRldiwgKHJlZyksICh2KSkKICNkZWZpbmUgV1JFRzMyX1AocmVnLCB2YWwsIG1hc2spCQkJCVwKIAlkbyB7CQkJCQkJCVwKIAkJdWludDMyX3QgdG1wXyA9IFJSRUczMihyZWcpOwkJCVwKQEAgLTk1Niw3ICsxMDk0LDcgQEAKICNkZWZpbmUgQVNJQ19JU19BVklWTyhyZGV2KSAoKHJkZXYtPmZhbWlseSA+PSBDSElQX1JTNjAwKSkKICNkZWZpbmUgQVNJQ19JU19EQ0UzKHJkZXYpICgocmRldi0+ZmFtaWx5ID49IENISVBfUlY2MjApKQogI2RlZmluZSBBU0lDX0lTX0RDRTMyKHJkZXYpICgocmRldi0+ZmFtaWx5ID49IENISVBfUlY3MzApKQotCisjZGVmaW5lIEFTSUNfSVNfRENFNChyZGV2KSAoKHJkZXYtPmZhbWlseSA+PSBDSElQX0NFREFSKSkKIAogLyoKICAqIEJJT1MgaGVscGVycy4KQEAgLTEwMTUsNiArMTE1Myw3IEBACiAjZGVmaW5lIHJhZGVvbl9zZXRfZW5naW5lX2Nsb2NrKHJkZXYsIGUpIChyZGV2KS0+YXNpYy0+c2V0X2VuZ2luZV9jbG9jaygocmRldiksIChlKSkKICNkZWZpbmUgcmFkZW9uX2dldF9tZW1vcnlfY2xvY2socmRldikgKHJkZXYpLT5hc2ljLT5nZXRfbWVtb3J5X2Nsb2NrKChyZGV2KSkKICNkZWZpbmUgcmFkZW9uX3NldF9tZW1vcnlfY2xvY2socmRldiwgZSkgKHJkZXYpLT5hc2ljLT5zZXRfbWVtb3J5X2Nsb2NrKChyZGV2KSwgKGUpKQorI2RlZmluZSByYWRlb25fZ2V0X3BjaWVfbGFuZXMocmRldikgKHJkZXYpLT5hc2ljLT5nZXRfcGNpZV9sYW5lcygocmRldikpCiAjZGVmaW5lIHJhZGVvbl9zZXRfcGNpZV9sYW5lcyhyZGV2LCBsKSAocmRldiktPmFzaWMtPnNldF9wY2llX2xhbmVzKChyZGV2KSwgKGwpKQogI2RlZmluZSByYWRlb25fc2V0X2Nsb2NrX2dhdGluZyhyZGV2LCBlKSAocmRldiktPmFzaWMtPnNldF9jbG9ja19nYXRpbmcoKHJkZXYpLCAoZSkpCiAjZGVmaW5lIHJhZGVvbl9zZXRfc3VyZmFjZV9yZWcocmRldiwgciwgZiwgcCwgbywgcykgKChyZGV2KS0+YXNpYy0+c2V0X3N1cmZhY2VfcmVnKChyZGV2KSwgKHIpLCAoZiksIChwKSwgKG8pLCAocykpKQpAQCAtMTAyOSw2ICsxMTY4LDcgQEAKIC8qIEFHUCAqLwogZXh0ZXJuIHZvaWQgcmFkZW9uX2FncF9kaXNhYmxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcmFkZW9uX2dhcnRfdGFibGVfdnJhbV9waW4oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcmFkZW9uX2dhcnRfcmVzdG9yZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHJhZGVvbl9tb2Rlc2V0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcmFkZW9uX21vZGVzZXRfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gYm9vbCByYWRlb25fY2FyZF9wb3N0ZWQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtMTA0Miw2ICsxMTgyLDEwIEBACiBleHRlcm4gdm9pZCByYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgZW5hYmxlKTsKIGV4dGVybiB2b2lkIHJhZGVvbl90dG1fcGxhY2VtZW50X2Zyb21fZG9tYWluKHN0cnVjdCByYWRlb25fYm8gKnJibywgdTMyIGRvbWFpbik7CiBleHRlcm4gYm9vbCByYWRlb25fdHRtX2JvX2lzX3JhZGVvbl9ibyhzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKTsKK2V4dGVybiB2b2lkIHJhZGVvbl92cmFtX2xvY2F0aW9uKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBzdHJ1Y3QgcmFkZW9uX21jICptYywgdTY0IGJhc2UpOworZXh0ZXJuIHZvaWQgcmFkZW9uX2d0dF9sb2NhdGlvbihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9tYyAqbWMpOworZXh0ZXJuIGludCByYWRlb25fcmVzdW1lX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgcmFkZW9uX3N1c3BlbmRfa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CiAKIC8qIHIxMDAscnYxMDAscnMxMDAscnYyMDAscnMyMDAscjIwMCxydjI1MCxyczMwMCxydjI4MCAqLwogc3RydWN0IHIxMDBfbWNfc2F2ZSB7CkBAIC0xMDk2LDcgKzEyNDAsNyBAQAogLyogcjMwMCxyMzUwLHJ2MzUwLHJ2MzcwLHJ2MzgwICovCiBleHRlcm4gdm9pZCByMzAwX3NldF9yZWdfc2FmZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCByMzAwX21jX3Byb2dyYW0oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwotZXh0ZXJuIHZvaWQgcjMwMF92cmFtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHZvaWQgcjMwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHIzMDBfY2xvY2tfc3RhcnR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHIzMDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHJ2MzcwX3BjaWVfZ2FydF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTExMDUsNyArMTI0OSw2IEBACiBleHRlcm4gdm9pZCBydjM3MF9wY2llX2dhcnRfZGlzYWJsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiAKIC8qIHI0MjAscjQyMyxydjQxMCAqLwotZXh0ZXJuIGludCByNDIwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHUzMiByNDIwX21jX3JyZWcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHUzMiByZWcpOwogZXh0ZXJuIHZvaWQgcjQyMF9tY193cmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1MzIgcmVnLCB1MzIgdik7CiBleHRlcm4gaW50IHI0MjBfZGVidWdmc19waXBlc19pbmZvX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwpAQCAtMTE0NywxMyArMTI5MCwxMyBAQAogCQkJCQlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZTIpOwogCiAvKiByNjAwLCBydjYxMCwgcnY2MzAsIHJ2NjIwLCBydjYzNSwgcnY2NzAsIHJzNzgwLCByczg4MCAqLworZXh0ZXJuIHZvaWQgcjYwMF92cmFtX2d0dF9sb2NhdGlvbihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9tYyAqbWMpOwogZXh0ZXJuIGJvb2wgcjYwMF9jYXJkX3Bvc3RlZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gdm9pZCByNjAwX2NwX3N0b3Aoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjYwMF9yaW5nX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHVuc2lnbmVkIHJpbmdfc2l6ZSk7CiBleHRlcm4gaW50IHI2MDBfY3BfcmVzdW1lKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHI2MDBfY3BfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHI2MDBfY291bnRfcGlwZV9iaXRzKHVpbnQzMl90IHZhbCk7Ci1leHRlcm4gaW50IHI2MDBfZ2FydF9jbGVhcl9wYWdlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgaSk7CiBleHRlcm4gaW50IHI2MDBfbWNfd2FpdF9mb3JfaWRsZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gaW50IHI2MDBfcGNpZV9nYXJ0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogZXh0ZXJuIHZvaWQgcjYwMF9wY2llX2dhcnRfdGxiX2ZsdXNoKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKQEAgLTExODksNiArMTMzMiwxNCBAQAogCQkJCQkgICAgdWludDhfdCBzdGF0dXNfYml0cywKIAkJCQkJICAgIHVpbnQ4X3QgY2F0ZWdvcnlfY29kZSk7CiAKKy8qIGV2ZXJncmVlbiAqLworc3RydWN0IGV2ZXJncmVlbl9tY19zYXZlIHsKKwl1MzIgdmdhX2NvbnRyb2xbNl07CisJdTMyIHZnYV9yZW5kZXJfY29udHJvbDsKKwl1MzIgdmdhX2hkcF9jb250cm9sOworCXUzMiBjcnRjX2NvbnRyb2xbNl07Cit9OworCiAjaW5jbHVkZSAicmFkZW9uX29iamVjdC5oIgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FncC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYWdwLmMKaW5kZXggYzA2ODFhNTUuLmM0NDU3NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FncC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FncC5jCkBAIC0yMzcsNiArMjM3LDEwIEBACiAKIAlyZGV2LT5tYy5hZ3BfYmFzZSA9IHJkZXYtPmRkZXYtPmFncC0+YWdwX2luZm8uYXBlcl9iYXNlOwogCXJkZXYtPm1jLmd0dF9zaXplID0gcmRldi0+ZGRldi0+YWdwLT5hZ3BfaW5mby5hcGVyX3NpemUgPDwgMjA7CisJcmRldi0+bWMuZ3R0X3N0YXJ0ID0gcmRldi0+bWMuYWdwX2Jhc2U7CisJcmRldi0+bWMuZ3R0X2VuZCA9IHJkZXYtPm1jLmd0dF9zdGFydCArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKKwlkZXZfaW5mbyhyZGV2LT5kZXYsICJHVFQ6ICVsbHVNIDB4JTA4bGxYIC0gMHglMDhsbFhcbiIsCisJCXJkZXYtPm1jLmd0dF9zaXplID4+IDIwLCByZGV2LT5tYy5ndHRfc3RhcnQsIHJkZXYtPm1jLmd0dF9lbmQpOwogCiAJLyogd29ya2Fyb3VuZCBzb21lIGh3IGlzc3VlcyAqLwogCWlmIChyZGV2LT5mYW1pbHkgPCBDSElQX1IyMDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2FzaWMuaAppbmRleCAwNWVlMWFlLi5kM2ExNTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hc2ljLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXNpYy5oCkBAIC00Myw3ICs0Myw3IEBACiB2b2lkIHJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIGludCBlbmFibGUpOwogCiAvKgotICogcjEwMCxydjEwMCxyczEwMCxydjIwMCxyczIwMCxyMjAwLHJ2MjUwLHJzMzAwLHJ2MjgwCisgKiByMTAwLHJ2MTAwLHJzMTAwLHJ2MjAwLHJzMjAwCiAgKi8KIGV4dGVybiBpbnQgcjEwMF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKIGV4dGVybiB2b2lkIHIxMDBfZmluaShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CkBAIC0xMDgsNiArMTA4LDUyIEBACiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAogCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCisJLmdldF9wY2llX2xhbmVzID0gTlVMTCwKKwkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAorCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9sZWdhY3lfc2V0X2Nsb2NrX2dhdGluZywKKwkuc2V0X3N1cmZhY2VfcmVnID0gcjEwMF9zZXRfc3VyZmFjZV9yZWcsCisJLmNsZWFyX3N1cmZhY2VfcmVnID0gcjEwMF9jbGVhcl9zdXJmYWNlX3JlZywKKwkuYmFuZHdpZHRoX3VwZGF0ZSA9ICZyMTAwX2JhbmR3aWR0aF91cGRhdGUsCisJLmhwZF9pbml0ID0gJnIxMDBfaHBkX2luaXQsCisJLmhwZF9maW5pID0gJnIxMDBfaHBkX2ZpbmksCisJLmhwZF9zZW5zZSA9ICZyMTAwX2hwZF9zZW5zZSwKKwkuaHBkX3NldF9wb2xhcml0eSA9ICZyMTAwX2hwZF9zZXRfcG9sYXJpdHksCisJLmlvY3RsX3dhaXRfaWRsZSA9IE5VTEwsCit9OworCisvKgorICogcjIwMCxydjI1MCxyczMwMCxydjI4MAorICovCitleHRlcm4gaW50IHIyMDBfY29weV9kbWEoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsCisJCQl1aW50NjRfdCBzcmNfb2Zmc2V0LAorCQkJdWludDY0X3QgZHN0X29mZnNldCwKKwkJCXVuc2lnbmVkIG51bV9wYWdlcywKKwkJCXN0cnVjdCByYWRlb25fZmVuY2UgKmZlbmNlKTsKK3N0YXRpYyBzdHJ1Y3QgcmFkZW9uX2FzaWMgcjIwMF9hc2ljID0geworCS5pbml0ID0gJnIxMDBfaW5pdCwKKwkuZmluaSA9ICZyMTAwX2ZpbmksCisJLnN1c3BlbmQgPSAmcjEwMF9zdXNwZW5kLAorCS5yZXN1bWUgPSAmcjEwMF9yZXN1bWUsCisJLnZnYV9zZXRfc3RhdGUgPSAmcjEwMF92Z2Ffc2V0X3N0YXRlLAorCS5ncHVfcmVzZXQgPSAmcjEwMF9ncHVfcmVzZXQsCisJLmdhcnRfdGxiX2ZsdXNoID0gJnIxMDBfcGNpX2dhcnRfdGxiX2ZsdXNoLAorCS5nYXJ0X3NldF9wYWdlID0gJnIxMDBfcGNpX2dhcnRfc2V0X3BhZ2UsCisJLmNwX2NvbW1pdCA9ICZyMTAwX2NwX2NvbW1pdCwKKwkucmluZ19zdGFydCA9ICZyMTAwX3Jpbmdfc3RhcnQsCisJLnJpbmdfdGVzdCA9ICZyMTAwX3JpbmdfdGVzdCwKKwkucmluZ19pYl9leGVjdXRlID0gJnIxMDBfcmluZ19pYl9leGVjdXRlLAorCS5pcnFfc2V0ID0gJnIxMDBfaXJxX3NldCwKKwkuaXJxX3Byb2Nlc3MgPSAmcjEwMF9pcnFfcHJvY2VzcywKKwkuZ2V0X3ZibGFua19jb3VudGVyID0gJnIxMDBfZ2V0X3ZibGFua19jb3VudGVyLAorCS5mZW5jZV9yaW5nX2VtaXQgPSAmcjEwMF9mZW5jZV9yaW5nX2VtaXQsCisJLmNzX3BhcnNlID0gJnIxMDBfY3NfcGFyc2UsCisJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuY29weV9kbWEgPSAmcjIwMF9jb3B5X2RtYSwKKwkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKKwkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2ssCisJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAorCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfZ2V0X21lbW9yeV9jbG9jaywKKwkuc2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fbGVnYWN5X3NldF9jbG9ja19nYXRpbmcsCiAJLnNldF9zdXJmYWNlX3JlZyA9IHIxMDBfc2V0X3N1cmZhY2VfcmVnLApAQCAtMTM4LDExICsxODQsOCBAQAogZXh0ZXJuIHVpbnQzMl90IHJ2MzcwX3BjaWVfcnJlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnKTsKIGV4dGVybiB2b2lkIHJ2MzcwX3BjaWVfd3JlZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgdWludDMyX3QgcmVnLCB1aW50MzJfdCB2KTsKIGV4dGVybiB2b2lkIHJ2MzcwX3NldF9wY2llX2xhbmVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgbGFuZXMpOwotZXh0ZXJuIGludCByMzAwX2NvcHlfZG1hKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAotCQkJdWludDY0X3Qgc3JjX29mZnNldCwKLQkJCXVpbnQ2NF90IGRzdF9vZmZzZXQsCi0JCQl1bnNpZ25lZCBudW1fcGFnZXMsCi0JCQlzdHJ1Y3QgcmFkZW9uX2ZlbmNlICpmZW5jZSk7CitleHRlcm4gaW50IHJ2MzcwX2dldF9wY2llX2xhbmVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKKwogc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByMzAwX2FzaWMgPSB7CiAJLmluaXQgPSAmcjMwMF9pbml0LAogCS5maW5pID0gJnIzMDBfZmluaSwKQEAgLTE2Miw3ICsyMDUsNDYgQEAKIAkuZmVuY2VfcmluZ19lbWl0ID0gJnIzMDBfZmVuY2VfcmluZ19lbWl0LAogCS5jc19wYXJzZSA9ICZyMzAwX2NzX3BhcnNlLAogCS5jb3B5X2JsaXQgPSAmcjEwMF9jb3B5X2JsaXQsCi0JLmNvcHlfZG1hID0gJnIzMDBfY29weV9kbWEsCisJLmNvcHlfZG1hID0gJnIyMDBfY29weV9kbWEsCisJLmNvcHkgPSAmcjEwMF9jb3B5X2JsaXQsCisJLmdldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9nZXRfZW5naW5lX2Nsb2NrLAorCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9tZW1vcnlfY2xvY2ssCisJLnNldF9tZW1vcnlfY2xvY2sgPSBOVUxMLAorCS5nZXRfcGNpZV9sYW5lcyA9ICZydjM3MF9nZXRfcGNpZV9sYW5lcywKKwkuc2V0X3BjaWVfbGFuZXMgPSAmcnYzNzBfc2V0X3BjaWVfbGFuZXMsCisJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfY2xvY2tfZ2F0aW5nLAorCS5zZXRfc3VyZmFjZV9yZWcgPSByMTAwX3NldF9zdXJmYWNlX3JlZywKKwkuY2xlYXJfc3VyZmFjZV9yZWcgPSByMTAwX2NsZWFyX3N1cmZhY2VfcmVnLAorCS5iYW5kd2lkdGhfdXBkYXRlID0gJnIxMDBfYmFuZHdpZHRoX3VwZGF0ZSwKKwkuaHBkX2luaXQgPSAmcjEwMF9ocGRfaW5pdCwKKwkuaHBkX2ZpbmkgPSAmcjEwMF9ocGRfZmluaSwKKwkuaHBkX3NlbnNlID0gJnIxMDBfaHBkX3NlbnNlLAorCS5ocGRfc2V0X3BvbGFyaXR5ID0gJnIxMDBfaHBkX3NldF9wb2xhcml0eSwKKwkuaW9jdGxfd2FpdF9pZGxlID0gTlVMTCwKK307CisKKworc3RhdGljIHN0cnVjdCByYWRlb25fYXNpYyByMzAwX2FzaWNfcGNpZSA9IHsKKwkuaW5pdCA9ICZyMzAwX2luaXQsCisJLmZpbmkgPSAmcjMwMF9maW5pLAorCS5zdXNwZW5kID0gJnIzMDBfc3VzcGVuZCwKKwkucmVzdW1lID0gJnIzMDBfcmVzdW1lLAorCS52Z2Ffc2V0X3N0YXRlID0gJnIxMDBfdmdhX3NldF9zdGF0ZSwKKwkuZ3B1X3Jlc2V0ID0gJnIzMDBfZ3B1X3Jlc2V0LAorCS5nYXJ0X3RsYl9mbHVzaCA9ICZydjM3MF9wY2llX2dhcnRfdGxiX2ZsdXNoLAorCS5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZSwKKwkuY3BfY29tbWl0ID0gJnIxMDBfY3BfY29tbWl0LAorCS5yaW5nX3N0YXJ0ID0gJnIzMDBfcmluZ19zdGFydCwKKwkucmluZ190ZXN0ID0gJnIxMDBfcmluZ190ZXN0LAorCS5yaW5nX2liX2V4ZWN1dGUgPSAmcjEwMF9yaW5nX2liX2V4ZWN1dGUsCisJLmlycV9zZXQgPSAmcjEwMF9pcnFfc2V0LAorCS5pcnFfcHJvY2VzcyA9ICZyMTAwX2lycV9wcm9jZXNzLAorCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSAmcjEwMF9nZXRfdmJsYW5rX2NvdW50ZXIsCisJLmZlbmNlX3JpbmdfZW1pdCA9ICZyMzAwX2ZlbmNlX3JpbmdfZW1pdCwKKwkuY3NfcGFyc2UgPSAmcjMwMF9jc19wYXJzZSwKKwkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAorCS5jb3B5X2RtYSA9ICZyMjAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAogCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfZ2V0X2VuZ2luZV9jbG9jaywKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X3NldF9lbmdpbmVfY2xvY2ssCkBAIC0yMDYsMTIgKzI4OCwxMyBAQAogCS5mZW5jZV9yaW5nX2VtaXQgPSAmcjMwMF9mZW5jZV9yaW5nX2VtaXQsCiAJLmNzX3BhcnNlID0gJnIzMDBfY3NfcGFyc2UsCiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKLQkuY29weV9kbWEgPSAmcjMwMF9jb3B5X2RtYSwKKwkuY29weV9kbWEgPSAmcjIwMF9jb3B5X2RtYSwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCiAJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAorCS5nZXRfcGNpZV9sYW5lcyA9ICZydjM3MF9nZXRfcGNpZV9sYW5lcywKIAkuc2V0X3BjaWVfbGFuZXMgPSAmcnYzNzBfc2V0X3BjaWVfbGFuZXMsCiAJLnNldF9jbG9ja19nYXRpbmcgPSAmcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZywKIAkuc2V0X3N1cmZhY2VfcmVnID0gcjEwMF9zZXRfc3VyZmFjZV9yZWcsCkBAIC0yNTUsMTIgKzMzOCwxMyBAQAogCS5mZW5jZV9yaW5nX2VtaXQgPSAmcjMwMF9mZW5jZV9yaW5nX2VtaXQsCiAJLmNzX3BhcnNlID0gJnIzMDBfY3NfcGFyc2UsCiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKLQkuY29weV9kbWEgPSAmcjMwMF9jb3B5X2RtYSwKKwkuY29weV9kbWEgPSAmcjIwMF9jb3B5X2RtYSwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fbGVnYWN5X2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2xlZ2FjeV9zZXRfZW5naW5lX2Nsb2NrLAogCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9sZWdhY3lfZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9IE5VTEwsCisJLmdldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAogCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9sZWdhY3lfc2V0X2Nsb2NrX2dhdGluZywKIAkuc2V0X3N1cmZhY2VfcmVnID0gcjEwMF9zZXRfc3VyZmFjZV9yZWcsCkBAIC0zMTQsMTQgKzM5OCwxNyBAQAogCS5mZW5jZV9yaW5nX2VtaXQgPSAmcjMwMF9mZW5jZV9yaW5nX2VtaXQsCiAJLmNzX3BhcnNlID0gJnIzMDBfY3NfcGFyc2UsCiAJLmNvcHlfYmxpdCA9ICZyMTAwX2NvcHlfYmxpdCwKLQkuY29weV9kbWEgPSAmcjMwMF9jb3B5X2RtYSwKKwkuY29weV9kbWEgPSAmcjIwMF9jb3B5X2RtYSwKIAkuY29weSA9ICZyMTAwX2NvcHlfYmxpdCwKIAkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCiAJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAorCS5nZXRfcGNpZV9sYW5lcyA9IE5VTEwsCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLAorCS5zZXRfc3VyZmFjZV9yZWcgPSByMTAwX3NldF9zdXJmYWNlX3JlZywKKwkuY2xlYXJfc3VyZmFjZV9yZWcgPSByMTAwX2NsZWFyX3N1cmZhY2VfcmVnLAogCS5iYW5kd2lkdGhfdXBkYXRlID0gJnJzNjAwX2JhbmR3aWR0aF91cGRhdGUsCiAJLmhwZF9pbml0ID0gJnJzNjAwX2hwZF9pbml0LAogCS5ocGRfZmluaSA9ICZyczYwMF9ocGRfZmluaSwKQEAgLTM2MCwxMiArNDQ3LDEzIEBACiAJLmZlbmNlX3JpbmdfZW1pdCA9ICZyMzAwX2ZlbmNlX3JpbmdfZW1pdCwKIAkuY3NfcGFyc2UgPSAmcjMwMF9jc19wYXJzZSwKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAotCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAotCS5jb3B5ID0gJnIzMDBfY29weV9kbWEsCisJLmNvcHlfZG1hID0gJnIyMDBfY29weV9kbWEsCisJLmNvcHkgPSAmcjIwMF9jb3B5X2RtYSwKIAkuZ2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfZW5naW5lX2Nsb2NrLAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCiAJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAorCS5nZXRfcGNpZV9sYW5lcyA9IE5VTEwsCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLAogCS5zZXRfc3VyZmFjZV9yZWcgPSByMTAwX3NldF9zdXJmYWNlX3JlZywKQEAgLTQxMiwxMiArNTAwLDEzIEBACiAJLmZlbmNlX3JpbmdfZW1pdCA9ICZyMzAwX2ZlbmNlX3JpbmdfZW1pdCwKIAkuY3NfcGFyc2UgPSAmcjMwMF9jc19wYXJzZSwKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAotCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAorCS5jb3B5X2RtYSA9ICZyMjAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAogCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKIAkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCisJLmdldF9wY2llX2xhbmVzID0gJnJ2MzcwX2dldF9wY2llX2xhbmVzLAogCS5zZXRfcGNpZV9sYW5lcyA9ICZydjM3MF9zZXRfcGNpZV9sYW5lcywKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLAogCS5zZXRfc3VyZmFjZV9yZWcgPSByMTAwX3NldF9zdXJmYWNlX3JlZywKQEAgLTQ1NSwxMiArNTQ0LDEzIEBACiAJLmZlbmNlX3JpbmdfZW1pdCA9ICZyMzAwX2ZlbmNlX3JpbmdfZW1pdCwKIAkuY3NfcGFyc2UgPSAmcjMwMF9jc19wYXJzZSwKIAkuY29weV9ibGl0ID0gJnIxMDBfY29weV9ibGl0LAotCS5jb3B5X2RtYSA9ICZyMzAwX2NvcHlfZG1hLAorCS5jb3B5X2RtYSA9ICZyMjAwX2NvcHlfZG1hLAogCS5jb3B5ID0gJnIxMDBfY29weV9ibGl0LAogCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCiAJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKIAkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAogCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCisJLmdldF9wY2llX2xhbmVzID0gJnJ2MzcwX2dldF9wY2llX2xhbmVzLAogCS5zZXRfcGNpZV9sYW5lcyA9ICZydjM3MF9zZXRfcGNpZV9sYW5lcywKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLAogCS5zZXRfc3VyZmFjZV9yZWcgPSByMTAwX3NldF9zdXJmYWNlX3JlZywKQEAgLTUzOCw4ICs2MjgsOSBAQAogCS5zZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9lbmdpbmVfY2xvY2ssCiAJLmdldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fZ2V0X21lbW9yeV9jbG9jaywKIAkuc2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfbWVtb3J5X2Nsb2NrLAorCS5nZXRfcGNpZV9sYW5lcyA9ICZydjM3MF9nZXRfcGNpZV9sYW5lcywKIAkuc2V0X3BjaWVfbGFuZXMgPSBOVUxMLAotCS5zZXRfY2xvY2tfZ2F0aW5nID0gJnJhZGVvbl9hdG9tX3NldF9jbG9ja19nYXRpbmcsCisJLnNldF9jbG9ja19nYXRpbmcgPSBOVUxMLAogCS5zZXRfc3VyZmFjZV9yZWcgPSByNjAwX3NldF9zdXJmYWNlX3JlZywKIAkuY2xlYXJfc3VyZmFjZV9yZWcgPSByNjAwX2NsZWFyX3N1cmZhY2VfcmVnLAogCS5iYW5kd2lkdGhfdXBkYXRlID0gJnJ2NTE1X2JhbmR3aWR0aF91cGRhdGUsCkBAIC01ODMsNiArNjc0LDcgQEAKIAkuc2V0X2VuZ2luZV9jbG9jayA9ICZyYWRlb25fYXRvbV9zZXRfZW5naW5lX2Nsb2NrLAogCS5nZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9tZW1vcnlfY2xvY2ssCiAJLnNldF9tZW1vcnlfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X21lbW9yeV9jbG9jaywKKwkuZ2V0X3BjaWVfbGFuZXMgPSAmcnYzNzBfZ2V0X3BjaWVfbGFuZXMsCiAJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKIAkuc2V0X2Nsb2NrX2dhdGluZyA9ICZyYWRlb25fYXRvbV9zZXRfY2xvY2tfZ2F0aW5nLAogCS5zZXRfc3VyZmFjZV9yZWcgPSByNjAwX3NldF9zdXJmYWNlX3JlZywKQEAgLTU5NSw0ICs2ODcsNTQgQEAKIAkuaW9jdGxfd2FpdF9pZGxlID0gcjYwMF9pb2N0bF93YWl0X2lkbGUsCiB9OwogCisvKgorICogZXZlcmdyZWVuCisgKi8KK2ludCBldmVyZ3JlZW5faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIGV2ZXJncmVlbl9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2ludCBldmVyZ3JlZW5fc3VzcGVuZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgZXZlcmdyZWVuX3Jlc3VtZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitpbnQgZXZlcmdyZWVuX2dwdV9yZXNldChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7Cit2b2lkIGV2ZXJncmVlbl9iYW5kd2lkdGhfdXBkYXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgZXZlcmdyZWVuX2hwZF9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK3ZvaWQgZXZlcmdyZWVuX2hwZF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KTsKK2Jvb2wgZXZlcmdyZWVuX2hwZF9zZW5zZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgZW51bSByYWRlb25faHBkX2lkIGhwZCk7Cit2b2lkIGV2ZXJncmVlbl9ocGRfc2V0X3BvbGFyaXR5KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkJCWVudW0gcmFkZW9uX2hwZF9pZCBocGQpOworCitzdGF0aWMgc3RydWN0IHJhZGVvbl9hc2ljIGV2ZXJncmVlbl9hc2ljID0geworCS5pbml0ID0gJmV2ZXJncmVlbl9pbml0LAorCS5maW5pID0gJmV2ZXJncmVlbl9maW5pLAorCS5zdXNwZW5kID0gJmV2ZXJncmVlbl9zdXNwZW5kLAorCS5yZXN1bWUgPSAmZXZlcmdyZWVuX3Jlc3VtZSwKKwkuY3BfY29tbWl0ID0gTlVMTCwKKwkuZ3B1X3Jlc2V0ID0gJmV2ZXJncmVlbl9ncHVfcmVzZXQsCisJLnZnYV9zZXRfc3RhdGUgPSAmcjYwMF92Z2Ffc2V0X3N0YXRlLAorCS5nYXJ0X3RsYl9mbHVzaCA9ICZyNjAwX3BjaWVfZ2FydF90bGJfZmx1c2gsCisJLmdhcnRfc2V0X3BhZ2UgPSAmcnM2MDBfZ2FydF9zZXRfcGFnZSwKKwkucmluZ190ZXN0ID0gTlVMTCwKKwkucmluZ19pYl9leGVjdXRlID0gTlVMTCwKKwkuaXJxX3NldCA9IE5VTEwsCisJLmlycV9wcm9jZXNzID0gTlVMTCwKKwkuZ2V0X3ZibGFua19jb3VudGVyID0gTlVMTCwKKwkuZmVuY2VfcmluZ19lbWl0ID0gTlVMTCwKKwkuY3NfcGFyc2UgPSBOVUxMLAorCS5jb3B5X2JsaXQgPSBOVUxMLAorCS5jb3B5X2RtYSA9IE5VTEwsCisJLmNvcHkgPSBOVUxMLAorCS5nZXRfZW5naW5lX2Nsb2NrID0gJnJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2ssCisJLnNldF9lbmdpbmVfY2xvY2sgPSAmcmFkZW9uX2F0b21fc2V0X2VuZ2luZV9jbG9jaywKKwkuZ2V0X21lbW9yeV9jbG9jayA9ICZyYWRlb25fYXRvbV9nZXRfbWVtb3J5X2Nsb2NrLAorCS5zZXRfbWVtb3J5X2Nsb2NrID0gJnJhZGVvbl9hdG9tX3NldF9tZW1vcnlfY2xvY2ssCisJLnNldF9wY2llX2xhbmVzID0gTlVMTCwKKwkuc2V0X2Nsb2NrX2dhdGluZyA9IE5VTEwsCisJLnNldF9zdXJmYWNlX3JlZyA9IHI2MDBfc2V0X3N1cmZhY2VfcmVnLAorCS5jbGVhcl9zdXJmYWNlX3JlZyA9IHI2MDBfY2xlYXJfc3VyZmFjZV9yZWcsCisJLmJhbmR3aWR0aF91cGRhdGUgPSAmZXZlcmdyZWVuX2JhbmR3aWR0aF91cGRhdGUsCisJLmhwZF9pbml0ID0gJmV2ZXJncmVlbl9ocGRfaW5pdCwKKwkuaHBkX2ZpbmkgPSAmZXZlcmdyZWVuX2hwZF9maW5pLAorCS5ocGRfc2Vuc2UgPSAmZXZlcmdyZWVuX2hwZF9zZW5zZSwKKwkuaHBkX3NldF9wb2xhcml0eSA9ICZldmVyZ3JlZW5faHBkX3NldF9wb2xhcml0eSwKK307CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0b21iaW9zLmMKaW5kZXggNGQ4ODMxNS4uOTM3ODNiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYXRvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdG9tYmlvcy5jCkBAIC0xNTksOCArMTU5LDE1IEBACiAJCQkJCQkJICAgIHN0cnVjdCByYWRlb25fZ3Bpb19yZWMgKmdwaW8pCiB7CiAJc3RydWN0IHJhZGVvbl9ocGQgaHBkOworCXUzMiByZWc7CisKKwlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKQorCQlyZWcgPSBFVkVSR1JFRU5fRENfR1BJT19IUERfQTsKKwllbHNlCisJCXJlZyA9IEFWSVZPX0RDX0dQSU9fSFBEX0E7CisKIAlocGQuZ3BpbyA9ICpncGlvOwotCWlmIChncGlvLT5yZWcgPT0gQVZJVk9fRENfR1BJT19IUERfQSkgeworCWlmIChncGlvLT5yZWcgPT0gcmVnKSB7CiAJCXN3aXRjaChncGlvLT5tYXNrKSB7CiAJCWNhc2UgKDEgPDwgMCk6CiAJCQlocGQuaHBkID0gUkFERU9OX0hQRF8xOwpAQCAtNTc0LDYgKzU4MSw5IEBACiAJCQkJZGRjX2J1cy52YWxpZCA9IGZhbHNlOwogCQkJfQogCisJCQkvKiBuZWVkZWQgZm9yIGF1eCBjaGFuIHRyYW5zYWN0aW9ucyAqLworCQkJZGRjX2J1cy5ocGRfaWQgPSBocGQuaHBkID8gKGhwZC5ocGQgLSAxKSA6IDA7CisKIAkJCWNvbm5faWQgPSBsZTE2X3RvX2NwdShwYXRoLT51c0Nvbm5PYmplY3RJZCk7CiAKIAkJCWlmICghcmFkZW9uX2F0b21fYXBwbHlfcXVpcmtzCkBAIC04MzgsNiArODQ4LDcgQEAKIAlBVE9NX0ZJUk1XQVJFX0lORk9fVjFfMiBpbmZvXzEyOwogCUFUT01fRklSTVdBUkVfSU5GT19WMV8zIGluZm9fMTM7CiAJQVRPTV9GSVJNV0FSRV9JTkZPX1YxXzQgaW5mb18xNDsKKwlBVE9NX0ZJUk1XQVJFX0lORk9fVjJfMSBpbmZvXzIxOwogfTsKIAogYm9vbCByYWRlb25fYXRvbV9nZXRfY2xvY2tfaW5mbyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQpAQCAtODQ5LDYgKzg2MCw3IEBACiAJdWludDhfdCBmcmV2LCBjcmV2OwogCXN0cnVjdCByYWRlb25fcGxsICpwMXBsbCA9ICZyZGV2LT5jbG9jay5wMXBsbDsKIAlzdHJ1Y3QgcmFkZW9uX3BsbCAqcDJwbGwgPSAmcmRldi0+Y2xvY2sucDJwbGw7CisJc3RydWN0IHJhZGVvbl9wbGwgKmRjcGxsID0gJnJkZXYtPmNsb2NrLmRjcGxsOwogCXN0cnVjdCByYWRlb25fcGxsICpzcGxsID0gJnJkZXYtPmNsb2NrLnNwbGw7CiAJc3RydWN0IHJhZGVvbl9wbGwgKm1wbGwgPSAmcmRldi0+Y2xvY2subXBsbDsKIAl1aW50MTZfdCBkYXRhX29mZnNldDsKQEAgLTk1MSw4ICs5NjMsMTkgQEAKIAkJcmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrID0KIAkJICAgIGxlMzJfdG9fY3B1KGZpcm13YXJlX2luZm8tPmluZm8udWxEZWZhdWx0TWVtb3J5Q2xvY2spOwogCisJCWlmIChBU0lDX0lTX0RDRTQocmRldikpIHsKKwkJCXJkZXYtPmNsb2NrLmRlZmF1bHRfZGlzcGNsayA9CisJCQkJbGUzMl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mb18yMS51bERlZmF1bHREaXNwRW5naW5lQ2xrRnJlcSk7CisJCQlpZiAocmRldi0+Y2xvY2suZGVmYXVsdF9kaXNwY2xrID09IDApCisJCQkJcmRldi0+Y2xvY2suZGVmYXVsdF9kaXNwY2xrID0gNjAwMDA7IC8qIDYwMCBNaHogKi8KKwkJCXJkZXYtPmNsb2NrLmRwX2V4dGNsayA9CisJCQkJbGUxNl90b19jcHUoZmlybXdhcmVfaW5mby0+aW5mb18yMS51c1VuaXBoeURQTW9kZUV4dENsa0ZyZXEpOworCQl9CisJCSpkY3BsbCA9ICpwMXBsbDsKKwogCQlyZXR1cm4gdHJ1ZTsKIAl9CisKIAlyZXR1cm4gZmFsc2U7CiB9CiAKQEAgLTEwOTEsNiArMTExNCwzMCBAQAogCXJldHVybiBzczsKIH0KIAorc3RhdGljIHZvaWQgcmFkZW9uX2F0b21fYXBwbHlfbHZkc19xdWlya3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkJICBzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKmx2ZHMpCit7CisKKwkvKiBUb3NoaWJhIEEzMDAtMUJVIGxhcHRvcCBwYW5lbCBkb2Vzbid0IGxpa2UgbmV3IHBsbCBkaXZpZGVyIGFsZ28gKi8KKwlpZiAoKGRldi0+cGRldi0+ZGV2aWNlID09IDB4OTVjNCkgJiYKKwkgICAgKGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDExNzkpICYmCisJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHhmZjUwKSkgeworCQlpZiAoKGx2ZHMtPm5hdGl2ZV9tb2RlLmhkaXNwbGF5ID09IDEyODApICYmCisJCSAgICAobHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgPT0gODAwKSkKKwkJCWx2ZHMtPnBsbF9hbGdvID0gUExMX0FMR09fTEVHQUNZOworCX0KKworCS8qIERlbGwgU3R1ZGlvIDE1IGxhcHRvcCBwYW5lbCBkb2Vzbid0IGxpa2UgbmV3IHBsbCBkaXZpZGVyIGFsZ28gKi8KKwlpZiAoKGRldi0+cGRldi0+ZGV2aWNlID09IDB4OTVjNCkgJiYKKwkgICAgKGRldi0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSAweDEwMjgpICYmCisJICAgIChkZXYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gMHgwMjlmKSkgeworCQlpZiAoKGx2ZHMtPm5hdGl2ZV9tb2RlLmhkaXNwbGF5ID09IDEyODApICYmCisJCSAgICAobHZkcy0+bmF0aXZlX21vZGUudmRpc3BsYXkgPT0gODAwKSkKKwkJCWx2ZHMtPnBsbF9hbGdvID0gUExMX0FMR09fTEVHQUNZOworCX0KKworfQorCiB1bmlvbiBsdmRzX2luZm8gewogCXN0cnVjdCBfQVRPTV9MVkRTX0lORk8gaW5mbzsKIAlzdHJ1Y3QgX0FUT01fTFZEU19JTkZPX1YxMiBpbmZvXzEyOwpAQCAtMTE2MSw2ICsxMjA4LDIxIEBACiAKIAkJbHZkcy0+c3MgPSByYWRlb25fYXRvbWJpb3NfZ2V0X3NzX2luZm8oZW5jb2RlciwgbHZkc19pbmZvLT5pbmZvLnVjU1NfSWQpOwogCisJCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CisJCQlpZiAocmFkZW9uX25ld19wbGwgPT0gMCkKKwkJCQlsdmRzLT5wbGxfYWxnbyA9IFBMTF9BTEdPX0xFR0FDWTsKKwkJCWVsc2UKKwkJCQlsdmRzLT5wbGxfYWxnbyA9IFBMTF9BTEdPX05FVzsKKwkJfSBlbHNlIHsKKwkJCWlmIChyYWRlb25fbmV3X3BsbCA9PSAxKQorCQkJCWx2ZHMtPnBsbF9hbGdvID0gUExMX0FMR09fTkVXOworCQkJZWxzZQorCQkJCWx2ZHMtPnBsbF9hbGdvID0gUExMX0FMR09fTEVHQUNZOworCQl9CisKKwkJLyogTFZEUyBxdWlya3MgKi8KKwkJcmFkZW9uX2F0b21fYXBwbHlfbHZkc19xdWlya3MoZGV2LCBsdmRzKTsKKwogCQllbmNvZGVyLT5uYXRpdmVfbW9kZSA9IGx2ZHMtPm5hdGl2ZV9tb2RlOwogCX0KIAlyZXR1cm4gbHZkczsKQEAgLTEzODUsNiArMTQ0NywzNzEgQEAKIAlyZXR1cm4gdHZfZGFjOwogfQogCit1bmlvbiBwb3dlcl9pbmZvIHsKKwlzdHJ1Y3QgX0FUT01fUE9XRVJQTEFZX0lORk8gaW5mbzsKKwlzdHJ1Y3QgX0FUT01fUE9XRVJQTEFZX0lORk9fVjIgaW5mb18yOworCXN0cnVjdCBfQVRPTV9QT1dFUlBMQVlfSU5GT19WMyBpbmZvXzM7CisJc3RydWN0IF9BVE9NX1BQTElCX1BPV0VSUExBWVRBQkxFIGluZm9fNDsKK307CisKK3ZvaWQgcmFkZW9uX2F0b21iaW9zX2dldF9wb3dlcl9tb2RlcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlzdHJ1Y3QgcmFkZW9uX21vZGVfaW5mbyAqbW9kZV9pbmZvID0gJnJkZXYtPm1vZGVfaW5mbzsKKwlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShEQVRBLCBQb3dlclBsYXlJbmZvKTsKKwl1MTYgZGF0YV9vZmZzZXQ7CisJdTggZnJldiwgY3JldjsKKwl1MzIgbWlzYywgbWlzYzIgPSAwLCBzY2xrLCBtY2xrOworCXVuaW9uIHBvd2VyX2luZm8gKnBvd2VyX2luZm87CisJc3RydWN0IF9BVE9NX1BQTElCX05PTkNMT0NLX0lORk8gKm5vbl9jbG9ja19pbmZvOworCXN0cnVjdCBfQVRPTV9QUExJQl9TVEFURSAqcG93ZXJfc3RhdGU7CisJaW50IG51bV9tb2RlcyA9IDAsIGksIGo7CisJaW50IHN0YXRlX2luZGV4ID0gMCwgbW9kZV9pbmRleCA9IDA7CisKKwlhdG9tX3BhcnNlX2RhdGFfaGVhZGVyKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LCBpbmRleCwgTlVMTCwgJmZyZXYsICZjcmV2LCAmZGF0YV9vZmZzZXQpOworCisJcG93ZXJfaW5mbyA9ICh1bmlvbiBwb3dlcl9pbmZvICopKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsgZGF0YV9vZmZzZXQpOworCisJcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZSA9IE5VTEw7CisKKwlpZiAocG93ZXJfaW5mbykgeworCQlpZiAoZnJldiA8IDQpIHsKKwkJCW51bV9tb2RlcyA9IHBvd2VyX2luZm8tPmluZm8udWNOdW1PZlBvd2VyTW9kZUVudHJpZXM7CisJCQlpZiAobnVtX21vZGVzID4gQVRPTV9NQVhfTlVNQkVST0ZfUE9XRVJfQkxPQ0spCisJCQkJbnVtX21vZGVzID0gQVRPTV9NQVhfTlVNQkVST0ZfUE9XRVJfQkxPQ0s7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX21vZGVzOyBpKyspIHsKKwkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPSBWT0xUQUdFX05PTkU7CisJCQkJc3dpdGNoIChmcmV2KSB7CisJCQkJY2FzZSAxOgorCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubnVtX2Nsb2NrX21vZGVzID0gMTsKKwkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0ubWNsayA9CisJCQkJCQlsZTE2X3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvLmFzUG93ZXJQbGF5SW5mb1tpXS51c01lbW9yeUNsb2NrKTsKKwkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA9CisJCQkJCQlsZTE2X3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvLmFzUG93ZXJQbGF5SW5mb1tpXS51c0VuZ2luZUNsb2NrKTsKKwkJCQkJLyogc2tpcCBpbnZhbGlkIG1vZGVzICovCisJCQkJCWlmICgocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0ubWNsayA9PSAwKSB8fAorCQkJCQkgICAgKHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnNjbGsgPT0gMCkpCisJCQkJCQljb250aW51ZTsKKwkJCQkJLyogc2tpcCBvdmVyY2xvY2sgbW9kZXMgZm9yIG5vdyAqLworCQkJCQlpZiAoKHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPgorCQkJCQkgICAgIHJkZXYtPmNsb2NrLmRlZmF1bHRfbWNsayArIFJBREVPTl9NT0RFX09WRVJDTE9DS19NQVJHSU4pIHx8CisJCQkJCSAgICAocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA+CisJCQkJCSAgICAgcmRldi0+Y2xvY2suZGVmYXVsdF9zY2xrICsgUkFERU9OX01PREVfT1ZFUkNMT0NLX01BUkdJTikpCisJCQkJCQljb250aW51ZTsKKwkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm5vbl9jbG9ja19pbmZvLnBjaWVfbGFuZXMgPQorCQkJCQkJcG93ZXJfaW5mby0+aW5mby5hc1Bvd2VyUGxheUluZm9baV0udWNOdW1QY2lFTGFuZXM7CisJCQkJCW1pc2MgPSBsZTMyX3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvLmFzUG93ZXJQbGF5SW5mb1tpXS51bE1pc2NJbmZvKTsKKwkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX1ZPTFRBR0VfRFJPUF9TVVBQT1JUKSB7CisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPQorCQkJCQkJCVZPTFRBR0VfR1BJTzsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuZ3BpbyA9CisJCQkJCQkJcmFkZW9uX2xvb2t1cF9ncGlvKHJkZXYsCisJCQkJCQkJcG93ZXJfaW5mby0+aW5mby5hc1Bvd2VyUGxheUluZm9baV0udWNWb2x0YWdlRHJvcEluZGV4KTsKKwkJCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19WT0xUQUdFX0RST1BfQUNUSVZFX0hJR0gpCisJCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS5hY3RpdmVfaGlnaCA9CisJCQkJCQkJCXRydWU7CisJCQkJCQllbHNlCisJCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS5hY3RpdmVfaGlnaCA9CisJCQkJCQkJCWZhbHNlOworCQkJCQl9IGVsc2UgaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX1BST0dSQU1fVk9MVEFHRSkgeworCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS50eXBlID0KKwkJCQkJCQlWT0xUQUdFX1ZEREM7CisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnZkZGNfaWQgPQorCQkJCQkJCXBvd2VyX2luZm8tPmluZm8uYXNQb3dlclBsYXlJbmZvW2ldLnVjVm9sdGFnZURyb3BJbmRleDsKKwkJCQkJfQorCQkJCQkvKiBvcmRlciBtYXR0ZXJzISAqLworCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fUE9XRVJfU0FWSU5HX01PREUpCisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9QT1dFUlNBVkU7CisJCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19ERUZBVUxUX0RDX1NUQVRFX0VOVFJZX1RSVUUpCisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9CQVRURVJZOworCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fREVGQVVMVF9MT1dfRENfU1RBVEVfRU5UUllfVFJVRSkKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0JBVFRFUlk7CisJCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19MT0FEX0JBTEFOQ0VfRU4pCisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9CQUxBTkNFRDsKKwkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPXzNEX0FDQ0VMRVJBVElPTl9FTikKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX1BFUkZPUk1BTkNFOworCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fRFJJVkVSX0RFRkFVTFRfTU9ERSkgeworCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfREVGQVVMVDsKKwkJCQkJCXJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGUgPSAmcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdOworCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmRlZmF1bHRfY2xvY2tfbW9kZSA9CisJCQkJCQkJJnJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdOworCQkJCQl9CisJCQkJCXN0YXRlX2luZGV4Kys7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMjoKKwkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm51bV9jbG9ja19tb2RlcyA9IDE7CisJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPQorCQkJCQkJbGUzMl90b19jcHUocG93ZXJfaW5mby0+aW5mb18yLmFzUG93ZXJQbGF5SW5mb1tpXS51bE1lbW9yeUNsb2NrKTsKKwkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA9CisJCQkJCQlsZTMyX3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvXzIuYXNQb3dlclBsYXlJbmZvW2ldLnVsRW5naW5lQ2xvY2spOworCQkJCQkvKiBza2lwIGludmFsaWQgbW9kZXMgKi8KKwkJCQkJaWYgKChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5tY2xrID09IDApIHx8CisJCQkJCSAgICAocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA9PSAwKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQkvKiBza2lwIG92ZXJjbG9jayBtb2RlcyBmb3Igbm93ICovCisJCQkJCWlmICgocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0ubWNsayA+CisJCQkJCSAgICAgcmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrICsgUkFERU9OX01PREVfT1ZFUkNMT0NLX01BUkdJTikgfHwKKwkJCQkJICAgIChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrID4KKwkJCQkJICAgICByZGV2LT5jbG9jay5kZWZhdWx0X3NjbGsgKyBSQURFT05fTU9ERV9PVkVSQ0xPQ0tfTUFSR0lOKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubm9uX2Nsb2NrX2luZm8ucGNpZV9sYW5lcyA9CisJCQkJCQlwb3dlcl9pbmZvLT5pbmZvXzIuYXNQb3dlclBsYXlJbmZvW2ldLnVjTnVtUGNpRUxhbmVzOworCQkJCQltaXNjID0gbGUzMl90b19jcHUocG93ZXJfaW5mby0+aW5mb18yLmFzUG93ZXJQbGF5SW5mb1tpXS51bE1pc2NJbmZvKTsKKwkJCQkJbWlzYzIgPSBsZTMyX3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvXzIuYXNQb3dlclBsYXlJbmZvW2ldLnVsTWlzY0luZm8yKTsKKwkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX1ZPTFRBR0VfRFJPUF9TVVBQT1JUKSB7CisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPQorCQkJCQkJCVZPTFRBR0VfR1BJTzsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuZ3BpbyA9CisJCQkJCQkJcmFkZW9uX2xvb2t1cF9ncGlvKHJkZXYsCisJCQkJCQkJcG93ZXJfaW5mby0+aW5mb18yLmFzUG93ZXJQbGF5SW5mb1tpXS51Y1ZvbHRhZ2VEcm9wSW5kZXgpOworCQkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX1ZPTFRBR0VfRFJPUF9BQ1RJVkVfSElHSCkKKwkJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmFjdGl2ZV9oaWdoID0KKwkJCQkJCQkJdHJ1ZTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmFjdGl2ZV9oaWdoID0KKwkJCQkJCQkJZmFsc2U7CisJCQkJCX0gZWxzZSBpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fUFJPR1JBTV9WT0xUQUdFKSB7CisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPQorCQkJCQkJCVZPTFRBR0VfVkREQzsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudmRkY19pZCA9CisJCQkJCQkJcG93ZXJfaW5mby0+aW5mb18yLmFzUG93ZXJQbGF5SW5mb1tpXS51Y1ZvbHRhZ2VEcm9wSW5kZXg7CisJCQkJCX0KKwkJCQkJLyogb3JkZXIgbWF0dGVycyEgKi8KKwkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX1BPV0VSX1NBVklOR19NT0RFKQorCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfUE9XRVJTQVZFOworCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fREVGQVVMVF9EQ19TVEFURV9FTlRSWV9UUlVFKQorCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfQkFUVEVSWTsKKwkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX0RFRkFVTFRfTE9XX0RDX1NUQVRFX0VOVFJZX1RSVUUpCisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9CQVRURVJZOworCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fTE9BRF9CQUxBTkNFX0VOKQorCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfQkFMQU5DRUQ7CisJCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT18zRF9BQ0NFTEVSQVRJT05fRU4pCisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9QRVJGT1JNQU5DRTsKKwkJCQkJaWYgKG1pc2MyICYgQVRPTV9QTV9NSVNDSU5GTzJfU1lTVEVNX0FDX0xJVEVfTU9ERSkKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0JBTEFOQ0VEOworCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fRFJJVkVSX0RFRkFVTFRfTU9ERSkgeworCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfREVGQVVMVDsKKwkJCQkJCXJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGUgPSAmcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdOworCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmRlZmF1bHRfY2xvY2tfbW9kZSA9CisJCQkJCQkJJnJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdOworCQkJCQl9CisJCQkJCXN0YXRlX2luZGV4Kys7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMzoKKwkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm51bV9jbG9ja19tb2RlcyA9IDE7CisJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPQorCQkJCQkJbGUzMl90b19jcHUocG93ZXJfaW5mby0+aW5mb18zLmFzUG93ZXJQbGF5SW5mb1tpXS51bE1lbW9yeUNsb2NrKTsKKwkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA9CisJCQkJCQlsZTMyX3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvXzMuYXNQb3dlclBsYXlJbmZvW2ldLnVsRW5naW5lQ2xvY2spOworCQkJCQkvKiBza2lwIGludmFsaWQgbW9kZXMgKi8KKwkJCQkJaWYgKChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5tY2xrID09IDApIHx8CisJCQkJCSAgICAocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA9PSAwKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQkvKiBza2lwIG92ZXJjbG9jayBtb2RlcyBmb3Igbm93ICovCisJCQkJCWlmICgocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0ubWNsayA+CisJCQkJCSAgICAgcmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrICsgUkFERU9OX01PREVfT1ZFUkNMT0NLX01BUkdJTikgfHwKKwkJCQkJICAgIChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS5zY2xrID4KKwkJCQkJICAgICByZGV2LT5jbG9jay5kZWZhdWx0X3NjbGsgKyBSQURFT05fTU9ERV9PVkVSQ0xPQ0tfTUFSR0lOKSkKKwkJCQkJCWNvbnRpbnVlOworCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubm9uX2Nsb2NrX2luZm8ucGNpZV9sYW5lcyA9CisJCQkJCQlwb3dlcl9pbmZvLT5pbmZvXzMuYXNQb3dlclBsYXlJbmZvW2ldLnVjTnVtUGNpRUxhbmVzOworCQkJCQltaXNjID0gbGUzMl90b19jcHUocG93ZXJfaW5mby0+aW5mb18zLmFzUG93ZXJQbGF5SW5mb1tpXS51bE1pc2NJbmZvKTsKKwkJCQkJbWlzYzIgPSBsZTMyX3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvXzMuYXNQb3dlclBsYXlJbmZvW2ldLnVsTWlzY0luZm8yKTsKKwkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX1ZPTFRBR0VfRFJPUF9TVVBQT1JUKSB7CisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPQorCQkJCQkJCVZPTFRBR0VfR1BJTzsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuZ3BpbyA9CisJCQkJCQkJcmFkZW9uX2xvb2t1cF9ncGlvKHJkZXYsCisJCQkJCQkJcG93ZXJfaW5mby0+aW5mb18zLmFzUG93ZXJQbGF5SW5mb1tpXS51Y1ZvbHRhZ2VEcm9wSW5kZXgpOworCQkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX1ZPTFRBR0VfRFJPUF9BQ1RJVkVfSElHSCkKKwkJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmFjdGl2ZV9oaWdoID0KKwkJCQkJCQkJdHJ1ZTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmFjdGl2ZV9oaWdoID0KKwkJCQkJCQkJZmFsc2U7CisJCQkJCX0gZWxzZSBpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fUFJPR1JBTV9WT0xUQUdFKSB7CisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnR5cGUgPQorCQkJCQkJCVZPTFRBR0VfVkREQzsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudmRkY19pZCA9CisJCQkJCQkJcG93ZXJfaW5mby0+aW5mb18zLmFzUG93ZXJQbGF5SW5mb1tpXS51Y1ZvbHRhZ2VEcm9wSW5kZXg7CisJCQkJCQlpZiAobWlzYzIgJiBBVE9NX1BNX01JU0NJTkZPMl9WRERDSV9EWU5BTUlDX1ZPTFRBR0VfRU4pIHsKKwkJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLnZkZGNpX2VuYWJsZWQgPQorCQkJCQkJCQl0cnVlOworCQkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudmRkY2lfaWQgPQorCQkJCQkJCXBvd2VyX2luZm8tPmluZm9fMy5hc1Bvd2VyUGxheUluZm9baV0udWNWRERDSV9Wb2x0YWdlRHJvcEluZGV4OworCQkJCQkJfQorCQkJCQl9CisJCQkJCS8qIG9yZGVyIG1hdHRlcnMhICovCisJCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19QT1dFUl9TQVZJTkdfTU9ERSkKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX1BPV0VSU0FWRTsKKwkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX0RFRkFVTFRfRENfU1RBVEVfRU5UUllfVFJVRSkKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0JBVFRFUlk7CisJCQkJCWlmIChtaXNjICYgQVRPTV9QTV9NSVNDSU5GT19ERUZBVUxUX0xPV19EQ19TVEFURV9FTlRSWV9UUlVFKQorCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfQkFUVEVSWTsKKwkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX0xPQURfQkFMQU5DRV9FTikKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0JBTEFOQ0VEOworCQkJCQlpZiAobWlzYyAmIEFUT01fUE1fTUlTQ0lORk9fM0RfQUNDRUxFUkFUSU9OX0VOKQorCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJCQkJCVBPV0VSX1NUQVRFX1RZUEVfUEVSRk9STUFOQ0U7CisJCQkJCWlmIChtaXNjMiAmIEFUT01fUE1fTUlTQ0lORk8yX1NZU1RFTV9BQ19MSVRFX01PREUpCisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9CQUxBTkNFRDsKKwkJCQkJaWYgKG1pc2MgJiBBVE9NX1BNX01JU0NJTkZPX0RSSVZFUl9ERUZBVUxUX01PREUpIHsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0RFRkFVTFQ7CisJCQkJCQlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlID0gJnJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XTsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5kZWZhdWx0X2Nsb2NrX21vZGUgPQorCQkJCQkJCSZyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXTsKKwkJCQkJfQorCQkJCQlzdGF0ZV9pbmRleCsrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAoZnJldiA9PSA0KSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgcG93ZXJfaW5mby0+aW5mb180LnVjTnVtU3RhdGVzOyBpKyspIHsKKwkJCQltb2RlX2luZGV4ID0gMDsKKwkJCQlwb3dlcl9zdGF0ZSA9IChzdHJ1Y3QgX0FUT01fUFBMSUJfU1RBVEUgKikKKwkJCQkJKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsKKwkJCQkJIGRhdGFfb2Zmc2V0ICsKKwkJCQkJIGxlMTZfdG9fY3B1KHBvd2VyX2luZm8tPmluZm9fNC51c1N0YXRlQXJyYXlPZmZzZXQpICsKKwkJCQkJIGkgKiBwb3dlcl9pbmZvLT5pbmZvXzQudWNTdGF0ZUVudHJ5U2l6ZSk7CisJCQkJbm9uX2Nsb2NrX2luZm8gPSAoc3RydWN0IF9BVE9NX1BQTElCX05PTkNMT0NLX0lORk8gKikKKwkJCQkJKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsKKwkJCQkJIGRhdGFfb2Zmc2V0ICsKKwkJCQkJIGxlMTZfdG9fY3B1KHBvd2VyX2luZm8tPmluZm9fNC51c05vbkNsb2NrSW5mb0FycmF5T2Zmc2V0KSArCisJCQkJCSAocG93ZXJfc3RhdGUtPnVjTm9uQ2xvY2tTdGF0ZUluZGV4ICoKKwkJCQkJICBwb3dlcl9pbmZvLT5pbmZvXzQudWNOb25DbG9ja1NpemUpKTsKKwkJCQlmb3IgKGogPSAwOyBqIDwgKHBvd2VyX2luZm8tPmluZm9fNC51Y1N0YXRlRW50cnlTaXplIC0gMSk7IGorKykgeworCQkJCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKSB7CisJCQkJCQlzdHJ1Y3QgX0FUT01fUFBMSUJfUlM3ODBfQ0xPQ0tfSU5GTyAqY2xvY2tfaW5mbyA9CisJCQkJCQkJKHN0cnVjdCBfQVRPTV9QUExJQl9SUzc4MF9DTE9DS19JTkZPICopCisJCQkJCQkJKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsKKwkJCQkJCQkgZGF0YV9vZmZzZXQgKworCQkJCQkJCSBsZTE2X3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvXzQudXNDbG9ja0luZm9BcnJheU9mZnNldCkgKworCQkJCQkJCSAocG93ZXJfc3RhdGUtPnVjQ2xvY2tTdGF0ZUluZGljZXNbal0gKgorCQkJCQkJCSAgcG93ZXJfaW5mby0+aW5mb180LnVjQ2xvY2tJbmZvU2l6ZSkpOworCQkJCQkJc2NsayA9IGxlMTZfdG9fY3B1KGNsb2NrX2luZm8tPnVzTG93RW5naW5lQ2xvY2tMb3cpOworCQkJCQkJc2NsayB8PSBjbG9ja19pbmZvLT51Y0xvd0VuZ2luZUNsb2NrSGlnaCA8PCAxNjsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnNjbGsgPSBzY2xrOworCQkJCQkJLyogc2tpcCBpbnZhbGlkIG1vZGVzICovCisJCQkJCQlpZiAocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0uc2NsayA9PSAwKQorCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJLyogc2tpcCBvdmVyY2xvY2sgbW9kZXMgZm9yIG5vdyAqLworCQkJCQkJaWYgKHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnNjbGsgPgorCQkJCQkJICAgIHJkZXYtPmNsb2NrLmRlZmF1bHRfc2NsayArIFJBREVPTl9NT0RFX09WRVJDTE9DS19NQVJHSU4pCisJCQkJCQkJY29udGludWU7CisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS52b2x0YWdlLnR5cGUgPQorCQkJCQkJCVZPTFRBR0VfU1c7CisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS52b2x0YWdlLnZvbHRhZ2UgPQorCQkJCQkJCWNsb2NrX2luZm8tPnVzVkREQzsKKwkJCQkJCW1vZGVfaW5kZXgrKzsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXN0cnVjdCBfQVRPTV9QUExJQl9SNjAwX0NMT0NLX0lORk8gKmNsb2NrX2luZm8gPQorCQkJCQkJCShzdHJ1Y3QgX0FUT01fUFBMSUJfUjYwMF9DTE9DS19JTkZPICopCisJCQkJCQkJKG1vZGVfaW5mby0+YXRvbV9jb250ZXh0LT5iaW9zICsKKwkJCQkJCQkgZGF0YV9vZmZzZXQgKworCQkJCQkJCSBsZTE2X3RvX2NwdShwb3dlcl9pbmZvLT5pbmZvXzQudXNDbG9ja0luZm9BcnJheU9mZnNldCkgKworCQkJCQkJCSAocG93ZXJfc3RhdGUtPnVjQ2xvY2tTdGF0ZUluZGljZXNbal0gKgorCQkJCQkJCSAgcG93ZXJfaW5mby0+aW5mb180LnVjQ2xvY2tJbmZvU2l6ZSkpOworCQkJCQkJc2NsayA9IGxlMTZfdG9fY3B1KGNsb2NrX2luZm8tPnVzRW5naW5lQ2xvY2tMb3cpOworCQkJCQkJc2NsayB8PSBjbG9ja19pbmZvLT51Y0VuZ2luZUNsb2NrSGlnaCA8PCAxNjsKKwkJCQkJCW1jbGsgPSBsZTE2X3RvX2NwdShjbG9ja19pbmZvLT51c01lbW9yeUNsb2NrTG93KTsKKwkJCQkJCW1jbGsgfD0gY2xvY2tfaW5mby0+dWNNZW1vcnlDbG9ja0hpZ2ggPDwgMTY7CisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1ttb2RlX2luZGV4XS5tY2xrID0gbWNsazsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnNjbGsgPSBzY2xrOworCQkJCQkJLyogc2tpcCBpbnZhbGlkIG1vZGVzICovCisJCQkJCQlpZiAoKHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLm1jbGsgPT0gMCkgfHwKKwkJCQkJCSAgICAocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0uc2NsayA9PSAwKSkKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCS8qIHNraXAgb3ZlcmNsb2NrIG1vZGVzIGZvciBub3cgKi8KKwkJCQkJCWlmICgocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleF0ubWNsayA+CisJCQkJCQkgICAgIHJkZXYtPmNsb2NrLmRlZmF1bHRfbWNsayArIFJBREVPTl9NT0RFX09WRVJDTE9DS19NQVJHSU4pIHx8CisJCQkJCQkgICAgKHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnNjbGsgPgorCQkJCQkJICAgICByZGV2LT5jbG9jay5kZWZhdWx0X3NjbGsgKyBSQURFT05fTU9ERV9PVkVSQ0xPQ0tfTUFSR0lOKSkKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnZvbHRhZ2UudHlwZSA9CisJCQkJCQkJVk9MVEFHRV9TVzsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvW21vZGVfaW5kZXhdLnZvbHRhZ2Uudm9sdGFnZSA9CisJCQkJCQkJY2xvY2tfaW5mby0+dXNWRERDOworCQkJCQkJbW9kZV9pbmRleCsrOworCQkJCQl9CisJCQkJfQorCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5udW1fY2xvY2tfbW9kZXMgPSBtb2RlX2luZGV4OworCQkJCWlmIChtb2RlX2luZGV4KSB7CisJCQkJCW1pc2MgPSBsZTMyX3RvX2NwdShub25fY2xvY2tfaW5mby0+dWxDYXBzQW5kU2V0dGluZ3MpOworCQkJCQltaXNjMiA9IGxlMTZfdG9fY3B1KG5vbl9jbG9ja19pbmZvLT51c0NsYXNzaWZpY2F0aW9uKTsKKwkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm5vbl9jbG9ja19pbmZvLnBjaWVfbGFuZXMgPQorCQkJCQkJKChtaXNjICYgQVRPTV9QUExJQl9QQ0lFX0xJTktfV0lEVEhfTUFTSykgPj4KKwkJCQkJCUFUT01fUFBMSUJfUENJRV9MSU5LX1dJRFRIX1NISUZUKSArIDE7CisJCQkJCXN3aXRjaCAobWlzYzIgJiBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VJX01BU0spIHsKKwkJCQkJY2FzZSBBVE9NX1BQTElCX0NMQVNTSUZJQ0FUSU9OX1VJX0JBVFRFUlk6CisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9CQVRURVJZOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9VSV9CQUxBTkNFRDoKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX0JBTEFOQ0VEOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9VSV9QRVJGT1JNQU5DRToKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQkJCQlQT1dFUl9TVEFURV9UWVBFX1BFUkZPUk1BTkNFOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQkJaWYgKG1pc2MyICYgQVRPTV9QUExJQl9DTEFTU0lGSUNBVElPTl9CT09UKSB7CisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0udHlwZSA9CisJCQkJCQkJUE9XRVJfU1RBVEVfVFlQRV9ERUZBVUxUOworCQkJCQkJcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZSA9ICZyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF07CisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZGVmYXVsdF9jbG9ja19tb2RlID0KKwkJCQkJCQkmcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bbW9kZV9pbmRleCAtIDFdOworCQkJCQl9CisJCQkJCXN0YXRlX2luZGV4Kys7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJLyogWFhYIGZpZ3VyZSBvdXQgc29tZSBnb29kIGRlZmF1bHQgbG93IHBvd2VyIG1vZGUgZm9yIGNhcmRzIHcvb3V0IHBvd2VyIHRhYmxlcyAqLworCX0KKworCWlmIChyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlID09IE5VTEwpIHsKKwkJLyogYWRkIHRoZSBkZWZhdWx0IG1vZGUgKi8KKwkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLnR5cGUgPQorCQkJUE9XRVJfU1RBVEVfVFlQRV9ERUZBVUxUOworCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0ubnVtX2Nsb2NrX21vZGVzID0gMTsKKwkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0ubWNsayA9IHJkZXYtPmNsb2NrLmRlZmF1bHRfbWNsazsKKwkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA9IHJkZXYtPmNsb2NrLmRlZmF1bHRfc2NsazsKKwkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmRlZmF1bHRfY2xvY2tfbW9kZSA9CisJCQkmcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF07CisJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudHlwZSA9IFZPTFRBR0VfTk9ORTsKKwkJaWYgKHJkZXYtPmFzaWMtPmdldF9wY2llX2xhbmVzKQorCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm5vbl9jbG9ja19pbmZvLnBjaWVfbGFuZXMgPSByYWRlb25fZ2V0X3BjaWVfbGFuZXMocmRldik7CisJCWVsc2UKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5ub25fY2xvY2tfaW5mby5wY2llX2xhbmVzID0gMTY7CisJCXJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGUgPSAmcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdOworCQlzdGF0ZV9pbmRleCsrOworCX0KKwlyZGV2LT5wbS5udW1fcG93ZXJfc3RhdGVzID0gc3RhdGVfaW5kZXg7CisKKwlyZGV2LT5wbS5jdXJyZW50X3Bvd2VyX3N0YXRlID0gcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZTsKKwlyZGV2LT5wbS5jdXJyZW50X2Nsb2NrX21vZGUgPQorCQlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlLT5kZWZhdWx0X2Nsb2NrX21vZGU7Cit9CisKIHZvaWQgcmFkZW9uX2F0b21fc2V0X2Nsb2NrX2dhdGluZyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgaW50IGVuYWJsZSkKIHsKIAlEWU5BTUlDX0NMT0NLX0dBVElOR19QU19BTExPQ0FUSU9OIGFyZ3M7CkBAIC0xMzk1LDE2ICsxODIyLDYgQEAKIAlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKIH0KIAotdm9pZCByYWRlb25fYXRvbV9zdGF0aWNfcHdybWd0X3NldHVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBpbnQgZW5hYmxlKQotewotCUVOQUJMRV9BU0lDX1NUQVRJQ19QV1JfTUdUX1BTX0FMTE9DQVRJT04gYXJnczsKLQlpbnQgaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBFbmFibGVBU0lDX1N0YXRpY1B3ck1ndCk7Ci0KLQlhcmdzLnVjRW5hYmxlID0gZW5hYmxlOwotCi0JYXRvbV9leGVjdXRlX3RhYmxlKHJkZXYtPm1vZGVfaW5mby5hdG9tX2NvbnRleHQsIGluZGV4LCAodWludDMyX3QgKikmYXJncyk7Ci19Ci0KIHVpbnQzMl90IHJhZGVvbl9hdG9tX2dldF9lbmdpbmVfY2xvY2soc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJR0VUX0VOR0lORV9DTE9DS19QU19BTExPQ0FUSU9OIGFyZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdHB4X2hhbmRsZXIuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2F0cHhfaGFuZGxlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNTU3YzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9hdHB4X2hhbmRsZXIuYwpAQCAtMCwwICsxLDI1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBSZWQgSGF0IEluYy4KKyAqIEF1dGhvciA6IERhdmUgQWlybGllIDxhaXJsaWVkQHJlZGhhdC5jb20+CisgKgorICogTGljZW5zZWQgdW5kZXIgR1BMdjIKKyAqCisgKiBBVFBYIHN1cHBvcnQgZm9yIGJvdGggSW50ZWwvQVRJCisgKi8KKyNpbmNsdWRlIDxsaW51eC92Z2Ffc3dpdGNoZXJvby5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaS5oPgorI2luY2x1ZGUgPGFjcGkvYWNwaV9idXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKworI2RlZmluZSBBVFBYX1ZFUlNJT04gMAorI2RlZmluZSBBVFBYX0dQVV9QV1IgMgorI2RlZmluZSBBVFBYX01VWF9TRUxFQ1QgMworCisjZGVmaW5lIEFUUFhfSU5URUdSQVRFRCAwCisjZGVmaW5lIEFUUFhfRElTQ1JFVEUgMQorCisjZGVmaW5lIEFUUFhfTVVYX0lHRCAwCisjZGVmaW5lIEFUUFhfTVVYX0RJU0NSRVRFIDEKKworc3RhdGljIHN0cnVjdCByYWRlb25fYXRweF9wcml2IHsKKwlib29sIGF0cHhfZGV0ZWN0ZWQ7CisJLyogaGFuZGxlIGZvciBkZXZpY2UgLSBhbmQgYXRweCAqLworCWFjcGlfaGFuZGxlIGRoYW5kbGU7CisJYWNwaV9oYW5kbGUgYXRweF9oYW5kbGU7CisJYWNwaV9oYW5kbGUgYXRybV9oYW5kbGU7Cit9IHJhZGVvbl9hdHB4X3ByaXY7CisKKy8qIHJldHJpZXZlIHRoZSBST00gaW4gNGsgYmxvY2tzICovCitzdGF0aWMgaW50IHJhZGVvbl9hdHJtX2NhbGwoYWNwaV9oYW5kbGUgYXRybV9oYW5kbGUsIHVpbnQ4X3QgKmJpb3MsCisJCQkgICAgaW50IG9mZnNldCwgaW50IGxlbikKK3sKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJdW5pb24gYWNwaV9vYmplY3QgYXRybV9hcmdfZWxlbWVudHNbMl0sICpvYmo7CisJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgYXRybV9hcmc7CisJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEx9OworCisJYXRybV9hcmcuY291bnQgPSAyOworCWF0cm1fYXJnLnBvaW50ZXIgPSAmYXRybV9hcmdfZWxlbWVudHNbMF07CisKKwlhdHJtX2FyZ19lbGVtZW50c1swXS50eXBlID0gQUNQSV9UWVBFX0lOVEVHRVI7CisJYXRybV9hcmdfZWxlbWVudHNbMF0uaW50ZWdlci52YWx1ZSA9IG9mZnNldDsKKworCWF0cm1fYXJnX2VsZW1lbnRzWzFdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlhdHJtX2FyZ19lbGVtZW50c1sxXS5pbnRlZ2VyLnZhbHVlID0gbGVuOworCisJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QoYXRybV9oYW5kbGUsIE5VTEwsICZhdHJtX2FyZywgJmJ1ZmZlcik7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXByaW50aygiZmFpbGVkIHRvIGV2YWx1YXRlIEFUUk0gZ290ICVzXG4iLCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW9iaiA9ICh1bmlvbiBhY3BpX29iamVjdCAqKWJ1ZmZlci5wb2ludGVyOworCW1lbWNweShiaW9zK29mZnNldCwgb2JqLT5idWZmZXIucG9pbnRlciwgbGVuKTsKKwlrZnJlZShidWZmZXIucG9pbnRlcik7CisJcmV0dXJuIGxlbjsKK30KKworYm9vbCByYWRlb25fYXRybV9zdXBwb3J0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJLyogZ2V0IHRoZSBkaXNjcmV0ZSBST00gb25seSB2aWEgQVRSTSAqLworCWlmICghcmFkZW9uX2F0cHhfcHJpdi5hdHB4X2RldGVjdGVkKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAocmFkZW9uX2F0cHhfcHJpdi5kaGFuZGxlID09IERFVklDRV9BQ1BJX0hBTkRMRSgmcGRldi0+ZGV2KSkKKwkJcmV0dXJuIGZhbHNlOworCXJldHVybiB0cnVlOworfQorCisKK2ludCByYWRlb25fYXRybV9nZXRfYmlvc19jaHVuayh1aW50OF90ICpiaW9zLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKQoreworCXJldHVybiByYWRlb25fYXRybV9jYWxsKHJhZGVvbl9hdHB4X3ByaXYuYXRybV9oYW5kbGUsIGJpb3MsIG9mZnNldCwgbGVuKTsKK30KKworc3RhdGljIGludCByYWRlb25fYXRweF9nZXRfdmVyc2lvbihhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXVuaW9uIGFjcGlfb2JqZWN0IGF0cHhfYXJnX2VsZW1lbnRzWzJdLCAqb2JqOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGF0cHhfYXJnOworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CisKKwlhdHB4X2FyZy5jb3VudCA9IDI7CisJYXRweF9hcmcucG9pbnRlciA9ICZhdHB4X2FyZ19lbGVtZW50c1swXTsKKworCWF0cHhfYXJnX2VsZW1lbnRzWzBdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlhdHB4X2FyZ19lbGVtZW50c1swXS5pbnRlZ2VyLnZhbHVlID0gQVRQWF9WRVJTSU9OOworCisJYXRweF9hcmdfZWxlbWVudHNbMV0udHlwZSA9IEFDUElfVFlQRV9JTlRFR0VSOworCWF0cHhfYXJnX2VsZW1lbnRzWzFdLmludGVnZXIudmFsdWUgPSBBVFBYX1ZFUlNJT047CisKKwlzdGF0dXMgPSBhY3BpX2V2YWx1YXRlX29iamVjdChoYW5kbGUsIE5VTEwsICZhdHB4X2FyZywgJmJ1ZmZlcik7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXByaW50aygiJXM6IGZhaWxlZCB0byBjYWxsIEFUUFg6ICVzXG4iLCBfX2Z1bmNfXywgYWNwaV9mb3JtYXRfZXhjZXB0aW9uKHN0YXR1cykpOworCQlyZXR1cm4gLUVOT1NZUzsKKwl9CisJb2JqID0gKHVuaW9uIGFjcGlfb2JqZWN0ICopYnVmZmVyLnBvaW50ZXI7CisJaWYgKG9iaiAmJiAob2JqLT50eXBlID09IEFDUElfVFlQRV9CVUZGRVIpKQorCQlwcmludGsoS0VSTl9JTkZPICJyYWRlb24gYXRweDogdmVyc2lvbiBpcyAlZFxuIiwgKigodTggKikob2JqLT5idWZmZXIucG9pbnRlcikgKyAyKSk7CisJa2ZyZWUoYnVmZmVyLnBvaW50ZXIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJhZGVvbl9hdHB4X2V4ZWN1dGUoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgY21kX2lkLCB1MTYgdmFsdWUpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXVuaW9uIGFjcGlfb2JqZWN0IGF0cHhfYXJnX2VsZW1lbnRzWzJdOworCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IGF0cHhfYXJnOworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7IEFDUElfQUxMT0NBVEVfQlVGRkVSLCBOVUxMIH07CisJdWludDhfdCBidWZbNF0gPSB7MH07CisKKwlpZiAoIWhhbmRsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhdHB4X2FyZy5jb3VudCA9IDI7CisJYXRweF9hcmcucG9pbnRlciA9ICZhdHB4X2FyZ19lbGVtZW50c1swXTsKKworCWF0cHhfYXJnX2VsZW1lbnRzWzBdLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKKwlhdHB4X2FyZ19lbGVtZW50c1swXS5pbnRlZ2VyLnZhbHVlID0gY21kX2lkOworCisJYnVmWzJdID0gdmFsdWUgJiAweGZmOworCWJ1ZlszXSA9ICh2YWx1ZSA+PiA4KSAmIDB4ZmY7CisKKwlhdHB4X2FyZ19lbGVtZW50c1sxXS50eXBlID0gQUNQSV9UWVBFX0JVRkZFUjsKKwlhdHB4X2FyZ19lbGVtZW50c1sxXS5idWZmZXIubGVuZ3RoID0gNDsKKwlhdHB4X2FyZ19lbGVtZW50c1sxXS5idWZmZXIucG9pbnRlciA9IGJ1ZjsKKworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGhhbmRsZSwgTlVMTCwgJmF0cHhfYXJnLCAmYnVmZmVyKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKKwkJcHJpbnRrKCIlczogZmFpbGVkIHRvIGNhbGwgQVRQWDogJXNcbiIsIF9fZnVuY19fLCBhY3BpX2Zvcm1hdF9leGNlcHRpb24oc3RhdHVzKSk7CisJCXJldHVybiAtRU5PU1lTOworCX0KKwlrZnJlZShidWZmZXIucG9pbnRlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCByYWRlb25fYXRweF9zZXRfZGlzY3JldGVfc3RhdGUoYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgc3RhdGUpCit7CisJcmV0dXJuIHJhZGVvbl9hdHB4X2V4ZWN1dGUoaGFuZGxlLCBBVFBYX0dQVV9QV1IsIHN0YXRlKTsKK30KKworc3RhdGljIGludCByYWRlb25fYXRweF9zd2l0Y2hfbXV4KGFjcGlfaGFuZGxlIGhhbmRsZSwgaW50IG11eF9pZCkKK3sKKwlyZXR1cm4gcmFkZW9uX2F0cHhfZXhlY3V0ZShoYW5kbGUsIEFUUFhfTVVYX1NFTEVDVCwgbXV4X2lkKTsKK30KKworCitzdGF0aWMgaW50IHJhZGVvbl9hdHB4X3N3aXRjaHRvKGVudW0gdmdhX3N3aXRjaGVyb29fY2xpZW50X2lkIGlkKQoreworCWlmIChpZCA9PSBWR0FfU1dJVENIRVJPT19JR0QpCisJCXJhZGVvbl9hdHB4X3N3aXRjaF9tdXgocmFkZW9uX2F0cHhfcHJpdi5hdHB4X2hhbmRsZSwgMCk7CisJZWxzZQorCQlyYWRlb25fYXRweF9zd2l0Y2hfbXV4KHJhZGVvbl9hdHB4X3ByaXYuYXRweF9oYW5kbGUsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJhZGVvbl9hdHB4X3Bvd2VyX3N0YXRlKGVudW0gdmdhX3N3aXRjaGVyb29fY2xpZW50X2lkIGlkLAorCQkJCSAgIGVudW0gdmdhX3N3aXRjaGVyb29fc3RhdGUgc3RhdGUpCit7CisJLyogb24gdzUwMCBBQ1BJIGNhbid0IGNoYW5nZSBpbnRlbCBncHUgc3RhdGUgKi8KKwlpZiAoaWQgPT0gVkdBX1NXSVRDSEVST09fSUdEKQorCQlyZXR1cm4gMDsKKworCXJhZGVvbl9hdHB4X3NldF9kaXNjcmV0ZV9zdGF0ZShyYWRlb25fYXRweF9wcml2LmF0cHhfaGFuZGxlLCBzdGF0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBib29sIHJhZGVvbl9hdHB4X3BjaV9wcm9iZV9oYW5kbGUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJYWNwaV9oYW5kbGUgZGhhbmRsZSwgYXRweF9oYW5kbGUsIGF0cm1faGFuZGxlOworCWFjcGlfc3RhdHVzIHN0YXR1czsKKworCWRoYW5kbGUgPSBERVZJQ0VfQUNQSV9IQU5ETEUoJnBkZXYtPmRldik7CisJaWYgKCFkaGFuZGxlKQorCQlyZXR1cm4gZmFsc2U7CisKKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoZGhhbmRsZSwgIkFUUFgiLCAmYXRweF9oYW5kbGUpOworCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKKwkJcmV0dXJuIGZhbHNlOworCisJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGRoYW5kbGUsICJBVFJNIiwgJmF0cm1faGFuZGxlKTsKKwlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXJldHVybiBmYWxzZTsKKworCXJhZGVvbl9hdHB4X3ByaXYuZGhhbmRsZSA9IGRoYW5kbGU7CisJcmFkZW9uX2F0cHhfcHJpdi5hdHB4X2hhbmRsZSA9IGF0cHhfaGFuZGxlOworCXJhZGVvbl9hdHB4X3ByaXYuYXRybV9oYW5kbGUgPSBhdHJtX2hhbmRsZTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGludCByYWRlb25fYXRweF9pbml0KHZvaWQpCit7CisJLyogc2V0IHVwIHRoZSBBVFBYIGhhbmRsZSAqLworCisJcmFkZW9uX2F0cHhfZ2V0X3ZlcnNpb24ocmFkZW9uX2F0cHhfcHJpdi5hdHB4X2hhbmRsZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmFkZW9uX2F0cHhfZ2V0X2NsaWVudF9pZChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpZiAocmFkZW9uX2F0cHhfcHJpdi5kaGFuZGxlID09IERFVklDRV9BQ1BJX0hBTkRMRSgmcGRldi0+ZGV2KSkKKwkJcmV0dXJuIFZHQV9TV0lUQ0hFUk9PX0lHRDsKKwllbHNlCisJCXJldHVybiBWR0FfU1dJVENIRVJPT19ESVM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdmdhX3N3aXRjaGVyb29faGFuZGxlciByYWRlb25fYXRweF9oYW5kbGVyID0geworCS5zd2l0Y2h0byA9IHJhZGVvbl9hdHB4X3N3aXRjaHRvLAorCS5wb3dlcl9zdGF0ZSA9IHJhZGVvbl9hdHB4X3Bvd2VyX3N0YXRlLAorCS5pbml0ID0gcmFkZW9uX2F0cHhfaW5pdCwKKwkuZ2V0X2NsaWVudF9pZCA9IHJhZGVvbl9hdHB4X2dldF9jbGllbnRfaWQsCit9OworCitzdGF0aWMgYm9vbCByYWRlb25fYXRweF9kZXRlY3Qodm9pZCkKK3sKKwljaGFyIGFjcGlfbWV0aG9kX25hbWVbMjU1XSA9IHsgMCB9OworCXN0cnVjdCBhY3BpX2J1ZmZlciBidWZmZXIgPSB7c2l6ZW9mKGFjcGlfbWV0aG9kX25hbWUpLCBhY3BpX21ldGhvZF9uYW1lfTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CisJYm9vbCBoYXNfYXRweCA9IGZhbHNlOworCWludCB2Z2FfY291bnQgPSAwOworCisJd2hpbGUgKChwZGV2ID0gcGNpX2dldF9jbGFzcyhQQ0lfQ0xBU1NfRElTUExBWV9WR0EgPDwgOCwgcGRldikpICE9IE5VTEwpIHsKKwkJdmdhX2NvdW50Kys7CisKKwkJaGFzX2F0cHggfD0gKHJhZGVvbl9hdHB4X3BjaV9wcm9iZV9oYW5kbGUocGRldikgPT0gdHJ1ZSk7CisJfQorCisJaWYgKGhhc19hdHB4ICYmIHZnYV9jb3VudCA9PSAyKSB7CisJCWFjcGlfZ2V0X25hbWUocmFkZW9uX2F0cHhfcHJpdi5hdHB4X2hhbmRsZSwgQUNQSV9GVUxMX1BBVEhOQU1FLCAmYnVmZmVyKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiVkdBIHN3aXRjaGVyb286IGRldGVjdGVkIHN3aXRjaGluZyBtZXRob2QgJXMgaGFuZGxlXG4iLAorCQkgICAgICAgYWNwaV9tZXRob2RfbmFtZSk7CisJCXJhZGVvbl9hdHB4X3ByaXYuYXRweF9kZXRlY3RlZCA9IHRydWU7CisJCXJldHVybiB0cnVlOworCX0KKwlyZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgcmFkZW9uX3JlZ2lzdGVyX2F0cHhfaGFuZGxlcih2b2lkKQoreworCWJvb2wgcjsKKworCS8qIGRldGVjdCBpZiB3ZSBoYXZlIGFueSBBVFBYICsgMiBWR0EgaW4gdGhlIHN5c3RlbSAqLworCXIgPSByYWRlb25fYXRweF9kZXRlY3QoKTsKKwlpZiAoIXIpCisJCXJldHVybjsKKworCXZnYV9zd2l0Y2hlcm9vX3JlZ2lzdGVyX2hhbmRsZXIoJnJhZGVvbl9hdHB4X2hhbmRsZXIpOworfQorCit2b2lkIHJhZGVvbl91bnJlZ2lzdGVyX2F0cHhfaGFuZGxlcih2b2lkKQoreworCXZnYV9zd2l0Y2hlcm9vX3VucmVnaXN0ZXJfaGFuZGxlcigpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fYmlvcy5jCmluZGV4IDkwNjkyMTcuLjU1NzI0MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Jpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9iaW9zLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJyYWRlb24uaCIKICNpbmNsdWRlICJhdG9tLmgiCiAKKyNpbmNsdWRlIDxsaW51eC92Z2Ffc3dpdGNoZXJvby5oPgogLyoKICAqIEJJT1MuCiAgKi8KQEAgLTYyLDcgKzYzLDcgQEAKIAkJaW91bm1hcChiaW9zKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQltZW1jcHkocmRldi0+YmlvcywgYmlvcywgc2l6ZSk7CisJbWVtY3B5X2Zyb21pbyhyZGV2LT5iaW9zLCBiaW9zLCBzaXplKTsKIAlpb3VubWFwKGJpb3MpOwogCXJldHVybiB0cnVlOwogfQpAQCAtOTMsNiArOTQsMzggQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorLyogQVRSTSBpcyB1c2VkIHRvIGdldCB0aGUgQklPUyBvbiB0aGUgZGlzY3JldGUgY2FyZHMgaW4KKyAqIGR1YWwtZ3B1IHN5c3RlbXMuCisgKi8KK3N0YXRpYyBib29sIHJhZGVvbl9hdHJtX2dldF9iaW9zKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCByZXQ7CisJaW50IHNpemUgPSA2NCAqIDEwMjQ7CisJaW50IGk7CisKKwlpZiAoIXJhZGVvbl9hdHJtX3N1cHBvcnRlZChyZGV2LT5wZGV2KSkKKwkJcmV0dXJuIGZhbHNlOworCisJcmRldi0+YmlvcyA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZGV2LT5iaW9zKSB7CisJCURSTV9FUlJPUigiVW5hYmxlIHRvIGFsbG9jYXRlIGJpb3NcbiIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNpemUgLyBBVFJNX0JJT1NfUEFHRTsgaSsrKSB7CisJCXJldCA9IHJhZGVvbl9hdHJtX2dldF9iaW9zX2NodW5rKHJkZXYtPmJpb3MsCisJCQkJCQkgKGkgKiBBVFJNX0JJT1NfUEFHRSksCisJCQkJCQkgQVRSTV9CSU9TX1BBR0UpOworCQlpZiAocmV0IDw9IDApCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA9PSAwIHx8IHJkZXYtPmJpb3NbMF0gIT0gMHg1NSB8fCByZGV2LT5iaW9zWzFdICE9IDB4YWEpIHsKKwkJa2ZyZWUocmRldi0+Ymlvcyk7CisJCXJldHVybiBmYWxzZTsKKwl9CisJcmV0dXJuIHRydWU7Cit9CiBzdGF0aWMgYm9vbCByNzAwX3JlYWRfZGlzYWJsZWRfYmlvcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAl1aW50MzJfdCB2aXBoX2NvbnRyb2w7CkBAIC0zODgsMTYgKzQyMSwxNiBAQAogCQlyZXR1cm4gbGVnYWN5X3JlYWRfZGlzYWJsZWRfYmlvcyhyZGV2KTsKIH0KIAorCiBib29sIHJhZGVvbl9nZXRfYmlvcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKIAlib29sIHI7CiAJdWludDE2X3QgdG1wOwogCi0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkgeworCXIgPSByYWRlb25fYXRybV9nZXRfYmlvcyhyZGV2KTsKKwlpZiAociA9PSBmYWxzZSkKIAkJciA9IGlncF9yZWFkX2Jpb3NfZnJvbV92cmFtKHJkZXYpOwotCQlpZiAociA9PSBmYWxzZSkKLQkJCXIgPSByYWRlb25fcmVhZF9iaW9zKHJkZXYpOwotCX0gZWxzZQorCWlmIChyID09IGZhbHNlKQogCQlyID0gcmFkZW9uX3JlYWRfYmlvcyhyZGV2KTsKIAlpZiAociA9PSBmYWxzZSkgewogCQlyID0gcmFkZW9uX3JlYWRfZGlzYWJsZWRfYmlvcyhyZGV2KTsKQEAgLTQwOCw2ICs0NDEsMTMgQEAKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAlpZiAocmRldi0+Ymlvc1swXSAhPSAweDU1IHx8IHJkZXYtPmJpb3NbMV0gIT0gMHhhYSkgeworCQlwcmludGsoIkJJT1Mgc2lnbmF0dXJlIGluY29ycmVjdCAleCAleFxuIiwgcmRldi0+Ymlvc1swXSwgcmRldi0+Ymlvc1sxXSk7CisJCWdvdG8gZnJlZV9iaW9zOworCX0KKworCXRtcCA9IFJCSU9TMTYoMHgxOCk7CisJaWYgKFJCSU9TOCh0bXAgKyAweDE0KSAhPSAweDApIHsKKwkJRFJNX0lORk8oIk5vdCBhbiB4ODYgQklPUyBST00sIG5vdCB1c2luZy5cbiIpOwogCQlnb3RvIGZyZWVfYmlvczsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nsb2Nrcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKaW5kZXggNzNjNDQwNS4uZjY0OTM2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY2xvY2tzLmMKQEAgLTk2LDYgKzk2LDcgQEAKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJc3RydWN0IHJhZGVvbl9wbGwgKnAxcGxsID0gJnJkZXYtPmNsb2NrLnAxcGxsOwogCXN0cnVjdCByYWRlb25fcGxsICpwMnBsbCA9ICZyZGV2LT5jbG9jay5wMnBsbDsKKwlzdHJ1Y3QgcmFkZW9uX3BsbCAqZGNwbGwgPSAmcmRldi0+Y2xvY2suZGNwbGw7CiAJc3RydWN0IHJhZGVvbl9wbGwgKnNwbGwgPSAmcmRldi0+Y2xvY2suc3BsbDsKIAlzdHJ1Y3QgcmFkZW9uX3BsbCAqbXBsbCA9ICZyZGV2LT5jbG9jay5tcGxsOwogCWludCByZXQ7CkBAIC0yMDQsNiArMjA1LDE3IEBACiAJCXAycGxsLT5tYXhfZnJhY19mZWVkYmFja19kaXYgPSAwOwogCX0KIAorCS8qIGRjcGxsIGlzIERDRTQgb25seSAqLworCWRjcGxsLT5taW5fcG9zdF9kaXYgPSAyOworCWRjcGxsLT5tYXhfcG9zdF9kaXYgPSAweDdmOworCWRjcGxsLT5taW5fZnJhY19mZWVkYmFja19kaXYgPSAwOworCWRjcGxsLT5tYXhfZnJhY19mZWVkYmFja19kaXYgPSA5OworCWRjcGxsLT5taW5fcmVmX2RpdiA9IDI7CisJZGNwbGwtPm1heF9yZWZfZGl2ID0gMHgzZmY7CisJZGNwbGwtPm1pbl9mZWVkYmFja19kaXYgPSA0OworCWRjcGxsLT5tYXhfZmVlZGJhY2tfZGl2ID0gMHhmZmY7CisJZGNwbGwtPmJlc3RfdmNvID0gMDsKKwogCXAxcGxsLT5taW5fcmVmX2RpdiA9IDI7CiAJcDFwbGwtPm1heF9yZWZfZGl2ID0gMHgzZmY7CiAJcDFwbGwtPm1pbl9mZWVkYmFja19kaXYgPSA0OwpAQCAtODQ2LDggKzg1OCwxMCBAQAogCS8qIFhYWCBtYWtlIHN1cmUgZW5naW5lIGlzIGlkbGUgKi8KIAogCWlmIChyYWRlb25fZHluY2xrcyAhPSAtMSkgewotCQlpZiAocmFkZW9uX2R5bmNsa3MpCi0JCQlyYWRlb25fc2V0X2Nsb2NrX2dhdGluZyhyZGV2LCAxKTsKKwkJaWYgKHJhZGVvbl9keW5jbGtzKSB7CisJCQlpZiAocmRldi0+YXNpYy0+c2V0X2Nsb2NrX2dhdGluZykKKwkJCQlyYWRlb25fc2V0X2Nsb2NrX2dhdGluZyhyZGV2LCAxKTsKKwkJfQogCX0KIAlyYWRlb25fYXBwbHlfY2xvY2tfcXVpcmtzKHJkZXYpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29tYmlvcy5jCmluZGV4IDIyZDQ3NjEuLmU5ZWEzOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NvbWJpb3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb21iaW9zLmMKQEAgLTE1MCw2ICsxNTAsOSBAQAogCWludCByZXY7CiAJdWludDE2X3Qgb2Zmc2V0ID0gMCwgY2hlY2tfb2Zmc2V0OwogCisJaWYgKCFyZGV2LT5iaW9zKQorCQlyZXR1cm4gMDsKKwogCXN3aXRjaCAodGFibGUpIHsKIAkJLyogYWJzb2x1dGUgb2Zmc2V0IHRhYmxlcyAqLwogCWNhc2UgQ09NQklPU19BU0lDX0lOSVRfMV9UQUJMRToKQEAgLTQ0Myw2ICs0NDYsMzkgQEAKIAogfQogCitib29sIHJhZGVvbl9jb21iaW9zX2NoZWNrX2hhcmRjb2RlZF9lZGlkKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCBlZGlkX2luZm87CisJc3RydWN0IGVkaWQgKmVkaWQ7CisJZWRpZF9pbmZvID0gY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KHJkZXYtPmRkZXYsIENPTUJJT1NfSEFSRENPREVEX0VESURfVEFCTEUpOworCWlmICghZWRpZF9pbmZvKQorCQlyZXR1cm4gZmFsc2U7CisKKwllZGlkID0ga21hbGxvYyhFRElEX0xFTkdUSCAqIChEUk1fTUFYX0VESURfRVhUX05VTSArIDEpLAorCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKGVkaWQgPT0gTlVMTCkKKwkJcmV0dXJuIGZhbHNlOworCisJbWVtY3B5KCh1bnNpZ25lZCBjaGFyICopZWRpZCwKKwkgICAgICAgKHVuc2lnbmVkIGNoYXIgKikocmRldi0+YmlvcyArIGVkaWRfaW5mbyksIEVESURfTEVOR1RIKTsKKworCWlmICghZHJtX2VkaWRfaXNfdmFsaWQoZWRpZCkpIHsKKwkJa2ZyZWUoZWRpZCk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwlyZGV2LT5tb2RlX2luZm8uYmlvc19oYXJkY29kZWRfZWRpZCA9IGVkaWQ7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0cnVjdCBlZGlkICoKK3JhZGVvbl9jb21iaW9zX2dldF9oYXJkY29kZWRfZWRpZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpZiAocmRldi0+bW9kZV9pbmZvLmJpb3NfaGFyZGNvZGVkX2VkaWQpCisJCXJldHVybiByZGV2LT5tb2RlX2luZm8uYmlvc19oYXJkY29kZWRfZWRpZDsKKwlyZXR1cm4gTlVMTDsKK30KKwogc3RhdGljIHN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgY29tYmlvc19zZXR1cF9pMmNfYnVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAogCQkJCQkJICAgICAgIGludCBkZGNfbGluZSkKIHsKQEAgLTQ4Niw5ICs1MjIsNjUgQEAKIAkJaTJjLnlfZGF0YV9yZWcgPSBkZGNfbGluZTsKIAl9CiAKLQlpZiAocmRldi0+ZmFtaWx5IDwgQ0hJUF9SMjAwKQotCQlpMmMuaHdfY2FwYWJsZSA9IGZhbHNlOwotCWVsc2UgeworCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CisJY2FzZSBDSElQX1IxMDA6CisJY2FzZSBDSElQX1JWMTAwOgorCWNhc2UgQ0hJUF9SUzEwMDoKKwljYXNlIENISVBfUlYyMDA6CisJY2FzZSBDSElQX1JTMjAwOgorCWNhc2UgQ0hJUF9SUzMwMDoKKwkJc3dpdGNoIChkZGNfbGluZSkgeworCQljYXNlIFJBREVPTl9HUElPX0RWSV9EREM6CisJCQkvKiBpbiB0aGVvcnkgdGhpcyBzaG91bGQgYmUgaHcgY2FwYWJsZSwKKwkJCSAqIGJ1dCBpdCBkb2Vzbid0IHNlZW0gdG8gd29yaworCQkJICovCisJCQlpMmMuaHdfY2FwYWJsZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpMmMuaHdfY2FwYWJsZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDSElQX1IyMDA6CisJCXN3aXRjaCAoZGRjX2xpbmUpIHsKKwkJY2FzZSBSQURFT05fR1BJT19EVklfRERDOgorCQljYXNlIFJBREVPTl9HUElPX01PTklEOgorCQkJaTJjLmh3X2NhcGFibGUgPSB0cnVlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpMmMuaHdfY2FwYWJsZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWMjUwOgorCWNhc2UgQ0hJUF9SVjI4MDoKKwkJc3dpdGNoIChkZGNfbGluZSkgeworCQljYXNlIFJBREVPTl9HUElPX1ZHQV9EREM6CisJCWNhc2UgUkFERU9OX0dQSU9fRFZJX0REQzoKKwkJY2FzZSBSQURFT05fR1BJT19DUlQyX0REQzoKKwkJCWkyYy5od19jYXBhYmxlID0gdHJ1ZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaTJjLmh3X2NhcGFibGUgPSBmYWxzZTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SMzAwOgorCWNhc2UgQ0hJUF9SMzUwOgorCQlzd2l0Y2ggKGRkY19saW5lKSB7CisJCWNhc2UgUkFERU9OX0dQSU9fVkdBX0REQzoKKwkJY2FzZSBSQURFT05fR1BJT19EVklfRERDOgorCQkJaTJjLmh3X2NhcGFibGUgPSB0cnVlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpMmMuaHdfY2FwYWJsZSA9IGZhbHNlOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWMzUwOgorCWNhc2UgQ0hJUF9SVjM4MDoKKwljYXNlIENISVBfUlM0MDA6CisJY2FzZSBDSElQX1JTNDgwOgogCQlzd2l0Y2ggKGRkY19saW5lKSB7CiAJCWNhc2UgUkFERU9OX0dQSU9fVkdBX0REQzoKIAkJY2FzZSBSQURFT05fR1BJT19EVklfRERDOgpAQCAtNTA0LDkgKzU5NiwxNCBAQAogCQkJaTJjLmh3X2NhcGFibGUgPSBmYWxzZTsKIAkJCWJyZWFrOwogCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWkyYy5od19jYXBhYmxlID0gZmFsc2U7CisJCWJyZWFrOwogCX0KIAlpMmMubW1faTJjID0gZmFsc2U7CiAJaTJjLmkyY19pZCA9IDA7CisJaTJjLmhwZF9pZCA9IDA7CiAKIAlpZiAoZGRjX2xpbmUpCiAJCWkyYy52YWxpZCA9IHRydWU7CkBAIC01MjcsOSArNjI0LDYgQEAKIAlpbnQ4X3QgcmV2OwogCXVpbnQxNl90IHNjbGssIG1jbGs7CiAKLQlpZiAocmRldi0+YmlvcyA9PSBOVUxMKQotCQlyZXR1cm4gZmFsc2U7Ci0KIAlwbGxfaW5mbyA9IGNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfUExMX0lORk9fVEFCTEUpOwogCWlmIChwbGxfaW5mbykgewogCQlyZXYgPSBSQklPUzgocGxsX2luZm8pOwpAQCAtNjU0LDkgKzc0OCw2IEBACiAJaWYgKCFwX2RhYykKIAkJcmV0dXJuIE5VTEw7CiAKLQlpZiAocmRldi0+YmlvcyA9PSBOVUxMKQotCQlnb3RvIG91dDsKLQogCS8qIGNoZWNrIENSVCB0YWJsZSAqLwogCWRhY19pbmZvID0gY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19DUlRfSU5GT19UQUJMRSk7CiAJaWYgKGRhY19pbmZvKSB7CkBAIC02NzMsNyArNzY0LDYgQEAKIAkJZm91bmQgPSAxOwogCX0KIAotb3V0OgogCWlmICghZm91bmQpIC8qIGZhbGxiYWNrIHRvIGRlZmF1bHRzICovCiAJCXJhZGVvbl9sZWdhY3lfZ2V0X3ByaW1hcnlfZGFjX2luZm9fZnJvbV90YWJsZShyZGV2LCBwX2RhYyk7CiAKQEAgLTY4Nyw5ICs3NzcsNiBAQAogCXVpbnQxNl90IHR2X2luZm87CiAJZW51bSByYWRlb25fdHZfc3RkIHR2X3N0ZCA9IFRWX1NURF9OVFNDOwogCi0JaWYgKHJkZXYtPmJpb3MgPT0gTlVMTCkKLQkJcmV0dXJuIHR2X3N0ZDsKLQogCXR2X2luZm8gPSBjb21iaW9zX2dldF90YWJsZV9vZmZzZXQoZGV2LCBDT01CSU9TX1RWX0lORk9fVEFCTEUpOwogCWlmICh0dl9pbmZvKSB7CiAJCWlmIChSQklPUzgodHZfaW5mbyArIDYpID09ICdUJykgewpAQCAtNzkzLDkgKzg4MCw2IEBACiAJaWYgKCF0dl9kYWMpCiAJCXJldHVybiBOVUxMOwogCi0JaWYgKHJkZXYtPmJpb3MgPT0gTlVMTCkKLQkJZ290byBvdXQ7Ci0KIAkvKiBmaXJzdCBjaGVjayBUViB0YWJsZSAqLwogCWRhY19pbmZvID0gY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19UVl9JTkZPX1RBQkxFKTsKIAlpZiAoZGFjX2luZm8pIHsKQEAgLTg1Nyw3ICs5NDEsNiBAQAogCQl9CiAJfQogCi1vdXQ6CiAJaWYgKCFmb3VuZCkgLyogZmFsbGJhY2sgdG8gZGVmYXVsdHMgKi8KIAkJcmFkZW9uX2xlZ2FjeV9nZXRfdHZfZGFjX2luZm9fZnJvbV90YWJsZShyZGV2LCB0dl9kYWMpOwogCkBAIC05NDUsMTEgKzEwMjgsNiBAQAogCWludCB0bXAsIGk7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2x2ZHMgKmx2ZHMgPSBOVUxMOwogCi0JaWYgKHJkZXYtPmJpb3MgPT0gTlVMTCkgewotCQlsdmRzID0gcmFkZW9uX2xlZ2FjeV9nZXRfbHZkc19pbmZvX2Zyb21fcmVncyhyZGV2KTsKLQkJZ290byBvdXQ7Ci0JfQotCiAJbGNkX2luZm8gPSBjb21iaW9zX2dldF90YWJsZV9vZmZzZXQoZGV2LCBDT01CSU9TX0xDRF9JTkZPX1RBQkxFKTsKIAogCWlmIChsY2RfaW5mbykgewpAQCAtMTA1MCw3ICsxMTI4LDcgQEAKIAkJRFJNX0lORk8oIk5vIHBhbmVsIGluZm8gZm91bmQgaW4gQklPU1xuIik7CiAJCWx2ZHMgPSByYWRlb25fbGVnYWN5X2dldF9sdmRzX2luZm9fZnJvbV9yZWdzKHJkZXYpOwogCX0KLW91dDoKKwogCWlmIChsdmRzKQogCQllbmNvZGVyLT5uYXRpdmVfbW9kZSA9IGx2ZHMtPm5hdGl2ZV9tb2RlOwogCXJldHVybiBsdmRzOwpAQCAtMTEwMiw5ICsxMTgwLDYgQEAKIAlpbnQgaSwgbjsKIAl1aW50OF90IHZlcjsKIAotCWlmIChyZGV2LT5iaW9zID09IE5VTEwpCi0JCXJldHVybiBmYWxzZTsKLQogCXRtZHNfaW5mbyA9IGNvbWJpb3NfZ2V0X3RhYmxlX29mZnNldChkZXYsIENPTUJJT1NfREZQX0lORk9fVEFCTEUpOwogCiAJaWYgKHRtZHNfaW5mbykgewpAQCAtMTE4NCw5ICsxMjU5LDYgQEAKIAllbnVtIHJhZGVvbl9jb21iaW9zX2RkYyBncGlvOwogCXN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgaTJjX2J1czsKIAotCWlmIChyZGV2LT5iaW9zID09IE5VTEwpCi0JCXJldHVybiBmYWxzZTsKLQogCXRtZHMtPmkyY19idXMgPSBOVUxMOwogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19JR1ApIHsKIAkJb2Zmc2V0ID0gY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19JMkNfSU5GT19UQUJMRSk7CkBAIC0xMjUzLDcgKzEzMjUsMTAgQEAKIAkJCQl0bWRzLT5pMmNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGUoZGV2LCAmaTJjX2J1cywgIkRWTyIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBERENfTENEOiAvKiBNTSBpMmMgKi8KLQkJCQlEUk1fRVJST1IoIk1NIGkyYyByZXF1aXJlcyBodyBpMmMgZW5naW5lXG4iKTsKKwkJCQlpMmNfYnVzLnZhbGlkID0gdHJ1ZTsKKwkJCQlpMmNfYnVzLmh3X2NhcGFibGUgPSB0cnVlOworCQkJCWkyY19idXMubW1faTJjID0gdHJ1ZTsKKwkJCQl0bWRzLT5pMmNfYnVzID0gcmFkZW9uX2kyY19jcmVhdGUoZGV2LCAmaTJjX2J1cywgIkRWTyIpOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlEUk1fRVJST1IoIlVuc3VwcG9ydGVkIGdwaW8gJWRcbiIsIGdwaW8pOwpAQCAtMTkwOSw5ICsxOTg0LDYgQEAKIAlzdHJ1Y3QgcmFkZW9uX2kyY19idXNfcmVjIGRkY19pMmM7CiAJc3RydWN0IHJhZGVvbl9ocGQgaHBkOwogCi0JaWYgKHJkZXYtPmJpb3MgPT0gTlVMTCkKLQkJcmV0dXJuIGZhbHNlOwotCiAJY29ubl9pbmZvID0gY29tYmlvc19nZXRfdGFibGVfb2Zmc2V0KGRldiwgQ09NQklPU19DT05ORUNUT1JfSU5GT19UQUJMRSk7CiAJaWYgKGNvbm5faW5mbykgewogCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CkBAIC0yMjc4LDYgKzIzNTAsMTE1IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKK3ZvaWQgcmFkZW9uX2NvbWJpb3NfZ2V0X3Bvd2VyX21vZGVzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSByZGV2LT5kZGV2OworCXUxNiBvZmZzZXQsIG1pc2MsIG1pc2MyID0gMDsKKwl1OCByZXYsIGJsb2NrcywgdG1wOworCWludCBzdGF0ZV9pbmRleCA9IDA7CisKKwlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlID0gTlVMTDsKKworCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19NT0JJTElUWSkgeworCQlvZmZzZXQgPSBjb21iaW9zX2dldF90YWJsZV9vZmZzZXQoZGV2LCBDT01CSU9TX1BPV0VSUExBWV9JTkZPX1RBQkxFKTsKKwkJaWYgKG9mZnNldCkgeworCQkJcmV2ID0gUkJJT1M4KG9mZnNldCk7CisJCQlibG9ja3MgPSBSQklPUzgob2Zmc2V0ICsgMHgyKTsKKwkJCS8qIHBvd2VyIG1vZGUgMCB0ZW5kcyB0byBiZSB0aGUgb25seSB2YWxpZCBvbmUgKi8KKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5udW1fY2xvY2tfbW9kZXMgPSAxOworCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0ubWNsayA9IFJCSU9TMzIob2Zmc2V0ICsgMHg1ICsgMHgyKTsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnNjbGsgPSBSQklPUzMyKG9mZnNldCArIDB4NSArIDB4Nik7CisJCQlpZiAoKHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPT0gMCkgfHwKKwkJCSAgICAocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA9PSAwKSkKKwkJCQlnb3RvIGRlZmF1bHRfbW9kZTsKKwkJCS8qIHNraXAgb3ZlcmNsb2NrIG1vZGVzIGZvciBub3cgKi8KKwkJCWlmICgocmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0ubWNsayA+CisJCQkgICAgIHJkZXYtPmNsb2NrLmRlZmF1bHRfbWNsayArIFJBREVPTl9NT0RFX09WRVJDTE9DS19NQVJHSU4pIHx8CisJCQkgICAgKHJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnNjbGsgPgorCQkJICAgICByZGV2LT5jbG9jay5kZWZhdWx0X3NjbGsgKyBSQURFT05fTU9ERV9PVkVSQ0xPQ0tfTUFSR0lOKSkKKwkJCQlnb3RvIGRlZmF1bHRfbW9kZTsKKwkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJCQlQT1dFUl9TVEFURV9UWVBFX0JBVFRFUlk7CisJCQltaXNjID0gUkJJT1MxNihvZmZzZXQgKyAweDUgKyAweDApOworCQkJaWYgKHJldiA+IDQpCisJCQkJbWlzYzIgPSBSQklPUzE2KG9mZnNldCArIDB4NSArIDB4ZSk7CisJCQlpZiAobWlzYyAmIDB4NCkgeworCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudHlwZSA9IFZPTFRBR0VfR1BJTzsKKwkJCQlpZiAobWlzYyAmIDB4OCkKKwkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS5hY3RpdmVfaGlnaCA9CisJCQkJCQl0cnVlOworCQkJCWVsc2UKKwkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS5hY3RpdmVfaGlnaCA9CisJCQkJCQlmYWxzZTsKKwkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmdwaW8udmFsaWQgPSB0cnVlOworCQkJCWlmIChyZXYgPCA2KSB7CisJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuZ3Bpby5yZWcgPQorCQkJCQkJUkJJT1MxNihvZmZzZXQgKyAweDUgKyAweGIpICogNDsKKwkJCQkJdG1wID0gUkJJT1M4KG9mZnNldCArIDB4NSArIDB4ZCk7CisJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuZ3Bpby5tYXNrID0gKDEgPDwgdG1wKTsKKwkJCQl9IGVsc2UgeworCQkJCQl1OCBlbnRyaWVzID0gUkJJT1M4KG9mZnNldCArIDB4NSArIDB4Yik7CisJCQkJCXUxNiB2b2x0YWdlX3RhYmxlX29mZnNldCA9IFJCSU9TMTYob2Zmc2V0ICsgMHg1ICsgMHhjKTsKKwkJCQkJaWYgKGVudHJpZXMgJiYgdm9sdGFnZV90YWJsZV9vZmZzZXQpIHsKKwkJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuZ3Bpby5yZWcgPQorCQkJCQkJCVJCSU9TMTYodm9sdGFnZV90YWJsZV9vZmZzZXQpICogNDsKKwkJCQkJCXRtcCA9IFJCSU9TOCh2b2x0YWdlX3RhYmxlX29mZnNldCArIDB4Mik7CisJCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmdwaW8ubWFzayA9ICgxIDw8IHRtcCk7CisJCQkJCX0gZWxzZQorCQkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS5ncGlvLnZhbGlkID0gZmFsc2U7CisJCQkJfQorCQkJCXN3aXRjaCAoKG1pc2MyICYgMHg3MDApID4+IDgpIHsKKwkJCQljYXNlIDA6CisJCQkJZGVmYXVsdDoKKwkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS5kZWxheSA9IDA7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMToKKwkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS5kZWxheSA9IDMzOworCQkJCQlicmVhazsKKwkJCQljYXNlIDI6CisJCQkJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UuZGVsYXkgPSA2NjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAzOgorCQkJCQlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uY2xvY2tfaW5mb1swXS52b2x0YWdlLmRlbGF5ID0gOTk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgNDoKKwkJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS5kZWxheSA9IDEzMjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlCisJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0udm9sdGFnZS50eXBlID0gVk9MVEFHRV9OT05FOworCQkJaWYgKHJldiA+IDYpCisJCQkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm5vbl9jbG9ja19pbmZvLnBjaWVfbGFuZXMgPQorCQkJCQlSQklPUzgob2Zmc2V0ICsgMHg1ICsgMHgxMCk7CisJCQlzdGF0ZV9pbmRleCsrOworCQl9IGVsc2UgeworCQkJLyogWFhYIGZpZ3VyZSBvdXQgc29tZSBnb29kIGRlZmF1bHQgbG93IHBvd2VyIG1vZGUgZm9yIG1vYmlsaXR5IGNhcmRzIHcvb3V0IHBvd2VyIHRhYmxlcyAqLworCQl9CisJfSBlbHNlIHsKKwkJLyogWFhYIGZpZ3VyZSBvdXQgc29tZSBnb29kIGRlZmF1bHQgbG93IHBvd2VyIG1vZGUgZm9yIGRlc2t0b3AgY2FyZHMgKi8KKwl9CisKK2RlZmF1bHRfbW9kZToKKwkvKiBhZGQgdGhlIGRlZmF1bHQgbW9kZSAqLworCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS50eXBlID0KKwkJUE9XRVJfU1RBVEVfVFlQRV9ERUZBVUxUOworCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5udW1fY2xvY2tfbW9kZXMgPSAxOworCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLm1jbGsgPSByZGV2LT5jbG9jay5kZWZhdWx0X21jbGs7CisJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLmNsb2NrX2luZm9bMF0uc2NsayA9IHJkZXYtPmNsb2NrLmRlZmF1bHRfc2NsazsKKwlyZGV2LT5wbS5wb3dlcl9zdGF0ZVtzdGF0ZV9pbmRleF0uZGVmYXVsdF9jbG9ja19tb2RlID0gJnJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdOworCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5jbG9ja19pbmZvWzBdLnZvbHRhZ2UudHlwZSA9IFZPTFRBR0VfTk9ORTsKKwlpZiAocmRldi0+YXNpYy0+Z2V0X3BjaWVfbGFuZXMpCisJCXJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XS5ub25fY2xvY2tfaW5mby5wY2llX2xhbmVzID0gcmFkZW9uX2dldF9wY2llX2xhbmVzKHJkZXYpOworCWVsc2UKKwkJcmRldi0+cG0ucG93ZXJfc3RhdGVbc3RhdGVfaW5kZXhdLm5vbl9jbG9ja19pbmZvLnBjaWVfbGFuZXMgPSAxNjsKKwlyZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlID0gJnJkZXYtPnBtLnBvd2VyX3N0YXRlW3N0YXRlX2luZGV4XTsKKwlyZGV2LT5wbS5udW1fcG93ZXJfc3RhdGVzID0gc3RhdGVfaW5kZXggKyAxOworCisJcmRldi0+cG0uY3VycmVudF9wb3dlcl9zdGF0ZSA9IHJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGU7CisJcmRldi0+cG0uY3VycmVudF9jbG9ja19tb2RlID0KKwkJcmRldi0+cG0uZGVmYXVsdF9wb3dlcl9zdGF0ZS0+ZGVmYXVsdF9jbG9ja19tb2RlOworfQorCiB2b2lkIHJhZGVvbl9leHRlcm5hbF90bWRzX3NldHVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKIHsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CkBAIC0yMjg5LDIzICsyNDcwLDIxIEBACiAJc3dpdGNoICh0bWRzLT5kdm9fY2hpcCkgewogCWNhc2UgRFZPX1NJTDE2NDoKIAkJLyogc2lsIDE2NCAqLwotCQlyYWRlb25faTJjX2RvX2xvY2sodG1kcy0+aTJjX2J1cywgMSk7Ci0JCXJhZGVvbl9pMmNfc3dfcHV0X2J5dGUodG1kcy0+aTJjX2J1cywKLQkJCQkgICAgICAgdG1kcy0+c2xhdmVfYWRkciwKLQkJCQkgICAgICAgMHgwOCwgMHgzMCk7Ci0JCXJhZGVvbl9pMmNfc3dfcHV0X2J5dGUodG1kcy0+aTJjX2J1cywKKwkJcmFkZW9uX2kyY19wdXRfYnl0ZSh0bWRzLT5pMmNfYnVzLAorCQkJCSAgICB0bWRzLT5zbGF2ZV9hZGRyLAorCQkJCSAgICAweDA4LCAweDMwKTsKKwkJcmFkZW9uX2kyY19wdXRfYnl0ZSh0bWRzLT5pMmNfYnVzLAogCQkJCSAgICAgICB0bWRzLT5zbGF2ZV9hZGRyLAogCQkJCSAgICAgICAweDA5LCAweDAwKTsKLQkJcmFkZW9uX2kyY19zd19wdXRfYnl0ZSh0bWRzLT5pMmNfYnVzLAotCQkJCSAgICAgICB0bWRzLT5zbGF2ZV9hZGRyLAotCQkJCSAgICAgICAweDBhLCAweDkwKTsKLQkJcmFkZW9uX2kyY19zd19wdXRfYnl0ZSh0bWRzLT5pMmNfYnVzLAotCQkJCSAgICAgICB0bWRzLT5zbGF2ZV9hZGRyLAotCQkJCSAgICAgICAweDBjLCAweDg5KTsKLQkJcmFkZW9uX2kyY19zd19wdXRfYnl0ZSh0bWRzLT5pMmNfYnVzLAorCQlyYWRlb25faTJjX3B1dF9ieXRlKHRtZHMtPmkyY19idXMsCisJCQkJICAgIHRtZHMtPnNsYXZlX2FkZHIsCisJCQkJICAgIDB4MGEsIDB4OTApOworCQlyYWRlb25faTJjX3B1dF9ieXRlKHRtZHMtPmkyY19idXMsCisJCQkJICAgIHRtZHMtPnNsYXZlX2FkZHIsCisJCQkJICAgIDB4MGMsIDB4ODkpOworCQlyYWRlb25faTJjX3B1dF9ieXRlKHRtZHMtPmkyY19idXMsCiAJCQkJICAgICAgIHRtZHMtPnNsYXZlX2FkZHIsCiAJCQkJICAgICAgIDB4MDgsIDB4M2IpOwotCQlyYWRlb25faTJjX2RvX2xvY2sodG1kcy0+aTJjX2J1cywgMCk7CiAJCWJyZWFrOwogCWNhc2UgRFZPX1NJTDExNzg6CiAJCS8qIHNpbCAxMTc4IC0gdW50ZXN0ZWQgKi8KQEAgLTIzMzgsOSArMjUxNyw2IEBACiAJdWludDMyX3QgcmVnLCB2YWwsIGFuZF9tYXNrLCBvcl9tYXNrOwogCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9leHRfdG1kcyAqdG1kcyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKIAotCWlmIChyZGV2LT5iaW9zID09IE5VTEwpCi0JCXJldHVybiBmYWxzZTsKLQogCWlmICghdG1kcykKIAkJcmV0dXJuIGZhbHNlOwogCkBAIC0yMzkwLDExICsyNTY2LDkgQEAKIAkJCQkJCWluZGV4Kys7CiAJCQkJCQl2YWwgPSBSQklPUzgoaW5kZXgpOwogCQkJCQkJaW5kZXgrKzsKLQkJCQkJCXJhZGVvbl9pMmNfZG9fbG9jayh0bWRzLT5pMmNfYnVzLCAxKTsKLQkJCQkJCXJhZGVvbl9pMmNfc3dfcHV0X2J5dGUodG1kcy0+aTJjX2J1cywKLQkJCQkJCQkJICAgICAgIHNsYXZlX2FkZHIsCi0JCQkJCQkJCSAgICAgICByZWcsIHZhbCk7Ci0JCQkJCQlyYWRlb25faTJjX2RvX2xvY2sodG1kcy0+aTJjX2J1cywgMCk7CisJCQkJCQlyYWRlb25faTJjX3B1dF9ieXRlKHRtZHMtPmkyY19idXMsCisJCQkJCQkJCSAgICBzbGF2ZV9hZGRyLAorCQkJCQkJCQkgICAgcmVnLCB2YWwpOwogCQkJCQkJYnJlYWs7CiAJCQkJCWRlZmF1bHQ6CiAJCQkJCQlEUk1fRVJST1IoIlVua25vd24gaWQgJWRcbiIsIGlkID4+IDEzKTsKQEAgLTI0NDcsMTEgKzI2MjEsOSBAQAogCQkJCQlyZWcgPSBpZCAmIDB4MWZmZjsKIAkJCQkJdmFsID0gUkJJT1M4KGluZGV4KTsKIAkJCQkJaW5kZXggKz0gMTsKLQkJCQkJcmFkZW9uX2kyY19kb19sb2NrKHRtZHMtPmkyY19idXMsIDEpOwotCQkJCQlyYWRlb25faTJjX3N3X3B1dF9ieXRlKHRtZHMtPmkyY19idXMsCi0JCQkJCQkJICAgICAgIHRtZHMtPnNsYXZlX2FkZHIsCi0JCQkJCQkJICAgICAgIHJlZywgdmFsKTsKLQkJCQkJcmFkZW9uX2kyY19kb19sb2NrKHRtZHMtPmkyY19idXMsIDApOworCQkJCQlyYWRlb25faTJjX3B1dF9ieXRlKHRtZHMtPmkyY19idXMsCisJCQkJCQkJICAgIHRtZHMtPnNsYXZlX2FkZHIsCisJCQkJCQkJICAgIHJlZywgdmFsKTsKIAkJCQkJYnJlYWs7CiAJCQkJZGVmYXVsdDoKIAkJCQkJRFJNX0VSUk9SKCJVbmtub3duIGlkICVkXG4iLCBpZCA+PiAxMyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jb25uZWN0b3JzLmMKaW5kZXggNjVmODE5NC4uZWUwMDgzZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY29ubmVjdG9ycy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Nvbm5lY3RvcnMuYwpAQCAtNDc5LDEwICs0NzksOCBAQAogCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Nvbm5lY3RlZDsKIAllbHNlIHsKIAkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMpIHsKLQkJCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAxKTsKIAkJCXJhZGVvbl9jb25uZWN0b3ItPmVkaWQgPSBkcm1fZ2V0X2VkaWQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsCiAJCQkJCQkJICAgICAgJnJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMtPmFkYXB0ZXIpOwotCQkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMsIDApOwogCQkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpCiAJCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAJCX0KQEAgLTU4NywxOSArNTg1LDE0IEBACiAJaWYgKCFlbmNvZGVyKQogCQlyZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIAotCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKSB7Ci0JCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAxKTsKKwlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJZHJldCA9IHJhZGVvbl9kZGNfcHJvYmUocmFkZW9uX2Nvbm5lY3Rvcik7Ci0JCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAwKTsKLQl9CiAJaWYgKGRyZXQpIHsKIAkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKIAkJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOwogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IE5VTEw7CiAJCX0KLQkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMsIDEpOwogCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7Ci0JCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAwKTsKIAogCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKIAkJCURSTV9FUlJPUigiJXM6IHByb2JlZCBhIG1vbml0b3IgYnV0IG5vfGludmFsaWQgRURJRFxuIiwKQEAgLTc0NCwxOSArNzM3LDE0IEBACiAJZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyByZXQgPSBjb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsKIAlib29sIGRyZXQgPSBmYWxzZTsKIAotCWlmIChyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzKSB7Ci0JCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAxKTsKKwlpZiAocmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJZHJldCA9IHJhZGVvbl9kZGNfcHJvYmUocmFkZW9uX2Nvbm5lY3Rvcik7Ci0JCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAwKTsKLQl9CiAJaWYgKGRyZXQpIHsKIAkJaWYgKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKIAkJCWtmcmVlKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpOwogCQkJcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCA9IE5VTEw7CiAJCX0KLQkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMsIDEpOwogCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gZHJtX2dldF9lZGlkKCZyYWRlb25fY29ubmVjdG9yLT5iYXNlLCAmcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cy0+YWRhcHRlcik7Ci0JCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAwKTsKIAogCQlpZiAoIXJhZGVvbl9jb25uZWN0b3ItPmVkaWQpIHsKIAkJCURSTV9FUlJPUigiJXM6IHByb2JlZCBhIG1vbml0b3IgYnV0IG5vfGludmFsaWQgRURJRFxuIiwKQEAgLTk1Miw3ICs5NDAsNyBAQAogCWlmIChyYWRlb25fY29ubmVjdG9yLT5lZGlkKQogCQlrZnJlZShyYWRlb25fY29ubmVjdG9yLT5lZGlkKTsKIAlpZiAocmFkZW9uX2RpZ19jb25uZWN0b3ItPmRwX2kyY19idXMpCi0JCXJhZGVvbl9pMmNfZGVzdHJveShyYWRlb25fZGlnX2Nvbm5lY3Rvci0+ZHBfaTJjX2J1cyk7CisJCXJhZGVvbl9pMmNfZGVzdHJveV9kcChyYWRlb25fZGlnX2Nvbm5lY3Rvci0+ZHBfaTJjX2J1cyk7CiAJa2ZyZWUocmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXYpOwogCWRybV9zeXNmc19jb25uZWN0b3JfcmVtb3ZlKGNvbm5lY3Rvcik7CiAJZHJtX2Nvbm5lY3Rvcl9jbGVhbnVwKGNvbm5lY3Rvcik7CkBAIC05ODgsMTIgKzk3NiwxMCBAQAogCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAJCX0KIAl9IGVsc2UgewotCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cywgMSk7CiAJCWlmIChyYWRlb25fZGRjX3Byb2JlKHJhZGVvbl9jb25uZWN0b3IpKSB7CiAJCQlyYWRlb25fZGlnX2Nvbm5lY3Rvci0+ZHBfc2lua190eXBlID0gc2lua190eXBlOwogCQkJcmV0ID0gY29ubmVjdG9yX3N0YXR1c19jb25uZWN0ZWQ7CiAJCX0KLQkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMsIDApOwogCX0KIAogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYwppbmRleCAwNjEyM2JhLi5kYzZlYmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMKQEAgLTE2NDQsNiArMTY0NCw3IEBACiAJcmFkZW9uX2NwX2xvYWRfbWljcm9jb2RlKGRldl9wcml2KTsKIAlyYWRlb25fY3BfaW5pdF9yaW5nX2J1ZmZlcihkZXYsIGRldl9wcml2LCBmaWxlX3ByaXYpOwogCisJZGV2X3ByaXYtPmhhdmVfel9vZmZzZXQgPSAwOwogCXJhZGVvbl9kb19lbmdpbmVfcmVzZXQoZGV2KTsKIAlyYWRlb25faXJxX3NldF9zdGF0ZShkZXYsIFJBREVPTl9TV19JTlRfRU5BQkxFLCAxKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NzLmMKaW5kZXggZTlkMDg1MC4uNzBiYTAyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3MuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcy5jCkBAIC0xOTQsMTEgKzE5NCw4IEBACiAJfQogCXJhZGVvbl9ib19saXN0X3VucmVzZXJ2ZSgmcGFyc2VyLT52YWxpZGF0ZWQpOwogCWZvciAoaSA9IDA7IGkgPCBwYXJzZXItPm5yZWxvY3M7IGkrKykgewotCQlpZiAocGFyc2VyLT5yZWxvY3NbaV0uZ29iaikgewotCQkJbXV0ZXhfbG9jaygmcGFyc2VyLT5yZGV2LT5kZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UocGFyc2VyLT5yZWxvY3NbaV0uZ29iaik7Ci0JCQltdXRleF91bmxvY2soJnBhcnNlci0+cmRldi0+ZGRldi0+c3RydWN0X211dGV4KTsKLQkJfQorCQlpZiAocGFyc2VyLT5yZWxvY3NbaV0uZ29iaikKKwkJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKHBhcnNlci0+cmVsb2NzW2ldLmdvYmopOwogCX0KIAlrZnJlZShwYXJzZXItPnRyYWNrKTsKIAlrZnJlZShwYXJzZXItPnJlbG9jcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jdXJzb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2N1cnNvci5jCmluZGV4IDI4NzcyYTMuLmI3MDIzZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2N1cnNvci5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2N1cnNvci5jCkBAIC0zNiw3ICszNiwxNCBAQAogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKIAl1aW50MzJfdCBjdXJfbG9jazsKIAotCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CisJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkgeworCQljdXJfbG9jayA9IFJSRUczMihFVkVSR1JFRU5fQ1VSX1VQREFURSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCk7CisJCWlmIChsb2NrKQorCQkJY3VyX2xvY2sgfD0gRVZFUkdSRUVOX0NVUlNPUl9VUERBVEVfTE9DSzsKKwkJZWxzZQorCQkJY3VyX2xvY2sgJj0gfkVWRVJHUkVFTl9DVVJTT1JfVVBEQVRFX0xPQ0s7CisJCVdSRUczMihFVkVSR1JFRU5fQ1VSX1VQREFURSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgY3VyX2xvY2spOworCX0gZWxzZSBpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgewogCQljdXJfbG9jayA9IFJSRUczMihBVklWT19EMUNVUl9VUERBVEUgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQpOwogCQlpZiAobG9jaykKIAkJCWN1cl9sb2NrIHw9IEFWSVZPX0QxQ1VSU09SX1VQREFURV9MT0NLOwpAQCAtNTgsNyArNjUsMTAgQEAKIAlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBjcnRjLT5kZXYtPmRldl9wcml2YXRlOwogCi0JaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKKwlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKSB7CisJCVdSRUczMihSQURFT05fTU1fSU5ERVgsIEVWRVJHUkVFTl9DVVJfQ09OVFJPTCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCk7CisJCVdSRUczMihSQURFT05fTU1fREFUQSwgRVZFUkdSRUVOX0NVUlNPUl9NT0RFKEVWRVJHUkVFTl9DVVJTT1JfMjRfOF9QUkVfTVVMVCkpOworCX0gZWxzZSBpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgewogCQlXUkVHMzIoUkFERU9OX01NX0lOREVYLCBBVklWT19EMUNVUl9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0KTsKIAkJV1JFRzMyKFJBREVPTl9NTV9EQVRBLCAoQVZJVk9fRDFDVVJTT1JfTU9ERV8yNEJQUCA8PCBBVklWT19EMUNVUlNPUl9NT0RFX1NISUZUKSk7CiAJfSBlbHNlIHsKQEAgLTgxLDEwICs5MSwxNCBAQAogCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhjcnRjKTsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGNydGMtPmRldi0+ZGV2X3ByaXZhdGU7CiAKLQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgeworCWlmIChBU0lDX0lTX0RDRTQocmRldikpIHsKKwkJV1JFRzMyKFJBREVPTl9NTV9JTkRFWCwgRVZFUkdSRUVOX0NVUl9DT05UUk9MICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0KTsKKwkJV1JFRzMyKFJBREVPTl9NTV9EQVRBLCBFVkVSR1JFRU5fQ1VSU09SX0VOIHwKKwkJICAgICAgIEVWRVJHUkVFTl9DVVJTT1JfTU9ERShFVkVSR1JFRU5fQ1VSU09SXzI0XzhfUFJFX01VTFQpKTsKKwl9IGVsc2UgaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKIAkJV1JFRzMyKFJBREVPTl9NTV9JTkRFWCwgQVZJVk9fRDFDVVJfQ09OVFJPTCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCk7CiAJCVdSRUczMihSQURFT05fTU1fREFUQSwgQVZJVk9fRDFDVVJTT1JfRU4gfAotCQkJICAgICAoQVZJVk9fRDFDVVJTT1JfTU9ERV8yNEJQUCA8PCBBVklWT19EMUNVUlNPUl9NT0RFX1NISUZUKSk7CisJCSAgICAgICAoQVZJVk9fRDFDVVJTT1JfTU9ERV8yNEJQUCA8PCBBVklWT19EMUNVUlNPUl9NT0RFX1NISUZUKSk7CiAJfSBlbHNlIHsKIAkJc3dpdGNoIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCkgewogCQljYXNlIDA6CkBAIC0xMDksNyArMTIzLDEwIEBACiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gY3J0Yy0+ZGV2LT5kZXZfcHJpdmF0ZTsKIAotCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CisJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkgeworCQlXUkVHMzIoRVZFUkdSRUVOX0NVUl9TVVJGQUNFX0FERFJFU1NfSElHSCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CisJCVdSRUczMihFVkVSR1JFRU5fQ1VSX1NVUkZBQ0VfQUREUkVTUyArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgZ3B1X2FkZHIpOworCX0gZWxzZSBpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgewogCQlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUlY3NzApIHsKIAkJCWlmIChyYWRlb25fY3J0Yy0+Y3J0Y19pZCkKIAkJCQlXUkVHMzIoUjcwMF9EMkNVUl9TVVJGQUNFX0FERFJFU1NfSElHSCwgMCk7CkBAIC0xNjksMTcgKzE4NiwxMyBAQAogdW5waW46CiAJaWYgKHJhZGVvbl9jcnRjLT5jdXJzb3JfYm8pIHsKIAkJcmFkZW9uX2dlbV9vYmplY3RfdW5waW4ocmFkZW9uX2NydGMtPmN1cnNvcl9ibyk7Ci0JCW11dGV4X2xvY2soJmNydGMtPmRldi0+c3RydWN0X211dGV4KTsKLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UocmFkZW9uX2NydGMtPmN1cnNvcl9ibyk7Ci0JCW11dGV4X3VubG9jaygmY3J0Yy0+ZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChyYWRlb25fY3J0Yy0+Y3Vyc29yX2JvKTsKIAl9CiAKIAlyYWRlb25fY3J0Yy0+Y3Vyc29yX2JvID0gb2JqOwogCXJldHVybiAwOwogZmFpbDoKLQltdXRleF9sb2NrKCZjcnRjLT5kZXYtPnN0cnVjdF9tdXRleCk7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKLQltdXRleF91bmxvY2soJmNydGMtPmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChvYmopOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yMDEsNyArMjE0LDIwIEBACiAJCXlvcmlnaW4gPSBDVVJTT1JfSEVJR0hUIC0gMTsKIAogCXJhZGVvbl9sb2NrX2N1cnNvcihjcnRjLCB0cnVlKTsKLQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgeworCWlmIChBU0lDX0lTX0RDRTQocmRldikpIHsKKwkJLyogY3Vyc29ycyBhcmUgb2Zmc2V0IGludG8gdGhlIHRvdGFsIHN1cmZhY2UgKi8KKwkJeCArPSBjcnRjLT54OworCQl5ICs9IGNydGMtPnk7CisJCURSTV9ERUJVRygieCAlZCB5ICVkIGMtPnggJWQgYy0+eSAlZFxuIiwgeCwgeSwgY3J0Yy0+eCwgY3J0Yy0+eSk7CisKKwkJLyogWFhYOiBjaGVjayBpZiBldmVyZ3JlZW4gaGFzIHRoZSBzYW1lIGlzc3VlcyBhcyBhdml2byBjaGlwcyAqLworCQlXUkVHMzIoRVZFUkdSRUVOX0NVUl9QT1NJVElPTiArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwKKwkJICAgICAgICgoeG9yaWdpbiA/IDAgOiB4KSA8PCAxNikgfAorCQkgICAgICAgKHlvcmlnaW4gPyAwIDogeSkpOworCQlXUkVHMzIoRVZFUkdSRUVOX0NVUl9IT1RfU1BPVCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgKHhvcmlnaW4gPDwgMTYpIHwgeW9yaWdpbik7CisJCVdSRUczMihFVkVSR1JFRU5fQ1VSX1NJWkUgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsCisJCSAgICAgICAoKHJhZGVvbl9jcnRjLT5jdXJzb3Jfd2lkdGggLSAxKSA8PCAxNikgfCAocmFkZW9uX2NydGMtPmN1cnNvcl9oZWlnaHQgLSAxKSk7CisJfSBlbHNlIGlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKSB7CiAJCWludCB3ID0gcmFkZW9uX2NydGMtPmN1cnNvcl93aWR0aDsKIAkJaW50IGkgPSAwOwogCQlzdHJ1Y3QgZHJtX2NydGMgKmNydGNfcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2RldmljZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKaW5kZXggNzY4YjE1MC4uZTI4ZTRlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGV2aWNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+CiAjaW5jbHVkZSA8ZHJtL3JhZGVvbl9kcm0uaD4KICNpbmNsdWRlIDxsaW51eC92Z2FhcmIuaD4KKyNpbmNsdWRlIDxsaW51eC92Z2Ffc3dpdGNoZXJvby5oPgogI2luY2x1ZGUgInJhZGVvbl9yZWcuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKICNpbmNsdWRlICJyYWRlb25fYXNpYy5oIgpAQCAtMTAwLDc5ICsxMDEsMTAyIEBACiAJfQogfQogCi0vKgotICogTUMgY29tbW9uIGZ1bmN0aW9ucworLyoqCisgKiByYWRlb25fdnJhbV9sb2NhdGlvbiAtIHRyeSB0byBmaW5kIFZSQU0gbG9jYXRpb24KKyAqIEByZGV2OiByYWRlb24gZGV2aWNlIHN0cnVjdHVyZSBob2xkaW5nIGFsbCBuZWNlc3NhcnkgaW5mb3JtYXRpb25zCisgKiBAbWM6IG1lbW9yeSBjb250cm9sbGVyIHN0cnVjdHVyZSBob2xkaW5nIG1lbW9yeSBpbmZvcm1hdGlvbnMKKyAqIEBiYXNlOiBiYXNlIGFkZHJlc3MgYXQgd2hpY2ggdG8gcHV0IFZSQU0KKyAqCisgKiBGdW5jdGlvbiB3aWxsIHBsYWNlIHRyeSB0byBwbGFjZSBWUkFNIGF0IGJhc2UgYWRkcmVzcyBwcm92aWRlZAorICogYXMgcGFyYW1ldGVyICh3aGljaCBpcyBzbyBmYXIgZWl0aGVyIFBDSSBhcGVydHVyZSBhZGRyZXNzIG9yCisgKiBmb3IgSUdQIFRPTSBiYXNlIGFkZHJlc3MpLgorICoKKyAqIElmIHRoZXJlIGlzIG5vdCBlbm91Z2ggc3BhY2UgdG8gZml0IHRoZSB1bnZpc2libGUgVlJBTSBpbiB0aGUgMzJiaXRzCisgKiBhZGRyZXNzIHNwYWNlIHRoZW4gd2UgbGltaXQgdGhlIFZSQU0gc2l6ZSB0byB0aGUgYXBlcnR1cmUuCisgKgorICogSWYgd2UgYXJlIHVzaW5nIEFHUCBhbmQgaWYgdGhlIEFHUCBhcGVydHVyZSBkb2Vzbid0IGFsbG93IHVzIHRvIGhhdmUKKyAqIHJvb20gZm9yIGFsbCB0aGUgVlJBTSB0aGFuIHdlIHJlc3RyaWN0IHRoZSBWUkFNIHRvIHRoZSBQQ0kgYXBlcnR1cmUKKyAqIHNpemUgYW5kIHByaW50IGEgd2FybmluZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgZmFpbHMsIHdvcnN0IGNhc2UgYXJlIGxpbWl0aW5nIFZSQU0uCisgKgorICogTm90ZTogR1RUIHN0YXJ0LCBlbmQsIHNpemUgc2hvdWxkIGJlIGluaXRpYWxpemVkIGJlZm9yZSBjYWxsaW5nIHRoaXMKKyAqIGZ1bmN0aW9uIG9uIEFHUCBwbGF0Zm9ybS4KKyAqCisgKiBOb3RlOiBXZSBkb24ndCBleHBsaWN0bHkgZW5mb3JjZSBWUkFNIHN0YXJ0IHRvIGJlIGFsaWduZWQgb24gVlJBTSBzaXplLAorICogdGhpcyBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtIGFzIHdlIGFyZSB1c2luZyB0aGUgUENJIGFwZXJ0dXJlIGFzIGEgcmVmZXJlbmNlLgorICogT3RoZXJ3aXNlIHRoaXMgd291bGQgYmUgbmVlZGVkIGZvciBydjI4MCwgYWxsIHIzeHgsIGFuZCBhbGwgcjR4eCwgYnV0CisgKiBub3QgSUdQLgorICoKKyAqIE5vdGU6IHdlIHVzZSBtY192cmFtX3NpemUgYXMgb24gc29tZSBib2FyZCB3ZSBuZWVkIHRvIHByb2dyYW0gdGhlIG1jIHRvCisgKiBjb3ZlciB0aGUgd2hvbGUgYXBlcnR1cmUgZXZlbiBpZiBWUkFNIHNpemUgaXMgaW5mZXJpb3IgdG8gYXBlcnR1cmUgc2l6ZQorICogTm92ZWxsIGJ1ZyAyMDQ4ODIgKyBhbG9uZyB3aXRoIGxvdHMgb2YgdWJ1bnR1IG9uZXMKKyAqCisgKiBOb3RlOiB3aGVuIGxpbWl0aW5nIHZyYW0gaXQncyBzYWZlIHRvIG92ZXJ3cml0dGUgcmVhbF92cmFtX3NpemUgYmVjYXVzZQorICogd2UgYXJlIG5vdCBpbiBjYXNlIHdoZXJlIHJlYWxfdnJhbV9zaXplIGlzIGluZmVyaW9yIHRvIG1jX3ZyYW1fc2l6ZSAoaWUKKyAqIG5vdGUgYWZlY3RlZCBieSBib2d1cyBodyBvZiBOb3ZlbGwgYnVnIDIwNDg4MiArIGFsb25nIHdpdGggbG90cyBvZiB1YnVudHUKKyAqIG9uZXMpCisgKgorICogTm90ZTogSUdQIFRPTSBhZGRyIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgYXBlcnR1cmUgYWRkciwgd2UgZG9uJ3QKKyAqIGV4cGxpY2l0bHkgY2hlY2sgZm9yIHRoYXQgdGhvdWdodC4KKyAqCisgKiBGSVhNRTogd2hlbiByZWR1Y2luZyBWUkFNIHNpemUgYWxpZ24gbmV3IHNpemUgb24gcG93ZXIgb2YgMi4KICAqLwotaW50IHJhZGVvbl9tY19zZXR1cChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcmFkZW9uX3ZyYW1fbG9jYXRpb24oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYsIHN0cnVjdCByYWRlb25fbWMgKm1jLCB1NjQgYmFzZSkKIHsKLQl1aW50MzJfdCB0bXA7Ci0KLQkvKiBTb21lIGNoaXBzIGhhdmUgYW4gImlzc3VlIiB3aXRoIHRoZSBtZW1vcnkgY29udHJvbGxlciwgdGhlCi0JICogbG9jYXRpb24gbXVzdCBiZSBhbGlnbmVkIHRvIHRoZSBzaXplLiBXZSBqdXN0IGFsaWduIGl0IGRvd24sCi0JICogdG9vIGJhZCBpZiB3ZSB3YWxrIG92ZXIgdGhlIHRvcCBvZiBzeXN0ZW0gbWVtb3J5LCB3ZSBkb24ndAotCSAqIHVzZSBETUEgd2l0aG91dCBhIHJlbWFwcGVkIGFueXdheS4KLQkgKiBBZmZlY3RlZCBjaGlwcyBhcmUgcnYyODAsIGFsbCByM3h4LCBhbmQgYWxsIHI0eHgsIGJ1dCBub3QgSUdQCi0JICovCi0JLyogRkdMUlggc2VlbXMgdG8gc2V0dXAgbGlrZSB0aGlzLCBWUkFNIGEgMCwgdGhlbiBHQVJULgotCSAqLwotCS8qCi0JICogTm90ZTogZnJvbSBSNnh4IHRoZSBhZGRyZXNzIHNwYWNlIGlzIDQwYml0cyBidXQgaGVyZSB3ZSBvbmx5Ci0JICogdXNlIDMyYml0cyAoc3RpbGwgaGF2ZSB0byBzZWUgYSBjYXJkIHdoaWNoIHdvdWxkIGV4aGF1c3QgNEcKLQkgKiBhZGRyZXNzIHNwYWNlKS4KLQkgKi8KLQlpZiAocmRldi0+bWMudnJhbV9sb2NhdGlvbiAhPSAweEZGRkZGRkZGVUwpIHsKLQkJLyogdnJhbSBsb2NhdGlvbiB3YXMgYWxyZWFkeSBzZXR1cCB0cnkgdG8gcHV0IGd0dCBhZnRlcgotCQkgKiBpZiBpdCBmaXRzICovCi0JCXRtcCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb24gKyByZGV2LT5tYy5tY192cmFtX3NpemU7Ci0JCXRtcCA9ICh0bXAgKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDEpICYgfihyZGV2LT5tYy5ndHRfc2l6ZSAtIDEpOwotCQlpZiAoKDB4RkZGRkZGRkZVTCAtIHRtcCkgPj0gcmRldi0+bWMuZ3R0X3NpemUpIHsKLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHRtcDsKLQkJfSBlbHNlIHsKLQkJCWlmIChyZGV2LT5tYy5ndHRfc2l6ZSA+PSByZGV2LT5tYy52cmFtX2xvY2F0aW9uKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJbZHJtXSBHVFQgdG9vIGJpZyB0byBmaXQgIgotCQkJCSAgICAgICAiYmVmb3JlIG9yIGFmdGVyIHZyYW0gbG9jYXRpb24uXG4iKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDA7Ci0JCX0KLQl9IGVsc2UgaWYgKHJkZXYtPm1jLmd0dF9sb2NhdGlvbiAhPSAweEZGRkZGRkZGVUwpIHsKLQkJLyogZ3R0IGxvY2F0aW9uIHdhcyBhbHJlYWR5IHNldHVwIHRyeSB0byBwdXQgdnJhbSBiZWZvcmUKLQkJICogaWYgaXQgZml0cyAqLwotCQlpZiAocmRldi0+bWMubWNfdnJhbV9zaXplIDwgcmRldi0+bWMuZ3R0X2xvY2F0aW9uKSB7Ci0JCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gMDsKLQkJfSBlbHNlIHsKLQkJCXRtcCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplOwotCQkJdG1wICs9IChyZGV2LT5tYy5tY192cmFtX3NpemUgLSAxKTsKLQkJCXRtcCAmPSB+KHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDEpOwotCQkJaWYgKCgweEZGRkZGRkZGVUwgLSB0bXApID49IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSkgewotCQkJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSB0bXA7Ci0JCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX0VSUiAiW2RybV0gdnJhbSB0b28gYmlnIHRvIGZpdCAiCi0JCQkJICAgICAgICJiZWZvcmUgb3IgYWZ0ZXIgR1RUIGxvY2F0aW9uLlxuIik7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gMDsKLQkJdG1wID0gcmRldi0+bWMubWNfdnJhbV9zaXplOwotCQl0bXAgPSAodG1wICsgcmRldi0+bWMuZ3R0X3NpemUgLSAxKSAmIH4ocmRldi0+bWMuZ3R0X3NpemUgLSAxKTsKLQkJcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gdG1wOworCW1jLT52cmFtX3N0YXJ0ID0gYmFzZTsKKwlpZiAobWMtPm1jX3ZyYW1fc2l6ZSA+ICgweEZGRkZGRkZGIC0gYmFzZSArIDEpKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwgImxpbWl0aW5nIFZSQU0gdG8gUENJIGFwZXJ0dXJlIHNpemVcbiIpOworCQltYy0+cmVhbF92cmFtX3NpemUgPSBtYy0+YXBlcl9zaXplOworCQltYy0+bWNfdnJhbV9zaXplID0gbWMtPmFwZXJfc2l6ZTsKIAl9Ci0JcmRldi0+bWMudnJhbV9zdGFydCA9IHJkZXYtPm1jLnZyYW1fbG9jYXRpb247Ci0JcmRldi0+bWMudnJhbV9lbmQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplIC0gMTsKLQlyZGV2LT5tYy5ndHRfc3RhcnQgPSByZGV2LT5tYy5ndHRfbG9jYXRpb247Ci0JcmRldi0+bWMuZ3R0X2VuZCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbiArIHJkZXYtPm1jLmd0dF9zaXplIC0gMTsKLQlEUk1fSU5GTygicmFkZW9uOiBWUkFNICV1TVxuIiwgKHVuc2lnbmVkKShyZGV2LT5tYy5tY192cmFtX3NpemUgPj4gMjApKTsKLQlEUk1fSU5GTygicmFkZW9uOiBWUkFNIGZyb20gMHglMDhYIHRvIDB4JTA4WFxuIiwKLQkJICh1bnNpZ25lZClyZGV2LT5tYy52cmFtX2xvY2F0aW9uLAotCQkgKHVuc2lnbmVkKShyZGV2LT5tYy52cmFtX2xvY2F0aW9uICsgcmRldi0+bWMubWNfdnJhbV9zaXplIC0gMSkpOwotCURSTV9JTkZPKCJyYWRlb246IEdUVCAldU1cbiIsICh1bnNpZ25lZCkocmRldi0+bWMuZ3R0X3NpemUgPj4gMjApKTsKLQlEUk1fSU5GTygicmFkZW9uOiBHVFQgZnJvbSAweCUwOFggdG8gMHglMDhYXG4iLAotCQkgKHVuc2lnbmVkKXJkZXYtPm1jLmd0dF9sb2NhdGlvbiwKLQkJICh1bnNpZ25lZCkocmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemUgLSAxKSk7Ci0JcmV0dXJuIDA7CisJbWMtPnZyYW1fZW5kID0gbWMtPnZyYW1fc3RhcnQgKyBtYy0+bWNfdnJhbV9zaXplIC0gMTsKKwlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQICYmIG1jLT52cmFtX2VuZCA+IG1jLT5ndHRfc3RhcnQgJiYgbWMtPnZyYW1fZW5kIDw9IG1jLT5ndHRfZW5kKSB7CisJCWRldl93YXJuKHJkZXYtPmRldiwgImxpbWl0aW5nIFZSQU0gdG8gUENJIGFwZXJ0dXJlIHNpemVcbiIpOworCQltYy0+cmVhbF92cmFtX3NpemUgPSBtYy0+YXBlcl9zaXplOworCQltYy0+bWNfdnJhbV9zaXplID0gbWMtPmFwZXJfc2l6ZTsKKwl9CisJbWMtPnZyYW1fZW5kID0gbWMtPnZyYW1fc3RhcnQgKyBtYy0+bWNfdnJhbV9zaXplIC0gMTsKKwlkZXZfaW5mbyhyZGV2LT5kZXYsICJWUkFNOiAlbGx1TSAweCUwOGxsWCAtIDB4JTA4bGxYICglbGx1TSB1c2VkKVxuIiwKKwkJCW1jLT5tY192cmFtX3NpemUgPj4gMjAsIG1jLT52cmFtX3N0YXJ0LAorCQkJbWMtPnZyYW1fZW5kLCBtYy0+cmVhbF92cmFtX3NpemUgPj4gMjApOwogfQogCisvKioKKyAqIHJhZGVvbl9ndHRfbG9jYXRpb24gLSB0cnkgdG8gZmluZCBHVFQgbG9jYXRpb24KKyAqIEByZGV2OiByYWRlb24gZGV2aWNlIHN0cnVjdHVyZSBob2xkaW5nIGFsbCBuZWNlc3NhcnkgaW5mb3JtYXRpb25zCisgKiBAbWM6IG1lbW9yeSBjb250cm9sbGVyIHN0cnVjdHVyZSBob2xkaW5nIG1lbW9yeSBpbmZvcm1hdGlvbnMKKyAqCisgKiBGdW5jdGlvbiB3aWxsIHBsYWNlIHRyeSB0byBwbGFjZSBHVFQgYmVmb3JlIG9yIGFmdGVyIFZSQU0uCisgKgorICogSWYgR1RUIHNpemUgaXMgYmlnZ2VyIHRoYW4gc3BhY2UgbGVmdCB0aGVuIHdlIGFqdXN0IEdUVCBzaXplLgorICogVGh1cyBmdW5jdGlvbiB3aWxsIG5ldmVyIGZhaWxzLgorICoKKyAqIEZJWE1FOiB3aGVuIHJlZHVjaW5nIEdUVCBzaXplIGFsaWduIG5ldyBzaXplIG9uIHBvd2VyIG9mIDIuCisgKi8KK3ZvaWQgcmFkZW9uX2d0dF9sb2NhdGlvbihzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9tYyAqbWMpCit7CisJdTY0IHNpemVfYWYsIHNpemVfYmY7CisKKwlzaXplX2FmID0gMHhGRkZGRkZGRiAtIG1jLT52cmFtX2VuZDsKKwlzaXplX2JmID0gbWMtPnZyYW1fc3RhcnQ7CisJaWYgKHNpemVfYmYgPiBzaXplX2FmKSB7CisJCWlmIChtYy0+Z3R0X3NpemUgPiBzaXplX2JmKSB7CisJCQlkZXZfd2FybihyZGV2LT5kZXYsICJsaW1pdGluZyBHVFRcbiIpOworCQkJbWMtPmd0dF9zaXplID0gc2l6ZV9iZjsKKwkJfQorCQltYy0+Z3R0X3N0YXJ0ID0gbWMtPnZyYW1fc3RhcnQgLSBtYy0+Z3R0X3NpemU7CisJfSBlbHNlIHsKKwkJaWYgKG1jLT5ndHRfc2l6ZSA+IHNpemVfYWYpIHsKKwkJCWRldl93YXJuKHJkZXYtPmRldiwgImxpbWl0aW5nIEdUVFxuIik7CisJCQltYy0+Z3R0X3NpemUgPSBzaXplX2FmOworCQl9CisJCW1jLT5ndHRfc3RhcnQgPSBtYy0+dnJhbV9lbmQgKyAxOworCX0KKwltYy0+Z3R0X2VuZCA9IG1jLT5ndHRfc3RhcnQgKyBtYy0+Z3R0X3NpemUgLSAxOworCWRldl9pbmZvKHJkZXYtPmRldiwgIkdUVDogJWxsdU0gMHglMDhsbFggLSAweCUwOGxsWFxuIiwKKwkJCW1jLT5ndHRfc2l6ZSA+PiAyMCwgbWMtPmd0dF9zdGFydCwgbWMtPmd0dF9lbmQpOworfQogCiAvKgogICogR1BVIGhlbHBlcnMgZnVuY3Rpb24uCkBAIC0xODIsNyArMjA2LDE2IEBACiAJdWludDMyX3QgcmVnOwogCiAJLyogZmlyc3QgY2hlY2sgQ1JUQ3MgKi8KLQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgeworCWlmIChBU0lDX0lTX0RDRTQocmRldikpIHsKKwkJcmVnID0gUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzBfUkVHSVNURVJfT0ZGU0VUKSB8CisJCQlSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDMV9SRUdJU1RFUl9PRkZTRVQpIHwKKwkJCVJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEMyX1JFR0lTVEVSX09GRlNFVCkgfAorCQkJUlJFRzMyKEVWRVJHUkVFTl9DUlRDX0NPTlRST0wgKyBFVkVSR1JFRU5fQ1JUQzNfUkVHSVNURVJfT0ZGU0VUKSB8CisJCQlSUkVHMzIoRVZFUkdSRUVOX0NSVENfQ09OVFJPTCArIEVWRVJHUkVFTl9DUlRDNF9SRUdJU1RFUl9PRkZTRVQpIHwKKwkJCVJSRUczMihFVkVSR1JFRU5fQ1JUQ19DT05UUk9MICsgRVZFUkdSRUVOX0NSVEM1X1JFR0lTVEVSX09GRlNFVCk7CisJCWlmIChyZWcgJiBFVkVSR1JFRU5fQ1JUQ19NQVNURVJfRU4pCisJCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UgaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpIHsKIAkJcmVnID0gUlJFRzMyKEFWSVZPX0QxQ1JUQ19DT05UUk9MKSB8CiAJCSAgICAgIFJSRUczMihBVklWT19EMkNSVENfQ09OVFJPTCk7CiAJCWlmIChyZWcgJiBBVklWT19DUlRDX0VOKSB7CkBAIC0yMjksNiArMjYyLDggQEAKIAogaW50IHJhZGVvbl9kdW1teV9wYWdlX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CisJaWYgKHJkZXYtPmR1bW15X3BhZ2UucGFnZSkKKwkJcmV0dXJuIDA7CiAJcmRldi0+ZHVtbXlfcGFnZS5wYWdlID0gYWxsb2NfcGFnZShHRlBfRE1BMzIgfCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CiAJaWYgKHJkZXYtPmR1bW15X3BhZ2UucGFnZSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTMxMCw3ICszNDUsNyBAQAogCQlyZGV2LT5tY19ycmVnID0gJnJzNjAwX21jX3JyZWc7CiAJCXJkZXYtPm1jX3dyZWcgPSAmcnM2MDBfbWNfd3JlZzsKIAl9Ci0JaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApIHsKKwlpZiAoKHJkZXYtPmZhbWlseSA+PSBDSElQX1I2MDApICYmIChyZGV2LT5mYW1pbHkgPD0gQ0hJUF9SVjc0MCkpIHsKIAkJcmRldi0+cGNpZXBfcnJlZyA9ICZyNjAwX3BjaWVwX3JyZWc7CiAJCXJkZXYtPnBjaWVwX3dyZWcgPSAmcjYwMF9wY2llcF93cmVnOwogCX0KQEAgLTMyOSwyMSArMzY0LDIyIEBACiAJY2FzZSBDSElQX1JTMTAwOgogCWNhc2UgQ0hJUF9SVjIwMDoKIAljYXNlIENISVBfUlMyMDA6CisJCXJkZXYtPmFzaWMgPSAmcjEwMF9hc2ljOworCQlicmVhazsKIAljYXNlIENISVBfUjIwMDoKIAljYXNlIENISVBfUlYyNTA6CiAJY2FzZSBDSElQX1JTMzAwOgogCWNhc2UgQ0hJUF9SVjI4MDoKLQkJcmRldi0+YXNpYyA9ICZyMTAwX2FzaWM7CisJCXJkZXYtPmFzaWMgPSAmcjIwMF9hc2ljOwogCQlicmVhazsKIAljYXNlIENISVBfUjMwMDoKIAljYXNlIENISVBfUjM1MDoKIAljYXNlIENISVBfUlYzNTA6CiAJY2FzZSBDSElQX1JWMzgwOgotCQlyZGV2LT5hc2ljID0gJnIzMDBfYXNpYzsKLQkJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKLQkJCXJkZXYtPmFzaWMtPmdhcnRfdGxiX2ZsdXNoID0gJnJ2MzcwX3BjaWVfZ2FydF90bGJfZmx1c2g7Ci0JCQlyZGV2LT5hc2ljLT5nYXJ0X3NldF9wYWdlID0gJnJ2MzcwX3BjaWVfZ2FydF9zZXRfcGFnZTsKLQkJfQorCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkKKwkJCXJkZXYtPmFzaWMgPSAmcjMwMF9hc2ljX3BjaWU7CisJCWVsc2UKKwkJCXJkZXYtPmFzaWMgPSAmcjMwMF9hc2ljOwogCQlicmVhazsKIAljYXNlIENISVBfUjQyMDoKIAljYXNlIENISVBfUjQyMzoKQEAgLTM4Nyw2ICs0MjMsMTMgQEAKIAljYXNlIENISVBfUlY3NDA6CiAJCXJkZXYtPmFzaWMgPSAmcnY3NzBfYXNpYzsKIAkJYnJlYWs7CisJY2FzZSBDSElQX0NFREFSOgorCWNhc2UgQ0hJUF9SRURXT09EOgorCWNhc2UgQ0hJUF9KVU5JUEVSOgorCWNhc2UgQ0hJUF9DWVBSRVNTOgorCWNhc2UgQ0hJUF9IRU1MT0NLOgorCQlyZGV2LT5hc2ljID0gJmV2ZXJncmVlbl9hc2ljOworCQlicmVhazsKIAlkZWZhdWx0OgogCQkvKiBGSVhNRTogbm90IHN1cHBvcnRlZCB5ZXQgKi8KIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC02MTMsNiArNjU2LDM2IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCByYWRlb25fc3dpdGNoZXJvb19zZXRfc3RhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdmdhX3N3aXRjaGVyb29fc3RhdGUgc3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJcG1fbWVzc2FnZV90IHBtbSA9IHsgLmV2ZW50ID0gUE1fRVZFTlRfU1VTUEVORCB9OworCWlmIChzdGF0ZSA9PSBWR0FfU1dJVENIRVJPT19PTikgeworCQlwcmludGsoS0VSTl9JTkZPICJyYWRlb246IHN3aXRjaGVkIG9uXG4iKTsKKwkJLyogZG9uJ3Qgc3VzcGVuZCBvciByZXN1bWUgY2FyZCBub3JtYWxseSAqLworCQlyZGV2LT5wb3dlcmVkX2Rvd24gPSBmYWxzZTsKKwkJcmFkZW9uX3Jlc3VtZV9rbXMoZGV2KTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICJyYWRlb246IHN3aXRjaGVkIG9mZlxuIik7CisJCXJhZGVvbl9zdXNwZW5kX2ttcyhkZXYsIHBtbSk7CisJCS8qIGRvbid0IHN1c3BlbmQgb3IgcmVzdW1lIGNhcmQgbm9ybWFsbHkgKi8KKwkJcmRldi0+cG93ZXJlZF9kb3duID0gdHJ1ZTsKKwl9Cit9CisKK3N0YXRpYyBib29sIHJhZGVvbl9zd2l0Y2hlcm9vX2Nhbl9zd2l0Y2goc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlib29sIGNhbl9zd2l0Y2g7CisKKwlzcGluX2xvY2soJmRldi0+Y291bnRfbG9jayk7CisJY2FuX3N3aXRjaCA9IChkZXYtPm9wZW5fY291bnQgPT0gMCk7CisJc3Bpbl91bmxvY2soJmRldi0+Y291bnRfbG9jayk7CisJcmV0dXJuIGNhbl9zd2l0Y2g7Cit9CisKKwogaW50IHJhZGVvbl9kZXZpY2VfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKIAkJICAgICAgIHN0cnVjdCBkcm1fZGV2aWNlICpkZGV2LAogCQkgICAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXYsCkBAIC02MzgsMTEgKzcxMSwxNCBAQAogCW11dGV4X2luaXQoJnJkZXYtPmNzX211dGV4KTsKIAltdXRleF9pbml0KCZyZGV2LT5pYl9wb29sLm11dGV4KTsKIAltdXRleF9pbml0KCZyZGV2LT5jcC5tdXRleCk7CisJbXV0ZXhfaW5pdCgmcmRldi0+ZGNfaHdfaTJjX211dGV4KTsKIAlpZiAocmRldi0+ZmFtaWx5ID49IENISVBfUjYwMCkKIAkJc3Bpbl9sb2NrX2luaXQoJnJkZXYtPmloLmxvY2spOwogCW11dGV4X2luaXQoJnJkZXYtPmdlbS5tdXRleCk7CisJbXV0ZXhfaW5pdCgmcmRldi0+cG0ubXV0ZXgpOwogCXJ3bG9ja19pbml0KCZyZGV2LT5mZW5jZV9kcnYubG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJnJkZXYtPmdlbS5vYmplY3RzKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyZGV2LT5pcnEudmJsYW5rX3F1ZXVlKTsKIAogCS8qIHNldHVwIHdvcmtxdWV1ZSAqLwogCXJkZXYtPndxID0gY3JlYXRlX3dvcmtxdWV1ZSgicmFkZW9uIik7CkBAIC02OTIsNiArNzY4LDkgQEAKIAkvKiB0aGlzIHdpbGwgZmFpbCBmb3IgY2FyZHMgdGhhdCBhcmVuJ3QgVkdBIGNsYXNzIGRldmljZXMsIGp1c3QKIAkgKiBpZ25vcmUgaXQgKi8KIAl2Z2FfY2xpZW50X3JlZ2lzdGVyKHJkZXYtPnBkZXYsIHJkZXYsIE5VTEwsIHJhZGVvbl92Z2Ffc2V0X2RlY29kZSk7CisJdmdhX3N3aXRjaGVyb29fcmVnaXN0ZXJfY2xpZW50KHJkZXYtPnBkZXYsCisJCQkJICAgICAgIHJhZGVvbl9zd2l0Y2hlcm9vX3NldF9zdGF0ZSwKKwkJCQkgICAgICAgcmFkZW9uX3N3aXRjaGVyb29fY2FuX3N3aXRjaCk7CiAKIAlyID0gcmFkZW9uX2luaXQocmRldik7CiAJaWYgKHIpCkBAIC03MjMsNiArODAyLDcgQEAKIAlyZGV2LT5zaHV0ZG93biA9IHRydWU7CiAJcmFkZW9uX2ZpbmkocmRldik7CiAJZGVzdHJveV93b3JrcXVldWUocmRldi0+d3EpOworCXZnYV9zd2l0Y2hlcm9vX3VucmVnaXN0ZXJfY2xpZW50KHJkZXYtPnBkZXYpOwogCXZnYV9jbGllbnRfcmVnaXN0ZXIocmRldi0+cGRldiwgTlVMTCwgTlVMTCwgTlVMTCk7CiAJaW91bm1hcChyZGV2LT5ybW1pbyk7CiAJcmRldi0+cm1taW8gPSBOVUxMOwpAQCAtNzQ2LDYgKzgyNiw4IEBACiAJfQogCXJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCisJaWYgKHJkZXYtPnBvd2VyZWRfZG93bikKKwkJcmV0dXJuIDA7CiAJLyogdW5waW4gdGhlIGZyb250IGJ1ZmZlcnMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNydGMsICZkZXYtPm1vZGVfY29uZmlnLmNydGNfbGlzdCwgaGVhZCkgewogCQlzdHJ1Y3QgcmFkZW9uX2ZyYW1lYnVmZmVyICpyZmIgPSB0b19yYWRlb25fZnJhbWVidWZmZXIoY3J0Yy0+ZmIpOwpAQCAtNzkxLDYgKzg3Myw5IEBACiB7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCisJaWYgKHJkZXYtPnBvd2VyZWRfZG93bikKKwkJcmV0dXJuIDA7CisKIAlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CiAJcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYtPnBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUoZGV2LT5wZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rpc3BsYXkuYwppbmRleCA3ZTE3YTM2Li5iYThkODA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kaXNwbGF5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZGlzcGxheS5jCkBAIC02OCw2ICs2OCwzNiBAQAogCVdSRUczMihBVklWT19EMUdSUEhfTFVUX1NFTCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgcmFkZW9uX2NydGMtPmNydGNfaWQpOwogfQogCitzdGF0aWMgdm9pZCBldmVyZ3JlZW5fY3J0Y19sb2FkX2x1dChzdHJ1Y3QgZHJtX2NydGMgKmNydGMpCit7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNydGMpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjcnRjLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCWludCBpOworCisJRFJNX0RFQlVHKCIlZFxuIiwgcmFkZW9uX2NydGMtPmNydGNfaWQpOworCVdSRUczMihFVkVSR1JFRU5fRENfTFVUX0NPTlRST0wgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOworCisJV1JFRzMyKEVWRVJHUkVFTl9EQ19MVVRfQkxBQ0tfT0ZGU0VUX0JMVUUgKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDApOworCVdSRUczMihFVkVSR1JFRU5fRENfTFVUX0JMQUNLX09GRlNFVF9HUkVFTiArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CisJV1JFRzMyKEVWRVJHUkVFTl9EQ19MVVRfQkxBQ0tfT0ZGU0VUX1JFRCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMCk7CisKKwlXUkVHMzIoRVZFUkdSRUVOX0RDX0xVVF9XSElURV9PRkZTRVRfQkxVRSArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMHhmZmZmKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0RDX0xVVF9XSElURV9PRkZTRVRfR1JFRU4gKyByYWRlb25fY3J0Yy0+Y3J0Y19vZmZzZXQsIDB4ZmZmZik7CisJV1JFRzMyKEVWRVJHUkVFTl9EQ19MVVRfV0hJVEVfT0ZGU0VUX1JFRCArIHJhZGVvbl9jcnRjLT5jcnRjX29mZnNldCwgMHhmZmZmKTsKKworCVdSRUczMihFVkVSR1JFRU5fRENfTFVUX1JXX01PREUsIHJhZGVvbl9jcnRjLT5jcnRjX2lkKTsKKwlXUkVHMzIoRVZFUkdSRUVOX0RDX0xVVF9XUklURV9FTl9NQVNLLCAweDAwMDAwMDA3KTsKKworCVdSRUczMihFVkVSR1JFRU5fRENfTFVUX1JXX0lOREVYLCAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwkJV1JFRzMyKEVWRVJHUkVFTl9EQ19MVVRfMzBfQ09MT1IsCisJCSAgICAgICAocmFkZW9uX2NydGMtPmx1dF9yW2ldIDw8IDIwKSB8CisJCSAgICAgICAocmFkZW9uX2NydGMtPmx1dF9nW2ldIDw8IDEwKSB8CisJCSAgICAgICAocmFkZW9uX2NydGMtPmx1dF9iW2ldIDw8IDApKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGxlZ2FjeV9jcnRjX2xvYWRfbHV0KHN0cnVjdCBkcm1fY3J0YyAqY3J0YykKIHsKIAlzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjID0gdG9fcmFkZW9uX2NydGMoY3J0Yyk7CkBAIC0xMDAsNyArMTMwLDkgQEAKIAlpZiAoIWNydGMtPmVuYWJsZWQpCiAJCXJldHVybjsKIAotCWlmIChBU0lDX0lTX0FWSVZPKHJkZXYpKQorCWlmIChBU0lDX0lTX0RDRTQocmRldikpCisJCWV2ZXJncmVlbl9jcnRjX2xvYWRfbHV0KGNydGMpOworCWVsc2UgaWYgKEFTSUNfSVNfQVZJVk8ocmRldikpCiAJCWF2aXZvX2NydGNfbG9hZF9sdXQoY3J0Yyk7CiAJZWxzZQogCQlsZWdhY3lfY3J0Y19sb2FkX2x1dChjcnRjKTsKQEAgLTM2MSw2ICszOTMsOCBAQAogCiBpbnQgcmFkZW9uX2RkY19nZXRfbW9kZXMoc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IpCiB7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHJhZGVvbl9jb25uZWN0b3ItPmJhc2UuZGV2OworCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlpbnQgcmV0ID0gMDsKIAogCWlmICgocmFkZW9uX2Nvbm5lY3Rvci0+YmFzZS5jb25uZWN0b3JfdHlwZSA9PSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQpIHx8CkBAIC0zNzMsMTEgKzQwNywxMSBAQAogCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJcmV0dXJuIC0xOwogCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCkgewotCQlyYWRlb25faTJjX2RvX2xvY2socmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cywgMSk7CiAJCXJhZGVvbl9jb25uZWN0b3ItPmVkaWQgPSBkcm1fZ2V0X2VkaWQoJnJhZGVvbl9jb25uZWN0b3ItPmJhc2UsICZyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLT5hZGFwdGVyKTsKLQkJcmFkZW9uX2kyY19kb19sb2NrKHJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMsIDApOwogCX0KLQorCS8qIHNvbWUgc2VydmVycyBwcm92aWRlIGEgaGFyZGNvZGVkIGVkaWQgaW4gcm9tIGZvciBLVk1zICovCisJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5lZGlkKQorCQlyYWRlb25fY29ubmVjdG9yLT5lZGlkID0gcmFkZW9uX2NvbWJpb3NfZ2V0X2hhcmRjb2RlZF9lZGlkKHJkZXYpOwogCWlmIChyYWRlb25fY29ubmVjdG9yLT5lZGlkKSB7CiAJCWRybV9tb2RlX2Nvbm5lY3Rvcl91cGRhdGVfZWRpZF9wcm9wZXJ0eSgmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCk7CiAJCXJldCA9IGRybV9hZGRfZWRpZF9tb2RlcygmcmFkZW9uX2Nvbm5lY3Rvci0+YmFzZSwgcmFkZW9uX2Nvbm5lY3Rvci0+ZWRpZCk7CkBAIC0zOTUsOSArNDI5LDcgQEAKIAogCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+ZGRjX2J1cykKIAkJcmV0dXJuIC0xOwotCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAxKTsKIAllZGlkID0gZHJtX2dldF9lZGlkKGNvbm5lY3RvciwgJnJhZGVvbl9jb25uZWN0b3ItPmRkY19idXMtPmFkYXB0ZXIpOwotCXJhZGVvbl9pMmNfZG9fbG9jayhyYWRlb25fY29ubmVjdG9yLT5kZGNfYnVzLCAwKTsKIAlpZiAoZWRpZCkgewogCQlrZnJlZShlZGlkKTsKIAl9CkBAIC00MTQsMTMgKzQ0NiwxMyBAQAogCXJldHVybiBuOwogfQogCi12b2lkIHJhZGVvbl9jb21wdXRlX3BsbChzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAotCQkJdWludDY0X3QgZnJlcSwKLQkJCXVpbnQzMl90ICpkb3RfY2xvY2tfcCwKLQkJCXVpbnQzMl90ICpmYl9kaXZfcCwKLQkJCXVpbnQzMl90ICpmcmFjX2ZiX2Rpdl9wLAotCQkJdWludDMyX3QgKnJlZl9kaXZfcCwKLQkJCXVpbnQzMl90ICpwb3N0X2Rpdl9wKQorc3RhdGljIHZvaWQgcmFkZW9uX2NvbXB1dGVfcGxsX2xlZ2FjeShzdHJ1Y3QgcmFkZW9uX3BsbCAqcGxsLAorCQkJCSAgICAgIHVpbnQ2NF90IGZyZXEsCisJCQkJICAgICAgdWludDMyX3QgKmRvdF9jbG9ja19wLAorCQkJCSAgICAgIHVpbnQzMl90ICpmYl9kaXZfcCwKKwkJCQkgICAgICB1aW50MzJfdCAqZnJhY19mYl9kaXZfcCwKKwkJCQkgICAgICB1aW50MzJfdCAqcmVmX2Rpdl9wLAorCQkJCSAgICAgIHVpbnQzMl90ICpwb3N0X2Rpdl9wKQogewogCXVpbnQzMl90IG1pbl9yZWZfZGl2ID0gcGxsLT5taW5fcmVmX2RpdjsKIAl1aW50MzJfdCBtYXhfcmVmX2RpdiA9IHBsbC0+bWF4X3JlZl9kaXY7CkBAIC01ODAsOTUgKzYxMiwxOTQgQEAKIAkqcG9zdF9kaXZfcCA9IGJlc3RfcG9zdF9kaXY7CiB9CiAKLXZvaWQgcmFkZW9uX2NvbXB1dGVfcGxsX2F2aXZvKHN0cnVjdCByYWRlb25fcGxsICpwbGwsCi0JCQkgICAgICB1aW50NjRfdCBmcmVxLAotCQkJICAgICAgdWludDMyX3QgKmRvdF9jbG9ja19wLAotCQkJICAgICAgdWludDMyX3QgKmZiX2Rpdl9wLAotCQkJICAgICAgdWludDMyX3QgKmZyYWNfZmJfZGl2X3AsCi0JCQkgICAgICB1aW50MzJfdCAqcmVmX2Rpdl9wLAotCQkJICAgICAgdWludDMyX3QgKnBvc3RfZGl2X3ApCitzdGF0aWMgYm9vbAorY2FsY19mYl9kaXYoc3RydWN0IHJhZGVvbl9wbGwgKnBsbCwKKwkgICAgdWludDMyX3QgZnJlcSwKKyAgICAgICAgICAgIHVpbnQzMl90IHBvc3RfZGl2LAorICAgICAgICAgICAgdWludDMyX3QgcmVmX2RpdiwKKyAgICAgICAgICAgIHVpbnQzMl90ICpmYl9kaXYsCisgICAgICAgICAgICB1aW50MzJfdCAqZmJfZGl2X2ZyYWMpCiB7Ci0JZml4ZWQyMF8xMiBtLCBuLCBmcmFjX24sIHAsIGZfdmNvLCBmX3BjbGssIGJlc3RfZnJlcTsKLQlmaXhlZDIwXzEyIHBsbF9vdXRfbWF4LCBwbGxfb3V0X21pbjsKLQlmaXhlZDIwXzEyIHBsbF9pbl9tYXgsIHBsbF9pbl9taW47Ci0JZml4ZWQyMF8xMiByZWZlcmVuY2VfZnJlcTsKLQlmaXhlZDIwXzEyIGVycm9yLCBmZnJlcSwgYSwgYjsKKwlmaXhlZDIwXzEyIGZlZWRiYWNrX2RpdmlkZXIsIGEsIGI7CisJdTMyIHZjb19mcmVxOwogCi0JcGxsX291dF9tYXguZnVsbCA9IHJmaXhlZF9jb25zdChwbGwtPnBsbF9vdXRfbWF4KTsKLQlwbGxfb3V0X21pbi5mdWxsID0gcmZpeGVkX2NvbnN0KHBsbC0+cGxsX291dF9taW4pOwotCXBsbF9pbl9tYXguZnVsbCA9IHJmaXhlZF9jb25zdChwbGwtPnBsbF9pbl9tYXgpOwotCXBsbF9pbl9taW4uZnVsbCA9IHJmaXhlZF9jb25zdChwbGwtPnBsbF9pbl9taW4pOwotCXJlZmVyZW5jZV9mcmVxLmZ1bGwgPSByZml4ZWRfY29uc3QocGxsLT5yZWZlcmVuY2VfZnJlcSk7Ci0JZG9fZGl2KGZyZXEsIDEwKTsKKwl2Y29fZnJlcSA9IGZyZXEgKiBwb3N0X2RpdjsKKwkvKiBmZWVkYmFja19kaXZpZGVyID0gdmNvX2ZyZXEgKiByZWZfZGl2IC8gcGxsLT5yZWZlcmVuY2VfZnJlcTsgKi8KKwlhLmZ1bGwgPSByZml4ZWRfY29uc3QocGxsLT5yZWZlcmVuY2VfZnJlcSk7CisJZmVlZGJhY2tfZGl2aWRlci5mdWxsID0gcmZpeGVkX2NvbnN0KHZjb19mcmVxKTsKKwlmZWVkYmFja19kaXZpZGVyLmZ1bGwgPSByZml4ZWRfZGl2KGZlZWRiYWNrX2RpdmlkZXIsIGEpOworCWEuZnVsbCA9IHJmaXhlZF9jb25zdChyZWZfZGl2KTsKKwlmZWVkYmFja19kaXZpZGVyLmZ1bGwgPSByZml4ZWRfbXVsKGZlZWRiYWNrX2RpdmlkZXIsIGEpOworCisJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1VTRV9GUkFDX0ZCX0RJVikgeworCQkvKiBmZWVkYmFja19kaXZpZGVyID0gZmxvb3IoKGZlZWRiYWNrX2RpdmlkZXIgKiAxMC4wKSArIDAuNSkgKiAwLjE7ICovCisJCWEuZnVsbCA9IHJmaXhlZF9jb25zdCgxMCk7CisJCWZlZWRiYWNrX2RpdmlkZXIuZnVsbCA9IHJmaXhlZF9tdWwoZmVlZGJhY2tfZGl2aWRlciwgYSk7CisJCWZlZWRiYWNrX2RpdmlkZXIuZnVsbCArPSByZml4ZWRfY29uc3RfaGFsZigwKTsKKwkJZmVlZGJhY2tfZGl2aWRlci5mdWxsID0gcmZpeGVkX2Zsb29yKGZlZWRiYWNrX2RpdmlkZXIpOworCQlmZWVkYmFja19kaXZpZGVyLmZ1bGwgPSByZml4ZWRfZGl2KGZlZWRiYWNrX2RpdmlkZXIsIGEpOworCisJCS8qICpmYl9kaXYgPSBmbG9vcihmZWVkYmFja19kaXZpZGVyKTsgKi8KKwkJYS5mdWxsID0gcmZpeGVkX2Zsb29yKGZlZWRiYWNrX2RpdmlkZXIpOworCQkqZmJfZGl2ID0gcmZpeGVkX3RydW5jKGEpOworCQkvKiAqZmJfZGl2X2ZyYWMgPSBmbW9kKGZlZWRiYWNrX2RpdmlkZXIsIDEuMCkgKiAxMC4wOyAqLworCQlhLmZ1bGwgPSByZml4ZWRfY29uc3QoMTApOworCQliLmZ1bGwgPSByZml4ZWRfbXVsKGZlZWRiYWNrX2RpdmlkZXIsIGEpOworCisJCWZlZWRiYWNrX2RpdmlkZXIuZnVsbCA9IHJmaXhlZF9mbG9vcihmZWVkYmFja19kaXZpZGVyKTsKKwkJZmVlZGJhY2tfZGl2aWRlci5mdWxsID0gcmZpeGVkX211bChmZWVkYmFja19kaXZpZGVyLCBhKTsKKwkJZmVlZGJhY2tfZGl2aWRlci5mdWxsID0gYi5mdWxsIC0gZmVlZGJhY2tfZGl2aWRlci5mdWxsOworCQkqZmJfZGl2X2ZyYWMgPSByZml4ZWRfdHJ1bmMoZmVlZGJhY2tfZGl2aWRlcik7CisJfSBlbHNlIHsKKwkJLyogKmZiX2RpdiA9IGZsb29yKGZlZWRiYWNrX2RpdmlkZXIgKyAwLjUpOyAqLworCQlmZWVkYmFja19kaXZpZGVyLmZ1bGwgKz0gcmZpeGVkX2NvbnN0X2hhbGYoMCk7CisJCWZlZWRiYWNrX2RpdmlkZXIuZnVsbCA9IHJmaXhlZF9mbG9vcihmZWVkYmFja19kaXZpZGVyKTsKKworCQkqZmJfZGl2ID0gcmZpeGVkX3RydW5jKGZlZWRiYWNrX2RpdmlkZXIpOworCQkqZmJfZGl2X2ZyYWMgPSAwOworCX0KKworCWlmICgoKCpmYl9kaXYpIDwgcGxsLT5taW5fZmVlZGJhY2tfZGl2KSB8fCAoKCpmYl9kaXYpID4gcGxsLT5tYXhfZmVlZGJhY2tfZGl2KSkKKwkJcmV0dXJuIGZhbHNlOworCWVsc2UKKwkJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sCitjYWxjX2ZiX3JlZl9kaXYoc3RydWN0IHJhZGVvbl9wbGwgKnBsbCwKKwkJdWludDMyX3QgZnJlcSwKKwkJdWludDMyX3QgcG9zdF9kaXYsCisJCXVpbnQzMl90ICpmYl9kaXYsCisgICAgICAgICAgICAgICAgdWludDMyX3QgKmZiX2Rpdl9mcmFjLAorICAgICAgICAgICAgICAgIHVpbnQzMl90ICpyZWZfZGl2KQoreworCWZpeGVkMjBfMTIgZmZyZXEsIG1heF9lcnJvciwgZXJyb3IsIHBsbF9vdXQsIGE7CisJdTMyIHZjbzsKKwogCWZmcmVxLmZ1bGwgPSByZml4ZWRfY29uc3QoZnJlcSk7Ci0JZXJyb3IuZnVsbCA9IHJmaXhlZF9jb25zdCgxMDAgKiAxMDApOworCS8qIG1heF9lcnJvciA9IGZmcmVxICogMC4wMDI1OyAqLworCWEuZnVsbCA9IHJmaXhlZF9jb25zdCg0MDApOworCW1heF9lcnJvci5mdWxsID0gcmZpeGVkX2RpdihmZnJlcSwgYSk7CiAKLQkvKiBtYXggcCAqLwotCXAuZnVsbCA9IHJmaXhlZF9kaXYocGxsX291dF9tYXgsIGZmcmVxKTsKLQlwLmZ1bGwgPSByZml4ZWRfZmxvb3IocCk7CisJZm9yICgoKnJlZl9kaXYpID0gcGxsLT5taW5fcmVmX2RpdjsgKCpyZWZfZGl2KSA8IHBsbC0+bWF4X3JlZl9kaXY7ICsrKCpyZWZfZGl2KSkgeworCQlpZiAoY2FsY19mYl9kaXYocGxsLCBmcmVxLCBwb3N0X2RpdiwgKCpyZWZfZGl2KSwgZmJfZGl2LCBmYl9kaXZfZnJhYykpIHsKKwkJCXZjbyA9IHBsbC0+cmVmZXJlbmNlX2ZyZXEgKiAoKCgqZmJfZGl2KSAqIDEwKSArICgqZmJfZGl2X2ZyYWMpKTsKKwkJCXZjbyA9IHZjbyAvICgoKnJlZl9kaXYpICogMTApOwogCi0JLyogbWluIG0gKi8KLQltLmZ1bGwgPSByZml4ZWRfZGl2KHJlZmVyZW5jZV9mcmVxLCBwbGxfaW5fbWF4KTsKLQltLmZ1bGwgPSByZml4ZWRfY2VpbChtKTsKKwkJCWlmICgodmNvIDwgcGxsLT5wbGxfb3V0X21pbikgfHwgKHZjbyA+IHBsbC0+cGxsX291dF9tYXgpKQorCQkJCWNvbnRpbnVlOwogCi0Jd2hpbGUgKDEpIHsKLQkJbi5mdWxsID0gcmZpeGVkX2RpdihmZnJlcSwgcmVmZXJlbmNlX2ZyZXEpOwotCQluLmZ1bGwgPSByZml4ZWRfbXVsKG4sIG0pOwotCQluLmZ1bGwgPSByZml4ZWRfbXVsKG4sIHApOworCQkJLyogcGxsX291dCA9IHZjbyAvIHBvc3RfZGl2OyAqLworCQkJYS5mdWxsID0gcmZpeGVkX2NvbnN0KHBvc3RfZGl2KTsKKwkJCXBsbF9vdXQuZnVsbCA9IHJmaXhlZF9jb25zdCh2Y28pOworCQkJcGxsX291dC5mdWxsID0gcmZpeGVkX2RpdihwbGxfb3V0LCBhKTsKIAotCQlmX3Zjby5mdWxsID0gcmZpeGVkX2RpdihuLCBtKTsKLQkJZl92Y28uZnVsbCA9IHJmaXhlZF9tdWwoZl92Y28sIHJlZmVyZW5jZV9mcmVxKTsKKwkJCWlmIChwbGxfb3V0LmZ1bGwgPj0gZmZyZXEuZnVsbCkgeworCQkJCWVycm9yLmZ1bGwgPSBwbGxfb3V0LmZ1bGwgLSBmZnJlcS5mdWxsOworCQkJCWlmIChlcnJvci5mdWxsIDw9IG1heF9lcnJvci5mdWxsKQorCQkJCQlyZXR1cm4gdHJ1ZTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gZmFsc2U7Cit9CiAKLQkJZl9wY2xrLmZ1bGwgPSByZml4ZWRfZGl2KGZfdmNvLCBwKTsKK3N0YXRpYyB2b2lkIHJhZGVvbl9jb21wdXRlX3BsbF9uZXcoc3RydWN0IHJhZGVvbl9wbGwgKnBsbCwKKwkJCQkgICB1aW50NjRfdCBmcmVxLAorCQkJCSAgIHVpbnQzMl90ICpkb3RfY2xvY2tfcCwKKwkJCQkgICB1aW50MzJfdCAqZmJfZGl2X3AsCisJCQkJICAgdWludDMyX3QgKmZyYWNfZmJfZGl2X3AsCisJCQkJICAgdWludDMyX3QgKnJlZl9kaXZfcCwKKwkJCQkgICB1aW50MzJfdCAqcG9zdF9kaXZfcCkKK3sKKwl1MzIgZmJfZGl2ID0gMCwgZmJfZGl2X2ZyYWMgPSAwLCBwb3N0X2RpdiA9IDAsIHJlZl9kaXYgPSAwOworCXUzMiBiZXN0X2ZyZXEgPSAwLCB2Y29fZnJlcXVlbmN5OwogCi0JCWlmIChmX3BjbGsuZnVsbCA+IGZmcmVxLmZ1bGwpCi0JCQllcnJvci5mdWxsID0gZl9wY2xrLmZ1bGwgLSBmZnJlcS5mdWxsOwotCQllbHNlCi0JCQllcnJvci5mdWxsID0gZmZyZXEuZnVsbCAtIGZfcGNsay5mdWxsOwotCQllcnJvci5mdWxsID0gcmZpeGVkX2RpdihlcnJvciwgZl9wY2xrKTsKLQkJYS5mdWxsID0gcmZpeGVkX2NvbnN0KDEwMCAqIDEwMCk7Ci0JCWVycm9yLmZ1bGwgPSByZml4ZWRfbXVsKGVycm9yLCBhKTsKKwkvKiBmcmVxID0gZnJlcSAvIDEwOyAqLworCWRvX2RpdihmcmVxLCAxMCk7CiAKLQkJYS5mdWxsID0gcmZpeGVkX211bChtLCBwKTsKLQkJYS5mdWxsID0gcmZpeGVkX2RpdihuLCBhKTsKLQkJYmVzdF9mcmVxLmZ1bGwgPSByZml4ZWRfbXVsKHJlZmVyZW5jZV9mcmVxLCBhKTsKKwlpZiAocGxsLT5mbGFncyAmIFJBREVPTl9QTExfVVNFX1BPU1RfRElWKSB7CisJCXBvc3RfZGl2ID0gcGxsLT5wb3N0X2RpdjsKKwkJaWYgKChwb3N0X2RpdiA8IHBsbC0+bWluX3Bvc3RfZGl2KSB8fCAocG9zdF9kaXYgPiBwbGwtPm1heF9wb3N0X2RpdikpCisJCQlnb3RvIGRvbmU7CiAKLQkJaWYgKHJmaXhlZF90cnVuYyhlcnJvcikgPCAyNSkKLQkJCWJyZWFrOworCQl2Y29fZnJlcXVlbmN5ID0gZnJlcSAqIHBvc3RfZGl2OworCQlpZiAoKHZjb19mcmVxdWVuY3kgPCBwbGwtPnBsbF9vdXRfbWluKSB8fCAodmNvX2ZyZXF1ZW5jeSA+IHBsbC0+cGxsX291dF9tYXgpKQorCQkJZ290byBkb25lOwogCi0JCWEuZnVsbCA9IHJmaXhlZF9jb25zdCgxKTsKLQkJbS5mdWxsID0gbS5mdWxsICsgYS5mdWxsOwotCQlhLmZ1bGwgPSByZml4ZWRfZGl2KHJlZmVyZW5jZV9mcmVxLCBtKTsKLQkJaWYgKGEuZnVsbCA+PSBwbGxfaW5fbWluLmZ1bGwpCi0JCQljb250aW51ZTsKKwkJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX1VTRV9SRUZfRElWKSB7CisJCQlyZWZfZGl2ID0gcGxsLT5yZWZlcmVuY2VfZGl2OworCQkJaWYgKChyZWZfZGl2IDwgcGxsLT5taW5fcmVmX2RpdikgfHwgKHJlZl9kaXYgPiBwbGwtPm1heF9yZWZfZGl2KSkKKwkJCQlnb3RvIGRvbmU7CisJCQlpZiAoIWNhbGNfZmJfZGl2KHBsbCwgZnJlcSwgcG9zdF9kaXYsIHJlZl9kaXYsICZmYl9kaXYsICZmYl9kaXZfZnJhYykpCisJCQkJZ290byBkb25lOworCQl9CisJfSBlbHNlIHsKKwkJZm9yIChwb3N0X2RpdiA9IHBsbC0+bWF4X3Bvc3RfZGl2OyBwb3N0X2RpdiA+PSBwbGwtPm1pbl9wb3N0X2RpdjsgLS1wb3N0X2RpdikgeworCQkJaWYgKHBsbC0+ZmxhZ3MgJiBSQURFT05fUExMX0xFR0FDWSkgeworCQkJCWlmICgocG9zdF9kaXYgPT0gNSkgfHwKKwkJCQkgICAgKHBvc3RfZGl2ID09IDcpIHx8CisJCQkJICAgIChwb3N0X2RpdiA9PSA5KSB8fAorCQkJCSAgICAocG9zdF9kaXYgPT0gMTApIHx8CisJCQkJICAgIChwb3N0X2RpdiA9PSAxMSkpCisJCQkJCWNvbnRpbnVlOworCQkJfQogCi0JCW0uZnVsbCA9IHJmaXhlZF9kaXYocmVmZXJlbmNlX2ZyZXEsIHBsbF9pbl9tYXgpOwotCQltLmZ1bGwgPSByZml4ZWRfY2VpbChtKTsKLQkJYS5mdWxsPSByZml4ZWRfY29uc3QoMSk7Ci0JCXAuZnVsbCA9IHAuZnVsbCAtIGEuZnVsbDsKLQkJYS5mdWxsID0gcmZpeGVkX211bChwLCBmZnJlcSk7Ci0JCWlmIChhLmZ1bGwgPj0gcGxsX291dF9taW4uZnVsbCkKLQkJCWNvbnRpbnVlOwotCQllbHNlIHsKLQkJCURSTV9FUlJPUigiVW5hYmxlIHRvIGZpbmQgcGxsIGRpdmlkZXJzXG4iKTsKLQkJCWJyZWFrOworCQkJaWYgKChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9OT19PRERfUE9TVF9ESVYpICYmIChwb3N0X2RpdiAmIDEpKQorCQkJCWNvbnRpbnVlOworCisJCQl2Y29fZnJlcXVlbmN5ID0gZnJlcSAqIHBvc3RfZGl2OworCQkJaWYgKCh2Y29fZnJlcXVlbmN5IDwgcGxsLT5wbGxfb3V0X21pbikgfHwgKHZjb19mcmVxdWVuY3kgPiBwbGwtPnBsbF9vdXRfbWF4KSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChwbGwtPmZsYWdzICYgUkFERU9OX1BMTF9VU0VfUkVGX0RJVikgeworCQkJCXJlZl9kaXYgPSBwbGwtPnJlZmVyZW5jZV9kaXY7CisJCQkJaWYgKChyZWZfZGl2IDwgcGxsLT5taW5fcmVmX2RpdikgfHwgKHJlZl9kaXYgPiBwbGwtPm1heF9yZWZfZGl2KSkKKwkJCQkJZ290byBkb25lOworCQkJCWlmIChjYWxjX2ZiX2RpdihwbGwsIGZyZXEsIHBvc3RfZGl2LCByZWZfZGl2LCAmZmJfZGl2LCAmZmJfZGl2X2ZyYWMpKQorCQkJCQlicmVhazsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGNhbGNfZmJfcmVmX2RpdihwbGwsIGZyZXEsIHBvc3RfZGl2LCAmZmJfZGl2LCAmZmJfZGl2X2ZyYWMsICZyZWZfZGl2KSkKKwkJCQkJYnJlYWs7CisJCQl9CiAJCX0KIAl9CiAKLQlhLmZ1bGwgPSByZml4ZWRfY29uc3QoMTApOwotCWIuZnVsbCA9IHJmaXhlZF9tdWwobiwgYSk7CisJYmVzdF9mcmVxID0gcGxsLT5yZWZlcmVuY2VfZnJlcSAqIDEwICogZmJfZGl2OworCWJlc3RfZnJlcSArPSBwbGwtPnJlZmVyZW5jZV9mcmVxICogZmJfZGl2X2ZyYWM7CisJYmVzdF9mcmVxID0gYmVzdF9mcmVxIC8gKHJlZl9kaXYgKiBwb3N0X2Rpdik7CiAKLQlmcmFjX24uZnVsbCA9IHJmaXhlZF9mbG9vcihuKTsKLQlmcmFjX24uZnVsbCA9IHJmaXhlZF9tdWwoZnJhY19uLCBhKTsKLQlmcmFjX24uZnVsbCA9IGIuZnVsbCAtIGZyYWNfbi5mdWxsOworZG9uZToKKwlpZiAoYmVzdF9mcmVxID09IDApCisJCURSTV9FUlJPUigiQ291bGRuJ3QgZmluZCB2YWxpZCBQTEwgZGl2aWRlcnNcbiIpOwogCi0JKmRvdF9jbG9ja19wID0gcmZpeGVkX3RydW5jKGJlc3RfZnJlcSk7Ci0JKmZiX2Rpdl9wID0gcmZpeGVkX3RydW5jKG4pOwotCSpmcmFjX2ZiX2Rpdl9wID0gcmZpeGVkX3RydW5jKGZyYWNfbik7Ci0JKnJlZl9kaXZfcCA9IHJmaXhlZF90cnVuYyhtKTsKLQkqcG9zdF9kaXZfcCA9IHJmaXhlZF90cnVuYyhwKTsKKwkqZG90X2Nsb2NrX3AgPSBiZXN0X2ZyZXEgLyAxMDsKKwkqZmJfZGl2X3AgPSBmYl9kaXY7CisJKmZyYWNfZmJfZGl2X3AgPSBmYl9kaXZfZnJhYzsKKwkqcmVmX2Rpdl9wID0gcmVmX2RpdjsKKwkqcG9zdF9kaXZfcCA9IHBvc3RfZGl2OwogCi0JRFJNX0RFQlVHKCIldSAlZC4lZCwgJWQsICVkXG4iLCAqZG90X2Nsb2NrX3AgKiAxMCwgKmZiX2Rpdl9wLCAqZnJhY19mYl9kaXZfcCwgKnJlZl9kaXZfcCwgKnBvc3RfZGl2X3ApOworCURSTV9ERUJVRygiJXUgJWQuJWQsICVkLCAlZFxuIiwgKmRvdF9jbG9ja19wLCAqZmJfZGl2X3AsICpmcmFjX2ZiX2Rpdl9wLCAqcmVmX2Rpdl9wLCAqcG9zdF9kaXZfcCk7Cit9CisKK3ZvaWQgcmFkZW9uX2NvbXB1dGVfcGxsKHN0cnVjdCByYWRlb25fcGxsICpwbGwsCisJCQl1aW50NjRfdCBmcmVxLAorCQkJdWludDMyX3QgKmRvdF9jbG9ja19wLAorCQkJdWludDMyX3QgKmZiX2Rpdl9wLAorCQkJdWludDMyX3QgKmZyYWNfZmJfZGl2X3AsCisJCQl1aW50MzJfdCAqcmVmX2Rpdl9wLAorCQkJdWludDMyX3QgKnBvc3RfZGl2X3ApCit7CisJc3dpdGNoIChwbGwtPmFsZ28pIHsKKwljYXNlIFBMTF9BTEdPX05FVzoKKwkJcmFkZW9uX2NvbXB1dGVfcGxsX25ldyhwbGwsIGZyZXEsIGRvdF9jbG9ja19wLCBmYl9kaXZfcCwKKwkJCQkgICAgICAgZnJhY19mYl9kaXZfcCwgcmVmX2Rpdl9wLCBwb3N0X2Rpdl9wKTsKKwkJYnJlYWs7CisJY2FzZSBQTExfQUxHT19MRUdBQ1k6CisJZGVmYXVsdDoKKwkJcmFkZW9uX2NvbXB1dGVfcGxsX2xlZ2FjeShwbGwsIGZyZXEsIGRvdF9jbG9ja19wLCBmYl9kaXZfcCwKKwkJCQkJICBmcmFjX2ZiX2Rpdl9wLCByZWZfZGl2X3AsIHBvc3RfZGl2X3ApOworCQlicmVhazsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHJhZGVvbl91c2VyX2ZyYW1lYnVmZmVyX2Rlc3Ryb3koc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCkBAIC02NzksMTEgKzgxMCw4IEBACiAJaWYgKGZiLT5mYmRldikKIAkJcmFkZW9uZmJfcmVtb3ZlKGRldiwgZmIpOwogCi0JaWYgKHJhZGVvbl9mYi0+b2JqKSB7Ci0JCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UocmFkZW9uX2ZiLT5vYmopOwotCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQl9CisJaWYgKHJhZGVvbl9mYi0+b2JqKQorCQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChyYWRlb25fZmItPm9iaik7CiAJZHJtX2ZyYW1lYnVmZmVyX2NsZWFudXAoZmIpOwogCWtmcmVlKHJhZGVvbl9mYik7CiB9CkBAIC04MTksNyArOTQ3LDcgQEAKIAogaW50IHJhZGVvbl9tb2Rlc2V0X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JaW50IG51bV9jcnRjID0gMiwgaTsKKwlpbnQgaTsKIAlpbnQgcmV0OwogCiAJZHJtX21vZGVfY29uZmlnX2luaXQocmRldi0+ZGRldik7CkBAIC04NDIsMTEgKzk3MCwyMyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAorCS8qIGNoZWNrIGNvbWJpb3MgZm9yIGEgdmFsaWQgaGFyZGNvZGVkIEVESUQgLSBTdW4gc2VydmVycyAqLworCWlmICghcmRldi0+aXNfYXRvbV9iaW9zKSB7CisJCS8qIGNoZWNrIGZvciBoYXJkY29kZWQgRURJRCBpbiBCSU9TICovCisJCXJhZGVvbl9jb21iaW9zX2NoZWNrX2hhcmRjb2RlZF9lZGlkKHJkZXYpOworCX0KKwogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykKLQkJbnVtX2NydGMgPSAxOworCQlyZGV2LT5udW1fY3J0YyA9IDE7CisJZWxzZSB7CisJCWlmIChBU0lDX0lTX0RDRTQocmRldikpCisJCQlyZGV2LT5udW1fY3J0YyA9IDY7CisJCWVsc2UKKwkJCXJkZXYtPm51bV9jcnRjID0gMjsKKwl9CiAKIAkvKiBhbGxvY2F0ZSBjcnRjcyAqLwotCWZvciAoaSA9IDA7IGkgPCBudW1fY3J0YzsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IHJkZXYtPm51bV9jcnRjOyBpKyspIHsKIAkJcmFkZW9uX2NydGNfaW5pdChyZGV2LT5kZGV2LCBpKTsKIAl9CiAKQEAgLTg2Myw2ICsxMDAzLDggQEAKIAogdm9pZCByYWRlb25fbW9kZXNldF9maW5pKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogeworCWtmcmVlKHJkZXYtPm1vZGVfaW5mby5iaW9zX2hhcmRjb2RlZF9lZGlkKTsKKwogCWlmIChyZGV2LT5tb2RlX2luZm8ubW9kZV9jb25maWdfaW5pdGlhbGl6ZWQpIHsKIAkJcmFkZW9uX2hwZF9maW5pKHJkZXYpOwogCQlkcm1fbW9kZV9jb25maWdfY2xlYW51cChyZGV2LT5kZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKaW5kZXggOGJhM2RlNy4uNmVlYzBlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMKQEAgLTQwLDkgKzQwLDExIEBACiAKIC8qCiAgKiBLTVMgd3JhcHBlci4KKyAqIC0gMi4wLjAgLSBpbml0aWFsIGludGVyZmFjZQorICogLSAyLjEuMCAtIGFkZCBzcXVhcmUgdGlsaW5nIGludGVyZmFjZQogICovCiAjZGVmaW5lIEtNU19EUklWRVJfTUFKT1IJMgotI2RlZmluZSBLTVNfRFJJVkVSX01JTk9SCTAKKyNkZWZpbmUgS01TX0RSSVZFUl9NSU5PUgkxCiAjZGVmaW5lIEtNU19EUklWRVJfUEFUQ0hMRVZFTAkwCiBpbnQgcmFkZW9uX2RyaXZlcl9sb2FkX2ttcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKTsKIGludCByYWRlb25fZHJpdmVyX3VubG9hZF9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CkBAIC04Niw3ICs4OCw4IEBACiBpbnQgcmFkZW9uX3Rlc3RpbmcgPSAwOwogaW50IHJhZGVvbl9jb25uZWN0b3JfdGFibGUgPSAwOwogaW50IHJhZGVvbl90diA9IDE7Ci1pbnQgcmFkZW9uX25ld19wbGwgPSAxOworaW50IHJhZGVvbl9uZXdfcGxsID0gLTE7CitpbnQgcmFkZW9uX2R5bnBtID0gLTE7CiBpbnQgcmFkZW9uX2F1ZGlvID0gMTsKIAogTU9EVUxFX1BBUk1fREVTQyhub193YiwgIkRpc2FibGUgQUdQIHdyaXRlYmFjayBmb3Igc2NyYXRjaCByZWdpc3RlcnMiKTsKQEAgLTEyMiw5ICsxMjUsMTIgQEAKIE1PRFVMRV9QQVJNX0RFU0ModHYsICJUViBlbmFibGUgKDAgPSBkaXNhYmxlKSIpOwogbW9kdWxlX3BhcmFtX25hbWVkKHR2LCByYWRlb25fdHYsIGludCwgMDQ0NCk7CiAKLU1PRFVMRV9QQVJNX0RFU0MobmV3X3BsbCwgIlNlbGVjdCBuZXcgUExMIGNvZGUgZm9yIEFWSVZPIGNoaXBzIik7CitNT0RVTEVfUEFSTV9ERVNDKG5ld19wbGwsICJTZWxlY3QgbmV3IFBMTCBjb2RlIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQobmV3X3BsbCwgcmFkZW9uX25ld19wbGwsIGludCwgMDQ0NCk7CiAKK01PRFVMRV9QQVJNX0RFU0MoZHlucG0sICJEaXNhYmxlL0VuYWJsZSBkeW5hbWljIHBvd2VyIG1hbmFnZW1lbnQgKDEgPSBlbmFibGUpIik7Cittb2R1bGVfcGFyYW1fbmFtZWQoZHlucG0sIHJhZGVvbl9keW5wbSwgaW50LCAwNDQ0KTsKKwogTU9EVUxFX1BBUk1fREVTQyhhdWRpbywgIkF1ZGlvIGVuYWJsZSAoMCA9IGRpc2FibGUpIik7CiBtb2R1bGVfcGFyYW1fbmFtZWQoYXVkaW8sIHJhZGVvbl9hdWRpbywgaW50LCAwNDQ0KTsKIApAQCAtMzM5LDYgKzM0NSw3IEBACiAJCWRyaXZlciA9ICZrbXNfZHJpdmVyOwogCQlkcml2ZXItPmRyaXZlcl9mZWF0dXJlcyB8PSBEUklWRVJfTU9ERVNFVDsKIAkJZHJpdmVyLT5udW1faW9jdGxzID0gcmFkZW9uX21heF9rbXNfaW9jdGw7CisJCXJhZGVvbl9yZWdpc3Rlcl9hdHB4X2hhbmRsZXIoKTsKIAl9CiAJLyogaWYgdGhlIHZnYSBjb25zb2xlIHNldHRpbmcgaXMgZW5hYmxlZCBzdGlsbAogCSAqIGxldCBtb2Rwcm9iZSBvdmVycmlkZSBpdCAqLwpAQCAtMzQ4LDYgKzM1NSw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgcmFkZW9uX2V4aXQodm9pZCkKIHsKIAlkcm1fZXhpdChkcml2ZXIpOworCXJhZGVvbl91bnJlZ2lzdGVyX2F0cHhfaGFuZGxlcigpOwogfQogCiBtb2R1bGVfaW5pdChyYWRlb25faW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5oCmluZGV4IGM1N2FkNjAuLmVjNTVmMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2Rydi5oCkBAIC0yNjgsNiArMjY4LDggQEAKIAogCXUzMiBzY3JhdGNoX2FnZXNbNV07CiAKKwlpbnQgaGF2ZV96X29mZnNldDsKKwogCS8qIHN0YXJ0aW5nIGZyb20gaGVyZSBvbiwgZGF0YSBpcyBwcmVzZXJ2ZWQgYWNjcm9zcyBhbiBvcGVuICovCiAJdWludDMyX3QgZmxhZ3M7CQkvKiBzZWUgcmFkZW9uX2NoaXBfZmxhZ3MgKi8KIAlyZXNvdXJjZV9zaXplX3QgZmJfYXBlcl9vZmZzZXQ7CkBAIC0yOTUsNiArMjk3LDkgQEAKIAlpbnQgcjcwMF9zY19wcmltX2ZpZm9fc2l6ZTsKIAlpbnQgcjcwMF9zY19oaXpfdGlsZV9maWZvX3NpemU7CiAJaW50IHI3MDBfc2NfZWFybHl6X3RpbGVfZmlmb19maXplOworCWludCByNjAwX2dyb3VwX3NpemU7CisJaW50IHI2MDBfbnBpcGVzOworCWludCByNjAwX25iYW5rczsKIAogCXN0cnVjdCBtdXRleCBjc19tdXRleDsKIAl1MzIgY3NfaWRfc2NudDsKQEAgLTMxMCw5ICszMTUsMTEgQEAKIAl1MzIgYWdlOwogfSBkcm1fcmFkZW9uX2J1Zl9wcml2X3Q7CiAKK3N0cnVjdCBkcm1fYnVmZmVyOworCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2tjbWRfYnVmZmVyIHsKIAlpbnQgYnVmc3o7Ci0JY2hhciAqYnVmOworCXN0cnVjdCBkcm1fYnVmZmVyICpidWZmZXI7CiAJaW50IG5ib3g7CiAJc3RydWN0IGRybV9jbGlwX3JlY3QgX191c2VyICpib3hlczsKIH0gZHJtX3JhZGVvbl9rY21kX2J1ZmZlcl90OwpAQCAtNDU1LDYgKzQ2MiwxNSBAQAogCQkJICAgaW50IHN4LCBpbnQgc3ksIGludCBkeCwgaW50IGR5LAogCQkJICAgaW50IHcsIGludCBoLCBpbnQgc3JjX3BpdGNoLCBpbnQgZHN0X3BpdGNoLCBpbnQgY3BwKTsKIAorLyogYXRweCBoYW5kbGVyICovCisjaWYgZGVmaW5lZChDT05GSUdfVkdBX1NXSVRDSEVST08pCit2b2lkIHJhZGVvbl9yZWdpc3Rlcl9hdHB4X2hhbmRsZXIodm9pZCk7Cit2b2lkIHJhZGVvbl91bnJlZ2lzdGVyX2F0cHhfaGFuZGxlcih2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcmFkZW9uX3JlZ2lzdGVyX2F0cHhfaGFuZGxlcih2b2lkKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHJhZGVvbl91bnJlZ2lzdGVyX2F0cHhfaGFuZGxlcih2b2lkKSB7fQorI2VuZGlmCisKIC8qIEZsYWdzIGZvciBzdGF0cy5ib3hlcwogICovCiAjZGVmaW5lIFJBREVPTl9CT1hfRE1BX0lETEUgICAgICAweDEKQEAgLTIxMjIsNCArMjEzOCwzMiBAQAogCXdyaXRlICY9IG1hc2s7CQkJCQkJXAogfSB3aGlsZSAoMCkKIAorLyoqCisgKiBDb3B5IGdpdmVuIG51bWJlciBvZiBkd29yZHMgZnJvbSBkcm0gYnVmZmVyIHRvIHRoZSByaW5nIGJ1ZmZlci4KKyAqLworI2RlZmluZSBPVVRfUklOR19EUk1fQlVGRkVSKGJ1Ziwgc3opIGRvIHsJCQkJXAorCWludCBfc2l6ZSA9IChzeikgKiA0OwkJCQkJCVwKKwlzdHJ1Y3QgZHJtX2J1ZmZlciAqX2J1ZiA9IChidWYpOwkJCQlcCisJaW50IF9wYXJ0X3NpemU7CQkJCQkJCVwKKwl3aGlsZSAoX3NpemUgPiAwKSB7CQkJCQkJXAorCQlfcGFydF9zaXplID0gX3NpemU7CQkJCQlcCisJCQkJCQkJCQlcCisJCWlmICh3cml0ZSArIF9wYXJ0X3NpemUvNCA+IG1hc2spCQkJXAorCQkJX3BhcnRfc2l6ZSA9ICgobWFzayArIDEpIC0gd3JpdGUpKjQ7CQlcCisJCQkJCQkJCQlcCisJCWlmIChkcm1fYnVmZmVyX2luZGV4KF9idWYpICsgX3BhcnRfc2l6ZSA+IFBBR0VfU0laRSkJXAorCQkJX3BhcnRfc2l6ZSA9IFBBR0VfU0laRSAtIGRybV9idWZmZXJfaW5kZXgoX2J1Zik7XAorCQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCQkJCQkJCQkJXAorCQltZW1jcHkocmluZyArIHdyaXRlLCAmX2J1Zi0+ZGF0YVtkcm1fYnVmZmVyX3BhZ2UoX2J1ZildCVwKKwkJCVtkcm1fYnVmZmVyX2luZGV4KF9idWYpXSwgX3BhcnRfc2l6ZSk7CQlcCisJCQkJCQkJCQlcCisJCV9zaXplIC09IF9wYXJ0X3NpemU7CQkJCQlcCisJCXdyaXRlID0gKHdyaXRlICsgX3BhcnRfc2l6ZS80KSAmIG1hc2s7CQkJXAorCQlkcm1fYnVmZmVyX2FkdmFuY2UoX2J1ZiwgX3BhcnRfc2l6ZSk7CQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKwogI2VuZGlmCQkJCS8qIF9fUkFERU9OX0RSVl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9lbmNvZGVycy5jCmluZGV4IDNjOTE3MjQuLmJjOTI2ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZW5jb2RlcnMuYwpAQCAtNTMsNyArNTMsNyBAQAogCS8qIERWTyByZXF1aXJlcyAyeCBwcGxsIGNsb2NrcyBkZXBlbmRpbmcgb24gdG1kcyBjaGlwICovCiAJaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgQVRPTV9ERVZJQ0VfREZQMl9TVVBQT1JUKQogCQlyZXR1cm4gaW5kZXhfbWFzazsKLQkKKwogCWNvdW50ID0gLTE7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShjbG9uZV9lbmNvZGVyLCAmZGV2LT5tb2RlX2NvbmZpZy5lbmNvZGVyX2xpc3QsIGhlYWQpIHsKIAkJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fY2xvbmUgPSB0b19yYWRlb25fZW5jb2RlcihjbG9uZV9lbmNvZGVyKTsKQEAgLTIyOCw2ICsyMjgsMzIgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIHN0cnVjdCByYWRlb25fY29ubmVjdG9yX2F0b21fZGlnICoKK3JhZGVvbl9nZXRfYXRvbV9jb25uZWN0b3JfcHJpdl9mcm9tX2VuY29kZXIoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3I7CisJc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKmRpZ19jb25uZWN0b3I7CisKKwlpZiAoIXJkZXYtPmlzX2F0b21fYmlvcykKKwkJcmV0dXJuIE5VTEw7CisKKwljb25uZWN0b3IgPSByYWRlb25fZ2V0X2Nvbm5lY3Rvcl9mb3JfZW5jb2RlcihlbmNvZGVyKTsKKwlpZiAoIWNvbm5lY3RvcikKKwkJcmV0dXJuIE5VTEw7CisKKwlyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOworCisJaWYgKCFyYWRlb25fY29ubmVjdG9yLT5jb25fcHJpdikKKwkJcmV0dXJuIE5VTEw7CisKKwlkaWdfY29ubmVjdG9yID0gcmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXY7CisKKwlyZXR1cm4gZGlnX2Nvbm5lY3RvcjsKK30KKwogc3RhdGljIGJvb2wgcmFkZW9uX2F0b21fbW9kZV9maXh1cChzdHJ1Y3QgZHJtX2VuY29kZXIgKmVuY29kZXIsCiAJCQkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCiAJCQkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCkBAIC0yMzYsNiArMjYyLDkgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZW5jb2Rlci0+ZGV2OwogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAorCS8qIGFkanVzdCBwbSB0byB1cGNvbWluZyBtb2RlIGNoYW5nZSAqLworCXJhZGVvbl9wbV9jb21wdXRlX2Nsb2NrcyhyZGV2KTsKKwogCS8qIHNldCB0aGUgYWN0aXZlIGVuY29kZXIgdG8gY29ubmVjdG9yIHJvdXRpbmcgKi8KIAlyYWRlb25fZW5jb2Rlcl9zZXRfYWN0aXZlX2RldmljZShlbmNvZGVyKTsKIAlkcm1fbW9kZV9zZXRfY3J0Y2luZm8oYWRqdXN0ZWRfbW9kZSwgMCk7CkBAIC00NTgsMzQgKzQ4NywyMCBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKmRpZyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKKwlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3Rvcl9hdG9tX2RpZyAqZGlnX2Nvbm5lY3RvciA9CisJCXJhZGVvbl9nZXRfYXRvbV9jb25uZWN0b3JfcHJpdl9mcm9tX2VuY29kZXIoZW5jb2Rlcik7CiAJdW5pb24gbHZkc19lbmNvZGVyX2NvbnRyb2wgYXJnczsKIAlpbnQgaW5kZXggPSAwOwogCWludCBoZG1pX2RldGVjdGVkID0gMDsKIAl1aW50OF90IGZyZXYsIGNyZXY7Ci0Jc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnICpkaWc7Ci0Jc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKLQlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvcjsKLQlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3Rvcl9hdG9tX2RpZyAqZGlnX2Nvbm5lY3RvcjsKIAotCWNvbm5lY3RvciA9IHJhZGVvbl9nZXRfY29ubmVjdG9yX2Zvcl9lbmNvZGVyKGVuY29kZXIpOwotCWlmICghY29ubmVjdG9yKQorCWlmICghZGlnIHx8ICFkaWdfY29ubmVjdG9yKQogCQlyZXR1cm47CiAKLQlyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwotCi0JaWYgKCFyYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXYpCi0JCXJldHVybjsKLQotCWRpZyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKLQotCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXYpCi0JCXJldHVybjsKLQotCWlmIChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihyYWRlb25fY29ubmVjdG9yLT5lZGlkKSkKKwlpZiAoYXRvbWJpb3NfZ2V0X2VuY29kZXJfbW9kZShlbmNvZGVyKSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9IRE1JKQogCQloZG1pX2RldGVjdGVkID0gMTsKIAotCWRpZ19jb25uZWN0b3IgPSByYWRlb25fY29ubmVjdG9yLT5jb25fcHJpdjsKLQogCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKIAogCXN3aXRjaCAocmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQpIHsKQEAgLTU4Niw3ICs2MDEsNyBAQAogewogCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CiAJc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3I7Ci0Jc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKnJhZGVvbl9kaWdfY29ubmVjdG9yOworCXN0cnVjdCByYWRlb25fY29ubmVjdG9yX2F0b21fZGlnICpkaWdfY29ubmVjdG9yOwogCiAJY29ubmVjdG9yID0gcmFkZW9uX2dldF9jb25uZWN0b3JfZm9yX2VuY29kZXIoZW5jb2Rlcik7CiAJaWYgKCFjb25uZWN0b3IpCkBAIC02MTcsOSArNjMyLDkgQEAKIAkJYnJlYWs7CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfRGlzcGxheVBvcnQ6CiAJY2FzZSBEUk1fTU9ERV9DT05ORUNUT1JfZURQOgotCQlyYWRlb25fZGlnX2Nvbm5lY3RvciA9IHJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2OwotCQlpZiAoKHJhZGVvbl9kaWdfY29ubmVjdG9yLT5kcF9zaW5rX3R5cGUgPT0gQ09OTkVDVE9SX09CSkVDVF9JRF9ESVNQTEFZUE9SVCkgfHwKLQkJICAgIChyYWRlb25fZGlnX2Nvbm5lY3Rvci0+ZHBfc2lua190eXBlID09IENPTk5FQ1RPUl9PQkpFQ1RfSURfZURQKSkKKwkJZGlnX2Nvbm5lY3RvciA9IHJhZGVvbl9jb25uZWN0b3ItPmNvbl9wcml2OworCQlpZiAoKGRpZ19jb25uZWN0b3ItPmRwX3NpbmtfdHlwZSA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX0RJU1BMQVlQT1JUKSB8fAorCQkgICAgKGRpZ19jb25uZWN0b3ItPmRwX3NpbmtfdHlwZSA9PSBDT05ORUNUT1JfT0JKRUNUX0lEX2VEUCkpCiAJCQlyZXR1cm4gQVRPTV9FTkNPREVSX01PREVfRFA7CiAJCWVsc2UgaWYgKGRybV9kZXRlY3RfaGRtaV9tb25pdG9yKHJhZGVvbl9jb25uZWN0b3ItPmVkaWQpKQogCQkJcmV0dXJuIEFUT01fRU5DT0RFUl9NT0RFX0hETUk7CkBAIC02NTYsNiArNjcxLDE4IEBACiAgKiAtIDIgRElHIGVuY29kZXIgYmxvY2tzLgogICogRElHMS8yIGNhbiBkcml2ZSBVTklQSFkwLzEvMiBsaW5rIEEgb3IgbGluayBCCiAgKgorICogRENFIDQuMAorICogLSAzIERJRyB0cmFuc21pdHRlciBibG9ja3MgVU5QSFkwLzEvMiAobGlua3MgQSBhbmQgQikuCisgKiBTdXBwb3J0cyB1cCB0byA2IGRpZ2l0YWwgb3V0cHV0cworICogLSA2IERJRyBlbmNvZGVyIGJsb2Nrcy4KKyAqIC0gRElHIHRvIFBIWSBtYXBwaW5nIGlzIGhhcmRjb2RlZAorICogRElHMSBkcml2ZXMgVU5JUEhZMCBsaW5rIEEsIEErQgorICogRElHMiBkcml2ZXMgVU5JUEhZMCBsaW5rIEIKKyAqIERJRzMgZHJpdmVzIFVOSVBIWTEgbGluayBBLCBBK0IKKyAqIERJRzQgZHJpdmVzIFVOSVBIWTEgbGluayBCCisgKiBESUc1IGRyaXZlcyBVTklQSFkyIGxpbmsgQSwgQStCCisgKiBESUc2IGRyaXZlcyBVTklQSFkyIGxpbmsgQgorICoKICAqIFJvdXRpbmcKICAqIGNydGMgLT4gZGlnIGVuY29kZXIgLT4gVU5JUEhZL0xWVE1BICgxIG9yIDIgbGlua3MpCiAgKiBFeGFtcGxlczoKQEAgLTY2NCw4OCArNjkxLDc4IEBACiAgKiBjcnRjMCAtPiBkaWcxIC0+IFVOSVBIWTIgbGluayAgQSAgIC0+IExWRFMKICAqIGNydGMxIC0+IGRpZzIgLT4gVU5JUEhZMSBsaW5rICBCK0EgLT4gVE1EUy9IRE1JCiAgKi8KLXN0YXRpYyB2b2lkCisKK3VuaW9uIGRpZ19lbmNvZGVyX2NvbnRyb2wgeworCURJR19FTkNPREVSX0NPTlRST0xfUFNfQUxMT0NBVElPTiB2MTsKKwlESUdfRU5DT0RFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjIgdjI7CisJRElHX0VOQ09ERVJfQ09OVFJPTF9QQVJBTUVURVJTX1YzIHYzOworfTsKKwordm9pZAogYXRvbWJpb3NfZGlnX2VuY29kZXJfc2V0dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLCBpbnQgYWN0aW9uKQogewogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKLQlESUdfRU5DT0RFUl9DT05UUk9MX1BTX0FMTE9DQVRJT04gYXJnczsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKmRpZyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKKwlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3Rvcl9hdG9tX2RpZyAqZGlnX2Nvbm5lY3RvciA9CisJCXJhZGVvbl9nZXRfYXRvbV9jb25uZWN0b3JfcHJpdl9mcm9tX2VuY29kZXIoZW5jb2Rlcik7CisJdW5pb24gZGlnX2VuY29kZXJfY29udHJvbCBhcmdzOwogCWludCBpbmRleCA9IDAsIG51bSA9IDA7CiAJdWludDhfdCBmcmV2LCBjcmV2OwotCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqZGlnOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Ci0Jc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3I7Ci0Jc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKmRpZ19jb25uZWN0b3I7CiAKLQljb25uZWN0b3IgPSByYWRlb25fZ2V0X2Nvbm5lY3Rvcl9mb3JfZW5jb2RlcihlbmNvZGVyKTsKLQlpZiAoIWNvbm5lY3RvcikKKwlpZiAoIWRpZyB8fCAhZGlnX2Nvbm5lY3RvcikKIAkJcmV0dXJuOwogCi0JcmFkZW9uX2Nvbm5lY3RvciA9IHRvX3JhZGVvbl9jb25uZWN0b3IoY29ubmVjdG9yKTsKLQotCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXYpCi0JCXJldHVybjsKLQotCWRpZ19jb25uZWN0b3IgPSByYWRlb25fY29ubmVjdG9yLT5jb25fcHJpdjsKLQotCWlmICghcmFkZW9uX2VuY29kZXItPmVuY19wcml2KQotCQlyZXR1cm47Ci0KLQlkaWcgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7Ci0KIAltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CiAKLQlpZiAoZGlnLT5kaWdfZW5jb2RlcikKLQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBESUcyRW5jb2RlckNvbnRyb2wpOwotCWVsc2UKLQkJaW5kZXggPSBHZXRJbmRleEludG9NYXN0ZXJUYWJsZShDT01NQU5ELCBESUcxRW5jb2RlckNvbnRyb2wpOworCWlmIChBU0lDX0lTX0RDRTQocmRldikpCisJCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgRElHeEVuY29kZXJDb250cm9sKTsKKwllbHNlIHsKKwkJaWYgKGRpZy0+ZGlnX2VuY29kZXIpCisJCQlpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIERJRzJFbmNvZGVyQ29udHJvbCk7CisJCWVsc2UKKwkJCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgRElHMUVuY29kZXJDb250cm9sKTsKKwl9CiAJbnVtID0gZGlnLT5kaWdfZW5jb2RlciArIDE7CiAKIAlhdG9tX3BhcnNlX2NtZF9oZWFkZXIocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICZmcmV2LCAmY3Jldik7CiAKLQlhcmdzLnVjQWN0aW9uID0gYWN0aW9uOwotCWFyZ3MudXNQaXhlbENsb2NrID0gY3B1X3RvX2xlMTYocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrIC8gMTApOworCWFyZ3MudjEudWNBY3Rpb24gPSBhY3Rpb247CisJYXJncy52MS51c1BpeGVsQ2xvY2sgPSBjcHVfdG9fbGUxNihyYWRlb25fZW5jb2Rlci0+cGl4ZWxfY2xvY2sgLyAxMCk7CisJYXJncy52MS51Y0VuY29kZXJNb2RlID0gYXRvbWJpb3NfZ2V0X2VuY29kZXJfbW9kZShlbmNvZGVyKTsKIAotCWlmIChBU0lDX0lTX0RDRTMyKHJkZXYpKSB7Ci0JCXN3aXRjaCAocmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQpIHsKLQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFk6Ci0JCQlhcmdzLnVjQ29uZmlnID0gQVRPTV9FTkNPREVSX0NPTkZJR19WMl9UUkFOU01JVFRFUjE7Ci0JCQlicmVhazsKLQkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkxOgotCQkJYXJncy51Y0NvbmZpZyA9IEFUT01fRU5DT0RFUl9DT05GSUdfVjJfVFJBTlNNSVRURVIyOwotCQkJYnJlYWs7Ci0JCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZMjoKLQkJCWFyZ3MudWNDb25maWcgPSBBVE9NX0VOQ09ERVJfQ09ORklHX1YyX1RSQU5TTUlUVEVSMzsKLQkJCWJyZWFrOwotCQl9CisJaWYgKGFyZ3MudjEudWNFbmNvZGVyTW9kZSA9PSBBVE9NX0VOQ09ERVJfTU9ERV9EUCkgeworCQlpZiAoZGlnX2Nvbm5lY3Rvci0+ZHBfY2xvY2sgPT0gMjcwMDAwKQorCQkJYXJncy52MS51Y0NvbmZpZyB8PSBBVE9NX0VOQ09ERVJfQ09ORklHX0RQTElOS1JBVEVfMl83MEdIWjsKKwkJYXJncy52MS51Y0xhbmVOdW0gPSBkaWdfY29ubmVjdG9yLT5kcF9sYW5lX2NvdW50OworCX0gZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrID4gMTY1MDAwKQorCQlhcmdzLnYxLnVjTGFuZU51bSA9IDg7CisJZWxzZQorCQlhcmdzLnYxLnVjTGFuZU51bSA9IDQ7CisKKwlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKSB7CisJCWFyZ3MudjMuYWNDb25maWcudWNEaWdTZWwgPSBkaWctPmRpZ19lbmNvZGVyOworCQlhcmdzLnYzLnVjQml0UGVyQ29sb3IgPSBQQU5FTF84QklUX1BFUl9DT0xPUjsKIAl9IGVsc2UgewogCQlzd2l0Y2ggKHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkKSB7CiAJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZOgotCQkJYXJncy51Y0NvbmZpZyA9IEFUT01fRU5DT0RFUl9DT05GSUdfVFJBTlNNSVRURVIxOworCQkJYXJncy52MS51Y0NvbmZpZyA9IEFUT01fRU5DT0RFUl9DT05GSUdfVjJfVFJBTlNNSVRURVIxOwogCQkJYnJlYWs7CisJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZMToKIAkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfTFZUTUE6Ci0JCQlhcmdzLnVjQ29uZmlnID0gQVRPTV9FTkNPREVSX0NPTkZJR19UUkFOU01JVFRFUjI7CisJCQlhcmdzLnYxLnVjQ29uZmlnID0gQVRPTV9FTkNPREVSX0NPTkZJR19WMl9UUkFOU01JVFRFUjI7CisJCQlicmVhazsKKwkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkyOgorCQkJYXJncy52MS51Y0NvbmZpZyA9IEFUT01fRU5DT0RFUl9DT05GSUdfVjJfVFJBTlNNSVRURVIzOwogCQkJYnJlYWs7CiAJCX0KKwkJaWYgKGRpZ19jb25uZWN0b3ItPmxpbmtiKQorCQkJYXJncy52MS51Y0NvbmZpZyB8PSBBVE9NX0VOQ09ERVJfQ09ORklHX0xJTktCOworCQllbHNlCisJCQlhcmdzLnYxLnVjQ29uZmlnIHw9IEFUT01fRU5DT0RFUl9DT05GSUdfTElOS0E7CiAJfQogCi0JYXJncy51Y0VuY29kZXJNb2RlID0gYXRvbWJpb3NfZ2V0X2VuY29kZXJfbW9kZShlbmNvZGVyKTsKLQotCWlmIChhcmdzLnVjRW5jb2Rlck1vZGUgPT0gQVRPTV9FTkNPREVSX01PREVfRFApIHsKLQkJaWYgKGRpZ19jb25uZWN0b3ItPmRwX2Nsb2NrID09IDI3MDAwMCkKLQkJCWFyZ3MudWNDb25maWcgfD0gQVRPTV9FTkNPREVSX0NPTkZJR19EUExJTktSQVRFXzJfNzBHSFo7Ci0JCWFyZ3MudWNMYW5lTnVtID0gZGlnX2Nvbm5lY3Rvci0+ZHBfbGFuZV9jb3VudDsKLQl9IGVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayA+IDE2NTAwMCkKLQkJYXJncy51Y0xhbmVOdW0gPSA4OwotCWVsc2UKLQkJYXJncy51Y0xhbmVOdW0gPSA0OwotCi0JaWYgKGRpZ19jb25uZWN0b3ItPmxpbmtiKQotCQlhcmdzLnVjQ29uZmlnIHw9IEFUT01fRU5DT0RFUl9DT05GSUdfTElOS0I7Ci0JZWxzZQotCQlhcmdzLnVjQ29uZmlnIHw9IEFUT01fRU5DT0RFUl9DT05GSUdfTElOS0E7Ci0KIAlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKIAogfQpAQCAtNzUzLDYgKzc3MCw3IEBACiB1bmlvbiBkaWdfdHJhbnNtaXR0ZXJfY29udHJvbCB7CiAJRElHX1RSQU5TTUlUVEVSX0NPTlRST0xfUFNfQUxMT0NBVElPTiB2MTsKIAlESUdfVFJBTlNNSVRURVJfQ09OVFJPTF9QQVJBTUVURVJTX1YyIHYyOworCURJR19UUkFOU01JVFRFUl9DT05UUk9MX1BBUkFNRVRFUlNfVjMgdjM7CiB9OwogCiB2b2lkCkBAIC03NjEsMzcgKzc3OSwyOSBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CiAJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOwogCXN0cnVjdCByYWRlb25fZW5jb2RlciAqcmFkZW9uX2VuY29kZXIgPSB0b19yYWRlb25fZW5jb2RlcihlbmNvZGVyKTsKKwlzdHJ1Y3QgcmFkZW9uX2VuY29kZXJfYXRvbV9kaWcgKmRpZyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKKwlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3Rvcl9hdG9tX2RpZyAqZGlnX2Nvbm5lY3RvciA9CisJCXJhZGVvbl9nZXRfYXRvbV9jb25uZWN0b3JfcHJpdl9mcm9tX2VuY29kZXIoZW5jb2Rlcik7CisJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvcjsKKwlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3RvcjsKIAl1bmlvbiBkaWdfdHJhbnNtaXR0ZXJfY29udHJvbCBhcmdzOwogCWludCBpbmRleCA9IDAsIG51bSA9IDA7CiAJdWludDhfdCBmcmV2LCBjcmV2OwotCXN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqZGlnOwotCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Ci0Jc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3I7Ci0Jc3RydWN0IHJhZGVvbl9jb25uZWN0b3JfYXRvbV9kaWcgKmRpZ19jb25uZWN0b3I7CiAJYm9vbCBpc19kcCA9IGZhbHNlOworCWludCBwbGxfaWQgPSAwOworCisJaWYgKCFkaWcgfHwgIWRpZ19jb25uZWN0b3IpCisJCXJldHVybjsKIAogCWNvbm5lY3RvciA9IHJhZGVvbl9nZXRfY29ubmVjdG9yX2Zvcl9lbmNvZGVyKGVuY29kZXIpOwotCWlmICghY29ubmVjdG9yKQotCQlyZXR1cm47Ci0KIAlyYWRlb25fY29ubmVjdG9yID0gdG9fcmFkZW9uX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwogCi0JaWYgKCFyYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXYpCi0JCXJldHVybjsKLQotCWRpZyA9IHJhZGVvbl9lbmNvZGVyLT5lbmNfcHJpdjsKLQotCWlmICghcmFkZW9uX2Nvbm5lY3Rvci0+Y29uX3ByaXYpCi0JCXJldHVybjsKLQotCWRpZ19jb25uZWN0b3IgPSByYWRlb25fY29ubmVjdG9yLT5jb25fcHJpdjsKLQogCWlmIChhdG9tYmlvc19nZXRfZW5jb2Rlcl9tb2RlKGVuY29kZXIpID09IEFUT01fRU5DT0RFUl9NT0RFX0RQKQogCQlpc19kcCA9IHRydWU7CiAKIAltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CiAKLQlpZiAoQVNJQ19JU19EQ0UzMihyZGV2KSkKKwlpZiAoQVNJQ19JU19EQ0UzMihyZGV2KSB8fCBBU0lDX0lTX0RDRTQocmRldikpCiAJCWluZGV4ID0gR2V0SW5kZXhJbnRvTWFzdGVyVGFibGUoQ09NTUFORCwgVU5JUEhZVHJhbnNtaXR0ZXJDb250cm9sKTsKIAllbHNlIHsKIAkJc3dpdGNoIChyYWRlb25fZW5jb2Rlci0+ZW5jb2Rlcl9pZCkgewpAQCAtODIxLDcgKzgzMSw1NCBAQAogCQllbHNlCiAJCQlhcmdzLnYxLnVzUGl4ZWxDbG9jayA9IGNwdV90b19sZTE2KHJhZGVvbl9lbmNvZGVyLT5waXhlbF9jbG9jayAvIDEwKTsKIAl9Ci0JaWYgKEFTSUNfSVNfRENFMzIocmRldikpIHsKKwlpZiAoQVNJQ19JU19EQ0U0KHJkZXYpKSB7CisJCWlmIChpc19kcCkKKwkJCWFyZ3MudjMudWNMYW5lTnVtID0gZGlnX2Nvbm5lY3Rvci0+ZHBfbGFuZV9jb3VudDsKKwkJZWxzZSBpZiAocmFkZW9uX2VuY29kZXItPnBpeGVsX2Nsb2NrID4gMTY1MDAwKQorCQkJYXJncy52My51Y0xhbmVOdW0gPSA4OworCQllbHNlCisJCQlhcmdzLnYzLnVjTGFuZU51bSA9IDQ7CisKKwkJaWYgKGRpZ19jb25uZWN0b3ItPmxpbmtiKSB7CisJCQlhcmdzLnYzLmFjQ29uZmlnLnVjTGlua1NlbCA9IDE7CisJCQlhcmdzLnYzLmFjQ29uZmlnLnVjRW5jb2RlclNlbCA9IDE7CisJCX0KKworCQkvKiBTZWxlY3QgdGhlIFBMTCBmb3IgdGhlIFBIWQorCQkgKiBEUCBQSFkgc2hvdWxkIGJlIGNsb2NrZWQgZnJvbSBleHRlcm5hbCBzcmMgaWYgdGhlcmUgaXMKKwkJICogb25lLgorCQkgKi8KKwkJaWYgKGVuY29kZXItPmNydGMpIHsKKwkJCXN0cnVjdCByYWRlb25fY3J0YyAqcmFkZW9uX2NydGMgPSB0b19yYWRlb25fY3J0YyhlbmNvZGVyLT5jcnRjKTsKKwkJCXBsbF9pZCA9IHJhZGVvbl9jcnRjLT5wbGxfaWQ7CisJCX0KKwkJaWYgKGlzX2RwICYmIHJkZXYtPmNsb2NrLmRwX2V4dGNsaykKKwkJCWFyZ3MudjMuYWNDb25maWcudWNSZWZDbGtTb3VyY2UgPSAyOyAvKiBleHRlcm5hbCBzcmMgKi8KKwkJZWxzZQorCQkJYXJncy52My5hY0NvbmZpZy51Y1JlZkNsa1NvdXJjZSA9IHBsbF9pZDsKKworCQlzd2l0Y2ggKHJhZGVvbl9lbmNvZGVyLT5lbmNvZGVyX2lkKSB7CisJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZOgorCQkJYXJncy52My5hY0NvbmZpZy51Y1RyYW5zbWl0dGVyU2VsID0gMDsKKwkJCW51bSA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkxOgorCQkJYXJncy52My5hY0NvbmZpZy51Y1RyYW5zbWl0dGVyU2VsID0gMTsKKwkJCW51bSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkyOgorCQkJYXJncy52My5hY0NvbmZpZy51Y1RyYW5zbWl0dGVyU2VsID0gMjsKKwkJCW51bSA9IDI7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChpc19kcCkKKwkJCWFyZ3MudjMuYWNDb25maWcuZkNvaGVyZW50TW9kZSA9IDE7IC8qIERQIHJlcXVpcmVzIGNvaGVyZW50ICovCisJCWVsc2UgaWYgKHJhZGVvbl9lbmNvZGVyLT5kZXZpY2VzICYgKEFUT01fREVWSUNFX0RGUF9TVVBQT1JUKSkgeworCQkJaWYgKGRpZy0+Y29oZXJlbnRfbW9kZSkKKwkJCQlhcmdzLnYzLmFjQ29uZmlnLmZDb2hlcmVudE1vZGUgPSAxOworCQl9CisJfSBlbHNlIGlmIChBU0lDX0lTX0RDRTMyKHJkZXYpKSB7CiAJCWlmIChkaWctPmRpZ19lbmNvZGVyID09IDEpCiAJCQlhcmdzLnYyLmFjQ29uZmlnLnVjRW5jb2RlclNlbCA9IDE7CiAJCWlmIChkaWdfY29ubmVjdG9yLT5saW5rYikKQEAgLTg0OSw3ICs5MDYsNiBAQAogCQkJCWFyZ3MudjIuYWNDb25maWcuZkNvaGVyZW50TW9kZSA9IDE7CiAJCX0KIAl9IGVsc2UgewotCiAJCWFyZ3MudjEudWNDb25maWcgPSBBVE9NX1RSQU5TTUlUVEVSX0NPTkZJR19DTEtTUkNfUFBMTDsKIAogCQlpZiAoZGlnLT5kaWdfZW5jb2RlcikKQEAgLTEwMjQsOSArMTA4MCwxMiBAQAogCQlhdG9tX2V4ZWN1dGVfdGFibGUocmRldi0+bW9kZV9pbmZvLmF0b21fY29udGV4dCwgaW5kZXgsICh1aW50MzJfdCAqKSZhcmdzKTsKIAl9CiAJcmFkZW9uX2F0b21iaW9zX2VuY29kZXJfZHBtc19zY3JhdGNoX3JlZ3MoZW5jb2RlciwgKG1vZGUgPT0gRFJNX01PREVfRFBNU19PTikgPyB0cnVlIDogZmFsc2UpOworCisJLyogYWRqdXN0IHBtIHRvIGRwbXMgY2hhbmdlICovCisJcmFkZW9uX3BtX2NvbXB1dGVfY2xvY2tzKHJkZXYpOwogfQogCi11bmlvbiBjcnRjX3NvdXJjX3BhcmFtIHsKK3VuaW9uIGNydGNfc291cmNlX3BhcmFtIHsKIAlTRUxFQ1RfQ1JUQ19TT1VSQ0VfUFNfQUxMT0NBVElPTiB2MTsKIAlTRUxFQ1RfQ1JUQ19TT1VSQ0VfUEFSQU1FVEVSU19WMiB2MjsKIH07CkBAIC0xMDM4LDcgKzEwOTcsNyBAQAogCXN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgcmFkZW9uX2VuY29kZXIgKnJhZGVvbl9lbmNvZGVyID0gdG9fcmFkZW9uX2VuY29kZXIoZW5jb2Rlcik7CiAJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGVuY29kZXItPmNydGMpOwotCXVuaW9uIGNydGNfc291cmNfcGFyYW0gYXJnczsKKwl1bmlvbiBjcnRjX3NvdXJjZV9wYXJhbSBhcmdzOwogCWludCBpbmRleCA9IEdldEluZGV4SW50b01hc3RlclRhYmxlKENPTU1BTkQsIFNlbGVjdENSVENfU291cmNlKTsKIAl1aW50OF90IGZyZXYsIGNyZXY7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnICpkaWc7CkBAIC0xMTA3LDEwICsxMTY2LDI2IEBACiAJCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTI6CiAJCQljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX0tMRFNDUF9MVlRNQToKIAkJCQlkaWcgPSByYWRlb25fZW5jb2Rlci0+ZW5jX3ByaXY7Ci0JCQkJaWYgKGRpZy0+ZGlnX2VuY29kZXIpCi0JCQkJCWFyZ3MudjIudWNFbmNvZGVySUQgPSBBU0lDX0lOVF9ESUcyX0VOQ09ERVJfSUQ7Ci0JCQkJZWxzZQorCQkJCXN3aXRjaCAoZGlnLT5kaWdfZW5jb2RlcikgeworCQkJCWNhc2UgMDoKIAkJCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX0RJRzFfRU5DT0RFUl9JRDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAxOgorCQkJCQlhcmdzLnYyLnVjRW5jb2RlcklEID0gQVNJQ19JTlRfRElHMl9FTkNPREVSX0lEOworCQkJCQlicmVhazsKKwkJCQljYXNlIDI6CisJCQkJCWFyZ3MudjIudWNFbmNvZGVySUQgPSBBU0lDX0lOVF9ESUczX0VOQ09ERVJfSUQ7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMzoKKwkJCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX0RJRzRfRU5DT0RFUl9JRDsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSA0OgorCQkJCQlhcmdzLnYyLnVjRW5jb2RlcklEID0gQVNJQ19JTlRfRElHNV9FTkNPREVSX0lEOworCQkJCQlicmVhazsKKwkJCQljYXNlIDU6CisJCQkJCWFyZ3MudjIudWNFbmNvZGVySUQgPSBBU0lDX0lOVF9ESUc2X0VOQ09ERVJfSUQ7CisJCQkJCWJyZWFrOworCQkJCX0KIAkJCQlicmVhazsKIAkJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfS0xEU0NQX0RWTzE6CiAJCQkJYXJncy52Mi51Y0VuY29kZXJJRCA9IEFTSUNfSU5UX0RWT19FTkNPREVSX0lEOwpAQCAtMTE2Nyw2ICsxMjQyLDcgQEAKIAl9CiAKIAkvKiBzZXQgc2NhbGVyIGNsZWFycyB0aGlzIG9uIHNvbWUgY2hpcHMgKi8KKwkvKiBYWFggY2hlY2sgRENFNCAqLwogCWlmICghKHJhZGVvbl9lbmNvZGVyLT5hY3RpdmVfZGV2aWNlICYgKEFUT01fREVWSUNFX1RWX1NVUFBPUlQpKSkgewogCQlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSAmJiAobW9kZS0+ZmxhZ3MgJiBEUk1fTU9ERV9GTEFHX0lOVEVSTEFDRSkpCiAJCQlXUkVHMzIoQVZJVk9fRDFNT0RFX0RBVEFfRk9STUFUICsgcmFkZW9uX2NydGMtPmNydGNfb2Zmc2V0LApAQCAtMTE4Myw2ICsxMjU5LDMzIEBACiAJc3RydWN0IGRybV9lbmNvZGVyICp0ZXN0X2VuY29kZXI7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyX2F0b21fZGlnICpkaWc7CiAJdWludDMyX3QgZGlnX2VuY19pbl91c2UgPSAwOworCisJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkgeworCQlzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3Rvcl9hdG9tX2RpZyAqZGlnX2Nvbm5lY3RvciA9CisJCQlyYWRlb25fZ2V0X2F0b21fY29ubmVjdG9yX3ByaXZfZnJvbV9lbmNvZGVyKGVuY29kZXIpOworCisJCXN3aXRjaCAocmFkZW9uX2VuY29kZXItPmVuY29kZXJfaWQpIHsKKwkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFk6CisJCQlpZiAoZGlnX2Nvbm5lY3Rvci0+bGlua2IpCisJCQkJcmV0dXJuIDE7CisJCQllbHNlCisJCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwkJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9VTklQSFkxOgorCQkJaWYgKGRpZ19jb25uZWN0b3ItPmxpbmtiKQorCQkJCXJldHVybiAzOworCQkJZWxzZQorCQkJCXJldHVybiAyOworCQkJYnJlYWs7CisJCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZMjoKKwkJCWlmIChkaWdfY29ubmVjdG9yLT5saW5rYikKKwkJCQlyZXR1cm4gNTsKKwkJCWVsc2UKKwkJCQlyZXR1cm4gNDsKKwkJCWJyZWFrOworCQl9CisJfQorCiAJLyogb24gRENFMzIgYW5kIGVuY29kZXIgY2FuIGRyaXZlciBhbnkgYmxvY2sgc28ganVzdCBjcnRjIGlkICovCiAJaWYgKEFTSUNfSVNfRENFMzIocmRldikpIHsKIAkJcmV0dXJuIHJhZGVvbl9jcnRjLT5jcnRjX2lkOwpAQCAtMTI1NCwxNSArMTM1NywyNiBAQAogCWNhc2UgRU5DT0RFUl9PQkpFQ1RfSURfSU5URVJOQUxfVU5JUEhZMToKIAljYXNlIEVOQ09ERVJfT0JKRUNUX0lEX0lOVEVSTkFMX1VOSVBIWTI6CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9LTERTQ1BfTFZUTUE6Ci0JCS8qIGRpc2FibGUgdGhlIGVuY29kZXIgYW5kIHRyYW5zbWl0dGVyICovCi0JCWF0b21iaW9zX2RpZ190cmFuc21pdHRlcl9zZXR1cChlbmNvZGVyLCBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9ESVNBQkxFLCAwLCAwKTsKLQkJYXRvbWJpb3NfZGlnX2VuY29kZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9ESVNBQkxFKTsKKwkJaWYgKEFTSUNfSVNfRENFNChyZGV2KSkgeworCQkJLyogZGlzYWJsZSB0aGUgdHJhbnNtaXR0ZXIgKi8KKwkJCWF0b21iaW9zX2RpZ190cmFuc21pdHRlcl9zZXR1cChlbmNvZGVyLCBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9ESVNBQkxFLCAwLCAwKTsKKwkJCS8qIHNldHVwIGFuZCBlbmFibGUgdGhlIGVuY29kZXIgKi8KKwkJCWF0b21iaW9zX2RpZ19lbmNvZGVyX3NldHVwKGVuY29kZXIsIEFUT01fRU5DT0RFUl9DTURfU0VUVVApOwogCi0JCS8qIHNldHVwIGFuZCBlbmFibGUgdGhlIGVuY29kZXIgYW5kIHRyYW5zbWl0dGVyICovCi0JCWF0b21iaW9zX2RpZ19lbmNvZGVyX3NldHVwKGVuY29kZXIsIEFUT01fRU5BQkxFKTsKLQkJYXRvbWJpb3NfZGlnX3RyYW5zbWl0dGVyX3NldHVwKGVuY29kZXIsIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0lOSVQsIDAsIDApOwotCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fU0VUVVAsIDAsIDApOwotCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fRU5BQkxFLCAwLCAwKTsKKwkJCS8qIGluaXQgYW5kIGVuYWJsZSB0aGUgdHJhbnNtaXR0ZXIgKi8KKwkJCWF0b21iaW9zX2RpZ190cmFuc21pdHRlcl9zZXR1cChlbmNvZGVyLCBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9JTklULCAwLCAwKTsKKwkJCWF0b21iaW9zX2RpZ190cmFuc21pdHRlcl9zZXR1cChlbmNvZGVyLCBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9FTkFCTEUsIDAsIDApOworCQl9IGVsc2UgeworCQkJLyogZGlzYWJsZSB0aGUgZW5jb2RlciBhbmQgdHJhbnNtaXR0ZXIgKi8KKwkJCWF0b21iaW9zX2RpZ190cmFuc21pdHRlcl9zZXR1cChlbmNvZGVyLCBBVE9NX1RSQU5TTUlUVEVSX0FDVElPTl9ESVNBQkxFLCAwLCAwKTsKKwkJCWF0b21iaW9zX2RpZ19lbmNvZGVyX3NldHVwKGVuY29kZXIsIEFUT01fRElTQUJMRSk7CisKKwkJCS8qIHNldHVwIGFuZCBlbmFibGUgdGhlIGVuY29kZXIgYW5kIHRyYW5zbWl0dGVyICovCisJCQlhdG9tYmlvc19kaWdfZW5jb2Rlcl9zZXR1cChlbmNvZGVyLCBBVE9NX0VOQUJMRSk7CisJCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fSU5JVCwgMCwgMCk7CisJCQlhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoZW5jb2RlciwgQVRPTV9UUkFOU01JVFRFUl9BQ1RJT05fU0VUVVAsIDAsIDApOworCQkJYXRvbWJpb3NfZGlnX3RyYW5zbWl0dGVyX3NldHVwKGVuY29kZXIsIEFUT01fVFJBTlNNSVRURVJfQUNUSU9OX0VOQUJMRSwgMCwgMCk7CisJCX0KIAkJYnJlYWs7CiAJY2FzZSBFTkNPREVSX09CSkVDVF9JRF9JTlRFUk5BTF9EREk6CiAJCWF0b21iaW9zX2RkaWFfc2V0dXAoZW5jb2RlciwgQVRPTV9FTkFCTEUpOwpAQCAtMTI4Miw3ICsxMzk2LDkgQEAKIAl9CiAJYXRvbWJpb3NfYXBwbHlfZW5jb2Rlcl9xdWlya3MoZW5jb2RlciwgYWRqdXN0ZWRfbW9kZSk7CiAKLQlyNjAwX2hkbWlfc2V0bW9kZShlbmNvZGVyLCBhZGp1c3RlZF9tb2RlKTsKKwkvKiBYWFggKi8KKwlpZiAoIUFTSUNfSVNfRENFNChyZGV2KSkKKwkJcjYwMF9oZG1pX3NldG1vZGUoZW5jb2RlciwgYWRqdXN0ZWRfbW9kZSk7CiB9CiAKIHN0YXRpYyBib29sCkBAIC0xNDgwLDEwICsxNTk2LDE4IEBACiAJCXJldHVybjsKIAogCWVuY29kZXIgPSAmcmFkZW9uX2VuY29kZXItPmJhc2U7Ci0JaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX1NJTkdMRV9DUlRDKQorCXN3aXRjaCAocmRldi0+bnVtX2NydGMpIHsKKwljYXNlIDE6CiAJCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gMHgxOwotCWVsc2UKKwkJYnJlYWs7CisJY2FzZSAyOgorCWRlZmF1bHQ6CiAJCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gMHgzOworCQlicmVhazsKKwljYXNlIDY6CisJCWVuY29kZXItPnBvc3NpYmxlX2NydGNzID0gMHgzZjsKKwkJYnJlYWs7CisJfQogCiAJcmFkZW9uX2VuY29kZXItPmVuY19wcml2ID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmFtaWx5LmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYW1pbHkuaAppbmRleCA3OTc5NzJlLi45M2M3ZDVkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmFtaWx5LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmFtaWx5LmgKQEAgLTc1LDYgKzc1LDExIEBACiAJQ0hJUF9SVjczMCwKIAlDSElQX1JWNzEwLAogCUNISVBfUlY3NDAsCisJQ0hJUF9DRURBUiwKKwlDSElQX1JFRFdPT0QsCisJQ0hJUF9KVU5JUEVSLAorCUNISVBfQ1lQUkVTUywKKwlDSElQX0hFTUxPQ0ssCiAJQ0hJUF9MQVNULAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2ZiLmMKaW5kZXggZDcxZTM0Ni4uOGZjY2JmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9mYi5jCkBAIC0zOSw2ICszOSw4IEBACiAKICNpbmNsdWRlICJkcm1fZmJfaGVscGVyLmgiCiAKKyNpbmNsdWRlIDxsaW51eC92Z2Ffc3dpdGNoZXJvby5oPgorCiBzdHJ1Y3QgcmFkZW9uX2ZiX2RldmljZSB7CiAJc3RydWN0IGRybV9mYl9oZWxwZXIgaGVscGVyOwogCXN0cnVjdCByYWRlb25fZnJhbWVidWZmZXIJKnJmYjsKQEAgLTE0OCw3ICsxNTAsNiBAQAogCXVuc2lnbmVkIGxvbmcgdG1wOwogCWJvb2wgZmJfdGlsZWQgPSBmYWxzZTsgLyogdXNlZnVsIGZvciB0ZXN0aW5nICovCiAJdTMyIHRpbGluZ19mbGFncyA9IDA7Ci0JaW50IGNydGNfY291bnQ7CiAKIAltb2RlX2NtZC53aWR0aCA9IHN1cmZhY2Vfd2lkdGg7CiAJbW9kZV9jbWQuaGVpZ2h0ID0gc3VyZmFjZV9oZWlnaHQ7CkBAIC0yMzksMTEgKzI0MCw3IEBACiAJcmZiZGV2ID0gaW5mby0+cGFyOwogCXJmYmRldi0+aGVscGVyLmZ1bmNzID0gJnJhZGVvbl9mYl9oZWxwZXJfZnVuY3M7CiAJcmZiZGV2LT5oZWxwZXIuZGV2ID0gZGV2OwotCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9TSU5HTEVfQ1JUQykKLQkJY3J0Y19jb3VudCA9IDE7Ci0JZWxzZQotCQljcnRjX2NvdW50ID0gMjsKLQlyZXQgPSBkcm1fZmJfaGVscGVyX2luaXRfY3J0Y19jb3VudCgmcmZiZGV2LT5oZWxwZXIsIGNydGNfY291bnQsCisJcmV0ID0gZHJtX2ZiX2hlbHBlcl9pbml0X2NydGNfY291bnQoJnJmYmRldi0+aGVscGVyLCByZGV2LT5udW1fY3J0YywKIAkJCQkJICAgIFJBREVPTkZCX0NPTk5fTElNSVQpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3VucmVmOwpAQCAtMjU3LDcgKzI1NCw3IEBACiAJaW5mby0+ZmxhZ3MgPSBGQklORk9fREVGQVVMVDsKIAlpbmZvLT5mYm9wcyA9ICZyYWRlb25mYl9vcHM7CiAKLQl0bXAgPSBmYl9ncHVhZGRyIC0gcmRldi0+bWMudnJhbV9sb2NhdGlvbjsKKwl0bXAgPSBmYl9ncHVhZGRyIC0gcmRldi0+bWMudnJhbV9zdGFydDsKIAlpbmZvLT5maXguc21lbV9zdGFydCA9IHJkZXYtPm1jLmFwZXJfYmFzZSArIHRtcDsKIAlpbmZvLT5maXguc21lbV9sZW4gPSBzaXplOwogCWluZm8tPnNjcmVlbl9iYXNlID0gZmJwdHI7CkBAIC0yOTEsNiArMjg4LDcgQEAKIAlyZmJkZXYtPnJkZXYgPSByZGV2OwogCiAJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXZnYV9zd2l0Y2hlcm9vX2NsaWVudF9mYl9zZXQocmRldi0+ZGRldi0+cGRldiwgaW5mbyk7CiAJcmV0dXJuIDA7CiAKIG91dF91bnJlZjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dhcnQuYwppbmRleCBlNzNkNTZlLi4xNzcwZDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9nYXJ0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2FydC5jCkBAIC0xMzksNiArMTM5LDcgQEAKIAl1bnNpZ25lZCB0OwogCXVuc2lnbmVkIHA7CiAJaW50IGksIGo7CisJdTY0IHBhZ2VfYmFzZTsKIAogCWlmICghcmRldi0+Z2FydC5yZWFkeSkgewogCQlXQVJOKDEsICJ0cnlpbmcgdG8gdW5iaW5kIG1lbW9yeSB0byB1bml0aWFsaXplZCBHQVJUICFcbiIpOwpAQCAtMTUxLDkgKzE1MiwxMSBAQAogCQkJcGNpX3VubWFwX3BhZ2UocmRldi0+cGRldiwgcmRldi0+Z2FydC5wYWdlc19hZGRyW3BdLAogCQkJCSAgICAgICBQQUdFX1NJWkUsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CiAJCQlyZGV2LT5nYXJ0LnBhZ2VzW3BdID0gTlVMTDsKLQkJCXJkZXYtPmdhcnQucGFnZXNfYWRkcltwXSA9IDA7CisJCQlyZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbcF0gPSByZGV2LT5kdW1teV9wYWdlLmFkZHI7CisJCQlwYWdlX2Jhc2UgPSByZGV2LT5nYXJ0LnBhZ2VzX2FkZHJbcF07CiAJCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIFJBREVPTl9HUFVfUEFHRV9TSVpFKTsgaisrLCB0KyspIHsKLQkJCQlyYWRlb25fZ2FydF9zZXRfcGFnZShyZGV2LCB0LCAwKTsKKwkJCQlyYWRlb25fZ2FydF9zZXRfcGFnZShyZGV2LCB0LCBwYWdlX2Jhc2UpOworCQkJCXBhZ2VfYmFzZSArPSBSQURFT05fR1BVX1BBR0VfU0laRTsKIAkJCX0KIAkJfQogCX0KQEAgLTE5OSw4ICsyMDIsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCByYWRlb25fZ2FydF9yZXN0b3JlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCWludCBpLCBqLCB0OworCXU2NCBwYWdlX2Jhc2U7CisKKwlmb3IgKGkgPSAwLCB0ID0gMDsgaSA8IHJkZXYtPmdhcnQubnVtX2NwdV9wYWdlczsgaSsrKSB7CisJCXBhZ2VfYmFzZSA9IHJkZXYtPmdhcnQucGFnZXNfYWRkcltpXTsKKwkJZm9yIChqID0gMDsgaiA8IChQQUdFX1NJWkUgLyBSQURFT05fR1BVX1BBR0VfU0laRSk7IGorKywgdCsrKSB7CisJCQlyYWRlb25fZ2FydF9zZXRfcGFnZShyZGV2LCB0LCBwYWdlX2Jhc2UpOworCQkJcGFnZV9iYXNlICs9IFJBREVPTl9HUFVfUEFHRV9TSVpFOworCQl9CisJfQorCW1iKCk7CisJcmFkZW9uX2dhcnRfdGxiX2ZsdXNoKHJkZXYpOworfQorCiBpbnQgcmFkZW9uX2dhcnRfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKwlpbnQgciwgaTsKKwogCWlmIChyZGV2LT5nYXJ0LnBhZ2VzKSB7CiAJCXJldHVybiAwOwogCX0KQEAgLTIwOSw2ICsyMzAsOSBAQAogCQlEUk1fRVJST1IoIlBhZ2Ugc2l6ZSBpcyBzbWFsbGVyIHRoYW4gR1BVIHBhZ2Ugc2l6ZSFcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CisJciA9IHJhZGVvbl9kdW1teV9wYWdlX2luaXQocmRldik7CisJaWYgKHIpCisJCXJldHVybiByOwogCS8qIENvbXB1dGUgdGFibGUgc2l6ZSAqLwogCXJkZXYtPmdhcnQubnVtX2NwdV9wYWdlcyA9IHJkZXYtPm1jLmd0dF9zaXplIC8gUEFHRV9TSVpFOwogCXJkZXYtPmdhcnQubnVtX2dwdV9wYWdlcyA9IHJkZXYtPm1jLmd0dF9zaXplIC8gUkFERU9OX0dQVV9QQUdFX1NJWkU7CkBAIC0yMjcsNiArMjUxLDEwIEBACiAJCXJhZGVvbl9nYXJ0X2ZpbmkocmRldik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KKwkvKiBzZXQgR0FSVCBlbnRyeSB0byBwb2ludCB0byB0aGUgZHVtbXkgcGFnZSBieSBkZWZhdWx0ICovCisJZm9yIChpID0gMDsgaSA8IHJkZXYtPmdhcnQubnVtX2NwdV9wYWdlczsgaSsrKSB7CisJCXJkZXYtPmdhcnQucGFnZXNfYWRkcltpXSA9IHJkZXYtPmR1bW15X3BhZ2UuYWRkcjsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2dlbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2VtLmMKaW5kZXggZGI4ZTlhMy4uZWY5MmQxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZ2VtLmMKQEAgLTY5LDkgKzY5LDcgQEAKIAkJaWYgKHIgIT0gLUVSRVNUQVJUU1lTKQogCQkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgR0VNIG9iamVjdCAoJWQsICVkLCAldSwgJWQpXG4iLAogCQkJCSAgc2l6ZSwgaW5pdGlhbF9kb21haW4sIGFsaWdubWVudCwgcik7Ci0JCW11dGV4X2xvY2soJnJkZXYtPmRkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGdvYmopOwotCQltdXRleF91bmxvY2soJnJkZXYtPmRkZXYtPnN0cnVjdF9tdXRleCk7CisJCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdvYmopOwogCQlyZXR1cm4gcjsKIAl9CiAJZ29iai0+ZHJpdmVyX3ByaXZhdGUgPSByb2JqOwpAQCAtMjAyLDE0ICsyMDAsMTAgQEAKIAl9CiAJciA9IGRybV9nZW1faGFuZGxlX2NyZWF0ZShmaWxwLCBnb2JqLCAmaGFuZGxlKTsKIAlpZiAocikgewotCQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGdvYmopOwotCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ29iaik7CiAJCXJldHVybiByOwogCX0KLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JZHJtX2dlbV9vYmplY3RfaGFuZGxlX3VucmVmZXJlbmNlKGdvYmopOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X2hhbmRsZV91bnJlZmVyZW5jZV91bmxvY2tlZChnb2JqKTsKIAlhcmdzLT5oYW5kbGUgPSBoYW5kbGU7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMzYsOSArMjMwLDcgQEAKIAogCXIgPSByYWRlb25fZ2VtX3NldF9kb21haW4oZ29iaiwgYXJncy0+cmVhZF9kb21haW5zLCBhcmdzLT53cml0ZV9kb21haW4pOwogCi0JbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlKGdvYmopOwotCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKGdvYmopOwogCXJldHVybiByOwogfQogCkBAIC0yNTUsOSArMjQ3LDcgQEAKIAl9CiAJcm9iaiA9IGdvYmotPmRyaXZlcl9wcml2YXRlOwogCWFyZ3MtPmFkZHJfcHRyID0gcmFkZW9uX2JvX21tYXBfb2Zmc2V0KHJvYmopOwotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShnb2JqKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnb2JqKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg4LDkgKzI3OCw3IEBACiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShnb2JqKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnb2JqKTsKIAlyZXR1cm4gcjsKIH0KIApAQCAtMzExLDkgKzI5OSw3IEBACiAJLyogY2FsbGJhY2sgaHcgc3BlY2lmaWMgZnVuY3Rpb25zIGlmIGFueSAqLwogCWlmIChyb2JqLT5yZGV2LT5hc2ljLT5pb2N0bF93YWl0X2lkbGUpCiAJCXJvYmotPnJkZXYtPmFzaWMtPmlvY3RsX3dhaXRfaWRsZShyb2JqLT5yZGV2LCByb2JqKTsKLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZ29iaik7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ29iaik7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTMzMSw5ICszMTcsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlyb2JqID0gZ29iai0+ZHJpdmVyX3ByaXZhdGU7CiAJciA9IHJhZGVvbl9ib19zZXRfdGlsaW5nX2ZsYWdzKHJvYmosIGFyZ3MtPnRpbGluZ19mbGFncywgYXJncy0+cGl0Y2gpOwotCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZShnb2JqKTsKLQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlkcm1fZ2VtX29iamVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChnb2JqKTsKIAlyZXR1cm4gcjsKIH0KIApAQCAtMzU2LDggKzM0MCw2IEBACiAJcmFkZW9uX2JvX2dldF90aWxpbmdfZmxhZ3MocmJvLCAmYXJncy0+dGlsaW5nX2ZsYWdzLCAmYXJncy0+cGl0Y2gpOwogCXJhZGVvbl9ib191bnJlc2VydmUocmJvKTsKIG91dDoKLQltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoZ29iaik7Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2VfdW5sb2NrZWQoZ29iaik7CiAJcmV0dXJuIHI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pMmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2kyYy5jCmluZGV4IGRhM2RhMWUuLjRhZTUwYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2kyYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2kyYy5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiZHJtUC5oIgogI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKICNpbmNsdWRlICJyYWRlb24uaCIKKyNpbmNsdWRlICJhdG9tLmgiCiAKIC8qKgogICogcmFkZW9uX2RkY19wcm9iZQpAQCAtNTksNyArNjAsNyBAQAogfQogCiAKLXZvaWQgcmFkZW9uX2kyY19kb19sb2NrKHN0cnVjdCByYWRlb25faTJjX2NoYW4gKmkyYywgaW50IGxvY2tfc3RhdGUpCitzdGF0aWMgdm9pZCByYWRlb25faTJjX2RvX2xvY2soc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqaTJjLCBpbnQgbG9ja19zdGF0ZSkKIHsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGkyYy0+ZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgcmFkZW9uX2kyY19idXNfcmVjICpyZWMgPSAmaTJjLT5yZWM7CkBAIC03MSwxMyArNzIsMjUgQEAKIAkgKi8KIAlpZiAocmVjLT5od19jYXBhYmxlKSB7CiAJCWlmICgocmRldi0+ZmFtaWx5ID49IENISVBfUjIwMCkgJiYgIUFTSUNfSVNfQVZJVk8ocmRldikpIHsKLQkJCWlmIChyZWMtPmFfY2xrX3JlZyA9PSBSQURFT05fR1BJT19NT05JRCkgeworCQkJdTMyIHJlZzsKKworCQkJaWYgKHJkZXYtPmZhbWlseSA+PSBDSElQX1JWMzUwKQorCQkJCXJlZyA9IFJBREVPTl9HUElPX01PTklEOworCQkJZWxzZSBpZiAoKHJkZXYtPmZhbWlseSA9PSBDSElQX1IzMDApIHx8CisJCQkJIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SMzUwKSkKKwkJCQlyZWcgPSBSQURFT05fR1BJT19EVklfRERDOworCQkJZWxzZQorCQkJCXJlZyA9IFJBREVPTl9HUElPX0NSVDJfRERDOworCisJCQltdXRleF9sb2NrKCZyZGV2LT5kY19od19pMmNfbXV0ZXgpOworCQkJaWYgKHJlYy0+YV9jbGtfcmVnID09IHJlZykgewogCQkJCVdSRUczMihSQURFT05fRFZJX0kyQ19DTlRMXzAsIChSQURFT05fSTJDX1NPRlRfUlNUIHwKIAkJCQkJCQkgICAgICAgUjIwMF9EVklfSTJDX1BJTl9TRUwoUjIwMF9TRUxfRERDMSkpKTsKIAkJCX0gZWxzZSB7CiAJCQkJV1JFRzMyKFJBREVPTl9EVklfSTJDX0NOVExfMCwgKFJBREVPTl9JMkNfU09GVF9SU1QgfAogCQkJCQkJCSAgICAgICBSMjAwX0RWSV9JMkNfUElOX1NFTChSMjAwX1NFTF9EREMzKSkpOwogCQkJfQorCQkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kY19od19pMmNfbXV0ZXgpOwogCQl9CiAJfQogCkBAIC0xNjgsNiArMTgxLDY5MiBAQAogCVdSRUczMihyZWMtPmVuX2RhdGFfcmVnLCB2YWwpOwogfQogCitzdGF0aWMgdTMyIHJhZGVvbl9nZXRfaTJjX3ByZXNjYWxlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCByYWRlb25fcGxsICpzcGxsID0gJnJkZXYtPmNsb2NrLnNwbGw7CisJdTMyIHNjbGsgPSByYWRlb25fZ2V0X2VuZ2luZV9jbG9jayhyZGV2KTsKKwl1MzIgcHJlc2NhbGUgPSAwOworCXUzMiBuLCBtOworCXU4IGxvb3A7CisJaW50IGkyY19jbG9jazsKKworCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CisJY2FzZSBDSElQX1IxMDA6CisJY2FzZSBDSElQX1JWMTAwOgorCWNhc2UgQ0hJUF9SUzEwMDoKKwljYXNlIENISVBfUlYyMDA6CisJY2FzZSBDSElQX1JTMjAwOgorCWNhc2UgQ0hJUF9SMjAwOgorCWNhc2UgQ0hJUF9SVjI1MDoKKwljYXNlIENISVBfUlMzMDA6CisJY2FzZSBDSElQX1JWMjgwOgorCWNhc2UgQ0hJUF9SMzAwOgorCWNhc2UgQ0hJUF9SMzUwOgorCWNhc2UgQ0hJUF9SVjM1MDoKKwkJbiA9IChzcGxsLT5yZWZlcmVuY2VfZnJlcSkgLyAoNCAqIDYpOworCQlmb3IgKGxvb3AgPSAxOyBsb29wIDwgMjU1OyBsb29wKyspIHsKKwkJCWlmICgobG9vcCAqIChsb29wIC0gMSkpID4gbikKKwkJCQlicmVhazsKKwkJfQorCQltID0gbG9vcCAtIDE7CisJCXByZXNjYWxlID0gbSB8IChsb29wIDw8IDgpOworCQlicmVhazsKKwljYXNlIENISVBfUlYzODA6CisJY2FzZSBDSElQX1JTNDAwOgorCWNhc2UgQ0hJUF9SUzQ4MDoKKwljYXNlIENISVBfUjQyMDoKKwljYXNlIENISVBfUjQyMzoKKwljYXNlIENISVBfUlY0MTA6CisJCXNjbGsgPSByYWRlb25fZ2V0X2VuZ2luZV9jbG9jayhyZGV2KTsKKwkJcHJlc2NhbGUgPSAoKChzY2xrICogMTApLyg0ICogMTI4ICogMTAwKSArIDEpIDw8IDgpICsgMTI4OworCQlicmVhazsKKwljYXNlIENISVBfUlM2MDA6CisJY2FzZSBDSElQX1JTNjkwOgorCWNhc2UgQ0hJUF9SUzc0MDoKKwkJLyogdG9kbyAqLworCQlicmVhazsKKwljYXNlIENISVBfUlY1MTU6CisJY2FzZSBDSElQX1I1MjA6CisJY2FzZSBDSElQX1JWNTMwOgorCWNhc2UgQ0hJUF9SVjU2MDoKKwljYXNlIENISVBfUlY1NzA6CisJY2FzZSBDSElQX1I1ODA6CisJCWkyY19jbG9jayA9IDUwOworCQlzY2xrID0gcmFkZW9uX2dldF9lbmdpbmVfY2xvY2socmRldik7CisJCWlmIChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SNTIwKQorCQkJcHJlc2NhbGUgPSAoMTI3IDw8IDgpICsgKChzY2xrICogMTApIC8gKDQgKiAxMjcgKiBpMmNfY2xvY2spKTsKKwkJZWxzZQorCQkJcHJlc2NhbGUgPSAoKChzY2xrICogMTApLyg0ICogMTI4ICogMTAwKSArIDEpIDw8IDgpICsgMTI4OworCQlicmVhazsKKwljYXNlIENISVBfUjYwMDoKKwljYXNlIENISVBfUlY2MTA6CisJY2FzZSBDSElQX1JWNjMwOgorCWNhc2UgQ0hJUF9SVjY3MDoKKwkJLyogdG9kbyAqLworCQlicmVhazsKKwljYXNlIENISVBfUlY2MjA6CisJY2FzZSBDSElQX1JWNjM1OgorCWNhc2UgQ0hJUF9SUzc4MDoKKwljYXNlIENISVBfUlM4ODA6CisJY2FzZSBDSElQX1JWNzcwOgorCWNhc2UgQ0hJUF9SVjczMDoKKwljYXNlIENISVBfUlY3MTA6CisJY2FzZSBDSElQX1JWNzQwOgorCQkvKiB0b2RvICovCisJCWJyZWFrOworCWNhc2UgQ0hJUF9DRURBUjoKKwljYXNlIENISVBfUkVEV09PRDoKKwljYXNlIENISVBfSlVOSVBFUjoKKwljYXNlIENISVBfQ1lQUkVTUzoKKwljYXNlIENISVBfSEVNTE9DSzoKKwkJLyogdG9kbyAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoImkyYzogdW5oYW5kbGVkIHJhZGVvbiBjaGlwXG4iKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBwcmVzY2FsZTsKK30KKworCisvKiBodyBpMmMgZW5naW5lIGZvciByMXh4LTR4eCBoYXJkd2FyZQorICogaHcgY2FuIGJ1ZmZlciB1cCB0byAxNSBieXRlcworICovCitzdGF0aWMgaW50IHIxMDBfaHdfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCSAgICBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKK3sKKwlzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuICppMmMgPSBpMmNfZ2V0X2FkYXBkYXRhKGkyY19hZGFwKTsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGkyYy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmFkZW9uX2kyY19idXNfcmVjICpyZWMgPSAmaTJjLT5yZWM7CisJc3RydWN0IGkyY19tc2cgKnA7CisJaW50IGksIGosIGssIHJldCA9IG51bTsKKwl1MzIgcHJlc2NhbGU7CisJdTMyIGkyY19jbnRsXzAsIGkyY19jbnRsXzEsIGkyY19kYXRhOworCXUzMiB0bXAsIHJlZzsKKworCW11dGV4X2xvY2soJnJkZXYtPmRjX2h3X2kyY19tdXRleCk7CisJLyogdGFrZSB0aGUgcG0gbG9jayBzaW5jZSB3ZSBuZWVkIGEgY29uc3RhbnQgc2NsayAqLworCW11dGV4X2xvY2soJnJkZXYtPnBtLm11dGV4KTsKKworCXByZXNjYWxlID0gcmFkZW9uX2dldF9pMmNfcHJlc2NhbGUocmRldik7CisKKwlyZWcgPSAoKHByZXNjYWxlIDw8IFJBREVPTl9JMkNfUFJFU0NBTEVfU0hJRlQpIHwKKwkgICAgICAgUkFERU9OX0kyQ19TVEFSVCB8CisJICAgICAgIFJBREVPTl9JMkNfU1RPUCB8CisJICAgICAgIFJBREVPTl9JMkNfR08pOworCisJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykgeworCQl0bXAgPSBSUkVHMzIoUkFERU9OX0JJT1NfNl9TQ1JBVENIKTsKKwkJV1JFRzMyKFJBREVPTl9CSU9TXzZfU0NSQVRDSCwgdG1wIHwgQVRPTV9TNl9IV19JMkNfQlVTWV9TVEFURSk7CisJfQorCisJaWYgKHJlYy0+bW1faTJjKSB7CisJCWkyY19jbnRsXzAgPSBSQURFT05fSTJDX0NOVExfMDsKKwkJaTJjX2NudGxfMSA9IFJBREVPTl9JMkNfQ05UTF8xOworCQlpMmNfZGF0YSA9IFJBREVPTl9JMkNfREFUQTsKKwl9IGVsc2UgeworCQlpMmNfY250bF8wID0gUkFERU9OX0RWSV9JMkNfQ05UTF8wOworCQlpMmNfY250bF8xID0gUkFERU9OX0RWSV9JMkNfQ05UTF8xOworCQlpMmNfZGF0YSA9IFJBREVPTl9EVklfSTJDX0RBVEE7CisKKwkJc3dpdGNoIChyZGV2LT5mYW1pbHkpIHsKKwkJY2FzZSBDSElQX1IxMDA6CisJCWNhc2UgQ0hJUF9SVjEwMDoKKwkJY2FzZSBDSElQX1JTMTAwOgorCQljYXNlIENISVBfUlYyMDA6CisJCWNhc2UgQ0hJUF9SUzIwMDoKKwkJY2FzZSBDSElQX1JTMzAwOgorCQkJc3dpdGNoIChyZWMtPm1hc2tfY2xrX3JlZykgeworCQkJY2FzZSBSQURFT05fR1BJT19EVklfRERDOgorCQkJCS8qIG5vIGdwaW8gc2VsZWN0IGJpdCAqLworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlEUk1fRVJST1IoImdwaW8gbm90IHN1cHBvcnRlZCB3aXRoIGh3IGkyY1xuIik7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDSElQX1IyMDA6CisJCQkvKiBvbmx5IGJpdCA0IG9uIHIyMDAgKi8KKwkJCXN3aXRjaCAocmVjLT5tYXNrX2Nsa19yZWcpIHsKKwkJCWNhc2UgUkFERU9OX0dQSU9fRFZJX0REQzoKKwkJCQlyZWcgfD0gUjIwMF9EVklfSTJDX1BJTl9TRUwoUjIwMF9TRUxfRERDMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIFJBREVPTl9HUElPX01PTklEOgorCQkJCXJlZyB8PSBSMjAwX0RWSV9JMkNfUElOX1NFTChSMjAwX1NFTF9EREMzKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJRFJNX0VSUk9SKCJncGlvIG5vdCBzdXBwb3J0ZWQgd2l0aCBodyBpMmNcbiIpOworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgQ0hJUF9SVjI1MDoKKwkJY2FzZSBDSElQX1JWMjgwOgorCQkJLyogYml0cyAzIGFuZCA0ICovCisJCQlzd2l0Y2ggKHJlYy0+bWFza19jbGtfcmVnKSB7CisJCQljYXNlIFJBREVPTl9HUElPX0RWSV9EREM6CisJCQkJcmVnIHw9IFIyMDBfRFZJX0kyQ19QSU5fU0VMKFIyMDBfU0VMX0REQzEpOworCQkJCWJyZWFrOworCQkJY2FzZSBSQURFT05fR1BJT19WR0FfRERDOgorCQkJCXJlZyB8PSBSMjAwX0RWSV9JMkNfUElOX1NFTChSMjAwX1NFTF9EREMyKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkFERU9OX0dQSU9fQ1JUMl9EREM6CisJCQkJcmVnIHw9IFIyMDBfRFZJX0kyQ19QSU5fU0VMKFIyMDBfU0VMX0REQzMpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlEUk1fRVJST1IoImdwaW8gbm90IHN1cHBvcnRlZCB3aXRoIGh3IGkyY1xuIik7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDSElQX1IzMDA6CisJCWNhc2UgQ0hJUF9SMzUwOgorCQkJLyogb25seSBiaXQgNCBvbiByMzAwL3IzNTAgKi8KKwkJCXN3aXRjaCAocmVjLT5tYXNrX2Nsa19yZWcpIHsKKwkJCWNhc2UgUkFERU9OX0dQSU9fVkdBX0REQzoKKwkJCQlyZWcgfD0gUjIwMF9EVklfSTJDX1BJTl9TRUwoUjIwMF9TRUxfRERDMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIFJBREVPTl9HUElPX0RWSV9EREM6CisJCQkJcmVnIHw9IFIyMDBfRFZJX0kyQ19QSU5fU0VMKFIyMDBfU0VMX0REQzMpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlEUk1fRVJST1IoImdwaW8gbm90IHN1cHBvcnRlZCB3aXRoIGh3IGkyY1xuIik7CisJCQkJcmV0ID0gLUVJTlZBTDsKKwkJCQlnb3RvIGRvbmU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBDSElQX1JWMzUwOgorCQljYXNlIENISVBfUlYzODA6CisJCWNhc2UgQ0hJUF9SNDIwOgorCQljYXNlIENISVBfUjQyMzoKKwkJY2FzZSBDSElQX1JWNDEwOgorCQljYXNlIENISVBfUlM0MDA6CisJCWNhc2UgQ0hJUF9SUzQ4MDoKKwkJCS8qIGJpdHMgMyBhbmQgNCAqLworCQkJc3dpdGNoIChyZWMtPm1hc2tfY2xrX3JlZykgeworCQkJY2FzZSBSQURFT05fR1BJT19WR0FfRERDOgorCQkJCXJlZyB8PSBSMjAwX0RWSV9JMkNfUElOX1NFTChSMjAwX1NFTF9EREMxKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgUkFERU9OX0dQSU9fRFZJX0REQzoKKwkJCQlyZWcgfD0gUjIwMF9EVklfSTJDX1BJTl9TRUwoUjIwMF9TRUxfRERDMik7CisJCQkJYnJlYWs7CisJCQljYXNlIFJBREVPTl9HUElPX01PTklEOgorCQkJCXJlZyB8PSBSMjAwX0RWSV9JMkNfUElOX1NFTChSMjAwX1NFTF9EREMzKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJRFJNX0VSUk9SKCJncGlvIG5vdCBzdXBwb3J0ZWQgd2l0aCBodyBpMmNcbiIpOworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlEUk1fRVJST1IoInVuc3VwcG9ydGVkIGFzaWNcbiIpOworCQkJcmV0ID0gLUVJTlZBTDsKKwkJCWdvdG8gZG9uZTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogY2hlY2sgZm9yIGJ1cyBwcm9iZSAqLworCXAgPSAmbXNnc1swXTsKKwlpZiAoKG51bSA9PSAxKSAmJiAocC0+bGVuID09IDApKSB7CisJCVdSRUczMihpMmNfY250bF8wLCAoUkFERU9OX0kyQ19ET05FIHwKKwkJCQkgICAgUkFERU9OX0kyQ19OQUNLIHwKKwkJCQkgICAgUkFERU9OX0kyQ19IQUxUIHwKKwkJCQkgICAgUkFERU9OX0kyQ19TT0ZUX1JTVCkpOworCQlXUkVHMzIoaTJjX2RhdGEsIChwLT5hZGRyIDw8IDEpICYgMHhmZik7CisJCVdSRUczMihpMmNfZGF0YSwgMCk7CisJCVdSRUczMihpMmNfY250bF8xLCAoKDEgPDwgUkFERU9OX0kyQ19EQVRBX0NPVU5UX1NISUZUKSB8CisJCQkJICAgICgxIDw8IFJBREVPTl9JMkNfQUREUl9DT1VOVF9TSElGVCkgfAorCQkJCSAgICBSQURFT05fSTJDX0VOIHwKKwkJCQkgICAgKDQ4IDw8IFJBREVPTl9JMkNfVElNRV9MSU1JVF9TSElGVCkpKTsKKwkJV1JFRzMyKGkyY19jbnRsXzAsIHJlZyk7CisJCWZvciAoayA9IDA7IGsgPCAzMjsgaysrKSB7CisJCQl1ZGVsYXkoMTApOworCQkJdG1wID0gUlJFRzMyKGkyY19jbnRsXzApOworCQkJaWYgKHRtcCAmIFJBREVPTl9JMkNfR08pCisJCQkJY29udGludWU7CisJCQl0bXAgPSBSUkVHMzIoaTJjX2NudGxfMCk7CisJCQlpZiAodG1wICYgUkFERU9OX0kyQ19ET05FKQorCQkJCWJyZWFrOworCQkJZWxzZSB7CisJCQkJRFJNX0RFQlVHKCJpMmMgd3JpdGUgZXJyb3IgMHglMDh4XG4iLCB0bXApOworCQkJCVdSRUczMihpMmNfY250bF8wLCB0bXAgfCBSQURFT05fSTJDX0FCT1JUKTsKKwkJCQlyZXQgPSAtRUlPOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJfQorCQlnb3RvIGRvbmU7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCXAgPSAmbXNnc1tpXTsKKwkJZm9yIChqID0gMDsgaiA8IHAtPmxlbjsgaisrKSB7CisJCQlpZiAocC0+ZmxhZ3MgJiBJMkNfTV9SRCkgeworCQkJCVdSRUczMihpMmNfY250bF8wLCAoUkFERU9OX0kyQ19ET05FIHwKKwkJCQkJCSAgICBSQURFT05fSTJDX05BQ0sgfAorCQkJCQkJICAgIFJBREVPTl9JMkNfSEFMVCB8CisJCQkJCQkgICAgUkFERU9OX0kyQ19TT0ZUX1JTVCkpOworCQkJCVdSRUczMihpMmNfZGF0YSwgKChwLT5hZGRyIDw8IDEpICYgMHhmZikgfCAweDEpOworCQkJCVdSRUczMihpMmNfY250bF8xLCAoKDEgPDwgUkFERU9OX0kyQ19EQVRBX0NPVU5UX1NISUZUKSB8CisJCQkJCQkgICAgKDEgPDwgUkFERU9OX0kyQ19BRERSX0NPVU5UX1NISUZUKSB8CisJCQkJCQkgICAgUkFERU9OX0kyQ19FTiB8CisJCQkJCQkgICAgKDQ4IDw8IFJBREVPTl9JMkNfVElNRV9MSU1JVF9TSElGVCkpKTsKKwkJCQlXUkVHMzIoaTJjX2NudGxfMCwgcmVnIHwgUkFERU9OX0kyQ19SRUNFSVZFKTsKKwkJCQlmb3IgKGsgPSAwOyBrIDwgMzI7IGsrKykgeworCQkJCQl1ZGVsYXkoMTApOworCQkJCQl0bXAgPSBSUkVHMzIoaTJjX2NudGxfMCk7CisJCQkJCWlmICh0bXAgJiBSQURFT05fSTJDX0dPKQorCQkJCQkJY29udGludWU7CisJCQkJCXRtcCA9IFJSRUczMihpMmNfY250bF8wKTsKKwkJCQkJaWYgKHRtcCAmIFJBREVPTl9JMkNfRE9ORSkKKwkJCQkJCWJyZWFrOworCQkJCQllbHNlIHsKKwkJCQkJCURSTV9ERUJVRygiaTJjIHJlYWQgZXJyb3IgMHglMDh4XG4iLCB0bXApOworCQkJCQkJV1JFRzMyKGkyY19jbnRsXzAsIHRtcCB8IFJBREVPTl9JMkNfQUJPUlQpOworCQkJCQkJcmV0ID0gLUVJTzsKKwkJCQkJCWdvdG8gZG9uZTsKKwkJCQkJfQorCQkJCX0KKwkJCQlwLT5idWZbal0gPSBSUkVHMzIoaTJjX2RhdGEpICYgMHhmZjsKKwkJCX0gZWxzZSB7CisJCQkJV1JFRzMyKGkyY19jbnRsXzAsIChSQURFT05fSTJDX0RPTkUgfAorCQkJCQkJICAgIFJBREVPTl9JMkNfTkFDSyB8CisJCQkJCQkgICAgUkFERU9OX0kyQ19IQUxUIHwKKwkJCQkJCSAgICBSQURFT05fSTJDX1NPRlRfUlNUKSk7CisJCQkJV1JFRzMyKGkyY19kYXRhLCAocC0+YWRkciA8PCAxKSAmIDB4ZmYpOworCQkJCVdSRUczMihpMmNfZGF0YSwgcC0+YnVmW2pdKTsKKwkJCQlXUkVHMzIoaTJjX2NudGxfMSwgKCgxIDw8IFJBREVPTl9JMkNfREFUQV9DT1VOVF9TSElGVCkgfAorCQkJCQkJICAgICgxIDw8IFJBREVPTl9JMkNfQUREUl9DT1VOVF9TSElGVCkgfAorCQkJCQkJICAgIFJBREVPTl9JMkNfRU4gfAorCQkJCQkJICAgICg0OCA8PCBSQURFT05fSTJDX1RJTUVfTElNSVRfU0hJRlQpKSk7CisJCQkJV1JFRzMyKGkyY19jbnRsXzAsIHJlZyk7CisJCQkJZm9yIChrID0gMDsgayA8IDMyOyBrKyspIHsKKwkJCQkJdWRlbGF5KDEwKTsKKwkJCQkJdG1wID0gUlJFRzMyKGkyY19jbnRsXzApOworCQkJCQlpZiAodG1wICYgUkFERU9OX0kyQ19HTykKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl0bXAgPSBSUkVHMzIoaTJjX2NudGxfMCk7CisJCQkJCWlmICh0bXAgJiBSQURFT05fSTJDX0RPTkUpCisJCQkJCQlicmVhazsKKwkJCQkJZWxzZSB7CisJCQkJCQlEUk1fREVCVUcoImkyYyB3cml0ZSBlcnJvciAweCUwOHhcbiIsIHRtcCk7CisJCQkJCQlXUkVHMzIoaTJjX2NudGxfMCwgdG1wIHwgUkFERU9OX0kyQ19BQk9SVCk7CisJCQkJCQlyZXQgPSAtRUlPOworCQkJCQkJZ290byBkb25lOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCitkb25lOgorCVdSRUczMihpMmNfY250bF8wLCAwKTsKKwlXUkVHMzIoaTJjX2NudGxfMSwgMCk7CisJV1JFRzMyKGkyY19jbnRsXzAsIChSQURFT05fSTJDX0RPTkUgfAorCQkJICAgIFJBREVPTl9JMkNfTkFDSyB8CisJCQkgICAgUkFERU9OX0kyQ19IQUxUIHwKKwkJCSAgICBSQURFT05fSTJDX1NPRlRfUlNUKSk7CisKKwlpZiAocmRldi0+aXNfYXRvbV9iaW9zKSB7CisJCXRtcCA9IFJSRUczMihSQURFT05fQklPU182X1NDUkFUQ0gpOworCQl0bXAgJj0gfkFUT01fUzZfSFdfSTJDX0JVU1lfU1RBVEU7CisJCVdSRUczMihSQURFT05fQklPU182X1NDUkFUQ0gsIHRtcCk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5wbS5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kY19od19pMmNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworLyogaHcgaTJjIGVuZ2luZSBmb3IgcjV4eCBoYXJkd2FyZQorICogaHcgY2FuIGJ1ZmZlciB1cCB0byAxNSBieXRlcworICovCitzdGF0aWMgaW50IHI1MDBfaHdfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCSAgICBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKK3sKKwlzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuICppMmMgPSBpMmNfZ2V0X2FkYXBkYXRhKGkyY19hZGFwKTsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGkyYy0+ZGV2LT5kZXZfcHJpdmF0ZTsKKwlzdHJ1Y3QgcmFkZW9uX2kyY19idXNfcmVjICpyZWMgPSAmaTJjLT5yZWM7CisJc3RydWN0IGkyY19tc2cgKnA7CisJaW50IGksIGosIHJlbWFpbmluZywgY3VycmVudF9jb3VudCwgYnVmZmVyX29mZnNldCwgcmV0ID0gbnVtOworCXUzMiBwcmVzY2FsZTsKKwl1MzIgdG1wLCByZWc7CisJdTMyIHNhdmVkMSwgc2F2ZWQyOworCisJbXV0ZXhfbG9jaygmcmRldi0+ZGNfaHdfaTJjX211dGV4KTsKKwkvKiB0YWtlIHRoZSBwbSBsb2NrIHNpbmNlIHdlIG5lZWQgYSBjb25zdGFudCBzY2xrICovCisJbXV0ZXhfbG9jaygmcmRldi0+cG0ubXV0ZXgpOworCisJcHJlc2NhbGUgPSByYWRlb25fZ2V0X2kyY19wcmVzY2FsZShyZGV2KTsKKworCS8qIGNsZWFyIGdwaW8gbWFzayBiaXRzICovCisJdG1wID0gUlJFRzMyKHJlYy0+bWFza19jbGtfcmVnKTsKKwl0bXAgJj0gfnJlYy0+bWFza19jbGtfbWFzazsKKwlXUkVHMzIocmVjLT5tYXNrX2Nsa19yZWcsIHRtcCk7CisJdG1wID0gUlJFRzMyKHJlYy0+bWFza19jbGtfcmVnKTsKKworCXRtcCA9IFJSRUczMihyZWMtPm1hc2tfZGF0YV9yZWcpOworCXRtcCAmPSB+cmVjLT5tYXNrX2RhdGFfbWFzazsKKwlXUkVHMzIocmVjLT5tYXNrX2RhdGFfcmVnLCB0bXApOworCXRtcCA9IFJSRUczMihyZWMtPm1hc2tfZGF0YV9yZWcpOworCisJLyogY2xlYXIgcGluIHZhbHVlcyAqLworCXRtcCA9IFJSRUczMihyZWMtPmFfY2xrX3JlZyk7CisJdG1wICY9IH5yZWMtPmFfY2xrX21hc2s7CisJV1JFRzMyKHJlYy0+YV9jbGtfcmVnLCB0bXApOworCXRtcCA9IFJSRUczMihyZWMtPmFfY2xrX3JlZyk7CisKKwl0bXAgPSBSUkVHMzIocmVjLT5hX2RhdGFfcmVnKTsKKwl0bXAgJj0gfnJlYy0+YV9kYXRhX21hc2s7CisJV1JFRzMyKHJlYy0+YV9kYXRhX3JlZywgdG1wKTsKKwl0bXAgPSBSUkVHMzIocmVjLT5hX2RhdGFfcmVnKTsKKworCS8qIHNldCB0aGUgcGlucyB0byBpbnB1dCAqLworCXRtcCA9IFJSRUczMihyZWMtPmVuX2Nsa19yZWcpOworCXRtcCAmPSB+cmVjLT5lbl9jbGtfbWFzazsKKwlXUkVHMzIocmVjLT5lbl9jbGtfcmVnLCB0bXApOworCXRtcCA9IFJSRUczMihyZWMtPmVuX2Nsa19yZWcpOworCisJdG1wID0gUlJFRzMyKHJlYy0+ZW5fZGF0YV9yZWcpOworCXRtcCAmPSB+cmVjLT5lbl9kYXRhX21hc2s7CisJV1JFRzMyKHJlYy0+ZW5fZGF0YV9yZWcsIHRtcCk7CisJdG1wID0gUlJFRzMyKHJlYy0+ZW5fZGF0YV9yZWcpOworCisJLyogKi8KKwl0bXAgPSBSUkVHMzIoUkFERU9OX0JJT1NfNl9TQ1JBVENIKTsKKwlXUkVHMzIoUkFERU9OX0JJT1NfNl9TQ1JBVENILCB0bXAgfCBBVE9NX1M2X0hXX0kyQ19CVVNZX1NUQVRFKTsKKwlzYXZlZDEgPSBSUkVHMzIoQVZJVk9fRENfSTJDX0NPTlRST0wxKTsKKwlzYXZlZDIgPSBSUkVHMzIoMHg0OTQpOworCVdSRUczMigweDQ5NCwgc2F2ZWQyIHwgMHgxKTsKKworCVdSRUczMihBVklWT19EQ19JMkNfQVJCSVRSQVRJT04sIEFWSVZPX0RDX0kyQ19TV19XQU5UU19UT19VU0VfSTJDKTsKKwlmb3IgKGkgPSAwOyBpIDwgNTA7IGkrKykgeworCQl1ZGVsYXkoMSk7CisJCWlmIChSUkVHMzIoQVZJVk9fRENfSTJDX0FSQklUUkFUSU9OKSAmIEFWSVZPX0RDX0kyQ19TV19DQU5fVVNFX0kyQykKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSA1MCkgeworCQlEUk1fRVJST1IoImZhaWxlZCB0byBnZXQgaTJjIGJ1c1xuIik7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBkb25lOworCX0KKworCXJlZyA9IEFWSVZPX0RDX0kyQ19TVEFSVCB8IEFWSVZPX0RDX0kyQ19TVE9QIHwgQVZJVk9fRENfSTJDX0VOOworCXN3aXRjaCAocmVjLT5tYXNrX2Nsa19yZWcpIHsKKwljYXNlIEFWSVZPX0RDX0dQSU9fRERDMV9NQVNLOgorCQlyZWcgfD0gQVZJVk9fRENfSTJDX1BJTl9TRUxFQ1QoQVZJVk9fU0VMX0REQzEpOworCQlicmVhazsKKwljYXNlIEFWSVZPX0RDX0dQSU9fRERDMl9NQVNLOgorCQlyZWcgfD0gQVZJVk9fRENfSTJDX1BJTl9TRUxFQ1QoQVZJVk9fU0VMX0REQzIpOworCQlicmVhazsKKwljYXNlIEFWSVZPX0RDX0dQSU9fRERDM19NQVNLOgorCQlyZWcgfD0gQVZJVk9fRENfSTJDX1BJTl9TRUxFQ1QoQVZJVk9fU0VMX0REQzMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlEUk1fRVJST1IoImdwaW8gbm90IHN1cHBvcnRlZCB3aXRoIGh3IGkyY1xuIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBjaGVjayBmb3IgYnVzIHByb2JlICovCisJcCA9ICZtc2dzWzBdOworCWlmICgobnVtID09IDEpICYmIChwLT5sZW4gPT0gMCkpIHsKKwkJV1JFRzMyKEFWSVZPX0RDX0kyQ19TVEFUVVMxLCAoQVZJVk9fRENfSTJDX0RPTkUgfAorCQkJCQkgICAgICBBVklWT19EQ19JMkNfTkFDSyB8CisJCQkJCSAgICAgIEFWSVZPX0RDX0kyQ19IQUxUKSk7CisJCVdSRUczMihBVklWT19EQ19JMkNfUkVTRVQsIEFWSVZPX0RDX0kyQ19TT0ZUX1JFU0VUKTsKKwkJdWRlbGF5KDEpOworCQlXUkVHMzIoQVZJVk9fRENfSTJDX1JFU0VULCAwKTsKKworCQlXUkVHMzIoQVZJVk9fRENfSTJDX0RBVEEsIChwLT5hZGRyIDw8IDEpICYgMHhmZik7CisJCVdSRUczMihBVklWT19EQ19JMkNfREFUQSwgMCk7CisKKwkJV1JFRzMyKEFWSVZPX0RDX0kyQ19DT05UUk9MMywgQVZJVk9fRENfSTJDX1RJTUVfTElNSVQoNDgpKTsKKwkJV1JFRzMyKEFWSVZPX0RDX0kyQ19DT05UUk9MMiwgKEFWSVZPX0RDX0kyQ19BRERSX0NPVU5UKDEpIHwKKwkJCQkJICAgICAgIEFWSVZPX0RDX0kyQ19EQVRBX0NPVU5UKDEpIHwKKwkJCQkJICAgICAgIChwcmVzY2FsZSA8PCAxNikpKTsKKwkJV1JFRzMyKEFWSVZPX0RDX0kyQ19DT05UUk9MMSwgcmVnKTsKKwkJV1JFRzMyKEFWSVZPX0RDX0kyQ19TVEFUVVMxLCBBVklWT19EQ19JMkNfR08pOworCQlmb3IgKGogPSAwOyBqIDwgMjAwOyBqKyspIHsKKwkJCXVkZWxheSg1MCk7CisJCQl0bXAgPSBSUkVHMzIoQVZJVk9fRENfSTJDX1NUQVRVUzEpOworCQkJaWYgKHRtcCAmIEFWSVZPX0RDX0kyQ19HTykKKwkJCQljb250aW51ZTsKKwkJCXRtcCA9IFJSRUczMihBVklWT19EQ19JMkNfU1RBVFVTMSk7CisJCQlpZiAodG1wICYgQVZJVk9fRENfSTJDX0RPTkUpCisJCQkJYnJlYWs7CisJCQllbHNlIHsKKwkJCQlEUk1fREVCVUcoImkyYyB3cml0ZSBlcnJvciAweCUwOHhcbiIsIHRtcCk7CisJCQkJV1JFRzMyKEFWSVZPX0RDX0kyQ19SRVNFVCwgQVZJVk9fRENfSTJDX0FCT1JUKTsKKwkJCQlyZXQgPSAtRUlPOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJfQorCQlnb3RvIGRvbmU7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCXAgPSAmbXNnc1tpXTsKKwkJcmVtYWluaW5nID0gcC0+bGVuOworCQlidWZmZXJfb2Zmc2V0ID0gMDsKKwkJaWYgKHAtPmZsYWdzICYgSTJDX01fUkQpIHsKKwkJCXdoaWxlIChyZW1haW5pbmcpIHsKKwkJCQlpZiAocmVtYWluaW5nID4gMTUpCisJCQkJCWN1cnJlbnRfY291bnQgPSAxNTsKKwkJCQllbHNlCisJCQkJCWN1cnJlbnRfY291bnQgPSByZW1haW5pbmc7CisJCQkJV1JFRzMyKEFWSVZPX0RDX0kyQ19TVEFUVVMxLCAoQVZJVk9fRENfSTJDX0RPTkUgfAorCQkJCQkJCSAgICAgIEFWSVZPX0RDX0kyQ19OQUNLIHwKKwkJCQkJCQkgICAgICBBVklWT19EQ19JMkNfSEFMVCkpOworCQkJCVdSRUczMihBVklWT19EQ19JMkNfUkVTRVQsIEFWSVZPX0RDX0kyQ19TT0ZUX1JFU0VUKTsKKwkJCQl1ZGVsYXkoMSk7CisJCQkJV1JFRzMyKEFWSVZPX0RDX0kyQ19SRVNFVCwgMCk7CisKKwkJCQlXUkVHMzIoQVZJVk9fRENfSTJDX0RBVEEsICgocC0+YWRkciA8PCAxKSAmIDB4ZmYpIHwgMHgxKTsKKwkJCQlXUkVHMzIoQVZJVk9fRENfSTJDX0NPTlRST0wzLCBBVklWT19EQ19JMkNfVElNRV9MSU1JVCg0OCkpOworCQkJCVdSRUczMihBVklWT19EQ19JMkNfQ09OVFJPTDIsIChBVklWT19EQ19JMkNfQUREUl9DT1VOVCgxKSB8CisJCQkJCQkJICAgICAgIEFWSVZPX0RDX0kyQ19EQVRBX0NPVU5UKGN1cnJlbnRfY291bnQpIHwKKwkJCQkJCQkgICAgICAgKHByZXNjYWxlIDw8IDE2KSkpOworCQkJCVdSRUczMihBVklWT19EQ19JMkNfQ09OVFJPTDEsIHJlZyB8IEFWSVZPX0RDX0kyQ19SRUNFSVZFKTsKKwkJCQlXUkVHMzIoQVZJVk9fRENfSTJDX1NUQVRVUzEsIEFWSVZPX0RDX0kyQ19HTyk7CisJCQkJZm9yIChqID0gMDsgaiA8IDIwMDsgaisrKSB7CisJCQkJCXVkZWxheSg1MCk7CisJCQkJCXRtcCA9IFJSRUczMihBVklWT19EQ19JMkNfU1RBVFVTMSk7CisJCQkJCWlmICh0bXAgJiBBVklWT19EQ19JMkNfR08pCisJCQkJCQljb250aW51ZTsKKwkJCQkJdG1wID0gUlJFRzMyKEFWSVZPX0RDX0kyQ19TVEFUVVMxKTsKKwkJCQkJaWYgKHRtcCAmIEFWSVZPX0RDX0kyQ19ET05FKQorCQkJCQkJYnJlYWs7CisJCQkJCWVsc2UgeworCQkJCQkJRFJNX0RFQlVHKCJpMmMgcmVhZCBlcnJvciAweCUwOHhcbiIsIHRtcCk7CisJCQkJCQlXUkVHMzIoQVZJVk9fRENfSTJDX1JFU0VULCBBVklWT19EQ19JMkNfQUJPUlQpOworCQkJCQkJcmV0ID0gLUVJTzsKKwkJCQkJCWdvdG8gZG9uZTsKKwkJCQkJfQorCQkJCX0KKwkJCQlmb3IgKGogPSAwOyBqIDwgY3VycmVudF9jb3VudDsgaisrKQorCQkJCQlwLT5idWZbYnVmZmVyX29mZnNldCArIGpdID0gUlJFRzMyKEFWSVZPX0RDX0kyQ19EQVRBKSAmIDB4ZmY7CisJCQkJcmVtYWluaW5nIC09IGN1cnJlbnRfY291bnQ7CisJCQkJYnVmZmVyX29mZnNldCArPSBjdXJyZW50X2NvdW50OworCQkJfQorCQl9IGVsc2UgeworCQkJd2hpbGUgKHJlbWFpbmluZykgeworCQkJCWlmIChyZW1haW5pbmcgPiAxNSkKKwkJCQkJY3VycmVudF9jb3VudCA9IDE1OworCQkJCWVsc2UKKwkJCQkJY3VycmVudF9jb3VudCA9IHJlbWFpbmluZzsKKwkJCQlXUkVHMzIoQVZJVk9fRENfSTJDX1NUQVRVUzEsIChBVklWT19EQ19JMkNfRE9ORSB8CisJCQkJCQkJICAgICAgQVZJVk9fRENfSTJDX05BQ0sgfAorCQkJCQkJCSAgICAgIEFWSVZPX0RDX0kyQ19IQUxUKSk7CisJCQkJV1JFRzMyKEFWSVZPX0RDX0kyQ19SRVNFVCwgQVZJVk9fRENfSTJDX1NPRlRfUkVTRVQpOworCQkJCXVkZWxheSgxKTsKKwkJCQlXUkVHMzIoQVZJVk9fRENfSTJDX1JFU0VULCAwKTsKKworCQkJCVdSRUczMihBVklWT19EQ19JMkNfREFUQSwgKHAtPmFkZHIgPDwgMSkgJiAweGZmKTsKKwkJCQlmb3IgKGogPSAwOyBqIDwgY3VycmVudF9jb3VudDsgaisrKQorCQkJCQlXUkVHMzIoQVZJVk9fRENfSTJDX0RBVEEsIHAtPmJ1ZltidWZmZXJfb2Zmc2V0ICsgal0pOworCisJCQkJV1JFRzMyKEFWSVZPX0RDX0kyQ19DT05UUk9MMywgQVZJVk9fRENfSTJDX1RJTUVfTElNSVQoNDgpKTsKKwkJCQlXUkVHMzIoQVZJVk9fRENfSTJDX0NPTlRST0wyLCAoQVZJVk9fRENfSTJDX0FERFJfQ09VTlQoMSkgfAorCQkJCQkJCSAgICAgICBBVklWT19EQ19JMkNfREFUQV9DT1VOVChjdXJyZW50X2NvdW50KSB8CisJCQkJCQkJICAgICAgIChwcmVzY2FsZSA8PCAxNikpKTsKKwkJCQlXUkVHMzIoQVZJVk9fRENfSTJDX0NPTlRST0wxLCByZWcpOworCQkJCVdSRUczMihBVklWT19EQ19JMkNfU1RBVFVTMSwgQVZJVk9fRENfSTJDX0dPKTsKKwkJCQlmb3IgKGogPSAwOyBqIDwgMjAwOyBqKyspIHsKKwkJCQkJdWRlbGF5KDUwKTsKKwkJCQkJdG1wID0gUlJFRzMyKEFWSVZPX0RDX0kyQ19TVEFUVVMxKTsKKwkJCQkJaWYgKHRtcCAmIEFWSVZPX0RDX0kyQ19HTykKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl0bXAgPSBSUkVHMzIoQVZJVk9fRENfSTJDX1NUQVRVUzEpOworCQkJCQlpZiAodG1wICYgQVZJVk9fRENfSTJDX0RPTkUpCisJCQkJCQlicmVhazsKKwkJCQkJZWxzZSB7CisJCQkJCQlEUk1fREVCVUcoImkyYyB3cml0ZSBlcnJvciAweCUwOHhcbiIsIHRtcCk7CisJCQkJCQlXUkVHMzIoQVZJVk9fRENfSTJDX1JFU0VULCBBVklWT19EQ19JMkNfQUJPUlQpOworCQkJCQkJcmV0ID0gLUVJTzsKKwkJCQkJCWdvdG8gZG9uZTsKKwkJCQkJfQorCQkJCX0KKwkJCQlyZW1haW5pbmcgLT0gY3VycmVudF9jb3VudDsKKwkJCQlidWZmZXJfb2Zmc2V0ICs9IGN1cnJlbnRfY291bnQ7CisJCQl9CisJCX0KKwl9CisKK2RvbmU6CisJV1JFRzMyKEFWSVZPX0RDX0kyQ19TVEFUVVMxLCAoQVZJVk9fRENfSTJDX0RPTkUgfAorCQkJCSAgICAgIEFWSVZPX0RDX0kyQ19OQUNLIHwKKwkJCQkgICAgICBBVklWT19EQ19JMkNfSEFMVCkpOworCVdSRUczMihBVklWT19EQ19JMkNfUkVTRVQsIEFWSVZPX0RDX0kyQ19TT0ZUX1JFU0VUKTsKKwl1ZGVsYXkoMSk7CisJV1JFRzMyKEFWSVZPX0RDX0kyQ19SRVNFVCwgMCk7CisKKwlXUkVHMzIoQVZJVk9fRENfSTJDX0FSQklUUkFUSU9OLCBBVklWT19EQ19JMkNfU1dfRE9ORV9VU0lOR19JMkMpOworCVdSRUczMihBVklWT19EQ19JMkNfQ09OVFJPTDEsIHNhdmVkMSk7CisJV1JFRzMyKDB4NDk0LCBzYXZlZDIpOworCXRtcCA9IFJSRUczMihSQURFT05fQklPU182X1NDUkFUQ0gpOworCXRtcCAmPSB+QVRPTV9TNl9IV19JMkNfQlVTWV9TVEFURTsKKwlXUkVHMzIoUkFERU9OX0JJT1NfNl9TQ1JBVENILCB0bXApOworCisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5wbS5tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kY19od19pMmNfbXV0ZXgpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCByYWRlb25fc3dfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCSAgICAgIHN0cnVjdCBpMmNfbXNnICptc2dzLCBpbnQgbnVtKQoreworCXN0cnVjdCByYWRlb25faTJjX2NoYW4gKmkyYyA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXApOworCWludCByZXQ7CisKKwlyYWRlb25faTJjX2RvX2xvY2soaTJjLCAxKTsKKwlyZXQgPSBpMmNfdHJhbnNmZXIoJmkyYy0+YWxnby5yYWRlb24uYml0X2FkYXB0ZXIsIG1zZ3MsIG51bSk7CisJcmFkZW9uX2kyY19kb19sb2NrKGkyYywgMCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHJhZGVvbl9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAorCQkJICAgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0pCit7CisJc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqaTJjID0gaTJjX2dldF9hZGFwZGF0YShpMmNfYWRhcCk7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBpMmMtPmRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqcmVjID0gJmkyYy0+cmVjOworCWludCByZXQ7CisKKwlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgeworCWNhc2UgQ0hJUF9SMTAwOgorCWNhc2UgQ0hJUF9SVjEwMDoKKwljYXNlIENISVBfUlMxMDA6CisJY2FzZSBDSElQX1JWMjAwOgorCWNhc2UgQ0hJUF9SUzIwMDoKKwljYXNlIENISVBfUjIwMDoKKwljYXNlIENISVBfUlYyNTA6CisJY2FzZSBDSElQX1JTMzAwOgorCWNhc2UgQ0hJUF9SVjI4MDoKKwljYXNlIENISVBfUjMwMDoKKwljYXNlIENISVBfUjM1MDoKKwljYXNlIENISVBfUlYzNTA6CisJY2FzZSBDSElQX1JWMzgwOgorCWNhc2UgQ0hJUF9SNDIwOgorCWNhc2UgQ0hJUF9SNDIzOgorCWNhc2UgQ0hJUF9SVjQxMDoKKwljYXNlIENISVBfUlM0MDA6CisJY2FzZSBDSElQX1JTNDgwOgorCQlpZiAocmVjLT5od19jYXBhYmxlKQorCQkJcmV0ID0gcjEwMF9od19pMmNfeGZlcihpMmNfYWRhcCwgbXNncywgbnVtKTsKKwkJZWxzZQorCQkJcmV0ID0gcmFkZW9uX3N3X2kyY194ZmVyKGkyY19hZGFwLCBtc2dzLCBudW0pOworCQlicmVhazsKKwljYXNlIENISVBfUlM2MDA6CisJY2FzZSBDSElQX1JTNjkwOgorCWNhc2UgQ0hJUF9SUzc0MDoKKwkJLyogWFhYIGZpbGwgaW4gaHcgaTJjIGltcGxlbWVudGF0aW9uICovCisJCXJldCA9IHJhZGVvbl9zd19pMmNfeGZlcihpMmNfYWRhcCwgbXNncywgbnVtKTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNTE1OgorCWNhc2UgQ0hJUF9SNTIwOgorCWNhc2UgQ0hJUF9SVjUzMDoKKwljYXNlIENISVBfUlY1NjA6CisJY2FzZSBDSElQX1JWNTcwOgorCWNhc2UgQ0hJUF9SNTgwOgorCQlpZiAocmVjLT5od19jYXBhYmxlKSB7CisJCQlpZiAocmVjLT5tbV9pMmMpCisJCQkJcmV0ID0gcjEwMF9od19pMmNfeGZlcihpMmNfYWRhcCwgbXNncywgbnVtKTsKKwkJCWVsc2UKKwkJCQlyZXQgPSByNTAwX2h3X2kyY194ZmVyKGkyY19hZGFwLCBtc2dzLCBudW0pOworCQl9IGVsc2UKKwkJCXJldCA9IHJhZGVvbl9zd19pMmNfeGZlcihpMmNfYWRhcCwgbXNncywgbnVtKTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1I2MDA6CisJY2FzZSBDSElQX1JWNjEwOgorCWNhc2UgQ0hJUF9SVjYzMDoKKwljYXNlIENISVBfUlY2NzA6CisJCS8qIFhYWCBmaWxsIGluIGh3IGkyYyBpbXBsZW1lbnRhdGlvbiAqLworCQlyZXQgPSByYWRlb25fc3dfaTJjX3hmZXIoaTJjX2FkYXAsIG1zZ3MsIG51bSk7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjYyMDoKKwljYXNlIENISVBfUlY2MzU6CisJY2FzZSBDSElQX1JTNzgwOgorCWNhc2UgQ0hJUF9SUzg4MDoKKwljYXNlIENISVBfUlY3NzA6CisJY2FzZSBDSElQX1JWNzMwOgorCWNhc2UgQ0hJUF9SVjcxMDoKKwljYXNlIENISVBfUlY3NDA6CisJCS8qIFhYWCBmaWxsIGluIGh3IGkyYyBpbXBsZW1lbnRhdGlvbiAqLworCQlyZXQgPSByYWRlb25fc3dfaTJjX3hmZXIoaTJjX2FkYXAsIG1zZ3MsIG51bSk7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9DRURBUjoKKwljYXNlIENISVBfUkVEV09PRDoKKwljYXNlIENISVBfSlVOSVBFUjoKKwljYXNlIENISVBfQ1lQUkVTUzoKKwljYXNlIENISVBfSEVNTE9DSzoKKwkJLyogWFhYIGZpbGwgaW4gaHcgaTJjIGltcGxlbWVudGF0aW9uICovCisJCXJldCA9IHJhZGVvbl9zd19pMmNfeGZlcihpMmNfYWRhcCwgbXNncywgbnVtKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJRFJNX0VSUk9SKCJpMmM6IHVuaGFuZGxlZCByYWRlb24gY2hpcFxuIik7CisJCXJldCA9IC1FSU87CisJCWJyZWFrOworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MzIgcmFkZW9uX2kyY19mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIHJhZGVvbl9pMmNfYWxnbyA9IHsKKwkubWFzdGVyX3hmZXIgPSByYWRlb25faTJjX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSByYWRlb25faTJjX2Z1bmMsCit9OworCiBzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuICpyYWRlb25faTJjX2NyZWF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkgIHN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgKnJlYywKIAkJCQkJICBjb25zdCBjaGFyICpuYW1lKQpAQCAtMTc5LDIzICs4NzgsMzYgQEAKIAlpZiAoaTJjID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCi0JaTJjLT5hZGFwdGVyLm93bmVyID0gVEhJU19NT0RVTEU7Ci0JaTJjLT5kZXYgPSBkZXY7Ci0JaTJjX3NldF9hZGFwZGF0YSgmaTJjLT5hZGFwdGVyLCBpMmMpOwotCWkyYy0+YWRhcHRlci5hbGdvX2RhdGEgPSAmaTJjLT5hbGdvLmJpdDsKLQlpMmMtPmFsZ28uYml0LnNldHNkYSA9IHNldF9kYXRhOwotCWkyYy0+YWxnby5iaXQuc2V0c2NsID0gc2V0X2Nsb2NrOwotCWkyYy0+YWxnby5iaXQuZ2V0c2RhID0gZ2V0X2RhdGE7Ci0JaTJjLT5hbGdvLmJpdC5nZXRzY2wgPSBnZXRfY2xvY2s7Ci0JaTJjLT5hbGdvLmJpdC51ZGVsYXkgPSAyMDsKKwkvKiBzZXQgdGhlIGludGVybmFsIGJpdCBhZGFwdGVyICovCisJaTJjLT5hbGdvLnJhZGVvbi5iaXRfYWRhcHRlci5vd25lciA9IFRISVNfTU9EVUxFOworCWkyY19zZXRfYWRhcGRhdGEoJmkyYy0+YWxnby5yYWRlb24uYml0X2FkYXB0ZXIsIGkyYyk7CisJc3ByaW50ZihpMmMtPmFsZ28ucmFkZW9uLmJpdF9hZGFwdGVyLm5hbWUsICJSYWRlb24gaW50ZXJuYWwgaTJjIGJpdCBidXMgJXMiLCBuYW1lKTsKKwlpMmMtPmFsZ28ucmFkZW9uLmJpdF9hZGFwdGVyLmFsZ29fZGF0YSA9ICZpMmMtPmFsZ28ucmFkZW9uLmJpdF9kYXRhOworCWkyYy0+YWxnby5yYWRlb24uYml0X2RhdGEuc2V0c2RhID0gc2V0X2RhdGE7CisJaTJjLT5hbGdvLnJhZGVvbi5iaXRfZGF0YS5zZXRzY2wgPSBzZXRfY2xvY2s7CisJaTJjLT5hbGdvLnJhZGVvbi5iaXRfZGF0YS5nZXRzZGEgPSBnZXRfZGF0YTsKKwlpMmMtPmFsZ28ucmFkZW9uLmJpdF9kYXRhLmdldHNjbCA9IGdldF9jbG9jazsKKwlpMmMtPmFsZ28ucmFkZW9uLmJpdF9kYXRhLnVkZWxheSA9IDIwOwogCS8qIHZlc2Egc2F5cyAyLjIgbXMgaXMgZW5vdWdoLCAxIGppZmZ5IGRvZXNuJ3Qgc2VlbSB0byBhbHdheXMKIAkgKiBtYWtlIHRoaXMsIDIgamlmZmllcyBpcyBhIGxvdCBtb3JlIHJlbGlhYmxlICovCi0JaTJjLT5hbGdvLmJpdC50aW1lb3V0ID0gMjsKLQlpMmMtPmFsZ28uYml0LmRhdGEgPSBpMmM7Ci0JaTJjLT5yZWMgPSAqcmVjOwotCXJldCA9IGkyY19iaXRfYWRkX2J1cygmaTJjLT5hZGFwdGVyKTsKKwlpMmMtPmFsZ28ucmFkZW9uLmJpdF9kYXRhLnRpbWVvdXQgPSAyOworCWkyYy0+YWxnby5yYWRlb24uYml0X2RhdGEuZGF0YSA9IGkyYzsKKwlyZXQgPSBpMmNfYml0X2FkZF9idXMoJmkyYy0+YWxnby5yYWRlb24uYml0X2FkYXB0ZXIpOwogCWlmIChyZXQpIHsKLQkJRFJNX0lORk8oIkZhaWxlZCB0byByZWdpc3RlciBpMmMgJXNcbiIsIG5hbWUpOworCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBpbnRlcm5hbCBiaXQgaTJjICVzXG4iLCBuYW1lKTsKKwkJZ290byBvdXRfZnJlZTsKKwl9CisJLyogc2V0IHRoZSByYWRlb24gaTJjIGFkYXB0ZXIgKi8KKwlpMmMtPmRldiA9IGRldjsKKwlpMmMtPnJlYyA9ICpyZWM7CisJaTJjLT5hZGFwdGVyLm93bmVyID0gVEhJU19NT0RVTEU7CisJaTJjX3NldF9hZGFwZGF0YSgmaTJjLT5hZGFwdGVyLCBpMmMpOworCXNwcmludGYoaTJjLT5hZGFwdGVyLm5hbWUsICJSYWRlb24gaTJjICVzIiwgbmFtZSk7CisJaTJjLT5hZGFwdGVyLmFsZ29fZGF0YSA9ICZpMmMtPmFsZ28ucmFkZW9uOworCWkyYy0+YWRhcHRlci5hbGdvID0gJnJhZGVvbl9pMmNfYWxnbzsKKwlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoJmkyYy0+YWRhcHRlcik7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBpMmMgJXNcbiIsIG5hbWUpOwogCQlnb3RvIG91dF9mcmVlOwogCX0KIApAQCAtMjM3LDExICs5NDksMTkgQEAKIAogfQogCi0KIHZvaWQgcmFkZW9uX2kyY19kZXN0cm95KHN0cnVjdCByYWRlb25faTJjX2NoYW4gKmkyYykKIHsKIAlpZiAoIWkyYykKIAkJcmV0dXJuOworCWkyY19kZWxfYWRhcHRlcigmaTJjLT5hbGdvLnJhZGVvbi5iaXRfYWRhcHRlcik7CisJaTJjX2RlbF9hZGFwdGVyKCZpMmMtPmFkYXB0ZXIpOworCWtmcmVlKGkyYyk7Cit9CisKK3ZvaWQgcmFkZW9uX2kyY19kZXN0cm95X2RwKHN0cnVjdCByYWRlb25faTJjX2NoYW4gKmkyYykKK3sKKwlpZiAoIWkyYykKKwkJcmV0dXJuOwogCiAJaTJjX2RlbF9hZGFwdGVyKCZpMmMtPmFkYXB0ZXIpOwogCWtmcmVlKGkyYyk7CkBAIC0yNTIsMTAgKzk3MiwxMCBAQAogCXJldHVybiBOVUxMOwogfQogCi12b2lkIHJhZGVvbl9pMmNfc3dfZ2V0X2J5dGUoc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqaTJjX2J1cywKLQkJCSAgICB1OCBzbGF2ZV9hZGRyLAotCQkJICAgIHU4IGFkZHIsCi0JCQkgICAgdTggKnZhbCkKK3ZvaWQgcmFkZW9uX2kyY19nZXRfYnl0ZShzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuICppMmNfYnVzLAorCQkJIHU4IHNsYXZlX2FkZHIsCisJCQkgdTggYWRkciwKKwkJCSB1OCAqdmFsKQogewogCXU4IG91dF9idWZbMl07CiAJdTggaW5fYnVmWzJdOwpAQCAtMjg2LDEwICsxMDA2LDEwIEBACiAJfQogfQogCi12b2lkIHJhZGVvbl9pMmNfc3dfcHV0X2J5dGUoc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqaTJjX2J1cywKLQkJCSAgICB1OCBzbGF2ZV9hZGRyLAotCQkJICAgIHU4IGFkZHIsCi0JCQkgICAgdTggdmFsKQordm9pZCByYWRlb25faTJjX3B1dF9ieXRlKHN0cnVjdCByYWRlb25faTJjX2NoYW4gKmkyY19idXMsCisJCQkgdTggc2xhdmVfYWRkciwKKwkJCSB1OCBhZGRyLAorCQkJIHU4IHZhbCkKIHsKIAl1aW50OF90IG91dF9idWZbMl07CiAJc3RydWN0IGkyY19tc2cgbXNnID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fa21zLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwppbmRleCBmMjNiMDU2Li4yMGVjMjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9rbXMuYwpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgInJhZGVvbi5oIgogI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKIAorI2luY2x1ZGUgPGxpbnV4L3ZnYV9zd2l0Y2hlcm9vLmg+CisKIGludCByYWRlb25fZHJpdmVyX3VubG9hZF9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CkBAIC0xMzYsNiArMTM4LDcgQEAKIAogdm9pZCByYWRlb25fZHJpdmVyX2xhc3RjbG9zZV9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKKwl2Z2Ffc3dpdGNoZXJvb19wcm9jZXNzX2RlbGF5ZWRfc3dpdGNoKCk7CiB9CiAKIGludCByYWRlb25fZHJpdmVyX29wZW5fa21zKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQpAQCAtMjc2LDE3ICsyNzksMTcgQEAKIAlEUk1fSU9DVExfREVGKERSTV9SQURFT05fU1VSRl9BTExPQywgcmFkZW9uX3N1cmZhY2VfYWxsb2Nfa21zLCBEUk1fQVVUSCksCiAJRFJNX0lPQ1RMX0RFRihEUk1fUkFERU9OX1NVUkZfRlJFRSwgcmFkZW9uX3N1cmZhY2VfZnJlZV9rbXMsIERSTV9BVVRIKSwKIAkvKiBLTVMgKi8KLQlEUk1fSU9DVExfREVGKERSTV9SQURFT05fR0VNX0lORk8sIHJhZGVvbl9nZW1faW5mb19pb2N0bCwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9HRU1fQ1JFQVRFLCByYWRlb25fZ2VtX2NyZWF0ZV9pb2N0bCwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9HRU1fTU1BUCwgcmFkZW9uX2dlbV9tbWFwX2lvY3RsLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fUkFERU9OX0dFTV9TRVRfRE9NQUlOLCByYWRlb25fZ2VtX3NldF9kb21haW5faW9jdGwsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGKERSTV9SQURFT05fR0VNX1BSRUFELCByYWRlb25fZ2VtX3ByZWFkX2lvY3RsLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fUkFERU9OX0dFTV9QV1JJVEUsIHJhZGVvbl9nZW1fcHdyaXRlX2lvY3RsLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fUkFERU9OX0dFTV9XQUlUX0lETEUsIHJhZGVvbl9nZW1fd2FpdF9pZGxlX2lvY3RsLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fUkFERU9OX0NTLCByYWRlb25fY3NfaW9jdGwsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGKERSTV9SQURFT05fSU5GTywgcmFkZW9uX2luZm9faW9jdGwsIERSTV9BVVRIKSwKLQlEUk1fSU9DVExfREVGKERSTV9SQURFT05fR0VNX1NFVF9USUxJTkcsIHJhZGVvbl9nZW1fc2V0X3RpbGluZ19pb2N0bCwgRFJNX0FVVEgpLAotCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9HRU1fR0VUX1RJTElORywgcmFkZW9uX2dlbV9nZXRfdGlsaW5nX2lvY3RsLCBEUk1fQVVUSCksCi0JRFJNX0lPQ1RMX0RFRihEUk1fUkFERU9OX0dFTV9CVVNZLCByYWRlb25fZ2VtX2J1c3lfaW9jdGwsIERSTV9BVVRIKSwKKwlEUk1fSU9DVExfREVGKERSTV9SQURFT05fR0VNX0lORk8sIHJhZGVvbl9nZW1faW5mb19pb2N0bCwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9SQURFT05fR0VNX0NSRUFURSwgcmFkZW9uX2dlbV9jcmVhdGVfaW9jdGwsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fUkFERU9OX0dFTV9NTUFQLCByYWRlb25fZ2VtX21tYXBfaW9jdGwsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fUkFERU9OX0dFTV9TRVRfRE9NQUlOLCByYWRlb25fZ2VtX3NldF9kb21haW5faW9jdGwsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fUkFERU9OX0dFTV9QUkVBRCwgcmFkZW9uX2dlbV9wcmVhZF9pb2N0bCwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9SQURFT05fR0VNX1BXUklURSwgcmFkZW9uX2dlbV9wd3JpdGVfaW9jdGwsIERSTV9BVVRIfERSTV9VTkxPQ0tFRCksCisJRFJNX0lPQ1RMX0RFRihEUk1fUkFERU9OX0dFTV9XQUlUX0lETEUsIHJhZGVvbl9nZW1fd2FpdF9pZGxlX2lvY3RsLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9DUywgcmFkZW9uX2NzX2lvY3RsLCBEUk1fQVVUSHxEUk1fVU5MT0NLRUQpLAorCURSTV9JT0NUTF9ERUYoRFJNX1JBREVPTl9JTkZPLCByYWRlb25faW5mb19pb2N0bCwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9SQURFT05fR0VNX1NFVF9USUxJTkcsIHJhZGVvbl9nZW1fc2V0X3RpbGluZ19pb2N0bCwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9SQURFT05fR0VNX0dFVF9USUxJTkcsIHJhZGVvbl9nZW1fZ2V0X3RpbGluZ19pb2N0bCwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKKwlEUk1fSU9DVExfREVGKERSTV9SQURFT05fR0VNX0JVU1ksIHJhZGVvbl9nZW1fYnVzeV9pb2N0bCwgRFJNX0FVVEh8RFJNX1VOTE9DS0VEKSwKIH07CiBpbnQgcmFkZW9uX21heF9rbXNfaW9jdGwgPSBEUk1fQVJSQVlfU0laRShyYWRlb25faW9jdGxzX2ttcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2NydGMuYwppbmRleCBiNmQ4MDgxLi5kZjIzZDZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9sZWdhY3lfY3J0Yy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9jcnRjLmMKQEAgLTQwMyw3ICs0MDMsNyBAQAogCiAJLyogaWYgc2Nhbm91dCB3YXMgaW4gR1RUIHRoaXMgcmVhbGx5IHdvdWxkbid0IHdvcmsgKi8KIAkvKiBjcnRjIG9mZnNldCBpcyBmcm9tIGRpc3BsYXkgYmFzZSBhZGRyIG5vdCBGQiBsb2NhdGlvbiAqLwotCXJhZGVvbl9jcnRjLT5sZWdhY3lfZGlzcGxheV9iYXNlX2FkZHIgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOworCXJhZGVvbl9jcnRjLT5sZWdhY3lfZGlzcGxheV9iYXNlX2FkZHIgPSByZGV2LT5tYy52cmFtX3N0YXJ0OwogCiAJYmFzZSAtPSByYWRlb25fY3J0Yy0+bGVnYWN5X2Rpc3BsYXlfYmFzZV9hZGRyOwogCkBAIC01ODIsMjkgKzU4Miw2IEBACiAJCQkJICAgPyBSQURFT05fQ1JUQ19WX1NZTkNfUE9MCiAJCQkJICAgOiAwKSk7CiAKLQkvKiBUT0RPIC0+IERlbGwgU2VydmVyICovCi0JaWYgKDApIHsKLQkJdWludDMyX3QgZGlzcF9od19kZWJ1ZyA9IFJSRUczMihSQURFT05fRElTUF9IV19ERUJVRyk7Ci0JCXVpbnQzMl90IHR2X2RhY19jbnRsID0gUlJFRzMyKFJBREVPTl9UVl9EQUNfQ05UTCk7Ci0JCXVpbnQzMl90IGRhYzJfY250bCA9IFJSRUczMihSQURFT05fREFDX0NOVEwyKTsKLQkJdWludDMyX3QgY3J0YzJfZ2VuX2NudGwgPSBSUkVHMzIoUkFERU9OX0NSVEMyX0dFTl9DTlRMKTsKLQotCQlkYWMyX2NudGwgJj0gflJBREVPTl9EQUMyX0RBQ19DTEtfU0VMOwotCQlkYWMyX2NudGwgfD0gUkFERU9OX0RBQzJfREFDMl9DTEtfU0VMOwotCi0JCS8qIEZvciBDUlQgb24gREFDMiwgZG9uJ3QgdHVybiBpdCBvbiBpZiBCSU9TIGRpZG4ndAotCQkgICBlbmFibGUgaXQsIGV2ZW4gaXQncyBkZXRlY3RlZC4KLQkJKi8KLQkJZGlzcF9od19kZWJ1ZyB8PSBSQURFT05fQ1JUMl9ESVNQMV9TRUw7Ci0JCXR2X2RhY19jbnRsICY9IH4oKDE8PDIpIHwgKDM8PDgpIHwgKDc8PDI0KSB8ICgweGZmPDwxNikpOwotCQl0dl9kYWNfY250bCB8PSAoMHgwMyB8ICgyPDw4KSB8ICgweDU4PDwxNikpOwotCi0JCVdSRUczMihSQURFT05fVFZfREFDX0NOVEwsIHR2X2RhY19jbnRsKTsKLQkJV1JFRzMyKFJBREVPTl9ESVNQX0hXX0RFQlVHLCBkaXNwX2h3X2RlYnVnKTsKLQkJV1JFRzMyKFJBREVPTl9EQUNfQ05UTDIsIGRhYzJfY250bCk7Ci0JCVdSRUczMihSQURFT05fQ1JUQzJfR0VOX0NOVEwsIGNydGMyX2dlbl9jbnRsKTsKLQl9Ci0KIAlpZiAocmFkZW9uX2NydGMtPmNydGNfaWQpIHsKIAkJdWludDMyX3QgY3J0YzJfZ2VuX2NudGw7CiAJCXVpbnQzMl90IGRpc3AyX21lcmdlX2NudGw7CkBAIC03MjYsNiArNzAzLDEwIEBACiAJCXBsbCA9ICZyZGV2LT5jbG9jay5wMXBsbDsKIAogCXBsbC0+ZmxhZ3MgPSBSQURFT05fUExMX0xFR0FDWTsKKwlpZiAocmFkZW9uX25ld19wbGwgPT0gMSkKKwkJcGxsLT5hbGdvID0gUExMX0FMR09fTkVXOworCWVsc2UKKwkJcGxsLT5hbGdvID0gUExMX0FMR09fTEVHQUNZOwogCiAJaWYgKG1vZGUtPmNsb2NrID4gMjAwMDAwKSAvKiByYW5nZSBsaW1pdHM/Pz8gKi8KIAkJcGxsLT5mbGFncyB8PSBSQURFT05fUExMX1BSRUZFUl9ISUdIX0ZCX0RJVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2xlZ2FjeV9lbmNvZGVycy5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKaW5kZXggMzhlNDVlMi4uY2YzODljZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbGVnYWN5X2VuY29kZXJzLmMKQEAgLTExNSw2ICsxMTUsOSBAQAogCQlyYWRlb25fYXRvbWJpb3NfZW5jb2Rlcl9kcG1zX3NjcmF0Y2hfcmVncyhlbmNvZGVyLCAobW9kZSA9PSBEUk1fTU9ERV9EUE1TX09OKSA/IHRydWUgOiBmYWxzZSk7CiAJZWxzZQogCQlyYWRlb25fY29tYmlvc19lbmNvZGVyX2RwbXNfc2NyYXRjaF9yZWdzKGVuY29kZXIsIChtb2RlID09IERSTV9NT0RFX0RQTVNfT04pID8gdHJ1ZSA6IGZhbHNlKTsKKworCS8qIGFkanVzdCBwbSB0byBkcG1zIGNoYW5nZSAqLworCXJhZGVvbl9wbV9jb21wdXRlX2Nsb2NrcyhyZGV2KTsKIH0KIAogc3RhdGljIHZvaWQgcmFkZW9uX2xlZ2FjeV9sdmRzX3ByZXBhcmUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtMjE0LDYgKzIxNywxMSBAQAogCQkJCSAgICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpCiB7CiAJc3RydWN0IHJhZGVvbl9lbmNvZGVyICpyYWRlb25fZW5jb2RlciA9IHRvX3JhZGVvbl9lbmNvZGVyKGVuY29kZXIpOworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBlbmNvZGVyLT5kZXY7CisJc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYgPSBkZXYtPmRldl9wcml2YXRlOworCisJLyogYWRqdXN0IHBtIHRvIHVwY29taW5nIG1vZGUgY2hhbmdlICovCisJcmFkZW9uX3BtX2NvbXB1dGVfY2xvY2tzKHJkZXYpOwogCiAJLyogc2V0IHRoZSBhY3RpdmUgZW5jb2RlciB0byBjb25uZWN0b3Igcm91dGluZyAqLwogCXJhZGVvbl9lbmNvZGVyX3NldF9hY3RpdmVfZGV2aWNlKGVuY29kZXIpOwpAQCAtMjg1LDYgKzI5Myw5IEBACiAJCXJhZGVvbl9hdG9tYmlvc19lbmNvZGVyX2RwbXNfc2NyYXRjaF9yZWdzKGVuY29kZXIsIChtb2RlID09IERSTV9NT0RFX0RQTVNfT04pID8gdHJ1ZSA6IGZhbHNlKTsKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX2VuY29kZXJfZHBtc19zY3JhdGNoX3JlZ3MoZW5jb2RlciwgKG1vZGUgPT0gRFJNX01PREVfRFBNU19PTikgPyB0cnVlIDogZmFsc2UpOworCisJLyogYWRqdXN0IHBtIHRvIGRwbXMgY2hhbmdlICovCisJcmFkZW9uX3BtX2NvbXB1dGVfY2xvY2tzKHJkZXYpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3ByaW1hcnlfZGFjX3ByZXBhcmUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtNDcwLDYgKzQ4MSw5IEBACiAJCXJhZGVvbl9hdG9tYmlvc19lbmNvZGVyX2RwbXNfc2NyYXRjaF9yZWdzKGVuY29kZXIsIChtb2RlID09IERSTV9NT0RFX0RQTVNfT04pID8gdHJ1ZSA6IGZhbHNlKTsKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX2VuY29kZXJfZHBtc19zY3JhdGNoX3JlZ3MoZW5jb2RlciwgKG1vZGUgPT0gRFJNX01PREVfRFBNU19PTikgPyB0cnVlIDogZmFsc2UpOworCisJLyogYWRqdXN0IHBtIHRvIGRwbXMgY2hhbmdlICovCisJcmFkZW9uX3BtX2NvbXB1dGVfY2xvY2tzKHJkZXYpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3RtZHNfaW50X3ByZXBhcmUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtNjM1LDYgKzY0OSw5IEBACiAJCXJhZGVvbl9hdG9tYmlvc19lbmNvZGVyX2RwbXNfc2NyYXRjaF9yZWdzKGVuY29kZXIsIChtb2RlID09IERSTV9NT0RFX0RQTVNfT04pID8gdHJ1ZSA6IGZhbHNlKTsKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX2VuY29kZXJfZHBtc19zY3JhdGNoX3JlZ3MoZW5jb2RlciwgKG1vZGUgPT0gRFJNX01PREVfRFBNU19PTikgPyB0cnVlIDogZmFsc2UpOworCisJLyogYWRqdXN0IHBtIHRvIGRwbXMgY2hhbmdlICovCisJcmFkZW9uX3BtX2NvbXB1dGVfY2xvY2tzKHJkZXYpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3RtZHNfZXh0X3ByZXBhcmUoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyKQpAQCAtODQyLDYgKzg1OSw5IEBACiAJCXJhZGVvbl9hdG9tYmlvc19lbmNvZGVyX2RwbXNfc2NyYXRjaF9yZWdzKGVuY29kZXIsIChtb2RlID09IERSTV9NT0RFX0RQTVNfT04pID8gdHJ1ZSA6IGZhbHNlKTsKIAllbHNlCiAJCXJhZGVvbl9jb21iaW9zX2VuY29kZXJfZHBtc19zY3JhdGNoX3JlZ3MoZW5jb2RlciwgKG1vZGUgPT0gRFJNX01PREVfRFBNU19PTikgPyB0cnVlIDogZmFsc2UpOworCisJLyogYWRqdXN0IHBtIHRvIGRwbXMgY2hhbmdlICovCisJcmFkZW9uX3BtX2NvbXB1dGVfY2xvY2tzKHJkZXYpOwogfQogCiBzdGF0aWMgdm9pZCByYWRlb25fbGVnYWN5X3R2X2RhY19wcmVwYXJlKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX21vZGUuaAppbmRleCBlODFiMmFlLi4xNzAyYjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9tb2RlLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fbW9kZS5oCkBAIC04Myw2ICs4Myw4IEBACiAJYm9vbCB2YWxpZDsKIAkvKiBpZCB1c2VkIGJ5IGF0b20gKi8KIAl1aW50OF90IGkyY19pZDsKKwkvKiBpZCB1c2VkIGJ5IGF0b20gKi8KKwl1aW50OF90IGhwZF9pZDsKIAkvKiBjYW4gYmUgdXNlZCB3aXRoIGh3IGkyYyBlbmdpbmUgKi8KIAlib29sIGh3X2NhcGFibGU7CiAJLyogdXNlcyBtdWx0aS1tZWRpYSBpMmMgZW5naW5lICovCkBAIC0xMTMsNiArMTE1LDcgQEAKIAogI2RlZmluZSBSQURFT05fTUFYX0JJT1NfQ09OTkVDVE9SIDE2CiAKKy8qIHBsbCBmbGFncyAqLwogI2RlZmluZSBSQURFT05fUExMX1VTRV9CSU9TX0RJVlMgICAgICAgICgxIDw8IDApCiAjZGVmaW5lIFJBREVPTl9QTExfTk9fT0REX1BPU1RfRElWICAgICAgKDEgPDwgMSkKICNkZWZpbmUgUkFERU9OX1BMTF9VU0VfUkVGX0RJViAgICAgICAgICAoMSA8PCAyKQpAQCAtMTI3LDYgKzEzMCwxMiBAQAogI2RlZmluZSBSQURFT05fUExMX1BSRUZFUl9DTE9TRVNUX0xPV0VSICgxIDw8IDExKQogI2RlZmluZSBSQURFT05fUExMX1VTRV9QT1NUX0RJViAgICAgICAgICgxIDw8IDEyKQogCisvKiBwbGwgYWxnbyAqLworZW51bSByYWRlb25fcGxsX2FsZ28geworCVBMTF9BTEdPX0xFR0FDWSwKKwlQTExfQUxHT19ORVcKK307CisKIHN0cnVjdCByYWRlb25fcGxsIHsKIAkvKiByZWZlcmVuY2UgZnJlcXVlbmN5ICovCiAJdWludDMyX3QgcmVmZXJlbmNlX2ZyZXE7CkBAIC0xNTcsNiArMTY2LDEzIEBACiAKIAkvKiBwbGwgaWQgKi8KIAl1aW50MzJfdCBpZDsKKwkvKiBwbGwgYWxnbyAqLworCWVudW0gcmFkZW9uX3BsbF9hbGdvIGFsZ287Cit9OworCitzdHJ1Y3QgaTJjX2FsZ29fcmFkZW9uX2RhdGEgeworCXN0cnVjdCBpMmNfYWRhcHRlciBiaXRfYWRhcHRlcjsKKwlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgYml0X2RhdGE7CiB9OwogCiBzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuIHsKQEAgLTE2NCw3ICsxODAsNyBAQAogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7CiAJdW5pb24gewogCQlzdHJ1Y3QgaTJjX2FsZ29fZHBfYXV4X2RhdGEgZHA7Ci0JCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSBiaXQ7CisJCXN0cnVjdCBpMmNfYWxnb19yYWRlb25fZGF0YSByYWRlb247CiAJfSBhbGdvOwogCXN0cnVjdCByYWRlb25faTJjX2J1c19yZWMgcmVjOwogfTsKQEAgLTE5Myw3ICsyMDksNyBAQAogCXN0cnVjdCBjYXJkX2luZm8gKmF0b21fY2FyZF9pbmZvOwogCWVudW0gcmFkZW9uX2Nvbm5lY3Rvcl90YWJsZSBjb25uZWN0b3JfdGFibGU7CiAJYm9vbCBtb2RlX2NvbmZpZ19pbml0aWFsaXplZDsKLQlzdHJ1Y3QgcmFkZW9uX2NydGMgKmNydGNzWzJdOworCXN0cnVjdCByYWRlb25fY3J0YyAqY3J0Y3NbNl07CiAJLyogRFZJLUkgcHJvcGVydGllcyAqLwogCXN0cnVjdCBkcm1fcHJvcGVydHkgKmNvaGVyZW50X21vZGVfcHJvcGVydHk7CiAJLyogREFDIGVuYWJsZSBsb2FkIGRldGVjdCAqLwpAQCAtMjAyLDcgKzIxOCw4IEBACiAJc3RydWN0IGRybV9wcm9wZXJ0eSAqdHZfc3RkX3Byb3BlcnR5OwogCS8qIGxlZ2FjeSBUTURTIFBMTCBkZXRlY3QgKi8KIAlzdHJ1Y3QgZHJtX3Byb3BlcnR5ICp0bWRzX3BsbF9wcm9wZXJ0eTsKLQorCS8qIGhhcmRjb2RlZCBERlAgZWRpZCBmcm9tIEJJT1MgKi8KKwlzdHJ1Y3QgZWRpZCAqYmlvc19oYXJkY29kZWRfZWRpZDsKIH07CiAKICNkZWZpbmUgTUFYX0hfQ09ERV9USU1JTkdfTEVOIDMyCkBAIC0yMzcsNiArMjU0LDcgQEAKIAlmaXhlZDIwXzEyIHZzYzsKIAlmaXhlZDIwXzEyIGhzYzsKIAlzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSBuYXRpdmVfbW9kZTsKKwlpbnQgcGxsX2lkOwogfTsKIAogc3RydWN0IHJhZGVvbl9lbmNvZGVyX3ByaW1hcnlfZGFjIHsKQEAgLTMwMyw2ICszMjEsNyBAQAogCS8qIGF0b20gbHZkcyAqLwogCXVpbnQzMl90IGx2ZHNfbWlzYzsKIAl1aW50MTZfdCBwYW5lbF9wd3JfZGVsYXk7CisJZW51bSByYWRlb25fcGxsX2FsZ28gcGxsX2FsZ287CiAJc3RydWN0IHJhZGVvbl9hdG9tX3NzICpzczsKIAkvKiBwYW5lbCBtb2RlICovCiAJc3RydWN0IGRybV9kaXNwbGF5X21vZGUgbmF0aXZlX21vZGU7CkBAIC0zOTgsNiArNDE3LDcgQEAKIAkJCSAgc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvcik7CiBleHRlcm4gdTggcmFkZW9uX2RwX2dldHNpbmt0eXBlKHN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yKTsKIGV4dGVybiBib29sIHJhZGVvbl9kcF9nZXRkcGNkKHN0cnVjdCByYWRlb25fY29ubmVjdG9yICpyYWRlb25fY29ubmVjdG9yKTsKK2V4dGVybiB2b2lkIGF0b21iaW9zX2RpZ19lbmNvZGVyX3NldHVwKHN0cnVjdCBkcm1fZW5jb2RlciAqZW5jb2RlciwgaW50IGFjdGlvbik7CiBleHRlcm4gdm9pZCBhdG9tYmlvc19kaWdfdHJhbnNtaXR0ZXJfc2V0dXAoc3RydWN0IGRybV9lbmNvZGVyICplbmNvZGVyLAogCQkJCQkgICBpbnQgYWN0aW9uLCB1aW50OF90IGxhbmVfbnVtLAogCQkJCQkgICB1aW50OF90IGxhbmVfc2V0KTsKQEAgLTQxMSwxNCArNDMxLDE1IEBACiAJCQkJCQkgc3RydWN0IHJhZGVvbl9pMmNfYnVzX3JlYyAqcmVjLAogCQkJCQkJIGNvbnN0IGNoYXIgKm5hbWUpOwogZXh0ZXJuIHZvaWQgcmFkZW9uX2kyY19kZXN0cm95KHN0cnVjdCByYWRlb25faTJjX2NoYW4gKmkyYyk7Ci1leHRlcm4gdm9pZCByYWRlb25faTJjX3N3X2dldF9ieXRlKHN0cnVjdCByYWRlb25faTJjX2NoYW4gKmkyY19idXMsCi0JCQkJICAgdTggc2xhdmVfYWRkciwKLQkJCQkgICB1OCBhZGRyLAotCQkJCSAgIHU4ICp2YWwpOwotZXh0ZXJuIHZvaWQgcmFkZW9uX2kyY19zd19wdXRfYnl0ZShzdHJ1Y3QgcmFkZW9uX2kyY19jaGFuICppMmMsCi0JCQkJICAgdTggc2xhdmVfYWRkciwKLQkJCQkgICB1OCBhZGRyLAotCQkJCSAgIHU4IHZhbCk7CitleHRlcm4gdm9pZCByYWRlb25faTJjX2Rlc3Ryb3lfZHAoc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqaTJjKTsKK2V4dGVybiB2b2lkIHJhZGVvbl9pMmNfZ2V0X2J5dGUoc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqaTJjX2J1cywKKwkJCQl1OCBzbGF2ZV9hZGRyLAorCQkJCXU4IGFkZHIsCisJCQkJdTggKnZhbCk7CitleHRlcm4gdm9pZCByYWRlb25faTJjX3B1dF9ieXRlKHN0cnVjdCByYWRlb25faTJjX2NoYW4gKmkyYywKKwkJCQl1OCBzbGF2ZV9hZGRyLAorCQkJCXU4IGFkZHIsCisJCQkJdTggdmFsKTsKIGV4dGVybiBib29sIHJhZGVvbl9kZGNfcHJvYmUoc3RydWN0IHJhZGVvbl9jb25uZWN0b3IgKnJhZGVvbl9jb25uZWN0b3IpOwogZXh0ZXJuIGludCByYWRlb25fZGRjX2dldF9tb2RlcyhzdHJ1Y3QgcmFkZW9uX2Nvbm5lY3RvciAqcmFkZW9uX2Nvbm5lY3Rvcik7CiAKQEAgLTQzMiwxNCArNDUzLDYgQEAKIAkJCSAgICAgICB1aW50MzJfdCAqcmVmX2Rpdl9wLAogCQkJICAgICAgIHVpbnQzMl90ICpwb3N0X2Rpdl9wKTsKIAotZXh0ZXJuIHZvaWQgcmFkZW9uX2NvbXB1dGVfcGxsX2F2aXZvKHN0cnVjdCByYWRlb25fcGxsICpwbGwsCi0JCQkJICAgICB1aW50NjRfdCBmcmVxLAotCQkJCSAgICAgdWludDMyX3QgKmRvdF9jbG9ja19wLAotCQkJCSAgICAgdWludDMyX3QgKmZiX2Rpdl9wLAotCQkJCSAgICAgdWludDMyX3QgKmZyYWNfZmJfZGl2X3AsCi0JCQkJICAgICB1aW50MzJfdCAqcmVmX2Rpdl9wLAotCQkJCSAgICAgdWludDMyX3QgKnBvc3RfZGl2X3ApOwotCiBleHRlcm4gdm9pZCByYWRlb25fc2V0dXBfZW5jb2Rlcl9jbG9uZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKIHN0cnVjdCBkcm1fZW5jb2RlciAqcmFkZW9uX2VuY29kZXJfbGVnYWN5X2x2ZHNfYWRkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGludCBiaW9zX2luZGV4KTsKQEAgLTQ3Myw2ICs0ODYsOSBAQAogZXh0ZXJuIGludCByYWRlb25fY3J0Y19jdXJzb3JfbW92ZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQkJICAgaW50IHgsIGludCB5KTsKIAorZXh0ZXJuIGJvb2wgcmFkZW9uX2NvbWJpb3NfY2hlY2tfaGFyZGNvZGVkX2VkaWQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworZXh0ZXJuIHN0cnVjdCBlZGlkICoKK3JhZGVvbl9jb21iaW9zX2dldF9oYXJkY29kZWRfZWRpZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CiBleHRlcm4gYm9vbCByYWRlb25fYXRvbV9nZXRfY2xvY2tfaW5mbyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIGV4dGVybiBib29sIHJhZGVvbl9jb21iaW9zX2dldF9jbG9ja19pbmZvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogZXh0ZXJuIHN0cnVjdCByYWRlb25fZW5jb2Rlcl9hdG9tX2RpZyAqCkBAIC01MzEsNyArNTQ3LDYgQEAKIAkJCSAgICAgICBzdHJ1Y3QgcmFkZW9uX2NydGMgKnJhZGVvbl9jcnRjKTsKIHZvaWQgcmFkZW9uX2xlZ2FjeV9pbml0X2NydGMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKIAkJCSAgICAgc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0Yyk7Ci1leHRlcm4gdm9pZCByYWRlb25faTJjX2RvX2xvY2soc3RydWN0IHJhZGVvbl9pMmNfY2hhbiAqaTJjLCBpbnQgbG9ja19zdGF0ZSk7CiAKIHZvaWQgcmFkZW9uX2dldF9jbG9ja19pbmZvKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9vYmplY3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCmluZGV4IGYxZGEzNzAuLmZjOWQwMGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX29iamVjdC5jCkBAIC0xNzgsNyArMTc4LDYgQEAKIHsKIAlpbnQgciwgaTsKIAotCXJhZGVvbl90dG1fcGxhY2VtZW50X2Zyb21fZG9tYWluKGJvLCBkb21haW4pOwogCWlmIChiby0+cGluX2NvdW50KSB7CiAJCWJvLT5waW5fY291bnQrKzsKIAkJaWYgKGdwdV9hZGRyKQpAQCAtMTg2LDYgKzE4NSw4IEBACiAJCXJldHVybiAwOwogCX0KIAlyYWRlb25fdHRtX3BsYWNlbWVudF9mcm9tX2RvbWFpbihibywgZG9tYWluKTsKKwkvKiBmb3JjZSB0byBwaW4gaW50byB2aXNpYmxlIHZpZGVvIHJhbSAqLworCWJvLT5wbGFjZW1lbnQubHBmbiA9IGJvLT5yZGV2LT5tYy52aXNpYmxlX3ZyYW1fc2l6ZSA+PiBQQUdFX1NISUZUOwogCWZvciAoaSA9IDA7IGkgPCBiby0+cGxhY2VtZW50Lm51bV9wbGFjZW1lbnQ7IGkrKykKIAkJYm8tPnBsYWNlbWVudHNbaV0gfD0gVFRNX1BMX0ZMQUdfTk9fRVZJQ1Q7CiAJciA9IHR0bV9ib192YWxpZGF0ZSgmYm8tPnRibywgJmJvLT5wbGFjZW1lbnQsIGZhbHNlLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcG0uYwppbmRleCA4YmNlNjRjLi5kNGQxYzM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9wbS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3BtLmMKQEAgLTE4LDIxICsxOCw0MTMgQEAKICAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqCiAgKiBBdXRob3JzOiBSYWZhxYIgTWnFgmVja2kgPHphamVjNUBnbWFpbC5jb20+CisgKiAgICAgICAgICBBbGV4IERldWNoZXIgPGFsZXhkZXVjaGVyQGdtYWlsLmNvbT4KICAqLwogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJyYWRlb24uaCIKKyNpbmNsdWRlICJhdml2b2QuaCIKIAotaW50IHJhZGVvbl9kZWJ1Z2ZzX3BtX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOworI2RlZmluZSBSQURFT05fSURMRV9MT09QX01TIDEwMAorI2RlZmluZSBSQURFT05fUkVDTE9DS19ERUxBWV9NUyAyMDAKKyNkZWZpbmUgUkFERU9OX1dBSVRfVkJMQU5LX1RJTUVPVVQgMjAwCisKK3N0YXRpYyB2b2lkIHJhZGVvbl9wbV9zZXRfY2xvY2tzX2xvY2tlZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitzdGF0aWMgdm9pZCByYWRlb25fcG1fc2V0X2Nsb2NrcyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CitzdGF0aWMgdm9pZCByYWRlb25fcG1faWRsZV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyBpbnQgcmFkZW9uX2RlYnVnZnNfcG1faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldik7CisKK3N0YXRpYyBjb25zdCBjaGFyICpwbV9zdGF0ZV9uYW1lc1s0XSA9IHsKKwkiUE1fU1RBVEVfRElTQUJMRUQiLAorCSJQTV9TVEFURV9NSU5JTVVNIiwKKwkiUE1fU1RBVEVfUEFVU0VEIiwKKwkiUE1fU1RBVEVfQUNUSVZFIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnBtX3N0YXRlX3R5cGVzWzVdID0geworCSJEZWZhdWx0IiwKKwkiUG93ZXJzYXZlIiwKKwkiQmF0dGVyeSIsCisJIkJhbGFuY2VkIiwKKwkiUGVyZm9ybWFuY2UiLAorfTsKKworc3RhdGljIHZvaWQgcmFkZW9uX3ByaW50X3Bvd2VyX21vZGVfaW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwlpbnQgaSwgajsKKwlib29sIGlzX2RlZmF1bHQ7CisKKwlEUk1fSU5GTygiJWQgUG93ZXIgU3RhdGUocylcbiIsIHJkZXYtPnBtLm51bV9wb3dlcl9zdGF0ZXMpOworCWZvciAoaSA9IDA7IGkgPCByZGV2LT5wbS5udW1fcG93ZXJfc3RhdGVzOyBpKyspIHsKKwkJaWYgKHJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGUgPT0gJnJkZXYtPnBtLnBvd2VyX3N0YXRlW2ldKQorCQkJaXNfZGVmYXVsdCA9IHRydWU7CisJCWVsc2UKKwkJCWlzX2RlZmF1bHQgPSBmYWxzZTsKKwkJRFJNX0lORk8oIlN0YXRlICVkICVzICVzXG4iLCBpLAorCQkJIHBtX3N0YXRlX3R5cGVzW3JkZXYtPnBtLnBvd2VyX3N0YXRlW2ldLnR5cGVdLAorCQkJIGlzX2RlZmF1bHQgPyAiKGRlZmF1bHQpIiA6ICIiKTsKKwkJaWYgKChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSAmJiAhKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0lHUCkpCisJCQlEUk1fSU5GTygiXHQlZCBQQ0lFIExhbmVzXG4iLCByZGV2LT5wbS5wb3dlcl9zdGF0ZVtpXS5ub25fY2xvY2tfaW5mby5wY2llX2xhbmVzKTsKKwkJRFJNX0lORk8oIlx0JWQgQ2xvY2sgTW9kZShzKVxuIiwgcmRldi0+cG0ucG93ZXJfc3RhdGVbaV0ubnVtX2Nsb2NrX21vZGVzKTsKKwkJZm9yIChqID0gMDsgaiA8IHJkZXYtPnBtLnBvd2VyX3N0YXRlW2ldLm51bV9jbG9ja19tb2RlczsgaisrKSB7CisJCQlpZiAocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfSUdQKQorCQkJCURSTV9JTkZPKCJcdFx0JWQgZW5naW5lOiAlZFxuIiwKKwkJCQkJIGosCisJCQkJCSByZGV2LT5wbS5wb3dlcl9zdGF0ZVtpXS5jbG9ja19pbmZvW2pdLnNjbGsgKiAxMCk7CisJCQllbHNlCisJCQkJRFJNX0lORk8oIlx0XHQlZCBlbmdpbmUvbWVtb3J5OiAlZC8lZFxuIiwKKwkJCQkJIGosCisJCQkJCSByZGV2LT5wbS5wb3dlcl9zdGF0ZVtpXS5jbG9ja19pbmZvW2pdLnNjbGsgKiAxMCwKKwkJCQkJIHJkZXYtPnBtLnBvd2VyX3N0YXRlW2ldLmNsb2NrX2luZm9bal0ubWNsayAqIDEwKTsKKwkJfQorCX0KK30KKworc3RhdGljIHN0cnVjdCByYWRlb25fcG93ZXJfc3RhdGUgKiByYWRlb25fcGlja19wb3dlcl9zdGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJCQkJCQkgICBlbnVtIHJhZGVvbl9wbV9zdGF0ZV90eXBlIHR5cGUpCit7CisJaW50IGksIGo7CisJZW51bSByYWRlb25fcG1fc3RhdGVfdHlwZSB3YW50ZWRfdHlwZXNbMl07CisJaW50IHdhbnRlZF9jb3VudDsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgUE9XRVJfU1RBVEVfVFlQRV9ERUZBVUxUOgorCWRlZmF1bHQ6CisJCXJldHVybiByZGV2LT5wbS5kZWZhdWx0X3Bvd2VyX3N0YXRlOworCWNhc2UgUE9XRVJfU1RBVEVfVFlQRV9QT1dFUlNBVkU6CisJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19NT0JJTElUWSkgeworCQkJd2FudGVkX3R5cGVzWzBdID0gUE9XRVJfU1RBVEVfVFlQRV9QT1dFUlNBVkU7CisJCQl3YW50ZWRfdHlwZXNbMV0gPSBQT1dFUl9TVEFURV9UWVBFX0JBVFRFUlk7CisJCQl3YW50ZWRfY291bnQgPSAyOworCQl9IGVsc2UgeworCQkJd2FudGVkX3R5cGVzWzBdID0gUE9XRVJfU1RBVEVfVFlQRV9QRVJGT1JNQU5DRTsKKwkJCXdhbnRlZF9jb3VudCA9IDE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVEFURV9UWVBFX0JBVFRFUlk6CisJCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19NT0JJTElUWSkgeworCQkJd2FudGVkX3R5cGVzWzBdID0gUE9XRVJfU1RBVEVfVFlQRV9CQVRURVJZOworCQkJd2FudGVkX3R5cGVzWzFdID0gUE9XRVJfU1RBVEVfVFlQRV9QT1dFUlNBVkU7CisJCQl3YW50ZWRfY291bnQgPSAyOworCQl9IGVsc2UgeworCQkJd2FudGVkX3R5cGVzWzBdID0gUE9XRVJfU1RBVEVfVFlQRV9QRVJGT1JNQU5DRTsKKwkJCXdhbnRlZF9jb3VudCA9IDE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVEFURV9UWVBFX0JBTEFOQ0VEOgorCWNhc2UgUE9XRVJfU1RBVEVfVFlQRV9QRVJGT1JNQU5DRToKKwkJd2FudGVkX3R5cGVzWzBdID0gdHlwZTsKKwkJd2FudGVkX2NvdW50ID0gMTsKKwkJYnJlYWs7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHdhbnRlZF9jb3VudDsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCByZGV2LT5wbS5udW1fcG93ZXJfc3RhdGVzOyBqKyspIHsKKwkJCWlmIChyZGV2LT5wbS5wb3dlcl9zdGF0ZVtqXS50eXBlID09IHdhbnRlZF90eXBlc1tpXSkKKwkJCQlyZXR1cm4gJnJkZXYtPnBtLnBvd2VyX3N0YXRlW2pdOworCQl9CisJfQorCisJcmV0dXJuIHJkZXYtPnBtLmRlZmF1bHRfcG93ZXJfc3RhdGU7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmFkZW9uX3BtX2Nsb2NrX2luZm8gKiByYWRlb25fcGlja19jbG9ja19tb2RlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LAorCQkJCQkJCSAgICBzdHJ1Y3QgcmFkZW9uX3Bvd2VyX3N0YXRlICpwb3dlcl9zdGF0ZSwKKwkJCQkJCQkgICAgZW51bSByYWRlb25fcG1fY2xvY2tfbW9kZV90eXBlIHR5cGUpCit7CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBQT1dFUl9NT0RFX1RZUEVfREVGQVVMVDoKKwlkZWZhdWx0OgorCQlyZXR1cm4gcG93ZXJfc3RhdGUtPmRlZmF1bHRfY2xvY2tfbW9kZTsKKwljYXNlIFBPV0VSX01PREVfVFlQRV9MT1c6CisJCXJldHVybiAmcG93ZXJfc3RhdGUtPmNsb2NrX2luZm9bMF07CisJY2FzZSBQT1dFUl9NT0RFX1RZUEVfTUlEOgorCQlpZiAocG93ZXJfc3RhdGUtPm51bV9jbG9ja19tb2RlcyA+IDIpCisJCQlyZXR1cm4gJnBvd2VyX3N0YXRlLT5jbG9ja19pbmZvWzFdOworCQllbHNlCisJCQlyZXR1cm4gJnBvd2VyX3N0YXRlLT5jbG9ja19pbmZvWzBdOworCQlicmVhazsKKwljYXNlIFBPV0VSX01PREVfVFlQRV9ISUdIOgorCQlyZXR1cm4gJnBvd2VyX3N0YXRlLT5jbG9ja19pbmZvW3Bvd2VyX3N0YXRlLT5udW1fY2xvY2tfbW9kZXMgLSAxXTsKKwl9CisKK30KKworc3RhdGljIHZvaWQgcmFkZW9uX2dldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJCQkgICBlbnVtIHJhZGVvbl9wbV9hY3Rpb24gYWN0aW9uKQoreworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBQTV9BQ1RJT05fTUlOSU1VTToKKwkJcmRldi0+cG0ucmVxdWVzdGVkX3Bvd2VyX3N0YXRlID0gcmFkZW9uX3BpY2tfcG93ZXJfc3RhdGUocmRldiwgUE9XRVJfU1RBVEVfVFlQRV9CQVRURVJZKTsKKwkJcmRldi0+cG0ucmVxdWVzdGVkX2Nsb2NrX21vZGUgPQorCQkJcmFkZW9uX3BpY2tfY2xvY2tfbW9kZShyZGV2LCByZGV2LT5wbS5yZXF1ZXN0ZWRfcG93ZXJfc3RhdGUsIFBPV0VSX01PREVfVFlQRV9MT1cpOworCQlicmVhazsKKwljYXNlIFBNX0FDVElPTl9ET1dOQ0xPQ0s6CisJCXJkZXYtPnBtLnJlcXVlc3RlZF9wb3dlcl9zdGF0ZSA9IHJhZGVvbl9waWNrX3Bvd2VyX3N0YXRlKHJkZXYsIFBPV0VSX1NUQVRFX1RZUEVfUE9XRVJTQVZFKTsKKwkJcmRldi0+cG0ucmVxdWVzdGVkX2Nsb2NrX21vZGUgPQorCQkJcmFkZW9uX3BpY2tfY2xvY2tfbW9kZShyZGV2LCByZGV2LT5wbS5yZXF1ZXN0ZWRfcG93ZXJfc3RhdGUsIFBPV0VSX01PREVfVFlQRV9NSUQpOworCQlicmVhazsKKwljYXNlIFBNX0FDVElPTl9VUENMT0NLOgorCQlyZGV2LT5wbS5yZXF1ZXN0ZWRfcG93ZXJfc3RhdGUgPSByYWRlb25fcGlja19wb3dlcl9zdGF0ZShyZGV2LCBQT1dFUl9TVEFURV9UWVBFX0RFRkFVTFQpOworCQlyZGV2LT5wbS5yZXF1ZXN0ZWRfY2xvY2tfbW9kZSA9CisJCQlyYWRlb25fcGlja19jbG9ja19tb2RlKHJkZXYsIHJkZXYtPnBtLnJlcXVlc3RlZF9wb3dlcl9zdGF0ZSwgUE9XRVJfTU9ERV9UWVBFX0hJR0gpOworCQlicmVhazsKKwljYXNlIFBNX0FDVElPTl9OT05FOgorCWRlZmF1bHQ6CisJCURSTV9FUlJPUigiUmVxdWVzdGVkIG1vZGUgZm9yIG5vdCBkZWZpbmVkIGFjdGlvblxuIik7CisJCXJldHVybjsKKwl9CisJRFJNX0lORk8oIlJlcXVlc3RlZDogZTogJWQgbTogJWQgcDogJWRcbiIsCisJCSByZGV2LT5wbS5yZXF1ZXN0ZWRfY2xvY2tfbW9kZS0+c2NsaywKKwkJIHJkZXYtPnBtLnJlcXVlc3RlZF9jbG9ja19tb2RlLT5tY2xrLAorCQkgcmRldi0+cG0ucmVxdWVzdGVkX3Bvd2VyX3N0YXRlLT5ub25fY2xvY2tfaW5mby5wY2llX2xhbmVzKTsKK30KKworc3RhdGljIHZvaWQgcmFkZW9uX3NldF9wb3dlcl9zdGF0ZShzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3sKKwkvKiBpZiAqX2Nsb2NrX21vZGUgYXJlIHRoZSBzYW1lLCAqX3Bvd2VyX3N0YXRlIGFyZSBhcyB3ZWxsICovCisJaWYgKHJkZXYtPnBtLnJlcXVlc3RlZF9jbG9ja19tb2RlID09IHJkZXYtPnBtLmN1cnJlbnRfY2xvY2tfbW9kZSkKKwkJcmV0dXJuOworCisJRFJNX0lORk8oIlNldHRpbmc6IGU6ICVkIG06ICVkIHA6ICVkXG4iLAorCQkgcmRldi0+cG0ucmVxdWVzdGVkX2Nsb2NrX21vZGUtPnNjbGssCisJCSByZGV2LT5wbS5yZXF1ZXN0ZWRfY2xvY2tfbW9kZS0+bWNsaywKKwkJIHJkZXYtPnBtLnJlcXVlc3RlZF9wb3dlcl9zdGF0ZS0+bm9uX2Nsb2NrX2luZm8ucGNpZV9sYW5lcyk7CisJLyogc2V0IHBjaWUgbGFuZXMgKi8KKwkvKiBzZXQgdm9sdGFnZSAqLworCS8qIHNldCBlbmdpbmUgY2xvY2sgKi8KKwlyYWRlb25fc2V0X2VuZ2luZV9jbG9jayhyZGV2LCByZGV2LT5wbS5yZXF1ZXN0ZWRfY2xvY2tfbW9kZS0+c2Nsayk7CisJLyogc2V0IG1lbW9yeSBjbG9jayAqLworCisJcmRldi0+cG0uY3VycmVudF9wb3dlcl9zdGF0ZSA9IHJkZXYtPnBtLnJlcXVlc3RlZF9wb3dlcl9zdGF0ZTsKKwlyZGV2LT5wbS5jdXJyZW50X2Nsb2NrX21vZGUgPSByZGV2LT5wbS5yZXF1ZXN0ZWRfY2xvY2tfbW9kZTsKK30KIAogaW50IHJhZGVvbl9wbV9pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogeworCXJkZXYtPnBtLnN0YXRlID0gUE1fU1RBVEVfRElTQUJMRUQ7CisJcmRldi0+cG0ucGxhbm5lZF9hY3Rpb24gPSBQTV9BQ1RJT05fTk9ORTsKKwlyZGV2LT5wbS5kb3duY2xvY2tlZCA9IGZhbHNlOworCisJaWYgKHJkZXYtPmJpb3MpIHsKKwkJaWYgKHJkZXYtPmlzX2F0b21fYmlvcykKKwkJCXJhZGVvbl9hdG9tYmlvc19nZXRfcG93ZXJfbW9kZXMocmRldik7CisJCWVsc2UKKwkJCXJhZGVvbl9jb21iaW9zX2dldF9wb3dlcl9tb2RlcyhyZGV2KTsKKwkJcmFkZW9uX3ByaW50X3Bvd2VyX21vZGVfaW5mbyhyZGV2KTsKKwl9CisKIAlpZiAocmFkZW9uX2RlYnVnZnNfcG1faW5pdChyZGV2KSkgewogCQlEUk1fRVJST1IoIkZhaWxlZCB0byByZWdpc3RlciBkZWJ1Z2ZzIGZpbGUgZm9yIFBNIVxuIik7CiAJfQogCisJSU5JVF9ERUxBWUVEX1dPUksoJnJkZXYtPnBtLmlkbGVfd29yaywgcmFkZW9uX3BtX2lkbGVfd29ya19oYW5kbGVyKTsKKworCWlmIChyYWRlb25fZHlucG0gIT0gLTEgJiYgcmFkZW9uX2R5bnBtKSB7CisJCXJkZXYtPnBtLnN0YXRlID0gUE1fU1RBVEVfUEFVU0VEOworCQlEUk1fSU5GTygicmFkZW9uOiBkeW5hbWljIHBvd2VyIG1hbmFnZW1lbnQgZW5hYmxlZFxuIik7CisJfQorCisJRFJNX0lORk8oInJhZGVvbjogcG93ZXIgbWFuYWdlbWVudCBpbml0aWFsaXplZFxuIik7CisKIAlyZXR1cm4gMDsKIH0KIAordm9pZCByYWRlb25fcG1fY29tcHV0ZV9jbG9ja3Moc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRkZXYgPSByZGV2LT5kZGV2OworCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CisJc3RydWN0IHJhZGVvbl9jcnRjICpyYWRlb25fY3J0YzsKKwlpbnQgY291bnQgPSAwOworCisJaWYgKHJkZXYtPnBtLnN0YXRlID09IFBNX1NUQVRFX0RJU0FCTEVEKQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZyZGV2LT5wbS5tdXRleCk7CisKKwlyZGV2LT5wbS5hY3RpdmVfY3J0Y3MgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY29ubmVjdG9yLAorCQkmZGRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3QsIGhlYWQpIHsKKwkJaWYgKGNvbm5lY3Rvci0+ZW5jb2RlciAmJgorCQkJY29ubmVjdG9yLT5kcG1zICE9IERSTV9NT0RFX0RQTVNfT0ZGKSB7CisJCQlyYWRlb25fY3J0YyA9IHRvX3JhZGVvbl9jcnRjKGNvbm5lY3Rvci0+ZW5jb2Rlci0+Y3J0Yyk7CisJCQlyZGV2LT5wbS5hY3RpdmVfY3J0Y3MgfD0gKDEgPDwgcmFkZW9uX2NydGMtPmNydGNfaWQpOworCQkJKytjb3VudDsKKwkJfQorCX0KKworCWlmIChjb3VudCA+IDEpIHsKKwkJaWYgKHJkZXYtPnBtLnN0YXRlID09IFBNX1NUQVRFX0FDVElWRSkgeworCQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmcmRldi0+cG0uaWRsZV93b3JrKTsKKworCQkJcmRldi0+cG0uc3RhdGUgPSBQTV9TVEFURV9QQVVTRUQ7CisJCQlyZGV2LT5wbS5wbGFubmVkX2FjdGlvbiA9IFBNX0FDVElPTl9VUENMT0NLOworCQkJaWYgKHJkZXYtPnBtLmRvd25jbG9ja2VkKQorCQkJCXJhZGVvbl9wbV9zZXRfY2xvY2tzKHJkZXYpOworCisJCQlEUk1fREVCVUcoInJhZGVvbjogZHluYW1pYyBwb3dlciBtYW5hZ2VtZW50IGRlYWN0aXZhdGVkXG4iKTsKKwkJfQorCX0gZWxzZSBpZiAoY291bnQgPT0gMSkgeworCQkvKiBUT0RPOiBJbmNyZWFzZSBjbG9ja3MgaWYgbmVlZGVkIGZvciBjdXJyZW50IG1vZGUgKi8KKworCQlpZiAocmRldi0+cG0uc3RhdGUgPT0gUE1fU1RBVEVfTUlOSU1VTSkgeworCQkJcmRldi0+cG0uc3RhdGUgPSBQTV9TVEFURV9BQ1RJVkU7CisJCQlyZGV2LT5wbS5wbGFubmVkX2FjdGlvbiA9IFBNX0FDVElPTl9VUENMT0NLOworCQkJcmFkZW9uX3BtX3NldF9jbG9ja3MocmRldik7CisKKwkJCXF1ZXVlX2RlbGF5ZWRfd29yayhyZGV2LT53cSwgJnJkZXYtPnBtLmlkbGVfd29yaywKKwkJCQltc2Vjc190b19qaWZmaWVzKFJBREVPTl9JRExFX0xPT1BfTVMpKTsKKwkJfQorCQllbHNlIGlmIChyZGV2LT5wbS5zdGF0ZSA9PSBQTV9TVEFURV9QQVVTRUQpIHsKKwkJCXJkZXYtPnBtLnN0YXRlID0gUE1fU1RBVEVfQUNUSVZFOworCQkJcXVldWVfZGVsYXllZF93b3JrKHJkZXYtPndxLCAmcmRldi0+cG0uaWRsZV93b3JrLAorCQkJCW1zZWNzX3RvX2ppZmZpZXMoUkFERU9OX0lETEVfTE9PUF9NUykpOworCQkJRFJNX0RFQlVHKCJyYWRlb246IGR5bmFtaWMgcG93ZXIgbWFuYWdlbWVudCBhY3RpdmF0ZWRcbiIpOworCQl9CisJfQorCWVsc2UgeyAvKiBjb3VudCA9PSAwICovCisJCWlmIChyZGV2LT5wbS5zdGF0ZSAhPSBQTV9TVEFURV9NSU5JTVVNKSB7CisJCQljYW5jZWxfZGVsYXllZF93b3JrKCZyZGV2LT5wbS5pZGxlX3dvcmspOworCisJCQlyZGV2LT5wbS5zdGF0ZSA9IFBNX1NUQVRFX01JTklNVU07CisJCQlyZGV2LT5wbS5wbGFubmVkX2FjdGlvbiA9IFBNX0FDVElPTl9NSU5JTVVNOworCQkJcmFkZW9uX3BtX3NldF9jbG9ja3MocmRldik7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJnJkZXYtPnBtLm11dGV4KTsKK30KKworc3RhdGljIGJvb2wgcmFkZW9uX3BtX2RlYnVnX2NoZWNrX2luX3ZibChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgYm9vbCBmaW5pc2gpCit7CisJdTMyIHN0YXRfY3J0YzEgPSAwLCBzdGF0X2NydGMyID0gMDsKKwlib29sIGluX3ZibCA9IHRydWU7CisKKwlpZiAoQVNJQ19JU19BVklWTyhyZGV2KSkgeworCQlpZiAocmRldi0+cG0uYWN0aXZlX2NydGNzICYgKDEgPDwgMCkpIHsKKwkJCXN0YXRfY3J0YzEgPSBSUkVHMzIoRDFDUlRDX1NUQVRVUyk7CisJCQlpZiAoIShzdGF0X2NydGMxICYgMSkpCisJCQkJaW5fdmJsID0gZmFsc2U7CisJCX0KKwkJaWYgKHJkZXYtPnBtLmFjdGl2ZV9jcnRjcyAmICgxIDw8IDEpKSB7CisJCQlzdGF0X2NydGMyID0gUlJFRzMyKEQyQ1JUQ19TVEFUVVMpOworCQkJaWYgKCEoc3RhdF9jcnRjMiAmIDEpKQorCQkJCWluX3ZibCA9IGZhbHNlOworCQl9CisJfQorCWlmIChpbl92YmwgPT0gZmFsc2UpCisJCURSTV9JTkZPKCJub3QgaW4gdmJsIGZvciBwbSBjaGFuZ2UgJTA4eCAlMDh4IGF0ICVzXG4iLCBzdGF0X2NydGMxLAorCQkJIHN0YXRfY3J0YzIsIGZpbmlzaCA/ICJleGl0IiA6ICJlbnRyeSIpOworCXJldHVybiBpbl92Ymw7Cit9CitzdGF0aWMgdm9pZCByYWRlb25fcG1fc2V0X2Nsb2Nrc19sb2NrZWQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit7CisJLypyYWRlb25fZmVuY2Vfd2FpdF9sYXN0KHJkZXYpOyovCisJc3dpdGNoIChyZGV2LT5wbS5wbGFubmVkX2FjdGlvbikgeworCWNhc2UgUE1fQUNUSU9OX1VQQ0xPQ0s6CisJCXJkZXYtPnBtLmRvd25jbG9ja2VkID0gZmFsc2U7CisJCWJyZWFrOworCWNhc2UgUE1fQUNUSU9OX0RPV05DTE9DSzoKKwkJcmRldi0+cG0uZG93bmNsb2NrZWQgPSB0cnVlOworCQlicmVhazsKKwljYXNlIFBNX0FDVElPTl9NSU5JTVVNOgorCQlicmVhazsKKwljYXNlIFBNX0FDVElPTl9OT05FOgorCQlEUk1fRVJST1IoIiVzOiBQTV9BQ1RJT05fTk9ORVxuIiwgX19mdW5jX18pOworCQlicmVhazsKKwl9CisKKwkvKiBjaGVjayBpZiB3ZSBhcmUgaW4gdmJsYW5rICovCisJcmFkZW9uX3BtX2RlYnVnX2NoZWNrX2luX3ZibChyZGV2LCBmYWxzZSk7CisJcmFkZW9uX3NldF9wb3dlcl9zdGF0ZShyZGV2KTsKKwlyYWRlb25fcG1fZGVidWdfY2hlY2tfaW5fdmJsKHJkZXYsIHRydWUpOworCXJkZXYtPnBtLnBsYW5uZWRfYWN0aW9uID0gUE1fQUNUSU9OX05PTkU7Cit9CisKK3N0YXRpYyB2b2lkIHJhZGVvbl9wbV9zZXRfY2xvY2tzKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXJhZGVvbl9nZXRfcG93ZXJfc3RhdGUocmRldiwgcmRldi0+cG0ucGxhbm5lZF9hY3Rpb24pOworCW11dGV4X2xvY2soJnJkZXYtPmNwLm11dGV4KTsKKworCWlmIChyZGV2LT5wbS5hY3RpdmVfY3J0Y3MgJiAoMSA8PCAwKSkgeworCQlyZGV2LT5wbS5yZXFfdmJsYW5rIHw9ICgxIDw8IDApOworCQlkcm1fdmJsYW5rX2dldChyZGV2LT5kZGV2LCAwKTsKKwl9CisJaWYgKHJkZXYtPnBtLmFjdGl2ZV9jcnRjcyAmICgxIDw8IDEpKSB7CisJCXJkZXYtPnBtLnJlcV92YmxhbmsgfD0gKDEgPDwgMSk7CisJCWRybV92YmxhbmtfZ2V0KHJkZXYtPmRkZXYsIDEpOworCX0KKwlpZiAocmRldi0+cG0uYWN0aXZlX2NydGNzKQorCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgKKwkJCXJkZXYtPmlycS52YmxhbmtfcXVldWUsIDAsCisJCQltc2Vjc190b19qaWZmaWVzKFJBREVPTl9XQUlUX1ZCTEFOS19USU1FT1VUKSk7CisJaWYgKHJkZXYtPnBtLnJlcV92YmxhbmsgJiAoMSA8PCAwKSkgeworCQlyZGV2LT5wbS5yZXFfdmJsYW5rICY9IH4oMSA8PCAwKTsKKwkJZHJtX3ZibGFua19wdXQocmRldi0+ZGRldiwgMCk7CisJfQorCWlmIChyZGV2LT5wbS5yZXFfdmJsYW5rICYgKDEgPDwgMSkpIHsKKwkJcmRldi0+cG0ucmVxX3ZibGFuayAmPSB+KDEgPDwgMSk7CisJCWRybV92YmxhbmtfcHV0KHJkZXYtPmRkZXYsIDEpOworCX0KKworCXJhZGVvbl9wbV9zZXRfY2xvY2tzX2xvY2tlZChyZGV2KTsKKwltdXRleF91bmxvY2soJnJkZXYtPmNwLm11dGV4KTsKK30KKworc3RhdGljIHZvaWQgcmFkZW9uX3BtX2lkbGVfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldjsKKwlyZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCByYWRlb25fZGV2aWNlLAorCQkJCXBtLmlkbGVfd29yay53b3JrKTsKKworCW11dGV4X2xvY2soJnJkZXYtPnBtLm11dGV4KTsKKwlpZiAocmRldi0+cG0uc3RhdGUgPT0gUE1fU1RBVEVfQUNUSVZFKSB7CisJCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCQlpbnQgbm90X3Byb2Nlc3NlZCA9IDA7CisKKwkJcmVhZF9sb2NrX2lycXNhdmUoJnJkZXYtPmZlbmNlX2Rydi5sb2NrLCBpcnFfZmxhZ3MpOworCQlpZiAoIWxpc3RfZW1wdHkoJnJkZXYtPmZlbmNlX2Rydi5lbWl0ZWQpKSB7CisJCQlzdHJ1Y3QgbGlzdF9oZWFkICpwdHI7CisJCQlsaXN0X2Zvcl9lYWNoKHB0ciwgJnJkZXYtPmZlbmNlX2Rydi5lbWl0ZWQpIHsKKwkJCQkvKiBjb3VudCB1cCB0byAzLCB0aGF0J3MgZW5vdWdodCBpbmZvICovCisJCQkJaWYgKCsrbm90X3Byb2Nlc3NlZCA+PSAzKQorCQkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZyZGV2LT5mZW5jZV9kcnYubG9jaywgaXJxX2ZsYWdzKTsKKworCQlpZiAobm90X3Byb2Nlc3NlZCA+PSAzKSB7IC8qIHNob3VsZCB1cGNsb2NrICovCisJCQlpZiAocmRldi0+cG0ucGxhbm5lZF9hY3Rpb24gPT0gUE1fQUNUSU9OX0RPV05DTE9DSykgeworCQkJCXJkZXYtPnBtLnBsYW5uZWRfYWN0aW9uID0gUE1fQUNUSU9OX05PTkU7CisJCQl9IGVsc2UgaWYgKHJkZXYtPnBtLnBsYW5uZWRfYWN0aW9uID09IFBNX0FDVElPTl9OT05FICYmCisJCQkJcmRldi0+cG0uZG93bmNsb2NrZWQpIHsKKwkJCQlyZGV2LT5wbS5wbGFubmVkX2FjdGlvbiA9CisJCQkJCVBNX0FDVElPTl9VUENMT0NLOworCQkJCXJkZXYtPnBtLmFjdGlvbl90aW1lb3V0ID0gamlmZmllcyArCisJCQkJbXNlY3NfdG9famlmZmllcyhSQURFT05fUkVDTE9DS19ERUxBWV9NUyk7CisJCQl9CisJCX0gZWxzZSBpZiAobm90X3Byb2Nlc3NlZCA9PSAwKSB7IC8qIHNob3VsZCBkb3duY2xvY2sgKi8KKwkJCWlmIChyZGV2LT5wbS5wbGFubmVkX2FjdGlvbiA9PSBQTV9BQ1RJT05fVVBDTE9DSykgeworCQkJCXJkZXYtPnBtLnBsYW5uZWRfYWN0aW9uID0gUE1fQUNUSU9OX05PTkU7CisJCQl9IGVsc2UgaWYgKHJkZXYtPnBtLnBsYW5uZWRfYWN0aW9uID09IFBNX0FDVElPTl9OT05FICYmCisJCQkJIXJkZXYtPnBtLmRvd25jbG9ja2VkKSB7CisJCQkJcmRldi0+cG0ucGxhbm5lZF9hY3Rpb24gPQorCQkJCQlQTV9BQ1RJT05fRE9XTkNMT0NLOworCQkJCXJkZXYtPnBtLmFjdGlvbl90aW1lb3V0ID0gamlmZmllcyArCisJCQkJbXNlY3NfdG9famlmZmllcyhSQURFT05fUkVDTE9DS19ERUxBWV9NUyk7CisJCQl9CisJCX0KKworCQlpZiAocmRldi0+cG0ucGxhbm5lZF9hY3Rpb24gIT0gUE1fQUNUSU9OX05PTkUgJiYKKwkJICAgIGppZmZpZXMgPiByZGV2LT5wbS5hY3Rpb25fdGltZW91dCkgeworCQkJcmFkZW9uX3BtX3NldF9jbG9ja3MocmRldik7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5wbS5tdXRleCk7CisKKwlxdWV1ZV9kZWxheWVkX3dvcmsocmRldi0+d3EsICZyZGV2LT5wbS5pZGxlX3dvcmssCisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoUkFERU9OX0lETEVfTE9PUF9NUykpOworfQorCiAvKgogICogRGVidWdmcyBpbmZvCiAgKi8KQEAgLTQ0LDExICs0MzYsMTQgQEAKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKIAlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKKwlzZXFfcHJpbnRmKG0sICJzdGF0ZTogJXNcbiIsIHBtX3N0YXRlX25hbWVzW3JkZXYtPnBtLnN0YXRlXSk7CiAJc2VxX3ByaW50ZihtLCAiZGVmYXVsdCBlbmdpbmUgY2xvY2s6ICV1MCBrSHpcbiIsIHJkZXYtPmNsb2NrLmRlZmF1bHRfc2Nsayk7CiAJc2VxX3ByaW50ZihtLCAiY3VycmVudCBlbmdpbmUgY2xvY2s6ICV1MCBrSHpcbiIsIHJhZGVvbl9nZXRfZW5naW5lX2Nsb2NrKHJkZXYpKTsKIAlzZXFfcHJpbnRmKG0sICJkZWZhdWx0IG1lbW9yeSBjbG9jazogJXUwIGtIelxuIiwgcmRldi0+Y2xvY2suZGVmYXVsdF9tY2xrKTsKIAlpZiAocmRldi0+YXNpYy0+Z2V0X21lbW9yeV9jbG9jaykKIAkJc2VxX3ByaW50ZihtLCAiY3VycmVudCBtZW1vcnkgY2xvY2s6ICV1MCBrSHpcbiIsIHJhZGVvbl9nZXRfbWVtb3J5X2Nsb2NrKHJkZXYpKTsKKwlpZiAocmRldi0+YXNpYy0+Z2V0X3BjaWVfbGFuZXMpCisJCXNlcV9wcmludGYobSwgIlBDSUUgbGFuZXM6ICVkXG4iLCByYWRlb25fZ2V0X3BjaWVfbGFuZXMocmRldikpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01OCw3ICs0NTMsNyBAQAogfTsKICNlbmRpZgogCi1pbnQgcmFkZW9uX2RlYnVnZnNfcG1faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3N0YXRpYyBpbnQgcmFkZW9uX2RlYnVnZnNfcG1faW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykKIAlyZXR1cm4gcmFkZW9uX2RlYnVnZnNfYWRkX2ZpbGVzKHJkZXYsIHJhZGVvbl9wbV9pbmZvX2xpc3QsIEFSUkFZX1NJWkUocmFkZW9uX3BtX2luZm9fbGlzdCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmVnLmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaAppbmRleCA2ZDBhMDA5Li41YzBkYzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yZWcuaApAQCAtNTQsNyArNTQsNyBAQAogI2luY2x1ZGUgInIzMDBfcmVnLmgiCiAjaW5jbHVkZSAicjUwMF9yZWcuaCIKICNpbmNsdWRlICJyNjAwX3JlZy5oIgotCisjaW5jbHVkZSAiZXZlcmdyZWVuX3JlZy5oIgogCiAjZGVmaW5lIFJBREVPTl9NQ19BR1BfTE9DQVRJT04JCTB4MDE0YwogI2RlZmluZQkJUkFERU9OX01DX0FHUF9TVEFSVF9NQVNLCTB4MDAwMEZGRkYKQEAgLTEwNjAsMzIgKzEwNjAsMzggQEAKIAogICAgICAgIC8qIE11bHRpbWVkaWEgSTJDIGJ1cyAqLwogI2RlZmluZSBSQURFT05fSTJDX0NOVExfMAkJICAgIDB4MDA5MAotI2RlZmluZSBSQURFT05fSTJDX0RPTkUgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQotI2RlZmluZSBSQURFT05fSTJDX05BQ0sgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQotI2RlZmluZSBSQURFT05fSTJDX0hBTFQgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQotI2RlZmluZSBSQURFT05fSTJDX1NPRlRfUlNUICAgICAgICAgICAgICAgICAoMSA8PCA1KQotI2RlZmluZSBSQURFT05fSTJDX0RSSVZFX0VOICAgICAgICAgICAgICAgICAoMSA8PCA2KQotI2RlZmluZSBSQURFT05fSTJDX0RSSVZFX1NFTCAgICAgICAgICAgICAgICAoMSA8PCA3KQotI2RlZmluZSBSQURFT05fSTJDX1NUQVJUICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQotI2RlZmluZSBSQURFT05fSTJDX1NUT1AgICAgICAgICAgICAgICAgICAgICAoMSA8PCA5KQotI2RlZmluZSBSQURFT05fSTJDX1JFQ0VJVkUgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKLSNkZWZpbmUgUkFERU9OX0kyQ19BQk9SVCAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCi0jZGVmaW5lIFJBREVPTl9JMkNfR08gICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEyKQotI2RlZmluZSBSQURFT05fSTJDX1BSRVNDQUxFX1NISUZUICAgICAgICAgICAxNgorIyAgICAgICBkZWZpbmUgUkFERU9OX0kyQ19ET05FICAgICAgICAgICAgICAoMSA8PCAwKQorIyAgICAgICBkZWZpbmUgUkFERU9OX0kyQ19OQUNLICAgICAgICAgICAgICAoMSA8PCAxKQorIyAgICAgICBkZWZpbmUgUkFERU9OX0kyQ19IQUxUICAgICAgICAgICAgICAoMSA8PCAyKQorIyAgICAgICBkZWZpbmUgUkFERU9OX0kyQ19TT0ZUX1JTVCAgICAgICAgICAoMSA8PCA1KQorIyAgICAgICBkZWZpbmUgUkFERU9OX0kyQ19EUklWRV9FTiAgICAgICAgICAoMSA8PCA2KQorIyAgICAgICBkZWZpbmUgUkFERU9OX0kyQ19EUklWRV9TRUwgICAgICAgICAoMSA8PCA3KQorIyAgICAgICBkZWZpbmUgUkFERU9OX0kyQ19TVEFSVCAgICAgICAgICAgICAoMSA8PCA4KQorIyAgICAgICBkZWZpbmUgUkFERU9OX0kyQ19TVE9QICAgICAgICAgICAgICAoMSA8PCA5KQorIyAgICAgICBkZWZpbmUgUkFERU9OX0kyQ19SRUNFSVZFICAgICAgICAgICAoMSA8PCAxMCkKKyMgICAgICAgZGVmaW5lIFJBREVPTl9JMkNfQUJPUlQgICAgICAgICAgICAgKDEgPDwgMTEpCisjICAgICAgIGRlZmluZSBSQURFT05fSTJDX0dPICAgICAgICAgICAgICAgICgxIDw8IDEyKQorIyAgICAgICBkZWZpbmUgUkFERU9OX0kyQ19QUkVTQ0FMRV9TSElGVCAgICAxNgogI2RlZmluZSBSQURFT05fSTJDX0NOVExfMSAgICAgICAgICAgICAgICAgICAweDAwOTQKLSNkZWZpbmUgUkFERU9OX0kyQ19EQVRBX0NPVU5UX1NISUZUICAgICAgICAgMAotI2RlZmluZSBSQURFT05fSTJDX0FERFJfQ09VTlRfU0hJRlQgICAgICAgICA0Ci0jZGVmaW5lIFJBREVPTl9JMkNfSU5UUkFfQllURV9ERUxBWV9TSElGVCAgIDgKLSNkZWZpbmUgUkFERU9OX0kyQ19TRUwgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTYpCi0jZGVmaW5lIFJBREVPTl9JMkNfRU4gICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE3KQotI2RlZmluZSBSQURFT05fSTJDX1RJTUVfTElNSVRfU0hJRlQgICAgICAgICAyNAorIyAgICAgICBkZWZpbmUgUkFERU9OX0kyQ19EQVRBX0NPVU5UX1NISUZUICAwCisjICAgICAgIGRlZmluZSBSQURFT05fSTJDX0FERFJfQ09VTlRfU0hJRlQgIDQKKyMgICAgICAgZGVmaW5lIFJBREVPTl9JMkNfSU5UUkFfQllURV9ERUxBWV9TSElGVCAgIDgKKyMgICAgICAgZGVmaW5lIFJBREVPTl9JMkNfU0VMICAgICAgICAgICAgICAgKDEgPDwgMTYpCisjICAgICAgIGRlZmluZSBSQURFT05fSTJDX0VOICAgICAgICAgICAgICAgICgxIDw8IDE3KQorIyAgICAgICBkZWZpbmUgUkFERU9OX0kyQ19USU1FX0xJTUlUX1NISUZUICAyNAogI2RlZmluZSBSQURFT05fSTJDX0RBVEEJCQkgICAgMHgwMDk4CiAKICNkZWZpbmUgUkFERU9OX0RWSV9JMkNfQ05UTF8wCQkgICAgMHgwMmUwCiAjICAgICAgIGRlZmluZSBSMjAwX0RWSV9JMkNfUElOX1NFTCh4KSAgICAgICgoeCkgPDwgMykKLSMgICAgICAgZGVmaW5lIFIyMDBfU0VMX0REQzEgICAgICAgICAgICAgICAgMCAvKiAweDYwIC0gVkdBX0REQyAqLwotIyAgICAgICBkZWZpbmUgUjIwMF9TRUxfRERDMiAgICAgICAgICAgICAgICAxIC8qIDB4NjQgLSBEVklfRERDICovCi0jICAgICAgIGRlZmluZSBSMjAwX1NFTF9EREMzICAgICAgICAgICAgICAgIDIgLyogMHg2OCAtIE1PTklEX0REQyAqLworIyAgICAgICBkZWZpbmUgUjIwMF9TRUxfRERDMSAgICAgICAgICAgICAgICAwIC8qIGRlcGVuZHMgb24gYXNpYyAqLworIyAgICAgICBkZWZpbmUgUjIwMF9TRUxfRERDMiAgICAgICAgICAgICAgICAxIC8qIGRlcGVuZHMgb24gYXNpYyAqLworIyAgICAgICBkZWZpbmUgUjIwMF9TRUxfRERDMyAgICAgICAgICAgICAgICAyIC8qIGRlcGVuZHMgb24gYXNpYyAqLworIwlkZWZpbmUgUkFERU9OX1NXX1dBTlRTX1RPX1VTRV9EVklfSTJDICgxIDw8IDEzKQorIwlkZWZpbmUgUkFERU9OX1NXX0NBTl9VU0VfRFZJX0kyQyAgICAgICgxIDw8IDEzKQorIwlkZWZpbmUgUkFERU9OX1NXX0RPTkVfVVNJTkdfRFZJX0kyQyAgICgxIDw8IDE0KQorIwlkZWZpbmUgUkFERU9OX0hXX05FRURTX0RWSV9JMkMgICAgICAgICgxIDw8IDE0KQorIwlkZWZpbmUgUkFERU9OX0FCT1JUX0hXX0RWSV9JMkMgICAgICAgICgxIDw8IDE1KQorIwlkZWZpbmUgUkFERU9OX0hXX1VTSU5HX0RWSV9JMkMgICAgICAgICgxIDw8IDE1KQogI2RlZmluZSBSQURFT05fRFZJX0kyQ19DTlRMXzEgICAgICAgICAgICAgICAweDAyZTQKICNkZWZpbmUgUkFERU9OX0RWSV9JMkNfREFUQQkJICAgIDB4MDJlOAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yaW5nLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9yaW5nLmMKaW5kZXggNjU3OWViNC4uZTUwNTEzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fcmluZy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3JpbmcuYwpAQCAtMzQsNiArMzQsMzYgQEAKIAogaW50IHJhZGVvbl9kZWJ1Z2ZzX2liX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCit2b2lkIHJhZGVvbl9pYl9ib2d1c19jbGVhbnVwKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQoreworCXN0cnVjdCByYWRlb25faWIgKmliLCAqbjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpYiwgbiwgJnJkZXYtPmliX3Bvb2wuYm9ndXNfaWIsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmliLT5saXN0KTsKKwkJdmZyZWUoaWItPnB0cik7CisJCWtmcmVlKGliKTsKKwl9Cit9CisKK3ZvaWQgcmFkZW9uX2liX2JvZ3VzX2FkZChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwgc3RydWN0IHJhZGVvbl9pYiAqaWIpCit7CisJc3RydWN0IHJhZGVvbl9pYiAqYmliOworCisJYmliID0ga21hbGxvYyhzaXplb2YoKmJpYiksIEdGUF9LRVJORUwpOworCWlmIChiaWIgPT0gTlVMTCkKKwkJcmV0dXJuOworCWJpYi0+cHRyID0gdm1hbGxvYyhpYi0+bGVuZ3RoX2R3ICogNCk7CisJaWYgKGJpYi0+cHRyID09IE5VTEwpIHsKKwkJa2ZyZWUoYmliKTsKKwkJcmV0dXJuOworCX0KKwltZW1jcHkoYmliLT5wdHIsIGliLT5wdHIsIGliLT5sZW5ndGhfZHcgKiA0KTsKKwliaWItPmxlbmd0aF9kdyA9IGliLT5sZW5ndGhfZHc7CisJbXV0ZXhfbG9jaygmcmRldi0+aWJfcG9vbC5tdXRleCk7CisJbGlzdF9hZGRfdGFpbCgmYmliLT5saXN0LCAmcmRldi0+aWJfcG9vbC5ib2d1c19pYik7CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKK30KKwogLyoKICAqIElCLgogICovCkBAIC0xNDIsNiArMTcyLDcgQEAKIAogCWlmIChyZGV2LT5pYl9wb29sLnJvYmopCiAJCXJldHVybiAwOworCUlOSVRfTElTVF9IRUFEKCZyZGV2LT5pYl9wb29sLmJvZ3VzX2liKTsKIAkvKiBBbGxvY2F0ZSAxTSBvYmplY3QgYnVmZmVyICovCiAJciA9IHJhZGVvbl9ib19jcmVhdGUocmRldiwgTlVMTCwgIFJBREVPTl9JQl9QT09MX1NJWkUqNjQqMTAyNCwKIAkJCQl0cnVlLCBSQURFT05fR0VNX0RPTUFJTl9HVFQsCkBAIC0xOTIsNiArMjIzLDggQEAKIAkJcmV0dXJuOwogCX0KIAltdXRleF9sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKKwlyYWRlb25faWJfYm9ndXNfY2xlYW51cChyZGV2KTsKKwogCWlmIChyZGV2LT5pYl9wb29sLnJvYmopIHsKIAkJciA9IHJhZGVvbl9ib19yZXNlcnZlKHJkZXYtPmliX3Bvb2wucm9iaiwgZmFsc2UpOwogCQlpZiAobGlrZWx5KHIgPT0gMCkpIHsKQEAgLTM0OSwxNSArMzgyLDQ5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgcmFkZW9uX2RlYnVnZnNfaWJfYm9ndXNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiA9IG5vZGUtPmluZm9fZW50LT5kYXRhOworCXN0cnVjdCByYWRlb25faWIgKmliOworCXVuc2lnbmVkIGk7CisKKwltdXRleF9sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKKwlpZiAobGlzdF9lbXB0eSgmcmRldi0+aWJfcG9vbC5ib2d1c19pYikpIHsKKwkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKKwkJc2VxX3ByaW50ZihtLCAibm8gYm9ndXMgSUIgcmVjb3JkZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWIgPSBsaXN0X2ZpcnN0X2VudHJ5KCZyZGV2LT5pYl9wb29sLmJvZ3VzX2liLCBzdHJ1Y3QgcmFkZW9uX2liLCBsaXN0KTsKKwlsaXN0X2RlbF9pbml0KCZpYi0+bGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZyZGV2LT5pYl9wb29sLm11dGV4KTsKKwlzZXFfcHJpbnRmKG0sICJJQiBzaXplICUwNXUgZHdvcmRzXG4iLCBpYi0+bGVuZ3RoX2R3KTsKKwlmb3IgKGkgPSAwOyBpIDwgaWItPmxlbmd0aF9kdzsgaSsrKSB7CisJCXNlcV9wcmludGYobSwgIlslMDV1XT0weCUwOFhcbiIsIGksIGliLT5wdHJbaV0pOworCX0KKwl2ZnJlZShpYi0+cHRyKTsKKwlrZnJlZShpYik7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZHJtX2luZm9fbGlzdCByYWRlb25fZGVidWdmc19pYl9saXN0W1JBREVPTl9JQl9QT09MX1NJWkVdOwogc3RhdGljIGNoYXIgcmFkZW9uX2RlYnVnZnNfaWJfbmFtZXNbUkFERU9OX0lCX1BPT0xfU0laRV1bMzJdOworCitzdGF0aWMgc3RydWN0IGRybV9pbmZvX2xpc3QgcmFkZW9uX2RlYnVnZnNfaWJfYm9ndXNfaW5mb19saXN0W10gPSB7CisJeyJyYWRlb25faWJfYm9ndXMiLCByYWRlb25fZGVidWdmc19pYl9ib2d1c19pbmZvLCAwLCBOVUxMfSwKK307CiAjZW5kaWYKIAogaW50IHJhZGVvbl9kZWJ1Z2ZzX2liX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfREVCVUdfRlMpCiAJdW5zaWduZWQgaTsKKwlpbnQgcjsKIAorCXJhZGVvbl9kZWJ1Z2ZzX2liX2JvZ3VzX2luZm9fbGlzdFswXS5kYXRhID0gcmRldjsKKwlyID0gcmFkZW9uX2RlYnVnZnNfYWRkX2ZpbGVzKHJkZXYsIHJhZGVvbl9kZWJ1Z2ZzX2liX2JvZ3VzX2luZm9fbGlzdCwgMSk7CisJaWYgKHIpCisJCXJldHVybiByOwogCWZvciAoaSA9IDA7IGkgPCBSQURFT05fSUJfUE9PTF9TSVpFOyBpKyspIHsKIAkJc3ByaW50ZihyYWRlb25fZGVidWdmc19pYl9uYW1lc1tpXSwgInJhZGVvbl9pYl8lMDR1IiwgaSk7CiAJCXJhZGVvbl9kZWJ1Z2ZzX2liX2xpc3RbaV0ubmFtZSA9IHJhZGVvbl9kZWJ1Z2ZzX2liX25hbWVzW2ldOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3N0YXRlLmMKaW5kZXggMDY3MTY3Yy4uNDBhYjZkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jCkBAIC0yOSw2ICsyOSw3IEBACiAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAiZHJtLmgiCisjaW5jbHVkZSAiZHJtX2J1ZmZlci5oIgogI2luY2x1ZGUgImRybV9zYXJlYS5oIgogI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKICNpbmNsdWRlICJyYWRlb25fZHJ2LmgiCkBAIC05MSwyMSArOTIsMjcgQEAKIHN0YXRpYyBfX2lubGluZV9fIGludCByYWRlb25fY2hlY2tfYW5kX2ZpeHVwX3BhY2tldHMoZHJtX3JhZGVvbl9wcml2YXRlX3QgKgogCQkJCQkJICAgICBkZXZfcHJpdiwKIAkJCQkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCi0JCQkJCQkgICAgIGludCBpZCwgdTMyICpkYXRhKQorCQkJCQkJICAgICBpbnQgaWQsIHN0cnVjdCBkcm1fYnVmZmVyICpidWYpCiB7CisJdTMyICpkYXRhOwogCXN3aXRjaCAoaWQpIHsKIAogCWNhc2UgUkFERU9OX0VNSVRfUFBfTUlTQzoKLQkJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KGRldl9wcml2LCBmaWxlX3ByaXYsCi0JCSAgICAmZGF0YVsoUkFERU9OX1JCM0RfREVQVEhPRkZTRVQgLSBSQURFT05fUFBfTUlTQykgLyA0XSkpIHsKKwkJZGF0YSA9IGRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChidWYsCisJCQkoUkFERU9OX1JCM0RfREVQVEhPRkZTRVQgLSBSQURFT05fUFBfTUlTQykgLyA0KTsKKworCQlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoZGV2X3ByaXYsIGZpbGVfcHJpdiwgZGF0YSkpIHsKIAkJCURSTV9FUlJPUigiSW52YWxpZCBkZXB0aCBidWZmZXIgb2Zmc2V0XG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CisJCWRldl9wcml2LT5oYXZlX3pfb2Zmc2V0ID0gMTsKIAkJYnJlYWs7CiAKIAljYXNlIFJBREVPTl9FTUlUX1BQX0NOVEw6Ci0JCWlmIChyYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldChkZXZfcHJpdiwgZmlsZV9wcml2LAotCQkgICAgJmRhdGFbKFJBREVPTl9SQjNEX0NPTE9ST0ZGU0VUIC0gUkFERU9OX1BQX0NOVEwpIC8gNF0pKSB7CisJCWRhdGEgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoYnVmLAorCQkJKFJBREVPTl9SQjNEX0NPTE9ST0ZGU0VUIC0gUkFERU9OX1BQX0NOVEwpIC8gNCk7CisKKwkJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KGRldl9wcml2LCBmaWxlX3ByaXYsIGRhdGEpKSB7CiAJCQlEUk1fRVJST1IoIkludmFsaWQgY29sb3VyIGJ1ZmZlciBvZmZzZXRcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTExNyw4ICsxMjQsOCBAQAogCWNhc2UgUjIwMF9FTUlUX1BQX1RYT0ZGU0VUXzM6CiAJY2FzZSBSMjAwX0VNSVRfUFBfVFhPRkZTRVRfNDoKIAljYXNlIFIyMDBfRU1JVF9QUF9UWE9GRlNFVF81OgotCQlpZiAocmFkZW9uX2NoZWNrX2FuZF9maXh1cF9vZmZzZXQoZGV2X3ByaXYsIGZpbGVfcHJpdiwKLQkJCQkJCSAgJmRhdGFbMF0pKSB7CisJCWRhdGEgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoYnVmLCAwKTsKKwkJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KGRldl9wcml2LCBmaWxlX3ByaXYsIGRhdGEpKSB7CiAJCQlEUk1fRVJST1IoIkludmFsaWQgUjIwMCB0ZXh0dXJlIG9mZnNldFxuIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQpAQCAtMTI3LDggKzEzNCw5IEBACiAJY2FzZSBSQURFT05fRU1JVF9QUF9UWEZJTFRFUl8wOgogCWNhc2UgUkFERU9OX0VNSVRfUFBfVFhGSUxURVJfMToKIAljYXNlIFJBREVPTl9FTUlUX1BQX1RYRklMVEVSXzI6Ci0JCWlmIChyYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldChkZXZfcHJpdiwgZmlsZV9wcml2LAotCQkgICAgJmRhdGFbKFJBREVPTl9QUF9UWE9GRlNFVF8wIC0gUkFERU9OX1BQX1RYRklMVEVSXzApIC8gNF0pKSB7CisJCWRhdGEgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoYnVmLAorCQkJKFJBREVPTl9QUF9UWE9GRlNFVF8wIC0gUkFERU9OX1BQX1RYRklMVEVSXzApIC8gNCk7CisJCWlmIChyYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldChkZXZfcHJpdiwgZmlsZV9wcml2LCBkYXRhKSkgewogCQkJRFJNX0VSUk9SKCJJbnZhbGlkIFIxMDAgdGV4dHVyZSBvZmZzZXRcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KQEAgLTE0Miw5ICsxNTAsMTAgQEAKIAljYXNlIFIyMDBfRU1JVF9QUF9DVUJJQ19PRkZTRVRTXzU6ewogCQkJaW50IGk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCQkJZGF0YSA9IGRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChidWYsIGkpOwogCQkJCWlmIChyYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldChkZXZfcHJpdiwKIAkJCQkJCQkJICBmaWxlX3ByaXYsCi0JCQkJCQkJCSAgJmRhdGFbaV0pKSB7CisJCQkJCQkJCSAgZGF0YSkpIHsKIAkJCQkJRFJNX0VSUk9SCiAJCQkJCSAgICAoIkludmFsaWQgUjIwMCBjdWJpYyB0ZXh0dXJlIG9mZnNldFxuIik7CiAJCQkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTU4LDkgKzE2NywxMCBAQAogCWNhc2UgUkFERU9OX0VNSVRfUFBfQ1VCSUNfT0ZGU0VUU19UMjp7CiAJCQlpbnQgaTsKIAkJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJCQlkYXRhID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGJ1ZiwgaSk7CiAJCQkJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KGRldl9wcml2LAogCQkJCQkJCQkgIGZpbGVfcHJpdiwKLQkJCQkJCQkJICAmZGF0YVtpXSkpIHsKKwkJCQkJCQkJICBkYXRhKSkgewogCQkJCQlEUk1fRVJST1IKIAkJCQkJICAgICgiSW52YWxpZCBSMTAwIGN1YmljIHRleHR1cmUgb2Zmc2V0XG4iKTsKIAkJCQkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNjksMjMgKzI3OSwyNCBAQAogCQkJCQkJICAgICBjbWRidWYsCiAJCQkJCQkgICAgIHVuc2lnbmVkIGludCAqY21kc3opCiB7Ci0JdTMyICpjbWQgPSAodTMyICopIGNtZGJ1Zi0+YnVmOworCXUzMiAqY21kID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCAwKTsKIAl1MzIgb2Zmc2V0LCBuYXJyYXlzOwogCWludCBjb3VudCwgaSwgazsKIAotCSpjbWRzeiA9IDIgKyAoKGNtZFswXSAmIFJBREVPTl9DUF9QQUNLRVRfQ09VTlRfTUFTSykgPj4gMTYpOworCWNvdW50ID0gKCgqY21kICYgUkFERU9OX0NQX1BBQ0tFVF9DT1VOVF9NQVNLKSA+PiAxNik7CisJKmNtZHN6ID0gMiArIGNvdW50OwogCi0JaWYgKChjbWRbMF0gJiAweGMwMDAwMDAwKSAhPSBSQURFT05fQ1BfUEFDS0VUMykgeworCWlmICgoKmNtZCAmIDB4YzAwMDAwMDApICE9IFJBREVPTl9DUF9QQUNLRVQzKSB7CiAJCURSTV9FUlJPUigiTm90IGEgdHlwZSAzIHBhY2tldFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICg0ICogKmNtZHN6ID4gY21kYnVmLT5idWZzeikgeworCWlmICg0ICogKmNtZHN6ID4gZHJtX2J1ZmZlcl91bnByb2Nlc3NlZChjbWRidWYtPmJ1ZmZlcikpIHsKIAkJRFJNX0VSUk9SKCJQYWNrZXQgc2l6ZSBsYXJnZXIgdGhhbiBzaXplIG9mIGRhdGEgcHJvdmlkZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlzd2l0Y2goY21kWzBdICYgMHhmZjAwKSB7CisJc3dpdGNoICgqY21kICYgMHhmZjAwKSB7CiAJLyogWFhYIEFyZSB0aGVyZSBvbGQgZHJpdmVycyBuZWVkaW5nIG90aGVyIHBhY2tldHM/ICovCiAKIAljYXNlIFJBREVPTl8zRF9EUkFXX0lNTUQ6CkBAIC0zMTIsNyArMzIzLDYgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFJBREVPTl8zRF9MT0FEX1ZCUE5UUjoKLQkJY291bnQgPSAoY21kWzBdID4+IDE2KSAmIDB4M2ZmZjsKIAogCQlpZiAoY291bnQgPiAxOCkgeyAvKiAxMiBhcnJheXMgbWF4ICovCiAJCQlEUk1fRVJST1IoIlRvbyBsYXJnZSBwYXlsb2FkIGluIDNEX0xPQURfVkJQTlRSIChjb3VudD0lZClcbiIsCkBAIC0zMjEsMTMgKzMzMSwxNiBAQAogCQl9CiAKIAkJLyogY2FyZWZ1bGx5IGNoZWNrIHBhY2tldCBjb250ZW50cyAqLwotCQluYXJyYXlzID0gY21kWzFdICYgfjB4YzAwMDsKKwkJY21kID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCAxKTsKKworCQluYXJyYXlzID0gKmNtZCAmIH4weGMwMDA7CiAJCWsgPSAwOwogCQlpID0gMjsKIAkJd2hpbGUgKChrIDwgbmFycmF5cykgJiYgKGkgPCAoY291bnQgKyAyKSkpIHsKIAkJCWkrKzsJCS8qIHNraXAgYXR0cmlidXRlIGZpZWxkICovCisJCQljbWQgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoY21kYnVmLT5idWZmZXIsIGkpOwogCQkJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KGRldl9wcml2LCBmaWxlX3ByaXYsCi0JCQkJCQkJICAmY21kW2ldKSkgeworCQkJCQkJCSAgY21kKSkgewogCQkJCURSTV9FUlJPUgogCQkJCSAgICAoIkludmFsaWQgb2Zmc2V0IChrPSVkIGk9JWQpIGluIDNEX0xPQURfVkJQTlRSIHBhY2tldC5cbiIsCiAJCQkJICAgICBrLCBpKTsKQEAgLTMzOCw4ICszNTEsMTAgQEAKIAkJCWlmIChrID09IG5hcnJheXMpCiAJCQkJYnJlYWs7CiAJCQkvKiBoYXZlIG9uZSBtb3JlIHRvIHByb2Nlc3MsIHRoZXkgY29tZSBpbiBwYWlycyAqLworCQkJY21kID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCBpKTsKKwogCQkJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KGRldl9wcml2LAotCQkJCQkJCSAgZmlsZV9wcml2LCAmY21kW2ldKSkKKwkJCQkJCQkgIGZpbGVfcHJpdiwgY21kKSkKIAkJCXsKIAkJCQlEUk1fRVJST1IKIAkJCQkgICAgKCJJbnZhbGlkIG9mZnNldCAoaz0lZCBpPSVkKSBpbiAzRF9MT0FEX1ZCUE5UUiBwYWNrZXQuXG4iLApAQCAtMzYzLDcgKzM3OCw5IEBACiAJCQlEUk1fRVJST1IoIkludmFsaWQgM2QgcGFja2V0IGZvciByMjAwLWNsYXNzIGNoaXBcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KGRldl9wcml2LCBmaWxlX3ByaXYsICZjbWRbMV0pKSB7CisKKwkJY21kID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCAxKTsKKwkJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KGRldl9wcml2LCBmaWxlX3ByaXYsIGNtZCkpIHsKIAkJCQlEUk1fRVJST1IoIkludmFsaWQgcm5kcl9nZW5faW5keCBvZmZzZXRcbiIpOwogCQkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC0zNzQsMTIgKzM5MSwxNSBAQAogCQkJRFJNX0VSUk9SKCJJbnZhbGlkIDNkIHBhY2tldCBmb3IgcjEwMC1jbGFzcyBjaGlwXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlmICgoY21kWzFdICYgMHg4MDAwZmZmZikgIT0gMHg4MDAwMDgxMCkgewotCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGluZHhfYnVmZmVyIHJlZyBhZGRyZXNzICUwOFhcbiIsIGNtZFsxXSk7CisKKwkJY21kID0gZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2R3b3JkKGNtZGJ1Zi0+YnVmZmVyLCAxKTsKKwkJaWYgKCgqY21kICYgMHg4MDAwZmZmZikgIT0gMHg4MDAwMDgxMCkgeworCQkJRFJNX0VSUk9SKCJJbnZhbGlkIGluZHhfYnVmZmVyIHJlZyBhZGRyZXNzICUwOFhcbiIsICpjbWQpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfb2Zmc2V0KGRldl9wcml2LCBmaWxlX3ByaXYsICZjbWRbMl0pKSB7Ci0JCQlEUk1fRVJST1IoIkludmFsaWQgaW5keF9idWZmZXIgb2Zmc2V0IGlzICUwOFhcbiIsIGNtZFsyXSk7CisJCWNtZCA9IGRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChjbWRidWYtPmJ1ZmZlciwgMik7CisJCWlmIChyYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldChkZXZfcHJpdiwgZmlsZV9wcml2LCBjbWQpKSB7CisJCQlEUk1fRVJST1IoIkludmFsaWQgaW5keF9idWZmZXIgb2Zmc2V0IGlzICUwOFhcbiIsICpjbWQpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYnJlYWs7CkBAIC0zODgsMzEgKzQwOCwzNCBAQAogCWNhc2UgUkFERU9OX0NOVExfUEFJTlRfTVVMVEk6CiAJY2FzZSBSQURFT05fQ05UTF9CSVRCTFRfTVVMVEk6CiAJCS8qIE1TQiBvZiBvcGNvZGU6IG5leHQgRFdPUkQgR1VJX0NOVEwgKi8KLQkJaWYgKGNtZFsxXSAmIChSQURFT05fR01DX1NSQ19QSVRDSF9PRkZTRVRfQ05UTAorCQljbWQgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoY21kYnVmLT5idWZmZXIsIDEpOworCQlpZiAoKmNtZCAmIChSQURFT05fR01DX1NSQ19QSVRDSF9PRkZTRVRfQ05UTAogCQkJICAgICAgfCBSQURFT05fR01DX0RTVF9QSVRDSF9PRkZTRVRfQ05UTCkpIHsKLQkJCW9mZnNldCA9IGNtZFsyXSA8PCAxMDsKKwkJCXUzMiAqY21kMiA9IGRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChjbWRidWYtPmJ1ZmZlciwgMik7CisJCQlvZmZzZXQgPSAqY21kMiA8PCAxMDsKIAkJCWlmIChyYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldAogCQkJICAgIChkZXZfcHJpdiwgZmlsZV9wcml2LCAmb2Zmc2V0KSkgewogCQkJCURSTV9FUlJPUigiSW52YWxpZCBmaXJzdCBwYWNrZXQgb2Zmc2V0XG4iKTsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KLQkJCWNtZFsyXSA9IChjbWRbMl0gJiAweGZmYzAwMDAwKSB8IG9mZnNldCA+PiAxMDsKKwkJCSpjbWQyID0gKCpjbWQyICYgMHhmZmMwMDAwMCkgfCBvZmZzZXQgPj4gMTA7CiAJCX0KIAotCQlpZiAoKGNtZFsxXSAmIFJBREVPTl9HTUNfU1JDX1BJVENIX09GRlNFVF9DTlRMKSAmJgotCQkgICAgKGNtZFsxXSAmIFJBREVPTl9HTUNfRFNUX1BJVENIX09GRlNFVF9DTlRMKSkgewotCQkJb2Zmc2V0ID0gY21kWzNdIDw8IDEwOworCQlpZiAoKCpjbWQgJiBSQURFT05fR01DX1NSQ19QSVRDSF9PRkZTRVRfQ05UTCkgJiYKKwkJICAgICgqY21kICYgUkFERU9OX0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwpKSB7CisJCQl1MzIgKmNtZDMgPSBkcm1fYnVmZmVyX3BvaW50ZXJfdG9fZHdvcmQoY21kYnVmLT5idWZmZXIsIDMpOworCQkJb2Zmc2V0ID0gKmNtZCA8PCAxMDsKIAkJCWlmIChyYWRlb25fY2hlY2tfYW5kX2ZpeHVwX29mZnNldAogCQkJICAgIChkZXZfcHJpdiwgZmlsZV9wcml2LCAmb2Zmc2V0KSkgewogCQkJCURSTV9FUlJPUigiSW52YWxpZCBzZWNvbmQgcGFja2V0IG9mZnNldFxuIik7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9Ci0JCQljbWRbM10gPSAoY21kWzNdICYgMHhmZmMwMDAwMCkgfCBvZmZzZXQgPj4gMTA7CisJCQkqY21kMyA9ICgqY21kMyAmIDB4ZmZjMDAwMDApIHwgb2Zmc2V0ID4+IDEwOwogCQl9CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJRFJNX0VSUk9SKCJJbnZhbGlkIHBhY2tldCB0eXBlICV4XG4iLCBjbWRbMF0gJiAweGZmMDApOworCQlEUk1fRVJST1IoIkludmFsaWQgcGFja2V0IHR5cGUgJXhcbiIsICpjbWQgJiAweGZmMDApOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTg3Niw2ICs4OTksMTEgQEAKIAkJaWYgKHRtcCAmIFJBREVPTl9CQUNLKQogCQkJZmxhZ3MgfD0gUkFERU9OX0ZST05UOwogCX0KKwlpZiAoZmxhZ3MgJiAoUkFERU9OX0RFUFRIfFJBREVPTl9TVEVOQ0lMKSkgeworCQlpZiAoIWRldl9wcml2LT5oYXZlX3pfb2Zmc2V0KQorCQkJcHJpbnRrX29uY2UoS0VSTl9FUlIgInJhZGVvbjogaWxsZWdhbCBkZXB0aCBjbGVhciByZXF1ZXN0LiBCdWdneSBtZXNhIGRldGVjdGVkIC0gcGxlYXNlIHVwZGF0ZS5cbiIpOworCQlmbGFncyAmPSB+KFJBREVPTl9ERVBUSCB8IFJBREVPTl9TVEVOQ0lMKTsKKwl9CiAKIAlpZiAoZmxhZ3MgJiAoUkFERU9OX0ZST05UIHwgUkFERU9OX0JBQ0spKSB7CiAKQEAgLTEwNjUsNyArMTA5Myw3IEBACiAJCQkJCS8qIGp1ZGdpbmcgYnkgdGhlIGZpcnN0IHRpbGUgb2Zmc2V0IG5lZWRlZCwgY291bGQgcG9zc2libHkKIAkJCQkJICAgZGlyZWN0bHkgYWRkcmVzcy9jbGVhciA0eDQgdGlsZXMgaW5zdGVhZCBvZiA4eDIgKiA0eDQKIAkJCQkJICAgbWFjcm8gdGlsZXMsIHRob3VnaCB3b3VsZCBzdGlsbCBuZWVkIGNsZWFyIG1hc2sgZm9yCi0JCQkJCSAgIHJpZ2h0L2JvdHRvbSBpZiB0cnVlbHkgNHg0IGdyYW51bGFyaXR5IGlzIGRlc2lyZWQgPyAqLworCQkJCQkgICByaWdodC9ib3R0b20gaWYgdHJ1bHkgNHg0IGdyYW51bGFyaXR5IGlzIGRlc2lyZWQgPyAqLwogCQkJCQlPVVRfUklORyh0aWxlb2Zmc2V0ICogMTYpOwogCQkJCQkvKiB0aGUgbnVtYmVyIG9mIHRpbGVzIHRvIGNsZWFyICovCiAJCQkJCU9VVF9SSU5HKG5ydGlsZXN4ICsgMSk7CkBAIC0yNjExLDcgKzI2MzksNiBAQAogewogCWludCBpZCA9IChpbnQpaGVhZGVyLnBhY2tldC5wYWNrZXRfaWQ7CiAJaW50IHN6LCByZWc7Ci0JaW50ICpkYXRhID0gKGludCAqKWNtZGJ1Zi0+YnVmOwogCVJJTkdfTE9DQUxTOwogCiAJaWYgKGlkID49IFJBREVPTl9NQVhfU1RBVEVfUEFDS0VUUykKQEAgLTI2MjAsMjMgKzI2NDcsMjIgQEAKIAlzeiA9IHBhY2tldFtpZF0ubGVuOwogCXJlZyA9IHBhY2tldFtpZF0uc3RhcnQ7CiAKLQlpZiAoc3ogKiBzaXplb2YoaW50KSA+IGNtZGJ1Zi0+YnVmc3opIHsKKwlpZiAoc3ogKiBzaXplb2YodTMyKSA+IGRybV9idWZmZXJfdW5wcm9jZXNzZWQoY21kYnVmLT5idWZmZXIpKSB7CiAJCURSTV9FUlJPUigiUGFja2V0IHNpemUgcHJvdmlkZWQgbGFyZ2VyIHRoYW4gZGF0YSBwcm92aWRlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChyYWRlb25fY2hlY2tfYW5kX2ZpeHVwX3BhY2tldHMoZGV2X3ByaXYsIGZpbGVfcHJpdiwgaWQsIGRhdGEpKSB7CisJaWYgKHJhZGVvbl9jaGVja19hbmRfZml4dXBfcGFja2V0cyhkZXZfcHJpdiwgZmlsZV9wcml2LCBpZCwKKwkJCQljbWRidWYtPmJ1ZmZlcikpIHsKIAkJRFJNX0VSUk9SKCJQYWNrZXQgdmVyaWZpY2F0aW9uIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCUJFR0lOX1JJTkcoc3ogKyAxKTsKIAlPVVRfUklORyhDUF9QQUNLRVQwKHJlZywgKHN6IC0gMSkpKTsKLQlPVVRfUklOR19UQUJMRShkYXRhLCBzeik7CisJT1VUX1JJTkdfRFJNX0JVRkZFUihjbWRidWYtPmJ1ZmZlciwgc3opOwogCUFEVkFOQ0VfUklORygpOwogCi0JY21kYnVmLT5idWYgKz0gc3ogKiBzaXplb2YoaW50KTsKLQljbWRidWYtPmJ1ZnN6IC09IHN6ICogc2l6ZW9mKGludCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI2NTMsMTAgKzI2NzksOCBAQAogCU9VVF9SSU5HKENQX1BBQ0tFVDAoUkFERU9OX1NFX1RDTF9TQ0FMQVJfSU5EWF9SRUcsIDApKTsKIAlPVVRfUklORyhzdGFydCB8IChzdHJpZGUgPDwgUkFERU9OX1NDQUxfSU5EWF9EV09SRF9TVFJJREVfU0hJRlQpKTsKIAlPVVRfUklORyhDUF9QQUNLRVQwX1RBQkxFKFJBREVPTl9TRV9UQ0xfU0NBTEFSX0RBVEFfUkVHLCBzeiAtIDEpKTsKLQlPVVRfUklOR19UQUJMRShjbWRidWYtPmJ1Ziwgc3opOworCU9VVF9SSU5HX0RSTV9CVUZGRVIoY21kYnVmLT5idWZmZXIsIHN6KTsKIAlBRFZBTkNFX1JJTkcoKTsKLQljbWRidWYtPmJ1ZiArPSBzeiAqIHNpemVvZihpbnQpOwotCWNtZGJ1Zi0+YnVmc3ogLT0gc3ogKiBzaXplb2YoaW50KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjY3NSwxMCArMjY5OSw4IEBACiAJT1VUX1JJTkcoQ1BfUEFDS0VUMChSQURFT05fU0VfVENMX1NDQUxBUl9JTkRYX1JFRywgMCkpOwogCU9VVF9SSU5HKHN0YXJ0IHwgKHN0cmlkZSA8PCBSQURFT05fU0NBTF9JTkRYX0RXT1JEX1NUUklERV9TSElGVCkpOwogCU9VVF9SSU5HKENQX1BBQ0tFVDBfVEFCTEUoUkFERU9OX1NFX1RDTF9TQ0FMQVJfREFUQV9SRUcsIHN6IC0gMSkpOwotCU9VVF9SSU5HX1RBQkxFKGNtZGJ1Zi0+YnVmLCBzeik7CisJT1VUX1JJTkdfRFJNX0JVRkZFUihjbWRidWYtPmJ1ZmZlciwgc3opOwogCUFEVkFOQ0VfUklORygpOwotCWNtZGJ1Zi0+YnVmICs9IHN6ICogc2l6ZW9mKGludCk7Ci0JY21kYnVmLT5idWZzeiAtPSBzeiAqIHNpemVvZihpbnQpOwogCXJldHVybiAwOwogfQogCkBAIC0yNjk2LDExICsyNzE4LDkgQEAKIAlPVVRfUklORyhDUF9QQUNLRVQwKFJBREVPTl9TRV9UQ0xfVkVDVE9SX0lORFhfUkVHLCAwKSk7CiAJT1VUX1JJTkcoc3RhcnQgfCAoc3RyaWRlIDw8IFJBREVPTl9WRUNfSU5EWF9PQ1RXT1JEX1NUUklERV9TSElGVCkpOwogCU9VVF9SSU5HKENQX1BBQ0tFVDBfVEFCTEUoUkFERU9OX1NFX1RDTF9WRUNUT1JfREFUQV9SRUcsIChzeiAtIDEpKSk7Ci0JT1VUX1JJTkdfVEFCTEUoY21kYnVmLT5idWYsIHN6KTsKKwlPVVRfUklOR19EUk1fQlVGRkVSKGNtZGJ1Zi0+YnVmZmVyLCBzeik7CiAJQURWQU5DRV9SSU5HKCk7CiAKLQljbWRidWYtPmJ1ZiArPSBzeiAqIHNpemVvZihpbnQpOwotCWNtZGJ1Zi0+YnVmc3ogLT0gc3ogKiBzaXplb2YoaW50KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjcxNCw3ICsyNzM0LDcgQEAKIAogICAgICAgICBpZiAoIXN6KQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBpZiAoc3ogKiA0ID4gY21kYnVmLT5idWZzeikKKwlpZiAoc3ogKiA0ID4gZHJtX2J1ZmZlcl91bnByb2Nlc3NlZChjbWRidWYtPmJ1ZmZlcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CiAKIAlCRUdJTl9SSU5HKDUgKyBzeik7CkBAIC0yNzIyLDExICsyNzQyLDkgQEAKIAlPVVRfUklORyhDUF9QQUNLRVQwKFJBREVPTl9TRV9UQ0xfVkVDVE9SX0lORFhfUkVHLCAwKSk7CiAJT1VUX1JJTkcoc3RhcnQgfCAoMSA8PCBSQURFT05fVkVDX0lORFhfT0NUV09SRF9TVFJJREVfU0hJRlQpKTsKIAlPVVRfUklORyhDUF9QQUNLRVQwX1RBQkxFKFJBREVPTl9TRV9UQ0xfVkVDVE9SX0RBVEFfUkVHLCAoc3ogLSAxKSkpOwotCU9VVF9SSU5HX1RBQkxFKGNtZGJ1Zi0+YnVmLCBzeik7CisJT1VUX1JJTkdfRFJNX0JVRkZFUihjbWRidWYtPmJ1ZmZlciwgc3opOwogCUFEVkFOQ0VfUklORygpOwogCi0JY21kYnVmLT5idWYgKz0gc3ogKiBzaXplb2YoaW50KTsKLQljbWRidWYtPmJ1ZnN6IC09IHN6ICogc2l6ZW9mKGludCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3NDgsMTEgKzI3NjYsOSBAQAogCX0KIAogCUJFR0lOX1JJTkcoY21kc3opOwotCU9VVF9SSU5HX1RBQkxFKGNtZGJ1Zi0+YnVmLCBjbWRzeik7CisJT1VUX1JJTkdfRFJNX0JVRkZFUihjbWRidWYtPmJ1ZmZlciwgY21kc3opOwogCUFEVkFOQ0VfUklORygpOwogCi0JY21kYnVmLT5idWYgKz0gY21kc3ogKiA0OwotCWNtZGJ1Zi0+YnVmc3ogLT0gY21kc3ogKiA0OwogCXJldHVybiAwOwogfQogCkBAIC0yODA1LDE2ICsyODIxLDE2IEBACiAJCX0KIAogCQlCRUdJTl9SSU5HKGNtZHN6KTsKLQkJT1VUX1JJTkdfVEFCTEUoY21kYnVmLT5idWYsIGNtZHN6KTsKKwkJT1VUX1JJTkdfRFJNX0JVRkZFUihjbWRidWYtPmJ1ZmZlciwgY21kc3opOwogCQlBRFZBTkNFX1JJTkcoKTsKIAogCX0gd2hpbGUgKCsraSA8IGNtZGJ1Zi0+bmJveCk7CiAJaWYgKGNtZGJ1Zi0+bmJveCA9PSAxKQogCQljbWRidWYtPm5ib3ggPSAwOwogCisJcmV0dXJuIDA7CiAgICAgICBvdXQ6Ci0JY21kYnVmLT5idWYgKz0gY21kc3ogKiA0OwotCWNtZGJ1Zi0+YnVmc3ogLT0gY21kc3ogKiA0OworCWRybV9idWZmZXJfYWR2YW5jZShjbWRidWYtPmJ1ZmZlciwgY21kc3ogKiA0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjg0NywxNiArMjg2MywxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHJhZGVvbl9jcF9jbWRidWYoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCitzdGF0aWMgaW50IHJhZGVvbl9jcF9jbWRidWYoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKKwkJc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2RldmljZV9kbWEgKmRtYSA9IGRldi0+ZG1hOwogCXN0cnVjdCBkcm1fYnVmICpidWYgPSBOVUxMOworCWRybV9yYWRlb25fY21kX2hlYWRlcl90IHN0YWNrX2hlYWRlcjsKIAlpbnQgaWR4OwogCWRybV9yYWRlb25fa2NtZF9idWZmZXJfdCAqY21kYnVmID0gZGF0YTsKLQlkcm1fcmFkZW9uX2NtZF9oZWFkZXJfdCBoZWFkZXI7Ci0JaW50IG9yaWdfbmJveCwgb3JpZ19idWZzejsKLQljaGFyICprYnVmID0gTlVMTDsKKwlpbnQgb3JpZ19uYm94OwogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKIApAQCAtMjg3MSwxNyArMjg4NywxNiBAQAogCSAqIHJhY2VzIGJldHdlZW4gY2hlY2tpbmcgdmFsdWVzIGFuZCB1c2luZyB0aG9zZSB2YWx1ZXMgaW4gb3RoZXIgY29kZSwKIAkgKiBhbmQgc2ltcGx5IHRvIGF2b2lkIGEgbG90IG9mIGZ1bmN0aW9uIGNhbGxzIHRvIGNvcHkgaW4gZGF0YS4KIAkgKi8KLQlvcmlnX2J1ZnN6ID0gY21kYnVmLT5idWZzejsKLQlpZiAob3JpZ19idWZzeiAhPSAwKSB7Ci0JCWtidWYgPSBrbWFsbG9jKGNtZGJ1Zi0+YnVmc3osIEdGUF9LRVJORUwpOwotCQlpZiAoa2J1ZiA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWlmIChEUk1fQ09QWV9GUk9NX1VTRVIoa2J1ZiwgKHZvaWQgX191c2VyICopY21kYnVmLT5idWYsCi0JCQkJICAgICAgIGNtZGJ1Zi0+YnVmc3opKSB7Ci0JCQlrZnJlZShrYnVmKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JCWNtZGJ1Zi0+YnVmID0ga2J1ZjsKKwlpZiAoY21kYnVmLT5idWZzeiAhPSAwKSB7CisJCWludCBydjsKKwkJdm9pZCBfX3VzZXIgKmJ1ZmZlciA9IGNtZGJ1Zi0+YnVmZmVyOworCQlydiA9IGRybV9idWZmZXJfYWxsb2MoJmNtZGJ1Zi0+YnVmZmVyLCBjbWRidWYtPmJ1ZnN6KTsKKwkJaWYgKHJ2KQorCQkJcmV0dXJuIHJ2OworCQlydiA9IGRybV9idWZmZXJfY29weV9mcm9tX3VzZXIoY21kYnVmLT5idWZmZXIsIGJ1ZmZlciwKKwkJCQkJCWNtZGJ1Zi0+YnVmc3opOworCQlpZiAocnYpCisJCQlyZXR1cm4gcnY7CiAJfQogCiAJb3JpZ19uYm94ID0gY21kYnVmLT5uYm94OwpAQCAtMjg5MCwyNCArMjkwNSwyNCBAQAogCQlpbnQgdGVtcDsKIAkJdGVtcCA9IHIzMDBfZG9fY3BfY21kYnVmKGRldiwgZmlsZV9wcml2LCBjbWRidWYpOwogCi0JCWlmIChvcmlnX2J1ZnN6ICE9IDApCi0JCQlrZnJlZShrYnVmKTsKKwkJaWYgKGNtZGJ1Zi0+YnVmc3ogIT0gMCkKKwkJCWRybV9idWZmZXJfZnJlZShjbWRidWYtPmJ1ZmZlcik7CiAKIAkJcmV0dXJuIHRlbXA7CiAJfQogCiAJLyogbWljcm9jb2RlX3ZlcnNpb24gIT0gcjMwMCAqLwotCXdoaWxlIChjbWRidWYtPmJ1ZnN6ID49IHNpemVvZihoZWFkZXIpKSB7CisJd2hpbGUgKGRybV9idWZmZXJfdW5wcm9jZXNzZWQoY21kYnVmLT5idWZmZXIpID49IHNpemVvZihzdGFja19oZWFkZXIpKSB7CiAKLQkJaGVhZGVyLmkgPSAqKGludCAqKWNtZGJ1Zi0+YnVmOwotCQljbWRidWYtPmJ1ZiArPSBzaXplb2YoaGVhZGVyKTsKLQkJY21kYnVmLT5idWZzeiAtPSBzaXplb2YoaGVhZGVyKTsKKwkJZHJtX3JhZGVvbl9jbWRfaGVhZGVyX3QgKmhlYWRlcjsKKwkJaGVhZGVyID0gZHJtX2J1ZmZlcl9yZWFkX29iamVjdChjbWRidWYtPmJ1ZmZlciwKKwkJCQlzaXplb2Yoc3RhY2tfaGVhZGVyKSwgJnN0YWNrX2hlYWRlcik7CiAKLQkJc3dpdGNoIChoZWFkZXIuaGVhZGVyLmNtZF90eXBlKSB7CisJCXN3aXRjaCAoaGVhZGVyLT5oZWFkZXIuY21kX3R5cGUpIHsKIAkJY2FzZSBSQURFT05fQ01EX1BBQ0tFVDoKIAkJCURSTV9ERUJVRygiUkFERU9OX0NNRF9QQUNLRVRcbiIpOwogCQkJaWYgKHJhZGVvbl9lbWl0X3BhY2tldHMKLQkJCSAgICAoZGV2X3ByaXYsIGZpbGVfcHJpdiwgaGVhZGVyLCBjbWRidWYpKSB7CisJCQkgICAgKGRldl9wcml2LCBmaWxlX3ByaXYsICpoZWFkZXIsIGNtZGJ1ZikpIHsKIAkJCQlEUk1fRVJST1IoInJhZGVvbl9lbWl0X3BhY2tldHMgZmFpbGVkXG4iKTsKIAkJCQlnb3RvIGVycjsKIAkJCX0KQEAgLTI5MTUsNyArMjkzMCw3IEBACiAKIAkJY2FzZSBSQURFT05fQ01EX1NDQUxBUlM6CiAJCQlEUk1fREVCVUcoIlJBREVPTl9DTURfU0NBTEFSU1xuIik7Ci0JCQlpZiAocmFkZW9uX2VtaXRfc2NhbGFycyhkZXZfcHJpdiwgaGVhZGVyLCBjbWRidWYpKSB7CisJCQlpZiAocmFkZW9uX2VtaXRfc2NhbGFycyhkZXZfcHJpdiwgKmhlYWRlciwgY21kYnVmKSkgewogCQkJCURSTV9FUlJPUigicmFkZW9uX2VtaXRfc2NhbGFycyBmYWlsZWRcbiIpOwogCQkJCWdvdG8gZXJyOwogCQkJfQpAQCAtMjkyMyw3ICsyOTM4LDcgQEAKIAogCQljYXNlIFJBREVPTl9DTURfVkVDVE9SUzoKIAkJCURSTV9ERUJVRygiUkFERU9OX0NNRF9WRUNUT1JTXG4iKTsKLQkJCWlmIChyYWRlb25fZW1pdF92ZWN0b3JzKGRldl9wcml2LCBoZWFkZXIsIGNtZGJ1ZikpIHsKKwkJCWlmIChyYWRlb25fZW1pdF92ZWN0b3JzKGRldl9wcml2LCAqaGVhZGVyLCBjbWRidWYpKSB7CiAJCQkJRFJNX0VSUk9SKCJyYWRlb25fZW1pdF92ZWN0b3JzIGZhaWxlZFxuIik7CiAJCQkJZ290byBlcnI7CiAJCQl9CkBAIC0yOTMxLDcgKzI5NDYsNyBAQAogCiAJCWNhc2UgUkFERU9OX0NNRF9ETUFfRElTQ0FSRDoKIAkJCURSTV9ERUJVRygiUkFERU9OX0NNRF9ETUFfRElTQ0FSRFxuIik7Ci0JCQlpZHggPSBoZWFkZXIuZG1hLmJ1Zl9pZHg7CisJCQlpZHggPSBoZWFkZXItPmRtYS5idWZfaWR4OwogCQkJaWYgKGlkeCA8IDAgfHwgaWR4ID49IGRtYS0+YnVmX2NvdW50KSB7CiAJCQkJRFJNX0VSUk9SKCJidWZmZXIgaW5kZXggJWQgKG9mICVkIG1heClcbiIsCiAJCQkJCSAgaWR4LCBkbWEtPmJ1Zl9jb3VudCAtIDEpOwpAQCAtMjk2OCw3ICsyOTgzLDcgQEAKIAogCQljYXNlIFJBREVPTl9DTURfU0NBTEFSUzI6CiAJCQlEUk1fREVCVUcoIlJBREVPTl9DTURfU0NBTEFSUzJcbiIpOwotCQkJaWYgKHJhZGVvbl9lbWl0X3NjYWxhcnMyKGRldl9wcml2LCBoZWFkZXIsIGNtZGJ1ZikpIHsKKwkJCWlmIChyYWRlb25fZW1pdF9zY2FsYXJzMihkZXZfcHJpdiwgKmhlYWRlciwgY21kYnVmKSkgewogCQkJCURSTV9FUlJPUigicmFkZW9uX2VtaXRfc2NhbGFyczIgZmFpbGVkXG4iKTsKIAkJCQlnb3RvIGVycjsKIAkJCX0KQEAgLTI5NzYsMzcgKzI5OTEsMzcgQEAKIAogCQljYXNlIFJBREVPTl9DTURfV0FJVDoKIAkJCURSTV9ERUJVRygiUkFERU9OX0NNRF9XQUlUXG4iKTsKLQkJCWlmIChyYWRlb25fZW1pdF93YWl0KGRldiwgaGVhZGVyLndhaXQuZmxhZ3MpKSB7CisJCQlpZiAocmFkZW9uX2VtaXRfd2FpdChkZXYsIGhlYWRlci0+d2FpdC5mbGFncykpIHsKIAkJCQlEUk1fRVJST1IoInJhZGVvbl9lbWl0X3dhaXQgZmFpbGVkXG4iKTsKIAkJCQlnb3RvIGVycjsKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIFJBREVPTl9DTURfVkVDTElORUFSOgogCQkJRFJNX0RFQlVHKCJSQURFT05fQ01EX1ZFQ0xJTkVBUlxuIik7Ci0JCQlpZiAocmFkZW9uX2VtaXRfdmVjbGluZWFyKGRldl9wcml2LCBoZWFkZXIsIGNtZGJ1ZikpIHsKKwkJCWlmIChyYWRlb25fZW1pdF92ZWNsaW5lYXIoZGV2X3ByaXYsICpoZWFkZXIsIGNtZGJ1ZikpIHsKIAkJCQlEUk1fRVJST1IoInJhZGVvbl9lbWl0X3ZlY2xpbmVhciBmYWlsZWRcbiIpOwogCQkJCWdvdG8gZXJyOwogCQkJfQogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCURSTV9FUlJPUigiYmFkIGNtZF90eXBlICVkIGF0ICVwXG4iLAotCQkJCSAgaGVhZGVyLmhlYWRlci5jbWRfdHlwZSwKLQkJCQkgIGNtZGJ1Zi0+YnVmIC0gc2l6ZW9mKGhlYWRlcikpOworCQkJRFJNX0VSUk9SKCJiYWQgY21kX3R5cGUgJWQgYXQgYnl0ZSAlZFxuIiwKKwkJCQkgIGhlYWRlci0+aGVhZGVyLmNtZF90eXBlLAorCQkJCSAgY21kYnVmLT5idWZmZXItPml0ZXJhdG9yKTsKIAkJCWdvdG8gZXJyOwogCQl9CiAJfQogCi0JaWYgKG9yaWdfYnVmc3ogIT0gMCkKLQkJa2ZyZWUoa2J1Zik7CisJaWYgKGNtZGJ1Zi0+YnVmc3ogIT0gMCkKKwkJZHJtX2J1ZmZlcl9mcmVlKGNtZGJ1Zi0+YnVmZmVyKTsKIAogCURSTV9ERUJVRygiRE9ORVxuIik7CiAJQ09NTUlUX1JJTkcoKTsKIAlyZXR1cm4gMDsKIAogICAgICAgZXJyOgotCWlmIChvcmlnX2J1ZnN6ICE9IDApCi0JCWtmcmVlKGtidWYpOworCWlmIChjbWRidWYtPmJ1ZnN6ICE9IDApCisJCWRybV9idWZmZXJfZnJlZShjbWRidWYtPmJ1ZmZlcik7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3Rlc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3Rlc3QuYwppbmRleCA5ZjVlMmY5Li4zMTNjOTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl90ZXN0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdGVzdC5jCkBAIC0xODYsNyArMTg2LDcgQEAKIAkJcmFkZW9uX2JvX2t1bm1hcChndHRfb2JqW2ldKTsKIAogCQlEUk1fSU5GTygiVGVzdGVkIEdUVC0+VlJBTSBhbmQgVlJBTS0+R1RUIGNvcHkgZm9yIEdUVCBvZmZzZXQgMHglbGx4XG4iLAotCQkJIGd0dF9hZGRyIC0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uKTsKKwkJCSBndHRfYWRkciAtIHJkZXYtPm1jLmd0dF9zdGFydCk7CiAJfQogCiBvdXRfY2xlYW51cDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3R0bS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKaW5kZXggNThiNWFkZi4uNDNjNWFiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fdHRtLmMKQEAgLTE1MCw3ICsxNTAsNyBAQAogCQltYW4tPmRlZmF1bHRfY2FjaGluZyA9IFRUTV9QTF9GTEFHX0NBQ0hFRDsKIAkJYnJlYWs7CiAJY2FzZSBUVE1fUExfVFQ6Ci0JCW1hbi0+Z3B1X29mZnNldCA9IHJkZXYtPm1jLmd0dF9sb2NhdGlvbjsKKwkJbWFuLT5ncHVfb2Zmc2V0ID0gcmRldi0+bWMuZ3R0X3N0YXJ0OwogCQltYW4tPmF2YWlsYWJsZV9jYWNoaW5nID0gVFRNX1BMX01BU0tfQ0FDSElORzsKIAkJbWFuLT5kZWZhdWx0X2NhY2hpbmcgPSBUVE1fUExfRkxBR19DQUNIRUQ7CiAJCW1hbi0+ZmxhZ3MgPSBUVE1fTUVNVFlQRV9GTEFHX01BUFBBQkxFIHwgVFRNX01FTVRZUEVfRkxBR19DTUE7CkBAIC0xODAsNyArMTgwLDcgQEAKIAkJYnJlYWs7CiAJY2FzZSBUVE1fUExfVlJBTToKIAkJLyogIk9uLWNhcmQiIHZpZGVvIHJhbSAqLwotCQltYW4tPmdwdV9vZmZzZXQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOworCQltYW4tPmdwdV9vZmZzZXQgPSByZGV2LT5tYy52cmFtX3N0YXJ0OwogCQltYW4tPmZsYWdzID0gVFRNX01FTVRZUEVfRkxBR19GSVhFRCB8CiAJCQkgICAgIFRUTV9NRU1UWVBFX0ZMQUdfTkVFRFNfSU9SRU1BUCB8CiAJCQkgICAgIFRUTV9NRU1UWVBFX0ZMQUdfTUFQUEFCTEU7CkBAIC0yNjIsMTAgKzI2MiwxMCBAQAogCiAJc3dpdGNoIChvbGRfbWVtLT5tZW1fdHlwZSkgewogCWNhc2UgVFRNX1BMX1ZSQU06Ci0JCW9sZF9zdGFydCArPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOworCQlvbGRfc3RhcnQgKz0gcmRldi0+bWMudnJhbV9zdGFydDsKIAkJYnJlYWs7CiAJY2FzZSBUVE1fUExfVFQ6Ci0JCW9sZF9zdGFydCArPSByZGV2LT5tYy5ndHRfbG9jYXRpb247CisJCW9sZF9zdGFydCArPSByZGV2LT5tYy5ndHRfc3RhcnQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCURSTV9FUlJPUigiVW5rbm93biBwbGFjZW1lbnQgJWRcbiIsIG9sZF9tZW0tPm1lbV90eXBlKTsKQEAgLTI3MywxMCArMjczLDEwIEBACiAJfQogCXN3aXRjaCAobmV3X21lbS0+bWVtX3R5cGUpIHsKIAljYXNlIFRUTV9QTF9WUkFNOgotCQluZXdfc3RhcnQgKz0gcmRldi0+bWMudnJhbV9sb2NhdGlvbjsKKwkJbmV3X3N0YXJ0ICs9IHJkZXYtPm1jLnZyYW1fc3RhcnQ7CiAJCWJyZWFrOwogCWNhc2UgVFRNX1BMX1RUOgotCQluZXdfc3RhcnQgKz0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uOworCQluZXdfc3RhcnQgKz0gcmRldi0+bWMuZ3R0X3N0YXJ0OwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlEUk1fRVJST1IoIlVua25vd24gcGxhY2VtZW50ICVkXG4iLCBvbGRfbWVtLT5tZW1fdHlwZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I2MDAgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JlZ19zcmNzL3I2MDAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY0MTRhNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmVnX3NyY3MvcjYwMApAQCAtMCwwICsxLDgzNyBAQAorcjYwMCAweDk0MDAKKzB4MDAwMjg3QTAgUjd4eF9DQl9TSEFERVJfQ09OVFJPTAorMHgwMDAyODIzMCBSN3h4X1BBX1NDX0VER0VSVUxFCisweDAwMDI4NkM4IFI3eHhfU1BJX1RIUkVBRF9HUk9VUElORworMHgwMDAwOEQ4QyBSN3h4X1NRX0RZTl9HUFJfQ05UTF9QU19GTFVTSF9SRVEKKzB4MDAwMDg4QzQgVkdUX0NBQ0hFX0lOVkFMSURBVElPTgorMHgwMDAyOEE1MCBWR1RfRU5IQU5DRQorMHgwMDAwODhDQyBWR1RfRVNfUEVSX0dTCisweDAwMDI4QTJDIFZHVF9HUk9VUF9ERUNSCisweDAwMDI4QTI4IFZHVF9HUk9VUF9GSVJTVF9ERUNSCisweDAwMDI4QTI0IFZHVF9HUk9VUF9QUklNX1RZUEUKKzB4MDAwMjhBMzAgVkdUX0dST1VQX1ZFQ1RfMF9DTlRMCisweDAwMDI4QTM4IFZHVF9HUk9VUF9WRUNUXzBfRk1UX0NOVEwKKzB4MDAwMjhBMzQgVkdUX0dST1VQX1ZFQ1RfMV9DTlRMCisweDAwMDI4QTNDIFZHVF9HUk9VUF9WRUNUXzFfRk1UX0NOVEwKKzB4MDAwMjhBNDAgVkdUX0dTX01PREUKKzB4MDAwMjhBNkMgVkdUX0dTX09VVF9QUklNX1RZUEUKKzB4MDAwMDg4QzggVkdUX0dTX1BFUl9FUworMHgwMDAwODhFOCBWR1RfR1NfUEVSX1ZTCisweDAwMDA4OEQ0IFZHVF9HU19WRVJURVhfUkVVU0UKKzB4MDAwMjhBMTQgVkdUX0hPU19DTlRMCisweDAwMDI4QTE4IFZHVF9IT1NfTUFYX1RFU1NfTEVWRUwKKzB4MDAwMjhBMUMgVkdUX0hPU19NSU5fVEVTU19MRVZFTAorMHgwMDAyOEEyMCBWR1RfSE9TX1JFVVNFX0RFUFRICisweDAwMDA4OTVDIFZHVF9JTkRFWF9UWVBFCisweDAwMDI4NDA4IFZHVF9JTkRYX09GRlNFVAorMHgwMDAyOEFBMCBWR1RfSU5TVEFOQ0VfU1RFUF9SQVRFXzAKKzB4MDAwMjhBQTQgVkdUX0lOU1RBTkNFX1NURVBfUkFURV8xCisweDAwMDA4OEMwIFZHVF9MQVNUX0NPUFlfU1RBVEUKKzB4MDAwMjg0MDAgVkdUX01BWF9WVFhfSU5EWAorMHgwMDAwODhEOCBWR1RfTUNfTEFUX0NOVEwKKzB4MDAwMjg0MDQgVkdUX01JTl9WVFhfSU5EWAorMHgwMDAyOEE5NCBWR1RfTVVMVElfUFJJTV9JQl9SRVNFVF9FTgorMHgwMDAyODQwQyBWR1RfTVVMVElfUFJJTV9JQl9SRVNFVF9JTkRYCisweDAwMDA4OTcwIFZHVF9OVU1fSU5ESUNFUworMHgwMDAwODk3NCBWR1RfTlVNX0lOU1RBTkNFUworMHgwMDAyOEExMCBWR1RfT1VUUFVUX1BBVEhfQ05UTAorMHgwMDAyOEM1QyBWR1RfT1VUX0RFQUxMT0NfQ05UTAorMHgwMDAyOEE4NCBWR1RfUFJJTUlUSVZFSURfRU4KKzB4MDAwMDg5NTggVkdUX1BSSU1JVElWRV9UWVBFCisweDAwMDI4QUI0IFZHVF9SRVVTRV9PRkYKKzB4MDAwMjhDNTggVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMCisweDAwMDI4QUI4IFZHVF9WVFhfQ05UX0VOCisweDAwMDA4OEIwIFZHVF9WVFhfVkVDVF9FSkVDVF9SRUcKKzB4MDAwMjg4MTAgUEFfQ0xfQ0xJUF9DTlRMCisweDAwMDA4QTE0IFBBX0NMX0VOSEFOQ0UKKzB4MDAwMjhDMTQgUEFfQ0xfR0JfSE9SWl9DTElQX0FESgorMHgwMDAyOEMxOCBQQV9DTF9HQl9IT1JaX0RJU0NfQURKCisweDAwMDI4QzBDIFBBX0NMX0dCX1ZFUlRfQ0xJUF9BREoKKzB4MDAwMjhDMTAgUEFfQ0xfR0JfVkVSVF9ESVNDX0FESgorMHgwMDAyODgyMCBQQV9DTF9OQU5JTkZfQ05UTAorMHgwMDAyOEUxQyBQQV9DTF9QT0lOVF9DVUxMX1JBRAorMHgwMDAyOEUxOCBQQV9DTF9QT0lOVF9TSVpFCisweDAwMDI4RTEwIFBBX0NMX1BPSU5UX1hfUkFECisweDAwMDI4RTE0IFBBX0NMX1BPSU5UX1lfUkFECisweDAwMDI4RTJDIFBBX0NMX1VDUF8wX1cKKzB4MDAwMjhFM0MgUEFfQ0xfVUNQXzFfVworMHgwMDAyOEU0QyBQQV9DTF9VQ1BfMl9XCisweDAwMDI4RTVDIFBBX0NMX1VDUF8zX1cKKzB4MDAwMjhFNkMgUEFfQ0xfVUNQXzRfVworMHgwMDAyOEU3QyBQQV9DTF9VQ1BfNV9XCisweDAwMDI4RTIwIFBBX0NMX1VDUF8wX1gKKzB4MDAwMjhFMzAgUEFfQ0xfVUNQXzFfWAorMHgwMDAyOEU0MCBQQV9DTF9VQ1BfMl9YCisweDAwMDI4RTUwIFBBX0NMX1VDUF8zX1gKKzB4MDAwMjhFNjAgUEFfQ0xfVUNQXzRfWAorMHgwMDAyOEU3MCBQQV9DTF9VQ1BfNV9YCisweDAwMDI4RTI0IFBBX0NMX1VDUF8wX1kKKzB4MDAwMjhFMzQgUEFfQ0xfVUNQXzFfWQorMHgwMDAyOEU0NCBQQV9DTF9VQ1BfMl9ZCisweDAwMDI4RTU0IFBBX0NMX1VDUF8zX1kKKzB4MDAwMjhFNjQgUEFfQ0xfVUNQXzRfWQorMHgwMDAyOEU3NCBQQV9DTF9VQ1BfNV9ZCisweDAwMDI4RTI4IFBBX0NMX1VDUF8wX1oKKzB4MDAwMjhFMzggUEFfQ0xfVUNQXzFfWgorMHgwMDAyOEU0OCBQQV9DTF9VQ1BfMl9aCisweDAwMDI4RTU4IFBBX0NMX1VDUF8zX1oKKzB4MDAwMjhFNjggUEFfQ0xfVUNQXzRfWgorMHgwMDAyOEU3OCBQQV9DTF9VQ1BfNV9aCisweDAwMDI4NDQwIFBBX0NMX1ZQT1JUX1hPRkZTRVRfMAorMHgwMDAyODQ1OCBQQV9DTF9WUE9SVF9YT0ZGU0VUXzEKKzB4MDAwMjg0NzAgUEFfQ0xfVlBPUlRfWE9GRlNFVF8yCisweDAwMDI4NDg4IFBBX0NMX1ZQT1JUX1hPRkZTRVRfMworMHgwMDAyODRBMCBQQV9DTF9WUE9SVF9YT0ZGU0VUXzQKKzB4MDAwMjg0QjggUEFfQ0xfVlBPUlRfWE9GRlNFVF81CisweDAwMDI4NEQwIFBBX0NMX1ZQT1JUX1hPRkZTRVRfNgorMHgwMDAyODRFOCBQQV9DTF9WUE9SVF9YT0ZGU0VUXzcKKzB4MDAwMjg1MDAgUEFfQ0xfVlBPUlRfWE9GRlNFVF84CisweDAwMDI4NTE4IFBBX0NMX1ZQT1JUX1hPRkZTRVRfOQorMHgwMDAyODUzMCBQQV9DTF9WUE9SVF9YT0ZGU0VUXzEwCisweDAwMDI4NTQ4IFBBX0NMX1ZQT1JUX1hPRkZTRVRfMTEKKzB4MDAwMjg1NjAgUEFfQ0xfVlBPUlRfWE9GRlNFVF8xMgorMHgwMDAyODU3OCBQQV9DTF9WUE9SVF9YT0ZGU0VUXzEzCisweDAwMDI4NTkwIFBBX0NMX1ZQT1JUX1hPRkZTRVRfMTQKKzB4MDAwMjg1QTggUEFfQ0xfVlBPUlRfWE9GRlNFVF8xNQorMHgwMDAyODQzQyBQQV9DTF9WUE9SVF9YU0NBTEVfMAorMHgwMDAyODQ1NCBQQV9DTF9WUE9SVF9YU0NBTEVfMQorMHgwMDAyODQ2QyBQQV9DTF9WUE9SVF9YU0NBTEVfMgorMHgwMDAyODQ4NCBQQV9DTF9WUE9SVF9YU0NBTEVfMworMHgwMDAyODQ5QyBQQV9DTF9WUE9SVF9YU0NBTEVfNAorMHgwMDAyODRCNCBQQV9DTF9WUE9SVF9YU0NBTEVfNQorMHgwMDAyODRDQyBQQV9DTF9WUE9SVF9YU0NBTEVfNgorMHgwMDAyODRFNCBQQV9DTF9WUE9SVF9YU0NBTEVfNworMHgwMDAyODRGQyBQQV9DTF9WUE9SVF9YU0NBTEVfOAorMHgwMDAyODUxNCBQQV9DTF9WUE9SVF9YU0NBTEVfOQorMHgwMDAyODUyQyBQQV9DTF9WUE9SVF9YU0NBTEVfMTAKKzB4MDAwMjg1NDQgUEFfQ0xfVlBPUlRfWFNDQUxFXzExCisweDAwMDI4NTVDIFBBX0NMX1ZQT1JUX1hTQ0FMRV8xMgorMHgwMDAyODU3NCBQQV9DTF9WUE9SVF9YU0NBTEVfMTMKKzB4MDAwMjg1OEMgUEFfQ0xfVlBPUlRfWFNDQUxFXzE0CisweDAwMDI4NUE0IFBBX0NMX1ZQT1JUX1hTQ0FMRV8xNQorMHgwMDAyODQ0OCBQQV9DTF9WUE9SVF9ZT0ZGU0VUXzAKKzB4MDAwMjg0NjAgUEFfQ0xfVlBPUlRfWU9GRlNFVF8xCisweDAwMDI4NDc4IFBBX0NMX1ZQT1JUX1lPRkZTRVRfMgorMHgwMDAyODQ5MCBQQV9DTF9WUE9SVF9ZT0ZGU0VUXzMKKzB4MDAwMjg0QTggUEFfQ0xfVlBPUlRfWU9GRlNFVF80CisweDAwMDI4NEMwIFBBX0NMX1ZQT1JUX1lPRkZTRVRfNQorMHgwMDAyODREOCBQQV9DTF9WUE9SVF9ZT0ZGU0VUXzYKKzB4MDAwMjg0RjAgUEFfQ0xfVlBPUlRfWU9GRlNFVF83CisweDAwMDI4NTA4IFBBX0NMX1ZQT1JUX1lPRkZTRVRfOAorMHgwMDAyODUyMCBQQV9DTF9WUE9SVF9ZT0ZGU0VUXzkKKzB4MDAwMjg1MzggUEFfQ0xfVlBPUlRfWU9GRlNFVF8xMAorMHgwMDAyODU1MCBQQV9DTF9WUE9SVF9ZT0ZGU0VUXzExCisweDAwMDI4NTY4IFBBX0NMX1ZQT1JUX1lPRkZTRVRfMTIKKzB4MDAwMjg1ODAgUEFfQ0xfVlBPUlRfWU9GRlNFVF8xMworMHgwMDAyODU5OCBQQV9DTF9WUE9SVF9ZT0ZGU0VUXzE0CisweDAwMDI4NUIwIFBBX0NMX1ZQT1JUX1lPRkZTRVRfMTUKKzB4MDAwMjg0NDQgUEFfQ0xfVlBPUlRfWVNDQUxFXzAKKzB4MDAwMjg0NUMgUEFfQ0xfVlBPUlRfWVNDQUxFXzEKKzB4MDAwMjg0NzQgUEFfQ0xfVlBPUlRfWVNDQUxFXzIKKzB4MDAwMjg0OEMgUEFfQ0xfVlBPUlRfWVNDQUxFXzMKKzB4MDAwMjg0QTQgUEFfQ0xfVlBPUlRfWVNDQUxFXzQKKzB4MDAwMjg0QkMgUEFfQ0xfVlBPUlRfWVNDQUxFXzUKKzB4MDAwMjg0RDQgUEFfQ0xfVlBPUlRfWVNDQUxFXzYKKzB4MDAwMjg0RUMgUEFfQ0xfVlBPUlRfWVNDQUxFXzcKKzB4MDAwMjg1MDQgUEFfQ0xfVlBPUlRfWVNDQUxFXzgKKzB4MDAwMjg1MUMgUEFfQ0xfVlBPUlRfWVNDQUxFXzkKKzB4MDAwMjg1MzQgUEFfQ0xfVlBPUlRfWVNDQUxFXzEwCisweDAwMDI4NTRDIFBBX0NMX1ZQT1JUX1lTQ0FMRV8xMQorMHgwMDAyODU2NCBQQV9DTF9WUE9SVF9ZU0NBTEVfMTIKKzB4MDAwMjg1N0MgUEFfQ0xfVlBPUlRfWVNDQUxFXzEzCisweDAwMDI4NTk0IFBBX0NMX1ZQT1JUX1lTQ0FMRV8xNAorMHgwMDAyODVBQyBQQV9DTF9WUE9SVF9ZU0NBTEVfMTUKKzB4MDAwMjg0NTAgUEFfQ0xfVlBPUlRfWk9GRlNFVF8wCisweDAwMDI4NDY4IFBBX0NMX1ZQT1JUX1pPRkZTRVRfMQorMHgwMDAyODQ4MCBQQV9DTF9WUE9SVF9aT0ZGU0VUXzIKKzB4MDAwMjg0OTggUEFfQ0xfVlBPUlRfWk9GRlNFVF8zCisweDAwMDI4NEIwIFBBX0NMX1ZQT1JUX1pPRkZTRVRfNAorMHgwMDAyODRDOCBQQV9DTF9WUE9SVF9aT0ZGU0VUXzUKKzB4MDAwMjg0RTAgUEFfQ0xfVlBPUlRfWk9GRlNFVF82CisweDAwMDI4NEY4IFBBX0NMX1ZQT1JUX1pPRkZTRVRfNworMHgwMDAyODUxMCBQQV9DTF9WUE9SVF9aT0ZGU0VUXzgKKzB4MDAwMjg1MjggUEFfQ0xfVlBPUlRfWk9GRlNFVF85CisweDAwMDI4NTQwIFBBX0NMX1ZQT1JUX1pPRkZTRVRfMTAKKzB4MDAwMjg1NTggUEFfQ0xfVlBPUlRfWk9GRlNFVF8xMQorMHgwMDAyODU3MCBQQV9DTF9WUE9SVF9aT0ZGU0VUXzEyCisweDAwMDI4NTg4IFBBX0NMX1ZQT1JUX1pPRkZTRVRfMTMKKzB4MDAwMjg1QTAgUEFfQ0xfVlBPUlRfWk9GRlNFVF8xNAorMHgwMDAyODVCOCBQQV9DTF9WUE9SVF9aT0ZGU0VUXzE1CisweDAwMDI4NDRDIFBBX0NMX1ZQT1JUX1pTQ0FMRV8wCisweDAwMDI4NDY0IFBBX0NMX1ZQT1JUX1pTQ0FMRV8xCisweDAwMDI4NDdDIFBBX0NMX1ZQT1JUX1pTQ0FMRV8yCisweDAwMDI4NDk0IFBBX0NMX1ZQT1JUX1pTQ0FMRV8zCisweDAwMDI4NEFDIFBBX0NMX1ZQT1JUX1pTQ0FMRV80CisweDAwMDI4NEM0IFBBX0NMX1ZQT1JUX1pTQ0FMRV81CisweDAwMDI4NERDIFBBX0NMX1ZQT1JUX1pTQ0FMRV82CisweDAwMDI4NEY0IFBBX0NMX1ZQT1JUX1pTQ0FMRV83CisweDAwMDI4NTBDIFBBX0NMX1ZQT1JUX1pTQ0FMRV84CisweDAwMDI4NTI0IFBBX0NMX1ZQT1JUX1pTQ0FMRV85CisweDAwMDI4NTNDIFBBX0NMX1ZQT1JUX1pTQ0FMRV8xMAorMHgwMDAyODU1NCBQQV9DTF9WUE9SVF9aU0NBTEVfMTEKKzB4MDAwMjg1NkMgUEFfQ0xfVlBPUlRfWlNDQUxFXzEyCisweDAwMDI4NTg0IFBBX0NMX1ZQT1JUX1pTQ0FMRV8xMworMHgwMDAyODU5QyBQQV9DTF9WUE9SVF9aU0NBTEVfMTQKKzB4MDAwMjg1QjQgUEFfQ0xfVlBPUlRfWlNDQUxFXzE1CisweDAwMDI4ODFDIFBBX0NMX1ZTX09VVF9DTlRMCisweDAwMDI4ODE4IFBBX0NMX1ZURV9DTlRMCisweDAwMDI4QzQ4IFBBX1NDX0FBX01BU0sKKzB4MDAwMDhCNDAgUEFfU0NfQUFfU0FNUExFX0xPQ1NfMlMKKzB4MDAwMDhCNDQgUEFfU0NfQUFfU0FNUExFX0xPQ1NfNFMKKzB4MDAwMDhCNDggUEFfU0NfQUFfU0FNUExFX0xPQ1NfOFNfV0QwCisweDAwMDA4QjRDIFBBX1NDX0FBX1NBTVBMRV9MT0NTXzhTX1dEMQorMHgwMDAyOEMyMCBQQV9TQ19BQV9TQU1QTEVfTE9DU184U19XRDFfTUNUWAorMHgwMDAyOEMxQyBQQV9TQ19BQV9TQU1QTEVfTE9DU19NQ1RYCisweDAwMDI4MjE0IFBBX1NDX0NMSVBSRUNUXzBfQlIKKzB4MDAwMjgyMUMgUEFfU0NfQ0xJUFJFQ1RfMV9CUgorMHgwMDAyODIyNCBQQV9TQ19DTElQUkVDVF8yX0JSCisweDAwMDI4MjJDIFBBX1NDX0NMSVBSRUNUXzNfQlIKKzB4MDAwMjgyMTAgUEFfU0NfQ0xJUFJFQ1RfMF9UTAorMHgwMDAyODIxOCBQQV9TQ19DTElQUkVDVF8xX1RMCisweDAwMDI4MjIwIFBBX1NDX0NMSVBSRUNUXzJfVEwKKzB4MDAwMjgyMjggUEFfU0NfQ0xJUFJFQ1RfM19UTAorMHgwMDAyODIwQyBQQV9TQ19DTElQUkVDVF9SVUxFCisweDAwMDA4QkYwIFBBX1NDX0VOSEFOQ0UKKzB4MDAwMjgyNDQgUEFfU0NfR0VORVJJQ19TQ0lTU09SX0JSCisweDAwMDI4MjQwIFBBX1NDX0dFTkVSSUNfU0NJU1NPUl9UTAorMHgwMDAyOEMwMCBQQV9TQ19MSU5FX0NOVEwKKzB4MDAwMjhBMEMgUEFfU0NfTElORV9TVElQUExFCisweDAwMDA4QjEwIFBBX1NDX0xJTkVfU1RJUFBMRV9TVEFURQorMHgwMDAyOEE0QyBQQV9TQ19NT0RFX0NOVEwKKzB4MDAwMjhBNDggUEFfU0NfTVBBU1NfUFNfQ05UTAorMHgwMDAwOEIyMCBQQV9TQ19NVUxUSV9DSElQX0NOVEwKKzB4MDAwMjgwMzQgUEFfU0NfU0NSRUVOX1NDSVNTT1JfQlIKKzB4MDAwMjgwMzAgUEFfU0NfU0NSRUVOX1NDSVNTT1JfVEwKKzB4MDAwMjgyNTQgUEFfU0NfVlBPUlRfU0NJU1NPUl8wX0JSCisweDAwMDI4MjVDIFBBX1NDX1ZQT1JUX1NDSVNTT1JfMV9CUgorMHgwMDAyODI2NCBQQV9TQ19WUE9SVF9TQ0lTU09SXzJfQlIKKzB4MDAwMjgyNkMgUEFfU0NfVlBPUlRfU0NJU1NPUl8zX0JSCisweDAwMDI4Mjc0IFBBX1NDX1ZQT1JUX1NDSVNTT1JfNF9CUgorMHgwMDAyODI3QyBQQV9TQ19WUE9SVF9TQ0lTU09SXzVfQlIKKzB4MDAwMjgyODQgUEFfU0NfVlBPUlRfU0NJU1NPUl82X0JSCisweDAwMDI4MjhDIFBBX1NDX1ZQT1JUX1NDSVNTT1JfN19CUgorMHgwMDAyODI5NCBQQV9TQ19WUE9SVF9TQ0lTU09SXzhfQlIKKzB4MDAwMjgyOUMgUEFfU0NfVlBPUlRfU0NJU1NPUl85X0JSCisweDAwMDI4MkE0IFBBX1NDX1ZQT1JUX1NDSVNTT1JfMTBfQlIKKzB4MDAwMjgyQUMgUEFfU0NfVlBPUlRfU0NJU1NPUl8xMV9CUgorMHgwMDAyODJCNCBQQV9TQ19WUE9SVF9TQ0lTU09SXzEyX0JSCisweDAwMDI4MkJDIFBBX1NDX1ZQT1JUX1NDSVNTT1JfMTNfQlIKKzB4MDAwMjgyQzQgUEFfU0NfVlBPUlRfU0NJU1NPUl8xNF9CUgorMHgwMDAyODJDQyBQQV9TQ19WUE9SVF9TQ0lTU09SXzE1X0JSCisweDAwMDI4MjUwIFBBX1NDX1ZQT1JUX1NDSVNTT1JfMF9UTAorMHgwMDAyODI1OCBQQV9TQ19WUE9SVF9TQ0lTU09SXzFfVEwKKzB4MDAwMjgyNjAgUEFfU0NfVlBPUlRfU0NJU1NPUl8yX1RMCisweDAwMDI4MjY4IFBBX1NDX1ZQT1JUX1NDSVNTT1JfM19UTAorMHgwMDAyODI3MCBQQV9TQ19WUE9SVF9TQ0lTU09SXzRfVEwKKzB4MDAwMjgyNzggUEFfU0NfVlBPUlRfU0NJU1NPUl81X1RMCisweDAwMDI4MjgwIFBBX1NDX1ZQT1JUX1NDSVNTT1JfNl9UTAorMHgwMDAyODI4OCBQQV9TQ19WUE9SVF9TQ0lTU09SXzdfVEwKKzB4MDAwMjgyOTAgUEFfU0NfVlBPUlRfU0NJU1NPUl84X1RMCisweDAwMDI4Mjk4IFBBX1NDX1ZQT1JUX1NDSVNTT1JfOV9UTAorMHgwMDAyODJBMCBQQV9TQ19WUE9SVF9TQ0lTU09SXzEwX1RMCisweDAwMDI4MkE4IFBBX1NDX1ZQT1JUX1NDSVNTT1JfMTFfVEwKKzB4MDAwMjgyQjAgUEFfU0NfVlBPUlRfU0NJU1NPUl8xMl9UTAorMHgwMDAyODJCOCBQQV9TQ19WUE9SVF9TQ0lTU09SXzEzX1RMCisweDAwMDI4MkMwIFBBX1NDX1ZQT1JUX1NDSVNTT1JfMTRfVEwKKzB4MDAwMjgyQzggUEFfU0NfVlBPUlRfU0NJU1NPUl8xNV9UTAorMHgwMDAyODJENCBQQV9TQ19WUE9SVF9aTUFYXzAKKzB4MDAwMjgyREMgUEFfU0NfVlBPUlRfWk1BWF8xCisweDAwMDI4MkU0IFBBX1NDX1ZQT1JUX1pNQVhfMgorMHgwMDAyODJFQyBQQV9TQ19WUE9SVF9aTUFYXzMKKzB4MDAwMjgyRjQgUEFfU0NfVlBPUlRfWk1BWF80CisweDAwMDI4MkZDIFBBX1NDX1ZQT1JUX1pNQVhfNQorMHgwMDAyODMwNCBQQV9TQ19WUE9SVF9aTUFYXzYKKzB4MDAwMjgzMEMgUEFfU0NfVlBPUlRfWk1BWF83CisweDAwMDI4MzE0IFBBX1NDX1ZQT1JUX1pNQVhfOAorMHgwMDAyODMxQyBQQV9TQ19WUE9SVF9aTUFYXzkKKzB4MDAwMjgzMjQgUEFfU0NfVlBPUlRfWk1BWF8xMAorMHgwMDAyODMyQyBQQV9TQ19WUE9SVF9aTUFYXzExCisweDAwMDI4MzM0IFBBX1NDX1ZQT1JUX1pNQVhfMTIKKzB4MDAwMjgzM0MgUEFfU0NfVlBPUlRfWk1BWF8xMworMHgwMDAyODM0NCBQQV9TQ19WUE9SVF9aTUFYXzE0CisweDAwMDI4MzRDIFBBX1NDX1ZQT1JUX1pNQVhfMTUKKzB4MDAwMjgyRDAgUEFfU0NfVlBPUlRfWk1JTl8wCisweDAwMDI4MkQ4IFBBX1NDX1ZQT1JUX1pNSU5fMQorMHgwMDAyODJFMCBQQV9TQ19WUE9SVF9aTUlOXzIKKzB4MDAwMjgyRTggUEFfU0NfVlBPUlRfWk1JTl8zCisweDAwMDI4MkYwIFBBX1NDX1ZQT1JUX1pNSU5fNAorMHgwMDAyODJGOCBQQV9TQ19WUE9SVF9aTUlOXzUKKzB4MDAwMjgzMDAgUEFfU0NfVlBPUlRfWk1JTl82CisweDAwMDI4MzA4IFBBX1NDX1ZQT1JUX1pNSU5fNworMHgwMDAyODMxMCBQQV9TQ19WUE9SVF9aTUlOXzgKKzB4MDAwMjgzMTggUEFfU0NfVlBPUlRfWk1JTl85CisweDAwMDI4MzIwIFBBX1NDX1ZQT1JUX1pNSU5fMTAKKzB4MDAwMjgzMjggUEFfU0NfVlBPUlRfWk1JTl8xMQorMHgwMDAyODMzMCBQQV9TQ19WUE9SVF9aTUlOXzEyCisweDAwMDI4MzM4IFBBX1NDX1ZQT1JUX1pNSU5fMTMKKzB4MDAwMjgzNDAgUEFfU0NfVlBPUlRfWk1JTl8xNAorMHgwMDAyODM0OCBQQV9TQ19WUE9SVF9aTUlOXzE1CisweDAwMDI4MjAwIFBBX1NDX1dJTkRPV19PRkZTRVQKKzB4MDAwMjgyMDggUEFfU0NfV0lORE9XX1NDSVNTT1JfQlIKKzB4MDAwMjgyMDQgUEFfU0NfV0lORE9XX1NDSVNTT1JfVEwKKzB4MDAwMjhBMDggUEFfU1VfTElORV9DTlRMCisweDAwMDI4QTA0IFBBX1NVX1BPSU5UX01JTk1BWAorMHgwMDAyOEEwMCBQQV9TVV9QT0lOVF9TSVpFCisweDAwMDI4RTBDIFBBX1NVX1BPTFlfT0ZGU0VUX0JBQ0tfT0ZGU0VUCisweDAwMDI4RTA4IFBBX1NVX1BPTFlfT0ZGU0VUX0JBQ0tfU0NBTEUKKzB4MDAwMjhERkMgUEFfU1VfUE9MWV9PRkZTRVRfQ0xBTVAKKzB4MDAwMjhERjggUEFfU1VfUE9MWV9PRkZTRVRfREJfRk1UX0NOVEwKKzB4MDAwMjhFMDQgUEFfU1VfUE9MWV9PRkZTRVRfRlJPTlRfT0ZGU0VUCisweDAwMDI4RTAwIFBBX1NVX1BPTFlfT0ZGU0VUX0ZST05UX1NDQUxFCisweDAwMDI4ODE0IFBBX1NVX1NDX01PREVfQ05UTAorMHgwMDAyOEMwOCBQQV9TVV9WVFhfQ05UTAorMHgwMDAwOEMwMCBTUV9DT05GSUcKKzB4MDAwMDhDMDQgU1FfR1BSX1JFU09VUkNFX01HTVRfMQorMHgwMDAwOEMwOCBTUV9HUFJfUkVTT1VSQ0VfTUdNVF8yCisweDAwMDA4QzEwIFNRX1NUQUNLX1JFU09VUkNFX01HTVRfMQorMHgwMDAwOEMxNCBTUV9TVEFDS19SRVNPVVJDRV9NR01UXzIKKzB4MDAwMDhDMEMgU1FfVEhSRUFEX1JFU09VUkNFX01HTVQKKzB4MDAwMjgzODAgU1FfVlRYX1NFTUFOVElDXzAKKzB4MDAwMjgzODQgU1FfVlRYX1NFTUFOVElDXzEKKzB4MDAwMjgzODggU1FfVlRYX1NFTUFOVElDXzIKKzB4MDAwMjgzOEMgU1FfVlRYX1NFTUFOVElDXzMKKzB4MDAwMjgzOTAgU1FfVlRYX1NFTUFOVElDXzQKKzB4MDAwMjgzOTQgU1FfVlRYX1NFTUFOVElDXzUKKzB4MDAwMjgzOTggU1FfVlRYX1NFTUFOVElDXzYKKzB4MDAwMjgzOUMgU1FfVlRYX1NFTUFOVElDXzcKKzB4MDAwMjgzQTAgU1FfVlRYX1NFTUFOVElDXzgKKzB4MDAwMjgzQTQgU1FfVlRYX1NFTUFOVElDXzkKKzB4MDAwMjgzQTggU1FfVlRYX1NFTUFOVElDXzEwCisweDAwMDI4M0FDIFNRX1ZUWF9TRU1BTlRJQ18xMQorMHgwMDAyODNCMCBTUV9WVFhfU0VNQU5USUNfMTIKKzB4MDAwMjgzQjQgU1FfVlRYX1NFTUFOVElDXzEzCisweDAwMDI4M0I4IFNRX1ZUWF9TRU1BTlRJQ18xNAorMHgwMDAyODNCQyBTUV9WVFhfU0VNQU5USUNfMTUKKzB4MDAwMjgzQzAgU1FfVlRYX1NFTUFOVElDXzE2CisweDAwMDI4M0M0IFNRX1ZUWF9TRU1BTlRJQ18xNworMHgwMDAyODNDOCBTUV9WVFhfU0VNQU5USUNfMTgKKzB4MDAwMjgzQ0MgU1FfVlRYX1NFTUFOVElDXzE5CisweDAwMDI4M0QwIFNRX1ZUWF9TRU1BTlRJQ18yMAorMHgwMDAyODNENCBTUV9WVFhfU0VNQU5USUNfMjEKKzB4MDAwMjgzRDggU1FfVlRYX1NFTUFOVElDXzIyCisweDAwMDI4M0RDIFNRX1ZUWF9TRU1BTlRJQ18yMworMHgwMDAyODNFMCBTUV9WVFhfU0VNQU5USUNfMjQKKzB4MDAwMjgzRTQgU1FfVlRYX1NFTUFOVElDXzI1CisweDAwMDI4M0U4IFNRX1ZUWF9TRU1BTlRJQ18yNgorMHgwMDAyODNFQyBTUV9WVFhfU0VNQU5USUNfMjcKKzB4MDAwMjgzRjAgU1FfVlRYX1NFTUFOVElDXzI4CisweDAwMDI4M0Y0IFNRX1ZUWF9TRU1BTlRJQ18yOQorMHgwMDAyODNGOCBTUV9WVFhfU0VNQU5USUNfMzAKKzB4MDAwMjgzRkMgU1FfVlRYX1NFTUFOVElDXzMxCisweDAwMDI4OEUwIFNRX1ZUWF9TRU1BTlRJQ19DTEVBUgorMHgwMDAzQ0ZGNCBTUV9WVFhfU1RBUlRfSU5TVF9MT0MKKzB4MDAwM0MwMDAgU1FfVEVYX1NBTVBMRVJfV09SRDBfMAorMHgwMDAzQzAwNCBTUV9URVhfU0FNUExFUl9XT1JEMV8wCisweDAwMDNDMDA4IFNRX1RFWF9TQU1QTEVSX1dPUkQyXzAKKzB4MDAwMzAwMDAgU1FfQUxVX0NPTlNUQU5UMF8wCisweDAwMDMwMDA0IFNRX0FMVV9DT05TVEFOVDFfMAorMHgwMDAzMDAwOCBTUV9BTFVfQ09OU1RBTlQyXzAKKzB4MDAwMzAwMEMgU1FfQUxVX0NPTlNUQU5UM18wCisweDAwMDNFMzgwIFNRX0JPT0xfQ09OU1RfMAorMHgwMDAzRTM4NCBTUV9CT09MX0NPTlNUXzEKKzB4MDAwM0UzODggU1FfQk9PTF9DT05TVF8yCisweDAwMDNFMjAwIFNRX0xPT1BfQ09OU1RfMAorMHgwMDAzRTIwMCBTUV9MT09QX0NPTlNUX0RYMTBfMAorMHgwMDAyODFDMCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfR1NfMAorMHgwMDAyODFDNCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfR1NfMQorMHgwMDAyODFDOCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfR1NfMgorMHgwMDAyODFDQyBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfR1NfMworMHgwMDAyODFEMCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfR1NfNAorMHgwMDAyODFENCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfR1NfNQorMHgwMDAyODFEOCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfR1NfNgorMHgwMDAyODFEQyBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfR1NfNworMHgwMDAyODFFMCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfR1NfOAorMHgwMDAyODFFNCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfR1NfOQorMHgwMDAyODFFOCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfR1NfMTAKKzB4MDAwMjgxRUMgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX0dTXzExCisweDAwMDI4MUYwIFNRX0FMVV9DT05TVF9CVUZGRVJfU0laRV9HU18xMgorMHgwMDAyODFGNCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfR1NfMTMKKzB4MDAwMjgxRjggU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX0dTXzE0CisweDAwMDI4MUZDIFNRX0FMVV9DT05TVF9CVUZGRVJfU0laRV9HU18xNQorMHgwMDAyODE0MCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfUFNfMAorMHgwMDAyODE0NCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfUFNfMQorMHgwMDAyODE0OCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfUFNfMgorMHgwMDAyODE0QyBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfUFNfMworMHgwMDAyODE1MCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfUFNfNAorMHgwMDAyODE1NCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfUFNfNQorMHgwMDAyODE1OCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfUFNfNgorMHgwMDAyODE1QyBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfUFNfNworMHgwMDAyODE2MCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfUFNfOAorMHgwMDAyODE2NCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfUFNfOQorMHgwMDAyODE2OCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfUFNfMTAKKzB4MDAwMjgxNkMgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1BTXzExCisweDAwMDI4MTcwIFNRX0FMVV9DT05TVF9CVUZGRVJfU0laRV9QU18xMgorMHgwMDAyODE3NCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfUFNfMTMKKzB4MDAwMjgxNzggU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1BTXzE0CisweDAwMDI4MTdDIFNRX0FMVV9DT05TVF9CVUZGRVJfU0laRV9QU18xNQorMHgwMDAyODE4MCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfVlNfMAorMHgwMDAyODE4NCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfVlNfMQorMHgwMDAyODE4OCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfVlNfMgorMHgwMDAyODE4QyBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfVlNfMworMHgwMDAyODE5MCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfVlNfNAorMHgwMDAyODE5NCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfVlNfNQorMHgwMDAyODE5OCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfVlNfNgorMHgwMDAyODE5QyBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfVlNfNworMHgwMDAyODFBMCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfVlNfOAorMHgwMDAyODFBNCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfVlNfOQorMHgwMDAyODFBOCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfVlNfMTAKKzB4MDAwMjgxQUMgU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1ZTXzExCisweDAwMDI4MUIwIFNRX0FMVV9DT05TVF9CVUZGRVJfU0laRV9WU18xMgorMHgwMDAyODFCNCBTUV9BTFVfQ09OU1RfQlVGRkVSX1NJWkVfVlNfMTMKKzB4MDAwMjgxQjggU1FfQUxVX0NPTlNUX0JVRkZFUl9TSVpFX1ZTXzE0CisweDAwMDI4MUJDIFNRX0FMVV9DT05TVF9CVUZGRVJfU0laRV9WU18xNQorMHgwMDAyODlDMCBTUV9BTFVfQ09OU1RfQ0FDSEVfR1NfMAorMHgwMDAyODlDNCBTUV9BTFVfQ09OU1RfQ0FDSEVfR1NfMQorMHgwMDAyODlDOCBTUV9BTFVfQ09OU1RfQ0FDSEVfR1NfMgorMHgwMDAyODlDQyBTUV9BTFVfQ09OU1RfQ0FDSEVfR1NfMworMHgwMDAyODlEMCBTUV9BTFVfQ09OU1RfQ0FDSEVfR1NfNAorMHgwMDAyODlENCBTUV9BTFVfQ09OU1RfQ0FDSEVfR1NfNQorMHgwMDAyODlEOCBTUV9BTFVfQ09OU1RfQ0FDSEVfR1NfNgorMHgwMDAyODlEQyBTUV9BTFVfQ09OU1RfQ0FDSEVfR1NfNworMHgwMDAyODlFMCBTUV9BTFVfQ09OU1RfQ0FDSEVfR1NfOAorMHgwMDAyODlFNCBTUV9BTFVfQ09OU1RfQ0FDSEVfR1NfOQorMHgwMDAyODlFOCBTUV9BTFVfQ09OU1RfQ0FDSEVfR1NfMTAKKzB4MDAwMjg5RUMgU1FfQUxVX0NPTlNUX0NBQ0hFX0dTXzExCisweDAwMDI4OUYwIFNRX0FMVV9DT05TVF9DQUNIRV9HU18xMgorMHgwMDAyODlGNCBTUV9BTFVfQ09OU1RfQ0FDSEVfR1NfMTMKKzB4MDAwMjg5RjggU1FfQUxVX0NPTlNUX0NBQ0hFX0dTXzE0CisweDAwMDI4OUZDIFNRX0FMVV9DT05TVF9DQUNIRV9HU18xNQorMHgwMDAyODk0MCBTUV9BTFVfQ09OU1RfQ0FDSEVfUFNfMAorMHgwMDAyODk0NCBTUV9BTFVfQ09OU1RfQ0FDSEVfUFNfMQorMHgwMDAyODk0OCBTUV9BTFVfQ09OU1RfQ0FDSEVfUFNfMgorMHgwMDAyODk0QyBTUV9BTFVfQ09OU1RfQ0FDSEVfUFNfMworMHgwMDAyODk1MCBTUV9BTFVfQ09OU1RfQ0FDSEVfUFNfNAorMHgwMDAyODk1NCBTUV9BTFVfQ09OU1RfQ0FDSEVfUFNfNQorMHgwMDAyODk1OCBTUV9BTFVfQ09OU1RfQ0FDSEVfUFNfNgorMHgwMDAyODk1QyBTUV9BTFVfQ09OU1RfQ0FDSEVfUFNfNworMHgwMDAyODk2MCBTUV9BTFVfQ09OU1RfQ0FDSEVfUFNfOAorMHgwMDAyODk2NCBTUV9BTFVfQ09OU1RfQ0FDSEVfUFNfOQorMHgwMDAyODk2OCBTUV9BTFVfQ09OU1RfQ0FDSEVfUFNfMTAKKzB4MDAwMjg5NkMgU1FfQUxVX0NPTlNUX0NBQ0hFX1BTXzExCisweDAwMDI4OTcwIFNRX0FMVV9DT05TVF9DQUNIRV9QU18xMgorMHgwMDAyODk3NCBTUV9BTFVfQ09OU1RfQ0FDSEVfUFNfMTMKKzB4MDAwMjg5NzggU1FfQUxVX0NPTlNUX0NBQ0hFX1BTXzE0CisweDAwMDI4OTdDIFNRX0FMVV9DT05TVF9DQUNIRV9QU18xNQorMHgwMDAyODk4MCBTUV9BTFVfQ09OU1RfQ0FDSEVfVlNfMAorMHgwMDAyODk4NCBTUV9BTFVfQ09OU1RfQ0FDSEVfVlNfMQorMHgwMDAyODk4OCBTUV9BTFVfQ09OU1RfQ0FDSEVfVlNfMgorMHgwMDAyODk4QyBTUV9BTFVfQ09OU1RfQ0FDSEVfVlNfMworMHgwMDAyODk5MCBTUV9BTFVfQ09OU1RfQ0FDSEVfVlNfNAorMHgwMDAyODk5NCBTUV9BTFVfQ09OU1RfQ0FDSEVfVlNfNQorMHgwMDAyODk5OCBTUV9BTFVfQ09OU1RfQ0FDSEVfVlNfNgorMHgwMDAyODk5QyBTUV9BTFVfQ09OU1RfQ0FDSEVfVlNfNworMHgwMDAyODlBMCBTUV9BTFVfQ09OU1RfQ0FDSEVfVlNfOAorMHgwMDAyODlBNCBTUV9BTFVfQ09OU1RfQ0FDSEVfVlNfOQorMHgwMDAyODlBOCBTUV9BTFVfQ09OU1RfQ0FDSEVfVlNfMTAKKzB4MDAwMjg5QUMgU1FfQUxVX0NPTlNUX0NBQ0hFX1ZTXzExCisweDAwMDI4OUIwIFNRX0FMVV9DT05TVF9DQUNIRV9WU18xMgorMHgwMDAyODlCNCBTUV9BTFVfQ09OU1RfQ0FDSEVfVlNfMTMKKzB4MDAwMjg5QjggU1FfQUxVX0NPTlNUX0NBQ0hFX1ZTXzE0CisweDAwMDI4OUJDIFNRX0FMVV9DT05TVF9DQUNIRV9WU18xNQorMHgwMDAyODhEOCBTUV9QR01fQ0ZfT0ZGU0VUX0VTCisweDAwMDI4OERDIFNRX1BHTV9DRl9PRkZTRVRfRlMKKzB4MDAwMjg4RDQgU1FfUEdNX0NGX09GRlNFVF9HUworMHgwMDAyODhDQyBTUV9QR01fQ0ZfT0ZGU0VUX1BTCisweDAwMDI4OEQwIFNRX1BHTV9DRl9PRkZTRVRfVlMKKzB4MDAwMjg4NTQgU1FfUEdNX0VYUE9SVFNfUFMKKzB4MDAwMjg4OTAgU1FfUEdNX1JFU09VUkNFU19FUworMHgwMDAyODhBNCBTUV9QR01fUkVTT1VSQ0VTX0ZTCisweDAwMDI4ODdDIFNRX1BHTV9SRVNPVVJDRVNfR1MKKzB4MDAwMjg4NTAgU1FfUEdNX1JFU09VUkNFU19QUworMHgwMDAyODg2OCBTUV9QR01fUkVTT1VSQ0VTX1ZTCisweDAwMDA5MTAwIFNQSV9DT05GSUdfQ05UTAorMHgwMDAwOTEzQyBTUElfQ09ORklHX0NOVExfMQorMHgwMDAyODZEQyBTUElfRk9HX0NOVEwKKzB4MDAwMjg2RTQgU1BJX0ZPR19GVU5DX0JJQVMKKzB4MDAwMjg2RTAgU1BJX0ZPR19GVU5DX1NDQUxFCisweDAwMDI4NkQ4IFNQSV9JTlBVVF9aCisweDAwMDI4NkQ0IFNQSV9JTlRFUlBfQ09OVFJPTF8wCisweDAwMDI4NjQ0IFNQSV9QU19JTlBVVF9DTlRMXzAKKzB4MDAwMjg2NDggU1BJX1BTX0lOUFVUX0NOVExfMQorMHgwMDAyODY0QyBTUElfUFNfSU5QVVRfQ05UTF8yCisweDAwMDI4NjUwIFNQSV9QU19JTlBVVF9DTlRMXzMKKzB4MDAwMjg2NTQgU1BJX1BTX0lOUFVUX0NOVExfNAorMHgwMDAyODY1OCBTUElfUFNfSU5QVVRfQ05UTF81CisweDAwMDI4NjVDIFNQSV9QU19JTlBVVF9DTlRMXzYKKzB4MDAwMjg2NjAgU1BJX1BTX0lOUFVUX0NOVExfNworMHgwMDAyODY2NCBTUElfUFNfSU5QVVRfQ05UTF84CisweDAwMDI4NjY4IFNQSV9QU19JTlBVVF9DTlRMXzkKKzB4MDAwMjg2NkMgU1BJX1BTX0lOUFVUX0NOVExfMTAKKzB4MDAwMjg2NzAgU1BJX1BTX0lOUFVUX0NOVExfMTEKKzB4MDAwMjg2NzQgU1BJX1BTX0lOUFVUX0NOVExfMTIKKzB4MDAwMjg2NzggU1BJX1BTX0lOUFVUX0NOVExfMTMKKzB4MDAwMjg2N0MgU1BJX1BTX0lOUFVUX0NOVExfMTQKKzB4MDAwMjg2ODAgU1BJX1BTX0lOUFVUX0NOVExfMTUKKzB4MDAwMjg2ODQgU1BJX1BTX0lOUFVUX0NOVExfMTYKKzB4MDAwMjg2ODggU1BJX1BTX0lOUFVUX0NOVExfMTcKKzB4MDAwMjg2OEMgU1BJX1BTX0lOUFVUX0NOVExfMTgKKzB4MDAwMjg2OTAgU1BJX1BTX0lOUFVUX0NOVExfMTkKKzB4MDAwMjg2OTQgU1BJX1BTX0lOUFVUX0NOVExfMjAKKzB4MDAwMjg2OTggU1BJX1BTX0lOUFVUX0NOVExfMjEKKzB4MDAwMjg2OUMgU1BJX1BTX0lOUFVUX0NOVExfMjIKKzB4MDAwMjg2QTAgU1BJX1BTX0lOUFVUX0NOVExfMjMKKzB4MDAwMjg2QTQgU1BJX1BTX0lOUFVUX0NOVExfMjQKKzB4MDAwMjg2QTggU1BJX1BTX0lOUFVUX0NOVExfMjUKKzB4MDAwMjg2QUMgU1BJX1BTX0lOUFVUX0NOVExfMjYKKzB4MDAwMjg2QjAgU1BJX1BTX0lOUFVUX0NOVExfMjcKKzB4MDAwMjg2QjQgU1BJX1BTX0lOUFVUX0NOVExfMjgKKzB4MDAwMjg2QjggU1BJX1BTX0lOUFVUX0NOVExfMjkKKzB4MDAwMjg2QkMgU1BJX1BTX0lOUFVUX0NOVExfMzAKKzB4MDAwMjg2QzAgU1BJX1BTX0lOUFVUX0NOVExfMzEKKzB4MDAwMjg2Q0MgU1BJX1BTX0lOX0NPTlRST0xfMAorMHgwMDAyODZEMCBTUElfUFNfSU5fQ09OVFJPTF8xCisweDAwMDI4NkM0IFNQSV9WU19PVVRfQ09ORklHCisweDAwMDI4NjE0IFNQSV9WU19PVVRfSURfMAorMHgwMDAyODYxOCBTUElfVlNfT1VUX0lEXzEKKzB4MDAwMjg2MUMgU1BJX1ZTX09VVF9JRF8yCisweDAwMDI4NjIwIFNQSV9WU19PVVRfSURfMworMHgwMDAyODYyNCBTUElfVlNfT1VUX0lEXzQKKzB4MDAwMjg2MjggU1BJX1ZTX09VVF9JRF81CisweDAwMDI4NjJDIFNQSV9WU19PVVRfSURfNgorMHgwMDAyODYzMCBTUElfVlNfT1VUX0lEXzcKKzB4MDAwMjg2MzQgU1BJX1ZTX09VVF9JRF84CisweDAwMDI4NjM4IFNQSV9WU19PVVRfSURfOQorMHgwMDAyODQzOCBTWF9BTFBIQV9SRUYKKzB4MDAwMjg0MTAgU1hfQUxQSEFfVEVTVF9DT05UUk9MCisweDAwMDI4MzUwIFNYX01JU0MKKzB4MDAwMEEwMjAgU01YX0RDX0NUTDAKKzB4MDAwMEEwMjQgU01YX0RDX0NUTDEKKzB4MDAwMEEwMjggU01YX0RDX0NUTDIKKzB4MDAwMDk2MDggVENfQ05UTAorMHgwMDAwOTYwNCBUQ19JTlZBTElEQVRFCisweDAwMDA5NDkwIFREX0NOVEwKKzB4MDAwMDk0MDAgVERfRklMVEVSNAorMHgwMDAwOTQwNCBURF9GSUxURVI0XzEKKzB4MDAwMDk0MDggVERfRklMVEVSNF8yCisweDAwMDA5NDBDIFREX0ZJTFRFUjRfMworMHgwMDAwOTQxMCBURF9GSUxURVI0XzQKKzB4MDAwMDk0MTQgVERfRklMVEVSNF81CisweDAwMDA5NDE4IFREX0ZJTFRFUjRfNgorMHgwMDAwOTQxQyBURF9GSUxURVI0XzcKKzB4MDAwMDk0MjAgVERfRklMVEVSNF84CisweDAwMDA5NDI0IFREX0ZJTFRFUjRfOQorMHgwMDAwOTQyOCBURF9GSUxURVI0XzEwCisweDAwMDA5NDJDIFREX0ZJTFRFUjRfMTEKKzB4MDAwMDk0MzAgVERfRklMVEVSNF8xMgorMHgwMDAwOTQzNCBURF9GSUxURVI0XzEzCisweDAwMDA5NDM4IFREX0ZJTFRFUjRfMTQKKzB4MDAwMDk0M0MgVERfRklMVEVSNF8xNQorMHgwMDAwOTQ0MCBURF9GSUxURVI0XzE2CisweDAwMDA5NDQ0IFREX0ZJTFRFUjRfMTcKKzB4MDAwMDk0NDggVERfRklMVEVSNF8xOAorMHgwMDAwOTQ0QyBURF9GSUxURVI0XzE5CisweDAwMDA5NDUwIFREX0ZJTFRFUjRfMjAKKzB4MDAwMDk0NTQgVERfRklMVEVSNF8yMQorMHgwMDAwOTQ1OCBURF9GSUxURVI0XzIyCisweDAwMDA5NDVDIFREX0ZJTFRFUjRfMjMKKzB4MDAwMDk0NjAgVERfRklMVEVSNF8yNAorMHgwMDAwOTQ2NCBURF9GSUxURVI0XzI1CisweDAwMDA5NDY4IFREX0ZJTFRFUjRfMjYKKzB4MDAwMDk0NkMgVERfRklMVEVSNF8yNworMHgwMDAwOTQ3MCBURF9GSUxURVI0XzI4CisweDAwMDA5NDc0IFREX0ZJTFRFUjRfMjkKKzB4MDAwMDk0NzggVERfRklMVEVSNF8zMAorMHgwMDAwOTQ3QyBURF9GSUxURVI0XzMxCisweDAwMDA5NDgwIFREX0ZJTFRFUjRfMzIKKzB4MDAwMDk0ODQgVERfRklMVEVSNF8zMworMHgwMDAwOTQ4OCBURF9GSUxURVI0XzM0CisweDAwMDA5NDhDIFREX0ZJTFRFUjRfMzUKKzB4MDAwMEE4MEMgVERfR1NfU0FNUExFUjBfQk9SREVSX0FMUEhBCisweDAwMDBBODFDIFREX0dTX1NBTVBMRVIxX0JPUkRFUl9BTFBIQQorMHgwMDAwQTgyQyBURF9HU19TQU1QTEVSMl9CT1JERVJfQUxQSEEKKzB4MDAwMEE4M0MgVERfR1NfU0FNUExFUjNfQk9SREVSX0FMUEhBCisweDAwMDBBODRDIFREX0dTX1NBTVBMRVI0X0JPUkRFUl9BTFBIQQorMHgwMDAwQTg1QyBURF9HU19TQU1QTEVSNV9CT1JERVJfQUxQSEEKKzB4MDAwMEE4NkMgVERfR1NfU0FNUExFUjZfQk9SREVSX0FMUEhBCisweDAwMDBBODdDIFREX0dTX1NBTVBMRVI3X0JPUkRFUl9BTFBIQQorMHgwMDAwQTg4QyBURF9HU19TQU1QTEVSOF9CT1JERVJfQUxQSEEKKzB4MDAwMEE4OUMgVERfR1NfU0FNUExFUjlfQk9SREVSX0FMUEhBCisweDAwMDBBOEFDIFREX0dTX1NBTVBMRVIxMF9CT1JERVJfQUxQSEEKKzB4MDAwMEE4QkMgVERfR1NfU0FNUExFUjExX0JPUkRFUl9BTFBIQQorMHgwMDAwQThDQyBURF9HU19TQU1QTEVSMTJfQk9SREVSX0FMUEhBCisweDAwMDBBOERDIFREX0dTX1NBTVBMRVIxM19CT1JERVJfQUxQSEEKKzB4MDAwMEE4RUMgVERfR1NfU0FNUExFUjE0X0JPUkRFUl9BTFBIQQorMHgwMDAwQThGQyBURF9HU19TQU1QTEVSMTVfQk9SREVSX0FMUEhBCisweDAwMDBBOTBDIFREX0dTX1NBTVBMRVIxNl9CT1JERVJfQUxQSEEKKzB4MDAwMEE5MUMgVERfR1NfU0FNUExFUjE3X0JPUkRFUl9BTFBIQQorMHgwMDAwQTgwOCBURF9HU19TQU1QTEVSMF9CT1JERVJfQkxVRQorMHgwMDAwQTgxOCBURF9HU19TQU1QTEVSMV9CT1JERVJfQkxVRQorMHgwMDAwQTgyOCBURF9HU19TQU1QTEVSMl9CT1JERVJfQkxVRQorMHgwMDAwQTgzOCBURF9HU19TQU1QTEVSM19CT1JERVJfQkxVRQorMHgwMDAwQTg0OCBURF9HU19TQU1QTEVSNF9CT1JERVJfQkxVRQorMHgwMDAwQTg1OCBURF9HU19TQU1QTEVSNV9CT1JERVJfQkxVRQorMHgwMDAwQTg2OCBURF9HU19TQU1QTEVSNl9CT1JERVJfQkxVRQorMHgwMDAwQTg3OCBURF9HU19TQU1QTEVSN19CT1JERVJfQkxVRQorMHgwMDAwQTg4OCBURF9HU19TQU1QTEVSOF9CT1JERVJfQkxVRQorMHgwMDAwQTg5OCBURF9HU19TQU1QTEVSOV9CT1JERVJfQkxVRQorMHgwMDAwQThBOCBURF9HU19TQU1QTEVSMTBfQk9SREVSX0JMVUUKKzB4MDAwMEE4QjggVERfR1NfU0FNUExFUjExX0JPUkRFUl9CTFVFCisweDAwMDBBOEM4IFREX0dTX1NBTVBMRVIxMl9CT1JERVJfQkxVRQorMHgwMDAwQThEOCBURF9HU19TQU1QTEVSMTNfQk9SREVSX0JMVUUKKzB4MDAwMEE4RTggVERfR1NfU0FNUExFUjE0X0JPUkRFUl9CTFVFCisweDAwMDBBOEY4IFREX0dTX1NBTVBMRVIxNV9CT1JERVJfQkxVRQorMHgwMDAwQTkwOCBURF9HU19TQU1QTEVSMTZfQk9SREVSX0JMVUUKKzB4MDAwMEE5MTggVERfR1NfU0FNUExFUjE3X0JPUkRFUl9CTFVFCisweDAwMDBBODA0IFREX0dTX1NBTVBMRVIwX0JPUkRFUl9HUkVFTgorMHgwMDAwQTgxNCBURF9HU19TQU1QTEVSMV9CT1JERVJfR1JFRU4KKzB4MDAwMEE4MjQgVERfR1NfU0FNUExFUjJfQk9SREVSX0dSRUVOCisweDAwMDBBODM0IFREX0dTX1NBTVBMRVIzX0JPUkRFUl9HUkVFTgorMHgwMDAwQTg0NCBURF9HU19TQU1QTEVSNF9CT1JERVJfR1JFRU4KKzB4MDAwMEE4NTQgVERfR1NfU0FNUExFUjVfQk9SREVSX0dSRUVOCisweDAwMDBBODY0IFREX0dTX1NBTVBMRVI2X0JPUkRFUl9HUkVFTgorMHgwMDAwQTg3NCBURF9HU19TQU1QTEVSN19CT1JERVJfR1JFRU4KKzB4MDAwMEE4ODQgVERfR1NfU0FNUExFUjhfQk9SREVSX0dSRUVOCisweDAwMDBBODk0IFREX0dTX1NBTVBMRVI5X0JPUkRFUl9HUkVFTgorMHgwMDAwQThBNCBURF9HU19TQU1QTEVSMTBfQk9SREVSX0dSRUVOCisweDAwMDBBOEI0IFREX0dTX1NBTVBMRVIxMV9CT1JERVJfR1JFRU4KKzB4MDAwMEE4QzQgVERfR1NfU0FNUExFUjEyX0JPUkRFUl9HUkVFTgorMHgwMDAwQThENCBURF9HU19TQU1QTEVSMTNfQk9SREVSX0dSRUVOCisweDAwMDBBOEU0IFREX0dTX1NBTVBMRVIxNF9CT1JERVJfR1JFRU4KKzB4MDAwMEE4RjQgVERfR1NfU0FNUExFUjE1X0JPUkRFUl9HUkVFTgorMHgwMDAwQTkwNCBURF9HU19TQU1QTEVSMTZfQk9SREVSX0dSRUVOCisweDAwMDBBOTE0IFREX0dTX1NBTVBMRVIxN19CT1JERVJfR1JFRU4KKzB4MDAwMEE4MDAgVERfR1NfU0FNUExFUjBfQk9SREVSX1JFRAorMHgwMDAwQTgxMCBURF9HU19TQU1QTEVSMV9CT1JERVJfUkVECisweDAwMDBBODIwIFREX0dTX1NBTVBMRVIyX0JPUkRFUl9SRUQKKzB4MDAwMEE4MzAgVERfR1NfU0FNUExFUjNfQk9SREVSX1JFRAorMHgwMDAwQTg0MCBURF9HU19TQU1QTEVSNF9CT1JERVJfUkVECisweDAwMDBBODUwIFREX0dTX1NBTVBMRVI1X0JPUkRFUl9SRUQKKzB4MDAwMEE4NjAgVERfR1NfU0FNUExFUjZfQk9SREVSX1JFRAorMHgwMDAwQTg3MCBURF9HU19TQU1QTEVSN19CT1JERVJfUkVECisweDAwMDBBODgwIFREX0dTX1NBTVBMRVI4X0JPUkRFUl9SRUQKKzB4MDAwMEE4OTAgVERfR1NfU0FNUExFUjlfQk9SREVSX1JFRAorMHgwMDAwQThBMCBURF9HU19TQU1QTEVSMTBfQk9SREVSX1JFRAorMHgwMDAwQThCMCBURF9HU19TQU1QTEVSMTFfQk9SREVSX1JFRAorMHgwMDAwQThDMCBURF9HU19TQU1QTEVSMTJfQk9SREVSX1JFRAorMHgwMDAwQThEMCBURF9HU19TQU1QTEVSMTNfQk9SREVSX1JFRAorMHgwMDAwQThFMCBURF9HU19TQU1QTEVSMTRfQk9SREVSX1JFRAorMHgwMDAwQThGMCBURF9HU19TQU1QTEVSMTVfQk9SREVSX1JFRAorMHgwMDAwQTkwMCBURF9HU19TQU1QTEVSMTZfQk9SREVSX1JFRAorMHgwMDAwQTkxMCBURF9HU19TQU1QTEVSMTdfQk9SREVSX1JFRAorMHgwMDAwQTQwQyBURF9QU19TQU1QTEVSMF9CT1JERVJfQUxQSEEKKzB4MDAwMEE0MUMgVERfUFNfU0FNUExFUjFfQk9SREVSX0FMUEhBCisweDAwMDBBNDJDIFREX1BTX1NBTVBMRVIyX0JPUkRFUl9BTFBIQQorMHgwMDAwQTQzQyBURF9QU19TQU1QTEVSM19CT1JERVJfQUxQSEEKKzB4MDAwMEE0NEMgVERfUFNfU0FNUExFUjRfQk9SREVSX0FMUEhBCisweDAwMDBBNDVDIFREX1BTX1NBTVBMRVI1X0JPUkRFUl9BTFBIQQorMHgwMDAwQTQ2QyBURF9QU19TQU1QTEVSNl9CT1JERVJfQUxQSEEKKzB4MDAwMEE0N0MgVERfUFNfU0FNUExFUjdfQk9SREVSX0FMUEhBCisweDAwMDBBNDhDIFREX1BTX1NBTVBMRVI4X0JPUkRFUl9BTFBIQQorMHgwMDAwQTQ5QyBURF9QU19TQU1QTEVSOV9CT1JERVJfQUxQSEEKKzB4MDAwMEE0QUMgVERfUFNfU0FNUExFUjEwX0JPUkRFUl9BTFBIQQorMHgwMDAwQTRCQyBURF9QU19TQU1QTEVSMTFfQk9SREVSX0FMUEhBCisweDAwMDBBNENDIFREX1BTX1NBTVBMRVIxMl9CT1JERVJfQUxQSEEKKzB4MDAwMEE0REMgVERfUFNfU0FNUExFUjEzX0JPUkRFUl9BTFBIQQorMHgwMDAwQTRFQyBURF9QU19TQU1QTEVSMTRfQk9SREVSX0FMUEhBCisweDAwMDBBNEZDIFREX1BTX1NBTVBMRVIxNV9CT1JERVJfQUxQSEEKKzB4MDAwMEE1MEMgVERfUFNfU0FNUExFUjE2X0JPUkRFUl9BTFBIQQorMHgwMDAwQTUxQyBURF9QU19TQU1QTEVSMTdfQk9SREVSX0FMUEhBCisweDAwMDBBNDA4IFREX1BTX1NBTVBMRVIwX0JPUkRFUl9CTFVFCisweDAwMDBBNDE4IFREX1BTX1NBTVBMRVIxX0JPUkRFUl9CTFVFCisweDAwMDBBNDI4IFREX1BTX1NBTVBMRVIyX0JPUkRFUl9CTFVFCisweDAwMDBBNDM4IFREX1BTX1NBTVBMRVIzX0JPUkRFUl9CTFVFCisweDAwMDBBNDQ4IFREX1BTX1NBTVBMRVI0X0JPUkRFUl9CTFVFCisweDAwMDBBNDU4IFREX1BTX1NBTVBMRVI1X0JPUkRFUl9CTFVFCisweDAwMDBBNDY4IFREX1BTX1NBTVBMRVI2X0JPUkRFUl9CTFVFCisweDAwMDBBNDc4IFREX1BTX1NBTVBMRVI3X0JPUkRFUl9CTFVFCisweDAwMDBBNDg4IFREX1BTX1NBTVBMRVI4X0JPUkRFUl9CTFVFCisweDAwMDBBNDk4IFREX1BTX1NBTVBMRVI5X0JPUkRFUl9CTFVFCisweDAwMDBBNEE4IFREX1BTX1NBTVBMRVIxMF9CT1JERVJfQkxVRQorMHgwMDAwQTRCOCBURF9QU19TQU1QTEVSMTFfQk9SREVSX0JMVUUKKzB4MDAwMEE0QzggVERfUFNfU0FNUExFUjEyX0JPUkRFUl9CTFVFCisweDAwMDBBNEQ4IFREX1BTX1NBTVBMRVIxM19CT1JERVJfQkxVRQorMHgwMDAwQTRFOCBURF9QU19TQU1QTEVSMTRfQk9SREVSX0JMVUUKKzB4MDAwMEE0RjggVERfUFNfU0FNUExFUjE1X0JPUkRFUl9CTFVFCisweDAwMDBBNTA4IFREX1BTX1NBTVBMRVIxNl9CT1JERVJfQkxVRQorMHgwMDAwQTUxOCBURF9QU19TQU1QTEVSMTdfQk9SREVSX0JMVUUKKzB4MDAwMEE0MDQgVERfUFNfU0FNUExFUjBfQk9SREVSX0dSRUVOCisweDAwMDBBNDE0IFREX1BTX1NBTVBMRVIxX0JPUkRFUl9HUkVFTgorMHgwMDAwQTQyNCBURF9QU19TQU1QTEVSMl9CT1JERVJfR1JFRU4KKzB4MDAwMEE0MzQgVERfUFNfU0FNUExFUjNfQk9SREVSX0dSRUVOCisweDAwMDBBNDQ0IFREX1BTX1NBTVBMRVI0X0JPUkRFUl9HUkVFTgorMHgwMDAwQTQ1NCBURF9QU19TQU1QTEVSNV9CT1JERVJfR1JFRU4KKzB4MDAwMEE0NjQgVERfUFNfU0FNUExFUjZfQk9SREVSX0dSRUVOCisweDAwMDBBNDc0IFREX1BTX1NBTVBMRVI3X0JPUkRFUl9HUkVFTgorMHgwMDAwQTQ4NCBURF9QU19TQU1QTEVSOF9CT1JERVJfR1JFRU4KKzB4MDAwMEE0OTQgVERfUFNfU0FNUExFUjlfQk9SREVSX0dSRUVOCisweDAwMDBBNEE0IFREX1BTX1NBTVBMRVIxMF9CT1JERVJfR1JFRU4KKzB4MDAwMEE0QjQgVERfUFNfU0FNUExFUjExX0JPUkRFUl9HUkVFTgorMHgwMDAwQTRDNCBURF9QU19TQU1QTEVSMTJfQk9SREVSX0dSRUVOCisweDAwMDBBNEQ0IFREX1BTX1NBTVBMRVIxM19CT1JERVJfR1JFRU4KKzB4MDAwMEE0RTQgVERfUFNfU0FNUExFUjE0X0JPUkRFUl9HUkVFTgorMHgwMDAwQTRGNCBURF9QU19TQU1QTEVSMTVfQk9SREVSX0dSRUVOCisweDAwMDBBNTA0IFREX1BTX1NBTVBMRVIxNl9CT1JERVJfR1JFRU4KKzB4MDAwMEE1MTQgVERfUFNfU0FNUExFUjE3X0JPUkRFUl9HUkVFTgorMHgwMDAwQTQwMCBURF9QU19TQU1QTEVSMF9CT1JERVJfUkVECisweDAwMDBBNDEwIFREX1BTX1NBTVBMRVIxX0JPUkRFUl9SRUQKKzB4MDAwMEE0MjAgVERfUFNfU0FNUExFUjJfQk9SREVSX1JFRAorMHgwMDAwQTQzMCBURF9QU19TQU1QTEVSM19CT1JERVJfUkVECisweDAwMDBBNDQwIFREX1BTX1NBTVBMRVI0X0JPUkRFUl9SRUQKKzB4MDAwMEE0NTAgVERfUFNfU0FNUExFUjVfQk9SREVSX1JFRAorMHgwMDAwQTQ2MCBURF9QU19TQU1QTEVSNl9CT1JERVJfUkVECisweDAwMDBBNDcwIFREX1BTX1NBTVBMRVI3X0JPUkRFUl9SRUQKKzB4MDAwMEE0ODAgVERfUFNfU0FNUExFUjhfQk9SREVSX1JFRAorMHgwMDAwQTQ5MCBURF9QU19TQU1QTEVSOV9CT1JERVJfUkVECisweDAwMDBBNEEwIFREX1BTX1NBTVBMRVIxMF9CT1JERVJfUkVECisweDAwMDBBNEIwIFREX1BTX1NBTVBMRVIxMV9CT1JERVJfUkVECisweDAwMDBBNEMwIFREX1BTX1NBTVBMRVIxMl9CT1JERVJfUkVECisweDAwMDBBNEQwIFREX1BTX1NBTVBMRVIxM19CT1JERVJfUkVECisweDAwMDBBNEUwIFREX1BTX1NBTVBMRVIxNF9CT1JERVJfUkVECisweDAwMDBBNEYwIFREX1BTX1NBTVBMRVIxNV9CT1JERVJfUkVECisweDAwMDBBNTAwIFREX1BTX1NBTVBMRVIxNl9CT1JERVJfUkVECisweDAwMDBBNTEwIFREX1BTX1NBTVBMRVIxN19CT1JERVJfUkVECisweDAwMDBBQTAwIFREX1BTX1NBTVBMRVIwX0NMRUFSVFlQRV9LRVJORUwKKzB4MDAwMEFBMDQgVERfUFNfU0FNUExFUjFfQ0xFQVJUWVBFX0tFUk5FTAorMHgwMDAwQUEwOCBURF9QU19TQU1QTEVSMl9DTEVBUlRZUEVfS0VSTkVMCisweDAwMDBBQTBDIFREX1BTX1NBTVBMRVIzX0NMRUFSVFlQRV9LRVJORUwKKzB4MDAwMEFBMTAgVERfUFNfU0FNUExFUjRfQ0xFQVJUWVBFX0tFUk5FTAorMHgwMDAwQUExNCBURF9QU19TQU1QTEVSNV9DTEVBUlRZUEVfS0VSTkVMCisweDAwMDBBQTE4IFREX1BTX1NBTVBMRVI2X0NMRUFSVFlQRV9LRVJORUwKKzB4MDAwMEFBMUMgVERfUFNfU0FNUExFUjdfQ0xFQVJUWVBFX0tFUk5FTAorMHgwMDAwQUEyMCBURF9QU19TQU1QTEVSOF9DTEVBUlRZUEVfS0VSTkVMCisweDAwMDBBQTI0IFREX1BTX1NBTVBMRVI5X0NMRUFSVFlQRV9LRVJORUwKKzB4MDAwMEFBMjggVERfUFNfU0FNUExFUjEwX0NMRUFSVFlQRV9LRVJORUwKKzB4MDAwMEFBMkMgVERfUFNfU0FNUExFUjExX0NMRUFSVFlQRV9LRVJORUwKKzB4MDAwMEFBMzAgVERfUFNfU0FNUExFUjEyX0NMRUFSVFlQRV9LRVJORUwKKzB4MDAwMEFBMzQgVERfUFNfU0FNUExFUjEzX0NMRUFSVFlQRV9LRVJORUwKKzB4MDAwMEFBMzggVERfUFNfU0FNUExFUjE0X0NMRUFSVFlQRV9LRVJORUwKKzB4MDAwMEFBM0MgVERfUFNfU0FNUExFUjE1X0NMRUFSVFlQRV9LRVJORUwKKzB4MDAwMEFBNDAgVERfUFNfU0FNUExFUjE2X0NMRUFSVFlQRV9LRVJORUwKKzB4MDAwMEFBNDQgVERfUFNfU0FNUExFUjE3X0NMRUFSVFlQRV9LRVJORUwKKzB4MDAwMEE2MEMgVERfVlNfU0FNUExFUjBfQk9SREVSX0FMUEhBCisweDAwMDBBNjFDIFREX1ZTX1NBTVBMRVIxX0JPUkRFUl9BTFBIQQorMHgwMDAwQTYyQyBURF9WU19TQU1QTEVSMl9CT1JERVJfQUxQSEEKKzB4MDAwMEE2M0MgVERfVlNfU0FNUExFUjNfQk9SREVSX0FMUEhBCisweDAwMDBBNjRDIFREX1ZTX1NBTVBMRVI0X0JPUkRFUl9BTFBIQQorMHgwMDAwQTY1QyBURF9WU19TQU1QTEVSNV9CT1JERVJfQUxQSEEKKzB4MDAwMEE2NkMgVERfVlNfU0FNUExFUjZfQk9SREVSX0FMUEhBCisweDAwMDBBNjdDIFREX1ZTX1NBTVBMRVI3X0JPUkRFUl9BTFBIQQorMHgwMDAwQTY4QyBURF9WU19TQU1QTEVSOF9CT1JERVJfQUxQSEEKKzB4MDAwMEE2OUMgVERfVlNfU0FNUExFUjlfQk9SREVSX0FMUEhBCisweDAwMDBBNkFDIFREX1ZTX1NBTVBMRVIxMF9CT1JERVJfQUxQSEEKKzB4MDAwMEE2QkMgVERfVlNfU0FNUExFUjExX0JPUkRFUl9BTFBIQQorMHgwMDAwQTZDQyBURF9WU19TQU1QTEVSMTJfQk9SREVSX0FMUEhBCisweDAwMDBBNkRDIFREX1ZTX1NBTVBMRVIxM19CT1JERVJfQUxQSEEKKzB4MDAwMEE2RUMgVERfVlNfU0FNUExFUjE0X0JPUkRFUl9BTFBIQQorMHgwMDAwQTZGQyBURF9WU19TQU1QTEVSMTVfQk9SREVSX0FMUEhBCisweDAwMDBBNzBDIFREX1ZTX1NBTVBMRVIxNl9CT1JERVJfQUxQSEEKKzB4MDAwMEE3MUMgVERfVlNfU0FNUExFUjE3X0JPUkRFUl9BTFBIQQorMHgwMDAwQTYwOCBURF9WU19TQU1QTEVSMF9CT1JERVJfQkxVRQorMHgwMDAwQTYxOCBURF9WU19TQU1QTEVSMV9CT1JERVJfQkxVRQorMHgwMDAwQTYyOCBURF9WU19TQU1QTEVSMl9CT1JERVJfQkxVRQorMHgwMDAwQTYzOCBURF9WU19TQU1QTEVSM19CT1JERVJfQkxVRQorMHgwMDAwQTY0OCBURF9WU19TQU1QTEVSNF9CT1JERVJfQkxVRQorMHgwMDAwQTY1OCBURF9WU19TQU1QTEVSNV9CT1JERVJfQkxVRQorMHgwMDAwQTY2OCBURF9WU19TQU1QTEVSNl9CT1JERVJfQkxVRQorMHgwMDAwQTY3OCBURF9WU19TQU1QTEVSN19CT1JERVJfQkxVRQorMHgwMDAwQTY4OCBURF9WU19TQU1QTEVSOF9CT1JERVJfQkxVRQorMHgwMDAwQTY5OCBURF9WU19TQU1QTEVSOV9CT1JERVJfQkxVRQorMHgwMDAwQTZBOCBURF9WU19TQU1QTEVSMTBfQk9SREVSX0JMVUUKKzB4MDAwMEE2QjggVERfVlNfU0FNUExFUjExX0JPUkRFUl9CTFVFCisweDAwMDBBNkM4IFREX1ZTX1NBTVBMRVIxMl9CT1JERVJfQkxVRQorMHgwMDAwQTZEOCBURF9WU19TQU1QTEVSMTNfQk9SREVSX0JMVUUKKzB4MDAwMEE2RTggVERfVlNfU0FNUExFUjE0X0JPUkRFUl9CTFVFCisweDAwMDBBNkY4IFREX1ZTX1NBTVBMRVIxNV9CT1JERVJfQkxVRQorMHgwMDAwQTcwOCBURF9WU19TQU1QTEVSMTZfQk9SREVSX0JMVUUKKzB4MDAwMEE3MTggVERfVlNfU0FNUExFUjE3X0JPUkRFUl9CTFVFCisweDAwMDBBNjA0IFREX1ZTX1NBTVBMRVIwX0JPUkRFUl9HUkVFTgorMHgwMDAwQTYxNCBURF9WU19TQU1QTEVSMV9CT1JERVJfR1JFRU4KKzB4MDAwMEE2MjQgVERfVlNfU0FNUExFUjJfQk9SREVSX0dSRUVOCisweDAwMDBBNjM0IFREX1ZTX1NBTVBMRVIzX0JPUkRFUl9HUkVFTgorMHgwMDAwQTY0NCBURF9WU19TQU1QTEVSNF9CT1JERVJfR1JFRU4KKzB4MDAwMEE2NTQgVERfVlNfU0FNUExFUjVfQk9SREVSX0dSRUVOCisweDAwMDBBNjY0IFREX1ZTX1NBTVBMRVI2X0JPUkRFUl9HUkVFTgorMHgwMDAwQTY3NCBURF9WU19TQU1QTEVSN19CT1JERVJfR1JFRU4KKzB4MDAwMEE2ODQgVERfVlNfU0FNUExFUjhfQk9SREVSX0dSRUVOCisweDAwMDBBNjk0IFREX1ZTX1NBTVBMRVI5X0JPUkRFUl9HUkVFTgorMHgwMDAwQTZBNCBURF9WU19TQU1QTEVSMTBfQk9SREVSX0dSRUVOCisweDAwMDBBNkI0IFREX1ZTX1NBTVBMRVIxMV9CT1JERVJfR1JFRU4KKzB4MDAwMEE2QzQgVERfVlNfU0FNUExFUjEyX0JPUkRFUl9HUkVFTgorMHgwMDAwQTZENCBURF9WU19TQU1QTEVSMTNfQk9SREVSX0dSRUVOCisweDAwMDBBNkU0IFREX1ZTX1NBTVBMRVIxNF9CT1JERVJfR1JFRU4KKzB4MDAwMEE2RjQgVERfVlNfU0FNUExFUjE1X0JPUkRFUl9HUkVFTgorMHgwMDAwQTcwNCBURF9WU19TQU1QTEVSMTZfQk9SREVSX0dSRUVOCisweDAwMDBBNzE0IFREX1ZTX1NBTVBMRVIxN19CT1JERVJfR1JFRU4KKzB4MDAwMEE2MDAgVERfVlNfU0FNUExFUjBfQk9SREVSX1JFRAorMHgwMDAwQTYxMCBURF9WU19TQU1QTEVSMV9CT1JERVJfUkVECisweDAwMDBBNjIwIFREX1ZTX1NBTVBMRVIyX0JPUkRFUl9SRUQKKzB4MDAwMEE2MzAgVERfVlNfU0FNUExFUjNfQk9SREVSX1JFRAorMHgwMDAwQTY0MCBURF9WU19TQU1QTEVSNF9CT1JERVJfUkVECisweDAwMDBBNjUwIFREX1ZTX1NBTVBMRVI1X0JPUkRFUl9SRUQKKzB4MDAwMEE2NjAgVERfVlNfU0FNUExFUjZfQk9SREVSX1JFRAorMHgwMDAwQTY3MCBURF9WU19TQU1QTEVSN19CT1JERVJfUkVECisweDAwMDBBNjgwIFREX1ZTX1NBTVBMRVI4X0JPUkRFUl9SRUQKKzB4MDAwMEE2OTAgVERfVlNfU0FNUExFUjlfQk9SREVSX1JFRAorMHgwMDAwQTZBMCBURF9WU19TQU1QTEVSMTBfQk9SREVSX1JFRAorMHgwMDAwQTZCMCBURF9WU19TQU1QTEVSMTFfQk9SREVSX1JFRAorMHgwMDAwQTZDMCBURF9WU19TQU1QTEVSMTJfQk9SREVSX1JFRAorMHgwMDAwQTZEMCBURF9WU19TQU1QTEVSMTNfQk9SREVSX1JFRAorMHgwMDAwQTZFMCBURF9WU19TQU1QTEVSMTRfQk9SREVSX1JFRAorMHgwMDAwQTZGMCBURF9WU19TQU1QTEVSMTVfQk9SREVSX1JFRAorMHgwMDAwQTcwMCBURF9WU19TQU1QTEVSMTZfQk9SREVSX1JFRAorMHgwMDAwQTcxMCBURF9WU19TQU1QTEVSMTdfQk9SREVSX1JFRAorMHgwMDAwOTUwOCBUQV9DTlRMX0FVWAorMHgwMDAyODAyQyBEQl9ERVBUSF9DTEVBUgorMHgwMDAyOEQyNCBEQl9IVElMRV9TVVJGQUNFCisweDAwMDI4RDM0IERCX1BSRUZFVENIX0xJTUlUCisweDAwMDI4RDMwIERCX1BSRUxPQURfQ09OVFJPTAorMHgwMDAyOEQwQyBEQl9SRU5ERVJfQ09OVFJPTAorMHgwMDAyOEQxMCBEQl9SRU5ERVJfT1ZFUlJJREUKKzB4MDAwMjg4MEMgREJfU0hBREVSX0NPTlRST0wKKzB4MDAwMjhEMkMgREJfU1JFU1VMVFNfQ09NUEFSRV9TVEFURTEKKzB4MDAwMjg0MzAgREJfU1RFTkNJTFJFRk1BU0sKKzB4MDAwMjg0MzQgREJfU1RFTkNJTFJFRk1BU0tfQkYKKzB4MDAwMjgwMjggREJfU1RFTkNJTF9DTEVBUgorMHgwMDAyODc4MCBDQl9CTEVORDBfQ09OVFJPTAorMHgwMDAyODc4NCBDQl9CTEVORDFfQ09OVFJPTAorMHgwMDAyODc4OCBDQl9CTEVORDJfQ09OVFJPTAorMHgwMDAyODc4QyBDQl9CTEVORDNfQ09OVFJPTAorMHgwMDAyODc5MCBDQl9CTEVORDRfQ09OVFJPTAorMHgwMDAyODc5NCBDQl9CTEVORDVfQ09OVFJPTAorMHgwMDAyODc5OCBDQl9CTEVORDZfQ09OVFJPTAorMHgwMDAyODc5QyBDQl9CTEVORDdfQ09OVFJPTAorMHgwMDAyODgwNCBDQl9CTEVORF9DT05UUk9MCisweDAwMDI4NDIwIENCX0JMRU5EX0FMUEhBCisweDAwMDI4NDFDIENCX0JMRU5EX0JMVUUKKzB4MDAwMjg0MTggQ0JfQkxFTkRfR1JFRU4KKzB4MDAwMjg0MTQgQ0JfQkxFTkRfUkVECisweDAwMDI4MTJDIENCX0NMRUFSX0FMUEhBCisweDAwMDI4MTI4IENCX0NMRUFSX0JMVUUKKzB4MDAwMjgxMjQgQ0JfQ0xFQVJfR1JFRU4KKzB4MDAwMjgxMjAgQ0JfQ0xFQVJfUkVECisweDAwMDI4QzMwIENCX0NMUkNNUF9DT05UUk9MCisweDAwMDI4QzM4IENCX0NMUkNNUF9EU1QKKzB4MDAwMjhDM0MgQ0JfQ0xSQ01QX01TSworMHgwMDAyOEMzNCBDQl9DTFJDTVBfU1JDCisweDAwMDI4MTAwIENCX0NPTE9SMF9NQVNLCisweDAwMDI4MTA0IENCX0NPTE9SMV9NQVNLCisweDAwMDI4MTA4IENCX0NPTE9SMl9NQVNLCisweDAwMDI4MTBDIENCX0NPTE9SM19NQVNLCisweDAwMDI4MTEwIENCX0NPTE9SNF9NQVNLCisweDAwMDI4MTE0IENCX0NPTE9SNV9NQVNLCisweDAwMDI4MTE4IENCX0NPTE9SNl9NQVNLCisweDAwMDI4MTFDIENCX0NPTE9SN19NQVNLCisweDAwMDI4MDgwIENCX0NPTE9SMF9WSUVXCisweDAwMDI4MDg0IENCX0NPTE9SMV9WSUVXCisweDAwMDI4MDg4IENCX0NPTE9SMl9WSUVXCisweDAwMDI4MDhDIENCX0NPTE9SM19WSUVXCisweDAwMDI4MDkwIENCX0NPTE9SNF9WSUVXCisweDAwMDI4MDk0IENCX0NPTE9SNV9WSUVXCisweDAwMDI4MDk4IENCX0NPTE9SNl9WSUVXCisweDAwMDI4MDlDIENCX0NPTE9SN19WSUVXCisweDAwMDI4ODA4IENCX0NPTE9SX0NPTlRST0wKKzB4MDAwMjg0MkMgQ0JfRk9HX0JMVUUKKzB4MDAwMjg0MjggQ0JfRk9HX0dSRUVOCisweDAwMDI4NDI0IENCX0ZPR19SRUQKKzB4MDAwMDgwNDAgV0FJVF9VTlRJTAorMHgwMDAwODk1MCBDQ19HQ19TSEFERVJfUElQRV9DT05GSUcKKzB4MDAwMDg5NTQgR0NfVVNFUl9TSEFERVJfUElQRV9DT05GSUcKKzB4MDAwMDk3MTQgVkNfRU5IQU5DRQorMHgwMDAwOTgzMCBEQl9ERUJVRworMHgwMDAwOTgzOCBEQl9XQVRFUk1BUktTCisweDAwMDI4RDI4IERCX1NSRVNVTFRTX0NPTVBBUkVfU1RBVEUwCisweDAwMDI4RDQ0IERCX0FMUEhBX1RPX01BU0sKKzB4MDAwMDk1MDQgVEFfQ05UTAorMHgwMDAwOTcwMCBWQ19DTlRMCisweDAwMDA5NzE4IFZDX0NPTkZJRworMHgwMDAwQTAyQyBTTVhfRENfTUNfSU5URl9DVEwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM0MDAuYwppbmRleCAyODdmY2ViLi42MjZkNTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNDAwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczQwMC5jCkBAIC0xMTMsNiArMTEzLDcgQEAKIAl1aW50MzJfdCBzaXplX3JlZzsKIAl1aW50MzJfdCB0bXA7CiAKKwlyYWRlb25fZ2FydF9yZXN0b3JlKHJkZXYpOwogCXRtcCA9IFJSRUczMl9NQyhSUzY5MF9BSUNfQ1RSTF9TQ1JBVENIKTsKIAl0bXAgfD0gUlM2OTBfRElTX09VVF9PRl9QQ0lfR0FSVF9BQ0NFU1M7CiAJV1JFRzMyX01DKFJTNjkwX0FJQ19DVFJMX1NDUkFUQ0gsIHRtcCk7CkBAIC0xNTAsOSArMTUxLDggQEAKIAkJV1JFRzMyKFJBREVPTl9BR1BfQkFTRSwgMHhGRkZGRkZGRik7CiAJCVdSRUczMihSUzQ4MF9BR1BfQkFTRV8yLCAwKTsKIAl9Ci0JdG1wID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uICsgcmRldi0+bWMuZ3R0X3NpemUgLSAxOwotCXRtcCA9IFJFR19TRVQoUlM2OTBfTUNfQUdQX1RPUCwgdG1wID4+IDE2KTsKLQl0bXAgfD0gUkVHX1NFVChSUzY5MF9NQ19BR1BfU1RBUlQsIHJkZXYtPm1jLmd0dF9sb2NhdGlvbiA+PiAxNik7CisJdG1wID0gUkVHX1NFVChSUzY5MF9NQ19BR1BfVE9QLCByZGV2LT5tYy5ndHRfZW5kID4+IDE2KTsKKwl0bXAgfD0gUkVHX1NFVChSUzY5MF9NQ19BR1BfU1RBUlQsIHJkZXYtPm1jLmd0dF9zdGFydCA+PiAxNik7CiAJaWYgKChyZGV2LT5mYW1pbHkgPT0gQ0hJUF9SUzY5MCkgfHwgKHJkZXYtPmZhbWlseSA9PSBDSElQX1JTNzQwKSkgewogCQlXUkVHMzJfTUMoUlM2OTBfTUNDRkdfQUdQX0xPQ0FUSU9OLCB0bXApOwogCQl0bXAgPSBSUkVHMzIoUkFERU9OX0JVU19DTlRMKSAmIH5SUzYwMF9CVVNfTUFTVEVSX0RJUzsKQEAgLTI1MSwxNCArMjUxLDE5IEBACiAJfQogfQogCi12b2lkIHJzNDAwX3ZyYW1faW5mbyhzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKK3ZvaWQgcnM0MDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKIHsKKwl1NjQgYmFzZTsKKwogCXJzNDAwX2dhcnRfYWRqdXN0X3NpemUocmRldik7CisJcmRldi0+bWMuaWdwX3NpZGVwb3J0X2VuYWJsZWQgPSByYWRlb25fY29tYmlvc19zaWRlcG9ydF9wcmVzZW50KHJkZXYpOwogCS8qIEREUiBmb3IgYWxsIGNhcmQgYWZ0ZXIgUjMwMCAmIElHUCAqLwogCXJkZXYtPm1jLnZyYW1faXNfZGRyID0gdHJ1ZTsKIAlyZGV2LT5tYy52cmFtX3dpZHRoID0gMTI4OwotCiAJcjEwMF92cmFtX2luaXRfc2l6ZXMocmRldik7CisJYmFzZSA9IChSUkVHMzIoUkFERU9OX05CX1RPTSkgJiAweGZmZmYpIDw8IDE2OworCXJhZGVvbl92cmFtX2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYywgYmFzZSk7CisJcmFkZW9uX2d0dF9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMpOwogfQogCiB1aW50MzJfdCByczQwMF9tY19ycmVnKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCB1aW50MzJfdCByZWcpCkBAIC0zNjIsMjIgKzM2Nyw2IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIGludCByczQwMF9tY19pbml0KHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQotewotCWludCByOwotCXUzMiB0bXA7Ci0KLQkvKiBTZXR1cCBHUFUgbWVtb3J5IHNwYWNlICovCi0JdG1wID0gUlJFRzMyKFJfMDAwMTVDX05CX1RPTSk7Ci0JcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IEdfMDAwMTVDX01DX0ZCX1NUQVJUKHRtcCkgPDwgMTY7Ci0JcmRldi0+bWMuZ3R0X2xvY2F0aW9uID0gMHhGRkZGRkZGRlVMOwotCXIgPSByYWRlb25fbWNfc2V0dXAocmRldik7Ci0JcmRldi0+bWMuaWdwX3NpZGVwb3J0X2VuYWJsZWQgPSByYWRlb25fY29tYmlvc19zaWRlcG9ydF9wcmVzZW50KHJkZXYpOwotCWlmIChyKQotCQlyZXR1cm4gcjsKLQlyZXR1cm4gMDsKLX0KLQogdm9pZCByczQwMF9tY19wcm9ncmFtKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQogewogCXN0cnVjdCByMTAwX21jX3NhdmUgc2F2ZTsKQEAgLTUxNiwxMiArNTA1LDggQEAKIAlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CiAJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCiAJcmFkZW9uX3BtX2luaXQocmRldik7Ci0JLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCi0JcnM0MDBfdnJhbV9pbmZvKHJkZXYpOwotCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCi0JciA9IHJzNDAwX21jX2luaXQocmRldik7Ci0JaWYgKHIpCi0JCXJldHVybiByOworCS8qIGluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKi8KKwlyczQwMF9tY19pbml0KHJkZXYpOwogCS8qIEZlbmNlIGRyaXZlciAqLwogCXIgPSByYWRlb25fZmVuY2VfZHJpdmVyX2luaXQocmRldik7CiAJaWYgKHIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjAwLmMKaW5kZXggYzM4MTg1Ni4uNDdmMDQ2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczYwMC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2MDAuYwpAQCAtNDUsMjMgKzQ1LDYgQEAKIHZvaWQgcnM2MDBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogaW50IHJzNjAwX21jX3dhaXRfZm9yX2lkbGUoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpOwogCi1pbnQgcnM2MDBfbWNfaW5pdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldikKLXsKLQkvKiByZWFkIGJhY2sgdGhlIE1DIHZhbHVlIGZyb20gdGhlIGh3ICovCi0JaW50IHI7Ci0JdTMyIHRtcDsKLQotCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQl0bXAgPSBSUkVHMzJfTUMoUl8wMDAwMDRfTUNfRkJfTE9DQVRJT04pOwotCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSBHXzAwMDAwNF9NQ19GQl9TVEFSVCh0bXApIDw8IDE2OwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDB4ZmZmZmZmZmZVTDsKLQlyID0gcmFkZW9uX21jX3NldHVwKHJkZXYpOwotCXJkZXYtPm1jLmlncF9zaWRlcG9ydF9lbmFibGVkID0gcmFkZW9uX2F0b21iaW9zX3NpZGVwb3J0X3ByZXNlbnQocmRldik7Ci0JaWYgKHIpCi0JCXJldHVybiByOwotCXJldHVybiAwOwotfQotCiAvKiBocGQgZm9yIGRpZ2l0YWwgcGFuZWwgZGV0ZWN0L2Rpc2Nvbm5lY3QgKi8KIGJvb2wgcnM2MDBfaHBkX3NlbnNlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2LCBlbnVtIHJhZGVvbl9ocGRfaWQgaHBkKQogewpAQCAtMjEzLDYgKzE5Niw3IEBACiAJciA9IHJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fcGluKHJkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKKwlyYWRlb25fZ2FydF9yZXN0b3JlKHJkZXYpOwogCS8qIEVuYWJsZSBidXMgbWFzdGVyICovCiAJdG1wID0gUlJFRzMyKFJfMDAwMDRDX0JVU19DTlRMKSAmIENfMDAwMDRDX0JVU19NQVNURVJfRElTOwogCVdSRUczMihSXzAwMDA0Q19CVVNfQ05UTCwgdG1wKTsKQEAgLTQwNiwxMCArMzkwLDE0IEBACiAJCWlmIChHXzAwMDA0NF9TV19JTlQoc3RhdHVzKSkKIAkJCXJhZGVvbl9mZW5jZV9wcm9jZXNzKHJkZXYpOwogCQkvKiBWZXJ0aWNhbCBibGFuayBpbnRlcnJ1cHRzICovCi0JCWlmIChHXzAwN0VEQ19MQl9EMV9WQkxBTktfSU5URVJSVVBUKHI1MDBfZGlzcF9pbnQpKQorCQlpZiAoR18wMDdFRENfTEJfRDFfVkJMQU5LX0lOVEVSUlVQVChyNTAwX2Rpc3BfaW50KSkgewogCQkJZHJtX2hhbmRsZV92YmxhbmsocmRldi0+ZGRldiwgMCk7Ci0JCWlmIChHXzAwN0VEQ19MQl9EMl9WQkxBTktfSU5URVJSVVBUKHI1MDBfZGlzcF9pbnQpKQorCQkJd2FrZV91cCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7CisJCX0KKwkJaWYgKEdfMDA3RURDX0xCX0QyX1ZCTEFOS19JTlRFUlJVUFQocjUwMF9kaXNwX2ludCkpIHsKIAkJCWRybV9oYW5kbGVfdmJsYW5rKHJkZXYtPmRkZXYsIDEpOworCQkJd2FrZV91cCgmcmRldi0+aXJxLnZibGFua19xdWV1ZSk7CisJCX0KIAkJaWYgKEdfMDA3RURDX0RDX0hPVF9QTFVHX0RFVEVDVDFfSU5URVJSVVBUKHI1MDBfZGlzcF9pbnQpKSB7CiAJCQlxdWV1ZV9ob3RwbHVnID0gdHJ1ZTsKIAkJCURSTV9ERUJVRygiSFBEMVxuIik7CkBAIC00NzAsMjIgKzQ1OCwyMiBAQAogCQlkZXZfd2FybihyZGV2LT5kZXYsICJXYWl0IE1DIGlkbGUgdGltZW91dCBiZWZvcmUgdXBkYXRpbmcgTUMuXG4iKTsKIH0KIAotdm9pZCByczYwMF92cmFtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHJzNjAwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7Ci0JcmRldi0+bWMudnJhbV9pc19kZHIgPSB0cnVlOwotCXJkZXYtPm1jLnZyYW1fd2lkdGggPSAxMjg7Ci0KLQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IFJSRUczMihSQURFT05fQ09ORklHX01FTVNJWkUpOwotCXJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplOworCXU2NCBiYXNlOwogCiAJcmRldi0+bWMuYXBlcl9iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChyZGV2LT5kZGV2LCAwKTsKIAlyZGV2LT5tYy5hcGVyX3NpemUgPSBkcm1fZ2V0X3Jlc291cmNlX2xlbihyZGV2LT5kZGV2LCAwKTsKLQotCWlmIChyZGV2LT5tYy5tY192cmFtX3NpemUgPiByZGV2LT5tYy5hcGVyX3NpemUpCi0JCXJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKLQotCWlmIChyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA+IHJkZXYtPm1jLmFwZXJfc2l6ZSkKLQkJcmRldi0+bWMucmVhbF92cmFtX3NpemUgPSByZGV2LT5tYy5hcGVyX3NpemU7CisJcmRldi0+bWMudnJhbV9pc19kZHIgPSB0cnVlOworCXJkZXYtPm1jLnZyYW1fd2lkdGggPSAxMjg7CisJcmRldi0+bWMucmVhbF92cmFtX3NpemUgPSBSUkVHMzIoUkFERU9OX0NPTkZJR19NRU1TSVpFKTsKKwlyZGV2LT5tYy5tY192cmFtX3NpemUgPSByZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZTsKKwlyZGV2LT5tYy52aXNpYmxlX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKKwlyZGV2LT5tYy5pZ3Bfc2lkZXBvcnRfZW5hYmxlZCA9IHJhZGVvbl9hdG9tYmlvc19zaWRlcG9ydF9wcmVzZW50KHJkZXYpOworCWJhc2UgPSBSUkVHMzJfTUMoUl8wMDAwMDRfTUNfRkJfTE9DQVRJT04pOworCWJhc2UgPSBHXzAwMDAwNF9NQ19GQl9TVEFSVChiYXNlKSA8PCAxNjsKKwlyYWRlb25fdnJhbV9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMsIGJhc2UpOworCXJhZGVvbl9ndHRfbG9jYXRpb24ocmRldiwgJnJkZXYtPm1jKTsKIH0KIAogdm9pZCByczYwMF9iYW5kd2lkdGhfdXBkYXRlKHN0cnVjdCByYWRlb25fZGV2aWNlICpyZGV2KQpAQCAtNjYxLDEyICs2NDksOCBAQAogCXJhZGVvbl9nZXRfY2xvY2tfaW5mbyhyZGV2LT5kZGV2KTsKIAkvKiBJbml0aWFsaXplIHBvd2VyIG1hbmFnZW1lbnQgKi8KIAlyYWRlb25fcG1faW5pdChyZGV2KTsKLQkvKiBHZXQgdnJhbSBpbmZvcm1hdGlvbnMgKi8KLQlyczYwMF92cmFtX2luZm8ocmRldik7Ci0JLyogSW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAoYWxzbyB0ZXN0IEFHUCkgKi8KLQlyID0gcnM2MDBfbWNfaW5pdChyZGV2KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7CisJLyogaW5pdGlhbGl6ZSBtZW1vcnkgY29udHJvbGxlciAqLworCXJzNjAwX21jX2luaXQocmRldik7CiAJcnM2MDBfZGVidWdmcyhyZGV2KTsKIAkvKiBGZW5jZSBkcml2ZXIgKi8KIAlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yczY5MC5jCmluZGV4IDA2ZTI3NzEuLjgzYjkxNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnM2OTAuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JzNjkwLmMKQEAgLTEyOSwyNyArMTI5LDIxIEBACiAJcmRldi0+cG0uc2lkZXBvcnRfYmFuZHdpZHRoLmZ1bGwgPSByZml4ZWRfZGl2KHJkZXYtPnBtLnNpZGVwb3J0X2JhbmR3aWR0aCwgdG1wKTsKIH0KIAotdm9pZCByczY5MF92cmFtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHJzNjkwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJZml4ZWQyMF8xMiBhOworCXU2NCBiYXNlOwogCiAJcnM0MDBfZ2FydF9hZGp1c3Rfc2l6ZShyZGV2KTsKLQogCXJkZXYtPm1jLnZyYW1faXNfZGRyID0gdHJ1ZTsKIAlyZGV2LT5tYy52cmFtX3dpZHRoID0gMTI4OwotCiAJcmRldi0+bWMucmVhbF92cmFtX3NpemUgPSBSUkVHMzIoUkFERU9OX0NPTkZJR19NRU1TSVpFKTsKIAlyZGV2LT5tYy5tY192cmFtX3NpemUgPSByZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZTsKLQogCXJkZXYtPm1jLmFwZXJfYmFzZSA9IGRybV9nZXRfcmVzb3VyY2Vfc3RhcnQocmRldi0+ZGRldiwgMCk7CiAJcmRldi0+bWMuYXBlcl9zaXplID0gZHJtX2dldF9yZXNvdXJjZV9sZW4ocmRldi0+ZGRldiwgMCk7Ci0KLQlpZiAocmRldi0+bWMubWNfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKQotCQlyZGV2LT5tYy5tY192cmFtX3NpemUgPSByZGV2LT5tYy5hcGVyX3NpemU7Ci0KLQlpZiAocmRldi0+bWMucmVhbF92cmFtX3NpemUgPiByZGV2LT5tYy5hcGVyX3NpemUpCi0JCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOwotCisJcmRldi0+bWMudmlzaWJsZV92cmFtX3NpemUgPSByZGV2LT5tYy5hcGVyX3NpemU7CisJYmFzZSA9IFJSRUczMl9NQyhSXzAwMDEwMF9NQ0NGR19GQl9MT0NBVElPTik7CisJYmFzZSA9IEdfMDAwMTAwX01DX0ZCX1NUQVJUKGJhc2UpIDw8IDE2OwogCXJzNjkwX3BtX2luZm8ocmRldik7CiAJLyogRklYTUU6IHdlIHNob3VsZCBlbmZvcmNlIGRlZmF1bHQgY2xvY2sgaW4gY2FzZSBHUFUgaXMgbm90IGluCiAJICogZGVmYXVsdCBzZXR1cApAQCAtMTYwLDIyICsxNTQsOSBAQAogCWEuZnVsbCA9IHJmaXhlZF9jb25zdCgxNik7CiAJLyogY29yZV9iYW5kd2lkdGggPSBzY2xrKE1oeikgKiAxNiAqLwogCXJkZXYtPnBtLmNvcmVfYmFuZHdpZHRoLmZ1bGwgPSByZml4ZWRfZGl2KHJkZXYtPnBtLnNjbGssIGEpOwotfQotCi1zdGF0aWMgaW50IHJzNjkwX21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCi17Ci0JaW50IHI7Ci0JdTMyIHRtcDsKLQotCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KLQl0bXAgPSBSUkVHMzJfTUMoUl8wMDAxMDBfTUNDRkdfRkJfTE9DQVRJT04pOwotCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSBHXzAwMDEwMF9NQ19GQl9TVEFSVCh0bXApIDw8IDE2OwotCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IDB4RkZGRkZGRkZVTDsKLQlyID0gcmFkZW9uX21jX3NldHVwKHJkZXYpOwogCXJkZXYtPm1jLmlncF9zaWRlcG9ydF9lbmFibGVkID0gcmFkZW9uX2F0b21iaW9zX3NpZGVwb3J0X3ByZXNlbnQocmRldik7Ci0JaWYgKHIpCi0JCXJldHVybiByOwotCXJldHVybiAwOworCXJhZGVvbl92cmFtX2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYywgYmFzZSk7CisJcmFkZW9uX2d0dF9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMpOwogfQogCiB2b2lkIHJzNjkwX2xpbmVfYnVmZmVyX2FkanVzdChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKQEAgLTcyOCwxMiArNzA5LDggQEAKIAlyYWRlb25fZ2V0X2Nsb2NrX2luZm8ocmRldi0+ZGRldik7CiAJLyogSW5pdGlhbGl6ZSBwb3dlciBtYW5hZ2VtZW50ICovCiAJcmFkZW9uX3BtX2luaXQocmRldik7Ci0JLyogR2V0IHZyYW0gaW5mb3JtYXRpb25zICovCi0JcnM2OTBfdnJhbV9pbmZvKHJkZXYpOwotCS8qIEluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKGFsc28gdGVzdCBBR1ApICovCi0JciA9IHJzNjkwX21jX2luaXQocmRldik7Ci0JaWYgKHIpCi0JCXJldHVybiByOworCS8qIGluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKi8KKwlyczY5MF9tY19pbml0KHJkZXYpOwogCXJ2NTE1X2RlYnVnZnMocmRldik7CiAJLyogRmVuY2UgZHJpdmVyICovCiAJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY1MTUuYwppbmRleCAwZTFlNmI4Li5iZWE3NDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NTE1LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjUxNS5jCkBAIC0yNzcsMTMgKzI3NywxNSBAQAogCX0KIH0KIAotdm9pZCBydjUxNV92cmFtX2luZm8oc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCit2b2lkIHJ2NTE1X21jX2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJZml4ZWQyMF8xMiBhOwogCiAJcnY1MTVfdnJhbV9nZXRfdHlwZShyZGV2KTsKLQogCXIxMDBfdnJhbV9pbml0X3NpemVzKHJkZXYpOworCXJhZGVvbl92cmFtX2xvY2F0aW9uKHJkZXYsICZyZGV2LT5tYywgMCk7CisJaWYgKCEocmRldi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSkKKwkJcmFkZW9uX2d0dF9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMpOwogCS8qIEZJWE1FOiB3ZSBzaG91bGQgZW5mb3JjZSBkZWZhdWx0IGNsb2NrIGluIGNhc2UgR1BVIGlzIG5vdCBpbgogCSAqIGRlZmF1bHQgc2V0dXAKIAkgKi8KQEAgLTU4NywxMiArNTg5LDE1IEBACiAJcmFkZW9uX2dldF9jbG9ja19pbmZvKHJkZXYtPmRkZXYpOwogCS8qIEluaXRpYWxpemUgcG93ZXIgbWFuYWdlbWVudCAqLwogCXJhZGVvbl9wbV9pbml0KHJkZXYpOwotCS8qIEdldCB2cmFtIGluZm9ybWF0aW9ucyAqLwotCXJ2NTE1X3ZyYW1faW5mbyhyZGV2KTsKLQkvKiBJbml0aWFsaXplIG1lbW9yeSBjb250cm9sbGVyIChhbHNvIHRlc3QgQUdQKSAqLwotCXIgPSByNDIwX21jX2luaXQocmRldik7Ci0JaWYgKHIpCi0JCXJldHVybiByOworCS8qIGluaXRpYWxpemUgQUdQICovCisJaWYgKHJkZXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQlyID0gcmFkZW9uX2FncF9pbml0KHJkZXYpOworCQlpZiAocikgeworCQkJcmFkZW9uX2FncF9kaXNhYmxlKHJkZXYpOworCQl9CisJfQorCS8qIGluaXRpYWxpemUgbWVtb3J5IGNvbnRyb2xsZXIgKi8KKwlydjUxNV9tY19pbml0KHJkZXYpOwogCXJ2NTE1X2RlYnVnZnMocmRldik7CiAJLyogRmVuY2UgZHJpdmVyICovCiAJciA9IHJhZGVvbl9mZW5jZV9kcml2ZXJfaW5pdChyZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzAuYwppbmRleCAwMzAyMTY3Li4zNzg4N2RlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MC5jCkBAIC01Niw2ICs1Niw3IEBACiAJciA9IHJhZGVvbl9nYXJ0X3RhYmxlX3ZyYW1fcGluKHJkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKKwlyYWRlb25fZ2FydF9yZXN0b3JlKHJkZXYpOwogCS8qIFNldHVwIEwyIGNhY2hlICovCiAJV1JFRzMyKFZNX0wyX0NOVEwsIEVOQUJMRV9MMl9DQUNIRSB8IEVOQUJMRV9MMl9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKIAkJCQlFTkFCTEVfTDJfUFRFX0NBQ0hFX0xSVV9VUERBVEVfQllfV1JJVEUgfApAQCAtMjczLDkgKzI3NCwxMCBAQAogLyoKICAqIENvcmUgZnVuY3Rpb25zCiAgKi8KLXN0YXRpYyB1MzIgcjcwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKHUzMiBudW1fdGlsZV9waXBlcywKLQkJCQkJCXUzMiBudW1fYmFja2VuZHMsCi0JCQkJCQl1MzIgYmFja2VuZF9kaXNhYmxlX21hc2spCitzdGF0aWMgdTMyIHI3MDBfZ2V0X3RpbGVfcGlwZV90b19iYWNrZW5kX21hcChzdHJ1Y3QgcmFkZW9uX2RldmljZSAqcmRldiwKKwkJCQkJICAgICB1MzIgbnVtX3RpbGVfcGlwZXMsCisJCQkJCSAgICAgdTMyIG51bV9iYWNrZW5kcywKKwkJCQkJICAgICB1MzIgYmFja2VuZF9kaXNhYmxlX21hc2spCiB7CiAJdTMyIGJhY2tlbmRfbWFwID0gMDsKIAl1MzIgZW5hYmxlZF9iYWNrZW5kc19tYXNrOwpAQCAtMjg0LDYgKzI4Niw3IEBACiAJdTMyIHN3aXp6bGVfcGlwZVtSN1hYX01BWF9QSVBFU107CiAJdTMyIGN1cl9iYWNrZW5kOwogCXUzMiBpOworCWJvb2wgZm9yY2Vfbm9fc3dpenpsZTsKIAogCWlmIChudW1fdGlsZV9waXBlcyA+IFI3WFhfTUFYX1BJUEVTKQogCQludW1fdGlsZV9waXBlcyA9IFI3WFhfTUFYX1BJUEVTOwpAQCAtMzEzLDYgKzMxNiwxOCBAQAogCWlmIChlbmFibGVkX2JhY2tlbmRzX2NvdW50ICE9IG51bV9iYWNrZW5kcykKIAkJbnVtX2JhY2tlbmRzID0gZW5hYmxlZF9iYWNrZW5kc19jb3VudDsKIAorCXN3aXRjaCAocmRldi0+ZmFtaWx5KSB7CisJY2FzZSBDSElQX1JWNzcwOgorCWNhc2UgQ0hJUF9SVjczMDoKKwkJZm9yY2Vfbm9fc3dpenpsZSA9IGZhbHNlOworCQlicmVhazsKKwljYXNlIENISVBfUlY3MTA6CisJY2FzZSBDSElQX1JWNzQwOgorCWRlZmF1bHQ6CisJCWZvcmNlX25vX3N3aXp6bGUgPSB0cnVlOworCQlicmVhazsKKwl9CisKIAltZW1zZXQoKHVpbnQ4X3QgKikmc3dpenpsZV9waXBlWzBdLCAwLCBzaXplb2YodTMyKSAqIFI3WFhfTUFYX1BJUEVTKTsKIAlzd2l0Y2ggKG51bV90aWxlX3BpcGVzKSB7CiAJY2FzZSAxOgpAQCAtMzIzLDQ5ICszMzgsMTAwIEBACiAJCXN3aXp6bGVfcGlwZVsxXSA9IDE7CiAJCWJyZWFrOwogCWNhc2UgMzoKLQkJc3dpenpsZV9waXBlWzBdID0gMDsKLQkJc3dpenpsZV9waXBlWzFdID0gMjsKLQkJc3dpenpsZV9waXBlWzJdID0gMTsKKwkJaWYgKGZvcmNlX25vX3N3aXp6bGUpIHsKKwkJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQkJc3dpenpsZV9waXBlWzJdID0gMjsKKwkJfSBlbHNlIHsKKwkJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCQlzd2l6emxlX3BpcGVbMV0gPSAyOworCQkJc3dpenpsZV9waXBlWzJdID0gMTsKKwkJfQogCQlicmVhazsKIAljYXNlIDQ6Ci0JCXN3aXp6bGVfcGlwZVswXSA9IDA7Ci0JCXN3aXp6bGVfcGlwZVsxXSA9IDI7Ci0JCXN3aXp6bGVfcGlwZVsyXSA9IDM7Ci0JCXN3aXp6bGVfcGlwZVszXSA9IDE7CisJCWlmIChmb3JjZV9ub19zd2l6emxlKSB7CisJCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQkJc3dpenpsZV9waXBlWzFdID0gMTsKKwkJCXN3aXp6bGVfcGlwZVsyXSA9IDI7CisJCQlzd2l6emxlX3BpcGVbM10gPSAzOworCQl9IGVsc2UgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCQlzd2l6emxlX3BpcGVbMl0gPSAzOworCQkJc3dpenpsZV9waXBlWzNdID0gMTsKKwkJfQogCQlicmVhazsKIAljYXNlIDU6Ci0JCXN3aXp6bGVfcGlwZVswXSA9IDA7Ci0JCXN3aXp6bGVfcGlwZVsxXSA9IDI7Ci0JCXN3aXp6bGVfcGlwZVsyXSA9IDQ7Ci0JCXN3aXp6bGVfcGlwZVszXSA9IDE7Ci0JCXN3aXp6bGVfcGlwZVs0XSA9IDM7CisJCWlmIChmb3JjZV9ub19zd2l6emxlKSB7CisJCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQkJc3dpenpsZV9waXBlWzFdID0gMTsKKwkJCXN3aXp6bGVfcGlwZVsyXSA9IDI7CisJCQlzd2l6emxlX3BpcGVbM10gPSAzOworCQkJc3dpenpsZV9waXBlWzRdID0gNDsKKwkJfSBlbHNlIHsKKwkJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCQlzd2l6emxlX3BpcGVbMV0gPSAyOworCQkJc3dpenpsZV9waXBlWzJdID0gNDsKKwkJCXN3aXp6bGVfcGlwZVszXSA9IDE7CisJCQlzd2l6emxlX3BpcGVbNF0gPSAzOworCQl9CiAJCWJyZWFrOwogCWNhc2UgNjoKLQkJc3dpenpsZV9waXBlWzBdID0gMDsKLQkJc3dpenpsZV9waXBlWzFdID0gMjsKLQkJc3dpenpsZV9waXBlWzJdID0gNDsKLQkJc3dpenpsZV9waXBlWzNdID0gNTsKLQkJc3dpenpsZV9waXBlWzRdID0gMzsKLQkJc3dpenpsZV9waXBlWzVdID0gMTsKKwkJaWYgKGZvcmNlX25vX3N3aXp6bGUpIHsKKwkJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQkJc3dpenpsZV9waXBlWzJdID0gMjsKKwkJCXN3aXp6bGVfcGlwZVszXSA9IDM7CisJCQlzd2l6emxlX3BpcGVbNF0gPSA0OworCQkJc3dpenpsZV9waXBlWzVdID0gNTsKKwkJfSBlbHNlIHsKKwkJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCQlzd2l6emxlX3BpcGVbMV0gPSAyOworCQkJc3dpenpsZV9waXBlWzJdID0gNDsKKwkJCXN3aXp6bGVfcGlwZVszXSA9IDU7CisJCQlzd2l6emxlX3BpcGVbNF0gPSAzOworCQkJc3dpenpsZV9waXBlWzVdID0gMTsKKwkJfQogCQlicmVhazsKIAljYXNlIDc6Ci0JCXN3aXp6bGVfcGlwZVswXSA9IDA7Ci0JCXN3aXp6bGVfcGlwZVsxXSA9IDI7Ci0JCXN3aXp6bGVfcGlwZVsyXSA9IDQ7Ci0JCXN3aXp6bGVfcGlwZVszXSA9IDY7Ci0JCXN3aXp6bGVfcGlwZVs0XSA9IDM7Ci0JCXN3aXp6bGVfcGlwZVs1XSA9IDE7Ci0JCXN3aXp6bGVfcGlwZVs2XSA9IDU7CisJCWlmIChmb3JjZV9ub19zd2l6emxlKSB7CisJCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQkJc3dpenpsZV9waXBlWzFdID0gMTsKKwkJCXN3aXp6bGVfcGlwZVsyXSA9IDI7CisJCQlzd2l6emxlX3BpcGVbM10gPSAzOworCQkJc3dpenpsZV9waXBlWzRdID0gNDsKKwkJCXN3aXp6bGVfcGlwZVs1XSA9IDU7CisJCQlzd2l6emxlX3BpcGVbNl0gPSA2OworCQl9IGVsc2UgeworCQkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQkJc3dpenpsZV9waXBlWzNdID0gNjsKKwkJCXN3aXp6bGVfcGlwZVs0XSA9IDM7CisJCQlzd2l6emxlX3BpcGVbNV0gPSAxOworCQkJc3dpenpsZV9waXBlWzZdID0gNTsKKwkJfQogCQlicmVhazsKIAljYXNlIDg6Ci0JCXN3aXp6bGVfcGlwZVswXSA9IDA7Ci0JCXN3aXp6bGVfcGlwZVsxXSA9IDI7Ci0JCXN3aXp6bGVfcGlwZVsyXSA9IDQ7Ci0JCXN3aXp6bGVfcGlwZVszXSA9IDY7Ci0JCXN3aXp6bGVfcGlwZVs0XSA9IDM7Ci0JCXN3aXp6bGVfcGlwZVs1XSA9IDE7Ci0JCXN3aXp6bGVfcGlwZVs2XSA9IDc7Ci0JCXN3aXp6bGVfcGlwZVs3XSA9IDU7CisJCWlmIChmb3JjZV9ub19zd2l6emxlKSB7CisJCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQkJc3dpenpsZV9waXBlWzFdID0gMTsKKwkJCXN3aXp6bGVfcGlwZVsyXSA9IDI7CisJCQlzd2l6emxlX3BpcGVbM10gPSAzOworCQkJc3dpenpsZV9waXBlWzRdID0gNDsKKwkJCXN3aXp6bGVfcGlwZVs1XSA9IDU7CisJCQlzd2l6emxlX3BpcGVbNl0gPSA2OworCQkJc3dpenpsZV9waXBlWzddID0gNzsKKwkJfSBlbHNlIHsKKwkJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCQlzd2l6emxlX3BpcGVbMV0gPSAyOworCQkJc3dpenpsZV9waXBlWzJdID0gNDsKKwkJCXN3aXp6bGVfcGlwZVszXSA9IDY7CisJCQlzd2l6emxlX3BpcGVbNF0gPSAzOworCQkJc3dpenpsZV9waXBlWzVdID0gMTsKKwkJCXN3aXp6bGVfcGlwZVs2XSA9IDc7CisJCQlzd2l6emxlX3BpcGVbN10gPSA1OworCQl9CiAJCWJyZWFrOwogCX0KIApAQCAtMzg1LDggKzQ1MSwxMCBAQAogc3RhdGljIHZvaWQgcnY3NzBfZ3B1X2luaXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJaW50IGksIGosIG51bV9xZF9waXBlczsKKwl1MzIgdGFfYXV4X2NudGw7CiAJdTMyIHN4X2RlYnVnXzE7CiAJdTMyIHNteF9kY19jdGwwOworCXUzMiBkYl9kZWJ1ZzM7CiAJdTMyIG51bV9nc192ZXJ0c19wZXJfdGhyZWFkOwogCXUzMiB2Z3RfZ3NfcGVyX2VzOwogCXUzMiBnc19wcmltX2J1ZmZlcl9kZXB0aCA9IDA7CkBAIC01MTUsNiArNTgzLDcgQEAKIAogCXN3aXRjaCAocmRldi0+Y29uZmlnLnJ2NzcwLm1heF90aWxlX3BpcGVzKSB7CiAJY2FzZSAxOgorCWRlZmF1bHQ6CiAJCWdiX3RpbGluZ19jb25maWcgfD0gUElQRV9USUxJTkcoMCk7CiAJCWJyZWFrOwogCWNhc2UgMjoKQEAgLTUyNiwxNiArNTk1LDE3IEBACiAJY2FzZSA4OgogCQlnYl90aWxpbmdfY29uZmlnIHw9IFBJUEVfVElMSU5HKDMpOwogCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKIAl9CisJcmRldi0+Y29uZmlnLnJ2NzcwLnRpbGluZ19ucGlwZXMgPSByZGV2LT5jb25maWcucnY3NzAubWF4X3RpbGVfcGlwZXM7CiAKIAlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUlY3NzApCiAJCWdiX3RpbGluZ19jb25maWcgfD0gQkFOS19USUxJTkcoMSk7CiAJZWxzZQogCQlnYl90aWxpbmdfY29uZmlnIHw9IEJBTktfVElMSU5HKChtY19hcmJfcmFtY2ZnICYgTk9PRkJBTktfTUFTSykgPj4gTk9PRkJBTktfU0hJRlQpOworCXJkZXYtPmNvbmZpZy5ydjc3MC50aWxpbmdfbmJhbmtzID0gNCA8PCAoKGdiX3RpbGluZ19jb25maWcgPj4gNCkgJiAweDMpOwogCiAJZ2JfdGlsaW5nX2NvbmZpZyB8PSBHUk9VUF9TSVpFKDApOworCXJkZXYtPmNvbmZpZy5ydjc3MC50aWxpbmdfZ3JvdXBfc2l6ZSA9IDI1NjsKIAogCWlmICgoKG1jX2FyYl9yYW1jZmcgJiBOT09GUk9XU19NQVNLKSA+PiBOT09GUk9XU19TSElGVCkgPiAzKSB7CiAJCWdiX3RpbGluZ19jb25maWcgfD0gUk9XX1RJTElORygzKTsKQEAgLTU0OSwyMSArNjE5LDI3IEBACiAKIAlnYl90aWxpbmdfY29uZmlnIHw9IEJBTktfU1dBUFMoMSk7CiAKLQlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUlY3NDApCi0JCWJhY2tlbmRfbWFwID0gMHgyODsKLQllbHNlCi0JCWJhY2tlbmRfbWFwID0gcjcwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfdGlsZV9waXBlcywKLQkJCQkJCQkJcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9iYWNrZW5kcywKLQkJCQkJCQkJKDB4ZmYgPDwgcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9iYWNrZW5kcykgJiAweGZmKTsKLQlnYl90aWxpbmdfY29uZmlnIHw9IEJBQ0tFTkRfTUFQKGJhY2tlbmRfbWFwKTsKKwljY19yYl9iYWNrZW5kX2Rpc2FibGUgPSBSUkVHMzIoQ0NfUkJfQkFDS0VORF9ESVNBQkxFKSAmIDB4MDBmZjAwMDA7CisJY2NfcmJfYmFja2VuZF9kaXNhYmxlIHw9CisJCUJBQ0tFTkRfRElTQUJMRSgoUjdYWF9NQVhfQkFDS0VORFNfTUFTSyA8PCByZGV2LT5jb25maWcucnY3NzAubWF4X2JhY2tlbmRzKSAmIFI3WFhfTUFYX0JBQ0tFTkRTX01BU0spOwogCi0JY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnID0KKwljY19nY19zaGFkZXJfcGlwZV9jb25maWcgPSBSUkVHMzIoQ0NfR0NfU0hBREVSX1BJUEVfQ09ORklHKSAmIDB4ZmZmZmZmMDA7CisJY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnIHw9CiAJCUlOQUNUSVZFX1FEX1BJUEVTKChSN1hYX01BWF9QSVBFU19NQVNLIDw8IHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfcGlwZXMpICYgUjdYWF9NQVhfUElQRVNfTUFTSyk7CiAJY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnIHw9CiAJCUlOQUNUSVZFX1NJTURTKChSN1hYX01BWF9TSU1EU19NQVNLIDw8IHJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfc2ltZHMpICYgUjdYWF9NQVhfU0lNRFNfTUFTSyk7CiAKLQljY19yYl9iYWNrZW5kX2Rpc2FibGUgPQotCQlCQUNLRU5EX0RJU0FCTEUoKFI3WFhfTUFYX0JBQ0tFTkRTX01BU0sgPDwgcmRldi0+Y29uZmlnLnJ2NzcwLm1heF9iYWNrZW5kcykgJiBSN1hYX01BWF9CQUNLRU5EU19NQVNLKTsKKwlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUlY3NDApCisJCWJhY2tlbmRfbWFwID0gMHgyODsKKwllbHNlCisJCWJhY2tlbmRfbWFwID0gcjcwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKHJkZXYsCisJCQkJCQkJCXJkZXYtPmNvbmZpZy5ydjc3MC5tYXhfdGlsZV9waXBlcywKKwkJCQkJCQkJKFI3WFhfTUFYX0JBQ0tFTkRTIC0KKwkJCQkJCQkJIHI2MDBfY291bnRfcGlwZV9iaXRzKChjY19yYl9iYWNrZW5kX2Rpc2FibGUgJgorCQkJCQkJCQkJCSAgICAgICBSN1hYX01BWF9CQUNLRU5EU19NQVNLKSA+PiAxNikpLAorCQkJCQkJCQkoY2NfcmJfYmFja2VuZF9kaXNhYmxlID4+IDE2KSk7CisJZ2JfdGlsaW5nX2NvbmZpZyB8PSBCQUNLRU5EX01BUChiYWNrZW5kX21hcCk7CisKIAogCVdSRUczMihHQl9USUxJTkdfQ09ORklHLCBnYl90aWxpbmdfY29uZmlnKTsKIAlXUkVHMzIoRENQX1RJTElOR19DT05GSUcsIChnYl90aWxpbmdfY29uZmlnICYgMHhmZmZmKSk7CkBAIC01NzEsMTYgKzY0NywxMyBAQAogCiAJV1JFRzMyKENDX1JCX0JBQ0tFTkRfRElTQUJMRSwgICAgICBjY19yYl9iYWNrZW5kX2Rpc2FibGUpOwogCVdSRUczMihDQ19HQ19TSEFERVJfUElQRV9DT05GSUcsICAgY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnKTsKLQlXUkVHMzIoR0NfVVNFUl9TSEFERVJfUElQRV9DT05GSUcsIGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyk7CisJV1JFRzMyKENDX1NZU19SQl9CQUNLRU5EX0RJU0FCTEUsICBjY19yYl9iYWNrZW5kX2Rpc2FibGUpOwogCi0JV1JFRzMyKENDX1NZU19SQl9CQUNLRU5EX0RJU0FCTEUsIGNjX3JiX2JhY2tlbmRfZGlzYWJsZSk7CiAJV1JFRzMyKENHVFNfU1lTX1RDQ19ESVNBQkxFLCAwKTsKIAlXUkVHMzIoQ0dUU19UQ0NfRElTQUJMRSwgMCk7Ci0JV1JFRzMyKENHVFNfVVNFUl9TWVNfVENDX0RJU0FCTEUsIDApOwotCVdSRUczMihDR1RTX1VTRVJfVENDX0RJU0FCTEUsIDApOwogCiAJbnVtX3FkX3BpcGVzID0KLQkJUjdYWF9NQVhfQkFDS0VORFMgLSByNjAwX2NvdW50X3BpcGVfYml0cyhjY19nY19zaGFkZXJfcGlwZV9jb25maWcgJiBJTkFDVElWRV9RRF9QSVBFU19NQVNLKTsKKwkJUjdYWF9NQVhfUElQRVMgLSByNjAwX2NvdW50X3BpcGVfYml0cygoY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnICYgSU5BQ1RJVkVfUURfUElQRVNfTUFTSykgPj4gOCk7CiAJV1JFRzMyKFZHVF9PVVRfREVBTExPQ19DTlRMLCAobnVtX3FkX3BpcGVzICogNCkgJiBERUFMTE9DX0RJU1RfTUFTSyk7CiAJV1JFRzMyKFZHVF9WRVJURVhfUkVVU0VfQkxPQ0tfQ05UTCwgKChudW1fcWRfcGlwZXMgKiA0KSAtIDIpICYgVlRYX1JFVVNFX0RFUFRIX01BU0spOwogCkBAIC01OTAsMTAgKzY2Myw4IEBACiAKIAlXUkVHMzIoQ1BfTUVRX1RIUkVTSE9MRFMsIFNUUV9TUExJVCgweDMwKSk7CiAKLQlXUkVHMzIoVEFfQ05UTF9BVVgsIChESVNBQkxFX0NVQkVfQU5JU08gfAotCQkJICAgICBTWU5DX0dSQURJRU5UIHwKLQkJCSAgICAgU1lOQ19XQUxLRVIgfAotCQkJICAgICBTWU5DX0FMSUdORVIpKTsKKwl0YV9hdXhfY250bCA9IFJSRUczMihUQV9DTlRMX0FVWCk7CisJV1JFRzMyKFRBX0NOVExfQVVYLCB0YV9hdXhfY250bCB8IERJU0FCTEVfQ1VCRV9BTklTTyk7CiAKIAlzeF9kZWJ1Z18xID0gUlJFRzMyKFNYX0RFQlVHXzEpOwogCXN4X2RlYnVnXzEgfD0gRU5BQkxFX05FV19TTVhfQUREUkVTUzsKQEAgLTYwNCwxNCArNjc1LDI4IEBACiAJc214X2RjX2N0bDAgfD0gQ0FDSEVfREVQVEgoKHJkZXYtPmNvbmZpZy5ydjc3MC5zeF9udW1fb2Zfc2V0cyAqIDY0KSAtIDEpOwogCVdSRUczMihTTVhfRENfQ1RMMCwgc214X2RjX2N0bDApOwogCi0JV1JFRzMyKFNNWF9FVkVOVF9DVEwsIChFU19GTFVTSF9DVEwoNCkgfAotCQkJICAgICAgIEdTX0ZMVVNIX0NUTCg0KSB8Ci0JCQkgICAgICAgQUNLX0ZMVVNIX0NUTCgzKSB8Ci0JCQkgICAgICAgU1lOQ19GTFVTSF9DVEwpKTsKKwlpZiAocmRldi0+ZmFtaWx5ICE9IENISVBfUlY3NDApCisJCVdSRUczMihTTVhfRVZFTlRfQ1RMLCAoRVNfRkxVU0hfQ1RMKDQpIHwKKwkJCQkgICAgICAgR1NfRkxVU0hfQ1RMKDQpIHwKKwkJCQkgICAgICAgQUNLX0ZMVVNIX0NUTCgzKSB8CisJCQkJICAgICAgIFNZTkNfRkxVU0hfQ1RMKSk7CiAKLQlpZiAocmRldi0+ZmFtaWx5ID09IENISVBfUlY3NzApCi0JCVdSRUczMihEQl9ERUJVRzMsIERCX0NMS19PRkZfREVMQVkoMHgxZikpOwotCWVsc2UgeworCWRiX2RlYnVnMyA9IFJSRUczMihEQl9ERUJVRzMpOworCWRiX2RlYnVnMyAmPSB+REJfQ0xLX09GRl9ERUxBWSgweDFmKTsKKwlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgeworCWNhc2UgQ0hJUF9SVjc3MDoKKwljYXNlIENISVBfUlY3NDA6CisJCWRiX2RlYnVnMyB8PSBEQl9DTEtfT0ZGX0RFTEFZKDB4MWYpOworCQlicmVhazsKKwljYXNlIENISVBfUlY3MTA6CisJY2FzZSBDSElQX1JWNzMwOgorCWRlZmF1bHQ6CisJCWRiX2RlYnVnMyB8PSBEQl9DTEtfT0ZGX0RFTEFZKDIpOworCQlicmVhazsKKwl9CisJV1JFRzMyKERCX0RFQlVHMywgZGJfZGVidWczKTsKKworCWlmIChyZGV2LT5mYW1pbHkgIT0gQ0hJUF9SVjc3MCkgewogCQlkYl9kZWJ1ZzQgPSBSUkVHMzIoREJfREVCVUc0KTsKIAkJZGJfZGVidWc0IHw9IERJU0FCTEVfVElMRV9DT1ZFUkVEX0ZPUl9QU19JVEVSOwogCQlXUkVHMzIoREJfREVCVUc0LCBkYl9kZWJ1ZzQpOwpAQCAtNjQwLDEwICs3MjUsMTAgQEAKIAkJCSAgICBBTFVfVVBEQVRFX0ZJRk9fSElXQVRFUigweDgpKTsKIAlzd2l0Y2ggKHJkZXYtPmZhbWlseSkgewogCWNhc2UgQ0hJUF9SVjc3MDoKLQkJc3FfbXNfZmlmb19zaXplcyB8PSBGRVRDSF9GSUZPX0hJV0FURVIoMHgxKTsKLQkJYnJlYWs7CiAJY2FzZSBDSElQX1JWNzMwOgogCWNhc2UgQ0hJUF9SVjcxMDoKKwkJc3FfbXNfZmlmb19zaXplcyB8PSBGRVRDSF9GSUZPX0hJV0FURVIoMHgxKTsKKwkJYnJlYWs7CiAJY2FzZSBDSElQX1JWNzQwOgogCWRlZmF1bHQ6CiAJCXNxX21zX2ZpZm9fc2l6ZXMgfD0gRkVUQ0hfRklGT19ISVdBVEVSKDB4NCk7CkBAIC04MTYsNDUgKzkwMSwxMyBAQAogCS8qIFNldHVwIEdQVSBtZW1vcnkgc3BhY2UgKi8KIAlyZGV2LT5tYy5tY192cmFtX3NpemUgPSBSUkVHMzIoQ09ORklHX01FTVNJWkUpOwogCXJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID0gUlJFRzMyKENPTkZJR19NRU1TSVpFKTsKLQotCWlmIChyZGV2LT5tYy5tY192cmFtX3NpemUgPiByZGV2LT5tYy5hcGVyX3NpemUpCisJcmRldi0+bWMudmlzaWJsZV92cmFtX3NpemUgPSByZGV2LT5tYy5hcGVyX3NpemU7CisJLyogRklYTUUgcmVtb3ZlIHRoaXMgb25jZSB3ZSBzdXBwb3J0IHVubWFwcGFibGUgVlJBTSAqLworCWlmIChyZGV2LT5tYy5tY192cmFtX3NpemUgPiByZGV2LT5tYy5hcGVyX3NpemUpIHsKIAkJcmRldi0+bWMubWNfdnJhbV9zaXplID0gcmRldi0+bWMuYXBlcl9zaXplOwotCi0JaWYgKHJkZXYtPm1jLnJlYWxfdnJhbV9zaXplID4gcmRldi0+bWMuYXBlcl9zaXplKQogCQlyZGV2LT5tYy5yZWFsX3ZyYW1fc2l6ZSA9IHJkZXYtPm1jLmFwZXJfc2l6ZTsKLQotCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKLQkJLyogZ3R0X3NpemUgaXMgc2V0dXAgYnkgcmFkZW9uX2FncF9pbml0ICovCi0JCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLmFncF9iYXNlOwotCQl0bXAgPSAweEZGRkZGRkZGVUwgLSByZGV2LT5tYy5hZ3BfYmFzZSAtIHJkZXYtPm1jLmd0dF9zaXplOwotCQkvKiBUcnkgdG8gcHV0IHZyYW0gYmVmb3JlIG9yIGFmdGVyIEFHUCBiZWNhdXNlIHdlCi0JCSAqIHdlIHdhbnQgU1lTVEVNX0FQRVJUVVJFIHRvIGNvdmVyIGJvdGggVlJBTSBhbmQKLQkJICogQUdQIHNvIHRoYXQgR1BVIGNhbiBjYXRjaCBvdXQgb2YgVlJBTS9BR1AgYWNjZXNzCi0JCSAqLwotCQlpZiAocmRldi0+bWMuZ3R0X2xvY2F0aW9uID4gcmRldi0+bWMubWNfdnJhbV9zaXplKSB7Ci0JCQkvKiBFbm91Z2ggcGxhY2UgYmVmb3JlICovCi0JCQlyZGV2LT5tYy52cmFtX2xvY2F0aW9uID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uIC0KLQkJCQkJCQlyZGV2LT5tYy5tY192cmFtX3NpemU7Ci0JCX0gZWxzZSBpZiAodG1wID4gcmRldi0+bWMubWNfdnJhbV9zaXplKSB7Ci0JCQkvKiBFbm91Z2ggcGxhY2UgYWZ0ZXIgKi8KLQkJCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKwotCQkJCQkJCXJkZXYtPm1jLmd0dF9zaXplOwotCQl9IGVsc2UgewotCQkJLyogVHJ5IHRvIHNldHVwIFZSQU0gdGhlbiBBR1AgbWlnaHQgbm90Ci0JCQkgKiBub3Qgd29yayBvbiBzb21lIGNhcmQKLQkJCSAqLwotCQkJcmRldi0+bWMudnJhbV9sb2NhdGlvbiA9IDB4MDAwMDAwMDBVTDsKLQkJCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKLQkJfQotCX0gZWxzZSB7Ci0JCXJkZXYtPm1jLnZyYW1fbG9jYXRpb24gPSAweDAwMDAwMDAwVUw7Ci0JCXJkZXYtPm1jLmd0dF9sb2NhdGlvbiA9IHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZTsKLQkJcmRldi0+bWMuZ3R0X3NpemUgPSByYWRlb25fZ2FydF9zaXplICogMTAyNCAqIDEwMjQ7CiAJfQotCXJkZXYtPm1jLnZyYW1fc3RhcnQgPSByZGV2LT5tYy52cmFtX2xvY2F0aW9uOwotCXJkZXYtPm1jLnZyYW1fZW5kID0gcmRldi0+bWMudnJhbV9sb2NhdGlvbiArIHJkZXYtPm1jLm1jX3ZyYW1fc2l6ZSAtIDE7Ci0JcmRldi0+bWMuZ3R0X3N0YXJ0ID0gcmRldi0+bWMuZ3R0X2xvY2F0aW9uOwotCXJkZXYtPm1jLmd0dF9lbmQgPSByZGV2LT5tYy5ndHRfbG9jYXRpb24gKyByZGV2LT5tYy5ndHRfc2l6ZSAtIDE7CisJcjYwMF92cmFtX2d0dF9sb2NhdGlvbihyZGV2LCAmcmRldi0+bWMpOwogCS8qIEZJWE1FOiB3ZSBzaG91bGQgZW5mb3JjZSBkZWZhdWx0IGNsb2NrIGluIGNhc2UgR1BVIGlzIG5vdCBpbgogCSAqIGRlZmF1bHQgc2V0dXAKIAkgKi8KQEAgLTg2Myw2ICs5MTYsNyBAQAogCXJkZXYtPnBtLnNjbGsuZnVsbCA9IHJmaXhlZF9kaXYocmRldi0+cG0uc2NsaywgYSk7CiAJcmV0dXJuIDA7CiB9CisKIGludCBydjc3MF9ncHVfcmVzZXQoc3RydWN0IHJhZGVvbl9kZXZpY2UgKnJkZXYpCiB7CiAJLyogRklYTUU6IGltcGxlbWVudCBhbnkgcnY3NzAgc3BlY2lmaWMgYml0cyAqLwpAQCAtMTAzOCw2ICsxMDkyLDcgQEAKIAlyID0gcmFkZW9uX2ZlbmNlX2RyaXZlcl9pbml0KHJkZXYpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKKwkvKiBpbml0aWFsaXplIEFHUCAqLwogCWlmIChyZGV2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKIAkJciA9IHJhZGVvbl9hZ3BfaW5pdChyZGV2KTsKIAkJaWYgKHIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwZC5oIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9ydjc3MGQuaAppbmRleCBhMTM2N2FiLi45NTA2ZjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3J2NzcwZC5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcnY3NzBkLmgKQEAgLTM0Myw0ICszNDMsNiBAQAogCiAjZGVmaW5lCVdBSVRfVU5USUwJCQkJCTB4ODA0MAogCisjZGVmaW5lCVNSQk1fU1RBVFVTCQkJCSAgICAgICAgMHgwRTUwCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKaW5kZXggYzczMjBjZS4uODljMzhjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jCkBAIC0xMjgsNyArMTI4LDcgQEAKIAlOVUxMCiB9OwogCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyB0dG1fYm9fZ2xvYmFsX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIHR0bV9ib19nbG9iYWxfb3BzID0gewogCS5zaG93ID0gJnR0bV9ib19nbG9iYWxfc2hvdwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fbWVtb3J5LmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9tZW1vcnkuYwppbmRleCBmNTI0NWMwLi5lYjE0M2UwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9tZW1vcnkuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9tZW1vcnkuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJTlVMTAogfTsKIAotc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgdHRtX21lbV96b25lX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIHR0bV9tZW1fem9uZV9vcHMgPSB7CiAJLnNob3cgPSAmdHRtX21lbV96b25lX3Nob3csCiAJLnN0b3JlID0gJnR0bV9tZW1fem9uZV9zdG9yZQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV90dC5jCmluZGV4IDNkNDdhMmMuLmE3NTkxNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX3R0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fdHQuYwpAQCAtNDgwLDcgKzQ4MCw3IEBACiAJdm9pZCAqZnJvbV92aXJ0dWFsOwogCXZvaWQgKnRvX3ZpcnR1YWw7CiAJaW50IGk7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gLUVOT01FTTsKIAogCWlmICh0dG0tPnBhZ2VfZmxhZ3MgJiBUVE1fUEFHRV9GTEFHX1VTRVIpIHsKIAkJcmV0ID0gdHRtX3R0X3NldF91c2VyKHR0bSwgdHRtLT50c2ssIHR0bS0+c3RhcnQsCkBAIC00OTksOCArNDk5LDEwIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgdHRtLT5udW1fcGFnZXM7ICsraSkgewogCQlmcm9tX3BhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShzd2FwX3NwYWNlLCBpLCBOVUxMKTsKLQkJaWYgKElTX0VSUihmcm9tX3BhZ2UpKQorCQlpZiAoSVNfRVJSKGZyb21fcGFnZSkpIHsKKwkJCXJldCA9IFBUUl9FUlIoZnJvbV9wYWdlKTsKIAkJCWdvdG8gb3V0X2VycjsKKwkJfQogCQl0b19wYWdlID0gX190dG1fdHRfZ2V0X3BhZ2UodHRtLCBpKTsKIAkJaWYgKHVubGlrZWx5KHRvX3BhZ2UgPT0gTlVMTCkpCiAJCQlnb3RvIG91dF9lcnI7CkBAIC01MjMsNyArNTI1LDcgQEAKIAlyZXR1cm4gMDsKIG91dF9lcnI6CiAJdHRtX3R0X2ZyZWVfYWxsb2NlZF9wYWdlcyh0dG0pOwotCXJldHVybiAtRU5PTUVNOworCXJldHVybiByZXQ7CiB9CiAKIGludCB0dG1fdHRfc3dhcG91dChzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCBmaWxlICpwZXJzaXN0YW50X3N3YXBfc3RvcmFnZSkKQEAgLTUzNSw2ICs1MzcsNyBAQAogCXZvaWQgKmZyb21fdmlydHVhbDsKIAl2b2lkICp0b192aXJ0dWFsOwogCWludCBpOworCWludCByZXQgPSAtRU5PTUVNOwogCiAJQlVHX09OKHR0bS0+c3RhdGUgIT0gdHRfdW5ib3VuZCAmJiB0dG0tPnN0YXRlICE9IHR0X3VucG9wdWxhdGVkKTsKIAlCVUdfT04odHRtLT5jYWNoaW5nX3N0YXRlICE9IHR0X2NhY2hlZCk7CkBAIC01NTcsNyArNTYwLDcgQEAKIAkJCQkJCTApOwogCQlpZiAodW5saWtlbHkoSVNfRVJSKHN3YXBfc3RvcmFnZSkpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCBhbGxvY2F0aW5nIHN3YXAgc3RvcmFnZS5cbiIpOwotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlyZXR1cm4gUFRSX0VSUihzd2FwX3N0b3JhZ2UpOwogCQl9CiAJfSBlbHNlCiAJCXN3YXBfc3RvcmFnZSA9IHBlcnNpc3RhbnRfc3dhcF9zdG9yYWdlOwpAQCAtNTY5LDkgKzU3MiwxMCBAQAogCQlpZiAodW5saWtlbHkoZnJvbV9wYWdlID09IE5VTEwpKQogCQkJY29udGludWU7CiAJCXRvX3BhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShzd2FwX3NwYWNlLCBpLCBOVUxMKTsKLQkJaWYgKHVubGlrZWx5KHRvX3BhZ2UgPT0gTlVMTCkpCisJCWlmICh1bmxpa2VseShJU19FUlIodG9fcGFnZSkpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHRvX3BhZ2UpOwogCQkJZ290byBvdXRfZXJyOwotCisJCX0KIAkJcHJlZW1wdF9kaXNhYmxlKCk7CiAJCWZyb21fdmlydHVhbCA9IGttYXBfYXRvbWljKGZyb21fcGFnZSwgS01fVVNFUjApOwogCQl0b192aXJ0dWFsID0ga21hcF9hdG9taWModG9fcGFnZSwgS01fVVNFUjEpOwpAQCAtNTk1LDUgKzU5OSw1IEBACiAJaWYgKCFwZXJzaXN0YW50X3N3YXBfc3RvcmFnZSkKIAkJZnB1dChzd2FwX3N0b3JhZ2UpOwogCi0JcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS92aWEvdmlhX2lycS5jIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfaXJxLmMKaW5kZXggNTkzNWI4OC4uMzQwNzlmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfaXJxLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfaXJxLmMKQEAgLTE1MCw3ICsxNTAsNyBAQAogCQljdXJfaXJxKys7CiAJfQogCi0JLyogQWNrbm93bGVnZSBpbnRlcnJ1cHRzICovCisJLyogQWNrbm93bGVkZ2UgaW50ZXJydXB0cyAqLwogCVZJQV9XUklURShWSUFfUkVHX0lOVEVSUlVQVCwgc3RhdHVzKTsKIAogCkBAIC0xNjUsNyArMTY1LDcgQEAKIAl1MzIgc3RhdHVzOwogCiAJaWYgKGRldl9wcml2KSB7Ci0JCS8qIEFja25vd2xlZ2UgaW50ZXJydXB0cyAqLworCQkvKiBBY2tub3dsZWRnZSBpbnRlcnJ1cHRzICovCiAJCXN0YXR1cyA9IFZJQV9SRUFEKFZJQV9SRUdfSU5URVJSVVBUKTsKIAkJVklBX1dSSVRFKFZJQV9SRUdfSU5URVJSVVBULCBzdGF0dXMgfAogCQkJICBkZXZfcHJpdi0+aXJxX3BlbmRpbmdfbWFzayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS92Z2EvS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L3ZnYS9LY29uZmlnCmluZGV4IDA5MjA0OTIuLjYxYWI0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L3ZnYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZ3B1L3ZnYS9LY29uZmlnCkBAIC0xNiwzICsxNiwxNCBAQAogCWhlbHAKIAkgIFJlc2VydmVzIHNwYWNlIGluIHRoZSBrZXJuZWwgdG8gbWFpbnRhaW4gcmVzb3VyY2UgbG9ja2luZyBmb3IKIAkgIG11bHRpcGxlIEdQVVMuICBUaGUgb3ZlcmhlYWQgZm9yIGVhY2ggR1BVIGlzIHZlcnkgc21hbGwuCisKK2NvbmZpZyBWR0FfU1dJVENIRVJPTworCWJvb2wgIkxhcHRvcCBIeWJyaWQgR3JhcGljcyAtIEdQVSBzd2l0Y2hpbmcgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFg4NgorCWRlcGVuZHMgb24gQUNQSQorCWhlbHAKKwkgIE1hbnkgbGFwdG9wcyByZWxlYXNlZCBpbiAyMDA4LzkvMTAgaGF2ZSB0d28gZ3B1cyB3aXRoIGEgbXVsdGlwbHhlcgorCSAgdG8gc3dpdGNoIGJldHdlZW4gdGhlbS4gVGhpcyBhZGRzIHN1cHBvcnQgZm9yIGR5bmFtaWMgc3dpdGNoaW5nIHdoZW4KKyAgICAgICAgICBYIGlzbid0IHJ1bm5pbmcgYW5kIGRlbGF5ZWQgc3dpdGNoaW5nIHVudGlsIHRoZSBuZXh0IGxvZ29mZi4gVGhpcworCSAgZmVhdHVyZXMgaXMgY2FsbGVkIGh5YnJpZCBncmFwaGljcywgQVRJIFBvd2VyWHByZXNzLCBhbmQgTnZpZGlhCisJICBIeWJyaWRQb3dlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L3ZnYS9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L3ZnYS9NYWtlZmlsZQppbmRleCA3Y2M4YzFlLi4xNGNhMzBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS92Z2EvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ncHUvdmdhL01ha2VmaWxlCkBAIC0xICsxLDIgQEAKIG9iai0kKENPTkZJR19WR0FfQVJCKSAgKz0gdmdhYXJiLm8KK29iai0kKENPTkZJR19WR0FfU1dJVENIRVJPTykgKz0gdmdhX3N3aXRjaGVyb28ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvdmdhL3ZnYV9zd2l0Y2hlcm9vLmMgYi9kcml2ZXJzL2dwdS92Z2EvdmdhX3N3aXRjaGVyb28uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmQxMTQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvdmdhL3ZnYV9zd2l0Y2hlcm9vLmMKQEAgLTAsMCArMSw0NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAgUmVkIEhhdCBJbmMuCisgKiBBdXRob3IgOiBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgorICoKKyAqCisgKiBMaWNlbnNlZCB1bmRlciBHUEx2MgorICoKKyAqIHZnYV9zd2l0Y2hlcm9vLmMgLSBTdXBwb3J0IGZvciBsYXB0b3Agd2l0aCBkdWFsIEdQVSB1c2luZyBvbmUgc2V0IG9mIG91dHB1dHMKKworIFN3aXRjaGVyIGludGVyZmFjZSAtIG1ldGhvZHMgcmVxdWlyZSBmb3IgQVRQWCBhbmQgRENNCisgLSBzd2l0Y2h0byAtIHRoaXMgdGhyb3dzIHRoZSBvdXRwdXQgTVVYIHN3aXRjaAorIC0gZGlzY3JldGVfc2V0X3Bvd2VyIC0gc2V0cyB0aGUgcG93ZXIgc3RhdGUgZm9yIHRoZSBkaXNjcmV0ZSBjYXJkCisKKyBHUFUgZHJpdmVyIGludGVyZmFjZQorIC0gc2V0X2dwdV9zdGF0ZSAtIHRoaXMgc2hvdWxkIGRvIHRoZSBlcXVpdiBvZiBzL3IgZm9yIHRoZSBjYXJkCisJCSAgLSB0aGlzIHNob3VsZCAqbm90KiBzZXQgdGhlIGRpc2NyZXRlIHBvd2VyIHN0YXRlCisgLSBzd2l0Y2hfY2hlY2sgIC0gY2hlY2sgaWYgdGhlIGRldmljZSBpcyBpbiBhIHBvc2l0aW9uIHRvIHN3aXRjaCBub3cKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvZmIuaD4KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZnYV9zd2l0Y2hlcm9vLmg+CisKK3N0cnVjdCB2Z2Ffc3dpdGNoZXJvb19jbGllbnQgeworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvOworCWludCBwd3Jfc3RhdGU7CisJdm9pZCAoKnNldF9ncHVfc3RhdGUpKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBlbnVtIHZnYV9zd2l0Y2hlcm9vX3N0YXRlKTsKKwlib29sICgqY2FuX3N3aXRjaCkoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworCWludCBpZDsKKwlib29sIGFjdGl2ZTsKK307CisKK3N0YXRpYyBERUZJTkVfTVVURVgodmdhc3JfbXV0ZXgpOworCitzdHJ1Y3Qgdmdhc3JfcHJpdiB7CisKKwlib29sIGFjdGl2ZTsKKwlib29sIGRlbGF5ZWRfc3dpdGNoX2FjdGl2ZTsKKwllbnVtIHZnYV9zd2l0Y2hlcm9vX2NsaWVudF9pZCBkZWxheWVkX2NsaWVudF9pZDsKKworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcm9vdDsKKwlzdHJ1Y3QgZGVudHJ5ICpzd2l0Y2hfZmlsZTsKKworCWludCByZWdpc3RlcmVkX2NsaWVudHM7CisJc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2NsaWVudCBjbGllbnRzW1ZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTXTsKKworCXN0cnVjdCB2Z2Ffc3dpdGNoZXJvb19oYW5kbGVyICpoYW5kbGVyOworfTsKKworc3RhdGljIGludCB2Z2Ffc3dpdGNoZXJvb19kZWJ1Z2ZzX2luaXQoc3RydWN0IHZnYXNyX3ByaXYgKnByaXYpOworc3RhdGljIHZvaWQgdmdhX3N3aXRjaGVyb29fZGVidWdmc19maW5pKHN0cnVjdCB2Z2Fzcl9wcml2ICpwcml2KTsKKworLyogb25seSBvbmUgc3dpdGNoZXJvbyBwZXIgc3lzdGVtICovCitzdGF0aWMgc3RydWN0IHZnYXNyX3ByaXYgdmdhc3JfcHJpdjsKKworaW50IHZnYV9zd2l0Y2hlcm9vX3JlZ2lzdGVyX2hhbmRsZXIoc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2hhbmRsZXIgKmhhbmRsZXIpCit7CisJbXV0ZXhfbG9jaygmdmdhc3JfbXV0ZXgpOworCWlmICh2Z2Fzcl9wcml2LmhhbmRsZXIpIHsKKwkJbXV0ZXhfdW5sb2NrKCZ2Z2Fzcl9tdXRleCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZnYXNyX3ByaXYuaGFuZGxlciA9IGhhbmRsZXI7CisJbXV0ZXhfdW5sb2NrKCZ2Z2Fzcl9tdXRleCk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHZnYV9zd2l0Y2hlcm9vX3JlZ2lzdGVyX2hhbmRsZXIpOworCit2b2lkIHZnYV9zd2l0Y2hlcm9vX3VucmVnaXN0ZXJfaGFuZGxlcih2b2lkKQoreworCW11dGV4X2xvY2soJnZnYXNyX211dGV4KTsKKwl2Z2Fzcl9wcml2LmhhbmRsZXIgPSBOVUxMOworCW11dGV4X3VubG9jaygmdmdhc3JfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTCh2Z2Ffc3dpdGNoZXJvb191bnJlZ2lzdGVyX2hhbmRsZXIpOworCitzdGF0aWMgdm9pZCB2Z2Ffc3dpdGNoZXJvb19lbmFibGUodm9pZCkKK3sKKwlpbnQgaTsKKwlpbnQgcmV0OworCS8qIGNhbGwgdGhlIGhhbmRsZXIgdG8gaW5pdCAqLworCXZnYXNyX3ByaXYuaGFuZGxlci0+aW5pdCgpOworCisJZm9yIChpID0gMDsgaSA8IFZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTOyBpKyspIHsKKwkJcmV0ID0gdmdhc3JfcHJpdi5oYW5kbGVyLT5nZXRfY2xpZW50X2lkKHZnYXNyX3ByaXYuY2xpZW50c1tpXS5wZGV2KTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm47CisKKwkJdmdhc3JfcHJpdi5jbGllbnRzW2ldLmlkID0gcmV0OworCX0KKwl2Z2Ffc3dpdGNoZXJvb19kZWJ1Z2ZzX2luaXQoJnZnYXNyX3ByaXYpOworCXZnYXNyX3ByaXYuYWN0aXZlID0gdHJ1ZTsKK30KKworaW50IHZnYV9zd2l0Y2hlcm9vX3JlZ2lzdGVyX2NsaWVudChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgICB2b2lkICgqc2V0X2dwdV9zdGF0ZSkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGVudW0gdmdhX3N3aXRjaGVyb29fc3RhdGUpLAorCQkJCSAgIGJvb2wgKCpjYW5fc3dpdGNoKShzdHJ1Y3QgcGNpX2RldiAqcGRldikpCit7CisJaW50IGluZGV4OworCisJbXV0ZXhfbG9jaygmdmdhc3JfbXV0ZXgpOworCS8qIGRvbid0IGRvIElHRCB2cyBESVMgaGVyZSAqLworCWlmICh2Z2Fzcl9wcml2LnJlZ2lzdGVyZWRfY2xpZW50cyAmIDEpCisJCWluZGV4ID0gMTsKKwllbHNlCisJCWluZGV4ID0gMDsKKworCXZnYXNyX3ByaXYuY2xpZW50c1tpbmRleF0ucHdyX3N0YXRlID0gVkdBX1NXSVRDSEVST09fT047CisJdmdhc3JfcHJpdi5jbGllbnRzW2luZGV4XS5wZGV2ID0gcGRldjsKKwl2Z2Fzcl9wcml2LmNsaWVudHNbaW5kZXhdLnNldF9ncHVfc3RhdGUgPSBzZXRfZ3B1X3N0YXRlOworCXZnYXNyX3ByaXYuY2xpZW50c1tpbmRleF0uY2FuX3N3aXRjaCA9IGNhbl9zd2l0Y2g7CisJdmdhc3JfcHJpdi5jbGllbnRzW2luZGV4XS5pZCA9IC0xOworCWlmIChwZGV2LT5yZXNvdXJjZVtQQ0lfUk9NX1JFU09VUkNFXS5mbGFncyAmIElPUkVTT1VSQ0VfUk9NX1NIQURPVykKKwkJdmdhc3JfcHJpdi5jbGllbnRzW2luZGV4XS5hY3RpdmUgPSB0cnVlOworCisJdmdhc3JfcHJpdi5yZWdpc3RlcmVkX2NsaWVudHMgfD0gKDEgPDwgaW5kZXgpOworCisJLyogaWYgd2UgZ2V0IHR3byBjbGllbnRzICsgaGFuZGxlciAqLworCWlmICh2Z2Fzcl9wcml2LnJlZ2lzdGVyZWRfY2xpZW50cyA9PSAweDMgJiYgdmdhc3JfcHJpdi5oYW5kbGVyKSB7CisJCXByaW50ayhLRVJOX0lORk8gInZnYV9zd2l0Y2hlcm9vOiBlbmFibGVkXG4iKTsKKwkJdmdhX3N3aXRjaGVyb29fZW5hYmxlKCk7CisJfQorCW11dGV4X3VubG9jaygmdmdhc3JfbXV0ZXgpOworCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTCh2Z2Ffc3dpdGNoZXJvb19yZWdpc3Rlcl9jbGllbnQpOworCit2b2lkIHZnYV9zd2l0Y2hlcm9vX3VucmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBpOworCisJbXV0ZXhfbG9jaygmdmdhc3JfbXV0ZXgpOworCWZvciAoaSA9IDA7IGkgPCBWR0FfU1dJVENIRVJPT19NQVhfQ0xJRU5UUzsgaSsrKSB7CisJCWlmICh2Z2Fzcl9wcml2LmNsaWVudHNbaV0ucGRldiA9PSBwZGV2KSB7CisJCQl2Z2Fzcl9wcml2LnJlZ2lzdGVyZWRfY2xpZW50cyAmPSB+KDEgPDwgaSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXByaW50ayhLRVJOX0lORk8gInZnYV9zd2l0Y2hlcm9vOiBkaXNhYmxlZFxuIik7CisJdmdhX3N3aXRjaGVyb29fZGVidWdmc19maW5pKCZ2Z2Fzcl9wcml2KTsKKwl2Z2Fzcl9wcml2LmFjdGl2ZSA9IGZhbHNlOworCW11dGV4X3VubG9jaygmdmdhc3JfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTCh2Z2Ffc3dpdGNoZXJvb191bnJlZ2lzdGVyX2NsaWVudCk7CisKK3ZvaWQgdmdhX3N3aXRjaGVyb29fY2xpZW50X2ZiX3NldChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaW50IGk7CisKKwltdXRleF9sb2NrKCZ2Z2Fzcl9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IFZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTOyBpKyspIHsKKwkJaWYgKHZnYXNyX3ByaXYuY2xpZW50c1tpXS5wZGV2ID09IHBkZXYpIHsKKwkJCXZnYXNyX3ByaXYuY2xpZW50c1tpXS5mYl9pbmZvID0gaW5mbzsKKwkJCWJyZWFrOworCQl9CisJfQorCW11dGV4X3VubG9jaygmdmdhc3JfbXV0ZXgpOworfQorRVhQT1JUX1NZTUJPTCh2Z2Ffc3dpdGNoZXJvb19jbGllbnRfZmJfc2V0KTsKKworc3RhdGljIGludCB2Z2Ffc3dpdGNoZXJvb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3sKKwlpbnQgaTsKKwltdXRleF9sb2NrKCZ2Z2Fzcl9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IFZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTOyBpKyspIHsKKwkJc2VxX3ByaW50ZihtLCAiJWQ6JWM6JXM6JXNcbiIsIGksCisJCQkgICB2Z2Fzcl9wcml2LmNsaWVudHNbaV0uYWN0aXZlID8gJysnIDogJyAnLAorCQkJICAgdmdhc3JfcHJpdi5jbGllbnRzW2ldLnB3cl9zdGF0ZSA/ICJQd3IiIDogIk9mZiIsCisJCQkgICBwY2lfbmFtZSh2Z2Fzcl9wcml2LmNsaWVudHNbaV0ucGRldikpOworCX0KKwltdXRleF91bmxvY2soJnZnYXNyX211dGV4KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2Z2Ffc3dpdGNoZXJvb19kZWJ1Z2ZzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHZnYV9zd2l0Y2hlcm9vX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgaW50IHZnYV9zd2l0Y2hvbihzdHJ1Y3QgdmdhX3N3aXRjaGVyb29fY2xpZW50ICpjbGllbnQpCit7CisJaW50IHJldDsKKworCXJldCA9IHZnYXNyX3ByaXYuaGFuZGxlci0+cG93ZXJfc3RhdGUoY2xpZW50LT5pZCwgVkdBX1NXSVRDSEVST09fT04pOworCS8qIGNhbGwgdGhlIGRyaXZlciBjYWxsYmFjayB0byB0dXJuIG9uIGRldmljZSAqLworCWNsaWVudC0+c2V0X2dwdV9zdGF0ZShjbGllbnQtPnBkZXYsIFZHQV9TV0lUQ0hFUk9PX09OKTsKKwljbGllbnQtPnB3cl9zdGF0ZSA9IFZHQV9TV0lUQ0hFUk9PX09OOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZnYV9zd2l0Y2hvZmYoc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2NsaWVudCAqY2xpZW50KQoreworCS8qIGNhbGwgdGhlIGRyaXZlciBjYWxsYmFjayB0byB0dXJuIG9mZiBkZXZpY2UgKi8KKwljbGllbnQtPnNldF9ncHVfc3RhdGUoY2xpZW50LT5wZGV2LCBWR0FfU1dJVENIRVJPT19PRkYpOworCXZnYXNyX3ByaXYuaGFuZGxlci0+cG93ZXJfc3RhdGUoY2xpZW50LT5pZCwgVkdBX1NXSVRDSEVST09fT0ZGKTsKKwljbGllbnQtPnB3cl9zdGF0ZSA9IFZHQV9TV0lUQ0hFUk9PX09GRjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2Z2Ffc3dpdGNodG8oc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2NsaWVudCAqbmV3X2NsaWVudCkKK3sKKwlpbnQgcmV0OworCWludCBpOworCXN0cnVjdCB2Z2Ffc3dpdGNoZXJvb19jbGllbnQgKmFjdGl2ZSA9IE5VTEw7CisKKwlpZiAobmV3X2NsaWVudC0+YWN0aXZlID09IHRydWUpCisJCXJldHVybiAwOworCisJZm9yIChpID0gMDsgaSA8IFZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTOyBpKyspIHsKKwkJaWYgKHZnYXNyX3ByaXYuY2xpZW50c1tpXS5hY3RpdmUgPT0gdHJ1ZSkgeworCQkJYWN0aXZlID0gJnZnYXNyX3ByaXYuY2xpZW50c1tpXTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghYWN0aXZlKQorCQlyZXR1cm4gMDsKKworCS8qIHBvd2VyIHVwIHRoZSBmaXJzdCBkZXZpY2UgKi8KKwlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShuZXdfY2xpZW50LT5wZGV2KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKG5ld19jbGllbnQtPnB3cl9zdGF0ZSA9PSBWR0FfU1dJVENIRVJPT19PRkYpCisJCXZnYV9zd2l0Y2hvbihuZXdfY2xpZW50KTsKKworCS8qIHN3YXAgc2hhZG93IHJlc291cmNlIHRvIGRlbm90ZSBib290IFZHQSBkZXZpY2UgaGFzIGNoYW5nZWQgc28gWCBzdGFydHMgb24gbmV3IGRldmljZSAqLworCWFjdGl2ZS0+YWN0aXZlID0gZmFsc2U7CisKKwlhY3RpdmUtPnBkZXYtPnJlc291cmNlW1BDSV9ST01fUkVTT1VSQ0VdLmZsYWdzICY9IH5JT1JFU09VUkNFX1JPTV9TSEFET1c7CisJbmV3X2NsaWVudC0+cGRldi0+cmVzb3VyY2VbUENJX1JPTV9SRVNPVVJDRV0uZmxhZ3MgfD0gSU9SRVNPVVJDRV9ST01fU0hBRE9XOworCisJaWYgKG5ld19jbGllbnQtPmZiX2luZm8pIHsKKwkJc3RydWN0IGZiX2V2ZW50IGV2ZW50OworCQlldmVudC5pbmZvID0gbmV3X2NsaWVudC0+ZmJfaW5mbzsKKwkJZmJfbm90aWZpZXJfY2FsbF9jaGFpbihGQl9FVkVOVF9SRU1BUF9BTExfQ09OU09MRSwgJmV2ZW50KTsKKwl9CisKKwlyZXQgPSB2Z2Fzcl9wcml2LmhhbmRsZXItPnN3aXRjaHRvKG5ld19jbGllbnQtPmlkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKGFjdGl2ZS0+cHdyX3N0YXRlID09IFZHQV9TV0lUQ0hFUk9PX09OKQorCQl2Z2Ffc3dpdGNob2ZmKGFjdGl2ZSk7CisKKwluZXdfY2xpZW50LT5hY3RpdmUgPSB0cnVlOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdAordmdhX3N3aXRjaGVyb29fZGVidWdmc193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCQkgICAgIHNpemVfdCBjbnQsIGxvZmZfdCAqcHBvcykKK3sKKwljaGFyIHVzZXJjbWRbNjRdOworCWNvbnN0IGNoYXIgKnBkZXZfbmFtZTsKKwlpbnQgaSwgcmV0OworCWJvb2wgZGVsYXkgPSBmYWxzZSwgY2FuX3N3aXRjaDsKKwlpbnQgY2xpZW50X2lkID0gLTE7CisJc3RydWN0IHZnYV9zd2l0Y2hlcm9vX2NsaWVudCAqY2xpZW50ID0gTlVMTDsKKworCWlmIChjbnQgPiA2MykKKwkJY250ID0gNjM7CisKKwlpZiAoY29weV9mcm9tX3VzZXIodXNlcmNtZCwgdWJ1ZiwgY250KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwltdXRleF9sb2NrKCZ2Z2Fzcl9tdXRleCk7CisKKwlpZiAoIXZnYXNyX3ByaXYuYWN0aXZlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHB3ciBvZmYgdGhlIGRldmljZSBub3QgaW4gdXNlICovCisJaWYgKHN0cm5jbXAodXNlcmNtZCwgIk9GRiIsIDMpID09IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IFZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTOyBpKyspIHsKKwkJCWlmICh2Z2Fzcl9wcml2LmNsaWVudHNbaV0uYWN0aXZlKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHZnYXNyX3ByaXYuY2xpZW50c1tpXS5wd3Jfc3RhdGUgPT0gVkdBX1NXSVRDSEVST09fT04pCisJCQkJdmdhX3N3aXRjaG9mZigmdmdhc3JfcHJpdi5jbGllbnRzW2ldKTsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisJLyogcHdyIG9uIHRoZSBkZXZpY2Ugbm90IGluIHVzZSAqLworCWlmIChzdHJuY21wKHVzZXJjbWQsICJPTiIsIDIpID09IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IFZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTOyBpKyspIHsKKwkJCWlmICh2Z2Fzcl9wcml2LmNsaWVudHNbaV0uYWN0aXZlKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHZnYXNyX3ByaXYuY2xpZW50c1tpXS5wd3Jfc3RhdGUgPT0gVkdBX1NXSVRDSEVST09fT0ZGKQorCQkJCXZnYV9zd2l0Y2hvbigmdmdhc3JfcHJpdi5jbGllbnRzW2ldKTsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisKKwkvKiByZXF1ZXN0IGEgZGVsYXllZCBzd2l0Y2ggLSB0ZXN0IGNhbiB3ZSBzd2l0Y2ggbm93ICovCisJaWYgKHN0cm5jbXAodXNlcmNtZCwgIkRJR0QiLCA0KSA9PSAwKSB7CisJCWNsaWVudF9pZCA9IFZHQV9TV0lUQ0hFUk9PX0lHRDsKKwkJZGVsYXkgPSB0cnVlOworCX0KKworCWlmIChzdHJuY21wKHVzZXJjbWQsICJERElTIiwgNCkgPT0gMCkgeworCQljbGllbnRfaWQgPSBWR0FfU1dJVENIRVJPT19ESVM7CisJCWRlbGF5ID0gdHJ1ZTsKKwl9CisKKwlpZiAoc3RybmNtcCh1c2VyY21kLCAiSUdEIiwgMykgPT0gMCkKKwkJY2xpZW50X2lkID0gVkdBX1NXSVRDSEVST09fSUdEOworCisJaWYgKHN0cm5jbXAodXNlcmNtZCwgIkRJUyIsIDMpID09IDApCisJCWNsaWVudF9pZCA9IFZHQV9TV0lUQ0hFUk9PX0RJUzsKKworCWlmIChjbGllbnRfaWQgPT0gLTEpCisJCWdvdG8gb3V0OworCisJZm9yIChpID0gMDsgaSA8IFZHQV9TV0lUQ0hFUk9PX01BWF9DTElFTlRTOyBpKyspIHsKKwkJaWYgKHZnYXNyX3ByaXYuY2xpZW50c1tpXS5pZCA9PSBjbGllbnRfaWQpIHsKKwkJCWNsaWVudCA9ICZ2Z2Fzcl9wcml2LmNsaWVudHNbaV07CisJCQlicmVhazsKKwkJfQorCX0KKworCXZnYXNyX3ByaXYuZGVsYXllZF9zd2l0Y2hfYWN0aXZlID0gZmFsc2U7CisJLyogb2theSB3ZSB3YW50IGEgc3dpdGNoIC0gdGVzdCBpZiBkZXZpY2VzIGFyZSB3aWxsaW5nIHRvIHN3aXRjaCAqLworCWNhbl9zd2l0Y2ggPSB0cnVlOworCWZvciAoaSA9IDA7IGkgPCBWR0FfU1dJVENIRVJPT19NQVhfQ0xJRU5UUzsgaSsrKSB7CisJCWNhbl9zd2l0Y2ggPSB2Z2Fzcl9wcml2LmNsaWVudHNbaV0uY2FuX3N3aXRjaCh2Z2Fzcl9wcml2LmNsaWVudHNbaV0ucGRldik7CisJCWlmIChjYW5fc3dpdGNoID09IGZhbHNlKSB7CisJCQlwcmludGsoS0VSTl9FUlIgInZnYV9zd2l0Y2hlcm9vOiBjbGllbnQgJWQgcmVmdXNlZCBzd2l0Y2hcbiIsIGkpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoY2FuX3N3aXRjaCA9PSBmYWxzZSAmJiBkZWxheSA9PSBmYWxzZSkKKwkJZ290byBvdXQ7CisKKwlpZiAoY2FuX3N3aXRjaCA9PSB0cnVlKSB7CisJCXBkZXZfbmFtZSA9IHBjaV9uYW1lKGNsaWVudC0+cGRldik7CisJCXJldCA9IHZnYV9zd2l0Y2h0byhjbGllbnQpOworCQlpZiAocmV0KQorCQkJcHJpbnRrKEtFUk5fRVJSICJ2Z2Ffc3dpdGNoZXJvbzogc3dpdGNoaW5nIGZhaWxlZCAlZFxuIiwgcmV0KTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9JTkZPICJ2Z2Ffc3dpdGNoZXJvbzogc2V0dGluZyBkZWxheWVkIHN3aXRjaCB0byBjbGllbnQgJWRcbiIsIGNsaWVudC0+aWQpOworCQl2Z2Fzcl9wcml2LmRlbGF5ZWRfc3dpdGNoX2FjdGl2ZSA9IHRydWU7CisJCXZnYXNyX3ByaXYuZGVsYXllZF9jbGllbnRfaWQgPSBjbGllbnRfaWQ7CisKKwkJLyogd2Ugc2hvdWxkIGF0IGxlYXN0IHBvd2VyIHVwIHRoZSBjYXJkIHRvCisJCSAgIG1ha2UgdGhlIHN3aXRjaCBmYXN0ZXIgKi8KKwkJaWYgKGNsaWVudC0+cHdyX3N0YXRlID09IFZHQV9TV0lUQ0hFUk9PX09GRikKKwkJCXZnYV9zd2l0Y2hvbihjbGllbnQpOworCX0KKworb3V0OgorCW11dGV4X3VubG9jaygmdmdhc3JfbXV0ZXgpOworCXJldHVybiBjbnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZnYV9zd2l0Y2hlcm9vX2RlYnVnZnNfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IHZnYV9zd2l0Y2hlcm9vX2RlYnVnZnNfb3BlbiwKKwkud3JpdGUgPSB2Z2Ffc3dpdGNoZXJvb19kZWJ1Z2ZzX3dyaXRlLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIHZvaWQgdmdhX3N3aXRjaGVyb29fZGVidWdmc19maW5pKHN0cnVjdCB2Z2Fzcl9wcml2ICpwcml2KQoreworCWlmIChwcml2LT5zd2l0Y2hfZmlsZSkgeworCQlkZWJ1Z2ZzX3JlbW92ZShwcml2LT5zd2l0Y2hfZmlsZSk7CisJCXByaXYtPnN3aXRjaF9maWxlID0gTlVMTDsKKwl9CisJaWYgKHByaXYtPmRlYnVnZnNfcm9vdCkgeworCQlkZWJ1Z2ZzX3JlbW92ZShwcml2LT5kZWJ1Z2ZzX3Jvb3QpOworCQlwcml2LT5kZWJ1Z2ZzX3Jvb3QgPSBOVUxMOworCX0KK30KKworc3RhdGljIGludCB2Z2Ffc3dpdGNoZXJvb19kZWJ1Z2ZzX2luaXQoc3RydWN0IHZnYXNyX3ByaXYgKnByaXYpCit7CisJLyogYWxyZWFkeSBpbml0aWFsaXNlZCAqLworCWlmIChwcml2LT5kZWJ1Z2ZzX3Jvb3QpCisJCXJldHVybiAwOworCXByaXYtPmRlYnVnZnNfcm9vdCA9IGRlYnVnZnNfY3JlYXRlX2Rpcigidmdhc3dpdGNoZXJvbyIsIE5VTEwpOworCisJaWYgKCFwcml2LT5kZWJ1Z2ZzX3Jvb3QpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ2Z2Ffc3dpdGNoZXJvbzogQ2Fubm90IGNyZWF0ZSAvc3lzL2tlcm5lbC9kZWJ1Zy92Z2Fzd2l0Y2hlcm9vXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCXByaXYtPnN3aXRjaF9maWxlID0gZGVidWdmc19jcmVhdGVfZmlsZSgic3dpdGNoIiwgMDY0NCwKKwkJCQkJCXByaXYtPmRlYnVnZnNfcm9vdCwgTlVMTCwgJnZnYV9zd2l0Y2hlcm9vX2RlYnVnZnNfZm9wcyk7CisJaWYgKCFwcml2LT5zd2l0Y2hfZmlsZSkgeworCQlwcmludGsoS0VSTl9FUlIgInZnYV9zd2l0Y2hlcm9vOiBjYW5ub3QgY3JlYXRlIC9zeXMva2VybmVsL2RlYnVnL3ZnYXN3aXRjaGVyb28vc3dpdGNoXG4iKTsKKwkJZ290byBmYWlsOworCX0KKwlyZXR1cm4gMDsKK2ZhaWw6CisJdmdhX3N3aXRjaGVyb29fZGVidWdmc19maW5pKHByaXYpOworCXJldHVybiAtMTsKK30KKworaW50IHZnYV9zd2l0Y2hlcm9vX3Byb2Nlc3NfZGVsYXllZF9zd2l0Y2godm9pZCkKK3sKKwlzdHJ1Y3QgdmdhX3N3aXRjaGVyb29fY2xpZW50ICpjbGllbnQgPSBOVUxMOworCWNvbnN0IGNoYXIgKnBkZXZfbmFtZTsKKwlib29sIGNhbl9zd2l0Y2ggPSB0cnVlOworCWludCBpOworCWludCByZXQ7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZ2Z2Fzcl9tdXRleCk7CisJaWYgKCF2Z2Fzcl9wcml2LmRlbGF5ZWRfc3dpdGNoX2FjdGl2ZSkKKwkJZ290byBlcnI7CisKKwlwcmludGsoS0VSTl9JTkZPICJ2Z2Ffc3dpdGNoZXJvbzogcHJvY2Vzc2luZyBkZWxheWVkIHN3aXRjaCB0byAlZFxuIiwgdmdhc3JfcHJpdi5kZWxheWVkX2NsaWVudF9pZCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVkdBX1NXSVRDSEVST09fTUFYX0NMSUVOVFM7IGkrKykgeworCQlpZiAodmdhc3JfcHJpdi5jbGllbnRzW2ldLmlkID09IHZnYXNyX3ByaXYuZGVsYXllZF9jbGllbnRfaWQpCisJCQljbGllbnQgPSAmdmdhc3JfcHJpdi5jbGllbnRzW2ldOworCQljYW5fc3dpdGNoID0gdmdhc3JfcHJpdi5jbGllbnRzW2ldLmNhbl9zd2l0Y2godmdhc3JfcHJpdi5jbGllbnRzW2ldLnBkZXYpOworCQlpZiAoY2FuX3N3aXRjaCA9PSBmYWxzZSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ2Z2Ffc3dpdGNoZXJvbzogY2xpZW50ICVkIHJlZnVzZWQgc3dpdGNoXG4iLCBpKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGNhbl9zd2l0Y2ggPT0gZmFsc2UgfHwgY2xpZW50ID09IE5VTEwpCisJCWdvdG8gZXJyOworCisJcGRldl9uYW1lID0gcGNpX25hbWUoY2xpZW50LT5wZGV2KTsKKwlyZXQgPSB2Z2Ffc3dpdGNodG8oY2xpZW50KTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgInZnYV9zd2l0Y2hlcm9vOiBkZWxheWVkIHN3aXRjaGluZyBmYWlsZWQgJWRcbiIsIHJldCk7CisKKwl2Z2Fzcl9wcml2LmRlbGF5ZWRfc3dpdGNoX2FjdGl2ZSA9IGZhbHNlOworCWVyciA9IDA7CitlcnI6CisJbXV0ZXhfdW5sb2NrKCZ2Z2Fzcl9tdXRleCk7CisJcmV0dXJuIGVycjsKK30KK0VYUE9SVF9TWU1CT0wodmdhX3N3aXRjaGVyb29fcHJvY2Vzc19kZWxheWVkX3N3aXRjaCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYyBiL2RyaXZlcnMvaGlkL3VzYmhpZC9oaWRkZXYuYwppbmRleCA4NjdlMDg0Li40MzM2MDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2hpZC91c2JoaWQvaGlkZGV2LmMKKysrIGIvZHJpdmVycy9oaWQvdXNiaGlkL2hpZGRldi5jCkBAIC0yNjUsOSArMjY1LDEwIEBACiBzdGF0aWMgaW50IGhpZGRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBoaWRkZXZfbGlzdCAqbGlzdDsKLQlpbnQgcmVzOworCWludCByZXMsIGk7CiAKLQlpbnQgaSA9IGltaW5vcihpbm9kZSkgLSBISURERVZfTUlOT1JfQkFTRTsKKwlsb2NrX2tlcm5lbCgpOworCWkgPSBpbWlub3IoaW5vZGUpIC0gSElEREVWX01JTk9SX0JBU0U7CiAKIAlpZiAoaSA+PSBISURERVZfTUlOT1JTIHx8IGkgPCAwIHx8ICFoaWRkZXZfdGFibGVbaV0pCiAJCXJldHVybiAtRU5PREVWOwpAQCAtMzEzLDEwICszMTQsMTIgQEAKIAkJCXVzYmhpZF9vcGVuKGhpZCk7CiAJCX0KIAorCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gMDsKIGJhaWw6CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKIAlrZnJlZShsaXN0KTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJlczsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCmluZGV4IDY4Y2Y4NzcuLmU0NTk1ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZworKysgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKQEAgLTE3MCw2ICsxNzAsMTYgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGFkbTkyNDAuCiAKK2NvbmZpZyBTRU5TT1JTX0FEVDc0MTEKKwl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURUNzQxMSIKKwlkZXBlbmRzIG9uIEkyQyAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIEFuYWxvZyBEZXZpY2VzCisJICBBRFQ3NDExIHZvbHRhZ2UgYW5kIHRlbXBlcmF0dXJlIG1vbml0b3JpbmcgY2hpcC4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBhZHQ3NDExLgorCiBjb25maWcgU0VOU09SU19BRFQ3NDYyCiAJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFEVDc0NjIiCiAJZGVwZW5kcyBvbiBJMkMgJiYgRVhQRVJJTUVOVEFMCkBAIC0xOTAsMjAgKzIwMCw2IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGFkdDc0NzAuCiAKLWNvbmZpZyBTRU5TT1JTX0FEVDc0NzMKLQl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURUNzQ3MyAoREVQUkVDQVRFRCkiCi0JZGVwZW5kcyBvbiBJMkMgJiYgRVhQRVJJTUVOVEFMCi0Jc2VsZWN0IFNFTlNPUlNfQURUNzQ3NQotCWhlbHAKLQkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgQW5hbG9nIERldmljZXMKLQkgIEFEVDc0NzMgdGVtcGVyYXR1cmUgbW9uaXRvcmluZyBjaGlwcy4KLQotCSAgVGhpcyBkcml2ZXIgaXMgZGVwcmVjYXRlZCwgeW91IHNob3VsZCB1c2UgdGhlIGFkdDc0NzUgZHJpdmVyCi0JICBpbnN0ZWFkLgotCi0JICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKLQkgIHdpbGwgYmUgY2FsbGVkIGFkdDc0NzMuCi0KIGNvbmZpZyBTRU5TT1JTX0FEVDc0NzUKIAl0cmlzdGF0ZSAiQW5hbG9nIERldmljZXMgQURUNzQ3MywgQURUNzQ3NSwgQURUNzQ3NiBhbmQgQURUNzQ5MCIKIAlkZXBlbmRzIG9uIEkyQyAmJiBFWFBFUklNRU5UQUwKQEAgLTIxNiw2ICsyMTIsMTkgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWxkIGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGFkdDc0NzUuCiAKK2NvbmZpZyBTRU5TT1JTX0FTQzc2MjEKKwl0cmlzdGF0ZSAiQW5kaWdpbG9nIGFTQzc2MjEiCisJZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIGFTQzc2MjEKKwkgIGZhbWlseSBvZiBTTUJ1cyBzZW5zb3JzIGNoaXAgZm91bmQgb24gbW9zdCBJbnRlbCBYNDgsIFgzOCwgOTc1LAorCSAgOTY1IGFuZCA5NDUgZGVza3RvcCBib2FyZHMuICBDdXJyZW50bHkgc3VwcG9ydGVkIGNoaXBzOgorCSAgYVNDNzYyMQorCSAgYVNDNzYyMWEKKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgYXNjNzYyMS4KKwogY29uZmlnIFNFTlNPUlNfSzhURU1QCiAJdHJpc3RhdGUgIkFNRCBBdGhsb242NC9GWCBvciBPcHRlcm9uIHRlbXBlcmF0dXJlIHNlbnNvciIKIAlkZXBlbmRzIG9uIFg4NiAmJiBQQ0kgJiYgRVhQRVJJTUVOVEFMCkBAIC01NjMsOSArNTcyLDEwIEBACiAJZGVwZW5kcyBvbiBJMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTkwLAotCSAgTE04NiwgTE04OSBhbmQgTE05OSwgQW5hbG9nIERldmljZXMgQURNMTAzMiBhbmQgQURUNzQ2MSwgYW5kIE1heGltCisJICBMTTg2LCBMTTg5IGFuZCBMTTk5LCBBbmFsb2cgRGV2aWNlcyBBRE0xMDMyIGFuZCBBRFQ3NDYxLCBNYXhpbQogCSAgTUFYNjY0NiwgTUFYNjY0NywgTUFYNjY0OCwgTUFYNjY0OSwgTUFYNjY1NywgTUFYNjY1OCwgTUFYNjY1OSwKLQkgIE1BWDY2ODAsIE1BWDY2ODEgYW5kIE1BWDY2OTIgc2Vuc29yIGNoaXBzLgorCSAgTUFYNjY4MCwgTUFYNjY4MSBhbmQgTUFYNjY5MiwgYW5kIFdpbmJvbmQvTnV2b3RvbiBXODNMNzcxQVdHL0FTRworCSAgc2Vuc29yIGNoaXBzLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBsbTkwLgpAQCAtOTA5LDcgKzkxOSw4IEBACiAJc2VsZWN0IEhXTU9OX1ZJRAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgV2luYm9uZCBXODM3OTMKLQkgIGhhcmR3YXJlIG1vbml0b3JpbmcgY2hpcC4KKwkgIGhhcmR3YXJlIG1vbml0b3JpbmcgY2hpcCwgaW5jbHVkaW5nIHN1cHBvcnQgZm9yIHRoZSBpbnRlZ3JhdGVkCisJICB3YXRjaGRvZy4KIAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgdzgzNzkzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9NYWtlZmlsZSBiL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKaW5kZXggNGJjMjE1Yy4uNGFhMWEzZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCkBAIC0yOSwxMiArMjksMTMgQEAKIG9iai0kKENPTkZJR19TRU5TT1JTX0FETTEwMzEpCSs9IGFkbTEwMzEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfQURNOTI0MCkJKz0gYWRtOTI0MC5vCiBvYmotJChDT05GSUdfU0VOU09SU19BRFM3ODI4KQkrPSBhZHM3ODI4Lm8KK29iai0kKENPTkZJR19TRU5TT1JTX0FEVDc0MTEpCSs9IGFkdDc0MTEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfQURUNzQ2MikJKz0gYWR0NzQ2Mi5vCiBvYmotJChDT05GSUdfU0VOU09SU19BRFQ3NDcwKQkrPSBhZHQ3NDcwLm8KLW9iai0kKENPTkZJR19TRU5TT1JTX0FEVDc0NzMpCSs9IGFkdDc0NzMubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfQURUNzQ3NSkJKz0gYWR0NzQ3NS5vCiBvYmotJChDT05GSUdfU0VOU09SU19BUFBMRVNNQykJKz0gYXBwbGVzbWMubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfQU1TKQkrPSBhbXMvCitvYmotJChDT05GSUdfU0VOU09SU19BU0M3NjIxKQkrPSBhc2M3NjIxLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0FUWFAxKQkrPSBhdHhwMS5vCiBvYmotJChDT05GSUdfU0VOU09SU19DT1JFVEVNUCkJKz0gY29yZXRlbXAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfRE1FMTczNykJKz0gZG1lMTczNy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkY3h4LmMgYi9kcml2ZXJzL2h3bW9uL2FkY3h4LmMKaW5kZXggNWU5ZTA5NS4uNzRkOWM1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZGN4eC5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWRjeHguYwpAQCAtNjIsMTggKzYyLDIzIEBACiAJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CiAJc3RydWN0IGFkY3h4ICphZGMgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKLQl1OCB0eF9idWZbMl0gPSB7IGF0dHItPmluZGV4IDw8IDMgfTsgLyogb3RoZXIgYml0cyBhcmUgZG9uJ3QgY2FyZSAqLworCXU4IHR4X2J1ZlsyXTsKIAl1OCByeF9idWZbMl07CiAJaW50IHN0YXR1czsKLQlpbnQgdmFsdWU7CisJdTMyIHZhbHVlOwogCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmYWRjLT5sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAotCXN0YXR1cyA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCB0eF9idWYsIHNpemVvZih0eF9idWYpLAotCQkJCQlyeF9idWYsIHNpemVvZihyeF9idWYpKTsKKwlpZiAoYWRjLT5jaGFubmVscyA9PSAxKSB7CisJCXN0YXR1cyA9IHNwaV9yZWFkKHNwaSwgcnhfYnVmLCBzaXplb2YocnhfYnVmKSk7CisJfSBlbHNlIHsKKwkJdHhfYnVmWzBdID0gYXR0ci0+aW5kZXggPDwgMzsgLyogb3RoZXIgYml0cyBhcmUgZG9uJ3QgY2FyZSAqLworCQlzdGF0dXMgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgdHhfYnVmLCBzaXplb2YodHhfYnVmKSwKKwkJCQkJCXJ4X2J1Ziwgc2l6ZW9mKHJ4X2J1ZikpOworCX0KIAlpZiAoc3RhdHVzIDwgMCkgewotCQlkZXZfd2FybihkZXYsICJzcGlfd3JpdGVfdGhlbl9yZWFkIGZhaWxlZCB3aXRoIHN0YXR1cyAlZFxuIiwKKwkJZGV2X3dhcm4oZGV2LCAiU1BJIHN5bmNoLiB0cmFuc2ZlciBmYWlsZWQgd2l0aCBzdGF0dXMgJWRcbiIsCiAJCQkJc3RhdHVzKTsKIAkJZ290byBvdXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZHQ3NDExLmMgYi9kcml2ZXJzL2h3bW9uL2FkdDc0MTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDcxODg0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od21vbi9hZHQ3NDExLmMKQEAgLTAsMCArMSwzNjYgQEAKKy8qCisgKiAgRHJpdmVyIGZvciB0aGUgQURUNzQxMSAoSTJDL1NQSSA4IGNoYW5uZWwgMTAgYml0IEFEQyAmIHRlbXBlcmF0dXJlLXNlbnNvcikKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA4LCAyMDEwIFBlbmd1dHJvbml4CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVE9ETzogU1BJLCBzdXBwb3J0IGZvciBleHRlcm5hbCB0ZW1wZXJhdHVyZSBzZW5zb3IKKyAqIAkgIHVzZSBwb3dlci1kb3duIG1vZGUgZm9yIHN1c3BlbmQ/LCBpbnRlcnJ1cHQgaGFuZGxpbmc/CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KKworI2RlZmluZSBBRFQ3NDExX1JFR19JTlRfVEVNUF9WRERfTFNCCQkweDAzCisjZGVmaW5lIEFEVDc0MTFfUkVHX0VYVF9URU1QX0FJTjE0X0xTQgkJMHgwNAorI2RlZmluZSBBRFQ3NDExX1JFR19WRERfTVNCCQkJMHgwNgorI2RlZmluZSBBRFQ3NDExX1JFR19JTlRfVEVNUF9NU0IJCTB4MDcKKyNkZWZpbmUgQURUNzQxMV9SRUdfRVhUX1RFTVBfQUlOMV9NU0IJCTB4MDgKKworI2RlZmluZSBBRFQ3NDExX1JFR19DRkcxCQkJMHgxOAorI2RlZmluZSBBRFQ3NDExX0NGRzFfU1RBUlRfTU9OSVRPUgkJKDEgPDwgMCkKKworI2RlZmluZSBBRFQ3NDExX1JFR19DRkcyCQkJMHgxOQorI2RlZmluZSBBRFQ3NDExX0NGRzJfRElTQUJMRV9BVkcJCSgxIDw8IDUpCisKKyNkZWZpbmUgQURUNzQxMV9SRUdfQ0ZHMwkJCTB4MWEKKyNkZWZpbmUgQURUNzQxMV9DRkczX0FEQ19DTEtfMjI1CQkoMSA8PCAwKQorI2RlZmluZSBBRFQ3NDExX0NGRzNfUkVGX1ZERAkJCSgxIDw8IDQpCisKKyNkZWZpbmUgQURUNzQxMV9SRUdfREVWSUNFX0lECQkJMHg0ZAorI2RlZmluZSBBRFQ3NDExX1JFR19NQU5VRkFDVFVSRVJfSUQJCTB4NGUKKworI2RlZmluZSBBRFQ3NDExX0RFVklDRV9JRAkJCTB4MgorI2RlZmluZSBBRFQ3NDExX01BTlVGQUNUVVJFUl9JRAkJCTB4NDEKKworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg0OCwgMHg0YSwgMHg0YiwgSTJDX0NMSUVOVF9FTkQgfTsKKworc3RydWN0IGFkdDc0MTFfZGF0YSB7CisJc3RydWN0IG11dGV4IGRldmljZV9sb2NrOwkvKiBmb3IgImF0b21pYyIgZGV2aWNlIGFjY2Vzc2VzICovCisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOworCXVuc2lnbmVkIGxvbmcgbmV4dF91cGRhdGU7CisJaW50IHZyZWZfY2FjaGVkOworCXN0cnVjdCBkZXZpY2UgKmh3bW9uX2RldjsKK307CisKKy8qCisgKiBXaGVuIHJlYWRpbmcgYSByZWdpc3RlciBjb250YWluaW5nICh1cCB0byA0KSBsc2IsIGFsbCBhc3NvY2lhdGVkCisgKiBtc2ItcmVnaXN0ZXJzIGdldCBsb2NrZWQgYnkgdGhlIGhhcmR3YXJlLiBBZnRlciBfb25lXyBvZiB0aG9zZSBtc2IgaXMgcmVhZCwKKyAqIF9hbGxfIGFyZSB1bmxvY2tlZC4gSW4gb3JkZXIgdG8gdXNlIHRoaXMgbG9ja2luZyBjb3JyZWN0bHksIHJlYWRpbmcgbHNiL21zYgorICogaXMgcHJvdGVjdGVkIGhlcmUgd2l0aCBhIG11dGV4LCB0b28uCisgKi8KK3N0YXRpYyBpbnQgYWR0NzQxMV9yZWFkXzEwX2JpdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBsc2JfcmVnLAorCQkJCXU4IG1zYl9yZWcsIHU4IGxzYl9zaGlmdCkKK3sKKwlzdHJ1Y3QgYWR0NzQxMV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHZhbCwgdG1wOworCisJbXV0ZXhfbG9jaygmZGF0YS0+ZGV2aWNlX2xvY2spOworCisJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgbHNiX3JlZyk7CisJaWYgKHZhbCA8IDApCisJCWdvdG8gZXhpdF91bmxvY2s7CisKKwl0bXAgPSAodmFsID4+IGxzYl9zaGlmdCkgJiAzOworCXZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIG1zYl9yZWcpOworCisJaWYgKHZhbCA+PSAwKQorCQl2YWwgPSAodmFsIDw8IDIpIHwgdG1wOworCisgZXhpdF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5kZXZpY2VfbG9jayk7CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW50IGFkdDc0MTFfbW9kaWZ5X2JpdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IGJpdCwKKwkJCQlib29sIGZsYWcpCit7CisJc3RydWN0IGFkdDc0MTFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCByZXQsIHZhbDsKKworCW11dGV4X2xvY2soJmRhdGEtPmRldmljZV9sb2NrKTsKKworCXJldCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZXhpdF91bmxvY2s7CisKKwlpZiAoZmxhZykKKwkJdmFsID0gcmV0IHwgYml0OworCWVsc2UKKwkJdmFsID0gcmV0ICYgfmJpdDsKKworCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbCk7CisKKyBleGl0X3VubG9jazoKKwltdXRleF91bmxvY2soJmRhdGEtPmRldmljZV9sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBhZHQ3NDExX3Nob3dfdmRkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJaW50IHJldCA9IGFkdDc0MTFfcmVhZF8xMF9iaXQoY2xpZW50LCBBRFQ3NDExX1JFR19JTlRfVEVNUF9WRERfTFNCLAorCQkJQURUNzQxMV9SRUdfVkREX01TQiwgMik7CisKKwlyZXR1cm4gcmV0IDwgMCA/IHJldCA6IHNwcmludGYoYnVmLCAiJXVcbiIsIHJldCAqIDcwMDAgLyAxMDI0KTsKK30KKworc3RhdGljIHNzaXplX3QgYWR0NzQxMV9zaG93X3RlbXAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCWludCB2YWwgPSBhZHQ3NDExX3JlYWRfMTBfYml0KGNsaWVudCwgQURUNzQxMV9SRUdfSU5UX1RFTVBfVkREX0xTQiwKKwkJCUFEVDc0MTFfUkVHX0lOVF9URU1QX01TQiwgMCk7CisKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuIHZhbDsKKworCXZhbCA9IHZhbCAmIDB4MjAwID8gdmFsIC0gMHg0MDAgOiB2YWw7IC8qIDEwIGJpdCBzaWduZWQgKi8KKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB2YWwgKiAyNTApOworfQorCitzdGF0aWMgc3NpemVfdCBhZHQ3NDExX3Nob3dfaW5wdXQoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlpbnQgbnIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0ciktPmluZGV4OworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGFkdDc0MTFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCB2YWw7CisJdTggbHNiX3JlZywgbHNiX3NoaWZ0OworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGRhdGEtPm5leHRfdXBkYXRlKSkgeworCQl2YWwgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDExX1JFR19DRkczKTsKKwkJaWYgKHZhbCA8IDApCisJCQlnb3RvIGV4aXRfdW5sb2NrOworCisJCWlmICh2YWwgJiBBRFQ3NDExX0NGRzNfUkVGX1ZERCkgeworCQkJdmFsID0gYWR0NzQxMV9yZWFkXzEwX2JpdChjbGllbnQsCisJCQkJCUFEVDc0MTFfUkVHX0lOVF9URU1QX1ZERF9MU0IsCisJCQkJCUFEVDc0MTFfUkVHX1ZERF9NU0IsIDIpOworCQkJaWYgKHZhbCA8IDApCisJCQkJZ290byBleGl0X3VubG9jazsKKworCQkJZGF0YS0+dnJlZl9jYWNoZWQgPSB2YWwgKiA3MDAwIC8gMTAyNDsKKwkJfSBlbHNlIHsKKwkJCWRhdGEtPnZyZWZfY2FjaGVkID0gMjI1MDsKKwkJfQorCisJCWRhdGEtPm5leHRfdXBkYXRlID0gamlmZmllcyArIEhaOworCX0KKworCWxzYl9yZWcgPSBBRFQ3NDExX1JFR19FWFRfVEVNUF9BSU4xNF9MU0IgKyAobnIgPj4gMik7CisJbHNiX3NoaWZ0ID0gMiAqIChuciAmIDB4MDMpOworCXZhbCA9IGFkdDc0MTFfcmVhZF8xMF9iaXQoY2xpZW50LCBsc2JfcmVnLAorCQkJQURUNzQxMV9SRUdfRVhUX1RFTVBfQUlOMV9NU0IgKyBuciwgbHNiX3NoaWZ0KTsKKwlpZiAodmFsIDwgMCkKKwkJZ290byBleGl0X3VubG9jazsKKworCXZhbCA9IHNwcmludGYoYnVmLCAiJXVcbiIsIHZhbCAqIGRhdGEtPnZyZWZfY2FjaGVkIC8gMTAyNCk7CisgZXhpdF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIHZhbDsKK30KKworc3RhdGljIHNzaXplX3QgYWR0NzQxMV9zaG93X2JpdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqYXR0cjIgPSB0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCWludCByZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBhdHRyMi0+aW5kZXgpOworCisJcmV0dXJuIHJldCA8IDAgPyByZXQgOiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAhIShyZXQgJiBhdHRyMi0+bnIpKTsKK30KKworc3RhdGljIHNzaXplX3QgYWR0NzQxMV9zZXRfYml0KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLAorCQkJICAgICAgIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc19hdHRyMiA9IHRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IGFkdDc0MTFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnOworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmZmxhZyk7CisJaWYgKHJldCB8fCBmbGFnID4gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXQgPSBhZHQ3NDExX21vZGlmeV9iaXQoY2xpZW50LCBzX2F0dHIyLT5pbmRleCwgc19hdHRyMi0+bnIsIGZsYWcpOworCisJLyogZm9yY2UgdXBkYXRlICovCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPm5leHRfdXBkYXRlID0gamlmZmllczsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiByZXQgPCAwID8gcmV0IDogY291bnQ7Cit9CisKKyNkZWZpbmUgQURUNzQxMV9CSVRfQVRUUihfX25hbWUsIF9fcmVnLCBfX2JpdCkgXAorCVNFTlNPUl9ERVZJQ0VfQVRUUl8yKF9fbmFtZSwgU19JUlVHTyB8IFNfSVdVU1IsIGFkdDc0MTFfc2hvd19iaXQsIFwKKwlhZHQ3NDExX3NldF9iaXQsIF9fYml0LCBfX3JlZykKKworc3RhdGljIERFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBhZHQ3NDExX3Nob3dfdGVtcCwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoaW4wX2lucHV0LCBTX0lSVUdPLCBhZHQ3NDExX3Nob3dfdmRkLCBOVUxMKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xX2lucHV0LCBTX0lSVUdPLCBhZHQ3NDExX3Nob3dfaW5wdXQsIE5VTEwsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjJfaW5wdXQsIFNfSVJVR08sIGFkdDc0MTFfc2hvd19pbnB1dCwgTlVMTCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluM19pbnB1dCwgU19JUlVHTywgYWR0NzQxMV9zaG93X2lucHV0LCBOVUxMLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW40X2lucHV0LCBTX0lSVUdPLCBhZHQ3NDExX3Nob3dfaW5wdXQsIE5VTEwsIDMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjVfaW5wdXQsIFNfSVJVR08sIGFkdDc0MTFfc2hvd19pbnB1dCwgTlVMTCwgNCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluNl9pbnB1dCwgU19JUlVHTywgYWR0NzQxMV9zaG93X2lucHV0LCBOVUxMLCA1KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW43X2lucHV0LCBTX0lSVUdPLCBhZHQ3NDExX3Nob3dfaW5wdXQsIE5VTEwsIDYpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjhfaW5wdXQsIFNfSVJVR08sIGFkdDc0MTFfc2hvd19pbnB1dCwgTlVMTCwgNyk7CitzdGF0aWMgQURUNzQxMV9CSVRfQVRUUihub19hdmVyYWdlLCBBRFQ3NDExX1JFR19DRkcyLCBBRFQ3NDExX0NGRzJfRElTQUJMRV9BVkcpOworc3RhdGljIEFEVDc0MTFfQklUX0FUVFIoZmFzdF9zYW1wbGluZywgQURUNzQxMV9SRUdfQ0ZHMywgQURUNzQxMV9DRkczX0FEQ19DTEtfMjI1KTsKK3N0YXRpYyBBRFQ3NDExX0JJVF9BVFRSKGFkY19yZWZfdmRkLCBBRFQ3NDExX1JFR19DRkczLCBBRFQ3NDExX0NGRzNfUkVGX1ZERCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZHQ3NDExX2F0dHJzW10gPSB7CisJJmRldl9hdHRyX3RlbXAxX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luMF9pbnB1dC5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luM19pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW40X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjVfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW43X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjhfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX25vX2F2ZXJhZ2UuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2Zhc3Rfc2FtcGxpbmcuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2FkY19yZWZfdmRkLmRldl9hdHRyLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgYWR0NzQxMV9hdHRyX2dycCA9IHsKKwkuYXR0cnMgPSBhZHQ3NDExX2F0dHJzLAorfTsKKworc3RhdGljIGludCBhZHQ3NDExX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pCit7CisJaW50IHZhbDsKKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0MTFfUkVHX01BTlVGQUNUVVJFUl9JRCk7CisJaWYgKHZhbCA8IDAgfHwgdmFsICE9IEFEVDc0MTFfTUFOVUZBQ1RVUkVSX0lEKSB7CisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiV3JvbmcgbWFudWZhY3R1cmVyIElELiBHb3QgJWQsICIKKwkJCSJleHBlY3RlZCAlZFxuIiwgdmFsLCBBRFQ3NDExX01BTlVGQUNUVVJFUl9JRCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0MTFfUkVHX0RFVklDRV9JRCk7CisJaWYgKHZhbCA8IDAgfHwgdmFsICE9IEFEVDc0MTFfREVWSUNFX0lEKSB7CisJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiV3JvbmcgZGV2aWNlIElELiBHb3QgJWQsICIKKwkJCSJleHBlY3RlZCAlZFxuIiwgdmFsLCBBRFQ3NDExX0RFVklDRV9JRCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXN0cmxjcHkoaW5mby0+dHlwZSwgImFkdDc0MTEiLCBJMkNfTkFNRV9TSVpFKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZHQ3NDExX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBhZHQ3NDExX2RhdGEgKmRhdGE7CisJaW50IHJldDsKKworCWRhdGEgPSBremFsbG9jKHNpemVvZigqZGF0YSksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKKwltdXRleF9pbml0KCZkYXRhLT5kZXZpY2VfbG9jayk7CisJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0ID0gYWR0NzQxMV9tb2RpZnlfYml0KGNsaWVudCwgQURUNzQxMV9SRUdfQ0ZHMSwKKwkJCQkgQURUNzQxMV9DRkcxX1NUQVJUX01PTklUT1IsIDEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGV4aXRfZnJlZTsKKworCS8qIGZvcmNlIHVwZGF0ZSBvbiBmaXJzdCBvY2Nhc2lvbiAqLworCWRhdGEtPm5leHRfdXBkYXRlID0gamlmZmllczsKKworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmFkdDc0MTFfYXR0cl9ncnApOworCWlmIChyZXQpCisJCWdvdG8gZXhpdF9mcmVlOworCisJZGF0YS0+aHdtb25fZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZjbGllbnQtPmRldik7CisJaWYgKElTX0VSUihkYXRhLT5od21vbl9kZXYpKSB7CisJCXJldCA9IFBUUl9FUlIoZGF0YS0+aHdtb25fZGV2KTsKKwkJZ290byBleGl0X3JlbW92ZTsKKwl9CisKKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZFxuIik7CisKKwlyZXR1cm4gMDsKKworIGV4aXRfcmVtb3ZlOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmFkdDc0MTFfYXR0cl9ncnApOworIGV4aXRfZnJlZToKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKKwlrZnJlZShkYXRhKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBhZHQ3NDExX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBhZHQ3NDExX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmYWR0NzQxMV9hdHRyX2dycCk7CisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhZHQ3NDExX2lkW10gPSB7CisJeyAiYWR0NzQxMSIsIDAgfSwKKwl7IH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBhZHQ3NDExX2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJCT0gImFkdDc0MTEiLAorCX0sCisJLnByb2JlICA9IGFkdDc0MTFfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKGFkdDc0MTFfcmVtb3ZlKSwKKwkuaWRfdGFibGUgPSBhZHQ3NDExX2lkLAorCS5kZXRlY3QgPSBhZHQ3NDExX2RldGVjdCwKKwkuYWRkcmVzc19saXN0ID0gbm9ybWFsX2kyYywKKwkuY2xhc3MgPSBJMkNfQ0xBU1NfSFdNT04sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzZW5zb3JzX2FkdDc0MTFfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmYWR0NzQxMV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQoc2Vuc29yc19hZHQ3NDExX2luaXQpCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzZW5zb3JzX2FkdDc0MTFfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZhZHQ3NDExX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChzZW5zb3JzX2FkdDc0MTFfZXhpdCkKKworTU9EVUxFX0FVVEhPUigiU2FzY2hhIEhhdWVyIDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPiBhbmQgIgorCSJXb2xmcmFtIFNhbmcgPHcuc2FuZ0BwZW5ndXRyb25peC5kZT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQURUNzQxMSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWR0NzQ3My5jIGIvZHJpdmVycy9od21vbi9hZHQ3NDczLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzNDU3NmYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9od21vbi9hZHQ3NDczLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTgwICswLDAgQEAKLS8qCi0gKiBBIGh3bW9uIGRyaXZlciBmb3IgdGhlIEFuYWxvZyBEZXZpY2VzIEFEVDc0NzMKLSAqIENvcHlyaWdodCAoQykgMjAwNyBJQk0KLSAqCi0gKiBBdXRob3I6IERhcnJpY2sgSi4gV29uZyA8ZGp3b25nQHVzLmlibS5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaHdtb24uaD4KLSNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9sb2cyLmg+Ci0KLS8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJDLCAweDJELCAweDJFLCBJMkNfQ0xJRU5UX0VORCB9OwotCi0vKiBBRFQ3NDczIHJlZ2lzdGVycyAqLwotI2RlZmluZSBBRFQ3NDczX1JFR19CQVNFX0FERFIJCQkweDIwCi0KLSNkZWZpbmUgQURUNzQ3M19SRUdfVk9MVF9CQVNFX0FERFIJCTB4MjEKLSNkZWZpbmUgQURUNzQ3M19SRUdfVk9MVF9NSU5fQkFTRV9BRERSCQkweDQ2Ci0KLSNkZWZpbmUgQURUNzQ3M19SRUdfVEVNUF9CQVNFX0FERFIJCTB4MjUKLSNkZWZpbmUgQURUNzQ3M19SRUdfVEVNUF9MSU1JVFNfQkFTRV9BRERSCTB4NEUKLSNkZWZpbmUgQURUNzQ3M19SRUdfVEVNUF9UTUlOX0JBU0VfQUREUgkJMHg2NwotI2RlZmluZSBBRFQ3NDczX1JFR19URU1QX1RNQVhfQkFTRV9BRERSCQkweDZBCi0KLSNkZWZpbmUgQURUNzQ3M19SRUdfRkFOX0JBU0VfQUREUgkJMHgyOAotI2RlZmluZSBBRFQ3NDczX1JFR19GQU5fTUlOX0JBU0VfQUREUgkJMHg1NAotCi0jZGVmaW5lIEFEVDc0NzNfUkVHX1BXTV9CQVNFX0FERFIJCTB4MzAKLSNkZWZpbmUJQURUNzQ3M19SRUdfUFdNX01JTl9CQVNFX0FERFIJCTB4NjQKLSNkZWZpbmUgQURUNzQ3M19SRUdfUFdNX01BWF9CQVNFX0FERFIJCTB4MzgKLSNkZWZpbmUgQURUNzQ3M19SRUdfUFdNX0JIVlJfQkFTRV9BRERSCQkweDVDCi0jZGVmaW5lCQlBRFQ3NDczX1BXTV9CSFZSX01BU0sJCTB4RTAKLSNkZWZpbmUJCUFEVDc0NzNfUFdNX0JIVlJfU0hJRlQJCTUKLQotI2RlZmluZSBBRFQ3NDczX1JFR19DRkcxCQkJMHg0MAotI2RlZmluZSAJQURUNzQ3M19DRkcxX1NUQVJUCQkweDAxCi0jZGVmaW5lCQlBRFQ3NDczX0NGRzFfUkVBRFkJCTB4MDQKLSNkZWZpbmUgQURUNzQ3M19SRUdfQ0ZHMgkJCTB4NzMKLSNkZWZpbmUgQURUNzQ3M19SRUdfQ0ZHMwkJCTB4NzgKLSNkZWZpbmUgQURUNzQ3M19SRUdfQ0ZHNAkJCTB4N0QKLSNkZWZpbmUJCUFEVDc0NzNfQ0ZHNF9NQVhfRFVUWV9BVF9PVlQJMHgwOAotI2RlZmluZSBBRFQ3NDczX1JFR19DRkc1CQkJMHg3QwotI2RlZmluZQkJQURUNzQ3M19DRkc1X1RFTVBfVFdPUwkJMHgwMQotI2RlZmluZQkJQURUNzQ3M19DRkc1X1RFTVBfT0ZGU0VUCTB4MDIKLQotI2RlZmluZSBBRFQ3NDczX1JFR19ERVZJQ0UJCQkweDNECi0jZGVmaW5lIAlBRFQ3NDczX1ZFTkRPUgkJCTB4NDEKLSNkZWZpbmUgQURUNzQ3M19SRUdfVkVORE9SCQkJMHgzRQotI2RlZmluZSAJQURUNzQ3M19ERVZJQ0UJCQkweDczCi0jZGVmaW5lIEFEVDc0NzNfUkVHX1JFVklTSU9OCQkJMHgzRgotI2RlZmluZSAJQURUNzQ3M19SRVZfNjgJCQkweDY4Ci0jZGVmaW5lIAlBRFQ3NDczX1JFVl82OQkJCTB4NjkKLQotI2RlZmluZSBBRFQ3NDczX1JFR19BTEFSTTEJCQkweDQxCi0jZGVmaW5lCQlBRFQ3NDczX1ZDQ1BfQUxBUk0JCTB4MDIKLSNkZWZpbmUJCUFEVDc0NzNfVkNDX0FMQVJNCQkweDA0Ci0jZGVmaW5lCQlBRFQ3NDczX1IxVF9BTEFSTQkJMHgxMAotI2RlZmluZQkJQURUNzQ3M19MVF9BTEFSTQkJMHgyMAotI2RlZmluZQkJQURUNzQ3M19SMlRfQUxBUk0JCTB4NDAKLSNkZWZpbmUJCUFEVDc0NzNfT09MCQkJMHg4MAotI2RlZmluZSBBRFQ3NDczX1JFR19BTEFSTTIJCQkweDQyCi0jZGVmaW5lCQlBRFQ3NDczX09WVF9BTEFSTQkJMHgwMgotI2RlZmluZQkJQURUNzQ3M19GQU4xX0FMQVJNCQkweDA0Ci0jZGVmaW5lCQlBRFQ3NDczX0ZBTjJfQUxBUk0JCTB4MDgKLSNkZWZpbmUJCUFEVDc0NzNfRkFOM19BTEFSTQkJMHgxMAotI2RlZmluZQkJQURUNzQ3M19GQU40X0FMQVJNCQkweDIwCi0jZGVmaW5lCQlBRFQ3NDczX1IxVF9TSE9SVAkJMHg0MAotI2RlZmluZQkJQURUNzQ3M19SMlRfU0hPUlQJCTB4ODAKLQotI2RlZmluZSBBTEFSTTIoeCkJKCh4KSA8PCA4KQotCi0jZGVmaW5lIEFEVDc0NzNfVk9MVF9DT1VOVAkyCi0jZGVmaW5lIEFEVDc0NzNfUkVHX1ZPTFQoeCkJKEFEVDc0NzNfUkVHX1ZPTFRfQkFTRV9BRERSICsgKHgpKQotI2RlZmluZSBBRFQ3NDczX1JFR19WT0xUX01JTih4KQkoQURUNzQ3M19SRUdfVk9MVF9NSU5fQkFTRV9BRERSICsgKCh4KSAqIDIpKQotI2RlZmluZSBBRFQ3NDczX1JFR19WT0xUX01BWCh4KQkoQURUNzQ3M19SRUdfVk9MVF9NSU5fQkFTRV9BRERSICsgXAotCQkJCSgoeCkgKiAyKSArIDEpCi0KLSNkZWZpbmUgQURUNzQ3M19URU1QX0NPVU5UCTMKLSNkZWZpbmUgQURUNzQ3M19SRUdfVEVNUCh4KQkoQURUNzQ3M19SRUdfVEVNUF9CQVNFX0FERFIgKyAoeCkpCi0jZGVmaW5lIEFEVDc0NzNfUkVHX1RFTVBfTUlOKHgpIChBRFQ3NDczX1JFR19URU1QX0xJTUlUU19CQVNFX0FERFIgKyAoKHgpICogMikpCi0jZGVmaW5lIEFEVDc0NzNfUkVHX1RFTVBfTUFYKHgpIChBRFQ3NDczX1JFR19URU1QX0xJTUlUU19CQVNFX0FERFIgKyBcCi0JCQkJKCh4KSAqIDIpICsgMSkKLSNkZWZpbmUgQURUNzQ3M19SRUdfVEVNUF9UTUlOKHgpCShBRFQ3NDczX1JFR19URU1QX1RNSU5fQkFTRV9BRERSICsgKHgpKQotI2RlZmluZSBBRFQ3NDczX1JFR19URU1QX1RNQVgoeCkJKEFEVDc0NzNfUkVHX1RFTVBfVE1BWF9CQVNFX0FERFIgKyAoeCkpCi0KLSNkZWZpbmUgQURUNzQ3M19GQU5fQ09VTlQJNAotI2RlZmluZSBBRFQ3NDczX1JFR19GQU4oeCkJKEFEVDc0NzNfUkVHX0ZBTl9CQVNFX0FERFIgKyAoKHgpICogMikpCi0jZGVmaW5lIEFEVDc0NzNfUkVHX0ZBTl9NSU4oeCkJKEFEVDc0NzNfUkVHX0ZBTl9NSU5fQkFTRV9BRERSICsgKCh4KSAqIDIpKQotCi0jZGVmaW5lIEFEVDc0NzNfUFdNX0NPVU5UCTMKLSNkZWZpbmUgQURUNzQ3M19SRUdfUFdNKHgpCShBRFQ3NDczX1JFR19QV01fQkFTRV9BRERSICsgKHgpKQotI2RlZmluZSBBRFQ3NDczX1JFR19QV01fTUFYKHgpCShBRFQ3NDczX1JFR19QV01fTUFYX0JBU0VfQUREUiArICh4KSkKLSNkZWZpbmUgQURUNzQ3M19SRUdfUFdNX01JTih4KQkoQURUNzQ3M19SRUdfUFdNX01JTl9CQVNFX0FERFIgKyAoeCkpCi0jZGVmaW5lIEFEVDc0NzNfUkVHX1BXTV9CSFZSKHgpCShBRFQ3NDczX1JFR19QV01fQkhWUl9CQVNFX0FERFIgKyAoeCkpCi0KLS8qIEhvdyBvZnRlbiBkbyB3ZSByZXJlYWQgc2Vuc29ycyB2YWx1ZXM/IChJbiBqaWZmaWVzKSAqLwotI2RlZmluZSBTRU5TT1JfUkVGUkVTSF9JTlRFUlZBTAkoMiAqIEhaKQotCi0vKiBIb3cgb2Z0ZW4gZG8gd2UgcmVyZWFkIHNlbnNvciBsaW1pdCB2YWx1ZXM/IChJbiBqaWZmaWVzKSAqLwotI2RlZmluZSBMSU1JVF9SRUZSRVNIX0lOVEVSVkFMCSg2MCAqIEhaKQotCi0vKiBkYXRhc2hlZXQgc2F5cyB0byBkaXZpZGUgdGhpcyBudW1iZXIgYnkgdGhlIGZhbiByZWFkaW5nIHRvIGdldCBmYW4gcnBtICovCi0jZGVmaW5lIEZBTl9QRVJJT0RfVE9fUlBNKHgpCSgoOTAwMDAgKiA2MCkgLyAoeCkpCi0jZGVmaW5lIEZBTl9SUE1fVE9fUEVSSU9ECUZBTl9QRVJJT0RfVE9fUlBNCi0jZGVmaW5lIEZBTl9QRVJJT0RfSU5WQUxJRAk2NTUzNQotI2RlZmluZSBGQU5fREFUQV9WQUxJRCh4KQkoKHgpICYmICh4KSAhPSBGQU5fUEVSSU9EX0lOVkFMSUQpCi0KLXN0cnVjdCBhZHQ3NDczX2RhdGEgewotCXN0cnVjdCBkZXZpY2UJCSpod21vbl9kZXY7Ci0Jc3RydWN0IGF0dHJpYnV0ZV9ncm91cAlhdHRyczsKLQlzdHJ1Y3QgbXV0ZXgJCWxvY2s7Ci0JY2hhcgkJCXNlbnNvcnNfdmFsaWQ7Ci0JY2hhcgkJCWxpbWl0c192YWxpZDsKLQl1bnNpZ25lZCBsb25nCQlzZW5zb3JzX2xhc3RfdXBkYXRlZDsJLyogSW4gamlmZmllcyAqLwotCXVuc2lnbmVkIGxvbmcJCWxpbWl0c19sYXN0X3VwZGF0ZWQ7CS8qIEluIGppZmZpZXMgKi8KLQotCXU4CQkJdm9sdFtBRFQ3NDczX1ZPTFRfQ09VTlRdOwotCXM4CQkJdm9sdF9taW5bQURUNzQ3M19WT0xUX0NPVU5UXTsKLQlzOAkJCXZvbHRfbWF4W0FEVDc0NzNfVk9MVF9DT1VOVF07Ci0KLQlzOAkJCXRlbXBbQURUNzQ3M19URU1QX0NPVU5UXTsKLQlzOAkJCXRlbXBfbWluW0FEVDc0NzNfVEVNUF9DT1VOVF07Ci0JczgJCQl0ZW1wX21heFtBRFQ3NDczX1RFTVBfQ09VTlRdOwotCXM4CQkJdGVtcF90bWluW0FEVDc0NzNfVEVNUF9DT1VOVF07Ci0JLyogVGhpcyBpcyBjYWxsZWQgdGhlICFUSEVSTSBsaW1pdCBpbiB0aGUgZGF0YXNoZWV0ICovCi0JczgJCQl0ZW1wX3RtYXhbQURUNzQ3M19URU1QX0NPVU5UXTsKLQotCXUxNgkJCWZhbltBRFQ3NDczX0ZBTl9DT1VOVF07Ci0JdTE2CQkJZmFuX21pbltBRFQ3NDczX0ZBTl9DT1VOVF07Ci0KLQl1OAkJCXB3bVtBRFQ3NDczX1BXTV9DT1VOVF07Ci0JdTgJCQlwd21fbWF4W0FEVDc0NzNfUFdNX0NPVU5UXTsKLQl1OAkJCXB3bV9taW5bQURUNzQ3M19QV01fQ09VTlRdOwotCXU4CQkJcHdtX2JlaGF2aW9yW0FEVDc0NzNfUFdNX0NPVU5UXTsKLQotCXU4CQkJdGVtcF90d29zX2NvbXBsZW1lbnQ7Ci0JdTgJCQl0ZW1wX29mZnNldDsKLQotCXUxNgkJCWFsYXJtOwotCXU4CQkJbWF4X2R1dHlfYXRfb3ZlcmhlYXQ7Ci19OwotCi1zdGF0aWMgaW50IGFkdDc0NzNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCBhZHQ3NDczX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gKmluZm8pOwotc3RhdGljIGludCBhZHQ3NDczX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGFkdDc0NzNfaWRbXSA9IHsKLQl7ICJhZHQ3NDczIiwgMCB9LAotCXsgfQotfTsKLQotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFkdDc0NzNfZHJpdmVyID0gewotCS5jbGFzcwkJPSBJMkNfQ0xBU1NfSFdNT04sCi0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAiYWR0NzQ3MyIsCi0JfSwKLQkucHJvYmUJCT0gYWR0NzQ3M19wcm9iZSwKLQkucmVtb3ZlCQk9IGFkdDc0NzNfcmVtb3ZlLAotCS5pZF90YWJsZQk9IGFkdDc0NzNfaWQsCi0JLmRldGVjdAkJPSBhZHQ3NDczX2RldGVjdCwKLQkuYWRkcmVzc19saXN0CT0gbm9ybWFsX2kyYywKLX07Ci0KLS8qCi0gKiAxNi1iaXQgcmVnaXN0ZXJzIG9uIHRoZSBBRFQ3NDczIGFyZSBsb3ctYnl0ZSBmaXJzdC4gIFRoZSBkYXRhIHNoZWV0IHNheXMKLSAqIHRoYXQgdGhlIGxvdyBieXRlIG11c3QgYmUgcmVhZCBiZWZvcmUgdGhlIGhpZ2ggYnl0ZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYWR0NzQ3M19yZWFkX3dvcmRfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCi17Ci0JdTE2IGZvbzsKLQlmb28gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwotCWZvbyB8PSAoKHUxNilpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcgKyAxKSA8PCA4KTsKLQlyZXR1cm4gZm9vOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBhZHQ3NDczX3dyaXRlX3dvcmRfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsCi0JCQkJCSAgdTE2IHZhbHVlKQotewotCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSAmIDB4RkYpCi0JICAgICAgICYmIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcgKyAxLCB2YWx1ZSA+PiA4KTsKLX0KLQotc3RhdGljIHZvaWQgYWR0NzQ3M19pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWludCByZWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19DRkcxKTsKLQotCWlmICghKHJlZyAmIEFEVDc0NzNfQ0ZHMV9SRUFEWSkpIHsKLQkJZGV2X2VycigmY2xpZW50LT5kZXYsICJDaGlwIG5vdCByZWFkeS5cbiIpOwotCX0gZWxzZSB7Ci0JCS8qIHN0YXJ0IG1vbml0b3JpbmcgKi8KLQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0NzNfUkVHX0NGRzEsCi0JCQkJCSAgcmVnIHwgQURUNzQ3M19DRkcxX1NUQVJUKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgYWR0NzQ3M19kYXRhICphZHQ3NDczX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXVuc2lnbmVkIGxvbmcgbG9jYWxfamlmZmllcyA9IGppZmZpZXM7Ci0JdTggY2ZnOwotCWludCBpOwotCi0JbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7Ci0JaWYgKHRpbWVfYmVmb3JlKGxvY2FsX2ppZmZpZXMsIGRhdGEtPnNlbnNvcnNfbGFzdF91cGRhdGVkICsKLQkJU0VOU09SX1JFRlJFU0hfSU5URVJWQUwpCi0JCSYmIGRhdGEtPnNlbnNvcnNfdmFsaWQpCi0JCWdvdG8gbm9fc2Vuc29yX3VwZGF0ZTsKLQotCWZvciAoaSA9IDA7IGkgPCBBRFQ3NDczX1ZPTFRfQ09VTlQ7IGkrKykKLQkJZGF0YS0+dm9sdFtpXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCQlBRFQ3NDczX1JFR19WT0xUKGkpKTsKLQotCS8qIERldGVybWluZSB0ZW1wZXJhdHVyZSBlbmNvZGluZyAqLwotCWNmZyA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0NzNfUkVHX0NGRzUpOwotCWRhdGEtPnRlbXBfdHdvc19jb21wbGVtZW50ID0gKGNmZyAmIEFEVDc0NzNfQ0ZHNV9URU1QX1RXT1MpOwotCi0JLyoKLQkgKiBXaGF0IGRvZXMgdGhpcyBkbz8gaXQgaW1wbGllcyBhIHZhcmlhYmxlIHRlbXBlcmF0dXJlIHNlbnNvcgotCSAqIG9mZnNldCwgYnV0IHRoZSBkYXRhc2hlZXQgZG9lc24ndCBzYXkgYW55dGhpbmcgYWJvdXQgdGhpcyBiaXQKLQkgKiBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIGRhdGFzaGVldCBpbXBseSB0aGF0ICJvZmZzZXQ2NCIgbW9kZQotCSAqIG1lYW5zIHRoYXQgeW91IHNoaWZ0IHRlbXAgdmFsdWVzIGJ5IC02NCBpZiB0aGUgYWJvdmUgYml0IHdhcyBzZXQuCi0JICovCi0JZGF0YS0+dGVtcF9vZmZzZXQgPSAoY2ZnICYgQURUNzQ3M19DRkc1X1RFTVBfT0ZGU0VUKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBRFQ3NDczX1RFTVBfQ09VTlQ7IGkrKykKLQkJZGF0YS0+dGVtcFtpXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCQkJIEFEVDc0NzNfUkVHX1RFTVAoaSkpOwotCi0JZm9yIChpID0gMDsgaSA8IEFEVDc0NzNfRkFOX0NPVU5UOyBpKyspCi0JCWRhdGEtPmZhbltpXSA9IGFkdDc0NzNfcmVhZF93b3JkX2RhdGEoY2xpZW50LAotCQkJCQkJQURUNzQ3M19SRUdfRkFOKGkpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBRFQ3NDczX1BXTV9DT1VOVDsgaSsrKQotCQlkYXRhLT5wd21baV0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJQURUNzQ3M19SRUdfUFdNKGkpKTsKLQotCWRhdGEtPmFsYXJtID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfQUxBUk0xKTsKLQlpZiAoZGF0YS0+YWxhcm0gJiBBRFQ3NDczX09PTCkKLQkJZGF0YS0+YWxhcm0gfD0gQUxBUk0yKGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCQkJIEFEVDc0NzNfUkVHX0FMQVJNMikpOwotCi0JZGF0YS0+c2Vuc29yc19sYXN0X3VwZGF0ZWQgPSBsb2NhbF9qaWZmaWVzOwotCWRhdGEtPnNlbnNvcnNfdmFsaWQgPSAxOwotCi1ub19zZW5zb3JfdXBkYXRlOgotCWlmICh0aW1lX2JlZm9yZShsb2NhbF9qaWZmaWVzLCBkYXRhLT5saW1pdHNfbGFzdF91cGRhdGVkICsKLQkJTElNSVRfUkVGUkVTSF9JTlRFUlZBTCkKLQkJJiYgZGF0YS0+bGltaXRzX3ZhbGlkKQotCQlnb3RvIG91dDsKLQotCWZvciAoaSA9IDA7IGkgPCBBRFQ3NDczX1ZPTFRfQ09VTlQ7IGkrKykgewotCQlkYXRhLT52b2x0X21pbltpXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCQlBRFQ3NDczX1JFR19WT0xUX01JTihpKSk7Ci0JCWRhdGEtPnZvbHRfbWF4W2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJCUFEVDc0NzNfUkVHX1ZPTFRfTUFYKGkpKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQURUNzQ3M19URU1QX0NPVU5UOyBpKyspIHsKLQkJZGF0YS0+dGVtcF9taW5baV0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJQURUNzQ3M19SRUdfVEVNUF9NSU4oaSkpOwotCQlkYXRhLT50ZW1wX21heFtpXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCQlBRFQ3NDczX1JFR19URU1QX01BWChpKSk7Ci0JCWRhdGEtPnRlbXBfdG1pbltpXSA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCQlBRFQ3NDczX1JFR19URU1QX1RNSU4oaSkpOwotCQlkYXRhLT50ZW1wX3RtYXhbaV0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJQURUNzQ3M19SRUdfVEVNUF9UTUFYKGkpKTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQURUNzQ3M19GQU5fQ09VTlQ7IGkrKykKLQkJZGF0YS0+ZmFuX21pbltpXSA9IGFkdDc0NzNfcmVhZF93b3JkX2RhdGEoY2xpZW50LAotCQkJCQkJQURUNzQ3M19SRUdfRkFOX01JTihpKSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQURUNzQ3M19QV01fQ09VTlQ7IGkrKykgewotCQlkYXRhLT5wd21fbWF4W2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJCUFEVDc0NzNfUkVHX1BXTV9NQVgoaSkpOwotCQlkYXRhLT5wd21fbWluW2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJCUFEVDc0NzNfUkVHX1BXTV9NSU4oaSkpOwotCQlkYXRhLT5wd21fYmVoYXZpb3JbaV0gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQkJQURUNzQ3M19SRUdfUFdNX0JIVlIoaSkpOwotCX0KLQotCWkgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19DRkc0KTsKLQlkYXRhLT5tYXhfZHV0eV9hdF9vdmVyaGVhdCA9ICEhKGkgJiBBRFQ3NDczX0NGRzRfTUFYX0RVVFlfQVRfT1ZUKTsKLQotCWRhdGEtPmxpbWl0c19sYXN0X3VwZGF0ZWQgPSBsb2NhbF9qaWZmaWVzOwotCWRhdGEtPmxpbWl0c192YWxpZCA9IDE7Ci0KLW91dDoKLQltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwotCXJldHVybiBkYXRhOwotfQotCi0vKgotICogQ29udmVyc2lvbnMKLSAqLwotCi0vKiBJTiBhcmUgc2NhbGVkIGFjb3JkaW5nIHRvIGJ1aWx0LWluIHJlc2lzdG9ycyAqLwotc3RhdGljIGNvbnN0IGludCBhZHQ3NDczX3NjYWxpbmdbXSA9IHsgIC8qIC4wMDEgVm9sdHMgKi8KLQkyMjUwLCAzMzAwCi19OwotI2RlZmluZSBTQ0FMRSh2YWwsIGZyb20sIHRvKQkoKCh2YWwpICogKHRvKSArICgoZnJvbSkgLyAyKSkgLyAoZnJvbSkpCi0KLXN0YXRpYyBpbnQgZGVjb2RlX3ZvbHQoaW50IHZvbHRfaW5kZXgsIHU4IHJhdykKLXsKLQlyZXR1cm4gU0NBTEUocmF3LCAxOTIsIGFkdDc0NzNfc2NhbGluZ1t2b2x0X2luZGV4XSk7Ci19Ci0KLXN0YXRpYyB1OCBlbmNvZGVfdm9sdChpbnQgdm9sdF9pbmRleCwgaW50IGNvb2tlZCkKLXsKLQlpbnQgcmF3ID0gU0NBTEUoY29va2VkLCBhZHQ3NDczX3NjYWxpbmdbdm9sdF9pbmRleF0sIDE5Mik7Ci0JcmV0dXJuIFNFTlNPUlNfTElNSVQocmF3LCAwLCAyNTUpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X3ZvbHRfbWluKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgICAgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGFkdDc0NzNfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAotCQkgICAgICAgZGVjb2RlX3ZvbHQoYXR0ci0+aW5kZXgsIGRhdGEtPnZvbHRfbWluW2F0dHItPmluZGV4XSkpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzZXRfdm9sdF9taW4oc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAotCQkJICAgIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgICBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWxvbmcgdm9sdDsKLQotCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2b2x0KSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl2b2x0ID0gZW5jb2RlX3ZvbHQoYXR0ci0+aW5kZXgsIHZvbHQpOwotCi0JbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7Ci0JZGF0YS0+dm9sdF9taW5bYXR0ci0+aW5kZXhdID0gdm9sdDsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfVk9MVF9NSU4oYXR0ci0+aW5kZXgpLAotCQkJCSAgdm9sdCk7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd192b2x0X21heChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAotCQkJICAgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBhZHQ3NDczX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwKLQkJICAgICAgIGRlY29kZV92b2x0KGF0dHItPmluZGV4LCBkYXRhLT52b2x0X21heFthdHRyLT5pbmRleF0pKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2V0X3ZvbHRfbWF4KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCSAgICBjb25zdCBjaGFyICpidWYsCi0JCQkgICAgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlsb25nIHZvbHQ7Ci0KLQlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdm9sdCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jdm9sdCA9IGVuY29kZV92b2x0KGF0dHItPmluZGV4LCB2b2x0KTsKLQotCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwotCWRhdGEtPnZvbHRfbWF4W2F0dHItPmluZGV4XSA9IHZvbHQ7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0NzNfUkVHX1ZPTFRfTUFYKGF0dHItPmluZGV4KSwKLQkJCQkgIHZvbHQpOwotCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfdm9sdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAotCQkJIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGFkdDc0NzNfdXBkYXRlX2RldmljZShkZXYpOwotCi0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCi0JCSAgICAgICBkZWNvZGVfdm9sdChhdHRyLT5pbmRleCwgZGF0YS0+dm9sdFthdHRyLT5pbmRleF0pKTsKLX0KLQotLyoKLSAqIFRoaXMgY2hpcCBjYW4gcmVwb3J0IHRlbXBlcmF0dXJlIGRhdGEgZWl0aGVyIGFzIGEgdHdvJ3MgY29tcGxlbWVudAotICogbnVtYmVyIGluIHRoZSByYW5nZSAtMTI4IHRvIDEyNywgb3IgYXMgYW4gdW5zaWduZWQgbnVtYmVyIHRoYXQgbXVzdAotICogYmUgb2Zmc2V0IGJ5IDY0LgotICovCi1zdGF0aWMgaW50IGRlY29kZV90ZW1wKHU4IHR3b3NfY29tcGxlbWVudCwgdTggcmF3KQotewotCXJldHVybiB0d29zX2NvbXBsZW1lbnQgPyAoczgpcmF3IDogcmF3IC0gNjQ7Ci19Ci0KLXN0YXRpYyB1OCBlbmNvZGVfdGVtcCh1OCB0d29zX2NvbXBsZW1lbnQsIGludCBjb29rZWQpCi17Ci0JdTggcmV0ID0gdHdvc19jb21wbGVtZW50ID8gY29va2VkICYgMHhGRiA6IGNvb2tlZCArIDY0OwotCXJldHVybiBTRU5TT1JTX0xJTUlUKHJldCwgMCwgMjU1KTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAotCQkJICAgICBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBhZHQ3NDczX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgMTAwMCAqIGRlY29kZV90ZW1wKAotCQkJCQkJZGF0YS0+dGVtcF90d29zX2NvbXBsZW1lbnQsCi0JCQkJCQlkYXRhLT50ZW1wX21pblthdHRyLT5pbmRleF0pKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2V0X3RlbXBfbWluKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCSAgICBjb25zdCBjaGFyICpidWYsCi0JCQkgICAgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlsb25nIHRlbXA7Ci0KLQlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdGVtcCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdGVtcCA9IERJVl9ST1VORF9DTE9TRVNUKHRlbXAsIDEwMDApOwotCXRlbXAgPSBlbmNvZGVfdGVtcChkYXRhLT50ZW1wX3R3b3NfY29tcGxlbWVudCwgdGVtcCk7Ci0KLQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKLQlkYXRhLT50ZW1wX21pblthdHRyLT5pbmRleF0gPSB0ZW1wOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19URU1QX01JTihhdHRyLT5pbmRleCksCi0JCQkJICB0ZW1wKTsKLQltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfbWF4KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgICAgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGFkdDc0NzNfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAxMDAwICogZGVjb2RlX3RlbXAoCi0JCQkJCQlkYXRhLT50ZW1wX3R3b3NfY29tcGxlbWVudCwKLQkJCQkJCWRhdGEtPnRlbXBfbWF4W2F0dHItPmluZGV4XSkpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzZXRfdGVtcF9tYXgoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAotCQkJICAgIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgICBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWxvbmcgdGVtcDsKLQotCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ0ZW1wKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0ZW1wID0gRElWX1JPVU5EX0NMT1NFU1QodGVtcCwgMTAwMCk7Ci0JdGVtcCA9IGVuY29kZV90ZW1wKGRhdGEtPnRlbXBfdHdvc19jb21wbGVtZW50LCB0ZW1wKTsKLQotCW11dGV4X2xvY2soJmRhdGEtPmxvY2spOwotCWRhdGEtPnRlbXBfbWF4W2F0dHItPmluZGV4XSA9IHRlbXA7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0NzNfUkVHX1RFTVBfTUFYKGF0dHItPmluZGV4KSwKLQkJCQkgIHRlbXApOwotCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAotCQkJIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGFkdDc0NzNfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAxMDAwICogZGVjb2RlX3RlbXAoCi0JCQkJCQlkYXRhLT50ZW1wX3R3b3NfY29tcGxlbWVudCwKLQkJCQkJCWRhdGEtPnRlbXBbYXR0ci0+aW5kZXhdKSk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfZmFuX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gYWR0NzQ3M191cGRhdGVfZGV2aWNlKGRldik7Ci0KLQlpZiAoRkFOX0RBVEFfVkFMSUQoZGF0YS0+ZmFuX21pblthdHRyLT5pbmRleF0pKQotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwKLQkJCSAgICAgICBGQU5fUEVSSU9EX1RPX1JQTShkYXRhLT5mYW5fbWluW2F0dHItPmluZGV4XSkpOwotCWVsc2UKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiMFxuIik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF9mYW5fbWluKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAotCQkJICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWxvbmcgdGVtcDsKLQotCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ0ZW1wKSB8fCAhdGVtcCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0ZW1wID0gRkFOX1JQTV9UT19QRVJJT0QodGVtcCk7Ci0JdGVtcCA9IFNFTlNPUlNfTElNSVQodGVtcCwgMSwgNjU1MzQpOwotCi0JbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7Ci0JZGF0YS0+ZmFuX21pblthdHRyLT5pbmRleF0gPSB0ZW1wOwotCWFkdDc0NzNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfRkFOX01JTihhdHRyLT5pbmRleCksIHRlbXApOwotCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfZmFuKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQljaGFyICpidWYpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBhZHQ3NDczX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQotCWlmIChGQU5fREFUQV9WQUxJRChkYXRhLT5mYW5bYXR0ci0+aW5kZXhdKSkKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCi0JCQkgICAgICAgRkFOX1BFUklPRF9UT19SUE0oZGF0YS0+ZmFuW2F0dHItPmluZGV4XSkpOwotCWVsc2UKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiMFxuIik7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfbWF4X2R1dHlfYXRfY3JpdChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCQkgICAgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gYWR0NzQ3M191cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPm1heF9kdXR5X2F0X292ZXJoZWF0KTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2V0X21heF9kdXR5X2F0X2NyaXQoc3RydWN0IGRldmljZSAqZGV2LAotCQkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCQkgICAgY29uc3QgY2hhciAqYnVmLAotCQkJCSAgICBzaXplX3QgY291bnQpCi17Ci0JdTggcmVnOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWxvbmcgdGVtcDsKLQotCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ0ZW1wKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKLQlkYXRhLT5tYXhfZHV0eV9hdF9vdmVyaGVhdCA9ICEhdGVtcDsKLQlyZWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19DRkc0KTsKLQlpZiAodGVtcCkKLQkJcmVnIHw9IEFEVDc0NzNfQ0ZHNF9NQVhfRFVUWV9BVF9PVlQ7Ci0JZWxzZQotCQlyZWcgJj0gfkFEVDc0NzNfQ0ZHNF9NQVhfRFVUWV9BVF9PVlQ7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0NzNfUkVHX0NGRzQsIHJlZyk7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19wd20oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwKLQkJCWNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGFkdDc0NzNfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT5wd21bYXR0ci0+aW5kZXhdKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2V0X3B3bShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAotCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWxvbmcgdGVtcDsKLQotCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ0ZW1wKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0ZW1wID0gU0VOU09SU19MSU1JVCh0ZW1wLCAwLCAyNTUpOwotCi0JbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7Ci0JZGF0YS0+cHdtW2F0dHItPmluZGV4XSA9IHRlbXA7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0NzNfUkVHX1BXTShhdHRyLT5pbmRleCksIHRlbXApOwotCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfcHdtX21heChzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gYWR0NzQ3M191cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPnB3bV9tYXhbYXR0ci0+aW5kZXhdKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2V0X3B3bV9tYXgoc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgICBjb25zdCBjaGFyICpidWYsCi0JCQkgICBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWxvbmcgdGVtcDsKLQotCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ0ZW1wKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0ZW1wID0gU0VOU09SU19MSU1JVCh0ZW1wLCAwLCAyNTUpOwotCi0JbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7Ci0JZGF0YS0+cHdtX21heFthdHRyLT5pbmRleF0gPSB0ZW1wOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19QV01fTUFYKGF0dHItPmluZGV4KSwKLQkJCQkgIHRlbXApOwotCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfcHdtX21pbihzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gYWR0NzQ3M191cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPnB3bV9taW5bYXR0ci0+aW5kZXhdKTsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2V0X3B3bV9taW4oc3RydWN0IGRldmljZSAqZGV2LAotCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgICBjb25zdCBjaGFyICpidWYsCi0JCQkgICBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWxvbmcgdGVtcDsKLQotCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ0ZW1wKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl0ZW1wID0gU0VOU09SU19MSU1JVCh0ZW1wLCAwLCAyNTUpOwotCi0JbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7Ci0JZGF0YS0+cHdtX21pblthdHRyLT5pbmRleF0gPSB0ZW1wOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19QV01fTUlOKGF0dHItPmluZGV4KSwKLQkJCQkgIHRlbXApOwotCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF90bWF4KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAotCQkJICAgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gYWR0NzQ3M191cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIDEwMDAgKiBkZWNvZGVfdGVtcCgKLQkJCQkJCWRhdGEtPnRlbXBfdHdvc19jb21wbGVtZW50LAotCQkJCQkJZGF0YS0+dGVtcF90bWF4W2F0dHItPmluZGV4XSkpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzZXRfdGVtcF90bWF4KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgICAgIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgICAgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlsb25nIHRlbXA7Ci0KLQlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdGVtcCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdGVtcCA9IERJVl9ST1VORF9DTE9TRVNUKHRlbXAsIDEwMDApOwotCXRlbXAgPSBlbmNvZGVfdGVtcChkYXRhLT50ZW1wX3R3b3NfY29tcGxlbWVudCwgdGVtcCk7Ci0KLQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKLQlkYXRhLT50ZW1wX3RtYXhbYXR0ci0+aW5kZXhdID0gdGVtcDsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfVEVNUF9UTUFYKGF0dHItPmluZGV4KSwKLQkJCQkgIHRlbXApOwotCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfdGVtcF90bWluKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAotCQkJICAgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gYWR0NzQ3M191cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIDEwMDAgKiBkZWNvZGVfdGVtcCgKLQkJCQkJCWRhdGEtPnRlbXBfdHdvc19jb21wbGVtZW50LAotCQkJCQkJZGF0YS0+dGVtcF90bWluW2F0dHItPmluZGV4XSkpOwotfQotCi1zdGF0aWMgc3NpemVfdCBzZXRfdGVtcF90bWluKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgICAgIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCSAgICAgc2l6ZV90IGNvdW50KQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlsb25nIHRlbXA7Ci0KLQlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdGVtcCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JdGVtcCA9IERJVl9ST1VORF9DTE9TRVNUKHRlbXAsIDEwMDApOwotCXRlbXAgPSBlbmNvZGVfdGVtcChkYXRhLT50ZW1wX3R3b3NfY29tcGxlbWVudCwgdGVtcCk7Ci0KLQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKLQlkYXRhLT50ZW1wX3RtaW5bYXR0ci0+aW5kZXhdID0gdGVtcDsKLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfVEVNUF9UTUlOKGF0dHItPmluZGV4KSwKLQkJCQkgIHRlbXApOwotCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7Ci0KLQlyZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNob3dfcHdtX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgICAgICAgY2hhciAqYnVmKQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gYWR0NzQ3M191cGRhdGVfZGV2aWNlKGRldik7Ci0KLQlzd2l0Y2ggKGRhdGEtPnB3bV9iZWhhdmlvclthdHRyLT5pbmRleF0gPj4gQURUNzQ3M19QV01fQkhWUl9TSElGVCkgewotCWNhc2UgMzoKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiMFxuIik7Ci0JY2FzZSA3OgotCQlyZXR1cm4gc3ByaW50ZihidWYsICIxXG4iKTsKLQlkZWZhdWx0OgotCQlyZXR1cm4gc3ByaW50ZihidWYsICIyXG4iKTsKLQl9Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF9wd21fZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAotCQkJICAgICAgY29uc3QgY2hhciAqYnVmLAotCQkJICAgICAgc2l6ZV90IGNvdW50KQotewotCXU4IHJlZzsKLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JbG9uZyB0ZW1wOwotCi0JaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnRlbXApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN3aXRjaCAodGVtcCkgewotCWNhc2UgMDoKLQkJdGVtcCA9IDM7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJdGVtcCA9IDc7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJLyogRW50ZXIgYXV0b21hdGljIG1vZGUgd2l0aCBmYW5zIG9mZiAqLwotCQl0ZW1wID0gNDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZGF0YS0+bG9jayk7Ci0JcmVnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkgICAgICAgQURUNzQ3M19SRUdfUFdNX0JIVlIoYXR0ci0+aW5kZXgpKTsKLQlyZWcgPSAodGVtcCA8PCBBRFQ3NDczX1BXTV9CSFZSX1NISUZUKSB8Ci0JICAgICAgKHJlZyAmIH5BRFQ3NDczX1BXTV9CSFZSX01BU0spOwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19QV01fQkhWUihhdHRyLT5pbmRleCksCi0JCQkJICByZWcpOwotCWRhdGEtPnB3bV9iZWhhdmlvclthdHRyLT5pbmRleF0gPSByZWc7Ci0JbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKLQotCXJldHVybiBjb3VudDsKLX0KLQotc3RhdGljIHNzaXplX3Qgc2hvd19wd21fYXV0b190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAotCQkJCSAgY2hhciAqYnVmKQotewotCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gYWR0NzQ3M191cGRhdGVfZGV2aWNlKGRldik7Ci0JaW50IGJodnIgPSBkYXRhLT5wd21fYmVoYXZpb3JbYXR0ci0+aW5kZXhdID4+IEFEVDc0NzNfUFdNX0JIVlJfU0hJRlQ7Ci0KLQlzd2l0Y2ggKGJodnIpIHsKLQljYXNlIDM6Ci0JY2FzZSA0OgotCWNhc2UgNzoKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiMFxuIik7Ci0JY2FzZSAwOgotCWNhc2UgMToKLQljYXNlIDU6Ci0JY2FzZSA2OgotCQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgYmh2ciArIDEpOwotCWNhc2UgMjoKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiNFxuIik7Ci0JfQotCS8qIHNob3VsZG4ndCBldmVyIGdldCBoZXJlICovCi0JQlVHKCk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHNldF9wd21fYXV0b190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkJIGNvbnN0IGNoYXIgKmJ1ZiwKLQkJCQkgc2l6ZV90IGNvdW50KQotewotCXU4IHJlZzsKLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgYWR0NzQ3M19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JbG9uZyB0ZW1wOwotCi0JaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnRlbXApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN3aXRjaCAodGVtcCkgewotCWNhc2UgMToKLQljYXNlIDI6Ci0JY2FzZSA2OgotCWNhc2UgNzoKLQkJdGVtcC0tOwotCQlicmVhazsKLQljYXNlIDA6Ci0JCXRlbXAgPSA0OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQltdXRleF9sb2NrKCZkYXRhLT5sb2NrKTsKLQlyZWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCSAgICAgICBBRFQ3NDczX1JFR19QV01fQkhWUihhdHRyLT5pbmRleCkpOwotCXJlZyA9ICh0ZW1wIDw8IEFEVDc0NzNfUFdNX0JIVlJfU0hJRlQpIHwKLQkgICAgICAocmVnICYgfkFEVDc0NzNfUFdNX0JIVlJfTUFTSyk7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIEFEVDc0NzNfUkVHX1BXTV9CSFZSKGF0dHItPmluZGV4KSwKLQkJCQkgIHJlZyk7Ci0JZGF0YS0+cHdtX2JlaGF2aW9yW2F0dHItPmluZGV4XSA9IHJlZzsKLQltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwotCi0JcmV0dXJuIGNvdW50OwotfQotCi1zdGF0aWMgc3NpemVfdCBzaG93X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsCi0JCQkgIGNoYXIgKmJ1ZikKLXsKLQlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7Ci0Jc3RydWN0IGFkdDc0NzNfZGF0YSAqZGF0YSA9IGFkdDc0NzNfdXBkYXRlX2RldmljZShkZXYpOwotCi0JaWYgKGRhdGEtPmFsYXJtICYgYXR0ci0+aW5kZXgpCi0JCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjFcbiIpOwotCWVsc2UKLQkJcmV0dXJuIHNwcmludGYoYnVmLCAiMFxuIik7Ci19Ci0KLQotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd192b2x0X21heCwKLQkJCSAgc2V0X3ZvbHRfbWF4LCAwKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4yX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdm9sdF9tYXgsCi0JCQkgIHNldF92b2x0X21heCwgMSk7Ci0KLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdm9sdF9taW4sCi0JCQkgIHNldF92b2x0X21pbiwgMCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluMl9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3ZvbHRfbWluLAotCQkJICBzZXRfdm9sdF9taW4sIDEpOwotCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluMV9pbnB1dCwgU19JUlVHTywgc2hvd192b2x0LCBOVUxMLCAwKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4yX2lucHV0LCBTX0lSVUdPLCBzaG93X3ZvbHQsIE5VTEwsIDEpOwotCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluMV9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKLQkJCSAgQURUNzQ3M19WQ0NQX0FMQVJNKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4yX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAotCQkJICBBRFQ3NDczX1ZDQ19BTEFSTSk7Ci0KLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wX21heCwKLQkJCSAgc2V0X3RlbXBfbWF4LCAwKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wX21heCwKLQkJCSAgc2V0X3RlbXBfbWF4LCAxKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190ZW1wX21heCwKLQkJCSAgc2V0X3RlbXBfbWF4LCAyKTsKLQotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXBfbWluLAotCQkJICBzZXRfdGVtcF9taW4sIDApOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXBfbWluLAotCQkJICBzZXRfdGVtcF9taW4sIDEpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXBfbWluLAotCQkJICBzZXRfdGVtcF9taW4sIDIpOwotCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDApOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAxKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMik7Ci0KLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCi0JCQkgIEFEVDc0NzNfUjFUX0FMQVJNIHwgQUxBUk0yKEFEVDc0NzNfUjFUX1NIT1JUKSk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAotCQkJICBBRFQ3NDczX0xUX0FMQVJNKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCi0JCQkgIEFEVDc0NzNfUjJUX0FMQVJNIHwgQUxBUk0yKEFEVDc0NzNfUjJUX1NIT1JUKSk7Ci0KLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9taW4sCi0JCQkgIHNldF9mYW5fbWluLCAwKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMl9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9taW4sCi0JCQkgIHNldF9mYW5fbWluLCAxKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9taW4sCi0JCQkgIHNldF9mYW5fbWluLCAyKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNF9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9taW4sCi0JCQkgIHNldF9mYW5fbWluLCAzKTsKLQotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjJfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCAxKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDIpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW40X2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMyk7Ci0KLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKLQkJCSAgQUxBUk0yKEFEVDc0NzNfRkFOMV9BTEFSTSkpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4yX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLAotCQkJICBBTEFSTTIoQURUNzQ3M19GQU4yX0FMQVJNKSk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjNfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsCi0JCQkgIEFMQVJNMihBRFQ3NDczX0ZBTjNfQUxBUk0pKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwKLQkJCSAgQUxBUk0yKEFEVDc0NzNfRkFONF9BTEFSTSkpOwotCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bV91c2VfcG9pbnQyX3B3bV9hdF9jcml0LCBTX0lXVVNSIHwgU19JUlVHTywKLQkJCSAgc2hvd19tYXhfZHV0eV9hdF9jcml0LCBzZXRfbWF4X2R1dHlfYXRfY3JpdCwgMCk7Ci0KLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcHdtLCBzZXRfcHdtLCAwKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcHdtLCBzZXRfcHdtLCAxKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMywgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcHdtLCBzZXRfcHdtLCAyKTsKLQotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20xX2F1dG9fcG9pbnQxX3B3bSwgU19JV1VTUiB8IFNfSVJVR08sCi0JCQkgIHNob3dfcHdtX21pbiwgc2V0X3B3bV9taW4sIDApOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20yX2F1dG9fcG9pbnQxX3B3bSwgU19JV1VTUiB8IFNfSVJVR08sCi0JCQkgIHNob3dfcHdtX21pbiwgc2V0X3B3bV9taW4sIDEpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20zX2F1dG9fcG9pbnQxX3B3bSwgU19JV1VTUiB8IFNfSVJVR08sCi0JCQkgIHNob3dfcHdtX21pbiwgc2V0X3B3bV9taW4sIDIpOwotCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTFfYXV0b19wb2ludDJfcHdtLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJCSAgc2hvd19wd21fbWF4LCBzZXRfcHdtX21heCwgMCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTJfYXV0b19wb2ludDJfcHdtLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJCSAgc2hvd19wd21fbWF4LCBzZXRfcHdtX21heCwgMSk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTNfYXV0b19wb2ludDJfcHdtLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJCSAgc2hvd19wd21fbWF4LCBzZXRfcHdtX21heCwgMik7Ci0KLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfYXV0b19wb2ludDFfdGVtcCwgU19JV1VTUiB8IFNfSVJVR08sCi0JCQkgIHNob3dfdGVtcF90bWluLCBzZXRfdGVtcF90bWluLCAwKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfYXV0b19wb2ludDFfdGVtcCwgU19JV1VTUiB8IFNfSVJVR08sCi0JCQkgIHNob3dfdGVtcF90bWluLCBzZXRfdGVtcF90bWluLCAxKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfYXV0b19wb2ludDFfdGVtcCwgU19JV1VTUiB8IFNfSVJVR08sCi0JCQkgIHNob3dfdGVtcF90bWluLCBzZXRfdGVtcF90bWluLCAyKTsKLQotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9hdXRvX3BvaW50Ml90ZW1wLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJCSAgc2hvd190ZW1wX3RtYXgsIHNldF90ZW1wX3RtYXgsIDApOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9hdXRvX3BvaW50Ml90ZW1wLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJCSAgc2hvd190ZW1wX3RtYXgsIHNldF90ZW1wX3RtYXgsIDEpOwotc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19hdXRvX3BvaW50Ml90ZW1wLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJCSAgc2hvd190ZW1wX3RtYXgsIHNldF90ZW1wX3RtYXgsIDIpOwotCi1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTFfZW5hYmxlLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd21fZW5hYmxlLAotCQkJICBzZXRfcHdtX2VuYWJsZSwgMCk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTJfZW5hYmxlLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd21fZW5hYmxlLAotCQkJICBzZXRfcHdtX2VuYWJsZSwgMSk7Ci1zdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTNfZW5hYmxlLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd21fZW5hYmxlLAotCQkJICBzZXRfcHdtX2VuYWJsZSwgMik7Ci0KLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMV9hdXRvX2NoYW5uZWxzX3RlbXAsIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkJICBzaG93X3B3bV9hdXRvX3RlbXAsIHNldF9wd21fYXV0b190ZW1wLCAwKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMl9hdXRvX2NoYW5uZWxzX3RlbXAsIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkJICBzaG93X3B3bV9hdXRvX3RlbXAsIHNldF9wd21fYXV0b190ZW1wLCAxKTsKLXN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtM19hdXRvX2NoYW5uZWxzX3RlbXAsIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkJICBzaG93X3B3bV9hdXRvX3RlbXAsIHNldF9wd21fYXV0b190ZW1wLCAyKTsKLQotc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkdDc0NzNfYXR0cltdID0KLXsKLQkmc2Vuc29yX2Rldl9hdHRyX2luMV9tYXguZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2luMl9tYXguZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2luMV9taW4uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2luMl9taW4uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2luMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfaW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9pbjFfYWxhcm0uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2luMl9hbGFybS5kZXZfYXR0ci5hdHRyLAotCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWF4LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW4uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21pbi5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWluLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2lucHV0LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9hbGFybS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfYWxhcm0uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2FsYXJtLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9hdXRvX3BvaW50MV90ZW1wLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9hdXRvX3BvaW50MV90ZW1wLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19hdXRvX3BvaW50MV90ZW1wLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9hdXRvX3BvaW50Ml90ZW1wLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9hdXRvX3BvaW50Ml90ZW1wLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19hdXRvX3BvaW50Ml90ZW1wLmRldl9hdHRyLmF0dHIsCi0KLQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9mYW4yX21pbi5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19taW4uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjRfbWluLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9mYW40X2lucHV0LmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2FsYXJtLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2FsYXJtLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2FsYXJtLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9mYW40X2FsYXJtLmRldl9hdHRyLmF0dHIsCi0KLQkmc2Vuc29yX2Rldl9hdHRyX3B3bV91c2VfcG9pbnQyX3B3bV9hdF9jcml0LmRldl9hdHRyLmF0dHIsCi0KLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTEuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTIuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTMuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDFfcHdtLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQxX3B3bS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX3BvaW50MV9wd20uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDJfcHdtLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQyX3B3bS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX3BvaW50Ml9wd20uZGV2X2F0dHIuYXR0ciwKLQotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9lbmFibGUuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfZW5hYmxlLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9wd20zX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX2NoYW5uZWxzX3RlbXAuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19jaGFubmVsc190ZW1wLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9wd20zX2F1dG9fY2hhbm5lbHNfdGVtcC5kZXZfYXR0ci5hdHRyLAotCi0JTlVMTAotfTsKLQotLyogUmV0dXJuIDAgaWYgZGV0ZWN0aW9uIGlzIHN1Y2Nlc3NmdWwsIC1FTk9ERVYgb3RoZXJ3aXNlICovCi1zdGF0aWMgaW50IGFkdDc0NzNfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKLXsKLQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7Ci0JaW50IHZlbmRvciwgZGV2aWNlLCByZXZpc2lvbjsKLQotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQl2ZW5kb3IgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBBRFQ3NDczX1JFR19WRU5ET1IpOwotCWlmICh2ZW5kb3IgIT0gQURUNzQ3M19WRU5ET1IpCi0JCXJldHVybiAtRU5PREVWOwotCi0JZGV2aWNlID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfREVWSUNFKTsKLQlpZiAoZGV2aWNlICE9IEFEVDc0NzNfREVWSUNFKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXJldmlzaW9uID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgQURUNzQ3M19SRUdfUkVWSVNJT04pOwotCWlmIChyZXZpc2lvbiAhPSBBRFQ3NDczX1JFVl82OCAmJiByZXZpc2lvbiAhPSBBRFQ3NDczX1JFVl82OSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlzdHJsY3B5KGluZm8tPnR5cGUsICJhZHQ3NDczIiwgSTJDX05BTUVfU0laRSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhZHQ3NDczX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQotewotCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGE7Ci0JaW50IGVycjsKLQotCWRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWR0NzQ3M19kYXRhKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFkYXRhKSB7Ci0JCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKLQltdXRleF9pbml0KCZkYXRhLT5sb2NrKTsKLQotCWRldl9pbmZvKCZjbGllbnQtPmRldiwgIiVzIGNoaXAgZm91bmRcbiIsIGNsaWVudC0+bmFtZSk7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBBRFQ3NDczIGNoaXAgKi8KLQlhZHQ3NDczX2luaXRfY2xpZW50KGNsaWVudCk7Ci0KLQkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwotCWRhdGEtPmF0dHJzLmF0dHJzID0gYWR0NzQ3M19hdHRyOwotCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmRhdGEtPmF0dHJzKTsKLQlpZiAoZXJyKQotCQlnb3RvIGV4aXRfZnJlZTsKLQotCWRhdGEtPmh3bW9uX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOwotCWlmIChJU19FUlIoZGF0YS0+aHdtb25fZGV2KSkgewotCQllcnIgPSBQVFJfRVJSKGRhdGEtPmh3bW9uX2Rldik7Ci0JCWdvdG8gZXhpdF9yZW1vdmU7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWV4aXRfcmVtb3ZlOgotCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmRhdGEtPmF0dHJzKTsKLWV4aXRfZnJlZToKLQlrZnJlZShkYXRhKTsKLWV4aXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludCBhZHQ3NDczX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBhZHQ3NDczX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmZGF0YS0+YXR0cnMpOwotCWtmcmVlKGRhdGEpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBhZHQ3NDczX2luaXQodm9pZCkKLXsKLQlwcl9ub3RpY2UoIlRoZSBhZHQ3NDczIGRyaXZlciBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHRoZSBhZHQ3NDc1ICIKLQkJICAiZHJpdmVyIGluc3RlYWRcbiIpOwotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmYWR0NzQ3M19kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYWR0NzQ3M19leGl0KHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmFkdDc0NzNfZHJpdmVyKTsKLX0KLQotTU9EVUxFX0FVVEhPUigiRGFycmljayBKLiBXb25nIDxkandvbmdAdXMuaWJtLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQURUNzQ3MyBkcml2ZXIiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX2luaXQoYWR0NzQ3M19pbml0KTsKLW1vZHVsZV9leGl0KGFkdDc0NzNfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FzYzc2MjEuYyBiL2RyaXZlcnMvaHdtb24vYXNjNzYyMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmOTQ4MTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL2FzYzc2MjEuYwpAQCAtMCwwICsxLDEyNTUgQEAKKy8qCisgKiBhc2M3NjIxLmMgLSBQYXJ0IG9mIGxtX3NlbnNvcnMsIExpbnV4IGtlcm5lbCBtb2R1bGVzIGZvciBoYXJkd2FyZSBtb25pdG9yaW5nCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIDIwMTAgR2VvcmdlIEpvc2VwaCAgPGdlb3JnZS5qb3NlcGhAZmFpcnZpZXc1LmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKKy8qIEFkZHJlc3NlcyB0byBzY2FuICovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geworCTB4MmMsIDB4MmQsIDB4MmUsIEkyQ19DTElFTlRfRU5ECit9OworCitlbnVtIGFzYzc2MjFfdHlwZSB7CisJYXNjNzYyMSwKKwlhc2M3NjIxYQorfTsKKworI2RlZmluZSBJTlRFUlZBTF9ISUdIICAgKEhaICsgSFogLyAyKQorI2RlZmluZSBJTlRFUlZBTF9MT1cgICAgKDEgKiA2MCAqIEhaKQorI2RlZmluZSBQUklfTk9ORSAgICAgICAgMAorI2RlZmluZSBQUklfTE9XICAgICAgICAgMQorI2RlZmluZSBQUklfSElHSCAgICAgICAgMgorI2RlZmluZSBGSVJTVF9DSElQICAgICAgYXNjNzYyMQorI2RlZmluZSBMQVNUX0NISVAgICAgICAgYXNjNzYyMWEKKworc3RydWN0IGFzYzc2MjFfY2hpcCB7CisJY2hhciAqbmFtZTsKKwllbnVtIGFzYzc2MjFfdHlwZSBjaGlwX3R5cGU7CisJdTggY29tcGFueV9yZWc7CisJdTggY29tcGFueV9pZDsKKwl1OCB2ZXJzdGVwX3JlZzsKKwl1OCB2ZXJzdGVwX2lkOworCXVuc2lnbmVkIHNob3J0ICphZGRyZXNzZXM7Cit9OworCitzdGF0aWMgc3RydWN0IGFzYzc2MjFfY2hpcCBhc2M3NjIxX2NoaXBzW10gPSB7CisJeworCQkubmFtZSA9ICJhc2M3NjIxIiwKKwkJLmNoaXBfdHlwZSA9IGFzYzc2MjEsCisJCS5jb21wYW55X3JlZyA9IDB4M2UsCisJCS5jb21wYW55X2lkID0gMHg2MSwKKwkJLnZlcnN0ZXBfcmVnID0gMHgzZiwKKwkJLnZlcnN0ZXBfaWQgPSAweDZjLAorCQkuYWRkcmVzc2VzID0gbm9ybWFsX2kyYywKKwkgfSwKKwl7CisJCS5uYW1lID0gImFzYzc2MjFhIiwKKwkJLmNoaXBfdHlwZSA9IGFzYzc2MjFhLAorCQkuY29tcGFueV9yZWcgPSAweDNlLAorCQkuY29tcGFueV9pZCA9IDB4NjEsCisJCS52ZXJzdGVwX3JlZyA9IDB4M2YsCisJCS52ZXJzdGVwX2lkID0gMHg2ZCwKKwkJLmFkZHJlc3NlcyA9IG5vcm1hbF9pMmMsCisJIH0sCit9OworCisvKgorICogRGVmaW5lcyB0aGUgaGlnaGVzdCByZWdpc3RlciB0byBiZSB1c2VkLCBub3QgdGhlIGNvdW50LgorICogVGhlIGFjdHVhbCBjb3VudCB3aWxsIHByb2JhYmx5IGJlIHNtYWxsZXIgYmVjYXVzZSBvZiBnYXBzCisgKiBpbiB0aGUgaW1wbGVtZW50YXRpb24gKHVudXNlZCByZWdpc3RlciBsb2NhdGlvbnMpLgorICogVGhpcyBkZWZpbmUgd2lsbCBzYWZlbHkgc2V0IHRoZSBhcnJheSBzaXplIG9mIGJvdGggdGhlIHBhcmFtZXRlcgorICogYW5kIGRhdGEgYXJyYXlzLgorICogVGhpcyBjb21lcyBmcm9tIHRoZSBkYXRhIHNoZWV0IHJlZ2lzdGVyIGRlc2NyaXB0aW9uIHRhYmxlLgorICovCisjZGVmaW5lIExBU1RfUkVHSVNURVIgMHhmZgorCitzdHJ1Y3QgYXNjNzYyMV9kYXRhIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnQ7CisJc3RydWN0IGRldmljZSAqY2xhc3NfZGV2OworCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKKwlpbnQgdmFsaWQ7CQkvKiAhPTAgaWYgZm9sbG93aW5nIGZpZWxkcyBhcmUgdmFsaWQgKi8KKwl1bnNpZ25lZCBsb25nIGxhc3RfaGlnaF9yZWFkaW5nOwkvKiBJbiBqaWZmaWVzICovCisJdW5zaWduZWQgbG9uZyBsYXN0X2xvd19yZWFkaW5nOwkJLyogSW4gamlmZmllcyAqLworCS8qCisJICogUmVnaXN0ZXJzIHdlIGNhcmUgYWJvdXQgb2NjdXB5IHRoZSBjb3JyZXNwb25kaW5nIGluZGV4CisJICogaW4gdGhlIGFycmF5LiAgUmVnaXN0ZXJzIHdlIGRvbid0IGNhcmUgYWJvdXQgYXJlIGxlZnQKKwkgKiBhdCAwLgorCSAqLworCXU4IHJlZ1tMQVNUX1JFR0lTVEVSICsgMV07Cit9OworCisvKgorICogTWFjcm8gdG8gZ2V0IHRoZSBwYXJlbnQgYXNjNzYyMV9wYXJhbSBzdHJ1Y3R1cmUKKyAqIGZyb20gYSBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBwYXNzZWQgaW50byB0aGUKKyAqIHNob3cvc3RvcmUgZnVuY3Rpb25zLgorICovCisjZGVmaW5lIHRvX2FzYzc2MjFfcGFyYW0oX3NkYSkgXAorCWNvbnRhaW5lcl9vZihfc2RhLCBzdHJ1Y3QgYXNjNzYyMV9wYXJhbSwgc2RhKQorCisvKgorICogRWFjaCBwYXJhbWV0ZXIgdG8gYmUgcmV0cmlldmVkIG5lZWRzIGFuIGFzYzc2MjFfcGFyYW0gc3RydWN0dXJlCisgKiBhbGxvY2F0ZWQuICBJdCBjb250YWlucyB0aGUgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc3RydWN0dXJlCisgKiBhbmQgdGhlIGNvbnRyb2wgaW5mbyBuZWVkZWQgdG8gcmV0cmlldmUgdGhlIHZhbHVlIGZyb20gdGhlIHJlZ2lzdGVyIG1hcC4KKyAqLworc3RydWN0IGFzYzc2MjFfcGFyYW0geworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBzZGE7CisJdTggcHJpb3JpdHk7CisJdTggbXNiWzNdOworCXU4IGxzYlszXTsKKwl1OCBtYXNrWzNdOworCXU4IHNoaWZ0WzNdOworfTsKKworLyoKKyAqIFRoaXMgaXMgdGhlIG1hcCB0aGF0IHVsdGltYXRlbHkgaW5kaWNhdGVzIHdoZXRoZXIgd2UnbGwgYmUKKyAqIHJldHJpZXZpbmcgYSByZWdpc3RlciB2YWx1ZSBvciBub3QsIGFuZCBhdCB3aGF0IGZyZXF1ZW5jeS4KKyAqLworc3RhdGljIHU4IGFzYzc2MjFfcmVnaXN0ZXJfcHJpb3JpdGllc1syNTVdOworCitzdGF0aWMgc3RydWN0IGFzYzc2MjFfZGF0YSAqYXNjNzYyMV91cGRhdGVfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldik7CisKK3N0YXRpYyBpbmxpbmUgdTggcmVhZF9ieXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKK3sKKwlpbnQgcmVzID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKKwlpZiAocmVzIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSJVbmFibGUgdG8gcmVhZCBmcm9tIHJlZ2lzdGVyIDB4JTAyeC5cbiIsIHJlZyk7CisJCXJldHVybiAwOworCX07CisJcmV0dXJuIHJlcyAmIDB4ZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHdyaXRlX2J5dGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCBkYXRhKQoreworCWludCByZXMgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCBkYXRhKTsKKwlpZiAocmVzIDwgMCkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSJVbmFibGUgdG8gd3JpdGUgdmFsdWUgMHglMDJ4IHRvIHJlZ2lzdGVyIDB4JTAyeC5cbiIsCisJCQlkYXRhLCByZWcpOworCX07CisJcmV0dXJuIHJlczsKK30KKworLyoKKyAqIERhdGEgSGFuZGxlcnMKKyAqIEVhY2ggZnVuY3Rpb24gaGFuZGxlcyB0aGUgZm9ybWF0dGluZywgc3RvcmFnZQorICogYW5kIHJldHJpZXZhbCBvZiBsaWtlIHBhcmFtZXRlcnMuCisgKi8KKworI2RlZmluZSBTRVRVUF9TSE9XX2RhdGFfcGFyYW0oZCwgYSkgXAorCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2RhID0gdG9fc2Vuc29yX2Rldl9hdHRyKGEpOyBcCisJc3RydWN0IGFzYzc2MjFfZGF0YSAqZGF0YSA9IGFzYzc2MjFfdXBkYXRlX2RldmljZShkKTsgXAorCXN0cnVjdCBhc2M3NjIxX3BhcmFtICpwYXJhbSA9IHRvX2FzYzc2MjFfcGFyYW0oc2RhKQorCisjZGVmaW5lIFNFVFVQX1NUT1JFX2RhdGFfcGFyYW0oZCwgYSkgXAorCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2RhID0gdG9fc2Vuc29yX2Rldl9hdHRyKGEpOyBcCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZCk7IFwKKwlzdHJ1Y3QgYXNjNzYyMV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7IFwKKwlzdHJ1Y3QgYXNjNzYyMV9wYXJhbSAqcGFyYW0gPSB0b19hc2M3NjIxX3BhcmFtKHNkYSkKKworLyoKKyAqIHU4IGlzIGp1c3Qgd2hhdCBpdCBzb3VuZHMgbGlrZS4uLmFuIHVuc2lnbmVkIGJ5dGUgd2l0aCBubworICogc3BlY2lhbCBmb3JtYXR0aW5nLgorICovCitzdGF0aWMgc3NpemVfdCBzaG93X3U4KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgICBjaGFyICpidWYpCit7CisJU0VUVVBfU0hPV19kYXRhX3BhcmFtKGRldiwgYXR0cik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgZGF0YS0+cmVnW3BhcmFtLT5tc2JbMF1dKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfdTgoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCVNFVFVQX1NUT1JFX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKwlsb25nIHJlcXZhbDsKKworCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZyZXF2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcXZhbCA9IFNFTlNPUlNfTElNSVQocmVxdmFsLCAwLCAyNTUpOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnJlZ1twYXJhbS0+bXNiWzBdXSA9IHJlcXZhbDsKKwl3cml0ZV9ieXRlKGNsaWVudCwgcGFyYW0tPm1zYlswXSwgcmVxdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBNYW55IG9mIHRoZSBjb25maWcgdmFsdWVzIG9jY3VweSBvbmx5IGEgZmV3IGJpdHMgb2YgYSByZWdpc3Rlci4KKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd19iaXRtYXNrKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCVNFVFVQX1NIT1dfZGF0YV9wYXJhbShkZXYsIGF0dHIpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsCisJCSAgICAgICAoZGF0YS0+cmVnW3BhcmFtLT5tc2JbMF1dID4+IHBhcmFtLT4KKwkJCXNoaWZ0WzBdKSAmIHBhcmFtLT5tYXNrWzBdKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfYml0bWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlTRVRVUF9TVE9SRV9kYXRhX3BhcmFtKGRldiwgYXR0cik7CisJbG9uZyByZXF2YWw7CisJdTggY3VycnZhbDsKKworCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZyZXF2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcXZhbCA9IFNFTlNPUlNfTElNSVQocmVxdmFsLCAwLCBwYXJhbS0+bWFza1swXSk7CisKKwlyZXF2YWwgPSAocmVxdmFsICYgcGFyYW0tPm1hc2tbMF0pIDw8IHBhcmFtLT5zaGlmdFswXTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwljdXJydmFsID0gcmVhZF9ieXRlKGNsaWVudCwgcGFyYW0tPm1zYlswXSk7CisJcmVxdmFsIHw9IChjdXJydmFsICYgfihwYXJhbS0+bWFza1swXSA8PCBwYXJhbS0+c2hpZnRbMF0pKTsKKwlkYXRhLT5yZWdbcGFyYW0tPm1zYlswXV0gPSByZXF2YWw7CisJd3JpdGVfYnl0ZShjbGllbnQsIHBhcmFtLT5tc2JbMF0sIHJlcXZhbCk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogMTYgYml0IGZhbiBycG0gdmFsdWVzCisgKiByZXBvcnRlZCBieSB0aGUgZGV2aWNlIGFzIHRoZSBudW1iZXIgb2YgMTEuMTExdXMgcGVyaW9kcyAoOTBraHopCisgKiBiZXR3ZWVuIGZ1bGwgZmFuIHJvdGF0aW9ucy4gIFRoZXJlZm9yZS4uLgorICogUlBNID0gKDkwMDAwICogNjApIC8gcmVnaXN0ZXIgdmFsdWUKKyAqLworc3RhdGljIHNzaXplX3Qgc2hvd19mYW4xNihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJU0VUVVBfU0hPV19kYXRhX3BhcmFtKGRldiwgYXR0cik7CisJdTE2IHJlZ3ZhbDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZWd2YWwgPSAoZGF0YS0+cmVnW3BhcmFtLT5tc2JbMF1dIDw8IDgpIHwgZGF0YS0+cmVnW3BhcmFtLT5sc2JbMF1dOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsCisJCSAgICAgICAocmVndmFsID09IDAgPyAtMSA6IChyZWd2YWwpID09CisJCQkweGZmZmYgPyAwIDogNTQwMDAwMCAvIHJlZ3ZhbCkpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9mYW4xNihzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLAorCQkJICAgc2l6ZV90IGNvdW50KQoreworCVNFVFVQX1NUT1JFX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKwlsb25nIHJlcXZhbDsKKworCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZyZXF2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcXZhbCA9CisJICAgIChTRU5TT1JTX0xJTUlUKChyZXF2YWwpIDw9IDAgPyAwIDogNTQwMDAwMCAvIChyZXF2YWwpLCAwLCA2NTUzNCkpOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnJlZ1twYXJhbS0+bXNiWzBdXSA9IChyZXF2YWwgPj4gOCkgJiAweGZmOworCWRhdGEtPnJlZ1twYXJhbS0+bHNiWzBdXSA9IHJlcXZhbCAmIDB4ZmY7CisJd3JpdGVfYnl0ZShjbGllbnQsIHBhcmFtLT5tc2JbMF0sIGRhdGEtPnJlZ1twYXJhbS0+bXNiWzBdXSk7CisJd3JpdGVfYnl0ZShjbGllbnQsIHBhcmFtLT5sc2JbMF0sIGRhdGEtPnJlZ1twYXJhbS0+bHNiWzBdXSk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBWb2x0YWdlcyBhcmUgc2NhbGVkIGluIHRoZSBkZXZpY2Ugc28gdGhhdCB0aGUgbm9taW5hbCB2b2x0YWdlCisgKiBpcyAzLzR0aHMgb2YgdGhlIDAtMjU1IHJhbmdlIChpLmUuIDE5MikuCisgKiBJZiBhbGwgdm9sdGFnZXMgYXJlICdub3JtYWwnIHRoZW4gYWxsIHZvbHRhZ2UgcmVnaXN0ZXJzIHdpbGwKKyAqIHJlYWQgMHhDMC4gIFRoaXMgZG9lc24ndCBoZWxwIHVzIGlmIHdlIGRvbid0IGhhdmUgYSBwb2ludCBvZiByZWZlcm5jZS4KKyAqIFRoZSBkYXRhIHNoZWV0IGhvd2V2ZXIgcHJvdmlkZXMgdXMgd2l0aCB0aGUgZnVsbCBzY2FsZSB2YWx1ZSBmb3IgZWFjaAorICogd2hpY2ggaXMgc3RvcmVkIGluIGluX3NjYWxpbmcuICBUaGUgc2RhLT5pbmRleCBwYXJhbWV0ZXIgdmFsdWUgcHJvdmlkZXMKKyAqIHRoZSBpbmRleCBpbnRvIGluX3NjYWxpbmcuCisgKgorICogTk9URTogVGhlIGNoaXAgZXhwZWN0cyB0aGUgZmlyc3QgMiBpbnB1dHMgYmUgMi41IGFuZCAyLjI1IHZvbHRzCisgKiByZXNwZWN0aXZlbHkuIFRoYXQgZG9lc24ndCBtZWFuIHRoYXQncyB3aGF0IHRoZSBtb3RoZXJib2FyZCBwcm92aWRlcy4gOikKKyAqLworCitzdGF0aWMgaW50IGFzYzc2MjFfaW5fc2NhbGluZ1tdID0geworCTMzMjAsIDMwMDAsIDQzODAsIDY2NDAsIDE2MDAwCit9OworCitzdGF0aWMgc3NpemVfdCBzaG93X2luMTAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjaGFyICpidWYpCit7CisJU0VUVVBfU0hPV19kYXRhX3BhcmFtKGRldiwgYXR0cik7CisJdTE2IHJlZ3ZhbDsKKwl1OCBuciA9IHNkYS0+aW5kZXg7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmVndmFsID0gKGRhdGEtPnJlZ1twYXJhbS0+bXNiWzBdXSAqIGFzYzc2MjFfaW5fc2NhbGluZ1tucl0pIC8gMjU2OworCisJLyogVGhlIExTQiB2YWx1ZSBpcyBhIDItYml0IHNjYWxpbmcgb2YgdGhlIE1TQidzIExTYml0IHZhbHVlLgorCSAqIEkuRS4gIElmIHRoZSBtYXhpbWltIHZvbHRhZ2UgZm9yIHRoaXMgaW5wdXQgaXMgNjY0MCBtaWxsaXZvbHRzIHRoZW4KKwkgKiBhIE1TQiByZWdpc3RlciB2YWx1ZSBvZiAwID0gMG12IGFuZCAyNTUgPSA2NjQwbXYuCisJICogQSAxIHN0ZXAgY2hhbmdlIHRoZXJlZm9yZSByZXByZXNlbnRzIDI1LjltdiAoNjY0MCAvIDI1NikuCisJICogVGhlIGV4dHJhIDItYml0cyB0aGVyZWZvcmUgcmVwcmVzZW50IGluY3JlbWVudHMgb2YgNi40OG12LgorCSAqLworCXJlZ3ZhbCArPSAoKGFzYzc2MjFfaW5fc2NhbGluZ1tucl0gLyAyNTYpIC8gNCkgKgorCSAgICAoZGF0YS0+cmVnW3BhcmFtLT5sc2JbMF1dID4+IDYpOworCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgcmVndmFsKTsKK30KKworLyogOCBiaXQgdm9sdGFnZSB2YWx1ZXMgKHRoZSBtaW5zIGFuZCBtYXhzKSAqLworc3RhdGljIHNzaXplX3Qgc2hvd19pbjgoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNoYXIgKmJ1ZikKK3sKKwlTRVRVUF9TSE9XX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKwl1OCBuciA9IHNkYS0+aW5kZXg7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwKKwkJICAgICAgICgoZGF0YS0+cmVnW3BhcmFtLT5tc2JbMF1dICoKKwkJCSBhc2M3NjIxX2luX3NjYWxpbmdbbnJdKSAvIDI1NikpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9pbjgoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlTRVRVUF9TVE9SRV9kYXRhX3BhcmFtKGRldiwgYXR0cik7CisJbG9uZyByZXF2YWw7CisJdTggbnIgPSBzZGEtPmluZGV4OworCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnJlcXZhbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVxdmFsID0gU0VOU09SU19MSU1JVChyZXF2YWwsIDAsIGFzYzc2MjFfaW5fc2NhbGluZ1tucl0pOworCisJcmVxdmFsID0gKHJlcXZhbCAqIDI1NSArIDEyOCkgLyBhc2M3NjIxX2luX3NjYWxpbmdbbnJdOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnJlZ1twYXJhbS0+bXNiWzBdXSA9IHJlcXZhbDsKKwl3cml0ZV9ieXRlKGNsaWVudCwgcGFyYW0tPm1zYlswXSwgcmVxdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wOChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJU0VUVVBfU0hPV19kYXRhX3BhcmFtKGRldiwgYXR0cik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgKChzOCkgZGF0YS0+cmVnW3BhcmFtLT5tc2JbMF1dKSAqIDEwMDApOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV90ZW1wOChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLAorCQkJICAgc2l6ZV90IGNvdW50KQoreworCVNFVFVQX1NUT1JFX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKwlsb25nIHJlcXZhbDsKKwlzOCB0ZW1wOworCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnJlcXZhbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVxdmFsID0gU0VOU09SU19MSU1JVChyZXF2YWwsIC0xMjcwMDAsIDEyNzAwMCk7CisKKwl0ZW1wID0gcmVxdmFsIC8gMTAwMDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkYXRhLT5yZWdbcGFyYW0tPm1zYlswXV0gPSB0ZW1wOworCXdyaXRlX2J5dGUoY2xpZW50LCBwYXJhbS0+bXNiWzBdLCB0ZW1wKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBUZW1wZXJhdHVyZXMgdGhhdCBvY2N1cHkgMiBieXRlcyBhbHdheXMgaGF2ZSB0aGUgd2hvbGUKKyAqIG51bWJlciBvZiBkZWdyZWVzIGluIHRoZSBNU0Igd2l0aCBzb21lIHBhcnQgb2YgdGhlIExTQgorICogaW5kaWNhdGluZyBmcmFjdGlvbmFsIGRlZ3JlZXMuCisgKi8KKworLyogICBtbW1tbW1tbS5sbHh4eHh4eCAqLworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wMTAoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlTRVRVUF9TSE9XX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKwl1OCBtc2IsIGxzYjsKKwlpbnQgdGVtcDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwltc2IgPSBkYXRhLT5yZWdbcGFyYW0tPm1zYlswXV07CisJbHNiID0gKGRhdGEtPnJlZ1twYXJhbS0+bHNiWzBdXSA+PiA2KSAmIDB4MDM7CisJdGVtcCA9ICgoKHM4KSBtc2IpICogMTAwMCkgKyAobHNiICogMjUwKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZW1wKTsKK30KKworLyogICBtbW1tbW0ubGwgKi8KK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcDYyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJU0VUVVBfU0hPV19kYXRhX3BhcmFtKGRldiwgYXR0cik7CisJdTggcmVndmFsID0gZGF0YS0+cmVnW3BhcmFtLT5tc2JbMF1dOworCWludCB0ZW1wID0gKChzOCkgKHJlZ3ZhbCAmIDB4ZmMpICogMTAwMCkgKyAoKHJlZ3ZhbCAmIDB4MDMpICogMjUwKTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCB0ZW1wKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfdGVtcDYyKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLAorCQkJICAgIHNpemVfdCBjb3VudCkKK3sKKwlTRVRVUF9TVE9SRV9kYXRhX3BhcmFtKGRldiwgYXR0cik7CisJbG9uZyByZXF2YWwsIGksIGY7CisJczggdGVtcDsKKworCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZyZXF2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJlcXZhbCA9IFNFTlNPUlNfTElNSVQocmVxdmFsLCAtMzIwMDAsIDMxNzUwKTsKKwlpID0gcmVxdmFsIC8gMTAwMDsKKwlmID0gcmVxdmFsIC0gKGkgKiAxMDAwKTsKKwl0ZW1wID0gaSA8PCAyOworCXRlbXAgfD0gZiAvIDI1MDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkYXRhLT5yZWdbcGFyYW0tPm1zYlswXV0gPSB0ZW1wOworCXdyaXRlX2J5dGUoY2xpZW50LCBwYXJhbS0+bXNiWzBdLCB0ZW1wKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qCisgKiBUaGUgYVNDNzYyMSBkb2Vzbid0IHByb3ZpZGUgYW4gImF1dG9fcG9pbnQyIi4gIEluc3RlYWQsIHlvdQorICogc3BlY2lmeSB0aGUgYXV0b19wb2ludDEgYW5kIGEgcmFuZ2UuICBUbyBrZWVwIHdpdGggdGhlIHN5c2ZzCisgKiBod21vbiBzcGVjcywgd2Ugc3ludGhlc2l6ZSB0aGUgYXV0b19wb2ludF8yIGZyb20gdGhlbS4KKyAqLworCitzdGF0aWMgdTMyIGFzYzc2MjFfcmFuZ2VfbWFwW10gPSB7CisJMjAwMCwgMjUwMCwgMzMzMCwgNDAwMCwgNTAwMCwgNjY3MCwgODAwMCwgMTAwMDAsCisJMTMzMzAsIDE2MDAwLCAyMDAwMCwgMjY2NzAsIDMyMDAwLCA0MDAwMCwgNTMzMzAsIDgwMDAwLAorfTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19hcDJfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJU0VUVVBfU0hPV19kYXRhX3BhcmFtKGRldiwgYXR0cik7CisJbG9uZyBhdXRvX3BvaW50MTsKKwl1OCByZWd2YWw7CisJaW50IHRlbXA7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJYXV0b19wb2ludDEgPSAoKHM4KSBkYXRhLT5yZWdbcGFyYW0tPm1zYlsxXV0pICogMTAwMDsKKwlyZWd2YWwgPQorCSAgICAoKGRhdGEtPnJlZ1twYXJhbS0+bXNiWzBdXSA+PiBwYXJhbS0+c2hpZnRbMF0pICYgcGFyYW0tPm1hc2tbMF0pOworCXRlbXAgPSBhdXRvX3BvaW50MSArIGFzYzc2MjFfcmFuZ2VfbWFwW1NFTlNPUlNfTElNSVQocmVndmFsLCAwLCAxNSldOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXApOworCit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2FwMl90ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJU0VUVVBfU1RPUkVfZGF0YV9wYXJhbShkZXYsIGF0dHIpOworCWxvbmcgcmVxdmFsLCBhdXRvX3BvaW50MTsKKwlpbnQgaTsKKwl1OCBjdXJydmFsLCBuZXd2YWwgPSAwOworCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnJlcXZhbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWF1dG9fcG9pbnQxID0gZGF0YS0+cmVnW3BhcmFtLT5tc2JbMV1dICogMTAwMDsKKwlyZXF2YWwgPSBTRU5TT1JTX0xJTUlUKHJlcXZhbCwgYXV0b19wb2ludDEgKyAyMDAwLCBhdXRvX3BvaW50MSArIDgwMDAwKTsKKworCWZvciAoaSA9IEFSUkFZX1NJWkUoYXNjNzYyMV9yYW5nZV9tYXApIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKHJlcXZhbCA+PSBhdXRvX3BvaW50MSArIGFzYzc2MjFfcmFuZ2VfbWFwW2ldKSB7CisJCQluZXd2YWwgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwluZXd2YWwgPSAobmV3dmFsICYgcGFyYW0tPm1hc2tbMF0pIDw8IHBhcmFtLT5zaGlmdFswXTsKKwljdXJydmFsID0gcmVhZF9ieXRlKGNsaWVudCwgcGFyYW0tPm1zYlswXSk7CisJbmV3dmFsIHw9IChjdXJydmFsICYgfihwYXJhbS0+bWFza1swXSA8PCBwYXJhbS0+c2hpZnRbMF0pKTsKKwlkYXRhLT5yZWdbcGFyYW0tPm1zYlswXV0gPSBuZXd2YWw7CisJd3JpdGVfYnl0ZShjbGllbnQsIHBhcmFtLT5tc2JbMF0sIG5ld3ZhbCk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3B3bV9hYyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCVNFVFVQX1NIT1dfZGF0YV9wYXJhbShkZXYsIGF0dHIpOworCXU4IGNvbmZpZywgYWx0Yml0LCByZWd2YWw7CisJdTggbWFwW10gPSB7CisJCTB4MDEsIDB4MDIsIDB4MDQsIDB4MWYsIDB4MDAsIDB4MDYsIDB4MDcsIDB4MTAsCisJCTB4MDgsIDB4MGYsIDB4MWYsIDB4MWYsIDB4MWYsIDB4MWYsIDB4MWYsIDB4MWYKKwl9OworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWNvbmZpZyA9IChkYXRhLT5yZWdbcGFyYW0tPm1zYlswXV0gPj4gcGFyYW0tPnNoaWZ0WzBdKSAmIHBhcmFtLT5tYXNrWzBdOworCWFsdGJpdCA9IChkYXRhLT5yZWdbcGFyYW0tPm1zYlsxXV0gPj4gcGFyYW0tPnNoaWZ0WzFdKSAmIHBhcmFtLT5tYXNrWzFdOworCXJlZ3ZhbCA9IGNvbmZpZyB8IChhbHRiaXQgPDwgMyk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgbWFwW1NFTlNPUlNfTElNSVQocmVndmFsLCAwLCAxNSldKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfcHdtX2FjKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlTRVRVUF9TVE9SRV9kYXRhX3BhcmFtKGRldiwgYXR0cik7CisJdW5zaWduZWQgbG9uZyByZXF2YWw7CisJdTggY3VycnZhbCwgY29uZmlnLCBhbHRiaXQsIG5ld3ZhbDsKKwl1MTYgbWFwW10gPSB7CisJCTB4MDQsIDB4MDAsIDB4MDEsIDB4ZmYsIDB4MDIsIDB4ZmYsIDB4MDUsIDB4MDYsCisJCTB4MDgsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MGYsCisJCTB4MDcsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCisJCTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDMsCisJfTsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmcmVxdmFsKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAocmVxdmFsID4gMzEpCisJCXJldHVybiAtRUlOVkFMOworCisJcmVxdmFsID0gbWFwW3JlcXZhbF07CisJaWYgKHJlcXZhbCA9PSAweGZmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNvbmZpZyA9IHJlcXZhbCAmIDB4MDc7CisJYWx0Yml0ID0gKHJlcXZhbCA+PiAzKSAmIDB4MDE7CisKKwljb25maWcgPSAoY29uZmlnICYgcGFyYW0tPm1hc2tbMF0pIDw8IHBhcmFtLT5zaGlmdFswXTsKKwlhbHRiaXQgPSAoYWx0Yml0ICYgcGFyYW0tPm1hc2tbMV0pIDw8IHBhcmFtLT5zaGlmdFsxXTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwljdXJydmFsID0gcmVhZF9ieXRlKGNsaWVudCwgcGFyYW0tPm1zYlswXSk7CisJbmV3dmFsID0gY29uZmlnIHwgKGN1cnJ2YWwgJiB+KHBhcmFtLT5tYXNrWzBdIDw8IHBhcmFtLT5zaGlmdFswXSkpOworCW5ld3ZhbCA9IGFsdGJpdCB8IChuZXd2YWwgJiB+KHBhcmFtLT5tYXNrWzFdIDw8IHBhcmFtLT5zaGlmdFsxXSkpOworCWRhdGEtPnJlZ1twYXJhbS0+bXNiWzBdXSA9IG5ld3ZhbDsKKwl3cml0ZV9ieXRlKGNsaWVudCwgcGFyYW0tPm1zYlswXSwgbmV3dmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcHdtX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlTRVRVUF9TSE9XX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKwl1OCBjb25maWcsIGFsdGJpdCwgbWlub2ZmLCB2YWwsIG5ld3ZhbDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwljb25maWcgPSAoZGF0YS0+cmVnW3BhcmFtLT5tc2JbMF1dID4+IHBhcmFtLT5zaGlmdFswXSkgJiBwYXJhbS0+bWFza1swXTsKKwlhbHRiaXQgPSAoZGF0YS0+cmVnW3BhcmFtLT5tc2JbMV1dID4+IHBhcmFtLT5zaGlmdFsxXSkgJiBwYXJhbS0+bWFza1sxXTsKKwltaW5vZmYgPSAoZGF0YS0+cmVnW3BhcmFtLT5tc2JbMl1dID4+IHBhcmFtLT5zaGlmdFsyXSkgJiBwYXJhbS0+bWFza1syXTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXZhbCA9IGNvbmZpZyB8IChhbHRiaXQgPDwgMyk7CisJbmV3dmFsID0gMDsKKworCWlmICh2YWwgPT0gMyB8fCB2YWwgPj0gMTApCisJCW5ld3ZhbCA9IDI1NTsKKwllbHNlIGlmICh2YWwgPT0gNCkKKwkJbmV3dmFsID0gMDsKKwllbHNlIGlmICh2YWwgPT0gNykKKwkJbmV3dmFsID0gMTsKKwllbHNlIGlmIChtaW5vZmYgPT0gMSkKKwkJbmV3dmFsID0gMjsKKwllbHNlCisJCW5ld3ZhbCA9IDM7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgbmV3dmFsKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfcHdtX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJU0VUVVBfU1RPUkVfZGF0YV9wYXJhbShkZXYsIGF0dHIpOworCWxvbmcgcmVxdmFsOworCXU4IGN1cnJ2YWwsIGNvbmZpZywgYWx0Yml0LCBuZXd2YWwsIG1pbm9mZiA9IDI1NTsKKworCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZyZXF2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAocmVxdmFsKSB7CisJY2FzZSAwOgorCQluZXd2YWwgPSAweDA0OworCQlicmVhazsKKwljYXNlIDE6CisJCW5ld3ZhbCA9IDB4MDc7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJbmV3dmFsID0gMHgwMDsKKwkJbWlub2ZmID0gMTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQluZXd2YWwgPSAweDAwOworCQltaW5vZmYgPSAwOworCQlicmVhazsKKwljYXNlIDI1NToKKwkJbmV3dmFsID0gMHgwMzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY29uZmlnID0gbmV3dmFsICYgMHgwNzsKKwlhbHRiaXQgPSAobmV3dmFsID4+IDMpICYgMHgwMTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwljb25maWcgPSAoY29uZmlnICYgcGFyYW0tPm1hc2tbMF0pIDw8IHBhcmFtLT5zaGlmdFswXTsKKwlhbHRiaXQgPSAoYWx0Yml0ICYgcGFyYW0tPm1hc2tbMV0pIDw8IHBhcmFtLT5zaGlmdFsxXTsKKwljdXJydmFsID0gcmVhZF9ieXRlKGNsaWVudCwgcGFyYW0tPm1zYlswXSk7CisJbmV3dmFsID0gY29uZmlnIHwgKGN1cnJ2YWwgJiB+KHBhcmFtLT5tYXNrWzBdIDw8IHBhcmFtLT5zaGlmdFswXSkpOworCW5ld3ZhbCA9IGFsdGJpdCB8IChuZXd2YWwgJiB+KHBhcmFtLT5tYXNrWzFdIDw8IHBhcmFtLT5zaGlmdFsxXSkpOworCWRhdGEtPnJlZ1twYXJhbS0+bXNiWzBdXSA9IG5ld3ZhbDsKKwl3cml0ZV9ieXRlKGNsaWVudCwgcGFyYW0tPm1zYlswXSwgbmV3dmFsKTsKKwlpZiAobWlub2ZmIDwgMjU1KSB7CisJCW1pbm9mZiA9IChtaW5vZmYgJiBwYXJhbS0+bWFza1syXSkgPDwgcGFyYW0tPnNoaWZ0WzJdOworCQljdXJydmFsID0gcmVhZF9ieXRlKGNsaWVudCwgcGFyYW0tPm1zYlsyXSk7CisJCW5ld3ZhbCA9CisJCSAgICBtaW5vZmYgfCAoY3VycnZhbCAmIH4ocGFyYW0tPm1hc2tbMl0gPDwgcGFyYW0tPnNoaWZ0WzJdKSk7CisJCWRhdGEtPnJlZ1twYXJhbS0+bXNiWzJdXSA9IG5ld3ZhbDsKKwkJd3JpdGVfYnl0ZShjbGllbnQsIHBhcmFtLT5tc2JbMl0sIG5ld3ZhbCk7CisJfQorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHUzMiBhc2M3NjIxX3B3bV9mcmVxX21hcFtdID0geworCTEwLCAxNSwgMjMsIDMwLCAzOCwgNDcsIDYyLCA5NCwKKwkyMzAwMCwgMjQwMDAsIDI1MDAwLCAyNjAwMCwgMjcwMDAsIDI4MDAwLCAyOTAwMCwgMzAwMDAKK307CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcHdtX2ZyZXEoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCVNFVFVQX1NIT1dfZGF0YV9wYXJhbShkZXYsIGF0dHIpOworCXU4IHJlZ3ZhbCA9CisJICAgIChkYXRhLT5yZWdbcGFyYW0tPm1zYlswXV0gPj4gcGFyYW0tPnNoaWZ0WzBdKSAmIHBhcmFtLT5tYXNrWzBdOworCisJcmVndmFsID0gU0VOU09SU19MSU1JVChyZWd2YWwsIDAsIDE1KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBhc2M3NjIxX3B3bV9mcmVxX21hcFtyZWd2YWxdKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfcHdtX2ZyZXEoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlTRVRVUF9TVE9SRV9kYXRhX3BhcmFtKGRldiwgYXR0cik7CisJdW5zaWduZWQgbG9uZyByZXF2YWw7CisJdTggY3VycnZhbCwgbmV3dmFsID0gMjU1OworCWludCBpOworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMTAsICZyZXF2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFzYzc2MjFfcHdtX2ZyZXFfbWFwKTsgaSsrKSB7CisJCWlmIChyZXF2YWwgPT0gYXNjNzYyMV9wd21fZnJlcV9tYXBbaV0pIHsKKwkJCW5ld3ZhbCA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAobmV3dmFsID09IDI1NSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluZXd2YWwgPSAobmV3dmFsICYgcGFyYW0tPm1hc2tbMF0pIDw8IHBhcmFtLT5zaGlmdFswXTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwljdXJydmFsID0gcmVhZF9ieXRlKGNsaWVudCwgcGFyYW0tPm1zYlswXSk7CisJbmV3dmFsIHw9IChjdXJydmFsICYgfihwYXJhbS0+bWFza1swXSA8PCBwYXJhbS0+c2hpZnRbMF0pKTsKKwlkYXRhLT5yZWdbcGFyYW0tPm1zYlswXV0gPSBuZXd2YWw7CisJd3JpdGVfYnl0ZShjbGllbnQsIHBhcmFtLT5tc2JbMF0sIG5ld3ZhbCk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdTMyIGFzYzc2MjFfcHdtX2F1dG9fc3BpbnVwX21hcFtdID0gIHsKKwkwLCAxMDAsIDI1MCwgNDAwLCA3MDAsIDEwMDAsIDIwMDAsIDQwMDAKK307CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcHdtX2FzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlTRVRVUF9TSE9XX2RhdGFfcGFyYW0oZGV2LCBhdHRyKTsKKwl1OCByZWd2YWwgPQorCSAgICAoZGF0YS0+cmVnW3BhcmFtLT5tc2JbMF1dID4+IHBhcmFtLT5zaGlmdFswXSkgJiBwYXJhbS0+bWFza1swXTsKKworCXJlZ3ZhbCA9IFNFTlNPUlNfTElNSVQocmVndmFsLCAwLCA3KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBhc2M3NjIxX3B3bV9hdXRvX3NwaW51cF9tYXBbcmVndmFsXSk7CisKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfcHdtX2FzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlTRVRVUF9TVE9SRV9kYXRhX3BhcmFtKGRldiwgYXR0cik7CisJbG9uZyByZXF2YWw7CisJdTggY3VycnZhbCwgbmV3dmFsID0gMjU1OworCXUzMiBpOworCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnJlcXZhbCkpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXNjNzYyMV9wd21fYXV0b19zcGludXBfbWFwKTsgaSsrKSB7CisJCWlmIChyZXF2YWwgPT0gYXNjNzYyMV9wd21fYXV0b19zcGludXBfbWFwW2ldKSB7CisJCQluZXd2YWwgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKG5ld3ZhbCA9PSAyNTUpCisJCXJldHVybiAtRUlOVkFMOworCisJbmV3dmFsID0gKG5ld3ZhbCAmIHBhcmFtLT5tYXNrWzBdKSA8PCBwYXJhbS0+c2hpZnRbMF07CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJY3VycnZhbCA9IHJlYWRfYnl0ZShjbGllbnQsIHBhcmFtLT5tc2JbMF0pOworCW5ld3ZhbCB8PSAoY3VycnZhbCAmIH4ocGFyYW0tPm1hc2tbMF0gPDwgcGFyYW0tPnNoaWZ0WzBdKSk7CisJZGF0YS0+cmVnW3BhcmFtLT5tc2JbMF1dID0gbmV3dmFsOworCXdyaXRlX2J5dGUoY2xpZW50LCBwYXJhbS0+bXNiWzBdLCBuZXd2YWwpOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHUzMiBhc2M3NjIxX3RlbXBfc21vb3RoaW5nX3RpbWVfbWFwW10gPSB7CisJMzUwMDAsIDE3NjAwLCAxMTgwMCwgNzAwMCwgNDQwMCwgMzAwMCwgMTYwMCwgODAwCit9OworCitzdGF0aWMgc3NpemVfdCBzaG93X3RlbXBfc3Qoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJU0VUVVBfU0hPV19kYXRhX3BhcmFtKGRldiwgYXR0cik7CisJdTggcmVndmFsID0KKwkgICAgKGRhdGEtPnJlZ1twYXJhbS0+bXNiWzBdXSA+PiBwYXJhbS0+c2hpZnRbMF0pICYgcGFyYW0tPm1hc2tbMF07CisJcmVndmFsID0gU0VOU09SU19MSU1JVChyZWd2YWwsIDAsIDcpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGFzYzc2MjFfdGVtcF9zbW9vdGhpbmdfdGltZV9tYXBbcmVndmFsXSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3RlbXBfc3Qoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJU0VUVVBfU1RPUkVfZGF0YV9wYXJhbShkZXYsIGF0dHIpOworCWxvbmcgcmVxdmFsOworCXU4IGN1cnJ2YWwsIG5ld3ZhbCA9IDI1NTsKKwl1MzIgaTsKKworCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZyZXF2YWwpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFzYzc2MjFfdGVtcF9zbW9vdGhpbmdfdGltZV9tYXApOyBpKyspIHsKKwkJaWYgKHJlcXZhbCA9PSBhc2M3NjIxX3RlbXBfc21vb3RoaW5nX3RpbWVfbWFwW2ldKSB7CisJCQluZXd2YWwgPSBpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAobmV3dmFsID09IDI1NSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluZXd2YWwgPSAobmV3dmFsICYgcGFyYW0tPm1hc2tbMF0pIDw8IHBhcmFtLT5zaGlmdFswXTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwljdXJydmFsID0gcmVhZF9ieXRlKGNsaWVudCwgcGFyYW0tPm1zYlswXSk7CisJbmV3dmFsIHw9IChjdXJydmFsICYgfihwYXJhbS0+bWFza1swXSA8PCBwYXJhbS0+c2hpZnRbMF0pKTsKKwlkYXRhLT5yZWdbcGFyYW0tPm1zYlswXV0gPSBuZXd2YWw7CisJd3JpdGVfYnl0ZShjbGllbnQsIHBhcmFtLT5tc2JbMF0sIG5ld3ZhbCk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCisvKgorICogRW5kIG9mIGRhdGEgaGFuZGxlcnMKKyAqCisgKiBUaGVzZSBkZWZpbmVzIGRvIG5vdGhpbmcgbW9yZSB0aGFuIG1ha2UgdGhlIHRhYmxlIGVhc2llcgorICogdG8gcmVhZCB3aGVuIHdyYXBwZWQgYXQgY29sdW1uIDgwLgorICovCisKKy8qCisgKiBDcmVhdGVzIGEgdmFyaWFibGUgbGVuZ3RoIGFycmF5IGluaXRpdGFsaXplci4KKyAqIFZBQSgxLDMsNSw3KSB3b3VsZCBwcm9kdWNlIHsxLDMsNSw3fQorICovCisjZGVmaW5lIFZBQShhcmdzLi4uKSB7YXJnc30KKworI2RlZmluZSBQUkVBRChuYW1lLCBuLCBwcmksIHJtLCBybCwgbSwgcywgcikgXAorCXsuc2RhID0gU0VOU09SX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd18jI3IsIE5VTEwsIG4pLCBcCisJICAucHJpb3JpdHkgPSBwcmksIC5tc2JbMF0gPSBybSwgLmxzYlswXSA9IHJsLCAubWFza1swXSA9IG0sIFwKKwkgIC5zaGlmdFswXSA9IHMsfQorCisjZGVmaW5lIFBXUklURShuYW1lLCBuLCBwcmksIHJtLCBybCwgbSwgcywgcikgXAorCXsuc2RhID0gU0VOU09SX0FUVFIobmFtZSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfIyNyLCBzdG9yZV8jI3IsIG4pLCBcCisJICAucHJpb3JpdHkgPSBwcmksIC5tc2JbMF0gPSBybSwgLmxzYlswXSA9IHJsLCAubWFza1swXSA9IG0sIFwKKwkgIC5zaGlmdFswXSA9IHMsfQorCisvKgorICogUFdSSVRFTSBhc3N1bWVzIHRoYXQgdGhlIGluaXRpYWxpemVycyBmb3IgdGhlIC5tc2IsIC5sc2IsIC5tYXNrIGFuZCAuc2hpZnQKKyAqIHdlcmUgY3JlYXRlZCB1c2luZyB0aGUgVkFBIG1hY3JvLgorICovCisjZGVmaW5lIFBXUklURU0obmFtZSwgbiwgcHJpLCBybSwgcmwsIG0sIHMsIHIpIFwKKwl7LnNkYSA9IFNFTlNPUl9BVFRSKG5hbWUsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93XyMjciwgc3RvcmVfIyNyLCBuKSwgXAorCSAgLnByaW9yaXR5ID0gcHJpLCAubXNiID0gcm0sIC5sc2IgPSBybCwgLm1hc2sgPSBtLCAuc2hpZnQgPSBzLH0KKworc3RhdGljIHN0cnVjdCBhc2M3NjIxX3BhcmFtIGFzYzc2MjFfcGFyYW1zW10gPSB7CisJUFJFQUQoaW4wX2lucHV0LCAwLCBQUklfSElHSCwgMHgyMCwgMHgxMywgMCwgMCwgaW4xMCksCisJUFJFQUQoaW4xX2lucHV0LCAxLCBQUklfSElHSCwgMHgyMSwgMHgxOCwgMCwgMCwgaW4xMCksCisJUFJFQUQoaW4yX2lucHV0LCAyLCBQUklfSElHSCwgMHgyMiwgMHgxMSwgMCwgMCwgaW4xMCksCisJUFJFQUQoaW4zX2lucHV0LCAzLCBQUklfSElHSCwgMHgyMywgMHgxMiwgMCwgMCwgaW4xMCksCisJUFJFQUQoaW40X2lucHV0LCA0LCBQUklfSElHSCwgMHgyNCwgMHgxNCwgMCwgMCwgaW4xMCksCisKKwlQV1JJVEUoaW4wX21pbiwgMCwgUFJJX0xPVywgMHg0NCwgMCwgMCwgMCwgaW44KSwKKwlQV1JJVEUoaW4xX21pbiwgMSwgUFJJX0xPVywgMHg0NiwgMCwgMCwgMCwgaW44KSwKKwlQV1JJVEUoaW4yX21pbiwgMiwgUFJJX0xPVywgMHg0OCwgMCwgMCwgMCwgaW44KSwKKwlQV1JJVEUoaW4zX21pbiwgMywgUFJJX0xPVywgMHg0YSwgMCwgMCwgMCwgaW44KSwKKwlQV1JJVEUoaW40X21pbiwgNCwgUFJJX0xPVywgMHg0YywgMCwgMCwgMCwgaW44KSwKKworCVBXUklURShpbjBfbWF4LCAwLCBQUklfTE9XLCAweDQ1LCAwLCAwLCAwLCBpbjgpLAorCVBXUklURShpbjFfbWF4LCAxLCBQUklfTE9XLCAweDQ3LCAwLCAwLCAwLCBpbjgpLAorCVBXUklURShpbjJfbWF4LCAyLCBQUklfTE9XLCAweDQ5LCAwLCAwLCAwLCBpbjgpLAorCVBXUklURShpbjNfbWF4LCAzLCBQUklfTE9XLCAweDRiLCAwLCAwLCAwLCBpbjgpLAorCVBXUklURShpbjRfbWF4LCA0LCBQUklfTE9XLCAweDRkLCAwLCAwLCAwLCBpbjgpLAorCisJUFJFQUQoaW4wX2FsYXJtLCAwLCBQUklfTE9XLCAweDQxLCAwLCAweDAxLCAwLCBiaXRtYXNrKSwKKwlQUkVBRChpbjFfYWxhcm0sIDEsIFBSSV9MT1csIDB4NDEsIDAsIDB4MDEsIDEsIGJpdG1hc2spLAorCVBSRUFEKGluMl9hbGFybSwgMiwgUFJJX0xPVywgMHg0MSwgMCwgMHgwMSwgMiwgYml0bWFzayksCisJUFJFQUQoaW4zX2FsYXJtLCAzLCBQUklfTE9XLCAweDQxLCAwLCAweDAxLCAzLCBiaXRtYXNrKSwKKwlQUkVBRChpbjRfYWxhcm0sIDQsIFBSSV9MT1csIDB4NDIsIDAsIDB4MDEsIDAsIGJpdG1hc2spLAorCisJUFJFQUQoZmFuMV9pbnB1dCwgMCwgUFJJX0hJR0gsIDB4MjksIDB4MjgsIDAsIDAsIGZhbjE2KSwKKwlQUkVBRChmYW4yX2lucHV0LCAxLCBQUklfSElHSCwgMHgyYiwgMHgyYSwgMCwgMCwgZmFuMTYpLAorCVBSRUFEKGZhbjNfaW5wdXQsIDIsIFBSSV9ISUdILCAweDJkLCAweDJjLCAwLCAwLCBmYW4xNiksCisJUFJFQUQoZmFuNF9pbnB1dCwgMywgUFJJX0hJR0gsIDB4MmYsIDB4MmUsIDAsIDAsIGZhbjE2KSwKKworCVBXUklURShmYW4xX21pbiwgMCwgUFJJX0xPVywgMHg1NSwgMHg1NCwgMCwgMCwgZmFuMTYpLAorCVBXUklURShmYW4yX21pbiwgMSwgUFJJX0xPVywgMHg1NywgMHg1NiwgMCwgMCwgZmFuMTYpLAorCVBXUklURShmYW4zX21pbiwgMiwgUFJJX0xPVywgMHg1OSwgMHg1OCwgMCwgMCwgZmFuMTYpLAorCVBXUklURShmYW40X21pbiwgMywgUFJJX0xPVywgMHg1YiwgMHg1YSwgMCwgMCwgZmFuMTYpLAorCisJUFJFQUQoZmFuMV9hbGFybSwgMCwgUFJJX0xPVywgMHg0MiwgMCwgMHgwMSwgMCwgYml0bWFzayksCisJUFJFQUQoZmFuMl9hbGFybSwgMSwgUFJJX0xPVywgMHg0MiwgMCwgMHgwMSwgMSwgYml0bWFzayksCisJUFJFQUQoZmFuM19hbGFybSwgMiwgUFJJX0xPVywgMHg0MiwgMCwgMHgwMSwgMiwgYml0bWFzayksCisJUFJFQUQoZmFuNF9hbGFybSwgMywgUFJJX0xPVywgMHg0MiwgMCwgMHgwMSwgMywgYml0bWFzayksCisKKwlQUkVBRCh0ZW1wMV9pbnB1dCwgMCwgUFJJX0hJR0gsIDB4MjUsIDB4MTAsIDAsIDAsIHRlbXAxMCksCisJUFJFQUQodGVtcDJfaW5wdXQsIDEsIFBSSV9ISUdILCAweDI2LCAweDE1LCAwLCAwLCB0ZW1wMTApLAorCVBSRUFEKHRlbXAzX2lucHV0LCAyLCBQUklfSElHSCwgMHgyNywgMHgxNiwgMCwgMCwgdGVtcDEwKSwKKwlQUkVBRCh0ZW1wNF9pbnB1dCwgMywgUFJJX0hJR0gsIDB4MzMsIDB4MTcsIDAsIDAsIHRlbXAxMCksCisJUFJFQUQodGVtcDVfaW5wdXQsIDQsIFBSSV9ISUdILCAweGY3LCAweGY2LCAwLCAwLCB0ZW1wMTApLAorCVBSRUFEKHRlbXA2X2lucHV0LCA1LCBQUklfSElHSCwgMHhmOSwgMHhmOCwgMCwgMCwgdGVtcDEwKSwKKwlQUkVBRCh0ZW1wN19pbnB1dCwgNiwgUFJJX0hJR0gsIDB4ZmIsIDB4ZmEsIDAsIDAsIHRlbXAxMCksCisJUFJFQUQodGVtcDhfaW5wdXQsIDcsIFBSSV9ISUdILCAweGZkLCAweGZjLCAwLCAwLCB0ZW1wMTApLAorCisJUFdSSVRFKHRlbXAxX21pbiwgMCwgUFJJX0xPVywgMHg0ZSwgMCwgMCwgMCwgdGVtcDgpLAorCVBXUklURSh0ZW1wMl9taW4sIDEsIFBSSV9MT1csIDB4NTAsIDAsIDAsIDAsIHRlbXA4KSwKKwlQV1JJVEUodGVtcDNfbWluLCAyLCBQUklfTE9XLCAweDUyLCAwLCAwLCAwLCB0ZW1wOCksCisJUFdSSVRFKHRlbXA0X21pbiwgMywgUFJJX0xPVywgMHgzNCwgMCwgMCwgMCwgdGVtcDgpLAorCisJUFdSSVRFKHRlbXAxX21heCwgMCwgUFJJX0xPVywgMHg0ZiwgMCwgMCwgMCwgdGVtcDgpLAorCVBXUklURSh0ZW1wMl9tYXgsIDEsIFBSSV9MT1csIDB4NTEsIDAsIDAsIDAsIHRlbXA4KSwKKwlQV1JJVEUodGVtcDNfbWF4LCAyLCBQUklfTE9XLCAweDUzLCAwLCAwLCAwLCB0ZW1wOCksCisJUFdSSVRFKHRlbXA0X21heCwgMywgUFJJX0xPVywgMHgzNSwgMCwgMCwgMCwgdGVtcDgpLAorCisJUFJFQUQodGVtcDFfYWxhcm0sIDAsIFBSSV9MT1csIDB4NDEsIDAsIDB4MDEsIDQsIGJpdG1hc2spLAorCVBSRUFEKHRlbXAyX2FsYXJtLCAxLCBQUklfTE9XLCAweDQxLCAwLCAweDAxLCA1LCBiaXRtYXNrKSwKKwlQUkVBRCh0ZW1wM19hbGFybSwgMiwgUFJJX0xPVywgMHg0MSwgMCwgMHgwMSwgNiwgYml0bWFzayksCisJUFJFQUQodGVtcDRfYWxhcm0sIDMsIFBSSV9MT1csIDB4NDMsIDAsIDB4MDEsIDAsIGJpdG1hc2spLAorCisJUFdSSVRFKHRlbXAxX3NvdXJjZSwgMCwgUFJJX0xPVywgMHgwMiwgMCwgMHgwNywgNCwgYml0bWFzayksCisJUFdSSVRFKHRlbXAyX3NvdXJjZSwgMSwgUFJJX0xPVywgMHgwMiwgMCwgMHgwNywgMCwgYml0bWFzayksCisJUFdSSVRFKHRlbXAzX3NvdXJjZSwgMiwgUFJJX0xPVywgMHgwMywgMCwgMHgwNywgNCwgYml0bWFzayksCisJUFdSSVRFKHRlbXA0X3NvdXJjZSwgMywgUFJJX0xPVywgMHgwMywgMCwgMHgwNywgMCwgYml0bWFzayksCisKKwlQV1JJVEUodGVtcDFfc21vb3RoaW5nX2VuYWJsZSwgMCwgUFJJX0xPVywgMHg2MiwgMCwgMHgwMSwgMywgYml0bWFzayksCisJUFdSSVRFKHRlbXAyX3Ntb290aGluZ19lbmFibGUsIDEsIFBSSV9MT1csIDB4NjMsIDAsIDB4MDEsIDcsIGJpdG1hc2spLAorCVBXUklURSh0ZW1wM19zbW9vdGhpbmdfZW5hYmxlLCAyLCBQUklfTE9XLCAweDY0LCAwLCAweDAxLCAzLCBiaXRtYXNrKSwKKwlQV1JJVEUodGVtcDRfc21vb3RoaW5nX2VuYWJsZSwgMywgUFJJX0xPVywgMHgzYywgMCwgMHgwMSwgMywgYml0bWFzayksCisKKwlQV1JJVEUodGVtcDFfc21vb3RoaW5nX3RpbWUsIDAsIFBSSV9MT1csIDB4NjIsIDAsIDB4MDcsIDAsIHRlbXBfc3QpLAorCVBXUklURSh0ZW1wMl9zbW9vdGhpbmdfdGltZSwgMSwgUFJJX0xPVywgMHg2MywgMCwgMHgwNywgNCwgdGVtcF9zdCksCisJUFdSSVRFKHRlbXAzX3Ntb290aGluZ190aW1lLCAyLCBQUklfTE9XLCAweDYzLCAwLCAweDA3LCAwLCB0ZW1wX3N0KSwKKwlQV1JJVEUodGVtcDRfc21vb3RoaW5nX3RpbWUsIDMsIFBSSV9MT1csIDB4M2MsIDAsIDB4MDcsIDAsIHRlbXBfc3QpLAorCisJUFdSSVRFKHRlbXAxX2F1dG9fcG9pbnQxX3RlbXBfaHlzdCwgMCwgUFJJX0xPVywgMHg2ZCwgMCwgMHgwZiwgNCwKKwkgICAgICAgYml0bWFzayksCisJUFdSSVRFKHRlbXAyX2F1dG9fcG9pbnQxX3RlbXBfaHlzdCwgMSwgUFJJX0xPVywgMHg2ZCwgMCwgMHgwZiwgMCwKKwkgICAgICAgYml0bWFzayksCisJUFdSSVRFKHRlbXAzX2F1dG9fcG9pbnQxX3RlbXBfaHlzdCwgMiwgUFJJX0xPVywgMHg2ZSwgMCwgMHgwZiwgNCwKKwkgICAgICAgYml0bWFzayksCisJUFdSSVRFKHRlbXA0X2F1dG9fcG9pbnQxX3RlbXBfaHlzdCwgMywgUFJJX0xPVywgMHg2ZSwgMCwgMHgwZiwgMCwKKwkgICAgICAgYml0bWFzayksCisKKwlQUkVBRCh0ZW1wMV9hdXRvX3BvaW50Ml90ZW1wX2h5c3QsIDAsIFBSSV9MT1csIDB4NmQsIDAsIDB4MGYsIDQsCisJICAgICAgYml0bWFzayksCisJUFJFQUQodGVtcDJfYXV0b19wb2ludDJfdGVtcF9oeXN0LCAxLCBQUklfTE9XLCAweDZkLCAwLCAweDBmLCAwLAorCSAgICAgIGJpdG1hc2spLAorCVBSRUFEKHRlbXAzX2F1dG9fcG9pbnQyX3RlbXBfaHlzdCwgMiwgUFJJX0xPVywgMHg2ZSwgMCwgMHgwZiwgNCwKKwkgICAgICBiaXRtYXNrKSwKKwlQUkVBRCh0ZW1wNF9hdXRvX3BvaW50Ml90ZW1wX2h5c3QsIDMsIFBSSV9MT1csIDB4NmUsIDAsIDB4MGYsIDAsCisJICAgICAgYml0bWFzayksCisKKwlQV1JJVEUodGVtcDFfYXV0b19wb2ludDFfdGVtcCwgMCwgUFJJX0xPVywgMHg2NywgMCwgMCwgMCwgdGVtcDgpLAorCVBXUklURSh0ZW1wMl9hdXRvX3BvaW50MV90ZW1wLCAxLCBQUklfTE9XLCAweDY4LCAwLCAwLCAwLCB0ZW1wOCksCisJUFdSSVRFKHRlbXAzX2F1dG9fcG9pbnQxX3RlbXAsIDIsIFBSSV9MT1csIDB4NjksIDAsIDAsIDAsIHRlbXA4KSwKKwlQV1JJVEUodGVtcDRfYXV0b19wb2ludDFfdGVtcCwgMywgUFJJX0xPVywgMHgzYiwgMCwgMCwgMCwgdGVtcDgpLAorCisJUFdSSVRFTSh0ZW1wMV9hdXRvX3BvaW50Ml90ZW1wLCAwLCBQUklfTE9XLCBWQUEoMHg1ZiwgMHg2NyksIFZBQSgwKSwKKwkJVkFBKDB4MGYpLCBWQUEoNCksIGFwMl90ZW1wKSwKKwlQV1JJVEVNKHRlbXAyX2F1dG9fcG9pbnQyX3RlbXAsIDEsIFBSSV9MT1csIFZBQSgweDYwLCAweDY4KSwgVkFBKDApLAorCQlWQUEoMHgwZiksIFZBQSg0KSwgYXAyX3RlbXApLAorCVBXUklURU0odGVtcDNfYXV0b19wb2ludDJfdGVtcCwgMiwgUFJJX0xPVywgVkFBKDB4NjEsIDB4NjkpLCBWQUEoMCksCisJCVZBQSgweDBmKSwgVkFBKDQpLCBhcDJfdGVtcCksCisJUFdSSVRFTSh0ZW1wNF9hdXRvX3BvaW50Ml90ZW1wLCAzLCBQUklfTE9XLCBWQUEoMHgzYywgMHgzYiksIFZBQSgwKSwKKwkJVkFBKDB4MGYpLCBWQUEoNCksIGFwMl90ZW1wKSwKKworCVBXUklURSh0ZW1wMV9jcml0LCAwLCBQUklfTE9XLCAweDZhLCAwLCAwLCAwLCB0ZW1wOCksCisJUFdSSVRFKHRlbXAyX2NyaXQsIDEsIFBSSV9MT1csIDB4NmIsIDAsIDAsIDAsIHRlbXA4KSwKKwlQV1JJVEUodGVtcDNfY3JpdCwgMiwgUFJJX0xPVywgMHg2YywgMCwgMCwgMCwgdGVtcDgpLAorCVBXUklURSh0ZW1wNF9jcml0LCAzLCBQUklfTE9XLCAweDNkLCAwLCAwLCAwLCB0ZW1wOCksCisKKwlQV1JJVEUodGVtcDVfZW5hYmxlLCA0LCBQUklfTE9XLCAweDBlLCAwLCAweDAxLCAwLCBiaXRtYXNrKSwKKwlQV1JJVEUodGVtcDZfZW5hYmxlLCA1LCBQUklfTE9XLCAweDBlLCAwLCAweDAxLCAxLCBiaXRtYXNrKSwKKwlQV1JJVEUodGVtcDdfZW5hYmxlLCA2LCBQUklfTE9XLCAweDBlLCAwLCAweDAxLCAyLCBiaXRtYXNrKSwKKwlQV1JJVEUodGVtcDhfZW5hYmxlLCA3LCBQUklfTE9XLCAweDBlLCAwLCAweDAxLCAzLCBiaXRtYXNrKSwKKworCVBXUklURShyZW1vdGUxX29mZnNldCwgMCwgUFJJX0xPVywgMHgxYywgMCwgMCwgMCwgdGVtcDYyKSwKKwlQV1JJVEUocmVtb3RlMl9vZmZzZXQsIDEsIFBSSV9MT1csIDB4MWQsIDAsIDAsIDAsIHRlbXA2MiksCisKKwlQV1JJVEUocHdtMSwgMCwgUFJJX0hJR0gsIDB4MzAsIDAsIDAsIDAsIHU4KSwKKwlQV1JJVEUocHdtMiwgMSwgUFJJX0hJR0gsIDB4MzEsIDAsIDAsIDAsIHU4KSwKKwlQV1JJVEUocHdtMywgMiwgUFJJX0hJR0gsIDB4MzIsIDAsIDAsIDAsIHU4KSwKKworCVBXUklURShwd20xX2ludmVydCwgMCwgUFJJX0xPVywgMHg1YywgMCwgMHgwMSwgNCwgYml0bWFzayksCisJUFdSSVRFKHB3bTJfaW52ZXJ0LCAxLCBQUklfTE9XLCAweDVkLCAwLCAweDAxLCA0LCBiaXRtYXNrKSwKKwlQV1JJVEUocHdtM19pbnZlcnQsIDIsIFBSSV9MT1csIDB4NWUsIDAsIDB4MDEsIDQsIGJpdG1hc2spLAorCisJUFdSSVRFTShwd20xX2VuYWJsZSwgMCwgUFJJX0xPVywgVkFBKDB4NWMsIDB4NWMsIDB4NjIpLCBWQUEoMCwgMCwgMCksCisJCVZBQSgweDA3LCAweDAxLCAweDAxKSwgVkFBKDUsIDMsIDUpLCBwd21fZW5hYmxlKSwKKwlQV1JJVEVNKHB3bTJfZW5hYmxlLCAxLCBQUklfTE9XLCBWQUEoMHg1ZCwgMHg1ZCwgMHg2MiksIFZBQSgwLCAwLCAwKSwKKwkJVkFBKDB4MDcsIDB4MDEsIDB4MDEpLCBWQUEoNSwgMywgNiksIHB3bV9lbmFibGUpLAorCVBXUklURU0ocHdtM19lbmFibGUsIDIsIFBSSV9MT1csIFZBQSgweDVlLCAweDVlLCAweDYyKSwgVkFBKDAsIDAsIDApLAorCQlWQUEoMHgwNywgMHgwMSwgMHgwMSksIFZBQSg1LCAzLCA3KSwgcHdtX2VuYWJsZSksCisKKwlQV1JJVEVNKHB3bTFfYXV0b19jaGFubmVscywgMCwgUFJJX0xPVywgVkFBKDB4NWMsIDB4NWMpLCBWQUEoMCwgMCksCisJCVZBQSgweDA3LCAweDAxKSwgVkFBKDUsIDMpLCBwd21fYWMpLAorCVBXUklURU0ocHdtMl9hdXRvX2NoYW5uZWxzLCAxLCBQUklfTE9XLCBWQUEoMHg1ZCwgMHg1ZCksIFZBQSgwLCAwKSwKKwkJVkFBKDB4MDcsIDB4MDEpLCBWQUEoNSwgMyksIHB3bV9hYyksCisJUFdSSVRFTShwd20zX2F1dG9fY2hhbm5lbHMsIDIsIFBSSV9MT1csIFZBQSgweDVlLCAweDVlKSwgVkFBKDAsIDApLAorCQlWQUEoMHgwNywgMHgwMSksIFZBQSg1LCAzKSwgcHdtX2FjKSwKKworCVBXUklURShwd20xX2F1dG9fcG9pbnQxX3B3bSwgMCwgUFJJX0xPVywgMHg2NCwgMCwgMCwgMCwgdTgpLAorCVBXUklURShwd20yX2F1dG9fcG9pbnQxX3B3bSwgMSwgUFJJX0xPVywgMHg2NSwgMCwgMCwgMCwgdTgpLAorCVBXUklURShwd20zX2F1dG9fcG9pbnQxX3B3bSwgMiwgUFJJX0xPVywgMHg2NiwgMCwgMCwgMCwgdTgpLAorCisJUFdSSVRFKHB3bTFfYXV0b19wb2ludDJfcHdtLCAwLCBQUklfTE9XLCAweDM4LCAwLCAwLCAwLCB1OCksCisJUFdSSVRFKHB3bTJfYXV0b19wb2ludDJfcHdtLCAxLCBQUklfTE9XLCAweDM5LCAwLCAwLCAwLCB1OCksCisJUFdSSVRFKHB3bTNfYXV0b19wb2ludDJfcHdtLCAyLCBQUklfTE9XLCAweDNhLCAwLCAwLCAwLCB1OCksCisKKwlQV1JJVEUocHdtMV9mcmVxLCAwLCBQUklfTE9XLCAweDVmLCAwLCAweDBmLCAwLCBwd21fZnJlcSksCisJUFdSSVRFKHB3bTJfZnJlcSwgMSwgUFJJX0xPVywgMHg2MCwgMCwgMHgwZiwgMCwgcHdtX2ZyZXEpLAorCVBXUklURShwd20zX2ZyZXEsIDIsIFBSSV9MT1csIDB4NjEsIDAsIDB4MGYsIDAsIHB3bV9mcmVxKSwKKworCVBSRUFEKHB3bTFfYXV0b196b25lX2Fzc2lnbmVkLCAwLCBQUklfTE9XLCAwLCAwLCAweDAzLCAyLCBiaXRtYXNrKSwKKwlQUkVBRChwd20yX2F1dG9fem9uZV9hc3NpZ25lZCwgMSwgUFJJX0xPVywgMCwgMCwgMHgwMywgNCwgYml0bWFzayksCisJUFJFQUQocHdtM19hdXRvX3pvbmVfYXNzaWduZWQsIDIsIFBSSV9MT1csIDAsIDAsIDB4MDMsIDYsIGJpdG1hc2spLAorCisJUFdSSVRFKHB3bTFfYXV0b19zcGludXBfdGltZSwgMCwgUFJJX0xPVywgMHg1YywgMCwgMHgwNywgMCwgcHdtX2FzdCksCisJUFdSSVRFKHB3bTJfYXV0b19zcGludXBfdGltZSwgMSwgUFJJX0xPVywgMHg1ZCwgMCwgMHgwNywgMCwgcHdtX2FzdCksCisJUFdSSVRFKHB3bTNfYXV0b19zcGludXBfdGltZSwgMiwgUFJJX0xPVywgMHg1ZSwgMCwgMHgwNywgMCwgcHdtX2FzdCksCisKKwlQV1JJVEUocGVjaV9lbmFibGUsIDAsIFBSSV9MT1csIDB4NDAsIDAsIDB4MDEsIDQsIGJpdG1hc2spLAorCVBXUklURShwZWNpX2F2ZywgMCwgUFJJX0xPVywgMHgzNiwgMCwgMHgwNywgMCwgYml0bWFzayksCisJUFdSSVRFKHBlY2lfZG9tYWluLCAwLCBQUklfTE9XLCAweDM2LCAwLCAweDAxLCAzLCBiaXRtYXNrKSwKKwlQV1JJVEUocGVjaV9sZWdhY3ksIDAsIFBSSV9MT1csIDB4MzYsIDAsIDB4MDEsIDQsIGJpdG1hc2spLAorCVBXUklURShwZWNpX2Rpb2RlLCAwLCBQUklfTE9XLCAweDBlLCAwLCAweDA3LCA0LCBiaXRtYXNrKSwKKwlQV1JJVEUocGVjaV80ZG9tYWluLCAwLCBQUklfTE9XLCAweDBlLCAwLCAweDAxLCA0LCBiaXRtYXNrKSwKKworfTsKKworc3RhdGljIHN0cnVjdCBhc2M3NjIxX2RhdGEgKmFzYzc2MjFfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgYXNjNzYyMV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IGk7CisKKy8qCisgKiBUaGUgYXNjNzYyMSBjaGlwcyBndWFyYW50ZWUgY29uc2lzdGVudCByZWFkcyBvZiBtdWx0aS1ieXRlIHZhbHVlcworICogcmVnYXJkbGVzcyBvZiB0aGUgb3JkZXIgb2YgdGhlIHJlYWRzLiAgTm8gc3BlY2lhbCBsb2dpYyBpcyBuZWVkZWQKKyAqIHNvIHdlIGNhbiBqdXN0IHJlYWQgdGhlIHJlZ2lzdGVycyBpbiB3aGF0ZXZlciAgb3JkZXIgdGhleSBhcHBlYXIKKyAqIGluIHRoZSBhc2M3NjIxX3BhcmFtcyBhcnJheS4KKyAqLworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJLyogUmVhZCBhbGwgdGhlIGhpZ2ggcHJpb3JpdHkgcmVnaXN0ZXJzICovCisKKwlpZiAoIWRhdGEtPnZhbGlkIHx8CisJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF9oaWdoX3JlYWRpbmcgKyBJTlRFUlZBTF9ISUdIKSkgeworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFzYzc2MjFfcmVnaXN0ZXJfcHJpb3JpdGllcyk7IGkrKykgeworCQkJaWYgKGFzYzc2MjFfcmVnaXN0ZXJfcHJpb3JpdGllc1tpXSA9PSBQUklfSElHSCkgeworCQkJCWRhdGEtPnJlZ1tpXSA9CisJCQkJICAgIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIGkpICYgMHhmZjsKKwkJCX0KKwkJfQorCQlkYXRhLT5sYXN0X2hpZ2hfcmVhZGluZyA9IGppZmZpZXM7CisJfTsJCQkvKiBsYXN0X3JlYWRpbmcgKi8KKworCS8qIFJlYWQgYWxsIHRoZSBsb3cgcHJpb3JpdHkgcmVnaXN0ZXJzLiAqLworCisJaWYgKCFkYXRhLT52YWxpZCB8fAorCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfbG93X3JlYWRpbmcgKyBJTlRFUlZBTF9MT1cpKSB7CisKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXNjNzYyMV9wYXJhbXMpOyBpKyspIHsKKwkJCWlmIChhc2M3NjIxX3JlZ2lzdGVyX3ByaW9yaXRpZXNbaV0gPT0gUFJJX0xPVykgeworCQkJCWRhdGEtPnJlZ1tpXSA9CisJCQkJICAgIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIGkpICYgMHhmZjsKKwkJCX0KKwkJfQorCQlkYXRhLT5sYXN0X2xvd19yZWFkaW5nID0gamlmZmllczsKKwl9OwkJCS8qIGxhc3RfcmVhZGluZyAqLworCisJZGF0YS0+dmFsaWQgPSAxOworCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gZGF0YTsKK30KKworLyoKKyAqIFN0YW5kYXJkIGRldGVjdGlvbiBhbmQgaW5pdGlhbGl6YXRpb24gYmVsb3cKKyAqCisgKiBIZWxwZXIgZnVuY3Rpb24gdGhhdCBjaGVja3MgaWYgYW4gYWRkcmVzcyBpcyB2YWxpZAorICogZm9yIGEgcGFydGljdWxhciBjaGlwLgorICovCisKK3N0YXRpYyBpbmxpbmUgaW50IHZhbGlkX2FkZHJlc3NfZm9yX2NoaXAoaW50IGNoaXBfdHlwZSwgaW50IGFkZHJlc3MpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBhc2M3NjIxX2NoaXBzW2NoaXBfdHlwZV0uYWRkcmVzc2VzW2ldICE9IEkyQ19DTElFTlRfRU5EOworCSAgICAgaSsrKSB7CisJCWlmIChhc2M3NjIxX2NoaXBzW2NoaXBfdHlwZV0uYWRkcmVzc2VzW2ldID09IGFkZHJlc3MpCisJCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGFzYzc2MjFfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlpbnQgdmFsdWU7CisKKwkvKiBXYXJuIGlmIHBhcnQgd2FzIG5vdCAiUkVBRFkiICovCisKKwl2YWx1ZSA9IHJlYWRfYnl0ZShjbGllbnQsIDB4NDApOworCisJaWYgKHZhbHVlICYgMHgwMikgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCSJDbGllbnQgKCVkLDB4JTAyeCkgY29uZmlnIGlzIGxvY2tlZC5cbiIsCisJCQlpMmNfYWRhcHRlcl9pZChjbGllbnQtPmFkYXB0ZXIpLCBjbGllbnQtPmFkZHIpOworCX07CisJaWYgKCEodmFsdWUgJiAweDA0KSkgeworCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIkNsaWVudCAoJWQsMHglMDJ4KSBpcyBub3QgcmVhZHkuXG4iLAorCQkJaTJjX2FkYXB0ZXJfaWQoY2xpZW50LT5hZGFwdGVyKSwgY2xpZW50LT5hZGRyKTsKKwl9OworCisvKgorICogU3RhcnQgbW9uaXRvcmluZworICoKKyAqIFRyeSB0byBjbGVhciBMT0NLLCBTZXQgU1RBUlQsIHNhdmUgZXZlcnl0aGluZyBlbHNlCisgKi8KKwl2YWx1ZSA9ICh2YWx1ZSAmIH4weDAyKSB8IDB4MDE7CisJd3JpdGVfYnl0ZShjbGllbnQsIDB4NDAsIHZhbHVlICYgMHhmZik7CisKK30KKworc3RhdGljIGludAorYXNjNzYyMV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGFzYzc2MjFfZGF0YSAqZGF0YTsKKwlpbnQgaSwgZXJyOworCisJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRUlPOworCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhc2M3NjIxX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOworCWRhdGEtPnZhbGlkID0gMDsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBhc2M3NjIxIGNoaXAgKi8KKwlhc2M3NjIxX2luaXRfY2xpZW50KGNsaWVudCk7CisKKwkvKiBDcmVhdGUgdGhlIHN5c2ZzIGVudHJpZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhc2M3NjIxX3BhcmFtcyk7IGkrKykgeworCQllcnIgPQorCQkgICAgZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwKKwkJCQkgICAgICAgJihhc2M3NjIxX3BhcmFtc1tpXS5zZGEuZGV2X2F0dHIpKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXhpdF9yZW1vdmU7CisJfQorCisJZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZjbGllbnQtPmRldik7CisJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CisJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKKwkJZ290byBleGl0X3JlbW92ZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXhpdF9yZW1vdmU6CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoYXNjNzYyMV9wYXJhbXMpOyBpKyspIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZjbGllbnQtPmRldiwKKwkJCQkgICAmKGFzYzc2MjFfcGFyYW1zW2ldLnNkYS5kZXZfYXR0cikpOworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCWtmcmVlKGRhdGEpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYXNjNzYyMV9kZXRlY3Qoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgc3RydWN0IGkyY19ib2FyZF9pbmZvICppbmZvKQoreworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGNsaWVudC0+YWRhcHRlcjsKKwlpbnQgY29tcGFueSwgdmVyc3RlcCwgY2hpcF9pbmRleDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwlkZXYgPSAmY2xpZW50LT5kZXY7CisKKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCisJCXJldHVybiAtRU5PREVWOworCisJZm9yIChjaGlwX2luZGV4ID0gRklSU1RfQ0hJUDsgY2hpcF9pbmRleCA8PSBMQVNUX0NISVA7IGNoaXBfaW5kZXgrKykgeworCisJCWlmICghdmFsaWRfYWRkcmVzc19mb3JfY2hpcChjaGlwX2luZGV4LCBjbGllbnQtPmFkZHIpKQorCQkJY29udGludWU7CisKKwkJY29tcGFueSA9IHJlYWRfYnl0ZShjbGllbnQsCisJCQlhc2M3NjIxX2NoaXBzW2NoaXBfaW5kZXhdLmNvbXBhbnlfcmVnKTsKKwkJdmVyc3RlcCA9IHJlYWRfYnl0ZShjbGllbnQsCisJCQlhc2M3NjIxX2NoaXBzW2NoaXBfaW5kZXhdLnZlcnN0ZXBfcmVnKTsKKworCQlpZiAoY29tcGFueSA9PSBhc2M3NjIxX2NoaXBzW2NoaXBfaW5kZXhdLmNvbXBhbnlfaWQgJiYKKwkJICAgIHZlcnN0ZXAgPT0gYXNjNzYyMV9jaGlwc1tjaGlwX2luZGV4XS52ZXJzdGVwX2lkKSB7CisJCQlzdHJsY3B5KGNsaWVudC0+bmFtZSwgYXNjNzYyMV9jaGlwc1tjaGlwX2luZGV4XS5uYW1lLAorCQkJCUkyQ19OQU1FX1NJWkUpOworCQkJc3RybGNweShpbmZvLT50eXBlLCBhc2M3NjIxX2NoaXBzW2NoaXBfaW5kZXhdLm5hbWUsCisJCQkJSTJDX05BTUVfU0laRSk7CisKKwkJCWRldl9pbmZvKCZhZGFwdGVyLT5kZXYsICJNYXRjaGVkICVzXG4iLAorCQkJCSBhc2M3NjIxX2NoaXBzW2NoaXBfaW5kZXhdLm5hbWUpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGludCBhc2M3NjIxX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBhc2M3NjIxX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgaTsKKworCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhc2M3NjIxX3BhcmFtcyk7IGkrKykgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmNsaWVudC0+ZGV2LAorCQkJCSAgICYoYXNjNzYyMV9wYXJhbXNbaV0uc2RhLmRldl9hdHRyKSk7CisJfQorCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBhc2M3NjIxX2lkW10gPSB7CisJeyJhc2M3NjIxIiwgYXNjNzYyMX0sCisJeyJhc2M3NjIxYSIsIGFzYzc2MjFhfSwKKwl7fSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBhc2M3NjIxX2lkKTsKKworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGFzYzc2MjFfZHJpdmVyID0geworCS5jbGFzcyA9IEkyQ19DTEFTU19IV01PTiwKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJhc2M3NjIxIiwKKwl9LAorCS5wcm9iZSA9IGFzYzc2MjFfcHJvYmUsCisJLnJlbW92ZSA9IGFzYzc2MjFfcmVtb3ZlLAorCS5pZF90YWJsZSA9IGFzYzc2MjFfaWQsCisJLmRldGVjdCA9IGFzYzc2MjFfZGV0ZWN0LAorCS5hZGRyZXNzX2xpc3QgPSBub3JtYWxfaTJjLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc21fYXNjNzYyMV9pbml0KHZvaWQpCit7CisJaW50IGksIGo7CisvKgorICogQ29sbGVjdCBhbGwgdGhlIHJlZ2lzdGVycyBuZWVkZWQgaW50byBhIHNpbmdsZSBhcnJheS4KKyAqIFRoaXMgd2F5LCBpZiBhIHJlZ2lzdGVyIGlzbid0IGFjdHVhbGx5IHVzZWQgZm9yIGFueXRoaW5nLAorICogd2UgZG9uJ3QgcmV0cmlldmUgaXQuCisgKi8KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFzYzc2MjFfcGFyYW1zKTsgaSsrKSB7CisJCWZvciAoaiA9IDA7IGogPCBBUlJBWV9TSVpFKGFzYzc2MjFfcGFyYW1zW2ldLm1zYik7IGorKykKKwkJCWFzYzc2MjFfcmVnaXN0ZXJfcHJpb3JpdGllc1thc2M3NjIxX3BhcmFtc1tpXS5tc2Jbal1dID0KKwkJCSAgICBhc2M3NjIxX3BhcmFtc1tpXS5wcmlvcml0eTsKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoYXNjNzYyMV9wYXJhbXNbaV0ubHNiKTsgaisrKQorCQkJYXNjNzYyMV9yZWdpc3Rlcl9wcmlvcml0aWVzW2FzYzc2MjFfcGFyYW1zW2ldLmxzYltqXV0gPQorCQkJICAgIGFzYzc2MjFfcGFyYW1zW2ldLnByaW9yaXR5OworCX0KKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmFzYzc2MjFfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNtX2FzYzc2MjFfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZhc2M3NjIxX2RyaXZlcik7Cit9CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkdlb3JnZSBKb3NlcGgiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQW5kaWdpbG9nIGFTQzc2MjEgYW5kIGFTQzc2MjFhIGRyaXZlciIpOworCittb2R1bGVfaW5pdChzbV9hc2M3NjIxX2luaXQpOworbW9kdWxlX2V4aXQoc21fYXNjNzYyMV9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMgYi9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jCmluZGV4IGZhMDcyODIuLjA2MjdmN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMKKysrIGIvZHJpdmVycy9od21vbi9mc2NobWQuYwpAQCAtMjY3LDcgKzI2Nyw3IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OyAvKiBtZW1iZXIgb2YgdGhlIHdhdGNoZG9nX2RhdGFfbGlzdCAqLwogCXN0cnVjdCBrcmVmIGtyZWY7CiAJc3RydWN0IG1pc2NkZXZpY2Ugd2F0Y2hkb2dfbWlzY2RldjsKLQlpbnQga2luZDsKKwllbnVtIGNoaXBzIGtpbmQ7CiAJdW5zaWduZWQgbG9uZyB3YXRjaGRvZ19pc19vcGVuOwogCWNoYXIgd2F0Y2hkb2dfZXhwZWN0X2Nsb3NlOwogCWNoYXIgd2F0Y2hkb2dfbmFtZVsxMF07IC8qIG11c3QgYmUgdW5pcXVlIHRvIGF2b2lkIHN5c2ZzIGNvbmZsaWN0ICovCkBAIC0zMjUsOCArMzI1LDcgQEAKIAlpbnQgaW5kZXggPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0ciktPmluZGV4OwogCXN0cnVjdCBmc2NobWRfZGF0YSAqZGF0YSA9IGZzY2htZF91cGRhdGVfZGV2aWNlKGRldik7CiAKLQkvKiBmc2NoZXIgLyBmc2NocmMgLSAxIGFzIGRhdGEtPmtpbmQgaXMgYW4gYXJyYXkgaW5kZXgsIG5vdCBhIGNoaXBzICovCi0JaWYgKGRhdGEtPmtpbmQgPT0gKGZzY2hlciAtIDEpIHx8IGRhdGEtPmtpbmQgPj0gKGZzY2hyYyAtIDEpKQorCWlmIChkYXRhLT5raW5kID09IGZzY2hlciB8fCBkYXRhLT5raW5kID49IGZzY2hyYykKIAkJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChkYXRhLT52b2x0W2luZGV4XSAqIGRtaV92cmVmICoKIAkJCWRtaV9tdWx0W2luZGV4XSkgLyAyNTUgKyBkbWlfb2Zmc2V0W2luZGV4XSk7CiAJZWxzZQpAQCAtNDkyLDcgKzQ5MSw3IEBACiAJaW50IHZhbCA9IGRhdGEtPmZhbl9taW5baW5kZXhdOwogCiAJLyogMCA9IGFsbG93IHR1cm5pbmcgb2ZmIChleGNlcHQgb24gdGhlIHN5bCksIDEtMjU1ID0gNTAtMTAwJSAqLwotCWlmICh2YWwgfHwgZGF0YS0+a2luZCA9PSBmc2NzeWwgLSAxKQorCWlmICh2YWwgfHwgZGF0YS0+a2luZCA9PSBmc2NzeWwpCiAJCXZhbCA9IHZhbCAvIDIgKyAxMjg7CiAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmFsKTsKQEAgLTUwNiw3ICs1MDUsNyBAQAogCXVuc2lnbmVkIGxvbmcgdiA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOwogCiAJLyogcmVnOiAwID0gYWxsb3cgdHVybmluZyBvZmYgKGV4Y2VwdCBvbiB0aGUgc3lsKSwgMS0yNTUgPSA1MC0xMDAlICovCi0JaWYgKHYgfHwgZGF0YS0+a2luZCA9PSBmc2NzeWwgLSAxKSB7CisJaWYgKHYgfHwgZGF0YS0+a2luZCA9PSBmc2NzeWwpIHsKIAkJdiA9IFNFTlNPUlNfTElNSVQodiwgMTI4LCAyNTUpOwogCQl2ID0gKHYgLSAxMjgpICogMiArIDE7CiAJfQpAQCAtMTAzNyw3ICsxMDM2LDcgQEAKIAllbHNlCiAJCXJldHVybiAtRU5PREVWOwogCi0Jc3RybGNweShpbmZvLT50eXBlLCBmc2NobWRfaWRba2luZCAtIDFdLm5hbWUsIEkyQ19OQU1FX1NJWkUpOworCXN0cmxjcHkoaW5mby0+dHlwZSwgZnNjaG1kX2lkW2tpbmRdLm5hbWUsIEkyQ19OQU1FX1NJWkUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMDY1LDYgKzEwNjQsNyBAQAogCSAgICh3aGVyZSB0aGUgY2xpZW50IGlzIGZvdW5kIHRocm91Z2ggYSBkYXRhIHB0ciBpbnN0ZWFkIG9mIHRoZQogCSAgIG90aGVyd2F5IGFyb3VuZCkgKi8KIAlkYXRhLT5jbGllbnQgPSBjbGllbnQ7CisJZGF0YS0+a2luZCA9IGtpbmQ7CiAKIAlpZiAoa2luZCA9PSBmc2Nwb3MpIHsKIAkJLyogVGhlIFBvc2VpZG9uIGhhcyBoYXJkd2lyZWQgdGVtcCBsaW1pdHMsIGZpbGwgdGhlc2UKQEAgLTEwODUsOSArMTA4NSw2IEBACiAJCX0KIAl9CiAKLQkvKiBpMmMga2luZCBnb2VzIGZyb20gMS02LCB3ZSB3YW50IGZyb20gMC01IHRvIGFkZHJlc3MgYXJyYXlzICovCi0JZGF0YS0+a2luZCA9IGtpbmQgLSAxOwotCiAJLyogUmVhZCBpbiBzb21lIG5ldmVyIGNoYW5naW5nIHJlZ2lzdGVycyAqLwogCWRhdGEtPnJldmlzaW9uID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRlNDSE1EX1JFR19SRVZJU0lPTik7CiAJZGF0YS0+Z2xvYmFsX2NvbnRyb2wgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9nNzYwYS5jIGIvZHJpdmVycy9od21vbi9nNzYwYS5jCmluZGV4IDE5YzAxYTQ5Li4wOWVhMTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2c3NjBhLmMKKysrIGIvZHJpdmVycy9od21vbi9nNzYwYS5jCkBAIC02OCw3ICs2OCw3IEBACiAjZGVmaW5lIFBXTV9GUk9NX0NOVChjbnQpCSgweGZmLShjbnQpKQogI2RlZmluZSBQV01fVE9fQ05UKHB3bSkJCSgweGZmLShwd20pKQogCi11bnNpZ25lZCBpbnQgcnBtX2Zyb21fY250KHU4IHZhbCwgdTMyIGNsaywgdTE2IGRpdikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJwbV9mcm9tX2NudCh1OCB2YWwsIHUzMiBjbGssIHUxNiBkaXYpCiB7CiAJcmV0dXJuICgodmFsID09IDB4MDApID8gMCA6ICgoY2xrKjMwKS8odmFsKmRpdikpKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaXQ4Ny5jIGIvZHJpdmVycy9od21vbi9pdDg3LmMKaW5kZXggMGZmZTg0ZC4uMTAwMmJlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9pdDg3LmMKKysrIGIvZHJpdmVycy9od21vbi9pdDg3LmMKQEAgLTEsNDAgKzEsNDAgQEAKIC8qCi0gICAgaXQ4Ny5jIC0gUGFydCBvZiBsbV9zZW5zb3JzLCBMaW51eCBrZXJuZWwgbW9kdWxlcyBmb3IgaGFyZHdhcmUKLSAgICAgICAgICAgICBtb25pdG9yaW5nLgotCi0gICAgVGhlIElUODcwNUYgaXMgYW4gTFBDLWJhc2VkIFN1cGVyIEkvTyBwYXJ0IHRoYXQgY29udGFpbnMgVUFSVHMsIGEKLSAgICBwYXJhbGxlbCBwb3J0LCBhbiBJUiBwb3J0LCBhIE1JREkgcG9ydCwgYSBmbG9wcHkgY29udHJvbGxlciwgZXRjLiwgaW4KLSAgICBhZGRpdGlvbiB0byBhbiBFbnZpcm9ubWVudCBDb250cm9sbGVyIChFbmhhbmNlZCBIYXJkd2FyZSBNb25pdG9yIGFuZAotICAgIEZhbiBDb250cm9sbGVyKQotCi0gICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgb25seSB0aGUgRW52aXJvbm1lbnQgQ29udHJvbGxlciBpbiB0aGUgSVQ4NzA1RiBhbmQKLSAgICBzaW1pbGFyIHBhcnRzLiAgVGhlIG90aGVyIGRldmljZXMgYXJlIHN1cHBvcnRlZCBieSBkaWZmZXJlbnQgZHJpdmVycy4KLQotICAgIFN1cHBvcnRzOiBJVDg3MDVGICBTdXBlciBJL08gY2hpcCB3L0xQQyBpbnRlcmZhY2UKLSAgICAgICAgICAgICAgSVQ4NzEyRiAgU3VwZXIgSS9PIGNoaXAgdy9MUEMgaW50ZXJmYWNlCi0gICAgICAgICAgICAgIElUODcxNkYgIFN1cGVyIEkvTyBjaGlwIHcvTFBDIGludGVyZmFjZQotICAgICAgICAgICAgICBJVDg3MThGICBTdXBlciBJL08gY2hpcCB3L0xQQyBpbnRlcmZhY2UKLSAgICAgICAgICAgICAgSVQ4NzIwRiAgU3VwZXIgSS9PIGNoaXAgdy9MUEMgaW50ZXJmYWNlCi0gICAgICAgICAgICAgIElUODcyNkYgIFN1cGVyIEkvTyBjaGlwIHcvTFBDIGludGVyZmFjZQotICAgICAgICAgICAgICBTaXM5NTAgICBBIGNsb25lIG9mIHRoZSBJVDg3MDVGCi0KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDEgQ2hyaXMgR2F1dGhyb24KLSAgICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNyBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotKi8KKyAqICBpdDg3LmMgLSBQYXJ0IG9mIGxtX3NlbnNvcnMsIExpbnV4IGtlcm5lbCBtb2R1bGVzIGZvciBoYXJkd2FyZQorICogICAgICAgICAgIG1vbml0b3JpbmcuCisgKgorICogIFRoZSBJVDg3MDVGIGlzIGFuIExQQy1iYXNlZCBTdXBlciBJL08gcGFydCB0aGF0IGNvbnRhaW5zIFVBUlRzLCBhCisgKiAgcGFyYWxsZWwgcG9ydCwgYW4gSVIgcG9ydCwgYSBNSURJIHBvcnQsIGEgZmxvcHB5IGNvbnRyb2xsZXIsIGV0Yy4sIGluCisgKiAgYWRkaXRpb24gdG8gYW4gRW52aXJvbm1lbnQgQ29udHJvbGxlciAoRW5oYW5jZWQgSGFyZHdhcmUgTW9uaXRvciBhbmQKKyAqICBGYW4gQ29udHJvbGxlcikKKyAqCisgKiAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgb25seSB0aGUgRW52aXJvbm1lbnQgQ29udHJvbGxlciBpbiB0aGUgSVQ4NzA1RiBhbmQKKyAqICBzaW1pbGFyIHBhcnRzLiAgVGhlIG90aGVyIGRldmljZXMgYXJlIHN1cHBvcnRlZCBieSBkaWZmZXJlbnQgZHJpdmVycy4KKyAqCisgKiAgU3VwcG9ydHM6IElUODcwNUYgIFN1cGVyIEkvTyBjaGlwIHcvTFBDIGludGVyZmFjZQorICogICAgICAgICAgICBJVDg3MTJGICBTdXBlciBJL08gY2hpcCB3L0xQQyBpbnRlcmZhY2UKKyAqICAgICAgICAgICAgSVQ4NzE2RiAgU3VwZXIgSS9PIGNoaXAgdy9MUEMgaW50ZXJmYWNlCisgKiAgICAgICAgICAgIElUODcxOEYgIFN1cGVyIEkvTyBjaGlwIHcvTFBDIGludGVyZmFjZQorICogICAgICAgICAgICBJVDg3MjBGICBTdXBlciBJL08gY2hpcCB3L0xQQyBpbnRlcmZhY2UKKyAqICAgICAgICAgICAgSVQ4NzI2RiAgU3VwZXIgSS9PIGNoaXAgdy9MUEMgaW50ZXJmYWNlCisgKiAgICAgICAgICAgIFNpczk1MCAgIEEgY2xvbmUgb2YgdGhlIElUODcwNUYKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAxIENocmlzIEdhdXRocm9uCisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LTIwMTAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTI4LDYgKzEyOCw3IEBACiAjZGVmaW5lIElUODdfU0lPX0dQSU81X1JFRwkweDI5CiAjZGVmaW5lIElUODdfU0lPX1BJTlgyX1JFRwkweDJjCS8qIFBpbiBzZWxlY3Rpb24gKi8KICNkZWZpbmUgSVQ4N19TSU9fVklEX1JFRwkweGZjCS8qIFZJRCB2YWx1ZSAqLworI2RlZmluZSBJVDg3X1NJT19CRUVQX1BJTl9SRUcJMHhmNgkvKiBCZWVwIHBpbiBtYXBwaW5nICovCiAKIC8qIFVwZGF0ZSBiYXR0ZXJ5IHZvbHRhZ2UgYWZ0ZXIgZXZlcnkgcmVhZGluZyBpZiB0cnVlICovCiBzdGF0aWMgaW50IHVwZGF0ZV92YmF0OwpAQCAtMTg3LDkgKzE4OCwxMyBAQAogCiAjZGVmaW5lIElUODdfUkVHX1ZJTl9FTkFCTEUgICAgMHg1MAogI2RlZmluZSBJVDg3X1JFR19URU1QX0VOQUJMRSAgIDB4NTEKKyNkZWZpbmUgSVQ4N19SRUdfQkVFUF9FTkFCTEUgICAweDVjCiAKICNkZWZpbmUgSVQ4N19SRUdfQ0hJUElEICAgICAgICAweDU4CiAKKyNkZWZpbmUgSVQ4N19SRUdfQVVUT19URU1QKG5yLCBpKSAoMHg2MCArIChucikgKiA4ICsgKGkpKQorI2RlZmluZSBJVDg3X1JFR19BVVRPX1BXTShuciwgaSkgICgweDY1ICsgKG5yKSAqIDggKyAoaSkpCisKICNkZWZpbmUgSU5fVE9fUkVHKHZhbCkgIChTRU5TT1JTX0xJTUlUKCgoKHZhbCkgKyA4KS8xNiksMCwyNTUpKQogI2RlZmluZSBJTl9GUk9NX1JFRyh2YWwpICgodmFsKSAqIDE2KQogCkBAIC0yNDYsNiArMjUxLDcgQEAKIAkvKiBWYWx1ZXMgcmVhZCBmcm9tIFN1cGVyLUkvTyBjb25maWcgc3BhY2UgKi8KIAl1OCByZXZpc2lvbjsKIAl1OCB2aWRfdmFsdWU7CisJdTggYmVlcF9waW47CiAJLyogRmVhdHVyZXMgc2tpcHBlZCBiYXNlZCBvbiBjb25maWcgb3IgRE1JICovCiAJdTggc2tpcF92aWQ7CiAJdTggc2tpcF9mYW47CkBAIC0yNzksOSArMjg1LDIxIEBACiAJdTggdmlkOwkJCS8qIFJlZ2lzdGVyIGVuY29kaW5nLCBjb21iaW5lZCAqLwogCXU4IHZybTsKIAl1MzIgYWxhcm1zOwkJLyogUmVnaXN0ZXIgZW5jb2RpbmcsIGNvbWJpbmVkICovCisJdTggYmVlcHM7CQkvKiBSZWdpc3RlciBlbmNvZGluZyAqLwogCXU4IGZhbl9tYWluX2N0cmw7CS8qIFJlZ2lzdGVyIHZhbHVlICovCiAJdTggZmFuX2N0bDsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCi0JdTggbWFudWFsX3B3bV9jdGxbM107ICAgLyogbWFudWFsIFBXTSB2YWx1ZSBzZXQgYnkgdXNlciAqLworCisJLyogVGhlIGZvbGxvd2luZyAzIGFycmF5cyBjb3JyZXNwb25kIHRvIHRoZSBzYW1lIHJlZ2lzdGVycy4gVGhlCisJICogbWVhbmluZyBvZiBiaXRzIDYtMCBkZXBlbmRzIG9uIHRoZSB2YWx1ZSBvZiBiaXQgNywgYW5kIHdlIHdhbnQKKwkgKiB0byBwcmVzZXJ2ZSBzZXR0aW5ncyBvbiBtb2RlIGNoYW5nZXMsIHNvIHdlIGhhdmUgdG8gdHJhY2sgYWxsCisJICogdmFsdWVzIHNlcGFyYXRlbHkuICovCisJdTggcHdtX2N0cmxbM107CQkvKiBSZWdpc3RlciB2YWx1ZSAqLworCXU4IHB3bV9kdXR5WzNdOwkJLyogTWFudWFsIFBXTSB2YWx1ZSBzZXQgYnkgdXNlciAoYml0IDYtMCkgKi8KKwl1OCBwd21fdGVtcF9tYXBbM107CS8qIFBXTSB0byB0ZW1wLiBjaGFuLiBtYXBwaW5nIChiaXRzIDEtMCkgKi8KKworCS8qIEF1dG9tYXRpYyBmYW4gc3BlZWQgY29udHJvbCByZWdpc3RlcnMgKi8KKwl1OCBhdXRvX3B3bVszXVs0XTsJLyogW25yXVszXSBpcyBoYXJkLWNvZGVkICovCisJczggYXV0b190ZW1wWzNdWzVdOwkvKiBbbnJdWzBdIGlzIHBvaW50MV90ZW1wX2h5c3QgKi8KIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IGhhc18xNmJpdF9mYW5zKGNvbnN0IHN0cnVjdCBpdDg3X2RhdGEgKmRhdGEpCkBAIC0yOTYsNiArMzE0LDE1IEBACiAJICAgIHx8IGRhdGEtPnR5cGUgPT0gaXQ4NzIwOwogfQogCitzdGF0aWMgaW5saW5lIGludCBoYXNfb2xkX2F1dG9wd20oY29uc3Qgc3RydWN0IGl0ODdfZGF0YSAqZGF0YSkKK3sKKwkvKiBUaGUgb2xkIGF1dG9tYXRpYyBmYW4gc3BlZWQgY29udHJvbCBpbnRlcmZhY2UgaXMgaW1wbGVtZW50ZWQKKwkgICBieSBJVDg3MDVGIGNoaXBzIHVwIHRvIHJldmlzaW9uIEYgYW5kIElUODcxMkYgY2hpcHMgdXAgdG8KKwkgICByZXZpc2lvbiBHLiAqLworCXJldHVybiAoZGF0YS0+dHlwZSA9PSBpdDg3ICYmIGRhdGEtPnJldmlzaW9uIDwgMHgwMykKKwkgICAgfHwgKGRhdGEtPnR5cGUgPT0gaXQ4NzEyICYmIGRhdGEtPnJldmlzaW9uIDwgMHgwOCk7Cit9CisKIHN0YXRpYyBpbnQgaXQ4N19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIHN0YXRpYyBpbnQgX19kZXZleGl0IGl0ODdfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogCkBAIC0zNTIsNyArMzc5LDEwIEBACiAJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OwogCiAJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXVuc2lnbmVkIGxvbmcgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5pbl9taW5bbnJdID0gSU5fVE9fUkVHKHZhbCk7CkBAIC0zNjgsNyArMzk4LDEwIEBACiAJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OwogCiAJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXVuc2lnbmVkIGxvbmcgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5pbl9tYXhbbnJdID0gSU5fVE9fUkVHKHZhbCk7CkBAIC00NDEsNyArNDc0LDEwIEBACiAJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OwogCiAJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCWxvbmcgdmFsOworCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT50ZW1wX2hpZ2hbbnJdID0gVEVNUF9UT19SRUcodmFsKTsKQEAgLTQ1Niw3ICs0OTIsMTAgQEAKIAlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CiAKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaW50IHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisJbG9uZyB2YWw7CisKKwlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKSA8IDApCisJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCWRhdGEtPnRlbXBfbG93W25yXSA9IFRFTVBfVE9fUkVHKHZhbCk7CkBAIC00ODMsOCArNTIyLDkgQEAKIAlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CiAKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gaXQ4N191cGRhdGVfZGV2aWNlKGRldik7Ci0JdTggcmVnID0gZGF0YS0+c2Vuc29yOyAvKiBJbiBjYXNlIHRoZSB2YWx1ZSBpcyB1cGRhdGVkIHdoaWxlIHdlIHVzZSBpdCAqLwotCQorCXU4IHJlZyA9IGRhdGEtPnNlbnNvcjsJCS8qIEluIGNhc2UgdGhlIHZhbHVlIGlzIHVwZGF0ZWQgd2hpbGUKKwkJCQkJICAgd2UgdXNlIGl0ICovCisKIAlpZiAocmVnICYgKDEgPDwgbnIpKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICIzXG4iKTsgIC8qIHRoZXJtYWwgZGlvZGUgKi8KIAlpZiAocmVnICYgKDggPDwgbnIpKQpAQCAtNDk4LDcgKzUzOCwxMCBAQAogCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKIAogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKwlsb25nIHZhbDsKKworCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpIDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAKQEAgLTUxMSw5ICs1NTQsOSBAQAogCX0KIAkvKiAzID0gdGhlcm1hbCBkaW9kZTsgNCA9IHRoZXJtaXN0b3I7IDAgPSBkaXNhYmxlZCAqLwogCWlmICh2YWwgPT0gMykKLQkgICAgZGF0YS0+c2Vuc29yIHw9IDEgPDwgbnI7CisJCWRhdGEtPnNlbnNvciB8PSAxIDw8IG5yOwogCWVsc2UgaWYgKHZhbCA9PSA0KQotCSAgICBkYXRhLT5zZW5zb3IgfD0gOCA8PCBucjsKKwkJZGF0YS0+c2Vuc29yIHw9IDggPDwgbnI7CiAJZWxzZSBpZiAodmFsICE9IDApIHsKIAkJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNTMxLDYgKzU3NCwxOSBAQAogc2hvd19zZW5zb3Jfb2Zmc2V0KDMpOwogCiAvKiAzIEZhbnMgKi8KKworc3RhdGljIGludCBwd21fbW9kZShjb25zdCBzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhLCBpbnQgbnIpCit7CisJaW50IGN0cmwgPSBkYXRhLT5mYW5fbWFpbl9jdHJsICYgKDEgPDwgbnIpOworCisJaWYgKGN0cmwgPT0gMCkJCQkJCS8qIEZ1bGwgc3BlZWQgKi8KKwkJcmV0dXJuIDA7CisJaWYgKGRhdGEtPnB3bV9jdHJsW25yXSAmIDB4ODApCQkJLyogQXV0b21hdGljIG1vZGUgKi8KKwkJcmV0dXJuIDI7CisJZWxzZQkJCQkJCS8qIE1hbnVhbCBtb2RlICovCisJCXJldHVybiAxOworfQorCiBzdGF0aWMgc3NpemVfdCBzaG93X2ZhbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljaGFyICpidWYpCiB7CkBAIC01MzgsNyArNTk0LDcgQEAKIAlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CiAKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gaXQ4N191cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCIlZFxuIiwgRkFOX0ZST01fUkVHKGRhdGEtPmZhbltucl0sIAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBGQU5fRlJPTV9SRUcoZGF0YS0+ZmFuW25yXSwKIAkJCQlESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2Rpdltucl0pKSk7CiB9CiBzdGF0aWMgc3NpemVfdCBzaG93X2Zhbl9taW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTU0OCw4ICs2MDQsOCBAQAogCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKIAogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBpdDg3X3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsIiVkXG4iLAotCQlGQU5fRlJPTV9SRUcoZGF0YS0+ZmFuX21pbltucl0sIERJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W25yXSkpKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgRkFOX0ZST01fUkVHKGRhdGEtPmZhbl9taW5bbnJdLAorCQkJCURJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W25yXSkpKTsKIH0KIHN0YXRpYyBzc2l6ZV90IHNob3dfZmFuX2RpdihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljaGFyICpidWYpCkBAIC01NjAsMTQgKzYxNiwxNCBAQAogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBpdDg3X3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnJdKSk7CiB9Ci1zdGF0aWMgc3NpemVfdCBzaG93X3B3bV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKLQkJY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19wd21fZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNlbnNvcl9hdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOwogCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKIAogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBpdDg3X3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsIiVkXG4iLCAoZGF0YS0+ZmFuX21haW5fY3RybCAmICgxIDw8IG5yKSkgPyAxIDogMCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHB3bV9tb2RlKGRhdGEsIG5yKSk7CiB9CiBzdGF0aWMgc3NpemVfdCBzaG93X3B3bShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljaGFyICpidWYpCkBAIC01NzYsNyArNjMyLDcgQEAKIAlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CiAKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gaXQ4N191cGRhdGVfZGV2aWNlKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCIlZFxuIiwgZGF0YS0+bWFudWFsX3B3bV9jdGxbbnJdKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgUFdNX0ZST01fUkVHKGRhdGEtPnB3bV9kdXR5W25yXSkpOwogfQogc3RhdGljIHNzaXplX3Qgc2hvd19wd21fZnJlcShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljaGFyICpidWYpCkBAIC01OTMsMTUgKzY0OSwyNCBAQAogCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKIAogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKwlsb25nIHZhbDsKIAl1OCByZWc7CiAKKwlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJlZyA9IGl0ODdfcmVhZF92YWx1ZShkYXRhLCBJVDg3X1JFR19GQU5fRElWKTsKIAlzd2l0Y2ggKG5yKSB7Ci0JY2FzZSAwOiBkYXRhLT5mYW5fZGl2W25yXSA9IHJlZyAmIDB4MDc7IGJyZWFrOwotCWNhc2UgMTogZGF0YS0+ZmFuX2Rpdltucl0gPSAocmVnID4+IDMpICYgMHgwNzsgYnJlYWs7Ci0JY2FzZSAyOiBkYXRhLT5mYW5fZGl2W25yXSA9IChyZWcgJiAweDQwKSA/IDMgOiAxOyBicmVhazsKKwljYXNlIDA6CisJCWRhdGEtPmZhbl9kaXZbbnJdID0gcmVnICYgMHgwNzsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlkYXRhLT5mYW5fZGl2W25yXSA9IChyZWcgPj4gMykgJiAweDA3OworCQlicmVhazsKKwljYXNlIDI6CisJCWRhdGEtPmZhbl9kaXZbbnJdID0gKHJlZyAmIDB4NDApID8gMyA6IDE7CisJCWJyZWFrOwogCX0KIAogCWRhdGEtPmZhbl9taW5bbnJdID0gRkFOX1RPX1JFRyh2YWwsIERJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W25yXSkpOwpAQCAtNjE2LDEwICs2ODEsMTMgQEAKIAlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CiAKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKIAlpbnQgbWluOwogCXU4IG9sZDsKIAorCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDEwLCAmdmFsKSA8IDApCisJCXJldHVybiAtRUlOVkFMOworCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCW9sZCA9IGl0ODdfcmVhZF92YWx1ZShkYXRhLCBJVDg3X1JFR19GQU5fRElWKTsKIApAQCAtNjUxLDYgKzcxOSwzMiBAQAogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCXJldHVybiBjb3VudDsKIH0KKworLyogUmV0dXJucyAwIGlmIE9LLCAtRUlOVkFMIG90aGVyd2lzZSAqLworc3RhdGljIGludCBjaGVja190cmlwX3BvaW50cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBucikKK3sKKwljb25zdCBzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IGksIGVyciA9IDA7CisKKwlpZiAoaGFzX29sZF9hdXRvcHdtKGRhdGEpKSB7CisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJCWlmIChkYXRhLT5hdXRvX3RlbXBbbnJdW2ldID4gZGF0YS0+YXV0b190ZW1wW25yXVtpICsgMV0pCisJCQkJZXJyID0gLUVJTlZBTDsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlpZiAoZGF0YS0+YXV0b19wd21bbnJdW2ldID4gZGF0YS0+YXV0b19wd21bbnJdW2kgKyAxXSkKKwkJCQllcnIgPSAtRUlOVkFMOworCQl9CisJfQorCisJaWYgKGVycikgeworCQlkZXZfZXJyKGRldiwgIkluY29uc2lzdGVudCB0cmlwIHBvaW50cywgbm90IHN3aXRjaGluZyB0byAiCisJCQkiYXV0b21hdGljIG1vZGVcbiIpOworCQlkZXZfZXJyKGRldiwgIkFkanVzdCB0aGUgdHJpcCBwb2ludHMgYW5kIHRyeSBhZ2FpblxuIik7CisJfQorCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHNldF9wd21fZW5hYmxlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewpAQCAtNjU4LDcgKzc1MiwxNiBAQAogCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKIAogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlpbnQgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKwlsb25nIHZhbDsKKworCWlmIChzdHJpY3Rfc3RydG9sKGJ1ZiwgMTAsICZ2YWwpIDwgMCB8fCB2YWwgPCAwIHx8IHZhbCA+IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogQ2hlY2sgdHJpcCBwb2ludHMgYmVmb3JlIHN3aXRjaGluZyB0byBhdXRvbWF0aWMgbW9kZSAqLworCWlmICh2YWwgPT0gMikgeworCQlpZiAoY2hlY2tfdHJpcF9wb2ludHMoZGV2LCBucikgPCAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQogCiAJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwogCkBAIC02NjksMTYgKzc3MiwxOCBAQAogCQlpdDg3X3dyaXRlX3ZhbHVlKGRhdGEsIElUODdfUkVHX0ZBTl9DVEwsIHRtcCB8ICgxIDw8IG5yKSk7CiAJCS8qIHNldCBvbi9vZmYgbW9kZSAqLwogCQlkYXRhLT5mYW5fbWFpbl9jdHJsICY9IH4oMSA8PCBucik7Ci0JCWl0ODdfd3JpdGVfdmFsdWUoZGF0YSwgSVQ4N19SRUdfRkFOX01BSU5fQ1RSTCwgZGF0YS0+ZmFuX21haW5fY3RybCk7Ci0JfSBlbHNlIGlmICh2YWwgPT0gMSkgeworCQlpdDg3X3dyaXRlX3ZhbHVlKGRhdGEsIElUODdfUkVHX0ZBTl9NQUlOX0NUUkwsCisJCQkJIGRhdGEtPmZhbl9tYWluX2N0cmwpOworCX0gZWxzZSB7CisJCWlmICh2YWwgPT0gMSkJCQkJLyogTWFudWFsIG1vZGUgKi8KKwkJCWRhdGEtPnB3bV9jdHJsW25yXSA9IGRhdGEtPnB3bV9kdXR5W25yXTsKKwkJZWxzZQkJCQkJLyogQXV0b21hdGljIG1vZGUgKi8KKwkJCWRhdGEtPnB3bV9jdHJsW25yXSA9IDB4ODAgfCBkYXRhLT5wd21fdGVtcF9tYXBbbnJdOworCQlpdDg3X3dyaXRlX3ZhbHVlKGRhdGEsIElUODdfUkVHX1BXTShuciksIGRhdGEtPnB3bV9jdHJsW25yXSk7CiAJCS8qIHNldCBTbWFydEd1YXJkaWFuIG1vZGUgKi8KIAkJZGF0YS0+ZmFuX21haW5fY3RybCB8PSAoMSA8PCBucik7Ci0JCWl0ODdfd3JpdGVfdmFsdWUoZGF0YSwgSVQ4N19SRUdfRkFOX01BSU5fQ1RSTCwgZGF0YS0+ZmFuX21haW5fY3RybCk7Ci0JCS8qIHNldCBzYXZlZCBwd20gdmFsdWUsIGNsZWFyIEZBTl9DVExYIFBXTSBtb2RlIGJpdCAqLwotCQlpdDg3X3dyaXRlX3ZhbHVlKGRhdGEsIElUODdfUkVHX1BXTShuciksIFBXTV9UT19SRUcoZGF0YS0+bWFudWFsX3B3bV9jdGxbbnJdKSk7Ci0JfSBlbHNlIHsKLQkJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlpdDg3X3dyaXRlX3ZhbHVlKGRhdGEsIElUODdfUkVHX0ZBTl9NQUlOX0NUUkwsCisJCQkJIGRhdGEtPmZhbl9tYWluX2N0cmwpOwogCX0KIAogCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOwpAQCAtNjkxLDE1ICs3OTYsMTkgQEAKIAlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CiAKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JaW50IHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisJbG9uZyB2YWw7CiAKLQlpZiAodmFsIDwgMCB8fCB2YWwgPiAyNTUpCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCkgPCAwIHx8IHZhbCA8IDAgfHwgdmFsID4gMjU1KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQlkYXRhLT5tYW51YWxfcHdtX2N0bFtucl0gPSB2YWw7Ci0JaWYgKGRhdGEtPmZhbl9tYWluX2N0cmwgJiAoMSA8PCBucikpCi0JCWl0ODdfd3JpdGVfdmFsdWUoZGF0YSwgSVQ4N19SRUdfUFdNKG5yKSwgUFdNX1RPX1JFRyhkYXRhLT5tYW51YWxfcHdtX2N0bFtucl0pKTsKKwlkYXRhLT5wd21fZHV0eVtucl0gPSBQV01fVE9fUkVHKHZhbCk7CisJLyogSWYgd2UgYXJlIGluIG1hbnVhbCBtb2RlLCB3cml0ZSB0aGUgZHV0eSBjeWNsZSBpbW1lZGlhdGVseTsKKwkgKiBvdGhlcndpc2UsIGp1c3Qgc3RvcmUgaXQgZm9yIGxhdGVyIHVzZS4gKi8KKwlpZiAoIShkYXRhLT5wd21fY3RybFtucl0gJiAweDgwKSkgeworCQlkYXRhLT5wd21fY3RybFtucl0gPSBkYXRhLT5wd21fZHV0eVtucl07CisJCWl0ODdfd3JpdGVfdmFsdWUoZGF0YSwgSVQ4N19SRUdfUFdNKG5yKSwgZGF0YS0+cHdtX2N0cmxbbnJdKTsKKwl9CiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtNzA3LDkgKzgxNiwxMiBAQAogCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXVuc2lnbmVkIGxvbmcgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisJdW5zaWduZWQgbG9uZyB2YWw7CiAJaW50IGk7CiAKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qIFNlYXJjaCBmb3IgdGhlIG5lYXJlc3QgYXZhaWxhYmxlIGZyZXF1ZW5jeSAqLwogCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKIAkJaWYgKHZhbCA+IChwd21fZnJlcVtpXSArIHB3bV9mcmVxW2krMV0pIC8gMikKQEAgLTcyNCw2ICs4MzYsMTMyIEBACiAKIAlyZXR1cm4gY291bnQ7CiB9CitzdGF0aWMgc3NpemVfdCBzaG93X3B3bV90ZW1wX21hcChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisKKwlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gaXQ4N191cGRhdGVfZGV2aWNlKGRldik7CisJaW50IG1hcDsKKworCWlmIChkYXRhLT5wd21fdGVtcF9tYXBbbnJdIDwgMykKKwkJbWFwID0gMSA8PCBkYXRhLT5wd21fdGVtcF9tYXBbbnJdOworCWVsc2UKKwkJbWFwID0gMDsJCQkvKiBTaG91bGQgbmV2ZXIgaGFwcGVuICovCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIG1hcCk7Cit9CitzdGF0aWMgc3NpemVfdCBzZXRfcHdtX3RlbXBfbWFwKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29yX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OworCisJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWxvbmcgdmFsOworCXU4IHJlZzsKKworCS8qIFRoaXMgY2hlY2sgY2FuIGdvIGF3YXkgaWYgd2UgZXZlciBzdXBwb3J0IGF1dG9tYXRpYyBmYW4gc3BlZWQKKwkgICBjb250cm9sIG9uIG5ld2VyIGNoaXBzLiAqLworCWlmICghaGFzX29sZF9hdXRvcHdtKGRhdGEpKSB7CisJCWRldl9ub3RpY2UoZGV2LCAiTWFwcGluZyBjaGFuZ2UgZGlzYWJsZWQgZm9yIHNhZmV0eSByZWFzb25zXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSAoMSA8PCAwKToKKwkJcmVnID0gMHgwMDsKKwkJYnJlYWs7CisJY2FzZSAoMSA8PCAxKToKKwkJcmVnID0gMHgwMTsKKwkJYnJlYWs7CisJY2FzZSAoMSA8PCAyKToKKwkJcmVnID0gMHgwMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnB3bV90ZW1wX21hcFtucl0gPSByZWc7CisJLyogSWYgd2UgYXJlIGluIGF1dG9tYXRpYyBtb2RlLCB3cml0ZSB0aGUgdGVtcCBtYXBwaW5nIGltbWVkaWF0ZWx5OworCSAqIG90aGVyd2lzZSwganVzdCBzdG9yZSBpdCBmb3IgbGF0ZXIgdXNlLiAqLworCWlmIChkYXRhLT5wd21fY3RybFtucl0gJiAweDgwKSB7CisJCWRhdGEtPnB3bV9jdHJsW25yXSA9IDB4ODAgfCBkYXRhLT5wd21fdGVtcF9tYXBbbnJdOworCQlpdDg3X3dyaXRlX3ZhbHVlKGRhdGEsIElUODdfUkVHX1BXTShuciksIGRhdGEtPnB3bV9jdHJsW25yXSk7CisJfQorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19hdXRvX3B3bShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGl0ODdfdXBkYXRlX2RldmljZShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzZW5zb3JfYXR0ciA9CisJCQl0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+bnI7CisJaW50IHBvaW50ID0gc2Vuc29yX2F0dHItPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIFBXTV9GUk9NX1JFRyhkYXRhLT5hdXRvX3B3bVtucl1bcG9pbnRdKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9hdXRvX3B3bShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNlbnNvcl9hdHRyID0KKwkJCXRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5ucjsKKwlpbnQgcG9pbnQgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJbG9uZyB2YWw7CisKKwlpZiAoc3RyaWN0X3N0cnRvbChidWYsIDEwLCAmdmFsKSA8IDAgfHwgdmFsIDwgMCB8fCB2YWwgPiAyNTUpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPmF1dG9fcHdtW25yXVtwb2ludF0gPSBQV01fVE9fUkVHKHZhbCk7CisJaXQ4N193cml0ZV92YWx1ZShkYXRhLCBJVDg3X1JFR19BVVRPX1BXTShuciwgcG9pbnQpLAorCQkJIGRhdGEtPmF1dG9fcHdtW25yXVtwb2ludF0pOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19hdXRvX3RlbXAoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBpdDg3X3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2Vuc29yX2F0dHIgPQorCQkJdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPm5yOworCWludCBwb2ludCA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QX0ZST01fUkVHKGRhdGEtPmF1dG9fdGVtcFtucl1bcG9pbnRdKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9hdXRvX3RlbXAoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzZW5zb3JfYXR0ciA9CisJCQl0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+bnI7CisJaW50IHBvaW50ID0gc2Vuc29yX2F0dHItPmluZGV4OworCWxvbmcgdmFsOworCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCkgPCAwIHx8IHZhbCA8IC0xMjgwMDAgfHwgdmFsID4gMTI3MDAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlkYXRhLT5hdXRvX3RlbXBbbnJdW3BvaW50XSA9IFRFTVBfVE9fUkVHKHZhbCk7CisJaXQ4N193cml0ZV92YWx1ZShkYXRhLCBJVDg3X1JFR19BVVRPX1RFTVAobnIsIHBvaW50KSwKKwkJCSBkYXRhLT5hdXRvX3RlbXBbbnJdW3BvaW50XSk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQogCiAjZGVmaW5lIHNob3dfZmFuX29mZnNldChvZmZzZXQpCQkJCQlcCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbiMjb2Zmc2V0IyNfaW5wdXQsIFNfSVJVR08sCQlcCkBAIC03NDQsNyArOTgyLDM2IEBACiAJCXNob3dfcHdtLCBzZXRfcHdtLCBvZmZzZXQgLSAxKTsJCQkJXAogc3RhdGljIERFVklDRV9BVFRSKHB3bSMjb2Zmc2V0IyNfZnJlcSwJCQkJCVwKIAkJKG9mZnNldCA9PSAxID8gU19JUlVHTyB8IFNfSVdVU1IgOiBTX0lSVUdPKSwJCVwKLQkJc2hvd19wd21fZnJlcSwgKG9mZnNldCA9PSAxID8gc2V0X3B3bV9mcmVxIDogTlVMTCkpOworCQlzaG93X3B3bV9mcmVxLCAob2Zmc2V0ID09IDEgPyBzZXRfcHdtX2ZyZXEgOiBOVUxMKSk7CVwKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtIyNvZmZzZXQjI19hdXRvX2NoYW5uZWxzX3RlbXAsCQlcCisJCVNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3B3bV90ZW1wX21hcCwgc2V0X3B3bV90ZW1wX21hcCwJXAorCQlvZmZzZXQgLSAxKTsJCQkJCQlcCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtIyNvZmZzZXQjI19hdXRvX3BvaW50MV9wd20sCQlcCisJCVNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2F1dG9fcHdtLCBzZXRfYXV0b19wd20sCQlcCisJCW9mZnNldCAtIDEsIDApOwkJCQkJCVwKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20jI29mZnNldCMjX2F1dG9fcG9pbnQyX3B3bSwJCVwKKwkJU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYXV0b19wd20sIHNldF9hdXRvX3B3bSwJCVwKKwkJb2Zmc2V0IC0gMSwgMSk7CQkJCQkJXAorc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bSMjb2Zmc2V0IyNfYXV0b19wb2ludDNfcHdtLAkJXAorCQlTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19hdXRvX3B3bSwgc2V0X2F1dG9fcHdtLAkJXAorCQlvZmZzZXQgLSAxLCAyKTsJCQkJCQlcCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtIyNvZmZzZXQjI19hdXRvX3BvaW50NF9wd20sCQlcCisJCVNfSVJVR08sIHNob3dfYXV0b19wd20sIE5VTEwsIG9mZnNldCAtIDEsIDMpOwkJXAorc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bSMjb2Zmc2V0IyNfYXV0b19wb2ludDFfdGVtcCwJCVwKKwkJU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYXV0b190ZW1wLCBzZXRfYXV0b190ZW1wLAlcCisJCW9mZnNldCAtIDEsIDEpOwkJCQkJCVwKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20jI29mZnNldCMjX2F1dG9fcG9pbnQxX3RlbXBfaHlzdCwJXAorCQlTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19hdXRvX3RlbXAsIHNldF9hdXRvX3RlbXAsCVwKKwkJb2Zmc2V0IC0gMSwgMCk7CQkJCQkJXAorc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHB3bSMjb2Zmc2V0IyNfYXV0b19wb2ludDJfdGVtcCwJCVwKKwkJU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYXV0b190ZW1wLCBzZXRfYXV0b190ZW1wLAlcCisJCW9mZnNldCAtIDEsIDIpOwkJCQkJCVwKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihwd20jI29mZnNldCMjX2F1dG9fcG9pbnQzX3RlbXAsCQlcCisJCVNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2F1dG9fdGVtcCwgc2V0X2F1dG9fdGVtcCwJXAorCQlvZmZzZXQgLSAxLCAzKTsJCQkJCQlcCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIocHdtIyNvZmZzZXQjI19hdXRvX3BvaW50NF90ZW1wLAkJXAorCQlTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19hdXRvX3RlbXAsIHNldF9hdXRvX3RlbXAsCVwKKwkJb2Zmc2V0IC0gMSwgNCk7CiAKIHNob3dfcHdtX29mZnNldCgxKTsKIHNob3dfcHdtX29mZnNldCgyKTsKQEAgLTc3NSw3ICsxMDQyLDEwIEBACiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKIAlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CiAJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOworCWxvbmcgdmFsOworCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlkYXRhLT5mYW5fbWluW25yXSA9IEZBTjE2X1RPX1JFRyh2YWwpOwpAQCAtODA1LDcgKzEwNzUsOCBAQAogc2hvd19mYW4xNl9vZmZzZXQoNSk7CiAKIC8qIEFsYXJtcyAqLwotc3RhdGljIHNzaXplX3Qgc2hvd19hbGFybXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19hbGFybXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmKQogewogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBpdDg3X3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgZGF0YS0+YWxhcm1zKTsKQEAgLTgzNiwyNyArMTEwNyw3OCBAQAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMTcpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMTgpOwogCi1zdGF0aWMgc3NpemVfdAotc2hvd192cm1fcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfYmVlcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYpCit7CisJaW50IGJpdG5yID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpLT5pbmRleDsKKwlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gaXQ4N191cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIChkYXRhLT5iZWVwcyA+PiBiaXRucikgJiAxKTsKK30KK3N0YXRpYyBzc2l6ZV90IHNldF9iZWVwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCBiaXRuciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKS0+aW5kZXg7CisJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWxvbmcgdmFsOworCisJaWYgKHN0cmljdF9zdHJ0b2woYnVmLCAxMCwgJnZhbCkgPCAwCisJIHx8ICh2YWwgIT0gMCAmJiB2YWwgIT0gMSkpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPmJlZXBzID0gaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX0JFRVBfRU5BQkxFKTsKKwlpZiAodmFsKQorCQlkYXRhLT5iZWVwcyB8PSAoMSA8PCBiaXRucik7CisJZWxzZQorCQlkYXRhLT5iZWVwcyAmPSB+KDEgPDwgYml0bnIpOworCWl0ODdfd3JpdGVfdmFsdWUoZGF0YSwgSVQ4N19SRUdfQkVFUF9FTkFCTEUsIGRhdGEtPmJlZXBzKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4wX2JlZXAsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJICBzaG93X2JlZXAsIHNldF9iZWVwLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xX2JlZXAsIFNfSVJVR08sIHNob3dfYmVlcCwgTlVMTCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluMl9iZWVwLCBTX0lSVUdPLCBzaG93X2JlZXAsIE5VTEwsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjNfYmVlcCwgU19JUlVHTywgc2hvd19iZWVwLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW40X2JlZXAsIFNfSVJVR08sIHNob3dfYmVlcCwgTlVMTCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluNV9iZWVwLCBTX0lSVUdPLCBzaG93X2JlZXAsIE5VTEwsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjZfYmVlcCwgU19JUlVHTywgc2hvd19iZWVwLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW43X2JlZXAsIFNfSVJVR08sIHNob3dfYmVlcCwgTlVMTCwgMSk7CisvKiBmYW5YX2JlZXAgd3JpdGFiaWxpdHkgaXMgc2V0IGxhdGVyICovCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjFfYmVlcCwgU19JUlVHTywgc2hvd19iZWVwLCBzZXRfYmVlcCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjJfYmVlcCwgU19JUlVHTywgc2hvd19iZWVwLCBzZXRfYmVlcCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjNfYmVlcCwgU19JUlVHTywgc2hvd19iZWVwLCBzZXRfYmVlcCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjRfYmVlcCwgU19JUlVHTywgc2hvd19iZWVwLCBzZXRfYmVlcCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjVfYmVlcCwgU19JUlVHTywgc2hvd19iZWVwLCBzZXRfYmVlcCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX2JlZXAsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJICBzaG93X2JlZXAsIHNldF9iZWVwLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfYmVlcCwgU19JUlVHTywgc2hvd19iZWVwLCBOVUxMLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfYmVlcCwgU19JUlVHTywgc2hvd19iZWVwLCBOVUxMLCAyKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd192cm1fcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGRhdGEtPnZybSk7CiB9Ci1zdGF0aWMgc3NpemVfdAotc3RvcmVfdnJtX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX3ZybV9yZWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXUzMiB2YWw7CisJdW5zaWduZWQgbG9uZyB2YWw7CiAKLQl2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKwlpZiAoc3RyaWN0X3N0cnRvdWwoYnVmLCAxMCwgJnZhbCkgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWRhdGEtPnZybSA9IHZhbDsKIAogCXJldHVybiBjb3VudDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUih2cm0sIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3ZybV9yZWcsIHN0b3JlX3ZybV9yZWcpOwogCi1zdGF0aWMgc3NpemVfdAotc2hvd192aWRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNob3dfdmlkX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYpCiB7CiAJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGl0ODdfdXBkYXRlX2RldmljZShkZXYpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgKGxvbmcpIHZpZF9mcm9tX3JlZyhkYXRhLT52aWQsIGRhdGEtPnZybSkpOwpAQCAtOTMxLDUxICsxMjUzLDE3NiBAQAogCS5hdHRycyA9IGl0ODdfYXR0cmlidXRlcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICppdDg3X2F0dHJpYnV0ZXNfb3B0W10gPSB7CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaXQ4N19hdHRyaWJ1dGVzX2JlZXBbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX2luMF9iZWVwLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfYmVlcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX2JlZXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luM19iZWVwLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfYmVlcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW41X2JlZXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNl9iZWVwLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjdfYmVlcC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9iZWVwLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9iZWVwLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19iZWVwLmRldl9hdHRyLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaXQ4N19ncm91cF9iZWVwID0geworCS5hdHRycyA9IGl0ODdfYXR0cmlidXRlc19iZWVwLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKml0ODdfYXR0cmlidXRlc19mYW4xNls1XVszKzFdID0geyB7CiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2lucHV0MTYuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluMTYuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9LCB7CiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0MTYuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfbWluMTYuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9LCB7CiAJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2lucHV0MTYuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfbWluMTYuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9LCB7CiAJJnNlbnNvcl9kZXZfYXR0cl9mYW40X2lucHV0MTYuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjRfbWluMTYuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9LCB7CiAJJnNlbnNvcl9kZXZfYXR0cl9mYW41X2lucHV0MTYuZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjVfbWluMTYuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjVfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9IH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGl0ODdfZ3JvdXBfZmFuMTZbNV0gPSB7CisJeyAuYXR0cnMgPSBpdDg3X2F0dHJpYnV0ZXNfZmFuMTZbMF0gfSwKKwl7IC5hdHRycyA9IGl0ODdfYXR0cmlidXRlc19mYW4xNlsxXSB9LAorCXsgLmF0dHJzID0gaXQ4N19hdHRyaWJ1dGVzX2ZhbjE2WzJdIH0sCisJeyAuYXR0cnMgPSBpdDg3X2F0dHJpYnV0ZXNfZmFuMTZbM10gfSwKKwl7IC5hdHRycyA9IGl0ODdfYXR0cmlidXRlc19mYW4xNls0XSB9LAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKml0ODdfYXR0cmlidXRlc19mYW5bM11bNCsxXSA9IHsgewogCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9taW4uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfZGl2LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJTlVMTAorfSwgewogCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9taW4uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfZGl2LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJTlVMTAorfSwgewogCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19pbnB1dC5kZXZfYXR0ci5hdHRyLAogCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19taW4uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfZGl2LmRldl9hdHRyLmF0dHIsCi0KLQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfYWxhcm0uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfYWxhcm0uZGV2X2F0dHIuYXR0ciwKIAkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfYWxhcm0uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjVfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9IH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGl0ODdfZ3JvdXBfZmFuWzNdID0geworCXsgLmF0dHJzID0gaXQ4N19hdHRyaWJ1dGVzX2ZhblswXSB9LAorCXsgLmF0dHJzID0gaXQ4N19hdHRyaWJ1dGVzX2ZhblsxXSB9LAorCXsgLmF0dHJzID0gaXQ4N19hdHRyaWJ1dGVzX2ZhblsyXSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKgoraXQ4N19nZXRfZmFuX2dyb3VwKGNvbnN0IHN0cnVjdCBpdDg3X2RhdGEgKmRhdGEpCit7CisJcmV0dXJuIGhhc18xNmJpdF9mYW5zKGRhdGEpID8gaXQ4N19ncm91cF9mYW4xNiA6IGl0ODdfZ3JvdXBfZmFuOworfQorCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaXQ4N19hdHRyaWJ1dGVzX3B3bVszXVs0KzFdID0geyB7CiAJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAotCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9lbmFibGUuZGV2X2F0dHIuYXR0ciwKLQkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfZW5hYmxlLmRldl9hdHRyLmF0dHIsCiAJJnNlbnNvcl9kZXZfYXR0cl9wd20xLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9wd20yLmRldl9hdHRyLmF0dHIsCi0JJnNlbnNvcl9kZXZfYXR0cl9wd20zLmRldl9hdHRyLmF0dHIsCiAJJmRldl9hdHRyX3B3bTFfZnJlcS5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX2NoYW5uZWxzX3RlbXAuZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9LCB7CisJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMi5kZXZfYXR0ci5hdHRyLAogCSZkZXZfYXR0cl9wd20yX2ZyZXEuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19jaGFubmVsc190ZW1wLmRldl9hdHRyLmF0dHIsCisJTlVMTAorfSwgeworCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19lbmFibGUuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTMuZGV2X2F0dHIuYXR0ciwKIAkmZGV2X2F0dHJfcHdtM19mcmVxLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2F1dG9fY2hhbm5lbHNfdGVtcC5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK30gfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaXQ4N19ncm91cF9wd21bM10gPSB7CisJeyAuYXR0cnMgPSBpdDg3X2F0dHJpYnV0ZXNfcHdtWzBdIH0sCisJeyAuYXR0cnMgPSBpdDg3X2F0dHJpYnV0ZXNfcHdtWzFdIH0sCisJeyAuYXR0cnMgPSBpdDg3X2F0dHJpYnV0ZXNfcHdtWzJdIH0sCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaXQ4N19hdHRyaWJ1dGVzX2F1dG9wd21bM11bOSsxXSA9IHsgeworCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3BvaW50MV9wd20uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDJfcHdtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQzX3B3bS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3BvaW50NF9wd20uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDFfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3BvaW50MV90ZW1wX2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfYXV0b19wb2ludDJfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9hdXRvX3BvaW50M190ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20xX2F1dG9fcG9pbnQ0X3RlbXAuZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9LCB7CisJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQxX3B3bS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX3BvaW50Ml9wd20uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19wb2ludDNfcHdtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQ0X3B3bS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX3BvaW50MV90ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQxX3RlbXBfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9hdXRvX3BvaW50Ml90ZW1wLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2F1dG9fcG9pbnQzX3RlbXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfYXV0b19wb2ludDRfdGVtcC5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK30sIHsKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19wb2ludDFfcHdtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2F1dG9fcG9pbnQyX3B3bS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX3BvaW50M19wd20uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19wb2ludDRfcHdtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2F1dG9fcG9pbnQxX3RlbXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19wb2ludDFfdGVtcF9oeXN0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20zX2F1dG9fcG9pbnQyX3RlbXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfYXV0b19wb2ludDNfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19hdXRvX3BvaW50NF90ZW1wLmRldl9hdHRyLmF0dHIsCisJTlVMTAorfSB9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpdDg3X2dyb3VwX2F1dG9wd21bM10gPSB7CisJeyAuYXR0cnMgPSBpdDg3X2F0dHJpYnV0ZXNfYXV0b3B3bVswXSB9LAorCXsgLmF0dHJzID0gaXQ4N19hdHRyaWJ1dGVzX2F1dG9wd21bMV0gfSwKKwl7IC5hdHRycyA9IGl0ODdfYXR0cmlidXRlc19hdXRvcHdtWzJdIH0sCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaXQ4N19hdHRyaWJ1dGVzX2Zhbl9iZWVwW10gPSB7CisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2JlZXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfYmVlcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19iZWVwLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW40X2JlZXAuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjVfYmVlcC5kZXZfYXR0ci5hdHRyLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKml0ODdfYXR0cmlidXRlc192aWRbXSA9IHsKIAkmZGV2X2F0dHJfdnJtLmF0dHIsCiAJJmRldl9hdHRyX2NwdTBfdmlkLmF0dHIsCiAJTlVMTAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaXQ4N19ncm91cF9vcHQgPSB7Ci0JLmF0dHJzID0gaXQ4N19hdHRyaWJ1dGVzX29wdCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGl0ODdfZ3JvdXBfdmlkID0geworCS5hdHRycyA9IGl0ODdfYXR0cmlidXRlc192aWQsCiB9OwogCiAvKiBTdXBlcklPIGRldGVjdGlvbiAtIHdpbGwgY2hhbmdlIGlzYV9hZGRyZXNzIGlmIGEgY2hpcCBpcyBmb3VuZCAqLwpAQCAtMTAzNSw2ICsxNDgyLDEwIEBACiAJaWYgKHNpb19kYXRhLT50eXBlID09IGl0ODcpIHsKIAkJLyogVGhlIElUODcwNUYgZG9lc24ndCBoYXZlIFZJRCBwaW5zIGF0IGFsbCAqLwogCQlzaW9fZGF0YS0+c2tpcF92aWQgPSAxOworCisJCS8qIFRoZSBJVDg3MDVGIGhhcyBhIGRpZmZlcmVudCBMRCBudW1iZXIgZm9yIEdQSU8gKi8KKwkJc3VwZXJpb19zZWxlY3QoNSk7CisJCXNpb19kYXRhLT5iZWVwX3BpbiA9IHN1cGVyaW9faW5iKElUODdfU0lPX0JFRVBfUElOX1JFRykgJiAweDNmOwogCX0gZWxzZSB7CiAJCWludCByZWc7CiAKQEAgLTEwNjgsNyArMTUxOSwxMSBAQAogCQkJcHJfaW5mbygiaXQ4NzogaW4zIGlzIFZDQyAoKzVWKVxuIik7CiAJCWlmIChyZWcgJiAoMSA8PCAxKSkKIAkJCXByX2luZm8oIml0ODc6IGluNyBpcyBWQ0NIICgrNVYgU3RhbmQtQnkpXG4iKTsKKworCQlzaW9fZGF0YS0+YmVlcF9waW4gPSBzdXBlcmlvX2luYihJVDg3X1NJT19CRUVQX1BJTl9SRUcpICYgMHgzZjsKIAl9CisJaWYgKHNpb19kYXRhLT5iZWVwX3BpbikKKwkJcHJfaW5mbygiaXQ4NzogQmVlcGluZyBpcyBzdXBwb3J0ZWRcbiIpOwogCiAJLyogRGlzYWJsZSBzcGVjaWZpYyBmZWF0dXJlcyBiYXNlZCBvbiBETUkgc3RyaW5ncyAqLwogCWJvYXJkX3ZlbmRvciA9IGRtaV9nZXRfc3lzdGVtX2luZm8oRE1JX0JPQVJEX1ZFTkRPUik7CkBAIC0xMDkzLDE0ICsxNTQ4LDQ2IEBACiAJcmV0dXJuIGVycjsKIH0KIAorc3RhdGljIHZvaWQgaXQ4N19yZW1vdmVfZmlsZXMoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgaXQ4N19zaW9fZGF0YSAqc2lvX2RhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZmFuX2dyb3VwID0gaXQ4N19nZXRfZmFuX2dyb3VwKGRhdGEpOworCWludCBpOworCisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZpdDg3X2dyb3VwKTsKKwlpZiAoc2lvX2RhdGEtPmJlZXBfcGluKQorCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJml0ODdfZ3JvdXBfYmVlcCk7CisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlpZiAoIShkYXRhLT5oYXNfZmFuICYgKDEgPDwgaSkpKQorCQkJY29udGludWU7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmZmFuX2dyb3VwW2ldKTsKKwkJaWYgKHNpb19kYXRhLT5iZWVwX3BpbikKKwkJCXN5c2ZzX3JlbW92ZV9maWxlKCZkZXYtPmtvYmosCisJCQkJCSAgaXQ4N19hdHRyaWJ1dGVzX2Zhbl9iZWVwW2ldKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlpZiAoc2lvX2RhdGEtPnNraXBfcHdtICYgKDEgPDwgMCkpCisJCQljb250aW51ZTsKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZpdDg3X2dyb3VwX3B3bVtpXSk7CisJCWlmIChoYXNfb2xkX2F1dG9wd20oZGF0YSkpCisJCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwKKwkJCQkJICAgJml0ODdfZ3JvdXBfYXV0b3B3bVtpXSk7CisJfQorCWlmICghc2lvX2RhdGEtPnNraXBfdmlkKQorCQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJml0ODdfZ3JvdXBfdmlkKTsKK30KKwogc3RhdGljIGludCBfX2RldmluaXQgaXQ4N19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGE7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKIAlzdHJ1Y3QgaXQ4N19zaW9fZGF0YSAqc2lvX2RhdGEgPSBkZXYtPnBsYXRmb3JtX2RhdGE7Ci0JaW50IGVyciA9IDA7CisJY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZmFuX2dyb3VwOworCWludCBlcnIgPSAwLCBpOwogCWludCBlbmFibGVfcHdtX2ludGVyZmFjZTsKKwlpbnQgZmFuX2JlZXBfbmVlZF9ydzsKIAlzdGF0aWMgY29uc3QgY2hhciAqbmFtZXNbXSA9IHsKIAkJIml0ODciLAogCQkiaXQ4NzEyIiwKQEAgLTExMTgsNyArMTYwNSw4IEBACiAJCWdvdG8gRVJST1IwOwogCX0KIAotCWlmICghKGRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXQ4N19kYXRhKSwgR0ZQX0tFUk5FTCkpKSB7CisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpdDg3X2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBFUlJPUjE7CiAJfQpAQCAtMTE0NiwxMjAgKzE2MzQsNjAgQEAKIAlpdDg3X2luaXRfZGV2aWNlKHBkZXYpOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KLQlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmaXQ4N19ncm91cCkpKQorCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmaXQ4N19ncm91cCk7CisJaWYgKGVycikKIAkJZ290byBFUlJPUjI7CiAKKwlpZiAoc2lvX2RhdGEtPmJlZXBfcGluKSB7CisJCWVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmaXQ4N19ncm91cF9iZWVwKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gRVJST1I0OworCX0KKwogCS8qIERvIG5vdCBjcmVhdGUgZmFuIGZpbGVzIGZvciBkaXNhYmxlZCBmYW5zICovCi0JaWYgKGhhc18xNmJpdF9mYW5zKGRhdGEpKSB7Ci0JCS8qIDE2LWJpdCB0YWNob21ldGVycyAqLwotCQlpZiAoZGF0YS0+aGFzX2ZhbiAmICgxIDw8IDApKSB7Ci0JCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuMV9pbnB1dDE2LmRldl9hdHRyKSkKLQkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4xX21pbjE2LmRldl9hdHRyKSkKLQkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2FsYXJtLmRldl9hdHRyKSkpCisJZmFuX2dyb3VwID0gaXQ4N19nZXRfZmFuX2dyb3VwKGRhdGEpOworCWZhbl9iZWVwX25lZWRfcncgPSAxOworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJaWYgKCEoZGF0YS0+aGFzX2ZhbiAmICgxIDw8IGkpKSkKKwkJCWNvbnRpbnVlOworCQllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJmZhbl9ncm91cFtpXSk7CisJCWlmIChlcnIpCisJCQlnb3RvIEVSUk9SNDsKKworCQlpZiAoc2lvX2RhdGEtPmJlZXBfcGluKSB7CisJCQllcnIgPSBzeXNmc19jcmVhdGVfZmlsZSgmZGV2LT5rb2JqLAorCQkJCQkJaXQ4N19hdHRyaWJ1dGVzX2Zhbl9iZWVwW2ldKTsKKwkJCWlmIChlcnIpCiAJCQkJZ290byBFUlJPUjQ7Ci0JCX0KLQkJaWYgKGRhdGEtPmhhc19mYW4gJiAoMSA8PCAxKSkgewotCQkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfaW5wdXQxNi5kZXZfYXR0cikpCi0JCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuMl9taW4xNi5kZXZfYXR0cikpCi0JCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuMl9hbGFybS5kZXZfYXR0cikpKQotCQkJCWdvdG8gRVJST1I0OwotCQl9Ci0JCWlmIChkYXRhLT5oYXNfZmFuICYgKDEgPDwgMikpIHsKLQkJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2lucHV0MTYuZGV2X2F0dHIpKQotCQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfbWluMTYuZGV2X2F0dHIpKQotCQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfYWxhcm0uZGV2X2F0dHIpKSkKLQkJCQlnb3RvIEVSUk9SNDsKLQkJfQotCQlpZiAoZGF0YS0+aGFzX2ZhbiAmICgxIDw8IDMpKSB7Ci0JCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuNF9pbnB1dDE2LmRldl9hdHRyKSkKLQkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW40X21pbjE2LmRldl9hdHRyKSkKLQkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW40X2FsYXJtLmRldl9hdHRyKSkpCi0JCQkJZ290byBFUlJPUjQ7Ci0JCX0KLQkJaWYgKGRhdGEtPmhhc19mYW4gJiAoMSA8PCA0KSkgewotCQkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjVfaW5wdXQxNi5kZXZfYXR0cikpCi0JCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuNV9taW4xNi5kZXZfYXR0cikpCi0JCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuNV9hbGFybS5kZXZfYXR0cikpKQotCQkJCWdvdG8gRVJST1I0OwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogOC1iaXQgdGFjaG9tZXRlcnMgd2l0aCBjbG9jayBkaXZpZGVyICovCi0JCWlmIChkYXRhLT5oYXNfZmFuICYgKDEgPDwgMCkpIHsKLQkJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2lucHV0LmRldl9hdHRyKSkKLQkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4xX21pbi5kZXZfYXR0cikpCi0JCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuMV9kaXYuZGV2X2F0dHIpKQotCQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfYWxhcm0uZGV2X2F0dHIpKSkKLQkJCQlnb3RvIEVSUk9SNDsKLQkJfQotCQlpZiAoZGF0YS0+aGFzX2ZhbiAmICgxIDw8IDEpKSB7Ci0JCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuMl9pbnB1dC5kZXZfYXR0cikpCi0JCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuMl9taW4uZGV2X2F0dHIpKQotCQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfZGl2LmRldl9hdHRyKSkKLQkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2FsYXJtLmRldl9hdHRyKSkpCi0JCQkJZ290byBFUlJPUjQ7Ci0JCX0KLQkJaWYgKGRhdGEtPmhhc19mYW4gJiAoMSA8PCAyKSkgewotCQkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfaW5wdXQuZGV2X2F0dHIpKQotCQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfbWluLmRldl9hdHRyKSkKLQkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2Rpdi5kZXZfYXR0cikpCi0JCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuM19hbGFybS5kZXZfYXR0cikpKQotCQkJCWdvdG8gRVJST1I0OworCQkJaWYgKCFmYW5fYmVlcF9uZWVkX3J3KQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBBcyB3ZSBoYXZlIGEgc2luZ2xlIGJlZXAgZW5hYmxlIGJpdCBmb3IgYWxsIGZhbnMsCisJCQkgKiBvbmx5IHRoZSBmaXJzdCBlbmFibGVkIGZhbiBoYXMgYSB3cml0YWJsZSBhdHRyaWJ1dGUKKwkJCSAqIGZvciBpdC4gKi8KKwkJCWlmIChzeXNmc19jaG1vZF9maWxlKCZkZXYtPmtvYmosCisJCQkJCSAgICAgaXQ4N19hdHRyaWJ1dGVzX2Zhbl9iZWVwW2ldLAorCQkJCQkgICAgIFNfSVJVR08gfCBTX0lXVVNSKSkKKwkJCQlkZXZfZGJnKGRldiwgImNobW9kICt3IGZhbiVkX2JlZXAgZmFpbGVkXG4iLAorCQkJCQlpICsgMSk7CisJCQlmYW5fYmVlcF9uZWVkX3J3ID0gMDsKIAkJfQogCX0KIAogCWlmIChlbmFibGVfcHdtX2ludGVyZmFjZSkgewotCQlpZiAoIShzaW9fZGF0YS0+c2tpcF9wd20gJiAoMSA8PCAwKSkpIHsKLQkJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9wd20xX2VuYWJsZS5kZXZfYXR0cikpCi0JCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfcHdtMS5kZXZfYXR0cikpCi0JCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZkZXZfYXR0cl9wd20xX2ZyZXEpKSkKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQkJaWYgKHNpb19kYXRhLT5za2lwX3B3bSAmICgxIDw8IGkpKQorCQkJCWNvbnRpbnVlOworCQkJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCisJCQkJCQkgJml0ODdfZ3JvdXBfcHdtW2ldKTsKKwkJCWlmIChlcnIpCiAJCQkJZ290byBFUlJPUjQ7Ci0JCX0KLQkJaWYgKCEoc2lvX2RhdGEtPnNraXBfcHdtICYgKDEgPDwgMSkpKSB7Ci0JCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfcHdtMl9lbmFibGUuZGV2X2F0dHIpKQotCQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX3B3bTIuZGV2X2F0dHIpKQotCQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmZGV2X2F0dHJfcHdtMl9mcmVxKSkpCi0JCQkJZ290byBFUlJPUjQ7Ci0JCX0KLQkJaWYgKCEoc2lvX2RhdGEtPnNraXBfcHdtICYgKDEgPDwgMikpKSB7Ci0JCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfcHdtM19lbmFibGUuZGV2X2F0dHIpKQotCQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX3B3bTMuZGV2X2F0dHIpKQotCQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAotCQkJICAgICAmZGV2X2F0dHJfcHdtM19mcmVxKSkpCisKKwkJCWlmICghaGFzX29sZF9hdXRvcHdtKGRhdGEpKQorCQkJCWNvbnRpbnVlOworCQkJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCisJCQkJCQkgJml0ODdfZ3JvdXBfYXV0b3B3bVtpXSk7CisJCQlpZiAoZXJyKQogCQkJCWdvdG8gRVJST1I0OwogCQl9CiAJfQpAQCAtMTI2OCwxMCArMTY5Niw4IEBACiAJCWRhdGEtPnZybSA9IHZpZF93aGljaF92cm0oKTsKIAkJLyogVklEIHJlYWRpbmcgZnJvbSBTdXBlci1JL08gY29uZmlnIHNwYWNlIGlmIGF2YWlsYWJsZSAqLwogCQlkYXRhLT52aWQgPSBzaW9fZGF0YS0+dmlkX3ZhbHVlOwotCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCi0JCSAgICAgJmRldl9hdHRyX3ZybSkpCi0JCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKLQkJICAgICAmZGV2X2F0dHJfY3B1MF92aWQpKSkKKwkJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZpdDg3X2dyb3VwX3ZpZCk7CisJCWlmIChlcnIpCiAJCQlnb3RvIEVSUk9SNDsKIAl9CiAKQEAgLTEyODQsOCArMTcxMCw3IEBACiAJcmV0dXJuIDA7CiAKIEVSUk9SNDoKLQlzeXNmc19yZW1vdmVfZ3JvdXAoJmRldi0+a29iaiwgJml0ODdfZ3JvdXApOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmaXQ4N19ncm91cF9vcHQpOworCWl0ODdfcmVtb3ZlX2ZpbGVzKGRldik7CiBFUlJPUjI6CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJa2ZyZWUoZGF0YSk7CkBAIC0xMzAwLDggKzE3MjUsNyBAQAogCXN0cnVjdCBpdDg3X2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7Ci0Jc3lzZnNfcmVtb3ZlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwgJml0ODdfZ3JvdXApOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZpdDg3X2dyb3VwX29wdCk7CisJaXQ4N19yZW1vdmVfZmlsZXMoJnBkZXYtPmRldik7CiAKIAlyZWxlYXNlX3JlZ2lvbihkYXRhLT5hZGRyLCBJVDg3X0VDX0VYVEVOVCk7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CkBAIC0xMzg3LDE1ICsxODExLDE4IEBACiAJaW50IHRtcCwgaTsKIAl1OCBtYXNrOwogCi0JLyogaW5pdGlhbGl6ZSB0byBzYW5lIGRlZmF1bHRzOgotCSAqIC0gaWYgdGhlIGNoaXAgaXMgaW4gbWFudWFsIHB3bSBtb2RlLCB0aGlzIHdpbGwgYmUgb3ZlcndyaXR0ZW4gd2l0aAotCSAqICAgdGhlIGFjdHVhbCBzZXR0aW5ncyBvbiB0aGUgY2hpcCAoc28gaW4gdGhpcyBjYXNlLCBpbml0aWFsaXphdGlvbgotCSAqICAgaXMgbm90IG5lZWRlZCkKLQkgKiAtIGlmIGluIGF1dG9tYXRpYyBvciBvbi9vZmYgbW9kZSwgd2UgY291bGQgc3dpdGNoIHRvIG1hbnVhbCBtb2RlLAotCSAqICAgcmVhZCB0aGUgcmVnaXN0ZXJzIGFuZCBzZXQgbWFudWFsX3B3bV9jdGwgYWNjb3JkaW5nbHksIGJ1dCBjdXJyZW50bHkKLQkgKiAgIHRoaXMgaXMgbm90IGltcGxlbWVudGVkLCBzbyB3ZSBpbml0aWFsaXplIHRvIHNvbWV0aGluZyBzYW5lICovCisJLyogRm9yIGVhY2ggUFdNIGNoYW5uZWw6CisJICogLSBJZiBpdCBpcyBpbiBhdXRvbWF0aWMgbW9kZSwgc2V0dGluZyB0byBtYW51YWwgbW9kZSBzaG91bGQgc2V0CisJICogICB0aGUgZmFuIHRvIGZ1bGwgc3BlZWQgYnkgZGVmYXVsdC4KKwkgKiAtIElmIGl0IGlzIGluIG1hbnVhbCBtb2RlLCB3ZSBuZWVkIGEgbWFwcGluZyB0byB0ZW1wZXJhdHVyZQorCSAqICAgY2hhbm5lbHMgdG8gdXNlIHdoZW4gbGF0ZXIgc2V0dGluZyB0byBhdXRvbWF0aWMgbW9kZSBsYXRlci4KKwkgKiAgIFVzZSBhIDE6MSBtYXBwaW5nIGJ5IGRlZmF1bHQgKHdlIGFyZSBjbHVlbGVzcy4pCisJICogSW4gYm90aCBjYXNlcywgdGhlIHZhbHVlIGNhbiAoYW5kIHNob3VsZCkgYmUgY2hhbmdlZCBieSB0aGUgdXNlcgorCSAqIHByaW9yIHRvIHN3aXRjaGluZyB0byBhIGRpZmZlcmVudCBtb2RlLiAqLwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJZGF0YS0+bWFudWFsX3B3bV9jdGxbaV0gPSAweGZmOworCQlkYXRhLT5wd21fdGVtcF9tYXBbaV0gPSBpOworCQlkYXRhLT5wd21fZHV0eVtpXSA9IDB4N2Y7CS8qIEZ1bGwgc3BlZWQgKi8KKwkJZGF0YS0+YXV0b19wd21baV1bM10gPSAweDdmOwkvKiBGdWxsIHNwZWVkLCBoYXJkLWNvZGVkICovCiAJfQogCiAJLyogU29tZSBjaGlwcyBzZWVtIHRvIGhhdmUgZGVmYXVsdCB2YWx1ZSAweGZmIGZvciBhbGwgbGltaXQKQEAgLTE0MzYsNyArMTg2Myw4IEBACiAJaWYgKChkYXRhLT5mYW5fbWFpbl9jdHJsICYgbWFzaykgPT0gMCkgewogCQkvKiBFbmFibGUgYWxsIGZhbiB0YWNob21ldGVycyAqLwogCQlkYXRhLT5mYW5fbWFpbl9jdHJsIHw9IG1hc2s7Ci0JCWl0ODdfd3JpdGVfdmFsdWUoZGF0YSwgSVQ4N19SRUdfRkFOX01BSU5fQ1RSTCwgZGF0YS0+ZmFuX21haW5fY3RybCk7CisJCWl0ODdfd3JpdGVfdmFsdWUoZGF0YSwgSVQ4N19SRUdfRkFOX01BSU5fQ1RSTCwKKwkJCQkgZGF0YS0+ZmFuX21haW5fY3RybCk7CiAJfQogCWRhdGEtPmhhc19mYW4gPSAoZGF0YS0+ZmFuX21haW5fY3RybCA+PiA0KSAmIDB4MDc7CiAKQEAgLTE0NjEsMzAgKzE4ODksMzIgQEAKIAkvKiBGYW4gaW5wdXQgcGlucyBtYXkgYmUgdXNlZCBmb3IgYWx0ZXJuYXRpdmUgZnVuY3Rpb25zICovCiAJZGF0YS0+aGFzX2ZhbiAmPSB+c2lvX2RhdGEtPnNraXBfZmFuOwogCi0JLyogU2V0IGN1cnJlbnQgZmFuIG1vZGUgcmVnaXN0ZXJzIGFuZCB0aGUgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlCi0JICogb3RoZXIgbW9kZSByZWdpc3RlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCWlmIChkYXRhLT5mYW5fbWFpbl9jdHJsICYgKDEgPDwgaSkpIHsKLQkJCS8qIHB3bSBtb2RlICovCi0JCQl0bXAgPSBpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfUFdNKGkpKTsKLQkJCWlmICh0bXAgJiAweDgwKSB7Ci0JCQkJLyogYXV0b21hdGljIHB3bSAtIG5vdCB5ZXQgaW1wbGVtZW50ZWQsIGJ1dAotCQkJCSAqIGxlYXZlIHRoZSBzZXR0aW5ncyBtYWRlIGJ5IHRoZSBCSU9TIGFsb25lCi0JCQkJICogdW50aWwgYSBjaGFuZ2UgaXMgcmVxdWVzdGVkIHZpYSB0aGUgc3lzZnMKLQkJCQkgKiBpbnRlcmZhY2UgKi8KLQkJCX0gZWxzZSB7Ci0JCQkJLyogbWFudWFsIHB3bSAqLwotCQkJCWRhdGEtPm1hbnVhbF9wd21fY3RsW2ldID0gUFdNX0ZST01fUkVHKHRtcCk7Ci0JCQl9Ci0JCX0KLSAJfQotCiAJLyogU3RhcnQgbW9uaXRvcmluZyAqLwogCWl0ODdfd3JpdGVfdmFsdWUoZGF0YSwgSVQ4N19SRUdfQ09ORklHLAogCQkJIChpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfQ09ORklHKSAmIDB4MzYpCiAJCQkgfCAodXBkYXRlX3ZiYXQgPyAweDQxIDogMHgwMSkpOwogfQogCitzdGF0aWMgdm9pZCBpdDg3X3VwZGF0ZV9wd21fY3RybChzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhLCBpbnQgbnIpCit7CisJZGF0YS0+cHdtX2N0cmxbbnJdID0gaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX1BXTShucikpOworCWlmIChkYXRhLT5wd21fY3RybFtucl0gJiAweDgwKQkvKiBBdXRvbWF0aWMgbW9kZSAqLworCQlkYXRhLT5wd21fdGVtcF9tYXBbbnJdID0gZGF0YS0+cHdtX2N0cmxbbnJdICYgMHgwMzsKKwllbHNlCQkJCS8qIE1hbnVhbCBtb2RlICovCisJCWRhdGEtPnB3bV9kdXR5W25yXSA9IGRhdGEtPnB3bV9jdHJsW25yXSAmIDB4N2Y7CisKKwlpZiAoaGFzX29sZF9hdXRvcHdtKGRhdGEpKSB7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCA1IDsgaSsrKQorCQkJZGF0YS0+YXV0b190ZW1wW25yXVtpXSA9IGl0ODdfcmVhZF92YWx1ZShkYXRhLAorCQkJCQkJSVQ4N19SRUdfQVVUT19URU1QKG5yLCBpKSk7CisJCWZvciAoaSA9IDA7IGkgPCAzIDsgaSsrKQorCQkJZGF0YS0+YXV0b19wd21bbnJdW2ldID0gaXQ4N19yZWFkX3ZhbHVlKGRhdGEsCisJCQkJCQlJVDg3X1JFR19BVVRPX1BXTShuciwgaSkpOworCX0KK30KKwogc3RhdGljIHN0cnVjdCBpdDg3X2RhdGEgKml0ODdfdXBkYXRlX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtMTQ5NCwyNCArMTkyNCwyMiBAQAogCiAJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFogKyBIWiAvIDIpCiAJICAgIHx8ICFkYXRhLT52YWxpZCkgewotCiAJCWlmICh1cGRhdGVfdmJhdCkgewogCQkJLyogQ2xlYXJlZCBhZnRlciBlYWNoIHVwZGF0ZSwgc28gcmVlbmFibGUuICBWYWx1ZQotCQkgCSAgcmV0dXJuZWQgYnkgdGhpcyByZWFkIHdpbGwgYmUgcHJldmlvdXMgdmFsdWUgKi8JCisJCQkgICByZXR1cm5lZCBieSB0aGlzIHJlYWQgd2lsbCBiZSBwcmV2aW91cyB2YWx1ZSAqLwogCQkJaXQ4N193cml0ZV92YWx1ZShkYXRhLCBJVDg3X1JFR19DT05GSUcsCi0JCQkgICBpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfQ09ORklHKSB8IDB4NDApOworCQkJCWl0ODdfcmVhZF92YWx1ZShkYXRhLCBJVDg3X1JFR19DT05GSUcpIHwgMHg0MCk7CiAJCX0KIAkJZm9yIChpID0gMDsgaSA8PSA3OyBpKyspIHsKIAkJCWRhdGEtPmluW2ldID0KLQkJCSAgICBpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfVklOKGkpKTsKKwkJCQlpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfVklOKGkpKTsKIAkJCWRhdGEtPmluX21pbltpXSA9Ci0JCQkgICAgaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX1ZJTl9NSU4oaSkpOworCQkJCWl0ODdfcmVhZF92YWx1ZShkYXRhLCBJVDg3X1JFR19WSU5fTUlOKGkpKTsKIAkJCWRhdGEtPmluX21heFtpXSA9Ci0JCQkgICAgaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX1ZJTl9NQVgoaSkpOworCQkJCWl0ODdfcmVhZF92YWx1ZShkYXRhLCBJVDg3X1JFR19WSU5fTUFYKGkpKTsKIAkJfQogCQkvKiBpbjggKGJhdHRlcnkpIGhhcyBubyBsaW1pdCByZWdpc3RlcnMgKi8KLQkJZGF0YS0+aW5bOF0gPQotCQkgICAgaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX1ZJTig4KSk7CisJCWRhdGEtPmluWzhdID0gaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX1ZJTig4KSk7CiAKIAkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewogCQkJLyogU2tpcCBkaXNhYmxlZCBmYW5zICovCkBAIC0xNTE5LDcgKzE5NDcsNyBAQAogCQkJCWNvbnRpbnVlOwogCiAJCQlkYXRhLT5mYW5fbWluW2ldID0KLQkJCSAgICBpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfRkFOX01JTltpXSk7CisJCQkJaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX0ZBTl9NSU5baV0pOwogCQkJZGF0YS0+ZmFuW2ldID0gaXQ4N19yZWFkX3ZhbHVlKGRhdGEsCiAJCQkJICAgICAgIElUODdfUkVHX0ZBTltpXSk7CiAJCQkvKiBBZGQgaGlnaCBieXRlIGlmIGluIDE2LWJpdCBtb2RlICovCkBAIC0xNTMyLDExICsxOTYwLDExIEBACiAJCX0KIAkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewogCQkJZGF0YS0+dGVtcFtpXSA9Ci0JCQkgICAgaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX1RFTVAoaSkpOworCQkJCWl0ODdfcmVhZF92YWx1ZShkYXRhLCBJVDg3X1JFR19URU1QKGkpKTsKIAkJCWRhdGEtPnRlbXBfaGlnaFtpXSA9Ci0JCQkgICAgaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX1RFTVBfSElHSChpKSk7CisJCQkJaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX1RFTVBfSElHSChpKSk7CiAJCQlkYXRhLT50ZW1wX2xvd1tpXSA9Ci0JCQkgICAgaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX1RFTVBfTE9XKGkpKTsKKwkJCQlpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfVEVNUF9MT1coaSkpOwogCQl9CiAKIAkJLyogTmV3ZXIgY2hpcHMgZG9uJ3QgaGF2ZSBjbG9jayBkaXZpZGVycyAqLwpAQCAtMTU1MSw5ICsxOTc5LDEzIEBACiAJCQlpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfQUxBUk0xKSB8CiAJCQkoaXQ4N19yZWFkX3ZhbHVlKGRhdGEsIElUODdfUkVHX0FMQVJNMikgPDwgOCkgfAogCQkJKGl0ODdfcmVhZF92YWx1ZShkYXRhLCBJVDg3X1JFR19BTEFSTTMpIDw8IDE2KTsKKwkJZGF0YS0+YmVlcHMgPSBpdDg3X3JlYWRfdmFsdWUoZGF0YSwgSVQ4N19SRUdfQkVFUF9FTkFCTEUpOworCiAJCWRhdGEtPmZhbl9tYWluX2N0cmwgPSBpdDg3X3JlYWRfdmFsdWUoZGF0YSwKIAkJCQlJVDg3X1JFR19GQU5fTUFJTl9DVFJMKTsKIAkJZGF0YS0+ZmFuX2N0bCA9IGl0ODdfcmVhZF92YWx1ZShkYXRhLCBJVDg3X1JFR19GQU5fQ1RMKTsKKwkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCWl0ODdfdXBkYXRlX3B3bV9jdHJsKGRhdGEsIGkpOwogCiAJCWRhdGEtPnNlbnNvciA9IGl0ODdfcmVhZF92YWx1ZShkYXRhLCBJVDg3X1JFR19URU1QX0VOQUJMRSk7CiAJCS8qIFRoZSA4NzA1IGRvZXMgbm90IGhhdmUgVklEIGNhcGFiaWxpdHkuCkBAIC0xNjI4LDcgKzIwNjAsNyBAQAogc3RhdGljIGludCBfX2luaXQgc21faXQ4N19pbml0KHZvaWQpCiB7CiAJaW50IGVycjsKLQl1bnNpZ25lZCBzaG9ydCBpc2FfYWRkcmVzcz0wOworCXVuc2lnbmVkIHNob3J0IGlzYV9hZGRyZXNzID0gMDsKIAlzdHJ1Y3QgaXQ4N19zaW9fZGF0YSBzaW9fZGF0YTsKIAogCW1lbXNldCgmc2lvX2RhdGEsIDAsIHNpemVvZihzdHJ1Y3QgaXQ4N19zaW9fZGF0YSkpOwpAQCAtMTY0MCw3ICsyMDcyLDcgQEAKIAkJcmV0dXJuIGVycjsKIAogCWVyciA9IGl0ODdfZGV2aWNlX2FkZChpc2FfYWRkcmVzcywgJnNpb19kYXRhKTsKLQlpZiAoZXJyKXsKKwlpZiAoZXJyKSB7CiAJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpdDg3X2RyaXZlcik7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMTY2MSw3ICsyMDkzLDggQEAKIG1vZHVsZV9wYXJhbSh1cGRhdGVfdmJhdCwgYm9vbCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHVwZGF0ZV92YmF0LCAiVXBkYXRlIHZiYXQgaWYgc2V0IGVsc2UgcmV0dXJuIHBvd2VydXAgdmFsdWUiKTsKIG1vZHVsZV9wYXJhbShmaXhfcHdtX3BvbGFyaXR5LCBib29sLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoZml4X3B3bV9wb2xhcml0eSwgIkZvcmNlIFBXTSBwb2xhcml0eSB0byBhY3RpdmUgaGlnaCAoREFOR0VST1VTKSIpOworTU9EVUxFX1BBUk1fREVTQyhmaXhfcHdtX3BvbGFyaXR5LAorCQkgIkZvcmNlIFBXTSBwb2xhcml0eSB0byBhY3RpdmUgaGlnaCAoREFOR0VST1VTKSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfaW5pdChzbV9pdDg3X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTkwLmMgYi9kcml2ZXJzL2h3bW9uL2xtOTAuYwppbmRleCA3YzliZGMxLi43Y2MyNzA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtOTAuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtOTAuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBsbTkwLmMgLSBQYXJ0IG9mIGxtX3NlbnNvcnMsIExpbnV4IGtlcm5lbCBtb2R1bGVzIGZvciBoYXJkd2FyZQogICogICAgICAgICAgbW9uaXRvcmluZwotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMDkgIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTAgIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogICoKICAqIEJhc2VkIG9uIHRoZSBsbTgzIGRyaXZlci4gVGhlIExNOTAgaXMgYSBzZW5zb3IgY2hpcCBtYWRlIGJ5IE5hdGlvbmFsCiAgKiBTZW1pY29uZHVjdG9yLiBJdCByZXBvcnRzIHVwIHRvIHR3byB0ZW1wZXJhdHVyZXMgKGl0cyBvd24gcGx1cyB1cCB0bwpAQCAtOTMsNyArOTMsOCBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKIAkweDE4LCAweDE5LCAweDFhLCAweDI5LCAweDJhLCAweDJiLCAweDRjLCAweDRkLCAweDRlLCBJMkNfQ0xJRU5UX0VORCB9OwogCi1lbnVtIGNoaXBzIHsgbG05MCwgYWRtMTAzMiwgbG05OSwgbG04NiwgbWF4NjY1NywgYWR0NzQ2MSwgbWF4NjY4MCwgbWF4NjY0NiB9OworZW51bSBjaGlwcyB7IGxtOTAsIGFkbTEwMzIsIGxtOTksIGxtODYsIG1heDY2NTcsIGFkdDc0NjEsIG1heDY2ODAsIG1heDY2NDYsCisJdzgzbDc3MSB9OwogCiAvKgogICogVGhlIExNOTAgcmVnaXN0ZXJzCkBAIC0xNTEsNiArMTUyLDcgQEAKIHN0YXRpYyBpbnQgbG05MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkgICAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwogc3RhdGljIHZvaWQgbG05MF9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK3N0YXRpYyB2b2lkIGxtOTBfYWxlcnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGZsYWcpOwogc3RhdGljIGludCBsbTkwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKIHN0YXRpYyBzdHJ1Y3QgbG05MF9kYXRhICpsbTkwX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KTsKIApAQCAtMTczLDYgKzE3NSw3IEBACiAJeyAibWF4NjY1OSIsIG1heDY2NTcgfSwKIAl7ICJtYXg2NjgwIiwgbWF4NjY4MCB9LAogCXsgIm1heDY2ODEiLCBtYXg2NjgwIH0sCisJeyAidzgzbDc3MSIsIHc4M2w3NzEgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbG05MF9pZCk7CkBAIC0xODQsNiArMTg3LDcgQEAKIAl9LAogCS5wcm9iZQkJPSBsbTkwX3Byb2JlLAogCS5yZW1vdmUJCT0gbG05MF9yZW1vdmUsCisJLmFsZXJ0CQk9IGxtOTBfYWxlcnQsCiAJLmlkX3RhYmxlCT0gbG05MF9pZCwKIAkuZGV0ZWN0CQk9IGxtOTBfZGV0ZWN0LAogCS5hZGRyZXNzX2xpc3QJPSBub3JtYWxfaTJjLApAQCAtMjAxLDYgKzIwNSw5IEBACiAJaW50IGtpbmQ7CiAJaW50IGZsYWdzOwogCisJdTggY29uZmlnX29yaWc7CQkvKiBPcmlnaW5hbCBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHZhbHVlICovCisJdTggYWxlcnRfYWxhcm1zOwkvKiBXaGljaCBhbGFybSBiaXRzIHRyaWdnZXIgQUxFUlQjICovCisKIAkvKiByZWdpc3RlcnMgdmFsdWVzICovCiAJczggdGVtcDhbNF07CS8qIDA6IGxvY2FsIGxvdyBsaW1pdAogCQkJICAgMTogbG9jYWwgaGlnaCBsaW1pdApAQCAtNzU4LDYgKzc2NSwxNCBAQAogCQkgJiYgcmVnX2NvbnZyYXRlIDw9IDB4MDcpIHsKIAkJCW5hbWUgPSAibWF4NjY0NiI7CiAJCX0KKwl9IGVsc2UKKwlpZiAoYWRkcmVzcyA9PSAweDRDCisJICYmIG1hbl9pZCA9PSAweDVDKSB7IC8qIFdpbmJvbmQvTnV2b3RvbiAqLworCQlpZiAoKGNoaXBfaWQgJiAweEZFKSA9PSAweDEwIC8qIFc4M0w3NzFBV0cvQVNHICovCisJCSAmJiAocmVnX2NvbmZpZzEgJiAweDJBKSA9PSAweDAwCisJCSAmJiByZWdfY29udnJhdGUgPD0gMHgwOCkgeworCQkJbmFtZSA9ICJ3ODNsNzcxIjsKKwkJfQogCX0KIAogCWlmICghbmFtZSkgeyAvKiBpZGVudGlmaWNhdGlvbiBmYWlsZWQgKi8KQEAgLTc5NCw2ICs4MDksMTkgQEAKIAkJCW5ld19jbGllbnQtPmZsYWdzICY9IH5JMkNfQ0xJRU5UX1BFQzsKIAl9CiAKKwkvKiBEaWZmZXJlbnQgZGV2aWNlcyBoYXZlIGRpZmZlcmVudCBhbGFybSBiaXRzIHRyaWdnZXJpbmcgdGhlCisJICogQUxFUlQjIG91dHB1dCAqLworCXN3aXRjaCAoZGF0YS0+a2luZCkgeworCWNhc2UgbG05MDoKKwljYXNlIGxtOTk6CisJY2FzZSBsbTg2OgorCQlkYXRhLT5hbGVydF9hbGFybXMgPSAweDdiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkYXRhLT5hbGVydF9hbGFybXMgPSAweDdjOworCQlicmVhazsKKwl9CisKIAkvKiBJbml0aWFsaXplIHRoZSBMTTkwIGNoaXAgKi8KIAlsbTkwX2luaXRfY2xpZW50KG5ld19jbGllbnQpOwogCkBAIC04MzAsNyArODU4LDcgQEAKIAogc3RhdGljIHZvaWQgbG05MF9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXU4IGNvbmZpZywgY29uZmlnX29yaWc7CisJdTggY29uZmlnOwogCXN0cnVjdCBsbTkwX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCS8qCkBAIC04NDIsNyArODcwLDcgQEAKIAkJZGV2X3dhcm4oJmNsaWVudC0+ZGV2LCAiSW5pdGlhbGl6YXRpb24gZmFpbGVkIVxuIik7CiAJCXJldHVybjsKIAl9Ci0JY29uZmlnX29yaWcgPSBjb25maWc7CisJZGF0YS0+Y29uZmlnX29yaWcgPSBjb25maWc7CiAKIAkvKiBDaGVjayBUZW1wZXJhdHVyZSBSYW5nZSBTZWxlY3QgKi8KIAlpZiAoZGF0YS0+a2luZCA9PSBhZHQ3NDYxKSB7CkBAIC04NjAsNyArODg4LDcgQEAKIAl9CiAKIAljb25maWcgJj0gMHhCRjsJLyogcnVuICovCi0JaWYgKGNvbmZpZyAhPSBjb25maWdfb3JpZykgLyogT25seSB3cml0ZSBpZiBjaGFuZ2VkICovCisJaWYgKGNvbmZpZyAhPSBkYXRhLT5jb25maWdfb3JpZykgLyogT25seSB3cml0ZSBpZiBjaGFuZ2VkICovCiAJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBMTTkwX1JFR19XX0NPTkZJRzEsIGNvbmZpZyk7CiB9CiAKQEAgLTg3NSwxMCArOTAzLDQ2IEBACiAJCWRldmljZV9yZW1vdmVfZmlsZSgmY2xpZW50LT5kZXYsCiAJCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9vZmZzZXQuZGV2X2F0dHIpOwogCisJLyogUmVzdG9yZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gKi8KKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTE05MF9SRUdfV19DT05GSUcxLAorCQkJCSAgZGF0YS0+Y29uZmlnX29yaWcpOworCiAJa2ZyZWUoZGF0YSk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGxtOTBfYWxlcnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGZsYWcpCit7CisJc3RydWN0IGxtOTBfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXU4IGNvbmZpZywgYWxhcm1zOworCisJbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfU1RBVFVTLCAmYWxhcm1zKTsKKwlpZiAoKGFsYXJtcyAmIDB4N2YpID09IDApIHsKKwkJZGV2X2luZm8oJmNsaWVudC0+ZGV2LCAiRXZlcnl0aGluZyBPS1xuIik7CisJfSBlbHNlIHsKKwkJaWYgKGFsYXJtcyAmIDB4NjEpCisJCQlkZXZfd2FybigmY2xpZW50LT5kZXYsCisJCQkJICJ0ZW1wJWQgb3V0IG9mIHJhbmdlLCBwbGVhc2UgY2hlY2shXG4iLCAxKTsKKwkJaWYgKGFsYXJtcyAmIDB4MWEpCisJCQlkZXZfd2FybigmY2xpZW50LT5kZXYsCisJCQkJICJ0ZW1wJWQgb3V0IG9mIHJhbmdlLCBwbGVhc2UgY2hlY2shXG4iLCAyKTsKKwkJaWYgKGFsYXJtcyAmIDB4MDQpCisJCQlkZXZfd2FybigmY2xpZW50LT5kZXYsCisJCQkJICJ0ZW1wJWQgZGlvZGUgb3BlbiwgcGxlYXNlIGNoZWNrIVxuIiwgMik7CisKKwkJLyogRGlzYWJsZSBBTEVSVCMgb3V0cHV0LCBiZWNhdXNlIHRoZXNlIGNoaXBzIGRvbid0IGltcGxlbWVudAorCQkgIFNNQnVzIGFsZXJ0IGNvcnJlY3RseTsgdGhleSBzaG91bGQgb25seSBob2xkIHRoZSBhbGVydCBsaW5lCisJCSAgbG93IGJyaWVmbHkuICovCisJCWlmICgoZGF0YS0+a2luZCA9PSBhZG0xMDMyIHx8IGRhdGEtPmtpbmQgPT0gYWR0NzQ2MSkKKwkJICYmIChhbGFybXMgJiBkYXRhLT5hbGVydF9hbGFybXMpKSB7CisJCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIkRpc2FibGluZyBBTEVSVCNcbiIpOworCQkJbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfQ09ORklHMSwgJmNvbmZpZyk7CisJCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgTE05MF9SRUdfV19DT05GSUcxLAorCQkJCQkJICBjb25maWcgfCAweDgwKTsKKwkJfQorCX0KK30KKwogc3RhdGljIGludCBsbTkwX3JlYWQxNihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWdoLCB1OCByZWdsLCB1MTYgKnZhbHVlKQogewogCWludCBlcnI7CkBAIC05NjYsNiArMTAzMCwyMSBAQAogCQl9CiAJCWxtOTBfcmVhZF9yZWcoY2xpZW50LCBMTTkwX1JFR19SX1NUQVRVUywgJmRhdGEtPmFsYXJtcyk7CiAKKwkJLyogUmUtZW5hYmxlIEFMRVJUIyBvdXRwdXQgaWYgaXQgd2FzIG9yaWdpbmFsbHkgZW5hYmxlZCBhbmQKKwkJICogcmVsZXZhbnQgYWxhcm1zIGFyZSBhbGwgY2xlYXIgKi8KKwkJaWYgKChkYXRhLT5jb25maWdfb3JpZyAmIDB4ODApID09IDAKKwkJICYmIChkYXRhLT5hbGFybXMgJiBkYXRhLT5hbGVydF9hbGFybXMpID09IDApIHsKKwkJCXU4IGNvbmZpZzsKKworCQkJbG05MF9yZWFkX3JlZyhjbGllbnQsIExNOTBfUkVHX1JfQ09ORklHMSwgJmNvbmZpZyk7CisJCQlpZiAoY29uZmlnICYgMHg4MCkgeworCQkJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiUmUtZW5hYmxpbmcgQUxFUlQjXG4iKTsKKwkJCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKKwkJCQkJCQkgIExNOTBfUkVHX1dfQ09ORklHMSwKKwkJCQkJCQkgIGNvbmZpZyAmIH4weDgwKTsKKwkJCX0KKwkJfQorCiAJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CiAJCWRhdGEtPnZhbGlkID0gMTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3RtcDQwMS5jIGIvZHJpdmVycy9od21vbi90bXA0MDEuYwppbmRleCBhMTNiMzBlLi5kMTRhMWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3RtcDQwMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vdG1wNDAxLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAljaGFyIHZhbGlkOyAvKiB6ZXJvIHVudGlsIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCiAJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7IC8qIGluIGppZmZpZXMgKi8KLQlpbnQga2luZDsKKwllbnVtIGNoaXBzIGtpbmQ7CiAKIAkvKiByZWdpc3RlciB2YWx1ZXMgKi8KIAl1OCBzdGF0dXM7CkBAIC01MjQsNyArNTI0LDcgQEAKIAlpZiAocmVnID4gMTUpCiAJCXJldHVybiAtRU5PREVWOwogCi0Jc3RybGNweShpbmZvLT50eXBlLCB0bXA0MDFfaWRba2luZCAtIDFdLm5hbWUsIEkyQ19OQU1FX1NJWkUpOworCXN0cmxjcHkoaW5mby0+dHlwZSwgdG1wNDAxX2lkW2tpbmRdLm5hbWUsIEkyQ19OQU1FX1NJWkUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NzIsOCArNTcyLDcgQEAKIAkJZ290byBleGl0X3JlbW92ZTsKIAl9CiAKLQlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJEZXRlY3RlZCBUSSAlcyBjaGlwXG4iLAotCQkgbmFtZXNbZGF0YS0+a2luZCAtIDFdKTsKKwlkZXZfaW5mbygmY2xpZW50LT5kZXYsICJEZXRlY3RlZCBUSSAlcyBjaGlwXG4iLCBuYW1lc1tkYXRhLT5raW5kXSk7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi90bXA0MjEuYyBiL2RyaXZlcnMvaHdtb24vdG1wNDIxLmMKaW5kZXggNGY3YzA1MS4uNzM4YzQ3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi90bXA0MjEuYworKysgYi9kcml2ZXJzL2h3bW9uL3RtcDQyMS5jCkBAIC02MSw5ICs2MSw5IEBACiAjZGVmaW5lIFRNUDQyM19ERVZJQ0VfSUQJCQkweDIzCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0bXA0MjFfaWRbXSA9IHsKLQl7ICJ0bXA0MjEiLCB0bXA0MjEgfSwKLQl7ICJ0bXA0MjIiLCB0bXA0MjIgfSwKLQl7ICJ0bXA0MjMiLCB0bXA0MjMgfSwKKwl7ICJ0bXA0MjEiLCAyIH0sCisJeyAidG1wNDIyIiwgMyB9LAorCXsgInRtcDQyMyIsIDQgfSwKIAl7IH0KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgdG1wNDIxX2lkKTsKQEAgLTczLDIxICs3MywyMyBAQAogCXN0cnVjdCBtdXRleCB1cGRhdGVfbG9jazsKIAljaGFyIHZhbGlkOwogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOwotCWludCBraW5kOworCWludCBjaGFubmVsczsKIAl1OCBjb25maWc7CiAJczE2IHRlbXBbNF07CiB9OwogCiBzdGF0aWMgaW50IHRlbXBfZnJvbV9zMTYoczE2IHJlZykKIHsKLQlpbnQgdGVtcCA9IHJlZzsKKwkvKiBNYXNrIG91dCBzdGF0dXMgYml0cyAqLworCWludCB0ZW1wID0gcmVnICYgfjB4ZjsKIAogCXJldHVybiAodGVtcCAqIDEwMDAgKyAxMjgpIC8gMjU2OwogfQogCiBzdGF0aWMgaW50IHRlbXBfZnJvbV91MTYodTE2IHJlZykKIHsKLQlpbnQgdGVtcCA9IHJlZzsKKwkvKiBNYXNrIG91dCBzdGF0dXMgYml0cyAqLworCWludCB0ZW1wID0gcmVnICYgfjB4ZjsKIAogCS8qIEFkZCBvZmZzZXQgZm9yIGV4dGVuZGVkIHRlbXBlcmF0dXJlIHJhbmdlLiAqLwogCXRlbXAgLT0gNjQgKiAyNTY7CkBAIC0xMDcsNyArMTA5LDcgQEAKIAkJZGF0YS0+Y29uZmlnID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKIAkJCVRNUDQyMV9DT05GSUdfUkVHXzEpOwogCi0JCWZvciAoaSA9IDA7IGkgPD0gZGF0YS0+a2luZDsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5jaGFubmVsczsgaSsrKSB7CiAJCQlkYXRhLT50ZW1wW2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKIAkJCQlUTVA0MjFfVEVNUF9NU0JbaV0pIDw8IDg7CiAJCQlkYXRhLT50ZW1wW2ldIHw9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCkBAIC0xNjYsNyArMTY4LDcgQEAKIAlkZXZhdHRyID0gY29udGFpbmVyX29mKGEsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlLCBhdHRyKTsKIAlpbmRleCA9IHRvX3NlbnNvcl9kZXZfYXR0cihkZXZhdHRyKS0+aW5kZXg7CiAKLQlpZiAoZGF0YS0+a2luZCA+IGluZGV4KQorCWlmIChpbmRleCA8IGRhdGEtPmNoYW5uZWxzKQogCQlyZXR1cm4gYS0+bW9kZTsKIAogCXJldHVybiAwOwpAQCAtMjUyLDkgKzI1NCw5IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXN0cmxjcHkoaW5mby0+dHlwZSwgdG1wNDIxX2lkW2tpbmQgLSAxXS5uYW1lLCBJMkNfTkFNRV9TSVpFKTsKKwlzdHJsY3B5KGluZm8tPnR5cGUsIHRtcDQyMV9pZFtraW5kXS5uYW1lLCBJMkNfTkFNRV9TSVpFKTsKIAlkZXZfaW5mbygmYWRhcHRlci0+ZGV2LCAiRGV0ZWN0ZWQgVEkgJXMgY2hpcCBhdCAweCUwMnhcbiIsCi0JCSBuYW1lc1traW5kIC0gMV0sIGNsaWVudC0+YWRkcik7CisJCSBuYW1lc1traW5kXSwgY2xpZW50LT5hZGRyKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjcxLDcgKzI3Myw3IEBACiAKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkYXRhKTsKIAltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7Ci0JZGF0YS0+a2luZCA9IGlkLT5kcml2ZXJfZGF0YTsKKwlkYXRhLT5jaGFubmVscyA9IGlkLT5kcml2ZXJfZGF0YTsKIAogCWVyciA9IHRtcDQyMV9pbml0X2NsaWVudChjbGllbnQpOwogCWlmIChlcnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3Z0ODIzMS5jIGIvZHJpdmVycy9od21vbi92dDgyMzEuYwppbmRleCBkNDdiNGM5Li5lNjA3OGM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3Z0ODIzMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vdnQ4MjMxLmMKQEAgLTk0OCw4ICs5NDgsNyBAQAogCiAJYWRkcmVzcyA9IHZhbCAmIH4oVlQ4MjMxX0VYVEVOVCAtIDEpOwogCWlmIChhZGRyZXNzID09IDApIHsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJiYXNlIGFkZHJlc3Mgbm90IHNldCAtXAotCQkJCSB1cGdyYWRlIEJJT1Mgb3IgdXNlIGZvcmNlX2FkZHI9MHhhZGRyXG4iKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJiYXNlIGFkZHJlc3Mgbm90IHNldCAtIHVwZ3JhZGUgQklPUyBvciB1c2UgZm9yY2VfYWRkcj0weGFkZHJcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNzkzLmMgYi9kcml2ZXJzL2h3bW9uL3c4Mzc5My5jCmluZGV4IDlhMjAyMmIuLjlkZTgxYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzNzkzLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM3OTMuYwpAQCAtMyw2ICszLDEwIEBACiAgICAgQ29weXJpZ2h0IChDKSAyMDA2IFdpbmJvbmQgRWxlY3Ryb25pY3MgQ29ycC4KICAgICAgICAgICAgICAgICAgIFl1YW4gTXUKICAgICAgICAgICAgICAgICAgIFJ1ZG9sZiBNYXJlayA8ci5tYXJla0Bhc3NlbWJsZXIuY3o+CisgICAgQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU3ZlbiBBbmRlcnMgPGFuZGVyc0BhbmR1cmFzLmRlPiwgQU5EVVJBUyBBRy4KKwkJICBXYXRjaGRvZyBkcml2ZXIgcGFydAorCQkgIChCYXNlZCBwYXJ0aWFsbHkgb24gZnNjaG1kIGRyaXZlciwKKwkJICAgQ29weXJpZ2h0IDIwMDctMjAwOCBieSBIYW5zIGRlIEdvZWRlKQogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMzUsNiArMzksMTYgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisKKy8qIERlZmF1bHQgdmFsdWVzICovCisjZGVmaW5lIFdBVENIRE9HX1RJTUVPVVQgMgkvKiAyIG1pbnV0ZSBkZWZhdWx0IHRpbWVvdXQgKi8KIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsCkBAIC01MSw2ICs2NSwxOCBAQAogbW9kdWxlX3BhcmFtKHJlc2V0LCBib29sLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocmVzZXQsICJTZXQgdG8gMSB0byByZXNldCBjaGlwLCBub3QgcmVjb21tZW5kZWQiKTsKIAorc3RhdGljIGludCB0aW1lb3V0ID0gV0FUQ0hET0dfVElNRU9VVDsJLyogZGVmYXVsdCB0aW1lb3V0IGluIG1pbnV0ZXMgKi8KK21vZHVsZV9wYXJhbSh0aW1lb3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh0aW1lb3V0LAorCSJXYXRjaGRvZyB0aW1lb3V0IGluIG1pbnV0ZXMuIDI8PSB0aW1lb3V0IDw9MjU1IChkZWZhdWx0PSIKKwkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfVElNRU9VVCkgIikiKTsKKworc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOworbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwKKwkiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIKKwkJCQlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7CisKIC8qCiAgICBBZGRyZXNzIDB4MDAsIDB4MGQsIDB4MGUsIDB4MGYgaW4gYWxsIHRocmVlIGJhbmtzIGFyZSByZXNlcnZlZAogICAgYXMgSUQsIEJhbmsgU2VsZWN0IHJlZ2lzdGVycwpAQCAtNzIsNiArOTgsMTEgQEAKICNkZWZpbmUgVzgzNzkzX1JFR19WSURfTEFUQ0hCCQkweDA4CiAjZGVmaW5lIFc4Mzc5M19SRUdfVklEX0NUUkwJCTB4NTkKIAorI2RlZmluZSBXODM3OTNfUkVHX1dEVF9MT0NLCQkweDAxCisjZGVmaW5lIFc4Mzc5M19SRUdfV0RUX0VOQUJMRQkJMHgwMgorI2RlZmluZSBXODM3OTNfUkVHX1dEVF9TVEFUVVMJCTB4MDMKKyNkZWZpbmUgVzgzNzkzX1JFR19XRFRfVElNRU9VVAkJMHgwNAorCiBzdGF0aWMgdTE2IFc4Mzc5M19SRUdfVEVNUF9NT0RFWzJdID0geyAweDVlLCAweDVmIH07CiAKICNkZWZpbmUgVEVNUF9SRUFECTAKQEAgLTIyMyw4ICsyNTQsMzcgQEAKIAl1OCB0b2xlcmFuY2VbM107CS8qIFRlbXAgdG9sZXJhbmNlKFNtYXJ0IEZhbiBJL0lJKSAqLwogCXU4IHNmMl9wd21bNl1bN107CS8qIFNtYXJ0IEZhbklJOiBGYW4gZHV0eSBjeWNsZSAqLwogCXU4IHNmMl90ZW1wWzZdWzddOwkvKiBTbWFydCBGYW5JSTogVGVtcCBsZXZlbCBwb2ludCAqLworCisJLyogd2F0Y2hkb2cgKi8KKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBtdXRleCB3YXRjaGRvZ19sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsgLyogbWVtYmVyIG9mIHRoZSB3YXRjaGRvZ19kYXRhX2xpc3QgKi8KKwlzdHJ1Y3Qga3JlZiBrcmVmOworCXN0cnVjdCBtaXNjZGV2aWNlIHdhdGNoZG9nX21pc2NkZXY7CisJdW5zaWduZWQgbG9uZyB3YXRjaGRvZ19pc19vcGVuOworCWNoYXIgd2F0Y2hkb2dfZXhwZWN0X2Nsb3NlOworCWNoYXIgd2F0Y2hkb2dfbmFtZVsxMF07IC8qIG11c3QgYmUgdW5pcXVlIHRvIGF2b2lkIHN5c2ZzIGNvbmZsaWN0ICovCisJdW5zaWduZWQgaW50IHdhdGNoZG9nX2NhdXNlZF9yZWJvb3Q7CisJaW50IHdhdGNoZG9nX3RpbWVvdXQ7IC8qIHdhdGNoZG9nIHRpbWVvdXQgaW4gbWludXRlcyAqLwogfTsKIAorLyogU29tZXdoYXQgdWdseSA6KCBnbG9iYWwgZGF0YSBwb2ludGVyIGxpc3Qgd2l0aCBhbGwgZGV2aWNlcywgc28gdGhhdAorICAgd2UgY2FuIGZpbmQgb3VyIGRldmljZSBkYXRhIGFzIHdoZW4gdXNpbmcgbWlzY19yZWdpc3Rlci4gVGhlcmUgaXMgbm8KKyAgIG90aGVyIG1ldGhvZCB0byBnZXQgdG8gb25lJ3MgZGV2aWNlIGRhdGEgZnJvbSB0aGUgb3BlbiBmaWxlLW9wIGFuZAorICAgZm9yIHVzYWdlIGluIHRoZSByZWJvb3Qgbm90aWZpZXIgY2FsbGJhY2suICovCitzdGF0aWMgTElTVF9IRUFEKHdhdGNoZG9nX2RhdGFfbGlzdCk7CisKKy8qIE5vdGUgdGhpcyBsb2NrIG5vdCBvbmx5IHByb3RlY3QgbGlzdCBhY2Nlc3MsIGJ1dCBhbHNvIGRhdGEua3JlZiBhY2Nlc3MgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgod2F0Y2hkb2dfZGF0YV9tdXRleCk7CisKKy8qIFJlbGVhc2Ugb3VyIGRhdGEgc3RydWN0IHdoZW4gd2UncmUgZGV0YWNoZWQgZnJvbSB0aGUgaTJjIGNsaWVudCAqYW5kKiBhbGwKKyAgIHJlZmVyZW5jZXMgdG8gb3VyIHdhdGNoZG9nIGRldmljZSBhcmUgcmVsZWFzZWQgKi8KK3N0YXRpYyB2b2lkIHc4Mzc5M19yZWxlYXNlX3Jlc291cmNlcyhzdHJ1Y3Qga3JlZiAqcmVmKQoreworCXN0cnVjdCB3ODM3OTNfZGF0YSAqZGF0YSA9IGNvbnRhaW5lcl9vZihyZWYsIHN0cnVjdCB3ODM3OTNfZGF0YSwga3JlZik7CisJa2ZyZWUoZGF0YSk7Cit9CisKIHN0YXRpYyB1OCB3ODM3OTNfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MTYgcmVnKTsKIHN0YXRpYyBpbnQgdzgzNzkzX3dyaXRlX3ZhbHVlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiByZWcsIHU4IHZhbHVlKTsKIHN0YXRpYyBpbnQgdzgzNzkzX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCkBAIC0xMDYzLDE0ICsxMTIzLDM0OSBAQAogCS8qIFN0YXJ0IG1vbml0b3JpbmcgKi8KIAl3ODM3OTNfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX0NPTkZJRywKIAkJCSAgIHc4Mzc5M19yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19DT05GSUcpIHwgMHgwMSk7Ci0KIH0KIAorLyoKKyAqIFdhdGNoZG9nIHJvdXRpbmVzCisgKi8KKworc3RhdGljIGludCB3YXRjaGRvZ19zZXRfdGltZW91dChzdHJ1Y3QgdzgzNzkzX2RhdGEgKmRhdGEsIGludCB0aW1lb3V0KQoreworCWludCByZXQsIG10aW1lb3V0OworCisJbXRpbWVvdXQgPSBESVZfUk9VTkRfVVAodGltZW91dCwgNjApOworCisJaWYgKG10aW1lb3V0ID4gMjU1KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJmRhdGEtPndhdGNoZG9nX2xvY2spOworCWlmICghZGF0YS0+Y2xpZW50KSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gbGVhdmU7CisJfQorCisJZGF0YS0+d2F0Y2hkb2dfdGltZW91dCA9IG10aW1lb3V0OworCisJLyogU2V0IFRpbWVvdXQgdmFsdWUgKGluIE1pbnV0ZXMpICovCisJdzgzNzkzX3dyaXRlX3ZhbHVlKGRhdGEtPmNsaWVudCwgVzgzNzkzX1JFR19XRFRfVElNRU9VVCwKKwkJCSAgIGRhdGEtPndhdGNoZG9nX3RpbWVvdXQpOworCisJcmV0ID0gbXRpbWVvdXQgKiA2MDsKKworbGVhdmU6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT53YXRjaGRvZ19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdhdGNoZG9nX2dldF90aW1lb3V0KHN0cnVjdCB3ODM3OTNfZGF0YSAqZGF0YSkKK3sKKwlpbnQgdGltZW91dDsKKworCW11dGV4X2xvY2soJmRhdGEtPndhdGNoZG9nX2xvY2spOworCXRpbWVvdXQgPSBkYXRhLT53YXRjaGRvZ190aW1lb3V0ICogNjA7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT53YXRjaGRvZ19sb2NrKTsKKworCXJldHVybiB0aW1lb3V0OworfQorCitzdGF0aWMgaW50IHdhdGNoZG9nX3RyaWdnZXIoc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhKQoreworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmZGF0YS0+d2F0Y2hkb2dfbG9jayk7CisJaWYgKCFkYXRhLT5jbGllbnQpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwkvKiBTZXQgVGltZW91dCB2YWx1ZSAoaW4gTWludXRlcykgKi8KKwl3ODM3OTNfd3JpdGVfdmFsdWUoZGF0YS0+Y2xpZW50LCBXODM3OTNfUkVHX1dEVF9USU1FT1VULAorCQkJICAgZGF0YS0+d2F0Y2hkb2dfdGltZW91dCk7CisKK2xlYXZlOgorCW11dGV4X3VubG9jaygmZGF0YS0+d2F0Y2hkb2dfbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB3YXRjaGRvZ19lbmFibGUoc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhKQoreworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmZGF0YS0+d2F0Y2hkb2dfbG9jayk7CisJaWYgKCFkYXRhLT5jbGllbnQpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwkvKiBTZXQgaW5pdGlhbCB0aW1lb3V0ICovCisJdzgzNzkzX3dyaXRlX3ZhbHVlKGRhdGEtPmNsaWVudCwgVzgzNzkzX1JFR19XRFRfVElNRU9VVCwKKwkJCSAgIGRhdGEtPndhdGNoZG9nX3RpbWVvdXQpOworCisJLyogRW5hYmxlIFNvZnQgV2F0Y2hkb2cgKi8KKwl3ODM3OTNfd3JpdGVfdmFsdWUoZGF0YS0+Y2xpZW50LCBXODM3OTNfUkVHX1dEVF9MT0NLLCAweDU1KTsKKworbGVhdmU6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT53YXRjaGRvZ19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdhdGNoZG9nX2Rpc2FibGUoc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhKQoreworCWludCByZXQgPSAwOworCisJbXV0ZXhfbG9jaygmZGF0YS0+d2F0Y2hkb2dfbG9jayk7CisJaWYgKCFkYXRhLT5jbGllbnQpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBsZWF2ZTsKKwl9CisKKwkvKiBEaXNhYmxlIFNvZnQgV2F0Y2hkb2cgKi8KKwl3ODM3OTNfd3JpdGVfdmFsdWUoZGF0YS0+Y2xpZW50LCBXODM3OTNfUkVHX1dEVF9MT0NLLCAweEFBKTsKKworbGVhdmU6CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT53YXRjaGRvZ19sb2NrKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdhdGNoZG9nX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IHc4Mzc5M19kYXRhICpwb3MsICpkYXRhID0gTlVMTDsKKwlpbnQgd2F0Y2hkb2dfaXNfb3BlbjsKKworCS8qIFdlIGdldCBjYWxsZWQgZnJvbSBkcml2ZXJzL2NoYXIvbWlzYy5jIHdpdGggbWlzY19tdHggaG9sZCwgYW5kIHdlCisJICAgY2FsbCBtaXNjX3JlZ2lzdGVyKCkgZnJvbSAgdzgzNzkzX3Byb2JlKCkgd2l0aCB3YXRjaGRvZ19kYXRhX211dGV4CisJICAgaG9sZCwgYXMgbWlzY19yZWdpc3RlcigpIHRha2VzIHRoZSBtaXNjX210eCBsb2NrLCB0aGlzIGlzIGEgcG9zc2libGUKKwkgICBkZWFkbG9jaywgc28gd2UgdXNlIG11dGV4X3RyeWxvY2sgaGVyZS4gKi8KKwlpZiAoIW11dGV4X3RyeWxvY2soJndhdGNoZG9nX2RhdGFfbXV0ZXgpKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCWxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmd2F0Y2hkb2dfZGF0YV9saXN0LCBsaXN0KSB7CisJCWlmIChwb3MtPndhdGNoZG9nX21pc2NkZXYubWlub3IgPT0gaW1pbm9yKGlub2RlKSkgeworCQkJZGF0YSA9IHBvczsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogQ2hlY2ssIGlmIGRldmljZSBpcyBhbHJlYWR5IG9wZW4gKi8KKwl3YXRjaGRvZ19pc19vcGVuID0gdGVzdF9hbmRfc2V0X2JpdCgwLCAmZGF0YS0+d2F0Y2hkb2dfaXNfb3Blbik7CisKKwkvKiBJbmNyZWFzZSBkYXRhIHJlZmVyZW5jZSBjb3VudGVyIChpZiBub3QgYWxyZWFkeSBkb25lKS4KKwkgICBOb3RlIHdlIGNhbiBuZXZlciBub3QgaGF2ZSBmb3VuZCBkYXRhLCBzbyB3ZSBkb24ndCBjaGVjayBmb3IgdGhpcyAqLworCWlmICghd2F0Y2hkb2dfaXNfb3BlbikKKwkJa3JlZl9nZXQoJmRhdGEtPmtyZWYpOworCisJbXV0ZXhfdW5sb2NrKCZ3YXRjaGRvZ19kYXRhX211dGV4KTsKKworCS8qIENoZWNrLCBpZiBkZXZpY2UgaXMgYWxyZWFkeSBvcGVuIGFuZCBwb3NzaWJseSBpc3N1ZSBlcnJvciAqLworCWlmICh3YXRjaGRvZ19pc19vcGVuKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogRW5hYmxlIFNvZnQgV2F0Y2hkb2cgKi8KKwl3YXRjaGRvZ19lbmFibGUoZGF0YSk7CisKKwkvKiBTdG9yZSBwb2ludGVyIHRvIGRhdGEgaW50byBmaWxwJ3MgcHJpdmF0ZSBkYXRhICovCisJZmlscC0+cHJpdmF0ZV9kYXRhID0gZGF0YTsKKworCXJldHVybiBub25zZWVrYWJsZV9vcGVuKGlub2RlLCBmaWxwKTsKK30KKworc3RhdGljIGludCB3YXRjaGRvZ19jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdzgzNzkzX2RhdGEgKmRhdGEgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoZGF0YS0+d2F0Y2hkb2dfZXhwZWN0X2Nsb3NlKSB7CisJCXdhdGNoZG9nX2Rpc2FibGUoZGF0YSk7CisJCWRhdGEtPndhdGNoZG9nX2V4cGVjdF9jbG9zZSA9IDA7CisJfSBlbHNlIHsKKwkJd2F0Y2hkb2dfdHJpZ2dlcihkYXRhKTsKKwkJZGV2X2NyaXQoJmRhdGEtPmNsaWVudC0+ZGV2LAorCQkJInVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOworCX0KKworCWNsZWFyX2JpdCgwLCAmZGF0YS0+d2F0Y2hkb2dfaXNfb3Blbik7CisKKwkvKiBEZWNyZWFzZSBkYXRhIHJlZmVyZW5jZSBjb3VudGVyICovCisJbXV0ZXhfbG9jaygmd2F0Y2hkb2dfZGF0YV9tdXRleCk7CisJa3JlZl9wdXQoJmRhdGEtPmtyZWYsIHc4Mzc5M19yZWxlYXNlX3Jlc291cmNlcyk7CisJbXV0ZXhfdW5sb2NrKCZ3YXRjaGRvZ19kYXRhX211dGV4KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCB3YXRjaGRvZ193cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwlzaXplX3QgY291bnQsIGxvZmZfdCAqb2Zmc2V0KQoreworCXNpemVfdCByZXQ7CisJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJaWYgKGNvdW50KSB7CisJCWlmICghbm93YXlvdXQpIHsKKwkJCXNpemVfdCBpOworCisJCQkvKiBDbGVhciBpdCBpbiBjYXNlIGl0IHdhcyBzZXQgd2l0aCBhIHByZXZpb3VzIHdyaXRlICovCisJCQlkYXRhLT53YXRjaGRvZ19leHBlY3RfY2xvc2UgPSAwOworCisJCQlmb3IgKGkgPSAwOyBpICE9IGNvdW50OyBpKyspIHsKKwkJCQljaGFyIGM7CisJCQkJaWYgKGdldF91c2VyKGMsIGJ1ZiArIGkpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQlpZiAoYyA9PSAnVicpCisJCQkJCWRhdGEtPndhdGNoZG9nX2V4cGVjdF9jbG9zZSA9IDE7CisJCQl9CisJCX0KKwkJcmV0ID0gd2F0Y2hkb2dfdHJpZ2dlcihkYXRhKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgd2F0Y2hkb2dfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKKwkJLm9wdGlvbnMgPSBXRElPRl9LRUVQQUxJVkVQSU5HIHwKKwkJCSAgIFdESU9GX1NFVFRJTUVPVVQgfAorCQkJICAgV0RJT0ZfQ0FSRFJFU0VULAorCQkuaWRlbnRpdHkgPSAidzgzNzkzIHdhdGNoZG9nIgorCX07CisKKwlpbnQgdmFsLCByZXQgPSAwOworCXN0cnVjdCB3ODM3OTNfZGF0YSAqZGF0YSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgorCQlpZiAoIW5vd2F5b3V0KQorCQkJaWRlbnQub3B0aW9ucyB8PSBXRElPRl9NQUdJQ0NMT1NFOworCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJmlkZW50LCBzaXplb2YoaWRlbnQpKSkKKwkJCXJldCA9IC1FRkFVTFQ7CisJCWJyZWFrOworCisJY2FzZSBXRElPQ19HRVRTVEFUVVM6CisJCXZhbCA9IGRhdGEtPndhdGNoZG9nX2NhdXNlZF9yZWJvb3QgPyBXRElPRl9DQVJEUkVTRVQgOiAwOworCQlyZXQgPSBwdXRfdXNlcih2YWwsIChpbnQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0dFVEJPT1RTVEFUVVM6CisJCXJldCA9IHB1dF91c2VyKDAsIChpbnQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0tFRVBBTElWRToKKwkJcmV0ID0gd2F0Y2hkb2dfdHJpZ2dlcihkYXRhKTsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0dFVFRJTUVPVVQ6CisJCXZhbCA9IHdhdGNoZG9nX2dldF90aW1lb3V0KGRhdGEpOworCQlyZXQgPSBwdXRfdXNlcih2YWwsIChpbnQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX1NFVFRJTUVPVVQ6CisJCWlmIChnZXRfdXNlcih2YWwsIChpbnQgX191c2VyICopYXJnKSkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IHdhdGNoZG9nX3NldF90aW1lb3V0KGRhdGEsIHZhbCk7CisJCWlmIChyZXQgPiAwKQorCQkJcmV0ID0gcHV0X3VzZXIocmV0LCAoaW50IF9fdXNlciAqKWFyZyk7CisJCWJyZWFrOworCisJY2FzZSBXRElPQ19TRVRPUFRJT05TOgorCQlpZiAoZ2V0X3VzZXIodmFsLCAoaW50IF9fdXNlciAqKWFyZykpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh2YWwgJiBXRElPU19ESVNBQkxFQ0FSRCkKKwkJCXJldCA9IHdhdGNoZG9nX2Rpc2FibGUoZGF0YSk7CisJCWVsc2UgaWYgKHZhbCAmIFdESU9TX0VOQUJMRUNBUkQpCisJCQlyZXQgPSB3YXRjaGRvZ19lbmFibGUoZGF0YSk7CisJCWVsc2UKKwkJCXJldCA9IC1FSU5WQUw7CisKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVOT1RUWTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3YXRjaGRvZ19mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5sbHNlZWsgPSBub19sbHNlZWssCisJLm9wZW4gPSB3YXRjaGRvZ19vcGVuLAorCS5yZWxlYXNlID0gd2F0Y2hkb2dfY2xvc2UsCisJLndyaXRlID0gd2F0Y2hkb2dfd3JpdGUsCisJLmlvY3RsID0gd2F0Y2hkb2dfaW9jdGwsCit9OworCisvKgorICoJTm90aWZpZXIgZm9yIHN5c3RlbSBkb3duCisgKi8KKworc3RhdGljIGludCB3YXRjaGRvZ19ub3RpZnlfc3lzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBjb2RlLAorCQkJICAgICAgIHZvaWQgKnVudXNlZCkKK3sKKwlzdHJ1Y3QgdzgzNzkzX2RhdGEgKmRhdGEgPSBOVUxMOworCisJaWYgKGNvZGUgPT0gU1lTX0RPV04gfHwgY29kZSA9PSBTWVNfSEFMVCkgeworCisJCS8qIERpc2FibGUgZWFjaCByZWdpc3RlcmVkIHdhdGNoZG9nICovCisJCW11dGV4X2xvY2soJndhdGNoZG9nX2RhdGFfbXV0ZXgpOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRhdGEsICZ3YXRjaGRvZ19kYXRhX2xpc3QsIGxpc3QpIHsKKwkJCWlmIChkYXRhLT53YXRjaGRvZ19taXNjZGV2Lm1pbm9yKQorCQkJCXdhdGNoZG9nX2Rpc2FibGUoZGF0YSk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZ3YXRjaGRvZ19kYXRhX211dGV4KTsKKwl9CisKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKKy8qCisgKglUaGUgV0RUIG5lZWRzIHRvIGxlYXJuIGFib3V0IHNvZnQgc2h1dGRvd25zIGluIG9yZGVyIHRvCisgKgl0dXJuIHRoZSB0aW1lYm9tYiByZWdpc3RlcnMgb2ZmLgorICovCisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgd2F0Y2hkb2dfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSB3YXRjaGRvZ19ub3RpZnlfc3lzLAorfTsKKworLyoKKyAqIEluaXQgLyByZW1vdmUgcm91dGluZXMKKyAqLworCiBzdGF0aWMgaW50IHc4Mzc5M19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgdzgzNzkzX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7Ci0JaW50IGk7CisJaW50IGksIHRtcDsKKworCS8qIFVucmVnaXN0ZXIgdGhlIHdhdGNoZG9nIChpZiByZWdpc3RlcmVkKSAqLworCWlmIChkYXRhLT53YXRjaGRvZ19taXNjZGV2Lm1pbm9yKSB7CisJCW1pc2NfZGVyZWdpc3RlcigmZGF0YS0+d2F0Y2hkb2dfbWlzY2Rldik7CisKKwkJaWYgKGRhdGEtPndhdGNoZG9nX2lzX29wZW4pIHsKKwkJCWRldl93YXJuKCZjbGllbnQtPmRldiwKKwkJCQkiaTJjIGNsaWVudCBkZXRhY2hlZCB3aXRoIHdhdGNoZG9nIG9wZW4hICIKKwkJCQkiU3RvcHBpbmcgd2F0Y2hkb2cuXG4iKTsKKwkJCXdhdGNoZG9nX2Rpc2FibGUoZGF0YSk7CisJCX0KKworCQltdXRleF9sb2NrKCZ3YXRjaGRvZ19kYXRhX211dGV4KTsKKwkJbGlzdF9kZWwoJmRhdGEtPmxpc3QpOworCQltdXRleF91bmxvY2soJndhdGNoZG9nX2RhdGFfbXV0ZXgpOworCisJCS8qIFRlbGwgdGhlIHdhdGNoZG9nIGNvZGUgdGhlIGNsaWVudCBpcyBnb25lICovCisJCW11dGV4X2xvY2soJmRhdGEtPndhdGNoZG9nX2xvY2spOworCQlkYXRhLT5jbGllbnQgPSBOVUxMOworCQltdXRleF91bmxvY2soJmRhdGEtPndhdGNoZG9nX2xvY2spOworCX0KKworCS8qIFJlc2V0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgdG8gRGlzYWJsZSBXYXRjaCBEb2cgUmVnaXN0ZXJzICovCisJdG1wID0gdzgzNzkzX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX0NPTkZJRyk7CisJdzgzNzkzX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNzkzX1JFR19DT05GSUcsIHRtcCAmIH4weDA0KTsKKworCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ3YXRjaGRvZ19ub3RpZmllcik7CiAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5od21vbl9kZXYpOwogCkBAIC0xMDk5LDcgKzE0OTQsMTAgQEAKIAlpZiAoZGF0YS0+bG03NVsxXSAhPSBOVUxMKQogCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoZGF0YS0+bG03NVsxXSk7CiAKLQlrZnJlZShkYXRhKTsKKwkvKiBEZWNyZWFzZSBkYXRhIHJlZmVyZW5jZSBjb3VudGVyICovCisJbXV0ZXhfbG9jaygmd2F0Y2hkb2dfZGF0YV9tdXRleCk7CisJa3JlZl9wdXQoJmRhdGEtPmtyZWYsIHc4Mzc5M19yZWxlYXNlX3Jlc291cmNlcyk7CisJbXV0ZXhfdW5sb2NrKCZ3YXRjaGRvZ19kYXRhX211dGV4KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTIwMyw2ICsxNjAxLDcgQEAKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmY2xpZW50LT5kZXY7CisJY29uc3QgaW50IHdhdGNoZG9nX21pbm9yc1tdID0geyBXQVRDSERPR19NSU5PUiwgMjEyLCAyMTMsIDIxNCwgMjE1IH07CiAJc3RydWN0IHc4Mzc5M19kYXRhICpkYXRhOwogCWludCBpLCB0bXAsIHZhbCwgZXJyOwogCWludCBmaWxlc19mYW4gPSBBUlJBWV9TSVpFKHc4Mzc5M19sZWZ0X2ZhbikgLyA3OwpAQCAtMTIxOCw2ICsxNjE3LDE0IEBACiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7CiAJZGF0YS0+YmFuayA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIFc4Mzc5M19SRUdfQkFOS1NFTCk7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOworCW11dGV4X2luaXQoJmRhdGEtPndhdGNoZG9nX2xvY2spOworCUlOSVRfTElTVF9IRUFEKCZkYXRhLT5saXN0KTsKKwlrcmVmX2luaXQoJmRhdGEtPmtyZWYpOworCisJLyogU3RvcmUgY2xpZW50IHBvaW50ZXIgaW4gb3VyIGRhdGEgc3RydWN0IGZvciB3YXRjaGRvZyB1c2FnZQorCSAgICh3aGVyZSB0aGUgY2xpZW50IGlzIGZvdW5kIHRocm91Z2ggYSBkYXRhIHB0ciBpbnN0ZWFkIG9mIHRoZQorCSAgIG90aGVyd2F5IGFyb3VuZCkgKi8KKwlkYXRhLT5jbGllbnQgPSBjbGllbnQ7CiAKIAllcnIgPSB3ODM3OTNfZGV0ZWN0X3N1YmNsaWVudHMoY2xpZW50KTsKIAlpZiAoZXJyKQpAQCAtMTM4MCw4ICsxNzg3LDc3IEBACiAJCWdvdG8gZXhpdF9yZW1vdmU7CiAJfQogCisJLyogV2F0Y2hkb2cgaW5pdGlhbGl6YXRpb24gKi8KKworCS8qIFJlZ2lzdGVyIGJvb3Qgbm90aWZpZXIgKi8KKwllcnIgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJndhdGNoZG9nX25vdGlmaWVyKTsKKwlpZiAoZXJyICE9IDApIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsCisJCQkiY2Fubm90IHJlZ2lzdGVyIHJlYm9vdCBub3RpZmllciAoZXJyPSVkKVxuIiwgZXJyKTsKKwkJZ290byBleGl0X2RldnVucmVnOworCX0KKworCS8qIEVuYWJsZSBXYXRjaGRvZyByZWdpc3RlcnMuCisJICAgU2V0IENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgdG8gRW5hYmxlIFdhdGNoIERvZyBSZWdpc3RlcnMKKwkgICAoQml0IDIpID0gWFhYWCwgWDFYWC4gKi8KKwl0bXAgPSB3ODM3OTNfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5M19SRUdfQ09ORklHKTsKKwl3ODM3OTNfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM3OTNfUkVHX0NPTkZJRywgdG1wIHwgMHgwNCk7CisKKwkvKiBTZXQgdGhlIGRlZmF1bHQgd2F0Y2hkb2cgdGltZW91dCAqLworCWRhdGEtPndhdGNoZG9nX3RpbWVvdXQgPSB0aW1lb3V0OworCisJLyogQ2hlY2ssIGlmIGxhc3QgcmVib290IHdhcyBjYXVzZWQgYnkgd2F0Y2hkb2cgKi8KKwlkYXRhLT53YXRjaGRvZ19jYXVzZWRfcmVib290ID0KKwkgIHc4Mzc5M19yZWFkX3ZhbHVlKGRhdGEtPmNsaWVudCwgVzgzNzkzX1JFR19XRFRfU1RBVFVTKSAmIDB4MDE7CisKKwkvKiBEaXNhYmxlIFNvZnQgV2F0Y2hkb2cgZHVyaW5nIGluaXRpYWxpYXRpb24gKi8KKwl3YXRjaGRvZ19kaXNhYmxlKGRhdGEpOworCisJLyogV2UgdGFrZSB0aGUgZGF0YV9tdXRleCBsb2NrIGVhcmx5IHNvIHRoYXQgd2F0Y2hkb2dfb3BlbigpIGNhbm5vdAorCSAgIHJ1biB3aGVuIG1pc2NfcmVnaXN0ZXIoKSBoYXMgY29tcGxldGVkLCBidXQgd2UndmUgbm90IHlldCBhZGRlZAorCSAgIG91ciBkYXRhIHRvIHRoZSB3YXRjaGRvZ19kYXRhX2xpc3QgKGFuZCBzZXQgdGhlIGRlZmF1bHQgdGltZW91dCkgKi8KKwltdXRleF9sb2NrKCZ3YXRjaGRvZ19kYXRhX211dGV4KTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3YXRjaGRvZ19taW5vcnMpOyBpKyspIHsKKwkJLyogUmVnaXN0ZXIgb3VyIHdhdGNoZG9nIHBhcnQgKi8KKwkJc25wcmludGYoZGF0YS0+d2F0Y2hkb2dfbmFtZSwgc2l6ZW9mKGRhdGEtPndhdGNoZG9nX25hbWUpLAorCQkJIndhdGNoZG9nJWMiLCAoaSA9PSAwKSA/ICdcMCcgOiAoJzAnICsgaSkpOworCQlkYXRhLT53YXRjaGRvZ19taXNjZGV2Lm5hbWUgPSBkYXRhLT53YXRjaGRvZ19uYW1lOworCQlkYXRhLT53YXRjaGRvZ19taXNjZGV2LmZvcHMgPSAmd2F0Y2hkb2dfZm9wczsKKwkJZGF0YS0+d2F0Y2hkb2dfbWlzY2Rldi5taW5vciA9IHdhdGNoZG9nX21pbm9yc1tpXTsKKworCQllcnIgPSBtaXNjX3JlZ2lzdGVyKCZkYXRhLT53YXRjaGRvZ19taXNjZGV2KTsKKwkJaWYgKGVyciA9PSAtRUJVU1kpCisJCQljb250aW51ZTsKKwkJaWYgKGVycikgeworCQkJZGF0YS0+d2F0Y2hkb2dfbWlzY2Rldi5taW5vciA9IDA7CisJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwKKwkJCQkiUmVnaXN0ZXJpbmcgd2F0Y2hkb2cgY2hhcmRldjogJWRcbiIsIGVycik7CisJCQlicmVhazsKKwkJfQorCisJCWxpc3RfYWRkKCZkYXRhLT5saXN0LCAmd2F0Y2hkb2dfZGF0YV9saXN0KTsKKworCQlkZXZfaW5mbygmY2xpZW50LT5kZXYsCisJCQkiUmVnaXN0ZXJlZCB3YXRjaGRvZyBjaGFyZGV2IG1ham9yIDEwLCBtaW5vcjogJWRcbiIsCisJCQl3YXRjaGRvZ19taW5vcnNbaV0pOworCQlicmVhazsKKwl9CisJaWYgKGkgPT0gQVJSQVlfU0laRSh3YXRjaGRvZ19taW5vcnMpKSB7CisJCWRhdGEtPndhdGNoZG9nX21pc2NkZXYubWlub3IgPSAwOworCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJDb3VsZG4ndCByZWdpc3RlciB3YXRjaGRvZyBjaGFyZGV2ICIKKwkJCSIoZHVlIHRvIG5vIGZyZWUgbWlub3IpXG4iKTsKKwl9CisKKwltdXRleF91bmxvY2soJndhdGNoZG9nX2RhdGFfbXV0ZXgpOworCiAJcmV0dXJuIDA7CiAKKwkvKiBVbnJlZ2lzdGVyIGh3bW9uIGRldmljZSAqLworCitleGl0X2RldnVucmVnOgorCisJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+aHdtb25fZGV2KTsKKwogCS8qIFVucmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KIAogZXhpdF9yZW1vdmU6CkBAIC0xNjI4LDcgKzIxMDQsNyBAQAogCWkyY19kZWxfZHJpdmVyKCZ3ODM3OTNfZHJpdmVyKTsKIH0KIAotTU9EVUxFX0FVVEhPUigiWXVhbiBNdSIpOworTU9EVUxFX0FVVEhPUigiWXVhbiBNdSwgU3ZlbiBBbmRlcnMiKTsKIE1PRFVMRV9ERVNDUklQVElPTigidzgzNzkzIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9LY29uZmlnIGIvZHJpdmVycy9pMmMvS2NvbmZpZwppbmRleCA4ZDhhMDBlLi4wMmNlOWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL0tjb25maWcKQEAgLTYxLDYgKzYxLDE2IEBACiAKIAkgIEluIGRvdWJ0LCBzYXkgWS4KIAorY29uZmlnIEkyQ19TTUJVUworCXRyaXN0YXRlICJTTUJ1cy1zcGVjaWZpYyBwcm90b2NvbHMiIGlmICFJMkNfSEVMUEVSX0FVVE8KKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIFNNQnVzIGV4dGVuc2lvbnMgdG8gdGhlIEkyQworCSAgc3BlY2lmaWNhdGlvbi4gQXQgdGhlIG1vbWVudCwgdGhlIG9ubHkgc3VwcG9ydGVkIGV4dGVuc2lvbiBpcworCSAgdGhlIFNNQnVzIGFsZXJ0IHByb3RvY29sLgorCisJICBUaGlzIHN1cHBvcnQgaXMgYWxzbyBhdmFpbGFibGUgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgaTJjLXNtYnVzLgorCiBzb3VyY2UgZHJpdmVycy9pMmMvYWxnb3MvS2NvbmZpZwogc291cmNlIGRyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCiBzb3VyY2UgZHJpdmVycy9pMmMvY2hpcHMvS2NvbmZpZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvTWFrZWZpbGUgYi9kcml2ZXJzL2kyYy9NYWtlZmlsZQppbmRleCBiYTI2ZTZjLi5hY2QwMjUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAKIAogb2JqLSQoQ09ORklHX0kyQ19CT0FSRElORk8pCSs9IGkyYy1ib2FyZGluZm8ubwogb2JqLSQoQ09ORklHX0kyQykJCSs9IGkyYy1jb3JlLm8KK29iai0kKENPTkZJR19JMkNfU01CVVMpCQkrPSBpMmMtc21idXMubwogb2JqLSQoQ09ORklHX0kyQ19DSEFSREVWKQkrPSBpMmMtZGV2Lm8KIG9iai15CQkJCSs9IGJ1c3Nlcy8gY2hpcHMvIGFsZ29zLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2EuYyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjYS5jCmluZGV4IDc4ZDQyYWEuLmRjZGFmOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjYS5jCisrKyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjYS5jCkBAIC00NTMsOCArNDUzLDYgQEAKIAkJICovCiAJCWludCByYWlzZV9mYWxsX3RpbWU7CiAKLQkJc3RydWN0IGkyY19hbGdvX3BjYV9kYXRhICpwY2FfZGF0YSA9IGFkYXAtPmFsZ29fZGF0YTsKLQogCQkvKiBJZ25vcmUgdGhlIHJlc2V0IGZ1bmN0aW9uIGZyb20gdGhlIG1vZHVsZSwKIAkJICogd2UgY2FuIHVzZSB0aGUgcGFyYWxsZWwgYnVzIHJlc2V0CiAJCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNmLmMgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2YuYwppbmRleCA3Y2U3NTc3Li42YjZiZDA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2YuYworKysgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2YuYwpAQCAtMTc2LDcgKzE3Niw3IEBACiAJICovCiAJaWYgKCgodGVtcCA9IGdldF9wY2YoYWRhcCwgMSkpICYgMHg3ZikgIT0gKDApKSB7CiAJCURFQjIocHJpbnRrKEtFUk5fRVJSICJpMmMtYWxnby1wY2YubzogUENGIGRldGVjdGlvbiBmYWlsZWQgLS0gY2FuJ3Qgc2VsZWN0IFMwICgweCUwMngpLlxuIiwgdGVtcCkpOwotCQlyZXR1cm4gLUVOWElPOyAvKiBkZWZpbmV0bHkgbm90IFBDRjg1ODQgKi8KKwkJcmV0dXJuIC1FTlhJTzsgLyogZGVmaW5pdGVseSBub3QgUENGODU4NCAqLwogCX0KIAogCS8qIGxvYWQgb3duIGFkZHJlc3MgaW4gUzAsIGVmZmVjdGl2ZSBhZGRyZXNzIGlzIChvd24gPDwgMSkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKaW5kZXggNzM3ZjA1Mi4uOWM2MTcwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL0tjb25maWcKQEAgLTc3LDcgKzc3LDcgQEAKIAkgIHdpbGwgYmUgY2FsbGVkIGkyYy1hbWQ4MTExLgogCiBjb25maWcgSTJDX0k4MDEKLQl0cmlzdGF0ZSAiSW50ZWwgODI4MDEgKElDSCkiCisJdHJpc3RhdGUgIkludGVsIDgyODAxIChJQ0gvUENIKSIKIAlkZXBlbmRzIG9uIFBDSQogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIHRvIHRoaXMgb3B0aW9uLCBzdXBwb3J0IHdpbGwgYmUgaW5jbHVkZWQgZm9yIHRoZSBJbnRlbApAQCAtOTcsNyArOTcsOCBAQAogCSAgICBJQ0g5CiAJICAgIFRvbGFwYWkKIAkgICAgSUNIMTAKLQkgICAgUENICisJICAgIDM0MDAvNSBTZXJpZXMgKFBDSCkKKwkgICAgQ291Z2FyIFBvaW50IChQQ0gpCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGkyYy1pODAxLgpAQCAtMTA1LDYgKzEwNiw4IEBACiBjb25maWcgSTJDX0lTQ0gKIAl0cmlzdGF0ZSAiSW50ZWwgU0NIIFNNQnVzIDEuMCIKIAlkZXBlbmRzIG9uIFBDSQorCXNlbGVjdCBNRkRfQ09SRQorCXNlbGVjdCBMUENfU0NICiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgU01CdXMgY29udHJvbGxlciBvbiB0aGUgSW50ZWwgU0NICiAJICBiYXNlZCBzeXN0ZW1zLgpAQCAtNDE4LDEzICs0MjEsMTIgQEAKIAkgIGluc3RlYWQuCiAKIGNvbmZpZyBJMkNfTVBDCi0JdHJpc3RhdGUgIk1QQzEwNy84MjR4Lzg1eHgvNTJ4eC84Nnh4IgorCXRyaXN0YXRlICJNUEMxMDcvODI0eC84NXh4LzUxMngvNTJ4eC84M3h4Lzg2eHgiCiAJZGVwZW5kcyBvbiBQUEMzMgogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIHRvIHRoaXMgb3B0aW9uLCBzdXBwb3J0IHdpbGwgYmUgaW5jbHVkZWQgZm9yIHRoZQotCSAgYnVpbHQtaW4gSTJDIGludGVyZmFjZSBvbiB0aGUgTVBDMTA3L1RzaTEwNy9NUEM4MjQwL01QQzgyNDUgYW5kCi0JICBNUEM4NXh4L01QQzg2NDEgZmFtaWx5IHByb2Nlc3NvcnMuIFRoZSBkcml2ZXIgbWF5IGFsc28gd29yayBvbiA1Mnh4Ci0JICBmYW1pbHkgcHJvY2Vzc29ycywgdGhvdWdoIGludGVycnVwdHMgYXJlIGtub3duIG5vdCB0byB3b3JrLgorCSAgYnVpbHQtaW4gSTJDIGludGVyZmFjZSBvbiB0aGUgTVBDMTA3LCBUc2kxMDcsIE1QQzUxMngsIE1QQzUyeHgsCisJICBNUEM4MjQwLCBNUEM4MjQ1LCBNUEM4M3h4LCBNUEM4NXh4IGFuZCBNUEM4NjQxIGZhbWlseSBwcm9jZXNzb3JzLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBpMmMtbXBjLgpAQCAtNDM5LDYgKzQ0MSwxMyBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgaTJjLW12NjR4eHguCiAKK2NvbmZpZyBJMkNfTk9NQURJSworCXRyaXN0YXRlICJTVC1Fcmljc3NvbiBOb21hZGlrL1V4NTAwIEkyQyBDb250cm9sbGVyIgorCWRlcGVuZHMgb24gUExBVF9OT01BRElLCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgdG8gdGhpcyBvcHRpb24sIHN1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBmb3IgdGhlCisJICBJMkMgaW50ZXJmYWNlIGZyb20gU1QtRXJpY3Nzb24ncyBOb21hZGlrIGFuZCBVeDUwMCBhcmNoaXRlY3R1cmVzLgorCiBjb25maWcgSTJDX09DT1JFUwogCXRyaXN0YXRlICJPcGVuQ29yZXMgSTJDIENvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKQEAgLTU3NCwxMiArNTgzLDIzIEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBpMmMtb2N0ZW9uLgogCitjb25maWcgSTJDX1hJTElOWAorCXRyaXN0YXRlICJYaWxpbnggSTJDIENvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgSEFTX0lPTUVNCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgdG8gdGhpcyBvcHRpb24sIHN1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBmb3IgdGhlCisJICBYaWxpbnggSTJDIGNvbnRyb2xsZXIuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHhpbGlueF9pMmMuCisKIGNvbW1lbnQgIkV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMiCiAKIGNvbmZpZyBJMkNfUEFSUE9SVAogCXRyaXN0YXRlICJQYXJhbGxlbCBwb3J0IGFkYXB0ZXIiCiAJZGVwZW5kcyBvbiBQQVJQT1JUCiAJc2VsZWN0IEkyQ19BTEdPQklUCisJc2VsZWN0IEkyQ19TTUJVUwogCWhlbHAKIAkgIFRoaXMgc3VwcG9ydHMgcGFyYWxsZWwgcG9ydCBJMkMgYWRhcHRlcnMgc3VjaCBhcyB0aGUgb25lcyBtYWRlIGJ5CiAJICBQaGlsaXBzIG9yIFZlbGxlbWFuLCBBbmFsb2cgRGV2aWNlcyBldmFsdWF0aW9uIGJvYXJkcywgYW5kIG1vcmUuCkBAIC02MDMsNiArNjIzLDcgQEAKIGNvbmZpZyBJMkNfUEFSUE9SVF9MSUdIVAogCXRyaXN0YXRlICJQYXJhbGxlbCBwb3J0IGFkYXB0ZXIgKGxpZ2h0KSIKIAlzZWxlY3QgSTJDX0FMR09CSVQKKwlzZWxlY3QgSTJDX1NNQlVTCiAJaGVscAogCSAgVGhpcyBzdXBwb3J0cyBwYXJhbGxlbCBwb3J0IEkyQyBhZGFwdGVycyBzdWNoIGFzIHRoZSBvbmVzIG1hZGUgYnkKIAkgIFBoaWxpcHMgb3IgVmVsbGVtYW4sIEFuYWxvZyBEZXZpY2VzIGV2YWx1YXRpb24gYm9hcmRzLCBhbmQgbW9yZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZSBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQppbmRleCBjMmM0ZWExLi4wOTcyMzZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCkBAIC00Miw2ICs0Miw3IEBACiBvYmotJChDT05GSUdfSTJDX0lYUDIwMDApCSs9IGkyYy1peHAyMDAwLm8KIG9iai0kKENPTkZJR19JMkNfTVBDKQkJKz0gaTJjLW1wYy5vCiBvYmotJChDT05GSUdfSTJDX01WNjRYWFgpCSs9IGkyYy1tdjY0eHh4Lm8KK29iai0kKENPTkZJR19JMkNfTk9NQURJSykJKz0gaTJjLW5vbWFkaWsubwogb2JqLSQoQ09ORklHX0kyQ19PQ09SRVMpCSs9IGkyYy1vY29yZXMubwogb2JqLSQoQ09ORklHX0kyQ19PTUFQKQkJKz0gaTJjLW9tYXAubwogb2JqLSQoQ09ORklHX0kyQ19QQVNFTUkpCSs9IGkyYy1wYXNlbWkubwpAQCAtNTUsNiArNTYsNyBAQAogb2JqLSQoQ09ORklHX0kyQ19TVFUzMDApCSs9IGkyYy1zdHUzMDAubwogb2JqLSQoQ09ORklHX0kyQ19WRVJTQVRJTEUpCSs9IGkyYy12ZXJzYXRpbGUubwogb2JqLSQoQ09ORklHX0kyQ19PQ1RFT04pCSs9IGkyYy1vY3Rlb24ubworb2JqLSQoQ09ORklHX0kyQ19YSUxJTlgpCSs9IGkyYy14aWljLm8KIAogIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCiBvYmotJChDT05GSUdfSTJDX1BBUlBPUlQpCSs9IGkyYy1wYXJwb3J0Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTUzNS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTM1LmMKaW5kZXggOGRlN2Q3Yi4uYmQ4ZjFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTM1LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTM1LmMKQEAgLTQ4MCw3ICs0ODAsNyBAQAogCS5hbGdvCQk9ICZzbWJ1c19hbGdvcml0aG0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWxpMTUzNV9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbGkxNTM1X2lkc1tdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FMLCBQQ0lfREVWSUNFX0lEX0FMX003MTAxKSB9LAogCXsgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1NjMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTU2My5jCmluZGV4IDQ2ODdhZjQuLmE0MDljZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTU2My5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTU2My5jCkBAIC00MTcsNyArNDE3LDcgQEAKIAlhbGkxNTYzX3NodXRkb3duKGRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2RldmluaXRkYXRhIGFsaTE1NjNfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbGkxNTYzX2lkX3RhYmxlW10gX19kZXZpbml0Y29uc3QgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTE1NjMpIH0sCiAJe30sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNXgzLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMuYwppbmRleCBlN2UzMjA1Li42NTlmNjNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMuYwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJLmFsZ28JCT0gJnNtYnVzX2FsZ29yaXRobSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbGkxNXgzX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFsaTE1eDNfaWRzW10gPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTcxMDEpIH0sCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMKaW5kZXggOGYwYjkwZS4uYzVhOWZhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jCkBAIC0zMDgsNyArMzA4LDcgQEAKIAkiblZpZGlhIG5Gb3JjZSIsICJBTUQ4MTExIiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbWQ3NTZfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYW1kNzU2X2lkc1tdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQwQiksCiAJICAuZHJpdmVyX2RhdGEgPSBBTUQ3NTYgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX1ZJUEVSXzc0MTMpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ4MTExLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEuYwppbmRleCA1YjRhZDg2Li5kMGRjOTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEuYwpAQCAtMzUxLDcgKzM1MSw3IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbWQ4MTExX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFtZDgxMTFfaWRzW10gPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF84MTExX1NNQlVTMikgfSwKIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWRlc2lnbndhcmUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGVzaWdud2FyZS5jCmluZGV4IDllMThlZjkuLjNlNzJiNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGVzaWdud2FyZS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZGVzaWdud2FyZS5jCkBAIC00OTcsMTMgKzQ5NywxMyBAQAogCWludCBpOwogCiAJaWYgKGFib3J0X3NvdXJjZSAmIERXX0lDX1RYX0FCUlRfTk9BQ0spIHsKLQkJZm9yX2VhY2hfYml0KGksICZhYm9ydF9zb3VyY2UsIEFSUkFZX1NJWkUoYWJvcnRfc291cmNlcykpCisJCWZvcl9lYWNoX3NldF9iaXQoaSwgJmFib3J0X3NvdXJjZSwgQVJSQVlfU0laRShhYm9ydF9zb3VyY2VzKSkKIAkJCWRldl9kYmcoZGV2LT5kZXYsCiAJCQkJIiVzOiAlc1xuIiwgX19mdW5jX18sIGFib3J0X3NvdXJjZXNbaV0pOwogCQlyZXR1cm4gLUVSRU1PVEVJTzsKIAl9CiAKLQlmb3JfZWFjaF9iaXQoaSwgJmFib3J0X3NvdXJjZSwgQVJSQVlfU0laRShhYm9ydF9zb3VyY2VzKSkKKwlmb3JfZWFjaF9zZXRfYml0KGksICZhYm9ydF9zb3VyY2UsIEFSUkFZX1NJWkUoYWJvcnRfc291cmNlcykpCiAJCWRldl9lcnIoZGV2LT5kZXYsICIlczogJXNcbiIsIF9fZnVuY19fLCBhYm9ydF9zb3VyY2VzW2ldKTsKIAogCWlmIChhYm9ydF9zb3VyY2UgJiBEV19JQ19UWF9BUkJfTE9TVCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaHlkcmEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaHlkcmEuYwppbmRleCBiZWM5Yjg0Li5jNzY3Mjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWh5ZHJhLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1oeWRyYS5jCkBAIC0xMDUsNyArMTA1LDcgQEAKIAkuYWxnb19kYXRhCT0gJmh5ZHJhX2JpdF9kYXRhLAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGh5ZHJhX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGh5ZHJhX2lkc1tdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FQUExFLCBQQ0lfREVWSUNFX0lEX0FQUExFX0hZRFJBKSB9LAogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pODAxLmMKaW5kZXggZGY2YWI1NTMuLjlkYTViMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCkBAIC00MSw3ICs0MSw4IEBACiAgIFRvbGFwYWkgICAgICAgICAgICAgICAweDUwMzIgICAgIDMyICAgICBoYXJkICAgICB5ZXMgICAgIHllcyAgICAgeWVzCiAgIElDSDEwICAgICAgICAgICAgICAgICAweDNhMzAgICAgIDMyICAgICBoYXJkICAgICB5ZXMgICAgIHllcyAgICAgeWVzCiAgIElDSDEwICAgICAgICAgICAgICAgICAweDNhNjAgICAgIDMyICAgICBoYXJkICAgICB5ZXMgICAgIHllcyAgICAgeWVzCi0gIFBDSCAgICAgICAgICAgICAgICAgICAweDNiMzAgICAgIDMyICAgICBoYXJkICAgICB5ZXMgICAgIHllcyAgICAgeWVzCisgIDM0MDAvNSBTZXJpZXMgKFBDSCkgICAweDNiMzAgICAgIDMyICAgICBoYXJkICAgICB5ZXMgICAgIHllcyAgICAgeWVzCisgIENvdWdhciBQb2ludCAoUENIKSAgICAweDFjMjIgICAgIDMyICAgICBoYXJkICAgICB5ZXMgICAgIHllcyAgICAgeWVzCiAKICAgRmVhdHVyZXMgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyOgogICBTb2Z0d2FyZSBQRUMgICAgICAgICAgICAgICAgICAgICBubwpAQCAtNTYxLDcgKzU2Miw3IEBACiAJLmFsZ28JCT0gJnNtYnVzX2FsZ29yaXRobSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpODAxX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGk4MDFfaWRzW10gPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV8zKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUJfMykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUJBXzIpIH0sCkBAIC01NzgsNiArNTc5LDcgQEAKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0gxMF80KSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDEwXzUpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfUENIX1NNQlVTKSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMX0NQVF9TTUJVUykgfSwKIAl7IDAsIH0KIH07CiAKQEAgLTcwNyw2ICs3MDksNyBAQAogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0gxMF80OgogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0gxMF81OgogCWNhc2UgUENJX0RFVklDRV9JRF9JTlRFTF9QQ0hfU01CVVM6CisJY2FzZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0NQVF9TTUJVUzoKIAkJaTgwMV9mZWF0dXJlcyB8PSBGRUFUVVJFX0kyQ19CTE9DS19SRUFEOwogCQkvKiBmYWxsIHRocm91Z2ggKi8KIAljYXNlIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8zOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pbXguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW14LmMKaW5kZXggNzViZjgyMC4uMzIzNzViZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pbXguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlteC5jCkBAIC02MjcsNyArNjI3LDYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgaTJjX2lteF9kcml2ZXIgPSB7Ci0JLnByb2JlCQk9IGkyY19pbXhfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2V4aXRfcChpMmNfaW14X3JlbW92ZSksCiAJLmRyaXZlcgk9IHsKIAkJLm5hbWUJPSBEUklWRVJfTkFNRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXNjaC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMKaW5kZXggZGJhNmViMC4uZGRjMjU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pc2NoLmMKQEAgLTI3LDcgKzI3LDcgQEAKICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgpAQCAtNDYsMTIgKzQ2LDYgQEAKICNkZWZpbmUgU01CSFNUREFUMQkoNyArIHNjaF9zbWJhKQogI2RlZmluZSBTTUJCTEtEQVQJKDB4MjAgKyBzY2hfc21iYSkKIAotLyogY291bnQgZm9yIHJlcXVlc3RfcmVnaW9uICovCi0jZGVmaW5lIFNNQklPU0laRQk2NAotCi0vKiBQQ0kgQWRkcmVzcyBDb25zdGFudHMgKi8KLSNkZWZpbmUgU01CQkFfU0NICTB4NDAKLQogLyogT3RoZXIgc2V0dGluZ3MgKi8KICNkZWZpbmUgTUFYX1RJTUVPVVQJNTAwCiAKQEAgLTYzLDcgKzU3LDYgQEAKICNkZWZpbmUgU0NIX0JMT0NLX0RBVEEJCTB4MDUKIAogc3RhdGljIHVuc2lnbmVkIHNob3J0IHNjaF9zbWJhOwotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNjaF9kcml2ZXI7CiBzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIHNjaF9hZGFwdGVyOwogCiAvKgpAQCAtMjU2LDM3ICsyNDksMjMgQEAKIAkuYWxnbwkJPSAmc21idXNfYWxnb3JpdGhtLAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNjaF9pZHNbXSA9IHsKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9TQ0hfTFBDKSB9LAotCXsgMCwgfQotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHNjaF9pZHMpOwotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzY2hfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwKLQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbWJ1c19zY2hfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogeworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWludCByZXR2YWw7Ci0JdW5zaWduZWQgaW50IHNtYmE7CiAKLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBTTUJCQV9TQ0gsICZzbWJhKTsKLQlpZiAoIShzbWJhICYgKDEgPDwgMzEpKSkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIlNNQnVzIEkvTyBzcGFjZSBkaXNhYmxlZCFcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CisJaWYgKCFyZXMpCisJCXJldHVybiAtRUJVU1k7CiAKLQlzY2hfc21iYSA9ICh1bnNpZ25lZCBzaG9ydClzbWJhOwotCWlmIChzY2hfc21iYSA9PSAwKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiU01CdXMgYmFzZSBhZGRyZXNzIHVuaW5pdGlhbGl6ZWQhXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCWlmIChhY3BpX2NoZWNrX3JlZ2lvbihzY2hfc21iYSwgU01CSU9TSVpFLCBzY2hfZHJpdmVyLm5hbWUpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKHNjaF9zbWJhLCBTTUJJT1NJWkUsIHNjaF9kcml2ZXIubmFtZSkpIHsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgZGV2LT5uYW1lKSkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgIlNNQnVzIHJlZ2lvbiAweCV4IGFscmVhZHkgaW4gdXNlIVxuIiwKIAkJCXNjaF9zbWJhKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CisKKwlzY2hfc21iYSA9IHJlcy0+c3RhcnQ7CisKIAlkZXZfZGJnKCZkZXYtPmRldiwgIlNNQkEgPSAweCVYXG4iLCBzY2hfc21iYSk7CiAKIAkvKiBzZXQgdXAgdGhlIHN5c2ZzIGxpbmthZ2UgdG8gb3VyIHBhcmVudCBkZXZpY2UgKi8KQEAgLTI5OCwzNyArMjc3LDQzIEBACiAJcmV0dmFsID0gaTJjX2FkZF9hZGFwdGVyKCZzY2hfYWRhcHRlcik7CiAJaWYgKHJldHZhbCkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgIkNvdWxkbid0IHJlZ2lzdGVyIGFkYXB0ZXIhXG4iKTsKLQkJcmVsZWFzZV9yZWdpb24oc2NoX3NtYmEsIFNNQklPU0laRSk7CisJCXJlbGVhc2VfcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJCXNjaF9zbWJhID0gMDsKIAl9CiAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgc2NoX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgc21idXNfc2NoX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCWlmIChzY2hfc21iYSkgewogCQlpMmNfZGVsX2FkYXB0ZXIoJnNjaF9hZGFwdGVyKTsKLQkJcmVsZWFzZV9yZWdpb24oc2NoX3NtYmEsIFNNQklPU0laRSk7CisJCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lPLCAwKTsKKwkJcmVsZWFzZV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAkJc2NoX3NtYmEgPSAwOwogCX0KKworCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgc2NoX2RyaXZlciA9IHsKLQkubmFtZQkJPSAiaXNjaF9zbWJ1cyIsCi0JLmlkX3RhYmxlCT0gc2NoX2lkcywKLQkucHJvYmUJCT0gc2NoX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc2NoX3JlbW92ZSksCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzbWJ1c19zY2hfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gImlzY2hfc21idXMiLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQkJPSBzbWJ1c19zY2hfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzbWJ1c19zY2hfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGkyY19zY2hfaW5pdCh2b2lkKQogewotCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZzY2hfZHJpdmVyKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzbWJ1c19zY2hfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGkyY19zY2hfZXhpdCh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc2NoX2RyaXZlcik7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNtYnVzX3NjaF9kcml2ZXIpOwogfQogCiBNT0RVTEVfQVVUSE9SKCJKYWNvYiBQYW4gPGphY29iLmp1bi5wYW5AaW50ZWwuY29tPiIpOwpAQCAtMzM3LDMgKzMyMiw0IEBACiAKIG1vZHVsZV9pbml0KGkyY19zY2hfaW5pdCk7CiBtb2R1bGVfZXhpdChpMmNfc2NoX2V4aXQpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTppc2NoX3NtYnVzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYwppbmRleCBmNjI3MDAxLi43OGExNWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKQEAgLTMxLDYgKzMxLDkgQEAKIAogI2RlZmluZSBEUlZfTkFNRSAibXBjLWkyYyIKIAorI2RlZmluZSBNUENfSTJDX0NMT0NLX0xFR0FDWSAgIDAKKyNkZWZpbmUgTVBDX0kyQ19DTE9DS19QUkVTRVJWRSAofjBVKQorCiAjZGVmaW5lIE1QQ19JMkNfRkRSICAgMHgwNAogI2RlZmluZSBNUENfSTJDX0NSICAgIDB4MDgKICNkZWZpbmUgTVBDX0kyQ19TUiAgICAweDBjCkBAIC02NiwxMCArNjksOSBAQAogCXUxNiBmZHI7CS8qIGluY2x1ZGluZyBkZnNyciAqLwogfTsKIAotc3RydWN0IG1wY19pMmNfbWF0Y2hfZGF0YSB7Ci0Jdm9pZCAoKnNldGNsb2NrKShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCi0JCQkgc3RydWN0IG1wY19pMmMgKmkyYywKLQkJCSB1MzIgY2xvY2ssIHUzMiBwcmVzY2FsZXIpOworc3RydWN0IG1wY19pMmNfZGF0YSB7CisJdm9pZCAoKnNldHVwKShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIHN0cnVjdCBtcGNfaTJjICppMmMsCisJCSAgICAgIHUzMiBjbG9jaywgdTMyIHByZXNjYWxlcik7CiAJdTMyIHByZXNjYWxlcjsKIH07CiAKQEAgLTE2NCw4ICsxNjYsOCBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1BQQ19NUEM1Mnh4Ci1zdGF0aWMgY29uc3Qgc3RydWN0IG1wY19pMmNfZGl2aWRlciBtcGNfaTJjX2RpdmlkZXJzXzUyeHhbXSA9IHsKKyNpZiBkZWZpbmVkKENPTkZJR19QUENfTVBDNTJ4eCkgfHwgZGVmaW5lZChDT05GSUdfUFBDX01QQzUxMngpCitzdGF0aWMgY29uc3Qgc3RydWN0IG1wY19pMmNfZGl2aWRlciBtcGNfaTJjX2RpdmlkZXJzXzUyeHhbXSBfX2RldmluaXRjb25zdCA9IHsKIAl7MjAsIDB4MjB9LCB7MjIsIDB4MjF9LCB7MjQsIDB4MjJ9LCB7MjYsIDB4MjN9LAogCXsyOCwgMHgyNH0sIHszMCwgMHgwMX0sIHszMiwgMHgyNX0sIHszNCwgMHgwMn0sCiAJezM2LCAweDI2fSwgezQwLCAweDI3fSwgezQ0LCAweDA0fSwgezQ4LCAweDI4fSwKQEAgLTE4NiwxNCArMTg4LDE1IEBACiAJezEwMjQwLCAweDlkfSwgezEyMjg4LCAweDllfSwgezE1MzYwLCAweDlmfQogfTsKIAotaW50IG1wY19pMmNfZ2V0X2Zkcl81Mnh4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgdTMyIGNsb2NrLCBpbnQgcHJlc2NhbGVyKQorc3RhdGljIGludCBfX2RldmluaXQgbXBjX2kyY19nZXRfZmRyXzUyeHgoc3RydWN0IGRldmljZV9ub2RlICpub2RlLCB1MzIgY2xvY2ssCisJCQkJCSAgaW50IHByZXNjYWxlcikKIHsKIAljb25zdCBzdHJ1Y3QgbXBjX2kyY19kaXZpZGVyICpkaXYgPSBOVUxMOwogCXVuc2lnbmVkIGludCBwdnIgPSBtZnNwcihTUFJOX1BWUik7CiAJdTMyIGRpdmlkZXI7CiAJaW50IGk7CiAKLQlpZiAoIWNsb2NrKQorCWlmIChjbG9jayA9PSBNUENfSTJDX0NMT0NLX0xFR0FDWSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBEZXRlcm1pbmUgZGl2aWRlciB2YWx1ZSAqLwpAQCAtMjE1LDEyICsyMTgsMTggQEAKIAlyZXR1cm4gZGl2ID8gKGludClkaXYtPmZkciA6IC1FSU5WQUw7CiB9CiAKLXN0YXRpYyB2b2lkIG1wY19pMmNfc2V0Y2xvY2tfNTJ4eChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCi0JCQkJICBzdHJ1Y3QgbXBjX2kyYyAqaTJjLAotCQkJCSAgdTMyIGNsb2NrLCB1MzIgcHJlc2NhbGVyKQorc3RhdGljIHZvaWQgX19kZXZpbml0IG1wY19pMmNfc2V0dXBfNTJ4eChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJCSBzdHJ1Y3QgbXBjX2kyYyAqaTJjLAorCQkJCQkgdTMyIGNsb2NrLCB1MzIgcHJlc2NhbGVyKQogewogCWludCByZXQsIGZkcjsKIAorCWlmIChjbG9jayA9PSBNUENfSTJDX0NMT0NLX1BSRVNFUlZFKSB7CisJCWRldl9kYmcoaTJjLT5kZXYsICJ1c2luZyBmZHIgJWRcbiIsCisJCQlyZWFkYihpMmMtPmJhc2UgKyBNUENfSTJDX0ZEUikpOworCQlyZXR1cm47CisJfQorCiAJcmV0ID0gbXBjX2kyY19nZXRfZmRyXzUyeHgobm9kZSwgY2xvY2ssIHByZXNjYWxlcik7CiAJZmRyID0gKHJldCA+PSAwKSA/IHJldCA6IDB4M2Y7IC8qIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KIApAQCAtMjI5LDE2ICsyMzgsNTIgQEAKIAlpZiAocmV0ID49IDApCiAJCWRldl9pbmZvKGkyYy0+ZGV2LCAiY2xvY2sgJWQgSHogKGZkcj0lZClcbiIsIGNsb2NrLCBmZHIpOwogfQotI2Vsc2UgLyogIUNPTkZJR19QUENfTVBDNTJ4eCAqLwotc3RhdGljIHZvaWQgbXBjX2kyY19zZXRjbG9ja181Mnh4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKLQkJCQkgIHN0cnVjdCBtcGNfaTJjICppMmMsCi0JCQkJICB1MzIgY2xvY2ssIHUzMiBwcmVzY2FsZXIpCisjZWxzZSAvKiAhKENPTkZJR19QUENfTVBDNTJ4eCB8fCBDT05GSUdfUFBDX01QQzUxMngpICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgbXBjX2kyY19zZXR1cF81Mnh4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCQkJIHN0cnVjdCBtcGNfaTJjICppMmMsCisJCQkJCSB1MzIgY2xvY2ssIHUzMiBwcmVzY2FsZXIpCiB7CiB9Ci0jZW5kaWYgLyogQ09ORklHX1BQQ19NUEM1Mnh4Ki8KKyNlbmRpZiAvKiBDT05GSUdfUFBDX01QQzUyeHggfHwgQ09ORklHX1BQQ19NUEM1MTJ4ICovCisKKyNpZmRlZiBDT05GSUdfUFBDX01QQzUxMngKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBtcGNfaTJjX3NldHVwXzUxMngoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJCQkgc3RydWN0IG1wY19pMmMgKmkyYywKKwkJCQkJIHUzMiBjbG9jaywgdTMyIHByZXNjYWxlcikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGVfY3RybDsKKwl2b2lkIF9faW9tZW0gKmN0cmw7CisJY29uc3QgdTMyICpwdmFsOworCXUzMiBpZHg7CisKKwkvKiBFbmFibGUgSTJDIGludGVycnVwdHMgZm9yIG1wYzUxMjEgKi8KKwlub2RlX2N0cmwgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLAorCQkJCQkgICAgImZzbCxtcGM1MTIxLWkyYy1jdHJsIik7CisJaWYgKG5vZGVfY3RybCkgeworCQljdHJsID0gb2ZfaW9tYXAobm9kZV9jdHJsLCAwKTsKKwkJaWYgKGN0cmwpIHsKKwkJCS8qIEludGVycnVwdCBlbmFibGUgYml0cyBmb3IgaTJjLTAvMS8yOiBiaXQgMjQvMjYvMjggKi8KKwkJCXB2YWwgPSBvZl9nZXRfcHJvcGVydHkobm9kZSwgInJlZyIsIE5VTEwpOworCQkJaWR4ID0gKCpwdmFsICYgMHhmZikgLyAweDIwOworCQkJc2V0Yml0czMyKGN0cmwsIDEgPDwgKDI0ICsgaWR4ICogMikpOworCQkJaW91bm1hcChjdHJsKTsKKwkJfQorCQlvZl9ub2RlX3B1dChub2RlX2N0cmwpOworCX0KKworCS8qIFRoZSBjbG9jayBzZXR1cCBmb3IgdGhlIDUyeHggd29ya3MgYWxzbyBmaW5lIGZvciB0aGUgNTEyeCAqLworCW1wY19pMmNfc2V0dXBfNTJ4eChub2RlLCBpMmMsIGNsb2NrLCBwcmVzY2FsZXIpOworfQorI2Vsc2UgLyogQ09ORklHX1BQQ19NUEM1MTJ4ICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgbXBjX2kyY19zZXR1cF81MTJ4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwKKwkJCQkJIHN0cnVjdCBtcGNfaTJjICppMmMsCisJCQkJCSB1MzIgY2xvY2ssIHUzMiBwcmVzY2FsZXIpCit7Cit9CisjZW5kaWYgLyogQ09ORklHX1BQQ19NUEM1MTJ4ICovCiAKICNpZmRlZiBDT05GSUdfRlNMX1NPQwotc3RhdGljIGNvbnN0IHN0cnVjdCBtcGNfaTJjX2RpdmlkZXIgbXBjX2kyY19kaXZpZGVyc184eHh4W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG1wY19pMmNfZGl2aWRlciBtcGNfaTJjX2RpdmlkZXJzXzh4eHhbXSBfX2RldmluaXRjb25zdCA9IHsKIAl7MTYwLCAweDAxMjB9LCB7MTkyLCAweDAxMjF9LCB7MjI0LCAweDAxMjJ9LCB7MjU2LCAweDAxMjN9LAogCXsyODgsIDB4MDEwMH0sIHszMjAsIDB4MDEwMX0sIHszNTIsIDB4MDYwMX0sIHszODQsIDB4MDEwMn0sCiAJezQxNiwgMHgwNjAyfSwgezQ0OCwgMHgwMTI2fSwgezQ4MCwgMHgwMTAzfSwgezUxMiwgMHgwMTI3fSwKQEAgLTI1OCw3ICszMDMsNyBAQAogCXs0OTE1MiwgMHgwMTFlfSwgezYxNDQwLCAweDAxMWZ9CiB9OwogCi11MzIgbXBjX2kyY19nZXRfc2VjX2NmZ184eHh4KHZvaWQpCitzdGF0aWMgdTMyIF9fZGV2aW5pdCBtcGNfaTJjX2dldF9zZWNfY2ZnXzh4eHgodm9pZCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBOVUxMOwogCXUzMiBfX2lvbWVtICpyZWc7CkBAIC0yODcsMTMgKzMzMiwxNCBAQAogCXJldHVybiB2YWw7CiB9CiAKLWludCBtcGNfaTJjX2dldF9mZHJfOHh4eChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsIHUzMiBjbG9jaywgdTMyIHByZXNjYWxlcikKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1wY19pMmNfZ2V0X2Zkcl84eHh4KHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSwgdTMyIGNsb2NrLAorCQkJCQkgIHUzMiBwcmVzY2FsZXIpCiB7CiAJY29uc3Qgc3RydWN0IG1wY19pMmNfZGl2aWRlciAqZGl2ID0gTlVMTDsKIAl1MzIgZGl2aWRlcjsKIAlpbnQgaTsKIAotCWlmICghY2xvY2spCisJaWYgKGNsb2NrID09IE1QQ19JMkNfQ0xPQ0tfTEVHQUNZKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIERldGVybWluZSBwcm9wZXIgZGl2aWRlciB2YWx1ZSAqLwpAQCAtMzIwLDEyICszNjYsMTkgQEAKIAlyZXR1cm4gZGl2ID8gKGludClkaXYtPmZkciA6IC1FSU5WQUw7CiB9CiAKLXN0YXRpYyB2b2lkIG1wY19pMmNfc2V0Y2xvY2tfOHh4eChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCi0JCQkJICBzdHJ1Y3QgbXBjX2kyYyAqaTJjLAotCQkJCSAgdTMyIGNsb2NrLCB1MzIgcHJlc2NhbGVyKQorc3RhdGljIHZvaWQgX19kZXZpbml0IG1wY19pMmNfc2V0dXBfOHh4eChzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCisJCQkJCSBzdHJ1Y3QgbXBjX2kyYyAqaTJjLAorCQkJCQkgdTMyIGNsb2NrLCB1MzIgcHJlc2NhbGVyKQogewogCWludCByZXQsIGZkcjsKIAorCWlmIChjbG9jayA9PSBNUENfSTJDX0NMT0NLX1BSRVNFUlZFKSB7CisJCWRldl9kYmcoaTJjLT5kZXYsICJ1c2luZyBkZnNyciAlZCwgZmRyICVkXG4iLAorCQkJcmVhZGIoaTJjLT5iYXNlICsgTVBDX0kyQ19ERlNSUiksCisJCQlyZWFkYihpMmMtPmJhc2UgKyBNUENfSTJDX0ZEUikpOworCQlyZXR1cm47CisJfQorCiAJcmV0ID0gbXBjX2kyY19nZXRfZmRyXzh4eHgobm9kZSwgY2xvY2ssIHByZXNjYWxlcik7CiAJZmRyID0gKHJldCA+PSAwKSA/IHJldCA6IDB4MTAzMTsgLyogYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLwogCkBAIC0zMzgsOSArMzkxLDkgQEAKIH0KIAogI2Vsc2UgLyogIUNPTkZJR19GU0xfU09DICovCi1zdGF0aWMgdm9pZCBtcGNfaTJjX3NldGNsb2NrXzh4eHgoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAotCQkJCSAgc3RydWN0IG1wY19pMmMgKmkyYywKLQkJCQkgIHUzMiBjbG9jaywgdTMyIHByZXNjYWxlcikKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBtcGNfaTJjX3NldHVwXzh4eHgoc3RydWN0IGRldmljZV9ub2RlICpub2RlLAorCQkJCQkgc3RydWN0IG1wY19pMmMgKmkyYywKKwkJCQkJIHUzMiBjbG9jaywgdTMyIHByZXNjYWxlcikKIHsKIH0KICNlbmRpZiAvKiBDT05GSUdfRlNMX1NPQyAqLwpAQCAtNDk0LDcgKzU0Nyw3IEBACiB7CiAJc3RydWN0IG1wY19pMmMgKmkyYzsKIAljb25zdCB1MzIgKnByb3A7Ci0JdTMyIGNsb2NrID0gMDsKKwl1MzIgY2xvY2sgPSBNUENfSTJDX0NMT0NLX0xFR0FDWTsKIAlpbnQgcmVzdWx0ID0gMDsKIAlpbnQgcGxlbjsKIApAQCAtNTIzLDIxICs1NzYsMjEgQEAKIAkJfQogCX0KIAotCWlmICghb2ZfZ2V0X3Byb3BlcnR5KG9wLT5ub2RlLCAiZnNsLHByZXNlcnZlLWNsb2NraW5nIiwgTlVMTCkpIHsKKwlpZiAob2ZfZ2V0X3Byb3BlcnR5KG9wLT5ub2RlLCAiZnNsLHByZXNlcnZlLWNsb2NraW5nIiwgTlVMTCkpIHsKKwkJY2xvY2sgPSBNUENfSTJDX0NMT0NLX1BSRVNFUlZFOworCX0gZWxzZSB7CiAJCXByb3AgPSBvZl9nZXRfcHJvcGVydHkob3AtPm5vZGUsICJjbG9jay1mcmVxdWVuY3kiLCAmcGxlbik7CiAJCWlmIChwcm9wICYmIHBsZW4gPT0gc2l6ZW9mKHUzMikpCiAJCQljbG9jayA9ICpwcm9wOworCX0KIAotCQlpZiAobWF0Y2gtPmRhdGEpIHsKLQkJCXN0cnVjdCBtcGNfaTJjX21hdGNoX2RhdGEgKmRhdGEgPQotCQkJCShzdHJ1Y3QgbXBjX2kyY19tYXRjaF9kYXRhICopbWF0Y2gtPmRhdGE7Ci0JCQlkYXRhLT5zZXRjbG9jayhvcC0+bm9kZSwgaTJjLCBjbG9jaywgZGF0YS0+cHJlc2NhbGVyKTsKLQkJfSBlbHNlIHsKLQkJCS8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCi0JCQlpZiAob2ZfZ2V0X3Byb3BlcnR5KG9wLT5ub2RlLCAiZGZzcnIiLCBOVUxMKSkKLQkJCQltcGNfaTJjX3NldGNsb2NrXzh4eHgob3AtPm5vZGUsIGkyYywKLQkJCQkJCSAgICAgIGNsb2NrLCAwKTsKLQkJfQorCWlmIChtYXRjaC0+ZGF0YSkgeworCQlzdHJ1Y3QgbXBjX2kyY19kYXRhICpkYXRhID0gbWF0Y2gtPmRhdGE7CisJCWRhdGEtPnNldHVwKG9wLT5ub2RlLCBpMmMsIGNsb2NrLCBkYXRhLT5wcmVzY2FsZXIpOworCX0gZWxzZSB7CisJCS8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCisJCWlmIChvZl9nZXRfcHJvcGVydHkob3AtPm5vZGUsICJkZnNyciIsIE5VTEwpKQorCQkJbXBjX2kyY19zZXR1cF84eHh4KG9wLT5ub2RlLCBpMmMsIGNsb2NrLCAwKTsKIAl9CiAKIAlkZXZfc2V0X2RydmRhdGEoJm9wLT5kZXYsIGkyYyk7CkBAIC01ODIsNDcgKzYzNSw0MiBAQAogCXJldHVybiAwOwogfTsKIAorc3RhdGljIHN0cnVjdCBtcGNfaTJjX2RhdGEgbXBjX2kyY19kYXRhXzUxMnggX19kZXZpbml0ZGF0YSA9IHsKKwkuc2V0dXAgPSBtcGNfaTJjX3NldHVwXzUxMngsCit9OworCitzdGF0aWMgc3RydWN0IG1wY19pMmNfZGF0YSBtcGNfaTJjX2RhdGFfNTJ4eCBfX2RldmluaXRkYXRhID0geworCS5zZXR1cCA9IG1wY19pMmNfc2V0dXBfNTJ4eCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXBjX2kyY19kYXRhIG1wY19pMmNfZGF0YV84MzEzIF9fZGV2aW5pdGRhdGEgPSB7CisJLnNldHVwID0gbXBjX2kyY19zZXR1cF84eHh4LAorfTsKKworc3RhdGljIHN0cnVjdCBtcGNfaTJjX2RhdGEgbXBjX2kyY19kYXRhXzg1NDMgX19kZXZpbml0ZGF0YSA9IHsKKwkuc2V0dXAgPSBtcGNfaTJjX3NldHVwXzh4eHgsCisJLnByZXNjYWxlciA9IDIsCit9OworCitzdGF0aWMgc3RydWN0IG1wY19pMmNfZGF0YSBtcGNfaTJjX2RhdGFfODU0NCBfX2RldmluaXRkYXRhID0geworCS5zZXR1cCA9IG1wY19pMmNfc2V0dXBfOHh4eCwKKwkucHJlc2NhbGVyID0gMywKK307CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wY19pMmNfb2ZfbWF0Y2hbXSA9IHsKLQl7LmNvbXBhdGlibGUgPSAibXBjNTIwMC1pMmMiLAotCSAuZGF0YSA9ICYoc3RydWN0IG1wY19pMmNfbWF0Y2hfZGF0YSkgewotCQkJLnNldGNsb2NrID0gbXBjX2kyY19zZXRjbG9ja181Mnh4LAotCQl9LAotCX0sCi0Jey5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLAotCSAuZGF0YSA9ICYoc3RydWN0IG1wY19pMmNfbWF0Y2hfZGF0YSkgewotCQkJLnNldGNsb2NrID0gbXBjX2kyY19zZXRjbG9ja181Mnh4LAotCQl9LAotCX0sCi0Jey5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWkyYyIsCi0JIC5kYXRhID0gJihzdHJ1Y3QgbXBjX2kyY19tYXRjaF9kYXRhKSB7Ci0JCQkuc2V0Y2xvY2sgPSBtcGNfaTJjX3NldGNsb2NrXzUyeHgsCi0JCX0sCi0JfSwKLQl7LmNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTMtaTJjIiwKLQkgLmRhdGEgPSAmKHN0cnVjdCBtcGNfaTJjX21hdGNoX2RhdGEpIHsKLQkJCS5zZXRjbG9jayA9IG1wY19pMmNfc2V0Y2xvY2tfOHh4eCwKLQkJfSwKLQl9LAotCXsuY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0My1pMmMiLAotCSAuZGF0YSA9ICYoc3RydWN0IG1wY19pMmNfbWF0Y2hfZGF0YSkgewotCQkJLnNldGNsb2NrID0gbXBjX2kyY19zZXRjbG9ja184eHh4LAotCQkJLnByZXNjYWxlciA9IDIsCi0JCX0sCi0JfSwKLQl7LmNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDQtaTJjIiwKLQkgLmRhdGEgPSAmKHN0cnVjdCBtcGNfaTJjX21hdGNoX2RhdGEpIHsKLQkJCS5zZXRjbG9jayA9IG1wY19pMmNfc2V0Y2xvY2tfOHh4eCwKLQkJCS5wcmVzY2FsZXIgPSAzLAotCQl9LAorCXsuY29tcGF0aWJsZSA9ICJtcGM1MjAwLWkyYyIsIC5kYXRhID0gJm1wY19pMmNfZGF0YV81Mnh4LCB9LAorCXsuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwgLmRhdGEgPSAmbXBjX2kyY19kYXRhXzUyeHgsIH0sCisJey5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWkyYyIsIC5kYXRhID0gJm1wY19pMmNfZGF0YV81Mnh4LCB9LAorCXsuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTEyMS1pMmMiLCAuZGF0YSA9ICZtcGNfaTJjX2RhdGFfNTEyeCwgfSwKKwl7LmNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMTMtaTJjIiwgLmRhdGEgPSAmbXBjX2kyY19kYXRhXzgzMTMsIH0sCisJey5jb21wYXRpYmxlID0gImZzbCxtcGM4NTQzLWkyYyIsIC5kYXRhID0gJm1wY19pMmNfZGF0YV84NTQzLCB9LAorCXsuY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0NC1pMmMiLCAuZGF0YSA9ICZtcGNfaTJjX2RhdGFfODU0NCwgfSwKIAkvKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCi0JfSwKIAl7LmNvbXBhdGlibGUgPSAiZnNsLWkyYyIsIH0sCiAJe30sCiB9OwotCiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtcGNfaTJjX29mX21hdGNoKTsKIAotCiAvKiBTdHJ1Y3R1cmUgZm9yIGEgZGV2aWNlIGRyaXZlciAqLwogc3RhdGljIHN0cnVjdCBvZl9wbGF0Zm9ybV9kcml2ZXIgbXBjX2kyY19kcml2ZXIgPSB7CiAJLm1hdGNoX3RhYmxlCT0gbXBjX2kyY19vZl9tYXRjaCwKQEAgLTY1NSw1ICs3MDMsNSBAQAogCiBNT0RVTEVfQVVUSE9SKCJBZHJpYW4gQ294IDxhZHJpYW5AaHVtYm9sZHQuY28udWs+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkkyQy1CdXMgYWRhcHRlciBmb3IgTVBDMTA3IGJyaWRnZSBhbmQgIgotCQkgICAiTVBDODI0eC84NXh4LzUyeHggcHJvY2Vzc29ycyIpOworCQkgICAiTVBDODI0eC84M3h4Lzg1eHgvODZ4eC81MTJ4LzUyeHggcHJvY2Vzc29ycyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1uZm9yY2UyLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5mb3JjZTIuYwppbmRleCBlYzExZDFjLi40YTcwMDU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5mb3JjZTIuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5mb3JjZTIuYwpAQCAtMzA4LDcgKzMwOCw3IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZm9yY2UyX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5mb3JjZTJfaWRzW10gPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UyX1NNQlVTKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFMlNfU01CVVMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfTlZJRElBLCBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UzX1NNQlVTKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1ub21hZGlrLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5vbWFkaWsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTVmNzMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1ub21hZGlrLmMKQEAgLTAsMCArMSw5NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU1QtRXJpY3Nzb24KKyAqIENvcHlyaWdodCAoQykgMjAwOSBTVE1pY3JvZWxlY3Ryb25pY3MKKyAqCisgKiBJMkMgbWFzdGVyIG1vZGUgY29udHJvbGxlciBkcml2ZXIsIHVzZWQgaW4gTm9tYWRpayA4ODE1CisgKiBhbmQgVXg1MDAgcGxhdGZvcm1zLgorICoKKyAqIEF1dGhvcjogU3JpbmlkaGkgS2FzYWdhciA8c3JpbmlkaGkua2FzYWdhckBzdGVyaWNzc29uLmNvbT4KKyAqIEF1dGhvcjogU2FjaGluIFZlcm1hIDxzYWNoaW4udmVybWFAc3QuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiwgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPHBsYXQvaTJjLmg+CisKKyNkZWZpbmUgRFJJVkVSX05BTUUgIm5tay1pMmMiCisKKy8qIEkyQyBDb250cm9sbGVyIHJlZ2lzdGVyIG9mZnNldHMgKi8KKyNkZWZpbmUgSTJDX0NSCQkoMHgwMDApCisjZGVmaW5lIEkyQ19TQ1IJCSgweDAwNCkKKyNkZWZpbmUgSTJDX0hTTUNSCSgweDAwOCkKKyNkZWZpbmUgSTJDX01DUgkJKDB4MDBDKQorI2RlZmluZSBJMkNfVEZSCQkoMHgwMTApCisjZGVmaW5lIEkyQ19TUgkJKDB4MDE0KQorI2RlZmluZSBJMkNfUkZSCQkoMHgwMTgpCisjZGVmaW5lIEkyQ19URlRSCSgweDAxQykKKyNkZWZpbmUgSTJDX1JGVFIJKDB4MDIwKQorI2RlZmluZSBJMkNfRE1BUgkoMHgwMjQpCisjZGVmaW5lIEkyQ19CUkNSCSgweDAyOCkKKyNkZWZpbmUgSTJDX0lNU0NSCSgweDAyQykKKyNkZWZpbmUgSTJDX1JJU1IJKDB4MDMwKQorI2RlZmluZSBJMkNfTUlTUgkoMHgwMzQpCisjZGVmaW5lIEkyQ19JQ1IJCSgweDAzOCkKKworLyogQ29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgSTJDX0NSX1BFCQkoMHgxIDw8IDApCS8qIFBlcmlwaGVyYWwgRW5hYmxlICovCisjZGVmaW5lIEkyQ19DUl9PTQkJKDB4MyA8PCAxKQkvKiBPcGVyYXRpbmcgbW9kZSAqLworI2RlZmluZSBJMkNfQ1JfU0FNCQkoMHgxIDw8IDMpCS8qIFNsYXZlIGFkZHJlc3NpbmcgbW9kZSAqLworI2RlZmluZSBJMkNfQ1JfU00JCSgweDMgPDwgNCkJLyogU3BlZWQgbW9kZSAqLworI2RlZmluZSBJMkNfQ1JfU0dDTQkJKDB4MSA8PCA2KQkvKiBTbGF2ZSBnZW5lcmFsIGNhbGwgbW9kZSAqLworI2RlZmluZSBJMkNfQ1JfRlRYCQkoMHgxIDw8IDcpCS8qIEZsdXNoIFRyYW5zbWl0ICovCisjZGVmaW5lIEkyQ19DUl9GUlgJCSgweDEgPDwgOCkJLyogRmx1c2ggUmVjZWl2ZSAqLworI2RlZmluZSBJMkNfQ1JfRE1BX1RYX0VOCSgweDEgPDwgOSkJLyogRE1BIFR4IGVuYWJsZSAqLworI2RlZmluZSBJMkNfQ1JfRE1BX1JYX0VOCSgweDEgPDwgMTApCS8qIERNQSBSeCBFbmFibGUgKi8KKyNkZWZpbmUgSTJDX0NSX0RNQV9TTEUJCSgweDEgPDwgMTEpCS8qIERNQSBzeW5jLiBsb2dpYyBlbmFibGUgKi8KKyNkZWZpbmUgSTJDX0NSX0xNCQkoMHgxIDw8IDEyKQkvKiBMb29wYmFjayBtb2RlICovCisjZGVmaW5lIEkyQ19DUl9GT04JCSgweDMgPDwgMTMpCS8qIEZpbHRlcmluZyBvbiAqLworI2RlZmluZSBJMkNfQ1JfRlMJCSgweDMgPDwgMTUpCS8qIEZvcmNlIHN0b3AgZW5hYmxlICovCisKKy8qIE1hc3RlciBjb250cm9sbGVyIChNQ1IpIHJlZ2lzdGVyICovCisjZGVmaW5lIEkyQ19NQ1JfT1AJCSgweDEgPDwgMCkJLyogT3BlcmF0aW9uICovCisjZGVmaW5lIEkyQ19NQ1JfQTcJCSgweDdmIDw8IDEpCS8qIDctYml0IGFkZHJlc3MgKi8KKyNkZWZpbmUgSTJDX01DUl9FQTEwCQkoMHg3IDw8IDgpIAkvKiAxMC1iaXQgRXh0ZW5kZWQgYWRkcmVzcyAqLworI2RlZmluZSBJMkNfTUNSX1NCCQkoMHgxIDw8IDExKQkvKiBFeHRlbmRlZCBhZGRyZXNzICovCisjZGVmaW5lIEkyQ19NQ1JfQU0JCSgweDMgPDwgMTIpCS8qIEFkZHJlc3MgdHlwZSAqLworI2RlZmluZSBJMkNfTUNSX1NUT1AJCSgweDEgPDwgMTQpIAkvKiBTdG9wIGNvbmRpdGlvbiAqLworI2RlZmluZSBJMkNfTUNSX0xFTkdUSAkJKDB4N2ZmIDw8IDE1KSAJLyogVHJhbnNhY3Rpb24gbGVuZ3RoICovCisKKy8qIFN0YXR1cyByZWdpc3RlciAoU1IpICovCisjZGVmaW5lIEkyQ19TUl9PUAkJKDB4MyA8PCAwKQkvKiBPcGVyYXRpb24gKi8KKyNkZWZpbmUgSTJDX1NSX1NUQVRVUwkJKDB4MyA8PCAyKQkvKiBjb250cm9sbGVyIHN0YXR1cyAqLworI2RlZmluZSBJMkNfU1JfQ0FVU0UJCSgweDcgPDwgNCkJLyogQWJvcnQgY2F1c2UgKi8KKyNkZWZpbmUgSTJDX1NSX1RZUEUJCSgweDMgPDwgNykJLyogUmVjZWl2ZSB0eXBlICovCisjZGVmaW5lIEkyQ19TUl9MRU5HVEgJCSgweDdmZiA8PCA5KQkvKiBUcmFuc2ZlciBsZW5ndGggKi8KKworLyogSW50ZXJydXB0IG1hc2sgc2V0L2NsZWFyIChJTVNDUikgYml0cyAqLworI2RlZmluZSBJMkNfSVRfVFhGRSAJCSgweDEgPDwgMCkKKyNkZWZpbmUgSTJDX0lUX1RYRk5FCQkoMHgxIDw8IDEpCisjZGVmaW5lIEkyQ19JVF9UWEZGCQkoMHgxIDw8IDIpCisjZGVmaW5lIEkyQ19JVF9UWEZPVlIJCSgweDEgPDwgMykKKyNkZWZpbmUgSTJDX0lUX1JYRkUJCSgweDEgPDwgNCkKKyNkZWZpbmUgSTJDX0lUX1JYRk5GCQkoMHgxIDw8IDUpCisjZGVmaW5lIEkyQ19JVF9SWEZGCQkoMHgxIDw8IDYpCisjZGVmaW5lIEkyQ19JVF9SRlNSCQkoMHgxIDw8IDE2KQorI2RlZmluZSBJMkNfSVRfUkZTRQkJKDB4MSA8PCAxNykKKyNkZWZpbmUgSTJDX0lUX1dUU1IJCSgweDEgPDwgMTgpCisjZGVmaW5lIEkyQ19JVF9NVEQJCSgweDEgPDwgMTkpCisjZGVmaW5lIEkyQ19JVF9TVEQJCSgweDEgPDwgMjApCisjZGVmaW5lIEkyQ19JVF9NQUwJCSgweDEgPDwgMjQpCisjZGVmaW5lIEkyQ19JVF9CRVJSCQkoMHgxIDw8IDI1KQorI2RlZmluZSBJMkNfSVRfTVREV1MJCSgweDEgPDwgMjgpCisKKyNkZWZpbmUgR0VOX01BU0sodmFsLCBtYXNrLCBzYikgICgoKHZhbCkgPDwgKHNiKSkgJiAobWFzaykpCisKKy8qIHNvbWUgYml0cyBpbiBJQ1IgYXJlIHJlc2VydmVkICovCisjZGVmaW5lIEkyQ19DTEVBUl9BTExfSU5UUwkweDEzMWYwMDdmCisKKy8qIGZpcnN0IHRocmVlIG1zYiBiaXRzIGFyZSByZXNlcnZlZCAqLworI2RlZmluZSBJUlFfTUFTSyhtYXNrKQkJKG1hc2sgJiAweDFmZmZmZmZmKQorCisvKiBtYXhpbXVtIHRocmVzaG9sZCB2YWx1ZSAqLworI2RlZmluZSBNQVhfSTJDX0ZJRk9fVEhSRVNIT0xECTE1CisKK2VudW0gaTJjX3N0YXR1cyB7CisJSTJDX05PUCwKKwlJMkNfT05fR09JTkcsCisJSTJDX09LLAorCUkyQ19BQk9SVAorfTsKKworLyogb3BlcmF0aW9uICovCitlbnVtIGkyY19vcGVyYXRpb24geworCUkyQ19OT19PUEVSQVRJT04gPSAweGZmLAorCUkyQ19XUklURSA9IDB4MDAsCisJSTJDX1JFQUQgPSAweDAxCit9OworCisvKiBjb250cm9sbGVyIHJlc3BvbnNlIHRpbWVvdXQgaW4gbXMgKi8KKyNkZWZpbmUgSTJDX1RJTUVPVVRfTVMJNTAwCisKKy8qKgorICogc3RydWN0IGkyY19ubWtfY2xpZW50IC0gY2xpZW50IHNwZWNpZmljIGRhdGEKKyAqIEBzbGF2ZV9hZHI6IDctYml0IHNsYXZlIGFkZHJlc3MKKyAqIEBjb3VudDogbm8uIGJ5dGVzIHRvIGJlIHRyYW5zZmVyZWQKKyAqIEBidWZmZXI6IGNsaWVudCBkYXRhIGJ1ZmZlcgorICogQHhmZXJfYnl0ZXM6IGJ5dGVzIHRyYW5zZmVyZWQgdGlsbCBub3cKKyAqIEBvcGVyYXRpb246IGN1cnJlbnQgSTJDIG9wZXJhdGlvbgorICovCitzdHJ1Y3QgaTJjX25ta19jbGllbnQgeworCXVuc2lnbmVkIHNob3J0CQlzbGF2ZV9hZHI7CisJdW5zaWduZWQgbG9uZwkJY291bnQ7CisJdW5zaWduZWQgY2hhcgkJKmJ1ZmZlcjsKKwl1bnNpZ25lZCBsb25nCQl4ZmVyX2J5dGVzOworCWVudW0gaTJjX29wZXJhdGlvbglvcGVyYXRpb247Cit9OworCisvKioKKyAqIHN0cnVjdCBubWtfaTJjX2RldiAtIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUgb2YgdGhlIGNvbnRyb2xsZXIKKyAqIEBwZGV2OiBwYXJlbnQgcGxhdGZvcm0gZGV2aWNlCisgKiBAYWRhcDogY29ycmVzcG9uZGluZyBJMkMgYWRhcHRlcgorICogQGlycTogaW50ZXJydXB0IGxpbmUgZm9yIHRoZSBjb250cm9sbGVyCisgKiBAdmlydGJhc2U6IHZpcnR1YWwgaW8gbWVtb3J5IGFyZWEKKyAqIEBjbGs6IGhhcmR3YXJlIGkyYyBibG9jayBjbG9jaworICogQGNmZzogbWFjaGluZSBwcm92aWRlZCBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24KKyAqIEBjbGk6IGhvbGRlciBvZiBjbGllbnQgc3BlY2lmaWMgZGF0YQorICogQHN0b3A6IHN0b3AgY29uZGl0aW9uCisgKiBAeGZlcl9jb21wbGV0ZTogYWNrbm93bGVkZ2UgY29tcGxldGlvbiBmb3IgYSBJMkMgbWVzc2FnZQorICogQHJlc3VsdDogY29udHJvbGxlciBwcm9wb2dhdGVkIHJlc3VsdAorICovCitzdHJ1Y3Qgbm1rX2kyY19kZXYgeworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJCSpwZGV2OworCXN0cnVjdCBpMmNfYWRhcHRlciAJCWFkYXA7CisJaW50IAkJCQlpcnE7CisJdm9pZCBfX2lvbWVtCQkJKnZpcnRiYXNlOworCXN0cnVjdCBjbGsJCQkqY2xrOworCXN0cnVjdCBubWtfaTJjX2NvbnRyb2xsZXIJY2ZnOworCXN0cnVjdCBpMmNfbm1rX2NsaWVudAkJY2xpOworCWludCAJCQkJc3RvcDsKKwlzdHJ1Y3QgY29tcGxldGlvbgkJeGZlcl9jb21wbGV0ZTsKKwlpbnQgCQkJCXJlc3VsdDsKK307CisKKy8qIGNvbnRyb2xsZXIncyBhYm9ydCBjYXVzZXMgKi8KK3N0YXRpYyBjb25zdCBjaGFyICphYm9ydF9jYXVzZXNbXSA9IHsKKwkibm8gYWNrIHJlY2VpdmVkIGFmdGVyIGFkZHJlc3MgdHJhbnNtaXNzaW9uIiwKKwkibm8gYWNrIHJlY2VpdmVkIGR1cmluZyBkYXRhIHBoYXNlIiwKKwkiYWNrIHJlY2VpdmVkIGFmdGVyIHhtaXNzaW9uIG9mIG1hc3RlciBjb2RlIiwKKwkibWFzdGVyIGxvc3QgYXJiaXRyYXRpb24iLAorCSJzbGF2ZSByZXN0YXJ0cyIsCisJInNsYXZlIHJlc2V0IiwKKwkib3ZlcmZsb3csIG1heHNpemUgaXMgMjA0NyBieXRlcyIsCit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgaTJjX3NldF9iaXQodm9pZCBfX2lvbWVtICpyZWcsIHUzMiBtYXNrKQoreworCXdyaXRlbChyZWFkbChyZWcpIHwgbWFzaywgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGkyY19jbHJfYml0KHZvaWQgX19pb21lbSAqcmVnLCB1MzIgbWFzaykKK3sKKwl3cml0ZWwocmVhZGwocmVnKSAmIH5tYXNrLCByZWcpOworfQorCisvKioKKyAqIGZsdXNoX2kyY19maWZvKCkgLSBUaGlzIGZ1bmN0aW9uIGZsdXNoZXMgdGhlIEkyQyBGSUZPCisgKiBAZGV2OiBwcml2YXRlIGRhdGEgb2YgSTJDIERyaXZlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZmx1c2hlcyB0aGUgSTJDIFR4IGFuZCBSeCBGSUZPcy4gSXQgcmV0dXJucworICogMCBvbiBzdWNjZXNzZnVsIGZsdXNoaW5nIG9mIEZJRk8KKyAqLworc3RhdGljIGludCBmbHVzaF9pMmNfZmlmbyhzdHJ1Y3Qgbm1rX2kyY19kZXYgKmRldikKK3sKKyNkZWZpbmUgTE9PUF9BVFRFTVBUUyAxMAorCWludCBpOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworCS8qCisJICogZmx1c2ggdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIEZJRk8uIFRoZSBmbHVzaGluZworCSAqIG9wZXJhdGlvbiB0YWtlcyBzZXZlcmFsIGN5Y2xlcyBiZWZvcmUgdG8gYmUgY29tcGxldGVkLgorCSAqIE9uIHRoZSBjb21wbGV0aW9uLCB0aGUgSTJDIGludGVybmFsIGxvZ2ljIGNsZWFycyB0aGVzZQorCSAqIGJpdHMsIHVudGlsIHRoZW4gbm8gb25lIG11c3QgYWNjZXNzIFR4LCBSeCBGSUZPIGFuZAorCSAqIHNob3VsZCBwb2xsIG9uIHRoZXNlIGJpdHMgd2FpdGluZyBmb3IgdGhlIGNvbXBsZXRpb24uCisJICovCisJd3JpdGVsKChJMkNfQ1JfRlRYIHwgSTJDX0NSX0ZSWCksIGRldi0+dmlydGJhc2UgKyBJMkNfQ1IpOworCisJZm9yIChpID0gMDsgaSA8IExPT1BfQVRURU1QVFM7IGkrKykgeworCQl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoSTJDX1RJTUVPVVRfTVMpOworCisJCXdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJaWYgKChyZWFkbChkZXYtPnZpcnRiYXNlICsgSTJDX0NSKSAmCisJCQkJKEkyQ19DUl9GVFggfCBJMkNfQ1JfRlJYKSkgPT0gMCkKKwkJCQkJcmV0dXJuIDA7CisJCX0KKwl9CisKKwlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgImZsdXNoaW5nIG9wZXJhdGlvbiB0aW1lZCBvdXQgIgorCQkiZ2l2aW5nIHVwIGFmdGVyICVkIGF0dGVtcHRzIiwgTE9PUF9BVFRFTVBUUyk7CisKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworLyoqCisgKiBkaXNhYmxlX2FsbF9pbnRlcnJ1cHRzKCkgLSBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIG9mIHRoaXMgSTJjIEJ1cworICogQGRldjogcHJpdmF0ZSBkYXRhIG9mIEkyQyBEcml2ZXIKKyAqLworc3RhdGljIHZvaWQgZGlzYWJsZV9hbGxfaW50ZXJydXB0cyhzdHJ1Y3Qgbm1rX2kyY19kZXYgKmRldikKK3sKKwl1MzIgbWFzayA9IElSUV9NQVNLKDApOworCXdyaXRlbChtYXNrLCBkZXYtPnZpcnRiYXNlICsgSTJDX0lNU0NSKTsKK30KKworLyoqCisgKiBjbGVhcl9hbGxfaW50ZXJydXB0cygpIC0gQ2xlYXIgYWxsIGludGVycnVwdHMgb2YgSTJDIENvbnRyb2xsZXIKKyAqIEBkZXY6IHByaXZhdGUgZGF0YSBvZiBJMkMgRHJpdmVyCisgKi8KK3N0YXRpYyB2b2lkIGNsZWFyX2FsbF9pbnRlcnJ1cHRzKHN0cnVjdCBubWtfaTJjX2RldiAqZGV2KQoreworCXUzMiBtYXNrOworCW1hc2sgPSBJUlFfTUFTSyhJMkNfQ0xFQVJfQUxMX0lOVFMpOworCXdyaXRlbChtYXNrLCBkZXYtPnZpcnRiYXNlICsgSTJDX0lDUik7Cit9CisKKy8qKgorICogaW5pdF9odygpIC0gaW5pdGlhbGl6ZSB0aGUgSTJDIGhhcmR3YXJlCisgKiBAZGV2OiBwcml2YXRlIGRhdGEgb2YgSTJDIERyaXZlcgorICovCitzdGF0aWMgaW50IGluaXRfaHcoc3RydWN0IG5ta19pMmNfZGV2ICpkZXYpCit7CisJaW50IHN0YXQ7CisKKwlzdGF0ID0gZmx1c2hfaTJjX2ZpZm8oZGV2KTsKKwlpZiAoc3RhdCkKKwkJcmV0dXJuIHN0YXQ7CisKKwkvKiBkaXNhYmxlIHRoZSBjb250cm9sbGVyICovCisJaTJjX2Nscl9iaXQoZGV2LT52aXJ0YmFzZSArIEkyQ19DUiAsIEkyQ19DUl9QRSk7CisKKwlkaXNhYmxlX2FsbF9pbnRlcnJ1cHRzKGRldik7CisKKwljbGVhcl9hbGxfaW50ZXJydXB0cyhkZXYpOworCisJZGV2LT5jbGkub3BlcmF0aW9uID0gSTJDX05PX09QRVJBVElPTjsKKworCXJldHVybiAwOworfQorCisvKiBlbmFibGUgcGVyaXBoZXJhbCwgbWFzdGVyIG1vZGUgb3BlcmF0aW9uICovCisjZGVmaW5lIERFRkFVTFRfSTJDX1JFR19DUiAJKCgxIDw8IDEpIHwgSTJDX0NSX1BFKQorCisvKioKKyAqIGxvYWRfaTJjX21jcl9yZWcoKSAtIGxvYWQgdGhlIE1DUiByZWdpc3RlcgorICogQGRldjogcHJpdmF0ZSBkYXRhIG9mIGNvbnRyb2xsZXIKKyAqLworc3RhdGljIHUzMiBsb2FkX2kyY19tY3JfcmVnKHN0cnVjdCBubWtfaTJjX2RldiAqZGV2KQoreworCXUzMiBtY3IgPSAwOworCisJLyogNy1iaXQgYWRkcmVzcyB0cmFuc2FjdGlvbiAqLworCW1jciB8PSBHRU5fTUFTSygxLCBJMkNfTUNSX0FNLCAxMik7CisJbWNyIHw9IEdFTl9NQVNLKGRldi0+Y2xpLnNsYXZlX2FkciwgSTJDX01DUl9BNywgMSk7CisKKwkvKiBzdGFydCBieXRlIHByb2NlZHVyZSBub3QgYXBwbGllZCAqLworCW1jciB8PSBHRU5fTUFTSygwLCBJMkNfTUNSX1NCLCAxMSk7CisKKwkvKiBjaGVjayB0aGUgb3BlcmF0aW9uLCBtYXN0ZXIgcmVhZC93cml0ZT8gKi8KKwlpZiAoZGV2LT5jbGkub3BlcmF0aW9uID09IEkyQ19XUklURSkKKwkJbWNyIHw9IEdFTl9NQVNLKEkyQ19XUklURSwgSTJDX01DUl9PUCwgMCk7CisJZWxzZQorCQltY3IgfD0gR0VOX01BU0soSTJDX1JFQUQsIEkyQ19NQ1JfT1AsIDApOworCisJLyogc3RvcCBvciByZXBlYXRlZCBzdGFydD8gKi8KKwlpZiAoZGV2LT5zdG9wKQorCQltY3IgfD0gR0VOX01BU0soMSwgSTJDX01DUl9TVE9QLCAxNCk7CisJZWxzZQorCQltY3IgJj0gfihHRU5fTUFTSygxLCBJMkNfTUNSX1NUT1AsIDE0KSk7CisKKwltY3IgfD0gR0VOX01BU0soZGV2LT5jbGkuY291bnQsIEkyQ19NQ1JfTEVOR1RILCAxNSk7CisKKwlyZXR1cm4gbWNyOworfQorCisvKioKKyAqIHNldHVwX2kyY19jb250cm9sbGVyKCkgLSBzZXR1cCB0aGUgY29udHJvbGxlcgorICogQGRldjogcHJpdmF0ZSBkYXRhIG9mIGNvbnRyb2xsZXIKKyAqLworc3RhdGljIHZvaWQgc2V0dXBfaTJjX2NvbnRyb2xsZXIoc3RydWN0IG5ta19pMmNfZGV2ICpkZXYpCit7CisJdTMyIGJyY3IxLCBicmNyMjsKKwl1MzIgaTJjX2NsaywgZGl2OworCisJd3JpdGVsKDB4MCwgZGV2LT52aXJ0YmFzZSArIEkyQ19DUik7CisJd3JpdGVsKDB4MCwgZGV2LT52aXJ0YmFzZSArIEkyQ19IU01DUik7CisJd3JpdGVsKDB4MCwgZGV2LT52aXJ0YmFzZSArIEkyQ19URlRSKTsKKwl3cml0ZWwoMHgwLCBkZXYtPnZpcnRiYXNlICsgSTJDX1JGVFIpOworCXdyaXRlbCgweDAsIGRldi0+dmlydGJhc2UgKyBJMkNfRE1BUik7CisKKwkvKgorCSAqIHNldCB0aGUgc2xzdToKKwkgKgorCSAqIHNsc3UgZGVmaW5lcyB0aGUgZGF0YSBzZXR1cCB0aW1lIGFmdGVyIFNDTCBjbG9jaworCSAqIHN0cmV0Y2hpbmcgaW4gdGVybXMgb2YgaTJjIGNsayBjeWNsZXMuIFRoZQorCSAqIG5lZWRlZCBzZXR1cCB0aW1lIGZvciB0aGUgdGhyZWUgbW9kZXMgYXJlIDI1MG5zLAorCSAqIDEwMG5zLCAxMG5zIHJlcGVjdGl2ZWx5IHRodXMgbGVhZGluZyB0byB0aGUgdmFsdWVzCisJICogb2YgMTQsIDYsIDIgZm9yIGEgNDggTUh6IGkyYyBjbGsuCisJICovCisJd3JpdGVsKGRldi0+Y2ZnLnNsc3UgPDwgMTYsIGRldi0+dmlydGJhc2UgKyBJMkNfU0NSKTsKKworCWkyY19jbGsgPSBjbGtfZ2V0X3JhdGUoZGV2LT5jbGspOworCisJLyogZmFsbGJhY2sgdG8gc3RkLiBtb2RlIGlmIG1hY2hpbmUgaGFzIG5vdCBwcm92aWRlZCBpdCAqLworCWlmIChkZXYtPmNmZy5jbGtfZnJlcSA9PSAwKQorCQlkZXYtPmNmZy5jbGtfZnJlcSA9IDEwMDAwMDsKKworCS8qCisJICogVGhlIHNwZWMgc2F5cywgaW4gY2FzZSBvZiBzdGQuIG1vZGUgdGhlIGRpdmlkZXIgaXMKKwkgKiAyIHdoZXJlYXMgaXQgaXMgMyBmb3IgZmFzdCBhbmQgZmFzdHBsdXMgbW9kZSBvZgorCSAqIG9wZXJhdGlvbi4gVE9ETyAtIGhpZ2ggc3BlZWQgc3VwcG9ydC4KKwkgKi8KKwlkaXYgPSAoZGV2LT5jZmcuY2xrX2ZyZXEgPiAxMDAwMDApID8gMyA6IDI7CisKKwkvKgorCSAqIGdlbmVyYXRlIHRoZSBtYXNrIGZvciBiYXVkIHJhdGUgY291bnRlcnMuIFRoZSBjb250cm9sbGVyCisJICogaGFzIHR3byBiYXVkIHJhdGUgY291bnRlcnMuIE9uZSBpcyB1c2VkIGZvciBIaWdoIHNwZWVkCisJICogb3BlcmF0aW9uLCBhbmQgdGhlIG90aGVyIGlzIGZvciBzdGQsIGZhc3QgbW9kZSwgZmFzdCBtb2RlCisJICogcGx1cyBvcGVyYXRpb24uIEN1cnJlbnRseSB3ZSBkbyBub3Qgc3VwcHJ0IGhpZ2ggc3BlZWQgbW9kZQorCSAqIHNvIHNldCBicmNyMSB0byAwLgorCSAqLworCWJyY3IxID0gMCA8PCAxNjsKKwlicmNyMiA9IChpMmNfY2xrLyhkZXYtPmNmZy5jbGtfZnJlcSAqIGRpdikpICYgMHhmZmZmOworCisJLyogc2V0IHRoZSBiYXVkIHJhdGUgY291bnRlciByZWdpc3RlciAqLworCXdyaXRlbCgoYnJjcjEgfCBicmNyMiksIGRldi0+dmlydGJhc2UgKyBJMkNfQlJDUik7CisKKwkvKgorCSAqIHNldCB0aGUgc3BlZWQgbW9kZS4gQ3VycmVudGx5IHdlIHN1cHBvcnQKKwkgKiBvbmx5IHN0YW5kYXJkIGFuZCBmYXN0IG1vZGUgb2Ygb3BlcmF0aW9uCisJICogVE9ETyAtIHN1cHBvcnQgZm9yIGZhc3QgbW9kZSBwbHVzICh1cHRvIDFNYi9zKQorCSAqIGFuZCBoaWdoIHNwZWVkICh1cCB0byAzLjQgTWIvcykKKwkgKi8KKwlpZiAoZGV2LT5jZmcuc20gPiBJMkNfRlJFUV9NT0RFX0ZBU1QpIHsKKwkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICJkbyBub3Qgc3VwcG9ydCB0aGlzIG1vZGUgIgorCQkJImRlZmF1bHRpbmcgdG8gc3RkLiBtb2RlXG4iKTsKKwkJYnJjcjIgPSBpMmNfY2xrLygxMDAwMDAgKiAyKSAmIDB4ZmZmZjsKKwkJd3JpdGVsKChicmNyMSB8IGJyY3IyKSwgZGV2LT52aXJ0YmFzZSArIEkyQ19CUkNSKTsKKwkJd3JpdGVsKEkyQ19GUkVRX01PREVfU1RBTkRBUkQgPDwgNCwKKwkJCQlkZXYtPnZpcnRiYXNlICsgSTJDX0NSKTsKKwl9CisJd3JpdGVsKGRldi0+Y2ZnLnNtIDw8IDQsIGRldi0+dmlydGJhc2UgKyBJMkNfQ1IpOworCisJLyogc2V0IHRoZSBUeCBhbmQgUnggRklGTyB0aHJlc2hvbGQgKi8KKwl3cml0ZWwoZGV2LT5jZmcudGZ0LCBkZXYtPnZpcnRiYXNlICsgSTJDX1RGVFIpOworCXdyaXRlbChkZXYtPmNmZy5yZnQsIGRldi0+dmlydGJhc2UgKyBJMkNfUkZUUik7Cit9CisKKy8qKgorICogcmVhZF9pMmMoKSAtIFJlYWQgZnJvbSBJMkMgY2xpZW50IGRldmljZQorICogQGRldjogcHJpdmF0ZSBkYXRhIG9mIEkyQyBEcml2ZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIGZyb20gaTJjIGNsaWVudCBkZXZpY2Ugd2hlbiBjb250cm9sbGVyIGlzIGluCisgKiBtYXN0ZXIgbW9kZS4gVGhlcmUgaXMgYSBjb21wbGV0aW9uIHRpbWVvdXQuIElmIHRoZXJlIGlzIG5vIHRyYW5zZmVyCisgKiBiZWZvcmUgdGltZW91dCBlcnJvciBpcyByZXR1cm5lZC4KKyAqLworc3RhdGljIGludCByZWFkX2kyYyhzdHJ1Y3Qgbm1rX2kyY19kZXYgKmRldikKK3sKKwl1MzIgc3RhdHVzID0gMDsKKwl1MzIgbWNyOworCXUzMiBpcnFfbWFzayA9IDA7CisJaW50IHRpbWVvdXQ7CisKKwltY3IgPSBsb2FkX2kyY19tY3JfcmVnKGRldik7CisJd3JpdGVsKG1jciwgZGV2LT52aXJ0YmFzZSArIEkyQ19NQ1IpOworCisJLyogbG9hZCB0aGUgY3VycmVudCBDUiB2YWx1ZSAqLworCXdyaXRlbChyZWFkbChkZXYtPnZpcnRiYXNlICsgSTJDX0NSKSB8IERFRkFVTFRfSTJDX1JFR19DUiwKKwkJCWRldi0+dmlydGJhc2UgKyBJMkNfQ1IpOworCisJLyogZW5hYmxlIHRoZSBjb250cm9sbGVyICovCisJaTJjX3NldF9iaXQoZGV2LT52aXJ0YmFzZSArIEkyQ19DUiwgSTJDX0NSX1BFKTsKKworCWluaXRfY29tcGxldGlvbigmZGV2LT54ZmVyX2NvbXBsZXRlKTsKKworCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGJ5IHNldHRpbmcgdGhlIG1hc2sgKi8KKwlpcnFfbWFzayA9IChJMkNfSVRfUlhGTkYgfCBJMkNfSVRfUlhGRiB8CisJCQlJMkNfSVRfTUFMIHwgSTJDX0lUX0JFUlIpOworCisJaWYgKGRldi0+c3RvcCkKKwkJaXJxX21hc2sgfD0gSTJDX0lUX01URDsKKwllbHNlCisJCWlycV9tYXNrIHw9IEkyQ19JVF9NVERXUzsKKworCWlycV9tYXNrID0gSTJDX0NMRUFSX0FMTF9JTlRTICYgSVJRX01BU0soaXJxX21hc2spOworCisJd3JpdGVsKHJlYWRsKGRldi0+dmlydGJhc2UgKyBJMkNfSU1TQ1IpIHwgaXJxX21hc2ssCisJCQlkZXYtPnZpcnRiYXNlICsgSTJDX0lNU0NSKTsKKworCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgKKwkJJmRldi0+eGZlcl9jb21wbGV0ZSwgbXNlY3NfdG9famlmZmllcyhJMkNfVElNRU9VVF9NUykpOworCisJaWYgKHRpbWVvdXQgPCAwKSB7CisJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LAorCQkJIndhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0IgorCQkJInJldHVybmVkICVkIHdhaXRpbmcgZm9yIGV2ZW50XG4iLCB0aW1lb3V0KTsKKwkJc3RhdHVzID0gdGltZW91dDsKKwl9CisKKwlpZiAodGltZW91dCA9PSAwKSB7CisJCS8qIGNvbnRyb2xlciBoYXMgdGltZWRvdXQsIHJlLWluaXQgdGhlIGgvdyAqLworCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgImNvbnRyb2xsZXIgdGltZWQgb3V0LCByZS1pbml0IGgvd1xuIik7CisJCSh2b2lkKSBpbml0X2h3KGRldik7CisJCXN0YXR1cyA9IC1FVElNRURPVVQ7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB3cml0ZV9pMmMoKSAtIFdyaXRlIGRhdGEgdG8gSTJDIGNsaWVudC4KKyAqIEBkZXY6IHByaXZhdGUgZGF0YSBvZiBJMkMgRHJpdmVyCisgKgorICogVGhpcyBmdW5jdGlvbiB3cml0ZXMgZGF0YSB0byBJMkMgY2xpZW50CisgKi8KK3N0YXRpYyBpbnQgd3JpdGVfaTJjKHN0cnVjdCBubWtfaTJjX2RldiAqZGV2KQoreworCXUzMiBzdGF0dXMgPSAwOworCXUzMiBtY3I7CisJdTMyIGlycV9tYXNrID0gMDsKKwlpbnQgdGltZW91dDsKKworCW1jciA9IGxvYWRfaTJjX21jcl9yZWcoZGV2KTsKKworCXdyaXRlbChtY3IsIGRldi0+dmlydGJhc2UgKyBJMkNfTUNSKTsKKworCS8qIGxvYWQgdGhlIGN1cnJlbnQgQ1IgdmFsdWUgKi8KKwl3cml0ZWwocmVhZGwoZGV2LT52aXJ0YmFzZSArIEkyQ19DUikgfCBERUZBVUxUX0kyQ19SRUdfQ1IsCisJCQlkZXYtPnZpcnRiYXNlICsgSTJDX0NSKTsKKworCS8qIGVuYWJsZSB0aGUgY29udHJvbGxlciAqLworCWkyY19zZXRfYml0KGRldi0+dmlydGJhc2UgKyBJMkNfQ1IgLCBJMkNfQ1JfUEUpOworCisJaW5pdF9jb21wbGV0aW9uKCZkZXYtPnhmZXJfY29tcGxldGUpOworCisJLyogZW5hYmxlIGludGVycnVwdHMgYnkgc2V0dGluZ3MgdGhlIG1hc2tzICovCisJaXJxX21hc2sgPSAoSTJDX0lUX1RYRk5FIHwgSTJDX0lUX1RYRk9WUiB8CisJCQlJMkNfSVRfTUFMIHwgSTJDX0lUX0JFUlIpOworCisJLyoKKwkgKiBjaGVjayBpZiB3ZSB3YW50IHRvIHRyYW5zZmVyIGEgc2luZ2xlIG9yIG11bHRpcGxlIGJ5dGVzLCBpZiBzbworCSAqIHNldCB0aGUgTVREV1MgYml0IChNYXN0ZXIgVHJhbnNhY3Rpb24gRG9uZSBXaXRob3V0IFN0b3ApCisJICogdG8gc3RhcnQgcmVwZWF0ZWQgc3RhcnQgb3BlcmF0aW9uCisJICovCisJaWYgKGRldi0+c3RvcCkKKwkJaXJxX21hc2sgfD0gSTJDX0lUX01URDsKKwllbHNlCisJCWlycV9tYXNrIHw9IEkyQ19JVF9NVERXUzsKKworCWlycV9tYXNrID0gSTJDX0NMRUFSX0FMTF9JTlRTICYgSVJRX01BU0soaXJxX21hc2spOworCisJd3JpdGVsKHJlYWRsKGRldi0+dmlydGJhc2UgKyBJMkNfSU1TQ1IpIHwgaXJxX21hc2ssCisJCQlkZXYtPnZpcnRiYXNlICsgSTJDX0lNU0NSKTsKKworCXRpbWVvdXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgKKwkJJmRldi0+eGZlcl9jb21wbGV0ZSwgbXNlY3NfdG9famlmZmllcyhJMkNfVElNRU9VVF9NUykpOworCisJaWYgKHRpbWVvdXQgPCAwKSB7CisJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LAorCQkJIndhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZV90aW1lb3V0IgorCQkJInJldHVybmVkICVkIHdhaXRpbmcgZm9yIGV2ZW50XG4iLCB0aW1lb3V0KTsKKwkJc3RhdHVzID0gdGltZW91dDsKKwl9CisKKwlpZiAodGltZW91dCA9PSAwKSB7CisJCS8qIGNvbnRyb2xlciBoYXMgdGltZWRvdXQsIHJlLWluaXQgdGhlIGgvdyAqLworCQlkZXZfZXJyKCZkZXYtPnBkZXYtPmRldiwgImNvbnRyb2xsZXIgdGltZWQgb3V0LCByZS1pbml0IGgvd1xuIik7CisJCSh2b2lkKSBpbml0X2h3KGRldik7CisJCXN0YXR1cyA9IC1FVElNRURPVVQ7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBubWtfaTJjX3hmZXIoKSAtIEkyQyB0cmFuc2ZlciBmdW5jdGlvbiB1c2VkIGJ5IGtlcm5lbCBmcmFtZXdvcmsKKyAqIEBpMmNfYWRhcCAJLSBBZGFwdGVyIHBvaW50ZXIgdG8gdGhlIGNvbnRyb2xsZXIKKyAqIEBtc2dzW10gLSBQb2ludGVyIHRvIGRhdGEgdG8gYmUgd3JpdHRlbi4KKyAqIEBudW1fbXNncyAtIE51bWJlciBvZiBtZXNzYWdlcyB0byBiZSBleGVjdXRlZAorICoKKyAqIFRoaXMgaXMgdGhlIGZ1bmN0aW9uIGNhbGxlZCBieSB0aGUgZ2VuZXJpYyBrZXJuZWwgaTJjX3RyYW5zZmVyKCkKKyAqIG9yIGkyY19zbWJ1cy4uLigpIEFQSSBjYWxscy4gTm90ZSB0aGF0IHRoaXMgY29kZSBpcyBwcm90ZWN0ZWQgYnkgdGhlCisgKiBzZW1hcGhvcmUgc2V0IGluIHRoZSBrZXJuZWwgaTJjX3RyYW5zZmVyKCkgZnVuY3Rpb24uCisgKgorICogTk9URToKKyAqIFJFQUQgVFJBTlNGRVIgOiBXZSBpbXBvc2UgYSByZXN0cmljdGlvbiBvZiB0aGUgZmlyc3QgbWVzc2FnZSB0byBiZSB0aGUKKyAqIAkJaW5kZXggbWVzc2FnZSBmb3IgYW55IHJlYWQgdHJhbnNhY3Rpb24uCisgKiAJCS0gYSBubyBpbmRleCBpcyBjb2RlZCBhcyAnMCcsCisgKiAJCS0gMmJ5dGUgYmlnIGVuZGlhbiBpbmRleCBpcyBjb2RlZCBhcyAnMycKKyAqIAkJISEhIG1zZ1swXS5idWYgaG9sZHMgdGhlIGFjdHVhbCBpbmRleC4KKyAqIAkJVGhpcyBpcyBjb21wYXRpYmxlIHdpdGggZ2VuZXJpYyBtZXNzYWdlcyBvZiBzbWJ1cyBlbXVsYXRvcgorICogCQl0aGF0IHNlbmQgYSBvbmUgYnl0ZSBpbmRleC4KKyAqIAkJZWcuIGEgSTJDIHRyYW5zYXRpb24gdG8gcmVhZCAyIGJ5dGVzIGZyb20gaW5kZXggMAorICoJCQlpZHggPSAwOworICoJCQltc2dbMF0uYWRkciA9IGNsaWVudC0+YWRkcjsKKyAqCQkJbXNnWzBdLmZsYWdzID0gMHgwOworICoJCQltc2dbMF0ubGVuID0gMTsKKyAqCQkJbXNnWzBdLmJ1ZiA9ICZpZHg7CisgKgorICoJCQltc2dbMV0uYWRkciA9IGNsaWVudC0+YWRkcjsKKyAqCQkJbXNnWzFdLmZsYWdzID0gSTJDX01fUkQ7CisgKgkJCW1zZ1sxXS5sZW4gPSAyOworICoJCQltc2dbMV0uYnVmID0gcmRfYnVmZgorICoJCQlpMmNfdHJhbnNmZXIoYWRhcCwgbXNnLCAyKTsKKyAqCisgKiBXUklURSBUUkFOU0ZFUiA6IFRoZSBJMkMgc3RhbmRhcmQgaW50ZXJmYWNlIGludGVycHJldHMgYWxsIGRhdGEgYXMgcGF5bG9hZC4KKyAqCQlJZiB5b3Ugd2FudCB0byBlbXVsYXRlIGFuIFNNQlVTIHdyaXRlIHRyYW5zYWN0aW9uIHB1dCB0aGUKKyAqCQlpbmRleCBhcyBmaXJzdCBieXRlKG9yIGZpcnN0IGFuZCBzZWNvbmQpIGluIHRoZSBwYXlsb2FkLgorICoJCWVnLiBhIEkyQyB0cmFuc2F0aW9uIHRvIHdyaXRlIDIgYnl0ZXMgZnJvbSBpbmRleCAxCisgKgkJCXdyX2J1ZmZbMF0gPSAweDE7CisgKgkJCXdyX2J1ZmZbMV0gPSAweDIzOworICoJCQl3cl9idWZmWzJdID0gMHg0NjsKKyAqCQkJbXNnWzBdLmZsYWdzID0gMHgwOworICoJCQltc2dbMF0ubGVuID0gMzsKKyAqCQkJbXNnWzBdLmJ1ZiA9IHdyX2J1ZmY7CisgKgkJCWkyY190cmFuc2ZlcihhZGFwLCBtc2csIDEpOworICoKKyAqIFRvIHJlYWQgb3Igd3JpdGUgYSBibG9jayBvZiBkYXRhIChtdWx0aXBsZSBieXRlcykgdXNpbmcgU01CVVMgZW11bGF0aW9uCisgKiBwbGVhc2UgdXNlIHRoZSBpMmNfc21idXNfcmVhZF9pMmNfYmxvY2tfZGF0YSgpCisgKiBvciBpMmNfc21idXNfd3JpdGVfaTJjX2Jsb2NrX2RhdGEoKSBBUEkKKyAqLworc3RhdGljIGludCBubWtfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJc3RydWN0IGkyY19tc2cgbXNnc1tdLCBpbnQgbnVtX21zZ3MpCit7CisJaW50IHN0YXR1czsKKwlpbnQgaTsKKwl1MzIgY2F1c2U7CisJc3RydWN0IG5ta19pMmNfZGV2ICpkZXYgPSBpMmNfZ2V0X2FkYXBkYXRhKGkyY19hZGFwKTsKKworCXN0YXR1cyA9IGluaXRfaHcoZGV2KTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCisJLyogc2V0dXAgdGhlIGkyYyBjb250cm9sbGVyICovCisJc2V0dXBfaTJjX2NvbnRyb2xsZXIoZGV2KTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fbXNnczsgaSsrKSB7CisJCWlmICh1bmxpa2VseShtc2dzW2ldLmZsYWdzICYgSTJDX01fVEVOKSkgeworCQkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICIxMCBiaXQgYWRkcmVzc2luZyIKKwkJCQkJIm5vdCBzdXBwb3J0ZWRcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJZGV2LT5jbGkuc2xhdmVfYWRyCT0gbXNnc1tpXS5hZGRyOworCQlkZXYtPmNsaS5idWZmZXIJCT0gbXNnc1tpXS5idWY7CisJCWRldi0+Y2xpLmNvdW50CQk9IG1zZ3NbaV0ubGVuOworCQlkZXYtPnN0b3AgPSAoaSA8IChudW1fbXNncyAtIDEpKSA/IDAgOiAxOworCQlkZXYtPnJlc3VsdCA9IDA7CisKKwkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgeworCQkJLyogaXQgaXMgYSByZWFkIG9wZXJhdGlvbiAqLworCQkJZGV2LT5jbGkub3BlcmF0aW9uID0gSTJDX1JFQUQ7CisJCQlzdGF0dXMgPSByZWFkX2kyYyhkZXYpOworCQl9IGVsc2UgeworCQkJLyogd3JpdGUgb3BlcmF0aW9uICovCisJCQlkZXYtPmNsaS5vcGVyYXRpb24gPSBJMkNfV1JJVEU7CisJCQlzdGF0dXMgPSB3cml0ZV9pMmMoZGV2KTsKKwkJfQorCQlpZiAoc3RhdHVzIHx8IChkZXYtPnJlc3VsdCkpIHsKKwkJCS8qIGdldCB0aGUgYWJvcnQgY2F1c2UgKi8KKwkJCWNhdXNlID0JKHJlYWRsKGRldi0+dmlydGJhc2UgKyBJMkNfU1IpID4+IDQpICYgMHg3OworCQkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICJlcnJvciBkdXJpbmcgSTJDIgorCQkJCQkibWVzc2FnZSB4ZmVyOiAlZFxuIiwgY2F1c2UpOworCQkJZGV2X2VycigmZGV2LT5wZGV2LT5kZXYsICIlc1xuIiwKKwkJCQljYXVzZSA+PSBBUlJBWV9TSVpFKGFib3J0X2NhdXNlcykKKwkJCQk/ICJ1bmtub3duIHJlYXNvbiIgOiBhYm9ydF9jYXVzZXNbY2F1c2VdKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKwkJbWRlbGF5KDEpOworCX0KKwkvKiByZXR1cm4gdGhlIG5vLiBtZXNzYWdlcyBwcm9jZXNzZWQgKi8KKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gc3RhdHVzOworCWVsc2UKKwkJcmV0dXJuIG51bV9tc2dzOworfQorCisvKioKKyAqIGRpc2FibGVfaW50ZXJydXB0cygpIC0gZGlzYWJsZSB0aGUgaW50ZXJydXB0cworICogQGRldjogcHJpdmF0ZSBkYXRhIG9mIGNvbnRyb2xsZXIKKyAqLworc3RhdGljIGludCBkaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IG5ta19pMmNfZGV2ICpkZXYsIHUzMiBpcnEpCit7CisJaXJxID0gSVJRX01BU0soaXJxKTsKKwl3cml0ZWwocmVhZGwoZGV2LT52aXJ0YmFzZSArIEkyQ19JTVNDUikgJiB+KEkyQ19DTEVBUl9BTExfSU5UUyAmIGlycSksCisJCQlkZXYtPnZpcnRiYXNlICsgSTJDX0lNU0NSKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpMmNfaXJxX2hhbmRsZXIoKSAtIGludGVycnVwdCByb3V0aW5lCisgKiBAaXJxOiBpbnRlcnJ1cHQgbnVtYmVyCisgKiBAYXJnOiBkYXRhIHBhc3NlZCB0byB0aGUgaGFuZGxlcgorICoKKyAqIFRoaXMgaXMgdGhlIGludGVycnVwdCBoYW5kbGVyIGZvciB0aGUgaTJjIGRyaXZlci4gQ3VycmVudGx5CisgKiBpdCBoYW5kbGVzIHRoZSBtYWpvciBpbnRlcnJ1cHRzIGxpa2UgUnggJiBUeCBGSUZPIG1hbmFnZW1lbnQKKyAqIGludGVycnVwdHMsIG1hc3RlciB0cmFuc2FjdGlvbiBpbnRlcnJ1cHRzLCBhcmJpdHJhdGlvbiBhbmQKKyAqIGJ1cyBlcnJvciBpbnRlcnJ1cHRzLiBUaGUgcmVzdCBvZiB0aGUgaW50ZXJydXB0cyBhcmUgdHJlYXRlZCBhcworICogdW5oYW5kbGVkLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgaTJjX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgbm1rX2kyY19kZXYgKmRldiA9IGFyZzsKKwl1MzIgdGZ0LCByZnQ7CisJdTMyIGNvdW50OworCXUzMiBtaXNyOworCXUzMiBzcmMgPSAwOworCisJLyogbG9hZCBUeCBGSUZPIGFuZCBSeCBGSUZPIHRocmVzaG9sZCB2YWx1ZXMgKi8KKwl0ZnQgPSByZWFkbChkZXYtPnZpcnRiYXNlICsgSTJDX1RGVFIpOworCXJmdCA9IHJlYWRsKGRldi0+dmlydGJhc2UgKyBJMkNfUkZUUik7CisKKwkvKiByZWFkIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXIgKi8KKwltaXNyID0gcmVhZGwoZGV2LT52aXJ0YmFzZSArIEkyQ19NSVNSKTsKKworCXNyYyA9IF9fZmZzKG1pc3IpOworCXN3aXRjaCAoKDEgPDwgc3JjKSkgeworCisJLyogVHJhbnNtaXQgRklGTyBuZWFybHkgZW1wdHkgaW50ZXJydXB0ICovCisJY2FzZSBJMkNfSVRfVFhGTkU6CisJeworCQlpZiAoZGV2LT5jbGkub3BlcmF0aW9uID09IEkyQ19SRUFEKSB7CisJCQkvKgorCQkJICogaW4gcmVhZCBvcGVyYXRpb24gd2h5IGRvIHdlIGNhcmUgZm9yIHdyaXRpbmc/CisJCQkgKiBzbyBkaXNhYmxlIHRoZSBUcmFuc21pdCBGSUZPIGludGVycnVwdAorCQkJICovCisJCQlkaXNhYmxlX2ludGVycnVwdHMoZGV2LCBJMkNfSVRfVFhGTkUpOworCQl9IGVsc2UgeworCQkJZm9yIChjb3VudCA9IChNQVhfSTJDX0ZJRk9fVEhSRVNIT0xEIC0gdGZ0IC0gMik7CisJCQkJCShjb3VudCA+IDApICYmCisJCQkJCShkZXYtPmNsaS5jb3VudCAhPSAwKTsKKwkJCQkJY291bnQtLSkgeworCQkJCS8qIHdyaXRlIHRvIHRoZSBUeCBGSUZPICovCisJCQkJd3JpdGViKCpkZXYtPmNsaS5idWZmZXIsCisJCQkJCWRldi0+dmlydGJhc2UgKyBJMkNfVEZSKTsKKwkJCQlkZXYtPmNsaS5idWZmZXIrKzsKKwkJCQlkZXYtPmNsaS5jb3VudC0tOworCQkJCWRldi0+Y2xpLnhmZXJfYnl0ZXMrKzsKKwkJCX0KKwkJCS8qCisJCQkgKiBpZiBkb25lLCBjbG9zZSB0aGUgdHJhbnNmZXIgYnkgZGlzYWJsaW5nIHRoZQorCQkJICogY29ycmVzcG9uZGluZyBUWEZORSBpbnRlcnJ1cHQKKwkJCSAqLworCQkJaWYgKGRldi0+Y2xpLmNvdW50ID09IDApCisJCQkJZGlzYWJsZV9pbnRlcnJ1cHRzKGRldiwJSTJDX0lUX1RYRk5FKTsKKwkJfQorCX0KKwlicmVhazsKKworCS8qCisJICogUnggRklGTyBuZWFybHkgZnVsbCBpbnRlcnJ1cHQuCisJICogVGhpcyBpcyBzZXQgd2hlbiB0aGUgbnVtZXIgb2YgZW50cmllcyBpbiBSeCBGSUZPIGlzCisJICogZ3JlYXRlciBvciBlcXVhbCB0aGFuIHRoZSB0aHJlc2hvbGQgdmFsdWUgcHJvZ3JhbW1lZAorCSAqIGluIFJGVAorCSAqLworCWNhc2UgSTJDX0lUX1JYRk5GOgorCQlmb3IgKGNvdW50ID0gcmZ0OyBjb3VudCA+IDA7IGNvdW50LS0pIHsKKwkJCS8qIFJlYWQgdGhlIFJ4IEZJRk8gKi8KKwkJCSpkZXYtPmNsaS5idWZmZXIgPSByZWFkYihkZXYtPnZpcnRiYXNlICsgSTJDX1JGUik7CisJCQlkZXYtPmNsaS5idWZmZXIrKzsKKwkJfQorCQlkZXYtPmNsaS5jb3VudCAtPSByZnQ7CisJCWRldi0+Y2xpLnhmZXJfYnl0ZXMgKz0gcmZ0OworCQlicmVhazsKKworCS8qIFJ4IEZJRk8gZnVsbCAqLworCWNhc2UgSTJDX0lUX1JYRkY6CisJCWZvciAoY291bnQgPSBNQVhfSTJDX0ZJRk9fVEhSRVNIT0xEOyBjb3VudCA+IDA7IGNvdW50LS0pIHsKKwkJCSpkZXYtPmNsaS5idWZmZXIgPSByZWFkYihkZXYtPnZpcnRiYXNlICsgSTJDX1JGUik7CisJCQlkZXYtPmNsaS5idWZmZXIrKzsKKwkJfQorCQlkZXYtPmNsaS5jb3VudCAtPSBNQVhfSTJDX0ZJRk9fVEhSRVNIT0xEOworCQlkZXYtPmNsaS54ZmVyX2J5dGVzICs9IE1BWF9JMkNfRklGT19USFJFU0hPTEQ7CisJCWJyZWFrOworCisJLyogTWFzdGVyIFRyYW5zYWN0aW9uIERvbmUgd2l0aC93aXRob3V0IHN0b3AgKi8KKwljYXNlIEkyQ19JVF9NVEQ6CisJY2FzZSBJMkNfSVRfTVREV1M6CisJCWlmIChkZXYtPmNsaS5vcGVyYXRpb24gPT0gSTJDX1JFQUQpIHsKKwkJCXdoaWxlICghcmVhZGwoZGV2LT52aXJ0YmFzZSArIEkyQ19SSVNSKSAmIEkyQ19JVF9SWEZFKSB7CisJCQkJaWYgKGRldi0+Y2xpLmNvdW50ID09IDApCisJCQkJCWJyZWFrOworCQkJCSpkZXYtPmNsaS5idWZmZXIgPQorCQkJCQlyZWFkYihkZXYtPnZpcnRiYXNlICsgSTJDX1JGUik7CisJCQkJZGV2LT5jbGkuYnVmZmVyKys7CisJCQkJZGV2LT5jbGkuY291bnQtLTsKKwkJCQlkZXYtPmNsaS54ZmVyX2J5dGVzKys7CisJCQl9CisJCX0KKworCQlpMmNfc2V0X2JpdChkZXYtPnZpcnRiYXNlICsgSTJDX0lDUiwgSTJDX0lUX01URCk7CisJCWkyY19zZXRfYml0KGRldi0+dmlydGJhc2UgKyBJMkNfSUNSLCBJMkNfSVRfTVREV1MpOworCisJCWRpc2FibGVfaW50ZXJydXB0cyhkZXYsCisJCQkJKEkyQ19JVF9UWEZORSB8IEkyQ19JVF9UWEZFIHwgSTJDX0lUX1RYRkYKKwkJCQkJfCBJMkNfSVRfVFhGT1ZSIHwgSTJDX0lUX1JYRk5GCisJCQkJCXwgSTJDX0lUX1JYRkYgfCBJMkNfSVRfUlhGRSkpOworCisJCWlmIChkZXYtPmNsaS5jb3VudCkgeworCQkJZGV2LT5yZXN1bHQgPSAtMTsKKwkJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiJWx1IGJ5dGVzIHN0aWxsIHJlbWFpbiB0byBiZSIKKwkJCQkJInhmZXJlZFxuIiwgZGV2LT5jbGkuY291bnQpOworCQkJKHZvaWQpIGluaXRfaHcoZGV2KTsKKwkJfQorCQljb21wbGV0ZSgmZGV2LT54ZmVyX2NvbXBsZXRlKTsKKworCQlicmVhazsKKworCS8qIE1hc3RlciBBcmJpdHJhdGlvbiBsb3N0IGludGVycnVwdCAqLworCWNhc2UgSTJDX0lUX01BTDoKKwkJZGV2LT5yZXN1bHQgPSAtMTsKKwkJKHZvaWQpIGluaXRfaHcoZGV2KTsKKworCQlpMmNfc2V0X2JpdChkZXYtPnZpcnRiYXNlICsgSTJDX0lDUiwgSTJDX0lUX01BTCk7CisJCWNvbXBsZXRlKCZkZXYtPnhmZXJfY29tcGxldGUpOworCisJCWJyZWFrOworCisJLyoKKwkgKiBCdXMgRXJyb3IgaW50ZXJydXB0LgorCSAqIFRoaXMgaGFwcGVucyB3aGVuIGFuIHVuZXhwZWN0ZWQgc3RhcnQvc3RvcCBjb25kaXRpb24gb2NjdXJzCisJICogZHVyaW5nIHRoZSB0cmFuc2FjdGlvbi4KKwkgKi8KKwljYXNlIEkyQ19JVF9CRVJSOgorCQlkZXYtPnJlc3VsdCA9IC0xOworCQkvKiBnZXQgdGhlIHN0YXR1cyAqLworCQlpZiAoKChyZWFkbChkZXYtPnZpcnRiYXNlICsgSTJDX1NSKSA+PiAyKSAmIDB4MykgPT0gSTJDX0FCT1JUKQorCQkJKHZvaWQpIGluaXRfaHcoZGV2KTsKKworCQlpMmNfc2V0X2JpdChkZXYtPnZpcnRiYXNlICsgSTJDX0lDUiwgSTJDX0lUX0JFUlIpOworCQljb21wbGV0ZSgmZGV2LT54ZmVyX2NvbXBsZXRlKTsKKworCQlicmVhazsKKworCS8qCisJICogVHggRklGTyBvdmVycnVuIGludGVycnVwdC4KKwkgKiBUaGlzIGlzIHNldCB3aGVuIGEgd3JpdGUgb3BlcmF0aW9uIGluIFR4IEZJRk8gaXMgcGVyZm9ybWVkIGFuZAorCSAqIHRoZSBUeCBGSUZPIGlzIGZ1bGwuCisJICovCisJY2FzZSBJMkNfSVRfVFhGT1ZSOgorCQlkZXYtPnJlc3VsdCA9IC0xOworCQkodm9pZCkgaW5pdF9odyhkZXYpOworCisJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAiVHggRmlmbyBPdmVyIHJ1blxuIik7CisJCWNvbXBsZXRlKCZkZXYtPnhmZXJfY29tcGxldGUpOworCisJCWJyZWFrOworCisJLyogdW5oYW5kbGVkIGludGVycnVwdHMgYnkgdGhpcyBkcml2ZXIgLSBUT0RPKi8KKwljYXNlIEkyQ19JVF9UWEZFOgorCWNhc2UgSTJDX0lUX1RYRkY6CisJY2FzZSBJMkNfSVRfUlhGRToKKwljYXNlIEkyQ19JVF9SRlNSOgorCWNhc2UgSTJDX0lUX1JGU0U6CisJY2FzZSBJMkNfSVRfV1RTUjoKKwljYXNlIEkyQ19JVF9TVEQ6CisJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAidW5oYW5kbGVkIEludGVycnVwdFxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJmRldi0+cGRldi0+ZGV2LCAic3B1cmlvdXMgSW50ZXJydXB0Li5cbiIpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbm1rX2kyY19mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfSTJDCisJCXwgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBCisJCXwgSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBCisJCXwgSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gbm1rX2kyY19hbGdvID0geworCS5tYXN0ZXJfeGZlcgk9IG5ta19pMmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eQk9IG5ta19pMmNfZnVuY3Rpb25hbGl0eQorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgbm1rX2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXN0cnVjdCBubWtfaTJjX2NvbnRyb2xsZXIgKnBkYXRhID0KKwkJCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBubWtfaTJjX2RldgkqZGV2OworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDsKKworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBubWtfaTJjX2RldiksIEdGUF9LRVJORUwpOworCWlmICghZGV2KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9ub19tZW07CisJfQorCisJZGV2LT5wZGV2ID0gcGRldjsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGVycl9ub19yZXNvdXJjZTsKKwl9CisKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwKKwkJRFJJVkVSX05BTUUgIkkvTyByZWdpb24iKSA9PSAJTlVMTCkJeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX25vX3JlZ2lvbjsKKwl9CisKKwlkZXYtPnZpcnRiYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOworCWlmICghZGV2LT52aXJ0YmFzZSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGVycl9ub19pb3JlbWFwOworCX0KKworCWRldi0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlyZXQgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgaTJjX2lycV9oYW5kbGVyLCBJUlFGX0RJU0FCTEVELAorCQkJCURSSVZFUl9OQU1FLCBkZXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGNsYWltIHRoZSBpcnEgJWRcbiIsIGRldi0+aXJxKTsKKwkJZ290byBlcnJfaXJxOworCX0KKworCWRldi0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGRldi0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgZ2V0IGkyYyBjbG9ja1xuIik7CisJCXJldCA9IFBUUl9FUlIoZGV2LT5jbGspOworCQlnb3RvIGVycl9ub19jbGs7CisJfQorCisJY2xrX2VuYWJsZShkZXYtPmNsayk7CisKKwlhZGFwID0gJmRldi0+YWRhcDsKKwlhZGFwLT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwlhZGFwLT5vd25lcgk9IFRISVNfTU9EVUxFOworCWFkYXAtPmNsYXNzCT0gSTJDX0NMQVNTX0hXTU9OIHwgSTJDX0NMQVNTX1NQRDsKKwlhZGFwLT5hbGdvCT0gJm5ta19pMmNfYWxnbzsKKworCS8qIGZldGNoIHRoZSBjb250cm9sbGVyIGlkICovCisJYWRhcC0+bnIJPSBwZGV2LT5pZDsKKworCS8qIGZldGNoIHRoZSBjb250cm9sbGVyIGNvbmZpZ3VyYXRpb24gZnJvbSBtYWNoaW5lICovCisJZGV2LT5jZmcuY2xrX2ZyZXEgPSBwZGF0YS0+Y2xrX2ZyZXE7CisJZGV2LT5jZmcuc2xzdQk9IHBkYXRhLT5zbHN1OworCWRldi0+Y2ZnLnRmdAk9IHBkYXRhLT50ZnQ7CisJZGV2LT5jZmcucmZ0CT0gcGRhdGEtPnJmdDsKKwlkZXYtPmNmZy5zbQk9IHBkYXRhLT5zbTsKKworCWkyY19zZXRfYWRhcGRhdGEoYWRhcCwgZGV2KTsKKworCXJldCA9IGluaXRfaHcoZGV2KTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZXJyb3IgaW4gaW5pdGlhbGl6aW5nIGkyYyBoYXJkd2FyZVxuIik7CisJCWdvdG8gZXJyX2luaXRfaHc7CisJfQorCisJZGV2X2RiZygmcGRldi0+ZGV2LCAiaW5pdGlhbGl6ZSBJMkMlZCBidXMgb24gdmlydHVhbCAiCisJCSJiYXNlICVwXG4iLCBwZGV2LT5pZCwgZGV2LT52aXJ0YmFzZSk7CisKKwlyZXQgPSBpMmNfYWRkX251bWJlcmVkX2FkYXB0ZXIoYWRhcCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIGFkYXB0ZXJcbiIpOworCQlnb3RvIGVycl9hZGRfYWRhcDsKKwl9CisKKwlyZXR1cm4gMDsKKworIGVycl9pbml0X2h3OgorCWNsa19kaXNhYmxlKGRldi0+Y2xrKTsKKyBlcnJfYWRkX2FkYXA6CisJY2xrX3B1dChkZXYtPmNsayk7CisgZXJyX25vX2NsazoKKwlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKKyBlcnJfaXJxOgorCWlvdW5tYXAoZGV2LT52aXJ0YmFzZSk7CisgZXJyX25vX2lvcmVtYXA6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisgZXJyX25vX3JlZ2lvbjoKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKyBlcnJfbm9fcmVzb3VyY2U6CisJa2ZyZWUoZGV2KTsKKyBlcnJfbm9fbWVtOgorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbm1rX2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgbm1rX2kyY19kZXYgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaTJjX2RlbF9hZGFwdGVyKCZkZXYtPmFkYXApOworCWZsdXNoX2kyY19maWZvKGRldik7CisJZGlzYWJsZV9hbGxfaW50ZXJydXB0cyhkZXYpOworCWNsZWFyX2FsbF9pbnRlcnJ1cHRzKGRldik7CisJLyogZGlzYWJsZSB0aGUgY29udHJvbGxlciAqLworCWkyY19jbHJfYml0KGRldi0+dmlydGJhc2UgKyBJMkNfQ1IsIEkyQ19DUl9QRSk7CisJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CisJaW91bm1hcChkZXYtPnZpcnRiYXNlKTsKKwljbGtfZGlzYWJsZShkZXYtPmNsayk7CisJY2xrX3B1dChkZXYtPmNsayk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJa2ZyZWUoZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBubWtfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwl9LAorCS5wcm9iZSA9IG5ta19pMmNfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKG5ta19pMmNfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG5ta19pMmNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm5ta19pMmNfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG5ta19pMmNfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZubWtfaTJjX2RyaXZlcik7Cit9CisKK3N1YnN5c19pbml0Y2FsbChubWtfaTJjX2luaXQpOworbW9kdWxlX2V4aXQobm1rX2kyY19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiU2FjaGluIFZlcm1hLCBTcmluaWRoaSBLQVNBR0FSIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5vbWFkaWsvVXg1MDAgSTJDIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybToiIERSSVZFUl9OQU1FKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKaW5kZXggMDAzN2UzMS4uYzdjMjM3NTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb21hcC5jCkBAIC00OSwyNCArNDksMjQgQEAKICNkZWZpbmUgT01BUF9JMkNfVElNRU9VVCAobXNlY3NfdG9famlmZmllcygxMDAwKSkKIAogI2RlZmluZSBPTUFQX0kyQ19SRVZfUkVHCQkweDAwCi0jZGVmaW5lIE9NQVBfSTJDX0lFX1JFRwkJCTB4MDQKLSNkZWZpbmUgT01BUF9JMkNfU1RBVF9SRUcJCTB4MDgKLSNkZWZpbmUgT01BUF9JMkNfSVZfUkVHCQkJMHgwYworI2RlZmluZSBPTUFQX0kyQ19JRV9SRUcJCQkweDAxCisjZGVmaW5lIE9NQVBfSTJDX1NUQVRfUkVHCQkweDAyCisjZGVmaW5lIE9NQVBfSTJDX0lWX1JFRwkJCTB4MDMKIC8qIEZvciBPTUFQMyBJMkNfSVYgaGFzIGNoYW5nZWQgdG8gSTJDX1dFICh3YWtldXAgZW5hYmxlKSAqLwotI2RlZmluZSBPTUFQX0kyQ19XRV9SRUcJCQkweDBjCi0jZGVmaW5lIE9NQVBfSTJDX1NZU1NfUkVHCQkweDEwCi0jZGVmaW5lIE9NQVBfSTJDX0JVRl9SRUcJCTB4MTQKLSNkZWZpbmUgT01BUF9JMkNfQ05UX1JFRwkJMHgxOAotI2RlZmluZSBPTUFQX0kyQ19EQVRBX1JFRwkJMHgxYwotI2RlZmluZSBPTUFQX0kyQ19TWVNDX1JFRwkJMHgyMAotI2RlZmluZSBPTUFQX0kyQ19DT05fUkVHCQkweDI0Ci0jZGVmaW5lIE9NQVBfSTJDX09BX1JFRwkJCTB4MjgKLSNkZWZpbmUgT01BUF9JMkNfU0FfUkVHCQkJMHgyYwotI2RlZmluZSBPTUFQX0kyQ19QU0NfUkVHCQkweDMwCi0jZGVmaW5lIE9NQVBfSTJDX1NDTExfUkVHCQkweDM0Ci0jZGVmaW5lIE9NQVBfSTJDX1NDTEhfUkVHCQkweDM4Ci0jZGVmaW5lIE9NQVBfSTJDX1NZU1RFU1RfUkVHCQkweDNjCi0jZGVmaW5lIE9NQVBfSTJDX0JVRlNUQVRfUkVHCQkweDQwCisjZGVmaW5lIE9NQVBfSTJDX1dFX1JFRwkJCTB4MDMKKyNkZWZpbmUgT01BUF9JMkNfU1lTU19SRUcJCTB4MDQKKyNkZWZpbmUgT01BUF9JMkNfQlVGX1JFRwkJMHgwNQorI2RlZmluZSBPTUFQX0kyQ19DTlRfUkVHCQkweDA2CisjZGVmaW5lIE9NQVBfSTJDX0RBVEFfUkVHCQkweDA3CisjZGVmaW5lIE9NQVBfSTJDX1NZU0NfUkVHCQkweDA4CisjZGVmaW5lIE9NQVBfSTJDX0NPTl9SRUcJCTB4MDkKKyNkZWZpbmUgT01BUF9JMkNfT0FfUkVHCQkJMHgwYQorI2RlZmluZSBPTUFQX0kyQ19TQV9SRUcJCQkweDBiCisjZGVmaW5lIE9NQVBfSTJDX1BTQ19SRUcJCTB4MGMKKyNkZWZpbmUgT01BUF9JMkNfU0NMTF9SRUcJCTB4MGQKKyNkZWZpbmUgT01BUF9JMkNfU0NMSF9SRUcJCTB4MGUKKyNkZWZpbmUgT01BUF9JMkNfU1lTVEVTVF9SRUcJCTB4MGYKKyNkZWZpbmUgT01BUF9JMkNfQlVGU1RBVF9SRUcJCTB4MTAKIAogLyogSTJDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKE9NQVBfSTJDX0lFKTogKi8KICNkZWZpbmUgT01BUF9JMkNfSUVfWERSCQkoMSA8PCAxNCkJLyogVFggQnVmZmVyIGRyYWluIGludCBlbmFibGUgKi8KQEAgLTE2MSw2ICsxNjEsNyBAQAogCXN0cnVjdCBkZXZpY2UJCSpkZXY7CiAJdm9pZCBfX2lvbWVtCQkqYmFzZTsJCS8qIHZpcnR1YWwgKi8KIAlpbnQJCQlpcnE7CisJaW50CQkJcmVnX3NoaWZ0OyAgICAgIC8qIGJpdCBzaGlmdCBmb3IgSTJDIHJlZ2lzdGVyIGFkZHJlc3NlcyAqLwogCXN0cnVjdCBjbGsJCSppY2xrOwkJLyogSW50ZXJmYWNlIGNsb2NrICovCiAJc3RydWN0IGNsawkJKmZjbGs7CQkvKiBGdW5jdGlvbmFsIGNsb2NrICovCiAJc3RydWN0IGNvbXBsZXRpb24JY21kX2NvbXBsZXRlOwpAQCAtMTg5LDEyICsxOTAsMTIgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBvbWFwX2kyY193cml0ZV9yZWcoc3RydWN0IG9tYXBfaTJjX2RldiAqaTJjX2RldiwKIAkJCQkgICAgICBpbnQgcmVnLCB1MTYgdmFsKQogewotCV9fcmF3X3dyaXRldyh2YWwsIGkyY19kZXYtPmJhc2UgKyByZWcpOworCV9fcmF3X3dyaXRldyh2YWwsIGkyY19kZXYtPmJhc2UgKyAocmVnIDw8IGkyY19kZXYtPnJlZ19zaGlmdCkpOwogfQogCiBzdGF0aWMgaW5saW5lIHUxNiBvbWFwX2kyY19yZWFkX3JlZyhzdHJ1Y3Qgb21hcF9pMmNfZGV2ICppMmNfZGV2LCBpbnQgcmVnKQogewotCXJldHVybiBfX3Jhd19yZWFkdyhpMmNfZGV2LT5iYXNlICsgcmVnKTsKKwlyZXR1cm4gX19yYXdfcmVhZHcoaTJjX2Rldi0+YmFzZSArIChyZWcgPDwgaTJjX2Rldi0+cmVnX3NoaWZ0KSk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfaTJjX2dldF9jbG9ja3Moc3RydWN0IG9tYXBfaTJjX2RldiAqZGV2KQpAQCAtODQ5LDcgKzg1MCw3IEBACiAJLmZ1bmN0aW9uYWxpdHkJPSBvbWFwX2kyY19mdW5jLAogfTsKIAotc3RhdGljIGludCBfX2luaXQKK3N0YXRpYyBpbnQgX19kZXZpbml0CiBvbWFwX2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBvbWFwX2kyY19kZXYJKmRldjsKQEAgLTkyNCw2ICs5MjUsMTEgQEAKIAkJZGV2LT5iX2h3ID0gMTsgLyogRW5hYmxlIGhhcmR3YXJlIGZpeGVzICovCiAJfQogCisJaWYgKGNwdV9pc19vbWFwN3h4KCkpCisJCWRldi0+cmVnX3NoaWZ0ID0gMTsKKwllbHNlCisJCWRldi0+cmVnX3NoaWZ0ID0gMjsKKwogCS8qIHJlc2V0IEFTQVAsIGNsZWFyaW5nIGFueSBJUlFzICovCiAJb21hcF9pMmNfaW5pdChkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodC5jCmluZGV4IDMyMmM1NjkuLjVmNDFlYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodC5jCkBAIC0xLDcgKzEsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKICAqIGkyYy1wYXJwb3J0LWxpZ2h0LmMgSTJDIGJ1cyBvdmVyIHBhcmFsbGVsIHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKgotICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CisgICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMCBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KICAgIAogICAgQmFzZWQgb24gb2xkZXIgaTJjLXZlbGxlbWFuLmMgZHJpdmVyCiAgICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMCBTaW1vbiBHLiBWb2dsCkBAIC0yNywxMCArMjcsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtc21idXMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlICJpMmMtcGFycG9ydC5oIgogCkBAIC00Myw2ICs0NSwxMCBAQAogbW9kdWxlX3BhcmFtKGJhc2UsIHVzaG9ydCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGJhc2UsICJCYXNlIEkvTyBhZGRyZXNzIik7CiAKK3N0YXRpYyBpbnQgaXJxOworbW9kdWxlX3BhcmFtKGlycSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaXJxLCAiSVJRIChvcHRpb25hbCkiKTsKKwogLyogLS0tLS0gTG93LWxldmVsIHBhcmFsbGVsIHBvcnQgYWNjZXNzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwb3J0X3dyaXRlKHVuc2lnbmVkIGNoYXIgcCwgdW5zaWduZWQgY2hhciBkKQpAQCAtMTE5LDYgKzEyNSwxNiBAQAogCS5uYW1lCQk9ICJQYXJhbGxlbCBwb3J0IGFkYXB0ZXIgKGxpZ2h0KSIsCiB9OwogCisvKiBTTUJ1cyBhbGVydCBzdXBwb3J0ICovCitzdGF0aWMgc3RydWN0IGkyY19zbWJ1c19hbGVydF9zZXR1cCBhbGVydF9kYXRhID0geworCS5hbGVydF9lZGdlX3RyaWdnZXJlZAk9IDEsCit9Oworc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50ICphcmE7CitzdGF0aWMgc3RydWN0IGxpbmVvcCBwYXJwb3J0X2N0cmxfaXJxID0geworCS52YWwJCT0gKDEgPDwgNCksCisJLnBvcnQJCT0gQ1RSTCwKK307CisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGkyY19wYXJwb3J0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IGVycjsKQEAgLTEyNywxOCArMTQzLDM5IEBACiAJcGFycG9ydF9zZXRzZGEoTlVMTCwgMSk7CiAJcGFycG9ydF9zZXRzY2woTlVMTCwgMSk7CiAJLyogT3RoZXIgaW5pdCBpZiBuZWVkZWQgKHBvd2VyIG9uLi4uKSAqLwotCWlmIChhZGFwdGVyX3Bhcm1bdHlwZV0uaW5pdC52YWwpCisJaWYgKGFkYXB0ZXJfcGFybVt0eXBlXS5pbml0LnZhbCkgewogCQlsaW5lX3NldCgxLCAmYWRhcHRlcl9wYXJtW3R5cGVdLmluaXQpOworCQkvKiBHaXZlIHBvd2VyZWQgZGV2aWNlcyBzb21lIHRpbWUgdG8gc2V0dGxlICovCisJCW1zbGVlcCgxMDApOworCX0KIAogCXBhcnBvcnRfYWRhcHRlci5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKIAllcnIgPSBpMmNfYml0X2FkZF9idXMoJnBhcnBvcnRfYWRhcHRlcik7Ci0JaWYgKGVycikKKwlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byByZWdpc3RlciB3aXRoIEkyQ1xuIik7Ci0JcmV0dXJuIGVycjsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwkvKiBTZXR1cCBTTUJ1cyBhbGVydCBpZiBzdXBwb3J0ZWQgKi8KKwlpZiAoYWRhcHRlcl9wYXJtW3R5cGVdLnNtYnVzX2FsZXJ0ICYmIGlycSkgeworCQlhbGVydF9kYXRhLmlycSA9IGlycTsKKwkJYXJhID0gaTJjX3NldHVwX3NtYnVzX2FsZXJ0KCZwYXJwb3J0X2FkYXB0ZXIsICZhbGVydF9kYXRhKTsKKwkJaWYgKGFyYSkKKwkJCWxpbmVfc2V0KDEsICZwYXJwb3J0X2N0cmxfaXJxKTsKKwkJZWxzZQorCQkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBBUkEgY2xpZW50XG4iKTsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgaTJjX3BhcnBvcnRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJaWYgKGFyYSkgeworCQlsaW5lX3NldCgwLCAmcGFycG9ydF9jdHJsX2lycSk7CisJCWkyY191bnJlZ2lzdGVyX2RldmljZShhcmEpOworCQlhcmEgPSBOVUxMOworCX0KIAlpMmNfZGVsX2FkYXB0ZXIoJnBhcnBvcnRfYWRhcHRlcik7CiAKIAkvKiBVbi1pbml0IGlmIG5lZWRlZCAocG93ZXIgb2ZmLi4uKSAqLwpAQCAtMjA1LDYgKzI0Miw5IEBACiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihiYXNlLCAzLCBEUlZOQU1FKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAorCWlmIChpcnEgIT0gMCkKKwkJcHJfaW5mbyhEUlZOQU1FICI6IHVzaW5nIGlycSAlZFxuIiwgaXJxKTsKKwogICAgICAgICBpZiAoIWFkYXB0ZXJfcGFybVt0eXBlXS5nZXRzY2wudmFsKQogCQlwYXJwb3J0X2FsZ29fZGF0YS5nZXRzY2wgPSBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5jCmluZGV4IDBkODk5ODYuLjIyMGZjYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5jCkBAIC0xLDcgKzEsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKICAqIGkyYy1wYXJwb3J0LmMgSTJDIGJ1cyBvdmVyIHBhcmFsbGVsIHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKgotICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDcgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CisgICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMCBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KICAgIAogICAgQmFzZWQgb24gb2xkZXIgaTJjLXBoaWxpcHMtcGFyLmMgZHJpdmVyCiAgICBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMCBTaW1vbiBHLiBWb2dsCkBAIC0yNyw5ICsyNywxMSBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnBvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtc21idXMuaD4KICNpbmNsdWRlICJpMmMtcGFycG9ydC5oIgogCiAvKiAtLS0tLSBEZXZpY2UgbGlzdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTM4LDYgKzQwLDggQEAKIAlzdHJ1Y3QgcGFyZGV2aWNlICpwZGV2OwogCXN0cnVjdCBpMmNfYWRhcHRlciBhZGFwdGVyOwogCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSBhbGdvX2RhdGE7CisJc3RydWN0IGkyY19zbWJ1c19hbGVydF9zZXR1cCBhbGVydF9kYXRhOworCXN0cnVjdCBpMmNfY2xpZW50ICphcmE7CiAJc3RydWN0IGkyY19wYXIgKm5leHQ7CiB9OwogCkBAIC0xNDMsNiArMTQ3LDE5IEBACiAKIC8qIC0tLS0tIEkyYyBhbmQgcGFyYWxsZWwgcG9ydCBjYWxsLWJhY2sgZnVuY3Rpb25zIGFuZCBzdHJ1Y3R1cmVzIC0tLS0tLS0tLSAqLwogCit2b2lkIGkyY19wYXJwb3J0X2lycSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBpMmNfcGFyICphZGFwdGVyID0gZGF0YTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqYXJhID0gYWRhcHRlci0+YXJhOworCisJaWYgKGFyYSkgeworCQlkZXZfZGJnKCZhcmEtPmRldiwgIlNNQnVzIGFsZXJ0IHJlY2VpdmVkXG4iKTsKKwkJaTJjX2hhbmRsZV9zbWJ1c19hbGVydChhcmEpOworCX0gZWxzZQorCQlkZXZfZGJnKCZhZGFwdGVyLT5hZGFwdGVyLmRldiwKKwkJCSJTTUJ1cyBhbGVydCByZWNlaXZlZCBidXQgbm8gQVJBIGNsaWVudCFcbiIpOworfQorCiBzdGF0aWMgdm9pZCBpMmNfcGFycG9ydF9hdHRhY2ggKHN0cnVjdCBwYXJwb3J0ICpwb3J0KQogewogCXN0cnVjdCBpMmNfcGFyICphZGFwdGVyOwpAQCAtMTU0LDggKzE3MSw5IEBACiAJfQogCiAJcHJfZGVidWcoImkyYy1wYXJwb3J0OiBhdHRhY2hpbmcgdG8gJXNcbiIsIHBvcnQtPm5hbWUpOworCXBhcnBvcnRfZGlzYWJsZV9pcnEocG9ydCk7CiAJYWRhcHRlci0+cGRldiA9IHBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlKHBvcnQsICJpMmMtcGFycG9ydCIsCi0JCU5VTEwsIE5VTEwsIE5VTEwsIFBBUlBPUlRfRkxBR19FWENMLCBOVUxMKTsKKwkJTlVMTCwgTlVMTCwgaTJjX3BhcnBvcnRfaXJxLCBQQVJQT1JUX0ZMQUdfRVhDTCwgYWRhcHRlcik7CiAJaWYgKCFhZGFwdGVyLT5wZGV2KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiaTJjLXBhcnBvcnQ6IFVuYWJsZSB0byByZWdpc3RlciB3aXRoIHBhcnBvcnRcbiIpOwogCQlnb3RvIEVSUk9SMDsKQEAgLTE4NSwxNCArMjAzLDI5IEBACiAJcGFycG9ydF9zZXRzZGEocG9ydCwgMSk7CiAJcGFycG9ydF9zZXRzY2wocG9ydCwgMSk7CiAJLyogT3RoZXIgaW5pdCBpZiBuZWVkZWQgKHBvd2VyIG9uLi4uKSAqLwotCWlmIChhZGFwdGVyX3Bhcm1bdHlwZV0uaW5pdC52YWwpCisJaWYgKGFkYXB0ZXJfcGFybVt0eXBlXS5pbml0LnZhbCkgewogCQlsaW5lX3NldChwb3J0LCAxLCAmYWRhcHRlcl9wYXJtW3R5cGVdLmluaXQpOworCQkvKiBHaXZlIHBvd2VyZWQgZGV2aWNlcyBzb21lIHRpbWUgdG8gc2V0dGxlICovCisJCW1zbGVlcCgxMDApOworCX0KIAogCWlmIChpMmNfYml0X2FkZF9idXMoJmFkYXB0ZXItPmFkYXB0ZXIpIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImkyYy1wYXJwb3J0OiBVbmFibGUgdG8gcmVnaXN0ZXIgd2l0aCBJMkNcbiIpOwogCQlnb3RvIEVSUk9SMTsKIAl9CiAKKwkvKiBTZXR1cCBTTUJ1cyBhbGVydCBpZiBzdXBwb3J0ZWQgKi8KKwlpZiAoYWRhcHRlcl9wYXJtW3R5cGVdLnNtYnVzX2FsZXJ0KSB7CisJCWFkYXB0ZXItPmFsZXJ0X2RhdGEuYWxlcnRfZWRnZV90cmlnZ2VyZWQgPSAxOworCQlhZGFwdGVyLT5hcmEgPSBpMmNfc2V0dXBfc21idXNfYWxlcnQoJmFkYXB0ZXItPmFkYXB0ZXIsCisJCQkJCQkgICAgICZhZGFwdGVyLT5hbGVydF9kYXRhKTsKKwkJaWYgKGFkYXB0ZXItPmFyYSkKKwkJCXBhcnBvcnRfZW5hYmxlX2lycShwb3J0KTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaTJjLXBhcnBvcnQ6IEZhaWxlZCB0byByZWdpc3RlciAiCisJCQkgICAgICAgIkFSQSBjbGllbnRcbiIpOworCX0KKwogCS8qIEFkZCB0aGUgbmV3IGFkYXB0ZXIgdG8gdGhlIGxpc3QgKi8KIAlhZGFwdGVyLT5uZXh0ID0gYWRhcHRlcl9saXN0OwogCWFkYXB0ZXJfbGlzdCA9IGFkYXB0ZXI7CkBAIC0yMTMsNiArMjQ2LDEwIEBACiAJZm9yIChwcmV2ID0gTlVMTCwgYWRhcHRlciA9IGFkYXB0ZXJfbGlzdDsgYWRhcHRlcjsKIAkgICAgIHByZXYgPSBhZGFwdGVyLCBhZGFwdGVyID0gYWRhcHRlci0+bmV4dCkgewogCQlpZiAoYWRhcHRlci0+cGRldi0+cG9ydCA9PSBwb3J0KSB7CisJCQlpZiAoYWRhcHRlci0+YXJhKSB7CisJCQkJcGFycG9ydF9kaXNhYmxlX2lycShwb3J0KTsKKwkJCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoYWRhcHRlci0+YXJhKTsKKwkJCX0KIAkJCWkyY19kZWxfYWRhcHRlcigmYWRhcHRlci0+YWRhcHRlcik7CiAKIAkJCS8qIFVuLWluaXQgaWYgbmVlZGVkIChwb3dlciBvZmYuLi4pICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQuaCBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5oCmluZGV4IGVkNjlkODQuLmE5ZjY2ODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5oCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC5oCkBAIC0xLDcgKzEsNyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICoKICAqIGkyYy1wYXJwb3J0LmggSTJDIGJ1cyBvdmVyIHBhcmFsbGVsIHBvcnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKgotICAgQ29weXJpZ2h0IChDKSAyMDAzLTIwMDQgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CisgICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxMCBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KICAgIAogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0zOCw2ICszOCw3IEBACiAJc3RydWN0IGxpbmVvcCBnZXRzZGE7CiAJc3RydWN0IGxpbmVvcCBnZXRzY2w7CiAJc3RydWN0IGxpbmVvcCBpbml0OworCXVuc2lnbmVkIGludCBzbWJ1c19hbGVydDoxOwogfTsKIAogc3RhdGljIHN0cnVjdCBhZGFwdGVyX3Bhcm0gYWRhcHRlcl9wYXJtW10gPSB7CkBAIC03Myw2ICs3NCw3IEBACiAJCS5zZXRzY2wJPSB7IDB4MDEsIERBVEEsIDEgfSwKIAkJLmdldHNkYQk9IHsgMHgxMCwgU1RBVCwgMSB9LAogCQkuaW5pdAk9IHsgMHhmMCwgREFUQSwgMCB9LAorCQkuc21idXNfYWxlcnQgPSAxLAogCX0sCiAJLyogdHlwZSA1OiBBRE0xMDI1LCBBRE0xMDMwIGFuZCBBRE0xMDMxIGV2YWx1YXRpb24gYm9hcmRzICovCiAJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXNlbWkuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFzZW1pLmMKaW5kZXggYWRmMGZiYi4uMGQyMGZmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXNlbWkuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhc2VtaS5jCkBAIC00MDAsNyArNDAwLDcgQEAKIAlrZnJlZShzbWJ1cyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwYXNlbWlfc21iX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBhc2VtaV9zbWJfaWRzW10gPSB7CiAJeyBQQ0lfREVWSUNFKDB4MTk1OSwgMHhhMDAzKSB9LAogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYwppbmRleCBlNTZlNGI2Li5lZTlkYTZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCkBAIC00NzIsNyArNDcyLDcgQEAKIAkuYWxnbwkJPSAmc21idXNfYWxnb3JpdGhtLAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBpaXg0X2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBpaXg0X2lkc1tdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxQUJfMykgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0M01YXzMpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfRUZBUiwgUENJX0RFVklDRV9JRF9FRkFSX1NMQzkwRTY2XzMpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBueC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wbnguYwppbmRleCAyYjBiZDBiLi45NTMyZGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBueC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG54LmMKQEAgLTE3MiwxMiArMTcyLDYgQEAKIAkJLyogV2Ugc3RpbGwgaGF2ZSBzb21ldGhpbmcgdG8gdGFsayBhYm91dC4uLiAqLwogCQl2YWwgPSAqYWxnX2RhdGEtPm1pZi5idWYrKzsKIAotCQlpZiAoYWxnX2RhdGEtPm1pZi5sZW4gPT0gMSkgewotCQkJdmFsIHw9IHN0b3BfYml0OwotCQkJaWYgKCFhbGdfZGF0YS0+bGFzdCkKLQkJCQl2YWwgfD0gc3RhcnRfYml0OwotCQl9Ci0KIAkJYWxnX2RhdGEtPm1pZi5sZW4tLTsKIAkJaW93cml0ZTMyKHZhbCwgSTJDX1JFR19UWChhbGdfZGF0YSkpOwogCkBAIC0yNTEsMTEgKzI0NSw2IEBACiAJCQlfX2Z1bmNfXyk7CiAKIAkJaWYgKGFsZ19kYXRhLT5taWYubGVuID09IDEpIHsKLQkJCS8qIExhc3QgYnl0ZSwgZG8gbm90IGFja25vd2xlZGdlIG5leHQgcmN2LiAqLwotCQkJdmFsIHw9IHN0b3BfYml0OwotCQkJaWYgKCFhbGdfZGF0YS0+bGFzdCkKLQkJCQl2YWwgfD0gc3RhcnRfYml0OwotCiAJCQkvKgogCQkJICogRW5hYmxlIGludGVycnVwdCBSRkRBSUUgKGRhdGEgaW4gUnggZmlmbyksCiAJCQkgKiBhbmQgZGlzYWJsZSBEUk1JRSAobmVlZCBkYXRhIGZvciBUeCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCmluZGV4IDc2NDdhMjAuLjkwZmZiZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYwpAQCAtMTIsNyArMTIsNyBAQAogICoKICAqICBIaXN0b3J5OgogICogICAgQXByIDIwMDI6IEluaXRpYWwgdmVyc2lvbiBbQ1NdCi0gKiAgICBKdW4gMjAwMjogUHJvcGVybHkgc2VwZXJhdGVkIGFsZ28vYWRhcCBbRkJdCisgKiAgICBKdW4gMjAwMjogUHJvcGVybHkgc2VwYXJhdGVkIGFsZ28vYWRhcCBbRkJdCiAgKiAgICBKYW4gMjAwMzogRml4ZWQgc2V2ZXJhbCBidWdzIGNvbmNlcm5pbmcgaW50ZXJydXB0IGhhbmRsaW5nIFtLYWktVXdlIEJsb2VtXQogICogICAgSmFuIDIwMDM6IGFkZGVkIGxpbWl0ZWQgc2lnbmFsIGhhbmRsaW5nIFtLYWktVXdlIEJsb2VtXQogICogICAgU2VwIDIwMDQ6IE1ham9yIHJld29yayB0byBlbnN1cmUgZWZmaWNpZW50IGJ1cyBoYW5kbGluZyBbUk1LXQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM1NTk1LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczU1OTUuYwppbmRleCA4NDQ1NjlmLi41NWE3MTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczU1OTUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczU1OTUuYwpAQCAtMzY5LDcgKzM2OSw3IEBACiAJLmFsZ28JCT0gJnNtYnVzX2FsZ29yaXRobSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzaXM1NTk1X2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2lzNTU5NV9pZHNbXSBfX2RldmluaXRjb25zdCA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TSSwgUENJX0RFVklDRV9JRF9TSV81MDMpIH0sIAogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczYzMC5jCmluZGV4IDY4Y2ZmN2EuLjIzMDljN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM2MzAuYwpAQCAtNDY4LDcgKzQ2OCw3IEBACiAJLmFsZ28JCT0gJnNtYnVzX2FsZ29yaXRobSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzaXM2MzBfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzaXM2MzBfaWRzW10gX19kZXZpbml0Y29uc3QgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0ksIFBDSV9ERVZJQ0VfSURfU0lfNTAzKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NJLCBQQ0lfREVWSUNFX0lEX1NJX0xQQykgfSwKIAl7IDAsIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jCmluZGV4IDE2NDk5NjMuLmQ0M2Q4ZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM5NnguYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAJLmFsZ28JCT0gJnNtYnVzX2FsZ29yaXRobSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzaXM5NnhfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2lzOTZ4X2lkc1tdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NJLCBQQ0lfREVWSUNFX0lEX1NJX1NNQlVTKSB9LAogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGlueS11c2IuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdGlueS11c2IuYwppbmRleCBlMjliNmQ1Li5iNWIxYmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXRpbnktdXNiLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy10aW55LXVzYi5jCkBAIC0zMSwxMSArMzEsMTMgQEAKICNkZWZpbmUgQ01EX0kyQ19JT19CRUdJTgkoMTw8MCkKICNkZWZpbmUgQ01EX0kyQ19JT19FTkQJCSgxPDwxKQogCi0vKiBpMmMgYml0IGRlbGF5LCBkZWZhdWx0IGlzIDEwdXMgLT4gMTAwa0h6ICovCisvKiBpMmMgYml0IGRlbGF5LCBkZWZhdWx0IGlzIDEwdXMgLT4gMTAwa0h6IG1heAorICAgKGluIHByYWN0aWNlLCBkdWUgdG8gYWRkaXRpb25hbCBkZWxheXMgaW4gdGhlIGkyYyBiaXRiYW5naW5nCisgICBjb2RlIHRoaXMgcmVzdWx0cyBpbiBhIGkyYyBjbG9jayBvZiBhYm91dCA1MGtIeikgKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZWxheSA9IDEwOwogbW9kdWxlX3BhcmFtKGRlbGF5LCB1c2hvcnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkZWxheSwgImJpdCBkZWxheSBpbiBtaWNyb3NlY29uZHMsICIKLQkJICJlLmcuIDEwIGZvciAxMDBrSHogKGRlZmF1bHQgaXMgMTAwa0h6KSIpOworTU9EVUxFX1BBUk1fREVTQyhkZWxheSwgImJpdCBkZWxheSBpbiBtaWNyb3NlY29uZHMgIgorCQkgIihkZWZhdWx0IGlzIDEwdXMgZm9yIDEwMGtIeiBtYXgpIik7CiAKIHN0YXRpYyBpbnQgdXNiX3JlYWQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgY21kLAogCQkgICAgaW50IHZhbHVlLCBpbnQgaW5kZXgsIHZvaWQgKmRhdGEsIGludCBsZW4pOwpAQCAtMTM3LDcgKzEzOSw3IEBACiAgKiBGdXR1cmUgVGVjaG5vbG9neSBEZXZpY2VzIEludGVybmF0aW9uYWwgTHRkLiwgbGF0ZXIgYSBwYWlyIHdhcwogICogYm91Z2h0IGZyb20gRVpQcm90b3R5cGVzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpMmNfdGlueV91c2JfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaTJjX3RpbnlfdXNiX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4MDQwMywgMHhjNjMxKSB9LCAgIC8qIEZUREkgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxYzQwLCAweDA1MzQpIH0sICAgLyogRVpQcm90b3R5cGVzICovCiAJeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWEuYwppbmRleCA4YjI0ZjE5Li5kZTc4MjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhLmMKQEAgLTg5LDcgKzg5LDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHZ0NTg2Yl9pZHNbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHZ0NTg2Yl9pZHNbXSBfX2RldmluaXRjb25zdCA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU4Nl8zKSB9LAogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jCmluZGV4IGE4NGE5MDkuLmQ1NzI5MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYwpAQCAtNDQ0LDcgKzQ0NCw3IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdnQ1OTZfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgdnQ1OTZfaWRzW10gPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTZfMyksCiAJICAuZHJpdmVyX2RhdGEgPSBTTUJCQTEgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU5NkJfMyksCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhpaWMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMteGlpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlY2UzOWEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXhpaWMuYwpAQCAtMCwwICsxLDgyNCBAQAorLyoKKyAqIGkyYy14aWljLmMKKyAqIENvcHlyaWdodCAoYykgMjAwMi0yMDA3IFhpbGlueCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqCisgKiBUaGlzIGNvZGUgd2FzIGltcGxlbWVudGVkIGJ5IE1vY2VhbiBMYWJvcmF0b3JpZXMgQUIgd2hlbiBwb3J0aW5nIGxpbnV4CisgKiB0byB0aGUgYXV0b21vdGl2ZSBkZXZlbG9wbWVudCBib2FyZCBSdXNzZWxsdmlsbGUuIFRoZSBjb3B5cmlnaHQgaG9sZGVyCisgKiBhcyBzZWVuIGluIHRoZSBoZWFkZXIgaXMgSW50ZWwgY29ycG9yYXRpb24uCisgKiBNb2NlYW4gTGFib3JhdG9yaWVzIGZvcmtlZCBvZmYgdGhlIEdOVS9MaW51eCBwbGF0Zm9ybSB3b3JrIGludG8gYQorICogc2VwYXJhdGUgY29tcGFueSBjYWxsZWQgUGVsYWdpY29yZSBBQiwgd2hpY2ggY29tbWl0ZWQgdGhlIGNvZGUgdG8gdGhlCisgKiBrZXJuZWwuCisgKi8KKworLyogU3VwcG9ydHM6CisgKiBYaWxpbnggSUlDCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvaTJjLXhpaWMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorCisjZGVmaW5lIERSSVZFUl9OQU1FICJ4aWljLWkyYyIKKworZW51bSB4aWxpbnhfaTJjX3N0YXRlIHsKKwlTVEFURV9ET05FLAorCVNUQVRFX0VSUk9SLAorCVNUQVRFX1NUQVJUCit9OworCisvKioKKyAqIHN0cnVjdCB4aWljX2kyYyAtIEludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBYSUlDIEkyQyBidXMKKyAqIEBiYXNlOglNZW1vcnkgYmFzZSBvZiB0aGUgSFcgcmVnaXN0ZXJzCisgKiBAd2FpdDoJV2FpdCBxdWV1ZSBmb3IgY2FsbGVycworICogQGFkYXA6CUtlcm5lbCBhZGFwdGVyIHJlcHJlc2VudGF0aW9uCisgKiBAdHhfbXNnOglNZXNzYWdlcyBmcm9tIGFib3ZlIHRvIGJlIHNlbnQKKyAqIEBsb2NrOglNdXR1YWwgZXhjbHVzaW9uCisgKiBAdHhfcG9zOglDdXJyZW50IHBvcyBpbiBUWCBtZXNzYWdlCisgKiBAbm1zZ3M6CU51bWJlciBvZiBtZXNzYWdlcyBpbiB0eF9tc2cKKyAqIEBzdGF0ZToJU2VlIFNUQVRFXworICogQHJ4X21zZzoJQ3VycmVudCBSWCBtZXNzYWdlCisgKiBAcnhfcG9zOglQb3NpdGlvbiB3aXRoaW4gY3VycmVudCBSWCBtZXNzYWdlCisgKi8KK3N0cnVjdCB4aWljX2kyYyB7CisJdm9pZCBfX2lvbWVtCQkqYmFzZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdAl3YWl0OworCXN0cnVjdCBpMmNfYWRhcHRlcglhZGFwOworCXN0cnVjdCBpMmNfbXNnCQkqdHhfbXNnOworCXNwaW5sb2NrX3QJCWxvY2s7CisJdW5zaWduZWQgaW50IAkJdHhfcG9zOworCXVuc2lnbmVkIGludAkJbm1zZ3M7CisJZW51bSB4aWxpbnhfaTJjX3N0YXRlCXN0YXRlOworCXN0cnVjdCBpMmNfbXNnCQkqcnhfbXNnOworCWludAkJCXJ4X3BvczsKK307CisKKworI2RlZmluZSBYSUlDX01TQl9PRkZTRVQgMAorI2RlZmluZSBYSUlDX1JFR19PRkZTRVQgKDB4MTAwK1hJSUNfTVNCX09GRlNFVCkKKworLyoKKyAqIFJlZ2lzdGVyIG9mZnNldHMgaW4gYnl0ZXMgZnJvbSBSZWdpc3RlckJhc2UuIFRocmVlIGlzIGFkZGVkIHRvIHRoZQorICogYmFzZSBvZmZzZXQgdG8gYWNjZXNzIExTQiAoSUJNIHN0eWxlKSBvZiB0aGUgd29yZAorICovCisjZGVmaW5lIFhJSUNfQ1JfUkVHX09GRlNFVCAgICgweDAwK1hJSUNfUkVHX09GRlNFVCkJLyogQ29udHJvbCBSZWdpc3RlciAgICovCisjZGVmaW5lIFhJSUNfU1JfUkVHX09GRlNFVCAgICgweDA0K1hJSUNfUkVHX09GRlNFVCkJLyogU3RhdHVzIFJlZ2lzdGVyICAgICovCisjZGVmaW5lIFhJSUNfRFRSX1JFR19PRkZTRVQgICgweDA4K1hJSUNfUkVHX09GRlNFVCkJLyogRGF0YSBUeCBSZWdpc3RlciAgICovCisjZGVmaW5lIFhJSUNfRFJSX1JFR19PRkZTRVQgICgweDBDK1hJSUNfUkVHX09GRlNFVCkJLyogRGF0YSBSeCBSZWdpc3RlciAgICovCisjZGVmaW5lIFhJSUNfQURSX1JFR19PRkZTRVQgICgweDEwK1hJSUNfUkVHX09GRlNFVCkJLyogQWRkcmVzcyBSZWdpc3RlciAgICovCisjZGVmaW5lIFhJSUNfVEZPX1JFR19PRkZTRVQgICgweDE0K1hJSUNfUkVHX09GRlNFVCkJLyogVHggRklGTyBPY2N1cGFuY3kgICovCisjZGVmaW5lIFhJSUNfUkZPX1JFR19PRkZTRVQgICgweDE4K1hJSUNfUkVHX09GRlNFVCkJLyogUnggRklGTyBPY2N1cGFuY3kgICovCisjZGVmaW5lIFhJSUNfVEJBX1JFR19PRkZTRVQgICgweDFDK1hJSUNfUkVHX09GRlNFVCkJLyogMTAgQml0IEFkZHJlc3MgcmVnICovCisjZGVmaW5lIFhJSUNfUkZEX1JFR19PRkZTRVQgICgweDIwK1hJSUNfUkVHX09GRlNFVCkJLyogUnggRklGTyBEZXB0aCByZWcgICovCisjZGVmaW5lIFhJSUNfR1BPX1JFR19PRkZTRVQgICgweDI0K1hJSUNfUkVHX09GRlNFVCkJLyogT3V0cHV0IFJlZ2lzdGVyICAgICovCisKKy8qIENvbnRyb2wgUmVnaXN0ZXIgbWFza3MgKi8KKyNkZWZpbmUgWElJQ19DUl9FTkFCTEVfREVWSUNFX01BU0sgICAgICAgIDB4MDEJLyogRGV2aWNlIGVuYWJsZSA9IDEgICAgICAqLworI2RlZmluZSBYSUlDX0NSX1RYX0ZJRk9fUkVTRVRfTUFTSyAgICAgICAgMHgwMgkvKiBUcmFuc21pdCBGSUZPIHJlc2V0PTEgICovCisjZGVmaW5lIFhJSUNfQ1JfTVNNU19NQVNLICAgICAgICAgICAgICAgICAweDA0CS8qIE1hc3RlciBzdGFydHMgVHhpbmc9MSAgKi8KKyNkZWZpbmUgWElJQ19DUl9ESVJfSVNfVFhfTUFTSyAgICAgICAgICAgIDB4MDgJLyogRGlyIG9mIHR4LiBUeGluZz0xICAgICAqLworI2RlZmluZSBYSUlDX0NSX05PX0FDS19NQVNLICAgICAgICAgICAgICAgMHgxMAkvKiBUeCBBY2suIE5PIGFjayA9IDEgICAgICovCisjZGVmaW5lIFhJSUNfQ1JfUkVQRUFURURfU1RBUlRfTUFTSyAgICAgICAweDIwCS8qIFJlcGVhdGVkIHN0YXJ0ID0gMSAgICAgKi8KKyNkZWZpbmUgWElJQ19DUl9HRU5FUkFMX0NBTExfTUFTSyAgICAgICAgIDB4NDAJLyogR2VuIENhbGwgZW5hYmxlZCA9IDEgICAqLworCisvKiBTdGF0dXMgUmVnaXN0ZXIgbWFza3MgKi8KKyNkZWZpbmUgWElJQ19TUl9HRU5fQ0FMTF9NQVNLICAgICAgICAgICAgIDB4MDEJLyogMT1hIG1zdHIgaXNzdWVkIGEgR0MgICAqLworI2RlZmluZSBYSUlDX1NSX0FERFJfQVNfU0xBVkVfTUFTSyAgICAgICAgMHgwMgkvKiAxPXdoZW4gYWRkciBhcyBzbGF2ZSAgICovCisjZGVmaW5lIFhJSUNfU1JfQlVTX0JVU1lfTUFTSyAgICAgICAgICAgICAweDA0CS8qIDEgPSBidXMgaXMgYnVzeSAgICAgICAgKi8KKyNkZWZpbmUgWElJQ19TUl9NU1RSX1JESU5HX1NMQVZFX01BU0sgICAgIDB4MDgJLyogMT1EaXI6IG1zdHIgPC0tIHNsYXZlICAqLworI2RlZmluZSBYSUlDX1NSX1RYX0ZJRk9fRlVMTF9NQVNLICAgICAgICAgMHgxMAkvKiAxID0gVHggRklGTyBmdWxsICAgICAgICovCisjZGVmaW5lIFhJSUNfU1JfUlhfRklGT19GVUxMX01BU0sgICAgICAgICAweDIwCS8qIDEgPSBSeCBGSUZPIGZ1bGwgICAgICAgKi8KKyNkZWZpbmUgWElJQ19TUl9SWF9GSUZPX0VNUFRZX01BU0sgICAgICAgIDB4NDAJLyogMSA9IFJ4IEZJRk8gZW1wdHkgICAgICAqLworI2RlZmluZSBYSUlDX1NSX1RYX0ZJRk9fRU1QVFlfTUFTSyAgICAgICAgMHg4MAkvKiAxID0gVHggRklGTyBlbXB0eSAgICAgICovCisKKy8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgbWFza3MgICAgSW50ZXJydXB0IG9jY3VycyB3aGVuLi4uICAgICAgICovCisjZGVmaW5lIFhJSUNfSU5UUl9BUkJfTE9TVF9NQVNLICAgICAgICAgICAweDAxCS8qIDEgPSBhcmJpdHJhdGlvbiBsb3N0ICAgKi8KKyNkZWZpbmUgWElJQ19JTlRSX1RYX0VSUk9SX01BU0sgICAgICAgICAgIDB4MDIJLyogMT1UeCBlcnJvci9tc2cgY29tcGxldGUgKi8KKyNkZWZpbmUgWElJQ19JTlRSX1RYX0VNUFRZX01BU0sgICAgICAgICAgIDB4MDQJLyogMSA9IFR4IEZJRk8vcmVnIGVtcHR5ICAqLworI2RlZmluZSBYSUlDX0lOVFJfUlhfRlVMTF9NQVNLICAgICAgICAgICAgMHgwOAkvKiAxPVJ4IEZJRk8vcmVnPU9DWSBsZXZlbCAqLworI2RlZmluZSBYSUlDX0lOVFJfQk5CX01BU0sgICAgICAgICAgICAgICAgMHgxMAkvKiAxID0gQnVzIG5vdCBidXN5ICAgICAgICovCisjZGVmaW5lIFhJSUNfSU5UUl9BQVNfTUFTSyAgICAgICAgICAgICAgICAweDIwCS8qIDEgPSB3aGVuIGFkZHIgYXMgc2xhdmUgKi8KKyNkZWZpbmUgWElJQ19JTlRSX05BQVNfTUFTSyAgICAgICAgICAgICAgIDB4NDAJLyogMSA9IG5vdCBhZGRyIGFzIHNsYXZlICAqLworI2RlZmluZSBYSUlDX0lOVFJfVFhfSEFMRl9NQVNLICAgICAgICAgICAgMHg4MAkvKiAxID0gVFggRklGTyBoYWxmIGVtcHR5ICovCisKKy8qIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIHNwZWNpZnkgdGhlIGRlcHRoIG9mIHRoZSBGSUZPcyAqLworI2RlZmluZSBJSUNfUlhfRklGT19ERVBUSCAgICAgICAgIDE2CS8qIFJ4IGZpZm8gY2FwYWNpdHkgICAgICAgICAgICAgICAqLworI2RlZmluZSBJSUNfVFhfRklGT19ERVBUSCAgICAgICAgIDE2CS8qIFR4IGZpZm8gY2FwYWNpdHkgICAgICAgICAgICAgICAqLworCisvKiBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBzcGVjaWZ5IGdyb3VwcyBvZiBpbnRlcnJ1cHRzIHRoYXQgYXJlIHR5cGljYWxseQorICogZW5hYmxlZCBvciBkaXNhYmxlcyBhdCB0aGUgc2FtZSB0aW1lCisgKi8KKyNkZWZpbmUgWElJQ19UWF9JTlRFUlJVUFRTICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKFhJSUNfSU5UUl9UWF9FUlJPUl9NQVNLIHwgWElJQ19JTlRSX1RYX0VNUFRZX01BU0sgfCBYSUlDX0lOVFJfVFhfSEFMRl9NQVNLKQorCisjZGVmaW5lIFhJSUNfVFhfUlhfSU5URVJSVVBUUyAoWElJQ19JTlRSX1JYX0ZVTExfTUFTSyB8IFhJSUNfVFhfSU5URVJSVVBUUykKKworLyogVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHVzZWQgd2l0aCB0aGUgZm9sbG93aW5nIG1hY3JvcyB0byBzcGVjaWZ5IHRoZQorICogb3BlcmF0aW9uLCBhIHJlYWQgb3Igd3JpdGUgb3BlcmF0aW9uLgorICovCisjZGVmaW5lIFhJSUNfUkVBRF9PUEVSQVRJT04gIDEKKyNkZWZpbmUgWElJQ19XUklURV9PUEVSQVRJT04gMAorCisvKgorICogVHggRmlmbyB1cHBlciBiaXQgbWFza3MuCisgKi8KKyNkZWZpbmUgWElJQ19UWF9EWU5fU1RBUlRfTUFTSyAgICAgICAgICAgIDB4MDEwMCAvKiAxID0gU2V0IGR5bmFtaWMgc3RhcnQgKi8KKyNkZWZpbmUgWElJQ19UWF9EWU5fU1RPUF9NQVNLICAgICAgICAgICAgIDB4MDIwMCAvKiAxID0gU2V0IGR5bmFtaWMgc3RvcCAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBjb25zdGFudHMgZGVmaW5lIHRoZSByZWdpc3RlciBvZmZzZXRzIGZvciB0aGUgSW50ZXJydXB0CisgKiByZWdpc3RlcnMuIFRoZXJlIGFyZSBzb21lIGhvbGVzIGluIHRoZSBtZW1vcnkgbWFwIGZvciByZXNlcnZlZCBhZGRyZXNzZXMKKyAqIHRvIGFsbG93IG90aGVyIHJlZ2lzdGVycyB0byBiZSBhZGRlZCBhbmQgc3RpbGwgbWF0Y2ggdGhlIG1lbW9yeSBtYXAgb2YgdGhlCisgKiBpbnRlcnJ1cHQgY29udHJvbGxlciByZWdpc3RlcnMKKyAqLworI2RlZmluZSBYSUlDX0RHSUVSX09GRlNFVCAgICAweDFDIC8qIERldmljZSBHbG9iYWwgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZSBYSUlDX0lJU1JfT0ZGU0VUICAgICAweDIwIC8qIEludGVycnVwdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgWElJQ19JSUVSX09GRlNFVCAgICAgMHgyOCAvKiBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lIFhJSUNfUkVTRVRSX09GRlNFVCAgIDB4NDAgLyogUmVzZXQgUmVnaXN0ZXIgKi8KKworI2RlZmluZSBYSUlDX1JFU0VUX01BU0sgICAgICAgICAgICAgMHhBVUwKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgY29uc3RhbnQgaXMgdXNlZCBmb3IgdGhlIGRldmljZSBnbG9iYWwgaW50ZXJydXB0IGVuYWJsZQorICogcmVnaXN0ZXIsIHRvIGVuYWJsZSBhbGwgaW50ZXJydXB0cyBmb3IgdGhlIGRldmljZSwgdGhpcyBpcyB0aGUgb25seSBiaXQKKyAqIGluIHRoZSByZWdpc3RlcgorICovCisjZGVmaW5lIFhJSUNfR0lOVFJfRU5BQkxFX01BU0sgICAgICAweDgwMDAwMDAwVUwKKworI2RlZmluZSB4aWljX3R4X3NwYWNlKGkyYykgKChpMmMpLT50eF9tc2ctPmxlbiAtIChpMmMpLT50eF9wb3MpCisjZGVmaW5lIHhpaWNfcnhfc3BhY2UoaTJjKSAoKGkyYyktPnJ4X21zZy0+bGVuIC0gKGkyYyktPnJ4X3BvcykKKworc3RhdGljIHZvaWQgeGlpY19zdGFydF94ZmVyKHN0cnVjdCB4aWljX2kyYyAqaTJjKTsKK3N0YXRpYyB2b2lkIF9feGlpY19zdGFydF94ZmVyKHN0cnVjdCB4aWljX2kyYyAqaTJjKTsKKworc3RhdGljIGlubGluZSB2b2lkIHhpaWNfc2V0cmVnOChzdHJ1Y3QgeGlpY19pMmMgKmkyYywgaW50IHJlZywgdTggdmFsdWUpCit7CisJaW93cml0ZTgodmFsdWUsIGkyYy0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggeGlpY19nZXRyZWc4KHN0cnVjdCB4aWljX2kyYyAqaTJjLCBpbnQgcmVnKQoreworCXJldHVybiBpb3JlYWQ4KGkyYy0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB4aWljX3NldHJlZzE2KHN0cnVjdCB4aWljX2kyYyAqaTJjLCBpbnQgcmVnLCB1MTYgdmFsdWUpCit7CisJaW93cml0ZTE2KHZhbHVlLCBpMmMtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgeGlpY19zZXRyZWczMihzdHJ1Y3QgeGlpY19pMmMgKmkyYywgaW50IHJlZywgaW50IHZhbHVlKQoreworCWlvd3JpdGUzMih2YWx1ZSwgaTJjLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgeGlpY19nZXRyZWczMihzdHJ1Y3QgeGlpY19pMmMgKmkyYywgaW50IHJlZykKK3sKKwlyZXR1cm4gaW9yZWFkMzIoaTJjLT5iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHhpaWNfaXJxX2RpcyhzdHJ1Y3QgeGlpY19pMmMgKmkyYywgdTMyIG1hc2spCit7CisJdTMyIGllciA9IHhpaWNfZ2V0cmVnMzIoaTJjLCBYSUlDX0lJRVJfT0ZGU0VUKTsKKwl4aWljX3NldHJlZzMyKGkyYywgWElJQ19JSUVSX09GRlNFVCwgaWVyICYgfm1hc2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgeGlpY19pcnFfZW4oc3RydWN0IHhpaWNfaTJjICppMmMsIHUzMiBtYXNrKQoreworCXUzMiBpZXIgPSB4aWljX2dldHJlZzMyKGkyYywgWElJQ19JSUVSX09GRlNFVCk7CisJeGlpY19zZXRyZWczMihpMmMsIFhJSUNfSUlFUl9PRkZTRVQsIGllciB8IG1hc2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgeGlpY19pcnFfY2xyKHN0cnVjdCB4aWljX2kyYyAqaTJjLCB1MzIgbWFzaykKK3sKKwl1MzIgaXNyID0geGlpY19nZXRyZWczMihpMmMsIFhJSUNfSUlTUl9PRkZTRVQpOworCXhpaWNfc2V0cmVnMzIoaTJjLCBYSUlDX0lJU1JfT0ZGU0VULCBpc3IgJiBtYXNrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHhpaWNfaXJxX2Nscl9lbihzdHJ1Y3QgeGlpY19pMmMgKmkyYywgdTMyIG1hc2spCit7CisJeGlpY19pcnFfY2xyKGkyYywgbWFzayk7CisJeGlpY19pcnFfZW4oaTJjLCBtYXNrKTsKK30KKworc3RhdGljIHZvaWQgeGlpY19jbGVhcl9yeF9maWZvKHN0cnVjdCB4aWljX2kyYyAqaTJjKQoreworCXU4IHNyOworCWZvciAoc3IgPSB4aWljX2dldHJlZzgoaTJjLCBYSUlDX1NSX1JFR19PRkZTRVQpOworCQkhKHNyICYgWElJQ19TUl9SWF9GSUZPX0VNUFRZX01BU0spOworCQlzciA9IHhpaWNfZ2V0cmVnOChpMmMsIFhJSUNfU1JfUkVHX09GRlNFVCkpCisJCXhpaWNfZ2V0cmVnOChpMmMsIFhJSUNfRFJSX1JFR19PRkZTRVQpOworfQorCitzdGF0aWMgdm9pZCB4aWljX3JlaW5pdChzdHJ1Y3QgeGlpY19pMmMgKmkyYykKK3sKKwl4aWljX3NldHJlZzMyKGkyYywgWElJQ19SRVNFVFJfT0ZGU0VULCBYSUlDX1JFU0VUX01BU0spOworCisJLyogU2V0IHJlY2VpdmUgRmlmbyBkZXB0aCB0byBtYXhpbXVtICh6ZXJvIGJhc2VkKS4gKi8KKwl4aWljX3NldHJlZzgoaTJjLCBYSUlDX1JGRF9SRUdfT0ZGU0VULCBJSUNfUlhfRklGT19ERVBUSCAtIDEpOworCisJLyogUmVzZXQgVHggRmlmby4gKi8KKwl4aWljX3NldHJlZzgoaTJjLCBYSUlDX0NSX1JFR19PRkZTRVQsIFhJSUNfQ1JfVFhfRklGT19SRVNFVF9NQVNLKTsKKworCS8qIEVuYWJsZSBJSUMgRGV2aWNlLCByZW1vdmUgVHggRmlmbyByZXNldCAmIGRpc2FibGUgZ2VuZXJhbCBjYWxsLiAqLworCXhpaWNfc2V0cmVnOChpMmMsIFhJSUNfQ1JfUkVHX09GRlNFVCwgWElJQ19DUl9FTkFCTEVfREVWSUNFX01BU0spOworCisJLyogbWFrZSBzdXJlIFJYIGZpZm8gaXMgZW1wdHkgKi8KKwl4aWljX2NsZWFyX3J4X2ZpZm8oaTJjKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCisJeGlpY19zZXRyZWczMihpMmMsIFhJSUNfREdJRVJfT0ZGU0VULCBYSUlDX0dJTlRSX0VOQUJMRV9NQVNLKTsKKworCXhpaWNfaXJxX2Nscl9lbihpMmMsIFhJSUNfSU5UUl9BQVNfTUFTSyB8IFhJSUNfSU5UUl9BUkJfTE9TVF9NQVNLKTsKK30KKworc3RhdGljIHZvaWQgeGlpY19kZWluaXQoc3RydWN0IHhpaWNfaTJjICppMmMpCit7CisJdTggY3I7CisKKwl4aWljX3NldHJlZzMyKGkyYywgWElJQ19SRVNFVFJfT0ZGU0VULCBYSUlDX1JFU0VUX01BU0spOworCisJLyogRGlzYWJsZSBJSUMgRGV2aWNlLiAqLworCWNyID0geGlpY19nZXRyZWc4KGkyYywgWElJQ19DUl9SRUdfT0ZGU0VUKTsKKwl4aWljX3NldHJlZzgoaTJjLCBYSUlDX0NSX1JFR19PRkZTRVQsIGNyICYgflhJSUNfQ1JfRU5BQkxFX0RFVklDRV9NQVNLKTsKK30KKworc3RhdGljIHZvaWQgeGlpY19yZWFkX3J4KHN0cnVjdCB4aWljX2kyYyAqaTJjKQoreworCXU4IGJ5dGVzX2luX2ZpZm87CisJaW50IGk7CisKKwlieXRlc19pbl9maWZvID0geGlpY19nZXRyZWc4KGkyYywgWElJQ19SRk9fUkVHX09GRlNFVCkgKyAxOworCisJZGV2X2RiZyhpMmMtPmFkYXAuZGV2LnBhcmVudCwgIiVzIGVudHJ5LCBieXRlcyBpbiBmaWZvOiAlZCwgbXNnOiAlZCIKKwkJIiwgU1I6IDB4JXgsIENSOiAweCV4XG4iLAorCQlfX2Z1bmNfXywgYnl0ZXNfaW5fZmlmbywgeGlpY19yeF9zcGFjZShpMmMpLAorCQl4aWljX2dldHJlZzgoaTJjLCBYSUlDX1NSX1JFR19PRkZTRVQpLAorCQl4aWljX2dldHJlZzgoaTJjLCBYSUlDX0NSX1JFR19PRkZTRVQpKTsKKworCWlmIChieXRlc19pbl9maWZvID4geGlpY19yeF9zcGFjZShpMmMpKQorCQlieXRlc19pbl9maWZvID0geGlpY19yeF9zcGFjZShpMmMpOworCisJZm9yIChpID0gMDsgaSA8IGJ5dGVzX2luX2ZpZm87IGkrKykKKwkJaTJjLT5yeF9tc2ctPmJ1ZltpMmMtPnJ4X3BvcysrXSA9CisJCQl4aWljX2dldHJlZzgoaTJjLCBYSUlDX0RSUl9SRUdfT0ZGU0VUKTsKKworCXhpaWNfc2V0cmVnOChpMmMsIFhJSUNfUkZEX1JFR19PRkZTRVQsCisJCSh4aWljX3J4X3NwYWNlKGkyYykgPiBJSUNfUlhfRklGT19ERVBUSCkgPworCQlJSUNfUlhfRklGT19ERVBUSCAtIDEgOiAgeGlpY19yeF9zcGFjZShpMmMpIC0gMSk7Cit9CisKK3N0YXRpYyBpbnQgeGlpY190eF9maWZvX3NwYWNlKHN0cnVjdCB4aWljX2kyYyAqaTJjKQoreworCS8qIHJldHVybiB0aGUgYWN0dWFsIHNwYWNlIGxlZnQgaW4gdGhlIEZJRk8gKi8KKwlyZXR1cm4gSUlDX1RYX0ZJRk9fREVQVEggLSB4aWljX2dldHJlZzgoaTJjLCBYSUlDX1RGT19SRUdfT0ZGU0VUKSAtIDE7Cit9CisKK3N0YXRpYyB2b2lkIHhpaWNfZmlsbF90eF9maWZvKHN0cnVjdCB4aWljX2kyYyAqaTJjKQoreworCXU4IGZpZm9fc3BhY2UgPSB4aWljX3R4X2ZpZm9fc3BhY2UoaTJjKTsKKwlpbnQgbGVuID0geGlpY190eF9zcGFjZShpMmMpOworCisJbGVuID0gKGxlbiA+IGZpZm9fc3BhY2UpID8gZmlmb19zcGFjZSA6IGxlbjsKKworCWRldl9kYmcoaTJjLT5hZGFwLmRldi5wYXJlbnQsICIlcyBlbnRyeSwgbGVuOiAlZCwgZmlmbyBzcGFjZTogJWRcbiIsCisJCV9fZnVuY19fLCBsZW4sIGZpZm9fc3BhY2UpOworCisJd2hpbGUgKGxlbi0tKSB7CisJCXUxNiBkYXRhID0gaTJjLT50eF9tc2ctPmJ1ZltpMmMtPnR4X3BvcysrXTsKKwkJaWYgKCh4aWljX3R4X3NwYWNlKGkyYykgPT0gMCkgJiYgKGkyYy0+bm1zZ3MgPT0gMSkpIHsKKwkJCS8qIGxhc3QgbWVzc2FnZSBpbiB0cmFuc2ZlciAtPiBTVE9QICovCisJCQlkYXRhIHw9IFhJSUNfVFhfRFlOX1NUT1BfTUFTSzsKKwkJCWRldl9kYmcoaTJjLT5hZGFwLmRldi5wYXJlbnQsICIlcyBUWCBTVE9QXG4iLCBfX2Z1bmNfXyk7CisKKwkJCXhpaWNfc2V0cmVnMTYoaTJjLCBYSUlDX0RUUl9SRUdfT0ZGU0VULCBkYXRhKTsKKwkJfSBlbHNlCisJCQl4aWljX3NldHJlZzgoaTJjLCBYSUlDX0RUUl9SRUdfT0ZGU0VULCBkYXRhKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHhpaWNfd2FrZXVwKHN0cnVjdCB4aWljX2kyYyAqaTJjLCBpbnQgY29kZSkKK3sKKwlpMmMtPnR4X21zZyA9IE5VTEw7CisJaTJjLT5yeF9tc2cgPSBOVUxMOworCWkyYy0+bm1zZ3MgPSAwOworCWkyYy0+c3RhdGUgPSBjb2RlOworCXdha2VfdXAoJmkyYy0+d2FpdCk7Cit9CisKK3N0YXRpYyB2b2lkIHhpaWNfcHJvY2VzcyhzdHJ1Y3QgeGlpY19pMmMgKmkyYykKK3sKKwl1MzIgcGVuZCwgaXNyLCBpZXI7CisJdTMyIGNsciA9IDA7CisKKwkvKiBHZXQgdGhlIGludGVycnVwdCBTdGF0dXMgZnJvbSB0aGUgSVBJRi4gVGhlcmUgaXMgbm8gY2xlYXJpbmcgb2YKKwkgKiBpbnRlcnJ1cHRzIGluIHRoZSBJUElGLiBJbnRlcnJ1cHRzIG11c3QgYmUgY2xlYXJlZCBhdCB0aGUgc291cmNlLgorCSAqIFRvIGZpbmQgd2hpY2ggaW50ZXJydXB0cyBhcmUgcGVuZGluZzsgQU5EIGludGVycnVwdHMgcGVuZGluZyB3aXRoCisJICogaW50ZXJydXB0cyBtYXNrZWQuCisJICovCisJaXNyID0geGlpY19nZXRyZWczMihpMmMsIFhJSUNfSUlTUl9PRkZTRVQpOworCWllciA9IHhpaWNfZ2V0cmVnMzIoaTJjLCBYSUlDX0lJRVJfT0ZGU0VUKTsKKwlwZW5kID0gaXNyICYgaWVyOworCisJZGV2X2RiZyhpMmMtPmFkYXAuZGV2LnBhcmVudCwgIiVzIGVudHJ5LCBJRVI6IDB4JXgsIElTUjogMHgleCwgIgorCQkicGVuZDogMHgleCwgU1I6IDB4JXgsIG1zZzogJXAsIG5tc2dzOiAlZFxuIiwKKwkJX19mdW5jX18sIGllciwgaXNyLCBwZW5kLCB4aWljX2dldHJlZzgoaTJjLCBYSUlDX1NSX1JFR19PRkZTRVQpLAorCQlpMmMtPnR4X21zZywgaTJjLT5ubXNncyk7CisKKwkvKiBEbyBub3QgcHJvY2Vzc2VzIGEgZGV2aWNlcyBpbnRlcnJ1cHRzIGlmIHRoZSBkZXZpY2UgaGFzIG5vCisJICogaW50ZXJydXB0cyBwZW5kaW5nCisJICovCisJaWYgKCFwZW5kKQorCQlyZXR1cm47CisKKwkvKiBTZXJ2aWNlIHJlcXVlc3RpbmcgaW50ZXJydXB0ICovCisJaWYgKChwZW5kICYgWElJQ19JTlRSX0FSQl9MT1NUX01BU0spIHx8CisJCSgocGVuZCAmIFhJSUNfSU5UUl9UWF9FUlJPUl9NQVNLKSAmJgorCQkhKHBlbmQgJiBYSUlDX0lOVFJfUlhfRlVMTF9NQVNLKSkpIHsKKwkJLyogYnVzIGFyYnJpdHJhdGlvbiBsb3N0LCBvci4uLgorCQkgKiBUcmFuc21pdCBlcnJvciBfT1JfIFJYIGNvbXBsZXRlZAorCQkgKiBpZiB0aGlzIGhhcHBlbnMgd2hlbiBSWF9GVUxMIGlzIG5vdCBzZXQKKwkJICogdGhpcyBpcyBwcm9iYWJseSBhIFRYIGVycm9yCisJCSAqLworCisJCWRldl9kYmcoaTJjLT5hZGFwLmRldi5wYXJlbnQsICIlcyBlcnJvclxuIiwgX19mdW5jX18pOworCisJCS8qIGR5bmFtaWMgbW9kZSBzZWVtIHRvIHN1ZmZlciBmcm9tIHByb2JsZW1zIGlmIHdlIGp1c3QgZmx1c2hlcworCQkgKiBmaWZvcyBhbmQgdGhlIG5leHQgbWVzc2FnZSBpcyBhIFRYIHdpdGggbGVuIDAgKG9ubHkgYWRkcikKKwkJICogcmVzZXQgdGhlIElQIGluc3RlYWQgb2YganVzdCBmbHVzaCBmaWZvcworCQkgKi8KKwkJeGlpY19yZWluaXQoaTJjKTsKKworCQlpZiAoaTJjLT50eF9tc2cpCisJCQl4aWljX3dha2V1cChpMmMsIFNUQVRFX0VSUk9SKTsKKworCX0gZWxzZSBpZiAocGVuZCAmIFhJSUNfSU5UUl9SWF9GVUxMX01BU0spIHsKKwkJLyogUmVjZWl2ZSByZWdpc3Rlci9GSUZPIGlzIGZ1bGwgKi8KKworCQljbHIgPSBYSUlDX0lOVFJfUlhfRlVMTF9NQVNLOworCQlpZiAoIWkyYy0+cnhfbXNnKSB7CisJCQlkZXZfZGJnKGkyYy0+YWRhcC5kZXYucGFyZW50LAorCQkJCSIlcyB1bmV4cGV4dGVkIFJYIElSUVxuIiwgX19mdW5jX18pOworCQkJeGlpY19jbGVhcl9yeF9maWZvKGkyYyk7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCXhpaWNfcmVhZF9yeChpMmMpOworCQlpZiAoeGlpY19yeF9zcGFjZShpMmMpID09IDApIHsKKwkJCS8qIHRoaXMgaXMgdGhlIGxhc3QgcGFydCBvZiB0aGUgbWVzc2FnZSAqLworCQkJaTJjLT5yeF9tc2cgPSBOVUxMOworCisJCQkvKiBhbHNvIGNsZWFyIFRYIGVycm9yIGlmIHRoZXJlIChSWCBjb21wbGV0ZSkgKi8KKwkJCWNsciB8PSAoaXNyICYgWElJQ19JTlRSX1RYX0VSUk9SX01BU0spOworCisJCQlkZXZfZGJnKGkyYy0+YWRhcC5kZXYucGFyZW50LAorCQkJCSIlcyBlbmQgb2YgbWVzc2FnZSwgbm1zZ3M6ICVkXG4iLAorCQkJCV9fZnVuY19fLCBpMmMtPm5tc2dzKTsKKworCQkJLyogc2VuZCBuZXh0IG1lc3NhZ2UgaWYgdGhpcyB3YXNuJ3QgdGhlIGxhc3QsCisJCQkgKiBvdGhlcndpc2UgdGhlIHRyYW5zZmVyIHdpbGwgYmUgZmluaWFsaXNlIHdoZW4KKwkJCSAqIHJlY2VpdmluZyB0aGUgYnVzIG5vdCBidXN5IGludGVycnVwdAorCQkJICovCisJCQlpZiAoaTJjLT5ubXNncyA+IDEpIHsKKwkJCQlpMmMtPm5tc2dzLS07CisJCQkJaTJjLT50eF9tc2crKzsKKwkJCQlkZXZfZGJnKGkyYy0+YWRhcC5kZXYucGFyZW50LAorCQkJCQkiJXMgd2lsbCBzdGFydCBuZXh0Li4uXG4iLCBfX2Z1bmNfXyk7CisKKwkJCQlfX3hpaWNfc3RhcnRfeGZlcihpMmMpOworCQkJfQorCQl9CisJfSBlbHNlIGlmIChwZW5kICYgWElJQ19JTlRSX0JOQl9NQVNLKSB7CisJCS8qIElJQyBidXMgaGFzIHRyYW5zaXRpb25lZCB0byBub3QgYnVzeSAqLworCQljbHIgPSBYSUlDX0lOVFJfQk5CX01BU0s7CisKKwkJLyogVGhlIGJ1cyBpcyBub3QgYnVzeSwgZGlzYWJsZSBCdXNOb3RCdXN5IGludGVycnVwdCAqLworCQl4aWljX2lycV9kaXMoaTJjLCBYSUlDX0lOVFJfQk5CX01BU0spOworCisJCWlmICghaTJjLT50eF9tc2cpCisJCQlnb3RvIG91dDsKKworCQlpZiAoKGkyYy0+bm1zZ3MgPT0gMSkgJiYgIWkyYy0+cnhfbXNnICYmCisJCQl4aWljX3R4X3NwYWNlKGkyYykgPT0gMCkKKwkJCXhpaWNfd2FrZXVwKGkyYywgU1RBVEVfRE9ORSk7CisJCWVsc2UKKwkJCXhpaWNfd2FrZXVwKGkyYywgU1RBVEVfRVJST1IpOworCisJfSBlbHNlIGlmIChwZW5kICYgKFhJSUNfSU5UUl9UWF9FTVBUWV9NQVNLIHwgWElJQ19JTlRSX1RYX0hBTEZfTUFTSykpIHsKKwkJLyogVHJhbnNtaXQgcmVnaXN0ZXIvRklGTyBpcyBlbXB0eSBvciC9IGVtcHR5ICovCisKKwkJY2xyID0gcGVuZCAmCisJCQkoWElJQ19JTlRSX1RYX0VNUFRZX01BU0sgfCBYSUlDX0lOVFJfVFhfSEFMRl9NQVNLKTsKKworCQlpZiAoIWkyYy0+dHhfbXNnKSB7CisJCQlkZXZfZGJnKGkyYy0+YWRhcC5kZXYucGFyZW50LAorCQkJCSIlcyB1bmV4cGV4dGVkIFRYIElSUVxuIiwgX19mdW5jX18pOworCQkJZ290byBvdXQ7CisJCX0KKworCQl4aWljX2ZpbGxfdHhfZmlmbyhpMmMpOworCisJCS8qIGN1cnJlbnQgbWVzc2FnZSBzZW50IGFuZCB0aGVyZSBpcyBzcGFjZSBpbiB0aGUgZmlmbyAqLworCQlpZiAoIXhpaWNfdHhfc3BhY2UoaTJjKSAmJiB4aWljX3R4X2ZpZm9fc3BhY2UoaTJjKSA+PSAyKSB7CisJCQlkZXZfZGJnKGkyYy0+YWRhcC5kZXYucGFyZW50LAorCQkJCSIlcyBlbmQgb2YgbWVzc2FnZSBzZW50LCBubXNnczogJWRcbiIsCisJCQkJX19mdW5jX18sIGkyYy0+bm1zZ3MpOworCQkJaWYgKGkyYy0+bm1zZ3MgPiAxKSB7CisJCQkJaTJjLT5ubXNncy0tOworCQkJCWkyYy0+dHhfbXNnKys7CisJCQkJX194aWljX3N0YXJ0X3hmZXIoaTJjKTsKKwkJCX0gZWxzZSB7CisJCQkJeGlpY19pcnFfZGlzKGkyYywgWElJQ19JTlRSX1RYX0hBTEZfTUFTSyk7CisKKwkJCQlkZXZfZGJnKGkyYy0+YWRhcC5kZXYucGFyZW50LAorCQkJCQkiJXMgR290IFRYIElSUSBidXQgbm8gbW9yZSB0byBkby4uLlxuIiwKKwkJCQkJX19mdW5jX18pOworCQkJfQorCQl9IGVsc2UgaWYgKCF4aWljX3R4X3NwYWNlKGkyYykgJiYgKGkyYy0+bm1zZ3MgPT0gMSkpCisJCQkvKiBjdXJyZW50IGZyYW1lIGlzIHNlbnQgYW5kIGlzIGxhc3QsCisJCQkgKiBtYWtlIHN1cmUgdG8gZGlzYWJsZSB0eCBoYWxmCisJCQkgKi8KKwkJCXhpaWNfaXJxX2RpcyhpMmMsIFhJSUNfSU5UUl9UWF9IQUxGX01BU0spOworCX0gZWxzZSB7CisJCS8qIGdvdCBJUlEgd2hpY2ggaXMgbm90IGFja2VkICovCisJCWRldl9lcnIoaTJjLT5hZGFwLmRldi5wYXJlbnQsICIlcyBHb3QgdW5leHBlY3RlZCBJUlFcbiIsCisJCQlfX2Z1bmNfXyk7CisJCWNsciA9IHBlbmQ7CisJfQorb3V0OgorCWRldl9kYmcoaTJjLT5hZGFwLmRldi5wYXJlbnQsICIlcyBjbHI6IDB4JXhcbiIsIF9fZnVuY19fLCBjbHIpOworCisJeGlpY19zZXRyZWczMihpMmMsIFhJSUNfSUlTUl9PRkZTRVQsIGNscik7Cit9CisKK3N0YXRpYyBpbnQgeGlpY19idXNfYnVzeShzdHJ1Y3QgeGlpY19pMmMgKmkyYykKK3sKKwl1OCBzciA9IHhpaWNfZ2V0cmVnOChpMmMsIFhJSUNfU1JfUkVHX09GRlNFVCk7CisKKwlyZXR1cm4gKHNyICYgWElJQ19TUl9CVVNfQlVTWV9NQVNLKSA/IC1FQlVTWSA6IDA7Cit9CisKK3N0YXRpYyBpbnQgeGlpY19idXN5KHN0cnVjdCB4aWljX2kyYyAqaTJjKQoreworCWludCB0cmllcyA9IDM7CisJaW50IGVycjsKKworCWlmIChpMmMtPnR4X21zZykKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIGZvciBpbnN0YW5jZSBpZiBwcmV2aW91cyB0cmFuc2ZlciB3YXMgdGVybWluYXRlZCBkdWUgdG8gVFggZXJyb3IKKwkgKiBpdCBtaWdodCBiZSB0aGF0IHRoZSBidXMgaXMgb24gaXQncyB3YXkgdG8gYmVjb21lIGF2YWlsYWJsZQorCSAqIGdpdmUgaXQgYXQgbW9zdCAzIG1zIHRvIHdha2UKKwkgKi8KKwllcnIgPSB4aWljX2J1c19idXN5KGkyYyk7CisJd2hpbGUgKGVyciAmJiB0cmllcy0tKSB7CisJCW1kZWxheSgxKTsKKwkJZXJyID0geGlpY19idXNfYnVzeShpMmMpOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHhpaWNfc3RhcnRfcmVjdihzdHJ1Y3QgeGlpY19pMmMgKmkyYykKK3sKKwl1OCByeF93YXRlcm1hcms7CisJc3RydWN0IGkyY19tc2cgKm1zZyA9IGkyYy0+cnhfbXNnID0gaTJjLT50eF9tc2c7CisKKwkvKiBDbGVhciBhbmQgZW5hYmxlIFJ4IGZ1bGwgaW50ZXJydXB0LiAqLworCXhpaWNfaXJxX2Nscl9lbihpMmMsIFhJSUNfSU5UUl9SWF9GVUxMX01BU0sgfCBYSUlDX0lOVFJfVFhfRVJST1JfTUFTSyk7CisKKwkvKiB3ZSB3YW50IHRvIGdldCBhbGwgYnV0IGxhc3QgYnl0ZSwgYmVjYXVzZSB0aGUgVFhfRVJST1IgSVJRIGlzIHVzZWQKKwkgKiB0byBpbmlkaWNhdGUgZXJyb3IgQUNLIG9uIHRoZSBhZGRyZXNzLCBhbmQgbmVnYXRpdmUgYWNrIG9uIHRoZSBsYXN0CisJICogcmVjZWl2ZWQgYnl0ZSwgc28gdG8gbm90IG1peCB0aGVtIHJlY2VpdmUgYWxsIGJ1dCBsYXN0LgorCSAqIEluIHRoZSBjYXNlIHdoZXJlIHRoZXJlIGlzIG9ubHkgb25lIGJ5dGUgdG8gcmVjZWl2ZQorCSAqIHdlIGNhbiBjaGVjayBpZiBFUlJPUiBhbmQgUlggZnVsbCBpcyBzZXQgYXQgdGhlIHNhbWUgdGltZQorCSAqLworCXJ4X3dhdGVybWFyayA9IG1zZy0+bGVuOworCWlmIChyeF93YXRlcm1hcmsgPiBJSUNfUlhfRklGT19ERVBUSCkKKwkJcnhfd2F0ZXJtYXJrID0gSUlDX1JYX0ZJRk9fREVQVEg7CisJeGlpY19zZXRyZWc4KGkyYywgWElJQ19SRkRfUkVHX09GRlNFVCwgcnhfd2F0ZXJtYXJrIC0gMSk7CisKKwlpZiAoIShtc2ctPmZsYWdzICYgSTJDX01fTk9TVEFSVCkpCisJCS8qIHdyaXRlIHRoZSBhZGRyZXNzICovCisJCXhpaWNfc2V0cmVnMTYoaTJjLCBYSUlDX0RUUl9SRUdfT0ZGU0VULAorCQkJKG1zZy0+YWRkciA8PCAxKSB8IFhJSUNfUkVBRF9PUEVSQVRJT04gfAorCQkJWElJQ19UWF9EWU5fU1RBUlRfTUFTSyk7CisKKwl4aWljX2lycV9jbHJfZW4oaTJjLCBYSUlDX0lOVFJfQk5CX01BU0spOworCisJeGlpY19zZXRyZWcxNihpMmMsIFhJSUNfRFRSX1JFR19PRkZTRVQsCisJCW1zZy0+bGVuIHwgKChpMmMtPm5tc2dzID09IDEpID8gWElJQ19UWF9EWU5fU1RPUF9NQVNLIDogMCkpOworCWlmIChpMmMtPm5tc2dzID09IDEpCisJCS8qIHZlcnkgbGFzdCwgZW5hYmxlIGJ1cyBub3QgYnVzeSBhcyB3ZWxsICovCisJCXhpaWNfaXJxX2Nscl9lbihpMmMsIFhJSUNfSU5UUl9CTkJfTUFTSyk7CisKKwkvKiB0aGUgbWVzc2FnZSBpcyB0eDplZCAqLworCWkyYy0+dHhfcG9zID0gbXNnLT5sZW47Cit9CisKK3N0YXRpYyB2b2lkIHhpaWNfc3RhcnRfc2VuZChzdHJ1Y3QgeGlpY19pMmMgKmkyYykKK3sKKwlzdHJ1Y3QgaTJjX21zZyAqbXNnID0gaTJjLT50eF9tc2c7CisKKwl4aWljX2lycV9jbHIoaTJjLCBYSUlDX0lOVFJfVFhfRVJST1JfTUFTSyk7CisKKwlkZXZfZGJnKGkyYy0+YWRhcC5kZXYucGFyZW50LCAiJXMgZW50cnksIG1zZzogJXAsIGxlbjogJWQsICIKKwkJIklTUjogMHgleCwgQ1I6IDB4JXhcbiIsCisJCV9fZnVuY19fLCBtc2csIG1zZy0+bGVuLCB4aWljX2dldHJlZzMyKGkyYywgWElJQ19JSVNSX09GRlNFVCksCisJCXhpaWNfZ2V0cmVnOChpMmMsIFhJSUNfQ1JfUkVHX09GRlNFVCkpOworCisJaWYgKCEobXNnLT5mbGFncyAmIEkyQ19NX05PU1RBUlQpKSB7CisJCS8qIHdyaXRlIHRoZSBhZGRyZXNzICovCisJCXUxNiBkYXRhID0gKChtc2ctPmFkZHIgPDwgMSkgJiAweGZlKSB8IFhJSUNfV1JJVEVfT1BFUkFUSU9OIHwKKwkJCVhJSUNfVFhfRFlOX1NUQVJUX01BU0s7CisJCWlmICgoaTJjLT5ubXNncyA9PSAxKSAmJiBtc2ctPmxlbiA9PSAwKQorCQkJLyogbm8gZGF0YSBhbmQgbGFzdCBtZXNzYWdlIC0+IGFkZCBTVE9QICovCisJCQlkYXRhIHw9IFhJSUNfVFhfRFlOX1NUT1BfTUFTSzsKKworCQl4aWljX3NldHJlZzE2KGkyYywgWElJQ19EVFJfUkVHX09GRlNFVCwgZGF0YSk7CisJfQorCisJeGlpY19maWxsX3R4X2ZpZm8oaTJjKTsKKworCS8qIENsZWFyIGFueSBwZW5kaW5nIFR4IGVtcHR5LCBUeCBFcnJvciBhbmQgdGhlbiBlbmFibGUgdGhlbS4gKi8KKwl4aWljX2lycV9jbHJfZW4oaTJjLCBYSUlDX0lOVFJfVFhfRU1QVFlfTUFTSyB8IFhJSUNfSU5UUl9UWF9FUlJPUl9NQVNLIHwKKwkJWElJQ19JTlRSX0JOQl9NQVNLKTsKK30KKworc3RhdGljIGlycXJldHVybl90IHhpaWNfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgeGlpY19pMmMgKmkyYyA9IGRldl9pZDsKKworCXNwaW5fbG9jaygmaTJjLT5sb2NrKTsKKwkvKiBkaXNhYmxlIGludGVycnVwdHMgZ2xvYmFsbHkgKi8KKwl4aWljX3NldHJlZzMyKGkyYywgWElJQ19ER0lFUl9PRkZTRVQsIDApOworCisJZGV2X2RiZyhpMmMtPmFkYXAuZGV2LnBhcmVudCwgIiVzIGVudHJ5XG4iLCBfX2Z1bmNfXyk7CisKKwl4aWljX3Byb2Nlc3MoaTJjKTsKKworCXhpaWNfc2V0cmVnMzIoaTJjLCBYSUlDX0RHSUVSX09GRlNFVCwgWElJQ19HSU5UUl9FTkFCTEVfTUFTSyk7CisJc3Bpbl91bmxvY2soJmkyYy0+bG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIF9feGlpY19zdGFydF94ZmVyKHN0cnVjdCB4aWljX2kyYyAqaTJjKQoreworCWludCBmaXJzdCA9IDE7CisJaW50IGZpZm9fc3BhY2UgPSB4aWljX3R4X2ZpZm9fc3BhY2UoaTJjKTsKKwlkZXZfZGJnKGkyYy0+YWRhcC5kZXYucGFyZW50LCAiJXMgZW50cnksIG1zZzogJXAsIGZpZm9zIHNwYWNlOiAlZFxuIiwKKwkJX19mdW5jX18sIGkyYy0+dHhfbXNnLCBmaWZvX3NwYWNlKTsKKworCWlmICghaTJjLT50eF9tc2cpCisJCXJldHVybjsKKworCWkyYy0+cnhfcG9zID0gMDsKKwlpMmMtPnR4X3BvcyA9IDA7CisJaTJjLT5zdGF0ZSA9IFNUQVRFX1NUQVJUOworCXdoaWxlICgoZmlmb19zcGFjZSA+PSAyKSAmJiAoZmlyc3QgfHwgKGkyYy0+bm1zZ3MgPiAxKSkpIHsKKwkJaWYgKCFmaXJzdCkgeworCQkJaTJjLT5ubXNncy0tOworCQkJaTJjLT50eF9tc2crKzsKKwkJCWkyYy0+dHhfcG9zID0gMDsKKwkJfSBlbHNlCisJCQlmaXJzdCA9IDA7CisKKwkJaWYgKGkyYy0+dHhfbXNnLT5mbGFncyAmIEkyQ19NX1JEKSB7CisJCQkvKiB3ZSBkb250IGRhdGUgcHV0dGluZyBzZXZlcmFsIHJlYWRzIGluIHRoZSBGSUZPICovCisJCQl4aWljX3N0YXJ0X3JlY3YoaTJjKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIHsKKwkJCXhpaWNfc3RhcnRfc2VuZChpMmMpOworCQkJaWYgKHhpaWNfdHhfc3BhY2UoaTJjKSAhPSAwKSB7CisJCQkJLyogdGhlIG1lc3NhZ2UgY291bGQgbm90IGJlIGNvbXBsZXRlbHkgc2VudCAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJZmlmb19zcGFjZSA9IHhpaWNfdHhfZmlmb19zcGFjZShpMmMpOworCX0KKworCS8qIHRoZXJlIGFyZSBtb3JlIG1lc3NhZ2VzIG9yIHRoZSBjdXJyZW50IG9uZSBjb3VsZCBub3QgYmUgY29tcGxldGVseQorCSAqIHB1dCBpbnRvIHRoZSBGSUZPLCBhbHNvIGVuYWJsZSB0aGUgaGFsZiBlbXB0eSBpbnRlcnJ1cHQKKwkgKi8KKwlpZiAoaTJjLT5ubXNncyA+IDEgfHwgeGlpY190eF9zcGFjZShpMmMpKQorCQl4aWljX2lycV9jbHJfZW4oaTJjLCBYSUlDX0lOVFJfVFhfSEFMRl9NQVNLKTsKKworfQorCitzdGF0aWMgdm9pZCB4aWljX3N0YXJ0X3hmZXIoc3RydWN0IHhpaWNfaTJjICppMmMpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpMmMtPmxvY2ssIGZsYWdzKTsKKwl4aWljX3JlaW5pdChpMmMpOworCS8qIGRpc2FibGUgaW50ZXJydXB0cyBnbG9iYWxseSAqLworCXhpaWNfc2V0cmVnMzIoaTJjLCBYSUlDX0RHSUVSX09GRlNFVCwgMCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaTJjLT5sb2NrLCBmbGFncyk7CisKKwlfX3hpaWNfc3RhcnRfeGZlcihpMmMpOworCXhpaWNfc2V0cmVnMzIoaTJjLCBYSUlDX0RHSUVSX09GRlNFVCwgWElJQ19HSU5UUl9FTkFCTEVfTUFTSyk7Cit9CisKK3N0YXRpYyBpbnQgeGlpY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0pCit7CisJc3RydWN0IHhpaWNfaTJjICppMmMgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCWludCBlcnI7CisKKwlkZXZfZGJnKGFkYXAtPmRldi5wYXJlbnQsICIlcyBlbnRyeSBTUjogMHgleFxuIiwgX19mdW5jX18sCisJCXhpaWNfZ2V0cmVnOChpMmMsIFhJSUNfU1JfUkVHX09GRlNFVCkpOworCisJZXJyID0geGlpY19idXN5KGkyYyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWkyYy0+dHhfbXNnID0gbXNnczsKKwlpMmMtPm5tc2dzID0gbnVtOworCisJeGlpY19zdGFydF94ZmVyKGkyYyk7CisKKwlpZiAod2FpdF9ldmVudF90aW1lb3V0KGkyYy0+d2FpdCwgKGkyYy0+c3RhdGUgPT0gU1RBVEVfRVJST1IpIHx8CisJCShpMmMtPnN0YXRlID09IFNUQVRFX0RPTkUpLCBIWikpCisJCXJldHVybiAoaTJjLT5zdGF0ZSA9PSBTVEFURV9ET05FKSA/IG51bSA6IC1FSU87CisJZWxzZSB7CisJCWkyYy0+dHhfbXNnID0gTlVMTDsKKwkJaTJjLT5yeF9tc2cgPSBOVUxMOworCQlpMmMtPm5tc2dzID0gMDsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorfQorCitzdGF0aWMgdTMyIHhpaWNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQyB8IEkyQ19GVU5DX1NNQlVTX0VNVUw7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSB4aWljX2FsZ29yaXRobSA9IHsKKwkubWFzdGVyX3hmZXIJPSB4aWljX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkJPSB4aWljX2Z1bmMsCit9OworCitzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIHhpaWNfYWRhcHRlciA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gRFJJVkVSX05BTUUsCisJLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiB8IEkyQ19DTEFTU19TUEQsCisJLmFsZ28JCT0gJnhpaWNfYWxnb3JpdGhtLAorfTsKKworCitzdGF0aWMgaW50IF9fZGV2aW5pdCB4aWljX2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB4aWljX2kyYyAqaTJjOworCXN0cnVjdCB4aWljX2kyY19wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0LCBpcnE7CisJdTggaTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaWYgKCFyZXMpCisJCWdvdG8gcmVzb3VyY2VfbWlzc2luZzsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApCisJCWdvdG8gcmVzb3VyY2VfbWlzc2luZzsKKworCXBkYXRhID0gKHN0cnVjdCB4aWljX2kyY19wbGF0Zm9ybV9kYXRhICopIHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEpCisJCXJldHVybiAtRUlOVkFMOworCisJaTJjID0ga3phbGxvYyhzaXplb2YoKmkyYyksIEdGUF9LRVJORUwpOworCWlmICghaTJjKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSwgcGRldi0+bmFtZSkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTWVtb3J5IHJlZ2lvbiBidXN5XG4iKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIHJlcXVlc3RfbWVtX2ZhaWxlZDsKKwl9CisKKwlpMmMtPmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFpMmMtPmJhc2UpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIG1hcCByZWdpc3RlcnNcbiIpOworCQlyZXQgPSAtRUlPOworCQlnb3RvIG1hcF9mYWlsZWQ7CisJfQorCisJLyogaG9vayB1cCBkcml2ZXIgdG8gdHJlZSAqLworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGkyYyk7CisJaTJjLT5hZGFwID0geGlpY19hZGFwdGVyOworCWkyY19zZXRfYWRhcGRhdGEoJmkyYy0+YWRhcCwgaTJjKTsKKwlpMmMtPmFkYXAuZGV2LnBhcmVudCA9ICZwZGV2LT5kZXY7CisKKwl4aWljX3JlaW5pdChpMmMpOworCisJc3Bpbl9sb2NrX2luaXQoJmkyYy0+bG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmaTJjLT53YWl0KTsKKwlyZXQgPSByZXF1ZXN0X2lycShpcnEsIHhpaWNfaXNyLCAwLCBwZGV2LT5uYW1lLCBpMmMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGNsYWltIElSUVxuIik7CisJCWdvdG8gcmVxdWVzdF9pcnFfZmFpbGVkOworCX0KKworCS8qIGFkZCBpMmMgYWRhcHRlciB0byBpMmMgdHJlZSAqLworCXJldCA9IGkyY19hZGRfYWRhcHRlcigmaTJjLT5hZGFwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhZGQgYWRhcHRlclxuIik7CisJCWdvdG8gYWRkX2FkYXB0ZXJfZmFpbGVkOworCX0KKworCS8qIGFkZCBpbiBrbm93biBkZXZpY2VzIHRvIHRoZSBidXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9kZXZpY2VzOyBpKyspCisJCWkyY19uZXdfZGV2aWNlKCZpMmMtPmFkYXAsIHBkYXRhLT5kZXZpY2VzICsgaSk7CisKKwlyZXR1cm4gMDsKKworYWRkX2FkYXB0ZXJfZmFpbGVkOgorCWZyZWVfaXJxKGlycSwgaTJjKTsKK3JlcXVlc3RfaXJxX2ZhaWxlZDoKKwl4aWljX2RlaW5pdChpMmMpOworCWlvdW5tYXAoaTJjLT5iYXNlKTsKK21hcF9mYWlsZWQ6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CityZXF1ZXN0X21lbV9mYWlsZWQ6CisJa2ZyZWUoaTJjKTsKKworCXJldHVybiByZXQ7CityZXNvdXJjZV9taXNzaW5nOgorCWRldl9lcnIoJnBkZXYtPmRldiwgIklSUSBvciBNZW1vcnkgcmVzb3VyY2UgaXMgbWlzc2luZ1xuIik7CisJcmV0dXJuIC1FTk9FTlQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHhpaWNfaTJjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlKiBwZGV2KQoreworCXN0cnVjdCB4aWljX2kyYyAqaTJjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisKKwkvKiByZW1vdmUgYWRhcHRlciAmIGRhdGEgKi8KKwlpMmNfZGVsX2FkYXB0ZXIoJmkyYy0+YWRhcCk7CisKKwl4aWljX2RlaW5pdChpMmMpOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKKwlmcmVlX2lycShwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApLCBpMmMpOworCisJaW91bm1hcChpMmMtPmJhc2UpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAocmVzKQorCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKworCWtmcmVlKGkyYyk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKiB3b3JrIHdpdGggaG90cGx1ZyBhbmQgY29sZHBsdWcgKi8KK01PRFVMRV9BTElBUygicGxhdGZvcm06IkRSSVZFUl9OQU1FKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgeGlpY19pMmNfZHJpdmVyID0geworCS5wcm9iZSAgID0geGlpY19pMmNfcHJvYmUsCisJLnJlbW92ZSAgPSBfX2RldmV4aXRfcCh4aWljX2kyY19yZW1vdmUpLAorCS5kcml2ZXIgID0geworCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgeGlpY19pMmNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnhpaWNfaTJjX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB4aWljX2kyY19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnhpaWNfaTJjX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHhpaWNfaTJjX2luaXQpOworbW9kdWxlX2V4aXQoeGlpY19pMmNfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoImluZm9AbW9jZWFuLWxhYnMuY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlhpbGlueCBJMkMgYnVzIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKaW5kZXggMTBiZTdiNS4uMzIwMmE4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgogI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgImkyYy1jb3JlLmgiCkBAIC0xODQsNiArMTg1LDUyIEBACiAjZGVmaW5lIGkyY19kZXZpY2VfcG1fcmVzdW1lCU5VTEwKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BNX1JVTlRJTUUKK3N0YXRpYyBpbnQgaTJjX2RldmljZV9ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbTsKKworCWlmICghZGV2LT5kcml2ZXIpCisJCXJldHVybiAwOworCXBtID0gZGV2LT5kcml2ZXItPnBtOworCWlmICghcG0gfHwgIXBtLT5ydW50aW1lX3N1c3BlbmQpCisJCXJldHVybiAwOworCXJldHVybiBwbS0+cnVudGltZV9zdXNwZW5kKGRldik7Cit9CisKK3N0YXRpYyBpbnQgaTJjX2RldmljZV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgKnBtOworCisJaWYgKCFkZXYtPmRyaXZlcikKKwkJcmV0dXJuIDA7CisJcG0gPSBkZXYtPmRyaXZlci0+cG07CisJaWYgKCFwbSB8fCAhcG0tPnJ1bnRpbWVfcmVzdW1lKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcG0tPnJ1bnRpbWVfcmVzdW1lKGRldik7Cit9CisKK3N0YXRpYyBpbnQgaTJjX2RldmljZV9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCWNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IE5VTEw7CisJaW50IHJldDsKKworCWlmIChkZXYtPmRyaXZlcikKKwkJcG0gPSBkZXYtPmRyaXZlci0+cG07CisJaWYgKHBtICYmIHBtLT5ydW50aW1lX2lkbGUpIHsKKwkJcmV0ID0gcG0tPnJ1bnRpbWVfaWRsZShkZXYpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gcG1fcnVudGltZV9zdXNwZW5kKGRldik7Cit9CisjZWxzZQorI2RlZmluZSBpMmNfZGV2aWNlX3J1bnRpbWVfc3VzcGVuZAlOVUxMCisjZGVmaW5lIGkyY19kZXZpY2VfcnVudGltZV9yZXN1bWUJTlVMTAorI2RlZmluZSBpMmNfZGV2aWNlX3J1bnRpbWVfaWRsZQkJTlVMTAorI2VuZGlmCisKIHN0YXRpYyBpbnQgaTJjX2RldmljZV9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc2cpCiB7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IGkyY192ZXJpZnlfY2xpZW50KGRldik7CkBAIC0yNTEsNiArMjk4LDkgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBpMmNfZGV2aWNlX3BtX29wcyA9IHsKIAkuc3VzcGVuZCA9IGkyY19kZXZpY2VfcG1fc3VzcGVuZCwKIAkucmVzdW1lID0gaTJjX2RldmljZV9wbV9yZXN1bWUsCisJLnJ1bnRpbWVfc3VzcGVuZCA9IGkyY19kZXZpY2VfcnVudGltZV9zdXNwZW5kLAorCS5ydW50aW1lX3Jlc3VtZSA9IGkyY19kZXZpY2VfcnVudGltZV9yZXN1bWUsCisJLnJ1bnRpbWVfaWRsZSA9IGkyY19kZXZpY2VfcnVudGltZV9pZGxlLAogfTsKIAogc3RydWN0IGJ1c190eXBlIGkyY19idXNfdHlwZSA9IHsKQEAgLTExMzMsNyArMTE4Myw3IEBACiAgKiBpMmNfbWFzdGVyX3NlbmQgLSBpc3N1ZSBhIHNpbmdsZSBJMkMgbWVzc2FnZSBpbiBtYXN0ZXIgdHJhbnNtaXQgbW9kZQogICogQGNsaWVudDogSGFuZGxlIHRvIHNsYXZlIGRldmljZQogICogQGJ1ZjogRGF0YSB0aGF0IHdpbGwgYmUgd3JpdHRlbiB0byB0aGUgc2xhdmUKLSAqIEBjb3VudDogSG93IG1hbnkgYnl0ZXMgdG8gd3JpdGUKKyAqIEBjb3VudDogSG93IG1hbnkgYnl0ZXMgdG8gd3JpdGUsIG11c3QgYmUgbGVzcyB0aGFuIDY0ayBzaW5jZSBtc2cubGVuIGlzIHUxNgogICoKICAqIFJldHVybnMgbmVnYXRpdmUgZXJybm8sIG9yIGVsc2UgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLgogICovCkBAIC0xMTYwLDcgKzEyMTAsNyBAQAogICogaTJjX21hc3Rlcl9yZWN2IC0gaXNzdWUgYSBzaW5nbGUgSTJDIG1lc3NhZ2UgaW4gbWFzdGVyIHJlY2VpdmUgbW9kZQogICogQGNsaWVudDogSGFuZGxlIHRvIHNsYXZlIGRldmljZQogICogQGJ1ZjogV2hlcmUgdG8gc3RvcmUgZGF0YSByZWFkIGZyb20gc2xhdmUKLSAqIEBjb3VudDogSG93IG1hbnkgYnl0ZXMgdG8gcmVhZAorICogQGNvdW50OiBIb3cgbWFueSBieXRlcyB0byByZWFkLCBtdXN0IGJlIGxlc3MgdGhhbiA2NGsgc2luY2UgbXNnLmxlbiBpcyB1MTYKICAqCiAgKiBSZXR1cm5zIG5lZ2F0aXZlIGVycm5vLCBvciBlbHNlIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZC4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLXNtYnVzLmMgYi9kcml2ZXJzL2kyYy9pMmMtc21idXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjEyNzgyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pMmMvaTJjLXNtYnVzLmMKQEAgLTAsMCArMSwyNjMgQEAKKy8qCisgKiBpMmMtc21idXMuYyAtIFNNQnVzIGV4dGVuc2lvbnMgdG8gdGhlIEkyQyBwcm90b2NvbAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBEYXZpZCBCcm93bmVsbAorICogQ29weXJpZ2h0IChDKSAyMDEwIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMtc21idXMuaD4KKworc3RydWN0IGkyY19zbWJ1c19hbGVydCB7CisJdW5zaWduZWQgaW50CQlhbGVydF9lZGdlX3RyaWdnZXJlZDoxOworCWludAkJCWlycTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJYWxlcnQ7CisJc3RydWN0IGkyY19jbGllbnQJKmFyYTsJCS8qIEFsZXJ0IHJlc3BvbnNlIGFkZHJlc3MgKi8KK307CisKK3N0cnVjdCBhbGVydF9kYXRhIHsKKwl1bnNpZ25lZCBzaG9ydAkJYWRkcjsKKwl1OAkJCWZsYWc6MTsKK307CisKKy8qIElmIHRoaXMgaXMgdGhlIGFsZXJ0aW5nIGRldmljZSwgbm90aWZ5IGl0cyBkcml2ZXIgKi8KK3N0YXRpYyBpbnQgc21idXNfZG9fYWxlcnQoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICphZGRycCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gaTJjX3ZlcmlmeV9jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgYWxlcnRfZGF0YSAqZGF0YSA9IGFkZHJwOworCisJaWYgKCFjbGllbnQgfHwgY2xpZW50LT5hZGRyICE9IGRhdGEtPmFkZHIpCisJCXJldHVybiAwOworCWlmIChjbGllbnQtPmZsYWdzICYgSTJDX0NMSUVOVF9URU4pCisJCXJldHVybiAwOworCisJLyoKKwkgKiBEcml2ZXJzIHNob3VsZCBlaXRoZXIgZGlzYWJsZSBhbGVydHMsIG9yIHByb3ZpZGUgYXQgbGVhc3QKKwkgKiBhIG1pbmltYWwgaGFuZGxlci4gIExvY2sgc28gY2xpZW50LT5kcml2ZXIgd29uJ3QgY2hhbmdlLgorCSAqLworCWRvd24oJmRldi0+c2VtKTsKKwlpZiAoY2xpZW50LT5kcml2ZXIpIHsKKwkJaWYgKGNsaWVudC0+ZHJpdmVyLT5hbGVydCkKKwkJCWNsaWVudC0+ZHJpdmVyLT5hbGVydChjbGllbnQsIGRhdGEtPmZsYWcpOworCQllbHNlCisJCQlkZXZfd2FybigmY2xpZW50LT5kZXYsICJubyBkcml2ZXIgYWxlcnQoKSFcbiIpOworCX0gZWxzZQorCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgImFsZXJ0IHdpdGggbm8gZHJpdmVyXG4iKTsKKwl1cCgmZGV2LT5zZW0pOworCisJLyogU3RvcCBpdGVyYXRpbmcgYWZ0ZXIgd2UgZmluZCB0aGUgZGV2aWNlICovCisJcmV0dXJuIC1FQlVTWTsKK30KKworLyoKKyAqIFRoZSBhbGVydCBJUlEgaGFuZGxlciBuZWVkcyB0byBoYW5kIHdvcmsgb2ZmIHRvIGEgdGFzayB3aGljaCBjYW4gaXNzdWUKKyAqIFNNQnVzIGNhbGxzLCBiZWNhdXNlIHRob3NlIHNsZWVwaW5nIGNhbGxzIGNhbid0IGJlIG1hZGUgaW4gSVJRIGNvbnRleHQuCisgKi8KK3N0YXRpYyB2b2lkIHNtYnVzX2FsZXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaTJjX3NtYnVzX2FsZXJ0ICphbGVydDsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqYXJhOworCXVuc2lnbmVkIHNob3J0IHByZXZfYWRkciA9IDA7CS8qIE5vdCBhIHZhbGlkIGFkZHJlc3MgKi8KKworCWFsZXJ0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpMmNfc21idXNfYWxlcnQsIGFsZXJ0KTsKKwlhcmEgPSBhbGVydC0+YXJhOworCisJZm9yICg7OykgeworCQlzMzIgc3RhdHVzOworCQlzdHJ1Y3QgYWxlcnRfZGF0YSBkYXRhOworCisJCS8qCisJCSAqIERldmljZXMgd2l0aCBwZW5kaW5nIGFsZXJ0cyByZXBseSBpbiBhZGRyZXNzIG9yZGVyLCBsb3cKKwkJICogdG8gaGlnaCwgYmVjYXVzZSBvZiBzbGF2ZSB0cmFuc21pdCBhcmJpdHJhdGlvbi4gIEFmdGVyCisJCSAqIHJlc3BvbmRpbmcsIGFuIFNNQnVzIGRldmljZSBzdG9wcyBhc3NlcnRpbmcgU01CQUxFUlQjLgorCQkgKgorCQkgKiBOb3RlIHRoYXQgU01CdXMgMi4wIHJlc2VydmVzIDEwLWJpdCBhZGRyZXNlc3MgZm9yIGZ1dHVyZQorCQkgKiB1c2UuICBXZSBuZWl0aGVyIGhhbmRsZSB0aGVtLCBub3IgdHJ5IHRvIHVzZSBQRUMgaGVyZS4KKwkJICovCisJCXN0YXR1cyA9IGkyY19zbWJ1c19yZWFkX2J5dGUoYXJhKTsKKwkJaWYgKHN0YXR1cyA8IDApCisJCQlicmVhazsKKworCQlkYXRhLmZsYWcgPSBzdGF0dXMgJiAxOworCQlkYXRhLmFkZHIgPSBzdGF0dXMgPj4gMTsKKworCQlpZiAoZGF0YS5hZGRyID09IHByZXZfYWRkcikgeworCQkJZGV2X3dhcm4oJmFyYS0+ZGV2LCAiRHVwbGljYXRlIFNNQkFMRVJUIyBmcm9tIGRldiAiCisJCQkJIjB4JTAyeCwgc2tpcHBpbmdcbiIsIGRhdGEuYWRkcik7CisJCQlicmVhazsKKwkJfQorCQlkZXZfZGJnKCZhcmEtPmRldiwgIlNNQkFMRVJUIyBmcm9tIGRldiAweCUwMngsIGZsYWcgJWRcbiIsCisJCQlkYXRhLmFkZHIsIGRhdGEuZmxhZyk7CisKKwkJLyogTm90aWZ5IGRyaXZlciBmb3IgdGhlIGRldmljZSB3aGljaCBpc3N1ZWQgdGhlIGFsZXJ0ICovCisJCWRldmljZV9mb3JfZWFjaF9jaGlsZCgmYXJhLT5hZGFwdGVyLT5kZXYsICZkYXRhLAorCQkJCSAgICAgIHNtYnVzX2RvX2FsZXJ0KTsKKwkJcHJldl9hZGRyID0gZGF0YS5hZGRyOworCX0KKworCS8qIFdlIGhhbmRsZWQgYWxsIGFsZXJ0czsgcmUtZW5hYmxlIGxldmVsLXRyaWdnZXJlZCBJUlFzICovCisJaWYgKCFhbGVydC0+YWxlcnRfZWRnZV90cmlnZ2VyZWQpCisJCWVuYWJsZV9pcnEoYWxlcnQtPmlycSk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzbWJhbGVydF9pcnEoaW50IGlycSwgdm9pZCAqZCkKK3sKKwlzdHJ1Y3QgaTJjX3NtYnVzX2FsZXJ0ICphbGVydCA9IGQ7CisKKwkvKiBEaXNhYmxlIGxldmVsLXRyaWdnZXJlZCBJUlFzIHVudGlsIHdlIGhhbmRsZSB0aGVtICovCisJaWYgKCFhbGVydC0+YWxlcnRfZWRnZV90cmlnZ2VyZWQpCisJCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOworCisJc2NoZWR1bGVfd29yaygmYWxlcnQtPmFsZXJ0KTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKKy8qIFNldHVwIFNNQkFMRVJUIyBpbmZyYXN0cnVjdHVyZSAqLworc3RhdGljIGludCBzbWJhbGVydF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqYXJhLAorCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGkyY19zbWJ1c19hbGVydF9zZXR1cCAqc2V0dXAgPSBhcmEtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBpMmNfc21idXNfYWxlcnQgKmFsZXJ0OworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciA9IGFyYS0+YWRhcHRlcjsKKwlpbnQgcmVzOworCisJYWxlcnQgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX3NtYnVzX2FsZXJ0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhbGVydCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhbGVydC0+YWxlcnRfZWRnZV90cmlnZ2VyZWQgPSBzZXR1cC0+YWxlcnRfZWRnZV90cmlnZ2VyZWQ7CisJYWxlcnQtPmlycSA9IHNldHVwLT5pcnE7CisJSU5JVF9XT1JLKCZhbGVydC0+YWxlcnQsIHNtYnVzX2FsZXJ0KTsKKwlhbGVydC0+YXJhID0gYXJhOworCisJaWYgKHNldHVwLT5pcnEgPiAwKSB7CisJCXJlcyA9IGRldm1fcmVxdWVzdF9pcnEoJmFyYS0+ZGV2LCBzZXR1cC0+aXJxLCBzbWJhbGVydF9pcnEsCisJCQkJICAgICAgIDAsICJzbWJ1c19hbGVydCIsIGFsZXJ0KTsKKwkJaWYgKHJlcykgeworCQkJa2ZyZWUoYWxlcnQpOworCQkJcmV0dXJuIHJlczsKKwkJfQorCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShhcmEsIGFsZXJ0KTsKKwlkZXZfaW5mbygmYWRhcHRlci0+ZGV2LCAic3VwcG9ydHMgU01CQUxFUlQjLCAlcyB0cmlnZ2VyXG4iLAorCQkgc2V0dXAtPmFsZXJ0X2VkZ2VfdHJpZ2dlcmVkID8gImVkZ2UiIDogImxldmVsIik7CisKKwlyZXR1cm4gMDsKK30KKworLyogSVJRIHJlc291cmNlIGlzIG1hbmFnZWQgc28gaXQgaXMgZnJlZWQgYXV0b21hdGljYWxseSAqLworc3RhdGljIGludCBzbWJhbGVydF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmFyYSkKK3sKKwlzdHJ1Y3QgaTJjX3NtYnVzX2FsZXJ0ICphbGVydCA9IGkyY19nZXRfY2xpZW50ZGF0YShhcmEpOworCisJY2FuY2VsX3dvcmtfc3luYygmYWxlcnQtPmFsZXJ0KTsKKworCWkyY19zZXRfY2xpZW50ZGF0YShhcmEsIE5VTEwpOworCWtmcmVlKGFsZXJ0KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHNtYmFsZXJ0X2lkc1tdID0geworCXsgInNtYnVzX2FsZXJ0IiwgMCB9LAorCXsgLyogTElTVCBFTkQgKi8gfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzbWJhbGVydF9pZHMpOworCitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc21iYWxlcnRfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lCT0gInNtYnVzX2FsZXJ0IiwKKwl9LAorCS5wcm9iZQkJPSBzbWJhbGVydF9wcm9iZSwKKwkucmVtb3ZlCQk9IHNtYmFsZXJ0X3JlbW92ZSwKKwkuaWRfdGFibGUJPSBzbWJhbGVydF9pZHMsCit9OworCisvKioKKyAqIGkyY19zZXR1cF9zbWJ1c19hbGVydCAtIFNldHVwIFNNQnVzIGFsZXJ0IHN1cHBvcnQKKyAqIEBhZGFwdGVyOiB0aGUgdGFyZ2V0IGFkYXB0ZXIKKyAqIEBzZXR1cDogc2V0dXAgZGF0YSBmb3IgdGhlIFNNQnVzIGFsZXJ0IGhhbmRsZXIKKyAqIENvbnRleHQ6IGNhbiBzbGVlcAorICoKKyAqIFNldHVwIGhhbmRsaW5nIG9mIHRoZSBTTUJ1cyBhbGVydCBwcm90b2NvbCBvbiBhIGdpdmVuIEkyQyBidXMgc2VnbWVudC4KKyAqCisgKiBIYW5kbGluZyBjYW4gYmUgZG9uZSBlaXRoZXIgdGhyb3VnaCBvdXIgSVJRIGhhbmRsZXIsIG9yIGJ5IHRoZQorICogYWRhcHRlciAoZnJvbSBpdHMgaGFuZGxlciwgcGVyaW9kaWMgcG9sbGluZywgb3Igd2hhdGV2ZXIpLgorICoKKyAqIE5PVEUgdGhhdCBpZiB3ZSBtYW5hZ2UgdGhlIElSUSwgd2UgKk1VU1QqIGtub3cgaWYgaXQncyBsZXZlbCBvcgorICogZWRnZSB0cmlnZ2VyZWQgaW4gb3JkZXIgdG8gaGFuZCBpdCB0byB0aGUgd29ya3F1ZXVlIGNvcnJlY3RseS4KKyAqIElmIHRyaWdnZXJpbmcgdGhlIGFsZXJ0IHNlZW1zIHRvIHdlZGdlIHRoZSBzeXN0ZW0sIHlvdSBwcm9iYWJseQorICogc2hvdWxkIGhhdmUgc2FpZCBpdCdzIGxldmVsIHRyaWdnZXJlZC4KKyAqCisgKiBUaGlzIHJldHVybnMgdGhlIGFyYSBjbGllbnQsIHdoaWNoIHNob3VsZCBiZSBzYXZlZCBmb3IgbGF0ZXIgdXNlIHdpdGgKKyAqIGkyY19oYW5kbGVfc21idXNfYWxlcnQoKSBhbmQgdWx0aW1hdGVseSBpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoKTsgb3IgTlVMTAorICogdG8gaW5kaWNhdGUgYW4gZXJyb3IuCisgKi8KK3N0cnVjdCBpMmNfY2xpZW50ICppMmNfc2V0dXBfc21idXNfYWxlcnQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJCQkgc3RydWN0IGkyY19zbWJ1c19hbGVydF9zZXR1cCAqc2V0dXApCit7CisJc3RydWN0IGkyY19ib2FyZF9pbmZvIGFyYV9ib2FyZF9pbmZvID0geworCQlJMkNfQk9BUkRfSU5GTygic21idXNfYWxlcnQiLCAweDBjKSwKKwkJLnBsYXRmb3JtX2RhdGEgPSBzZXR1cCwKKwl9OworCisJcmV0dXJuIGkyY19uZXdfZGV2aWNlKGFkYXB0ZXIsICZhcmFfYm9hcmRfaW5mbyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpMmNfc2V0dXBfc21idXNfYWxlcnQpOworCisvKioKKyAqIGkyY19oYW5kbGVfc21idXNfYWxlcnQgLSBIYW5kbGUgYW4gU01CdXMgYWxlcnQKKyAqIEBhcmE6IHRoZSBBUkEgY2xpZW50IG9uIHRoZSByZWxldmFudCBhZGFwdGVyCisgKiBDb250ZXh0OiBjYW4ndCBzbGVlcAorICoKKyAqIEhlbHBlciBmdW5jdGlvbiB0byBiZSBjYWxsZWQgZnJvbSBhbiBJMkMgYnVzIGRyaXZlcidzIGludGVycnVwdAorICogaGFuZGxlci4gSXQgd2lsbCBzY2hlZHVsZSB0aGUgYWxlcnQgd29yaywgaW4gdHVybiBjYWxsaW5nIHRoZQorICogY29ycmVzcG9uZGluZyBJMkMgZGV2aWNlIGRyaXZlcidzIGFsZXJ0IGZ1bmN0aW9uLgorICoKKyAqIEl0IGlzIGFzc3VtZWQgdGhhdCBhcmEgaXMgYSB2YWxpZCBpMmMgY2xpZW50IHByZXZpb3VzbHkgcmV0dXJuZWQgYnkKKyAqIGkyY19zZXR1cF9zbWJ1c19hbGVydCgpLgorICovCitpbnQgaTJjX2hhbmRsZV9zbWJ1c19hbGVydChzdHJ1Y3QgaTJjX2NsaWVudCAqYXJhKQoreworCXN0cnVjdCBpMmNfc21idXNfYWxlcnQgKmFsZXJ0ID0gaTJjX2dldF9jbGllbnRkYXRhKGFyYSk7CisKKwlyZXR1cm4gc2NoZWR1bGVfd29yaygmYWxlcnQtPmFsZXJ0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGkyY19oYW5kbGVfc21idXNfYWxlcnQpOworCitzdGF0aWMgaW50IF9faW5pdCBpMmNfc21idXNfaW5pdCh2b2lkKQoreworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmc21iYWxlcnRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGkyY19zbWJ1c19leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJnNtYmFsZXJ0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KGkyY19zbWJ1c19pbml0KTsKK21vZHVsZV9leGl0KGkyY19zbWJ1c19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNNQnVzIHByb3RvY29sIGV4dGVuc2lvbnMgc3VwcG9ydCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYWVjNjJ4eC5jIGIvZHJpdmVycy9pZGUvYWVjNjJ4eC5jCmluZGV4IDg3OGY4ZWMuLjU3ZDAwY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2FlYzYyeHguYworKysgYi9kcml2ZXJzL2lkZS9hZWM2Mnh4LmMKQEAgLTgxLDE1ICs4MSwxNSBAQAogCXJldHVybiBjaGlwc2V0X3RhYmxlLT51bHRyYV9zZXR0aW5nczsKIH0KIAotc3RhdGljIHZvaWQgYWVjNjIxMF9zZXRfbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHNwZWVkKQorc3RhdGljIHZvaWQgYWVjNjIxMF9zZXRfbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJc3RydWN0IGlkZV9ob3N0ICpob3N0CT0gcGNpX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGNoaXBzZXRfYnVzX2Nsb2NrX2xpc3RfZW50cnkgKmJ1c19jbG9jayA9IGhvc3QtPmhvc3RfcHJpdjsKIAl1MTYgZF9jb25mCQk9IDA7CiAJdTggdWx0cmEgPSAwLCB1bHRyYV9jb25mID0gMDsKIAl1OCB0bXAwID0gMCwgdG1wMSA9IDAsIHRtcDIgPSAwOworCWNvbnN0IHU4IHNwZWVkID0gZHJpdmUtPmRtYV9tb2RlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CkBAIC0xMDksMTUgKzEwOSwxNSBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgYWVjNjI2MF9zZXRfbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHNwZWVkKQorc3RhdGljIHZvaWQgYWVjNjI2MF9zZXRfbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJc3RydWN0IGlkZV9ob3N0ICpob3N0CT0gcGNpX2dldF9kcnZkYXRhKGRldik7CiAJc3RydWN0IGNoaXBzZXRfYnVzX2Nsb2NrX2xpc3RfZW50cnkgKmJ1c19jbG9jayA9IGhvc3QtPmhvc3RfcHJpdjsKIAl1OCB1bml0CQkJPSBkcml2ZS0+ZG4gJiAxOwogCXU4IHRtcDEgPSAwLCB0bXAyID0gMDsKIAl1OCB1bHRyYSA9IDAsIGRyaXZlX2NvbmYgPSAwLCB1bHRyYV9jb25mID0gMDsKKwljb25zdCB1OCBzcGVlZCA9IGRyaXZlLT5kbWFfbW9kZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtMTM0LDkgKzEzNCwxMCBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgYWVjX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKK3N0YXRpYyB2b2lkIGFlY19zZXRfcGlvX21vZGUoaWRlX2h3aWZfdCAqaHdpZiwgaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWRyaXZlLT5od2lmLT5wb3J0X29wcy0+c2V0X2RtYV9tb2RlKGRyaXZlLCBwaW8gKyBYRkVSX1BJT18wKTsKKwlkcml2ZS0+ZG1hX21vZGUgPSBkcml2ZS0+cGlvX21vZGU7CisJaHdpZi0+cG9ydF9vcHMtPnNldF9kbWFfbW9kZShod2lmLCBkcml2ZSk7CiB9CiAKIHN0YXRpYyBpbnQgaW5pdF9jaGlwc2V0X2FlYzYyeHgoc3RydWN0IHBjaV9kZXYgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2FsaTE0eHguYyBiL2RyaXZlcnMvaWRlL2FsaTE0eHguYwppbmRleCA5MGRhMWY5Li4yNWI5ZmUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hbGkxNHh4LmMKKysrIGIvZHJpdmVycy9pZGUvYWxpMTR4eC5jCkBAIC0xMDksMTMgKzEwOSwxNCBAQAogICogVGhpcyBmdW5jdGlvbiBjb21wdXRlcyB0aW1pbmcgcGFyYW1ldGVycwogICogYW5kIHNldHMgY29udHJvbGxlciByZWdpc3RlcnMgYWNjb3JkaW5nbHkuCiAgKi8KLXN0YXRpYyB2b2lkIGFsaTE0eHhfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggcGlvKQorc3RhdGljIHZvaWQgYWxpMTR4eF9zZXRfcGlvX21vZGUoaWRlX2h3aWZfdCAqaHdpZiwgaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWludCBkcml2ZU51bTsKIAlpbnQgdGltZTEsIHRpbWUyOwogCXU4IHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBidXNfc3BlZWQgPSBpZGVfdmxiX2NsayA/IGlkZV92bGJfY2xrIDogNTA7CisJY29uc3QgdTggcGlvID0gZHJpdmUtPnBpb19tb2RlIC0gWEZFUl9QSU9fMDsKIAlzdHJ1Y3QgaWRlX3RpbWluZyAqdCA9IGlkZV90aW1pbmdfZmluZF9tb2RlKFhGRVJfUElPXzAgKyBwaW8pOwogCiAJLyogY2FsY3VsYXRlIHRpbWluZywgYWNjb3JkaW5nIHRvIFBJTyBtb2RlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hbGltMTV4My5jIGIvZHJpdmVycy9pZGUvYWxpbTE1eDMuYwppbmRleCAwYWJjNDNmLi4yYzgwMTZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hbGltMTV4My5jCisrKyBiL2RyaXZlcnMvaWRlL2FsaW0xNXgzLmMKQEAgLTgsNyArOCw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDAyIEFsYW4gQ294CiAgKiAgQUxpIChub3cgVUxpIE01MjI4KSBzdXBwb3J0IGJ5IENsZWFyIFpoYW5nIDxDbGVhci5aaGFuZ0BhbGkuY29tLnR3PgogICogIENvcHlyaWdodCAoQykgMjAwNyBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIDxzb3VyY2VAbXZpc3RhLmNvbT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgQmFydGxvbWllaiBab2xuaWVya2lld2ljeiA8YnpvbG5pZXJAZ21haWwuY29tPgorICogIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIEJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKICAqCiAgKiAgKFUpRE1BIGNhcGFibGUgdmVyc2lvbiBvZiBhbGkgMTUzMy8xNTQzKEMpLCAxNTM1KEQpCiAgKgpAQCAtNDgsNjEgKzQ4LDg0IEBACiBzdGF0aWMgdTggY2hpcF9pc18xNTQzY19lOwogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICppc2FfZGV2OwogCitzdGF0aWMgdm9pZCBhbGlfZmlmb19jb250cm9sKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IG9uKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOworCWludCBwaW9fZmlmbyA9IDB4NTQgKyBod2lmLT5jaGFubmVsOworCXU4IGZpZm87CisJaW50IHNoaWZ0ID0gNCAqIChkcml2ZS0+ZG4gJiAxKTsKKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIHBpb19maWZvLCAmZmlmbyk7CisJZmlmbyAmPSB+KDB4MEYgPDwgc2hpZnQpOworCWZpZm8gfD0gKG9uIDw8IHNoaWZ0KTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgcGlvX2ZpZm8sIGZpZm8pOworfQorCitzdGF0aWMgdm9pZCBhbGlfcHJvZ3JhbV90aW1pbmdzKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSwKKwkJCQlzdHJ1Y3QgaWRlX3RpbWluZyAqdCwgdTggdWx0cmEpCit7CisJc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKKwlpbnQgcG9ydCA9IGh3aWYtPmNoYW5uZWwgPyAweDVjIDogMHg1ODsKKwlpbnQgdWRtYXQgPSAweDU2ICsgaHdpZi0+Y2hhbm5lbDsKKwl1OCB1bml0ID0gZHJpdmUtPmRuICYgMSwgdWRtYTsKKwlpbnQgc2hpZnQgPSA0ICogdW5pdDsKKworCS8qIFNldCB1cCB0aGUgVURNQSAqLworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgdWRtYXQsICZ1ZG1hKTsKKwl1ZG1hICY9IH4oMHgwRiA8PCBzaGlmdCk7CisJdWRtYSB8PSB1bHRyYSA8PCBzaGlmdDsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCB1ZG1hdCwgdWRtYSk7CisKKwlpZiAodCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl0LT5zZXR1cCA9IGNsYW1wX3ZhbCh0LT5zZXR1cCwgMSwgOCkgJiA3OworCXQtPmFjdDhiID0gY2xhbXBfdmFsKHQtPmFjdDhiLCAxLCA4KSAmIDc7CisJdC0+cmVjOGIgPSBjbGFtcF92YWwodC0+cmVjOGIsIDEsIDE2KSAmIDE1OworCXQtPmFjdGl2ZSA9IGNsYW1wX3ZhbCh0LT5hY3RpdmUsIDEsIDgpICYgNzsKKwl0LT5yZWNvdmVyID0gY2xhbXBfdmFsKHQtPnJlY292ZXIsIDEsIDE2KSAmIDE1OworCisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgcG9ydCwgdC0+c2V0dXApOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIHBvcnQgKyAxLCAodC0+YWN0OGIgPDwgNCkgfCB0LT5yZWM4Yik7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgcG9ydCArIHVuaXQgKyAyLAorCQkJICAgICAgKHQtPmFjdGl2ZSA8PCA0KSB8IHQtPnJlY292ZXIpOworfQorCiAvKioKICAqCWFsaV9zZXRfcGlvX21vZGUJLQlzZXQgaG9zdCBjb250cm9sbGVyIGZvciBQSU8gbW9kZQorICoJQGh3aWY6IHBvcnQKICAqCUBkcml2ZTogZHJpdmUKLSAqCUBwaW86IFBJTyBtb2RlIG51bWJlcgogICoKICAqCVByb2dyYW0gdGhlIGNvbnRyb2xsZXIgZm9yIHRoZSBnaXZlbiBQSU8gbW9kZS4KICAqLwogCi1zdGF0aWMgdm9pZCBhbGlfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggcGlvKQorc3RhdGljIHZvaWQgYWxpX3NldF9waW9fbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7Ci0Jc3RydWN0IGlkZV90aW1pbmcgKnQgPSBpZGVfdGltaW5nX2ZpbmRfbW9kZShYRkVSX1BJT18wICsgcGlvKTsKLQlpbnQgc190aW1lID0gdC0+c2V0dXAsIGFfdGltZSA9IHQtPmFjdGl2ZSwgY190aW1lID0gdC0+Y3ljbGU7Ci0JdTggc19jbGMsIGFfY2xjLCByX2NsYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCWlkZV9kcml2ZV90ICpwYWlyID0gaWRlX2dldF9wYWlyX2Rldihkcml2ZSk7CiAJaW50IGJ1c19zcGVlZCA9IGlkZV9wY2lfY2xrID8gaWRlX3BjaV9jbGsgOiAzMzsKLQlpbnQgcG9ydCA9IGh3aWYtPmNoYW5uZWwgPyAweDVjIDogMHg1ODsKLQlpbnQgcG9ydEZJRk8gPSBod2lmLT5jaGFubmVsID8gMHg1NSA6IDB4NTQ7Ci0JdTggY2RfZG1hX2ZpZm8gPSAwLCB1bml0ID0gZHJpdmUtPmRuICYgMTsKKwl1bnNpZ25lZCBsb25nIFQgPSAgMTAwMDAwMCAvIGJ1c19zcGVlZDsgLyogUENJIGNsb2NrIGJhc2VkICovCisJc3RydWN0IGlkZV90aW1pbmcgdDsKIAotCWlmICgoc19jbGMgPSAoc190aW1lICogYnVzX3NwZWVkICsgOTk5KSAvIDEwMDApID49IDgpCi0JCXNfY2xjID0gMDsKLQlpZiAoKGFfY2xjID0gKGFfdGltZSAqIGJ1c19zcGVlZCArIDk5OSkgLyAxMDAwKSA+PSA4KQotCQlhX2NsYyA9IDA7CisJaWRlX3RpbWluZ19jb21wdXRlKGRyaXZlLCBkcml2ZS0+cGlvX21vZGUsICZ0LCBULCAxKTsKKwlpZiAocGFpcikgeworCQlzdHJ1Y3QgaWRlX3RpbWluZyBwOwogCi0JaWYgKCEocl9jbGMgPSAoY190aW1lICogYnVzX3NwZWVkICsgOTk5KSAvIDEwMDAgLSBhX2NsYyAtIHNfY2xjKSkgewotCQlyX2NsYyA9IDE7Ci0JfSBlbHNlIHsKLQkJaWYgKHJfY2xjID49IDE2KQotCQkJcl9jbGMgPSAwOworCQlpZGVfdGltaW5nX2NvbXB1dGUocGFpciwgcGFpci0+cGlvX21vZGUsICZwLCBULCAxKTsKKwkJaWRlX3RpbWluZ19tZXJnZSgmcCwgJnQsICZ0LAorCQkJSURFX1RJTUlOR19TRVRVUCB8IElERV9USU1JTkdfOEJJVCk7CisJCWlmIChwYWlyLT5kbWFfbW9kZSkgeworCQkJaWRlX3RpbWluZ19jb21wdXRlKHBhaXIsIHBhaXItPmRtYV9tb2RlLCAmcCwgVCwgMSk7CisJCQlpZGVfdGltaW5nX21lcmdlKCZwLCAmdCwgJnQsCisJCQkJSURFX1RJTUlOR19TRVRVUCB8IElERV9USU1JTkdfOEJJVCk7CisJCX0KIAl9Ci0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQorCiAJLyogCiAJICogUElPIG1vZGUgPT4gQVRBIEZJRk8gb24sIEFUQVBJIEZJRk8gb2ZmCiAJICovCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBwb3J0RklGTywgJmNkX2RtYV9maWZvKTsKLQlpZiAoZHJpdmUtPm1lZGlhPT1pZGVfZGlzaykgewotCQlpZiAodW5pdCkgewotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgcG9ydEZJRk8sIChjZF9kbWFfZmlmbyAmIDB4MEYpIHwgMHg1MCk7Ci0JCX0gZWxzZSB7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBwb3J0RklGTywgKGNkX2RtYV9maWZvICYgMHhGMCkgfCAweDA1KTsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmICh1bml0KSB7Ci0JCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBwb3J0RklGTywgY2RfZG1hX2ZpZm8gJiAweDBGKTsKLQkJfSBlbHNlIHsKLQkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIHBvcnRGSUZPLCBjZF9kbWFfZmlmbyAmIDB4RjApOwotCQl9Ci0JfQotCQotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIHBvcnQsIHNfY2xjKTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBwb3J0ICsgdW5pdCArIDIsIChhX2NsYyA8PCA0KSB8IHJfY2xjKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJYWxpX2ZpZm9fY29udHJvbChod2lmLCBkcml2ZSwgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykgPyAweDA1IDogMHgwMCk7CisKKwlhbGlfcHJvZ3JhbV90aW1pbmdzKGh3aWYsIGRyaXZlLCAmdCwgMCk7CiB9CiAKIC8qKgpAQCAtMTMyLDQ0ICsxNTUsNDIgQEAKIAogLyoqCiAgKglhbGlfc2V0X2RtYV9tb2RlCS0Jc2V0IGhvc3QgY29udHJvbGxlciBmb3IgRE1BIG1vZGUKKyAqCUBod2lmOiBwb3J0CiAgKglAZHJpdmU6IGRyaXZlCi0gKglAc3BlZWQ6IERNQSBtb2RlCiAgKgogICoJQ29uZmlndXJlIHRoZSBoYXJkd2FyZSBmb3IgdGhlIGRlc2lyZWQgSURFIHRyYW5zZmVyIG1vZGUuCiAgKi8KIAotc3RhdGljIHZvaWQgYWxpX3NldF9kbWFfbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHNwZWVkKQorc3RhdGljIHZvaWQgYWxpX3NldF9kbWFfbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IGRyaXZlLT5od2lmOworCXN0YXRpYyB1OCB1ZG1hX3RpbWluZ1s3XSA9IHsgMHhDLCAweEIsIDB4QSwgMHg5LCAweDgsIDB4RiwgMHhEIH07CiAJc3RydWN0IHBjaV9kZXYgKmRldgk9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKLQl1OCBzcGVlZDEJCT0gc3BlZWQ7Ci0JdTggdW5pdAkJCT0gZHJpdmUtPmRuICYgMTsKKwlpZGVfZHJpdmVfdCAqcGFpcgk9IGlkZV9nZXRfcGFpcl9kZXYoZHJpdmUpOworCWludCBidXNfc3BlZWQJCT0gaWRlX3BjaV9jbGsgPyBpZGVfcGNpX2NsayA6IDMzOworCXVuc2lnbmVkIGxvbmcgVAkJPSAgMTAwMDAwMCAvIGJ1c19zcGVlZDsgLyogUENJIGNsb2NrIGJhc2VkICovCisJY29uc3QgdTggc3BlZWQJCT0gZHJpdmUtPmRtYV9tb2RlOwogCXU4IHRtcGJ5dGUJCT0gMHgwMDsKLQlpbnQgbTUyMjlfdWRtYQkJPSAoaHdpZi0+Y2hhbm5lbCkgPyAweDU3IDogMHg1NjsKLQotCWlmIChzcGVlZCA9PSBYRkVSX1VETUFfNikKLQkJc3BlZWQxID0gMHg0NzsKKwlzdHJ1Y3QgaWRlX3RpbWluZyB0OwogCiAJaWYgKHNwZWVkIDwgWEZFUl9VRE1BXzApIHsKLQkJdTggdWx0cmFfZW5hYmxlCT0gKHVuaXQpID8gMHg3ZiA6IDB4Zjc7Ci0JCS8qCi0JCSAqIGNsZWFyICJ1bHRyYSBlbmFibGUiIGJpdAotCQkgKi8KLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBtNTIyOV91ZG1hLCAmdG1wYnl0ZSk7Ci0JCXRtcGJ5dGUgJj0gdWx0cmFfZW5hYmxlOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBtNTIyOV91ZG1hLCB0bXBieXRlKTsKKwkJaWRlX3RpbWluZ19jb21wdXRlKGRyaXZlLCBkcml2ZS0+ZG1hX21vZGUsICZ0LCBULCAxKTsKKwkJaWYgKHBhaXIpIHsKKwkJCXN0cnVjdCBpZGVfdGltaW5nIHA7CiAKLQkJLyoKLQkJICogRklYTUU6IE9oLCBteS4uLiBETUEgdGltaW5ncyBhcmUgbmV2ZXIgc2V0LgotCQkgKi8KKwkJCWlkZV90aW1pbmdfY29tcHV0ZShwYWlyLCBwYWlyLT5waW9fbW9kZSwgJnAsIFQsIDEpOworCQkJaWRlX3RpbWluZ19tZXJnZSgmcCwgJnQsICZ0LAorCQkJCUlERV9USU1JTkdfU0VUVVAgfCBJREVfVElNSU5HXzhCSVQpOworCQkJaWYgKHBhaXItPmRtYV9tb2RlKSB7CisJCQkJaWRlX3RpbWluZ19jb21wdXRlKHBhaXIsIHBhaXItPmRtYV9tb2RlLAorCQkJCQkJJnAsIFQsIDEpOworCQkJCWlkZV90aW1pbmdfbWVyZ2UoJnAsICZ0LCAmdCwKKwkJCQkJSURFX1RJTUlOR19TRVRVUCB8IElERV9USU1JTkdfOEJJVCk7CisJCQl9CisJCX0KKwkJYWxpX3Byb2dyYW1fdGltaW5ncyhod2lmLCBkcml2ZSwgJnQsIDApOwogCX0gZWxzZSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgbTUyMjlfdWRtYSwgJnRtcGJ5dGUpOwotCQl0bXBieXRlICY9ICgweDBmIDw8ICgoMS11bml0KSA8PCAyKSk7Ci0JCS8qCi0JCSAqIGVuYWJsZSB1bHRyYSBkbWEgYW5kIHNldCB0aW1pbmcKLQkJICovCi0JCXRtcGJ5dGUgfD0gKCgweDA4IHwgKCg0LXNwZWVkMSkmMHgwNykpIDw8ICh1bml0IDw8IDIpKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgbTUyMjlfdWRtYSwgdG1wYnl0ZSk7CisJCWFsaV9wcm9ncmFtX3RpbWluZ3MoaHdpZiwgZHJpdmUsIE5VTEwsCisJCQkJdWRtYV90aW1pbmdbc3BlZWQgLSBYRkVSX1VETUFfMF0pOwogCQlpZiAoc3BlZWQgPj0gWEZFUl9VRE1BXzMpIHsKIAkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg0YiwgJnRtcGJ5dGUpOwogCQkJdG1wYnl0ZSB8PSAxOwpAQCAtMzU1LDE5ICszNzYsMTMgQEAKICAqCiAgKglUaGlzIGNoZWNrcyBpZiB0aGUgY29udHJvbGxlciBhbmQgdGhlIGNhYmxlIGFyZSBjYXBhYmxlCiAgKglvZiBVRE1BNjYgdHJhbnNmZXJzLiBJdCBkb2Vzbid0IGNoZWNrIHRoZSBkcml2ZXMuCi0gKglCdXQgc2VlIG5vdGUgMiBiZWxvdyEKLSAqCi0gKglGSVhNRTogZnJvYnMgYml0cyB0aGF0IGFyZSBub3QgZGVmaW5lZCBvbiBuZXdlciBBTGkgZGV2aWNlYQogICovCiAKIHN0YXRpYyB1OCBhbGlfY2FibGVfZGV0ZWN0KGlkZV9od2lmX3QgKmh3aWYpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXU4IGNibCA9IEFUQV9DQkxfUEFUQTQwLCB0bXBieXRlOwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCiAJaWYgKG01MjI5X3JldmlzaW9uID49IDB4QzIpIHsKIAkJLyoKIAkJICogbTUyMjkgODAtcGluIGNhYmxlIGRldGVjdGlvbiAoZnJvbSBIb3N0IFZpZXcpCkBAIC0zODcsOCArNDAyLDYgQEAKIAkJfQogCX0KIAotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQogCXJldHVybiBjYmw7CiB9CiAKQEAgLTU4NCw2ICs1OTcsNiBAQAogbW9kdWxlX2luaXQoYWxpMTV4M19pZGVfaW5pdCk7CiBtb2R1bGVfZXhpdChhbGkxNXgzX2lkZV9leGl0KTsKIAotTU9EVUxFX0FVVEhPUigiTWljaGFlbCBBdWJyeSwgQW5kcnplaiBLcnp5c3p0b2Zvd2ljeiwgQ0osIEFuZHJlIEhlZHJpY2ssIEFsYW4gQ294Iik7CitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEF1YnJ5LCBBbmRyemVqIEtyenlzenRvZm93aWN6LCBDSiwgQW5kcmUgSGVkcmljaywgQWxhbiBDb3gsIEJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUENJIGRyaXZlciBtb2R1bGUgZm9yIEFMaSAxNXgzIElERSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYW1kNzR4eC5jIGIvZHJpdmVycy9pZGUvYW1kNzR4eC5jCmluZGV4IDYyOGNkMmUuLjM3NDdiMjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2FtZDc0eHguYworKysgYi9kcml2ZXJzL2lkZS9hbWQ3NHh4LmMKQEAgLTMsNyArMyw3IEBACiAgKiBJREUgZHJpdmVyIGZvciBMaW51eC4KICAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBWb2p0ZWNoIFBhdmxpawotICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggQmFydGxvbWllaiBab2xuaWVya2lld2ljegorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTAgQmFydGxvbWllaiBab2xuaWVya2lld2ljegogICoKICAqIEJhc2VkIG9uIHRoZSB3b3JrIG9mOgogICogICAgICBBbmRyZSBIZWRyaWNrCkBAIC03MCw3ICs3MCw4IEBACiAJZGVmYXVsdDogcmV0dXJuOwogCX0KIAotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIEFNRF9VRE1BX1RJTUlORyArIG9mZnNldCArICgzIC0gZG4pLCB0KTsKKwlpZiAodGltaW5nLT51ZG1hKQorCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBBTURfVURNQV9USU1JTkcgKyBvZmZzZXQgKyAzIC0gZG4sIHQpOwogfQogCiAvKgpAQCAtNzgsMTQgKzc5LDE0IEBACiAgKiB0byBhIGRlc2lyZWQgdHJhbnNmZXIgbW9kZS4gIEl0IGFsc28gY2FuIGJlIGNhbGxlZCBieSB1cHBlciBsYXllcnMuCiAgKi8KIAotc3RhdGljIHZvaWQgYW1kX3NldF9kcml2ZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHNwZWVkKQorc3RhdGljIHZvaWQgYW1kX3NldF9kcml2ZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJaWRlX2RyaXZlX3QgKnBlZXIgPSBpZGVfZ2V0X3BhaXJfZGV2KGRyaXZlKTsKIAlzdHJ1Y3QgaWRlX3RpbWluZyB0LCBwOwogCWludCBULCBVVDsKIAl1OCB1ZG1hX21hc2sgPSBod2lmLT51bHRyYV9tYXNrOworCWNvbnN0IHU4IHNwZWVkID0gZHJpdmUtPmRtYV9tb2RlOwogCiAJVCA9IDEwMDAwMDAwMDAgLyBhbWRfY2xvY2s7CiAJVVQgPSAodWRtYV9tYXNrID09IEFUQV9VRE1BMikgPyBUIDogKFQgLyAyKTsKQEAgLTkzLDcgKzk0LDcgQEAKIAlpZGVfdGltaW5nX2NvbXB1dGUoZHJpdmUsIHNwZWVkLCAmdCwgVCwgVVQpOwogCiAJaWYgKHBlZXIpIHsKLQkJaWRlX3RpbWluZ19jb21wdXRlKHBlZXIsIHBlZXItPmN1cnJlbnRfc3BlZWQsICZwLCBULCBVVCk7CisJCWlkZV90aW1pbmdfY29tcHV0ZShwZWVyLCBwZWVyLT5waW9fbW9kZSwgJnAsIFQsIFVUKTsKIAkJaWRlX3RpbWluZ19tZXJnZSgmcCwgJnQsICZ0LCBJREVfVElNSU5HXzhCSVQpOwogCX0KIApAQCAtMTA3LDkgKzEwOCwxMCBAQAogICogYW1kX3NldF9waW9fbW9kZSgpIGlzIGEgY2FsbGJhY2sgZnJvbSB1cHBlciBsYXllcnMgZm9yIFBJTy1vbmx5IHR1bmluZy4KICAqLwogCi1zdGF0aWMgdm9pZCBhbWRfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggcGlvKQorc3RhdGljIHZvaWQgYW1kX3NldF9waW9fbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JYW1kX3NldF9kcml2ZShkcml2ZSwgWEZFUl9QSU9fMCArIHBpbyk7CisJZHJpdmUtPmRtYV9tb2RlID0gZHJpdmUtPnBpb19tb2RlOworCWFtZF9zZXRfZHJpdmUoaHdpZiwgZHJpdmUpOwogfQogCiBzdGF0aWMgdm9pZCBhbWQ3NDA5X2NhYmxlX2RldGVjdChzdHJ1Y3QgcGNpX2RldiAqZGV2KQpAQCAtMzQwLDYgKzM0Miw2IEBACiBtb2R1bGVfaW5pdChhbWQ3NHh4X2lkZV9pbml0KTsKIG1vZHVsZV9leGl0KGFtZDc0eHhfaWRlX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCJWb2p0ZWNoIFBhdmxpayIpOworTU9EVUxFX0FVVEhPUigiVm9qdGVjaCBQYXZsaWssIEJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQU1EIFBDSSBJREUgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hdDkxX2lkZS5jIGIvZHJpdmVycy9pZGUvYXQ5MV9pZGUuYwppbmRleCAyNDgyMTlhLi4wMDBhNzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hdDkxX2lkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2F0OTFfaWRlLmMKQEAgLTE3MiwxMSArMTcyLDEyIEBACiAJbGVhdmVfMTZiaXQoY2hpcHNlbGVjdCwgbW9kZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0OTFfaWRlX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKK3N0YXRpYyB2b2lkIGF0OTFfaWRlX3NldF9waW9fbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJc3RydWN0IGlkZV90aW1pbmcgKnRpbWluZzsKLQl1OCBjaGlwc2VsZWN0ID0gZHJpdmUtPmh3aWYtPnNlbGVjdF9kYXRhOworCXU4IGNoaXBzZWxlY3QgPSBod2lmLT5zZWxlY3RfZGF0YTsKIAlpbnQgdXNlX2lvcmR5ID0gMDsKKwljb25zdCB1OCBwaW8gPSBkcml2ZS0+cGlvX21vZGUgLSBYRkVSX1BJT18wOwogCiAJcGRiZygiY2hpcHNlbGVjdCAldSBwaW8gJXVcbiIsIGNoaXBzZWxlY3QsIHBpbyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2F0aWl4cC5jIGIvZHJpdmVycy9pZGUvYXRpaXhwLmMKaW5kZXggODM3MzIyYi4uMTVmMGVhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXRpaXhwLmMKKysrIGIvZHJpdmVycy9pZGUvYXRpaXhwLmMKQEAgLTQyLDE5ICs0MiwyMCBAQAogCiAvKioKICAqCWF0aWl4cF9zZXRfcGlvX21vZGUJLQlzZXQgaG9zdCBjb250cm9sbGVyIGZvciBQSU8gbW9kZQorICoJQGh3aWY6IHBvcnQKICAqCUBkcml2ZTogZHJpdmUKLSAqCUBwaW86IFBJTyBtb2RlIG51bWJlcgogICoKICAqCVNldCB0aGUgaW50ZXJmYWNlIFBJTyBtb2RlLgogICovCiAKLXN0YXRpYyB2b2lkIGF0aWl4cF9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCitzdGF0aWMgdm9pZCBhdGlpeHBfc2V0X3Bpb19tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihkcml2ZS0+aHdpZi0+ZGV2KTsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHRpbWluZ19zaGlmdCA9IChkcml2ZS0+ZG4gXiAxKSAqIDg7CiAJdTMyIHBpb190aW1pbmdfZGF0YTsKIAl1MTYgcGlvX21vZGVfZGF0YTsKKwljb25zdCB1OCBwaW8gPSBkcml2ZS0+cGlvX21vZGUgLSBYRkVSX1BJT18wOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmF0aWl4cF9sb2NrLCBmbGFncyk7CiAKQEAgLTc0LDIxICs3NSwyMiBAQAogCiAvKioKICAqCWF0aWl4cF9zZXRfZG1hX21vZGUJLQlzZXQgaG9zdCBjb250cm9sbGVyIGZvciBETUEgbW9kZQorICoJQGh3aWY6IHBvcnQKICAqCUBkcml2ZTogZHJpdmUKLSAqCUBzcGVlZDogRE1BIG1vZGUKICAqCiAgKglTZXQgYSBBVElJWFAgaG9zdCBjb250cm9sbGVyIHRvIHRoZSBkZXNpcmVkIERNQSBtb2RlLiAgVGhpcyBpbnZvbHZlcwogICoJcHJvZ3JhbW1pbmcgdGhlIHJpZ2h0IHRpbWluZyBkYXRhIGludG8gdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlLgogICovCiAKLXN0YXRpYyB2b2lkIGF0aWl4cF9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBzcGVlZCkKK3N0YXRpYyB2b2lkIGF0aWl4cF9zZXRfZG1hX21vZGUoaWRlX2h3aWZfdCAqaHdpZiwgaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGRyaXZlLT5od2lmLT5kZXYpOworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgdGltaW5nX3NoaWZ0ID0gKGRyaXZlLT5kbiBeIDEpICogODsKIAl1MzIgdG1wMzI7CiAJdTE2IHRtcDE2OwogCXUxNiB1ZG1hX2N0bCA9IDA7CisJY29uc3QgdTggc3BlZWQgPSBkcml2ZS0+ZG1hX21vZGU7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYXRpaXhwX2xvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jIGIvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jCmluZGV4IDM0OWE2N2IuLmIyNmMyMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYworKysgYi9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMKQEAgLTk5LDEyICs5OSwxMSBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIGF1MXh4eF9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCitzdGF0aWMgdm9pZCBhdTF4eHhfc2V0X3Bpb19tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpbnQgbWVtX3N0dGltZSA9IDAsIG1lbV9zdGNmZyA9IGF1X3JlYWRsKE1FTV9TVENGRzIpOwogCi0JLyogc2V0IHBpbyBtb2RlISAqLwotCXN3aXRjaChwaW8pIHsKKwlzd2l0Y2ggKGRyaXZlLT5waW9fbW9kZSAtIFhGRVJfUElPXzApIHsKIAljYXNlIDA6CiAJCW1lbV9zdHRpbWUgPSBTQkNfSURFX1RJTUlORyhQSU8wKTsKIApAQCAtMTYxLDExICsxNjAsMTEgQEAKIAlhdV93cml0ZWwobWVtX3N0Y2ZnLE1FTV9TVENGRzIpOwogfQogCi1zdGF0aWMgdm9pZCBhdWlkZV9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBzcGVlZCkKK3N0YXRpYyB2b2lkIGF1aWRlX3NldF9kbWFfbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaW50IG1lbV9zdHRpbWUgPSAwLCBtZW1fc3RjZmcgPSBhdV9yZWFkbChNRU1fU1RDRkcyKTsKIAotCXN3aXRjaChzcGVlZCkgeworCXN3aXRjaCAoZHJpdmUtPmRtYV9tb2RlKSB7CiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFX0FVMVhYWF9NRE1BMl9EQkRNQQogCWNhc2UgWEZFUl9NV19ETUFfMjoKIAkJbWVtX3N0dGltZSA9IFNCQ19JREVfVElNSU5HKE1ETUEyKTsKQEAgLTI5Nyw4ICsyOTYsOCBAQAogCSAqLwogCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWErKzsKIAlpZiAoZHJpdmUtPndhaXRpbmdfZm9yX2RtYSA+PSBETUFfV0FJVF9USU1FT1VUKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB0aW1lb3V0IHdhaXRpbmcgZm9yIGRkbWEgdG8gXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlXG4iLCBkcml2ZS0+bmFtZSk7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB0aW1lb3V0IHdhaXRpbmcgZm9yIGRkbWEgdG8gY29tcGxldGVcbiIsCisJCSAgICAgICBkcml2ZS0+bmFtZSk7CiAJCXJldHVybiAxOwogCX0KIAl1ZGVsYXkoMTApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY21kNjQwLmMgYi9kcml2ZXJzL2lkZS9jbWQ2NDAuYwppbmRleCAxYTMyZDYyLi5kMmI4YjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jbWQ2NDAuYworKysgYi9kcml2ZXJzL2lkZS9jbWQ2NDAuYwpAQCAtNTcyLDkgKzU3MiwxMCBAQAogCXByb2dyYW1fZHJpdmVfY291bnRzKGRyaXZlLCBpbmRleCk7CiB9CiAKLXN0YXRpYyB2b2lkIGNtZDY0MF9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCitzdGF0aWMgdm9pZCBjbWQ2NDBfc2V0X3Bpb19tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAl1bnNpZ25lZCBpbnQgaW5kZXggPSAwLCBjeWNsZV90aW1lOworCWNvbnN0IHU4IHBpbyA9IGRyaXZlLT5waW9fbW9kZSAtIFhGRVJfUElPXzA7CiAJdTggYjsKIAogCXN3aXRjaCAocGlvKSB7CkBAIC02MDUsNyArNjA2LDcgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9DTUQ2NDBfRU5IQU5DRUQgKi8KIAotc3RhdGljIHZvaWQgY21kNjQwX2luaXRfZGV2KGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyB2b2lkIF9faW5pdCBjbWQ2NDBfaW5pdF9kZXYoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXVuc2lnbmVkIGludCBpID0gZHJpdmUtPmh3aWYtPmNoYW5uZWwgKiAyICsgKGRyaXZlLT5kbiAmIDEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jbWQ2NHguYyBiL2RyaXZlcnMvaWRlL2NtZDY0eC5jCmluZGV4IGYyNTAwYzguLjVmODAzMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NtZDY0eC5jCisrKyBiL2RyaXZlcnMvaWRlL2NtZDY0eC5jCkBAIC03LDYgKzcsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk4CQlEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIJQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwCUJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKICAqIENvcHlyaWdodCAoQykgMjAwNywyMDA5CU1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgogICovCiAKQEAgLTUwLDcyICs1MSw0MiBAQAogI2RlZmluZSBVRElERVRDUjEJMHg3QgogI2RlZmluZSBEVFBSMQkJMHg3QwogCi1zdGF0aWMgdTggcXVhbnRpemVfdGltaW5nKGludCB0aW1pbmcsIGludCBxdWFudCkKK3N0YXRpYyB2b2lkIGNtZDY0eF9wcm9ncmFtX3RpbWluZ3MoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBtb2RlKQogewotCXJldHVybiAodGltaW5nICsgcXVhbnQgLSAxKSAvIHF1YW50OwotfQotCi0vKgotICogVGhpcyByb3V0aW5lIGNhbGN1bGF0ZXMgYWN0aXZlL3JlY292ZXJ5IGNvdW50cyBhbmQgdGhlbiB3cml0ZXMgdGhlbSBpbnRvCi0gKiB0aGUgY2hpcHNldCByZWdpc3RlcnMuCi0gKi8KLXN0YXRpYyB2b2lkIHByb2dyYW1fY3ljbGVfdGltZXMgKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGN5Y2xlX3RpbWUsIGludCBhY3RpdmVfdGltZSkKLXsKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoZHJpdmUtPmh3aWYtPmRldik7Ci0JaW50IGNsb2NrX3RpbWUgPSAxMDAwIC8gKGlkZV9wY2lfY2xrID8gaWRlX3BjaV9jbGsgOiAzMyk7Ci0JdTggIGN5Y2xlX2NvdW50LCBhY3RpdmVfY291bnQsIHJlY292ZXJ5X2NvdW50LCBkcnd0aW07CisJaW50IGJ1c19zcGVlZCA9IGlkZV9wY2lfY2xrID8gaWRlX3BjaV9jbGsgOiAzMzsKKwljb25zdCB1bnNpZ25lZCBsb25nIFQgPSAxMDAwMDAwIC8gYnVzX3NwZWVkOwogCXN0YXRpYyBjb25zdCB1OCByZWNvdmVyeV92YWx1ZXNbXSA9CiAJCXsxNSwgMTUsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMH07CisJc3RhdGljIGNvbnN0IHU4IHNldHVwX3ZhbHVlc1tdID0gezB4NDAsIDB4NDAsIDB4NDAsIDB4ODAsIDAsIDB4YzB9OworCXN0YXRpYyBjb25zdCB1OCBhcnR0aW1fcmVnc1s0XSA9IHtBUlRUSU0wLCBBUlRUSU0xLCBBUlRUSU0yMywgQVJUVElNMjN9OwogCXN0YXRpYyBjb25zdCB1OCBkcnd0aW1fcmVnc1s0XSA9IHtEUldUSU0wLCBEUldUSU0xLCBEUldUSU0yLCBEUldUSU0zfTsKKwlzdHJ1Y3QgaWRlX3RpbWluZyB0OworCXU4IGFydHRpbSA9IDA7CiAKLQljeWNsZV9jb3VudAk9IHF1YW50aXplX3RpbWluZyggY3ljbGVfdGltZSwgY2xvY2tfdGltZSk7Ci0JYWN0aXZlX2NvdW50CT0gcXVhbnRpemVfdGltaW5nKGFjdGl2ZV90aW1lLCBjbG9ja190aW1lKTsKLQlyZWNvdmVyeV9jb3VudAk9IGN5Y2xlX2NvdW50IC0gYWN0aXZlX2NvdW50OworCWlkZV90aW1pbmdfY29tcHV0ZShkcml2ZSwgbW9kZSwgJnQsIFQsIDApOwogCiAJLyoKIAkgKiBJbiBjYXNlIHdlJ3ZlIGdvdCB0b28gbG9uZyByZWNvdmVyeSBwaGFzZSwgdHJ5IHRvIGxlbmd0aGVuCiAJICogdGhlIGFjdGl2ZSBwaGFzZQogCSAqLwotCWlmIChyZWNvdmVyeV9jb3VudCA+IDE2KSB7Ci0JCWFjdGl2ZV9jb3VudCArPSByZWNvdmVyeV9jb3VudCAtIDE2OwotCQlyZWNvdmVyeV9jb3VudCA9IDE2OworCWlmICh0LnJlY292ZXIgPiAxNikgeworCQl0LmFjdGl2ZSArPSB0LnJlY292ZXIgLSAxNjsKKwkJdC5yZWNvdmVyID0gMTY7CiAJfQotCWlmIChhY3RpdmVfY291bnQgPiAxNikJCS8qIHNob3VsZG4ndCBhY3R1YWxseSBoYXBwZW4uLi4gKi8KLQkgCWFjdGl2ZV9jb3VudCA9IDE2OworCWlmICh0LmFjdGl2ZSA+IDE2KQkJLyogc2hvdWxkbid0IGFjdHVhbGx5IGhhcHBlbi4uLiAqLworCQl0LmFjdGl2ZSA9IDE2OwogCiAJLyoKIAkgKiBDb252ZXJ0IHZhbHVlcyB0byBpbnRlcm5hbCBjaGlwc2V0IHJlcHJlc2VudGF0aW9uCiAJICovCi0JcmVjb3ZlcnlfY291bnQgPSByZWNvdmVyeV92YWx1ZXNbcmVjb3ZlcnlfY291bnRdOwotIAlhY3RpdmVfY291bnQgICY9IDB4MGY7CisJdC5yZWNvdmVyID0gcmVjb3ZlcnlfdmFsdWVzW3QucmVjb3Zlcl07CisJdC5hY3RpdmUgJj0gMHgwZjsKIAogCS8qIFByb2dyYW0gdGhlIGFjdGl2ZS9yZWNvdmVyeSBjb3VudHMgaW50byB0aGUgRFJXVElNIHJlZ2lzdGVyICovCi0JZHJ3dGltID0gKGFjdGl2ZV9jb3VudCA8PCA0KSB8IHJlY292ZXJ5X2NvdW50OwotCSh2b2lkKSBwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBkcnd0aW1fcmVnc1tkcml2ZS0+ZG5dLCBkcnd0aW0pOwotfQotCi0vKgotICogVGhpcyByb3V0aW5lIHdyaXRlcyBpbnRvIHRoZSBjaGlwc2V0IHJlZ2lzdGVycwotICogUElPIHNldHVwL2FjdGl2ZS9yZWNvdmVyeSB0aW1pbmdzLgotICovCi1zdGF0aWMgdm9pZCBjbWQ2NHhfdHVuZV9waW8oaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCi17Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IGRyaXZlLT5od2lmOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7Ci0Jc3RydWN0IGlkZV90aW1pbmcgKnQJPSBpZGVfdGltaW5nX2ZpbmRfbW9kZShYRkVSX1BJT18wICsgcGlvKTsKLQl1bnNpZ25lZCBsb25nIHNldHVwX2NvdW50OwotCXVuc2lnbmVkIGludCBjeWNsZV90aW1lOwotCXU4IGFydHRpbSA9IDA7Ci0KLQlzdGF0aWMgY29uc3QgdTggc2V0dXBfdmFsdWVzW10gPSB7MHg0MCwgMHg0MCwgMHg0MCwgMHg4MCwgMCwgMHhjMH07Ci0Jc3RhdGljIGNvbnN0IHU4IGFydHRpbV9yZWdzWzRdID0ge0FSVFRJTTAsIEFSVFRJTTEsIEFSVFRJTTIzLCBBUlRUSU0yM307Ci0KLQljeWNsZV90aW1lID0gaWRlX3Bpb19jeWNsZV90aW1lKGRyaXZlLCBwaW8pOwotCi0JcHJvZ3JhbV9jeWNsZV90aW1lcyhkcml2ZSwgY3ljbGVfdGltZSwgdC0+YWN0aXZlKTsKLQotCXNldHVwX2NvdW50ID0gcXVhbnRpemVfdGltaW5nKHQtPnNldHVwLAotCQkJMTAwMCAvIChpZGVfcGNpX2NsayA/IGlkZV9wY2lfY2xrIDogMzMpKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBkcnd0aW1fcmVnc1tkcml2ZS0+ZG5dLAorCQkJICAgICAgKHQuYWN0aXZlIDw8IDQpIHwgdC5yZWNvdmVyKTsKIAogCS8qCiAJICogVGhlIHByaW1hcnkgY2hhbm5lbCBoYXMgaW5kaXZpZHVhbCBhZGRyZXNzIHNldHVwIHRpbWluZyByZWdpc3RlcnMKQEAgLTEyNiwxNSArOTcsMjEgQEAKIAlpZiAoaHdpZi0+Y2hhbm5lbCkgewogCQlpZGVfZHJpdmVfdCAqcGFpciA9IGlkZV9nZXRfcGFpcl9kZXYoZHJpdmUpOwogCi0JCWlkZV9zZXRfZHJpdmVkYXRhKGRyaXZlLCAodm9pZCAqKXNldHVwX2NvdW50KTsKKwkJaWYgKHBhaXIpIHsKKwkJCXN0cnVjdCBpZGVfdGltaW5nIHRwOwogCi0JCWlmIChwYWlyKQotCQkJc2V0dXBfY291bnQgPSBtYXhfdCh1OCwgc2V0dXBfY291bnQsCi0JCQkJCSh1bnNpZ25lZCBsb25nKWlkZV9nZXRfZHJpdmVkYXRhKHBhaXIpKTsKKwkJCWlkZV90aW1pbmdfY29tcHV0ZShwYWlyLCBwYWlyLT5waW9fbW9kZSwgJnRwLCBULCAwKTsKKwkJCWlkZV90aW1pbmdfbWVyZ2UoJnQsICZ0cCwgJnQsIElERV9USU1JTkdfU0VUVVApOworCQkJaWYgKHBhaXItPmRtYV9tb2RlKSB7CisJCQkJaWRlX3RpbWluZ19jb21wdXRlKHBhaXIsIHBhaXItPmRtYV9tb2RlLAorCQkJCQkJJnRwLCBULCAwKTsKKwkJCQlpZGVfdGltaW5nX21lcmdlKCZ0cCwgJnQsICZ0LCBJREVfVElNSU5HX1NFVFVQKTsKKwkJCX0KKwkJfQogCX0KIAotCWlmIChzZXR1cF9jb3VudCA+IDUpCQkvKiBzaG91bGRuJ3QgYWN0dWFsbHkgaGFwcGVuLi4uICovCi0JCXNldHVwX2NvdW50ID0gNTsKKwlpZiAodC5zZXR1cCA+IDUpCQkvKiBzaG91bGRuJ3QgYWN0dWFsbHkgaGFwcGVuLi4uICovCisJCXQuc2V0dXAgPSA1OwogCiAJLyoKIAkgKiBQcm9ncmFtIHRoZSBhZGRyZXNzIHNldHVwIGNsb2NrcyBpbnRvIHRoZSBBUlRUSU0gcmVnaXN0ZXJzLgpAQCAtMTQ0LDcgKzEyMSw3IEBACiAJaWYgKGh3aWYtPmNoYW5uZWwpCiAJCWFydHRpbSAmPSB+QVJUVElNMjNfSU5UUl9DSDE7CiAJYXJ0dGltICY9IH4weGMwOwotCWFydHRpbSB8PSBzZXR1cF92YWx1ZXNbc2V0dXBfY291bnRdOworCWFydHRpbSB8PSBzZXR1cF92YWx1ZXNbdC5zZXR1cF07CiAJKHZvaWQpIHBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIGFydHRpbV9yZWdzW2RyaXZlLT5kbl0sIGFydHRpbSk7CiB9CiAKQEAgLTE1Myw4ICsxMzAsMTAgQEAKICAqIFNwZWNpYWwgY2FzZXMgYXJlIDg6IHByZWZldGNoIG9mZiwgOTogcHJlZmV0Y2ggb24gKGJvdGggbmV2ZXIgd29ya2VkKQogICovCiAKLXN0YXRpYyB2b2lkIGNtZDY0eF9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCitzdGF0aWMgdm9pZCBjbWQ2NHhfc2V0X3Bpb19tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKKwljb25zdCB1OCBwaW8gPSBkcml2ZS0+cGlvX21vZGUgLSBYRkVSX1BJT18wOworCiAJLyoKIAkgKiBGaWx0ZXIgb3V0IHRoZSBwcmVmZXRjaCBjb250cm9sIHZhbHVlcwogCSAqIHRvIHByZXZlbnQgUElPNSBmcm9tIGJlaW5nIHByb2dyYW1tZWQKQEAgLTE2MiwyMCArMTQxLDE4IEBACiAJaWYgKHBpbyA9PSA4IHx8IHBpbyA9PSA5KQogCQlyZXR1cm47CiAKLQljbWQ2NHhfdHVuZV9waW8oZHJpdmUsIHBpbyk7CisJY21kNjR4X3Byb2dyYW1fdGltaW5ncyhkcml2ZSwgWEZFUl9QSU9fMCArIHBpbyk7CiB9CiAKLXN0YXRpYyB2b2lkIGNtZDY0eF9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBzcGVlZCkKK3N0YXRpYyB2b2lkIGNtZDY0eF9zZXRfZG1hX21vZGUoaWRlX2h3aWZfdCAqaHdpZiwgaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwogCXU4IHVuaXQJCQk9IGRyaXZlLT5kbiAmIDB4MDE7CiAJdTggcmVnVSA9IDAsIHBjaVUJPSBod2lmLT5jaGFubmVsID8gVURJREVUQ1IxIDogVURJREVUQ1IwOworCWNvbnN0IHU4IHNwZWVkCQk9IGRyaXZlLT5kbWFfbW9kZTsKIAotCWlmIChzcGVlZCA+PSBYRkVSX1NXX0RNQV8wKSB7Ci0JCSh2b2lkKSBwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIHBjaVUsICZyZWdVKTsKLQkJcmVnVSAmPSB+KHVuaXQgPyAweENBIDogMHgzNSk7Ci0JfQorCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgcGNpVSwgJnJlZ1UpOworCXJlZ1UgJj0gfih1bml0ID8gMHhDQSA6IDB4MzUpOwogCiAJc3dpdGNoKHNwZWVkKSB7CiAJY2FzZSBYRkVSX1VETUFfNToKQEAgLTE5NywxOCArMTc0LDEzIEBACiAJCXJlZ1UgfD0gdW5pdCA/IDB4QzIgOiAweDMxOwogCQlicmVhazsKIAljYXNlIFhGRVJfTVdfRE1BXzI6Ci0JCXByb2dyYW1fY3ljbGVfdGltZXMoZHJpdmUsIDEyMCwgNzApOwotCQlicmVhazsKIAljYXNlIFhGRVJfTVdfRE1BXzE6Ci0JCXByb2dyYW1fY3ljbGVfdGltZXMoZHJpdmUsIDE1MCwgODApOwotCQlicmVhazsKIAljYXNlIFhGRVJfTVdfRE1BXzA6Ci0JCXByb2dyYW1fY3ljbGVfdGltZXMoZHJpdmUsIDQ4MCwgMjE1KTsKKwkJY21kNjR4X3Byb2dyYW1fdGltaW5ncyhkcml2ZSwgc3BlZWQpOwogCQlicmVhazsKIAl9CiAKLQlpZiAoc3BlZWQgPj0gWEZFUl9TV19ETUFfMCkKLQkJKHZvaWQpIHBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIHBjaVUsIHJlZ1UpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIHBjaVUsIHJlZ1UpOwogfQogCiBzdGF0aWMgdm9pZCBjbWQ2NDhfY2xlYXJfaXJxKGlkZV9kcml2ZV90ICpkcml2ZSkKQEAgLTQ3MSw2ICs0NDMsNiBAQAogbW9kdWxlX2luaXQoY21kNjR4X2lkZV9pbml0KTsKIG1vZHVsZV9leGl0KGNtZDY0eF9pZGVfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIkVkZGllIERvc3QsIERhdmlkIE1pbGxlciwgQW5kcmUgSGVkcmljayIpOworTU9EVUxFX0FVVEhPUigiRWRkaWUgRG9zdCwgRGF2aWQgTWlsbGVyLCBBbmRyZSBIZWRyaWNrLCBCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBDSSBkcml2ZXIgbW9kdWxlIGZvciBDTUQ2NHggSURFIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jczU1MjAuYyBiL2RyaXZlcnMvaWRlL2NzNTUyMC5jCmluZGV4IDA5Zjk4ZWQuLjJjMWU1ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NzNTUyMC5jCisrKyBiL2RyaXZlcnMvaWRlL2NzNTUyMC5jCkBAIC01NywxMSArNTcsMTEgQEAKIAl7MSwgMiwgMX0KIH07CiAKLXN0YXRpYyB2b2lkIGNzNTUyMF9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCitzdGF0aWMgdm9pZCBjczU1MjBfc2V0X3Bpb19tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJaW50IGNvbnRyb2xsZXIgPSBkcml2ZS0+ZG4gPiAxID8gMSA6IDA7CisJY29uc3QgdTggcGlvID0gZHJpdmUtPnBpb19tb2RlIC0gWEZFUl9QSU9fMDsKIAogCS8qIDhiaXQgQ0FUL0NSVCAtIDhiaXQgY29tbWFuZCB0aW1pbmcgZm9yIGNoYW5uZWwgKi8KIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgMHg2MiArIGNvbnRyb2xsZXIsIApAQCAtODEsMTEgKzgxLDEyIEBACiAJCShjczU1MjBfcGlvX2Nsb2Nrc1twaW9dLmFzc2VydCkpOwogfQogCi1zdGF0aWMgdm9pZCBjczU1MjBfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggc3BlZWQpCitzdGF0aWMgdm9pZCBjczU1MjBfc2V0X2RtYV9tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlwcmludGsoS0VSTl9FUlIgImNzNTV4MDogYmFkIGlkZSB0aW1pbmcuXG4iKTsKIAotCWNzNTUyMF9zZXRfcGlvX21vZGUoZHJpdmUsIDApOworCWRyaXZlLT5waW9fbW9kZSA9IFhGRVJfUElPXzAgKyAwOworCWNzNTUyMF9zZXRfcGlvX21vZGUoaHdpZiwgZHJpdmUpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBjczU1MjBfcG9ydF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jczU1MzAuYyBiL2RyaXZlcnMvaWRlL2NzNTUzMC5jCmluZGV4IDQwYmYwNWUuLjRkYzRlYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NzNTUzMC5jCisrKyBiL2RyaXZlcnMvaWRlL2NzNTUzMC5jCkBAIC00MSw4ICs0MSw4IEBACiAKIC8qKgogICoJY3M1NTMwX3NldF9waW9fbW9kZQktCXNldCBob3N0IGNvbnRyb2xsZXIgZm9yIFBJTyBtb2RlCisgKglAaHdpZjogcG9ydAogICoJQGRyaXZlOiBkcml2ZQotICoJQHBpbzogUElPIG1vZGUgbnVtYmVyCiAgKgogICoJSGFuZGxlcyBzZXR0aW5nIG9mIFBJTyBtb2RlIGZvciB0aGUgY2hpcHNldC4KICAqCkBAIC01MCwxMCArNTAsMTEgQEAKICAqCXdpbGwgaGF2ZSB2YWxpZCBkZWZhdWx0IFBJTyB0aW1pbmdzIHNldCB1cCBiZWZvcmUgd2UgZ2V0IGhlcmUuCiAgKi8KIAotc3RhdGljIHZvaWQgY3M1NTMwX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKK3N0YXRpYyB2b2lkIGNzNTUzMF9zZXRfcGlvX21vZGUoaWRlX2h3aWZfdCAqaHdpZiwgaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCXVuc2lnbmVkIGxvbmcgYmFzZXJlZyA9IENTNTUzMF9CQVNFUkVHKGRyaXZlLT5od2lmKTsKKwl1bnNpZ25lZCBsb25nIGJhc2VyZWcgPSBDUzU1MzBfQkFTRVJFRyhod2lmKTsKIAl1bnNpZ25lZCBpbnQgZm9ybWF0ID0gKGlubChiYXNlcmVnICsgNCkgPj4gMzEpICYgMTsKKwljb25zdCB1OCBwaW8gPSBkcml2ZS0+cGlvX21vZGUgLSBYRkVSX1BJT18wOwogCiAJb3V0bChjczU1MzBfcGlvX3RpbWluZ3NbZm9ybWF0XVtwaW9dLCBiYXNlcmVnICsgKChkcml2ZS0+ZG4gJiAxKTw8MykpOwogfQpAQCAtOTksMTIgKzEwMCwxMiBAQAogCXJldHVybiBtYXNrOwogfQogCi1zdGF0aWMgdm9pZCBjczU1MzBfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggbW9kZSkKK3N0YXRpYyB2b2lkIGNzNTUzMF9zZXRfZG1hX21vZGUoaWRlX2h3aWZfdCAqaHdpZiwgaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXVuc2lnbmVkIGxvbmcgYmFzZXJlZzsKIAl1bnNpZ25lZCBpbnQgcmVnLCB0aW1pbmdzID0gMDsKIAotCXN3aXRjaCAobW9kZSkgeworCXN3aXRjaCAoZHJpdmUtPmRtYV9tb2RlKSB7CiAJCWNhc2UgWEZFUl9VRE1BXzA6CXRpbWluZ3MgPSAweDAwOTIxMjUwOyBicmVhazsKIAkJY2FzZSBYRkVSX1VETUFfMToJdGltaW5ncyA9IDB4MDA5MTExNDA7IGJyZWFrOwogCQljYXNlIFhGRVJfVURNQV8yOgl0aW1pbmdzID0gMHgwMDkxMTAzMDsgYnJlYWs7CkBAIC0xMTIsNyArMTEzLDcgQEAKIAkJY2FzZSBYRkVSX01XX0RNQV8xOgl0aW1pbmdzID0gMHgwMDAxMjEyMTsgYnJlYWs7CiAJCWNhc2UgWEZFUl9NV19ETUFfMjoJdGltaW5ncyA9IDB4MDAwMDIwMjA7IGJyZWFrOwogCX0KLQliYXNlcmVnID0gQ1M1NTMwX0JBU0VSRUcoZHJpdmUtPmh3aWYpOworCWJhc2VyZWcgPSBDUzU1MzBfQkFTRVJFRyhod2lmKTsKIAlyZWcgPSBpbmwoYmFzZXJlZyArIDQpOwkJCS8qIGdldCBkcml2ZTAgY29uZmlnIHJlZ2lzdGVyICovCiAJdGltaW5ncyB8PSByZWcgJiAweDgwMDAwMDAwOwkJLyogcHJlc2VydmUgUElPIGZvcm1hdCBiaXQgKi8KIAlpZiAoKGRyaXZlLT4gZG4gJiAxKSA9PSAwKSB7CQkvKiBhcmUgd2UgY29uZmlndXJpbmcgZHJpdmUwPyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY3M1NTM1LmMgYi9kcml2ZXJzL2lkZS9jczU1MzUuYwppbmRleCBiODgzODM4Li41MDU5ZmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jczU1MzUuYworKysgYi9kcml2ZXJzL2lkZS9jczU1MzUuYwpAQCAtODYsNyArODYsNyBAQAogCQljbWQgPSBwaW9hID0gc3BlZWQgLSBYRkVSX1BJT18wOwogCiAJCWlmIChwYWlyKSB7Ci0JCQl1OCBwaW9iID0gaWRlX2dldF9iZXN0X3Bpb19tb2RlKHBhaXIsIDI1NSwgNCk7CisJCQl1OCBwaW9iID0gcGFpci0+cGlvX21vZGUgLSBYRkVSX1BJT18wOwogCiAJCQlpZiAocGlvYiA8IGNtZCkKIAkJCQljbWQgPSBwaW9iOwpAQCAtMTI5LDI4ICsxMjksMjggQEAKIAogLyoqCiAgKgljczU1MzVfc2V0X2RtYV9tb2RlCS0Jc2V0IGhvc3QgY29udHJvbGxlciBmb3IgRE1BIG1vZGUKKyAqCUBod2lmOiBwb3J0CiAgKglAZHJpdmU6IGRyaXZlCi0gKglAc3BlZWQ6IERNQSBtb2RlCiAgKgogICoJUHJvZ3JhbXMgdGhlIGNoaXBzZXQgZm9yIERNQSBtb2RlLgogICovCiAKLXN0YXRpYyB2b2lkIGNzNTUzNV9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBzcGVlZCkKK3N0YXRpYyB2b2lkIGNzNTUzNV9zZXRfZG1hX21vZGUoaWRlX2h3aWZfdCAqaHdpZiwgaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWNzNTUzNV9zZXRfc3BlZWQoZHJpdmUsIHNwZWVkKTsKKwljczU1MzVfc2V0X3NwZWVkKGRyaXZlLCBkcml2ZS0+ZG1hX21vZGUpOwogfQogCiAvKioKICAqCWNzNTUzNV9zZXRfcGlvX21vZGUJLQlzZXQgaG9zdCBjb250cm9sbGVyIGZvciBQSU8gbW9kZQorICoJQGh3aWY6IHBvcnQKICAqCUBkcml2ZTogZHJpdmUKLSAqCUBwaW86IFBJTyBtb2RlIG51bWJlcgogICoKICAqCUEgY2FsbGJhY2sgZnJvbSB0aGUgdXBwZXIgbGF5ZXJzIGZvciBQSU8tb25seSB0dW5pbmcuCiAgKi8KIAotc3RhdGljIHZvaWQgY3M1NTM1X3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKK3N0YXRpYyB2b2lkIGNzNTUzNV9zZXRfcGlvX21vZGUoaWRlX2h3aWZfdCAqaHdpZiwgaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWNzNTUzNV9zZXRfc3BlZWQoZHJpdmUsIFhGRVJfUElPXzAgKyBwaW8pOworCWNzNTUzNV9zZXRfc3BlZWQoZHJpdmUsIGRyaXZlLT5waW9fbW9kZSk7CiB9CiAKIHN0YXRpYyB1OCBjczU1MzVfY2FibGVfZGV0ZWN0KGlkZV9od2lmX3QgKmh3aWYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9jczU1MzYuYyBiL2RyaXZlcnMvaWRlL2NzNTUzNi5jCmluZGV4IDk2MjNiODUuLjI0MjE0YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2NzNTUzNi5jCisrKyBiL2RyaXZlcnMvaWRlL2NzNTUzNi5jCkBAIC0xMjUsMTEgKzEyNSwxMSBAQAogCiAvKioKICAqCWNzNTUzNl9zZXRfcGlvX21vZGUJCS0JUElPIHRpbWluZyBzZXR1cAorICoJQGh3aWY6IEFUQSBwb3J0CiAgKglAZHJpdmU6IEFUQSBkZXZpY2UKLSAqCUBwaW86IFBJTyBtb2RlIG51bWJlcgogICovCiAKLXN0YXRpYyB2b2lkIGNzNTUzNl9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCitzdGF0aWMgdm9pZCBjczU1MzZfc2V0X3Bpb19tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlzdGF0aWMgY29uc3QgdTggZHJ2X3RpbWluZ3NbNV0gPSB7CiAJCTB4OTgsIDB4NTUsIDB4MzIsIDB4MjEsIDB4MjAsCkBAIC0xNDMsMTUgKzE0MywxNiBAQAogCQkweDk5LCAweDkyLCAweDkwLCAweDIyLCAweDIwLAogCX07CiAKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZHJpdmUtPmh3aWYtPmRldik7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJaWRlX2RyaXZlX3QgKnBhaXIgPSBpZGVfZ2V0X3BhaXJfZGV2KGRyaXZlKTsKIAlpbnQgY3NoaWZ0ID0gKGRyaXZlLT5kbiAmIDEpID8gSURFX0NBU1RfRDFfU0hJRlQgOiBJREVfQ0FTVF9EMF9TSElGVDsKIAl1bnNpZ25lZCBsb25nIHRpbWluZ3MgPSAodW5zaWduZWQgbG9uZylpZGVfZ2V0X2RyaXZlZGF0YShkcml2ZSk7CiAJdTMyIGNhc3Q7CisJY29uc3QgdTggcGlvID0gZHJpdmUtPnBpb19tb2RlIC0gWEZFUl9QSU9fMDsKIAl1OCBjbWRfcGlvID0gcGlvOwogCiAJaWYgKHBhaXIpCi0JCWNtZF9waW8gPSBtaW4ocGlvLCBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUocGFpciwgMjU1LCA0KSk7CisJCWNtZF9waW8gPSBtaW5fdCh1OCwgcGlvLCBwYWlyLT5waW9fbW9kZSAtIFhGRVJfUElPXzApOwogCiAJdGltaW5ncyAmPSAoSURFX0RSVl9NQVNLIDw8IDgpOwogCXRpbWluZ3MgfD0gZHJ2X3RpbWluZ3NbcGlvXTsKQEAgLTE3MiwxMSArMTczLDExIEBACiAKIC8qKgogICoJY3M1NTM2X3NldF9kbWFfbW9kZQkJLQlETUEgdGltaW5nIHNldHVwCisgKglAaHdpZjogQVRBIHBvcnQKICAqCUBkcml2ZTogQVRBIGRldmljZQotICoJQG1vZGU6IERNQSBtb2RlCiAgKi8KIAotc3RhdGljIHZvaWQgY3M1NTM2X3NldF9kbWFfbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IG1vZGUpCitzdGF0aWMgdm9pZCBjczU1MzZfc2V0X2RtYV9tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlzdGF0aWMgY29uc3QgdTggdWRtYV90aW1pbmdzWzZdID0gewogCQkweGMyLCAweGMxLCAweGMwLCAweGM0LCAweGM1LCAweGM2LApAQCAtMTg2LDEwICsxODcsMTEgQEAKIAkJMHg2NywgMHgyMSwgMHgyMCwKIAl9OwogCi0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRyaXZlLT5od2lmLT5kZXYpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwogCWludCBkc2hpZnQgPSAoZHJpdmUtPmRuICYgMSkgPyBJREVfRDFfU0hJRlQgOiBJREVfRDBfU0hJRlQ7CiAJdW5zaWduZWQgbG9uZyB0aW1pbmdzID0gKHVuc2lnbmVkIGxvbmcpaWRlX2dldF9kcml2ZWRhdGEoZHJpdmUpOwogCXUzMiBldGM7CisJY29uc3QgdTggbW9kZSA9IGRyaXZlLT5kbWFfbW9kZTsKIAogCWNzNTUzNl9yZWFkKHBkZXYsIEVUQywgJmV0Yyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2N5ODJjNjkzLmMgYi9kcml2ZXJzL2lkZS9jeTgyYzY5My5jCmluZGV4IGQ2ZTJjYmIuLjkzODNmNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2N5ODJjNjkzLmMKKysrIGIvZHJpdmVycy9pZGUvY3k4MmM2OTMuYwpAQCAtMSw0MyArMSwxMSBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBBbmRyZWFzIFMuIEtyZWJzIChha3JlYnNAYWx0YXZpc3RhLm5ldCksIE1haW50YWluZXIKICAqICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMiBBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPiwgSW50ZWdyYXRvcgorICogIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIEJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKICAqCiAgKiBDWVBSRVNTIENZODJDNjkzIGNoaXBzZXQgSURFIGNvbnRyb2xsZXIKICAqCiAgKiBUaGUgQ1k4MkM2OTMgY2hpcHNldCBpcyB1c2VkIG9uIERpZ2l0YWwncyBQQy1BbHBoYSAxNjRTWCBib2FyZHMuCi0gKiBXcml0aW5nIHRoZSBkcml2ZXIgd2FzIHF1aXRlIHNpbXBsZSwgc2luY2UgbW9zdCBvZiB0aGUgam9iIGlzCi0gKiBkb25lIGJ5IHRoZSBnZW5lcmljIHBjaS1pZGUgc3VwcG9ydC4KLSAqIFRoZSBoYXJkIHBhcnQgd2FzIGZpbmRpbmcgdGhlIENZODJDNjkzJ3MgZGF0YXNoZWV0IG9uIEN5cHJlc3MncwotICogd2ViIHBhZ2UgOi0oLiBCdXQgQWx0YXZpc3RhIHNvbHZlZCB0aGlzIHByb2JsZW0gOi0pLgotICoKLSAqCi0gKiBOb3RlczoKLSAqIC0gSSByZWNlbnRseSBnb3QgYSAxNi44RyBJQk0gRFRUQSwgc28gSSB3YXMgYWJsZSB0byB0ZXN0IGl0IHdpdGgKLSAqICAgYSBsYXJnZSBhbmQgZmFzdCBkaXNrIC0gdGhlIHJlc3VsdHMgbG9vayBncmVhdCwgc28gSSdkIHNheSB0aGUKLSAqICAgZHJpdmVyIGlzIHdvcmtpbmcgZmluZSA6LSkKLSAqICAgaGRwYXJtIC10IHJlcG9ydHMgOC4xNyBNQi9zZWMgYXQgYWJvdXQgNiUgQ1BVIHVzYWdlIGZvciB0aGUgRFRUQQotICogLSB0aGlzIGlzIG15IGZpcnN0IGxpbnV4IGRyaXZlciwgc28gdGhlcmUncyBwcm9iYWJseSBhIGxvdCAgb2Ygcm9vbQotICogICBmb3Igb3B0aW1pemF0aW9ucyBhbmQgYnVnIGZpeGluZywgc28gZmVlbCBmcmVlIHRvIGRvIGl0LgotICogLSBpZiB1c2luZyBQSU8gbW9kZSBpdCdzIGEgZ29vZCBpZGVhIHRvIHNldCB0aGUgUElPIG1vZGUgYW5kCi0gKiAgIDMyLWJpdCBJL08gc3VwcG9ydCAoaWYgcG9zc2libGUpLCBlLmcuIGhkcGFybSAtcDIgLWMxIC9kZXYvaGRhCi0gKiAtIEkgaGFkIHNvbWUgcHJvYmxlbXMgd2l0aCBteSBJQk0gREhFQSB3aXRoIFBJTyBtb2RlcyA8IDIKLSAqICAgKGxvc3QgaW50ZXJydXB0cykgPz8/Pz8KLSAqIC0gZmlyc3QgdGVzdHMgd2l0aCBETUEgbG9vayBva2F5LCB0aGV5IHNlZW0gdG8gd29yaywgYnV0IHRoZXJlIGlzIGEKLSAqICAgcHJvYmxlbSB3aXRoIHNvdW5kIC0gdGhlIEJ1c01hc3RlciBJREUgVGltZU91dCBzaG91bGQgZml4ZWQgdGhpcwotICoKLSAqIEFuY2llbnQgSGlzdG9yeToKLSAqIEFNSEAxOTk5LTA4LTI0OiB2MC4zNCBpbml0X2N5ODJjNjkzX2NoaXAgbW92ZWQgdG8gcGNpX2luaXRfY3k4MmM2OTMKLSAqIEFTS0AxOTk5LTAxLTIzOiB2MC4zMyBtYWRlIGEgZmV3IG1pbm9yIGNvZGUgY2xlYW4gdXBzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZCBETUEgY2xvY2sgc3BlZWQgc2V0dGluZyBieSBkZWZhdWx0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgYWRkZWQgYm9vdCBtZXNzYWdlCi0gKiBBU0tAMTk5OC0xMS0wMTogdjAuMzIgYWRkZWQgc3VwcG9ydCB0byBzZXQgQnVzTWFzdGVyIElERSBUaW1lT3V0Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgYWRkZWQgc3VwcG9ydCB0byBzZXQgRE1BIENvbnRyb2xsZXIgQ2xvY2sgU3BlZWQKLSAqIEFTS0AxOTk4LTEwLTMxOiB2MC4zMSBmaXhlZCBwcm9ibGVtIHdpdGggc2V0dGluZyB0byBoaWdoIERNQSBtb2RlcwotICogICAgICAgICAgICAgICAgICAgICAgIG9uIHNvbWUgZHJpdmVzLgotICogQVNLQDE5OTgtMTAtMjk6IHYwLjMgYWRkZWQgc3VwcG9ydCB0byBzZXQgRE1BIG1vZGVzCi0gKiBBU0tAMTk5OC0xMC0yODogdjAuMiBhZGRlZCBzdXBwb3J0IHRvIHNldCBQSU8gbW9kZXMKLSAqIEFTS0AxOTk4LTEwLTI3OiB2MC4xIGZpcnN0IHZlcnNpb24gLSBjaGlwc2V0IGRldGVjdGlvbgotICoKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC04MSw4NyArNDksMTMgQEAKICNkZWZpbmUgQ1k4Ml9JTkRFWF9DSEFOTkVMMQkweDMxCiAjZGVmaW5lIENZODJfSU5ERVhfVElNRU9VVAkweDMyCiAKLS8qIHRoZSBtaW4gYW5kIG1heCBQQ0kgYnVzIHNwZWVkIGluIE1IeiAtIGZyb20gZGF0YXNoZWV0ICovCi0jZGVmaW5lIENZODJDOTYzX01JTl9CVVNfU1BFRUQJMjUKLSNkZWZpbmUgQ1k4MkM5NjNfTUFYX0JVU19TUEVFRAkzMwotCi0vKiB0aGUgc3RydWN0IGZvciB0aGUgUElPIG1vZGUgdGltaW5ncyAqLwotdHlwZWRlZiBzdHJ1Y3QgcGlvX2Nsb2Nrc19zIHsKLQl1OAlhZGRyZXNzX3RpbWU7CS8qIEFkZHJlc3Mgc2V0dXAgKGNsb2NrcykgKi8KLQl1OAl0aW1lXzE2cjsJLyogY2xvY2tzIGZvciAxNmJpdCBJT1IgKDB4RjA9QWN0aXZlL2RhdGEsIDB4MEY9UmVjb3ZlcnkpICovCi0JdTgJdGltZV8xNnc7CS8qIGNsb2NrcyBmb3IgMTZiaXQgSU9XICgweEYwPUFjdGl2ZS9kYXRhLCAweDBGPVJlY292ZXJ5KSAqLwotCXU4CXRpbWVfODsJCS8qIGNsb2NrcyBmb3IgOGJpdCAoMHhGMD1BY3RpdmUvZGF0YSwgMHgwRj1SZWNvdmVyeSkgKi8KLX0gcGlvX2Nsb2Nrc190OwotCi0vKgotICogY2FsYyBjbG9ja3MgdXNpbmcgYnVzX3NwZWVkCi0gKiByZXR1cm5zIChyb3VuZGVkIHVwKSB0aW1lIGluIGJ1cyBjbG9ja3MgZm9yIHRpbWUgaW4gbnMKLSAqLwotc3RhdGljIGludCBjYWxjX2NsayhpbnQgdGltZSwgaW50IGJ1c19zcGVlZCkKLXsKLQlpbnQgY2xvY2tzOwotCi0JY2xvY2tzID0gKHRpbWUqYnVzX3NwZWVkKzk5OSkvMTAwMCAtIDE7Ci0KLQlpZiAoY2xvY2tzIDwgMCkKLQkJY2xvY2tzID0gMDsKLQotCWlmIChjbG9ja3MgPiAweDBGKQotCQljbG9ja3MgPSAweDBGOwotCi0JcmV0dXJuIGNsb2NrczsKLX0KLQotLyoKLSAqIGNvbXB1dGUgdGhlIHZhbHVlcyBmb3IgdGhlIGNsb2NrIHJlZ2lzdGVycyBmb3IgUElPCi0gKiBtb2RlIGFuZCBwY2lfY2xrIFtNSHpdIHNwZWVkCi0gKgotICogTk9URTogZm9yIG1vZGUgMCwxIGFuZCAyIGRyaXZlcyA4LWJpdCBJREUgY29tbWFuZCBjb250cm9sIHJlZ2lzdGVycyBhcmUgdXNlZAotICogICAgICAgZm9yIG1vZGUgMyBhbmQgNCBkcml2ZXMgOCBhbmQgMTYtYml0IHRpbWluZ3MgYXJlIHRoZSBzYW1lCi0gKgotICovCi1zdGF0aWMgdm9pZCBjb21wdXRlX2Nsb2Nrcyh1OCBwaW8sIHBpb19jbG9ja3NfdCAqcF9wY2xrKQotewotCXN0cnVjdCBpZGVfdGltaW5nICp0ID0gaWRlX3RpbWluZ19maW5kX21vZGUoWEZFUl9QSU9fMCArIHBpbyk7Ci0JaW50IGNsazEsIGNsazI7Ci0JaW50IGJ1c19zcGVlZCA9IGlkZV9wY2lfY2xrID8gaWRlX3BjaV9jbGsgOiAzMzsKLQotCS8qIHdlIGRvbid0IGNoZWNrIGFnYWluc3QgQ1k4MkM2OTMncyBtaW4gYW5kIG1heCBzcGVlZCwKLQkgKiBzbyB5b3UgY2FuIHBsYXkgd2l0aCB0aGUgaWRlYnVzPXh4IHBhcmFtZXRlcgotCSAqLwotCi0JLyogbGV0J3MgY2FsYyB0aGUgYWRkcmVzcyBzZXR1cCB0aW1lIGNsb2NrcyAqLwotCXBfcGNsay0+YWRkcmVzc190aW1lID0gKHU4KWNhbGNfY2xrKHQtPnNldHVwLCBidXNfc3BlZWQpOwotCi0JLyogbGV0J3MgY2FsYyB0aGUgYWN0aXZlIGFuZCByZWNvdmVyeSB0aW1lIGNsb2NrcyAqLwotCWNsazEgPSBjYWxjX2Nsayh0LT5hY3RpdmUsIGJ1c19zcGVlZCk7Ci0KLQkvKiBjYWxjIHJlY292ZXJ5IHRpbWluZyAqLwotCWNsazIgPSB0LT5jeWNsZSAtIHQtPmFjdGl2ZSAtIHQtPnNldHVwOwotCi0JY2xrMiA9IGNhbGNfY2xrKGNsazIsIGJ1c19zcGVlZCk7Ci0KLQljbGsxID0gKGNsazE8PDQpfGNsazI7CS8qIGNvbWJpbmUgYWN0aXZlIGFuZCByZWNvdmVyeSBjbG9ja3MgKi8KLQotCS8qIG5vdGU6IHdlIHVzZSB0aGUgc2FtZSB2YWx1ZXMgZm9yIDE2Yml0IElPUiBhbmQgSU9XCi0JICoJdGhvc2UgYXJlIGFsbCB0aGUgc2FtZSwgc2luY2UgSSBkb24ndCBoYXZlIG90aGVyCi0JICoJdGltaW5ncyB0aGFuIHRob3NlIGZyb20gaWRlLWxpYi5jCi0JICovCi0KLQlwX3BjbGstPnRpbWVfMTZyID0gKHU4KWNsazE7Ci0JcF9wY2xrLT50aW1lXzE2dyA9ICh1OCljbGsxOwotCi0JLyogd2hhdCBhcmUgZ29vZCB2YWx1ZXMgZm9yIDhiaXQgPz8gKi8KLQlwX3BjbGstPnRpbWVfOCA9ICh1OCljbGsxOwotfQotCiAvKgogICogc2V0IERNQSBtb2RlIGEgc3BlY2lmaWMgY2hhbm5lbCBmb3IgQ1k4MkM2OTMKICAqLwogCi1zdGF0aWMgdm9pZCBjeTgyYzY5M19zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBtb2RlKQorc3RhdGljIHZvaWQgY3k4MmM2OTNfc2V0X2RtYV9tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJY29uc3QgdTggbW9kZSA9IGRyaXZlLT5kbWFfbW9kZTsKIAl1OCBzaW5nbGUgPSAobW9kZSAmIDB4MTApID4+IDQsIGluZGV4ID0gMCwgZGF0YSA9IDA7CiAKIAlpbmRleCA9IGh3aWYtPmNoYW5uZWwgPyBDWTgyX0lOREVYX0NIQU5ORUwxIDogQ1k4Ml9JTkRFWF9DSEFOTkVMMDsKQEAgLTE4NiwxMiArODAsMTQgQEAKIAlvdXRiKGRhdGEsIENZODJfREFUQV9QT1JUKTsKIH0KIAotc3RhdGljIHZvaWQgY3k4MmM2OTNfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggcGlvKQorc3RhdGljIHZvaWQgY3k4MmM2OTNfc2V0X3Bpb19tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKLQlwaW9fY2xvY2tzX3QgcGNsazsKKwlpbnQgYnVzX3NwZWVkID0gaWRlX3BjaV9jbGsgPyBpZGVfcGNpX2NsayA6IDMzOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgVCA9IDEwMDAwMDAgLyBidXNfc3BlZWQ7CiAJdW5zaWduZWQgaW50IGFkZHJDdHJsOworCXN0cnVjdCBpZGVfdGltaW5nIHQ7CisJdTggdGltZV8xNiwgdGltZV84OwogCiAJLyogc2VsZWN0IHByaW1hcnkgb3Igc2Vjb25kYXJ5IGNoYW5uZWwgKi8KIAlpZiAoaHdpZi0+aW5kZXggPiAwKSB7ICAvKiBkcml2ZSBpcyBvbiB0aGUgc2Vjb25kYXJ5IGNoYW5uZWwgKi8KQEAgLTIwNCw4ICsxMDAsMTIgQEAKIAkJfQogCX0KIAotCS8qIGxldCdzIGNhbGMgdGhlIHZhbHVlcyBmb3IgdGhpcyBQSU8gbW9kZSAqLwotCWNvbXB1dGVfY2xvY2tzKHBpbywgJnBjbGspOworCWlkZV90aW1pbmdfY29tcHV0ZShkcml2ZSwgZHJpdmUtPnBpb19tb2RlLCAmdCwgVCwgMSk7CisKKwl0aW1lXzE2ID0gY2xhbXBfdmFsKHQucmVjb3ZlciAtIDEsIDAsIDE1KSB8CisJCSAgKGNsYW1wX3ZhbCh0LmFjdGl2ZSAtIDEsIDAsIDE1KSA8PCA0KTsKKwl0aW1lXzggPSBjbGFtcF92YWwodC5hY3Q4YiAtIDEsIDAsIDE1KSB8CisJCSAoY2xhbXBfdmFsKHQucmVjOGIgLSAxLCAwLCAxNSkgPDwgNCk7CiAKIAkvKiBub3cgbGV0J3Mgd3JpdGUgIHRoZSBjbG9ja3MgcmVnaXN0ZXJzICovCiAJaWYgKChkcml2ZS0+ZG4gJiAxKSA9PSAwKSB7CkBAIC0yMTcsMTMgKzExNywxMyBAQAogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBDWTgyX0lERV9BRERSU0VUVVAsICZhZGRyQ3RybCk7CiAKIAkJYWRkckN0cmwgJj0gKH4weEYpOwotCQlhZGRyQ3RybCB8PSAodW5zaWduZWQgaW50KXBjbGsuYWRkcmVzc190aW1lOworCQlhZGRyQ3RybCB8PSBjbGFtcF92YWwodC5zZXR1cCAtIDEsIDAsIDE1KTsKIAkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIENZODJfSURFX0FERFJTRVRVUCwgYWRkckN0cmwpOwogCiAJCS8qIG5vdyBsZXQncyBzZXQgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMgKi8KLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgQ1k4Ml9JREVfTUFTVEVSX0lPUiwgcGNsay50aW1lXzE2cik7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIENZODJfSURFX01BU1RFUl9JT1csIHBjbGsudGltZV8xNncpOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBDWTgyX0lERV9NQVNURVJfOEJJVCwgcGNsay50aW1lXzgpOworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBDWTgyX0lERV9NQVNURVJfSU9SLCB0aW1lXzE2KTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgQ1k4Ml9JREVfTUFTVEVSX0lPVywgdGltZV8xNik7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIENZODJfSURFX01BU1RFUl84QklULCB0aW1lXzgpOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIHNldCBzbGF2ZSBkcml2ZQpAQCAtMjMzLDEzICsxMzMsMTMgQEAKIAkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgQ1k4Ml9JREVfQUREUlNFVFVQLCAmYWRkckN0cmwpOwogCiAJCWFkZHJDdHJsICY9ICh+MHhGMCk7Ci0JCWFkZHJDdHJsIHw9ICgodW5zaWduZWQgaW50KXBjbGsuYWRkcmVzc190aW1lPDw0KTsKKwkJYWRkckN0cmwgfD0gKGNsYW1wX3ZhbCh0LnNldHVwIC0gMSwgMCwgMTUpIDw8IDQpOwogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgQ1k4Ml9JREVfQUREUlNFVFVQLCBhZGRyQ3RybCk7CiAKIAkJLyogbm93IGxldCdzIHNldCB0aGUgcmVtYWluaW5nIHJlZ2lzdGVycyAqLwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBDWTgyX0lERV9TTEFWRV9JT1IsIHBjbGsudGltZV8xNnIpOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBDWTgyX0lERV9TTEFWRV9JT1csIHBjbGsudGltZV8xNncpOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBDWTgyX0lERV9TTEFWRV84QklULCBwY2xrLnRpbWVfOCk7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIENZODJfSURFX1NMQVZFX0lPUiwgdGltZV8xNik7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIENZODJfSURFX1NMQVZFX0lPVywgdGltZV8xNik7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIENZODJfSURFX1NMQVZFXzhCSVQsIHRpbWVfOCk7CiAJfQogfQogCkBAIC0zMjUsNiArMjI1LDYgQEAKIG1vZHVsZV9pbml0KGN5ODJjNjkzX2lkZV9pbml0KTsKIG1vZHVsZV9leGl0KGN5ODJjNjkzX2lkZV9leGl0KTsKIAotTU9EVUxFX0FVVEhPUigiQW5kcmVhcyBLcmVicywgQW5kcmUgSGVkcmljayIpOworTU9EVUxFX0FVVEhPUigiQW5kcmVhcyBLcmVicywgQW5kcmUgSGVkcmljaywgQmFydGxvbWllaiBab2xuaWVya2lld2ljeiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ0kgZHJpdmVyIG1vZHVsZSBmb3IgdGhlIEN5cHJlc3MgQ1k4MkM2OTMgSURFIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9kdGMyMjc4LmMgYi9kcml2ZXJzL2lkZS9kdGMyMjc4LmMKaW5kZXggYzZiMTM4MS4uNjkyOWY3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvZHRjMjI3OC5jCisrKyBiL2RyaXZlcnMvaWRlL2R0YzIyNzguYwpAQCAtNjgsMTEgKzY4LDExIEBACiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soZHRjMjI3OF9sb2NrKTsKIAotc3RhdGljIHZvaWQgZHRjMjI3OF9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCitzdGF0aWMgdm9pZCBkdGMyMjc4X3NldF9waW9fbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChwaW8gPj0gMykgeworCWlmIChkcml2ZS0+cGlvX21vZGUgPj0gWEZFUl9QSU9fMykgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmZHRjMjI3OF9sb2NrLCBmbGFncyk7CiAJCS8qCiAJCSAqIFRoaXMgZW5hYmxlcyBQSU8gbW9kZTQgKDM/KSBvbiB0aGUgZmlyc3QgaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9ocHQzNjYuYyBiL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCmluZGV4IDRkOTBhYzIuLmI4ODVjMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCisrKyBiL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCkBAIC02MjcsMTQgKzYyNywxNCBAQAogCXJldHVybiBpbmZvLT50aW1pbmdzLT5jbG9ja190YWJsZVtpbmZvLT5jbG9ja11baV07CiB9CiAKLXN0YXRpYyB2b2lkIGhwdDN4eF9zZXRfbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHNwZWVkKQorc3RhdGljIHZvaWQgaHB0M3h4X3NldF9tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmCT0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHBjaV9kZXYgKmRldgk9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKIAlzdHJ1Y3QgaHB0X2luZm8gKmluZm8JPSBocHQzeHhfZ2V0X2luZm8oaHdpZi0+ZGV2KTsKIAlzdHJ1Y3QgaHB0X3RpbWluZ3MgKnQJPSBpbmZvLT50aW1pbmdzOwogCXU4ICBpdHJfYWRkcgkJPSAweDQwICsgKGRyaXZlLT5kbiAqIDQpOwogCXUzMiBvbGRfaXRyCQk9IDA7CisJY29uc3QgdTggc3BlZWQJCT0gZHJpdmUtPmRtYV9tb2RlOwogCXUzMiBuZXdfaXRyCQk9IGdldF9zcGVlZF9zZXR0aW5nKHNwZWVkLCBpbmZvKTsKIAl1MzIgaXRyX21hc2sJCT0gc3BlZWQgPCBYRkVSX01XX0RNQV8wID8gdC0+cGlvX21hc2sgOgogCQkJCSAoc3BlZWQgPCBYRkVSX1VETUFfMCAgID8gdC0+ZG1hX21hc2sgOgpAQCAtNjUxLDkgKzY1MSwxMCBAQAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBpdHJfYWRkciwgbmV3X2l0cik7CiB9CiAKLXN0YXRpYyB2b2lkIGhwdDN4eF9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCitzdGF0aWMgdm9pZCBocHQzeHhfc2V0X3Bpb19tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlocHQzeHhfc2V0X21vZGUoZHJpdmUsIFhGRVJfUElPXzAgKyBwaW8pOworCWRyaXZlLT5kbWFfbW9kZSA9IGRyaXZlLT5waW9fbW9kZTsKKwlocHQzeHhfc2V0X21vZGUoaHdpZiwgZHJpdmUpOwogfQogCiBzdGF0aWMgdm9pZCBocHQzeHhfbWFza3Byb2MoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgbWFzaykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2h0NjU2MGIuYyBiL2RyaXZlcnMvaWRlL2h0NjU2MGIuYwppbmRleCBhYWZlZDgwLi5kODFlNDk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9odDY1NjBiLmMKKysrIGIvZHJpdmVycy9pZGUvaHQ2NTYwYi5jCkBAIC0yNzksOSArMjc5LDEwIEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgaHQ2NTYwYl9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCitzdGF0aWMgdm9pZCBodDY1NjBiX3NldF9waW9fbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgY29uZmlnOworCWNvbnN0IHU4IHBpbyA9IGRyaXZlLT5waW9fbW9kZSAtIFhGRVJfUElPXzA7CiAJdTggdGltaW5nOwogCQogCXN3aXRjaCAocGlvKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pY3NpZGUuYyBiL2RyaXZlcnMvaWRlL2ljc2lkZS5jCmluZGV4IDBmNjdmMWEuLjRhNjk3YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2ljc2lkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2ljc2lkZS5jCkBAIC02NSw2ICs2NSw4IEBACiB9OwogCiBzdHJ1Y3QgaWNzaWRlX3N0YXRlIHsKKwl1bnNpZ25lZCBpbnQgY2hhbm5lbDsKKwl1bnNpZ25lZCBpbnQgZW5hYmxlZDsKIAl2b2lkIF9faW9tZW0gKmlycV9wb3J0OwogCXZvaWQgX19pb21lbSAqaW9jX2Jhc2U7CiAJdW5zaWduZWQgaW50IHNlbDsKQEAgLTExNCwxMSArMTE2LDE4IEBACiAJc3RydWN0IGljc2lkZV9zdGF0ZSAqc3RhdGUgPSBlYy0+aXJxX2RhdGE7CiAJdm9pZCBfX2lvbWVtICpiYXNlID0gc3RhdGUtPmlycV9wb3J0OwogCi0Jd3JpdGViKDAsIGJhc2UgKyBJQ1NfQVJDSU5fVjZfSU5UUk9GRlNFVF8xKTsKLQlyZWFkYihiYXNlICsgSUNTX0FSQ0lOX1Y2X0lOVFJPRkZTRVRfMik7CisJc3RhdGUtPmVuYWJsZWQgPSAxOwogCi0Jd3JpdGViKDAsIGJhc2UgKyBJQ1NfQVJDSU5fVjZfSU5UUk9GRlNFVF8yKTsKLQlyZWFkYihiYXNlICsgSUNTX0FSQ0lOX1Y2X0lOVFJPRkZTRVRfMSk7CisJc3dpdGNoIChzdGF0ZS0+Y2hhbm5lbCkgeworCWNhc2UgMDoKKwkJd3JpdGViKDAsIGJhc2UgKyBJQ1NfQVJDSU5fVjZfSU5UUk9GRlNFVF8xKTsKKwkJcmVhZGIoYmFzZSArIElDU19BUkNJTl9WNl9JTlRST0ZGU0VUXzIpOworCQlicmVhazsKKwljYXNlIDE6CisJCXdyaXRlYigwLCBiYXNlICsgSUNTX0FSQ0lOX1Y2X0lOVFJPRkZTRVRfMik7CisJCXJlYWRiKGJhc2UgKyBJQ1NfQVJDSU5fVjZfSU5UUk9GRlNFVF8xKTsKKwkJYnJlYWs7CisJfQogfQogCiAvKiBQcm90b3R5cGU6IGljc2lkZV9pcnFkaXNhYmxlX2FyY2luX3Y2IChzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjLCBpbnQgaXJxbnIpCkBAIC0xMjgsNiArMTM3LDggQEAKIHsKIAlzdHJ1Y3QgaWNzaWRlX3N0YXRlICpzdGF0ZSA9IGVjLT5pcnFfZGF0YTsKIAorCXN0YXRlLT5lbmFibGVkID0gMDsKKwogCXJlYWRiKHN0YXRlLT5pcnFfcG9ydCArIElDU19BUkNJTl9WNl9JTlRST0ZGU0VUXzEpOwogCXJlYWRiKHN0YXRlLT5pcnFfcG9ydCArIElDU19BUkNJTl9WNl9JTlRST0ZGU0VUXzIpOwogfQpAQCAtMTQ5LDYgKzE2MCw0NCBAQAogCS5pcnFwZW5kaW5nCT0gaWNzaWRlX2lycXBlbmRpbmdfYXJjaW5fdjYsCiB9OwogCisvKgorICogSGFuZGxlIHJvdXRpbmcgb2YgaW50ZXJydXB0cy4gIFRoaXMgaXMgY2FsbGVkIGJlZm9yZQorICogd2Ugd3JpdGUgdGhlIGNvbW1hbmQgdG8gdGhlIGRyaXZlLgorICovCitzdGF0aWMgdm9pZCBpY3NpZGVfbWFza3Byb2MoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgbWFzaykKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IGV4cGFuc2lvbl9jYXJkICplYyA9IEVDQVJEX0RFVihod2lmLT5kZXYpOworCXN0cnVjdCBpY3NpZGVfc3RhdGUgKnN0YXRlID0gZWNhcmRfZ2V0X2RydmRhdGEoZWMpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlzdGF0ZS0+Y2hhbm5lbCA9IGh3aWYtPmNoYW5uZWw7CisKKwlpZiAoc3RhdGUtPmVuYWJsZWQgJiYgIW1hc2spIHsKKwkJc3dpdGNoIChod2lmLT5jaGFubmVsKSB7CisJCWNhc2UgMDoKKwkJCXdyaXRlYigwLCBzdGF0ZS0+aXJxX3BvcnQgKyBJQ1NfQVJDSU5fVjZfSU5UUk9GRlNFVF8xKTsKKwkJCXJlYWRiKHN0YXRlLT5pcnFfcG9ydCArIElDU19BUkNJTl9WNl9JTlRST0ZGU0VUXzIpOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCXdyaXRlYigwLCBzdGF0ZS0+aXJxX3BvcnQgKyBJQ1NfQVJDSU5fVjZfSU5UUk9GRlNFVF8yKTsKKwkJCXJlYWRiKHN0YXRlLT5pcnFfcG9ydCArIElDU19BUkNJTl9WNl9JTlRST0ZGU0VUXzEpOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlyZWFkYihzdGF0ZS0+aXJxX3BvcnQgKyBJQ1NfQVJDSU5fVjZfSU5UUk9GRlNFVF8yKTsKKwkJcmVhZGIoc3RhdGUtPmlycV9wb3J0ICsgSUNTX0FSQ0lOX1Y2X0lOVFJPRkZTRVRfMSk7CisJfQorCisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBpY3NpZGVfdjZfbm9fZG1hX3BvcnRfb3BzID0geworCS5tYXNrcHJvYwkJPSBpY3NpZGVfbWFza3Byb2MsCit9OworCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BX0lDUwogLyoKICAqIFNHLURNQSBzdXBwb3J0LgpAQCAtMTg1LDEwICsyMzQsMTEgQEAKICAqCU1XMQk4MAk1MAk1MAkxNTAJQwogICoJTVcyCTcwCTI1CTI1CTEyMAlDCiAgKi8KLXN0YXRpYyB2b2lkIGljc2lkZV9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCB4ZmVyX21vZGUpCitzdGF0aWMgdm9pZCBpY3NpZGVfc2V0X2RtYV9tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGN5Y2xlX3RpbWU7CiAJaW50IHVzZV9kbWFfaW5mbyA9IDA7CisJY29uc3QgdTggeGZlcl9tb2RlID0gZHJpdmUtPmRtYV9tb2RlOwogCiAJc3dpdGNoICh4ZmVyX21vZGUpIHsKIAljYXNlIFhGRVJfTVdfRE1BXzI6CkBAIC0yMjgsNiArMjc4LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgaWNzaWRlX3Y2X3BvcnRfb3BzID0gewogCS5zZXRfZG1hX21vZGUJCT0gaWNzaWRlX3NldF9kbWFfbW9kZSwKKwkubWFza3Byb2MJCT0gaWNzaWRlX21hc2twcm9jLAogfTsKIAogc3RhdGljIHZvaWQgaWNzaWRlX2RtYV9ob3N0X3NldChpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBvbikKQEAgLTI3Miw2ICszMjMsMTEgQEAKIAlCVUdfT04oZG1hX2NoYW5uZWxfYWN0aXZlKGVjLT5kbWEpKTsKIAogCS8qCisJICogRW5zdXJlIHRoYXQgd2UgaGF2ZSB0aGUgcmlnaHQgaW50ZXJydXB0IHJvdXRlZC4KKwkgKi8KKwlpY3NpZGVfbWFza3Byb2MoZHJpdmUsIDApOworCisJLyoKIAkgKiBSb3V0ZSB0aGUgRE1BIHNpZ25hbHMgdG8gdGhlIGNvcnJlY3QgaW50ZXJmYWNlLgogCSAqLwogCXdyaXRlYihzdGF0ZS0+c2VsIHwgaHdpZi0+Y2hhbm5lbCwgc3RhdGUtPmlvY19iYXNlKTsKQEAgLTM5OSw2ICs0NTUsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gaWNzaWRlX3Y2X3BvcnRfaW5mbyBfX2luaXRkYXRhID0gewogCS5pbml0X2RtYQkJPSBpY3NpZGVfZG1hX29mZl9pbml0LAorCS5wb3J0X29wcwkJPSAmaWNzaWRlX3Y2X25vX2RtYV9wb3J0X29wcywKIAkuZG1hX29wcwkJPSAmaWNzaWRlX3Y2X2RtYV9vcHMsCiAJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX1NFUklBTElaRSB8IElERV9IRkxBR19NTUlPLAogCS5td2RtYV9tYXNrCQk9IEFUQV9NV0RNQTIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtY3MuYyBiL2RyaXZlcnMvaWRlL2lkZS1jcy5jCmluZGV4IGRkNjM5NjMuLmFiODdlNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1jcy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1jcy5jCkBAIC0xMjEsMTkgKzEyMSwxMSBAQAogc3RhdGljIHZvaWQgaWRlX2RldGFjaChzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluaykKIHsKICAgICBpZGVfaW5mb190ICppbmZvID0gbGluay0+cHJpdjsKLSAgICBpZGVfaHdpZl90ICpod2lmID0gaW5mby0+aG9zdC0+cG9ydHNbMF07Ci0gICAgdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIsIGN0bF9hZGRyOwogCiAgICAgZGV2X2RiZygmbGluay0+ZGV2LCAiaWRlX2RldGFjaCgweCVwKVxuIiwgbGluayk7CiAKLSAgICBkYXRhX2FkZHIgPSBod2lmLT5pb19wb3J0cy5kYXRhX2FkZHI7Ci0gICAgY3RsX2FkZHIgID0gaHdpZi0+aW9fcG9ydHMuY3RsX2FkZHI7Ci0KICAgICBpZGVfcmVsZWFzZShsaW5rKTsKIAotICAgIHJlbGVhc2VfcmVnaW9uKGN0bF9hZGRyLCAxKTsKLSAgICByZWxlYXNlX3JlZ2lvbihkYXRhX2FkZHIsIDgpOwotCiAgICAga2ZyZWUoaW5mbyk7CiB9IC8qIGlkZV9kZXRhY2ggKi8KIApAQCAtMzU0LDEyICszNDYsMTkgQEAKIAogICAgIGRldl9kYmcoJmxpbmstPmRldiwgImlkZV9yZWxlYXNlKDB4JXApXG4iLCBsaW5rKTsKIAotICAgIGlmIChpbmZvLT5uZGV2KQotCS8qIEZJWE1FOiBpZiB0aGlzIGZhaWxzIHdlIG5lZWQgdG8gcXVldWUgdGhlIGNsZWFudXAgc29tZWhvdwotCSAgIC0tIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIHJlcXVpcmVkIFBDTUNJQSBtYWdpYyAqLwotCWlkZV9ob3N0X3JlbW92ZShob3N0KTsKKyAgICBpZiAoaW5mby0+bmRldikgeworCWlkZV9od2lmX3QgKmh3aWYgPSBob3N0LT5wb3J0c1swXTsKKwl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciwgY3RsX2FkZHI7CiAKLSAgICBpbmZvLT5uZGV2ID0gMDsKKwlkYXRhX2FkZHIgPSBod2lmLT5pb19wb3J0cy5kYXRhX2FkZHI7CisJY3RsX2FkZHIgPSBod2lmLT5pb19wb3J0cy5jdGxfYWRkcjsKKworCWlkZV9ob3N0X3JlbW92ZShob3N0KTsKKwlpbmZvLT5uZGV2ID0gMDsKKworCXJlbGVhc2VfcmVnaW9uKGN0bF9hZGRyLCAxKTsKKwlyZWxlYXNlX3JlZ2lvbihkYXRhX2FkZHIsIDgpOworICAgIH0KIAogICAgIHBjbWNpYV9kaXNhYmxlX2RldmljZShsaW5rKTsKIH0gLyogaWRlX3JlbGVhc2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kZXZzZXRzLmMgYi9kcml2ZXJzL2lkZS9pZGUtZGV2c2V0cy5jCmluZGV4IDEwOTliZjcuLmM2OTM1YzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kZXZzZXRzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRldnNldHMuYwpAQCAtMTA1LDE1ICsxMDUsMTcgQEAKIAkJcmV0dXJuIC1FTk9TWVM7CiAKIAlpZiAoc2V0X3Bpb19tb2RlX2FidXNlKGRyaXZlLT5od2lmLCBhcmcpKSB7CisJCWRyaXZlLT5waW9fbW9kZSA9IGFyZyArIFhGRVJfUElPXzA7CisKIAkJaWYgKGFyZyA9PSA4IHx8IGFyZyA9PSA5KSB7CiAJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJCQkvKiB0YWtlIGxvY2sgZm9yIElERV9ERkxBR19bTk9fXVVOTUFTSy9bTk9fXUlPXzMyQklUICovCiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwotCQkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShkcml2ZSwgYXJnKTsKKwkJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoaHdpZiwgZHJpdmUpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwogCQl9IGVsc2UKLQkJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIGFyZyk7CisJCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGh3aWYsIGRyaXZlKTsKIAl9IGVsc2UgewogCQlpbnQga2VlcF9kbWEgPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCmluZGV4IDIyMmMxZWYuLjM3NmYyZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWlvcHMuYwpAQCAtMjMxLDcgKzIzMSw3IEBACiAJdTE2ICppZCA9IGRyaXZlLT5pZDsKIAlpbnQgaXZiID0gaWRlX2luX2RyaXZlX2xpc3QoaWQsIGl2Yl9saXN0KTsKIAotCWlmIChod2lmLT5jYmwgPT0gQVRBX0NCTF9QQVRBNDBfU0hPUlQpCisJaWYgKGh3aWYtPmNibCA9PSBBVEFfQ0JMX1NBVEEgfHwgaHdpZi0+Y2JsID09IEFUQV9DQkxfUEFUQTQwX1NIT1JUKQogCQlyZXR1cm4gMTsKIAogCWlmIChpdmIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYmUuYyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCmluZGV4IGY4YzFhZTYuLmZiZWRkMzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jCkBAIC0xMDQyLDYgKzEwNDIsOCBAQAogCQlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19VTk1BU0tfSVJRUykKIAkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX05PX1VOTUFTSzsKIAorCQlkcml2ZS0+cGlvX21vZGUgPSBYRkVSX1BJT18wOworCiAJCWlmIChwb3J0X29wcyAmJiBwb3J0X29wcy0+aW5pdF9kZXYpCiAJCQlwb3J0X29wcy0+aW5pdF9kZXYoZHJpdmUpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMgYi9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCmluZGV4IDZhMGU2MjUuLmIwNzIzMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwpAQCAtMTM2NSw3ICsxMzY1LDcgQEAKICAqIHN1cHBvcnRlZCBoZXJlLCBhbmQgbm90IGluIHRoZSBjb3JyZXNwb25kaW5nIGJsb2NrIGludGVyZmFjZS4gT3VyIG93bgogICogaWRlLXRhcGUgaW9jdGxzIGFyZSBzdXBwb3J0ZWQgb24gYm90aCBpbnRlcmZhY2VzLgogICovCi1zdGF0aWMgaW50IGlkZXRhcGVfY2hyZGV2X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorc3RhdGljIGxvbmcgZG9faWRldGFwZV9jaHJkZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGlkZV90YXBlX29iaiAqdGFwZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKQEAgLTE0MjAsNiArMTQyMCwxNiBAQAogCX0KIH0KIAorc3RhdGljIGxvbmcgaWRldGFwZV9jaHJkZXZfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJbG9uZyByZXQ7CisJbG9ja19rZXJuZWwoKTsKKwlyZXQgPSBkb19pZGV0YXBlX2NocmRldl9pb2N0bChmaWxlLCBjbWQsIGFyZyk7CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7Cit9CisKIC8qCiAgKiBEbyBhIG1vZGUgc2Vuc2UgcGFnZSAwIHdpdGggYmxvY2sgZGVzY3JpcHRvciBhbmQgaWYgaXQgc3VjY2VlZHMgc2V0IHRoZSB0YXBlCiAgKiBibG9jayBzaXplIHdpdGggdGhlIHJlcG9ydGVkIHZhbHVlLgpAQCAtMTg4OCw3ICsxODk4LDcgQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnJlYWQJCT0gaWRldGFwZV9jaHJkZXZfcmVhZCwKIAkud3JpdGUJCT0gaWRldGFwZV9jaHJkZXZfd3JpdGUsCi0JLmlvY3RsCQk9IGlkZXRhcGVfY2hyZGV2X2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bAk9IGlkZXRhcGVfY2hyZGV2X2lvY3RsLAogCS5vcGVuCQk9IGlkZXRhcGVfY2hyZGV2X29wZW4sCiAJLnJlbGVhc2UJPSBpZGV0YXBlX2NocmRldl9yZWxlYXNlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10aW1pbmdzLmMgYi9kcml2ZXJzL2lkZS9pZGUtdGltaW5ncy5jCmluZGV4IDAwMWE1NjMuLjBlMDVmNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10aW1pbmdzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRpbWluZ3MuYwpAQCAtMTY2LDEyICsxNjYsMTMgQEAKIAlpZiAoaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmIDIpIHsJLyogRUlERSBkcml2ZSAqLwogCQltZW1zZXQoJnAsIDAsIHNpemVvZihwKSk7CiAKLQkJaWYgKHNwZWVkIDw9IFhGRVJfUElPXzIpCi0JCQlwLmN5Y2xlID0gcC5jeWM4YiA9IGlkW0FUQV9JRF9FSURFX1BJT107Ci0JCWVsc2UgaWYgKChzcGVlZCA8PSBYRkVSX1BJT180KSB8fAotCQkJIChzcGVlZCA9PSBYRkVSX1BJT181ICYmICFhdGFfaWRfaXNfY2ZhKGlkKSkpCi0JCQlwLmN5Y2xlID0gcC5jeWM4YiA9IGlkW0FUQV9JRF9FSURFX1BJT19JT1JEWV07Ci0JCWVsc2UgaWYgKHNwZWVkID49IFhGRVJfTVdfRE1BXzAgJiYgc3BlZWQgPD0gWEZFUl9NV19ETUFfMikKKwkJaWYgKHNwZWVkID49IFhGRVJfUElPXzAgJiYgc3BlZWQgPCBYRkVSX1NXX0RNQV8wKSB7CisJCQlpZiAoc3BlZWQgPD0gWEZFUl9QSU9fMikKKwkJCQlwLmN5Y2xlID0gcC5jeWM4YiA9IGlkW0FUQV9JRF9FSURFX1BJT107CisJCQllbHNlIGlmICgoc3BlZWQgPD0gWEZFUl9QSU9fNCkgfHwKKwkJCQkgKHNwZWVkID09IFhGRVJfUElPXzUgJiYgIWF0YV9pZF9pc19jZmEoaWQpKSkKKwkJCQlwLmN5Y2xlID0gcC5jeWM4YiA9IGlkW0FUQV9JRF9FSURFX1BJT19JT1JEWV07CisJCX0gZWxzZSBpZiAoc3BlZWQgPj0gWEZFUl9NV19ETUFfMCAmJiBzcGVlZCA8PSBYRkVSX01XX0RNQV8yKQogCQkJcC5jeWNsZSA9IGlkW0FUQV9JRF9FSURFX0RNQV9NSU5dOwogCiAJCWlkZV90aW1pbmdfbWVyZ2UoJnAsIHQsIHQsIElERV9USU1JTkdfQ1lDTEUgfCBJREVfVElNSU5HX0NZQzhCKTsKQEAgLTE4NSwxMSArMTg2LDEwIEBACiAJLyoKIAkgKiBFdmVuIGluIERNQS9VRE1BIG1vZGVzIHdlIHN0aWxsIHVzZSBQSU8gYWNjZXNzIGZvciBJREVOVElGWSwKIAkgKiBTLk0uQS5SLlQgYW5kIHNvbWUgb3RoZXIgY29tbWFuZHMuIFdlIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlCi0JICogRE1BIGN5Y2xlIHRpbWluZyBpcyBzbG93ZXIvZXF1YWwgdGhhbiB0aGUgZmFzdGVzdCBQSU8gdGltaW5nLgorCSAqIERNQSBjeWNsZSB0aW1pbmcgaXMgc2xvd2VyL2VxdWFsIHRoYW4gdGhlIGN1cnJlbnQgUElPIHRpbWluZy4KIAkgKi8KIAlpZiAoc3BlZWQgPj0gWEZFUl9TV19ETUFfMCkgewotCQl1OCBwaW8gPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUoZHJpdmUsIDI1NSwgNSk7Ci0JCWlkZV90aW1pbmdfY29tcHV0ZShkcml2ZSwgWEZFUl9QSU9fMCArIHBpbywgJnAsIFQsIFVUKTsKKwkJaWRlX3RpbWluZ19jb21wdXRlKGRyaXZlLCBkcml2ZS0+cGlvX21vZGUsICZwLCBULCBVVCk7CiAJCWlkZV90aW1pbmdfbWVyZ2UoJnAsIHQsIHQsIElERV9USU1JTkdfQUxMKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS14ZmVyLW1vZGUuYyBiL2RyaXZlcnMvaWRlL2lkZS14ZmVyLW1vZGUuYwppbmRleCA0NmQyMDNjLi41ZmM4ZDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUteGZlci1tb2RlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXhmZXItbW9kZS5jCkBAIC01OCw3ICs1OCw3IEBACiAgKglUaGlzIGlzIHVzZWQgYnkgbW9zdCBjaGlwc2V0IHN1cHBvcnQgbW9kdWxlcyB3aGVuICJhdXRvLXR1bmluZyIuCiAgKi8KIAotdTggaWRlX2dldF9iZXN0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggbW9kZV93YW50ZWQsIHU4IG1heF9tb2RlKQorc3RhdGljIHU4IGlkZV9nZXRfYmVzdF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IG1vZGVfd2FudGVkLCB1OCBtYXhfbW9kZSkKIHsKIAl1MTYgKmlkID0gZHJpdmUtPmlkOwogCWludCBwaW9fbW9kZSA9IC0xLCBvdmVycmlkZGVuID0gMDsKQEAgLTEwNSw3ICsxMDUsNiBAQAogCiAJcmV0dXJuIHBpb19tb2RlOwogfQotRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2dldF9iZXN0X3Bpb19tb2RlKTsKIAogaW50IGlkZV9waW9fbmVlZF9pb3JkeShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKIHsKQEAgLTEzNSwxNyArMTM0LDIwIEBACiAJICogc2V0IHRyYW5zZmVyIG1vZGUgb24gdGhlIGRldmljZSBpbiAtPnNldF9waW9fbW9kZSBtZXRob2QuLi4KIAkgKi8KIAlpZiAocG9ydF9vcHMtPnNldF9kbWFfbW9kZSA9PSBOVUxMKSB7Ci0JCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoZHJpdmUsIG1vZGUgLSBYRkVSX1BJT18wKTsKKwkJZHJpdmUtPnBpb19tb2RlID0gbW9kZTsKKwkJcG9ydF9vcHMtPnNldF9waW9fbW9kZShod2lmLCBkcml2ZSk7CiAJCXJldHVybiAwOwogCX0KIAogCWlmIChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1BPU1RfU0VUX01PREUpIHsKIAkJaWYgKGlkZV9jb25maWdfZHJpdmVfc3BlZWQoZHJpdmUsIG1vZGUpKQogCQkJcmV0dXJuIC0xOwotCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7CisJCWRyaXZlLT5waW9fbW9kZSA9IG1vZGU7CisJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoaHdpZiwgZHJpdmUpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewotCQlwb3J0X29wcy0+c2V0X3Bpb19tb2RlKGRyaXZlLCBtb2RlIC0gWEZFUl9QSU9fMCk7CisJCWRyaXZlLT5waW9fbW9kZSA9IG1vZGU7CisJCXBvcnRfb3BzLT5zZXRfcGlvX21vZGUoaHdpZiwgZHJpdmUpOwogCQlyZXR1cm4gaWRlX2NvbmZpZ19kcml2ZV9zcGVlZChkcml2ZSwgbW9kZSk7CiAJfQogfQpAQCAtMTY0LDEwICsxNjYsMTIgQEAKIAlpZiAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19QT1NUX1NFVF9NT0RFKSB7CiAJCWlmIChpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKSkKIAkJCXJldHVybiAtMTsKLQkJcG9ydF9vcHMtPnNldF9kbWFfbW9kZShkcml2ZSwgbW9kZSk7CisJCWRyaXZlLT5kbWFfbW9kZSA9IG1vZGU7CisJCXBvcnRfb3BzLT5zZXRfZG1hX21vZGUoaHdpZiwgZHJpdmUpOwogCQlyZXR1cm4gMDsKIAl9IGVsc2UgewotCQlwb3J0X29wcy0+c2V0X2RtYV9tb2RlKGRyaXZlLCBtb2RlKTsKKwkJZHJpdmUtPmRtYV9tb2RlID0gbW9kZTsKKwkJcG9ydF9vcHMtPnNldF9kbWFfbW9kZShod2lmLCBkcml2ZSk7CiAJCXJldHVybiBpZGVfY29uZmlnX2RyaXZlX3NwZWVkKGRyaXZlLCBtb2RlKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pdDgxNzIuYyBiL2RyaXZlcnMvaWRlL2l0ODE3Mi5jCmluZGV4IDBkMjY2YTUuLjU2MGU2NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2l0ODE3Mi5jCisrKyBiL2RyaXZlcnMvaWRlL2l0ODE3Mi5jCkBAIC0zNywxMiArMzcsMTIgQEAKIAogI2RlZmluZSBEUlZfTkFNRSAiSVQ4MTcyIgogCi1zdGF0aWMgdm9pZCBpdDgxNzJfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggcGlvKQorc3RhdGljIHZvaWQgaXQ4MTcyX3NldF9waW9fbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJdTE2IGRyaXZlX2VuYWJsZXM7CiAJdTMyIGRyaXZlX3RpbWluZzsKKwljb25zdCB1OCBwaW8gPSBkcml2ZS0+cGlvX21vZGUgLSBYRkVSX1BJT18wOwogCiAJLyoKIAkgKiBUaGUgaGlnaGVzdCB2YWx1ZSBvZiBESU9SL0RJT1cgcHVsc2Ugd2lkdGggYW5kIHJlY292ZXJ5IHRpbWUKQEAgLTc3LDE0ICs3NywxNCBAQAogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCAweDQ0LCBkcml2ZV90aW1pbmcpOwogfQogCi1zdGF0aWMgdm9pZCBpdDgxNzJfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggc3BlZWQpCitzdGF0aWMgdm9pZCBpdDgxNzJfc2V0X2RtYV9tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmCT0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHBjaV9kZXYgKmRldgk9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKIAlpbnQgYV9zcGVlZAkJPSAzIDw8IChkcml2ZS0+ZG4gKiA0KTsKIAlpbnQgdV9mbGFnCQk9IDEgPDwgZHJpdmUtPmRuOwogCWludCB1X3NwZWVkCQk9IDA7CiAJdTggcmVnNDgsIHJlZzRhOworCWNvbnN0IHU4IHNwZWVkCQk9IGRyaXZlLT5kbWFfbW9kZTsKIAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg0OCwgJnJlZzQ4KTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NGEsICZyZWc0YSk7CkBAIC05OCwxNCArOTgsMTQgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0YSwgcmVnNGEgfCB1X3NwZWVkKTsKIAl9IGVsc2UgewogCQljb25zdCB1OCBtd2RtYV90b19waW9bXSA9IHsgMCwgMywgNCB9OwotCQl1OCBwaW87CiAKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0OCwgcmVnNDggJiB+dV9mbGFnKTsKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0YSwgcmVnNGEgJiB+YV9zcGVlZCk7CiAKLQkJcGlvID0gbXdkbWFfdG9fcGlvW3NwZWVkIC0gWEZFUl9NV19ETUFfMF07CisJCWRyaXZlLT5waW9fbW9kZSA9CisJCQltd2RtYV90b19waW9bc3BlZWQgLSBYRkVSX01XX0RNQV8wXSArIFhGRVJfUElPXzA7CiAKLQkJaXQ4MTcyX3NldF9waW9fbW9kZShkcml2ZSwgcGlvKTsKKwkJaXQ4MTcyX3NldF9waW9fbW9kZShod2lmLCBkcml2ZSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pdDgyMTMuYyBiL2RyaXZlcnMvaWRlL2l0ODIxMy5jCmluZGV4IDQ3OTc2MTYuLjQ2ODE2YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2l0ODIxMy5jCisrKyBiL2RyaXZlcnMvaWRlL2l0ODIxMy5jCkBAIC0xNywxNSArMTcsMTQgQEAKIAogLyoqCiAgKglpdDgyMTNfc2V0X3Bpb19tb2RlCS0Jc2V0IGhvc3QgY29udHJvbGxlciBmb3IgUElPIG1vZGUKKyAqCUBod2lmOiBwb3J0CiAgKglAZHJpdmU6IGRyaXZlCi0gKglAcGlvOiBQSU8gbW9kZSBudW1iZXIKICAqCiAgKglTZXQgdGhlIGludGVyZmFjZSBQSU8gbW9kZS4KICAqLwogCi1zdGF0aWMgdm9pZCBpdDgyMTNfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggcGlvKQorc3RhdGljIHZvaWQgaXQ4MjEzX3NldF9waW9fbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJaW50IGlzX3NsYXZlCQk9IGRyaXZlLT5kbiAmIDE7CiAJaW50IG1hc3Rlcl9wb3J0CQk9IDB4NDA7CkBAIC0zNSw2ICszNCw3IEBACiAJdTggc2xhdmVfZGF0YTsKIAlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHR1bmVfbG9jayk7CiAJaW50IGNvbnRyb2wgPSAwOworCWNvbnN0IHU4IHBpbyA9IGRyaXZlLT5waW9fbW9kZSAtIFhGRVJfUElPXzA7CiAKIAlzdGF0aWMgY29uc3QgdTggdGltaW5nc1tdWzJdID0gewogCQkJCQl7IDAsIDAgfSwKQEAgLTc0LDE1ICs3NCwxNCBAQAogCiAvKioKICAqCWl0ODIxM19zZXRfZG1hX21vZGUJLQlzZXQgaG9zdCBjb250cm9sbGVyIGZvciBETUEgbW9kZQorICoJQGh3aWY6IHBvcnQKICAqCUBkcml2ZTogZHJpdmUKLSAqCUBzcGVlZDogRE1BIG1vZGUKICAqCiAgKglUdW5lIHRoZSBJVEUgY2hpcHNldCBmb3IgdGhlIERNQSBtb2RlLgogICovCiAKLXN0YXRpYyB2b2lkIGl0ODIxM19zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBzcGVlZCkKK3N0YXRpYyB2b2lkIGl0ODIxM19zZXRfZG1hX21vZGUoaWRlX2h3aWZfdCAqaHdpZiwgaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwogCXU4IG1hc2xhdmUJCT0gMHg0MDsKIAlpbnQgYV9zcGVlZAkJPSAzIDw8IChkcml2ZS0+ZG4gKiA0KTsKQEAgLTkyLDYgKzkxLDcgQEAKIAlpbnQgdV9zcGVlZAkJPSAwOwogCXUxNgkJCXJlZzQwNDIsIHJlZzRhOwogCXU4CQkJcmVnNDgsIHJlZzU0LCByZWc1NTsKKwljb25zdCB1OCBzcGVlZAkJPSBkcml2ZS0+ZG1hX21vZGU7CiAKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIG1hc2xhdmUsICZyZWc0MDQyKTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NDgsICZyZWc0OCk7CkBAIC0xMjAsNyArMTIwLDYgQEAKIAkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTQsIHJlZzU0ICYgfnZfZmxhZyk7CiAJfSBlbHNlIHsKIAkJY29uc3QgdTggbXdkbWFfdG9fcGlvW10gPSB7IDAsIDMsIDQgfTsKLQkJdTggcGlvOwogCiAJCWlmIChyZWc0OCAmIHVfZmxhZykKIAkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NDgsIHJlZzQ4ICYgfnVfZmxhZyk7CkBAIC0xMzIsMTEgKzEzMSwxMiBAQAogCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg1NSwgKHU4KSByZWc1NSAmIH53X2ZsYWcpOwogCiAJCWlmIChzcGVlZCA+PSBYRkVSX01XX0RNQV8wKQotCQkJcGlvID0gbXdkbWFfdG9fcGlvW3NwZWVkIC0gWEZFUl9NV19ETUFfMF07CisJCQlkcml2ZS0+cGlvX21vZGUgPQorCQkJCW13ZG1hX3RvX3Bpb1tzcGVlZCAtIFhGRVJfTVdfRE1BXzBdICsgWEZFUl9QSU9fMDsKIAkJZWxzZQotCQkJcGlvID0gMjsgLyogb25seSBTV0RNQTIgaXMgYWxsb3dlZCAqLworCQkJZHJpdmUtPnBpb19tb2RlID0gWEZFUl9QSU9fMjsgLyogZm9yIFNXRE1BMiAqLwogCi0JCWl0ODIxM19zZXRfcGlvX21vZGUoZHJpdmUsIHBpbyk7CisJCWl0ODIxM19zZXRfcGlvX21vZGUoaHdpZiwgZHJpdmUpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaXQ4MjF4LmMgYi9kcml2ZXJzL2lkZS9pdDgyMXguYwppbmRleCA1MWFhNzQ1Li5iMjcwOWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pdDgyMXguYworKysgYi9kcml2ZXJzL2lkZS9pdDgyMXguYwpAQCAtMjI4LDE4ICsyMjgsMTggQEAKIAogLyoqCiAgKglpdDgyMXhfc2V0X3Bpb19tb2RlCS0Jc2V0IGhvc3QgY29udHJvbGxlciBmb3IgUElPIG1vZGUKKyAqCUBod2lmOiBwb3J0CiAgKglAZHJpdmU6IGRyaXZlCi0gKglAcGlvOiBQSU8gbW9kZSBudW1iZXIKICAqCiAgKglUdW5lIHRoZSBob3N0IHRvIHRoZSBkZXNpcmVkIFBJTyBtb2RlIHRha2luZyBpbnRvIHRoZSBjb25zaWRlcmF0aW9uCiAgKgl0aGUgbWF4aW11bSBQSU8gbW9kZSBzdXBwb3J0ZWQgYnkgdGhlIG90aGVyIGRldmljZSBvbiB0aGUgY2FibGUuCiAgKi8KIAotc3RhdGljIHZvaWQgaXQ4MjF4X3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKK3N0YXRpYyB2b2lkIGl0ODIxeF9zZXRfcGlvX21vZGUoaWRlX2h3aWZfdCAqaHdpZiwgaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaXQ4MjF4X2RldiAqaXRkZXYgPSBpZGVfZ2V0X2h3aWZkYXRhKGh3aWYpOwogCWlkZV9kcml2ZV90ICpwYWlyID0gaWRlX2dldF9wYWlyX2Rldihkcml2ZSk7CisJY29uc3QgdTggcGlvID0gZHJpdmUtPnBpb19tb2RlIC0gWEZFUl9QSU9fMDsKIAl1OCB1bml0ID0gZHJpdmUtPmRuICYgMSwgc2V0X3BpbyA9IHBpbzsKIAogCS8qIFNwZWMgc2F5cyA4OSByZWYgZHJpdmVyIHVzZXMgODggKi8KQEAgLTI1Miw3ICsyNTIsNyBAQAogCSAqIG9uIHRoZSBjYWJsZS4KIAkgKi8KIAlpZiAocGFpcikgewotCQl1OCBwYWlyX3BpbyA9IGlkZV9nZXRfYmVzdF9waW9fbW9kZShwYWlyLCAyNTUsIDQpOworCQl1OCBwYWlyX3BpbyA9IHBhaXItPnBpb19tb2RlIC0gWEZFUl9QSU9fMDsKIAkJLyogdHJpbSBQSU8gdG8gdGhlIHNsb3dlc3Qgb2YgdGhlIG1hc3Rlci9zbGF2ZSAqLwogCQlpZiAocGFpcl9waW8gPCBzZXRfcGlvKQogCQkJc2V0X3BpbyA9IHBhaXJfcGlvOwpAQCAtMzkzLDE0ICszOTMsMTYgQEAKIAogLyoqCiAgKglpdDgyMXhfc2V0X2RtYV9tb2RlCS0Jc2V0IGhvc3QgY29udHJvbGxlciBmb3IgRE1BIG1vZGUKKyAqCUBod2lmOiBwb3J0CiAgKglAZHJpdmU6IGRyaXZlCi0gKglAc3BlZWQ6IERNQSBtb2RlCiAgKgogICoJVHVuZSB0aGUgSVRFIGNoaXBzZXQgZm9yIHRoZSBkZXNpcmVkIERNQSBtb2RlLgogICovCiAKLXN0YXRpYyB2b2lkIGl0ODIxeF9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBzcGVlZCkKK3N0YXRpYyB2b2lkIGl0ODIxeF9zZXRfZG1hX21vZGUoaWRlX2h3aWZfdCAqaHdpZiwgaWRlX2RyaXZlX3QgKmRyaXZlKQogeworCWNvbnN0IHU4IHNwZWVkID0gZHJpdmUtPmRtYV9tb2RlOworCiAJLyoKIAkgKiBNV0RNQSB0dW5pbmcgaXMgcmVhbGx5IGhhcmQgYmVjYXVzZSBvdXIgTVdETUEgYW5kIFBJTwogCSAqIHRpbWluZ3MgYXJlIGtlcHQgaW4gdGhlIHNhbWUgcGxhY2UuICBXZSBjYW4gc3dpdGNoIGluIHRoZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvam1pY3Jvbi5jIGIvZHJpdmVycy9pZGUvam1pY3Jvbi5jCmluZGV4IGJmMmJlNjQuLjc0YzJjNGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2ptaWNyb24uYworKysgYi9kcml2ZXJzL2lkZS9qbWljcm9uLmMKQEAgLTgwLDE5ICs4MCwxOSBAQAogCXJldHVybiBBVEFfQ0JMX1BBVEE4MDsKIH0KIAotc3RhdGljIHZvaWQgam1pY3Jvbl9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCitzdGF0aWMgdm9pZCBqbWljcm9uX3NldF9waW9fbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiB9CiAKIC8qKgogICoJam1pY3Jvbl9zZXRfZG1hX21vZGUJLQlzZXQgaG9zdCBjb250cm9sbGVyIGZvciBETUEgbW9kZQorICoJQGh3aWY6IHBvcnQKICAqCUBkcml2ZTogZHJpdmUKLSAqCUBtb2RlOiBETUEgbW9kZQogICoKICAqCUFzIHRoZSBKTWljcm9uIHNub29wcyBmb3IgdGltaW5ncyB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGhlcmUuCiAgKi8KIAotc3RhdGljIHZvaWQgam1pY3Jvbl9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBtb2RlKQorc3RhdGljIHZvaWQgam1pY3Jvbl9zZXRfZG1hX21vZGUoaWRlX2h3aWZfdCAqaHdpZiwgaWRlX2RyaXZlX3QgKmRyaXZlKQogewogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9vcHRpNjIxLmMgYi9kcml2ZXJzL2lkZS9vcHRpNjIxLmMKaW5kZXggZjFkNzBkNi4uMWE1M2E0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvb3B0aTYyMS5jCisrKyBiL2RyaXZlcnMvaWRlL29wdGk2MjEuYwpAQCAtOCw3NyArOCw2IEBACiAgKiBKYW4gSGFya2VzIDxqYWhhcmtlc0Bjd2kubmw+LAogICogTWFyayBMb3JkIDxtbG9yZEBwb2JveC5jb20+CiAgKiBTb21lIHBhcnRzIG9mIGNvZGUgYXJlIGZyb20gYWxpMTR4eC5jIGFuZCBmcm9tIHJ6MTAwMC5jLgotICoKLSAqIE9QVGkgaXMgdHJhZGVtYXJrIG9mIE9QVGksIE9jdGVrIGlzIHRyYWRlbWFyayBvZiBPY3Rlay4KLSAqCi0gKiBJIHVzZWQgZG9jcyBmcm9tIE9QVGkgZGF0YWJvb2ssIGZyb20gZnRwLm9wdGkuY29tLCBmaWxlIDkxMjMtMDAwMi5wcwotICogYW5kIGRpc2Fzc2VtYmxlZC90cmFjZWQgc2V0dXB2aWMuZXhlIChET1MgcHJvZ3JhbSkuCi0gKiBJdCBpbmNyZWFzZXMga2VybmVsIGNvZGUgYWJvdXQgMiBrQi4KLSAqIEkgZG9uJ3QgaGF2ZSB0aGlzIGNhcmQgbm8gbW9yZSwgYnV0IEkgaG9wZSBJIGNhbiBnZXQgc29tZSBpbiBjYXNlCi0gKiBvZiBuZWVkZWQgZGV2ZWxvcG1lbnQuCi0gKiBNeSBjYXJkIGlzIE9jdGVrIFBJREUgMS4wMSAob24gY2FyZCkgb3IgT1BUaVZpQyAocHJvZ3JhbSkuCi0gKiBJdCBoYXMgYSBwbGFjZSBmb3IgYSBzZWNvbmRhcnkgY29ubmVjdG9yIGluIGNpcmN1aXQsIGJ1dCBub3RoaW5nCi0gKiBpcyB0aGVyZS4gQWxzbyBCSU9TIHNheXMgbm8gYWRkcmVzcyBmb3IKLSAqIHNlY29uZGFyeSBjb250cm9sbGVyIChzZWUgYmVsbG93IGluIGlkZV9pbml0X29wdGk2MjEpLgotICogSSd2ZSBvbmx5IHRlc3RlZCB0aGlzIG9uIG15IHN5c3RlbSwgd2hpY2ggb25seSBoYXMgb25lIGRpc2suCi0gKiBJdCdzIFdlc3Rlcm4gRGlnaXRhbCBXREFDMjg1MCwgd2l0aCBQSU8gbW9kZSAzLiBUaGUgUENJIGJ1cwotICogaXMgYXQgMjAgTUh6IChJIGhhdmUgRFgyLzgwLCBJIHRyaWVkIFBDSSBhdCA0MCwgYnV0IEkgZ290IHJhbmRvbQotICogbG9ja3VwcykuIEkgdHJpZWQgdGhlIE9DVEVLIGRvdWJsZSBzcGVlZCBDRC1ST00gYW5kCi0gKiBpdCBkb2VzIG5vdCB3b3JrISBCdXQgSSBjYW4ndCBib290IERPUyBhbHNvLCBzbyBpdCdzIHByb2JhYmx5Ci0gKiBoYXJkd2FyZSBmYXVsdC4gSSBoYXZlIGNvbm5lY3RlZCBDb25uZXIgODBNQiwgdGhlIFNlYWdhdGUgODUwTUIgKG5vCi0gKiBwcm9ibGVtcykgYW5kIFNlYWdhdGUgMUdCIChhcyBzbGF2ZSwgV0QgYXMgbWFzdGVyKS4gTXkgZXhwZXJpZW5jZXMKLSAqIHdpdGggdGhlIHRoaXJkLCAxR0IgZHJpdmU6IEkgZ290IDNNQi9zIChoZHBhcm0pLCBidXQgc29tZXRpbWVzCi0gKiBpdCBzbG93cyB0byBhYm91dCAxMDBrQi9zISBJIGRvbid0IGtub3cgd2h5IGFuZCBJIGhhdmUKLSAqIG5vdCB0aGlzIGRyaXZlIG5vdywgc28gSSBjYW4ndCB0cnkgaXQgYWdhaW4uCi0gKiBJIHdyaXRlIHRoaXMgZHJpdmVyIGJlY2F1c2UgSSBsb3N0IHRoZSBwYXBlciAoIm1hbnVhbCIpIHdpdGgKLSAqIHNldHRpbmdzIG9mIGp1bXBlcnMgb24gdGhlIGNhcmQgYW5kIEkgaGF2ZSB0byBib290IExpbnV4IHdpdGgKLSAqIExvYWRsaW4gZXhjZXB0IExJTE8sIGNhdXNlIEkgaGF2ZSB0byBydW4gdGhlIHNldHVwdmljLmV4ZSBwcm9ncmFtCi0gKiBhbHJlYWR5IG9yIEkgZ2V0IGRpc2sgZXJyb3JzIChteSB0ZXN0OiBycG0gLVZmCi0gKiAvdXNyL1gxMVI2L2Jpbi9YRjg2X1NWR0EgLSBvciBhbnkgYmlnIGZpbGUpLgotICogU29tZSBudW1iZXJzIGZyb20gaGRwYXJtIC10IC9kZXYvaGRhOgotICogVGltaW5nIGJ1ZmZlci1jYWNoZSByZWFkczogICAzMiBNQiBpbiAgMy4wMiBzZWNvbmRzID0xMC42MCBNQi9zZWMKLSAqIFRpbWluZyBidWZmZXJlZCBkaXNrIHJlYWRzOiAgMTYgTUIgaW4gIDUuNTIgc2Vjb25kcyA9IDIuOTAgTUIvc2VjCi0gKiBJIGhhdmUgNCBNZWdzL3MgYmVmb3JlLCBidXQgSSBkb24ndCBrbm93IHdoeSAobWF5YmUgY2hhbmdlcwotICogaW4gaGRwYXJtIHRlc3QpLgotICogQWZ0ZXIgcmVsZWFzZSBvZiAwLjEsIEkgZ290IHNvbWUgc3VjY2Vzc2Z1bCByZXBvcnRzLCBzbyBpdCBtaWdodCB3b3JrLgotICoKLSAqIFRoZSBtYWluIHByb2JsZW0gd2l0aCBPUFRpIGlzIHRoYXQgc29tZSB0aW1pbmdzIGZvciBtYXN0ZXIKLSAqIGFuZCBzbGF2ZSBtdXN0IGJlIHRoZSBzYW1lLiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgbWFzdGVyCi0gKiBQSU8gMyBhbmQgc2xhdmUgUElPIDAsIGRyaXZlciBoYXZlIHRvIHNldCBzb21lIHRpbWluZ3Mgb2YKLSAqIG1hc3RlciBmb3IgUElPIDAuIFNlY29uZCBwcm9ibGVtIGlzIHRoYXQgb3B0aTYyMV9zZXRfcGlvX21vZGUKLSAqIGdvdCBvbmx5IG9uZSBkcml2ZSB0byBzZXQsIGJ1dCBoYXZlIHRvIHNldCBib3RoIGRyaXZlcy4KLSAqIFRoaXMgaXMgc29sdmVkIGluIGNvbXB1dGVfcGlvcy4gSWYgeW91IGRvbid0IHNldAotICogdGhlIHNlY29uZCBkcml2ZSwgY29tcHV0ZV9waW9zIHVzZSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUKLSAqIGZvciBhdXRvc2VsZWN0IG1vZGUgKHlvdSBjYW4gY2hhbmdlIGl0IHRvIFBJTyAwLCBpZiB5b3Ugd2FudCkuCi0gKiBJZiB5b3UgdGhlbiBzZXQgdGhlIHNlY29uZCBkcml2ZSB0byBhbm90aGVyIFBJTywgdGhlIG9sZCB2YWx1ZQotICogKGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQpIHdpbGwgYmUgb3ZlcnJpZGVkIGJ5IHlvdXJzLgotICogVGhlcmUgaXMgYSAyNS8zM01IeiBzd2l0Y2ggaW4gY29uZmlndXJhdGlvbgotICogcmVnaXN0ZXIsIGJ1dCBkcml2ZXIgaXMgd3JpdHRlbiBmb3IgdXNlIGF0IGFueSBmcmVxdWVuY3kuCi0gKgotICogVmVyc2lvbiAwLjEsIE5vdiA4LCAxOTk2Ci0gKiBieSBKYXJvbWlyIEtvdXRlaywgZm9yIDIuMS44LgotICogSW5pdGlhbCB2ZXJzaW9uIG9mIGRyaXZlci4KLSAqCi0gKiBWZXJzaW9uIDAuMgotICogTnVtYmVyIDAuMiBza2lwcGVkLgotICoKLSAqIFZlcnNpb24gMC4zLCBOb3YgMjksIDE5OTcKLSAqIGJ5IE1hcmsgTG9yZCAocHJvYmFibHkpLCBmb3IgMi4xLjY4Ci0gKiBVcGRhdGVzIGZvciB1c2Ugd2l0aCBuZXcgSURFIGJsb2NrIGRyaXZlci4KLSAqCi0gKiBWZXJzaW9uIDAuNCwgRGVjIDE0LCAxOTk3Ci0gKiBieSBKYW4gSGFya2VzCi0gKiBGaXhlZCBzb21lIGVycm9ycyBhbmQgY2xlYW5lZCB0aGUgY29kZS4KLSAqCi0gKiBWZXJzaW9uIDAuNSwgSmFuIDIsIDE5OTgKLSAqIGJ5IEphcm9taXIgS291dGVrCi0gKiBVcGRhdGVzIGZvciB1c2Ugd2l0aCAoYWdhaW4pIG5ldyBJREUgYmxvY2sgZHJpdmVyLgotICogVXBkYXRlIG9mIGRvY3VtZW50YXRpb24uCi0gKgotICogVmVyc2lvbiAwLjYsIEphbiAyLCAxOTk5Ci0gKiBieSBKYXJvbWlyIEtvdXRlawotICogUmV2ZXJzZWQgdG8gdmVyc2lvbiAwLjMgb2YgdGhlIGRyaXZlciwgYmVjYXVzZQotICogMC41IGRvZXNuJ3Qgd29yay4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KQEAgLTEzMywxMiArNjIsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBvcHRpNjIxX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKK3N0YXRpYyB2b2lkIG9wdGk2MjFfc2V0X3Bpb19tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJaWRlX2RyaXZlX3QgKnBhaXIgPSBpZGVfZ2V0X3BhaXJfZGV2KGRyaXZlKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgbW9kZSA9IFhGRVJfUElPXzAgKyBwaW8sIHBhaXJfbW9kZTsKKwl1bnNpZ25lZCBsb25nIG1vZGUgPSBkcml2ZS0+cGlvX21vZGUsIHBhaXJfbW9kZTsKKwljb25zdCB1OCBwaW8gPSBtb2RlIC0gWEZFUl9QSU9fMDsKIAl1OCB0aW0sIG1pc2MsIGFkZHJfcGlvID0gcGlvLCBjbGs7CiAKIAkvKiBEUkRZIGlzIGRlZmF1bHQgMiAoYnkgT1BUaSBEYXRhYm9vaykgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BhbG1fYmszNzEwLmMgYi9kcml2ZXJzL2lkZS9wYWxtX2JrMzcxMC5jCmluZGV4IGY4ZWRkZjAuLjllOGY0ZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BhbG1fYmszNzEwLmMKKysrIGIvZHJpdmVycy9pZGUvcGFsbV9iazM3MTAuYwpAQCAtMTY2LDcgKzE2Niw3IEBACiAJd3JpdGVsKHZhbDMyLCBiYXNlICsgQkszNzEwX0RBVFJDVlIpOwogCiAJaWYgKG1hdGUpIHsKLQkJdTggbW9kZTIgPSBpZGVfZ2V0X2Jlc3RfcGlvX21vZGUobWF0ZSwgMjU1LCA0KTsKKwkJdTggbW9kZTIgPSBtYXRlLT5waW9fbW9kZSAtIFhGRVJfUElPXzA7CiAKIAkJaWYgKG1vZGUyIDwgbW9kZSkKIAkJCW1vZGUgPSBtb2RlMjsKQEAgLTE4OCwxMCArMTg4LDExIEBACiAJd3JpdGVsKHZhbDMyLCBiYXNlICsgQkszNzEwX1JFR1JDVlIpOwogfQogCi1zdGF0aWMgdm9pZCBwYWxtX2JrMzcxMF9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCB4ZmVyc3BlZWQpCitzdGF0aWMgdm9pZCBwYWxtX2JrMzcxMF9zZXRfZG1hX21vZGUoaWRlX2h3aWZfdCAqaHdpZiwgaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWludCBpc19zbGF2ZSA9IGRyaXZlLT5kbiAmIDE7Ci0Jdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgKilkcml2ZS0+aHdpZi0+ZG1hX2Jhc2U7CisJdm9pZCBfX2lvbWVtICpiYXNlID0gKHZvaWQgKilod2lmLT5kbWFfYmFzZTsKKwljb25zdCB1OCB4ZmVyc3BlZWQgPSBkcml2ZS0+ZG1hX21vZGU7CiAKIAlpZiAoeGZlcnNwZWVkID49IFhGRVJfVURNQV8wKSB7CiAJCXBhbG1fYmszNzEwX3NldHVkbWFtb2RlKGJhc2UsIGlzX3NsYXZlLApAQCAtMjAzLDEyICsyMDQsMTMgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHBhbG1fYmszNzEwX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHBpbykKK3N0YXRpYyB2b2lkIHBhbG1fYmszNzEwX3NldF9waW9fbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJdW5zaWduZWQgaW50IGN5Y2xlX3RpbWU7CiAJaW50IGlzX3NsYXZlID0gZHJpdmUtPmRuICYgMTsKIAlpZGVfZHJpdmVfdCAqbWF0ZTsKLQl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCAqKWRyaXZlLT5od2lmLT5kbWFfYmFzZTsKKwl2b2lkIF9faW9tZW0gKmJhc2UgPSAodm9pZCAqKWh3aWYtPmRtYV9iYXNlOworCWNvbnN0IHU4IHBpbyA9IGRyaXZlLT5waW9fbW9kZSAtIFhGRVJfUElPXzA7CiAKIAkvKgogCSAqIE9idGFpbiB0aGUgZHJpdmUgUElPIGRhdGEgZm9yIHR1bmluZyB0aGUgUGFsbSBDaGlwIHJlZ2lzdGVycwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGRjMjAyeHhfbmV3LmMgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9uZXcuYwppbmRleCA2NWJhODIzLi45NTQ2ZmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9uZXcuYworKysgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9uZXcuYwpAQCAtMTI5LDExICsxMjksMTEgQEAKIAl7IDB4MWEsIDB4MDEsIDB4Y2IgfSwJLyogVURNQSBtb2RlIDYgKi8KIH07CiAKLXN0YXRpYyB2b2lkIHBkY25ld19zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBzcGVlZCkKK3N0YXRpYyB2b2lkIHBkY25ld19zZXRfZG1hX21vZGUoaWRlX2h3aWZfdCAqaHdpZiwgaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOwogCXU4IGFkagkJCT0gKGRyaXZlLT5kbiAmIDEpID8gMHgwOCA6IDB4MDA7CisJY29uc3QgdTggc3BlZWQJCT0gZHJpdmUtPmRtYV9tb2RlOwogCiAJLyoKIAkgKiBJREUgY29yZSBpc3N1ZXMgU0VURkVBVFVSRVNfWEZFUiB0byB0aGUgZHJpdmUgZmlyc3QgKHRoYW5rcyB0bwpAQCAtMTY3LDExICsxNjcsMTEgQEAKICAJfQogfQogCi1zdGF0aWMgdm9pZCBwZGNuZXdfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggcGlvKQorc3RhdGljIHZvaWQgcGRjbmV3X3NldF9waW9fbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJdTggYWRqID0gKGRyaXZlLT5kbiAmIDEpID8gMHgwOCA6IDB4MDA7CisJY29uc3QgdTggcGlvID0gZHJpdmUtPnBpb19tb2RlIC0gWEZFUl9QSU9fMDsKIAogCWlmIChtYXhfZG1hX3JhdGUoZGV2KSA9PSA0KSB7CiAJCXNldF9pbmRleGVkX3JlZyhod2lmLCAweDBjICsgYWRqLCBwaW9fdGltaW5nc1twaW9dLnJlZzBjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BkYzIwMnh4X29sZC5jIGIvZHJpdmVycy9pZGUvcGRjMjAyeHhfb2xkLmMKaW5kZXggMzUxNjFkZC4uYzVmMzg0MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGRjMjAyeHhfb2xkLmMKKysrIGIvZHJpdmVycy9pZGUvcGRjMjAyeHhfb2xkLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OC0yMDAyCQlBbmRyZSBIZWRyaWNrIDxhbmRyZUBsaW51eC1pZGUub3JnPgogICogIENvcHlyaWdodCAoQykgMjAwNi0yMDA3LCAyMDA5CU1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcJCQlCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6CisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMTAJCUJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oKICAqCiAgKiAgUG9ydGlvbnMgQ29weXJpZ2h0IChDKSAxOTk5IFByb21pc2UgVGVjaG5vbG9neSwgSW5jLgogICogIEF1dGhvcjogRnJhbmsgVGllcm5hbiAoZnJhbmt0QHByb21pc2UuY29tKQpAQCAtMjEsMjMgKzIxLDE1IEBACiAKICNkZWZpbmUgRFJWX05BTUUgInBkYzIwMnh4X29sZCIKIAotc3RhdGljIHZvaWQgcGRjX29sZF9kaXNhYmxlXzY2TUh6X2Nsb2NrKGlkZV9od2lmX3QgKik7Ci0KLXN0YXRpYyB2b2lkIHBkYzIwMnh4X3NldF9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggc3BlZWQpCitzdGF0aWMgdm9pZCBwZGMyMDJ4eF9zZXRfbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJdTggZHJpdmVfcGNpCQk9IDB4NjAgKyAoZHJpdmUtPmRuIDw8IDIpOworCWNvbnN0IHU4IHNwZWVkCQk9IGRyaXZlLT5kbWFfbW9kZTsKIAogCXU4CQkJQVAgPSAwLCBCUCA9IDAsIENQID0gMDsKIAl1OAkJCVRBID0gMCwgVEIgPSAwLCBUQyA9IDA7CiAKLQkvKgotCSAqIFRPRE86IGRvIHRoaXMgb25jZSBwZXIgY2hhbm5lbAotCSAqLwotCWlmIChkZXYtPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNDYpCi0JCXBkY19vbGRfZGlzYWJsZV82Nk1Iel9jbG9jayhod2lmKTsKLQogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgZHJpdmVfcGNpLCAgICAgJkFQKTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIGRyaXZlX3BjaSArIDEsICZCUCk7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBkcml2ZV9wY2kgKyAyLCAmQ1ApOwpAQCAtODQsOSArNzYsMTAgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIHBkYzIwMnh4X3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKK3N0YXRpYyB2b2lkIHBkYzIwMnh4X3NldF9waW9fbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JcGRjMjAyeHhfc2V0X21vZGUoZHJpdmUsIFhGRVJfUElPXzAgKyBwaW8pOworCWRyaXZlLT5kbWFfbW9kZSA9IGRyaXZlLT5waW9fbW9kZTsKKwlwZGMyMDJ4eF9zZXRfbW9kZShod2lmLCBkcml2ZSk7CiB9CiAKIHN0YXRpYyBpbnQgcGRjMjAyeHhfdGVzdF9pcnEoaWRlX2h3aWZfdCAqaHdpZikKQEAgLTEwMCwxMyArOTMsMTMgQEAKIAkJICogYml0IDc6IGVycm9yLCBiaXQgNjogaW50ZXJydXB0aW5nLAogCQkgKiBiaXQgNTogRklGTyBmdWxsLCBiaXQgNDogRklGTyBlbXB0eQogCQkgKi8KLQkJcmV0dXJuICgoc2MxZCAmIDB4NTApID09IDB4NDApID8gMSA6IDA7CisJCXJldHVybiAoKHNjMWQgJiAweDUwKSA9PSAweDUwKSA/IDEgOiAwOwogCX0gZWxzZQl7CiAJCS8qCiAJCSAqIGJpdCAzOiBlcnJvciwgYml0IDI6IGludGVycnVwdGluZywKIAkJICogYml0IDE6IEZJRk8gZnVsbCwgYml0IDA6IEZJRk8gZW1wdHkKIAkJICovCi0JCXJldHVybiAoKHNjMWQgJiAweDA1KSA9PSAweDA0KSA/IDEgOiAwOworCQlyZXR1cm4gKChzYzFkICYgMHgwNSkgPT0gMHgwNSkgPyAxIDogMDsKIAl9CiB9CiAKQEAgLTE0NSw2ICsxMzgsMTEgQEAKIAlvdXRiKGNsb2NrICYgfihod2lmLT5jaGFubmVsID8gMHgwOCA6IDB4MDIpLCBjbG9ja19yZWcpOwogfQogCitzdGF0aWMgdm9pZCBwZGMyMDI2eF9pbml0X2h3aWYoaWRlX2h3aWZfdCAqaHdpZikKK3sKKwlwZGNfb2xkX2Rpc2FibGVfNjZNSHpfY2xvY2soaHdpZik7Cit9CisKIHN0YXRpYyB2b2lkIHBkYzIwMnh4X2RtYV9zdGFydChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJaWYgKGRyaXZlLT5jdXJyZW50X3NwZWVkID4gWEZFUl9VRE1BXzIpCkBAIC0yNjEsNiArMjU5LDcgQEAKIAl7IFwKIAkJLm5hbWUJCT0gRFJWX05BTUUsIFwKIAkJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF9wZGMyMDJ4eCwgXAorCQkuaW5pdF9od2lmCT0gcGRjMjAyNnhfaW5pdF9od2lmLCBcCiAJCS5wb3J0X29wcwk9ICZwZGMyMDI2eF9wb3J0X29wcywgXAogCQkuZG1hX29wcwk9ICZwZGMyMDI2eF9kbWFfb3BzLCBcCiAJCS5ob3N0X2ZsYWdzCT0gSURFX0hGTEFHU19QREMyMDJYWCwgXApAQCAtMzU2LDYgKzM1NSw2IEBACiBtb2R1bGVfaW5pdChwZGMyMDJ4eF9pZGVfaW5pdCk7CiBtb2R1bGVfZXhpdChwZGMyMDJ4eF9pZGVfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIkFuZHJlIEhlZHJpY2ssIEZyYW5rIFRpZXJuYW4iKTsKK01PRFVMRV9BVVRIT1IoIkFuZHJlIEhlZHJpY2ssIEZyYW5rIFRpZXJuYW4sIEJhcnRsb21pZWogWm9sbmllcmtpZXdpY3oiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUENJIGRyaXZlciBtb2R1bGUgZm9yIG9sZGVyIFByb21pc2UgSURFIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9waWl4LmMgYi9kcml2ZXJzL2lkZS9waWl4LmMKaW5kZXggYmYxNGYzOS4uMWJkY2E0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGlpeC5jCisrKyBiL2RyaXZlcnMvaWRlL3BpaXguYwpAQCAtNTksMTUgKzU5LDE0IEBACiAKIC8qKgogICoJcGlpeF9zZXRfcGlvX21vZGUJLQlzZXQgaG9zdCBjb250cm9sbGVyIGZvciBQSU8gbW9kZQorICoJQHBvcnQ6IHBvcnQKICAqCUBkcml2ZTogZHJpdmUKLSAqCUBwaW86IFBJTyBtb2RlIG51bWJlcgogICoKICAqCVNldCB0aGUgaW50ZXJmYWNlIFBJTyBtb2RlIGJhc2VkIHVwb24gdGhlIHNldHRpbmdzIGRvbmUgYnkgQU1JIEJJT1MuCiAgKi8KIAotc3RhdGljIHZvaWQgcGlpeF9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCitzdGF0aWMgdm9pZCBwaWl4X3NldF9waW9fbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJaW50IGlzX3NsYXZlCQk9IGRyaXZlLT5kbiAmIDE7CiAJaW50IG1hc3Rlcl9wb3J0CQk9IGh3aWYtPmNoYW5uZWwgPyAweDQyIDogMHg0MDsKQEAgLTc3LDYgKzc2LDcgQEAKIAl1OCBzbGF2ZV9kYXRhOwogCXN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodHVuZV9sb2NrKTsKIAlpbnQgY29udHJvbCA9IDA7CisJY29uc3QgdTggcGlvID0gZHJpdmUtPnBpb19tb2RlIC0gWEZFUl9QSU9fMDsKIAogCQkJCSAgICAgLyogSVNQICBSVEMgKi8KIAlzdGF0aWMgY29uc3QgdTggdGltaW5nc1tdWzJdPSB7CkBAIC0xMjcsMTYgKzEyNywxNSBAQAogCiAvKioKICAqCXBpaXhfc2V0X2RtYV9tb2RlCS0Jc2V0IGhvc3QgY29udHJvbGxlciBmb3IgRE1BIG1vZGUKKyAqCUBod2lmOiBwb3J0CiAgKglAZHJpdmU6IGRyaXZlCi0gKglAc3BlZWQ6IERNQSBtb2RlCiAgKgogICoJU2V0IGEgUElJWCBob3N0IGNvbnRyb2xsZXIgdG8gdGhlIGRlc2lyZWQgRE1BIG1vZGUuICBUaGlzIGludm9sdmVzCiAgKglwcm9ncmFtbWluZyB0aGUgcmlnaHQgdGltaW5nIGRhdGEgaW50byB0aGUgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2UuCiAgKi8KIAotc3RhdGljIHZvaWQgcGlpeF9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBzcGVlZCkKK3N0YXRpYyB2b2lkIHBpaXhfc2V0X2RtYV9tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmCT0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHBjaV9kZXYgKmRldgk9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKIAl1OCBtYXNsYXZlCQk9IGh3aWYtPmNoYW5uZWwgPyAweDQyIDogMHg0MDsKIAlpbnQgYV9zcGVlZAkJPSAzIDw8IChkcml2ZS0+ZG4gKiA0KTsKQEAgLTE0Nyw2ICsxNDYsNyBAQAogCWludAkJCXNpdHJlOwogCXUxNgkJCXJlZzQwNDIsIHJlZzRhOwogCXU4CQkJcmVnNDgsIHJlZzU0LCByZWc1NTsKKwljb25zdCB1OCBzcGVlZAkJPSBkcml2ZS0+ZG1hX21vZGU7CiAKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIG1hc2xhdmUsICZyZWc0MDQyKTsKIAlzaXRyZSA9IChyZWc0MDQyICYgMHg0MDAwKSA/IDEgOiAwOwpAQCAtMTc2LDcgKzE3Niw2IEBACiAJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDU0LCByZWc1NCAmIH52X2ZsYWcpOwogCX0gZWxzZSB7CiAJCWNvbnN0IHU4IG13ZG1hX3RvX3Bpb1tdID0geyAwLCAzLCA0IH07Ci0JCXU4IHBpbzsKIAogCQlpZiAocmVnNDggJiB1X2ZsYWcpCiAJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDQ4LCByZWc0OCAmIH51X2ZsYWcpOwpAQCAtMTg4LDExICsxODcsMTIgQEAKIAkJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4NTUsICh1OCkgcmVnNTUgJiB+d19mbGFnKTsKIAogCQlpZiAoc3BlZWQgPj0gWEZFUl9NV19ETUFfMCkKLQkJCXBpbyA9IG13ZG1hX3RvX3Bpb1tzcGVlZCAtIFhGRVJfTVdfRE1BXzBdOworCQkJZHJpdmUtPnBpb19tb2RlID0KKwkJCQltd2RtYV90b19waW9bc3BlZWQgLSBYRkVSX01XX0RNQV8wXSArIFhGRVJfUElPXzA7CiAJCWVsc2UKLQkJCXBpbyA9IDI7IC8qIG9ubHkgU1dETUEyIGlzIGFsbG93ZWQgKi8KKwkJCWRyaXZlLT5waW9fbW9kZSA9IFhGRVJfUElPXzI7IC8qIGZvciBTV0RNQTIgKi8KIAotCQlwaWl4X3NldF9waW9fbW9kZShkcml2ZSwgcGlvKTsKKwkJcGlpeF9zZXRfcGlvX21vZGUoaHdpZiwgZHJpdmUpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcG1hYy5jIGIvZHJpdmVycy9pZGUvcG1hYy5jCmluZGV4IDdhNGU3ODguLjg1MGVlNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BtYWMuYworKysgYi9kcml2ZXJzL2lkZS9wbWFjLmMKQEAgLTQ5NiwxMiArNDk2LDExIEBACiAvKgogICogT2xkIHR1bmluZyBmdW5jdGlvbnMgKGNhbGxlZCBvbiBoZHBhcm0gLXApLCBzZXRzIHVwIGRyaXZlIFBJTyB0aW1pbmdzCiAgKi8KLXN0YXRpYyB2b2lkCi1wbWFjX2lkZV9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCitzdGF0aWMgdm9pZCBwbWFjX2lkZV9zZXRfcGlvX21vZGUoaWRlX2h3aWZfdCAqaHdpZiwgaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlwbWFjX2lkZV9od2lmX3QgKnBtaWYgPQogCQkocG1hY19pZGVfaHdpZl90ICopZGV2X2dldF9kcnZkYXRhKGh3aWYtPmdlbmRldi5wYXJlbnQpOworCWNvbnN0IHU4IHBpbyA9IGRyaXZlLT5waW9fbW9kZSAtIFhGRVJfUElPXzA7CiAJc3RydWN0IGlkZV90aW1pbmcgKnRpbSA9IGlkZV90aW1pbmdfZmluZF9tb2RlKFhGRVJfUElPXzAgKyBwaW8pOwogCXUzMiAqdGltaW5ncywgdDsKIAl1bnNpZ25lZCBhY2Nlc3NUaWNrcywgcmVjVGlja3M7CkBAIC03NzgsMTQgKzc3NywxNCBAQAogI2VuZGlmCQogfQogCi1zdGF0aWMgdm9pZCBwbWFjX2lkZV9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBzcGVlZCkKK3N0YXRpYyB2b2lkIHBtYWNfaWRlX3NldF9kbWFfbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXBtYWNfaWRlX2h3aWZfdCAqcG1pZiA9CiAJCShwbWFjX2lkZV9od2lmX3QgKilkZXZfZ2V0X2RydmRhdGEoaHdpZi0+Z2VuZGV2LnBhcmVudCk7CiAJaW50IHJldCA9IDA7CiAJdTMyICp0aW1pbmdzLCAqdGltaW5nczIsIHRsWzJdOwogCXU4IHVuaXQgPSBkcml2ZS0+ZG4gJiAxOworCWNvbnN0IHU4IHNwZWVkID0gZHJpdmUtPmRtYV9tb2RlOwogCiAJdGltaW5ncyA9ICZwbWlmLT50aW1pbmdzW3VuaXRdOwogCXRpbWluZ3MyID0gJnBtaWYtPnRpbWluZ3NbdW5pdCsyXTsKQEAgLTE2NTEsOCArMTY1MCw4IEBACiAJCWlmICgoc3RhdHVzICYgRkxVU0gpID09IDApCiAJCQlicmVhazsKIAkJaWYgKCsrdGltZW91dCA+IDEwMCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiaWRlJWQsIGlkZV9kbWFfdGVzdF9pcnEgXAotCQkJdGltZW91dCBmbHVzaGluZyBjaGFubmVsXG4iLCBod2lmLT5pbmRleCk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJpZGUlZCwgaWRlX2RtYV90ZXN0X2lycSB0aW1lb3V0IGZsdXNoaW5nIGNoYW5uZWxcbiIsCisJCQkgICAgICAgaHdpZi0+aW5kZXgpOwogCQkJYnJlYWs7CiAJCX0KIAl9CQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcWQ2NXh4LmMgYi9kcml2ZXJzL2lkZS9xZDY1eHguYwppbmRleCA3NDY5NmVkLi4zZjAyNDRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9xZDY1eHguYworKysgYi9kcml2ZXJzL2lkZS9xZDY1eHguYwpAQCAtMTg5LDE1ICsxODksMTMgQEAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICUjeFxuIiwgZHJpdmUtPm5hbWUsIHRpbWluZyk7CiB9CiAKLXN0YXRpYyB2b2lkIHFkNjUwMF9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCitzdGF0aWMgdm9pZCBxZDY1MDBfc2V0X3Bpb19tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAl1MTYgKmlkID0gZHJpdmUtPmlkOwogCWludCBhY3RpdmVfdGltZSAgID0gMTc1OwogCWludCByZWNvdmVyeV90aW1lID0gNDE1OyAvKiB3b3JzdCBjYXNlIHZhbHVlcyBmcm9tIHRoZSBkb3MgZHJpdmVyICovCiAKLQkvKgotCSAqIEZJWE1FOiB1c2UgInBpbyIgdmFsdWUKLQkgKi8KKwkvKiBGSVhNRTogdXNlIGRyaXZlLT5waW9fbW9kZSB2YWx1ZSAqLwogCWlmICghcWRfZmluZF9kaXNrX3R5cGUoZHJpdmUsICZhY3RpdmVfdGltZSwgJnJlY292ZXJ5X3RpbWUpICYmCiAJICAgIChpZFtBVEFfSURfT0xEX1BJT19NT0RFU10gJiAweGZmKSAmJiAoaWRbQVRBX0lEX0ZJRUxEX1ZBTElEXSAmIDIpICYmCiAJICAgIGlkW0FUQV9JRF9FSURFX1BJT10gPj0gMjQwKSB7CkBAIC0yMTEsOSArMjA5LDkgQEAKIAkJCQlhY3RpdmVfdGltZSwgcmVjb3ZlcnlfdGltZSkpOwogfQogCi1zdGF0aWMgdm9pZCBxZDY1ODBfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggcGlvKQorc3RhdGljIHZvaWQgcWQ2NTgwX3NldF9waW9fbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOworCWNvbnN0IHU4IHBpbyA9IGRyaXZlLT5waW9fbW9kZSAtIFhGRVJfUElPXzA7CiAJc3RydWN0IGlkZV90aW1pbmcgKnQgPSBpZGVfdGltaW5nX2ZpbmRfbW9kZShYRkVSX1BJT18wICsgcGlvKTsKIAl1bnNpZ25lZCBpbnQgY3ljbGVfdGltZTsKIAlpbnQgYWN0aXZlX3RpbWUgICA9IDE3NTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NjMTIwMC5jIGIvZHJpdmVycy9pZGUvc2MxMjAwLmMKaW5kZXggZDQ2NzQ3OC4uMTM0ZjFmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2MxMjAwLmMKKysrIGIvZHJpdmVycy9pZGUvc2MxMjAwLmMKQEAgLTEyMiwxMyArMTIyLDEzIEBACiAJcmV0dXJuIG1hc2s7CiB9CiAKLXN0YXRpYyB2b2lkIHNjMTIwMF9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBtb2RlKQorc3RhdGljIHZvaWQgc2MxMjAwX3NldF9kbWFfbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdAkJKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgcGNpX2RldgkJKmRldiA9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKIAl1bnNpZ25lZCBpbnQJCXJlZywgdGltaW5nczsKIAl1bnNpZ25lZCBzaG9ydAkJcGNpX2Nsb2NrOwogCXVuc2lnbmVkIGludAkJYmFzZXJlZyA9IGh3aWYtPmNoYW5uZWwgPyAweDUwIDogMHg0MDsKKwljb25zdCB1OAkJbW9kZSA9IGRyaXZlLT5kbWFfbW9kZTsKIAogCXN0YXRpYyBjb25zdCB1MzIgdWRtYV90aW1pbmdbM11bM10gPSB7CiAJCXsgMHgwMDkyMTI1MCwgMHgwMDkxMTE0MCwgMHgwMDkxMTAzMCB9LApAQCAtMTkzLDEwICsxOTMsMTAgQEAKICAqIHdpbGwgaGF2ZSB2YWxpZCBkZWZhdWx0IFBJTyB0aW1pbmdzIHNldCB1cCBiZWZvcmUgd2UgZ2V0IGhlcmUuCiAgKi8KIAotc3RhdGljIHZvaWQgc2MxMjAwX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKK3N0YXRpYyB2b2lkIHNjMTIwMF9zZXRfcGlvX21vZGUoaWRlX2h3aWZfdCAqaHdpZiwgaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QJKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlpbnQJCW1vZGUgPSAtMTsKKwljb25zdCB1OAlwaW8gPSBkcml2ZS0+cGlvX21vZGUgLSBYRkVSX1BJT18wOwogCiAJLyoKIAkgKiBiYWQgYWJ1c2Ugb2YgLT5zZXRfcGlvX21vZGUgaW50ZXJmYWNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zY2NfcGF0YS5jIGIvZHJpdmVycy9pZGUvc2NjX3BhdGEuYwppbmRleCAxMTA0YmIzLi5iN2Y1YjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zY2NfcGF0YS5jCisrKyBiL2RyaXZlcnMvaWRlL3NjY19wYXRhLmMKQEAgLTE5OSwxNiArMTk5LDE1IEBACiAKIC8qKgogICoJc2NjX3NldF9waW9fbW9kZQktCXNldCBob3N0IGNvbnRyb2xsZXIgZm9yIFBJTyBtb2RlCisgKglAaHdpZjogcG9ydAogICoJQGRyaXZlOiBkcml2ZQotICoJQHBpbzogUElPIG1vZGUgbnVtYmVyCiAgKgogICoJTG9hZCB0aGUgdGltaW5nIHNldHRpbmdzIGZvciB0aGlzIGRldmljZSBtb2RlIGludG8gdGhlCiAgKgljb250cm9sbGVyLgogICovCiAKLXN0YXRpYyB2b2lkIHNjY19zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCitzdGF0aWMgdm9pZCBzY2Nfc2V0X3Bpb19tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHNjY19wb3J0cyAqcG9ydHMgPSBpZGVfZ2V0X2h3aWZkYXRhKGh3aWYpOwogCXVuc2lnbmVkIGxvbmcgY3RsX2Jhc2UgPSBwb3J0cy0+Y3RsOwogCXVuc2lnbmVkIGxvbmcgY2NrY3RybF9wb3J0ID0gY3RsX2Jhc2UgKyAweGZmMDsKQEAgLTIxNiw2ICsyMTUsNyBAQAogCXVuc2lnbmVkIGxvbmcgcGlvY3RfcG9ydCA9IGN0bF9iYXNlICsgMHgwMDQ7CiAJdW5zaWduZWQgbG9uZyByZWc7CiAJaW50IG9mZnNldDsKKwljb25zdCB1OCBwaW8gPSBkcml2ZS0+cGlvX21vZGUgLSBYRkVSX1BJT18wOwogCiAJcmVnID0gaW5fYmUzMigodm9pZCBfX2lvbWVtICopY2NrY3RybF9wb3J0KTsKIAlpZiAocmVnICYgQ0NLQ1RSTF9BVEFDTEtPRU4pIHsKQEAgLTIzMSwxNiArMjMxLDE1IEBACiAKIC8qKgogICoJc2NjX3NldF9kbWFfbW9kZQktCXNldCBob3N0IGNvbnRyb2xsZXIgZm9yIERNQSBtb2RlCisgKglAaHdpZjogcG9ydAogICoJQGRyaXZlOiBkcml2ZQotICoJQHNwZWVkOiBETUEgbW9kZQogICoKICAqCUxvYWQgdGhlIHRpbWluZyBzZXR0aW5ncyBmb3IgdGhpcyBkZXZpY2UgbW9kZSBpbnRvIHRoZQogICoJY29udHJvbGxlci4KICAqLwogCi1zdGF0aWMgdm9pZCBzY2Nfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggc3BlZWQpCitzdGF0aWMgdm9pZCBzY2Nfc2V0X2RtYV9tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHNjY19wb3J0cyAqcG9ydHMgPSBpZGVfZ2V0X2h3aWZkYXRhKGh3aWYpOwogCXVuc2lnbmVkIGxvbmcgY3RsX2Jhc2UgPSBwb3J0cy0+Y3RsOwogCXVuc2lnbmVkIGxvbmcgY2NrY3RybF9wb3J0ID0gY3RsX2Jhc2UgKyAweGZmMDsKQEAgLTI1NCw2ICsyNTMsNyBAQAogCWludCBvZmZzZXQsIGlkeDsKIAl1bnNpZ25lZCBsb25nIHJlZzsKIAl1bnNpZ25lZCBsb25nIGpjYWN0c2VsOworCWNvbnN0IHU4IHNwZWVkID0gZHJpdmUtPmRtYV9tb2RlOwogCiAJcmVnID0gaW5fYmUzMigodm9pZCBfX2lvbWVtICopY2NrY3RybF9wb3J0KTsKIAlpZiAocmVnICYgQ0NLQ1RSTF9BVEFDTEtPRU4pIHsKQEAgLTg3MiwyMCArODcyLDE4IEBACiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHNjY19yZW1vdmUpLAogfTsKIAotc3RhdGljIGludCBzY2NfaWRlX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNjY19pZGVfaW5pdCh2b2lkKQogewogCXJldHVybiBpZGVfcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2NjX3BjaV9kcml2ZXIpOwogfQogCi1tb2R1bGVfaW5pdChzY2NfaWRlX2luaXQpOwotLyogLS0gTm8gZXhpdCBjb2RlPwotc3RhdGljIHZvaWQgc2NjX2lkZV9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgc2NjX2lkZV9leGl0KHZvaWQpCiB7Ci0JaWRlX3BjaV91bnJlZ2lzdGVyX2RyaXZlcigmc2NjX3BjaV9kcml2ZXIpOworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmc2NjX3BjaV9kcml2ZXIpOwogfQotbW9kdWxlX2V4aXQoc2NjX2lkZV9leGl0KTsKLSAqLwogCittb2R1bGVfaW5pdChzY2NfaWRlX2luaXQpOworbW9kdWxlX2V4aXQoc2NjX2lkZV9leGl0KTsKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJQQ0kgZHJpdmVyIG1vZHVsZSBmb3IgVG9zaGliYSBTQ0MgSURFIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zZXJ2ZXJ3b3Jrcy5jIGIvZHJpdmVycy9pZGUvc2VydmVyd29ya3MuYwppbmRleCBiNjU1NGVmLi4zNWZiOGRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zZXJ2ZXJ3b3Jrcy5jCisrKyBiL2RyaXZlcnMvaWRlL3NlcnZlcndvcmtzLmMKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBNaWNoZWwgQXVicnkKICAqIENvcHlyaWdodCAoQykgMTk5OC0yMDAwIEFuZHJ6ZWogS3J6eXN6dG9mb3dpY3oKICAqIENvcHlyaWdodCAoQykgMTk5OC0yMDAwIEFuZHJlIEhlZHJpY2sgPGFuZHJlQGxpbnV4LWlkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpICAgICAgMjAwNyBCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDctMjAxMCBCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6CiAgKiBQb3J0aW9ucyBjb3B5cmlnaHQgKGMpIDIwMDEgU3VuIE1pY3Jvc3lzdGVtcwogICoKICAqCkBAIC01Miw4ICs1Miw2IEBACiAJTlVMTAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2ICppc2FfZGV2OwotCiBzdGF0aWMgaW50IGNoZWNrX2luX2RyaXZlX2xpc3RzIChpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IGNoYXIgKipsaXN0KQogewogCWNoYXIgKm0gPSAoY2hhciAqKSZkcml2ZS0+aWRbQVRBX0lEX1BST0RdOwpAQCAtNjcsMjYgKzY1LDE0IEBACiBzdGF0aWMgdTggc3Z3a3NfdWRtYV9maWx0ZXIoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGRyaXZlLT5od2lmLT5kZXYpOwotCXU4IG1hc2sgPSAwOwogCi0JaWYgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQxMDAwSURFKQorCWlmIChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0hUMTAwMElERSkgewogCQlyZXR1cm4gMHgxZjsKLQlpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19PU0I0SURFKSB7Ci0JCXUzMiByZWcgPSAwOwotCQlpZiAoaXNhX2RldikKLQkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChpc2FfZGV2LCAweDY0LCAmcmVnKTsKLQkJCQotCQkvKgotCQkgKglEb24ndCBlbmFibGUgVURNQSBvbiBkaXNrIGRldmljZXMgZm9yIHRoZSBtb21lbnQKLQkJICovCi0JCWlmKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKLQkJCXJldHVybiAwOwotCQkvKiBDaGVjayB0aGUgT1NCNCBETUEzMyBlbmFibGUgYml0ICovCi0JCXJldHVybiAoKHJlZyAmIDB4MDAwMDQwMDApID09IDB4MDAwMDQwMDApID8gMHgwNyA6IDA7CiAJfSBlbHNlIGlmIChkZXYtPnJldmlzaW9uIDwgU1ZXS1NfQ1NCNV9SRVZJU0lPTl9ORVcpIHsKIAkJcmV0dXJuIDB4MDc7Ci0JfSBlbHNlIGlmIChkZXYtPnJldmlzaW9uID49IFNWV0tTX0NTQjVfUkVWSVNJT05fTkVXKSB7Ci0JCXU4IGJ0ciA9IDAsIG1vZGU7CisJfSBlbHNlIHsKKwkJdTggYnRyID0gMCwgbW9kZSwgbWFzazsKKwogCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4NUEsICZidHIpOwogCQltb2RlID0gYnRyICYgMHgzOwogCkBAIC0xMDEsMTMgKzg3LDkgQEAKIAkJY2FzZSAxOgkgbWFzayA9IDB4MDc7IGJyZWFrOwogCQlkZWZhdWx0OiBtYXNrID0gMHgwMDsgYnJlYWs7CiAJCX0KLQl9Ci0JaWYgKCgoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I2SURFKSB8fAotCSAgICAgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNklERTIpKSAmJgotCSAgICAoIShQQ0lfRlVOQyhkZXYtPmRldmZuKSAmIDEpKSkKLQkJbWFzayA9IDB4MWY7CiAKLQlyZXR1cm4gbWFzazsKKwkJcmV0dXJuIG1hc2s7CisJfQogfQogCiBzdGF0aWMgdTggc3Z3a3NfY3NiX2NoZWNrIChzdHJ1Y3QgcGNpX2RldiAqZGV2KQpAQCAtMTI0LDEyICsxMDYsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgc3Z3a3Nfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggcGlvKQorc3RhdGljIHZvaWQgc3Z3a3Nfc2V0X3Bpb19tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlzdGF0aWMgY29uc3QgdTggcGlvX21vZGVzW10gPSB7IDB4NWQsIDB4NDcsIDB4MzQsIDB4MjIsIDB4MjAgfTsKIAlzdGF0aWMgY29uc3QgdTggZHJpdmVfcGNpW10gPSB7IDB4NDEsIDB4NDAsIDB4NDMsIDB4NDIgfTsKIAotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGRyaXZlLT5od2lmLT5kZXYpOworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CisJY29uc3QgdTggcGlvID0gZHJpdmUtPnBpb19tb2RlIC0gWEZFUl9QSU9fMDsKIAogCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIGRyaXZlX3BjaVtkcml2ZS0+ZG5dLCBwaW9fbW9kZXNbcGlvXSk7CiAKQEAgLTE0NSwxNCArMTI4LDE0IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBzdndrc19zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBzcGVlZCkKK3N0YXRpYyB2b2lkIHN2d2tzX3NldF9kbWFfbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJc3RhdGljIGNvbnN0IHU4IHVkbWFfbW9kZXNbXQkJPSB7IDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUgfTsKIAlzdGF0aWMgY29uc3QgdTggZG1hX21vZGVzW10JCT0geyAweDc3LCAweDIxLCAweDIwIH07CiAJc3RhdGljIGNvbnN0IHU4IGRyaXZlX3BjaTJbXQkJPSB7IDB4NDUsIDB4NDQsIDB4NDcsIDB4NDYgfTsKIAotCWlkZV9od2lmX3QgKmh3aWYJPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgcGNpX2RldiAqZGV2CT0gdG9fcGNpX2Rldihod2lmLT5kZXYpOworCWNvbnN0IHU4IHNwZWVkCQk9IGRyaXZlLT5kbWFfbW9kZTsKIAl1OCB1bml0CQkJPSBkcml2ZS0+ZG4gJiAxOwogCiAJdTggdWx0cmFfZW5hYmxlCSA9IDAsIHVsdHJhX3RpbWluZyA9IDAsIGRtYV90aW1pbmcgPSAwOwpAQCAtMTg1LDggKzE2OCw5IEBACiAKIAkvKiBPU0I0IDogU291dGggQnJpZGdlIGFuZCBJREUgKi8KIAlpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19PU0I0SURFKSB7Ci0JCWlzYV9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLAotCQkJICBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX09TQjQsIE5VTEwpOworCQlzdHJ1Y3QgcGNpX2RldiAqaXNhX2RldiA9CisJCQlwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLAorCQkJCQlQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX09TQjQsIE5VTEwpOwogCQlpZiAoaXNhX2RldikgewogCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGlzYV9kZXYsIDB4NjQsICZyZWcpOwogCQkJcmVnICY9IH4weDAwMDAyMDAwOyAvKiBkaXNhYmxlIDYwMG5zIGludGVycnVwdCBtYXNrICovCkBAIC0xOTUsNiArMTc5LDcgQEAKIAkJCQkJImVuYWJsZWQuXG4iLCBwY2lfbmFtZShkZXYpKTsKIAkJCXJlZyB8PSAgMHgwMDAwNDAwMDsgLyogZW5hYmxlIFVETUEvMzMgc3VwcG9ydCAqLwogCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChpc2FfZGV2LCAweDY0LCByZWcpOworCQkJcGNpX2Rldl9wdXQoaXNhX2Rldik7CiAJCX0KIAl9CiAKQEAgLTM0Myw3ICszMjgsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9vcHMgb3NiNF9wb3J0X29wcyA9IHsKIAkuc2V0X3Bpb19tb2RlCQk9IHN2d2tzX3NldF9waW9fbW9kZSwKIAkuc2V0X2RtYV9tb2RlCQk9IHN2d2tzX3NldF9kbWFfbW9kZSwKLQkudWRtYV9maWx0ZXIJCT0gc3Z3a3NfdWRtYV9maWx0ZXIsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyBzdndrc19wb3J0X29wcyA9IHsKQEAgLTQ2MCw2ICs0NDQsNiBAQAogbW9kdWxlX2luaXQoc3Z3a3NfaWRlX2luaXQpOwogbW9kdWxlX2V4aXQoc3Z3a3NfaWRlX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEF1YnJ5LiBBbmRyemVqIEtyenlzenRvZm93aWN6LCBBbmRyZSBIZWRyaWNrIik7CitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEF1YnJ5LiBBbmRyemVqIEtyenlzenRvZm93aWN6LCBBbmRyZSBIZWRyaWNrLCBCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBDSSBkcml2ZXIgbW9kdWxlIGZvciBTZXJ2ZXJ3b3JrcyBPU0I0L0NTQjUvQ1NCNiBJREUiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NnaWlvYzQuYyBiL2RyaXZlcnMvaWRlL3NnaWlvYzQuYwppbmRleCBiN2Q2MWRjLi5lM2VhNTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zZ2lpb2M0LmMKKysrIGIvZHJpdmVycy9pZGUvc2dpaW9jNC5jCkBAIC0yNTUsNyArMjU1LDcgQEAKIAlyZXR1cm4gZG1hX3N0YXQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNnaWlvYzRfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggc3BlZWQpCitzdGF0aWMgdm9pZCBzZ2lpb2M0X3NldF9kbWFfbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NpaW1hZ2UuYyBiL2RyaXZlcnMvaWRlL3NpaW1hZ2UuYwppbmRleCBkOTVkZjUyLi5kZGVkYTQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zaWltYWdlLmMKKysrIGIvZHJpdmVycy9pZGUvc2lpbWFnZS5jCkBAIC0yMjksMTkgKzIyOSwxOCBAQAogCiAvKioKICAqCXNpbF9zZXRfcGlvX21vZGUJLQlzZXQgaG9zdCBjb250cm9sbGVyIGZvciBQSU8gbW9kZQorICoJQGh3aWY6IHBvcnQKICAqCUBkcml2ZTogZHJpdmUKLSAqCUBwaW86IFBJTyBtb2RlIG51bWJlcgogICoKICAqCUxvYWQgdGhlIHRpbWluZyBzZXR0aW5ncyBmb3IgdGhpcyBkZXZpY2UgbW9kZSBpbnRvIHRoZQogICoJY29udHJvbGxlci4KICAqLwogCi1zdGF0aWMgdm9pZCBzaWxfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggcGlvKQorc3RhdGljIHZvaWQgc2lsX3NldF9waW9fbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJc3RhdGljIGNvbnN0IHUxNiB0Zl9zcGVlZFtdICAgPSB7IDB4MzI4YSwgMHgyMjgzLCAweDEyODEsIDB4MTBjMywgMHgxMGMxIH07CiAJc3RhdGljIGNvbnN0IHUxNiBkYXRhX3NwZWVkW10gPSB7IDB4MzI4YSwgMHgyMjgzLCAweDExMDQsIDB4MTBjMywgMHgxMGMxIH07CiAKLQlpZGVfaHdpZl90ICpod2lmCT0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHBjaV9kZXYgKmRldgk9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKIAlpZGVfZHJpdmVfdCAqcGFpcgk9IGlkZV9nZXRfcGFpcl9kZXYoZHJpdmUpOwogCXUzMiBzcGVlZHQJCT0gMDsKQEAgLTI0OSw2ICsyNDgsNyBAQAogCXVuc2lnbmVkIGxvbmcgYWRkcgk9IHNpaW1hZ2Vfc2VsZGV2KGRyaXZlLCAweDA0KTsKIAl1bnNpZ25lZCBsb25nIHRmYWRkcgk9IHNpaW1hZ2Vfc2VscmVnKGh3aWYsCTB4MDIpOwogCXVuc2lnbmVkIGxvbmcgYmFzZQk9ICh1bnNpZ25lZCBsb25nKWh3aWYtPmh3aWZfZGF0YTsKKwljb25zdCB1OCBwaW8JCT0gZHJpdmUtPnBpb19tb2RlIC0gWEZFUl9QSU9fMDsKIAl1OCB0Zl9waW8JCT0gcGlvOwogCXU4IG1taW8JCQk9IChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX01NSU8pID8gMSA6IDA7CiAJdTggYWRkcl9tYXNrCQk9IGh3aWYtPmNoYW5uZWwgPyAobW1pbyA/IDB4RjQgOiAweDg0KQpAQCAtMjU4LDcgKzI1OCw3IEBACiAKIAkvKiB0cmltICp0YXNrZmlsZSogUElPIHRvIHRoZSBzbG93ZXN0IG9mIHRoZSBtYXN0ZXIvc2xhdmUgKi8KIAlpZiAocGFpcikgewotCQl1OCBwYWlyX3BpbyA9IGlkZV9nZXRfYmVzdF9waW9fbW9kZShwYWlyLCAyNTUsIDQpOworCQl1OCBwYWlyX3BpbyA9IHBhaXItPnBpb19tb2RlIC0gWEZFUl9QSU9fMDsKIAogCQlpZiAocGFpcl9waW8gPCB0Zl9waW8pCiAJCQl0Zl9waW8gPSBwYWlyX3BpbzsKQEAgLTI4OSwxOSArMjg5LDE4IEBACiAKIC8qKgogICoJc2lsX3NldF9kbWFfbW9kZQktCXNldCBob3N0IGNvbnRyb2xsZXIgZm9yIERNQSBtb2RlCisgKglAaHdpZjogcG9ydAogICoJQGRyaXZlOiBkcml2ZQotICoJQHNwZWVkOiBETUEgbW9kZQogICoKICAqCVR1bmUgdGhlIFNpSSBjaGlwc2V0IGZvciB0aGUgZGVzaXJlZCBETUEgbW9kZS4KICAqLwogCi1zdGF0aWMgdm9pZCBzaWxfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggc3BlZWQpCitzdGF0aWMgdm9pZCBzaWxfc2V0X2RtYV9tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlzdGF0aWMgY29uc3QgdTggdWx0cmE2W10gPSB7IDB4MEYsIDB4MEIsIDB4MDcsIDB4MDUsIDB4MDMsIDB4MDIsIDB4MDEgfTsKIAlzdGF0aWMgY29uc3QgdTggdWx0cmE1W10gPSB7IDB4MEMsIDB4MDcsIDB4MDUsIDB4MDQsIDB4MDIsIDB4MDEgfTsKIAlzdGF0aWMgY29uc3QgdTE2IGRtYVtdCSA9IHsgMHgyMjA4LCAweDEwQzIsIDB4MTBDMSB9OwogCi0JaWRlX2h3aWZfdCAqaHdpZgk9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJdW5zaWduZWQgbG9uZyBiYXNlCT0gKHVuc2lnbmVkIGxvbmcpaHdpZi0+aHdpZl9kYXRhOwogCXUxNiB1bHRyYSA9IDAsIG11bHRpCT0gMDsKQEAgLTMxMSw2ICszMTAsNyBAQAogCQkJCQkJOiAobW1pbyA/IDB4QjQgOiAweDgwKTsKIAl1bnNpZ25lZCBsb25nIG1hCT0gc2lpbWFnZV9zZWxkZXYoZHJpdmUsIDB4MDgpOwogCXVuc2lnbmVkIGxvbmcgdWEJPSBzaWltYWdlX3NlbGRldihkcml2ZSwgMHgwQyk7CisJY29uc3QgdTggc3BlZWQJCT0gZHJpdmUtPmRtYV9tb2RlOwogCiAJc2NzYyAgPSBzaWxfaW9yZWFkOCAoZGV2LCBiYXNlICsgKG1taW8gPyAweDRBIDogMHg4QSkpOwogCW1vZGUgID0gc2lsX2lvcmVhZDggKGRldiwgYmFzZSArIGFkZHJfbWFzayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zaXM1NTEzLmMgYi9kcml2ZXJzL2lkZS9zaXM1NTEzLmMKaW5kZXggNDY4NzA2MC4uZGI3ZjRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2lzNTUxMy5jCisrKyBiL2RyaXZlcnMvaWRlL3NpczU1MTMuYwpAQCAtMjkwLDEwICsyOTAsMTAgQEAKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg0YiwgcndfcHJlZmV0Y2gpOwogfQogCi1zdGF0aWMgdm9pZCBzaXNfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggcGlvKQorc3RhdGljIHZvaWQgc2lzX3NldF9waW9fbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJY29uZmlnX2RyaXZlX2FydF9yd3AoZHJpdmUpOwotCXNpc19wcm9ncmFtX3RpbWluZ3MoZHJpdmUsIFhGRVJfUElPXzAgKyBwaW8pOworCXNpc19wcm9ncmFtX3RpbWluZ3MoZHJpdmUsIGRyaXZlLT5waW9fbW9kZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNpc19hdGExMzNfcHJvZ3JhbV91ZG1hX3RpbWluZ3MoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBtb2RlKQpAQCAtMzQwLDggKzM0MCwxMCBAQAogCQlzaXNfYXRhMzNfcHJvZ3JhbV91ZG1hX3RpbWluZ3MoZHJpdmUsIG1vZGUpOwogfQogCi1zdGF0aWMgdm9pZCBzaXNfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggc3BlZWQpCitzdGF0aWMgdm9pZCBzaXNfc2V0X2RtYV9tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKKwljb25zdCB1OCBzcGVlZCA9IGRyaXZlLT5kbWFfbW9kZTsKKwogCWlmIChzcGVlZCA+PSBYRkVSX1VETUFfMCkKIAkJc2lzX3Byb2dyYW1fdWRtYV90aW1pbmdzKGRyaXZlLCBzcGVlZCk7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2w4MmMxMDUuYyBiL2RyaXZlcnMvaWRlL3NsODJjMTA1LmMKaW5kZXggM2MyYmJmMC4uZjIxZGMyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2w4MmMxMDUuYworKysgYi9kcml2ZXJzL2lkZS9zbDgyYzEwNS5jCkBAIC02MywxMiArNjMsMTMgQEAKIC8qCiAgKiBDb25maWd1cmUgdGhlIGNoaXBzZXQgZm9yIFBJTyBtb2RlLgogICovCi1zdGF0aWMgdm9pZCBzbDgyYzEwNV9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCitzdGF0aWMgdm9pZCBzbDgyYzEwNV9zZXRfcGlvX21vZGUoaWRlX2h3aWZfdCAqaHdpZiwgaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGRyaXZlLT5od2lmLT5kZXYpOworCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJdW5zaWduZWQgbG9uZyB0aW1pbmdzCT0gKHVuc2lnbmVkIGxvbmcpaWRlX2dldF9kcml2ZWRhdGEoZHJpdmUpOwogCWludCByZWcJCQk9IDB4NDQgKyBkcml2ZS0+ZG4gKiA0OwogCXUxNiBkcnZfY3RybDsKKwljb25zdCB1OCBwaW8JCT0gZHJpdmUtPnBpb19tb2RlIC0gWEZFUl9QSU9fMDsKIAogCWRydl9jdHJsID0gZ2V0X3Bpb190aW1pbmdzKGRyaXZlLCBwaW8pOwogCkBAIC05MSwxMSArOTIsMTIgQEAKIC8qCiAgKiBDb25maWd1cmUgdGhlIGNoaXBzZXQgZm9yIERNQSBtb2RlLgogICovCi1zdGF0aWMgdm9pZCBzbDgyYzEwNV9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBzcGVlZCkKK3N0YXRpYyB2b2lkIHNsODJjMTA1X3NldF9kbWFfbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJc3RhdGljIHUxNiBtd2RtYV90aW1pbmdzW10gPSB7MHgwNzA3LCAweDAyMDEsIDB4MDIwMH07CiAJdW5zaWduZWQgbG9uZyB0aW1pbmdzID0gKHVuc2lnbmVkIGxvbmcpaWRlX2dldF9kcml2ZWRhdGEoZHJpdmUpOwogCXUxNiBkcnZfY3RybDsKKwljb25zdCB1OCBzcGVlZCA9IGRyaXZlLT5kbWFfbW9kZTsKIAogCWRydl9jdHJsID0gbXdkbWFfdGltaW5nc1tzcGVlZCAtIFhGRVJfTVdfRE1BXzBdOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zbGM5MGU2Ni5jIGIvZHJpdmVycy9pZGUvc2xjOTBlNjYuYwppbmRleCAxY2NmYjQwLi44NjRmZmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zbGM5MGU2Ni5jCisrKyBiL2RyaXZlcnMvaWRlL3NsYzkwZTY2LmMKQEAgLTE4LDkgKzE4LDggQEAKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhzbGM5MGU2Nl9sb2NrKTsKIAotc3RhdGljIHZvaWQgc2xjOTBlNjZfc2V0X3Bpb19tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggcGlvKQorc3RhdGljIHZvaWQgc2xjOTBlNjZfc2V0X3Bpb19tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmCT0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHBjaV9kZXYgKmRldgk9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKIAlpbnQgaXNfc2xhdmUJCT0gZHJpdmUtPmRuICYgMTsKIAlpbnQgbWFzdGVyX3BvcnQJCT0gaHdpZi0+Y2hhbm5lbCA/IDB4NDIgOiAweDQwOwpAQCAtMjksNiArMjgsOCBAQAogCXUxNiBtYXN0ZXJfZGF0YTsKIAl1OCBzbGF2ZV9kYXRhOwogCWludCBjb250cm9sID0gMDsKKwljb25zdCB1OCBwaW8gPSBkcml2ZS0+cGlvX21vZGUgLSBYRkVSX1BJT18wOworCiAJCQkJICAgICAvKiBJU1AgIFJUQyAqLwogCXN0YXRpYyBjb25zdCB1OCB0aW1pbmdzW11bMl0gPSB7CiAJCQkJCXsgMCwgMCB9LApAQCAtNzEsMTQgKzcyLDE0IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2xjOTBlNjZfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBzbGM5MGU2Nl9zZXRfZG1hX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBzcGVlZCkKK3N0YXRpYyB2b2lkIHNsYzkwZTY2X3NldF9kbWFfbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZgk9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYJPSB0b19wY2lfZGV2KGh3aWYtPmRldik7CiAJdTggbWFzbGF2ZQkJPSBod2lmLT5jaGFubmVsID8gMHg0MiA6IDB4NDA7CiAJaW50IHNpdHJlID0gMCwgYV9zcGVlZAk9IDcgPDwgKGRyaXZlLT5kbiAqIDQpOwogCWludCB1X3NwZWVkID0gMCwgdV9mbGFnID0gMSA8PCBkcml2ZS0+ZG47CiAJdTE2CQkJcmVnNDA0MiwgcmVnNDQsIHJlZzQ4LCByZWc0YTsKKwljb25zdCB1OCBzcGVlZAkJPSBkcml2ZS0+ZG1hX21vZGU7CiAKIAlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIG1hc2xhdmUsICZyZWc0MDQyKTsKIAlzaXRyZSA9IChyZWc0MDQyICYgMHg0MDAwKSA/IDEgOiAwOwpAQCAtOTgsNyArOTksNiBAQAogCQl9CiAJfSBlbHNlIHsKIAkJY29uc3QgdTggbXdkbWFfdG9fcGlvW10gPSB7IDAsIDMsIDQgfTsKLQkJdTggcGlvOwogCiAJCWlmIChyZWc0OCAmIHVfZmxhZykKIAkJCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIDB4NDgsIHJlZzQ4ICYgfnVfZmxhZyk7CkBAIC0xMDYsMTEgKzEwNiwxMiBAQAogCQkJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgMHg0YSwgcmVnNGEgJiB+YV9zcGVlZCk7CiAKIAkJaWYgKHNwZWVkID49IFhGRVJfTVdfRE1BXzApCi0JCQlwaW8gPSBtd2RtYV90b19waW9bc3BlZWQgLSBYRkVSX01XX0RNQV8wXTsKKwkJCWRyaXZlLT5waW9fbW9kZSA9CisJCQkJbXdkbWFfdG9fcGlvW3NwZWVkIC0gWEZFUl9NV19ETUFfMF0gKyBYRkVSX1BJT18wOwogCQllbHNlCi0JCQlwaW8gPSAyOyAvKiBvbmx5IFNXRE1BMiBpcyBhbGxvd2VkICovCisJCQlkcml2ZS0+cGlvX21vZGUgPSBYRkVSX1BJT18yOyAvKiBmb3IgU1dETUEyICovCiAKLQkJc2xjOTBlNjZfc2V0X3Bpb19tb2RlKGRyaXZlLCBwaW8pOworCQlzbGM5MGU2Nl9zZXRfcGlvX21vZGUoaHdpZiwgZHJpdmUpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvdGM4NmMwMDEuYyBiL2RyaXZlcnMvaWRlL3RjODZjMDAxLmMKaW5kZXggMDVhOTNkNmIuLmU0NDRkMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3RjODZjMDAxLmMKKysrIGIvZHJpdmVycy9pZGUvdGM4NmMwMDEuYwpAQCAtMTMsMTEgKzEzLDExIEBACiAKICNkZWZpbmUgRFJWX05BTUUgInRjODZjMDAxIgogCi1zdGF0aWMgdm9pZCB0Yzg2YzAwMV9zZXRfbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHNwZWVkKQorc3RhdGljIHZvaWQgdGM4NmMwMDFfc2V0X21vZGUoaWRlX2h3aWZfdCAqaHdpZiwgaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYJPSBkcml2ZS0+aHdpZjsKIAl1bnNpZ25lZCBsb25nIHNjcl9wb3J0CT0gaHdpZi0+Y29uZmlnX2RhdGEgKyAoZHJpdmUtPmRuID8gMHgwMiA6IDB4MDApOwogCXUxNiBtb2RlLCBzY3IJCT0gaW53KHNjcl9wb3J0KTsKKwljb25zdCB1OCBzcGVlZAkJPSBkcml2ZS0+ZG1hX21vZGU7CiAKIAlzd2l0Y2ggKHNwZWVkKSB7CiAJY2FzZSBYRkVSX1VETUFfNDoJbW9kZSA9IDB4MDBjMDsgYnJlYWs7CkBAIC00MSw5ICs0MSwxMCBAQAogCW91dHcoc2NyLCBzY3JfcG9ydCk7CiB9CiAKLXN0YXRpYyB2b2lkIHRjODZjMDAxX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKK3N0YXRpYyB2b2lkIHRjODZjMDAxX3NldF9waW9fbW9kZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JdGM4NmMwMDFfc2V0X21vZGUoZHJpdmUsIFhGRVJfUElPXzAgKyBwaW8pOworCWRyaXZlLT5kbWFfbW9kZSA9IGRyaXZlLT5waW9fbW9kZTsKKwl0Yzg2YzAwMV9zZXRfbW9kZShod2lmLCBkcml2ZSk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS90cmlmbGV4LmMgYi9kcml2ZXJzL2lkZS90cmlmbGV4LmMKaW5kZXggODc3M2MzYi4uNzk1MzQ0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdHJpZmxleC5jCisrKyBiL2RyaXZlcnMvaWRlL3RyaWZsZXguYwpAQCAtMzQsOSArMzQsOCBAQAogCiAjZGVmaW5lIERSVl9OQU1FICJ0cmlmbGV4IgogCi1zdGF0aWMgdm9pZCB0cmlmbGV4X3NldF9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggc3BlZWQpCitzdGF0aWMgdm9pZCB0cmlmbGV4X3NldF9tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKIAl1MzIgdHJpZmxleF90aW1pbmdzID0gMDsKIAl1MTYgdGltaW5nID0gMDsKQEAgLTQ0LDcgKzQzLDcgQEAKIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIGNoYW5uZWxfb2Zmc2V0LCAmdHJpZmxleF90aW1pbmdzKTsKIAotCXN3aXRjaChzcGVlZCkgeworCXN3aXRjaCAoZHJpdmUtPmRtYV9tb2RlKSB7CiAJCWNhc2UgWEZFUl9NV19ETUFfMjoKIAkJCXRpbWluZyA9IDB4MDEwMzsgCiAJCQlicmVhazsKQEAgLTgyLDkgKzgxLDEwIEBACiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIGNoYW5uZWxfb2Zmc2V0LCB0cmlmbGV4X3RpbWluZ3MpOwogfQogCi1zdGF0aWMgdm9pZCB0cmlmbGV4X3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHBpbykKK3N0YXRpYyB2b2lkIHRyaWZsZXhfc2V0X3Bpb19tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQl0cmlmbGV4X3NldF9tb2RlKGRyaXZlLCBYRkVSX1BJT18wICsgcGlvKTsKKwlkcml2ZS0+ZG1hX21vZGUgPSBkcml2ZS0+cGlvX21vZGU7CisJdHJpZmxleF9zZXRfbW9kZShod2lmLCBkcml2ZSk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfb3BzIHRyaWZsZXhfcG9ydF9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS90eDQ5MzhpZGUuYyBiL2RyaXZlcnMvaWRlL3R4NDkzOGlkZS5jCmluZGV4IGZkNTljMGQuLjFkODBmMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3R4NDkzOGlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL3R4NDkzOGlkZS5jCkBAIC01NiwxNiArNTYsMTUgQEAKIAkJICAgICAmdHg0OTM4X2VidXNjcHRyLT5jcltlYnVzX2NoXSk7CiB9CiAKLXN0YXRpYyB2b2lkIHR4NDkzOGlkZV9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCitzdGF0aWMgdm9pZCB0eDQ5MzhpZGVfc2V0X3Bpb19tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHR4NDkzOGlkZV9wbGF0Zm9ybV9pbmZvICpwZGF0YSA9IGh3aWYtPmRldi0+cGxhdGZvcm1fZGF0YTsKLQl1OCBzYWZlID0gcGlvOworCXU4IHNhZmUgPSBkcml2ZS0+cGlvX21vZGUgLSBYRkVSX1BJT18wOwogCWlkZV9kcml2ZV90ICpwYWlyOwogCiAJcGFpciA9IGlkZV9nZXRfcGFpcl9kZXYoZHJpdmUpOwogCWlmIChwYWlyKQotCQlzYWZlID0gbWluKHNhZmUsIGlkZV9nZXRfYmVzdF9waW9fbW9kZShwYWlyLCAyNTUsIDUpKTsKKwkJc2FmZSA9IG1pbihzYWZlLCBwYWlyLT5waW9fbW9kZSAtIFhGRVJfUElPXzApOwogCXR4NDkzOGlkZV90dW5lX2VidXNjKHBkYXRhLT5lYnVzX2NoLCBwZGF0YS0+Z2J1c19jbG9jaywgc2FmZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3R4NDkzOWlkZS5jIGIvZHJpdmVycy9pZGUvdHg0OTM5aWRlLmMKaW5kZXggNjRiNThlYy4uM2M3MzY3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdHg0OTM5aWRlLmMKKysrIGIvZHJpdmVycy9pZGUvdHg0OTM5aWRlLmMKQEAgLTEwNCwxNyArMTA0LDE3IEBACiAKICNkZWZpbmUgVFg0OTM5SURFX0JBU0UoaHdpZikJKCh2b2lkIF9faW9tZW0gKikoaHdpZiktPmV4dHJhX2Jhc2UpCiAKLXN0YXRpYyB2b2lkIHR4NDkzOWlkZV9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCitzdGF0aWMgdm9pZCB0eDQ5MzlpZGVfc2V0X3Bpb19tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJaW50IGlzX3NsYXZlID0gZHJpdmUtPmRuOwogCXUzMiBtYXNrLCB2YWw7CisJY29uc3QgdTggcGlvID0gZHJpdmUtPnBpb19tb2RlIC0gWEZFUl9QSU9fMDsKIAl1OCBzYWZlID0gcGlvOwogCWlkZV9kcml2ZV90ICpwYWlyOwogCiAJcGFpciA9IGlkZV9nZXRfcGFpcl9kZXYoZHJpdmUpOwogCWlmIChwYWlyKQotCQlzYWZlID0gbWluKHNhZmUsIGlkZV9nZXRfYmVzdF9waW9fbW9kZShwYWlyLCAyNTUsIDQpKTsKKwkJc2FmZSA9IG1pbihzYWZlLCBwYWlyLT5waW9fbW9kZSAtIFhGRVJfUElPXzApOwogCS8qCiAJICogVXBkYXRlIENvbW1hbmQgVHJhbnNmZXIgTW9kZSBmb3IgbWFzdGVyL3NsYXZlIGFuZCBEYXRhCiAJICogVHJhbnNmZXIgTW9kZSBmb3IgdGhpcyBkcml2ZS4KQEAgLTEyNSwxMCArMTI1LDEwIEBACiAJLyogdHg0OTM5aWRlX3RmX2xvYWRfZml4dXAoKSB3aWxsIHNldCB0aGUgU3lzX0N0bCByZWdpc3RlciAqLwogfQogCi1zdGF0aWMgdm9pZCB0eDQ5MzlpZGVfc2V0X2RtYV9tb2RlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgdTggbW9kZSkKK3N0YXRpYyB2b2lkIHR4NDkzOWlkZV9zZXRfZG1hX21vZGUoaWRlX2h3aWZfdCAqaHdpZiwgaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1MzIgbWFzaywgdmFsOworCWNvbnN0IHU4IG1vZGUgPSBkcml2ZS0+ZG1hX21vZGU7CiAKIAkvKiBVcGRhdGUgRGF0YSBUcmFuc2ZlciBNb2RlIGZvciB0aGlzIGRyaXZlLiAqLwogCWlmIChtb2RlID49IFhGRVJfVURNQV8wKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvdW1jODY3Mi5jIGIvZHJpdmVycy9pZGUvdW1jODY3Mi5jCmluZGV4IDYwZjkzNmUuLjQ3YWRjZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3VtYzg2NzIuYworKysgYi9kcml2ZXJzL2lkZS91bWM4NjcyLmMKQEAgLTEwNCwxMCArMTA0LDExIEBACiAJCXNwZWVkc1swXSwgc3BlZWRzWzFdLCBzcGVlZHNbMl0sIHNwZWVkc1szXSk7CiB9CiAKLXN0YXRpYyB2b2lkIHVtY19zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCitzdGF0aWMgdm9pZCB1bWNfc2V0X3Bpb19tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWYsICptYXRlID0gaHdpZi0+bWF0ZTsKKwlpZGVfaHdpZl90ICptYXRlID0gaHdpZi0+bWF0ZTsKIAl1bnNpZ25lZCBsb25nIHVuaW5pdGlhbGl6ZWRfdmFyKGZsYWdzKTsKKwljb25zdCB1OCBwaW8gPSBkcml2ZS0+cGlvX21vZGUgLSBYRkVSX1BJT18wOwogCiAJcHJpbnRrKCIlczogc2V0dGluZyB1bWM4NjcyIHRvIFBJTyBtb2RlJWQgKHNwZWVkICVkKVxuIiwKIAkJZHJpdmUtPm5hbWUsIHBpbywgcGlvX3RvX3VtY1twaW9dKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3ZpYTgyY3h4eC5jIGIvZHJpdmVycy9pZGUvdmlhODJjeHh4LmMKaW5kZXggMDI4ZGUyNi4uZTY1ZDAxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdmlhODJjeHh4LmMKKysrIGIvZHJpdmVycy9pZGUvdmlhODJjeHh4LmMKQEAgLTYsNyArNiw3IEBACiAgKiAgIHZ0ODIzNSwgdnQ4MjM3LCB2dDgyMzdhCiAgKgogICogQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgVm9qdGVjaCBQYXZsaWsKLSAqIENvcHlyaWdodCAoYykgMjAwNyBCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6CisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCYXJ0bG9taWVqIFpvbG5pZXJraWV3aWN6CiAgKgogICogQmFzZWQgb24gdGhlIHdvcmsgb2Y6CiAgKglNaWNoZWwgQXVicnkKQEAgLTU0LDYgKzU0LDExIEBACiAjZGVmaW5lIFZJQV9OT19VTk1BU0sJCTB4MDggLyogRG9lc24ndCB3b3JrIHdpdGggSVJRIHVubWFza2luZyBvbiAqLwogI2RlZmluZSBWSUFfQkFEX0lECQkweDEwIC8qIEhhcyB3cm9uZyB2ZW5kb3IgSUQgKDB4MTEwNykgKi8KICNkZWZpbmUgVklBX0JBRF9BU1QJCTB4MjAgLyogRG9uJ3QgdG91Y2ggQWRkcmVzcyBTZXR1cCBUaW1pbmcgKi8KKyNkZWZpbmUgVklBX1NBVEFfUEFUQQkJMHg4MCAvKiBTQVRBL1BBVEEgY29tYmluZWQgY29uZmlndXJhdGlvbiAqLworCitlbnVtIHsKKwlWSUFfSURGTEFHX1NJTkdMRSA9ICgxIDw8IDEpLCAvKiBzaW5nbGUgY2hhbm5lbCBjb250cm9sbGVyICovCit9OwogCiAvKgogICogVklBIFNvdXRoQnJpZGdlIGNoaXBzLgpAQCAtNjcsMTEgKzcyLDEzIEBACiAJdTggdWRtYV9tYXNrOwogCXU4IGZsYWdzOwogfSB2aWFfaXNhX2JyaWRnZXNbXSA9IHsKLQl7ICJ2eDg1NSIsCVBDSV9ERVZJQ0VfSURfVklBX1ZYODU1LCAgICAweDAwLCAweDJmLCBBVEFfVURNQTYsIFZJQV9CQURfQVNUIH0sCi0JeyAidng4MDAiLAlQQ0lfREVWSUNFX0lEX1ZJQV9WWDgwMCwgICAgMHgwMCwgMHgyZiwgQVRBX1VETUE2LCBWSUFfQkFEX0FTVCB9LAotCXsgImN4NzAwIiwJUENJX0RFVklDRV9JRF9WSUFfQ1g3MDAsICAgIDB4MDAsIDB4MmYsIEFUQV9VRE1BNiwgVklBX0JBRF9BU1QgfSwKKwl7ICJ2eDg1NSIsCVBDSV9ERVZJQ0VfSURfVklBX1ZYODU1LCAgICAweDAwLCAweDJmLCBBVEFfVURNQTYsIFZJQV9CQURfQVNUIHwgVklBX1NBVEFfUEFUQSB9LAorCXsgInZ4ODAwIiwJUENJX0RFVklDRV9JRF9WSUFfVlg4MDAsICAgIDB4MDAsIDB4MmYsIEFUQV9VRE1BNiwgVklBX0JBRF9BU1QgfCBWSUFfU0FUQV9QQVRBIH0sCisJeyAiY3g3MDAiLAlQQ0lfREVWSUNFX0lEX1ZJQV9DWDcwMCwgICAgMHgwMCwgMHgyZiwgQVRBX1VETUE2LCBWSUFfQkFEX0FTVCB8IFZJQV9TQVRBX1BBVEEgfSwKKwl7ICJ2dDgyNjEiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjYxLCAgICAgMHgwMCwgMHgyZiwgQVRBX1VETUE2LCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0ODIzN3MiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjM3UywgICAgMHgwMCwgMHgyZiwgQVRBX1VETUE2LCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0NjQxMCIsCVBDSV9ERVZJQ0VfSURfVklBXzY0MTAsICAgICAweDAwLCAweDJmLCBBVEFfVURNQTYsIFZJQV9CQURfQVNUIH0sCisJeyAidnQ2NDE1IiwJUENJX0RFVklDRV9JRF9WSUFfNjQxMCwgICAgIDB4MDAsIDB4ZmYsIEFUQV9VRE1BNiwgVklBX0JBRF9BU1QgfSwKIAl7ICJ2dDgyNTEiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MjUxLCAgICAgMHgwMCwgMHgyZiwgQVRBX1VETUE2LCBWSUFfQkFEX0FTVCB9LAogCXsgInZ0ODIzNyIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzcsICAgICAweDAwLCAweDJmLCBBVEFfVURNQTYsIFZJQV9CQURfQVNUIH0sCiAJeyAidnQ4MjM3YSIsCVBDSV9ERVZJQ0VfSURfVklBXzgyMzdBLCAgICAweDAwLCAweDJmLCBBVEFfVURNQTYsIFZJQV9CQURfQVNUIH0sCkBAIC05Miw2ICs5OSw3IEBACiAJeyAidnQ4MmM1ODYiLAlQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMCwgMHgwMCwgMHgwZiwgICAgICAweDAwLCBWSUFfU0VUX0ZJRk8gfSwKIAl7ICJ2dDgyYzU3NiIsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzU3NiwgICAweDAwLCAweDJmLCAgICAgIDB4MDAsIFZJQV9TRVRfRklGTyB8IFZJQV9OT19VTk1BU0sgfSwKIAl7ICJ2dDgyYzU3NiIsCVBDSV9ERVZJQ0VfSURfVklBXzgyQzU3NiwgICAweDAwLCAweDJmLCAgICAgIDB4MDAsIFZJQV9TRVRfRklGTyB8IFZJQV9OT19VTk1BU0sgfCBWSUFfQkFEX0lEIH0sCisJeyAidnR4eHh4IiwJUENJX0RFVklDRV9JRF9WSUFfQU5PTiwgICAgIDB4MDAsIDB4MmYsIEFUQV9VRE1BNiwgVklBX0JBRF9BU1QgfSwKIAl7IE5VTEwgfQogfTsKIApAQCAtMTAyLDYgKzExMCw3IEBACiB7CiAJc3RydWN0IHZpYV9pc2FfYnJpZGdlICp2aWFfY29uZmlnOwogCXVuc2lnbmVkIGludCB2aWFfODB3OworCXU4IGNhY2hlZF9kZXZpY2VbMl07CiB9OwogCiAvKioKQEAgLTEzNywzMCArMTQ2LDQ1IEBACiAJY2FzZSBBVEFfVURNQTQ6IHQgPSB0aW1pbmctPnVkbWEgPyAoMHhlOCB8IChjbGFtcF92YWwodGltaW5nLT51ZG1hLCAyLCA5KSAtIDIpKSA6IDB4MGY7IGJyZWFrOwogCWNhc2UgQVRBX1VETUE1OiB0ID0gdGltaW5nLT51ZG1hID8gKDB4ZTAgfCAoY2xhbXBfdmFsKHRpbWluZy0+dWRtYSwgMiwgOSkgLSAyKSkgOiAweDA3OyBicmVhazsKIAljYXNlIEFUQV9VRE1BNjogdCA9IHRpbWluZy0+dWRtYSA/ICgweGUwIHwgKGNsYW1wX3ZhbCh0aW1pbmctPnVkbWEsIDIsIDkpIC0gMikpIDogMHgwNzsgYnJlYWs7Ci0JZGVmYXVsdDogcmV0dXJuOwogCX0KIAotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFZJQV9VRE1BX1RJTUlORyArICgzIC0gZG4pLCB0KTsKKwkvKiBTZXQgVURNQSB1bmxlc3MgZGV2aWNlIGlzIG5vdCBVRE1BIGNhcGFibGUgKi8KKwlpZiAodmRldi0+dmlhX2NvbmZpZy0+dWRtYV9tYXNrKSB7CisJCXU4IHVkbWFfZXRjOworCisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgVklBX1VETUFfVElNSU5HICsgMyAtIGRuLCAmdWRtYV9ldGMpOworCisJCS8qIGNsZWFyIHRyYW5zZmVyIG1vZGUgYml0ICovCisJCXVkbWFfZXRjICY9IH4weDIwOworCisJCWlmICh0aW1pbmctPnVkbWEpIHsKKwkJCS8qIHByZXNlcnZlIDgwLXdpcmUgY2FibGUgZGV0ZWN0aW9uIGJpdCAqLworCQkJdWRtYV9ldGMgJj0gMHgxMDsKKwkJCXVkbWFfZXRjIHw9IHQ7CisJCX0KKworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBWSUFfVURNQV9USU1JTkcgKyAzIC0gZG4sIHVkbWFfZXRjKTsKKwl9CiB9CiAKIC8qKgogICoJdmlhX3NldF9kcml2ZQkJLQljb25maWd1cmUgdHJhbnNmZXIgbW9kZQorICoJQGh3aWY6IHBvcnQKICAqCUBkcml2ZTogRHJpdmUgdG8gc2V0IHVwCi0gKglAc3BlZWQ6IGRlc2lyZWQgc3BlZWQKICAqCiAgKgl2aWFfc2V0X2RyaXZlKCkgY29tcHV0ZXMgdGltaW5nIHZhbHVlcyBjb25maWd1cmVzIHRoZSBjaGlwc2V0IHRvCiAgKglhIGRlc2lyZWQgdHJhbnNmZXIgbW9kZS4gIEl0IGFsc28gY2FuIGJlIGNhbGxlZCBieSB1cHBlciBsYXllcnMuCiAgKi8KIAotc3RhdGljIHZvaWQgdmlhX3NldF9kcml2ZShpZGVfZHJpdmVfdCAqZHJpdmUsIGNvbnN0IHU4IHNwZWVkKQorc3RhdGljIHZvaWQgdmlhX3NldF9kcml2ZShpZGVfaHdpZl90ICpod2lmLCBpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCWlkZV9kcml2ZV90ICpwZWVyID0gaWRlX2dldF9wYWlyX2Rldihkcml2ZSk7CiAJc3RydWN0IHBjaV9kZXYgKmRldiA9IHRvX3BjaV9kZXYoaHdpZi0+ZGV2KTsKIAlzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QgPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKIAlzdHJ1Y3QgdmlhODJjeHh4X2RldiAqdmRldiA9IGhvc3QtPmhvc3RfcHJpdjsKIAlzdHJ1Y3QgaWRlX3RpbWluZyB0LCBwOwogCXVuc2lnbmVkIGludCBULCBVVDsKKwljb25zdCB1OCBzcGVlZCA9IGRyaXZlLT5kbWFfbW9kZTsKIAogCVQgPSAxMDAwMDAwMDAwIC8gdmlhX2Nsb2NrOwogCkBAIC0xNzUsNyArMTk5LDcgQEAKIAlpZGVfdGltaW5nX2NvbXB1dGUoZHJpdmUsIHNwZWVkLCAmdCwgVCwgVVQpOwogCiAJaWYgKHBlZXIpIHsKLQkJaWRlX3RpbWluZ19jb21wdXRlKHBlZXIsIHBlZXItPmN1cnJlbnRfc3BlZWQsICZwLCBULCBVVCk7CisJCWlkZV90aW1pbmdfY29tcHV0ZShwZWVyLCBwZWVyLT5waW9fbW9kZSwgJnAsIFQsIFVUKTsKIAkJaWRlX3RpbWluZ19tZXJnZSgmcCwgJnQsICZ0LCBJREVfVElNSU5HXzhCSVQpOwogCX0KIApAQCAtMTg0LDIyICsyMDgsMjQgQEAKIAogLyoqCiAgKgl2aWFfc2V0X3Bpb19tb2RlCS0Jc2V0IGhvc3QgY29udHJvbGxlciBmb3IgUElPIG1vZGUKKyAqCUBod2lmOiBwb3J0CiAgKglAZHJpdmU6IGRyaXZlCi0gKglAcGlvOiBQSU8gbW9kZSBudW1iZXIKICAqCiAgKglBIGNhbGxiYWNrIGZyb20gdGhlIHVwcGVyIGxheWVycyBmb3IgUElPLW9ubHkgdHVuaW5nLgogICovCiAKLXN0YXRpYyB2b2lkIHZpYV9zZXRfcGlvX21vZGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBjb25zdCB1OCBwaW8pCitzdGF0aWMgdm9pZCB2aWFfc2V0X3Bpb19tb2RlKGlkZV9od2lmX3QgKmh3aWYsIGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQl2aWFfc2V0X2RyaXZlKGRyaXZlLCBYRkVSX1BJT18wICsgcGlvKTsKKwlkcml2ZS0+ZG1hX21vZGUgPSBkcml2ZS0+cGlvX21vZGU7CisJdmlhX3NldF9kcml2ZShod2lmLCBkcml2ZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdmlhX2lzYV9icmlkZ2UgKnZpYV9jb25maWdfZmluZChzdHJ1Y3QgcGNpX2RldiAqKmlzYSkKIHsKIAlzdHJ1Y3QgdmlhX2lzYV9icmlkZ2UgKnZpYV9jb25maWc7CiAKLQlmb3IgKHZpYV9jb25maWcgPSB2aWFfaXNhX2JyaWRnZXM7IHZpYV9jb25maWctPmlkOyB2aWFfY29uZmlnKyspCisJZm9yICh2aWFfY29uZmlnID0gdmlhX2lzYV9icmlkZ2VzOworCSAgICAgdmlhX2NvbmZpZy0+aWQgIT0gUENJX0RFVklDRV9JRF9WSUFfQU5PTjsgdmlhX2NvbmZpZysrKQogCQlpZiAoKCppc2EgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1ZJQSArCiAJCQkhISh2aWFfY29uZmlnLT5mbGFncyAmIFZJQV9CQURfSUQpLAogCQkJdmlhX2NvbmZpZy0+aWQsIE5VTEwpKSkgewpAQCAtMzYyLDYgKzM4OCw5IEBACiAJaWYgKHZpYV9jYWJsZV9vdmVycmlkZShwZGV2KSkKIAkJcmV0dXJuIEFUQV9DQkxfUEFUQTQwX1NIT1JUOwogCisJaWYgKCh2ZGV2LT52aWFfY29uZmlnLT5mbGFncyAmIFZJQV9TQVRBX1BBVEEpICYmIGh3aWYtPmNoYW5uZWwgPT0gMCkKKwkJcmV0dXJuIEFUQV9DQkxfU0FUQTsKKwogCWlmICgodmRldi0+dmlhXzgwdyA+PiBod2lmLT5jaGFubmVsKSAmIDEpCiAJCXJldHVybiBBVEFfQ0JMX1BBVEE4MDsKIAllbHNlCkBAIC0zNzQsMTAgKzQwMyw2NiBAQAogCS5jYWJsZV9kZXRlY3QJCT0gdmlhODJjeHh4X2NhYmxlX2RldGVjdCwKIH07CiAKK3N0YXRpYyB2b2lkIHZpYV93cml0ZV9kZXZjdGwoaWRlX2h3aWZfdCAqaHdpZiwgdTggY3RsKQoreworCXN0cnVjdCB2aWE4MmN4eHhfZGV2ICp2ZGV2ID0gaHdpZi0+aG9zdC0+aG9zdF9wcml2OworCisJb3V0YihjdGwsIGh3aWYtPmlvX3BvcnRzLmN0bF9hZGRyKTsKKwlvdXRiKHZkZXYtPmNhY2hlZF9kZXZpY2VbaHdpZi0+Y2hhbm5lbF0sIGh3aWYtPmlvX3BvcnRzLmRldmljZV9hZGRyKTsKK30KKworc3RhdGljIHZvaWQgX192aWFfZGV2X3NlbGVjdChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHNlbGVjdCkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IHZpYTgyY3h4eF9kZXYgKnZkZXYgPSBod2lmLT5ob3N0LT5ob3N0X3ByaXY7CisKKwlvdXRiKHNlbGVjdCwgaHdpZi0+aW9fcG9ydHMuZGV2aWNlX2FkZHIpOworCXZkZXYtPmNhY2hlZF9kZXZpY2VbaHdpZi0+Y2hhbm5lbF0gPSBzZWxlY3Q7Cit9CisKK3N0YXRpYyB2b2lkIHZpYV9kZXZfc2VsZWN0KGlkZV9kcml2ZV90ICpkcml2ZSkKK3sKKwlfX3ZpYV9kZXZfc2VsZWN0KGRyaXZlLCBkcml2ZS0+c2VsZWN0IHwgQVRBX0RFVklDRV9PQlMpOworfQorCitzdGF0aWMgdm9pZCB2aWFfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmLCB1OCB2YWxpZCkKK3sKKwlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7CisKKwlpZiAodmFsaWQgJiBJREVfVkFMSURfRkVBVFVSRSkKKwkJb3V0Yih0Zi0+ZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7CisJaWYgKHZhbGlkICYgSURFX1ZBTElEX05TRUNUKQorCQlvdXRiKHRmLT5uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOworCWlmICh2YWxpZCAmIElERV9WQUxJRF9MQkFMKQorCQlvdXRiKHRmLT5sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKKwlpZiAodmFsaWQgJiBJREVfVkFMSURfTEJBTSkKKwkJb3V0Yih0Zi0+bGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7CisJaWYgKHZhbGlkICYgSURFX1ZBTElEX0xCQUgpCisJCW91dGIodGYtPmxiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOworCWlmICh2YWxpZCAmIElERV9WQUxJRF9ERVZJQ0UpCisJCV9fdmlhX2Rldl9zZWxlY3QoZHJpdmUsIHRmLT5kZXZpY2UpOworfQorCitjb25zdCBzdHJ1Y3QgaWRlX3RwX29wcyB2aWFfdHBfb3BzID0geworCS5leGVjX2NvbW1hbmQJCT0gaWRlX2V4ZWNfY29tbWFuZCwKKwkucmVhZF9zdGF0dXMJCT0gaWRlX3JlYWRfc3RhdHVzLAorCS5yZWFkX2FsdHN0YXR1cwkJPSBpZGVfcmVhZF9hbHRzdGF0dXMsCisJLndyaXRlX2RldmN0bAkJPSB2aWFfd3JpdGVfZGV2Y3RsLAorCisJLmRldl9zZWxlY3QJCT0gdmlhX2Rldl9zZWxlY3QsCisJLnRmX2xvYWQJCT0gdmlhX3RmX2xvYWQsCisJLnRmX3JlYWQJCT0gaWRlX3RmX3JlYWQsCisKKwkuaW5wdXRfZGF0YQkJPSBpZGVfaW5wdXRfZGF0YSwKKwkub3V0cHV0X2RhdGEJCT0gaWRlX291dHB1dF9kYXRhLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIHZpYTgyY3h4eF9jaGlwc2V0IF9fZGV2aW5pdGRhdGEgPSB7CiAJLm5hbWUJCT0gRFJWX05BTUUsCiAJLmluaXRfY2hpcHNldAk9IGluaXRfY2hpcHNldF92aWE4MmN4eHgsCiAJLmVuYWJsZWJpdHMJPSB7IHsgMHg0MCwgMHgwMiwgMHgwMiB9LCB7IDB4NDAsIDB4MDEsIDB4MDEgfSB9LAorCS50cF9vcHMJCT0gJnZpYV90cF9vcHMsCiAJLnBvcnRfb3BzCT0gJnZpYV9wb3J0X29wcywKIAkuaG9zdF9mbGFncwk9IElERV9IRkxBR19QSU9fTk9fQkxBQ0tMSVNUIHwKIAkJCSAgSURFX0hGTEFHX1BPU1RfU0VUX01PREUgfApAQCAtNDAyLDExICs0ODcsNiBAQAogCSAqIEZpbmQgdGhlIElTQSBicmlkZ2UgYW5kIGNoZWNrIHdlIGtub3cgd2hhdCBpdCBpcy4KIAkgKi8KIAl2aWFfY29uZmlnID0gdmlhX2NvbmZpZ19maW5kKCZpc2EpOwotCWlmICghdmlhX2NvbmZpZy0+aWQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiICVzOiB1bmtub3duIGNoaXBzZXQsIHNraXBwaW5nXG4iLAotCQkJcGNpX25hbWUoZGV2KSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KIAogCS8qCiAJICogUHJpbnQgdGhlIGJvb3QgbWVzc2FnZS4KQEAgLTQzNiwxMCArNTE2LDEzIEBACiAJCXZpYV9jbG9jayA9IDMzMzMzOwogCX0KIAotCWlmIChpZHggPT0gMCkKLQkJZC5ob3N0X2ZsYWdzIHw9IElERV9IRkxBR19OT19BVVRPRE1BOwotCWVsc2UKKwlpZiAoaWR4ID09IDEpCiAJCWQuZW5hYmxlYml0c1sxXS5yZWcgPSBkLmVuYWJsZWJpdHNbMF0ucmVnID0gMDsKKwllbHNlCisJCWQuaG9zdF9mbGFncyB8PSBJREVfSEZMQUdfTk9fQVVUT0RNQTsKKworCWlmIChpZHggPT0gVklBX0lERkxBR19TSU5HTEUpCisJCWQuaG9zdF9mbGFncyB8PSBJREVfSEZMQUdfU0lOR0xFOwogCiAJaWYgKCh2aWFfY29uZmlnLT5mbGFncyAmIFZJQV9OT19VTk1BU0spID09IDApCiAJCWQuaG9zdF9mbGFncyB8PSBJREVfSEZMQUdfVU5NQVNLX0lSUVM7CkBAIC00NzUsOCArNTU4LDkgQEAKIAl7IFBDSV9WREVWSUNFKFZJQSwgUENJX0RFVklDRV9JRF9WSUFfODJDNTc2XzEpLCAgMCB9LAogCXsgUENJX1ZERVZJQ0UoVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMSksICAwIH0sCiAJeyBQQ0lfVkRFVklDRShWSUEsIFBDSV9ERVZJQ0VfSURfVklBX0NYNzAwX0lERSksIDAgfSwKLQl7IFBDSV9WREVWSUNFKFZJQSwgUENJX0RFVklDRV9JRF9WSUFfVlg4NTVfSURFKSwgMCB9LAorCXsgUENJX1ZERVZJQ0UoVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV9WWDg1NV9JREUpLCBWSUFfSURGTEFHX1NJTkdMRSB9LAogCXsgUENJX1ZERVZJQ0UoVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV82NDEwKSwgICAgICAxIH0sCisJeyBQQ0lfVkRFVklDRShWSUEsIFBDSV9ERVZJQ0VfSURfVklBXzY0MTUpLCAgICAgIDEgfSwKIAl7IFBDSV9WREVWSUNFKFZJQSwgUENJX0RFVklDRV9JRF9WSUFfU0FUQV9FSURFKSwgMSB9LAogCXsgMCwgfSwKIH07CkBAIC01MDQsNiArNTg4LDYgQEAKIG1vZHVsZV9pbml0KHZpYV9pZGVfaW5pdCk7CiBtb2R1bGVfZXhpdCh2aWFfaWRlX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCJWb2p0ZWNoIFBhdmxpaywgTWljaGVsIEF1YnJ5LCBKZWZmIEdhcnppaywgQW5kcmUgSGVkcmljayIpOworTU9EVUxFX0FVVEhPUigiVm9qdGVjaCBQYXZsaWssIEJhcnRsb21pZWogWm9sbmllcmtpZXdpY3osIE1pY2hlbCBBdWJyeSwgSmVmZiBHYXJ6aWssIEFuZHJlIEhlZHJpY2siKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUENJIGRyaXZlciBtb2R1bGUgZm9yIFZJQSBJREUiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jIGIvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmMKaW5kZXggNTEyMmI1YS4uMTgzNTAyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgotI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogI2luY2x1ZGUgImNzci5oIgpAQCAtMTM5Nyw5ICsxMzk2LDkgQEAKIAkJCXBkcnYgPSBjb250YWluZXJfb2YoZHJ2LCBzdHJ1Y3QgaHBzYl9wcm90b2NvbF9kcml2ZXIsCiAJCQkJCSAgICBkcml2ZXIpOwogCQkJaWYgKHBkcnYtPnVwZGF0ZSkgewotCQkJCWRvd24oJnVkLT5kZXZpY2Uuc2VtKTsKKwkJCQlkZXZpY2VfbG9jaygmdWQtPmRldmljZSk7CiAJCQkJZXJyb3IgPSBwZHJ2LT51cGRhdGUodWQpOwotCQkJCXVwKCZ1ZC0+ZGV2aWNlLnNlbSk7CisJCQkJZGV2aWNlX3VubG9jaygmdWQtPmRldmljZSk7CiAJCQl9CiAJCQlpZiAoZXJyb3IpCiAJCQkJZGV2aWNlX3JlbGVhc2VfZHJpdmVyKCZ1ZC0+ZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvcGNpbHlueC5jIGIvZHJpdmVycy9pZWVlMTM5NC9wY2lseW54LmMKaW5kZXggOTU1NWZkMi4uYmY0N2ZlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9wY2lseW54LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9wY2lseW54LmMKQEAgLTE0NTIsNyArMTQ1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSSU5UKEtFUk5fRVJSLCBseW54LT5pZCwgInVuYWJsZSB0byByZWFkIGJ1cyBpbmZvIGJsb2NrIGZyb20gaTJjIik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUklOVChLRVJOX0lORk8sIGx5bngtPmlkLCAiZ290IGJ1cyBpbmZvIGJsb2NrIGZyb20gc2VyaWFsIGVlcHJvbSIpOwotCQkJCS8qIEZJWE1FOiBwcm9iYWJseSB3ZSBzaG91ZCByZXdyaXRlIHRoZSBtYXhfcmVjLCBtYXhfUk9NKDEzOTRhKSwKKwkJCQkvKiBGSVhNRTogcHJvYmFibHkgd2Ugc2hvdWxkIHJld3JpdGUgdGhlIG1heF9yZWMsIG1heF9ST00oMTM5NGEpLAogCQkJCSAqIGdlbmVyYXRpb24oMTM5NGEpIGFuZCBsaW5rX3NwZCgxMzk0YSkgZmllbGQgYW5kIHJlY2FsY3VsYXRlCiAJCQkJICogdGhlIENSQyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvS2NvbmZpZyBiL2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnCmluZGV4IGRkMGRiNjcuLjk3NWFkY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9LY29uZmlnCkBAIC0yMCw2ICsyMCw3IEBACiAKIGNvbmZpZyBJTkZJTklCQU5EX1VTRVJfQUNDRVNTCiAJdHJpc3RhdGUgIkluZmluaUJhbmQgdXNlcnNwYWNlIGFjY2VzcyAodmVyYnMgYW5kIENNKSIKKwlzZWxlY3QgQU5PTl9JTk9ERVMKIAktLS1oZWxwLS0tCiAJICBVc2Vyc3BhY2UgSW5maW5pQmFuZCBhY2Nlc3Mgc3VwcG9ydC4gIFRoaXMgZW5hYmxlcyB0aGUKIAkgIGtlcm5lbCBzaWRlIG9mIHVzZXJzcGFjZSB2ZXJicyBhbmQgdGhlIHVzZXJzcGFjZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2NtLmMKaW5kZXggNTEzMGZjNS4uNzY0Nzg3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9jbS5jCkBAIC0zNTk3LDcgKzM1OTcsNyBAQAogCQkgICAgICAgYXRvbWljX2xvbmdfcmVhZCgmZ3JvdXAtPmNvdW50ZXJbY21fYXR0ci0+aW5kZXhdKSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIGNtX2NvdW50ZXJfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgY21fY291bnRlcl9vcHMgPSB7CiAJLnNob3cgPSBjbV9zaG93X2NvdW50ZXIKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMKaW5kZXggNzUyMjAwOC4uNTg0NjNkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvbWFkLmMKQEAgLTExOTMsMTAgKzExOTMsNyBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gZmluZF9maXJzdF9iaXQobWFkX3JlZ19yZXEtPm1ldGhvZF9tYXNrLCBJQl9NR01UX01BWF9NRVRIT0RTKTsKLQkgICAgIGkgPCBJQl9NR01UX01BWF9NRVRIT0RTOwotCSAgICAgaSA9IGZpbmRfbmV4dF9iaXQobWFkX3JlZ19yZXEtPm1ldGhvZF9tYXNrLCBJQl9NR01UX01BWF9NRVRIT0RTLAotCQkJICAgICAgIDEraSkpIHsKKwlmb3JfZWFjaF9zZXRfYml0KGksIG1hZF9yZWdfcmVxLT5tZXRob2RfbWFzaywgSUJfTUdNVF9NQVhfTUVUSE9EUykgewogCQlpZiAoKCptZXRob2QpLT5hZ2VudFtpXSkgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTWV0aG9kICVkIGFscmVhZHkgaW4gdXNlXG4iLCBpKTsKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtMTMzMCwxMyArMTMyNyw5IEBACiAJCWdvdG8gZXJyb3IzOwogCiAJLyogRmluYWxseSwgYWRkIGluIG1ldGhvZHMgYmVpbmcgcmVnaXN0ZXJlZCAqLwotCWZvciAoaSA9IGZpbmRfZmlyc3RfYml0KG1hZF9yZWdfcmVxLT5tZXRob2RfbWFzaywKLQkJCQlJQl9NR01UX01BWF9NRVRIT0RTKTsKLQkgICAgIGkgPCBJQl9NR01UX01BWF9NRVRIT0RTOwotCSAgICAgaSA9IGZpbmRfbmV4dF9iaXQobWFkX3JlZ19yZXEtPm1ldGhvZF9tYXNrLCBJQl9NR01UX01BWF9NRVRIT0RTLAotCQkJICAgICAgIDEraSkpIHsKKwlmb3JfZWFjaF9zZXRfYml0KGksIG1hZF9yZWdfcmVxLT5tZXRob2RfbWFzaywgSUJfTUdNVF9NQVhfTUVUSE9EUykKIAkJKCptZXRob2QpLT5hZ2VudFtpXSA9IGFnZW50X3ByaXY7Ci0JfQorCiAJcmV0dXJuIDA7CiAKIGVycm9yMzoKQEAgLTE0MjksMTMgKzE0MjIsOSBAQAogCQlnb3RvIGVycm9yNDsKIAogCS8qIEZpbmFsbHksIGFkZCBpbiBtZXRob2RzIGJlaW5nIHJlZ2lzdGVyZWQgKi8KLQlmb3IgKGkgPSBmaW5kX2ZpcnN0X2JpdChtYWRfcmVnX3JlcS0+bWV0aG9kX21hc2ssCi0JCQkJSUJfTUdNVF9NQVhfTUVUSE9EUyk7Ci0JICAgICBpIDwgSUJfTUdNVF9NQVhfTUVUSE9EUzsKLQkgICAgIGkgPSBmaW5kX25leHRfYml0KG1hZF9yZWdfcmVxLT5tZXRob2RfbWFzaywgSUJfTUdNVF9NQVhfTUVUSE9EUywKLQkJCSAgICAgICAxK2kpKSB7CisJZm9yX2VhY2hfc2V0X2JpdChpLCBtYWRfcmVnX3JlcS0+bWV0aG9kX21hc2ssIElCX01HTVRfTUFYX01FVEhPRFMpCiAJCSgqbWV0aG9kKS0+YWdlbnRbaV0gPSBhZ2VudF9wcml2OwotCX0KKwogCXJldHVybiAwOwogCiBlcnJvcjQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvc3lzZnMuYwppbmRleCAxNThhMjE0Li4xNTU4YmI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9zeXNmcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3N5c2ZzLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAlyZXR1cm4gcG9ydF9hdHRyLT5zaG93KHAsIHBvcnRfYXR0ciwgYnVmKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgcG9ydF9zeXNmc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBwb3J0X3N5c2ZzX29wcyA9IHsKIAkuc2hvdyA9IHBvcnRfYXR0cl9zaG93CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91Y20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jCmluZGV4IGY1MDRjOWIuLjAxN2Q2ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VjbS5jCkBAIC0xMjE1LDE1ICsxMjE1LDE4IEBACiAKIAl1Y21fZGV2ID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGliX3VjbV9kZXZpY2UsIGRldik7CiAJY2Rldl9kZWwoJnVjbV9kZXYtPmNkZXYpOwotCWNsZWFyX2JpdCh1Y21fZGV2LT5kZXZudW0sIGRldl9tYXApOworCWlmICh1Y21fZGV2LT5kZXZudW0gPCBJQl9VQ01fTUFYX0RFVklDRVMpCisJCWNsZWFyX2JpdCh1Y21fZGV2LT5kZXZudW0sIGRldl9tYXApOworCWVsc2UKKwkJY2xlYXJfYml0KHVjbV9kZXYtPmRldm51bSAtIElCX1VDTV9NQVhfREVWSUNFUywgZGV2X21hcCk7CiAJa2ZyZWUodWNtX2Rldik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVjbV9mb3BzID0gewotCS5vd25lciAJID0gVEhJU19NT0RVTEUsCi0JLm9wZW4gCSA9IGliX3VjbV9vcGVuLAorCS5vd25lcgkgPSBUSElTX01PRFVMRSwKKwkub3BlbgkgPSBpYl91Y21fb3BlbiwKIAkucmVsZWFzZSA9IGliX3VjbV9jbG9zZSwKLQkud3JpdGUgCSA9IGliX3VjbV93cml0ZSwKKwkud3JpdGUJID0gaWJfdWNtX3dyaXRlLAogCS5wb2xsICAgID0gaWJfdWNtX3BvbGwsCiB9OwogCkBAIC0xMjM3LDggKzEyNDAsMzIgQEAKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihpYmRldiwgU19JUlVHTywgc2hvd19pYmRldiwgTlVMTCk7CiAKK3N0YXRpYyBkZXZfdCBvdmVyZmxvd19tYWo7CitzdGF0aWMgREVDTEFSRV9CSVRNQVAob3ZlcmZsb3dfbWFwLCBJQl9VQ01fTUFYX0RFVklDRVMpOworc3RhdGljIGludCBmaW5kX292ZXJmbG93X2Rldm51bSh2b2lkKQoreworCWludCByZXQ7CisKKwlpZiAoIW92ZXJmbG93X21haikgeworCQlyZXQgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZvdmVyZmxvd19tYWosIDAsIElCX1VDTV9NQVhfREVWSUNFUywKKwkJCQkJICAiaW5maW5pYmFuZF9jbSIpOworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgInVjbTogY291bGRuJ3QgcmVnaXN0ZXIgZHluYW1pYyBkZXZpY2UgbnVtYmVyXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwlyZXQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KG92ZXJmbG93X21hcCwgSUJfVUNNX01BWF9ERVZJQ0VTKTsKKwlpZiAocmV0ID49IElCX1VDTV9NQVhfREVWSUNFUykKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHZvaWQgaWJfdWNtX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQogeworCWludCBkZXZudW07CisJZGV2X3QgYmFzZTsKIAlzdHJ1Y3QgaWJfdWNtX2RldmljZSAqdWNtX2RldjsKIAogCWlmICghZGV2aWNlLT5hbGxvY191Y29udGV4dCB8fApAQCAtMTI1MSwxNiArMTI3OCwyNSBAQAogCiAJdWNtX2Rldi0+aWJfZGV2ID0gZGV2aWNlOwogCi0JdWNtX2Rldi0+ZGV2bnVtID0gZmluZF9maXJzdF96ZXJvX2JpdChkZXZfbWFwLCBJQl9VQ01fTUFYX0RFVklDRVMpOwotCWlmICh1Y21fZGV2LT5kZXZudW0gPj0gSUJfVUNNX01BWF9ERVZJQ0VTKQotCQlnb3RvIGVycjsKKwlkZXZudW0gPSBmaW5kX2ZpcnN0X3plcm9fYml0KGRldl9tYXAsIElCX1VDTV9NQVhfREVWSUNFUyk7CisJaWYgKGRldm51bSA+PSBJQl9VQ01fTUFYX0RFVklDRVMpIHsKKwkJZGV2bnVtID0gZmluZF9vdmVyZmxvd19kZXZudW0oKTsKKwkJaWYgKGRldm51bSA8IDApCisJCQlnb3RvIGVycjsKIAotCXNldF9iaXQodWNtX2Rldi0+ZGV2bnVtLCBkZXZfbWFwKTsKKwkJdWNtX2Rldi0+ZGV2bnVtID0gZGV2bnVtICsgSUJfVUNNX01BWF9ERVZJQ0VTOworCQliYXNlID0gZGV2bnVtICsgb3ZlcmZsb3dfbWFqOworCQlzZXRfYml0KGRldm51bSwgb3ZlcmZsb3dfbWFwKTsKKwl9IGVsc2UgeworCQl1Y21fZGV2LT5kZXZudW0gPSBkZXZudW07CisJCWJhc2UgPSBkZXZudW0gKyBJQl9VQ01fQkFTRV9ERVY7CisJCXNldF9iaXQoZGV2bnVtLCBkZXZfbWFwKTsKKwl9CiAKIAljZGV2X2luaXQoJnVjbV9kZXYtPmNkZXYsICZ1Y21fZm9wcyk7CiAJdWNtX2Rldi0+Y2Rldi5vd25lciA9IFRISVNfTU9EVUxFOwogCWtvYmplY3Rfc2V0X25hbWUoJnVjbV9kZXYtPmNkZXYua29iaiwgInVjbSVkIiwgdWNtX2Rldi0+ZGV2bnVtKTsKLQlpZiAoY2Rldl9hZGQoJnVjbV9kZXYtPmNkZXYsIElCX1VDTV9CQVNFX0RFViArIHVjbV9kZXYtPmRldm51bSwgMSkpCisJaWYgKGNkZXZfYWRkKCZ1Y21fZGV2LT5jZGV2LCBiYXNlLCAxKSkKIAkJZ290byBlcnI7CiAKIAl1Y21fZGV2LT5kZXYuY2xhc3MgPSAmY21fY2xhc3M7CkBAIC0xMjgxLDcgKzEzMTcsMTAgQEAKIAlkZXZpY2VfdW5yZWdpc3RlcigmdWNtX2Rldi0+ZGV2KTsKIGVycl9jZGV2OgogCWNkZXZfZGVsKCZ1Y21fZGV2LT5jZGV2KTsKLQljbGVhcl9iaXQodWNtX2Rldi0+ZGV2bnVtLCBkZXZfbWFwKTsKKwlpZiAodWNtX2Rldi0+ZGV2bnVtIDwgSUJfVUNNX01BWF9ERVZJQ0VTKQorCQljbGVhcl9iaXQoZGV2bnVtLCBkZXZfbWFwKTsKKwllbHNlCisJCWNsZWFyX2JpdChkZXZudW0sIG92ZXJmbG93X21hcCk7CiBlcnI6CiAJa2ZyZWUodWNtX2Rldik7CiAJcmV0dXJuOwpAQCAtMTI5NywxMSArMTMzNiw4IEBACiAJZGV2aWNlX3VucmVnaXN0ZXIoJnVjbV9kZXYtPmRldik7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfYWJpX3ZlcnNpb24oc3RydWN0IGNsYXNzICpjbGFzcywgY2hhciAqYnVmKQotewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBJQl9VU0VSX0NNX0FCSV9WRVJTSU9OKTsKLX0KLXN0YXRpYyBDTEFTU19BVFRSKGFiaV92ZXJzaW9uLCBTX0lSVUdPLCBzaG93X2FiaV92ZXJzaW9uLCBOVUxMKTsKK3N0YXRpYyBDTEFTU19BVFRSX1NUUklORyhhYmlfdmVyc2lvbiwgU19JUlVHTywKKwkJCSBfX3N0cmluZ2lmeShJQl9VU0VSX0NNX0FCSV9WRVJTSU9OKSk7CiAKIHN0YXRpYyBpbnQgX19pbml0IGliX3VjbV9pbml0KHZvaWQpCiB7CkBAIC0xMzE0LDcgKzEzNTAsNyBAQAogCQlnb3RvIGVycm9yMTsKIAl9CiAKLQlyZXQgPSBjbGFzc19jcmVhdGVfZmlsZSgmY21fY2xhc3MsICZjbGFzc19hdHRyX2FiaV92ZXJzaW9uKTsKKwlyZXQgPSBjbGFzc19jcmVhdGVfZmlsZSgmY21fY2xhc3MsICZjbGFzc19hdHRyX2FiaV92ZXJzaW9uLmF0dHIpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ1Y206IGNvdWxkbid0IGNyZWF0ZSBhYmlfdmVyc2lvbiBhdHRyaWJ1dGVcbiIpOwogCQlnb3RvIGVycm9yMjsKQEAgLTEzMjgsNyArMTM2NCw3IEBACiAJcmV0dXJuIDA7CiAKIGVycm9yMzoKLQljbGFzc19yZW1vdmVfZmlsZSgmY21fY2xhc3MsICZjbGFzc19hdHRyX2FiaV92ZXJzaW9uKTsKKwljbGFzc19yZW1vdmVfZmlsZSgmY21fY2xhc3MsICZjbGFzc19hdHRyX2FiaV92ZXJzaW9uLmF0dHIpOwogZXJyb3IyOgogCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihJQl9VQ01fQkFTRV9ERVYsIElCX1VDTV9NQVhfREVWSUNFUyk7CiBlcnJvcjE6CkBAIC0xMzM4LDggKzEzNzQsMTAgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpYl91Y21fY2xlYW51cCh2b2lkKQogewogCWliX3VucmVnaXN0ZXJfY2xpZW50KCZ1Y21fY2xpZW50KTsKLQljbGFzc19yZW1vdmVfZmlsZSgmY21fY2xhc3MsICZjbGFzc19hdHRyX2FiaV92ZXJzaW9uKTsKKwljbGFzc19yZW1vdmVfZmlsZSgmY21fY2xhc3MsICZjbGFzc19hdHRyX2FiaV92ZXJzaW9uLmF0dHIpOwogCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihJQl9VQ01fQkFTRV9ERVYsIElCX1VDTV9NQVhfREVWSUNFUyk7CisJaWYgKG92ZXJmbG93X21haikKKwkJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKG92ZXJmbG93X21haiwgSUJfVUNNX01BWF9ERVZJQ0VTKTsKIAlpZHJfZGVzdHJveSgmY3R4X2lkX3RhYmxlKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdWRfaGVhZGVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91ZF9oZWFkZXIuYwppbmRleCA4ZWM3ODc2Li42NTBiNTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91ZF9oZWFkZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91ZF9oZWFkZXIuYwpAQCAtMTgxLDYgKzE4MSw3IEBACiAgKiBpYl91ZF9oZWFkZXJfaW5pdCAtIEluaXRpYWxpemUgVUQgaGVhZGVyIHN0cnVjdHVyZQogICogQHBheWxvYWRfYnl0ZXM6TGVuZ3RoIG9mIHBhY2tldCBwYXlsb2FkCiAgKiBAZ3JoX3ByZXNlbnQ6R1JIIGZsYWcgKGlmIG5vbi16ZXJvLCBHUkggd2lsbCBiZSBpbmNsdWRlZCkKKyAqIEBpbW1lZGlhdGVfcHJlc2VudDogc3BlY2lmeSBpZiBpbW1lZGlhdGUgZGF0YSBzaG91bGQgYmUgdXNlZAogICogQGhlYWRlcjpTdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQogICoKICAqIGliX3VkX2hlYWRlcl9pbml0KCkgaW5pdGlhbGl6ZXMgdGhlIGxyaC5saW5rX3ZlcnNpb24sIGxyaC5saW5rX25leHRfaGVhZGVyLApAQCAtMTkxLDIxICsxOTIsMTMgQEAKICAqLwogdm9pZCBpYl91ZF9oZWFkZXJfaW5pdChpbnQgICAgIAkJICAgIHBheWxvYWRfYnl0ZXMsCiAJCSAgICAgICBpbnQgICAgCQkgICAgZ3JoX3ByZXNlbnQsCisJCSAgICAgICBpbnQJCSAgICBpbW1lZGlhdGVfcHJlc2VudCwKIAkJICAgICAgIHN0cnVjdCBpYl91ZF9oZWFkZXIgKmhlYWRlcikKIHsKLQlpbnQgaGVhZGVyX2xlbjsKIAl1MTYgcGFja2V0X2xlbmd0aDsKIAogCW1lbXNldChoZWFkZXIsIDAsIHNpemVvZiAqaGVhZGVyKTsKIAotCWhlYWRlcl9sZW4gPQotCQlJQl9MUkhfQllURVMgICsKLQkJSUJfQlRIX0JZVEVTICArCi0JCUlCX0RFVEhfQllURVM7Ci0JaWYgKGdyaF9wcmVzZW50KSB7Ci0JCWhlYWRlcl9sZW4gKz0gSUJfR1JIX0JZVEVTOwotCX0KLQogCWhlYWRlci0+bHJoLmxpbmtfdmVyc2lvbiAgICAgPSAwOwogCWhlYWRlci0+bHJoLmxpbmtfbmV4dF9oZWFkZXIgPQogCQlncmhfcHJlc2VudCA/IElCX0xOSF9JQkFfR0xPQkFMIDogSUJfTE5IX0lCQV9MT0NBTDsKQEAgLTIzMSw3ICsyMjQsOCBAQAogCiAJaGVhZGVyLT5scmgucGFja2V0X2xlbmd0aCA9IGNwdV90b19iZTE2KHBhY2tldF9sZW5ndGgpOwogCi0JaWYgKGhlYWRlci0+aW1tZWRpYXRlX3ByZXNlbnQpCisJaGVhZGVyLT5pbW1lZGlhdGVfcHJlc2VudAkgICAgID0gaW1tZWRpYXRlX3ByZXNlbnQ7CisJaWYgKGltbWVkaWF0ZV9wcmVzZW50KQogCQloZWFkZXItPmJ0aC5vcGNvZGUgICAgICAgICAgID0gSUJfT1BDT0RFX1VEX1NFTkRfT05MWV9XSVRIX0lNTUVESUFURTsKIAllbHNlCiAJCWhlYWRlci0+YnRoLm9wY29kZSAgICAgICAgICAgPSBJQl9PUENPREVfVURfU0VORF9PTkxZOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdW1lbS5jCmluZGV4IDZmN2MwOTYuLjRmOTA2ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VtZW0uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91bWVtLmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKIAlsb2NrZWQgICAgID0gbnBhZ2VzICsgY3VycmVudC0+bW0tPmxvY2tlZF92bTsKLQlsb2NrX2xpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1ciA+PiBQQUdFX1NISUZUOworCWxvY2tfbGltaXQgPSBybGltaXQoUkxJTUlUX01FTUxPQ0spID4+IFBBR0VfU0hJRlQ7CiAKIAlpZiAoKGxvY2tlZCA+IGxvY2tfbGltaXQpICYmICFjYXBhYmxlKENBUF9JUENfTE9DSykpIHsKIAkJcmV0ID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91c2VyX21hZC5jCmluZGV4IDdkZTAyOTYuLjA0YjU4NWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3VzZXJfbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXNlcl9tYWQuYwpAQCAtNjUsMTIgKzY1LDkgQEAKIH07CiAKIC8qCi0gKiBPdXIgbGlmZXRpbWUgcnVsZXMgZm9yIHRoZXNlIHN0cnVjdHMgYXJlIHRoZSBmb2xsb3dpbmc6IGVhY2ggdGltZSBhCi0gKiBkZXZpY2Ugc3BlY2lhbCBmaWxlIGlzIG9wZW5lZCwgd2UgbG9vayB1cCB0aGUgY29ycmVzcG9uZGluZyBzdHJ1Y3QKLSAqIGliX3VtYWRfcG9ydCBieSBtaW5vciBpbiB0aGUgdW1hZF9wb3J0W10gdGFibGUgd2hpbGUgaG9sZGluZyB0aGUKLSAqIHBvcnRfbG9jay4gIElmIHRoaXMgbG9va3VwIHN1Y2NlZWRzLCB3ZSB0YWtlIGEgcmVmZXJlbmNlIG9uIHRoZQotICogaWJfdW1hZF9wb3J0J3Mgc3RydWN0IGliX3VtYWRfZGV2aWNlIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlCi0gKiBwb3J0X2xvY2s7IGlmIHRoZSBsb29rdXAgZmFpbHMsIHdlIGZhaWwgdGhlIG9wZW4oKS4gIFdlIGRyb3AgdGhlc2UKKyAqIE91ciBsaWZldGltZSBydWxlcyBmb3IgdGhlc2Ugc3RydWN0cyBhcmUgdGhlIGZvbGxvd2luZzoKKyAqIGRldmljZSBzcGVjaWFsIGZpbGUgaXMgb3BlbmVkLCB3ZSB0YWtlIGEgcmVmZXJlbmNlIG9uIHRoZQorICogaWJfdW1hZF9wb3J0J3Mgc3RydWN0IGliX3VtYWRfZGV2aWNlLiBXZSBkcm9wIHRoZXNlCiAgKiByZWZlcmVuY2VzIGluIHRoZSBjb3JyZXNwb25kaW5nIGNsb3NlKCkuCiAgKgogICogSW4gYWRkaXRpb24gdG8gcmVmZXJlbmNlcyBjb21pbmcgZnJvbSBvcGVuIGNoYXJhY3RlciBkZXZpY2VzLCB0aGVyZQpAQCAtNzgsMTkgKzc1LDE0IEBACiAgKiBtb2R1bGUncyByZWZlcmVuY2UgdGFrZW4gd2hlbiBhbGxvY2F0aW5nIHRoZSBpYl91bWFkX2RldmljZSBpbgogICogaWJfdW1hZF9hZGRfb25lKCkuCiAgKgotICogV2hlbiBkZXN0cm95aW5nIGFuIGliX3VtYWRfZGV2aWNlLCB3ZSBjbGVhciBhbGwgb2YgaXRzCi0gKiBpYl91bWFkX3BvcnRzIGZyb20gdW1hZF9wb3J0W10gd2hpbGUgaG9sZGluZyBwb3J0X2xvY2sgYmVmb3JlCi0gKiBkcm9wcGluZyB0aGUgbW9kdWxlJ3MgcmVmZXJlbmNlIHRvIHRoZSBpYl91bWFkX2RldmljZS4gIFRoaXMgaXMKLSAqIGFsd2F5cyBzYWZlIGJlY2F1c2UgYW55IG9wZW4oKSBjYWxscyB3aWxsIGVpdGhlciBzdWNjZWVkIGFuZCBvYnRhaW4KLSAqIGEgcmVmZXJlbmNlIGJlZm9yZSB3ZSBjbGVhciB0aGUgdW1hZF9wb3J0W10gZW50cmllcywgb3IgZmFpbCBhZnRlcgotICogd2UgY2xlYXIgdGhlIHVtYWRfcG9ydFtdIGVudHJpZXMuCisgKiBXaGVuIGRlc3Ryb3lpbmcgYW4gaWJfdW1hZF9kZXZpY2UsIHdlIGRyb3AgdGhlIG1vZHVsZSdzIHJlZmVyZW5jZS4KICAqLwogCiBzdHJ1Y3QgaWJfdW1hZF9wb3J0IHsKLQlzdHJ1Y3QgY2RldiAgICAgICAgICAgKmNkZXY7CisJc3RydWN0IGNkZXYgICAgICAgICAgIGNkZXY7CiAJc3RydWN0IGRldmljZQkgICAgICAqZGV2OwogCi0Jc3RydWN0IGNkZXYgICAgICAgICAgICpzbV9jZGV2OworCXN0cnVjdCBjZGV2ICAgICAgICAgICBzbV9jZGV2OwogCXN0cnVjdCBkZXZpY2UJICAgICAgKnNtX2RldjsKIAlzdHJ1Y3Qgc2VtYXBob3JlICAgICAgIHNtX3NlbTsKIApAQCAtMTM2LDcgKzEyOCw2IEBACiBzdGF0aWMgY29uc3QgZGV2X3QgYmFzZV9kZXYgPSBNS0RFVihJQl9VTUFEX01BSk9SLCBJQl9VTUFEX01JTk9SX0JBU0UpOwogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBvcnRfbG9jayk7Ci1zdGF0aWMgc3RydWN0IGliX3VtYWRfcG9ydCAqdW1hZF9wb3J0W0lCX1VNQURfTUFYX1BPUlRTXTsKIHN0YXRpYyBERUNMQVJFX0JJVE1BUChkZXZfbWFwLCBJQl9VTUFEX01BWF9QT1JUUyk7CiAKIHN0YXRpYyB2b2lkIGliX3VtYWRfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpOwpAQCAtNDk2LDggKzQ4Nyw4IEBACiAJCWFoX2F0dHIuYWhfZmxhZ3MgPSBJQl9BSF9HUkg7CiAJCW1lbWNweShhaF9hdHRyLmdyaC5kZ2lkLnJhdywgcGFja2V0LT5tYWQuaGRyLmdpZCwgMTYpOwogCQlhaF9hdHRyLmdyaC5zZ2lkX2luZGV4CSAgID0gcGFja2V0LT5tYWQuaGRyLmdpZF9pbmRleDsKLQkJYWhfYXR0ci5ncmguZmxvd19sYWJlbCAJICAgPSBiZTMyX3RvX2NwdShwYWNrZXQtPm1hZC5oZHIuZmxvd19sYWJlbCk7Ci0JCWFoX2F0dHIuZ3JoLmhvcF9saW1pdCAgCSAgID0gcGFja2V0LT5tYWQuaGRyLmhvcF9saW1pdDsKKwkJYWhfYXR0ci5ncmguZmxvd19sYWJlbAkgICA9IGJlMzJfdG9fY3B1KHBhY2tldC0+bWFkLmhkci5mbG93X2xhYmVsKTsKKwkJYWhfYXR0ci5ncmguaG9wX2xpbWl0CSAgID0gcGFja2V0LT5tYWQuaGRyLmhvcF9saW1pdDsKIAkJYWhfYXR0ci5ncmgudHJhZmZpY19jbGFzcyAgPSBwYWNrZXQtPm1hZC5oZHIudHJhZmZpY19jbGFzczsKIAl9CiAKQEAgLTUyOCw5ICs1MTksOSBAQAogCQlnb3RvIGVycl9haDsKIAl9CiAKLQlwYWNrZXQtPm1zZy0+YWggCT0gYWg7CisJcGFja2V0LT5tc2ctPmFoCQk9IGFoOwogCXBhY2tldC0+bXNnLT50aW1lb3V0X21zID0gcGFja2V0LT5tYWQuaGRyLnRpbWVvdXRfbXM7Ci0JcGFja2V0LT5tc2ctPnJldHJpZXMgCT0gcGFja2V0LT5tYWQuaGRyLnJldHJpZXM7CisJcGFja2V0LT5tc2ctPnJldHJpZXMJPSBwYWNrZXQtPm1hZC5oZHIucmV0cmllczsKIAlwYWNrZXQtPm1zZy0+Y29udGV4dFswXSA9IHBhY2tldDsKIAogCS8qIENvcHkgTUFEIGhlYWRlci4gIEFueSBSTVBQIGhlYWRlciBpcyBhbHJlYWR5IGluIHBsYWNlLiAqLwpAQCAtNzc5LDE1ICs3NzAsMTEgQEAKIC8qCiAgKiBpYl91bWFkX29wZW4oKSBkb2VzIG5vdCBuZWVkIHRoZSBCS0w6CiAgKgotICogIC0gdW1hZF9wb3J0W10gYWNjZXNzZXMgYXJlIHByb3RlY3RlZCBieSBwb3J0X2xvY2ssIHRoZQotICogICAgaWJfdW1hZF9wb3J0IHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IHJlZmVyZW5jZSBjb3VudGVkLCBhbmQKKyAqICAtIHRoZSBpYl91bWFkX3BvcnQgc3RydWN0dXJlcyBhcmUgcHJvcGVybHkgcmVmZXJlbmNlIGNvdW50ZWQsIGFuZAogICogICAgZXZlcnl0aGluZyBlbHNlIGlzIHB1cmVseSBsb2NhbCB0byB0aGUgZmlsZSBiZWluZyBjcmVhdGVkLCBzbwogICogICAgcmFjZXMgYWdhaW5zdCBvdGhlciBvcGVuIGNhbGxzIGFyZSBub3QgYSBwcm9ibGVtOwogICogIC0gdGhlIGlvY3RsIG1ldGhvZCBkb2VzIG5vdCBhZmZlY3QgYW55IGdsb2JhbCBzdGF0ZSBvdXRzaWRlIG9mIHRoZQogICogICAgZmlsZSBzdHJ1Y3R1cmUgYmVpbmcgb3BlcmF0ZWQgb247Ci0gKiAgLSB0aGUgcG9ydCBpcyBhZGRlZCB0byB1bWFkX3BvcnRbXSBhcyB0aGUgbGFzdCBwYXJ0IG9mIG1vZHVsZQotICogICAgaW5pdGlhbGl6YXRpb24gc28gdGhlIG9wZW4gbWV0aG9kIHdpbGwgZWl0aGVyIGltbWVkaWF0ZWx5IHJ1bgotICogICAgLUVOWElPLCBvciBhbGwgcmVxdWlyZWQgaW5pdGlhbGl6YXRpb24gd2lsbCBiZSBkb25lLgogICovCiBzdGF0aWMgaW50IGliX3VtYWRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKQEAgLTc5NSwxMyArNzgyLDEwIEBACiAJc3RydWN0IGliX3VtYWRfZmlsZSAqZmlsZTsKIAlpbnQgcmV0ID0gMDsKIAotCXNwaW5fbG9jaygmcG9ydF9sb2NrKTsKLQlwb3J0ID0gdW1hZF9wb3J0W2ltaW5vcihpbm9kZSkgLSBJQl9VTUFEX01JTk9SX0JBU0VdOworCXBvcnQgPSBjb250YWluZXJfb2YoaW5vZGUtPmlfY2Rldiwgc3RydWN0IGliX3VtYWRfcG9ydCwgY2Rldik7CiAJaWYgKHBvcnQpCiAJCWtyZWZfZ2V0KCZwb3J0LT51bWFkX2Rldi0+cmVmKTsKLQlzcGluX3VubG9jaygmcG9ydF9sb2NrKTsKLQotCWlmICghcG9ydCkKKwllbHNlCiAJCXJldHVybiAtRU5YSU87CiAKIAltdXRleF9sb2NrKCZwb3J0LT5maWxlX211dGV4KTsKQEAgLTg3MiwxNiArODU2LDE2IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVtYWRfZm9wcyA9IHsKLQkub3duZXIgCSAJPSBUSElTX01PRFVMRSwKLQkucmVhZCAJIAk9IGliX3VtYWRfcmVhZCwKLQkud3JpdGUgCSAJPSBpYl91bWFkX3dyaXRlLAotCS5wb2xsIAkgCT0gaWJfdW1hZF9wb2xsLAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucmVhZAkJPSBpYl91bWFkX3JlYWQsCisJLndyaXRlCQk9IGliX3VtYWRfd3JpdGUsCisJLnBvbGwJCT0gaWJfdW1hZF9wb2xsLAogCS51bmxvY2tlZF9pb2N0bCA9IGliX3VtYWRfaW9jdGwsCiAjaWZkZWYgQ09ORklHX0NPTVBBVAotCS5jb21wYXRfaW9jdGwgCT0gaWJfdW1hZF9jb21wYXRfaW9jdGwsCisJLmNvbXBhdF9pb2N0bAk9IGliX3VtYWRfY29tcGF0X2lvY3RsLAogI2VuZGlmCi0JLm9wZW4gCSAJPSBpYl91bWFkX29wZW4sCi0JLnJlbGVhc2UgCT0gaWJfdW1hZF9jbG9zZQorCS5vcGVuCQk9IGliX3VtYWRfb3BlbiwKKwkucmVsZWFzZQk9IGliX3VtYWRfY2xvc2UKIH07CiAKIHN0YXRpYyBpbnQgaWJfdW1hZF9zbV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQpAQCAtODkyLDEzICs4NzYsMTAgQEAKIAl9OwogCWludCByZXQ7CiAKLQlzcGluX2xvY2soJnBvcnRfbG9jayk7Ci0JcG9ydCA9IHVtYWRfcG9ydFtpbWlub3IoaW5vZGUpIC0gSUJfVU1BRF9NSU5PUl9CQVNFIC0gSUJfVU1BRF9NQVhfUE9SVFNdOworCXBvcnQgPSBjb250YWluZXJfb2YoaW5vZGUtPmlfY2Rldiwgc3RydWN0IGliX3VtYWRfcG9ydCwgc21fY2Rldik7CiAJaWYgKHBvcnQpCiAJCWtyZWZfZ2V0KCZwb3J0LT51bWFkX2Rldi0+cmVmKTsKLQlzcGluX3VubG9jaygmcG9ydF9sb2NrKTsKLQotCWlmICghcG9ydCkKKwllbHNlCiAJCXJldHVybiAtRU5YSU87CiAKIAlpZiAoZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKQEAgLTk0OSw4ICs5MzAsOCBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1bWFkX3NtX2ZvcHMgPSB7Ci0JLm93bmVyIAkgPSBUSElTX01PRFVMRSwKLQkub3BlbiAJID0gaWJfdW1hZF9zbV9vcGVuLAorCS5vd25lcgkgPSBUSElTX01PRFVMRSwKKwkub3BlbgkgPSBpYl91bWFkX3NtX29wZW4sCiAJLnJlbGVhc2UgPSBpYl91bWFkX3NtX2Nsb3NlCiB9OwogCkBAIC05ODQsMjIgKzk2NSw1NCBAQAogfQogc3RhdGljIERFVklDRV9BVFRSKHBvcnQsIFNfSVJVR08sIHNob3dfcG9ydCwgTlVMTCk7CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfYWJpX3ZlcnNpb24oc3RydWN0IGNsYXNzICpjbGFzcywgY2hhciAqYnVmKQorc3RhdGljIENMQVNTX0FUVFJfU1RSSU5HKGFiaV92ZXJzaW9uLCBTX0lSVUdPLAorCQkJIF9fc3RyaW5naWZ5KElCX1VTRVJfTUFEX0FCSV9WRVJTSU9OKSk7CisKK3N0YXRpYyBkZXZfdCBvdmVyZmxvd19tYWo7CitzdGF0aWMgREVDTEFSRV9CSVRNQVAob3ZlcmZsb3dfbWFwLCBJQl9VTUFEX01BWF9QT1JUUyk7CitzdGF0aWMgaW50IGZpbmRfb3ZlcmZsb3dfZGV2bnVtKHZvaWQpCiB7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIElCX1VTRVJfTUFEX0FCSV9WRVJTSU9OKTsKKwlpbnQgcmV0OworCisJaWYgKCFvdmVyZmxvd19tYWopIHsKKwkJcmV0ID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmb3ZlcmZsb3dfbWFqLCAwLCBJQl9VTUFEX01BWF9QT1JUUyAqIDIsCisJCQkJCSAgImluZmluaWJhbmRfbWFkIik7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAidXNlcl9tYWQ6IGNvdWxkbid0IHJlZ2lzdGVyIGR5bmFtaWMgZGV2aWNlIG51bWJlclxuIik7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJcmV0ID0gZmluZF9maXJzdF96ZXJvX2JpdChvdmVyZmxvd19tYXAsIElCX1VNQURfTUFYX1BPUlRTKTsKKwlpZiAocmV0ID49IElCX1VNQURfTUFYX1BPUlRTKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gcmV0OwogfQotc3RhdGljIENMQVNTX0FUVFIoYWJpX3ZlcnNpb24sIFNfSVJVR08sIHNob3dfYWJpX3ZlcnNpb24sIE5VTEwpOwogCiBzdGF0aWMgaW50IGliX3VtYWRfaW5pdF9wb3J0KHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSwgaW50IHBvcnRfbnVtLAogCQkJICAgICBzdHJ1Y3QgaWJfdW1hZF9wb3J0ICpwb3J0KQogeworCWludCBkZXZudW07CisJZGV2X3QgYmFzZTsKKwogCXNwaW5fbG9jaygmcG9ydF9sb2NrKTsKLQlwb3J0LT5kZXZfbnVtID0gZmluZF9maXJzdF96ZXJvX2JpdChkZXZfbWFwLCBJQl9VTUFEX01BWF9QT1JUUyk7Ci0JaWYgKHBvcnQtPmRldl9udW0gPj0gSUJfVU1BRF9NQVhfUE9SVFMpIHsKKwlkZXZudW0gPSBmaW5kX2ZpcnN0X3plcm9fYml0KGRldl9tYXAsIElCX1VNQURfTUFYX1BPUlRTKTsKKwlpZiAoZGV2bnVtID49IElCX1VNQURfTUFYX1BPUlRTKSB7CiAJCXNwaW5fdW5sb2NrKCZwb3J0X2xvY2spOwotCQlyZXR1cm4gLTE7CisJCWRldm51bSA9IGZpbmRfb3ZlcmZsb3dfZGV2bnVtKCk7CisJCWlmIChkZXZudW0gPCAwKQorCQkJcmV0dXJuIC0xOworCisJCXNwaW5fbG9jaygmcG9ydF9sb2NrKTsKKwkJcG9ydC0+ZGV2X251bSA9IGRldm51bSArIElCX1VNQURfTUFYX1BPUlRTOworCQliYXNlID0gZGV2bnVtICsgb3ZlcmZsb3dfbWFqOworCQlzZXRfYml0KGRldm51bSwgb3ZlcmZsb3dfbWFwKTsKKwl9IGVsc2UgeworCQlwb3J0LT5kZXZfbnVtID0gZGV2bnVtOworCQliYXNlID0gZGV2bnVtICsgYmFzZV9kZXY7CisJCXNldF9iaXQoZGV2bnVtLCBkZXZfbWFwKTsKIAl9Ci0Jc2V0X2JpdChwb3J0LT5kZXZfbnVtLCBkZXZfbWFwKTsKIAlzcGluX3VubG9jaygmcG9ydF9sb2NrKTsKIAogCXBvcnQtPmliX2RldiAgID0gZGV2aWNlOwpAQCAtMTAwOCwxNyArMTAyMSwxNCBAQAogCW11dGV4X2luaXQoJnBvcnQtPmZpbGVfbXV0ZXgpOwogCUlOSVRfTElTVF9IRUFEKCZwb3J0LT5maWxlX2xpc3QpOwogCi0JcG9ydC0+Y2RldiA9IGNkZXZfYWxsb2MoKTsKLQlpZiAoIXBvcnQtPmNkZXYpCi0JCXJldHVybiAtMTsKLQlwb3J0LT5jZGV2LT5vd25lciA9IFRISVNfTU9EVUxFOwotCXBvcnQtPmNkZXYtPm9wcyAgID0gJnVtYWRfZm9wczsKLQlrb2JqZWN0X3NldF9uYW1lKCZwb3J0LT5jZGV2LT5rb2JqLCAidW1hZCVkIiwgcG9ydC0+ZGV2X251bSk7Ci0JaWYgKGNkZXZfYWRkKHBvcnQtPmNkZXYsIGJhc2VfZGV2ICsgcG9ydC0+ZGV2X251bSwgMSkpCisJY2Rldl9pbml0KCZwb3J0LT5jZGV2LCAmdW1hZF9mb3BzKTsKKwlwb3J0LT5jZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7CisJa29iamVjdF9zZXRfbmFtZSgmcG9ydC0+Y2Rldi5rb2JqLCAidW1hZCVkIiwgcG9ydC0+ZGV2X251bSk7CisJaWYgKGNkZXZfYWRkKCZwb3J0LT5jZGV2LCBiYXNlLCAxKSkKIAkJZ290byBlcnJfY2RldjsKIAogCXBvcnQtPmRldiA9IGRldmljZV9jcmVhdGUodW1hZF9jbGFzcywgZGV2aWNlLT5kbWFfZGV2aWNlLAotCQkJCSAgcG9ydC0+Y2Rldi0+ZGV2LCBwb3J0LAorCQkJCSAgcG9ydC0+Y2Rldi5kZXYsIHBvcnQsCiAJCQkJICAidW1hZCVkIiwgcG9ydC0+ZGV2X251bSk7CiAJaWYgKElTX0VSUihwb3J0LT5kZXYpKQogCQlnb3RvIGVycl9jZGV2OwpAQCAtMTAyOCwxNyArMTAzOCwxNSBAQAogCWlmIChkZXZpY2VfY3JlYXRlX2ZpbGUocG9ydC0+ZGV2LCAmZGV2X2F0dHJfcG9ydCkpCiAJCWdvdG8gZXJyX2RldjsKIAotCXBvcnQtPnNtX2NkZXYgPSBjZGV2X2FsbG9jKCk7Ci0JaWYgKCFwb3J0LT5zbV9jZGV2KQotCQlnb3RvIGVycl9kZXY7Ci0JcG9ydC0+c21fY2Rldi0+b3duZXIgPSBUSElTX01PRFVMRTsKLQlwb3J0LT5zbV9jZGV2LT5vcHMgICA9ICZ1bWFkX3NtX2ZvcHM7Ci0Ja29iamVjdF9zZXRfbmFtZSgmcG9ydC0+c21fY2Rldi0+a29iaiwgImlzc20lZCIsIHBvcnQtPmRldl9udW0pOwotCWlmIChjZGV2X2FkZChwb3J0LT5zbV9jZGV2LCBiYXNlX2RldiArIHBvcnQtPmRldl9udW0gKyBJQl9VTUFEX01BWF9QT1JUUywgMSkpCisJYmFzZSArPSBJQl9VTUFEX01BWF9QT1JUUzsKKwljZGV2X2luaXQoJnBvcnQtPnNtX2NkZXYsICZ1bWFkX3NtX2ZvcHMpOworCXBvcnQtPnNtX2NkZXYub3duZXIgPSBUSElTX01PRFVMRTsKKwlrb2JqZWN0X3NldF9uYW1lKCZwb3J0LT5zbV9jZGV2LmtvYmosICJpc3NtJWQiLCBwb3J0LT5kZXZfbnVtKTsKKwlpZiAoY2Rldl9hZGQoJnBvcnQtPnNtX2NkZXYsIGJhc2UsIDEpKQogCQlnb3RvIGVycl9zbV9jZGV2OwogCiAJcG9ydC0+c21fZGV2ID0gZGV2aWNlX2NyZWF0ZSh1bWFkX2NsYXNzLCBkZXZpY2UtPmRtYV9kZXZpY2UsCi0JCQkJICAgICBwb3J0LT5zbV9jZGV2LT5kZXYsIHBvcnQsCisJCQkJICAgICBwb3J0LT5zbV9jZGV2LmRldiwgcG9ydCwKIAkJCQkgICAgICJpc3NtJWQiLCBwb3J0LT5kZXZfbnVtKTsKIAlpZiAoSVNfRVJSKHBvcnQtPnNtX2RldikpCiAJCWdvdG8gZXJyX3NtX2NkZXY7CkBAIC0xMDQ4LDI0ICsxMDU2LDIzIEBACiAJaWYgKGRldmljZV9jcmVhdGVfZmlsZShwb3J0LT5zbV9kZXYsICZkZXZfYXR0cl9wb3J0KSkKIAkJZ290byBlcnJfc21fZGV2OwogCi0Jc3Bpbl9sb2NrKCZwb3J0X2xvY2spOwotCXVtYWRfcG9ydFtwb3J0LT5kZXZfbnVtXSA9IHBvcnQ7Ci0Jc3Bpbl91bmxvY2soJnBvcnRfbG9jayk7Ci0KIAlyZXR1cm4gMDsKIAogZXJyX3NtX2RldjoKLQlkZXZpY2VfZGVzdHJveSh1bWFkX2NsYXNzLCBwb3J0LT5zbV9jZGV2LT5kZXYpOworCWRldmljZV9kZXN0cm95KHVtYWRfY2xhc3MsIHBvcnQtPnNtX2NkZXYuZGV2KTsKIAogZXJyX3NtX2NkZXY6Ci0JY2Rldl9kZWwocG9ydC0+c21fY2Rldik7CisJY2Rldl9kZWwoJnBvcnQtPnNtX2NkZXYpOwogCiBlcnJfZGV2OgotCWRldmljZV9kZXN0cm95KHVtYWRfY2xhc3MsIHBvcnQtPmNkZXYtPmRldik7CisJZGV2aWNlX2Rlc3Ryb3kodW1hZF9jbGFzcywgcG9ydC0+Y2Rldi5kZXYpOwogCiBlcnJfY2RldjoKLQljZGV2X2RlbChwb3J0LT5jZGV2KTsKLQljbGVhcl9iaXQocG9ydC0+ZGV2X251bSwgZGV2X21hcCk7CisJY2Rldl9kZWwoJnBvcnQtPmNkZXYpOworCWlmIChwb3J0LT5kZXZfbnVtIDwgSUJfVU1BRF9NQVhfUE9SVFMpCisJCWNsZWFyX2JpdChkZXZudW0sIGRldl9tYXApOworCWVsc2UKKwkJY2xlYXJfYml0KGRldm51bSwgb3ZlcmZsb3dfbWFwKTsKIAogCXJldHVybiAtMTsKIH0KQEAgLTEwNzksMTUgKzEwODYsMTEgQEAKIAlkZXZfc2V0X2RydmRhdGEocG9ydC0+ZGV2LCAgICBOVUxMKTsKIAlkZXZfc2V0X2RydmRhdGEocG9ydC0+c21fZGV2LCBOVUxMKTsKIAotCWRldmljZV9kZXN0cm95KHVtYWRfY2xhc3MsIHBvcnQtPmNkZXYtPmRldik7Ci0JZGV2aWNlX2Rlc3Ryb3kodW1hZF9jbGFzcywgcG9ydC0+c21fY2Rldi0+ZGV2KTsKKwlkZXZpY2VfZGVzdHJveSh1bWFkX2NsYXNzLCBwb3J0LT5jZGV2LmRldik7CisJZGV2aWNlX2Rlc3Ryb3kodW1hZF9jbGFzcywgcG9ydC0+c21fY2Rldi5kZXYpOwogCi0JY2Rldl9kZWwocG9ydC0+Y2Rldik7Ci0JY2Rldl9kZWwocG9ydC0+c21fY2Rldik7Ci0KLQlzcGluX2xvY2soJnBvcnRfbG9jayk7Ci0JdW1hZF9wb3J0W3BvcnQtPmRldl9udW1dID0gTlVMTDsKLQlzcGluX3VubG9jaygmcG9ydF9sb2NrKTsKKwljZGV2X2RlbCgmcG9ydC0+Y2Rldik7CisJY2Rldl9kZWwoJnBvcnQtPnNtX2NkZXYpOwogCiAJbXV0ZXhfbG9jaygmcG9ydC0+ZmlsZV9tdXRleCk7CiAKQEAgLTExMDYsNyArMTEwOSwxMCBAQAogCiAJbXV0ZXhfdW5sb2NrKCZwb3J0LT5maWxlX211dGV4KTsKIAotCWNsZWFyX2JpdChwb3J0LT5kZXZfbnVtLCBkZXZfbWFwKTsKKwlpZiAocG9ydC0+ZGV2X251bSA8IElCX1VNQURfTUFYX1BPUlRTKQorCQljbGVhcl9iaXQocG9ydC0+ZGV2X251bSwgZGV2X21hcCk7CisJZWxzZQorCQljbGVhcl9iaXQocG9ydC0+ZGV2X251bSAtIElCX1VNQURfTUFYX1BPUlRTLCBvdmVyZmxvd19tYXApOwogfQogCiBzdGF0aWMgdm9pZCBpYl91bWFkX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKQpAQCAtMTE4NSw3ICsxMTkxLDcgQEAKIAkJZ290byBvdXRfY2hyZGV2OwogCX0KIAotCXJldCA9IGNsYXNzX2NyZWF0ZV9maWxlKHVtYWRfY2xhc3MsICZjbGFzc19hdHRyX2FiaV92ZXJzaW9uKTsKKwlyZXQgPSBjbGFzc19jcmVhdGVfZmlsZSh1bWFkX2NsYXNzLCAmY2xhc3NfYXR0cl9hYmlfdmVyc2lvbi5hdHRyKTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAidXNlcl9tYWQ6IGNvdWxkbid0IGNyZWF0ZSBhYmlfdmVyc2lvbiBhdHRyaWJ1dGVcbiIpOwogCQlnb3RvIG91dF9jbGFzczsKQEAgLTEyMTQsNiArMTIyMCw4IEBACiAJaWJfdW5yZWdpc3Rlcl9jbGllbnQoJnVtYWRfY2xpZW50KTsKIAljbGFzc19kZXN0cm95KHVtYWRfY2xhc3MpOwogCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihiYXNlX2RldiwgSUJfVU1BRF9NQVhfUE9SVFMgKiAyKTsKKwlpZiAob3ZlcmZsb3dfbWFqKQorCQl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24ob3ZlcmZsb3dfbWFqLCBJQl9VTUFEX01BWF9QT1JUUyAqIDIpOwogfQogCiBtb2R1bGVfaW5pdChpYl91bWFkX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzLmggYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaAppbmRleCBiM2VhOTU4Li5hMDc4ZTU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnMuaApAQCAtNDEsNiArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KIAogI2luY2x1ZGUgPHJkbWEvaWJfdmVyYnMuaD4KICNpbmNsdWRlIDxyZG1hL2liX3VtZW0uaD4KQEAgLTY5LDIzICs3MCwyMyBAQAogCiBzdHJ1Y3QgaWJfdXZlcmJzX2RldmljZSB7CiAJc3RydWN0IGtyZWYJCQkJcmVmOworCWludAkJCQkJbnVtX2NvbXBfdmVjdG9yczsKIAlzdHJ1Y3QgY29tcGxldGlvbgkJCWNvbXA7Ci0JaW50CQkJCQlkZXZudW07Ci0Jc3RydWN0IGNkZXYJCQkgICAgICAgKmNkZXY7CiAJc3RydWN0IGRldmljZQkJCSAgICAgICAqZGV2OwogCXN0cnVjdCBpYl9kZXZpY2UJCSAgICAgICAqaWJfZGV2OwotCWludAkJCQkJbnVtX2NvbXBfdmVjdG9yczsKKwlpbnQJCQkJCWRldm51bTsKKwlzdHJ1Y3QgY2RldgkJCSAgICAgICAgY2RldjsKIH07CiAKIHN0cnVjdCBpYl91dmVyYnNfZXZlbnRfZmlsZSB7CiAJc3RydWN0IGtyZWYJCQkJcmVmOworCWludAkJCQkJaXNfYXN5bmM7CiAJc3RydWN0IGliX3V2ZXJic19maWxlCQkgICAgICAgKnV2ZXJic19maWxlOwogCXNwaW5sb2NrX3QJCQkJbG9jazsKKwlpbnQJCQkJCWlzX2Nsb3NlZDsKIAl3YWl0X3F1ZXVlX2hlYWRfdAkJCXBvbGxfd2FpdDsKIAlzdHJ1Y3QgZmFzeW5jX3N0cnVjdAkJICAgICAgICphc3luY19xdWV1ZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkCQkJZXZlbnRfbGlzdDsKLQlpbnQJCQkJCWlzX2FzeW5jOwotCWludAkJCQkJaXNfY2xvc2VkOwogfTsKIAogc3RydWN0IGliX3V2ZXJic19maWxlIHsKQEAgLTE0NSw3ICsxNDYsNyBAQAogdm9pZCBpZHJfcmVtb3ZlX3VvYmooc3RydWN0IGlkciAqaWRwLCBzdHJ1Y3QgaWJfdW9iamVjdCAqdW9iaik7CiAKIHN0cnVjdCBmaWxlICppYl91dmVyYnNfYWxsb2NfZXZlbnRfZmlsZShzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgKnV2ZXJic19maWxlLAotCQkJCQlpbnQgaXNfYXN5bmMsIGludCAqZmQpOworCQkJCQlpbnQgaXNfYXN5bmMpOwogc3RydWN0IGliX3V2ZXJic19ldmVudF9maWxlICppYl91dmVyYnNfbG9va3VwX2NvbXBfZmlsZShpbnQgZmQpOwogCiB2b2lkIGliX3V2ZXJic19yZWxlYXNlX3VjcShzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgKmZpbGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfY21kLmMKaW5kZXggMTEyZDM5Ny4uZjcxY2YxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX2NtZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19jbWQuYwpAQCAtMzAxLDEwICszMDEsMTUgQEAKIAogCXJlc3AubnVtX2NvbXBfdmVjdG9ycyA9IGZpbGUtPmRldmljZS0+bnVtX2NvbXBfdmVjdG9yczsKIAotCWZpbHAgPSBpYl91dmVyYnNfYWxsb2NfZXZlbnRfZmlsZShmaWxlLCAxLCAmcmVzcC5hc3luY19mZCk7CisJcmV0ID0gZ2V0X3VudXNlZF9mZCgpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9mcmVlOworCXJlc3AuYXN5bmNfZmQgPSByZXQ7CisKKwlmaWxwID0gaWJfdXZlcmJzX2FsbG9jX2V2ZW50X2ZpbGUoZmlsZSwgMSk7CiAJaWYgKElTX0VSUihmaWxwKSkgewogCQlyZXQgPSBQVFJfRVJSKGZpbHApOwotCQlnb3RvIGVycl9mcmVlOworCQlnb3RvIGVycl9mZDsKIAl9CiAKIAlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlLApAQCAtMzMyLDkgKzMzNywxMSBAQAogCXJldHVybiBpbl9sZW47CiAKIGVycl9maWxlOgotCXB1dF91bnVzZWRfZmQocmVzcC5hc3luY19mZCk7CiAJZnB1dChmaWxwKTsKIAorZXJyX2ZkOgorCXB1dF91bnVzZWRfZmQocmVzcC5hc3luY19mZCk7CisKIGVycl9mcmVlOgogCWliZGV2LT5kZWFsbG9jX3Vjb250ZXh0KHVjb250ZXh0KTsKIApAQCAtNzE1LDYgKzcyMiw3IEBACiAJc3RydWN0IGliX3V2ZXJic19jcmVhdGVfY29tcF9jaGFubmVsCSAgIGNtZDsKIAlzdHJ1Y3QgaWJfdXZlcmJzX2NyZWF0ZV9jb21wX2NoYW5uZWxfcmVzcCAgcmVzcDsKIAlzdHJ1Y3QgZmlsZQkJCQkgICpmaWxwOworCWludCByZXQ7CiAKIAlpZiAob3V0X2xlbiA8IHNpemVvZiByZXNwKQogCQlyZXR1cm4gLUVOT1NQQzsKQEAgLTcyMiw5ICs3MzAsMTYgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJmNtZCwgYnVmLCBzaXplb2YgY21kKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlmaWxwID0gaWJfdXZlcmJzX2FsbG9jX2V2ZW50X2ZpbGUoZmlsZSwgMCwgJnJlc3AuZmQpOwotCWlmIChJU19FUlIoZmlscCkpCisJcmV0ID0gZ2V0X3VudXNlZF9mZCgpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJlc3AuZmQgPSByZXQ7CisKKwlmaWxwID0gaWJfdXZlcmJzX2FsbG9jX2V2ZW50X2ZpbGUoZmlsZSwgMCk7CisJaWYgKElTX0VSUihmaWxwKSkgeworCQlwdXRfdW51c2VkX2ZkKHJlc3AuZmQpOwogCQlyZXR1cm4gUFRSX0VSUihmaWxwKTsKKwl9CiAKIAlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykgY21kLnJlc3BvbnNlLAogCQkJICZyZXNwLCBzaXplb2YgcmVzcCkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvY29yZS91dmVyYnNfbWFpbi5jCmluZGV4IDVmMjg0ZmYuLmQ4MDVjZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL3V2ZXJic19tYWluLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvdXZlcmJzX21haW4uYwpAQCAtNDIsOCArNDIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9hbm9uX2lub2Rlcy5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtNTMsOCArNTMsNiBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJJbmZpbmlCYW5kIHVzZXJzcGFjZSB2ZXJicyBhY2Nlc3MiKTsKIE1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKIAotI2RlZmluZSBJTkZJTklCQU5ERVZFTlRGU19NQUdJQwkweDQ5NDI2NTc2CS8qICJJQmV2IiAqLwotCiBlbnVtIHsKIAlJQl9VVkVSQlNfTUFKT1IgICAgICAgPSAyMzEsCiAJSUJfVVZFUkJTX0JBU0VfTUlOT1IgID0gMTkyLApAQCAtNzUsNDQgKzczLDQxIEBACiBERUZJTkVfSURSKGliX3V2ZXJic19zcnFfaWRyKTsKIAogc3RhdGljIERFRklORV9TUElOTE9DSyhtYXBfbG9jayk7Ci1zdGF0aWMgc3RydWN0IGliX3V2ZXJic19kZXZpY2UgKmRldl90YWJsZVtJQl9VVkVSQlNfTUFYX0RFVklDRVNdOwogc3RhdGljIERFQ0xBUkVfQklUTUFQKGRldl9tYXAsIElCX1VWRVJCU19NQVhfREVWSUNFUyk7CiAKIHN0YXRpYyBzc2l6ZV90ICgqdXZlcmJzX2NtZF90YWJsZVtdKShzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgKmZpbGUsCiAJCQkJICAgICBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgaW5fbGVuLAogCQkJCSAgICAgaW50IG91dF9sZW4pID0gewotCVtJQl9VU0VSX1ZFUkJTX0NNRF9HRVRfQ09OVEVYVF0gICAJPSBpYl91dmVyYnNfZ2V0X2NvbnRleHQsCi0JW0lCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX0RFVklDRV0gIAk9IGliX3V2ZXJic19xdWVyeV9kZXZpY2UsCi0JW0lCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX1BPUlRdICAgIAk9IGliX3V2ZXJic19xdWVyeV9wb3J0LAotCVtJQl9VU0VSX1ZFUkJTX0NNRF9BTExPQ19QRF0gICAgICAJPSBpYl91dmVyYnNfYWxsb2NfcGQsCi0JW0lCX1VTRVJfVkVSQlNfQ01EX0RFQUxMT0NfUERdICAgIAk9IGliX3V2ZXJic19kZWFsbG9jX3BkLAotCVtJQl9VU0VSX1ZFUkJTX0NNRF9SRUdfTVJdICAgICAgICAJPSBpYl91dmVyYnNfcmVnX21yLAotCVtJQl9VU0VSX1ZFUkJTX0NNRF9ERVJFR19NUl0gICAgICAJPSBpYl91dmVyYnNfZGVyZWdfbXIsCisJW0lCX1VTRVJfVkVSQlNfQ01EX0dFVF9DT05URVhUXQkJPSBpYl91dmVyYnNfZ2V0X2NvbnRleHQsCisJW0lCX1VTRVJfVkVSQlNfQ01EX1FVRVJZX0RFVklDRV0JPSBpYl91dmVyYnNfcXVlcnlfZGV2aWNlLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9QT1JUXQkJPSBpYl91dmVyYnNfcXVlcnlfcG9ydCwKKwlbSUJfVVNFUl9WRVJCU19DTURfQUxMT0NfUERdCQk9IGliX3V2ZXJic19hbGxvY19wZCwKKwlbSUJfVVNFUl9WRVJCU19DTURfREVBTExPQ19QRF0JCT0gaWJfdXZlcmJzX2RlYWxsb2NfcGQsCisJW0lCX1VTRVJfVkVSQlNfQ01EX1JFR19NUl0JCT0gaWJfdXZlcmJzX3JlZ19tciwKKwlbSUJfVVNFUl9WRVJCU19DTURfREVSRUdfTVJdCQk9IGliX3V2ZXJic19kZXJlZ19tciwKIAlbSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX0NPTVBfQ0hBTk5FTF0gPSBpYl91dmVyYnNfY3JlYXRlX2NvbXBfY2hhbm5lbCwKLQlbSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX0NRXSAgICAgCT0gaWJfdXZlcmJzX2NyZWF0ZV9jcSwKLQlbSUJfVVNFUl9WRVJCU19DTURfUkVTSVpFX0NRXSAgICAgCT0gaWJfdXZlcmJzX3Jlc2l6ZV9jcSwKLQlbSUJfVVNFUl9WRVJCU19DTURfUE9MTF9DUV0gICAgIAk9IGliX3V2ZXJic19wb2xsX2NxLAotCVtJQl9VU0VSX1ZFUkJTX0NNRF9SRVFfTk9USUZZX0NRXSAgICAgCT0gaWJfdXZlcmJzX3JlcV9ub3RpZnlfY3EsCi0JW0lCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lfQ1FdICAgIAk9IGliX3V2ZXJic19kZXN0cm95X2NxLAotCVtJQl9VU0VSX1ZFUkJTX0NNRF9DUkVBVEVfUVBdICAgICAJPSBpYl91dmVyYnNfY3JlYXRlX3FwLAotCVtJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9RUF0gICAgIAk9IGliX3V2ZXJic19xdWVyeV9xcCwKLQlbSUJfVVNFUl9WRVJCU19DTURfTU9ESUZZX1FQXSAgICAgCT0gaWJfdXZlcmJzX21vZGlmeV9xcCwKLQlbSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9RUF0gICAgCT0gaWJfdXZlcmJzX2Rlc3Ryb3lfcXAsCi0JW0lCX1VTRVJfVkVSQlNfQ01EX1BPU1RfU0VORF0gICAgCT0gaWJfdXZlcmJzX3Bvc3Rfc2VuZCwKLQlbSUJfVVNFUl9WRVJCU19DTURfUE9TVF9SRUNWXSAgICAJPSBpYl91dmVyYnNfcG9zdF9yZWN2LAotCVtJQl9VU0VSX1ZFUkJTX0NNRF9QT1NUX1NSUV9SRUNWXSAgICAJPSBpYl91dmVyYnNfcG9zdF9zcnFfcmVjdiwKLQlbSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX0FIXSAgICAJPSBpYl91dmVyYnNfY3JlYXRlX2FoLAotCVtJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX0FIXSAgICAJPSBpYl91dmVyYnNfZGVzdHJveV9haCwKLQlbSUJfVVNFUl9WRVJCU19DTURfQVRUQUNIX01DQVNUXSAgCT0gaWJfdXZlcmJzX2F0dGFjaF9tY2FzdCwKLQlbSUJfVVNFUl9WRVJCU19DTURfREVUQUNIX01DQVNUXSAgCT0gaWJfdXZlcmJzX2RldGFjaF9tY2FzdCwKLQlbSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX1NSUV0gICAgCT0gaWJfdXZlcmJzX2NyZWF0ZV9zcnEsCi0JW0lCX1VTRVJfVkVSQlNfQ01EX01PRElGWV9TUlFdICAgIAk9IGliX3V2ZXJic19tb2RpZnlfc3JxLAotCVtJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9TUlFdICAgICAJPSBpYl91dmVyYnNfcXVlcnlfc3JxLAotCVtJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX1NSUV0gICAJPSBpYl91dmVyYnNfZGVzdHJveV9zcnEsCisJW0lCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9DUV0JCT0gaWJfdXZlcmJzX2NyZWF0ZV9jcSwKKwlbSUJfVVNFUl9WRVJCU19DTURfUkVTSVpFX0NRXQkJPSBpYl91dmVyYnNfcmVzaXplX2NxLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9QT0xMX0NRXQkJPSBpYl91dmVyYnNfcG9sbF9jcSwKKwlbSUJfVVNFUl9WRVJCU19DTURfUkVRX05PVElGWV9DUV0JPSBpYl91dmVyYnNfcmVxX25vdGlmeV9jcSwKKwlbSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9DUV0JCT0gaWJfdXZlcmJzX2Rlc3Ryb3lfY3EsCisJW0lCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9RUF0JCT0gaWJfdXZlcmJzX2NyZWF0ZV9xcCwKKwlbSUJfVVNFUl9WRVJCU19DTURfUVVFUllfUVBdCQk9IGliX3V2ZXJic19xdWVyeV9xcCwKKwlbSUJfVVNFUl9WRVJCU19DTURfTU9ESUZZX1FQXQkJPSBpYl91dmVyYnNfbW9kaWZ5X3FwLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9ERVNUUk9ZX1FQXQkJPSBpYl91dmVyYnNfZGVzdHJveV9xcCwKKwlbSUJfVVNFUl9WRVJCU19DTURfUE9TVF9TRU5EXQkJPSBpYl91dmVyYnNfcG9zdF9zZW5kLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9QT1NUX1JFQ1ZdCQk9IGliX3V2ZXJic19wb3N0X3JlY3YsCisJW0lCX1VTRVJfVkVSQlNfQ01EX1BPU1RfU1JRX1JFQ1ZdCT0gaWJfdXZlcmJzX3Bvc3Rfc3JxX3JlY3YsCisJW0lCX1VTRVJfVkVSQlNfQ01EX0NSRUFURV9BSF0JCT0gaWJfdXZlcmJzX2NyZWF0ZV9haCwKKwlbSUJfVVNFUl9WRVJCU19DTURfREVTVFJPWV9BSF0JCT0gaWJfdXZlcmJzX2Rlc3Ryb3lfYWgsCisJW0lCX1VTRVJfVkVSQlNfQ01EX0FUVEFDSF9NQ0FTVF0JPSBpYl91dmVyYnNfYXR0YWNoX21jYXN0LAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9ERVRBQ0hfTUNBU1RdCT0gaWJfdXZlcmJzX2RldGFjaF9tY2FzdCwKKwlbSUJfVVNFUl9WRVJCU19DTURfQ1JFQVRFX1NSUV0JCT0gaWJfdXZlcmJzX2NyZWF0ZV9zcnEsCisJW0lCX1VTRVJfVkVSQlNfQ01EX01PRElGWV9TUlFdCQk9IGliX3V2ZXJic19tb2RpZnlfc3JxLAorCVtJQl9VU0VSX1ZFUkJTX0NNRF9RVUVSWV9TUlFdCQk9IGliX3V2ZXJic19xdWVyeV9zcnEsCisJW0lCX1VTRVJfVkVSQlNfQ01EX0RFU1RST1lfU1JRXQkJPSBpYl91dmVyYnNfZGVzdHJveV9zcnEsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZmc21vdW50ICp1dmVyYnNfZXZlbnRfbW50OwotCiBzdGF0aWMgdm9pZCBpYl91dmVyYnNfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpOwogc3RhdGljIHZvaWQgaWJfdXZlcmJzX3JlbW92ZV9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKIApAQCAtMzcwLDcgKzM2NSw3IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHV2ZXJic19ldmVudF9mb3BzID0gewogCS5vd25lcgkgPSBUSElTX01PRFVMRSwKLQkucmVhZCAJID0gaWJfdXZlcmJzX2V2ZW50X3JlYWQsCisJLnJlYWQJID0gaWJfdXZlcmJzX2V2ZW50X3JlYWQsCiAJLnBvbGwgICAgPSBpYl91dmVyYnNfZXZlbnRfcG9sbCwKIAkucmVsZWFzZSA9IGliX3V2ZXJic19ldmVudF9jbG9zZSwKIAkuZmFzeW5jICA9IGliX3V2ZXJic19ldmVudF9mYXN5bmMKQEAgLTQ4OSwxMiArNDg0LDEwIEBACiB9CiAKIHN0cnVjdCBmaWxlICppYl91dmVyYnNfYWxsb2NfZXZlbnRfZmlsZShzdHJ1Y3QgaWJfdXZlcmJzX2ZpbGUgKnV2ZXJic19maWxlLAotCQkJCQlpbnQgaXNfYXN5bmMsIGludCAqZmQpCisJCQkJCWludCBpc19hc3luYykKIHsKIAlzdHJ1Y3QgaWJfdXZlcmJzX2V2ZW50X2ZpbGUgKmV2X2ZpbGU7Ci0Jc3RydWN0IHBhdGggcGF0aDsKIAlzdHJ1Y3QgZmlsZSAqZmlscDsKLQlpbnQgcmV0OwogCiAJZXZfZmlsZSA9IGttYWxsb2Moc2l6ZW9mICpldl9maWxlLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWV2X2ZpbGUpCkBAIC01MDksMzggKzUwMiwxMiBAQAogCWV2X2ZpbGUtPmlzX2FzeW5jICAgID0gaXNfYXN5bmM7CiAJZXZfZmlsZS0+aXNfY2xvc2VkICAgPSAwOwogCi0JKmZkID0gZ2V0X3VudXNlZF9mZCgpOwotCWlmICgqZmQgPCAwKSB7Ci0JCXJldCA9ICpmZDsKLQkJZ290byBlcnI7Ci0JfQotCi0JLyoKLQkgKiBmb3BzX2dldCgpIGNhbid0IGZhaWwgaGVyZSwgYmVjYXVzZSB3ZSdyZSBjb21pbmcgZnJvbSBhCi0JICogc3lzdGVtIGNhbGwgb24gYSB1dmVyYnMgZmlsZSwgd2hpY2ggd2lsbCBhbHJlYWR5IGhhdmUgYQotCSAqIG1vZHVsZSByZWZlcmVuY2UuCi0JICovCi0JcGF0aC5tbnQgPSB1dmVyYnNfZXZlbnRfbW50OwotCXBhdGguZGVudHJ5ID0gdXZlcmJzX2V2ZW50X21udC0+bW50X3Jvb3Q7Ci0JcGF0aF9nZXQoJnBhdGgpOwotCWZpbHAgPSBhbGxvY19maWxlKCZwYXRoLCBGTU9ERV9SRUFELCBmb3BzX2dldCgmdXZlcmJzX2V2ZW50X2ZvcHMpKTsKLQlpZiAoIWZpbHApIHsKLQkJcmV0ID0gLUVORklMRTsKLQkJZ290byBlcnJfZmQ7Ci0JfQotCi0JZmlscC0+cHJpdmF0ZV9kYXRhID0gZXZfZmlsZTsKKwlmaWxwID0gYW5vbl9pbm9kZV9nZXRmaWxlKCJbaW5maW5pYmFuZGV2ZW50XSIsICZ1dmVyYnNfZXZlbnRfZm9wcywKKwkJCQkgIGV2X2ZpbGUsIE9fUkRPTkxZKTsKKwlpZiAoSVNfRVJSKGZpbHApKQorCQlrZnJlZShldl9maWxlKTsKIAogCXJldHVybiBmaWxwOwotCi1lcnJfZmQ6Ci0JZm9wc19wdXQoJnV2ZXJic19ldmVudF9mb3BzKTsKLQlwYXRoX3B1dCgmcGF0aCk7Ci0JcHV0X3VudXNlZF9mZCgqZmQpOwotCi1lcnI6Ci0Ja2ZyZWUoZXZfZmlsZSk7Ci0JcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIAogLyoKQEAgLTYxNywxNCArNTg0LDEyIEBACiAvKgogICogaWJfdXZlcmJzX29wZW4oKSBkb2VzIG5vdCBuZWVkIHRoZSBCS0w6CiAgKgotICogIC0gZGV2X3RhYmxlW10gYWNjZXNzZXMgYXJlIHByb3RlY3RlZCBieSBtYXBfbG9jaywgdGhlCi0gKiAgICBpYl91dmVyYnNfZGV2aWNlIHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IHJlZmVyZW5jZSBjb3VudGVkLCBhbmQKKyAqICAtIHRoZSBpYl91dmVyYnNfZGV2aWNlIHN0cnVjdHVyZXMgYXJlIHByb3Blcmx5IHJlZmVyZW5jZSBjb3VudGVkIGFuZAogICogICAgZXZlcnl0aGluZyBlbHNlIGlzIHB1cmVseSBsb2NhbCB0byB0aGUgZmlsZSBiZWluZyBjcmVhdGVkLCBzbwogICogICAgcmFjZXMgYWdhaW5zdCBvdGhlciBvcGVuIGNhbGxzIGFyZSBub3QgYSBwcm9ibGVtOwogICogIC0gdGhlcmUgaXMgbm8gaW9jdGwgbWV0aG9kIHRvIHJhY2UgYWdhaW5zdDsKLSAqICAtIHRoZSBkZXZpY2UgaXMgYWRkZWQgdG8gZGV2X3RhYmxlW10gYXMgdGhlIGxhc3QgcGFydCBvZiBtb2R1bGUKLSAqICAgIGluaXRpYWxpemF0aW9uLCB0aGUgb3BlbiBtZXRob2Qgd2lsbCBlaXRoZXIgaW1tZWRpYXRlbHkgcnVuCi0gKiAgICAtRU5YSU8sIG9yIGFsbCByZXF1aXJlZCBpbml0aWFsaXphdGlvbiB3aWxsIGJlIGRvbmUuCisgKiAgLSB0aGUgb3BlbiBtZXRob2Qgd2lsbCBlaXRoZXIgaW1tZWRpYXRlbHkgcnVuIC1FTlhJTywgb3IgYWxsCisgKiAgICByZXF1aXJlZCBpbml0aWFsaXphdGlvbiB3aWxsIGJlIGRvbmUuCiAgKi8KIHN0YXRpYyBpbnQgaWJfdXZlcmJzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CkBAIC02MzIsMTMgKzU5NywxMCBAQAogCXN0cnVjdCBpYl91dmVyYnNfZmlsZSAqZmlsZTsKIAlpbnQgcmV0OwogCi0Jc3Bpbl9sb2NrKCZtYXBfbG9jayk7Ci0JZGV2ID0gZGV2X3RhYmxlW2ltaW5vcihpbm9kZSkgLSBJQl9VVkVSQlNfQkFTRV9NSU5PUl07CisJZGV2ID0gY29udGFpbmVyX29mKGlub2RlLT5pX2NkZXYsIHN0cnVjdCBpYl91dmVyYnNfZGV2aWNlLCBjZGV2KTsKIAlpZiAoZGV2KQogCQlrcmVmX2dldCgmZGV2LT5yZWYpOwotCXNwaW5fdW5sb2NrKCZtYXBfbG9jayk7Ci0KLQlpZiAoIWRldikKKwllbHNlCiAJCXJldHVybiAtRU5YSU87CiAKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGRldi0+aWJfZGV2LT5vd25lcikpIHsKQEAgLTY4NSwxNyArNjQ3LDE3IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHV2ZXJic19mb3BzID0gewotCS5vd25lciAJID0gVEhJU19NT0RVTEUsCi0JLndyaXRlIAkgPSBpYl91dmVyYnNfd3JpdGUsCi0JLm9wZW4gCSA9IGliX3V2ZXJic19vcGVuLAorCS5vd25lcgkgPSBUSElTX01PRFVMRSwKKwkud3JpdGUJID0gaWJfdXZlcmJzX3dyaXRlLAorCS5vcGVuCSA9IGliX3V2ZXJic19vcGVuLAogCS5yZWxlYXNlID0gaWJfdXZlcmJzX2Nsb3NlCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1dmVyYnNfbW1hcF9mb3BzID0gewotCS5vd25lciAJID0gVEhJU19NT0RVTEUsCi0JLndyaXRlIAkgPSBpYl91dmVyYnNfd3JpdGUsCisJLm93bmVyCSA9IFRISVNfTU9EVUxFLAorCS53cml0ZQkgPSBpYl91dmVyYnNfd3JpdGUsCiAJLm1tYXAgICAgPSBpYl91dmVyYnNfbW1hcCwKLQkub3BlbiAJID0gaWJfdXZlcmJzX29wZW4sCisJLm9wZW4JID0gaWJfdXZlcmJzX29wZW4sCiAJLnJlbGVhc2UgPSBpYl91dmVyYnNfY2xvc2UKIH07CiAKQEAgLTcyOSwxNCArNjkxLDQxIEBACiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoYWJpX3ZlcnNpb24sIFNfSVJVR08sIHNob3dfZGV2X2FiaV92ZXJzaW9uLCBOVUxMKTsKIAotc3RhdGljIHNzaXplX3Qgc2hvd19hYmlfdmVyc2lvbihzdHJ1Y3QgY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCitzdGF0aWMgQ0xBU1NfQVRUUl9TVFJJTkcoYWJpX3ZlcnNpb24sIFNfSVJVR08sCisJCQkgX19zdHJpbmdpZnkoSUJfVVNFUl9WRVJCU19BQklfVkVSU0lPTikpOworCitzdGF0aWMgZGV2X3Qgb3ZlcmZsb3dfbWFqOworc3RhdGljIERFQ0xBUkVfQklUTUFQKG92ZXJmbG93X21hcCwgSUJfVVZFUkJTX01BWF9ERVZJQ0VTKTsKKworLyoKKyAqIElmIHdlIGhhdmUgbW9yZSB0aGFuIElCX1VWRVJCU19NQVhfREVWSUNFUywgZHluYW1pY2FsbHkgb3ZlcmZsb3cgYnkKKyAqIHJlcXVlc3RpbmcgYSBuZXcgbWFqb3IgbnVtYmVyIGFuZCBkb3VibGluZyB0aGUgbnVtYmVyIG9mIG1heCBkZXZpY2VzIHdlCisgKiBzdXBwb3J0LiBJdCdzIHN0dXBpZCwgYnV0IHNpbXBsZS4KKyAqLworc3RhdGljIGludCBmaW5kX292ZXJmbG93X2Rldm51bSh2b2lkKQogewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBJQl9VU0VSX1ZFUkJTX0FCSV9WRVJTSU9OKTsKKwlpbnQgcmV0OworCisJaWYgKCFvdmVyZmxvd19tYWopIHsKKwkJcmV0ID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmb3ZlcmZsb3dfbWFqLCAwLCBJQl9VVkVSQlNfTUFYX0RFVklDRVMsCisJCQkJCSAgImluZmluaWJhbmRfdmVyYnMiKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJ1c2VyX3ZlcmJzOiBjb3VsZG4ndCByZWdpc3RlciBkeW5hbWljIGRldmljZSBudW1iZXJcbiIpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCXJldCA9IGZpbmRfZmlyc3RfemVyb19iaXQob3ZlcmZsb3dfbWFwLCBJQl9VVkVSQlNfTUFYX0RFVklDRVMpOworCWlmIChyZXQgPj0gSUJfVVZFUkJTX01BWF9ERVZJQ0VTKQorCQlyZXR1cm4gLTE7CisKKwlyZXR1cm4gcmV0OwogfQotc3RhdGljIENMQVNTX0FUVFIoYWJpX3ZlcnNpb24sIFNfSVJVR08sIHNob3dfYWJpX3ZlcnNpb24sIE5VTEwpOwogCiBzdGF0aWMgdm9pZCBpYl91dmVyYnNfYWRkX29uZShzdHJ1Y3QgaWJfZGV2aWNlICpkZXZpY2UpCiB7CisJaW50IGRldm51bTsKKwlkZXZfdCBiYXNlOwogCXN0cnVjdCBpYl91dmVyYnNfZGV2aWNlICp1dmVyYnNfZGV2OwogCiAJaWYgKCFkZXZpY2UtPmFsbG9jX3Vjb250ZXh0KQpAQCAtNzUwLDI4ICs3MzksMzYgQEAKIAlpbml0X2NvbXBsZXRpb24oJnV2ZXJic19kZXYtPmNvbXApOwogCiAJc3Bpbl9sb2NrKCZtYXBfbG9jayk7Ci0JdXZlcmJzX2Rldi0+ZGV2bnVtID0gZmluZF9maXJzdF96ZXJvX2JpdChkZXZfbWFwLCBJQl9VVkVSQlNfTUFYX0RFVklDRVMpOwotCWlmICh1dmVyYnNfZGV2LT5kZXZudW0gPj0gSUJfVVZFUkJTX01BWF9ERVZJQ0VTKSB7CisJZGV2bnVtID0gZmluZF9maXJzdF96ZXJvX2JpdChkZXZfbWFwLCBJQl9VVkVSQlNfTUFYX0RFVklDRVMpOworCWlmIChkZXZudW0gPj0gSUJfVVZFUkJTX01BWF9ERVZJQ0VTKSB7CiAJCXNwaW5fdW5sb2NrKCZtYXBfbG9jayk7Ci0JCWdvdG8gZXJyOworCQlkZXZudW0gPSBmaW5kX292ZXJmbG93X2Rldm51bSgpOworCQlpZiAoZGV2bnVtIDwgMCkKKwkJCWdvdG8gZXJyOworCisJCXNwaW5fbG9jaygmbWFwX2xvY2spOworCQl1dmVyYnNfZGV2LT5kZXZudW0gPSBkZXZudW0gKyBJQl9VVkVSQlNfTUFYX0RFVklDRVM7CisJCWJhc2UgPSBkZXZudW0gKyBvdmVyZmxvd19tYWo7CisJCXNldF9iaXQoZGV2bnVtLCBvdmVyZmxvd19tYXApOworCX0gZWxzZSB7CisJCXV2ZXJic19kZXYtPmRldm51bSA9IGRldm51bTsKKwkJYmFzZSA9IGRldm51bSArIElCX1VWRVJCU19CQVNFX0RFVjsKKwkJc2V0X2JpdChkZXZudW0sIGRldl9tYXApOwogCX0KLQlzZXRfYml0KHV2ZXJic19kZXYtPmRldm51bSwgZGV2X21hcCk7CiAJc3Bpbl91bmxvY2soJm1hcF9sb2NrKTsKIAogCXV2ZXJic19kZXYtPmliX2RldiAgICAgICAgICAgPSBkZXZpY2U7CiAJdXZlcmJzX2Rldi0+bnVtX2NvbXBfdmVjdG9ycyA9IGRldmljZS0+bnVtX2NvbXBfdmVjdG9yczsKIAotCXV2ZXJic19kZXYtPmNkZXYgPSBjZGV2X2FsbG9jKCk7Ci0JaWYgKCF1dmVyYnNfZGV2LT5jZGV2KQotCQlnb3RvIGVycjsKLQl1dmVyYnNfZGV2LT5jZGV2LT5vd25lciA9IFRISVNfTU9EVUxFOwotCXV2ZXJic19kZXYtPmNkZXYtPm9wcyA9IGRldmljZS0+bW1hcCA/ICZ1dmVyYnNfbW1hcF9mb3BzIDogJnV2ZXJic19mb3BzOwotCWtvYmplY3Rfc2V0X25hbWUoJnV2ZXJic19kZXYtPmNkZXYtPmtvYmosICJ1dmVyYnMlZCIsIHV2ZXJic19kZXYtPmRldm51bSk7Ci0JaWYgKGNkZXZfYWRkKHV2ZXJic19kZXYtPmNkZXYsIElCX1VWRVJCU19CQVNFX0RFViArIHV2ZXJic19kZXYtPmRldm51bSwgMSkpCisJY2Rldl9pbml0KCZ1dmVyYnNfZGV2LT5jZGV2LCBOVUxMKTsKKwl1dmVyYnNfZGV2LT5jZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7CisJdXZlcmJzX2Rldi0+Y2Rldi5vcHMgPSBkZXZpY2UtPm1tYXAgPyAmdXZlcmJzX21tYXBfZm9wcyA6ICZ1dmVyYnNfZm9wczsKKwlrb2JqZWN0X3NldF9uYW1lKCZ1dmVyYnNfZGV2LT5jZGV2LmtvYmosICJ1dmVyYnMlZCIsIHV2ZXJic19kZXYtPmRldm51bSk7CisJaWYgKGNkZXZfYWRkKCZ1dmVyYnNfZGV2LT5jZGV2LCBiYXNlLCAxKSkKIAkJZ290byBlcnJfY2RldjsKIAogCXV2ZXJic19kZXYtPmRldiA9IGRldmljZV9jcmVhdGUodXZlcmJzX2NsYXNzLCBkZXZpY2UtPmRtYV9kZXZpY2UsCi0JCQkJCXV2ZXJic19kZXYtPmNkZXYtPmRldiwgdXZlcmJzX2RldiwKKwkJCQkJdXZlcmJzX2Rldi0+Y2Rldi5kZXYsIHV2ZXJic19kZXYsCiAJCQkJCSJ1dmVyYnMlZCIsIHV2ZXJic19kZXYtPmRldm51bSk7CiAJaWYgKElTX0VSUih1dmVyYnNfZGV2LT5kZXYpKQogCQlnb3RvIGVycl9jZGV2OwpAQCAtNzgxLDIwICs3NzgsMTkgQEAKIAlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKHV2ZXJic19kZXYtPmRldiwgJmRldl9hdHRyX2FiaV92ZXJzaW9uKSkKIAkJZ290byBlcnJfY2xhc3M7CiAKLQlzcGluX2xvY2soJm1hcF9sb2NrKTsKLQlkZXZfdGFibGVbdXZlcmJzX2Rldi0+ZGV2bnVtXSA9IHV2ZXJic19kZXY7Ci0Jc3Bpbl91bmxvY2soJm1hcF9sb2NrKTsKLQogCWliX3NldF9jbGllbnRfZGF0YShkZXZpY2UsICZ1dmVyYnNfY2xpZW50LCB1dmVyYnNfZGV2KTsKIAogCXJldHVybjsKIAogZXJyX2NsYXNzOgotCWRldmljZV9kZXN0cm95KHV2ZXJic19jbGFzcywgdXZlcmJzX2Rldi0+Y2Rldi0+ZGV2KTsKKwlkZXZpY2VfZGVzdHJveSh1dmVyYnNfY2xhc3MsIHV2ZXJic19kZXYtPmNkZXYuZGV2KTsKIAogZXJyX2NkZXY6Ci0JY2Rldl9kZWwodXZlcmJzX2Rldi0+Y2Rldik7Ci0JY2xlYXJfYml0KHV2ZXJic19kZXYtPmRldm51bSwgZGV2X21hcCk7CisJY2Rldl9kZWwoJnV2ZXJic19kZXYtPmNkZXYpOworCWlmICh1dmVyYnNfZGV2LT5kZXZudW0gPCBJQl9VVkVSQlNfTUFYX0RFVklDRVMpCisJCWNsZWFyX2JpdChkZXZudW0sIGRldl9tYXApOworCWVsc2UKKwkJY2xlYXJfYml0KGRldm51bSwgb3ZlcmZsb3dfbWFwKTsKIAogZXJyOgogCWtyZWZfcHV0KCZ1dmVyYnNfZGV2LT5yZWYsIGliX3V2ZXJic19yZWxlYXNlX2Rldik7CkBAIC04MTEsMzUgKzgwNywxOSBAQAogCQlyZXR1cm47CiAKIAlkZXZfc2V0X2RydmRhdGEodXZlcmJzX2Rldi0+ZGV2LCBOVUxMKTsKLQlkZXZpY2VfZGVzdHJveSh1dmVyYnNfY2xhc3MsIHV2ZXJic19kZXYtPmNkZXYtPmRldik7Ci0JY2Rldl9kZWwodXZlcmJzX2Rldi0+Y2Rldik7CisJZGV2aWNlX2Rlc3Ryb3kodXZlcmJzX2NsYXNzLCB1dmVyYnNfZGV2LT5jZGV2LmRldik7CisJY2Rldl9kZWwoJnV2ZXJic19kZXYtPmNkZXYpOwogCi0Jc3Bpbl9sb2NrKCZtYXBfbG9jayk7Ci0JZGV2X3RhYmxlW3V2ZXJic19kZXYtPmRldm51bV0gPSBOVUxMOwotCXNwaW5fdW5sb2NrKCZtYXBfbG9jayk7Ci0KLQljbGVhcl9iaXQodXZlcmJzX2Rldi0+ZGV2bnVtLCBkZXZfbWFwKTsKKwlpZiAodXZlcmJzX2Rldi0+ZGV2bnVtIDwgSUJfVVZFUkJTX01BWF9ERVZJQ0VTKQorCQljbGVhcl9iaXQodXZlcmJzX2Rldi0+ZGV2bnVtLCBkZXZfbWFwKTsKKwllbHNlCisJCWNsZWFyX2JpdCh1dmVyYnNfZGV2LT5kZXZudW0gLSBJQl9VVkVSQlNfTUFYX0RFVklDRVMsIG92ZXJmbG93X21hcCk7CiAKIAlrcmVmX3B1dCgmdXZlcmJzX2Rldi0+cmVmLCBpYl91dmVyYnNfcmVsZWFzZV9kZXYpOwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJnV2ZXJic19kZXYtPmNvbXApOwogCWtmcmVlKHV2ZXJic19kZXYpOwogfQogCi1zdGF0aWMgaW50IHV2ZXJic19ldmVudF9nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsIGludCBmbGFncywKLQkJCSAgICAgICBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSwKLQkJCSAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKLXsKLQlyZXR1cm4gZ2V0X3NiX3BzZXVkbyhmc190eXBlLCAiaW5maW5pYmFuZGV2ZW50OiIsIE5VTEwsCi0JCQkgICAgIElORklOSUJBTkRFVkVOVEZTX01BR0lDLCBtbnQpOwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgdXZlcmJzX2V2ZW50X2ZzID0gewotCS8qIE5vIG93bmVyIGZpZWxkIHNvIG1vZHVsZSBjYW4gYmUgdW5sb2FkZWQgKi8KLQkubmFtZSAgICA9ICJpbmZpbmliYW5kZXZlbnRmcyIsCi0JLmdldF9zYiAgPSB1dmVyYnNfZXZlbnRfZ2V0X3NiLAotCS5raWxsX3NiID0ga2lsbF9saXR0ZXJfc3VwZXIKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IGliX3V2ZXJic19pbml0KHZvaWQpCiB7CiAJaW50IHJldDsKQEAgLTg1OCwzOSArODM4LDIwIEBACiAJCWdvdG8gb3V0X2NocmRldjsKIAl9CiAKLQlyZXQgPSBjbGFzc19jcmVhdGVfZmlsZSh1dmVyYnNfY2xhc3MsICZjbGFzc19hdHRyX2FiaV92ZXJzaW9uKTsKKwlyZXQgPSBjbGFzc19jcmVhdGVfZmlsZSh1dmVyYnNfY2xhc3MsICZjbGFzc19hdHRyX2FiaV92ZXJzaW9uLmF0dHIpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ1c2VyX3ZlcmJzOiBjb3VsZG4ndCBjcmVhdGUgYWJpX3ZlcnNpb24gYXR0cmlidXRlXG4iKTsKIAkJZ290byBvdXRfY2xhc3M7CiAJfQogCi0JcmV0ID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmdXZlcmJzX2V2ZW50X2ZzKTsKLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAidXNlcl92ZXJiczogY291bGRuJ3QgcmVnaXN0ZXIgaW5maW5pYmFuZGV2ZW50ZnNcbiIpOwotCQlnb3RvIG91dF9jbGFzczsKLQl9Ci0KLQl1dmVyYnNfZXZlbnRfbW50ID0ga2Vybl9tb3VudCgmdXZlcmJzX2V2ZW50X2ZzKTsKLQlpZiAoSVNfRVJSKHV2ZXJic19ldmVudF9tbnQpKSB7Ci0JCXJldCA9IFBUUl9FUlIodXZlcmJzX2V2ZW50X21udCk7Ci0JCXByaW50ayhLRVJOX0VSUiAidXNlcl92ZXJiczogY291bGRuJ3QgbW91bnQgaW5maW5pYmFuZGV2ZW50ZnNcbiIpOwotCQlnb3RvIG91dF9mczsKLQl9Ci0KIAlyZXQgPSBpYl9yZWdpc3Rlcl9jbGllbnQoJnV2ZXJic19jbGllbnQpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ1c2VyX3ZlcmJzOiBjb3VsZG4ndCByZWdpc3RlciBjbGllbnRcbiIpOwotCQlnb3RvIG91dF9tbnQ7CisJCWdvdG8gb3V0X2NsYXNzOwogCX0KIAogCXJldHVybiAwOwogCi1vdXRfbW50OgotCW1udHB1dCh1dmVyYnNfZXZlbnRfbW50KTsKLQotb3V0X2ZzOgotCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmdXZlcmJzX2V2ZW50X2ZzKTsKLQogb3V0X2NsYXNzOgogCWNsYXNzX2Rlc3Ryb3kodXZlcmJzX2NsYXNzKTsKIApAQCAtOTA0LDEwICs4NjUsMTAgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpYl91dmVyYnNfY2xlYW51cCh2b2lkKQogewogCWliX3VucmVnaXN0ZXJfY2xpZW50KCZ1dmVyYnNfY2xpZW50KTsKLQltbnRwdXQodXZlcmJzX2V2ZW50X21udCk7Ci0JdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZ1dmVyYnNfZXZlbnRfZnMpOwogCWNsYXNzX2Rlc3Ryb3kodXZlcmJzX2NsYXNzKTsKIAl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oSUJfVVZFUkJTX0JBU0VfREVWLCBJQl9VVkVSQlNfTUFYX0RFVklDRVMpOworCWlmIChvdmVyZmxvd19tYWopCisJCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihvdmVyZmxvd19tYWosIElCX1VWRVJCU19NQVhfREVWSUNFUyk7CiAJaWRyX2Rlc3Ryb3koJmliX3V2ZXJic19wZF9pZHIpOwogCWlkcl9kZXN0cm95KCZpYl91dmVyYnNfbXJfaWRyKTsKIAlpZHJfZGVzdHJveSgmaWJfdXZlcmJzX213X2lkcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb19oYWwuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jCmluZGV4IDA2NzdmYzcuLmEyOGU4NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5jCkBAIC0xMDksNyArMTA5LDYgQEAKIAkJd2hpbGUgKCFDUV9WTERfRU5UUlkocnB0ciwgY3EtPnNpemVfbG9nMiwgY3FlKSkgewogCQkJdWRlbGF5KDEpOwogCQkJaWYgKGkrKyA+IDEwMDAwMDApIHsKLQkJCQlCVUdfT04oMSk7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogc3RhbGxlZCBybmljXG4iLAogCQkJCSAgICAgICByZGV2X3AtPmRldl9uYW1lKTsKIAkJCQlyZXR1cm4gLUVJTzsKQEAgLTE1NSw3ICsxNTQsNyBAQAogCXJldHVybiBpd2NoX2N4Z2IzX29mbGRfc2VuZChyZGV2X3AtPnQzY2Rldl9wLCBza2IpOwogfQogCi1pbnQgY3hpb19jcmVhdGVfY3Eoc3RydWN0IGN4aW9fcmRldiAqcmRldl9wLCBzdHJ1Y3QgdDNfY3EgKmNxKQoraW50IGN4aW9fY3JlYXRlX2NxKHN0cnVjdCBjeGlvX3JkZXYgKnJkZXZfcCwgc3RydWN0IHQzX2NxICpjcSwgaW50IGtlcm5lbCkKIHsKIAlzdHJ1Y3QgcmRtYV9jcV9zZXR1cCBzZXR1cDsKIAlpbnQgc2l6ZSA9ICgxVUwgPDwgKGNxLT5zaXplX2xvZzIpKSAqIHNpemVvZihzdHJ1Y3QgdDNfY3FlKTsKQEAgLTE2MywxMiArMTYyLDEyIEBACiAJY3EtPmNxaWQgPSBjeGlvX2hhbF9nZXRfY3FpZChyZGV2X3AtPnJzY3ApOwogCWlmICghY3EtPmNxaWQpCiAJCXJldHVybiAtRU5PTUVNOwotCWNxLT5zd19xdWV1ZSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjcS0+c3dfcXVldWUpCi0JCXJldHVybiAtRU5PTUVNOwotCWNxLT5xdWV1ZSA9IGRtYV9hbGxvY19jb2hlcmVudCgmKHJkZXZfcC0+cm5pY19pbmZvLnBkZXYtPmRldiksCi0JCQkJCSAgICAgKDFVTCA8PCAoY3EtPnNpemVfbG9nMikpICoKLQkJCQkJICAgICBzaXplb2Yoc3RydWN0IHQzX2NxZSksCisJaWYgKGtlcm5lbCkgeworCQljcS0+c3dfcXVldWUgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCQlpZiAoIWNxLT5zd19xdWV1ZSkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKwljcS0+cXVldWUgPSBkbWFfYWxsb2NfY29oZXJlbnQoJihyZGV2X3AtPnJuaWNfaW5mby5wZGV2LT5kZXYpLCBzaXplLAogCQkJCQkgICAgICYoY3EtPmRtYV9hZGRyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjcS0+cXVldWUpIHsKIAkJa2ZyZWUoY3EtPnN3X3F1ZXVlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX2hhbC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmgKaW5kZXggZjNkNDQwYy4uMDczMzczYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9faGFsLmgKQEAgLTUzLDcgKzUzLDcgQEAKICNkZWZpbmUgVDNfTUFYX1BCTF9TSVpFIDI1NgogI2RlZmluZSBUM19NQVhfUlFfU0laRSAxMDI0CiAjZGVmaW5lIFQzX01BWF9RUF9ERVBUSCAoVDNfTUFYX1JRX1NJWkUtMSkKLSNkZWZpbmUgVDNfTUFYX0NRX0RFUFRIIDgxOTIKKyNkZWZpbmUgVDNfTUFYX0NRX0RFUFRIIDI2MjE0NAogI2RlZmluZSBUM19NQVhfTlVNX1NUQUcgKDE8PDE1KQogI2RlZmluZSBUM19NQVhfTVJfU0laRSAweDEwMDAwMDAwMFVMTAogI2RlZmluZSBUM19QQUdFU0laRV9NQVNLIDB4ZmZmZjAwMCAgLyogNEtCLTEyOE1CICovCkBAIC0xNTcsNyArMTU3LDcgQEAKIHZvaWQgY3hpb19yZGV2X2Nsb3NlKHN0cnVjdCBjeGlvX3JkZXYgKnJkZXYpOwogaW50IGN4aW9faGFsX2NxX29wKHN0cnVjdCBjeGlvX3JkZXYgKnJkZXYsIHN0cnVjdCB0M19jcSAqY3EsCiAJCSAgIGVudW0gdDNfY3Ffb3Bjb2RlIG9wLCB1MzIgY3JlZGl0KTsKLWludCBjeGlvX2NyZWF0ZV9jcShzdHJ1Y3QgY3hpb19yZGV2ICpyZGV2LCBzdHJ1Y3QgdDNfY3EgKmNxKTsKK2ludCBjeGlvX2NyZWF0ZV9jcShzdHJ1Y3QgY3hpb19yZGV2ICpyZGV2LCBzdHJ1Y3QgdDNfY3EgKmNxLCBpbnQga2VybmVsKTsKIGludCBjeGlvX2Rlc3Ryb3lfY3Eoc3RydWN0IGN4aW9fcmRldiAqcmRldiwgc3RydWN0IHQzX2NxICpjcSk7CiBpbnQgY3hpb19yZXNpemVfY3Eoc3RydWN0IGN4aW9fcmRldiAqcmRldiwgc3RydWN0IHQzX2NxICpjcSk7CiB2b2lkIGN4aW9fcmVsZWFzZV91Y29udGV4dChzdHJ1Y3QgY3hpb19yZGV2ICpyZGV2LCBzdHJ1Y3QgY3hpb191Y29udGV4dCAqdWN0eCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb193ci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2N4aW9fd3IuaAppbmRleCBhMTk3YTViLi4xNTA3M2IyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvY3hpb193ci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9jeGlvX3dyLmgKQEAgLTczMCw3ICs3MzAsMjIgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGN4aW9fc2V0X3dxX2luX2Vycm9yKHN0cnVjdCB0M193cSAqd3EpCiB7Ci0Jd3EtPnF1ZXVlLT53cV9pbl9lcnIuZXJyID0gMTsKKwl3cS0+cXVldWUtPndxX2luX2Vyci5lcnIgfD0gMTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGN4aW9fZGlzYWJsZV93cV9kYihzdHJ1Y3QgdDNfd3EgKndxKQoreworCXdxLT5xdWV1ZS0+d3FfaW5fZXJyLmVyciB8PSAyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3hpb19lbmFibGVfd3FfZGIoc3RydWN0IHQzX3dxICp3cSkKK3sKKwl3cS0+cXVldWUtPndxX2luX2Vyci5lcnIgJj0gfjI7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGN4aW9fd3FfZGJfZW5hYmxlZChzdHJ1Y3QgdDNfd3EgKndxKQoreworCXJldHVybiAhKHdxLT5xdWV1ZS0+d3FfaW5fZXJyLmVyciAmIDIpOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0M19jcWUgKmN4aW9fbmV4dF9od19jcWUoc3RydWN0IHQzX2NxICpjcSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5jCmluZGV4IGIwZWEwMTAuLmVlMWQ4YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2guYwpAQCAtNjUsNiArNjUsNDYgQEAKIHN0YXRpYyBMSVNUX0hFQUQoZGV2X2xpc3QpOwogc3RhdGljIERFRklORV9NVVRFWChkZXZfbXV0ZXgpOwogCitzdGF0aWMgaW50IGRpc2FibGVfcXBfZGIoaW50IGlkLCB2b2lkICpwLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpd2NoX3FwICpxaHAgPSBwOworCisJY3hpb19kaXNhYmxlX3dxX2RiKCZxaHAtPndxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbmFibGVfcXBfZGIoaW50IGlkLCB2b2lkICpwLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpd2NoX3FwICpxaHAgPSBwOworCisJaWYgKGRhdGEpCisJCXJpbmdfZG9vcmJlbGwocWhwLT5yaHAtPnJkZXYuY3RybF9xcC5kb29yYmVsbCwgcWhwLT53cS5xcGlkKTsKKwljeGlvX2VuYWJsZV93cV9kYigmcWhwLT53cSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfZGJzKHN0cnVjdCBpd2NoX2RldiAqcm5pY3ApCit7CisJc3Bpbl9sb2NrX2lycSgmcm5pY3AtPmxvY2spOworCWlkcl9mb3JfZWFjaCgmcm5pY3AtPnFwaWRyLCBkaXNhYmxlX3FwX2RiLCBOVUxMKTsKKwlzcGluX3VubG9ja19pcnEoJnJuaWNwLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgZW5hYmxlX2RicyhzdHJ1Y3QgaXdjaF9kZXYgKnJuaWNwLCBpbnQgcmluZ19kYikKK3sKKwlzcGluX2xvY2tfaXJxKCZybmljcC0+bG9jayk7CisJaWRyX2Zvcl9lYWNoKCZybmljcC0+cXBpZHIsIGVuYWJsZV9xcF9kYiwKKwkJICAgICAodm9pZCAqKSh1bnNpZ25lZCBsb25nKXJpbmdfZGIpOworCXNwaW5fdW5sb2NrX2lycSgmcm5pY3AtPmxvY2spOworfQorCitzdGF0aWMgdm9pZCBpd2NoX2RiX2Ryb3BfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGl3Y2hfZGV2ICpybmljcCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaXdjaF9kZXYsCisJCQkJCSAgICAgIGRiX2Ryb3BfdGFzay53b3JrKTsKKwllbmFibGVfZGJzKHJuaWNwLCAxKTsKK30KKwogc3RhdGljIHZvaWQgcm5pY19pbml0KHN0cnVjdCBpd2NoX2RldiAqcm5pY3ApCiB7CiAJUERCRygiJXMgaXdjaF9kZXYgJXBcbiIsIF9fZnVuY19fLCAgcm5pY3ApOwpAQCAtNzIsNiArMTEyLDcgQEAKIAlpZHJfaW5pdCgmcm5pY3AtPnFwaWRyKTsKIAlpZHJfaW5pdCgmcm5pY3AtPm1taWRyKTsKIAlzcGluX2xvY2tfaW5pdCgmcm5pY3AtPmxvY2spOworCUlOSVRfREVMQVlFRF9XT1JLKCZybmljcC0+ZGJfZHJvcF90YXNrLCBpd2NoX2RiX2Ryb3BfdGFzayk7CiAKIAlybmljcC0+YXR0ci5tYXhfcXBzID0gVDNfTUFYX05VTV9RUCAtIDMyOwogCXJuaWNwLT5hdHRyLm1heF93cnMgPSBUM19NQVhfUVBfREVQVEg7CkBAIC0xNDcsNiArMTg4LDggQEAKIAltdXRleF9sb2NrKCZkZXZfbXV0ZXgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkZXYsIHRtcCwgJmRldl9saXN0LCBlbnRyeSkgewogCQlpZiAoZGV2LT5yZGV2LnQzY2Rldl9wID09IHRkZXYpIHsKKwkJCWRldi0+cmRldi5mbGFncyA9IENYSU9fRVJST1JfRkFUQUw7CisJCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRldi0+ZGJfZHJvcF90YXNrKTsKIAkJCWxpc3RfZGVsKCZkZXYtPmVudHJ5KTsKIAkJCWl3Y2hfdW5yZWdpc3Rlcl9kZXZpY2UoZGV2KTsKIAkJCWN4aW9fcmRldl9jbG9zZSgmZGV2LT5yZGV2KTsKQEAgLTE2NSw3ICsyMDgsOCBAQAogCXN0cnVjdCBjeGlvX3JkZXYgKnJkZXYgPSB0ZGV2LT51bHA7CiAJc3RydWN0IGl3Y2hfZGV2ICpybmljcDsKIAlzdHJ1Y3QgaWJfZXZlbnQgZXZlbnQ7Ci0JdTMyICAgIHBvcnRudW0gPSBwb3J0X2lkICsgMTsKKwl1MzIgcG9ydG51bSA9IHBvcnRfaWQgKyAxOworCWludCBkaXNwYXRjaCA9IDA7CiAKIAlpZiAoIXJkZXYpCiAJCXJldHVybjsKQEAgLTE3NCwyMSArMjE4LDQ5IEBACiAJY2FzZSBPRkZMT0FEX1NUQVRVU19ET1dOOiB7CiAJCXJkZXYtPmZsYWdzID0gQ1hJT19FUlJPUl9GQVRBTDsKIAkJZXZlbnQuZXZlbnQgID0gSUJfRVZFTlRfREVWSUNFX0ZBVEFMOworCQlkaXNwYXRjaCA9IDE7CiAJCWJyZWFrOwogCQl9CiAJY2FzZSBPRkZMT0FEX1BPUlRfRE9XTjogewogCQlldmVudC5ldmVudCAgPSBJQl9FVkVOVF9QT1JUX0VSUjsKKwkJZGlzcGF0Y2ggPSAxOwogCQlicmVhazsKIAkJfQogCWNhc2UgT0ZGTE9BRF9QT1JUX1VQOiB7CiAJCWV2ZW50LmV2ZW50ICA9IElCX0VWRU5UX1BPUlRfQUNUSVZFOworCQlkaXNwYXRjaCA9IDE7CisJCWJyZWFrOworCQl9CisJY2FzZSBPRkZMT0FEX0RCX0ZVTEw6IHsKKwkJZGlzYWJsZV9kYnMocm5pY3ApOworCQlicmVhazsKKwkJfQorCWNhc2UgT0ZGTE9BRF9EQl9FTVBUWTogeworCQllbmFibGVfZGJzKHJuaWNwLCAxKTsKKwkJYnJlYWs7CisJCX0KKwljYXNlIE9GRkxPQURfREJfRFJPUDogeworCQl1bnNpZ25lZCBsb25nIGRlbGF5ID0gMTAwMDsKKwkJdW5zaWduZWQgc2hvcnQgcjsKKworCQlkaXNhYmxlX2RicyhybmljcCk7CisJCWdldF9yYW5kb21fYnl0ZXMoJnIsIDIpOworCQlkZWxheSArPSByICYgMTAyMzsKKworCQkvKgorCQkgKiBkZWxheSBpcyBiZXR3ZWVuIDEwMDAtMjAyMyB1c2Vjcy4KKwkJICovCisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcm5pY3AtPmRiX2Ryb3BfdGFzaywKKwkJCXVzZWNzX3RvX2ppZmZpZXMoZGVsYXkpKTsKIAkJYnJlYWs7CiAJCX0KIAl9CiAKLQlldmVudC5kZXZpY2UgPSAmcm5pY3AtPmliZGV2OwotCWV2ZW50LmVsZW1lbnQucG9ydF9udW0gPSBwb3J0bnVtOwotCWliX2Rpc3BhdGNoX2V2ZW50KCZldmVudCk7CisJaWYgKGRpc3BhdGNoKSB7CisJCWV2ZW50LmRldmljZSA9ICZybmljcC0+aWJkZXY7CisJCWV2ZW50LmVsZW1lbnQucG9ydF9udW0gPSBwb3J0bnVtOworCQlpYl9kaXNwYXRjaF9ldmVudCgmZXZlbnQpOworCX0KIAogCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoLmggYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaC5oCmluZGV4IDg0NzM1NTAuLmExYzQ0NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2guaApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2lkci5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSA8cmRtYS9pYl92ZXJicy5oPgogCkBAIC0xMTAsNiArMTExLDcgQEAKIAlzdHJ1Y3QgaWRyIG1taWRyOwogCXNwaW5sb2NrX3QgbG9jazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OworCXN0cnVjdCBkZWxheWVkX3dvcmsgZGJfZHJvcF90YXNrOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgaXdjaF9kZXYgKnRvX2l3Y2hfZGV2KHN0cnVjdCBpYl9kZXZpY2UgKmliZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX2NtLmMKaW5kZXggNjZiNDEzNS4uZDk0Mzg4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9jbS5jCkBAIC0xMzcxLDE1ICsxMzcxLDggQEAKIAl0aW0ubWFjX2FkZHIgPSByZXEtPmRzdF9tYWM7CiAJdGltLnZsYW5fdGFnID0gbnRvaHMocmVxLT52bGFuX3RhZyk7CiAJaWYgKHRkZXYtPmN0bCh0ZGV2LCBHRVRfSUZGX0ZST01fTUFDLCAmdGltKSA8IDAgfHwgIXRpbS5kZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiJXMgYmFkIGRzdCBtYWMgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCi0JCQlfX2Z1bmNfXywKLQkJCXJlcS0+ZHN0X21hY1swXSwKLQkJCXJlcS0+ZHN0X21hY1sxXSwKLQkJCXJlcS0+ZHN0X21hY1syXSwKLQkJCXJlcS0+ZHN0X21hY1szXSwKLQkJCXJlcS0+ZHN0X21hY1s0XSwKLQkJCXJlcS0+ZHN0X21hY1s1XSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXMgYmFkIGRzdCBtYWMgJXBNXG4iLAorCQkJX19mdW5jX18sIHJlcS0+ZHN0X21hYyk7CiAJCWdvdG8gcmVqZWN0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3Byb3ZpZGVyLmMKaW5kZXggZWQ3MTc1NS4uNDdiMzVjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcHJvdmlkZXIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9wcm92aWRlci5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAllbnRyaWVzID0gcm91bmR1cF9wb3dfb2ZfdHdvKGVudHJpZXMpOwogCWNocC0+Y3Euc2l6ZV9sb2cyID0gaWxvZzIoZW50cmllcyk7CiAKLQlpZiAoY3hpb19jcmVhdGVfY3EoJnJocC0+cmRldiwgJmNocC0+Y3EpKSB7CisJaWYgKGN4aW9fY3JlYXRlX2NxKCZyaHAtPnJkZXYsICZjaHAtPmNxLCAhdWNvbnRleHQpKSB7CiAJCWtmcmVlKGNocCk7CiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvY3hnYjMvaXdjaF9xcC5jCmluZGV4IDNlYjhjZWMuLmI0ZDg5M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9jeGdiMy9pd2NoX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2N4Z2IzL2l3Y2hfcXAuYwpAQCAtNDUyLDcgKzQ1Miw4IEBACiAJCSsrKHFocC0+d3Euc3Ffd3B0cik7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFocC0+bG9jaywgZmxhZyk7Ci0JcmluZ19kb29yYmVsbChxaHAtPndxLmRvb3JiZWxsLCBxaHAtPndxLnFwaWQpOworCWlmIChjeGlvX3dxX2RiX2VuYWJsZWQoJnFocC0+d3EpKQorCQlyaW5nX2Rvb3JiZWxsKHFocC0+d3EuZG9vcmJlbGwsIHFocC0+d3EucXBpZCk7CiAKIG91dDoKIAlpZiAoZXJyKQpAQCAtNTE0LDcgKzUxNSw4IEBACiAJCW51bV93cnMtLTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcWhwLT5sb2NrLCBmbGFnKTsKLQlyaW5nX2Rvb3JiZWxsKHFocC0+d3EuZG9vcmJlbGwsIHFocC0+d3EucXBpZCk7CisJaWYgKGN4aW9fd3FfZGJfZW5hYmxlZCgmcWhwLT53cSkpCisJCXJpbmdfZG9vcmJlbGwocWhwLT53cS5kb29yYmVsbCwgcWhwLT53cS5xcGlkKTsKIAogb3V0OgogCWlmIChlcnIpCkBAIC01OTcsNyArNTk5LDggQEAKIAkrKyhxaHAtPndxLnNxX3dwdHIpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFocC0+bG9jaywgZmxhZyk7CiAKLQlyaW5nX2Rvb3JiZWxsKHFocC0+d3EuZG9vcmJlbGwsIHFocC0+d3EucXBpZCk7CisJaWYgKGN4aW9fd3FfZGJfZW5hYmxlZCgmcWhwLT53cSkpCisJCXJpbmdfZG9vcmJlbGwocWhwLT53cS5kb29yYmVsbCwgcWhwLT53cS5xcGlkKTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2lycS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9pcnEuYwppbmRleCA0MmJlMGIxLi5iMmI2ZmVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX2lycS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfaXJxLmMKQEAgLTU0OCwxMSArNTQ4LDEwIEBACiAJc3RydWN0IGVoY2FfZXEgKmVxID0gJnNoY2EtPmVxOwogCXN0cnVjdCBlaGNhX2VxZV9jYWNoZV9lbnRyeSAqZXFlX2NhY2hlID0gZXEtPmVxZV9jYWNoZTsKIAl1NjQgZXFlX3ZhbHVlLCByZXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXFlX2NudCwgaTsKIAlpbnQgZXFfZW1wdHkgPSAwOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmVxLT5pcnFfc3BpbmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2soJmVxLT5pcnFfc3BpbmxvY2spOwogCWlmIChpc19pcnEpIHsKIAkJY29uc3QgaW50IG1heF9xdWVyeV9jbnQgPSAxMDA7CiAJCWludCBxdWVyeV9jbnQgPSAwOwpAQCAtNjQzLDcgKzY0Miw3IEBACiAJfSB3aGlsZSAoMSk7CiAKIHVubG9ja19pcnFfc3BpbmxvY2s6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXEtPmlycV9zcGlubG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrKCZlcS0+aXJxX3NwaW5sb2NrKTsKIH0KIAogdm9pZCBlaGNhX3Rhc2tsZXRfZXEodW5zaWduZWQgbG9uZyBkYXRhKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9xZXMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcWVzLmgKaW5kZXggNWQyOGUzZS4uOTBjNGVmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9xZXMuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3Flcy5oCkBAIC00Niw3ICs0Niw3IEBACiAKICNpbmNsdWRlICJlaGNhX3Rvb2xzLmgiCiAKLS8qIHZpcnR1YWwgc2NhdHRlciBnYXRoZXIgZW50cnkgdG8gc3BlY2lmeSByZW1vdGUgYWRyZXNzZXMgd2l0aCBsZW5ndGggKi8KKy8qIHZpcnR1YWwgc2NhdHRlciBnYXRoZXIgZW50cnkgdG8gc3BlY2lmeSByZW1vdGUgYWRkcmVzc2VzIHdpdGggbGVuZ3RoICovCiBzdHJ1Y3QgZWhjYV92c2dlbnRyeSB7CiAJdTY0IHZhZGRyOwogCXUzMiBsa2V5OwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJdTMyIGltbWVkaWF0ZV9kYXRhOwogCXVuaW9uIHsKIAkJc3RydWN0IHsKLQkJCXU2NCByZW1vdGVfdmlydHVhbF9hZHJlc3M7CisJCQl1NjQgcmVtb3RlX3ZpcnR1YWxfYWRkcmVzczsKIAkJCXUzMiBya2V5OwogCQkJdTMyIHJlc2VydmVkOwogCQkJdTY0IGF0b21pY18xc3Rfb3BfZG1hX2xlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcXAuYwppbmRleCAwMzM4ZjFmLi5iMTA1ZjY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3FwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9xcC5jCkBAIC01NSw5ICs1NSw3IEBACiAvKgogICogYXR0cmlidXRlcyBub3Qgc3VwcG9ydGVkIGJ5IHF1ZXJ5IHFwCiAgKi8KLSNkZWZpbmUgUVBfQVRUUl9RVUVSWV9OT1RfU1VQUE9SVEVEIChJQl9RUF9NQVhfREVTVF9SRF9BVE9NSUMgfCBcCi0JCQkJICAgICBJQl9RUF9NQVhfUVBfUkRfQVRPTUlDICAgfCBcCi0JCQkJICAgICBJQl9RUF9BQ0NFU1NfRkxBR1MgICAgICAgfCBcCisjZGVmaW5lIFFQX0FUVFJfUVVFUllfTk9UX1NVUFBPUlRFRCAoSUJfUVBfQUNDRVNTX0ZMQUdTICAgICAgIHwgXAogCQkJCSAgICAgSUJfUVBfRU5fU1FEX0FTWU5DX05PVElGWSkKIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2FfcmVxcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9yZXFzLmMKaW5kZXggZTNlYzdmZC4uOWEzZmJmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9yZXFzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9yZXFzLmMKQEAgLTI2OSw3ICsyNjksNyBAQAogCQkvKiBubyBicmVhayBpcyBpbnRlbnRpb25hbCBoZXJlICovCiAJY2FzZSBJQl9RUFRfUkM6CiAJCS8qIFRPRE86IGF0b21pYyBub3QgaW1wbGVtZW50ZWQgKi8KLQkJd3FlX3AtPnUubnVkLnJlbW90ZV92aXJ0dWFsX2FkcmVzcyA9CisJCXdxZV9wLT51Lm51ZC5yZW1vdGVfdmlydHVhbF9hZGRyZXNzID0KIAkJCXNlbmRfd3ItPndyLnJkbWEucmVtb3RlX2FkZHI7CiAJCXdxZV9wLT51Lm51ZC5ya2V5ID0gc2VuZF93ci0+d3IucmRtYS5ya2V5OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3NxcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2VoY2EvZWhjYV9zcXAuYwppbmRleCA4YzEyMTNmLi5kYmE4ZjlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvZWhjYS9laGNhX3NxcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9laGNhL2VoY2Ffc3FwLmMKQEAgLTIyMiw3ICsyMjIsNyBAQAogewogCWludCByZXQ7CiAKLQlpZiAoIXBvcnRfbnVtIHx8IHBvcnRfbnVtID4gaWJkZXYtPnBoeXNfcG9ydF9jbnQpCisJaWYgKCFwb3J0X251bSB8fCBwb3J0X251bSA+IGliZGV2LT5waHlzX3BvcnRfY250IHx8ICFpbl93YykKIAkJcmV0dXJuIElCX01BRF9SRVNVTFRfRkFJTFVSRTsKIAogCS8qIGFjY2VwdCBvbmx5IHBtYSByZXF1ZXN0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYwppbmRleCA4Mjg3OGUzLi5lYjdkNTlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMKQEAgLTU5LDggKzU5LDcgQEAKIAlzaXplX3QgZ290OwogCWludCByZXQ7CiAKLQlsb2NrX2xpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1ciA+PgotCQlQQUdFX1NISUZUOworCWxvY2tfbGltaXQgPSBybGltaXQoUkxJTUlUX01FTUxPQ0spID4+IFBBR0VfU0hJRlQ7CiAKIAlpZiAobnVtX3BhZ2VzID4gbG9ja19saW1pdCkgewogCQlyZXQgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tbHg0L3FwLmMKaW5kZXggMmE5N2M5Ni4uYWU3NTM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21seDQvcXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWx4NC9xcC5jCkBAIC0xMjE0LDcgKzEyMTQsNyBAQAogc3RhdGljIGludCBidWlsZF9tbHhfaGVhZGVyKHN0cnVjdCBtbHg0X2liX3NxcCAqc3FwLCBzdHJ1Y3QgaWJfc2VuZF93ciAqd3IsCiAJCQkgICAgdm9pZCAqd3FlLCB1bnNpZ25lZCAqbWx4X3NlZ19sZW4pCiB7Ci0Jc3RydWN0IGliX2RldmljZSAqaWJfZGV2ID0gJnRvX21kZXYoc3FwLT5xcC5pYnFwLmRldmljZSktPmliX2RldjsKKwlzdHJ1Y3QgaWJfZGV2aWNlICppYl9kZXYgPSBzcXAtPnFwLmlicXAuZGV2aWNlOwogCXN0cnVjdCBtbHg0X3dxZV9tbHhfc2VnICptbHggPSB3cWU7CiAJc3RydWN0IG1seDRfd3FlX2lubGluZV9zZWcgKmlubCA9IHdxZSArIHNpemVvZiAqbWx4OwogCXN0cnVjdCBtbHg0X2liX2FoICphaCA9IHRvX21haCh3ci0+d3IudWQuYWgpOwpAQCAtMTIyOCw3ICsxMjI4LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgd3ItPm51bV9zZ2U7ICsraSkKIAkJc2VuZF9zaXplICs9IHdyLT5zZ19saXN0W2ldLmxlbmd0aDsKIAotCWliX3VkX2hlYWRlcl9pbml0KHNlbmRfc2l6ZSwgbWx4NF9pYl9haF9ncmhfcHJlc2VudChhaCksICZzcXAtPnVkX2hlYWRlcik7CisJaWJfdWRfaGVhZGVyX2luaXQoc2VuZF9zaXplLCBtbHg0X2liX2FoX2dyaF9wcmVzZW50KGFoKSwgMCwgJnNxcC0+dWRfaGVhZGVyKTsKIAogCXNxcC0+dWRfaGVhZGVyLmxyaC5zZXJ2aWNlX2xldmVsICAgPQogCQliZTMyX3RvX2NwdShhaC0+YXYuc2xfdGNsYXNzX2Zsb3dsYWJlbCkgPj4gMjg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbXRoY2EvbXRoY2FfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCmluZGV4IGMxMDU3NmYuLmQyZDE3MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tdGhjYS9tdGhjYV9xcC5jCkBAIC0xNDk0LDcgKzE0OTQsNyBAQAogCXUxNiBwa2V5OwogCiAJaWJfdWRfaGVhZGVyX2luaXQoMjU2LCAvKiBhc3N1bWUgYSBNQUQgKi8KLQkJCSAgbXRoY2FfYWhfZ3JoX3ByZXNlbnQodG9fbWFoKHdyLT53ci51ZC5haCkpLAorCQkJICBtdGhjYV9haF9ncmhfcHJlc2VudCh0b19tYWgod3ItPndyLnVkLmFoKSksIDAsCiAJCQkgICZzcXAtPnVkX2hlYWRlcik7CiAKIAllcnIgPSBtdGhjYV9yZWFkX2FoKGRldiwgdG9fbWFoKHdyLT53ci51ZC5haCksICZzcXAtPnVkX2hlYWRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuYwppbmRleCBiOWQwOWJhLi40MjcyYzUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmMKQEAgLTExMCw2ICsxMTAsNyBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmVzX3BjaV90YWJsZVtdID0gewogCXtQQ0lfVkVORE9SX0lEX05FVEVGRkVDVCwgUENJX0RFVklDRV9JRF9ORVRFRkZFQ1RfTkUwMjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAorCXtQQ0lfVkVORE9SX0lEX05FVEVGRkVDVCwgUENJX0RFVklDRV9JRF9ORVRFRkZFQ1RfTkUwMjBfS1IsIFBDSV9BTllfSUQsIFBDSV9BTllfSUR9LAogCXswfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzLmgKaW5kZXggOTg4NDA1Ni4uY2M3OGZlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXMuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lcy5oCkBAIC02NCw4ICs2NCw5IEBACiAgKiBOZXRFZmZlY3QgUENJIHZlbmRvciBpZCBhbmQgTkUwMTAgUENJIGRldmljZSBpZC4KICAqLwogI2lmbmRlZiBQQ0lfVkVORE9SX0lEX05FVEVGRkVDVAkvKiBub3QgaW4gcGNpLmlkcyB5ZXQgKi8KLSNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ORVRFRkZFQ1QgICAgICAgMHgxNjc4Ci0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVURUZGRUNUX05FMDIwIDB4MDEwMAorI2RlZmluZSBQQ0lfVkVORE9SX0lEX05FVEVGRkVDVCAgICAgICAgICAweDE2NzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORVRFRkZFQ1RfTkUwMjAgICAgMHgwMTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVURUZGRUNUX05FMDIwX0tSIDB4MDExMAogI2VuZGlmCiAKICNkZWZpbmUgTkUwMjBfUkVWICAgNApAQCAtMTkzLDggKzE5NCw4IEBACiBleHRlcm4gdTMyIGNtX3BhY2tldHNfcmVjZWl2ZWQ7CiBleHRlcm4gdTMyIGNtX3BhY2tldHNfZHJvcHBlZDsKIGV4dGVybiB1MzIgY21fcGFja2V0c19yZXRyYW5zOwotZXh0ZXJuIHUzMiBjbV9saXN0ZW5zX2NyZWF0ZWQ7Ci1leHRlcm4gdTMyIGNtX2xpc3RlbnNfZGVzdHJveWVkOworZXh0ZXJuIGF0b21pY190IGNtX2xpc3RlbnNfY3JlYXRlZDsKK2V4dGVybiBhdG9taWNfdCBjbV9saXN0ZW5zX2Rlc3Ryb3llZDsKIGV4dGVybiB1MzIgY21fYmFja2xvZ19kcm9wczsKIGV4dGVybiBhdG9taWNfdCBjbV9sb29wYmFja3M7CiBleHRlcm4gYXRvbWljX3QgY21fbm9kZXNfY3JlYXRlZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jCmluZGV4IDM5NDY4YzI3Li4yYTQ5ZWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19jbS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2NtLmMKQEAgLTY3LDggKzY3LDggQEAKIHUzMiBjbV9wYWNrZXRzX3JldHJhbnM7CiB1MzIgY21fcGFja2V0c19jcmVhdGVkOwogdTMyIGNtX3BhY2tldHNfcmVjZWl2ZWQ7Ci11MzIgY21fbGlzdGVuc19jcmVhdGVkOwotdTMyIGNtX2xpc3RlbnNfZGVzdHJveWVkOworYXRvbWljX3QgY21fbGlzdGVuc19jcmVhdGVkOworYXRvbWljX3QgY21fbGlzdGVuc19kZXN0cm95ZWQ7CiB1MzIgY21fYmFja2xvZ19kcm9wczsKIGF0b21pY190IGNtX2xvb3BiYWNrczsKIGF0b21pY190IGNtX25vZGVzX2NyZWF0ZWQ7CkBAIC0xMDExLDkgKzEwMTEsMTAgQEAKIAkJCQkJZXZlbnQuY21faW5mby5sb2NfcG9ydCA9CiAJCQkJCQkJIGxvb3BiYWNrLT5sb2NfcG9ydDsKIAkJCQkJZXZlbnQuY21faW5mby5jbV9pZCA9IGxvb3BiYWNrLT5jbV9pZDsKKwkJCQkJYWRkX3JlZl9jbV9ub2RlKGxvb3BiYWNrKTsKKwkJCQkJbG9vcGJhY2stPnN0YXRlID0gTkVTX0NNX1NUQVRFX0NMT1NFRDsKIAkJCQkJY21fZXZlbnRfY29ubmVjdF9lcnJvcigmZXZlbnQpOwogCQkJCQljbV9ub2RlLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9MSVNURU5FUl9ERVNUUk9ZRUQ7Ci0JCQkJCWxvb3BiYWNrLT5zdGF0ZSA9IE5FU19DTV9TVEFURV9DTE9TRUQ7CiAKIAkJCQkJcmVtX3JlZl9jbV9ub2RlKGNtX25vZGUtPmNtX2NvcmUsCiAJCQkJCQkJIGNtX25vZGUpOwpAQCAtMTA0Miw3ICsxMDQzLDcgQEAKIAkJa2ZyZWUobGlzdGVuZXIpOwogCQlsaXN0ZW5lciA9IE5VTEw7CiAJCXJldCA9IDA7Ci0JCWNtX2xpc3RlbnNfZGVzdHJveWVkKys7CisJCWF0b21pY19pbmMoJmNtX2xpc3RlbnNfZGVzdHJveWVkKTsKIAl9IGVsc2UgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbV9jb3JlLT5saXN0ZW5fbGlzdF9sb2NrLCBmbGFncyk7CiAJfQpAQCAtMzE3Miw3ICszMTczLDcgQEAKIAkJCWdfY21fY29yZS0+YXBpLT5zdG9wX2xpc3RlbmVyKGdfY21fY29yZSwgKHZvaWQgKiljbV9ub2RlKTsKIAkJCXJldHVybiBlcnI7CiAJCX0KLQkJY21fbGlzdGVuc19jcmVhdGVkKys7CisJCWF0b21pY19pbmMoJmNtX2xpc3RlbnNfY3JlYXRlZCk7CiAJfQogCiAJY21faWQtPmFkZF9yZWYoY21faWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmMKaW5kZXggYjFjMmNiYi4uY2U3ZjUzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5jCkBAIC03NDgsMTYgKzc0OCwyOCBAQAogCiAJaWYgKGh3X3JldiAhPSBORTAyMF9SRVYpIHsKIAkJLyogaW5pdCBzZXJkZXMgMCAqLwotCQlpZiAod2lkZV9wcG1fb2Zmc2V0ICYmIChuZXNhZGFwdGVyLT5waHlfdHlwZVswXSA9PSBORVNfUEhZX1RZUEVfQ1g0KSkKLQkJCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9FVEhfU0VSREVTX0NEUl9DT05UUk9MMCwgMHgwMDBGRkZBQSk7Ci0JCWVsc2UKKwkJc3dpdGNoIChuZXNhZGFwdGVyLT5waHlfdHlwZVswXSkgeworCQljYXNlIE5FU19QSFlfVFlQRV9DWDQ6CisJCQlpZiAod2lkZV9wcG1fb2Zmc2V0KQorCQkJCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9FVEhfU0VSREVTX0NEUl9DT05UUk9MMCwgMHgwMDBGRkZBQSk7CisJCQllbHNlCisJCQkJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX0VUSF9TRVJERVNfQ0RSX0NPTlRST0wwLCAweDAwMDAwMEZGKTsKKwkJCWJyZWFrOworCQljYXNlIE5FU19QSFlfVFlQRV9LUjoKIAkJCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9FVEhfU0VSREVTX0NEUl9DT05UUk9MMCwgMHgwMDAwMDBGRik7Ci0KLQkJaWYgKG5lc2FkYXB0ZXItPnBoeV90eXBlWzBdID09IE5FU19QSFlfVFlQRV9QVU1BXzFHKSB7CisJCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfRVRIX1NFUkRFU19UWF9FTVAwLCAweDAwMDAwMDAwKTsKKwkJCWJyZWFrOworCQljYXNlIE5FU19QSFlfVFlQRV9QVU1BXzFHOgorCQkJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX0VUSF9TRVJERVNfQ0RSX0NPTlRST0wwLCAweDAwMDAwMEZGKTsKIAkJCXNkcyA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX0VUSF9TRVJERVNfQ09NTU9OX0NPTlRST0wwKTsKIAkJCXNkcyB8PSAweDAwMDAwMTAwOwogCQkJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX0VUSF9TRVJERVNfQ09NTU9OX0NPTlRST0wwLCBzZHMpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfRVRIX1NFUkRFU19DRFJfQ09OVFJPTDAsIDB4MDAwMDAwRkYpOworCQkJYnJlYWs7CiAJCX0KKwogCQlpZiAoIU9uZUdfTW9kZSkKIAkJCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9FVEhfU0VSREVTX1RYX0hJR0haX0xBTkVfTU9ERTAsIDB4MTExMTAwMDApOwogCkBAIC03NzgsNiArNzkwLDkgQEAKIAkJCWlmICh3aWRlX3BwbV9vZmZzZXQpCiAJCQkJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX0VUSF9TRVJERVNfQ0RSX0NPTlRST0wxLCAweDAwMEZGRkFBKTsKIAkJCWJyZWFrOworCQljYXNlIE5FU19QSFlfVFlQRV9LUjoKKwkJCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9FVEhfU0VSREVTX1RYX0VNUDEsIDB4MDAwMDAwMDApOworCQkJYnJlYWs7CiAJCWNhc2UgTkVTX1BIWV9UWVBFX1BVTUFfMUc6CiAJCQlzZHMgPSBuZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9FVEhfU0VSREVTX0NPTU1PTl9DT05UUk9MMSk7CiAJCQlzZHMgfD0gMHgwMDAwMDAxMDA7CkBAIC0xMjc5LDExNSArMTI5NCwxMDAgQEAKIAogCiAvKioKLSAqIG5lc19pbml0X3BoeQorICogbmVzX2luaXRfMWdfcGh5CiAgKi8KLWludCBuZXNfaW5pdF9waHkoc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldikKK2ludCBuZXNfaW5pdF8xZ19waHkoc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiwgdTggcGh5X3R5cGUsIHU4IHBoeV9pbmRleCkKIHsKLQlzdHJ1Y3QgbmVzX2FkYXB0ZXIgKm5lc2FkYXB0ZXIgPSBuZXNkZXYtPm5lc2FkYXB0ZXI7CisJdTMyIGNvdW50ZXIgPSAwOworCXUxNiBwaHlfZGF0YTsKKwlpbnQgcmV0ID0gMDsKKworCW5lc19yZWFkXzFHX3BoeV9yZWcobmVzZGV2LCAxLCBwaHlfaW5kZXgsICZwaHlfZGF0YSk7CisJbmVzX3dyaXRlXzFHX3BoeV9yZWcobmVzZGV2LCAyMywgcGh5X2luZGV4LCAweGIwMDApOworCisJLyogUmVzZXQgdGhlIFBIWSAqLworCW5lc193cml0ZV8xR19waHlfcmVnKG5lc2RldiwgMCwgcGh5X2luZGV4LCAweDgwMDApOworCXVkZWxheSgxMDApOworCWNvdW50ZXIgPSAwOworCWRvIHsKKwkJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDAsIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKKwkJaWYgKGNvdW50ZXIrKyA+IDEwMCkgeworCQkJcmV0ID0gLTE7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKHBoeV9kYXRhICYgMHg4MDAwKTsKKworCS8qIFNldHRpbmcgbm8gcGh5IGxvb3BiYWNrICovCisJcGh5X2RhdGEgJj0gMHhiZmZmOworCXBoeV9kYXRhIHw9IDB4MTE0MDsKKwluZXNfd3JpdGVfMUdfcGh5X3JlZyhuZXNkZXYsIDAsIHBoeV9pbmRleCwgIHBoeV9kYXRhKTsKKwluZXNfcmVhZF8xR19waHlfcmVnKG5lc2RldiwgMCwgcGh5X2luZGV4LCAmcGh5X2RhdGEpOworCW5lc19yZWFkXzFHX3BoeV9yZWcobmVzZGV2LCAweDE3LCBwaHlfaW5kZXgsICZwaHlfZGF0YSk7CisJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDB4MWUsIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKKworCS8qIFNldHRpbmcgdGhlIGludGVycnVwdCBtYXNrICovCisJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDB4MTksIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKKwluZXNfd3JpdGVfMUdfcGh5X3JlZyhuZXNkZXYsIDB4MTksIHBoeV9pbmRleCwgMHhmZmVlKTsKKwluZXNfcmVhZF8xR19waHlfcmVnKG5lc2RldiwgMHgxOSwgcGh5X2luZGV4LCAmcGh5X2RhdGEpOworCisJLyogdHVybmluZyBvbiBmbG93IGNvbnRyb2wgKi8KKwluZXNfcmVhZF8xR19waHlfcmVnKG5lc2RldiwgNCwgcGh5X2luZGV4LCAmcGh5X2RhdGEpOworCW5lc193cml0ZV8xR19waHlfcmVnKG5lc2RldiwgNCwgcGh5X2luZGV4LCAocGh5X2RhdGEgJiB+KDB4MDNFMCkpIHwgMHhjMDApOworCW5lc19yZWFkXzFHX3BoeV9yZWcobmVzZGV2LCA0LCBwaHlfaW5kZXgsICZwaHlfZGF0YSk7CisKKwkvKiBDbGVhciBIYWxmIGR1cGxleCAqLworCW5lc19yZWFkXzFHX3BoeV9yZWcobmVzZGV2LCA5LCBwaHlfaW5kZXgsICZwaHlfZGF0YSk7CisJbmVzX3dyaXRlXzFHX3BoeV9yZWcobmVzZGV2LCA5LCBwaHlfaW5kZXgsIHBoeV9kYXRhICYgfigweDAxMDApKTsKKwluZXNfcmVhZF8xR19waHlfcmVnKG5lc2RldiwgOSwgcGh5X2luZGV4LCAmcGh5X2RhdGEpOworCisJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDAsIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKKwluZXNfd3JpdGVfMUdfcGh5X3JlZyhuZXNkZXYsIDAsIHBoeV9pbmRleCwgcGh5X2RhdGEgfCAweDAzMDApOworCisJcmV0dXJuIHJldDsKK30KKworCisvKioKKyAqIG5lc19pbml0XzIwMjVfcGh5CisgKi8KK2ludCBuZXNfaW5pdF8yMDI1X3BoeShzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2LCB1OCBwaHlfdHlwZSwgdTggcGh5X2luZGV4KQoreworCXUzMiB0ZW1wX3BoeV9kYXRhID0gMDsKKwl1MzIgdGVtcF9waHlfZGF0YTIgPSAwOwogCXUzMiBjb3VudGVyID0gMDsKIAl1MzIgc2RzOwogCXUzMiBtYWNfaW5kZXggPSBuZXNkZXYtPm1hY19pbmRleDsKLQl1MzIgdHhfY29uZmlnID0gMDsKLQl1MTYgcGh5X2RhdGE7Ci0JdTMyIHRlbXBfcGh5X2RhdGEgPSAwOwotCXUzMiB0ZW1wX3BoeV9kYXRhMiA9IDA7Ci0JdTggIHBoeV90eXBlID0gbmVzYWRhcHRlci0+cGh5X3R5cGVbbWFjX2luZGV4XTsKLQl1OCAgcGh5X2luZGV4ID0gbmVzYWRhcHRlci0+cGh5X2luZGV4W21hY19pbmRleF07CisJaW50IHJldCA9IDA7CisJdW5zaWduZWQgaW50IGZpcnN0X2F0dGVtcHQgPSAxOwogCi0JaWYgKChuZXNhZGFwdGVyLT5PbmVHX01vZGUpICYmCi0JICAgIChwaHlfdHlwZSAhPSBORVNfUEhZX1RZUEVfUFVNQV8xRykpIHsKLQkJbmVzX2RlYnVnKE5FU19EQkdfUEhZLCAiMUcgUEhZLCBtYWNfaW5kZXggPSAlZC5cbiIsIG1hY19pbmRleCk7Ci0JCWlmIChwaHlfdHlwZSA9PSBORVNfUEhZX1RZUEVfMUcpIHsKLQkJCXR4X2NvbmZpZyA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX01BQ19UWF9DT05GSUcpOwotCQkJdHhfY29uZmlnICY9IDB4RkZGRkZGRTM7Ci0JCQl0eF9jb25maWcgfD0gMHgwNDsKLQkJCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfVFhfQ09ORklHLCB0eF9jb25maWcpOwotCQl9CisJLyogQ2hlY2sgZmlybXdhcmUgaGVhcnRiZWF0ICovCisJbmVzX3JlYWRfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MywgMHhkN2VlKTsKKwl0ZW1wX3BoeV9kYXRhID0gKHUxNiluZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfTURJT19DT05UUk9MKTsKKwl1ZGVsYXkoMTUwMCk7CisJbmVzX3JlYWRfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MywgMHhkN2VlKTsKKwl0ZW1wX3BoeV9kYXRhMiA9ICh1MTYpbmVzX3JlYWRfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTUFDX01ESU9fQ09OVFJPTCk7CiAKLQkJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDEsIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKLQkJbmVzX3dyaXRlXzFHX3BoeV9yZWcobmVzZGV2LCAyMywgcGh5X2luZGV4LCAweGIwMDApOwotCi0JCS8qIFJlc2V0IHRoZSBQSFkgKi8KLQkJbmVzX3dyaXRlXzFHX3BoeV9yZWcobmVzZGV2LCAwLCBwaHlfaW5kZXgsIDB4ODAwMCk7Ci0JCXVkZWxheSgxMDApOwotCQljb3VudGVyID0gMDsKLQkJZG8gewotCQkJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDAsIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKLQkJCWlmIChjb3VudGVyKysgPiAxMDApCi0JCQkJYnJlYWs7Ci0JCX0gd2hpbGUgKHBoeV9kYXRhICYgMHg4MDAwKTsKLQotCQkvKiBTZXR0aW5nIG5vIHBoeSBsb29wYmFjayAqLwotCQlwaHlfZGF0YSAmPSAweGJmZmY7Ci0JCXBoeV9kYXRhIHw9IDB4MTE0MDsKLQkJbmVzX3dyaXRlXzFHX3BoeV9yZWcobmVzZGV2LCAwLCBwaHlfaW5kZXgsICBwaHlfZGF0YSk7Ci0JCW5lc19yZWFkXzFHX3BoeV9yZWcobmVzZGV2LCAwLCBwaHlfaW5kZXgsICZwaHlfZGF0YSk7Ci0JCW5lc19yZWFkXzFHX3BoeV9yZWcobmVzZGV2LCAweDE3LCBwaHlfaW5kZXgsICZwaHlfZGF0YSk7Ci0JCW5lc19yZWFkXzFHX3BoeV9yZWcobmVzZGV2LCAweDFlLCBwaHlfaW5kZXgsICZwaHlfZGF0YSk7Ci0KLQkJLyogU2V0dGluZyB0aGUgaW50ZXJydXB0IG1hc2sgKi8KLQkJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDB4MTksIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKLQkJbmVzX3dyaXRlXzFHX3BoeV9yZWcobmVzZGV2LCAweDE5LCBwaHlfaW5kZXgsIDB4ZmZlZSk7Ci0JCW5lc19yZWFkXzFHX3BoeV9yZWcobmVzZGV2LCAweDE5LCBwaHlfaW5kZXgsICZwaHlfZGF0YSk7Ci0KLQkJLyogdHVybmluZyBvbiBmbG93IGNvbnRyb2wgKi8KLQkJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDQsIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKLQkJbmVzX3dyaXRlXzFHX3BoeV9yZWcobmVzZGV2LCA0LCBwaHlfaW5kZXgsIChwaHlfZGF0YSAmIH4oMHgwM0UwKSkgfCAweGMwMCk7Ci0JCW5lc19yZWFkXzFHX3BoeV9yZWcobmVzZGV2LCA0LCBwaHlfaW5kZXgsICZwaHlfZGF0YSk7Ci0KLQkJLyogQ2xlYXIgSGFsZiBkdXBsZXggKi8KLQkJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDksIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKLQkJbmVzX3dyaXRlXzFHX3BoeV9yZWcobmVzZGV2LCA5LCBwaHlfaW5kZXgsIHBoeV9kYXRhICYgfigweDAxMDApKTsKLQkJbmVzX3JlYWRfMUdfcGh5X3JlZyhuZXNkZXYsIDksIHBoeV9pbmRleCwgJnBoeV9kYXRhKTsKLQotCQluZXNfcmVhZF8xR19waHlfcmVnKG5lc2RldiwgMCwgcGh5X2luZGV4LCAmcGh5X2RhdGEpOwotCQluZXNfd3JpdGVfMUdfcGh5X3JlZyhuZXNkZXYsIDAsIHBoeV9pbmRleCwgcGh5X2RhdGEgfCAweDAzMDApOwotCi0JCXJldHVybiAwOwotCX0KLQotCWlmICgocGh5X3R5cGUgPT0gTkVTX1BIWV9UWVBFX0lSSVMpIHx8Ci0JICAgIChwaHlfdHlwZSA9PSBORVNfUEhZX1RZUEVfQVJHVVMpIHx8Ci0JICAgIChwaHlfdHlwZSA9PSBORVNfUEhZX1RZUEVfU0ZQX0QpKSB7Ci0JCS8qIHNldHVwIDEwRyBNRElPIG9wZXJhdGlvbiAqLwotCQl0eF9jb25maWcgPSBuZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfVFhfQ09ORklHKTsKLQkJdHhfY29uZmlnICY9IDB4RkZGRkZGRTM7Ci0JCXR4X2NvbmZpZyB8PSAweDE1OwotCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTUFDX1RYX0NPTkZJRywgdHhfY29uZmlnKTsKLQl9Ci0JaWYgKChwaHlfdHlwZSA9PSBORVNfUEhZX1RZUEVfQVJHVVMpIHx8Ci0JICAgIChwaHlfdHlwZSA9PSBORVNfUEhZX1RZUEVfU0ZQX0QpKSB7Ci0JCXUzMiBmaXJzdF90aW1lID0gMTsKLQotCQkvKiBDaGVjayBmaXJtd2FyZSBoZWFydGJlYXQgKi8KLQkJbmVzX3JlYWRfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MywgMHhkN2VlKTsKKwlpZiAodGVtcF9waHlfZGF0YSAhPSB0ZW1wX3BoeV9kYXRhMikgeworCQluZXNfcmVhZF8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweGQ3ZmQpOwogCQl0ZW1wX3BoeV9kYXRhID0gKHUxNiluZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfTURJT19DT05UUk9MKTsKLQkJdWRlbGF5KDE1MDApOwotCQluZXNfcmVhZF8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweGQ3ZWUpOwotCQl0ZW1wX3BoeV9kYXRhMiA9ICh1MTYpbmVzX3JlYWRfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTUFDX01ESU9fQ09OVFJPTCk7CisJCWlmICgodGVtcF9waHlfZGF0YSAmIDB4ZmYpID4gMHgyMCkKKwkJCXJldHVybiAwOworCQlwcmludGsoUEZYICJSZWluaXRpYWxpemUgZXh0ZXJuYWwgUEhZXG4iKTsKKwl9CiAKLQkJaWYgKHRlbXBfcGh5X2RhdGEgIT0gdGVtcF9waHlfZGF0YTIpIHsKLQkJCW5lc19yZWFkXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDMsIDB4ZDdmZCk7Ci0JCQl0ZW1wX3BoeV9kYXRhID0gKHUxNiluZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfTURJT19DT05UUk9MKTsKLQkJCWlmICgodGVtcF9waHlfZGF0YSAmIDB4ZmYpID4gMHgyMCkKLQkJCQlyZXR1cm4gMDsKLQkJCXByaW50ayhQRlggIlJlaW5pdGlhbGl6aW5nIFBIWVxuIik7Ci0JCX0KKwkvKiBubyBoZWFydGJlYXQsIGNvbmZpZ3VyZSB0aGUgUEhZICovCisJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4MDAwMCwgMHg4MDAwKTsKKwluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhjMzAwLCAweDAwMDApOworCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweGMzMTYsIDB4MDAwQSk7CisJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMxOCwgMHgwMDUyKTsKIAotCQkvKiBubyBoZWFydGJlYXQsIGNvbmZpZ3VyZSB0aGUgUEhZICovCi0JCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweDAwMDAsIDB4ODAwMCk7Ci0JCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweGMzMDAsIDB4MDAwMCk7CisJc3dpdGNoIChwaHlfdHlwZSkgeworCWNhc2UgTkVTX1BIWV9UWVBFX0FSR1VTOgogCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhjMzE2LCAweDAwMEEpOwogCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhjMzE4LCAweDAwNTIpOwotCQlpZiAocGh5X3R5cGUgPT0gTkVTX1BIWV9UWVBFX0FSR1VTKSB7Ci0JCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhjMzAyLCAweDAwMEMpOwotCQkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMxOSwgMHgwMDA4KTsKLQkJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweDAwMjcsIDB4MDAwMSk7Ci0JCX0gZWxzZSB7Ci0JCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhjMzAyLCAweDAwMDQpOwotCQkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMxOSwgMHgwMDM4KTsKLQkJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweDAwMjcsIDB4MDAxMyk7Ci0JCX0KKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMwMiwgMHgwMDBDKTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMxOSwgMHgwMDA4KTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDMsIDB4MDAyNywgMHgwMDAxKTsKIAkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMxYSwgMHgwMDk4KTsKIAkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDMsIDB4MDAyNiwgMHgwRTAwKTsKIApAQCAtMTM5NSw3MSArMTM5NSwxNTEgQEAKIAkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4ZDAwNiwgMHgwMDA3KTsKIAkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4ZDAwNywgMHgwMDBBKTsKIAkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4ZDAwOCwgMHgwMDA5KTsKKwkJYnJlYWs7CiAKLQkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDMsIDB4MDAyOCwgMHhBNTI4KTsKKwljYXNlIE5FU19QSFlfVFlQRV9TRlBfRDoKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMxNiwgMHgwMDBBKTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMxOCwgMHgwMDUyKTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMwMiwgMHgwMDA0KTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMxOSwgMHgwMDM4KTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDMsIDB4MDAyNywgMHgwMDEzKTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMxYSwgMHgwMDk4KTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDMsIDB4MDAyNiwgMHgwRTAwKTsKIAotCQkvKiBCcmluZyBQSFkgb3V0IG9mIHJlc2V0ICovCi0JCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweGMzMDAsIDB4MDAwMik7CisJCS8qIHNldHVwIExFRHMgKi8KKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4ZDAwNiwgMHgwMDA3KTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4ZDAwNywgMHgwMDBBKTsKKwkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4ZDAwOCwgMHgwMDA5KTsKKwkJYnJlYWs7CiAKLQkJLyogQ2hlY2sgZm9yIGhlYXJ0YmVhdCAqLwotCQljb3VudGVyID0gMDsKLQkJbWRlbGF5KDY5MCk7CisJY2FzZSBORVNfUEhZX1RZUEVfS1I6CisJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweGMzMTYsIDB4MDAwQSk7CisJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweGMzMTgsIDB4MDA1Mik7CisJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweGMzMDIsIDB4MDAwQyk7CisJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweGMzMTksIDB4MDAxMCk7CisJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweDAwMjcsIDB4MDAxMyk7CisJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweGMzMWEsIDB4MDA4MCk7CisJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweDAwMjYsIDB4MEUwMCk7CisKKwkJLyogc2V0dXAgTEVEcyAqLworCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhkMDA2LCAweDAwMEIpOworCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhkMDA3LCAweDAwMDMpOworCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhkMDA4LCAweDAwMDQpOworCisJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweDAwMjIsIDB4NDA2RCk7CisJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweDAwMjMsIDB4MDAyMCk7CisJCWJyZWFrOworCX0KKworCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweDAwMjgsIDB4QTUyOCk7CisKKwkvKiBCcmluZyBQSFkgb3V0IG9mIHJlc2V0ICovCisJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4YzMwMCwgMHgwMDAyKTsKKworCS8qIENoZWNrIGZvciBoZWFydGJlYXQgKi8KKwljb3VudGVyID0gMDsKKwltZGVsYXkoNjkwKTsKKwluZXNfcmVhZF8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweGQ3ZWUpOworCXRlbXBfcGh5X2RhdGEgPSAodTE2KW5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX01BQ19NRElPX0NPTlRST0wpOworCWRvIHsKKwkJaWYgKGNvdW50ZXIrKyA+IDE1MCkgeworCQkJcHJpbnRrKFBGWCAiTm8gUEhZIGhlYXJ0YmVhdFxuIik7CisJCQlicmVhazsKKwkJfQorCQltZGVsYXkoMSk7CiAJCW5lc19yZWFkXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDMsIDB4ZDdlZSk7CisJCXRlbXBfcGh5X2RhdGEyID0gKHUxNiluZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfTURJT19DT05UUk9MKTsKKwl9IHdoaWxlICgodGVtcF9waHlfZGF0YTIgPT0gdGVtcF9waHlfZGF0YSkpOworCisJLyogd2FpdCBmb3IgdHJhY2tpbmcgKi8KKwljb3VudGVyID0gMDsKKwlkbyB7CisJCW5lc19yZWFkXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDMsIDB4ZDdmZCk7CiAJCXRlbXBfcGh5X2RhdGEgPSAodTE2KW5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX01BQ19NRElPX0NPTlRST0wpOwotCQlkbyB7Ci0JCQlpZiAoY291bnRlcisrID4gMTUwKSB7Ci0JCQkJcHJpbnRrKFBGWCAiTm8gUEhZIGhlYXJ0YmVhdFxuIik7CisJCWlmIChjb3VudGVyKysgPiAzMDApIHsKKwkJCWlmICgoKHRlbXBfcGh5X2RhdGEgJiAweGZmKSA9PSAweDApICYmIGZpcnN0X2F0dGVtcHQpIHsKKwkJCQlmaXJzdF9hdHRlbXB0ID0gMDsKKwkJCQljb3VudGVyID0gMDsKKwkJCQkvKiByZXNldCBBTUNDIFBIWSBhbmQgdHJ5IGFnYWluICovCisJCQkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDMsIDB4ZTg1NCwgMHgwMGMwKTsKKwkJCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MywgMHhlODU0LCAweDAwNDApOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQlyZXQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQotCQkJbWRlbGF5KDEpOwotCQkJbmVzX3JlYWRfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MywgMHhkN2VlKTsKLQkJCXRlbXBfcGh5X2RhdGEyID0gKHUxNiluZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfTURJT19DT05UUk9MKTsKLQkJfSB3aGlsZSAoKHRlbXBfcGh5X2RhdGEyID09IHRlbXBfcGh5X2RhdGEpKTsKKwkJfQorCQltZGVsYXkoMTApOworCX0gd2hpbGUgKCh0ZW1wX3BoeV9kYXRhICYgMHhmZikgPCAweDMwKTsKIAotCQkvKiB3YWl0IGZvciB0cmFja2luZyAqLwotCQljb3VudGVyID0gMDsKLQkJZG8gewotCQkJbmVzX3JlYWRfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MywgMHhkN2ZkKTsKLQkJCXRlbXBfcGh5X2RhdGEgPSAodTE2KW5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX01BQ19NRElPX0NPTlRST0wpOwotCQkJaWYgKGNvdW50ZXIrKyA+IDMwMCkgewotCQkJCWlmICgoKHRlbXBfcGh5X2RhdGEgJiAweGZmKSA9PSAweDApICYmIGZpcnN0X3RpbWUpIHsKLQkJCQkJZmlyc3RfdGltZSA9IDA7Ci0JCQkJCWNvdW50ZXIgPSAwOwotCQkJCQkvKiByZXNldCBBTUNDIFBIWSBhbmQgdHJ5IGFnYWluICovCi0JCQkJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweGU4NTQsIDB4MDBjMCk7Ci0JCQkJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgzLCAweGU4NTQsIDB4MDA0MCk7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXByaW50ayhQRlggIlBIWSBkaWQgbm90IHRyYWNrXG4iKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJbWRlbGF5KDEwKTsKLQkJfSB3aGlsZSAoKHRlbXBfcGh5X2RhdGEgJiAweGZmKSA8IDB4MzApOwotCi0JCS8qIHNldHVwIHNpZ25hbCBpbnRlZ3JpdHkgKi8KLQkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4ZDAwMywgMHgwMDAwKTsKLQkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4RjAwRCwgMHgwMEZFKTsKLQkJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4RjAwRSwgMHgwMDMyKTsKKwkvKiBzZXR1cCBzaWduYWwgaW50ZWdyaXR5ICovCisJbmVzX3dyaXRlXzEwR19waHlfcmVnKG5lc2RldiwgcGh5X2luZGV4LCAweDEsIDB4ZDAwMywgMHgwMDAwKTsKKwluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhGMDBELCAweDAwRkUpOworCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweEYwMEUsIDB4MDAzMik7CisJaWYgKHBoeV90eXBlID09IE5FU19QSFlfVFlQRV9LUikgeworCQluZXNfd3JpdGVfMTBHX3BoeV9yZWcobmVzZGV2LCBwaHlfaW5kZXgsIDB4MSwgMHhGMDBGLCAweDAwMEMpOworCX0gZWxzZSB7CiAJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweEYwMEYsIDB4MDAwMik7CiAJCW5lc193cml0ZV8xMEdfcGh5X3JlZyhuZXNkZXYsIHBoeV9pbmRleCwgMHgxLCAweGMzMTQsIDB4MDA2Myk7Ci0KLQkJLyogcmVzZXQgc2VyZGVzICovCi0JCXNkcyA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX0VUSF9TRVJERVNfQ09NTU9OX0NPTlRST0wwICsKLQkJCQkgICAgICAgbWFjX2luZGV4ICogMHgyMDApOwotCQlzZHMgfD0gMHgxOwotCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfRVRIX1NFUkRFU19DT01NT05fQ09OVFJPTDAgKwotCQkJCSAgbWFjX2luZGV4ICogMHgyMDAsIHNkcyk7Ci0JCXNkcyAmPSAweGZmZmZmZmZlOwotCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfRVRIX1NFUkRFU19DT01NT05fQ09OVFJPTDAgKwotCQkJCSAgbWFjX2luZGV4ICogMHgyMDAsIHNkcyk7Ci0KLQkJY291bnRlciA9IDA7Ci0JCXdoaWxlICgoKG5lc19yZWFkMzIobmVzZGV2LT5yZWdzICsgTkVTX1NPRlRXQVJFX1JFU0VUKSAmIDB4MDAwMDAwNDApICE9IDB4MDAwMDAwNDApCi0JCQkJJiYgKGNvdW50ZXIrKyA8IDUwMDApKQotCQkJOwogCX0KLQlyZXR1cm4gMDsKKworCS8qIHJlc2V0IHNlcmRlcyAqLworCXNkcyA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX0VUSF9TRVJERVNfQ09NTU9OX0NPTlRST0wwICsgbWFjX2luZGV4ICogMHgyMDApOworCXNkcyB8PSAweDE7CisJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX0VUSF9TRVJERVNfQ09NTU9OX0NPTlRST0wwICsgbWFjX2luZGV4ICogMHgyMDAsIHNkcyk7CisJc2RzICY9IDB4ZmZmZmZmZmU7CisJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX0VUSF9TRVJERVNfQ09NTU9OX0NPTlRST0wwICsgbWFjX2luZGV4ICogMHgyMDAsIHNkcyk7CisKKwljb3VudGVyID0gMDsKKwl3aGlsZSAoKChuZXNfcmVhZDMyKG5lc2Rldi0+cmVncyArIE5FU19TT0ZUV0FSRV9SRVNFVCkgJiAweDAwMDAwMDQwKSAhPSAweDAwMDAwMDQwKQorCQkJJiYgKGNvdW50ZXIrKyA8IDUwMDApKQorCQk7CisKKwlyZXR1cm4gcmV0OworfQorCisKKy8qKgorICogbmVzX2luaXRfcGh5CisgKi8KK2ludCBuZXNfaW5pdF9waHkoc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldikKK3sKKwlzdHJ1Y3QgbmVzX2FkYXB0ZXIgKm5lc2FkYXB0ZXIgPSBuZXNkZXYtPm5lc2FkYXB0ZXI7CisJdTMyIG1hY19pbmRleCA9IG5lc2Rldi0+bWFjX2luZGV4OworCXUzMiB0eF9jb25maWcgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdTggIHBoeV90eXBlID0gbmVzYWRhcHRlci0+cGh5X3R5cGVbbWFjX2luZGV4XTsKKwl1OCAgcGh5X2luZGV4ID0gbmVzYWRhcHRlci0+cGh5X2luZGV4W21hY19pbmRleF07CisJaW50IHJldCA9IDA7CisKKwl0eF9jb25maWcgPSBuZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfVFhfQ09ORklHKTsKKwlpZiAocGh5X3R5cGUgPT0gTkVTX1BIWV9UWVBFXzFHKSB7CisJCS8qIHNldHVwIDFHIE1ESU8gb3BlcmF0aW9uICovCisJCXR4X2NvbmZpZyAmPSAweEZGRkZGRkUzOworCQl0eF9jb25maWcgfD0gMHgwNDsKKwl9IGVsc2UgeworCQkvKiBzZXR1cCAxMEcgTURJTyBvcGVyYXRpb24gKi8KKwkJdHhfY29uZmlnICY9IDB4RkZGRkZGRTM7CisJCXR4X2NvbmZpZyB8PSAweDE1OworCX0KKwluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTUFDX1RYX0NPTkZJRywgdHhfY29uZmlnKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNkZXYtPm5lc2FkYXB0ZXItPnBoeV9sb2NrLCBmbGFncyk7CisKKwlzd2l0Y2ggKHBoeV90eXBlKSB7CisJY2FzZSBORVNfUEhZX1RZUEVfMUc6CisJCXJldCA9IG5lc19pbml0XzFnX3BoeShuZXNkZXYsIHBoeV90eXBlLCBwaHlfaW5kZXgpOworCQlicmVhazsKKwljYXNlIE5FU19QSFlfVFlQRV9BUkdVUzoKKwljYXNlIE5FU19QSFlfVFlQRV9TRlBfRDoKKwljYXNlIE5FU19QSFlfVFlQRV9LUjoKKwkJcmV0ID0gbmVzX2luaXRfMjAyNV9waHkobmVzZGV2LCBwaHlfdHlwZSwgcGh5X2luZGV4KTsKKwkJYnJlYWs7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbmVzZGV2LT5uZXNhZGFwdGVyLT5waHlfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKIH0KIAogCkBAIC0yNDYwLDIzICsyNTQwLDkgQEAKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCXN3aXRjaCAobmVzYWRhcHRlci0+cGh5X3R5cGVbbWFjX2luZGV4XSkgewotCQkJY2FzZSBORVNfUEhZX1RZUEVfSVJJUzoKLQkJCQluZXNfcmVhZF8xMEdfcGh5X3JlZyhuZXNkZXYsIG5lc2FkYXB0ZXItPnBoeV9pbmRleFttYWNfaW5kZXhdLCAxLCAxKTsKLQkJCQl0ZW1wX3BoeV9kYXRhID0gKHUxNiluZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9NQUNfTURJT19DT05UUk9MKTsKLQkJCQl1MzJ0ZW1wID0gMjA7Ci0JCQkJZG8gewotCQkJCQluZXNfcmVhZF8xMEdfcGh5X3JlZyhuZXNkZXYsIG5lc2FkYXB0ZXItPnBoeV9pbmRleFttYWNfaW5kZXhdLCAxLCAxKTsKLQkJCQkJcGh5X2RhdGEgPSAodTE2KW5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX01BQ19NRElPX0NPTlRST0wpOwotCQkJCQlpZiAoKHBoeV9kYXRhID09IHRlbXBfcGh5X2RhdGEpIHx8ICghKC0tdTMydGVtcCkpKQotCQkJCQkJYnJlYWs7Ci0JCQkJCXRlbXBfcGh5X2RhdGEgPSBwaHlfZGF0YTsKLQkJCQl9IHdoaWxlICgxKTsKLQkJCQluZXNfZGVidWcoTkVTX0RCR19QSFksICIlczogUGh5IGRhdGEgPSAweCUwNFgsIGxpbmsgd2FzICVzLlxuIiwKLQkJCQkJX19mdW5jX18sIHBoeV9kYXRhLCBuZXNhZGFwdGVyLT5tYWNfbGlua19kb3duW21hY19pbmRleF0gPyAiRE9XTiIgOiAiVVAiKTsKLQkJCQlicmVhazsKLQogCQkJY2FzZSBORVNfUEhZX1RZUEVfQVJHVVM6CiAJCQljYXNlIE5FU19QSFlfVFlQRV9TRlBfRDoKKwkJCWNhc2UgTkVTX1BIWV9UWVBFX0tSOgogCQkJCS8qIGNsZWFyIHRoZSBhbGFybXMgKi8KIAkJCQluZXNfcmVhZF8xMEdfcGh5X3JlZyhuZXNkZXYsIG5lc2FkYXB0ZXItPnBoeV9pbmRleFttYWNfaW5kZXhdLCA0LCAweDAwMDgpOwogCQkJCW5lc19yZWFkXzEwR19waHlfcmVnKG5lc2RldiwgbmVzYWRhcHRlci0+cGh5X2luZGV4W21hY19pbmRleF0sIDQsIDB4YzAwMSk7CkBAIC0zMzUyLDggKzM0MTgsNiBAQAogCXUxNiBhc3luY19ldmVudF9pZDsKIAl1OCB0Y3Bfc3RhdGU7CiAJdTggaXdhcnBfc3RhdGU7Ci0JaW50IG11c3RfZGlzY29ubiA9IDE7Ci0JaW50IG11c3RfdGVybWluYXRlID0gMDsKIAlzdHJ1Y3QgaWJfZXZlbnQgaWJldmVudDsKIAogCW5lc19kZWJ1ZyhORVNfREJHX0FFUSwgIlxuIik7CkBAIC0zMzY3LDYgKzM0MzEsOCBAQAogCQlCVUdfT04oIWNvbnRleHQpOwogCX0KIAorCS8qIGNvbnRleHQgaXMgbmVzcXAgdW5sZXNzIGFzeW5jX2V2ZW50X2lkID09IENRIEVSUk9SICovCisJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKSh1bnNpZ25lZCBsb25nKWNvbnRleHQ7CiAJYXN5bmNfZXZlbnRfaWQgPSAodTE2KWFlcV9pbmZvOwogCXRjcF9zdGF0ZSA9IChhZXFfaW5mbyAmIE5FU19BRVFFX1RDUF9TVEFURV9NQVNLKSA+PiBORVNfQUVRRV9UQ1BfU1RBVEVfU0hJRlQ7CiAJaXdhcnBfc3RhdGUgPSAoYWVxX2luZm8gJiBORVNfQUVRRV9JV0FSUF9TVEFURV9NQVNLKSA+PiBORVNfQUVRRV9JV0FSUF9TVEFURV9TSElGVDsKQEAgLTMzNzgsOCArMzQ0NCw2IEBACiAKIAlzd2l0Y2ggKGFzeW5jX2V2ZW50X2lkKSB7CiAJCWNhc2UgTkVTX0FFUUVfQUVJRF9MTFBfRklOX1JFQ0VJVkVEOgotCQkJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKSh1bnNpZ25lZCBsb25nKWNvbnRleHQ7Ci0KIAkJCWlmIChuZXNxcC0+dGVybV9mbGFncykKIAkJCQlyZXR1cm47IC8qIElnbm9yZSBpdCwgd2FpdCBmb3IgY2xvc2UgY29tcGxldGUgKi8KIApAQCAtMzM5NCw3OSArMzQ1OCw0OCBAQAogCQkJCQkJYXN5bmNfZXZlbnRfaWQsIG5lc3FwLT5sYXN0X2FlcSwgdGNwX3N0YXRlKTsKIAkJCX0KIAotCQkJaWYgKCh0Y3Bfc3RhdGUgIT0gTkVTX0FFUUVfVENQX1NUQVRFX0NMT1NFX1dBSVQpIHx8Ci0JCQkJCShuZXNxcC0+aWJxcF9zdGF0ZSAhPSBJQl9RUFNfUlRTKSkgewotCQkJCS8qIEZJTiBSZWNlaXZlZCBidXQgdGNwIHN0YXRlIG9yIElCIHN0YXRlIG1vdmVkIG9uLAotCQkJCQkJc2hvdWxkIGV4cGVjdCBhCWNsb3NlIGNvbXBsZXRlICovCi0JCQkJcmV0dXJuOwotCQkJfQotCisJCQlicmVhazsKIAkJY2FzZSBORVNfQUVRRV9BRUlEX0xMUF9DTE9TRV9DT01QTEVURToKLQkJCW5lc3FwID0gKHN0cnVjdCBuZXNfcXAgKikodW5zaWduZWQgbG9uZyljb250ZXh0OwogCQkJaWYgKG5lc3FwLT50ZXJtX2ZsYWdzKSB7CiAJCQkJbmVzX3Rlcm1pbmF0ZV9kb25lKG5lc3FwLCAwKTsKIAkJCQlyZXR1cm47CiAJCQl9CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbmVzcXAtPmxvY2ssIGZsYWdzKTsKKwkJCW5lc3FwLT5od19pd2FycF9zdGF0ZSA9IE5FU19BRVFFX0lXQVJQX1NUQVRFX0NMT1NJTkc7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOworCQkJbmVzX2h3X21vZGlmeV9xcChuZXNkZXYsIG5lc3FwLCBORVNfQ1FQX1FQX0lXQVJQX1NUQVRFX0NMT1NJTkcsIDAsIDApOworCQkJbmVzX2NtX2Rpc2Nvbm4obmVzcXApOworCQkJYnJlYWs7CiAKLQkJY2FzZSBORVNfQUVRRV9BRUlEX0xMUF9DT05ORUNUSU9OX1JFU0VUOgogCQljYXNlIE5FU19BRVFFX0FFSURfUkVTRVRfU0VOVDoKLQkJCW5lc3FwID0gKHN0cnVjdCBuZXNfcXAgKikodW5zaWduZWQgbG9uZyljb250ZXh0OwotCQkJaWYgKGFzeW5jX2V2ZW50X2lkID09IE5FU19BRVFFX0FFSURfUkVTRVRfU0VOVCkgewotCQkJCXRjcF9zdGF0ZSA9IE5FU19BRVFFX1RDUF9TVEFURV9DTE9TRUQ7Ci0JCQl9CisJCQl0Y3Bfc3RhdGUgPSBORVNfQUVRRV9UQ1BfU1RBVEVfQ0xPU0VEOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc3FwLT5sb2NrLCBmbGFncyk7CiAJCQluZXNxcC0+aHdfaXdhcnBfc3RhdGUgPSBpd2FycF9zdGF0ZTsKIAkJCW5lc3FwLT5od190Y3Bfc3RhdGUgPSB0Y3Bfc3RhdGU7CiAJCQluZXNxcC0+bGFzdF9hZXEgPSBhc3luY19ldmVudF9pZDsKLQotCQkJaWYgKCh0Y3Bfc3RhdGUgPT0gTkVTX0FFUUVfVENQX1NUQVRFX0NMT1NFRCkgfHwKLQkJCQkJKHRjcF9zdGF0ZSA9PSBORVNfQUVRRV9UQ1BfU1RBVEVfVElNRV9XQUlUKSkgewotCQkJCW5lc3FwLT5odGVfYWRkZWQgPSAwOwotCQkJCW5leHRfaXdhcnBfc3RhdGUgPSBORVNfQ1FQX1FQX0lXQVJQX1NUQVRFX0VSUk9SIHwgTkVTX0NRUF9RUF9ERUxfSFRFOwotCQkJfQotCi0JCQlpZiAoKG5lc3FwLT5pYnFwX3N0YXRlID09IElCX1FQU19SVFMpICYmCi0JCQkJCSgodGNwX3N0YXRlID09IE5FU19BRVFFX1RDUF9TVEFURV9DTE9TRV9XQUlUKSB8fAotCQkJCQkoYXN5bmNfZXZlbnRfaWQgPT0gTkVTX0FFUUVfQUVJRF9MTFBfQ09OTkVDVElPTl9SRVNFVCkpKSB7Ci0JCQkJc3dpdGNoIChuZXNxcC0+aHdfaXdhcnBfc3RhdGUpIHsKLQkJCQkJY2FzZSBORVNfQUVRRV9JV0FSUF9TVEFURV9SVFM6Ci0JCQkJCQluZXh0X2l3YXJwX3N0YXRlID0gTkVTX0NRUF9RUF9JV0FSUF9TVEFURV9DTE9TSU5HOwotCQkJCQkJbmVzcXAtPmh3X2l3YXJwX3N0YXRlID0gTkVTX0FFUUVfSVdBUlBfU1RBVEVfQ0xPU0lORzsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIE5FU19BRVFFX0lXQVJQX1NUQVRFX1RFUk1JTkFURToKLQkJCQkJCW11c3RfZGlzY29ubiA9IDA7IC8qIHRlcm1pbmF0ZSBwYXRoIHRha2VzIGNhcmUgb2YgZGlzY29ubiAqLwotCQkJCQkJaWYgKG5lc3FwLT50ZXJtX2ZsYWdzID09IDApCi0JCQkJCQkJbXVzdF90ZXJtaW5hdGUgPSAxOwotCQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlpZiAoYXN5bmNfZXZlbnRfaWQgPT0gIE5FU19BRVFFX0FFSURfTExQX0ZJTl9SRUNFSVZFRCkgewotCQkJCQkvKiBGSU4gUmVjZWl2ZWQgYnV0IGliIHN0YXRlIG5vdCBSVFMsCi0JCQkJCQkJY2xvc2UgY29tcGxldGUgd2lsbCBiZSBvbiBpdHMgd2F5ICovCi0JCQkJCW11c3RfZGlzY29ubiA9IDA7Ci0JCQkJfQotCQkJfQorCQkJbmVzcXAtPmh0ZV9hZGRlZCA9IDA7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOworCQkJbmV4dF9pd2FycF9zdGF0ZSA9IE5FU19DUVBfUVBfSVdBUlBfU1RBVEVfRVJST1IgfCBORVNfQ1FQX1FQX0RFTF9IVEU7CisJCQluZXNfaHdfbW9kaWZ5X3FwKG5lc2RldiwgbmVzcXAsIG5leHRfaXdhcnBfc3RhdGUsIDAsIDApOworCQkJbmVzX2NtX2Rpc2Nvbm4obmVzcXApOworCQkJYnJlYWs7CiAKLQkJCWlmIChtdXN0X3Rlcm1pbmF0ZSkKLQkJCQluZXNfdGVybWluYXRlX2Nvbm5lY3Rpb24obmVzZGV2LCBuZXNxcCwgYWVxZSwgSUJfRVZFTlRfUVBfRkFUQUwpOwotCQkJZWxzZSBpZiAobXVzdF9kaXNjb25uKSB7Ci0JCQkJaWYgKG5leHRfaXdhcnBfc3RhdGUpIHsKLQkJCQkJbmVzX2RlYnVnKE5FU19EQkdfQUVRLCAiaXNzdWluZyBodyBtb2RpZnlxcCBmb3IgUVAldS4gbmV4dCBzdGF0ZSA9IDB4JTA4WFxuIiwKLQkJCQkJCSAgbmVzcXAtPmh3cXAucXBfaWQsIG5leHRfaXdhcnBfc3RhdGUpOwotCQkJCQluZXNfaHdfbW9kaWZ5X3FwKG5lc2RldiwgbmVzcXAsIG5leHRfaXdhcnBfc3RhdGUsIDAsIDApOwotCQkJCX0KLQkJCQluZXNfY21fZGlzY29ubihuZXNxcCk7Ci0JCQl9CisJCWNhc2UgTkVTX0FFUUVfQUVJRF9MTFBfQ09OTkVDVElPTl9SRVNFVDoKKwkJCWlmIChhdG9taWNfcmVhZCgmbmVzcXAtPmNsb3NlX3RpbWVyX3N0YXJ0ZWQpKQorCQkJCXJldHVybjsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOworCQkJbmVzcXAtPmh3X2l3YXJwX3N0YXRlID0gaXdhcnBfc3RhdGU7CisJCQluZXNxcC0+aHdfdGNwX3N0YXRlID0gdGNwX3N0YXRlOworCQkJbmVzcXAtPmxhc3RfYWVxID0gYXN5bmNfZXZlbnRfaWQ7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOworCQkJbmVzX2NtX2Rpc2Nvbm4obmVzcXApOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBORVNfQUVRRV9BRUlEX1RFUk1JTkFURV9TRU5UOgotCQkJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKSh1bnNpZ25lZCBsb25nKWNvbnRleHQ7CiAJCQluZXNfdGVybWluYXRlX3NlbmRfZmluKG5lc2RldiwgbmVzcXAsIGFlcWUpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBORVNfQUVRRV9BRUlEX0xMUF9URVJNSU5BVEVfUkVDRUlWRUQ6Ci0JCQluZXNxcCA9IChzdHJ1Y3QgbmVzX3FwICopKHVuc2lnbmVkIGxvbmcpY29udGV4dDsKIAkJCW5lc190ZXJtaW5hdGVfcmVjZWl2ZWQobmVzZGV2LCBuZXNxcCwgYWVxZSk7CiAJCQlicmVhazsKIApAQCAtMzQ4MCw3ICszNTEzLDggQEAKIAkJY2FzZSBORVNfQUVRRV9BRUlEX0REUF9VQkVfRERQX01FU1NBR0VfVE9PX0xPTkdfRk9SX0FWQUlMQUJMRV9CVUZGRVI6CiAJCWNhc2UgTkVTX0FFUUVfQUVJRF9BTVBfQk9VTkRTX1ZJT0xBVElPTjoKIAkJY2FzZSBORVNfQUVRRV9BRUlEX0FNUF9UT19XUkFQOgotCQkJbmVzcXAgPSAoc3RydWN0IG5lc19xcCAqKSh1bnNpZ25lZCBsb25nKWNvbnRleHQ7CisJCQlwcmludGsoS0VSTl9FUlIgUEZYICJRUFsldV0gYXN5bmNfZXZlbnRfaWQ9MHglMDRYIElCX0VWRU5UX1FQX0FDQ0VTU19FUlJcbiIsCisJCQkJCW5lc3FwLT5od3FwLnFwX2lkLCBhc3luY19ldmVudF9pZCk7CiAJCQluZXNfdGVybWluYXRlX2Nvbm5lY3Rpb24obmVzZGV2LCBuZXNxcCwgYWVxZSwgSUJfRVZFTlRfUVBfQUNDRVNTX0VSUik7CiAJCQlicmVhazsKIApAQCAtMzQ4OCw3ICszNTIyLDYgQEAKIAkJY2FzZSBORVNfQUVRRV9BRUlEX0xMUF9TRUdNRU5UX1RPT19TTUFMTDoKIAkJY2FzZSBORVNfQUVRRV9BRUlEX0REUF9VQkVfSU5WQUxJRF9NTzoKIAkJY2FzZSBORVNfQUVRRV9BRUlEX0REUF9VQkVfSU5WQUxJRF9RTjoKLQkJCW5lc3FwID0gKHN0cnVjdCBuZXNfcXAgKikodW5zaWduZWQgbG9uZyljb250ZXh0OwogCQkJaWYgKGl3YXJwX29wY29kZShuZXNxcCwgYWVxX2luZm8pID4gSVdBUlBfT1BDT0RFX1RFUk0pIHsKIAkJCQlhZXFfaW5mbyAmPSAweGZmZmYwMDAwOwogCQkJCWFlcV9pbmZvIHw9IE5FU19BRVFFX0FFSURfUkRNQVBfUk9FX1VORVhQRUNURURfT1BDT0RFOwpAQCAtMzUzMCw3ICszNTYzLDggQEAKIAkJY2FzZSBORVNfQUVRRV9BRUlEX1NUQUdfWkVST19JTlZBTElEOgogCQljYXNlIE5FU19BRVFFX0FFSURfUk9FX0lOVkFMSURfUkRNQV9SRUFEX1JFUVVFU1Q6CiAJCWNhc2UgTkVTX0FFUUVfQUVJRF9ST0VfSU5WQUxJRF9SRE1BX1dSSVRFX09SX1JFQURfUkVTUDoKLQkJCW5lc3FwID0gKHN0cnVjdCBuZXNfcXAgKikodW5zaWduZWQgbG9uZyljb250ZXh0OworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUVBbJXVdIGFzeW5jX2V2ZW50X2lkPTB4JTA0WCBJQl9FVkVOVF9RUF9GQVRBTFxuIiwKKwkJCQkJbmVzcXAtPmh3cXAucXBfaWQsIGFzeW5jX2V2ZW50X2lkKTsKIAkJCW5lc190ZXJtaW5hdGVfY29ubmVjdGlvbihuZXNkZXYsIG5lc3FwLCBhZXFlLCBJQl9FVkVOVF9RUF9GQVRBTCk7CiAJCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX2h3LmgKaW5kZXggMDg0YmUwZS4uOWIxZTdmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfaHcuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19ody5oCkBAIC0zNywxMiArMzcsMTIgQEAKIAogI2RlZmluZSBORVNfUEhZX1RZUEVfQ1g0ICAgICAgIDEKICNkZWZpbmUgTkVTX1BIWV9UWVBFXzFHICAgICAgICAyCi0jZGVmaW5lIE5FU19QSFlfVFlQRV9JUklTICAgICAgMwogI2RlZmluZSBORVNfUEhZX1RZUEVfQVJHVVMgICAgIDQKICNkZWZpbmUgTkVTX1BIWV9UWVBFX1BVTUFfMUcgICA1CiAjZGVmaW5lIE5FU19QSFlfVFlQRV9QVU1BXzEwRyAgNgogI2RlZmluZSBORVNfUEhZX1RZUEVfR0xBRElVUyAgIDcKICNkZWZpbmUgTkVTX1BIWV9UWVBFX1NGUF9EICAgICA4CisjZGVmaW5lIE5FU19QSFlfVFlQRV9LUgkgICAgICAgOQogCiAjZGVmaW5lIE5FU19NVUxUSUNBU1RfUEZfTUFYIDgKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfbmljLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwppbmRleCBhYjExMDI3Li5hMWQ3OWI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc19uaWMuYwpAQCAtODEwLDYgKzgxMCwyMCBAQAogfQogCiAKK3N0YXRpYyB2b2lkIHNldF9hbGxtdWx0aShzdHJ1Y3QgbmVzX2RldmljZSAqbmVzZGV2LCB1MzIgbmljX2FjdGl2ZV9iaXQpCit7CisJdTMyIG5pY19hY3RpdmU7CisKKwluaWNfYWN0aXZlID0gbmVzX3JlYWRfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTklDX01VTFRJQ0FTVF9BTEwpOworCW5pY19hY3RpdmUgfD0gbmljX2FjdGl2ZV9iaXQ7CisJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX05JQ19NVUxUSUNBU1RfQUxMLCBuaWNfYWN0aXZlKTsKKwluaWNfYWN0aXZlID0gbmVzX3JlYWRfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTklDX1VOSUNBU1RfQUxMKTsKKwluaWNfYWN0aXZlICY9IH5uaWNfYWN0aXZlX2JpdDsKKwluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTklDX1VOSUNBU1RfQUxMLCBuaWNfYWN0aXZlKTsKK30KKworI2RlZmluZSBnZXRfYWRkcihhZGRycywgaW5kZXgpICgoYWRkcnMpICsgKGluZGV4KSAqIEVUSF9BTEVOKQorCiAvKioKICAqIG5lc19uZXRkZXZfc2V0X211bHRpY2FzdF9saXN0CiAgKi8KQEAgLTgxOCw3ICs4MzIsNiBAQAogCXN0cnVjdCBuZXNfdm5pYyAqbmVzdm5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IG5lc19kZXZpY2UgKm5lc2RldiA9IG5lc3ZuaWMtPm5lc2RldjsKIAlzdHJ1Y3QgbmVzX2FkYXB0ZXIgKm5lc2FkYXB0ZXIgPSBuZXN2bmljLT5uZXNkZXYtPm5lc2FkYXB0ZXI7Ci0Jc3RydWN0IGRldl9tY19saXN0ICptdWx0aWNhc3RfYWRkcjsKIAl1MzIgbmljX2FjdGl2ZV9iaXQ7CiAJdTMyIG5pY19hY3RpdmU7CiAJdTMyIHBlcmZlY3RfZmlsdGVyX3JlZ2lzdGVyX2FkZHJlc3M7CkBAIC04MzEsNiArODQ0LDcgQEAKIAkJCQkJbmljc19wZXJfZnVuY3Rpb24sIDQpOwogCXU4IG1heF9wZnRfZW50cmllc19hdmFpYWJsZSA9IE5FU19QRlRfU0laRSAtIHBmdF9lbnRyaWVzX3ByZWFsbG9jYXRlZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBtY19jb3VudCA9IG5ldGRldl9tY19jb3VudChuZXRkZXYpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm5lc2FkYXB0ZXItPnJlc291cmNlX2xvY2ssIGZsYWdzKTsKIAluaWNfYWN0aXZlX2JpdCA9IDEgPDwgbmVzdm5pYy0+bmljX2luZGV4OwpAQCAtODQ1LDEyICs4NTksNyBAQAogCQltY19hbGxfb24gPSAxOwogCX0gZWxzZSBpZiAoKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8CiAJCQkgICAobmVzdm5pYy0+bmljX2luZGV4ID4gMykpIHsKLQkJbmljX2FjdGl2ZSA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX05JQ19NVUxUSUNBU1RfQUxMKTsKLQkJbmljX2FjdGl2ZSB8PSBuaWNfYWN0aXZlX2JpdDsKLQkJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX05JQ19NVUxUSUNBU1RfQUxMLCBuaWNfYWN0aXZlKTsKLQkJbmljX2FjdGl2ZSA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX05JQ19VTklDQVNUX0FMTCk7Ci0JCW5pY19hY3RpdmUgJj0gfm5pY19hY3RpdmVfYml0OwotCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTklDX1VOSUNBU1RfQUxMLCBuaWNfYWN0aXZlKTsKKwkJc2V0X2FsbG11bHRpKG5lc2RldiwgbmljX2FjdGl2ZV9iaXQpOwogCQltY19hbGxfb24gPSAxOwogCX0gZWxzZSB7CiAJCW5pY19hY3RpdmUgPSBuZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9OSUNfTVVMVElDQVNUX0FMTCk7CkBAIC04NjIsMTkgKzg3MSwzMCBAQAogCX0KIAogCW5lc19kZWJ1ZyhORVNfREJHX05JQ19SWCwgIk51bWJlciBvZiBNQyBlbnRyaWVzID0gJWQsIFByb21pc2NvdXMgPSAlZCwgQWxsIE11bHRpY2FzdCA9ICVkLlxuIiwKLQkJICBuZXRkZXYtPm1jX2NvdW50LCAhIShuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpLAorCQkgIG1jX2NvdW50LCAhIShuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpLAogCQkgICEhKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKTsKIAlpZiAoIW1jX2FsbF9vbikgewotCQltdWx0aWNhc3RfYWRkciA9IG5ldGRldi0+bWNfbGlzdDsKKwkJY2hhciAqYWRkcnM7CisJCWludCBpOworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jYWRkcjsKKworCQlhZGRycyA9IGttYWxsb2MoRVRIX0FMRU4gKiBtY19jb3VudCwgR0ZQX0FUT01JQyk7CisJCWlmICghYWRkcnMpIHsKKwkJCXNldF9hbGxtdWx0aShuZXNkZXYsIG5pY19hY3RpdmVfYml0KTsKKwkJCWdvdG8gdW5sb2NrOworCQl9CisJCWkgPSAwOworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2FkZHIsIG5ldGRldikKKwkJCW1lbWNweShnZXRfYWRkcihhZGRycywgaSsrKSwKKwkJCSAgICAgICBtY2FkZHItPmRtaV9hZGRyLCBFVEhfQUxFTik7CisKIAkJcGVyZmVjdF9maWx0ZXJfcmVnaXN0ZXJfYWRkcmVzcyA9IE5FU19JRFhfUEVSRkVDVF9GSUxURVJfTE9XICsKIAkJCQkJCXBmdF9lbnRyaWVzX3ByZWFsbG9jYXRlZCAqIDB4ODsKLQkJZm9yIChtY19pbmRleCA9IDA7IG1jX2luZGV4IDwgbWF4X3BmdF9lbnRyaWVzX2F2YWlhYmxlOwotCQltY19pbmRleCsrKSB7Ci0JCQl3aGlsZSAobXVsdGljYXN0X2FkZHIgJiYgbmVzdm5pYy0+bWNycV9tY2FzdF9maWx0ZXIgJiYKKwkJZm9yIChpID0gMCwgbWNfaW5kZXggPSAwOyBtY19pbmRleCA8IG1heF9wZnRfZW50cmllc19hdmFpYWJsZTsKKwkJICAgICBtY19pbmRleCsrKSB7CisJCQl3aGlsZSAoaSA8IG1jX2NvdW50ICYmIG5lc3ZuaWMtPm1jcnFfbWNhc3RfZmlsdGVyICYmCiAJCQkoKG1jX25pY19pbmRleCA9IG5lc3ZuaWMtPm1jcnFfbWNhc3RfZmlsdGVyKG5lc3ZuaWMsCi0JCQkJCW11bHRpY2FzdF9hZGRyLT5kbWlfYWRkcikpID09IDApKSB7Ci0JCQkJbXVsdGljYXN0X2FkZHIgPSBtdWx0aWNhc3RfYWRkci0+bmV4dDsKLQkJCX0KKwkJCQkJZ2V0X2FkZHIoYWRkcnMsIGkrKykpKSA9PSAwKSk7CiAJCQlpZiAobWNfbmljX2luZGV4IDwgMCkKIAkJCQltY19uaWNfaW5kZXggPSBuZXN2bmljLT5uaWNfaW5kZXg7CiAJCQl3aGlsZSAobmVzYWRhcHRlci0+cGZ0X21jYXN0X21hcFttY19pbmRleF0gPCAxNiAmJgpAQCAtODkwLDE3ICs5MTAsMTkgQEAKIAkJCX0KIAkJCWlmIChtY19pbmRleCA+PSBtYXhfcGZ0X2VudHJpZXNfYXZhaWFibGUpCiAJCQkJYnJlYWs7Ci0JCQlpZiAobXVsdGljYXN0X2FkZHIpIHsKKwkJCWlmIChpIDwgbWNfY291bnQpIHsKKwkJCQljaGFyICphZGRyID0gZ2V0X2FkZHIoYWRkcnMsIGkrKyk7CisKIAkJCQluZXNfZGVidWcoTkVTX0RCR19OSUNfUlgsICJBc3NpZ25pbmcgTUMgQWRkcmVzcyAlcE0gdG8gcmVnaXN0ZXIgMHglMDRYIG5pY19pZHg9JWRcbiIsCi0JCQkJCSAgbXVsdGljYXN0X2FkZHItPmRtaV9hZGRyLAorCQkJCQkgIGFkZHIsCiAJCQkJCSAgcGVyZmVjdF9maWx0ZXJfcmVnaXN0ZXJfYWRkcmVzcysobWNfaW5kZXggKiA4KSwKIAkJCQkJICBtY19uaWNfaW5kZXgpOwotCQkJCW1hY2FkZHJfaGlnaCAgPSAoKHUxNiltdWx0aWNhc3RfYWRkci0+ZG1pX2FkZHJbMF0pIDw8IDg7Ci0JCQkJbWFjYWRkcl9oaWdoICs9ICh1MTYpbXVsdGljYXN0X2FkZHItPmRtaV9hZGRyWzFdOwotCQkJCW1hY2FkZHJfbG93ICAgPSAoKHUzMiltdWx0aWNhc3RfYWRkci0+ZG1pX2FkZHJbMl0pIDw8IDI0OwotCQkJCW1hY2FkZHJfbG93ICArPSAoKHUzMiltdWx0aWNhc3RfYWRkci0+ZG1pX2FkZHJbM10pIDw8IDE2OwotCQkJCW1hY2FkZHJfbG93ICArPSAoKHUzMiltdWx0aWNhc3RfYWRkci0+ZG1pX2FkZHJbNF0pIDw8IDg7Ci0JCQkJbWFjYWRkcl9sb3cgICs9ICh1MzIpbXVsdGljYXN0X2FkZHItPmRtaV9hZGRyWzVdOworCQkJCW1hY2FkZHJfaGlnaCAgPSAoKHUxNikgYWRkclswXSkgPDwgODsKKwkJCQltYWNhZGRyX2hpZ2ggKz0gKHUxNikgYWRkclsxXTsKKwkJCQltYWNhZGRyX2xvdyAgID0gKCh1MzIpIGFkZHJbMl0pIDw8IDI0OworCQkJCW1hY2FkZHJfbG93ICArPSAoKHUzMikgYWRkclszXSkgPDwgMTY7CisJCQkJbWFjYWRkcl9sb3cgICs9ICgodTMyKSBhZGRyWzRdKSA8PCA4OworCQkJCW1hY2FkZHJfbG93ICArPSAodTMyKSBhZGRyWzVdOwogCQkJCW5lc193cml0ZV9pbmRleGVkKG5lc2RldiwKIAkJCQkJCXBlcmZlY3RfZmlsdGVyX3JlZ2lzdGVyX2FkZHJlc3MrKG1jX2luZGV4ICogOCksCiAJCQkJCQltYWNhZGRyX2xvdyk7CkBAIC05MDgsNyArOTMwLDYgQEAKIAkJCQkJCXBlcmZlY3RfZmlsdGVyX3JlZ2lzdGVyX2FkZHJlc3MrNCsobWNfaW5kZXggKiA4KSwKIAkJCQkJCSh1MzIpbWFjYWRkcl9oaWdoIHwgTkVTX01BQ19BRERSX1ZBTElEIHwKIAkJCQkJCSgoKCh1MzIpKDE8PG1jX25pY19pbmRleCkpIDw8IDE2KSkpOwotCQkJCW11bHRpY2FzdF9hZGRyID0gbXVsdGljYXN0X2FkZHItPm5leHQ7CiAJCQkJbmVzYWRhcHRlci0+cGZ0X21jYXN0X21hcFttY19pbmRleF0gPQogCQkJCQkJCW5lc3ZuaWMtPm5pY19pbmRleDsKIAkJCX0gZWxzZSB7CkBAIC05MjAsMjEgKzk0MSwxMyBAQAogCQkJCW5lc2FkYXB0ZXItPnBmdF9tY2FzdF9tYXBbbWNfaW5kZXhdID0gMjU1OwogCQkJfQogCQl9CisJCWtmcmVlKGFkZHJzKTsKIAkJLyogUEZUIGlzIG5vdCBsYXJnZSBlbm91Z2ggKi8KLQkJaWYgKG11bHRpY2FzdF9hZGRyICYmIG11bHRpY2FzdF9hZGRyLT5uZXh0KSB7Ci0JCQluaWNfYWN0aXZlID0gbmVzX3JlYWRfaW5kZXhlZChuZXNkZXYsCi0JCQkJCQlORVNfSURYX05JQ19NVUxUSUNBU1RfQUxMKTsKLQkJCW5pY19hY3RpdmUgfD0gbmljX2FjdGl2ZV9iaXQ7Ci0JCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTklDX01VTFRJQ0FTVF9BTEwsCi0JCQkJCQkJCW5pY19hY3RpdmUpOwotCQkJbmljX2FjdGl2ZSA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LAotCQkJCQkJTkVTX0lEWF9OSUNfVU5JQ0FTVF9BTEwpOwotCQkJbmljX2FjdGl2ZSAmPSB+bmljX2FjdGl2ZV9iaXQ7Ci0JCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTklDX1VOSUNBU1RfQUxMLAotCQkJCQkJCQluaWNfYWN0aXZlKTsKLQkJfQorCQlpZiAoaSA8IG1jX2NvdW50KQorCQkJc2V0X2FsbG11bHRpKG5lc2RldiwgbmljX2FjdGl2ZV9iaXQpOwogCX0KIAordW5sb2NrOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5lc2FkYXB0ZXItPnJlc291cmNlX2xvY2ssIGZsYWdzKTsKIH0KIApAQCAtMTIzMCw4ICsxMjQzLDggQEAKIAl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9wYWNrZXRzX3JlY2VpdmVkOwogCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX3BhY2tldHNfZHJvcHBlZDsKIAl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBjbV9wYWNrZXRzX3JldHJhbnM7Ci0JdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fbGlzdGVuc19jcmVhdGVkOwotCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGNtX2xpc3RlbnNfZGVzdHJveWVkOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9saXN0ZW5zX2NyZWF0ZWQpOworCXRhcmdldF9zdGF0X3ZhbHVlc1srK2luZGV4XSA9IGF0b21pY19yZWFkKCZjbV9saXN0ZW5zX2Rlc3Ryb3llZCk7CiAJdGFyZ2V0X3N0YXRfdmFsdWVzWysraW5kZXhdID0gY21fYmFja2xvZ19kcm9wczsKIAl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fbG9vcGJhY2tzKTsKIAl0YXJnZXRfc3RhdF92YWx1ZXNbKytpbmRleF0gPSBhdG9taWNfcmVhZCgmY21fbm9kZXNfY3JlYXRlZCk7CkBAIC0xNDYxLDkgKzE0NzQsOSBAQAogCQl9CiAJCXJldHVybiAwOwogCX0KLQlpZiAoKHBoeV90eXBlID09IE5FU19QSFlfVFlQRV9JUklTKSB8fAotCSAgICAocGh5X3R5cGUgPT0gTkVTX1BIWV9UWVBFX0FSR1VTKSB8fAotCSAgICAocGh5X3R5cGUgPT0gTkVTX1BIWV9UWVBFX1NGUF9EKSkgeworCWlmICgocGh5X3R5cGUgPT0gTkVTX1BIWV9UWVBFX0FSR1VTKSB8fAorCSAgICAocGh5X3R5cGUgPT0gTkVTX1BIWV9UWVBFX1NGUF9EKSB8fAorCSAgICAocGh5X3R5cGUgPT0gTkVTX1BIWV9UWVBFX0tSKSkgewogCQlldF9jbWQtPnRyYW5zY2VpdmVyID0gWENWUl9FWFRFUk5BTDsKIAkJZXRfY21kLT5wb3J0ICAgICAgICA9IFBPUlRfRklCUkU7CiAJCWV0X2NtZC0+c3VwcG9ydGVkICAgPSBTVVBQT1JURURfRklCUkU7CkBAIC0xNTgzLDggKzE1OTYsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJc3RydWN0IG5pY19xcF9tYXAgKmN1cnJfcXBfbWFwOwogCXUzMiB1MzJ0ZW1wOwotCXUxNiBwaHlfZGF0YTsKLQl1MTYgdGVtcF9waHlfZGF0YTsKKwl1OCBwaHlfdHlwZSA9IG5lc2Rldi0+bmVzYWRhcHRlci0+cGh5X3R5cGVbbmVzZGV2LT5tYWNfaW5kZXhdOwogCiAJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBuZXNfdm5pYykpOwogCWlmICghbmV0ZGV2KSB7CkBAIC0xNjkyLDY1ICsxNzA0LDIzIEBACiAKIAlpZiAoKG5lc2Rldi0+bmV0ZGV2X2NvdW50ID09IDApICYmCiAJICAgICgoUENJX0ZVTkMobmVzZGV2LT5wY2lkZXYtPmRldmZuKSA9PSBuZXNkZXYtPm1hY19pbmRleCkgfHwKLQkgICAgICgobmVzZGV2LT5uZXNhZGFwdGVyLT5waHlfdHlwZVtuZXNkZXYtPm1hY19pbmRleF0gPT0gTkVTX1BIWV9UWVBFX1BVTUFfMUcpICYmCisJICAgICAoKHBoeV90eXBlID09IE5FU19QSFlfVFlQRV9QVU1BXzFHKSAmJgogCSAgICAgICgoKFBDSV9GVU5DKG5lc2Rldi0+cGNpZGV2LT5kZXZmbikgPT0gMSkgJiYgKG5lc2Rldi0+bWFjX2luZGV4ID09IDIpKSB8fAogCSAgICAgICAoKFBDSV9GVU5DKG5lc2Rldi0+cGNpZGV2LT5kZXZmbikgPT0gMikgJiYgKG5lc2Rldi0+bWFjX2luZGV4ID09IDEpKSkpKSkgewotCQkvKgotCQkgKiBuZXNfZGVidWcoTkVTX0RCR19JTklULCAiU2V0dGluZyB1cCBQSFkgaW50ZXJydXB0IG1hc2suIFVzaW5nIHJlZ2lzdGVyIGluZGV4IDB4JTA0WFxuIiwKLQkJICoJCU5FU19JRFhfUEhZX1BDU19DT05UUk9MX1NUQVRVUzAgKyAoMHgyMDAgKiAobmVzdm5pYy0+bG9naWNhbF9wb3J0ICYgMSkpKTsKLQkJICovCiAJCXUzMnRlbXAgPSBuZXNfcmVhZF9pbmRleGVkKG5lc2RldiwgTkVTX0lEWF9QSFlfUENTX0NPTlRST0xfU1RBVFVTMCArCiAJCQkJKDB4MjAwICogKG5lc2Rldi0+bWFjX2luZGV4ICYgMSkpKTsKLQkJaWYgKG5lc2Rldi0+bmVzYWRhcHRlci0+cGh5X3R5cGVbbmVzZGV2LT5tYWNfaW5kZXhdICE9IE5FU19QSFlfVFlQRV9QVU1BXzFHKSB7CisJCWlmIChwaHlfdHlwZSAhPSBORVNfUEhZX1RZUEVfUFVNQV8xRykgewogCQkJdTMydGVtcCB8PSAweDAwMjAwMDAwOwogCQkJbmVzX3dyaXRlX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX1BIWV9QQ1NfQ09OVFJPTF9TVEFUVVMwICsKIAkJCQkoMHgyMDAgKiAobmVzZGV2LT5tYWNfaW5kZXggJiAxKSksIHUzMnRlbXApOwogCQl9CiAKLQkJdTMydGVtcCA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX1BIWV9QQ1NfQ09OVFJPTF9TVEFUVVMwICsKLQkJCQkoMHgyMDAgKiAobmVzZGV2LT5tYWNfaW5kZXggJiAxKSkpOwotCi0JCWlmICgodTMydGVtcCYweDBmMWYwMDAwKSA9PSAweDBmMGYwMDAwKSB7Ci0JCQlpZiAobmVzZGV2LT5uZXNhZGFwdGVyLT5waHlfdHlwZVtuZXNkZXYtPm1hY19pbmRleF0gPT0gTkVTX1BIWV9UWVBFX0lSSVMpIHsKLQkJCQluZXNfaW5pdF9waHkobmVzZGV2KTsKLQkJCQluZXNfcmVhZF8xMEdfcGh5X3JlZyhuZXNkZXYsIG5lc2Rldi0+bmVzYWRhcHRlci0+cGh5X2luZGV4W25lc2Rldi0+bWFjX2luZGV4XSwgMSwgMSk7Ci0JCQkJdGVtcF9waHlfZGF0YSA9ICh1MTYpbmVzX3JlYWRfaW5kZXhlZChuZXNkZXYsCi0JCQkJCQkJCQlORVNfSURYX01BQ19NRElPX0NPTlRST0wpOwotCQkJCXUzMnRlbXAgPSAyMDsKLQkJCQlkbyB7Ci0JCQkJCW5lc19yZWFkXzEwR19waHlfcmVnKG5lc2RldiwgbmVzZGV2LT5uZXNhZGFwdGVyLT5waHlfaW5kZXhbbmVzZGV2LT5tYWNfaW5kZXhdLCAxLCAxKTsKLQkJCQkJcGh5X2RhdGEgPSAodTE2KW5lc19yZWFkX2luZGV4ZWQobmVzZGV2LAotCQkJCQkJCQkJTkVTX0lEWF9NQUNfTURJT19DT05UUk9MKTsKLQkJCQkJaWYgKChwaHlfZGF0YSA9PSB0ZW1wX3BoeV9kYXRhKSB8fCAoISgtLXUzMnRlbXApKSkKLQkJCQkJCWJyZWFrOwotCQkJCQl0ZW1wX3BoeV9kYXRhID0gcGh5X2RhdGE7Ci0JCQkJfSB3aGlsZSAoMSk7Ci0JCQkJaWYgKHBoeV9kYXRhICYgNCkgewotCQkJCQluZXNfZGVidWcoTkVTX0RCR19JTklULCAiVGhlIExpbmsgaXMgVVAhIS5cbiIpOwotCQkJCQluZXN2bmljLT5saW5rdXAgPSAxOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW5lc19kZWJ1ZyhORVNfREJHX0lOSVQsICJUaGUgTGluayBpcyBET1dOISEuXG4iKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCW5lc19kZWJ1ZyhORVNfREJHX0lOSVQsICJUaGUgTGluayBpcyBVUCEhLlxuIik7Ci0JCQkJbmVzdm5pYy0+bGlua3VwID0gMTsKLQkJCX0KLQkJfSBlbHNlIGlmIChuZXNkZXYtPm5lc2FkYXB0ZXItPnBoeV90eXBlW25lc2Rldi0+bWFjX2luZGV4XSA9PSBORVNfUEhZX1RZUEVfUFVNQV8xRykgewotCQkJbmVzX2RlYnVnKE5FU19EQkdfSU5JVCwgIm1hY19pbmRleD0lZCwgbG9naWNhbF9wb3J0PSVkLCB1MzJ0ZW1wPTB4JTA0WCwgUENJX0ZVTkM9JWRcbiIsCi0JCQkJbmVzZGV2LT5tYWNfaW5kZXgsIG5lc3ZuaWMtPmxvZ2ljYWxfcG9ydCwgdTMydGVtcCwgUENJX0ZVTkMobmVzZGV2LT5wY2lkZXYtPmRldmZuKSk7Ci0JCQlpZiAoKChuZXNkZXYtPm1hY19pbmRleCA8IDIpICYmICgodTMydGVtcCYweDAxMDEwMDAwKSA9PSAweDAxMDEwMDAwKSkgfHwKLQkJCSAgICAoKG5lc2Rldi0+bWFjX2luZGV4ID4gMSkgJiYgKCh1MzJ0ZW1wJjB4MDIwMjAwMDApID09IDB4MDIwMjAwMDApKSkgIHsKLQkJCQluZXNfZGVidWcoTkVTX0RCR19JTklULCAiVGhlIExpbmsgaXMgVVAhIS5cbiIpOwotCQkJCW5lc3ZuaWMtPmxpbmt1cCA9IDE7Ci0JCQl9Ci0JCX0KIAkJLyogY2xlYXIgdGhlIE1BQyBpbnRlcnJ1cHQgc3RhdHVzLCBhc3N1bWVzIGRpcmVjdCBsb2dpY2FsIHRvIHBoeXNpY2FsIG1hcHBpbmcgKi8KIAkJdTMydGVtcCA9IG5lc19yZWFkX2luZGV4ZWQobmVzZGV2LCBORVNfSURYX01BQ19JTlRfU1RBVFVTICsgKDB4MjAwICogbmVzZGV2LT5tYWNfaW5kZXgpKTsKIAkJbmVzX2RlYnVnKE5FU19EQkdfSU5JVCwgIlBoeSBpbnRlcnJ1cHQgc3RhdHVzID0gMHglWC5cbiIsIHUzMnRlbXApOwogCQluZXNfd3JpdGVfaW5kZXhlZChuZXNkZXYsIE5FU19JRFhfTUFDX0lOVF9TVEFUVVMgKyAoMHgyMDAgKiBuZXNkZXYtPm1hY19pbmRleCksIHUzMnRlbXApOwogCi0JCWlmIChuZXNkZXYtPm5lc2FkYXB0ZXItPnBoeV90eXBlW25lc2Rldi0+bWFjX2luZGV4XSAhPSBORVNfUEhZX1RZUEVfSVJJUykKLQkJCW5lc19pbml0X3BoeShuZXNkZXYpOworCQluZXNfaW5pdF9waHkobmVzZGV2KTsKIAogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9uZXMvbmVzX3ZlcmJzLmMKaW5kZXggNjRkMzEzNi4uODE1NzI1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L25lcy9uZXNfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbmVzL25lc192ZXJicy5jCkBAIC0yMjgsNyArMjI4LDcgQEAKIAkvKiBDaGVjayBmb3IgU1Egb3ZlcmZsb3cgKi8KIAlpZiAoKChoZWFkICsgKDIgKiBxc2l6ZSkgLSBuZXNxcC0+aHdxcC5zcV90YWlsKSAlIHFzaXplKSA9PSAocXNpemUgLSAxKSkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZuZXNxcC0+bG9jaywgZmxhZ3MpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJd3FlID0gJm5lc3FwLT5od3FwLnNxX3ZiYXNlW2hlYWRdOwpAQCAtMzI5NCw3ICszMjk0LDcgQEAKIAogCQkvKiBDaGVjayBmb3IgU1Egb3ZlcmZsb3cgKi8KIAkJaWYgKCgoaGVhZCArICgyICogcXNpemUpIC0gbmVzcXAtPmh3cXAuc3FfdGFpbCkgJSBxc2l6ZSkgPT0gKHFzaXplIC0gMSkpIHsKLQkJCWVyciA9IC1FSU5WQUw7CisJCQllcnIgPSAtRU5PTUVNOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMzU3Nyw3ICszNTc3LDcgQEAKIAkJfQogCQkvKiBDaGVjayBmb3IgUlEgb3ZlcmZsb3cgKi8KIAkJaWYgKCgoaGVhZCArICgyICogcXNpemUpIC0gbmVzcXAtPmh3cXAucnFfdGFpbCkgJSBxc2l6ZSkgPT0gKHFzaXplIC0gMSkpIHsKLQkJCWVyciA9IC1FSU5WQUw7CisJCQllcnIgPSAtRU5PTUVNOwogCQkJYnJlYWs7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9jbS5jCmluZGV4IDMwYmRmNDIuLjgzYTc3NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfY20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2NtLmMKQEAgLTEzNzQsNyArMTM3NCw3IEBACiAJCQlpY21wX3NlbmQoc2tiLCBJQ01QX0RFU1RfVU5SRUFDSCwgSUNNUF9GUkFHX05FRURFRCwgaHRvbmwobXR1KSk7CiAjaWYgZGVmaW5lZChDT05GSUdfSVBWNikgfHwgZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpCiAJCWVsc2UgaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVBWNikpCi0JCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUsIHByaXYtPmRldik7CisJCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUpOwogI2VuZGlmCiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZXRodG9vbC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9ldGh0b29sLmMKaW5kZXggZTk3OTVmNi4uZDEwYjRlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9ldGh0b29sLmMKQEAgLTU1LDkgKzU1LDcgQEAKIAlzdHJ1Y3QgaXBvaWJfZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJY29hbC0+cnhfY29hbGVzY2VfdXNlY3MgPSBwcml2LT5ldGh0b29sLmNvYWxlc2NlX3VzZWNzOwotCWNvYWwtPnR4X2NvYWxlc2NlX3VzZWNzID0gcHJpdi0+ZXRodG9vbC5jb2FsZXNjZV91c2VjczsKIAljb2FsLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9IHByaXYtPmV0aHRvb2wubWF4X2NvYWxlc2NlZF9mcmFtZXM7Ci0JY29hbC0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPSBwcml2LT5ldGh0b29sLm1heF9jb2FsZXNjZWRfZnJhbWVzOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02OSwxMCArNjcsOCBAQAogCWludCByZXQ7CiAKIAkvKgotCSAqIFNpbmNlIElQb0lCIHVzZXMgYSBzaW5nbGUgQ1EgZm9yIGJvdGggcnggYW5kIHR4LCB3ZSBhc3N1bWUKLQkgKiB0aGF0IHJ4IHBhcmFtcyBkaWN0YXRlIHRoZSBjb25maWd1cmF0aW9uLiAgVGhlc2UgdmFsdWVzIGFyZQotCSAqIHNhdmVkIGluIHRoZSBwcml2YXRlIGRhdGEgYW5kIHJldHVybmVkIHdoZW4gaXBvaWJfZ2V0X2NvYWxlc2NlKCkKLQkgKiBpcyBjYWxsZWQuCisJICogVGhlc2UgdmFsdWVzIGFyZSBzYXZlZCBpbiB0aGUgcHJpdmF0ZSBkYXRhIGFuZCByZXR1cm5lZAorCSAqIHdoZW4gaXBvaWJfZ2V0X2NvYWxlc2NlKCkgaXMgY2FsbGVkCiAJICovCiAJaWYgKGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzICAgICAgID4gMHhmZmZmIHx8CiAJICAgIGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID4gMHhmZmZmKQpAQCAtODUsOCArODEsNiBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWNvYWwtPnR4X2NvYWxlc2NlX3VzZWNzICAgICAgID0gY29hbC0+cnhfY29hbGVzY2VfdXNlY3M7Ci0JY29hbC0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPSBjb2FsLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lczsKIAlwcml2LT5ldGh0b29sLmNvYWxlc2NlX3VzZWNzICAgICAgID0gY29hbC0+cnhfY29hbGVzY2VfdXNlY3M7CiAJcHJpdi0+ZXRodG9vbC5tYXhfY29hbGVzY2VkX2ZyYW1lcyA9IGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9tdWx0aWNhc3QuYwppbmRleCA4NzYzYzFlLi5kNDFlYTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX211bHRpY2FzdC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfbXVsdGljYXN0LmMKQEAgLTgxMSw3ICs4MTEsNyBAQAogCQljbGVhcl9iaXQoSVBPSUJfTUNBU1RfRkxBR19GT1VORCwgJm1jYXN0LT5mbGFncyk7CiAKIAkvKiBNYXJrIGFsbCBvZiB0aGUgZW50cmllcyB0aGF0IGFyZSBmb3VuZCBvciBkb24ndCBleGlzdCAqLwotCWZvciAobWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3Q7IG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCXVuaW9uIGliX2dpZCBtZ2lkOwogCiAJCWlmICghaXBvaWJfbWNhc3RfYWRkcl9pc192YWxpZChtY2xpc3QtPmRtaV9hZGRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKaW5kZXggNWY3YTZmYy4uNzEyMzdmOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYwpAQCAtMTI4LDYgKzEyOCwyOCBAQAogCXJldHVybiAwOwogfQogCitpbnQgaXNlcl9pbml0aWFsaXplX3Rhc2tfaGVhZGVycyhzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaywKKwkJCQkJCXN0cnVjdCBpc2VyX3R4X2Rlc2MgKnR4X2Rlc2MpCit7CisJc3RydWN0IGlzY3NpX2lzZXJfY29ubiAqaXNlcl9jb25uID0gdGFzay0+Y29ubi0+ZGRfZGF0YTsKKwlzdHJ1Y3QgaXNlcl9kZXZpY2UgICAgICpkZXZpY2UgICAgPSBpc2VyX2Nvbm4tPmliX2Nvbm4tPmRldmljZTsKKwlzdHJ1Y3QgaXNjc2lfaXNlcl90YXNrICppc2VyX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOworCXU2NCBkbWFfYWRkcjsKKworCWRtYV9hZGRyID0gaWJfZG1hX21hcF9zaW5nbGUoZGV2aWNlLT5pYl9kZXZpY2UsICh2b2lkICopdHhfZGVzYywKKwkJCQlJU0VSX0hFQURFUlNfTEVOLCBETUFfVE9fREVWSUNFKTsKKwlpZiAoaWJfZG1hX21hcHBpbmdfZXJyb3IoZGV2aWNlLT5pYl9kZXZpY2UsIGRtYV9hZGRyKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0eF9kZXNjLT5kbWFfYWRkciA9IGRtYV9hZGRyOworCXR4X2Rlc2MtPnR4X3NnWzBdLmFkZHIgICA9IHR4X2Rlc2MtPmRtYV9hZGRyOworCXR4X2Rlc2MtPnR4X3NnWzBdLmxlbmd0aCA9IElTRVJfSEVBREVSU19MRU47CisJdHhfZGVzYy0+dHhfc2dbMF0ubGtleSAgID0gZGV2aWNlLT5tci0+bGtleTsKKworCWlzZXJfdGFzay0+aGVhZGVyc19pbml0aWFsaXplZAk9IDE7CisJaXNlcl90YXNrLT5pc2VyX2Nvbm4JCT0gaXNlcl9jb25uOworCXJldHVybiAwOworfQogLyoqCiAgKiBpc2NzaV9pc2VyX3Rhc2tfaW5pdCAtIEluaXRpYWxpemUgdGFzawogICogQHRhc2s6IGlzY3NpIHRhc2sKQEAgLTEzNywxNyArMTU5LDE3IEBACiBzdGF0aWMgaW50CiBpc2NzaV9pc2VyX3Rhc2tfaW5pdChzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzaykKIHsKLQlzdHJ1Y3QgaXNjc2lfaXNlcl9jb25uICppc2VyX2Nvbm4gID0gdGFzay0+Y29ubi0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaXNjc2lfaXNlcl90YXNrICppc2VyX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOwogCisJaWYgKCFpc2VyX3Rhc2stPmhlYWRlcnNfaW5pdGlhbGl6ZWQpCisJCWlmIChpc2VyX2luaXRpYWxpemVfdGFza19oZWFkZXJzKHRhc2ssICZpc2VyX3Rhc2stPmRlc2MpKQorCQkJcmV0dXJuIC1FTk9NRU07CisKIAkvKiBtZ210IHRhc2sgKi8KLQlpZiAoIXRhc2stPnNjKSB7Ci0JCWlzZXJfdGFzay0+ZGVzYy5kYXRhID0gdGFzay0+ZGF0YTsKKwlpZiAoIXRhc2stPnNjKQogCQlyZXR1cm4gMDsKLQl9CiAKIAlpc2VyX3Rhc2stPmNvbW1hbmRfc2VudCA9IDA7Ci0JaXNlcl90YXNrLT5pc2VyX2Nvbm4gICAgPSBpc2VyX2Nvbm47CiAJaXNlcl90YXNrX3JkbWFfaW5pdChpc2VyX3Rhc2spOwogCXJldHVybiAwOwogfQpAQCAtMTY4LDcgKzE5MCw3IEBACiB7CiAJaW50IGVycm9yID0gMDsKIAotCWlzZXJfZGJnKCJ0YXNrIGRlcSBbY2lkICVkIGl0dCAweCV4XVxuIiwgY29ubi0+aWQsIHRhc2stPml0dCk7CisJaXNlcl9kYmcoIm10YXNrIHhtaXQgW2NpZCAlZCBpdHQgMHgleF1cbiIsIGNvbm4tPmlkLCB0YXNrLT5pdHQpOwogCiAJZXJyb3IgPSBpc2VyX3NlbmRfY29udHJvbChjb25uLCB0YXNrKTsKIApAQCAtMTc4LDkgKzIwMCw2IEBACiAJICogLSBpZiB5ZXMsIHRoZSB0YXNrIGlzIHJlY3ljbGVkIGF0IGlzY3NpX2NvbXBsZXRlX3BkdQogCSAqIC0gaWYgbm8sICB0aGUgdGFzayBpcyByZWN5Y2xlZCBhdCBpc2VyX3NuZF9jb21wbGV0aW9uCiAJICovCi0JaWYgKGVycm9yICYmIGVycm9yICE9IC1FTk9CVUZTKQotCQlpc2NzaV9jb25uX2ZhaWx1cmUoY29ubiwgSVNDU0lfRVJSX0NPTk5fRkFJTEVEKTsKLQogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMjMyLDcgKzI1MSw3IEBACiAJCQkgICB0YXNrLT5pbW1fY291bnQsIHRhc2stPnVuc29sX3IydC5kYXRhX2xlbmd0aCk7CiAJfQogCi0JaXNlcl9kYmcoInRhc2sgZGVxIFtjaWQgJWQgaXR0IDB4JXhdXG4iLAorCWlzZXJfZGJnKCJjdGFzayB4bWl0IFtjaWQgJWQgaXR0IDB4JXhdXG4iLAogCQkgICBjb25uLT5pZCwgdGFzay0+aXR0KTsKIAogCS8qIFNlbmQgdGhlIGNtZCBQRFUgKi8KQEAgLTI0OCw4ICsyNjcsNiBAQAogCQllcnJvciA9IGlzY3NpX2lzZXJfdGFza194bWl0X3Vuc29sX2RhdGEoY29ubiwgdGFzayk7CiAKICBpc2NzaV9pc2VyX3Rhc2tfeG1pdF9leGl0OgotCWlmIChlcnJvciAmJiBlcnJvciAhPSAtRU5PQlVGUykKLQkJaXNjc2lfY29ubl9mYWlsdXJlKGNvbm4sIElTQ1NJX0VSUl9DT05OX0ZBSUxFRCk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0yODMsNyArMzAwLDcgQEAKIAkgKiBkdWUgdG8gaXNzdWVzIHdpdGggdGhlIGxvZ2luIGNvZGUgcmUgaXNlciBzZW1hdGljcwogCSAqIHRoaXMgbm90IHNldCBpbiBpc2NzaV9jb25uX3NldHVwIC0gRklYTUUKIAkgKi8KLQljb25uLT5tYXhfcmVjdl9kbGVuZ3RoID0gMTI4OworCWNvbm4tPm1heF9yZWN2X2RsZW5ndGggPSBJU0VSX1JFQ1ZfREFUQV9TRUdfTEVOOwogCiAJaXNlcl9jb25uID0gY29ubi0+ZGRfZGF0YTsKIAljb25uLT5kZF9kYXRhID0gaXNlcl9jb25uOwpAQCAtNDAxLDcgKzQxOCw3IEBACiAJc3RydWN0IFNjc2lfSG9zdCAqc2hvc3Q7CiAJc3RydWN0IGlzZXJfY29ubiAqaWJfY29ubjsKIAotCXNob3N0ID0gaXNjc2lfaG9zdF9hbGxvYygmaXNjc2lfaXNlcl9zaHQsIDAsIDEpOworCXNob3N0ID0gaXNjc2lfaG9zdF9hbGxvYygmaXNjc2lfaXNlcl9zaHQsIDAsIDApOwogCWlmICghc2hvc3QpCiAJCXJldHVybiBOVUxMOwogCXNob3N0LT50cmFuc3BvcnR0ID0gaXNjc2lfaXNlcl9zY3NpX3RyYW5zcG9ydDsKQEAgLTY3NSw3ICs2OTIsNyBAQAogCW1lbXNldCgmaWcsIDAsIHNpemVvZihzdHJ1Y3QgaXNlcl9nbG9iYWwpKTsKIAogCWlnLmRlc2NfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiaXNlcl9kZXNjcmlwdG9ycyIsCi0JCQkJCSAgc2l6ZW9mIChzdHJ1Y3QgaXNlcl9kZXNjKSwKKwkJCQkJICBzaXplb2Yoc3RydWN0IGlzZXJfdHhfZGVzYyksCiAJCQkJCSAgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLAogCQkJCQkgIE5VTEwpOwogCWlmIChpZy5kZXNjX2NhY2hlID09IE5VTEwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5oIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuaAppbmRleCA5ZDUyOWNhLi4wMzY5MzRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmgKQEAgLTEwMiw5ICsxMDIsOSBAQAogI2RlZmluZSBJU0VSX01BWF9UWF9NSVNDX1BEVVMJCTYgLyogTk9PUF9PVVQoMiksIFRFWFQoMSksICAgICAgICAgKgogCQkJCQkgICAqIFNDU0lfVE1GVU5DKDIpLCBMT0dPVVQoMSkgKi8KIAotI2RlZmluZSBJU0VSX1FQX01BWF9SRUNWX0RUT1MJCShJU0NTSV9ERUZfWE1JVF9DTURTX01BWCArIFwKLQkJCQkJSVNFUl9NQVhfUlhfTUlTQ19QRFVTICAgICsgIFwKLQkJCQkJSVNFUl9NQVhfVFhfTUlTQ19QRFVTKQorI2RlZmluZSBJU0VSX1FQX01BWF9SRUNWX0RUT1MJCShJU0NTSV9ERUZfWE1JVF9DTURTX01BWCkKKworI2RlZmluZSBJU0VSX01JTl9QT1NURURfUlgJCShJU0NTSV9ERUZfWE1JVF9DTURTX01BWCA+PiAyKQogCiAvKiB0aGUgbWF4IFRYIChzZW5kKSBXUiBzdXBwb3J0ZWQgYnkgdGhlIGlTRVIgUVAgaXMgZGVmaW5lZCBieSAgICAgICAgICAgICAgICAgKgogICogbWF4X3NlbmRfd3IgPSBUICogKDEgKyBEKSArIEMgOyBEIGlzIGhvdyBtYW55IGluZmxpZ2h0IGRhdGFvdXRzIHdlIGV4cGVjdCAgICoKQEAgLTEzMiw2ICsxMzIsMTIgQEAKIAlfX2JlNjQgIHJlYWRfdmE7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCisvKiBDb25zdGFudCBQRFUgbGVuZ3RocyBjYWxjdWxhdGlvbnMgKi8KKyNkZWZpbmUgSVNFUl9IRUFERVJTX0xFTiAgKHNpemVvZihzdHJ1Y3QgaXNlcl9oZHIpICsgc2l6ZW9mKHN0cnVjdCBpc2NzaV9oZHIpKQorCisjZGVmaW5lIElTRVJfUkVDVl9EQVRBX1NFR19MRU4JMTI4CisjZGVmaW5lIElTRVJfUlhfUEFZTE9BRF9TSVpFCShJU0VSX0hFQURFUlNfTEVOICsgSVNFUl9SRUNWX0RBVEFfU0VHX0xFTikKKyNkZWZpbmUgSVNFUl9SWF9MT0dJTl9TSVpFCShJU0VSX0hFQURFUlNfTEVOICsgSVNDU0lfREVGX01BWF9SRUNWX1NFR19MRU4pCiAKIC8qIExlbmd0aCBvZiBhbiBvYmplY3QgbmFtZSBzdHJpbmcgKi8KICNkZWZpbmUgSVNFUl9PQkpFQ1RfTkFNRV9TSVpFCQkgICAgNjQKQEAgLTE4Nyw1MSArMTkzLDQzIEBACiAJc3RydWN0IGlzZXJfbWVtX3JlZyAgICAgcmVnOyAgICAgICAgLyogbWVtb3J5IHJlZ2lzdHJhdGlvbiBpbmZvICAgICAgICAqLwogCXZvaWQgICAgICAgICAgICAgICAgICAgICp2aXJ0X2FkZHI7CiAJc3RydWN0IGlzZXJfZGV2aWNlICAgICAgKmRldmljZTsgICAgLyogZGV2aWNlLT5kZXZpY2UgZm9yIGRtYV91bm1hcCAgICAqLwotCXU2NCAgICAgICAgICAgICAgICAgICAgIGRtYV9hZGRyOyAgIC8qIGlmIG5vbiB6ZXJvLCBhZGRyIGZvciBkbWFfdW5tYXAgKi8KIAllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb247ICAvKiBkaXJlY3Rpb24gZm9yIGRtYV91bm1hcAkgICAgICAgKi8KIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICBkYXRhX3NpemU7Ci0JYXRvbWljX3QgICAgICAgICAgICAgICAgcmVmX2NvdW50OyAgLyogcmVmY291bnQsIGZyZWVkIHdoZW4gZGVjIHRvIDAgICAqLwotfTsKLQotI2RlZmluZSBNQVhfUkVHRF9CVUZfVkVDVE9SX0xFTgkyCi0KLXN0cnVjdCBpc2VyX2R0byB7Ci0Jc3RydWN0IGlzY3NpX2lzZXJfdGFzayAqdGFzazsKLQlzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uOwotCWludCAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmeV9lbmFibGU7Ci0KLQkvKiB2ZWN0b3Igb2YgcmVnaXN0ZXJlZCBidWZmZXJzICovCi0JdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgcmVnZF92ZWN0b3JfbGVuOwotCXN0cnVjdCBpc2VyX3JlZ2RfYnVmICAgICAgICpyZWdkW01BWF9SRUdEX0JVRl9WRUNUT1JfTEVOXTsKLQotCS8qIG9mZnNldCBpbnRvIHRoZSByZWdpc3RlcmVkIGJ1ZmZlciBtYXkgYmUgc3BlY2lmaWVkICovCi0JdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgb2Zmc2V0W01BWF9SRUdEX0JVRl9WRUNUT1JfTEVOXTsKLQotCS8qIGEgc21hbGxlciBzaXplIG1heSBiZSBzcGVjaWZpZWQsIGlmIDAsIHRoZW4gZnVsbCBzaXplIGlzIHVzZWQgKi8KLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICB1c2VkX3N6W01BWF9SRUdEX0JVRl9WRUNUT1JfTEVOXTsKIH07CiAKIGVudW0gaXNlcl9kZXNjX3R5cGUgewotCUlTQ1NJX1JYLAogCUlTQ1NJX1RYX0NPTlRST0wgLAogCUlTQ1NJX1RYX1NDU0lfQ09NTUFORCwKIAlJU0NTSV9UWF9EQVRBT1VUCiB9OwogCi1zdHJ1Y3QgaXNlcl9kZXNjIHsKK3N0cnVjdCBpc2VyX3R4X2Rlc2MgewogCXN0cnVjdCBpc2VyX2hkciAgICAgICAgICAgICAgaXNlcl9oZWFkZXI7CiAJc3RydWN0IGlzY3NpX2hkciAgICAgICAgICAgICBpc2NzaV9oZWFkZXI7Ci0Jc3RydWN0IGlzZXJfcmVnZF9idWYgICAgICAgICBoZHJfcmVnZF9idWY7Ci0Jdm9pZCAgICAgICAgICAgICAgICAgICAgICAgICAqZGF0YTsgICAgICAgICAvKiB1c2VkIGJ5IFJYICYgVFhfQ09OVFJPTCAqLwotCXN0cnVjdCBpc2VyX3JlZ2RfYnVmICAgICAgICAgZGF0YV9yZWdkX2J1ZjsgLyogdXNlZCBieSBSWCAmIFRYX0NPTlRST0wgKi8KIAllbnVtICAgaXNlcl9kZXNjX3R5cGUgICAgICAgIHR5cGU7Ci0Jc3RydWN0IGlzZXJfZHRvICAgICAgICAgICAgICBkdG87CisJdTY0CQkgICAgICAgICAgICAgZG1hX2FkZHI7CisJLyogc2dbMF0gcG9pbnRzIHRvIGlzZXIvaXNjc2kgaGVhZGVycywgc2dbMV0gb3B0aW9uYWxseSBwb2ludHMgdG8gZWl0aGVyCisJb2YgaW1tZWRpYXRlIGRhdGEsIHVuc29saWNpdGVkIGRhdGEtb3V0IG9yIGNvbnRyb2wgKGxvZ2luLHRleHQpICovCisJc3RydWN0IGliX3NnZQkJICAgICB0eF9zZ1syXTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9zZ2U7CiB9OwogCisjZGVmaW5lIElTRVJfUlhfUEFEX1NJWkUJKDI1NiAtIChJU0VSX1JYX1BBWUxPQURfU0laRSArIFwKKwkJCQkJc2l6ZW9mKHU2NCkgKyBzaXplb2Yoc3RydWN0IGliX3NnZSkpKQorc3RydWN0IGlzZXJfcnhfZGVzYyB7CisJc3RydWN0IGlzZXJfaGRyICAgICAgICAgICAgICBpc2VyX2hlYWRlcjsKKwlzdHJ1Y3QgaXNjc2lfaGRyICAgICAgICAgICAgIGlzY3NpX2hlYWRlcjsKKwljaGFyCQkgICAgICAgICAgICAgZGF0YVtJU0VSX1JFQ1ZfREFUQV9TRUdfTEVOXTsKKwl1NjQJCSAgICAgICAgICAgICBkbWFfYWRkcjsKKwlzdHJ1Y3QgaWJfc2dlCQkgICAgIHJ4X3NnOworCWNoYXIJCSAgICAgICAgICAgICBwYWRbSVNFUl9SWF9QQURfU0laRV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCiBzdHJ1Y3QgaXNlcl9kZXZpY2UgewogCXN0cnVjdCBpYl9kZXZpY2UgICAgICAgICAgICAgKmliX2RldmljZTsKIAlzdHJ1Y3QgaWJfcGQJICAgICAgICAgICAgICpwZDsKLQlzdHJ1Y3QgaWJfY3EJICAgICAgICAgICAgICpjcTsKKwlzdHJ1Y3QgaWJfY3EJICAgICAgICAgICAgICpyeF9jcTsKKwlzdHJ1Y3QgaWJfY3EJICAgICAgICAgICAgICp0eF9jcTsKIAlzdHJ1Y3QgaWJfbXIJICAgICAgICAgICAgICptcjsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJICAgICBjcV90YXNrbGV0OwogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgaWdfbGlzdDsgLyogZW50cnkgaW4gaWcgZGV2aWNlcyBsaXN0ICovCkBAIC0yNTAsMTUgKzI0OCwxOCBAQAogCXN0cnVjdCBpYl9mbXJfcG9vbCAgICAgICAgICAgKmZtcl9wb29sOyAgICAgLyogcG9vbCBvZiBJQiBGTVJzICAgICAgICAgKi8KIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2NfZXZ0X2ZsYWc7IC8qIGRpc2Nvbm4gZXZlbnQgZGVsaXZlcmVkICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QJICAgICB3YWl0OyAgICAgICAgICAvKiB3YWl0cSBmb3IgY29ubi9kaXNjb25uICAqLwotCWF0b21pY190ICAgICAgICAgICAgICAgICAgICAgcG9zdF9yZWN2X2J1Zl9jb3VudDsgLyogcG9zdGVkIHJ4IGNvdW50ICAgKi8KKwlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RfcmVjdl9idWZfY291bnQ7IC8qIHBvc3RlZCByeCBjb3VudCAgKi8KIAlhdG9taWNfdCAgICAgICAgICAgICAgICAgICAgIHBvc3Rfc2VuZF9idWZfY291bnQ7IC8qIHBvc3RlZCB0eCBjb3VudCAgICovCi0JYXRvbWljX3QgICAgICAgICAgICAgICAgICAgICB1bmV4cGVjdGVkX3BkdV9jb3VudDsvKiBjb3VudCBvZiByZWNlaXZlZCAqCi0JCQkJCQkJICAgKiB1bmV4cGVjdGVkIHBkdXMgICAqCi0JCQkJCQkJICAgKiBub3QgeWV0IHJldGlyZWQgICAqLwogCWNoYXIgCQkJICAgICBuYW1lW0lTRVJfT0JKRUNUX05BTUVfU0laRV07CiAJc3RydWN0IGlzZXJfcGFnZV92ZWMgICAgICAgICAqcGFnZV92ZWM7ICAgICAvKiByZXByZXNlbnRzIFNHIHRvIGZtciBtYXBzKgogCQkJCQkJICAgICAqIG1hcHMgc2VyaWFsaXplZCBhcyB0eCBpcyovCiAJc3RydWN0IGxpc3RfaGVhZAkgICAgIGNvbm5fbGlzdDsgICAgICAgLyogZW50cnkgaW4gaWcgY29ubiBsaXN0ICovCisKKwljaGFyICAJCQkgICAgICpsb2dpbl9idWY7CisJdTY0IAkJCSAgICAgbG9naW5fZG1hOworCXVuc2lnbmVkIGludCAJCSAgICAgcnhfZGVzY19oZWFkOworCXN0cnVjdCBpc2VyX3J4X2Rlc2MJICAgICAqcnhfZGVzY3M7CisJc3RydWN0IGliX3JlY3Zfd3IJICAgICByeF93cltJU0VSX01JTl9QT1NURURfUlhdOwogfTsKIAogc3RydWN0IGlzY3NpX2lzZXJfY29ubiB7CkBAIC0yNjcsNyArMjY4LDcgQEAKIH07CiAKIHN0cnVjdCBpc2NzaV9pc2VyX3Rhc2sgewotCXN0cnVjdCBpc2VyX2Rlc2MgICAgICAgICAgICAgZGVzYzsKKwlzdHJ1Y3QgaXNlcl90eF9kZXNjICAgICAgICAgIGRlc2M7CiAJc3RydWN0IGlzY3NpX2lzZXJfY29ubgkgICAgICppc2VyX2Nvbm47CiAJZW51bSBpc2VyX3Rhc2tfc3RhdHVzIAkgICAgIHN0YXR1czsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmRfc2VudDsgIC8qIHNldCBpZiBjb21tYW5kICBzZW50ICAqLwpAQCAtMjc1LDYgKzI3Niw3IEBACiAJc3RydWN0IGlzZXJfcmVnZF9idWYgICAgICAgICByZG1hX3JlZ2RbSVNFUl9ESVJTX05VTV07LyogcmVnZCByZG1hIGJ1ZiAqLwogCXN0cnVjdCBpc2VyX2RhdGFfYnVmICAgICAgICAgZGF0YVtJU0VSX0RJUlNfTlVNXTsgICAgIC8qIG9yaWcuIGRhdGEgZGVzKi8KIAlzdHJ1Y3QgaXNlcl9kYXRhX2J1ZiAgICAgICAgIGRhdGFfY29weVtJU0VSX0RJUlNfTlVNXTsvKiBjb250aWcuIGNvcHkgICovCisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzX2luaXRpYWxpemVkOwogfTsKIAogc3RydWN0IGlzZXJfcGFnZV92ZWMgewpAQCAtMzIyLDIyICszMjQsMTcgQEAKIAogdm9pZCBpc2VyX2Nvbm5fdGVybWluYXRlKHN0cnVjdCBpc2VyX2Nvbm4gKmliX2Nvbm4pOwogCi12b2lkIGlzZXJfcmN2X2NvbXBsZXRpb24oc3RydWN0IGlzZXJfZGVzYyAqZGVzYywKLQkJCSB1bnNpZ25lZCBsb25nICAgIGR0b194ZmVyX2xlbik7Cit2b2lkIGlzZXJfcmN2X2NvbXBsZXRpb24oc3RydWN0IGlzZXJfcnhfZGVzYyAqZGVzYywKKwkJCSB1bnNpZ25lZCBsb25nICAgIGR0b194ZmVyX2xlbiwKKwkJCXN0cnVjdCBpc2VyX2Nvbm4gKmliX2Nvbm4pOwogCi12b2lkIGlzZXJfc25kX2NvbXBsZXRpb24oc3RydWN0IGlzZXJfZGVzYyAqZGVzYyk7Cit2b2lkIGlzZXJfc25kX2NvbXBsZXRpb24oc3RydWN0IGlzZXJfdHhfZGVzYyAqZGVzYywgc3RydWN0IGlzZXJfY29ubiAqaWJfY29ubik7CiAKIHZvaWQgaXNlcl90YXNrX3JkbWFfaW5pdChzdHJ1Y3QgaXNjc2lfaXNlcl90YXNrICp0YXNrKTsKIAogdm9pZCBpc2VyX3Rhc2tfcmRtYV9maW5hbGl6ZShzdHJ1Y3QgaXNjc2lfaXNlcl90YXNrICp0YXNrKTsKIAotdm9pZCBpc2VyX2R0b19idWZmc19yZWxlYXNlKHN0cnVjdCBpc2VyX2R0byAqZHRvKTsKLQotaW50ICBpc2VyX3JlZ2RfYnVmZl9yZWxlYXNlKHN0cnVjdCBpc2VyX3JlZ2RfYnVmICpyZWdkX2J1Zik7Ci0KLXZvaWQgaXNlcl9yZWdfc2luZ2xlKHN0cnVjdCBpc2VyX2RldmljZSAgICAgICpkZXZpY2UsCi0JCSAgICAgc3RydWN0IGlzZXJfcmVnZF9idWYgICAgKnJlZ2RfYnVmLAotCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbik7Cit2b2lkIGlzZXJfZnJlZV9yeF9kZXNjcmlwdG9ycyhzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uKTsKIAogdm9pZCBpc2VyX2ZpbmFsaXplX3JkbWFfdW5hbGlnbmVkX3NnKHN0cnVjdCBpc2NzaV9pc2VyX3Rhc2sgKnRhc2ssCiAJCQkJICAgICBlbnVtIGlzZXJfZGF0YV9kaXIgICAgICAgICBjbWRfZGlyKTsKQEAgLTM1NiwxMSArMzUzLDkgQEAKIAogdm9pZCBpc2VyX3VucmVnX21lbShzdHJ1Y3QgaXNlcl9tZW1fcmVnICptZW1fcmVnKTsKIAotaW50ICBpc2VyX3Bvc3RfcmVjdihzdHJ1Y3QgaXNlcl9kZXNjICpyeF9kZXNjKTsKLWludCAgaXNlcl9wb3N0X3NlbmQoc3RydWN0IGlzZXJfZGVzYyAqdHhfZGVzYyk7Ci0KLWludCBpc2VyX2Nvbm5fc3RhdGVfY29tcChzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uLAotCQkJIGVudW0gaXNlcl9pYl9jb25uX3N0YXRlIGNvbXApOworaW50ICBpc2VyX3Bvc3RfcmVjdmwoc3RydWN0IGlzZXJfY29ubiAqaWJfY29ubik7CitpbnQgIGlzZXJfcG9zdF9yZWN2bShzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uLCBpbnQgY291bnQpOworaW50ICBpc2VyX3Bvc3Rfc2VuZChzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uLCBzdHJ1Y3QgaXNlcl90eF9kZXNjICp0eF9kZXNjKTsKIAogaW50IGlzZXJfZG1hX21hcF90YXNrX2RhdGEoc3RydWN0IGlzY3NpX2lzZXJfdGFzayAqaXNlcl90YXNrLAogCQkJICAgIHN0cnVjdCBpc2VyX2RhdGFfYnVmICAgICAgICpkYXRhLApAQCAtMzY4LDQgKzM2Myw2IEBACiAJCQkgICAgZW51bSAgIGRtYV9kYXRhX2RpcmVjdGlvbiAgZG1hX2Rpcik7CiAKIHZvaWQgaXNlcl9kbWFfdW5tYXBfdGFza19kYXRhKHN0cnVjdCBpc2NzaV9pc2VyX3Rhc2sgKmlzZXJfdGFzayk7CitpbnQgIGlzZXJfaW5pdGlhbGl6ZV90YXNrX2hlYWRlcnMoc3RydWN0IGlzY3NpX3Rhc2sgKnRhc2ssCisJCQlzdHJ1Y3QgaXNlcl90eF9kZXNjICp0eF9kZXNjKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfaW5pdGlhdG9yLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9pbml0aWF0b3IuYwppbmRleCA5ZGU2NDAyLi4wYjllZjA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9pbml0aWF0b3IuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9pbml0aWF0b3IuYwpAQCAtMzksMjkgKzM5LDYgQEAKIAogI2luY2x1ZGUgImlzY3NpX2lzZXIuaCIKIAotLyogQ29uc3RhbnQgUERVIGxlbmd0aHMgY2FsY3VsYXRpb25zICovCi0jZGVmaW5lIElTRVJfVE9UQUxfSEVBREVSU19MRU4gIChzaXplb2YgKHN0cnVjdCBpc2VyX2hkcikgKyBcCi0JCQkJIHNpemVvZiAoc3RydWN0IGlzY3NpX2hkcikpCi0KLS8qIGlzZXJfZHRvX2FkZF9yZWdkX2J1ZmYgLSBpbmNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yICoKLSAqIHRoZSByZWdpc3RlcmVkIGJ1ZmZlciAmIGFkZHMgaXQgdG8gdGhlIERUTyBvYmplY3QgICAgICAgICAgICovCi1zdGF0aWMgdm9pZCBpc2VyX2R0b19hZGRfcmVnZF9idWZmKHN0cnVjdCBpc2VyX2R0byAqZHRvLAotCQkJCSAgIHN0cnVjdCBpc2VyX3JlZ2RfYnVmICpyZWdkX2J1ZiwKLQkJCQkgICB1bnNpZ25lZCBsb25nIHVzZV9vZmZzZXQsCi0JCQkJICAgdW5zaWduZWQgbG9uZyB1c2Vfc2l6ZSkKLXsKLQlpbnQgYWRkX2lkeDsKLQotCWF0b21pY19pbmMoJnJlZ2RfYnVmLT5yZWZfY291bnQpOwotCi0JYWRkX2lkeCA9IGR0by0+cmVnZF92ZWN0b3JfbGVuOwotCWR0by0+cmVnZFthZGRfaWR4XSA9IHJlZ2RfYnVmOwotCWR0by0+dXNlZF9zelthZGRfaWR4XSA9IHVzZV9zaXplOwotCWR0by0+b2Zmc2V0W2FkZF9pZHhdID0gdXNlX29mZnNldDsKLQotCWR0by0+cmVnZF92ZWN0b3JfbGVuKys7Ci19Ci0KIC8qIFJlZ2lzdGVyIHVzZXIgYnVmZmVyIG1lbW9yeSBhbmQgaW5pdGlhbGl6ZSBwYXNzaXZlIHJkbWEKICAqICBkdG8gZGVzY3JpcHRvci4gVG90YWwgZGF0YSBzaXplIGlzIHN0b3JlZCBpbgogICogIGlzZXJfdGFzay0+ZGF0YVtJU0VSX0RJUl9JTl0uZGF0YV9sZW4KQEAgLTEyMiw5ICs5OSw5IEBACiAJc3RydWN0IGlzY3NpX2lzZXJfdGFzayAqaXNlcl90YXNrID0gdGFzay0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaXNlcl9yZWdkX2J1ZiAqcmVnZF9idWY7CiAJaW50IGVycjsKLQlzdHJ1Y3QgaXNlcl9kdG8gKnNlbmRfZHRvID0gJmlzZXJfdGFzay0+ZGVzYy5kdG87CiAJc3RydWN0IGlzZXJfaGRyICpoZHIgPSAmaXNlcl90YXNrLT5kZXNjLmlzZXJfaGVhZGVyOwogCXN0cnVjdCBpc2VyX2RhdGFfYnVmICpidWZfb3V0ID0gJmlzZXJfdGFzay0+ZGF0YVtJU0VSX0RJUl9PVVRdOworCXN0cnVjdCBpYl9zZ2UgKnR4X2RzZyA9ICZpc2VyX3Rhc2stPmRlc2MudHhfc2dbMV07CiAKIAllcnIgPSBpc2VyX2RtYV9tYXBfdGFza19kYXRhKGlzZXJfdGFzaywKIAkJCQkgICAgIGJ1Zl9vdXQsCkBAIC0xNjMsMTM1ICsxNDAsMTAwIEBACiAJaWYgKGltbV9zeiA+IDApIHsKIAkJaXNlcl9kYmcoIkNtZCBpdHQ6JWQsIFdSSVRFLCBhZGRpbmcgaW1tLmRhdGEgc3o6ICVkXG4iLAogCQkJIHRhc2stPml0dCwgaW1tX3N6KTsKLQkJaXNlcl9kdG9fYWRkX3JlZ2RfYnVmZihzZW5kX2R0bywKLQkJCQkgICAgICAgcmVnZF9idWYsCi0JCQkJICAgICAgIDAsCi0JCQkJICAgICAgIGltbV9zeik7CisJCXR4X2RzZy0+YWRkciAgID0gcmVnZF9idWYtPnJlZy52YTsKKwkJdHhfZHNnLT5sZW5ndGggPSBpbW1fc3o7CisJCXR4X2RzZy0+bGtleSAgID0gcmVnZF9idWYtPnJlZy5sa2V5OworCQlpc2VyX3Rhc2stPmRlc2MubnVtX3NnZSA9IDI7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLS8qKgotICogaXNlcl9wb3N0X3JlY2VpdmVfY29udHJvbCAtIGFsbG9jYXRlcywgaW5pdGlhbGl6ZXMgYW5kIHBvc3RzIHJlY2VpdmUgRFRPLgotICovCi1zdGF0aWMgaW50IGlzZXJfcG9zdF9yZWNlaXZlX2NvbnRyb2woc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4pCi17Ci0Jc3RydWN0IGlzY3NpX2lzZXJfY29ubiAqaXNlcl9jb25uID0gY29ubi0+ZGRfZGF0YTsKLQlzdHJ1Y3QgaXNlcl9kZXNjICAgICAqcnhfZGVzYzsKLQlzdHJ1Y3QgaXNlcl9yZWdkX2J1ZiAqcmVnZF9oZHI7Ci0Jc3RydWN0IGlzZXJfcmVnZF9idWYgKnJlZ2RfZGF0YTsKLQlzdHJ1Y3QgaXNlcl9kdG8gICAgICAqcmVjdl9kdG8gPSBOVUxMOwotCXN0cnVjdCBpc2VyX2RldmljZSAgKmRldmljZSA9IGlzZXJfY29ubi0+aWJfY29ubi0+ZGV2aWNlOwotCWludCByeF9kYXRhX3NpemUsIGVycjsKLQlpbnQgcG9zdHMsIG91dHN0YW5kaW5nX3VuZXhwX3BkdXM7Ci0KLQkvKiBmb3IgdGhlIGxvZ2luIHNlcXVlbmNlIHdlIG11c3Qgc3VwcG9ydCByeCBvZiB1cHRvIDhLOyBsb2dpbiBpcyBkb25lCi0JICogYWZ0ZXIgY29ubiBjcmVhdGUvYmluZCAoY29ubmVjdCkgYW5kIGNvbm4gc3RvcC9iaW5kIChyZWNvbm5lY3QpLAotCSAqIHdoYXQncyBjb21tb24gZm9yIGJvdGggc2NoZW1lcyBpcyB0aGF0IHRoZSBjb25uZWN0aW9uIGlzIG5vdCBzdGFydGVkCi0JICovCi0JaWYgKGNvbm4tPmNfc3RhZ2UgIT0gSVNDU0lfQ09OTl9TVEFSVEVEKQotCQlyeF9kYXRhX3NpemUgPSBJU0NTSV9ERUZfTUFYX1JFQ1ZfU0VHX0xFTjsKLQllbHNlIC8qIEZJWE1FIHRpbGwgdXNlciBzcGFjZSBzZXRzIGNvbm4tPm1heF9yZWN2X2RsZW5ndGggY29ycmVjdGx5ICovCi0JCXJ4X2RhdGFfc2l6ZSA9IDEyODsKLQotCW91dHN0YW5kaW5nX3VuZXhwX3BkdXMgPQotCQlhdG9taWNfeGNoZygmaXNlcl9jb25uLT5pYl9jb25uLT51bmV4cGVjdGVkX3BkdV9jb3VudCwgMCk7Ci0KLQkvKgotCSAqIGluIGFkZGl0aW9uIHRvIHRoZSByZXNwb25zZSBidWZmZXIsIHJlcGxhY2UgdGhvc2UgY29uc3VtZWQgYnkKLQkgKiB1bmV4cGVjdGVkIHBkdXMuCi0JICovCi0JZm9yIChwb3N0cyA9IDA7IHBvc3RzIDwgMSArIG91dHN0YW5kaW5nX3VuZXhwX3BkdXM7IHBvc3RzKyspIHsKLQkJcnhfZGVzYyA9IGttZW1fY2FjaGVfYWxsb2MoaWcuZGVzY19jYWNoZSwgR0ZQX05PSU8pOwotCQlpZiAocnhfZGVzYyA9PSBOVUxMKSB7Ci0JCQlpc2VyX2VycigiRmFpbGVkIHRvIGFsbG9jIGRlc2MgZm9yIHBvc3QgcmVjdiAlZFxuIiwKLQkJCQkgcG9zdHMpOwotCQkJZXJyID0gLUVOT01FTTsKLQkJCWdvdG8gcG9zdF9yeF9jYWNoZV9hbGxvY19mYWlsdXJlOwotCQl9Ci0JCXJ4X2Rlc2MtPnR5cGUgPSBJU0NTSV9SWDsKLQkJcnhfZGVzYy0+ZGF0YSA9IGttYWxsb2MocnhfZGF0YV9zaXplLCBHRlBfTk9JTyk7Ci0JCWlmIChyeF9kZXNjLT5kYXRhID09IE5VTEwpIHsKLQkJCWlzZXJfZXJyKCJGYWlsZWQgdG8gYWxsb2MgZGF0YSBidWYgZm9yIHBvc3QgcmVjdiAlZFxuIiwKLQkJCQkgcG9zdHMpOwotCQkJZXJyID0gLUVOT01FTTsKLQkJCWdvdG8gcG9zdF9yeF9rbWFsbG9jX2ZhaWx1cmU7Ci0JCX0KLQotCQlyZWN2X2R0byA9ICZyeF9kZXNjLT5kdG87Ci0JCXJlY3ZfZHRvLT5pYl9jb25uID0gaXNlcl9jb25uLT5pYl9jb25uOwotCQlyZWN2X2R0by0+cmVnZF92ZWN0b3JfbGVuID0gMDsKLQotCQlyZWdkX2hkciA9ICZyeF9kZXNjLT5oZHJfcmVnZF9idWY7Ci0JCW1lbXNldChyZWdkX2hkciwgMCwgc2l6ZW9mKHN0cnVjdCBpc2VyX3JlZ2RfYnVmKSk7Ci0JCXJlZ2RfaGRyLT5kZXZpY2UgID0gZGV2aWNlOwotCQlyZWdkX2hkci0+dmlydF9hZGRyICA9IHJ4X2Rlc2M7IC8qID09ICZyeF9kZXNjLT5pc2VyX2hlYWRlciAqLwotCQlyZWdkX2hkci0+ZGF0YV9zaXplICA9IElTRVJfVE9UQUxfSEVBREVSU19MRU47Ci0KLQkJaXNlcl9yZWdfc2luZ2xlKGRldmljZSwgcmVnZF9oZHIsIERNQV9GUk9NX0RFVklDRSk7Ci0KLQkJaXNlcl9kdG9fYWRkX3JlZ2RfYnVmZihyZWN2X2R0bywgcmVnZF9oZHIsIDAsIDApOwotCi0JCXJlZ2RfZGF0YSA9ICZyeF9kZXNjLT5kYXRhX3JlZ2RfYnVmOwotCQltZW1zZXQocmVnZF9kYXRhLCAwLCBzaXplb2Yoc3RydWN0IGlzZXJfcmVnZF9idWYpKTsKLQkJcmVnZF9kYXRhLT5kZXZpY2UgID0gZGV2aWNlOwotCQlyZWdkX2RhdGEtPnZpcnRfYWRkciAgPSByeF9kZXNjLT5kYXRhOwotCQlyZWdkX2RhdGEtPmRhdGFfc2l6ZSAgPSByeF9kYXRhX3NpemU7Ci0KLQkJaXNlcl9yZWdfc2luZ2xlKGRldmljZSwgcmVnZF9kYXRhLCBETUFfRlJPTV9ERVZJQ0UpOwotCi0JCWlzZXJfZHRvX2FkZF9yZWdkX2J1ZmYocmVjdl9kdG8sIHJlZ2RfZGF0YSwgMCwgMCk7Ci0KLQkJZXJyID0gaXNlcl9wb3N0X3JlY3YocnhfZGVzYyk7Ci0JCWlmIChlcnIpIHsKLQkJCWlzZXJfZXJyKCJGYWlsZWQgaXNlcl9wb3N0X3JlY3YgZm9yIHBvc3QgJWRcbiIsIHBvc3RzKTsKLQkJCWdvdG8gcG9zdF9yeF9wb3N0X3JlY3ZfZmFpbHVyZTsKLQkJfQotCX0KLQkvKiBhbGwgcG9zdHMgc3VjY2Vzc2Z1bCAqLwotCXJldHVybiAwOwotCi1wb3N0X3J4X3Bvc3RfcmVjdl9mYWlsdXJlOgotCWlzZXJfZHRvX2J1ZmZzX3JlbGVhc2UocmVjdl9kdG8pOwotCWtmcmVlKHJ4X2Rlc2MtPmRhdGEpOwotcG9zdF9yeF9rbWFsbG9jX2ZhaWx1cmU6Ci0Ja21lbV9jYWNoZV9mcmVlKGlnLmRlc2NfY2FjaGUsIHJ4X2Rlc2MpOwotcG9zdF9yeF9jYWNoZV9hbGxvY19mYWlsdXJlOgotCWlmIChwb3N0cyA+IDApIHsKLQkJLyoKLQkJICogcmVzcG9uc2UgYnVmZmVyIHBvc3RlZCwgYnV0IGRpZCBub3QgcmVwbGFjZSBhbGwgdW5leHBlY3RlZAotCQkgKiBwZHUgcmVjdiBidWZzLiBJZ25vcmUgZXJyb3IsIHJldHJ5IG9jY3VycyBuZXh0IHNlbmQKLQkJICovCi0JCW91dHN0YW5kaW5nX3VuZXhwX3BkdXMgLT0gKHBvc3RzIC0gMSk7Ci0JCWVyciA9IDA7Ci0JfQotCWF0b21pY19hZGQob3V0c3RhbmRpbmdfdW5leHBfcGR1cywKLQkJICAgJmlzZXJfY29ubi0+aWJfY29ubi0+dW5leHBlY3RlZF9wZHVfY291bnQpOwotCi0JcmV0dXJuIGVycjsKLX0KLQogLyogY3JlYXRlcyBhIG5ldyB0eCBkZXNjcmlwdG9yIGFuZCBhZGRzIGhlYWRlciByZWdkIGJ1ZmZlciAqLwotc3RhdGljIHZvaWQgaXNlcl9jcmVhdGVfc2VuZF9kZXNjKHN0cnVjdCBpc2NzaV9pc2VyX2Nvbm4gKmlzZXJfY29ubiwKLQkJCQkgIHN0cnVjdCBpc2VyX2Rlc2MgICAgICAgKnR4X2Rlc2MpCitzdGF0aWMgdm9pZCBpc2VyX2NyZWF0ZV9zZW5kX2Rlc2Moc3RydWN0IGlzZXJfY29ubgkqaWJfY29ubiwKKwkJCQkgIHN0cnVjdCBpc2VyX3R4X2Rlc2MJKnR4X2Rlc2MpCiB7Ci0Jc3RydWN0IGlzZXJfcmVnZF9idWYgKnJlZ2RfaGRyID0gJnR4X2Rlc2MtPmhkcl9yZWdkX2J1ZjsKLQlzdHJ1Y3QgaXNlcl9kdG8gICAgICAqc2VuZF9kdG8gPSAmdHhfZGVzYy0+ZHRvOworCXN0cnVjdCBpc2VyX2RldmljZSAqZGV2aWNlID0gaWJfY29ubi0+ZGV2aWNlOwogCi0JbWVtc2V0KHJlZ2RfaGRyLCAwLCBzaXplb2Yoc3RydWN0IGlzZXJfcmVnZF9idWYpKTsKLQlyZWdkX2hkci0+ZGV2aWNlICA9IGlzZXJfY29ubi0+aWJfY29ubi0+ZGV2aWNlOwotCXJlZ2RfaGRyLT52aXJ0X2FkZHIgID0gdHhfZGVzYzsgLyogPT0gJnR4X2Rlc2MtPmlzZXJfaGVhZGVyICovCi0JcmVnZF9oZHItPmRhdGFfc2l6ZSAgPSBJU0VSX1RPVEFMX0hFQURFUlNfTEVOOwotCi0Jc2VuZF9kdG8tPmliX2Nvbm4gICAgICAgICA9IGlzZXJfY29ubi0+aWJfY29ubjsKLQlzZW5kX2R0by0+bm90aWZ5X2VuYWJsZSAgID0gMTsKLQlzZW5kX2R0by0+cmVnZF92ZWN0b3JfbGVuID0gMDsKKwlpYl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShkZXZpY2UtPmliX2RldmljZSwKKwkJdHhfZGVzYy0+ZG1hX2FkZHIsIElTRVJfSEVBREVSU19MRU4sIERNQV9UT19ERVZJQ0UpOwogCiAJbWVtc2V0KCZ0eF9kZXNjLT5pc2VyX2hlYWRlciwgMCwgc2l6ZW9mKHN0cnVjdCBpc2VyX2hkcikpOwogCXR4X2Rlc2MtPmlzZXJfaGVhZGVyLmZsYWdzID0gSVNFUl9WRVI7CiAKLQlpc2VyX2R0b19hZGRfcmVnZF9idWZmKHNlbmRfZHRvLCByZWdkX2hkciwgMCwgMCk7CisJdHhfZGVzYy0+bnVtX3NnZSA9IDE7CisKKwlpZiAodHhfZGVzYy0+dHhfc2dbMF0ubGtleSAhPSBkZXZpY2UtPm1yLT5sa2V5KSB7CisJCXR4X2Rlc2MtPnR4X3NnWzBdLmxrZXkgPSBkZXZpY2UtPm1yLT5sa2V5OworCQlpc2VyX2RiZygic2Rlc2MgJXAgbGtleSBtaXNtYXRjaCwgZml4aW5nXG4iLCB0eF9kZXNjKTsKKwl9Cit9CisKKworaW50IGlzZXJfYWxsb2NfcnhfZGVzY3JpcHRvcnMoc3RydWN0IGlzZXJfY29ubiAqaWJfY29ubikKK3sKKwlpbnQgaSwgajsKKwl1NjQgZG1hX2FkZHI7CisJc3RydWN0IGlzZXJfcnhfZGVzYyAqcnhfZGVzYzsKKwlzdHJ1Y3QgaWJfc2dlICAgICAgICpyeF9zZzsKKwlzdHJ1Y3QgaXNlcl9kZXZpY2UgICpkZXZpY2UgPSBpYl9jb25uLT5kZXZpY2U7CisKKwlpYl9jb25uLT5yeF9kZXNjcyA9IGttYWxsb2MoSVNFUl9RUF9NQVhfUkVDVl9EVE9TICoKKwkJCQlzaXplb2Yoc3RydWN0IGlzZXJfcnhfZGVzYyksIEdGUF9LRVJORUwpOworCWlmICghaWJfY29ubi0+cnhfZGVzY3MpCisJCWdvdG8gcnhfZGVzY19hbGxvY19mYWlsOworCisJcnhfZGVzYyA9IGliX2Nvbm4tPnJ4X2Rlc2NzOworCisJZm9yIChpID0gMDsgaSA8IElTRVJfUVBfTUFYX1JFQ1ZfRFRPUzsgaSsrLCByeF9kZXNjKyspICB7CisJCWRtYV9hZGRyID0gaWJfZG1hX21hcF9zaW5nbGUoZGV2aWNlLT5pYl9kZXZpY2UsICh2b2lkICopcnhfZGVzYywKKwkJCQkJSVNFUl9SWF9QQVlMT0FEX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJCWlmIChpYl9kbWFfbWFwcGluZ19lcnJvcihkZXZpY2UtPmliX2RldmljZSwgZG1hX2FkZHIpKQorCQkJZ290byByeF9kZXNjX2RtYV9tYXBfZmFpbGVkOworCisJCXJ4X2Rlc2MtPmRtYV9hZGRyID0gZG1hX2FkZHI7CisKKwkJcnhfc2cgPSAmcnhfZGVzYy0+cnhfc2c7CisJCXJ4X3NnLT5hZGRyICAgPSByeF9kZXNjLT5kbWFfYWRkcjsKKwkJcnhfc2ctPmxlbmd0aCA9IElTRVJfUlhfUEFZTE9BRF9TSVpFOworCQlyeF9zZy0+bGtleSAgID0gZGV2aWNlLT5tci0+bGtleTsKKwl9CisKKwlpYl9jb25uLT5yeF9kZXNjX2hlYWQgPSAwOworCXJldHVybiAwOworCityeF9kZXNjX2RtYV9tYXBfZmFpbGVkOgorCXJ4X2Rlc2MgPSBpYl9jb25uLT5yeF9kZXNjczsKKwlmb3IgKGogPSAwOyBqIDwgaTsgaisrLCByeF9kZXNjKyspCisJCWliX2RtYV91bm1hcF9zaW5nbGUoZGV2aWNlLT5pYl9kZXZpY2UsIHJ4X2Rlc2MtPmRtYV9hZGRyLAorCQkJSVNFUl9SWF9QQVlMT0FEX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJa2ZyZWUoaWJfY29ubi0+cnhfZGVzY3MpOworCWliX2Nvbm4tPnJ4X2Rlc2NzID0gTlVMTDsKK3J4X2Rlc2NfYWxsb2NfZmFpbDoKKwlpc2VyX2VycigiZmFpbGVkIGFsbG9jYXRpbmcgcnggZGVzY3JpcHRvcnMgLyBkYXRhIGJ1ZmZlcnNcbiIpOworCXJldHVybiAtRU5PTUVNOworfQorCit2b2lkIGlzZXJfZnJlZV9yeF9kZXNjcmlwdG9ycyhzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uKQoreworCWludCBpOworCXN0cnVjdCBpc2VyX3J4X2Rlc2MgKnJ4X2Rlc2M7CisJc3RydWN0IGlzZXJfZGV2aWNlICpkZXZpY2UgPSBpYl9jb25uLT5kZXZpY2U7CisKKwlpZiAoaWJfY29ubi0+bG9naW5fYnVmKSB7CisJCWliX2RtYV91bm1hcF9zaW5nbGUoZGV2aWNlLT5pYl9kZXZpY2UsIGliX2Nvbm4tPmxvZ2luX2RtYSwKKwkJCUlTRVJfUlhfTE9HSU5fU0laRSwgRE1BX0ZST01fREVWSUNFKTsKKwkJa2ZyZWUoaWJfY29ubi0+bG9naW5fYnVmKTsKKwl9CisKKwlpZiAoIWliX2Nvbm4tPnJ4X2Rlc2NzKQorCQlyZXR1cm47CisKKwlyeF9kZXNjID0gaWJfY29ubi0+cnhfZGVzY3M7CisJZm9yIChpID0gMDsgaSA8IElTRVJfUVBfTUFYX1JFQ1ZfRFRPUzsgaSsrLCByeF9kZXNjKyspCisJCWliX2RtYV91bm1hcF9zaW5nbGUoZGV2aWNlLT5pYl9kZXZpY2UsIHJ4X2Rlc2MtPmRtYV9hZGRyLAorCQkJSVNFUl9SWF9QQVlMT0FEX1NJWkUsIERNQV9GUk9NX0RFVklDRSk7CisJa2ZyZWUoaWJfY29ubi0+cnhfZGVzY3MpOwogfQogCiAvKioKQEAgLTMwMSw0NiArMjQzLDIzIEBACiB7CiAJc3RydWN0IGlzY3NpX2lzZXJfY29ubiAqaXNlcl9jb25uID0gY29ubi0+ZGRfZGF0YTsKIAotCWludCBpOwotCS8qCi0JICogRklYTUUgdGhpcyB2YWx1ZSBzaG91bGQgYmUgZGVjbGFyZWQgdG8gdGhlIHRhcmdldCBkdXJpbmcgbG9naW4gd2l0aAotCSAqIHRoZSBNYXhPdXRzdGFuZGluZ1VuZXhwZWN0ZWRQRFVzIGtleSB3aGVuIHN1cHBvcnRlZAotCSAqLwotCWludCBpbml0aWFsX3Bvc3RfcmVjdl9idWZzX251bSA9IElTRVJfTUFYX1JYX01JU0NfUERVUzsKLQotCWlzZXJfZGJnKCJJbml0aWFsbHkgcG9zdDogJWRcbiIsIGluaXRpYWxfcG9zdF9yZWN2X2J1ZnNfbnVtKTsKKwlpc2VyX2RiZygiSW5pdGlhbGx5IHBvc3Q6ICVkXG4iLCBJU0VSX01JTl9QT1NURURfUlgpOwogCiAJLyogQ2hlY2sgdGhhdCB0aGVyZSBpcyBubyBwb3N0ZWQgcmVjdiBvciBzZW5kIGJ1ZmZlcnMgbGVmdCAtICovCiAJLyogdGhleSBtdXN0IGJlIGNvbnN1bWVkIGR1cmluZyB0aGUgbG9naW4gcGhhc2UgKi8KLQlCVUdfT04oYXRvbWljX3JlYWQoJmlzZXJfY29ubi0+aWJfY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudCkgIT0gMCk7CisJQlVHX09OKGlzZXJfY29ubi0+aWJfY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudCAhPSAwKTsKIAlCVUdfT04oYXRvbWljX3JlYWQoJmlzZXJfY29ubi0+aWJfY29ubi0+cG9zdF9zZW5kX2J1Zl9jb3VudCkgIT0gMCk7CiAKKwlpZiAoaXNlcl9hbGxvY19yeF9kZXNjcmlwdG9ycyhpc2VyX2Nvbm4tPmliX2Nvbm4pKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCS8qIEluaXRpYWwgcG9zdCByZWNlaXZlIGJ1ZmZlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgaW5pdGlhbF9wb3N0X3JlY3ZfYnVmc19udW07IGkrKykgewotCQlpZiAoaXNlcl9wb3N0X3JlY2VpdmVfY29udHJvbChjb25uKSAhPSAwKSB7Ci0JCQlpc2VyX2VycigiRmFpbGVkIHRvIHBvc3QgcmVjdiBidWZzIGF0OiVkIGNvbm46MHglcFxuIiwKLQkJCQkgaSwgY29ubik7Ci0JCQlyZXR1cm4gLUVOT01FTTsKLQkJfQotCX0KLQlpc2VyX2RiZygiUG9zdGVkICVkIHBvc3QgcmVjdiBidWZzLCBjb25uOjB4JXBcbiIsIGksIGNvbm4pOworCWlmIChpc2VyX3Bvc3RfcmVjdm0oaXNlcl9jb25uLT5pYl9jb25uLCBJU0VSX01JTl9QT1NURURfUlgpKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1pc2VyX2NoZWNrX3htaXQoc3RydWN0IGlzY3NpX2Nvbm4gKmNvbm4sIHZvaWQgKnRhc2spCi17Ci0Jc3RydWN0IGlzY3NpX2lzZXJfY29ubiAqaXNlcl9jb25uID0gY29ubi0+ZGRfZGF0YTsKLQotCWlmIChhdG9taWNfcmVhZCgmaXNlcl9jb25uLT5pYl9jb25uLT5wb3N0X3NlbmRfYnVmX2NvdW50KSA9PQotCSAgICBJU0VSX1FQX01BWF9SRVFfRFRPUykgewotCQlpc2VyX2RiZygiJWxkIGNhbid0IHhtaXQgdGFzayAlcFxuIixqaWZmaWVzLHRhc2spOwotCQlyZXR1cm4gLUVOT0JVRlM7Ci0JfQotCXJldHVybiAwOwotfQotCi0KIC8qKgogICogaXNlcl9zZW5kX2NvbW1hbmQgLSBzZW5kIGNvbW1hbmQgUERVCiAgKi8KQEAgLTM0OSwyNyArMjY4LDE4IEBACiB7CiAJc3RydWN0IGlzY3NpX2lzZXJfY29ubiAqaXNlcl9jb25uID0gY29ubi0+ZGRfZGF0YTsKIAlzdHJ1Y3QgaXNjc2lfaXNlcl90YXNrICppc2VyX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOwotCXN0cnVjdCBpc2VyX2R0byAqc2VuZF9kdG8gPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZWR0bDsKLQlpbnQgZXJyID0gMDsKKwlpbnQgZXJyOwogCXN0cnVjdCBpc2VyX2RhdGFfYnVmICpkYXRhX2J1ZjsKIAlzdHJ1Y3QgaXNjc2lfY21kICpoZHIgPSAgKHN0cnVjdCBpc2NzaV9jbWQgKil0YXNrLT5oZHI7CiAJc3RydWN0IHNjc2lfY21uZCAqc2MgID0gIHRhc2stPnNjOwotCi0JaWYgKCFpc2VyX2Nvbm5fc3RhdGVfY29tcChpc2VyX2Nvbm4tPmliX2Nvbm4sIElTRVJfQ09OTl9VUCkpIHsKLQkJaXNlcl9lcnIoIkZhaWxlZCB0byBzZW5kLCBjb25uOiAweCVwIGlzIG5vdCB1cFxuIiwgaXNlcl9jb25uLT5pYl9jb25uKTsKLQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0JaWYgKGlzZXJfY2hlY2tfeG1pdChjb25uLCB0YXNrKSkKLQkJcmV0dXJuIC1FTk9CVUZTOworCXN0cnVjdCBpc2VyX3R4X2Rlc2MgKnR4X2Rlc2MgPSAmaXNlcl90YXNrLT5kZXNjOwogCiAJZWR0bCA9IG50b2hsKGhkci0+ZGF0YV9sZW5ndGgpOwogCiAJLyogYnVpbGQgdGhlIHR4IGRlc2MgcmVnZCBoZWFkZXIgYW5kIGFkZCBpdCB0byB0aGUgdHggZGVzYyBkdG8gKi8KLQlpc2VyX3Rhc2stPmRlc2MudHlwZSA9IElTQ1NJX1RYX1NDU0lfQ09NTUFORDsKLQlzZW5kX2R0byA9ICZpc2VyX3Rhc2stPmRlc2MuZHRvOwotCXNlbmRfZHRvLT50YXNrID0gaXNlcl90YXNrOwotCWlzZXJfY3JlYXRlX3NlbmRfZGVzYyhpc2VyX2Nvbm4sICZpc2VyX3Rhc2stPmRlc2MpOworCXR4X2Rlc2MtPnR5cGUgPSBJU0NTSV9UWF9TQ1NJX0NPTU1BTkQ7CisJaXNlcl9jcmVhdGVfc2VuZF9kZXNjKGlzZXJfY29ubi0+aWJfY29ubiwgdHhfZGVzYyk7CiAKIAlpZiAoaGRyLT5mbGFncyAmIElTQ1NJX0ZMQUdfQ01EX1JFQUQpCiAJCWRhdGFfYnVmID0gJmlzZXJfdGFzay0+ZGF0YVtJU0VSX0RJUl9JTl07CkBAIC0zOTgsMjMgKzMwOCwxMyBAQAogCQkJZ290byBzZW5kX2NvbW1hbmRfZXJyb3I7CiAJfQogCi0JaXNlcl9yZWdfc2luZ2xlKGlzZXJfY29ubi0+aWJfY29ubi0+ZGV2aWNlLAotCQkJc2VuZF9kdG8tPnJlZ2RbMF0sIERNQV9UT19ERVZJQ0UpOwotCi0JaWYgKGlzZXJfcG9zdF9yZWNlaXZlX2NvbnRyb2woY29ubikgIT0gMCkgewotCQlpc2VyX2VycigicG9zdF9yZWN2IGZhaWxlZCFcbiIpOwotCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIHNlbmRfY29tbWFuZF9lcnJvcjsKLQl9Ci0KIAlpc2VyX3Rhc2stPnN0YXR1cyA9IElTRVJfVEFTS19TVEFUVVNfU1RBUlRFRDsKIAotCWVyciA9IGlzZXJfcG9zdF9zZW5kKCZpc2VyX3Rhc2stPmRlc2MpOworCWVyciA9IGlzZXJfcG9zdF9zZW5kKGlzZXJfY29ubi0+aWJfY29ubiwgdHhfZGVzYyk7CiAJaWYgKCFlcnIpCiAJCXJldHVybiAwOwogCiBzZW5kX2NvbW1hbmRfZXJyb3I6Ci0JaXNlcl9kdG9fYnVmZnNfcmVsZWFzZShzZW5kX2R0byk7CiAJaXNlcl9lcnIoImNvbm4gJXAgZmFpbGVkIHRhc2stPml0dCAlZCBlcnIgJWRcbiIsY29ubiwgdGFzay0+aXR0LCBlcnIpOwogCXJldHVybiBlcnI7CiB9CkBAIC00MjgsMjAgKzMyOCwxMyBAQAogewogCXN0cnVjdCBpc2NzaV9pc2VyX2Nvbm4gKmlzZXJfY29ubiA9IGNvbm4tPmRkX2RhdGE7CiAJc3RydWN0IGlzY3NpX2lzZXJfdGFzayAqaXNlcl90YXNrID0gdGFzay0+ZGRfZGF0YTsKLQlzdHJ1Y3QgaXNlcl9kZXNjICp0eF9kZXNjID0gTlVMTDsKLQlzdHJ1Y3QgaXNlcl9kdG8gKnNlbmRfZHRvID0gTlVMTDsKKwlzdHJ1Y3QgaXNlcl90eF9kZXNjICp0eF9kZXNjID0gTlVMTDsKKwlzdHJ1Y3QgaXNlcl9yZWdkX2J1ZiAqcmVnZF9idWY7CiAJdW5zaWduZWQgbG9uZyBidWZfb2Zmc2V0OwogCXVuc2lnbmVkIGxvbmcgZGF0YV9zZWdfbGVuOwogCXVpbnQzMl90IGl0dDsKIAlpbnQgZXJyID0gMDsKLQotCWlmICghaXNlcl9jb25uX3N0YXRlX2NvbXAoaXNlcl9jb25uLT5pYl9jb25uLCBJU0VSX0NPTk5fVVApKSB7Ci0JCWlzZXJfZXJyKCJGYWlsZWQgdG8gc2VuZCwgY29ubjogMHglcCBpcyBub3QgdXBcbiIsIGlzZXJfY29ubi0+aWJfY29ubik7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCi0JaWYgKGlzZXJfY2hlY2tfeG1pdChjb25uLCB0YXNrKSkKLQkJcmV0dXJuIC1FTk9CVUZTOworCXN0cnVjdCBpYl9zZ2UgKnR4X2RzZzsKIAogCWl0dCA9IChfX2ZvcmNlIHVpbnQzMl90KWhkci0+aXR0OwogCWRhdGFfc2VnX2xlbiA9IG50b2gyNChoZHItPmRsZW5ndGgpOwpAQCAtNDUwLDI4ICszNDMsMjUgQEAKIAlpc2VyX2RiZygiJXMgaXR0ICVkIGRzZWdfbGVuICVkIG9mZnNldCAlZFxuIiwKIAkJIF9fZnVuY19fLChpbnQpaXR0LChpbnQpZGF0YV9zZWdfbGVuLChpbnQpYnVmX29mZnNldCk7CiAKLQl0eF9kZXNjID0ga21lbV9jYWNoZV9hbGxvYyhpZy5kZXNjX2NhY2hlLCBHRlBfTk9JTyk7CisJdHhfZGVzYyA9IGttZW1fY2FjaGVfemFsbG9jKGlnLmRlc2NfY2FjaGUsIEdGUF9BVE9NSUMpOwogCWlmICh0eF9kZXNjID09IE5VTEwpIHsKIAkJaXNlcl9lcnIoIkZhaWxlZCB0byBhbGxvYyBkZXNjIGZvciBwb3N0IGRhdGFvdXRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAl0eF9kZXNjLT50eXBlID0gSVNDU0lfVFhfREFUQU9VVDsKKwl0eF9kZXNjLT5pc2VyX2hlYWRlci5mbGFncyA9IElTRVJfVkVSOwogCW1lbWNweSgmdHhfZGVzYy0+aXNjc2lfaGVhZGVyLCBoZHIsIHNpemVvZihzdHJ1Y3QgaXNjc2lfaGRyKSk7CiAKLQkvKiBidWlsZCB0aGUgdHggZGVzYyByZWdkIGhlYWRlciBhbmQgYWRkIGl0IHRvIHRoZSB0eCBkZXNjIGR0byAqLwotCXNlbmRfZHRvID0gJnR4X2Rlc2MtPmR0bzsKLQlzZW5kX2R0by0+dGFzayA9IGlzZXJfdGFzazsKLQlpc2VyX2NyZWF0ZV9zZW5kX2Rlc2MoaXNlcl9jb25uLCB0eF9kZXNjKTsKKwkvKiBidWlsZCB0aGUgdHggZGVzYyAqLworCWlzZXJfaW5pdGlhbGl6ZV90YXNrX2hlYWRlcnModGFzaywgdHhfZGVzYyk7CiAKLQlpc2VyX3JlZ19zaW5nbGUoaXNlcl9jb25uLT5pYl9jb25uLT5kZXZpY2UsCi0JCQlzZW5kX2R0by0+cmVnZFswXSwgRE1BX1RPX0RFVklDRSk7Ci0KLQkvKiBhbGwgZGF0YSB3YXMgcmVnaXN0ZXJlZCBmb3IgUkRNQSwgd2UgY2FuIHVzZSB0aGUgbGtleSAqLwotCWlzZXJfZHRvX2FkZF9yZWdkX2J1ZmYoc2VuZF9kdG8sCi0JCQkgICAgICAgJmlzZXJfdGFzay0+cmRtYV9yZWdkW0lTRVJfRElSX09VVF0sCi0JCQkgICAgICAgYnVmX29mZnNldCwKLQkJCSAgICAgICBkYXRhX3NlZ19sZW4pOworCXJlZ2RfYnVmID0gJmlzZXJfdGFzay0+cmRtYV9yZWdkW0lTRVJfRElSX09VVF07CisJdHhfZHNnID0gJnR4X2Rlc2MtPnR4X3NnWzFdOworCXR4X2RzZy0+YWRkciAgICA9IHJlZ2RfYnVmLT5yZWcudmEgKyBidWZfb2Zmc2V0OworCXR4X2RzZy0+bGVuZ3RoICA9IGRhdGFfc2VnX2xlbjsKKwl0eF9kc2ctPmxrZXkgICAgPSByZWdkX2J1Zi0+cmVnLmxrZXk7CisJdHhfZGVzYy0+bnVtX3NnZSA9IDI7CiAKIAlpZiAoYnVmX29mZnNldCArIGRhdGFfc2VnX2xlbiA+IGlzZXJfdGFzay0+ZGF0YVtJU0VSX0RJUl9PVVRdLmRhdGFfbGVuKSB7CiAJCWlzZXJfZXJyKCJPZmZzZXQ6JWxkICYgRFNMOiVsZCBpbiBEYXRhLU91dCAiCkBAIC00ODUsMTIgKzM3NSwxMSBAQAogCQkgaXR0LCBidWZfb2Zmc2V0LCBkYXRhX3NlZ19sZW4pOwogCiAKLQllcnIgPSBpc2VyX3Bvc3Rfc2VuZCh0eF9kZXNjKTsKKwllcnIgPSBpc2VyX3Bvc3Rfc2VuZChpc2VyX2Nvbm4tPmliX2Nvbm4sIHR4X2Rlc2MpOwogCWlmICghZXJyKQogCQlyZXR1cm4gMDsKIAogc2VuZF9kYXRhX291dF9lcnJvcjoKLQlpc2VyX2R0b19idWZmc19yZWxlYXNlKHNlbmRfZHRvKTsKIAlrbWVtX2NhY2hlX2ZyZWUoaWcuZGVzY19jYWNoZSwgdHhfZGVzYyk7CiAJaXNlcl9lcnIoImNvbm4gJXAgZmFpbGVkIGVyciAlZFxuIixjb25uLCBlcnIpOwogCXJldHVybiBlcnI7CkBAIC01MDEsNjQgKzM5MCw0NCBAQAogewogCXN0cnVjdCBpc2NzaV9pc2VyX2Nvbm4gKmlzZXJfY29ubiA9IGNvbm4tPmRkX2RhdGE7CiAJc3RydWN0IGlzY3NpX2lzZXJfdGFzayAqaXNlcl90YXNrID0gdGFzay0+ZGRfZGF0YTsKLQlzdHJ1Y3QgaXNlcl9kZXNjICptZGVzYyA9ICZpc2VyX3Rhc2stPmRlc2M7Ci0Jc3RydWN0IGlzZXJfZHRvICpzZW5kX2R0byA9IE5VTEw7CisJc3RydWN0IGlzZXJfdHhfZGVzYyAqbWRlc2MgPSAmaXNlcl90YXNrLT5kZXNjOwogCXVuc2lnbmVkIGxvbmcgZGF0YV9zZWdfbGVuOwogCWludCBlcnIgPSAwOwotCXN0cnVjdCBpc2VyX3JlZ2RfYnVmICpyZWdkX2J1ZjsKIAlzdHJ1Y3QgaXNlcl9kZXZpY2UgKmRldmljZTsKLQl1bnNpZ25lZCBjaGFyIG9wY29kZTsKLQotCWlmICghaXNlcl9jb25uX3N0YXRlX2NvbXAoaXNlcl9jb25uLT5pYl9jb25uLCBJU0VSX0NPTk5fVVApKSB7Ci0JCWlzZXJfZXJyKCJGYWlsZWQgdG8gc2VuZCwgY29ubjogMHglcCBpcyBub3QgdXBcbiIsIGlzZXJfY29ubi0+aWJfY29ubik7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCi0JaWYgKGlzZXJfY2hlY2tfeG1pdChjb25uLCB0YXNrKSkKLQkJcmV0dXJuIC1FTk9CVUZTOwogCiAJLyogYnVpbGQgdGhlIHR4IGRlc2MgcmVnZCBoZWFkZXIgYW5kIGFkZCBpdCB0byB0aGUgdHggZGVzYyBkdG8gKi8KIAltZGVzYy0+dHlwZSA9IElTQ1NJX1RYX0NPTlRST0w7Ci0Jc2VuZF9kdG8gPSAmbWRlc2MtPmR0bzsKLQlzZW5kX2R0by0+dGFzayA9IE5VTEw7Ci0JaXNlcl9jcmVhdGVfc2VuZF9kZXNjKGlzZXJfY29ubiwgbWRlc2MpOworCWlzZXJfY3JlYXRlX3NlbmRfZGVzYyhpc2VyX2Nvbm4tPmliX2Nvbm4sIG1kZXNjKTsKIAogCWRldmljZSA9IGlzZXJfY29ubi0+aWJfY29ubi0+ZGV2aWNlOwogCi0JaXNlcl9yZWdfc2luZ2xlKGRldmljZSwgc2VuZF9kdG8tPnJlZ2RbMF0sIERNQV9UT19ERVZJQ0UpOwotCiAJZGF0YV9zZWdfbGVuID0gbnRvaDI0KHRhc2stPmhkci0+ZGxlbmd0aCk7CiAKIAlpZiAoZGF0YV9zZWdfbGVuID4gMCkgewotCQlyZWdkX2J1ZiA9ICZtZGVzYy0+ZGF0YV9yZWdkX2J1ZjsKLQkJbWVtc2V0KHJlZ2RfYnVmLCAwLCBzaXplb2Yoc3RydWN0IGlzZXJfcmVnZF9idWYpKTsKLQkJcmVnZF9idWYtPmRldmljZSA9IGRldmljZTsKLQkJcmVnZF9idWYtPnZpcnRfYWRkciA9IHRhc2stPmRhdGE7Ci0JCXJlZ2RfYnVmLT5kYXRhX3NpemUgPSB0YXNrLT5kYXRhX2NvdW50OwotCQlpc2VyX3JlZ19zaW5nbGUoZGV2aWNlLCByZWdkX2J1ZiwKLQkJCQlETUFfVE9fREVWSUNFKTsKLQkJaXNlcl9kdG9fYWRkX3JlZ2RfYnVmZihzZW5kX2R0bywgcmVnZF9idWYsCi0JCQkJICAgICAgIDAsCi0JCQkJICAgICAgIGRhdGFfc2VnX2xlbik7Ci0JfQotCi0Jb3Bjb2RlID0gdGFzay0+aGRyLT5vcGNvZGUgJiBJU0NTSV9PUENPREVfTUFTSzsKLQotCS8qIHBvc3QgcmVjdiBidWZmZXIgZm9yIHJlc3BvbnNlIGlmIG9uZSBpcyBleHBlY3RlZCAqLwotCWlmICghKG9wY29kZSA9PSBJU0NTSV9PUF9OT09QX09VVCAmJiB0YXNrLT5oZHItPml0dCA9PSBSRVNFUlZFRF9JVFQpKSB7Ci0JCWlmIChpc2VyX3Bvc3RfcmVjZWl2ZV9jb250cm9sKGNvbm4pICE9IDApIHsKLQkJCWlzZXJfZXJyKCJwb3N0X3Jjdl9idWZmIGZhaWxlZCFcbiIpOwotCQkJZXJyID0gLUVOT01FTTsKKwkJc3RydWN0IGliX3NnZSAqdHhfZHNnID0gJm1kZXNjLT50eF9zZ1sxXTsKKwkJaWYgKHRhc2sgIT0gY29ubi0+bG9naW5fdGFzaykgeworCQkJaXNlcl9lcnIoImRhdGEgcHJlc2VudCBvbiBub24gbG9naW4gdGFzayEhIVxuIik7CiAJCQlnb3RvIHNlbmRfY29udHJvbF9lcnJvcjsKIAkJfQorCQltZW1jcHkoaXNlcl9jb25uLT5pYl9jb25uLT5sb2dpbl9idWYsIHRhc2stPmRhdGEsCisJCQkJCQkJdGFzay0+ZGF0YV9jb3VudCk7CisJCXR4X2RzZy0+YWRkciAgICA9IGlzZXJfY29ubi0+aWJfY29ubi0+bG9naW5fZG1hOworCQl0eF9kc2ctPmxlbmd0aCAgPSBkYXRhX3NlZ19sZW47CisJCXR4X2RzZy0+bGtleSAgICA9IGRldmljZS0+bXItPmxrZXk7CisJCW1kZXNjLT5udW1fc2dlID0gMjsKIAl9CiAKLQllcnIgPSBpc2VyX3Bvc3Rfc2VuZChtZGVzYyk7CisJaWYgKHRhc2sgPT0gY29ubi0+bG9naW5fdGFzaykgeworCQllcnIgPSBpc2VyX3Bvc3RfcmVjdmwoaXNlcl9jb25uLT5pYl9jb25uKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gc2VuZF9jb250cm9sX2Vycm9yOworCX0KKworCWVyciA9IGlzZXJfcG9zdF9zZW5kKGlzZXJfY29ubi0+aWJfY29ubiwgbWRlc2MpOwogCWlmICghZXJyKQogCQlyZXR1cm4gMDsKIAogc2VuZF9jb250cm9sX2Vycm9yOgotCWlzZXJfZHRvX2J1ZmZzX3JlbGVhc2Uoc2VuZF9kdG8pOwogCWlzZXJfZXJyKCJjb25uICVwIGZhaWxlZCBlcnIgJWRcbiIsY29ubiwgZXJyKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtNTY2LDEwNCArNDM1LDcxIEBACiAvKioKICAqIGlzZXJfcmN2X2R0b19jb21wbGV0aW9uIC0gcmVjdiBEVE8gY29tcGxldGlvbgogICovCi12b2lkIGlzZXJfcmN2X2NvbXBsZXRpb24oc3RydWN0IGlzZXJfZGVzYyAqcnhfZGVzYywKLQkJCSB1bnNpZ25lZCBsb25nIGR0b194ZmVyX2xlbikKK3ZvaWQgaXNlcl9yY3ZfY29tcGxldGlvbihzdHJ1Y3QgaXNlcl9yeF9kZXNjICpyeF9kZXNjLAorCQkJIHVuc2lnbmVkIGxvbmcgcnhfeGZlcl9sZW4sCisJCQkgc3RydWN0IGlzZXJfY29ubiAqaWJfY29ubikKIHsKLQlzdHJ1Y3QgaXNlcl9kdG8gKmR0byA9ICZyeF9kZXNjLT5kdG87Ci0Jc3RydWN0IGlzY3NpX2lzZXJfY29ubiAqY29ubiA9IGR0by0+aWJfY29ubi0+aXNlcl9jb25uOwotCXN0cnVjdCBpc2NzaV90YXNrICp0YXNrOwotCXN0cnVjdCBpc2NzaV9pc2VyX3Rhc2sgKmlzZXJfdGFzazsKKwlzdHJ1Y3QgaXNjc2lfaXNlcl9jb25uICpjb25uID0gaWJfY29ubi0+aXNlcl9jb25uOwogCXN0cnVjdCBpc2NzaV9oZHIgKmhkcjsKLQljaGFyICAgKnJ4X2RhdGEgPSBOVUxMOwotCWludCAgICAgcnhfZGF0YV9sZW4gPSAwOwotCXVuc2lnbmVkIGNoYXIgb3Bjb2RlOworCXU2NCByeF9kbWE7CisJaW50IHJ4X2J1Zmxlbiwgb3V0c3RhbmRpbmcsIGNvdW50LCBlcnI7CisKKwkvKiBkaWZmZXJlbnRpYXRlIGJldHdlZW4gbG9naW4gdG8gYWxsIG90aGVyIFBEVXMgKi8KKwlpZiAoKGNoYXIgKilyeF9kZXNjID09IGliX2Nvbm4tPmxvZ2luX2J1ZikgeworCQlyeF9kbWEgPSBpYl9jb25uLT5sb2dpbl9kbWE7CisJCXJ4X2J1ZmxlbiA9IElTRVJfUlhfTE9HSU5fU0laRTsKKwl9IGVsc2UgeworCQlyeF9kbWEgPSByeF9kZXNjLT5kbWFfYWRkcjsKKwkJcnhfYnVmbGVuID0gSVNFUl9SWF9QQVlMT0FEX1NJWkU7CisJfQorCisJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaWJfY29ubi0+ZGV2aWNlLT5pYl9kZXZpY2UsIHJ4X2RtYSwKKwkJCXJ4X2J1ZmxlbiwgRE1BX0ZST01fREVWSUNFKTsKIAogCWhkciA9ICZyeF9kZXNjLT5pc2NzaV9oZWFkZXI7CiAKLQlpc2VyX2RiZygib3AgMHgleCBpdHQgMHgleFxuIiwgaGRyLT5vcGNvZGUsaGRyLT5pdHQpOworCWlzZXJfZGJnKCJvcCAweCV4IGl0dCAweCV4IGRsZW4gJWRcbiIsIGhkci0+b3Bjb2RlLAorCQkJaGRyLT5pdHQsIChpbnQpKHJ4X3hmZXJfbGVuIC0gSVNFUl9IRUFERVJTX0xFTikpOwogCi0JaWYgKGR0b194ZmVyX2xlbiA+IElTRVJfVE9UQUxfSEVBREVSU19MRU4pIHsgLyogd2UgaGF2ZSBkYXRhICovCi0JCXJ4X2RhdGFfbGVuID0gZHRvX3hmZXJfbGVuIC0gSVNFUl9UT1RBTF9IRUFERVJTX0xFTjsKLQkJcnhfZGF0YSAgICAgPSBkdG8tPnJlZ2RbMV0tPnZpcnRfYWRkcjsKLQkJcnhfZGF0YSAgICArPSBkdG8tPm9mZnNldFsxXTsKLQl9CisJaXNjc2lfaXNlcl9yZWN2KGNvbm4tPmlzY3NpX2Nvbm4sIGhkciwKKwkJcnhfZGVzYy0+ZGF0YSwgcnhfeGZlcl9sZW4gLSBJU0VSX0hFQURFUlNfTEVOKTsKIAotCW9wY29kZSA9IGhkci0+b3Bjb2RlICYgSVNDU0lfT1BDT0RFX01BU0s7Ci0KLQlpZiAob3Bjb2RlID09IElTQ1NJX09QX1NDU0lfQ01EX1JTUCkgewotCQlzcGluX2xvY2soJmNvbm4tPmlzY3NpX2Nvbm4tPnNlc3Npb24tPmxvY2spOwotCQl0YXNrID0gaXNjc2lfaXR0X3RvX2N0YXNrKGNvbm4tPmlzY3NpX2Nvbm4sIGhkci0+aXR0KTsKLQkJaWYgKHRhc2spCi0JCQlfX2lzY3NpX2dldF90YXNrKHRhc2spOwotCQlzcGluX3VubG9jaygmY29ubi0+aXNjc2lfY29ubi0+c2Vzc2lvbi0+bG9jayk7Ci0KLQkJaWYgKCF0YXNrKQotCQkJaXNlcl9lcnIoIml0dCBjYW4ndCBiZSBtYXRjaGVkIHRvIHRhc2shISEgIgotCQkJCSAiY29ubiAlcCBvcGNvZGUgJWQgaXR0ICVkXG4iLAotCQkJCSBjb25uLT5pc2NzaV9jb25uLCBvcGNvZGUsIGhkci0+aXR0KTsKLQkJZWxzZSB7Ci0JCQlpc2VyX3Rhc2sgPSB0YXNrLT5kZF9kYXRhOwotCQkJaXNlcl9kYmcoIml0dCAlZCB0YXNrICVwXG4iLGhkci0+aXR0LCB0YXNrKTsKLQkJCWlzZXJfdGFzay0+c3RhdHVzID0gSVNFUl9UQVNLX1NUQVRVU19DT01QTEVURUQ7Ci0JCQlpc2VyX3Rhc2tfcmRtYV9maW5hbGl6ZShpc2VyX3Rhc2spOwotCQkJaXNjc2lfcHV0X3Rhc2sodGFzayk7Ci0JCX0KLQl9Ci0JaXNlcl9kdG9fYnVmZnNfcmVsZWFzZShkdG8pOwotCi0JaXNjc2lfaXNlcl9yZWN2KGNvbm4tPmlzY3NpX2Nvbm4sIGhkciwgcnhfZGF0YSwgcnhfZGF0YV9sZW4pOwotCi0Ja2ZyZWUocnhfZGVzYy0+ZGF0YSk7Ci0Ja21lbV9jYWNoZV9mcmVlKGlnLmRlc2NfY2FjaGUsIHJ4X2Rlc2MpOworCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGliX2Nvbm4tPmRldmljZS0+aWJfZGV2aWNlLCByeF9kbWEsCisJCQlyeF9idWZsZW4sIERNQV9GUk9NX0RFVklDRSk7CiAKIAkvKiBkZWNyZW1lbnRpbmcgY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudCBvbmx5IC0tYWZ0ZXItLSBmcmVlaW5nIHRoZSAgICoKIAkgKiB0YXNrIGVsaW1pbmF0ZXMgdGhlIG5lZWQgdG8gd29ycnkgb24gdGFza3Mgd2hpY2ggYXJlIGNvbXBsZXRlZCBpbiAgICoKIAkgKiBwYXJhbGxlbCB0byB0aGUgZXhlY3V0aW9uIG9mIGlzZXJfY29ubl90ZXJtLiBTbyB0aGUgY29kZSB0aGF0IHdhaXRzICoKIAkgKiBmb3IgdGhlIHBvc3RlZCByeCBidWZzIHJlZmNvdW50IHRvIGJlY29tZSB6ZXJvIGhhbmRsZXMgZXZlcnl0aGluZyAgICovCi0JYXRvbWljX2RlYygmY29ubi0+aWJfY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudCk7CisJY29ubi0+aWJfY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudC0tOwogCi0JLyoKLQkgKiBpZiBhbiB1bmV4cGVjdGVkIFBEVSB3YXMgcmVjZWl2ZWQgdGhlbiB0aGUgcmVjdiB3ciBjb25zdW1lZCBtdXN0Ci0JICogYmUgcmVwbGFjZWQsIHRoaXMgaXMgZG9uZSBpbiB0aGUgbmV4dCBzZW5kIG9mIGEgY29udHJvbC10eXBlIFBEVQotCSAqLwotCWlmIChvcGNvZGUgPT0gSVNDU0lfT1BfTk9PUF9JTiAmJiBoZHItPml0dCA9PSBSRVNFUlZFRF9JVFQpIHsKLQkJLyogbm9wLWluIHdpdGggaXR0ID0gMHhmZmZmZmZmZiAqLwotCQlhdG9taWNfaW5jKCZjb25uLT5pYl9jb25uLT51bmV4cGVjdGVkX3BkdV9jb3VudCk7CisJaWYgKHJ4X2RtYSA9PSBpYl9jb25uLT5sb2dpbl9kbWEpCisJCXJldHVybjsKKworCW91dHN0YW5kaW5nID0gaWJfY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudDsKKwlpZiAob3V0c3RhbmRpbmcgKyBJU0VSX01JTl9QT1NURURfUlggPD0gSVNFUl9RUF9NQVhfUkVDVl9EVE9TKSB7CisJCWNvdW50ID0gbWluKElTRVJfUVBfTUFYX1JFQ1ZfRFRPUyAtIG91dHN0YW5kaW5nLAorCQkJCQkJSVNFUl9NSU5fUE9TVEVEX1JYKTsKKwkJZXJyID0gaXNlcl9wb3N0X3JlY3ZtKGliX2Nvbm4sIGNvdW50KTsKKwkJaWYgKGVycikKKwkJCWlzZXJfZXJyKCJwb3N0aW5nICVkIHJ4IGJ1ZnMgZXJyICVkXG4iLCBjb3VudCwgZXJyKTsKIAl9Ci0JZWxzZSBpZiAob3Bjb2RlID09IElTQ1NJX09QX0FTWU5DX0VWRU5UKSB7Ci0JCS8qIGFzeW5jcm9ub3VzIG1lc3NhZ2UgKi8KLQkJYXRvbWljX2luYygmY29ubi0+aWJfY29ubi0+dW5leHBlY3RlZF9wZHVfY291bnQpOwotCX0KLQkvKiBhIHJlamVjdCBQRFUgY29uc3VtZXMgdGhlIHJlY3YgYnVmIHBvc3RlZCBmb3IgdGhlIHJlc3BvbnNlICovCiB9CiAKLXZvaWQgaXNlcl9zbmRfY29tcGxldGlvbihzdHJ1Y3QgaXNlcl9kZXNjICp0eF9kZXNjKQordm9pZCBpc2VyX3NuZF9jb21wbGV0aW9uKHN0cnVjdCBpc2VyX3R4X2Rlc2MgKnR4X2Rlc2MsCisJCQlzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uKQogewotCXN0cnVjdCBpc2VyX2R0byAgICAgICAgKmR0byA9ICZ0eF9kZXNjLT5kdG87Ci0Jc3RydWN0IGlzZXJfY29ubiAgICAgICAqaWJfY29ubiA9IGR0by0+aWJfY29ubjsKLQlzdHJ1Y3QgaXNjc2lfaXNlcl9jb25uICppc2VyX2Nvbm4gPSBpYl9jb25uLT5pc2VyX2Nvbm47Ci0Jc3RydWN0IGlzY3NpX2Nvbm4gICAgICAqY29ubiA9IGlzZXJfY29ubi0+aXNjc2lfY29ubjsKIAlzdHJ1Y3QgaXNjc2lfdGFzayAqdGFzazsKLQlpbnQgcmVzdW1lX3R4ID0gMDsKKwlzdHJ1Y3QgaXNlcl9kZXZpY2UgKmRldmljZSA9IGliX2Nvbm4tPmRldmljZTsKIAotCWlzZXJfZGJnKCJJbml0aWF0b3IsIERhdGEgc2VudCBkdG89MHglcFxuIiwgZHRvKTsKLQotCWlzZXJfZHRvX2J1ZmZzX3JlbGVhc2UoZHRvKTsKLQotCWlmICh0eF9kZXNjLT50eXBlID09IElTQ1NJX1RYX0RBVEFPVVQpCisJaWYgKHR4X2Rlc2MtPnR5cGUgPT0gSVNDU0lfVFhfREFUQU9VVCkgeworCQlpYl9kbWFfdW5tYXBfc2luZ2xlKGRldmljZS0+aWJfZGV2aWNlLCB0eF9kZXNjLT5kbWFfYWRkciwKKwkJCQkJSVNFUl9IRUFERVJTX0xFTiwgRE1BX1RPX0RFVklDRSk7CiAJCWttZW1fY2FjaGVfZnJlZShpZy5kZXNjX2NhY2hlLCB0eF9kZXNjKTsKLQotCWlmIChhdG9taWNfcmVhZCgmaXNlcl9jb25uLT5pYl9jb25uLT5wb3N0X3NlbmRfYnVmX2NvdW50KSA9PQotCSAgICBJU0VSX1FQX01BWF9SRVFfRFRPUykKLQkJcmVzdW1lX3R4ID0gMTsKKwl9CiAKIAlhdG9taWNfZGVjKCZpYl9jb25uLT5wb3N0X3NlbmRfYnVmX2NvdW50KTsKIAotCWlmIChyZXN1bWVfdHgpIHsKLQkJaXNlcl9kYmcoIiVsZCByZXN1bWluZyB0eFxuIixqaWZmaWVzKTsKLQkJaXNjc2lfY29ubl9xdWV1ZV93b3JrKGNvbm4pOwotCX0KLQogCWlmICh0eF9kZXNjLT50eXBlID09IElTQ1NJX1RYX0NPTlRST0wpIHsKIAkJLyogdGhpcyBhcml0aG1ldGljIGlzIGxlZ2FsIGJ5IGxpYmlzY3NpIGRkX2RhdGEgYWxsb2NhdGlvbiAqLwogCQl0YXNrID0gKHZvaWQgKikgKChsb25nKSh2b2lkICopdHhfZGVzYyAtCkBAIC02OTIsNyArNTI4LDYgQEAKIAogdm9pZCBpc2VyX3Rhc2tfcmRtYV9maW5hbGl6ZShzdHJ1Y3QgaXNjc2lfaXNlcl90YXNrICppc2VyX3Rhc2spCiB7Ci0JaW50IGRlZmVycmVkOwogCWludCBpc19yZG1hX2FsaWduZWQgPSAxOwogCXN0cnVjdCBpc2VyX3JlZ2RfYnVmICpyZWdkOwogCkBAIC03MTAsMzIgKzU0NSwxNyBAQAogCiAJaWYgKGlzZXJfdGFzay0+ZGlyW0lTRVJfRElSX0lOXSkgewogCQlyZWdkID0gJmlzZXJfdGFzay0+cmRtYV9yZWdkW0lTRVJfRElSX0lOXTsKLQkJZGVmZXJyZWQgPSBpc2VyX3JlZ2RfYnVmZl9yZWxlYXNlKHJlZ2QpOwotCQlpZiAoZGVmZXJyZWQpIHsKLQkJCWlzZXJfZXJyKCIlZCByZWZlcmVuY2VzIHJlbWFpbiBmb3IgQlVGLUlOIHJkbWEgcmVnXG4iLAotCQkJCSBhdG9taWNfcmVhZCgmcmVnZC0+cmVmX2NvdW50KSk7Ci0JCX0KKwkJaWYgKHJlZ2QtPnJlZy5pc19mbXIpCisJCQlpc2VyX3VucmVnX21lbSgmcmVnZC0+cmVnKTsKIAl9CiAKIAlpZiAoaXNlcl90YXNrLT5kaXJbSVNFUl9ESVJfT1VUXSkgewogCQlyZWdkID0gJmlzZXJfdGFzay0+cmRtYV9yZWdkW0lTRVJfRElSX09VVF07Ci0JCWRlZmVycmVkID0gaXNlcl9yZWdkX2J1ZmZfcmVsZWFzZShyZWdkKTsKLQkJaWYgKGRlZmVycmVkKSB7Ci0JCQlpc2VyX2VycigiJWQgcmVmZXJlbmNlcyByZW1haW4gZm9yIEJVRi1PVVQgcmRtYSByZWdcbiIsCi0JCQkJIGF0b21pY19yZWFkKCZyZWdkLT5yZWZfY291bnQpKTsKLQkJfQorCQlpZiAocmVnZC0+cmVnLmlzX2ZtcikKKwkJCWlzZXJfdW5yZWdfbWVtKCZyZWdkLT5yZWcpOwogCX0KIAogICAgICAgIC8qIGlmIHRoZSBkYXRhIHdhcyB1bmFsaWduZWQsIGl0IHdhcyBhbHJlYWR5IHVubWFwcGVkIGFuZCB0aGVuIGNvcGllZCAqLwogICAgICAgIGlmIChpc19yZG1hX2FsaWduZWQpCiAJCWlzZXJfZG1hX3VubWFwX3Rhc2tfZGF0YShpc2VyX3Rhc2spOwogfQotCi12b2lkIGlzZXJfZHRvX2J1ZmZzX3JlbGVhc2Uoc3RydWN0IGlzZXJfZHRvICpkdG8pCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgZHRvLT5yZWdkX3ZlY3Rvcl9sZW47IGkrKykKLQkJaXNlcl9yZWdkX2J1ZmZfcmVsZWFzZShkdG8tPnJlZ2RbaV0pOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9tZW1vcnkuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX21lbW9yeS5jCmluZGV4IDI3NGM4ODMuLmZiODhkNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX21lbW9yeS5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX21lbW9yeS5jCkBAIC00MSw2MiArNDEsNiBAQAogI2RlZmluZSBJU0VSX0tNQUxMT0NfVEhSRVNIT0xEIDB4MjAwMDAgLyogMTI4SyAtIGttYWxsb2MgbGltaXQgKi8KIAogLyoqCi0gKiBEZWNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgZm9yIHRoZQotICogcmVnaXN0ZXJlZCBidWZmZXIgJiByZWxlYXNlcyBpdAotICoKLSAqIHJldHVybnMgMCBpZiByZWxlYXNlZCwgMSBpZiBkZWZlcnJlZAotICovCi1pbnQgaXNlcl9yZWdkX2J1ZmZfcmVsZWFzZShzdHJ1Y3QgaXNlcl9yZWdkX2J1ZiAqcmVnZF9idWYpCi17Ci0Jc3RydWN0IGliX2RldmljZSAqZGV2OwotCi0JaWYgKChhdG9taWNfcmVhZCgmcmVnZF9idWYtPnJlZl9jb3VudCkgPT0gMCkgfHwKLQkgICAgYXRvbWljX2RlY19hbmRfdGVzdCgmcmVnZF9idWYtPnJlZl9jb3VudCkpIHsKLQkJLyogaWYgd2UgdXNlZCB0aGUgZG1hIG1yLCB1bnJlZyBpcyBqdXN0IE5PUCAqLwotCQlpZiAocmVnZF9idWYtPnJlZy5pc19mbXIpCi0JCQlpc2VyX3VucmVnX21lbSgmcmVnZF9idWYtPnJlZyk7Ci0KLQkJaWYgKHJlZ2RfYnVmLT5kbWFfYWRkcikgewotCQkJZGV2ID0gcmVnZF9idWYtPmRldmljZS0+aWJfZGV2aWNlOwotCQkJaWJfZG1hX3VubWFwX3NpbmdsZShkZXYsCi0JCQkJCSByZWdkX2J1Zi0+ZG1hX2FkZHIsCi0JCQkJCSByZWdkX2J1Zi0+ZGF0YV9zaXplLAotCQkJCQkgcmVnZF9idWYtPmRpcmVjdGlvbik7Ci0JCX0KLQkJLyogZWxzZSB0aGlzIHJlZ2QgYnVmIGlzIGFzc29jaWF0ZWQgd2l0aCB0YXNrIHdoaWNoIHdlICovCi0JCS8qIGRtYV91bm1hcF9zaW5nbGUvc2cgbGF0ZXIgKi8KLQkJcmV0dXJuIDA7Ci0JfSBlbHNlIHsKLQkJaXNlcl9kYmcoIlJlbGVhc2UgZGVmZXJyZWQsIHJlZ2QuYnVmZjogMHglcFxuIiwgcmVnZF9idWYpOwotCQlyZXR1cm4gMTsKLQl9Ci19Ci0KLS8qKgotICogaXNlcl9yZWdfc2luZ2xlIC0gZmlsbHMgcmVnaXN0ZXJlZCBidWZmZXIgZGVzY3JpcHRvciB3aXRoCi0gKgkJICAgICByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24KLSAqLwotdm9pZCBpc2VyX3JlZ19zaW5nbGUoc3RydWN0IGlzZXJfZGV2aWNlICpkZXZpY2UsCi0JCSAgICAgc3RydWN0IGlzZXJfcmVnZF9idWYgKnJlZ2RfYnVmLAotCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcmVjdGlvbikKLXsKLQl1NjQgZG1hX2FkZHI7Ci0KLQlkbWFfYWRkciA9IGliX2RtYV9tYXBfc2luZ2xlKGRldmljZS0+aWJfZGV2aWNlLAotCQkJCSAgICAgcmVnZF9idWYtPnZpcnRfYWRkciwKLQkJCQkgICAgIHJlZ2RfYnVmLT5kYXRhX3NpemUsIGRpcmVjdGlvbik7Ci0JQlVHX09OKGliX2RtYV9tYXBwaW5nX2Vycm9yKGRldmljZS0+aWJfZGV2aWNlLCBkbWFfYWRkcikpOwotCi0JcmVnZF9idWYtPnJlZy5sa2V5ID0gZGV2aWNlLT5tci0+bGtleTsKLQlyZWdkX2J1Zi0+cmVnLmxlbiAgPSByZWdkX2J1Zi0+ZGF0YV9zaXplOwotCXJlZ2RfYnVmLT5yZWcudmEgICA9IGRtYV9hZGRyOwotCXJlZ2RfYnVmLT5yZWcuaXNfZm1yID0gMDsKLQotCXJlZ2RfYnVmLT5kbWFfYWRkciAgPSBkbWFfYWRkcjsKLQlyZWdkX2J1Zi0+ZGlyZWN0aW9uID0gZGlyZWN0aW9uOwotfQotCi0vKioKICAqIGlzZXJfc3RhcnRfcmRtYV91bmFsaWduZWRfc2cKICAqLwogc3RhdGljIGludCBpc2VyX3N0YXJ0X3JkbWFfdW5hbGlnbmVkX3NnKHN0cnVjdCBpc2NzaV9pc2VyX3Rhc2sgKmlzZXJfdGFzaywKQEAgLTEwOSwxMCArNTMsMTAgQEAKIAl1bnNpZ25lZCBsb25nICBjbWRfZGF0YV9sZW4gPSBkYXRhLT5kYXRhX2xlbjsKIAogCWlmIChjbWRfZGF0YV9sZW4gPiBJU0VSX0tNQUxMT0NfVEhSRVNIT0xEKQotCQltZW0gPSAodm9pZCAqKV9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX05PSU8sCisJCW1lbSA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhHRlBfQVRPTUlDLAogCQkgICAgICBpbG9nMihyb3VuZHVwX3Bvd19vZl90d28oY21kX2RhdGFfbGVuKSkgLSBQQUdFX1NISUZUKTsKIAllbHNlCi0JCW1lbSA9IGttYWxsb2MoY21kX2RhdGFfbGVuLCBHRlBfTk9JTyk7CisJCW1lbSA9IGttYWxsb2MoY21kX2RhdGFfbGVuLCBHRlBfQVRPTUlDKTsKIAogCWlmIChtZW0gPT0gTlVMTCkgewogCQlpc2VyX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbSBzaXplICVkICVkIGZvciBjb3B5aW5nIHNnbGlzdFxuIiwKQEAgLTQ3NCw5ICs0MTgsNSBAQAogCQkJcmV0dXJuIGVycjsKIAkJfQogCX0KLQotCS8qIHRha2UgYSByZWZlcmVuY2Ugb24gdGhpcyByZWdkIGJ1ZiBzdWNoIHRoYXQgaXQgd2lsbCBub3QgYmUgcmVsZWFzZWQgKgotCSAqIChlZyBpbiBzZW5kIGR0byBjb21wbGV0aW9uKSBiZWZvcmUgd2UgZ2V0IHRoZSBzY3NpIHJlc3BvbnNlICAgICAgICAgKi8KLQlhdG9taWNfaW5jKCZyZWdkX2J1Zi0+cmVmX2NvdW50KTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl92ZXJicy5jCmluZGV4IDg1NzlmMzIuLjMwOGQxN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX3ZlcmJzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYwpAQCAtMzcsOSArMzcsOCBAQAogI2luY2x1ZGUgImlzY3NpX2lzZXIuaCIKIAogI2RlZmluZSBJU0NTSV9JU0VSX01BWF9DT05OCTgKLSNkZWZpbmUgSVNFUl9NQVhfQ1FfTEVOCQkoKElTRVJfUVBfTUFYX1JFQ1ZfRFRPUyArIFwKLQkJCQlJU0VSX1FQX01BWF9SRVFfRFRPUykgKiAgIFwKLQkJCQkgSVNDU0lfSVNFUl9NQVhfQ09OTikKKyNkZWZpbmUgSVNFUl9NQVhfUlhfQ1FfTEVOCShJU0VSX1FQX01BWF9SRUNWX0RUT1MgKiBJU0NTSV9JU0VSX01BWF9DT05OKQorI2RlZmluZSBJU0VSX01BWF9UWF9DUV9MRU4JKElTRVJfUVBfTUFYX1JFUV9EVE9TICAqIElTQ1NJX0lTRVJfTUFYX0NPTk4pCiAKIHN0YXRpYyB2b2lkIGlzZXJfY3FfdGFza2xldF9mbih1bnNpZ25lZCBsb25nIGRhdGEpOwogc3RhdGljIHZvaWQgaXNlcl9jcV9jYWxsYmFjayhzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjcV9jb250ZXh0KTsKQEAgLTY3LDE1ICs2NiwyMyBAQAogCWlmIChJU19FUlIoZGV2aWNlLT5wZCkpCiAJCWdvdG8gcGRfZXJyOwogCi0JZGV2aWNlLT5jcSA9IGliX2NyZWF0ZV9jcShkZXZpY2UtPmliX2RldmljZSwKKwlkZXZpY2UtPnJ4X2NxID0gaWJfY3JlYXRlX2NxKGRldmljZS0+aWJfZGV2aWNlLAogCQkJCSAgaXNlcl9jcV9jYWxsYmFjaywKIAkJCQkgIGlzZXJfY3FfZXZlbnRfY2FsbGJhY2ssCiAJCQkJICAodm9pZCAqKWRldmljZSwKLQkJCQkgIElTRVJfTUFYX0NRX0xFTiwgMCk7Ci0JaWYgKElTX0VSUihkZXZpY2UtPmNxKSkKLQkJZ290byBjcV9lcnI7CisJCQkJICBJU0VSX01BWF9SWF9DUV9MRU4sIDApOworCWlmIChJU19FUlIoZGV2aWNlLT5yeF9jcSkpCisJCWdvdG8gcnhfY3FfZXJyOwogCi0JaWYgKGliX3JlcV9ub3RpZnlfY3EoZGV2aWNlLT5jcSwgSUJfQ1FfTkVYVF9DT01QKSkKKwlkZXZpY2UtPnR4X2NxID0gaWJfY3JlYXRlX2NxKGRldmljZS0+aWJfZGV2aWNlLAorCQkJCSAgTlVMTCwgaXNlcl9jcV9ldmVudF9jYWxsYmFjaywKKwkJCQkgICh2b2lkICopZGV2aWNlLAorCQkJCSAgSVNFUl9NQVhfVFhfQ1FfTEVOLCAwKTsKKworCWlmIChJU19FUlIoZGV2aWNlLT50eF9jcSkpCisJCWdvdG8gdHhfY3FfZXJyOworCisJaWYgKGliX3JlcV9ub3RpZnlfY3EoZGV2aWNlLT5yeF9jcSwgSUJfQ1FfTkVYVF9DT01QKSkKIAkJZ290byBjcV9hcm1fZXJyOwogCiAJdGFza2xldF9pbml0KCZkZXZpY2UtPmNxX3Rhc2tsZXQsCkBAIC05Myw4ICsxMDAsMTAgQEAKIGRtYV9tcl9lcnI6CiAJdGFza2xldF9raWxsKCZkZXZpY2UtPmNxX3Rhc2tsZXQpOwogY3FfYXJtX2VycjoKLQlpYl9kZXN0cm95X2NxKGRldmljZS0+Y3EpOwotY3FfZXJyOgorCWliX2Rlc3Ryb3lfY3EoZGV2aWNlLT50eF9jcSk7Cit0eF9jcV9lcnI6CisJaWJfZGVzdHJveV9jcShkZXZpY2UtPnJ4X2NxKTsKK3J4X2NxX2VycjoKIAlpYl9kZWFsbG9jX3BkKGRldmljZS0+cGQpOwogcGRfZXJyOgogCWlzZXJfZXJyKCJmYWlsZWQgdG8gYWxsb2NhdGUgYW4gSUIgcmVzb3VyY2VcbiIpOwpAQCAtMTEyLDExICsxMjEsMTMgQEAKIAl0YXNrbGV0X2tpbGwoJmRldmljZS0+Y3FfdGFza2xldCk7CiAKIAkodm9pZClpYl9kZXJlZ19tcihkZXZpY2UtPm1yKTsKLQkodm9pZClpYl9kZXN0cm95X2NxKGRldmljZS0+Y3EpOworCSh2b2lkKWliX2Rlc3Ryb3lfY3EoZGV2aWNlLT50eF9jcSk7CisJKHZvaWQpaWJfZGVzdHJveV9jcShkZXZpY2UtPnJ4X2NxKTsKIAkodm9pZClpYl9kZWFsbG9jX3BkKGRldmljZS0+cGQpOwogCiAJZGV2aWNlLT5tciA9IE5VTEw7Ci0JZGV2aWNlLT5jcSA9IE5VTEw7CisJZGV2aWNlLT50eF9jcSA9IE5VTEw7CisJZGV2aWNlLT5yeF9jcSA9IE5VTEw7CiAJZGV2aWNlLT5wZCA9IE5VTEw7CiB9CiAKQEAgLTEyOSwxMyArMTQwLDIzIEBACiB7CiAJc3RydWN0IGlzZXJfZGV2aWNlCSpkZXZpY2U7CiAJc3RydWN0IGliX3FwX2luaXRfYXR0cglpbml0X2F0dHI7Ci0JaW50CQkJcmV0OworCWludAkJCXJldCA9IC1FTk9NRU07CiAJc3RydWN0IGliX2Ztcl9wb29sX3BhcmFtIHBhcmFtczsKIAogCUJVR19PTihpYl9jb25uLT5kZXZpY2UgPT0gTlVMTCk7CiAKIAlkZXZpY2UgPSBpYl9jb25uLT5kZXZpY2U7CiAKKwlpYl9jb25uLT5sb2dpbl9idWYgPSBrbWFsbG9jKElTRVJfUlhfTE9HSU5fU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpYl9jb25uLT5sb2dpbl9idWYpIHsKKwkJZ290byBhbGxvY19lcnI7CisJCXJldCA9IC1FTk9NRU07CisJfQorCisJaWJfY29ubi0+bG9naW5fZG1hID0gaWJfZG1hX21hcF9zaW5nbGUoaWJfY29ubi0+ZGV2aWNlLT5pYl9kZXZpY2UsCisJCQkJKHZvaWQgKilpYl9jb25uLT5sb2dpbl9idWYsIElTRVJfUlhfTE9HSU5fU0laRSwKKwkJCQlETUFfRlJPTV9ERVZJQ0UpOworCiAJaWJfY29ubi0+cGFnZV92ZWMgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXNlcl9wYWdlX3ZlYykgKwogCQkJCSAgICAoc2l6ZW9mKHU2NCkgKiAoSVNDU0lfSVNFUl9TR19UQUJMRVNJWkUgKzEpKSwKIAkJCQkgICAgR0ZQX0tFUk5FTCk7CkBAIC0xNjksMTIgKzE5MCwxMiBAQAogCiAJaW5pdF9hdHRyLmV2ZW50X2hhbmRsZXIgPSBpc2VyX3FwX2V2ZW50X2NhbGxiYWNrOwogCWluaXRfYXR0ci5xcF9jb250ZXh0CT0gKHZvaWQgKilpYl9jb25uOwotCWluaXRfYXR0ci5zZW5kX2NxCT0gZGV2aWNlLT5jcTsKLQlpbml0X2F0dHIucmVjdl9jcQk9IGRldmljZS0+Y3E7CisJaW5pdF9hdHRyLnNlbmRfY3EJPSBkZXZpY2UtPnR4X2NxOworCWluaXRfYXR0ci5yZWN2X2NxCT0gZGV2aWNlLT5yeF9jcTsKIAlpbml0X2F0dHIuY2FwLm1heF9zZW5kX3dyICA9IElTRVJfUVBfTUFYX1JFUV9EVE9TOwogCWluaXRfYXR0ci5jYXAubWF4X3JlY3Zfd3IgID0gSVNFUl9RUF9NQVhfUkVDVl9EVE9TOwotCWluaXRfYXR0ci5jYXAubWF4X3NlbmRfc2dlID0gTUFYX1JFR0RfQlVGX1ZFQ1RPUl9MRU47Ci0JaW5pdF9hdHRyLmNhcC5tYXhfcmVjdl9zZ2UgPSAyOworCWluaXRfYXR0ci5jYXAubWF4X3NlbmRfc2dlID0gMjsKKwlpbml0X2F0dHIuY2FwLm1heF9yZWN2X3NnZSA9IDE7CiAJaW5pdF9hdHRyLnNxX3NpZ190eXBlCT0gSUJfU0lHTkFMX1JFUV9XUjsKIAlpbml0X2F0dHIucXBfdHlwZQk9IElCX1FQVF9SQzsKIApAQCAtMTkyLDYgKzIxMyw3IEBACiAJKHZvaWQpaWJfZGVzdHJveV9mbXJfcG9vbChpYl9jb25uLT5mbXJfcG9vbCk7CiBmbXJfcG9vbF9lcnI6CiAJa2ZyZWUoaWJfY29ubi0+cGFnZV92ZWMpOworCWtmcmVlKGliX2Nvbm4tPmxvZ2luX2J1Zik7CiBhbGxvY19lcnI6CiAJaXNlcl9lcnIoInVuYWJsZSB0byBhbGxvYyBtZW0gb3IgY3JlYXRlIHJlc291cmNlLCBlcnIgJWRcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTI3OCwxNyArMzAwLDYgQEAKIAltdXRleF91bmxvY2soJmlnLmRldmljZV9saXN0X211dGV4KTsKIH0KIAotaW50IGlzZXJfY29ubl9zdGF0ZV9jb21wKHN0cnVjdCBpc2VyX2Nvbm4gKmliX2Nvbm4sCi0JCQllbnVtIGlzZXJfaWJfY29ubl9zdGF0ZSBjb21wKQotewotCWludCByZXQ7Ci0KLQlzcGluX2xvY2tfYmgoJmliX2Nvbm4tPmxvY2spOwotCXJldCA9IChpYl9jb25uLT5zdGF0ZSA9PSBjb21wKTsKLQlzcGluX3VubG9ja19iaCgmaWJfY29ubi0+bG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCBpc2VyX2Nvbm5fc3RhdGVfY29tcF9leGNoKHN0cnVjdCBpc2VyX2Nvbm4gKmliX2Nvbm4sCiAJCQkJICAgICBlbnVtIGlzZXJfaWJfY29ubl9zdGF0ZSBjb21wLAogCQkJCSAgICAgZW51bSBpc2VyX2liX2Nvbm5fc3RhdGUgZXhjaCkKQEAgLTMxNCw3ICszMjUsNyBAQAogCW11dGV4X2xvY2soJmlnLmNvbm5saXN0X211dGV4KTsKIAlsaXN0X2RlbCgmaWJfY29ubi0+Y29ubl9saXN0KTsKIAltdXRleF91bmxvY2soJmlnLmNvbm5saXN0X211dGV4KTsKLQorCWlzZXJfZnJlZV9yeF9kZXNjcmlwdG9ycyhpYl9jb25uKTsKIAlpc2VyX2ZyZWVfaWJfY29ubl9yZXMoaWJfY29ubik7CiAJaWJfY29ubi0+ZGV2aWNlID0gTlVMTDsKIAkvKiBvbiBFVkVOVF9BRERSX0VSUk9SIHRoZXJlJ3Mgbm8gZGV2aWNlIHlldCBmb3IgdGhpcyBjb25uICovCkBAIC00NDIsNyArNDUzLDcgQEAKIAkJCQkgICBJU0NTSV9FUlJfQ09OTl9GQUlMRUQpOwogCiAJLyogQ29tcGxldGUgdGhlIHRlcm1pbmF0aW9uIHByb2Nlc3MgaWYgbm8gcG9zdHMgYXJlIHBlbmRpbmcgKi8KLQlpZiAoKGF0b21pY19yZWFkKCZpYl9jb25uLT5wb3N0X3JlY3ZfYnVmX2NvdW50KSA9PSAwKSAmJgorCWlmIChpYl9jb25uLT5wb3N0X3JlY3ZfYnVmX2NvdW50ID09IDAgJiYKIAkgICAgKGF0b21pY19yZWFkKCZpYl9jb25uLT5wb3N0X3NlbmRfYnVmX2NvdW50KSA9PSAwKSkgewogCQlpYl9jb25uLT5zdGF0ZSA9IElTRVJfQ09OTl9ET1dOOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmliX2Nvbm4tPndhaXQpOwpAQCAtNDg5LDkgKzUwMCw4IEBACiB7CiAJaWJfY29ubi0+c3RhdGUgPSBJU0VSX0NPTk5fSU5JVDsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpYl9jb25uLT53YWl0KTsKLQlhdG9taWNfc2V0KCZpYl9jb25uLT5wb3N0X3JlY3ZfYnVmX2NvdW50LCAwKTsKKwlpYl9jb25uLT5wb3N0X3JlY3ZfYnVmX2NvdW50ID0gMDsKIAlhdG9taWNfc2V0KCZpYl9jb25uLT5wb3N0X3NlbmRfYnVmX2NvdW50LCAwKTsKLQlhdG9taWNfc2V0KCZpYl9jb25uLT51bmV4cGVjdGVkX3BkdV9jb3VudCwgMCk7CiAJYXRvbWljX3NldCgmaWJfY29ubi0+cmVmY291bnQsIDEpOwogCUlOSVRfTElTVF9IRUFEKCZpYl9jb25uLT5jb25uX2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZpYl9jb25uLT5sb2NrKTsKQEAgLTYyNiwxMzYgKzYzNiw5NyBAQAogCXJlZy0+bWVtX2ggPSBOVUxMOwogfQogCi0vKioKLSAqIGlzZXJfZHRvX3RvX2lvdiAtIGJ1aWxkcyBJT1YgZnJvbSBhIGR0byBkZXNjcmlwdG9yCi0gKi8KLXN0YXRpYyB2b2lkIGlzZXJfZHRvX3RvX2lvdihzdHJ1Y3QgaXNlcl9kdG8gKmR0bywgc3RydWN0IGliX3NnZSAqaW92LCBpbnQgaW92X2xlbikKK2ludCBpc2VyX3Bvc3RfcmVjdmwoc3RydWN0IGlzZXJfY29ubiAqaWJfY29ubikKIHsKLQlpbnQJCSAgICAgaTsKLQlzdHJ1Y3QgaWJfc2dlCSAgICAgKnNnZTsKLQlzdHJ1Y3QgaXNlcl9yZWdkX2J1ZiAqcmVnZF9idWY7CisJc3RydWN0IGliX3JlY3Zfd3Igcnhfd3IsICpyeF93cl9mYWlsZWQ7CisJc3RydWN0IGliX3NnZQkgIHNnZTsKKwlpbnQgaWJfcmV0OwogCi0JaWYgKGR0by0+cmVnZF92ZWN0b3JfbGVuID4gaW92X2xlbikgewotCQlpc2VyX2VycigiaW92IHNpemUgJWQgdG9vIHNtYWxsIGZvciBwb3N0aW5nIGR0byBvZiBsZW4gJWRcbiIsCi0JCQkgaW92X2xlbiwgZHRvLT5yZWdkX3ZlY3Rvcl9sZW4pOwotCQlCVUcoKTsKLQl9CisJc2dlLmFkZHIgICA9IGliX2Nvbm4tPmxvZ2luX2RtYTsKKwlzZ2UubGVuZ3RoID0gSVNFUl9SWF9MT0dJTl9TSVpFOworCXNnZS5sa2V5ICAgPSBpYl9jb25uLT5kZXZpY2UtPm1yLT5sa2V5OwogCi0JZm9yIChpID0gMDsgaSA8IGR0by0+cmVnZF92ZWN0b3JfbGVuOyBpKyspIHsKLQkJc2dlCSAgICA9ICZpb3ZbaV07Ci0JCXJlZ2RfYnVmICA9IGR0by0+cmVnZFtpXTsKKwlyeF93ci53cl9pZCAgID0gKHVuc2lnbmVkIGxvbmcpaWJfY29ubi0+bG9naW5fYnVmOworCXJ4X3dyLnNnX2xpc3QgPSAmc2dlOworCXJ4X3dyLm51bV9zZ2UgPSAxOworCXJ4X3dyLm5leHQgICAgPSBOVUxMOwogCi0JCXNnZS0+YWRkciAgID0gcmVnZF9idWYtPnJlZy52YTsKLQkJc2dlLT5sZW5ndGggPSByZWdkX2J1Zi0+cmVnLmxlbjsKLQkJc2dlLT5sa2V5ICAgPSByZWdkX2J1Zi0+cmVnLmxrZXk7Ci0KLQkJaWYgKGR0by0+dXNlZF9zeltpXSA+IDApICAvKiBBZGp1c3Qgc2l6ZSAqLwotCQkJc2dlLT5sZW5ndGggPSBkdG8tPnVzZWRfc3pbaV07Ci0KLQkJLyogb2Zmc2V0IGFuZCBsZW5ndGggc2hvdWxkIG5vdCBleGNlZWQgdGhlIHJlZ2QgYnVmIGxlbmd0aCAqLwotCQlpZiAoc2dlLT5sZW5ndGggKyBkdG8tPm9mZnNldFtpXSA+IHJlZ2RfYnVmLT5yZWcubGVuKSB7Ci0JCQlpc2VyX2VycigiVXNlZCBsZW46JWxkICsgb2Zmc2V0OiVkLCBleGNlZWQgcmVnLmJ1Zi5sZW46IgotCQkJCSAiJWxkIGluIGR0bzoweCVwIFslZF0sIHZhOjB4JTA4bFhcbiIsCi0JCQkJICh1bnNpZ25lZCBsb25nKXNnZS0+bGVuZ3RoLCBkdG8tPm9mZnNldFtpXSwKLQkJCQkgKHVuc2lnbmVkIGxvbmcpcmVnZF9idWYtPnJlZy5sZW4sIGR0bywgaSwKLQkJCQkgKHVuc2lnbmVkIGxvbmcpc2dlLT5hZGRyKTsKLQkJCUJVRygpOwotCQl9Ci0KLQkJc2dlLT5hZGRyICs9IGR0by0+b2Zmc2V0W2ldOyAvKiBBZGp1c3Qgb2Zmc2V0ICovCi0JfQotfQotCi0vKioKLSAqIGlzZXJfcG9zdF9yZWN2IC0gUG9zdHMgYSByZWNlaXZlIGJ1ZmZlci4KLSAqCi0gKiByZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZQotICovCi1pbnQgaXNlcl9wb3N0X3JlY3Yoc3RydWN0IGlzZXJfZGVzYyAqcnhfZGVzYykKLXsKLQlpbnQJCSAgaWJfcmV0LCByZXRfdmFsID0gMDsKLQlzdHJ1Y3QgaWJfcmVjdl93ciByZWN2X3dyLCAqcmVjdl93cl9mYWlsZWQ7Ci0Jc3RydWN0IGliX3NnZQkgIGlvdlsyXTsKLQlzdHJ1Y3QgaXNlcl9jb25uICAqaWJfY29ubjsKLQlzdHJ1Y3QgaXNlcl9kdG8gICAqcmVjdl9kdG8gPSAmcnhfZGVzYy0+ZHRvOwotCi0JLyogUmV0cmlldmUgY29ubiAqLwotCWliX2Nvbm4gPSByZWN2X2R0by0+aWJfY29ubjsKLQotCWlzZXJfZHRvX3RvX2lvdihyZWN2X2R0bywgaW92LCAyKTsKLQotCXJlY3Zfd3IubmV4dAk9IE5VTEw7Ci0JcmVjdl93ci5zZ19saXN0ID0gaW92OwotCXJlY3Zfd3IubnVtX3NnZSA9IHJlY3ZfZHRvLT5yZWdkX3ZlY3Rvcl9sZW47Ci0JcmVjdl93ci53cl9pZAk9ICh1bnNpZ25lZCBsb25nKXJ4X2Rlc2M7Ci0KLQlhdG9taWNfaW5jKCZpYl9jb25uLT5wb3N0X3JlY3ZfYnVmX2NvdW50KTsKLQlpYl9yZXQJPSBpYl9wb3N0X3JlY3YoaWJfY29ubi0+cXAsICZyZWN2X3dyLCAmcmVjdl93cl9mYWlsZWQpOworCWliX2Nvbm4tPnBvc3RfcmVjdl9idWZfY291bnQrKzsKKwlpYl9yZXQJPSBpYl9wb3N0X3JlY3YoaWJfY29ubi0+cXAsICZyeF93ciwgJnJ4X3dyX2ZhaWxlZCk7CiAJaWYgKGliX3JldCkgewogCQlpc2VyX2VycigiaWJfcG9zdF9yZWN2IGZhaWxlZCByZXQ9JWRcbiIsIGliX3JldCk7Ci0JCWF0b21pY19kZWMoJmliX2Nvbm4tPnBvc3RfcmVjdl9idWZfY291bnQpOwotCQlyZXRfdmFsID0gLTE7CisJCWliX2Nvbm4tPnBvc3RfcmVjdl9idWZfY291bnQtLTsKKwl9CisJcmV0dXJuIGliX3JldDsKK30KKworaW50IGlzZXJfcG9zdF9yZWN2bShzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uLCBpbnQgY291bnQpCit7CisJc3RydWN0IGliX3JlY3Zfd3IgKnJ4X3dyLCAqcnhfd3JfZmFpbGVkOworCWludCBpLCBpYl9yZXQ7CisJdW5zaWduZWQgaW50IG15X3J4X2hlYWQgPSBpYl9jb25uLT5yeF9kZXNjX2hlYWQ7CisJc3RydWN0IGlzZXJfcnhfZGVzYyAqcnhfZGVzYzsKKworCWZvciAocnhfd3IgPSBpYl9jb25uLT5yeF93ciwgaSA9IDA7IGkgPCBjb3VudDsgaSsrLCByeF93cisrKSB7CisJCXJ4X2Rlc2MJCT0gJmliX2Nvbm4tPnJ4X2Rlc2NzW215X3J4X2hlYWRdOworCQlyeF93ci0+d3JfaWQJPSAodW5zaWduZWQgbG9uZylyeF9kZXNjOworCQlyeF93ci0+c2dfbGlzdAk9ICZyeF9kZXNjLT5yeF9zZzsKKwkJcnhfd3ItPm51bV9zZ2UJPSAxOworCQlyeF93ci0+bmV4dAk9IHJ4X3dyICsgMTsKKwkJbXlfcnhfaGVhZCA9IChteV9yeF9oZWFkICsgMSkgJiAoSVNFUl9RUF9NQVhfUkVDVl9EVE9TIC0gMSk7CiAJfQogCi0JcmV0dXJuIHJldF92YWw7CisJcnhfd3ItLTsKKwlyeF93ci0+bmV4dCA9IE5VTEw7IC8qIG1hcmsgZW5kIG9mIHdvcmsgcmVxdWVzdHMgbGlzdCAqLworCisJaWJfY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudCArPSBjb3VudDsKKwlpYl9yZXQJPSBpYl9wb3N0X3JlY3YoaWJfY29ubi0+cXAsIGliX2Nvbm4tPnJ4X3dyLCAmcnhfd3JfZmFpbGVkKTsKKwlpZiAoaWJfcmV0KSB7CisJCWlzZXJfZXJyKCJpYl9wb3N0X3JlY3YgZmFpbGVkIHJldD0lZFxuIiwgaWJfcmV0KTsKKwkJaWJfY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudCAtPSBjb3VudDsKKwl9IGVsc2UKKwkJaWJfY29ubi0+cnhfZGVzY19oZWFkID0gbXlfcnhfaGVhZDsKKwlyZXR1cm4gaWJfcmV0OwogfQogCisKIC8qKgogICogaXNlcl9zdGFydF9zZW5kIC0gSW5pdGlhdGUgYSBTZW5kIERUTyBvcGVyYXRpb24KICAqCiAgKiByZXR1cm5zIDAgb24gc3VjY2VzcywgLTEgb24gZmFpbHVyZQogICovCi1pbnQgaXNlcl9wb3N0X3NlbmQoc3RydWN0IGlzZXJfZGVzYyAqdHhfZGVzYykKK2ludCBpc2VyX3Bvc3Rfc2VuZChzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uLCBzdHJ1Y3QgaXNlcl90eF9kZXNjICp0eF9kZXNjKQogewotCWludAkJICBpYl9yZXQsIHJldF92YWwgPSAwOworCWludAkJICBpYl9yZXQ7CiAJc3RydWN0IGliX3NlbmRfd3Igc2VuZF93ciwgKnNlbmRfd3JfZmFpbGVkOwotCXN0cnVjdCBpYl9zZ2UJICBpb3ZbTUFYX1JFR0RfQlVGX1ZFQ1RPUl9MRU5dOwotCXN0cnVjdCBpc2VyX2Nvbm4gICppYl9jb25uOwotCXN0cnVjdCBpc2VyX2R0byAgICpkdG8gPSAmdHhfZGVzYy0+ZHRvOwogCi0JaWJfY29ubiA9IGR0by0+aWJfY29ubjsKLQotCWlzZXJfZHRvX3RvX2lvdihkdG8sIGlvdiwgTUFYX1JFR0RfQlVGX1ZFQ1RPUl9MRU4pOworCWliX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGliX2Nvbm4tPmRldmljZS0+aWJfZGV2aWNlLAorCQl0eF9kZXNjLT5kbWFfYWRkciwgSVNFUl9IRUFERVJTX0xFTiwgRE1BX1RPX0RFVklDRSk7CiAKIAlzZW5kX3dyLm5leHQJICAgPSBOVUxMOwogCXNlbmRfd3Iud3JfaWQJICAgPSAodW5zaWduZWQgbG9uZyl0eF9kZXNjOwotCXNlbmRfd3Iuc2dfbGlzdAkgICA9IGlvdjsKLQlzZW5kX3dyLm51bV9zZ2UJICAgPSBkdG8tPnJlZ2RfdmVjdG9yX2xlbjsKKwlzZW5kX3dyLnNnX2xpc3QJICAgPSB0eF9kZXNjLT50eF9zZzsKKwlzZW5kX3dyLm51bV9zZ2UJICAgPSB0eF9kZXNjLT5udW1fc2dlOwogCXNlbmRfd3Iub3Bjb2RlCSAgID0gSUJfV1JfU0VORDsKLQlzZW5kX3dyLnNlbmRfZmxhZ3MgPSBkdG8tPm5vdGlmeV9lbmFibGUgPyBJQl9TRU5EX1NJR05BTEVEIDogMDsKKwlzZW5kX3dyLnNlbmRfZmxhZ3MgPSBJQl9TRU5EX1NJR05BTEVEOwogCiAJYXRvbWljX2luYygmaWJfY29ubi0+cG9zdF9zZW5kX2J1Zl9jb3VudCk7CiAKIAlpYl9yZXQgPSBpYl9wb3N0X3NlbmQoaWJfY29ubi0+cXAsICZzZW5kX3dyLCAmc2VuZF93cl9mYWlsZWQpOwogCWlmIChpYl9yZXQpIHsKLQkJaXNlcl9lcnIoIkZhaWxlZCB0byBzdGFydCBTRU5EIERUTywgZHRvOiAweCVwLCBJT1YgbGVuOiAlZFxuIiwKLQkJCSBkdG8sIGR0by0+cmVnZF92ZWN0b3JfbGVuKTsKIAkJaXNlcl9lcnIoImliX3Bvc3Rfc2VuZCBmYWlsZWQsIHJldDolZFxuIiwgaWJfcmV0KTsKIAkJYXRvbWljX2RlYygmaWJfY29ubi0+cG9zdF9zZW5kX2J1Zl9jb3VudCk7Ci0JCXJldF92YWwgPSAtMTsKIAl9Ci0KLQlyZXR1cm4gcmV0X3ZhbDsKKwlyZXR1cm4gaWJfcmV0OwogfQogCi1zdGF0aWMgdm9pZCBpc2VyX2hhbmRsZV9jb21wX2Vycm9yKHN0cnVjdCBpc2VyX2Rlc2MgKmRlc2MpCitzdGF0aWMgdm9pZCBpc2VyX2hhbmRsZV9jb21wX2Vycm9yKHN0cnVjdCBpc2VyX3R4X2Rlc2MgKmRlc2MsCisJCQkJc3RydWN0IGlzZXJfY29ubiAqaWJfY29ubikKIHsKLQlzdHJ1Y3QgaXNlcl9kdG8gICpkdG8gICAgID0gJmRlc2MtPmR0bzsKLQlzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uID0gZHRvLT5pYl9jb25uOwotCi0JaXNlcl9kdG9fYnVmZnNfcmVsZWFzZShkdG8pOwotCi0JaWYgKGRlc2MtPnR5cGUgPT0gSVNDU0lfUlgpIHsKLQkJa2ZyZWUoZGVzYy0+ZGF0YSk7CisJaWYgKGRlc2MgJiYgZGVzYy0+dHlwZSA9PSBJU0NTSV9UWF9EQVRBT1VUKQogCQlrbWVtX2NhY2hlX2ZyZWUoaWcuZGVzY19jYWNoZSwgZGVzYyk7Ci0JCWF0b21pY19kZWMoJmliX2Nvbm4tPnBvc3RfcmVjdl9idWZfY291bnQpOwotCX0gZWxzZSB7IC8qIHR5cGUgaXMgVFggY29udHJvbC9jb21tYW5kL2RhdGFvdXQgKi8KLQkJaWYgKGRlc2MtPnR5cGUgPT0gSVNDU0lfVFhfREFUQU9VVCkKLQkJCWttZW1fY2FjaGVfZnJlZShpZy5kZXNjX2NhY2hlLCBkZXNjKTsKLQkJYXRvbWljX2RlYygmaWJfY29ubi0+cG9zdF9zZW5kX2J1Zl9jb3VudCk7Ci0JfQogCi0JaWYgKGF0b21pY19yZWFkKCZpYl9jb25uLT5wb3N0X3JlY3ZfYnVmX2NvdW50KSA9PSAwICYmCisJaWYgKGliX2Nvbm4tPnBvc3RfcmVjdl9idWZfY291bnQgPT0gMCAmJgogCSAgICBhdG9taWNfcmVhZCgmaWJfY29ubi0+cG9zdF9zZW5kX2J1Zl9jb3VudCkgPT0gMCkgewogCQkvKiBnZXR0aW5nIGhlcmUgd2hlbiB0aGUgc3RhdGUgaXMgVVAgbWVhbnMgdGhhdCB0aGUgY29ubiBpcyAqCiAJCSAqIGJlaW5nIHRlcm1pbmF0ZWQgYXN5bmNocm9ub3VzbHkgZnJvbSB0aGUgaVNDU0kgbGF5ZXIncyAgICoKQEAgLTc3NCwzMiArNzQ1LDc0IEBACiAJfQogfQogCitzdGF0aWMgaW50IGlzZXJfZHJhaW5fdHhfY3Eoc3RydWN0IGlzZXJfZGV2aWNlICAqZGV2aWNlKQoreworCXN0cnVjdCBpYl9jcSAgKmNxID0gZGV2aWNlLT50eF9jcTsKKwlzdHJ1Y3QgaWJfd2MgIHdjOworCXN0cnVjdCBpc2VyX3R4X2Rlc2MgKnR4X2Rlc2M7CisJc3RydWN0IGlzZXJfY29ubiAqaWJfY29ubjsKKwlpbnQgY29tcGxldGVkX3R4ID0gMDsKKworCXdoaWxlIChpYl9wb2xsX2NxKGNxLCAxLCAmd2MpID09IDEpIHsKKwkJdHhfZGVzYwk9IChzdHJ1Y3QgaXNlcl90eF9kZXNjICopICh1bnNpZ25lZCBsb25nKSB3Yy53cl9pZDsKKwkJaWJfY29ubiA9IHdjLnFwLT5xcF9jb250ZXh0OworCQlpZiAod2Muc3RhdHVzID09IElCX1dDX1NVQ0NFU1MpIHsKKwkJCWlmICh3Yy5vcGNvZGUgPT0gSUJfV0NfU0VORCkKKwkJCQlpc2VyX3NuZF9jb21wbGV0aW9uKHR4X2Rlc2MsIGliX2Nvbm4pOworCQkJZWxzZQorCQkJCWlzZXJfZXJyKCJleHBlY3RlZCBvcGNvZGUgJWQgZ290ICVkXG4iLAorCQkJCQlJQl9XQ19TRU5ELCB3Yy5vcGNvZGUpOworCQl9IGVsc2UgeworCQkJaXNlcl9lcnIoInR4IGlkICVsbHggc3RhdHVzICVkIHZlbmRfZXJyICV4XG4iLAorCQkJCXdjLndyX2lkLCB3Yy5zdGF0dXMsIHdjLnZlbmRvcl9lcnIpOworCQkJYXRvbWljX2RlYygmaWJfY29ubi0+cG9zdF9zZW5kX2J1Zl9jb3VudCk7CisJCQlpc2VyX2hhbmRsZV9jb21wX2Vycm9yKHR4X2Rlc2MsIGliX2Nvbm4pOworCQl9CisJCWNvbXBsZXRlZF90eCsrOworCX0KKwlyZXR1cm4gY29tcGxldGVkX3R4OworfQorCisKIHN0YXRpYyB2b2lkIGlzZXJfY3FfdGFza2xldF9mbih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJIHN0cnVjdCBpc2VyX2RldmljZSAgKmRldmljZSA9IChzdHJ1Y3QgaXNlcl9kZXZpY2UgKilkYXRhOwotCSBzdHJ1Y3QgaWJfY3EJICAgICAqY3EgPSBkZXZpY2UtPmNxOworCSBzdHJ1Y3QgaWJfY3EJICAgICAqY3EgPSBkZXZpY2UtPnJ4X2NxOwogCSBzdHJ1Y3QgaWJfd2MJICAgICB3YzsKLQkgc3RydWN0IGlzZXJfZGVzYyAgICAqZGVzYzsKKwkgc3RydWN0IGlzZXJfcnhfZGVzYyAqZGVzYzsKIAkgdW5zaWduZWQgbG9uZwkgICAgIHhmZXJfbGVuOworCXN0cnVjdCBpc2VyX2Nvbm4gKmliX2Nvbm47CisJaW50IGNvbXBsZXRlZF90eCwgY29tcGxldGVkX3J4OworCWNvbXBsZXRlZF90eCA9IGNvbXBsZXRlZF9yeCA9IDA7CiAKIAl3aGlsZSAoaWJfcG9sbF9jcShjcSwgMSwgJndjKSA9PSAxKSB7Ci0JCWRlc2MJID0gKHN0cnVjdCBpc2VyX2Rlc2MgKikgKHVuc2lnbmVkIGxvbmcpIHdjLndyX2lkOworCQlkZXNjCSA9IChzdHJ1Y3QgaXNlcl9yeF9kZXNjICopICh1bnNpZ25lZCBsb25nKSB3Yy53cl9pZDsKIAkJQlVHX09OKGRlc2MgPT0gTlVMTCk7Ci0KKwkJaWJfY29ubiA9IHdjLnFwLT5xcF9jb250ZXh0OwogCQlpZiAod2Muc3RhdHVzID09IElCX1dDX1NVQ0NFU1MpIHsKLQkJCWlmIChkZXNjLT50eXBlID09IElTQ1NJX1JYKSB7CisJCQlpZiAod2Mub3Bjb2RlID09IElCX1dDX1JFQ1YpIHsKIAkJCQl4ZmVyX2xlbiA9ICh1bnNpZ25lZCBsb25nKXdjLmJ5dGVfbGVuOwotCQkJCWlzZXJfcmN2X2NvbXBsZXRpb24oZGVzYywgeGZlcl9sZW4pOwotCQkJfSBlbHNlIC8qIHR5cGUgPT0gSVNDU0lfVFhfQ09OVFJPTC9TQ1NJX0NNRC9ET1VUICovCi0JCQkJaXNlcl9zbmRfY29tcGxldGlvbihkZXNjKTsKKwkJCQlpc2VyX3Jjdl9jb21wbGV0aW9uKGRlc2MsIHhmZXJfbGVuLCBpYl9jb25uKTsKKwkJCX0gZWxzZQorCQkJCWlzZXJfZXJyKCJleHBlY3RlZCBvcGNvZGUgJWQgZ290ICVkXG4iLAorCQkJCQlJQl9XQ19SRUNWLCB3Yy5vcGNvZGUpOwogCQl9IGVsc2UgewotCQkJaXNlcl9lcnIoImNvbXAgdy4gZXJyb3Igb3AgJWQgc3RhdHVzICVkXG4iLGRlc2MtPnR5cGUsd2Muc3RhdHVzKTsKLQkJCWlzZXJfaGFuZGxlX2NvbXBfZXJyb3IoZGVzYyk7CisJCQlpZiAod2Muc3RhdHVzICE9IElCX1dDX1dSX0ZMVVNIX0VSUikKKwkJCQlpc2VyX2VycigicnggaWQgJWxseCBzdGF0dXMgJWQgdmVuZF9lcnIgJXhcbiIsCisJCQkJCXdjLndyX2lkLCB3Yy5zdGF0dXMsIHdjLnZlbmRvcl9lcnIpOworCQkJaWJfY29ubi0+cG9zdF9yZWN2X2J1Zl9jb3VudC0tOworCQkJaXNlcl9oYW5kbGVfY29tcF9lcnJvcihOVUxMLCBpYl9jb25uKTsKIAkJfQorCQljb21wbGV0ZWRfcngrKzsKKwkJaWYgKCEoY29tcGxldGVkX3J4ICYgNjMpKQorCQkJY29tcGxldGVkX3R4ICs9IGlzZXJfZHJhaW5fdHhfY3EoZGV2aWNlKTsKIAl9CiAJLyogI3dhcm5pbmcgIml0IGlzIGFzc3VtZWQgaGVyZSB0aGF0IGFybWluZyBDUSBvbmx5IG9uY2UgaXRzIGVtcHR5IiAqCiAJICogIiB3b3VsZCBub3QgY2F1c2UgaW50ZXJydXB0cyB0byBiZSBtaXNzZWQiICAgICAgICAgICAgICAgICAgICAgICAqLwogCWliX3JlcV9ub3RpZnlfY3EoY3EsIElCX0NRX05FWFRfQ09NUCk7CisKKwljb21wbGV0ZWRfdHggKz0gaXNlcl9kcmFpbl90eF9jcShkZXZpY2UpOworCWlzZXJfZGJnKCJnb3QgJWQgcnggJWQgdHggY29tcGxldGlvbnNcbiIsIGNvbXBsZXRlZF9yeCwgY29tcGxldGVkX3R4KTsKIH0KIAogc3RhdGljIHZvaWQgaXNlcl9jcV9jYWxsYmFjayhzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICpjcV9jb250ZXh0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuYwppbmRleCA1NGM4ZmUyNS4uZWQzZjllYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9zcnAvaWJfc3JwLmMKQEAgLTgwLDcgKzgwLDggQEAKIAogc3RhdGljIHZvaWQgc3JwX2FkZF9vbmUoc3RydWN0IGliX2RldmljZSAqZGV2aWNlKTsKIHN0YXRpYyB2b2lkIHNycF9yZW1vdmVfb25lKHN0cnVjdCBpYl9kZXZpY2UgKmRldmljZSk7Ci1zdGF0aWMgdm9pZCBzcnBfY29tcGxldGlvbihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICp0YXJnZXRfcHRyKTsKK3N0YXRpYyB2b2lkIHNycF9yZWN2X2NvbXBsZXRpb24oc3RydWN0IGliX2NxICpjcSwgdm9pZCAqdGFyZ2V0X3B0cik7CitzdGF0aWMgdm9pZCBzcnBfc2VuZF9jb21wbGV0aW9uKHN0cnVjdCBpYl9jcSAqY3EsIHZvaWQgKnRhcmdldF9wdHIpOwogc3RhdGljIGludCBzcnBfY21faGFuZGxlcihzdHJ1Y3QgaWJfY21faWQgKmNtX2lkLCBzdHJ1Y3QgaWJfY21fZXZlbnQgKmV2ZW50KTsKIAogc3RhdGljIHN0cnVjdCBzY3NpX3RyYW5zcG9ydF90ZW1wbGF0ZSAqaWJfc3JwX3RyYW5zcG9ydF90ZW1wbGF0ZTsKQEAgLTIyNywxNCArMjI4LDIxIEBACiAJaWYgKCFpbml0X2F0dHIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JdGFyZ2V0LT5jcSA9IGliX2NyZWF0ZV9jcSh0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT5kZXYsCi0JCQkJICBzcnBfY29tcGxldGlvbiwgTlVMTCwgdGFyZ2V0LCBTUlBfQ1FfU0laRSwgMCk7Ci0JaWYgKElTX0VSUih0YXJnZXQtPmNxKSkgewotCQlyZXQgPSBQVFJfRVJSKHRhcmdldC0+Y3EpOwotCQlnb3RvIG91dDsKKwl0YXJnZXQtPnJlY3ZfY3EgPSBpYl9jcmVhdGVfY3EodGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+ZGV2LAorCQkJCSAgICAgICBzcnBfcmVjdl9jb21wbGV0aW9uLCBOVUxMLCB0YXJnZXQsIFNSUF9SUV9TSVpFLCAwKTsKKwlpZiAoSVNfRVJSKHRhcmdldC0+cmVjdl9jcSkpIHsKKwkJcmV0ID0gUFRSX0VSUih0YXJnZXQtPnJlY3ZfY3EpOworCQlnb3RvIGVycjsKIAl9CiAKLQlpYl9yZXFfbm90aWZ5X2NxKHRhcmdldC0+Y3EsIElCX0NRX05FWFRfQ09NUCk7CisJdGFyZ2V0LT5zZW5kX2NxID0gaWJfY3JlYXRlX2NxKHRhcmdldC0+c3JwX2hvc3QtPnNycF9kZXYtPmRldiwKKwkJCQkgICAgICAgc3JwX3NlbmRfY29tcGxldGlvbiwgTlVMTCwgdGFyZ2V0LCBTUlBfU1FfU0laRSwgMCk7CisJaWYgKElTX0VSUih0YXJnZXQtPnNlbmRfY3EpKSB7CisJCXJldCA9IFBUUl9FUlIodGFyZ2V0LT5zZW5kX2NxKTsKKwkJZ290byBlcnJfcmVjdl9jcTsKKwl9CisKKwlpYl9yZXFfbm90aWZ5X2NxKHRhcmdldC0+cmVjdl9jcSwgSUJfQ1FfTkVYVF9DT01QKTsKIAogCWluaXRfYXR0ci0+ZXZlbnRfaGFuZGxlciAgICAgICA9IHNycF9xcF9ldmVudDsKIAlpbml0X2F0dHItPmNhcC5tYXhfc2VuZF93ciAgICAgPSBTUlBfU1FfU0laRTsKQEAgLTI0MywyNCArMjUxLDMyIEBACiAJaW5pdF9hdHRyLT5jYXAubWF4X3NlbmRfc2dlICAgID0gMTsKIAlpbml0X2F0dHItPnNxX3NpZ190eXBlICAgICAgICAgPSBJQl9TSUdOQUxfQUxMX1dSOwogCWluaXRfYXR0ci0+cXBfdHlwZSAgICAgICAgICAgICA9IElCX1FQVF9SQzsKLQlpbml0X2F0dHItPnNlbmRfY3EgICAgICAgICAgICAgPSB0YXJnZXQtPmNxOwotCWluaXRfYXR0ci0+cmVjdl9jcSAgICAgICAgICAgICA9IHRhcmdldC0+Y3E7CisJaW5pdF9hdHRyLT5zZW5kX2NxICAgICAgICAgICAgID0gdGFyZ2V0LT5zZW5kX2NxOworCWluaXRfYXR0ci0+cmVjdl9jcSAgICAgICAgICAgICA9IHRhcmdldC0+cmVjdl9jcTsKIAogCXRhcmdldC0+cXAgPSBpYl9jcmVhdGVfcXAodGFyZ2V0LT5zcnBfaG9zdC0+c3JwX2Rldi0+cGQsIGluaXRfYXR0cik7CiAJaWYgKElTX0VSUih0YXJnZXQtPnFwKSkgewogCQlyZXQgPSBQVFJfRVJSKHRhcmdldC0+cXApOwotCQlpYl9kZXN0cm95X2NxKHRhcmdldC0+Y3EpOwotCQlnb3RvIG91dDsKKwkJZ290byBlcnJfc2VuZF9jcTsKIAl9CiAKIAlyZXQgPSBzcnBfaW5pdF9xcCh0YXJnZXQsIHRhcmdldC0+cXApOwotCWlmIChyZXQpIHsKLQkJaWJfZGVzdHJveV9xcCh0YXJnZXQtPnFwKTsKLQkJaWJfZGVzdHJveV9jcSh0YXJnZXQtPmNxKTsKLQkJZ290byBvdXQ7Ci0JfQorCWlmIChyZXQpCisJCWdvdG8gZXJyX3FwOwogCi1vdXQ6CisJa2ZyZWUoaW5pdF9hdHRyKTsKKwlyZXR1cm4gMDsKKworZXJyX3FwOgorCWliX2Rlc3Ryb3lfcXAodGFyZ2V0LT5xcCk7CisKK2Vycl9zZW5kX2NxOgorCWliX2Rlc3Ryb3lfY3EodGFyZ2V0LT5zZW5kX2NxKTsKKworZXJyX3JlY3ZfY3E6CisJaWJfZGVzdHJveV9jcSh0YXJnZXQtPnJlY3ZfY3EpOworCitlcnI6CiAJa2ZyZWUoaW5pdF9hdHRyKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjcwLDcgKzI4Niw4IEBACiAJaW50IGk7CiAKIAlpYl9kZXN0cm95X3FwKHRhcmdldC0+cXApOwotCWliX2Rlc3Ryb3lfY3EodGFyZ2V0LT5jcSk7CisJaWJfZGVzdHJveV9jcSh0YXJnZXQtPnNlbmRfY3EpOworCWliX2Rlc3Ryb3lfY3EodGFyZ2V0LT5yZWN2X2NxKTsKIAogCWZvciAoaSA9IDA7IGkgPCBTUlBfUlFfU0laRTsgKytpKQogCQlzcnBfZnJlZV9pdSh0YXJnZXQtPnNycF9ob3N0LCB0YXJnZXQtPnJ4X3JpbmdbaV0pOwpAQCAtNTY4LDcgKzU4NSw5IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKLQl3aGlsZSAoaWJfcG9sbF9jcSh0YXJnZXQtPmNxLCAxLCAmd2MpID4gMCkKKwl3aGlsZSAoaWJfcG9sbF9jcSh0YXJnZXQtPnJlY3ZfY3EsIDEsICZ3YykgPiAwKQorCQk7IC8qIG5vdGhpbmcgKi8KKwl3aGlsZSAoaWJfcG9sbF9jcSh0YXJnZXQtPnNlbmRfY3EsIDEsICZ3YykgPiAwKQogCQk7IC8qIG5vdGhpbmcgKi8KIAogCXNwaW5fbG9ja19pcnEodGFyZ2V0LT5zY3NpX2hvc3QtPmhvc3RfbG9jayk7CkBAIC04NTEsNyArODcwLDcgQEAKIAlzdHJ1Y3Qgc3JwX2l1ICppdTsKIAl1OCBvcGNvZGU7CiAKLQlpdSA9IHRhcmdldC0+cnhfcmluZ1t3Yy0+d3JfaWQgJiB+U1JQX09QX1JFQ1ZdOworCWl1ID0gdGFyZ2V0LT5yeF9yaW5nW3djLT53cl9pZF07CiAKIAlkZXYgPSB0YXJnZXQtPnNycF9ob3N0LT5zcnBfZGV2LT5kZXY7CiAJaWJfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoZGV2LCBpdS0+ZG1hLCB0YXJnZXQtPm1heF90aV9pdV9sZW4sCkBAIC04OTgsNyArOTE3LDcgQEAKIAkJCQkgICAgICBETUFfRlJPTV9ERVZJQ0UpOwogfQogCi1zdGF0aWMgdm9pZCBzcnBfY29tcGxldGlvbihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICp0YXJnZXRfcHRyKQorc3RhdGljIHZvaWQgc3JwX3JlY3ZfY29tcGxldGlvbihzdHJ1Y3QgaWJfY3EgKmNxLCB2b2lkICp0YXJnZXRfcHRyKQogewogCXN0cnVjdCBzcnBfdGFyZ2V0X3BvcnQgKnRhcmdldCA9IHRhcmdldF9wdHI7CiAJc3RydWN0IGliX3djIHdjOwpAQCAtOTA3LDE3ICs5MjYsMzEgQEAKIAl3aGlsZSAoaWJfcG9sbF9jcShjcSwgMSwgJndjKSA+IDApIHsKIAkJaWYgKHdjLnN0YXR1cykgewogCQkJc2hvc3RfcHJpbnRrKEtFUk5fRVJSLCB0YXJnZXQtPnNjc2lfaG9zdCwKLQkJCQkgICAgIFBGWCAiZmFpbGVkICVzIHN0YXR1cyAlZFxuIiwKLQkJCQkgICAgIHdjLndyX2lkICYgU1JQX09QX1JFQ1YgPyAicmVjZWl2ZSIgOiAic2VuZCIsCisJCQkJICAgICBQRlggImZhaWxlZCByZWNlaXZlIHN0YXR1cyAlZFxuIiwKIAkJCQkgICAgIHdjLnN0YXR1cyk7CiAJCQl0YXJnZXQtPnFwX2luX2Vycm9yID0gMTsKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKHdjLndyX2lkICYgU1JQX09QX1JFQ1YpCi0JCQlzcnBfaGFuZGxlX3JlY3YodGFyZ2V0LCAmd2MpOwotCQllbHNlCi0JCQkrK3RhcmdldC0+dHhfdGFpbDsKKwkJc3JwX2hhbmRsZV9yZWN2KHRhcmdldCwgJndjKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHNycF9zZW5kX2NvbXBsZXRpb24oc3RydWN0IGliX2NxICpjcSwgdm9pZCAqdGFyZ2V0X3B0cikKK3sKKwlzdHJ1Y3Qgc3JwX3RhcmdldF9wb3J0ICp0YXJnZXQgPSB0YXJnZXRfcHRyOworCXN0cnVjdCBpYl93YyB3YzsKKworCXdoaWxlIChpYl9wb2xsX2NxKGNxLCAxLCAmd2MpID4gMCkgeworCQlpZiAod2Muc3RhdHVzKSB7CisJCQlzaG9zdF9wcmludGsoS0VSTl9FUlIsIHRhcmdldC0+c2NzaV9ob3N0LAorCQkJCSAgICAgUEZYICJmYWlsZWQgc2VuZCBzdGF0dXMgJWRcbiIsCisJCQkJICAgICB3Yy5zdGF0dXMpOworCQkJdGFyZ2V0LT5xcF9pbl9lcnJvciA9IDE7CisJCQlicmVhazsKKwkJfQorCisJCSsrdGFyZ2V0LT50eF90YWlsOwogCX0KIH0KIApAQCAtOTMwLDcgKzk2Myw3IEBACiAJaW50IHJldDsKIAogCW5leHQgCSA9IHRhcmdldC0+cnhfaGVhZCAmIChTUlBfUlFfU0laRSAtIDEpOwotCXdyLndyX2lkID0gbmV4dCB8IFNSUF9PUF9SRUNWOworCXdyLndyX2lkID0gbmV4dDsKIAlpdSAJID0gdGFyZ2V0LT5yeF9yaW5nW25leHRdOwogCiAJbGlzdC5hZGRyICAgPSBpdS0+ZG1hOwpAQCAtOTcwLDYgKzEwMDMsOCBAQAogewogCXMzMiBtaW4gPSAocmVxX3R5cGUgPT0gU1JQX1JFUV9UQVNLX01HTVQpID8gMSA6IDI7CiAKKwlzcnBfc2VuZF9jb21wbGV0aW9uKHRhcmdldC0+c2VuZF9jcSwgdGFyZ2V0KTsKKwogCWlmICh0YXJnZXQtPnR4X2hlYWQgLSB0YXJnZXQtPnR4X3RhaWwgPj0gU1JQX1NRX1NJWkUpCiAJCXJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL3NycC9pYl9zcnAuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5oCmluZGV4IGUxODViOTAuLjVhODBlYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvc3JwL2liX3NycC5oCkBAIC02MCw3ICs2MCw2IEBACiAJU1JQX1JRX1NISUZUICAgIAk9IDYsCiAJU1JQX1JRX1NJWkUJCT0gMSA8PCBTUlBfUlFfU0hJRlQsCiAJU1JQX1NRX1NJWkUJCT0gU1JQX1JRX1NJWkUgLSAxLAotCVNSUF9DUV9TSVpFCQk9IFNSUF9TUV9TSVpFICsgU1JQX1JRX1NJWkUsCiAKIAlTUlBfVEFHX1RTS19NR01UCT0gMSA8PCAoU1JQX1JRX1NISUZUICsgMSksCiAKQEAgLTY5LDggKzY4LDYgQEAKIAlTUlBfRk1SX0RJUlRZX1NJWkUJPSBTUlBfRk1SX1BPT0xfU0laRSAvIDQKIH07CiAKLSNkZWZpbmUgU1JQX09QX1JFQ1YJCSgxIDw8IDMxKQotCiBlbnVtIHNycF90YXJnZXRfc3RhdGUgewogCVNSUF9UQVJHRVRfTElWRSwKIAlTUlBfVEFSR0VUX0NPTk5FQ1RJTkcsCkBAIC0xMzMsNyArMTMwLDggQEAKIAlpbnQJCQlwYXRoX3F1ZXJ5X2lkOwogCiAJc3RydWN0IGliX2NtX2lkCSAgICAgICAqY21faWQ7Ci0Jc3RydWN0IGliX2NxCSAgICAgICAqY3E7CisJc3RydWN0IGliX2NxCSAgICAgICAqcmVjdl9jcTsKKwlzdHJ1Y3QgaWJfY3EJICAgICAgICpzZW5kX2NxOwogCXN0cnVjdCBpYl9xcAkgICAgICAgKnFwOwogCiAJaW50CQkJbWF4X3RpX2l1X2xlbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbG9jb21va2JkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL2xvY29tb2tiZC5jCmluZGV4IDljYWVkMzAuLmIxYWIyOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvbG9jb21va2JkLmMKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9sb2NvbW9rYmQuYwpAQCAtMTkyLDExICsxOTIsMTggQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBsb2NvbW9rYmRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgbG9jb21va2JkICpsb2NvbW9rYmQgPSBkZXZfaWQ7CisJdTE2IHI7CisKKwlyID0gbG9jb21vX3JlYWRsKGxvY29tb2tiZC0+YmFzZSArIExPQ09NT19LSUMpOworCWlmICgociAmIDB4MDAwMSkgPT0gMCkKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCisJbG9jb21vX3dyaXRlbChyICYgfjB4MDEwMCwgbG9jb21va2JkLT5iYXNlICsgTE9DT01PX0tJQyk7IC8qIEFjayAqLworCiAJLyoqIHdhaXQgY2hhdHRlcmluZyBkZWxheSAqKi8KIAl1ZGVsYXkoMTAwKTsKIAogCWxvY29tb2tiZF9zY2Fua2V5Ym9hcmQobG9jb21va2JkKTsKLQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtMjEwLDYgKzIxNywyNSBAQAogCWxvY29tb2tiZF9zY2Fua2V5Ym9hcmQobG9jb21va2JkKTsKIH0KIAorc3RhdGljIGludCBsb2NvbW9rYmRfb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IGxvY29tb2tiZCAqbG9jb21va2JkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKwl1MTYgcjsKKwkKKwlyID0gbG9jb21vX3JlYWRsKGxvY29tb2tiZC0+YmFzZSArIExPQ09NT19LSUMpIHwgMHgwMDEwOworCWxvY29tb193cml0ZWwociwgbG9jb21va2JkLT5iYXNlICsgTE9DT01PX0tJQyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxvY29tb2tiZF9jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpCit7CisJc3RydWN0IGxvY29tb2tiZCAqbG9jb21va2JkID0gaW5wdXRfZ2V0X2RydmRhdGEoZGV2KTsKKwl1MTYgcjsKKwkKKwlyID0gbG9jb21vX3JlYWRsKGxvY29tb2tiZC0+YmFzZSArIExPQ09NT19LSUMpICYgfjB4MDAxMDsKKwlsb2NvbW9fd3JpdGVsKHIsIGxvY29tb2tiZC0+YmFzZSArIExPQ09NT19LSUMpOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBsb2NvbW9rYmRfcHJvYmUoc3RydWN0IGxvY29tb19kZXYgKmRldikKIHsKIAlzdHJ1Y3QgbG9jb21va2JkICpsb2NvbW9rYmQ7CkBAIC0yNTMsNiArMjc5LDggQEAKIAlpbnB1dF9kZXYtPmlkLnZlbmRvciA9IDB4MDAwMTsKIAlpbnB1dF9kZXYtPmlkLnByb2R1Y3QgPSAweDAwMDE7CiAJaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMHgwMTAwOworCWlucHV0X2Rldi0+b3BlbiA9IGxvY29tb2tiZF9vcGVuOworCWlucHV0X2Rldi0+Y2xvc2UgPSBsb2NvbW9rYmRfY2xvc2U7CiAJaW5wdXRfZGV2LT5kZXYucGFyZW50ID0gJmRldi0+ZGV2OwogCiAJaW5wdXRfZGV2LT5ldmJpdFswXSA9IEJJVF9NQVNLKEVWX0tFWSkgfCBCSVRfTUFTSyhFVl9SRVApIHwKQEAgLTI2MSw2ICsyODksOCBAQAogCWlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2YobG9jb21va2JkX2tleWNvZGVbMF0pOwogCWlucHV0X2Rldi0+a2V5Y29kZW1heCA9IEFSUkFZX1NJWkUobG9jb21va2JkX2tleWNvZGUpOwogCisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBsb2NvbW9rYmQpOworCiAJbWVtY3B5KGxvY29tb2tiZC0+a2V5Y29kZSwgbG9jb21va2JkX2tleWNvZGUsIHNpemVvZihsb2NvbW9rYmQtPmtleWNvZGUpKTsKIAlmb3IgKGkgPSAwOyBpIDwgTE9DT01PS0JEX05VTUtFWVM7IGkrKykKIAkJc2V0X2JpdChsb2NvbW9rYmQtPmtleWNvZGVbaV0sIGlucHV0X2Rldi0+a2V5Yml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy84OHBtODYweF9vbmtleS5jIGIvZHJpdmVycy9pbnB1dC9taXNjLzg4cG04NjB4X29ua2V5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlhNDhlOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy84OHBtODYweF9vbmtleS5jCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogODhwbTg2MHhfb25rZXkuYyAtIE1hcnZlbGwgODhQTTg2MHggT05LRVkgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqICAgICAgSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzCisgKiBhcmNoaXZlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvODhwbTg2MHguaD4KKworI2RlZmluZSBQTTg2MDdfV0FLRVVQCQkweDBiCisKKyNkZWZpbmUgTE9OR19PTktFWV9FTgkJKDEgPDwgMSkKKyNkZWZpbmUgT05LRVlfU1RBVFVTCQkoMSA8PCAwKQorCitzdHJ1Y3QgcG04NjB4X29ua2V5X2luZm8geworCXN0cnVjdCBpbnB1dF9kZXYJKmlkZXY7CisJc3RydWN0IHBtODYweF9jaGlwCSpjaGlwOworCXN0cnVjdCBpMmNfY2xpZW50CSppMmM7CisJc3RydWN0IGRldmljZQkJKmRldjsKKwlpbnQJCQlpcnE7Cit9OworCisvKiA4OFBNODYweCBnaXZlcyB1cyBhbiBpbnRlcnJ1cHQgd2hlbiBPTktFWSBpcyBoZWxkICovCitzdGF0aWMgaXJxcmV0dXJuX3QgcG04NjB4X29ua2V5X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcG04NjB4X29ua2V5X2luZm8gKmluZm8gPSBkYXRhOworCWludCByZXQ7CisKKwlyZXQgPSBwbTg2MHhfcmVnX3JlYWQoaW5mby0+aTJjLCBQTTg2MDdfU1RBVFVTXzIpOworCXJldCAmPSBPTktFWV9TVEFUVVM7CisJaW5wdXRfcmVwb3J0X2tleShpbmZvLT5pZGV2LCBLRVlfUE9XRVIsIHJldCk7CisJaW5wdXRfc3luYyhpbmZvLT5pZGV2KTsKKworCS8qIEVuYWJsZSA4LXNlY29uZCBsb25nIG9ua2V5IGRldGVjdGlvbiAqLworCXBtODYweF9zZXRfYml0cyhpbmZvLT5pMmMsIFBNODYwN19XQUtFVVAsIDMsIExPTkdfT05LRVlfRU4pOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcG04NjB4X29ua2V5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHBtODYweF9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCBwbTg2MHhfb25rZXlfaW5mbyAqaW5mbzsKKwlpbnQgaXJxLCByZXQ7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIElSUSByZXNvdXJjZSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBtODYweF9vbmtleV9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpbmZvLT5jaGlwID0gY2hpcDsKKwlpbmZvLT5pMmMgPSAoY2hpcC0+aWQgPT0gQ0hJUF9QTTg2MDcpID8gY2hpcC0+Y2xpZW50IDogY2hpcC0+Y29tcGFuaW9uOworCWluZm8tPmRldiA9ICZwZGV2LT5kZXY7CisJaW5mby0+aXJxID0gaXJxICsgY2hpcC0+aXJxX2Jhc2U7CisKKwlpbmZvLT5pZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCFpbmZvLT5pZGV2KSB7CisJCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIGlucHV0IGRldlxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWluZm8tPmlkZXYtPm5hbWUgPSAiODhwbTg2MHhfb24iOworCWluZm8tPmlkZXYtPnBoeXMgPSAiODhwbTg2MHhfb24vaW5wdXQwIjsKKwlpbmZvLT5pZGV2LT5pZC5idXN0eXBlID0gQlVTX0kyQzsKKwlpbmZvLT5pZGV2LT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwlpbmZvLT5pcnEgPSBpcnE7CisJaW5mby0+aWRldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpOworCWluZm8tPmlkZXYtPmtleWJpdFtCSVRfV09SRChLRVlfUE9XRVIpXSA9IEJJVF9NQVNLKEtFWV9QT1dFUik7CisKKwlyZXQgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5mby0+aWRldik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGNoaXAtPmRldiwgIkNhbid0IHJlZ2lzdGVyIGlucHV0IGRldmljZTogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0X3JlZzsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpbmZvLT5pcnEsIE5VTEwsIHBtODYweF9vbmtleV9oYW5kbGVyLAorCQkJCSAgIElSUUZfT05FU0hPVCwgIm9ua2V5IiwgaW5mbyk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBJUlE6ICMlZDogJWRcbiIsCisJCQlpbmZvLT5pcnEsIHJldCk7CisJCWdvdG8gb3V0X2lycTsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKKwlyZXR1cm4gMDsKKworb3V0X2lycToKKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShpbmZvLT5pZGV2KTsKKwlrZnJlZShpbmZvKTsKKwlyZXR1cm4gcmV0OworCitvdXRfcmVnOgorCWlucHV0X2ZyZWVfZGV2aWNlKGluZm8tPmlkZXYpOworb3V0OgorCWtmcmVlKGluZm8pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHBtODYweF9vbmtleV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcG04NjB4X29ua2V5X2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWZyZWVfaXJxKGluZm8tPmlycSwgaW5mbyk7CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoaW5mby0+aWRldik7CisJa2ZyZWUoaW5mbyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBtODYweF9vbmtleV9kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIjg4cG04NjB4LW9ua2V5IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gcG04NjB4X29ua2V5X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocG04NjB4X29ua2V5X3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbTg2MHhfb25rZXlfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnBtODYweF9vbmtleV9kcml2ZXIpOworfQorbW9kdWxlX2luaXQocG04NjB4X29ua2V5X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgcG04NjB4X29ua2V5X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcG04NjB4X29ua2V5X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChwbTg2MHhfb25rZXlfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTWFydmVsbCA4OFBNODYweCBPTktFWSBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIkhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvbWlzYy9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcKaW5kZXggMTZlYzUyMy4uNzA5N2JmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9taXNjL0tjb25maWcKQEAgLTEyLDYgKzEyLDE2IEBACiAKIGlmIElOUFVUX01JU0MKIAorY29uZmlnIElOUFVUXzg4UE04NjBYX09OS0VZCisJdHJpc3RhdGUgIjg4UE04NjB4IE9OS0VZIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBNRkRfODhQTTg2MFgKKwloZWxwCisJICBTdXBwb3J0IHRoZSBPTktFWSBvZiBNYXJ2ZWxsIDg4UE04NjB4IFBNSUNzIGFzIGFuIGlucHV0IGRldmljZQorCSAgcmVwb3J0aW5nIHBvd2VyIGJ1dHRvbiBzdGF0dXMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIDg4cG04NjB4X29ua2V5LgorCiBjb25maWcgSU5QVVRfUENTUEtSCiAJdHJpc3RhdGUgIlBDIFNwZWFrZXIgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFBDU1BLUl9QTEFURk9STQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlIGIvZHJpdmVycy9pbnB1dC9taXNjL01ha2VmaWxlCmluZGV4IGE4Yjg0ODUuLmI2MTE2MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvbWlzYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L21pc2MvTWFrZWZpbGUKQEAgLTQsNiArNCw3IEBACiAKICMgRWFjaCBjb25maWd1cmF0aW9uIG9wdGlvbiBlbmFibGVzIGEgbGlzdCBvZiBmaWxlcy4KIAorb2JqLSQoQ09ORklHX0lOUFVUXzg4UE04NjBYX09OS0VZKQkrPSA4OHBtODYweF9vbmtleS5vCiBvYmotJChDT05GSUdfSU5QVVRfQVBBTkVMKQkJKz0gYXBhbmVsLm8KIG9iai0kKENPTkZJR19JTlBVVF9BVElfUkVNT1RFKQkJKz0gYXRpX3JlbW90ZS5vCiBvYmotJChDT05GSUdfSU5QVVRfQVRJX1JFTU9URTIpCQkrPSBhdGlfcmVtb3RlMi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5oIGIvZHJpdmVycy9pbnB1dC9taXNjL3llYWxpbmsuaAppbmRleCA0OGFmMGJlLi4xZTBmNTIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L21pc2MveWVhbGluay5oCisrKyBiL2RyaXZlcnMvaW5wdXQvbWlzYy95ZWFsaW5rLmgKQEAgLTEyNyw3ICsxMjcsNyBAQAogICogeWxkX3N0YXR1cyBzdHJ1Y3QuCiAgKi8KIAotLyogTENELCBlYWNoIHNlZ21lbnQgbXVzdCBiZSBkcml2ZW4gc2VwZXJhdGVseS4KKy8qIExDRCwgZWFjaCBzZWdtZW50IG11c3QgYmUgZHJpdmVuIHNlcGFyYXRlbHkuCiAgKgogICogTGF5b3V0OgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYyBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDIuYwppbmRleCBiNTRhZWU3Li5mZjRkNzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLmMKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi5jCkBAIC00MzAsNyArNDMwLDcgQEAKIAl9CiAKIAlpZiAoaTgwNDJfcGxhdGZvcm1fZmlsdGVyICYmIGk4MDQyX3BsYXRmb3JtX2ZpbHRlcihkYXRhLCBzdHIsIHNlcmlvKSkgewotCQlkYmcoIkZpbHRlcmVkIG91dCBieSBwbGF0ZnJvbSBmaWx0ZXJcbiIpOworCQlkYmcoIkZpbHRlcmVkIG91dCBieSBwbGF0Zm9ybSBmaWx0ZXJcbiIpOwogCQlyZXR1cm4gdHJ1ZTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdGFibGV0L2FpcHRlay5jIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvYWlwdGVrLmMKaW5kZXggN2QwMDVhMy4uNGJlMDM5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90YWJsZXQvYWlwdGVrLmMKKysrIGIvZHJpdmVycy9pbnB1dC90YWJsZXQvYWlwdGVrLmMKQEAgLTM2Miw3ICszNjIsNyBAQAogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBNYXAgdmFsdWVzIHRvIHN0cmluZ3MgYW5kIGJhY2suIEV2ZXJ5IG1hcCBzaG91ZGwgaGF2ZSB0aGUgZm9sbG93aW5nCisgKiBNYXAgdmFsdWVzIHRvIHN0cmluZ3MgYW5kIGJhY2suIEV2ZXJ5IG1hcCBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nCiAgKiBhcyBpdHMgbGFzdCBlbGVtZW50OiB7IE5VTEwsIEFJUFRFS19JTlZBTElEX1ZBTFVFIH0uCiAgKi8KICNkZWZpbmUgQUlQVEVLX0lOVkFMSURfVkFMVUUJLTEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vODhwbTg2MHgtdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vODhwbTg2MHgtdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODZiYjQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi84OHBtODYweC10cy5jCkBAIC0wLDAgKzEsMjM2IEBACisvKgorICogVG91Y2hzY3JlZW4gZHJpdmVyIGZvciBNYXJ2ZWxsIDg4UE04NjB4CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKiAJSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC84OHBtODYweC5oPgorCisjZGVmaW5lIE1FQVNfTEVOCQkoOCkKKyNkZWZpbmUgQUNDVVJBVEVfQklUCQkoMTIpCisKKy8qIHRvdWNoIHJlZ2lzdGVyICovCisjZGVmaW5lIE1FQVNfRU4zCQkoMHg1MikKKworI2RlZmluZSBNRUFTX1RTSVhfMQkJKDB4OEQpCisjZGVmaW5lIE1FQVNfVFNJWF8yCQkoMHg4RSkKKyNkZWZpbmUgTUVBU19UU0lZXzEJCSgweDhGKQorI2RlZmluZSBNRUFTX1RTSVlfMgkJKDB4OTApCisjZGVmaW5lIE1FQVNfVFNJWjFfMQkJKDB4OTEpCisjZGVmaW5lIE1FQVNfVFNJWjFfMgkJKDB4OTIpCisjZGVmaW5lIE1FQVNfVFNJWjJfMQkJKDB4OTMpCisjZGVmaW5lIE1FQVNfVFNJWjJfMgkJKDB4OTQpCisKKy8qIGJpdCBkZWZpbml0aW9ucyBvZiB0b3VjaCAqLworI2RlZmluZSBNRUFTX1BEX0VOCQkoMSA8PCAzKQorI2RlZmluZSBNRUFTX1RTSVhfRU4JCSgxIDw8IDQpCisjZGVmaW5lIE1FQVNfVFNJWV9FTgkJKDEgPDwgNSkKKyNkZWZpbmUgTUVBU19UU0laMV9FTgkJKDEgPDwgNikKKyNkZWZpbmUgTUVBU19UU0laMl9FTgkJKDEgPDwgNykKKworc3RydWN0IHBtODYweF90b3VjaCB7CisJc3RydWN0IGlucHV0X2RldiAqaWRldjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjOworCXN0cnVjdCBwbTg2MHhfY2hpcCAqY2hpcDsKKwlpbnQgaXJxOworCWludCByZXNfeDsJCS8qIHJlc2lzdG9yIG9mIFhwbGF0ZSAqLworfTsKKworc3RhdGljIGlycXJldHVybl90IHBtODYweF90b3VjaF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBtODYweF90b3VjaCAqdG91Y2ggPSBkYXRhOworCXN0cnVjdCBwbTg2MHhfY2hpcCAqY2hpcCA9IHRvdWNoLT5jaGlwOworCXVuc2lnbmVkIGNoYXIgYnVmW01FQVNfTEVOXTsKKwlpbnQgeCwgeSwgcGVuX2Rvd247CisJaW50IHoxLCB6MiwgcnQgPSAwOworCWludCByZXQ7CisKKwlyZXQgPSBwbTg2MHhfYnVsa19yZWFkKHRvdWNoLT5pMmMsIE1FQVNfVFNJWF8xLCBNRUFTX0xFTiwgYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlwZW5fZG93biA9IGJ1ZlsxXSAmICgxIDw8IDYpOworCXggPSAoKGJ1ZlswXSAmIDB4RkYpIDw8IDQpIHwgKGJ1ZlsxXSAmIDB4MEYpOworCXkgPSAoKGJ1ZlsyXSAmIDB4RkYpIDw8IDQpIHwgKGJ1ZlszXSAmIDB4MEYpOworCXoxID0gKChidWZbNF0gJiAweEZGKSA8PCA0KSB8IChidWZbNV0gJiAweDBGKTsKKwl6MiA9ICgoYnVmWzZdICYgMHhGRikgPDwgNCkgfCAoYnVmWzddICYgMHgwRik7CisKKwlpZiAocGVuX2Rvd24pIHsKKwkJaWYgKCh4ICE9IDApICYmICh6MSAhPSAwKSAmJiAodG91Y2gtPnJlc194ICE9IDApKSB7CisJCQlydCA9IHoyIC8gejEgLSAxOworCQkJcnQgPSAocnQgKiB0b3VjaC0+cmVzX3ggKiB4KSA+PiBBQ0NVUkFURV9CSVQ7CisJCQlkZXZfZGJnKGNoaXAtPmRldiwgInoxOiVkLCB6MjolZCwgcnQ6JWRcbiIsCisJCQkJejEsIHoyLCBydCk7CisJCX0KKwkJaW5wdXRfcmVwb3J0X2Ficyh0b3VjaC0+aWRldiwgQUJTX1gsIHgpOworCQlpbnB1dF9yZXBvcnRfYWJzKHRvdWNoLT5pZGV2LCBBQlNfWSwgeSk7CisJCWlucHV0X3JlcG9ydF9hYnModG91Y2gtPmlkZXYsIEFCU19QUkVTU1VSRSwgcnQpOworCQlpbnB1dF9yZXBvcnRfa2V5KHRvdWNoLT5pZGV2LCBCVE5fVE9VQ0gsIDEpOworCQlkZXZfZGJnKGNoaXAtPmRldiwgInBlbiBkb3duIGF0IFslZCwgJWRdLlxuIiwgeCwgeSk7CisJfSBlbHNlIHsKKwkJaW5wdXRfcmVwb3J0X2Ficyh0b3VjaC0+aWRldiwgQUJTX1BSRVNTVVJFLCAwKTsKKwkJaW5wdXRfcmVwb3J0X2tleSh0b3VjaC0+aWRldiwgQlROX1RPVUNILCAwKTsKKwkJZGV2X2RiZyhjaGlwLT5kZXYsICJwZW4gcmVsZWFzZVxuIik7CisJfQorCWlucHV0X3N5bmModG91Y2gtPmlkZXYpOworCitvdXQ6CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHBtODYweF90b3VjaF9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcG04NjB4X3RvdWNoICp0b3VjaCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJaW50IGRhdGEsIHJldDsKKworCWRhdGEgPSBNRUFTX1BEX0VOIHwgTUVBU19UU0lYX0VOIHwgTUVBU19UU0lZX0VOCisJCXwgTUVBU19UU0laMV9FTiB8IE1FQVNfVFNJWjJfRU47CisJcmV0ID0gcG04NjB4X3NldF9iaXRzKHRvdWNoLT5pMmMsIE1FQVNfRU4zLCBkYXRhLCBkYXRhKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJcmV0dXJuIDA7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcG04NjB4X3RvdWNoX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcG04NjB4X3RvdWNoICp0b3VjaCA9IGlucHV0X2dldF9kcnZkYXRhKGRldik7CisJaW50IGRhdGE7CisKKwlkYXRhID0gTUVBU19QRF9FTiB8IE1FQVNfVFNJWF9FTiB8IE1FQVNfVFNJWV9FTgorCQl8IE1FQVNfVFNJWjFfRU4gfCBNRUFTX1RTSVoyX0VOOworCXBtODYweF9zZXRfYml0cyh0b3VjaC0+aTJjLCBNRUFTX0VOMywgZGF0YSwgMCk7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHBtODYweF90b3VjaF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwbTg2MHhfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgcG04NjB4X3BsYXRmb3JtX2RhdGEgKnBtODYweF9wZGF0YSA9CQlcCisJCQkJcGRldi0+ZGV2LnBhcmVudC0+cGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgcG04NjB4X3RvdWNoX3BkYXRhICpwZGF0YSA9IE5VTEw7CisJc3RydWN0IHBtODYweF90b3VjaCAqdG91Y2g7CisJaW50IGlycSwgcmV0OworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgcmVzb3VyY2UhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKCFwbTg2MHhfcGRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGxhdGZvcm0gZGF0YSBpcyBtaXNzaW5nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcGRhdGEgPSBwbTg2MHhfcGRhdGEtPnRvdWNoOworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAidG91Y2hzY3JlZW4gZGF0YSBpcyBtaXNzaW5nXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdG91Y2ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcG04NjB4X3RvdWNoKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHRvdWNoID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCB0b3VjaCk7CisKKwl0b3VjaC0+aWRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICh0b3VjaC0+aWRldiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBpbnB1dCBkZXZpY2UhXG4iKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJdG91Y2gtPmlkZXYtPm5hbWUgPSAiODhwbTg2MHgtdG91Y2giOworCXRvdWNoLT5pZGV2LT5waHlzID0gIjg4cG04NjB4L2lucHV0MCI7CisJdG91Y2gtPmlkZXYtPmlkLmJ1c3R5cGUgPSBCVVNfSTJDOworCXRvdWNoLT5pZGV2LT5kZXYucGFyZW50ID0gJnBkZXYtPmRldjsKKwl0b3VjaC0+aWRldi0+b3BlbiA9IHBtODYweF90b3VjaF9vcGVuOworCXRvdWNoLT5pZGV2LT5jbG9zZSA9IHBtODYweF90b3VjaF9jbG9zZTsKKwl0b3VjaC0+Y2hpcCA9IGNoaXA7CisJdG91Y2gtPmkyYyA9IChjaGlwLT5pZCA9PSBDSElQX1BNODYwNykgPyBjaGlwLT5jbGllbnQgOiBjaGlwLT5jb21wYW5pb247CisJdG91Y2gtPmlycSA9IGlycSArIGNoaXAtPmlycV9iYXNlOworCXRvdWNoLT5yZXNfeCA9IHBkYXRhLT5yZXNfeDsKKwlpbnB1dF9zZXRfZHJ2ZGF0YSh0b3VjaC0+aWRldiwgdG91Y2gpOworCisJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEodG91Y2gtPmlycSwgTlVMTCwgcG04NjB4X3RvdWNoX2hhbmRsZXIsCisJCQkJICAgSVJRRl9PTkVTSE9ULCAidG91Y2giLCB0b3VjaCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2lycTsKKworCV9fc2V0X2JpdChFVl9BQlMsIHRvdWNoLT5pZGV2LT5ldmJpdCk7CisJX19zZXRfYml0KEFCU19YLCB0b3VjaC0+aWRldi0+YWJzYml0KTsKKwlfX3NldF9iaXQoQUJTX1ksIHRvdWNoLT5pZGV2LT5hYnNiaXQpOworCV9fc2V0X2JpdChBQlNfUFJFU1NVUkUsIHRvdWNoLT5pZGV2LT5hYnNiaXQpOworCV9fc2V0X2JpdChFVl9TWU4sIHRvdWNoLT5pZGV2LT5ldmJpdCk7CisJX19zZXRfYml0KEVWX0tFWSwgdG91Y2gtPmlkZXYtPmV2Yml0KTsKKwlfX3NldF9iaXQoQlROX1RPVUNILCB0b3VjaC0+aWRldi0+a2V5Yml0KTsKKworCWlucHV0X3NldF9hYnNfcGFyYW1zKHRvdWNoLT5pZGV2LCBBQlNfWCwgMCwgMSA8PCBBQ0NVUkFURV9CSVQsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKHRvdWNoLT5pZGV2LCBBQlNfWSwgMCwgMSA8PCBBQ0NVUkFURV9CSVQsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKHRvdWNoLT5pZGV2LCBBQlNfUFJFU1NVUkUsIDAsIDEgPDwgQUNDVVJBVEVfQklULAorCQkJCTAsIDApOworCisJcmV0ID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHRvdWNoLT5pZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciB0b3VjaCFcbiIpOworCQlnb3RvIG91dF9yZzsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCB0b3VjaCk7CisJcmV0dXJuIDA7CitvdXRfcmc6CisJZnJlZV9pcnEodG91Y2gtPmlycSwgdG91Y2gpOworb3V0X2lycToKKwlpbnB1dF9mcmVlX2RldmljZSh0b3VjaC0+aWRldik7CitvdXQ6CisJa2ZyZWUodG91Y2gpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHBtODYweF90b3VjaF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcG04NjB4X3RvdWNoICp0b3VjaCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UodG91Y2gtPmlkZXYpOworCWZyZWVfaXJxKHRvdWNoLT5pcnEsIHRvdWNoKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlrZnJlZSh0b3VjaCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBtODYweF90b3VjaF9kcml2ZXIgPSB7CisJLmRyaXZlcgk9IHsKKwkJLm5hbWUJPSAiODhwbTg2MHgtdG91Y2giLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZQk9IHBtODYweF90b3VjaF9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AocG04NjB4X3RvdWNoX3JlbW92ZSksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbTg2MHhfdG91Y2hfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnBtODYweF90b3VjaF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQocG04NjB4X3RvdWNoX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgcG04NjB4X3RvdWNoX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcG04NjB4X3RvdWNoX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChwbTg2MHhfdG91Y2hfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiVG91Y2hzY3JlZW4gZHJpdmVyIGZvciBNYXJ2ZWxsIFNlbWljb25kdWN0b3IgODhQTTg2MHgiKTsKK01PRFVMRV9BVVRIT1IoIkhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06ODhwbTg2MHgtdG91Y2giKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9LY29uZmlnCmluZGV4IDY0NTdlMDYuLjcyMDg2NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vS2NvbmZpZworKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL0tjb25maWcKQEAgLTExLDYgKzExLDE4IEBACiAKIGlmIElOUFVUX1RPVUNIU0NSRUVOCiAKK2NvbmZpZyBUT1VDSFNDUkVFTl84OFBNODYwWAorCXRyaXN0YXRlICJNYXJ2ZWxsIDg4UE04NjB4IHRvdWNoc2NyZWVuIgorCWRlcGVuZHMgb24gTUZEXzg4UE04NjBYCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIDg4UE04NjB4IFBNSUMgYW5kIHdhbnQgdG8gZW5hYmxlCisJICBzdXBwb3J0IGZvciB0aGUgYnVpbHQtaW4gdG91Y2hzY3JlZW4uCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIDg4cG04NjB4LXRzLgorCiBjb25maWcgVE9VQ0hTQ1JFRU5fQURTNzg0NgogCXRyaXN0YXRlICJBRFM3ODQ2L1RTQzIwNDYgYW5kIEFEUzc4NDMgYmFzZWQgdG91Y2hzY3JlZW5zIgogCWRlcGVuZHMgb24gU1BJX01BU1RFUgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vTWFrZWZpbGUKaW5kZXggZDYxYTNiNC4uN2ZlZjdkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL01ha2VmaWxlCkBAIC02LDYgKzYsNyBAQAogCiB3bTk3eHgtdHMteSA6PSB3bTk3eHgtY29yZS5vCiAKK29iai0kKENPTkZJR19UT1VDSFNDUkVFTl84OFBNODYwWCkJKz0gODhwbTg2MHgtdHMubwogb2JqLSQoQ09ORklHX1RPVUNIU0NSRUVOX0FENzg3NykJKz0gYWQ3ODc3Lm8KIG9iai0kKENPTkZJR19UT1VDSFNDUkVFTl9BRDc4NzkpCSs9IGFkNzg3OS5vCiBvYmotJChDT05GSUdfVE9VQ0hTQ1JFRU5fQURTNzg0NikJKz0gYWRzNzg0Ni5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL21jMTM3ODNfdHMuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWMxMzc4M190cy5jCmluZGV4IGJlMTE1YjMuLmJlNTRmZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWMxMzc4M190cy5jCisrKyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vbWMxMzc4M190cy5jCkBAIC00NCw3ICs0NCw3IEBACiB7CiAJc3RydWN0IG1jMTM3ODNfdHNfcHJpdiAqcHJpdiA9IGRhdGE7CiAKLQltYzEzNzgzX2Fja2lycShwcml2LT5tYzEzNzgzLCBpcnEpOworCW1jMTM3ODNfaXJxX2Fjayhwcml2LT5tYzEzNzgzLCBpcnEpOwogCiAJLyoKIAkgKiBLaWNrIG9mZiByZWFkaW5nIGNvb3JkaW5hdGVzLiBOb3RlIHRoYXQgaWYgd29yayBoYXBwZW5zIGFscmVhZHkKQEAgLTEzNSw3ICsxMzUsNyBAQAogCiAJbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOwogCi0JbWMxMzc4M19hY2tpcnEocHJpdi0+bWMxMzc4MywgTUMxMzc4M19JUlFfVFMpOworCW1jMTM3ODNfaXJxX2Fjayhwcml2LT5tYzEzNzgzLCBNQzEzNzgzX0lSUV9UUyk7CiAKIAlyZXQgPSBtYzEzNzgzX2lycV9yZXF1ZXN0KHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfSVJRX1RTLAogCQltYzEzNzgzX3RzX2hhbmRsZXIsIE1DMTM3ODNfVFNfTkFNRSwgcHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vS2NvbmZpZyBiL2RyaXZlcnMvaXNkbi9LY29uZmlnCmluZGV4IDAyMmExOTQuLjRmYjYwMTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaXNkbi9LY29uZmlnCkBAIC03LDE1ICs3LDE0IEBACiAJZGVwZW5kcyBvbiBORVQKIAlkZXBlbmRzIG9uICFTMzkwCiAJLS0taGVscC0tLQotCSAgSVNETiAoIkludGVncmF0ZWQgU2VydmljZXMgRGlnaXRhbCBOZXR3b3JrcyIsIGNhbGxlZCBSTklTIGluIEZyYW5jZSkKLQkgIGlzIGEgc3BlY2lhbCB0eXBlIG9mIGZ1bGx5IGRpZ2l0YWwgdGVsZXBob25lIHNlcnZpY2U7IGl0J3MgbW9zdGx5Ci0JICB1c2VkIHRvIGNvbm5lY3QgdG8geW91ciBJbnRlcm5ldCBzZXJ2aWNlIHByb3ZpZGVyICh3aXRoIFNMSVAgb3IKLQkgIFBQUCkuICBUaGUgbWFpbiBhZHZhbnRhZ2UgaXMgdGhhdCB0aGUgc3BlZWQgaXMgaGlnaGVyIHRoYW4gb3JkaW5hcnkKLQkgIG1vZGVtL3RlbGVwaG9uZSBjb25uZWN0aW9ucywgYW5kIHRoYXQgeW91IGNhbiBoYXZlIHZvaWNlCi0JICBjb252ZXJzYXRpb25zIHdoaWxlIGRvd25sb2FkaW5nIHN0dWZmLiAgSXQgb25seSB3b3JrcyBpZiB5b3VyCi0JICBjb21wdXRlciBpcyBlcXVpcHBlZCB3aXRoIGFuIElTRE4gY2FyZCBhbmQgYm90aCB5b3UgYW5kIHlvdXIgc2VydmljZQotCSAgcHJvdmlkZXIgcHVyY2hhc2VkIGFuIElTRE4gbGluZSBmcm9tIHRoZSBwaG9uZSBjb21wYW55LiAgRm9yCi0JICBkZXRhaWxzLCByZWFkIDxodHRwOi8vd3d3LmFsdW1uaS5jYWx0ZWNoLmVkdS9+ZGFuay9pc2RuLz4gb24gdGhlIFdXVy4KKwkgIElTRE4gKCJJbnRlZ3JhdGVkIFNlcnZpY2VzIERpZ2l0YWwgTmV0d29yayIsIGNhbGxlZCBSTklTIGluIEZyYW5jZSkKKwkgIGlzIGEgZnVsbHkgZGlnaXRhbCB0ZWxlcGhvbmUgc2VydmljZSB0aGF0IGNhbiBiZSB1c2VkIGZvciB2b2ljZSBhbmQKKwkgIGRhdGEgY29ubmVjdGlvbnMuICBJZiB5b3VyIGNvbXB1dGVyIGlzIGVxdWlwcGVkIHdpdGggYW4gSVNETgorCSAgYWRhcHRlciB5b3UgY2FuIHVzZSBpdCB0byBjb25uZWN0IHRvIHlvdXIgSW50ZXJuZXQgc2VydmljZSBwcm92aWRlcgorCSAgKHdpdGggU0xJUCBvciBQUFApIGZhc3RlciB0aGFuIHZpYSBhIGNvbnZlbnRpb25hbCB0ZWxlcGhvbmUgbW9kZW0KKwkgICh0aG91Z2ggc3RpbGwgbXVjaCBzbG93ZXIgdGhhbiB3aXRoIERTTCkgb3IgdG8gbWFrZSBhbmQgYWNjZXB0CisJICB2b2ljZSBjYWxscyAoZWcuIHR1cm5pbmcgeW91ciBQQyBpbnRvIGEgc29mdHdhcmUgYW5zd2VyaW5nIG1hY2hpbmUKKwkgIG9yIFBBQlgpLgogCiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgeW91ciBrZXJuZWwgdG8gc3VwcG9ydCBJU0ROLgogCkBAIC0zOSwxNyArMzgsMjIgQEAKIAkgIEl0IGlzIHN0aWxsIGF2YWlsYWJsZSwgdGhvdWdoLCBmb3IgdXNlIHdpdGggYWRhcHRlcnMgdGhhdCBhcmUgbm90CiAJICBzdXBwb3J0ZWQgYnkgdGhlIG5ldyBDQVBJIHN1YnN5c3RlbSB5ZXQuCiAKLXNvdXJjZSAiZHJpdmVycy9pc2RuL21JU0ROL0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9pc2RuL2k0bC9LY29uZmlnIgogCiBtZW51Y29uZmlnIElTRE5fQ0FQSQogCXRyaXN0YXRlICJDQVBJIDIuMCBzdWJzeXN0ZW0iCiAJaGVscAotCSAgVGhpcyBwcm92aWRlcyB0aGUgQ0FQSSAoQ29tbW9uIElTRE4gQXBwbGljYXRpb24gUHJvZ3JhbW1pbmcKLQkgIEludGVyZmFjZSwgYSBzdGFuZGFyZCBtYWtpbmcgaXQgZWFzeSBmb3IgcHJvZ3JhbXMgdG8gYWNjZXNzIElTRE4KLQkgIGhhcmR3YXJlLCBzZWUgPGh0dHA6Ly93d3cuY2FwaS5vcmcvPi4gIFRoaXMgaXMgbmVlZGVkIGZvciBBVk0ncyBzZXQKLQkgIG9mIGFjdGl2ZSBJU0ROIGNvbnRyb2xsZXJzIGxpa2UgQjEsIFQxLCBNMS4KKwkgIFRoaXMgcHJvdmlkZXMgQ0FQSSAodGhlIENvbW1vbiBJU0ROIEFwcGxpY2F0aW9uIFByb2dyYW1taW5nCisJICBJbnRlcmZhY2UpIFZlcnNpb24gMi4wLCBhIHN0YW5kYXJkIG1ha2luZyBpdCBlYXN5IGZvciBwcm9ncmFtcyB0bworCSAgYWNjZXNzIElTRE4gaGFyZHdhcmUgaW4gYSBkZXZpY2UgaW5kZXBlbmRlbnQgd2F5LiAoRm9yIGRldGFpbHMgc2VlCisJICA8aHR0cDovL3d3dy5jYXBpLm9yZy8+LikgIENBUEkgc3VwcG9ydHMgbWFraW5nIGFuZCBhY2NlcHRpbmcgdm9pY2UKKwkgIGFuZCBkYXRhIGNvbm5lY3Rpb25zLCBjb250cm9sbGluZyBjYWxsIG9wdGlvbnMgYW5kIHByb3RvY29scywKKwkgIGFzIHdlbGwgYXMgSVNETiBzdXBwbGVtZW50YXJ5IHNlcnZpY2VzIGxpa2UgY2FsbCBmb3J3YXJkaW5nIG9yCisJICB0aHJlZS1wYXJ0eSBjb25mZXJlbmNlcyAoaWYgc3VwcG9ydGVkIGJ5IHRoZSBzcGVjaWZpYyBoYXJkd2FyZQorCSAgZHJpdmVyKS4KKworCSAgU2VsZWN0IHRoaXMgb3B0aW9uIGFuZCB0aGUgYXBwcm9wcmlhdGUgaGFyZHdhcmUgZHJpdmVyIGJlbG93IGlmCisJICB5b3UgaGF2ZSBhbiBJU0ROIGFkYXB0ZXIgc3VwcG9ydGVkIGJ5IHRoZSBDQVBJIHN1YnN5c3RlbS4KIAogaWYgSVNETl9DQVBJCiAKQEAgLTYxLDQgKzY1LDEzIEBACiAKIHNvdXJjZSAiZHJpdmVycy9pc2RuL2dpZ2FzZXQvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL2lzZG4vaHlzZG4vS2NvbmZpZyIKKworc291cmNlICJkcml2ZXJzL2lzZG4vbUlTRE4vS2NvbmZpZyIKKworY29uZmlnIElTRE5fSERMQworCXRyaXN0YXRlCisJc2VsZWN0IENSQ19DQ0lUVAorCXNlbGVjdCBCSVRSRVZFUlNFCisKIGVuZGlmICMgSVNETgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkvS2NvbmZpZyBiL2RyaXZlcnMvaXNkbi9jYXBpL0tjb25maWcKaW5kZXggYjJhMDQ3NS4uYTE2OGU4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkvS2NvbmZpZworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9LY29uZmlnCkBAIC0xNyw4ICsxNyw3IEBACiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgSVNETl9DQVBJX01JRERMRVdBUkUKLQlib29sICJDQVBJMi4wIE1pZGRsZXdhcmUgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAorCWJvb2wgIkNBUEkyLjAgTWlkZGxld2FyZSBzdXBwb3J0IgogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIHdpbGwgZW5oYW5jZSB0aGUgY2FwYWJpbGl0aWVzIG9mIHRoZSAvZGV2L2NhcGkyMAogCSAgaW50ZXJmYWNlLiAgSXQgd2lsbCBwcm92aWRlIGEgbWVhbnMgb2YgbW92aW5nIGEgZGF0YSBjb25uZWN0aW9uLApAQCAtMzUsMTggKzM0LDE5IEBACiAJICBZL00gaGVyZS4KIAogY29uZmlnIElTRE5fQ0FQSV9DQVBJRlNfQk9PTAotCWJvb2wgIkNBUEkyLjAgZmlsZXN5c3RlbSBzdXBwb3J0IgorCWJvb2wgIkNBUEkyLjAgZmlsZXN5c3RlbSBzdXBwb3J0IChERVBSRUNBVEVEKSIKIAlkZXBlbmRzIG9uIElTRE5fQ0FQSV9NSURETEVXQVJFICYmIElTRE5fQ0FQSV9DQVBJMjAKKwloZWxwCisJICBUaGlzIG9wdGlvbiBwcm92aWRlcyBhIHNwZWNpYWwgZmlsZSBzeXN0ZW0sIHNpbWlsYXIgdG8gL2Rldi9wdHMgd2l0aAorCSAgZGV2aWNlIG5vZGVzIGZvciB0aGUgc3BlY2lhbCB0dHlzIGVzdGFibGlzaGVkIGJ5IHVzaW5nIHRoZQorCSAgbWlkZGxld2FyZSBleHRlbnNpb24gYWJvdmUuCisJICBZb3Ugbm8gbG9uZ2VyIG5lZWQgdGhpcywgdWRldiBmdWxseSByZXBsYWNlcyBpdC4gVGhpcyBmZWF0dXJlIGlzCisJICBzY2hlZHVsZWQgZm9yIHJlbW92YWwuCiAKIGNvbmZpZyBJU0ROX0NBUElfQ0FQSUZTCiAJdHJpc3RhdGUKIAlkZXBlbmRzIG9uIElTRE5fQ0FQSV9DQVBJRlNfQk9PTAogCWRlZmF1bHQgSVNETl9DQVBJX0NBUEkyMAotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIGEgc3BlY2lhbCBmaWxlIHN5c3RlbSwgc2ltaWxhciB0byAvZGV2L3B0cyB3aXRoCi0JICBkZXZpY2Ugbm9kZXMgZm9yIHRoZSBzcGVjaWFsIHR0eXMgZXN0YWJsaXNoZWQgYnkgdXNpbmcgdGhlCi0JICBtaWRkbGV3YXJlIGV4dGVuc2lvbiBhYm92ZS4gSWYgeW91IHdhbnQgdG8gdXNlIHBwcGQgd2l0aAotCSAgcHBwZGNhcGlwbHVnaW4gdG8gZGlhbCB1cCB0byB5b3VyIElTUCwgc2F5IFkgaGVyZS4KIAogY29uZmlnIElTRE5fQ0FQSV9DQVBJRFJWCiAJdHJpc3RhdGUgIkNBUEkyLjAgY2FwaWRydiBpbnRlcmZhY2Ugc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGkuYwppbmRleCA2NWJmOTFlLi5lZTU4Mzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaS5jCkBAIC0yMywxNiArMjMsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2lmZGVmIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRQogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgotI2lmZGVmIENPTkZJR19QUFAKICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wcHBfZGVmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3BwcC5oPgotI2VuZGlmIC8qIENPTkZJR19QUFAgKi8KLSNlbmRpZiAvKiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUgKi8KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbGNhcGkuaD4KQEAgLTQxLDM1ICszOCwyOSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvaXNkbi9jYXBpdXRpbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lzZG4vY2FwaWNtZC5oPgotI2lmIGRlZmluZWQoQ09ORklHX0lTRE5fQ0FQSV9DQVBJRlMpIHx8IGRlZmluZWQoQ09ORklHX0lTRE5fQ0FQSV9DQVBJRlNfTU9EVUxFKQotI2luY2x1ZGUgImNhcGlmcy5oIgotI2VuZGlmCiAKLXN0YXRpYyBjaGFyICpyZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuMS4yLjcgJCI7CisjaW5jbHVkZSAiY2FwaWZzLmgiCiAKIE1PRFVMRV9ERVNDUklQVElPTigiQ0FQSTRMaW51eDogVXNlcnNwYWNlIC9kZXYvY2FwaTIwIGludGVyZmFjZSIpOwogTU9EVUxFX0FVVEhPUigiQ2Fyc3RlbiBQYWV0aCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jdW5kZWYgX0RFQlVHX1JFRkNPVU5UCQkvKiBhbGxvYy9mcmVlIGFuZCBvcGVuL2Nsb3NlIGRlYnVnICovCiAjdW5kZWYgX0RFQlVHX1RUWUZVTkNTCQkvKiBjYWxsIHRvIHR0eV9kcml2ZXIgKi8KICN1bmRlZiBfREVCVUdfREFUQUZMT1cJCS8qIGRhdGEgZmxvdyAqLwogCiAvKiAtLS0tLS0tLSBkcml2ZXIgaW5mb3JtYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCBjbGFzcyAqY2FwaV9jbGFzczsKLQogc3RhdGljIGludCBjYXBpX21ham9yID0gNjg7CQkvKiBhbGxvY2F0ZWQgKi8KLSNpZmRlZiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUKLSNkZWZpbmUgQ0FQSU5DX05SX1BPUlRTCTMyCi0jZGVmaW5lIENBUElOQ19NQVhfUE9SVFMJMjU2Ci1zdGF0aWMgaW50IGNhcGlfdHR5bWFqb3IgPSAxOTE7Ci1zdGF0aWMgaW50IGNhcGlfdHR5bWlub3JzID0gQ0FQSU5DX05SX1BPUlRTOwotI2VuZGlmIC8qIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRSAqLwogCiBtb2R1bGVfcGFyYW1fbmFtZWQobWFqb3IsIGNhcGlfbWFqb3IsIHVpbnQsIDApOworCiAjaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCi1tb2R1bGVfcGFyYW1fbmFtZWQodHR5bWFqb3IsIGNhcGlfdHR5bWFqb3IsIHVpbnQsIDApOworI2RlZmluZSBDQVBJTkNfTlJfUE9SVFMJCTMyCisjZGVmaW5lIENBUElOQ19NQVhfUE9SVFMJMjU2CisKK3N0YXRpYyBpbnQgY2FwaV90dHltaW5vcnMgPSBDQVBJTkNfTlJfUE9SVFM7CisKIG1vZHVsZV9wYXJhbV9uYW1lZCh0dHltaW5vcnMsIGNhcGlfdHR5bWlub3JzLCB1aW50LCAwKTsKICNlbmRpZiAvKiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUgKi8KIApAQCAtODMsNTMgKzc0LDQzIEBACiAKIHN0cnVjdCBjYXBpZGV2Owogc3RydWN0IGNhcGluY2NpOwotI2lmZGVmIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRQogc3RydWN0IGNhcGltaW5vcjsKIAotc3RydWN0IGRhdGFoYW5kbGVfcXVldWUgeworc3RydWN0IGFja3F1ZXVlX2VudHJ5IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiAJdTE2CQkJZGF0YWhhbmRsZTsKIH07CiAKIHN0cnVjdCBjYXBpbWlub3IgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgY2FwaW5jY2kgICpuY2NpcDsKKwlzdHJ1Y3Qga3JlZiBrcmVmOworCiAJdW5zaWduZWQgaW50ICAgICAgbWlub3I7CisJc3RydWN0IGRlbnRyeSAqY2FwaWZzX2RlbnRyeTsKIAotCXN0cnVjdCBjYXBpMjBfYXBwbCAqYXA7Ci0JdTMyCQkgbmNjaTsKLQl1MTYJCSBkYXRhaGFuZGxlOwotCXUxNgkJIG1zZ2lkOworCXN0cnVjdCBjYXBpMjBfYXBwbAkqYXA7CisJdTMyCQkJbmNjaTsKKwlhdG9taWNfdAkJZGF0YWhhbmRsZTsKKwlhdG9taWNfdAkJbXNnaWQ7CiAKLQlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXN0cnVjdCB0dHlfcG9ydCBwb3J0OwogCWludCAgICAgICAgICAgICAgICB0dHlpbnN0b3A7CiAJaW50ICAgICAgICAgICAgICAgIHR0eW91dHN0b3A7Ci0Jc3RydWN0IHNrX2J1ZmYgICAgKnR0eXNrYjsKLQlhdG9taWNfdCAgICAgICAgICAgdHR5b3BlbmNvdW50OwogCi0Jc3RydWN0IHNrX2J1ZmZfaGVhZCBpbnF1ZXVlOwotCWludCAgICAgICAgICAgICAgICAgaW5ieXRlczsKLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIG91dHF1ZXVlOwotCWludCAgICAgICAgICAgICAgICAgb3V0Ynl0ZXM7CisJc3RydWN0IHNrX2J1ZmZfaGVhZAlpbnF1ZXVlOworCisJc3RydWN0IHNrX2J1ZmZfaGVhZAlvdXRxdWV1ZTsKKwlpbnQJCQlvdXRieXRlczsKKwlzdHJ1Y3Qgc2tfYnVmZgkJKm91dHNrYjsKKwlzcGlubG9ja190CQlvdXRsb2NrOwogCiAJLyogdHJhbnNtaXQgcGF0aCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgYWNrcXVldWU7CiAJaW50IG5hY2s7CiAJc3BpbmxvY2tfdCBhY2txbG9jazsKIH07Ci0jZW5kaWYgLyogQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFICovCi0KLS8qIEZJWE1FOiBUaGUgZm9sbG93aW5nIGxvY2sgaXMgYSBzbGVkZ2VoYW1tZXItd29ya2Fyb3VuZCB0byBhCi0gKiBsb2NraW5nIGlzc3VlIHdpdGggdGhlIGNhcGltaW5vciAoYW5kIG1heWJlIG90aGVyKSBkYXRhIHN0cnVjdHVyZShzKS4KLSAqIEFjY2VzcyB0byB0aGlzIGRhdGEgaXMgZG9uZSBpbiBhIHJhY3kgd2F5IGFuZCBjcmFzaGVzIHRoZSBtYWNoaW5lIHdpdGgKLSAqIGEgRnJpdHpDYXJkIERTTCBkcml2ZXI7IHNvb25lciBvciBsYXRlci4gVGhpcyBpcyBhIHdvcmthcm91bmQKLSAqIHdoaWNoIHRyYWRlcyBzY2FsYWJpbGl0eSB2cyBzdGFiaWxpdHksIHNvIGl0IGRvZXNuJ3QgY3Jhc2ggdGhlIGtlcm5lbCBhbnltb3JlLgotICogVGhlIGNvcnJlY3QgKGFuZCBzY2FsYWJsZSkgZml4IGZvciB0aGUgaXNzdWUgc2VlbXMgdG8gcmVxdWlyZQotICogYW4gQVBJIGNoYW5nZSB0byB0aGUgZHJpdmVycy4uLiAuICovCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKHdvcmthcm91bmRfbG9jayk7CiAKIHN0cnVjdCBjYXBpbmNjaSB7Ci0Jc3RydWN0IGNhcGluY2NpICpuZXh0OworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAl1MzIJCSBuY2NpOwogCXN0cnVjdCBjYXBpZGV2CSpjZGV2OwogI2lmZGVmIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRQpAQCAtMTQ2LDI4ICsxMjcsMjggQEAKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJlY3ZxdWV1ZTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCByZWN2d2FpdDsKIAotCXN0cnVjdCBjYXBpbmNjaSAqbmNjaXM7CisJc3RydWN0IGxpc3RfaGVhZCBuY2NpczsKIAotCXN0cnVjdCBtdXRleCBuY2NpX2xpc3RfbXR4OworCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAogLyogLS0tLS0tLS0gZ2xvYmFsIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBERUZJTkVfUldMT0NLKGNhcGlkZXZfbGlzdF9sb2NrKTsKK3N0YXRpYyBERUZJTkVfTVVURVgoY2FwaWRldl9saXN0X2xvY2spOwogc3RhdGljIExJU1RfSEVBRChjYXBpZGV2X2xpc3QpOwogCiAjaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCi1zdGF0aWMgREVGSU5FX1JXTE9DSyhjYXBpbWlub3JfbGlzdF9sb2NrKTsKLXN0YXRpYyBMSVNUX0hFQUQoY2FwaW1pbm9yX2xpc3QpOwotI2VuZGlmIC8qIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRSAqLwogCi0jaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNhcGltaW5vcnNfbG9jayk7CitzdGF0aWMgc3RydWN0IGNhcGltaW5vciAqKmNhcGltaW5vcnM7CisKK3N0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqY2FwaW5jX3R0eV9kcml2ZXI7CisKIC8qIC0tLS0tLS0tIGRhdGFoYW5kbGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IGNhcGluY2NpX2FkZF9hY2soc3RydWN0IGNhcGltaW5vciAqbXAsIHUxNiBkYXRhaGFuZGxlKQorc3RhdGljIGludCBjYXBpbWlub3JfYWRkX2FjayhzdHJ1Y3QgY2FwaW1pbm9yICptcCwgdTE2IGRhdGFoYW5kbGUpCiB7Ci0Jc3RydWN0IGRhdGFoYW5kbGVfcXVldWUgKm47Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgYWNrcXVldWVfZW50cnkgKm47CiAKIAluID0ga21hbGxvYyhzaXplb2YoKm4pLCBHRlBfQVRPTUlDKTsKIAlpZiAodW5saWtlbHkoIW4pKSB7CkBAIC0xNzYsMjUzICsxNTcsMjQ2IEBACiAJfQogCW4tPmRhdGFoYW5kbGUgPSBkYXRhaGFuZGxlOwogCUlOSVRfTElTVF9IRUFEKCZuLT5saXN0KTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbXAtPmFja3Fsb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2JoKCZtcC0+YWNrcWxvY2spOwogCWxpc3RfYWRkX3RhaWwoJm4tPmxpc3QsICZtcC0+YWNrcXVldWUpOwogCW1wLT5uYWNrKys7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXAtPmFja3Fsb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfYmgoJm1wLT5hY2txbG9jayk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY2FwaW1pbm9yX2RlbF9hY2soc3RydWN0IGNhcGltaW5vciAqbXAsIHUxNiBkYXRhaGFuZGxlKQogewotCXN0cnVjdCBkYXRhaGFuZGxlX3F1ZXVlICpwLCAqdG1wOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGFja3F1ZXVlX2VudHJ5ICpwLCAqdG1wOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJm1wLT5hY2txbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19iaCgmbXAtPmFja3Fsb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdG1wLCAmbXAtPmFja3F1ZXVlLCBsaXN0KSB7CiAgCQlpZiAocC0+ZGF0YWhhbmRsZSA9PSBkYXRhaGFuZGxlKSB7CiAJCQlsaXN0X2RlbCgmcC0+bGlzdCk7Ci0JCQlrZnJlZShwKTsKIAkJCW1wLT5uYWNrLS07Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcC0+YWNrcWxvY2ssIGZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2JoKCZtcC0+YWNrcWxvY2spOworCQkJa2ZyZWUocCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtcC0+YWNrcWxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19iaCgmbXAtPmFja3Fsb2NrKTsKIAlyZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyB2b2lkIGNhcGltaW5vcl9kZWxfYWxsX2FjayhzdHJ1Y3QgY2FwaW1pbm9yICptcCkKIHsKLQlzdHJ1Y3QgZGF0YWhhbmRsZV9xdWV1ZSAqcCwgKnRtcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBhY2txdWV1ZV9lbnRyeSAqcCwgKnRtcDsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZtcC0+YWNrcWxvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocCwgdG1wLCAmbXAtPmFja3F1ZXVlLCBsaXN0KSB7CiAJCWxpc3RfZGVsKCZwLT5saXN0KTsKIAkJa2ZyZWUocCk7CiAJCW1wLT5uYWNrLS07CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1wLT5hY2txbG9jaywgZmxhZ3MpOwogfQogCiAKIC8qIC0tLS0tLS0tIHN0cnVjdCBjYXBpbWlub3IgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9wb3J0X29wZXJhdGlvbnMgY2FwaW1pbm9yX3BvcnRfb3BzOyAvKiB3ZSBoYXZlIG5vbmUgKi8KKwogc3RhdGljIHN0cnVjdCBjYXBpbWlub3IgKmNhcGltaW5vcl9hbGxvYyhzdHJ1Y3QgY2FwaTIwX2FwcGwgKmFwLCB1MzIgbmNjaSkKIHsKLQlzdHJ1Y3QgY2FwaW1pbm9yICptcCwgKnA7Ci0JdW5zaWduZWQgaW50IG1pbm9yID0gMDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBjYXBpbWlub3IgKm1wOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl1bnNpZ25lZCBpbnQgbWlub3I7CiAKLQltcCA9IGt6YWxsb2Moc2l6ZW9mKCptcCksIEdGUF9BVE9NSUMpOworCW1wID0ga3phbGxvYyhzaXplb2YoKm1wKSwgR0ZQX0tFUk5FTCk7CiAgIAlpZiAoIW1wKSB7CiAgIAkJcHJpbnRrKEtFUk5fRVJSICJjYXBpOiBjYW4ndCBhbGxvYyBjYXBpbWlub3JcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKKwlrcmVmX2luaXQoJm1wLT5rcmVmKTsKKwogCW1wLT5hcCA9IGFwOwogCW1wLT5uY2NpID0gbmNjaTsKLQltcC0+bXNnaWQgPSAwOwotCWF0b21pY19zZXQoJm1wLT50dHlvcGVuY291bnQsMCk7CiAJSU5JVF9MSVNUX0hFQUQoJm1wLT5hY2txdWV1ZSk7CiAJc3Bpbl9sb2NrX2luaXQoJm1wLT5hY2txbG9jayk7CiAKIAlza2JfcXVldWVfaGVhZF9pbml0KCZtcC0+aW5xdWV1ZSk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbXAtPm91dHF1ZXVlKTsKKwlzcGluX2xvY2tfaW5pdCgmbXAtPm91dGxvY2spOwogCi0JLyogQWxsb2NhdGUgdGhlIGxlYXN0IHVudXNlZCBtaW5vciBudW1iZXIuCi0JICovCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZjYXBpbWlub3JfbGlzdF9sb2NrLCBmbGFncyk7Ci0JaWYgKGxpc3RfZW1wdHkoJmNhcGltaW5vcl9saXN0KSkKLQkJbGlzdF9hZGQoJm1wLT5saXN0LCAmY2FwaW1pbm9yX2xpc3QpOwotCWVsc2UgewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjYXBpbWlub3JfbGlzdCwgbGlzdCkgewotCQkJaWYgKHAtPm1pbm9yID4gbWlub3IpCi0JCQkJYnJlYWs7Ci0JCQltaW5vcisrOwotCQl9Ci0JCQotCQlpZiAobWlub3IgPCBjYXBpX3R0eW1pbm9ycykgewotCQkJbXAtPm1pbm9yID0gbWlub3I7Ci0JCQlsaXN0X2FkZCgmbXAtPmxpc3QsIHAtPmxpc3QucHJldik7Ci0JCX0KLQl9Ci0JCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZjYXBpbWlub3JfbGlzdF9sb2NrLCBmbGFncyk7CisJdHR5X3BvcnRfaW5pdCgmbXAtPnBvcnQpOworCW1wLT5wb3J0Lm9wcyA9ICZjYXBpbWlub3JfcG9ydF9vcHM7CiAKLQlpZiAoIShtaW5vciA8IGNhcGlfdHR5bWlub3JzKSkgeworCS8qIEFsbG9jYXRlIHRoZSBsZWFzdCB1bnVzZWQgbWlub3IgbnVtYmVyLiAqLworCXNwaW5fbG9jaygmY2FwaW1pbm9yc19sb2NrKTsKKwlmb3IgKG1pbm9yID0gMDsgbWlub3IgPCBjYXBpX3R0eW1pbm9yczsgbWlub3IrKykKKwkJaWYgKCFjYXBpbWlub3JzW21pbm9yXSkgeworCQkJY2FwaW1pbm9yc1ttaW5vcl0gPSBtcDsKKwkJCWJyZWFrOworCQl9CisJc3Bpbl91bmxvY2soJmNhcGltaW5vcnNfbG9jayk7CisKKwlpZiAobWlub3IgPT0gY2FwaV90dHltaW5vcnMpIHsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICJjYXBpOiBvdXQgb2YgbWlub3JzXG4iKTsKLQkJCWtmcmVlKG1wKTsKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gZXJyX291dDE7CiAJfQogCisJbXAtPm1pbm9yID0gbWlub3I7CisKKwlkZXYgPSB0dHlfcmVnaXN0ZXJfZGV2aWNlKGNhcGluY190dHlfZHJpdmVyLCBtaW5vciwgTlVMTCk7CisJaWYgKElTX0VSUihkZXYpKQorCQlnb3RvIGVycl9vdXQyOworCiAJcmV0dXJuIG1wOworCitlcnJfb3V0MjoKKwlzcGluX2xvY2soJmNhcGltaW5vcnNfbG9jayk7CisJY2FwaW1pbm9yc1ttaW5vcl0gPSBOVUxMOworCXNwaW5fdW5sb2NrKCZjYXBpbWlub3JzX2xvY2spOworCitlcnJfb3V0MToKKwlrZnJlZShtcCk7CisJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGNhcGltaW5vcl9mcmVlKHN0cnVjdCBjYXBpbWlub3IgKm1wKQorc3RhdGljIHZvaWQgY2FwaW1pbm9yX2Rlc3Ryb3koc3RydWN0IGtyZWYgKmtyZWYpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgY2FwaW1pbm9yLCBrcmVmKTsKIAotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmY2FwaW1pbm9yX2xpc3RfbG9jaywgZmxhZ3MpOwotCWxpc3RfZGVsKCZtcC0+bGlzdCk7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNhcGltaW5vcl9saXN0X2xvY2ssIGZsYWdzKTsKLQotCWtmcmVlX3NrYihtcC0+dHR5c2tiKTsKLQltcC0+dHR5c2tiID0gTlVMTDsKKwlrZnJlZV9za2IobXAtPm91dHNrYik7CiAJc2tiX3F1ZXVlX3B1cmdlKCZtcC0+aW5xdWV1ZSk7CiAJc2tiX3F1ZXVlX3B1cmdlKCZtcC0+b3V0cXVldWUpOwogCWNhcGltaW5vcl9kZWxfYWxsX2FjayhtcCk7CiAJa2ZyZWUobXApOwogfQogCi1zdGF0aWMgc3RydWN0IGNhcGltaW5vciAqY2FwaW1pbm9yX2ZpbmQodW5zaWduZWQgaW50IG1pbm9yKQorc3RhdGljIHN0cnVjdCBjYXBpbWlub3IgKmNhcGltaW5vcl9nZXQodW5zaWduZWQgaW50IG1pbm9yKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKmw7Ci0Jc3RydWN0IGNhcGltaW5vciAqcCA9IE5VTEw7CisJc3RydWN0IGNhcGltaW5vciAqbXA7CiAKLQlyZWFkX2xvY2soJmNhcGltaW5vcl9saXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2gobCwgJmNhcGltaW5vcl9saXN0KSB7Ci0JCXAgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBjYXBpbWlub3IsIGxpc3QpOwotCQlpZiAocC0+bWlub3IgPT0gbWlub3IpCi0JCQlicmVhazsKLQl9Ci0JcmVhZF91bmxvY2soJmNhcGltaW5vcl9saXN0X2xvY2spOwotCWlmIChsID09ICZjYXBpbWlub3JfbGlzdCkKLQkJcmV0dXJuIE5VTEw7CisJc3Bpbl9sb2NrKCZjYXBpbWlub3JzX2xvY2spOworCW1wID0gY2FwaW1pbm9yc1ttaW5vcl07CisJaWYgKG1wKQorCQlrcmVmX2dldCgmbXAtPmtyZWYpOworCXNwaW5fdW5sb2NrKCZjYXBpbWlub3JzX2xvY2spOwogCi0JcmV0dXJuIHA7CisJcmV0dXJuIG1wOwogfQotI2VuZGlmIC8qIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRSAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgY2FwaW1pbm9yX3B1dChzdHJ1Y3QgY2FwaW1pbm9yICptcCkKK3sKKwlrcmVmX3B1dCgmbXAtPmtyZWYsIGNhcGltaW5vcl9kZXN0cm95KTsKK30KKworc3RhdGljIHZvaWQgY2FwaW1pbm9yX2ZyZWUoc3RydWN0IGNhcGltaW5vciAqbXApCit7CisJdHR5X3VucmVnaXN0ZXJfZGV2aWNlKGNhcGluY190dHlfZHJpdmVyLCBtcC0+bWlub3IpOworCisJc3Bpbl9sb2NrKCZjYXBpbWlub3JzX2xvY2spOworCWNhcGltaW5vcnNbbXAtPm1pbm9yXSA9IE5VTEw7CisJc3Bpbl91bmxvY2soJmNhcGltaW5vcnNfbG9jayk7CisKKwljYXBpbWlub3JfcHV0KG1wKTsKK30KIAogLyogLS0tLS0tLS0gc3RydWN0IGNhcGluY2NpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKK3N0YXRpYyB2b2lkIGNhcGluY2NpX2FsbG9jX21pbm9yKHN0cnVjdCBjYXBpZGV2ICpjZGV2LCBzdHJ1Y3QgY2FwaW5jY2kgKm5wKQoreworCXN0cnVjdCBjYXBpbWlub3IgKm1wOworCWRldl90IGRldmljZTsKKworCWlmICghKGNkZXYtPnVzZXJmbGFncyAmIENBUElGTEFHX0hJR0hKQUNLSU5HKSkKKwkJcmV0dXJuOworCisJbXAgPSBucC0+bWlub3JwID0gY2FwaW1pbm9yX2FsbG9jKCZjZGV2LT5hcCwgbnAtPm5jY2kpOworCWlmIChtcCkgeworCQlkZXZpY2UgPSBNS0RFVihjYXBpbmNfdHR5X2RyaXZlci0+bWFqb3IsIG1wLT5taW5vcik7CisJCW1wLT5jYXBpZnNfZGVudHJ5ID0gY2FwaWZzX25ld19uY2NpKG1wLT5taW5vciwgZGV2aWNlKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGNhcGluY2NpX2ZyZWVfbWlub3Ioc3RydWN0IGNhcGluY2NpICpucCkKK3sKKwlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IG5wLT5taW5vcnA7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKworCWlmIChtcCkgeworCQljYXBpZnNfZnJlZV9uY2NpKG1wLT5jYXBpZnNfZGVudHJ5KTsKKworCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZtcC0+cG9ydCk7CisJCWlmICh0dHkpIHsKKwkJCXR0eV92aGFuZ3VwKHR0eSk7CisJCQl0dHlfa3JlZl9wdXQodHR5KTsKKwkJfQorCisJCWNhcGltaW5vcl9mcmVlKG1wKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNhcGluY2NpX21pbm9yX29wZW5jb3VudChzdHJ1Y3QgY2FwaW5jY2kgKm5wKQoreworCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gbnAtPm1pbm9ycDsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisKKwlpZiAobXApIHsKKwkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmbXAtPnBvcnQpOworCQlpZiAodHR5KSB7CisJCQljb3VudCA9IHR0eS0+Y291bnQ7CisJCQl0dHlfa3JlZl9wdXQodHR5KTsKKwkJfQorCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKKyNlbHNlIC8qICFDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUgKi8KKworc3RhdGljIGlubGluZSB2b2lkCitjYXBpbmNjaV9hbGxvY19taW5vcihzdHJ1Y3QgY2FwaWRldiAqY2Rldiwgc3RydWN0IGNhcGluY2NpICpucCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgY2FwaW5jY2lfZnJlZV9taW5vcihzdHJ1Y3QgY2FwaW5jY2kgKm5wKSB7IH0KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2FwaW5jY2lfbWlub3Jfb3BlbmNvdW50KHN0cnVjdCBjYXBpbmNjaSAqbnApCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZiAvKiAhQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFICovCisKIHN0YXRpYyBzdHJ1Y3QgY2FwaW5jY2kgKmNhcGluY2NpX2FsbG9jKHN0cnVjdCBjYXBpZGV2ICpjZGV2LCB1MzIgbmNjaSkKIHsKLQlzdHJ1Y3QgY2FwaW5jY2kgKm5wLCAqKnBwOwotI2lmZGVmIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRQotCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gTlVMTDsKLSNlbmRpZiAvKiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUgKi8KKwlzdHJ1Y3QgY2FwaW5jY2kgKm5wOwogCi0JbnAgPSBremFsbG9jKHNpemVvZigqbnApLCBHRlBfQVRPTUlDKTsKKwlucCA9IGt6YWxsb2Moc2l6ZW9mKCpucCksIEdGUF9LRVJORUwpOwogCWlmICghbnApCiAJCXJldHVybiBOVUxMOwogCW5wLT5uY2NpID0gbmNjaTsKIAlucC0+Y2RldiA9IGNkZXY7Ci0jaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCi0JbXAgPSBOVUxMOwotCWlmIChjZGV2LT51c2VyZmxhZ3MgJiBDQVBJRkxBR19ISUdISkFDS0lORykKLQkJbXAgPSBucC0+bWlub3JwID0gY2FwaW1pbm9yX2FsbG9jKCZjZGV2LT5hcCwgbmNjaSk7Ci0JaWYgKG1wKSB7Ci0JCW1wLT5uY2NpcCA9IG5wOwotI2lmZGVmIF9ERUJVR19SRUZDT1VOVAotCQlwcmludGsoS0VSTl9ERUJVRyAic2V0IG1wLT5uY2NpcFxuIik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKENPTkZJR19JU0ROX0NBUElfQ0FQSUZTKSB8fCBkZWZpbmVkKENPTkZJR19JU0ROX0NBUElfQ0FQSUZTX01PRFVMRSkKLQkJY2FwaWZzX25ld19uY2NpKG1wLT5taW5vciwgTUtERVYoY2FwaV90dHltYWpvciwgbXAtPm1pbm9yKSk7Ci0jZW5kaWYKLQl9Ci0jZW5kaWYgLyogQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFICovCi0JZm9yIChwcD0mY2Rldi0+bmNjaXM7ICpwcDsgcHAgPSAmKCpwcCktPm5leHQpCi0JCTsKLQkqcHAgPSBucDsKLSAgICAgICAgcmV0dXJuIG5wOworCisJY2FwaW5jY2lfYWxsb2NfbWlub3IoY2RldiwgbnApOworCisJbGlzdF9hZGRfdGFpbCgmbnAtPmxpc3QsICZjZGV2LT5uY2Npcyk7CisKKwlyZXR1cm4gbnA7CiB9CiAKIHN0YXRpYyB2b2lkIGNhcGluY2NpX2ZyZWUoc3RydWN0IGNhcGlkZXYgKmNkZXYsIHUzMiBuY2NpKQogewotCXN0cnVjdCBjYXBpbmNjaSAqbnAsICoqcHA7Ci0jaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCi0Jc3RydWN0IGNhcGltaW5vciAqbXA7Ci0jZW5kaWYgLyogQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFICovCisJc3RydWN0IGNhcGluY2NpICpucCwgKnRtcDsKIAotCXBwPSZjZGV2LT5uY2NpczsKLQl3aGlsZSAoKnBwKSB7Ci0JCW5wID0gKnBwOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShucCwgdG1wLCAmY2Rldi0+bmNjaXMsIGxpc3QpCiAJCWlmIChuY2NpID09IDB4ZmZmZmZmZmYgfHwgbnAtPm5jY2kgPT0gbmNjaSkgewotCQkJKnBwID0gKCpwcCktPm5leHQ7Ci0jaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCi0JCQlpZiAoKG1wID0gbnAtPm1pbm9ycCkgIT0gTlVMTCkgewotI2lmIGRlZmluZWQoQ09ORklHX0lTRE5fQ0FQSV9DQVBJRlMpIHx8IGRlZmluZWQoQ09ORklHX0lTRE5fQ0FQSV9DQVBJRlNfTU9EVUxFKQotCQkJCWNhcGlmc19mcmVlX25jY2kobXAtPm1pbm9yKTsKLSNlbmRpZgotCQkJCWlmIChtcC0+dHR5KSB7Ci0JCQkJCW1wLT5uY2NpcCA9IE5VTEw7Ci0jaWZkZWYgX0RFQlVHX1JFRkNPVU5UCi0JCQkJCXByaW50ayhLRVJOX0RFQlVHICJyZXNldCBtcC0+bmNjaXBcbiIpOwotI2VuZGlmCi0JCQkJCXR0eV9oYW5ndXAobXAtPnR0eSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJY2FwaW1pbm9yX2ZyZWUobXApOwotCQkJCX0KLQkJCX0KLSNlbmRpZiAvKiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUgKi8KKwkJCWNhcGluY2NpX2ZyZWVfbWlub3IobnApOworCQkJbGlzdF9kZWwoJm5wLT5saXN0KTsKIAkJCWtmcmVlKG5wKTsKLQkJCWlmICgqcHAgPT0gTlVMTCkgcmV0dXJuOwotCQl9IGVsc2UgewotCQkJcHAgPSAmKCpwcCktPm5leHQ7CiAJCX0KLQl9CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2FwaW5jY2kgKmNhcGluY2NpX2ZpbmQoc3RydWN0IGNhcGlkZXYgKmNkZXYsIHUzMiBuY2NpKQogewotCXN0cnVjdCBjYXBpbmNjaSAqcDsKKwlzdHJ1Y3QgY2FwaW5jY2kgKm5wOwogCi0JZm9yIChwPWNkZXYtPm5jY2lzOyBwIDsgcCA9IHAtPm5leHQpIHsKLQkJaWYgKHAtPm5jY2kgPT0gbmNjaSkKLQkJCWJyZWFrOwotCX0KLQlyZXR1cm4gcDsKLX0KLQotLyogLS0tLS0tLS0gc3RydWN0IGNhcGlkZXYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBzdHJ1Y3QgY2FwaWRldiAqY2FwaWRldl9hbGxvYyh2b2lkKQotewotCXN0cnVjdCBjYXBpZGV2ICpjZGV2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQljZGV2ID0ga3phbGxvYyhzaXplb2YoKmNkZXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNkZXYpCi0JCXJldHVybiBOVUxMOwotCi0JbXV0ZXhfaW5pdCgmY2Rldi0+bmNjaV9saXN0X210eCk7Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmY2Rldi0+cmVjdnF1ZXVlKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjZGV2LT5yZWN2d2FpdCk7Ci0Jd3JpdGVfbG9ja19pcnFzYXZlKCZjYXBpZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwotCWxpc3RfYWRkX3RhaWwoJmNkZXYtPmxpc3QsICZjYXBpZGV2X2xpc3QpOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZjYXBpZGV2X2xpc3RfbG9jaywgZmxhZ3MpOwotICAgICAgICByZXR1cm4gY2RldjsKLX0KLQotc3RhdGljIHZvaWQgY2FwaWRldl9mcmVlKHN0cnVjdCBjYXBpZGV2ICpjZGV2KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlpZiAoY2Rldi0+YXAuYXBwbGlkKSB7Ci0JCWNhcGkyMF9yZWxlYXNlKCZjZGV2LT5hcCk7Ci0JCWNkZXYtPmFwLmFwcGxpZCA9IDA7Ci0JfQotCXNrYl9xdWV1ZV9wdXJnZSgmY2Rldi0+cmVjdnF1ZXVlKTsKLQotCW11dGV4X2xvY2soJmNkZXYtPm5jY2lfbGlzdF9tdHgpOwotCWNhcGluY2NpX2ZyZWUoY2RldiwgMHhmZmZmZmZmZik7Ci0JbXV0ZXhfdW5sb2NrKCZjZGV2LT5uY2NpX2xpc3RfbXR4KTsKLQotCXdyaXRlX2xvY2tfaXJxc2F2ZSgmY2FwaWRldl9saXN0X2xvY2ssIGZsYWdzKTsKLQlsaXN0X2RlbCgmY2Rldi0+bGlzdCk7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNhcGlkZXZfbGlzdF9sb2NrLCBmbGFncyk7Ci0Ja2ZyZWUoY2Rldik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShucCwgJmNkZXYtPm5jY2lzLCBsaXN0KQorCQlpZiAobnAtPm5jY2kgPT0gbmNjaSkKKwkJCXJldHVybiBucDsKKwlyZXR1cm4gTlVMTDsKIH0KIAogI2lmZGVmIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRQpAQCAtNDMyLDcgKzQwNiw3IEBACiBnZW5fZGF0YV9iM19yZXNwX2ZvcihzdHJ1Y3QgY2FwaW1pbm9yICptcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKLQluc2tiID0gYWxsb2Nfc2tiKENBUElfREFUQV9CM19SRVNQX0xFTiwgR0ZQX0FUT01JQyk7CisJbnNrYiA9IGFsbG9jX3NrYihDQVBJX0RBVEFfQjNfUkVTUF9MRU4sIEdGUF9LRVJORUwpOwogCWlmIChuc2tiKSB7CiAJCXUxNiBkYXRhaGFuZGxlID0gQ0FQSU1TR19VMTYoc2tiLT5kYXRhLENBUElNU0dfQkFTRUxFTis0KzQrMik7CiAJCXVuc2lnbmVkIGNoYXIgKnMgPSBza2JfcHV0KG5za2IsIENBUElfREFUQV9CM19SRVNQX0xFTik7CkBAIC00NDAsNyArNDE0LDcgQEAKIAkJY2FwaW1zZ19zZXR1MTYocywgMiwgbXAtPmFwLT5hcHBsaWQpOwogCQljYXBpbXNnX3NldHU4IChzLCA0LCBDQVBJX0RBVEFfQjMpOwogCQljYXBpbXNnX3NldHU4IChzLCA1LCBDQVBJX1JFU1ApOwotCQljYXBpbXNnX3NldHUxNihzLCA2LCBtcC0+bXNnaWQrKyk7CisJCWNhcGltc2dfc2V0dTE2KHMsIDYsIGF0b21pY19pbmNfcmV0dXJuKCZtcC0+bXNnaWQpKTsKIAkJY2FwaW1zZ19zZXR1MzIocywgOCwgbXAtPm5jY2kpOwogCQljYXBpbXNnX3NldHUxNihzLCAxMiwgZGF0YWhhbmRsZSk7CiAJfQpAQCAtNDQ5LDEyMiArNDIzLDE1NiBAQAogCiBzdGF0aWMgaW50IGhhbmRsZV9yZWN2X3NrYihzdHJ1Y3QgY2FwaW1pbm9yICptcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwl1bnNpZ25lZCBpbnQgZGF0YWxlbiA9IHNrYi0+bGVuIC0gQ0FQSU1TR19MRU4oc2tiLT5kYXRhKTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCXN0cnVjdCBza19idWZmICpuc2tiOwotCWludCBkYXRhbGVuOwogCXUxNiBlcnJjb2RlLCBkYXRhaGFuZGxlOwogCXN0cnVjdCB0dHlfbGRpc2MgKmxkOwotCQotCWRhdGFsZW4gPSBza2ItPmxlbiAtIENBUElNU0dfTEVOKHNrYi0+ZGF0YSk7Ci0JaWYgKG1wLT50dHkgPT0gTlVMTCkKLQl7CisJaW50IHJldCA9IC0xOworCisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmbXAtPnBvcnQpOworCWlmICghdHR5KSB7CiAjaWZkZWYgX0RFQlVHX0RBVEFGTE9XCiAJCXByaW50ayhLRVJOX0RFQlVHICJjYXBpOiBjdXJyZW50bHkgbm8gcmVjZWl2ZXJcbiIpOwogI2VuZGlmCiAJCXJldHVybiAtMTsKIAl9CiAJCi0JbGQgPSB0dHlfbGRpc2NfcmVmKG1wLT50dHkpOwotCWlmIChsZCA9PSBOVUxMKQotCQlyZXR1cm4gLTE7CisJbGQgPSB0dHlfbGRpc2NfcmVmKHR0eSk7CisJaWYgKCFsZCkgeworCQkvKiBmYXRhbCBlcnJvciwgZG8gbm90IHJlcXVldWUgKi8KKwkJcmV0ID0gMDsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCWdvdG8gZGVyZWZfdHR5OworCX0KKwogCWlmIChsZC0+b3BzLT5yZWNlaXZlX2J1ZiA9PSBOVUxMKSB7CiAjaWYgZGVmaW5lZChfREVCVUdfREFUQUZMT1cpIHx8IGRlZmluZWQoX0RFQlVHX1RUWUZVTkNTKQogCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaTogbGRpc2MgaGFzIG5vIHJlY2VpdmVfYnVmIGZ1bmN0aW9uXG4iKTsKICNlbmRpZgotCQlnb3RvIGJhZDsKKwkJLyogZmF0YWwgZXJyb3IsIGRvIG5vdCByZXF1ZXVlICovCisJCWdvdG8gZnJlZV9za2I7CiAJfQogCWlmIChtcC0+dHR5aW5zdG9wKSB7CiAjaWYgZGVmaW5lZChfREVCVUdfREFUQUZMT1cpIHx8IGRlZmluZWQoX0RFQlVHX1RUWUZVTkNTKQogCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaTogcmVjdiB0dHkgdGhyb3R0bGVkXG4iKTsKICNlbmRpZgotCQlnb3RvIGJhZDsKKwkJZ290byBkZXJlZl9sZGlzYzsKIAl9Ci0JaWYgKG1wLT50dHktPnJlY2VpdmVfcm9vbSA8IGRhdGFsZW4pIHsKKworCWlmICh0dHktPnJlY2VpdmVfcm9vbSA8IGRhdGFsZW4pIHsKICNpZiBkZWZpbmVkKF9ERUJVR19EQVRBRkxPVykgfHwgZGVmaW5lZChfREVCVUdfVFRZRlVOQ1MpCiAJCXByaW50ayhLRVJOX0RFQlVHICJjYXBpOiBubyByb29tIGluIHR0eVxuIik7CiAjZW5kaWYKLQkJZ290byBiYWQ7CisJCWdvdG8gZGVyZWZfbGRpc2M7CiAJfQotCWlmICgobnNrYiA9IGdlbl9kYXRhX2IzX3Jlc3BfZm9yKG1wLCBza2IpKSA9PSBOVUxMKSB7CisKKwluc2tiID0gZ2VuX2RhdGFfYjNfcmVzcF9mb3IobXAsIHNrYik7CisJaWYgKCFuc2tiKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY2FwaTogZ2VuX2RhdGFfYjNfcmVzcCBmYWlsZWRcbiIpOwotCQlnb3RvIGJhZDsKKwkJZ290byBkZXJlZl9sZGlzYzsKIAl9Ci0JZGF0YWhhbmRsZSA9IENBUElNU0dfVTE2KHNrYi0+ZGF0YSxDQVBJTVNHX0JBU0VMRU4rNCk7CisKKwlkYXRhaGFuZGxlID0gQ0FQSU1TR19VMTYoc2tiLT5kYXRhLCBDQVBJTVNHX0JBU0VMRU4gKyA0KTsKKwogCWVycmNvZGUgPSBjYXBpMjBfcHV0X21lc3NhZ2UobXAtPmFwLCBuc2tiKTsKLQlpZiAoZXJyY29kZSAhPSBDQVBJX05PRVJST1IpIHsKKworCWlmIChlcnJjb2RlID09IENBUElfTk9FUlJPUikgeworCQlza2JfcHVsbChza2IsIENBUElNU0dfTEVOKHNrYi0+ZGF0YSkpOworI2lmZGVmIF9ERUJVR19EQVRBRkxPVworCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaTogREFUQV9CM19SRVNQICV1IGxlbj0lZCA9PiBsZGlzY1xuIiwKKwkJCQkJZGF0YWhhbmRsZSwgc2tiLT5sZW4pOworI2VuZGlmCisJCWxkLT5vcHMtPnJlY2VpdmVfYnVmKHR0eSwgc2tiLT5kYXRhLCBOVUxMLCBza2ItPmxlbik7CisJfSBlbHNlIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjYXBpOiBzZW5kIERBVEFfQjNfUkVTUCBmYWlsZWQ9JXhcbiIsCiAJCQkJZXJyY29kZSk7CiAJCWtmcmVlX3NrYihuc2tiKTsKLQkJZ290byBiYWQ7CisKKwkJaWYgKGVycmNvZGUgPT0gQ0FQSV9TRU5EUVVFVUVGVUxMKQorCQkJZ290byBkZXJlZl9sZGlzYzsKIAl9Ci0JKHZvaWQpc2tiX3B1bGwoc2tiLCBDQVBJTVNHX0xFTihza2ItPmRhdGEpKTsKLSNpZmRlZiBfREVCVUdfREFUQUZMT1cKLQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaTogREFUQV9CM19SRVNQICV1IGxlbj0lZCA9PiBsZGlzY1xuIiwKLQkJCQlkYXRhaGFuZGxlLCBza2ItPmxlbik7Ci0jZW5kaWYKLQlsZC0+b3BzLT5yZWNlaXZlX2J1ZihtcC0+dHR5LCBza2ItPmRhdGEsIE5VTEwsIHNrYi0+bGVuKTsKKworZnJlZV9za2I6CisJcmV0ID0gMDsKIAlrZnJlZV9za2Ioc2tiKTsKKworZGVyZWZfbGRpc2M6CiAJdHR5X2xkaXNjX2RlcmVmKGxkKTsKLQlyZXR1cm4gMDsKLWJhZDoKLQl0dHlfbGRpc2NfZGVyZWYobGQpOwotCXJldHVybiAtMTsKKworZGVyZWZfdHR5OgorCXR0eV9rcmVmX3B1dCh0dHkpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGhhbmRsZV9taW5vcl9yZWN2KHN0cnVjdCBjYXBpbWlub3IgKm1wKQogewogCXN0cnVjdCBza19idWZmICpza2I7Ci0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmbXAtPmlucXVldWUpKSAhPSBOVUxMKSB7Ci0JCXVuc2lnbmVkIGludCBsZW4gPSBza2ItPmxlbjsKLQkJbXAtPmluYnl0ZXMgLT0gbGVuOworCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmbXAtPmlucXVldWUpKSAhPSBOVUxMKQogCQlpZiAoaGFuZGxlX3JlY3Zfc2tiKG1wLCBza2IpIDwgMCkgewogCQkJc2tiX3F1ZXVlX2hlYWQoJm1wLT5pbnF1ZXVlLCBza2IpOwotCQkJbXAtPmluYnl0ZXMgKz0gbGVuOwogCQkJcmV0dXJuOwogCQl9Ci0JfQogfQogCi1zdGF0aWMgaW50IGhhbmRsZV9taW5vcl9zZW5kKHN0cnVjdCBjYXBpbWlub3IgKm1wKQorc3RhdGljIHZvaWQgaGFuZGxlX21pbm9yX3NlbmQoc3RydWN0IGNhcGltaW5vciAqbXApCiB7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXUxNiBsZW47Ci0JaW50IGNvdW50ID0gMDsKIAl1MTYgZXJyY29kZTsKIAl1MTYgZGF0YWhhbmRsZTsKIAotCWlmIChtcC0+dHR5ICYmIG1wLT50dHlvdXRzdG9wKSB7CisJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmbXAtPnBvcnQpOworCWlmICghdHR5KQorCQlyZXR1cm47CisKKwlpZiAobXAtPnR0eW91dHN0b3ApIHsKICNpZiBkZWZpbmVkKF9ERUJVR19EQVRBRkxPVykgfHwgZGVmaW5lZChfREVCVUdfVFRZRlVOQ1MpCiAJCXByaW50ayhLRVJOX0RFQlVHICJjYXBpOiBzZW5kOiB0dHkgc3RvcHBlZFxuIik7CiAjZW5kaWYKLQkJcmV0dXJuIDA7CisJCXR0eV9rcmVmX3B1dCh0dHkpOworCQlyZXR1cm47CiAJfQogCi0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmbXAtPm91dHF1ZXVlKSkgIT0gTlVMTCkgewotCQlkYXRhaGFuZGxlID0gbXAtPmRhdGFoYW5kbGU7CisJd2hpbGUgKDEpIHsKKwkJc3Bpbl9sb2NrX2JoKCZtcC0+b3V0bG9jayk7CisJCXNrYiA9IF9fc2tiX2RlcXVldWUoJm1wLT5vdXRxdWV1ZSk7CisJCWlmICghc2tiKSB7CisJCQlzcGluX3VubG9ja19iaCgmbXAtPm91dGxvY2spOworCQkJYnJlYWs7CisJCX0KIAkJbGVuID0gKHUxNilza2ItPmxlbjsKKwkJbXAtPm91dGJ5dGVzIC09IGxlbjsKKwkJc3Bpbl91bmxvY2tfYmgoJm1wLT5vdXRsb2NrKTsKKworCQlkYXRhaGFuZGxlID0gYXRvbWljX2luY19yZXR1cm4oJm1wLT5kYXRhaGFuZGxlKTsKIAkJc2tiX3B1c2goc2tiLCBDQVBJX0RBVEFfQjNfUkVRX0xFTik7CiAJCW1lbXNldChza2ItPmRhdGEsIDAsIENBUElfREFUQV9CM19SRVFfTEVOKTsKIAkJY2FwaW1zZ19zZXR1MTYoc2tiLT5kYXRhLCAwLCBDQVBJX0RBVEFfQjNfUkVRX0xFTik7CiAJCWNhcGltc2dfc2V0dTE2KHNrYi0+ZGF0YSwgMiwgbXAtPmFwLT5hcHBsaWQpOwogCQljYXBpbXNnX3NldHU4IChza2ItPmRhdGEsIDQsIENBUElfREFUQV9CMyk7CiAJCWNhcGltc2dfc2V0dTggKHNrYi0+ZGF0YSwgNSwgQ0FQSV9SRVEpOwotCQljYXBpbXNnX3NldHUxNihza2ItPmRhdGEsIDYsIG1wLT5tc2dpZCsrKTsKKwkJY2FwaW1zZ19zZXR1MTYoc2tiLT5kYXRhLCA2LCBhdG9taWNfaW5jX3JldHVybigmbXAtPm1zZ2lkKSk7CiAJCWNhcGltc2dfc2V0dTMyKHNrYi0+ZGF0YSwgOCwgbXAtPm5jY2kpOwkvKiBOQ0NJICovCiAJCWNhcGltc2dfc2V0dTMyKHNrYi0+ZGF0YSwgMTIsICh1MzIpKGxvbmcpc2tiLT5kYXRhKTsvKiBEYXRhMzIgKi8KIAkJY2FwaW1zZ19zZXR1MTYoc2tiLT5kYXRhLCAxNiwgbGVuKTsJLyogRGF0YSBsZW5ndGggKi8KIAkJY2FwaW1zZ19zZXR1MTYoc2tiLT5kYXRhLCAxOCwgZGF0YWhhbmRsZSk7CiAJCWNhcGltc2dfc2V0dTE2KHNrYi0+ZGF0YSwgMjAsIDApOwkvKiBGbGFncyAqLwogCi0JCWlmIChjYXBpbmNjaV9hZGRfYWNrKG1wLCBkYXRhaGFuZGxlKSA8IDApIHsKKwkJaWYgKGNhcGltaW5vcl9hZGRfYWNrKG1wLCBkYXRhaGFuZGxlKSA8IDApIHsKIAkJCXNrYl9wdWxsKHNrYiwgQ0FQSV9EQVRBX0IzX1JFUV9MRU4pOwotCQkJc2tiX3F1ZXVlX2hlYWQoJm1wLT5vdXRxdWV1ZSwgc2tiKTsKLQkJCXJldHVybiBjb3VudDsKKworCQkJc3Bpbl9sb2NrX2JoKCZtcC0+b3V0bG9jayk7CisJCQlfX3NrYl9xdWV1ZV9oZWFkKCZtcC0+b3V0cXVldWUsIHNrYik7CisJCQltcC0+b3V0Ynl0ZXMgKz0gbGVuOworCQkJc3Bpbl91bmxvY2tfYmgoJm1wLT5vdXRsb2NrKTsKKworCQkJYnJlYWs7CiAJCX0KIAkJZXJyY29kZSA9IGNhcGkyMF9wdXRfbWVzc2FnZShtcC0+YXAsIHNrYik7CiAJCWlmIChlcnJjb2RlID09IENBUElfTk9FUlJPUikgewotCQkJbXAtPmRhdGFoYW5kbGUrKzsKLQkJCWNvdW50Kys7Ci0JCQltcC0+b3V0Ynl0ZXMgLT0gbGVuOwogI2lmZGVmIF9ERUJVR19EQVRBRkxPVwogCQkJcHJpbnRrKEtFUk5fREVCVUcgImNhcGk6IERBVEFfQjNfUkVRICV1IGxlbj0ldVxuIiwKIAkJCQkJCQlkYXRhaGFuZGxlLCBsZW4pOwpAQCAtNTc1LDE2ICs1ODMsMjAgQEAKIAogCQlpZiAoZXJyY29kZSA9PSBDQVBJX1NFTkRRVUVVRUZVTEwpIHsKIAkJCXNrYl9wdWxsKHNrYiwgQ0FQSV9EQVRBX0IzX1JFUV9MRU4pOwotCQkJc2tiX3F1ZXVlX2hlYWQoJm1wLT5vdXRxdWV1ZSwgc2tiKTsKKworCQkJc3Bpbl9sb2NrX2JoKCZtcC0+b3V0bG9jayk7CisJCQlfX3NrYl9xdWV1ZV9oZWFkKCZtcC0+b3V0cXVldWUsIHNrYik7CisJCQltcC0+b3V0Ynl0ZXMgKz0gbGVuOworCQkJc3Bpbl91bmxvY2tfYmgoJm1wLT5vdXRsb2NrKTsKKwogCQkJYnJlYWs7CiAJCX0KIAogCQkvKiB1cHMsIGRyb3AgcGFja2V0ICovCiAJCXByaW50ayhLRVJOX0VSUiAiY2FwaTogcHV0X21lc3NhZ2UgPSAleFxuIiwgZXJyY29kZSk7Ci0JCW1wLT5vdXRieXRlcyAtPSBsZW47CiAJCWtmcmVlX3NrYihza2IpOwogCX0KLQlyZXR1cm4gY291bnQ7CisJdHR5X2tyZWZfcHV0KHR0eSk7CiB9CiAKICNlbmRpZiAvKiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUgKi8KQEAgLTU5NCw2NSArNjA2LDU2IEBACiB7CiAJc3RydWN0IGNhcGlkZXYgKmNkZXYgPSBhcC0+cHJpdmF0ZTsKICNpZmRlZiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCXN0cnVjdCBjYXBpbWlub3IgKm1wOwogCXUxNiBkYXRhaGFuZGxlOwogI2VuZGlmIC8qIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRSAqLwogCXN0cnVjdCBjYXBpbmNjaSAqbnA7Ci0JdTMyIG5jY2k7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKworCW11dGV4X2xvY2soJmNkZXYtPmxvY2spOwogCiAJaWYgKENBUElNU0dfQ01EKHNrYi0+ZGF0YSkgPT0gQ0FQSV9DT05ORUNUX0IzX0NPTkYpIHsKIAkJdTE2IGluZm8gPSBDQVBJTVNHX1UxNihza2ItPmRhdGEsIDEyKTsgLy8gSW5mbyBmaWVsZAotCQlpZiAoKGluZm8gJiAweGZmMDApID09IDApIHsKLQkJCW11dGV4X2xvY2soJmNkZXYtPm5jY2lfbGlzdF9tdHgpOworCQlpZiAoKGluZm8gJiAweGZmMDApID09IDApCiAJCQljYXBpbmNjaV9hbGxvYyhjZGV2LCBDQVBJTVNHX05DQ0koc2tiLT5kYXRhKSk7Ci0JCQltdXRleF91bmxvY2soJmNkZXYtPm5jY2lfbGlzdF9tdHgpOwotCQl9CiAJfQotCWlmIChDQVBJTVNHX0NNRChza2ItPmRhdGEpID09IENBUElfQ09OTkVDVF9CM19JTkQpIHsKLQkJbXV0ZXhfbG9jaygmY2Rldi0+bmNjaV9saXN0X210eCk7CisJaWYgKENBUElNU0dfQ01EKHNrYi0+ZGF0YSkgPT0gQ0FQSV9DT05ORUNUX0IzX0lORCkKIAkJY2FwaW5jY2lfYWxsb2MoY2RldiwgQ0FQSU1TR19OQ0NJKHNrYi0+ZGF0YSkpOwotCQltdXRleF91bmxvY2soJmNkZXYtPm5jY2lfbGlzdF9tdHgpOwotCX0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmd29ya2Fyb3VuZF9sb2NrLCBmbGFncyk7CisKIAlpZiAoQ0FQSU1TR19DT01NQU5EKHNrYi0+ZGF0YSkgIT0gQ0FQSV9EQVRBX0IzKSB7CiAJCXNrYl9xdWV1ZV90YWlsKCZjZGV2LT5yZWN2cXVldWUsIHNrYik7CiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2Rldi0+cmVjdndhaXQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3b3JrYXJvdW5kX2xvY2ssIGZsYWdzKTsKLQkJcmV0dXJuOworCQlnb3RvIHVubG9ja19vdXQ7CiAJfQotCW5jY2kgPSBDQVBJTVNHX0NPTlRST0woc2tiLT5kYXRhKTsKLQlmb3IgKG5wID0gY2Rldi0+bmNjaXM7IG5wICYmIG5wLT5uY2NpICE9IG5jY2k7IG5wID0gbnAtPm5leHQpCi0JCTsKKworCW5wID0gY2FwaW5jY2lfZmluZChjZGV2LCBDQVBJTVNHX0NPTlRST0woc2tiLT5kYXRhKSk7CiAJaWYgKCFucCkgewogCQlwcmludGsoS0VSTl9FUlIgIkJVRzogY2FwaV9zaWduYWw6IG5jY2kgbm90IGZvdW5kXG4iKTsKIAkJc2tiX3F1ZXVlX3RhaWwoJmNkZXYtPnJlY3ZxdWV1ZSwgc2tiKTsKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjZGV2LT5yZWN2d2FpdCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmthcm91bmRfbG9jaywgZmxhZ3MpOwotCQlyZXR1cm47CisJCWdvdG8gdW5sb2NrX291dDsKIAl9CisKICNpZm5kZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCiAJc2tiX3F1ZXVlX3RhaWwoJmNkZXYtPnJlY3ZxdWV1ZSwgc2tiKTsKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNkZXYtPnJlY3Z3YWl0KTsKKwogI2Vsc2UgLyogQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFICovCisKIAltcCA9IG5wLT5taW5vcnA7CiAJaWYgKCFtcCkgewogCQlza2JfcXVldWVfdGFpbCgmY2Rldi0+cmVjdnF1ZXVlLCBza2IpOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNkZXYtPnJlY3Z3YWl0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya2Fyb3VuZF9sb2NrLCBmbGFncyk7Ci0JCXJldHVybjsKKwkJZ290byB1bmxvY2tfb3V0OwogCX0KLQotCiAJaWYgKENBUElNU0dfU1VCQ09NTUFORChza2ItPmRhdGEpID09IENBUElfSU5EKSB7Ci0JCQogCQlkYXRhaGFuZGxlID0gQ0FQSU1TR19VMTYoc2tiLT5kYXRhLCBDQVBJTVNHX0JBU0VMRU4rNCs0KzIpOwogI2lmZGVmIF9ERUJVR19EQVRBRkxPVwogCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaV9zaWduYWw6IERBVEFfQjNfSU5EICV1IGxlbj0lZFxuIiwKIAkJCQlkYXRhaGFuZGxlLCBza2ItPmxlbi1DQVBJTVNHX0xFTihza2ItPmRhdGEpKTsKICNlbmRpZgogCQlza2JfcXVldWVfdGFpbCgmbXAtPmlucXVldWUsIHNrYik7Ci0JCW1wLT5pbmJ5dGVzICs9IHNrYi0+bGVuOworCiAJCWhhbmRsZV9taW5vcl9yZWN2KG1wKTsKIAogCX0gZWxzZSBpZiAoQ0FQSU1TR19TVUJDT01NQU5EKHNrYi0+ZGF0YSkgPT0gQ0FQSV9DT05GKSB7CkBAIC02NjQsMTAgKzY2NywxMyBAQAogCQkJCUNBUElNU0dfVTE2KHNrYi0+ZGF0YSwgQ0FQSU1TR19CQVNFTEVOKzQrMikpOwogI2VuZGlmCiAJCWtmcmVlX3NrYihza2IpOwotCQkodm9pZCljYXBpbWlub3JfZGVsX2FjayhtcCwgZGF0YWhhbmRsZSk7Ci0JCWlmIChtcC0+dHR5KQotCQkJdHR5X3dha2V1cChtcC0+dHR5KTsKLQkJKHZvaWQpaGFuZGxlX21pbm9yX3NlbmQobXApOworCQljYXBpbWlub3JfZGVsX2FjayhtcCwgZGF0YWhhbmRsZSk7CisJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJm1wLT5wb3J0KTsKKwkJaWYgKHR0eSkgeworCQkJdHR5X3dha2V1cCh0dHkpOworCQkJdHR5X2tyZWZfcHV0KHR0eSk7CisJCX0KKwkJaGFuZGxlX21pbm9yX3NlbmQobXApOwogCiAJfSBlbHNlIHsKIAkJLyogdXBzLCBsZXQgY2FwaSBhcHBsaWNhdGlvbiBoYW5kbGUgaXQgOi0pICovCkBAIC02NzUsNyArNjgxLDkgQEAKIAkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZjZGV2LT5yZWN2d2FpdCk7CiAJfQogI2VuZGlmIC8qIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRSAqLwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmthcm91bmRfbG9jaywgZmxhZ3MpOworCit1bmxvY2tfb3V0OgorCW11dGV4X3VubG9jaygmY2Rldi0+bG9jayk7CiB9CiAKIC8qIC0tLS0tLS0tIGZpbGVfb3BlcmF0aW9ucyBmb3IgY2FwaWRldiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNjg2LDI0ICs2OTQsMTkgQEAKIAlzdHJ1Y3QgY2FwaWRldiAqY2RldiA9IChzdHJ1Y3QgY2FwaWRldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXNpemVfdCBjb3BpZWQ7CisJaW50IGVycjsKIAogCWlmICghY2Rldi0+YXAuYXBwbGlkKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICgoc2tiID0gc2tiX2RlcXVldWUoJmNkZXYtPnJlY3ZxdWV1ZSkpID09IE5VTEwpIHsKLQorCXNrYiA9IHNrYl9kZXF1ZXVlKCZjZGV2LT5yZWN2cXVldWUpOworCWlmICghc2tiKSB7CiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykKIAkJCXJldHVybiAtRUFHQUlOOwotCi0JCWZvciAoOzspIHsKLQkJCWludGVycnVwdGlibGVfc2xlZXBfb24oJmNkZXYtPnJlY3Z3YWl0KTsKLQkJCWlmICgoc2tiID0gc2tiX2RlcXVldWUoJmNkZXYtPnJlY3ZxdWV1ZSkpICE9IE5VTEwpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHNrYiA9PSBOVUxMKQotCQkJcmV0dXJuIC1FUkVTVEFSVE5PSEFORDsKKwkJZXJyID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGNkZXYtPnJlY3Z3YWl0LAorCQkJCShza2IgPSBza2JfZGVxdWV1ZSgmY2Rldi0+cmVjdnF1ZXVlKSkpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAl9CiAJaWYgKHNrYi0+bGVuID4gY291bnQpIHsKIAkJc2tiX3F1ZXVlX2hlYWQoJmNkZXYtPnJlY3ZxdWV1ZSwgc2tiKTsKQEAgLTc1Myw5ICs3NTYsOSBAQAogCUNBUElNU0dfU0VUQVBQSUQoc2tiLT5kYXRhLCBjZGV2LT5hcC5hcHBsaWQpOwogCiAJaWYgKENBUElNU0dfQ01EKHNrYi0+ZGF0YSkgPT0gQ0FQSV9ESVNDT05ORUNUX0IzX1JFU1ApIHsKLQkJbXV0ZXhfbG9jaygmY2Rldi0+bmNjaV9saXN0X210eCk7CisJCW11dGV4X2xvY2soJmNkZXYtPmxvY2spOwogCQljYXBpbmNjaV9mcmVlKGNkZXYsIENBUElNU0dfTkNDSShza2ItPmRhdGEpKTsKLQkJbXV0ZXhfdW5sb2NrKCZjZGV2LT5uY2NpX2xpc3RfbXR4KTsKKwkJbXV0ZXhfdW5sb2NrKCZjZGV2LT5sb2NrKTsKIAl9CiAKIAljZGV2LT5lcnJjb2RlID0gY2FwaTIwX3B1dF9tZXNzYWdlKCZjZGV2LT5hcCwgc2tiKTsKQEAgLTc4OCwzMCArNzkxLDM1IEBACiAJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJc3RydWN0IGNhcGlkZXYgKmNkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGNhcGkyMF9hcHBsICphcCA9ICZjZGV2LT5hcDsKIAljYXBpX2lvY3RsX3N0cnVjdCBkYXRhOwogCWludCByZXR2YWwgPSAtRUlOVkFMOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIENBUElfUkVHSVNURVI6Ci0JCXsKLQkJCWlmIChhcC0+YXBwbGlkKQotCQkJCXJldHVybiAtRUVYSVNUOworCQltdXRleF9sb2NrKCZjZGV2LT5sb2NrKTsKIAotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZjZGV2LT5hcC5ycGFyYW0sIGFyZ3AsCi0JCQkJCSAgIHNpemVvZihzdHJ1Y3QgY2FwaV9yZWdpc3Rlcl9wYXJhbXMpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCQotCQkJY2Rldi0+YXAucHJpdmF0ZSA9IGNkZXY7Ci0JCQljZGV2LT5hcC5yZWN2X21lc3NhZ2UgPSBjYXBpX3JlY3ZfbWVzc2FnZTsKLQkJCWNkZXYtPmVycmNvZGUgPSBjYXBpMjBfcmVnaXN0ZXIoYXApOwotCQkJaWYgKGNkZXYtPmVycmNvZGUpIHsKLQkJCQlhcC0+YXBwbGlkID0gMDsKLQkJCQlyZXR1cm4gLUVJTzsKLQkJCX0KKwkJaWYgKGNkZXYtPmFwLmFwcGxpZCkgeworCQkJcmV0dmFsID0gLUVFWElTVDsKKwkJCWdvdG8gcmVnaXN0ZXJfb3V0OwogCQl9Ci0JCXJldHVybiAoaW50KWFwLT5hcHBsaWQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmY2Rldi0+YXAucnBhcmFtLCBhcmdwLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QgY2FwaV9yZWdpc3Rlcl9wYXJhbXMpKSkgeworCQkJcmV0dmFsID0gLUVGQVVMVDsKKwkJCWdvdG8gcmVnaXN0ZXJfb3V0OworCQl9CisJCWNkZXYtPmFwLnByaXZhdGUgPSBjZGV2OworCQljZGV2LT5hcC5yZWN2X21lc3NhZ2UgPSBjYXBpX3JlY3ZfbWVzc2FnZTsKKwkJY2Rldi0+ZXJyY29kZSA9IGNhcGkyMF9yZWdpc3RlcigmY2Rldi0+YXApOworCQlyZXR2YWwgPSAoaW50KWNkZXYtPmFwLmFwcGxpZDsKKwkJaWYgKGNkZXYtPmVycmNvZGUpIHsKKwkJCWNkZXYtPmFwLmFwcGxpZCA9IDA7CisJCQlyZXR2YWwgPSAtRUlPOworCQl9CisKK3JlZ2lzdGVyX291dDoKKwkJbXV0ZXhfdW5sb2NrKCZjZGV2LT5sb2NrKTsKKwkJcmV0dXJuIHJldHZhbDsKIAogCWNhc2UgQ0FQSV9HRVRfVkVSU0lPTjoKIAkJewpAQCAtOTEwLDEwMSArOTE4LDEwNCBAQAogCQlyZXR1cm4gMDsKIAogCWNhc2UgQ0FQSV9TRVRfRkxBR1M6Ci0JY2FzZSBDQVBJX0NMUl9GTEFHUzoKLQkJewotCQkJdW5zaWduZWQgdXNlcmZsYWdzOwotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2VyZmxhZ3MsIGFyZ3AsCi0JCQkJCSAgIHNpemVvZih1c2VyZmxhZ3MpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWlmIChjbWQgPT0gQ0FQSV9TRVRfRkxBR1MpCi0JCQkJY2Rldi0+dXNlcmZsYWdzIHw9IHVzZXJmbGFnczsKLQkJCWVsc2UKLQkJCQljZGV2LT51c2VyZmxhZ3MgJj0gfnVzZXJmbGFnczsKLQkJfQotCQlyZXR1cm4gMDsKKwljYXNlIENBUElfQ0xSX0ZMQUdTOiB7CisJCXVuc2lnbmVkIHVzZXJmbGFnczsKIAorCQlpZiAoY29weV9mcm9tX3VzZXIoJnVzZXJmbGFncywgYXJncCwgc2l6ZW9mKHVzZXJmbGFncykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJbXV0ZXhfbG9jaygmY2Rldi0+bG9jayk7CisJCWlmIChjbWQgPT0gQ0FQSV9TRVRfRkxBR1MpCisJCQljZGV2LT51c2VyZmxhZ3MgfD0gdXNlcmZsYWdzOworCQllbHNlCisJCQljZGV2LT51c2VyZmxhZ3MgJj0gfnVzZXJmbGFnczsKKwkJbXV0ZXhfdW5sb2NrKCZjZGV2LT5sb2NrKTsKKwkJcmV0dXJuIDA7CisJfQogCWNhc2UgQ0FQSV9HRVRfRkxBR1M6CiAJCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJmNkZXYtPnVzZXJmbGFncywKIAkJCQkgc2l6ZW9mKGNkZXYtPnVzZXJmbGFncykpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldHVybiAwOwogCi0JY2FzZSBDQVBJX05DQ0lfT1BFTkNPVU5UOgotCQl7Ci0JCQlzdHJ1Y3QgY2FwaW5jY2kgKm5jY2lwOwotI2lmZGVmIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRQotCQkJc3RydWN0IGNhcGltaW5vciAqbXA7Ci0jZW5kaWYgLyogQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFICovCi0JCQl1bnNpZ25lZCBuY2NpOwotCQkJaW50IGNvdW50ID0gMDsKLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmbmNjaSwgYXJncCwgc2l6ZW9mKG5jY2kpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKKwljYXNlIENBUElfTkNDSV9PUEVOQ09VTlQ6IHsKKwkJc3RydWN0IGNhcGluY2NpICpuY2NpcDsKKwkJdW5zaWduZWQgbmNjaTsKKwkJaW50IGNvdW50ID0gMDsKIAotCQkJbXV0ZXhfbG9jaygmY2Rldi0+bmNjaV9saXN0X210eCk7Ci0JCQlpZiAoKG5jY2lwID0gY2FwaW5jY2lfZmluZChjZGV2LCAodTMyKSBuY2NpKSkgPT0gTlVMTCkgewotCQkJCW11dGV4X3VubG9jaygmY2Rldi0+bmNjaV9saXN0X210eCk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0jaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCi0JCQlpZiAoKG1wID0gbmNjaXAtPm1pbm9ycCkgIT0gTlVMTCkgewotCQkJCWNvdW50ICs9IGF0b21pY19yZWFkKCZtcC0+dHR5b3BlbmNvdW50KTsKLQkJCX0KLSNlbmRpZiAvKiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUgKi8KLQkJCW11dGV4X3VubG9jaygmY2Rldi0+bmNjaV9saXN0X210eCk7Ci0JCQlyZXR1cm4gY291bnQ7Ci0JCX0KLQkJcmV0dXJuIDA7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmbmNjaSwgYXJncCwgc2l6ZW9mKG5jY2kpKSkKKwkJCXJldHVybiAtRUZBVUxUOwogCi0jaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCi0JY2FzZSBDQVBJX05DQ0lfR0VUVU5JVDoKLQkJewotCQkJc3RydWN0IGNhcGluY2NpICpuY2NpcDsKLQkJCXN0cnVjdCBjYXBpbWlub3IgKm1wOwotCQkJdW5zaWduZWQgbmNjaTsKLQkJCWludCB1bml0ID0gMDsKLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmbmNjaSwgYXJncCwKLQkJCQkJICAgc2l6ZW9mKG5jY2kpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCW11dGV4X2xvY2soJmNkZXYtPm5jY2lfbGlzdF9tdHgpOwotCQkJbmNjaXAgPSBjYXBpbmNjaV9maW5kKGNkZXYsICh1MzIpIG5jY2kpOwotCQkJaWYgKCFuY2NpcCB8fCAobXAgPSBuY2NpcC0+bWlub3JwKSA9PSBOVUxMKSB7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZjZGV2LT5uY2NpX2xpc3RfbXR4KTsKLQkJCQlyZXR1cm4gLUVTUkNIOwotCQkJfQotCQkJdW5pdCA9IG1wLT5taW5vcjsKLQkJCW11dGV4X3VubG9jaygmY2Rldi0+bmNjaV9saXN0X210eCk7Ci0JCQlyZXR1cm4gdW5pdDsKLQkJfQotCQlyZXR1cm4gMDsKLSNlbmRpZiAvKiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUgKi8KKwkJbXV0ZXhfbG9jaygmY2Rldi0+bG9jayk7CisJCW5jY2lwID0gY2FwaW5jY2lfZmluZChjZGV2LCAodTMyKW5jY2kpOworCQlpZiAobmNjaXApCisJCQljb3VudCA9IGNhcGluY2NpX21pbm9yX29wZW5jb3VudChuY2NpcCk7CisJCW11dGV4X3VubG9jaygmY2Rldi0+bG9jayk7CisJCXJldHVybiBjb3VudDsKIAl9Ci0JcmV0dXJuIC1FSU5WQUw7CisKKyNpZmRlZiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUKKwljYXNlIENBUElfTkNDSV9HRVRVTklUOiB7CisJCXN0cnVjdCBjYXBpbmNjaSAqbmNjaXA7CisJCXN0cnVjdCBjYXBpbWlub3IgKm1wOworCQl1bnNpZ25lZCBuY2NpOworCQlpbnQgdW5pdCA9IC1FU1JDSDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJm5jY2ksIGFyZ3AsIHNpemVvZihuY2NpKSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQltdXRleF9sb2NrKCZjZGV2LT5sb2NrKTsKKwkJbmNjaXAgPSBjYXBpbmNjaV9maW5kKGNkZXYsICh1MzIpbmNjaSk7CisJCWlmIChuY2NpcCkgeworCQkJbXAgPSBuY2NpcC0+bWlub3JwOworCQkJaWYgKG1wKQorCQkJCXVuaXQgPSBtcC0+bWlub3I7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZjZGV2LT5sb2NrKTsKKwkJcmV0dXJuIHVuaXQ7CisJfQorI2VuZGlmIC8qIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRSAqLworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogfQogCi1zdGF0aWMgaW50Ci1jYXBpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGNhcGlfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQgcmV0OwotCQotCWxvY2tfa2VybmVsKCk7Ci0JaWYgKGZpbGUtPnByaXZhdGVfZGF0YSkKLQkJcmV0ID0gLUVFWElTVDsKLQllbHNlIGlmICgoZmlsZS0+cHJpdmF0ZV9kYXRhID0gY2FwaWRldl9hbGxvYygpKSA9PSBOVUxMKQotCQlyZXQgPSAtRU5PTUVNOwotCWVsc2UKLQkJcmV0ID0gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiByZXQ7CisJc3RydWN0IGNhcGlkZXYgKmNkZXY7CisKKwljZGV2ID0ga3phbGxvYyhzaXplb2YoKmNkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNkZXYpCisJCXJldHVybiAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmY2Rldi0+bG9jayk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmY2Rldi0+cmVjdnF1ZXVlKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjZGV2LT5yZWN2d2FpdCk7CisJSU5JVF9MSVNUX0hFQUQoJmNkZXYtPm5jY2lzKTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBjZGV2OworCisJbXV0ZXhfbG9jaygmY2FwaWRldl9saXN0X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmNkZXYtPmxpc3QsICZjYXBpZGV2X2xpc3QpOworCW11dGV4X3VubG9jaygmY2FwaWRldl9saXN0X2xvY2spOworCisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOwogfQogCi1zdGF0aWMgaW50Ci1jYXBpX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGNhcGlfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgY2FwaWRldiAqY2RldiA9IChzdHJ1Y3QgY2FwaWRldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY2FwaWRldiAqY2RldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCWNhcGlkZXZfZnJlZShjZGV2KTsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCQorCW11dGV4X2xvY2soJmNhcGlkZXZfbGlzdF9sb2NrKTsKKwlsaXN0X2RlbCgmY2Rldi0+bGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZjYXBpZGV2X2xpc3RfbG9jayk7CisKKwlpZiAoY2Rldi0+YXAuYXBwbGlkKQorCQljYXBpMjBfcmVsZWFzZSgmY2Rldi0+YXApOworCXNrYl9xdWV1ZV9wdXJnZSgmY2Rldi0+cmVjdnF1ZXVlKTsKKwljYXBpbmNjaV9mcmVlKGNkZXYsIDB4ZmZmZmZmZmYpOworCisJa2ZyZWUoY2Rldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMjMsMTgyICsxMDM0LDE1OSBAQAogI2lmZGVmIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRQogLyogLS0tLS0tLS0gdHR5X29wZXJhdGlvbnMgZm9yIGNhcGluY2NpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgY2FwaW5jX3R0eV9vcGVuKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCitzdGF0aWMgaW50CitjYXBpbmNfdHR5X2luc3RhbGwoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlzdHJ1Y3QgY2FwaW1pbm9yICptcDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpZHggPSB0dHktPmluZGV4OworCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gY2FwaW1pbm9yX2dldChpZHgpOworCWludCByZXQgPSB0dHlfaW5pdF90ZXJtaW9zKHR0eSk7CiAKLQlpZiAoKG1wID0gY2FwaW1pbm9yX2ZpbmQoaW1pbm9yKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpKSkgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTlhJTzsKLQlpZiAobXAtPm5jY2lwID09IE5VTEwpCi0JCXJldHVybiAtRU5YSU87CisJaWYgKHJldCA9PSAwKSB7CisJCXR0eV9kcml2ZXJfa3JlZl9nZXQoZHJpdmVyKTsKKwkJdHR5LT5jb3VudCsrOworCQl0dHktPmRyaXZlcl9kYXRhID0gbXA7CisJCWRyaXZlci0+dHR5c1tpZHhdID0gdHR5OworCX0gZWxzZQorCQljYXBpbWlub3JfcHV0KG1wKTsKKwlyZXR1cm4gcmV0OworfQogCi0JdHR5LT5kcml2ZXJfZGF0YSA9ICh2b2lkICopbXA7CitzdGF0aWMgdm9pZCBjYXBpbmNfdHR5X2NsZWFudXAoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7CisJY2FwaW1pbm9yX3B1dChtcCk7Cit9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmd29ya2Fyb3VuZF9sb2NrLCBmbGFncyk7Ci0JaWYgKGF0b21pY19yZWFkKCZtcC0+dHR5b3BlbmNvdW50KSA9PSAwKQotCQltcC0+dHR5ID0gdHR5OwotCWF0b21pY19pbmMoJm1wLT50dHlvcGVuY291bnQpOwotI2lmZGVmIF9ERUJVR19SRUZDT1VOVAotCXByaW50ayhLRVJOX0RFQlVHICJjYXBpbmNfdHR5X29wZW4gb2NvdW50PSVkXG4iLCBhdG9taWNfcmVhZCgmbXAtPnR0eW9wZW5jb3VudCkpOwotI2VuZGlmCitzdGF0aWMgaW50IGNhcGluY190dHlfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisJaW50IGVycjsKKworCWVyciA9IHR0eV9wb3J0X29wZW4oJm1wLT5wb3J0LCB0dHksIGZpbHApOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKIAloYW5kbGVfbWlub3JfcmVjdihtcCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya2Fyb3VuZF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNhcGluY190dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlsZSkKK3N0YXRpYyB2b2lkIGNhcGluY190dHlfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0Jc3RydWN0IGNhcGltaW5vciAqbXA7CisJc3RydWN0IGNhcGltaW5vciAqbXAgPSB0dHktPmRyaXZlcl9kYXRhOwogCi0JbXAgPSAoc3RydWN0IGNhcGltaW5vciAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0JaWYgKG1wKQl7Ci0JCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZtcC0+dHR5b3BlbmNvdW50KSkgewotI2lmZGVmIF9ERUJVR19SRUZDT1VOVAotCQkJcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfY2xvc2UgbGFzdGNsb3NlXG4iKTsKLSNlbmRpZgotCQkJdHR5LT5kcml2ZXJfZGF0YSA9IE5VTEw7Ci0JCQltcC0+dHR5ID0gTlVMTDsKLQkJfQotI2lmZGVmIF9ERUJVR19SRUZDT1VOVAotCQlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV9jbG9zZSBvY291bnQ9JWRcbiIsIGF0b21pY19yZWFkKCZtcC0+dHR5b3BlbmNvdW50KSk7Ci0jZW5kaWYKLQkJaWYgKG1wLT5uY2NpcCA9PSBOVUxMKQotCQkJY2FwaW1pbm9yX2ZyZWUobXApOwotCX0KLQotI2lmZGVmIF9ERUJVR19SRUZDT1VOVAotCXByaW50ayhLRVJOX0RFQlVHICJjYXBpbmNfdHR5X2Nsb3NlXG4iKTsKLSNlbmRpZgorCXR0eV9wb3J0X2Nsb3NlKCZtcC0+cG9ydCwgdHR5LCBmaWxwKTsKIH0KIAotc3RhdGljIGludCBjYXBpbmNfdHR5X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LAorc3RhdGljIGludCBjYXBpbmNfdHR5X3dyaXRlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7Ci0Jc3RydWN0IGNhcGltaW5vciAqbXAgPSAoc3RydWN0IGNhcGltaW5vciAqKXR0eS0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGNhcGltaW5vciAqbXAgPSB0dHktPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogI2lmZGVmIF9ERUJVR19UVFlGVU5DUwogCXByaW50ayhLRVJOX0RFQlVHICJjYXBpbmNfdHR5X3dyaXRlKGNvdW50PSVkKVxuIiwgY291bnQpOwogI2VuZGlmCiAKLQlpZiAoIW1wIHx8ICFtcC0+bmNjaXApIHsKLSNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKLQkJcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfd3JpdGU6IG1wIG9yIG1wLT5uY2NpIE5VTExcbiIpOwotI2VuZGlmCi0JCXJldHVybiAwOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ3b3JrYXJvdW5kX2xvY2ssIGZsYWdzKTsKLQlza2IgPSBtcC0+dHR5c2tiOworCXNwaW5fbG9ja19iaCgmbXAtPm91dGxvY2spOworCXNrYiA9IG1wLT5vdXRza2I7CiAJaWYgKHNrYikgewotCQltcC0+dHR5c2tiID0gTlVMTDsKLQkJc2tiX3F1ZXVlX3RhaWwoJm1wLT5vdXRxdWV1ZSwgc2tiKTsKKwkJbXAtPm91dHNrYiA9IE5VTEw7CisJCV9fc2tiX3F1ZXVlX3RhaWwoJm1wLT5vdXRxdWV1ZSwgc2tiKTsKIAkJbXAtPm91dGJ5dGVzICs9IHNrYi0+bGVuOwogCX0KIAogCXNrYiA9IGFsbG9jX3NrYihDQVBJX0RBVEFfQjNfUkVRX0xFTitjb3VudCwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjYXBpbmNfdHR5X3dyaXRlOiBhbGxvY19za2IgZmFpbGVkXG4iKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya2Fyb3VuZF9sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2JoKCZtcC0+b3V0bG9jayk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCXNrYl9yZXNlcnZlKHNrYiwgQ0FQSV9EQVRBX0IzX1JFUV9MRU4pOwogCW1lbWNweShza2JfcHV0KHNrYiwgY291bnQpLCBidWYsIGNvdW50KTsKIAotCXNrYl9xdWV1ZV90YWlsKCZtcC0+b3V0cXVldWUsIHNrYik7CisJX19za2JfcXVldWVfdGFpbCgmbXAtPm91dHF1ZXVlLCBza2IpOwogCW1wLT5vdXRieXRlcyArPSBza2ItPmxlbjsKLQkodm9pZCloYW5kbGVfbWlub3Jfc2VuZChtcCk7Ci0JKHZvaWQpaGFuZGxlX21pbm9yX3JlY3YobXApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmthcm91bmRfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2JoKCZtcC0+b3V0bG9jayk7CisKKwloYW5kbGVfbWlub3Jfc2VuZChtcCk7CisKIAlyZXR1cm4gY291bnQ7CiB9CiAKIHN0YXRpYyBpbnQgY2FwaW5jX3R0eV9wdXRfY2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKQogewotCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gKHN0cnVjdCBjYXBpbWlub3IgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gdHR5LT5kcml2ZXJfZGF0YTsKKwlib29sIGludm9rZV9zZW5kID0gZmFsc2U7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAxOwogCiAjaWZkZWYgX0RFQlVHX1RUWUZVTkNTCiAJcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY19wdXRfY2hhcigldSlcbiIsIGNoKTsKICNlbmRpZgogCi0JaWYgKCFtcCB8fCAhbXAtPm5jY2lwKSB7Ci0jaWZkZWYgX0RFQlVHX1RUWUZVTkNTCi0JCXByaW50ayhLRVJOX0RFQlVHICJjYXBpbmNfdHR5X3B1dF9jaGFyOiBtcCBvciBtcC0+bmNjaSBOVUxMXG4iKTsKLSNlbmRpZgotCQlyZXR1cm4gMDsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmd29ya2Fyb3VuZF9sb2NrLCBmbGFncyk7Ci0Jc2tiID0gbXAtPnR0eXNrYjsKKwlzcGluX2xvY2tfYmgoJm1wLT5vdXRsb2NrKTsKKwlza2IgPSBtcC0+b3V0c2tiOwogCWlmIChza2IpIHsKIAkJaWYgKHNrYl90YWlscm9vbShza2IpID4gMCkgewogCQkJKihza2JfcHV0KHNrYiwgMSkpID0gY2g7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3b3JrYXJvdW5kX2xvY2ssIGZsYWdzKTsKLQkJCXJldHVybiAxOworCQkJZ290byB1bmxvY2tfb3V0OwogCQl9Ci0JCW1wLT50dHlza2IgPSBOVUxMOwotCQlza2JfcXVldWVfdGFpbCgmbXAtPm91dHF1ZXVlLCBza2IpOworCQltcC0+b3V0c2tiID0gTlVMTDsKKwkJX19za2JfcXVldWVfdGFpbCgmbXAtPm91dHF1ZXVlLCBza2IpOwogCQltcC0+b3V0Ynl0ZXMgKz0gc2tiLT5sZW47Ci0JCSh2b2lkKWhhbmRsZV9taW5vcl9zZW5kKG1wKTsKKwkJaW52b2tlX3NlbmQgPSB0cnVlOwogCX0KKwogCXNrYiA9IGFsbG9jX3NrYihDQVBJX0RBVEFfQjNfUkVRX0xFTitDQVBJX01BWF9CTEtTSVpFLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiKSB7CiAJCXNrYl9yZXNlcnZlKHNrYiwgQ0FQSV9EQVRBX0IzX1JFUV9MRU4pOwogCQkqKHNrYl9wdXQoc2tiLCAxKSkgPSBjaDsKLQkJbXAtPnR0eXNrYiA9IHNrYjsKKwkJbXAtPm91dHNrYiA9IHNrYjsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9FUlIgImNhcGluY19wdXRfY2hhcjogY2hhciAldSBsb3N0XG4iLCBjaCk7CiAJCXJldCA9IDA7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmthcm91bmRfbG9jaywgZmxhZ3MpOworCit1bmxvY2tfb3V0OgorCXNwaW5fdW5sb2NrX2JoKCZtcC0+b3V0bG9jayk7CisKKwlpZiAoaW52b2tlX3NlbmQpCisJCWhhbmRsZV9taW5vcl9zZW5kKG1wKTsKKwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGNhcGluY190dHlfZmx1c2hfY2hhcnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IChzdHJ1Y3QgY2FwaW1pbm9yICopdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAjaWZkZWYgX0RFQlVHX1RUWUZVTkNTCiAJcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfZmx1c2hfY2hhcnNcbiIpOwogI2VuZGlmCiAKLQlpZiAoIW1wIHx8ICFtcC0+bmNjaXApIHsKLSNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKLQkJcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfZmx1c2hfY2hhcnM6IG1wIG9yIG1wLT5uY2NpIE5VTExcbiIpOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmd29ya2Fyb3VuZF9sb2NrLCBmbGFncyk7Ci0Jc2tiID0gbXAtPnR0eXNrYjsKKwlzcGluX2xvY2tfYmgoJm1wLT5vdXRsb2NrKTsKKwlza2IgPSBtcC0+b3V0c2tiOwogCWlmIChza2IpIHsKLQkJbXAtPnR0eXNrYiA9IE5VTEw7Ci0JCXNrYl9xdWV1ZV90YWlsKCZtcC0+b3V0cXVldWUsIHNrYik7CisJCW1wLT5vdXRza2IgPSBOVUxMOworCQlfX3NrYl9xdWV1ZV90YWlsKCZtcC0+b3V0cXVldWUsIHNrYik7CiAJCW1wLT5vdXRieXRlcyArPSBza2ItPmxlbjsKLQkJKHZvaWQpaGFuZGxlX21pbm9yX3NlbmQobXApOwotCX0KLQkodm9pZCloYW5kbGVfbWlub3JfcmVjdihtcCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya2Fyb3VuZF9sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2JoKCZtcC0+b3V0bG9jayk7CisKKwkJaGFuZGxlX21pbm9yX3NlbmQobXApOworCX0gZWxzZQorCQlzcGluX3VubG9ja19iaCgmbXAtPm91dGxvY2spOworCisJaGFuZGxlX21pbm9yX3JlY3YobXApOwogfQogCiBzdGF0aWMgaW50IGNhcGluY190dHlfd3JpdGVfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gKHN0cnVjdCBjYXBpbWlub3IgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpbnQgcm9vbTsKLQlpZiAoIW1wIHx8ICFtcC0+bmNjaXApIHsKLSNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKLQkJcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfd3JpdGVfcm9vbTogbXAgb3IgbXAtPm5jY2kgTlVMTFxuIik7Ci0jZW5kaWYKLQkJcmV0dXJuIDA7Ci0JfQorCiAJcm9vbSA9IENBUElOQ19NQVhfU0VORFFVRVVFLXNrYl9xdWV1ZV9sZW4oJm1wLT5vdXRxdWV1ZSk7CiAJcm9vbSAqPSBDQVBJX01BWF9CTEtTSVpFOwogI2lmZGVmIF9ERUJVR19UVFlGVU5DUwpAQCAtMTIwOSwxMyArMTE5Nyw4IEBACiAKIHN0YXRpYyBpbnQgY2FwaW5jX3R0eV9jaGFyc19pbl9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IChzdHJ1Y3QgY2FwaW1pbm9yICopdHR5LT5kcml2ZXJfZGF0YTsKLQlpZiAoIW1wIHx8ICFtcC0+bmNjaXApIHsKLSNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKLQkJcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfY2hhcnNfaW5fYnVmZmVyOiBtcCBvciBtcC0+bmNjaSBOVUxMXG4iKTsKLSNlbmRpZgotCQlyZXR1cm4gMDsKLQl9CisJc3RydWN0IGNhcGltaW5vciAqbXAgPSB0dHktPmRyaXZlcl9kYXRhOworCiAjaWZkZWYgX0RFQlVHX1RUWUZVTkNTCiAJcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfY2hhcnNfaW5fYnVmZmVyID0gJWQgbmFjaz0lZCBzcT0lZCBycT0lZFxuIiwKIAkJCW1wLT5vdXRieXRlcywgbXAtPm5hY2ssCkBAIC0xMjQ0LDYyICsxMjI3LDU1IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgY2FwaW5jX3R0eV90aHJvdHRsZShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSkKK3N0YXRpYyB2b2lkIGNhcGluY190dHlfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKLQlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IChzdHJ1Y3QgY2FwaW1pbm9yICopdHR5LT5kcml2ZXJfZGF0YTsKKwlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IHR0eS0+ZHJpdmVyX2RhdGE7CiAjaWZkZWYgX0RFQlVHX1RUWUZVTkNTCiAJcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfdGhyb3R0bGVcbiIpOwogI2VuZGlmCi0JaWYgKG1wKQotCQltcC0+dHR5aW5zdG9wID0gMTsKKwltcC0+dHR5aW5zdG9wID0gMTsKIH0KIAotc3RhdGljIHZvaWQgY2FwaW5jX3R0eV91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KQorc3RhdGljIHZvaWQgY2FwaW5jX3R0eV91bnRocm90dGxlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0Jc3RydWN0IGNhcGltaW5vciAqbXAgPSAoc3RydWN0IGNhcGltaW5vciAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisKICNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKIAlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV91bnRocm90dGxlXG4iKTsKICNlbmRpZgotCWlmIChtcCkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmd29ya2Fyb3VuZF9sb2NrLCBmbGFncyk7Ci0JCW1wLT50dHlpbnN0b3AgPSAwOwotCQloYW5kbGVfbWlub3JfcmVjdihtcCk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndvcmthcm91bmRfbG9jaywgZmxhZ3MpOwotCX0KKwltcC0+dHR5aW5zdG9wID0gMDsKKwloYW5kbGVfbWlub3JfcmVjdihtcCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNhcGluY190dHlfc3RvcChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewotCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gKHN0cnVjdCBjYXBpbWlub3IgKil0dHktPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjYXBpbWlub3IgKm1wID0gdHR5LT5kcml2ZXJfZGF0YTsKKwogI2lmZGVmIF9ERUJVR19UVFlGVU5DUwogCXByaW50ayhLRVJOX0RFQlVHICJjYXBpbmNfdHR5X3N0b3BcbiIpOwogI2VuZGlmCi0JaWYgKG1wKSB7Ci0JCW1wLT50dHlvdXRzdG9wID0gMTsKLQl9CisJbXAtPnR0eW91dHN0b3AgPSAxOwogfQogCiBzdGF0aWMgdm9pZCBjYXBpbmNfdHR5X3N0YXJ0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7Ci0Jc3RydWN0IGNhcGltaW5vciAqbXAgPSAoc3RydWN0IGNhcGltaW5vciAqKXR0eS0+ZHJpdmVyX2RhdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgY2FwaW1pbm9yICptcCA9IHR0eS0+ZHJpdmVyX2RhdGE7CisKICNpZmRlZiBfREVCVUdfVFRZRlVOQ1MKIAlwcmludGsoS0VSTl9ERUJVRyAiY2FwaW5jX3R0eV9zdGFydFxuIik7CiAjZW5kaWYKLQlpZiAobXApIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJndvcmthcm91bmRfbG9jaywgZmxhZ3MpOwotCQltcC0+dHR5b3V0c3RvcCA9IDA7Ci0JCSh2b2lkKWhhbmRsZV9taW5vcl9zZW5kKG1wKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmd29ya2Fyb3VuZF9sb2NrLCBmbGFncyk7Ci0JfQorCW1wLT50dHlvdXRzdG9wID0gMDsKKwloYW5kbGVfbWlub3Jfc2VuZChtcCk7CiB9CiAKIHN0YXRpYyB2b2lkIGNhcGluY190dHlfaGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CisJc3RydWN0IGNhcGltaW5vciAqbXAgPSB0dHktPmRyaXZlcl9kYXRhOworCiAjaWZkZWYgX0RFQlVHX1RUWUZVTkNTCiAJcHJpbnRrKEtFUk5fREVCVUcgImNhcGluY190dHlfaGFuZ3VwXG4iKTsKICNlbmRpZgorCXR0eV9wb3J0X2hhbmd1cCgmbXAtPnBvcnQpOwogfQogCiBzdGF0aWMgaW50IGNhcGluY190dHlfYnJlYWtfY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBzdGF0ZSkKQEAgLTEzMzEsOCArMTMwNyw2IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHN0cnVjdCB0dHlfZHJpdmVyICpjYXBpbmNfdHR5X2RyaXZlcjsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBjYXBpbmNfb3BzID0gewogCS5vcGVuID0gY2FwaW5jX3R0eV9vcGVuLAogCS5jbG9zZSA9IGNhcGluY190dHlfY2xvc2UsCkBAIC0xMzUyLDI1ICsxMzI2LDM0IEBACiAJLmZsdXNoX2J1ZmZlciA9IGNhcGluY190dHlfZmx1c2hfYnVmZmVyLAogCS5zZXRfbGRpc2MgPSBjYXBpbmNfdHR5X3NldF9sZGlzYywKIAkuc2VuZF94Y2hhciA9IGNhcGluY190dHlfc2VuZF94Y2hhciwKKwkuaW5zdGFsbCA9IGNhcGluY190dHlfaW5zdGFsbCwKKwkuY2xlYW51cCA9IGNhcGluY190dHlfY2xlYW51cCwKIH07CiAKLXN0YXRpYyBpbnQgY2FwaW5jX3R0eV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBjYXBpbmNfdHR5X2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgdHR5X2RyaXZlciAqZHJ2OwotCQorCWludCBlcnI7CisKIAlpZiAoY2FwaV90dHltaW5vcnMgPiBDQVBJTkNfTUFYX1BPUlRTKQogCQljYXBpX3R0eW1pbm9ycyA9IENBUElOQ19NQVhfUE9SVFM7CiAJaWYgKGNhcGlfdHR5bWlub3JzIDw9IDApCiAJCWNhcGlfdHR5bWlub3JzID0gQ0FQSU5DX05SX1BPUlRTOwogCi0JZHJ2ID0gYWxsb2NfdHR5X2RyaXZlcihjYXBpX3R0eW1pbm9ycyk7Ci0JaWYgKCFkcnYpCisJY2FwaW1pbm9ycyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjYXBpX21pbm9yICopICogY2FwaV90dHltaW5vcnMsCisJCQkgICAgIEdGUF9LRVJORUwpOworCWlmICghY2FwaW1pbm9ycykKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlkcnYgPSBhbGxvY190dHlfZHJpdmVyKGNhcGlfdHR5bWlub3JzKTsKKwlpZiAoIWRydikgeworCQlrZnJlZShjYXBpbWlub3JzKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCWRydi0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlkcnYtPmRyaXZlcl9uYW1lID0gImNhcGlfbmMiOwogCWRydi0+bmFtZSA9ICJjYXBpIjsKLQlkcnYtPm1ham9yID0gY2FwaV90dHltYWpvcjsKKwlkcnYtPm1ham9yID0gMDsKIAlkcnYtPm1pbm9yX3N0YXJ0ID0gMDsKIAlkcnYtPnR5cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOwogCWRydi0+c3VidHlwZSA9IFNFUklBTF9UWVBFX05PUk1BTDsKQEAgLTEzNzksMjcgKzEzNjIsMzkgQEAKIAlkcnYtPmluaXRfdGVybWlvcy5jX29mbGFnID0gT1BPU1QgfCBPTkxDUjsKIAlkcnYtPmluaXRfdGVybWlvcy5jX2NmbGFnID0gQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOwogCWRydi0+aW5pdF90ZXJtaW9zLmNfbGZsYWcgPSAwOwotCWRydi0+ZmxhZ3MgPSBUVFlfRFJJVkVSX1JFQUxfUkFXfFRUWV9EUklWRVJfUkVTRVRfVEVSTUlPUzsKKwlkcnYtPmZsYWdzID0KKwkJVFRZX0RSSVZFUl9SRUFMX1JBVyB8IFRUWV9EUklWRVJfUkVTRVRfVEVSTUlPUyB8CisJCVRUWV9EUklWRVJfRFlOQU1JQ19ERVY7CiAJdHR5X3NldF9vcGVyYXRpb25zKGRydiwgJmNhcGluY19vcHMpOwotCWlmICh0dHlfcmVnaXN0ZXJfZHJpdmVyKGRydikpIHsKKworCWVyciA9IHR0eV9yZWdpc3Rlcl9kcml2ZXIoZHJ2KTsKKwlpZiAoZXJyKSB7CiAJCXB1dF90dHlfZHJpdmVyKGRydik7CisJCWtmcmVlKGNhcGltaW5vcnMpOwogCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkbid0IHJlZ2lzdGVyIGNhcGlfbmMgZHJpdmVyXG4iKTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gZXJyOwogCX0KIAljYXBpbmNfdHR5X2RyaXZlciA9IGRydjsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY2FwaW5jX3R0eV9leGl0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgY2FwaW5jX3R0eV9leGl0KHZvaWQpCiB7Ci0Jc3RydWN0IHR0eV9kcml2ZXIgKmRydiA9IGNhcGluY190dHlfZHJpdmVyOwotCWludCByZXR2YWw7Ci0JaWYgKChyZXR2YWwgPSB0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoZHJ2KSkpCi0JCXByaW50ayhLRVJOX0VSUiAiY2FwaTogZmFpbGVkIHRvIHVucmVnaXN0ZXIgY2FwaV9uYyBkcml2ZXIgKCVkKVxuIiwgcmV0dmFsKTsKLQlwdXRfdHR5X2RyaXZlcihkcnYpOworCXR0eV91bnJlZ2lzdGVyX2RyaXZlcihjYXBpbmNfdHR5X2RyaXZlcik7CisJcHV0X3R0eV9kcml2ZXIoY2FwaW5jX3R0eV9kcml2ZXIpOworCWtmcmVlKGNhcGltaW5vcnMpOwogfQogCi0jZW5kaWYgLyogQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFICovCisjZWxzZSAvKiAhQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFICovCisKK3N0YXRpYyBpbmxpbmUgaW50IGNhcGluY190dHlfaW5pdCh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2FwaW5jX3R0eV9leGl0KHZvaWQpIHsgfQorCisjZW5kaWYgLyogIUNPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRSAqLwogCiAvKiAtLS0tLS0tLSAvcHJvYyBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtMTQwNywxMzQgKzE0MDIsOTEgQEAKICAqIC9wcm9jL2NhcGkvY2FwaTIwOgogICogIG1pbm9yIGFwcGxpZCBucmVjdmN0bHBrdCBucmVjdmRhdGFwa3QgbnNlbmRjdGxwa3QgbnNlbmRkYXRhcGt0CiAgKi8KLXN0YXRpYyBpbnQgcHJvY19jYXBpZGV2X3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGNhcGkyMF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogICAgICAgICBzdHJ1Y3QgY2FwaWRldiAqY2RldjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsOwotCWludCBsZW4gPSAwOwogCi0JcmVhZF9sb2NrKCZjYXBpZGV2X2xpc3RfbG9jayk7CisJbXV0ZXhfbG9jaygmY2FwaWRldl9saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2gobCwgJmNhcGlkZXZfbGlzdCkgewogCQljZGV2ID0gbGlzdF9lbnRyeShsLCBzdHJ1Y3QgY2FwaWRldiwgbGlzdCk7Ci0JCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiMCAlZCAlbHUgJWx1ICVsdSAlbHVcbiIsCisJCXNlcV9wcmludGYobSwgIjAgJWQgJWx1ICVsdSAlbHUgJWx1XG4iLAogCQkJY2Rldi0+YXAuYXBwbGlkLAogCQkJY2Rldi0+YXAubnJlY3ZjdGxwa3QsCiAJCQljZGV2LT5hcC5ucmVjdmRhdGFwa3QsCiAJCQljZGV2LT5hcC5uc2VudGN0bHBrdCwKIAkJCWNkZXYtPmFwLm5zZW50ZGF0YXBrdCk7Ci0JCWlmIChsZW4gPD0gb2ZmKSB7Ci0JCQlvZmYgLT0gbGVuOwotCQkJbGVuID0gMDsKLQkJfSBlbHNlIHsKLQkJCWlmIChsZW4tb2ZmID4gY291bnQpCi0JCQkJZ290byBlbmRsb29wOwotCQl9CiAJfQotCi1lbmRsb29wOgotCXJlYWRfdW5sb2NrKCZjYXBpZGV2X2xpc3RfbG9jayk7Ci0JaWYgKGxlbiA8IGNvdW50KQotCQkqZW9mID0gMTsKLQlpZiAobGVuID4gY291bnQpIGxlbiA9IGNvdW50OwotCWlmIChsZW4gPCAwKSBsZW4gPSAwOwotCXJldHVybiBsZW47CisJbXV0ZXhfdW5sb2NrKCZjYXBpZGV2X2xpc3RfbG9jayk7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgY2FwaTIwX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgY2FwaTIwX3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhcGkyMF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGNhcGkyMF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIC8qCiAgKiAvcHJvYy9jYXBpL2NhcGkyMG5jY2k6CiAgKiAgYXBwbGlkIG5jY2kKICAqLwotc3RhdGljIGludCBwcm9jX2NhcGluY2NpX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGNhcGkyMG5jY2lfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLSAgICAgICAgc3RydWN0IGNhcGlkZXYgKmNkZXY7Ci0gICAgICAgIHN0cnVjdCBjYXBpbmNjaSAqbnA7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbDsKLQlpbnQgbGVuID0gMDsKKwlzdHJ1Y3QgY2FwaWRldiAqY2RldjsKKwlzdHJ1Y3QgY2FwaW5jY2kgKm5wOwogCi0JcmVhZF9sb2NrKCZjYXBpZGV2X2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaChsLCAmY2FwaWRldl9saXN0KSB7Ci0JCWNkZXYgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBjYXBpZGV2LCBsaXN0KTsKLQkJZm9yIChucD1jZGV2LT5uY2NpczsgbnA7IG5wID0gbnAtPm5leHQpIHsKLQkJCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJWQgMHgleFxuIiwKLQkJCQkgICAgICAgY2Rldi0+YXAuYXBwbGlkLAotCQkJCSAgICAgICBucC0+bmNjaSk7Ci0JCQlpZiAobGVuIDw9IG9mZikgewotCQkJCW9mZiAtPSBsZW47Ci0JCQkJbGVuID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGxlbi1vZmYgPiBjb3VudCkKLQkJCQkJZ290byBlbmRsb29wOwotCQkJfQotCQl9CisJbXV0ZXhfbG9jaygmY2FwaWRldl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoY2RldiwgJmNhcGlkZXZfbGlzdCwgbGlzdCkgeworCQltdXRleF9sb2NrKCZjZGV2LT5sb2NrKTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShucCwgJmNkZXYtPm5jY2lzLCBsaXN0KQorCQkJc2VxX3ByaW50ZihtLCAiJWQgMHgleFxuIiwgY2Rldi0+YXAuYXBwbGlkLCBucC0+bmNjaSk7CisJCW11dGV4X3VubG9jaygmY2Rldi0+bG9jayk7CiAJfQotZW5kbG9vcDoKLQlyZWFkX3VubG9jaygmY2FwaWRldl9saXN0X2xvY2spOwotCSpzdGFydCA9IHBhZ2Urb2ZmOwotCWlmIChsZW4gPCBjb3VudCkKLQkJKmVvZiA9IDE7Ci0JaWYgKGxlbj5jb3VudCkgbGVuID0gY291bnQ7Ci0JaWYgKGxlbjwwKSBsZW4gPSAwOwotCXJldHVybiBsZW47CisJbXV0ZXhfdW5sb2NrKCZjYXBpZGV2X2xpc3RfbG9jayk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcHJvY2ZzZW50cmllcyB7Ci0gIGNoYXIgKm5hbWU7Ci0gIG1vZGVfdCBtb2RlOwotICBpbnQgKCpyZWFkX3Byb2MpKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvdW50LCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7Ci0gIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY2VudDsKLX0gcHJvY2ZzZW50cmllc1tdID0gewotICAgLyogeyAiY2FwaSIsCQkgIFNfSUZESVIsIDAgfSwgKi8KLSAgIHsgImNhcGkvY2FwaTIwIiwgCSAgMAkgLCBwcm9jX2NhcGlkZXZfcmVhZF9wcm9jIH0sCi0gICB7ICJjYXBpL2NhcGkyMG5jY2kiLCAgIDAJICwgcHJvY19jYXBpbmNjaV9yZWFkX3Byb2MgfSwKK3N0YXRpYyBpbnQgY2FwaTIwbmNjaV9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNhcGkyMG5jY2lfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2FwaTIwbmNjaV9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGNhcGkyMG5jY2lfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgcHJvY19pbml0KHZvaWQpCiB7Ci0gICAgaW50IG5lbGVtID0gQVJSQVlfU0laRShwcm9jZnNlbnRyaWVzKTsKLSAgICBpbnQgaTsKLQotICAgIGZvciAoaT0wOyBpIDwgbmVsZW07IGkrKykgewotICAgICAgICBzdHJ1Y3QgcHJvY2ZzZW50cmllcyAqcCA9IHByb2Nmc2VudHJpZXMgKyBpOwotCXAtPnByb2NlbnQgPSBjcmVhdGVfcHJvY19lbnRyeShwLT5uYW1lLCBwLT5tb2RlLCBOVUxMKTsKLQlpZiAocC0+cHJvY2VudCkgcC0+cHJvY2VudC0+cmVhZF9wcm9jID0gcC0+cmVhZF9wcm9jOwotICAgIH0KKwlwcm9jX2NyZWF0ZSgiY2FwaS9jYXBpMjAiLCAwLCBOVUxMLCAmY2FwaTIwX3Byb2NfZm9wcyk7CisJcHJvY19jcmVhdGUoImNhcGkvY2FwaTIwbmNjaSIsIDAsIE5VTEwsICZjYXBpMjBuY2NpX3Byb2NfZm9wcyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwcm9jX2V4aXQodm9pZCkKIHsKLSAgICBpbnQgbmVsZW0gPSBBUlJBWV9TSVpFKHByb2Nmc2VudHJpZXMpOwotICAgIGludCBpOwotCi0gICAgZm9yIChpPW5lbGVtLTE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgIHN0cnVjdCBwcm9jZnNlbnRyaWVzICpwID0gcHJvY2ZzZW50cmllcyArIGk7Ci0JaWYgKHAtPnByb2NlbnQpIHsKLQkgICByZW1vdmVfcHJvY19lbnRyeShwLT5uYW1lLCBOVUxMKTsKLQkgICBwLT5wcm9jZW50ID0gTlVMTDsKLQl9Ci0gICAgfQorCXJlbW92ZV9wcm9jX2VudHJ5KCJjYXBpL2NhcGkyMCIsIE5VTEwpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJjYXBpL2NhcGkyMG5jY2kiLCBOVUxMKTsKIH0KIAogLyogLS0tLS0tLS0gaW5pdCBmdW5jdGlvbiBhbmQgbW9kdWxlIGludGVyZmFjZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIAotc3RhdGljIGNoYXIgcmV2WzMyXTsKLQogc3RhdGljIGludCBfX2luaXQgY2FwaV9pbml0KHZvaWQpCiB7Ci0JY2hhciAqcDsKLQljaGFyICpjb21waWxlaW5mbzsKKwljb25zdCBjaGFyICpjb21waWxlaW5mbzsKIAlpbnQgbWFqb3JfcmV0OwogCi0JaWYgKChwID0gc3RyY2hyKHJldmlzaW9uLCAnOicpKSAhPSBOVUxMICYmIHBbMV0pIHsKLQkJc3RybGNweShyZXYsIHAgKyAyLCBzaXplb2YocmV2KSk7Ci0JCWlmICgocCA9IHN0cmNocihyZXYsICckJykpICE9IE5VTEwgJiYgcCA+IHJldikKLQkJICAgKihwLTEpID0gMDsKLQl9IGVsc2UKLQkJc3RyY3B5KHJldiwgIjEuMCIpOwotCiAJbWFqb3JfcmV0ID0gcmVnaXN0ZXJfY2hyZGV2KGNhcGlfbWFqb3IsICJjYXBpMjAiLCAmY2FwaV9mb3BzKTsKIAlpZiAobWFqb3JfcmV0IDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgImNhcGkyMDogdW5hYmxlIHRvIGdldCBtYWpvciAlZFxuIiwgY2FwaV9tYWpvcik7CkBAIC0xNTQ4LDI4ICsxNTAwLDI0IEBACiAKIAlkZXZpY2VfY3JlYXRlKGNhcGlfY2xhc3MsIE5VTEwsIE1LREVWKGNhcGlfbWFqb3IsIDApLCBOVUxMLCAiY2FwaSIpOwogCi0jaWZkZWYgQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFCiAJaWYgKGNhcGluY190dHlfaW5pdCgpIDwgMCkgewogCQlkZXZpY2VfZGVzdHJveShjYXBpX2NsYXNzLCBNS0RFVihjYXBpX21ham9yLCAwKSk7CiAJCWNsYXNzX2Rlc3Ryb3koY2FwaV9jbGFzcyk7CiAJCXVucmVnaXN0ZXJfY2hyZGV2KGNhcGlfbWFqb3IsICJjYXBpMjAiKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotI2VuZGlmIC8qIENPTkZJR19JU0ROX0NBUElfTUlERExFV0FSRSAqLwogCiAJcHJvY19pbml0KCk7CiAKLSNpZmRlZiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUKICNpZiBkZWZpbmVkKENPTkZJR19JU0ROX0NBUElfQ0FQSUZTKSB8fCBkZWZpbmVkKENPTkZJR19JU0ROX0NBUElfQ0FQSUZTX01PRFVMRSkKICAgICAgICAgY29tcGlsZWluZm8gPSAiIChtaWRkbGV3YXJlK2NhcGlmcykiOwotI2Vsc2UKKyNlbGlmIGRlZmluZWQoQ09ORklHX0lTRE5fQ0FQSV9NSURETEVXQVJFKQogICAgICAgICBjb21waWxlaW5mbyA9ICIgKG5vIGNhcGlmcykiOwotI2VuZGlmCiAjZWxzZQogICAgICAgICBjb21waWxlaW5mbyA9ICIgKG5vIG1pZGRsZXdhcmUpIjsKICNlbmRpZgotCXByaW50ayhLRVJOX05PVElDRSAiY2FwaTIwOiBSZXYgJXM6IHN0YXJ0ZWQgdXAgd2l0aCBtYWpvciAlZCVzXG4iLAotCQkJCXJldiwgY2FwaV9tYWpvciwgY29tcGlsZWluZm8pOworCXByaW50ayhLRVJOX05PVElDRSAiQ0FQSSAyLjAgc3RhcnRlZCB1cCB3aXRoIG1ham9yICVkJXNcbiIsCisJICAgICAgIGNhcGlfbWFqb3IsIGNvbXBpbGVpbmZvKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTU4MiwxMCArMTUzMCw3IEBACiAJY2xhc3NfZGVzdHJveShjYXBpX2NsYXNzKTsKIAl1bnJlZ2lzdGVyX2NocmRldihjYXBpX21ham9yLCAiY2FwaTIwIik7CiAKLSNpZmRlZiBDT05GSUdfSVNETl9DQVBJX01JRERMRVdBUkUKIAljYXBpbmNfdHR5X2V4aXQoKTsKLSNlbmRpZgotCXByaW50ayhLRVJOX05PVElDRSAiY2FwaTogUmV2ICVzOiB1bmxvYWRlZFxuIiwgcmV2KTsKIH0KIAogbW9kdWxlX2luaXQoY2FwaV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlkcnYuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlkcnYuYwppbmRleCA2NmI3ZDdhLi5iZjU1ZWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpZHJ2LmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWRydi5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaXNkbi5oPgogI2luY2x1ZGUgPGxpbnV4L2lzZG5pZi5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGkuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxjYXBpLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KQEAgLTM0LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pc2RuL2NhcGljbWQuaD4KICNpbmNsdWRlICJjYXBpZHJ2LmgiCiAKLXN0YXRpYyBjaGFyICpyZXZpc2lvbiA9ICIkUmV2aXNpb246IDEuMS4yLjIgJCI7CiBzdGF0aWMgaW50IGRlYnVnbW9kZSA9IDA7CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQ0FQSTRMaW51eDogSW50ZXJmYWNlIHRvIElTRE40TGludXgiKTsKQEAgLTIyMTAsOTYgKzIyMTAsNzMgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBsb3dlcl9jYWxsYmFjayh1bnNpZ25lZCBpbnQgY21kLCB1MzIgY29udHIsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50Citsb3dlcl9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdikKIHsKKwljYXBpX3Byb2ZpbGUgcHJvZmlsZTsKKwl1MzIgY29udHIgPSAobG9uZyl2OwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIEtDSV9DT05UUlVQOgorCXN3aXRjaCAodmFsKSB7CisJY2FzZSBDQVBJQ1RSX1VQOgogCQlwcmludGsoS0VSTl9JTkZPICJjYXBpZHJ2OiBjb250cm9sbGVyICVodSB1cFxuIiwgY29udHIpOwotCQkodm9pZCkgY2FwaWRydl9hZGRjb250cihjb250ciwgKGNhcGlfcHJvZmlsZSAqKSBkYXRhKTsKKwkJaWYgKGNhcGkyMF9nZXRfcHJvZmlsZShjb250ciwgJnByb2ZpbGUpID09IENBUElfTk9FUlJPUikKKwkJCSh2b2lkKSBjYXBpZHJ2X2FkZGNvbnRyKGNvbnRyLCAmcHJvZmlsZSk7CiAJCWJyZWFrOwotCWNhc2UgS0NJX0NPTlRSRE9XTjoKKwljYXNlIENBUElDVFJfRE9XTjoKIAkJcHJpbnRrKEtFUk5fSU5GTyAiY2FwaWRydjogY29udHJvbGxlciAlaHUgZG93blxuIiwgY29udHIpOwogCQkodm9pZCkgY2FwaWRydl9kZWxjb250cihjb250cik7CiAJCWJyZWFrOwogCX0KKwlyZXR1cm4gTk9USUZZX09LOwogfQogCiAvKgogICogL3Byb2MvY2FwaS9jYXBpZHJ2OgogICogbnJlY3ZjdGxwa3QgbnJlY3ZkYXRhcGt0IG5zZW5kY3RscGt0IG5zZW5kZGF0YXBrdAogICovCi1zdGF0aWMgaW50IHByb2NfY2FwaWRydl9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBjYXBpZHJ2X3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbiA9IDA7Ci0KLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiVsdSAlbHUgJWx1ICVsdVxuIiwKKwlzZXFfcHJpbnRmKG0sICIlbHUgJWx1ICVsdSAlbHVcbiIsCiAJCQlnbG9iYWwuYXAubnJlY3ZjdGxwa3QsCiAJCQlnbG9iYWwuYXAubnJlY3ZkYXRhcGt0LAogCQkJZ2xvYmFsLmFwLm5zZW50Y3RscGt0LAogCQkJZ2xvYmFsLmFwLm5zZW50ZGF0YXBrdCk7Ci0JaWYgKG9mZitjb3VudCA+PSBsZW4pCi0JICAgKmVvZiA9IDE7Ci0JaWYgKGxlbiA8IG9mZikKLSAgICAgICAgICAgcmV0dXJuIDA7Ci0JKnN0YXJ0ID0gcGFnZSArIG9mZjsKLQlyZXR1cm4gKChjb3VudCA8IGxlbi1vZmYpID8gY291bnQgOiBsZW4tb2ZmKTsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwcm9jZnNlbnRyaWVzIHsKLSAgY2hhciAqbmFtZTsKLSAgbW9kZV90IG1vZGU7Ci0gIGludCAoKnJlYWRfcHJvYykoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKLSAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jZW50OwotfSBwcm9jZnNlbnRyaWVzW10gPSB7Ci0gICAvKiB7ICJjYXBpIiwJCSAgU19JRkRJUiwgMCB9LCAqLwotICAgeyAiY2FwaS9jYXBpZHJ2IiwgCSAgMAkgLCBwcm9jX2NhcGlkcnZfcmVhZF9wcm9jIH0sCitzdGF0aWMgaW50IGNhcGlkcnZfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBjYXBpZHJ2X3Byb2Nfc2hvdywgTlVMTCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhcGlkcnZfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBjYXBpZHJ2X3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAogc3RhdGljIHZvaWQgX19pbml0IHByb2NfaW5pdCh2b2lkKQogewotICAgIGludCBuZWxlbSA9IEFSUkFZX1NJWkUocHJvY2ZzZW50cmllcyk7Ci0gICAgaW50IGk7Ci0KLSAgICBmb3IgKGk9MDsgaSA8IG5lbGVtOyBpKyspIHsKLSAgICAgICAgc3RydWN0IHByb2Nmc2VudHJpZXMgKnAgPSBwcm9jZnNlbnRyaWVzICsgaTsKLQlwLT5wcm9jZW50ID0gY3JlYXRlX3Byb2NfZW50cnkocC0+bmFtZSwgcC0+bW9kZSwgTlVMTCk7Ci0JaWYgKHAtPnByb2NlbnQpIHAtPnByb2NlbnQtPnJlYWRfcHJvYyA9IHAtPnJlYWRfcHJvYzsKLSAgICB9CisJcHJvY19jcmVhdGUoImNhcGkvY2FwaWRydiIsIDAsIE5VTEwsICZjYXBpZHJ2X3Byb2NfZm9wcyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBwcm9jX2V4aXQodm9pZCkKIHsKLSAgICBpbnQgbmVsZW0gPSBBUlJBWV9TSVpFKHByb2Nmc2VudHJpZXMpOwotICAgIGludCBpOwotCi0gICAgZm9yIChpPW5lbGVtLTE7IGkgPj0gMDsgaS0tKSB7Ci0gICAgICAgIHN0cnVjdCBwcm9jZnNlbnRyaWVzICpwID0gcHJvY2ZzZW50cmllcyArIGk7Ci0JaWYgKHAtPnByb2NlbnQpIHsKLQkgICByZW1vdmVfcHJvY19lbnRyeShwLT5uYW1lLCBOVUxMKTsKLQkgICBwLT5wcm9jZW50ID0gTlVMTDsKLQl9Ci0gICAgfQorCXJlbW92ZV9wcm9jX2VudHJ5KCJjYXBpL2NhcGlkcnYiLCBOVUxMKTsKIH0KIAorc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjYXBpY3RyX25iID0geworCS5ub3RpZmllcl9jYWxsID0gbG93ZXJfY2FsbGJhY2ssCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBjYXBpZHJ2X2luaXQodm9pZCkKIHsKIAljYXBpX3Byb2ZpbGUgcHJvZmlsZTsKLQljaGFyIHJldlszMl07Ci0JY2hhciAqcDsKIAl1MzIgbmNvbnRyLCBjb250cjsKIAl1MTYgZXJyY29kZTsKIAotCWlmICgocCA9IHN0cmNocihyZXZpc2lvbiwgJzonKSkgIT0gTlVMTCAmJiBwWzFdKSB7Ci0JCXN0cm5jcHkocmV2LCBwICsgMiwgc2l6ZW9mKHJldikpOwotCQlyZXZbc2l6ZW9mKHJldiktMV0gPSAwOwotCQlpZiAoKHAgPSBzdHJjaHIocmV2LCAnJCcpKSAhPSBOVUxMICYmIHAgPiByZXYpCi0JCSAgICoocC0xKSA9IDA7Ci0JfSBlbHNlCi0JCXN0cmNweShyZXYsICIxLjAiKTsKLQogCWdsb2JhbC5hcC5ycGFyYW0ubGV2ZWwzY250ID0gLTI7ICAvKiBudW1iZXIgb2YgYmNoYW5uZWxzIHR3aWNlICovCiAJZ2xvYmFsLmFwLnJwYXJhbS5kYXRhYmxrY250ID0gMTY7CiAJZ2xvYmFsLmFwLnJwYXJhbS5kYXRhYmxrbGVuID0gMjA0ODsKQEAgLTIzMTAsNyArMjI4Nyw3IEBACiAJCXJldHVybiAtRUlPOwogCX0KIAotCWNhcGkyMF9zZXRfY2FsbGJhY2soJmdsb2JhbC5hcCwgbG93ZXJfY2FsbGJhY2spOworCXJlZ2lzdGVyX2NhcGljdHJfbm90aWZpZXIoJmNhcGljdHJfbmIpOwogCiAJZXJyY29kZSA9IGNhcGkyMF9nZXRfcHJvZmlsZSgwLCAmcHJvZmlsZSk7CiAJaWYgKGVycmNvZGUgIT0gQ0FQSV9OT0VSUk9SKSB7CkBAIC0yMzI3LDI5ICsyMzA0LDE1IEBACiAJfQogCXByb2NfaW5pdCgpOwogCi0JcHJpbnRrKEtFUk5fTk9USUNFICJjYXBpZHJ2OiBSZXYgJXM6IGxvYWRlZFxuIiwgcmV2KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGNhcGlkcnZfZXhpdCh2b2lkKQogewotCWNoYXIgcmV2WzMyXTsKLQljaGFyICpwOwotCi0JaWYgKChwID0gc3RyY2hyKHJldmlzaW9uLCAnOicpKSAhPSBOVUxMKSB7Ci0JCXN0cm5jcHkocmV2LCBwICsgMSwgc2l6ZW9mKHJldikpOwotCQlyZXZbc2l6ZW9mKHJldiktMV0gPSAwOwotCQlpZiAoKHAgPSBzdHJjaHIocmV2LCAnJCcpKSAhPSBOVUxMKQotCQkJKnAgPSAwOwotCX0gZWxzZSB7Ci0JCXN0cmNweShyZXYsICIgPz8/ICIpOwotCX0KLQorCXVucmVnaXN0ZXJfY2FwaWN0cl9ub3RpZmllcigmY2FwaWN0cl9uYik7CiAJY2FwaTIwX3JlbGVhc2UoJmdsb2JhbC5hcCk7CiAKIAlwcm9jX2V4aXQoKTsKLQotCXByaW50ayhLRVJOX05PVElDRSAiY2FwaWRydjogUmV2JXM6IHVubG9hZGVkXG4iLCByZXYpOwogfQogCiBtb2R1bGVfaW5pdChjYXBpZHJ2X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWZzLmMgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpZnMuYwppbmRleCA5ZjhmNjdiLi44NTk2YmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpZnMuYworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpZnMuYwpAQCAtMjUsMTQgKzI1LDEwIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgY2hhciAqcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjEuMi4zICQiOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQogI2RlZmluZSBDQVBJRlNfU1VQRVJfTUFHSUMgKCgnQyc8PDgpfCdOJykKIAogc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqY2FwaWZzX21udDsKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjYXBpZnNfcm9vdDsKK3N0YXRpYyBpbnQgY2FwaWZzX21udF9jb3VudDsKIAogc3RhdGljIHN0cnVjdCB7CiAJaW50IHNldHVpZDsKQEAgLTExOCw3ICsxMTQsNyBAQAogCWlub2RlLT5pX2ZvcCA9ICZzaW1wbGVfZGlyX29wZXJhdGlvbnM7CiAJaW5vZGUtPmlfbmxpbmsgPSAyOwogCi0JY2FwaWZzX3Jvb3QgPSBzLT5zX3Jvb3QgPSBkX2FsbG9jX3Jvb3QoaW5vZGUpOworCXMtPnNfcm9vdCA9IGRfYWxsb2Nfcm9vdChpbm9kZSk7CiAJaWYgKHMtPnNfcm9vdCkKIAkJcmV0dXJuIDA7CiAJCkBAIC0xNDEsODIgKzEzNyw5OCBAQAogCS5raWxsX3NiCT0ga2lsbF9hbm9uX3N1cGVyLAogfTsKIAotc3RhdGljIHN0cnVjdCBkZW50cnkgKmdldF9ub2RlKGludCBudW0pCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbmV3X25jY2kodW5zaWduZWQgaW50IG51bWJlciwgZGV2X3QgZGV2aWNlKQogewotCWNoYXIgc1sxMF07Ci0Jc3RydWN0IGRlbnRyeSAqcm9vdCA9IGNhcGlmc19yb290OwotCW11dGV4X2xvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOwotCXJldHVybiBsb29rdXBfb25lX2xlbihzLCByb290LCBzcHJpbnRmKHMsICIlZCIsIG51bSkpOwotfQotCi12b2lkIGNhcGlmc19uZXdfbmNjaSh1bnNpZ25lZCBpbnQgbnVtYmVyLCBkZXZfdCBkZXZpY2UpCi17CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzID0gY2FwaWZzX21udC0+bW50X3NiOworCXN0cnVjdCBkZW50cnkgKnJvb3QgPSBzLT5zX3Jvb3Q7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZXdfaW5vZGUoY2FwaWZzX21udC0+bW50X3NiKTsKLQlpZiAoIWlub2RlKQotCQlyZXR1cm47Ci0JaW5vZGUtPmlfaW5vID0gbnVtYmVyKzI7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwljaGFyIG5hbWVbMTBdOworCWludCBuYW1lbGVuOwogCi0JZGVudHJ5ID0gZ2V0X25vZGUobnVtYmVyKTsKKwltdXRleF9sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKKworCW5hbWVsZW4gPSBzcHJpbnRmKG5hbWUsICIlZCIsIG51bWJlcik7CisJZGVudHJ5ID0gbG9va3VwX29uZV9sZW4obmFtZSwgcm9vdCwgbmFtZWxlbik7CisJaWYgKElTX0VSUihkZW50cnkpKSB7CisJCWRlbnRyeSA9IE5VTEw7CisJCWdvdG8gdW5sb2NrX291dDsKKwl9CisKKwlpZiAoZGVudHJ5LT5kX2lub2RlKSB7CisJCWRwdXQoZGVudHJ5KTsKKwkJZGVudHJ5ID0gTlVMTDsKKwkJZ290byB1bmxvY2tfb3V0OworCX0KKworCWlub2RlID0gbmV3X2lub2RlKHMpOworCWlmICghaW5vZGUpIHsKKwkJZHB1dChkZW50cnkpOworCQlkZW50cnkgPSBOVUxMOworCQlnb3RvIHVubG9ja19vdXQ7CisJfQogCiAJLyogY29uZmlnIGNvbnRlbnRzIGlzIHByb3RlY3RlZCBieSByb290J3MgaV9tdXRleCAqLwogCWlub2RlLT5pX3VpZCA9IGNvbmZpZy5zZXR1aWQgPyBjb25maWcudWlkIDogY3VycmVudF9mc3VpZCgpOwogCWlub2RlLT5pX2dpZCA9IGNvbmZpZy5zZXRnaWQgPyBjb25maWcuZ2lkIDogY3VycmVudF9mc2dpZCgpOwogCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKKwlpbm9kZS0+aV9pbm8gPSBudW1iZXIgKyAyOwogCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgU19JRkNIUnxjb25maWcubW9kZSwgZGV2aWNlKTsKLQkvL2lub2RlLT5pX29wID0gJmNhcGlmc19maWxlX2lub2RlX29wZXJhdGlvbnM7CiAKLQlpZiAoIUlTX0VSUihkZW50cnkpICYmICFkZW50cnktPmRfaW5vZGUpCi0JCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7Ci0JbXV0ZXhfdW5sb2NrKCZjYXBpZnNfcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7CisJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwlkZ2V0KGRlbnRyeSk7CisKK3VubG9ja19vdXQ6CisJbXV0ZXhfdW5sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKKworCXJldHVybiBkZW50cnk7CiB9CiAKLXZvaWQgY2FwaWZzX2ZyZWVfbmNjaSh1bnNpZ25lZCBpbnQgbnVtYmVyKQorc3RydWN0IGRlbnRyeSAqY2FwaWZzX25ld19uY2NpKHVuc2lnbmVkIGludCBudW1iZXIsIGRldl90IGRldmljZSkKIHsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBnZXRfbm9kZShudW1iZXIpOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAotCWlmICghSVNfRVJSKGRlbnRyeSkpIHsKLQkJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQkJaWYgKGlub2RlKSB7Ci0JCQlpbm9kZS0+aV9ubGluay0tOwotCQkJZF9kZWxldGUoZGVudHJ5KTsKLQkJCWRwdXQoZGVudHJ5KTsKLQkJfQorCWlmIChzaW1wbGVfcGluX2ZzKCZjYXBpZnNfZnNfdHlwZSwgJmNhcGlmc19tbnQsICZjYXBpZnNfbW50X2NvdW50KSA8IDApCisJCXJldHVybiBOVUxMOworCisJZGVudHJ5ID0gbmV3X25jY2kobnVtYmVyLCBkZXZpY2UpOworCWlmICghZGVudHJ5KQorCQlzaW1wbGVfcmVsZWFzZV9mcygmY2FwaWZzX21udCwgJmNhcGlmc19tbnRfY291bnQpOworCisJcmV0dXJuIGRlbnRyeTsKK30KKwordm9pZCBjYXBpZnNfZnJlZV9uY2NpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpyb290ID0gY2FwaWZzX21udC0+bW50X3NiLT5zX3Jvb3Q7CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCWlmICghZGVudHJ5KQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZyb290LT5kX2lub2RlLT5pX211dGV4KTsKKworCWlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCWlmIChpbm9kZSkgeworCQlkcm9wX25saW5rKGlub2RlKTsKKwkJZF9kZWxldGUoZGVudHJ5KTsKIAkJZHB1dChkZW50cnkpOwogCX0KLQltdXRleF91bmxvY2soJmNhcGlmc19yb290LT5kX2lub2RlLT5pX211dGV4KTsKKwlkcHV0KGRlbnRyeSk7CisKKwltdXRleF91bmxvY2soJnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgpOworCisJc2ltcGxlX3JlbGVhc2VfZnMoJmNhcGlmc19tbnQsICZjYXBpZnNfbW50X2NvdW50KTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgY2FwaWZzX2luaXQodm9pZCkKIHsKLQljaGFyIHJldlszMl07Ci0JY2hhciAqcDsKLQlpbnQgZXJyOwotCi0JaWYgKChwID0gc3RyY2hyKHJldmlzaW9uLCAnOicpKSAhPSBOVUxMICYmIHBbMV0pIHsKLQkJc3RybGNweShyZXYsIHAgKyAyLCBzaXplb2YocmV2KSk7Ci0JCWlmICgocCA9IHN0cmNocihyZXYsICckJykpICE9IE5VTEwgJiYgcCA+IHJldikKLQkJICAgKihwLTEpID0gMDsKLQl9IGVsc2UKLQkJc3RyY3B5KHJldiwgIjEuMCIpOwotCi0JZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmY2FwaWZzX2ZzX3R5cGUpOwotCWlmICghZXJyKSB7Ci0JCWNhcGlmc19tbnQgPSBrZXJuX21vdW50KCZjYXBpZnNfZnNfdHlwZSk7Ci0JCWlmIChJU19FUlIoY2FwaWZzX21udCkpIHsKLQkJCWVyciA9IFBUUl9FUlIoY2FwaWZzX21udCk7Ci0JCQl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmNhcGlmc19mc190eXBlKTsKLQkJfQotCX0KLQlpZiAoIWVycikKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJjYXBpZnM6IFJldiAlc1xuIiwgcmV2KTsKLQlyZXR1cm4gZXJyOworCXJldHVybiByZWdpc3Rlcl9maWxlc3lzdGVtKCZjYXBpZnNfZnNfdHlwZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjYXBpZnNfZXhpdCh2b2lkKQogewogCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmY2FwaWZzX2ZzX3R5cGUpOwotCW1udHB1dChjYXBpZnNfbW50KTsKIH0KIAogRVhQT1JUX1NZTUJPTChjYXBpZnNfbmV3X25jY2kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWZzLmggYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpZnMuaAppbmRleCBkMGJkNGMzLi5lMTkzZDExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpZnMuaAorKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9jYXBpZnMuaApAQCAtNyw1ICs3LDIyIEBACiAgKgogICovCiAKLXZvaWQgY2FwaWZzX25ld19uY2NpKHVuc2lnbmVkIGludCBudW0sIGRldl90IGRldmljZSk7Ci12b2lkIGNhcGlmc19mcmVlX25jY2kodW5zaWduZWQgaW50IG51bSk7CisjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19JU0ROX0NBUElfQ0FQSUZTKSB8fCBkZWZpbmVkKENPTkZJR19JU0ROX0NBUElfQ0FQSUZTX01PRFVMRSkKKworc3RydWN0IGRlbnRyeSAqY2FwaWZzX25ld19uY2NpKHVuc2lnbmVkIGludCBudW0sIGRldl90IGRldmljZSk7Cit2b2lkIGNhcGlmc19mcmVlX25jY2koc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5ICpjYXBpZnNfbmV3X25jY2kodW5zaWduZWQgaW50IG51bSwgZGV2X3QgZGV2aWNlKQoreworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2FwaWZzX2ZyZWVfbmNjaShzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2NhcGkva2NhcGkuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpLmMKaW5kZXggZGM1MDZhYi4uY2U5YjA1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkva2NhcGkuYworKysgYi9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaS5jCkBAIC0zNCwxMCArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2IxbGxpLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotCi1zdGF0aWMgY2hhciAqcmV2aXNpb24gPSAiJFJldmlzaW9uOiAxLjEuMi44ICQiOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KIAogc3RhdGljIGludCBzaG93Y2FwaW1zZ3MgPSAwOwogCkBAIC00OCwxMiArNDUsMTAgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdHJ1Y3QgY2FwaV9ub3RpZmllciB7CitzdHJ1Y3QgY2FwaWN0cl9ldmVudCB7CiAJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7Ci0JdW5zaWduZWQgaW50IGNtZDsKKwl1bnNpZ25lZCBpbnQgdHlwZTsKIAl1MzIgY29udHJvbGxlcjsKLQl1MTYgYXBwbGlkOwotCXUzMiBuY2NpOwogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtNjUsMzAgKzYwLDMxIEBACiAjZGVmaW5lIE5DQ0kyQ1RSTChuY2NpKSAgICAoKChuY2NpKSA+PiAyNCkgJiAweDdmKQogCiBMSVNUX0hFQUQoY2FwaV9kcml2ZXJzKTsKLURFRklORV9SV0xPQ0soY2FwaV9kcml2ZXJzX2xpc3RfbG9jayk7CitERUZJTkVfTVVURVgoY2FwaV9kcml2ZXJzX2xvY2spOwogCi1zdGF0aWMgREVGSU5FX1JXTE9DSyhhcHBsaWNhdGlvbl9sb2NrKTsKLXN0YXRpYyBERUZJTkVfTVVURVgoY29udHJvbGxlcl9tdXRleCk7CitzdHJ1Y3QgY2FwaV9jdHIgKmNhcGlfY29udHJvbGxlcltDQVBJX01BWENPTlRSXTsKK0RFRklORV9NVVRFWChjYXBpX2NvbnRyb2xsZXJfbG9jayk7CiAKIHN0cnVjdCBjYXBpMjBfYXBwbCAqY2FwaV9hcHBsaWNhdGlvbnNbQ0FQSV9NQVhBUFBMXTsKLXN0cnVjdCBjYXBpX2N0ciAqY2FwaV9jYXJkc1tDQVBJX01BWENPTlRSXTsKIAotc3RhdGljIGludCBuY2FyZHM7CitzdGF0aWMgaW50IG5jb250cm9sbGVyczsKKworc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQoY3RyX25vdGlmaWVyX2xpc3QpOwogCiAvKiAtLS0tLS0tLSBjb250cm9sbGVyIHJlZiBjb3VudGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjYXBpX2N0ciAqCi1jYXBpX2N0cl9nZXQoc3RydWN0IGNhcGlfY3RyICpjYXJkKQorY2FwaV9jdHJfZ2V0KHN0cnVjdCBjYXBpX2N0ciAqY3RyKQogewotCWlmICghdHJ5X21vZHVsZV9nZXQoY2FyZC0+b3duZXIpKQorCWlmICghdHJ5X21vZHVsZV9nZXQoY3RyLT5vd25lcikpCiAJCXJldHVybiBOVUxMOwotCXJldHVybiBjYXJkOworCXJldHVybiBjdHI7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotY2FwaV9jdHJfcHV0KHN0cnVjdCBjYXBpX2N0ciAqY2FyZCkKK2NhcGlfY3RyX3B1dChzdHJ1Y3QgY2FwaV9jdHIgKmN0cikKIHsKLQltb2R1bGVfcHV0KGNhcmQtPm93bmVyKTsKKwltb2R1bGVfcHV0KGN0ci0+b3duZXIpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC05OCw3ICs5NCw3IEBACiAJaWYgKGNvbnRyIC0gMSA+PSBDQVBJX01BWENPTlRSKQogCQlyZXR1cm4gTlVMTDsKIAotCXJldHVybiBjYXBpX2NhcmRzW2NvbnRyIC0gMV07CisJcmV0dXJuIGNhcGlfY29udHJvbGxlcltjb250ciAtIDFdOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjYXBpMjBfYXBwbCAqZ2V0X2NhcGlfYXBwbF9ieV9ucih1MTYgYXBwbGlkKQpAQCAtMTA2LDcgKzEwMiw3IEBACiAJaWYgKGFwcGxpZCAtIDEgPj0gQ0FQSV9NQVhBUFBMKQogCQlyZXR1cm4gTlVMTDsKIAotCXJldHVybiBjYXBpX2FwcGxpY2F0aW9uc1thcHBsaWQgLSAxXTsKKwlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKGNhcGlfYXBwbGljYXRpb25zW2FwcGxpZCAtIDFdKTsKIH0KIAogLyogLS0tLS0tLS0gdXRpbCBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xNDgsMTA2ICsxNDQsMTU5IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgdm9pZCByZWdpc3Rlcl9hcHBsKHN0cnVjdCBjYXBpX2N0ciAqY2FyZCwgdTE2IGFwcGxpZCwgY2FwaV9yZWdpc3Rlcl9wYXJhbXMgKnJwYXJhbSkKK3N0YXRpYyB2b2lkCityZWdpc3Rlcl9hcHBsKHN0cnVjdCBjYXBpX2N0ciAqY3RyLCB1MTYgYXBwbGlkLCBjYXBpX3JlZ2lzdGVyX3BhcmFtcyAqcnBhcmFtKQogewotCWNhcmQgPSBjYXBpX2N0cl9nZXQoY2FyZCk7CisJY3RyID0gY2FwaV9jdHJfZ2V0KGN0cik7CiAKLQlpZiAoY2FyZCkKLQkJY2FyZC0+cmVnaXN0ZXJfYXBwbChjYXJkLCBhcHBsaWQsIHJwYXJhbSk7CisJaWYgKGN0cikKKwkJY3RyLT5yZWdpc3Rlcl9hcHBsKGN0ciwgYXBwbGlkLCBycGFyYW0pOwogCWVsc2UKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNhbm5vdCBnZXQgY2FyZCByZXNvdXJjZXNcbiIsIF9fZnVuY19fKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGNhbm5vdCBnZXQgY29udHJvbGxlciByZXNvdXJjZXNcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CiB9CiAKIAotc3RhdGljIHZvaWQgcmVsZWFzZV9hcHBsKHN0cnVjdCBjYXBpX2N0ciAqY2FyZCwgdTE2IGFwcGxpZCkKK3N0YXRpYyB2b2lkIHJlbGVhc2VfYXBwbChzdHJ1Y3QgY2FwaV9jdHIgKmN0ciwgdTE2IGFwcGxpZCkKIHsKIAlEQkcoImFwcGxpZCAlI3giLCBhcHBsaWQpOwogCQotCWNhcmQtPnJlbGVhc2VfYXBwbChjYXJkLCBhcHBsaWQpOwotCWNhcGlfY3RyX3B1dChjYXJkKTsKKwljdHItPnJlbGVhc2VfYXBwbChjdHIsIGFwcGxpZCk7CisJY2FwaV9jdHJfcHV0KGN0cik7CiB9CiAKLS8qIC0tLS0tLS0tIEtDSV9DT05UUlVQIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCiBzdGF0aWMgdm9pZCBub3RpZnlfdXAodTMyIGNvbnRyKQogewotCXN0cnVjdCBjYXBpX2N0ciAqY2FyZCA9IGdldF9jYXBpX2N0cl9ieV9ucihjb250cik7CisJc3RydWN0IGNhcGkyMF9hcHBsICphcDsKKwlzdHJ1Y3QgY2FwaV9jdHIgKmN0cjsKKwl1MTYgYXBwbGlkOworCisJbXV0ZXhfbG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOworCisJaWYgKHNob3djYXBpbXNncyAmIDEpCisJICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAia2NhcGk6IG5vdGlmeSB1cCBjb250ciAlZFxuIiwgY29udHIpOworCisJY3RyID0gZ2V0X2NhcGlfY3RyX2J5X25yKGNvbnRyKTsKKwlpZiAoY3RyKSB7CisJCWlmIChjdHItPnN0YXRlID09IENBUElfQ1RSX1JVTk5JTkcpCisJCQlnb3RvIHVubG9ja19vdXQ7CisKKwkJY3RyLT5zdGF0ZSA9IENBUElfQ1RSX1JVTk5JTkc7CisKKwkJZm9yIChhcHBsaWQgPSAxOyBhcHBsaWQgPD0gQ0FQSV9NQVhBUFBMOyBhcHBsaWQrKykgeworCQkJYXAgPSBnZXRfY2FwaV9hcHBsX2J5X25yKGFwcGxpZCk7CisJCQlpZiAoIWFwKQorCQkJCWNvbnRpbnVlOworCQkJcmVnaXN0ZXJfYXBwbChjdHIsIGFwcGxpZCwgJmFwLT5ycGFyYW0pOworCQl9CisKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbCgmY3RyLT5zdGF0ZV93YWl0X3F1ZXVlKTsKKwl9IGVsc2UKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGludmFsaWQgY29udHIgJWRcbiIsIF9fZnVuY19fLCBjb250cik7CisKK3VubG9ja19vdXQ6CisJbXV0ZXhfdW5sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGN0cl9kb3duKHN0cnVjdCBjYXBpX2N0ciAqY3RyLCBpbnQgbmV3X3N0YXRlKQorewogCXN0cnVjdCBjYXBpMjBfYXBwbCAqYXA7CiAJdTE2IGFwcGxpZDsKIAotCWlmIChzaG93Y2FwaW1zZ3MgJiAxKSB7Ci0JICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAia2NhcGk6IG5vdGlmeSB1cCBjb250ciAlZFxuIiwgY29udHIpOwotCX0KLQlpZiAoIWNhcmQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGludmFsaWQgY29udHIgJWRcbiIsIF9fZnVuY19fLCBjb250cik7CisJaWYgKGN0ci0+c3RhdGUgPT0gQ0FQSV9DVFJfREVURUNURUQgfHwgY3RyLT5zdGF0ZSA9PSBDQVBJX0NUUl9ERVRBQ0hFRCkKIAkJcmV0dXJuOwotCX0KKworCWN0ci0+c3RhdGUgPSBuZXdfc3RhdGU7CisKKwltZW1zZXQoY3RyLT5tYW51LCAwLCBzaXplb2YoY3RyLT5tYW51KSk7CisJbWVtc2V0KCZjdHItPnZlcnNpb24sIDAsIHNpemVvZihjdHItPnZlcnNpb24pKTsKKwltZW1zZXQoJmN0ci0+cHJvZmlsZSwgMCwgc2l6ZW9mKGN0ci0+cHJvZmlsZSkpOworCW1lbXNldChjdHItPnNlcmlhbCwgMCwgc2l6ZW9mKGN0ci0+c2VyaWFsKSk7CisKIAlmb3IgKGFwcGxpZCA9IDE7IGFwcGxpZCA8PSBDQVBJX01BWEFQUEw7IGFwcGxpZCsrKSB7CiAJCWFwID0gZ2V0X2NhcGlfYXBwbF9ieV9ucihhcHBsaWQpOwotCQlpZiAoIWFwIHx8IGFwLT5yZWxlYXNlX2luX3Byb2dyZXNzKSBjb250aW51ZTsKLQkJcmVnaXN0ZXJfYXBwbChjYXJkLCBhcHBsaWQsICZhcC0+cnBhcmFtKTsKLQkJaWYgKGFwLT5jYWxsYmFjayAmJiAhYXAtPnJlbGVhc2VfaW5fcHJvZ3Jlc3MpCi0JCQlhcC0+Y2FsbGJhY2soS0NJX0NPTlRSVVAsIGNvbnRyLCAmY2FyZC0+cHJvZmlsZSk7CisJCWlmIChhcCkKKwkJCWNhcGlfY3RyX3B1dChjdHIpOwogCX0KLX0KIAotLyogLS0tLS0tLS0gS0NJX0NPTlRSRE9XTiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlX2FsbCgmY3RyLT5zdGF0ZV93YWl0X3F1ZXVlKTsKK30KIAogc3RhdGljIHZvaWQgbm90aWZ5X2Rvd24odTMyIGNvbnRyKQogewotCXN0cnVjdCBjYXBpMjBfYXBwbCAqYXA7Ci0JdTE2IGFwcGxpZDsKKwlzdHJ1Y3QgY2FwaV9jdHIgKmN0cjsKIAotCWlmIChzaG93Y2FwaW1zZ3MgJiAxKSB7Ci0gICAgICAgIAlwcmludGsoS0VSTl9ERUJVRyAia2NhcGk6IG5vdGlmeSBkb3duIGNvbnRyICVkXG4iLCBjb250cik7Ci0JfQorCW11dGV4X2xvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKIAotCWZvciAoYXBwbGlkID0gMTsgYXBwbGlkIDw9IENBUElfTUFYQVBQTDsgYXBwbGlkKyspIHsKLQkJYXAgPSBnZXRfY2FwaV9hcHBsX2J5X25yKGFwcGxpZCk7Ci0JCWlmIChhcCAmJiBhcC0+Y2FsbGJhY2sgJiYgIWFwLT5yZWxlYXNlX2luX3Byb2dyZXNzKQotCQkJYXAtPmNhbGxiYWNrKEtDSV9DT05UUkRPV04sIGNvbnRyLCBOVUxMKTsKLQl9CisJaWYgKHNob3djYXBpbXNncyAmIDEpCisJCXByaW50ayhLRVJOX0RFQlVHICJrY2FwaTogbm90aWZ5IGRvd24gY29udHIgJWRcbiIsIGNvbnRyKTsKKworCWN0ciA9IGdldF9jYXBpX2N0cl9ieV9ucihjb250cik7CisJaWYgKGN0cikKKwkJY3RyX2Rvd24oY3RyLCBDQVBJX0NUUl9ERVRFQ1RFRCk7CisJZWxzZQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaW52YWxpZCBjb250ciAlZFxuIiwgX19mdW5jX18sIGNvbnRyKTsKKworCW11dGV4X3VubG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBub3RpZnlfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgaW50Citub3RpZnlfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIHZhbCwgdm9pZCAqdikKIHsKLQlzdHJ1Y3QgY2FwaV9ub3RpZmllciAqbnAgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGNhcGlfbm90aWZpZXIsIHdvcmspOworCXUzMiBjb250ciA9IChsb25nKXY7CiAKLQlzd2l0Y2ggKG5wLT5jbWQpIHsKLQljYXNlIEtDSV9DT05UUlVQOgotCQlub3RpZnlfdXAobnAtPmNvbnRyb2xsZXIpOworCXN3aXRjaCAodmFsKSB7CisJY2FzZSBDQVBJQ1RSX1VQOgorCQlub3RpZnlfdXAoY29udHIpOwogCQlicmVhazsKLQljYXNlIEtDSV9DT05UUkRPV046Ci0JCW5vdGlmeV9kb3duKG5wLT5jb250cm9sbGVyKTsKKwljYXNlIENBUElDVFJfRE9XTjoKKwkJbm90aWZ5X2Rvd24oY29udHIpOwogCQlicmVhazsKIAl9CisJcmV0dXJuIE5PVElGWV9PSzsKK30KIAotCWtmcmVlKG5wKTsKK3N0YXRpYyB2b2lkIGRvX25vdGlmeV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgY2FwaWN0cl9ldmVudCAqZXZlbnQgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGNhcGljdHJfZXZlbnQsIHdvcmspOworCisJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmY3RyX25vdGlmaWVyX2xpc3QsIGV2ZW50LT50eXBlLAorCQkJCSAgICAgKHZvaWQgKikobG9uZylldmVudC0+Y29udHJvbGxlcik7CisJa2ZyZWUoZXZlbnQpOwogfQogCiAvKgogICogVGhlIG5vdGlmaWVyIHdpbGwgcmVzdWx0IGluIGFkZGluZy9kZWxldGVpbmcgb2YgZGV2aWNlcy4gRGV2aWNlcyBjYW4KICAqIG9ubHkgcmVtb3ZlZCBpbiB1c2VyIHByb2Nlc3MsIG5vdCBpbiBiaC4KICAqLwotc3RhdGljIGludCBub3RpZnlfcHVzaCh1bnNpZ25lZCBpbnQgY21kLCB1MzIgY29udHJvbGxlciwgdTE2IGFwcGxpZCwgdTMyIG5jY2kpCitzdGF0aWMgaW50IG5vdGlmeV9wdXNoKHVuc2lnbmVkIGludCBldmVudF90eXBlLCB1MzIgY29udHJvbGxlcikKIHsKLQlzdHJ1Y3QgY2FwaV9ub3RpZmllciAqbnAgPSBrbWFsbG9jKHNpemVvZigqbnApLCBHRlBfQVRPTUlDKTsKKwlzdHJ1Y3QgY2FwaWN0cl9ldmVudCAqZXZlbnQgPSBrbWFsbG9jKHNpemVvZigqZXZlbnQpLCBHRlBfQVRPTUlDKTsKIAotCWlmICghbnApCisJaWYgKCFldmVudCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlJTklUX1dPUksoJm5wLT53b3JrLCBub3RpZnlfaGFuZGxlcik7Ci0JbnAtPmNtZCA9IGNtZDsKLQlucC0+Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7Ci0JbnAtPmFwcGxpZCA9IGFwcGxpZDsKLQlucC0+bmNjaSA9IG5jY2k7CisJSU5JVF9XT1JLKCZldmVudC0+d29yaywgZG9fbm90aWZ5X3dvcmspOworCWV2ZW50LT50eXBlID0gZXZlbnRfdHlwZTsKKwlldmVudC0+Y29udHJvbGxlciA9IGNvbnRyb2xsZXI7CiAKLQlzY2hlZHVsZV93b3JrKCZucC0+d29yayk7CisJc2NoZWR1bGVfd29yaygmZXZlbnQtPndvcmspOwogCXJldHVybiAwOwogfQogCi0JCitpbnQgcmVnaXN0ZXJfY2FwaWN0cl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKQoreworCXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmY3RyX25vdGlmaWVyX2xpc3QsIG5iKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2NhcGljdHJfbm90aWZpZXIpOworCitpbnQgdW5yZWdpc3Rlcl9jYXBpY3RyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJcmV0dXJuIGJsb2NraW5nX25vdGlmaWVyX2NoYWluX3VucmVnaXN0ZXIoJmN0cl9ub3RpZmllcl9saXN0LCBuYik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX2NhcGljdHJfbm90aWZpZXIpOworCiAvKiAtLS0tLS0tLSBSZWNlaXZlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHZvaWQgcmVjdl9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTI3Myw2OCArMzIyLDcwIEBACiAKIC8qKgogICogY2FwaV9jdHJfaGFuZGxlX21lc3NhZ2UoKSAtIGhhbmRsZSBpbmNvbWluZyBDQVBJIG1lc3NhZ2UKLSAqIEBjYXJkOgljb250cm9sbGVyIGRlc2NyaXB0b3Igc3RydWN0dXJlLgorICogQGN0cjoJY29udHJvbGxlciBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KICAqIEBhcHBsOglhcHBsaWNhdGlvbiBJRC4KICAqIEBza2I6CW1lc3NhZ2UuCiAgKgogICogQ2FsbGVkIGJ5IGhhcmR3YXJlIGRyaXZlciB0byBwYXNzIGEgQ0FQSSBtZXNzYWdlIHRvIHRoZSBhcHBsaWNhdGlvbi4KICAqLwogCi12b2lkIGNhcGlfY3RyX2hhbmRsZV9tZXNzYWdlKHN0cnVjdCBjYXBpX2N0ciAqIGNhcmQsIHUxNiBhcHBsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQordm9pZCBjYXBpX2N0cl9oYW5kbGVfbWVzc2FnZShzdHJ1Y3QgY2FwaV9jdHIgKmN0ciwgdTE2IGFwcGwsCisJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGNhcGkyMF9hcHBsICphcDsKIAlpbnQgc2hvd2N0bCA9IDA7CiAJdTggY21kLCBzdWJjbWQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlfY2RlYmJ1ZiAqY2RiOwogCi0JaWYgKGNhcmQtPmNhcmRzdGF0ZSAhPSBDQVJEX1JVTk5JTkcpIHsKKwlpZiAoY3RyLT5zdGF0ZSAhPSBDQVBJX0NUUl9SVU5OSU5HKSB7CiAJCWNkYiA9IGNhcGlfbWVzc2FnZTJzdHIoc2tiLT5kYXRhKTsKIAkJaWYgKGNkYikgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAia2NhcGk6IGNvbnRyb2xsZXIgWyUwM2RdIG5vdCBhY3RpdmUsIGdvdDogJXMiLAotCQkJCWNhcmQtPmNuciwgY2RiLT5idWYpOworCQkJCWN0ci0+Y25yLCBjZGItPmJ1Zik7CiAJCQljZGViYnVmX2ZyZWUoY2RiKTsKIAkJfSBlbHNlCiAJCQlwcmludGsoS0VSTl9JTkZPICJrY2FwaTogY29udHJvbGxlciBbJTAzZF0gbm90IGFjdGl2ZSwgY2Fubm90IHRyYWNlXG4iLAotCQkJCWNhcmQtPmNucik7CisJCQkJY3RyLT5jbnIpOwogCQlnb3RvIGVycm9yOwogCX0KIAogCWNtZCA9IENBUElNU0dfQ09NTUFORChza2ItPmRhdGEpOwogICAgICAgICBzdWJjbWQgPSBDQVBJTVNHX1NVQkNPTU1BTkQoc2tiLT5kYXRhKTsKIAlpZiAoY21kID09IENBUElfREFUQV9CMyAmJiBzdWJjbWQgPT0gQ0FQSV9JTkQpIHsKLQkJY2FyZC0+bnJlY3ZkYXRhcGt0Kys7Ci0JICAgICAgICBpZiAoY2FyZC0+dHJhY2VmbGFnID4gMikgc2hvd2N0bCB8PSAyOworCQljdHItPm5yZWN2ZGF0YXBrdCsrOworCQlpZiAoY3RyLT50cmFjZWZsYWcgPiAyKQorCQkJc2hvd2N0bCB8PSAyOwogCX0gZWxzZSB7Ci0JCWNhcmQtPm5yZWN2Y3RscGt0Kys7Ci0JICAgICAgICBpZiAoY2FyZC0+dHJhY2VmbGFnKSBzaG93Y3RsIHw9IDI7CisJCWN0ci0+bnJlY3ZjdGxwa3QrKzsKKwkJaWYgKGN0ci0+dHJhY2VmbGFnKQorCQkJc2hvd2N0bCB8PSAyOwogCX0KLQlzaG93Y3RsIHw9IChjYXJkLT50cmFjZWZsYWcgJiAxKTsKKwlzaG93Y3RsIHw9IChjdHItPnRyYWNlZmxhZyAmIDEpOwogCWlmIChzaG93Y3RsICYgMikgewogCQlpZiAoc2hvd2N0bCAmIDEpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJrY2FwaTogZ290IFslMDNkXSBpZCMlZCAlcyBsZW49JXVcbiIsCi0JCQkgICAgICAgY2FyZC0+Y25yLCBDQVBJTVNHX0FQUElEKHNrYi0+ZGF0YSksCisJCQkgICAgICAgY3RyLT5jbnIsIENBUElNU0dfQVBQSUQoc2tiLT5kYXRhKSwKIAkJCSAgICAgICBjYXBpX2NtZDJzdHIoY21kLCBzdWJjbWQpLAogCQkJICAgICAgIENBUElNU0dfTEVOKHNrYi0+ZGF0YSkpOwogCQl9IGVsc2UgewogCQkJY2RiID0gY2FwaV9tZXNzYWdlMnN0cihza2ItPmRhdGEpOwogCQkJaWYgKGNkYikgewogCQkJCXByaW50ayhLRVJOX0RFQlVHICJrY2FwaTogZ290IFslMDNkXSAlc1xuIiwKLQkJCQkJY2FyZC0+Y25yLCBjZGItPmJ1Zik7CisJCQkJCWN0ci0+Y25yLCBjZGItPmJ1Zik7CiAJCQkJY2RlYmJ1Zl9mcmVlKGNkYik7CiAJCQl9IGVsc2UKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAia2NhcGk6IGdvdCBbJTAzZF0gaWQjJWQgJXMgbGVuPSV1LCBjYW5ub3QgdHJhY2VcbiIsCi0JCQkJCWNhcmQtPmNuciwgQ0FQSU1TR19BUFBJRChza2ItPmRhdGEpLAorCQkJCQljdHItPmNuciwgQ0FQSU1TR19BUFBJRChza2ItPmRhdGEpLAogCQkJCQljYXBpX2NtZDJzdHIoY21kLCBzdWJjbWQpLAogCQkJCQlDQVBJTVNHX0xFTihza2ItPmRhdGEpKTsKIAkJfQogCiAJfQogCi0JcmVhZF9sb2NrX2lycXNhdmUoJmFwcGxpY2F0aW9uX2xvY2ssIGZsYWdzKTsKKwlyY3VfcmVhZF9sb2NrKCk7CiAJYXAgPSBnZXRfY2FwaV9hcHBsX2J5X25yKENBUElNU0dfQVBQSUQoc2tiLT5kYXRhKSk7Ci0JaWYgKCghYXApIHx8IChhcC0+cmVsZWFzZV9pbl9wcm9ncmVzcykpIHsKLQkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmYXBwbGljYXRpb25fbG9jaywgZmxhZ3MpOworCWlmICghYXApIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWNkYiA9IGNhcGlfbWVzc2FnZTJzdHIoc2tiLT5kYXRhKTsKIAkJaWYgKGNkYikgewogCQkJcHJpbnRrKEtFUk5fRVJSICJrY2FwaTogaGFuZGxlX21lc3NhZ2U6IGFwcGxpZCAlZCBzdGF0ZSByZWxlYXNlZCAoJXMpXG4iLApAQCAtMzQ4LDcgKzM5OSw3IEBACiAJfQogCXNrYl9xdWV1ZV90YWlsKCZhcC0+cmVjdl9xdWV1ZSwgc2tiKTsKIAlzY2hlZHVsZV93b3JrKCZhcC0+cmVjdl93b3JrKTsKLQlyZWFkX3VubG9ja19pcnFyZXN0b3JlKCZhcHBsaWNhdGlvbl9sb2NrLCBmbGFncyk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlyZXR1cm47CiAKQEAgLTM2MCw3NCArNDExLDU0IEBACiAKIC8qKgogICogY2FwaV9jdHJfcmVhZHkoKSAtIHNpZ25hbCBDQVBJIGNvbnRyb2xsZXIgcmVhZHkKLSAqIEBjYXJkOgljb250cm9sbGVyIGRlc2NyaXB0b3Igc3RydWN0dXJlLgorICogQGN0cjoJY29udHJvbGxlciBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KICAqCiAgKiBDYWxsZWQgYnkgaGFyZHdhcmUgZHJpdmVyIHRvIHNpZ25hbCB0aGF0IHRoZSBjb250cm9sbGVyIGlzIHVwIGFuZCBydW5uaW5nLgogICovCiAKLXZvaWQgY2FwaV9jdHJfcmVhZHkoc3RydWN0IGNhcGlfY3RyICogY2FyZCkKK3ZvaWQgY2FwaV9jdHJfcmVhZHkoc3RydWN0IGNhcGlfY3RyICpjdHIpCiB7Ci0JY2FyZC0+Y2FyZHN0YXRlID0gQ0FSRF9SVU5OSU5HOworCXByaW50ayhLRVJOX05PVElDRSAia2NhcGk6IGNvbnRyb2xsZXIgWyUwM2RdIFwiJXNcIiByZWFkeS5cbiIsCisJICAgICAgIGN0ci0+Y25yLCBjdHItPm5hbWUpOwogCi0gICAgICAgIHByaW50ayhLRVJOX05PVElDRSAia2NhcGk6IGNhcmQgWyUwM2RdIFwiJXNcIiByZWFkeS5cbiIsCi0JICAgICAgIGNhcmQtPmNuciwgY2FyZC0+bmFtZSk7Ci0KLQlub3RpZnlfcHVzaChLQ0lfQ09OVFJVUCwgY2FyZC0+Y25yLCAwLCAwKTsKKwlub3RpZnlfcHVzaChDQVBJQ1RSX1VQLCBjdHItPmNucik7CiB9CiAKIEVYUE9SVF9TWU1CT0woY2FwaV9jdHJfcmVhZHkpOwogCiAvKioKICAqIGNhcGlfY3RyX2Rvd24oKSAtIHNpZ25hbCBDQVBJIGNvbnRyb2xsZXIgbm90IHJlYWR5Ci0gKiBAY2FyZDoJY29udHJvbGxlciBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KKyAqIEBjdHI6CWNvbnRyb2xsZXIgZGVzY3JpcHRvciBzdHJ1Y3R1cmUuCiAgKgogICogQ2FsbGVkIGJ5IGhhcmR3YXJlIGRyaXZlciB0byBzaWduYWwgdGhhdCB0aGUgY29udHJvbGxlciBpcyBkb3duIGFuZAogICogdW5hdmFpbGFibGUgZm9yIHVzZS4KICAqLwogCi12b2lkIGNhcGlfY3RyX2Rvd24oc3RydWN0IGNhcGlfY3RyICogY2FyZCkKK3ZvaWQgY2FwaV9jdHJfZG93bihzdHJ1Y3QgY2FwaV9jdHIgKmN0cikKIHsKLQl1MTYgYXBwbDsKKwlwcmludGsoS0VSTl9OT1RJQ0UgImtjYXBpOiBjb250cm9sbGVyIFslMDNkXSBkb3duLlxuIiwgY3RyLT5jbnIpOwogCi0JREJHKCIiKTsKLQotICAgICAgICBpZiAoY2FyZC0+Y2FyZHN0YXRlID09IENBUkRfREVURUNURUQpCi0JCXJldHVybjsKLQotICAgICAgICBjYXJkLT5jYXJkc3RhdGUgPSBDQVJEX0RFVEVDVEVEOwotCi0JbWVtc2V0KGNhcmQtPm1hbnUsIDAsIHNpemVvZihjYXJkLT5tYW51KSk7Ci0JbWVtc2V0KCZjYXJkLT52ZXJzaW9uLCAwLCBzaXplb2YoY2FyZC0+dmVyc2lvbikpOwotCW1lbXNldCgmY2FyZC0+cHJvZmlsZSwgMCwgc2l6ZW9mKGNhcmQtPnByb2ZpbGUpKTsKLQltZW1zZXQoY2FyZC0+c2VyaWFsLCAwLCBzaXplb2YoY2FyZC0+c2VyaWFsKSk7Ci0KLQlmb3IgKGFwcGwgPSAxOyBhcHBsIDw9IENBUElfTUFYQVBQTDsgYXBwbCsrKSB7Ci0JCXN0cnVjdCBjYXBpMjBfYXBwbCAqYXAgPSBnZXRfY2FwaV9hcHBsX2J5X25yKGFwcGwpOwotCQlpZiAoIWFwIHx8IGFwLT5yZWxlYXNlX2luX3Byb2dyZXNzKQotCQkJY29udGludWU7Ci0KLQkJY2FwaV9jdHJfcHV0KGNhcmQpOwotCX0KLQotCXByaW50ayhLRVJOX05PVElDRSAia2NhcGk6IGNhcmQgWyUwM2RdIGRvd24uXG4iLCBjYXJkLT5jbnIpOwotCi0Jbm90aWZ5X3B1c2goS0NJX0NPTlRSRE9XTiwgY2FyZC0+Y25yLCAwLCAwKTsKKwlub3RpZnlfcHVzaChDQVBJQ1RSX0RPV04sIGN0ci0+Y25yKTsKIH0KIAogRVhQT1JUX1NZTUJPTChjYXBpX2N0cl9kb3duKTsKIAogLyoqCiAgKiBjYXBpX2N0cl9zdXNwZW5kX291dHB1dCgpIC0gc3VzcGVuZCBjb250cm9sbGVyCi0gKiBAY2FyZDoJY29udHJvbGxlciBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KKyAqIEBjdHI6CWNvbnRyb2xsZXIgZGVzY3JpcHRvciBzdHJ1Y3R1cmUuCiAgKgogICogQ2FsbGVkIGJ5IGhhcmR3YXJlIGRyaXZlciB0byBzdG9wIGRhdGEgZmxvdy4KKyAqCisgKiBOb3RlOiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBzeW5jaHJvbml6aW5nIGNvbmN1cnJlbnQgc3RhdGUgY2hhbmdlcworICogYXMgd2VsbCBhcyBpbnZvY2F0aW9ucyBvZiBjYXBpX2N0cl9oYW5kbGVfbWVzc2FnZS4KICAqLwogCi12b2lkIGNhcGlfY3RyX3N1c3BlbmRfb3V0cHV0KHN0cnVjdCBjYXBpX2N0ciAqY2FyZCkKK3ZvaWQgY2FwaV9jdHJfc3VzcGVuZF9vdXRwdXQoc3RydWN0IGNhcGlfY3RyICpjdHIpCiB7Ci0JaWYgKCFjYXJkLT5ibG9ja2VkKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJrY2FwaTogY2FyZCBbJTAzZF0gc3VzcGVuZFxuIiwgY2FyZC0+Y25yKTsKLQkJY2FyZC0+YmxvY2tlZCA9IDE7CisJaWYgKCFjdHItPmJsb2NrZWQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgImtjYXBpOiBjb250cm9sbGVyIFslMDNkXSBzdXNwZW5kXG4iLAorCQkgICAgICAgY3RyLT5jbnIpOworCQljdHItPmJsb2NrZWQgPSAxOwogCX0KIH0KIApAQCAtNDM1LDE2ICs0NjYsMjAgQEAKIAogLyoqCiAgKiBjYXBpX2N0cl9yZXN1bWVfb3V0cHV0KCkgLSByZXN1bWUgY29udHJvbGxlcgotICogQGNhcmQ6CWNvbnRyb2xsZXIgZGVzY3JpcHRvciBzdHJ1Y3R1cmUuCisgKiBAY3RyOgljb250cm9sbGVyIGRlc2NyaXB0b3Igc3RydWN0dXJlLgogICoKICAqIENhbGxlZCBieSBoYXJkd2FyZSBkcml2ZXIgdG8gcmVzdW1lIGRhdGEgZmxvdy4KKyAqCisgKiBOb3RlOiBUaGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBzeW5jaHJvbml6aW5nIGNvbmN1cnJlbnQgc3RhdGUgY2hhbmdlcworICogYXMgd2VsbCBhcyBpbnZvY2F0aW9ucyBvZiBjYXBpX2N0cl9oYW5kbGVfbWVzc2FnZS4KICAqLwogCi12b2lkIGNhcGlfY3RyX3Jlc3VtZV9vdXRwdXQoc3RydWN0IGNhcGlfY3RyICpjYXJkKQordm9pZCBjYXBpX2N0cl9yZXN1bWVfb3V0cHV0KHN0cnVjdCBjYXBpX2N0ciAqY3RyKQogewotCWlmIChjYXJkLT5ibG9ja2VkKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJrY2FwaTogY2FyZCBbJTAzZF0gcmVzdW1lXG4iLCBjYXJkLT5jbnIpOwotCQljYXJkLT5ibG9ja2VkID0gMDsKKwlpZiAoY3RyLT5ibG9ja2VkKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICJrY2FwaTogY29udHJvbGxlciBbJTAzZF0gcmVzdW1lZFxuIiwKKwkJICAgICAgIGN0ci0+Y25yKTsKKwkJY3RyLT5ibG9ja2VkID0gMDsKIAl9CiB9CiAKQEAgLTQ1NCw1MyArNDg5LDQ4IEBACiAKIC8qKgogICogYXR0YWNoX2NhcGlfY3RyKCkgLSByZWdpc3RlciBDQVBJIGNvbnRyb2xsZXIKLSAqIEBjYXJkOgljb250cm9sbGVyIGRlc2NyaXB0b3Igc3RydWN0dXJlLgorICogQGN0cjoJY29udHJvbGxlciBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KICAqCiAgKiBDYWxsZWQgYnkgaGFyZHdhcmUgZHJpdmVyIHRvIHJlZ2lzdGVyIGEgY29udHJvbGxlciB3aXRoIHRoZSBDQVBJIHN1YnN5c3RlbS4KICAqIFJldHVybiB2YWx1ZTogMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIDwgMCBvbiBlcnJvcgogICovCiAKLWludAotYXR0YWNoX2NhcGlfY3RyKHN0cnVjdCBjYXBpX2N0ciAqY2FyZCkKK2ludCBhdHRhY2hfY2FwaV9jdHIoc3RydWN0IGNhcGlfY3RyICpjdHIpCiB7CiAJaW50IGk7CiAKLQltdXRleF9sb2NrKCZjb250cm9sbGVyX211dGV4KTsKKwltdXRleF9sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQ0FQSV9NQVhDT05UUjsgaSsrKSB7Ci0JCWlmIChjYXBpX2NhcmRzW2ldID09IE5VTEwpCisJCWlmICghY2FwaV9jb250cm9sbGVyW2ldKQogCQkJYnJlYWs7CiAJfQogCWlmIChpID09IENBUElfTUFYQ09OVFIpIHsKLQkJbXV0ZXhfdW5sb2NrKCZjb250cm9sbGVyX211dGV4KTsKKwkJbXV0ZXhfdW5sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CiAJCXByaW50ayhLRVJOX0VSUiAia2NhcGk6IG91dCBvZiBjb250cm9sbGVyIHNsb3RzXG4iKTsKIAkgICAJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JY2FwaV9jYXJkc1tpXSA9IGNhcmQ7CisJY2FwaV9jb250cm9sbGVyW2ldID0gY3RyOwogCi0JbXV0ZXhfdW5sb2NrKCZjb250cm9sbGVyX211dGV4KTsKKwljdHItPm5yZWN2Y3RscGt0ID0gMDsKKwljdHItPm5yZWN2ZGF0YXBrdCA9IDA7CisJY3RyLT5uc2VudGN0bHBrdCA9IDA7CisJY3RyLT5uc2VudGRhdGFwa3QgPSAwOworCWN0ci0+Y25yID0gaSArIDE7CisJY3RyLT5zdGF0ZSA9IENBUElfQ1RSX0RFVEVDVEVEOworCWN0ci0+YmxvY2tlZCA9IDA7CisJY3RyLT50cmFjZWZsYWcgPSBzaG93Y2FwaW1zZ3M7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmY3RyLT5zdGF0ZV93YWl0X3F1ZXVlKTsKIAotCWNhcmQtPm5yZWN2Y3RscGt0ID0gMDsKLQljYXJkLT5ucmVjdmRhdGFwa3QgPSAwOwotCWNhcmQtPm5zZW50Y3RscGt0ID0gMDsKLQljYXJkLT5uc2VudGRhdGFwa3QgPSAwOwotCWNhcmQtPmNuciA9IGkgKyAxOwotCWNhcmQtPmNhcmRzdGF0ZSA9IENBUkRfREVURUNURUQ7Ci0JY2FyZC0+YmxvY2tlZCA9IDA7Ci0JY2FyZC0+dHJhY2VmbGFnID0gc2hvd2NhcGltc2dzOworCXNwcmludGYoY3RyLT5wcm9jZm4sICJjYXBpL2NvbnRyb2xsZXJzLyVkIiwgY3RyLT5jbnIpOworCWN0ci0+cHJvY2VudCA9IHByb2NfY3JlYXRlX2RhdGEoY3RyLT5wcm9jZm4sIDAsIE5VTEwsIGN0ci0+cHJvY19mb3BzLCBjdHIpOwogCi0Jc3ByaW50ZihjYXJkLT5wcm9jZm4sICJjYXBpL2NvbnRyb2xsZXJzLyVkIiwgY2FyZC0+Y25yKTsKLQljYXJkLT5wcm9jZW50ID0gY3JlYXRlX3Byb2NfZW50cnkoY2FyZC0+cHJvY2ZuLCAwLCBOVUxMKTsKLQlpZiAoY2FyZC0+cHJvY2VudCkgewotCSAgIGNhcmQtPnByb2NlbnQtPnJlYWRfcHJvYyA9IAotCQkoaW50ICgqKShjaGFyICosY2hhciAqKixvZmZfdCxpbnQsaW50ICosdm9pZCAqKSkKLQkJCWNhcmQtPmN0cl9yZWFkX3Byb2M7Ci0JICAgY2FyZC0+cHJvY2VudC0+ZGF0YSA9IGNhcmQ7Ci0JfQorCW5jb250cm9sbGVycysrOwogCi0JbmNhcmRzKys7Ci0JcHJpbnRrKEtFUk5fTk9USUNFICJrY2FwaTogQ29udHJvbGxlciBbJTAzZF06ICVzIGF0dGFjaGVkXG4iLAotCQkJY2FyZC0+Y25yLCBjYXJkLT5uYW1lKTsKKwltdXRleF91bmxvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKKworCXByaW50ayhLRVJOX05PVElDRSAia2NhcGk6IGNvbnRyb2xsZXIgWyUwM2RdOiAlcyBhdHRhY2hlZFxuIiwKKwkJCWN0ci0+Y25yLCBjdHItPm5hbWUpOwogCXJldHVybiAwOwogfQogCkBAIC01MDgsMjkgKzUzOCwzOCBAQAogCiAvKioKICAqIGRldGFjaF9jYXBpX2N0cigpIC0gdW5yZWdpc3RlciBDQVBJIGNvbnRyb2xsZXIKLSAqIEBjYXJkOgljb250cm9sbGVyIGRlc2NyaXB0b3Igc3RydWN0dXJlLgorICogQGN0cjoJY29udHJvbGxlciBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KICAqCiAgKiBDYWxsZWQgYnkgaGFyZHdhcmUgZHJpdmVyIHRvIHJlbW92ZSB0aGUgcmVnaXN0cmF0aW9uIG9mIGEgY29udHJvbGxlcgogICogd2l0aCB0aGUgQ0FQSSBzdWJzeXN0ZW0uCiAgKiBSZXR1cm4gdmFsdWU6IDAgb24gc3VjY2VzcywgZXJyb3IgY29kZSA8IDAgb24gZXJyb3IKICAqLwogCi1pbnQgZGV0YWNoX2NhcGlfY3RyKHN0cnVjdCBjYXBpX2N0ciAqY2FyZCkKK2ludCBkZXRhY2hfY2FwaV9jdHIoc3RydWN0IGNhcGlfY3RyICpjdHIpCiB7Ci0gICAgICAgIGlmIChjYXJkLT5jYXJkc3RhdGUgIT0gQ0FSRF9ERVRFQ1RFRCkKLQkJY2FwaV9jdHJfZG93bihjYXJkKTsKKwlpbnQgZXJyID0gMDsKIAotCW5jYXJkcy0tOworCW11dGV4X2xvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKIAotCWlmIChjYXJkLT5wcm9jZW50KSB7Ci0JICAgcmVtb3ZlX3Byb2NfZW50cnkoY2FyZC0+cHJvY2ZuLCBOVUxMKTsKLQkgICBjYXJkLT5wcm9jZW50ID0gTlVMTDsKKwljdHJfZG93bihjdHIsIENBUElfQ1RSX0RFVEFDSEVEKTsKKworCWlmIChjYXBpX2NvbnRyb2xsZXJbY3RyLT5jbnIgLSAxXSAhPSBjdHIpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byB1bmxvY2tfb3V0OwogCX0KLQljYXBpX2NhcmRzW2NhcmQtPmNuciAtIDFdID0gTlVMTDsKLQlwcmludGsoS0VSTl9OT1RJQ0UgImtjYXBpOiBDb250cm9sbGVyIFslMDNkXTogJXMgdW5yZWdpc3RlcmVkXG4iLAotCQkJY2FyZC0+Y25yLCBjYXJkLT5uYW1lKTsKKwljYXBpX2NvbnRyb2xsZXJbY3RyLT5jbnIgLSAxXSA9IE5VTEw7CisJbmNvbnRyb2xsZXJzLS07CiAKLQlyZXR1cm4gMDsKKwlpZiAoY3RyLT5wcm9jZW50KQorCQlyZW1vdmVfcHJvY19lbnRyeShjdHItPnByb2NmbiwgTlVMTCk7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgImtjYXBpOiBjb250cm9sbGVyIFslMDNkXTogJXMgdW5yZWdpc3RlcmVkXG4iLAorCSAgICAgICBjdHItPmNuciwgY3RyLT5uYW1lKTsKKwordW5sb2NrX291dDoKKwltdXRleF91bmxvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKKworCXJldHVybiBlcnI7CiB9CiAKIEVYUE9SVF9TWU1CT0woZGV0YWNoX2NhcGlfY3RyKTsKQEAgLTU0NCwxMSArNTgzLDkgQEAKIAogdm9pZCByZWdpc3Rlcl9jYXBpX2RyaXZlcihzdHJ1Y3QgY2FwaV9kcml2ZXIgKmRyaXZlcikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZjYXBpX2RyaXZlcnNfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmY2FwaV9kcml2ZXJzX2xvY2spOwogCWxpc3RfYWRkX3RhaWwoJmRyaXZlci0+bGlzdCwgJmNhcGlfZHJpdmVycyk7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmNhcGlfZHJpdmVyc19saXN0X2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmNhcGlfZHJpdmVyc19sb2NrKTsKIH0KIAogRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9jYXBpX2RyaXZlcik7CkBAIC01NjIsMTEgKzU5OSw5IEBACiAKIHZvaWQgdW5yZWdpc3Rlcl9jYXBpX2RyaXZlcihzdHJ1Y3QgY2FwaV9kcml2ZXIgKmRyaXZlcikKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZjYXBpX2RyaXZlcnNfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmY2FwaV9kcml2ZXJzX2xvY2spOwogCWxpc3RfZGVsKCZkcml2ZXItPmxpc3QpOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZjYXBpX2RyaXZlcnNfbGlzdF9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZjYXBpX2RyaXZlcnNfbG9jayk7CiB9CiAKIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9jYXBpX2RyaXZlcik7CkBAIC01ODQsMTIgKzYxOSwyMSBAQAogCiB1MTYgY2FwaTIwX2lzaW5zdGFsbGVkKHZvaWQpCiB7CisJdTE2IHJldCA9IENBUElfUkVHTk9USU5TVEFMTEVEOwogCWludCBpOwotCWZvciAoaSA9IDA7IGkgPCBDQVBJX01BWENPTlRSOyBpKyspIHsKLQkJaWYgKGNhcGlfY2FyZHNbaV0gJiYgY2FwaV9jYXJkc1tpXS0+Y2FyZHN0YXRlID09IENBUkRfUlVOTklORykKLQkJCXJldHVybiBDQVBJX05PRVJST1I7Ci0JfQotCXJldHVybiBDQVBJX1JFR05PVElOU1RBTExFRDsKKworCW11dGV4X2xvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBDQVBJX01BWENPTlRSOyBpKyspCisJCWlmIChjYXBpX2NvbnRyb2xsZXJbaV0gJiYKKwkJICAgIGNhcGlfY29udHJvbGxlcltpXS0+c3RhdGUgPT0gQ0FQSV9DVFJfUlVOTklORykgeworCQkJcmV0ID0gQ0FQSV9OT0VSUk9SOworCQkJYnJlYWs7CisJCX0KKworCW11dGV4X3VubG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOworCisJcmV0dXJuIHJldDsKIH0KIAogRVhQT1JUX1NZTUJPTChjYXBpMjBfaXNpbnN0YWxsZWQpOwpAQCAtNjEwLDQ2ICs2NTQsNDMgQEAKIHsKIAlpbnQgaTsKIAl1MTYgYXBwbGlkOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlEQkcoIiIpOwogCiAJaWYgKGFwLT5ycGFyYW0uZGF0YWJsa2xlbiA8IDEyOCkKIAkJcmV0dXJuIENBUElfTE9HQkxLU0laRVRPU01BTEw7CiAKLQl3cml0ZV9sb2NrX2lycXNhdmUoJmFwcGxpY2F0aW9uX2xvY2ssIGZsYWdzKTsKKwlhcC0+bnJlY3ZjdGxwa3QgPSAwOworCWFwLT5ucmVjdmRhdGFwa3QgPSAwOworCWFwLT5uc2VudGN0bHBrdCA9IDA7CisJYXAtPm5zZW50ZGF0YXBrdCA9IDA7CisJbXV0ZXhfaW5pdCgmYXAtPnJlY3ZfbXR4KTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZhcC0+cmVjdl9xdWV1ZSk7CisJSU5JVF9XT1JLKCZhcC0+cmVjdl93b3JrLCByZWN2X2hhbmRsZXIpOworCWFwLT5yZWxlYXNlX2luX3Byb2dyZXNzID0gMDsKKworCW11dGV4X2xvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKIAogCWZvciAoYXBwbGlkID0gMTsgYXBwbGlkIDw9IENBUElfTUFYQVBQTDsgYXBwbGlkKyspIHsKIAkJaWYgKGNhcGlfYXBwbGljYXRpb25zW2FwcGxpZCAtIDFdID09IE5VTEwpCiAJCQlicmVhazsKIAl9CiAJaWYgKGFwcGxpZCA+IENBUElfTUFYQVBQTCkgewotCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYXBwbGljYXRpb25fbG9jaywgZmxhZ3MpOworCQltdXRleF91bmxvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKIAkJcmV0dXJuIENBUElfVE9PTUFOWUFQUExTOwogCX0KIAogCWFwLT5hcHBsaWQgPSBhcHBsaWQ7CiAJY2FwaV9hcHBsaWNhdGlvbnNbYXBwbGlkIC0gMV0gPSBhcDsKIAotCWFwLT5ucmVjdmN0bHBrdCA9IDA7Ci0JYXAtPm5yZWN2ZGF0YXBrdCA9IDA7Ci0JYXAtPm5zZW50Y3RscGt0ID0gMDsKLQlhcC0+bnNlbnRkYXRhcGt0ID0gMDsKLQlhcC0+Y2FsbGJhY2sgPSBOVUxMOwotCW11dGV4X2luaXQoJmFwLT5yZWN2X210eCk7Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYXAtPnJlY3ZfcXVldWUpOwotCUlOSVRfV09SSygmYXAtPnJlY3Zfd29yaywgcmVjdl9oYW5kbGVyKTsKLQlhcC0+cmVsZWFzZV9pbl9wcm9ncmVzcyA9IDA7Ci0KLQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYXBwbGljYXRpb25fbG9jaywgZmxhZ3MpOwotCQotCW11dGV4X2xvY2soJmNvbnRyb2xsZXJfbXV0ZXgpOwogCWZvciAoaSA9IDA7IGkgPCBDQVBJX01BWENPTlRSOyBpKyspIHsKLQkJaWYgKCFjYXBpX2NhcmRzW2ldIHx8IGNhcGlfY2FyZHNbaV0tPmNhcmRzdGF0ZSAhPSBDQVJEX1JVTk5JTkcpCisJCWlmICghY2FwaV9jb250cm9sbGVyW2ldIHx8CisJCSAgICBjYXBpX2NvbnRyb2xsZXJbaV0tPnN0YXRlICE9IENBUElfQ1RSX1JVTk5JTkcpCiAJCQljb250aW51ZTsKLQkJcmVnaXN0ZXJfYXBwbChjYXBpX2NhcmRzW2ldLCBhcHBsaWQsICZhcC0+cnBhcmFtKTsKKwkJcmVnaXN0ZXJfYXBwbChjYXBpX2NvbnRyb2xsZXJbaV0sIGFwcGxpZCwgJmFwLT5ycGFyYW0pOwogCX0KLQltdXRleF91bmxvY2soJmNvbnRyb2xsZXJfbXV0ZXgpOworCisJbXV0ZXhfdW5sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CiAKIAlpZiAoc2hvd2NhcGltc2dzICYgMSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAia2NhcGk6IGFwcGwgJWQgdXBcbiIsIGFwcGxpZCk7CkBAIC02NzMsMjIgKzcxNCwyNCBAQAogdTE2IGNhcGkyMF9yZWxlYXNlKHN0cnVjdCBjYXBpMjBfYXBwbCAqYXApCiB7CiAJaW50IGk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCURCRygiYXBwbGlkICUjeCIsIGFwLT5hcHBsaWQpOwogCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZhcHBsaWNhdGlvbl9sb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOworCiAJYXAtPnJlbGVhc2VfaW5fcHJvZ3Jlc3MgPSAxOwogCWNhcGlfYXBwbGljYXRpb25zW2FwLT5hcHBsaWQgLSAxXSA9IE5VTEw7Ci0Jd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFwcGxpY2F0aW9uX2xvY2ssIGZsYWdzKTsKIAotCW11dGV4X2xvY2soJmNvbnRyb2xsZXJfbXV0ZXgpOworCXN5bmNocm9uaXplX3JjdSgpOworCiAJZm9yIChpID0gMDsgaSA8IENBUElfTUFYQ09OVFI7IGkrKykgewotCQlpZiAoIWNhcGlfY2FyZHNbaV0gfHwgY2FwaV9jYXJkc1tpXS0+Y2FyZHN0YXRlICE9IENBUkRfUlVOTklORykKKwkJaWYgKCFjYXBpX2NvbnRyb2xsZXJbaV0gfHwKKwkJICAgIGNhcGlfY29udHJvbGxlcltpXS0+c3RhdGUgIT0gQ0FQSV9DVFJfUlVOTklORykKIAkJCWNvbnRpbnVlOwotCQlyZWxlYXNlX2FwcGwoY2FwaV9jYXJkc1tpXSwgYXAtPmFwcGxpZCk7CisJCXJlbGVhc2VfYXBwbChjYXBpX2NvbnRyb2xsZXJbaV0sIGFwLT5hcHBsaWQpOwogCX0KLQltdXRleF91bmxvY2soJmNvbnRyb2xsZXJfbXV0ZXgpOworCisJbXV0ZXhfdW5sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CiAKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCXNrYl9xdWV1ZV9wdXJnZSgmYXAtPnJlY3ZfcXVldWUpOwpAQCAtNzEzLDEzICs3NTYsMTMgQEAKIAogdTE2IGNhcGkyMF9wdXRfbWVzc2FnZShzdHJ1Y3QgY2FwaTIwX2FwcGwgKmFwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBjYXBpX2N0ciAqY2FyZDsKKwlzdHJ1Y3QgY2FwaV9jdHIgKmN0cjsKIAlpbnQgc2hvd2N0bCA9IDA7CiAJdTggY21kLCBzdWJjbWQ7CiAKIAlEQkcoImFwcGxpZCAlI3giLCBhcC0+YXBwbGlkKTsKICAKLQlpZiAobmNhcmRzID09IDApCisJaWYgKG5jb250cm9sbGVycyA9PSAwKQogCQlyZXR1cm4gQ0FQSV9SRUdOT1RJTlNUQUxMRUQ7CiAJaWYgKChhcC0+YXBwbGlkID09IDApIHx8IGFwLT5yZWxlYXNlX2luX3Byb2dyZXNzKQogCQlyZXR1cm4gQ0FQSV9JTExBUFBOUjsKQEAgLTcyNywyOCArNzcwLDMzIEBACiAJICAgIHx8ICFjYXBpX2NtZF92YWxpZChDQVBJTVNHX0NPTU1BTkQoc2tiLT5kYXRhKSkKIAkgICAgfHwgIWNhcGlfc3ViY21kX3ZhbGlkKENBUElNU0dfU1VCQ09NTUFORChza2ItPmRhdGEpKSkKIAkJcmV0dXJuIENBUElfSUxMQ01ET1JTVUJDTURPUk1TR1RPU01BTEw7Ci0JY2FyZCA9IGdldF9jYXBpX2N0cl9ieV9ucihDQVBJTVNHX0NPTlRST0xMRVIoc2tiLT5kYXRhKSk7Ci0JaWYgKCFjYXJkIHx8IGNhcmQtPmNhcmRzdGF0ZSAhPSBDQVJEX1JVTk5JTkcpIHsKLQkJY2FyZCA9IGdldF9jYXBpX2N0cl9ieV9ucigxKTsgLy8gWFhYIHdoeT8KLQkgICAgICAgIGlmICghY2FyZCB8fCBjYXJkLT5jYXJkc3RhdGUgIT0gQ0FSRF9SVU5OSU5HKSAKLQkJCXJldHVybiBDQVBJX1JFR05PVElOU1RBTExFRDsKLQl9Ci0JaWYgKGNhcmQtPmJsb2NrZWQpCisKKwkvKgorCSAqIFRoZSBjb250cm9sbGVyIHJlZmVyZW5jZSBpcyBwcm90ZWN0ZWQgYnkgdGhlIGV4aXN0ZW5jZSBvZiB0aGUKKwkgKiBhcHBsaWNhdGlvbiBwYXNzZWQgdG8gdXMuIFdlIGFzc3VtZSB0aGF0IHRoZSBjYWxsZXIgcHJvcGVybHkKKwkgKiBzeW5jaHJvbml6ZXMgdGhpcyBzZXJ2aWNlIHdpdGggY2FwaTIwX3JlbGVhc2UuCisJICovCisJY3RyID0gZ2V0X2NhcGlfY3RyX2J5X25yKENBUElNU0dfQ09OVFJPTExFUihza2ItPmRhdGEpKTsKKwlpZiAoIWN0ciB8fCBjdHItPnN0YXRlICE9IENBUElfQ1RSX1JVTk5JTkcpCisJCXJldHVybiBDQVBJX1JFR05PVElOU1RBTExFRDsKKwlpZiAoY3RyLT5ibG9ja2VkKQogCQlyZXR1cm4gQ0FQSV9TRU5EUVVFVUVGVUxMOwogCiAJY21kID0gQ0FQSU1TR19DT01NQU5EKHNrYi0+ZGF0YSk7CiAgICAgICAgIHN1YmNtZCA9IENBUElNU0dfU1VCQ09NTUFORChza2ItPmRhdGEpOwogCiAJaWYgKGNtZCA9PSBDQVBJX0RBVEFfQjMgJiYgc3ViY21kPT0gQ0FQSV9SRVEpIHsKLQkJY2FyZC0+bnNlbnRkYXRhcGt0Kys7CisJCWN0ci0+bnNlbnRkYXRhcGt0Kys7CiAJCWFwLT5uc2VudGRhdGFwa3QrKzsKLQkgICAgICAgIGlmIChjYXJkLT50cmFjZWZsYWcgPiAyKSBzaG93Y3RsIHw9IDI7CisJCWlmIChjdHItPnRyYWNlZmxhZyA+IDIpCisJCQlzaG93Y3RsIHw9IDI7CiAJfSBlbHNlIHsKLQkJY2FyZC0+bnNlbnRjdGxwa3QrKzsKKwkJY3RyLT5uc2VudGN0bHBrdCsrOwogCQlhcC0+bnNlbnRjdGxwa3QrKzsKLQkgICAgICAgIGlmIChjYXJkLT50cmFjZWZsYWcpIHNob3djdGwgfD0gMjsKKwkJaWYgKGN0ci0+dHJhY2VmbGFnKQorCQkJc2hvd2N0bCB8PSAyOwogCX0KLQlzaG93Y3RsIHw9IChjYXJkLT50cmFjZWZsYWcgJiAxKTsKKwlzaG93Y3RsIHw9IChjdHItPnRyYWNlZmxhZyAmIDEpOwogCWlmIChzaG93Y3RsICYgMikgewogCQlpZiAoc2hvd2N0bCAmIDEpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJrY2FwaTogcHV0IFslMDNkXSBpZCMlZCAlcyBsZW49JXVcbiIsCkBAIC03NzEsNyArODE5LDcgQEAKIAkJCQkJQ0FQSU1TR19MRU4oc2tiLT5kYXRhKSk7CiAJCX0KIAl9Ci0JcmV0dXJuIGNhcmQtPnNlbmRfbWVzc2FnZShjYXJkLCBza2IpOworCXJldHVybiBjdHItPnNlbmRfbWVzc2FnZShjdHIsIHNrYik7CiB9CiAKIEVYUE9SVF9TWU1CT0woY2FwaTIwX3B1dF9tZXNzYWdlKTsKQEAgLTc4OCwxNyArODM2LDI1IEBACiAKIHUxNiBjYXBpMjBfZ2V0X21hbnVmYWN0dXJlcih1MzIgY29udHIsIHU4ICpidWYpCiB7Ci0Jc3RydWN0IGNhcGlfY3RyICpjYXJkOworCXN0cnVjdCBjYXBpX2N0ciAqY3RyOworCXUxNiByZXQ7CiAKIAlpZiAoY29udHIgPT0gMCkgewogCQlzdHJsY3B5KGJ1ZiwgY2FwaV9tYW51ZmFrdHVyZXIsIENBUElfTUFOVUZBQ1RVUkVSX0xFTik7CiAJCXJldHVybiBDQVBJX05PRVJST1I7CiAJfQotCWNhcmQgPSBnZXRfY2FwaV9jdHJfYnlfbnIoY29udHIpOwotCWlmICghY2FyZCB8fCBjYXJkLT5jYXJkc3RhdGUgIT0gQ0FSRF9SVU5OSU5HKSAKLQkJcmV0dXJuIENBUElfUkVHTk9USU5TVEFMTEVEOwotCXN0cmxjcHkoYnVmLCBjYXJkLT5tYW51LCBDQVBJX01BTlVGQUNUVVJFUl9MRU4pOwotCXJldHVybiBDQVBJX05PRVJST1I7CisKKwltdXRleF9sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CisKKwljdHIgPSBnZXRfY2FwaV9jdHJfYnlfbnIoY29udHIpOworCWlmIChjdHIgJiYgY3RyLT5zdGF0ZSA9PSBDQVBJX0NUUl9SVU5OSU5HKSB7CisJCXN0cmxjcHkoYnVmLCBjdHItPm1hbnUsIENBUElfTUFOVUZBQ1RVUkVSX0xFTik7CisJCXJldCA9IENBUElfTk9FUlJPUjsKKwl9IGVsc2UKKwkJcmV0ID0gQ0FQSV9SRUdOT1RJTlNUQUxMRUQ7CisKKwltdXRleF91bmxvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiBFWFBPUlRfU1lNQk9MKGNhcGkyMF9nZXRfbWFudWZhY3R1cmVyKTsKQEAgLTgxNSwxOCArODcxLDI1IEBACiAKIHUxNiBjYXBpMjBfZ2V0X3ZlcnNpb24odTMyIGNvbnRyLCBzdHJ1Y3QgY2FwaV92ZXJzaW9uICp2ZXJwKQogewotCXN0cnVjdCBjYXBpX2N0ciAqY2FyZDsKKwlzdHJ1Y3QgY2FwaV9jdHIgKmN0cjsKKwl1MTYgcmV0OwogCiAJaWYgKGNvbnRyID09IDApIHsKIAkJKnZlcnAgPSBkcml2ZXJfdmVyc2lvbjsKIAkJcmV0dXJuIENBUElfTk9FUlJPUjsKIAl9Ci0JY2FyZCA9IGdldF9jYXBpX2N0cl9ieV9ucihjb250cik7Ci0JaWYgKCFjYXJkIHx8IGNhcmQtPmNhcmRzdGF0ZSAhPSBDQVJEX1JVTk5JTkcpIAotCQlyZXR1cm4gQ0FQSV9SRUdOT1RJTlNUQUxMRUQ7CiAKLQltZW1jcHkoKHZvaWQgKikgdmVycCwgJmNhcmQtPnZlcnNpb24sIHNpemVvZihjYXBpX3ZlcnNpb24pKTsKLQlyZXR1cm4gQ0FQSV9OT0VSUk9SOworCW11dGV4X2xvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKKworCWN0ciA9IGdldF9jYXBpX2N0cl9ieV9ucihjb250cik7CisJaWYgKGN0ciAmJiBjdHItPnN0YXRlID09IENBUElfQ1RSX1JVTk5JTkcpIHsKKwkJbWVtY3B5KHZlcnAsICZjdHItPnZlcnNpb24sIHNpemVvZihjYXBpX3ZlcnNpb24pKTsKKwkJcmV0ID0gQ0FQSV9OT0VSUk9SOworCX0gZWxzZQorCQlyZXQgPSBDQVBJX1JFR05PVElOU1RBTExFRDsKKworCW11dGV4X3VubG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOworCXJldHVybiByZXQ7CiB9CiAKIEVYUE9SVF9TWU1CT0woY2FwaTIwX2dldF92ZXJzaW9uKTsKQEAgLTg0MywxOCArOTA2LDI1IEBACiAKIHUxNiBjYXBpMjBfZ2V0X3NlcmlhbCh1MzIgY29udHIsIHU4ICpzZXJpYWwpCiB7Ci0Jc3RydWN0IGNhcGlfY3RyICpjYXJkOworCXN0cnVjdCBjYXBpX2N0ciAqY3RyOworCXUxNiByZXQ7CiAKIAlpZiAoY29udHIgPT0gMCkgewogCQlzdHJsY3B5KHNlcmlhbCwgZHJpdmVyX3NlcmlhbCwgQ0FQSV9TRVJJQUxfTEVOKTsKIAkJcmV0dXJuIENBUElfTk9FUlJPUjsKIAl9Ci0JY2FyZCA9IGdldF9jYXBpX2N0cl9ieV9ucihjb250cik7Ci0JaWYgKCFjYXJkIHx8IGNhcmQtPmNhcmRzdGF0ZSAhPSBDQVJEX1JVTk5JTkcpIAotCQlyZXR1cm4gQ0FQSV9SRUdOT1RJTlNUQUxMRUQ7CiAKLQlzdHJsY3B5KCh2b2lkICopIHNlcmlhbCwgY2FyZC0+c2VyaWFsLCBDQVBJX1NFUklBTF9MRU4pOwotCXJldHVybiBDQVBJX05PRVJST1I7CisJbXV0ZXhfbG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOworCisJY3RyID0gZ2V0X2NhcGlfY3RyX2J5X25yKGNvbnRyKTsKKwlpZiAoY3RyICYmIGN0ci0+c3RhdGUgPT0gQ0FQSV9DVFJfUlVOTklORykgeworCQlzdHJsY3B5KHNlcmlhbCwgY3RyLT5zZXJpYWwsIENBUElfU0VSSUFMX0xFTik7CisJCXJldCA9IENBUElfTk9FUlJPUjsKKwl9IGVsc2UKKwkJcmV0ID0gQ0FQSV9SRUdOT1RJTlNUQUxMRUQ7CisKKwltdXRleF91bmxvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiBFWFBPUlRfU1lNQk9MKGNhcGkyMF9nZXRfc2VyaWFsKTsKQEAgLTg3MSwyMyArOTQxLDY1IEBACiAKIHUxNiBjYXBpMjBfZ2V0X3Byb2ZpbGUodTMyIGNvbnRyLCBzdHJ1Y3QgY2FwaV9wcm9maWxlICpwcm9mcCkKIHsKLQlzdHJ1Y3QgY2FwaV9jdHIgKmNhcmQ7CisJc3RydWN0IGNhcGlfY3RyICpjdHI7CisJdTE2IHJldDsKIAogCWlmIChjb250ciA9PSAwKSB7Ci0JCXByb2ZwLT5uY29udHJvbGxlciA9IG5jYXJkczsKKwkJcHJvZnAtPm5jb250cm9sbGVyID0gbmNvbnRyb2xsZXJzOwogCQlyZXR1cm4gQ0FQSV9OT0VSUk9SOwogCX0KLQljYXJkID0gZ2V0X2NhcGlfY3RyX2J5X25yKGNvbnRyKTsKLQlpZiAoIWNhcmQgfHwgY2FyZC0+Y2FyZHN0YXRlICE9IENBUkRfUlVOTklORykgCi0JCXJldHVybiBDQVBJX1JFR05PVElOU1RBTExFRDsKIAotCW1lbWNweSgodm9pZCAqKSBwcm9mcCwgJmNhcmQtPnByb2ZpbGUsCi0JCQlzaXplb2Yoc3RydWN0IGNhcGlfcHJvZmlsZSkpOwotCXJldHVybiBDQVBJX05PRVJST1I7CisJbXV0ZXhfbG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOworCisJY3RyID0gZ2V0X2NhcGlfY3RyX2J5X25yKGNvbnRyKTsKKwlpZiAoY3RyICYmIGN0ci0+c3RhdGUgPT0gQ0FQSV9DVFJfUlVOTklORykgeworCQltZW1jcHkocHJvZnAsICZjdHItPnByb2ZpbGUsIHNpemVvZihzdHJ1Y3QgY2FwaV9wcm9maWxlKSk7CisJCXJldCA9IENBUElfTk9FUlJPUjsKKwl9IGVsc2UKKwkJcmV0ID0gQ0FQSV9SRUdOT1RJTlNUQUxMRUQ7CisKKwltdXRleF91bmxvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKKwlyZXR1cm4gcmV0OwogfQogCiBFWFBPUlRfU1lNQk9MKGNhcGkyMF9nZXRfcHJvZmlsZSk7CiAKKy8qIE11c3QgYmUgY2FsbGVkIHdpdGggY2FwaV9jb250cm9sbGVyX2xvY2sgaGVsZC4gKi8KK3N0YXRpYyBpbnQgd2FpdF9vbl9jdHJfc3RhdGUoc3RydWN0IGNhcGlfY3RyICpjdHIsIHVuc2lnbmVkIGludCBzdGF0ZSkKK3sKKwlERUZJTkVfV0FJVCh3YWl0KTsKKwlpbnQgcmV0dmFsID0gMDsKKworCWN0ciA9IGNhcGlfY3RyX2dldChjdHIpOworCWlmICghY3RyKQorCQlyZXR1cm4gLUVTUkNIOworCisJZm9yICg7OykgeworCQlwcmVwYXJlX3RvX3dhaXQoJmN0ci0+c3RhdGVfd2FpdF9xdWV1ZSwgJndhaXQsCisJCQkJVEFTS19JTlRFUlJVUFRJQkxFKTsKKworCQlpZiAoY3RyLT5zdGF0ZSA9PSBzdGF0ZSkKKwkJCWJyZWFrOworCQlpZiAoY3RyLT5zdGF0ZSA9PSBDQVBJX0NUUl9ERVRBQ0hFRCkgeworCQkJcmV0dmFsID0gLUVTUkNIOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQlyZXR2YWwgPSAtRUlOVFI7CisJCQlicmVhazsKKwkJfQorCisJCW11dGV4X3VubG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOworCQlzY2hlZHVsZSgpOworCQltdXRleF9sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CisJfQorCWZpbmlzaF93YWl0KCZjdHItPnN0YXRlX3dhaXRfcXVldWUsICZ3YWl0KTsKKworCWNhcGlfY3RyX3B1dChjdHIpOworCisJcmV0dXJuIHJldHZhbDsKK30KKwogI2lmZGVmIEFWTUIxX0NPTVBBVAogc3RhdGljIGludCBvbGRfY2FwaV9tYW51ZmFjdHVyZXIodW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmRhdGEpCiB7CkBAIC04OTUsMTEgKzEwMDcsMTAgQEAKIAlhdm1iMV9leHRjYXJkZGVmIGNkZWY7CiAJYXZtYjFfcmVzZXRkZWYgcmRlZjsKIAljYXBpY2FyZHBhcmFtcyBjcGFyYW1zOwotCXN0cnVjdCBjYXBpX2N0ciAqY2FyZDsKKwlzdHJ1Y3QgY2FwaV9jdHIgKmN0cjsKIAlzdHJ1Y3QgY2FwaV9kcml2ZXIgKmRyaXZlciA9IE5VTEw7CiAJY2FwaWxvYWRkYXRhIGxkYXRhOwogCXN0cnVjdCBsaXN0X2hlYWQgKmw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0dmFsOwogCiAJc3dpdGNoIChjbWQpIHsKQEAgLTkxOSw3ICsxMDMwLDggQEAKIAkJY3BhcmFtcy5pcnEgPSBjZGVmLmlycTsKIAkJY3BhcmFtcy5jYXJkbnIgPSBjZGVmLmNhcmRucjsKIAotCQlyZWFkX2xvY2tfaXJxc2F2ZSgmY2FwaV9kcml2ZXJzX2xpc3RfbG9jaywgZmxhZ3MpOworCQltdXRleF9sb2NrKCZjYXBpX2RyaXZlcnNfbG9jayk7CisKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNkZWYuY2FyZHR5cGUpIHsKIAkJCWNhc2UgQVZNX0NBUkRUWVBFX0IxOgogCQkJCWxpc3RfZm9yX2VhY2gobCwgJmNhcGlfZHJpdmVycykgewpAQCAtOTQwLDE4ICsxMDUyLDE1IEBACiAJCQkJYnJlYWs7CiAJCX0KIAkJaWYgKCFkcml2ZXIpIHsKLQkJCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmNhcGlfZHJpdmVyc19saXN0X2xvY2ssIGZsYWdzKTsKIAkJCXByaW50ayhLRVJOX0VSUiAia2NhcGk6IGRyaXZlciBub3QgbG9hZGVkLlxuIik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCQlpZiAoIWRyaXZlci0+YWRkX2NhcmQpIHsKLQkJCXJlYWRfdW5sb2NrX2lycXJlc3RvcmUoJmNhcGlfZHJpdmVyc19saXN0X2xvY2ssIGZsYWdzKTsKKwkJCXJldHZhbCA9IC1FSU87CisJCX0gZWxzZSBpZiAoIWRyaXZlci0+YWRkX2NhcmQpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAia2NhcGk6IGRyaXZlciBoYXMgbm8gYWRkIGNhcmQgZnVuY3Rpb24uXG4iKTsKLQkJCXJldHVybiAtRUlPOwotCQl9CisJCQlyZXR2YWwgPSAtRUlPOworCQl9IGVsc2UKKwkJCXJldHZhbCA9IGRyaXZlci0+YWRkX2NhcmQoZHJpdmVyLCAmY3BhcmFtcyk7CiAKLQkJcmV0dmFsID0gZHJpdmVyLT5hZGRfY2FyZChkcml2ZXIsICZjcGFyYW1zKTsKLQkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmY2FwaV9kcml2ZXJzX2xpc3RfbG9jaywgZmxhZ3MpOworCQltdXRleF91bmxvY2soJmNhcGlfZHJpdmVyc19sb2NrKTsKIAkJcmV0dXJuIHJldHZhbDsKIAogCWNhc2UgQVZNQjFfTE9BRDoKQEAgLTk2OCwyNyArMTA3NywzMCBAQAogCQkJCQkgICBzaXplb2YoYXZtYjFfbG9hZGFuZGNvbmZpZ2RlZikpKQogCQkJCXJldHVybiAtRUZBVUxUOwogCQl9Ci0JCWNhcmQgPSBnZXRfY2FwaV9jdHJfYnlfbnIobGRlZi5jb250cik7Ci0JCWlmICghY2FyZCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQljYXJkID0gY2FwaV9jdHJfZ2V0KGNhcmQpOwotCQlpZiAoIWNhcmQpCi0JCQlyZXR1cm4gLUVTUkNIOwotCQlpZiAoY2FyZC0+bG9hZF9maXJtd2FyZSA9PSBOVUxMKSB7CisKKwkJbXV0ZXhfbG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOworCisJCWN0ciA9IGdldF9jYXBpX2N0cl9ieV9ucihsZGVmLmNvbnRyKTsKKwkJaWYgKCFjdHIpIHsKKwkJCXJldHZhbCA9IC1FSU5WQUw7CisJCQlnb3RvIGxvYWRfdW5sb2NrX291dDsKKwkJfQorCisJCWlmIChjdHItPmxvYWRfZmlybXdhcmUgPT0gTlVMTCkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgImtjYXBpOiBsb2FkOiBubyBsb2FkIGZ1bmN0aW9uXG4iKTsKLQkJCWNhcGlfY3RyX3B1dChjYXJkKTsKLQkJCXJldHVybiAtRVNSQ0g7CisJCQlyZXR2YWwgPSAtRVNSQ0g7CisJCQlnb3RvIGxvYWRfdW5sb2NrX291dDsKIAkJfQogCiAJCWlmIChsZGVmLnQ0ZmlsZS5sZW4gPD0gMCkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgImtjYXBpOiBsb2FkOiBpbnZhbGlkIHBhcmFtZXRlcjogbGVuZ3RoIG9mIHQ0ZmlsZSBpcyAlZCA/XG4iLCBsZGVmLnQ0ZmlsZS5sZW4pOwotCQkJY2FwaV9jdHJfcHV0KGNhcmQpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJCQlyZXR2YWwgPSAtRUlOVkFMOworCQkJZ290byBsb2FkX3VubG9ja19vdXQ7CiAJCX0KIAkJaWYgKGxkZWYudDRmaWxlLmRhdGEgPT0gTlVMTCkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgImtjYXBpOiBsb2FkOiBpbnZhbGlkIHBhcmFtZXRlcjogZGF0YXB0ciBpcyAwXG4iKTsKLQkJCWNhcGlfY3RyX3B1dChjYXJkKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQkJcmV0dmFsID0gLUVJTlZBTDsKKwkJCWdvdG8gbG9hZF91bmxvY2tfb3V0OwogCQl9CiAKIAkJbGRhdGEuZmlybXdhcmUudXNlciA9IDE7CkBAIC05OTgsNTQgKzExMTAsNDkgQEAKIAkJbGRhdGEuY29uZmlndXJhdGlvbi5kYXRhID0gbGRlZi50NGNvbmZpZy5kYXRhOwogCQlsZGF0YS5jb25maWd1cmF0aW9uLmxlbiA9IGxkZWYudDRjb25maWcubGVuOwogCi0JCWlmIChjYXJkLT5jYXJkc3RhdGUgIT0gQ0FSRF9ERVRFQ1RFRCkgeworCQlpZiAoY3RyLT5zdGF0ZSAhPSBDQVBJX0NUUl9ERVRFQ1RFRCkgewogCQkJcHJpbnRrKEtFUk5fSU5GTyAia2NhcGk6IGxvYWQ6IGNvbnRyPSVkIG5vdCBpbiBkZXRlY3Qgc3RhdGVcbiIsIGxkZWYuY29udHIpOwotCQkJY2FwaV9jdHJfcHV0KGNhcmQpOwotCQkJcmV0dXJuIC1FQlVTWTsKKwkJCXJldHZhbCA9IC1FQlVTWTsKKwkJCWdvdG8gbG9hZF91bmxvY2tfb3V0OwogCQl9Ci0JCWNhcmQtPmNhcmRzdGF0ZSA9IENBUkRfTE9BRElORzsKKwkJY3RyLT5zdGF0ZSA9IENBUElfQ1RSX0xPQURJTkc7CiAKLQkJcmV0dmFsID0gY2FyZC0+bG9hZF9maXJtd2FyZShjYXJkLCAmbGRhdGEpOwotCisJCXJldHZhbCA9IGN0ci0+bG9hZF9maXJtd2FyZShjdHIsICZsZGF0YSk7CiAJCWlmIChyZXR2YWwpIHsKLQkJCWNhcmQtPmNhcmRzdGF0ZSA9IENBUkRfREVURUNURUQ7Ci0JCQljYXBpX2N0cl9wdXQoY2FyZCk7Ci0JCQlyZXR1cm4gcmV0dmFsOworCQkJY3RyLT5zdGF0ZSA9IENBUElfQ1RSX0RFVEVDVEVEOworCQkJZ290byBsb2FkX3VubG9ja19vdXQ7CiAJCX0KIAotCQl3aGlsZSAoY2FyZC0+Y2FyZHN0YXRlICE9IENBUkRfUlVOTklORykgeworCQlyZXR2YWwgPSB3YWl0X29uX2N0cl9zdGF0ZShjdHIsIENBUElfQ1RSX1JVTk5JTkcpOwogCi0JCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMDApOwkvKiAwLjEgc2VjICovCi0KLQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewotCQkJCWNhcGlfY3RyX3B1dChjYXJkKTsKLQkJCQlyZXR1cm4gLUVJTlRSOwotCQkJfQotCQl9Ci0JCWNhcGlfY3RyX3B1dChjYXJkKTsKLQkJcmV0dXJuIDA7Citsb2FkX3VubG9ja19vdXQ6CisJCW11dGV4X3VubG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOworCQlyZXR1cm4gcmV0dmFsOwogCiAJY2FzZSBBVk1CMV9SRVNFVENBUkQ6CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmcmRlZiwgZGF0YSwgc2l6ZW9mKGF2bWIxX3Jlc2V0ZGVmKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJY2FyZCA9IGdldF9jYXBpX2N0cl9ieV9ucihyZGVmLmNvbnRyKTsKLQkJaWYgKCFjYXJkKQotCQkJcmV0dXJuIC1FU1JDSDsKIAotCQlpZiAoY2FyZC0+Y2FyZHN0YXRlID09IENBUkRfREVURUNURUQpCi0JCQlyZXR1cm4gMDsKKwkJcmV0dmFsID0gMDsKIAotCQljYXJkLT5yZXNldF9jdHIoY2FyZCk7CisJCW11dGV4X2xvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKIAotCQl3aGlsZSAoY2FyZC0+Y2FyZHN0YXRlID4gQ0FSRF9ERVRFQ1RFRCkgewotCi0JCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMDApOwkvKiAwLjEgc2VjICovCi0KLQkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKLQkJCQlyZXR1cm4gLUVJTlRSOworCQljdHIgPSBnZXRfY2FwaV9jdHJfYnlfbnIocmRlZi5jb250cik7CisJCWlmICghY3RyKSB7CisJCQlyZXR2YWwgPSAtRVNSQ0g7CisJCQlnb3RvIHJlc2V0X3VubG9ja19vdXQ7CiAJCX0KLQkJcmV0dXJuIDA7CiAKKwkJaWYgKGN0ci0+c3RhdGUgPT0gQ0FQSV9DVFJfREVURUNURUQpCisJCQlnb3RvIHJlc2V0X3VubG9ja19vdXQ7CisKKwkJY3RyLT5yZXNldF9jdHIoY3RyKTsKKworCQlyZXR2YWwgPSB3YWl0X29uX2N0cl9zdGF0ZShjdHIsIENBUElfQ1RSX0RFVEVDVEVEKTsKKworcmVzZXRfdW5sb2NrX291dDoKKwkJbXV0ZXhfdW5sb2NrKCZjYXBpX2NvbnRyb2xsZXJfbG9jayk7CisJCXJldHVybiByZXR2YWw7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMTA2Miw3ICsxMTY5LDggQEAKIAogaW50IGNhcGkyMF9tYW51ZmFjdHVyZXIodW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmRhdGEpCiB7Ci0gICAgICAgIHN0cnVjdCBjYXBpX2N0ciAqY2FyZDsKKwlzdHJ1Y3QgY2FwaV9jdHIgKmN0cjsKKwlpbnQgcmV0dmFsOwogCiAJc3dpdGNoIChjbWQpIHsKICNpZmRlZiBBVk1CMV9DT01QQVQKQEAgLTEwODAsMTQgKzExODgsMjAgQEAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZmZGVmLCBkYXRhLCBzaXplb2Yoa2NhcGlfZmxhZ2RlZikpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJY2FyZCA9IGdldF9jYXBpX2N0cl9ieV9ucihmZGVmLmNvbnRyKTsKLQkJaWYgKCFjYXJkKQotCQkJcmV0dXJuIC1FU1JDSDsKKwkJbXV0ZXhfbG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOwogCi0JCWNhcmQtPnRyYWNlZmxhZyA9IGZkZWYuZmxhZzsKLQkJcHJpbnRrKEtFUk5fSU5GTyAia2NhcGk6IGNvbnRyIFslMDNkXSBzZXQgdHJhY2U9JWRcbiIsCi0JCQljYXJkLT5jbnIsIGNhcmQtPnRyYWNlZmxhZyk7Ci0JCXJldHVybiAwOworCQljdHIgPSBnZXRfY2FwaV9jdHJfYnlfbnIoZmRlZi5jb250cik7CisJCWlmIChjdHIpIHsKKwkJCWN0ci0+dHJhY2VmbGFnID0gZmRlZi5mbGFnOworCQkJcHJpbnRrKEtFUk5fSU5GTyAia2NhcGk6IGNvbnRyIFslMDNkXSBzZXQgdHJhY2U9JWRcbiIsCisJCQkgICAgICAgY3RyLT5jbnIsIGN0ci0+dHJhY2VmbGFnKTsKKwkJCXJldHZhbCA9IDA7CisJCX0gZWxzZQorCQkJcmV0dmFsID0gLUVTUkNIOworCisJCW11dGV4X3VubG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOworCisJCXJldHVybiByZXR2YWw7CiAJfQogCWNhc2UgS0NBUElfQ01EX0FERENBUkQ6CiAJewpAQCAtMTA5NSw3ICsxMjA5LDYgQEAKIAkJc3RydWN0IGNhcGlfZHJpdmVyICpkcml2ZXIgPSBOVUxMOwogCQljYXBpY2FyZHBhcmFtcyBjcGFyYW1zOwogCQlrY2FwaV9jYXJkZGVmIGNkZWY7Ci0JCWludCByZXR2YWw7CiAKIAkJaWYgKChyZXR2YWwgPSBjb3B5X2Zyb21fdXNlcigmY2RlZiwgZGF0YSwgc2l6ZW9mKGNkZWYpKSkpCiAJCQlyZXR1cm4gcmV0dmFsOwpAQCAtMTEwNyw2ICsxMjIwLDggQEAKIAkJY3BhcmFtcy5jYXJkdHlwZSA9IDA7CiAJCWNkZWYuZHJpdmVyW3NpemVvZihjZGVmLmRyaXZlciktMV0gPSAwOwogCisJCW11dGV4X2xvY2soJmNhcGlfZHJpdmVyc19sb2NrKTsKKwogCQlsaXN0X2Zvcl9lYWNoKGwsICZjYXBpX2RyaXZlcnMpIHsKIAkJCWRyaXZlciA9IGxpc3RfZW50cnkobCwgc3RydWN0IGNhcGlfZHJpdmVyLCBsaXN0KTsKIAkJCWlmIChzdHJjbXAoZHJpdmVyLT5uYW1lLCBjZGVmLmRyaXZlcikgPT0gMCkKQEAgLTExMTUsMTUgKzEyMzAsMTUgQEAKIAkJaWYgKGRyaXZlciA9PSBOVUxMKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImtjYXBpOiBkcml2ZXIgXCIlc1wiIG5vdCBsb2FkZWQuXG4iLAogCQkJCQljZGVmLmRyaXZlcik7Ci0JCQlyZXR1cm4gLUVTUkNIOwotCQl9Ci0KLQkJaWYgKCFkcml2ZXItPmFkZF9jYXJkKSB7CisJCQlyZXR2YWwgPSAtRVNSQ0g7CisJCX0gZWxzZSBpZiAoIWRyaXZlci0+YWRkX2NhcmQpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAia2NhcGk6IGRyaXZlciBcIiVzXCIgaGFzIG5vIGFkZCBjYXJkIGZ1bmN0aW9uLlxuIiwgY2RlZi5kcml2ZXIpOwotCQkJcmV0dXJuIC1FSU87Ci0JCX0KKwkJCXJldHZhbCA9IC1FSU87CisJCX0gZWxzZQorCQkJcmV0dmFsID0gZHJpdmVyLT5hZGRfY2FyZChkcml2ZXIsICZjcGFyYW1zKTsKIAotCQlyZXR1cm4gZHJpdmVyLT5hZGRfY2FyZChkcml2ZXIsICZjcGFyYW1zKTsKKwkJbXV0ZXhfdW5sb2NrKCZjYXBpX2RyaXZlcnNfbG9jayk7CisJCXJldHVybiByZXR2YWw7CiAJfQogCiAJZGVmYXVsdDoKQEAgLTExMzcsMzAgKzEyNTIsNiBAQAogCiBFWFBPUlRfU1lNQk9MKGNhcGkyMF9tYW51ZmFjdHVyZXIpOwogCi0vKiB0ZW1wb3JhcnkgaGFjayAqLwotCi0vKioKLSAqIGNhcGkyMF9zZXRfY2FsbGJhY2soKSAtIHNldCBDQVBJIGFwcGxpY2F0aW9uIG5vdGlmaWNhdGlvbiBjYWxsYmFjayBmdW5jdGlvbgotICogQGFwOgkJQ0FQSSBhcHBsaWNhdGlvbiBkZXNjcmlwdG9yIHN0cnVjdHVyZS4KLSAqIEBjYWxsYmFjazoJY2FsbGJhY2sgZnVuY3Rpb24gKE5VTEwgdG8gcmVtb3ZlKS4KLSAqCi0gKiBJZiBub3QgTlVMTCwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHRvIG5vdGlmeSB0aGUKLSAqIGFwcGxpY2F0aW9uIG9mIHRoZSBhZGRpdGlvbiBvciByZW1vdmFsIG9mIGEgY29udHJvbGxlci4KLSAqIFRoZSBmaXJzdCBhcmd1bWVudCAoY21kKSB3aWxsIHRlbGwgd2hldGhlciB0aGUgY29udHJvbGxlciB3YXMgYWRkZWQKLSAqIChLQ0lfQ09OVFJVUCkgb3IgcmVtb3ZlZCAoS0NJX0NPTlRSRE9XTikuCi0gKiBUaGUgc2Vjb25kIGFyZ3VtZW50IChjb250cikgd2lsbCBiZSB0aGUgY29udHJvbGxlciBudW1iZXIuCi0gKiBGb3IgY21kPT1LQ0lfQ09OVFJVUCB0aGUgdGhpcmQgYXJndW1lbnQgKGRhdGEpIHdpbGwgYmUgYSBwb2ludGVyIHRvIHRoZQotICogbmV3IGNvbnRyb2xsZXIncyBjYXBhYmlsaXR5IHByb2ZpbGUgc3RydWN0dXJlLgotICovCi0KLXZvaWQgY2FwaTIwX3NldF9jYWxsYmFjayhzdHJ1Y3QgY2FwaTIwX2FwcGwgKmFwLAotCQkJIHZvaWQgKCpjYWxsYmFjaykgKHVuc2lnbmVkIGludCBjbWQsIF9fdTMyIGNvbnRyLCB2b2lkICpkYXRhKSkKLXsKLQlhcC0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKLX0KLQotRVhQT1JUX1NZTUJPTChjYXBpMjBfc2V0X2NhbGxiYWNrKTsKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogLS0tLS0tLS0gSW5pdCAmIENsZWFudXAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTE2OSwyNyArMTI2MCwyMSBAQAogICogaW5pdCAvIGV4aXQgZnVuY3Rpb25zCiAgKi8KIAorc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjYXBpY3RyX25iID0geworCS5ub3RpZmllcl9jYWxsID0gbm90aWZ5X2hhbmRsZXIsCisJLnByaW9yaXR5ID0gSU5UX01BWCwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IGtjYXBpX2luaXQodm9pZCkKIHsKLQljaGFyICpwOwotCWNoYXIgcmV2WzMyXTsKLQlpbnQgcmV0OworCWludCBlcnI7CiAKLQlyZXQgPSBjZGVidWdfaW5pdCgpOwotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0gICAgICAgIGtjYXBpX3Byb2NfaW5pdCgpOworCXJlZ2lzdGVyX2NhcGljdHJfbm90aWZpZXIoJmNhcGljdHJfbmIpOwogCi0JaWYgKChwID0gc3RyY2hyKHJldmlzaW9uLCAnOicpKSAhPSBOVUxMICYmIHBbMV0pIHsKLQkJc3RybGNweShyZXYsIHAgKyAyLCBzaXplb2YocmV2KSk7Ci0JCWlmICgocCA9IHN0cmNocihyZXYsICckJykpICE9IE5VTEwgJiYgcCA+IHJldikKLQkJICAgKihwLTEpID0gMDsKLQl9IGVsc2UKLQkJc3RyY3B5KHJldiwgIjEuMCIpOwotCi0gICAgICAgIHByaW50ayhLRVJOX05PVElDRSAiQ0FQSSBTdWJzeXN0ZW0gUmV2ICVzXG4iLCByZXYpOwotCi0JcmV0dXJuIDA7CisJZXJyID0gY2RlYnVnX2luaXQoKTsKKwlpZiAoIWVycikKKwkJa2NhcGlfcHJvY19pbml0KCk7CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGtjYXBpX2V4aXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpLmggYi9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaS5oCmluZGV4IDI0NDcxMWYuLmY0NjIwYjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpLmgKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkva2NhcGkuaApAQCAtMjQsMTYgKzI0LDE5IEBACiAjZW5kaWYKIAogZW51bSB7Ci0JQ0FSRF9ERVRFQ1RFRCA9IDEsCi0JQ0FSRF9MT0FESU5HICA9CTIsCi0JQ0FSRF9SVU5OSU5HICA9IDMsCisJQ0FQSV9DVFJfREVUQUNIRUQgPSAwLAorCUNBUElfQ1RSX0RFVEVDVEVEID0gMSwKKwlDQVBJX0NUUl9MT0FESU5HICA9IDIsCisJQ0FQSV9DVFJfUlVOTklORyAgPSAzLAogfTsKIAogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgY2FwaV9kcml2ZXJzOwotZXh0ZXJuIHJ3bG9ja190IGNhcGlfZHJpdmVyc19saXN0X2xvY2s7CitleHRlcm4gc3RydWN0IG11dGV4IGNhcGlfZHJpdmVyc19sb2NrOworCitleHRlcm4gc3RydWN0IGNhcGlfY3RyICpjYXBpX2NvbnRyb2xsZXJbQ0FQSV9NQVhDT05UUl07CitleHRlcm4gc3RydWN0IG11dGV4IGNhcGlfY29udHJvbGxlcl9sb2NrOwogCiBleHRlcm4gc3RydWN0IGNhcGkyMF9hcHBsICpjYXBpX2FwcGxpY2F0aW9uc1tDQVBJX01BWEFQUExdOwotZXh0ZXJuIHN0cnVjdCBjYXBpX2N0ciAqY2FwaV9jYXJkc1tDQVBJX01BWENPTlRSXTsKIAogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpX3Byb2MuYyBiL2RyaXZlcnMvaXNkbi9jYXBpL2tjYXBpX3Byb2MuYwppbmRleCAwOWQ0ZGI3Li5lYTJkZmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vY2FwaS9rY2FwaV9wcm9jLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkva2NhcGlfcHJvYy5jCkBAIC0xNSwxMyArMTUsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KIAotc3RhdGljIGNoYXIgKgotY2FyZHN0YXRlMnN0cih1bnNpZ25lZCBzaG9ydCBjYXJkc3RhdGUpCitzdGF0aWMgY2hhciAqc3RhdGUyc3RyKHVuc2lnbmVkIHNob3J0IHN0YXRlKQogewotCXN3aXRjaCAoY2FyZHN0YXRlKSB7Ci0JY2FzZSBDQVJEX0RFVEVDVEVEOglyZXR1cm4gImRldGVjdGVkIjsKLQljYXNlIENBUkRfTE9BRElORzoJcmV0dXJuICJsb2FkaW5nIjsKLQljYXNlIENBUkRfUlVOTklORzoJcmV0dXJuICJydW5uaW5nIjsKKwlzd2l0Y2ggKHN0YXRlKSB7CisJY2FzZSBDQVBJX0NUUl9ERVRFQ1RFRDoJcmV0dXJuICJkZXRlY3RlZCI7CisJY2FzZSBDQVBJX0NUUl9MT0FESU5HOglyZXR1cm4gImxvYWRpbmciOworCWNhc2UgQ0FQSV9DVFJfUlVOTklORzoJcmV0dXJuICJydW5uaW5nIjsKIAlkZWZhdWx0OgkgICAgICAgIHJldHVybiAiPz8/IjsKIAl9CiB9CkBAIC0zNiw5ICszNSwxMiBAQAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIHN0YXRpYyB2b2lkICpjb250cm9sbGVyX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKKwlfX2FjcXVpcmVzKGNhcGlfY29udHJvbGxlcl9sb2NrKQogeworCW11dGV4X2xvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKKwogCWlmICgqcG9zIDwgQ0FQSV9NQVhDT05UUikKLQkJcmV0dXJuICZjYXBpX2NhcmRzWypwb3NdOworCQlyZXR1cm4gJmNhcGlfY29udHJvbGxlclsqcG9zXTsKIAogCXJldHVybiBOVUxMOwogfQpAQCAtNDcsMTMgKzQ5LDE1IEBACiB7CiAJKysqcG9zOwogCWlmICgqcG9zIDwgQ0FQSV9NQVhDT05UUikKLQkJcmV0dXJuICZjYXBpX2NhcmRzWypwb3NdOworCQlyZXR1cm4gJmNhcGlfY29udHJvbGxlclsqcG9zXTsKIAogCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBjb250cm9sbGVyX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCisJX19yZWxlYXNlcyhjYXBpX2NvbnRyb2xsZXJfbG9jaykKIHsKKwltdXRleF91bmxvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKIH0KIAogc3RhdGljIGludCBjb250cm9sbGVyX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCkBAIC02NSw3ICs2OSw3IEBACiAKIAlzZXFfcHJpbnRmKHNlcSwgIiVkICUtMTBzICUtOHMgJS0xNnMgJXNcbiIsCiAJCSAgIGN0ci0+Y25yLCBjdHItPmRyaXZlcl9uYW1lLAotCQkgICBjYXJkc3RhdGUyc3RyKGN0ci0+Y2FyZHN0YXRlKSwKKwkJICAgc3RhdGUyc3RyKGN0ci0+c3RhdGUpLAogCQkgICBjdHItPm5hbWUsCiAJCSAgIGN0ci0+cHJvY2luZm8gPyAgY3RyLT5wcm9jaW5mbyhjdHIpIDogIiIpOwogCkBAIC0xMzUsOSArMTM5LDExIEBACiAvLyAgICAgIGFwcGxpZCBucmVjdmN0bHBrdCBucmVjdmRhdGFwa3QgbnNlbnRjdGxwa3QgbnNlbnRkYXRhcGt0CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIHZvaWQgKgotYXBwbGljYXRpb25zX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKK3N0YXRpYyB2b2lkICphcHBsaWNhdGlvbnNfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQorCV9fYWNxdWlyZXMoY2FwaV9jb250cm9sbGVyX2xvY2spCiB7CisJbXV0ZXhfbG9jaygmY2FwaV9jb250cm9sbGVyX2xvY2spOworCiAJaWYgKCpwb3MgPCBDQVBJX01BWEFQUEwpCiAJCXJldHVybiAmY2FwaV9hcHBsaWNhdGlvbnNbKnBvc107CiAKQEAgLTE1NCw5ICsxNjAsMTAgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQKLWFwcGxpY2F0aW9uc19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQorc3RhdGljIHZvaWQgYXBwbGljYXRpb25zX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCisJX19yZWxlYXNlcyhjYXBpX2NvbnRyb2xsZXJfbG9jaykKIHsKKwltdXRleF91bmxvY2soJmNhcGlfY29udHJvbGxlcl9sb2NrKTsKIH0KIAogc3RhdGljIGludApAQCAtMjM5LDkgKzI0Niw5IEBACiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogc3RhdGljIHZvaWQgKmNhcGlfZHJpdmVyX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKLQlfX2FjcXVpcmVzKCZjYXBpX2RyaXZlcnNfbGlzdF9sb2NrKQorCV9fYWNxdWlyZXMoJmNhcGlfZHJpdmVyc19sb2NrKQogewotCXJlYWRfbG9jaygmY2FwaV9kcml2ZXJzX2xpc3RfbG9jayk7CisJbXV0ZXhfbG9jaygmY2FwaV9kcml2ZXJzX2xvY2spOwogCXJldHVybiBzZXFfbGlzdF9zdGFydCgmY2FwaV9kcml2ZXJzLCAqcG9zKTsKIH0KIApAQCAtMjUxLDkgKzI1OCw5IEBACiB9CiAKIHN0YXRpYyB2b2lkIGNhcGlfZHJpdmVyX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCi0JX19yZWxlYXNlcygmY2FwaV9kcml2ZXJzX2xpc3RfbG9jaykKKwlfX3JlbGVhc2VzKCZjYXBpX2RyaXZlcnNfbG9jaykKIHsKLQlyZWFkX3VubG9jaygmY2FwaV9kcml2ZXJzX2xpc3RfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZjYXBpX2RyaXZlcnNfbG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgY2FwaV9kcml2ZXJfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2FzeW5jZGF0YS5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYXN5bmNkYXRhLmMKaW5kZXggY2NiMmE3Yi4uYzUwMTZiZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYXN5bmNkYXRhLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYXN5bmNkYXRhLmMKQEAgLTQwLDYgKzQwLDggQEAKICAqIEFwcGVuZCByZWNlaXZlZCBieXRlcyB0byB0aGUgY29tbWFuZCByZXNwb25zZSBidWZmZXIgYW5kIGZvcndhcmQgdGhlbQogICogbGluZSBieSBsaW5lIHRvIHRoZSByZXNwb25zZSBoYW5kbGVyLiBFeGl0IHdoZW5ldmVyIGEgbW9kZS9zdGF0ZSBjaGFuZ2UKICAqIG1pZ2h0IGhhdmUgb2NjdXJyZWQuCisgKiBOb3RlOiBSZWNlaXZlZCBsaW5lcyBtYXkgYmUgdGVybWluYXRlZCBieSBDUiwgTEYsIG9yIENSIExGLCB3aGljaCB3aWxsIGJlCisgKiByZW1vdmVkIGJlZm9yZSBwYXNzaW5nIHRoZSBsaW5lIHRvIHRoZSByZXNwb25zZSBoYW5kbGVyLgogICogUmV0dXJuIHZhbHVlOgogICoJbnVtYmVyIG9mIHByb2Nlc3NlZCBieXRlcwogICovCkBAIC02NSwxNCArNjcsMTQgQEAKIAkJCS8qIC0tdi0tIGZhbGwgdGhyb3VnaCAtLXYtLSAqLwogCQljYXNlICdccic6CiAJCQkvKiBlbmQgb2YgbWVzc2FnZSBsaW5lLCBwYXNzIHRvIHJlc3BvbnNlIGhhbmRsZXIgKi8KLQkJCWdpZ19kYmcoREVCVUdfVFJBTlNDTUQsICIlczogRW5kIG9mIE1lc3NhZ2UgKCVkIEJ5dGVzKSIsCi0JCQkJX19mdW5jX18sIGNieXRlcyk7CiAJCQlpZiAoY2J5dGVzID49IE1BWF9SRVNQX1NJWkUpIHsKIAkJCQlkZXZfd2Fybihjcy0+ZGV2LCAicmVzcG9uc2UgdG9vIGxhcmdlICglZClcbiIsCiAJCQkJCSBjYnl0ZXMpOwogCQkJCWNieXRlcyA9IE1BWF9SRVNQX1NJWkU7CiAJCQl9CiAJCQljcy0+Y2J5dGVzID0gY2J5dGVzOworCQkJZ2lnYXNldF9kYmdfYnVmZmVyKERFQlVHX1RSQU5TQ01ELCAicmVjZWl2ZWQgcmVzcG9uc2UiLAorCQkJCQkgICBjYnl0ZXMsIGNzLT5yZXNwZGF0YSk7CiAJCQlnaWdhc2V0X2hhbmRsZV9tb2RlbV9yZXNwb25zZShjcyk7CiAJCQljYnl0ZXMgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYwppbmRleCA5NWViYzUxLi4wYmUxNWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMKQEAgLTM0NywxMiArMzQ3LDcgQEAKIHsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGJjcy0+Y3M7CiAKLQlnaWdfZGJnKERFQlVHX0FOWSwgIiVzOiBzY2hlZHVsaW5nIEhVUCBmb3IgY2hhbm5lbCAlZCIsCi0JCV9fZnVuY19fLCBiY3MtPmNoYW5uZWwpOwotCi0JaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmJjcy0+YXRfc3RhdGUsIEVWX0hVUCwgTlVMTCwgMCwgTlVMTCkpCi0JCWRldl9lcnIoY3MtPmRldiwgImV2ZW50IHF1ZXVlIGZ1bGxcbiIpOwotCisJZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZiY3MtPmF0X3N0YXRlLCBFVl9IVVAsIE5VTEwsIDAsIE5VTEwpOwogCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogfQogCkBAIC0xNzA2LDggKzE3MDEsNyBAQAogCiAJLyogdW5xdWV1ZSBjb21wbGV0ZWQgYnVmZmVyICovCiAJY3MtPmNtZGJ5dGVzIC09IGNzLT5jdXJsZW47Ci0JZ2lnX2RiZyhERUJVR19UUkFOU0NNRHxERUJVR19MT0NLQ01ELAotCQkid3JpdGVfY29tbWFuZDogc2VudCAldSBieXRlcywgJXUgbGVmdCIsCisJZ2lnX2RiZyhERUJVR19PVVRQVVQsICJ3cml0ZV9jb21tYW5kOiBzZW50ICV1IGJ5dGVzLCAldSBsZWZ0IiwKIAkJY3MtPmN1cmxlbiwgY3MtPmNtZGJ5dGVzKTsKIAlpZiAoY2ItPm5leHQgIT0gTlVMTCkgewogCQljcy0+Y21kYnVmID0gY2ItPm5leHQ7CkBAIC0xODgxLDEzICsxODc1LDEzIEBACiAKIAkvKiBjaGVjayBpZiBzdXNwZW5kIHJlcXVlc3RlZCAqLwogCWlmICh1Y3MtPmJhc3N0YXRlICYgQlNfU1VTUEVORCkgewotCQlnaWdfZGJnKERFQlVHX1RSQU5TQ01EfERFQlVHX0xPQ0tDTUQsICJzdXNwZW5kaW5nIik7CisJCWdpZ19kYmcoREVCVUdfT1VUUFVULCAic3VzcGVuZGluZyIpOwogCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKIAl9CiAKIAkvKiBjaGVjayBpZiBBVCBjaGFubmVsIGlzIG9wZW4gKi8KIAlpZiAoISh1Y3MtPmJhc3N0YXRlICYgQlNfQVRPUEVOKSkgewotCQlnaWdfZGJnKERFQlVHX1RSQU5TQ01EfERFQlVHX0xPQ0tDTUQsICJBVCBjaGFubmVsIG5vdCBvcGVuIik7CisJCWdpZ19kYmcoREVCVUdfT1VUUFVULCAiQVQgY2hhbm5lbCBub3Qgb3BlbiIpOwogCQlyYyA9IHJlcV9zdWJtaXQoY3MtPmJjcywgSERfT1BFTl9BVENIQU5ORUwsIDAsIEJBU19USU1FT1VUKTsKIAkJaWYgKHJjIDwgMCkgewogCQkJLyogZmx1c2ggY29tbWFuZCBxdWV1ZSAqLwpAQCAtMjI1MSw3ICsyMjQ1LDcgQEAKIAlpbnQgaSwgajsKIAlpbnQgcmM7CiAKLQlnaWdfZGJnKERFQlVHX0FOWSwKKwlnaWdfZGJnKERFQlVHX0lOSVQsCiAJCSIlczogQ2hlY2sgaWYgZGV2aWNlIG1hdGNoZXMgLi4gKFZlbmRvcjogMHgleCwgUHJvZHVjdDogMHgleCkiLAogCQlfX2Z1bmNfXywgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCiAJCWxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CkBAIC0yMjU5LDcgKzIyNTMsNyBAQAogCS8qIHNldCByZXF1aXJlZCBhbHRlcm5hdGUgc2V0dGluZyAqLwogCWhvc3RpZiA9IGludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CiAJaWYgKGhvc3RpZi0+ZGVzYy5iQWx0ZXJuYXRlU2V0dGluZyAhPSAzKSB7Ci0JCWdpZ19kYmcoREVCVUdfQU5ZLAorCQlnaWdfZGJnKERFQlVHX0lOSVQsCiAJCQkiJXM6IHdyb25nIGFsdGVybmF0ZSBzZXR0aW5nICVkIC0gdHJ5aW5nIHRvIHN3aXRjaCIsCiAJCQlfX2Z1bmNfXywgaG9zdGlmLT5kZXNjLmJBbHRlcm5hdGVTZXR0aW5nKTsKIAkJaWYgKHVzYl9zZXRfaW50ZXJmYWNlKHVkZXYsIGhvc3RpZi0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCAzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY2FwaS5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvY2FwaS5jCmluZGV4IDNmNWNkMDYuLjY2NDNkNjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2NhcGkuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jYXBpLmMKQEAgLTEzLDYgKzEzLDggQEAKIAogI2luY2x1ZGUgImdpZ2FzZXQuaCIKICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lzZG4vY2FwaWxsaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lzZG4vY2FwaWNtZC5oPgogI2luY2x1ZGUgPGxpbnV4L2lzZG4vY2FwaXV0aWwuaD4KQEAgLTE2OSwyMCArMTcxLDYgQEAKIH0KIAogLyoKLSAqIGNoZWNrIGZvciBsZWdhbCBoZXggZGlnaXQKLSAqLwotc3RhdGljIGlubGluZSBpbnQgaXNoZXhkaWdpdChjaGFyIGMpCi17Ci0JaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKQotCQlyZXR1cm4gMTsKLQlpZiAoYyA+PSAnQScgJiYgYyA8PSAnRicpCi0JCXJldHVybiAxOwotCWlmIChjID49ICdhJyAmJiBjIDw9ICdmJykKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCiAgKiBjb252ZXJ0IGhleCB0byBiaW5hcnkKICAqLwogc3RhdGljIGlubGluZSB1OCBoZXgyYmluKGNoYXIgYykKQEAgLTIwMiw3ICsxOTAsNyBAQAogewogCWludCBsID0gMDsKIAl3aGlsZSAoKmluKSB7Ci0JCWlmICghaXNoZXhkaWdpdChpblswXSkgfHwgIWlzaGV4ZGlnaXQoaW5bMV0pIHx8IGwgPj0gbWF4bGVuKQorCQlpZiAoIWlzeGRpZ2l0KGluWzBdKSB8fCAhaXN4ZGlnaXQoaW5bMV0pIHx8IGwgPj0gbWF4bGVuKQogCQkJcmV0dXJuIC0xOwogCQlvdXRbKytsXSA9IChoZXgyYmluKGluWzBdKSA8PCA0KSArIGhleDJiaW4oaW5bMV0pOwogCQlpbiArPSAyOwpAQCAtMTQyNSw5ICsxNDEzLDEwIEBACiAKIAkvKiBxdWV1ZSAmIHNjaGVkdWxlIEVWX0RJQUwgZXZlbnQgKi8KIAlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmYmNzLT5hdF9zdGF0ZSwgRVZfRElBTCwgY29tbWFuZHMsCi0JCQkgICAgICAgYmNzLT5hdF9zdGF0ZS5zZXFfaW5kZXgsIE5VTEwpKQotCQlnb3RvIG9vbTsKLQlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgRElBTCIpOworCQkJICAgICAgIGJjcy0+YXRfc3RhdGUuc2VxX2luZGV4LCBOVUxMKSkgeworCQlpbmZvID0gQ0FQSV9NU0dPU1JFU09VUkNFRVJSOworCQlnb3RvIGVycm9yOworCX0KIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAlhcC0+Y29ubmVjdGVkID0gQVBDT05OX1NFVFVQOwogCXNlbmRfY29uZihpaWYsIGFwLCBza2IsIENhcGlTdWNjZXNzKTsKQEAgLTE1NDEsNyArMTUzMCw2IEBACiAJCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZjcy0+YmNzW2NoYW5uZWwtMV0uYXRfc3RhdGUsCiAJCQkJICAgICAgIEVWX0FDQ0VQVCwgTlVMTCwgMCwgTlVMTCkpCiAJCQlyZXR1cm47Ci0JCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBBQ0NFUFQiKTsKIAkJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAJCXJldHVybjsKIApAQCAtMTU4Miw3ICsxNTcwLDYgQEAKIAkJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmNzLT5iY3NbY2hhbm5lbC0xXS5hdF9zdGF0ZSwKIAkJCQkgICAgICAgRVZfSFVQLCBOVUxMLCAwLCBOVUxMKSkKIAkJCXJldHVybjsKLQkJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIEhVUCIpOwogCQlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAkJcmV0dXJuOwogCX0KQEAgLTE2NjUsMTEgKzE2NTIsOSBAQAogCQkvKiB0cmlnZ2VyIGhhbmd1cCwgY2F1c2luZyBldmVudHVhbCBESVNDT05ORUNUX0lORCAqLwogCQlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmYmNzLT5hdF9zdGF0ZSwKIAkJCQkgICAgICAgRVZfSFVQLCBOVUxMLCAwLCBOVUxMKSkgewotCQkJZGV2X2Vycihjcy0+ZGV2LCAiJXM6IG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQlyZXR1cm47CiAJCX0KLQkJZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIEhVUCIpOwogCQlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCQkvKiBlbWl0IERJU0NPTk5FQ1RfQjNfSU5EICovCkBAIC0xNzY4LDExICsxNzUzLDkgQEAKIAogCS8qIHRyaWdnZXIgaGFuZ3VwLCBjYXVzaW5nIGV2ZW50dWFsIERJU0NPTk5FQ1RfSU5EICovCiAJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmJjcy0+YXRfc3RhdGUsIEVWX0hVUCwgTlVMTCwgMCwgTlVMTCkpIHsKLQkJZGV2X2Vycihjcy0+ZGV2LCAiJXM6IG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKIAkJc2VuZF9jb25mKGlpZiwgYXAsIHNrYiwgQ0FQSV9NU0dPU1JFU09VUkNFRVJSKTsKIAkJcmV0dXJuOwogCX0KLQlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgSFVQIik7CiAJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAKIAkvKiBlbWl0IHJlcGx5ICovCkBAIC0xODE1LDExICsxNzk4LDkgQEAKIAkvKiB0cmlnZ2VyIGhhbmd1cCwgY2F1c2luZyBldmVudHVhbCBESVNDT05ORUNUX0IzX0lORCAqLwogCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZjcy0+YmNzW2NoYW5uZWwtMV0uYXRfc3RhdGUsCiAJCQkgICAgICAgRVZfSFVQLCBOVUxMLCAwLCBOVUxMKSkgewotCQlkZXZfZXJyKGNzLT5kZXYsICIlczogb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOwogCQlzZW5kX2NvbmYoaWlmLCBhcCwgc2tiLCBDQVBJX01TR09TUkVTT1VSQ0VFUlIpOwogCQlyZXR1cm47CiAJfQotCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBIVVAiKTsKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCS8qIE5DUEkgcGFyYW1ldGVyOiBub3QgYXBwbGljYWJsZSBmb3IgQjMgVHJhbnNwYXJlbnQgKi8KQEAgLTIxMDYsMzUgKzIwODcsMjIgQEAKIAlyZXR1cm4gY3RyLT5uYW1lOwkvKiBUb0RvOiBtb3JlPyAqLwogfQogCi0vKioKLSAqIGdpZ2FzZXRfY3RyX3JlYWRfcHJvYygpIC0gYnVpbGQgY29udHJvbGxlciBwcm9jIGZpbGUgZW50cnkKLSAqIEBwYWdlOglidWZmZXIgb2YgUEFHRV9TSVpFIGJ5dGVzIGZvciByZWNlaXZpbmcgdGhlIGVudHJ5LgotICogQHN0YXJ0Ogl1bnVzZWQuCi0gKiBAb2ZmOgl1bnVzZWQuCi0gKiBAY291bnQ6CXVudXNlZC4KLSAqIEBlb2Y6CXVudXNlZC4KLSAqIEBjdHI6CWNvbnRyb2xsZXIgZGVzY3JpcHRvciBzdHJ1Y3R1cmUuCi0gKgotICogUmV0dXJuIHZhbHVlOiBsZW5ndGggb2YgZ2VuZXJhdGVkIGVudHJ5Ci0gKi8KLXN0YXRpYyBpbnQgZ2lnYXNldF9jdHJfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJICBpbnQgY291bnQsIGludCAqZW9mLCBzdHJ1Y3QgY2FwaV9jdHIgKmN0cikKK3N0YXRpYyBpbnQgZ2lnYXNldF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogeworCXN0cnVjdCBjYXBpX2N0ciAqY3RyID0gbS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY2FyZHN0YXRlICpjcyA9IGN0ci0+ZHJpdmVyZGF0YTsKIAljaGFyICpzOwogCWludCBpOwotCWludCBsZW4gPSAwOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXNcbiIsICJuYW1lIiwgY3RyLT5uYW1lKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzICVzXG4iLCAiZGV2IiwKKworCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAibmFtZSIsIGN0ci0+bmFtZSk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXMgJXNcbiIsICJkZXYiLAogCQkJZGV2X2RyaXZlcl9zdHJpbmcoY3MtPmRldiksIGRldl9uYW1lKGNzLT5kZXYpKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVkXG4iLCAiaWQiLCBjcy0+bXlpZCk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJWRcbiIsICJpZCIsIGNzLT5teWlkKTsKIAlpZiAoY3MtPmdvdGZ3dmVyKQotCQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVkLiVkLiVkLiVkXG4iLCAiZmlybXdhcmUiLAorCQlzZXFfcHJpbnRmKG0sICIlLTE2cyAlZC4lZC4lZC4lZFxuIiwgImZpcm13YXJlIiwKIAkJCWNzLT5md3ZlclswXSwgY3MtPmZ3dmVyWzFdLCBjcy0+Znd2ZXJbMl0sIGNzLT5md3ZlclszXSk7Ci0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlZFxuIiwgImNoYW5uZWxzIiwKLQkJCWNzLT5jaGFubmVscyk7Ci0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgIm9uZWNoYW5uZWwiLAotCQkJY3MtPm9uZWNoYW5uZWwgPyAieWVzIiA6ICJubyIpOworCXNlcV9wcmludGYobSwgIiUtMTZzICVkXG4iLCAiY2hhbm5lbHMiLCBjcy0+Y2hhbm5lbHMpOworCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAib25lY2hhbm5lbCIsIGNzLT5vbmVjaGFubmVsID8gInllcyIgOiAibm8iKTsKIAogCXN3aXRjaCAoY3MtPm1vZGUpIHsKIAljYXNlIE1fVU5LTk9XTjoKQEAgLTIxNTIsNyArMjEyMCw3IEBACiAJZGVmYXVsdDoKIAkJcyA9ICI/PyI7CiAJfQotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXNcbiIsICJtb2RlIiwgcyk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJtb2RlIiwgcyk7CiAKIAlzd2l0Y2ggKGNzLT5tc3RhdGUpIHsKIAljYXNlIE1TX1VOSU5JVElBTElaRUQ6CkBAIC0yMTc2LDI1ICsyMTQ0LDIxIEBACiAJZGVmYXVsdDoKIAkJcyA9ICI/PyI7CiAJfQotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXNcbiIsICJtc3RhdGUiLCBzKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlc1xuIiwgIm1zdGF0ZSIsIHMpOwogCi0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgInJ1bm5pbmciLAotCQkJY3MtPnJ1bm5pbmcgPyAieWVzIiA6ICJubyIpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXNcbiIsICJjb25uZWN0ZWQiLAotCQkJY3MtPmNvbm5lY3RlZCA/ICJ5ZXMiIDogIm5vIik7Ci0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgImlzZG5fdXAiLAotCQkJY3MtPmlzZG5fdXAgPyAieWVzIiA6ICJubyIpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXNcbiIsICJjaWRtb2RlIiwKLQkJCWNzLT5jaWRtb2RlID8gInllcyIgOiAibm8iKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlc1xuIiwgInJ1bm5pbmciLCBjcy0+cnVubmluZyA/ICJ5ZXMiIDogIm5vIik7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJjb25uZWN0ZWQiLCBjcy0+Y29ubmVjdGVkID8gInllcyIgOiAibm8iKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlc1xuIiwgImlzZG5fdXAiLCBjcy0+aXNkbl91cCA/ICJ5ZXMiIDogIm5vIik7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJjaWRtb2RlIiwgY3MtPmNpZG1vZGUgPyAieWVzIiA6ICJubyIpOwogCiAJZm9yIChpID0gMDsgaSA8IGNzLT5jaGFubmVsczsgaSsrKSB7Ci0JCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiWyVkXSUtMTNzICVkXG4iLCBpLCAiY29ycnVwdGVkIiwKKwkJc2VxX3ByaW50ZihtLCAiWyVkXSUtMTNzICVkXG4iLCBpLCAiY29ycnVwdGVkIiwKIAkJCQljcy0+YmNzW2ldLmNvcnJ1cHRlZCk7Ci0JCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiWyVkXSUtMTNzICVkXG4iLCBpLCAidHJhbnNfZG93biIsCisJCXNlcV9wcmludGYobSwgIlslZF0lLTEzcyAlZFxuIiwgaSwgInRyYW5zX2Rvd24iLAogCQkJCWNzLT5iY3NbaV0udHJhbnNfZG93bik7Ci0JCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiWyVkXSUtMTNzICVkXG4iLCBpLCAidHJhbnNfdXAiLAorCQlzZXFfcHJpbnRmKG0sICJbJWRdJS0xM3MgJWRcbiIsIGksICJ0cmFuc191cCIsCiAJCQkJY3MtPmJjc1tpXS50cmFuc191cCk7Ci0JCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiWyVkXSUtMTNzICVkXG4iLCBpLCAiY2hzdGF0ZSIsCisJCXNlcV9wcmludGYobSwgIlslZF0lLTEzcyAlZFxuIiwgaSwgImNoc3RhdGUiLAogCQkJCWNzLT5iY3NbaV0uY2hzdGF0ZSk7CiAJCXN3aXRjaCAoY3MtPmJjc1tpXS5wcm90bzIpIHsKIAkJY2FzZSBMMl9CSVRTWU5DOgpAQCAtMjIwOSwxMSArMjE3MywyMyBAQAogCQlkZWZhdWx0OgogCQkJcyA9ICI/PyI7CiAJCX0KLQkJbGVuICs9IHNwcmludGYocGFnZStsZW4sICJbJWRdJS0xM3MgJXNcbiIsIGksICJwcm90bzIiLCBzKTsKKwkJc2VxX3ByaW50ZihtLCAiWyVkXSUtMTNzICVzXG4iLCBpLCAicHJvdG8yIiwgcyk7CiAJfQotCXJldHVybiBsZW47CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZ2lnYXNldF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGdpZ2FzZXRfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZ2lnYXNldF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGdpZ2FzZXRfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OwogCiBzdGF0aWMgc3RydWN0IGNhcGlfZHJpdmVyIGNhcGlfZHJpdmVyX2dpZ2FzZXQgPSB7CiAJLm5hbWUJCT0gImdpZ2FzZXQiLApAQCAtMjI1Niw3ICsyMjMyLDcgQEAKIAlpaWYtPmN0ci5yZWxlYXNlX2FwcGwgID0gZ2lnYXNldF9yZWxlYXNlX2FwcGw7CiAJaWlmLT5jdHIuc2VuZF9tZXNzYWdlICA9IGdpZ2FzZXRfc2VuZF9tZXNzYWdlOwogCWlpZi0+Y3RyLnByb2NpbmZvICAgICAgPSBnaWdhc2V0X3Byb2NpbmZvOwotCWlpZi0+Y3RyLmN0cl9yZWFkX3Byb2MgPSBnaWdhc2V0X2N0cl9yZWFkX3Byb2M7CisJaWlmLT5jdHIucHJvY19mb3BzID0gJmdpZ2FzZXRfcHJvY19mb3BzOwogCUlOSVRfTElTVF9IRUFEKCZpaWYtPmFwcGxzKTsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZpaWYtPnNlbmRxdWV1ZSk7CiAJYXRvbWljX3NldCgmaWlmLT5zZW5kcWxlbiwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9jb21tb24uYyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2NvbW1vbi5jCmluZGV4IDY2NGIwYzUuLjg1ZGUzMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2NvbW1vbi5jCkBAIC0xNDksMTAgKzE0OSw4IEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoYXRfc3RhdGUtPmNzLCBhdF9zdGF0ZSwgRVZfVElNRU9VVCwgTlVMTCwKLQkJCSAgICAgICBhdF9zdGF0ZS0+dGltZXJfaW5kZXgsIE5VTEwpKQotCQkJZGV2X2VycihhdF9zdGF0ZS0+Y3MtPmRldiwgIiVzOiBvdXQgb2YgbWVtb3J5XG4iLAotCQkJCV9fZnVuY19fKTsKKwlnaWdhc2V0X2FkZF9ldmVudChhdF9zdGF0ZS0+Y3MsIGF0X3N0YXRlLCBFVl9USU1FT1VULCBOVUxMLAorCQkJICBhdF9zdGF0ZS0+dGltZXJfaW5kZXgsIE5VTEwpOwogCXJldHVybiAxOwogfQogCkBAIC0xODAsNyArMTc4LDcgQEAKIAlpZiAoY3MtPnJ1bm5pbmcpIHsKIAkJbW9kX3RpbWVyKCZjcy0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEdJR19USUNLKSk7CiAJCWlmICh0aW1lb3V0KSB7Ci0JCQlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgdGltZW91dCIpOworCQkJZ2lnX2RiZyhERUJVR19FVkVOVCwgInNjaGVkdWxpbmcgdGltZW91dCIpOwogCQkJdGFza2xldF9zY2hlZHVsZSgmY3MtPmV2ZW50X3Rhc2tsZXQpOwogCQl9CiAJfQpAQCAtMTk0LDE0ICsxOTIsMTQgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZiY3MtPmNzLT5sb2NrLCBmbGFncyk7CiAJaWYgKGJjcy0+dXNlX2NvdW50IHx8ICF0cnlfbW9kdWxlX2dldChiY3MtPmNzLT5kcml2ZXItPm93bmVyKSkgewotCQlnaWdfZGJnKERFQlVHX0FOWSwgImNvdWxkIG5vdCBhbGxvY2F0ZSBjaGFubmVsICVkIiwKKwkJZ2lnX2RiZyhERUJVR19DSEFOTkVMLCAiY291bGQgbm90IGFsbG9jYXRlIGNoYW5uZWwgJWQiLAogCQkJYmNzLT5jaGFubmVsKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYmNzLT5jcy0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gMDsKIAl9CiAJKytiY3MtPnVzZV9jb3VudDsKIAliY3MtPmJ1c3kgPSAxOwotCWdpZ19kYmcoREVCVUdfQU5ZLCAiYWxsb2NhdGVkIGNoYW5uZWwgJWQiLCBiY3MtPmNoYW5uZWwpOworCWdpZ19kYmcoREVCVUdfQ0hBTk5FTCwgImFsbG9jYXRlZCBjaGFubmVsICVkIiwgYmNzLT5jaGFubmVsKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZiY3MtPmNzLT5sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDE7CiB9CkBAIC0yMTMsNyArMjExLDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwogCWlmICghdHJ5X21vZHVsZV9nZXQoY3MtPmRyaXZlci0+b3duZXIpKSB7Ci0JCWdpZ19kYmcoREVCVUdfQU5ZLAorCQlnaWdfZGJnKERFQlVHX0NIQU5ORUwsCiAJCQkiY291bGQgbm90IGdldCBtb2R1bGUgZm9yIGFsbG9jYXRpbmcgY2hhbm5lbCIpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gTlVMTDsKQEAgLTIyMywxMiArMjIxLDEyIEBACiAJCQkrK2NzLT5iY3NbaV0udXNlX2NvdW50OwogCQkJY3MtPmJjc1tpXS5idXN5ID0gMTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7Ci0JCQlnaWdfZGJnKERFQlVHX0FOWSwgImFsbG9jYXRlZCBjaGFubmVsICVkIiwgaSk7CisJCQlnaWdfZGJnKERFQlVHX0NIQU5ORUwsICJhbGxvY2F0ZWQgY2hhbm5lbCAlZCIsIGkpOwogCQkJcmV0dXJuIGNzLT5iY3MgKyBpOwogCQl9CiAJbW9kdWxlX3B1dChjcy0+ZHJpdmVyLT5vd25lcik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKLQlnaWdfZGJnKERFQlVHX0FOWSwgIm5vIGZyZWUgY2hhbm5lbCIpOworCWdpZ19kYmcoREVCVUdfQ0hBTk5FTCwgIm5vIGZyZWUgY2hhbm5lbCIpOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0yMzgsMTQgKzIzNiwxNSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAlpZiAoIWJjcy0+YnVzeSkgewotCQlnaWdfZGJnKERFQlVHX0FOWSwgImNvdWxkIG5vdCBmcmVlIGNoYW5uZWwgJWQiLCBiY3MtPmNoYW5uZWwpOworCQlnaWdfZGJnKERFQlVHX0NIQU5ORUwsICJjb3VsZCBub3QgZnJlZSBjaGFubmVsICVkIiwKKwkJCWJjcy0+Y2hhbm5lbCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIAkJcmV0dXJuOwogCX0KIAktLWJjcy0+dXNlX2NvdW50OwogCWJjcy0+YnVzeSA9IDA7CiAJbW9kdWxlX3B1dChiY3MtPmNzLT5kcml2ZXItPm93bmVyKTsKLQlnaWdfZGJnKERFQlVHX0FOWSwgImZyZWVkIGNoYW5uZWwgJWQiLCBiY3MtPmNoYW5uZWwpOworCWdpZ19kYmcoREVCVUdfQ0hBTk5FTCwgImZyZWVkIGNoYW5uZWwgJWQiLCBiY3MtPmNoYW5uZWwpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJjcy0+Y3MtPmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtMjU4LDE0ICsyNTcsMTUgQEAKIAlmb3IgKGkgPSAwOyBpIDwgY3MtPmNoYW5uZWxzOyArK2kpCiAJCWlmIChjcy0+YmNzW2ldLnVzZV9jb3VudCkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKLQkJCWdpZ19kYmcoREVCVUdfQU5ZLCAiY291bGQgbm90IGFsbG9jYXRlIGFsbCBjaGFubmVscyIpOworCQkJZ2lnX2RiZyhERUJVR19DSEFOTkVMLAorCQkJCSJjb3VsZCBub3QgYWxsb2NhdGUgYWxsIGNoYW5uZWxzIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCWZvciAoaSA9IDA7IGkgPCBjcy0+Y2hhbm5lbHM7ICsraSkKIAkJKytjcy0+YmNzW2ldLnVzZV9jb3VudDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCi0JZ2lnX2RiZyhERUJVR19BTlksICJhbGxvY2F0ZWQgYWxsIGNoYW5uZWxzIik7CisJZ2lnX2RiZyhERUJVR19DSEFOTkVMLCAiYWxsb2NhdGVkIGFsbCBjaGFubmVscyIpOwogCiAJcmV0dXJuIDE7CiB9CkBAIC0yNzUsNyArMjc1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCi0JZ2lnX2RiZyhERUJVR19BTlksICJ1bmJsb2NraW5nIGFsbCBjaGFubmVscyIpOworCWdpZ19kYmcoREVCVUdfQ0hBTk5FTCwgInVuYmxvY2tpbmcgYWxsIGNoYW5uZWxzIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IGNzLT5jaGFubmVsczsgKytpKQogCQktLWNzLT5iY3NbaV0udXNlX2NvdW50OwpAQCAtMjg3LDcgKzI4Nyw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAotCWdpZ19kYmcoREVCVUdfQU5ZLCAiYmxvY2tpbmcgYWxsIGNoYW5uZWxzIik7CisJZ2lnX2RiZyhERUJVR19DSEFOTkVMLCAiYmxvY2tpbmcgYWxsIGNoYW5uZWxzIik7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJZm9yIChpID0gMDsgaSA8IGNzLT5jaGFubmVsczsgKytpKQogCQkrK2NzLT5iY3NbaV0udXNlX2NvdW50OwpAQCAtMzM4LDYgKzMzOCw4IEBACiAJdW5zaWduZWQgbmV4dCwgdGFpbDsKIAlzdHJ1Y3QgZXZlbnRfdCAqZXZlbnQgPSBOVUxMOwogCisJZ2lnX2RiZyhERUJVR19FVkVOVCwgInF1ZXVlaW5nIGV2ZW50ICVkIiwgdHlwZSk7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3MtPmV2X2xvY2ssIGZsYWdzKTsKIAogCXRhaWwgPSBjcy0+ZXZfdGFpbDsKQEAgLTkzNCwxMSArOTM2LDggQEAKIAogCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZjcy0+YXRfc3RhdGUsIEVWX1NUQVJULCBOVUxMLCAwLCBOVUxMKSkgewogCQljcy0+d2FpdGluZyA9IDA7Ci0JCWRldl9lcnIoY3MtPmRldiwgIiVzOiBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZXJyb3I7CiAJfQotCi0JZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIFNUQVJUIik7CiAJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAKIAl3YWl0X2V2ZW50KGNzLT53YWl0cXVldWUsICFjcy0+d2FpdGluZyk7CkBAIC05NzMsMTIgKzk3Miw4IEBACiAKIAljcy0+d2FpdGluZyA9IDE7CiAKLQlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmY3MtPmF0X3N0YXRlLCBFVl9TSFVURE9XTiwgTlVMTCwgMCwgTlVMTCkpIHsKLQkJZGV2X2Vycihjcy0+ZGV2LCAiJXM6IG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKKwlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmY3MtPmF0X3N0YXRlLCBFVl9TSFVURE9XTiwgTlVMTCwgMCwgTlVMTCkpCiAJCWdvdG8gZXhpdDsKLQl9Ci0KLQlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgU0hVVERPV04iKTsKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCXdhaXRfZXZlbnQoY3MtPndhaXRxdWV1ZSwgIWNzLT53YWl0aW5nKTsKQEAgLTEwMDQsMTIgKzk5OSw4IEBACiAKIAljcy0+d2FpdGluZyA9IDE7CiAKLQlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmY3MtPmF0X3N0YXRlLCBFVl9TVE9QLCBOVUxMLCAwLCBOVUxMKSkgewotCQlkZXZfZXJyKGNzLT5kZXYsICIlczogb3V0IG9mIG1lbW9yeVxuIiwgX19mdW5jX18pOworCWlmICghZ2lnYXNldF9hZGRfZXZlbnQoY3MsICZjcy0+YXRfc3RhdGUsIEVWX1NUT1AsIE5VTEwsIDAsIE5VTEwpKQogCQlnb3RvIGV4aXQ7Ci0JfQotCi0JZ2lnX2RiZyhERUJVR19DTUQsICJzY2hlZHVsaW5nIFNUT1AiKTsKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGNzKTsKIAogCXdhaXRfZXZlbnQoY3MtPndhaXRxdWV1ZSwgIWNzLT53YWl0aW5nKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2V2LWxheWVyLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9ldi1sYXllci5jCmluZGV4IGRkZWIwNDUuLmM4Zjg5YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2V2LWxheWVyLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZXYtbGF5ZXIuYwpAQCAtNDI3LDcgKzQyNyw3IEBACiB7CiAJaW50IHYgPSAtMTsKIAotCWdpZ19kYmcoREVCVUdfVFJBTlNDTUQsICJzdHJpbmc6ICVzIiwgcCk7CisJZ2lnX2RiZyhERUJVR19FVkVOVCwgInN0cmluZzogJXMiLCBwKTsKIAogCXdoaWxlICgqcCA+PSAnMCcgJiYgKnAgPD0gJzknKQogCQl2ID0gKCh2IDwgMCkgPyAwIDogKHYgKiAxMCkpICsgKGludCkgKCgqcCsrKSAtICcwJyk7CkBAIC00NDQsNyArNDQ0LDcgQEAKIAlpbnQgdiA9IDA7CiAJaW50IGM7CiAKLQlnaWdfZGJnKERFQlVHX1RSQU5TQ01ELCAic3RyaW5nOiAlcyIsIHApOworCWdpZ19kYmcoREVCVUdfRVZFTlQsICJzdHJpbmc6ICVzIiwgcCk7CiAKIAlpZiAoISpwKQogCQlyZXR1cm4gLTE7CkBAIC01MTcsNyArNTE3LDYgQEAKIAkJcmV0dXJuOwogCX0KIAljcy0+cmVzcGRhdGFbbGVuXSA9IDA7Ci0JZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgInJhdyBzdHJpbmc6ICclcyciLCBjcy0+cmVzcGRhdGEpOwogCWFyZ3ZbMF0gPSBjcy0+cmVzcGRhdGE7CiAJcGFyYW1zID0gMTsKIAlpZiAoY3MtPmF0X3N0YXRlLmdldHN0cmluZykgewpAQCAtNTUyLDE0ICs1NTEsMTQgQEAKIAkJZm9yIChqID0gMTsgaiA8IHBhcmFtczsgKytqKQogCQkJYXJndltqXVstMV0gPSAwOwogCi0JCWdpZ19kYmcoREVCVUdfVFJBTlNDTUQsICJDTUQgcmVjZWl2ZWQ6ICVzIiwgYXJndlswXSk7CisJCWdpZ19kYmcoREVCVUdfRVZFTlQsICJDTUQgcmVjZWl2ZWQ6ICVzIiwgYXJndlswXSk7CiAJCWlmIChjaWQpIHsKIAkJCS0tcGFyYW1zOwotCQkJZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgIkNJRDogJXMiLCBhcmd2W3BhcmFtc10pOworCQkJZ2lnX2RiZyhERUJVR19FVkVOVCwgIkNJRDogJXMiLCBhcmd2W3BhcmFtc10pOwogCQl9Ci0JCWdpZ19kYmcoREVCVUdfVFJBTlNDTUQsICJhdmFpbGFibGUgcGFyYW1zOiAlZCIsIHBhcmFtcyAtIDEpOworCQlnaWdfZGJnKERFQlVHX0VWRU5ULCAiYXZhaWxhYmxlIHBhcmFtczogJWQiLCBwYXJhbXMgLSAxKTsKIAkJZm9yIChqID0gMTsgaiA8IHBhcmFtczsgaisrKQotCQkJZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgInBhcmFtICVkOiAlcyIsIGosIGFyZ3Zbal0pOworCQkJZ2lnX2RiZyhERUJVR19FVkVOVCwgInBhcmFtICVkOiAlcyIsIGosIGFyZ3Zbal0pOwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+ZXZfbG9jaywgZmxhZ3MpOwpAQCAtNjQyLDcgKzY0MSw3IEBACiAJCQkJCWRldl9lcnIoY3MtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwogCQkJCSsrY3VyYXJnOwogCQkJfQotCQkJZ2lnX2RiZyhERUJVR19DTUQsICJzdHJpbmc9PSVzIiwKKwkJCWdpZ19kYmcoREVCVUdfRVZFTlQsICJzdHJpbmc9PSVzIiwKIAkJCQlldmVudC0+cHRyID8gKGNoYXIgKikgZXZlbnQtPnB0ciA6ICJOVUxMIik7CiAJCQlicmVhazsKIAkJY2FzZSBSVF9aQ0FVOgpAQCAtNjY5LDcgKzY2OCw3IEBACiAJCQkJKytjdXJhcmc7CiAJCQl9IGVsc2UKIAkJCQlldmVudC0+cGFyYW1ldGVyID0gLTE7Ci0JCQlnaWdfZGJnKERFQlVHX0NNRCwgInBhcmFtZXRlcj09JWQiLCBldmVudC0+cGFyYW1ldGVyKTsKKwkJCWdpZ19kYmcoREVCVUdfRVZFTlQsICJwYXJhbWV0ZXI9PSVkIiwgZXZlbnQtPnBhcmFtZXRlcik7CiAJCQlicmVhazsKIAkJfQogCkBAIC02ODQsNyArNjgzLDcgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+ZXZfbG9jaywgZmxhZ3MpOwogCiAJaWYgKGN1cmFyZyAhPSBwYXJhbXMpCi0JCWdpZ19kYmcoREVCVUdfQU5ZLAorCQlnaWdfZGJnKERFQlVHX0VWRU5ULAogCQkJImludmFsaWQgbnVtYmVyIG9mIHByb2Nlc3NlZCBwYXJhbWV0ZXJzOiAlZC8lZCIsCiAJCQljdXJhcmcsIHBhcmFtcyk7CiB9CkBAIC03MDUsOCArNzA0LDggQEAKIAkvKiByZXZlcnQgdG8gc2VsZWN0ZWQgaWRsZSBtb2RlICovCiAJaWYgKCFjcy0+Y2lkbW9kZSkgewogCQljcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyB8PSBQQ19VTU1PREU7CisJCWdpZ19kYmcoREVCVUdfRVZFTlQsICJTY2hlZHVsaW5nIFBDX1VNTU9ERSIpOwogCQljcy0+Y29tbWFuZHNfcGVuZGluZyA9IDE7Ci0JCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19VTU1PREUiKTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3MtPmxvY2ssIGZsYWdzKTsKIApAQCAtNzg0LDE1ICs3ODMsMTUgQEAKIHN0YXRpYyB2b2lkIHNjaGVkdWxlX2luaXQoc3RydWN0IGNhcmRzdGF0ZSAqY3MsIGludCBzdGF0ZSkKIHsKIAlpZiAoY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgJiBQQ19JTklUKSB7Ci0JCWdpZ19kYmcoREVCVUdfQ01ELCAibm90IHNjaGVkdWxpbmcgUENfSU5JVCBhZ2FpbiIpOworCQlnaWdfZGJnKERFQlVHX0VWRU5ULCAibm90IHNjaGVkdWxpbmcgUENfSU5JVCBhZ2FpbiIpOwogCQlyZXR1cm47CiAJfQogCWNzLT5tc3RhdGUgPSBzdGF0ZTsKIAljcy0+bW9kZSA9IE1fVU5LTk9XTjsKIAlnaWdhc2V0X2Jsb2NrX2NoYW5uZWxzKGNzKTsKIAljcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyB8PSBQQ19JTklUOworCWdpZ19kYmcoREVCVUdfRVZFTlQsICJTY2hlZHVsaW5nIFBDX0lOSVQiKTsKIAljcy0+Y29tbWFuZHNfcGVuZGluZyA9IDE7Ci0JZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX0lOSVQiKTsKIH0KIAogLyogQWRkICJBVCIgdG8gYSBjb21tYW5kLCBhZGQgdGhlIGNpZCwgZGxlIGVuY29kZSBpdCwgc2VuZCB0aGUgcmVzdWx0IHRvIHRoZQpAQCAtOTIzLDcgKzkyMiw3IEBACiAJfQogCiAJYXRfc3RhdGUtPnBlbmRpbmdfY29tbWFuZHMgfD0gUENfQ0lEOwotCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19DSUQiKTsKKwlnaWdfZGJnKERFQlVHX0VWRU5ULCAiU2NoZWR1bGluZyBQQ19DSUQiKTsKIAljcy0+Y29tbWFuZHNfcGVuZGluZyA9IDE7CiAJcmV0dXJuOwogCkBAIC05MzMsNyArOTMyLDcgQEAKIAkJY29tbWFuZHNbaV0gPSBOVUxMOwogCX0KIAlhdF9zdGF0ZS0+cGVuZGluZ19jb21tYW5kcyB8PSBQQ19OT0NJRDsKLQlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfTk9DSUQiKTsKKwlnaWdfZGJnKERFQlVHX0VWRU5ULCAiU2NoZWR1bGluZyBQQ19OT0NJRCIpOwogCWNzLT5jb21tYW5kc19wZW5kaW5nID0gMTsKIAlyZXR1cm47CiB9CkBAIC05NTUsNyArOTU0LDcgQEAKIAkJZGV2X2VycihhdF9zdGF0ZS0+Y3MtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwogCQkvKiBlcnJvciByZXNldCAqLwogCQlhdF9zdGF0ZS0+cGVuZGluZ19jb21tYW5kcyB8PSBQQ19IVVA7Ci0JCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19IVVAiKTsKKwkJZ2lnX2RiZyhERUJVR19FVkVOVCwgIlNjaGVkdWxpbmcgUENfSFVQIik7CiAJCWNzLT5jb21tYW5kc19wZW5kaW5nID0gMTsKIAkJcmV0dXJuOwogCX0KQEAgLTk2NCw3ICs5NjMsNyBAQAogCXNucHJpbnRmKGJjcy0+Y29tbWFuZHNbQVRfSVNPXSwgOSwgIl5TSVNPPSV1XHIiLCBiY3MtPmNoYW5uZWwgKyAxKTsKIAogCWF0X3N0YXRlLT5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0FDQ0VQVDsKLQlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfQUNDRVBUIik7CisJZ2lnX2RiZyhERUJVR19FVkVOVCwgIlNjaGVkdWxpbmcgUENfQUNDRVBUIik7CiAJY3MtPmNvbW1hbmRzX3BlbmRpbmcgPSAxOwogfQogCkBAIC0xMDA5LDggKzEwMDgsOCBAQAogCWlmIChjcy0+bXN0YXRlID09IE1TX1JFQURZKSB7CiAJCWNzLT5tc3RhdGUgPSBNU19TSFVURE9XTjsKIAkJY3MtPmF0X3N0YXRlLnBlbmRpbmdfY29tbWFuZHMgfD0gUENfU0hVVERPV047CisJCWdpZ19kYmcoREVCVUdfRVZFTlQsICJTY2hlZHVsaW5nIFBDX1NIVVRET1dOIik7CiAJCWNzLT5jb21tYW5kc19wZW5kaW5nID0gMTsKLQkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX1NIVVRET1dOIik7CiAJfSBlbHNlCiAJCWZpbmlzaF9zaHV0ZG93bihjcyk7CiB9CkBAIC0xMTkxLDggKzExOTAsOCBAQAogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNzLT5sb2NrLCBmbGFncyk7CiAJCWNzLT5hdF9zdGF0ZS5wZW5kaW5nX2NvbW1hbmRzIHw9IFBDX0NJRE1PREU7CisJCWdpZ19kYmcoREVCVUdfRVZFTlQsICJTY2hlZHVsaW5nIFBDX0NJRE1PREUiKTsKIAkJY3MtPmNvbW1hbmRzX3BlbmRpbmcgPSAxOwotCQlnaWdfZGJnKERFQlVHX0NNRCwgIlNjaGVkdWxpbmcgUENfQ0lETU9ERSIpOwogCQlicmVhazsKIAljYXNlIEFDVF9GQUlMSU5JVDoKIAkJZGV2X3dhcm4oY3MtPmRldiwgIkNvdWxkIG5vdCBpbml0aWFsaXplIHRoZSBkZXZpY2UuXG4iKTsKQEAgLTE0NDMsNyArMTQ0Miw3IEBACiAJY2FzZSBBQ1RfR09UVkVSOgogCQlpZiAoY3MtPmdvdGZ3dmVyID09IDApIHsKIAkJCWNzLT5nb3Rmd3ZlciA9IDE7Ci0JCQlnaWdfZGJnKERFQlVHX0FOWSwKKwkJCWdpZ19kYmcoREVCVUdfRVZFTlQsCiAJCQkJImZpcm13YXJlIHZlcnNpb24gJTAyZC4lMDNkLiUwMmQuJTAyZCIsCiAJCQkJY3MtPmZ3dmVyWzBdLCBjcy0+Znd2ZXJbMV0sCiAJCQkJY3MtPmZ3dmVyWzJdLCBjcy0+Znd2ZXJbM10pOwpAQCAtMTQ4MSw4ICsxNDgwLDggQEAKIAkJYnJlYWs7CiAJY2FzZSBBQ1RfSFVQOgogCQlhdF9zdGF0ZS0+cGVuZGluZ19jb21tYW5kcyB8PSBQQ19IVVA7CisJCWdpZ19kYmcoREVCVUdfRVZFTlQsICJTY2hlZHVsaW5nIFBDX0hVUCIpOwogCQljcy0+Y29tbWFuZHNfcGVuZGluZyA9IDE7Ci0JCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19IVVAiKTsKIAkJYnJlYWs7CiAKIAkvKiBob3RwbHVnIGV2ZW50cyAqLwpAQCAtMTUxOSwxMCArMTUxOCwxMCBAQAogCQkJY3MtPmNpZG1vZGUgPSBldi0+cGFyYW1ldGVyOwogCQkJaWYgKGV2LT5wYXJhbWV0ZXIpIHsKIAkJCQljcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyB8PSBQQ19DSURNT0RFOwotCQkJCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19DSURNT0RFIik7CisJCQkJZ2lnX2RiZyhERUJVR19FVkVOVCwgIlNjaGVkdWxpbmcgUENfQ0lETU9ERSIpOwogCQkJfSBlbHNlIHsKIAkJCQljcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyB8PSBQQ19VTU1PREU7Ci0JCQkJZ2lnX2RiZyhERUJVR19DTUQsICJTY2hlZHVsaW5nIFBDX1VNTU9ERSIpOworCQkJCWdpZ19kYmcoREVCVUdfRVZFTlQsICJTY2hlZHVsaW5nIFBDX1VNTU9ERSIpOwogCQkJfQogCQkJY3MtPmNvbW1hbmRzX3BlbmRpbmcgPSAxOwogCQl9CkBAIC0xNTczLDYgKzE1NzIsOCBAQAogCWlmIChldi0+Y2lkID49IDApIHsKIAkJYXRfc3RhdGUgPSBhdF9zdGF0ZV9mcm9tX2NpZChjcywgZXYtPmNpZCk7CiAJCWlmICghYXRfc3RhdGUpIHsKKwkJCWdpZ19kYmcoREVCVUdfRVZFTlQsICJldmVudCAlZCBmb3IgaW52YWxpZCBjaWQgJWQiLAorCQkJCWV2LT50eXBlLCBldi0+Y2lkKTsKIAkJCWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmY3MtPmF0X3N0YXRlLCBSU1BfV1JPTkdfQ0lELAogCQkJCQkgIE5VTEwsIDAsIE5VTEwpOwogCQkJcmV0dXJuOwpAQCAtMTU4MCwxMyArMTU4MSwxMyBAQAogCX0gZWxzZSB7CiAJCWF0X3N0YXRlID0gZXYtPmF0X3N0YXRlOwogCQlpZiAoYXRfc3RhdGVfaW52YWxpZChjcywgYXRfc3RhdGUpKSB7Ci0JCQlnaWdfZGJnKERFQlVHX0FOWSwgImV2ZW50IGZvciBpbnZhbGlkIGF0X3N0YXRlICVwIiwKKwkJCWdpZ19kYmcoREVCVUdfRVZFTlQsICJldmVudCBmb3IgaW52YWxpZCBhdF9zdGF0ZSAlcCIsCiAJCQkJYXRfc3RhdGUpOwogCQkJcmV0dXJuOwogCQl9CiAJfQogCi0JZ2lnX2RiZyhERUJVR19DTUQsICJjb25uZWN0aW9uIHN0YXRlICVkLCBldmVudCAlZCIsCisJZ2lnX2RiZyhERUJVR19FVkVOVCwgImNvbm5lY3Rpb24gc3RhdGUgJWQsIGV2ZW50ICVkIiwKIAkJYXRfc3RhdGUtPkNvblN0YXRlLCBldi0+dHlwZSk7CiAKIAliY3MgPSBhdF9zdGF0ZS0+YmNzOwpAQCAtMTYwMCwxMSArMTYwMSwxMSBAQAogCQlpZiAoZXYtPnBhcmFtZXRlciAhPSBhdF9zdGF0ZS0+dGltZXJfaW5kZXgKIAkJICAgIHx8ICFhdF9zdGF0ZS0+dGltZXJfYWN0aXZlKSB7CiAJCQlldi0+dHlwZSA9IFJTUF9OT05FOyAvKiBvbGQgdGltZW91dCAqLwotCQkJZ2lnX2RiZyhERUJVR19BTlksICJvbGQgdGltZW91dCIpOworCQkJZ2lnX2RiZyhERUJVR19FVkVOVCwgIm9sZCB0aW1lb3V0Iik7CiAJCX0gZWxzZSBpZiAoIWF0X3N0YXRlLT53YWl0aW5nKQotCQkJZ2lnX2RiZyhERUJVR19BTlksICJ0aW1lb3V0IG9jY3VycmVkIik7CisJCQlnaWdfZGJnKERFQlVHX0VWRU5ULCAidGltZW91dCBvY2N1cnJlZCIpOwogCQllbHNlCi0JCQlnaWdfZGJnKERFQlVHX0FOWSwgInN0b3BwZWQgd2FpdGluZyIpOworCQkJZ2lnX2RiZyhERUJVR19FVkVOVCwgInN0b3BwZWQgd2FpdGluZyIpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcy0+bG9jaywgZmxhZ3MpOwogCkBAIC0xNzEyLDExICsxNzEzLDExIEBACiAJY3MtPmNvbW1hbmRzX3BlbmRpbmcgPSAwOwogCiAJaWYgKGNzLT5jdXJfYXRfc2VxKSB7Ci0JCWdpZ19kYmcoREVCVUdfQ01ELCAibm90IHNlYXJjaGluZyBzY2hlZHVsZWQgY29tbWFuZHM6IGJ1c3kiKTsKKwkJZ2lnX2RiZyhERUJVR19FVkVOVCwgIm5vdCBzZWFyY2hpbmcgc2NoZWR1bGVkIGNvbW1hbmRzOiBidXN5Iik7CiAJCXJldHVybjsKIAl9CiAKLQlnaWdfZGJnKERFQlVHX0NNRCwgInNlYXJjaGluZyBzY2hlZHVsZWQgY29tbWFuZHMiKTsKKwlnaWdfZGJnKERFQlVHX0VWRU5ULCAic2VhcmNoaW5nIHNjaGVkdWxlZCBjb21tYW5kcyIpOwogCiAJc2VxdWVuY2UgPSBTRVFfTk9ORTsKIApAQCAtMTg1Nyw3ICsxODU4LDcgQEAKIAkJCXN3aXRjaCAoY3MtPm1vZGUpIHsKIAkJCWNhc2UgTV9VTklNT0RFTToKIAkJCQljcy0+YXRfc3RhdGUucGVuZGluZ19jb21tYW5kcyB8PSBQQ19DSURNT0RFOwotCQkJCWdpZ19kYmcoREVCVUdfQ01ELCAiU2NoZWR1bGluZyBQQ19DSURNT0RFIik7CisJCQkJZ2lnX2RiZyhERUJVR19FVkVOVCwgIlNjaGVkdWxpbmcgUENfQ0lETU9ERSIpOwogCQkJCWNzLT5jb21tYW5kc19wZW5kaW5nID0gMTsKIAkJCQlyZXR1cm47CiAjaWZkZWYgR0lHX01BWUlOSVRPTkRJQUwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2dpZ2FzZXQuaCBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L2dpZ2FzZXQuaAppbmRleCBlOTYzYTZjLi4xODc1YWI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9naWdhc2V0LmgKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvZ2lnYXNldC5oCkBAIC0zOCw3ICszOCw3IEBACiAjZGVmaW5lIEdJR19DT01QQVQgIHswLCA0LCAwLCAwfQogCiAjZGVmaW5lIE1BWF9SRUNfUEFSQU1TIDEwCS8qIE1heC4gbnVtYmVyIG9mIHBhcmFtcyBpbiByZXNwb25zZSBzdHJpbmcgKi8KLSNkZWZpbmUgTUFYX1JFU1BfU0laRSA1MTIJLyogTWF4LiBzaXplIG9mIGEgcmVzcG9uc2Ugc3RyaW5nICovCisjZGVmaW5lIE1BWF9SRVNQX1NJWkUgNTExCS8qIE1heC4gc2l6ZSBvZiBhIHJlc3BvbnNlIHN0cmluZyAqLwogCiAjZGVmaW5lIE1BWF9FVkVOVFMgNjQJCS8qIHNpemUgb2YgZXZlbnQgcXVldWUgKi8KIApAQCAtNzgsOSArNzgsMTAgQEAKIAlERUJVR19TVFJFQU0JICA9IDB4MDAwNDAsIC8qIGFwcGxpY2F0aW9uIGRhdGEgc3RyZWFtIEkvTyBldmVudHMgKi8KIAlERUJVR19TVFJFQU1fRFVNUCA9IDB4MDAwODAsIC8qIGFwcGxpY2F0aW9uIGRhdGEgc3RyZWFtIGNvbnRlbnQgKi8KIAlERUJVR19MTERBVEEJICA9IDB4MDAxMDAsIC8qIHNlbnQvcmVjZWl2ZWQgTEwgZGF0YSAqLworCURFQlVHX0VWRU5UCSAgPSAweDAwMjAwLCAvKiBldmVudCBwcm9jZXNzaW5nICovCiAJREVCVUdfRFJJVkVSCSAgPSAweDAwNDAwLCAvKiBkcml2ZXIgc3RydWN0dXJlICovCiAJREVCVUdfSERMQwkgID0gMHgwMDgwMCwgLyogTTEweCBIRExDIHByb2Nlc3NpbmcgKi8KLQlERUJVR19XUklURQkgID0gMHgwMTAwMCwgLyogTTEwNSBkYXRhIHdyaXRlICovCisJREVCVUdfQ0hBTk5FTAkgID0gMHgwMTAwMCwgLyogY2hhbm5lbCBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiAqLwogCURFQlVHX1RSQU5TQ01ECSAgPSAweDAyMDAwLCAvKiBBVC1DT01NQU5EUytSRVNQT05TRVMgKi8KIAlERUJVR19NQ01ECSAgPSAweDA0MDAwLCAvKiBDT01NQU5EUyBUSEFUIEFSRSBTRU5UIFZFUlkgT0ZURU4gKi8KIAlERUJVR19JTklUCSAgPSAweDA4MDAwLCAvKiAoZGUpYWxsb2NhdGlvbitpbml0aWFsaXphdGlvbiBvZiBkYXRhCkBAIC00OTgsNyArNDk5LDcgQEAKIAlzcGlubG9ja190IGV2X2xvY2s7CiAKIAkvKiBjdXJyZW50IG1vZGVtIHJlc3BvbnNlICovCi0JdW5zaWduZWQgY2hhciByZXNwZGF0YVtNQVhfUkVTUF9TSVpFXTsKKwl1bnNpZ25lZCBjaGFyIHJlc3BkYXRhW01BWF9SRVNQX1NJWkUrMV07CiAJdW5zaWduZWQgY2J5dGVzOwogCiAJLyogcHJpdmF0ZSBkYXRhIG9mIGhhcmR3YXJlIGRyaXZlcnMgKi8KQEAgLTc4NSw4ICs3ODYsNiBAQAogc3RhdGljIGlubGluZSB2b2lkIGdpZ2FzZXRfYmNoYW5uZWxfZG93bihzdHJ1Y3QgYmNfc3RhdGUgKmJjcykKIHsKIAlnaWdhc2V0X2FkZF9ldmVudChiY3MtPmNzLCAmYmNzLT5hdF9zdGF0ZSwgRVZfQkNfQ0xPU0VELCBOVUxMLCAwLCBOVUxMKTsKLQotCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBCQ19DTE9TRUQiKTsKIAlnaWdhc2V0X3NjaGVkdWxlX2V2ZW50KGJjcy0+Y3MpOwogfQogCkBAIC03OTUsOCArNzk0LDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBnaWdhc2V0X2JjaGFubmVsX3VwKHN0cnVjdCBiY19zdGF0ZSAqYmNzKQogewogCWdpZ2FzZXRfYWRkX2V2ZW50KGJjcy0+Y3MsICZiY3MtPmF0X3N0YXRlLCBFVl9CQ19PUEVOLCBOVUxMLCAwLCBOVUxMKTsKLQotCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBCQ19PUEVOIik7CiAJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChiY3MtPmNzKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaTRsLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pNGwuYwppbmRleCBjMTI5ZWU0Li5mMGFjYjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pNGwuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pNGwuYwpAQCAtMjE2LDcgKzIxNiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJY2FzZSBJU0ROX0NNRF9ESUFMOgotCQlnaWdfZGJnKERFQlVHX0FOWSwKKwkJZ2lnX2RiZyhERUJVR19DTUQsCiAJCQkiSVNETl9DTURfRElBTCAocGhvbmU6ICVzLCBtc246ICVzLCBzaTE6ICVkLCBzaTI6ICVkKSIsCiAJCQljbnRybC0+cGFybS5zZXR1cC5waG9uZSwgY250cmwtPnBhcm0uc2V0dXAuZWF6bXNuLAogCQkJY250cmwtPnBhcm0uc2V0dXAuc2kxLCBjbnRybC0+cGFybS5zZXR1cC5zaTIpOwpAQCAtMzA0LDExICszMDQsMTAgQEAKIAkJCWdpZ2FzZXRfZnJlZV9jaGFubmVsKGJjcyk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCi0JCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBESUFMIik7CiAJCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCQlicmVhazsKIAljYXNlIElTRE5fQ01EX0FDQ0VQVEQ6CisJCWdpZ19kYmcoREVCVUdfQ01ELCAiSVNETl9DTURfQUNDRVBURCIpOwogCQlpZiAoY2ggPj0gY3MtPmNoYW5uZWxzKSB7CiAJCQlkZXZfZXJyKGNzLT5kZXYsCiAJCQkJIklTRE5fQ01EX0FDQ0VQVEQ6IGludmFsaWQgY2hhbm5lbCAoJWQpXG4iLCBjaCk7CkBAIC0zMTgsMTQgKzMxNywxMSBAQAogCQlpZiAoIWdpZ2FzZXRfYWRkX2V2ZW50KGNzLCAmYmNzLT5hdF9zdGF0ZSwKIAkJCQkgICAgICAgRVZfQUNDRVBULCBOVUxMLCAwLCBOVUxMKSkKIAkJCXJldHVybiAtRU5PTUVNOwotCi0JCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBBQ0NFUFQiKTsKIAkJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAKIAkJYnJlYWs7Ci0JY2FzZSBJU0ROX0NNRF9BQ0NFUFRCOgotCQlicmVhazsKIAljYXNlIElTRE5fQ01EX0hBTkdVUDoKKwkJZ2lnX2RiZyhERUJVR19DTUQsICJJU0ROX0NNRF9IQU5HVVAiKTsKIAkJaWYgKGNoID49IGNzLT5jaGFubmVscykgewogCQkJZGV2X2Vycihjcy0+ZGV2LAogCQkJCSJJU0ROX0NNRF9IQU5HVVA6IGludmFsaWQgY2hhbm5lbCAoJWQpXG4iLCBjaCk7CkBAIC0zMzUsOCArMzMxLDYgQEAKIAkJaWYgKCFnaWdhc2V0X2FkZF9ldmVudChjcywgJmJjcy0+YXRfc3RhdGUsCiAJCQkJICAgICAgIEVWX0hVUCwgTlVMTCwgMCwgTlVMTCkpCiAJCQlyZXR1cm4gLUVOT01FTTsKLQotCQlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgSFVQIik7CiAJCWdpZ2FzZXRfc2NoZWR1bGVfZXZlbnQoY3MpOwogCiAJCWJyZWFrOwpAQCAtMzc2LDYgKzM3MCw3IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBJU0ROX0NNRF9TRVRMMzogLyogU2V0IEwzIHRvIGdpdmVuIHByb3RvY29sICovCisJCWdpZ19kYmcoREVCVUdfQ01ELCAiSVNETl9DTURfU0VUTDMiKTsKIAkJaWYgKGNoID49IGNzLT5jaGFubmVscykgewogCQkJZGV2X2Vycihjcy0+ZGV2LAogCQkJCSJJU0ROX0NNRF9TRVRMMzogaW52YWxpZCBjaGFubmVsICglZClcbiIsIGNoKTsKQEAgLTM5MCw0NCArMzg1LDkgQEAKIAkJfQogCiAJCWJyZWFrOwotCWNhc2UgSVNETl9DTURfUFJPQ0VFRDoKLQkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9QUk9DRUVEIik7Ci0JCWJyZWFrOwotCWNhc2UgSVNETl9DTURfQUxFUlQ6Ci0JCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfQUxFUlQiKTsKLQkJaWYgKGNudHJsLT5hcmcgPj0gY3MtPmNoYW5uZWxzKSB7Ci0JCQlkZXZfZXJyKGNzLT5kZXYsCi0JCQkJIklTRE5fQ01EX0FMRVJUOiBpbnZhbGlkIGNoYW5uZWwgKCVkKVxuIiwKLQkJCQkoaW50KSBjbnRybC0+YXJnKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgSVNETl9DTURfUkVESVI6Ci0JCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfUkVESVIiKTsKLQkJYnJlYWs7Ci0JY2FzZSBJU0ROX0NNRF9QUk9UX0lPOgotCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX1BST1RfSU8iKTsKLQkJYnJlYWs7Ci0JY2FzZSBJU0ROX0NNRF9GQVhDTUQ6Ci0JCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfRkFYQ01EIik7Ci0JCWJyZWFrOwotCWNhc2UgSVNETl9DTURfR0VUTDI6Ci0JCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfR0VUTDIiKTsKLQkJYnJlYWs7Ci0JY2FzZSBJU0ROX0NNRF9HRVRMMzoKLQkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9HRVRMMyIpOwotCQlicmVhazsKLQljYXNlIElTRE5fQ01EX0dFVEVBWjoKLQkJZ2lnX2RiZyhERUJVR19BTlksICJJU0ROX0NNRF9HRVRFQVoiKTsKLQkJYnJlYWs7Ci0JY2FzZSBJU0ROX0NNRF9TRVRTSUw6Ci0JCWdpZ19kYmcoREVCVUdfQU5ZLCAiSVNETl9DTURfU0VUU0lMIik7Ci0JCWJyZWFrOwotCWNhc2UgSVNETl9DTURfR0VUU0lMOgotCQlnaWdfZGJnKERFQlVHX0FOWSwgIklTRE5fQ01EX0dFVFNJTCIpOwotCQlicmVhazsKKwogCWRlZmF1bHQ6Ci0JCWRldl9lcnIoY3MtPmRldiwgInVua25vd24gY29tbWFuZCAlZCBmcm9tIExMXG4iLAorCQlnaWdfZGJnKERFQlVHX0NNRCwgInVua25vd24gY29tbWFuZCAlZCBmcm9tIExMIiwKIAkJCWNudHJsLT5jb21tYW5kKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaW50ZXJmYWNlLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pbnRlcmZhY2UuYwppbmRleCBkMjI2MGIwLi5hMWJjYmMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pbnRlcmZhY2UuYwpAQCAtNDUsOCArNDUsNiBAQAogCQljcy0+d2FpdGluZyA9IDA7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQotCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBJRl9MT0NLIik7CiAJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAKIAl3YWl0X2V2ZW50KGNzLT53YWl0cXVldWUsICFjcy0+d2FpdGluZyk7CkBAIC04MSw4ICs3OSw2IEBACiAJCQljcy0+d2FpdGluZyA9IDA7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQotCi0JCWdpZ19kYmcoREVCVUdfQ01ELCAic2NoZWR1bGluZyBJRl9WRVIiKTsKIAkJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAKIAkJd2FpdF9ldmVudChjcy0+d2FpdHF1ZXVlLCAhY3MtPndhaXRpbmcpOwpAQCAtMjc0LDcgKzI3MCw3IEBACiAJCQkJCT8gLUVGQVVMVCA6IDA7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCWdpZ19kYmcoREVCVUdfQU5ZLCAiJXM6IGFyZyBub3Qgc3VwcG9ydGVkIC0gMHglMDR4IiwKKwkJCWdpZ19kYmcoREVCVUdfSUYsICIlczogYXJnIG5vdCBzdXBwb3J0ZWQgLSAweCUwNHgiLAogCQkJCV9fZnVuY19fLCBjbWQpOwogCQkJcmV0dmFsID0gLUVOT0lPQ1RMQ01EOwogCQl9CkBAIC00NTUsNyArNDUxLDcgQEAKIAllbHNlIGlmICghY3MtPm9wZW5fY291bnQpCiAJCWRldl93YXJuKGNzLT5kZXYsICIlczogZGV2aWNlIG5vdCBvcGVuZWRcbiIsIF9fZnVuY19fKTsKIAllbHNlCi0JCWdpZ19kYmcoREVCVUdfQU5ZLCAiJXM6IG5vdCBpbXBsZW1lbnRlZFxuIiwgX19mdW5jX18pOworCQlnaWdfZGJnKERFQlVHX0lGLCAiJXM6IG5vdCBpbXBsZW1lbnRlZFxuIiwgX19mdW5jX18pOwogCiAJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogfQpAQCAtNDc5LDcgKzQ3NSw3IEBACiAJZWxzZSBpZiAoIWNzLT5vcGVuX2NvdW50KQogCQlkZXZfd2Fybihjcy0+ZGV2LCAiJXM6IGRldmljZSBub3Qgb3BlbmVkXG4iLCBfX2Z1bmNfXyk7CiAJZWxzZQotCQlnaWdfZGJnKERFQlVHX0FOWSwgIiVzOiBub3QgaW1wbGVtZW50ZWRcbiIsIF9fZnVuY19fKTsKKwkJZ2lnX2RiZyhERUJVR19JRiwgIiVzOiBub3QgaW1wbGVtZW50ZWRcbiIsIF9fZnVuY19fKTsKIAogCW11dGV4X3VubG9jaygmY3MtPm11dGV4KTsKIH0KQEAgLTYzMCw3ICs2MjYsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcy0+bG9jaywgZmxhZ3MpOwogCXR0eSA9IGNzLT50dHk7CiAJaWYgKHR0eSA9PSBOVUxMKQotCQlnaWdfZGJnKERFQlVHX0FOWSwgInJlY2VpdmUgb24gY2xvc2VkIGRldmljZSIpOworCQlnaWdfZGJnKERFQlVHX0lGLCAicmVjZWl2ZSBvbiBjbG9zZWQgZGV2aWNlIik7CiAJZWxzZSB7CiAJCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgbGVuKTsKIAkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGJ1ZmZlciwgbGVuKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2lzb2NkYXRhLmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9pc29jZGF0YS5jCmluZGV4IDg1Mzk0YTYuLjE2ZmQzYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2lzb2NkYXRhLmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvaXNvY2RhdGEuYwpAQCAtOTA1LDI5ICs5MDUsNDkgQEAKIAogLyogPT0gZGF0YSBpbnB1dCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCisvKiBwcm9jZXNzIGEgYmxvY2sgb2YgcmVjZWl2ZWQgYnl0ZXMgaW4gY29tbWFuZCBtb2RlIChtc3RhdGUgIT0gTVNfTE9DS0VEKQorICogQXBwZW5kIHJlY2VpdmVkIGJ5dGVzIHRvIHRoZSBjb21tYW5kIHJlc3BvbnNlIGJ1ZmZlciBhbmQgZm9yd2FyZCB0aGVtCisgKiBsaW5lIGJ5IGxpbmUgdG8gdGhlIHJlc3BvbnNlIGhhbmRsZXIuCisgKiBOb3RlOiBSZWNlaXZlZCBsaW5lcyBtYXkgYmUgdGVybWluYXRlZCBieSBDUiwgTEYsIG9yIENSIExGLCB3aGljaCB3aWxsIGJlCisgKiByZW1vdmVkIGJlZm9yZSBwYXNzaW5nIHRoZSBsaW5lIHRvIHRoZSByZXNwb25zZSBoYW5kbGVyLgorICovCiBzdGF0aWMgdm9pZCBjbWRfbG9vcCh1bnNpZ25lZCBjaGFyICpzcmMsIGludCBudW1ieXRlcywgc3RydWN0IGluYnVmX3QgKmluYnVmKQogewogCXN0cnVjdCBjYXJkc3RhdGUgKmNzID0gaW5idWYtPmNzOwogCXVuc2lnbmVkIGNieXRlcyAgICAgID0gY3MtPmNieXRlczsKKwl1bnNpZ25lZCBjaGFyIGM7CiAKIAl3aGlsZSAobnVtYnl0ZXMtLSkgewotCQkvKiBjb3B5IG5leHQgY2hhcmFjdGVyLCBjaGVjayBmb3IgZW5kIG9mIGxpbmUgKi8KLQkJc3dpdGNoIChjcy0+cmVzcGRhdGFbY2J5dGVzXSA9ICpzcmMrKykgewotCQljYXNlICdccic6CisJCWMgPSAqc3JjKys7CisJCXN3aXRjaCAoYykgewogCQljYXNlICdcbic6Ci0JCQkvKiBlbmQgb2YgbGluZSAqLwotCQkJZ2lnX2RiZyhERUJVR19UUkFOU0NNRCwgIiVzOiBFbmQgb2YgQ29tbWFuZCAoJWQgQnl0ZXMpIiwKLQkJCQlfX2Z1bmNfXywgY2J5dGVzKTsKLQkJCWlmIChjYnl0ZXMgPj0gTUFYX1JFU1BfU0laRSAtIDEpCi0JCQkJZGV2X3dhcm4oY3MtPmRldiwgInJlc3BvbnNlIHRvbyBsYXJnZVxuIik7CisJCQlpZiAoY2J5dGVzID09IDAgJiYgY3MtPnJlc3BkYXRhWzBdID09ICdccicpIHsKKwkJCQkvKiBjb2xsYXBzZSBMRiB3aXRoIHByZWNlZGluZyBDUiAqLworCQkJCWNzLT5yZXNwZGF0YVswXSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiAtLXYtLSBmYWxsIHRocm91Z2ggLS12LS0gKi8KKwkJY2FzZSAnXHInOgorCQkJLyogZW5kIG9mIG1lc3NhZ2UgbGluZSwgcGFzcyB0byByZXNwb25zZSBoYW5kbGVyICovCisJCQlpZiAoY2J5dGVzID49IE1BWF9SRVNQX1NJWkUpIHsKKwkJCQlkZXZfd2Fybihjcy0+ZGV2LCAicmVzcG9uc2UgdG9vIGxhcmdlICglZClcbiIsCisJCQkJCSBjYnl0ZXMpOworCQkJCWNieXRlcyA9IE1BWF9SRVNQX1NJWkU7CisJCQl9CiAJCQljcy0+Y2J5dGVzID0gY2J5dGVzOworCQkJZ2lnYXNldF9kYmdfYnVmZmVyKERFQlVHX1RSQU5TQ01ELCAicmVjZWl2ZWQgcmVzcG9uc2UiLAorCQkJCQkgICBjYnl0ZXMsIGNzLT5yZXNwZGF0YSk7CiAJCQlnaWdhc2V0X2hhbmRsZV9tb2RlbV9yZXNwb25zZShjcyk7CiAJCQljYnl0ZXMgPSAwOworCisJCQkvKiBzdG9yZSBFT0wgYnl0ZSBmb3IgQ1JMRiBjb2xsYXBzaW5nICovCisJCQljcy0+cmVzcGRhdGFbMF0gPSBjOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQkvKiBhZHZhbmNlIGluIGxpbmUgYnVmZmVyLCBjaGVja2luZyBmb3Igb3ZlcmZsb3cgKi8KLQkJCWlmIChjYnl0ZXMgPCBNQVhfUkVTUF9TSVpFIC0gMSkKLQkJCQljYnl0ZXMrKzsKKwkJCS8qIGFwcGVuZCB0byBsaW5lIGJ1ZmZlciBpZiBwb3NzaWJsZSAqLworCQkJaWYgKGNieXRlcyA8IE1BWF9SRVNQX1NJWkUpCisJCQkJY3MtPnJlc3BkYXRhW2NieXRlc10gPSBjOworCQkJY2J5dGVzKys7CiAJCX0KIAl9CiAKQEAgLTk1OCw4ICs5NzgsNiBAQAogCQkJCQkgICBudW1ieXRlcywgc3JjKTsKIAkJCWdpZ2FzZXRfaWZfcmVjZWl2ZShpbmJ1Zi0+Y3MsIHNyYywgbnVtYnl0ZXMpOwogCQl9IGVsc2UgewotCQkJZ2lnYXNldF9kYmdfYnVmZmVyKERFQlVHX0NNRCwgInJlY2VpdmVkIHJlc3BvbnNlIiwKLQkJCQkJICAgbnVtYnl0ZXMsIHNyYyk7CiAJCQljbWRfbG9vcChzcmMsIG51bWJ5dGVzLCBpbmJ1Zik7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2dpZ2FzZXQvcHJvYy5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvcHJvYy5jCmluZGV4IDc1OGEwMGMuLmI2OWY3M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L3Byb2MuYworKysgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9wcm9jLmMKQEAgLTQ4LDggKzQ4LDYgQEAKIAkJbXV0ZXhfdW5sb2NrKCZjcy0+bXV0ZXgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0KLQlnaWdfZGJnKERFQlVHX0NNRCwgInNjaGVkdWxpbmcgUFJPQ19DSURNT0RFIik7CiAJZ2lnYXNldF9zY2hlZHVsZV9ldmVudChjcyk7CiAKIAl3YWl0X2V2ZW50KGNzLT53YWl0cXVldWUsICFjcy0+d2FpdGluZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvdXNiLWdpZ2FzZXQuYwppbmRleCAzYWIxZGFlLi45NDMwYTJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vZ2lnYXNldC91c2ItZ2lnYXNldC5jCisrKyBiL2RyaXZlcnMvaXNkbi9naWdhc2V0L3VzYi1naWdhc2V0LmMKQEAgLTYyOCw3ICs2MjgsNyBAQAogCXN0cnVjdCB1c2JfY2FyZHN0YXRlICp1Y3MgPSBjcy0+aHcudXNiOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlnaWdfZGJnKERFQlVHX1dSSVRFLCAibGVuOiAlZC4uLiIsIGJjcy0+dHhfc2tiLT5sZW4pOworCWdpZ19kYmcoREVCVUdfT1VUUFVULCAibGVuOiAlZC4uLiIsIGJjcy0+dHhfc2tiLT5sZW4pOwogCiAJaWYgKCFiY3MtPnR4X3NrYi0+bGVuKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KGJjcy0+dHhfc2tiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYXZtY2FyZC5oIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9hdm1jYXJkLmgKaW5kZXggZDk2NGYwNy4uYTcwZTg4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9hdm1jYXJkLmgKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9hdm1jYXJkLmgKQEAgLTU1Niw4ICs1NTYsNyBAQAogdm9pZCBiMV9wYXJzZV92ZXJzaW9uKGF2bWN0cmxfaW5mbyAqY2FyZCk7CiBpcnFyZXR1cm5fdCBiMV9pbnRlcnJ1cHQoaW50IGludGVycnVwdCwgdm9pZCAqZGV2cHRyKTsKIAotaW50IGIxY3RsX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLSAgICAgICAgCQlpbnQgY291bnQsIGludCAqZW9mLCBzdHJ1Y3QgY2FwaV9jdHIgKmN0cmwpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYjFjdGxfcHJvY19mb3BzOwogCiBhdm1jYXJkX2RtYWluZm8gKmF2bWNhcmRfZG1hX2FsbG9jKGNoYXIgKm5hbWUsIHN0cnVjdCBwY2lfZGV2ICosCiAJCQkJICAgbG9uZyByc2l6ZSwgbG9uZyBzc2l6ZSk7CkBAIC01NzcsNyArNTc2LDYgQEAKIAkJCQljYXBpX3JlZ2lzdGVyX3BhcmFtcyAqcnApOwogdm9pZCBiMWRtYV9yZWxlYXNlX2FwcGwoc3RydWN0IGNhcGlfY3RyICpjdHJsLCB1MTYgYXBwbCk7CiB1MTYgIGIxZG1hX3NlbmRfbWVzc2FnZShzdHJ1Y3QgY2FwaV9jdHIgKmN0cmwsIHN0cnVjdCBza19idWZmICpza2IpOwotaW50IGIxZG1hY3RsX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLSAgICAgICAgCQlpbnQgY291bnQsIGludCAqZW9mLCBzdHJ1Y3QgY2FwaV9jdHIgKmN0cmwpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYjFkbWFjdGxfcHJvY19mb3BzOwogCiAjZW5kaWYgLyogX0FWTUNBUkRfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjEuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjEuYwppbmRleCBhN2MwMDgzLi5jMzhmYTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMS5jCkBAIC0xMiw2ICsxMiw4IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgpAQCAtNjM0LDE4ICs2MzYsMTcgQEAKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotaW50IGIxY3RsX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLSAgICAgICAgCQlpbnQgY291bnQsIGludCAqZW9mLCBzdHJ1Y3QgY2FwaV9jdHIgKmN0cmwpCitzdGF0aWMgaW50IGIxY3RsX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CisJc3RydWN0IGNhcGlfY3RyICpjdHJsID0gbS0+cHJpdmF0ZTsKIAlhdm1jdHJsX2luZm8gKmNpbmZvID0gKGF2bWN0cmxfaW5mbyAqKShjdHJsLT5kcml2ZXJkYXRhKTsKIAlhdm1jYXJkICpjYXJkID0gY2luZm8tPmNhcmQ7CiAJdTggZmxhZzsKLQlpbnQgbGVuID0gMDsKIAljaGFyICpzOwogCi0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgIm5hbWUiLCBjYXJkLT5uYW1lKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzIDB4JXhcbiIsICJpbyIsIGNhcmQtPnBvcnQpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJWRcbiIsICJpcnEiLCBjYXJkLT5pcnEpOworCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAibmFtZSIsIGNhcmQtPm5hbWUpOworCXNlcV9wcmludGYobSwgIiUtMTZzIDB4JXhcbiIsICJpbyIsIGNhcmQtPnBvcnQpOworCXNlcV9wcmludGYobSwgIiUtMTZzICVkXG4iLCAiaXJxIiwgY2FyZC0+aXJxKTsKIAlzd2l0Y2ggKGNhcmQtPmNhcmR0eXBlKSB7CiAJY2FzZSBhdm1fYjFpc2E6IHMgPSAiQjEgSVNBIjsgYnJlYWs7CiAJY2FzZSBhdm1fYjFwY2k6IHMgPSAiQjEgUENJIjsgYnJlYWs7CkBAIC02NTgsMjAgKzY1OSwyMCBAQAogCWNhc2UgYXZtX2MyOiBzID0gIkMyIjsgYnJlYWs7CiAJZGVmYXVsdDogcyA9ICI/Pz8iOyBicmVhazsKIAl9Ci0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgInR5cGUiLCBzKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlc1xuIiwgInR5cGUiLCBzKTsKIAlpZiAoY2FyZC0+Y2FyZHR5cGUgPT0gYXZtX3QxaXNhKQotCSAgIGxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJWRcbiIsICJjYXJkbnIiLCBjYXJkLT5jYXJkbnIpOworCQlzZXFfcHJpbnRmKG0sICIlLTE2cyAlZFxuIiwgImNhcmRuciIsIGNhcmQtPmNhcmRucik7CiAJaWYgKChzID0gY2luZm8tPnZlcnNpb25bVkVSX0RSSVZFUl0pICE9IE5VTEwpCi0JICAgbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgInZlcl9kcml2ZXIiLCBzKTsKKwkJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJ2ZXJfZHJpdmVyIiwgcyk7CiAJaWYgKChzID0gY2luZm8tPnZlcnNpb25bVkVSX0NBUkRUWVBFXSkgIT0gTlVMTCkKLQkgICBsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAidmVyX2NhcmR0eXBlIiwgcyk7CisJCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAidmVyX2NhcmR0eXBlIiwgcyk7CiAJaWYgKChzID0gY2luZm8tPnZlcnNpb25bVkVSX1NFUklBTF0pICE9IE5VTEwpCi0JICAgbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgInZlcl9zZXJpYWwiLCBzKTsKKwkJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJ2ZXJfc2VyaWFsIiwgcyk7CiAKIAlpZiAoY2FyZC0+Y2FyZHR5cGUgIT0gYXZtX20xKSB7CiAgICAgICAgIAlmbGFnID0gKCh1OCAqKShjdHJsLT5wcm9maWxlLm1hbnUpKVszXTsKICAgICAgICAgCWlmIChmbGFnKQotCQkJbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyVzJXMlcyVzJXMlcyVzXG4iLAorCQkJc2VxX3ByaW50ZihtLCAiJS0xNnMlcyVzJXMlcyVzJXMlc1xuIiwKIAkJCSJwcm90b2NvbCIsCiAJCQkoZmxhZyAmIDB4MDEpID8gIiBEU1MxIiA6ICIiLAogCQkJKGZsYWcgJiAweDAyKSA/ICIgQ1QxIiA6ICIiLApAQCAtNjg1LDcgKzY4Niw3IEBACiAJaWYgKGNhcmQtPmNhcmR0eXBlICE9IGF2bV9tMSkgewogICAgICAgICAJZmxhZyA9ICgodTggKikoY3RybC0+cHJvZmlsZS5tYW51KSlbNV07CiAJCWlmIChmbGFnKQotCQkJbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyVzJXMlcyVzXG4iLAorCQkJc2VxX3ByaW50ZihtLCAiJS0xNnMlcyVzJXMlc1xuIiwKIAkJCSJsaW5ldHlwZSIsCiAJCQkoZmxhZyAmIDB4MDEpID8gIiBwb2ludCB0byBwb2ludCIgOiAiIiwKIAkJCShmbGFnICYgMHgwMikgPyAiIHBvaW50IHRvIG11bHRpcG9pbnQiIDogIiIsCkBAIC02OTMsMTYgKzY5NCwyNSBAQAogCQkJKGZsYWcgJiAweDA0KSA/ICIgbGVhc2VkIGxpbmUgd2l0aCBELWNoYW5uZWwiIDogIiIKIAkJCSk7CiAJfQotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXNcbiIsICJjYXJkbmFtZSIsIGNpbmZvLT5jYXJkbmFtZSk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJjYXJkbmFtZSIsIGNpbmZvLT5jYXJkbmFtZSk7CiAKLQlpZiAob2ZmK2NvdW50ID49IGxlbikKLQkgICAqZW9mID0gMTsKLQlpZiAobGVuIDwgb2ZmKQotICAgICAgICAgICByZXR1cm4gMDsKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCXJldHVybiAoKGNvdW50IDwgbGVuLW9mZikgPyBjb3VudCA6IGxlbi1vZmYpOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGIxY3RsX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgYjFjdGxfcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiMWN0bF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGIxY3RsX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKK0VYUE9SVF9TWU1CT0woYjFjdGxfcHJvY19mb3BzKTsKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiAjaWZkZWYgQ09ORklHX1BDSQpAQCAtNzgxLDggKzc5MSw2IEBACiBFWFBPUlRfU1lNQk9MKGIxX3BhcnNlX3ZlcnNpb24pOwogRVhQT1JUX1NZTUJPTChiMV9pbnRlcnJ1cHQpOwogCi1FWFBPUlRfU1lNQk9MKGIxY3RsX3JlYWRfcHJvYyk7Ci0KIHN0YXRpYyBpbnQgX19pbml0IGIxX2luaXQodm9pZCkKIHsKIAljaGFyICpwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMWRtYS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMWRtYS5jCmluZGV4IDBlODRhYWEuLjEyNDU1MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFkbWEuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxZG1hLmMKQEAgLTExLDYgKzExLDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KQEAgLTg1NSwyMSArODU3LDIwIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotaW50IGIxZG1hY3RsX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLSAgICAgICAgCQlpbnQgY291bnQsIGludCAqZW9mLCBzdHJ1Y3QgY2FwaV9jdHIgKmN0cmwpCitzdGF0aWMgaW50IGIxZG1hY3RsX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CisJc3RydWN0IGNhcGlfY3RyICpjdHJsID0gbS0+cHJpdmF0ZTsKIAlhdm1jdHJsX2luZm8gKmNpbmZvID0gKGF2bWN0cmxfaW5mbyAqKShjdHJsLT5kcml2ZXJkYXRhKTsKIAlhdm1jYXJkICpjYXJkID0gY2luZm8tPmNhcmQ7CiAJdTggZmxhZzsKLQlpbnQgbGVuID0gMDsKIAljaGFyICpzOwogCXUzMiB0eG9mZiwgdHhsZW4sIHJ4b2ZmLCByeGxlbiwgY3NyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAibmFtZSIsIGNhcmQtPm5hbWUpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgMHgleFxuIiwgImlvIiwgY2FyZC0+cG9ydCk7Ci0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlZFxuIiwgImlycSIsIGNhcmQtPmlycSk7Ci0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAweCVseFxuIiwgIm1lbWJhc2UiLCBjYXJkLT5tZW1iYXNlKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlc1xuIiwgIm5hbWUiLCBjYXJkLT5uYW1lKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAweCV4XG4iLCAiaW8iLCBjYXJkLT5wb3J0KTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlZFxuIiwgImlycSIsIGNhcmQtPmlycSk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgMHglbHhcbiIsICJtZW1iYXNlIiwgY2FyZC0+bWVtYmFzZSk7CiAJc3dpdGNoIChjYXJkLT5jYXJkdHlwZSkgewogCWNhc2UgYXZtX2IxaXNhOiBzID0gIkIxIElTQSI7IGJyZWFrOwogCWNhc2UgYXZtX2IxcGNpOiBzID0gIkIxIFBDSSI7IGJyZWFrOwpAQCAtODgyLDE4ICs4ODMsMTggQEAKIAljYXNlIGF2bV9jMjogcyA9ICJDMiI7IGJyZWFrOwogCWRlZmF1bHQ6IHMgPSAiPz8/IjsgYnJlYWs7CiAJfQotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXNcbiIsICJ0eXBlIiwgcyk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJ0eXBlIiwgcyk7CiAJaWYgKChzID0gY2luZm8tPnZlcnNpb25bVkVSX0RSSVZFUl0pICE9IE5VTEwpCi0JICAgbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgInZlcl9kcml2ZXIiLCBzKTsKKwkJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJ2ZXJfZHJpdmVyIiwgcyk7CiAJaWYgKChzID0gY2luZm8tPnZlcnNpb25bVkVSX0NBUkRUWVBFXSkgIT0gTlVMTCkKLQkgICBsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAidmVyX2NhcmR0eXBlIiwgcyk7CisJCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAidmVyX2NhcmR0eXBlIiwgcyk7CiAJaWYgKChzID0gY2luZm8tPnZlcnNpb25bVkVSX1NFUklBTF0pICE9IE5VTEwpCi0JICAgbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgInZlcl9zZXJpYWwiLCBzKTsKKwkJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJ2ZXJfc2VyaWFsIiwgcyk7CiAKIAlpZiAoY2FyZC0+Y2FyZHR5cGUgIT0gYXZtX20xKSB7CiAgICAgICAgIAlmbGFnID0gKCh1OCAqKShjdHJsLT5wcm9maWxlLm1hbnUpKVszXTsKICAgICAgICAgCWlmIChmbGFnKQotCQkJbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyVzJXMlcyVzJXMlcyVzXG4iLAorCQkJc2VxX3ByaW50ZihtLCAiJS0xNnMlcyVzJXMlcyVzJXMlc1xuIiwKIAkJCSJwcm90b2NvbCIsCiAJCQkoZmxhZyAmIDB4MDEpID8gIiBEU1MxIiA6ICIiLAogCQkJKGZsYWcgJiAweDAyKSA/ICIgQ1QxIiA6ICIiLApAQCAtOTA3LDcgKzkwOCw3IEBACiAJaWYgKGNhcmQtPmNhcmR0eXBlICE9IGF2bV9tMSkgewogICAgICAgICAJZmxhZyA9ICgodTggKikoY3RybC0+cHJvZmlsZS5tYW51KSlbNV07CiAJCWlmIChmbGFnKQotCQkJbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyVzJXMlcyVzXG4iLAorCQkJc2VxX3ByaW50ZihtLCAiJS0xNnMlcyVzJXMlc1xuIiwKIAkJCSJsaW5ldHlwZSIsCiAJCQkoZmxhZyAmIDB4MDEpID8gIiBwb2ludCB0byBwb2ludCIgOiAiIiwKIAkJCShmbGFnICYgMHgwMikgPyAiIHBvaW50IHRvIG11bHRpcG9pbnQiIDogIiIsCkBAIC05MTUsNyArOTE2LDcgQEAKIAkJCShmbGFnICYgMHgwNCkgPyAiIGxlYXNlZCBsaW5lIHdpdGggRC1jaGFubmVsIiA6ICIiCiAJCQkpOwogCX0KLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAiY2FyZG5hbWUiLCBjaW5mby0+Y2FyZG5hbWUpOworCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAiY2FyZG5hbWUiLCBjaW5mby0+Y2FyZG5hbWUpOwogCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+bG9jaywgZmxhZ3MpOwpAQCAtOTMwLDI3ICs5MzEsMzAgQEAKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNhcmQtPmxvY2ssIGZsYWdzKTsKIAotICAgICAgICBsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzIDB4JWx4XG4iLAotCQkJCSJjc3IgKGNhY2hlZCkiLCAodW5zaWduZWQgbG9uZyljYXJkLT5jc3IpOwotICAgICAgICBsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzIDB4JWx4XG4iLAotCQkJCSJjc3IiLCAodW5zaWduZWQgbG9uZyljc3IpOwotICAgICAgICBsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVsdVxuIiwKLQkJCQkidHhvZmYiLCAodW5zaWduZWQgbG9uZyl0eG9mZik7Ci0gICAgICAgIGxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJWx1XG4iLAotCQkJCSJ0eGxlbiIsICh1bnNpZ25lZCBsb25nKXR4bGVuKTsKLSAgICAgICAgbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlbHVcbiIsCi0JCQkJInJ4b2ZmIiwgKHVuc2lnbmVkIGxvbmcpcnhvZmYpOwotICAgICAgICBsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVsdVxuIiwKLQkJCQkicnhsZW4iLCAodW5zaWduZWQgbG9uZylyeGxlbik7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgMHglbHhcbiIsICJjc3IgKGNhY2hlZCkiLCAodW5zaWduZWQgbG9uZyljYXJkLT5jc3IpOworCXNlcV9wcmludGYobSwgIiUtMTZzIDB4JWx4XG4iLCAiY3NyIiwgKHVuc2lnbmVkIGxvbmcpY3NyKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlbHVcbiIsICJ0eG9mZiIsICh1bnNpZ25lZCBsb25nKXR4b2ZmKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlbHVcbiIsICJ0eGxlbiIsICh1bnNpZ25lZCBsb25nKXR4bGVuKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlbHVcbiIsICJyeG9mZiIsICh1bnNpZ25lZCBsb25nKXJ4b2ZmKTsKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlbHVcbiIsICJyeGxlbiIsICh1bnNpZ25lZCBsb25nKXJ4bGVuKTsKIAotCWlmIChvZmYrY291bnQgPj0gbGVuKQotCSAgICplb2YgPSAxOwotCWlmIChsZW4gPCBvZmYpCi0gICAgICAgICAgIHJldHVybiAwOwotCSpzdGFydCA9IHBhZ2UgKyBvZmY7Ci0JcmV0dXJuICgoY291bnQgPCBsZW4tb2ZmKSA/IGNvdW50IDogbGVuLW9mZik7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYjFkbWFjdGxfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBiMWRtYWN0bF9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGIxZG1hY3RsX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gYjFkbWFjdGxfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworRVhQT1JUX1NZTUJPTChiMWRtYWN0bF9wcm9jX2ZvcHMpOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIEVYUE9SVF9TWU1CT0woYjFkbWFfcmVzZXQpOwpAQCAtOTYzLDcgKzk2Nyw2IEBACiBFWFBPUlRfU1lNQk9MKGIxZG1hX3JlZ2lzdGVyX2FwcGwpOwogRVhQT1JUX1NZTUJPTChiMWRtYV9yZWxlYXNlX2FwcGwpOwogRVhQT1JUX1NZTUJPTChiMWRtYV9zZW5kX21lc3NhZ2UpOwotRVhQT1JUX1NZTUJPTChiMWRtYWN0bF9yZWFkX3Byb2MpOwogCiBzdGF0aWMgaW50IF9faW5pdCBiMWRtYV9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxaXNhLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxaXNhLmMKaW5kZXggNjQ2MWEzMi4uZmY1MzkwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMWlzYS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFpc2EuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJY2luZm8tPmNhcGlfY3RybC5sb2FkX2Zpcm13YXJlID0gYjFfbG9hZF9maXJtd2FyZTsKIAljaW5mby0+Y2FwaV9jdHJsLnJlc2V0X2N0ciAgICAgPSBiMV9yZXNldF9jdHI7CiAJY2luZm8tPmNhcGlfY3RybC5wcm9jaW5mbyAgICAgID0gYjFpc2FfcHJvY2luZm87Ci0JY2luZm8tPmNhcGlfY3RybC5jdHJfcmVhZF9wcm9jID0gYjFjdGxfcmVhZF9wcm9jOworCWNpbmZvLT5jYXBpX2N0cmwucHJvY19mb3BzID0gJmIxY3RsX3Byb2NfZm9wczsKIAlzdHJjcHkoY2luZm8tPmNhcGlfY3RybC5uYW1lLCBjYXJkLT5uYW1lKTsKIAogCXJldHZhbCA9IGF0dGFjaF9jYXBpX2N0cigmY2luZm8tPmNhcGlfY3RybCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxcGNpLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxcGNpLmMKaW5kZXggNWIzMTRhMi4uYzk3ZTQzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMXBjaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFwY2kuYwpAQCAtMTEyLDcgKzExMiw3IEBACiAJY2luZm8tPmNhcGlfY3RybC5sb2FkX2Zpcm13YXJlID0gYjFfbG9hZF9maXJtd2FyZTsKIAljaW5mby0+Y2FwaV9jdHJsLnJlc2V0X2N0ciAgICAgPSBiMV9yZXNldF9jdHI7CiAJY2luZm8tPmNhcGlfY3RybC5wcm9jaW5mbyAgICAgID0gYjFwY2lfcHJvY2luZm87Ci0JY2luZm8tPmNhcGlfY3RybC5jdHJfcmVhZF9wcm9jID0gYjFjdGxfcmVhZF9wcm9jOworCWNpbmZvLT5jYXBpX2N0cmwucHJvY19mb3BzID0gJmIxY3RsX3Byb2NfZm9wczsKIAlzdHJjcHkoY2luZm8tPmNhcGlfY3RybC5uYW1lLCBjYXJkLT5uYW1lKTsKIAljaW5mby0+Y2FwaV9jdHJsLm93bmVyICAgICAgICAgPSBUSElTX01PRFVMRTsKIApAQCAtMjUxLDcgKzI1MSw3IEBACiAJY2luZm8tPmNhcGlfY3RybC5sb2FkX2Zpcm13YXJlID0gYjFkbWFfbG9hZF9maXJtd2FyZTsKIAljaW5mby0+Y2FwaV9jdHJsLnJlc2V0X2N0ciAgICAgPSBiMWRtYV9yZXNldF9jdHI7CiAJY2luZm8tPmNhcGlfY3RybC5wcm9jaW5mbyAgICAgID0gYjFwY2l2NF9wcm9jaW5mbzsKLQljaW5mby0+Y2FwaV9jdHJsLmN0cl9yZWFkX3Byb2MgPSBiMWRtYWN0bF9yZWFkX3Byb2M7CisJY2luZm8tPmNhcGlfY3RybC5wcm9jX2ZvcHMgPSAmYjFkbWFjdGxfcHJvY19mb3BzOwogCXN0cmNweShjaW5mby0+Y2FwaV9jdHJsLm5hbWUsIGNhcmQtPm5hbWUpOwogCiAJcmV0dmFsID0gYXR0YWNoX2NhcGlfY3RyKCZjaW5mby0+Y2FwaV9jdHJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFwY21jaWEuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYjFwY21jaWEuYwppbmRleCA3NzQwNDAzLi5kNjM5MWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2IxcGNtY2lhLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9iMXBjbWNpYS5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAljaW5mby0+Y2FwaV9jdHJsLmxvYWRfZmlybXdhcmUgPSBiMV9sb2FkX2Zpcm13YXJlOwogCWNpbmZvLT5jYXBpX2N0cmwucmVzZXRfY3RyICAgICA9IGIxX3Jlc2V0X2N0cjsKIAljaW5mby0+Y2FwaV9jdHJsLnByb2NpbmZvICAgICAgPSBiMXBjbWNpYV9wcm9jaW5mbzsKLQljaW5mby0+Y2FwaV9jdHJsLmN0cl9yZWFkX3Byb2MgPSBiMWN0bF9yZWFkX3Byb2M7CisJY2luZm8tPmNhcGlfY3RybC5wcm9jX2ZvcHMgPSAmYjFjdGxfcHJvY19mb3BzOwogCXN0cmNweShjaW5mby0+Y2FwaV9jdHJsLm5hbWUsIGNhcmQtPm5hbWUpOwogCiAJcmV0dmFsID0gYXR0YWNoX2NhcGlfY3RyKCZjaW5mby0+Y2FwaV9jdHJsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYzQuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vYzQuYwppbmRleCA2ODMzMzAxLi5kZTZlNmIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL2M0LmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS9jNC5jCkBAIC0xMSw2ICsxMSw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC0xMDYyLDE5ICsxMDY0LDE4IEBACiAJcmV0dXJuIGNpbmZvLT5pbmZvYnVmOwogfQogCi1zdGF0aWMgaW50IGM0X3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKLSAgICAgICAgCQlpbnQgY291bnQsIGludCAqZW9mLCBzdHJ1Y3QgY2FwaV9jdHIgKmN0cmwpCitzdGF0aWMgaW50IGM0X3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CisJc3RydWN0IGNhcGlfY3RyICpjdHJsID0gbS0+cHJpdmF0ZTsKIAlhdm1jdHJsX2luZm8gKmNpbmZvID0gKGF2bWN0cmxfaW5mbyAqKShjdHJsLT5kcml2ZXJkYXRhKTsKIAlhdm1jYXJkICpjYXJkID0gY2luZm8tPmNhcmQ7CiAJdTggZmxhZzsKLQlpbnQgbGVuID0gMDsKIAljaGFyICpzOwogCi0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgIm5hbWUiLCBjYXJkLT5uYW1lKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzIDB4JXhcbiIsICJpbyIsIGNhcmQtPnBvcnQpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJWRcbiIsICJpcnEiLCBjYXJkLT5pcnEpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgMHglbHhcbiIsICJtZW1iYXNlIiwgY2FyZC0+bWVtYmFzZSk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJuYW1lIiwgY2FyZC0+bmFtZSk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgMHgleFxuIiwgImlvIiwgY2FyZC0+cG9ydCk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJWRcbiIsICJpcnEiLCBjYXJkLT5pcnEpOworCXNlcV9wcmludGYobSwgIiUtMTZzIDB4JWx4XG4iLCAibWVtYmFzZSIsIGNhcmQtPm1lbWJhc2UpOwogCXN3aXRjaCAoY2FyZC0+Y2FyZHR5cGUpIHsKIAljYXNlIGF2bV9iMWlzYTogcyA9ICJCMSBJU0EiOyBicmVhazsKIAljYXNlIGF2bV9iMXBjaTogcyA9ICJCMSBQQ0kiOyBicmVhazsKQEAgLTEwODcsMTggKzEwODgsMTggQEAKIAljYXNlIGF2bV9jMjogcyA9ICJDMiI7IGJyZWFrOwogCWRlZmF1bHQ6IHMgPSAiPz8/IjsgYnJlYWs7CiAJfQotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXNcbiIsICJ0eXBlIiwgcyk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJ0eXBlIiwgcyk7CiAJaWYgKChzID0gY2luZm8tPnZlcnNpb25bVkVSX0RSSVZFUl0pICE9IE5VTEwpCi0JICAgbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgInZlcl9kcml2ZXIiLCBzKTsKKwkJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJ2ZXJfZHJpdmVyIiwgcyk7CiAJaWYgKChzID0gY2luZm8tPnZlcnNpb25bVkVSX0NBUkRUWVBFXSkgIT0gTlVMTCkKLQkgICBsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAidmVyX2NhcmR0eXBlIiwgcyk7CisJCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAidmVyX2NhcmR0eXBlIiwgcyk7CiAJaWYgKChzID0gY2luZm8tPnZlcnNpb25bVkVSX1NFUklBTF0pICE9IE5VTEwpCi0JICAgbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlc1xuIiwgInZlcl9zZXJpYWwiLCBzKTsKKwkJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJ2ZXJfc2VyaWFsIiwgcyk7CiAKIAlpZiAoY2FyZC0+Y2FyZHR5cGUgIT0gYXZtX20xKSB7CiAgICAgICAgIAlmbGFnID0gKCh1OCAqKShjdHJsLT5wcm9maWxlLm1hbnUpKVszXTsKICAgICAgICAgCWlmIChmbGFnKQotCQkJbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyVzJXMlcyVzJXMlcyVzXG4iLAorCQkJc2VxX3ByaW50ZihtLCAiJS0xNnMlcyVzJXMlcyVzJXMlc1xuIiwKIAkJCSJwcm90b2NvbCIsCiAJCQkoZmxhZyAmIDB4MDEpID8gIiBEU1MxIiA6ICIiLAogCQkJKGZsYWcgJiAweDAyKSA/ICIgQ1QxIiA6ICIiLApAQCAtMTExMiw3ICsxMTEzLDcgQEAKIAlpZiAoY2FyZC0+Y2FyZHR5cGUgIT0gYXZtX20xKSB7CiAgICAgICAgIAlmbGFnID0gKCh1OCAqKShjdHJsLT5wcm9maWxlLm1hbnUpKVs1XTsKIAkJaWYgKGZsYWcpCi0JCQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzJXMlcyVzJXNcbiIsCisJCQlzZXFfcHJpbnRmKG0sICIlLTE2cyVzJXMlcyVzXG4iLAogCQkJImxpbmV0eXBlIiwKIAkJCShmbGFnICYgMHgwMSkgPyAiIHBvaW50IHRvIHBvaW50IiA6ICIiLAogCQkJKGZsYWcgJiAweDAyKSA/ICIgcG9pbnQgdG8gbXVsdGlwb2ludCIgOiAiIiwKQEAgLTExMjAsMTYgKzExMjEsMjQgQEAKIAkJCShmbGFnICYgMHgwNCkgPyAiIGxlYXNlZCBsaW5lIHdpdGggRC1jaGFubmVsIiA6ICIiCiAJCQkpOwogCX0KLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAiY2FyZG5hbWUiLCBjaW5mby0+Y2FyZG5hbWUpOworCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAiY2FyZG5hbWUiLCBjaW5mby0+Y2FyZG5hbWUpOwogCi0JaWYgKG9mZitjb3VudCA+PSBsZW4pCi0JICAgKmVvZiA9IDE7Ci0JaWYgKGxlbiA8IG9mZikKLSAgICAgICAgICAgcmV0dXJuIDA7Ci0JKnN0YXJ0ID0gcGFnZSArIG9mZjsKLQlyZXR1cm4gKChjb3VudCA8IGxlbi1vZmYpID8gY291bnQgOiBsZW4tb2ZmKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjNF9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGM0X3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGM0X3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gYzRfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgYzRfYWRkX2NhcmQoc3RydWN0IGNhcGljYXJkcGFyYW1zICpwLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LApAQCAtMTIwMSw3ICsxMjEwLDcgQEAKIAkJY2luZm8tPmNhcGlfY3RybC5sb2FkX2Zpcm13YXJlID0gYzRfbG9hZF9maXJtd2FyZTsKIAkJY2luZm8tPmNhcGlfY3RybC5yZXNldF9jdHIgICAgID0gYzRfcmVzZXRfY3RyOwogCQljaW5mby0+Y2FwaV9jdHJsLnByb2NpbmZvICAgICAgPSBjNF9wcm9jaW5mbzsKLQkJY2luZm8tPmNhcGlfY3RybC5jdHJfcmVhZF9wcm9jID0gYzRfcmVhZF9wcm9jOworCQljaW5mby0+Y2FwaV9jdHJsLnByb2NfZm9wcyA9ICZjNF9wcm9jX2ZvcHM7CiAJCXN0cmNweShjaW5mby0+Y2FwaV9jdHJsLm5hbWUsIGNhcmQtPm5hbWUpOwogCiAJCXJldHZhbCA9IGF0dGFjaF9jYXBpX2N0cigmY2luZm8tPmNhcGlfY3RybCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL3QxaXNhLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL3QxaXNhLmMKaW5kZXggMWM1M2ZkNC4uYmFlZWIzYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vdDFpc2EuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL3QxaXNhLmMKQEAgLTQyOSw3ICs0MjksNyBAQAogCWNpbmZvLT5jYXBpX2N0cmwubG9hZF9maXJtd2FyZSA9IHQxaXNhX2xvYWRfZmlybXdhcmU7CiAJY2luZm8tPmNhcGlfY3RybC5yZXNldF9jdHIgICAgID0gdDFpc2FfcmVzZXRfY3RyOwogCWNpbmZvLT5jYXBpX2N0cmwucHJvY2luZm8gICAgICA9IHQxaXNhX3Byb2NpbmZvOwotCWNpbmZvLT5jYXBpX2N0cmwuY3RyX3JlYWRfcHJvYyA9IGIxY3RsX3JlYWRfcHJvYzsKKwljaW5mby0+Y2FwaV9jdHJsLnByb2NfZm9wcyA9ICZiMWN0bF9wcm9jX2ZvcHM7CiAJc3RyY3B5KGNpbmZvLT5jYXBpX2N0cmwubmFtZSwgY2FyZC0+bmFtZSk7CiAKIAlyZXR2YWwgPSBhdHRhY2hfY2FwaV9jdHIoJmNpbmZvLT5jYXBpX2N0cmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS90MXBjaS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2F2bS90MXBjaS5jCmluZGV4IGU2ZDI5OGQuLjVhM2Y4MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9hdm0vdDFwY2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvYXZtL3QxcGNpLmMKQEAgLTExOSw3ICsxMTksNyBAQAogCWNpbmZvLT5jYXBpX2N0cmwubG9hZF9maXJtd2FyZSA9IGIxZG1hX2xvYWRfZmlybXdhcmU7CiAJY2luZm8tPmNhcGlfY3RybC5yZXNldF9jdHIgICAgID0gYjFkbWFfcmVzZXRfY3RyOwogCWNpbmZvLT5jYXBpX2N0cmwucHJvY2luZm8gICAgICA9IHQxcGNpX3Byb2NpbmZvOwotCWNpbmZvLT5jYXBpX2N0cmwuY3RyX3JlYWRfcHJvYyA9IGIxZG1hY3RsX3JlYWRfcHJvYzsKKwljaW5mby0+Y2FwaV9jdHJsLnByb2NfZm9wcyA9ICZiMWRtYWN0bF9wcm9jX2ZvcHM7CiAJc3RyY3B5KGNpbmZvLT5jYXBpX2N0cmwubmFtZSwgY2FyZC0+bmFtZSk7CiAKIAlyZXR2YWwgPSBhdHRhY2hfY2FwaV9jdHIoJmNpbmZvLT5jYXBpX2N0cmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2NhcGltYWluLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vY2FwaW1haW4uYwppbmRleCA5OGZjZGZjLi4wZjA3M2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vY2FwaW1haW4uYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vY2FwaW1haW4uYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAKICNpbmNsdWRlICJvc19jYXBpLmgiCkBAIC03NSwyNSArNzYsMzIgQEAKIC8qCiAgKiBwcm9jIGZ1bmN0aW9uIGZvciBjb250cm9sbGVyIGluZm8KICAqLwotc3RhdGljIGludCBkaXZhX2N0bF9yZWFkX3Byb2MoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCi0JCQkgICAgICBpbnQgY291bnQsIGludCAqZW9mLCBzdHJ1Y3QgY2FwaV9jdHIgKmN0cmwpCitzdGF0aWMgaW50IGRpdmFfY3RsX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CisJc3RydWN0IGNhcGlfY3RyICpjdHJsID0gbS0+cHJpdmF0ZTsKIAlkaXZhX2NhcmQgKmNhcmQgPSAoZGl2YV9jYXJkICopIGN0cmwtPmRyaXZlcmRhdGE7Ci0JaW50IGxlbiA9IDA7CiAKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiJXNcbiIsIGN0cmwtPm5hbWUpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTZXJpYWwgTm8uIDogJXNcbiIsIGN0cmwtPnNlcmlhbCk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIklkICAgICAgICAgOiAlZFxuIiwgY2FyZC0+SWQpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJDaGFubmVscyAgIDogJWRcbiIsIGNhcmQtPmQuY2hhbm5lbHMpOworCXNlcV9wcmludGYobSwgIiVzXG4iLCBjdHJsLT5uYW1lKTsKKwlzZXFfcHJpbnRmKG0sICJTZXJpYWwgTm8uIDogJXNcbiIsIGN0cmwtPnNlcmlhbCk7CisJc2VxX3ByaW50ZihtLCAiSWQgICAgICAgICA6ICVkXG4iLCBjYXJkLT5JZCk7CisJc2VxX3ByaW50ZihtLCAiQ2hhbm5lbHMgICA6ICVkXG4iLCBjYXJkLT5kLmNoYW5uZWxzKTsKIAotCWlmIChvZmYgKyBjb3VudCA+PSBsZW4pCi0JCSplb2YgPSAxOwotCWlmIChsZW4gPCBvZmYpCi0JCXJldHVybiAwOwotCSpzdGFydCA9IHBhZ2UgKyBvZmY7Ci0JcmV0dXJuICgoY291bnQgPCBsZW4gLSBvZmYpID8gY291bnQgOiBsZW4gLSBvZmYpOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGRpdmFfY3RsX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGl2YV9jdGxfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGl2YV9jdGxfcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBkaXZhX2N0bF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIC8qCiAgKiBzZXQgYWRkaXRpb25hbCBvcyBzZXR0aW5ncyBpbiBjYXBpX2N0ciBzdHJ1Y3QKICAqLwpAQCAtMTAyLDcgKzExMCw3IEBACiAJY3RybC0+ZHJpdmVyX25hbWUgPSBEUklWRVJMTkFNRTsKIAljdHJsLT5sb2FkX2Zpcm13YXJlID0gTlVMTDsKIAljdHJsLT5yZXNldF9jdHIgPSBOVUxMOwotCWN0cmwtPmN0cl9yZWFkX3Byb2MgPSBkaXZhX2N0bF9yZWFkX3Byb2M7CisJY3RybC0+cHJvY19mb3BzID0gJmRpdmFfY3RsX3Byb2NfZm9wczsKIAljdHJsLT5vd25lciA9IFRISVNfTU9EVUxFOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YV9kaWRkLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YV9kaWRkLmMKaW5kZXggOTkzYjE0Yy4uNWQwNmE3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFfZGlkZC5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhX2RpZGQuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogCiAjaW5jbHVkZSAicGxhdGZvcm0uaCIKQEAgLTYyLDM5ICs2Myw0MSBAQAogCXJldHVybiByZXY7CiB9CiAKLXN0YXRpYyBpbnQKLXByb2NfcmVhZChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwKLQkgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGRpdmFkaWRkX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7Ci0JaW50IGxlbiA9IDA7CiAJY2hhciB0bXByZXZbMzJdOwogCiAJc3RyY3B5KHRtcHJldiwgbWFpbl9yZXZpc2lvbik7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIiVzXG4iLCBEUklWRVJOQU1FKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAibmFtZSAgICAgOiAlc1xuIiwgRFJJVkVSTE5BTUUpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJyZWxlYXNlICA6ICVzXG4iLCBEUklWRVJSRUxFQVNFX0RJREQpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJidWlsZCAgICA6ICVzKCVzKVxuIiwKKwlzZXFfcHJpbnRmKG0sICIlc1xuIiwgRFJJVkVSTkFNRSk7CisJc2VxX3ByaW50ZihtLCAibmFtZSAgICAgOiAlc1xuIiwgRFJJVkVSTE5BTUUpOworCXNlcV9wcmludGYobSwgInJlbGVhc2UgIDogJXNcbiIsIERSSVZFUlJFTEVBU0VfRElERCk7CisJc2VxX3ByaW50ZihtLCAiYnVpbGQgICAgOiAlcyglcylcbiIsCiAJCSAgICAgICBkaXZhX2RpZGRfY29tbW9uX2NvZGVfYnVpbGQsIERJVkFfQlVJTEQpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJyZXZpc2lvbiA6ICVzXG4iLCBnZXRyZXYodG1wcmV2KSk7CisJc2VxX3ByaW50ZihtLCAicmV2aXNpb24gOiAlc1xuIiwgZ2V0cmV2KHRtcHJldikpOwogCi0JaWYgKG9mZiArIGNvdW50ID49IGxlbikKLQkJKmVvZiA9IDE7Ci0JaWYgKGxlbiA8IG9mZikKLQkJcmV0dXJuIDA7Ci0JKnN0YXJ0ID0gcGFnZSArIG9mZjsKLQlyZXR1cm4gKChjb3VudCA8IGxlbiAtIG9mZikgPyBjb3VudCA6IGxlbiAtIG9mZik7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZGl2YWRpZGRfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkaXZhZGlkZF9wcm9jX3Nob3csIE5VTEwpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkaXZhZGlkZF9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGRpdmFkaWRkX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogc3RhdGljIGludCBESVZBX0lOSVRfRlVOQ1RJT04gY3JlYXRlX3Byb2Modm9pZCkKIHsKIAlwcm9jX25ldF9laWNvbiA9IHByb2NfbWtkaXIoImVpY29uIiwgaW5pdF9uZXQucHJvY19uZXQpOwogCiAJaWYgKHByb2NfbmV0X2VpY29uKSB7Ci0JCWlmICgocHJvY19kaWRkID0KLQkJICAgICBjcmVhdGVfcHJvY19lbnRyeShEUklWRVJMTkFNRSwgU19JRlJFRyB8IFNfSVJVR08sCi0JCQkJICAgICAgIHByb2NfbmV0X2VpY29uKSkpIHsKLQkJCXByb2NfZGlkZC0+cmVhZF9wcm9jID0gcHJvY19yZWFkOwotCQl9CisJCXByb2NfZGlkZCA9IHByb2NfY3JlYXRlKERSSVZFUkxOQU1FLCBTX0lSVUdPLCBwcm9jX25ldF9laWNvbiwKKwkJCQkJJmRpdmFkaWRkX3Byb2NfZm9wcyk7CiAJCXJldHVybiAoMSk7CiAJfQogCXJldHVybiAoMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNpLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNpLmMKaW5kZXggNjllNzFlYi4uZjU3NzcxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzaS5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc2kuYwpAQCAtMTcsNiArMTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTg2LDM5ICs4Nyw0MCBAQAogZXh0ZXJuIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19uZXRfZWljb247CiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICp1bV9pZGlfcHJvY19lbnRyeSA9IE5VTEw7CiAKLXN0YXRpYyBpbnQKLXVtX2lkaV9wcm9jX3JlYWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsCi0JCSB2b2lkICpkYXRhKQorc3RhdGljIGludCB1bV9pZGlfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKLQlpbnQgbGVuID0gMDsKIAljaGFyIHRtcHJldlszMl07CiAKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiJXNcbiIsIERSSVZFUk5BTUUpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJuYW1lICAgICA6ICVzXG4iLCBEUklWRVJMTkFNRSk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgInJlbGVhc2UgIDogJXNcbiIsIERSSVZFUlJFTEVBU0VfSURJKTsKKwlzZXFfcHJpbnRmKG0sICIlc1xuIiwgRFJJVkVSTkFNRSk7CisJc2VxX3ByaW50ZihtLCAibmFtZSAgICAgOiAlc1xuIiwgRFJJVkVSTE5BTUUpOworCXNlcV9wcmludGYobSwgInJlbGVhc2UgIDogJXNcbiIsIERSSVZFUlJFTEVBU0VfSURJKTsKIAlzdHJjcHkodG1wcmV2LCBtYWluX3JldmlzaW9uKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAicmV2aXNpb24gOiAlc1xuIiwgZ2V0cmV2KHRtcHJldikpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJidWlsZCAgICA6ICVzXG4iLCBESVZBX0JVSUxEKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAibWFqb3IgICAgOiAlZFxuIiwgbWFqb3IpOworCXNlcV9wcmludGYobSwgInJldmlzaW9uIDogJXNcbiIsIGdldHJldih0bXByZXYpKTsKKwlzZXFfcHJpbnRmKG0sICJidWlsZCAgICA6ICVzXG4iLCBESVZBX0JVSUxEKTsKKwlzZXFfcHJpbnRmKG0sICJtYWpvciAgICA6ICVkXG4iLCBtYWpvcik7CiAKLQlpZiAob2ZmICsgY291bnQgPj0gbGVuKQotCQkqZW9mID0gMTsKLQlpZiAobGVuIDwgb2ZmKQotCQlyZXR1cm4gMDsKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCXJldHVybiAoKGNvdW50IDwgbGVuIC0gb2ZmKSA/IGNvdW50IDogbGVuIC0gb2ZmKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB1bV9pZGlfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB1bV9pZGlfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdW1faWRpX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gdW1faWRpX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorfTsKKwogc3RhdGljIGludCBESVZBX0lOSVRfRlVOQ1RJT04gY3JlYXRlX3VtX2lkaV9wcm9jKHZvaWQpCiB7Ci0JdW1faWRpX3Byb2NfZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeShEUklWRVJMTkFNRSwKLQkJCQkJICAgICAgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLAotCQkJCQkgICAgICBwcm9jX25ldF9laWNvbik7CisJdW1faWRpX3Byb2NfZW50cnkgPSBwcm9jX2NyZWF0ZShEUklWRVJMTkFNRSwgU19JUlVHTywgcHJvY19uZXRfZWljb24sCisJCQkJCSZ1bV9pZGlfcHJvY19mb3BzKTsKIAlpZiAoIXVtX2lkaV9wcm9jX2VudHJ5KQogCQlyZXR1cm4gKDApOwotCi0JdW1faWRpX3Byb2NfZW50cnktPnJlYWRfcHJvYyA9IHVtX2lkaV9wcm9jX3JlYWQ7Ci0KIAlyZXR1cm4gKDEpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNwcm9jLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNwcm9jLmMKaW5kZXggMDQwODI3Mi4uNDZkNDRhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzcHJvYy5jCisrKyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc3Byb2MuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtMTQxLDE0ICsxNDIsMTAgQEAKIAl9CiB9CiAKLS8qCi0qKiB3cml0ZSBncm91cF9vcHRpbWl6YXRpb24gCi0qLwotc3RhdGljIGludAotd3JpdGVfZ3JwX29wdChzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCwKLQkgICAgICB2b2lkICpkYXRhKQorc3RhdGljIHNzaXplX3QgZ3JwX29wdF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJCSAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKLQlkaXZhX29zX3hkaV9hZGFwdGVyX3QgKmEgPSAoZGl2YV9vc194ZGlfYWRhcHRlcl90ICopIGRhdGE7CisJZGl2YV9vc194ZGlfYWRhcHRlcl90ICphID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5kYXRhOwogCVBJU0ROX0FEQVBURVIgSW9BZGFwdGVyID0gSW9BZGFwdGVyc1thLT5jb250cm9sbGVyIC0gMV07CiAKIAlpZiAoKGNvdW50ID09IDEpIHx8IChjb3VudCA9PSAyKSkgewpAQCAtMTcyLDE0ICsxNjksMTAgQEAKIAlyZXR1cm4gKC1FSU5WQUwpOwogfQogCi0vKgotKiogd3JpdGUgZHluYW1pY19sMV9kb3duCi0qLwotc3RhdGljIGludAotd3JpdGVfZF9sMV9kb3duKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LAotCQl2b2lkICpkYXRhKQorc3RhdGljIHNzaXplX3QgZF9sMV9kb3duX3Byb2Nfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCiB7Ci0JZGl2YV9vc194ZGlfYWRhcHRlcl90ICphID0gKGRpdmFfb3NfeGRpX2FkYXB0ZXJfdCAqKSBkYXRhOworCWRpdmFfb3NfeGRpX2FkYXB0ZXJfdCAqYSA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKS0+ZGF0YTsKIAlQSVNETl9BREFQVEVSIElvQWRhcHRlciA9IElvQWRhcHRlcnNbYS0+Y29udHJvbGxlciAtIDFdOwogCiAJaWYgKChjb3VudCA9PSAxKSB8fCAoY291bnQgPT0gMikpIHsKQEAgLTIwMyw2MyArMTk2LDYyIEBACiAJcmV0dXJuICgtRUlOVkFMKTsKIH0KIAotCi0vKgotKiogcmVhZCBkeW5hbWljX2wxX2Rvd24gCi0qLwotc3RhdGljIGludAotcmVhZF9kX2wxX2Rvd24oY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsCi0JICAgICAgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGRfbDFfZG93bl9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewotCWludCBsZW4gPSAwOwotCWRpdmFfb3NfeGRpX2FkYXB0ZXJfdCAqYSA9IChkaXZhX29zX3hkaV9hZGFwdGVyX3QgKikgZGF0YTsKKwlkaXZhX29zX3hkaV9hZGFwdGVyX3QgKmEgPSBtLT5wcml2YXRlOwogCVBJU0ROX0FEQVBURVIgSW9BZGFwdGVyID0gSW9BZGFwdGVyc1thLT5jb250cm9sbGVyIC0gMV07CiAKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiJXNcbiIsCisJc2VxX3ByaW50ZihtLCAiJXNcbiIsCiAJCSAgICAgICAoSW9BZGFwdGVyLT5jYXBpX2NmZy4KIAkJCWNmZ18xICYgRElWQV9YRElfQ0FQSV9DRkdfMV9EWU5BTUlDX0wxX09OKSA/ICIxIiA6CiAJCSAgICAgICAiMCIpOwotCi0JaWYgKG9mZiArIGNvdW50ID49IGxlbikKLQkJKmVvZiA9IDE7Ci0JaWYgKGxlbiA8IG9mZikKLQkJcmV0dXJuIDA7Ci0JKnN0YXJ0ID0gcGFnZSArIG9mZjsKLQlyZXR1cm4gKChjb3VudCA8IGxlbiAtIG9mZikgPyBjb3VudCA6IGxlbiAtIG9mZik7CisJcmV0dXJuIDA7CiB9CiAKLS8qCi0qKiByZWFkIGdyb3VwX29wdGltaXphdGlvbgotKi8KLXN0YXRpYyBpbnQKLXJlYWRfZ3JwX29wdChjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwKLQkgICAgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGRfbDFfZG93bl9wcm9jX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaW50IGxlbiA9IDA7Ci0JZGl2YV9vc194ZGlfYWRhcHRlcl90ICphID0gKGRpdmFfb3NfeGRpX2FkYXB0ZXJfdCAqKSBkYXRhOworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkX2wxX2Rvd25fcHJvY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZF9sMV9kb3duX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZF9sMV9kb3duX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBkX2wxX2Rvd25fcHJvY193cml0ZSwKK307CisKK3N0YXRpYyBpbnQgZ3JwX29wdF9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQoreworCWRpdmFfb3NfeGRpX2FkYXB0ZXJfdCAqYSA9IG0tPnByaXZhdGU7CiAJUElTRE5fQURBUFRFUiBJb0FkYXB0ZXIgPSBJb0FkYXB0ZXJzW2EtPmNvbnRyb2xsZXIgLSAxXTsKIAotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICIlc1xuIiwKKwlzZXFfcHJpbnRmKG0sICIlc1xuIiwKIAkJICAgICAgIChJb0FkYXB0ZXItPmNhcGlfY2ZnLgogCQkJY2ZnXzEgJiBESVZBX1hESV9DQVBJX0NGR18xX0dST1VQX1BPUFRJTUlaQVRJT05fT04pCiAJCSAgICAgICA/ICIxIiA6ICIwIik7Ci0KLQlpZiAob2ZmICsgY291bnQgPj0gbGVuKQotCQkqZW9mID0gMTsKLQlpZiAobGVuIDwgb2ZmKQotCQlyZXR1cm4gMDsKLQkqc3RhcnQgPSBwYWdlICsgb2ZmOwotCXJldHVybiAoKGNvdW50IDwgbGVuIC0gb2ZmKSA/IGNvdW50IDogbGVuIC0gb2ZmKTsKKwlyZXR1cm4gMDsKIH0KIAotLyoKLSoqIGluZm8gd3JpdGUKLSovCi1zdGF0aWMgaW50Ci1pbmZvX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50LAotCSAgIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGdycF9vcHRfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWRpdmFfb3NfeGRpX2FkYXB0ZXJfdCAqYSA9IChkaXZhX29zX3hkaV9hZGFwdGVyX3QgKikgZGF0YTsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZ3JwX29wdF9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBncnBfb3B0X3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gZ3JwX29wdF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKKwkud3JpdGUJCT0gZ3JwX29wdF9wcm9jX3dyaXRlLAorfTsKKworc3RhdGljIHNzaXplX3QgaW5mb19wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAorCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCit7CisJZGl2YV9vc194ZGlfYWRhcHRlcl90ICphID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5kYXRhOwogCVBJU0ROX0FEQVBURVIgSW9BZGFwdGVyID0gSW9BZGFwdGVyc1thLT5jb250cm9sbGVyIC0gMV07CiAJY2hhciBjWzRdOwogCkBAIC0yNzcsNjMgKzI2OSw0NiBAQAogCXJldHVybiAoLUVJTlZBTCk7CiB9CiAKLS8qCi0qKiBpbmZvIHJlYWQKLSovCi1zdGF0aWMgaW50Ci1pbmZvX3JlYWQoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsIGludCBjb3VudCwgaW50ICplb2YsCi0JICB2b2lkICpkYXRhKQorc3RhdGljIGludCBpbmZvX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJaW50IGkgPSAwOwotCWludCBsZW4gPSAwOwogCWNoYXIgKnA7CiAJY2hhciB0bXBzZXJbMTZdOwotCWRpdmFfb3NfeGRpX2FkYXB0ZXJfdCAqYSA9IChkaXZhX29zX3hkaV9hZGFwdGVyX3QgKikgZGF0YTsKKwlkaXZhX29zX3hkaV9hZGFwdGVyX3QgKmEgPSBtLT5wcml2YXRlOwogCVBJU0ROX0FEQVBURVIgSW9BZGFwdGVyID0gSW9BZGFwdGVyc1thLT5jb250cm9sbGVyIC0gMV07CiAKLQlsZW4gKz0KLQkgICAgc3ByaW50ZihwYWdlICsgbGVuLCAiTmFtZSAgICAgICAgOiAlc1xuIiwKLQkJICAgIElvQWRhcHRlci0+UHJvcGVydGllcy5OYW1lKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiRFNQIHN0YXRlICAgOiAlMDh4XG4iLCBhLT5kc3BfbWFzayk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkNoYW5uZWxzICAgIDogJTAyZFxuIiwKLQkJICAgICAgIElvQWRhcHRlci0+UHJvcGVydGllcy5DaGFubmVscyk7Ci0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkUuIG1heC91c2VkIDogJTAzZC8lMDNkXG4iLAorCXNlcV9wcmludGYobSwgIk5hbWUgICAgICAgIDogJXNcbiIsIElvQWRhcHRlci0+UHJvcGVydGllcy5OYW1lKTsKKwlzZXFfcHJpbnRmKG0sICJEU1Agc3RhdGUgICA6ICUwOHhcbiIsIGEtPmRzcF9tYXNrKTsKKwlzZXFfcHJpbnRmKG0sICJDaGFubmVscyAgICA6ICUwMmRcbiIsIElvQWRhcHRlci0+UHJvcGVydGllcy5DaGFubmVscyk7CisJc2VxX3ByaW50ZihtLCAiRS4gbWF4L3VzZWQgOiAlMDNkLyUwM2RcbiIsCiAJCSAgICAgICBJb0FkYXB0ZXItPmVfbWF4LCBJb0FkYXB0ZXItPmVfY291bnQpOwogCWRpdmFfZ2V0X3ZzZXJpYWxfbnVtYmVyKElvQWRhcHRlciwgdG1wc2VyKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiU2VyaWFsICAgICAgOiAlc1xuIiwgdG1wc2VyKTsKLQlsZW4gKz0KLQkgICAgc3ByaW50ZihwYWdlICsgbGVuLCAiSVJRICAgICAgICAgOiAlZFxuIiwKLQkJICAgIElvQWRhcHRlci0+aXJxX2luZm8uaXJxX25yKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQ2FyZEluZGV4ICAgOiAlZFxuIiwgYS0+Q2FyZEluZGV4KTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQ2FyZE9yZGluYWwgOiAlZFxuIiwgYS0+Q2FyZE9yZGluYWwpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJDb250cm9sbGVyICA6ICVkXG4iLCBhLT5jb250cm9sbGVyKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQnVzLVR5cGUgICAgOiAlc1xuIiwKKwlzZXFfcHJpbnRmKG0sICJTZXJpYWwgICAgICA6ICVzXG4iLCB0bXBzZXIpOworCXNlcV9wcmludGYobSwgIklSUSAgICAgICAgIDogJWRcbiIsIElvQWRhcHRlci0+aXJxX2luZm8uaXJxX25yKTsKKwlzZXFfcHJpbnRmKG0sICJDYXJkSW5kZXggICA6ICVkXG4iLCBhLT5DYXJkSW5kZXgpOworCXNlcV9wcmludGYobSwgIkNhcmRPcmRpbmFsIDogJWRcbiIsIGEtPkNhcmRPcmRpbmFsKTsKKwlzZXFfcHJpbnRmKG0sICJDb250cm9sbGVyICA6ICVkXG4iLCBhLT5jb250cm9sbGVyKTsKKwlzZXFfcHJpbnRmKG0sICJCdXMtVHlwZSAgICA6ICVzXG4iLAogCQkgICAgICAgKGEtPkJ1cyA9PQogCQkJRElWQVNfWERJX0FEQVBURVJfQlVTX0lTQSkgPyAiSVNBIiA6ICJQQ0kiKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiUG9ydC1OYW1lICAgOiAlc1xuIiwgYS0+cG9ydF9uYW1lKTsKKwlzZXFfcHJpbnRmKG0sICJQb3J0LU5hbWUgICA6ICVzXG4iLCBhLT5wb3J0X25hbWUpOwogCWlmIChhLT5CdXMgPT0gRElWQVNfWERJX0FEQVBURVJfQlVTX1BDSSkgewotCQlsZW4gKz0KLQkJICAgIHNwcmludGYocGFnZSArIGxlbiwgIlBDSS1idXMgICAgIDogJWRcbiIsCi0JCQkgICAgYS0+cmVzb3VyY2VzLnBjaS5idXMpOwotCQlsZW4gKz0KLQkJICAgIHNwcmludGYocGFnZSArIGxlbiwgIlBDSS1mdW5jICAgIDogJWRcbiIsCi0JCQkgICAgYS0+cmVzb3VyY2VzLnBjaS5mdW5jKTsKKwkJc2VxX3ByaW50ZihtLCAiUENJLWJ1cyAgICAgOiAlZFxuIiwgYS0+cmVzb3VyY2VzLnBjaS5idXMpOworCQlzZXFfcHJpbnRmKG0sICJQQ0ktZnVuYyAgICA6ICVkXG4iLCBhLT5yZXNvdXJjZXMucGNpLmZ1bmMpOwogCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCQlpZiAoYS0+cmVzb3VyY2VzLnBjaS5iYXJbaV0pIHsKLQkJCQlsZW4gKz0KLQkJCQkgICAgc3ByaW50ZihwYWdlICsgbGVuLAorCQkJCXNlcV9wcmludGYobSwKIAkJCQkJICAgICJNZW0gLyBJL08gJWQgOiAweCV4IC8gbWFwcGVkIDogMHglbHgiLAogCQkJCQkgICAgaSwgYS0+cmVzb3VyY2VzLnBjaS5iYXJbaV0sCiAJCQkJCSAgICAodW5zaWduZWQgbG9uZykgYS0+cmVzb3VyY2VzLgogCQkJCQkgICAgcGNpLmFkZHJbaV0pOwogCQkJCWlmIChhLT5yZXNvdXJjZXMucGNpLmxlbmd0aFtpXSkgewotCQkJCQlsZW4gKz0KLQkJCQkJICAgIHNwcmludGYocGFnZSArIGxlbiwKKwkJCQkJc2VxX3ByaW50ZihtLAogCQkJCQkJICAgICIgLyBsZW5ndGggOiAlZCIsCiAJCQkJCQkgICAgYS0+cmVzb3VyY2VzLnBjaS4KIAkJCQkJCSAgICBsZW5ndGhbaV0pOwogCQkJCX0KLQkJCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiXG4iKTsKKwkJCQlzZXFfcHV0YyhtLCAnXG4nKTsKIAkJCX0KIAkJfQogCX0KQEAgLTM1MywxNiArMzI4LDI1IEBACiAJfSBlbHNlIHsKIAkJcCA9ICJyZWFkeSI7CiAJfQotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJTdGF0ZSAgICAgICA6ICVzXG4iLCBwKTsKKwlzZXFfcHJpbnRmKG0sICJTdGF0ZSAgICAgICA6ICVzXG4iLCBwKTsKIAotCWlmIChvZmYgKyBjb3VudCA+PSBsZW4pCi0JCSplb2YgPSAxOwotCWlmIChsZW4gPCBvZmYpCi0JCXJldHVybiAwOwotCSpzdGFydCA9IHBhZ2UgKyBvZmY7Ci0JcmV0dXJuICgoY291bnQgPCBsZW4gLSBvZmYpID8gY291bnQgOiBsZW4gLSBvZmYpOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGluZm9fcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBpbmZvX3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGluZm9fcHJvY19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBpbmZvX3Byb2Nfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAorCS53cml0ZQkJPSBpbmZvX3Byb2Nfd3JpdGUsCit9OworCiAvKgogKiogYWRhcHRlciBwcm9jIGluaXQvZGUtaW5pdAogKi8KQEAgLTM4MCwyOCArMzY0LDIwIEBACiAJCXJldHVybiAoMCk7CiAJYS0+cHJvY19hZGFwdGVyX2RpciA9ICh2b2lkICopIGRlOwogCi0JaWYgKCEocGUgPQotCSAgICAgY3JlYXRlX3Byb2NfZW50cnkoaW5mb19wcm9jX25hbWUsIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwgZGUpKSkKKwlwZSA9IHByb2NfY3JlYXRlX2RhdGEoaW5mb19wcm9jX25hbWUsIFNfSVJVR08gfCBTX0lXVVNSLCBkZSwKKwkJCSAgICAgICZpbmZvX3Byb2NfZm9wcywgYSk7CisJaWYgKCFwZSkKIAkJcmV0dXJuICgwKTsKIAlhLT5wcm9jX2luZm8gPSAodm9pZCAqKSBwZTsKLQlwZS0+d3JpdGVfcHJvYyA9IGluZm9fd3JpdGU7Ci0JcGUtPnJlYWRfcHJvYyA9IGluZm9fcmVhZDsKLQlwZS0+ZGF0YSA9IGE7CiAKLQlpZiAoKHBlID0gY3JlYXRlX3Byb2NfZW50cnkoZ3JwX29wdF9wcm9jX25hbWUsCi0JCQkgICAgICAgU19JRlJFRyB8IFNfSVJVR08gfCBTX0lXVVNSLCBkZSkpKSB7CisJcGUgPSBwcm9jX2NyZWF0ZV9kYXRhKGdycF9vcHRfcHJvY19uYW1lLCBTX0lSVUdPIHwgU19JV1VTUiwgZGUsCisJCQkgICAgICAmZ3JwX29wdF9wcm9jX2ZvcHMsIGEpOworCWlmIChwZSkKIAkJYS0+cHJvY19ncnBfb3B0ID0gKHZvaWQgKikgcGU7Ci0JCXBlLT53cml0ZV9wcm9jID0gd3JpdGVfZ3JwX29wdDsKLQkJcGUtPnJlYWRfcHJvYyA9IHJlYWRfZ3JwX29wdDsKLQkJcGUtPmRhdGEgPSBhOwotCX0KLQlpZiAoKHBlID0gY3JlYXRlX3Byb2NfZW50cnkoZF9sMV9kb3duX3Byb2NfbmFtZSwKLQkJCSAgICAgICBTX0lGUkVHIHwgU19JUlVHTyB8IFNfSVdVU1IsIGRlKSkpIHsKKwlwZSA9IHByb2NfY3JlYXRlX2RhdGEoZF9sMV9kb3duX3Byb2NfbmFtZSwgU19JUlVHTyB8IFNfSVdVU1IsIGRlLAorCQkJICAgICAgJmRfbDFfZG93bl9wcm9jX2ZvcHMsIGEpOworCWlmIChwZSkKIAkJYS0+cHJvY19kX2wxX2Rvd24gPSAodm9pZCAqKSBwZTsKLQkJcGUtPndyaXRlX3Byb2MgPSB3cml0ZV9kX2wxX2Rvd247Ci0JCXBlLT5yZWFkX3Byb2MgPSByZWFkX2RfbDFfZG93bjsKLQkJcGUtPmRhdGEgPSBhOwotCX0KIAogCURCR19UUkMoKCJwcm9jIGVudHJ5ICVzIGNyZWF0ZWQiLCB0bXApKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL2hmY211bHRpLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjbXVsdGkuYwppbmRleCAxYTE0MjBkLi5hZDM2ZGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjbXVsdGkuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vaGZjbXVsdGkuYwpAQCAtMjg0Niw3ICsyODQ2LDcgQEAKIAlpbnQgY29uZjsKIAogCWlmIChjaCA8IDAgfHwgY2ggPiAzMSkKLQkJcmV0dXJuIEVJTlZBTDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJb3Nsb3RfdHggPSBoYy0+Y2hhbltjaF0uc2xvdF90eDsKIAlvc2xvdF9yeCA9IGhjLT5jaGFuW2NoXS5zbG90X3J4OwogCWNvbmYgPSBoYy0+Y2hhbltjaF0uY29uZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9tSVNETmluZmluZW9uLmMgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbUlTRE5pbmZpbmVvbi5jCmluZGV4IDYyNDQxYmEuLjM2YzZjNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9tSVNETmluZmluZW9uLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL21JU0ROaW5maW5lb24uYwpAQCAtMTEzMyw2ICsxMTMzLDcgQEAKIAkJCWlmIChlcnIpIHsKIAkJCQlrZnJlZShzYyk7CiAJCQkJcmVsZWFzZV9jYXJkKGNhcmQpOworCQkJCWJyZWFrOwogCQkJfSBlbHNlCiAJCQkJY2FyZC0+c2NbaSAtIDFdID0gc2M7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9tSVNETmlzYXIuYyBiL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi9tSVNETmlzYXIuYwppbmRleCAwOTA5NWM3Li5mMGJjNmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvbUlTRE4vbUlTRE5pc2FyLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL21JU0ROaXNhci5jCkBAIC0xNzEyLDEzICsxNzEyLDEzIEBACiB9CiBFWFBPUlRfU1lNQk9MKG1JU0ROaXNhcl9pbml0KTsKIAotc3RhdGljIGludCBpc2FyX21vZF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpc2FyX21vZF9pbml0KHZvaWQpCiB7CiAJcHJfbm90aWNlKCJtSVNETjogSVNBUiBkcml2ZXIgUmV2LiAlc1xuIiwgSVNBUl9SRVYpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpc2FyX21vZF9jbGVhbnVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgaXNhcl9tb2RfY2xlYW51cCh2b2lkKQogewogCXByX25vdGljZSgibUlTRE46IElTQVIgbW9kdWxlIHVubG9hZGVkXG4iKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9tSVNETi93NjY5Mi5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL3c2NjkyLmMKaW5kZXggZDNmMTA3Ny4uMjk1MmE1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL3c2NjkyLmMKKysrIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL21JU0ROL3c2NjkyLmMKQEAgLTUyOSw2ICs1MjksNyBAQAogCX0KIH0KIAorI2lmIDAKIHN0YXRpYyBpbnQKIHNldHZvbHVtZShzdHJ1Y3QgdzY2OTJfY2ggKndjaCwgaW50IG1pYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTU3MSw2ICs1NzIsNyBAQAogCVdyaXRlVzY2OTIoY2FyZCwgV19QQ1RMLCBjYXJkLT5wY3RsKTsKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZgogCiBzdGF0aWMgaW50CiBkaXNhYmxlX3BvdHMoc3RydWN0IHc2NjkyX2NoICp3Y2gpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNhci5jIGIvZHJpdmVycy9pc2RuL2hpc2F4L2lzYXIuYwppbmRleCBiZmViOWI2Li42YmRlMTZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGlzYXgvaXNhci5jCisrKyBiL2RyaXZlcnMvaXNkbi9oaXNheC9pc2FyLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogCXdoaWxlKCghKGNzLT5CQ19SZWFkX1JlZyhjcywgMCwgSVNBUl9JUlFCSVQpICYgSVNBUl9JUlFTVEEpKSAmJgogCQkodGltZW91dCsrIDwgbWF4ZGVsYXkpKQogCQl1ZGVsYXkoMSk7Ci0JaWYgKHRpbWVvdXQgPj0gbWF4ZGVsYXkpIHsKKwlpZiAodGltZW91dCA+IG1heGRlbGF5KSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkciaXNhciByZWNtc2cgSVJRU1RBIHRpbWVvdXRcbiIpOwogCQlyZXR1cm4oMCk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2h5c2RuL2h5Y2FwaS5jIGIvZHJpdmVycy9pc2RuL2h5c2RuL2h5Y2FwaS5jCmluZGV4IDRmZmFhMTQuLmZlODc0YWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oeXNkbi9oeWNhcGkuYworKysgYi9kcml2ZXJzL2lzZG4vaHlzZG4vaHljYXBpLmMKQEAgLTExLDYgKzExLDggQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CkBAIC00MzIsMjYgKzQzNCwxNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLWh5Y2FwaV9yZWFkX3Byb2MKLQotSW5mb3JtYXRpb25zIHByb3ZpZGVkIGluIHRoZSAvcHJvYy9jYXBpLWVudHJpZXMuCi0KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCBoeWNhcGlfcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJICAgIGludCBjb3VudCwgaW50ICplb2YsIHN0cnVjdCBjYXBpX2N0ciAqY3RybCkKK3N0YXRpYyBpbnQgaHljYXBpX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CisJc3RydWN0IGNhcGlfY3RyICpjdHJsID0gbS0+cHJpdmF0ZTsKIAloeWNhcGljdHJsX2luZm8gKmNpbmZvID0gKGh5Y2FwaWN0cmxfaW5mbyAqKShjdHJsLT5kcml2ZXJkYXRhKTsKIAloeXNkbl9jYXJkICpjYXJkID0gY2luZm8tPmNhcmQ7Ci0JaW50IGxlbiA9IDA7CiAJY2hhciAqczsKLSNpZmRlZiBIWUNBUElfUFJJTlRGTkFNRVMKLQlwcmludGsoS0VSTl9OT1RJQ0UgImh5Y2FwaV9yZWFkX3Byb2NcbiIpOyAgICAKLSNlbmRpZgotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXNcbiIsICJuYW1lIiwgY2luZm8tPmNhcmRuYW1lKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzIDB4JXhcbiIsICJpbyIsIGNhcmQtPmlvYmFzZSk7Ci0JbGVuICs9IHNwcmludGYocGFnZStsZW4sICIlLTE2cyAlZFxuIiwgImlycSIsIGNhcmQtPmlycSk7CisKKwlzZXFfcHJpbnRmKG0sICIlLTE2cyAlc1xuIiwgIm5hbWUiLCBjaW5mby0+Y2FyZG5hbWUpOworCXNlcV9wcmludGYobSwgIiUtMTZzIDB4JXhcbiIsICJpbyIsIGNhcmQtPmlvYmFzZSk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJWRcbiIsICJpcnEiLCBjYXJkLT5pcnEpOwogICAgIAogCXN3aXRjaCAoY2FyZC0+YnJkdHlwZSkgewogCQljYXNlIEJEX1BDQ0FSRDogIHMgPSAiSFlTRE4gSHljYXJkIjsgYnJlYWs7CkBAIC00NjEsMjQgKzQ1MywzMiBAQAogCQljYXNlIEJEX1BMRVhVUzogcyA9ICJIWVNETiBQbGV4dXMzMCI7IGJyZWFrOwogCQlkZWZhdWx0OiBzID0gIj8/PyI7IGJyZWFrOwogCX0KLQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAidHlwZSIsIHMpOworCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAidHlwZSIsIHMpOwogCWlmICgocyA9IGNpbmZvLT52ZXJzaW9uW1ZFUl9EUklWRVJdKSAhPSBOVUxMKQotCQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAidmVyX2RyaXZlciIsIHMpOworCQlzZXFfcHJpbnRmKG0sICIlLTE2cyAlc1xuIiwgInZlcl9kcml2ZXIiLCBzKTsKIAlpZiAoKHMgPSBjaW5mby0+dmVyc2lvbltWRVJfQ0FSRFRZUEVdKSAhPSBOVUxMKQotCQlsZW4gKz0gc3ByaW50ZihwYWdlK2xlbiwgIiUtMTZzICVzXG4iLCAidmVyX2NhcmR0eXBlIiwgcyk7CisJCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAidmVyX2NhcmR0eXBlIiwgcyk7CiAJaWYgKChzID0gY2luZm8tPnZlcnNpb25bVkVSX1NFUklBTF0pICE9IE5VTEwpCi0JCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXNcbiIsICJ2ZXJfc2VyaWFsIiwgcyk7CisJCXNlcV9wcmludGYobSwgIiUtMTZzICVzXG4iLCAidmVyX3NlcmlhbCIsIHMpOwogICAgIAotCWxlbiArPSBzcHJpbnRmKHBhZ2UrbGVuLCAiJS0xNnMgJXNcbiIsICJjYXJkbmFtZSIsIGNpbmZvLT5jYXJkbmFtZSk7CisJc2VxX3ByaW50ZihtLCAiJS0xNnMgJXNcbiIsICJjYXJkbmFtZSIsIGNpbmZvLT5jYXJkbmFtZSk7CiAgICAgCi0JaWYgKG9mZitjb3VudCA+PSBsZW4pCi0JCSplb2YgPSAxOwotCWlmIChsZW4gPCBvZmYpCi0JCXJldHVybiAwOwotCSpzdGFydCA9IHBhZ2UgKyBvZmY7Ci0JcmV0dXJuICgoY291bnQgPCBsZW4tb2ZmKSA/IGNvdW50IDogbGVuLW9mZik7CisJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaHljYXBpX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaHljYXBpX3Byb2Nfc2hvdywgUERFKGlub2RlKS0+ZGF0YSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh5Y2FwaV9wcm9jX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGh5Y2FwaV9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogaHljYXBpX2xvYWRfZmlybXdhcmUKIApAQCAtNzc0LDcgKzc3NCw3IEBACiAJCWN0cmwtPmxvYWRfZmlybXdhcmUgPSBoeWNhcGlfbG9hZF9maXJtd2FyZTsKIAkJY3RybC0+cmVzZXRfY3RyICAgICA9IGh5Y2FwaV9yZXNldF9jdHI7CiAJCWN0cmwtPnByb2NpbmZvICAgICAgPSBoeWNhcGlfcHJvY2luZm87Ci0JCWN0cmwtPmN0cl9yZWFkX3Byb2MgPSBoeWNhcGlfcmVhZF9wcm9jOworCQljdHJsLT5wcm9jX2ZvcHMgPSAmaHljYXBpX3Byb2NfZm9wczsKIAkJc3RyY3B5KGN0cmwtPm5hbWUsIGNpbmZvLT5jYXJkbmFtZSk7CiAJCWN0cmwtPm93bmVyID0gVEhJU19NT0RVTEU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvS2NvbmZpZyBiL2RyaXZlcnMvaXNkbi9pNGwvS2NvbmZpZwppbmRleCAwN2M0ZTQ5Li45YzY2NTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaTRsL0tjb25maWcKKysrIGIvZHJpdmVycy9pc2RuL2k0bC9LY29uZmlnCkBAIC0xMzQsMTQgKzEzNCw3IEBACiAKIHNvdXJjZSAiZHJpdmVycy9pc2RuL2FjdDIwMDAvS2NvbmZpZyIKIAotc291cmNlICJkcml2ZXJzL2lzZG4vaHlzZG4vS2NvbmZpZyIKLQogZW5kbWVudQogIyBlbmQgSVNETl9JNEwKIGVuZGlmCiAKLWNvbmZpZyBJU0ROX0hETEMKLQl0cmlzdGF0ZQotCXNlbGVjdCBDUkNfQ0NJVFQKLQlzZWxlY3QgQklUUkVWRVJTRQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fY29tbW9uLmMgYi9kcml2ZXJzL2lzZG4vaTRsL2lzZG5fY29tbW9uLmMKaW5kZXggYWRiMWU4Yy4uMDBjNjBlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9jb21tb24uYwpAQCAtMTM0Nyw3ICsxMzQ3LDcgQEAKIC8qCiAgKiBpc2RuIG5ldCBkZXZpY2VzIG1hbmFnZSBsb3RzIG9mIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGFzIGxpbmtlZCBsaXN0cy4KICAqIFRob3NlIGxpc3RzIG11c3Qgb25seSBiZSBtYW5pcHVsYXRlZCBmcm9tIHVzZXIgc3BhY2UuIFNvbWUgb2YgdGhlIGlvY3RsJ3MKLSAqIHNlcnZpY2Ugcm91dGluZXMgYWNjZXNzIHVzZXIgc3BhY2UgYW5kIGFyZSBub3QgYXRvbWljLiBUaGVyZWZvciwgaW9jdGwncworICogc2VydmljZSByb3V0aW5lcyBhY2Nlc3MgdXNlciBzcGFjZSBhbmQgYXJlIG5vdCBhdG9taWMuIFRoZXJlZm9yZSwgaW9jdGwncwogICogbWFuaXB1bGF0aW5nIHRoZSBsaXN0cyBhbmQgaW9jdGwncyBzbGVlcGluZyB3aGlsZSBhY2Nlc3NpbmcgdGhlIGxpc3RzCiAgKiBhcmUgc2VyaWFsaXplZCBieSBtZWFucyBvZiBhIHNlbWFwaG9yZS4KICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL2RzcF9jb3JlLmMgYi9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwX2NvcmUuYwppbmRleCA0M2ZmNGQzLi42ZWFjNTg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwX2NvcmUuYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vZHNwX2NvcmUuYwpAQCAtMTExNCw3ICsxMTE0LDcgQEAKIAkuY3JlYXRlID0gZHNwY3JlYXRlCiB9OwogCi1zdGF0aWMgaW50IGRzcF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBkc3BfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAJaW50IHRpY3M7CkBAIC0xMjEyLDcgKzEyMTIsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGRzcF9jbGVhbnVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgZHNwX2NsZWFudXAodm9pZCkKIHsKIAltSVNETl91bnJlZ2lzdGVyX0Jwcm90b2NvbCgmRFNQKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL21JU0ROL2wxb2lwX2NvcmUuYyBiL2RyaXZlcnMvaXNkbi9tSVNETi9sMW9pcF9jb3JlLmMKaW5kZXggZjFlOGFmNS4uMzI1YjFhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL21JU0ROL2wxb2lwX2NvcmUuYworKysgYi9kcml2ZXJzL2lzZG4vbUlTRE4vbDFvaXBfY29yZS5jCkBAIC00NzcsNyArNDc3LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByZWNlaXZlZCBmcmFtZSwgcGFyc2luZy4uLiAoJWQpXG4iLAogCQkJX19mdW5jX18sIGxlbik7CiAKLQkvKiBjaGVjayBsZW5naHQgKi8KKwkvKiBjaGVjayBsZW5ndGggKi8KIAlpZiAobGVuIDwgMSsxKzIpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHBhY2tldCBlcnJvciAtIGxlbmd0aCAlZCBiZWxvdyAiCiAJCQkiNCBieXRlc1xuIiwgX19mdW5jX18sIGxlbik7CkBAIC0xNTA5LDcgKzE1MDksNyBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbnRlcmZhY2UgJWQgaXMgJXMgd2l0aCAlcy5cbiIsCiAJCQkgICAgX19mdW5jX18sIGwxb2lwX2NudCwgcHJpID8gIlBSSSIgOiAiQlJJIiwKIAkJCSAgICBidW5kbGUgPyAiYnVuZGxlZCBJUCBwYWNrZXQgZm9yIGFsbCBCLWNoYW5uZWxzIiA6Ci0JCQkgICAgInNlcGVyYXRlIElQIHBhY2tldHMgZm9yIGV2ZXJ5IEItY2hhbm5lbCIpOworCQkJICAgICJzZXBhcmF0ZSBJUCBwYWNrZXRzIGZvciBldmVyeSBCLWNoYW5uZWwiKTsKIAogCQloYyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsMW9pcCksIEdGUF9BVE9NSUMpOwogCQlpZiAoIWhjKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lzZG4vc2MvaGFyZHdhcmUuaCBiL2RyaXZlcnMvaXNkbi9zYy9oYXJkd2FyZS5oCmluZGV4IDllNmQ1MzAuLjYyNzMyNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9zYy9oYXJkd2FyZS5oCisrKyBiL2RyaXZlcnMvaXNkbi9zYy9oYXJkd2FyZS5oCkBAIC04Nyw3ICs4Nyw3IEBACiAjZGVmaW5lIEJSSV9DSEFOTkVMUwkyCQkvKiBOdW1iZXIgb2YgQiBjaGFubmVscyAqLwogI2RlZmluZSBCUklfQkFTRVBHX1ZBTAkweDk4CiAjZGVmaW5lIEJSSV9NQUdJQwkweDYwMDAwCQkvKiBNYWdpYyBOdW1iZXIgKi8KLSNkZWZpbmUgQlJJX01FTVNJWkUJMHgxMDAwMAkJLyogQW1tb3VudCBvZiBSQU0gKDY0SykgKi8KKyNkZWZpbmUgQlJJX01FTVNJWkUJMHgxMDAwMAkJLyogQW1vdW50IG9mIFJBTSAoNjRLKSAqLwogI2RlZmluZSBCUklfUEFSVE5PCSI3Mi0wMjkiCiAjZGVmaW5lIEJSSV9GRUFUVVJFUwlJU0ROX0ZFQVRVUkVfTDJfSERMQyB8IElTRE5fRkVBVFVSRV9MM19UUkFOUzsKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvS2NvbmZpZyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCmluZGV4IDhhMGUxZWMuLmUwYjY0MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbGVkcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbGVkcy9LY29uZmlnCkBAIC0xNyw2ICsxNywxMyBAQAogCiBjb21tZW50ICJMRUQgZHJpdmVycyIKIAorY29uZmlnIExFRFNfODhQTTg2MFgKKwl0cmlzdGF0ZSAiTEVEIFN1cHBvcnQgZm9yIE1hcnZlbGwgODhQTTg2MHggUE1JQyIKKwlkZXBlbmRzIG9uIExFRFNfQ0xBU1MgJiYgTUZEXzg4UE04NjBYCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBvbi1jaGlwIExFRCBkcml2ZXJzIGZvdW5kIG9uIE1hcnZlbGwKKwkgIFNlbWljb25kdWN0b3IgODhQTTg2MDYgUE1JQy4KKwogY29uZmlnIExFRFNfQVRNRUxfUFdNCiAJdHJpc3RhdGUgIkxFRCBTdXBwb3J0IHVzaW5nIEF0bWVsIFBXTSBvdXRwdXRzIgogCWRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBBVE1FTF9QV00KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9NYWtlZmlsZSBiL2RyaXZlcnMvbGVkcy9NYWtlZmlsZQppbmRleCA5ZTYzODY5Li5kNzZmYjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9sZWRzL01ha2VmaWxlCkBAIC01LDYgKzUsNyBAQAogb2JqLSQoQ09ORklHX0xFRFNfVFJJR0dFUlMpCQkrPSBsZWQtdHJpZ2dlcnMubwogCiAjIExFRCBQbGF0Zm9ybSBEcml2ZXJzCitvYmotJChDT05GSUdfTEVEU184OFBNODYwWCkJCSs9IGxlZHMtODhwbTg2MHgubwogb2JqLSQoQ09ORklHX0xFRFNfQVRNRUxfUFdNKQkJKz0gbGVkcy1hdG1lbC1wd20ubwogb2JqLSQoQ09ORklHX0xFRFNfQkQyODAyKQkJKz0gbGVkcy1iZDI4MDIubwogb2JqLSQoQ09ORklHX0xFRFNfTE9DT01PKQkJKz0gbGVkcy1sb2NvbW8ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2xlZHMtODhwbTg2MHguYyBiL2RyaXZlcnMvbGVkcy9sZWRzLTg4cG04NjB4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE5NjA3MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLTg4cG04NjB4LmMKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiBMRUQgZHJpdmVyIGZvciBNYXJ2ZWxsIDg4UE04NjB4CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKglIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkLzg4cG04NjB4Lmg+CisKKyNkZWZpbmUgTEVEX1BXTV9TSElGVAkJKDMpCisjZGVmaW5lIExFRF9QV01fTUFTSwkJKDB4MUYpCisjZGVmaW5lIExFRF9DVVJSRU5UX01BU0sJKDB4MDcgPDwgNSkKKworI2RlZmluZSBMRURfQkxJTktfT05fTUFTSwkoMHgwNykKKyNkZWZpbmUgTEVEX0JMSU5LX1BFUklPRF9NQVNLCSgweDBGIDw8IDMpCisjZGVmaW5lIExFRF9CTElOS19NQVNLCQkoMHg3RikKKworI2RlZmluZSBMRURfQkxJTktfT04oeCkJCSgoeCAmIDB4NykgKiA2NiArIDY2KQorI2RlZmluZSBMRURfQkxJTktfUEVSSU9EKHgpCSgoeCAmIDB4RikgKiA1MzAgKyA5MzApCisjZGVmaW5lIExFRF9CTElOS19PTl9NSU4JTEVEX0JMSU5LX09OKDApCisjZGVmaW5lIExFRF9CTElOS19PTl9NQVgJTEVEX0JMSU5LX09OKDB4NykKKyNkZWZpbmUgTEVEX0JMSU5LX1BFUklPRF9NSU4JTEVEX0JMSU5LX1BFUklPRCgwKQorI2RlZmluZSBMRURfQkxJTktfUEVSSU9EX01BWAlMRURfQkxJTktfUEVSSU9EKDB4RSkKKyNkZWZpbmUgTEVEX1RPX09OKHgpCQkoKHggLSA2NikgLyA2NikKKyNkZWZpbmUgTEVEX1RPX1BFUklPRCh4KQkoKHggLSA5MzApIC8gNTMwKQorCisjZGVmaW5lIExFRDFfQkxJTktfRU4JCSgxIDw8IDEpCisjZGVmaW5lIExFRDJfQkxJTktfRU4JCSgxIDw8IDIpCisKK2VudW0geworCVNFVF9CUklHSFRORVNTLAorCVNFVF9CTElOSywKK307CisKK3N0cnVjdCBwbTg2MHhfbGVkIHsKKwlzdHJ1Y3QgbGVkX2NsYXNzZGV2IGNkZXY7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYzsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwlzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXA7CisJc3RydWN0IG11dGV4IGxvY2s7CisJY2hhciBuYW1lW01GRF9OQU1FX1NJWkVdOworCisJaW50IHBvcnQ7CisJaW50IGlzZXQ7CisJaW50IGNvbW1hbmQ7CisJaW50IG9mZnNldDsKKwl1bnNpZ25lZCBjaGFyIGJyaWdodG5lc3M7CisJdW5zaWduZWQgY2hhciBjdXJyZW50X2JyaWdodG5lc3M7CisKKwlpbnQgYmxpbmtfZGF0YTsKKwlpbnQgYmxpbmtfdGltZTsKKwlpbnQgYmxpbmtfb247CisJaW50IGJsaW5rX29mZjsKK307CisKKy8qIHJldHVybiBvZmZzZXQgb2YgY29sb3IgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fbGVkX29mZihpbnQgcG9ydCkKK3sKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCXN3aXRjaCAocG9ydCkgeworCWNhc2UgUE04NjA2X0xFRDFfUkVEOgorCWNhc2UgUE04NjA2X0xFRDFfR1JFRU46CisJY2FzZSBQTTg2MDZfTEVEMV9CTFVFOgorCQlyZXQgPSBwb3J0IC0gUE04NjA2X0xFRDFfUkVEICsgUE04NjA2X1JHQjFCOworCQlicmVhazsKKwljYXNlIFBNODYwNl9MRUQyX1JFRDoKKwljYXNlIFBNODYwNl9MRUQyX0dSRUVOOgorCWNhc2UgUE04NjA2X0xFRDJfQkxVRToKKwkJcmV0ID0gcG9ydCAtIFBNODYwNl9MRUQyX1JFRCArIFBNODYwNl9SR0IyQjsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qIHJldHVybiBvZmZzZXQgb2YgYmxpbmsgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9fYmxpbmtfb2ZmKGludCBwb3J0KQoreworCWludCByZXQgPSAtRUlOVkFMOworCisJc3dpdGNoIChwb3J0KSB7CisJY2FzZSBQTTg2MDZfTEVEMV9SRUQ6CisJY2FzZSBQTTg2MDZfTEVEMV9HUkVFTjoKKwljYXNlIFBNODYwNl9MRUQxX0JMVUU6CisJCXJldCA9IFBNODYwNl9SR0IxQTsKKwljYXNlIFBNODYwNl9MRUQyX1JFRDoKKwljYXNlIFBNODYwNl9MRUQyX0dSRUVOOgorCWNhc2UgUE04NjA2X0xFRDJfQkxVRToKKwkJcmV0ID0gUE04NjA2X1JHQjJBOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBfX2JsaW5rX2N0bF9tYXNrKGludCBwb3J0KQoreworCWludCByZXQgPSAtRUlOVkFMOworCisJc3dpdGNoIChwb3J0KSB7CisJY2FzZSBQTTg2MDZfTEVEMV9SRUQ6CisJY2FzZSBQTTg2MDZfTEVEMV9HUkVFTjoKKwljYXNlIFBNODYwNl9MRUQxX0JMVUU6CisJCXJldCA9IExFRDFfQkxJTktfRU47CisJCWJyZWFrOworCWNhc2UgUE04NjA2X0xFRDJfUkVEOgorCWNhc2UgUE04NjA2X0xFRDJfR1JFRU46CisJY2FzZSBQTTg2MDZfTEVEMl9CTFVFOgorCQlyZXQgPSBMRUQyX0JMSU5LX0VOOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2xlZF9zZXQoc3RydWN0IHBtODYweF9sZWQgKmxlZCwgaW50IGNvbW1hbmQpCit7CisJc3RydWN0IHBtODYweF9jaGlwICpjaGlwID0gbGVkLT5jaGlwOworCWludCBtYXNrLCByZXQ7CisKKwltdXRleF9sb2NrKCZsZWQtPmxvY2spOworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgU0VUX0JSSUdIVE5FU1M6CisJCWlmICgobGVkLT5jdXJyZW50X2JyaWdodG5lc3MgPT0gMCkgJiYgbGVkLT5icmlnaHRuZXNzKSB7CisJCQlpZiAobGVkLT5pc2V0KSB7CisJCQkJcmV0ID0gcG04NjB4X3NldF9iaXRzKGxlZC0+aTJjLCBsZWQtPm9mZnNldCwKKwkJCQkJCUxFRF9DVVJSRU5UX01BU0ssIGxlZC0+aXNldCk7CisJCQkJaWYgKHJldCA8IDApCisJCQkJCWdvdG8gb3V0OworCQkJfQorCQl9IGVsc2UgaWYgKGxlZC0+YnJpZ2h0bmVzcyA9PSAwKSB7CisJCQlyZXQgPSBwbTg2MHhfc2V0X2JpdHMobGVkLT5pMmMsIGxlZC0+b2Zmc2V0LAorCQkJCQkJTEVEX0NVUlJFTlRfTUFTSywgMCk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJfQorCQlyZXQgPSBwbTg2MHhfc2V0X2JpdHMobGVkLT5pMmMsIGxlZC0+b2Zmc2V0LCBMRURfUFdNX01BU0ssCisJCQkJCWxlZC0+YnJpZ2h0bmVzcyk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJCWxlZC0+Y3VycmVudF9icmlnaHRuZXNzID0gbGVkLT5icmlnaHRuZXNzOworCQlkZXZfZGJnKGNoaXAtPmRldiwgIlVwZGF0ZSBMRUQuIChyZWc6JWQsIGJyaWdodG5lc3M6JWQpXG4iLAorCQkJbGVkLT5vZmZzZXQsIGxlZC0+YnJpZ2h0bmVzcyk7CisJCWJyZWFrOworCWNhc2UgU0VUX0JMSU5LOgorCQlyZXQgPSBwbTg2MHhfc2V0X2JpdHMobGVkLT5pMmMsIGxlZC0+b2Zmc2V0LAorCQkJCUxFRF9CTElOS19NQVNLLCBsZWQtPmJsaW5rX2RhdGEpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0OworCisJCW1hc2sgPSBfX2JsaW5rX2N0bF9tYXNrKGxlZC0+cG9ydCk7CisJCXJldCA9IHBtODYweF9zZXRfYml0cyhsZWQtPmkyYywgUE04NjA2X1dMRUQzQiwgbWFzaywgbWFzayk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJCWRldl9kYmcoY2hpcC0+ZGV2LCAiTEVEIGJsaW5rIGRlbGF5IG9uOiVkbXMsIGRlbGF5IG9mZjolZG1zXG4iLAorCQkJbGVkLT5ibGlua19vbiwgbGVkLT5ibGlua19vZmYpOworCQlicmVhazsKKwl9CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZsZWQtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBwbTg2MHhfbGVkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBwbTg2MHhfbGVkICpsZWQ7CisKKwlsZWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHBtODYweF9sZWQsIHdvcmspOworCV9fbGVkX3NldChsZWQsIGxlZC0+Y29tbWFuZCk7Cit9CisKK3N0YXRpYyB2b2lkIHBtODYweF9sZWRfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYsCisJCQkgICBlbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQoreworCXN0cnVjdCBwbTg2MHhfbGVkICpkYXRhID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCBwbTg2MHhfbGVkLCBjZGV2KTsKKworCWRhdGEtPm9mZnNldCA9IF9fbGVkX29mZihkYXRhLT5wb3J0KTsKKwlkYXRhLT5icmlnaHRuZXNzID0gdmFsdWUgPj4gMzsKKwlkYXRhLT5jb21tYW5kID0gU0VUX0JSSUdIVE5FU1M7CisJc2NoZWR1bGVfd29yaygmZGF0YS0+d29yayk7Cit9CisKK3N0YXRpYyBpbnQgcG04NjB4X2xlZF9ibGluayhzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpjZGV2LAorCQkJICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29uLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgKmRlbGF5X29mZikKK3sKKwlzdHJ1Y3QgcG04NjB4X2xlZCAqZGF0YSA9IGNvbnRhaW5lcl9vZihjZGV2LCBzdHJ1Y3QgcG04NjB4X2xlZCwgY2Rldik7CisJaW50IHBlcmlvZCwgb247CisKKwlvbiA9ICpkZWxheV9vbjsKKwlpZiAoKG9uIDwgTEVEX0JMSU5LX09OX01JTikgfHwgKG9uID4gTEVEX0JMSU5LX09OX01BWCkpCisJCXJldHVybiAtRUlOVkFMOworCisJb24gPSBMRURfVE9fT04ob24pOworCW9uID0gTEVEX0JMSU5LX09OKG9uKTsKKworCXBlcmlvZCA9IG9uICsgKmRlbGF5X29mZjsKKwlpZiAoKHBlcmlvZCA8IExFRF9CTElOS19QRVJJT0RfTUlOKSB8fCAocGVyaW9kID4gTEVEX0JMSU5LX1BFUklPRF9NQVgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwZXJpb2QgPSBMRURfVE9fUEVSSU9EKHBlcmlvZCk7CisJcGVyaW9kID0gTEVEX0JMSU5LX1BFUklPRChwZXJpb2QpOworCisJZGF0YS0+b2Zmc2V0ID0gX19ibGlua19vZmYoZGF0YS0+cG9ydCk7CisJZGF0YS0+Ymxpbmtfb24gPSBvbjsKKwlkYXRhLT5ibGlua19vZmYgPSBwZXJpb2QgLSBkYXRhLT5ibGlua19vbjsKKwlkYXRhLT5ibGlua19kYXRhID0gKHBlcmlvZCA8PCAzKSB8IGRhdGEtPmJsaW5rX29uOworCWRhdGEtPmNvbW1hbmQgPSBTRVRfQkxJTks7CisJc2NoZWR1bGVfd29yaygmZGF0YS0+d29yayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2NoZWNrX2RldmljZShzdHJ1Y3QgcG04NjB4X2xlZF9wZGF0YSAqcGRhdGEsIGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHBtODYweF9sZWRfcGRhdGEgKnAgPSBwZGF0YTsKKwlpbnQgcmV0ID0gLUVJTlZBTDsKKworCXdoaWxlIChwICYmIHAtPmlkKSB7CisJCWlmICgocC0+aWQgIT0gUE04NjA2X0lEX0xFRCkgfHwgKHAtPmZsYWdzIDwgMCkpCisJCQlicmVhazsKKworCQlpZiAoIXN0cm5jbXAobmFtZSwgcG04NjB4X2xlZF9uYW1lW3AtPmZsYWdzXSwKKwkJCU1GRF9OQU1FX1NJWkUpKSB7CisJCQlyZXQgPSAoaW50KXAtPmZsYWdzOworCQkJYnJlYWs7CisJCX0KKwkJcCsrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHBtODYweF9sZWRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IHBtODYweF9wbGF0Zm9ybV9kYXRhICpwbTg2MHhfcGRhdGE7CisJc3RydWN0IHBtODYweF9sZWRfcGRhdGEgKnBkYXRhOworCXN0cnVjdCBwbTg2MHhfbGVkICpkYXRhOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIEkvTyByZXNvdXJjZSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocGRldi0+ZGV2LnBhcmVudC0+cGxhdGZvcm1fZGF0YSkgeworCQlwbTg2MHhfcGRhdGEgPSBwZGV2LT5kZXYucGFyZW50LT5wbGF0Zm9ybV9kYXRhOworCQlwZGF0YSA9IHBtODYweF9wZGF0YS0+bGVkOworCX0gZWxzZQorCQlwZGF0YSA9IE5VTEw7CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBtODYweF9sZWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGF0YSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzdHJuY3B5KGRhdGEtPm5hbWUsIHJlcy0+bmFtZSwgTUZEX05BTUVfU0laRSk7CisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGRhdGEpOworCWRhdGEtPmNoaXAgPSBjaGlwOworCWRhdGEtPmkyYyA9IChjaGlwLT5pZCA9PSBDSElQX1BNODYwNikgPyBjaGlwLT5jbGllbnQgOiBjaGlwLT5jb21wYW5pb247CisJZGF0YS0+aXNldCA9IHBkYXRhLT5pc2V0OworCWRhdGEtPnBvcnQgPSBfX2NoZWNrX2RldmljZShwZGF0YSwgZGF0YS0+bmFtZSk7CisJaWYgKGRhdGEtPnBvcnQgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA9IDA7CisJZGF0YS0+Y2Rldi5uYW1lID0gZGF0YS0+bmFtZTsKKwlkYXRhLT5jZGV2LmJyaWdodG5lc3Nfc2V0ID0gcG04NjB4X2xlZF9zZXQ7CisJZGF0YS0+Y2Rldi5ibGlua19zZXQgPSBwbTg2MHhfbGVkX2JsaW5rOworCW11dGV4X2luaXQoJmRhdGEtPmxvY2spOworCUlOSVRfV09SSygmZGF0YS0+d29yaywgcG04NjB4X2xlZF93b3JrKTsKKworCXJldCA9IGxlZF9jbGFzc2Rldl9yZWdpc3RlcihjaGlwLT5kZXYsICZkYXRhLT5jZGV2KTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgTEVEOiAlZFxuIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCXJldHVybiAwOworb3V0OgorCWtmcmVlKGRhdGEpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcG04NjB4X2xlZF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgcG04NjB4X2xlZCAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmRhdGEtPmNkZXYpOworCWtmcmVlKGRhdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBtODYweF9sZWRfZHJpdmVyID0geworCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gIjg4cG04NjB4LWxlZCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCT0gcG04NjB4X2xlZF9wcm9iZSwKKwkucmVtb3ZlCT0gcG04NjB4X2xlZF9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwbTg2MHhfbGVkX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZwbTg2MHhfbGVkX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChwbTg2MHhfbGVkX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgcG04NjB4X2xlZF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnBtODYweF9sZWRfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHBtODYweF9sZWRfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiTEVEIGRyaXZlciBmb3IgTWFydmVsbCBQTTg2MHgiKTsKK01PRFVMRV9BVVRIT1IoIkhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06ODhwbTg2MHgtbGVkIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmMKaW5kZXggNTczOGQ4Yi4uOTIxMzczZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuYwpAQCAtOTQ4LDEwICs5NDgsMTYgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2FybmluZyAhIFRlbXBlcmF0dXJlIHdheSBhYm92ZSBtYXhpbXVtICglZCkgIVxuIiwKIAkJICAgICAgIHRlbXBfY29tYmkgPj4gMTYpOwogCQlzdGF0ZTAtPm92ZXJ0ZW1wICs9IENQVV9NQVhfT1ZFUlRFTVAgLyA0OwotCX0gZWxzZSBpZiAodGVtcF9jb21iaSA+IChzdGF0ZTAtPm1wdS50bWF4IDw8IDE2KSkKKwl9IGVsc2UgaWYgKHRlbXBfY29tYmkgPiAoc3RhdGUwLT5tcHUudG1heCA8PCAxNikpIHsKIAkJc3RhdGUwLT5vdmVydGVtcCsrOwotCWVsc2UKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiVGVtcGVyYXR1cmUgJWQgYWJvdmUgbWF4ICVkLiBvdmVydGVtcCAlZFxuIiwKKwkJICAgICAgIHRlbXBfY29tYmkgPj4gMTYsIHN0YXRlMC0+bXB1LnRtYXgsIHN0YXRlMC0+b3ZlcnRlbXApOworCX0gZWxzZSB7CisJCWlmIChzdGF0ZTAtPm92ZXJ0ZW1wKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVGVtcGVyYXR1cmUgYmFjayBkb3duIHRvICVkXG4iLAorCQkJICAgICAgIHRlbXBfY29tYmkgPj4gMTYpOwogCQlzdGF0ZTAtPm92ZXJ0ZW1wID0gMDsKKwl9CiAJaWYgKHN0YXRlMC0+b3ZlcnRlbXAgPj0gQ1BVX01BWF9PVkVSVEVNUCkKIAkJY3JpdGljYWxfc3RhdGUgPSAxOwogCWlmIChzdGF0ZTAtPm92ZXJ0ZW1wID4gMCkgewpAQCAtMTAyMywxMCArMTAyOSwxNiBAQAogCQkgICAgICAgIiAoJWQpICFcbiIsCiAJCSAgICAgICBzdGF0ZS0+aW5kZXgsIHRlbXAgPj4gMTYpOwogCQlzdGF0ZS0+b3ZlcnRlbXAgKz0gQ1BVX01BWF9PVkVSVEVNUCAvIDQ7Ci0JfSBlbHNlIGlmICh0ZW1wID4gKHN0YXRlLT5tcHUudG1heCA8PCAxNikpCisJfSBlbHNlIGlmICh0ZW1wID4gKHN0YXRlLT5tcHUudG1heCA8PCAxNikpIHsKIAkJc3RhdGUtPm92ZXJ0ZW1wKys7Ci0JZWxzZQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJDUFUgJWQgdGVtcGVyYXR1cmUgJWQgYWJvdmUgbWF4ICVkLiBvdmVydGVtcCAlZFxuIiwKKwkJICAgICAgIHN0YXRlLT5pbmRleCwgdGVtcCA+PiAxNiwgc3RhdGUtPm1wdS50bWF4LCBzdGF0ZS0+b3ZlcnRlbXApOworCX0gZWxzZSB7CisJCWlmIChzdGF0ZS0+b3ZlcnRlbXApCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJDUFUgJWQgdGVtcGVyYXR1cmUgYmFjayBkb3duIHRvICVkXG4iLAorCQkJICAgICAgIHN0YXRlLT5pbmRleCwgdGVtcCA+PiAxNik7CiAJCXN0YXRlLT5vdmVydGVtcCA9IDA7CisJfQogCWlmIChzdGF0ZS0+b3ZlcnRlbXAgPj0gQ1BVX01BWF9PVkVSVEVNUCkKIAkJY3JpdGljYWxfc3RhdGUgPSAxOwogCWlmIChzdGF0ZS0+b3ZlcnRlbXAgPiAwKSB7CkBAIC0xMDg1LDEwICsxMDk3LDE2IEBACiAJCSAgICAgICAiICglZCkgIVxuIiwKIAkJICAgICAgIHN0YXRlLT5pbmRleCwgdGVtcCA+PiAxNik7CiAJCXN0YXRlLT5vdmVydGVtcCA9IENQVV9NQVhfT1ZFUlRFTVAgLyA0OwotCX0gZWxzZSBpZiAodGVtcCA+IChzdGF0ZS0+bXB1LnRtYXggPDwgMTYpKQorCX0gZWxzZSBpZiAodGVtcCA+IChzdGF0ZS0+bXB1LnRtYXggPDwgMTYpKSB7CiAJCXN0YXRlLT5vdmVydGVtcCsrOwotCWVsc2UKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ1BVICVkIHRlbXBlcmF0dXJlICVkIGFib3ZlIG1heCAlZC4gb3ZlcnRlbXAgJWRcbiIsCisJCSAgICAgICBzdGF0ZS0+aW5kZXgsIHRlbXAgPj4gMTYsIHN0YXRlLT5tcHUudG1heCwgc3RhdGUtPm92ZXJ0ZW1wKTsKKwl9IGVsc2UgeworCQlpZiAoc3RhdGUtPm92ZXJ0ZW1wKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ1BVICVkIHRlbXBlcmF0dXJlIGJhY2sgZG93biB0byAlZFxuIiwKKwkJCSAgICAgICBzdGF0ZS0+aW5kZXgsIHRlbXAgPj4gMTYpOwogCQlzdGF0ZS0+b3ZlcnRlbXAgPSAwOworCX0KIAlpZiAoc3RhdGUtPm92ZXJ0ZW1wID49IENQVV9NQVhfT1ZFUlRFTVApCiAJCWNyaXRpY2FsX3N0YXRlID0gMTsKIAlpZiAoc3RhdGUtPm92ZXJ0ZW1wID4gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5oIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fcG03Mi5oCmluZGV4IDM5M2NjOWQuLmRmMzY4MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX3BtNzIuaAorKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9wbTcyLmgKQEAgLTI2OSw3ICsyNjksNyBAQAogI2RlZmluZSBDUFVfVEVNUF9ISVNUT1JZX1NJWkUJCTIKICNkZWZpbmUgQ1BVX1BPV0VSX0hJU1RPUllfU0laRQkJMTAKICNkZWZpbmUgQ1BVX1BJRF9JTlRFUlZBTAkJMQotI2RlZmluZSBDUFVfTUFYX09WRVJURU1QCQkzMAorI2RlZmluZSBDUFVfTUFYX09WRVJURU1QCQk5MAogCiAjZGVmaW5lIENQVUFfUFVNUF9SUE1fSU5ERVgJCTcKICNkZWZpbmUgQ1BVQl9QVU1QX1JQTV9JTkRFWAkJOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY29yZS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fY29yZS5jCmluZGV4IDQzN2Y1NWMuLjQxOTc5NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX2NvcmUuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9jb3JlLmMKQEAgLTMyMSw2ICszMjEsNyBAQAogCWtyZWZfaW5pdCgmbmV3X3NyLT5yZWYpOwogCWxpc3RfYWRkKCZuZXdfc3ItPmxpbmssICZ3Zl9zZW5zb3JzKTsKIAorCXN5c2ZzX2F0dHJfaW5pdCgmbmV3X3NyLT5hdHRyLmF0dHIpOwogCW5ld19zci0+YXR0ci5hdHRyLm5hbWUgPSBuZXdfc3ItPm5hbWU7CiAJbmV3X3NyLT5hdHRyLmF0dHIubW9kZSA9IDA0NDQ7CiAJbmV3X3NyLT5hdHRyLnNob3cgPSB3Zl9zaG93X3NlbnNvcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9jb250cm9scy5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X2NvbnRyb2xzLmMKaW5kZXggNmM2OGI5ZS4uNDMxMzdiNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X2NvbnRyb2xzLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X2NvbnRyb2xzLmMKQEAgLTE3Myw2ICsxNzMsNyBAQAogCiAJZmN0LT5mYW5fdHlwZSA9IHB3bV9mYW47CiAJZmN0LT5jdHJsLnR5cGUgPSBwd21fZmFuID8gV0ZfQ09OVFJPTF9QV01fRkFOIDogV0ZfQ09OVFJPTF9SUE1fRkFOOworCXN5c2ZzX2F0dHJfaW5pdCgmZmN0LT5jdHJsLmF0dHIuYXR0cik7CiAKIAkvKiBXZSB1c2UgdGhlIG5hbWUgJiBsb2NhdGlvbiBoZXJlIHRoZSBzYW1lIHdheSB3ZSBkbyBmb3IgU01VIHNlbnNvcnMsCiAJICogc2VlIHRoZSBjb21tZW50IGluIHdpbmRmYXJtX3NtdV9zZW5zb3JzLmMuIFRoZSBsb2NhdGlvbnMgYXJlIGEgYml0CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWNyeXB0LmMgYi9kcml2ZXJzL21kL2RtLWNyeXB0LmMKaW5kZXggYTkzNjM3Mi4uM2JkYmI2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1jcnlwdC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tY3J5cHQuYwpAQCAtMTE2MCw4ICsxMTYwLDcgQEAKIAl9CiAJY2MtPnN0YXJ0ID0gdG1wbGw7CiAKLQlpZiAoZG1fZ2V0X2RldmljZSh0aSwgYXJndlszXSwgY2MtPnN0YXJ0LCB0aS0+bGVuLAotCQkJICBkbV90YWJsZV9nZXRfbW9kZSh0aS0+dGFibGUpLCAmY2MtPmRldikpIHsKKwlpZiAoZG1fZ2V0X2RldmljZSh0aSwgYXJndlszXSwgZG1fdGFibGVfZ2V0X21vZGUodGktPnRhYmxlKSwgJmNjLT5kZXYpKSB7CiAJCXRpLT5lcnJvciA9ICJEZXZpY2UgbG9va3VwIGZhaWxlZCI7CiAJCWdvdG8gYmFkX2RldmljZTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLWRlbGF5LmMgYi9kcml2ZXJzL21kL2RtLWRlbGF5LmMKaW5kZXggZWJlNzM4MS4uODUyMDUyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1kZWxheS5jCisrKyBiL2RyaXZlcnMvbWQvZG0tZGVsYXkuYwpAQCAtMTU2LDggKzE1Niw4IEBACiAJCWdvdG8gYmFkOwogCX0KIAotCWlmIChkbV9nZXRfZGV2aWNlKHRpLCBhcmd2WzBdLCBkYy0+c3RhcnRfcmVhZCwgdGktPmxlbiwKLQkJCSAgZG1fdGFibGVfZ2V0X21vZGUodGktPnRhYmxlKSwgJmRjLT5kZXZfcmVhZCkpIHsKKwlpZiAoZG1fZ2V0X2RldmljZSh0aSwgYXJndlswXSwgZG1fdGFibGVfZ2V0X21vZGUodGktPnRhYmxlKSwKKwkJCSAgJmRjLT5kZXZfcmVhZCkpIHsKIAkJdGktPmVycm9yID0gIkRldmljZSBsb29rdXAgZmFpbGVkIjsKIAkJZ290byBiYWQ7CiAJfQpAQCAtMTc3LDggKzE3Nyw4IEBACiAJCWdvdG8gYmFkX2Rldl9yZWFkOwogCX0KIAotCWlmIChkbV9nZXRfZGV2aWNlKHRpLCBhcmd2WzNdLCBkYy0+c3RhcnRfd3JpdGUsIHRpLT5sZW4sCi0JCQkgIGRtX3RhYmxlX2dldF9tb2RlKHRpLT50YWJsZSksICZkYy0+ZGV2X3dyaXRlKSkgeworCWlmIChkbV9nZXRfZGV2aWNlKHRpLCBhcmd2WzNdLCBkbV90YWJsZV9nZXRfbW9kZSh0aS0+dGFibGUpLAorCQkJICAmZGMtPmRldl93cml0ZSkpIHsKIAkJdGktPmVycm9yID0gIldyaXRlIGRldmljZSBsb29rdXAgZmFpbGVkIjsKIAkJZ290byBiYWRfZGV2X3JlYWQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1pb2N0bC5jIGIvZHJpdmVycy9tZC9kbS1pb2N0bC5jCmluZGV4IDFkNjY5MzIuLmQ3NTAwZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0taW9jdGwuYworKysgYi9kcml2ZXJzL21kL2RtLWlvY3RsLmMKQEAgLTI4NSw3ICsyODUsOCBAQAogCXVwX3dyaXRlKCZfaGFzaF9sb2NrKTsKIH0KIAotc3RhdGljIGludCBkbV9oYXNoX3JlbmFtZSh1aW50MzJfdCBjb29raWUsIGNvbnN0IGNoYXIgKm9sZCwgY29uc3QgY2hhciAqbmV3KQorc3RhdGljIGludCBkbV9oYXNoX3JlbmFtZSh1aW50MzJfdCBjb29raWUsIHVpbnQzMl90ICpmbGFncywgY29uc3QgY2hhciAqb2xkLAorCQkJICBjb25zdCBjaGFyICpuZXcpCiB7CiAJY2hhciAqbmV3X25hbWUsICpvbGRfbmFtZTsKIAlzdHJ1Y3QgaGFzaF9jZWxsICpoYzsKQEAgLTM0NCw3ICszNDUsOCBAQAogCQlkbV90YWJsZV9wdXQodGFibGUpOwogCX0KIAotCWRtX2tvYmplY3RfdWV2ZW50KGhjLT5tZCwgS09CSl9DSEFOR0UsIGNvb2tpZSk7CisJaWYgKCFkbV9rb2JqZWN0X3VldmVudChoYy0+bWQsIEtPQkpfQ0hBTkdFLCBjb29raWUpKQorCQkqZmxhZ3MgfD0gRE1fVUVWRU5UX0dFTkVSQVRFRF9GTEFHOwogCiAJZG1fcHV0KGhjLT5tZCk7CiAJdXBfd3JpdGUoJl9oYXNoX2xvY2spOwpAQCAtNzM2LDEwICs3MzgsMTAgQEAKIAlfX2hhc2hfcmVtb3ZlKGhjKTsKIAl1cF93cml0ZSgmX2hhc2hfbG9jayk7CiAKLQlkbV9rb2JqZWN0X3VldmVudChtZCwgS09CSl9SRU1PVkUsIHBhcmFtLT5ldmVudF9ucik7CisJaWYgKCFkbV9rb2JqZWN0X3VldmVudChtZCwgS09CSl9SRU1PVkUsIHBhcmFtLT5ldmVudF9ucikpCisJCXBhcmFtLT5mbGFncyB8PSBETV9VRVZFTlRfR0VORVJBVEVEX0ZMQUc7CiAKIAlkbV9wdXQobWQpOwotCXBhcmFtLT5kYXRhX3NpemUgPSAwOwogCXJldHVybiAwOwogfQogCkBAIC03NzMsNyArNzc1LDkgQEAKIAkJcmV0dXJuIHI7CiAKIAlwYXJhbS0+ZGF0YV9zaXplID0gMDsKLQlyZXR1cm4gZG1faGFzaF9yZW5hbWUocGFyYW0tPmV2ZW50X25yLCBwYXJhbS0+bmFtZSwgbmV3X25hbWUpOworCisJcmV0dXJuIGRtX2hhc2hfcmVuYW1lKHBhcmFtLT5ldmVudF9uciwgJnBhcmFtLT5mbGFncywgcGFyYW0tPm5hbWUsCisJCQkgICAgICBuZXdfbmFtZSk7CiB9CiAKIHN0YXRpYyBpbnQgZGV2X3NldF9nZW9tZXRyeShzdHJ1Y3QgZG1faW9jdGwgKnBhcmFtLCBzaXplX3QgcGFyYW1fc2l6ZSkKQEAgLTg5NywxNiArOTAxLDE3IEBACiAJCQlzZXRfZGlza19ybyhkbV9kaXNrKG1kKSwgMSk7CiAJfQogCi0JaWYgKGRtX3N1c3BlbmRlZF9tZChtZCkpCisJaWYgKGRtX3N1c3BlbmRlZF9tZChtZCkpIHsKIAkJciA9IGRtX3Jlc3VtZShtZCk7CisJCWlmICghciAmJiAhZG1fa29iamVjdF91ZXZlbnQobWQsIEtPQkpfQ0hBTkdFLCBwYXJhbS0+ZXZlbnRfbnIpKQorCQkJcGFyYW0tPmZsYWdzIHw9IERNX1VFVkVOVF9HRU5FUkFURURfRkxBRzsKKwl9CiAKIAlpZiAob2xkX21hcCkKIAkJZG1fdGFibGVfZGVzdHJveShvbGRfbWFwKTsKIAotCWlmICghcikgewotCQlkbV9rb2JqZWN0X3VldmVudChtZCwgS09CSl9DSEFOR0UsIHBhcmFtLT5ldmVudF9ucik7CisJaWYgKCFyKQogCQlyID0gX19kZXZfc3RhdHVzKG1kLCBwYXJhbSk7Ci0JfQogCiAJZG1fcHV0KG1kKTsKIAlyZXR1cm4gcjsKQEAgLTE0NzYsNiArMTQ4MSw3IEBACiB7CiAJLyogQWx3YXlzIGNsZWFyIHRoaXMgZmxhZyAqLwogCXBhcmFtLT5mbGFncyAmPSB+RE1fQlVGRkVSX0ZVTExfRkxBRzsKKwlwYXJhbS0+ZmxhZ3MgJj0gfkRNX1VFVkVOVF9HRU5FUkFURURfRkxBRzsKIAogCS8qIElnbm9yZXMgcGFyYW1ldGVycyAqLwogCWlmIChjbWQgPT0gRE1fUkVNT1ZFX0FMTF9DTUQgfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0tbGluZWFyLmMgYi9kcml2ZXJzL21kL2RtLWxpbmVhci5jCmluZGV4IDgyZjdkNmUuLjkyMDBkYmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tbGluZWFyLmMKKysrIGIvZHJpdmVycy9tZC9kbS1saW5lYXIuYwpAQCAtNDcsOCArNDcsNyBAQAogCX0KIAlsYy0+c3RhcnQgPSB0bXA7CiAKLQlpZiAoZG1fZ2V0X2RldmljZSh0aSwgYXJndlswXSwgbGMtPnN0YXJ0LCB0aS0+bGVuLAotCQkJICBkbV90YWJsZV9nZXRfbW9kZSh0aS0+dGFibGUpLCAmbGMtPmRldikpIHsKKwlpZiAoZG1fZ2V0X2RldmljZSh0aSwgYXJndlswXSwgZG1fdGFibGVfZ2V0X21vZGUodGktPnRhYmxlKSwgJmxjLT5kZXYpKSB7CiAJCXRpLT5lcnJvciA9ICJkbS1saW5lYXI6IERldmljZSBsb29rdXAgZmFpbGVkIjsKIAkJZ290byBiYWQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1sb2cuYyBiL2RyaXZlcnMvbWQvZG0tbG9nLmMKaW5kZXggNzAzNTU4Mi4uNWEwOGJlMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1sb2cuYworKysgYi9kcml2ZXJzL21kL2RtLWxvZy5jCkBAIC01NDMsOCArNTQzLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JciA9IGRtX2dldF9kZXZpY2UodGksIGFyZ3ZbMF0sIDAsIDAgLyogRklYTUUgKi8sCi0JCQkgIEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSwgJmRldik7CisJciA9IGRtX2dldF9kZXZpY2UodGksIGFyZ3ZbMF0sIEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSwgJmRldik7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLW1wYXRoLmMgYi9kcml2ZXJzL21kL2RtLW1wYXRoLmMKaW5kZXggZTgxMzQ1YS4uODI2YmNlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1tcGF0aC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tbXBhdGguYwpAQCAtNjksNiArNjksNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgcHJpb3JpdHlfZ3JvdXBzOwogCXVuc2lnbmVkIHBnX2luaXRfcmVxdWlyZWQ7CS8qIHBnX2luaXQgbmVlZHMgY2FsbGluZz8gKi8KIAl1bnNpZ25lZCBwZ19pbml0X2luX3Byb2dyZXNzOwkvKiBPbmx5IG9uZSBwZ19pbml0IGFsbG93ZWQgYXQgb25jZSAqLworCXdhaXRfcXVldWVfaGVhZF90IHBnX2luaXRfd2FpdDsJLyogV2FpdCBmb3IgcGdfaW5pdCBjb21wbGV0aW9uICovCiAKIAl1bnNpZ25lZCBucl92YWxpZF9wYXRoczsJLyogVG90YWwgbnVtYmVyIG9mIHVzYWJsZSBwYXRocyAqLwogCXN0cnVjdCBwZ3BhdGggKmN1cnJlbnRfcGdwYXRoOwpAQCAtOTUsOCArOTYsNiBAQAogCW1lbXBvb2xfdCAqbXBpb19wb29sOwogCiAJc3RydWN0IG11dGV4IHdvcmtfbXV0ZXg7Ci0KLQl1bnNpZ25lZCBzdXNwZW5kZWQ7CS8qIERvbid0IGNyZWF0ZSBuZXcgSS9PIGludGVybmFsbHkgd2hlbiBzZXQuICovCiB9OwogCiAvKgpAQCAtMjAyLDYgKzIwMSw3IEBACiAJCW0tPnF1ZXVlX2lvID0gMTsKIAkJSU5JVF9XT1JLKCZtLT5wcm9jZXNzX3F1ZXVlZF9pb3MsIHByb2Nlc3NfcXVldWVkX2lvcyk7CiAJCUlOSVRfV09SSygmbS0+dHJpZ2dlcl9ldmVudCwgdHJpZ2dlcl9ldmVudCk7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm0tPnBnX2luaXRfd2FpdCk7CiAJCW11dGV4X2luaXQoJm0tPndvcmtfbXV0ZXgpOwogCQltLT5tcGlvX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woTUlOX0lPUywgX21waW9fY2FjaGUpOwogCQlpZiAoIW0tPm1waW9fcG9vbCkgewpAQCAtMjM1LDYgKzIzNSwyMSBAQAogICogUGF0aCBzZWxlY3Rpb24KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCitzdGF0aWMgdm9pZCBfX3BnX2luaXRfYWxsX3BhdGhzKHN0cnVjdCBtdWx0aXBhdGggKm0pCit7CisJc3RydWN0IHBncGF0aCAqcGdwYXRoOworCisJbS0+cGdfaW5pdF9jb3VudCsrOworCW0tPnBnX2luaXRfcmVxdWlyZWQgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkocGdwYXRoLCAmbS0+Y3VycmVudF9wZy0+cGdwYXRocywgbGlzdCkgeworCQkvKiBTa2lwIGZhaWxlZCBwYXRocyAqLworCQlpZiAoIXBncGF0aC0+aXNfYWN0aXZlKQorCQkJY29udGludWU7CisJCWlmIChxdWV1ZV93b3JrKGttcGF0aF9oYW5kbGVyZCwgJnBncGF0aC0+YWN0aXZhdGVfcGF0aCkpCisJCQltLT5wZ19pbml0X2luX3Byb2dyZXNzKys7CisJfQorfQorCiBzdGF0aWMgdm9pZCBfX3N3aXRjaF9wZyhzdHJ1Y3QgbXVsdGlwYXRoICptLCBzdHJ1Y3QgcGdwYXRoICpwZ3BhdGgpCiB7CiAJbS0+Y3VycmVudF9wZyA9IHBncGF0aC0+cGc7CkBAIC00MzksNyArNDU0LDcgQEAKIHsKIAlzdHJ1Y3QgbXVsdGlwYXRoICptID0KIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBtdWx0aXBhdGgsIHByb2Nlc3NfcXVldWVkX2lvcyk7Ci0Jc3RydWN0IHBncGF0aCAqcGdwYXRoID0gTlVMTCwgKnRtcDsKKwlzdHJ1Y3QgcGdwYXRoICpwZ3BhdGggPSBOVUxMOwogCXVuc2lnbmVkIG11c3RfcXVldWUgPSAxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTQ1NywxNCArNDcyLDkgQEAKIAkgICAgKCFwZ3BhdGggJiYgIW0tPnF1ZXVlX2lmX25vX3BhdGgpKQogCQltdXN0X3F1ZXVlID0gMDsKIAotCWlmIChtLT5wZ19pbml0X3JlcXVpcmVkICYmICFtLT5wZ19pbml0X2luX3Byb2dyZXNzICYmIHBncGF0aCkgewotCQltLT5wZ19pbml0X2NvdW50Kys7Ci0JCW0tPnBnX2luaXRfcmVxdWlyZWQgPSAwOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgJnBncGF0aC0+cGctPnBncGF0aHMsIGxpc3QpIHsKLQkJCWlmIChxdWV1ZV93b3JrKGttcGF0aF9oYW5kbGVyZCwgJnRtcC0+YWN0aXZhdGVfcGF0aCkpCi0JCQkJbS0+cGdfaW5pdF9pbl9wcm9ncmVzcysrOwotCQl9Ci0JfQorCWlmIChtLT5wZ19pbml0X3JlcXVpcmVkICYmICFtLT5wZ19pbml0X2luX3Byb2dyZXNzICYmIHBncGF0aCkKKwkJX19wZ19pbml0X2FsbF9wYXRocyhtKTsKKwogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm0tPmxvY2ssIGZsYWdzKTsKIAlpZiAoIW11c3RfcXVldWUpCkBAIC01OTcsOCArNjA3LDggQEAKIAlpZiAoIXApCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0JciA9IGRtX2dldF9kZXZpY2UodGksIHNoaWZ0KGFzKSwgdGktPmJlZ2luLCB0aS0+bGVuLAotCQkJICBkbV90YWJsZV9nZXRfbW9kZSh0aS0+dGFibGUpLCAmcC0+cGF0aC5kZXYpOworCXIgPSBkbV9nZXRfZGV2aWNlKHRpLCBzaGlmdChhcyksIGRtX3RhYmxlX2dldF9tb2RlKHRpLT50YWJsZSksCisJCQkgICZwLT5wYXRoLmRldik7CiAJaWYgKHIpIHsKIAkJdGktPmVycm9yID0gImVycm9yIGdldHRpbmcgZGV2aWNlIjsKIAkJZ290byBiYWQ7CkBAIC04OTAsOSArOTAwLDM0IEBACiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyB2b2lkIGZsdXNoX211bHRpcGF0aF93b3JrKHZvaWQpCitzdGF0aWMgdm9pZCBtdWx0aXBhdGhfd2FpdF9mb3JfcGdfaW5pdF9jb21wbGV0aW9uKHN0cnVjdCBtdWx0aXBhdGggKm0pCit7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWFkZF93YWl0X3F1ZXVlKCZtLT5wZ19pbml0X3dhaXQsICZ3YWl0KTsKKworCXdoaWxlICgxKSB7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbS0+bG9jaywgZmxhZ3MpOworCQlpZiAoIW0tPnBnX2luaXRfaW5fcHJvZ3Jlc3MpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm0tPmxvY2ssIGZsYWdzKTsKKwkJCWJyZWFrOworCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm0tPmxvY2ssIGZsYWdzKTsKKworCQlpb19zY2hlZHVsZSgpOworCX0KKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCisJcmVtb3ZlX3dhaXRfcXVldWUoJm0tPnBnX2luaXRfd2FpdCwgJndhaXQpOworfQorCitzdGF0aWMgdm9pZCBmbHVzaF9tdWx0aXBhdGhfd29yayhzdHJ1Y3QgbXVsdGlwYXRoICptKQogewogCWZsdXNoX3dvcmtxdWV1ZShrbXBhdGhfaGFuZGxlcmQpOworCW11bHRpcGF0aF93YWl0X2Zvcl9wZ19pbml0X2NvbXBsZXRpb24obSk7CiAJZmx1c2hfd29ya3F1ZXVlKGttdWx0aXBhdGhkKTsKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogfQpAQCAtOTAxLDcgKzkzNiw3IEBACiB7CiAJc3RydWN0IG11bHRpcGF0aCAqbSA9IHRpLT5wcml2YXRlOwogCi0JZmx1c2hfbXVsdGlwYXRoX3dvcmsoKTsKKwlmbHVzaF9tdWx0aXBhdGhfd29yayhtKTsKIAlmcmVlX211bHRpcGF0aChtKTsKIH0KIApAQCAtMTEyOCw4ICsxMTYzLDcgQEAKIAogc3RhdGljIHZvaWQgcGdfaW5pdF9kb25lKHZvaWQgKmRhdGEsIGludCBlcnJvcnMpCiB7Ci0Jc3RydWN0IGRtX3BhdGggKnBhdGggPSBkYXRhOwotCXN0cnVjdCBwZ3BhdGggKnBncGF0aCA9IHBhdGhfdG9fcGdwYXRoKHBhdGgpOworCXN0cnVjdCBwZ3BhdGggKnBncGF0aCA9IGRhdGE7CiAJc3RydWN0IHByaW9yaXR5X2dyb3VwICpwZyA9IHBncGF0aC0+cGc7CiAJc3RydWN0IG11bHRpcGF0aCAqbSA9IHBnLT5tOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0xMTQzLDggKzExNzcsOCBAQAogCQkJZXJyb3JzID0gMDsKIAkJCWJyZWFrOwogCQl9Ci0JCURNRVJSKCJDYW5ub3QgZmFpbG92ZXIgZGV2aWNlIGJlY2F1c2Ugc2NzaV9kaF8lcyB3YXMgbm90ICIKLQkJICAgICAgImxvYWRlZC4iLCBtLT5od19oYW5kbGVyX25hbWUpOworCQlETUVSUigiQ291bGQgbm90IGZhaWxvdmVyIHRoZSBkZXZpY2U6IEhhbmRsZXIgc2NzaV9kaF8lcyAiCisJCSAgICAgICJFcnJvciAlZC4iLCBtLT5od19oYW5kbGVyX25hbWUsIGVycm9ycyk7CiAJCS8qCiAJCSAqIEZhaWwgcGF0aCBmb3Igbm93LCBzbyB3ZSBkbyBub3QgcGluZyBwb25nCiAJCSAqLwpAQCAtMTE4MSwxNCArMTIxNSwyNCBAQAogCQkJbS0+Y3VycmVudF9wZ3BhdGggPSBOVUxMOwogCQkJbS0+Y3VycmVudF9wZyA9IE5VTEw7CiAJCX0KLQl9IGVsc2UgaWYgKCFtLT5wZ19pbml0X3JlcXVpcmVkKSB7Ci0JCW0tPnF1ZXVlX2lvID0gMDsKKwl9IGVsc2UgaWYgKCFtLT5wZ19pbml0X3JlcXVpcmVkKQogCQlwZy0+YnlwYXNzZWQgPSAwOwotCX0KIAotCW0tPnBnX2luaXRfaW5fcHJvZ3Jlc3MtLTsKLQlpZiAoIW0tPnBnX2luaXRfaW5fcHJvZ3Jlc3MpCi0JCXF1ZXVlX3dvcmsoa211bHRpcGF0aGQsICZtLT5wcm9jZXNzX3F1ZXVlZF9pb3MpOworCWlmICgtLW0tPnBnX2luaXRfaW5fcHJvZ3Jlc3MpCisJCS8qIEFjdGl2YXRpb25zIG9mIG90aGVyIHBhdGhzIGFyZSBzdGlsbCBvbiBnb2luZyAqLworCQlnb3RvIG91dDsKKworCWlmICghbS0+cGdfaW5pdF9yZXF1aXJlZCkKKwkJbS0+cXVldWVfaW8gPSAwOworCisJcXVldWVfd29yayhrbXVsdGlwYXRoZCwgJm0tPnByb2Nlc3NfcXVldWVkX2lvcyk7CisKKwkvKgorCSAqIFdha2UgdXAgYW55IHRocmVhZCB3YWl0aW5nIHRvIHN1c3BlbmQuCisJICovCisJd2FrZV91cCgmbS0+cGdfaW5pdF93YWl0KTsKKworb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm0tPmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtMTE5OCw3ICsxMjQyLDcgQEAKIAkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBwZ3BhdGgsIGFjdGl2YXRlX3BhdGgpOwogCiAJc2NzaV9kaF9hY3RpdmF0ZShiZGV2X2dldF9xdWV1ZShwZ3BhdGgtPnBhdGguZGV2LT5iZGV2KSwKLQkJCQlwZ19pbml0X2RvbmUsICZwZ3BhdGgtPnBhdGgpOworCQkJCXBnX2luaXRfZG9uZSwgcGdwYXRoKTsKIH0KIAogLyoKQEAgLTEyNzYsOCArMTMyMCw3IEBACiAJc3RydWN0IG11bHRpcGF0aCAqbSA9IHRpLT5wcml2YXRlOwogCiAJbXV0ZXhfbG9jaygmbS0+d29ya19tdXRleCk7Ci0JbS0+c3VzcGVuZGVkID0gMTsKLQlmbHVzaF9tdWx0aXBhdGhfd29yaygpOworCWZsdXNoX211bHRpcGF0aF93b3JrKG0pOwogCW11dGV4X3VubG9jaygmbS0+d29ya19tdXRleCk7CiB9CiAKQEAgLTEyODksMTAgKzEzMzIsNiBAQAogCXN0cnVjdCBtdWx0aXBhdGggKm0gPSAoc3RydWN0IG11bHRpcGF0aCAqKSB0aS0+cHJpdmF0ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JbXV0ZXhfbG9jaygmbS0+d29ya19tdXRleCk7Ci0JbS0+c3VzcGVuZGVkID0gMDsKLQltdXRleF91bmxvY2soJm0tPndvcmtfbXV0ZXgpOwotCiAJc3Bpbl9sb2NrX2lycXNhdmUoJm0tPmxvY2ssIGZsYWdzKTsKIAltLT5xdWV1ZV9pZl9ub19wYXRoID0gbS0+c2F2ZWRfcXVldWVfaWZfbm9fcGF0aDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtLT5sb2NrLCBmbGFncyk7CkBAIC0xNDI4LDExICsxNDY3LDYgQEAKIAogCW11dGV4X2xvY2soJm0tPndvcmtfbXV0ZXgpOwogCi0JaWYgKG0tPnN1c3BlbmRlZCkgewotCQlyID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KIAlpZiAoZG1fc3VzcGVuZGVkKHRpKSkgewogCQlyID0gLUVCVVNZOwogCQlnb3RvIG91dDsKQEAgLTE0NzEsOCArMTUwNSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXIgPSBkbV9nZXRfZGV2aWNlKHRpLCBhcmd2WzFdLCB0aS0+YmVnaW4sIHRpLT5sZW4sCi0JCQkgIGRtX3RhYmxlX2dldF9tb2RlKHRpLT50YWJsZSksICZkZXYpOworCXIgPSBkbV9nZXRfZGV2aWNlKHRpLCBhcmd2WzFdLCBkbV90YWJsZV9nZXRfbW9kZSh0aS0+dGFibGUpLCAmZGV2KTsKIAlpZiAocikgewogCQlETVdBUk4oIm1lc3NhZ2U6IGVycm9yIGdldHRpbmcgZGV2aWNlICVzIiwKIAkJICAgICAgIGFyZ3ZbMV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1yYWlkMS5jIGIvZHJpdmVycy9tZC9kbS1yYWlkMS5jCmluZGV4IDZjMTA0NmQuLmRkZGE1MzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tcmFpZDEuYworKysgYi9kcml2ZXJzL21kL2RtLXJhaWQxLmMKQEAgLTQ2NSw5ICs0NjUsMTcgQEAKIHN0YXRpYyB2b2lkIGhvbGRfYmlvKHN0cnVjdCBtaXJyb3Jfc2V0ICptcywgc3RydWN0IGJpbyAqYmlvKQogewogCS8qCi0JICogSWYgZGV2aWNlIGlzIHN1c3BlbmRlZCwgY29tcGxldGUgdGhlIGJpby4KKwkgKiBMb2NrIGlzIHJlcXVpcmVkIHRvIGF2b2lkIHJhY2UgY29uZGl0aW9uIGR1cmluZyBzdXNwZW5kCisJICogcHJvY2Vzcy4KIAkgKi8KKwlzcGluX2xvY2tfaXJxKCZtcy0+bG9jayk7CisKIAlpZiAoYXRvbWljX3JlYWQoJm1zLT5zdXNwZW5kKSkgeworCQlzcGluX3VubG9ja19pcnEoJm1zLT5sb2NrKTsKKworCQkvKgorCQkgKiBJZiBkZXZpY2UgaXMgc3VzcGVuZGVkLCBjb21wbGV0ZSB0aGUgYmlvLgorCQkgKi8KIAkJaWYgKGRtX25vZmx1c2hfc3VzcGVuZGluZyhtcy0+dGkpKQogCQkJYmlvX2VuZGlvKGJpbywgRE1fRU5ESU9fUkVRVUVVRSk7CiAJCWVsc2UKQEAgLTQ3OCw3ICs0ODYsNiBAQAogCS8qCiAJICogSG9sZCBiaW8gdW50aWwgdGhlIHN1c3BlbmQgaXMgY29tcGxldGUuCiAJICovCi0Jc3Bpbl9sb2NrX2lycSgmbXMtPmxvY2spOwogCWJpb19saXN0X2FkZCgmbXMtPmhvbGRzLCBiaW8pOwogCXNwaW5fdW5sb2NrX2lycSgmbXMtPmxvY2spOwogfQpAQCAtNzM3LDkgKzc0NCwxMiBAQAogCQlkbV9yaF9kZWxheShtcy0+cmgsIGJpbyk7CiAKIAl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmbm9zeW5jKSkpIHsKLQkJaWYgKHVubGlrZWx5KG1zLT5sZWdfZmFpbHVyZSkgJiYgZXJyb3JzX2hhbmRsZWQobXMpKQotCQkJaG9sZF9iaW8obXMsIGJpbyk7Ci0JCWVsc2UgeworCQlpZiAodW5saWtlbHkobXMtPmxlZ19mYWlsdXJlKSAmJiBlcnJvcnNfaGFuZGxlZChtcykpIHsKKwkJCXNwaW5fbG9ja19pcnEoJm1zLT5sb2NrKTsKKwkJCWJpb19saXN0X2FkZCgmbXMtPmZhaWx1cmVzLCBiaW8pOworCQkJc3Bpbl91bmxvY2tfaXJxKCZtcy0+bG9jayk7CisJCQl3YWtldXBfbWlycm9yZChtcyk7CisJCX0gZWxzZSB7CiAJCQltYXBfYmlvKGdldF9kZWZhdWx0X21pcnJvcihtcyksIGJpbyk7CiAJCQlnZW5lcmljX21ha2VfcmVxdWVzdChiaW8pOwogCQl9CkBAIC05MTcsOCArOTI3LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKGRtX2dldF9kZXZpY2UodGksIGFyZ3ZbMF0sIG9mZnNldCwgdGktPmxlbiwKLQkJCSAgZG1fdGFibGVfZ2V0X21vZGUodGktPnRhYmxlKSwKKwlpZiAoZG1fZ2V0X2RldmljZSh0aSwgYXJndlswXSwgZG1fdGFibGVfZ2V0X21vZGUodGktPnRhYmxlKSwKIAkJCSAgJm1zLT5taXJyb3JbbWlycm9yXS5kZXYpKSB7CiAJCXRpLT5lcnJvciA9ICJEZXZpY2UgbG9va3VwIGZhaWx1cmUiOwogCQlyZXR1cm4gLUVOWElPOwpAQCAtMTI1OSw2ICsxMjY4LDIwIEBACiAJYXRvbWljX3NldCgmbXMtPnN1c3BlbmQsIDEpOwogCiAJLyoKKwkgKiBQcm9jZXNzIGJpb3MgaW4gdGhlIGhvbGQgbGlzdCB0byBzdGFydCByZWNvdmVyeSB3YWl0aW5nCisJICogZm9yIGJpb3MgaW4gdGhlIGhvbGQgbGlzdC4gQWZ0ZXIgdGhlIHByb2Nlc3MsIG5vIGJpbyBoYXMKKwkgKiBhIGNoYW5jZSB0byBiZSBhZGRlZCBpbiB0aGUgaG9sZCBsaXN0IGJlY2F1c2UgbXMtPnN1c3BlbmQKKwkgKiBpcyBzZXQuCisJICovCisJc3Bpbl9sb2NrX2lycSgmbXMtPmxvY2spOworCWhvbGRzID0gbXMtPmhvbGRzOworCWJpb19saXN0X2luaXQoJm1zLT5ob2xkcyk7CisJc3Bpbl91bmxvY2tfaXJxKCZtcy0+bG9jayk7CisKKwl3aGlsZSAoKGJpbyA9IGJpb19saXN0X3BvcCgmaG9sZHMpKSkKKwkJaG9sZF9iaW8obXMsIGJpbyk7CisKKwkvKgogCSAqIFdlIG11c3QgZmluaXNoIHVwIGFsbCB0aGUgd29yayB0aGF0IHdlJ3ZlCiAJICogZ2VuZXJhdGVkIChpLmUuIHJlY292ZXJ5IHdvcmspLgogCSAqLwpAQCAtMTI3OCwyMiArMTMwMSw2IEBACiAJICogd2Uga25vdyB0aGF0IGFsbCBvZiBvdXIgSS9PIGhhcyBiZWVuIHB1c2hlZC4KIAkgKi8KIAlmbHVzaF93b3JrcXVldWUobXMtPmttaXJyb3JkX3dxKTsKLQotCS8qCi0JICogTm93IHNldCBtcy0+c3VzcGVuZCBpcyBzZXQgYW5kIHRoZSB3b3JrcXVldWUgZmx1c2hlZCwgbm8gbW9yZQotCSAqIGVudHJpZXMgY2FuIGJlIGFkZGVkIHRvIG1zLT5ob2xkIGxpc3QsIHNvIHByb2Nlc3MgaXQuCi0JICoKLQkgKiBCaW9zIGNhbiBzdGlsbCBhcnJpdmUgY29uY3VycmVudGx5IHdpdGggb3IgYWZ0ZXIgdGhpcwotCSAqIHByZXN1c3BlbmQgZnVuY3Rpb24sIGJ1dCB0aGV5IGNhbm5vdCBqb2luIHRoZSBob2xkIGxpc3QKLQkgKiBiZWNhdXNlIG1zLT5zdXNwZW5kIGlzIHNldC4KLQkgKi8KLQlzcGluX2xvY2tfaXJxKCZtcy0+bG9jayk7Ci0JaG9sZHMgPSBtcy0+aG9sZHM7Ci0JYmlvX2xpc3RfaW5pdCgmbXMtPmhvbGRzKTsKLQlzcGluX3VubG9ja19pcnEoJm1zLT5sb2NrKTsKLQotCXdoaWxlICgoYmlvID0gYmlvX2xpc3RfcG9wKCZob2xkcykpKQotCQlob2xkX2JpbyhtcywgYmlvKTsKIH0KIAogc3RhdGljIHZvaWQgbWlycm9yX3Bvc3RzdXNwZW5kKHN0cnVjdCBkbV90YXJnZXQgKnRpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zbmFwLmMgYi9kcml2ZXJzL21kL2RtLXNuYXAuYwppbmRleCBlZThlYjI4Li41NDg1Mzc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXNuYXAuYworKysgYi9kcml2ZXJzL21kL2RtLXNuYXAuYwpAQCAtODMsMTAgKzgzLDEwIEBACiAJLyogV2hldGhlciBvciBub3Qgb3duaW5nIG1hcHBlZF9kZXZpY2UgaXMgc3VzcGVuZGVkICovCiAJaW50IHN1c3BlbmRlZDsKIAotCW1lbXBvb2xfdCAqcGVuZGluZ19wb29sOwotCiAJYXRvbWljX3QgcGVuZGluZ19leGNlcHRpb25zX2NvdW50OwogCisJbWVtcG9vbF90ICpwZW5kaW5nX3Bvb2w7CisKIAlzdHJ1Y3QgZG1fZXhjZXB0aW9uX3RhYmxlIHBlbmRpbmc7CiAJc3RydWN0IGRtX2V4Y2VwdGlvbl90YWJsZSBjb21wbGV0ZTsKIApAQCAtOTYsNiArOTYsMTEgQEAKIAkgKi8KIAlzcGlubG9ja190IHBlX2xvY2s7CiAKKwkvKiBDaHVua3Mgd2l0aCBvdXRzdGFuZGluZyByZWFkcyAqLworCXNwaW5sb2NrX3QgdHJhY2tlZF9jaHVua19sb2NrOworCW1lbXBvb2xfdCAqdHJhY2tlZF9jaHVua19wb29sOworCXN0cnVjdCBobGlzdF9oZWFkIHRyYWNrZWRfY2h1bmtfaGFzaFtETV9UUkFDS0VEX0NIVU5LX0hBU0hfU0laRV07CisKIAkvKiBUaGUgb24gZGlzayBtZXRhZGF0YSBoYW5kbGVyICovCiAJc3RydWN0IGRtX2V4Y2VwdGlvbl9zdG9yZSAqc3RvcmU7CiAKQEAgLTEwNSwxMCArMTEwLDEyIEBACiAJc3RydWN0IGJpb19saXN0IHF1ZXVlZF9iaW9zOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBxdWV1ZWRfYmlvc193b3JrOwogCi0JLyogQ2h1bmtzIHdpdGggb3V0c3RhbmRpbmcgcmVhZHMgKi8KLQltZW1wb29sX3QgKnRyYWNrZWRfY2h1bmtfcG9vbDsKLQlzcGlubG9ja190IHRyYWNrZWRfY2h1bmtfbG9jazsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCB0cmFja2VkX2NodW5rX2hhc2hbRE1fVFJBQ0tFRF9DSFVOS19IQVNIX1NJWkVdOworCS8qIFdhaXQgZm9yIGV2ZW50cyBiYXNlZCBvbiBzdGF0ZV9iaXRzICovCisJdW5zaWduZWQgbG9uZyBzdGF0ZV9iaXRzOworCisJLyogUmFuZ2Ugb2YgY2h1bmtzIGN1cnJlbnRseSBiZWluZyBtZXJnZWQuICovCisJY2h1bmtfdCBmaXJzdF9tZXJnaW5nX2NodW5rOworCWludCBudW1fbWVyZ2luZ19jaHVua3M7CiAKIAkvKgogCSAqIFRoZSBtZXJnZSBvcGVyYXRpb24gZmFpbGVkIGlmIHRoaXMgZmxhZyBpcyBzZXQuCkBAIC0xMjUsMTMgKzEzMiw2IEBACiAJICovCiAJaW50IG1lcmdlX2ZhaWxlZDsKIAotCS8qIFdhaXQgZm9yIGV2ZW50cyBiYXNlZCBvbiBzdGF0ZV9iaXRzICovCi0JdW5zaWduZWQgbG9uZyBzdGF0ZV9iaXRzOwotCi0JLyogUmFuZ2Ugb2YgY2h1bmtzIGN1cnJlbnRseSBiZWluZyBtZXJnZWQuICovCi0JY2h1bmtfdCBmaXJzdF9tZXJnaW5nX2NodW5rOwotCWludCBudW1fbWVyZ2luZ19jaHVua3M7Ci0KIAkvKgogCSAqIEluY29taW5nIGJpb3MgdGhhdCBvdmVybGFwIHdpdGggY2h1bmtzIGJlaW5nIG1lcmdlZCBtdXN0IHdhaXQKIAkgKiBmb3IgdGhlbSB0byBiZSBjb21taXR0ZWQuCkBAIC0xMDgxLDggKzEwODEsNyBAQAogCWFyZ3YrKzsKIAlhcmdjLS07CiAKLQlyID0gZG1fZ2V0X2RldmljZSh0aSwgY293X3BhdGgsIDAsIDAsCi0JCQkgIEZNT0RFX1JFQUQgfCBGTU9ERV9XUklURSwgJnMtPmNvdyk7CisJciA9IGRtX2dldF9kZXZpY2UodGksIGNvd19wYXRoLCBGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEUsICZzLT5jb3cpOwogCWlmIChyKSB7CiAJCXRpLT5lcnJvciA9ICJDYW5ub3QgZ2V0IENPVyBkZXZpY2UiOwogCQlnb3RvIGJhZF9jb3c7CkBAIC0xMDk4LDcgKzEwOTcsNyBAQAogCWFyZ3YgKz0gYXJnc191c2VkOwogCWFyZ2MgLT0gYXJnc191c2VkOwogCi0JciA9IGRtX2dldF9kZXZpY2UodGksIG9yaWdpbl9wYXRoLCAwLCB0aS0+bGVuLCBvcmlnaW5fbW9kZSwgJnMtPm9yaWdpbik7CisJciA9IGRtX2dldF9kZXZpY2UodGksIG9yaWdpbl9wYXRoLCBvcmlnaW5fbW9kZSwgJnMtPm9yaWdpbik7CiAJaWYgKHIpIHsKIAkJdGktPmVycm9yID0gIkNhbm5vdCBnZXQgb3JpZ2luIGRldmljZSI7CiAJCWdvdG8gYmFkX29yaWdpbjsKQEAgLTIxMDAsOCArMjA5OSw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXIgPSBkbV9nZXRfZGV2aWNlKHRpLCBhcmd2WzBdLCAwLCB0aS0+bGVuLAotCQkJICBkbV90YWJsZV9nZXRfbW9kZSh0aS0+dGFibGUpLCAmZGV2KTsKKwlyID0gZG1fZ2V0X2RldmljZSh0aSwgYXJndlswXSwgZG1fdGFibGVfZ2V0X21vZGUodGktPnRhYmxlKSwgJmRldik7CiAJaWYgKHIpIHsKIAkJdGktPmVycm9yID0gIkNhbm5vdCBnZXQgdGFyZ2V0IGRldmljZSI7CiAJCXJldHVybiByOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zdHJpcGUuYyBiL2RyaXZlcnMvbWQvZG0tc3RyaXBlLmMKaW5kZXggYmQ1ODcwMy4uZTYxMDcyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9kbS1zdHJpcGUuYworKysgYi9kcml2ZXJzL21kL2RtLXN0cmlwZS5jCkBAIC04MCw4ICs4MCw3IEBACiAJaWYgKHNzY2FuZihhcmd2WzFdLCAiJWxsdSIsICZzdGFydCkgIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZG1fZ2V0X2RldmljZSh0aSwgYXJndlswXSwgc3RhcnQsIHNjLT5zdHJpcGVfd2lkdGgsCi0JCQkgIGRtX3RhYmxlX2dldF9tb2RlKHRpLT50YWJsZSksCisJaWYgKGRtX2dldF9kZXZpY2UodGksIGFyZ3ZbMF0sIGRtX3RhYmxlX2dldF9tb2RlKHRpLT50YWJsZSksCiAJCQkgICZzYy0+c3RyaXBlW3N0cmlwZV0uZGV2KSkKIAkJcmV0dXJuIC1FTlhJTzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1zeXNmcy5jIGIvZHJpdmVycy9tZC9kbS1zeXNmcy5jCmluZGV4IGY5MWI0MDkuLjg0ZDJiOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tc3lzZnMuYworKysgYi9kcml2ZXJzL21kL2RtLXN5c2ZzLmMKQEAgLTc1LDcgKzc1LDcgQEAKIAlOVUxMLAogfTsKIAotc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgZG1fc3lzZnNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgZG1fc3lzZnNfb3BzID0gewogCS5zaG93CT0gZG1fYXR0cl9zaG93LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS10YWJsZS5jIGIvZHJpdmVycy9tZC9kbS10YWJsZS5jCmluZGV4IDRiMjJmZWIuLjk5MjRlYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tdGFibGUuYworKysgYi9kcml2ZXJzL21kL2RtLXRhYmxlLmMKQEAgLTQyOSw4ICs0MjksNyBAQAogICogaXQncyBhbHJlYWR5IHByZXNlbnQuCiAgKi8KIHN0YXRpYyBpbnQgX190YWJsZV9nZXRfZGV2aWNlKHN0cnVjdCBkbV90YWJsZSAqdCwgc3RydWN0IGRtX3RhcmdldCAqdGksCi0JCQkgICAgICBjb25zdCBjaGFyICpwYXRoLCBzZWN0b3JfdCBzdGFydCwgc2VjdG9yX3QgbGVuLAotCQkJICAgICAgZm1vZGVfdCBtb2RlLCBzdHJ1Y3QgZG1fZGV2ICoqcmVzdWx0KQorCQkgICAgICBjb25zdCBjaGFyICpwYXRoLCBmbW9kZV90IG1vZGUsIHN0cnVjdCBkbV9kZXYgKipyZXN1bHQpCiB7CiAJaW50IHI7CiAJZGV2X3QgdW5pbml0aWFsaXplZF92YXIoZGV2KTsKQEAgLTUyNywxMSArNTI2LDEwIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkbV9zZXRfZGV2aWNlX2xpbWl0cyk7CiAKLWludCBkbV9nZXRfZGV2aWNlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBjb25zdCBjaGFyICpwYXRoLCBzZWN0b3JfdCBzdGFydCwKLQkJICBzZWN0b3JfdCBsZW4sIGZtb2RlX3QgbW9kZSwgc3RydWN0IGRtX2RldiAqKnJlc3VsdCkKK2ludCBkbV9nZXRfZGV2aWNlKHN0cnVjdCBkbV90YXJnZXQgKnRpLCBjb25zdCBjaGFyICpwYXRoLCBmbW9kZV90IG1vZGUsCisJCSAgc3RydWN0IGRtX2RldiAqKnJlc3VsdCkKIHsKLQlyZXR1cm4gX190YWJsZV9nZXRfZGV2aWNlKHRpLT50YWJsZSwgdGksIHBhdGgsCi0JCQkJICBzdGFydCwgbGVuLCBtb2RlLCByZXN1bHQpOworCXJldHVybiBfX3RhYmxlX2dldF9kZXZpY2UodGktPnRhYmxlLCB0aSwgcGF0aCwgbW9kZSwgcmVzdWx0KTsKIH0KIAogCkBAIC0xMjMxLDggKzEyMjksNiBAQAogCiBzdHJ1Y3QgbWFwcGVkX2RldmljZSAqZG1fdGFibGVfZ2V0X21kKHN0cnVjdCBkbV90YWJsZSAqdCkKIHsKLQlkbV9nZXQodC0+bWQpOwotCiAJcmV0dXJuIHQtPm1kOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL2RtLXVldmVudC5jIGIvZHJpdmVycy9tZC9kbS11ZXZlbnQuYwppbmRleCBjN2M1NTVhLi42YjFlM2I2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLXVldmVudC5jCisrKyBiL2RyaXZlcnMvbWQvZG0tdWV2ZW50LmMKQEAgLTE4Nyw3ICsxODcsNyBAQAogCiAJaWYgKGV2ZW50X3R5cGUgPj0gQVJSQVlfU0laRShfZG1fdWV2ZW50X3R5cGVfbmFtZXMpKSB7CiAJCURNRVJSKCIlczogSW52YWxpZCBldmVudF90eXBlICVkIiwgX19mdW5jX18sIGV2ZW50X3R5cGUpOwotCQlnb3RvIG91dDsKKwkJcmV0dXJuOwogCX0KIAogCWV2ZW50ID0gZG1fYnVpbGRfcGF0aF91ZXZlbnQobWQsIHRpLApAQCAtMTk1LDEyICsxOTUsOSBAQAogCQkJCSAgICAgX2RtX3VldmVudF90eXBlX25hbWVzW2V2ZW50X3R5cGVdLm5hbWUsCiAJCQkJICAgICBwYXRoLCBucl92YWxpZF9wYXRocyk7CiAJaWYgKElTX0VSUihldmVudCkpCi0JCWdvdG8gb3V0OworCQlyZXR1cm47CiAKIAlkbV91ZXZlbnRfYWRkKG1kLCAmZXZlbnQtPmVsaXN0KTsKLQotb3V0OgotCWRtX3B1dChtZCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChkbV9wYXRoX3VldmVudCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvZG0uYyBiL2RyaXZlcnMvbWQvZG0uYwppbmRleCBhYTRlMmFhLi5kMjFlMTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL2RtLmMKKysrIGIvZHJpdmVycy9tZC9kbS5jCkBAIC02MzUsOCArNjM1LDEwIEBACiAJCQlpZiAoIW1kLT5iYXJyaWVyX2Vycm9yICYmIGlvX2Vycm9yICE9IC1FT1BOT1RTVVBQKQogCQkJCW1kLT5iYXJyaWVyX2Vycm9yID0gaW9fZXJyb3I7CiAJCQllbmRfaW9fYWNjdChpbyk7CisJCQlmcmVlX2lvKG1kLCBpbyk7CiAJCX0gZWxzZSB7CiAJCQllbmRfaW9fYWNjdChpbyk7CisJCQlmcmVlX2lvKG1kLCBpbyk7CiAKIAkJCWlmIChpb19lcnJvciAhPSBETV9FTkRJT19SRVFVRVVFKSB7CiAJCQkJdHJhY2VfYmxvY2tfYmlvX2NvbXBsZXRlKG1kLT5xdWV1ZSwgYmlvKTsKQEAgLTY0NCw4ICs2NDYsNiBAQAogCQkJCWJpb19lbmRpbyhiaW8sIGlvX2Vycm9yKTsKIAkJCX0KIAkJfQotCi0JCWZyZWVfaW8obWQsIGlvKTsKIAl9CiB9CiAKQEAgLTI2MTgsMTggKzI2MTgsMTkgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEV2ZW50IG5vdGlmaWNhdGlvbi4KICAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLXZvaWQgZG1fa29iamVjdF91ZXZlbnQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kLCBlbnVtIGtvYmplY3RfYWN0aW9uIGFjdGlvbiwKK2ludCBkbV9rb2JqZWN0X3VldmVudChzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQsIGVudW0ga29iamVjdF9hY3Rpb24gYWN0aW9uLAogCQkgICAgICAgdW5zaWduZWQgY29va2llKQogewogCWNoYXIgdWRldl9jb29raWVbRE1fQ09PS0lFX0xFTkdUSF07CiAJY2hhciAqZW52cFtdID0geyB1ZGV2X2Nvb2tpZSwgTlVMTCB9OwogCiAJaWYgKCFjb29raWUpCi0JCWtvYmplY3RfdWV2ZW50KCZkaXNrX3RvX2RldihtZC0+ZGlzayktPmtvYmosIGFjdGlvbik7CisJCXJldHVybiBrb2JqZWN0X3VldmVudCgmZGlza190b19kZXYobWQtPmRpc2spLT5rb2JqLCBhY3Rpb24pOwogCWVsc2UgewogCQlzbnByaW50Zih1ZGV2X2Nvb2tpZSwgRE1fQ09PS0lFX0xFTkdUSCwgIiVzPSV1IiwKIAkJCSBETV9DT09LSUVfRU5WX1ZBUl9OQU1FLCBjb29raWUpOwotCQlrb2JqZWN0X3VldmVudF9lbnYoJmRpc2tfdG9fZGV2KG1kLT5kaXNrKS0+a29iaiwgYWN0aW9uLCBlbnZwKTsKKwkJcmV0dXJuIGtvYmplY3RfdWV2ZW50X2VudigmZGlza190b19kZXYobWQtPmRpc2spLT5rb2JqLAorCQkJCQkgIGFjdGlvbiwgZW52cCk7CiAJfQogfQogCkBAIC0yNjk5LDIzICsyNzAwLDEzIEBACiAKIGludCBkbV9zdXNwZW5kZWQoc3RydWN0IGRtX3RhcmdldCAqdGkpCiB7Ci0Jc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kID0gZG1fdGFibGVfZ2V0X21kKHRpLT50YWJsZSk7Ci0JaW50IHIgPSBkbV9zdXNwZW5kZWRfbWQobWQpOwotCi0JZG1fcHV0KG1kKTsKLQotCXJldHVybiByOworCXJldHVybiBkbV9zdXNwZW5kZWRfbWQoZG1fdGFibGVfZ2V0X21kKHRpLT50YWJsZSkpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG1fc3VzcGVuZGVkKTsKIAogaW50IGRtX25vZmx1c2hfc3VzcGVuZGluZyhzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSkKIHsKLQlzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQgPSBkbV90YWJsZV9nZXRfbWQodGktPnRhYmxlKTsKLQlpbnQgciA9IF9fbm9mbHVzaF9zdXNwZW5kaW5nKG1kKTsKLQotCWRtX3B1dChtZCk7Ci0KLQlyZXR1cm4gcjsKKwlyZXR1cm4gX19ub2ZsdXNoX3N1c3BlbmRpbmcoZG1fdGFibGVfZ2V0X21kKHRpLT50YWJsZSkpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZG1fbm9mbHVzaF9zdXNwZW5kaW5nKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS5oIGIvZHJpdmVycy9tZC9kbS5oCmluZGV4IDhkYWRhYTUuLmJhZDE3MjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0uaAorKysgYi9kcml2ZXJzL21kL2RtLmgKQEAgLTEyNSw4ICsxMjUsOCBAQAogaW50IGRtX29wZW5fY291bnQoc3RydWN0IG1hcHBlZF9kZXZpY2UgKm1kKTsKIGludCBkbV9sb2NrX2Zvcl9kZWxldGlvbihzdHJ1Y3QgbWFwcGVkX2RldmljZSAqbWQpOwogCi12b2lkIGRtX2tvYmplY3RfdWV2ZW50KHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgZW51bSBrb2JqZWN0X2FjdGlvbiBhY3Rpb24sCi0JCSAgICAgICB1bnNpZ25lZCBjb29raWUpOworaW50IGRtX2tvYmplY3RfdWV2ZW50KHN0cnVjdCBtYXBwZWRfZGV2aWNlICptZCwgZW51bSBrb2JqZWN0X2FjdGlvbiBhY3Rpb24sCisJCSAgICAgIHVuc2lnbmVkIGNvb2tpZSk7CiAKIGludCBkbV9pb19pbml0KHZvaWQpOwogdm9pZCBkbV9pb19leGl0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9tZC5jIGIvZHJpdmVycy9tZC9tZC5jCmluZGV4IGEyMGE3MWUuLmZkYzE4OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvbWQuYworKysgYi9kcml2ZXJzL21kL21kLmMKQEAgLTI2NDIsNyArMjY0Miw3IEBACiAJbWRrX3JkZXZfdCAqcmRldiA9IGNvbnRhaW5lcl9vZihrbywgbWRrX3JkZXZfdCwga29iaik7CiAJa2ZyZWUocmRldik7CiB9Ci1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyByZGV2X3N5c2ZzX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIHJkZXZfc3lzZnNfb3BzID0gewogCS5zaG93CQk9IHJkZXZfYXR0cl9zaG93LAogCS5zdG9yZQkJPSByZGV2X2F0dHJfc3RvcmUsCiB9OwpAQCAtNDA1OSw3ICs0MDU5LDcgQEAKIAlrZnJlZShtZGRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIG1kX3N5c2ZzX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIG1kX3N5c2ZzX29wcyA9IHsKIAkuc2hvdwk9IG1kX2F0dHJfc2hvdywKIAkuc3RvcmUJPSBtZF9hdHRyX3N0b3JlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWQvcmFpZDUuYyBiL2RyaXZlcnMvbWQvcmFpZDUuYwppbmRleCA1MDljOGYzLi43MGZmYmQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21kL3JhaWQ1LmMKKysrIGIvZHJpdmVycy9tZC9yYWlkNS5jCkBAIC00NjgwLDcgKzQ2ODAsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgY3B1OwogCXN0cnVjdCBwYWdlICpzcGFyZV9wYWdlOwotCXN0cnVjdCByYWlkNV9wZXJjcHUgKmFsbGNwdXM7CisJc3RydWN0IHJhaWQ1X3BlcmNwdSBfX3BlcmNwdSAqYWxsY3B1czsKIAl2b2lkICpzY3JpYmJsZTsKIAlpbnQgZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21kL3JhaWQ1LmggYi9kcml2ZXJzL21kL3JhaWQ1LmgKaW5kZXggZGQ3MDgzNS4uMGY4NmY1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZC9yYWlkNS5oCisrKyBiL2RyaXZlcnMvbWQvcmFpZDUuaApAQCAtNDA1LDcgKzQwNSw3IEBACiAJCQkJCSAgICAgICogbGlzdHMgYW5kIHBlcmZvcm1pbmcgYWRkcmVzcwogCQkJCQkgICAgICAqIGNvbnZlcnNpb25zCiAJCQkJCSAgICAgICovCi0JfSAqcGVyY3B1OworCX0gX19wZXJjcHUgKnBlcmNwdTsKIAlzaXplX3QJCQlzY3JpYmJsZV9sZW47IC8qIHNpemUgb2Ygc2NyaWJibGUgcmVnaW9uIG11c3QgYmUKIAkJCQkJICAgICAgICogYXNzb2NpYXRlZCB3aXRoIGNvbmYgdG8gaGFuZGxlCiAJCQkJCSAgICAgICAqIGNwdSBob3RwbHVnIHdoaWxlIHJlc2hhcGluZwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaAppbmRleCA1MmU0Y2U0Li44MGRkYTMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuaApAQCAtMjE0LDE0ICsyMTQsMTQgQEAKIAlpbnQgKCpnZXRfc3RhdHVzKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpzdGF0dXMpOwogCWludCAoKmdldF9yZl9zdHJlbmd0aCkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc3RyZW5ndGgpOwogCi0JLyoqIFRoZXNlIGFyZSBwcm92aWRlZCBzZXBlcmF0ZWx5IGZyb20gc2V0X3BhcmFtcyBpbiBvcmRlciB0byBmYWNpbGl0YXRlIHNpbGljb24KLQkgKiB0dW5lcnMgd2hpY2ggcmVxdWlyZSBzb3BoaXN0aWNhdGVkIHR1bmluZyBsb29wcywgY29udHJvbGxpbmcgZWFjaCBwYXJhbWV0ZXIgc2VwZXJhdGVseS4gKi8KKwkvKiogVGhlc2UgYXJlIHByb3ZpZGVkIHNlcGFyYXRlbHkgZnJvbSBzZXRfcGFyYW1zIGluIG9yZGVyIHRvIGZhY2lsaXRhdGUgc2lsaWNvbgorCSAqIHR1bmVycyB3aGljaCByZXF1aXJlIHNvcGhpc3RpY2F0ZWQgdHVuaW5nIGxvb3BzLCBjb250cm9sbGluZyBlYWNoIHBhcmFtZXRlciBzZXBhcmF0ZWx5LiAqLwogCWludCAoKnNldF9mcmVxdWVuY3kpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgZnJlcXVlbmN5KTsKIAlpbnQgKCpzZXRfYmFuZHdpZHRoKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyIGJhbmR3aWR0aCk7CiAKIAkvKgotCSAqIFRoZXNlIGFyZSBwcm92aWRlZCBzZXBlcmF0ZWx5IGZyb20gc2V0X3BhcmFtcyBpbiBvcmRlciB0byBmYWNpbGl0YXRlIHNpbGljb24KLQkgKiB0dW5lcnMgd2hpY2ggcmVxdWlyZSBzb3BoaXN0aWNhdGVkIHR1bmluZyBsb29wcywgY29udHJvbGxpbmcgZWFjaCBwYXJhbWV0ZXIgc2VwZXJhdGVseS4KKwkgKiBUaGVzZSBhcmUgcHJvdmlkZWQgc2VwYXJhdGVseSBmcm9tIHNldF9wYXJhbXMgaW4gb3JkZXIgdG8gZmFjaWxpdGF0ZSBzaWxpY29uCisJICogdHVuZXJzIHdoaWNoIHJlcXVpcmUgc29waGlzdGljYXRlZCB0dW5pbmcgbG9vcHMsIGNvbnRyb2xsaW5nIGVhY2ggcGFyYW1ldGVyIHNlcGFyYXRlbHkuCiAJICovCiAJaW50ICgqc2V0X3N0YXRlKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZW51bSB0dW5lcl9wYXJhbSBwYXJhbSwgc3RydWN0IHR1bmVyX3N0YXRlICpzdGF0ZSk7CiAJaW50ICgqZ2V0X3N0YXRlKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZW51bSB0dW5lcl9wYXJhbSBwYXJhbSwgc3RydWN0IHR1bmVyX3N0YXRlICpzdGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKaW5kZXggYjExNTMzZi4uNDQxYzA2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYwpAQCAtOTUwLDExICs5NTAsOCBAQAogCSgqc2VjZmlsdGVyKS0+ZmlsdGVyX21hc2tbMTBdID0gbWFjX21hc2tbMV07CiAJKCpzZWNmaWx0ZXIpLT5maWx0ZXJfbWFza1sxMV09bWFjX21hc2tbMF07CiAKLQlkcHJpbnRrKCIlczogZmlsdGVyIG1hYz0lMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBtYWNbMF0sIG1hY1sxXSwgbWFjWzJdLCBtYWNbM10sIG1hY1s0XSwgbWFjWzVdKTsKLQlkcHJpbnRrKCIlczogZmlsdGVyIG1hc2s9JTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnhcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgbWFjX21hc2tbMF0sIG1hY19tYXNrWzFdLCBtYWNfbWFza1syXSwKLQkgICAgICAgbWFjX21hc2tbM10sIG1hY19tYXNrWzRdLCBtYWNfbWFza1s1XSk7CisJZHByaW50aygiJXM6IGZpbHRlciBtYWM9JXBNXG4iLCBkZXYtPm5hbWUsIG1hYyk7CisJZHByaW50aygiJXM6IGZpbHRlciBtYXNrPSVwTVxuIiwgZGV2LT5uYW1lLCBtYWNfbWFzayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExNDIsMTggKzExMzksMTggQEAKIAl9IGVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQlkcHJpbnRrKCIlczogYWxsbXVsdGkgbW9kZVxuIiwgZGV2LT5uYW1lKTsKIAkJcHJpdi0+cnhfbW9kZSA9IFJYX01PREVfQUxMX01VTFRJOwotCX0gZWxzZSBpZiAoZGV2LT5tY19jb3VudCkgeworCX0gZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCWludCBtY2k7CiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWM7CiAKIAkJZHByaW50aygiJXM6IHNldF9tY19saXN0LCAlZCBlbnRyaWVzXG4iLAotCQkJZGV2LT5uYW1lLCBkZXYtPm1jX2NvdW50KTsKKwkJCWRldi0+bmFtZSwgbmV0ZGV2X21jX2NvdW50KGRldikpOwogCiAJCXByaXYtPnJ4X21vZGUgPSBSWF9NT0RFX01VTFRJOwogCQlwcml2LT5tdWx0aV9udW0gPSAwOwogCiAJCWZvciAobWNpID0gMCwgbWM9ZGV2LT5tY19saXN0OwotCQkgICAgIG1jaSA8IGRldi0+bWNfY291bnQ7CisJCSAgICAgbWNpIDwgbmV0ZGV2X21jX2NvdW50KGRldik7CiAJCSAgICAgbWMgPSBtYy0+bmV4dCwgbWNpKyspIHsKIAkJCWR2Yl9zZXRfbWNfZmlsdGVyKGRldiwgbWMpOwogCQl9CkBAIC0xMjQwLDcgKzEyMzcsNiBAQAogCWRldi0+aGVhZGVyX29wcwkJPSAmZHZiX2hlYWRlcl9vcHM7CiAJZGV2LT5uZXRkZXZfb3BzCQk9ICZkdmJfbmV0ZGV2X29wczsKIAlkZXYtPm10dQkJPSA0MDk2OwotCWRldi0+bWNfY291bnQgICAgICAgICAgID0gMDsKIAogCWRldi0+ZmxhZ3MgfD0gSUZGX05PQVJQOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mdy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1mdy5jCmluZGV4IDdhM2RlMTYuLjc1YWZlNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtZncuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWZ3LmMKQEAgLTIzOSw0NyArMjM5LDE4IEBACiB9OwogCiAvKiBBZGp1c3QgdGhlIHRlbXBsYXRlIHN0cmluZyBpZiBtb2RlbHMgd2l0aCBsb25nZXIgbmFtZXMgYXBwZWFyLiAqLwotI2RlZmluZSBNQVhfTU9ERUxfTkFNRV9MRU4gKChpbnQpRElWX1JPVU5EX1VQKHNpemVvZigiRmlyZURUViA/Pz8/IiksIDQpKQotCi1zdGF0aWMgc2l6ZV90IG1vZGVsX25hbWUodTMyICpkaXJlY3RvcnksIF9fYmUzMiAqYnVmZmVyKQotewotCXN0cnVjdCBmd19jc3JfaXRlcmF0b3IgY2k7Ci0JaW50IGksIGxlbmd0aCwga2V5LCB2YWx1ZSwgbGFzdF9rZXkgPSAwOwotCXUzMiAqYmxvY2sgPSBOVUxMOwotCi0JZndfY3NyX2l0ZXJhdG9yX2luaXQoJmNpLCBkaXJlY3RvcnkpOwotCXdoaWxlIChmd19jc3JfaXRlcmF0b3JfbmV4dCgmY2ksICZrZXksICZ2YWx1ZSkpIHsKLQkJaWYgKGxhc3Rfa2V5ID09IENTUl9NT0RFTCAmJgotCQkgICAga2V5ID09IChDU1JfREVTQ1JJUFRPUiB8IENTUl9MRUFGKSkKLQkJCWJsb2NrID0gY2kucCAtIDEgKyB2YWx1ZTsKLQkJbGFzdF9rZXkgPSBrZXk7Ci0JfQotCi0JaWYgKGJsb2NrID09IE5VTEwpCi0JCXJldHVybiAwOwotCi0JbGVuZ3RoID0gbWluKChpbnQpKGJsb2NrWzBdID4+IDE2KSAtIDIsIE1BWF9NT0RFTF9OQU1FX0xFTik7Ci0JaWYgKGxlbmd0aCA8PSAwKQotCQlyZXR1cm4gMDsKLQotCS8qIGZhc3QtZm9yd2FyZCB0byB0ZXh0IHN0cmluZyAqLwotCWJsb2NrICs9IDM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspCi0JCWJ1ZmZlcltpXSA9IGNwdV90b19iZTMyKGJsb2NrW2ldKTsKLQotCXJldHVybiBsZW5ndGggKiA0OwotfQorI2RlZmluZSBNQVhfTU9ERUxfTkFNRV9MRU4gc2l6ZW9mKCJGaXJlRFRWID8/Pz8iKQogCiBzdGF0aWMgaW50IG5vZGVfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBmaXJlZHR2ICpmZHR2OwotCV9fYmUzMiBuYW1lW01BWF9NT0RFTF9OQU1FX0xFTl07CisJY2hhciBuYW1lW01BWF9NT0RFTF9OQU1FX0xFTl07CiAJaW50IG5hbWVfbGVuLCBlcnI7CiAKLQluYW1lX2xlbiA9IG1vZGVsX25hbWUoZndfdW5pdChkZXYpLT5kaXJlY3RvcnksIG5hbWUpOworCW5hbWVfbGVuID0gZndfY3NyX3N0cmluZyhmd191bml0KGRldiktPmRpcmVjdG9yeSwgQ1NSX01PREVMLAorCQkJCSBuYW1lLCBzaXplb2YobmFtZSkpOwogCi0JZmR0diA9IGZkdHZfYWxsb2MoZGV2LCAmYmFja2VuZCwgKGNoYXIgKiluYW1lLCBuYW1lX2xlbik7CisJZmR0diA9IGZkdHZfYWxsb2MoZGV2LCAmYmFja2VuZCwgbmFtZSwgbmFtZV9sZW4gPj0gMCA/IG5hbWVfbGVuIDogMCk7CiAJaWYgKCFmZHR2KQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwppbmRleCAxMjI3OWY2Li43MTY4NzBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwpAQCAtNDQwNCw3ICs0NDA0LDcgQEAKIC8qIFRpYmV0IFN5c3RlbXMgJ1Byb2dyZXNzIERWUicgQ1MxNiBtdXhzZWwgaGVscGVyIFtDaHJpcyBGYW5uaW5nXQogICoKICAqIFRoZSBDUzE2IChhdmFpbGFibGUgb24gZUJheSBjaGVhcCkgaXMgYSBQQ0kgYm9hcmQgd2l0aCBmb3VyIEZ1c2lvbgotICogODc4QSBjaGlwcywgYSBQQ0kgYnJpZGdlLCBhbiBBdG1lbCBtaWNyb2NvbnRyb2xsZXIsIGZvdXIgc3luYyBzZXBlcmF0b3IKKyAqIDg3OEEgY2hpcHMsIGEgUENJIGJyaWRnZSwgYW4gQXRtZWwgbWljcm9jb250cm9sbGVyLCBmb3VyIHN5bmMgc2VwYXJhdG9yCiAgKiBjaGlwcywgdGVuIGVpZ2h0IGlucHV0IGFuYWxvZyBtdWx0aXBsZXhvcnMsIGEgbm90IGNoaXAgYW5kIGEgZmV3CiAgKiBvdGhlciBjb21wb25lbnRzLgogICoKQEAgLTQ0MjYsNyArNDQyNiw3IEBACiAgKgogICogVGhlcmUgaXMgYW4gQVRNRUwgbWljcm9jb250cm9sbGVyIHdpdGggYW4gODAzMSBjb3JlIG9uIGJvYXJkLiAgSSBoYXZlIG5vdAogICogZGV0ZXJtaW5lZCB3aGF0IGZ1bmN0aW9uIChpZiBhbnkpIGl0IHByb3ZpZGVzLiAgV2l0aCB0aGUgbWljcm9jb250cm9sbGVyCi0gKiBhbmQgc3luYyBzZXBlcmF0b3IgY2hpcHMgYSBndWVzcyBpcyB0aGF0IGl0IG1pZ2h0IGhhdmUgdG8gZG8gd2l0aCB2aWRlbworICogYW5kIHN5bmMgc2VwYXJhdG9yIGNoaXBzIGEgZ3Vlc3MgaXMgdGhhdCBpdCBtaWdodCBoYXZlIHRvIGRvIHdpdGggdmlkZW8KICAqIHN3aXRjaGluZyBhbmQgbWF5YmUgc29tZSBkaWdpdGFsIEkvTy4KICAqLwogc3RhdGljIHZvaWQgdGliZXRDUzE2X211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYwppbmRleCA5YjQxM2EzLi4wZjUwNTA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKQEAgLTYxNiwxMCArNjE2LDEyIEBACiB7CiAJaW50IGRldm51bSA9IGltaW5vcihpbm9kZSk7CiAJcGRhYnVzYl90IHM7CisJaW50IHI7CiAKIAlpZiAoZGV2bnVtIDwgREFCVVNCX01JTk9SIHx8IGRldm51bSA+PSAoREFCVVNCX01JTk9SICsgTlJEQUJVU0IpKQogCQlyZXR1cm4gLUVJTzsKIAorCWxvY2tfa2VybmVsKCk7CiAJcyA9ICZkYWJ1c2JbZGV2bnVtIC0gREFCVVNCX01JTk9SXTsKIAogCWRiZygiZGFidXNiX29wZW4iKTsKQEAgLTYzNCw2ICs2MzYsNyBAQAogCQltc2xlZXBfaW50ZXJydXB0aWJsZSg1MDApOwogCiAJCWlmIChzaWduYWxfcGVuZGluZyAoY3VycmVudCkpIHsKKwkJCXVubG9ja19rZXJuZWwoKTsKIAkJCXJldHVybiAtRUFHQUlOOwogCQl9CiAJCW11dGV4X2xvY2soJnMtPm11dGV4KTsKQEAgLTY0MSw2ICs2NDQsNyBAQAogCWlmICh1c2Jfc2V0X2ludGVyZmFjZSAocy0+dXNiZGV2LCBfREFCVVNCX0lGLCAxKSA8IDApIHsKIAkJbXV0ZXhfdW5sb2NrKCZzLT5tdXRleCk7CiAJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LCAic2V0X2ludGVyZmFjZSBmYWlsZWRcbiIpOworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlzLT5vcGVuZWQgPSAxOwpAQCAtNjQ5LDcgKzY1Myw5IEBACiAJZmlsZS0+Zl9wb3MgPSAwOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHM7CiAKLQlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CisJciA9IG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworCXVubG9ja19rZXJuZWwoKTsKKwlyZXR1cm4gcjsKIH0KIAogc3RhdGljIGludCBkYWJ1c2JfcmVsZWFzZSAoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKaW5kZXggYmM0Y2VkNi4uZjM2ZTExYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYwpAQCAtNTEyLDcgKzUxMiw3IEBACiAvKgogICogVGhlIEZYMiBjaGlwIGRvZXMgbm90IGdpdmUgdXMgYSB6ZXJvIGxlbmd0aCByZWFkIGF0IGVuZCBvZiBmcmFtZS4KICAqIEl0IGRvZXMsIGhvd2V2ZXIsIGdpdmUgYSBzaG9ydCByZWFkIGF0IHRoZSBlbmQgb2YgYSBmcmFtZSwgaWYKLSAqIG5lY2Nlc3NhcnksIHJhdGhlciB0aGFuIHJ1biB0d28gZnJhbWVzIHRvZ2V0aGVyLgorICogbmVjZXNzYXJ5LCByYXRoZXIgdGhhbiBydW4gdHdvIGZyYW1lcyB0b2dldGhlci4KICAqCiAgKiBCeSBjaG9vc2luZyB0aGUgcmlnaHQgYnVsayB0cmFuc2ZlciBzaXplLCB3ZSBhcmUgZ3VhcmFudGVlZCB0byBhbHdheXMKICAqIGdldCBhIHNob3J0IHJlYWQgZm9yIHRoZSBsYXN0IHJlYWQgb2YgZWFjaCBmcmFtZS4gIEZyYW1lIHNpemVzIGFyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jCmluZGV4IDc0MDBlYWMuLjE0MmMzMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDI0eHhjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAyNHh4Y2FtLmMKQEAgLTE3MzUsNyArMTczNSw3IEBACiAgKgogICovCiAKLXN0YXRpYyBpbnQgX19pbml0IG9tYXAyNHh4Y2FtX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvbWFwMjR4eGNhbV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3BoaWxpcHMudHh0IGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcGhpbGlwcy50eHQKaW5kZXggZjlmMzU4NC4uZDM4ZGQ3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcGhpbGlwcy50eHQKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcGhpbGlwcy50eHQKQEAgLTMzLDcgKzMzLDcgQEAKIGNvbnRhaW5zIGRlY29tcHJlc3Npb24gcm91dGluZXMgdGhhdCBhbGxvdyB5b3UgdG8gdXNlIGhpZ2hlciBpbWFnZSBzaXplcyBhbmQKIGZyYW1lcmF0ZXM7IGluIGFkZGl0aW9uIHRoZSB3ZWJjYW0gdXNlcyBsZXNzIGJhbmR3aWR0aCBvbiB0aGUgVVNCIGJ1cyAoaGFuZHkKIGlmIHlvdSB3YW50IHRvIHJ1biBtb3JlIHRoYW4gMSBjYW1lcmEgc2ltdWx0YW5lb3VzbHkpLiBUaGVzZSByb3V0aW5lcyBmYWxsCi11bmRlciBhIE5EQSwgYW5kIG1heSB0aGVyZWZvciBub3QgYmUgZGlzdHJpYnV0ZWQgYXMgc291cmNlOyBob3dldmVyLCBpdHMgdXNlCit1bmRlciBhIE5EQSwgYW5kIG1heSB0aGVyZWZvcmUgbm90IGJlIGRpc3RyaWJ1dGVkIGFzIHNvdXJjZTsgaG93ZXZlciwgaXRzIHVzZQogaXMgY29tcGxldGVseSBvcHRpb25hbC4KIAogWW91IGNhbiBidWlsZCB0aGlzIGNvZGUgZWl0aGVyIGludG8geW91ciBrZXJuZWwsIG9yIGFzIGEgbW9kdWxlLiBJIHJlY29tbWVuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfc2Vuc29yLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9zZW5zb3IuaAppbmRleCA0YWY3MzgyLi40OTQ5NTdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9zZW5zb3IuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9zZW5zb3IuaApAQCAtMTIwLDcgKzEyMCw3IEBACiAvKgogICAgV3JpdGUgbXVsdGlwbGUgcmVnaXN0ZXJzIHdpdGggY29uc3RhbnQgdmFsdWVzLiBGb3IgZXhhbXBsZToKICAgIHNuOWMxMDJfd3JpdGVfY29uc3RfcmVncyhjYW0sIHsweDAwLCAweDE0fSwgezB4NjAsIDB4MTd9LCB7MHgwZiwgMHgxOH0pOwotICAgUmVnaXN0ZXIgYWRyZXNzZXMgbXVzdCBiZSA8IDI1Ni4KKyAgIFJlZ2lzdGVyIGFkZHJlc3NlcyBtdXN0IGJlIDwgMjU2LgogKi8KICNkZWZpbmUgc245YzEwMl93cml0ZV9jb25zdF9yZWdzKHNuOWMxMDJfZGV2aWNlLCBkYXRhLi4uKSAgICAgICAgICAgICAgICAgICAgIFwKIAkoeyBzdGF0aWMgY29uc3QgdTggX3ZhbHJlZ1tdWzJdID0ge2RhdGF9OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYwppbmRleCAwNDQ2NTI0Li42YmY2YmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYwpAQCAtNiw3ICs2LDcgQEAKIAogICAgIFRoZSB0ZWE2NDIwIGlzIGEgYnVzIGNvbnRyb2xsZWQgYXVkaW8tbWF0cml4IHdpdGggNSBzdGVyZW8gaW5wdXRzLAogICAgIDQgc3RlcmVvIG91dHB1dHMgYW5kIGdhaW4gY29udHJvbCBmb3IgZWFjaCBvdXRwdXQuCi0gICAgSXQgaXMgY2FzY2FkYWJsZSwgaS5lLiBpdCBjYW4gYmUgZm91bmQgYXQgdGhlIGFkcmVzc2VzIDB4OTgKKyAgICBJdCBpcyBjYXNjYWRhYmxlLCBpLmUuIGl0IGNhbiBiZSBmb3VuZCBhdCB0aGUgYWRkcmVzc2VzIDB4OTgKICAgICBhbmQgMHg5YSBvbiB0aGUgaTJjLWJ1cy4KIAogICAgIEZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbnMgZG93bmxvYWQgdGhlIHNwZWNpZmljYXRpb25zIGRpcmVjdGx5CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19wcm9jLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19wcm9jLmMKaW5kZXggNzA0NWM0NS4uOTQ5YTY0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fcHJvYy5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX3Byb2MuYwpAQCAtMTExLDEwICsxMTEsNyBAQAogCQlicmVhazsKIAogCWNhc2UgSTJPX1NORk9STUFUX0xBTjQ4X01BQzoJLyogTEFOLTQ4IE1BQyBBZGRyZXNzICovCi0JCXNlcV9wcmludGYoc2VxLAotCQkJICAgIkxBTi00OCBNQUMgYWRkcmVzcyBAICUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYIiwKLQkJCSAgIHNlcmlhbG5vWzJdLCBzZXJpYWxub1szXSwKLQkJCSAgIHNlcmlhbG5vWzRdLCBzZXJpYWxub1s1XSwgc2VyaWFsbm9bNl0sIHNlcmlhbG5vWzddKTsKKwkJc2VxX3ByaW50ZihzZXEsICJMQU4tNDggTUFDIGFkZHJlc3MgQCAlcE0iLCAmc2VyaWFsbm9bMl0pOwogCQlicmVhazsKIAogCWNhc2UgSTJPX1NORk9STUFUX1dBTjoJLyogV0FOIE1BQyBBZGRyZXNzICovCkBAIC0xMjYsMTAgKzEyMyw4IEBACiAJY2FzZSBJMk9fU05GT1JNQVRfTEFONjRfTUFDOgkvKiBMQU4tNjQgTUFDIEFkZHJlc3MgKi8KIAkJLyogRklYTUU6IEZpZ3VyZSBvdXQgd2hhdCBhIExBTi02NCBhZGRyZXNzIHJlYWxseSBsb29rcyBsaWtlPz8gKi8KIAkJc2VxX3ByaW50ZihzZXEsCi0JCQkgICAiTEFOLTY0IE1BQyBhZGRyZXNzIEAgWz86JTAyWDolMDJYOj9dICUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYIiwKLQkJCSAgIHNlcmlhbG5vWzhdLCBzZXJpYWxub1s5XSwKLQkJCSAgIHNlcmlhbG5vWzJdLCBzZXJpYWxub1szXSwKLQkJCSAgIHNlcmlhbG5vWzRdLCBzZXJpYWxub1s1XSwgc2VyaWFsbm9bNl0sIHNlcmlhbG5vWzddKTsKKwkJCSAgICJMQU4tNjQgTUFDIGFkZHJlc3MgQCBbPzolMDJYOiUwMlg6P10gJXBNIiwKKwkJCSAgIHNlcmlhbG5vWzhdLCBzZXJpYWxub1s5XSwgJnNlcmlhbG5vWzJdKTsKIAkJYnJlYWs7CiAKIAljYXNlIEkyT19TTkZPUk1BVF9ERE06CS8qIEkyTyBERE0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaW9wLmMgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2lvcC5jCmluZGV4IGU1YWI2MjEuLmVmNWNlMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaW9wLmMKKysrIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pb3AuYwpAQCAtNTM5LDcgKzUzOSw3IEBACiAJCSAqIHdoaWNoIGlzIGluZGV0ZXJtaW5hdGUuIFdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgSU9QIGhhcwogCQkgKiByZWJvb3RlZCBiZWZvcmUgd2UgY2FuIGxldCB0aGUgc3lzdGVtIHRhbGsgdG8gaXQuIFdlIHJlYWQKIAkJICogdGhlIGluYm91bmQgRnJlZV9MaXN0IHVudGlsIGEgbWVzc2FnZSBpcyBhdmFpbGFibGUuIElmIHdlCi0JCSAqIGNhbid0IHJlYWQgb25lIGluIHRoZSBnaXZlbiBhbW1vdW50IG9mIHRpbWUsIHdlIGFzc3VtZSB0aGUKKwkJICogY2FuJ3QgcmVhZCBvbmUgaW4gdGhlIGdpdmVuIGFtb3VudCBvZiB0aW1lLCB3ZSBhc3N1bWUgdGhlCiAJCSAqIElPUCBjb3VsZCBub3QgcmVib290IHByb3Blcmx5LgogCQkgKi8KIAkJb3NtX2RlYnVnKCIlczogUmVzZXQgaW4gcHJvZ3Jlc3MsIHdhaXRpbmcgZm9yIHJlYm9vdC4uLlxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkLzg4cG04NjA3LmMgYi9kcml2ZXJzL21mZC84OHBtODYwNy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTNmNjU5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWZkLzg4cG04NjA3LmMKKysrIC9kZXYvbnVsbApAQCAtMSwzMDIgKzAsMCBAQAotLyoKLSAqIEJhc2UgZHJpdmVyIGZvciBNYXJ2ZWxsIDg4UE04NjA3Ci0gKgotICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCi0gKiAJSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+Ci0jaW5jbHVkZSA8bGludXgvbWZkLzg4cG04NjA3Lmg+Ci0KLQotI2RlZmluZSBQTTg2MDdfUkVHX1JFU09VUkNFKF9zdGFydCwgX2VuZCkJCVwKLXsJCQkJCQkJXAotCS5zdGFydAk9IFBNODYwN18jI19zdGFydCwJCQlcCi0JLmVuZAk9IFBNODYwN18jI19lbmQsCQkJXAotCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCQkJXAotfQotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHBtODYwN19yZWd1bGF0b3JfcmVzb3VyY2VzW10gPSB7Ci0JUE04NjA3X1JFR19SRVNPVVJDRShCVUNLMSwgQlVDSzEpLAotCVBNODYwN19SRUdfUkVTT1VSQ0UoQlVDSzIsIEJVQ0syKSwKLQlQTTg2MDdfUkVHX1JFU09VUkNFKEJVQ0szLCBCVUNLMyksCi0JUE04NjA3X1JFR19SRVNPVVJDRShMRE8xLCAgTERPMSksCi0JUE04NjA3X1JFR19SRVNPVVJDRShMRE8yLCAgTERPMiksCi0JUE04NjA3X1JFR19SRVNPVVJDRShMRE8zLCAgTERPMyksCi0JUE04NjA3X1JFR19SRVNPVVJDRShMRE80LCAgTERPNCksCi0JUE04NjA3X1JFR19SRVNPVVJDRShMRE81LCAgTERPNSksCi0JUE04NjA3X1JFR19SRVNPVVJDRShMRE82LCAgTERPNiksCi0JUE04NjA3X1JFR19SRVNPVVJDRShMRE83LCAgTERPNyksCi0JUE04NjA3X1JFR19SRVNPVVJDRShMRE84LCAgTERPOCksCi0JUE04NjA3X1JFR19SRVNPVVJDRShMRE85LCAgTERPOSksCi0JUE04NjA3X1JFR19SRVNPVVJDRShMRE8xMCwgTERPMTApLAotCVBNODYwN19SRUdfUkVTT1VSQ0UoTERPMTIsIExETzEyKSwKLQlQTTg2MDdfUkVHX1JFU09VUkNFKExETzE0LCBMRE8xNCksCi19OwotCi0jZGVmaW5lIFBNODYwN19SRUdfREVWUyhfbmFtZSwgX2lkKQkJCQkJXAotewkJCQkJCQkJCVwKLQkubmFtZQkJPSAiODhwbTg2MDctIiAjX25hbWUsCQkJCVwKLQkubnVtX3Jlc291cmNlcwk9IDEsCQkJCQkJXAotCS5yZXNvdXJjZXMJPSAmcG04NjA3X3JlZ3VsYXRvcl9yZXNvdXJjZXNbUE04NjA3X0lEXyMjX2lkXSwJXAotfQotCi1zdGF0aWMgc3RydWN0IG1mZF9jZWxsIHBtODYwN19kZXZzW10gPSB7Ci0JUE04NjA3X1JFR19ERVZTKGJ1Y2sxLCBCVUNLMSksCi0JUE04NjA3X1JFR19ERVZTKGJ1Y2syLCBCVUNLMiksCi0JUE04NjA3X1JFR19ERVZTKGJ1Y2szLCBCVUNLMyksCi0JUE04NjA3X1JFR19ERVZTKGxkbzEsICBMRE8xKSwKLQlQTTg2MDdfUkVHX0RFVlMobGRvMiwgIExETzIpLAotCVBNODYwN19SRUdfREVWUyhsZG8zLCAgTERPMyksCi0JUE04NjA3X1JFR19ERVZTKGxkbzQsICBMRE80KSwKLQlQTTg2MDdfUkVHX0RFVlMobGRvNSwgIExETzUpLAotCVBNODYwN19SRUdfREVWUyhsZG82LCAgTERPNiksCi0JUE04NjA3X1JFR19ERVZTKGxkbzcsICBMRE83KSwKLQlQTTg2MDdfUkVHX0RFVlMobGRvOCwgIExETzgpLAotCVBNODYwN19SRUdfREVWUyhsZG85LCAgTERPOSksCi0JUE04NjA3X1JFR19ERVZTKGxkbzEwLCBMRE8xMCksCi0JUE04NjA3X1JFR19ERVZTKGxkbzEyLCBMRE8xMiksCi0JUE04NjA3X1JFR19ERVZTKGxkbzE0LCBMRE8xNCksCi19OwotCi1zdGF0aWMgaW5saW5lIGludCBwbTg2MDdfcmVhZF9kZXZpY2Uoc3RydWN0IHBtODYwN19jaGlwICpjaGlwLAotCQkJCSAgICAgaW50IHJlZywgaW50IGJ5dGVzLCB2b2lkICpkZXN0KQotewotCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSBjaGlwLT5jbGllbnQ7Ci0JdW5zaWduZWQgY2hhciBkYXRhOwotCWludCByZXQ7Ci0KLQlkYXRhID0gKHVuc2lnbmVkIGNoYXIpcmVnOwotCXJldCA9IGkyY19tYXN0ZXJfc2VuZChpMmMsICZkYXRhLCAxKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQotCXJldCA9IGkyY19tYXN0ZXJfcmVjdihpMmMsIGRlc3QsIGJ5dGVzKTsKLQlpZiAocmV0IDwgMCkKLQkJcmV0dXJuIHJldDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcG04NjA3X3dyaXRlX2RldmljZShzdHJ1Y3QgcG04NjA3X2NoaXAgKmNoaXAsCi0JCQkJICAgICAgaW50IHJlZywgaW50IGJ5dGVzLCB2b2lkICpzcmMpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IGNoaXAtPmNsaWVudDsKLQl1bnNpZ25lZCBjaGFyIGJ1ZltieXRlcyArIDFdOwotCWludCByZXQ7Ci0KLQlidWZbMF0gPSAodW5zaWduZWQgY2hhcilyZWc7Ci0JbWVtY3B5KCZidWZbMV0sIHNyYywgYnl0ZXMpOwotCi0JcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGkyYywgYnVmLCBieXRlcyArIDEpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCXJldHVybiAwOwotfQotCi1pbnQgcG04NjA3X3JlZ19yZWFkKHN0cnVjdCBwbTg2MDdfY2hpcCAqY2hpcCwgaW50IHJlZykKLXsKLQl1bnNpZ25lZCBjaGFyIGRhdGE7Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJmNoaXAtPmlvX2xvY2spOwotCXJldCA9IGNoaXAtPnJlYWQoY2hpcCwgcmVnLCAxLCAmZGF0YSk7Ci0JbXV0ZXhfdW5sb2NrKCZjaGlwLT5pb19sb2NrKTsKLQotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCWVsc2UKLQkJcmV0dXJuIChpbnQpZGF0YTsKLX0KLUVYUE9SVF9TWU1CT0wocG04NjA3X3JlZ19yZWFkKTsKLQotaW50IHBtODYwN19yZWdfd3JpdGUoc3RydWN0IHBtODYwN19jaGlwICpjaGlwLCBpbnQgcmVnLAotCQkgICAgIHVuc2lnbmVkIGNoYXIgZGF0YSkKLXsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmY2hpcC0+aW9fbG9jayk7Ci0JcmV0ID0gY2hpcC0+d3JpdGUoY2hpcCwgcmVnLCAxLCAmZGF0YSk7Ci0JbXV0ZXhfdW5sb2NrKCZjaGlwLT5pb19sb2NrKTsKLQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKHBtODYwN19yZWdfd3JpdGUpOwotCi1pbnQgcG04NjA3X2J1bGtfcmVhZChzdHJ1Y3QgcG04NjA3X2NoaXAgKmNoaXAsIGludCByZWcsCi0JCSAgICAgaW50IGNvdW50LCB1bnNpZ25lZCBjaGFyICpidWYpCi17Ci0JaW50IHJldDsKLQotCW11dGV4X2xvY2soJmNoaXAtPmlvX2xvY2spOwotCXJldCA9IGNoaXAtPnJlYWQoY2hpcCwgcmVnLCBjb3VudCwgYnVmKTsKLQltdXRleF91bmxvY2soJmNoaXAtPmlvX2xvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0wocG04NjA3X2J1bGtfcmVhZCk7Ci0KLWludCBwbTg2MDdfYnVsa193cml0ZShzdHJ1Y3QgcG04NjA3X2NoaXAgKmNoaXAsIGludCByZWcsCi0JCSAgICAgIGludCBjb3VudCwgdW5zaWduZWQgY2hhciAqYnVmKQotewotCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZjaGlwLT5pb19sb2NrKTsKLQlyZXQgPSBjaGlwLT53cml0ZShjaGlwLCByZWcsIGNvdW50LCBidWYpOwotCW11dGV4X3VubG9jaygmY2hpcC0+aW9fbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChwbTg2MDdfYnVsa193cml0ZSk7Ci0KLWludCBwbTg2MDdfc2V0X2JpdHMoc3RydWN0IHBtODYwN19jaGlwICpjaGlwLCBpbnQgcmVnLAotCQkgICAgdW5zaWduZWQgY2hhciBtYXNrLCB1bnNpZ25lZCBjaGFyIGRhdGEpCi17Ci0JdW5zaWduZWQgY2hhciB2YWx1ZTsKLQlpbnQgcmV0OwotCi0JbXV0ZXhfbG9jaygmY2hpcC0+aW9fbG9jayk7Ci0JcmV0ID0gY2hpcC0+cmVhZChjaGlwLCByZWcsIDEsICZ2YWx1ZSk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCXZhbHVlICY9IH5tYXNrOwotCXZhbHVlIHw9IGRhdGE7Ci0JcmV0ID0gY2hpcC0+d3JpdGUoY2hpcCwgcmVnLCAxLCAmdmFsdWUpOwotb3V0OgotCW11dGV4X3VubG9jaygmY2hpcC0+aW9fbG9jayk7Ci0JcmV0dXJuIHJldDsKLX0KLUVYUE9SVF9TWU1CT0wocG04NjA3X3NldF9iaXRzKTsKLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgcG04NjA3X2lkX3RhYmxlW10gPSB7Ci0JeyAiODhQTTg2MDciLCAwIH0sCi0Je30KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgcG04NjA3X2lkX3RhYmxlKTsKLQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBwbTg2MDdfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCQkgIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgcG04NjA3X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKLQlzdHJ1Y3QgcG04NjA3X2NoaXAgKmNoaXA7Ci0JaW50IGksIGNvdW50OwotCWludCByZXQ7Ci0KLQljaGlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBtODYwN19jaGlwKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNoaXAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljaGlwLT5jbGllbnQgPSBjbGllbnQ7Ci0JY2hpcC0+ZGV2ID0gJmNsaWVudC0+ZGV2OwotCWNoaXAtPnJlYWQgPSBwbTg2MDdfcmVhZF9kZXZpY2U7Ci0JY2hpcC0+d3JpdGUgPSBwbTg2MDdfd3JpdGVfZGV2aWNlOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNoaXApOwotCi0JbXV0ZXhfaW5pdCgmY2hpcC0+aW9fbG9jayk7Ci0JZGV2X3NldF9kcnZkYXRhKGNoaXAtPmRldiwgY2hpcCk7Ci0KLQlyZXQgPSBwbTg2MDdfcmVnX3JlYWQoY2hpcCwgUE04NjA3X0NISVBfSUQpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgQ0hJUCBJRDogJWRcbiIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQlpZiAoKHJldCAmIENISVBfSURfTUFTSykgPT0gQ0hJUF9JRCkKLQkJZGV2X2luZm8oY2hpcC0+ZGV2LCAiTWFydmVsbCA4OFBNODYwNyAoSUQ6ICUwMngpIGRldGVjdGVkXG4iLAotCQkJIHJldCk7Ci0JZWxzZSB7Ci0JCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIGRldGVjdCBNYXJ2ZWxsIDg4UE04NjA3LiAiCi0JCQkiQ2hpcCBJRDogJTAyeFxuIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCWNoaXAtPmNoaXBfaWQgPSByZXQ7Ci0KLQlyZXQgPSBwbTg2MDdfcmVnX3JlYWQoY2hpcCwgUE04NjA3X0JVQ0szKTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxlZCB0byByZWFkIEJVQ0szIHJlZ2lzdGVyOiAlZFxuIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCWlmIChyZXQgJiBQTTg2MDdfQlVDSzNfRE9VQkxFKQotCQljaGlwLT5idWNrM19kb3VibGUgPSAxOwotCi0JcmV0ID0gcG04NjA3X3JlZ19yZWFkKGNoaXAsIFBNODYwN19NSVNDMSk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gcmVhZCBNSVNDMSByZWdpc3RlcjogJWRcbiIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQlpZiAocGRhdGEtPmkyY19wb3J0ID09IFBJMkNfUE9SVCkKLQkJcmV0IHw9IFBNODYwN19NSVNDMV9QSTJDOwotCWVsc2UKLQkJcmV0ICY9IH5QTTg2MDdfTUlTQzFfUEkyQzsKLQlyZXQgPSBwbTg2MDdfcmVnX3dyaXRlKGNoaXAsIFBNODYwN19NSVNDMSwgcmV0KTsKLQlpZiAocmV0IDwgMCkgewotCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxlZCB0byB3cml0ZSBNSVNDMSByZWdpc3RlcjogJWRcbiIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCi0JY291bnQgPSBBUlJBWV9TSVpFKHBtODYwN19kZXZzKTsKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlyZXQgPSBtZmRfYWRkX2RldmljZXMoY2hpcC0+ZGV2LCBpLCAmcG04NjA3X2RldnNbaV0sCi0JCQkJICAgICAgMSwgTlVMTCwgMCk7Ci0JCWlmIChyZXQgIT0gMCkgewotCQkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gYWRkIHN1YmRldnNcbiIpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLQotb3V0OgotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOwotCWtmcmVlKGNoaXApOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IHBtODYwN19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgcG04NjA3X2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCW1mZF9yZW1vdmVfZGV2aWNlcyhjaGlwLT5kZXYpOwotCWtmcmVlKGNoaXApOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgcG04NjA3X2RyaXZlciA9IHsKLQkuZHJpdmVyCT0gewotCQkubmFtZQk9ICI4OFBNODYwNyIsCi0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCX0sCi0JLnByb2JlCQk9IHBtODYwN19wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHBtODYwN19yZW1vdmUpLAotCS5pZF90YWJsZQk9IHBtODYwN19pZF90YWJsZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBtODYwN19pbml0KHZvaWQpCi17Ci0JaW50IHJldDsKLQlyZXQgPSBpMmNfYWRkX2RyaXZlcigmcG04NjA3X2RyaXZlcik7Ci0JaWYgKHJldCAhPSAwKQotCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciA4OFBNODYwNyBJMkMgZHJpdmVyOiAlZFxuIiwgcmV0KTsKLQlyZXR1cm4gcmV0OwotfQotc3Vic3lzX2luaXRjYWxsKHBtODYwN19pbml0KTsKLQotc3RhdGljIHZvaWQgX19leGl0IHBtODYwN19leGl0KHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJnBtODYwN19kcml2ZXIpOwotfQotbW9kdWxlX2V4aXQocG04NjA3X2V4aXQpOwotCi1NT0RVTEVfREVTQ1JJUFRJT04oIlBNSUMgRHJpdmVyIGZvciBNYXJ2ZWxsIDg4UE04NjA3Iik7Ci1NT0RVTEVfQVVUSE9SKCJIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+Iik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC84OHBtODYweC1jb3JlLmMgYi9kcml2ZXJzL21mZC84OHBtODYweC1jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmExNGQyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkLzg4cG04NjB4LWNvcmUuYwpAQCAtMCwwICsxLDc0MCBAQAorLyoKKyAqIEJhc2UgZHJpdmVyIGZvciBNYXJ2ZWxsIDg4UE04NjA3CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKiAJSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvbWZkLzg4cG04NjB4Lmg+CisKKyNkZWZpbmUgSU5UX1NUQVRVU19OVU0JCQkzCisKK2NoYXIgcG04NjB4X2JhY2tsaWdodF9uYW1lW11bTUZEX05BTUVfU0laRV0gPSB7CisJImJhY2tsaWdodC0wIiwKKwkiYmFja2xpZ2h0LTEiLAorCSJiYWNrbGlnaHQtMiIsCit9OworRVhQT1JUX1NZTUJPTChwbTg2MHhfYmFja2xpZ2h0X25hbWUpOworCitjaGFyIHBtODYweF9sZWRfbmFtZVtdW01GRF9OQU1FX1NJWkVdID0geworCSJsZWQwLXJlZCIsCisJImxlZDAtZ3JlZW4iLAorCSJsZWQwLWJsdWUiLAorCSJsZWQxLXJlZCIsCisJImxlZDEtZ3JlZW4iLAorCSJsZWQxLWJsdWUiLAorfTsKK0VYUE9SVF9TWU1CT0wocG04NjB4X2xlZF9uYW1lKTsKKworI2RlZmluZSBQTTg2MDZfQkFDS0xJR0hUX1JFU09VUkNFKF9pLCBfeCkJCVwKK3sJCQkJCQkJXAorCS5uYW1lCT0gcG04NjB4X2JhY2tsaWdodF9uYW1lW19pXSwJCVwKKwkuc3RhcnQJPSBQTTg2MDZfIyNfeCwJCQkJXAorCS5lbmQJPSBQTTg2MDZfIyNfeCwJCQkJXAorCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCQkJXAorfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGJhY2tsaWdodF9yZXNvdXJjZXNbXSA9IHsKKwlQTTg2MDZfQkFDS0xJR0hUX1JFU09VUkNFKFBNODYwNl9CQUNLTElHSFQxLCBXTEVEMUEpLAorCVBNODYwNl9CQUNLTElHSFRfUkVTT1VSQ0UoUE04NjA2X0JBQ0tMSUdIVDIsIFdMRUQyQSksCisJUE04NjA2X0JBQ0tMSUdIVF9SRVNPVVJDRShQTTg2MDZfQkFDS0xJR0hUMywgV0xFRDNBKSwKK307CisKKyNkZWZpbmUgUE04NjA2X0JBQ0tMSUdIVF9ERVZTKF9pKQkJCVwKK3sJCQkJCQkJXAorCS5uYW1lCQk9ICI4OHBtODYweC1iYWNrbGlnaHQiLAkJXAorCS5udW1fcmVzb3VyY2VzCT0gMSwJCQkJXAorCS5yZXNvdXJjZXMJPSAmYmFja2xpZ2h0X3Jlc291cmNlc1tfaV0sCVwKKwkuaWQJCT0gX2ksCQkJCVwKK30KKworc3RhdGljIHN0cnVjdCBtZmRfY2VsbCBiYWNrbGlnaHRfZGV2c1tdID0geworCVBNODYwNl9CQUNLTElHSFRfREVWUyhQTTg2MDZfQkFDS0xJR0hUMSksCisJUE04NjA2X0JBQ0tMSUdIVF9ERVZTKFBNODYwNl9CQUNLTElHSFQyKSwKKwlQTTg2MDZfQkFDS0xJR0hUX0RFVlMoUE04NjA2X0JBQ0tMSUdIVDMpLAorfTsKKworI2RlZmluZSBQTTg2MDZfTEVEX1JFU09VUkNFKF9pLCBfeCkJCQlcCit7CQkJCQkJCVwKKwkubmFtZQk9IHBtODYweF9sZWRfbmFtZVtfaV0sCQkJXAorCS5zdGFydAk9IFBNODYwNl8jI194LAkJCQlcCisJLmVuZAk9IFBNODYwNl8jI194LAkJCQlcCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywJCQlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbGVkX3Jlc291cmNlc1tdID0geworCVBNODYwNl9MRURfUkVTT1VSQ0UoUE04NjA2X0xFRDFfUkVELCBSR0IyQiksCisJUE04NjA2X0xFRF9SRVNPVVJDRShQTTg2MDZfTEVEMV9HUkVFTiwgUkdCMkMpLAorCVBNODYwNl9MRURfUkVTT1VSQ0UoUE04NjA2X0xFRDFfQkxVRSwgUkdCMkQpLAorCVBNODYwNl9MRURfUkVTT1VSQ0UoUE04NjA2X0xFRDJfUkVELCBSR0IxQiksCisJUE04NjA2X0xFRF9SRVNPVVJDRShQTTg2MDZfTEVEMl9HUkVFTiwgUkdCMUMpLAorCVBNODYwNl9MRURfUkVTT1VSQ0UoUE04NjA2X0xFRDJfQkxVRSwgUkdCMUQpLAorfTsKKworI2RlZmluZSBQTTg2MDZfTEVEX0RFVlMoX2kpCQkJCVwKK3sJCQkJCQkJXAorCS5uYW1lCQk9ICI4OHBtODYweC1sZWQiLAkJXAorCS5udW1fcmVzb3VyY2VzCT0gMSwJCQkJXAorCS5yZXNvdXJjZXMJPSAmbGVkX3Jlc291cmNlc1tfaV0sCQlcCisJLmlkCQk9IF9pLAkJCQlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgbGVkX2RldnNbXSA9IHsKKwlQTTg2MDZfTEVEX0RFVlMoUE04NjA2X0xFRDFfUkVEKSwKKwlQTTg2MDZfTEVEX0RFVlMoUE04NjA2X0xFRDFfR1JFRU4pLAorCVBNODYwNl9MRURfREVWUyhQTTg2MDZfTEVEMV9CTFVFKSwKKwlQTTg2MDZfTEVEX0RFVlMoUE04NjA2X0xFRDJfUkVEKSwKKwlQTTg2MDZfTEVEX0RFVlMoUE04NjA2X0xFRDJfR1JFRU4pLAorCVBNODYwNl9MRURfREVWUyhQTTg2MDZfTEVEMl9CTFVFKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG91Y2hfcmVzb3VyY2VzW10gPSB7CisJeworCQkuc3RhcnQJPSBQTTg2MDdfSVJRX1BFTiwKKwkJLmVuZAk9IFBNODYwN19JUlFfUEVOLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtZmRfY2VsbCB0b3VjaF9kZXZzW10gPSB7CisJeworCQkubmFtZQkJPSAiODhwbTg2MHgtdG91Y2giLAorCQkubnVtX3Jlc291cmNlcwk9IDEsCisJCS5yZXNvdXJjZXMJPSAmdG91Y2hfcmVzb3VyY2VzWzBdLAorCX0sCit9OworCisjZGVmaW5lIFBNODYwN19SRUdfUkVTT1VSQ0UoX3N0YXJ0LCBfZW5kKQkJXAorewkJCQkJCQlcCisJLnN0YXJ0CT0gUE04NjA3XyMjX3N0YXJ0LAkJCVwKKwkuZW5kCT0gUE04NjA3XyMjX2VuZCwJCQlcCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTywJCQlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcG93ZXJfc3VwcGx5X3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJCT0gIjg4cG04NjB4LXBvd2VyIiwKKwkJLnN0YXJ0CQk9IFBNODYwN19JUlFfQ0hHLAorCQkuZW5kCQk9IFBNODYwN19JUlFfQ0hHLAorCQkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgcG93ZXJfZGV2c1tdID0geworCXsKKwkJLm5hbWUJCT0gIjg4cG04NjB4LXBvd2VyIiwKKwkJLm51bV9yZXNvdXJjZXMJPSAxLAorCQkucmVzb3VyY2VzCT0gJnBvd2VyX3N1cHBseV9yZXNvdXJjZXNbMF0sCisJCS5pZAkJPSAtMSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBvbmtleV9yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICI4OHBtODYweC1vbmtleSIsCisJCS5zdGFydAkJPSBQTTg2MDdfSVJRX09OS0VZLAorCQkuZW5kCQk9IFBNODYwN19JUlFfT05LRVksCisJCS5mbGFncwkJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBtZmRfY2VsbCBvbmtleV9kZXZzW10gPSB7CisJeworCQkubmFtZQkJPSAiODhwbTg2MHgtb25rZXkiLAorCQkubnVtX3Jlc291cmNlcwk9IDEsCisJCS5yZXNvdXJjZXMJPSAmb25rZXlfcmVzb3VyY2VzWzBdLAorCQkuaWQJCT0gLTEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVndWxhdG9yX3Jlc291cmNlc1tdID0geworCVBNODYwN19SRUdfUkVTT1VSQ0UoQlVDSzEsIEJVQ0sxKSwKKwlQTTg2MDdfUkVHX1JFU09VUkNFKEJVQ0syLCBCVUNLMiksCisJUE04NjA3X1JFR19SRVNPVVJDRShCVUNLMywgQlVDSzMpLAorCVBNODYwN19SRUdfUkVTT1VSQ0UoTERPMSwgIExETzEpLAorCVBNODYwN19SRUdfUkVTT1VSQ0UoTERPMiwgIExETzIpLAorCVBNODYwN19SRUdfUkVTT1VSQ0UoTERPMywgIExETzMpLAorCVBNODYwN19SRUdfUkVTT1VSQ0UoTERPNCwgIExETzQpLAorCVBNODYwN19SRUdfUkVTT1VSQ0UoTERPNSwgIExETzUpLAorCVBNODYwN19SRUdfUkVTT1VSQ0UoTERPNiwgIExETzYpLAorCVBNODYwN19SRUdfUkVTT1VSQ0UoTERPNywgIExETzcpLAorCVBNODYwN19SRUdfUkVTT1VSQ0UoTERPOCwgIExETzgpLAorCVBNODYwN19SRUdfUkVTT1VSQ0UoTERPOSwgIExETzkpLAorCVBNODYwN19SRUdfUkVTT1VSQ0UoTERPMTAsIExETzEwKSwKKwlQTTg2MDdfUkVHX1JFU09VUkNFKExETzEyLCBMRE8xMiksCisJUE04NjA3X1JFR19SRVNPVVJDRShMRE8xNCwgTERPMTQpLAorfTsKKworI2RlZmluZSBQTTg2MDdfUkVHX0RFVlMoX25hbWUsIF9pZCkJCQkJCVwKK3sJCQkJCQkJCQlcCisJLm5hbWUJCT0gIjg4cG04NjA3LSIgI19uYW1lLAkJCQlcCisJLm51bV9yZXNvdXJjZXMJPSAxLAkJCQkJCVwKKwkucmVzb3VyY2VzCT0gJnJlZ3VsYXRvcl9yZXNvdXJjZXNbUE04NjA3X0lEXyMjX2lkXSwJXAorCS5pZAkJPSBQTTg2MDdfSURfIyNfaWQsCQkJCVwKK30KKworc3RhdGljIHN0cnVjdCBtZmRfY2VsbCByZWd1bGF0b3JfZGV2c1tdID0geworCVBNODYwN19SRUdfREVWUyhidWNrMSwgQlVDSzEpLAorCVBNODYwN19SRUdfREVWUyhidWNrMiwgQlVDSzIpLAorCVBNODYwN19SRUdfREVWUyhidWNrMywgQlVDSzMpLAorCVBNODYwN19SRUdfREVWUyhsZG8xLCAgTERPMSksCisJUE04NjA3X1JFR19ERVZTKGxkbzIsICBMRE8yKSwKKwlQTTg2MDdfUkVHX0RFVlMobGRvMywgIExETzMpLAorCVBNODYwN19SRUdfREVWUyhsZG80LCAgTERPNCksCisJUE04NjA3X1JFR19ERVZTKGxkbzUsICBMRE81KSwKKwlQTTg2MDdfUkVHX0RFVlMobGRvNiwgIExETzYpLAorCVBNODYwN19SRUdfREVWUyhsZG83LCAgTERPNyksCisJUE04NjA3X1JFR19ERVZTKGxkbzgsICBMRE84KSwKKwlQTTg2MDdfUkVHX0RFVlMobGRvOSwgIExETzkpLAorCVBNODYwN19SRUdfREVWUyhsZG8xMCwgTERPMTApLAorCVBNODYwN19SRUdfREVWUyhsZG8xMiwgTERPMTIpLAorCVBNODYwN19SRUdfREVWUyhsZG8xNCwgTERPMTQpLAorfTsKKworc3RydWN0IHBtODYweF9pcnFfZGF0YSB7CisJaW50CXJlZzsKKwlpbnQJbWFza19yZWc7CisJaW50CWVuYWJsZTsJCS8qIGVuYWJsZSBvciBub3QgKi8KKwlpbnQJb2ZmczsJCS8qIGJpdCBvZmZzZXQgaW4gbWFzayByZWdpc3RlciAqLworfTsKKworc3RhdGljIHN0cnVjdCBwbTg2MHhfaXJxX2RhdGEgcG04NjB4X2lycXNbXSA9IHsKKwlbUE04NjA3X0lSUV9PTktFWV0gPSB7CisJCS5yZWcJCT0gUE04NjA3X0lOVF9TVEFUVVMxLAorCQkubWFza19yZWcJPSBQTTg2MDdfSU5UX01BU0tfMSwKKwkJLm9mZnMJCT0gMSA8PCAwLAorCX0sCisJW1BNODYwN19JUlFfRVhUT05dID0geworCQkucmVnCQk9IFBNODYwN19JTlRfU1RBVFVTMSwKKwkJLm1hc2tfcmVnCT0gUE04NjA3X0lOVF9NQVNLXzEsCisJCS5vZmZzCQk9IDEgPDwgMSwKKwl9LAorCVtQTTg2MDdfSVJRX0NIR10gPSB7CisJCS5yZWcJCT0gUE04NjA3X0lOVF9TVEFUVVMxLAorCQkubWFza19yZWcJPSBQTTg2MDdfSU5UX01BU0tfMSwKKwkJLm9mZnMJCT0gMSA8PCAyLAorCX0sCisJW1BNODYwN19JUlFfQkFUXSA9IHsKKwkJLnJlZwkJPSBQTTg2MDdfSU5UX1NUQVRVUzEsCisJCS5tYXNrX3JlZwk9IFBNODYwN19JTlRfTUFTS18xLAorCQkub2ZmcwkJPSAxIDw8IDMsCisJfSwKKwlbUE04NjA3X0lSUV9SVENdID0geworCQkucmVnCQk9IFBNODYwN19JTlRfU1RBVFVTMSwKKwkJLm1hc2tfcmVnCT0gUE04NjA3X0lOVF9NQVNLXzEsCisJCS5vZmZzCQk9IDEgPDwgNCwKKwl9LAorCVtQTTg2MDdfSVJRX0NDXSA9IHsKKwkJLnJlZwkJPSBQTTg2MDdfSU5UX1NUQVRVUzEsCisJCS5tYXNrX3JlZwk9IFBNODYwN19JTlRfTUFTS18xLAorCQkub2ZmcwkJPSAxIDw8IDUsCisJfSwKKwlbUE04NjA3X0lSUV9WQkFUXSA9IHsKKwkJLnJlZwkJPSBQTTg2MDdfSU5UX1NUQVRVUzIsCisJCS5tYXNrX3JlZwk9IFBNODYwN19JTlRfTUFTS18yLAorCQkub2ZmcwkJPSAxIDw8IDAsCisJfSwKKwlbUE04NjA3X0lSUV9WQ0hHXSA9IHsKKwkJLnJlZwkJPSBQTTg2MDdfSU5UX1NUQVRVUzIsCisJCS5tYXNrX3JlZwk9IFBNODYwN19JTlRfTUFTS18yLAorCQkub2ZmcwkJPSAxIDw8IDEsCisJfSwKKwlbUE04NjA3X0lSUV9WU1lTXSA9IHsKKwkJLnJlZwkJPSBQTTg2MDdfSU5UX1NUQVRVUzIsCisJCS5tYXNrX3JlZwk9IFBNODYwN19JTlRfTUFTS18yLAorCQkub2ZmcwkJPSAxIDw8IDIsCisJfSwKKwlbUE04NjA3X0lSUV9USU5UXSA9IHsKKwkJLnJlZwkJPSBQTTg2MDdfSU5UX1NUQVRVUzIsCisJCS5tYXNrX3JlZwk9IFBNODYwN19JTlRfTUFTS18yLAorCQkub2ZmcwkJPSAxIDw8IDMsCisJfSwKKwlbUE04NjA3X0lSUV9HUEFEQzBdID0geworCQkucmVnCQk9IFBNODYwN19JTlRfU1RBVFVTMiwKKwkJLm1hc2tfcmVnCT0gUE04NjA3X0lOVF9NQVNLXzIsCisJCS5vZmZzCQk9IDEgPDwgNCwKKwl9LAorCVtQTTg2MDdfSVJRX0dQQURDMV0gPSB7CisJCS5yZWcJCT0gUE04NjA3X0lOVF9TVEFUVVMyLAorCQkubWFza19yZWcJPSBQTTg2MDdfSU5UX01BU0tfMiwKKwkJLm9mZnMJCT0gMSA8PCA1LAorCX0sCisJW1BNODYwN19JUlFfR1BBREMyXSA9IHsKKwkJLnJlZwkJPSBQTTg2MDdfSU5UX1NUQVRVUzIsCisJCS5tYXNrX3JlZwk9IFBNODYwN19JTlRfTUFTS18yLAorCQkub2ZmcwkJPSAxIDw8IDYsCisJfSwKKwlbUE04NjA3X0lSUV9HUEFEQzNdID0geworCQkucmVnCQk9IFBNODYwN19JTlRfU1RBVFVTMiwKKwkJLm1hc2tfcmVnCT0gUE04NjA3X0lOVF9NQVNLXzIsCisJCS5vZmZzCQk9IDEgPDwgNywKKwl9LAorCVtQTTg2MDdfSVJRX0FVRElPX1NIT1JUXSA9IHsKKwkJLnJlZwkJPSBQTTg2MDdfSU5UX1NUQVRVUzMsCisJCS5tYXNrX3JlZwk9IFBNODYwN19JTlRfTUFTS18zLAorCQkub2ZmcwkJPSAxIDw8IDAsCisJfSwKKwlbUE04NjA3X0lSUV9QRU5dID0geworCQkucmVnCQk9IFBNODYwN19JTlRfU1RBVFVTMywKKwkJLm1hc2tfcmVnCT0gUE04NjA3X0lOVF9NQVNLXzMsCisJCS5vZmZzCQk9IDEgPDwgMSwKKwl9LAorCVtQTTg2MDdfSVJRX0hFQURTRVRdID0geworCQkucmVnCQk9IFBNODYwN19JTlRfU1RBVFVTMywKKwkJLm1hc2tfcmVnCT0gUE04NjA3X0lOVF9NQVNLXzMsCisJCS5vZmZzCQk9IDEgPDwgMiwKKwl9LAorCVtQTTg2MDdfSVJRX0hPT0tdID0geworCQkucmVnCQk9IFBNODYwN19JTlRfU1RBVFVTMywKKwkJLm1hc2tfcmVnCT0gUE04NjA3X0lOVF9NQVNLXzMsCisJCS5vZmZzCQk9IDEgPDwgMywKKwl9LAorCVtQTTg2MDdfSVJRX01JQ0lOXSA9IHsKKwkJLnJlZwkJPSBQTTg2MDdfSU5UX1NUQVRVUzMsCisJCS5tYXNrX3JlZwk9IFBNODYwN19JTlRfTUFTS18zLAorCQkub2ZmcwkJPSAxIDw8IDQsCisJfSwKKwlbUE04NjA3X0lSUV9DSEdfRkFJTF0gPSB7CisJCS5yZWcJCT0gUE04NjA3X0lOVF9TVEFUVVMzLAorCQkubWFza19yZWcJPSBQTTg2MDdfSU5UX01BU0tfMywKKwkJLm9mZnMJCT0gMSA8PCA1LAorCX0sCisJW1BNODYwN19JUlFfQ0hHX0RPTkVdID0geworCQkucmVnCQk9IFBNODYwN19JTlRfU1RBVFVTMywKKwkJLm1hc2tfcmVnCT0gUE04NjA3X0lOVF9NQVNLXzMsCisJCS5vZmZzCQk9IDEgPDwgNiwKKwl9LAorCVtQTTg2MDdfSVJRX0NIR19GQVVMVF0gPSB7CisJCS5yZWcJCT0gUE04NjA3X0lOVF9TVEFUVVMzLAorCQkubWFza19yZWcJPSBQTTg2MDdfSU5UX01BU0tfMywKKwkJLm9mZnMJCT0gMSA8PCA3LAorCX0sCit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwbTg2MHhfaXJxX2RhdGEgKmlycV90b19wbTg2MHgoc3RydWN0IHBtODYweF9jaGlwICpjaGlwLAorCQkJCQkJICAgIGludCBpcnEpCit7CisJcmV0dXJuICZwbTg2MHhfaXJxc1tpcnEgLSBjaGlwLT5pcnFfYmFzZV07Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBwbTg2MHhfaXJxKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHBtODYweF9jaGlwICpjaGlwID0gZGF0YTsKKwlzdHJ1Y3QgcG04NjB4X2lycV9kYXRhICppcnFfZGF0YTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjOworCWludCByZWFkX3JlZyA9IC0xLCB2YWx1ZSA9IDA7CisJaW50IGk7CisKKwlpMmMgPSAoY2hpcC0+aWQgPT0gQ0hJUF9QTTg2MDcpID8gY2hpcC0+Y2xpZW50IDogY2hpcC0+Y29tcGFuaW9uOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHBtODYweF9pcnFzKTsgaSsrKSB7CisJCWlycV9kYXRhID0gJnBtODYweF9pcnFzW2ldOworCQlpZiAocmVhZF9yZWcgIT0gaXJxX2RhdGEtPnJlZykgeworCQkJcmVhZF9yZWcgPSBpcnFfZGF0YS0+cmVnOworCQkJdmFsdWUgPSBwbTg2MHhfcmVnX3JlYWQoaTJjLCBpcnFfZGF0YS0+cmVnKTsKKwkJfQorCQlpZiAodmFsdWUgJiBpcnFfZGF0YS0+ZW5hYmxlKQorCQkJaGFuZGxlX25lc3RlZF9pcnEoY2hpcC0+aXJxX2Jhc2UgKyBpKTsKKwl9CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBwbTg2MHhfaXJxX2xvY2sodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCisJbXV0ZXhfbG9jaygmY2hpcC0+aXJxX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBwbTg2MHhfaXJxX3N5bmNfdW5sb2NrKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IHBtODYweF9jaGlwICpjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlzdHJ1Y3QgcG04NjB4X2lycV9kYXRhICppcnFfZGF0YTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjOworCXN0YXRpYyB1bnNpZ25lZCBjaGFyIGNhY2hlZFszXSA9IHsweDAsIDB4MCwgMHgwfTsKKwl1bnNpZ25lZCBjaGFyIG1hc2tbM107CisJaW50IGk7CisKKwlpMmMgPSAoY2hpcC0+aWQgPT0gQ0hJUF9QTTg2MDcpID8gY2hpcC0+Y2xpZW50IDogY2hpcC0+Y29tcGFuaW9uOworCS8qIExvYWQgY2FjaGVkIHZhbHVlLiBJbiBpbml0aWFsLCBhbGwgSVJRcyBhcmUgbWFza2VkICovCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJbWFza1tpXSA9IGNhY2hlZFtpXTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbTg2MHhfaXJxcyk7IGkrKykgeworCQlpcnFfZGF0YSA9ICZwbTg2MHhfaXJxc1tpXTsKKwkJc3dpdGNoIChpcnFfZGF0YS0+bWFza19yZWcpIHsKKwkJY2FzZSBQTTg2MDdfSU5UX01BU0tfMToKKwkJCW1hc2tbMF0gJj0gfmlycV9kYXRhLT5vZmZzOworCQkJbWFza1swXSB8PSBpcnFfZGF0YS0+ZW5hYmxlOworCQkJYnJlYWs7CisJCWNhc2UgUE04NjA3X0lOVF9NQVNLXzI6CisJCQltYXNrWzFdICY9IH5pcnFfZGF0YS0+b2ZmczsKKwkJCW1hc2tbMV0gfD0gaXJxX2RhdGEtPmVuYWJsZTsKKwkJCWJyZWFrOworCQljYXNlIFBNODYwN19JTlRfTUFTS18zOgorCQkJbWFza1syXSAmPSB+aXJxX2RhdGEtPm9mZnM7CisJCQltYXNrWzJdIHw9IGlycV9kYXRhLT5lbmFibGU7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRldl9lcnIoY2hpcC0+ZGV2LCAid3JvbmcgSVJRXG4iKTsKKwkJCWJyZWFrOworCQl9CisJfQorCS8qIHVwZGF0ZSBtYXNrIGludG8gcmVnaXN0ZXJzICovCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlpZiAobWFza1tpXSAhPSBjYWNoZWRbaV0pIHsKKwkJCWNhY2hlZFtpXSA9IG1hc2tbaV07CisJCQlwbTg2MHhfcmVnX3dyaXRlKGkyYywgUE04NjA3X0lOVF9NQVNLXzEgKyBpLCBtYXNrW2ldKTsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmY2hpcC0+aXJxX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBwbTg2MHhfaXJxX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBwbTg2MHhfY2hpcCAqY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJcG04NjB4X2lycXNbaXJxIC0gY2hpcC0+aXJxX2Jhc2VdLmVuYWJsZQorCQk9IHBtODYweF9pcnFzW2lycSAtIGNoaXAtPmlycV9iYXNlXS5vZmZzOworfQorCitzdGF0aWMgdm9pZCBwbTg2MHhfaXJxX2Rpc2FibGUodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXBtODYweF9pcnFzW2lycSAtIGNoaXAtPmlycV9iYXNlXS5lbmFibGUgPSAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHBtODYweF9pcnFfY2hpcCA9IHsKKwkubmFtZQkJPSAiODhwbTg2MHgiLAorCS5idXNfbG9jawk9IHBtODYweF9pcnFfbG9jaywKKwkuYnVzX3N5bmNfdW5sb2NrID0gcG04NjB4X2lycV9zeW5jX3VubG9jaywKKwkuZW5hYmxlCQk9IHBtODYweF9pcnFfZW5hYmxlLAorCS5kaXNhYmxlCT0gcG04NjB4X2lycV9kaXNhYmxlLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgZGV2aWNlX2dwYWRjX2luaXQoc3RydWN0IHBtODYweF9jaGlwICpjaGlwLAorCQkJCSAgICAgICBzdHJ1Y3QgcG04NjB4X3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICppMmMgPSAoY2hpcC0+aWQgPT0gQ0hJUF9QTTg2MDcpID8gY2hpcC0+Y2xpZW50IFwKKwkJCQk6IGNoaXAtPmNvbXBhbmlvbjsKKwlpbnQgdXNlX2dwYWRjID0gMCwgZGF0YSwgcmV0OworCisJLyogaW5pdGlhbGl6ZSBHUEFEQyB3aXRob3V0IGFjdGl2YXRpbmcgaXQgKi8KKworCWlmIChwZGF0YSAmJiBwZGF0YS0+dG91Y2gpIHsKKwkJLyogc2V0IEdQQURDIE1JU0MxIHJlZ2lzdGVyICovCisJCWRhdGEgPSAwOworCQlkYXRhIHw9IChwZGF0YS0+dG91Y2gtPmdwYWRjX3ByZWJpYXMgPDwgMSkKKwkJCSYgUE04NjA3X0dQQURDX1BSRUJJQVNfTUFTSzsKKwkJZGF0YSB8PSAocGRhdGEtPnRvdWNoLT5zbG90X2N5Y2xlIDw8IDMpCisJCQkmIFBNODYwN19HUEFEQ19TTE9UX0NZQ0xFX01BU0s7CisJCWRhdGEgfD0gKHBkYXRhLT50b3VjaC0+b2ZmX3NjYWxlIDw8IDUpCisJCQkmIFBNODYwN19HUEFEQ19PRkZfU0NBTEVfTUFTSzsKKwkJZGF0YSB8PSAocGRhdGEtPnRvdWNoLT5zd19jYWwgPDwgNykKKwkJCSYgUE04NjA3X0dQQURDX1NXX0NBTF9NQVNLOworCQlpZiAoZGF0YSkgeworCQkJcmV0ID0gcG04NjB4X3JlZ193cml0ZShpMmMsIFBNODYwN19HUEFEQ19NSVNDMSwgZGF0YSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJfQorCQkvKiBzZXQgdHNpIHByZWJpYXMgdGltZSAqLworCQlpZiAocGRhdGEtPnRvdWNoLT50c2lfcHJlYmlhcykgeworCQkJZGF0YSA9IHBkYXRhLT50b3VjaC0+dHNpX3ByZWJpYXM7CisJCQlyZXQgPSBwbTg2MHhfcmVnX3dyaXRlKGkyYywgUE04NjA3X1RTSV9QUkVCSUFTLCBkYXRhKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0OworCQl9CisJCS8qIHNldCBwcmViaWFzICYgcHJlY2hnIHRpbWUgb2YgcGVuIGRldGVjdCAqLworCQlkYXRhID0gMDsKKwkJZGF0YSB8PSBwZGF0YS0+dG91Y2gtPnBlbl9wcmViaWFzICYgUE04NjA3X1BEX1BSRUJJQVNfTUFTSzsKKwkJZGF0YSB8PSAocGRhdGEtPnRvdWNoLT5wZW5fcHJlY2hnIDw8IDUpCisJCQkmIFBNODYwN19QRF9QUkVDSEdfTUFTSzsKKwkJaWYgKGRhdGEpIHsKKwkJCXJldCA9IHBtODYweF9yZWdfd3JpdGUoaTJjLCBQTTg2MDdfUERfUFJFQklBUywgZGF0YSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJfQorCisJCXVzZV9ncGFkYyA9IDE7CisJfQorCisJLyogdHVybiBvbiBHUEFEQyAqLworCWlmICh1c2VfZ3BhZGMpIHsKKwkJcmV0ID0gcG04NjB4X3NldF9iaXRzKGkyYywgUE04NjA3X0dQQURDX01JU0MxLAorCQkJCSAgICAgIFBNODYwN19HUEFEQ19FTiwgUE04NjA3X0dQQURDX0VOKTsKKwl9CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgZGV2aWNlX2lycV9pbml0KHN0cnVjdCBwbTg2MHhfY2hpcCAqY2hpcCwKKwkJCQkgICAgIHN0cnVjdCBwbTg2MHhfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IChjaGlwLT5pZCA9PSBDSElQX1BNODYwNykgPyBjaGlwLT5jbGllbnQgXAorCQkJCTogY2hpcC0+Y29tcGFuaW9uOworCXVuc2lnbmVkIGNoYXIgc3RhdHVzX2J1ZltJTlRfU1RBVFVTX05VTV07CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IElSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9PTkVTSE9UOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlpbnQgaSwgZGF0YSwgbWFzaywgcmV0ID0gLUVJTlZBTDsKKwlpbnQgX19pcnE7CisKKwlpZiAoIXBkYXRhIHx8ICFwZGF0YS0+aXJxX2Jhc2UpIHsKKwkJZGV2X3dhcm4oY2hpcC0+ZGV2LCAiTm8gaW50ZXJydXB0IHN1cHBvcnQgb24gSVJRIGJhc2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltYXNrID0gUE04NjA3X0IwX01JU0MxX0lOVl9JTlQgfCBQTTg2MDdfQjBfTUlTQzFfSU5UX0NMRUFSCisJCXwgUE04NjA3X0IwX01JU0MxX0lOVF9NQVNLOworCWRhdGEgPSAwOworCWNoaXAtPmlycV9tb2RlID0gMDsKKwlpZiAocGRhdGEgJiYgcGRhdGEtPmlycV9tb2RlKSB7CisJCS8qCisJCSAqIGlycV9tb2RlIGRlZmluZXMgdGhlIHdheSBvZiBjbGVhcmluZyBpbnRlcnJ1cHQuIElmIGl0J3MgMSwKKwkJICogY2xlYXIgSVJRIGJ5IHdyaXRlLiBPdGhlcndpc2UsIGNsZWFyIGl0IGJ5IHJlYWQuCisJCSAqIFRoaXMgY29udHJvbCBiaXQgaXMgdmFsaWQgZnJvbSA4OFBNODYwNyBCMCBzdGVwaW5nLgorCQkgKi8KKwkJZGF0YSB8PSBQTTg2MDdfQjBfTUlTQzFfSU5UX0NMRUFSOworCQljaGlwLT5pcnFfbW9kZSA9IDE7CisJfQorCXJldCA9IHBtODYweF9zZXRfYml0cyhpMmMsIFBNODYwN19CMF9NSVNDMSwgbWFzaywgZGF0YSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJLyogbWFzayBhbGwgSVJRcyAqLworCW1lbXNldChzdGF0dXNfYnVmLCAwLCBJTlRfU1RBVFVTX05VTSk7CisJcmV0ID0gcG04NjB4X2J1bGtfd3JpdGUoaTJjLCBQTTg2MDdfSU5UX01BU0tfMSwKKwkJCQlJTlRfU1RBVFVTX05VTSwgc3RhdHVzX2J1Zik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJaWYgKGNoaXAtPmlycV9tb2RlKSB7CisJCS8qIGNsZWFyIGludGVycnVwdCBzdGF0dXMgYnkgd3JpdGUgKi8KKwkJbWVtc2V0KHN0YXR1c19idWYsIDB4RkYsIElOVF9TVEFUVVNfTlVNKTsKKwkJcmV0ID0gcG04NjB4X2J1bGtfd3JpdGUoaTJjLCBQTTg2MDdfSU5UX1NUQVRVUzEsCisJCQkJCUlOVF9TVEFUVVNfTlVNLCBzdGF0dXNfYnVmKTsKKwl9IGVsc2UgeworCQkvKiBjbGVhciBpbnRlcnJ1cHQgc3RhdHVzIGJ5IHJlYWQgKi8KKwkJcmV0ID0gcG04NjB4X2J1bGtfcmVhZChpMmMsIFBNODYwN19JTlRfU1RBVFVTMSwKKwkJCQkJSU5UX1NUQVRVU19OVU0sIHN0YXR1c19idWYpOworCX0KKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwltdXRleF9pbml0KCZjaGlwLT5pcnFfbG9jayk7CisJY2hpcC0+aXJxX2Jhc2UgPSBwZGF0YS0+aXJxX2Jhc2U7CisJY2hpcC0+Y29yZV9pcnEgPSBpMmMtPmlycTsKKwlpZiAoIWNoaXAtPmNvcmVfaXJxKQorCQlnb3RvIG91dDsKKworCWRlc2MgPSBpcnFfdG9fZGVzYyhjaGlwLT5jb3JlX2lycSk7CisKKwkvKiByZWdpc3RlciBJUlEgYnkgZ2VuaXJxICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocG04NjB4X2lycXMpOyBpKyspIHsKKwkJX19pcnEgPSBpICsgY2hpcC0+aXJxX2Jhc2U7CisJCXNldF9pcnFfY2hpcF9kYXRhKF9faXJxLCBjaGlwKTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKF9faXJxLCAmcG04NjB4X2lycV9jaGlwLAorCQkJCQkgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJc2V0X2lycV9uZXN0ZWRfdGhyZWFkKF9faXJxLCAxKTsKKyNpZmRlZiBDT05GSUdfQVJNCisJCXNldF9pcnFfZmxhZ3MoX19pcnEsIElSUUZfVkFMSUQpOworI2Vsc2UKKwkJc2V0X2lycV9ub3Byb2JlKF9faXJxKTsKKyNlbmRpZgorCX0KKworCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGNoaXAtPmNvcmVfaXJxLCBOVUxMLCBwbTg2MHhfaXJxLCBmbGFncywKKwkJCQkgICAiODhwbTg2MHgiLCBjaGlwKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgSVJROiAlZFxuIiwgcmV0KTsKKwkJY2hpcC0+Y29yZV9pcnEgPSAwOworCX0KKworCXJldHVybiAwOworb3V0OgorCWNoaXAtPmNvcmVfaXJxID0gMDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgZGV2aWNlX2lycV9leGl0KHN0cnVjdCBwbTg2MHhfY2hpcCAqY2hpcCkKK3sKKwlpZiAoY2hpcC0+Y29yZV9pcnEpCisJCWZyZWVfaXJxKGNoaXAtPmNvcmVfaXJxLCBjaGlwKTsKK30KKworc3RhdGljIHZvaWQgX19kZXZpbml0IGRldmljZV84NjA2X2luaXQoc3RydWN0IHBtODYweF9jaGlwICpjaGlwLAorCQkJCSAgICAgICBzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgICBzdHJ1Y3QgcG04NjB4X3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCWludCByZXQ7CisKKwlpZiAocGRhdGEgJiYgcGRhdGEtPmJhY2tsaWdodCkgeworCQlyZXQgPSBtZmRfYWRkX2RldmljZXMoY2hpcC0+ZGV2LCAwLCAmYmFja2xpZ2h0X2RldnNbMF0sCisJCQkJICAgICAgQVJSQVlfU0laRShiYWNrbGlnaHRfZGV2cyksCisJCQkJICAgICAgJmJhY2tsaWdodF9yZXNvdXJjZXNbMF0sIDApOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gYWRkIGJhY2tsaWdodCAiCisJCQkJInN1YmRldlxuIik7CisJCQlnb3RvIG91dF9kZXY7CisJCX0KKwl9CisKKwlpZiAocGRhdGEgJiYgcGRhdGEtPmxlZCkgeworCQlyZXQgPSBtZmRfYWRkX2RldmljZXMoY2hpcC0+ZGV2LCAwLCAmbGVkX2RldnNbMF0sCisJCQkJICAgICAgQVJSQVlfU0laRShsZWRfZGV2cyksCisJCQkJICAgICAgJmxlZF9yZXNvdXJjZXNbMF0sIDApOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gYWRkIGxlZCAiCisJCQkJInN1YmRldlxuIik7CisJCQlnb3RvIG91dF9kZXY7CisJCX0KKwl9CisJcmV0dXJuOworb3V0X2RldjoKKwltZmRfcmVtb3ZlX2RldmljZXMoY2hpcC0+ZGV2KTsKKwlkZXZpY2VfaXJxX2V4aXQoY2hpcCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBkZXZpY2VfODYwN19pbml0KHN0cnVjdCBwbTg2MHhfY2hpcCAqY2hpcCwKKwkJCQkgICAgICAgc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICAgc3RydWN0IHBtODYweF9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwlpbnQgZGF0YSwgcmV0OworCisJcmV0ID0gcG04NjB4X3JlZ19yZWFkKGkyYywgUE04NjA3X0NISVBfSUQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgQ0hJUCBJRDogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoKHJldCAmIFBNODYwN19WRVJTSU9OX01BU0spID09IFBNODYwN19WRVJTSU9OKQorCQlkZXZfaW5mbyhjaGlwLT5kZXYsICJNYXJ2ZWxsIDg4UE04NjA3IChJRDogJTAyeCkgZGV0ZWN0ZWRcbiIsCisJCQkgcmV0KTsKKwllbHNlIHsKKwkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gZGV0ZWN0IE1hcnZlbGwgODhQTTg2MDcuICIKKwkJCSJDaGlwIElEOiAlMDJ4XG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBwbTg2MHhfcmVnX3JlYWQoaTJjLCBQTTg2MDdfQlVDSzMpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgQlVDSzMgcmVnaXN0ZXI6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisJaWYgKHJldCAmIFBNODYwN19CVUNLM19ET1VCTEUpCisJCWNoaXAtPmJ1Y2szX2RvdWJsZSA9IDE7CisKKwlyZXQgPSBwbTg2MHhfcmVnX3JlYWQoaTJjLCBQTTg2MDdfQjBfTUlTQzEpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgTUlTQzEgcmVnaXN0ZXI6ICVkXG4iLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocGRhdGEgJiYgKHBkYXRhLT5pMmNfcG9ydCA9PSBQSTJDX1BPUlQpKQorCQlkYXRhID0gUE04NjA3X0IwX01JU0MxX1BJMkM7CisJZWxzZQorCQlkYXRhID0gMDsKKwlyZXQgPSBwbTg2MHhfc2V0X2JpdHMoaTJjLCBQTTg2MDdfQjBfTUlTQzEsIFBNODYwN19CMF9NSVNDMV9QSTJDLCBkYXRhKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxlZCB0byBhY2Nlc3MgTUlTQzE6JWRcbiIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGRldmljZV9ncGFkY19pbml0KGNoaXAsIHBkYXRhKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSBkZXZpY2VfaXJxX2luaXQoY2hpcCwgcGRhdGEpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IG1mZF9hZGRfZGV2aWNlcyhjaGlwLT5kZXYsIDAsICZyZWd1bGF0b3JfZGV2c1swXSwKKwkJCSAgICAgIEFSUkFZX1NJWkUocmVndWxhdG9yX2RldnMpLAorCQkJICAgICAgJnJlZ3VsYXRvcl9yZXNvdXJjZXNbMF0sIDApOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIGFkZCByZWd1bGF0b3Igc3ViZGV2XG4iKTsKKwkJZ290byBvdXRfZGV2OworCX0KKworCWlmIChwZGF0YSAmJiBwZGF0YS0+dG91Y2gpIHsKKwkJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKGNoaXAtPmRldiwgMCwgJnRvdWNoX2RldnNbMF0sCisJCQkJICAgICAgQVJSQVlfU0laRSh0b3VjaF9kZXZzKSwKKwkJCQkgICAgICAmdG91Y2hfcmVzb3VyY2VzWzBdLCAwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIGFkZCB0b3VjaCAiCisJCQkJInN1YmRldlxuIik7CisJCQlnb3RvIG91dF9kZXY7CisJCX0KKwl9CisKKwlpZiAocGRhdGEgJiYgcGRhdGEtPnBvd2VyKSB7CisJCXJldCA9IG1mZF9hZGRfZGV2aWNlcyhjaGlwLT5kZXYsIDAsICZwb3dlcl9kZXZzWzBdLAorCQkJCSAgICAgIEFSUkFZX1NJWkUocG93ZXJfZGV2cyksCisJCQkJICAgICAgJnBvd2VyX3N1cHBseV9yZXNvdXJjZXNbMF0sIDApOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gYWRkIHBvd2VyIHN1cHBseSAiCisJCQkJInN1YmRldlxuIik7CisJCQlnb3RvIG91dF9kZXY7CisJCX0KKwl9CisKKwlyZXQgPSBtZmRfYWRkX2RldmljZXMoY2hpcC0+ZGV2LCAwLCAmb25rZXlfZGV2c1swXSwKKwkJCSAgICAgIEFSUkFZX1NJWkUob25rZXlfZGV2cyksCisJCQkgICAgICAmb25rZXlfcmVzb3VyY2VzWzBdLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxlZCB0byBhZGQgb25rZXkgc3ViZGV2XG4iKTsKKwkJZ290byBvdXRfZGV2OworCX0KKworCXJldHVybjsKK291dF9kZXY6CisJbWZkX3JlbW92ZV9kZXZpY2VzKGNoaXAtPmRldik7CisJZGV2aWNlX2lycV9leGl0KGNoaXApOworb3V0OgorCXJldHVybjsKK30KKworaW50IHBtODYweF9kZXZpY2VfaW5pdChzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXAsCisJCSAgICAgICBzdHJ1Y3QgcG04NjB4X3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCWNoaXAtPmNvcmVfaXJxID0gMDsKKworCXN3aXRjaCAoY2hpcC0+aWQpIHsKKwljYXNlIENISVBfUE04NjA2OgorCQlkZXZpY2VfODYwNl9pbml0KGNoaXAsIGNoaXAtPmNsaWVudCwgcGRhdGEpOworCQlicmVhazsKKwljYXNlIENISVBfUE04NjA3OgorCQlkZXZpY2VfODYwN19pbml0KGNoaXAsIGNoaXAtPmNsaWVudCwgcGRhdGEpOworCQlicmVhazsKKwl9CisKKwlpZiAoY2hpcC0+Y29tcGFuaW9uKSB7CisJCXN3aXRjaCAoY2hpcC0+aWQpIHsKKwkJY2FzZSBDSElQX1BNODYwNzoKKwkJCWRldmljZV84NjA2X2luaXQoY2hpcCwgY2hpcC0+Y29tcGFuaW9uLCBwZGF0YSk7CisJCQlicmVhazsKKwkJY2FzZSBDSElQX1BNODYwNjoKKwkJCWRldmljZV84NjA3X2luaXQoY2hpcCwgY2hpcC0+Y29tcGFuaW9uLCBwZGF0YSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCit2b2lkIHBtODYweF9kZXZpY2VfZXhpdChzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXApCit7CisJZGV2aWNlX2lycV9leGl0KGNoaXApOworCW1mZF9yZW1vdmVfZGV2aWNlcyhjaGlwLT5kZXYpOworfQorCitNT0RVTEVfREVTQ1JJUFRJT04oIlBNSUMgRHJpdmVyIGZvciBNYXJ2ZWxsIDg4UE04NjB4Iik7CitNT0RVTEVfQVVUSE9SKCJIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC84OHBtODYweC1pMmMuYyBiL2RyaXZlcnMvbWZkLzg4cG04NjB4LWkyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzN2UxMmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC84OHBtODYweC1pMmMuYwpAQCAtMCwwICsxLDIzNiBAQAorLyoKKyAqIEkyQyBkcml2ZXIgZm9yIE1hcnZlbGwgODhQTTg2MHgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqIAlIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC84OHBtODYweC5oPgorCitzdGF0aWMgaW5saW5lIGludCBwbTg2MHhfcmVhZF9kZXZpY2Uoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgIGludCByZWcsIGludCBieXRlcywgdm9pZCAqZGVzdCkKK3sKKwl1bnNpZ25lZCBjaGFyIGRhdGE7CisJaW50IHJldDsKKworCWRhdGEgPSAodW5zaWduZWQgY2hhcilyZWc7CisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGkyYywgJmRhdGEsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gaTJjX21hc3Rlcl9yZWN2KGkyYywgZGVzdCwgYnl0ZXMpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwbTg2MHhfd3JpdGVfZGV2aWNlKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsCisJCQkJICAgICAgaW50IHJlZywgaW50IGJ5dGVzLCB2b2lkICpzcmMpCit7CisJdW5zaWduZWQgY2hhciBidWZbYnl0ZXMgKyAxXTsKKwlpbnQgcmV0OworCisJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpcmVnOworCW1lbWNweSgmYnVmWzFdLCBzcmMsIGJ5dGVzKTsKKworCXJldCA9IGkyY19tYXN0ZXJfc2VuZChpMmMsIGJ1ZiwgYnl0ZXMgKyAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworaW50IHBtODYweF9yZWdfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBpbnQgcmVnKQoreworCXN0cnVjdCBwbTg2MHhfY2hpcCAqY2hpcCA9IGkyY19nZXRfY2xpZW50ZGF0YShpMmMpOworCXVuc2lnbmVkIGNoYXIgZGF0YTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmY2hpcC0+aW9fbG9jayk7CisJcmV0ID0gcG04NjB4X3JlYWRfZGV2aWNlKGkyYywgcmVnLCAxLCAmZGF0YSk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pb19sb2NrKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWVsc2UKKwkJcmV0dXJuIChpbnQpZGF0YTsKK30KK0VYUE9SVF9TWU1CT0wocG04NjB4X3JlZ19yZWFkKTsKKworaW50IHBtODYweF9yZWdfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmkyYywgaW50IHJlZywKKwkJICAgICB1bnNpZ25lZCBjaGFyIGRhdGEpCit7CisJc3RydWN0IHBtODYweF9jaGlwICpjaGlwID0gaTJjX2dldF9jbGllbnRkYXRhKGkyYyk7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmNoaXAtPmlvX2xvY2spOworCXJldCA9IHBtODYweF93cml0ZV9kZXZpY2UoaTJjLCByZWcsIDEsICZkYXRhKTsKKwltdXRleF91bmxvY2soJmNoaXAtPmlvX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocG04NjB4X3JlZ193cml0ZSk7CisKK2ludCBwbTg2MHhfYnVsa19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCByZWcsCisJCSAgICAgaW50IGNvdW50LCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IHBtODYweF9jaGlwICpjaGlwID0gaTJjX2dldF9jbGllbnRkYXRhKGkyYyk7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmNoaXAtPmlvX2xvY2spOworCXJldCA9IHBtODYweF9yZWFkX2RldmljZShpMmMsIHJlZywgY291bnQsIGJ1Zik7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pb19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKHBtODYweF9idWxrX3JlYWQpOworCitpbnQgcG04NjB4X2J1bGtfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmkyYywgaW50IHJlZywKKwkJICAgICAgaW50IGNvdW50LCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IHBtODYweF9jaGlwICpjaGlwID0gaTJjX2dldF9jbGllbnRkYXRhKGkyYyk7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmNoaXAtPmlvX2xvY2spOworCXJldCA9IHBtODYweF93cml0ZV9kZXZpY2UoaTJjLCByZWcsIGNvdW50LCBidWYpOworCW11dGV4X3VubG9jaygmY2hpcC0+aW9fbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChwbTg2MHhfYnVsa193cml0ZSk7CisKK2ludCBwbTg2MHhfc2V0X2JpdHMoc3RydWN0IGkyY19jbGllbnQgKmkyYywgaW50IHJlZywKKwkJICAgIHVuc2lnbmVkIGNoYXIgbWFzaywgdW5zaWduZWQgY2hhciBkYXRhKQoreworCXN0cnVjdCBwbTg2MHhfY2hpcCAqY2hpcCA9IGkyY19nZXRfY2xpZW50ZGF0YShpMmMpOworCXVuc2lnbmVkIGNoYXIgdmFsdWU7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmNoaXAtPmlvX2xvY2spOworCXJldCA9IHBtODYweF9yZWFkX2RldmljZShpMmMsIHJlZywgMSwgJnZhbHVlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJdmFsdWUgJj0gfm1hc2s7CisJdmFsdWUgfD0gZGF0YTsKKwlyZXQgPSBwbTg2MHhfd3JpdGVfZGV2aWNlKGkyYywgcmVnLCAxLCAmdmFsdWUpOworb3V0OgorCW11dGV4X3VubG9jaygmY2hpcC0+aW9fbG9jayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wocG04NjB4X3NldF9iaXRzKTsKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgcG04NjB4X2lkX3RhYmxlW10gPSB7CisJeyAiODhQTTg2MHgiLCAwIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgcG04NjB4X2lkX3RhYmxlKTsKKworc3RhdGljIGludCB2ZXJpZnlfYWRkcihzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjKQoreworCXVuc2lnbmVkIHNob3J0IGFkZHJfODYwN1tdID0gezB4MzAsIDB4MzR9OworCXVuc2lnbmVkIHNob3J0IGFkZHJfODYwNltdID0gezB4MTAsIDB4MTF9OworCWludCBzaXplLCBpOworCisJaWYgKGkyYyA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlzaXplID0gQVJSQVlfU0laRShhZGRyXzg2MDYpOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJaWYgKGkyYy0+YWRkciA9PSAqKGFkZHJfODYwNiArIGkpKQorCQkJcmV0dXJuIENISVBfUE04NjA2OworCX0KKwlzaXplID0gQVJSQVlfU0laRShhZGRyXzg2MDcpOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJaWYgKGkyYy0+YWRkciA9PSAqKGFkZHJfODYwNyArIGkpKQorCQkJcmV0dXJuIENISVBfUE04NjA3OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgcG04NjB4X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHBtODYweF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHBtODYweF9jaGlwICpjaGlwOworCisJaWYgKCFwZGF0YSkgeworCQlwcl9pbmZvKCJObyBwbGF0Zm9ybSBkYXRhIGluICVzIVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljaGlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBtODYweF9jaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNoaXAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljaGlwLT5pZCA9IHZlcmlmeV9hZGRyKGNsaWVudCk7CisJY2hpcC0+Y2xpZW50ID0gY2xpZW50OworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNoaXApOworCWNoaXAtPmRldiA9ICZjbGllbnQtPmRldjsKKwltdXRleF9pbml0KCZjaGlwLT5pb19sb2NrKTsKKwlkZXZfc2V0X2RydmRhdGEoY2hpcC0+ZGV2LCBjaGlwKTsKKworCS8qCisJICogQm90aCBjbGllbnQgYW5kIGNvbXBhbmlvbiBjbGllbnQgc2hhcmVzIHNhbWUgcGxhdGZvcm0gZHJpdmVyLgorCSAqIERyaXZlciBkaXN0aW5ndWlzaGVzIHRoZW0gYnkgcGRhdGEtPmNvbXBhbmlvbl9hZGRyLgorCSAqIHBkYXRhLT5jb21wYW5pb25fYWRkciBpcyBvbmx5IGFzc2lnbmVkIGlmIGNvbXBhbmlvbiBjaGlwIGV4aXN0cy4KKwkgKiBBdCB0aGUgc2FtZSB0aW1lLCB0aGUgY29tcGFuaW9uX2FkZHIgc2hvdWxkbid0IGVxdWFsIHRvIGNsaWVudAorCSAqIGFkZHJlc3MuCisJICovCisJaWYgKHBkYXRhLT5jb21wYW5pb25fYWRkciAmJiAocGRhdGEtPmNvbXBhbmlvbl9hZGRyICE9IGNsaWVudC0+YWRkcikpIHsKKwkJY2hpcC0+Y29tcGFuaW9uX2FkZHIgPSBwZGF0YS0+Y29tcGFuaW9uX2FkZHI7CisJCWNoaXAtPmNvbXBhbmlvbiA9IGkyY19uZXdfZHVtbXkoY2hpcC0+Y2xpZW50LT5hZGFwdGVyLAorCQkJCQkJY2hpcC0+Y29tcGFuaW9uX2FkZHIpOworCQlpMmNfc2V0X2NsaWVudGRhdGEoY2hpcC0+Y29tcGFuaW9uLCBjaGlwKTsKKwl9CisKKwlwbTg2MHhfZGV2aWNlX2luaXQoY2hpcCwgcGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBwbTg2MHhfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHBtODYweF9jaGlwICpjaGlwID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlwbTg2MHhfZGV2aWNlX2V4aXQoY2hpcCk7CisJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNoaXAtPmNvbXBhbmlvbik7CisJaTJjX3NldF9jbGllbnRkYXRhKGNoaXAtPmNvbXBhbmlvbiwgTlVMTCk7CisJaTJjX3NldF9jbGllbnRkYXRhKGNoaXAtPmNsaWVudCwgTlVMTCk7CisJa2ZyZWUoY2hpcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBwbTg2MHhfZHJpdmVyID0geworCS5kcml2ZXIJPSB7CisJCS5uYW1lCT0gIjg4UE04NjB4IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gcG04NjB4X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocG04NjB4X3JlbW92ZSksCisJLmlkX3RhYmxlCT0gcG04NjB4X2lkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcG04NjB4X2kyY19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmcG04NjB4X2RyaXZlcik7CisJaWYgKHJldCAhPSAwKQorCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciA4OFBNODYweCBJMkMgZHJpdmVyOiAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorc3Vic3lzX2luaXRjYWxsKHBtODYweF9pMmNfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBwbTg2MHhfaTJjX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmcG04NjB4X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChwbTg2MHhfaTJjX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkkyQyBEcml2ZXIgZm9yIE1hcnZlbGwgODhQTTg2MHgiKTsKK01PRFVMRV9BVVRIT1IoIkhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL0tjb25maWcgYi9kcml2ZXJzL21mZC9LY29uZmlnCmluZGV4IDQxMzU3NmEuLjk1MWZhOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL0tjb25maWcKKysrIGIvZHJpdmVycy9tZmQvS2NvbmZpZwpAQCAtOSw2ICs5LDE2IEBACiAJdHJpc3RhdGUKIAlkZWZhdWx0IG4KIAorY29uZmlnIE1GRF84OFBNODYwWAorCWJvb2wgIlN1cHBvcnQgTWFydmVsbCA4OFBNODYwNi84OFBNODYwNyIKKwlkZXBlbmRzIG9uIEkyQz15CisJc2VsZWN0IE1GRF9DT1JFCisJaGVscAorCSAgVGhpcyBzdXBwb3J0cyBmb3IgTWFydmVsbCA4OFBNODYwNi84OFBNODYwNyBQb3dlciBNYW5hZ2VtZW50IElDLgorCSAgVGhpcyBpbmNsdWRlcyB0aGUgSTJDIGRyaXZlciBhbmQgdGhlIGNvcmUgQVBJcyBfb25seV8sIHlvdSBoYXZlIHRvCisJICBzZWxlY3QgaW5kaXZpZHVhbCBjb21wb25lbnRzIGxpa2Ugdm9sdGFnZSByZWd1bGF0b3JzLCBSVEMgYW5kCisJICBiYXR0ZXJ5LWNoYXJnZXIgdW5kZXIgdGhlIGNvcnJlc3BvbmRpbmcgbWVudXMuCisKIGNvbmZpZyBNRkRfU001MDEKIAl0cmlzdGF0ZSAiU3VwcG9ydCBmb3IgU2lsaWNvbiBNb3Rpb24gU001MDEiCiAJIC0tLWhlbHAtLS0KQEAgLTM3LDcgKzQ3LDcgQEAKIAogY29uZmlnIE1GRF9TSF9NT0JJTEVfU0RISQogCWJvb2wgIlN1cHBvcnQgZm9yIFN1cGVySCBNb2JpbGUgU0RISSIKLQlkZXBlbmRzIG9uIFNVUEVSSAorCWRlcGVuZHMgb24gU1VQRVJIIHx8IEFSQ0hfU0hNT0JJTEUKIAlzZWxlY3QgTUZEX0NPUkUKIAkgLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIFNESEkgaGFyZHdhcmUgYmxvY2sgZm91bmQgaW4gbWFueQpAQCAtNjgsNiArNzgsMTUgQEAKIAkgIEhUQyBNYWdpY2lhbiBkZXZpY2VzLCByZXNwZWN0aXZlbHkuIEFjdHVhbCBmdW5jdGlvbmFsaXR5IGlzCiAJICBoYW5kbGVkIGJ5IHRoZSBsZWRzLXBhc2ljMyBhbmQgZHMxd20gZHJpdmVycy4KIAorY29uZmlnIEhUQ19JMkNQTEQKKwlib29sICJIVEMgSTJDIFBMRCBjaGlwIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBJMkM9eSAmJiBHUElPTElCCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBzdXBwb3NlZCBDUExECisJICBmb3VuZCBvbiBvbWFwODUwIEhUQyBkZXZpY2VzIGxpa2UgdGhlIEhUQyBXaXphcmQgYW5kIEhUQyBIZXJhbGQuCisJICBUaGlzIGRldmljZSBwcm92aWRlcyBpbnB1dCBhbmQgb3V0cHV0IEdQSU9zIHRocm91Z2ggYW4gSTJDCisJICBpbnRlcmZhY2UgdG8gb25lIG9yIG1vcmUgc3ViLWNoaXBzLgorCiBjb25maWcgVUNCMTQwMF9DT1JFCiAJdHJpc3RhdGUgIlBoaWxpcHMgVUNCMTQwMCBDb3JlIGRyaXZlciIKIAlkZXBlbmRzIG9uIEFDOTdfQlVTCkBAIC05NCw3ICsxMTMsNyBAQAogCiBjb25maWcgTUVORUxBVVMKIAlib29sICJUZXhhcyBJbnN0cnVtZW50cyBUV0w5MjMzMC9NZW5lbGF1cyBQTSBjaGlwIgotCWRlcGVuZHMgb24gSTJDPXkgJiYgQVJDSF9PTUFQMjRYWAorCWRlcGVuZHMgb24gSTJDPXkgJiYgQVJDSF9PTUFQMgogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgVGV4YXMgSW5zdHJ1bWVudHMKIAkgIFRXTDkyMzMwL01lbmVsYXVzIFBvd2VyIE1hbmFnZW1lbnQgY2hpcC4gVGhpcyBpbmNsdWRlIHZvbHRhZ2UKQEAgLTE4NCw2ICsyMDMsMTYgQEAKIAkgIGluZGl2aWR1YWwgY29tcG9uZW50cyBsaWtlIExDRCBiYWNrbGlnaHQsIExFRHMsIEdQSU9zIGFuZCBLZXBhZAogCSAgdW5kZXIgdGhlIGNvcnJlc3BvbmRpbmcgbWVudXMuCiAKK2NvbmZpZyBNRkRfTUFYODkyNQorCWJvb2wgIk1heGltIFNlbWljb25kdWN0b3IgTUFYODkyNSBQTUlDIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBJMkM9eQorCXNlbGVjdCBNRkRfQ09SRQorCWhlbHAKKwkgIFNheSB5ZXMgaGVyZSB0byBzdXBwb3J0IGZvciBNYXhpbSBTZW1pY29uZHVjdG9yIE1BWDg5MjUuIFRoaXMgaXMKKwkgIGEgUG93ZXIgTWFuYWdlbWVudCBJQy4gVGhpcyBkcml2ZXIgcHJvdmllcyBjb21tb24gc3VwcG9ydCBmb3IKKwkgIGFjY2Vzc2luZyB0aGUgZGV2aWNlLCBhZGRpdGlvbmFsIGRyaXZlcnMgbXVzdCBiZSBlbmFibGVkIGluIG9yZGVyCisJICB0byB1c2UgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGRldmljZS4KKwogY29uZmlnIE1GRF9XTTg0MDAKIAl0cmlzdGF0ZSAiU3VwcG9ydCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgV004NDAwIgogCXNlbGVjdCBNRkRfQ09SRQpAQCAtMjA1LDcgKzIzNCw3IEBACiAJICBmdW5jdGlvbmFsaXR5IG9mIHRoZSBkZXZpY2UuCiAKIGNvbmZpZyBNRkRfV004MzUwCi0JdHJpc3RhdGUKKwlib29sCiAKIGNvbmZpZyBNRkRfV004MzUwX0NPTkZJR19NT0RFXzAKIAlib29sCkBAIC0yNTYsOSArMjg1LDkgQEAKIAlkZXBlbmRzIG9uIE1GRF9XTTgzNTAKIAogY29uZmlnIE1GRF9XTTgzNTBfSTJDCi0JdHJpc3RhdGUgIlN1cHBvcnQgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODM1MCB3aXRoIEkyQyIKKwlib29sICJTdXBwb3J0IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBXTTgzNTAgd2l0aCBJMkMiCiAJc2VsZWN0IE1GRF9XTTgzNTAKLQlkZXBlbmRzIG9uIEkyQworCWRlcGVuZHMgb24gSTJDPXkKIAloZWxwCiAJICBUaGUgV004MzUwIGlzIGFuIGludGVncmF0ZWQgYXVkaW8gYW5kIHBvd2VyIG1hbmFnZW1lbnQKIAkgIHN1YnN5c3RlbSB3aXRoIHdhdGNoZG9nIGFuZCBSVEMgZnVuY3Rpb25hbGl0eSBmb3IgZW1iZWRkZWQKQEAgLTI2Niw2ICsyOTUsMTggQEAKIAkgIEkyQyBhcyB0aGUgY29udHJvbCBpbnRlcmZhY2UuICBBZGRpdGlvbmFsIG9wdGlvbnMgbXVzdCBiZQogCSAgc2VsZWN0ZWQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBjaGlwLgogCitjb25maWcgTUZEX1dNODk5NAorCXRyaXN0YXRlICJTdXBwb3J0IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBXTTg5OTQiCisJc2VsZWN0IE1GRF9DT1JFCisJZGVwZW5kcyBvbiBJMkMKKwloZWxwCisJICBUaGUgV004OTk0IGlzIGEgaGlnaGx5IGludGVncmF0ZWQgaGktZmkgQ09ERUMgZGVzaWduZWQgZm9yCisJICBzbWFydHBob25lIGFwcGxpY2F0aW9zbi4gIEFzIHdlbGwgYXMgYXVkaW8gZnVuY3Rpb25hbGl0eSBpdAorCSAgaGFzIG9uIGJvYXJkIEdQSU8gYW5kIHJlZ3VsYXRvciBmdW5jdGlvbmFsaXR5IHdoaWNoIGlzCisJICBzdXBwb3J0ZWQgdmlhIHRoZSByZWxldmFudCBzdWJzeXN0ZW1zLiAgVGhpcyBkcml2ZXIgcHJvdmlkZXMKKwkgIGNvcmUgc3VwcG9ydCBmb3IgdGhlIFdNODk5NCwgaW4gb3JkZXIgdG8gdXNlIHRoZSBhY3R1YWwKKwkgIGZ1bmN0aW9uYWx0aXkgb2YgdGhlIGRldmljZSBvdGhlciBkcml2ZXJzIG11c3QgYmUgZW5hYmxlZC4KKwogY29uZmlnIE1GRF9QQ0Y1MDYzMwogCXRyaXN0YXRlICJTdXBwb3J0IGZvciBOWFAgUENGNTA2MzMiCiAJZGVwZW5kcyBvbiBJMkMKQEAgLTMwMCw4ICszNDEsOCBAQAogCSB0aGUgUENGNTA2MzMgY2hpcC4KIAogY29uZmlnIEFCMzEwMF9DT1JFCi0JdHJpc3RhdGUgIlNULUVyaWNzc29uIEFCMzEwMCBNaXhlZCBTaWduYWwgQ2lyY3VpdCBjb3JlIGZ1bmN0aW9ucyIKLQlkZXBlbmRzIG9uIEkyQworCWJvb2wgIlNULUVyaWNzc29uIEFCMzEwMCBNaXhlZCBTaWduYWwgQ2lyY3VpdCBjb3JlIGZ1bmN0aW9ucyIKKwlkZXBlbmRzIG9uIEkyQz15CiAJZGVmYXVsdCB5IGlmIEFSQ0hfVTMwMAogCWhlbHAKIAkgIFNlbGVjdCB0aGlzIHRvIGVuYWJsZSB0aGUgQUIzMTAwIE1peGVkIFNpZ25hbCBJQyBjb3JlCkBAIC0zMjksMTYgKzM3MCw2IEBACiAJICBUaGlzIGVuYWJsZXMgdGhlIFBDQVAgQVNJQyBwcmVzZW50IG9uIEVaWCBQaG9uZXMuIFRoaXMgaXMKIAkgIG5lZWRlZCBmb3IgTU1DLCBUb3VjaFNjcmVlbiwgU291bmQsIFVTQiwgZXRjLi4KIAotY29uZmlnIE1GRF84OFBNODYwNwotCWJvb2wgIlN1cHBvcnQgTWFydmVsbCA4OFBNODYwNyIKLQlkZXBlbmRzIG9uIEkyQz15Ci0Jc2VsZWN0IE1GRF9DT1JFCi0JaGVscAotCSAgVGhpcyBzdXBwb3J0cyBmb3IgTWFydmVsbCA4OFBNODYwNyBQb3dlciBNYW5hZ2VtZW50IElDLiBUaGlzIGluY2x1ZGVzCi0JICB0aGUgSTJDIGRyaXZlciBhbmQgdGhlIGNvcmUgQVBJcyBfb25seV8sIHlvdSBoYXZlIHRvIHNlbGVjdAotCSAgaW5kaXZpZHVhbCBjb21wb25lbnRzIGxpa2Ugdm9sdGFnZSByZWd1bGF0b3JzLCBSVEMgYW5kCi0JICBiYXR0ZXJ5LWNoYXJnZXIgdW5kZXIgdGhlIGNvcnJlc3BvbmRpbmcgbWVudXMuCi0KIGNvbmZpZyBBQjQ1MDBfQ09SRQogCXRyaXN0YXRlICJTVC1Fcmljc3NvbidzIEFCNDUwMCBNaXhlZCBTaWduYWwgUG93ZXIgbWFuYWdlbWVudCBjaGlwIgogCWRlcGVuZHMgb24gU1BJCkBAIC0zNTgsNiArMzg5LDE1IEBACiAKIAlUaGUgdGltYmVyZGFsZSBGUEdBIGNhbiBiZSBmb3VuZCBvbiB0aGUgSW50ZWwgQXRvbSBkZXZlbG9wbWVudCBib2FyZAogCWZvciBpbi12ZWhpY2xlIGluZm9udGFpbm1lbnQsIGNhbGxlZCBSdXNzZWxsdmlsbGUuCisKK2NvbmZpZyBMUENfU0NICisJdHJpc3RhdGUgIkludGVsIFNDSCBMUEMiCisJZGVwZW5kcyBvbiBQQ0kKKwlzZWxlY3QgTUZEX0NPUkUKKwloZWxwCisJICBMUEMgYnJpZGdlIGZ1bmN0aW9uIG9mIHRoZSBJbnRlbCBTQ0ggcHJvdmlkZXMgc3VwcG9ydCBmb3IKKwkgIFN5c3RlbSBNYW5hZ2VtZW50IEJ1cyBhbmQgR2VuZXJhbCBQdXJwb3NlIEkvTy4KKwogZW5kbWVudQogCiBtZW51ICJNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9NYWtlZmlsZSBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCmluZGV4IDc4Mjk1ZDYuLjIyNzE1YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWZkL01ha2VmaWxlCkBAIC0yLDEyICsyLDE1IEBACiAjIE1ha2VmaWxlIGZvciBtdWx0aWZ1bmN0aW9uIG1pc2NlbGxhbmVvdXMgZGV2aWNlcwogIwogCis4OHBtODYweC1vYmpzCQkJOj0gODhwbTg2MHgtY29yZS5vIDg4cG04NjB4LWkyYy5vCitvYmotJChDT05GSUdfTUZEXzg4UE04NjBYKQkrPSA4OHBtODYweC5vCiBvYmotJChDT05GSUdfTUZEX1NNNTAxKQkJKz0gc201MDEubwogb2JqLSQoQ09ORklHX01GRF9BU0lDMykJCSs9IGFzaWMzLm8gdG1pb19jb3JlLm8KIG9iai0kKENPTkZJR19NRkRfU0hfTU9CSUxFX1NESEkpCQkrPSBzaF9tb2JpbGVfc2RoaS5vCiAKIG9iai0kKENPTkZJR19IVENfRUdQSU8pCQkrPSBodGMtZWdwaW8ubwogb2JqLSQoQ09ORklHX0hUQ19QQVNJQzMpCSs9IGh0Yy1wYXNpYzMubworb2JqLSQoQ09ORklHX0hUQ19JMkNQTEQpCSs9IGh0Yy1pMmNwbGQubwogCiBvYmotJChDT05GSUdfTUZEX0RNMzU1RVZNX01TUCkJKz0gZG0zNTVldm1fbXNwLm8KIApAQCAtMjIsNiArMjUsNyBAQAogd204MzUwLW9ianMJCQkrPSB3bTgzNTAtaXJxLm8KIG9iai0kKENPTkZJR19NRkRfV004MzUwKQkrPSB3bTgzNTAubwogb2JqLSQoQ09ORklHX01GRF9XTTgzNTBfSTJDKQkrPSB3bTgzNTAtaTJjLm8KK29iai0kKENPTkZJR19NRkRfV004OTk0KQkrPSB3bTg5OTQtY29yZS5vCiAKIG9iai0kKENPTkZJR19UUFM2NTAxMCkJCSs9IHRwczY1MDEwLm8KIG9iai0kKENPTkZJR19NRU5FTEFVUykJCSs9IG1lbmVsYXVzLm8KQEAgLTQ3LDYgKzUxLDggQEAKIG9iai0kKENPTkZJR19VQ0IxNDAwX0NPUkUpCSs9IHVjYjE0MDBfY29yZS5vCiAKIG9iai0kKENPTkZJR19QTUlDX0RBOTAzWCkJKz0gZGE5MDN4Lm8KK21heDg5MjUtb2JqcwkJCTo9IG1heDg5MjUtY29yZS5vIG1heDg5MjUtaTJjLm8KK29iai0kKENPTkZJR19NRkRfTUFYODkyNSkJKz0gbWF4ODkyNS5vCiAKIG9iai0kKENPTkZJR19NRkRfUENGNTA2MzMpCSs9IHBjZjUwNjMzLWNvcmUubwogb2JqLSQoQ09ORklHX1BDRjUwNjMzX0FEQykJKz0gcGNmNTA2MzMtYWRjLm8KQEAgLTU1LDUgKzYxLDUgQEAKIG9iai0kKENPTkZJR19BQjMxMDBfT1RQKQkrPSBhYjMxMDAtb3RwLm8KIG9iai0kKENPTkZJR19BQjQ1MDBfQ09SRSkJKz0gYWI0NTAwLWNvcmUubwogb2JqLSQoQ09ORklHX01GRF9USU1CRVJEQUxFKSAgICArPSB0aW1iZXJkYWxlLm8KLW9iai0kKENPTkZJR19NRkRfODhQTTg2MDcpCSs9IDg4cG04NjA3Lm8KIG9iai0kKENPTkZJR19QTUlDX0FEUDU1MjApCSs9IGFkcDU1MjAubworb2JqLSQoQ09ORklHX0xQQ19TQ0gpCQkrPSBscGNfc2NoLm8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9hYjMxMDAtY29yZS5jIGIvZHJpdmVycy9tZmQvYWIzMTAwLWNvcmUuYwppbmRleCBmZDQyYTgwLi5hMmNlM2I2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9hYjMxMDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL2FiMzEwMC1jb3JlLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgU1QtRXJpY3Nzb24KKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDEwIFNULUVyaWNzc29uCiAgKiBMaWNlbnNlIHRlcm1zOiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB2ZXJzaW9uIDIKICAqIExvdy1sZXZlbCBjb3JlIGZvciBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBBQjMxMDAgSUMgb24gdGhlIEkyQyBidXMKICAqIGFuZCBzb21lIGJhc2ljIGNoaXAtY29uZmlndXJhdGlvbi4KQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CkBAIC0zNjUsMTggKzM2NiwyMyBAQAogfQogRVhQT1JUX1NZTUJPTChhYjMxMDBfZXZlbnRfcmVnaXN0ZXJzX3N0YXJ0dXBfc3RhdGVfZ2V0KTsKIAotLyogSW50ZXJydXB0IGhhbmRsaW5nIHdvcmtlciAqLwotc3RhdGljIHZvaWQgYWIzMTAwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQorLyoKKyAqIFRoaXMgaXMgYSB0aHJlYWRlZCBpbnRlcnJ1cHQgaGFuZGxlciBzbyB3ZSBjYW4gbWFrZSBzb21lCisgKiBJMkMgY2FsbHMgZXRjLgorICovCitzdGF0aWMgaXJxcmV0dXJuX3QgYWIzMTAwX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRhdGEpCiB7Ci0Jc3RydWN0IGFiMzEwMCAqYWIzMTAwID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhYjMxMDAsIHdvcmspOworCXN0cnVjdCBhYjMxMDAgKmFiMzEwMCA9IGRhdGE7CiAJdTggZXZlbnRfcmVnc1szXTsKIAl1MzIgZmF0ZXZlbnQ7CiAJaW50IGVycjsKIAorCWFkZF9pbnRlcnJ1cHRfcmFuZG9tbmVzcyhpcnEpOworCiAJZXJyID0gYWIzMTAwX2dldF9yZWdpc3Rlcl9wYWdlX2ludGVycnVwdGlibGUoYWIzMTAwLCBBQjMxMDBfRVZFTlRBMSwKIAkJCQkgICAgICAgZXZlbnRfcmVncywgMyk7CiAJaWYgKGVycikKLQkJZ290byBlcnJfZXZlbnRfd3E7CisJCWdvdG8gZXJyX2V2ZW50OwogCiAJZmF0ZXZlbnQgPSAoZXZlbnRfcmVnc1swXSA8PCAxNikgfAogCQkoZXZlbnRfcmVnc1sxXSA8PCA4KSB8CkBAIC0zOTgsMjkgKzQwNCwxMSBAQAogCWRldl9kYmcoYWIzMTAwLT5kZXYsCiAJCSJJUlEgRXZlbnQ6IDB4JTA4eFxuIiwgZmF0ZXZlbnQpOwogCi0JLyogQnkgbm93IHRoZSBJUlEgc2hvdWxkIGJlIGFja2VkIGFuZCBkZWFzc2VydGVkIHNvIGVuYWJsZSBpdCBhZ2FpbiAqLwotCWVuYWJsZV9pcnEoYWIzMTAwLT5pMmNfY2xpZW50LT5pcnEpOwotCXJldHVybjsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAKLSBlcnJfZXZlbnRfd3E6CisgZXJyX2V2ZW50OgogCWRldl9kYmcoYWIzMTAwLT5kZXYsCi0JCSJlcnJvciBpbiBldmVudCB3b3JrcXVldWVcbiIpOwotCS8qIEVuYWJsZSB0aGUgSVJRIGFueXdheSwgd2hhdCBjaG9pY2UgZG8gd2UgaGF2ZT8gKi8KLQllbmFibGVfaXJxKGFiMzEwMC0+aTJjX2NsaWVudC0+aXJxKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBhYjMxMDBfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgYWIzMTAwICphYjMxMDAgPSBkYXRhOwotCS8qCi0JICogRGlzYWJsZSB0aGUgSVJRIGFuZCBkaXNwYXRjaCBhIHdvcmtlciB0byBoYW5kbGUgdGhlCi0JICogZXZlbnQuIFNpbmNlIHRoZSBjaGlwIHJlc2lkZXMgb24gSTJDIHRoaXMgaXMgc2xvdwotCSAqIHN0dWZmIGFuZCB3ZSB3aWxsIHJlLWVuYWJsZSB0aGUgaW50ZXJydXB0cyBvbmNlIHRoCi0JICogd29ya2VyIGhhcyBmaW5pc2hlZC4KLQkgKi8KLQlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKLQlzY2hlZHVsZV93b3JrKCZhYjMxMDAtPndvcmspOworCQkiZXJyb3IgcmVhZGluZyBldmVudCBzdGF0dXNcbiIpOwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtNzM1LDEwICs3MjMsNyBAQAogCS5pZAkJPSAtMSwJCQkJCVwKIH0KIAotLyoKLSAqIFRoaXMgbGlzdHMgYWxsIHRoZSBzdWJkZXZpY2VzIGFuZCBjb3JyZXNwb25kaW5nIHJlZ2lzdGVyCi0gKiByYW5nZXMuCi0gKi8KKy8qIFRoaXMgbGlzdHMgYWxsIHRoZSBzdWJkZXZpY2VzICovCiBBQjMxMDBfREVWSUNFKGRhYywgImFiMzEwMC1kYWMiKTsKIEFCMzEwMF9ERVZJQ0UobGVkcywgImFiMzEwMC1sZWRzIik7CiBBQjMxMDBfREVWSUNFKHBvd2VyLCAiYWIzMTAwLXBvd2VyIik7CkBAIC05MDQsMTIgKzg4OSwxMSBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXhpdF9ub19zZXR1cDsKIAotCUlOSVRfV09SSygmYWIzMTAwLT53b3JrLCBhYjMxMDBfd29yayk7Ci0KKwllcnIgPSByZXF1ZXN0X3RocmVhZGVkX2lycShjbGllbnQtPmlycSwgTlVMTCwgYWIzMTAwX2lycV9oYW5kbGVyLAorCQkJCUlSUUZfT05FU0hPVCwgImFiMzEwMC1jb3JlIiwgYWIzMTAwKTsKIAkvKiBUaGlzIHJlYWwgdW5wcmVkaWN0YWJsZSBJUlEgaXMgb2YgY291cnNlIHNhbXBsZWQgZm9yIGVudHJvcHkgKi8KLQllcnIgPSByZXF1ZXN0X2lycShjbGllbnQtPmlycSwgYWIzMTAwX2lycV9oYW5kbGVyLAotCQkJICBJUlFGX0RJU0FCTEVEIHwgSVJRRl9TQU1QTEVfUkFORE9NLAotCQkJICAiQUIzMTAwIElSUSIsIGFiMzEwMCk7CisJcmFuZF9pbml0aWFsaXplX2lycShjbGllbnQtPmlycSk7CisKIAlpZiAoZXJyKQogCQlnb3RvIGV4aXRfbm9faXJxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9hYjMxMDAtb3RwLmMgYi9kcml2ZXJzL21mZC9hYjMxMDAtb3RwLmMKaW5kZXggMDQ5OWIyMC4uYjYwMzQ2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvYWIzMTAwLW90cC5jCisrKyBiL2RyaXZlcnMvbWZkL2FiMzEwMC1vdHAuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9hYjMxMDAuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIAogLyogVGhlIE9UUCByZWdpc3RlcnMgKi8KICNkZWZpbmUgQUIzMTAwX09UUDAJCTB4YjAKQEAgLTk1LDExICs5NiwxMCBAQAogICogVGhpcyBpcyBhIHNpbXBsZSBkZWJ1Z2ZzIGh1bWFuLXJlYWRhYmxlIGZpbGUgdGhhdCBkdW1wcyBvdXQKICAqIHRoZSBjb250ZW50cyBvZiB0aGUgT1RQLgogICovCi0jaWZkZWYgQ09ORklHX0RFQlVHRlMKLXN0YXRpYyBpbnQgc2hvd19vdHAoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQorI2lmZGVmIENPTkZJR19ERUJVR19GUworc3RhdGljIGludCBhYjMxMDBfc2hvd19vdHAoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQogewogCXN0cnVjdCBhYjMxMDBfb3RwICpvdHAgPSBzLT5wcml2YXRlOwotCWludCBlcnI7CiAKIAlzZXFfcHJpbnRmKHMsICJPVFAgaXMgJXNcbiIsIG90cC0+bG9ja2VkID8gIkxPQ0tFRCIgOiAiVU5MT0NLRUQiKTsKIAlzZXFfcHJpbnRmKHMsICJPVFAgY2xvY2sgc3dpdGNoIHN0YXJ0dXAgaXMgJXVIelxuIiwgb3RwLT5mcmVxKTsKQEAgLTExMyw3ICsxMTMsNyBAQAogCiBzdGF0aWMgaW50IGFiMzEwMF9vdHBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgYWIzMTAwX290cF9zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgYWIzMTAwX3Nob3dfb3RwLCBpbm9kZS0+aV9wcml2YXRlKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWIzMTAwX290cF9vcGVyYXRpb25zID0gewpAQCAtMTMxLDEzICsxMzEsMTQgQEAKIAkJCQkJICAgJmFiMzEwMF9vdHBfb3BlcmF0aW9ucyk7CiAJaWYgKCFvdHAtPmRlYnVnZnMpIHsKIAkJZGV2X2VycihkZXYsICJBQjMxMDAgZGVidWdmcyBPVFAgZmlsZSByZWdpc3RyYXRpb24gZmFpbGVkIVxuIik7Ci0JCXJldHVybiBlcnI7CisJCXJldHVybiAtRU5PRU5UOwogCX0KKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGFiMzEwMF9vdHBfZXhpdF9kZWJ1Z2ZzKHN0cnVjdCBhYjMxMDBfb3RwICpvdHApCiB7Ci0JZGVidWdmc19yZW1vdmVfZmlsZShvdHAtPmRlYnVnZnMpOworCWRlYnVnZnNfcmVtb3ZlKG90cC0+ZGVidWdmcyk7CiB9CiAjZWxzZQogLyogQ29tcGlsZSB0aGlzIG91dCBpZiBkZWJ1Z2ZzIG5vdCBzZWxlY3RlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvaHRjLWVncGlvLmMgYi9kcml2ZXJzL21mZC9odGMtZWdwaW8uYwppbmRleCBhYTI2NmUxLi5hZGRiODQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC9odGMtZWdwaW8uYworKysgYi9kcml2ZXJzL21mZC9odGMtZWdwaW8uYwpAQCAtMTA4LDcgKzEwOCw3IEBACiAJYWNrX2lycXMoZWkpOwogCS8qIFByb2Nlc3MgYWxsIHNldCBwaW5zLiAqLwogCXJlYWR2YWwgJj0gZWktPmlycXNfZW5hYmxlZDsKLQlmb3JfZWFjaF9iaXQoaXJxcGluLCAmcmVhZHZhbCwgZWktPm5pcnFzKSB7CisJZm9yX2VhY2hfc2V0X2JpdChpcnFwaW4sICZyZWFkdmFsLCBlaS0+bmlycXMpIHsKIAkJLyogUnVuIGlycSBoYW5kbGVyICovCiAJCXByX2RlYnVnKCJnb3QgSVJRICVkXG4iLCBpcnFwaW4pOwogCQlpcnEgPSBlaS0+aXJxX3N0YXJ0ICsgaXJxcGluOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvaHRjLWkyY3BsZC5jIGIvZHJpdmVycy9tZmQvaHRjLWkyY3BsZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3YjlmZGEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC9odGMtaTJjcGxkLmMKQEAgLTAsMCArMSw3MTAgQEAKKy8qCisgKiAgaHRjLWkyY3BsZC5jCisgKiAgQ2hpcCBkcml2ZXIgZm9yIGFuIHVua25vd24gQ1BMRCBjaGlwIGZvdW5kIG9uIG9tYXA4NTAgSFRDIGRldmljZXMgbGlrZQorICogIHRoZSBIVEMgV2l6YXJkIGFuZCBIVEMgSGVyYWxkLgorICogIFRoZSBjcGxkIGlzIGxvY2F0ZWQgb24gdGhlIGkyYyBidXMgYW5kIGFjdHMgYXMgYW4gaW5wdXQvb3V0cHV0IEdQSU8KKyAqICBleHRlbmRlci4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA5IENvcnkgTWFjY2Fycm9uZSA8ZGFya3N0YXI2MjYyQGdtYWlsLmNvbT4KKyAqCisgKiAgQmFzZWQgb24gd29yayBkb25lIGluIHRoZSBsaW53aXphcmQgcHJvamVjdAorICogIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IEFuZ2VsbyBBcnJpZmFubyA8bWlrbml4QGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvaHRjcGxkLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorCitzdHJ1Y3QgaHRjcGxkX2NoaXAgeworCXNwaW5sb2NrX3QgICAgICAgICAgICAgIGxvY2s7CisKKwkvKiBjaGlwIGluZm8gKi8KKwl1OCAgICAgICAgICAgICAgICAgICAgICByZXNldDsKKwl1OCAgICAgICAgICAgICAgICAgICAgICBhZGRyOworCXN0cnVjdCBkZXZpY2UgICAgICAgICAgICpkZXY7CisJc3RydWN0IGkyY19jbGllbnQJKmNsaWVudDsKKworCS8qIE91dHB1dCBkZXRhaWxzICovCisJdTggICAgICAgICAgICAgICAgICAgICAgY2FjaGVfb3V0OworCXN0cnVjdCBncGlvX2NoaXAgICAgICAgIGNoaXBfb3V0OworCisJLyogSW5wdXQgZGV0YWlscyAqLworCXU4ICAgICAgICAgICAgICAgICAgICAgIGNhY2hlX2luOworCXN0cnVjdCBncGlvX2NoaXAgICAgICAgIGNoaXBfaW47CisKKwl1MTYgICAgICAgICAgICAgICAgICAgICBpcnFzX2VuYWJsZWQ7CisJdWludCAgICAgICAgICAgICAgICAgICAgaXJxX3N0YXJ0OworCWludCAgICAgICAgICAgICAgICAgICAgIG5pcnFzOworCisJLyoKKwkgKiBXb3JrIHN0cnVjdHVyZSB0byBhbGxvdyBmb3Igc2V0dGluZyB2YWx1ZXMgb3V0c2lkZSBvZiBhbnkKKwkgKiBwb3NzaWJsZSBpbnRlcnJ1cHQgY29udGV4dAorCSAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCBzZXRfdmFsX3dvcms7Cit9OworCitzdHJ1Y3QgaHRjcGxkX2RhdGEgeworCS8qIGlycSBpbmZvICovCisJdTE2ICAgICAgICAgICAgICAgIGlycXNfZW5hYmxlZDsKKwl1aW50ICAgICAgICAgICAgICAgaXJxX3N0YXJ0OworCWludCAgICAgICAgICAgICAgICBuaXJxczsKKwl1aW50ICAgICAgICAgICAgICAgY2hhaW5lZF9pcnE7CisJdW5zaWduZWQgaW50ICAgICAgIGludF9yZXNldF9ncGlvX2hpOworCXVuc2lnbmVkIGludCAgICAgICBpbnRfcmVzZXRfZ3Bpb19sbzsKKworCS8qIGh0Y3BsZCBpbmZvICovCisJc3RydWN0IGh0Y3BsZF9jaGlwICpjaGlwOworCXVuc2lnbmVkIGludCAgICAgICBuY2hpcHM7Cit9OworCisvKiBUaGVyZSBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJvYWN0aXZlbHkgbWFzayBpbnRlcnJ1cHRzCisgKiBvbiB0aGUgaHRjcGxkIGNoaXAgaXRzZWxmLiAgU28sIHdlIHNpbXBseSBpZ25vcmUgaW50ZXJydXB0cyB0aGF0CisgKiBhcmVuJ3QgZGVzaXJlZC4gKi8KK3N0YXRpYyB2b2lkIGh0Y3BsZF9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IGh0Y3BsZF9jaGlwICpjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwljaGlwLT5pcnFzX2VuYWJsZWQgJj0gfigxIDw8IChpcnEgLSBjaGlwLT5pcnFfc3RhcnQpKTsKKwlwcl9kZWJ1ZygiSFRDUExEIG1hc2sgJWQgJTA0eFxuIiwgaXJxLCBjaGlwLT5pcnFzX2VuYWJsZWQpOworfQorc3RhdGljIHZvaWQgaHRjcGxkX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBodGNwbGRfY2hpcCAqY2hpcCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJY2hpcC0+aXJxc19lbmFibGVkIHw9IDEgPDwgKGlycSAtIGNoaXAtPmlycV9zdGFydCk7CisJcHJfZGVidWcoIkhUQ1BMRCB1bm1hc2sgJWQgJTA0eFxuIiwgaXJxLCBjaGlwLT5pcnFzX2VuYWJsZWQpOworfQorCitzdGF0aWMgaW50IGh0Y3BsZF9zZXRfdHlwZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisJc3RydWN0IGlycV9kZXNjICpkID0gaXJxX3RvX2Rlc2MoaXJxKTsKKworCWlmICghZCkgeworCQlwcl9lcnIoIkhUQ1BMRCBpbnZhbGlkIElSUTogJWRcbiIsIGlycSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChmbGFncyAmIH5JUlFfVFlQRV9TRU5TRV9NQVNLKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIFdlIG9ubHkgYWxsb3cgZWRnZSB0cmlnZ2VyaW5nICovCisJaWYgKGZsYWdzICYgKElSUV9UWVBFX0xFVkVMX0xPV3xJUlFfVFlQRV9MRVZFTF9ISUdIKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkLT5zdGF0dXMgJj0gfklSUV9UWVBFX1NFTlNFX01BU0s7CisJZC0+c3RhdHVzIHw9IGZsYWdzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaHRjcGxkX211eGVkX2NoaXAgPSB7CisJLm5hbWUgICAgID0gImh0Y3BsZCIsCisJLm1hc2sgICAgID0gaHRjcGxkX21hc2ssCisJLnVubWFzayAgID0gaHRjcGxkX3VubWFzaywKKwkuc2V0X3R5cGUgPSBodGNwbGRfc2V0X3R5cGUsCit9OworCisvKiBUbyBwcm9wZXJseSBkaXNwYXRjaCBJUlEgZXZlbnRzLCB3ZSBuZWVkIHRvIHJlYWQgZnJvbSB0aGUKKyAqIGNoaXAuICBUaGlzIGlzIGFuIEkyQyBhY3Rpb24gdGhhdCBjb3VsZCBwb3NzaWJseSBzbGVlcAorICogKHdoaWNoIGlzIGJhZCBpbiBpbnRlcnJ1cHQgY29udGV4dCkgLS0gc28gd2UgdXNlIGEgdGhyZWFkZWQKKyAqIGludGVycnVwdCBoYW5kbGVyIHRvIGdldCBhcm91bmQgdGhhdC4KKyAqLworc3RhdGljIGlycXJldHVybl90IGh0Y3BsZF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldikKK3sKKwlzdHJ1Y3QgaHRjcGxkX2RhdGEgKmh0Y3BsZCA9IGRldjsKKwl1bnNpZ25lZCBpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpcnFwaW47CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCisJaWYgKCFodGNwbGQpIHsKKwkJcHJfZGVidWcoImh0Y3BsZCBpcyBudWxsIGluIElTUlxuIik7CisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisKKwkvKgorCSAqIEZvciBlYWNoIGNoaXAsIGRvIGEgcmVhZCBvZiB0aGUgY2hpcCBhbmQgdHJpZ2dlciBhbnkgaW50ZXJydXB0cworCSAqIGRlc2lyZWQuICBUaGUgaW50ZXJydXB0cyB3aWxsIGJlIHRyaWdnZXJlZCBmcm9tIExTQiB0byBNU0IgKGkuZS4KKwkgKiBiaXQgMCBmaXJzdCwgdGhlbiBiaXQgMSwgZXRjLikKKwkgKgorCSAqIEZvciBjaGlwcyB0aGF0IGhhdmUgbm8gaW50ZXJydXB0IHJhbmdlIHNwZWNpZmllZCwganVzdCBza2lwICdlbS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaHRjcGxkLT5uY2hpcHM7IGkrKykgeworCQlzdHJ1Y3QgaHRjcGxkX2NoaXAgKmNoaXAgPSAmaHRjcGxkLT5jaGlwW2ldOworCQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCQlpbnQgdmFsOworCQl1bnNpZ25lZCBsb25nIHV2YWwsIG9sZF92YWw7CisKKwkJaWYgKCFjaGlwKSB7CisJCQlwcl9kZWJ1ZygiY2hpcCAlZCBpcyBudWxsIGluIElTUlxuIiwgaSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChjaGlwLT5uaXJxcyA9PSAwKQorCQkJY29udGludWU7CisKKwkJY2xpZW50ID0gY2hpcC0+Y2xpZW50OworCQlpZiAoIWNsaWVudCkgeworCQkJcHJfZGVidWcoImNsaWVudCAlZCBpcyBudWxsIGluIElTUlxuIiwgaSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFNjYW4gdGhlIGNoaXAgKi8KKwkJdmFsID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgY2hpcC0+Y2FjaGVfb3V0KTsKKwkJaWYgKHZhbCA8IDApIHsKKwkJCS8qIFRocm93IGEgd2FybmluZyBhbmQgc2tpcCB0aGlzIGNoaXAgKi8KKwkJCWRldl93YXJuKGNoaXAtPmRldiwgIlVuYWJsZSB0byByZWFkIGZyb20gY2hpcDogJWRcbiIsCisJCQkJIHZhbCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXV2YWwgPSAodW5zaWduZWQgbG9uZyl2YWw7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXAtPmxvY2ssIGZsYWdzKTsKKworCQkvKiBTYXZlIGF3YXkgdGhlIG9sZCB2YWx1ZSBzbyB3ZSBjYW4gY29tcGFyZSBpdCAqLworCQlvbGRfdmFsID0gY2hpcC0+Y2FjaGVfaW47CisKKwkJLyogV3JpdGUgdGhlIG5ldyB2YWx1ZSAqLworCQljaGlwLT5jYWNoZV9pbiA9IHV2YWw7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOworCisJCS8qCisJCSAqIEZvciBlYWNoIGJpdCBpbiB0aGUgZGF0YSAoc3RhcnRpbmcgYXQgYml0IDApLCB0cmlnZ2VyCisJCSAqIGFzc29jaWF0ZWQgaW50ZXJydXB0cy4KKwkJICovCisJCWZvciAoaXJxcGluID0gMDsgaXJxcGluIDwgY2hpcC0+bmlycXM7IGlycXBpbisrKSB7CisJCQl1bnNpZ25lZCBvbGRiLCBuZXdiOworCQkJaW50IGZsYWdzOworCisJCQlpcnEgPSBjaGlwLT5pcnFfc3RhcnQgKyBpcnFwaW47CisJCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwkJCWZsYWdzID0gZGVzYy0+c3RhdHVzOworCisJCQkvKiBSdW4gdGhlIElSUSBoYW5kbGVyLCBidXQgb25seSBpZiB0aGUgYml0IHZhbHVlCisJCQkgKiBjaGFuZ2VkLCBhbmQgdGhlIHByb3BlciBmbGFncyBhcmUgc2V0ICovCisJCQlvbGRiID0gKG9sZF92YWwgPj4gaXJxcGluKSAmIDE7CisJCQluZXdiID0gKHV2YWwgPj4gaXJxcGluKSAmIDE7CisKKwkJCWlmICgoIW9sZGIgJiYgbmV3YiAmJiAoZmxhZ3MgJiBJUlFfVFlQRV9FREdFX1JJU0lORykpIHx8CisJCQkgICAgKG9sZGIgJiYgIW5ld2IgJiYKKwkJCSAgICAgKGZsYWdzICYgSVJRX1RZUEVfRURHRV9GQUxMSU5HKSkpIHsKKwkJCQlwcl9kZWJ1ZygiZmlyZSBJUlEgJWRcbiIsIGlycXBpbik7CisJCQkJZGVzYy0+aGFuZGxlX2lycShpcnEsIGRlc2MpOworCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBJbiBvcmRlciB0byBjb250aW51ZSByZWNlaXZpbmcgaW50ZXJydXB0cywgdGhlIGludF9yZXNldF9ncGlvIG11c3QKKwkgKiBiZSBhc3NlcnRlZC4KKwkgKi8KKwlpZiAoaHRjcGxkLT5pbnRfcmVzZXRfZ3Bpb19oaSkKKwkJZ3Bpb19zZXRfdmFsdWUoaHRjcGxkLT5pbnRfcmVzZXRfZ3Bpb19oaSwgMSk7CisJaWYgKGh0Y3BsZC0+aW50X3Jlc2V0X2dwaW9fbG8pCisJCWdwaW9fc2V0X3ZhbHVlKGh0Y3BsZC0+aW50X3Jlc2V0X2dwaW9fbG8sIDApOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorICogVGhlIEdQSU8gc2V0IHJvdXRpbmVzIGNhbiBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCwgZXNwZWNpYWxseSBpZiwKKyAqIGZvciBleGFtcGxlIHRoZXkncmUgYXR0YWNoZWQgdG8gdGhlIGxlZC1ncGlvIGZyYW1ld29yayBhbmQgYSB0cmlnZ2VyIGlzCisgKiBlbmFibGVkLiAgQXMgc3VjaCwgd2UgZGVjbGFyZWQgd29yayBhYm92ZSBpbiB0aGUgaHRjcGxkX2NoaXAgc3RydWN0dXJlLAorICogYW5kIHRoYXQgd29yayBpcyBzY2hlZHVsZWQgaW4gdGhlIHNldCByb3V0aW5lLiAgVGhlIGtlcm5lbCBjYW4gdGhlbiBydW4KKyAqIHRoZSBJMkMgZnVuY3Rpb25zLCB3aGljaCB3aWxsIHNsZWVwLCBpbiBwcm9jZXNzIGNvbnRleHQuCisgKi8KK3ZvaWQgaHRjcGxkX2NoaXBfc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCwgaW50IHZhbCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBodGNwbGRfY2hpcCAqY2hpcF9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwljaGlwX2RhdGEgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGh0Y3BsZF9jaGlwLCBjaGlwX291dCk7CisJaWYgKCFjaGlwX2RhdGEpCisJCXJldHVybjsKKworCWNsaWVudCA9IGNoaXBfZGF0YS0+Y2xpZW50OworCWlmIChjbGllbnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmNoaXBfZGF0YS0+bG9jaywgZmxhZ3MpOworCWlmICh2YWwpCisJCWNoaXBfZGF0YS0+Y2FjaGVfb3V0IHw9ICgxIDw8IG9mZnNldCk7CisJZWxzZQorCQljaGlwX2RhdGEtPmNhY2hlX291dCAmPSB+KDEgPDwgb2Zmc2V0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjaGlwX2RhdGEtPmxvY2ssIGZsYWdzKTsKKworCXNjaGVkdWxlX3dvcmsoJihjaGlwX2RhdGEtPnNldF92YWxfd29yaykpOworfQorCit2b2lkIGh0Y3BsZF9jaGlwX3NldF9uaShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGh0Y3BsZF9jaGlwICpjaGlwX2RhdGE7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKworCWNoaXBfZGF0YSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaHRjcGxkX2NoaXAsIHNldF92YWxfd29yayk7CisJY2xpZW50ID0gY2hpcF9kYXRhLT5jbGllbnQ7CisJaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgY2hpcF9kYXRhLT5jYWNoZV9vdXQpOworfQorCitpbnQgaHRjcGxkX2NoaXBfZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgaHRjcGxkX2NoaXAgKmNoaXBfZGF0YTsKKwlpbnQgdmFsID0gMDsKKwlpbnQgaXNfaW5wdXQgPSAwOworCisJLyogVHJ5IG91dCBmaXJzdCAqLworCWNoaXBfZGF0YSA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgaHRjcGxkX2NoaXAsIGNoaXBfb3V0KTsKKwlpZiAoIWNoaXBfZGF0YSkgeworCQkvKiBUcnkgaW4gKi8KKwkJaXNfaW5wdXQgPSAxOworCQljaGlwX2RhdGEgPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGh0Y3BsZF9jaGlwLCBjaGlwX2luKTsKKwkJaWYgKCFjaGlwX2RhdGEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBEZXRlcm1pbmUgaWYgdGhpcyBpcyBhbiBpbnB1dCBvciBvdXRwdXQgR1BJTyAqLworCWlmICghaXNfaW5wdXQpCisJCS8qIFVzZSB0aGUgb3V0cHV0IGNhY2hlICovCisJCXZhbCA9IChjaGlwX2RhdGEtPmNhY2hlX291dCA+PiBvZmZzZXQpICYgMTsKKwllbHNlCisJCS8qIFVzZSB0aGUgaW5wdXQgY2FjaGUgKi8KKwkJdmFsID0gKGNoaXBfZGF0YS0+Y2FjaGVfaW4gPj4gb2Zmc2V0KSAmIDE7CisKKwlpZiAodmFsKQorCQlyZXR1cm4gMTsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGh0Y3BsZF9kaXJlY3Rpb25fb3V0cHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCXVuc2lnbmVkIG9mZnNldCwgaW50IHZhbHVlKQoreworCWh0Y3BsZF9jaGlwX3NldChjaGlwLCBvZmZzZXQsIHZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBodGNwbGRfZGlyZWN0aW9uX2lucHV0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJCXVuc2lnbmVkIG9mZnNldCkKK3sKKwkvKgorCSAqIE5vLW9wOiB0aGlzIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIGNhbGxlZCBvbiB0aGUgaW5wdXQgY2hpcC4KKwkgKiBXZSBkbyBob3dldmVyIG1ha2Ugc3VyZSB0aGUgb2Zmc2V0IGlzIHdpdGhpbiByYW5nZS4KKwkgKi8KKwlyZXR1cm4gKG9mZnNldCA8IGNoaXAtPm5ncGlvKSA/IDAgOiAtRUlOVkFMOworfQorCitpbnQgaHRjcGxkX2NoaXBfdG9faXJxKHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKK3sKKwlzdHJ1Y3QgaHRjcGxkX2NoaXAgKmNoaXBfZGF0YTsKKworCWNoaXBfZGF0YSA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgaHRjcGxkX2NoaXAsIGNoaXBfaW4pOworCisJaWYgKG9mZnNldCA8IGNoaXBfZGF0YS0+bmlycXMpCisJCXJldHVybiBjaGlwX2RhdGEtPmlycV9zdGFydCArIG9mZnNldDsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworfQorCit2b2lkIGh0Y3BsZF9jaGlwX3Jlc2V0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IGh0Y3BsZF9jaGlwICpjaGlwX2RhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpZiAoIWNoaXBfZGF0YSkKKwkJcmV0dXJuOworCisJaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKAorCQljbGllbnQsIChjaGlwX2RhdGEtPmNhY2hlX291dCA9IGNoaXBfZGF0YS0+cmVzZXQpKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgaHRjcGxkX3NldHVwX2NoaXBfaXJxKAorCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQlpbnQgY2hpcF9pbmRleCkKK3sKKwlzdHJ1Y3QgaHRjcGxkX2RhdGEgKmh0Y3BsZDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBodGNwbGRfY29yZV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgaHRjcGxkX2NoaXAgKmNoaXA7CisJc3RydWN0IGh0Y3BsZF9jaGlwX3BsYXRmb3JtX2RhdGEgKnBsYXRfY2hpcF9kYXRhOworCXVuc2lnbmVkIGludCBpcnEsIGlycV9lbmQ7CisJaW50IHJldCA9IDA7CisKKwkvKiBHZXQgdGhlIHBsYXRmb3JtIGFuZCBkcml2ZXIgZGF0YSAqLworCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWh0Y3BsZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWNoaXAgPSAmaHRjcGxkLT5jaGlwW2NoaXBfaW5kZXhdOworCXBsYXRfY2hpcF9kYXRhID0gJnBkYXRhLT5jaGlwW2NoaXBfaW5kZXhdOworCisJLyogU2V0dXAgaXJxIGhhbmRsZXJzICovCisJaXJxX2VuZCA9IGNoaXAtPmlycV9zdGFydCArIGNoaXAtPm5pcnFzOworCWZvciAoaXJxID0gY2hpcC0+aXJxX3N0YXJ0OyBpcnEgPCBpcnFfZW5kOyBpcnErKykgeworCQlzZXRfaXJxX2NoaXAoaXJxLCAmaHRjcGxkX211eGVkX2NoaXApOworCQlzZXRfaXJxX2NoaXBfZGF0YShpcnEsIGNoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaXJxLCBoYW5kbGVfc2ltcGxlX2lycSk7CisjaWZkZWYgQ09ORklHX0FSTQorCQlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOworI2Vsc2UKKwkJc2V0X2lycV9wcm9iZShpcnEpOworI2VuZGlmCisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgaHRjcGxkX3JlZ2lzdGVyX2NoaXBfaTJjKAorCQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAorCQlpbnQgY2hpcF9pbmRleCkKK3sKKwlzdHJ1Y3QgaHRjcGxkX2RhdGEgKmh0Y3BsZDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBodGNwbGRfY29yZV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgaHRjcGxkX2NoaXAgKmNoaXA7CisJc3RydWN0IGh0Y3BsZF9jaGlwX3BsYXRmb3JtX2RhdGEgKnBsYXRfY2hpcF9kYXRhOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOworCisJLyogR2V0IHRoZSBwbGF0Zm9ybSBhbmQgZHJpdmVyIGRhdGEgKi8KKwlwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlodGNwbGQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwljaGlwID0gJmh0Y3BsZC0+Y2hpcFtjaGlwX2luZGV4XTsKKwlwbGF0X2NoaXBfZGF0YSA9ICZwZGF0YS0+Y2hpcFtjaGlwX2luZGV4XTsKKworCWFkYXB0ZXIgPSBpMmNfZ2V0X2FkYXB0ZXIocGRhdGEtPmkyY19hZGFwdGVyX2lkKTsKKwlpZiAoYWRhcHRlciA9PSBOVUxMKSB7CisJCS8qIEVlaywgbm8gc3VjaCBJMkMgYWRhcHRlciEgIEJhaWwgb3V0LiAqLworCQlkZXZfd2FybihkZXYsICJDaGlwIGF0IGkyYyBhZGRyZXNzIDB4JXg6IEludmFsaWQgaTJjIGFkYXB0ZXIgJWRcbiIsCisJCQkgcGxhdF9jaGlwX2RhdGEtPmFkZHIsIHBkYXRhLT5pMmNfYWRhcHRlcl9pZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoYWRhcHRlciwgSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFX0RBVEEpKSB7CisJCWRldl93YXJuKGRldiwgImkyYyBhZGFwdGVyICVkIG5vbi1mdW5jdGlvbmFsXG4iLAorCQkJIHBkYXRhLT5pMmNfYWRhcHRlcl9pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW1lbXNldCgmaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBpMmNfYm9hcmRfaW5mbykpOworCWluZm8uYWRkciA9IHBsYXRfY2hpcF9kYXRhLT5hZGRyOworCXN0cmxjcHkoaW5mby50eXBlLCAiaHRjcGxkLWNoaXAiLCBJMkNfTkFNRV9TSVpFKTsKKwlpbmZvLnBsYXRmb3JtX2RhdGEgPSBjaGlwOworCisJLyogQWRkIHRoZSBJMkMgZGV2aWNlLiAgVGhpcyBjYWxscyB0aGUgcHJvYmUoKSBmdW5jdGlvbi4gKi8KKwljbGllbnQgPSBpMmNfbmV3X2RldmljZShhZGFwdGVyLCAmaW5mbyk7CisJaWYgKCFjbGllbnQpIHsKKwkJLyogSTJDIGRldmljZSByZWdpc3RyYXRpb24gZmFpbGVkLCBjb250aW5ldSB3aXRoIHRoZSBuZXh0ICovCisJCWRldl93YXJuKGRldiwgIlVuYWJsZSB0byBhZGQgSTJDIGRldmljZSBmb3IgMHgleFxuIiwKKwkJCSBwbGF0X2NoaXBfZGF0YS0+YWRkcik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGNoaXApOworCXNucHJpbnRmKGNsaWVudC0+bmFtZSwgSTJDX05BTUVfU0laRSwgIkNoaXBfMHglZCIsIGNsaWVudC0+YWRkcik7CisJY2hpcC0+Y2xpZW50ID0gY2xpZW50OworCisJLyogUmVzZXQgdGhlIGNoaXAgKi8KKwlodGNwbGRfY2hpcF9yZXNldChjbGllbnQpOworCWNoaXAtPmNhY2hlX2luID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgY2hpcC0+Y2FjaGVfb3V0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2RldmluaXQgaHRjcGxkX3VucmVnaXN0ZXJfY2hpcF9pMmMoCisJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsCisJCWludCBjaGlwX2luZGV4KQoreworCXN0cnVjdCBodGNwbGRfZGF0YSAqaHRjcGxkOworCXN0cnVjdCBodGNwbGRfY2hpcCAqY2hpcDsKKworCS8qIEdldCB0aGUgcGxhdGZvcm0gYW5kIGRyaXZlciBkYXRhICovCisJaHRjcGxkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJY2hpcCA9ICZodGNwbGQtPmNoaXBbY2hpcF9pbmRleF07CisKKwlpZiAoY2hpcC0+Y2xpZW50KQorCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoY2hpcC0+Y2xpZW50KTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgaHRjcGxkX3JlZ2lzdGVyX2NoaXBfZ3BpbygKKwkJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKKwkJaW50IGNoaXBfaW5kZXgpCit7CisJc3RydWN0IGh0Y3BsZF9kYXRhICpodGNwbGQ7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgaHRjcGxkX2NvcmVfcGxhdGZvcm1fZGF0YSAqcGRhdGE7CisJc3RydWN0IGh0Y3BsZF9jaGlwICpjaGlwOworCXN0cnVjdCBodGNwbGRfY2hpcF9wbGF0Zm9ybV9kYXRhICpwbGF0X2NoaXBfZGF0YTsKKwlzdHJ1Y3QgZ3Bpb19jaGlwICpncGlvX2NoaXA7CisJaW50IHJldCA9IDA7CisKKwkvKiBHZXQgdGhlIHBsYXRmb3JtIGFuZCBkcml2ZXIgZGF0YSAqLworCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWh0Y3BsZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCWNoaXAgPSAmaHRjcGxkLT5jaGlwW2NoaXBfaW5kZXhdOworCXBsYXRfY2hpcF9kYXRhID0gJnBkYXRhLT5jaGlwW2NoaXBfaW5kZXhdOworCisJLyogU2V0dXAgdGhlIEdQSU8gY2hpcHMgKi8KKwlncGlvX2NoaXAgPSAmKGNoaXAtPmNoaXBfb3V0KTsKKwlncGlvX2NoaXAtPmxhYmVsICAgICAgICAgICA9ICJodGNwbGQtb3V0IjsKKwlncGlvX2NoaXAtPmRldiAgICAgICAgICAgICA9IGRldjsKKwlncGlvX2NoaXAtPm93bmVyICAgICAgICAgICA9IFRISVNfTU9EVUxFOworCWdwaW9fY2hpcC0+Z2V0ICAgICAgICAgICAgID0gaHRjcGxkX2NoaXBfZ2V0OworCWdwaW9fY2hpcC0+c2V0ICAgICAgICAgICAgID0gaHRjcGxkX2NoaXBfc2V0OworCWdwaW9fY2hpcC0+ZGlyZWN0aW9uX2lucHV0ID0gTlVMTDsKKwlncGlvX2NoaXAtPmRpcmVjdGlvbl9vdXRwdXQgPSBodGNwbGRfZGlyZWN0aW9uX291dHB1dDsKKwlncGlvX2NoaXAtPmJhc2UgICAgICAgICAgICA9IHBsYXRfY2hpcF9kYXRhLT5ncGlvX291dF9iYXNlOworCWdwaW9fY2hpcC0+bmdwaW8gICAgICAgICAgID0gcGxhdF9jaGlwX2RhdGEtPm51bV9ncGlvczsKKworCWdwaW9fY2hpcCA9ICYoY2hpcC0+Y2hpcF9pbik7CisJZ3Bpb19jaGlwLT5sYWJlbCAgICAgICAgICAgPSAiaHRjcGxkLWluIjsKKwlncGlvX2NoaXAtPmRldiAgICAgICAgICAgICA9IGRldjsKKwlncGlvX2NoaXAtPm93bmVyICAgICAgICAgICA9IFRISVNfTU9EVUxFOworCWdwaW9fY2hpcC0+Z2V0ICAgICAgICAgICAgID0gaHRjcGxkX2NoaXBfZ2V0OworCWdwaW9fY2hpcC0+c2V0ICAgICAgICAgICAgID0gTlVMTDsKKwlncGlvX2NoaXAtPmRpcmVjdGlvbl9pbnB1dCA9IGh0Y3BsZF9kaXJlY3Rpb25faW5wdXQ7CisJZ3Bpb19jaGlwLT5kaXJlY3Rpb25fb3V0cHV0ID0gTlVMTDsKKwlncGlvX2NoaXAtPnRvX2lycSAgICAgICAgICA9IGh0Y3BsZF9jaGlwX3RvX2lycTsKKwlncGlvX2NoaXAtPmJhc2UgICAgICAgICAgICA9IHBsYXRfY2hpcF9kYXRhLT5ncGlvX2luX2Jhc2U7CisJZ3Bpb19jaGlwLT5uZ3BpbyAgICAgICAgICAgPSBwbGF0X2NoaXBfZGF0YS0+bnVtX2dwaW9zOworCisJLyogQWRkIHRoZSBHUElPIGNoaXBzICovCisJcmV0ID0gZ3Bpb2NoaXBfYWRkKCYoY2hpcC0+Y2hpcF9vdXQpKTsKKwlpZiAocmV0KSB7CisJCWRldl93YXJuKGRldiwgIlVuYWJsZSB0byByZWdpc3RlciBvdXRwdXQgR1BJT3MgZm9yIDB4JXg6ICVkXG4iLAorCQkJIHBsYXRfY2hpcF9kYXRhLT5hZGRyLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldCA9IGdwaW9jaGlwX2FkZCgmKGNoaXAtPmNoaXBfaW4pKTsKKwlpZiAocmV0KSB7CisJCWludCBlcnJvcjsKKworCQlkZXZfd2FybihkZXYsICJVbmFibGUgdG8gcmVnaXN0ZXIgaW5wdXQgR1BJT3MgZm9yIDB4JXg6ICVkXG4iLAorCQkJIHBsYXRfY2hpcF9kYXRhLT5hZGRyLCByZXQpOworCisJCWVycm9yID0gZ3Bpb2NoaXBfcmVtb3ZlKCYoY2hpcC0+Y2hpcF9vdXQpKTsKKwkJaWYgKGVycm9yKQorCQkJZGV2X3dhcm4oZGV2LCAiRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIHVucmVnaXN0ZXIgZ3BpbyBjaGlwOiAlZFxuIiwgZXJyb3IpOworCisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGh0Y3BsZF9zZXR1cF9jaGlwcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBodGNwbGRfZGF0YSAqaHRjcGxkOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJc3RydWN0IGh0Y3BsZF9jb3JlX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCWludCBpOworCisJLyogR2V0IHRoZSBwbGF0Zm9ybSBhbmQgZHJpdmVyIGRhdGEgKi8KKwlwZGF0YSA9IGRldi0+cGxhdGZvcm1fZGF0YTsKKwlodGNwbGQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCS8qIFNldHVwIGVhY2ggY2hpcCdzIG91dHB1dCBHUElPcyAqLworCWh0Y3BsZC0+bmNoaXBzID0gcGRhdGEtPm51bV9jaGlwOworCWh0Y3BsZC0+Y2hpcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBodGNwbGRfY2hpcCkgKiBodGNwbGQtPm5jaGlwcywKKwkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIWh0Y3BsZC0+Y2hpcCkgeworCQlkZXZfd2FybihkZXYsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBjaGlwc1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEFkZCB0aGUgY2hpcHMgYXMgYmVzdCB3ZSBjYW4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaHRjcGxkLT5uY2hpcHM7IGkrKykgeworCQlpbnQgcmV0OworCisJCS8qIFNldHVwIHRoZSBIVENQTEQgY2hpcHMgKi8KKwkJaHRjcGxkLT5jaGlwW2ldLnJlc2V0ID0gcGRhdGEtPmNoaXBbaV0ucmVzZXQ7CisJCWh0Y3BsZC0+Y2hpcFtpXS5jYWNoZV9vdXQgPSBwZGF0YS0+Y2hpcFtpXS5yZXNldDsKKwkJaHRjcGxkLT5jaGlwW2ldLmNhY2hlX2luID0gMDsKKwkJaHRjcGxkLT5jaGlwW2ldLmRldiA9IGRldjsKKwkJaHRjcGxkLT5jaGlwW2ldLmlycV9zdGFydCA9IHBkYXRhLT5jaGlwW2ldLmlycV9iYXNlOworCQlodGNwbGQtPmNoaXBbaV0ubmlycXMgPSBwZGF0YS0+Y2hpcFtpXS5udW1faXJxczsKKworCQlJTklUX1dPUksoJihodGNwbGQtPmNoaXBbaV0uc2V0X3ZhbF93b3JrKSwgJmh0Y3BsZF9jaGlwX3NldF9uaSk7CisJCXNwaW5fbG9ja19pbml0KCYoaHRjcGxkLT5jaGlwW2ldLmxvY2spKTsKKworCQkvKiBTZXR1cCB0aGUgaW50ZXJydXB0cyBmb3IgdGhlIGNoaXAgKi8KKwkJaWYgKGh0Y3BsZC0+Y2hhaW5lZF9pcnEpIHsKKwkJCXJldCA9IGh0Y3BsZF9zZXR1cF9jaGlwX2lycShwZGV2LCBpKTsKKwkJCWlmIChyZXQpCisJCQkJY29udGludWU7CisJCX0KKworCQkvKiBSZWdpc3RlciB0aGUgY2hpcCB3aXRoIEkyQyAqLworCQlyZXQgPSBodGNwbGRfcmVnaXN0ZXJfY2hpcF9pMmMocGRldiwgaSk7CisJCWlmIChyZXQpCisJCQljb250aW51ZTsKKworCisJCS8qIFJlZ2lzdGVyIHRoZSBjaGlwcyB3aXRoIHRoZSBHUElPIHN1YnN5c3RlbSAqLworCQlyZXQgPSBodGNwbGRfcmVnaXN0ZXJfY2hpcF9ncGlvKHBkZXYsIGkpOworCQlpZiAocmV0KSB7CisJCQkvKiBVbnJlZ2lzdGVyIHRoZSBjaGlwIGZyb20gaTJjIGFuZCBjb250aW51ZSAqLworCQkJaHRjcGxkX3VucmVnaXN0ZXJfY2hpcF9pMmMocGRldiwgaSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWRldl9pbmZvKGRldiwgIlJlZ2lzdGVyZWQgY2hpcCBhdCAweCV4XG4iLCBwZGF0YS0+Y2hpcFtpXS5hZGRyKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgaHRjcGxkX2NvcmVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgaHRjcGxkX2RhdGEgKmh0Y3BsZDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCBodGNwbGRfY29yZV9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgcmV0ID0gMDsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXBkYXRhID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCWlmICghcGRhdGEpIHsKKwkJZGV2X3dhcm4oZGV2LCAiUGxhdGZvcm0gZGF0YSBub3QgZm91bmQgZm9yIGh0Y3BsZCBjb3JlIVxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJaHRjcGxkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGh0Y3BsZF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFodGNwbGQpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogRmluZCBjaGFpbmVkIGlycSAqLworCXJldCA9IC1FSU5WQUw7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSVJRLCAwKTsKKwlpZiAocmVzKSB7CisJCWludCBmbGFnczsKKwkJaHRjcGxkLT5jaGFpbmVkX2lycSA9IHJlcy0+c3RhcnQ7CisKKwkJLyogU2V0dXAgdGhlIGNoYWluZWQgaW50ZXJydXB0IGhhbmRsZXIgKi8KKwkJZmxhZ3MgPSBJUlFGX1RSSUdHRVJfRkFMTElORyB8IElSUUZfVFJJR0dFUl9SSVNJTkc7CisJCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKGh0Y3BsZC0+Y2hhaW5lZF9pcnEsCisJCQkJCSAgIE5VTEwsIGh0Y3BsZF9oYW5kbGVyLAorCQkJCQkgICBmbGFncywgcGRldi0+bmFtZSwgaHRjcGxkKTsKKwkJaWYgKHJldCkgeworCQkJZGV2X3dhcm4oZGV2LCAiVW5hYmxlIHRvIHNldHVwIGNoYWluZWQgaXJxIGhhbmRsZXI6ICVkXG4iLCByZXQpOworCQkJZ290byBmYWlsOworCQl9IGVsc2UKKwkJCWRldmljZV9pbml0X3dha2V1cChkZXYsIDApOworCX0KKworCS8qIFNldCB0aGUgZHJpdmVyIGRhdGEgKi8KKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBodGNwbGQpOworCisJLyogU2V0dXAgdGhlIGh0Y3BsZCBjaGlwcyAqLworCXJldCA9IGh0Y3BsZF9zZXR1cF9jaGlwcyhwZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwkvKiBSZXF1ZXN0IHRoZSBHUElPKHMpIGZvciB0aGUgaW50IHJlc2V0IGFuZCBzZXQgdGhlbSB1cCAqLworCWlmIChwZGF0YS0+aW50X3Jlc2V0X2dwaW9faGkpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5pbnRfcmVzZXRfZ3Bpb19oaSwgImh0Y3BsZC1jb3JlIik7CisJCWlmIChyZXQpIHsKKwkJCS8qCisJCQkgKiBJZiBpdCBmYWlsZWQsIHRoYXQgc3Vja3MsIGJ1dCB3ZSBjYW4gcHJvYmFibHkKKwkJCSAqIGNvbnRpbnVlIG9uIHdpdGhvdXQgaXQuCisJCQkgKi8KKwkJCWRldl93YXJuKGRldiwgIlVuYWJsZSB0byByZXF1ZXN0IGludF9yZXNldF9ncGlvX2hpIC0tIGludGVycnVwdHMgbWF5IG5vdCB3b3JrXG4iKTsKKwkJCWh0Y3BsZC0+aW50X3Jlc2V0X2dwaW9faGkgPSAwOworCQl9IGVsc2UgeworCQkJaHRjcGxkLT5pbnRfcmVzZXRfZ3Bpb19oaSA9IHBkYXRhLT5pbnRfcmVzZXRfZ3Bpb19oaTsKKwkJCWdwaW9fc2V0X3ZhbHVlKGh0Y3BsZC0+aW50X3Jlc2V0X2dwaW9faGksIDEpOworCQl9CisJfQorCisJaWYgKHBkYXRhLT5pbnRfcmVzZXRfZ3Bpb19sbykgeworCQlyZXQgPSBncGlvX3JlcXVlc3QocGRhdGEtPmludF9yZXNldF9ncGlvX2xvLCAiaHRjcGxkLWNvcmUiKTsKKwkJaWYgKHJldCkgeworCQkJLyoKKwkJCSAqIElmIGl0IGZhaWxlZCwgdGhhdCBzdWNrcywgYnV0IHdlIGNhbiBwcm9iYWJseQorCQkJICogY29udGludWUgb24gd2l0aG91dCBpdC4KKwkJCSAqLworCQkJZGV2X3dhcm4oZGV2LCAiVW5hYmxlIHRvIHJlcXVlc3QgaW50X3Jlc2V0X2dwaW9fbG8gLS0gaW50ZXJydXB0cyBtYXkgbm90IHdvcmtcbiIpOworCQkJaHRjcGxkLT5pbnRfcmVzZXRfZ3Bpb19sbyA9IDA7CisJCX0gZWxzZSB7CisJCQlodGNwbGQtPmludF9yZXNldF9ncGlvX2xvID0gcGRhdGEtPmludF9yZXNldF9ncGlvX2xvOworCQkJZ3Bpb19zZXRfdmFsdWUoaHRjcGxkLT5pbnRfcmVzZXRfZ3Bpb19sbywgMCk7CisJCX0KKwl9CisKKwlkZXZfaW5mbyhkZXYsICJJbml0aWFsaXplZCBzdWNjZXNzZnVsbHlcbiIpOworCXJldHVybiAwOworCitmYWlsOgorCWtmcmVlKGh0Y3BsZCk7CisJcmV0dXJuIHJldDsKK30KKworLyogVGhlIEkyQyBEcml2ZXIgLS0gdXNlZCBpbnRlcm5hbGx5ICovCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgaHRjcGxkX2NoaXBfaWRbXSA9IHsKKwl7ICJodGNwbGQtY2hpcCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgaHRjcGxkX2NoaXBfaWQpOworCisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBodGNwbGRfY2hpcF9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAiaHRjcGxkLWNoaXAiLAorCX0sCisJLmlkX3RhYmxlID0gaHRjcGxkX2NoaXBfaWQsCit9OworCisvKiBUaGUgQ29yZSBEcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGh0Y3BsZF9jb3JlX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9ICJpMmMtaHRjcGxkIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgaHRjcGxkX2NvcmVfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwkvKiBSZWdpc3RlciB0aGUgSTJDIENoaXAgZHJpdmVyICovCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJmh0Y3BsZF9jaGlwX2RyaXZlcik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCS8qIFByb2JlIGZvciBvdXIgY2hpcHMgKi8KKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3Byb2JlKCZodGNwbGRfY29yZV9kcml2ZXIsIGh0Y3BsZF9jb3JlX3Byb2JlKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGh0Y3BsZF9jb3JlX2V4aXQodm9pZCkKK3sKKwlpMmNfZGVsX2RyaXZlcigmaHRjcGxkX2NoaXBfZHJpdmVyKTsKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaHRjcGxkX2NvcmVfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaHRjcGxkX2NvcmVfaW5pdCk7Cittb2R1bGVfZXhpdChodGNwbGRfY29yZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQ29yeSBNYWNjYXJyb25lIDxkYXJrc3RhcjYyNjJAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMgSFRDIFBMRCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvbHBjX3NjaC5jIGIvZHJpdmVycy9tZmQvbHBjX3NjaC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYjJmNjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC9scGNfc2NoLmMKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiAgbHBjX3NjaC5jIC0gTFBDIGludGVyZmFjZSBmb3IgSW50ZWwgUG91bHNibyBTQ0gKKyAqCisgKiAgTFBDIGJyaWRnZSBmdW5jdGlvbiBvZiB0aGUgSW50ZWwgU0NIIGNvbnRhaW5zIG1hbnkgb3RoZXIKKyAqICBmdW5jdGlvbmFsIHVuaXRzLCBzdWNoIGFzIEludGVycnVwdCBjb250cm9sbGVycywgVGltZXJzLAorICogIFBvd2VyIE1hbmFnZW1lbnQsIFN5c3RlbSBNYW5hZ2VtZW50LCBHUElPLCBSVEMsIGFuZCBMUEMKKyAqICBDb25maWd1cmF0aW9uIFJlZ2lzdGVycy4KKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDEwIENvbXB1TGFiIEx0ZAorICogIEF1dGhvcjogRGVuaXMgVHVyaXNjaGV2IDxkZW5pc0Bjb21wdWxhYi5jby5pbD4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIDIgYXMgcHVibGlzaGVkCisgKiAgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgorCisjZGVmaW5lIFNNQkFTRQkJMHg0MAorI2RlZmluZSBTTUJVU19JT19TSVpFCTY0CisKKyNkZWZpbmUgR1BJT0JBU0UJMHg0NAorI2RlZmluZSBHUElPX0lPX1NJWkUJNjQKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWJ1c19zY2hfcmVzb3VyY2UgPSB7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSU8sCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZ3Bpb19zY2hfcmVzb3VyY2UgPSB7CisJCS5mbGFncyA9IElPUkVTT1VSQ0VfSU8sCit9OworCitzdGF0aWMgc3RydWN0IG1mZF9jZWxsIGxwY19zY2hfY2VsbHNbXSA9IHsKKwl7CisJCS5uYW1lID0gImlzY2hfc21idXMiLAorCQkubnVtX3Jlc291cmNlcyA9IDEsCisJCS5yZXNvdXJjZXMgPSAmc21idXNfc2NoX3Jlc291cmNlLAorCX0sCisJeworCQkubmFtZSA9ICJzY2hfZ3BpbyIsCisJCS5udW1fcmVzb3VyY2VzID0gMSwKKwkJLnJlc291cmNlcyA9ICZncGlvX3NjaF9yZXNvdXJjZSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGxwY19zY2hfaWRzW10gPSB7CisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfU0NIX0xQQykgfSwKKwl7IDAsIH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbHBjX3NjaF9pZHMpOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBscGNfc2NoX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCXVuc2lnbmVkIGludCBiYXNlX2FkZHJfY2ZnOworCXVuc2lnbmVkIHNob3J0IGJhc2VfYWRkcjsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIFNNQkFTRSwgJmJhc2VfYWRkcl9jZmcpOworCWlmICghKGJhc2VfYWRkcl9jZmcgJiAoMSA8PCAzMSkpKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiRGVjb2RlIG9mIHRoZSBTTUJ1cyBJL08gcmFuZ2UgZGlzYWJsZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJYmFzZV9hZGRyID0gKHVuc2lnbmVkIHNob3J0KWJhc2VfYWRkcl9jZmc7CisJaWYgKGJhc2VfYWRkciA9PSAwKSB7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAiSS9PIHNwYWNlIGZvciBTTUJ1cyB1bmluaXRpYWxpemVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc21idXNfc2NoX3Jlc291cmNlLnN0YXJ0ID0gYmFzZV9hZGRyOworCXNtYnVzX3NjaF9yZXNvdXJjZS5lbmQgPSBiYXNlX2FkZHIgKyBTTUJVU19JT19TSVpFIC0gMTsKKworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIEdQSU9CQVNFLCAmYmFzZV9hZGRyX2NmZyk7CisJaWYgKCEoYmFzZV9hZGRyX2NmZyAmICgxIDw8IDMxKSkpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJEZWNvZGUgb2YgdGhlIEdQSU8gSS9PIHJhbmdlIGRpc2FibGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWJhc2VfYWRkciA9ICh1bnNpZ25lZCBzaG9ydCliYXNlX2FkZHJfY2ZnOworCWlmIChiYXNlX2FkZHIgPT0gMCkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIkkvTyBzcGFjZSBmb3IgR1BJTyB1bmluaXRpYWxpemVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZ3Bpb19zY2hfcmVzb3VyY2Uuc3RhcnQgPSBiYXNlX2FkZHI7CisJZ3Bpb19zY2hfcmVzb3VyY2UuZW5kID0gYmFzZV9hZGRyICsgR1BJT19JT19TSVpFIC0gMTsKKworCXJldHVybiBtZmRfYWRkX2RldmljZXMoJmRldi0+ZGV2LCAtMSwKKwkJCWxwY19zY2hfY2VsbHMsIEFSUkFZX1NJWkUobHBjX3NjaF9jZWxscyksIE5VTEwsIDApOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgbHBjX3NjaF9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwltZmRfcmVtb3ZlX2RldmljZXMoJmRldi0+ZGV2KTsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGxwY19zY2hfZHJpdmVyID0geworCS5uYW1lCQk9ICJscGNfc2NoIiwKKwkuaWRfdGFibGUJPSBscGNfc2NoX2lkcywKKwkucHJvYmUJCT0gbHBjX3NjaF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKGxwY19zY2hfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGxwY19zY2hfaW5pdCh2b2lkKQoreworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZscGNfc2NoX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBscGNfc2NoX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmxwY19zY2hfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQobHBjX3NjaF9pbml0KTsKK21vZHVsZV9leGl0KGxwY19zY2hfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkRlbmlzIFR1cmlzY2hldiA8ZGVuaXNAY29tcHVsYWIuY28uaWw+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkxQQyBpbnRlcmZhY2UgZm9yIEludGVsIFBvdWxzYm8gU0NIIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9tYXg4OTI1LWNvcmUuYyBiL2RyaXZlcnMvbWZkL21heDg5MjUtY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZDYzYzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC9tYXg4OTI1LWNvcmUuYwpAQCAtMCwwICsxLDY1NiBAQAorLyoKKyAqIEJhc2UgZHJpdmVyIGZvciBNYXhpbSBNQVg4OTI1CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqCUhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9tYXg4OTI1Lmg+CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYmFja2xpZ2h0X3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJPSAibWF4ODkyNS1iYWNrbGlnaHQiLAorCQkuc3RhcnQJPSBNQVg4OTI1X1dMRURfTU9ERV9DTlRMLAorCQkuZW5kCT0gTUFYODkyNV9XTEVEX0NOVEwsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgYmFja2xpZ2h0X2RldnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJtYXg4OTI1LWJhY2tsaWdodCIsCisJCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkJLnJlc291cmNlcwk9ICZiYWNrbGlnaHRfcmVzb3VyY2VzWzBdLAorCQkuaWQJCT0gLTEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdG91Y2hfcmVzb3VyY2VzW10gPSB7CisJeworCQkubmFtZQk9ICJtYXg4OTI1LXRzYyIsCisJCS5zdGFydAk9IE1BWDg5MjVfVFNDX0lSUSwKKwkJLmVuZAk9IE1BWDg5MjVfQURDX1JFU19FTkQsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgdG91Y2hfZGV2c1tdID0geworCXsKKwkJLm5hbWUJCT0gIm1heDg5MjUtdG91Y2giLAorCQkubnVtX3Jlc291cmNlcwk9IDEsCisJCS5yZXNvdXJjZXMJPSAmdG91Y2hfcmVzb3VyY2VzWzBdLAorCQkuaWQJCT0gLTEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcG93ZXJfc3VwcGx5X3Jlc291cmNlc1tdID0geworCXsKKwkJLm5hbWUJPSAibWF4ODkyNS1wb3dlciIsCisJCS5zdGFydAk9IE1BWDg5MjVfQ0hHX0lSUTEsCisJCS5lbmQJPSBNQVg4OTI1X0NIR19JUlExX01BU0ssCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgcG93ZXJfZGV2c1tdID0geworCXsKKwkJLm5hbWUJCT0gIm1heDg5MjUtcG93ZXIiLAorCQkubnVtX3Jlc291cmNlcwk9IDEsCisJCS5yZXNvdXJjZXMJPSAmcG93ZXJfc3VwcGx5X3Jlc291cmNlc1swXSwKKwkJLmlkCQk9IC0xLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHJ0Y19yZXNvdXJjZXNbXSA9IHsKKwl7CisJCS5uYW1lCT0gIm1heDg5MjUtcnRjIiwKKwkJLnN0YXJ0CT0gTUFYODkyNV9SVENfSVJRLAorCQkuZW5kCT0gTUFYODkyNV9SVENfSVJRX01BU0ssCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWZkX2NlbGwgcnRjX2RldnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJtYXg4OTI1LXJ0YyIsCisJCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkJLnJlc291cmNlcwk9ICZydGNfcmVzb3VyY2VzWzBdLAorCQkuaWQJCT0gLTEsCisJfSwKK307CisKKyNkZWZpbmUgTUFYODkyNV9SRUdfUkVTT1VSQ0UoX3N0YXJ0LCBfZW5kKQlcCit7CQkJCQkJXAorCS5zdGFydAk9IE1BWDg5MjVfIyNfc3RhcnQsCQlcCisJLmVuZAk9IE1BWDg5MjVfIyNfZW5kLAkJXAorCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCQlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgcmVndWxhdG9yX3Jlc291cmNlc1tdID0geworCU1BWDg5MjVfUkVHX1JFU09VUkNFKFNEQ1RMMSwgU0RDVEwxKSwKKwlNQVg4OTI1X1JFR19SRVNPVVJDRShTRENUTDIsIFNEQ1RMMiksCisJTUFYODkyNV9SRUdfUkVTT1VSQ0UoU0RDVEwzLCBTRENUTDMpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDEsIExET0NUTDEpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDIsIExET0NUTDIpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDMsIExET0NUTDMpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDQsIExET0NUTDQpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDUsIExET0NUTDUpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDYsIExET0NUTDYpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDcsIExET0NUTDcpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDgsIExET0NUTDgpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDksIExET0NUTDkpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDEwLCBMRE9DVEwxMCksCisJTUFYODkyNV9SRUdfUkVTT1VSQ0UoTERPQ1RMMTEsIExET0NUTDExKSwKKwlNQVg4OTI1X1JFR19SRVNPVVJDRShMRE9DVEwxMiwgTERPQ1RMMTIpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDEzLCBMRE9DVEwxMyksCisJTUFYODkyNV9SRUdfUkVTT1VSQ0UoTERPQ1RMMTQsIExET0NUTDE0KSwKKwlNQVg4OTI1X1JFR19SRVNPVVJDRShMRE9DVEwxNSwgTERPQ1RMMTUpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDE2LCBMRE9DVEwxNiksCisJTUFYODkyNV9SRUdfUkVTT1VSQ0UoTERPQ1RMMTcsIExET0NUTDE3KSwKKwlNQVg4OTI1X1JFR19SRVNPVVJDRShMRE9DVEwxOCwgTERPQ1RMMTgpLAorCU1BWDg5MjVfUkVHX1JFU09VUkNFKExET0NUTDE5LCBMRE9DVEwxOSksCisJTUFYODkyNV9SRUdfUkVTT1VSQ0UoTERPQ1RMMjAsIExET0NUTDIwKSwKK307CisKKyNkZWZpbmUgTUFYODkyNV9SRUdfREVWUyhfaWQpCQkJCQkJXAorewkJCQkJCQkJCVwKKwkubmFtZQkJPSAibWF4ODkyNS1yZWd1bGF0b3IiLAkJCQlcCisJLm51bV9yZXNvdXJjZXMJPSAxLAkJCQkJCVwKKwkucmVzb3VyY2VzCT0gJnJlZ3VsYXRvcl9yZXNvdXJjZXNbTUFYODkyNV9JRF8jI19pZF0sCVwKKwkuaWQJCT0gTUFYODkyNV9JRF8jI19pZCwJCQkJXAorfQorCitzdGF0aWMgc3RydWN0IG1mZF9jZWxsIHJlZ3VsYXRvcl9kZXZzW10gPSB7CisJTUFYODkyNV9SRUdfREVWUyhTRDEpLAorCU1BWDg5MjVfUkVHX0RFVlMoU0QyKSwKKwlNQVg4OTI1X1JFR19ERVZTKFNEMyksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xKSwKKwlNQVg4OTI1X1JFR19ERVZTKExETzIpLAorCU1BWDg5MjVfUkVHX0RFVlMoTERPMyksCisJTUFYODkyNV9SRUdfREVWUyhMRE80KSwKKwlNQVg4OTI1X1JFR19ERVZTKExETzUpLAorCU1BWDg5MjVfUkVHX0RFVlMoTERPNiksCisJTUFYODkyNV9SRUdfREVWUyhMRE83KSwKKwlNQVg4OTI1X1JFR19ERVZTKExETzgpLAorCU1BWDg5MjVfUkVHX0RFVlMoTERPOSksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xMCksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xMSksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xMiksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xMyksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xNCksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xNSksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xNiksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xNyksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xOCksCisJTUFYODkyNV9SRUdfREVWUyhMRE8xOSksCisJTUFYODkyNV9SRUdfREVWUyhMRE8yMCksCit9OworCitlbnVtIHsKKwlGTEFHU19BREMgPSAxLAkvKiByZWdpc3RlciBpbiBBREMgY29tcG9uZW50ICovCisJRkxBR1NfUlRDLAkvKiByZWdpc3RlciBpbiBSVEMgY29tcG9uZW50ICovCit9OworCitzdHJ1Y3QgbWF4ODkyNV9pcnFfZGF0YSB7CisJaW50CXJlZzsKKwlpbnQJbWFza19yZWc7CisJaW50CWVuYWJsZTsJCS8qIGVuYWJsZSBvciBub3QgKi8KKwlpbnQJb2ZmczsJCS8qIGJpdCBvZmZzZXQgaW4gbWFzayByZWdpc3RlciAqLworCWludAlmbGFnczsKKwlpbnQJdHNjX2lycTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF4ODkyNV9pcnFfZGF0YSBtYXg4OTI1X2lycXNbXSA9IHsKKwlbTUFYODkyNV9JUlFfVkNIR19EQ19PVlBdID0geworCQkucmVnCQk9IE1BWDg5MjVfQ0hHX0lSUTEsCisJCS5tYXNrX3JlZwk9IE1BWDg5MjVfQ0hHX0lSUTFfTUFTSywKKwkJLm9mZnMJCT0gMSA8PCAwLAorCX0sCisJW01BWDg5MjVfSVJRX1ZDSEdfRENfRl0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9DSEdfSVJRMSwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9DSEdfSVJRMV9NQVNLLAorCQkub2ZmcwkJPSAxIDw8IDEsCisJfSwKKwlbTUFYODkyNV9JUlFfVkNIR19EQ19SXSA9IHsKKwkJLnJlZwkJPSBNQVg4OTI1X0NIR19JUlExLAorCQkubWFza19yZWcJPSBNQVg4OTI1X0NIR19JUlExX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgMiwKKwl9LAorCVtNQVg4OTI1X0lSUV9WQ0hHX1VTQl9PVlBdID0geworCQkucmVnCQk9IE1BWDg5MjVfQ0hHX0lSUTEsCisJCS5tYXNrX3JlZwk9IE1BWDg5MjVfQ0hHX0lSUTFfTUFTSywKKwkJLm9mZnMJCT0gMSA8PCAzLAorCX0sCisJW01BWDg5MjVfSVJRX1ZDSEdfVVNCX0ZdID0gIHsKKwkJLnJlZwkJPSBNQVg4OTI1X0NIR19JUlExLAorCQkubWFza19yZWcJPSBNQVg4OTI1X0NIR19JUlExX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgNCwKKwl9LAorCVtNQVg4OTI1X0lSUV9WQ0hHX1VTQl9SXSA9IHsKKwkJLnJlZwkJPSBNQVg4OTI1X0NIR19JUlExLAorCQkubWFza19yZWcJPSBNQVg4OTI1X0NIR19JUlExX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgNSwKKwl9LAorCVtNQVg4OTI1X0lSUV9WQ0hHX1RITV9PS19SXSA9IHsKKwkJLnJlZwkJPSBNQVg4OTI1X0NIR19JUlEyLAorCQkubWFza19yZWcJPSBNQVg4OTI1X0NIR19JUlEyX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgMCwKKwl9LAorCVtNQVg4OTI1X0lSUV9WQ0hHX1RITV9PS19GXSA9IHsKKwkJLnJlZwkJPSBNQVg4OTI1X0NIR19JUlEyLAorCQkubWFza19yZWcJPSBNQVg4OTI1X0NIR19JUlEyX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgMSwKKwl9LAorCVtNQVg4OTI1X0lSUV9WQ0hHX1NZU0xPV19GXSA9IHsKKwkJLnJlZwkJPSBNQVg4OTI1X0NIR19JUlEyLAorCQkubWFza19yZWcJPSBNQVg4OTI1X0NIR19JUlEyX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgMiwKKwl9LAorCVtNQVg4OTI1X0lSUV9WQ0hHX1NZU0xPV19SXSA9IHsKKwkJLnJlZwkJPSBNQVg4OTI1X0NIR19JUlEyLAorCQkubWFza19yZWcJPSBNQVg4OTI1X0NIR19JUlEyX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgMywKKwl9LAorCVtNQVg4OTI1X0lSUV9WQ0hHX1JTVF0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9DSEdfSVJRMiwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9DSEdfSVJRMl9NQVNLLAorCQkub2ZmcwkJPSAxIDw8IDQsCisJfSwKKwlbTUFYODkyNV9JUlFfVkNIR19ET05FXSA9IHsKKwkJLnJlZwkJPSBNQVg4OTI1X0NIR19JUlEyLAorCQkubWFza19yZWcJPSBNQVg4OTI1X0NIR19JUlEyX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgNSwKKwl9LAorCVtNQVg4OTI1X0lSUV9WQ0hHX1RPUE9GRl0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9DSEdfSVJRMiwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9DSEdfSVJRMl9NQVNLLAorCQkub2ZmcwkJPSAxIDw8IDYsCisJfSwKKwlbTUFYODkyNV9JUlFfVkNIR19UTVJfRkFVTFRdID0geworCQkucmVnCQk9IE1BWDg5MjVfQ0hHX0lSUTIsCisJCS5tYXNrX3JlZwk9IE1BWDg5MjVfQ0hHX0lSUTJfTUFTSywKKwkJLm9mZnMJCT0gMSA8PCA3LAorCX0sCisJW01BWDg5MjVfSVJRX0dQTV9SU1RJTl0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9PTl9PRkZfSVJRMSwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9PTl9PRkZfSVJRMV9NQVNLLAorCQkub2ZmcwkJPSAxIDw8IDAsCisJfSwKKwlbTUFYODkyNV9JUlFfR1BNX01QTF0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9PTl9PRkZfSVJRMSwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9PTl9PRkZfSVJRMV9NQVNLLAorCQkub2ZmcwkJPSAxIDw8IDEsCisJfSwKKwlbTUFYODkyNV9JUlFfR1BNX1NXXzNTRUNdID0geworCQkucmVnCQk9IE1BWDg5MjVfT05fT0ZGX0lSUTEsCisJCS5tYXNrX3JlZwk9IE1BWDg5MjVfT05fT0ZGX0lSUTFfTUFTSywKKwkJLm9mZnMJCT0gMSA8PCAyLAorCX0sCisJW01BWDg5MjVfSVJRX0dQTV9FWFRPTl9GXSA9IHsKKwkJLnJlZwkJPSBNQVg4OTI1X09OX09GRl9JUlExLAorCQkubWFza19yZWcJPSBNQVg4OTI1X09OX09GRl9JUlExX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgMywKKwl9LAorCVtNQVg4OTI1X0lSUV9HUE1fRVhUT05fUl0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9PTl9PRkZfSVJRMSwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9PTl9PRkZfSVJRMV9NQVNLLAorCQkub2ZmcwkJPSAxIDw8IDQsCisJfSwKKwlbTUFYODkyNV9JUlFfR1BNX1NXXzFTRUNdID0geworCQkucmVnCQk9IE1BWDg5MjVfT05fT0ZGX0lSUTEsCisJCS5tYXNrX3JlZwk9IE1BWDg5MjVfT05fT0ZGX0lSUTFfTUFTSywKKwkJLm9mZnMJCT0gMSA8PCA1LAorCX0sCisJW01BWDg5MjVfSVJRX0dQTV9TV19GXSA9IHsKKwkJLnJlZwkJPSBNQVg4OTI1X09OX09GRl9JUlExLAorCQkubWFza19yZWcJPSBNQVg4OTI1X09OX09GRl9JUlExX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgNiwKKwl9LAorCVtNQVg4OTI1X0lSUV9HUE1fU1dfUl0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9PTl9PRkZfSVJRMSwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9PTl9PRkZfSVJRMV9NQVNLLAorCQkub2ZmcwkJPSAxIDw8IDcsCisJfSwKKwlbTUFYODkyNV9JUlFfR1BNX1NZU0NLRU5fRl0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9PTl9PRkZfSVJRMiwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9PTl9PRkZfSVJRMl9NQVNLLAorCQkub2ZmcwkJPSAxIDw8IDAsCisJfSwKKwlbTUFYODkyNV9JUlFfR1BNX1NZU0NLRU5fUl0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9PTl9PRkZfSVJRMiwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9PTl9PRkZfSVJRMl9NQVNLLAorCQkub2ZmcwkJPSAxIDw8IDEsCisJfSwKKwlbTUFYODkyNV9JUlFfUlRDX0FMQVJNMV0gPSB7CisJCS5yZWcJCT0gTUFYODkyNV9SVENfSVJRLAorCQkubWFza19yZWcJPSBNQVg4OTI1X1JUQ19JUlFfTUFTSywKKwkJLm9mZnMJCT0gMSA8PCAyLAorCQkuZmxhZ3MJCT0gRkxBR1NfUlRDLAorCX0sCisJW01BWDg5MjVfSVJRX1JUQ19BTEFSTTBdID0geworCQkucmVnCQk9IE1BWDg5MjVfUlRDX0lSUSwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9SVENfSVJRX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgMywKKwkJLmZsYWdzCQk9IEZMQUdTX1JUQywKKwl9LAorCVtNQVg4OTI1X0lSUV9UU0NfU1RJQ0tdID0geworCQkucmVnCQk9IE1BWDg5MjVfVFNDX0lSUSwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9UU0NfSVJRX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgMCwKKwkJLmZsYWdzCQk9IEZMQUdTX0FEQywKKwkJLnRzY19pcnEJPSAxLAorCX0sCisJW01BWDg5MjVfSVJRX1RTQ19OU1RJQ0tdID0geworCQkucmVnCQk9IE1BWDg5MjVfVFNDX0lSUSwKKwkJLm1hc2tfcmVnCT0gTUFYODkyNV9UU0NfSVJRX01BU0ssCisJCS5vZmZzCQk9IDEgPDwgMSwKKwkJLmZsYWdzCQk9IEZMQUdTX0FEQywKKwkJLnRzY19pcnEJPSAxLAorCX0sCit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBtYXg4OTI1X2lycV9kYXRhICppcnFfdG9fbWF4ODkyNShzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwLAorCQkJCQkJICAgICAgaW50IGlycSkKK3sKKwlyZXR1cm4gJm1heDg5MjVfaXJxc1tpcnEgLSBjaGlwLT5pcnFfYmFzZV07Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtYXg4OTI1X2lycShpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBkYXRhOworCXN0cnVjdCBtYXg4OTI1X2lycV9kYXRhICppcnFfZGF0YTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjOworCWludCByZWFkX3JlZyA9IC0xLCB2YWx1ZSA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtYXg4OTI1X2lycXMpOyBpKyspIHsKKwkJaXJxX2RhdGEgPSAmbWF4ODkyNV9pcnFzW2ldOworCQkvKiBUU0MgSVJRIHNob3VsZCBiZSBzZXJ2aWNlZCBpbiBtYXg4OTI1X3RzY19pcnEoKSAqLworCQlpZiAoaXJxX2RhdGEtPnRzY19pcnEpCisJCQljb250aW51ZTsKKwkJaWYgKGlycV9kYXRhLT5mbGFncyA9PSBGTEFHU19SVEMpCisJCQlpMmMgPSBjaGlwLT5ydGM7CisJCWVsc2UgaWYgKGlycV9kYXRhLT5mbGFncyA9PSBGTEFHU19BREMpCisJCQlpMmMgPSBjaGlwLT5hZGM7CisJCWVsc2UKKwkJCWkyYyA9IGNoaXAtPmkyYzsKKwkJaWYgKHJlYWRfcmVnICE9IGlycV9kYXRhLT5yZWcpIHsKKwkJCXJlYWRfcmVnID0gaXJxX2RhdGEtPnJlZzsKKwkJCXZhbHVlID0gbWF4ODkyNV9yZWdfcmVhZChpMmMsIGlycV9kYXRhLT5yZWcpOworCQl9CisJCWlmICh2YWx1ZSAmIGlycV9kYXRhLT5lbmFibGUpCisJCQloYW5kbGVfbmVzdGVkX2lycShjaGlwLT5pcnFfYmFzZSArIGkpOworCX0KKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBtYXg4OTI1X3RzY19pcnEoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwID0gZGF0YTsKKwlzdHJ1Y3QgbWF4ODkyNV9pcnFfZGF0YSAqaXJxX2RhdGE7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYzsKKwlpbnQgcmVhZF9yZWcgPSAtMSwgdmFsdWUgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWF4ODkyNV9pcnFzKTsgaSsrKSB7CisJCWlycV9kYXRhID0gJm1heDg5MjVfaXJxc1tpXTsKKwkJLyogbm9uIFRTQyBJUlEgc2hvdWxkIGJlIHNlcnZpY2VkIGluIG1heDg5MjVfaXJxKCkgKi8KKwkJaWYgKCFpcnFfZGF0YS0+dHNjX2lycSkKKwkJCWNvbnRpbnVlOworCQlpZiAoaXJxX2RhdGEtPmZsYWdzID09IEZMQUdTX1JUQykKKwkJCWkyYyA9IGNoaXAtPnJ0YzsKKwkJZWxzZSBpZiAoaXJxX2RhdGEtPmZsYWdzID09IEZMQUdTX0FEQykKKwkJCWkyYyA9IGNoaXAtPmFkYzsKKwkJZWxzZQorCQkJaTJjID0gY2hpcC0+aTJjOworCQlpZiAocmVhZF9yZWcgIT0gaXJxX2RhdGEtPnJlZykgeworCQkJcmVhZF9yZWcgPSBpcnFfZGF0YS0+cmVnOworCQkJdmFsdWUgPSBtYXg4OTI1X3JlZ19yZWFkKGkyYywgaXJxX2RhdGEtPnJlZyk7CisJCX0KKwkJaWYgKHZhbHVlICYgaXJxX2RhdGEtPmVuYWJsZSkKKwkJCWhhbmRsZV9uZXN0ZWRfaXJxKGNoaXAtPmlycV9iYXNlICsgaSk7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgbWF4ODkyNV9pcnFfbG9jayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCisJbXV0ZXhfbG9jaygmY2hpcC0+aXJxX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBtYXg4OTI1X2lycV9zeW5jX3VubG9jayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCBtYXg4OTI1X2lycV9kYXRhICppcnFfZGF0YTsKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBjYWNoZV9jaGdbMl0gPSB7MHhmZiwgMHhmZn07CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgY2FjaGVfb25bMl0gPSB7MHhmZiwgMHhmZn07CisJc3RhdGljIHVuc2lnbmVkIGNoYXIgY2FjaGVfcnRjID0gMHhmZiwgY2FjaGVfdHNjID0gMHhmZjsKKwl1bnNpZ25lZCBjaGFyIGlycV9jaGdbMl0sIGlycV9vblsyXTsKKwl1bnNpZ25lZCBjaGFyIGlycV9ydGMsIGlycV90c2M7CisJaW50IGk7CisKKwkvKiBMb2FkIGNhY2hlZCB2YWx1ZS4gSW4gaW5pdGlhbCwgYWxsIElSUXMgYXJlIG1hc2tlZCAqLworCWlycV9jaGdbMF0gPSBjYWNoZV9jaGdbMF07CisJaXJxX2NoZ1sxXSA9IGNhY2hlX2NoZ1sxXTsKKwlpcnFfb25bMF0gPSBjYWNoZV9vblswXTsKKwlpcnFfb25bMV0gPSBjYWNoZV9vblsxXTsKKwlpcnFfcnRjID0gY2FjaGVfcnRjOworCWlycV90c2MgPSBjYWNoZV90c2M7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWF4ODkyNV9pcnFzKTsgaSsrKSB7CisJCWlycV9kYXRhID0gJm1heDg5MjVfaXJxc1tpXTsKKwkJc3dpdGNoIChpcnFfZGF0YS0+bWFza19yZWcpIHsKKwkJY2FzZSBNQVg4OTI1X0NIR19JUlExX01BU0s6CisJCQlpcnFfY2hnWzBdICY9IGlycV9kYXRhLT5lbmFibGU7CisJCQlicmVhazsKKwkJY2FzZSBNQVg4OTI1X0NIR19JUlEyX01BU0s6CisJCQlpcnFfY2hnWzFdICY9IGlycV9kYXRhLT5lbmFibGU7CisJCQlicmVhazsKKwkJY2FzZSBNQVg4OTI1X09OX09GRl9JUlExX01BU0s6CisJCQlpcnFfb25bMF0gJj0gaXJxX2RhdGEtPmVuYWJsZTsKKwkJCWJyZWFrOworCQljYXNlIE1BWDg5MjVfT05fT0ZGX0lSUTJfTUFTSzoKKwkJCWlycV9vblsxXSAmPSBpcnFfZGF0YS0+ZW5hYmxlOworCQkJYnJlYWs7CisJCWNhc2UgTUFYODkyNV9SVENfSVJRX01BU0s6CisJCQlpcnFfcnRjICY9IGlycV9kYXRhLT5lbmFibGU7CisJCQlicmVhazsKKwkJY2FzZSBNQVg4OTI1X1RTQ19JUlFfTUFTSzoKKwkJCWlycV90c2MgJj0gaXJxX2RhdGEtPmVuYWJsZTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2VycihjaGlwLT5kZXYsICJ3cm9uZyBJUlFcbiIpOworCQkJYnJlYWs7CisJCX0KKwl9CisJLyogdXBkYXRlIG1hc2sgaW50byByZWdpc3RlcnMgKi8KKwlpZiAoY2FjaGVfY2hnWzBdICE9IGlycV9jaGdbMF0pIHsKKwkJY2FjaGVfY2hnWzBdID0gaXJxX2NoZ1swXTsKKwkJbWF4ODkyNV9yZWdfd3JpdGUoY2hpcC0+aTJjLCBNQVg4OTI1X0NIR19JUlExX01BU0ssCisJCQlpcnFfY2hnWzBdKTsKKwl9CisJaWYgKGNhY2hlX2NoZ1sxXSAhPSBpcnFfY2hnWzFdKSB7CisJCWNhY2hlX2NoZ1sxXSA9IGlycV9jaGdbMV07CisJCW1heDg5MjVfcmVnX3dyaXRlKGNoaXAtPmkyYywgTUFYODkyNV9DSEdfSVJRMl9NQVNLLAorCQkJaXJxX2NoZ1sxXSk7CisJfQorCWlmIChjYWNoZV9vblswXSAhPSBpcnFfb25bMF0pIHsKKwkJY2FjaGVfb25bMF0gPSBpcnFfb25bMF07CisJCW1heDg5MjVfcmVnX3dyaXRlKGNoaXAtPmkyYywgTUFYODkyNV9PTl9PRkZfSVJRMV9NQVNLLAorCQkJCWlycV9vblswXSk7CisJfQorCWlmIChjYWNoZV9vblsxXSAhPSBpcnFfb25bMV0pIHsKKwkJY2FjaGVfb25bMV0gPSBpcnFfb25bMV07CisJCW1heDg5MjVfcmVnX3dyaXRlKGNoaXAtPmkyYywgTUFYODkyNV9PTl9PRkZfSVJRMl9NQVNLLAorCQkJCWlycV9vblsxXSk7CisJfQorCWlmIChjYWNoZV9ydGMgIT0gaXJxX3J0YykgeworCQljYWNoZV9ydGMgPSBpcnFfcnRjOworCQltYXg4OTI1X3JlZ193cml0ZShjaGlwLT5ydGMsIE1BWDg5MjVfUlRDX0lSUV9NQVNLLCBpcnFfcnRjKTsKKwl9CisJaWYgKGNhY2hlX3RzYyAhPSBpcnFfdHNjKSB7CisJCWNhY2hlX3RzYyA9IGlycV90c2M7CisJCW1heDg5MjVfcmVnX3dyaXRlKGNoaXAtPmFkYywgTUFYODkyNV9UU0NfSVJRX01BU0ssIGlycV90c2MpOworCX0KKworCW11dGV4X3VubG9jaygmY2hpcC0+aXJxX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBtYXg4OTI1X2lycV9lbmFibGUodW5zaWduZWQgaW50IGlycSkKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwltYXg4OTI1X2lycXNbaXJxIC0gY2hpcC0+aXJxX2Jhc2VdLmVuYWJsZQorCQk9IG1heDg5MjVfaXJxc1tpcnEgLSBjaGlwLT5pcnFfYmFzZV0ub2ZmczsKK30KKworc3RhdGljIHZvaWQgbWF4ODkyNV9pcnFfZGlzYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCW1heDg5MjVfaXJxc1tpcnEgLSBjaGlwLT5pcnFfYmFzZV0uZW5hYmxlID0gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtYXg4OTI1X2lycV9jaGlwID0geworCS5uYW1lCQk9ICJtYXg4OTI1IiwKKwkuYnVzX2xvY2sJPSBtYXg4OTI1X2lycV9sb2NrLAorCS5idXNfc3luY191bmxvY2sgPSBtYXg4OTI1X2lycV9zeW5jX3VubG9jaywKKwkuZW5hYmxlCQk9IG1heDg5MjVfaXJxX2VuYWJsZSwKKwkuZGlzYWJsZQk9IG1heDg5MjVfaXJxX2Rpc2FibGUsCit9OworCitzdGF0aWMgaW50IG1heDg5MjVfaXJxX2luaXQoc3RydWN0IG1heDg5MjVfY2hpcCAqY2hpcCwgaW50IGlycSwKKwkJCSAgICBzdHJ1Y3QgbWF4ODkyNV9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gSVJRRl9UUklHR0VSX0ZBTExJTkcgfCBJUlFGX09ORVNIT1Q7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOworCWludCBpLCByZXQ7CisJaW50IF9faXJxOworCisJaWYgKCFwZGF0YSB8fCAhcGRhdGEtPmlycV9iYXNlKSB7CisJCWRldl93YXJuKGNoaXAtPmRldiwgIk5vIGludGVycnVwdCBzdXBwb3J0IG9uIElSUSBiYXNlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCS8qIGNsZWFyIGFsbCBpbnRlcnJ1cHRzICovCisJbWF4ODkyNV9yZWdfcmVhZChjaGlwLT5pMmMsIE1BWDg5MjVfQ0hHX0lSUTEpOworCW1heDg5MjVfcmVnX3JlYWQoY2hpcC0+aTJjLCBNQVg4OTI1X0NIR19JUlEyKTsKKwltYXg4OTI1X3JlZ19yZWFkKGNoaXAtPmkyYywgTUFYODkyNV9PTl9PRkZfSVJRMSk7CisJbWF4ODkyNV9yZWdfcmVhZChjaGlwLT5pMmMsIE1BWDg5MjVfT05fT0ZGX0lSUTIpOworCW1heDg5MjVfcmVnX3JlYWQoY2hpcC0+cnRjLCBNQVg4OTI1X1JUQ19JUlEpOworCW1heDg5MjVfcmVnX3JlYWQoY2hpcC0+YWRjLCBNQVg4OTI1X1RTQ19JUlEpOworCS8qIG1hc2sgYWxsIGludGVycnVwdHMgKi8KKwltYXg4OTI1X3JlZ193cml0ZShjaGlwLT5ydGMsIE1BWDg5MjVfQUxBUk0wX0NOVEwsIDApOworCW1heDg5MjVfcmVnX3dyaXRlKGNoaXAtPnJ0YywgTUFYODkyNV9BTEFSTTFfQ05UTCwgMCk7CisJbWF4ODkyNV9yZWdfd3JpdGUoY2hpcC0+aTJjLCBNQVg4OTI1X0NIR19JUlExX01BU0ssIDB4ZmYpOworCW1heDg5MjVfcmVnX3dyaXRlKGNoaXAtPmkyYywgTUFYODkyNV9DSEdfSVJRMl9NQVNLLCAweGZmKTsKKwltYXg4OTI1X3JlZ193cml0ZShjaGlwLT5pMmMsIE1BWDg5MjVfT05fT0ZGX0lSUTFfTUFTSywgMHhmZik7CisJbWF4ODkyNV9yZWdfd3JpdGUoY2hpcC0+aTJjLCBNQVg4OTI1X09OX09GRl9JUlEyX01BU0ssIDB4ZmYpOworCW1heDg5MjVfcmVnX3dyaXRlKGNoaXAtPnJ0YywgTUFYODkyNV9SVENfSVJRX01BU0ssIDB4ZmYpOworCW1heDg5MjVfcmVnX3dyaXRlKGNoaXAtPmFkYywgTUFYODkyNV9UU0NfSVJRX01BU0ssIDB4ZmYpOworCisJbXV0ZXhfaW5pdCgmY2hpcC0+aXJxX2xvY2spOworCWNoaXAtPmNvcmVfaXJxID0gaXJxOworCWNoaXAtPmlycV9iYXNlID0gcGRhdGEtPmlycV9iYXNlOworCWRlc2MgPSBpcnFfdG9fZGVzYyhjaGlwLT5jb3JlX2lycSk7CisKKwkvKiByZWdpc3RlciB3aXRoIGdlbmlycSAqLworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1heDg5MjVfaXJxcyk7IGkrKykgeworCQlfX2lycSA9IGkgKyBjaGlwLT5pcnFfYmFzZTsKKwkJc2V0X2lycV9jaGlwX2RhdGEoX19pcnEsIGNoaXApOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoX19pcnEsICZtYXg4OTI1X2lycV9jaGlwLAorCQkJCQkgaGFuZGxlX2VkZ2VfaXJxKTsKKwkJc2V0X2lycV9uZXN0ZWRfdGhyZWFkKF9faXJxLCAxKTsKKyNpZmRlZiBDT05GSUdfQVJNCisJCXNldF9pcnFfZmxhZ3MoX19pcnEsIElSUUZfVkFMSUQpOworI2Vsc2UKKwkJc2V0X2lycV9ub3Byb2JlKF9faXJxKTsKKyNlbmRpZgorCX0KKwlpZiAoIWlycSkgeworCQlkZXZfd2FybihjaGlwLT5kZXYsICJObyBpbnRlcnJ1cHQgc3VwcG9ydCBvbiBjb3JlIElSUVxuIik7CisJCWdvdG8gdHNjX2lycTsKKwl9CisKKwlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpcnEsIE5VTEwsIG1heDg5MjVfaXJxLCBmbGFncywKKwkJCQkgICAibWF4ODkyNSIsIGNoaXApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBjb3JlIElSUTogJWRcbiIsIHJldCk7CisJCWNoaXAtPmNvcmVfaXJxID0gMDsKKwl9Cit0c2NfaXJxOgorCWlmICghcGRhdGEtPnRzY19pcnEpIHsKKwkJZGV2X3dhcm4oY2hpcC0+ZGV2LCAiTm8gaW50ZXJydXB0IHN1cHBvcnQgb24gVFNDIElSUVxuIik7CisJCXJldHVybiAwOworCX0KKwljaGlwLT50c2NfaXJxID0gcGRhdGEtPnRzY19pcnE7CisKKwlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShjaGlwLT50c2NfaXJxLCBOVUxMLCBtYXg4OTI1X3RzY19pcnEsCisJCQkJICAgZmxhZ3MsICJtYXg4OTI1LXRzYyIsIGNoaXApOworCWlmIChyZXQpIHsKKwkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gcmVxdWVzdCBUU0MgSVJROiAlZFxuIiwgcmV0KTsKKwkJY2hpcC0+dHNjX2lycSA9IDA7CisJfQorCXJldHVybiAwOworfQorCitpbnQgX19kZXZpbml0IG1heDg5MjVfZGV2aWNlX2luaXQoc3RydWN0IG1heDg5MjVfY2hpcCAqY2hpcCwKKwkJCQkgIHN0cnVjdCBtYXg4OTI1X3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCWludCByZXQ7CisKKwltYXg4OTI1X2lycV9pbml0KGNoaXAsIGNoaXAtPmkyYy0+aXJxLCBwZGF0YSk7CisKKwlpZiAocGRhdGEgJiYgKHBkYXRhLT5wb3dlciB8fCBwZGF0YS0+dG91Y2gpKSB7CisJCS8qIGVuYWJsZSBBREMgdG8gY29udHJvbCBpbnRlcm5hbCByZWZlcmVuY2UgKi8KKwkJbWF4ODkyNV9zZXRfYml0cyhjaGlwLT5pMmMsIE1BWDg5MjVfUkVTRVRfQ05GRywgMSwgMSk7CisJCS8qIGVuYWJsZSBpbnRlcm5hbCByZWZlcmVuY2UgZm9yIEFEQyAqLworCQltYXg4OTI1X3NldF9iaXRzKGNoaXAtPmFkYywgTUFYODkyNV9UU0NfQ05GRzEsIDMsIDIpOworCQkvKiBjaGVjayBmb3IgaW50ZXJuYWwgcmVmZXJlbmNlIElSUSAqLworCQlkbyB7CisJCQlyZXQgPSBtYXg4OTI1X3JlZ19yZWFkKGNoaXAtPmFkYywgTUFYODkyNV9UU0NfSVJRKTsKKwkJfSB3aGlsZSAocmV0ICYgTUFYODkyNV9OUkVGX09LKTsKKwkJLyogZW5hYWJsZSBBREMgc2NoZWR1bGVyLCBpbnRlcnZhbCBpcyAxIHNlY29uZCAqLworCQltYXg4OTI1X3NldF9iaXRzKGNoaXAtPmFkYywgTUFYODkyNV9BRENfU0NIRUQsIDMsIDIpOworCX0KKworCS8qIGVuYWJsZSBNb21lbnRhcnkgUG93ZXIgTG9zcyAqLworCW1heDg5MjVfc2V0X2JpdHMoY2hpcC0+cnRjLCBNQVg4OTI1X01QTF9DTlRMLCAxIDw8IDQsIDEgPDwgNCk7CisKKwlyZXQgPSBtZmRfYWRkX2RldmljZXMoY2hpcC0+ZGV2LCAwLCAmcnRjX2RldnNbMF0sCisJCQkgICAgICBBUlJBWV9TSVpFKHJ0Y19kZXZzKSwKKwkJCSAgICAgICZydGNfcmVzb3VyY2VzWzBdLCAwKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGNoaXAtPmRldiwgIkZhaWxlZCB0byBhZGQgcnRjIHN1YmRldlxuIik7CisJCWdvdG8gb3V0OworCX0KKwlpZiAocGRhdGEgJiYgcGRhdGEtPnJlZ3VsYXRvclswXSkgeworCQlyZXQgPSBtZmRfYWRkX2RldmljZXMoY2hpcC0+ZGV2LCAwLCAmcmVndWxhdG9yX2RldnNbMF0sCisJCQkJICAgICAgQVJSQVlfU0laRShyZWd1bGF0b3JfZGV2cyksCisJCQkJICAgICAgJnJlZ3VsYXRvcl9yZXNvdXJjZXNbMF0sIDApOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gYWRkIHJlZ3VsYXRvciBzdWJkZXZcbiIpOworCQkJZ290byBvdXRfZGV2OworCQl9CisJfQorCisJaWYgKHBkYXRhICYmIHBkYXRhLT5iYWNrbGlnaHQpIHsKKwkJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKGNoaXAtPmRldiwgMCwgJmJhY2tsaWdodF9kZXZzWzBdLAorCQkJCSAgICAgIEFSUkFZX1NJWkUoYmFja2xpZ2h0X2RldnMpLAorCQkJCSAgICAgICZiYWNrbGlnaHRfcmVzb3VyY2VzWzBdLCAwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBiYWNrbGlnaHQgc3ViZGV2XG4iKTsKKwkJCWdvdG8gb3V0X2RldjsKKwkJfQorCX0KKworCWlmIChwZGF0YSAmJiBwZGF0YS0+cG93ZXIpIHsKKwkJcmV0ID0gbWZkX2FkZF9kZXZpY2VzKGNoaXAtPmRldiwgMCwgJnBvd2VyX2RldnNbMF0sCisJCQkJCUFSUkFZX1NJWkUocG93ZXJfZGV2cyksCisJCQkJCSZwb3dlcl9zdXBwbHlfcmVzb3VyY2VzWzBdLCAwKTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIGFkZCBwb3dlciBzdXBwbHkgIgorCQkJCSJzdWJkZXZcbiIpOworCQkJZ290byBvdXRfZGV2OworCQl9CisJfQorCisJaWYgKHBkYXRhICYmIHBkYXRhLT50b3VjaCkgeworCQlyZXQgPSBtZmRfYWRkX2RldmljZXMoY2hpcC0+ZGV2LCAwLCAmdG91Y2hfZGV2c1swXSwKKwkJCQkgICAgICBBUlJBWV9TSVpFKHRvdWNoX2RldnMpLAorCQkJCSAgICAgICZ0b3VjaF9yZXNvdXJjZXNbMF0sIDApOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycihjaGlwLT5kZXYsICJGYWlsZWQgdG8gYWRkIHRvdWNoIHN1YmRldlxuIik7CisJCQlnb3RvIG91dF9kZXY7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK291dF9kZXY6CisJbWZkX3JlbW92ZV9kZXZpY2VzKGNoaXAtPmRldik7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBfX2RldmV4aXQgbWF4ODkyNV9kZXZpY2VfZXhpdChzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwKQoreworCWlmIChjaGlwLT5jb3JlX2lycSkKKwkJZnJlZV9pcnEoY2hpcC0+Y29yZV9pcnEsIGNoaXApOworCWlmIChjaGlwLT50c2NfaXJxKQorCQlmcmVlX2lycShjaGlwLT50c2NfaXJxLCBjaGlwKTsKKwltZmRfcmVtb3ZlX2RldmljZXMoY2hpcC0+ZGV2KTsKK30KKworCitNT0RVTEVfREVTQ1JJUFRJT04oIlBNSUMgRHJpdmVyIGZvciBNYXhpbSBNQVg4OTI1Iik7CitNT0RVTEVfQVVUSE9SKCJIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL21heDg5MjUtaTJjLmMgYi9kcml2ZXJzL21mZC9tYXg4OTI1LWkyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYjg4M2MKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21mZC9tYXg4OTI1LWkyYy5jCkBAIC0wLDAgKzEsMjExIEBACisvKgorICogSTJDIGRyaXZlciBmb3IgTWF4aW0gTUFYODkyNQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoJSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbWF4ODkyNS5oPgorCisjZGVmaW5lIFJUQ19JMkNfQUREUgkJMHg2OAorI2RlZmluZSBBRENfSTJDX0FERFIJCTB4NDcKKworc3RhdGljIGlubGluZSBpbnQgbWF4ODkyNV9yZWFkX2RldmljZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgIGludCByZWcsIGludCBieXRlcywgdm9pZCAqZGVzdCkKK3sKKwlpbnQgcmV0OworCisJaWYgKGJ5dGVzID4gMSkKKwkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfaTJjX2Jsb2NrX2RhdGEoaTJjLCByZWcsIGJ5dGVzLCBkZXN0KTsKKwllbHNlIHsKKwkJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGkyYywgcmVnKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQkqKHVuc2lnbmVkIGNoYXIgKilkZXN0ID0gKHVuc2lnbmVkIGNoYXIpcmV0OworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW5saW5lIGludCBtYXg4OTI1X3dyaXRlX2RldmljZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgICBpbnQgcmVnLCBpbnQgYnl0ZXMsIHZvaWQgKnNyYykKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZltieXRlcyArIDFdOworCWludCByZXQ7CisKKwlidWZbMF0gPSAodW5zaWduZWQgY2hhcilyZWc7CisJbWVtY3B5KCZidWZbMV0sIHNyYywgYnl0ZXMpOworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGkyYywgYnVmLCBieXRlcyArIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorCitpbnQgbWF4ODkyNV9yZWdfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBpbnQgcmVnKQoreworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTsKKwl1bnNpZ25lZCBjaGFyIGRhdGEgPSAwOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5pb19sb2NrKTsKKwlyZXQgPSBtYXg4OTI1X3JlYWRfZGV2aWNlKGkyYywgcmVnLCAxLCAmZGF0YSk7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pb19sb2NrKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWVsc2UKKwkJcmV0dXJuIChpbnQpZGF0YTsKK30KK0VYUE9SVF9TWU1CT0wobWF4ODkyNV9yZWdfcmVhZCk7CisKK2ludCBtYXg4OTI1X3JlZ193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBpbnQgcmVnLAorCQl1bnNpZ25lZCBjaGFyIGRhdGEpCit7CisJc3RydWN0IG1heDg5MjVfY2hpcCAqY2hpcCA9IGkyY19nZXRfY2xpZW50ZGF0YShpMmMpOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5pb19sb2NrKTsKKwlyZXQgPSBtYXg4OTI1X3dyaXRlX2RldmljZShpMmMsIHJlZywgMSwgJmRhdGEpOworCW11dGV4X3VubG9jaygmY2hpcC0+aW9fbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChtYXg4OTI1X3JlZ193cml0ZSk7CisKK2ludCBtYXg4OTI1X2J1bGtfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLCBpbnQgcmVnLAorCQlpbnQgY291bnQsIHVuc2lnbmVkIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwID0gaTJjX2dldF9jbGllbnRkYXRhKGkyYyk7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmNoaXAtPmlvX2xvY2spOworCXJldCA9IG1heDg5MjVfcmVhZF9kZXZpY2UoaTJjLCByZWcsIGNvdW50LCBidWYpOworCW11dGV4X3VubG9jaygmY2hpcC0+aW9fbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTChtYXg4OTI1X2J1bGtfcmVhZCk7CisKK2ludCBtYXg4OTI1X2J1bGtfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmkyYywgaW50IHJlZywKKwkJaW50IGNvdW50LCB1bnNpZ25lZCBjaGFyICpidWYpCit7CisJc3RydWN0IG1heDg5MjVfY2hpcCAqY2hpcCA9IGkyY19nZXRfY2xpZW50ZGF0YShpMmMpOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5pb19sb2NrKTsKKwlyZXQgPSBtYXg4OTI1X3dyaXRlX2RldmljZShpMmMsIHJlZywgY291bnQsIGJ1Zik7CisJbXV0ZXhfdW5sb2NrKCZjaGlwLT5pb19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKG1heDg5MjVfYnVsa193cml0ZSk7CisKK2ludCBtYXg4OTI1X3NldF9iaXRzKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCByZWcsCisJCXVuc2lnbmVkIGNoYXIgbWFzaywgdW5zaWduZWQgY2hhciBkYXRhKQoreworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTsKKwl1bnNpZ25lZCBjaGFyIHZhbHVlOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZjaGlwLT5pb19sb2NrKTsKKwlyZXQgPSBtYXg4OTI1X3JlYWRfZGV2aWNlKGkyYywgcmVnLCAxLCAmdmFsdWUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKwl2YWx1ZSAmPSB+bWFzazsKKwl2YWx1ZSB8PSBkYXRhOworCXJldCA9IG1heDg5MjVfd3JpdGVfZGV2aWNlKGkyYywgcmVnLCAxLCAmdmFsdWUpOworb3V0OgorCW11dGV4X3VubG9jaygmY2hpcC0+aW9fbG9jayk7CisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0wobWF4ODkyNV9zZXRfYml0cyk7CisKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIG1heDg5MjVfaWRfdGFibGVbXSA9IHsKKwl7ICJtYXg4OTI1IiwgMCB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbWF4ODkyNV9pZF90YWJsZSk7CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1heDg5MjVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IG1heDg5MjVfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXN0YXRpYyBzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwOworCisJaWYgKCFwZGF0YSkgeworCQlwcl9pbmZvKCIlczogcGxhdGZvcm0gZGF0YSBpcyBtaXNzaW5nXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNoaXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWF4ODkyNV9jaGlwKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNoaXAgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJY2hpcC0+aTJjID0gY2xpZW50OworCWNoaXAtPmRldiA9ICZjbGllbnQtPmRldjsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBjaGlwKTsKKwlkZXZfc2V0X2RydmRhdGEoY2hpcC0+ZGV2LCBjaGlwKTsKKwltdXRleF9pbml0KCZjaGlwLT5pb19sb2NrKTsKKworCWNoaXAtPnJ0YyA9IGkyY19uZXdfZHVtbXkoY2hpcC0+aTJjLT5hZGFwdGVyLCBSVENfSTJDX0FERFIpOworCWkyY19zZXRfY2xpZW50ZGF0YShjaGlwLT5ydGMsIGNoaXApOworCisJY2hpcC0+YWRjID0gaTJjX25ld19kdW1teShjaGlwLT5pMmMtPmFkYXB0ZXIsIEFEQ19JMkNfQUREUik7CisJaTJjX3NldF9jbGllbnRkYXRhKGNoaXAtPmFkYywgY2hpcCk7CisKKwltYXg4OTI1X2RldmljZV9pbml0KGNoaXAsIHBkYXRhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBtYXg4OTI1X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCW1heDg5MjVfZGV2aWNlX2V4aXQoY2hpcCk7CisJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNoaXAtPmFkYyk7CisJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNoaXAtPnJ0Yyk7CisJaTJjX3NldF9jbGllbnRkYXRhKGNoaXAtPmFkYywgTlVMTCk7CisJaTJjX3NldF9jbGllbnRkYXRhKGNoaXAtPnJ0YywgTlVMTCk7CisJaTJjX3NldF9jbGllbnRkYXRhKGNoaXAtPmkyYywgTlVMTCk7CisJa2ZyZWUoY2hpcCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXg4OTI1X2RyaXZlciA9IHsKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJtYXg4OTI1IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gbWF4ODkyNV9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1heDg5MjVfcmVtb3ZlKSwKKwkuaWRfdGFibGUJPSBtYXg4OTI1X2lkX3RhYmxlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWF4ODkyNV9pMmNfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSBpMmNfYWRkX2RyaXZlcigmbWF4ODkyNV9kcml2ZXIpOworCWlmIChyZXQgIT0gMCkKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgTUFYODkyNSBJMkMgZHJpdmVyOiAlZFxuIiwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorc3Vic3lzX2luaXRjYWxsKG1heDg5MjVfaTJjX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbWF4ODkyNV9pMmNfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZtYXg4OTI1X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChtYXg4OTI1X2kyY19leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJJMkMgRHJpdmVyIGZvciBNYXhpbSA4OTI1Iik7CitNT0RVTEVfQVVUSE9SKCJIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC9tYzEzNzgzLWNvcmUuYyBiL2RyaXZlcnMvbWZkL21jMTM3ODMtY29yZS5jCmluZGV4IDczNWM4YTQuLjYyYTg0N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL21jMTM3ODMtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL21jMTM3ODMtY29yZS5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wobWMxMzc4M19yZWdfcm13KTsKIAotaW50IG1jMTM3ODNfbWFzayhzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSkKK2ludCBtYzEzNzgzX2lycV9tYXNrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxKQogewogCWludCByZXQ7CiAJdW5zaWduZWQgaW50IG9mZm1hc2sgPSBpcnEgPCAyNCA/IE1DMTM3ODNfSVJRTUFTSzAgOiBNQzEzNzgzX0lSUU1BU0sxOwpAQCAtMjQ1LDkgKzI0NSw5IEBACiAKIAlyZXR1cm4gbWMxMzc4M19yZWdfd3JpdGUobWMxMzc4Mywgb2ZmbWFzaywgbWFzayB8IGlycWJpdCk7CiB9Ci1FWFBPUlRfU1lNQk9MKG1jMTM3ODNfbWFzayk7CitFWFBPUlRfU1lNQk9MKG1jMTM3ODNfaXJxX21hc2spOwogCi1pbnQgbWMxMzc4M191bm1hc2soc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIGludCBpcnEpCitpbnQgbWMxMzc4M19pcnFfdW5tYXNrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxKQogewogCWludCByZXQ7CiAJdW5zaWduZWQgaW50IG9mZm1hc2sgPSBpcnEgPCAyNCA/IE1DMTM3ODNfSVJRTUFTSzAgOiBNQzEzNzgzX0lSUU1BU0sxOwpAQCAtMjY3LDcgKzI2Nyw1MyBAQAogCiAJcmV0dXJuIG1jMTM3ODNfcmVnX3dyaXRlKG1jMTM3ODMsIG9mZm1hc2ssIG1hc2sgJiB+aXJxYml0KTsKIH0KLUVYUE9SVF9TWU1CT0wobWMxMzc4M191bm1hc2spOworRVhQT1JUX1NZTUJPTChtYzEzNzgzX2lycV91bm1hc2spOworCitpbnQgbWMxMzc4M19pcnFfc3RhdHVzKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxLAorCQlpbnQgKmVuYWJsZWQsIGludCAqcGVuZGluZykKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGludCBvZmZtYXNrID0gaXJxIDwgMjQgPyBNQzEzNzgzX0lSUU1BU0swIDogTUMxMzc4M19JUlFNQVNLMTsKKwl1bnNpZ25lZCBpbnQgb2Zmc3RhdCA9IGlycSA8IDI0ID8gTUMxMzc4M19JUlFTVEFUMCA6IE1DMTM3ODNfSVJRU1RBVDE7CisJdTMyIGlycWJpdCA9IDEgPDwgKGlycSA8IDI0ID8gaXJxIDogaXJxIC0gMjQpOworCisJaWYgKGlycSA8IDAgfHwgaXJxID49IE1DMTM3ODNfTlVNX0lSUSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoZW5hYmxlZCkgeworCQl1MzIgbWFzazsKKworCQlyZXQgPSBtYzEzNzgzX3JlZ19yZWFkKG1jMTM3ODMsIG9mZm1hc2ssICZtYXNrKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisKKwkJKmVuYWJsZWQgPSBtYXNrICYgaXJxYml0OworCX0KKworCWlmIChwZW5kaW5nKSB7CisJCXUzMiBzdGF0OworCisJCXJldCA9IG1jMTM3ODNfcmVnX3JlYWQobWMxMzc4Mywgb2Zmc3RhdCwgJnN0YXQpOworCQlpZiAocmV0KQorCQkJcmV0dXJuIHJldDsKKworCQkqcGVuZGluZyA9IHN0YXQgJiBpcnFiaXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKG1jMTM3ODNfaXJxX3N0YXR1cyk7CisKK2ludCBtYzEzNzgzX2lycV9hY2soc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IG9mZnN0YXQgPSBpcnEgPCAyNCA/IE1DMTM3ODNfSVJRU1RBVDAgOiBNQzEzNzgzX0lSUVNUQVQxOworCXVuc2lnbmVkIGludCB2YWwgPSAxIDw8IChpcnEgPCAyNCA/IGlycSA6IGlycSAtIDI0KTsKKworCUJVR19PTihpcnEgPCAwIHx8IGlycSA+PSBNQzEzNzgzX05VTV9JUlEpOworCisJcmV0dXJuIG1jMTM3ODNfcmVnX3dyaXRlKG1jMTM3ODMsIG9mZnN0YXQsIHZhbCk7Cit9CitFWFBPUlRfU1lNQk9MKG1jMTM3ODNfaXJxX2Fjayk7CiAKIGludCBtYzEzNzgzX2lycV9yZXF1ZXN0X25vdW5tYXNrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxLAogCQlpcnFfaGFuZGxlcl90IGhhbmRsZXIsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRldikKQEAgLTI5Nyw3ICszNDMsNyBAQAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBtYzEzNzgzX3VubWFzayhtYzEzNzgzLCBpcnEpOworCXJldCA9IG1jMTM3ODNfaXJxX3VubWFzayhtYzEzNzgzLCBpcnEpOwogCWlmIChyZXQpIHsKIAkJbWMxMzc4My0+aXJxaGFuZGxlcltpcnFdID0gTlVMTDsKIAkJbWMxMzc4My0+aXJxZGF0YVtpcnFdID0gTlVMTDsKQEAgLTMxNyw3ICszNjMsNyBAQAogCQkJbWMxMzc4My0+aXJxZGF0YVtpcnFdICE9IGRldikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXQgPSBtYzEzNzgzX21hc2sobWMxMzc4MywgaXJxKTsKKwlyZXQgPSBtYzEzNzgzX2lycV9tYXNrKG1jMTM3ODMsIGlycSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMzMzLDE3ICszNzksNiBAQAogCXJldHVybiBtYzEzNzgzLT5pcnFoYW5kbGVyW2lycV0oaXJxLCBtYzEzNzgzLT5pcnFkYXRhW2lycV0pOwogfQogCi1pbnQgbWMxMzc4M19hY2tpcnEoc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIGludCBpcnEpCi17Ci0JdW5zaWduZWQgaW50IG9mZnN0YXQgPSBpcnEgPCAyNCA/IE1DMTM3ODNfSVJRU1RBVDAgOiBNQzEzNzgzX0lSUVNUQVQxOwotCXVuc2lnbmVkIGludCB2YWwgPSAxIDw8IChpcnEgPCAyNCA/IGlycSA6IGlycSAtIDI0KTsKLQotCUJVR19PTihpcnEgPCAwIHx8IGlycSA+PSBNQzEzNzgzX05VTV9JUlEpOwotCi0JcmV0dXJuIG1jMTM3ODNfcmVnX3dyaXRlKG1jMTM3ODMsIG9mZnN0YXQsIHZhbCk7Ci19Ci1FWFBPUlRfU1lNQk9MKG1jMTM3ODNfYWNraXJxKTsKLQogLyoKICAqIHJldHVybnM6IG51bWJlciBvZiBoYW5kbGVkIGlycXMgb3IgbmVnYXRpdmUgZXJyb3IKICAqIGxvY2tpbmc6IGhvbGRzIG1jMTM3ODMtPmxvY2sKQEAgLTQyMiw3ICs0NTcsNyBAQAogewogCXN0cnVjdCBtYzEzNzgzX2FkY2RvbmVfZGF0YSAqYWRjZG9uZV9kYXRhID0gZGF0YTsKIAotCW1jMTM3ODNfYWNraXJxKGFkY2RvbmVfZGF0YS0+bWMxMzc4MywgaXJxKTsKKwltYzEzNzgzX2lycV9hY2soYWRjZG9uZV9kYXRhLT5tYzEzNzgzLCBpcnEpOwogCiAJY29tcGxldGVfYWxsKCZhZGNkb25lX2RhdGEtPmRvbmUpOwogCkBAIC00ODYsNyArNTIxLDcgQEAKIAlkZXZfZGJnKCZtYzEzNzgzLT5zcGlkZXYtPmRldiwgIiVzOiByZXF1ZXN0IGlycVxuIiwgX19mdW5jX18pOwogCW1jMTM3ODNfaXJxX3JlcXVlc3QobWMxMzc4MywgTUMxMzc4M19JUlFfQURDRE9ORSwKIAkJCW1jMTM3ODNfaGFuZGxlcl9hZGNkb25lLCBfX2Z1bmNfXywgJmFkY2RvbmVfZGF0YSk7Ci0JbWMxMzc4M19hY2tpcnEobWMxMzc4MywgTUMxMzc4M19JUlFfQURDRE9ORSk7CisJbWMxMzc4M19pcnFfYWNrKG1jMTM3ODMsIE1DMTM3ODNfSVJRX0FEQ0RPTkUpOwogCiAJbWMxMzc4M19yZWdfd3JpdGUobWMxMzc4MywgTUMxMzc4M19SRUdfQURDXzAsIGFkYzApOwogCW1jMTM3ODNfcmVnX3dyaXRlKG1jMTM3ODMsIE1DMTM3ODNfUkVHX0FEQ18xLCBhZGMxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL21mZC1jb3JlLmMgYi9kcml2ZXJzL21mZC9tZmQtY29yZS5jCmluZGV4IGFlMTVlNDkuLmFhMTdmNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL21mZC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvbWZkLWNvcmUuYwpAQCAtMTMsNiArMTMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CiAKIHN0YXRpYyBpbnQgbWZkX2FkZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqcGFyZW50LCBpbnQgaWQsCkBAIC02Miw2ICs2MywxMCBAQAogCQkJcmVzW3JdLnN0YXJ0ID0gY2VsbC0+cmVzb3VyY2VzW3JdLnN0YXJ0OwogCQkJcmVzW3JdLmVuZCAgID0gY2VsbC0+cmVzb3VyY2VzW3JdLmVuZDsKIAkJfQorCisJCXJldCA9IGFjcGlfY2hlY2tfcmVzb3VyY2VfY29uZmxpY3QocmVzKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZmFpbF9yZXM7CiAJfQogCiAJcGxhdGZvcm1fZGV2aWNlX2FkZF9yZXNvdXJjZXMocGRldiwgcmVzLCBjZWxsLT5udW1fcmVzb3VyY2VzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3NoX21vYmlsZV9zZGhpLmMgYi9kcml2ZXJzL21mZC9zaF9tb2JpbGVfc2RoaS5jCmluZGV4IDAzZWZhZTguLjQ2OGZkMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3NoX21vYmlsZV9zZGhpLmMKKysrIGIvZHJpdmVycy9tZmQvc2hfbW9iaWxlX3NkaGkuYwpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotCisjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC90bWlvLmg+CiAjaW5jbHVkZSA8bGludXgvbWZkL3NoX21vYmlsZV9zZGhpLmg+CkBAIC05NSw5ICs5NSw5IEBACiAKIAljbGtfZW5hYmxlKHByaXYtPmNsayk7CiAKLQkvKiBGSVhNRTogc2lsbHkgY29uc3QgdW5zaWduZWQgaW50IGhjbGsgKi8KLQkqKHVuc2lnbmVkIGludCAqKSZwcml2LT5tbWNfZGF0YS5oY2xrID0gY2xrX2dldF9yYXRlKHByaXYtPmNsayk7CisJcHJpdi0+bW1jX2RhdGEuaGNsayA9IGNsa19nZXRfcmF0ZShwcml2LT5jbGspOwogCXByaXYtPm1tY19kYXRhLnNldF9wd3IgPSBzaF9tb2JpbGVfc2RoaV9zZXRfcHdyOworCXByaXYtPm1tY19kYXRhLmNhcGFiaWxpdGllcyA9IE1NQ19DQVBfTU1DX0hJR0hTUEVFRDsKIAogCW1lbWNweSgmcHJpdi0+Y2VsbF9tbWMsICZzaF9tb2JpbGVfc2RoaV9jZWxsLCBzaXplb2YocHJpdi0+Y2VsbF9tbWMpKTsKIAlwcml2LT5jZWxsX21tYy5kcml2ZXJfZGF0YSA9ICZwcml2LT5tbWNfZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3NtNTAxLmMgYi9kcml2ZXJzL21mZC9zbTUwMS5jCmluZGV4IDBjYzVlZWYuLmZmMDcxOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3NtNTAxLmMKKysrIGIvZHJpdmVycy9tZmQvc201MDEuYwpAQCAtNTIzLDcgKzUyMyw3IEBACiAJdW5zaWduZWQgbG9uZyBjbG9jayA9IHJlYWRsKHNtLT5yZWdzICsgU001MDFfQ1VSUkVOVF9DTE9DSyk7CiAJdW5zaWduZWQgY2hhciByZWc7CiAJdW5zaWduZWQgaW50IHBsbF9yZWcgPSAwOwotCXVuc2lnbmVkIGxvbmcgc201MDFfZnJlcTsgLyogdGhlIGFjdHVhbCBmcmVxdWVuY3kgYWNoZWl2ZWQgKi8KKwl1bnNpZ25lZCBsb25nIHNtNTAxX2ZyZXE7IC8qIHRoZSBhY3R1YWwgZnJlcXVlbmN5IGFjaGlldmVkICovCiAKIAlzdHJ1Y3Qgc201MDFfY2xvY2sgdG87CiAKQEAgLTUzMyw3ICs1MzMsNyBAQAogCiAJc3dpdGNoIChjbGtzcmMpIHsKIAljYXNlIFNNNTAxX0NMT0NLX1AyWENMSzoKLQkJLyogVGhpcyBjbG9jayBpcyBkaXZpZGVkIGluIGhhbGYgc28gdG8gYWNoaXZlIHRoZQorCQkvKiBUaGlzIGNsb2NrIGlzIGRpdmlkZWQgaW4gaGFsZiBzbyB0byBhY2hpZXZlIHRoZQogCQkgKiByZXF1ZXN0ZWQgZnJlcXVlbmN5IHRoZSB2YWx1ZSBtdXN0IGJlIG11bHRpcGxpZWQgYnkKIAkJICogMi4gVGhpcyBjbG9jayBhbHNvIGhhcyBhbiBhZGRpdGlvbmFsIHByZSBkaXZpc29yICovCiAKQEAgLTU2Miw3ICs1NjIsNyBAQAogCQlicmVhazsKIAogCWNhc2UgU001MDFfQ0xPQ0tfVjJYQ0xLOgotCQkvKiBUaGlzIGNsb2NrIGlzIGRpdmlkZWQgaW4gaGFsZiBzbyB0byBhY2hpdmUgdGhlCisJCS8qIFRoaXMgY2xvY2sgaXMgZGl2aWRlZCBpbiBoYWxmIHNvIHRvIGFjaGlldmUgdGhlCiAJCSAqIHJlcXVlc3RlZCBmcmVxdWVuY3kgdGhlIHZhbHVlIG11c3QgYmUgbXVsdGlwbGllZCBieSAyLiAqLwogCiAJCXNtNTAxX2ZyZXEgPSAoc201MDFfc2VsZWN0X2Nsb2NrKDIgKiByZXFfZnJlcSwgJnRvLCAzKSAvIDIpOwpAQCAtNjQ4LDcgKzY0OCw3IEBACiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyByZXFfZnJlcSkKIHsKIAlzdHJ1Y3Qgc201MDFfZGV2ZGF0YSAqc20gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQl1bnNpZ25lZCBsb25nIHNtNTAxX2ZyZXE7IC8qIHRoZSBmcmVxdWVuY3kgYWNoaXZlYWJsZSBieSB0aGUgNTAxICovCisJdW5zaWduZWQgbG9uZyBzbTUwMV9mcmVxOyAvKiB0aGUgZnJlcXVlbmN5IGFjaGlldmVhYmxlIGJ5IHRoZSA1MDEgKi8KIAlzdHJ1Y3Qgc201MDFfY2xvY2sgdG87CiAKIAlzd2l0Y2ggKGNsa3NyYykgewpAQCAtMTQzMCw3ICsxNDMwLDcgQEAKIAl9CiAKIAlzbS0+cmVnc19jbGFpbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihzbS0+aW9fcmVzLT5zdGFydCwKLQkJCQkJICAgIDB4MTAwLCAic201MDEiKTsKKwkJCQkJICAgIHJlc291cmNlX3NpemUoc20tPmlvX3JlcyksICJzbTUwMSIpOwogCiAJaWYgKHNtLT5yZWdzX2NsYWltID09IE5VTEwpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJjYW5ub3QgY2xhaW0gcmVnaXN0ZXJzXG4iKTsKQEAgLTE0NDAsOCArMTQ0MCw3IEBACiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIHNtKTsKIAotCXNtLT5yZWdzID0gaW9yZW1hcChzbS0+aW9fcmVzLT5zdGFydCwKLQkJCSAgIChzbS0+aW9fcmVzLT5lbmQgLSBzbS0+aW9fcmVzLT5zdGFydCkgLSAxKTsKKwlzbS0+cmVncyA9IGlvcmVtYXAoc20tPmlvX3Jlcy0+c3RhcnQsIHJlc291cmNlX3NpemUoc20tPmlvX3JlcykpOwogCiAJaWYgKHNtLT5yZWdzID09IE5VTEwpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJjYW5ub3QgcmVtYXAgcmVnaXN0ZXJzXG4iKTsKQEAgLTE2NDUsNyArMTY0NCw3IEBACiAJc20tPm1lbV9yZXMgPSAmZGV2LT5yZXNvdXJjZVswXTsKIAogCXNtLT5yZWdzX2NsYWltID0gcmVxdWVzdF9tZW1fcmVnaW9uKHNtLT5pb19yZXMtPnN0YXJ0LAotCQkJCQkgICAgMHgxMDAsICJzbTUwMSIpOworCQkJCQkgICAgcmVzb3VyY2Vfc2l6ZShzbS0+aW9fcmVzKSwgInNtNTAxIik7CiAJaWYgKHNtLT5yZWdzX2NsYWltID09IE5VTEwpIHsKIAkJZGV2X2VycigmZGV2LT5kZXYsICJjYW5ub3QgY2xhaW0gcmVnaXN0ZXJzXG4iKTsKIAkJZXJyPSAtRUJVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC90N2w2NnhiLmMgYi9kcml2ZXJzL21mZC90N2w2NnhiLmMKaW5kZXggYmNmNDY4Ny4uMjZkOTE3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdDdsNjZ4Yi5jCisrKyBiL2RyaXZlcnMvbWZkL3Q3bDY2eGIuYwpAQCAtMzYwLDcgKzM2MCw3IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfcmVxdWVzdF9zY3I7CiAKLQl0N2w2NnhiLT5zY3IgPSBpb3JlbWFwKHJzY3ItPnN0YXJ0LCByc2NyLT5lbmQgLSByc2NyLT5zdGFydCArIDEpOworCXQ3bDY2eGItPnNjciA9IGlvcmVtYXAocnNjci0+c3RhcnQsIHJlc291cmNlX3NpemUocnNjcikpOwogCWlmICghdDdsNjZ4Yi0+c2NyKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2lvcmVtYXA7CkBAIC00MDMsMTIgKzQwMywxMiBAQAogZXJyX2lvcmVtYXA6CiAJcmVsZWFzZV9yZXNvdXJjZSgmdDdsNjZ4Yi0+cnNjcik7CiBlcnJfcmVxdWVzdF9zY3I6Ci0Ja2ZyZWUodDdsNjZ4Yik7CiAJY2xrX3B1dCh0N2w2NnhiLT5jbGs0OG0pOwogZXJyX2NsazQ4bV9nZXQ6CiAJY2xrX3B1dCh0N2w2NnhiLT5jbGszMmspOwogZXJyX2NsazMya19nZXQ6CiBlcnJfbm9pcnE6CisJa2ZyZWUodDdsNjZ4Yik7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdGM2MzkzeGIuYyBiL2RyaXZlcnMvbWZkL3RjNjM5M3hiLmMKaW5kZXggNGJjNWEwOC4uYzU5ZTVjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvdGM2MzkzeGIuYworKysgYi9kcml2ZXJzL21mZC90YzYzOTN4Yi5jCkBAIC02NDcsNyArNjQ3LDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycl9yZXF1ZXN0X3NjcjsKIAotCXRjNjM5M3hiLT5zY3IgPSBpb3JlbWFwKHJzY3ItPnN0YXJ0LCByc2NyLT5lbmQgLSByc2NyLT5zdGFydCArIDEpOworCXRjNjM5M3hiLT5zY3IgPSBpb3JlbWFwKHJzY3ItPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJzY3IpKTsKIAlpZiAoIXRjNjM5M3hiLT5zY3IpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfaW9yZW1hcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3R3bC1jb3JlLmMgYi9kcml2ZXJzL21mZC90d2wtY29yZS5jCmluZGV4IDE5YTkzMGQuLjU2MmNkNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3R3bC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZmQvdHdsLWNvcmUuYwpAQCAtNTgsMTMgKzU4LDYgQEAKIAogI2RlZmluZSBEUklWRVJfTkFNRQkJCSJ0d2wiCiAKLSNpZiBkZWZpbmVkKENPTkZJR19UV0w0MDMwX0JDSV9CQVRURVJZKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfVFdMNDAzMF9CQ0lfQkFUVEVSWV9NT0RVTEUpCi0jZGVmaW5lIHR3bF9oYXNfYmNpKCkJCXRydWUKLSNlbHNlCi0jZGVmaW5lIHR3bF9oYXNfYmNpKCkJCWZhbHNlCi0jZW5kaWYKLQogI2lmIGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX1RXTDQwMzApIHx8IGRlZmluZWQoQ09ORklHX0tFWUJPQVJEX1RXTDQwMzBfTU9EVUxFKQogI2RlZmluZSB0d2xfaGFzX2tleXBhZCgpCXRydWUKICNlbHNlCkBAIC0xMzAsNyArMTIzLDcgQEAKICNkZWZpbmUgVFdMX05VTV9TTEFWRVMJCTQKIAogI2lmIGRlZmluZWQoQ09ORklHX0lOUFVUX1RXTDQwMzBfUFdSQlVUVE9OKSBcCi0JfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfVFdMNDAzMF9QV0JVVFRPTl9NT0RVTEUpCisJfHwgZGVmaW5lZChDT05GSUdfSU5QVVRfVFdMNDAzMF9QV1JCVVRUT05fTU9EVUxFKQogI2RlZmluZSB0d2xfaGFzX3B3cmJ1dHRvbigpCXRydWUKICNlbHNlCiAjZGVmaW5lIHR3bF9oYXNfcHdyYnV0dG9uKCkJZmFsc2UKQEAgLTIwNSw2ICsxOTgsNyBAQAogLyogc3ViY2hpcC9zbGF2ZSAzIDB4NEIgLSBBVURJTyAqLwogI2RlZmluZSBUV0w2MDMwX0JBU0VBRERfQVVESU8JCTB4MDAwMAogI2RlZmluZSBUV0w2MDMwX0JBU0VBRERfUlNWCQkweDAwMDAKKyNkZWZpbmUgVFdMNjAzMF9CQVNFQUREX1pFUk8JCTB4MDAwMAogCiAvKiBGZXcgcG93ZXIgdmFsdWVzICovCiAjZGVmaW5lIFJfQ0ZHX0JPT1QJCQkweDA1CkBAIC0zMjAsOSArMzE0LDExIEBACiAJeyBTVUJfQ0hJUF9JRDEsIFRXTDYwMzBfQkFTRUFERF9DSEFSR0VSIH0sCiAJeyBTVUJfQ0hJUF9JRDEsIFRXTDYwMzBfQkFTRUFERF9HQVNHQVVHRSB9LAogCXsgU1VCX0NISVBfSUQxLCBUV0w2MDMwX0JBU0VBRERfUFdNIH0sCi0JeyBTVUJfQ0hJUF9JRDIsIFRXTDYwMzBfQkFTRUFERF9SU1YgfSwKLQl7IFNVQl9DSElQX0lEMiwgVFdMNjAzMF9CQVNFQUREX1JTViB9LAorCXsgU1VCX0NISVBfSUQwLCBUV0w2MDMwX0JBU0VBRERfWkVSTyB9LAorCXsgU1VCX0NISVBfSUQxLCBUV0w2MDMwX0JBU0VBRERfWkVSTyB9LAogCisJeyBTVUJfQ0hJUF9JRDIsIFRXTDYwMzBfQkFTRUFERF9aRVJPIH0sCisJeyBTVUJfQ0hJUF9JRDIsIFRXTDYwMzBfQkFTRUFERF9aRVJPIH0sCiAJeyBTVUJfQ0hJUF9JRDIsIFRXTDYwMzBfQkFTRUFERF9SU1YgfSwKIAl7IFNVQl9DSElQX0lEMiwgVFdMNjAzMF9CQVNFQUREX1JTViB9LAogCXsgU1VCX0NISVBfSUQyLCBUV0w2MDMwX0JBU0VBRERfUlNWIH0sCkBAIC01ODgsMTggKzU4NCw2IEBACiAJc3RydWN0IGRldmljZQkqY2hpbGQ7CiAJdW5zaWduZWQgc3ViX2NoaXBfaWQ7CiAKLQlpZiAodHdsX2hhc19iY2koKSAmJiBwZGF0YS0+YmNpICYmCi0JICAgICEoZmVhdHVyZXMgJiAoVFBTX1NVQlNFVCB8IFRXTDUwMzEpKSkgewotCQljaGlsZCA9IGFkZF9jaGlsZCgzLCAidHdsNDAzMF9iY2kiLAotCQkJCXBkYXRhLT5iY2ksIHNpemVvZigqcGRhdGEtPmJjaSksCi0JCQkJZmFsc2UsCi0JCQkJLyogaXJxMCA9IENIR19QUkVTLCBpcnExID0gQkNJICovCi0JCQkJcGRhdGEtPmlycV9iYXNlICsgQkNJX1BSRVNfSU5UUl9PRkZTRVQsCi0JCQkJcGRhdGEtPmlycV9iYXNlICsgQkNJX0lOVFJfT0ZGU0VUKTsKLQkJaWYgKElTX0VSUihjaGlsZCkpCi0JCQlyZXR1cm4gUFRSX0VSUihjaGlsZCk7Ci0JfQotCiAJaWYgKHR3bF9oYXNfZ3BpbygpICYmIHBkYXRhLT5ncGlvKSB7CiAJCWNoaWxkID0gYWRkX2NoaWxkKFNVQl9DSElQX0lEMSwgInR3bDQwMzBfZ3BpbyIsCiAJCQkJcGRhdGEtPmdwaW8sIHNpemVvZigqcGRhdGEtPmdwaW8pLApAQCAtOTc3LDYgKzk2MSw3IEBACiAJaW50CQkJCXN0YXR1czsKIAl1bnNpZ25lZAkJCWk7CiAJc3RydWN0IHR3bDQwMzBfcGxhdGZvcm1fZGF0YQkqcGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCXU4IHRlbXA7CiAKIAlpZiAoIXBkYXRhKSB7CiAJCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAibm8gcGxhdGZvcm0gZGF0YT9cbiIpOwpAQCAtMTA0NCw2ICsxMDI5LDE4IEBACiAJCQlnb3RvIGZhaWw7CiAJfQogCisJLyogRGlzYWJsZSBUV0w0MDMwL1RXTDUwMzAgSTJDIFB1bGwtdXAgb24gSTJDMSBhbmQgSTJDNChTUikgaW50ZXJmYWNlLgorCSAqIFByb2dyYW0gSTJDX1NDTF9DVFJMX1BVKGJpdCAwKT0wLCBJMkNfU0RBX0NUUkxfUFUgKGJpdCAyKT0wLAorCSAqIFNSX0kyQ19TQ0xfQ1RSTF9QVShiaXQgNCk9MCBhbmQgU1JfSTJDX1NEQV9DVFJMX1BVKGJpdCA2KT0wLgorCSAqLworCisJaWYgKHR3bF9jbGFzc19pc180MDMwKCkpIHsKKwkJdHdsX2kyY19yZWFkX3U4KFRXTDQwMzBfTU9EVUxFX0lOVEJSLCAmdGVtcCwgUkVHX0dQUFVQRENUUjEpOworCQl0ZW1wICY9IH4oU1JfSTJDX1NEQV9DVFJMX1BVIHwgU1JfSTJDX1NDTF9DVFJMX1BVIHwgXAorCQlJMkNfU0RBX0NUUkxfUFUgfCBJMkNfU0NMX0NUUkxfUFUpOworCQl0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX0lOVEJSLCB0ZW1wLCBSRUdfR1BQVVBEQ1RSMSk7CisJfQorCiAJc3RhdHVzID0gYWRkX2NoaWxkcmVuKHBkYXRhLCBpZC0+ZHJpdmVyX2RhdGEpOwogZmFpbDoKIAlpZiAoc3RhdHVzIDwgMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWZkL3R3bDQwMzAtcG93ZXIuYyBiL2RyaXZlcnMvbWZkL3R3bDQwMzAtcG93ZXIuYwppbmRleCAwODE1MjkyLi43ZWZhODc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21mZC90d2w0MDMwLXBvd2VyLmMKKysrIGIvZHJpdmVycy9tZmQvdHdsNDAzMC1wb3dlci5jCkBAIC00MDUsNyArNDA1LDcgQEAKIAogCWlmIChyY29uZmlnLT5yZW1hcF9zbGVlcCAhPSBUV0w0MDMwX1JFU0NPTkZJR19VTkRFRikgewogCQlyZW1hcCAmPSB+U0xFRVBfU1RBVEVfTUFTSzsKLQkJcmVtYXAgfD0gcmNvbmZpZy0+cmVtYXBfb2ZmIDw8IFNMRUVQX1NUQVRFX1NISUZUOworCQlyZW1hcCB8PSByY29uZmlnLT5yZW1hcF9zbGVlcCA8PCBTTEVFUF9TVEFURV9TSElGVDsKIAl9CiAKIAllcnIgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX1JFQ0VJVkVSLApAQCAtNDYxLDYgKzQ2MSw1NiBAQAogCXJldHVybiBlcnI7CiB9CiAKK2ludCB0d2w0MDMwX3JlbW92ZV9zY3JpcHQodTggZmxhZ3MpCit7CisJaW50IGVyciA9IDA7CisKKwllcnIgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgUl9LRVlfMSwKKwkJCVJfUFJPVEVDVF9LRVkpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJ0d2w0MDMwOiB1bmFibGUgdG8gdW5sb2NrIFBST1RFQ1RfS0VZXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgUl9LRVlfMiwKKwkJCVJfUFJPVEVDVF9LRVkpOworCWlmIChlcnIpIHsKKwkJcHJfZXJyKCJ0d2w0MDMwOiB1bmFibGUgdG8gdW5sb2NrIFBST1RFQ1RfS0VZXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAoZmxhZ3MgJiBUV0w0MDMwX1dSU1RfU0NSSVBUKSB7CisJCWVyciA9IHR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBFTkRfT0ZfU0NSSVBULAorCQkJCVJfU0VRX0FERF9XQVJNKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCWlmIChmbGFncyAmIFRXTDQwMzBfV0FLRVVQMTJfU0NSSVBUKSB7CisJCWlmIChlcnIpCisJCWVyciA9IHR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBFTkRfT0ZfU0NSSVBULAorCQkJCVJfU0VRX0FERF9TMkExMik7CisJCQlyZXR1cm4gZXJyOworCX0KKwlpZiAoZmxhZ3MgJiBUV0w0MDMwX1dBS0VVUDNfU0NSSVBUKSB7CisJCWVyciA9IHR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBFTkRfT0ZfU0NSSVBULAorCQkJCVJfU0VRX0FERF9TMkEzKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCWlmIChmbGFncyAmIFRXTDQwMzBfU0xFRVBfU0NSSVBUKSB7CisJCWVyciA9IHR3bF9pMmNfd3JpdGVfdTgoVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSLCBFTkRfT0ZfU0NSSVBULAorCQkJCVJfU0VRX0FERF9BMlMpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSB0d2xfaTJjX3dyaXRlX3U4KFRXTDQwMzBfTU9EVUxFX1BNX01BU1RFUiwgMCwgUl9QUk9URUNUX0tFWSk7CisJaWYgKGVycikKKwkJcHJfZXJyKCJUV0w0MDMwIFVuYWJsZSB0byByZWxvY2sgcmVnaXN0ZXJzXG4iKTsKKworCXJldHVybiBlcnI7Cit9CisKIHZvaWQgX19pbml0IHR3bDQwMzBfcG93ZXJfaW5pdChzdHJ1Y3QgdHdsNDAzMF9wb3dlcl9kYXRhICp0d2w0MDMwX3NjcmlwdHMpCiB7CiAJaW50IGVyciA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21mZC91Y2IxeDAwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCmluZGV4IDI1MmI3NDEuLmIyODEyMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCisrKyBiL2RyaXZlcnMvbWZkL3VjYjF4MDAtY29yZS5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvdWNiMXgwMC5oPgogI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KIAogI2luY2x1ZGUgPG1hY2gvZG1hLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204MzF4LWNvcmUuYyBiL2RyaXZlcnMvbWZkL3dtODMxeC1jb3JlLmMKaW5kZXggNGIyMDIxYS4uMDcxMDFlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvd204MzF4LWNvcmUuYworKysgYi9kcml2ZXJzL21mZC93bTgzMXgtY29yZS5jCkBAIC0zMjEsNyArMzIxLDYgQEAKICAqLwogaW50IHdtODMxeF9hdXhhZGNfcmVhZChzdHJ1Y3Qgd204MzF4ICp3bTgzMXgsIGVudW0gd204MzF4X2F1eGFkYyBpbnB1dCkKIHsKLQlpbnQgdHJpZXMgPSAxMDsKIAlpbnQgcmV0LCBzcmM7CiAKIAltdXRleF9sb2NrKCZ3bTgzMXgtPmF1eGFkY19sb2NrKTsKQEAgLTM0OSwxMyArMzQ4LDE0IEBACiAJCWdvdG8gZGlzYWJsZTsKIAl9CiAKLQlkbyB7Ci0JCW1zbGVlcCgxKTsKKwkvKiBJZ25vcmUgdGhlIHJlc3VsdCB0byBhbGxvdyB1cyB0byBzb2xkaWVyIG9uIHdpdGhvdXQgSVJRIGhvb2t1cCAqLworCXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmd204MzF4LT5hdXhhZGNfZG9uZSwgbXNlY3NfdG9famlmZmllcyg1KSk7CiAKLQkJcmV0ID0gd204MzF4X3JlZ19yZWFkKHdtODMxeCwgV004MzFYX0FVWEFEQ19DT05UUk9MKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXQgPSBXTTgzMVhfQVVYX0NWVF9FTkE7Ci0JfSB3aGlsZSAoKHJldCAmIFdNODMxWF9BVVhfQ1ZUX0VOQSkgJiYgLS10cmllcyk7CisJcmV0ID0gd204MzF4X3JlZ19yZWFkKHdtODMxeCwgV004MzFYX0FVWEFEQ19DT05UUk9MKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHdtODMxeC0+ZGV2LCAiQVVYQURDIHN0YXR1cyByZWFkIGZhaWxlZDogJWRcbiIsIHJldCk7CisJCWdvdG8gZGlzYWJsZTsKKwl9CiAKIAlpZiAocmV0ICYgV004MzFYX0FVWF9DVlRfRU5BKSB7CiAJCWRldl9lcnIod204MzF4LT5kZXYsICJUaW1lZCBvdXQgcmVhZGluZyBBVVhBRENcbiIpOwpAQCAtMzkwLDYgKzM5MCwxNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwod204MzF4X2F1eGFkY19yZWFkKTsKIAorc3RhdGljIGlycXJldHVybl90IHdtODMxeF9hdXhhZGNfaXJxKGludCBpcnEsIHZvaWQgKmlycV9kYXRhKQoreworCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGlycV9kYXRhOworCisJY29tcGxldGUoJndtODMxeC0+YXV4YWRjX2RvbmUpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCiAvKioKICAqIHdtODMxeF9hdXhhZGNfcmVhZF91djogUmVhZCBhIHZvbHRhZ2UgZnJvbSB0aGUgV004MzF4IEFVWEFEQwogICoKQEAgLTE0MTEsNiArMTQyMCw3IEBACiAJbXV0ZXhfaW5pdCgmd204MzF4LT5pb19sb2NrKTsKIAltdXRleF9pbml0KCZ3bTgzMXgtPmtleV9sb2NrKTsKIAltdXRleF9pbml0KCZ3bTgzMXgtPmF1eGFkY19sb2NrKTsKKwlpbml0X2NvbXBsZXRpb24oJndtODMxeC0+YXV4YWRjX2RvbmUpOwogCWRldl9zZXRfZHJ2ZGF0YSh3bTgzMXgtPmRldiwgd204MzF4KTsKIAogCXJldCA9IHdtODMxeF9yZWdfcmVhZCh3bTgzMXgsIFdNODMxWF9QQVJFTlRfSUQpOwpAQCAtMTQ0OSwxOCArMTQ1OSwzMyBAQAogCWNhc2UgV004MzEwOgogCQlwYXJlbnQgPSBXTTgzMTA7CiAJCXdtODMxeC0+bnVtX2dwaW8gPSAxNjsKKwkJaWYgKHJldiA+IDApIHsKKwkJCXdtODMxeC0+aGFzX2dwaW9fZW5hID0gMTsKKwkJCXdtODMxeC0+aGFzX2NzX3N0cyA9IDE7CisJCX0KKwogCQlkZXZfaW5mbyh3bTgzMXgtPmRldiwgIldNODMxMCByZXZpc2lvbiAlY1xuIiwgJ0EnICsgcmV2KTsKIAkJYnJlYWs7CiAKIAljYXNlIFdNODMxMToKIAkJcGFyZW50ID0gV004MzExOwogCQl3bTgzMXgtPm51bV9ncGlvID0gMTY7CisJCWlmIChyZXYgPiAwKSB7CisJCQl3bTgzMXgtPmhhc19ncGlvX2VuYSA9IDE7CisJCQl3bTgzMXgtPmhhc19jc19zdHMgPSAxOworCQl9CisKIAkJZGV2X2luZm8od204MzF4LT5kZXYsICJXTTgzMTEgcmV2aXNpb24gJWNcbiIsICdBJyArIHJldik7CiAJCWJyZWFrOwogCiAJY2FzZSBXTTgzMTI6CiAJCXBhcmVudCA9IFdNODMxMjsKIAkJd204MzF4LT5udW1fZ3BpbyA9IDE2OworCQlpZiAocmV2ID4gMCkgeworCQkJd204MzF4LT5oYXNfZ3Bpb19lbmEgPSAxOworCQkJd204MzF4LT5oYXNfY3Nfc3RzID0gMTsKKwkJfQorCiAJCWRldl9pbmZvKHdtODMxeC0+ZGV2LCAiV004MzEyIHJldmlzaW9uICVjXG4iLCAnQScgKyByZXYpOwogCQlicmVhazsKIApAQCAtMTUwOCw2ICsxNTMzLDE2IEBACiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIGVycjsKIAorCWlmICh3bTgzMXgtPmlycV9iYXNlKSB7CisJCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHdtODMxeC0+aXJxX2Jhc2UgKworCQkJCQkgICBXTTgzMVhfSVJRX0FVWEFEQ19EQVRBLAorCQkJCQkgICBOVUxMLCB3bTgzMXhfYXV4YWRjX2lycSwgMCwKKwkJCQkJICAgImF1eGFkYyIsIHdtODMxeCk7CisJCWlmIChyZXQgPCAwKQorCQkJZGV2X2Vycih3bTgzMXgtPmRldiwgIkFVWEFEQyBJUlEgcmVxdWVzdCBmYWlsZWQ6ICVkXG4iLAorCQkJCXJldCk7CisJfQorCiAJLyogVGhlIGNvcmUgZGV2aWNlIGlzIHVwLCBpbnN0YW50aWF0ZSB0aGUgc3ViZGV2aWNlcy4gKi8KIAlzd2l0Y2ggKHBhcmVudCkgewogCWNhc2UgV004MzEwOgpAQCAtMTU3OCw2ICsxNjEzLDggQEAKIHsKIAl3bTgzMXhfb3RwX2V4aXQod204MzF4KTsKIAltZmRfcmVtb3ZlX2RldmljZXMod204MzF4LT5kZXYpOworCWlmICh3bTgzMXgtPmlycV9iYXNlKQorCQlmcmVlX2lycSh3bTgzMXgtPmlycV9iYXNlICsgV004MzFYX0lSUV9BVVhBRENfREFUQSwgd204MzF4KTsKIAl3bTgzMXhfaXJxX2V4aXQod204MzF4KTsKIAlrZnJlZSh3bTgzMXgpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204MzUwLWNvcmUuYyBiL2RyaXZlcnMvbWZkL3dtODM1MC1jb3JlLmMKaW5kZXggOWE5NzBiZC4uYmQ3NTgwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZmQvd204MzUwLWNvcmUuYworKysgYi9kcml2ZXJzL21mZC93bTgzNTAtY29yZS5jCkBAIC0zMzksNyArMzM5LDYgQEAKIGludCB3bTgzNTBfcmVhZF9hdXhhZGMoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgY2hhbm5lbCwgaW50IHNjYWxlLCBpbnQgdnJlZikKIHsKIAl1MTYgcmVnLCByZXN1bHQgPSAwOwotCWludCB0cmllcyA9IDU7CiAKIAlpZiAoY2hhbm5lbCA8IFdNODM1MF9BVVhBRENfQVVYMSB8fCBjaGFubmVsID4gV004MzUwX0FVWEFEQ19URU1QKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM2MywxMiArMzYyLDEzIEBACiAJcmVnIHw9IDEgPDwgY2hhbm5lbCB8IFdNODM1MF9BVVhBRENfUE9MTDsKIAl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0RJR0lUSVNFUl9DT05UUk9MXzEsIHJlZyk7CiAKLQlkbyB7Ci0JCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSgxKTsKLQkJcmVnID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0RJR0lUSVNFUl9DT05UUk9MXzEpOwotCX0gd2hpbGUgKChyZWcgJiBXTTgzNTBfQVVYQURDX1BPTEwpICYmIC0tdHJpZXMpOworCS8qIFdlIGlnbm9yZSB0aGUgcmVzdWx0IG9mIHRoZSBjb21wbGV0aW9uIGFuZCBqdXN0IGNoZWNrIGZvciBhCisJICogY29udmVyc2lvbiByZXN1bHQsIGFsbG93aW5nIHVzIHRvIHNvbGRpZXIgb24gaWYgdGhlIElSUQorCSAqIGluZnJhc3RydWN0dXJlIGlzIG5vdCBzZXQgdXAgZm9yIHRoZSBjaGlwLiAqLworCXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmd204MzUwLT5hdXhhZGNfZG9uZSwgbXNlY3NfdG9famlmZmllcyg1KSk7CiAKLQlpZiAoIXRyaWVzKQorCXJlZyA9IHdtODM1MF9yZWdfcmVhZCh3bTgzNTAsIFdNODM1MF9ESUdJVElTRVJfQ09OVFJPTF8xKTsKKwlpZiAocmVnICYgV004MzUwX0FVWEFEQ19QT0xMKQogCQlkZXZfZXJyKHdtODM1MC0+ZGV2LCAiYWRjIGNobiAlZCByZWFkIHRpbWVvdXRcbiIsIGNoYW5uZWwpOwogCWVsc2UKIAkJcmVzdWx0ID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwKQEAgLTM4NSw2ICszODUsMTUgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9yZWFkX2F1eGFkYyk7CiAKK3N0YXRpYyBpcnFyZXR1cm5fdCB3bTgzNTBfYXV4YWRjX2lycShpbnQgaXJxLCB2b2lkICppcnFfZGF0YSkKK3sKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBpcnFfZGF0YTsKKworCWNvbXBsZXRlKCZ3bTgzNTAtPmF1eGFkY19kb25lKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKwogLyoKICAqIENhY2hlIGlzIGFsd2F5cyBob3N0IGVuZGlhbi4KICAqLwpAQCAtNjgyLDExICs2OTEsMjIgQEAKIAl9CiAKIAltdXRleF9pbml0KCZ3bTgzNTAtPmF1eGFkY19tdXRleCk7CisJaW5pdF9jb21wbGV0aW9uKCZ3bTgzNTAtPmF1eGFkY19kb25lKTsKIAogCXJldCA9IHdtODM1MF9pcnFfaW5pdCh3bTgzNTAsIGlycSwgcGRhdGEpOwogCWlmIChyZXQgPCAwKQogCQlnb3RvIGVycjsKIAorCWlmICh3bTgzNTAtPmlycV9iYXNlKSB7CisJCXJldCA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHdtODM1MC0+aXJxX2Jhc2UgKworCQkJCQkgICBXTTgzNTBfSVJRX0FVWEFEQ19EQVRBUkRZLAorCQkJCQkgICBOVUxMLCB3bTgzNTBfYXV4YWRjX2lycSwgMCwKKwkJCQkJICAgImF1eGFkYyIsIHdtODM1MCk7CisJCWlmIChyZXQgPCAwKQorCQkJZGV2X3dhcm4od204MzUwLT5kZXYsCisJCQkJICJGYWlsZWQgdG8gcmVxdWVzdCBBVVhBREMgSVJROiAlZFxuIiwgcmV0KTsKKwl9CisKIAlpZiAocGRhdGEgJiYgcGRhdGEtPmluaXQpIHsKIAkJcmV0ID0gcGRhdGEtPmluaXQod204MzUwKTsKIAkJaWYgKHJldCAhPSAwKSB7CkBAIC03MzYsNiArNzU2LDkgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih3bTgzNTAtPmdwaW8ucGRldik7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIod204MzUwLT5jb2RlYy5wZGV2KTsKIAorCWlmICh3bTgzNTAtPmlycV9iYXNlKQorCQlmcmVlX2lycSh3bTgzNTAtPmlycV9iYXNlICsgV004MzUwX0lSUV9BVVhBRENfREFUQVJEWSwgd204MzUwKTsKKwogCXdtODM1MF9pcnFfZXhpdCh3bTgzNTApOwogCiAJa2ZyZWUod204MzUwLT5yZWdfY2FjaGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204MzUwLWlycS5jIGIvZHJpdmVycy9tZmQvd204MzUwLWlycS5jCmluZGV4IDkwMjVmMjkuLmY1NmM5YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3dtODM1MC1pcnEuYworKysgYi9kcml2ZXJzL21mZC93bTgzNTAtaXJxLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9idWcuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KIAogI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvY29yZS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvYXVkaW8uaD4KQEAgLTI5LDggKzI5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL3N1cHBseS5oPgogI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvd2R0Lmg+CiAKLSNkZWZpbmUgV004MzUwX05VTV9JUlFfUkVHUyA3Ci0KICNkZWZpbmUgV004MzUwX0lOVF9PRkZTRVRfMSAgICAgICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgV004MzUwX0lOVF9PRkZTRVRfMiAgICAgICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgV004MzUwX1BPV0VSX1VQX0lOVF9PRkZTRVQgICAgICAgICAgICAgIDIKQEAgLTM2NiwxOSArMzY0LDEwIEBACiAJfSwKIH07CiAKLXN0YXRpYyB2b2lkIHdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHdtODM1MF9pcnFfZGF0YSAqaXJxX3RvX3dtODM1MF9pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLAorCQkJCQkJCWludCBpcnEpCiB7Ci0JbXV0ZXhfbG9jaygmd204MzUwLT5pcnFfbXV0ZXgpOwotCi0JaWYgKHdtODM1MC0+aXJxW2lycV0uaGFuZGxlcikKLQkJd204MzUwLT5pcnFbaXJxXS5oYW5kbGVyKGlycSwgd204MzUwLT5pcnFbaXJxXS5kYXRhKTsKLQllbHNlIHsKLQkJZGV2X2Vycih3bTgzNTAtPmRldiwgImlycSAlZCBub2JvZHkgY2FyZWQuIG5vdyBtYXNrZWQuXG4iLAotCQkJaXJxKTsKLQkJd204MzUwX21hc2tfaXJxKHdtODM1MCwgaXJxKTsKLQl9Ci0KLQltdXRleF91bmxvY2soJndtODM1MC0+aXJxX211dGV4KTsKKwlyZXR1cm4gJndtODM1MF9pcnFzW2lycSAtIHdtODM1MC0+aXJxX2Jhc2VdOwogfQogCiAvKgpAQCAtMzg2LDcgKzM3NSw5IEBACiAgKiBpbnRlcnJ1cHRzIGFyZSBjbGVhciBvbiByZWFkIHRoZSBJUlEgbGluZSB3aWxsIGJlIHJlYXNzZXJ0ZWQgYW5kCiAgKiB0aGUgcGh5c2ljYWwgSVJRIHdpbGwgYmUgaGFuZGxlZCBhZ2FpbiBpZiBhbm90aGVyIGludGVycnVwdCBpcwogICogYXNzZXJ0ZWQgd2hpbGUgd2UgcnVuIC0gaW4gdGhlIG5vcm1hbCBjb3Vyc2Ugb2YgZXZlbnRzIHRoaXMgaXMgYQotICogcmFyZSBvY2N1cnJlbmNlIHNvIHdlIHNhdmUgSTJDL1NQSSByZWFkcy4KKyAqIHJhcmUgb2NjdXJyZW5jZSBzbyB3ZSBzYXZlIEkyQy9TUEkgcmVhZHMuICBXZSdyZSBhbHNvIGFzc3VtaW5nIHRoYXQKKyAqIGl0J3MgcmFyZSB0byBnZXQgbG90cyBvZiBpbnRlcnJ1cHRzIGZpcmluZyBzaW11bHRhbmVvdXNseSBzbyB0cnkgdG8KKyAqIG1pbmltaXNlIEkvTy4KICAqLwogc3RhdGljIGlycXJldHVybl90IHdtODM1MF9pcnEoaW50IGlycSwgdm9pZCAqaXJxX2RhdGEpCiB7CkBAIC0zOTcsNyArMzg4LDYgQEAKIAlzdHJ1Y3Qgd204MzUwX2lycV9kYXRhICpkYXRhOwogCWludCBpOwogCi0JLyogVE9ETzogVXNlIGJsb2NrIHJlYWRzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2U/ICovCiAJbGV2ZWxfb25lID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX1NZU1RFTV9JTlRFUlJVUFRTKQogCQkmIH53bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfU1lTVEVNX0lOVEVSUlVQVFNfTUFTSyk7CiAKQEAgLTQxNiw5MyArNDA2LDEwMSBAQAogCQkJc3ViX3JlZ1tkYXRhLT5yZWddID0KIAkJCQl3bTgzNTBfcmVnX3JlYWQod204MzUwLCBXTTgzNTBfSU5UX1NUQVRVU18xICsKIAkJCQkJCWRhdGEtPnJlZyk7Ci0JCQlzdWJfcmVnW2RhdGEtPnJlZ10gJj0KLQkJCQl+d204MzUwX3JlZ19yZWFkKHdtODM1MCwKLQkJCQkJCSBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0sgKwotCQkJCQkJIGRhdGEtPnJlZyk7CisJCQlzdWJfcmVnW2RhdGEtPnJlZ10gJj0gfndtODM1MC0+aXJxX21hc2tzW2RhdGEtPnJlZ107CiAJCQlyZWFkX2RvbmVbZGF0YS0+cmVnXSA9IDE7CiAJCX0KIAogCQlpZiAoc3ViX3JlZ1tkYXRhLT5yZWddICYgZGF0YS0+bWFzaykKLQkJCXdtODM1MF9pcnFfY2FsbF9oYW5kbGVyKHdtODM1MCwgaSk7CisJCQloYW5kbGVfbmVzdGVkX2lycSh3bTgzNTAtPmlycV9iYXNlICsgaSk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1pbnQgd204MzUwX3JlZ2lzdGVyX2lycShzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpcnEsCi0JCQlpcnFfaGFuZGxlcl90IGhhbmRsZXIsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0JCQljb25zdCBjaGFyICpuYW1lLCB2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgd204MzUwX2lycV9sb2NrKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JaWYgKGlycSA8IDAgfHwgaXJxID49IFdNODM1MF9OVU1fSVJRIHx8ICFoYW5kbGVyKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOwogCi0JaWYgKHdtODM1MC0+aXJxW2lycV0uaGFuZGxlcikKLQkJcmV0dXJuIC1FQlVTWTsKLQotCW11dGV4X2xvY2soJndtODM1MC0+aXJxX211dGV4KTsKLQl3bTgzNTAtPmlycVtpcnFdLmhhbmRsZXIgPSBoYW5kbGVyOwotCXdtODM1MC0+aXJxW2lycV0uZGF0YSA9IGRhdGE7Ci0JbXV0ZXhfdW5sb2NrKCZ3bTgzNTAtPmlycV9tdXRleCk7Ci0KLQl3bTgzNTBfdW5tYXNrX2lycSh3bTgzNTAsIGlycSk7Ci0KLQlyZXR1cm4gMDsKKwltdXRleF9sb2NrKCZ3bTgzNTAtPmlycV9sb2NrKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9yZWdpc3Rlcl9pcnEpOwogCi1pbnQgd204MzUwX2ZyZWVfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSkKK3N0YXRpYyB2b2lkIHdtODM1MF9pcnFfc3luY191bmxvY2sodW5zaWduZWQgaW50IGlycSkKIHsKLQlpZiAoaXJxIDwgMCB8fCBpcnEgPj0gV004MzUwX05VTV9JUlEpCi0JCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCB3bTgzNTAgKndtODM1MCA9IGdldF9pcnFfY2hpcF9kYXRhKGlycSk7CisJaW50IGk7CiAKLQl3bTgzNTBfbWFza19pcnEod204MzUwLCBpcnEpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHdtODM1MC0+aXJxX21hc2tzKTsgaSsrKSB7CisJCS8qIElmIHRoZXJlJ3MgYmVlbiBhIGNoYW5nZSBpbiB0aGUgbWFzayB3cml0ZSBpdCBiYWNrCisJCSAqIHRvIHRoZSBoYXJkd2FyZS4gKi8KKwkJaWYgKHdtODM1MC0+aXJxX21hc2tzW2ldICE9CisJCSAgICB3bTgzNTAtPnJlZ19jYWNoZVtXTTgzNTBfSU5UX1NUQVRVU18xX01BU0sgKyBpXSkKKwkJCVdBUk5fT04od204MzUwX3JlZ193cml0ZSh3bTgzNTAsCisJCQkJCSBXTTgzNTBfSU5UX1NUQVRVU18xX01BU0sgKyBpLAorCQkJCQkJIHdtODM1MC0+aXJxX21hc2tzW2ldKSk7CisJfQogCi0JbXV0ZXhfbG9jaygmd204MzUwLT5pcnFfbXV0ZXgpOwotCXdtODM1MC0+aXJxW2lycV0uaGFuZGxlciA9IE5VTEw7Ci0JbXV0ZXhfdW5sb2NrKCZ3bTgzNTAtPmlycV9tdXRleCk7Ci0JcmV0dXJuIDA7CisJbXV0ZXhfdW5sb2NrKCZ3bTgzNTAtPmlycV9sb2NrKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF9mcmVlX2lycSk7CiAKLWludCB3bTgzNTBfbWFza19pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxKQorc3RhdGljIHZvaWQgd204MzUwX2lycV9lbmFibGUodW5zaWduZWQgaW50IGlycSkKIHsKLQlyZXR1cm4gd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLICsKLQkJCSAgICAgICB3bTgzNTBfaXJxc1tpcnFdLnJlZywKLQkJCSAgICAgICB3bTgzNTBfaXJxc1tpcnFdLm1hc2spOwotfQotRVhQT1JUX1NZTUJPTF9HUEwod204MzUwX21hc2tfaXJxKTsKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBnZXRfaXJxX2NoaXBfZGF0YShpcnEpOworCXN0cnVjdCB3bTgzNTBfaXJxX2RhdGEgKmlycV9kYXRhID0gaXJxX3RvX3dtODM1MF9pcnEod204MzUwLCBpcnEpOwogCi1pbnQgd204MzUwX3VubWFza19pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxKQotewotCXJldHVybiB3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSyArCi0JCQkJIHdtODM1MF9pcnFzW2lycV0ucmVnLAotCQkJCSB3bTgzNTBfaXJxc1tpcnFdLm1hc2spOworCXdtODM1MC0+aXJxX21hc2tzW2lycV9kYXRhLT5yZWddICY9IH5pcnFfZGF0YS0+bWFzazsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKHdtODM1MF91bm1hc2tfaXJxKTsKKworc3RhdGljIHZvaWQgd204MzUwX2lycV9kaXNhYmxlKHVuc2lnbmVkIGludCBpcnEpCit7CisJc3RydWN0IHdtODM1MCAqd204MzUwID0gZ2V0X2lycV9jaGlwX2RhdGEoaXJxKTsKKwlzdHJ1Y3Qgd204MzUwX2lycV9kYXRhICppcnFfZGF0YSA9IGlycV90b193bTgzNTBfaXJxKHdtODM1MCwgaXJxKTsKKworCXdtODM1MC0+aXJxX21hc2tzW2lycV9kYXRhLT5yZWddIHw9IGlycV9kYXRhLT5tYXNrOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIHdtODM1MF9pcnFfY2hpcCA9IHsKKwkubmFtZSA9ICJ3bTgzNTAiLAorCS5idXNfbG9jayA9IHdtODM1MF9pcnFfbG9jaywKKwkuYnVzX3N5bmNfdW5sb2NrID0gd204MzUwX2lycV9zeW5jX3VubG9jaywKKwkuZGlzYWJsZSA9IHdtODM1MF9pcnFfZGlzYWJsZSwKKwkuZW5hYmxlID0gd204MzUwX2lycV9lbmFibGUsCit9OwogCiBpbnQgd204MzUwX2lycV9pbml0KHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSwKIAkJICAgIHN0cnVjdCB3bTgzNTBfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBjdXJfaXJxLCBpOwogCWludCBmbGFncyA9IElSUUZfT05FU0hPVDsKIAogCWlmICghaXJxKSB7Ci0JCWRldl9lcnIod204MzUwLT5kZXYsICJObyBJUlEgY29uZmlndXJlZFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlkZXZfd2Fybih3bTgzNTAtPmRldiwgIk5vIGludGVycnVwdCBzdXBwb3J0LCBubyBjb3JlIElSUVxuIik7CisJCXJldHVybiAwOwogCX0KIAorCWlmICghcGRhdGEgfHwgIXBkYXRhLT5pcnFfYmFzZSkgeworCQlkZXZfd2Fybih3bTgzNTAtPmRldiwgIk5vIGludGVycnVwdCBzdXBwb3J0LCBubyBJUlEgYmFzZVxuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIE1hc2sgdG9wIGxldmVsIGludGVycnVwdHMgKi8KIAl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX1NZU1RFTV9JTlRFUlJVUFRTX01BU0ssIDB4RkZGRik7Ci0Jd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9JTlRfU1RBVFVTXzFfTUFTSywgMHhGRkZGKTsKLQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMl9NQVNLLCAweEZGRkYpOwotCXdtODM1MF9yZWdfd3JpdGUod204MzUwLCBXTTgzNTBfVU5ERVJfVk9MVEFHRV9JTlRfU1RBVFVTX01BU0ssIDB4RkZGRik7Ci0Jd204MzUwX3JlZ193cml0ZSh3bTgzNTAsIFdNODM1MF9HUElPX0lOVF9TVEFUVVNfTUFTSywgMHhGRkZGKTsKLQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0NPTVBBUkFUT1JfSU5UX1NUQVRVU19NQVNLLCAweEZGRkYpOwogCi0JbXV0ZXhfaW5pdCgmd204MzUwLT5pcnFfbXV0ZXgpOworCS8qIE1hc2sgYWxsIGluZGl2aWR1YWwgaW50ZXJydXB0cyBieSBkZWZhdWx0IGFuZCBjYWNoZSB0aGUKKwkgKiBtYXNrcy4gIFdlIHJlYWQgdGhlIG1hc2tzIGJhY2sgc2luY2UgdGhlcmUgYXJlIHVud3JpdGFibGUKKwkgKiBiaXRzIGluIHRoZSBtYXNrIHJlZ2lzdGVycy4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3bTgzNTAtPmlycV9tYXNrcyk7IGkrKykgeworCQl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLICsgaSwKKwkJCQkgMHhGRkZGKTsKKwkJd204MzUwLT5pcnFfbWFza3NbaV0gPQorCQkJd204MzUwX3JlZ19yZWFkKHdtODM1MCwKKwkJCQkJV004MzUwX0lOVF9TVEFUVVNfMV9NQVNLICsgaSk7CisJfQorCisJbXV0ZXhfaW5pdCgmd204MzUwLT5pcnFfbG9jayk7CiAJd204MzUwLT5jaGlwX2lycSA9IGlycTsKKwl3bTgzNTAtPmlycV9iYXNlID0gcGRhdGEtPmlycV9iYXNlOwogCi0JaWYgKHBkYXRhICYmIHBkYXRhLT5pcnFfaGlnaCkgeworCWlmIChwZGF0YS0+aXJxX2hpZ2gpIHsKIAkJZmxhZ3MgfD0gSVJRRl9UUklHR0VSX0hJR0g7CiAKIAkJd204MzUwX3NldF9iaXRzKHdtODM1MCwgV004MzUwX1NZU1RFTV9DT05UUk9MXzEsCkBAIC01MTQsMTEgKzUxMiwzMiBAQAogCQkJCSAgV004MzUwX0lSUV9QT0wpOwogCX0KIAorCS8qIFJlZ2lzdGVyIHdpdGggZ2VuaXJxICovCisJZm9yIChjdXJfaXJxID0gd204MzUwLT5pcnFfYmFzZTsKKwkgICAgIGN1cl9pcnEgPCBBUlJBWV9TSVpFKHdtODM1MF9pcnFzKSArIHdtODM1MC0+aXJxX2Jhc2U7CisJICAgICBjdXJfaXJxKyspIHsKKwkJc2V0X2lycV9jaGlwX2RhdGEoY3VyX2lycSwgd204MzUwKTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGN1cl9pcnEsICZ3bTgzNTBfaXJxX2NoaXAsCisJCQkJCSBoYW5kbGVfZWRnZV9pcnEpOworCQlzZXRfaXJxX25lc3RlZF90aHJlYWQoY3VyX2lycSwgMSk7CisKKwkJLyogQVJNIG5lZWRzIHVzIHRvIGV4cGxpY2l0bHkgZmxhZyB0aGUgSVJRIGFzIHZhbGlkCisJCSAqIGFuZCB3aWxsIHNldCB0aGVtIG5vcHJvYmUgd2hlbiB3ZSBkbyBzby4gKi8KKyNpZmRlZiBDT05GSUdfQVJNCisJCXNldF9pcnFfZmxhZ3MoY3VyX2lycSwgSVJRRl9WQUxJRCk7CisjZWxzZQorCQlzZXRfaXJxX25vcHJvYmUoY3VyX2lycSk7CisjZW5kaWYKKwl9CisKIAlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShpcnEsIE5VTEwsIHdtODM1MF9pcnEsIGZsYWdzLAogCQkJCSAgICJ3bTgzNTAiLCB3bTgzNTApOwogCWlmIChyZXQgIT0gMCkKIAkJZGV2X2Vycih3bTgzNTAtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IElSUTogJWRcbiIsIHJldCk7CiAKKwkvKiBBbGxvdyBpbnRlcnJ1cHRzIHRvIGZpcmUgKi8KKwl3bTgzNTBfcmVnX3dyaXRlKHdtODM1MCwgV004MzUwX1NZU1RFTV9JTlRFUlJVUFRTX01BU0ssIDApOworCiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvd204OTk0LWNvcmUuYyBiL2RyaXZlcnMvbWZkL3dtODk5NC1jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ0ZTFjMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWZkL3dtODk5NC1jb3JlLmMKQEAgLTAsMCArMSw1MzcgQEAKKy8qCisgKiB3bTg5OTQtY29yZS5jICAtLSAgRGV2aWNlIGFjY2VzcyBmb3IgV29sZnNvbiBXTTg5OTQKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKworI2luY2x1ZGUgPGxpbnV4L21mZC93bTg5OTQvY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTg5OTQvcGRhdGEuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204OTk0L3JlZ2lzdGVycy5oPgorCitzdGF0aWMgaW50IHdtODk5NF9yZWFkKHN0cnVjdCB3bTg5OTQgKndtODk5NCwgdW5zaWduZWQgc2hvcnQgcmVnLAorCQkgICAgICAgaW50IGJ5dGVzLCB2b2lkICpkZXN0KQoreworCWludCByZXQsIGk7CisJdTE2ICpidWYgPSBkZXN0OworCisJQlVHX09OKGJ5dGVzICUgMik7CisJQlVHX09OKGJ5dGVzIDw9IDApOworCisJcmV0ID0gd204OTk0LT5yZWFkX2Rldih3bTg5OTQsIHJlZywgYnl0ZXMsIGRlc3QpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsgaSA8IGJ5dGVzIC8gMjsgaSsrKSB7CisJCWJ1ZltpXSA9IGJlMTZfdG9fY3B1KGJ1ZltpXSk7CisKKwkJZGV2X3ZkYmcod204OTk0LT5kZXYsICJSZWFkICUwNHggZnJvbSBSJWQoMHgleClcbiIsCisJCQkgYnVmW2ldLCByZWcgKyBpLCByZWcgKyBpKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiB3bTg5OTRfcmVnX3JlYWQ6IFJlYWQgYSBzaW5nbGUgV004OTk0IHJlZ2lzdGVyLgorICoKKyAqIEB3bTg5OTQ6IERldmljZSB0byByZWFkIGZyb20uCisgKiBAcmVnOiBSZWdpc3RlciB0byByZWFkLgorICovCitpbnQgd204OTk0X3JlZ19yZWFkKHN0cnVjdCB3bTg5OTQgKndtODk5NCwgdW5zaWduZWQgc2hvcnQgcmVnKQoreworCXVuc2lnbmVkIHNob3J0IHZhbDsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmd204OTk0LT5pb19sb2NrKTsKKworCXJldCA9IHdtODk5NF9yZWFkKHdtODk5NCwgcmVnLCAyLCAmdmFsKTsKKworCW11dGV4X3VubG9jaygmd204OTk0LT5pb19sb2NrKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWVsc2UKKwkJcmV0dXJuIHZhbDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODk5NF9yZWdfcmVhZCk7CisKKy8qKgorICogd204OTk0X2J1bGtfcmVhZDogUmVhZCBtdWx0aXBsZSBXTTg5OTQgcmVnaXN0ZXJzCisgKgorICogQHdtODk5NDogRGV2aWNlIHRvIHJlYWQgZnJvbQorICogQHJlZzogRmlyc3QgcmVnaXN0ZXIKKyAqIEBjb3VudDogTnVtYmVyIG9mIHJlZ2lzdGVycworICogQGJ1ZjogQnVmZmVyIHRvIGZpbGwuCisgKi8KK2ludCB3bTg5OTRfYnVsa19yZWFkKHN0cnVjdCB3bTg5OTQgKndtODk5NCwgdW5zaWduZWQgc2hvcnQgcmVnLAorCQkgICAgIGludCBjb3VudCwgdTE2ICpidWYpCit7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJndtODk5NC0+aW9fbG9jayk7CisKKwlyZXQgPSB3bTg5OTRfcmVhZCh3bTg5OTQsIHJlZywgY291bnQgKiAyLCBidWYpOworCisJbXV0ZXhfdW5sb2NrKCZ3bTg5OTQtPmlvX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHdtODk5NF9idWxrX3JlYWQpOworCitzdGF0aWMgaW50IHdtODk5NF93cml0ZShzdHJ1Y3Qgd204OTk0ICp3bTg5OTQsIHVuc2lnbmVkIHNob3J0IHJlZywKKwkJCWludCBieXRlcywgdm9pZCAqc3JjKQoreworCXUxNiAqYnVmID0gc3JjOworCWludCBpOworCisJQlVHX09OKGJ5dGVzICUgMik7CisJQlVHX09OKGJ5dGVzIDw9IDApOworCisJZm9yIChpID0gMDsgaSA8IGJ5dGVzIC8gMjsgaSsrKSB7CisJCWRldl92ZGJnKHdtODk5NC0+ZGV2LCAiV3JpdGUgJTA0eCB0byBSJWQoMHgleClcbiIsCisJCQkgYnVmW2ldLCByZWcgKyBpLCByZWcgKyBpKTsKKworCQlidWZbaV0gPSBjcHVfdG9fYmUxNihidWZbaV0pOworCX0KKworCXJldHVybiB3bTg5OTQtPndyaXRlX2Rldih3bTg5OTQsIHJlZywgYnl0ZXMsIHNyYyk7Cit9CisKKy8qKgorICogd204OTk0X3JlZ193cml0ZTogV3JpdGUgYSBzaW5nbGUgV004OTk0IHJlZ2lzdGVyLgorICoKKyAqIEB3bTg5OTQ6IERldmljZSB0byB3cml0ZSB0by4KKyAqIEByZWc6IFJlZ2lzdGVyIHRvIHdyaXRlIHRvLgorICogQHZhbDogVmFsdWUgdG8gd3JpdGUuCisgKi8KK2ludCB3bTg5OTRfcmVnX3dyaXRlKHN0cnVjdCB3bTg5OTQgKndtODk5NCwgdW5zaWduZWQgc2hvcnQgcmVnLAorCQkgICAgIHVuc2lnbmVkIHNob3J0IHZhbCkKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmd204OTk0LT5pb19sb2NrKTsKKworCXJldCA9IHdtODk5NF93cml0ZSh3bTg5OTQsIHJlZywgMiwgJnZhbCk7CisKKwltdXRleF91bmxvY2soJndtODk5NC0+aW9fbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwod204OTk0X3JlZ193cml0ZSk7CisKKy8qKgorICogd204OTk0X3NldF9iaXRzOiBTZXQgdGhlIHZhbHVlIG9mIGEgYml0ZmllbGQgaW4gYSBXTTg5OTQgcmVnaXN0ZXIKKyAqCisgKiBAd204OTk0OiBEZXZpY2UgdG8gd3JpdGUgdG8uCisgKiBAcmVnOiBSZWdpc3RlciB0byB3cml0ZSB0by4KKyAqIEBtYXNrOiBNYXNrIG9mIGJpdHMgdG8gc2V0LgorICogQHZhbDogVmFsdWUgdG8gc2V0ICh1bnNoaWZ0ZWQpCisgKi8KK2ludCB3bTg5OTRfc2V0X2JpdHMoc3RydWN0IHdtODk5NCAqd204OTk0LCB1bnNpZ25lZCBzaG9ydCByZWcsCisJCSAgICB1bnNpZ25lZCBzaG9ydCBtYXNrLCB1bnNpZ25lZCBzaG9ydCB2YWwpCit7CisJaW50IHJldDsKKwl1MTYgcjsKKworCW11dGV4X2xvY2soJndtODk5NC0+aW9fbG9jayk7CisKKwlyZXQgPSB3bTg5OTRfcmVhZCh3bTg5OTQsIHJlZywgMiwgJnIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXIgJj0gfm1hc2s7CisJciB8PSB2YWw7CisKKwlyZXQgPSB3bTg5OTRfd3JpdGUod204OTk0LCByZWcsIDIsICZyKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd204OTk0LT5pb19sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh3bTg5OTRfc2V0X2JpdHMpOworCitzdGF0aWMgc3RydWN0IG1mZF9jZWxsIHdtODk5NF9yZWd1bGF0b3JfZGV2c1tdID0geworCXsgLm5hbWUgPSAid204OTk0LWxkbyIsIC5pZCA9IDEgfSwKKwl7IC5uYW1lID0gIndtODk5NC1sZG8iLCAuaWQgPSAyIH0sCit9OworCitzdGF0aWMgc3RydWN0IG1mZF9jZWxsIHdtODk5NF9kZXZzW10gPSB7CisJeyAubmFtZSA9ICJ3bTg5OTQtY29kZWMiIH0sCisJeyAubmFtZSA9ICJ3bTg5OTQtZ3BpbyIgfSwKK307CisKKy8qCisgKiBTdXBwbGllcyBmb3IgdGhlIG1haW4gYnVsayBvZiBDT0RFQzsgdGhlIExETyBzdXBwbGllcyBhcmUgaWdub3JlZAorICogYW5kIHNob3VsZCBiZSBoYW5kbGVkIHZpYSB0aGUgc3RhbmRhcmQgcmVndWxhdG9yIEFQSSBzdXBwbHkKKyAqIG1hbmFnZW1lbnQuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICp3bTg5OTRfbWFpbl9zdXBwbGllc1tdID0geworCSJEQlZERCIsCisJIkRDVkREIiwKKwkiQVZERDEiLAorCSJBVkREMiIsCisJIkNQVkREIiwKKwkiU1BLVkREMSIsCisJIlNQS1ZERDIiLAorfTsKKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCB3bTg5OTRfZGV2aWNlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB3bTg5OTQgKndtODk5NCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisKKwkvKiBHUElPIGNvbmZpZ3VyYXRpb24gc3RhdGUgaXMgc2F2ZWQgaGVyZSBzaW5jZSB3ZSBtYXkgYmUgY29uZmlndXJpbmcKKwkgKiB0aGUgR1BJTyBhbHRlcm5hdGUgZnVuY3Rpb25zIGV2ZW4gaWYgd2UncmUgbm90IHVzaW5nIHRoZSBncGlvbGliCisJICogZHJpdmVyIGZvciB0aGVtLgorCSAqLworCXJldCA9IHdtODk5NF9yZWFkKHdtODk5NCwgV004OTk0X0dQSU9fMSwgV004OTk0X05VTV9HUElPX1JFR1MgKiAyLAorCQkJICAmd204OTk0LT5ncGlvX3JlZ3MpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBzYXZlIEdQSU8gcmVnaXN0ZXJzOiAlZFxuIiwgcmV0KTsKKworCS8qIEZvciBzaW1pbGFyIHJlYXNvbnMgd2UgYWxzbyBzdGFzaCB0aGUgcmVndWxhdG9yIHN0YXRlcyAqLworCXJldCA9IHdtODk5NF9yZWFkKHdtODk5NCwgV004OTk0X0xET18xLCBXTTg5OTRfTlVNX0xET19SRUdTICogMiwKKwkJCSAgJndtODk5NC0+bGRvX3JlZ3MpOworCWlmIChyZXQgPCAwKQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBzYXZlIExETyByZWdpc3RlcnM6ICVkXG4iLCByZXQpOworCisJcmV0ID0gcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODk5NF9tYWluX3N1cHBsaWVzKSwKKwkJCQkgICAgIHdtODk5NC0+c3VwcGxpZXMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBkaXNhYmxlIHN1cHBsaWVzOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfZGV2aWNlX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHdtODk5NCAqd204OTk0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50IHJldDsKKworCXJldCA9IHJlZ3VsYXRvcl9idWxrX2VuYWJsZShBUlJBWV9TSVpFKHdtODk5NF9tYWluX3N1cHBsaWVzKSwKKwkJCQkgICAgd204OTk0LT5zdXBwbGllcyk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gd204OTk0X3dyaXRlKHdtODk5NCwgV004OTk0X0xET18xLCBXTTg5OTRfTlVNX0xET19SRUdTICogMiwKKwkJCSAgICZ3bTg5OTQtPmxkb19yZWdzKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gcmVzdG9yZSBMRE8gcmVnaXN0ZXJzOiAlZFxuIiwgcmV0KTsKKworCXJldCA9IHdtODk5NF93cml0ZSh3bTg5OTQsIFdNODk5NF9HUElPXzEsIFdNODk5NF9OVU1fR1BJT19SRUdTICogMiwKKwkJCSAgICZ3bTg5OTQtPmdwaW9fcmVncyk7CisJaWYgKHJldCA8IDApCisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIHJlc3RvcmUgR1BJTyByZWdpc3RlcnM6ICVkXG4iLCByZXQpOworCisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19SRUdVTEFUT1IKK3N0YXRpYyBpbnQgd204OTk0X2xkb19pbl91c2Uoc3RydWN0IHdtODk5NF9wZGF0YSAqcGRhdGEsIGludCBsZG8pCit7CisJc3RydWN0IHdtODk5NF9sZG9fcGRhdGEgKmxkb19wZGF0YTsKKworCWlmICghcGRhdGEpCisJCXJldHVybiAwOworCisJbGRvX3BkYXRhID0gJnBkYXRhLT5sZG9bbGRvXTsKKworCWlmICghbGRvX3BkYXRhLT5pbml0X2RhdGEpCisJCXJldHVybiAwOworCisJcmV0dXJuIGxkb19wZGF0YS0+aW5pdF9kYXRhLT5udW1fY29uc3VtZXJfc3VwcGxpZXMgIT0gMDsKK30KKyNlbHNlCitzdGF0aWMgaW50IHdtODk5NF9sZG9faW5fdXNlKHN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhLCBpbnQgbGRvKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qCisgKiBJbnN0YW50aWF0ZSB0aGUgZ2VuZXJpYyBub24tY29udHJvbCBwYXJ0cyBvZiB0aGUgZGV2aWNlLgorICovCitzdGF0aWMgaW50IHdtODk5NF9kZXZpY2VfaW5pdChzdHJ1Y3Qgd204OTk0ICp3bTg5OTQsIHVuc2lnbmVkIGxvbmcgaWQsIGludCBpcnEpCit7CisJc3RydWN0IHdtODk5NF9wZGF0YSAqcGRhdGEgPSB3bTg5OTQtPmRldi0+cGxhdGZvcm1fZGF0YTsKKwlpbnQgcmV0LCBpOworCisJbXV0ZXhfaW5pdCgmd204OTk0LT5pb19sb2NrKTsKKwlkZXZfc2V0X2RydmRhdGEod204OTk0LT5kZXYsIHdtODk5NCk7CisKKwkvKiBBZGQgdGhlIG9uLWNoaXAgcmVndWxhdG9ycyBmaXJzdCBmb3IgYm9vdHN0cmFwcGluZyAqLworCXJldCA9IG1mZF9hZGRfZGV2aWNlcyh3bTg5OTQtPmRldiwgLTEsCisJCQkgICAgICB3bTg5OTRfcmVndWxhdG9yX2RldnMsCisJCQkgICAgICBBUlJBWV9TSVpFKHdtODk5NF9yZWd1bGF0b3JfZGV2cyksCisJCQkgICAgICBOVUxMLCAwKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycih3bTg5OTQtPmRldiwgIkZhaWxlZCB0byBhZGQgY2hpbGRyZW46ICVkXG4iLCByZXQpOworCQlnb3RvIGVycjsKKwl9CisKKwl3bTg5OTQtPnN1cHBsaWVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEpICoKKwkJCQkgICBBUlJBWV9TSVpFKHdtODk5NF9tYWluX3N1cHBsaWVzKSwKKwkJCQkgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXdtODk5NC0+c3VwcGxpZXMpCisJCWdvdG8gZXJyOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUod204OTk0X21haW5fc3VwcGxpZXMpOyBpKyspCisJCXdtODk5NC0+c3VwcGxpZXNbaV0uc3VwcGx5ID0gd204OTk0X21haW5fc3VwcGxpZXNbaV07CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19nZXQod204OTk0LT5kZXYsIEFSUkFZX1NJWkUod204OTk0X21haW5fc3VwcGxpZXMpLAorCQkJCSB3bTg5OTQtPnN1cHBsaWVzKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2Vycih3bTg5OTQtPmRldiwgIkZhaWxlZCB0byBnZXQgc3VwcGxpZXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9zdXBwbGllczsKKwl9CisKKwlyZXQgPSByZWd1bGF0b3JfYnVsa19lbmFibGUoQVJSQVlfU0laRSh3bTg5OTRfbWFpbl9zdXBwbGllcyksCisJCQkJICAgIHdtODk5NC0+c3VwcGxpZXMpOworCWlmIChyZXQgIT0gMCkgeworCQlkZXZfZXJyKHdtODk5NC0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBzdXBwbGllczogJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyX2dldDsKKwl9CisKKwlyZXQgPSB3bTg5OTRfcmVnX3JlYWQod204OTk0LCBXTTg5OTRfU09GVFdBUkVfUkVTRVQpOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIod204OTk0LT5kZXYsICJGYWlsZWQgdG8gcmVhZCBJRCByZWdpc3RlclxuIik7CisJCWdvdG8gZXJyX2VuYWJsZTsKKwl9CisJaWYgKHJldCAhPSAweDg5OTQpIHsKKwkJZGV2X2Vycih3bTg5OTQtPmRldiwgIkRldmljZSBpcyBub3QgYSBXTTg5OTQsIElEIGlzICV4XG4iLAorCQkJcmV0KTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnJfZW5hYmxlOworCX0KKworCXJldCA9IHdtODk5NF9yZWdfcmVhZCh3bTg5OTQsIFdNODk5NF9DSElQX1JFVklTSU9OKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKHdtODk5NC0+ZGV2LCAiRmFpbGVkIHRvIHJlYWQgcmV2aXNpb24gcmVnaXN0ZXI6ICVkXG4iLAorCQkJcmV0KTsKKwkJZ290byBlcnJfZW5hYmxlOworCX0KKworCXN3aXRjaCAocmV0KSB7CisJY2FzZSAwOgorCWNhc2UgMToKKwkJZGV2X3dhcm4od204OTk0LT5kZXYsICJyZXZpc2lvbiAlYyBub3QgZnVsbHkgc3VwcG9ydGVkXG4iLAorCQkJJ0EnICsgcmV0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2luZm8od204OTk0LT5kZXYsICJyZXZpc2lvbiAlY1xuIiwgJ0EnICsgcmV0KTsKKwkJYnJlYWs7CisJfQorCisKKwlpZiAocGRhdGEpIHsKKwkJd204OTk0LT5ncGlvX2Jhc2UgPSBwZGF0YS0+Z3Bpb19iYXNlOworCisJCS8qIEdQSU8gY29uZmlndXJhdGlvbiBpcyBvbmx5IGFwcGxpZWQgaWYgaXQncyBub24temVybyAqLworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZGF0YS0+Z3Bpb19kZWZhdWx0cyk7IGkrKykgeworCQkJaWYgKHBkYXRhLT5ncGlvX2RlZmF1bHRzW2ldKSB7CisJCQkJd204OTk0X3NldF9iaXRzKHdtODk5NCwgV004OTk0X0dQSU9fMSArIGksCisJCQkJCQkweGZmZmYsCisJCQkJCQlwZGF0YS0+Z3Bpb19kZWZhdWx0c1tpXSk7CisJCQl9CisJCX0KKwl9CisKKwkvKiBJbiBzb21lIHN5c3RlbSBkZXNpZ25zIHdoZXJlIHRoZSByZWd1bGF0b3JzIGFyZSBub3QgaW4gdXNlLAorCSAqIHdlIGNhbiBhY2hpZXZlIGEgc21hbGwgcmVkdWN0aW9uIGluIGxlYWthZ2UgY3VycmVudHMgYnkKKwkgKiBmbG9hdGluZyBMRE8gb3V0cHV0cy4gIFRoaXMgYml0IG1ha2VzIG5vIGRpZmZlcmVuY2UgaWYgdGhlCisJICogTERPcyBhcmUgZW5hYmxlZCwgaXQgb25seSBhZmZlY3RzIGNhc2VzIHdoZXJlIHRoZSBMRE9zIHdlcmUKKwkgKiBpbiBvcGVyYXRpb24gYW5kIGFyZSB0aGVuIGRpc2FibGVkLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBXTTg5OTRfTlVNX0xET19SRUdTOyBpKyspIHsKKwkJaWYgKHdtODk5NF9sZG9faW5fdXNlKHBkYXRhLCBpKSkKKwkJCXdtODk5NF9zZXRfYml0cyh3bTg5OTQsIFdNODk5NF9MRE9fMSArIGksCisJCQkJCVdNODk5NF9MRE8xX0RJU0NILCBXTTg5OTRfTERPMV9ESVNDSCk7CisJCWVsc2UKKwkJCXdtODk5NF9zZXRfYml0cyh3bTg5OTQsIFdNODk5NF9MRE9fMSArIGksCisJCQkJCVdNODk5NF9MRE8xX0RJU0NILCAwKTsKKwl9CisKKwlyZXQgPSBtZmRfYWRkX2RldmljZXMod204OTk0LT5kZXYsIC0xLAorCQkJICAgICAgd204OTk0X2RldnMsIEFSUkFZX1NJWkUod204OTk0X2RldnMpLAorCQkJICAgICAgTlVMTCwgMCk7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9lcnIod204OTk0LT5kZXYsICJGYWlsZWQgdG8gYWRkIGNoaWxkcmVuOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfZW5hYmxlOworCX0KKworCXJldHVybiAwOworCitlcnJfZW5hYmxlOgorCXJlZ3VsYXRvcl9idWxrX2Rpc2FibGUoQVJSQVlfU0laRSh3bTg5OTRfbWFpbl9zdXBwbGllcyksCisJCQkgICAgICAgd204OTk0LT5zdXBwbGllcyk7CitlcnJfZ2V0OgorCXJlZ3VsYXRvcl9idWxrX2ZyZWUoQVJSQVlfU0laRSh3bTg5OTRfbWFpbl9zdXBwbGllcyksIHdtODk5NC0+c3VwcGxpZXMpOworZXJyX3N1cHBsaWVzOgorCWtmcmVlKHdtODk5NC0+c3VwcGxpZXMpOworZXJyOgorCW1mZF9yZW1vdmVfZGV2aWNlcyh3bTg5OTQtPmRldik7CisJa2ZyZWUod204OTk0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB3bTg5OTRfZGV2aWNlX2V4aXQoc3RydWN0IHdtODk5NCAqd204OTk0KQoreworCW1mZF9yZW1vdmVfZGV2aWNlcyh3bTg5OTQtPmRldik7CisJcmVndWxhdG9yX2J1bGtfZGlzYWJsZShBUlJBWV9TSVpFKHdtODk5NF9tYWluX3N1cHBsaWVzKSwKKwkJCSAgICAgICB3bTg5OTQtPnN1cHBsaWVzKTsKKwlyZWd1bGF0b3JfYnVsa19mcmVlKEFSUkFZX1NJWkUod204OTk0X21haW5fc3VwcGxpZXMpLCB3bTg5OTQtPnN1cHBsaWVzKTsKKwlrZnJlZSh3bTg5OTQtPnN1cHBsaWVzKTsKKwlrZnJlZSh3bTg5OTQpOworfQorCitzdGF0aWMgaW50IHdtODk5NF9pMmNfcmVhZF9kZXZpY2Uoc3RydWN0IHdtODk5NCAqd204OTk0LCB1bnNpZ25lZCBzaG9ydCByZWcsCisJCQkJICBpbnQgYnl0ZXMsIHZvaWQgKmRlc3QpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IHdtODk5NC0+Y29udHJvbF9kYXRhOworCWludCByZXQ7CisJdTE2IHIgPSBjcHVfdG9fYmUxNihyZWcpOworCisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGkyYywgKHVuc2lnbmVkIGNoYXIgKikmciwgMik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKHJldCAhPSAyKQorCQlyZXR1cm4gLUVJTzsKKworCXJldCA9IGkyY19tYXN0ZXJfcmVjdihpMmMsIGRlc3QsIGJ5dGVzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocmV0ICE9IGJ5dGVzKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworLyogQ3VycmVudGx5IHdlIGFsbG9jYXRlIHRoZSB3cml0ZSBidWZmZXIgb24gdGhlIHN0YWNrOyB0aGlzIGlzIE9LIGZvcgorICogc21hbGwgd3JpdGVzIC0gaWYgd2UgbmVlZCB0byBkbyBsYXJnZSB3cml0ZXMgdGhpcyB3aWxsIG5lZWQgdG8gYmUKKyAqIHJldmlzZWQuCisgKi8KK3N0YXRpYyBpbnQgd204OTk0X2kyY193cml0ZV9kZXZpY2Uoc3RydWN0IHdtODk5NCAqd204OTk0LCB1bnNpZ25lZCBzaG9ydCByZWcsCisJCQkJICAgaW50IGJ5dGVzLCB2b2lkICpzcmMpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmkyYyA9IHdtODk5NC0+Y29udHJvbF9kYXRhOworCXVuc2lnbmVkIGNoYXIgbXNnW2J5dGVzICsgMl07CisJaW50IHJldDsKKworCXJlZyA9IGNwdV90b19iZTE2KHJlZyk7CisJbWVtY3B5KCZtc2dbMF0sICZyZWcsIDIpOworCW1lbWNweSgmbXNnWzJdLCBzcmMsIGJ5dGVzKTsKKworCXJldCA9IGkyY19tYXN0ZXJfc2VuZChpMmMsIG1zZywgYnl0ZXMgKyAyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAocmV0IDwgYnl0ZXMgKyAyKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5NF9pMmNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHdtODk5NCAqd204OTk0OworCisJd204OTk0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdtODk5NCksIEdGUF9LRVJORUwpOworCWlmICh3bTg5OTQgPT0gTlVMTCkgeworCQlrZnJlZShpMmMpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCB3bTg5OTQpOworCXdtODk5NC0+ZGV2ID0gJmkyYy0+ZGV2OworCXdtODk5NC0+Y29udHJvbF9kYXRhID0gaTJjOworCXdtODk5NC0+cmVhZF9kZXYgPSB3bTg5OTRfaTJjX3JlYWRfZGV2aWNlOworCXdtODk5NC0+d3JpdGVfZGV2ID0gd204OTk0X2kyY193cml0ZV9kZXZpY2U7CisKKwlyZXR1cm4gd204OTk0X2RldmljZV9pbml0KHdtODk5NCwgaWQtPmRyaXZlcl9kYXRhLCBpMmMtPmlycSk7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X2kyY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmkyYykKK3sKKwlzdHJ1Y3Qgd204OTk0ICp3bTg5OTQgPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTsKKworCXdtODk5NF9kZXZpY2VfZXhpdCh3bTg5OTQpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgd204OTk0X2kyY19zdXNwZW5kKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gd204OTk0X2RldmljZV9zdXNwZW5kKCZpMmMtPmRldik7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X2kyY19yZXN1bWUoc3RydWN0IGkyY19jbGllbnQgKmkyYykKK3sKKwlyZXR1cm4gd204OTk0X2RldmljZV9yZXN1bWUoJmkyYy0+ZGV2KTsKK30KKyNlbHNlCisjZGVmaW5lIHdtODk5NF9pMmNfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHdtODk5NF9pMmNfcmVzdW1lIE5VTEwKKyNlbmRpZgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd204OTk0X2kyY19pZFtdID0geworCXsgIndtODk5NCIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgd204OTk0X2kyY19pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB3bTg5OTRfaTJjX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkgICAubmFtZSA9ICJ3bTg5OTQiLAorCQkgICAub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCS5wcm9iZSA9IHdtODk5NF9pMmNfcHJvYmUsCisJLnJlbW92ZSA9IHdtODk5NF9pMmNfcmVtb3ZlLAorCS5zdXNwZW5kID0gd204OTk0X2kyY19zdXNwZW5kLAorCS5yZXN1bWUgPSB3bTg5OTRfaTJjX3Jlc3VtZSwKKwkuaWRfdGFibGUgPSB3bTg5OTRfaTJjX2lkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgd204OTk0X2kyY19pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IGkyY19hZGRfZHJpdmVyKCZ3bTg5OTRfaTJjX2RyaXZlcik7CisJaWYgKHJldCAhPSAwKQorCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciB3bTg5OTQgSTJDIGRyaXZlcjogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorbW9kdWxlX2luaXQod204OTk0X2kyY19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHdtODk5NF9pMmNfZXhpdCh2b2lkKQoreworCWkyY19kZWxfZHJpdmVyKCZ3bTg5OTRfaTJjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdCh3bTg5OTRfaTJjX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkNvcmUgc3VwcG9ydCBmb3IgdGhlIFdNODk5NCBhdWRpbyBDT0RFQyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCmluZGV4IGUzNTUxZDIuLmQxNmFmNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWlzYy9LY29uZmlnCkBAIC0yMTIsNiArMjEyLDE1IEBACiAJICB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBJUlEgYnkgZGVmYXVsdC4gIFRoaXMgaXMgaGVyZSBmb3IKIAkgIGFyY2hpdGVjdHVyZXMgdG8gc2V0IGFzIG5lY2Vzc2FyeS4KIAorY29uZmlnIENTNTUzNV9DTE9DS19FVkVOVF9TUkMKKwl0cmlzdGF0ZSAiQ1M1NTM1L0NTNTUzNiBoaWdoLXJlcyB0aW1lciAoTUZHUFQpIGV2ZW50cyIKKwlkZXBlbmRzIG9uIEdFTkVSSUNfVElNRSAmJiBHRU5FUklDX0NMT0NLRVZFTlRTICYmIENTNTUzNV9NRkdQVAorCWhlbHAKKwkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIGEgY2xvY2sgZXZlbnQgc291cmNlIGJhc2VkIG9uIHRoZSBNRkdQVAorCSAgdGltZXIocykgaW4gdGhlIENTNTUzNSBhbmQgQ1M1NTM2IGNvbXBhbmlvbiBjaGlwcy4KKwkgIE1GR1BUcyBoYXZlIGEgYmV0dGVyIHJlc29sdXRpb24gYW5kIG1heCBpbnRlcnZhbCB0aGFuIHRoZQorCSAgZ2VuZXJpYyBQSVQsIGFuZCBhcmUgc3VpdGFibGUgZm9yIHVzZSBhcyBoaWdoLXJlcyB0aW1lcnMuCisKIGNvbmZpZyBIUF9JTE8KIAl0cmlzdGF0ZSAiQ2hhbm5lbCBpbnRlcmZhY2UgZHJpdmVyIGZvciBIUCBpTE8vaUxPMiBwcm9jZXNzb3IiCiAJZGVwZW5kcyBvbiBQQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9mdy1kb3dubG9hZC5jIGIvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL2Z3LWRvd25sb2FkLmMKaW5kZXggNTBkNDMxZTQuLjlkYmFlYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9mdy1kb3dubG9hZC5jCisrKyBiL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9mdy1kb3dubG9hZC5jCkBAIC00MywxNSArNDMsMTQgQEAKIAlzdHJ1Y3QgaXdtY3RfcGFyc2VyICpwYXJzZXIgPSAmcHJpdi0+cGFyc2VyOwogCXN0cnVjdCBpd21jdF9md19oZHIgKmZ3X2hkciA9ICZwYXJzZXItPnZlcnNpb25zOwogCi0JTE9HX0lORk9FWChwcml2LCBJTklULCAiLS0+XG4iKTsKKwlMT0dfVFJBQ0UocHJpdiwgRldfRE9XTkxPQUQsICItLT5cbiIpOwogCiAJTE9HX0lORk8ocHJpdiwgRldfRE9XTkxPQUQsICJmaWxlX3NpemU9JXpkXG4iLCBmaWxlX3NpemUpOwogCiAJcGFyc2VyLT5maWxlID0gZmlsZTsKIAlwYXJzZXItPmZpbGVfc2l6ZSA9IGZpbGVfc2l6ZTsKIAlwYXJzZXItPmN1cl9wb3MgPSAwOwotCXBhcnNlci0+YnVmID0gTlVMTDsKLQorCXBhcnNlci0+ZW50cnlfcG9pbnQgPSAwOwogCXBhcnNlci0+YnVmID0ga3phbGxvYyhibG9ja19zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXBhcnNlci0+YnVmKSB7CiAJCUxPR19FUlJPUihwcml2LCBGV19ET1dOTE9BRCwgImt6YWxsb2MgZXJyb3JcbiIpOwpAQCAtNzAsNyArNjksNyBAQAogCiAJcGFyc2VyLT5jdXJfcG9zICs9IHNpemVvZihzdHJ1Y3QgaXdtY3RfZndfaGRyKTsKIAotCUxPR19JTkZPRVgocHJpdiwgSU5JVCwgIjwtLVxuIik7CisJTE9HX1RSQUNFKHByaXYsIEZXX0RPV05MT0FELCAiPC0tXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTEzLDcgKzExMiw3IEBACiAJc3RydWN0IGl3bWN0X2RiZyAqZGJnID0gJnByaXYtPmRiZzsKIAlzdHJ1Y3QgaXdtY3RfZndfc2VjX2hkciAqc2VjX2hkcjsKIAotCUxPR19JTkZPRVgocHJpdiwgSU5JVCwgIi0tPlxuIik7CisJTE9HX1RSQUNFKHByaXYsIEZXX0RPV05MT0FELCAiLS0+XG4iKTsKIAogCXdoaWxlIChwYXJzZXItPmN1cl9wb3MgKyBzaXplb2Yoc3RydWN0IGl3bWN0X2Z3X3NlY19oZHIpCiAJCTw9IHBhcnNlci0+ZmlsZV9zaXplKSB7CkBAIC0xNTIsNyArMTUxLDcgQEAKIAkJCSJmaW5pc2hlZCB3aXRoIHNlY3Rpb24gY3VyX3Bvcz0lemRcbiIsIHBhcnNlci0+Y3VyX3Bvcyk7CiAJfQogCi0JTE9HX0lORk9FWChwcml2LCBJTklULCAiPC0tXG4iKTsKKwlMT0dfVFJBQ0UocHJpdiwgSU5JVCwgIjwtLVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2Nyw3ICsxNjYsNyBAQAogCWludCByZXQgPSAwOwogCXUzMiBjbWQgPSAwOwogCi0JTE9HX0lORk9FWChwcml2LCBJTklULCAiLS0+XG4iKTsKKwlMT0dfVFJBQ0UocHJpdiwgRldfRE9XTkxPQUQsICItLT5cbiIpOwogCUxPR19JTkZPKHByaXYsIEZXX0RPV05MT0FELCAiRG93bmxvYWQgYWRkcmVzcyAweCV4IHNpemUgMHglenhcbiIsCiAJCQkJYWRkciwgc2VjX3NpemUpOwogCkBAIC0yMjksNyArMjI4LDcgQEAKIAkJaGRyLT5jbWQgPSBjcHVfdG9fbGUzMihjbWQpOwogCQkvKiBzZW5kIGl0IGRvd24gKi8KIAkJLyogVE9ETzogYWRkIG1vcmUgcHJvcGVyIHNlbmRpbmcgYW5kIGVycm9yIGNoZWNraW5nICovCi0JCXJldCA9IGl3bWN0X3R4KHByaXYsIDAsIHBhcnNlci0+YnVmLCB0cmFuc19zaXplKTsKKwkJcmV0ID0gaXdtY3RfdHgocHJpdiwgcGFyc2VyLT5idWYsIHRyYW5zX3NpemUpOwogCQlpZiAocmV0ICE9IDApIHsKIAkJCUxPR19JTkZPKHByaXYsIEZXX0RPV05MT0FELAogCQkJCSJpd21jdF90eCByZXR1cm5lZCAlZFxuIiwgcmV0KTsKQEAgLTI1MSw3ICsyNTAsNyBAQAogCWlmIChzZW50IDwgc2VjX3NpemUpCiAJCXJldCA9IC1FSU5WQUw7CiBleGl0OgotCUxPR19JTkZPRVgocHJpdiwgSU5JVCwgIjwtLVxuIik7CisJTE9HX1RSQUNFKHByaXYsIEZXX0RPV05MT0FELCAiPC0tXG4iKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNjIsNyArMjYxLDcgQEAKIAlpbnQgcmV0OwogCXUzMiBjbWQ7CiAKLQlMT0dfSU5GT0VYKHByaXYsIElOSVQsICItLT5cbiIpOworCUxPR19UUkFDRShwcml2LCBGV19ET1dOTE9BRCwgIi0tPlxuIik7CiAKIAltZW1zZXQocGFyc2VyLT5idWYsIDAsIHBhcnNlci0+YnVmX3NpemUpOwogCWNtZCA9IElXTUNfQ01EX1NJR05BVFVSRSA8PCBDTURfSERSX1NJR05BVFVSRV9QT1M7CkBAIC0yODEsMTEgKzI4MCwxMSBAQAogCUxPR19IRVhEVU1QKEZXX0RPV05MT0FELCBwYXJzZXItPmJ1Ziwgc2l6ZW9mKCpoZHIpKTsKIAkvKiBzZW5kIGl0IGRvd24gKi8KIAkvKiBUT0RPOiBhZGQgbW9yZSBwcm9wZXIgc2VuZGluZyBhbmQgZXJyb3IgY2hlY2tpbmcgKi8KLQlyZXQgPSBpd21jdF90eChwcml2LCAwLCBwYXJzZXItPmJ1ZiwgSVdNQ19TRElPX0JMS19TSVpFKTsKKwlyZXQgPSBpd21jdF90eChwcml2LCBwYXJzZXItPmJ1ZiwgSVdNQ19TRElPX0JMS19TSVpFKTsKIAlpZiAocmV0KQogCQlMT0dfSU5GTyhwcml2LCBGV19ET1dOTE9BRCwgIml3bWN0X3R4IHJldHVybmVkICVkIiwgcmV0KTsKIAotCUxPR19JTkZPRVgocHJpdiwgSU5JVCwgIjwtLVxuIik7CisJTE9HX1RSQUNFKHByaXYsIEZXX0RPV05MT0FELCAiPC0tXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjk4LDggKzI5NywxNiBAQAogCV9fbGUzMiBhZGRyOwogCWludCByZXQ7CiAKLQkvKiBjbGVhciBwYXJzZXIgc3RydWN0ICovCi0JbWVtc2V0KCZwcml2LT5wYXJzZXIsIDAsIHNpemVvZihzdHJ1Y3QgaXdtY3RfcGFyc2VyKSk7CisKKwlMT0dfSU5GTyhwcml2LCBGV19ET1dOTE9BRCwgImJhcmtlciBkb3dubG9hZCByZXF1ZXN0IDB4JXggaXM6XG4iLAorCQkJcHJpdi0+YmFya2VyKTsKKwlMT0dfSU5GTyhwcml2LCBGV19ET1dOTE9BRCwgIioqKioqKiogIFRvcCBGVyAlcyByZXF1ZXN0ZWQgKioqKioqKipcbiIsCisJCQkocHJpdi0+YmFya2VyICYgQkFSS0VSX0ROTE9BRF9UT1BfTVNLKSA/ICJ3YXMiIDogIm5vdCIpOworCUxPR19JTkZPKHByaXYsIEZXX0RPV05MT0FELCAiKioqKioqKiAgR1BTIEZXICVzIHJlcXVlc3RlZCAqKioqKioqKlxuIiwKKwkJCShwcml2LT5iYXJrZXIgJiBCQVJLRVJfRE5MT0FEX0dQU19NU0spID8gIndhcyIgOiAibm90Iik7CisJTE9HX0lORk8ocHJpdiwgRldfRE9XTkxPQUQsICIqKioqKioqICBCVCBGVyAlcyByZXF1ZXN0ZWQgKioqKioqKipcbiIsCisJCQkocHJpdi0+YmFya2VyICYgQkFSS0VSX0ROTE9BRF9CVF9NU0spID8gIndhcyIgOiAibm90Iik7CisKIAogCS8qIGdldCB0aGUgZmlybXdhcmUgKi8KIAlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZyYXcsIGZ3X25hbWUsICZwcml2LT5mdW5jLT5kZXYpOwpAQCAtMzE3LDYgKzMyNCw3IEBACiAKIAlMT0dfSU5GTyhwcml2LCBGV19ET1dOTE9BRCwgIlJlYWQgZmlybXdhcmUgJyVzJ1xuIiwgZndfbmFtZSk7CiAKKwkvKiBjbGVhciBwYXJzZXIgc3RydWN0ICovCiAJcmV0ID0gaXdtY3RfZndfcGFyc2VyX2luaXQocHJpdiwgcmF3LT5kYXRhLCByYXctPnNpemUsIHByaXYtPnRyYW5zX2xlbik7CiAJaWYgKHJldCA8IDApIHsKIAkJTE9HX0VSUk9SKHByaXYsIEZXX0RPV05MT0FELApAQCAtMzI0LDcgKzMzMiw2IEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKLQkvKiBjaGVja3N1bSAgKi8KIAlpZiAoIWl3bWN0X2NoZWNrc3VtKHByaXYpKSB7CiAJCUxPR19FUlJPUihwcml2LCBGV19ET1dOTE9BRCwgImNoZWNrc3VtIGVycm9yXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKQEAgLTMzMywyMyArMzQwLDE4IEBACiAKIAkvKiBkb3dubG9hZCBmaXJtd2FyZSB0byBkZXZpY2UgKi8KIAl3aGlsZSAoaXdtY3RfcGFyc2VfbmV4dF9zZWN0aW9uKHByaXYsICZwZGF0YSwgJmxlbiwgJmFkZHIpKSB7Ci0JCWlmIChpd21jdF9kb3dubG9hZF9zZWN0aW9uKHByaXYsIHBkYXRhLCBsZW4sIGFkZHIpKSB7CisJCXJldCA9IGl3bWN0X2Rvd25sb2FkX3NlY3Rpb24ocHJpdiwgcGRhdGEsIGxlbiwgYWRkcik7CisJCWlmIChyZXQpIHsKIAkJCUxPR19FUlJPUihwcml2LCBGV19ET1dOTE9BRCwKIAkJCQkgICIlcyBkb3dubG9hZCBzZWN0aW9uIGZhaWxlZFxuIiwgZndfbmFtZSk7Ci0JCQlyZXQgPSAtRUlPOwogCQkJZ290byBleGl0OwogCQl9CiAJfQogCi0JaXdtY3Rfa2lja19mdyhwcml2LCAhIShwcml2LT5iYXJrZXIgJiBCQVJLRVJfRE5MT0FEX0pVTVBfTVNLKSk7CisJcmV0ID0gaXdtY3Rfa2lja19mdyhwcml2LCAhIShwcml2LT5iYXJrZXIgJiBCQVJLRVJfRE5MT0FEX0pVTVBfTVNLKSk7CiAKIGV4aXQ6CiAJa2ZyZWUocHJpdi0+cGFyc2VyLmJ1Zik7Ci0KLQlpZiAocmF3KQotCQlyZWxlYXNlX2Zpcm13YXJlKHJhdyk7Ci0KLQlyYXcgPSBOVUxMOwotCisJcmVsZWFzZV9maXJtd2FyZShyYXcpOwogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaXdtYzMyMDB0b3AvaXdtYzMyMDB0b3AuaCBiL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9pd21jMzIwMHRvcC5oCmluZGV4IDQzYmQ1MTAuLjc0MGZmMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9pd21jMzIwMHRvcC5oCisrKyBiL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9pd21jMzIwMHRvcC5oCkBAIC0xOTYsOSArMTk2LDcgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHJlYWRfcmVxX2xpc3Q7CiB9OwogCi1leHRlcm4gaW50IGl3bWN0X3R4KHN0cnVjdCBpd21jdF9wcml2ICpwcml2LCB1bnNpZ25lZCBpbnQgYWRkciwKLQkJdm9pZCAqc3JjLCBpbnQgY291bnQpOwotCitleHRlcm4gaW50IGl3bWN0X3R4KHN0cnVjdCBpd21jdF9wcml2ICpwcml2LCB2b2lkICpzcmMsIGludCBjb3VudCk7CiBleHRlcm4gaW50IGl3bWN0X2Z3X2xvYWQoc3RydWN0IGl3bWN0X3ByaXYgKnByaXYpOwogCiBleHRlcm4gdm9pZCBpd21jdF9kYmdfaW5pdF9wYXJhbXMoc3RydWN0IGl3bWN0X3ByaXYgKmRydik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaXdtYzMyMDB0b3AvbG9nLmggYi9kcml2ZXJzL21pc2MvaXdtYzMyMDB0b3AvbG9nLmgKaW5kZXggYWJhODEyMS4uNDQzNGJiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL2xvZy5oCisrKyBiL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9sb2cuaApAQCAtMzcsMTMgKzM3LDI2IEBACiAjZGVmaW5lIExPR19TRVZfSU5GTwkJCTMKICNkZWZpbmUgTE9HX1NFVl9JTkZPRVgJCQk0CiAKLSNkZWZpbmUgTE9HX1NFVl9GSUxURVJfQUxMCQlcCi0JKEJJVChMT0dfU0VWX0NSSVRJQ0FMKSB8CVwKLQkgQklUKExPR19TRVZfRVJST1IpICAgIHwJXAotCSBCSVQoTE9HX1NFVl9XQVJOSU5HKSAgfCAJXAotCSBCSVQoTE9HX1NFVl9JTkZPKSAgICAgfAlcCisvKiBMb2cgbGV2ZWxzIG5vdCBkZWZpbmVkIGZvciBGVyAqLworI2RlZmluZSBMT0dfU0VWX1RSQUNFCQkJNQorI2RlZmluZSBMT0dfU0VWX0RVTVAJCQk2CisKKyNkZWZpbmUgTE9HX1NFVl9GV19GSUxURVJfQUxMCQlcCisJKEJJVChMT0dfU0VWX0NSSVRJQ0FMKQl8CVwKKwkgQklUKExPR19TRVZfRVJST1IpCXwJXAorCSBCSVQoTE9HX1NFVl9XQVJOSU5HKQl8IAlcCisJIEJJVChMT0dfU0VWX0lORk8pCXwJXAogCSBCSVQoTE9HX1NFVl9JTkZPRVgpKQogCisjZGVmaW5lIExPR19TRVZfRklMVEVSX0FMTAkJXAorCShCSVQoTE9HX1NFVl9DUklUSUNBTCkJfAlcCisJIEJJVChMT0dfU0VWX0VSUk9SKQl8CVwKKwkgQklUKExPR19TRVZfV0FSTklORykJfCAJXAorCSBCSVQoTE9HX1NFVl9JTkZPKQl8CVwKKwkgQklUKExPR19TRVZfSU5GT0VYKQl8CVwKKwkgQklUKExPR19TRVZfVFJBQ0UpCXwJXAorCSBCSVQoTE9HX1NFVl9EVU1QKSkKKwogLyogbG9nIHNvdXJjZSAqLwogI2RlZmluZSBMT0dfU1JDX0lOSVQJCQkwCiAjZGVmaW5lIExPR19TUkNfREVCVUdGUwkJCTEKQEAgLTEwNCwxNiArMTE3LDE2IEBACiAJCQkgX19mdW5jX18sIF9fTElORV9fLCAjI2FyZ3MpOwkJCVwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgTE9HX0lORk9FWChwcml2LCBzcmMsIGZtdCwgYXJncy4uLikJCQkJXAorI2RlZmluZSBMT0dfVFJBQ0UocHJpdiwgc3JjLCBmbXQsIGFyZ3MuLi4pCQkJCVwKIGRvIHsJCQkJCQkJCQlcCi0JaWYgKGl3bWN0X2xvZ2RlZnNbTE9HX1NSQ18gIyMgc3JjXSAmIEJJVChMT0dfU0VWX0lORk9FWCkpCVwKKwlpZiAoaXdtY3RfbG9nZGVmc1tMT0dfU1JDXyAjIyBzcmNdICYgQklUKExPR19TRVZfVFJBQ0UpKQlcCiAJCWRldl9kYmcocHJpdjJkZXYocHJpdiksICIlcyAlZDogIiBmbXQsCQkJXAogCQkJIF9fZnVuY19fLCBfX0xJTkVfXywgIyNhcmdzKTsJCQlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIExPR19IRVhEVU1QKHNyYywgcHRyLCBsZW4pCQkJCQlcCiBkbyB7CQkJCQkJCQkJXAotCWlmIChpd21jdF9sb2dkZWZzW0xPR19TUkNfICMjIHNyY10gJiBCSVQoTE9HX1NFVl9JTkZPRVgpKQlcCisJaWYgKGl3bWN0X2xvZ2RlZnNbTE9HX1NSQ18gIyMgc3JjXSAmIEJJVChMT0dfU0VWX0RVTVApKQlcCiAJCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICIiLCBEVU1QX1BSRUZJWF9OT05FLAlcCiAJCQkJMTYsIDEsIHB0ciwgbGVuLCBmYWxzZSk7CQlcCiB9IHdoaWxlICgwKQpAQCAtMTQyLDcgKzE1NSw3IEBACiAjZGVmaW5lIExPR19FUlJPUihwcml2LCBzcmMsIGZtdCwgYXJncy4uLikKICNkZWZpbmUgTE9HX1dBUk5JTkcocHJpdiwgc3JjLCBmbXQsIGFyZ3MuLi4pCiAjZGVmaW5lIExPR19JTkZPKHByaXYsIHNyYywgZm10LCBhcmdzLi4uKQotI2RlZmluZSBMT0dfSU5GT0VYKHByaXYsIHNyYywgZm10LCBhcmdzLi4uKQorI2RlZmluZSBMT0dfVFJBQ0UocHJpdiwgc3JjLCBmbXQsIGFyZ3MuLi4pCiAjZGVmaW5lIExPR19IRVhEVU1QKHNyYywgcHRyLCBsZW4pCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpd21jdF9sb2dfdG9wX21lc3NhZ2Uoc3RydWN0IGl3bWN0X3ByaXYgKnByaXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2MvaXdtYzMyMDB0b3AvbWFpbi5jIGIvZHJpdmVycy9taXNjL2l3bWMzMjAwdG9wL21haW4uYwppbmRleCBmYWZjYWE0Li4zYjcyOTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvaXdtYzMyMDB0b3AvbWFpbi5jCisrKyBiL2RyaXZlcnMvbWlzYy9pd21jMzIwMHRvcC9tYWluLmMKQEAgLTQ5LDYgKzQ5LDIwIEBACiBNT0RVTEVfQVVUSE9SKERSSVZFUl9DT1BZUklHSFQpOwogTU9EVUxFX0ZJUk1XQVJFKEZXX05BTUUoRldfQVBJX1ZFUikpOwogCisKK3N0YXRpYyBpbmxpbmUgaW50IF9faXdtY3RfdHgoc3RydWN0IGl3bWN0X3ByaXYgKnByaXYsIHZvaWQgKnNyYywgaW50IGNvdW50KQoreworCXJldHVybiBzZGlvX21lbWNweV90b2lvKHByaXYtPmZ1bmMsIElXTUNfU0RJT19EQVRBX0FERFIsIHNyYywgY291bnQpOworCit9CitpbnQgaXdtY3RfdHgoc3RydWN0IGl3bWN0X3ByaXYgKnByaXYsIHZvaWQgKnNyYywgaW50IGNvdW50KQoreworCWludCByZXQ7CisJc2Rpb19jbGFpbV9ob3N0KHByaXYtPmZ1bmMpOworCXJldCA9ICBfX2l3bWN0X3R4KHByaXYsIHNyYywgY291bnQpOworCXNkaW9fcmVsZWFzZV9ob3N0KHByaXYtPmZ1bmMpOworCXJldHVybiByZXQ7Cit9CiAvKgogICogVGhpcyB3b3JrZXJzIG1haW4gdGFzayBpcyB0byB3YWl0IGZvciBPUF9PUFJfQUxJVkUKICAqIGZyb20gVE9QIEZXIHVudGlsIEFMSVZFX01TR19USU1PVVQgdGltZW91dCBpcyBlbGFwc2VkLgpAQCAtNjYsNyArODAsNyBAQAogCiAJcmV0ID0gYnVzX3Jlc2Nhbl9kZXZpY2VzKHByaXYtPmZ1bmMtPmRldi5idXMpOwogCWlmIChyZXQgPCAwKQotCQlMT0dfSU5GTyhwcml2LCBGV19ET1dOTE9BRCwgImJ1c19yZXNjYW5fZGV2aWNlcyBGQUlMRUQhISFcbiIpOworCQlMT0dfSU5GTyhwcml2LCBJTklULCAiYnVzX3Jlc2Nhbl9kZXZpY2VzIEZBSUxFRCEhIVxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIG9wX3RvcF9tZXNzYWdlKHN0cnVjdCBpd21jdF9wcml2ICpwcml2LCBzdHJ1Y3QgdG9wX21zZyAqbXNnKQpAQCAtMTM3LDcgKzE1MSw3IEBACiAJaW50IHJldDsKIAl1OCAqYnVmOwogCi0JTE9HX0lORk9FWChwcml2LCBGV19NU0csICJTZW5kaW5nIGhjbWQ6XG4iKTsKKwlMT0dfVFJBQ0UocHJpdiwgRldfTVNHLCAiU2VuZGluZyBoY21kOlxuIik7CiAKIAkvKiBhZGQgcGFkZGluZyB0byAyNTYgZm9yIElXTUMgKi8KIAkoKHN0cnVjdCB0b3BfbXNnICopY21kKS0+aGRyLmZsYWdzIHw9IENNRF9GTEFHX1BBRERJTkdfMjU2OwpAQCAtMTU4LDI3ICsxNzIsMTIgQEAKIAl9CiAKIAltZW1jcHkoYnVmLCBjbWQsIGxlbik7Ci0KLQlzZGlvX2NsYWltX2hvc3QocHJpdi0+ZnVuYyk7Ci0JcmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhwcml2LT5mdW5jLCBJV01DX1NESU9fREFUQV9BRERSLCBidWYsCi0JCQkgICAgICAgRldfSENNRF9CTE9DS19TSVpFKTsKLQlzZGlvX3JlbGVhc2VfaG9zdChwcml2LT5mdW5jKTsKKwlyZXQgPSBpd21jdF90eChwcml2LCBidWYsIEZXX0hDTURfQkxPQ0tfU0laRSk7CiAKIAlrZnJlZShidWYpOwogCXJldHVybiByZXQ7CiB9CiAKLWludCBpd21jdF90eChzdHJ1Y3QgaXdtY3RfcHJpdiAqcHJpdiwgdW5zaWduZWQgaW50IGFkZHIsCi0Jdm9pZCAqc3JjLCBpbnQgY291bnQpCi17Ci0JaW50IHJldDsKLQotCXNkaW9fY2xhaW1faG9zdChwcml2LT5mdW5jKTsKLQlyZXQgPSBzZGlvX21lbWNweV90b2lvKHByaXYtPmZ1bmMsIGFkZHIsIHNyYywgY291bnQpOwotCXNkaW9fcmVsZWFzZV9ob3N0KHByaXYtPmZ1bmMpOwotCi0JcmV0dXJuIHJldDsKLX0KIAogc3RhdGljIHZvaWQgaXdtY3RfaXJxX3JlYWRfd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd3MpCiB7CkBAIC0xOTIsNyArMTkxLDcgQEAKIAogCXByaXYgPSBjb250YWluZXJfb2Yod3MsIHN0cnVjdCBpd21jdF9wcml2LCBpc3Jfd29ya2VyKTsKIAotCUxPR19JTkZPKHByaXYsIElSUSwgImVudGVyIGl3bWN0X2lycV9yZWFkX3dvcmtlciAlcFxuIiwgd3MpOworCUxPR19UUkFDRShwcml2LCBJUlEsICJlbnRlciBpd21jdF9pcnFfcmVhZF93b3JrZXIgJXBcbiIsIHdzKTsKIAogCS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSBIYW5kc2hha2Ugd2l0aCBkZXZpY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlzZGlvX2NsYWltX2hvc3QocHJpdi0+ZnVuYyk7CkBAIC0yNzMsOCArMjcyLDcgQEAKIAogCQlpZiAoYmFya2VyICYgQkFSS0VSX0ROTE9BRF9TWU5DX01TSykgewogCQkJLyogU2VuZCB0aGUgc2FtZSBiYXJrZXIgYmFjayAqLwotCQkJcmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhwcml2LT5mdW5jLCBJV01DX1NESU9fREFUQV9BRERSLAotCQkJCQkgICAgICAgYnVmLCBpb3NpemUpOworCQkJcmV0ID0gX19pd21jdF90eChwcml2LCBidWYsIGlvc2l6ZSk7CiAJCQlpZiAocmV0KSB7CiAJCQkJTE9HX0VSUk9SKHByaXYsIElSUSwKIAkJCQkJICJlcnJvciAlZCBlY2hvaW5nIGJhcmtlclxuIiwgcmV0KTsKQEAgLTI5MiwxNSArMjkwLDYgQEAKIAogCXNkaW9fcmVsZWFzZV9ob3N0KHByaXYtPmZ1bmMpOwogCi0KLQlMT0dfSU5GTyhwcml2LCBJUlEsICJiYXJrZXIgZG93bmxvYWQgcmVxdWVzdCAweCV4IGlzOlxuIiwgcHJpdi0+YmFya2VyKTsKLQlMT0dfSU5GTyhwcml2LCBJUlEsICIqKioqKioqICBUb3AgRlcgJXMgcmVxdWVzdGVkICoqKioqKioqXG4iLAotCQkJKHByaXYtPmJhcmtlciAmIEJBUktFUl9ETkxPQURfVE9QX01TSykgPyAid2FzIiA6ICJub3QiKTsKLQlMT0dfSU5GTyhwcml2LCBJUlEsICIqKioqKioqICBHUFMgRlcgJXMgcmVxdWVzdGVkICoqKioqKioqXG4iLAotCQkJKHByaXYtPmJhcmtlciAmIEJBUktFUl9ETkxPQURfR1BTX01TSykgPyAid2FzIiA6ICJub3QiKTsKLQlMT0dfSU5GTyhwcml2LCBJUlEsICIqKioqKioqICBCVCBGVyAlcyByZXF1ZXN0ZWQgKioqKioqKipcbiIsCi0JCQkocHJpdi0+YmFya2VyICYgQkFSS0VSX0ROTE9BRF9CVF9NU0spID8gIndhcyIgOiAibm90Iik7Ci0KIAlpZiAocHJpdi0+ZGJnLmZ3X2Rvd25sb2FkKQogCQlpd21jdF9md19sb2FkKHByaXYpOwogCWVsc2UKQEAgLTMxMiw3ICszMDEsNyBAQAogCXNkaW9fcmVsZWFzZV9ob3N0KHByaXYtPmZ1bmMpOwogZXhpdDoKIAlrZnJlZShidWYpOwotCUxPR19JTkZPKHByaXYsIElSUSwgImV4aXQgaXdtY3RfaXJxX3JlYWRfd29ya2VyXG4iKTsKKwlMT0dfVFJBQ0UocHJpdiwgSVJRLCAiZXhpdCBpd21jdF9pcnFfcmVhZF93b3JrZXJcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBpd21jdF9pcnEoc3RydWN0IHNkaW9fZnVuYyAqZnVuYykKQEAgLTMyNSwxMiArMzE0LDEyIEBACiAKIAlwcml2ID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5jKTsKIAotCUxPR19JTkZPKHByaXYsIElSUSwgImVudGVyIGl3bWN0X2lycVxuIik7CisJTE9HX1RSQUNFKHByaXYsIElSUSwgImVudGVyIGl3bWN0X2lycVxuIik7CiAKIAkvKiByZWFkIHRoZSBmdW5jdGlvbidzIHN0YXR1cyByZWdpc3RlciAqLwogCXZhbCA9IHNkaW9fcmVhZGIoZnVuYywgSVdNQ19TRElPX0lOVFJfU1RBVFVTX0FERFIsICZyZXQpOwogCi0JTE9HX0lORk8ocHJpdiwgSVJRLCAiaWlyIHZhbHVlID0gJWQsIHJldD0lZFxuIiwgdmFsLCByZXQpOworCUxPR19UUkFDRShwcml2LCBJUlEsICJpaXIgdmFsdWUgPSAlZCwgcmV0PSVkXG4iLCB2YWwsIHJldCk7CiAKIAlpZiAoIXZhbCkgewogCQlMT0dfRVJST1IocHJpdiwgSVJRLCAiaWlyID0gMCwgZXhpdGluZyBJU1JcbiIpOwpAQCAtMzcyLDcgKzM2MSw3IEBACiAKIAlxdWV1ZV93b3JrKHByaXYtPndxLCAmcHJpdi0+aXNyX3dvcmtlcik7CiAKLQlMT0dfSU5GTyhwcml2LCBJUlEsICJleGl0IGl3bWN0X2lycVxuIik7CisJTE9HX1RSQUNFKHByaXYsIElSUSwgImV4aXQgaXdtY3RfaXJxXG4iKTsKIAogCXJldHVybjsKIApAQCAtNjA4LDggKzU5Nyw2IEBACiAJc3RydWN0IGl3bWN0X3dvcmtfc3RydWN0ICpyZWFkX3JlcTsKIAlzdHJ1Y3QgaXdtY3RfcHJpdiAqcHJpdiA9IHNkaW9fZ2V0X2RydmRhdGEoZnVuYyk7CiAKLQlwcml2ID0gc2Rpb19nZXRfZHJ2ZGF0YShmdW5jKTsKLQogCUxPR19JTkZPKHByaXYsIElOSVQsICJlbnRlclxuIik7CiAKIAlzZGlvX2NsYWltX2hvc3QoZnVuYyk7CkBAIC02NjAsNyArNjQ3LDcgQEAKIAogCS8qIERlZmF1bHQgbG9nIGZpbHRlciBzZXR0aW5ncyAqLwogCWl3bWN0X2xvZ19zZXRfZmlsdGVyKExPR19TUkNfQUxMLCBMT0dfU0VWX0ZJTFRFUl9SVU5USU1FKTsKLQlpd21jdF9sb2dfc2V0X2ZpbHRlcihMT0dfU1JDX0ZXX01TRywgTE9HX1NFVl9GSUxURVJfQUxMKTsKKwlpd21jdF9sb2dfc2V0X2ZpbHRlcihMT0dfU1JDX0ZXX01TRywgTE9HX1NFVl9GV19GSUxURVJfQUxMKTsKIAlpd21jdF9sb2dfc2V0X2Z3X2ZpbHRlcihMT0dfU1JDX0FMTCwgRldfTE9HX1NFVl9GSUxURVJfUlVOVElNRSk7CiAKIAlyYyA9IHNkaW9fcmVnaXN0ZXJfZHJpdmVyKCZpd21jdF9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2xrZHRtLmMgYi9kcml2ZXJzL21pc2MvbGtkdG0uYwppbmRleCAzNjQ4YjIzLi40YTA2NDgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21pc2MvbGtkdG0uYworKysgYi9kcml2ZXJzL21pc2MvbGtkdG0uYwpAQCAtMjYsMjEgKzI2LDkgQEAKICAqIEl0IGlzIGFkYXB0ZWQgZnJvbSB0aGUgTGludXggS2VybmVsIER1bXAgVGVzdCBUb29sIGJ5CiAgKiBGZXJuYW5kbyBMdWlzIFZhenF1ZXogQ2FvIDxodHRwOi8vbGtkdHQuc291cmNlZm9yZ2UubmV0PgogICoKLSAqIFVzYWdlIDogIGluc21vZCBsa2R0bS5rbyBbcmVjdXJfY291bnQ9ez4wfV0gY3BvaW50X25hbWU9PD4gY3BvaW50X3R5cGU9PD4KLSAqCQkJCQkJCVtjcG9pbnRfY291bnQ9ez4wfV0KKyAqIERlYnVnZnMgc3VwcG9ydCBhZGRlZCBieSBTaW1vbiBLYWdzdHJvbSA8c2ltb24ua2Fnc3Ryb21AbmV0aW5zaWdodC5uZXQ+CiAgKgotICogcmVjdXJfY291bnQgOiBSZWN1cnNpb24gbGV2ZWwgZm9yIHRoZSBzdGFjayBvdmVyZmxvdyB0ZXN0LiBEZWZhdWx0IGlzIDEwLgotICoKLSAqIGNwb2ludF9uYW1lIDogQ3Jhc2ggcG9pbnQgd2hlcmUgdGhlIGtlcm5lbCBpcyB0byBiZSBjcmFzaGVkLiBJdCBjYW4gYmUKLSAqCQkgb25lIG9mIElOVF9IQVJEV0FSRV9FTlRSWSwgSU5UX0hXX0lSUV9FTiwgSU5UX1RBU0tMRVRfRU5UUlksCi0gKgkJIEZTX0RFVlJXLCBNRU1fU1dBUE9VVCwgVElNRVJBREQsIFNDU0lfRElTUEFUQ0hfQ01ELAotICoJCSBJREVfQ09SRV9DUAotICoKLSAqIGNwb2ludF90eXBlIDogSW5kaWNhdGVzIHRoZSBhY3Rpb24gdG8gYmUgdGFrZW4gb24gaGl0dGluZyB0aGUgY3Jhc2ggcG9pbnQuCi0gKgkJIEl0IGNhbiBiZSBvbmUgb2YgUEFOSUMsIEJVRywgRVhDRVBUSU9OLCBMT09QLCBPVkVSRkxPVwotICoKLSAqIGNwb2ludF9jb3VudCA6IEluZGljYXRlcyB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBjcmFzaCBwb2ludCBpcyB0byBiZSBoaXQKLSAqCQkgIHRvIHRyaWdnZXIgYW4gYWN0aW9uLiBUaGUgZGVmYXVsdCBpcyAxMC4KKyAqIFNlZSBEb2N1bWVudGF0aW9uL2ZhdWx0LWluamVjdGlvbi9wcm92b2tlLWNyYXNoZXMudHh0IGZvciBpbnN0cnVjdGlvbnMKICAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC01MywxMyArNDEsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9ocnRpbWVyLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2NtbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAKICNpZmRlZiBDT05GSUdfSURFCiAjaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjZW5kaWYKIAotI2RlZmluZSBOVU1fQ1BPSU5UUyA4Ci0jZGVmaW5lIE5VTV9DUE9JTlRfVFlQRVMgNQogI2RlZmluZSBERUZBVUxUX0NPVU5UIDEwCiAjZGVmaW5lIFJFQ19OVU1fREVGQVVMVCAxMAogCkBAIC03Miw3ICs1OSw4IEBACiAJTUVNX1NXQVBPVVQsCiAJVElNRVJBREQsCiAJU0NTSV9ESVNQQVRDSF9DTUQsCi0JSURFX0NPUkVfQ1AKKwlJREVfQ09SRV9DUCwKKwlESVJFQ1QsCiB9OwogCiBlbnVtIGN0eXBlIHsKQEAgLTgxLDcgKzY5LDExIEBACiAJQlVHLAogCUVYQ0VQVElPTiwKIAlMT09QLAotCU9WRVJGTE9XCisJT1ZFUkZMT1csCisJQ09SUlVQVF9TVEFDSywKKwlVTkFMSUdORURfTE9BRF9TVE9SRV9XUklURSwKKwlPVkVSV1JJVEVfQUxMT0NBVElPTiwKKwlXUklURV9BRlRFUl9GUkVFLAogfTsKIAogc3RhdGljIGNoYXIqIGNwX25hbWVbXSA9IHsKQEAgLTkyLDcgKzg0LDggQEAKIAkiTUVNX1NXQVBPVVQiLAogCSJUSU1FUkFERCIsCiAJIlNDU0lfRElTUEFUQ0hfQ01EIiwKLQkiSURFX0NPUkVfQ1AiCisJIklERV9DT1JFX0NQIiwKKwkiRElSRUNUIiwKIH07CiAKIHN0YXRpYyBjaGFyKiBjcF90eXBlW10gPSB7CkBAIC0xMDAsNyArOTMsMTEgQEAKIAkiQlVHIiwKIAkiRVhDRVBUSU9OIiwKIAkiTE9PUCIsCi0JIk9WRVJGTE9XIgorCSJPVkVSRkxPVyIsCisJIkNPUlJVUFRfU1RBQ0siLAorCSJVTkFMSUdORURfTE9BRF9TVE9SRV9XUklURSIsCisJIk9WRVJXUklURV9BTExPQ0FUSU9OIiwKKwkiV1JJVEVfQUZURVJfRlJFRSIsCiB9OwogCiBzdGF0aWMgc3RydWN0IGpwcm9iZSBsa2R0bTsKQEAgLTE5MywzNCArMTkwLDY2IEBACiB9CiAjZW5kaWYKIAorLyogUmV0dXJuIHRoZSBjcmFzaHBvaW50IG51bWJlciBvciBOT05FIGlmIHRoZSBuYW1lIGlzIGludmFsaWQgKi8KK3N0YXRpYyBlbnVtIGN0eXBlIHBhcnNlX2NwX3R5cGUoY29uc3QgY2hhciAqd2hhdCwgc2l6ZV90IGNvdW50KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY3BfdHlwZSk7IGkrKykgeworCQlpZiAoIXN0cmNtcCh3aGF0LCBjcF90eXBlW2ldKSkKKwkJCXJldHVybiBpICsgMTsKKwl9CisKKwlyZXR1cm4gTk9ORTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKmNwX3R5cGVfdG9fc3RyKGVudW0gY3R5cGUgdHlwZSkKK3sKKwlpZiAodHlwZSA9PSBOT05FIHx8IHR5cGUgPCAwIHx8IHR5cGUgPiBBUlJBWV9TSVpFKGNwX3R5cGUpKQorCQlyZXR1cm4gIk5vbmUiOworCisJcmV0dXJuIGNwX3R5cGVbdHlwZSAtIDFdOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqY3BfbmFtZV90b19zdHIoZW51bSBjbmFtZSBuYW1lKQoreworCWlmIChuYW1lID09IElOVkFMSUQgfHwgbmFtZSA8IDAgfHwgbmFtZSA+IEFSUkFZX1NJWkUoY3BfbmFtZSkpCisJCXJldHVybiAiSU5WQUxJRCI7CisKKwlyZXR1cm4gY3BfbmFtZVtuYW1lIC0gMV07Cit9CisKKwogc3RhdGljIGludCBsa2R0bV9wYXJzZV9jb21tYW5kbGluZSh2b2lkKQogewogCWludCBpOwogCi0JaWYgKGNwb2ludF9uYW1lID09IE5VTEwgfHwgY3BvaW50X3R5cGUgPT0gTlVMTCB8fAotCQkJCQljcG9pbnRfY291bnQgPCAxIHx8IHJlY3VyX2NvdW50IDwgMSkKKwlpZiAoY3BvaW50X2NvdW50IDwgMSB8fCByZWN1cl9jb3VudCA8IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZm9yIChpID0gMDsgaSA8IE5VTV9DUE9JTlRTOyArK2kpIHsKLQkJaWYgKCFzdHJjbXAoY3BvaW50X25hbWUsIGNwX25hbWVbaV0pKSB7Ci0JCQljcG9pbnQgPSBpICsgMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IE5VTV9DUE9JTlRfVFlQRVM7ICsraSkgewotCQlpZiAoIXN0cmNtcChjcG9pbnRfdHlwZSwgY3BfdHlwZVtpXSkpIHsKLQkJCWNwdHlwZSA9IGkgKyAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoY3BvaW50ID09IElOVkFMSUQgfHwgY3B0eXBlID09IE5PTkUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0KIAljb3VudCA9IGNwb2ludF9jb3VudDsKIAotCXJldHVybiAwOworCS8qIE5vIHNwZWNpYWwgcGFyYW1ldGVycyAqLworCWlmICghY3BvaW50X3R5cGUgJiYgIWNwb2ludF9uYW1lKQorCQlyZXR1cm4gMDsKKworCS8qIE5laXRoZXIgb3IgYm90aCBvZiB0aGVzZSBuZWVkIHRvIGJlIHNldCAqLworCWlmICghY3BvaW50X3R5cGUgfHwgIWNwb2ludF9uYW1lKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNwdHlwZSA9IHBhcnNlX2NwX3R5cGUoY3BvaW50X3R5cGUsIHN0cmxlbihjcG9pbnRfdHlwZSkpOworCWlmIChjcHR5cGUgPT0gTk9ORSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjcF9uYW1lKTsgaSsrKSB7CisJCWlmICghc3RyY21wKGNwb2ludF9uYW1lLCBjcF9uYW1lW2ldKSkgeworCQkJY3BvaW50ID0gaSArIDE7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qIENvdWxkIG5vdCBmaW5kIGEgdmFsaWQgY3Jhc2ggcG9pbnQgKi8KKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIGludCByZWN1cnNpdmVfbG9vcChpbnQgYSkKQEAgLTIzNSw1MyArMjY0LDkyIEBACiAgICAgICAgIAlyZXR1cm4gcmVjdXJzaXZlX2xvb3AoYSk7CiB9CiAKLXZvaWQgbGtkdG1faGFuZGxlcih2b2lkKQorc3RhdGljIHZvaWQgbGtkdG1fZG9fYWN0aW9uKGVudW0gY3R5cGUgd2hpY2gpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAibGtkdG0gOiBDcmFzaCBwb2ludCAlcyBvZiB0eXBlICVzIGhpdFxuIiwKLQkJCQkJIGNwb2ludF9uYW1lLCBjcG9pbnRfdHlwZSk7Ci0JLS1jb3VudDsKKwlzd2l0Y2ggKHdoaWNoKSB7CisJY2FzZSBQQU5JQzoKKwkJcGFuaWMoImR1bXB0ZXN0Iik7CisJCWJyZWFrOworCWNhc2UgQlVHOgorCQlCVUcoKTsKKwkJYnJlYWs7CisJY2FzZSBFWENFUFRJT046CisJCSooKGludCAqKSAwKSA9IDA7CisJCWJyZWFrOworCWNhc2UgTE9PUDoKKwkJZm9yICg7OykKKwkJCTsKKwkJYnJlYWs7CisJY2FzZSBPVkVSRkxPVzoKKwkJKHZvaWQpIHJlY3Vyc2l2ZV9sb29wKDApOworCQlicmVhazsKKwljYXNlIENPUlJVUFRfU1RBQ0s6IHsKKwkJdm9sYXRpbGUgdTMyIGRhdGFbOF07CisJCXZvbGF0aWxlIHUzMiAqcCA9IGRhdGE7CisKKwkJcFsxMl0gPSAweDEyMzQ1Njc4OworCQlicmVhazsKKwl9CisJY2FzZSBVTkFMSUdORURfTE9BRF9TVE9SRV9XUklURTogeworCQlzdGF0aWMgdTggZGF0YVs1XSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDQpKSkgPSB7MSwgMiwKKwkJCQkzLCA0LCA1fTsKKwkJdTMyICpwOworCQl1MzIgdmFsID0gMHgxMjM0NTY3ODsKKworCQlwID0gKHUzMiAqKShkYXRhICsgMSk7CisJCWlmICgqcCA9PSAwKQorCQkJdmFsID0gMHg4NzY1NDMyMTsKKwkJKnAgPSB2YWw7CisJCSBicmVhazsKKwl9CisJY2FzZSBPVkVSV1JJVEVfQUxMT0NBVElPTjogeworCQlzaXplX3QgbGVuID0gMTAyMDsKKwkJdTMyICpkYXRhID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCisJCWRhdGFbMTAyNCAvIHNpemVvZih1MzIpXSA9IDB4MTIzNDU2Nzg7CisJCWtmcmVlKGRhdGEpOworCQlicmVhazsKKwl9CisJY2FzZSBXUklURV9BRlRFUl9GUkVFOiB7CisJCXNpemVfdCBsZW4gPSAxMDI0OworCQl1MzIgKmRhdGEgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisKKwkJa2ZyZWUoZGF0YSk7CisJCXNjaGVkdWxlKCk7CisJCW1lbXNldChkYXRhLCAweDc4LCBsZW4pOworCQlicmVhazsKKwl9CisJY2FzZSBOT05FOgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworfQorCitzdGF0aWMgdm9pZCBsa2R0bV9oYW5kbGVyKHZvaWQpCit7CisJY291bnQtLTsKKwlwcmludGsoS0VSTl9JTkZPICJsa2R0bTogQ3Jhc2ggcG9pbnQgJXMgb2YgdHlwZSAlcyBoaXQsIHRyaWdnZXIgaW4gJWQgcm91bmRzXG4iLAorCQkJY3BfbmFtZV90b19zdHIoY3BvaW50KSwgY3BfdHlwZV90b19zdHIoY3B0eXBlKSwgY291bnQpOwogCiAJaWYgKGNvdW50ID09IDApIHsKLQkJc3dpdGNoIChjcHR5cGUpIHsKLQkJY2FzZSBOT05FOgotCQkJYnJlYWs7Ci0JCWNhc2UgUEFOSUM6Ci0JCQlwcmludGsoS0VSTl9JTkZPICJsa2R0bSA6IFBBTklDXG4iKTsKLQkJCXBhbmljKCJkdW1wdGVzdCIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQlVHOgotCQkJcHJpbnRrKEtFUk5fSU5GTyAibGtkdG0gOiBCVUdcbiIpOwotCQkJQlVHKCk7Ci0JCQlicmVhazsKLQkJY2FzZSBFWENFUFRJT046Ci0JCQlwcmludGsoS0VSTl9JTkZPICJsa2R0bSA6IEVYQ0VQVElPTlxuIik7Ci0JCQkqKChpbnQgKikgMCkgPSAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgTE9PUDoKLQkJCXByaW50ayhLRVJOX0lORk8gImxrZHRtIDogTE9PUFxuIik7Ci0JCQlmb3IgKDs7KTsKLQkJCWJyZWFrOwotCQljYXNlIE9WRVJGTE9XOgotCQkJcHJpbnRrKEtFUk5fSU5GTyAibGtkdG0gOiBPVkVSRkxPV1xuIik7Ci0JCQkodm9pZCkgcmVjdXJzaXZlX2xvb3AoMCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9CisJCWxrZHRtX2RvX2FjdGlvbihjcHR5cGUpOwogCQljb3VudCA9IGNwb2ludF9jb3VudDsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IGxrZHRtX21vZHVsZV9pbml0KHZvaWQpCitzdGF0aWMgaW50IGxrZHRtX3JlZ2lzdGVyX2Nwb2ludChlbnVtIGNuYW1lIHdoaWNoKQogewogCWludCByZXQ7CiAKLQlpZiAobGtkdG1fcGFyc2VfY29tbWFuZGxpbmUoKSA9PSAtRUlOVkFMKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImxrZHRtIDogSW52YWxpZCBjb21tYW5kXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCWNwb2ludCA9IElOVkFMSUQ7CisJaWYgKGxrZHRtLmVudHJ5ICE9IE5VTEwpCisJCXVucmVnaXN0ZXJfanByb2JlKCZsa2R0bSk7CiAKLQlzd2l0Y2ggKGNwb2ludCkgeworCXN3aXRjaCAod2hpY2gpIHsKKwljYXNlIERJUkVDVDoKKwkJbGtkdG1fZG9fYWN0aW9uKGNwdHlwZSk7CisJCXJldHVybiAwOwogCWNhc2UgSU5UX0hBUkRXQVJFX0VOVFJZOgogCQlsa2R0bS5rcC5zeW1ib2xfbmFtZSA9ICJkb19JUlEiOwogCQlsa2R0bS5lbnRyeSA9IChrcHJvYmVfb3Bjb2RlX3QqKSBqcF9kb19pcnE7CkBAIC0zMTUsMjggKzM4MywyNjggQEAKIAkJbGtkdG0ua3Auc3ltYm9sX25hbWUgPSAiZ2VuZXJpY19pZGVfaW9jdGwiOwogCQlsa2R0bS5lbnRyeSA9IChrcHJvYmVfb3Bjb2RlX3QqKSBqcF9nZW5lcmljX2lkZV9pb2N0bDsKICNlbHNlCi0JCXByaW50ayhLRVJOX0lORk8gImxrZHRtIDogQ3Jhc2ggcG9pbnQgbm90IGF2YWlsYWJsZVxuIik7CisJCXByaW50ayhLRVJOX0lORk8gImxrZHRtOiBDcmFzaCBwb2ludCBub3QgYXZhaWxhYmxlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAjZW5kaWYKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fSU5GTyAibGtkdG0gOiBJbnZhbGlkIENyYXNoIFBvaW50XG4iKTsKLQkJYnJlYWs7CisJCXByaW50ayhLRVJOX0lORk8gImxrZHRtOiBJbnZhbGlkIENyYXNoIFBvaW50XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJY3BvaW50ID0gd2hpY2g7CiAJaWYgKChyZXQgPSByZWdpc3Rlcl9qcHJvYmUoJmxrZHRtKSkgPCAwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAibGtkdG0gOiBDb3VsZG4ndCByZWdpc3RlciBqcHJvYmVcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisJCXByaW50ayhLRVJOX0lORk8gImxrZHRtOiBDb3VsZG4ndCByZWdpc3RlciBqcHJvYmVcbiIpOworCQljcG9pbnQgPSBJTlZBTElEOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gImxrZHRtIDogQ3Jhc2ggcG9pbnQgJXMgb2YgdHlwZSAlcyByZWdpc3RlcmVkXG4iLAotCQkJCQkJY3BvaW50X25hbWUsIGNwb2ludF90eXBlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBkb19yZWdpc3Rlcl9lbnRyeShlbnVtIGNuYW1lIHdoaWNoLCBzdHJ1Y3QgZmlsZSAqZiwKKwkJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKQoreworCWNoYXIgKmJ1ZjsKKwlpbnQgZXJyOworCisJaWYgKGNvdW50ID49IFBBR0VfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlidWYgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGNvdW50KSkgeworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1Zik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwkvKiBOVUxMLXRlcm1pbmF0ZSBhbmQgcmVtb3ZlIGVudGVyICovCisJYnVmW2NvdW50XSA9ICdcMCc7CisJc3RyaW0oYnVmKTsKKworCWNwdHlwZSA9IHBhcnNlX2NwX3R5cGUoYnVmLCBjb3VudCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKSBidWYpOworCisJaWYgKGNwdHlwZSA9PSBOT05FKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVyciA9IGxrZHRtX3JlZ2lzdGVyX2Nwb2ludCh3aGljaCk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKKwkqb2ZmICs9IGNvdW50OworCisJcmV0dXJuIGNvdW50OworfQorCisvKiBHZW5lcmljIHJlYWQgY2FsbGJhY2sgdGhhdCBqdXN0IHByaW50cyBvdXQgdGhlIGF2YWlsYWJsZSBjcmFzaCB0eXBlcyAqLworc3RhdGljIHNzaXplX3QgbGtkdG1fZGVidWdmc19yZWFkKHN0cnVjdCBmaWxlICpmLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCXNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCit7CisJY2hhciAqYnVmOworCWludCBpLCBuLCBvdXQ7CisKKwlidWYgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKworCW4gPSBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIkF2YWlsYWJsZSBjcmFzaCB0eXBlczpcbiIpOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNwX3R5cGUpOyBpKyspCisJCW4gKz0gc25wcmludGYoYnVmICsgbiwgUEFHRV9TSVpFIC0gbiwgIiVzXG4iLCBjcF90eXBlW2ldKTsKKwlidWZbbl0gPSAnXDAnOworCisJb3V0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBvZmYsCisJCQkJICAgICAgYnVmLCBuKTsKKwlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1Zik7CisKKwlyZXR1cm4gb3V0OworfQorCitzdGF0aWMgaW50IGxrZHRtX2RlYnVnZnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKIAlyZXR1cm4gMDsKIH0KIAorCitzdGF0aWMgc3NpemVfdCBpbnRfaGFyZHdhcmVfZW50cnkoc3RydWN0IGZpbGUgKmYsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCXNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCit7CisJcmV0dXJuIGRvX3JlZ2lzdGVyX2VudHJ5KElOVF9IQVJEV0FSRV9FTlRSWSwgZiwgYnVmLCBjb3VudCwgb2ZmKTsKK30KKworc3RhdGljIHNzaXplX3QgaW50X2h3X2lycV9lbihzdHJ1Y3QgZmlsZSAqZiwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZikKK3sKKwlyZXR1cm4gZG9fcmVnaXN0ZXJfZW50cnkoSU5UX0hXX0lSUV9FTiwgZiwgYnVmLCBjb3VudCwgb2ZmKTsKK30KKworc3RhdGljIHNzaXplX3QgaW50X3Rhc2tsZXRfZW50cnkoc3RydWN0IGZpbGUgKmYsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCXNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCit7CisJcmV0dXJuIGRvX3JlZ2lzdGVyX2VudHJ5KElOVF9UQVNLTEVUX0VOVFJZLCBmLCBidWYsIGNvdW50LCBvZmYpOworfQorCitzdGF0aWMgc3NpemVfdCBmc19kZXZyd19lbnRyeShzdHJ1Y3QgZmlsZSAqZiwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZikKK3sKKwlyZXR1cm4gZG9fcmVnaXN0ZXJfZW50cnkoRlNfREVWUlcsIGYsIGJ1ZiwgY291bnQsIG9mZik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1lbV9zd2Fwb3V0X2VudHJ5KHN0cnVjdCBmaWxlICpmLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQlzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKQoreworCXJldHVybiBkb19yZWdpc3Rlcl9lbnRyeShNRU1fU1dBUE9VVCwgZiwgYnVmLCBjb3VudCwgb2ZmKTsKK30KKworc3RhdGljIHNzaXplX3QgdGltZXJhZGRfZW50cnkoc3RydWN0IGZpbGUgKmYsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCisJCXNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCit7CisJcmV0dXJuIGRvX3JlZ2lzdGVyX2VudHJ5KFRJTUVSQURELCBmLCBidWYsIGNvdW50LCBvZmYpOworfQorCitzdGF0aWMgc3NpemVfdCBzY3NpX2Rpc3BhdGNoX2NtZF9lbnRyeShzdHJ1Y3QgZmlsZSAqZiwKKwkJY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZikKK3sKKwlyZXR1cm4gZG9fcmVnaXN0ZXJfZW50cnkoU0NTSV9ESVNQQVRDSF9DTUQsIGYsIGJ1ZiwgY291bnQsIG9mZik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlkZV9jb3JlX2NwX2VudHJ5KHN0cnVjdCBmaWxlICpmLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQlzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKQoreworCXJldHVybiBkb19yZWdpc3Rlcl9lbnRyeShJREVfQ09SRV9DUCwgZiwgYnVmLCBjb3VudCwgb2ZmKTsKK30KKworLyogU3BlY2lhbCBlbnRyeSB0byBqdXN0IGNyYXNoIGRpcmVjdGx5LiBBdmFpbGFibGUgd2l0aG91dCBLUFJPQkVzICovCitzdGF0aWMgc3NpemVfdCBkaXJlY3RfZW50cnkoc3RydWN0IGZpbGUgKmYsIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKm9mZikKK3sKKwllbnVtIGN0eXBlIHR5cGU7CisJY2hhciAqYnVmOworCisJaWYgKGNvdW50ID49IFBBR0VfU0laRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGNvdW50IDwgMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlidWYgPSAoY2hhciAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGNvdW50KSkgeworCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpIGJ1Zik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwkvKiBOVUxMLXRlcm1pbmF0ZSBhbmQgcmVtb3ZlIGVudGVyICovCisJYnVmW2NvdW50XSA9ICdcMCc7CisJc3RyaW0oYnVmKTsKKworCXR5cGUgPSBwYXJzZV9jcF90eXBlKGJ1ZiwgY291bnQpOworCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgYnVmKTsKKwlpZiAodHlwZSA9PSBOT05FKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByaW50ayhLRVJOX0lORk8gImxrZHRtOiBQZXJmb3JtaW5nIGRpcmVjdCBlbnRyeSAlc1xuIiwKKwkJCWNwX3R5cGVfdG9fc3RyKHR5cGUpKTsKKwlsa2R0bV9kb19hY3Rpb24odHlwZSk7CisJKm9mZiArPSBjb3VudDsKKworCXJldHVybiBjb3VudDsKK30KKworc3RydWN0IGNyYXNoX2VudHJ5IHsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wczsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3Jhc2hfZW50cnkgY3Jhc2hfZW50cmllc1tdID0geworCXsiRElSRUNUIiwgey5yZWFkID0gbGtkdG1fZGVidWdmc19yZWFkLAorCQkJLm9wZW4gPSBsa2R0bV9kZWJ1Z2ZzX29wZW4sCisJCQkud3JpdGUgPSBkaXJlY3RfZW50cnl9IH0sCisJeyJJTlRfSEFSRFdBUkVfRU5UUlkiLCB7LnJlYWQgPSBsa2R0bV9kZWJ1Z2ZzX3JlYWQsCisJCQkub3BlbiA9IGxrZHRtX2RlYnVnZnNfb3BlbiwKKwkJCS53cml0ZSA9IGludF9oYXJkd2FyZV9lbnRyeX0gfSwKKwl7IklOVF9IV19JUlFfRU4iLCB7LnJlYWQgPSBsa2R0bV9kZWJ1Z2ZzX3JlYWQsCisJCQkub3BlbiA9IGxrZHRtX2RlYnVnZnNfb3BlbiwKKwkJCS53cml0ZSA9IGludF9od19pcnFfZW59IH0sCisJeyJJTlRfVEFTS0xFVF9FTlRSWSIsIHsucmVhZCA9IGxrZHRtX2RlYnVnZnNfcmVhZCwKKwkJCS5vcGVuID0gbGtkdG1fZGVidWdmc19vcGVuLAorCQkJLndyaXRlID0gaW50X3Rhc2tsZXRfZW50cnl9IH0sCisJeyJGU19ERVZSVyIsIHsucmVhZCA9IGxrZHRtX2RlYnVnZnNfcmVhZCwKKwkJCS5vcGVuID0gbGtkdG1fZGVidWdmc19vcGVuLAorCQkJLndyaXRlID0gZnNfZGV2cndfZW50cnl9IH0sCisJeyJNRU1fU1dBUE9VVCIsIHsucmVhZCA9IGxrZHRtX2RlYnVnZnNfcmVhZCwKKwkJCS5vcGVuID0gbGtkdG1fZGVidWdmc19vcGVuLAorCQkJLndyaXRlID0gbWVtX3N3YXBvdXRfZW50cnl9IH0sCisJeyJUSU1FUkFERCIsIHsucmVhZCA9IGxrZHRtX2RlYnVnZnNfcmVhZCwKKwkJCS5vcGVuID0gbGtkdG1fZGVidWdmc19vcGVuLAorCQkJLndyaXRlID0gdGltZXJhZGRfZW50cnl9IH0sCisJeyJTQ1NJX0RJU1BBVENIX0NNRCIsIHsucmVhZCA9IGxrZHRtX2RlYnVnZnNfcmVhZCwKKwkJCS5vcGVuID0gbGtkdG1fZGVidWdmc19vcGVuLAorCQkJLndyaXRlID0gc2NzaV9kaXNwYXRjaF9jbWRfZW50cnl9IH0sCisJeyJJREVfQ09SRV9DUCIsCXsucmVhZCA9IGxrZHRtX2RlYnVnZnNfcmVhZCwKKwkJCS5vcGVuID0gbGtkdG1fZGVidWdmc19vcGVuLAorCQkJLndyaXRlID0gaWRlX2NvcmVfY3BfZW50cnl9IH0sCit9OworCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbGtkdG1fZGVidWdmc19yb290OworCitzdGF0aWMgaW50IF9faW5pdCBsa2R0bV9tb2R1bGVfaW5pdCh2b2lkKQoreworCWludCByZXQgPSAtRUlOVkFMOworCWludCBuX2RlYnVnZnNfZW50cmllcyA9IDE7IC8qIEFzc3VtZSBvbmx5IHRoZSBkaXJlY3QgZW50cnkgKi8KKwlpbnQgaTsKKworCS8qIFJlZ2lzdGVyIGRlYnVnZnMgaW50ZXJmYWNlICovCisJbGtkdG1fZGVidWdmc19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKCJwcm92b2tlLWNyYXNoIiwgTlVMTCk7CisJaWYgKCFsa2R0bV9kZWJ1Z2ZzX3Jvb3QpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJsa2R0bTogY3JlYXRpbmcgcm9vdCBkaXIgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisjaWZkZWYgQ09ORklHX0tQUk9CRVMKKwluX2RlYnVnZnNfZW50cmllcyA9IEFSUkFZX1NJWkUoY3Jhc2hfZW50cmllcyk7CisjZW5kaWYKKworCWZvciAoaSA9IDA7IGkgPCBuX2RlYnVnZnNfZW50cmllczsgaSsrKSB7CisJCWNvbnN0IHN0cnVjdCBjcmFzaF9lbnRyeSAqY3VyID0gJmNyYXNoX2VudHJpZXNbaV07CisJCXN0cnVjdCBkZW50cnkgKmRlOworCisJCWRlID0gZGVidWdmc19jcmVhdGVfZmlsZShjdXItPm5hbWUsIDA2NDQsIGxrZHRtX2RlYnVnZnNfcm9vdCwKKwkJCQlOVUxMLCAmY3VyLT5mb3BzKTsKKwkJaWYgKGRlID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAibGtkdG06IGNvdWxkIG5vdCBjcmVhdGUgJXNcbiIsCisJCQkJCWN1ci0+bmFtZSk7CisJCQlnb3RvIG91dF9lcnI7CisJCX0KKwl9CisKKwlpZiAobGtkdG1fcGFyc2VfY29tbWFuZGxpbmUoKSA9PSAtRUlOVkFMKSB7CisJCXByaW50ayhLRVJOX0lORk8gImxrZHRtOiBJbnZhbGlkIGNvbW1hbmRcbiIpOworCQlnb3RvIG91dF9lcnI7CisJfQorCisJaWYgKGNwb2ludCAhPSBJTlZBTElEICYmIGNwdHlwZSAhPSBOT05FKSB7CisJCXJldCA9IGxrZHRtX3JlZ2lzdGVyX2Nwb2ludChjcG9pbnQpOworCQlpZiAocmV0IDwgMCkgeworCQkJcHJpbnRrKEtFUk5fSU5GTyAibGtkdG06IEludmFsaWQgY3Jhc2ggcG9pbnQgJWRcbiIsCisJCQkJCWNwb2ludCk7CisJCQlnb3RvIG91dF9lcnI7CisJCX0KKwkJcHJpbnRrKEtFUk5fSU5GTyAibGtkdG06IENyYXNoIHBvaW50ICVzIG9mIHR5cGUgJXMgcmVnaXN0ZXJlZFxuIiwKKwkJCQljcG9pbnRfbmFtZSwgY3BvaW50X3R5cGUpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0lORk8gImxrZHRtOiBObyBjcmFzaCBwb2ludHMgcmVnaXN0ZXJlZCwgZW5hYmxlIHRocm91Z2ggZGVidWdmc1xuIik7CisJfQorCisJcmV0dXJuIDA7CisKK291dF9lcnI6CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGxrZHRtX2RlYnVnZnNfcm9vdCk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHZvaWQgX19leGl0IGxrZHRtX21vZHVsZV9leGl0KHZvaWQpCiB7Ci0gICAgICAgIHVucmVnaXN0ZXJfanByb2JlKCZsa2R0bSk7Ci0gICAgICAgIHByaW50ayhLRVJOX0lORk8gImxrZHRtIDogQ3Jhc2ggcG9pbnQgdW5yZWdpc3RlcmVkXG4iKTsKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUobGtkdG1fZGVidWdmc19yb290KTsKKworCXVucmVnaXN0ZXJfanByb2JlKCZsa2R0bSk7CisJcHJpbnRrKEtFUk5fSU5GTyAibGtkdG06IENyYXNoIHBvaW50IHVucmVnaXN0ZXJlZFxuIik7CiB9CiAKIG1vZHVsZV9pbml0KGxrZHRtX21vZHVsZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9waGFudG9tLmMgYi9kcml2ZXJzL21pc2MvcGhhbnRvbS5jCmluZGV4IDA0YzI3MjYuLjc3OWFhOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9waGFudG9tLmMKKysrIGIvZHJpdmVycy9taXNjL3BoYW50b20uYwpAQCAtNDk3LDEyICs0OTcsNyBAQAogCS5yZXN1bWUgPSBwaGFudG9tX3Jlc3VtZQogfTsKIAotc3RhdGljIHNzaXplX3QgcGhhbnRvbV9zaG93X3ZlcnNpb24oc3RydWN0IGNsYXNzICpjbHMsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc3ByaW50ZihidWYsIFBIQU5UT01fVkVSU0lPTiAiXG4iKTsKLX0KLQotc3RhdGljIENMQVNTX0FUVFIodmVyc2lvbiwgMDQ0NCwgcGhhbnRvbV9zaG93X3ZlcnNpb24sIE5VTEwpOworc3RhdGljIENMQVNTX0FUVFJfU1RSSU5HKHZlcnNpb24sIDA0NDQsIFBIQU5UT01fVkVSU0lPTik7CiAKIHN0YXRpYyBpbnQgX19pbml0IHBoYW50b21faW5pdCh2b2lkKQogewpAQCAtNTE1LDcgKzUxMCw3IEBACiAJCXByaW50ayhLRVJOX0VSUiAicGhhbnRvbTogY2FuJ3QgcmVnaXN0ZXIgcGhhbnRvbSBjbGFzc1xuIik7CiAJCWdvdG8gZXJyOwogCX0KLQlyZXR2YWwgPSBjbGFzc19jcmVhdGVfZmlsZShwaGFudG9tX2NsYXNzLCAmY2xhc3NfYXR0cl92ZXJzaW9uKTsKKwlyZXR2YWwgPSBjbGFzc19jcmVhdGVfZmlsZShwaGFudG9tX2NsYXNzLCAmY2xhc3NfYXR0cl92ZXJzaW9uLmF0dHIpOwogCWlmIChyZXR2YWwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJwaGFudG9tOiBjYW4ndCBjcmVhdGUgc3lzZnMgdmVyc2lvbiBmaWxlXG4iKTsKIAkJZ290byBlcnJfY2xhc3M7CkBAIC01NDEsNyArNTM2LDcgQEAKIGVycl91bmNocjoKIAl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2LCBQSEFOVE9NX01BWF9NSU5PUlMpOwogZXJyX2F0dHI6Ci0JY2xhc3NfcmVtb3ZlX2ZpbGUocGhhbnRvbV9jbGFzcywgJmNsYXNzX2F0dHJfdmVyc2lvbik7CisJY2xhc3NfcmVtb3ZlX2ZpbGUocGhhbnRvbV9jbGFzcywgJmNsYXNzX2F0dHJfdmVyc2lvbi5hdHRyKTsKIGVycl9jbGFzczoKIAljbGFzc19kZXN0cm95KHBoYW50b21fY2xhc3MpOwogZXJyOgpAQCAtNTU0LDcgKzU0OSw3IEBACiAKIAl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oTUtERVYocGhhbnRvbV9tYWpvciwgMCksIFBIQU5UT01fTUFYX01JTk9SUyk7CiAKLQljbGFzc19yZW1vdmVfZmlsZShwaGFudG9tX2NsYXNzLCAmY2xhc3NfYXR0cl92ZXJzaW9uKTsKKwljbGFzc19yZW1vdmVfZmlsZShwaGFudG9tX2NsYXNzLCAmY2xhc3NfYXR0cl92ZXJzaW9uLmF0dHIpOwogCWNsYXNzX2Rlc3Ryb3kocGhhbnRvbV9jbGFzcyk7CiAKIAlwcl9kZWJ1ZygicGhhbnRvbTogbW9kdWxlIHN1Y2Nlc3NmdWxseSByZW1vdmVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWlzYy9zZ2ktZ3J1L2dydXRhYmxlcy5oIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGFibGVzLmgKaW5kZXggMDJhNzdiOC4uN2E4YjkwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGFibGVzLmgKKysrIGIvZHJpdmVycy9taXNjL3NnaS1ncnUvZ3J1dGFibGVzLmgKQEAgLTUxNiw4ICs1MTYsNyBAQAogCiAvKiBTY2FuIGFsbCBhY3RpdmUgR1JVcyBpbiBhIEdSVSBiaXRtYXAgKi8KICNkZWZpbmUgZm9yX2VhY2hfZ3J1X2luX2JpdG1hcChnaWQsIG1hcCkJCQkJXAotCWZvciAoKGdpZCkgPSBmaW5kX2ZpcnN0X2JpdCgobWFwKSwgR1JVX01BWF9HUlVTKTsgKGdpZCkgPCBHUlVfTUFYX0dSVVM7XAotCQkoZ2lkKSsrLCAoZ2lkKSA9IGZpbmRfbmV4dF9iaXQoKG1hcCksIEdSVV9NQVhfR1JVUywgKGdpZCkpKQorCWZvcl9lYWNoX3NldF9iaXQoKGdpZCksIChtYXApLCBHUlVfTUFYX0dSVVMpCiAKIC8qIFNjYW4gYWxsIGFjdGl2ZSBHUlVzIG9uIGEgc3BlY2lmaWMgYmxhZGUgKi8KICNkZWZpbmUgZm9yX2VhY2hfZ3J1X29uX2JsYWRlKGdydSwgbmlkLCBpKQkJCQlcCkBAIC01MzYsMjMgKzUzNSwxNyBAQAogCiAvKiBTY2FuIGVhY2ggQ0JSIHdob3NlIGJpdCBpcyBzZXQgaW4gYSBURk0gKG9yIGNvcHkgb2YpICovCiAjZGVmaW5lIGZvcl9lYWNoX2Nicl9pbl90Zm0oaSwgbWFwKQkJCQkJXAotCWZvciAoKGkpID0gZmluZF9maXJzdF9iaXQobWFwLCBHUlVfTlVNX0NCRSk7CQkJXAotCQkJKGkpIDwgR1JVX05VTV9DQkU7CQkJCVwKLQkJCShpKSsrLCAoaSkgPSBmaW5kX25leHRfYml0KG1hcCwgR1JVX05VTV9DQkUsIGkpKQorCWZvcl9lYWNoX3NldF9iaXQoKGkpLCAobWFwKSwgR1JVX05VTV9DQkUpCiAKIC8qIFNjYW4gZWFjaCBDQlIgaW4gYSBDQlIgYml0bWFwLiBOb3RlOiBtdWx0aXBsZSBDQlJzIGluIGFuIGFsbG9jYXRpb24gdW5pdCAqLwogI2RlZmluZSBmb3JfZWFjaF9jYnJfaW5fYWxsb2NhdGlvbl9tYXAoaSwgbWFwLCBrKQkJCVwKLQlmb3IgKChrKSA9IGZpbmRfZmlyc3RfYml0KG1hcCwgR1JVX0NCUl9BVSk7IChrKSA8IEdSVV9DQlJfQVU7CVwKLQkJCShrKSA9IGZpbmRfbmV4dF9iaXQobWFwLCBHUlVfQ0JSX0FVLCAoaykgKyAxKSkgCVwKKwlmb3JfZWFjaF9zZXRfYml0KChrKSwgKG1hcCksIEdSVV9DQlJfQVUpCQkJXAogCQlmb3IgKChpKSA9IChrKSpHUlVfQ0JSX0FVX1NJWkU7CQkJCVwKIAkJCQkoaSkgPCAoKGspICsgMSkgKiBHUlVfQ0JSX0FVX1NJWkU7IChpKSsrKQogCiAvKiBTY2FuIGVhY2ggRFNSIGluIGEgRFNSIGJpdG1hcC4gTm90ZTogbXVsdGlwbGUgRFNScyBpbiBhbiBhbGxvY2F0aW9uIHVuaXQgKi8KICNkZWZpbmUgZm9yX2VhY2hfZHNyX2luX2FsbG9jYXRpb25fbWFwKGksIG1hcCwgaykJCQlcCi0JZm9yICgoaykgPSBmaW5kX2ZpcnN0X2JpdCgoY29uc3QgdW5zaWduZWQgbG9uZyAqKW1hcCwgR1JVX0RTUl9BVSk7XAotCQkJKGspIDwgR1JVX0RTUl9BVTsJCQkJXAotCQkJKGspID0gZmluZF9uZXh0X2JpdCgoY29uc3QgdW5zaWduZWQgbG9uZyAqKW1hcCwJXAotCQkJCQkgIEdSVV9EU1JfQVUsIChrKSArIDEpKQkJXAorCWZvcl9lYWNoX3NldF9iaXQoKGspLCAoY29uc3QgdW5zaWduZWQgbG9uZyAqKShtYXApLCBHUlVfRFNSX0FVKQlcCiAJCWZvciAoKGkpID0gKGspICogR1JVX0RTUl9BVV9DTDsJCQkJXAogCQkJCShpKSA8ICgoaykgKyAxKSAqIEdSVV9EU1JfQVVfQ0w7IChpKSsrKQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwbmV0LmMgYi9kcml2ZXJzL21pc2Mvc2dpLXhwL3hwbmV0LmMKaW5kZXggMTZmMGFiZC4uNTdiMTUyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9taXNjL3NnaS14cC94cG5ldC5jCisrKyBiL2RyaXZlcnMvbWlzYy9zZ2kteHAveHBuZXQuYwpAQCAtNDc1LDcgKzQ3NSw3IEBACiAKIAlpZiAoc2tiLT5kYXRhWzBdID09IDB4ZmYpIHsKIAkJLyogd2UgYXJlIGJlaW5nIGFza2VkIHRvIGJyb2FkY2FzdCB0byBhbGwgcGFydGl0aW9ucyAqLwotCQlmb3JfZWFjaF9iaXQoZGVzdF9wYXJ0aWQsIHhwbmV0X2Jyb2FkY2FzdF9wYXJ0aXRpb25zLAorCQlmb3JfZWFjaF9zZXRfYml0KGRlc3RfcGFydGlkLCB4cG5ldF9icm9hZGNhc3RfcGFydGl0aW9ucywKIAkJCSAgICAgeHBfbWF4X25wYXJ0aXRpb25zKSB7CiAKIAkJCXhwbmV0X3NlbmQoc2tiLCBxdWV1ZWRfbXNnLCBzdGFydF9hZGRyLCBlbmRfYWRkciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NhcmQvc2Rpb191YXJ0LmMgYi9kcml2ZXJzL21tYy9jYXJkL3NkaW9fdWFydC5jCmluZGV4IGY1Mzc1NTUuLjcyM2U1MDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2NhcmQvc2Rpb191YXJ0LmMKKysrIGIvZHJpdmVycy9tbWMvY2FyZC9zZGlvX3VhcnQuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2dmcC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgva2ZpZm8uaD4KIAogI2luY2x1ZGUgPGxpbnV4L21tYy9jb3JlLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2NhcmQuaD4KQEAgLTQ3LDE5ICs0OCw5IEBACiAjZGVmaW5lIFVBUlRfTlIJCTgJLyogTnVtYmVyIG9mIFVBUlRzIHRoaXMgZHJpdmVyIGNhbiBoYW5kbGUgKi8KIAogCi0jZGVmaW5lIFVBUlRfWE1JVF9TSVpFCVBBR0VfU0laRQorI2RlZmluZSBGSUZPX1NJWkUJUEFHRV9TSVpFCiAjZGVmaW5lIFdBS0VVUF9DSEFSUwkyNTYKIAotI2RlZmluZSBjaXJjX2VtcHR5KGNpcmMpCSgoY2lyYyktPmhlYWQgPT0gKGNpcmMpLT50YWlsKQotI2RlZmluZSBjaXJjX2NsZWFyKGNpcmMpCSgoY2lyYyktPmhlYWQgPSAoY2lyYyktPnRhaWwgPSAwKQotCi0jZGVmaW5lIGNpcmNfY2hhcnNfcGVuZGluZyhjaXJjKSBcCi0JCShDSVJDX0NOVCgoY2lyYyktPmhlYWQsIChjaXJjKS0+dGFpbCwgVUFSVF9YTUlUX1NJWkUpKQotCi0jZGVmaW5lIGNpcmNfY2hhcnNfZnJlZShjaXJjKSBcCi0JCShDSVJDX1NQQUNFKChjaXJjKS0+aGVhZCwgKGNpcmMpLT50YWlsLCBVQVJUX1hNSVRfU0laRSkpCi0KLQogc3RydWN0IHVhcnRfaWNvdW50IHsKIAlfX3UzMgljdHM7CiAJX191MzIJZHNyOwpAQCAtODIsNyArNzMsNyBAQAogCXN0cnVjdCBtdXRleAkJZnVuY19sb2NrOwogCXN0cnVjdCB0YXNrX3N0cnVjdAkqaW5fc2Rpb191YXJ0X2lycTsKIAl1bnNpZ25lZCBpbnQJCXJlZ3Nfb2Zmc2V0OwotCXN0cnVjdCBjaXJjX2J1ZgkJeG1pdDsKKwlzdHJ1Y3Qga2ZpZm8JCXhtaXRfZmlmbzsKIAlzcGlubG9ja190CQl3cml0ZV9sb2NrOwogCXN0cnVjdCB1YXJ0X2ljb3VudAlpY291bnQ7CiAJdW5zaWduZWQgaW50CQl1YXJ0Y2xrOwpAQCAtMTA1LDYgKzk2LDggQEAKIAlrcmVmX2luaXQoJnBvcnQtPmtyZWYpOwogCW11dGV4X2luaXQoJnBvcnQtPmZ1bmNfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnBvcnQtPndyaXRlX2xvY2spOworCWlmIChrZmlmb19hbGxvYygmcG9ydC0+eG1pdF9maWZvLCBGSUZPX1NJWkUsIEdGUF9LRVJORUwpKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXNwaW5fbG9jaygmc2Rpb191YXJ0X3RhYmxlX2xvY2spOwogCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IFVBUlRfTlI7IGluZGV4KyspIHsKQEAgLTE0MCw2ICsxMzMsNyBAQAogewogCXN0cnVjdCBzZGlvX3VhcnRfcG9ydCAqcG9ydCA9CiAJCWNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3Qgc2Rpb191YXJ0X3BvcnQsIGtyZWYpOworCWtmaWZvX2ZyZWUoJnBvcnQtPnhtaXRfZmlmbyk7CiAJa2ZyZWUocG9ydCk7CiB9CiAKQEAgLTQ1Niw5ICs0NTAsMTEgQEAKIAogc3RhdGljIHZvaWQgc2Rpb191YXJ0X3RyYW5zbWl0X2NoYXJzKHN0cnVjdCBzZGlvX3VhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3QgY2lyY19idWYgKnhtaXQgPSAmcG9ydC0+eG1pdDsKKwlzdHJ1Y3Qga2ZpZm8gKnhtaXQgPSAmcG9ydC0+eG1pdF9maWZvOwogCWludCBjb3VudDsKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXU4IGlvYnVmWzE2XTsKKwlpbnQgbGVuOwogCiAJaWYgKHBvcnQtPnhfY2hhcikgewogCQlzZGlvX291dChwb3J0LCBVQVJUX1RYLCBwb3J0LT54X2NoYXIpOwpAQCAtNDY5LDI3ICs0NjUsMjUgQEAKIAogCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCi0JaWYgKHR0eSA9PSBOVUxMIHx8IGNpcmNfZW1wdHkoeG1pdCkgfHwKKwlpZiAodHR5ID09IE5VTEwgfHwgIWtmaWZvX2xlbih4bWl0KSB8fAogCQkJCXR0eS0+c3RvcHBlZCB8fCB0dHktPmh3X3N0b3BwZWQpIHsKIAkJc2Rpb191YXJ0X3N0b3BfdHgocG9ydCk7CiAJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQlyZXR1cm47CiAJfQogCi0JY291bnQgPSAxNjsKLQlkbyB7Ci0JCXNkaW9fb3V0KHBvcnQsIFVBUlRfVFgsIHhtaXQtPmJ1Zlt4bWl0LT50YWlsXSk7Ci0JCXhtaXQtPnRhaWwgPSAoeG1pdC0+dGFpbCArIDEpICYgKFVBUlRfWE1JVF9TSVpFIC0gMSk7CisJbGVuID0ga2ZpZm9fb3V0X2xvY2tlZCh4bWl0LCBpb2J1ZiwgMTYsICZwb3J0LT53cml0ZV9sb2NrKTsKKwlmb3IgKGNvdW50ID0gMDsgY291bnQgPCBsZW47IGNvdW50KyspIHsKKwkJc2Rpb19vdXQocG9ydCwgVUFSVF9UWCwgaW9idWZbY291bnRdKTsKIAkJcG9ydC0+aWNvdW50LnR4Kys7Ci0JCWlmIChjaXJjX2VtcHR5KHhtaXQpKQotCQkJYnJlYWs7Ci0JfSB3aGlsZSAoLS1jb3VudCA+IDApOworCX0KIAotCWlmIChjaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCkgPCBXQUtFVVBfQ0hBUlMpCisJbGVuID0ga2ZpZm9fbGVuKHhtaXQpOworCWlmIChsZW4gPCBXQUtFVVBfQ0hBUlMpIHsKIAkJdHR5X3dha2V1cCh0dHkpOwotCi0JaWYgKGNpcmNfZW1wdHkoeG1pdCkpCi0JCXNkaW9fdWFydF9zdG9wX3R4KHBvcnQpOworCQlpZiAobGVuID09IDApCisJCQlzZGlvX3VhcnRfc3RvcF90eChwb3J0KTsKKwl9CiAJdHR5X2tyZWZfcHV0KHR0eSk7CiB9CiAKQEAgLTU4MSw3ICs1NzUsNyBAQAogCXN0cnVjdCBzZGlvX3VhcnRfcG9ydCAqcG9ydCA9CiAJCQljb250YWluZXJfb2YodHBvcnQsIHN0cnVjdCBzZGlvX3VhcnRfcG9ydCwgcG9ydCk7CiAJdW5zaWduZWQgaW50IHJldCA9IHNkaW9fdWFydF9jbGFpbV9mdW5jKHBvcnQpOwotCWlmIChyZXQpCS8qIE1pc3NpbmcgaGFyZHdhcmUgc2hvdWRuJ3QgYmxvY2sgZm9yIGNhcnJpZXIgKi8KKwlpZiAocmV0KQkvKiBNaXNzaW5nIGhhcmR3YXJlIHNob3VsZG4ndCBibG9jayBmb3IgY2FycmllciAqLwogCQlyZXR1cm4gMTsKIAlyZXQgPSBzZGlvX3VhcnRfZ2V0X21jdHJsKHBvcnQpOwogCXNkaW9fdWFydF9yZWxlYXNlX2Z1bmMocG9ydCk7CkBAIC02MzIsNyArNjI2LDYgQEAKIHsKIAlzdHJ1Y3Qgc2Rpb191YXJ0X3BvcnQgKnBvcnQgPQogCQkJY29udGFpbmVyX29mKHRwb3J0LCBzdHJ1Y3Qgc2Rpb191YXJ0X3BvcnQsIHBvcnQpOwotCXVuc2lnbmVkIGxvbmcgcGFnZTsKIAlpbnQgcmV0OwogCiAJLyoKQEAgLTY0MSwyMiArNjM0LDE3IEBACiAJICovCiAJc2V0X2JpdChUVFlfSU9fRVJST1IsICZ0dHktPmZsYWdzKTsKIAotCS8qIEluaXRpYWxpc2UgYW5kIGFsbG9jYXRlIHRoZSB0cmFuc21pdCBidWZmZXIuICovCi0JcGFnZSA9IF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMKTsKLQlpZiAoIXBhZ2UpCi0JCXJldHVybiAtRU5PTUVNOwotCXBvcnQtPnhtaXQuYnVmID0gKHVuc2lnbmVkIGNoYXIgKilwYWdlOwotCWNpcmNfY2xlYXIoJnBvcnQtPnhtaXQpOworCWtmaWZvX3Jlc2V0KCZwb3J0LT54bWl0X2ZpZm8pOwogCiAJcmV0ID0gc2Rpb191YXJ0X2NsYWltX2Z1bmMocG9ydCk7CiAJaWYgKHJldCkKLQkJZ290byBlcnIxOworCQlyZXR1cm4gcmV0OwogCXJldCA9IHNkaW9fZW5hYmxlX2Z1bmMocG9ydC0+ZnVuYyk7CiAJaWYgKHJldCkKLQkJZ290byBlcnIyOworCQlnb3RvIGVycjE7CiAJcmV0ID0gc2Rpb19jbGFpbV9pcnEocG9ydC0+ZnVuYywgc2Rpb191YXJ0X2lycSk7CiAJaWYgKHJldCkKLQkJZ290byBlcnIzOworCQlnb3RvIGVycjI7CiAKIAkvKgogCSAqIENsZWFyIHRoZSBGSUZPIGJ1ZmZlcnMgYW5kIGRpc2FibGUgdGhlbS4KQEAgLTcwMCwxMiArNjg4LDEwIEBACiAJc2Rpb191YXJ0X3JlbGVhc2VfZnVuYyhwb3J0KTsKIAlyZXR1cm4gMDsKIAotZXJyMzoKLQlzZGlvX2Rpc2FibGVfZnVuYyhwb3J0LT5mdW5jKTsKIGVycjI6Ci0Jc2Rpb191YXJ0X3JlbGVhc2VfZnVuYyhwb3J0KTsKKwlzZGlvX2Rpc2FibGVfZnVuYyhwb3J0LT5mdW5jKTsKIGVycjE6Ci0JZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBvcnQtPnhtaXQuYnVmKTsKKwlzZGlvX3VhcnRfcmVsZWFzZV9mdW5jKHBvcnQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTcyNyw3ICs3MTMsNyBAQAogCiAJcmV0ID0gc2Rpb191YXJ0X2NsYWltX2Z1bmMocG9ydCk7CiAJaWYgKHJldCkKLQkJZ290byBza2lwOworCQlyZXR1cm47CiAKIAlzZGlvX3VhcnRfc3RvcF9yeChwb3J0KTsKIApAQCAtNzQ5LDEwICs3MzUsNiBAQAogCXNkaW9fZGlzYWJsZV9mdW5jKHBvcnQtPmZ1bmMpOwogCiAJc2Rpb191YXJ0X3JlbGVhc2VfZnVuYyhwb3J0KTsKLQotc2tpcDoKLQkvKiBGcmVlIHRoZSB0cmFuc21pdCBidWZmZXIgcGFnZS4gKi8KLQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpcG9ydC0+eG1pdC5idWYpOwogfQogCiAvKioKQEAgLTgyMiwyNyArODA0LDEyIEBACiAJCQkgICBpbnQgY291bnQpCiB7CiAJc3RydWN0IHNkaW9fdWFydF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgY2lyY19idWYgKmNpcmMgPSAmcG9ydC0+eG1pdDsKLQlpbnQgYywgcmV0ID0gMDsKKwlpbnQgcmV0OwogCiAJaWYgKCFwb3J0LT5mdW5jKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXNwaW5fbG9jaygmcG9ydC0+d3JpdGVfbG9jayk7Ci0Jd2hpbGUgKDEpIHsKLQkJYyA9IENJUkNfU1BBQ0VfVE9fRU5EKGNpcmMtPmhlYWQsIGNpcmMtPnRhaWwsIFVBUlRfWE1JVF9TSVpFKTsKLQkJaWYgKGNvdW50IDwgYykKLQkJCWMgPSBjb3VudDsKLQkJaWYgKGMgPD0gMCkKLQkJCWJyZWFrOwotCQltZW1jcHkoY2lyYy0+YnVmICsgY2lyYy0+aGVhZCwgYnVmLCBjKTsKLQkJY2lyYy0+aGVhZCA9IChjaXJjLT5oZWFkICsgYykgJiAoVUFSVF9YTUlUX1NJWkUgLSAxKTsKLQkJYnVmICs9IGM7Ci0JCWNvdW50IC09IGM7Ci0JCXJldCArPSBjOwotCX0KLQlzcGluX3VubG9jaygmcG9ydC0+d3JpdGVfbG9jayk7Ci0KKwlyZXQgPSBrZmlmb19pbl9sb2NrZWQoJnBvcnQtPnhtaXRfZmlmbywgYnVmLCBjb3VudCwgJnBvcnQtPndyaXRlX2xvY2spOwogCWlmICghKHBvcnQtPmllciAmIFVBUlRfSUVSX1RIUkkpKSB7CiAJCWludCBlcnIgPSBzZGlvX3VhcnRfY2xhaW1fZnVuYyhwb3J0KTsKIAkJaWYgKCFlcnIpIHsKQEAgLTg1OSwxMyArODI2LDEzIEBACiBzdGF0aWMgaW50IHNkaW9fdWFydF93cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCiB7CiAJc3RydWN0IHNkaW9fdWFydF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKLQlyZXR1cm4gcG9ydCA/IGNpcmNfY2hhcnNfZnJlZSgmcG9ydC0+eG1pdCkgOiAwOworCXJldHVybiBGSUZPX1NJWkUgLSBrZmlmb19sZW4oJnBvcnQtPnhtaXRfZmlmbyk7CiB9CiAKIHN0YXRpYyBpbnQgc2Rpb191YXJ0X2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCBzZGlvX3VhcnRfcG9ydCAqcG9ydCA9IHR0eS0+ZHJpdmVyX2RhdGE7Ci0JcmV0dXJuIHBvcnQgPyBjaXJjX2NoYXJzX3BlbmRpbmcoJnBvcnQtPnhtaXQpIDogMDsKKwlyZXR1cm4ga2ZpZm9fbGVuKCZwb3J0LT54bWl0X2ZpZm8pOwogfQogCiBzdGF0aWMgdm9pZCBzZGlvX3VhcnRfc2VuZF94Y2hhcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjaGFyIGNoKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvY29yZS9jb3JlLmMgYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYwppbmRleCAzMGFjZDUyLi4zMTY4ZWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYworKysgYi9kcml2ZXJzL21tYy9jb3JlL2NvcmUuYwpAQCAtMTA4OSw2ICsxMDg5LDcgQEAKIAltbWNfY2xhaW1faG9zdChob3N0KTsKIAogCW1tY19wb3dlcl91cChob3N0KTsKKwlzZGlvX3Jlc2V0KGhvc3QpOwogCW1tY19nb19pZGxlKGhvc3QpOwogCiAJbW1jX3NlbmRfaWZfY29uZChob3N0LCBob3N0LT5vY3JfYXZhaWwpOwpAQCAtMTE1MSw2ICsxMTUyLDkgQEAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZob3N0LT5kZXRlY3QpOwogCW1tY19mbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCisJLyogY2xlYXIgcG0gZmxhZ3Mgbm93IGFuZCBsZXQgY2FyZCBkcml2ZXJzIHNldCB0aGVtIGFzIG5lZWRlZCAqLworCWhvc3QtPnBtX2ZsYWdzID0gMDsKKwogCW1tY19idXNfZ2V0KGhvc3QpOwogCWlmIChob3N0LT5idXNfb3BzICYmICFob3N0LT5idXNfZGVhZCkgewogCQlpZiAoaG9zdC0+YnVzX29wcy0+cmVtb3ZlKQpAQCAtMTI3MywxMiArMTI3NywxMyBAQAogCQkJbW1jX2NsYWltX2hvc3QoaG9zdCk7CiAJCQltbWNfZGV0YWNoX2J1cyhob3N0KTsKIAkJCW1tY19yZWxlYXNlX2hvc3QoaG9zdCk7CisJCQlob3N0LT5wbV9mbGFncyA9IDA7CiAJCQllcnIgPSAwOwogCQl9CiAJfQogCW1tY19idXNfcHV0KGhvc3QpOwogCi0JaWYgKCFlcnIpCisJaWYgKCFlcnIgJiYgIShob3N0LT5wbV9mbGFncyAmIE1NQ19QTV9LRUVQX1BPV0VSKSkKIAkJbW1jX3Bvd2VyX29mZihob3N0KTsKIAogCXJldHVybiBlcnI7CkBAIC0xMjk2LDggKzEzMDEsMTAgQEAKIAogCW1tY19idXNfZ2V0KGhvc3QpOwogCWlmIChob3N0LT5idXNfb3BzICYmICFob3N0LT5idXNfZGVhZCkgewotCQltbWNfcG93ZXJfdXAoaG9zdCk7Ci0JCW1tY19zZWxlY3Rfdm9sdGFnZShob3N0LCBob3N0LT5vY3IpOworCQlpZiAoIShob3N0LT5wbV9mbGFncyAmIE1NQ19QTV9LRUVQX1BPV0VSKSkgeworCQkJbW1jX3Bvd2VyX3VwKGhvc3QpOworCQkJbW1jX3NlbGVjdF92b2x0YWdlKGhvc3QsIGhvc3QtPm9jcik7CisJCX0KIAkJQlVHX09OKCFob3N0LT5idXNfb3BzLT5yZXN1bWUpOwogCQllcnIgPSBob3N0LT5idXNfb3BzLT5yZXN1bWUoaG9zdCk7CiAJCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpby5jIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMKaW5kZXggMDZiNjQwOC4uMmRkNGNmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvLmMKQEAgLTE4OCw2ICsxODgsNDAgQEAKIH0KIAogLyoKKyAqIERldmljZXMgdGhhdCByZW1haW4gYWN0aXZlIGR1cmluZyBhIHN5c3RlbSBzdXNwZW5kIGFyZQorICogcHV0IGJhY2sgaW50byAxLWJpdCBtb2RlLgorICovCitzdGF0aWMgaW50IHNkaW9fZGlzYWJsZV93aWRlKHN0cnVjdCBtbWNfY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmV0OworCXU4IGN0cmw7CisKKwlpZiAoIShjYXJkLT5ob3N0LT5jYXBzICYgTU1DX0NBUF80X0JJVF9EQVRBKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoY2FyZC0+Y2Njci5sb3dfc3BlZWQgJiYgIWNhcmQtPmNjY3Iud2lkZV9idXMpCisJCXJldHVybiAwOworCisJcmV0ID0gbW1jX2lvX3J3X2RpcmVjdChjYXJkLCAwLCAwLCBTRElPX0NDQ1JfSUYsIDAsICZjdHJsKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJaWYgKCEoY3RybCAmIFNESU9fQlVTX1dJRFRIXzRCSVQpKQorCQlyZXR1cm4gMDsKKworCWN0cmwgJj0gflNESU9fQlVTX1dJRFRIXzRCSVQ7CisJY3RybCB8PSBTRElPX0JVU19BU1lOQ19JTlQ7CisKKwlyZXQgPSBtbWNfaW9fcndfZGlyZWN0KGNhcmQsIDEsIDAsIFNESU9fQ0NDUl9JRiwgY3RybCwgTlVMTCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCW1tY19zZXRfYnVzX3dpZHRoKGNhcmQtPmhvc3QsIE1NQ19CVVNfV0lEVEhfMSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKICAqIFRlc3QgaWYgdGhlIGNhcmQgc3VwcG9ydHMgaGlnaC1zcGVlZCBtb2RlIGFuZCwgaWYgc28sIHN3aXRjaCB0byBpdC4KICAqLwogc3RhdGljIGludCBzZGlvX2VuYWJsZV9ocyhzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQpCkBAIC0yMjQsNyArMjU4LDcgQEAKICAqIHdlJ3JlIHRyeWluZyB0byByZWluaXRpYWxpc2UuCiAgKi8KIHN0YXRpYyBpbnQgbW1jX3NkaW9faW5pdF9jYXJkKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgdTMyIG9jciwKLQkJCSAgICAgIHN0cnVjdCBtbWNfY2FyZCAqb2xkY2FyZCkKKwkJCSAgICAgIHN0cnVjdCBtbWNfY2FyZCAqb2xkY2FyZCwgaW50IHBvd2VyZWRfcmVzdW1lKQogewogCXN0cnVjdCBtbWNfY2FyZCAqY2FyZDsKIAlpbnQgZXJyOwpAQCAtMjM1LDkgKzI2OSwxMSBAQAogCS8qCiAJICogSW5mb3JtIHRoZSBjYXJkIG9mIHRoZSB2b2x0YWdlCiAJICovCi0JZXJyID0gbW1jX3NlbmRfaW9fb3BfY29uZChob3N0LCBob3N0LT5vY3IsICZvY3IpOwotCWlmIChlcnIpCi0JCWdvdG8gZXJyOworCWlmICghcG93ZXJlZF9yZXN1bWUpIHsKKwkJZXJyID0gbW1jX3NlbmRfaW9fb3BfY29uZChob3N0LCBob3N0LT5vY3IsICZvY3IpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnI7CisJfQogCiAJLyoKIAkgKiBGb3IgU1BJLCBlbmFibGUgQ1JDIGFzIGFwcHJvcHJpYXRlLgpAQCAtMjYyLDcgKzI5OCw3IEBACiAJLyoKIAkgKiBGb3IgbmF0aXZlIGJ1c3NlczogIHNldCBjYXJkIFJDQSBhbmQgcXVpdCBvcGVuIGRyYWluIG1vZGUuCiAJICovCi0JaWYgKCFtbWNfaG9zdF9pc19zcGkoaG9zdCkpIHsKKwlpZiAoIXBvd2VyZWRfcmVzdW1lICYmICFtbWNfaG9zdF9pc19zcGkoaG9zdCkpIHsKIAkJZXJyID0gbW1jX3NlbmRfcmVsYXRpdmVfYWRkcihob3N0LCAmY2FyZC0+cmNhKTsKIAkJaWYgKGVycikKIAkJCWdvdG8gcmVtb3ZlOwpAQCAtMjczLDcgKzMwOSw3IEBACiAJLyoKIAkgKiBTZWxlY3QgY2FyZCwgYXMgYWxsIGZvbGxvd2luZyBjb21tYW5kcyByZWx5IG9uIHRoYXQuCiAJICovCi0JaWYgKCFtbWNfaG9zdF9pc19zcGkoaG9zdCkpIHsKKwlpZiAoIXBvd2VyZWRfcmVzdW1lICYmICFtbWNfaG9zdF9pc19zcGkoaG9zdCkpIHsKIAkJZXJyID0gbW1jX3NlbGVjdF9jYXJkKGNhcmQpOwogCQlpZiAoZXJyKQogCQkJZ290byByZW1vdmU7CkBAIC00MjUsNiArNDYxLDEyIEBACiAJCX0KIAl9CiAKKwlpZiAoIWVyciAmJiBob3N0LT5wbV9mbGFncyAmIE1NQ19QTV9LRUVQX1BPV0VSKSB7CisJCW1tY19jbGFpbV9ob3N0KGhvc3QpOworCQlzZGlvX2Rpc2FibGVfd2lkZShob3N0LT5jYXJkKTsKKwkJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKKwl9CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC00MzcsNyArNDc5LDEzIEBACiAKIAkvKiBCYXNpYyBjYXJkIHJlaW5pdGlhbGl6YXRpb24uICovCiAJbW1jX2NsYWltX2hvc3QoaG9zdCk7Ci0JZXJyID0gbW1jX3NkaW9faW5pdF9jYXJkKGhvc3QsIGhvc3QtPm9jciwgaG9zdC0+Y2FyZCk7CisJZXJyID0gbW1jX3NkaW9faW5pdF9jYXJkKGhvc3QsIGhvc3QtPm9jciwgaG9zdC0+Y2FyZCwKKwkJCQkgKGhvc3QtPnBtX2ZsYWdzICYgTU1DX1BNX0tFRVBfUE9XRVIpKTsKKwlpZiAoIWVycikKKwkJLyogV2UgbWF5IGhhdmUgc3dpdGNoZWQgdG8gMS1iaXQgbW9kZSBkdXJpbmcgc3VzcGVuZC4gKi8KKwkJZXJyID0gc2Rpb19lbmFibGVfd2lkZShob3N0LT5jYXJkKTsKKwlpZiAoIWVyciAmJiBob3N0LT5zZGlvX2lycXMpCisJCW1tY19zaWduYWxfc2Rpb19pcnEoaG9zdCk7CiAJbW1jX3JlbGVhc2VfaG9zdChob3N0KTsKIAogCS8qCkBAIC01MDcsNyArNTU1LDcgQEAKIAkvKgogCSAqIERldGVjdCBhbmQgaW5pdCB0aGUgY2FyZC4KIAkgKi8KLQllcnIgPSBtbWNfc2Rpb19pbml0X2NhcmQoaG9zdCwgaG9zdC0+b2NyLCBOVUxMKTsKKwllcnIgPSBtbWNfc2Rpb19pbml0X2NhcmQoaG9zdCwgaG9zdC0+b2NyLCBOVUxMLCAwKTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycjsKIAljYXJkID0gaG9zdC0+Y2FyZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19pby5jIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX2lvLmMKaW5kZXggZjlhYThhNy4uZmYyN2M4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZGlvX2lvLmMKKysrIGIvZHJpdmVycy9tbWMvY29yZS9zZGlvX2lvLmMKQEAgLTE4OSw3ICsxODksMTIgQEAKIHsKIAl1bnNpZ25lZCBtdmFsID0JbWluKGZ1bmMtPmNhcmQtPmhvc3QtPm1heF9zZWdfc2l6ZSwKIAkJCSAgICBmdW5jLT5jYXJkLT5ob3N0LT5tYXhfYmxrX3NpemUpOwotCW12YWwgPSBtaW4obXZhbCwgZnVuYy0+bWF4X2Jsa3NpemUpOworCisJaWYgKG1tY19ibGtzel9mb3JfYnl0ZV9tb2RlKGZ1bmMtPmNhcmQpKQorCQltdmFsID0gbWluKG12YWwsIGZ1bmMtPmN1cl9ibGtzaXplKTsKKwllbHNlCisJCW12YWwgPSBtaW4obXZhbCwgZnVuYy0+bWF4X2Jsa3NpemUpOworCiAJcmV0dXJuIG1pbihtdmFsLCA1MTJ1KTsgLyogbWF4aW11bSBzaXplIGZvciBieXRlIG1vZGUgKi8KIH0KIApAQCAtNjM1LDMgKzY0MCw1MiBAQAogCQkqZXJyX3JldCA9IHJldDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNkaW9fZjBfd3JpdGViKTsKKworLyoqCisgKglzZGlvX2dldF9ob3N0X3BtX2NhcHMgLSBnZXQgaG9zdCBwb3dlciBtYW5hZ2VtZW50IGNhcGFiaWxpdGllcworICoJQGZ1bmM6IFNESU8gZnVuY3Rpb24gYXR0YWNoZWQgdG8gaG9zdAorICoKKyAqCVJldHVybnMgYSBjYXBhYmlsaXR5IGJpdG1hc2sgY29ycmVzcG9uZGluZyB0byBwb3dlciBtYW5hZ2VtZW50CisgKglmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgY29udHJvbGxlciB0aGF0IHRoZSBjYXJkIGZ1bmN0aW9uCisgKgltaWdodCByZWx5IHVwb24gZHVyaW5nIGEgc3lzdGVtIHN1c3BlbmQuICBUaGUgaG9zdCBkb2Vzbid0IG5lZWQKKyAqCXRvIGJlIGNsYWltZWQsIG5vciB0aGUgZnVuY3Rpb24gYWN0aXZlLCBmb3IgdGhpcyBpbmZvcm1hdGlvbiB0byBiZQorICoJb2J0YWluZWQuCisgKi8KK21tY19wbV9mbGFnX3Qgc2Rpb19nZXRfaG9zdF9wbV9jYXBzKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpCit7CisJQlVHX09OKCFmdW5jKTsKKwlCVUdfT04oIWZ1bmMtPmNhcmQpOworCisJcmV0dXJuIGZ1bmMtPmNhcmQtPmhvc3QtPnBtX2NhcHM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzZGlvX2dldF9ob3N0X3BtX2NhcHMpOworCisvKioKKyAqCXNkaW9fc2V0X2hvc3RfcG1fZmxhZ3MgLSBzZXQgd2FudGVkIGhvc3QgcG93ZXIgbWFuYWdlbWVudCBjYXBhYmlsaXRpZXMKKyAqCUBmdW5jOiBTRElPIGZ1bmN0aW9uIGF0dGFjaGVkIHRvIGhvc3QKKyAqCisgKglTZXQgYSBjYXBhYmlsaXR5IGJpdG1hc2sgY29ycmVzcG9uZGluZyB0byB3YW50ZWQgaG9zdCBjb250cm9sbGVyCisgKglwb3dlciBtYW5hZ2VtZW50IGZlYXR1cmVzIGZvciB0aGUgdXBjb21pbmcgc3VzcGVuZCBzdGF0ZS4KKyAqCVRoaXMgbXVzdCBiZSBjYWxsZWQsIGlmIG5lZWRlZCwgZWFjaCB0aW1lIHRoZSBzdXNwZW5kIG1ldGhvZCBvZgorICoJdGhlIGZ1bmN0aW9uIGRyaXZlciBpcyBjYWxsZWQsIGFuZCBtdXN0IGNvbnRhaW4gb25seSBiaXRzIHRoYXQKKyAqCXdlcmUgcmV0dXJuZWQgYnkgc2Rpb19nZXRfaG9zdF9wbV9jYXBzKCkuCisgKglUaGUgaG9zdCBkb2Vzbid0IG5lZWQgdG8gYmUgY2xhaW1lZCwgbm9yIHRoZSBmdW5jdGlvbiBhY3RpdmUsCisgKglmb3IgdGhpcyBpbmZvcm1hdGlvbiB0byBiZSBzZXQuCisgKi8KK2ludCBzZGlvX3NldF9ob3N0X3BtX2ZsYWdzKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMsIG1tY19wbV9mbGFnX3QgZmxhZ3MpCit7CisJc3RydWN0IG1tY19ob3N0ICpob3N0OworCisJQlVHX09OKCFmdW5jKTsKKwlCVUdfT04oIWZ1bmMtPmNhcmQpOworCisJaG9zdCA9IGZ1bmMtPmNhcmQtPmhvc3Q7CisKKwlpZiAoZmxhZ3MgJiB+aG9zdC0+cG1fY2FwcykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBmdW5jdGlvbiBzdXNwZW5kIG1ldGhvZHMgYXJlIHNlcmlhbGl6ZWQsIGhlbmNlIG5vIGxvY2sgbmVlZGVkICovCisJaG9zdC0+cG1fZmxhZ3MgfD0gZmxhZ3M7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzZGlvX3NldF9ob3N0X3BtX2ZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19vcHMuYyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19vcHMuYwppbmRleCA0ZWI3ODI1Zi4uZGVhMzZkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZGlvX29wcy5jCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19vcHMuYwpAQCAtNjcsMTMgKzY3LDEzIEBACiAJcmV0dXJuIGVycjsKIH0KIAotaW50IG1tY19pb19yd19kaXJlY3Qoc3RydWN0IG1tY19jYXJkICpjYXJkLCBpbnQgd3JpdGUsIHVuc2lnbmVkIGZuLAotCXVuc2lnbmVkIGFkZHIsIHU4IGluLCB1OCogb3V0KQorc3RhdGljIGludCBtbWNfaW9fcndfZGlyZWN0X2hvc3Qoc3RydWN0IG1tY19ob3N0ICpob3N0LCBpbnQgd3JpdGUsIHVuc2lnbmVkIGZuLAorCXVuc2lnbmVkIGFkZHIsIHU4IGluLCB1OCAqb3V0KQogewogCXN0cnVjdCBtbWNfY29tbWFuZCBjbWQ7CiAJaW50IGVycjsKIAotCUJVR19PTighY2FyZCk7CisJQlVHX09OKCFob3N0KTsKIAlCVUdfT04oZm4gPiA3KTsKIAogCS8qIHNhbml0eSBjaGVjayAqLwpAQCAtOTAsMTEgKzkwLDExIEBACiAJY21kLmFyZyB8PSBpbjsKIAljbWQuZmxhZ3MgPSBNTUNfUlNQX1NQSV9SNSB8IE1NQ19SU1BfUjUgfCBNTUNfQ01EX0FDOwogCi0JZXJyID0gbW1jX3dhaXRfZm9yX2NtZChjYXJkLT5ob3N0LCAmY21kLCAwKTsKKwllcnIgPSBtbWNfd2FpdF9mb3JfY21kKGhvc3QsICZjbWQsIDApOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAobW1jX2hvc3RfaXNfc3BpKGNhcmQtPmhvc3QpKSB7CisJaWYgKG1tY19ob3N0X2lzX3NwaShob3N0KSkgewogCQkvKiBob3N0IGRyaXZlciBhbHJlYWR5IHJlcG9ydGVkIGVycm9ycyAqLwogCX0gZWxzZSB7CiAJCWlmIChjbWQucmVzcFswXSAmIFI1X0VSUk9SKQpAQCAtMTA2LDcgKzEwNiw3IEBACiAJfQogCiAJaWYgKG91dCkgewotCQlpZiAobW1jX2hvc3RfaXNfc3BpKGNhcmQtPmhvc3QpKQorCQlpZiAobW1jX2hvc3RfaXNfc3BpKGhvc3QpKQogCQkJKm91dCA9IChjbWQucmVzcFswXSA+PiA4KSAmIDB4RkY7CiAJCWVsc2UKIAkJCSpvdXQgPSBjbWQucmVzcFswXSAmIDB4RkY7CkBAIC0xMTUsNiArMTE1LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBtbWNfaW9fcndfZGlyZWN0KHN0cnVjdCBtbWNfY2FyZCAqY2FyZCwgaW50IHdyaXRlLCB1bnNpZ25lZCBmbiwKKwl1bnNpZ25lZCBhZGRyLCB1OCBpbiwgdTggKm91dCkKK3sKKwlCVUdfT04oIWNhcmQpOworCXJldHVybiBtbWNfaW9fcndfZGlyZWN0X2hvc3QoY2FyZC0+aG9zdCwgd3JpdGUsIGZuLCBhZGRyLCBpbiwgb3V0KTsKK30KKwogaW50IG1tY19pb19yd19leHRlbmRlZChzdHJ1Y3QgbW1jX2NhcmQgKmNhcmQsIGludCB3cml0ZSwgdW5zaWduZWQgZm4sCiAJdW5zaWduZWQgYWRkciwgaW50IGluY3JfYWRkciwgdTggKmJ1ZiwgdW5zaWduZWQgYmxvY2tzLCB1bnNpZ25lZCBibGtzeikKIHsKQEAgLTE4MiwzICsxODksMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IHNkaW9fcmVzZXQoc3RydWN0IG1tY19ob3N0ICpob3N0KQoreworCWludCByZXQ7CisJdTggYWJvcnQ7CisKKwkvKiBTRElPIFNpbXBsaWZpZWQgU3BlY2lmaWNhdGlvbiBWMi4wLCA0LjQgUmVzZXQgZm9yIFNESU8gKi8KKworCXJldCA9IG1tY19pb19yd19kaXJlY3RfaG9zdChob3N0LCAwLCAwLCBTRElPX0NDQ1JfQUJPUlQsIDAsICZhYm9ydCk7CisJaWYgKHJldCkKKwkJYWJvcnQgPSAweDA4OworCWVsc2UKKwkJYWJvcnQgfD0gMHgwODsKKworCXJldCA9IG1tY19pb19yd19kaXJlY3RfaG9zdChob3N0LCAxLCAwLCBTRElPX0NDQ1JfQUJPUlQsIGFib3J0LCBOVUxMKTsKKwlyZXR1cm4gcmV0OworfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9jb3JlL3NkaW9fb3BzLmggYi9kcml2ZXJzL21tYy9jb3JlL3NkaW9fb3BzLmgKaW5kZXggZTJlNzRiMC4uMTJhNGQzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvY29yZS9zZGlvX29wcy5oCisrKyBiL2RyaXZlcnMvbW1jL2NvcmUvc2Rpb19vcHMuaApAQCAtMTcsNiArMTcsNyBAQAogCXVuc2lnbmVkIGFkZHIsIHU4IGluLCB1OCogb3V0KTsKIGludCBtbWNfaW9fcndfZXh0ZW5kZWQoc3RydWN0IG1tY19jYXJkICpjYXJkLCBpbnQgd3JpdGUsIHVuc2lnbmVkIGZuLAogCXVuc2lnbmVkIGFkZHIsIGludCBpbmNyX2FkZHIsIHU4ICpidWYsIHVuc2lnbmVkIGJsb2NrcywgdW5zaWduZWQgYmxrc3opOworaW50IHNkaW9fcmVzZXQoc3RydWN0IG1tY19ob3N0ICpob3N0KTsKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZwppbmRleCBjZTFkMjg4Li4yZTEzYjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnCkBAIC02OSwyMCArNjksMTYgQEAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBNTUNfUklDT0hfTU1DCi0JdHJpc3RhdGUgIlJpY29oIE1NQyBDb250cm9sbGVyIERpc2FibGVyICAoRVhQRVJJTUVOVEFMKSIKKwlib29sICJSaWNvaCBNTUMgQ29udHJvbGxlciBEaXNhYmxlciAgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBNTUNfU0RIQ0lfUENJCiAJaGVscAotCSAgVGhpcyBzZWxlY3RzIHRoZSBkaXNhYmxlciBmb3IgdGhlIFJpY29oIE1NQyBDb250cm9sbGVyLiBUaGlzCisJICBUaGlzIGFkZHMgYSBwY2kgcXVpcmsgdG8gZGlzYWJsZSBSaWNvaCBNTUMgQ29udHJvbGxlci4gVGhpcwogCSAgcHJvcHJpZXRhcnkgY29udHJvbGxlciBpcyB1bm5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBTREhDSSBkcml2ZXIKIAkgIHN1cHBvcnRzIE1NQyBjYXJkcyBvbiB0aGUgU0QgY29udHJvbGxlciwgYnV0IGlmIGl0IGlzIG5vdAogCSAgZGlzYWJsZWQsIGl0IHdpbGwgc3RlYWwgdGhlIE1NQyBjYXJkcyBhd2F5IC0gcmVuZGVyaW5nIHRoZW0KLQkgIHVzZWxlc3MuIEl0IGlzIHNhZmUgdG8gc2VsZWN0IHRoaXMgZHJpdmVyIGV2ZW4gaWYgeW91IGRvbid0CisJICB1c2VsZXNzLiBJdCBpcyBzYWZlIHRvIHNlbGVjdCB0aGlzIGV2ZW4gaWYgeW91IGRvbid0CiAJICBoYXZlIGEgUmljb2ggYmFzZWQgY2FyZCByZWFkZXIuCiAKLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZToKLQkgIHRoZSBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcmljb2hfbW1jLgotCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCiBjb25maWcgTU1DX1NESENJX09GCkBAIC0xOTMsNiArMTg5LDcgQEAKIAogY2hvaWNlCiAJcHJvbXB0ICJBdG1lbCBTRC9NTUMgRHJpdmVyIgorCWRlcGVuZHMgb24gQVZSMzIgfHwgQVJDSF9BVDkxCiAJZGVmYXVsdCBNTUNfQVRNRUxNQ0kgaWYgQVZSMzIKIAloZWxwCiAJICBDaG9vc2Ugd2hpY2ggZHJpdmVyIHRvIHVzZSBmb3IgdGhlIEF0bWVsIE1DSSBTaWxpY29uCkBAIC0zNjgsNyArMzY1LDcgQEAKIAogY29uZmlnIE1NQ19UTUlPCiAJdHJpc3RhdGUgIlRvc2hpYmEgTW9iaWxlIElPIENvbnRyb2xsZXIgKFRNSU8pIE1NQy9TRCBmdW5jdGlvbiBzdXBwb3J0IgotCWRlcGVuZHMgb24gTUZEX1RNSU8gfHwgTUZEX0FTSUMzIHx8IFNVUEVSSAorCWRlcGVuZHMgb24gTUZEX1RNSU8gfHwgTUZEX0FTSUMzIHx8IE1GRF9TSF9NT0JJTEVfU0RISQogCWhlbHAKIAkgIFRoaXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIFNEL01NQyBjZWxsIGZvdW5kIGluIFRDNjM5M1hCLAogCSAgVDdMNjZYQiBhbmQgYWxzbyBIVEMgQVNJQzMKQEAgLTM5OSw3ICszOTYsNyBAQAogCiBjb25maWcgU0RIX0JGSU4KIAl0cmlzdGF0ZSAiQmxhY2tmaW4gU2VjdXJlIERpZ2l0YWwgSG9zdCBzdXBwb3J0IgotCWRlcGVuZHMgb24gTU1DICYmICgoQkY1NHggJiYgIUJGNTQ0KSB8fCAoQkY1MXggJiYgIUJGNTEyKSkKKwlkZXBlbmRzIG9uIChCRjU0eCAmJiAhQkY1NDQpIHx8IChCRjUxeCAmJiAhQkY1MTIpCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3Ugd2lsbCBnZXQgc3VwcG9ydCBmb3IgdGhlIEJsYWNrZmluIG9uLWNoaXAKIAkgIFNlY3VyZSBEaWdpdGFsIEhvc3QgaW50ZXJmYWNlLiAgVGhpcyBpbmNsdWRlcyBzdXBwb3J0IGZvciBNTUMgYW5kCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlIGIvZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZQppbmRleCAzZDI1M2RkLi5mNDgwMzk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUKQEAgLTEyLDcgKzEyLDYgQEAKIG9iai0kKENPTkZJR19NTUNfTVhDKQkJKz0gbXhjbW1jLm8KIG9iai0kKENPTkZJR19NTUNfU0RIQ0kpCQkrPSBzZGhjaS5vCiBvYmotJChDT05GSUdfTU1DX1NESENJX1BDSSkJKz0gc2RoY2ktcGNpLm8KLW9iai0kKENPTkZJR19NTUNfUklDT0hfTU1DKQkrPSByaWNvaF9tbWMubwogb2JqLSQoQ09ORklHX01NQ19TREhDSV9QTFRGTSkJKz0gc2RoY2ktcGx0Zm0ubwogb2JqLSQoQ09ORklHX01NQ19TREhDSV9TM0MpCSs9IHNkaGNpLXMzYy5vCiBvYmotJChDT05GSUdfTU1DX1dCU0QpCQkrPSB3YnNkLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvYXQ5MV9tY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3QvYXQ5MV9tY2kuYwppbmRleCA2MzkyNGUwLi45MWRjNjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L2F0OTFfbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9hdDkxX21jaS5jCkBAIC03OCw2ICs3OCwxNyBAQAogCiAjZGVmaW5lIERSSVZFUl9OQU1FICJhdDkxX21jaSIKIAorc3RhdGljIGlubGluZSBpbnQgYXQ5MW1jaV9pc19tY2kxcmV2Mnh4KHZvaWQpCit7CisJcmV0dXJuICggICBjcHVfaXNfYXQ5MXNhbTkyNjAoKQorCQl8fCBjcHVfaXNfYXQ5MXNhbTkyNjMoKQorCQl8fCBjcHVfaXNfYXQ5MWNhcDkoKQorCQl8fCBjcHVfaXNfYXQ5MXNhbTlybCgpCisJCXx8IGNwdV9pc19hdDkxc2FtOWcxMCgpCisJCXx8IGNwdV9pc19hdDkxc2FtOWcyMCgpCisJCSk7Cit9CisKICNkZWZpbmUgRkxfU0VOVF9DT01NQU5ECSgxIDw8IDApCiAjZGVmaW5lIEZMX1NFTlRfU1RPUAkoMSA8PCAxKQogCkBAIC04OCw2ICs5OSwxMCBAQAogI2RlZmluZSBhdDkxX21jaV9yZWFkKGhvc3QsIHJlZykJX19yYXdfcmVhZGwoKGhvc3QpLT5iYXNlYWRkciArIChyZWcpKQogI2RlZmluZSBhdDkxX21jaV93cml0ZShob3N0LCByZWcsIHZhbCkJX19yYXdfd3JpdGVsKCh2YWwpLCAoaG9zdCktPmJhc2VhZGRyICsgKHJlZykpCiAKKyNkZWZpbmUgTUNJX0JMS1NJWkUgCQk1MTIKKyNkZWZpbmUgTUNJX01BWEJMS1NJWkUgCQk0MDk1CisjZGVmaW5lIE1DSV9CTEtBVE9OQ0UgCQkyNTYKKyNkZWZpbmUgTUNJX0JVRlNJWkUgCQkoTUNJX0JMS1NJWkUgKiBNQ0lfQkxLQVRPTkNFKQogCiAvKgogICogTG93IGxldmVsIHR5cGUgZm9yIHRoaXMgZHJpdmVyCkBAIC0yMDAsOCArMjE1LDggQEAKIAlzaXplID0gZGF0YS0+Ymxrc3ogKiBkYXRhLT5ibG9ja3M7CiAJbGVuID0gZGF0YS0+c2dfbGVuOwogCi0JLyogQVQ5MVNBTTkyNlswLzNdIERhdGEgV3JpdGUgT3BlcmF0aW9uIGFuZCBudW1iZXIgb2YgYnl0ZXMgZXJyYXR1bSAqLwotCWlmIChjcHVfaXNfYXQ5MXNhbTkyNjAoKSB8fCBjcHVfaXNfYXQ5MXNhbTkyNjMoKSkKKwkvKiBNQ0kxIHJldjJ4eCBEYXRhIFdyaXRlIE9wZXJhdGlvbiBhbmQgbnVtYmVyIG9mIGJ5dGVzIGVycmF0dW0gKi8KKwlpZiAoYXQ5MW1jaV9pc19tY2kxcmV2Mnh4KCkpCiAJCWlmIChob3N0LT50b3RhbF9sZW5ndGggPT0gMTIpCiAJCQltZW1zZXQoZG1hYnVmLCAwLCAxMik7CiAKQEAgLTIyNyw4ICsyNDIsMTAgQEAKIAkJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IChhbW91bnQgLyA0KTsgaW5kZXgrKykKIAkJCQkqZG1hYnVmKysgPSBzd2FiMzIoc2didWZmZXJbaW5kZXhdKTsKIAkJfSBlbHNlIHsKLQkJCW1lbWNweShkbWFidWYsIHNnYnVmZmVyLCBhbW91bnQpOwotCQkJZG1hYnVmICs9IGFtb3VudDsKKwkJCWNoYXIgKnRtcHYgPSAoY2hhciAqKWRtYWJ1ZjsKKwkJCW1lbWNweSh0bXB2LCBzZ2J1ZmZlciwgYW1vdW50KTsKKwkJCXRtcHYgKz0gYW1vdW50OworCQkJZG1hYnVmID0gKHVuc2lnbmVkICopdG1wdjsKIAkJfQogCiAJCWt1bm1hcF9hdG9taWMoc2didWZmZXIsIEtNX0JJT19TUkNfSVJRKTsKQEAgLTI0NSw4MCArMjYyLDE0IEBACiB9CiAKIC8qCi0gKiBQcmVwYXJlIGEgZG1hIHJlYWQKLSAqLwotc3RhdGljIHZvaWQgYXQ5MV9tY2lfcHJlX2RtYV9yZWFkKHN0cnVjdCBhdDkxbWNpX2hvc3QgKmhvc3QpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKLQlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZDsKLQlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGE7Ci0KLQlwcl9kZWJ1ZygicHJlIGRtYSByZWFkXG4iKTsKLQotCWNtZCA9IGhvc3QtPmNtZDsKLQlpZiAoIWNtZCkgewotCQlwcl9kZWJ1Zygibm8gY29tbWFuZFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkYXRhID0gY21kLT5kYXRhOwotCWlmICghZGF0YSkgewotCQlwcl9kZWJ1Zygibm8gZGF0YVxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCS8qIG5vdGhpbmcgbGVmdCB0byB0cmFuc2ZlciAqLwotCQlpZiAoaG9zdC0+dHJhbnNmZXJfaW5kZXggPj0gZGF0YS0+c2dfbGVuKSB7Ci0JCQlwcl9kZWJ1ZygiTm90aGluZyBsZWZ0IHRvIHRyYW5zZmVyIChpbmRleCA9ICVkKVxuIiwgaG9zdC0+dHJhbnNmZXJfaW5kZXgpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBDaGVjayB0byBzZWUgaWYgdGhpcyBuZWVkcyBmaWxsaW5nICovCi0JCWlmIChpID09IDApIHsKLQkJCWlmIChhdDkxX21jaV9yZWFkKGhvc3QsIEFUTUVMX1BEQ19SQ1IpICE9IDApIHsKLQkJCQlwcl9kZWJ1ZygiVHJhbnNmZXIgYWN0aXZlIGluIGN1cnJlbnRcbiIpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9Ci0JCWVsc2UgewotCQkJaWYgKGF0OTFfbWNpX3JlYWQoaG9zdCwgQVRNRUxfUERDX1JOQ1IpICE9IDApIHsKLQkJCQlwcl9kZWJ1ZygiVHJhbnNmZXIgYWN0aXZlIGluIG5leHRcbiIpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9Ci0KLQkJLyogU2V0dXAgdGhlIG5leHQgdHJhbnNmZXIgKi8KLQkJcHJfZGVidWcoIlVzaW5nIHRyYW5zZmVyIGluZGV4ICVkXG4iLCBob3N0LT50cmFuc2Zlcl9pbmRleCk7Ci0KLQkJc2cgPSAmZGF0YS0+c2dbaG9zdC0+dHJhbnNmZXJfaW5kZXgrK107Ci0JCXByX2RlYnVnKCJzZyA9ICVwXG4iLCBzZyk7Ci0KLQkJc2ctPmRtYV9hZGRyZXNzID0gZG1hX21hcF9wYWdlKE5VTEwsIHNnX3BhZ2Uoc2cpLCBzZy0+b2Zmc2V0LCBzZy0+bGVuZ3RoLCBETUFfRlJPTV9ERVZJQ0UpOwotCi0JCXByX2RlYnVnKCJkbWEgYWRkcmVzcyA9ICUwOFgsIGxlbmd0aCA9ICVkXG4iLCBzZy0+ZG1hX2FkZHJlc3MsIHNnLT5sZW5ndGgpOwotCi0JCWlmIChpID09IDApIHsKLQkJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUTUVMX1BEQ19SUFIsIHNnLT5kbWFfYWRkcmVzcyk7Ci0JCQlhdDkxX21jaV93cml0ZShob3N0LCBBVE1FTF9QRENfUkNSLCAoZGF0YS0+Ymxrc3ogJiAweDMpID8gc2ctPmxlbmd0aCA6IHNnLT5sZW5ndGggLyA0KTsKLQkJfQotCQllbHNlIHsKLQkJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUTUVMX1BEQ19STlBSLCBzZy0+ZG1hX2FkZHJlc3MpOwotCQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVRNRUxfUERDX1JOQ1IsIChkYXRhLT5ibGtzeiAmIDB4MykgPyBzZy0+bGVuZ3RoIDogc2ctPmxlbmd0aCAvIDQpOwotCQl9Ci0JfQotCi0JcHJfZGVidWcoInByZSBkbWEgcmVhZCBkb25lXG4iKTsKLX0KLQotLyoKICAqIEhhbmRsZSBhZnRlciBhIGRtYSByZWFkCiAgKi8KIHN0YXRpYyB2b2lkIGF0OTFfbWNpX3Bvc3RfZG1hX3JlYWQoc3RydWN0IGF0OTFtY2lfaG9zdCAqaG9zdCkKIHsKIAlzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZDsKIAlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGE7CisJdW5zaWduZWQgaW50IGxlbiwgaSwgc2l6ZTsKKwl1bnNpZ25lZCAqZG1hYnVmID0gaG9zdC0+YnVmZmVyOwogCiAJcHJfZGVidWcoInBvc3QgZG1hIHJlYWRcbiIpOwogCkBAIC0zMzQsNDIgKzI4NSwzOSBAQAogCQlyZXR1cm47CiAJfQogCi0Jd2hpbGUgKGhvc3QtPmluX3VzZV9pbmRleCA8IGhvc3QtPnRyYW5zZmVyX2luZGV4KSB7CisJc2l6ZSA9IGRhdGEtPmJsa3N6ICogZGF0YS0+YmxvY2tzOworCWxlbiA9IGRhdGEtPnNnX2xlbjsKKworCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfTUNJX0lEUiwgQVQ5MV9NQ0lfRU5EUlgpOworCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfTUNJX0lFUiwgQVQ5MV9NQ0lfUlhCVUZGKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOworCQlpbnQgYW1vdW50OworCQl1bnNpZ25lZCBpbnQgKnNnYnVmZmVyOwogCi0JCXByX2RlYnVnKCJmaW5pc2hpbmcgaW5kZXggJWRcbiIsIGhvc3QtPmluX3VzZV9pbmRleCk7CisJCXNnID0gJmRhdGEtPnNnW2ldOwogCi0JCXNnID0gJmRhdGEtPnNnW2hvc3QtPmluX3VzZV9pbmRleCsrXTsKLQotCQlwcl9kZWJ1ZygiVW5tYXBwaW5nIHBhZ2UgJTA4WFxuIiwgc2ctPmRtYV9hZGRyZXNzKTsKLQotCQlkbWFfdW5tYXBfcGFnZShOVUxMLCBzZy0+ZG1hX2FkZHJlc3MsIHNnLT5sZW5ndGgsIERNQV9GUk9NX0RFVklDRSk7CisJCXNnYnVmZmVyID0ga21hcF9hdG9taWMoc2dfcGFnZShzZyksIEtNX0JJT19TUkNfSVJRKSArIHNnLT5vZmZzZXQ7CisJCWFtb3VudCA9IG1pbihzaXplLCBzZy0+bGVuZ3RoKTsKKwkJc2l6ZSAtPSBhbW91bnQ7CiAKIAkJaWYgKGNwdV9pc19hdDkxcm05MjAwKCkpIHsJLyogQVQ5MVJNOTIwMCBlcnJhdGEgKi8KLQkJCXVuc2lnbmVkIGludCAqYnVmZmVyOwogCQkJaW50IGluZGV4OwotCi0JCQkvKiBTd2FwIHRoZSBjb250ZW50cyBvZiB0aGUgYnVmZmVyICovCi0JCQlidWZmZXIgPSBrbWFwX2F0b21pYyhzZ19wYWdlKHNnKSwgS01fQklPX1NSQ19JUlEpICsgc2ctPm9mZnNldDsKLQkJCXByX2RlYnVnKCJidWZmZXIgPSAlcCwgbGVuZ3RoID0gJWRcbiIsIGJ1ZmZlciwgc2ctPmxlbmd0aCk7Ci0KLQkJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IChzZy0+bGVuZ3RoIC8gNCk7IGluZGV4KyspCi0JCQkJYnVmZmVyW2luZGV4XSA9IHN3YWIzMihidWZmZXJbaW5kZXhdKTsKLQotCQkJa3VubWFwX2F0b21pYyhidWZmZXIsIEtNX0JJT19TUkNfSVJRKTsKKwkJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IChhbW91bnQgLyA0KTsgaW5kZXgrKykKKwkJCQlzZ2J1ZmZlcltpbmRleF0gPSBzd2FiMzIoKmRtYWJ1ZisrKTsKKwkJfSBlbHNlIHsKKwkJCWNoYXIgKnRtcHYgPSAoY2hhciAqKWRtYWJ1ZjsKKwkJCW1lbWNweShzZ2J1ZmZlciwgdG1wdiwgYW1vdW50KTsKKwkJCXRtcHYgKz0gYW1vdW50OworCQkJZG1hYnVmID0gKHVuc2lnbmVkICopdG1wdjsKIAkJfQogCi0JCWZsdXNoX2RjYWNoZV9wYWdlKHNnX3BhZ2Uoc2cpKTsKLQotCQlkYXRhLT5ieXRlc194ZmVyZWQgKz0gc2ctPmxlbmd0aDsKLQl9Ci0KLQkvKiBJcyB0aGVyZSBhbm90aGVyIHRyYW5zZmVyIHRvIHRyaWdnZXI/ICovCi0JaWYgKGhvc3QtPnRyYW5zZmVyX2luZGV4IDwgZGF0YS0+c2dfbGVuKQotCQlhdDkxX21jaV9wcmVfZG1hX3JlYWQoaG9zdCk7Ci0JZWxzZSB7Ci0JCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfTUNJX0lEUiwgQVQ5MV9NQ0lfRU5EUlgpOwotCQlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX01DSV9JRVIsIEFUOTFfTUNJX1JYQlVGRik7CisJCWt1bm1hcF9hdG9taWMoc2didWZmZXIsIEtNX0JJT19TUkNfSVJRKTsKKwkJZG1hY19mbHVzaF9yYW5nZSgodm9pZCAqKXNnYnVmZmVyLCAoKHZvaWQgKilzZ2J1ZmZlcikgKyBhbW91bnQpOworCQlkYXRhLT5ieXRlc194ZmVyZWQgKz0gYW1vdW50OworCQlpZiAoc2l6ZSA9PSAwKQorCQkJYnJlYWs7CiAJfQogCiAJcHJfZGVidWcoInBvc3QgZG1hIHJlYWQgZG9uZVxuIik7CkBAIC00NjEsNyArNDA5LDcgQEAKIAlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX01DSV9EVE9SLCBBVDkxX01DSV9EVE9NVUxfMU0gfCBBVDkxX01DSV9EVE9DWUMpOwogCW1yID0gQVQ5MV9NQ0lfUERDTU9ERSB8IDB4MzRhOwogCi0JaWYgKGNwdV9pc19hdDkxc2FtOTI2MCgpIHx8IGNwdV9pc19hdDkxc2FtOTI2MygpKQorCWlmIChhdDkxbWNpX2lzX21jaTFyZXYyeHgoKSkKIAkJbXIgfD0gQVQ5MV9NQ0lfUkRQUk9PRiB8IEFUOTFfTUNJX1dSUFJPT0Y7CiAKIAlhdDkxX21jaV93cml0ZShob3N0LCBBVDkxX01DSV9NUiwgbXIpOwpAQCAtNjAyLDEwICs1NTAsMTQgQEAKIAkJCQkvKgogCQkJCSAqIEhhbmRsZSBhIHJlYWQKIAkJCQkgKi8KLQkJCQlob3N0LT5idWZmZXIgPSBOVUxMOwogCQkJCWhvc3QtPnRvdGFsX2xlbmd0aCA9IDA7CiAKLQkJCQlhdDkxX21jaV9wcmVfZG1hX3JlYWQoaG9zdCk7CisJCQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVRNRUxfUERDX1JQUiwgaG9zdC0+cGh5c2ljYWxfYWRkcmVzcyk7CisJCQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVRNRUxfUERDX1JDUiwgKGRhdGEtPmJsa3N6ICYgMHgzKSA/CisJCQkJCShibG9ja3MgKiBibG9ja19sZW5ndGgpIDogKGJsb2NrcyAqIGJsb2NrX2xlbmd0aCkgLyA0KTsKKwkJCQlhdDkxX21jaV93cml0ZShob3N0LCBBVE1FTF9QRENfUk5QUiwgMCk7CisJCQkJYXQ5MV9tY2lfd3JpdGUoaG9zdCwgQVRNRUxfUERDX1JOQ1IsIDApOworCiAJCQkJaWVyID0gQVQ5MV9NQ0lfRU5EUlggLyogfCBBVDkxX01DSV9SWEJVRkYgKi87CiAJCQl9CiAJCQllbHNlIHsKQEAgLTYxNCwyNyArNTY2LDE1IEBACiAJCQkJICovCiAJCQkJaG9zdC0+dG90YWxfbGVuZ3RoID0gYmxvY2tfbGVuZ3RoICogYmxvY2tzOwogCQkJCS8qCi0JCQkJICogQVQ5MVNBTTkyNlswLzNdIERhdGEgV3JpdGUgT3BlcmF0aW9uIGFuZAorCQkJCSAqIE1DSTEgcmV2Mnh4IERhdGEgV3JpdGUgT3BlcmF0aW9uIGFuZAogCQkJCSAqIG51bWJlciBvZiBieXRlcyBlcnJhdHVtCiAJCQkJICovCi0JCQkJaWYgKGNwdV9pc19hdDkxc2FtOTI2MCAoKSB8fCBjcHVfaXNfYXQ5MXNhbTkyNjMoKSkKKwkJCQlpZiAoYXQ5MW1jaV9pc19tY2kxcmV2Mnh4KCkpCiAJCQkJCWlmIChob3N0LT50b3RhbF9sZW5ndGggPCAxMikKIAkJCQkJCWhvc3QtPnRvdGFsX2xlbmd0aCA9IDEyOwogCi0JCQkJaG9zdC0+YnVmZmVyID0ga21hbGxvYyhob3N0LT50b3RhbF9sZW5ndGgsIEdGUF9LRVJORUwpOwotCQkJCWlmICghaG9zdC0+YnVmZmVyKSB7Ci0JCQkJCXByX2RlYnVnKCJDYW4ndCBhbGxvYyB0eCBidWZmZXJcbiIpOwotCQkJCQljbWQtPmVycm9yID0gLUVOT01FTTsKLQkJCQkJbW1jX3JlcXVlc3RfZG9uZShob3N0LT5tbWMsIGhvc3QtPnJlcXVlc3QpOwotCQkJCQlyZXR1cm47Ci0JCQkJfQotCiAJCQkJYXQ5MV9tY2lfc2dfdG9fZG1hKGhvc3QsIGRhdGEpOwogCi0JCQkJaG9zdC0+cGh5c2ljYWxfYWRkcmVzcyA9IGRtYV9tYXBfc2luZ2xlKE5VTEwsCi0JCQkJCQlob3N0LT5idWZmZXIsIGhvc3QtPnRvdGFsX2xlbmd0aCwKLQkJCQkJCURNQV9UT19ERVZJQ0UpOwotCiAJCQkJcHJfZGVidWcoIlRyYW5zbWl0dGluZyAlZCBieXRlc1xuIiwgaG9zdC0+dG90YWxfbGVuZ3RoKTsKIAogCQkJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUTUVMX1BEQ19UUFIsIGhvc3QtPnBoeXNpY2FsX2FkZHJlc3MpOwpAQCAtNzAxLDE0ICs2NDEsNiBAQAogCWNtZC0+cmVzcFsyXSA9IGF0OTFfbWNpX3JlYWQoaG9zdCwgQVQ5MV9NQ0lfUlNQUigyKSk7CiAJY21kLT5yZXNwWzNdID0gYXQ5MV9tY2lfcmVhZChob3N0LCBBVDkxX01DSV9SU1BSKDMpKTsKIAotCWlmIChob3N0LT5idWZmZXIpIHsKLQkJZG1hX3VubWFwX3NpbmdsZShOVUxMLAotCQkJCWhvc3QtPnBoeXNpY2FsX2FkZHJlc3MsIGhvc3QtPnRvdGFsX2xlbmd0aCwKLQkJCQlETUFfVE9fREVWSUNFKTsKLQkJa2ZyZWUoaG9zdC0+YnVmZmVyKTsKLQkJaG9zdC0+YnVmZmVyID0gTlVMTDsKLQl9Ci0KIAlwcl9kZWJ1ZygiU3RhdHVzID0gJTA4WC8lMDh4IFslMDhYICUwOFggJTA4WCAlMDhYXVxuIiwKIAkJIHN0YXR1cywgYXQ5MV9tY2lfcmVhZChob3N0LCBBVDkxX01DSV9TUiksCiAJCSBjbWQtPnJlc3BbMF0sIGNtZC0+cmVzcFsxXSwgY21kLT5yZXNwWzJdLCBjbWQtPnJlc3BbM10pOwpAQCAtNzU0LDcgKzY4Niw4IEBACiAJaG9zdC0+cmVxdWVzdCA9IG1ycTsKIAlob3N0LT5mbGFncyA9IDA7CiAKLQltb2RfdGltZXIoJmhvc3QtPnRpbWVyLCBqaWZmaWVzICsgIEhaKTsKKwkvKiBtb3JlIHRoYW4gMXMgdGltZW91dCBuZWVkZWQgd2l0aCBzbG93IFNEIGNhcmRzICovCisJbW9kX3RpbWVyKCZob3N0LT50aW1lciwgamlmZmllcyArICBtc2Vjc190b19qaWZmaWVzKDIwMDApKTsKIAogCWF0OTFfbWNpX3Byb2Nlc3NfbmV4dChob3N0KTsKIH0KQEAgLTk0Miw3ICs4NzUsOCBAQAogCQkJcHJfZGVidWcoIioqKioqKiBSZXNldHRpbmcgU0QtY2FyZCBidXMgd2lkdGggKioqKioqXG4iKTsKIAkJCWF0OTFfbWNpX3dyaXRlKGhvc3QsIEFUOTFfTUNJX1NEQ1IsIGF0OTFfbWNpX3JlYWQoaG9zdCwgQVQ5MV9NQ0lfU0RDUikgJiB+QVQ5MV9NQ0lfU0RDQlVTKTsKIAkJfQotCQltbWNfZGV0ZWN0X2NoYW5nZShob3N0LT5tbWMsIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CisJCS8qIDAuNXMgbmVlZGVkIGJlY2F1c2Ugb2YgZWFybHkgY2FyZCBkZXRlY3Qgc3dpdGNoIGZpcmluZyAqLworCQltbWNfZGV0ZWN0X2NoYW5nZShob3N0LT5tbWMsIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSk7CiAJfQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTEwMDYsMjQgKzk0MCw0MiBAQAogCW1tYy0+Zl9taW4gPSAzNzUwMDA7CiAJbW1jLT5mX21heCA9IDI1MDAwMDAwOwogCW1tYy0+b2NyX2F2YWlsID0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQ7Ci0JbW1jLT5jYXBzID0gTU1DX0NBUF9TRElPX0lSUTsKKwltbWMtPmNhcHMgPSAwOwogCi0JbW1jLT5tYXhfYmxrX3NpemUgPSA0MDk1OwotCW1tYy0+bWF4X2Jsa19jb3VudCA9IG1tYy0+bWF4X3JlcV9zaXplOworCW1tYy0+bWF4X2Jsa19zaXplICA9IE1DSV9NQVhCTEtTSVpFOworCW1tYy0+bWF4X2Jsa19jb3VudCA9IE1DSV9CTEtBVE9OQ0U7CisJbW1jLT5tYXhfcmVxX3NpemUgID0gTUNJX0JVRlNJWkU7CisJbW1jLT5tYXhfcGh5c19zZWdzID0gTUNJX0JMS0FUT05DRTsKKwltbWMtPm1heF9od19zZWdzICAgPSBNQ0lfQkxLQVRPTkNFOworCW1tYy0+bWF4X3NlZ19zaXplICA9IE1DSV9CVUZTSVpFOwogCiAJaG9zdCA9IG1tY19wcml2KG1tYyk7CiAJaG9zdC0+bW1jID0gbW1jOwotCWhvc3QtPmJ1ZmZlciA9IE5VTEw7CiAJaG9zdC0+YnVzX21vZGUgPSAwOwogCWhvc3QtPmJvYXJkID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaWYgKGhvc3QtPmJvYXJkLT53aXJlNCkgewotCQlpZiAoY3B1X2lzX2F0OTFzYW05MjYwKCkgfHwgY3B1X2lzX2F0OTFzYW05MjYzKCkpCisJCWlmIChhdDkxbWNpX2lzX21jaTFyZXYyeHgoKSkKIAkJCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQXzRfQklUX0RBVEE7CiAJCWVsc2UKIAkJCWRldl93YXJuKCZwZGV2LT5kZXYsICI0IHdpcmUgYnVzIG1vZGUgbm90IHN1cHBvcnRlZCIKIAkJCQkiIC0gdXNpbmcgMSB3aXJlXG4iKTsKIAl9CiAKKwlob3N0LT5idWZmZXIgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnBkZXYtPmRldiwgTUNJX0JVRlNJWkUsCisJCQkJCSZob3N0LT5waHlzaWNhbF9hZGRyZXNzLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWhvc3QtPmJ1ZmZlcikgeworCQlyZXQgPSAtRU5PTUVNOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW4ndCBhbGxvY2F0ZSB0cmFuc21pdCBidWZmZXJcbiIpOworCQlnb3RvIGZhaWw1OworCX0KKworCS8qIEFkZCBTRElPIGNhcGFiaWxpdHkgd2hlbiBhdmFpbGFibGUgKi8KKwlpZiAoYXQ5MW1jaV9pc19tY2kxcmV2Mnh4KCkpIHsKKwkJLyogYXQ5MW1jaSBNQ0kxIHJldjJ4eCBzZGlvIGludGVycnVwdCBlcnJhdHVtICovCisJCWlmIChob3N0LT5ib2FyZC0+d2lyZTQgfHwgIWhvc3QtPmJvYXJkLT5zbG90X2IpCisJCQltbWMtPmNhcHMgfD0gTU1DX0NBUF9TRElPX0lSUTsKKwl9CisKIAkvKgogCSAqIFJlc2VydmUgR1BJT3MgLi4uIGJvYXJkIGluaXQgY29kZSBtYWtlcyBzdXJlIHRoZXNlIHBpbnMgYXJlIHNldAogCSAqIHVwIGFzIEdQSU9zIHdpdGggdGhlIHJpZ2h0IGRpcmVjdGlvbiAoaW5wdXQsIGV4Y2VwdCBmb3IgdmNjKQpAQCAtMTAzMiw3ICs5ODQsNyBAQAogCQlyZXQgPSBncGlvX3JlcXVlc3QoaG9zdC0+Ym9hcmQtPmRldF9waW4sICJtbWNfZGV0ZWN0Iik7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb3VsZG4ndCBjbGFpbSBjYXJkIGRldGVjdCBwaW5cbiIpOwotCQkJZ290byBmYWlsNTsKKwkJCWdvdG8gZmFpbDRiOwogCQl9CiAJfQogCWlmIChob3N0LT5ib2FyZC0+d3BfcGluKSB7CkBAIC0xMTMyLDYgKzEwODQsMTAgQEAKIGZhaWw0OgogCWlmIChob3N0LT5ib2FyZC0+ZGV0X3BpbikKIAkJZ3Bpb19mcmVlKGhvc3QtPmJvYXJkLT5kZXRfcGluKTsKK2ZhaWw0YjoKKwlpZiAoaG9zdC0+YnVmZmVyKQorCQlkbWFfZnJlZV9jb2hlcmVudCgmcGRldi0+ZGV2LCBNQ0lfQlVGU0laRSwKKwkJCQlob3N0LT5idWZmZXIsIGhvc3QtPnBoeXNpY2FsX2FkZHJlc3MpOwogZmFpbDU6CiAJbW1jX2ZyZWVfaG9zdChtbWMpOwogZmFpbDY6CkBAIC0xMTU0LDYgKzExMTAsMTAgQEAKIAogCWhvc3QgPSBtbWNfcHJpdihtbWMpOwogCisJaWYgKGhvc3QtPmJ1ZmZlcikKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJnBkZXYtPmRldiwgTUNJX0JVRlNJWkUsCisJCQkJaG9zdC0+YnVmZmVyLCBob3N0LT5waHlzaWNhbF9hZGRyZXNzKTsKKwogCWlmIChob3N0LT5ib2FyZC0+ZGV0X3BpbikgewogCQlpZiAoZGV2aWNlX2Nhbl93YWtldXAoJnBkZXYtPmRldikpCiAJCQlmcmVlX2lycShncGlvX3RvX2lycShob3N0LT5ib2FyZC0+ZGV0X3BpbiksIGhvc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9iZmluX3NkaC5jIGIvZHJpdmVycy9tbWMvaG9zdC9iZmluX3NkaC5jCmluZGV4IDMzNDNhNTcuLjU2ZjdiNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvYmZpbl9zZGguYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2JmaW5fc2RoLmMKQEAgLTExNSw3ICsxMTUsNyBAQAogCXVuc2lnbmVkIGludCBsZW5ndGg7CiAJdW5zaWduZWQgaW50IGRhdGFfY3RsOwogCXVuc2lnbmVkIGludCBkbWFfY2ZnOwotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgaW50IGN5Y2xlX25zLCB0aW1lb3V0OwogCiAJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICIlcyBlbnRlciBmbGFnczogMHgleFxuIiwgX19mdW5jX18sIGRhdGEtPmZsYWdzKTsKIAlob3N0LT5kYXRhID0gZGF0YTsKQEAgLTEzNiw4ICsxMzYsMTEgQEAKIAlkYXRhX2N0bCB8PSAoKGZmcyhkYXRhLT5ibGtzeikgLSAxKSA8PCA0KTsKIAogCWJmaW5fd3JpdGVfU0RIX0RBVEFfQ1RMKGRhdGFfY3RsKTsKLQotCWJmaW5fd3JpdGVfU0RIX0RBVEFfVElNRVIoMHhGRkZGKTsKKwkvKiB0aGUgdGltZSBvZiBhIGhvc3QgY2xvY2sgcGVyaW9kIGluIG5zICovCisJY3ljbGVfbnMgPSAxMDAwMDAwMDAwIC8gKGdldF9zY2xrKCkgLyAoMiAqIChob3N0LT5jbGtfZGl2ICsgMSkpKTsKKwl0aW1lb3V0ID0gZGF0YS0+dGltZW91dF9ucyAvIGN5Y2xlX25zOworCXRpbWVvdXQgKz0gZGF0YS0+dGltZW91dF9jbGtzOworCWJmaW5fd3JpdGVfU0RIX0RBVEFfVElNRVIodGltZW91dCk7CiAJU1NZTkMoKTsKIAogCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpIHsKQEAgLTE1MSw2ICsxNTQsNyBAQAogI2lmIGRlZmluZWQoQ09ORklHX0JGNTR4KQogCWRtYV9jZmcgfD0gRE1BRkxPV19BUlJBWSB8IE5EU0laRV81IHwgUkVTVEFSVCB8IFdEU0laRV8zMiB8IERNQUVOOwogCXsKKwkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAkJaW50IGk7CiAJCWZvcl9lYWNoX3NnKGRhdGEtPnNnLCBzZywgaG9zdC0+ZG1hX2xlbiwgaSkgewogCQkJaG9zdC0+c2dfY3B1W2ldLnN0YXJ0X2FkZHIgPSBzZ19kbWFfYWRkcmVzcyhzZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMgYi9kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMKaW5kZXggZGQ0NWU3YzMuLjNiZDBiYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYworKysgYi9kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMKQEAgLTczLDYgKzczLDcgQEAKIC8qIERBVklOQ0lfTU1DQ1RMIGRlZmluaXRpb25zICovCiAjZGVmaW5lIE1NQ0NUTF9EQVRSU1QgICAgICAgICAoMSA8PCAwKQogI2RlZmluZSBNTUNDVExfQ01EUlNUICAgICAgICAgKDEgPDwgMSkKKyNkZWZpbmUgTU1DQ1RMX1dJRFRIXzhfQklUICAgICgxIDw8IDgpCiAjZGVmaW5lIE1NQ0NUTF9XSURUSF80X0JJVCAgICAoMSA8PCAyKQogI2RlZmluZSBNTUNDVExfREFURUdfRElTQUJMRUQgKDAgPDwgNikKICNkZWZpbmUgTU1DQ1RMX0RBVEVHX1JJU0lORyAgICgxIDw8IDYpCkBAIC03OTEsMjIgKzc5Miw0MiBAQAogCiBzdGF0aWMgdm9pZCBtbWNfZGF2aW5jaV9zZXRfaW9zKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKQogewotCXVuc2lnbmVkIGludCBtbWNfcGNsayA9IDA7CiAJc3RydWN0IG1tY19kYXZpbmNpX2hvc3QgKmhvc3QgPSBtbWNfcHJpdihtbWMpOwogCi0JbW1jX3BjbGsgPSBob3N0LT5tbWNfaW5wdXRfY2xrOwogCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLAogCQkiY2xvY2sgJWRIeiBidXNtb2RlICVkIHBvd2VybW9kZSAlZCBWZGQgJTA0eFxuIiwKIAkJaW9zLT5jbG9jaywgaW9zLT5idXNfbW9kZSwgaW9zLT5wb3dlcl9tb2RlLAogCQlpb3MtPnZkZCk7Ci0JaWYgKGlvcy0+YnVzX3dpZHRoID09IE1NQ19CVVNfV0lEVEhfNCkgeworCisJc3dpdGNoIChpb3MtPmJ1c193aWR0aCkgeworCWNhc2UgTU1DX0JVU19XSURUSF84OgorCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwgIkVuYWJsaW5nIDggYml0IG1vZGVcbiIpOworCQl3cml0ZWwoKHJlYWRsKGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0NUTCkgJgorCQkJfk1NQ0NUTF9XSURUSF80X0JJVCkgfCBNTUNDVExfV0lEVEhfOF9CSVQsCisJCQlob3N0LT5iYXNlICsgREFWSU5DSV9NTUNDVEwpOworCQlicmVhazsKKwljYXNlIE1NQ19CVVNfV0lEVEhfNDoKIAkJZGV2X2RiZyhtbWNfZGV2KGhvc3QtPm1tYyksICJFbmFibGluZyA0IGJpdCBtb2RlXG4iKTsKLQkJd3JpdGVsKHJlYWRsKGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0NUTCkgfCBNTUNDVExfV0lEVEhfNF9CSVQsCi0JCQlob3N0LT5iYXNlICsgREFWSU5DSV9NTUNDVEwpOwotCX0gZWxzZSB7Ci0JCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiRGlzYWJsaW5nIDQgYml0IG1vZGVcbiIpOwotCQl3cml0ZWwocmVhZGwoaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DQ1RMKSAmIH5NTUNDVExfV0lEVEhfNF9CSVQsCi0JCQlob3N0LT5iYXNlICsgREFWSU5DSV9NTUNDVEwpOworCQlpZiAoaG9zdC0+dmVyc2lvbiA9PSBNTUNfQ1RMUl9WRVJTSU9OXzIpCisJCQl3cml0ZWwoKHJlYWRsKGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0NUTCkgJgorCQkJCX5NTUNDVExfV0lEVEhfOF9CSVQpIHwgTU1DQ1RMX1dJRFRIXzRfQklULAorCQkJCWhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0NUTCk7CisJCWVsc2UKKwkJCXdyaXRlbChyZWFkbChob3N0LT5iYXNlICsgREFWSU5DSV9NTUNDVEwpIHwKKwkJCQlNTUNDVExfV0lEVEhfNF9CSVQsCisJCQkJaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DQ1RMKTsKKwkJYnJlYWs7CisJY2FzZSBNTUNfQlVTX1dJRFRIXzE6CisJCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiRW5hYmxpbmcgMSBiaXQgbW9kZVxuIik7CisJCWlmIChob3N0LT52ZXJzaW9uID09IE1NQ19DVExSX1ZFUlNJT05fMikKKwkJCXdyaXRlbChyZWFkbChob3N0LT5iYXNlICsgREFWSU5DSV9NTUNDVEwpICYKKwkJCQl+KE1NQ0NUTF9XSURUSF84X0JJVCB8IE1NQ0NUTF9XSURUSF80X0JJVCksCisJCQkJaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DQ1RMKTsKKwkJZWxzZQorCQkJd3JpdGVsKHJlYWRsKGhvc3QtPmJhc2UgKyBEQVZJTkNJX01NQ0NUTCkgJgorCQkJCX5NTUNDVExfV0lEVEhfNF9CSVQsCisJCQkJaG9zdC0+YmFzZSArIERBVklOQ0lfTU1DQ1RMKTsKKwkJYnJlYWs7CiAJfQogCiAJY2FsY3VsYXRlX2Nsa19kaXZpZGVyKG1tYywgaW9zKTsKQEAgLTExODksMTAgKzEyMTAsMTQgQEAKIAogCS8qIFJFVklTSVQ6ICBzb21lZGF5LCBzdXBwb3J0IElSUS1kcml2ZW4gY2FyZCBkZXRlY3Rpb24uICAqLwogCW1tYy0+Y2FwcyB8PSBNTUNfQ0FQX05FRURTX1BPTEw7CisJbW1jLT5jYXBzIHw9IE1NQ19DQVBfV0FJVF9XSElMRV9CVVNZOwogCi0JaWYgKCFwZGF0YSB8fCBwZGF0YS0+d2lyZXMgPT0gNCB8fCBwZGF0YS0+d2lyZXMgPT0gMCkKKwlpZiAocGRhdGEgJiYgKHBkYXRhLT53aXJlcyA9PSA0IHx8IHBkYXRhLT53aXJlcyA9PSAwKSkKIAkJbW1jLT5jYXBzIHw9IE1NQ19DQVBfNF9CSVRfREFUQTsKIAorCWlmIChwZGF0YSAmJiAocGRhdGEtPndpcmVzID09IDgpKQorCQltbWMtPmNhcHMgfD0gKE1NQ19DQVBfNF9CSVRfREFUQSB8IE1NQ19DQVBfOF9CSVRfREFUQSk7CisKIAlob3N0LT52ZXJzaW9uID0gcGRhdGEtPnZlcnNpb247CiAKIAltbWMtPm9wcyA9ICZtbWNfZGF2aW5jaV9vcHM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMgYi9kcml2ZXJzL21tYy9ob3N0L21zbV9zZGNjLmMKaW5kZXggYjMxOTQ2ZS4uNGMwNjhlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9tc21fc2RjYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbXNtX3NkY2MuYwpAQCAtMTI1MCw5ICsxMjUwLDcgQEAKIAogCQlpZiAobW1jLT5jYXJkICYmIG1tYy0+Y2FyZC0+dHlwZSAhPSBNTUNfVFlQRV9TRElPKQogCQkJbW1jX3Jlc3VtZV9ob3N0KG1tYyk7Ci0JCQlpZiAoaG9zdC0+c3RhdF9pcnEpCi0JCQkJZW5hYmxlX2lycShob3N0LT5zdGF0X2lycSk7Ci0JCWVsc2UgaWYgKGhvc3QtPnN0YXRfaXJxKQorCQlpZiAoaG9zdC0+c3RhdF9pcnEpCiAJCQllbmFibGVfaXJxKGhvc3QtPnN0YXRfaXJxKTsKIAl9CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L214Y21tYy5jIGIvZHJpdmVycy9tbWMvaG9zdC9teGNtbWMuYwppbmRleCA2MGEyYjY5Li4yZGY5MDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L214Y21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvbXhjbW1jLmMKQEAgLTQsNyArNCw3IEBACiAgKiAgVGhpcyBpcyBhIGRyaXZlciBmb3IgdGhlIFNESEMgY29udHJvbGxlciBmb3VuZCBpbiBGcmVlc2NhbGUgTVgyL01YMwogICogIFNvQ3MuIEl0IGlzIGJhc2ljYWxseSB0aGUgc2FtZSBoYXJkd2FyZSBhcyBmb3VuZCBvbiBNWDEgKGlteG1tYy5jKS4KICAqICBVbmxpa2UgdGhlIGhhcmR3YXJlIGZvdW5kIG9uIE1YMSwgdGhpcyBoYXJkd2FyZSBqdXN0IHdvcmtzIGFuZCBkb2VzCi0gKiAgbm90IG5lZWQgYWxsIHRoZSBxdWlya3MgZm91bmQgaW4gaW14bW1jLmMsIGhlbmNlIHRoZSBzZXBlcmF0ZSBkcml2ZXIuCisgKiAgbm90IG5lZWQgYWxsIHRoZSBxdWlya3MgZm91bmQgaW4gaW14bW1jLmMsIGhlbmNlIHRoZSBzZXBhcmF0ZSBkcml2ZXIuCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwOCBTYXNjaGEgSGF1ZXIsIFBlbmd1dHJvbml4IDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPgogICogIENvcHlyaWdodCAoQykgMjAwNiBQYXZlbCBQaXNhLCBQaUtST04gPHBwaXNhQHBpa3Jvbi5jb20+CkBAIC03MDgsNyArNzA4LDcgQEAKIAltbWMtPm1heF9ibGtfc2l6ZSA9IDIwNDg7CiAJbW1jLT5tYXhfYmxrX2NvdW50ID0gNjU1MzU7CiAJbW1jLT5tYXhfcmVxX3NpemUgPSBtbWMtPm1heF9ibGtfc2l6ZSAqIG1tYy0+bWF4X2Jsa19jb3VudDsKLQltbWMtPm1heF9zZWdfc2l6ZSA9IG1tYy0+bWF4X3NlZ19zaXplOworCW1tYy0+bWF4X3NlZ19zaXplID0gbW1jLT5tYXhfcmVxX3NpemU7CiAKIAlob3N0ID0gbW1jX3ByaXYobW1jKTsKIAlob3N0LT5iYXNlID0gaW9yZW1hcChyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L29tYXBfaHNtbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCmluZGV4IDRiMjMyMjUuLjgzZjBhZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3Qvb21hcF9oc21tYy5jCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSA8bGludXgvbW1jL2NvcmUuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxwbGF0L2RtYS5oPgogI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxwbGF0L2JvYXJkLmg+CkBAIC0xNDYsNiArMTQ4LDE1IEBACiAJc3RydWN0CWNsawkJKmZjbGs7CiAJc3RydWN0CWNsawkJKmljbGs7CiAJc3RydWN0CWNsawkJKmRiY2xrOworCS8qCisJICogdmNjID09IGNvbmZpZ3VyZWQgc3VwcGx5CisJICogdmNjX2F1eCA9PSBvcHRpb25hbAorCSAqICAgLQlNTUMxLCBzdXBwbHkgZm9yIERBVDQuLkRBVDcKKwkgKiAgIC0JTU1DMi9NTUMyLCBleHRlcm5hbCBsZXZlbCBzaGlmdGVyIHZvbHRhZ2Ugc3VwcGx5LCBmb3IKKwkgKgljaGlwIChTRElPLCBlTU1DLCBldGMpIG9yIHRyYW5zY2VpdmVyIChNTUMyIG9ubHkpCisJICovCisJc3RydWN0CXJlZ3VsYXRvcgkqdmNjOworCXN0cnVjdAlyZWd1bGF0b3IJKnZjY19hdXg7CiAJc3RydWN0CXNlbWFwaG9yZQlzZW07CiAJc3RydWN0CXdvcmtfc3RydWN0CW1tY19jYXJkZGV0ZWN0X3dvcms7CiAJdm9pZAlfX2lvbWVtCQkqYmFzZTsKQEAgLTE3MSwxMCArMTgyLDMzNyBAQAogCWludAkJCXZkZDsKIAlpbnQJCQlwcm90ZWN0X2NhcmQ7CiAJaW50CQkJcmVxc19ibG9ja2VkOworCWludAkJCXVzZV9yZWc7CiAKIAlzdHJ1Y3QJb21hcF9tbWNfcGxhdGZvcm1fZGF0YQkqcGRhdGE7CiB9OwogCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfY2FyZF9kZXRlY3Qoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJLyogTk9URTogYXNzdW1lcyBjYXJkIGRldGVjdCBzaWduYWwgaXMgYWN0aXZlLWxvdyAqLworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAobW1jLT5zbG90c1swXS5zd2l0Y2hfcGluKTsKK30KKworc3RhdGljIGludCBvbWFwX2hzbW1jX2dldF93cChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KQoreworCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwkvKiBOT1RFOiBhc3N1bWVzIHdyaXRlIHByb3RlY3Qgc2lnbmFsIGlzIGFjdGl2ZS1oaWdoICovCisJcmV0dXJuIGdwaW9fZ2V0X3ZhbHVlX2NhbnNsZWVwKG1tYy0+c2xvdHNbMF0uZ3Bpb193cCk7Cit9CisKK3N0YXRpYyBpbnQgb21hcF9oc21tY19nZXRfY292ZXJfc3RhdGUoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJLyogTk9URTogYXNzdW1lcyBjYXJkIGRldGVjdCBzaWduYWwgaXMgYWN0aXZlLWxvdyAqLworCXJldHVybiAhZ3Bpb19nZXRfdmFsdWVfY2Fuc2xlZXAobW1jLT5zbG90c1swXS5zd2l0Y2hfcGluKTsKK30KKworI2lmZGVmIENPTkZJR19QTQorCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfc3VzcGVuZF9jZGlycShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90KQoreworCXN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICptbWMgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlkaXNhYmxlX2lycShtbWMtPnNsb3RzWzBdLmNhcmRfZGV0ZWN0X2lycSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcF9oc21tY19yZXN1bWVfY2RpcnEoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCkKK3sKKwlzdHJ1Y3Qgb21hcF9tbWNfcGxhdGZvcm1fZGF0YSAqbW1jID0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCisJZW5hYmxlX2lycShtbWMtPnNsb3RzWzBdLmNhcmRfZGV0ZWN0X2lycSk7CisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisKKyNkZWZpbmUgb21hcF9oc21tY19zdXNwZW5kX2NkaXJxCU5VTEwKKyNkZWZpbmUgb21hcF9oc21tY19yZXN1bWVfY2RpcnEJCU5VTEwKKworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfUkVHVUxBVE9SCisKK3N0YXRpYyBpbnQgb21hcF9oc21tY18xX3NldF9wb3dlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgcG93ZXJfb24sCisJCQkJICBpbnQgdmRkKQoreworCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPQorCQlwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KSk7CisJaW50IHJldDsKKworCWlmIChtbWNfc2xvdChob3N0KS5iZWZvcmVfc2V0X3JlZykKKwkJbW1jX3Nsb3QoaG9zdCkuYmVmb3JlX3NldF9yZWcoZGV2LCBzbG90LCBwb3dlcl9vbiwgdmRkKTsKKworCWlmIChwb3dlcl9vbikKKwkJcmV0ID0gbW1jX3JlZ3VsYXRvcl9zZXRfb2NyKGhvc3QtPnZjYywgdmRkKTsKKwllbHNlCisJCXJldCA9IG1tY19yZWd1bGF0b3Jfc2V0X29jcihob3N0LT52Y2MsIDApOworCisJaWYgKG1tY19zbG90KGhvc3QpLmFmdGVyX3NldF9yZWcpCisJCW1tY19zbG90KGhvc3QpLmFmdGVyX3NldF9yZWcoZGV2LCBzbG90LCBwb3dlcl9vbiwgdmRkKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb21hcF9oc21tY18yM19zZXRfcG93ZXIoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc2xvdCwgaW50IHBvd2VyX29uLAorCQkJCSAgIGludCB2ZGQpCit7CisJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9CisJCXBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKKwlpbnQgcmV0ID0gMDsKKworCS8qCisJICogSWYgd2UgZG9uJ3Qgc2VlIGEgVmNjIHJlZ3VsYXRvciwgYXNzdW1lIGl0J3MgYSBmaXhlZAorCSAqIHZvbHRhZ2UgYWx3YXlzLW9uIHJlZ3VsYXRvci4KKwkgKi8KKwlpZiAoIWhvc3QtPnZjYykKKwkJcmV0dXJuIDA7CisKKwlpZiAobW1jX3Nsb3QoaG9zdCkuYmVmb3JlX3NldF9yZWcpCisJCW1tY19zbG90KGhvc3QpLmJlZm9yZV9zZXRfcmVnKGRldiwgc2xvdCwgcG93ZXJfb24sIHZkZCk7CisKKwkvKgorCSAqIEFzc3VtZSBWY2MgcmVndWxhdG9yIGlzIHVzZWQgb25seSB0byBwb3dlciB0aGUgY2FyZCAuLi4gT01BUAorCSAqIFZERFMgaXMgdXNlZCB0byBwb3dlciB0aGUgcGlucywgb3B0aW9uYWxseSB3aXRoIGEgdHJhbnNjZWl2ZXIgdG8KKwkgKiBzdXBwb3J0IGNhcmRzIHVzaW5nIHZvbHRhZ2VzIG90aGVyIHRoYW4gVkREUyAoMS44ViBub21pbmFsKS4gIFdoZW4gYQorCSAqIHRyYW5zY2VpdmVyIGlzIHVzZWQsIERBVDMuLjcgYXJlIG11eGVkIGFzIHRyYW5zY2VpdmVyIGNvbnRyb2wgcGlucy4KKwkgKgorCSAqIEluIHNvbWUgY2FzZXMgdGhpcyByZWd1bGF0b3Igd29uJ3Qgc3VwcG9ydCBlbmFibGUvZGlzYWJsZTsKKwkgKiBlLmcuIGl0J3MgYSBmaXhlZCByYWlsIGZvciBhIFdMQU4gY2hpcC4KKwkgKgorCSAqIEluIG90aGVyIGNhc2VzIHZjY19hdXggc3dpdGNoZXMgaW50ZXJmYWNlIHBvd2VyLiAgRXhhbXBsZSwgZm9yCisJICogZU1NQyBjYXJkcyBpdCByZXByZXNlbnRzIFZjY1EuICBTb21ldGltZXMgdHJhbnNjZWl2ZXJzIG9yIFNESU8KKwkgKiBjaGlwcy9jYXJkcyBuZWVkIGFuIGludGVyZmFjZSB2b2x0YWdlIHJhaWwgdG9vLgorCSAqLworCWlmIChwb3dlcl9vbikgeworCQlyZXQgPSBtbWNfcmVndWxhdG9yX3NldF9vY3IoaG9zdC0+dmNjLCB2ZGQpOworCQkvKiBFbmFibGUgaW50ZXJmYWNlIHZvbHRhZ2UgcmFpbCwgaWYgbmVlZGVkICovCisJCWlmIChyZXQgPT0gMCAmJiBob3N0LT52Y2NfYXV4KSB7CisJCQlyZXQgPSByZWd1bGF0b3JfZW5hYmxlKGhvc3QtPnZjY19hdXgpOworCQkJaWYgKHJldCA8IDApCisJCQkJcmV0ID0gbW1jX3JlZ3VsYXRvcl9zZXRfb2NyKGhvc3QtPnZjYywgMCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoaG9zdC0+dmNjX2F1eCkKKwkJCXJldCA9IHJlZ3VsYXRvcl9kaXNhYmxlKGhvc3QtPnZjY19hdXgpOworCQlpZiAocmV0ID09IDApCisJCQlyZXQgPSBtbWNfcmVndWxhdG9yX3NldF9vY3IoaG9zdC0+dmNjLCAwKTsKKwl9CisKKwlpZiAobW1jX3Nsb3QoaG9zdCkuYWZ0ZXJfc2V0X3JlZykKKwkJbW1jX3Nsb3QoaG9zdCkuYWZ0ZXJfc2V0X3JlZyhkZXYsIHNsb3QsIHBvd2VyX29uLCB2ZGQpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvbWFwX2hzbW1jXzFfc2V0X3NsZWVwKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IHNsb3QsIGludCBzbGVlcCwKKwkJCQkgIGludCB2ZGQsIGludCBjYXJkc2xlZXApCit7CisJc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCA9CisJCXBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShkZXYpKTsKKwlpbnQgbW9kZSA9IHNsZWVwID8gUkVHVUxBVE9SX01PREVfU1RBTkRCWSA6IFJFR1VMQVRPUl9NT0RFX05PUk1BTDsKKworCXJldHVybiByZWd1bGF0b3Jfc2V0X21vZGUoaG9zdC0+dmNjLCBtb2RlKTsKK30KKworc3RhdGljIGludCBvbWFwX2hzbW1jXzIzX3NldF9zbGVlcChzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBzbG90LCBpbnQgc2xlZXAsCisJCQkJICAgaW50IHZkZCwgaW50IGNhcmRzbGVlcCkKK3sKKwlzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0ID0KKwkJcGxhdGZvcm1fZ2V0X2RydmRhdGEodG9fcGxhdGZvcm1fZGV2aWNlKGRldikpOworCWludCBlcnIsIG1vZGU7CisKKwkvKgorCSAqIElmIHdlIGRvbid0IHNlZSBhIFZjYyByZWd1bGF0b3IsIGFzc3VtZSBpdCdzIGEgZml4ZWQKKwkgKiB2b2x0YWdlIGFsd2F5cy1vbiByZWd1bGF0b3IuCisJICovCisJaWYgKCFob3N0LT52Y2MpCisJCXJldHVybiAwOworCisJbW9kZSA9IHNsZWVwID8gUkVHVUxBVE9SX01PREVfU1RBTkRCWSA6IFJFR1VMQVRPUl9NT0RFX05PUk1BTDsKKworCWlmICghaG9zdC0+dmNjX2F1eCkKKwkJcmV0dXJuIHJlZ3VsYXRvcl9zZXRfbW9kZShob3N0LT52Y2MsIG1vZGUpOworCisJaWYgKGNhcmRzbGVlcCkgeworCQkvKiBWQ0MgY2FuIGJlIHR1cm5lZCBvZmYgaWYgY2FyZCBpcyBhc2xlZXAgKi8KKwkJaWYgKHNsZWVwKQorCQkJZXJyID0gbW1jX3JlZ3VsYXRvcl9zZXRfb2NyKGhvc3QtPnZjYywgMCk7CisJCWVsc2UKKwkJCWVyciA9IG1tY19yZWd1bGF0b3Jfc2V0X29jcihob3N0LT52Y2MsIHZkZCk7CisJfSBlbHNlCisJCWVyciA9IHJlZ3VsYXRvcl9zZXRfbW9kZShob3N0LT52Y2MsIG1vZGUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlpZiAoIW1tY19zbG90KGhvc3QpLnZjY19hdXhfZGlzYWJsZV9pc19zbGVlcCkKKwkJcmV0dXJuIHJlZ3VsYXRvcl9zZXRfbW9kZShob3N0LT52Y2NfYXV4LCBtb2RlKTsKKworCWlmIChzbGVlcCkKKwkJcmV0dXJuIHJlZ3VsYXRvcl9kaXNhYmxlKGhvc3QtPnZjY19hdXgpOworCWVsc2UKKwkJcmV0dXJuIHJlZ3VsYXRvcl9lbmFibGUoaG9zdC0+dmNjX2F1eCk7Cit9CisKK3N0YXRpYyBpbnQgb21hcF9oc21tY19yZWdfZ2V0KHN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QpCit7CisJc3RydWN0IHJlZ3VsYXRvciAqcmVnOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChob3N0LT5pZCkgeworCWNhc2UgT01BUF9NTUMxX0RFVklEOgorCQkvKiBPbi1jaGlwIGxldmVsIHNoaWZ0aW5nIHZpYSBQQklBUzAvUEJJQVMxICovCisJCW1tY19zbG90KGhvc3QpLnNldF9wb3dlciA9IG9tYXBfaHNtbWNfMV9zZXRfcG93ZXI7CisJCW1tY19zbG90KGhvc3QpLnNldF9zbGVlcCA9IG9tYXBfaHNtbWNfMV9zZXRfc2xlZXA7CisJCWJyZWFrOworCWNhc2UgT01BUF9NTUMyX0RFVklEOgorCWNhc2UgT01BUF9NTUMzX0RFVklEOgorCQkvKiBPZmYtY2hpcCBsZXZlbCBzaGlmdGluZywgb3Igbm9uZSAqLworCQltbWNfc2xvdChob3N0KS5zZXRfcG93ZXIgPSBvbWFwX2hzbW1jXzIzX3NldF9wb3dlcjsKKwkJbW1jX3Nsb3QoaG9zdCkuc2V0X3NsZWVwID0gb21hcF9oc21tY18yM19zZXRfc2xlZXA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX2VycigiTU1DJWQgY29uZmlndXJhdGlvbiBub3Qgc3VwcG9ydGVkIVxuIiwgaG9zdC0+aWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZWcgPSByZWd1bGF0b3JfZ2V0KGhvc3QtPmRldiwgInZtbWMiKTsKKwlpZiAoSVNfRVJSKHJlZykpIHsKKwkJZGV2X2RiZyhob3N0LT5kZXYsICJ2bW1jIHJlZ3VsYXRvciBtaXNzaW5nXG4iKTsKKwkJLyoKKwkJKiBIQUNLOiB1bnRpbCBmaXhlZC5jIHJlZ3VsYXRvciBpcyB1c2FibGUsCisJCSogd2UgZG9uJ3QgcmVxdWlyZSBhIG1haW4gcmVndWxhdG9yCisJCSogZm9yIE1NQzIgb3IgTU1DMworCQkqLworCQlpZiAoaG9zdC0+aWQgPT0gT01BUF9NTUMxX0RFVklEKSB7CisJCQlyZXQgPSBQVFJfRVJSKHJlZyk7CisJCQlnb3RvIGVycjsKKwkJfQorCX0gZWxzZSB7CisJCWhvc3QtPnZjYyA9IHJlZzsKKwkJbW1jX3Nsb3QoaG9zdCkub2NyX21hc2sgPSBtbWNfcmVndWxhdG9yX2dldF9vY3JtYXNrKHJlZyk7CisKKwkJLyogQWxsb3cgYW4gYXV4IHJlZ3VsYXRvciAqLworCQlyZWcgPSByZWd1bGF0b3JfZ2V0KGhvc3QtPmRldiwgInZtbWNfYXV4Iik7CisJCWhvc3QtPnZjY19hdXggPSBJU19FUlIocmVnKSA/IE5VTEwgOiByZWc7CisKKwkJLyoKKwkJKiBVR0xZIEhBQ0s6ICB3b3JrYXJvdW5kIHJlZ3VsYXRvciBmcmFtZXdvcmsgYnVncy4KKwkJKiBXaGVuIHRoZSBib290bG9hZGVyIGxlYXZlcyBhIHN1cHBseSBhY3RpdmUsIGl0J3MKKwkJKiBpbml0aWFsaXplZCB3aXRoIHplcm8gdXNlY291bnQgLi4uIGFuZCB3ZSBjYW4ndAorCQkqIGRpc2FibGUgaXQgd2l0aG91dCBmaXJzdCBlbmFibGluZyBpdC4gIFVudGlsIHRoZQorCQkqIGZyYW1ld29yayBpcyBmaXhlZCwgd2UgbmVlZCBhIHdvcmthcm91bmQgbGlrZSB0aGlzCisJCSogKHdoaWNoIGlzIHNhZmUgZm9yIE1NQywgYnV0IG5vdCBpbiBnZW5lcmFsKS4KKwkJKi8KKwkJaWYgKHJlZ3VsYXRvcl9pc19lbmFibGVkKGhvc3QtPnZjYykgPiAwKSB7CisJCQlyZWd1bGF0b3JfZW5hYmxlKGhvc3QtPnZjYyk7CisJCQlyZWd1bGF0b3JfZGlzYWJsZShob3N0LT52Y2MpOworCQl9CisJCWlmIChob3N0LT52Y2NfYXV4KSB7CisJCQlpZiAocmVndWxhdG9yX2lzX2VuYWJsZWQocmVnKSA+IDApIHsKKwkJCQlyZWd1bGF0b3JfZW5hYmxlKHJlZyk7CisJCQkJcmVndWxhdG9yX2Rpc2FibGUocmVnKTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworCitlcnI6CisJbW1jX3Nsb3QoaG9zdCkuc2V0X3Bvd2VyID0gTlVMTDsKKwltbWNfc2xvdChob3N0KS5zZXRfc2xlZXAgPSBOVUxMOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfaHNtbWNfcmVnX3B1dChzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0KQoreworCXJlZ3VsYXRvcl9wdXQoaG9zdC0+dmNjKTsKKwlyZWd1bGF0b3JfcHV0KGhvc3QtPnZjY19hdXgpOworCW1tY19zbG90KGhvc3QpLnNldF9wb3dlciA9IE5VTEw7CisJbW1jX3Nsb3QoaG9zdCkuc2V0X3NsZWVwID0gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBpbnQgb21hcF9oc21tY19oYXZlX3JlZyh2b2lkKQoreworCXJldHVybiAxOworfQorCisjZWxzZQorCitzdGF0aWMgaW5saW5lIGludCBvbWFwX2hzbW1jX3JlZ19nZXQoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCAqaG9zdCkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaHNtbWNfcmVnX3B1dChzdHJ1Y3Qgb21hcF9oc21tY19ob3N0ICpob3N0KQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBvbWFwX2hzbW1jX2hhdmVfcmVnKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW50IG9tYXBfaHNtbWNfZ3Bpb19pbml0KHN0cnVjdCBvbWFwX21tY19wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3sKKwlpbnQgcmV0OworCisJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPnNsb3RzWzBdLnN3aXRjaF9waW4pKSB7CisJCXBkYXRhLT5zdXNwZW5kID0gb21hcF9oc21tY19zdXNwZW5kX2NkaXJxOworCQlwZGF0YS0+cmVzdW1lID0gb21hcF9oc21tY19yZXN1bWVfY2RpcnE7CisJCWlmIChwZGF0YS0+c2xvdHNbMF0uY292ZXIpCisJCQlwZGF0YS0+c2xvdHNbMF0uZ2V0X2NvdmVyX3N0YXRlID0KKwkJCQkJb21hcF9oc21tY19nZXRfY292ZXJfc3RhdGU7CisJCWVsc2UKKwkJCXBkYXRhLT5zbG90c1swXS5jYXJkX2RldGVjdCA9IG9tYXBfaHNtbWNfY2FyZF9kZXRlY3Q7CisJCXBkYXRhLT5zbG90c1swXS5jYXJkX2RldGVjdF9pcnEgPQorCQkJCWdwaW9fdG9faXJxKHBkYXRhLT5zbG90c1swXS5zd2l0Y2hfcGluKTsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KHBkYXRhLT5zbG90c1swXS5zd2l0Y2hfcGluLCAibW1jX2NkIik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9pbnB1dChwZGF0YS0+c2xvdHNbMF0uc3dpdGNoX3Bpbik7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycl9mcmVlX3NwOworCX0gZWxzZQorCQlwZGF0YS0+c2xvdHNbMF0uc3dpdGNoX3BpbiA9IC1FSU5WQUw7CisKKwlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+c2xvdHNbMF0uZ3Bpb193cCkpIHsKKwkJcGRhdGEtPnNsb3RzWzBdLmdldF9ybyA9IG9tYXBfaHNtbWNfZ2V0X3dwOworCQlyZXQgPSBncGlvX3JlcXVlc3QocGRhdGEtPnNsb3RzWzBdLmdwaW9fd3AsICJtbWNfd3AiKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX2ZyZWVfY2Q7CisJCXJldCA9IGdwaW9fZGlyZWN0aW9uX2lucHV0KHBkYXRhLT5zbG90c1swXS5ncGlvX3dwKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gZXJyX2ZyZWVfd3A7CisJfSBlbHNlCisJCXBkYXRhLT5zbG90c1swXS5ncGlvX3dwID0gLUVJTlZBTDsKKworCXJldHVybiAwOworCitlcnJfZnJlZV93cDoKKwlncGlvX2ZyZWUocGRhdGEtPnNsb3RzWzBdLmdwaW9fd3ApOworZXJyX2ZyZWVfY2Q6CisJaWYgKGdwaW9faXNfdmFsaWQocGRhdGEtPnNsb3RzWzBdLnN3aXRjaF9waW4pKQorZXJyX2ZyZWVfc3A6CisJCWdwaW9fZnJlZShwZGF0YS0+c2xvdHNbMF0uc3dpdGNoX3Bpbik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgb21hcF9oc21tY19ncGlvX2ZyZWUoc3RydWN0IG9tYXBfbW1jX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQoreworCWlmIChncGlvX2lzX3ZhbGlkKHBkYXRhLT5zbG90c1swXS5ncGlvX3dwKSkKKwkJZ3Bpb19mcmVlKHBkYXRhLT5zbG90c1swXS5ncGlvX3dwKTsKKwlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+c2xvdHNbMF0uc3dpdGNoX3BpbikpCisJCWdwaW9fZnJlZShwZGF0YS0+c2xvdHNbMF0uc3dpdGNoX3Bpbik7Cit9CisKIC8qCiAgKiBTdG9wIGNsb2NrIHRvIHRoZSBjYXJkCiAgKi8KQEAgLTgzNSw3ICsxMTczLDcgQEAKIAlzeXNmc19ub3RpZnkoJmhvc3QtPm1tYy0+Y2xhc3NfZGV2LmtvYmosIE5VTEwsICJjb3Zlcl9zd2l0Y2giKTsKIAogCWlmIChzbG90LT5jYXJkX2RldGVjdCkKLQkJY2FyZGRldGVjdCA9IHNsb3QtPmNhcmRfZGV0ZWN0KHNsb3QtPmNhcmRfZGV0ZWN0X2lycSk7CisJCWNhcmRkZXRlY3QgPSBzbG90LT5jYXJkX2RldGVjdChob3N0LT5kZXYsIGhvc3QtPnNsb3RfaWQpOwogCWVsc2UgewogCQlvbWFwX2hzbW1jX3Byb3RlY3RfY2FyZChob3N0KTsKIAkJY2FyZGRldGVjdCA9IC1FTk9TWVM7CkBAIC0xMjQyLDcgKzE1ODAsNyBAQAogCiAJaWYgKCFtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdCkKIAkJcmV0dXJuIC1FTk9TWVM7Ci0JcmV0dXJuIG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0KG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0X2lycSk7CisJcmV0dXJuIG1tY19zbG90KGhvc3QpLmNhcmRfZGV0ZWN0KGhvc3QtPmRldiwgaG9zdC0+c2xvdF9pZCk7CiB9CiAKIHN0YXRpYyBpbnQgb21hcF9oc21tY19nZXRfcm8oc3RydWN0IG1tY19ob3N0ICptbWMpCkBAIC0xMzExLDcgKzE2NDksNyBAQAogCWlmIChob3N0LT5wb3dlcl9tb2RlID09IE1NQ19QT1dFUl9PRkYpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIG1zZWNzX3RvX2ppZmZpZXMoT01BUF9NTUNfU0xFRVBfVElNRU9VVCk7CisJcmV0dXJuIE9NQVBfTU1DX1NMRUVQX1RJTUVPVVQ7CiB9CiAKIC8qIEhhbmRsZXIgZm9yIFtESVNBQkxFRCAtPiBSRUdTTEVFUCAvIENBUkRTTEVFUF0gdHJhbnNpdGlvbiAqLwpAQCAtMTM0NywxMSArMTY4NSwxNCBAQAogCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiRElTQUJMRUQgLT4gJXNcbiIsCiAJCWhvc3QtPmRwbV9zdGF0ZSA9PSBDQVJEU0xFRVAgPyAiQ0FSRFNMRUVQIiA6ICJSRUdTTEVFUCIpOwogCisJaWYgKG1tY19zbG90KGhvc3QpLm5vX29mZikKKwkJcmV0dXJuIDA7CisKIAlpZiAoKGhvc3QtPm1tYy0+Y2FwcyAmIE1NQ19DQVBfTk9OUkVNT1ZBQkxFKSB8fAogCSAgICBtbWNfc2xvdChob3N0KS5jYXJkX2RldGVjdCB8fAogCSAgICAobW1jX3Nsb3QoaG9zdCkuZ2V0X2NvdmVyX3N0YXRlICYmCiAJICAgICBtbWNfc2xvdChob3N0KS5nZXRfY292ZXJfc3RhdGUoaG9zdC0+ZGV2LCBob3N0LT5zbG90X2lkKSkpCi0JCXJldHVybiBtc2Vjc190b19qaWZmaWVzKE9NQVBfTU1DX09GRl9USU1FT1VUKTsKKwkJcmV0dXJuIE9NQVBfTU1DX09GRl9USU1FT1VUOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzYyLDYgKzE3MDMsOSBAQAogCWlmICghbW1jX3RyeV9jbGFpbV9ob3N0KGhvc3QtPm1tYykpCiAJCXJldHVybiAwOwogCisJaWYgKG1tY19zbG90KGhvc3QpLm5vX29mZikKKwkJcmV0dXJuIDA7CisKIAlpZiAoISgoaG9zdC0+bW1jLT5jYXBzICYgTU1DX0NBUF9OT05SRU1PVkFCTEUpIHx8CiAJICAgICAgbW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3QgfHwKIAkgICAgICAobW1jX3Nsb3QoaG9zdCkuZ2V0X2NvdmVyX3N0YXRlICYmCkBAIC0xNjE2LDcgKzE5NjAsNyBAQAogCXN0cnVjdCBtbWNfaG9zdCAqbW1jOwogCXN0cnVjdCBvbWFwX2hzbW1jX2hvc3QgKmhvc3QgPSBOVUxMOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCWludCByZXQgPSAwLCBpcnE7CisJaW50IHJldCwgaXJxOwogCiAJaWYgKHBkYXRhID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiUGxhdGZvcm0gRGF0YSBpcyBtaXNzaW5nXG4iKTsKQEAgLTE2MzgsMTAgKzE5ODIsMTQgQEAKIAlpZiAocmVzID09IE5VTEwpCiAJCXJldHVybiAtRUJVU1k7CiAKKwlyZXQgPSBvbWFwX2hzbW1jX2dwaW9faW5pdChwZGF0YSk7CisJaWYgKHJldCkKKwkJZ290byBlcnI7CisKIAltbWMgPSBtbWNfYWxsb2NfaG9zdChzaXplb2Yoc3RydWN0IG9tYXBfaHNtbWNfaG9zdCksICZwZGV2LT5kZXYpOwogCWlmICghbW1jKSB7CiAJCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyOworCQlnb3RvIGVycl9hbGxvYzsKIAl9CiAKIAlob3N0CQk9IG1tY19wcml2KG1tYyk7CkBAIC0xNjU2LDcgKzIwMDQsNyBAQAogCWhvc3QtPnNsb3RfaWQJPSAwOwogCWhvc3QtPm1hcGJhc2UJPSByZXMtPnN0YXJ0OwogCWhvc3QtPmJhc2UJPSBpb3JlbWFwKGhvc3QtPm1hcGJhc2UsIFNaXzRLKTsKLQlob3N0LT5wb3dlcl9tb2RlID0gLTE7CisJaG9zdC0+cG93ZXJfbW9kZSA9IE1NQ19QT1dFUl9PRkY7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBob3N0KTsKIAlJTklUX1dPUksoJmhvc3QtPm1tY19jYXJkZGV0ZWN0X3dvcmssIG9tYXBfaHNtbWNfZGV0ZWN0KTsKQEAgLTE2NjYsNiArMjAxNCwxMyBAQAogCWVsc2UKIAkJbW1jLT5vcHMJPSAmb21hcF9oc21tY19vcHM7CiAKKwkvKgorCSAqIElmIHJlZ3VsYXRvcl9kaXNhYmxlIGNhbiBvbmx5IHB1dCB2Y2NfYXV4IHRvIHNsZWVwIHRoZW4gdGhlcmUgaXMKKwkgKiBubyBvZmYgc3RhdGUuCisJICovCisJaWYgKG1tY19zbG90KGhvc3QpLnZjY19hdXhfZGlzYWJsZV9pc19zbGVlcCkKKwkJbW1jX3Nsb3QoaG9zdCkubm9fb2ZmID0gMTsKKwogCW1tYy0+Zl9taW4JPSA0MDAwMDA7CiAJbW1jLT5mX21heAk9IDUyMDAwMDAwOwogCkBAIC0xNzgxLDcgKzIxMzYsNiBAQAogCQlnb3RvIGVycl9pcnE7CiAJfQogCi0JLyogaW5pdGlhbGl6ZSBwb3dlciBzdXBwbGllcywgZ3Bpb3MsIGV0YyAqLwogCWlmIChwZGF0YS0+aW5pdCAhPSBOVUxMKSB7CiAJCWlmIChwZGF0YS0+aW5pdCgmcGRldi0+ZGV2KSAhPSAwKSB7CiAJCQlkZXZfZGJnKG1tY19kZXYoaG9zdC0+bW1jKSwKQEAgLTE3ODksNiArMjE0MywxNCBAQAogCQkJZ290byBlcnJfaXJxX2NkX2luaXQ7CiAJCX0KIAl9CisKKwlpZiAob21hcF9oc21tY19oYXZlX3JlZygpICYmICFtbWNfc2xvdChob3N0KS5zZXRfcG93ZXIpIHsKKwkJcmV0ID0gb21hcF9oc21tY19yZWdfZ2V0KGhvc3QpOworCQlpZiAocmV0KQorCQkJZ290byBlcnJfcmVnOworCQlob3N0LT51c2VfcmVnID0gMTsKKwl9CisKIAltbWMtPm9jcl9hdmFpbCA9IG1tY19zbG90KGhvc3QpLm9jcl9tYXNrOwogCiAJLyogUmVxdWVzdCBJUlEgZm9yIGNhcmQgZGV0ZWN0ICovCkBAIC0xODIzLDE5ICsyMTg1LDIyIEBACiAJCXJldCA9IGRldmljZV9jcmVhdGVfZmlsZSgmbW1jLT5jbGFzc19kZXYsCiAJCQkJCSZkZXZfYXR0cl9jb3Zlcl9zd2l0Y2gpOwogCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gZXJyX2NvdmVyX3N3aXRjaDsKKwkJCWdvdG8gZXJyX3Nsb3RfbmFtZTsKIAl9CiAKIAlvbWFwX2hzbW1jX2RlYnVnZnMobW1jKTsKIAogCXJldHVybiAwOwogCi1lcnJfY292ZXJfc3dpdGNoOgotCWRldmljZV9yZW1vdmVfZmlsZSgmbW1jLT5jbGFzc19kZXYsICZkZXZfYXR0cl9jb3Zlcl9zd2l0Y2gpOwogZXJyX3Nsb3RfbmFtZToKIAltbWNfcmVtb3ZlX2hvc3QobW1jKTsKLWVycl9pcnFfY2Q6CiAJZnJlZV9pcnEobW1jX3Nsb3QoaG9zdCkuY2FyZF9kZXRlY3RfaXJxLCBob3N0KTsKK2Vycl9pcnFfY2Q6CisJaWYgKGhvc3QtPnVzZV9yZWcpCisJCW9tYXBfaHNtbWNfcmVnX3B1dChob3N0KTsKK2Vycl9yZWc6CisJaWYgKGhvc3QtPnBkYXRhLT5jbGVhbnVwKQorCQlob3N0LT5wZGF0YS0+Y2xlYW51cCgmcGRldi0+ZGV2KTsKIGVycl9pcnFfY2RfaW5pdDoKIAlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOwogZXJyX2lycToKQEAgLTE4NDcsMTQgKzIyMTIsMTQgQEAKIAkJY2xrX2Rpc2FibGUoaG9zdC0+ZGJjbGspOwogCQljbGtfcHV0KGhvc3QtPmRiY2xrKTsKIAl9Ci0KIGVycjE6CiAJaW91bm1hcChob3N0LT5iYXNlKTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwltbWNfZnJlZV9ob3N0KG1tYyk7CitlcnJfYWxsb2M6CisJb21hcF9oc21tY19ncGlvX2ZyZWUocGRhdGEpOwogZXJyOgotCWRldl9kYmcobW1jX2Rldihob3N0LT5tbWMpLCAiUHJvYmUgRmFpbGVkXG4iKTsKIAlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7Ci0JaWYgKGhvc3QpCi0JCW1tY19mcmVlX2hvc3QobW1jKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xODY2LDYgKzIyMzEsOCBAQAogCWlmIChob3N0KSB7CiAJCW1tY19ob3N0X2VuYWJsZShob3N0LT5tbWMpOwogCQltbWNfcmVtb3ZlX2hvc3QoaG9zdC0+bW1jKTsKKwkJaWYgKGhvc3QtPnVzZV9yZWcpCisJCQlvbWFwX2hzbW1jX3JlZ19wdXQoaG9zdCk7CiAJCWlmIChob3N0LT5wZGF0YS0+Y2xlYW51cCkKIAkJCWhvc3QtPnBkYXRhLT5jbGVhbnVwKCZwZGV2LT5kZXYpOwogCQlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOwpAQCAtMTg4NCw2ICsyMjUxLDcgQEAKIAogCQltbWNfZnJlZV9ob3N0KGhvc3QtPm1tYyk7CiAJCWlvdW5tYXAoaG9zdC0+YmFzZSk7CisJCW9tYXBfaHNtbWNfZ3Bpb19mcmVlKHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKTsKIAl9CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC9yaWNvaF9tbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvcmljb2hfbW1jLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY2Mjc5MDUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tbWMvaG9zdC9yaWNvaF9tbWMuYworKysgL2Rldi9udWxsCkBAIC0xLDI2MiArMCwwIEBACi0vKgotICogIHJpY29oX21tYy5jIC0gRHVtbXkgZHJpdmVyIHRvIGRpc2FibGUgdGhlIFJpb2NoIE1NQyBjb250cm9sbGVyLgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDcgUGhpbGlwIExhbmdkYWxlLCBBbGwgUmlnaHRzIFJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0Ci0gKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotLyoKLSAqIFRoaXMgaXMgYSBjb25jZXB0dWFsbHkgcmlkaWN1bG91cyBkcml2ZXIsIGJ1dCBpdCBpcyByZXF1aXJlZCBieSB0aGUgd2F5Ci0gKiB0aGUgUmljb2ggbXVsdGktZnVuY3Rpb24gY2hpcHMgKFI1Q1hYWCkgd29yay4gVGhlc2UgY2hpcHMgaW1wbGVtZW50Ci0gKiB0aGUgZm91ciBtYWluIG1lbW9yeSBjYXJkIGNvbnRyb2xsZXJzIChTRCwgTU1DLCBNUywgeEQpIGFuZCBvbmUgb3IgYm90aAotICogb2YgY2FyZGJ1cyBvciBmaXJld2lyZS4gSXQgaGFwcGVucyB0aGF0IHRoZXkgaW1wbGVtZW50IFNEIGFuZCBNTUMKLSAqIHN1cHBvcnQgYXMgc2VwYXJhdGUgY29udHJvbGxlcnMgKGFuZCBQQ0kgZnVuY3Rpb25zKS4gVGhlIGxpbnV4IFNESENJCi0gKiBkcml2ZXIgc3VwcG9ydHMgTU1DIGNhcmRzIGJ1dCB0aGUgY2hpcCBkZXRlY3RzIE1NQyBjYXJkcyBpbiBoYXJkd2FyZQotICogYW5kIGRpcmVjdHMgdGhlbSB0byB0aGUgTU1DIGNvbnRyb2xsZXIgLSBzbyB0aGUgU0RIQ0kgZHJpdmVyIG5ldmVyIHNlZXMKLSAqIHRoZW0uIFRvIGdldCBhcm91bmQgdGhpcywgd2UgbXVzdCBkaXNhYmxlIHRoZSB1c2VsZXNzIE1NQyBjb250cm9sbGVyLgotICogQXQgdGhhdCBwb2ludCwgdGhlIFNESENJIGNvbnRyb2xsZXIgd2lsbCBzdGFydCBzZWVpbmcgdGhlbS4gQXMgYSBib251cywKLSAqIGEgZGV0ZWN0aW9uIGV2ZW50IG9jY3VycyBpbW1lZGlhdGVseSwgZXZlbiBpZiB0aGUgTU1DIGNhcmQgaXMgYWxyZWFkeQotICogaW4gdGhlIHJlYWRlci4KLSAqCi0gKiBJdCBzZWVtcyB0byBiZSB0aGUgY2FzZSB0aGF0IHRoZSByZWxldmFudCBQQ0kgcmVnaXN0ZXJzIHRvIGRlYWN0aXZhdGUgdGhlCi0gKiBNTUMgY29udHJvbGxlciBsaXZlIG9uIFBDSSBmdW5jdGlvbiAwLCB3aGljaCBtaWdodCBiZSB0aGUgY2FyZGJ1cyBjb250cm9sbGVyCi0gKiBvciB0aGUgZmlyZXdpcmUgY29udHJvbGxlciwgZGVwZW5kaW5nIG9uIHRoZSBwYXJ0aWN1bGFyIGNoaXAgaW4gcXVlc3Rpb24uIEFzCi0gKiBzdWNoLCBpdCBtYWtlcyB3aGF0IHRoaXMgZHJpdmVyIGhhcyB0byBkbyB1bmF2b2lkYWJseSB1Z2x5LiBTdWNoIGlzIGxpZmUuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotCi0jZGVmaW5lIERSSVZFUl9OQU1FICJyaWNvaC1tbWMiCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfaWRzW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7Ci0JCS52ZW5kb3IJCT0gUENJX1ZFTkRPUl9JRF9SSUNPSCwKLQkJLmRldmljZQkJPSBQQ0lfREVWSUNFX0lEX1JJQ09IX1I1Qzg0MywKLQkJLnN1YnZlbmRvcgk9IFBDSV9BTllfSUQsCi0JCS5zdWJkZXZpY2UJPSBQQ0lfQU5ZX0lELAotCX0sCi0JeyAvKiBlbmQ6IGFsbCB6ZXJvZXMgKi8gfSwKLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwY2lfaWRzKTsKLQotc3RhdGljIGludCByaWNvaF9tbWNfZGlzYWJsZShzdHJ1Y3QgcGNpX2RldiAqZndfZGV2KQotewotCXU4IHdyaXRlX2VuYWJsZTsKLQl1OCB3cml0ZV90YXJnZXQ7Ci0JdTggZGlzYWJsZTsKLQotCWlmIChmd19kZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1JJQ09IX1JMNUM0NzYpIHsKLQkJLyogdmlhIFJMNUM0NzYgKi8KLQotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShmd19kZXYsIDB4QjcsICZkaXNhYmxlKTsKLQkJaWYgKGRpc2FibGUgJiAweDAyKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FCi0JCQkJIjogQ29udHJvbGxlciBhbHJlYWR5IGRpc2FibGVkLiAiIFwKLQkJCQkiTm90aGluZyB0byBkby5cbiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShmd19kZXYsIDB4OEUsICZ3cml0ZV9lbmFibGUpOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZndfZGV2LCAweDhFLCAweEFBKTsKLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZndfZGV2LCAweDhELCAmd3JpdGVfdGFyZ2V0KTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGZ3X2RldiwgMHg4RCwgMHhCNyk7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShmd19kZXYsIDB4QjcsIGRpc2FibGUgfCAweDAyKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGZ3X2RldiwgMHg4RSwgd3JpdGVfZW5hYmxlKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGZ3X2RldiwgMHg4RCwgd3JpdGVfdGFyZ2V0KTsKLQl9IGVsc2UgewotCQkvKiB2aWEgUjVDODMyICovCi0KLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZndfZGV2LCAweENCLCAmZGlzYWJsZSk7Ci0JCWlmIChkaXNhYmxlICYgMHgwMikgewotCQkJcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRQotCQkJICAgICAgICI6IENvbnRyb2xsZXIgYWxyZWFkeSBkaXNhYmxlZC4gIiBcCi0JCQkJIk5vdGhpbmcgdG8gZG8uXG4iKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9Ci0KLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZndfZGV2LCAweENBLCAmd3JpdGVfZW5hYmxlKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGZ3X2RldiwgMHhDQSwgMHg1Nyk7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShmd19kZXYsIDB4Q0IsIGRpc2FibGUgfCAweDAyKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGZ3X2RldiwgMHhDQSwgd3JpdGVfZW5hYmxlKTsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FCi0JICAgICAgICI6IENvbnRyb2xsZXIgaXMgbm93IGRpc2FibGVkLlxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByaWNvaF9tbWNfZW5hYmxlKHN0cnVjdCBwY2lfZGV2ICpmd19kZXYpCi17Ci0JdTggd3JpdGVfZW5hYmxlOwotCXU4IHdyaXRlX3RhcmdldDsKLQl1OCBkaXNhYmxlOwotCi0JaWYgKGZ3X2Rldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUklDT0hfUkw1QzQ3NikgewotCQkvKiB2aWEgUkw1QzQ3NiAqLwotCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGZ3X2RldiwgMHg4RSwgJndyaXRlX2VuYWJsZSk7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShmd19kZXYsIDB4OEUsIDB4QUEpOwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShmd19kZXYsIDB4OEQsICZ3cml0ZV90YXJnZXQpOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZndfZGV2LCAweDhELCAweEI3KTsKLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZndfZGV2LCAweEI3LCAmZGlzYWJsZSk7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShmd19kZXYsIDB4QjcsIGRpc2FibGUgJiB+MHgwMik7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShmd19kZXYsIDB4OEUsIHdyaXRlX2VuYWJsZSk7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShmd19kZXYsIDB4OEQsIHdyaXRlX3RhcmdldCk7Ci0JfSBlbHNlIHsKLQkJLyogdmlhIFI1QzgzMiAqLwotCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGZ3X2RldiwgMHhDQSwgJndyaXRlX2VuYWJsZSk7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGZ3X2RldiwgMHhDQiwgJmRpc2FibGUpOwotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZndfZGV2LCAweENBLCAweDU3KTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGZ3X2RldiwgMHhDQiwgZGlzYWJsZSAmIH4weDAyKTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGZ3X2RldiwgMHhDQSwgd3JpdGVfZW5hYmxlKTsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FCi0JICAgICAgICI6IENvbnRyb2xsZXIgaXMgbm93IHJlLWVuYWJsZWQuXG4iKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCByaWNvaF9tbWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQotewotCXU4IHJldjsKLQl1OCBjdHJsZm91bmQgPSAwOwotCi0Jc3RydWN0IHBjaV9kZXYgKmZ3X2RldiA9IE5VTEw7Ci0KLQlCVUdfT04ocGRldiA9PSBOVUxMKTsKLQlCVUdfT04oZW50ID09IE5VTEwpOwotCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmcmV2KTsKLQotCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUKLQkJIjogUmljb2ggTU1DIGNvbnRyb2xsZXIgZm91bmQgYXQgJXMgWyUwNHg6JTA0eF0gKHJldiAleClcbiIsCi0JCXBjaV9uYW1lKHBkZXYpLCAoaW50KXBkZXYtPnZlbmRvciwgKGludClwZGV2LT5kZXZpY2UsCi0JCShpbnQpcmV2KTsKLQotCXdoaWxlICgoZndfZGV2ID0KLQkJcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9SSUNPSCwKLQkJCVBDSV9ERVZJQ0VfSURfUklDT0hfUkw1QzQ3NiwgZndfZGV2KSkpIHsKLQkJaWYgKFBDSV9TTE9UKHBkZXYtPmRldmZuKSA9PSBQQ0lfU0xPVChmd19kZXYtPmRldmZuKSAmJgotCQkgICAgUENJX0ZVTkMoZndfZGV2LT5kZXZmbikgPT0gMCAmJgotCQkgICAgcGRldi0+YnVzID09IGZ3X2Rldi0+YnVzKSB7Ci0JCQlpZiAocmljb2hfbW1jX2Rpc2FibGUoZndfZGV2KSAhPSAwKQotCQkJCXJldHVybiAtRU5PREVWOwotCi0JCQlwY2lfc2V0X2RydmRhdGEocGRldiwgZndfZGV2KTsKLQotCQkJKytjdHJsZm91bmQ7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCWZ3X2RldiA9IE5VTEw7Ci0KLQl3aGlsZSAoIWN0cmxmb3VuZCAmJgotCSAgICAoZndfZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9SSUNPSCwKLQkJCQkJUENJX0RFVklDRV9JRF9SSUNPSF9SNUM4MzIsIGZ3X2RldikpKSB7Ci0JCWlmIChQQ0lfU0xPVChwZGV2LT5kZXZmbikgPT0gUENJX1NMT1QoZndfZGV2LT5kZXZmbikgJiYKLQkJICAgIFBDSV9GVU5DKGZ3X2Rldi0+ZGV2Zm4pID09IDAgJiYKLQkJICAgIHBkZXYtPmJ1cyA9PSBmd19kZXYtPmJ1cykgewotCQkJaWYgKHJpY29oX21tY19kaXNhYmxlKGZ3X2RldikgIT0gMCkKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQotCQkJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGZ3X2Rldik7Ci0KLQkJCSsrY3RybGZvdW5kOwotCQl9Ci0JfQotCi0JaWYgKCFjdHJsZm91bmQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUklWRVJfTkFNRQotCQkgICAgICAgIjogTWFpbiBSaWNvaCBmdW5jdGlvbiBub3QgZm91bmQuIENhbm5vdCBkaXNhYmxlIGNvbnRyb2xsZXIuXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZGV2ZXhpdCByaWNvaF9tbWNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBwY2lfZGV2ICpmd19kZXYgPSBOVUxMOwotCi0JZndfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCUJVR19PTihmd19kZXYgPT0gTlVMTCk7Ci0KLQlyaWNvaF9tbWNfZW5hYmxlKGZ3X2Rldik7Ci0KLQlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBpbnQgcmljb2hfbW1jX3N1c3BlbmRfbGF0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBwY2lfZGV2ICpmd19kZXYgPSBOVUxMOwotCi0JZndfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCUJVR19PTihmd19kZXYgPT0gTlVMTCk7Ci0KLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IFN1c3BlbmRpbmcuXG4iKTsKLQotCXJpY29oX21tY19lbmFibGUoZndfZGV2KTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJpY29oX21tY19yZXN1bWVfZWFybHkoc3RydWN0IHBjaV9kZXYgKnBkZXYpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmZ3X2RldiA9IE5VTEw7Ci0KLQlmd19kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7Ci0JQlVHX09OKGZ3X2RldiA9PSBOVUxMKTsKLQotCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogUmVzdW1pbmcuXG4iKTsKLQotCXJpY29oX21tY19kaXNhYmxlKGZ3X2Rldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJpY29oX21tY19kcml2ZXIgPSB7Ci0JLm5hbWUgPSAJRFJJVkVSX05BTUUsCi0JLmlkX3RhYmxlID0JcGNpX2lkcywKLQkucHJvYmUgPSAJcmljb2hfbW1jX3Byb2JlLAotCS5yZW1vdmUgPQlfX2RldmV4aXRfcChyaWNvaF9tbWNfcmVtb3ZlKSwKLQkuc3VzcGVuZF9sYXRlID0Jcmljb2hfbW1jX3N1c3BlbmRfbGF0ZSwKLQkucmVzdW1lX2Vhcmx5ID0Jcmljb2hfbW1jX3Jlc3VtZV9lYXJseSwKLX07Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogRHJpdmVyIGluaXQvZXhpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLVwqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCBfX2luaXQgcmljb2hfbW1jX2Rydl9pbml0KHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fSU5GTyBEUklWRVJfTkFNRQotCQkiOiBSaWNvaCBNTUMgQ29udHJvbGxlciBkaXNhYmxpbmcgZHJpdmVyXG4iKTsKLQlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IENvcHlyaWdodChjKSBQaGlsaXAgTGFuZ2RhbGVcbiIpOwotCi0JcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnJpY29oX21tY19kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgcmljb2hfbW1jX2Rydl9leGl0KHZvaWQpCi17Ci0JcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZyaWNvaF9tbWNfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQocmljb2hfbW1jX2Rydl9pbml0KTsKLW1vZHVsZV9leGl0KHJpY29oX21tY19kcnZfZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoIlBoaWxpcCBMYW5nZGFsZSA8cGhpbGlwbEBhbHVtbmkudXRleGFzLm5ldD4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiUmljb2ggTU1DIENvbnRyb2xsZXIgZGlzYWJsaW5nIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jIGIvZHJpdmVycy9tbWMvaG9zdC9zM2NtY2kuYwppbmRleCBkOTZlMWFiLi4yZmRmNzY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3MzY21jaS5jCisrKyBiL2RyaXZlcnMvbW1jL2hvc3QvczNjbWNpLmMKQEAgLTExNzksNyArMTE3OSw3IEBACiAJc3RydWN0IHMzYzI0eHhfbWNpX3BkYXRhICpwZGF0YSA9IGhvc3QtPnBkYXRhOwogCWludCByZXQ7CiAKLQlpZiAocGRhdGEtPmdwaW9fZGV0ZWN0ID09IDApCisJaWYgKHBkYXRhLT5ub19kZXRlY3QpCiAJCXJldHVybiAtRU5PU1lTOwogCiAJcmV0ID0gZ3Bpb19nZXRfdmFsdWUocGRhdGEtPmdwaW9fZGV0ZWN0KSA/IDAgOiAxOwpAQCAtMTM2MCw2ICsxMzYwLDggQEAKIHN0YXRpYyBzdHJ1Y3QgczNjMjR4eF9tY2lfcGRhdGEgczNjbWNpX2RlZl9wZGF0YSA9IHsKIAkvKiBUaGlzIGlzIGN1cnJlbnRseSBoZXJlIHRvIGF2b2lkIGEgbnVtYmVyIG9mIGlmIChob3N0LT5wZGF0YSkKIAkgKiBjaGVja3MuIEFueSB6ZXJvIGZpZWxkcyB0byBlbnN1cmUgcmVhc29uYWJsZSBkZWZhdWx0cyBhcmUgcGlja2VkLiAqLworCSAubm9fd3Byb3RlY3QgPSAxLAorCSAubm9fZGV0ZWN0ID0gMSwKIH07CiAKICNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMgYi9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLXBjaS5jCmluZGV4IDVjM2ExNzYuLjhlMTAyMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2ktcGNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS1wY2kuYwpAQCAtODAsOSArODAsNiBAQAogCiBzdGF0aWMgaW50IHJpY29oX3Byb2JlKHN0cnVjdCBzZGhjaV9wY2lfY2hpcCAqY2hpcCkKIHsKLQlpZiAoY2hpcC0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0lCTSkKLQkJY2hpcC0+cXVpcmtzIHw9IFNESENJX1FVSVJLX0NMT0NLX0JFRk9SRV9SRVNFVDsKLQogCWlmIChjaGlwLT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfU0FNU1VORyB8fAogCSAgICBjaGlwLT5wZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfU09OWSkKIAkJY2hpcC0+cXVpcmtzIHw9IFNESENJX1FVSVJLX05PX0NBUkRfTk9fUkVTRVQ7CkBAIC05Miw3ICs4OSw5IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RoY2lfcGNpX2ZpeGVzIHNkaGNpX3JpY29oID0gewogCS5wcm9iZQkJPSByaWNvaF9wcm9iZSwKLQkucXVpcmtzCQk9IFNESENJX1FVSVJLXzMyQklUX0RNQV9BRERSLAorCS5xdWlya3MJCT0gU0RIQ0lfUVVJUktfMzJCSVRfRE1BX0FERFIgfAorCQkJICBTREhDSV9RVUlSS19GT1JDRV9ETUEgfAorCQkJICBTREhDSV9RVUlSS19DTE9DS19CRUZPUkVfUkVTRVQsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkaGNpX3BjaV9maXhlcyBzZGhjaV9lbmVfNzEyID0gewpAQCAtNTAxLDYgKzUwMCw3IEBACiB7CiAJc3RydWN0IHNkaGNpX3BjaV9jaGlwICpjaGlwOwogCXN0cnVjdCBzZGhjaV9wY2lfc2xvdCAqc2xvdDsKKwltbWNfcG1fZmxhZ190IHBtX2ZsYWdzID0gMDsKIAlpbnQgaSwgcmV0OwogCiAJY2hpcCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKQEAgLTUxOSw2ICs1MTksOCBAQAogCQkJCXNkaGNpX3Jlc3VtZV9ob3N0KGNoaXAtPnNsb3RzW2ldLT5ob3N0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KKworCQlwbV9mbGFncyB8PSBzbG90LT5ob3N0LT5tbWMtPnBtX2ZsYWdzOwogCX0KIAogCWlmIChjaGlwLT5maXhlcyAmJiBjaGlwLT5maXhlcy0+c3VzcGVuZCkgewpAQCAtNTMxLDkgKzUzMywxNSBAQAogCX0KIAogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwotCXBjaV9lbmFibGVfd2FrZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSwgMCk7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworCWlmIChwbV9mbGFncyAmIE1NQ19QTV9LRUVQX1BPV0VSKSB7CisJCWlmIChwbV9mbGFncyAmIE1NQ19QTV9XQUtFX1NESU9fSVJRKQorCQkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMSk7CisJCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKKwl9IGVsc2UgeworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSksIDApOworCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkpOworCX0KIAogCXJldHVybiAwOwogfQpAQCAtNjUzLDYgKzY2MSw4IEBACiAJCQlnb3RvIHVubWFwOwogCX0KIAorCWhvc3QtPm1tYy0+cG1fY2FwcyA9IE1NQ19QTV9LRUVQX1BPV0VSIHwgTU1DX1BNX1dBS0VfU0RJT19JUlE7CisKIAlyZXQgPSBzZGhjaV9hZGRfaG9zdChob3N0KTsKIAlpZiAocmV0KQogCQlnb3RvIHJlbW92ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYyBiL2RyaXZlcnMvbW1jL2hvc3Qvc2RoY2kuYwppbmRleCBjMjc5ZmJjLi5kNmFiNjJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3NkaGNpLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC9zZGhjaS5jCkBAIC0xNzQsMjAgKzE3NCwzMSBAQAogCQlzZGhjaV9jbGVhcl9zZXRfaXJxcyhob3N0LCBTREhDSV9JTlRfQUxMX01BU0ssIGllcik7CiB9CiAKLXN0YXRpYyB2b2lkIHNkaGNpX2luaXQoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCitzdGF0aWMgdm9pZCBzZGhjaV9zZXRfaW9zKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2lvcyAqaW9zKTsKKworc3RhdGljIHZvaWQgc2RoY2lfaW5pdChzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwgaW50IHNvZnQpCiB7Ci0Jc2RoY2lfcmVzZXQoaG9zdCwgU0RIQ0lfUkVTRVRfQUxMKTsKKwlpZiAoc29mdCkKKwkJc2RoY2lfcmVzZXQoaG9zdCwgU0RIQ0lfUkVTRVRfQ01EfFNESENJX1JFU0VUX0RBVEEpOworCWVsc2UKKwkJc2RoY2lfcmVzZXQoaG9zdCwgU0RIQ0lfUkVTRVRfQUxMKTsKIAogCXNkaGNpX2NsZWFyX3NldF9pcnFzKGhvc3QsIFNESENJX0lOVF9BTExfTUFTSywKIAkJU0RIQ0lfSU5UX0JVU19QT1dFUiB8IFNESENJX0lOVF9EQVRBX0VORF9CSVQgfAogCQlTREhDSV9JTlRfREFUQV9DUkMgfCBTREhDSV9JTlRfREFUQV9USU1FT1VUIHwgU0RIQ0lfSU5UX0lOREVYIHwKIAkJU0RIQ0lfSU5UX0VORF9CSVQgfCBTREhDSV9JTlRfQ1JDIHwgU0RIQ0lfSU5UX1RJTUVPVVQgfAogCQlTREhDSV9JTlRfREFUQV9FTkQgfCBTREhDSV9JTlRfUkVTUE9OU0UpOworCisJaWYgKHNvZnQpIHsKKwkJLyogZm9yY2UgY2xvY2sgcmVjb25maWd1cmF0aW9uICovCisJCWhvc3QtPmNsb2NrID0gMDsKKwkJc2RoY2lfc2V0X2lvcyhob3N0LT5tbWMsICZob3N0LT5tbWMtPmlvcyk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBzZGhjaV9yZWluaXQoc3RydWN0IHNkaGNpX2hvc3QgKmhvc3QpCiB7Ci0Jc2RoY2lfaW5pdChob3N0KTsKKwlzZGhjaV9pbml0KGhvc3QsIDApOwogCXNkaGNpX2VuYWJsZV9jYXJkX2RldGVjdGlvbihob3N0KTsKIH0KIApAQCAtMzc2LDYgKzM4NywyMCBAQAogCWxvY2FsX2lycV9yZXN0b3JlKCpmbGFncyk7CiB9CiAKK3N0YXRpYyB2b2lkIHNkaGNpX3NldF9hZG1hX2Rlc2ModTggKmRlc2MsIHUzMiBhZGRyLCBpbnQgbGVuLCB1bnNpZ25lZCBjbWQpCit7CisJX19sZTMyICpkYXRhZGRyID0gKF9fbGUzMiBfX2ZvcmNlICopKGRlc2MgKyA0KTsKKwlfX2xlMTYgKmNtZGxlbiA9IChfX2xlMTYgX19mb3JjZSAqKWRlc2M7CisKKwkvKiBTREhDSSBzcGVjaWZpY2F0aW9uIHNheXMgQURNQSBkZXNjcmlwdG9ycyBzaG91bGQgYmUgNCBieXRlCisJICogYWxpZ25lZCwgc28gdXNpbmcgMTYgb3IgMzJiaXQgb3BlcmF0aW9ucyBzaG91bGQgYmUgc2FmZS4gKi8KKworCWNtZGxlblswXSA9IGNwdV90b19sZTE2KGNtZCk7CisJY21kbGVuWzFdID0gY3B1X3RvX2xlMTYobGVuKTsKKworCWRhdGFkZHJbMF0gPSBjcHVfdG9fbGUzMihhZGRyKTsKK30KKwogc3RhdGljIGludCBzZGhjaV9hZG1hX3RhYmxlX3ByZShzdHJ1Y3Qgc2RoY2lfaG9zdCAqaG9zdCwKIAlzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpCiB7CkBAIC00NDMsMTkgKzQ2OCwxMSBAQAogCQkJCXNkaGNpX2t1bm1hcF9hdG9taWMoYnVmZmVyLCAmZmxhZ3MpOwogCQkJfQogCi0JCQlkZXNjWzddID0gKGFsaWduX2FkZHIgPj4gMjQpICYgMHhmZjsKLQkJCWRlc2NbNl0gPSAoYWxpZ25fYWRkciA+PiAxNikgJiAweGZmOwotCQkJZGVzY1s1XSA9IChhbGlnbl9hZGRyID4+IDgpICYgMHhmZjsKLQkJCWRlc2NbNF0gPSAoYWxpZ25fYWRkciA+PiAwKSAmIDB4ZmY7CisJCQkvKiB0cmFuLCB2YWxpZCAqLworCQkJc2RoY2lfc2V0X2FkbWFfZGVzYyhkZXNjLCBhbGlnbl9hZGRyLCBvZmZzZXQsIDB4MjEpOwogCiAJCQlCVUdfT04ob2Zmc2V0ID4gNjU1MzYpOwogCi0JCQlkZXNjWzNdID0gKG9mZnNldCA+PiA4KSAmIDB4ZmY7Ci0JCQlkZXNjWzJdID0gKG9mZnNldCA+PiAwKSAmIDB4ZmY7Ci0KLQkJCWRlc2NbMV0gPSAweDAwOwotCQkJZGVzY1swXSA9IDB4MjE7IC8qIHRyYW4sIHZhbGlkICovCi0KIAkJCWFsaWduICs9IDQ7CiAJCQlhbGlnbl9hZGRyICs9IDQ7CiAKQEAgLTQ2NSwxOSArNDgyLDEwIEBACiAJCQlsZW4gLT0gb2Zmc2V0OwogCQl9CiAKLQkJZGVzY1s3XSA9IChhZGRyID4+IDI0KSAmIDB4ZmY7Ci0JCWRlc2NbNl0gPSAoYWRkciA+PiAxNikgJiAweGZmOwotCQlkZXNjWzVdID0gKGFkZHIgPj4gOCkgJiAweGZmOwotCQlkZXNjWzRdID0gKGFkZHIgPj4gMCkgJiAweGZmOwotCiAJCUJVR19PTihsZW4gPiA2NTUzNik7CiAKLQkJZGVzY1szXSA9IChsZW4gPj4gOCkgJiAweGZmOwotCQlkZXNjWzJdID0gKGxlbiA+PiAwKSAmIDB4ZmY7Ci0KLQkJZGVzY1sxXSA9IDB4MDA7Ci0JCWRlc2NbMF0gPSAweDIxOyAvKiB0cmFuLCB2YWxpZCAqLwotCisJCS8qIHRyYW4sIHZhbGlkICovCisJCXNkaGNpX3NldF9hZG1hX2Rlc2MoZGVzYywgYWRkciwgbGVuLCAweDIxKTsKIAkJZGVzYyArPSA4OwogCiAJCS8qCkBAIC00OTAsMTYgKzQ5OCw5IEBACiAJLyoKIAkgKiBBZGQgYSB0ZXJtaW5hdGluZyBlbnRyeS4KIAkgKi8KLQlkZXNjWzddID0gMDsKLQlkZXNjWzZdID0gMDsKLQlkZXNjWzVdID0gMDsKLQlkZXNjWzRdID0gMDsKIAotCWRlc2NbM10gPSAwOwotCWRlc2NbMl0gPSAwOwotCi0JZGVzY1sxXSA9IDB4MDA7Ci0JZGVzY1swXSA9IDB4MDM7IC8qIG5vcCwgZW5kLCB2YWxpZCAqLworCS8qIG5vcCwgZW5kLCB2YWxpZCAqLworCXNkaGNpX3NldF9hZG1hX2Rlc2MoZGVzYywgMCwgMCwgMHgzKTsKIAogCS8qCiAJICogUmVzeW5jIGFsaWduIGJ1ZmZlciBhcyB3ZSBtaWdodCBoYXZlIGNoYW5nZWQgaXQuCkBAIC0xNjEwLDE2ICsxNjExLDEzIEBACiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXNkaGNpX2luaXQoaG9zdCk7CisJc2RoY2lfaW5pdChob3N0LCAoaG9zdC0+bW1jLT5wbV9mbGFncyAmIE1NQ19QTV9LRUVQX1BPV0VSKSk7CiAJbW1pb3diKCk7CiAKIAlyZXQgPSBtbWNfcmVzdW1lX2hvc3QoaG9zdC0+bW1jKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJc2RoY2lfZW5hYmxlX2NhcmRfZGV0ZWN0aW9uKGhvc3QpOwogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwoc2RoY2lfcmVzdW1lX2hvc3QpOwpAQCAtMTg3NCw3ICsxODcyLDcgQEAKIAlpZiAocmV0KQogCQlnb3RvIHVudGFza2xldDsKIAotCXNkaGNpX2luaXQoaG9zdCk7CisJc2RoY2lfaW5pdChob3N0LCAwKTsKIAogI2lmZGVmIENPTkZJR19NTUNfREVCVUcKIAlzZGhjaV9kdW1wcmVncyhob3N0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuYyBiL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuYwppbmRleCBlMjJjM2ZhLi5iMmI1NzdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5jCkBAIC0zMjMsNyArMzIzLDcgQEAKIAkJaWYgKGlyZWcgJiAoVE1JT19TVEFUX0NBUkRfSU5TRVJUIHwgVE1JT19TVEFUX0NBUkRfUkVNT1ZFKSkgewogCQkJYWNrX21tY19pcnFzKGhvc3QsIFRNSU9fU1RBVF9DQVJEX0lOU0VSVCB8CiAJCQkJVE1JT19TVEFUX0NBUkRfUkVNT1ZFKTsKLQkJCW1tY19kZXRlY3RfY2hhbmdlKGhvc3QtPm1tYywgMCk7CisJCQltbWNfZGV0ZWN0X2NoYW5nZShob3N0LT5tbWMsIG1zZWNzX3RvX2ppZmZpZXMoMTAwKSk7CiAJCX0KIAogCQkvKiBDUkMgYW5kIG90aGVyIGVycm9ycyAqLwpAQCAtNTUwLDYgKzU1MCw3IEBACiAKIAltbWMtPm9wcyA9ICZ0bWlvX21tY19vcHM7CiAJbW1jLT5jYXBzID0gTU1DX0NBUF80X0JJVF9EQVRBOworCW1tYy0+Y2FwcyB8PSBwZGF0YS0+Y2FwYWJpbGl0aWVzOwogCW1tYy0+Zl9tYXggPSBwZGF0YS0+aGNsazsKIAltbWMtPmZfbWluID0gbW1jLT5mX21heCAvIDUxMjsKIAltbWMtPm9jcl9hdmFpbCA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0OwpAQCAtNTY4LDE0ICs1NjksMTQgQEAKIAlpZiAocmV0ID49IDApCiAJCWhvc3QtPmlycSA9IHJldDsKIAllbHNlCi0JCWdvdG8gdW5tYXBfY3RsOworCQlnb3RvIGNlbGxfZGlzYWJsZTsKIAogCWRpc2FibGVfbW1jX2lycXMoaG9zdCwgVE1JT19NQVNLX0FMTCk7CiAKIAlyZXQgPSByZXF1ZXN0X2lycShob3N0LT5pcnEsIHRtaW9fbW1jX2lycSwgSVJRRl9ESVNBQkxFRCB8CiAJCUlSUUZfVFJJR0dFUl9GQUxMSU5HLCBkZXZfbmFtZSgmZGV2LT5kZXYpLCBob3N0KTsKIAlpZiAocmV0KQotCQlnb3RvIHVubWFwX2N0bDsKKwkJZ290byBjZWxsX2Rpc2FibGU7CiAKIAltbWNfYWRkX2hvc3QobW1jKTsKIApAQCAtNTg3LDYgKzU4OCw5IEBACiAKIAlyZXR1cm4gMDsKIAorY2VsbF9kaXNhYmxlOgorCWlmIChjZWxsLT5kaXNhYmxlKQorCQljZWxsLT5kaXNhYmxlKGRldik7CiB1bm1hcF9jdGw6CiAJaW91bm1hcChob3N0LT5jdGwpOwogaG9zdF9mcmVlOgpAQCAtNTk3LDYgKzYwMSw3IEBACiAKIHN0YXRpYyBpbnQgX19kZXZleGl0IHRtaW9fbW1jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IG1mZF9jZWxsCSpjZWxsID0gKHN0cnVjdCBtZmRfY2VsbCAqKWRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IG1tY19ob3N0ICptbWMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKQEAgLTYwNSw2ICs2MTAsOCBAQAogCQlzdHJ1Y3QgdG1pb19tbWNfaG9zdCAqaG9zdCA9IG1tY19wcml2KG1tYyk7CiAJCW1tY19yZW1vdmVfaG9zdChtbWMpOwogCQlmcmVlX2lycShob3N0LT5pcnEsIGhvc3QpOworCQlpZiAoY2VsbC0+ZGlzYWJsZSkKKwkJCWNlbGwtPmRpc2FibGUoZGV2KTsKIAkJaW91bm1hcChob3N0LT5jdGwpOwogCQltbWNfZnJlZV9ob3N0KG1tYyk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5oIGIvZHJpdmVycy9tbWMvaG9zdC90bWlvX21tYy5oCmluZGV4IDY5MmRjMjMuLmRhZmVjZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL2hvc3QvdG1pb19tbWMuaAorKysgYi9kcml2ZXJzL21tYy9ob3N0L3RtaW9fbW1jLmgKQEAgLTU1LDEwICs1NSw4IEBACiAvKiBEZWZpbmUgc29tZSBJUlEgbWFza3MgKi8KIC8qIFRoaXMgaXMgdGhlIG1hc2sgdXNlZCBhdCByZXNldCBieSB0aGUgY2hpcCAqLwogI2RlZmluZSBUTUlPX01BU0tfQUxMICAgICAgICAgICAweDgzN2YwMzFkCi0jZGVmaW5lIFRNSU9fTUFTS19SRUFET1AgIChUTUlPX1NUQVRfUlhSRFkgfCBUTUlPX1NUQVRfREFUQUVORCB8IFwKLQkJVE1JT19TVEFUX0NBUkRfUkVNT1ZFIHwgVE1JT19TVEFUX0NBUkRfSU5TRVJUKQotI2RlZmluZSBUTUlPX01BU0tfV1JJVEVPUCAoVE1JT19TVEFUX1RYUlEgfCBUTUlPX1NUQVRfREFUQUVORCB8IFwKLQkJVE1JT19TVEFUX0NBUkRfUkVNT1ZFIHwgVE1JT19TVEFUX0NBUkRfSU5TRVJUKQorI2RlZmluZSBUTUlPX01BU0tfUkVBRE9QICAoVE1JT19TVEFUX1JYUkRZIHwgVE1JT19TVEFUX0RBVEFFTkQpCisjZGVmaW5lIFRNSU9fTUFTS19XUklURU9QIChUTUlPX1NUQVRfVFhSUSB8IFRNSU9fU1RBVF9EQVRBRU5EKQogI2RlZmluZSBUTUlPX01BU0tfQ01EICAgICAoVE1JT19TVEFUX0NNRFJFU1BFTkQgfCBUTUlPX1NUQVRfQ01EVElNRU9VVCB8IFwKIAkJVE1JT19TVEFUX0NBUkRfUkVNT1ZFIHwgVE1JT19TVEFUX0NBUkRfSU5TRVJUKQogI2RlZmluZSBUTUlPX01BU0tfSVJRICAgICAoVE1JT19NQVNLX1JFQURPUCB8IFRNSU9fTUFTS19XUklURU9QIHwgVE1JT19NQVNLX0NNRCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2NmaV91dGlsLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9jZmlfdXRpbC5jCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmMgYi9kcml2ZXJzL210ZC9jaGlwcy9qZWRlY19wcm9iZS5jCmluZGV4IDFiZWM1ZTEuLjhkYjExNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2NoaXBzL2plZGVjX3Byb2JlLmMKKysrIGIvZHJpdmVycy9tdGQvY2hpcHMvamVkZWNfcHJvYmUuYwpAQCAtMjI2LDcgKzIyNiw3IEBACiAgKiBleGlzdHMsIGJ1dCBpcyBmb3IgTVREX1VBRERSX05PVF9TVVBQT1JURUQgLSBhbmQsIHRoZXJlZm9yZSwKICAqIHNob3VsZCBub3QgYmUgdXNlZC4gIFRoZSAgcHJvYmxlbSBpcyB0aGF0IHN0cnVjdHVyZXMgd2l0aAogICogaW5pdGlhbGl6ZXJzIGhhdmUgZXh0cmEgZmllbGRzIGluaXRpYWxpemVkIHRvIDAuICBJdCBpcyBfdmVyeV8KLSAqIGRlc2lyZWFibGUgdG8gaGF2ZSB0aGUgdW5sb2NrIGFkZHJlc3MgZW50cmllcyBmb3IgdW5zdXBwb3J0ZWQKKyAqIGRlc2lyYWJsZSB0byBoYXZlIHRoZSB1bmxvY2sgYWRkcmVzcyBlbnRyaWVzIGZvciB1bnN1cHBvcnRlZAogICogZGF0YSB3aWR0aHMgYXV0b21hdGljYWxseSBpbml0aWFsaXplZCAtIHRoYXQgbWVhbnMgdGhhdAogICogTVREX1VBRERSX05PVF9TVVBQT1JURUQgbXVzdCBiZSAwIGFuZCB0aGUgZmlyc3QgZW50cnkgaGVyZQogICogbXVzdCBnbyB1bnVzZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9pbmZ0bGNvcmUuYyBiL2RyaXZlcnMvbXRkL2luZnRsY29yZS5jCm9sZCBtb2RlIDEwMDc1NQpuZXcgbW9kZSAxMDA2NDQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL21hcHMvS2NvbmZpZwppbmRleCAyYmIwM2E4Li5hYTI4MDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9LY29uZmlnCkBAIC00MjIsMTUgKzQyMiw2IEBACiAJICBUaGlzIGVuYWJsZXMgYWNjZXNzIHRvIHRoZSBmbGFzaCBjaGlwcyBvbiB0aGUgSHluaXggZXZhbHVhdGlvbiBib2FyZHMuCiAJICBJZiB5b3UgaGF2ZSBzdWNoIGEgYm9hcmQsIHNheSAnWScuCiAKLWNvbmZpZyBNVERfT01BUF9OT1IKLQl0cmlzdGF0ZSAiVEkgT01BUCBib2FyZCBtYXBwaW5ncyIKLQlkZXBlbmRzIG9uIE1URF9DRkkgJiYgQVJDSF9PTUFQCi0JaGVscAotCSAgVGhpcyBlbmFibGVzIGFjY2VzcyB0byB0aGUgTk9SIGZsYXNoIGNoaXBzIG9uIFRJIE9NQVAtYmFzZWQKLQkgIGJvYXJkcyBkZWZpbmluZyBmbGFzaCBwbGF0Zm9ybSBkZXZpY2VzIGFuZCBmbGFzaCBwbGF0Zm9ybSBkYXRhLgotCSAgVGhlc2UgYm9hcmRzIGluY2x1ZGUgdGhlIElubm92YXRvciwgSDIsIEgzLCBPU0ssIFBlcnNldXMyLCBhbmQKLQkgIG1vcmUuICBJZiB5b3UgaGF2ZSBzdWNoIGEgYm9hcmQsIHNheSAnWScuCi0KICMgVGhpcyBuZWVkcyBDRkkgb3IgSkVERUMsIGRlcGVuZGluZyBvbiB0aGUgY2FyZHMgZm91bmQuCiBjb25maWcgTVREX1BDSQogCXRyaXN0YXRlICJQQ0kgTVREIGRyaXZlciIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUgYi9kcml2ZXJzL210ZC9tYXBzL01ha2VmaWxlCmluZGV4IGE0NDkxOWYuLmJiMDM1Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9NYWtlZmlsZQpAQCAtNTQsNyArNTQsNiBAQAogb2JqLSQoQ09ORklHX01URF9XUlNCQzgyNjApCSs9IHdyX3NiYzgyeHhfZmxhc2gubwogb2JqLSQoQ09ORklHX01URF9ETVYxODIpCSs9IGRtdjE4Mi5vCiBvYmotJChDT05GSUdfTVREX1BMQVRSQU0pCSs9IHBsYXQtcmFtLm8KLW9iai0kKENPTkZJR19NVERfT01BUF9OT1IpCSs9IG9tYXBfbm9yLm8KIG9iai0kKENPTkZJR19NVERfSU5URUxfVlJfTk9SKQkrPSBpbnRlbF92cl9ub3Iubwogb2JqLSQoQ09ORklHX01URF9CRklOX0FTWU5DKQkrPSBiZmluLWFzeW5jLWZsYXNoLm8KIG9iai0kKENPTkZJR19NVERfUkJUWDQ5MzkpCSs9IHJidHg0OTM5LWZsYXNoLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL21hcHMvb21hcF9ub3IuYyBiL2RyaXZlcnMvbXRkL21hcHMvb21hcF9ub3IuYwppbmRleCBlYWQwYjJmLi5lNjlkZTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tYXBzL29tYXBfbm9yLmMKKysrIGIvZHJpdmVycy9tdGQvbWFwcy9vbWFwX25vci5jCkBAIC0xLDE4OCArMCwwIEBACi0vKgotICogRmxhc2ggbWVtb3J5IHN1cHBvcnQgZm9yIHZhcmlvdXMgVEkgT01BUCBib2FyZHMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwMiBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IFRleGFzIEluc3RydW1lbnRzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgTm9raWEgQ29ycG9yYXRpb24KLSAqCi0gKglBc3NlbWJsZWQgdXNpbmcgZHJpdmVyIGNvZGUgY29weXJpZ2h0IHRoZSBjb21wYW5pZXMgYWJvdmUKLSAqCWFuZCB3cml0dGVuIGJ5IERhdmlkIEJyb3duZWxsLCBKaWFuIFpoYW5nIDxqemhhbmdAdGkuY29tPiwKLSAqIAlUb255IExpbmRncmVuIDx0b255QGF0b21pZGUuY29tPiBhbmQgb3RoZXJzLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKLSAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTgotICogTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAotICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KLSNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9mbGFzaC5oPgotI2luY2x1ZGUgPHBsYXQvdGMuaD4KLQotI2lmZGVmIENPTkZJR19NVERfUEFSVElUSU9OUwotc3RhdGljIGNvbnN0IGNoYXIgKnBhcnRfcHJvYmVzW10gPSB7IC8qICJSZWRCb290IiwgKi8gImNtZGxpbmVwYXJ0IiwgTlVMTCB9OwotI2VuZGlmCi0KLXN0cnVjdCBvbWFwZmxhc2hfaW5mbyB7Ci0Jc3RydWN0IG10ZF9wYXJ0aXRpb24JKnBhcnRzOwotCXN0cnVjdCBtdGRfaW5mbwkJKm10ZDsKLQlzdHJ1Y3QgbWFwX2luZm8JCW1hcDsKLX07Ci0KLXN0YXRpYyB2b2lkIG9tYXBfc2V0X3ZwcChzdHJ1Y3QgbWFwX2luZm8gKm1hcCwgaW50IGVuYWJsZSkKLXsKLQlzdGF0aWMgaW50CWNvdW50OwotCXUzMiBsOwotCi0JaWYgKGNwdV9jbGFzc19pc19vbWFwMSgpKSB7Ci0JCWlmIChlbmFibGUpIHsKLQkJCWlmIChjb3VudCsrID09IDApIHsKLQkJCQlsID0gb21hcF9yZWFkbChFTUlGU19DT05GSUcpOwotCQkJCWwgfD0gT01BUF9FTUlGU19DT05GSUdfV1A7Ci0JCQkJb21hcF93cml0ZWwobCwgRU1JRlNfQ09ORklHKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChjb3VudCAmJiAoLS1jb3VudCA9PSAwKSkgewotCQkJCWwgPSBvbWFwX3JlYWRsKEVNSUZTX0NPTkZJRyk7Ci0JCQkJbCAmPSB+T01BUF9FTUlGU19DT05GSUdfV1A7Ci0JCQkJb21hcF93cml0ZWwobCwgRU1JRlNfQ09ORklHKTsKLQkJCX0KLQkJfQotCX0KLX0KLQotc3RhdGljIGludCBfX2luaXQgb21hcGZsYXNoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JaW50IGVycjsKLQlzdHJ1Y3Qgb21hcGZsYXNoX2luZm8gKmluZm87Ci0Jc3RydWN0IGZsYXNoX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0Jc3RydWN0IHJlc291cmNlICpyZXMgPSBwZGV2LT5yZXNvdXJjZTsKLQl1bnNpZ25lZCBsb25nIHNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOwotCi0JaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvbWFwZmxhc2hfaW5mbyksIEdGUF9LRVJORUwpOwotCWlmICghaW5mbykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBzaXplLCAiZmxhc2giKSkgewotCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0X2ZyZWVfaW5mbzsKLQl9Ci0KLQlpbmZvLT5tYXAudmlydAkJPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHNpemUpOwotCWlmICghaW5mby0+bWFwLnZpcnQpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXRfcmVsZWFzZV9tZW1fcmVnaW9uOwotCX0KLQlpbmZvLT5tYXAubmFtZQkJPSBkZXZfbmFtZSgmcGRldi0+ZGV2KTsKLQlpbmZvLT5tYXAucGh5cwkJPSByZXMtPnN0YXJ0OwotCWluZm8tPm1hcC5zaXplCQk9IHNpemU7Ci0JaW5mby0+bWFwLmJhbmt3aWR0aAk9IHBkYXRhLT53aWR0aDsKLQlpbmZvLT5tYXAuc2V0X3ZwcAk9IG9tYXBfc2V0X3ZwcDsKLQotCXNpbXBsZV9tYXBfaW5pdCgmaW5mby0+bWFwKTsKLQlpbmZvLT5tdGQgPSBkb19tYXBfcHJvYmUocGRhdGEtPm1hcF9uYW1lLCAmaW5mby0+bWFwKTsKLQlpZiAoIWluZm8tPm10ZCkgewotCQllcnIgPSAtRUlPOwotCQlnb3RvIG91dF9pb3VubWFwOwotCX0KLQlpbmZvLT5tdGQtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KLQlpbmZvLT5tdGQtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwotCi0jaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCi0JZXJyID0gcGFyc2VfbXRkX3BhcnRpdGlvbnMoaW5mby0+bXRkLCBwYXJ0X3Byb2JlcywgJmluZm8tPnBhcnRzLCAwKTsKLQlpZiAoZXJyID4gMCkKLQkJYWRkX210ZF9wYXJ0aXRpb25zKGluZm8tPm10ZCwgaW5mby0+cGFydHMsIGVycik7Ci0JZWxzZSBpZiAoZXJyIDw9IDAgJiYgcGRhdGEtPnBhcnRzKQotCQlhZGRfbXRkX3BhcnRpdGlvbnMoaW5mby0+bXRkLCBwZGF0YS0+cGFydHMsIHBkYXRhLT5ucl9wYXJ0cyk7Ci0JZWxzZQotI2VuZGlmCi0JCWFkZF9tdGRfZGV2aWNlKGluZm8tPm10ZCk7Ci0KLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKLQotCXJldHVybiAwOwotCi1vdXRfaW91bm1hcDoKLQlpb3VubWFwKGluZm8tPm1hcC52aXJ0KTsKLW91dF9yZWxlYXNlX21lbV9yZWdpb246Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHNpemUpOwotb3V0X2ZyZWVfaW5mbzoKLQlrZnJlZShpbmZvKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgX19leGl0IG9tYXBmbGFzaF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3Qgb21hcGZsYXNoX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwotCi0JaWYgKGluZm8pIHsKLQkJaWYgKGluZm8tPnBhcnRzKSB7Ci0JCQlkZWxfbXRkX3BhcnRpdGlvbnMoaW5mby0+bXRkKTsKLQkJCWtmcmVlKGluZm8tPnBhcnRzKTsKLQkJfSBlbHNlCi0JCQlkZWxfbXRkX2RldmljZShpbmZvLT5tdGQpOwotCQltYXBfZGVzdHJveShpbmZvLT5tdGQpOwotCQlyZWxlYXNlX21lbV9yZWdpb24oaW5mby0+bWFwLnBoeXMsIGluZm8tPm1hcC5zaXplKTsKLQkJaW91bm1hcCgodm9pZCBfX2lvbWVtICopIGluZm8tPm1hcC52aXJ0KTsKLQkJa2ZyZWUoaW5mbyk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBmbGFzaF9kcml2ZXIgPSB7Ci0JLnJlbW92ZQk9IF9fZXhpdF9wKG9tYXBmbGFzaF9yZW1vdmUpLAotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lCT0gIm9tYXBmbGFzaCIsCi0JCS5vd25lcgk9IFRISVNfTU9EVUxFLAotCX0sCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwZmxhc2hfaW5pdCh2b2lkKQotewotCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcHJvYmUoJm9tYXBmbGFzaF9kcml2ZXIsIG9tYXBmbGFzaF9wcm9iZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBvbWFwZmxhc2hfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZvbWFwZmxhc2hfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQob21hcGZsYXNoX2luaXQpOwotbW9kdWxlX2V4aXQob21hcGZsYXNoX2V4aXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk1URCBOT1IgbWFwIGRyaXZlciBmb3IgVEkgT01BUCBib2FyZHMiKTsKLU1PRFVMRV9BTElBUygicGxhdGZvcm06b21hcGZsYXNoIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tYXBzL3Bpc21vLmMgYi9kcml2ZXJzL210ZC9tYXBzL3Bpc21vLmMKaW5kZXggYzQ4Y2FkMi4uMzBlMTJjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbWFwcy9waXNtby5jCisrKyBiL2RyaXZlcnMvbXRkL21hcHMvcGlzbW8uYwpAQCAtMTE4LDcgKzExOCw3IEBACiB7CiAJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2OwogCXN0cnVjdCByZXNvdXJjZSByZXMgPSB7IH07Ci0JcGh5c19hZGRyX3QgYmFzZSA9IHJlZ2lvbi5iYXNlOworCXBoeXNfYWRkcl90IGJhc2UgPSByZWdpb24tPmJhc2U7CiAJaW50IHJldDsKIAogCWlmIChiYXNlID09IH4wKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbWFwcy9wbGF0LXJhbS5jIGIvZHJpdmVycy9tdGQvbWFwcy9wbGF0LXJhbS5jCmluZGV4IGRhZmI5MTkuLjc2YTc2YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL21hcHMvcGxhdC1yYW0uYworKysgYi9kcml2ZXJzL210ZC9tYXBzL3BsYXQtcmFtLmMKQEAgLTQsNyArNCw3IEBACiAgKglodHRwOi8vd3d3LnNpbXRlYy5jby51ay9wcm9kdWN0cy9TV0xJTlVYLwogICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgogICoKLSAqIEdlbmVyaWMgcGxhdGZyb20gZGV2aWNlIGJhc2VkIFJBTSBtYXAKKyAqIEdlbmVyaWMgcGxhdGZvcm0gZGV2aWNlIGJhc2VkIFJBTSBtYXAKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZyBiL2RyaXZlcnMvbXRkL25hbmQvS2NvbmZpZwppbmRleCBiYjY0NjU2Li4xMTU3ZDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9LY29uZmlnCkBAIC00NDQsNyArNDQ0LDcgQEAKIAogY29uZmlnIE1URF9OQU5EX01YQwogCXRyaXN0YXRlICJNWEMgTkFORCBzdXBwb3J0IgotCWRlcGVuZHMgb24gQVJDSF9NWDIgfHwgQVJDSF9NWDMKKwlkZXBlbmRzIG9uIEFSQ0hfTVgyIHx8IEFSQ0hfTVgyNSB8fCBBUkNIX01YMwogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyB0aGUgZHJpdmVyIGZvciB0aGUgTkFORCBmbGFzaCBjb250cm9sbGVyIG9uIHRoZQogCSAgTVhDIHByb2Nlc3NvcnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL2JjbV91bWlfbmFuZC5jIGIvZHJpdmVycy9tdGQvbmFuZC9iY21fdW1pX25hbmQuYwppbmRleCAwODdiY2Q3Li43ZDFjY2E3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9iY21fdW1pX25hbmQuYworKysgYi9kcml2ZXJzL210ZC9uYW5kL2JjbV91bWlfbmFuZC5jCkBAIC0zODEsNyArMzgxLDcgQEAKIAlpZiAoIXIpCiAJCXJldHVybiAtRU5YSU87CiAKLQkvKiBtYXAgcGh5c2ljYWwgYWRyZXNzICovCisJLyogbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi8KIAliY21fdW1pX2lvX2Jhc2UgPSBpb3JlbWFwKHItPnN0YXJ0LCByLT5lbmQgLSByLT5zdGFydCArIDEpOwogCiAJaWYgKCFiY21fdW1pX2lvX2Jhc2UpIHsKQEAgLTUyNSw3ICs1MjUsNyBAQAogCS8qIFJlbGVhc2UgcmVzb3VyY2VzLCB1bnJlZ2lzdGVyIGRldmljZSAqLwogCW5hbmRfcmVsZWFzZShib2FyZF9tdGQpOwogCi0JLyogdW5tYXAgcGh5c2ljYWwgYWRyZXNzICovCisJLyogdW5tYXAgcGh5c2ljYWwgYWRkcmVzcyAqLwogCWlvdW5tYXAoYmNtX3VtaV9pb19iYXNlKTsKIAogCS8qIEZyZWUgdGhlIE1URCBkZXZpY2Ugc3RydWN0dXJlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9uYW5kL214Y19uYW5kLmMgYi9kcml2ZXJzL210ZC9uYW5kL214Y19uYW5kLmMKaW5kZXggNDVkZWM1Ny4uYjI5MDBkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tdGQvbmFuZC9teGNfbmFuZC5jCisrKyBiL2RyaXZlcnMvbXRkL25hbmQvbXhjX25hbmQuYwpAQCAtNTA3LDcgKzUwNyw3IEBACiAJCSAqIE1YQyBOQU5ERkMgY2FuIG9ubHkgcGVyZm9ybSBmdWxsIHBhZ2Urc3BhcmUgb3IKIAkJICogc3BhcmUtb25seSByZWFkL3dyaXRlLiAgV2hlbiB0aGUgdXBwZXIgbGF5ZXJzCiAJCSAqIGxheWVycyBwZXJmb3JtIGEgcmVhZC93cml0ZSBidWYgb3BlcmF0aW9uLAotCQkgKiB3ZSB3aWxsIHVzZWQgdGhlIHNhdmVkIGNvbHVtbiBhZHJlc3MgdG8gaW5kZXggaW50bworCQkgKiB3ZSB3aWxsIHVzZWQgdGhlIHNhdmVkIGNvbHVtbiBhZGRyZXNzIHRvIGluZGV4IGludG8KIAkJICogdGhlIGZ1bGwgcGFnZS4KIAkJICovCiAJCXNlbmRfYWRkcihob3N0LCAwLCBwYWdlX2FkZHIgPT0gLTEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvbmFuZC9vbWFwMi5jIGIvZHJpdmVycy9tdGQvbmFuZC9vbWFwMi5jCmluZGV4IDFiYjc5OWYuLjI2YWVjMDA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9uYW5kL29tYXAyLmMKKysrIGIvZHJpdmVycy9tdGQvbmFuZC9vbWFwMi5jCkBAIC0zMCwxMiArMzAsOCBAQAogCiAjZGVmaW5lCURSSVZFUl9OQU1FCSJvbWFwMi1uYW5kIgogCi0vKiBzaXplICg0IEtpQikgZm9yIElPIG1hcHBpbmcgKi8KLSNkZWZpbmUJTkFORF9JT19TSVpFCVNaXzRLCi0KICNkZWZpbmUJTkFORF9XUF9PRkYJMAogI2RlZmluZSBOQU5EX1dQX0JJVAkweDAwMDAwMDEwCi0jZGVmaW5lIFdSX1JEX1BJTl9NT05JVE9SSU5HCTB4MDA2MDAwMDAKIAogI2RlZmluZQlHUE1DX0JVRl9GVUxMCTB4MDAwMDAwMDEKICNkZWZpbmUJR1BNQ19CVUZfRU1QVFkJMHgwMDAwMDAwMApAQCAtODgyLDggKzg3OCw2IEBACiAJc3RydWN0IG9tYXBfbmFuZF9pbmZvCQkqaW5mbzsKIAlzdHJ1Y3Qgb21hcF9uYW5kX3BsYXRmb3JtX2RhdGEJKnBkYXRhOwogCWludAkJCQllcnI7Ci0JdW5zaWduZWQgbG9uZyAJCQl2YWw7Ci0KIAogCXBkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaWYgKHBkYXRhID09IE5VTEwpIHsKQEAgLTkwNSwyOCArODk5LDE0IEBACiAJaW5mby0+Z3BtY19jcwkJPSBwZGF0YS0+Y3M7CiAJaW5mby0+Z3BtY19iYXNlYWRkcgk9IHBkYXRhLT5ncG1jX2Jhc2VhZGRyOwogCWluZm8tPmdwbWNfY3NfYmFzZWFkZHIJPSBwZGF0YS0+Z3BtY19jc19iYXNlYWRkcjsKKwlpbmZvLT5waHlzX2Jhc2UJCT0gcGRhdGEtPnBoeXNfYmFzZTsKIAogCWluZm8tPm10ZC5wcml2CQk9ICZpbmZvLT5uYW5kOwogCWluZm8tPm10ZC5uYW1lCQk9IGRldl9uYW1lKCZwZGV2LT5kZXYpOwogCWluZm8tPm10ZC5vd25lcgkJPSBUSElTX01PRFVMRTsKIAotCWVyciA9IGdwbWNfY3NfcmVxdWVzdChpbmZvLT5ncG1jX2NzLCBOQU5EX0lPX1NJWkUsICZpbmZvLT5waHlzX2Jhc2UpOwotCWlmIChlcnIgPCAwKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCByZXF1ZXN0IEdQTUMgQ1NcbiIpOwotCQlnb3RvIG91dF9mcmVlX2luZm87Ci0JfQotCi0JLyogRW5hYmxlIFJEIFBJTiBNb25pdG9yaW5nIFJlZyAqLwotCWlmIChwZGF0YS0+ZGV2X3JlYWR5KSB7Ci0JCXZhbCAgPSBncG1jX2NzX3JlYWRfcmVnKGluZm8tPmdwbWNfY3MsIEdQTUNfQ1NfQ09ORklHMSk7Ci0JCXZhbCB8PSBXUl9SRF9QSU5fTU9OSVRPUklORzsKLQkJZ3BtY19jc193cml0ZV9yZWcoaW5mby0+Z3BtY19jcywgR1BNQ19DU19DT05GSUcxLCB2YWwpOwotCX0KLQotCXZhbCAgPSBncG1jX2NzX3JlYWRfcmVnKGluZm8tPmdwbWNfY3MsIEdQTUNfQ1NfQ09ORklHNyk7Ci0JdmFsICY9IH4oMHhmIDw8IDgpOwotCXZhbCB8PSAgKDB4YyAmIDB4ZikgPDwgODsKLQlncG1jX2NzX3dyaXRlX3JlZyhpbmZvLT5ncG1jX2NzLCBHUE1DX0NTX0NPTkZJRzcsIHZhbCk7CisJaW5mby0+bmFuZC5vcHRpb25zCXw9IHBkYXRhLT5kZXZzaXplID8gTkFORF9CVVNXSURUSF8xNiA6IDA7CisJaW5mby0+bmFuZC5vcHRpb25zCXw9IE5BTkRfU0tJUF9CQlRTQ0FOOwogCiAJLyogTkFORCB3cml0ZSBwcm90ZWN0IG9mZiAqLwogCW9tYXBfbmFuZF93cCgmaW5mby0+bXRkLCBOQU5EX1dQX09GRik7CkBAIC05MzQsNyArOTE0LDcgQEAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihpbmZvLT5waHlzX2Jhc2UsIE5BTkRfSU9fU0laRSwKIAkJCQlwZGV2LT5kZXYuZHJpdmVyLT5uYW1lKSkgewogCQllcnIgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0X2ZyZWVfY3M7CisJCWdvdG8gb3V0X2ZyZWVfaW5mbzsKIAl9CiAKIAlpbmZvLT5uYW5kLklPX0FERFJfUiA9IGlvcmVtYXAoaW5mby0+cGh5c19iYXNlLCBOQU5EX0lPX1NJWkUpOwpAQCAtOTYzLDExICs5NDMsNiBAQAogCQlpbmZvLT5uYW5kLmNoaXBfZGVsYXkgPSA1MDsKIAl9CiAKLQlpbmZvLT5uYW5kLm9wdGlvbnMgIHw9IE5BTkRfU0tJUF9CQlRTQ0FOOwotCWlmICgoZ3BtY19jc19yZWFkX3JlZyhpbmZvLT5ncG1jX2NzLCBHUE1DX0NTX0NPTkZJRzEpICYgMHgzMDAwKQotCQkJCQkJCQk9PSAweDEwMDApCi0JCWluZm8tPm5hbmQub3B0aW9ucyAgfD0gTkFORF9CVVNXSURUSF8xNjsKLQogCWlmICh1c2VfcHJlZmV0Y2gpIHsKIAkJLyogY29weSB0aGUgdmlydHVhbCBhZGRyZXNzIG9mIG5hbmQgYmFzZSBmb3IgZmlmbyBhY2Nlc3MgKi8KIAkJaW5mby0+bmFuZF9wcmVmX2ZpZm9fYWRkID0gaW5mby0+bmFuZC5JT19BRERSX1I7CkBAIC0xMDQzLDggKzEwMTgsNiBAQAogCiBvdXRfcmVsZWFzZV9tZW1fcmVnaW9uOgogCXJlbGVhc2VfbWVtX3JlZ2lvbihpbmZvLT5waHlzX2Jhc2UsIE5BTkRfSU9fU0laRSk7Ci1vdXRfZnJlZV9jczoKLQlncG1jX2NzX2ZyZWUoaW5mby0+Z3BtY19jcyk7CiBvdXRfZnJlZV9pbmZvOgogCWtmcmVlKGluZm8pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvYnVpbGQuYyBiL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCmluZGV4IDE0Y2VjMDQuLmZhZDQwYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9idWlsZC5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgpAQCAtNTAsNyArNTEsOCBAQAogCiAvKioKICAqIHN0cnVjdCBtdGRfZGV2X3BhcmFtIC0gTVREIGRldmljZSBwYXJhbWV0ZXIgZGVzY3JpcHRpb24gZGF0YSBzdHJ1Y3R1cmUuCi0gKiBAbmFtZTogTVREIGRldmljZSBuYW1lIG9yIG51bWJlciBzdHJpbmcKKyAqIEBuYW1lOiBNVEQgY2hhcmFjdGVyIGRldmljZSBub2RlIHBhdGgsIE1URCBkZXZpY2UgbmFtZSwgb3IgTVREIGRldmljZSBudW1iZXIKKyAqICAgICAgICBzdHJpbmcKICAqIEB2aWRfaGRyX29mZnM6IFZJRCBoZWFkZXIgb2Zmc2V0CiAgKi8KIHN0cnVjdCBtdGRfZGV2X3BhcmFtIHsKQEAgLTU5LDEwICs2MSwxMCBAQAogfTsKIAogLyogTnVtYmVycyBvZiBlbGVtZW50cyBzZXQgaW4gdGhlIEBtdGRfZGV2X3BhcmFtIGFycmF5ICovCi1zdGF0aWMgaW50IG10ZF9kZXZzOworc3RhdGljIGludCBfX2luaXRkYXRhIG10ZF9kZXZzOwogCiAvKiBNVEQgZGV2aWNlcyBzcGVjaWZpY2F0aW9uIHBhcmFtZXRlcnMgKi8KLXN0YXRpYyBzdHJ1Y3QgbXRkX2Rldl9wYXJhbSBtdGRfZGV2X3BhcmFtW1VCSV9NQVhfREVWSUNFU107CitzdGF0aWMgc3RydWN0IG10ZF9kZXZfcGFyYW0gX19pbml0ZGF0YSBtdGRfZGV2X3BhcmFtW1VCSV9NQVhfREVWSUNFU107CiAKIC8qIFJvb3QgVUJJICJjbGFzcyIgb2JqZWN0IChjb3JyZXNwb25kcyB0byAnLzxzeXNmcz4vY2xhc3MvdWJpLycpICovCiBzdHJ1Y3QgY2xhc3MgKnViaV9jbGFzczsKQEAgLTg3LDcgKzg5LDggQEAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodWJpX2RldmljZXNfbG9jayk7CiAKIC8qICJTaG93IiBtZXRob2QgZm9yIGZpbGVzIGluICcvPHN5c2ZzPi9jbGFzcy91YmkvJyAqLwotc3RhdGljIHNzaXplX3QgdWJpX3ZlcnNpb25fc2hvdyhzdHJ1Y3QgY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCB1YmlfdmVyc2lvbl9zaG93KHN0cnVjdCBjbGFzcyAqY2xhc3MsIHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmKQogewogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBVQklfVkVSU0lPTik7CiB9CkBAIC0zNjMsMTEgKzM2NiwxMyBAQAogLyoqCiAgKiB1Ymlfc3lzZnNfaW5pdCAtIGluaXRpYWxpemUgc3lzZnMgZm9yIGFuIFVCSSBkZXZpY2UuCiAgKiBAdWJpOiBVQkkgZGV2aWNlIGRlc2NyaXB0aW9uIG9iamVjdAorICogQHJlZjogc2V0IHRvICUxIG9uIGV4aXQgaW4gY2FzZSBvZiBmYWlsdXJlIGlmIGEgcmVmZXJlbmNlIHRvIEB1YmktPmRldiB3YXMKKyAqICAgICAgIHRha2VuCiAgKgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gaW4gY2FzZSBvZiBzdWNjZXNzIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaW4KICAqIGNhc2Ugb2YgZmFpbHVyZS4KICAqLwotc3RhdGljIGludCB1Ymlfc3lzZnNfaW5pdChzdHJ1Y3QgdWJpX2RldmljZSAqdWJpKQorc3RhdGljIGludCB1Ymlfc3lzZnNfaW5pdChzdHJ1Y3QgdWJpX2RldmljZSAqdWJpLCBpbnQgKnJlZikKIHsKIAlpbnQgZXJyOwogCkBAIC0zNzksNiArMzg0LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCisJKnJlZiA9IDE7CiAJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZ1YmktPmRldiwgJmRldl9lcmFzZWJsb2NrX3NpemUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC00MzQsNyArNDQwLDcgQEAKIH0KIAogLyoqCi0gKiBraWxsX3ZvbHVtZXMgLSBkZXN0cm95IGFsbCB2b2x1bWVzLgorICoga2lsbF92b2x1bWVzIC0gZGVzdHJveSBhbGwgdXNlciB2b2x1bWVzLgogICogQHViaTogVUJJIGRldmljZSBkZXNjcmlwdGlvbiBvYmplY3QKICAqLwogc3RhdGljIHZvaWQga2lsbF92b2x1bWVzKHN0cnVjdCB1YmlfZGV2aWNlICp1YmkpCkBAIC00NDcsMzYgKzQ1MywyOSBAQAogfQogCiAvKioKLSAqIGZyZWVfdXNlcl92b2x1bWVzIC0gZnJlZSBhbGwgdXNlciB2b2x1bWVzLgotICogQHViaTogVUJJIGRldmljZSBkZXNjcmlwdGlvbiBvYmplY3QKLSAqCi0gKiBOb3JtYWxseSB0aGUgdm9sdW1lcyBhcmUgZnJlZWQgYXQgdGhlIHJlbGVhc2UgZnVuY3Rpb24gb2YgdGhlIHZvbHVtZSBkZXZpY2UKLSAqIG9iamVjdHMuIEhvd2V2ZXIsIG9uIGVycm9yIHBhdGhzIHRoZSB2b2x1bWVzIGhhdmUgdG8gYmUgZnJlZWQgYmVmb3JlIHRoZQotICogZGV2aWNlIG9iamVjdHMgaGF2ZSBiZWVuIGluaXRpYWxpemVkLgotICovCi1zdGF0aWMgdm9pZCBmcmVlX3VzZXJfdm9sdW1lcyhzdHJ1Y3QgdWJpX2RldmljZSAqdWJpKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHViaS0+dnRibF9zbG90czsgaSsrKQotCQlpZiAodWJpLT52b2x1bWVzW2ldKSB7Ci0JCQlrZnJlZSh1YmktPnZvbHVtZXNbaV0tPmViYV90YmwpOwotCQkJa2ZyZWUodWJpLT52b2x1bWVzW2ldKTsKLQkJfQotfQotCi0vKioKICAqIHVpZl9pbml0IC0gaW5pdGlhbGl6ZSB1c2VyIGludGVyZmFjZXMgZm9yIGFuIFVCSSBkZXZpY2UuCiAgKiBAdWJpOiBVQkkgZGV2aWNlIGRlc2NyaXB0aW9uIG9iamVjdAorICogQHJlZjogc2V0IHRvICUxIG9uIGV4aXQgaW4gY2FzZSBvZiBmYWlsdXJlIGlmIGEgcmVmZXJlbmNlIHRvIEB1YmktPmRldiB3YXMKKyAqICAgICAgIHRha2VuLCBvdGhlcndpc2Ugc2V0IHRvICUwCisgKgorICogVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB2YXJpb3VzIHVzZXIgaW50ZXJmYWNlcyBmb3IgYW4gVUJJIGRldmljZS4gSWYgdGhlCisgKiBpbml0aWFsaXphdGlvbiBmYWlscyBhdCBhbiBlYXJseSBzdGFnZSwgdGhpcyBmdW5jdGlvbiBmcmVlcyBhbGwgdGhlCisgKiByZXNvdXJjZXMgaXQgYWxsb2NhdGVkLCByZXR1cm5zIGFuIGVycm9yLCBhbmQgQHJlZiBpcyBzZXQgdG8gJTAuIEhvd2V2ZXIsCisgKiBpZiB0aGUgaW5pdGlhbGl6YXRpb24gZmFpbHMgYWZ0ZXIgdGhlIFVCSSBkZXZpY2Ugd2FzIHJlZ2lzdGVyZWQgaW4gdGhlCisgKiBkcml2ZXIgY29yZSBzdWJzeXN0ZW0sIHRoaXMgZnVuY3Rpb24gdGFrZXMgYSByZWZlcmVuY2UgdG8gQHViaS0+ZGV2LCBiZWNhdXNlCisgKiBvdGhlcndpc2UgdGhlIHJlbGVhc2UgZnVuY3Rpb24gKCdkZXZfcmVsZWFzZSgpJykgd291bGQgZnJlZSB3aG9sZSBAdWJpCisgKiBvYmplY3QuIFRoZSBAcmVmIGFyZ3VtZW50IGlzIHNldCB0byAlMSBpbiB0aGlzIGNhc2UuIFRoZSBjYWxsZXIgaGFzIHRvIHB1dAorICogdGhpcyByZWZlcmVuY2UuCiAgKgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gaW4gY2FzZSBvZiBzdWNjZXNzIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaW4KLSAqIGNhc2Ugb2YgZmFpbHVyZS4gTm90ZSwgdGhpcyBmdW5jdGlvbiBkZXN0cm95cyBhbGwgdm9sdW1lcyBpZiBpdCBmYWlscy4KKyAqIGNhc2Ugb2YgZmFpbHVyZS4KICAqLwotc3RhdGljIGludCB1aWZfaW5pdChzdHJ1Y3QgdWJpX2RldmljZSAqdWJpKQorc3RhdGljIGludCB1aWZfaW5pdChzdHJ1Y3QgdWJpX2RldmljZSAqdWJpLCBpbnQgKnJlZikKIHsKIAlpbnQgaSwgZXJyOwogCWRldl90IGRldjsKIAorCSpyZWYgPSAwOwogCXNwcmludGYodWJpLT51YmlfbmFtZSwgVUJJX05BTUVfU1RSICIlZCIsIHViaS0+dWJpX251bSk7CiAKIAkvKgpAQCAtNTA0LDcgKzUwMyw3IEBACiAJCWdvdG8gb3V0X3VucmVnOwogCX0KIAotCWVyciA9IHViaV9zeXNmc19pbml0KHViaSk7CisJZXJyID0gdWJpX3N5c2ZzX2luaXQodWJpLCByZWYpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3N5c2ZzOwogCkBAIC01MjIsNiArNTIxLDggQEAKIG91dF92b2x1bWVzOgogCWtpbGxfdm9sdW1lcyh1YmkpOwogb3V0X3N5c2ZzOgorCWlmICgqcmVmKQorCQlnZXRfZGV2aWNlKCZ1YmktPmRldik7CiAJdWJpX3N5c2ZzX2Nsb3NlKHViaSk7CiAJY2Rldl9kZWwoJnViaS0+Y2Rldik7CiBvdXRfdW5yZWc6CkBAIC04NzUsNyArODc2LDcgQEAKIGludCB1YmlfYXR0YWNoX210ZF9kZXYoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCB1YmlfbnVtLCBpbnQgdmlkX2hkcl9vZmZzZXQpCiB7CiAJc3RydWN0IHViaV9kZXZpY2UgKnViaTsKLQlpbnQgaSwgZXJyLCBkb19mcmVlID0gMTsKKwlpbnQgaSwgZXJyLCByZWYgPSAwOwogCiAJLyoKIAkgKiBDaGVjayBpZiB3ZSBhbHJlYWR5IGhhdmUgdGhlIHNhbWUgTVREIGRldmljZSBhdHRhY2hlZC4KQEAgLTk3NSw5ICs5NzYsOSBAQAogCQkJZ290byBvdXRfZGV0YWNoOwogCX0KIAotCWVyciA9IHVpZl9pbml0KHViaSk7CisJZXJyID0gdWlmX2luaXQodWJpLCAmcmVmKTsKIAlpZiAoZXJyKQotCQlnb3RvIG91dF9ub2ZyZWU7CisJCWdvdG8gb3V0X2RldGFjaDsKIAogCXViaS0+Ymd0X3RocmVhZCA9IGt0aHJlYWRfY3JlYXRlKHViaV90aHJlYWQsIHViaSwgdWJpLT5iZ3RfbmFtZSk7CiAJaWYgKElTX0VSUih1YmktPmJndF90aHJlYWQpKSB7CkBAIC0xMDI1LDEyICsxMDI2LDggQEAKIAogb3V0X3VpZjoKIAl1aWZfY2xvc2UodWJpKTsKLW91dF9ub2ZyZWU6Ci0JZG9fZnJlZSA9IDA7CiBvdXRfZGV0YWNoOgogCXViaV93bF9jbG9zZSh1YmkpOwotCWlmIChkb19mcmVlKQotCQlmcmVlX3VzZXJfdm9sdW1lcyh1YmkpOwogCWZyZWVfaW50ZXJuYWxfdm9sdW1lcyh1YmkpOwogCXZmcmVlKHViaS0+dnRibCk7CiBvdXRfZnJlZToKQEAgLTEwMzksNyArMTAzNiwxMCBAQAogI2lmZGVmIENPTkZJR19NVERfVUJJX0RFQlVHX1BBUkFOT0lECiAJdmZyZWUodWJpLT5kYmdfcGViX2J1Zik7CiAjZW5kaWYKLQlrZnJlZSh1YmkpOworCWlmIChyZWYpCisJCXB1dF9kZXZpY2UoJnViaS0+ZGV2KTsKKwllbHNlCisJCWtmcmVlKHViaSk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMTA5Niw3ICsxMDk2LDcgQEAKIAogCS8qCiAJICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBkZXZpY2UgaW4gb3JkZXIgdG8gcHJldmVudCAnZGV2X3JlbGVhc2UoKScKLQkgKiBmcm9tIGZyZWVpbmcgQHViaSBvYmplY3QuCisJICogZnJvbSBmcmVlaW5nIHRoZSBAdWJpIG9iamVjdC4KIAkgKi8KIAlnZXRfZGV2aWNlKCZ1YmktPmRldik7CiAKQEAgLTExMTYsMTMgKzExMTYsNTAgQEAKIH0KIAogLyoqCi0gKiBmaW5kX210ZF9kZXZpY2UgLSBvcGVuIGFuIE1URCBkZXZpY2UgYnkgaXRzIG5hbWUgb3IgbnVtYmVyLgotICogQG10ZF9kZXY6IG5hbWUgb3IgbnVtYmVyIG9mIHRoZSBkZXZpY2UKKyAqIG9wZW5fbXRkX2J5X2NoZGV2IC0gb3BlbiBhbiBNVEQgZGV2aWNlIGJ5IGl0cyBjaGFyYWN0ZXIgZGV2aWNlIG5vZGUgcGF0aC4KKyAqIEBtdGRfZGV2OiBNVEQgY2hhcmFjdGVyIGRldmljZSBub2RlIHBhdGgKKyAqCisgKiBUaGlzIGhlbHBlciBmdW5jdGlvbiBvcGVucyBhbiBNVEQgZGV2aWNlIGJ5IGl0cyBjaGFyYWN0ZXIgbm9kZSBkZXZpY2UgcGF0aC4KKyAqIFJldHVybnMgTVREIGRldmljZSBkZXNjcmlwdGlvbiBvYmplY3QgaW4gY2FzZSBvZiBzdWNjZXNzIGFuZCBhIG5lZ2F0aXZlCisgKiBlcnJvciBjb2RlIGluIGNhc2Ugb2YgZmFpbHVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBtdGRfaW5mbyAqIF9faW5pdCBvcGVuX210ZF9ieV9jaGRldihjb25zdCBjaGFyICptdGRfZGV2KQoreworCWludCBlcnIsIG1ham9yLCBtaW5vciwgbW9kZTsKKwlzdHJ1Y3QgcGF0aCBwYXRoOworCisJLyogUHJvYmFibHkgdGhpcyBpcyBhbiBNVEQgY2hhcmFjdGVyIGRldmljZSBub2RlIHBhdGggKi8KKwllcnIgPSBrZXJuX3BhdGgobXRkX2RldiwgTE9PS1VQX0ZPTExPVywgJnBhdGgpOworCWlmIChlcnIpCisJCXJldHVybiBFUlJfUFRSKGVycik7CisKKwkvKiBNVEQgZGV2aWNlIG51bWJlciBpcyBkZWZpbmVkIGJ5IHRoZSBtYWpvciAvIG1pbm9yIG51bWJlcnMgKi8KKwltYWpvciA9IGltYWpvcihwYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisJbWlub3IgPSBpbWlub3IocGF0aC5kZW50cnktPmRfaW5vZGUpOworCW1vZGUgPSBwYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlOworCXBhdGhfcHV0KCZwYXRoKTsKKwlpZiAobWFqb3IgIT0gTVREX0NIQVJfTUFKT1IgfHwgIVNfSVNDSFIobW9kZSkpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCisJaWYgKG1pbm9yICYgMSkKKwkJLyoKKwkJICogSnVzdCBkbyBub3QgdGhpbmsgdGhlICIvZGV2L210ZHJYIiBkZXZpY2VzIHN1cHBvcnQgaXMgbmVlZCwKKwkJICogc28gZG8gbm90IHN1cHBvcnQgdGhlbSB0byBhdm9pZCBkb2luZyBleHRyYSB3b3JrLgorCQkgKi8KKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisKKwlyZXR1cm4gZ2V0X210ZF9kZXZpY2UoTlVMTCwgbWlub3IgLyAyKTsKK30KKworLyoqCisgKiBvcGVuX210ZF9kZXZpY2UgLSBvcGVuIE1URCBkZXZpY2UgYnkgbmFtZSwgY2hhcmFjdGVyIGRldmljZSBwYXRoLCBvciBudW1iZXIuCisgKiBAbXRkX2RldjogbmFtZSwgY2hhcmFjdGVyIGRldmljZSBub2RlIHBhdGgsIG9yIE1URCBkZXZpY2UgZGV2aWNlIG51bWJlcgogICoKICAqIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gb3BlbiBhbmQgTVREIGRldmljZSBkZXNjcmliZWQgYnkgQG10ZF9kZXYgc3RyaW5nLAotICogd2hpY2ggaXMgZmlyc3QgdHJlYXRlZCBhcyBhbiBBU0NJSSBudW1iZXIsIGFuZCBpZiBpdCBpcyBub3QgdHJ1ZSwgaXQgaXMKLSAqIHRyZWF0ZWQgYXMgTVREIGRldmljZSBuYW1lLiBSZXR1cm5zIE1URCBkZXZpY2UgZGVzY3JpcHRpb24gb2JqZWN0IGluIGNhc2Ugb2YKLSAqIHN1Y2Nlc3MgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUuCisgKiB3aGljaCBpcyBmaXJzdCB0cmVhdGVkIGFzIEFTQ0lJIE1URCBkZXZpY2UgbnVtYmVyLCBhbmQgaWYgaXQgaXMgbm90IHRydWUsIGl0CisgKiBpcyB0cmVhdGVkIGFzIE1URCBkZXZpY2UgbmFtZSwgYW5kIGlmIHRoYXQgaXMgYWxzbyBub3QgdHJ1ZSwgaXQgaXMgdHJlYXRlZAorICogYXMgTVREIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSBwYXRoLiBSZXR1cm5zIE1URCBkZXZpY2UgZGVzY3JpcHRpb24gb2JqZWN0IGluCisgKiBjYXNlIG9mIHN1Y2Nlc3MgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpbiBjYXNlIG9mIGZhaWx1cmUuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgbXRkX2luZm8gKiBfX2luaXQgb3Blbl9tdGRfZGV2aWNlKGNvbnN0IGNoYXIgKm10ZF9kZXYpCiB7CkBAIC0xMTM3LDYgKzExNzQsOSBAQAogCQkgKiBNVEQgZGV2aWNlIG5hbWUuCiAJCSAqLwogCQltdGQgPSBnZXRfbXRkX2RldmljZV9ubShtdGRfZGV2KTsKKwkJaWYgKElTX0VSUihtdGQpICYmIFBUUl9FUlIobXRkKSA9PSAtRU5PREVWKQorCQkJLyogUHJvYmFibHkgdGhpcyBpcyBhbiBNVEQgY2hhcmFjdGVyIGRldmljZSBub2RlIHBhdGggKi8KKwkJCW10ZCA9IG9wZW5fbXRkX2J5X2NoZGV2KG10ZF9kZXYpOwogCX0gZWxzZQogCQltdGQgPSBnZXRfbXRkX2RldmljZShOVUxMLCBtdGRfbnVtKTsKIApAQCAtMTM1MiwxMyArMTM5MiwxNSBAQAogCiBtb2R1bGVfcGFyYW1fY2FsbChtdGQsIHViaV9tdGRfcGFyYW1fcGFyc2UsIE5VTEwsIE5VTEwsIDAwMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG10ZCwgIk1URCBkZXZpY2VzIHRvIGF0dGFjaC4gUGFyYW1ldGVyIGZvcm1hdDogIgotCQkgICAgICAibXRkPTxuYW1lfG51bT5bLDx2aWRfaGRyX29mZnM+XS5cbiIKKwkJICAgICAgIm10ZD08bmFtZXxudW18cGF0aD5bLDx2aWRfaGRyX29mZnM+XS5cbiIKIAkJICAgICAgIk11bHRpcGxlIFwibXRkXCIgcGFyYW1ldGVycyBtYXkgYmUgc3BlY2lmaWVkLlxuIgotCQkgICAgICAiTVREIGRldmljZXMgbWF5IGJlIHNwZWNpZmllZCBieSB0aGVpciBudW1iZXIgb3IgbmFtZS5cbiIKKwkJICAgICAgIk1URCBkZXZpY2VzIG1heSBiZSBzcGVjaWZpZWQgYnkgdGhlaXIgbnVtYmVyLCBuYW1lLCBvciAiCisJCSAgICAgICJwYXRoIHRvIHRoZSBNVEQgY2hhcmFjdGVyIGRldmljZSBub2RlLlxuIgogCQkgICAgICAiT3B0aW9uYWwgXCJ2aWRfaGRyX29mZnNcIiBwYXJhbWV0ZXIgc3BlY2lmaWVzIFVCSSBWSUQgIgotCQkgICAgICAiaGVhZGVyIHBvc2l0aW9uIGFuZCBkYXRhIHN0YXJ0aW5nIHBvc2l0aW9uIHRvIGJlIHVzZWQgIgotCQkgICAgICAiYnkgVUJJLlxuIgotCQkgICAgICAiRXhhbXBsZTogbXRkPWNvbnRlbnQsMTk4NCBtdGQ9NCAtIGF0dGFjaCBNVEQgZGV2aWNlIgorCQkgICAgICAiaGVhZGVyIHBvc2l0aW9uIHRvIGJlIHVzZWQgYnkgVUJJLlxuIgorCQkgICAgICAiRXhhbXBsZSAxOiBtdGQ9L2Rldi9tdGQwIC0gYXR0YWNoIE1URCBkZXZpY2UgIgorCQkgICAgICAiL2Rldi9tdGQwLlxuIgorCQkgICAgICAiRXhhbXBsZSAyOiBtdGQ9Y29udGVudCwxOTg0IG10ZD00IC0gYXR0YWNoIE1URCBkZXZpY2UgIgogCQkgICAgICAid2l0aCBuYW1lIFwiY29udGVudFwiIHVzaW5nIFZJRCBoZWFkZXIgb2Zmc2V0IDE5ODQsIGFuZCAiCiAJCSAgICAgICJNVEQgZGV2aWNlIG51bWJlciA0IHdpdGggZGVmYXVsdCBWSUQgaGVhZGVyIG9mZnNldC4iKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL2RlYnVnLmggYi9kcml2ZXJzL210ZC91YmkvZGVidWcuaAppbmRleCBmMzBiY2IzLi4xN2ExMDcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91YmkvZGVidWcuaAorKysgYi9kcml2ZXJzL210ZC91YmkvZGVidWcuaApAQCAtOTYsOCArOTYsMTEgQEAKIAogI2lmZGVmIENPTkZJR19NVERfVUJJX0RFQlVHX1BBUkFOT0lECiBpbnQgdWJpX2RiZ19jaGVja19hbGxfZmYoc3RydWN0IHViaV9kZXZpY2UgKnViaSwgaW50IHBudW0sIGludCBvZmZzZXQsIGludCBsZW4pOworaW50IHViaV9kYmdfY2hlY2tfd3JpdGUoc3RydWN0IHViaV9kZXZpY2UgKnViaSwgY29uc3Qgdm9pZCAqYnVmLCBpbnQgcG51bSwKKwkJCWludCBvZmZzZXQsIGludCBsZW4pOwogI2Vsc2UKICNkZWZpbmUgdWJpX2RiZ19jaGVja19hbGxfZmYodWJpLCBwbnVtLCBvZmZzZXQsIGxlbikgMAorI2RlZmluZSB1YmlfZGJnX2NoZWNrX3dyaXRlKHViaSwgYnVmLCBwbnVtLCBvZmZzZXQsIGxlbikgMAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTVREX1VCSV9ERUJVR19ESVNBQkxFX0JHVApAQCAtMTc2LDYgKzE3OSw3IEBACiAjZGVmaW5lIHViaV9kYmdfaXNfd3JpdGVfZmFpbHVyZSgpIDAKICNkZWZpbmUgdWJpX2RiZ19pc19lcmFzZV9mYWlsdXJlKCkgMAogI2RlZmluZSB1YmlfZGJnX2NoZWNrX2FsbF9mZih1YmksIHBudW0sIG9mZnNldCwgbGVuKSAwCisjZGVmaW5lIHViaV9kYmdfY2hlY2tfd3JpdGUodWJpLCBidWYsIHBudW0sIG9mZnNldCwgbGVuKSAwCiAKICNlbmRpZiAvKiAhQ09ORklHX01URF9VQklfREVCVUcgKi8KICNlbmRpZiAvKiAhX19VQklfREVCVUdfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC91YmkvaW8uYyBiL2RyaXZlcnMvbXRkL3ViaS9pby5jCmluZGV4IDhhYTUxZTcuLmI0ZWNjODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9pby5jCisrKyBiL2RyaXZlcnMvbXRkL3ViaS9pby5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAogCWVyciA9IHBhcmFub2lkX2NoZWNrX25vdF9iYWQodWJpLCBwbnVtKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyID4gMCA/IC1FSU5WQUwgOiBlcnI7CisJCXJldHVybiBlcnI7CiAKIAlhZGRyID0gKGxvZmZfdClwbnVtICogdWJpLT5wZWJfc2l6ZSArIG9mZnNldDsKIHJldHJ5OgpAQCAtMjM2LDEyICsyMzYsMTIgQEAKIAogCWVyciA9IHBhcmFub2lkX2NoZWNrX25vdF9iYWQodWJpLCBwbnVtKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyID4gMCA/IC1FSU5WQUwgOiBlcnI7CisJCXJldHVybiBlcnI7CiAKIAkvKiBUaGUgYXJlYSB3ZSBhcmUgd3JpdGluZyB0byBoYXMgdG8gY29udGFpbiBhbGwgMHhGRiBieXRlcyAqLwogCWVyciA9IHViaV9kYmdfY2hlY2tfYWxsX2ZmKHViaSwgcG51bSwgb2Zmc2V0LCBsZW4pOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnIgPiAwID8gLUVJTlZBTCA6IGVycjsKKwkJcmV0dXJuIGVycjsKIAogCWlmIChvZmZzZXQgPj0gdWJpLT5sZWJfc3RhcnQpIHsKIAkJLyoKQEAgLTI1MCwxMCArMjUwLDEwIEBACiAJCSAqLwogCQllcnIgPSBwYXJhbm9pZF9jaGVja19wZWJfZWNfaGRyKHViaSwgcG51bSk7CiAJCWlmIChlcnIpCi0JCQlyZXR1cm4gZXJyID4gMCA/IC1FSU5WQUwgOiBlcnI7CisJCQlyZXR1cm4gZXJyOwogCQllcnIgPSBwYXJhbm9pZF9jaGVja19wZWJfdmlkX2hkcih1YmksIHBudW0pOwogCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVyciA+IDAgPyAtRUlOVkFMIDogZXJyOworCQkJcmV0dXJuIGVycjsKIAl9CiAKIAlpZiAodWJpX2RiZ19pc193cml0ZV9mYWlsdXJlKCkpIHsKQEAgLTI3Myw2ICsyNzMsMjEgQEAKIAl9IGVsc2UKIAkJdWJpX2Fzc2VydCh3cml0dGVuID09IGxlbik7CiAKKwlpZiAoIWVycikgeworCQllcnIgPSB1YmlfZGJnX2NoZWNrX3dyaXRlKHViaSwgYnVmLCBwbnVtLCBvZmZzZXQsIGxlbik7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCS8qCisJCSAqIFNpbmNlIHdlIGFsd2F5cyB3cml0ZSBzZXF1ZW50aWFsbHksIHRoZSByZXN0IG9mIHRoZSBQRUIgaGFzCisJCSAqIHRvIGNvbnRhaW4gb25seSAweEZGIGJ5dGVzLgorCQkgKi8KKwkJb2Zmc2V0ICs9IGxlbjsKKwkJbGVuID0gdWJpLT5wZWJfc2l6ZSAtIG9mZnNldDsKKwkJaWYgKGxlbikKKwkJCWVyciA9IHViaV9kYmdfY2hlY2tfYWxsX2ZmKHViaSwgcG51bSwgb2Zmc2V0LCBsZW4pOworCX0KKwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTM0OCw3ICszNjMsNyBAQAogCiAJZXJyID0gdWJpX2RiZ19jaGVja19hbGxfZmYodWJpLCBwbnVtLCAwLCB1YmktPnBlYl9zaXplKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyID4gMCA/IC1FSU5WQUwgOiBlcnI7CisJCXJldHVybiBlcnI7CiAKIAlpZiAodWJpX2RiZ19pc19lcmFzZV9mYWlsdXJlKCkgJiYgIWVycikgewogCQlkYmdfZXJyKCJjYW5ub3QgZXJhc2UgUEVCICVkIChlbXVsYXRlZCkiLCBwbnVtKTsKQEAgLTU0Miw3ICs1NTcsNyBAQAogCiAJZXJyID0gcGFyYW5vaWRfY2hlY2tfbm90X2JhZCh1YmksIHBudW0pOwogCWlmIChlcnIgIT0gMCkKLQkJcmV0dXJuIGVyciA+IDAgPyAtRUlOVkFMIDogZXJyOworCQlyZXR1cm4gZXJyOwogCiAJaWYgKHViaS0+cm9fbW9kZSkgewogCQl1YmlfZXJyKCJyZWFkLW9ubHkgbW9kZSIpOwpAQCAtODE5LDcgKzgzNCw3IEBACiAKIAllcnIgPSBwYXJhbm9pZF9jaGVja19lY19oZHIodWJpLCBwbnVtLCBlY19oZHIpOwogCWlmIChlcnIpCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gZXJyOwogCiAJZXJyID0gdWJpX2lvX3dyaXRlKHViaSwgZWNfaGRyLCBwbnVtLCAwLCB1YmktPmVjX2hkcl9hbHNpemUpOwogCXJldHVybiBlcnI7CkBAIC0xMDgzLDcgKzEwOTgsNyBAQAogCiAJZXJyID0gcGFyYW5vaWRfY2hlY2tfcGViX2VjX2hkcih1YmksIHBudW0pOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnIgPiAwID8gLUVJTlZBTCA6IGVycjsKKwkJcmV0dXJuIGVycjsKIAogCXZpZF9oZHItPm1hZ2ljID0gY3B1X3RvX2JlMzIoVUJJX1ZJRF9IRFJfTUFHSUMpOwogCXZpZF9oZHItPnZlcnNpb24gPSBVQklfVkVSU0lPTjsKQEAgLTEwOTIsNyArMTEwNyw3IEBACiAKIAllcnIgPSBwYXJhbm9pZF9jaGVja192aWRfaGRyKHViaSwgcG51bSwgdmlkX2hkcik7CiAJaWYgKGVycikKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBlcnI7CiAKIAlwID0gKGNoYXIgKil2aWRfaGRyIC0gdWJpLT52aWRfaGRyX3NoaWZ0OwogCWVyciA9IHViaV9pb193cml0ZSh1YmksIHAsIHBudW0sIHViaS0+dmlkX2hkcl9hbG9mZnNldCwKQEAgLTExMDcsOCArMTEyMiw4IEBACiAgKiBAdWJpOiBVQkkgZGV2aWNlIGRlc2NyaXB0aW9uIG9iamVjdAogICogQHBudW06IHBoeXNpY2FsIGVyYXNlYmxvY2sgbnVtYmVyIHRvIGNoZWNrCiAgKgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gaWYgdGhlIHBoeXNpY2FsIGVyYXNlYmxvY2sgaXMgZ29vZCwgYSBwb3NpdGl2ZQotICogbnVtYmVyIGlmIGl0IGlzIGJhZCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIGFuIGVycm9yIG9jY3VycmVkLgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gaWYgdGhlIHBoeXNpY2FsIGVyYXNlYmxvY2sgaXMgZ29vZCwgJS1FSU5WQUwgaWYKKyAqIGl0IGlzIGJhZCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIGFuIGVycm9yIG9jY3VycmVkLgogICovCiBzdGF0aWMgaW50IHBhcmFub2lkX2NoZWNrX25vdF9iYWQoY29uc3Qgc3RydWN0IHViaV9kZXZpY2UgKnViaSwgaW50IHBudW0pCiB7CkBAIC0xMTIwLDcgKzExMzUsNyBAQAogCiAJdWJpX2VycigicGFyYW5vaWQgY2hlY2sgZmFpbGVkIGZvciBQRUIgJWQiLCBwbnVtKTsKIAl1YmlfZGJnX2R1bXBfc3RhY2soKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiBlcnIgPiAwID8gLUVJTlZBTCA6IGVycjsKIH0KIAogLyoqCkBAIC0xMTMwLDcgKzExNDUsNyBAQAogICogQGVjX2hkcjogdGhlIGVyYXNlIGNvdW50ZXIgaGVhZGVyIHRvIGNoZWNrCiAgKgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gaWYgdGhlIGVyYXNlIGNvdW50ZXIgaGVhZGVyIGNvbnRhaW5zIHZhbGlkCi0gKiB2YWx1ZXMsIGFuZCAlMSBpZiBub3QuCisgKiB2YWx1ZXMsIGFuZCAlLUVJTlZBTCBpZiBub3QuCiAgKi8KIHN0YXRpYyBpbnQgcGFyYW5vaWRfY2hlY2tfZWNfaGRyKGNvbnN0IHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIGludCBwbnVtLAogCQkJCSBjb25zdCBzdHJ1Y3QgdWJpX2VjX2hkciAqZWNfaGRyKQpAQCAtMTE1Niw3ICsxMTcxLDcgQEAKIGZhaWw6CiAJdWJpX2RiZ19kdW1wX2VjX2hkcihlY19oZHIpOwogCXViaV9kYmdfZHVtcF9zdGFjaygpOwotCXJldHVybiAxOworCXJldHVybiAtRUlOVkFMOwogfQogCiAvKioKQEAgLTExNjQsOCArMTE3OSw4IEBACiAgKiBAdWJpOiBVQkkgZGV2aWNlIGRlc2NyaXB0aW9uIG9iamVjdAogICogQHBudW06IHRoZSBwaHlzaWNhbCBlcmFzZWJsb2NrIG51bWJlciB0byBjaGVjawogICoKLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGlmIHRoZSBlcmFzZSBjb3VudGVyIGhlYWRlciBpcyBhbGwgcmlnaHQsICUxIGlmCi0gKiBub3QsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpZiB0aGUgZXJhc2UgY291bnRlciBoZWFkZXIgaXMgYWxsIHJpZ2h0IGFuZCBhbmQKKyAqIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiBub3Qgb3IgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCiAgKi8KIHN0YXRpYyBpbnQgcGFyYW5vaWRfY2hlY2tfcGViX2VjX2hkcihjb25zdCBzdHJ1Y3QgdWJpX2RldmljZSAqdWJpLCBpbnQgcG51bSkKIHsKQEAgLTExODgsNyArMTIwMyw3IEBACiAJCXViaV9lcnIoInBhcmFub2lkIGNoZWNrIGZhaWxlZCBmb3IgUEVCICVkIiwgcG51bSk7CiAJCXViaV9kYmdfZHVtcF9lY19oZHIoZWNfaGRyKTsKIAkJdWJpX2RiZ19kdW1wX3N0YWNrKCk7Ci0JCWVyciA9IDE7CisJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTEyMDYsNyArMTIyMSw3IEBACiAgKiBAdmlkX2hkcjogdGhlIHZvbHVtZSBpZGVudGlmaWVyIGhlYWRlciB0byBjaGVjawogICoKICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGlmIHRoZSB2b2x1bWUgaWRlbnRpZmllciBoZWFkZXIgaXMgYWxsIHJpZ2h0LCBhbmQKLSAqICUxIGlmIG5vdC4KKyAqICUtRUlOVkFMIGlmIG5vdC4KICAqLwogc3RhdGljIGludCBwYXJhbm9pZF9jaGVja192aWRfaGRyKGNvbnN0IHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIGludCBwbnVtLAogCQkJCSAgY29uc3Qgc3RydWN0IHViaV92aWRfaGRyICp2aWRfaGRyKQpAQCAtMTIzMyw3ICsxMjQ4LDcgQEAKIAl1YmlfZXJyKCJwYXJhbm9pZCBjaGVjayBmYWlsZWQgZm9yIFBFQiAlZCIsIHBudW0pOwogCXViaV9kYmdfZHVtcF92aWRfaGRyKHZpZF9oZHIpOwogCXViaV9kYmdfZHVtcF9zdGFjaygpOwotCXJldHVybiAxOworCXJldHVybiAtRUlOVkFMOwogCiB9CiAKQEAgLTEyNDMsNyArMTI1OCw3IEBACiAgKiBAcG51bTogdGhlIHBoeXNpY2FsIGVyYXNlYmxvY2sgbnVtYmVyIHRvIGNoZWNrCiAgKgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gaWYgdGhlIHZvbHVtZSBpZGVudGlmaWVyIGhlYWRlciBpcyBhbGwgcmlnaHQsCi0gKiAlMSBpZiBub3QsIGFuZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgaWYgYW4gZXJyb3Igb2NjdXJyZWQuCisgKiBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIG5vdCBvciBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAqLwogc3RhdGljIGludCBwYXJhbm9pZF9jaGVja19wZWJfdmlkX2hkcihjb25zdCBzdHJ1Y3QgdWJpX2RldmljZSAqdWJpLCBpbnQgcG51bSkKIHsKQEAgLTEyNzAsNyArMTI4NSw3IEBACiAJCXViaV9lcnIoInBhcmFub2lkIGNoZWNrIGZhaWxlZCBmb3IgUEVCICVkIiwgcG51bSk7CiAJCXViaV9kYmdfZHVtcF92aWRfaGRyKHZpZF9oZHIpOwogCQl1YmlfZGJnX2R1bXBfc3RhY2soKTsKLQkJZXJyID0gMTsKKwkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBleGl0OwogCX0KIApAQCAtMTI4Miw2ICsxMjk3LDYxIEBACiB9CiAKIC8qKgorICogdWJpX2RiZ19jaGVja193cml0ZSAtIG1ha2Ugc3VyZSB3cml0ZSBzdWNjZWVkZWQuCisgKiBAdWJpOiBVQkkgZGV2aWNlIGRlc2NyaXB0aW9uIG9iamVjdAorICogQGJ1ZjogYnVmZmVyIHdpdGggZGF0YSB3aGljaCB3ZXJlIHdyaXR0ZW4KKyAqIEBwbnVtOiBwaHlzaWNhbCBlcmFzZWJsb2NrIG51bWJlciB0aGUgZGF0YSB3ZXJlIHdyaXR0ZW4gdG8KKyAqIEBvZmZzZXQ6IG9mZnNldCB3aXRoaW4gdGhlIHBoeXNpY2FsIGVyYXNlYmxvY2sgdGhlIGRhdGEgd2VyZSB3cml0dGVuIHRvCisgKiBAbGVuOiBob3cgbWFueSBieXRlcyB3ZXJlIHdyaXR0ZW4KKyAqCisgKiBUaGlzIGZ1bmN0aW9ucyByZWFkcyBkYXRhIHdoaWNoIHdlcmUgcmVjZW50bHkgd3JpdHRlbiBhbmQgY29tcGFyZXMgaXQgd2l0aAorICogdGhlIG9yaWdpbmFsIGRhdGEgYnVmZmVyIC0gdGhlIGRhdGEgaGF2ZSB0byBtYXRjaC4gUmV0dXJucyB6ZXJvIGlmIHRoZSBkYXRhCisgKiBtYXRjaCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIG5vdCBvciBpbiBjYXNlIG9mIGZhaWx1cmUuCisgKi8KK2ludCB1YmlfZGJnX2NoZWNrX3dyaXRlKHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIGNvbnN0IHZvaWQgKmJ1ZiwgaW50IHBudW0sCisJCQlpbnQgb2Zmc2V0LCBpbnQgbGVuKQoreworCWludCBlcnIsIGk7CisKKwltdXRleF9sb2NrKCZ1YmktPmRiZ19idWZfbXV0ZXgpOworCWVyciA9IHViaV9pb19yZWFkKHViaSwgdWJpLT5kYmdfcGViX2J1ZiwgcG51bSwgb2Zmc2V0LCBsZW4pOworCWlmIChlcnIpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQl1aW50OF90IGMgPSAoKHVpbnQ4X3QgKilidWYpW2ldOworCQl1aW50OF90IGMxID0gKCh1aW50OF90ICopdWJpLT5kYmdfcGViX2J1ZilbaV07CisJCWludCBkdW1wX2xlbjsKKworCQlpZiAoYyA9PSBjMSkKKwkJCWNvbnRpbnVlOworCisJCXViaV9lcnIoInBhcmFub2lkIGNoZWNrIGZhaWxlZCBmb3IgUEVCICVkOiVkLCBsZW4gJWQiLAorCQkJcG51bSwgb2Zmc2V0LCBsZW4pOworCQl1YmlfbXNnKCJkYXRhIGRpZmZlciBhdCBwb3NpdGlvbiAlZCIsIGkpOworCQlkdW1wX2xlbiA9IG1heF90KGludCwgMTI4LCBsZW4gLSBpKTsKKwkJdWJpX21zZygiaGV4IGR1bXAgb2YgdGhlIG9yaWdpbmFsIGJ1ZmZlciBmcm9tICVkIHRvICVkIiwKKwkJCWksIGkgKyBkdW1wX2xlbik7CisJCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICIiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIDMyLCAxLAorCQkJICAgICAgIGJ1ZiArIGksIGR1bXBfbGVuLCAxKTsKKwkJdWJpX21zZygiaGV4IGR1bXAgb2YgdGhlIHJlYWQgYnVmZmVyIGZyb20gJWQgdG8gJWQiLAorCQkJaSwgaSArIGR1bXBfbGVuKTsKKwkJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgIiIsIERVTVBfUFJFRklYX09GRlNFVCwgMzIsIDEsCisJCQkgICAgICAgdWJpLT5kYmdfcGViX2J1ZiArIGksIGR1bXBfbGVuLCAxKTsKKwkJdWJpX2RiZ19kdW1wX3N0YWNrKCk7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0X3VubG9jazsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ1YmktPmRiZ19idWZfbXV0ZXgpOworCisJcmV0dXJuIDA7CisKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZ1YmktPmRiZ19idWZfbXV0ZXgpOworCXJldHVybiBlcnI7Cit9CisKKy8qKgogICogdWJpX2RiZ19jaGVja19hbGxfZmYgLSBjaGVjayB0aGF0IGEgcmVnaW9uIG9mIGZsYXNoIGlzIGVtcHR5LgogICogQHViaTogVUJJIGRldmljZSBkZXNjcmlwdGlvbiBvYmplY3QKICAqIEBwbnVtOiB0aGUgcGh5c2ljYWwgZXJhc2VibG9jayBudW1iZXIgdG8gY2hlY2sKQEAgLTEyODksOCArMTM1OSw4IEBACiAgKiBAbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSByZWdpb24gdG8gY2hlY2sKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpZiBvbmx5IDB4RkYgYnl0ZXMgYXJlIHByZXNlbnQgYXQgb2Zmc2V0Ci0gKiBAb2Zmc2V0IG9mIHRoZSBwaHlzaWNhbCBlcmFzZWJsb2NrIEBwbnVtLCAlMSBpZiBub3QsIGFuZCBhIG5lZ2F0aXZlIGVycm9yCi0gKiBjb2RlIGlmIGFuIGVycm9yIG9jY3VycmVkLgorICogQG9mZnNldCBvZiB0aGUgcGh5c2ljYWwgZXJhc2VibG9jayBAcG51bSwgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiBub3QKKyAqIG9yIGlmIGFuIGVycm9yIG9jY3VycmVkLgogICovCiBpbnQgdWJpX2RiZ19jaGVja19hbGxfZmYoc3RydWN0IHViaV9kZXZpY2UgKnViaSwgaW50IHBudW0sIGludCBvZmZzZXQsIGludCBsZW4pCiB7CkBAIC0xMzIxLDcgKzEzOTEsNyBAQAogCXViaV9tc2coImhleCBkdW1wIG9mIHRoZSAlZC0lZCByZWdpb24iLCBvZmZzZXQsIG9mZnNldCArIGxlbik7CiAJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgIiIsIERVTVBfUFJFRklYX09GRlNFVCwgMzIsIDEsCiAJCSAgICAgICB1YmktPmRiZ19wZWJfYnVmLCBsZW4sIDEpOwotCWVyciA9IDE7CisJZXJyID0gLUVJTlZBTDsKIGVycm9yOgogCXViaV9kYmdfZHVtcF9zdGFjaygpOwogCW11dGV4X3VubG9jaygmdWJpLT5kYmdfYnVmX211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMgYi9kcml2ZXJzL210ZC91Ymkvc2Nhbi5jCmluZGV4IDkwYWY2MWEuLjU5NDE4NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL3ViaS9zY2FuLmMKKysrIGIvZHJpdmVycy9tdGQvdWJpL3NjYW4uYwpAQCAtOTc0LDExICs5NzQsOCBAQAogCQkJc2ViLT5lYyA9IHNpLT5tZWFuX2VjOwogCiAJZXJyID0gcGFyYW5vaWRfY2hlY2tfc2kodWJpLCBzaSk7Ci0JaWYgKGVycikgewotCQlpZiAoZXJyID4gMCkKLQkJCWVyciA9IC1FSU5WQUw7CisJaWYgKGVycikKIAkJZ290byBvdXRfdmlkaDsKLQl9CiAKIAl1YmlfZnJlZV92aWRfaGRyKHViaSwgdmlkaCk7CiAJa2ZyZWUoZWNoKTsKQEAgLTEwODYsOCArMTA4Myw4IEBACiAgKiBAdWJpOiBVQkkgZGV2aWNlIGRlc2NyaXB0aW9uIG9iamVjdAogICogQHNpOiBzY2FubmluZyBpbmZvcm1hdGlvbgogICoKLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGlmIHRoZSBzY2FubmluZyBpbmZvcm1hdGlvbiBpcyBhbGwgcmlnaHQsICUxIGlmCi0gKiBub3QgYW5kIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBpZiBhbiBlcnJvciBvY2N1cnJlZC4KKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGlmIHRoZSBzY2FubmluZyBpbmZvcm1hdGlvbiBpcyBhbGwgcmlnaHQsIGFuZCBhCisgKiBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIG5vdCBvciBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAqLwogc3RhdGljIGludCBwYXJhbm9pZF9jaGVja19zaShzdHJ1Y3QgdWJpX2RldmljZSAqdWJpLCBzdHJ1Y3QgdWJpX3NjYW5faW5mbyAqc2kpCiB7CkBAIC0xMzQ2LDcgKzEzNDMsNyBAQAogCiBvdXQ6CiAJdWJpX2RiZ19kdW1wX3N0YWNrKCk7Ci0JcmV0dXJuIDE7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKICNlbmRpZiAvKiBDT05GSUdfTVREX1VCSV9ERUJVR19QQVJBTk9JRCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvdWJpL3dsLmMgYi9kcml2ZXJzL210ZC91Ymkvd2wuYwppbmRleCA2MDBjNzIyLi5mNjRkZGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC91Ymkvd2wuYworKysgYi9kcml2ZXJzL210ZC91Ymkvd2wuYwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAJCQkJICAgdWJpLT5wZWJfc2l6ZSAtIHViaS0+dmlkX2hkcl9hbG9mZnNldCk7CiAJaWYgKGVycikgewogCQl1YmlfZXJyKCJuZXcgUEVCICVkIGRvZXMgbm90IGNvbnRhaW4gYWxsIDB4RkYgYnl0ZXMiLCBlLT5wbnVtKTsKLQkJcmV0dXJuIGVyciA+IDAgPyAtRUlOVkFMIDogZXJyOworCQlyZXR1cm4gZXJyOwogCX0KIAogCXJldHVybiBlLT5wbnVtOwpAQCAtNTEzLDcgKzUxMyw3IEBACiAJZGJnX3dsKCJlcmFzZSBQRUIgJWQsIG9sZCBFQyAlbGx1IiwgZS0+cG51bSwgZWMpOwogCiAJZXJyID0gcGFyYW5vaWRfY2hlY2tfZWModWJpLCBlLT5wbnVtLCBlLT5lYyk7Ci0JaWYgKGVyciA+IDApCisJaWYgKGVycikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAllY19oZHIgPSBremFsbG9jKHViaS0+ZWNfaGRyX2Fsc2l6ZSwgR0ZQX05PRlMpOwpAQCAtMTU3Miw4ICsxNTcyLDcgQEAKICAqIEBlYzogdGhlIGVyYXNlIGNvdW50ZXIgdG8gY2hlY2sKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpZiB0aGUgZXJhc2UgY291bnRlciBvZiBwaHlzaWNhbCBlcmFzZWJsb2NrIEBwbnVtCi0gKiBpcyBlcXVpdmFsZW50IHRvIEBlYywgJTEgaWYgbm90LCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIGFuIGVycm9yCi0gKiBvY2N1cnJlZC4KKyAqIGlzIGVxdWl2YWxlbnQgdG8gQGVjLCBhbmQgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIG5vdCBvciBpZiBhbiBlcnJvciBvY2N1cnJlZC4KICAqLwogc3RhdGljIGludCBwYXJhbm9pZF9jaGVja19lYyhzdHJ1Y3QgdWJpX2RldmljZSAqdWJpLCBpbnQgcG51bSwgaW50IGVjKQogewpAQCAtMTYxMSw4ICsxNjEwLDggQEAKICAqIEBlOiB0aGUgd2Vhci1sZXZlbGluZyBlbnRyeSB0byBjaGVjawogICogQHJvb3Q6IHRoZSByb290IG9mIHRoZSB0cmVlCiAgKgotICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHplcm8gaWYgQGUgaXMgaW4gdGhlIEByb290IFJCLXRyZWUgYW5kICUxIGlmIGl0IGlzCi0gKiBub3QuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpZiBAZSBpcyBpbiB0aGUgQHJvb3QgUkItdHJlZSBhbmQgJS1FSU5WQUwgaWYgaXQKKyAqIGlzIG5vdC4KICAqLwogc3RhdGljIGludCBwYXJhbm9pZF9jaGVja19pbl93bF90cmVlKHN0cnVjdCB1Ymlfd2xfZW50cnkgKmUsCiAJCQkJICAgICBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkKQEAgLTE2MjMsNyArMTYyMiw3IEBACiAJdWJpX2VycigicGFyYW5vaWQgY2hlY2sgZmFpbGVkIGZvciBQRUIgJWQsIEVDICVkLCBSQi10cmVlICVwICIsCiAJCWUtPnBudW0sIGUtPmVjLCByb290KTsKIAl1YmlfZGJnX2R1bXBfc3RhY2soKTsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogLyoqCkBAIC0xNjMyLDcgKzE2MzEsNyBAQAogICogQHViaTogVUJJIGRldmljZSBkZXNjcmlwdGlvbiBvYmplY3QKICAqIEBlOiB0aGUgd2Vhci1sZXZlbGluZyBlbnRyeSB0byBjaGVjawogICoKLSAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB6ZXJvIGlmIEBlIGlzIGluIEB1YmktPnBxIGFuZCAlMSBpZiBpdCBpcyBub3QuCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybyBpZiBAZSBpcyBpbiBAdWJpLT5wcSBhbmQgJS1FSU5WQUwgaWYgaXQgaXMgbm90LgogICovCiBzdGF0aWMgaW50IHBhcmFub2lkX2NoZWNrX2luX3BxKHN0cnVjdCB1YmlfZGV2aWNlICp1YmksIHN0cnVjdCB1Ymlfd2xfZW50cnkgKmUpCiB7CkBAIC0xNjQ3LDYgKzE2NDYsNiBAQAogCXViaV9lcnIoInBhcmFub2lkIGNoZWNrIGZhaWxlZCBmb3IgUEVCICVkLCBFQyAlZCwgUHJvdGVjdCBxdWV1ZSIsCiAJCWUtPnBudW0sIGUtPmVjKTsKIAl1YmlfZGJnX2R1bXBfc3RhY2soKTsKLQlyZXR1cm4gMTsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KICNlbmRpZiAvKiBDT05GSUdfTVREX1VCSV9ERUJVR19QQVJBTk9JRCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDEuYyBiL2RyaXZlcnMvbmV0LzNjNTAxLmMKaW5kZXggNGQ0Y2FkMy4uYjZkZTdiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDEuYworKysgYi9kcml2ZXJzL25ldC8zYzUwMS5jCkBAIC04MTIsNyArODEyLDcgQEAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCW91dGIoUlhfUFJPTSwgUlhfQ01EKTsKIAkJaW5iKFJYX1NUQVRVUyk7Ci0JfSBlbHNlIGlmIChkZXYtPm1jX2xpc3QgfHwgZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgeworCX0gZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpIHx8IGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKIAkJLyogTXVsdGljYXN0IG9yIGFsbCBtdWx0aWNhc3QgaXMgdGhlIHNhbWUgKi8KIAkJb3V0YihSWF9NVUxULCBSWF9DTUQpOwogCQlpbmIoUlhfU1RBVFVTKTsJCS8qIENsZWFyIHN0YXR1cy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzNjNTA1LmMgYi9kcml2ZXJzL25ldC8zYzUwNS5jCmluZGV4IDkyNTdkN2MuLjA0YjViYmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzNjNTA1LmMKKysrIGIvZHJpdmVycy9uZXQvM2M1MDUuYwpAQCAtMTIxNiw3ICsxMjE2LDcgQEAKIHN0YXRpYyB2b2lkIGVscF9zZXRfbWNfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWVscF9kZXZpY2UgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTEyMjksMTEgKzEyMjksMTAgQEAKIAkJLyogc2VuZCBhICJsb2FkIG11bHRpY2FzdCBsaXN0IiBjb21tYW5kIHRvIHRoZSBib2FyZCwgbWF4IDEwIGFkZHJzL2NtZCAqLwogCQkvKiBpZiBudW1fYWRkcnM9PTAgdGhlIGxpc3Qgd2lsbCBiZSBjbGVhcmVkICovCiAJCWFkYXB0ZXItPnR4X3BjYi5jb21tYW5kID0gQ01EX0xPQURfTVVMVElDQVNUX0xJU1Q7Ci0JCWFkYXB0ZXItPnR4X3BjYi5sZW5ndGggPSA2ICogZGV2LT5tY19jb3VudDsKLQkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgewotCQkJbWVtY3B5KGFkYXB0ZXItPnR4X3BjYi5kYXRhLm11bHRpY2FzdFtpXSwgZG1pLT5kbWlfYWRkciwgNik7Ci0JCQlkbWkgPSBkbWktPm5leHQ7Ci0JCX0KKwkJYWRhcHRlci0+dHhfcGNiLmxlbmd0aCA9IDYgKiBuZXRkZXZfbWNfY291bnQoZGV2KTsKKwkJaSA9IDA7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KQorCQkJbWVtY3B5KGFkYXB0ZXItPnR4X3BjYi5kYXRhLm11bHRpY2FzdFtpKytdLCBkbWktPmRtaV9hZGRyLCA2KTsKIAkJYWRhcHRlci0+Z290W0NNRF9MT0FEX01VTFRJQ0FTVF9MSVNUXSA9IDA7CiAJCWlmICghc2VuZF9wY2IoZGV2LCAmYWRhcHRlci0+dHhfcGNiKSkKIAkJCXByX2VycigiJXM6IGNvdWxkbid0IHNlbmQgc2V0X211bHRpY2FzdCBjb21tYW5kXG4iLCBkZXYtPm5hbWUpOwpAQCAtMTI0NCw3ICsxMjQzLDcgQEAKIAkJCQlUSU1FT1VUX01TRyhfX0xJTkVfXyk7CiAJCQl9CiAJCX0KLQkJaWYgKGRldi0+bWNfY291bnQpCisJCWlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpCiAJCQlhZGFwdGVyLT50eF9wY2IuZGF0YS5jb25maWd1cmUgPSBOT19MT09QQkFDSyB8IFJFQ1ZfQlJPQUQgfCBSRUNWX01VTFRJOwogCQllbHNlCQkvKiBudW1fYWRkcnMgPT0gMCAqLwogCQkJYWRhcHRlci0+dHhfcGNiLmRhdGEuY29uZmlndXJlID0gTk9fTE9PUEJBQ0sgfCBSRUNWX0JST0FEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDkuYyBiL2RyaXZlcnMvbmV0LzNjNTA5LmMKaW5kZXggOWQ4NWVmYy4uOTAyNDM1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDkuYworKysgYi9kcml2ZXJzL25ldC8zYzUwOS5jCkBAIC0xMTExLDEyICsxMTExLDE0IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZWwzX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CisJaW50IG1jX2NvdW50ID0gbmV0ZGV2X21jX2NvdW50KGRldik7CiAKIAlpZiAoZWwzX2RlYnVnID4gMSkgewogCQlzdGF0aWMgaW50IG9sZDsKLQkJaWYgKG9sZCAhPSBkZXYtPm1jX2NvdW50KSB7Ci0JCQlvbGQgPSBkZXYtPm1jX2NvdW50OwotCQkJcHJfZGVidWcoIiVzOiBTZXR0aW5nIFJ4IG1vZGUgdG8gJWQgYWRkcmVzc2VzLlxuIiwgZGV2LT5uYW1lLCBkZXYtPm1jX2NvdW50KTsKKwkJaWYgKG9sZCAhPSBtY19jb3VudCkgeworCQkJb2xkID0gbWNfY291bnQ7CisJCQlwcl9kZWJ1ZygiJXM6IFNldHRpbmcgUnggbW9kZSB0byAlZCBhZGRyZXNzZXMuXG4iLAorCQkJCSBkZXYtPm5hbWUsIG1jX2NvdW50KTsKIAkJfQogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKQEAgLTExMjQsNyArMTEyNiw3IEBACiAJCW91dHcoU2V0UnhGaWx0ZXIgfCBSeFN0YXRpb24gfCBSeE11bHRpY2FzdCB8IFJ4QnJvYWRjYXN0IHwgUnhQcm9tLAogCQkJIGlvYWRkciArIEVMM19DTUQpOwogCX0KLQllbHNlIGlmIChkZXYtPm1jX2NvdW50IHx8IChkZXYtPmZsYWdzJklGRl9BTExNVUxUSSkpIHsKKwllbHNlIGlmIChtY19jb3VudCB8fCAoZGV2LT5mbGFncyZJRkZfQUxMTVVMVEkpKSB7CiAJCW91dHcoU2V0UnhGaWx0ZXIgfCBSeFN0YXRpb24gfCBSeE11bHRpY2FzdCB8IFJ4QnJvYWRjYXN0LCBpb2FkZHIgKyBFTDNfQ01EKTsKIAl9CiAJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MTUuYyBiL2RyaXZlcnMvbmV0LzNjNTE1LmMKaW5kZXggMDYzYjA0OS4uMWU4OThiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MTUuYworKysgYi9kcml2ZXJzL25ldC8zYzUxNS5jCkBAIC0xNTM2LDcgKzE1MzYsNyBAQAogCQkJcHJfZGVidWcoIiVzOiBTZXR0aW5nIHByb21pc2N1b3VzIG1vZGUuXG4iLAogCQkJICAgICAgIGRldi0+bmFtZSk7CiAJCW5ld19tb2RlID0gU2V0UnhGaWx0ZXIgfCBSeFN0YXRpb24gfCBSeE11bHRpY2FzdCB8IFJ4QnJvYWRjYXN0IHwgUnhQcm9tOwotCX0gZWxzZSBpZiAoKGRldi0+bWNfbGlzdCkgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisJfSBlbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikgfHwgZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgewogCQluZXdfbW9kZSA9IFNldFJ4RmlsdGVyIHwgUnhTdGF0aW9uIHwgUnhNdWx0aWNhc3QgfCBSeEJyb2FkY2FzdDsKIAl9IGVsc2UKIAkJbmV3X21vZGUgPSBTZXRSeEZpbHRlciB8IFJ4U3RhdGlvbiB8IFJ4QnJvYWRjYXN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MjMuYyBiL2RyaXZlcnMvbmV0LzNjNTIzLmMKaW5kZXggMjdkODBjYS4uYmVlZDRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MjMuYworKysgYi9kcml2ZXJzL25ldC8zYzUyMy5jCkBAIC02MjUsOCArNjI1LDggQEAKIAl2b2xhdGlsZSBzdHJ1Y3QgaWFzZXR1cF9jbWRfc3RydWN0ICppYXNfY21kOwogCXZvbGF0aWxlIHN0cnVjdCB0ZHJfY21kX3N0cnVjdCAqdGRyX2NtZDsKIAl2b2xhdGlsZSBzdHJ1Y3QgbWNzZXR1cF9jbWRfc3RydWN0ICptY19jbWQ7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7Ci0JaW50IG51bV9hZGRycyA9IGRldi0+bWNfY291bnQ7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CisJaW50IG51bV9hZGRycyA9IG5ldGRldl9tY19jb3VudChkZXYpOwogCiAJcHRyID0gKHZvaWQgKikgKChjaGFyICopIHAtPnNjYiArIHNpemVvZihzdHJ1Y3Qgc2NiX3N0cnVjdCkpOwogCkBAIC03NzEsNyArNzcxLDcgQEAKIAkgKiBNdWx0aWNhc3Qgc2V0dXAKIAkgKi8KIAotCWlmIChkZXYtPm1jX2NvdW50KSB7CisJaWYgKG51bV9hZGRycykgewogCQkvKiBJIGRvbid0IHVuZGVyc3RhbmQgdGhpczogZG8gd2UgcmVhbGx5IG5lZWQgbWVtb3J5IGFmdGVyIHRoZSBpbml0PyAqLwogCQlpbnQgbGVuID0gKChjaGFyICopIHAtPmlzY3AgLSAoY2hhciAqKSBwdHIgLSA4KSAvIDY7CiAJCWlmIChsZW4gPD0gMCkgewpAQCAtNzg3LDEwICs3ODcsOSBAQAogCQkJbWNfY21kLT5jbWRfY21kID0gQ01EX01DU0VUVVAgfCBDTURfTEFTVDsKIAkJCW1jX2NtZC0+Y21kX2xpbmsgPSAweGZmZmY7CiAJCQltY19jbWQtPm1jX2NudCA9IG51bV9hZGRycyAqIDY7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2FkZHJzOyBpKyspIHsKLQkJCQltZW1jcHkoKGNoYXIgKikgbWNfY21kLT5tY19saXN0W2ldLCBkbWktPmRtaV9hZGRyLCA2KTsKLQkJCQlkbWkgPSBkbWktPm5leHQ7Ci0JCQl9CisJCQlpID0gMDsKKwkJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KQorCQkJCW1lbWNweSgoY2hhciAqKSBtY19jbWQtPm1jX2xpc3RbaSsrXSwgZG1pLT5kbWlfYWRkciwgNik7CiAJCQlwLT5zY2ItPmNibF9vZmZzZXQgPSBtYWtlMTYobWNfY21kKTsKIAkJCXAtPnNjYi0+Y21kID0gQ1VDX1NUQVJUOwogCQkJZWxtY19pZF9hdHRuNTg2KCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzUyNy5jIGIvZHJpdmVycy9uZXQvM2M1MjcuYwppbmRleCAzNmM0MTkxLi41YzA3YjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzUyNy5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTI3LmMKQEAgLTE1MjYsMzIgKzE1MjYsMjkgQEAKIAogCWlmICgoZGV2LT5mbGFncyZJRkZfUFJPTUlTQykgfHwKIAkgICAgKGRldi0+ZmxhZ3MmSUZGX0FMTE1VTFRJKSB8fAotCSAgICBkZXYtPm1jX2NvdW50ID4gMTApCisJICAgIG5ldGRldl9tY19jb3VudChkZXYpID4gMTApCiAJCS8qIEVuYWJsZSBwcm9taXNjdW91cyBtb2RlICovCiAJCWZpbHQgfD0gMTsKLQllbHNlIGlmKGRldi0+bWNfY291bnQpCisJZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKQogCXsKIAkJdW5zaWduZWQgY2hhciBibG9ja1s2Ml07CiAJCXVuc2lnbmVkIGNoYXIgKmJwOwotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtYz1kZXYtPm1jX2xpc3Q7Ci0KLQkJaW50IGk7CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1jOwogCiAJCWlmKHJldHJ5PT0wKQogCQkJbHAtPm1jX2xpc3RfdmFsaWQgPSAwOwogCQlpZighbHAtPm1jX2xpc3RfdmFsaWQpCiAJCXsKIAkJCWJsb2NrWzFdPTA7Ci0JCQlibG9ja1swXT1kZXYtPm1jX2NvdW50OworCQkJYmxvY2tbMF09bmV0ZGV2X21jX2NvdW50KGRldik7CiAJCQlicD1ibG9jaysyOwogCi0JCQlmb3IoaT0wO2k8ZGV2LT5tY19jb3VudDtpKyspCi0JCQl7CisJCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWMsIGRldikgewogCQkJCW1lbWNweShicCwgZG1jLT5kbWlfYWRkciwgNik7CiAJCQkJYnArPTY7Ci0JCQkJZG1jPWRtYy0+bmV4dDsKIAkJCX0KLQkJCWlmKG1jMzJfY29tbWFuZF9ub3dhaXQoZGV2LCAyLCBibG9jaywgMis2KmRldi0+bWNfY291bnQpPT0tMSkKKwkJCWlmKG1jMzJfY29tbWFuZF9ub3dhaXQoZGV2LCAyLCBibG9jaywKKwkJCQkJICAgICAgIDIrNipuZXRkZXZfbWNfY291bnQoZGV2KSk9PS0xKQogCQkJewogCQkJCWxwLT5tY19yZWxvYWRfd2FpdCA9IDE7CiAJCQkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1OXguYyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKaW5kZXggMzlkYjBlOS4uZjk2NTQzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1OXguYworKysgYi9kcml2ZXJzL25ldC8zYzU5eC5jCkBAIC0zNzUsNyArMzc1LDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHZvcnRleF9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodm9ydGV4X3BjaV90YmwpID0gewogCXsgMHgxMEI3LCAweDU5MDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENIXzNDNTkwIH0sCiAJeyAweDEwQjcsIDB4NTkyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hfM0M1OTIgfSwKIAl7IDB4MTBCNywgMHg1OTcwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSF8zQzU5NyB9LApAQCAtMjk3MCw3ICsyOTcwLDcgQEAKIAkJaWYgKHZvcnRleF9kZWJ1ZyA+IDMpCiAJCQlwcl9ub3RpY2UoIiVzOiBTZXR0aW5nIHByb21pc2N1b3VzIG1vZGUuXG4iLCBkZXYtPm5hbWUpOwogCQluZXdfbW9kZSA9IFNldFJ4RmlsdGVyfFJ4U3RhdGlvbnxSeE11bHRpY2FzdHxSeEJyb2FkY2FzdHxSeFByb207Ci0JfSBlbHNlCWlmICgoZGV2LT5tY19saXN0KSAgfHwgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCX0gZWxzZQlpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpIHx8IGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKIAkJbmV3X21vZGUgPSBTZXRSeEZpbHRlcnxSeFN0YXRpb258UnhNdWx0aWNhc3R8UnhCcm9hZGNhc3Q7CiAJfSBlbHNlCiAJCW5ld19tb2RlID0gU2V0UnhGaWx0ZXIgfCBSeFN0YXRpb24gfCBSeEJyb2FkY2FzdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0Lzc5OTAuYyBiL2RyaXZlcnMvbmV0Lzc5OTAuYwppbmRleCBiMWU1NzY0Li40ZTlhNWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC83OTkwLmMKKysrIGIvZHJpdmVycy9uZXQvNzk5MC5jCkBAIC01OTUsOSArNTk1LDggQEAKICAgICAgICAgc3RydWN0IGxhbmNlX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKICAgICAgICAgdm9sYXRpbGUgc3RydWN0IGxhbmNlX2luaXRfYmxvY2sgKmliID0gbHAtPmluaXRfYmxvY2s7CiAgICAgICAgIHZvbGF0aWxlIHUxNiAqbWNhc3RfdGFibGUgPSAodTE2ICopJmliLT5maWx0ZXI7Ci0gICAgICAgIHN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pPWRldi0+bWNfbGlzdDsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKICAgICAgICAgY2hhciAqYWRkcnM7Ci0gICAgICAgIGludCBpOwogICAgICAgICB1MzIgY3JjOwogCiAgICAgICAgIC8qIHNldCBhbGwgbXVsdGljYXN0IGJpdHMgKi8KQEAgLTYxMSw5ICs2MTAsOCBAQAogICAgICAgICBpYi0+ZmlsdGVyIFsxXSA9IDA7CiAKICAgICAgICAgLyogQWRkIGFkZHJlc3NlcyAqLwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrKXsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogICAgICAgICAgICAgICAgIGFkZHJzID0gZG1pLT5kbWlfYWRkcjsKLSAgICAgICAgICAgICAgICBkbWkgICA9IGRtaS0+bmV4dDsKIAogICAgICAgICAgICAgICAgIC8qIG11bHRpY2FzdCBhZGRyZXNzPyAqLwogICAgICAgICAgICAgICAgIGlmICghKCphZGRycyAmIDEpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOWNwLmMgYi9kcml2ZXJzL25ldC84MTM5Y3AuYwppbmRleCAzZjQ1MmJjLi4zZDQ0MDZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MTM5Y3AuYworKysgYi9kcml2ZXJzL25ldC84MTM5Y3AuYwpAQCAtNDYsNiArNDYsOCBAQAogCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjZGVmaW5lIERSVl9OQU1FCQkiODEzOWNwIgogI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMyIKICNkZWZpbmUgRFJWX1JFTERBVEUJCSJNYXIgMjIsIDIwMDQiCkBAIC0xMDQsOCArMTA2LDYgQEAKIG1vZHVsZV9wYXJhbShtdWx0aWNhc3RfZmlsdGVyX2xpbWl0LCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyAobXVsdGljYXN0X2ZpbHRlcl9saW1pdCwgIjgxMzljcDogbWF4aW11bSBudW1iZXIgb2YgZmlsdGVyZWQgbXVsdGljYXN0IGFkZHJlc3NlcyIpOwogCi0jZGVmaW5lIFBGWAkJCURSVl9OQU1FICI6ICIKLQogI2RlZmluZSBDUF9ERUZfTVNHX0VOQUJMRQkoTkVUSUZfTVNHX0RSVgkJfCBcCiAJCQkJIE5FVElGX01TR19QUk9CRSAJfCBcCiAJCQkJIE5FVElGX01TR19MSU5LKQpAQCAtMzk0LDcgKzM5NCw3IEBACiBzdGF0aWMgaW50IGNwX3NldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJvbSwgdTggKmRhdGEpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3BfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGNwX3BjaV90YmwpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssCVBDSV9ERVZJQ0VfSURfUkVBTFRFS184MTM5KSwgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9UVFRFQ0gsCVBDSV9ERVZJQ0VfSURfVFRURUNIX01DMzIyKSwgfSwKIAl7IH0sCkBAIC00NzAsOSArNDcwLDggQEAKIHN0YXRpYyB2b2lkIGNwX3J4X2Vycl9hY2N0IChzdHJ1Y3QgY3BfcHJpdmF0ZSAqY3AsIHVuc2lnbmVkIHJ4X3RhaWwsCiAJCQkgICAgdTMyIHN0YXR1cywgdTMyIGxlbikKIHsKLQlpZiAobmV0aWZfbXNnX3J4X2VyciAoY3ApKQotCQlwcl9kZWJ1ZygiJXM6IHJ4IGVyciwgc2xvdCAlZCBzdGF0dXMgMHgleCBsZW4gJWRcbiIsCi0JCQljcC0+ZGV2LT5uYW1lLCByeF90YWlsLCBzdGF0dXMsIGxlbik7CisJbmV0aWZfZGJnKGNwLCByeF9lcnIsIGNwLT5kZXYsICJyeCBlcnIsIHNsb3QgJWQgc3RhdHVzIDB4JXggbGVuICVkXG4iLAorCQkgIHJ4X3RhaWwsIHN0YXR1cywgbGVuKTsKIAljcC0+ZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAlpZiAoc3RhdHVzICYgUnhFcnJGcmFtZSkKIAkJY3AtPmRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CkBAIC01NDUsOSArNTQ0LDggQEAKIAkJCWdvdG8gcnhfbmV4dDsKIAkJfQogCi0JCWlmIChuZXRpZl9tc2dfcnhfc3RhdHVzKGNwKSkKLQkJCXByX2RlYnVnKCIlczogcnggc2xvdCAlZCBzdGF0dXMgMHgleCBsZW4gJWRcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lLCByeF90YWlsLCBzdGF0dXMsIGxlbik7CisJCW5ldGlmX2RiZyhjcCwgcnhfc3RhdHVzLCBkZXYsICJyeCBzbG90ICVkIHN0YXR1cyAweCV4IGxlbiAlZFxuIiwKKwkJCSAgcnhfdGFpbCwgc3RhdHVzLCBsZW4pOwogCiAJCW5ld19za2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKGRldiwgYnVmbGVuKTsKIAkJaWYgKCFuZXdfc2tiKSB7CkBAIC02MjEsOSArNjE5LDggQEAKIAlpZiAoIXN0YXR1cyB8fCAoc3RhdHVzID09IDB4RkZGRikpCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCWlmIChuZXRpZl9tc2dfaW50cihjcCkpCi0JCXByX2RlYnVnKCIlczogaW50ciwgc3RhdHVzICUwNHggY21kICUwMnggY3BjbWQgJTA0eFxuIiwKLQkJICAgICAgICBkZXYtPm5hbWUsIHN0YXR1cywgY3ByOChDbWQpLCBjcHIxNihDcENtZCkpOworCW5ldGlmX2RiZyhjcCwgaW50ciwgZGV2LCAiaW50ciwgc3RhdHVzICUwNHggY21kICUwMnggY3BjbWQgJTA0eFxuIiwKKwkJICBzdGF0dXMsIGNwcjgoQ21kKSwgY3ByMTYoQ3BDbWQpKTsKIAogCWNwdzE2KEludHJTdGF0dXMsIHN0YXR1cyAmIH5jcF9yeF9pbnRyX21hc2spOwogCkBAIC02NTQsOCArNjUxLDggQEAKIAogCQlwY2lfcmVhZF9jb25maWdfd29yZChjcC0+cGRldiwgUENJX1NUQVRVUywgJnBjaV9zdGF0dXMpOwogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoY3AtPnBkZXYsIFBDSV9TVEFUVVMsIHBjaV9zdGF0dXMpOwotCQlwcl9lcnIoIiVzOiBQQ0kgYnVzIGVycm9yLCBzdGF0dXM9JTA0eCwgUENJIHN0YXR1cz0lMDR4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMsIHBjaV9zdGF0dXMpOworCQluZXRkZXZfZXJyKGRldiwgIlBDSSBidXMgZXJyb3IsIHN0YXR1cz0lMDR4LCBQQ0kgc3RhdHVzPSUwNHhcbiIsCisJCQkgICBzdGF0dXMsIHBjaV9zdGF0dXMpOwogCiAJCS8qIFRPRE86IHJlc2V0IGhhcmR3YXJlICovCiAJfQpAQCAtNzAwLDkgKzY5Nyw4IEBACiAKIAkJaWYgKHN0YXR1cyAmIExhc3RGcmFnKSB7CiAJCQlpZiAoc3RhdHVzICYgKFR4RXJyb3IgfCBUeEZJRk9VbmRlcikpIHsKLQkJCQlpZiAobmV0aWZfbXNnX3R4X2VycihjcCkpCi0JCQkJCXByX2RlYnVnKCIlczogdHggZXJyLCBzdGF0dXMgMHgleFxuIiwKLQkJCQkJICAgICAgIGNwLT5kZXYtPm5hbWUsIHN0YXR1cyk7CisJCQkJbmV0aWZfZGJnKGNwLCB0eF9lcnIsIGNwLT5kZXYsCisJCQkJCSAgInR4IGVyciwgc3RhdHVzIDB4JXhcbiIsIHN0YXR1cyk7CiAJCQkJY3AtPmRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQkJaWYgKHN0YXR1cyAmIFR4T1dDKQogCQkJCQljcC0+ZGV2LT5zdGF0cy50eF93aW5kb3dfZXJyb3JzKys7CkBAIC03MTcsOCArNzEzLDggQEAKIAkJCQkJKChzdGF0dXMgPj4gVHhDb2xDbnRTaGlmdCkgJiBUeENvbENudE1hc2spOwogCQkJCWNwLT5kZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKIAkJCQljcC0+ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKLQkJCQlpZiAobmV0aWZfbXNnX3R4X2RvbmUoY3ApKQotCQkJCQlwcl9kZWJ1ZygiJXM6IHR4IGRvbmUsIHNsb3QgJWRcbiIsIGNwLT5kZXYtPm5hbWUsIHR4X3RhaWwpOworCQkJCW5ldGlmX2RiZyhjcCwgdHhfZG9uZSwgY3AtPmRldiwKKwkJCQkJICAidHggZG9uZSwgc2xvdCAlZFxuIiwgdHhfdGFpbCk7CiAJCQl9CiAJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOwogCQl9CkBAIC03NTIsOCArNzQ4LDcgQEAKIAlpZiAoVFhfQlVGRlNfQVZBSUwoY3ApIDw9IChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSkpIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcC0+bG9jaywgaW50cl9mbGFncyk7Ci0JCXByX2VycihQRlggIiVzOiBCVUchIFR4IFJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCkBAIC04NzgsOSArODczLDggQEAKIAkJd21iKCk7CiAJfQogCWNwLT50eF9oZWFkID0gZW50cnk7Ci0JaWYgKG5ldGlmX21zZ190eF9xdWV1ZWQoY3ApKQotCQlwcl9kZWJ1ZygiJXM6IHR4IHF1ZXVlZCwgc2xvdCAlZCwgc2tibGVuICVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlbnRyeSwgc2tiLT5sZW4pOworCW5ldGlmX2RiZyhjcCwgdHhfcXVldWVkLCBjcC0+ZGV2LCAidHggcXVldWVkLCBzbG90ICVkLCBza2JsZW4gJWRcbiIsCisJCSAgZW50cnksIHNrYi0+bGVuKTsKIAlpZiAoVFhfQlVGRlNfQVZBSUwoY3ApIDw9IChNQVhfU0tCX0ZSQUdTICsgMSkpCiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIApAQCAtODk5LDcgKzg5Myw3IEBACiB7CiAJc3RydWN0IGNwX3ByaXZhdGUgKmNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1MzIgbWNfZmlsdGVyWzJdOwkvKiBNdWx0aWNhc3QgaGFzaCBmaWx0ZXIgKi8KLQlpbnQgaSwgcnhfbW9kZTsKKwlpbnQgcnhfbW9kZTsKIAl1MzIgdG1wOwogCiAJLyogTm90ZTogZG8gbm90IHJlb3JkZXIsIEdDQyBpcyBjbGV2ZXIgYWJvdXQgY29tbW9uIHN0YXRlbWVudHMuICovCkBAIC05MDksNyArOTAzLDcgQEAKIAkJICAgIEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE11bHRpY2FzdCB8IEFjY2VwdE15UGh5cyB8CiAJCSAgICBBY2NlcHRBbGxQaHlzOwogCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAweGZmZmZmZmZmOwotCX0gZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSB8fAorCX0gZWxzZSBpZiAoKG5ldGRldl9tY19jb3VudChkZXYpID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKIAkJICAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCS8qIFRvbyBtYW55IHRvIGZpbHRlciBwZXJmZWN0bHkgLS0gYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCQlyeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXVsdGljYXN0IHwgQWNjZXB0TXlQaHlzOwpAQCAtOTE4LDggKzkxMiw3IEBACiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwogCQlyeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXlQaHlzOwogCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAwOwotCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKLQkJICAgICBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQkJaW50IGJpdF9uciA9IGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgPj4gMjY7CiAKIAkJCW1jX2ZpbHRlcltiaXRfbnIgPj4gNV0gfD0gMSA8PCAoYml0X25yICYgMzEpOwpAQCAtOTkzLDcgKzk4Niw3IEBACiAJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEwKTsKIAl9CiAKLQlwcl9lcnIoIiVzOiBoYXJkd2FyZSByZXNldCB0aW1lb3V0XG4iLCBjcC0+ZGV2LT5uYW1lKTsKKwluZXRkZXZfZXJyKGNwLT5kZXYsICJoYXJkd2FyZSByZXNldCB0aW1lb3V0XG4iKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNwX3N0YXJ0X2h3IChzdHJ1Y3QgY3BfcHJpdmF0ZSAqY3ApCkBAIC0xMTYwLDggKzExNTMsNyBAQAogCXN0cnVjdCBjcF9wcml2YXRlICpjcCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHJjOwogCi0JaWYgKG5ldGlmX21zZ19pZnVwKGNwKSkKLQkJcHJfZGVidWcoIiVzOiBlbmFibGluZyBpbnRlcmZhY2VcbiIsIGRldi0+bmFtZSk7CisJbmV0aWZfZGJnKGNwLCBpZnVwLCBkZXYsICJlbmFibGluZyBpbnRlcmZhY2VcbiIpOwogCiAJcmMgPSBjcF9hbGxvY19yaW5ncyhjcCk7CiAJaWYgKHJjKQpAQCAtMTE5NSw4ICsxMTg3LDcgQEAKIAogCW5hcGlfZGlzYWJsZSgmY3AtPm5hcGkpOwogCi0JaWYgKG5ldGlmX21zZ19pZmRvd24oY3ApKQotCQlwcl9kZWJ1ZygiJXM6IGRpc2FibGluZyBpbnRlcmZhY2VcbiIsIGRldi0+bmFtZSk7CisJbmV0aWZfZGJnKGNwLCBpZmRvd24sIGRldiwgImRpc2FibGluZyBpbnRlcmZhY2VcbiIpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNwLT5sb2NrLCBmbGFncyk7CiAKQEAgLTEyMTksOSArMTIxMCw5IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmM7CiAKLQlwcl93YXJuaW5nKCIlczogVHJhbnNtaXQgdGltZW91dCwgc3RhdHVzICUyeCAlNHggJTR4ICU0eFxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBjcHI4KENtZCksIGNwcjE2KENwQ21kKSwKLQkgICAgICAgY3ByMTYoSW50clN0YXR1cyksIGNwcjE2KEludHJNYXNrKSk7CisJbmV0ZGV2X3dhcm4oZGV2LCAiVHJhbnNtaXQgdGltZW91dCwgc3RhdHVzICUyeCAlNHggJTR4ICU0eFxuIiwKKwkJICAgIGNwcjgoQ21kKSwgY3ByMTYoQ3BDbWQpLAorCQkgICAgY3ByMTYoSW50clN0YXR1cyksIGNwcjE2KEludHJNYXNrKSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3AtPmxvY2ssIGZsYWdzKTsKIApAQCAtMTg3NCw4ICsxODY1LDggQEAKIAlpZiAocGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfUkVBTFRFSyAmJgogCSAgICBwZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9SRUFMVEVLXzgxMzkgJiYgcGRldi0+cmV2aXNpb24gPCAweDIwKSB7CiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsCi0JCQkgICAiVGhpcyAoaWQgJTA0eDolMDR4IHJldiAlMDJ4KSBpcyBub3QgYW4gODEzOUMrIGNvbXBhdGlibGUgY2hpcCwgdXNlIDgxMzl0b29cbiIsCi0JCSAgICAgICAgICAgcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UsIHBkZXYtPnJldmlzaW9uKTsKKwkJCSAiVGhpcyAoaWQgJTA0eDolMDR4IHJldiAlMDJ4KSBpcyBub3QgYW4gODEzOUMrIGNvbXBhdGlibGUgY2hpcCwgdXNlIDgxMzl0b29cbiIsCisJCQkgcGRldi0+dmVuZG9yLCBwZGV2LT5kZXZpY2UsIHBkZXYtPnJldmlzaW9uKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xOTMzLDE0ICsxOTI0LDEzIEBACiAJCXJjID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKIAkJaWYgKHJjKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkJICAgIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmcuXG4iKTsKKwkJCQkiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCBhYm9ydGluZ1xuIik7CiAJCQlnb3RvIGVycl9vdXRfcmVzOwogCQl9CiAJCXJjID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOwogCQlpZiAocmMpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkgICAiTm8gdXNhYmxlIGNvbnNpc3RlbnQgRE1BIGNvbmZpZ3VyYXRpb24sICIKLQkJCSAgICAgICAgICAgImFib3J0aW5nLlxuIik7CisJCQkJIk5vIHVzYWJsZSBjb25zaXN0ZW50IERNQSBjb25maWd1cmF0aW9uLCBhYm9ydGluZ1xuIik7CiAJCQlnb3RvIGVycl9vdXRfcmVzOwogCQl9CiAJfQpAQCAtMTk1Miw3ICsxOTQyLDcgQEAKIAlpZiAoIXJlZ3MpIHsKIAkJcmMgPSAtRUlPOwogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgbWFwIFBDSSBNTUlPICglTHhAJUx4KVxuIiwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpYWRkcik7CiAJCWdvdG8gZXJyX291dF9yZXM7CiAJfQpAQCAtMTk5MCwxMSArMTk4MCw4IEBACiAJaWYgKHJjKQogCQlnb3RvIGVycl9vdXRfaW9tYXA7CiAKLQlwcl9pbmZvKCIlczogUlRMLTgxMzlDKyBhdCAweCVseCwgJXBNLCBJUlEgJWRcbiIsCi0JCWRldi0+bmFtZSwKLQkJZGV2LT5iYXNlX2FkZHIsCi0JCWRldi0+ZGV2X2FkZHIsCi0JCWRldi0+aXJxKTsKKwluZXRkZXZfaW5mbyhkZXYsICJSVEwtODEzOUMrIGF0IDB4JWx4LCAlcE0sIElSUSAlZFxuIiwKKwkJICAgIGRldi0+YmFzZV9hZGRyLCBkZXYtPmRldl9hZGRyLCBkZXYtPmlycSk7CiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvODEzOXRvby5jIGIvZHJpdmVycy9uZXQvODEzOXRvby5jCmluZGV4IDI1ZjczMzkuLmI0ZWZjOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0LzgxMzl0b28uYworKysgYi9kcml2ZXJzL25ldC84MTM5dG9vLmMKQEAgLTg5LDYgKzg5LDggQEAKIAogKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjZGVmaW5lIERSVl9OQU1FCSI4MTM5dG9vIgogI2RlZmluZSBEUlZfVkVSU0lPTgkiMC45LjI4IgogCkBAIC0xMTEsNyArMTEzLDYgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKICNkZWZpbmUgUlRMODEzOV9EUklWRVJfTkFNRSAgIERSVl9OQU1FICIgRmFzdCBFdGhlcm5ldCBkcml2ZXIgIiBEUlZfVkVSU0lPTgotI2RlZmluZSBQRlggRFJWX05BTUUgIjogIgogCiAvKiBEZWZhdWx0IE1lc3NhZ2UgbGV2ZWwgKi8KICNkZWZpbmUgUlRMODEzOV9ERUZfTVNHX0VOQUJMRSAgIChORVRJRl9NU0dfRFJWICAgfCBcCkBAIC0xMzAsOSArMTMxLDkgQEAKICMgIGRlZmluZSBhc3NlcnQoZXhwcikgZG8ge30gd2hpbGUgKDApCiAjZWxzZQogIyAgZGVmaW5lIGFzc2VydChleHByKSBcCi0gICAgICAgIGlmKHVubGlrZWx5KCEoZXhwcikpKSB7CQkJCSAgICAgICAgXAotICAgICAgICBwcl9lcnIoIkFzc2VydGlvbiBmYWlsZWQhICVzLCVzLCVzLGxpbmU9JWRcbiIsCVwKLQkjZXhwciwgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXyk7CQkJXAorICAgICAgICBpZiAodW5saWtlbHkoIShleHByKSkpIHsJCQkJXAorCQlwcl9lcnIoIkFzc2VydGlvbiBmYWlsZWQhICVzLCVzLCVzLGxpbmU9JWRcbiIsCVwKKwkJICAgICAgICNleHByLCBfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKTsJXAogICAgICAgICB9CiAjZW5kaWYKIApAQCAtMjMxLDcgKzIzMiw3IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydGw4MTM5X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShydGw4MTM5X3BjaV90YmwpID0gewogCXsweDEwZWMsIDB4ODEzOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUlRMODEzOSB9LAogCXsweDEwZWMsIDB4ODEzOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUlRMODEzOSB9LAogCXsweDExMTMsIDB4MTIxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUlRMODEzOSB9LApAQCAtOTU3LDcgKzk1OCw3IEBACiAJICAgIHBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1JFQUxURUtfODEzOSAmJgogCSAgICBwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IFBDSV9WRU5ET1JfSURfQVRIRVJPUyAmJgogCSAgICBwZGV2LT5zdWJzeXN0ZW1fZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfUkVBTFRFS184MTM5KSB7Ci0JCXByX2luZm8oIjgxMzl0b286IE9RTyBNb2RlbCAyIGRldGVjdGVkLiBGb3JjaW5nIFBJT1xuIik7CisJCXByX2luZm8oIk9RTyBNb2RlbCAyIGRldGVjdGVkLiBGb3JjaW5nIFBJT1xuIik7CiAJCXVzZV9pbyA9IDE7CiAJfQogCkBAIC0xMDEwLDIxICsxMDExLDE5IEBACiAJdHAtPm1paS5yZWdfbnVtX21hc2sgPSAweDFmOwogCiAJLyogZGV2IGlzIGZ1bGx5IHNldCB1cCBhbmQgcmVhZHkgdG8gdXNlIG5vdyAqLwotCXByX2RlYnVnKCJhYm91dCB0byByZWdpc3RlciBkZXZpY2UgbmFtZWQgJXMgKCVwKS4uLlxuIiwgZGV2LT5uYW1lLCBkZXYpOworCXByX2RlYnVnKCJhYm91dCB0byByZWdpc3RlciBkZXZpY2UgbmFtZWQgJXMgKCVwKS4uLlxuIiwKKwkJIGRldi0+bmFtZSwgZGV2KTsKIAlpID0gcmVnaXN0ZXJfbmV0ZGV2IChkZXYpOwogCWlmIChpKSBnb3RvIGVycl9vdXQ7CiAKIAlwY2lfc2V0X2RydmRhdGEgKHBkZXYsIGRldik7CiAKLQlwcl9pbmZvKCIlczogJXMgYXQgMHglbHgsICVwTSwgSVJRICVkXG4iLAotCQlkZXYtPm5hbWUsCi0JCWJvYXJkX2luZm9bZW50LT5kcml2ZXJfZGF0YV0ubmFtZSwKLQkJZGV2LT5iYXNlX2FkZHIsCi0JCWRldi0+ZGV2X2FkZHIsCi0JCWRldi0+aXJxKTsKKwluZXRkZXZfaW5mbyhkZXYsICIlcyBhdCAweCVseCwgJXBNLCBJUlEgJWRcbiIsCisJCSAgICBib2FyZF9pbmZvW2VudC0+ZHJpdmVyX2RhdGFdLm5hbWUsCisJCSAgICBkZXYtPmJhc2VfYWRkciwgZGV2LT5kZXZfYWRkciwgZGV2LT5pcnEpOwogCi0JcHJfZGVidWcoIiVzOiAgSWRlbnRpZmllZCA4MTM5IGNoaXAgdHlwZSAnJXMnXG4iLAotCQlkZXYtPm5hbWUsIHJ0bF9jaGlwX2luZm9bdHAtPmNoaXBzZXRdLm5hbWUpOworCW5ldGRldl9kYmcoZGV2LCAiSWRlbnRpZmllZCA4MTM5IGNoaXAgdHlwZSAnJXMnXG4iLAorCQkgICBydGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0XS5uYW1lKTsKIAogCS8qIEZpbmQgdGhlIGNvbm5lY3RlZCBNSUkgeGN2cnMuCiAJICAgRG9pbmcgdGhpcyBpbiBvcGVuKCkgd291bGQgYWxsb3cgZGV0ZWN0aW5nIGV4dGVybmFsIHhjdnJzIGxhdGVyLCBidXQKQEAgLTEwMzcsMTMgKzEwMzYsMTIgQEAKIAkJCWlmIChtaWlfc3RhdHVzICE9IDB4ZmZmZiAgJiYgIG1paV9zdGF0dXMgIT0gMHgwMDAwKSB7CiAJCQkJdTE2IGFkdmVydGlzaW5nID0gbWRpb19yZWFkKGRldiwgcGh5LCA0KTsKIAkJCQl0cC0+cGh5c1twaHlfaWR4KytdID0gcGh5OwotCQkJCXByX2luZm8oIiVzOiBNSUkgdHJhbnNjZWl2ZXIgJWQgc3RhdHVzIDB4JTQuNHggYWR2ZXJ0aXNpbmcgJTQuNHguXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIHBoeSwgbWlpX3N0YXR1cywgYWR2ZXJ0aXNpbmcpOworCQkJCW5ldGRldl9pbmZvKGRldiwgIk1JSSB0cmFuc2NlaXZlciAlZCBzdGF0dXMgMHglMDR4IGFkdmVydGlzaW5nICUwNHhcbiIsCisJCQkJCSAgICBwaHksIG1paV9zdGF0dXMsIGFkdmVydGlzaW5nKTsKIAkJCX0KIAkJfQogCQlpZiAocGh5X2lkeCA9PSAwKSB7Ci0JCQlwcl9pbmZvKCIlczogTm8gTUlJIHRyYW5zY2VpdmVycyBmb3VuZCEgQXNzdW1pbmcgU1lNIHRyYW5zY2VpdmVyLlxuIiwKLQkJCQkgICBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X2luZm8oZGV2LCAiTm8gTUlJIHRyYW5zY2VpdmVycyBmb3VuZCEgQXNzdW1pbmcgU1lNIHRyYW5zY2VpdmVyXG4iKTsKIAkJCXRwLT5waHlzWzBdID0gMzI7CiAJCX0KIAl9IGVsc2UKQEAgLTEwNjIsMTUgKzEwNjAsMTUgQEAKIAlpZiAoYm9hcmRfaWR4IDwgTUFYX1VOSVRTICAmJiAgZnVsbF9kdXBsZXhbYm9hcmRfaWR4XSA+IDApCiAJCXRwLT5taWkuZnVsbF9kdXBsZXggPSBmdWxsX2R1cGxleFtib2FyZF9pZHhdOwogCWlmICh0cC0+bWlpLmZ1bGxfZHVwbGV4KSB7Ci0JCXByX2luZm8oIiVzOiBNZWRpYSB0eXBlIGZvcmNlZCB0byBGdWxsIER1cGxleC5cbiIsIGRldi0+bmFtZSk7CisJCW5ldGRldl9pbmZvKGRldiwgIk1lZGlhIHR5cGUgZm9yY2VkIHRvIEZ1bGwgRHVwbGV4XG4iKTsKIAkJLyogQ2hhbmdpbmcgdGhlIE1JSS1hZHZlcnRpc2VkIG1lZGlhIGJlY2F1c2UgbWlnaHQgcHJldmVudAogCQkgICByZS1jb25uZWN0aW9uLiAqLwogCQl0cC0+bWlpLmZvcmNlX21lZGlhID0gMTsKIAl9CiAJaWYgKHRwLT5kZWZhdWx0X3BvcnQpIHsKLQkJcHJfaW5mbygiICBGb3JjaW5nICVkTWJwcyAlcy1kdXBsZXggb3BlcmF0aW9uLlxuIiwKLQkJCSAgIChvcHRpb24gJiAweDIwID8gMTAwIDogMTApLAotCQkJICAgKG9wdGlvbiAmIDB4MTAgPyAiZnVsbCIgOiAiaGFsZiIpKTsKKwkJbmV0ZGV2X2luZm8oZGV2LCAiICBGb3JjaW5nICVkTWJwcyAlcy1kdXBsZXggb3BlcmF0aW9uXG4iLAorCQkJICAgIChvcHRpb24gJiAweDIwID8gMTAwIDogMTApLAorCQkJICAgIChvcHRpb24gJiAweDEwID8gImZ1bGwiIDogImhhbGYiKSk7CiAJCW1kaW9fd3JpdGUoZGV2LCB0cC0+cGh5c1swXSwgMCwKIAkJCQkgICAoKG9wdGlvbiAmIDB4MjApID8gMHgyMDAwIDogMCkgfCAJLyogMTAwTWJwcz8gKi8KIAkJCQkgICAoKG9wdGlvbiAmIDB4MTApID8gMHgwMTAwIDogMCkpOyAvKiBGdWxsIGR1cGxleD8gKi8KQEAgLTEzMzAsMTIgKzEzMjgsMTIgQEAKIAlydGw4MTM5X2h3X3N0YXJ0IChkZXYpOwogCW5ldGlmX3N0YXJ0X3F1ZXVlIChkZXYpOwogCi0JaWYgKG5ldGlmX21zZ19pZnVwKHRwKSkKLQkJcHJfZGVidWcoIiVzOiBydGw4MTM5X29wZW4oKSBpb2FkZHIgJSNsbHggSVJRICVkIgotCQkJIiBHUCBQaW5zICUyLjJ4ICVzLWR1cGxleC5cbiIsIGRldi0+bmFtZSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0ICh0cC0+cGNpX2RldiwgMSksCi0JCQlkZXYtPmlycSwgUlRMX1I4IChNZWRpYVN0YXR1cyksCi0JCQl0cC0+bWlpLmZ1bGxfZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiKTsKKwluZXRpZl9kYmcodHAsIGlmdXAsIGRldiwKKwkJICAiJXMoKSBpb2FkZHIgJSNsbHggSVJRICVkIEdQIFBpbnMgJTAyeCAlcy1kdXBsZXhcbiIsCisJCSAgX19mdW5jX18sCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQgKHRwLT5wY2lfZGV2LCAxKSwKKwkJICBkZXYtPmlycSwgUlRMX1I4IChNZWRpYVN0YXR1cyksCisJCSAgdHAtPm1paS5mdWxsX2R1cGxleCA/ICJmdWxsIiA6ICJoYWxmIik7CiAKIAlydGw4MTM5X3N0YXJ0X3RocmVhZCh0cCk7CiAKQEAgLTEzOTMsNyArMTM5MSw3IEBACiAJCVJUTF9XOCAoQ29uZmlnMywgUlRMX1I4IChDb25maWczKSAmIH5DZmczX01hZ2ljKTsKIAl9CiAKLQlwcl9kZWJ1ZygiaW5pdCBidWZmZXIgYWRkcmVzc2VzXG4iKTsKKwluZXRkZXZfZGJnKGRldiwgImluaXQgYnVmZmVyIGFkZHJlc3Nlc1xuIik7CiAKIAkvKiBMb2NrIENvbmZpZ1swMTIzNF0gYW5kIEJNQ1IgcmVnaXN0ZXIgd3JpdGVzICovCiAJUlRMX1c4IChDZmc5MzQ2LCBDZmc5MzQ2X0xvY2spOwpAQCAtMTU1NSwxNCArMTU1MywxMSBAQAogCQkJdHAtPm1paS5mdWxsX2R1cGxleCA9IGR1cGxleDsKIAogCQkJaWYgKG1paV9scGEpIHsKLQkJCQlwcl9pbmZvKCIlczogU2V0dGluZyAlcy1kdXBsZXggYmFzZWQgb24gTUlJICMlZCBsaW5rIgotCQkJCQkiIHBhcnRuZXIgYWJpbGl0eSBvZiAlNC40eC5cbiIsCi0JCQkJCWRldi0+bmFtZSwKLQkJCQkJdHAtPm1paS5mdWxsX2R1cGxleCA/ICJmdWxsIiA6ICJoYWxmIiwKLQkJCQkJdHAtPnBoeXNbMF0sIG1paV9scGEpOworCQkJCW5ldGRldl9pbmZvKGRldiwgIlNldHRpbmcgJXMtZHVwbGV4IGJhc2VkIG9uIE1JSSAjJWQgbGluayBwYXJ0bmVyIGFiaWxpdHkgb2YgJTA0eFxuIiwKKwkJCQkJICAgIHRwLT5taWkuZnVsbF9kdXBsZXggPyAiZnVsbCIgOiAiaGFsZiIsCisJCQkJCSAgICB0cC0+cGh5c1swXSwgbWlpX2xwYSk7CiAJCQl9IGVsc2UgewotCQkJCXByX2luZm8oIiVzOiBtZWRpYSBpcyB1bmNvbm5lY3RlZCwgbGluayBkb3duLCBvciBpbmNvbXBhdGlibGUgY29ubmVjdGlvblxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCQluZXRkZXZfaW5mbyhkZXYsICJtZWRpYSBpcyB1bmNvbm5lY3RlZCwgbGluayBkb3duLCBvciBpbmNvbXBhdGlibGUgY29ubmVjdGlvblxuIik7CiAJCQl9CiAjaWYgMAogCQkJUlRMX1c4IChDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CkBAIC0xNTc2LDEzICsxNTcxLDEyIEBACiAKIAlydGw4MTM5X3R1bmVfdHdpc3RlciAoZGV2LCB0cCk7CiAKLQlwcl9kZWJ1ZygiJXM6IE1lZGlhIHNlbGVjdGlvbiB0aWNrLCBMaW5rIHBhcnRuZXIgJTQuNHguXG4iLAotCQkgZGV2LT5uYW1lLCBSVExfUjE2IChOV2F5TFBBUikpOwotCXByX2RlYnVnKCIlczogIE90aGVyIHJlZ2lzdGVycyBhcmUgSW50TWFzayAlNC40eCBJbnRTdGF0dXMgJTQuNHhcbiIsCi0JCSBkZXYtPm5hbWUsIFJUTF9SMTYgKEludHJNYXNrKSwgUlRMX1IxNiAoSW50clN0YXR1cykpOwotCXByX2RlYnVnKCIlczogIENoaXAgY29uZmlnICUyLjJ4ICUyLjJ4LlxuIiwKLQkJIGRldi0+bmFtZSwgUlRMX1I4IChDb25maWcwKSwKLQkJIFJUTF9SOCAoQ29uZmlnMSkpOworCW5ldGRldl9kYmcoZGV2LCAiTWVkaWEgc2VsZWN0aW9uIHRpY2ssIExpbmsgcGFydG5lciAlMDR4XG4iLAorCQkgICBSVExfUjE2KE5XYXlMUEFSKSk7CisJbmV0ZGV2X2RiZyhkZXYsICJPdGhlciByZWdpc3RlcnMgYXJlIEludE1hc2sgJTA0eCBJbnRTdGF0dXMgJTA0eFxuIiwKKwkJICAgUlRMX1IxNihJbnRyTWFzayksIFJUTF9SMTYoSW50clN0YXR1cykpOworCW5ldGRldl9kYmcoZGV2LCAiQ2hpcCBjb25maWcgJTAyeCAlMDJ4XG4iLAorCQkgICBSVExfUjgoQ29uZmlnMCksIFJUTF9SOChDb25maWcxKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bDgxMzlfdGhyZWFkIChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCkBAIC0xNjQwLDE3ICsxNjM0LDE3IEBACiAJaW50IGk7CiAJdTggdG1wODsKIAotCXByX2RlYnVnKCIlczogVHJhbnNtaXQgdGltZW91dCwgc3RhdHVzICUyLjJ4ICU0LjR4ICU0LjR4IG1lZGlhICUyLjJ4LlxuIiwKLQkJZGV2LT5uYW1lLCBSVExfUjggKENoaXBDbWQpLAotCQlSVExfUjE2KEludHJTdGF0dXMpLCBSVExfUjE2KEludHJNYXNrKSwgUlRMX1I4KE1lZGlhU3RhdHVzKSk7CisJbmV0ZGV2X2RiZyhkZXYsICJUcmFuc21pdCB0aW1lb3V0LCBzdGF0dXMgJTAyeCAlMDR4ICUwNHggbWVkaWEgJTAyeFxuIiwKKwkJICAgUlRMX1I4KENoaXBDbWQpLCBSVExfUjE2KEludHJTdGF0dXMpLAorCQkgICBSVExfUjE2KEludHJNYXNrKSwgUlRMX1I4KE1lZGlhU3RhdHVzKSk7CiAJLyogRW1pdCBpbmZvIHRvIGZpZ3VyZSBvdXQgd2hhdCB3ZW50IHdyb25nLiAqLwotCXByX2RlYnVnKCIlczogVHggcXVldWUgc3RhcnQgZW50cnkgJWxkICBkaXJ0eSBlbnRyeSAlbGQuXG4iLAotCQlkZXYtPm5hbWUsIHRwLT5jdXJfdHgsIHRwLT5kaXJ0eV90eCk7CisJbmV0ZGV2X2RiZyhkZXYsICJUeCBxdWV1ZSBzdGFydCBlbnRyeSAlbGQgIGRpcnR5IGVudHJ5ICVsZFxuIiwKKwkJICAgdHAtPmN1cl90eCwgdHAtPmRpcnR5X3R4KTsKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX1RYX0RFU0M7IGkrKykKLQkJcHJfZGVidWcoIiVzOiAgVHggZGVzY3JpcHRvciAlZCBpcyAlOC44bHguJXNcbiIsCi0JCQlkZXYtPm5hbWUsIGksIFJUTF9SMzIgKFR4U3RhdHVzMCArIChpICogNCkpLAotCQkJaSA9PSB0cC0+ZGlydHlfdHggJSBOVU1fVFhfREVTQyA/Ci0JCQkJIiAocXVldWUgaGVhZCkiIDogIiIpOworCQluZXRkZXZfZGJnKGRldiwgIlR4IGRlc2NyaXB0b3IgJWQgaXMgJTA4bHglc1xuIiwKKwkJCSAgIGksIFJUTF9SMzIoVHhTdGF0dXMwICsgKGkgKiA0KSksCisJCQkgICBpID09IHRwLT5kaXJ0eV90eCAlIE5VTV9UWF9ERVNDID8KKwkJCSAgICIgKHF1ZXVlIGhlYWQpIiA6ICIiKTsKIAogCXRwLT54c3RhdHMudHhfdGltZW91dHMrKzsKIApAQCAtMTcyOSw5ICsxNzIzLDggQEAKIAkJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOwogCi0JaWYgKG5ldGlmX21zZ190eF9xdWV1ZWQodHApKQotCQlwcl9kZWJ1ZygiJXM6IFF1ZXVlZCBUeCBwYWNrZXQgc2l6ZSAldSB0byBzbG90ICVkLlxuIiwKLQkJCWRldi0+bmFtZSwgbGVuLCBlbnRyeSk7CisJbmV0aWZfZGJnKHRwLCB0eF9xdWV1ZWQsIGRldiwgIlF1ZXVlZCBUeCBwYWNrZXQgc2l6ZSAldSB0byBzbG90ICVkXG4iLAorCQkgIGxlbiwgZW50cnkpOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTE3NjAsOSArMTc1Myw4IEBACiAJCS8qIE5vdGU6IFR4Q2Fycmllckxvc3QgaXMgYWx3YXlzIGFzc2VydGVkIGF0IDEwMG1icHMuICovCiAJCWlmICh0eHN0YXR1cyAmIChUeE91dE9mV2luZG93IHwgVHhBYm9ydGVkKSkgewogCQkJLyogVGhlcmUgd2FzIGFuIG1ham9yIGVycm9yLCBsb2cgaXQuICovCi0JCQlpZiAobmV0aWZfbXNnX3R4X2Vycih0cCkpCi0JCQkJcHJfZGVidWcoIiVzOiBUcmFuc21pdCBlcnJvciwgVHggc3RhdHVzICU4Ljh4LlxuIiwKLQkJCQkJZGV2LT5uYW1lLCB0eHN0YXR1cyk7CisJCQluZXRpZl9kYmcodHAsIHR4X2VyciwgZGV2LCAiVHJhbnNtaXQgZXJyb3IsIFR4IHN0YXR1cyAlMDh4XG4iLAorCQkJCSAgdHhzdGF0dXMpOwogCQkJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCWlmICh0eHN0YXR1cyAmIFR4QWJvcnRlZCkgewogCQkJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKQEAgLTE3OTIsOCArMTc4NCw4IEBACiAKICNpZm5kZWYgUlRMODEzOV9OREVCVUcKIAlpZiAodHAtPmN1cl90eCAtIGRpcnR5X3R4ID4gTlVNX1RYX0RFU0MpIHsKLQkJcHJfZXJyKCIlczogT3V0LW9mLXN5bmMgZGlydHkgcG9pbnRlciwgJWxkIHZzLiAlbGQuXG4iLAotCQkgICAgICAgIGRldi0+bmFtZSwgZGlydHlfdHgsIHRwLT5jdXJfdHgpOworCQluZXRkZXZfZXJyKGRldiwgIk91dC1vZi1zeW5jIGRpcnR5IHBvaW50ZXIsICVsZCB2cy4gJWxkXG4iLAorCQkJICAgZGlydHlfdHgsIHRwLT5jdXJfdHgpOwogCQlkaXJ0eV90eCArPSBOVU1fVFhfREVTQzsKIAl9CiAjZW5kaWYgLyogUlRMODEzOV9OREVCVUcgKi8KQEAgLTE4MTYsMTQgKzE4MDgsMTMgQEAKIAlpbnQgdG1wX3dvcms7CiAjZW5kaWYKIAotCWlmIChuZXRpZl9tc2dfcnhfZXJyICh0cCkpCi0JCXByX2RlYnVnKCIlczogRXRoZXJuZXQgZnJhbWUgaGFkIGVycm9ycywgc3RhdHVzICU4Ljh4LlxuIiwKLQkJCWRldi0+bmFtZSwgcnhfc3RhdHVzKTsKKwluZXRpZl9kYmcodHAsIHJ4X2VyciwgZGV2LCAiRXRoZXJuZXQgZnJhbWUgaGFkIGVycm9ycywgc3RhdHVzICUwOHhcbiIsCisJCSAgcnhfc3RhdHVzKTsKIAlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCWlmICghKHJ4X3N0YXR1cyAmIFJ4U3RhdHVzT0spKSB7CiAJCWlmIChyeF9zdGF0dXMgJiBSeFRvb0xvbmcpIHsKLQkJCXByX2RlYnVnKCIlczogT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lLCBzdGF0dXMgJTQuNHghXG4iLAotCQkJIAlkZXYtPm5hbWUsIHJ4X3N0YXR1cyk7CisJCQluZXRkZXZfZGJnKGRldiwgIk92ZXJzaXplZCBFdGhlcm5ldCBmcmFtZSwgc3RhdHVzICUwNHghXG4iLAorCQkJCSAgIHJ4X3N0YXR1cyk7CiAJCQkvKiBBLkMuOiBUaGUgY2hpcCBoYW5ncyBoZXJlLiAqLwogCQl9CiAJCWlmIChyeF9zdGF0dXMgJiAoUnhCYWRTeW1ib2wgfCBSeEJhZEFsaWduKSkKQEAgLTE4NTUsNyArMTg0Niw3IEBACiAJCQlicmVhazsKIAl9CiAJaWYgKHRtcF93b3JrIDw9IDApCi0JCXByX3dhcm5pbmcoUEZYICJyeCBzdG9wIHdhaXQgdG9vIGxvbmdcbiIpOworCQluZXRkZXZfd2FybihkZXYsICJyeCBzdG9wIHdhaXQgdG9vIGxvbmdcbiIpOwogCS8qIHJlc3RhcnQgcmVjZWl2ZSAqLwogCXRtcF93b3JrID0gMjAwOwogCXdoaWxlICgtLXRtcF93b3JrID4gMCkgewpAQCAtMTg2Niw3ICsxODU3LDcgQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAodG1wX3dvcmsgPD0gMCkKLQkJcHJfd2FybmluZyhQRlggInR4L3J4IGVuYWJsZSB3YWl0IHRvbyBsb25nXG4iKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LCAidHgvcnggZW5hYmxlIHdhaXQgdG9vIGxvbmdcbiIpOwogCiAJLyogYW5kIHJlaW5pdGlhbGl6ZSBhbGwgcnggcmVsYXRlZCByZWdpc3RlcnMgKi8KIAlSVExfVzhfRiAoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spOwpAQCAtMTg3Nyw3ICsxODY4LDcgQEAKIAlSVExfVzMyIChSeENvbmZpZywgdHAtPnJ4X2NvbmZpZyk7CiAJdHAtPmN1cl9yeCA9IDA7CiAKLQlwcl9kZWJ1ZygiaW5pdCBidWZmZXIgYWRkcmVzc2VzXG4iKTsKKwluZXRkZXZfZGJnKGRldiwgImluaXQgYnVmZmVyIGFkZHJlc3Nlc1xuIik7CiAKIAkvKiBMb2NrIENvbmZpZ1swMTIzNF0gYW5kIEJNQ1IgcmVnaXN0ZXIgd3JpdGVzICovCiAJUlRMX1c4IChDZmc5MzQ2LCBDZmc5MzQ2X0xvY2spOwpAQCAtMTkzMSwxMCArMTkyMiw5IEBACiAJdW5zaWduZWQgaW50IGN1cl9yeCA9IHRwLT5jdXJfcng7CiAJdW5zaWduZWQgaW50IHJ4X3NpemUgPSAwOwogCi0JcHJfZGVidWcoIiVzOiBJbiBydGw4MTM5X3J4KCksIGN1cnJlbnQgJTQuNHggQnVmQWRkciAlNC40eCwiCi0JCSAiIGZyZWUgdG8gJTQuNHgsIENtZCAlMi4yeC5cbiIsIGRldi0+bmFtZSwgKHUxNiljdXJfcngsCi0JCSBSVExfUjE2IChSeEJ1ZkFkZHIpLAotCQkgUlRMX1IxNiAoUnhCdWZQdHIpLCBSVExfUjggKENoaXBDbWQpKTsKKwluZXRkZXZfZGJnKGRldiwgIkluICVzKCksIGN1cnJlbnQgJTA0eCBCdWZBZGRyICUwNHgsIGZyZWUgdG8gJTA0eCwgQ21kICUwMnhcbiIsCisJCSAgIF9fZnVuY19fLCAodTE2KWN1cl9yeCwKKwkJICAgUlRMX1IxNihSeEJ1ZkFkZHIpLCBSVExfUjE2KFJ4QnVmUHRyKSwgUlRMX1I4KENoaXBDbWQpKTsKIAogCXdoaWxlIChuZXRpZl9ydW5uaW5nKGRldikgJiYgcmVjZWl2ZWQgPCBidWRnZXQgJiYKIAkgICAgICAgKFJUTF9SOCAoQ2hpcENtZCkgJiBSeEJ1ZkVtcHR5KSA9PSAwKSB7CkBAIC0xOTUwLDE5ICsxOTQwLDEyIEBACiAJCXJ4X3NpemUgPSByeF9zdGF0dXMgPj4gMTY7CiAJCXBrdF9zaXplID0gcnhfc2l6ZSAtIDQ7CiAKLQkJaWYgKG5ldGlmX21zZ19yeF9zdGF0dXModHApKQotCQkJcHJfZGVidWcoIiVzOiAgcnRsODEzOV9yeCgpIHN0YXR1cyAlNC40eCwgc2l6ZSAlNC40eCwiCi0JCQkJIiBjdXIgJTQuNHguXG4iLCBkZXYtPm5hbWUsIHJ4X3N0YXR1cywKLQkJCSByeF9zaXplLCBjdXJfcngpOworCQluZXRpZl9kYmcodHAsIHJ4X3N0YXR1cywgZGV2LCAiJXMoKSBzdGF0dXMgJTA0eCwgc2l6ZSAlMDR4LCBjdXIgJTA0eFxuIiwKKwkJCSAgX19mdW5jX18sIHJ4X3N0YXR1cywgcnhfc2l6ZSwgY3VyX3J4KTsKICNpZiBSVEw4MTM5X0RFQlVHID4gMgotCQl7Ci0JCQlpbnQgaTsKLQkJCXByX2RlYnVnKCIlczogRnJhbWUgY29udGVudHMgIiwgZGV2LT5uYW1lKTsKLQkJCWZvciAoaSA9IDA7IGkgPCA3MDsgaSsrKQotCQkJCXByX2NvbnQoIiAlMi4yeCIsCi0JCQkJCXJ4X3JpbmdbcmluZ19vZmZzZXQgKyBpXSk7Ci0JCQlwcl9jb250KCIuXG4iKTsKLQkJfQorCQlwcmludF9kdW1wX2hleChLRVJOX0RFQlVHLCAiRnJhbWUgY29udGVudHM6ICIsCisJCQkgICAgICAgRFVNUF9QUkVGSVhfT0ZGU0VULCAxNiwgMSwKKwkJCSAgICAgICAmcnhfcmluZ1tyaW5nX29mZnNldF0sIDcwLCB0cnVlKTsKICNlbmRpZgogCiAJCS8qIFBhY2tldCBjb3B5IGZyb20gRklGTyBzdGlsbCBpbiBwcm9ncmVzcy4KQEAgLTE5NzMsMTQgKzE5NTYsMTEgQEAKIAkJCWlmICghdHAtPmZpZm9fY29weV90aW1lb3V0KQogCQkJCXRwLT5maWZvX2NvcHlfdGltZW91dCA9IGppZmZpZXMgKyAyOwogCQkJZWxzZSBpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0cC0+Zmlmb19jb3B5X3RpbWVvdXQpKSB7Ci0JCQkJcHJfZGVidWcoIiVzOiBodW5nIEZJRk8uIFJlc2V0LiIsIGRldi0+bmFtZSk7CisJCQkJbmV0ZGV2X2RiZyhkZXYsICJodW5nIEZJRk8uIFJlc2V0XG4iKTsKIAkJCQlyeF9zaXplID0gMDsKIAkJCQlnb3RvIG5vX2Vhcmx5X3J4OwogCQkJfQotCQkJaWYgKG5ldGlmX21zZ19pbnRyKHRwKSkgewotCQkJCXByX2RlYnVnKCIlczogZmlmbyBjb3B5IGluIHByb2dyZXNzLiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQl9CisJCQluZXRpZl9kYmcodHAsIGludHIsIGRldiwgImZpZm8gY29weSBpbiBwcm9ncmVzc1xuIik7CiAJCQl0cC0+eHN0YXRzLmVhcmx5X3J4Kys7CiAJCQlicmVhazsKIAkJfQpAQCAtMjAyMSw4ICsyMDAxLDcgQEAKIAkJCW5ldGlmX3JlY2VpdmVfc2tiIChza2IpOwogCQl9IGVsc2UgewogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCQlwcl93YXJuaW5nKCIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsCi0JCQkJCWRldi0+bmFtZSk7CisJCQkJbmV0ZGV2X3dhcm4oZGV2LCAiTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldFxuIik7CiAJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKIAkJfQogCQlyZWNlaXZlZCsrOwpAQCAtMjAzNiwxMCArMjAxNSw5IEBACiAJaWYgKHVubGlrZWx5KCFyZWNlaXZlZCB8fCByeF9zaXplID09IDB4ZmZmMCkpCiAJCXJ0bDgxMzlfaXNyX2Fjayh0cCk7CiAKLQlwcl9kZWJ1ZygiJXM6IERvbmUgcnRsODEzOV9yeCgpLCBjdXJyZW50ICU0LjR4IEJ1ZkFkZHIgJTQuNHgsIgotCQkgIiBmcmVlIHRvICU0LjR4LCBDbWQgJTIuMnguXG4iLCBkZXYtPm5hbWUsIGN1cl9yeCwKLQkJIFJUTF9SMTYgKFJ4QnVmQWRkciksCi0JCSBSVExfUjE2IChSeEJ1ZlB0ciksIFJUTF9SOCAoQ2hpcENtZCkpOworCW5ldGRldl9kYmcoZGV2LCAiRG9uZSAlcygpLCBjdXJyZW50ICUwNHggQnVmQWRkciAlMDR4LCBmcmVlIHRvICUwNHgsIENtZCAlMDJ4XG4iLAorCQkgICBfX2Z1bmNfXywgY3VyX3J4LAorCQkgICBSVExfUjE2KFJ4QnVmQWRkciksIFJUTF9SMTYoUnhCdWZQdHIpLCBSVExfUjgoQ2hpcENtZCkpOwogCiAJdHAtPmN1cl9yeCA9IGN1cl9yeDsKIApAQCAtMjA2MCw4ICsyMDM4LDcgQEAKIAkJCQkgICAgIHZvaWQgX19pb21lbSAqaW9hZGRyLAogCQkJCSAgICAgaW50IHN0YXR1cywgaW50IGxpbmtfY2hhbmdlZCkKIHsKLQlwcl9kZWJ1ZygiJXM6IEFibm9ybWFsIGludGVycnVwdCwgc3RhdHVzICU4Ljh4LlxuIiwKLQkJIGRldi0+bmFtZSwgc3RhdHVzKTsKKwluZXRkZXZfZGJnKGRldiwgIkFibm9ybWFsIGludGVycnVwdCwgc3RhdHVzICUwOHhcbiIsIHN0YXR1cyk7CiAKIAlhc3NlcnQgKGRldiAhPSBOVUxMKTsKIAlhc3NlcnQgKHRwICE9IE5VTEwpOwpAQCAtMjA4OSw4ICsyMDY2LDcgQEAKIAkJcGNpX3JlYWRfY29uZmlnX3dvcmQgKHRwLT5wY2lfZGV2LCBQQ0lfU1RBVFVTLCAmcGNpX2NtZF9zdGF0dXMpOwogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQgKHRwLT5wY2lfZGV2LCBQQ0lfU1RBVFVTLCBwY2lfY21kX3N0YXR1cyk7CiAKLQkJcHJfZXJyKCIlczogUENJIEJ1cyBlcnJvciAlNC40eC5cbiIsCi0JCQlkZXYtPm5hbWUsIHBjaV9jbWRfc3RhdHVzKTsKKwkJbmV0ZGV2X2VycihkZXYsICJQQ0kgQnVzIGVycm9yICUwNHhcbiIsIHBjaV9jbWRfc3RhdHVzKTsKIAl9CiB9CiAKQEAgLTIxODMsOCArMjE1OSw4IEBACiAgb3V0OgogCXNwaW5fdW5sb2NrICgmdHAtPmxvY2spOwogCi0JcHJfZGVidWcoIiVzOiBleGl0aW5nIGludGVycnVwdCwgaW50cl9zdGF0dXM9JSM0LjR4LlxuIiwKLQkJIGRldi0+bmFtZSwgUlRMX1IxNiAoSW50clN0YXR1cykpOworCW5ldGRldl9kYmcoZGV2LCAiZXhpdGluZyBpbnRlcnJ1cHQsIGludHJfc3RhdHVzPSUjNC40eFxuIiwKKwkJICAgUlRMX1IxNihJbnRyU3RhdHVzKSk7CiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CiAKQEAgLTIyMzMsOSArMjIwOSw4IEBACiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCW5hcGlfZGlzYWJsZSgmdHAtPm5hcGkpOwogCi0JaWYgKG5ldGlmX21zZ19pZmRvd24odHApKQotCQlwcl9kZWJ1ZygiJXM6IFNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCBzdGF0dXMgd2FzIDB4JTQuNHguXG4iLAotCQkJZGV2LT5uYW1lLCBSVExfUjE2IChJbnRyU3RhdHVzKSk7CisJbmV0aWZfZGJnKHRwLCBpZmRvd24sIGRldiwgIlNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCBzdGF0dXMgd2FzIDB4JTA0eFxuIiwKKwkJICBSVExfUjE2KEludHJTdGF0dXMpKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlICgmdHAtPmxvY2ssIGZsYWdzKTsKIApAQCAtMjUwOSwxMSArMjQ4NCwxMSBAQAogCXN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAJdTMyIG1jX2ZpbHRlclsyXTsJLyogTXVsdGljYXN0IGhhc2ggZmlsdGVyICovCi0JaW50IGksIHJ4X21vZGU7CisJaW50IHJ4X21vZGU7CiAJdTMyIHRtcDsKIAotCXByX2RlYnVnKCIlczogICBydGw4MTM5X3NldF9yeF9tb2RlKCU0LjR4KSBkb25lIC0tIFJ4IGNvbmZpZyAlOC44bHguXG4iLAotCQkJZGV2LT5uYW1lLCBkZXYtPmZsYWdzLCBSVExfUjMyIChSeENvbmZpZykpOworCW5ldGRldl9kYmcoZGV2LCAicnRsODEzOV9zZXRfcnhfbW9kZSglMDR4KSBkb25lIC0tIFJ4IGNvbmZpZyAlMDhseFxuIiwKKwkJICAgZGV2LT5mbGFncywgUlRMX1IzMihSeENvbmZpZykpOwogCiAJLyogTm90ZTogZG8gbm90IHJlb3JkZXIsIEdDQyBpcyBjbGV2ZXIgYWJvdXQgY29tbW9uIHN0YXRlbWVudHMuICovCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewpAQCAtMjUyMSw3ICsyNDk2LDcgQEAKIAkJICAgIEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE11bHRpY2FzdCB8IEFjY2VwdE15UGh5cyB8CiAJCSAgICBBY2NlcHRBbGxQaHlzOwogCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAweGZmZmZmZmZmOwotCX0gZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSB8fAorCX0gZWxzZSBpZiAoKG5ldGRldl9tY19jb3VudChkZXYpID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKIAkJICAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCS8qIFRvbyBtYW55IHRvIGZpbHRlciBwZXJmZWN0bHkgLS0gYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCQlyeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXVsdGljYXN0IHwgQWNjZXB0TXlQaHlzOwpAQCAtMjUzMCw4ICsyNTA1LDcgQEAKIAkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CiAJCXJ4X21vZGUgPSBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNeVBoeXM7CiAJCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDA7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCQlpbnQgYml0X25yID0gZXRoZXJfY3JjKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSA+PiAyNjsKIAogCQkJbWNfZmlsdGVyW2JpdF9uciA+PiA1XSB8PSAxIDw8IChiaXRfbnIgJiAzMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC84MjU5Ni5jIGIvZHJpdmVycy9uZXQvODI1OTYuYwppbmRleCAxNjYzYmM5Li5mOTRkMTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MjU5Ni5jCisrKyBiL2RyaXZlcnMvbmV0LzgyNTk2LmMKQEAgLTE1MDUsNyArMTUwNSw3IEBACiAJaW50IGNvbmZpZyA9IDAsIGNudDsKIAogCURFQihERUJfTVVMVEkscHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzZXQgbXVsdGljYXN0IGxpc3QsICVkIGVudHJpZXMsIHByb21pc2MgJXMsIGFsbG11bHRpICVzXG4iLAotCQlkZXYtPm5hbWUsIGRldi0+bWNfY291bnQsCisJCWRldi0+bmFtZSwgbmV0ZGV2X21jX2NvdW50KGRldiksCiAJCWRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQyAgPyAiT04iIDogIk9GRiIsCiAJCWRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgPyAiT04iIDogIk9GRiIpKTsKIApAQCAtMTUzMyw3ICsxNTMzLDcgQEAKIAkJaTU5Nl9hZGRfY21kKGRldiwgJmxwLT5jZl9jbWQuY21kKTsKIAl9CiAKLQljbnQgPSBkZXYtPm1jX2NvdW50OworCWNudCA9IG5ldGRldl9tY19jb3VudChkZXYpOwogCWlmIChjbnQgPiBNQVhfTUNfQ05UKQogCXsKIAkJY250ID0gTUFYX01DX0NOVDsKQEAgLTE1NDEsNyArMTU0MSw3IEBACiAJCQlkZXYtPm5hbWUsIGNudCk7CiAJfQogCi0JaWYgKGRldi0+bWNfY291bnQgPiAwKSB7CisJaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAkJdW5zaWduZWQgY2hhciAqY3A7CiAJCXN0cnVjdCBtY19jbWQgKmNtZDsKQEAgLTE1NTAsMTMgKzE1NTAsMTYgQEAKIAkJCXJldHVybjsKIAkJY21kID0gJmxwLT5tY19jbWQ7CiAJCWNtZC0+Y21kLmNvbW1hbmQgPSBDbWRNdWx0aWNhc3RMaXN0OwotCQljbWQtPm1jX2NudCA9IGRldi0+bWNfY291bnQgKiA2OworCQljbWQtPm1jX2NudCA9IGNudCAqIEVUSF9BTEVOOwogCQljcCA9IGNtZC0+bWNfYWRkcnM7Ci0JCWZvciAoZG1pID0gZGV2LT5tY19saXN0OyBjbnQgJiYgZG1pICE9IE5VTEw7IGRtaSA9IGRtaS0+bmV4dCwgY250LS0sIGNwICs9IDYpIHsKLQkJCW1lbWNweShjcCwgZG1pLT5kbWlfYWRkciwgNik7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CisJCQlpZiAoIWNudC0tKQorCQkJCWJyZWFrOworCQkJbWVtY3B5KGNwLCBkbWktPmRtaV9hZGRyLCBFVEhfQUxFTik7CiAJCQlpZiAoaTU5Nl9kZWJ1ZyA+IDEpCiAJCQkJREVCKERFQl9NVUxUSSxwcmludGsoS0VSTl9JTkZPICIlczogQWRkaW5nIGFkZHJlc3MgJXBNXG4iLAogCQkJCQkJZGV2LT5uYW1lLCBjcCkpOworCQkJY3AgKz0gRVRIX0FMRU47CiAJCX0KIAkJaTU5Nl9hZGRfY21kKGRldiwgJmNtZC0+Y21kKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCAxODMwMDYyLi43MDI5Y2Q1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTkwLDYgKzkwLDE4IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBtYWN2bGFuLgogCitjb25maWcgTUFDVlRBUAorCXRyaXN0YXRlICJNQUMtVkxBTiBiYXNlZCB0YXAgZHJpdmVyIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gTUFDVkxBTgorCWhlbHAKKwkgIFRoaXMgYWRkcyBhIHNwZWNpYWxpemVkIHRhcCBjaGFyYWN0ZXIgZGV2aWNlIGRyaXZlciB0aGF0IGlzIGJhc2VkCisJICBvbiB0aGUgTUFDLVZMQU4gbmV0d29yayBpbnRlcmZhY2UsIGNhbGxlZCBtYWN2dGFwLiBBIG1hY3Z0YXAgZGV2aWNlCisJICBjYW4gYmUgYWRkZWQgaW4gdGhlIHNhbWUgd2F5IGFzIGEgbWFjdmxhbiBkZXZpY2UsIHVzaW5nICd0eXBlCisJICBtYWN2bGFuJywgYW5kIHRoZW4gYmUgYWNjZXNzZWQgdGhyb3VnaCB0aGUgdGFwIHVzZXIgc3BhY2UgaW50ZXJmYWNlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBtYWN2dGFwLgorCiBjb25maWcgRVFVQUxJWkVSCiAJdHJpc3RhdGUgIkVRTCAoc2VyaWFsIGxpbmUgbG9hZCBiYWxhbmNpbmcpIHN1cHBvcnQiCiAJLS0taGVscC0tLQpAQCAtODY4LDggKzg4MCw4IEBACiAJICBTZXQgdGhlIG51bWJlciBvZiBidWZmZXIgcGFja2V0cyB1c2VkIGluIGRyaXZlci4KIAogY29uZmlnIEJGSU5fTUFDX1JNSUkKLQlib29sICJSTUlJIFBIWSBJbnRlcmZhY2UgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBCRklOX01BQyAmJiBFWFBFUklNRU5UQUwKKwlib29sICJSTUlJIFBIWSBJbnRlcmZhY2UiCisJZGVwZW5kcyBvbiBCRklOX01BQwogCWRlZmF1bHQgeSBpZiBCRklONTI3X0VaS0lUCiAJZGVmYXVsdCBuIGlmIEJGSU41MzdfU1RBTVAKIAloZWxwCkBAIC05ODMsNiArOTk1LDE0IEBACiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIE9wZW5Db3JlcyAxMC8xMDAgTWJwcyBFdGhlcm5ldCBNQUMuCiAKK2NvbmZpZyBHUkVUSAorCXRyaXN0YXRlICJBZXJvZmxleCBHYWlzbGVyIEdSRVRIIEV0aGVybmV0IE1BQyBzdXBwb3J0IgorCWRlcGVuZHMgb24gU1BBUkMKKwlzZWxlY3QgUEhZTElCCisJc2VsZWN0IENSQzMyCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIEFlcm9mbGV4IEdhaXNsZXIgR1JFVEggRXRoZXJuZXQgTUFDLgorCiBjb25maWcgU01DOTExWAogCXRyaXN0YXRlICJTTVNDIExBTjkxMVs1Njc4XSBzdXBwb3J0IgogCXNlbGVjdCBDUkMzMgpAQCAtMTM2OCw2ICsxMzg4LDE3IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBhYzMyMDAuCiAKK2NvbmZpZyBLU1o4ODRYX1BDSQorCXRyaXN0YXRlICJNaWNyZWwgS1NaODg0MS8yIFBDSSIKKwlkZXBlbmRzIG9uIE5FVF9QQ0kgJiYgUENJCisJc2VsZWN0IE1JSQorCXNlbGVjdCBDUkMzMgorCWhlbHAKKwkgIFRoaXMgUENJIGRyaXZlciBpcyBmb3IgTWljcmVsIEtTWjg4NDEvS1NaODg0MiBQQ0kgRXRoZXJuZXQgY2hpcC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQga3N6ODg0eC4KKwogY29uZmlnIEFQUklDT1QKIAl0cmlzdGF0ZSAiQXByaWNvdCBYZW4tSUkgb24gYm9hcmQgRXRoZXJuZXQiCiAJZGVwZW5kcyBvbiBORVRfUENJICYmIElTQQpAQCAtMTg4Myw3ICsxOTE0LDggQEAKIAogY29uZmlnIEZFQwogCWJvb2wgIkZFQyBldGhlcm5ldCBjb250cm9sbGVyIChvZiBDb2xkRmlyZSBhbmQgc29tZSBpLk1YIENQVXMpIgotCWRlcGVuZHMgb24gTTUyM3ggfHwgTTUyN3ggfHwgTTUyNzIgfHwgTTUyOHggfHwgTTUyMHggfHwgTTUzMnggfHwgTUFDSF9NWDI3IHx8IEFSQ0hfTVgzNSB8fCBBUkNIX01YMjUKKwlkZXBlbmRzIG9uIE01MjN4IHx8IE01Mjd4IHx8IE01MjcyIHx8IE01Mjh4IHx8IE01MjB4IHx8IE01MzJ4IHx8IFwKKwkJTUFDSF9NWDI3IHx8IEFSQ0hfTVgzNSB8fCBBUkNIX01YMjUgfHwgQVJDSF9NWDUKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgYnVpbHQtaW4gMTAvMTAwIEZhc3QgZXRoZXJuZXQKIAkgIGNvbnRyb2xsZXIgb24gc29tZSBNb3Rvcm9sYSBDb2xkRmlyZSBhbmQgRnJlZXNjYWxlIGkuTVggcHJvY2Vzc29ycy4KQEAgLTE5MzksNiArMTk3MSw3IEBACiBjb25maWcgWElMSU5YX0VNQUNMSVRFCiAJdHJpc3RhdGUgIlhpbGlueCAxMC8xMDAgRXRoZXJuZXQgTGl0ZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gUFBDMzIgfHwgTUlDUk9CTEFaRQorCXNlbGVjdCBQSFlMSUIKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgMTAvMTAwIEV0aGVybmV0IExpdGUgZnJvbSBYaWxpbnguCiAKQEAgLTIzNTYsMjAgKzIzODksNiBAQAogCSAgdGhlIGRyaXZlciBhdXRvbWF0aWNhbGx5IGRpc3Rpbmd1aXNoZXMgdGhlIG1vZGVscywgeW91IGNhbgogCSAgc2FmZWx5IGVuYWJsZSB0aGlzIG9wdGlvbiBldmVuIGlmIHlvdSBoYXZlIGEgd2lyZWxlc3MtbGVzcyBtb2RlbC4KIAotY29uZmlnIEdFTElDX1dJUkVMRVNTX09MRF9QU0tfSU5URVJGQUNFCi0gICAgICAgYm9vbCAiUFMzIFdpcmVsZXNzIHByaXZhdGUgUFNLIGludGVyZmFjZSAoT0JTT0xFVEUpIgotICAgICAgIGRlcGVuZHMgb24gR0VMSUNfV0lSRUxFU1MKLSAgICAgICBzZWxlY3QgV0VYVF9QUklWCi0gICAgICAgaGVscAotICAgICAgICAgIFRoaXMgb3B0aW9uIHJldGFpbnMgdGhlIG9ic29sZXRlIHByaXZhdGUgaW50ZXJmYWNlIHRvIHBhc3MKLSAgICAgICAgICB0aGUgUFNLIGZyb20gdXNlciBzcGFjZSBwcm9ncmFtcyB0byB0aGUgZHJpdmVyLiAgVGhlIFBTSwotICAgICAgICAgIHN0YW5kcyBmb3IgJ1ByZSBTaGFyZWQgS2V5JyBhbmQgaXMgdXNlZCBmb3IgV1BBWzJdLVBTSwotICAgICAgICAgIChXUEEtUGVyc29uYWwpIGVudmlyb25tZW50LgotICAgICAgICAgIElmIFdQQVsyXS1QU0sgaXMgdXNlZCBhbmQgeW91IG5lZWQgdG8gdXNlIG9sZCBwcm9ncmFtcyB0aGF0Ci0gICAgICAgICAgc3VwcG9ydCBvbmx5IHRoaXMgb2xkIGludGVyZmFjZSwgc2F5IFkuICBPdGhlcndpc2UgTi4KLQotICAgICAgICAgIElmIHVuc3VyZSwgc2F5IE4uCi0KIGNvbmZpZyBGU0xfUFFfTURJTwogCXRyaXN0YXRlICJGcmVlc2NhbGUgUFEgTURJTyIKIAlkZXBlbmRzIG9uIEZTTF9TT0MKQEAgLTI2MTgsNiArMjYzNywyOCBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgSVhHQkVWRgorICAgICAgIHRyaXN0YXRlICJJbnRlbChSKSA4MjU5OSBWaXJ0dWFsIEZ1bmN0aW9uIEV0aGVybmV0IHN1cHBvcnQiCisgICAgICAgZGVwZW5kcyBvbiBQQ0lfTVNJCisgICAgICAgLS0taGVscC0tLQorICAgICAgICAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgSW50ZWwoUikgODI1OTkgdmlydHVhbCBmdW5jdGlvbnMuICBGb3IgbW9yZQorICAgICAgICAgaW5mb3JtYXRpb24gb24gaG93IHRvIGlkZW50aWZ5IHlvdXIgYWRhcHRlciwgZ28gdG8gdGhlIEFkYXB0ZXIgJgorICAgICAgICAgRHJpdmVyIElEIEd1aWRlIGF0OgorCisgICAgICAgICA8aHR0cDovL3N1cHBvcnQuaW50ZWwuY29tL3N1cHBvcnQvbmV0d29yay9zYi9DUy0wMDg0NDEuaHRtPgorCisgICAgICAgICBGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiBhbmQgc3VwcG9ydCwgZ28gdG8gdGhlIEludGVsIHN1cHBvcnQKKyAgICAgICAgIHdlYnNpdGUgYXQ6CisKKyAgICAgICAgIDxodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20+CisKKyAgICAgICAgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpbgorICAgICAgICAgPGZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2l4Z2JldmYudHh0Pi4KKworICAgICAgICAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZQorICAgICAgICAgd2lsbCBiZSBjYWxsZWQgaXhnYmV2Zi4gIE1TSS1YIGludGVycnVwdCBzdXBwb3J0IGlzIHJlcXVpcmVkCisgICAgICAgICBmb3IgdGhpcyBkcml2ZXIgdG8gd29yayBjb3JyZWN0bHkuCisKIGNvbmZpZyBJWEdCCiAJdHJpc3RhdGUgIkludGVsKFIpIFBSTy8xMEdiRSBzdXBwb3J0IgogCWRlcGVuZHMgb24gUENJCkBAIC0yNzU2LDYgKzI3OTcsMTMgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGJueDJ4LiAgVGhpcyBpcyByZWNvbW1lbmRlZC4KIAorY29uZmlnIFFMQ05JQworCXRyaXN0YXRlICJRTE9HSUMgUUxDTklDIDEvMTBHYiBDb252ZXJnZWQgRXRoZXJuZXQgTklDIFN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kKKwloZWxwCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBRTG9naWMgUUxFODI0MCBhbmQgUUxFODI0MiBDb252ZXJnZWQgRXRoZXJuZXQKKwkgIGRldmljZXMuCisKIGNvbmZpZyBRTEdFCiAJdHJpc3RhdGUgIlFMb2dpYyBRTEdFIDEwR2IgRXRoZXJuZXQgRHJpdmVyIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQQ0kKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L01ha2VmaWxlIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKaW5kZXggYWQxMzQ2ZC4uNDc4ODg2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvTWFrZWZpbGUKQEAgLTE0LDYgKzE0LDcgQEAKIG9iai0kKENPTkZJR19JR0IpICs9IGlnYi8KIG9iai0kKENPTkZJR19JR0JWRikgKz0gaWdidmYvCiBvYmotJChDT05GSUdfSVhHQkUpICs9IGl4Z2JlLworb2JqLSQoQ09ORklHX0lYR0JFVkYpICs9IGl4Z2JldmYvCiBvYmotJChDT05GSUdfSVhHQikgKz0gaXhnYi8KIG9iai0kKENPTkZJR19JUDEwMDApICs9IGlwZy5vCiBvYmotJChDT05GSUdfQ0hFTFNJT19UMSkgKz0gY2hlbHNpby8KQEAgLTk1LDYgKzk2LDcgQEAKIG9iai0kKENPTkZJR19LUzg4NDIpCSs9IGtzODg0Mi5vCiBvYmotJChDT05GSUdfS1M4ODUxKQkrPSBrczg4NTEubwogb2JqLSQoQ09ORklHX0tTODg1MV9NTEwpCSs9IGtzODg1MV9tbGwubworb2JqLSQoQ09ORklHX0tTWjg4NFhfUENJKQkrPSBrc3o4ODR4Lm8KIG9iai0kKENPTkZJR19WSUFfUkhJTkUpICs9IHZpYS1yaGluZS5vCiBvYmotJChDT05GSUdfVklBX1ZFTE9DSVRZKSArPSB2aWEtdmVsb2NpdHkubwogb2JqLSQoQ09ORklHX0FEQVBURUNfU1RBUkZJUkUpICs9IHN0YXJmaXJlLm8KQEAgLTE0OCw2ICsxNTAsNyBAQAogb2JqLSQoQ09ORklHX1hJTElOWF9MTF9URU1BQykgKz0gbGxfdGVtYWMubwogb2JqLSQoQ09ORklHX1hJTElOWF9FTUFDTElURSkgKz0geGlsaW54X2VtYWNsaXRlLm8KIG9iai0kKENPTkZJR19RTEEzWFhYKSArPSBxbGEzeHh4Lm8KK29iai0kKENPTkZJR19RTENOSUMpICs9IHFsY25pYy8KIG9iai0kKENPTkZJR19RTEdFKSArPSBxbGdlLwogCiBvYmotJChDT05GSUdfUFBQKSArPSBwcHBfZ2VuZXJpYy5vCkBAIC0xNjcsNiArMTcwLDcgQEAKIG9iai0kKENPTkZJR19EVU1NWSkgKz0gZHVtbXkubwogb2JqLSQoQ09ORklHX0lGQikgKz0gaWZiLm8KIG9iai0kKENPTkZJR19NQUNWTEFOKSArPSBtYWN2bGFuLm8KK29iai0kKENPTkZJR19NQUNWVEFQKSArPSBtYWN2dGFwLm8KIG9iai0kKENPTkZJR19ERTYwMCkgKz0gZGU2MDAubwogb2JqLSQoQ09ORklHX0RFNjIwKSArPSBkZTYyMC5vCiBvYmotJChDT05GSUdfTEFOQ0UpICs9IGxhbmNlLm8KQEAgLTI0Niw2ICsyNTAsNyBAQAogb2JqLSQoQ09ORklHX01MWDRfQ09SRSkgKz0gbWx4NC8KIG9iai0kKENPTkZJR19FTkMyOEo2MCkgKz0gZW5jMjhqNjAubwogb2JqLSQoQ09ORklHX0VUSE9DKSArPSBldGhvYy5vCitvYmotJChDT05GSUdfR1JFVEgpICs9IGdyZXRoLm8KIAogb2JqLSQoQ09ORklHX1hURU5TQV9YVDIwMDBfU09OSUMpICs9IHh0c29uaWMubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hMjA2NS5jIGIvZHJpdmVycy9uZXQvYTIwNjUuYwppbmRleCBiN2VjMDM2Li5iZDRkODI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hMjA2NS5jCisrKyBiL2RyaXZlcnMvbmV0L2EyMDY1LmMKQEAgLTYwMyw5ICs2MDMsOCBAQAogCXN0cnVjdCBsYW5jZV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9sYXRpbGUgc3RydWN0IGxhbmNlX2luaXRfYmxvY2sgKmliID0gbHAtPmluaXRfYmxvY2s7CiAJdm9sYXRpbGUgdTE2ICptY2FzdF90YWJsZSA9ICh1MTYgKikmaWItPmZpbHRlcjsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaT1kZXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJY2hhciAqYWRkcnM7Ci0JaW50IGk7CiAJdTMyIGNyYzsKIAogCS8qIHNldCBhbGwgbXVsdGljYXN0IGJpdHMgKi8KQEAgLTYxOSw5ICs2MTgsOCBAQAogCWliLT5maWx0ZXIgWzFdID0gMDsKIAogCS8qIEFkZCBhZGRyZXNzZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrKXsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogCQlhZGRycyA9IGRtaS0+ZG1pX2FkZHI7Ci0JCWRtaSAgID0gZG1pLT5uZXh0OwogCiAJCS8qIG11bHRpY2FzdCBhZGRyZXNzPyAqLwogCQlpZiAoISgqYWRkcnMgJiAxKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FjZW5pYy5jIGIvZHJpdmVycy9uZXQvYWNlbmljLmMKaW5kZXggZDgyYTlhOS4uNGFlNzUwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYWNlbmljLmMKKysrIGIvZHJpdmVycy9uZXQvYWNlbmljLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NHSV9BQ0VOSUMJMHgwMDA5CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFjZW5pY19wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYWNlbmljX3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9BTFRFT04sIFBDSV9ERVZJQ0VfSURfQUxURU9OX0FDRU5JQ19GSUJSRSwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ORVRXT1JLX0VUSEVSTkVUIDw8IDgsIDB4ZmZmZjAwLCB9LAogCXsgUENJX1ZFTkRPUl9JRF9BTFRFT04sIFBDSV9ERVZJQ0VfSURfQUxURU9OX0FDRU5JQ19DT1BQRVIsCkBAIC0yODQ1LDcgKzI4NDUsNyBAQAogCSAqIHNldCB0aGUgZW50aXJlIG11bHRpY2FzdCBsaXN0IGF0IGEgdGltZSBhbmQga2VlcGluZyB0cmFjayBvZgogCSAqIGl0IGhlcmUgaXMgZ29pbmcgdG8gYmUgbWVzc3kuCiAJICovCi0JaWYgKChkZXYtPm1jX2NvdW50KSAmJiAhKGFwLT5tY2FzdF9hbGwpKSB7CisJaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSAmJiAhYXAtPm1jYXN0X2FsbCkgewogCQljbWQuZXZ0ID0gQ19TRVRfTVVMVElDQVNUX01PREU7CiAJCWNtZC5jb2RlID0gQ19DX01DQVNUX0VOQUJMRTsKIAkJY21kLmlkeCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hbWQ4MTExZS5jIGIvZHJpdmVycy9uZXQvYW1kODExMWUuYwppbmRleCA3NjZhYWJmLi5iOGE1OWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hbWQ4MTExZS5jCisrKyBiL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogbW9kdWxlX3BhcmFtX2FycmF5KGR5bmFtaWNfaXBnLCBib29sLCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZHluYW1pY19pcGcsICJFbmFibGUgb3IgRGlzYWJsZSBkeW5hbWljIElQRywgMTogRW5hYmxlLCAwOiBEaXNhYmxlIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhbWQ4MTExZV9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYW1kODExMWVfcGNpX3RibCkgPSB7CiAKIAl7IFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRDgxMTFFXzc0NjIsCiAJIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDBVTCB9LApAQCAtMTE3Niw4ICsxMTc2LDcgQEAKIAkJCS8qIFNjaGVkdWxlIGEgcG9sbGluZyByb3V0aW5lICovCiAJCQlfX25hcGlfc2NoZWR1bGUoJmxwLT5uYXBpKTsKIAkJfSBlbHNlIGlmIChpbnRyZW4wICYgUklOVEVOMCkgewotCQkJcHJpbnRrKCIqKioqKioqKioqKipEcml2ZXIgYnVnISBcCi0JCQkJaW50ZXJydXB0IHdoaWxlIGluIHBvbGxcbiIpOworCQkJcHJpbnRrKCIqKioqKioqKioqKipEcml2ZXIgYnVnISBpbnRlcnJ1cHQgd2hpbGUgaW4gcG9sbFxuIik7CiAJCQkvKiBGaXggYnkgZGlzYWJsZSByZWNlaXZlIGludGVycnVwdHMgKi8KIAkJCXdyaXRlbChSSU5URU4wLCBtbWlvICsgSU5URU4wKTsKIAkJfQpAQCAtMTM3OCwyOCArMTM3NywyOCBAQAogKi8KIHN0YXRpYyB2b2lkIGFtZDgxMTFlX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBkZXZfbWNfbGlzdCogbWNfcHRyOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfcHRyOwogCXN0cnVjdCBhbWQ4MTExZV9wcml2ICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdTMyIG1jX2ZpbHRlclsyXSA7Ci0JaW50IGksYml0X251bTsKKwlpbnQgYml0X251bTsKKwogCWlmKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQyl7CiAJCXdyaXRlbCggVkFMMiB8IFBST00sIGxwLT5tbWlvICsgQ01EMik7CiAJCXJldHVybjsKIAl9CiAJZWxzZQogCQl3cml0ZWwoIFBST00sIGxwLT5tbWlvICsgQ01EMik7Ci0JaWYoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fCBkZXYtPm1jX2NvdW50ID4gTUFYX0ZJTFRFUl9TSVpFKXsKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fAorCSAgICBuZXRkZXZfbWNfY291bnQoZGV2KSA+IE1BWF9GSUxURVJfU0laRSkgewogCQkvKiBnZXQgYWxsIG11bHRpY2FzdCBwYWNrZXQgKi8KIAkJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gMHhmZmZmZmZmZjsKLQkJbHAtPm1jX2xpc3QgPSBkZXYtPm1jX2xpc3Q7CiAJCWxwLT5vcHRpb25zIHw9IE9QVElPTl9NVUxUSUNBU1RfRU5BQkxFOwogCQlhbWQ4MTExZV93cml0ZXEoKih1NjQqKW1jX2ZpbHRlcixscC0+bW1pbyArIExBRFJGKTsKIAkJcmV0dXJuOwogCX0KLQlpZiggZGV2LT5tY19jb3VudCA9PSAwICl7CisJaWYgKG5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCS8qIGdldCBvbmx5IG93biBwYWNrZXRzICovCiAJCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDA7Ci0JCWxwLT5tY19saXN0ID0gTlVMTDsKIAkJbHAtPm9wdGlvbnMgJj0gfk9QVElPTl9NVUxUSUNBU1RfRU5BQkxFOwogCQlhbWQ4MTExZV93cml0ZXEoKih1NjQqKW1jX2ZpbHRlcixscC0+bW1pbyArIExBRFJGKTsKIAkJLyogZGlzYWJsZSBwcm9taXNjb3VzIG1vZGUgKi8KQEAgLTE0MDgsMTAgKzE0MDcsOCBAQAogCX0KIAkvKiBsb2FkIGFsbCB0aGUgbXVsdGljYXN0IGFkZHJlc3NlcyBpbiB0aGUgbG9naWMgZmlsdGVyICovCiAJbHAtPm9wdGlvbnMgfD0gT1BUSU9OX01VTFRJQ0FTVF9FTkFCTEU7Ci0JbHAtPm1jX2xpc3QgPSBkZXYtPm1jX2xpc3Q7CiAJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gMDsKLQlmb3IgKGkgPSAwLCBtY19wdHIgPSBkZXYtPm1jX2xpc3Q7IG1jX3B0ciAmJiBpIDwgZGV2LT5tY19jb3VudDsKLQkJICAgICBpKyssIG1jX3B0ciA9IG1jX3B0ci0+bmV4dCkgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jX3B0ciwgZGV2KSB7CiAJCWJpdF9udW0gPSAoZXRoZXJfY3JjX2xlKEVUSF9BTEVOLCBtY19wdHItPmRtaV9hZGRyKSA+PiAyNikgJiAweDNmOwogCQltY19maWx0ZXJbYml0X251bSA+PiA1XSB8PSAxIDw8IChiaXRfbnVtICYgMzEpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmggYi9kcml2ZXJzL25ldC9hbWQ4MTExZS5oCmluZGV4IDI4YzYwYTcuLmFjMzZlYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FtZDgxMTFlLmgKKysrIGIvZHJpdmVycy9uZXQvYW1kODExMWUuaApAQCAtNzg5LDcgKzc4OSw2IEBACiAJY2hhciBvcGVuZWQ7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAJdW5zaWduZWQgaW50IGRydl9yeF9lcnJvcnM7Ci0Jc3RydWN0IGRldl9tY19saXN0KiBtY19saXN0OwogCXN0cnVjdCBhbWQ4MTExZV9jb2FsZXNjZV9jb25mIGNvYWxfY29uZjsKIAogCXN0cnVjdCBpcGdfaW5mbyAgaXBnX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvbHRwYy5jIGIvZHJpdmVycy9uZXQvYXBwbGV0YWxrL2x0cGMuYwppbmRleCBkYmZiZDNiLi44ZWE0ZWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvbHRwYy5jCisrKyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9sdHBjLmMKQEAgLTExMjUsNyArMTEyNSw2IEBACiAJCXByaW50ayhLRVJOX0lORk8gIkFwcGxlL0ZhcmFsbG9uIExvY2FsVGFsay1QQyBjYXJkIGF0ICUwM3gsIERNQSVkLiAgVXNpbmcgcG9sbGVkIG1vZGUuXG4iLGlvLGRtYSk7CiAKIAlkZXYtPm5ldGRldl9vcHMgPSAmbHRwY19uZXRkZXY7Ci0JZGV2LT5tY19saXN0ID0gTlVMTDsKIAlkZXYtPmJhc2VfYWRkciA9IGlvOwogCWRldi0+aXJxID0gaXJxOwogCWRldi0+ZG1hID0gZG1hOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLXBjaS5jIGIvZHJpdmVycy9uZXQvYXJjbmV0L2NvbTIwMDIwLXBjaS5jCmluZGV4IGRiZjRkZTMuLmI2OGUxZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FyY25ldC9jb20yMDAyMC1wY2kuYworKysgYi9kcml2ZXJzL25ldC9hcmNuZXQvY29tMjAwMjAtcGNpLmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogCWZyZWVfbmV0ZGV2KGRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjb20yMDAyMHBjaV9pZF90YWJsZVtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGNvbTIwMDIwcGNpX2lkX3RhYmxlKSA9IHsKIAl7IDB4MTU3MSwgMHhhMDAxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCiAJeyAweDE1NzEsIDB4YTAwMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAogCXsgMHgxNTcxLCAweGEwMDMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2FyaWFkbmUuYyBiL2RyaXZlcnMvbmV0L2FyaWFkbmUuYwppbmRleCBjMzVhZjNlLi4wOGQ4YmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcmlhZG5lLmMKKysrIGIvZHJpdmVycy9uZXQvYXJpYWRuZS5jCkBAIC0xMjMsOSArMTIzLDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBhcmlhZG5lX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkYXRhKTsKIHN0YXRpYyBpbnQgYXJpYWRuZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYXJpYWRuZV9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0jaWZkZWYgSEFWRV9NVUxUSUNBU1QKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLSNlbmRpZgogCiAKIHN0YXRpYyB2b2lkIG1lbWNweXcodm9sYXRpbGUgdV9zaG9ydCAqZGVzdCwgdV9zaG9ydCAqc3JjLCBpbnQgbGVuKQpAQCAtODIxLDcgKzgxOSw3IEBACiAJbGFuY2UtPlJEUCA9IFBST007CQkvKiBTZXQgcHJvbWlzY3VvdXMgbW9kZSAqLwogICAgIH0gZWxzZSB7CiAJc2hvcnQgbXVsdGljYXN0X3RhYmxlWzRdOwotCWludCBudW1fYWRkcnMgPSBkZXYtPm1jX2NvdW50OworCWludCBudW1fYWRkcnMgPSBuZXRkZXZfbWNfY291bnQoZGV2KTsKIAlpbnQgaTsKIAkvKiBXZSBkb24ndCB1c2UgdGhlIG11bHRpY2FzdCB0YWJsZSwgYnV0IHJlbHkgb24gdXBwZXItbGF5ZXIgZmlsdGVyaW5nLiAqLwogCW1lbXNldChtdWx0aWNhc3RfdGFibGUsIChudW1fYWRkcnMgPT0gMCkgPyAwIDogLTEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMgYi9kcml2ZXJzL25ldC9hcm0vYW03OWM5NjFhLmMKaW5kZXggMTY0YjM3ZS4uZjFmNThjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2FtNzljOTYxYS5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9hbTc5Yzk2MWEuYwpAQCAtMzUxLDEzICszNTEsMTMgQEAKIAlyZXR1cm4gJnByaXYtPnN0YXRzOwogfQogCi1zdGF0aWMgdm9pZCBhbTc5Yzk2MV9tY19oYXNoKHN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pLCB1bnNpZ25lZCBzaG9ydCAqaGFzaCkKK3N0YXRpYyB2b2lkIGFtNzljOTYxX21jX2hhc2goY2hhciAqYWRkciwgdW5zaWduZWQgc2hvcnQgKmhhc2gpCiB7Ci0JaWYgKGRtaS0+ZG1pX2FkZHJsZW4gPT0gRVRIX0FMRU4gJiYgZG1pLT5kbWlfYWRkclswXSAmIDB4MDEpIHsKKwlpZiAoYWRkclswXSAmIDB4MDEpIHsKIAkJaW50IGlkeCwgYml0OwogCQl1MzIgY3JjOwogCi0JCWNyYyA9IGV0aGVyX2NyY19sZShFVEhfQUxFTiwgZG1pLT5kbWlfYWRkcik7CisJCWNyYyA9IGV0aGVyX2NyY19sZShFVEhfQUxFTiwgYWRkcik7CiAKIAkJaWR4ID0gY3JjID4+IDMwOwogCQliaXQgPSAoY3JjID4+IDI2KSAmIDE1OwpAQCAtMzg3LDggKzM4Nyw4IEBACiAKIAkJbWVtc2V0KG11bHRpX2hhc2gsIDB4MDAsIHNpemVvZihtdWx0aV9oYXNoKSk7CiAKLQkJZm9yIChkbWkgPSBkZXYtPm1jX2xpc3Q7IGRtaTsgZG1pID0gZG1pLT5uZXh0KQotCQkJYW03OWM5NjFfbWNfaGFzaChkbWksIG11bHRpX2hhc2gpOworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikKKwkJCWFtNzljOTYxX21jX2hhc2goZG1pLT5kbWlfYWRkciwgbXVsdGlfaGFzaCk7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmNoaXBfbG9jaywgZmxhZ3MpOwpAQCAtNjgwLDcgKzY4MCw3IEBACiAjZW5kaWYKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGFtNzljOTYxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhbTc5Yzk2MV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vYXQ5MV9ldGhlci5jIGIvZHJpdmVycy9uZXQvYXJtL2F0OTFfZXRoZXIuYwppbmRleCBjOGJjNjBhNy4uOGIyM2Q1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2F0OTFfZXRoZXIuYworKysgYi9kcml2ZXJzL25ldC9hcm0vYXQ5MV9ldGhlci5jCkBAIC01NTgsMTQgKzU1OCwxMSBAQAogewogCXN0cnVjdCBkZXZfbWNfbGlzdCAqY3VycjsKIAl1bnNpZ25lZCBsb25nIG1jX2ZpbHRlclsyXTsKLQl1bnNpZ25lZCBpbnQgaSwgYml0bnI7CisJdW5zaWduZWQgaW50IGJpdG5yOwogCiAJbWNfZmlsdGVyWzBdID0gbWNfZmlsdGVyWzFdID0gMDsKIAotCWN1cnIgPSBkZXYtPm1jX2xpc3Q7Ci0JZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgY3VyciA9IGN1cnItPm5leHQpIHsKLQkJaWYgKCFjdXJyKSBicmVhazsJLyogdW5leHBlY3RlZCBlbmQgb2YgbGlzdCAqLwotCisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoY3VyciwgZGV2KSB7CiAJCWJpdG5yID0gaGFzaF9nZXRfaW5kZXgoY3Vyci0+ZG1pX2FkZHIpOwogCQltY19maWx0ZXJbYml0bnIgPj4gNV0gfD0gMSA8PCAoYml0bnIgJiAzMSk7CiAJfQpAQCAtNTkyLDcgKzU4OSw3IEBACiAJCWF0OTFfZW1hY193cml0ZShBVDkxX0VNQUNfSFNILCAtMSk7CiAJCWF0OTFfZW1hY193cml0ZShBVDkxX0VNQUNfSFNMLCAtMSk7CiAJCWNmZyB8PSBBVDkxX0VNQUNfTVRJOwotCX0gZWxzZSBpZiAoZGV2LT5tY19jb3VudCA+IDApIHsJCQkvKiBFbmFibGUgc3BlY2lmaWMgbXVsdGljYXN0cyAqLworCX0gZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKSB7IC8qIEVuYWJsZSBzcGVjaWZpYyBtdWx0aWNhc3RzICovCiAJCWF0OTFldGhlcl9zZXRoYXNodGFibGUoZGV2KTsKIAkJY2ZnIHw9IEFUOTFfRU1BQ19NVEk7CiAJfSBlbHNlIGlmIChkZXYtPmZsYWdzICYgKH5JRkZfQUxMTVVMVEkpKSB7CS8qIERpc2FibGUgYWxsIG11bHRpY2FzdCBtb2RlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvYXJtL2VwOTN4eF9ldGguYwppbmRleCBiMjU0NjdhLi5iZjcyZDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vZXA5M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9lcDkzeHhfZXRoLmMKQEAgLTksNiArOSw4IEBACiAgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjolczogIiBmbXQsIF9fZnVuY19fCisKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjAsOSArMjIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxtYWNoL2VwOTN4eC1yZWdzLmg+Ci0jaW5jbHVkZSA8bWFjaC9wbGF0Zm9ybS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkiZXA5M3h4LWV0aCIKICNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIwLjEiCkBAIC0xODUsNyArMTg3LDQ3IEBACiAjZGVmaW5lIHdydyhlcCwgb2ZmLCB2YWwpCV9fcmF3X3dyaXRldygodmFsKSwgKGVwKS0+YmFzZV9hZGRyICsgKG9mZikpCiAjZGVmaW5lIHdybChlcCwgb2ZmLCB2YWwpCV9fcmF3X3dyaXRlbCgodmFsKSwgKGVwKS0+YmFzZV9hZGRyICsgKG9mZikpCiAKLXN0YXRpYyBpbnQgZXA5M3h4X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgcmVnKTsKK3N0YXRpYyBpbnQgZXA5M3h4X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgcmVnKQoreworCXN0cnVjdCBlcDkzeHhfcHJpdiAqZXAgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBkYXRhOworCWludCBpOworCisJd3JsKGVwLCBSRUdfTUlJQ01ELCBSRUdfTUlJQ01EX1JFQUQgfCAocGh5X2lkIDw8IDUpIHwgcmVnKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCWlmICgocmRsKGVwLCBSRUdfTUlJU1RTKSAmIFJFR19NSUlTVFNfQlVTWSkgPT0gMCkKKwkJCWJyZWFrOworCQltc2xlZXAoMSk7CisJfQorCisJaWYgKGkgPT0gMTApIHsKKwkJcHJfaW5mbygibWRpbyByZWFkIHRpbWVkIG91dFxuIik7CisJCWRhdGEgPSAweGZmZmY7CisJfSBlbHNlIHsKKwkJZGF0YSA9IHJkbChlcCwgUkVHX01JSURBVEEpOworCX0KKworCXJldHVybiBkYXRhOworfQorCitzdGF0aWMgdm9pZCBlcDkzeHhfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgcmVnLCBpbnQgZGF0YSkKK3sKKwlzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaTsKKworCXdybChlcCwgUkVHX01JSURBVEEsIGRhdGEpOworCXdybChlcCwgUkVHX01JSUNNRCwgUkVHX01JSUNNRF9XUklURSB8IChwaHlfaWQgPDwgNSkgfCByZWcpOworCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJaWYgKChyZGwoZXAsIFJFR19NSUlTVFMpICYgUkVHX01JSVNUU19CVVNZKSA9PSAwKQorCQkJYnJlYWs7CisJCW1zbGVlcCgxKTsKKwl9CisKKwlpZiAoaSA9PSAxMCkKKwkJcHJfaW5mbygibWRpbyB3cml0ZSB0aW1lZCBvdXRcbiIpOworfQogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmVwOTN4eF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTIxNywxNCArMjU5LDExIEBACiAJCXJzdGF0LT5yc3RhdDEgPSAwOwogCiAJCWlmICghKHJzdGF0MCAmIFJTVEFUMF9FT0YpKQotCQkJcHJpbnRrKEtFUk5fQ1JJVCAiZXA5M3h4X3J4OiBub3QgZW5kLW9mLWZyYW1lICIKLQkJCQkJICIgJS44eCAlLjh4XG4iLCByc3RhdDAsIHJzdGF0MSk7CisJCQlwcl9jcml0KCJub3QgZW5kLW9mLWZyYW1lICUuOHggJS44eFxuIiwgcnN0YXQwLCByc3RhdDEpOwogCQlpZiAoIShyc3RhdDAgJiBSU1RBVDBfRU9CKSkKLQkJCXByaW50ayhLRVJOX0NSSVQgImVwOTN4eF9yeDogbm90IGVuZC1vZi1idWZmZXIgIgotCQkJCQkgIiAlLjh4ICUuOHhcbiIsIHJzdGF0MCwgcnN0YXQxKTsKKwkJCXByX2NyaXQoIm5vdCBlbmQtb2YtYnVmZmVyICUuOHggJS44eFxuIiwgcnN0YXQwLCByc3RhdDEpOwogCQlpZiAoKHJzdGF0MSAmIFJTVEFUMV9CVUZGRVJfSU5ERVgpID4+IDE2ICE9IGVudHJ5KQotCQkJcHJpbnRrKEtFUk5fQ1JJVCAiZXA5M3h4X3J4OiBlbnRyeSBtaXNtYXRjaCAiCi0JCQkJCSAiICUuOHggJS44eFxuIiwgcnN0YXQwLCByc3RhdDEpOworCQkJcHJfY3JpdCgiZW50cnkgbWlzbWF0Y2ggJS44eCAlLjh4XG4iLCByc3RhdDAsIHJzdGF0MSk7CiAKIAkJaWYgKCEocnN0YXQwICYgUlNUQVQwX1JXRSkpIHsKIAkJCWVwLT5zdGF0cy5yeF9lcnJvcnMrKzsKQEAgLTI0MSw4ICsyODAsNyBAQAogCiAJCWxlbmd0aCA9IHJzdGF0MSAmIFJTVEFUMV9GUkFNRV9MRU5HVEg7CiAJCWlmIChsZW5ndGggPiBNQVhfUEtUX1NJWkUpIHsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiZXA5M3h4X3J4OiBpbnZhbGlkIGxlbmd0aCAiCi0JCQkJCSAiICUuOHggJS44eFxuIiwgcnN0YXQwLCByc3RhdDEpOworCQkJcHJfbm90aWNlKCJpbnZhbGlkIGxlbmd0aCAlLjh4ICUuOHhcbiIsIHJzdGF0MCwgcnN0YXQxKTsKIAkJCWdvdG8gZXJyOwogCQl9CiAKQEAgLTM3MSwxMSArNDA5LDkgQEAKIAkJdHN0YXQtPnRzdGF0MCA9IDA7CiAKIAkJaWYgKHRzdGF0MCAmIFRTVEFUMF9GQSkKLQkJCXByaW50ayhLRVJOX0NSSVQgImVwOTN4eF90eF9jb21wbGV0ZTogZnJhbWUgYWJvcnRlZCAiCi0JCQkJCSAiICUuOHhcbiIsIHRzdGF0MCk7CisJCQlwcl9jcml0KCJmcmFtZSBhYm9ydGVkICUuOHhcbiIsIHRzdGF0MCk7CiAJCWlmICgodHN0YXQwICYgVFNUQVQwX0JVRkZFUl9JTkRFWCkgIT0gZW50cnkpCi0JCQlwcmludGsoS0VSTl9DUklUICJlcDkzeHhfdHhfY29tcGxldGU6IGVudHJ5IG1pc21hdGNoICIKLQkJCQkJICIgJS44eFxuIiwgdHN0YXQwKTsKKwkJCXByX2NyaXQoImVudHJ5IG1pc21hdGNoICUuOHhcbiIsIHRzdGF0MCk7CiAKIAkJaWYgKHRzdGF0MCAmIFRTVEFUMF9UWFdFKSB7CiAJCQlpbnQgbGVuZ3RoID0gZXAtPmRlc2NzLT50ZGVzY1tlbnRyeV0udGRlc2MxICYgMHhmZmY7CkBAIC01MzYsNyArNTcyLDcgQEAKIAl9CiAKIAlpZiAoaSA9PSAxMCkgewotCQlwcmludGsoS0VSTl9DUklUIERSVl9NT0RVTEVfTkFNRSAiOiBodyBmYWlsZWQgdG8gcmVzZXRcbiIpOworCQlwcl9jcml0KCJodyBmYWlsZWQgdG8gcmVzZXRcbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTU4MSw3ICs2MTcsNyBAQAogCX0KIAogCWlmIChpID09IDEwKSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgRFJWX01PRFVMRV9OQU1FICI6IGh3IGZhaWxlZCB0byBzdGFydFxuIik7CisJCXByX2NyaXQoImh3IGZhaWxlZCB0byBzdGFydFxuIik7CiAJCXJldHVybiAxOwogCX0KIApAQCAtNjE3LDcgKzY1Myw3IEBACiAJfQogCiAJaWYgKGkgPT0gMTApCi0JCXByaW50ayhLRVJOX0NSSVQgRFJWX01PRFVMRV9OQU1FICI6IGh3IGZhaWxlZCB0byByZXNldFxuIik7CisJCXByX2NyaXQoImh3IGZhaWxlZCB0byByZXNldFxuIik7CiB9CiAKIHN0YXRpYyBpbnQgZXA5M3h4X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTY4MSw0OCArNzE3LDYgQEAKIAlyZXR1cm4gZ2VuZXJpY19taWlfaW9jdGwoJmVwLT5taWksIGRhdGEsIGNtZCwgTlVMTCk7CiB9CiAKLXN0YXRpYyBpbnQgZXA5M3h4X21kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgcmVnKQotewotCXN0cnVjdCBlcDkzeHhfcHJpdiAqZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBkYXRhOwotCWludCBpOwotCi0Jd3JsKGVwLCBSRUdfTUlJQ01ELCBSRUdfTUlJQ01EX1JFQUQgfCAocGh5X2lkIDw8IDUpIHwgcmVnKTsKLQotCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCWlmICgocmRsKGVwLCBSRUdfTUlJU1RTKSAmIFJFR19NSUlTVFNfQlVTWSkgPT0gMCkKLQkJCWJyZWFrOwotCQltc2xlZXAoMSk7Ci0JfQotCi0JaWYgKGkgPT0gMTApIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTU9EVUxFX05BTUUgIjogbWRpbyByZWFkIHRpbWVkIG91dFxuIik7Ci0JCWRhdGEgPSAweGZmZmY7Ci0JfSBlbHNlIHsKLQkJZGF0YSA9IHJkbChlcCwgUkVHX01JSURBVEEpOwotCX0KLQotCXJldHVybiBkYXRhOwotfQotCi1zdGF0aWMgdm9pZCBlcDkzeHhfbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgcmVnLCBpbnQgZGF0YSkKLXsKLQlzdHJ1Y3QgZXA5M3h4X3ByaXYgKmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaTsKLQotCXdybChlcCwgUkVHX01JSURBVEEsIGRhdGEpOwotCXdybChlcCwgUkVHX01JSUNNRCwgUkVHX01JSUNNRF9XUklURSB8IChwaHlfaWQgPDwgNSkgfCByZWcpOwotCi0JZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKLQkJaWYgKChyZGwoZXAsIFJFR19NSUlTVFMpICYgUkVHX01JSVNUU19CVVNZKSA9PSAwKQotCQkJYnJlYWs7Ci0JCW1zbGVlcCgxKTsKLQl9Ci0KLQlpZiAoaSA9PSAxMCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTU9EVUxFX05BTUUgIjogbWRpbyB3cml0ZSB0aW1lZCBvdXRcbiIpOwotfQotCiBzdGF0aWMgdm9pZCBlcDkzeHhfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKIHsKIAlzdHJjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTU9EVUxFX05BTUUpOwpAQCAtODI1LDEyICs4MTksMTkgQEAKIAlzdHJ1Y3QgZXA5M3h4X2V0aF9kYXRhICpkYXRhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGVwOTN4eF9wcml2ICplcDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlpbnQgaXJxOwogCWludCBlcnI7CiAKIAlpZiAocGRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAlkYXRhID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKCFtZW0gfHwgaXJxIDwgMCkKKwkJcmV0dXJuIC1FTlhJTzsKKwogCWRldiA9IGVwOTN4eF9kZXZfYWxsb2MoZGF0YSk7CiAJaWYgKGRldiA9PSBOVUxMKSB7CiAJCWVyciA9IC1FTk9NRU07CkBAIC04NDIsMjMgKzg0MywyMSBAQAogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAotCWVwLT5yZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocGRldi0+cmVzb3VyY2VbMF0uc3RhcnQsCi0JCQlwZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDEsCi0JCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJZXAtPnJlcyA9IHJlcXVlc3RfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSksCisJCQkJICAgICBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CiAJaWYgKGVwLT5yZXMgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb3VsZCBub3QgcmVzZXJ2ZSBtZW1vcnkgcmVnaW9uXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0OwogCX0KIAotCWVwLT5iYXNlX2FkZHIgPSBpb3JlbWFwKHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0LAotCQkJcGRldi0+cmVzb3VyY2VbMF0uZW5kIC0gcGRldi0+cmVzb3VyY2VbMF0uc3RhcnQpOworCWVwLT5iYXNlX2FkZHIgPSBpb3JlbWFwKG1lbS0+c3RhcnQsIHJlc291cmNlX3NpemUobWVtKSk7CiAJaWYgKGVwLT5iYXNlX2FkZHIgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gaW9yZW1hcCBldGhlcm5ldCByZWdpc3RlcnNcbiIpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGVycl9vdXQ7CiAJfQotCWVwLT5pcnEgPSBwZGV2LT5yZXNvdXJjZVsxXS5zdGFydDsKKwllcC0+aXJxID0gaXJxOwogCiAJZXAtPm1paS5waHlfaWQgPSBkYXRhLT5waHlfaWQ7CiAJZXAtPm1paS5waHlfaWRfbWFzayA9IDB4MWY7CkBAIC04NzcsMTEgKzg3Niw4IEBACiAJCWdvdG8gZXJyX291dDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogZXA5M3h4IG9uLWNoaXAgZXRoZXJuZXQsIElSUSAlZCwgIgotCQkJICIlLjJ4OiUuMng6JS4yeDolLjJ4OiUuMng6JS4yeC5cbiIsIGRldi0+bmFtZSwKLQkJCWVwLT5pcnEsIGRhdGEtPmRldl9hZGRyWzBdLCBkYXRhLT5kZXZfYWRkclsxXSwKLQkJCWRhdGEtPmRldl9hZGRyWzJdLCBkYXRhLT5kZXZfYWRkclszXSwKLQkJCWRhdGEtPmRldl9hZGRyWzRdLCBkYXRhLT5kZXZfYWRkcls1XSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGVwOTN4eCBvbi1jaGlwIGV0aGVybmV0LCBJUlEgJWQsICVwTVxuIiwKKwkJCWRldi0+bmFtZSwgZXAtPmlycSwgZGV2LT5kZXZfYWRkcik7CiAKIAlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2V0aGVyMy5jIGIvZHJpdmVycy9uZXQvYXJtL2V0aGVyMy5jCmluZGV4IDFmN2E2OWMuLmQ5ZGU5YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9ldGhlcjMuYworKysgYi9kcml2ZXJzL25ldC9hcm0vZXRoZXIzLmMKQEAgLTQ2Myw3ICs0NjMsNyBAQAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJLyogcHJvbWlzY3VvdXMgbW9kZSAqLwogCQlwcml2KGRldiktPnJlZ3MuY29uZmlnMSB8PSBDRkcxX1JFQ1ZQUk9NSVNDOwotCX0gZWxzZSBpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fCBkZXYtPm1jX2NvdW50KSB7CisJfSBlbHNlIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8ICFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQlwcml2KGRldiktPnJlZ3MuY29uZmlnMSB8PSBDRkcxX1JFQ1ZTUEVDQlJNVUxUSTsKIAl9IGVsc2UKIAkJcHJpdihkZXYpLT5yZWdzLmNvbmZpZzEgfD0gQ0ZHMV9SRUNWU1BFQ0JST0FEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYyBiL2RyaXZlcnMvbmV0L2FybS9peHA0eHhfZXRoLmMKaW5kZXggYzNkZmJkZC4uNmUyYWUxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL2l4cDR4eF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hcm0vaXhwNHh4X2V0aC5jCkBAIC03MzUsMjIgKzczNSwyNSBAQAogc3RhdGljIHZvaWQgZXRoX3NldF9tY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHBvcnQgKnBvcnQgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0ID0gZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwogCXU4IGRpZmZzW0VUSF9BTEVOXSwgKmFkZHI7Ci0JaW50IGNudCA9IGRldi0+bWNfY291bnQsIGk7CisJaW50IGk7CiAKLQlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgfHwgIW1jbGlzdCB8fCAhY250KSB7CisJaWYgKChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8IG5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCV9fcmF3X3dyaXRlbChERUZBVUxUX1JYX0NOVFJMMCAmIH5SWF9DTlRSTDBfQUREUl9GTFRSX0VOLAogCQkJICAgICAmcG9ydC0+cmVncy0+cnhfY29udHJvbFswXSk7CiAJCXJldHVybjsKIAl9CiAKIAltZW1zZXQoZGlmZnMsIDAsIEVUSF9BTEVOKTsKLQlhZGRyID0gbWNsaXN0LT5kbWlfYWRkcjsgLyogZmlyc3QgTUFDIGFkZHJlc3MgKi8KIAotCXdoaWxlICgtLWNudCAmJiAobWNsaXN0ID0gbWNsaXN0LT5uZXh0KSkKKwlhZGRyID0gTlVMTDsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgeworCQlpZiAoIWFkZHIpCisJCQlhZGRyID0gbWNsaXN0LT5kbWlfYWRkcjsgLyogZmlyc3QgTUFDIGFkZHJlc3MgKi8KIAkJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCiAJCQlkaWZmc1tpXSB8PSBhZGRyW2ldIF4gbWNsaXN0LT5kbWlfYWRkcltpXTsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykgewogCQlfX3Jhd193cml0ZWwoYWRkcltpXSwgJnBvcnQtPnJlZ3MtPm1jYXN0X2FkZHJbaV0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jIGIvZHJpdmVycy9uZXQvYXJtL2tzODY5NW5ldC5jCmluZGV4IGJlMjU2YjMuLjhjYTYzOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FybS9rczg2OTVuZXQuYworKysgYi9kcml2ZXJzL25ldC9hcm0va3M4Njk1bmV0LmMKQEAgLTMyNywyNSArMzI3LDI0IEBACiAgKi8KIHN0YXRpYyB2b2lkCiBrczg2OTVfaW5pdF9wYXJ0aWFsX211bHRpY2FzdChzdHJ1Y3Qga3M4Njk1X3ByaXYgKmtzcCwKLQkJCSAgICAgIHN0cnVjdCBkZXZfbWNfbGlzdCAqYWRkciwKLQkJCSAgICAgIGludCBucl9hZGRyKQorCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7CiAJdTMyIGxvdywgaGlnaDsKIAlpbnQgaTsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAotCWZvciAoaSA9IDA7IGkgPCBucl9hZGRyOyBpKyssIGFkZHIgPSBhZGRyLT5uZXh0KSB7Ci0JCS8qIFJhbiBvdXQgb2YgYWRkcmVzc2VzPyAqLwotCQlpZiAoIWFkZHIpCi0JCQlicmVhazsKKwlpID0gMDsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIG5kZXYpIHsKIAkJLyogUmFuIG91dCBvZiBzcGFjZSBpbiBjaGlwPyAqLwogCQlCVUdfT04oaSA9PSBLUzg2OTVfTlJfQUREUkVTU0VTKTsKIAotCQlsb3cgPSAoYWRkci0+ZG1pX2FkZHJbMl0gPDwgMjQpIHwgKGFkZHItPmRtaV9hZGRyWzNdIDw8IDE2KSB8Ci0JCQkoYWRkci0+ZG1pX2FkZHJbNF0gPDwgOCkgfCAoYWRkci0+ZG1pX2FkZHJbNV0pOwotCQloaWdoID0gKGFkZHItPmRtaV9hZGRyWzBdIDw8IDgpIHwgKGFkZHItPmRtaV9hZGRyWzFdKTsKKwkJbG93ID0gKGRtaS0+ZG1pX2FkZHJbMl0gPDwgMjQpIHwgKGRtaS0+ZG1pX2FkZHJbM10gPDwgMTYpIHwKKwkJICAgICAgKGRtaS0+ZG1pX2FkZHJbNF0gPDwgOCkgfCAoZG1pLT5kbWlfYWRkcls1XSk7CisJCWhpZ2ggPSAoZG1pLT5kbWlfYWRkclswXSA8PCA4KSB8IChkbWktPmRtaV9hZGRyWzFdKTsKIAogCQlrczg2OTVfd3JpdGVyZWcoa3NwLCBLUzg2OTVfQUFMXyhpKSwgbG93KTsKIAkJa3M4Njk1X3dyaXRlcmVnKGtzcCwgS1M4Njk1X0FBSF8oaSksIEFBSF9FIHwgaGlnaCk7CisJCWkrKzsKIAl9CiAKIAkvKiBDbGVhciB0aGUgcmVtYWluaW5nIEFkZGl0aW9uYWwgU3RhdGlvbiBBZGRyZXNzZXMgKi8KQEAgLTEyMDcsNyArMTIwNiw3IEBACiAJaWYgKG5kZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CiAJCS8qIGVuYWJsZSBhbGwgbXVsdGljYXN0IG1vZGUgKi8KIAkJY3RybCB8PSBEUlhDX1JNOwotCX0gZWxzZSBpZiAobmRldi0+bWNfY291bnQgPiBLUzg2OTVfTlJfQUREUkVTU0VTKSB7CisJfSBlbHNlIGlmIChuZXRkZXZfbWNfY291bnQobmRldikgPiBLUzg2OTVfTlJfQUREUkVTU0VTKSB7CiAJCS8qIG1vcmUgc3BlY2lmaWMgbXVsdGljYXN0IGFkZHJlc3NlcyB0aGFuIGNhbiBiZQogCQkgKiBoYW5kbGVkIGluIGhhcmR3YXJlCiAJCSAqLwpAQCAtMTIxNSw4ICsxMjE0LDcgQEAKIAl9IGVsc2UgewogCQkvKiBlbmFibGUgc3BlY2lmaWMgbXVsdGljYXN0cyAqLwogCQljdHJsICY9IH5EUlhDX1JNOwotCQlrczg2OTVfaW5pdF9wYXJ0aWFsX211bHRpY2FzdChrc3AsIG5kZXYtPm1jX2xpc3QsCi0JCQkJCSAgICAgIG5kZXYtPm1jX2NvdW50KTsKKwkJa3M4Njk1X2luaXRfcGFydGlhbF9tdWx0aWNhc3Qoa3NwLCBuZGV2KTsKIAl9CiAKIAlrczg2OTVfd3JpdGVyZWcoa3NwLCBLUzg2OTVfRFJYQywgY3RybCk7CkBAIC0xMzM1LDcgKzEzMzMsNiBAQAogCiAJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKIAluYXBpX2Rpc2FibGUoJmtzcC0+bmFwaSk7Ci0JbmV0aWZfY2Fycmllcl9vZmYobmRldik7CiAKIAlrczg2OTVfc2h1dGRvd24oa3NwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXJtL3c5MHA5MTBfZXRoZXIuYyBiL2RyaXZlcnMvbmV0L2FybS93OTBwOTEwX2V0aGVyLmMKaW5kZXggYjdmMzg2Ni4uZmViZDgxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXJtL3c5MHA5MTBfZXRoZXIuYworKysgYi9kcml2ZXJzL25ldC9hcm0vdzkwcDkxMF9ldGhlci5jCkBAIC04NTgsMTAgKzg1OCwxMCBAQAogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKIAkJcnhfbW9kZSA9IENBTUNNUl9BVVAgfCBDQU1DTVJfQU1QIHwgQ0FNQ01SX0FCUCB8IENBTUNNUl9FQ01QOwotCWVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCBkZXYtPm1jX2xpc3QpCi0JCQlyeF9tb2RlID0gQ0FNQ01SX0FNUCB8IENBTUNNUl9BQlAgfCBDQU1DTVJfRUNNUDsKLQkJZWxzZQotCQkJCXJ4X21vZGUgPSBDQU1DTVJfRUNNUCB8IENBTUNNUl9BQlA7CisJZWxzZSBpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8ICFuZXRkZXZfbWNfZW1wdHkoZGV2KSkKKwkJcnhfbW9kZSA9IENBTUNNUl9BTVAgfCBDQU1DTVJfQUJQIHwgQ0FNQ01SX0VDTVA7CisJZWxzZQorCQlyeF9tb2RlID0gQ0FNQ01SX0VDTVAgfCBDQU1DTVJfQUJQOwogCV9fcmF3X3dyaXRlbChyeF9tb2RlLCBldGhlci0+cmVnICsgUkVHX0NBTUNNUik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0MTcwMC5jIGIvZHJpdmVycy9uZXQvYXQxNzAwLmMKaW5kZXggYjE0ZjQ3OS4uMzA5ODQzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXQxNzAwLmMKKysrIGIvZHJpdmVycy9uZXQvYXQxNzAwLmMKQEAgLTgzOSwyMSArODM5LDE5IEBACiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQltZW1zZXQobWNfZmlsdGVyLCAweGZmLCBzaXplb2YobWNfZmlsdGVyKSk7CiAJCW91dGIoMywgaW9hZGRyICsgUlhfTU9ERSk7CS8qIEVuYWJsZSBwcm9taXNjdW91cyBtb2RlICovCi0JfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gTUNfRklMVEVSQlJFQUsgfHwKKwl9IGVsc2UgaWYgKG5ldGRldl9tY19jb3VudChkZXYpID4gTUNfRklMVEVSQlJFQUsgfHwKIAkJCSAgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkvKiBUb28gbWFueSB0byBmaWx0ZXIgcGVyZmVjdGx5IC0tIGFjY2VwdCBhbGwgbXVsdGljYXN0cy4gKi8KIAkJbWVtc2V0KG1jX2ZpbHRlciwgMHhmZiwgc2l6ZW9mKG1jX2ZpbHRlcikpOwogCQlvdXRiKDIsIGlvYWRkciArIFJYX01PREUpOwkvKiBVc2Ugbm9ybWFsIG1vZGUuICovCi0JfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID09IDApIHsKKwl9IGVsc2UgaWYgKG5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCW1lbXNldChtY19maWx0ZXIsIDB4MDAsIHNpemVvZihtY19maWx0ZXIpKTsKIAkJb3V0YigxLCBpb2FkZHIgKyBSWF9NT0RFKTsJLyogSWdub3JlIGFsbW9zdCBhbGwgbXVsdGljYXN0cy4gKi8KIAl9IGVsc2UgewogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKLQkJaW50IGk7CiAKIAkJbWVtc2V0KG1jX2ZpbHRlciwgMCwgc2l6ZW9mKG1jX2ZpbHRlcikpOwotCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKLQkJCSBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQkJdW5zaWduZWQgaW50IGJpdCA9CiAJCQkJZXRoZXJfY3JjX2xlKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSA+PiAyNjsKIAkJCW1jX2ZpbHRlcltiaXQgPj4gM10gfD0gKDEgPDwgYml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0YXJpbGFuY2UuYyBiL2RyaXZlcnMvbmV0L2F0YXJpbGFuY2UuYwppbmRleCBjYzllZDg2Li4yODBjZmZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGFyaWxhbmNlLmMKKysrIGIvZHJpdmVycy9uZXQvYXRhcmlsYW5jZS5jCkBAIC0xMDk3LDcgKzEwOTcsNyBAQAogCQlSRUdBKCBDU1IxNSApID0gMHg4MDAwOyAvKiBTZXQgcHJvbWlzY3VvdXMgbW9kZSAqLwogCX0gZWxzZSB7CiAJCXNob3J0IG11bHRpY2FzdF90YWJsZVs0XTsKLQkJaW50IG51bV9hZGRycyA9IGRldi0+bWNfY291bnQ7CisJCWludCBudW1fYWRkcnMgPSBuZXRkZXZfbWNfY291bnQoZGV2KTsKIAkJaW50IGk7CiAJCS8qIFdlIGRvbid0IHVzZSB0aGUgbXVsdGljYXN0IHRhYmxlLCBidXQgcmVseSBvbiB1cHBlci1sYXllcgogCQkgKiBmaWx0ZXJpbmcuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxYy5oIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWMuaAppbmRleCBlZmU1NDM1Li44NGFlOTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxYy5oCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjLmgKQEAgLTMxMyw2ICszMTMsOSBAQAogZW51bSBhdGwxY19uaWNfdHlwZSB7CiAJYXRocl9sMWMgPSAwLAogCWF0aHJfbDJjID0gMSwKKwlhdGhyX2wyY19iLAorCWF0aHJfbDJjX2IyLAorCWF0aHJfbDFkLAogfTsKIAogZW51bSBhdGwxY190cmFuc19xdWV1ZSB7CkBAIC00MjYsOCArNDI5LDEyIEBACiAjZGVmaW5lIEFUTDFDX0FTUE1fTDFfU1VQUE9SVAkJMHgwMTAwCiAjZGVmaW5lIEFUTDFDX0FTUE1fQ1RSTF9NT04JCTB4MDIwMAogI2RlZmluZSBBVEwxQ19ISUJfRElTQUJMRQkJMHgwNDAwCi0jZGVmaW5lIEFUTDFDX0xJTktfQ0FQXzEwMDBNCQkweDA4MDAKLSNkZWZpbmUgQVRMMUNfRlBHQV9WRVJTSU9OCQkweDgwMDAKKyNkZWZpbmUgQVRMMUNfQVBTX01PREVfRU5BQkxFICAgICAgICAgICAweDA4MDAKKyNkZWZpbmUgQVRMMUNfTElOS19FWFRfU1lOQyAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgQVRMMUNfQ0xLX0dBVElOR19FTiAgICAgICAgICAgICAweDIwMDAKKyNkZWZpbmUgQVRMMUNfRlBHQV9WRVJTSU9OICAgICAgICAgICAgICAweDgwMDAKKwl1MTYgbGlua19jYXBfZmxhZ3M7CisjZGVmaW5lIEFUTDFDX0xJTktfQ0FQXzEwMDBNCQkweDAwMDEKIAl1MTYgY21iX3RwZDsKIAl1MTYgY21iX3JyZDsKIAl1MTYgY21iX3J4X3RpbWVyOyAvKiAydXMgcmVzb2x1dGlvbiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfZXRodG9vbC5jCmluZGV4IDliMWUwZWEuLjYxYTBmMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ldGh0b29sLmMKQEAgLTM3LDcgKzM3LDcgQEAKIAkJCSAgIFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsIHwKIAkJCSAgIFNVUFBPUlRFRF9BdXRvbmVnICAgICAgIHwKIAkJCSAgIFNVUFBPUlRFRF9UUCk7Ci0JaWYgKGh3LT5jdHJsX2ZsYWdzICYgQVRMMUNfTElOS19DQVBfMTAwME0pCisJaWYgKGh3LT5saW5rX2NhcF9mbGFncyAmIEFUTDFDX0xJTktfQ0FQXzEwMDBNKQogCQllY21kLT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsOwogCiAJZWNtZC0+YWR2ZXJ0aXNpbmcgPSBBRFZFUlRJU0VEX1RQOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfaHcuYyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX2h3LmMKaW5kZXggM2U2OWI5NC4uZjEzODlkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfaHcuYworKysgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ody5jCkBAIC03MCwxNyArNzAsMzkgQEAKIAl1MzIgb3RwX2N0cmxfZGF0YTsKIAl1MzIgdHdzaV9jdHJsX2RhdGE7CiAJdTggIGV0aF9hZGRyW0VUSF9BTEVOXTsKKwl1MTYgcGh5X2RhdGE7CisJYm9vbCByYWlzZV92b2wgPSBmYWxzZTsKIAogCS8qIGluaXQgKi8KIAlhZGRyWzBdID0gYWRkclsxXSA9IDA7CiAJQVRfUkVBRF9SRUcoaHcsIFJFR19PVFBfQ1RSTCwgJm90cF9jdHJsX2RhdGEpOwogCWlmIChhdGwxY19jaGVja19lZXByb21fZXhpc3QoaHcpKSB7Ci0JCS8qIEVuYWJsZSBPVFAgQ0xLICovCi0JCWlmICghKG90cF9jdHJsX2RhdGEgJiBPVFBfQ1RSTF9DTEtfRU4pKSB7Ci0JCQlvdHBfY3RybF9kYXRhIHw9IE9UUF9DVFJMX0NMS19FTjsKLQkJCUFUX1dSSVRFX1JFRyhodywgUkVHX09UUF9DVFJMLCBvdHBfY3RybF9kYXRhKTsKLQkJCUFUX1dSSVRFX0ZMVVNIKGh3KTsKLQkJCW1zbGVlcCgxKTsKKwkJaWYgKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxYyB8fCBody0+bmljX3R5cGUgPT0gYXRocl9sMmNfYikgeworCQkJLyogRW5hYmxlIE9UUCBDTEsgKi8KKwkJCWlmICghKG90cF9jdHJsX2RhdGEgJiBPVFBfQ1RSTF9DTEtfRU4pKSB7CisJCQkJb3RwX2N0cmxfZGF0YSB8PSBPVFBfQ1RSTF9DTEtfRU47CisJCQkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfT1RQX0NUUkwsIG90cF9jdHJsX2RhdGEpOworCQkJCUFUX1dSSVRFX0ZMVVNIKGh3KTsKKwkJCQltc2xlZXAoMSk7CisJCQl9CisJCX0KKworCQlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IgfHwKKwkJICAgIGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyY19iMiB8fAorCQkgICAgaHctPm5pY190eXBlID09IGF0aHJfbDFkKSB7CisJCQlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0FERFIsIDB4MDApOworCQkJaWYgKGF0bDFjX3JlYWRfcGh5X3JlZyhodywgTUlJX0RCR19EQVRBLCAmcGh5X2RhdGEpKQorCQkJCWdvdG8gb3V0OworCQkJcGh5X2RhdGEgJj0gMHhGRjdGOworCQkJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19EQVRBLCBwaHlfZGF0YSk7CisKKwkJCWF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfQUREUiwgMHgzQik7CisJCQlpZiAoYXRsMWNfcmVhZF9waHlfcmVnKGh3LCBNSUlfREJHX0RBVEEsICZwaHlfZGF0YSkpCisJCQkJZ290byBvdXQ7CisJCQlwaHlfZGF0YSB8PSAweDg7CisJCQlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0RBVEEsIHBoeV9kYXRhKTsKKwkJCXVkZWxheSgyMCk7CisJCQlyYWlzZV92b2wgPSB0cnVlOwogCQl9CiAKIAkJQVRfUkVBRF9SRUcoaHcsIFJFR19UV1NJX0NUUkwsICZ0d3NpX2N0cmxfZGF0YSk7CkBAIC05NiwxMSArMTE4LDMxIEBACiAJCQlyZXR1cm4gLTE7CiAJfQogCS8qIERpc2FibGUgT1RQX0NMSyAqLwotCWlmIChvdHBfY3RybF9kYXRhICYgT1RQX0NUUkxfQ0xLX0VOKSB7Ci0JCW90cF9jdHJsX2RhdGEgJj0gfk9UUF9DVFJMX0NMS19FTjsKLQkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfT1RQX0NUUkwsIG90cF9jdHJsX2RhdGEpOwotCQlBVF9XUklURV9GTFVTSChodyk7Ci0JCW1zbGVlcCgxKTsKKwlpZiAoKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxYyB8fCBody0+bmljX3R5cGUgPT0gYXRocl9sMmMpKSB7CisJCWlmIChvdHBfY3RybF9kYXRhICYgT1RQX0NUUkxfQ0xLX0VOKSB7CisJCQlvdHBfY3RybF9kYXRhICY9IH5PVFBfQ1RSTF9DTEtfRU47CisJCQlBVF9XUklURV9SRUcoaHcsIFJFR19PVFBfQ1RSTCwgb3RwX2N0cmxfZGF0YSk7CisJCQlBVF9XUklURV9GTFVTSChodyk7CisJCQltc2xlZXAoMSk7CisJCX0KKwl9CisJaWYgKHJhaXNlX3ZvbCkgeworCQlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IgfHwKKwkJICAgIGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyY19iMiB8fAorCQkgICAgaHctPm5pY190eXBlID09IGF0aHJfbDFkKSB7CisJCQlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0FERFIsIDB4MDApOworCQkJaWYgKGF0bDFjX3JlYWRfcGh5X3JlZyhodywgTUlJX0RCR19EQVRBLCAmcGh5X2RhdGEpKQorCQkJCWdvdG8gb3V0OworCQkJcGh5X2RhdGEgfD0gMHg4MDsKKwkJCWF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgcGh5X2RhdGEpOworCisJCQlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0FERFIsIDB4M0IpOworCQkJaWYgKGF0bDFjX3JlYWRfcGh5X3JlZyhodywgTUlJX0RCR19EQVRBLCAmcGh5X2RhdGEpKQorCQkJCWdvdG8gb3V0OworCQkJcGh5X2RhdGEgJj0gMHhGRkY3OworCQkJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19EQVRBLCBwaHlfZGF0YSk7CisJCQl1ZGVsYXkoMjApOworCQl9CiAJfQogCiAJLyogbWF5YmUgTUFDLWFkZHJlc3MgaXMgZnJvbSBCSU9TICovCkBAIC0xMTQsNiArMTU2LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCitvdXQ6CiAJcmV0dXJuIC0xOwogfQogCkBAIC0zMDcsNyArMzUwLDcgQEAKIAkJbWlpX2Fkdl9kYXRhIHw9IEFEVkVSVElTRV8xMEhBTEYgIHwgQURWRVJUSVNFXzEwRlVMTCB8CiAJCQkJQURWRVJUSVNFXzEwMEhBTEYgfCBBRFZFUlRJU0VfMTAwRlVMTDsKIAotCWlmIChody0+Y3RybF9mbGFncyAmIEFUTDFDX0xJTktfQ0FQXzEwMDBNKSB7CisJaWYgKGh3LT5saW5rX2NhcF9mbGFncyAmIEFUTDFDX0xJTktfQ0FQXzEwMDBNKSB7CiAJCWlmIChody0+YXV0b25lZ19hZHZlcnRpc2VkICYgQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZikKIAkJCW1paV9naWdhX2N0cmxfZGF0YSB8PSBBRFZFUlRJU0VfMTAwMEhBTEY7CiAJCWlmIChody0+YXV0b25lZ19hZHZlcnRpc2VkICYgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCkKQEAgLTM4OSw2ICs0MzIsNyBAQAogewogCXN0cnVjdCBhdGwxY19hZGFwdGVyICphZGFwdGVyID0gaHctPmFkYXB0ZXI7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXUxNiBwaHlfZGF0YTsKIAl1MzIgcGh5X2N0cmxfZGF0YSA9IEdQSFlfQ1RSTF9ERUZBVUxUOwogCXUzMiBtaWlfaWVyX2RhdGEgPSBJRVJfTElOS19VUCB8IElFUl9MSU5LX0RPV047CiAJaW50IGVycjsKQEAgLTQwNCw2ICs0NDgsMjEgQEAKIAlBVF9XUklURV9GTFVTSChodyk7CiAJbXNsZWVwKDEwKTsKIAorCWlmIChody0+bmljX3R5cGUgPT0gYXRocl9sMmNfYikgeworCQlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0FERFIsIDB4MEEpOworCQlhdGwxY19yZWFkX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgJnBoeV9kYXRhKTsKKwkJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19EQVRBLCBwaHlfZGF0YSAmIDB4REZGRik7CisJfQorCisJaWYgKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyY19iIHx8CisJICAgIGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyY19iMiB8fAorCSAgICBody0+bmljX3R5cGUgPT0gYXRocl9sMWQpIHsKKwkJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19BRERSLCAweDNCKTsKKwkJYXRsMWNfcmVhZF9waHlfcmVnKGh3LCBNSUlfREJHX0RBVEEsICZwaHlfZGF0YSk7CisJCWF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgcGh5X2RhdGEgJiAweEZGRjcpOworCQltc2xlZXAoMjApOworCX0KKwogCS8qRW5hYmxlIFBIWSBMaW5rQ2hhbmdlIEludGVycnVwdCAqLwogCWVyciA9IGF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9JRVIsIG1paV9pZXJfZGF0YSk7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfaHcuaCBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX2h3LmgKaW5kZXggYzJjNzM4ZC4uMWVlYjNlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfaHcuaAorKysgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19ody5oCkBAIC01Nyw2ICs1Nyw3IEBACiAjZGVmaW5lIFJFR19MSU5LX0NUUkwJCQkweDY4CiAjZGVmaW5lIExJTktfQ1RSTF9MMFNfRU4JCTB4MDEKICNkZWZpbmUgTElOS19DVFJMX0wxX0VOCQkJMHgwMgorI2RlZmluZSBMSU5LX0NUUkxfRVhUX1NZTkMJCTB4ODAKIAogI2RlZmluZSBSRUdfVlBEX0NBUAkJCTB4NkMKICNkZWZpbmUgVlBEX0NBUF9JRF9NQVNLICAgICAgICAgICAgICAgICAweGZmCkBAIC0xNTYsNiArMTU3LDggQEAKICNkZWZpbmUgUE1fQ1RSTF9QTV9SRVFfVElNRVJfU0hJRlQJMjAKICNkZWZpbmUgUE1fQ1RSTF9MQ0tERVRfVElNRVJfTUFTSwkweDNGCiAjZGVmaW5lIFBNX0NUUkxfTENLREVUX1RJTUVSX1NISUZUCTI0CisjZGVmaW5lIFBNX0NUUkxfRU5fQlVGU19SWF9MMFMJCTB4MTAwMDAwMDAKKyNkZWZpbmUgUE1fQ1RSTF9TQV9ETFlfRU4JCTB4MjAwMDAwMDAKICNkZWZpbmUgUE1fQ1RSTF9NQUNfQVNQTV9DSEsJCTB4NDAwMDAwMDAKICNkZWZpbmUgUE1fQ1RSTF9IT1RSU1QJCQkweDgwMDAwMDAwCiAKQEAgLTMxNCw2ICszMTcsOCBAQAogI2RlZmluZSBNQUNfQ1RSTF9CQ19FTiAgICAgICAgICAgICAgCTB4NDAwMDAwMAogI2RlZmluZSBNQUNfQ1RSTF9EQkcgICAgICAgICAgICAgICAgCTB4ODAwMDAwMAogI2RlZmluZSBNQUNfQ1RSTF9TSU5HTEVfUEFVU0VfRU4JMHgxMDAwMDAwMAorI2RlZmluZSBNQUNfQ1RSTF9IQVNIX0FMR19DUkMzMgkJMHgyMDAwMDAwMAorI2RlZmluZSBNQUNfQ1RSTF9TUEVFRF9NT0RFX1NXCQkweDQwMDAwMDAwCiAKIC8qIE1BQyBJUEcvSUZHIENvbnRyb2wgUmVnaXN0ZXIgICovCiAjZGVmaW5lIFJFR19NQUNfSVBHX0lGRyAgICAgICAgICAgICAJMHgxNDg0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMgYi9kcml2ZXJzL25ldC9hdGwxYy9hdGwxY19tYWluLmMKaW5kZXggMmY0YmU1OS4uNTBkYzUzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRsMWMvYXRsMWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFjL2F0bDFjX21haW4uYwpAQCAtMjEsMTEgKzIxLDE4IEBACiAKICNpbmNsdWRlICJhdGwxYy5oIgogCi0jZGVmaW5lIEFUTDFDX0RSVl9WRVJTSU9OICIxLjAuMC4xLU5BUEkiCisjZGVmaW5lIEFUTDFDX0RSVl9WRVJTSU9OICIxLjAuMC4yLU5BUEkiCiBjaGFyIGF0bDFjX2RyaXZlcl9uYW1lW10gPSAiYXRsMWMiOwogY2hhciBhdGwxY19kcml2ZXJfdmVyc2lvbltdID0gQVRMMUNfRFJWX1ZFUlNJT047CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRUQU5TSUNfTDJDICAgICAgMHgxMDYyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRUQU5TSUNfTDFDICAgICAgMHgxMDYzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRIRVJPU19MMkNfQgkweDIwNjAgLyogQVI4MTUyIHYxLjEgRmFzdCAxMC8xMDAgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVEhFUk9TX0wyQ19CMgkweDIwNjIgLyogQVI4MTUyIHYyLjAgRmFzdCAxMC8xMDAgKi8KKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVEhFUk9TX0wxRAkweDEwNzMgLyogQVI4MTUxIHYxLjAgR2lnYWJpdCAxMDAwICovCisKKyNkZWZpbmUgTDJDQl9WMTAJCQkweGMwCisjZGVmaW5lIEwyQ0JfVjExCQkJMHhjMQorCiAvKgogICogYXRsMWNfcGNpX3RibCAtIFBDSSBEZXZpY2UgSUQgVGFibGUKICAqCkBAIC0zNSw5ICs0MiwxMiBAQAogICogeyBWZW5kb3IgSUQsIERldmljZSBJRCwgU3ViVmVuZG9yIElELCBTdWJEZXZpY2UgSUQsCiAgKiAgIENsYXNzLCBDbGFzcyBNYXNrLCBwcml2YXRlIGRhdGEgKG5vdCB1c2VkKSB9CiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBhdGwxY19wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYXRsMWNfcGNpX3RibCkgPSB7CiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgUENJX0RFVklDRV9JRF9BVFRBTlNJQ19MMUMpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUVEFOU0lDLCBQQ0lfREVWSUNFX0lEX0FUVEFOU0lDX0wyQyl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRUQU5TSUMsIFBDSV9ERVZJQ0VfSURfQVRIRVJPU19MMkNfQil9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRUQU5TSUMsIFBDSV9ERVZJQ0VfSURfQVRIRVJPU19MMkNfQjIpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUVEFOU0lDLCBQQ0lfREVWSUNFX0lEX0FUSEVST1NfTDFEKX0sCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwogCXsgMCB9CiB9OwpAQCAtMzY3LDcgKzM3Nyw3IEBACiAJQVRfV1JJVEVfUkVHX0FSUkFZKGh3LCBSRUdfUlhfSEFTSF9UQUJMRSwgMSwgMCk7CiAKIAkvKiBjb21vdXRlIG1jIGFkZHJlc3NlcycgaGFzaCB2YWx1ZSAsYW5kIHB1dCBpdCBpbnRvIGhhc2ggdGFibGUgKi8KLQlmb3IgKG1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsgbWNfcHRyOyBtY19wdHIgPSBtY19wdHItPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19wdHIsIG5ldGRldikgewogCQloYXNoX3ZhbHVlID0gYXRsMWNfaGFzaF9tY19hZGRyKGh3LCBtY19wdHItPmRtaV9hZGRyKTsKIAkJYXRsMWNfaGFzaF9zZXQoaHcsIGhhc2hfdmFsdWUpOwogCX0KQEAgLTU5MywxMSArNjAzLDE4IEBACiAJY2FzZSBQQ0lfREVWSUNFX0lEX0FUVEFOU0lDX0wyQzoKIAkJaHctPm5pY190eXBlID0gYXRocl9sMmM7CiAJCWJyZWFrOwotCiAJY2FzZSBQQ0lfREVWSUNFX0lEX0FUVEFOU0lDX0wxQzoKIAkJaHctPm5pY190eXBlID0gYXRocl9sMWM7CiAJCWJyZWFrOwotCisJY2FzZSBQQ0lfREVWSUNFX0lEX0FUSEVST1NfTDJDX0I6CisJCWh3LT5uaWNfdHlwZSA9IGF0aHJfbDJjX2I7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9BVEhFUk9TX0wyQ19CMjoKKwkJaHctPm5pY190eXBlID0gYXRocl9sMmNfYjI7CisJCWJyZWFrOworCWNhc2UgUENJX0RFVklDRV9JRF9BVEhFUk9TX0wxRDoKKwkJaHctPm5pY190eXBlID0gYXRocl9sMWQ7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTYyMCwxMCArNjM3LDEzIEBACiAJCWh3LT5jdHJsX2ZsYWdzIHw9IEFUTDFDX0FTUE1fTDBTX1NVUFBPUlQ7CiAJaWYgKGxpbmtfY3RybF9kYXRhICYgTElOS19DVFJMX0wxX0VOKQogCQlody0+Y3RybF9mbGFncyB8PSBBVEwxQ19BU1BNX0wxX1NVUFBPUlQ7CisJaWYgKGxpbmtfY3RybF9kYXRhICYgTElOS19DVFJMX0VYVF9TWU5DKQorCQlody0+Y3RybF9mbGFncyB8PSBBVEwxQ19MSU5LX0VYVF9TWU5DOwogCi0JaWYgKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxYykgeworCWlmIChody0+bmljX3R5cGUgPT0gYXRocl9sMWMgfHwKKwkgICAgaHctPm5pY190eXBlID09IGF0aHJfbDFkKSB7CiAJCWh3LT5jdHJsX2ZsYWdzIHw9IEFUTDFDX0FTUE1fQ1RSTF9NT047Ci0JCWh3LT5jdHJsX2ZsYWdzIHw9IEFUTDFDX0xJTktfQ0FQXzEwMDBNOworCQlody0+bGlua19jYXBfZmxhZ3MgfD0gQVRMMUNfTElOS19DQVBfMTAwME07CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTIzNCwyMSArMTI1NCw5MiBAQAogc3RhdGljIHZvaWQgYXRsMWNfc2V0X2FzcG0oc3RydWN0IGF0bDFjX2h3ICpodywgYm9vbCBsaW5rdXApCiB7CiAJdTMyIHBtX2N0cmxfZGF0YTsKKwl1MzIgbGlua19jdHJsX2RhdGE7CiAKIAlBVF9SRUFEX1JFRyhodywgUkVHX1BNX0NUUkwsICZwbV9jdHJsX2RhdGEpOwotCisJQVRfUkVBRF9SRUcoaHcsIFJFR19MSU5LX0NUUkwsICZsaW5rX2N0cmxfZGF0YSk7CiAJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX1NFUkRFU19QRF9FWF9MMTsKKwogCXBtX2N0cmxfZGF0YSAmPSAgfihQTV9DVFJMX0wxX0VOVFJZX1RJTUVSX01BU0sgPDwKIAkJCVBNX0NUUkxfTDFfRU5UUllfVElNRVJfU0hJRlQpOworCXBtX2N0cmxfZGF0YSAmPSB+KFBNX0NUUkxfTENLREVUX1RJTUVSX01BU0sgPDwKKwkJCSAgUE1fQ1RSTF9MQ0tERVRfVElNRVJfU0hJRlQpOwogCiAJcG1fY3RybF9kYXRhIHw9IFBNX0NUUkxfTUFDX0FTUE1fQ0hLOworCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9BU1BNX0wxX0VOOworCXBtX2N0cmxfZGF0YSB8PSBQTV9DVFJMX1JCRVJfRU47CisJcG1fY3RybF9kYXRhIHw9IFBNX0NUUkxfU0RFU19FTjsKKworCWlmIChody0+bmljX3R5cGUgPT0gYXRocl9sMmNfYiB8fAorCSAgICBody0+bmljX3R5cGUgPT0gYXRocl9sMWQgfHwKKwkgICAgaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IyKSB7CisJCWxpbmtfY3RybF9kYXRhICY9IH5MSU5LX0NUUkxfRVhUX1NZTkM7CisJCWlmICghKGh3LT5jdHJsX2ZsYWdzICYgQVRMMUNfQVBTX01PREVfRU5BQkxFKSkgeworCQkJaWYgKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wyY19iICYmCisJCQkgICAgaHctPnJldmlzaW9uX2lkID09IEwyQ0JfVjEwKQorCQkJCWxpbmtfY3RybF9kYXRhIHw9IExJTktfQ1RSTF9FWFRfU1lOQzsKKwkJfQorCisJCUFUX1dSSVRFX1JFRyhodywgUkVHX0xJTktfQ1RSTCwgbGlua19jdHJsX2RhdGEpOworCisJCXBtX2N0cmxfZGF0YSB8PSBQTV9DVFJMX1BDSUVfUkVDVjsKKwkJcG1fY3RybF9kYXRhIHw9IEFUX0FTUE1fTDFfVElNRVIgPDwgUE1fQ1RSTF9QTV9SRVFfVElNRVJfU0hJRlQ7CisJCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9FTl9CVUZTX1JYX0wwUzsKKwkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX1NBX0RMWV9FTjsKKwkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX0hPVFJTVDsKKwkJcG1fY3RybF9kYXRhIHw9IDEgPDwgUE1fQ1RSTF9MMV9FTlRSWV9USU1FUl9TSElGVDsKKwkJcG1fY3RybF9kYXRhIHw9IFBNX0NUUkxfU0VSREVTX1BEX0VYX0wxOworCX0KIAogCWlmIChsaW5rdXApIHsKLQkJcG1fY3RybF9kYXRhIHw9IFBNX0NUUkxfU0VSREVTX1BMTF9MMV9FTjsKLQkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX0NMS19TV0hfTDE7CisJCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9BU1BNX0wxX0VOOworCQlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfQVNQTV9MMFNfRU47CisJCWlmIChody0+Y3RybF9mbGFncyAmIEFUTDFDX0FTUE1fTDFfU1VQUE9SVCkKKwkJCXBtX2N0cmxfZGF0YSB8PSBQTV9DVFJMX0FTUE1fTDFfRU47CisJCWlmIChody0+Y3RybF9mbGFncyAmIEFUTDFDX0FTUE1fTDBTX1NVUFBPUlQpCisJCQlwbV9jdHJsX2RhdGEgfD0gUE1fQ1RSTF9BU1BNX0wwU19FTjsKIAotCQlwbV9jdHJsX2RhdGEgfD0gUE1fQ1RSTF9TRVJERVNfQlVEU19SWF9MMV9FTjsKLQkJcG1fY3RybF9kYXRhIHw9IFBNX0NUUkxfU0VSREVTX0wxX0VOOworCQlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IgfHwKKwkJICAgIGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxZCB8fAorCQkgICAgaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IyKSB7CisJCQlpZiAoaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IpCisJCQkJaWYgKCEoaHctPmN0cmxfZmxhZ3MgJiBBVEwxQ19BUFNfTU9ERV9FTkFCTEUpKQorCQkJCQlwbV9jdHJsX2RhdGEgJj0gUE1fQ1RSTF9BU1BNX0wwU19FTjsKKwkJCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9TRVJERVNfTDFfRU47CisJCQlwbV9jdHJsX2RhdGEgJj0gflBNX0NUUkxfU0VSREVTX1BMTF9MMV9FTjsKKwkJCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9TRVJERVNfQlVEU19SWF9MMV9FTjsKKwkJCXBtX2N0cmxfZGF0YSB8PSBQTV9DVFJMX0NMS19TV0hfTDE7CisJCQlpZiAoaHctPmFkYXB0ZXItPmxpbmtfc3BlZWQgPT0gU1BFRURfMTAwIHx8CisJCQkgICAgaHctPmFkYXB0ZXItPmxpbmtfc3BlZWQgPT0gU1BFRURfMTAwMCkgeworCQkJCXBtX2N0cmxfZGF0YSAmPQorCQkJCQl+KFBNX0NUUkxfTDFfRU5UUllfVElNRVJfTUFTSyA8PAorCQkJCQkgIFBNX0NUUkxfTDFfRU5UUllfVElNRVJfU0hJRlQpOworCQkJCWlmIChody0+bmljX3R5cGUgPT0gYXRocl9sMWQpCisJCQkJCXBtX2N0cmxfZGF0YSB8PSAweEYgPDwKKwkJCQkJCVBNX0NUUkxfTDFfRU5UUllfVElNRVJfU0hJRlQ7CisJCQkJZWxzZQorCQkJCQlwbV9jdHJsX2RhdGEgfD0gNyA8PAorCQkJCQkJUE1fQ1RSTF9MMV9FTlRSWV9USU1FUl9TSElGVDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXBtX2N0cmxfZGF0YSB8PSBQTV9DVFJMX1NFUkRFU19MMV9FTjsKKwkJCXBtX2N0cmxfZGF0YSB8PSBQTV9DVFJMX1NFUkRFU19QTExfTDFfRU47CisJCQlwbV9jdHJsX2RhdGEgfD0gUE1fQ1RSTF9TRVJERVNfQlVEU19SWF9MMV9FTjsKKwkJCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9DTEtfU1dIX0wxOworCQkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX0FTUE1fTDBTX0VOOworCQkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX0FTUE1fTDFfRU47CisJCX0KKwkJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19BRERSLCAweDI5KTsKKwkJaWYgKGh3LT5hZGFwdGVyLT5saW5rX3NwZWVkID09IFNQRUVEXzEwKQorCQkJaWYgKGh3LT5uaWNfdHlwZSA9PSBhdGhyX2wxZCkKKwkJCQlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0FERFIsIDB4QjY5RCk7CisJCQllbHNlCisJCQkJYXRsMWNfd3JpdGVfcGh5X3JlZyhodywgTUlJX0RCR19EQVRBLCAweEI2REQpOworCQllbHNlIGlmIChody0+YWRhcHRlci0+bGlua19zcGVlZCA9PSBTUEVFRF8xMDApCisJCQlhdGwxY193cml0ZV9waHlfcmVnKGh3LCBNSUlfREJHX0RBVEEsIDB4QjJERCk7CisJCWVsc2UKKwkJCWF0bDFjX3dyaXRlX3BoeV9yZWcoaHcsIE1JSV9EQkdfREFUQSwgMHg5NkREKTsKKwogCX0gZWxzZSB7CiAJCXBtX2N0cmxfZGF0YSAmPSB+UE1fQ1RSTF9TRVJERVNfQlVEU19SWF9MMV9FTjsKIAkJcG1fY3RybF9kYXRhICY9IH5QTV9DVFJMX1NFUkRFU19MMV9FTjsKQEAgLTEzMDIsNiArMTM5MywxMCBAQAogCQltYWNfY3RybF9kYXRhIHw9IE1BQ19DVFJMX01DX0FMTF9FTjsKIAogCW1hY19jdHJsX2RhdGEgfD0gTUFDX0NUUkxfU0lOR0xFX1BBVVNFX0VOOworCWlmIChody0+bmljX3R5cGUgPT0gYXRocl9sMWQgfHwgaHctPm5pY190eXBlID09IGF0aHJfbDJjX2IyKSB7CisJCW1hY19jdHJsX2RhdGEgfD0gTUFDX0NUUkxfU1BFRURfTU9ERV9TVzsKKwkJbWFjX2N0cmxfZGF0YSB8PSBNQUNfQ1RSTF9IQVNIX0FMR19DUkMzMjsKKwl9CiAJQVRfV1JJVEVfUkVHKGh3LCBSRUdfTUFDX0NUUkwsIG1hY19jdHJsX2RhdGEpOwogfQogCkBAIC0yNTk2LDExICsyNjkxLDggQEAKIAltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRhcHRlci0+aHcubWFjX2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOwogCW1lbWNweShuZXRkZXYtPnBlcm1fYWRkciwgYWRhcHRlci0+aHcubWFjX2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOwogCWlmIChuZXRpZl9tc2dfcHJvYmUoYWRhcHRlcikpCi0JCWRldl9kYmcoJnBkZXYtPmRldiwKLQkJCSJtYWMgYWRkcmVzcyA6ICUwMngtJTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4XG4iLAotCQkJYWRhcHRlci0+aHcubWFjX2FkZHJbMF0sIGFkYXB0ZXItPmh3Lm1hY19hZGRyWzFdLAotCQkJYWRhcHRlci0+aHcubWFjX2FkZHJbMl0sIGFkYXB0ZXItPmh3Lm1hY19hZGRyWzNdLAotCQkJYWRhcHRlci0+aHcubWFjX2FkZHJbNF0sIGFkYXB0ZXItPmh3Lm1hY19hZGRyWzVdKTsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAibWFjIGFkZHJlc3MgOiAlcE1cbiIsCisJCQlhZGFwdGVyLT5ody5tYWNfYWRkcik7CiAKIAlhdGwxY19od19zZXRfbWFjX2FkZHIoJmFkYXB0ZXItPmh3KTsKIAlJTklUX1dPUksoJmFkYXB0ZXItPmNvbW1vbl90YXNrLCBhdGwxY19jb21tb25fdGFzayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9ody5jIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfaHcuYwppbmRleCA0YTc3MDA2Li43NmNjMDQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9ody5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX2h3LmMKQEAgLTM5NCw3ICszOTQsNiBAQAogaW50IGF0bDFlX3BoeV9jb21taXQoc3RydWN0IGF0bDFlX2h3ICpodykKIHsKIAlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9IGh3LT5hZGFwdGVyOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAlpbnQgcmV0X3ZhbDsKIAl1MTYgcGh5X2RhdGE7CiAKQEAgLTQxNSwxMiArNDE0LDEyIEBACiAJCX0KIAogCQlpZiAoMCAhPSAodmFsICYgKE1ESU9fU1RBUlQgfCBNRElPX0JVU1kpKSkgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJCSJwY2llIGxpbmtkb3duIGF0IGxlYXN0IGZvciAyNW1zXG4iKTsKKwkJCW5ldGRldl9lcnIoYWRhcHRlci0+bmV0ZGV2LAorCQkJCSAgICJwY2llIGxpbmtkb3duIGF0IGxlYXN0IGZvciAyNW1zXG4iKTsKIAkJCXJldHVybiByZXRfdmFsOwogCQl9CiAKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicGNpZSBsaW5rdXAgYWZ0ZXIgJWQgbXNcbiIsIGkpOworCQluZXRkZXZfZXJyKGFkYXB0ZXItPm5ldGRldiwgInBjaWUgbGlua3VwIGFmdGVyICVkIG1zXG4iLCBpKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC00MjgsNyArNDI3LDYgQEAKIGludCBhdGwxZV9waHlfaW5pdChzdHJ1Y3QgYXRsMWVfaHcgKmh3KQogewogCXN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyID0gaHctPmFkYXB0ZXI7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCXMzMiByZXRfdmFsOwogCXUxNiBwaHlfdmFsOwogCkBAIC00OTIsMjAgKzQ5MCwyMiBAQAogCS8qRW5hYmxlIFBIWSBMaW5rQ2hhbmdlIEludGVycnVwdCAqLwogCXJldF92YWwgPSBhdGwxZV93cml0ZV9waHlfcmVnKGh3LCBNSUlfSU5UX0NUUkwsIDB4QzAwKTsKIAlpZiAocmV0X3ZhbCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciBlbmFibGUgUEhZIGxpbmtDaGFuZ2UgSW50ZXJydXB0XG4iKTsKKwkJbmV0ZGV2X2VycihhZGFwdGVyLT5uZXRkZXYsCisJCQkgICAiRXJyb3IgZW5hYmxlIFBIWSBsaW5rQ2hhbmdlIEludGVycnVwdFxuIik7CiAJCXJldHVybiByZXRfdmFsOwogCX0KIAkvKiBzZXR1cCBBdXRvTmVnIHBhcmFtZXRlcnMgKi8KIAlyZXRfdmFsID0gYXRsMWVfcGh5X3NldHVwX2F1dG9uZWdfYWR2KGh3KTsKIAlpZiAocmV0X3ZhbCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciBTZXR0aW5nIHVwIEF1dG8tTmVnb3RpYXRpb25cbiIpOworCQluZXRkZXZfZXJyKGFkYXB0ZXItPm5ldGRldiwKKwkJCSAgICJFcnJvciBTZXR0aW5nIHVwIEF1dG8tTmVnb3RpYXRpb25cbiIpOwogCQlyZXR1cm4gcmV0X3ZhbDsKIAl9CiAJLyogU1cuUmVzZXQgJiBFbi1BdXRvLU5lZyB0byByZXN0YXJ0IEF1dG8tTmVnKi8KLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJSZXN0YXJ0aW5nIEF1dG8tTmVnIik7CisJbmV0ZGV2X2RiZyhhZGFwdGVyLT5uZXRkZXYsICJSZXN0YXJ0aW5nIEF1dG8tTmVnb3RpYXRpb25cbiIpOwogCXJldF92YWwgPSBhdGwxZV9waHlfY29tbWl0KGh3KTsKIAlpZiAocmV0X3ZhbCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciBSZXNldHRpbmcgdGhlIHBoeSIpOworCQluZXRkZXZfZXJyKGFkYXB0ZXItPm5ldGRldiwgIkVycm9yIHJlc2V0dGluZyB0aGUgcGh5XG4iKTsKIAkJcmV0dXJuIHJldF92YWw7CiAJfQogCkBAIC01NTksOSArNTU5LDggQEAKIAl9CiAKIAlpZiAodGltZW91dCA+PSBBVF9IV19NQVhfSURMRV9ERUxBWSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkiTUFDIHN0YXRlIG1hY2hpbmUgY2Fubid0IGJlIGlkbGUgc2luY2UiCi0JCQkiIGRpc2FibGVkIGZvciAxMG1zIHNlY29uZFxuIik7CisJCW5ldGRldl9lcnIoYWRhcHRlci0+bmV0ZGV2LAorCQkJICAgIk1BQyBzdGF0ZSBtYWNoaW5lIGNhbid0IGJlIGlkbGUgc2luY2UgZGlzYWJsZWQgZm9yIDEwbXMgc2Vjb25kXG4iKTsKIAkJcmV0dXJuIEFUX0VSUl9USU1FT1VUOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfbWFpbi5jCmluZGV4IDA4ZjhjMDkuLjczMzAyYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9tYWluLmMKQEAgLTM1LDcgKzM1LDcgQEAKICAqIHsgVmVuZG9yIElELCBEZXZpY2UgSUQsIFN1YlZlbmRvciBJRCwgU3ViRGV2aWNlIElELAogICogICBDbGFzcywgQ2xhc3MgTWFzaywgcHJpdmF0ZSBkYXRhIChub3QgdXNlZCkgfQogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRsMWVfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGF0bDFlX3BjaV90YmwpID0gewogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQVRUQU5TSUMsIFBDSV9ERVZJQ0VfSURfQVRUQU5TSUNfTDFFKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgMHgxMDY2KX0sCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwpAQCAtMTY0LDExICsxNjQsMTAgQEAKIHsKIAlzdHJ1Y3QgYXRsMWVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0Jc3RydWN0IHBjaV9kZXYgICAgKnBkZXYgICA9IGFkYXB0ZXItPnBkZXY7CiAJaW50IGVyciA9IDA7CiAJdTE2IHNwZWVkLCBkdXBsZXgsIHBoeV9kYXRhOwogCi0JLyogTUlJX0JNU1IgbXVzdCByZWFkIHR3aXNlICovCisJLyogTUlJX0JNU1IgbXVzdCByZWFkIHR3aWNlICovCiAJYXRsMWVfcmVhZF9waHlfcmVnKGh3LCBNSUlfQk1TUiwgJnBoeV9kYXRhKTsKIAlhdGwxZV9yZWFkX3BoeV9yZWcoaHcsIE1JSV9CTVNSLCAmcGh5X2RhdGEpOwogCWlmICgocGh5X2RhdGEgJiBCTVNSX0xTVEFUVVMpID09IDApIHsKQEAgLTE5NSwxMiArMTk0LDExIEBACiAJCQlhZGFwdGVyLT5saW5rX3NwZWVkICA9IHNwZWVkOwogCQkJYWRhcHRlci0+bGlua19kdXBsZXggPSBkdXBsZXg7CiAJCQlhdGwxZV9zZXR1cF9tYWNfY3RybChhZGFwdGVyKTsKLQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsCi0JCQkJIiVzOiAlcyBOSUMgTGluayBpcyBVcDwlZCBNYnBzICVzPlxuIiwKLQkJCQlhdGwxZV9kcml2ZXJfbmFtZSwgbmV0ZGV2LT5uYW1lLAotCQkJCWFkYXB0ZXItPmxpbmtfc3BlZWQsCi0JCQkJYWRhcHRlci0+bGlua19kdXBsZXggPT0gRlVMTF9EVVBMRVggPwotCQkJCSJGdWxsIER1cGxleCIgOiAiSGFsZiBEdXBsZXgiKTsKKwkJCW5ldGRldl9pbmZvKG5ldGRldiwKKwkJCQkgICAgIk5JQyBMaW5rIGlzIFVwIDwlZCBNYnBzICVzIER1cGxleD5cbiIsCisJCQkJICAgIGFkYXB0ZXItPmxpbmtfc3BlZWQsCisJCQkJICAgIGFkYXB0ZXItPmxpbmtfZHVwbGV4ID09IEZVTExfRFVQTEVYID8KKwkJCQkgICAgIkZ1bGwiIDogIkhhbGYiKTsKIAkJfQogCiAJCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CkBAIC0yMzAsNyArMjI4LDYgQEAKIHN0YXRpYyB2b2lkIGF0bDFlX2xpbmtfY2hnX2V2ZW50KHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0Jc3RydWN0IHBjaV9kZXYgICAgKnBkZXYgICA9IGFkYXB0ZXItPnBkZXY7CiAJdTE2IHBoeV9kYXRhID0gMDsKIAl1MTYgbGlua191cCA9IDA7CiAKQEAgLTI0Myw4ICsyNDAsNyBAQAogCWlmICghbGlua191cCkgewogCQlpZiAobmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CiAJCQkvKiBvbGQgbGluayBzdGF0ZTogVXAgKi8KLQkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlczogJXMgTklDIExpbmsgaXMgRG93blxuIiwKLQkJCQkJYXRsMWVfZHJpdmVyX25hbWUsIG5ldGRldi0+bmFtZSk7CisJCQluZXRkZXZfaW5mbyhuZXRkZXYsICJOSUMgTGluayBpcyBEb3duXG4iKTsKIAkJCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSBTUEVFRF8wOwogCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwogCQl9CkBAIC0zMTEsNyArMzA3LDcgQEAKIAlBVF9XUklURV9SRUdfQVJSQVkoaHcsIFJFR19SWF9IQVNIX1RBQkxFLCAxLCAwKTsKIAogCS8qIGNvbW91dGUgbWMgYWRkcmVzc2VzJyBoYXNoIHZhbHVlICxhbmQgcHV0IGl0IGludG8gaGFzaCB0YWJsZSAqLwotCWZvciAobWNfcHRyID0gbmV0ZGV2LT5tY19saXN0OyBtY19wdHI7IG1jX3B0ciA9IG1jX3B0ci0+bmV4dCkgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jX3B0ciwgbmV0ZGV2KSB7CiAJCWhhc2hfdmFsdWUgPSBhdGwxZV9oYXNoX21jX2FkZHIoaHcsIG1jX3B0ci0+ZG1pX2FkZHIpOwogCQlhdGwxZV9oYXNoX3NldChodywgaGFzaF92YWx1ZSk7CiAJfQpAQCAtMzIxLDEwICszMTcsOSBAQAogCQkJCSAgIHN0cnVjdCB2bGFuX2dyb3VwICpncnApCiB7CiAJc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAl1MzIgbWFjX2N0cmxfZGF0YSA9IDA7CiAKLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJhdGwxZV92bGFuX3J4X3JlZ2lzdGVyXG4iKTsKKwluZXRkZXZfZGJnKGFkYXB0ZXItPm5ldGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKIAlhdGwxZV9pcnFfZGlzYWJsZShhZGFwdGVyKTsKIApAQCAtMzQ1LDkgKzM0MCw3IEBACiAKIHN0YXRpYyB2b2lkIGF0bDFlX3Jlc3RvcmVfdmxhbihzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7Ci0KLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJhdGwxZV9yZXN0b3JlX3ZsYW4gISIpOworCW5ldGRldl9kYmcoYWRhcHRlci0+bmV0ZGV2LCAiJXNcbiIsIF9fZnVuY19fKTsKIAlhdGwxZV92bGFuX3J4X3JlZ2lzdGVyKGFkYXB0ZXItPm5ldGRldiwgYWRhcHRlci0+dmxncnApOwogfQogLyoKQEAgLTM5MSw3ICszODQsNyBAQAogCiAJaWYgKChtYXhfZnJhbWUgPCBFVEhfWkxFTiArIEVUSF9GQ1NfTEVOKSB8fAogCQkJKG1heF9mcmFtZSA+IE1BWF9KVU1CT19GUkFNRV9TSVpFKSkgewotCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LCAiaW52YWxpZCBNVFUgc2V0dGluZ1xuIik7CisJCW5ldGRldl93YXJuKGFkYXB0ZXItPm5ldGRldiwgImludmFsaWQgTVRVIHNldHRpbmdcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJLyogc2V0IE1UVSAqLwpAQCAtNDM4LDcgKzQzMSw2IEBACiAJCQkgICBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKIHsKIAlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSA9IGlmX21paShpZnIpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldHZhbCA9IDA7CkBAIC00NjYsOCArNDU4LDggQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiPGF0bDFlX21paV9pb2N0bD4gd3JpdGUgJXggJXgiLAotCQkJCWRhdGEtPnJlZ19udW0sIGRhdGEtPnZhbF9pbik7CisJCW5ldGRldl9kYmcoYWRhcHRlci0+bmV0ZGV2LCAiPGF0bDFlX21paV9pb2N0bD4gd3JpdGUgJXggJXhcbiIsCisJCQkgICBkYXRhLT5yZWdfbnVtLCBkYXRhLT52YWxfaW4pOwogCQlpZiAoYXRsMWVfd3JpdGVfcGh5X3JlZygmYWRhcHRlci0+aHcsCiAJCQkJICAgICBkYXRhLT5yZWdfbnVtLCBkYXRhLT52YWxfaW4pKSB7CiAJCQlyZXR2YWwgPSAtRUlPOwpAQCAtNjAyLDcgKzU5NCw3IEBACiAJaHctPmRtYXdfZGx5X2NudCA9IDQ7CiAKIAlpZiAoYXRsMWVfYWxsb2NfcXVldWVzKGFkYXB0ZXIpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHF1ZXVlc1xuIik7CisJCW5ldGRldl9lcnIoYWRhcHRlci0+bmV0ZGV2LCAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcXVldWVzXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC04MDAsOCArNzkyLDggQEAKIAkJCWFkYXB0ZXItPnJpbmdfc2l6ZSwgJmFkYXB0ZXItPnJpbmdfZG1hKTsKIAogCWlmIChhZGFwdGVyLT5yaW5nX3Zpcl9hZGRyID09IE5VTEwpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicGNpX2FsbG9jX2NvbnNpc3RlbnQgZmFpbGVkLCAiCi0JCQkJICAgICJzaXplID0gRCVkIiwgc2l6ZSk7CisJCW5ldGRldl9lcnIoYWRhcHRlci0+bmV0ZGV2LAorCQkJICAgInBjaV9hbGxvY19jb25zaXN0ZW50IGZhaWxlZCwgc2l6ZSA9IEQlZFxuIiwgc2l6ZSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtODE3LDcgKzgwOSw4IEBACiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRsMWVfdHhfYnVmZmVyKSAqICh0eF9yaW5nLT5jb3VudCk7CiAJdHhfcmluZy0+dHhfYnVmZmVyID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAodHhfcmluZy0+dHhfYnVmZmVyID09IE5VTEwpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAia3phbGxvYyBmYWlsZWQgLCBzaXplID0gRCVkIiwgc2l6ZSk7CisJCW5ldGRldl9lcnIoYWRhcHRlci0+bmV0ZGV2LCAia3phbGxvYyBmYWlsZWQsIHNpemUgPSBEJWRcbiIsCisJCQkgICBzaXplKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBmYWlsZWQ7CiAJfQpAQCAtODUyLDggKzg0NSw4IEBACiAJfQogCiAJaWYgKHVubGlrZWx5KG9mZnNldCA+IGFkYXB0ZXItPnJpbmdfc2l6ZSkpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAib2Zmc2V0KCVkKSA+IHJpbmcgc2l6ZSglZCkgISFcbiIsCi0JCQkJb2Zmc2V0LCBhZGFwdGVyLT5yaW5nX3NpemUpOworCQluZXRkZXZfZXJyKGFkYXB0ZXItPm5ldGRldiwgIm9mZnNldCglZCkgPiByaW5nIHNpemUoJWQpICEhXG4iLAorCQkJICAgb2Zmc2V0LCBhZGFwdGVyLT5yaW5nX3NpemUpOwogCQllcnIgPSAtMTsKIAkJZ290byBmYWlsZWQ7CiAJfQpAQCAtMTA3Nyw3ICsxMDcwLDYgQEAKIHN0YXRpYyBpbnQgYXRsMWVfY29uZmlndXJlKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBhdGwxZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCiAJdTMyIGludHJfc3RhdHVzX2RhdGEgPSAwOwogCkBAIC0xMTMwLDggKzExMjIsOCBAQAogCiAJaW50cl9zdGF0dXNfZGF0YSA9IEFUX1JFQURfUkVHKGh3LCBSRUdfSVNSKTsKIAlpZiAodW5saWtlbHkoKGludHJfc3RhdHVzX2RhdGEgJiBJU1JfUEhZX0xJTktET1dOKSAhPSAwKSkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJhdGwxZV9jb25maWd1cmUgZmFpbGVkLCIKLQkJCQkiUENJRSBwaHkgbGluayBkb3duXG4iKTsKKwkJbmV0ZGV2X2VycihhZGFwdGVyLT5uZXRkZXYsCisJCQkgICAiYXRsMWVfY29uZmlndXJlIGZhaWxlZCwgUENJRSBwaHkgbGluayBkb3duXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTI2Miw3ICsxMjU0LDYgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ICA9IGRhdGE7CiAJc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAlzdHJ1Y3QgYXRsMWVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCWludCBtYXhfaW50cyA9IEFUX01BWF9JTlRfV09SSzsKIAlpbnQgaGFuZGxlZCA9IElSUV9OT05FOwpAQCAtMTI4NSw4ICsxMjc2LDggQEAKIAkJaGFuZGxlZCA9IElSUV9IQU5ETEVEOwogCQkvKiBjaGVjayBpZiBQQ0lFIFBIWSBMaW5rIGRvd24gKi8KIAkJaWYgKHN0YXR1cyAmIElTUl9QSFlfTElOS0RPV04pIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkicGNpZSBwaHkgbGlua2Rvd24gJXhcbiIsIHN0YXR1cyk7CisJCQluZXRkZXZfZXJyKGFkYXB0ZXItPm5ldGRldiwKKwkJCQkgICAicGNpZSBwaHkgbGlua2Rvd24gJXhcbiIsIHN0YXR1cyk7CiAJCQlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CiAJCQkJLyogcmVzZXQgTUFDICovCiAJCQkJYXRsMWVfaXJxX3Jlc2V0KGFkYXB0ZXIpOwpAQCAtMTI5Nyw5ICsxMjg4LDkgQEAKIAogCQkvKiBjaGVjayBpZiBETUEgcmVhZC93cml0ZSBlcnJvciAqLwogCQlpZiAoc3RhdHVzICYgKElTUl9ETUFSX1RPX1JTVCB8IElTUl9ETUFXX1RPX1JTVCkpIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkiUENJRSBETUEgUlcgZXJyb3IgKHN0YXR1cyA9IDB4JXgpXG4iLAotCQkJCXN0YXR1cyk7CisJCQluZXRkZXZfZXJyKGFkYXB0ZXItPm5ldGRldiwKKwkJCQkgICAiUENJRSBETUEgUlcgZXJyb3IgKHN0YXR1cyA9IDB4JXgpXG4iLAorCQkJCSAgIHN0YXR1cyk7CiAJCQlhdGwxZV9pcnFfcmVzZXQoYWRhcHRlcik7CiAJCQlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKIAkJCWJyZWFrOwpAQCAtMTM4Miw3ICsxMzczLDYgQEAKIHN0YXRpYyB2b2lkIGF0bDFlX2NsZWFuX3J4X2lycShzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciwgdTggcXVlLAogCQkgICBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBhdGwxZV9yeF9yaW5nICpyeF9yaW5nID0gKHN0cnVjdCBhdGwxZV9yeF9yaW5nICopCiAJCQkJCSAmYWRhcHRlci0+cnhfcmluZzsKQEAgLTE0MDQsMTEgKzEzOTQsMTAgQEAKIAkJCQkJCSByeF9wYWdlLT5yZWFkX29mZnNldCk7CiAJCQkvKiBjaGVjayBzZXF1ZW5jZSBudW1iZXIgKi8KIAkJCWlmIChwcnJzLT5zZXFfbnVtICE9IHJ4X3BhZ2VfZGVzY1txdWVdLnJ4X254c2VxKSB7Ci0JCQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJCQkicnggc2VxdWVuY2UgbnVtYmVyIgotCQkJCQkiIGVycm9yIChyeD0lZCkgKGV4cGVjdD0lZClcbiIsCi0JCQkJCXBycnMtPnNlcV9udW0sCi0JCQkJCXJ4X3BhZ2VfZGVzY1txdWVdLnJ4X254c2VxKTsKKwkJCQluZXRkZXZfZXJyKG5ldGRldiwKKwkJCQkJICAgInJ4IHNlcXVlbmNlIG51bWJlciBlcnJvciAocng9JWQpIChleHBlY3Q9JWQpXG4iLAorCQkJCQkgICBwcnJzLT5zZXFfbnVtLAorCQkJCQkgICByeF9wYWdlX2Rlc2NbcXVlXS5yeF9ueHNlcSk7CiAJCQkJcnhfcGFnZV9kZXNjW3F1ZV0ucnhfbnhzZXErKzsKIAkJCQkvKiBqdXN0IGZvciBkZWJ1ZyB1c2UgKi8KIAkJCQlBVF9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBSRUdfREVCVUdfREFUQTAsCkBAIC0xNDI0LDkgKzE0MTMsOSBAQAogCQkJCQlSUlNfRVJSX0RSSUJCTEUgfCBSUlNfRVJSX0NPREUgfAogCQkJCQlSUlNfRVJSX1RSVU5DKSkgewogCQkJCS8qIGhhcmR3YXJlIGVycm9yLCBkaXNjYXJkIHRoaXMgcGFja2V0Ki8KLQkJCQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJCQkJInJ4IHBhY2tldCBkZXNjIGVycm9yICV4XG4iLAotCQkJCQkJKigodTMyICopcHJycyArIDEpKTsKKwkJCQkJbmV0ZGV2X2VycihuZXRkZXYsCisJCQkJCQkgICAicnggcGFja2V0IGRlc2MgZXJyb3IgJXhcbiIsCisJCQkJCQkgICAqKCh1MzIgKilwcnJzICsgMSkpOwogCQkJCQlnb3RvIHNraXBfcGt0OwogCQkJCX0KIAkJCX0KQEAgLTE0MzUsOCArMTQyNCw4IEBACiAJCQkJCVJSU19QS1RfU0laRV9NQVNLKSAtIDQ7IC8qIENSQyAqLwogCQkJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbihuZXRkZXYsIHBhY2tldF9zaXplKTsKIAkJCWlmIChza2IgPT0gTlVMTCkgewotCQkJCWRldl93YXJuKCZwZGV2LT5kZXYsICIlczogTWVtb3J5IHNxdWVlemUsIgotCQkJCQkiZGVmZXJyaW5nIHBhY2tldC5cbiIsIG5ldGRldi0+bmFtZSk7CisJCQkJbmV0ZGV2X3dhcm4obmV0ZGV2LAorCQkJCQkgICAgIk1lbW9yeSBzcXVlZXplLCBkZWZlcnJpbmcgcGFja2V0XG4iKTsKIAkJCQlnb3RvIHNraXBfcGt0OwogCQkJfQogCQkJc2tiLT5kZXYgPSBuZXRkZXY7CkBAIC0xNDUwLDkgKzE0MzksOSBAQAogCQkJCXUxNiB2bGFuX3RhZyA9IChwcnJzLT52dGFnID4+IDQpIHwKIAkJCQkJICAgICAgICgocHJycy0+dnRhZyAmIDcpIDw8IDEzKSB8CiAJCQkJCSAgICAgICAoKHBycnMtPnZ0YWcgJiA4KSA8PCA5KTsKLQkJCQlkZXZfZGJnKCZwZGV2LT5kZXYsCi0JCQkJCSJSWEQgVkxBTiBUQUc8UlJEPj0weCUwNHhcbiIsCi0JCQkJCXBycnMtPnZ0YWcpOworCQkJCW5ldGRldl9kYmcobmV0ZGV2LAorCQkJCQkgICAiUlhEIFZMQU4gVEFHPFJSRD49MHglMDR4XG4iLAorCQkJCQkgICBwcnJzLT52dGFnKTsKIAkJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBhZGFwdGVyLT52bGdycCwKIAkJCQkJCQkgdmxhbl90YWcpOwogCQkJfSBlbHNlIHsKQEAgLTE1MDAsNyArMTQ4OSw2IEBACiB7CiAJc3RydWN0IGF0bDFlX2FkYXB0ZXIgKmFkYXB0ZXIgPQogCQkJY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBhdGwxZV9hZGFwdGVyLCBuYXBpKTsKLQlzdHJ1Y3QgcGNpX2RldiAgICAqcGRldiAgICA9IGFkYXB0ZXItPnBkZXY7CiAJdTMyIGltcl9kYXRhOwogCWludCB3b3JrX2RvbmUgPSAwOwogCkBAIC0xNTE5LDggKzE1MDcsOCBAQAogCQkvKiB0ZXN0IGRlYnVnICovCiAJCWlmICh0ZXN0X2JpdChfX0FUX0RPV04sICZhZGFwdGVyLT5mbGFncykpIHsKIAkJCWF0b21pY19kZWMoJmFkYXB0ZXItPmlycV9zZW0pOwotCQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJCSJhdGwxZV9jbGVhbiBpcyBjYWxsZWQgd2hlbiBBVF9ET1dOXG4iKTsKKwkJCW5ldGRldl9lcnIoYWRhcHRlci0+bmV0ZGV2LAorCQkJCSAgICJhdGwxZV9jbGVhbiBpcyBjYWxsZWQgd2hlbiBBVF9ET1dOXG4iKTsKIAkJfQogCQkvKiByZWVuYWJsZSBSWCBpbnRyICovCiAJCS8qYXRsMWVfaXJxX2VuYWJsZShhZGFwdGVyKTsgKi8KQEAgLTE2MTgsNyArMTYwNiw2IEBACiBzdGF0aWMgaW50IGF0bDFlX3Rzb19jc3VtKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyLAogCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGF0bDFlX3RwZF9kZXNjICp0cGQpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OwogCXU4IGhkcl9sZW47CiAJdTMyIHJlYWxfbGVuOwogCXVuc2lnbmVkIHNob3J0IG9mZmxvYWRfdHlwZTsKQEAgLTE2NDIsOCArMTYyOSw4IEBACiAJCQloZHJfbGVuID0gKHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB0Y3BfaGRybGVuKHNrYikpOwogCQkJaWYgKHVubGlrZWx5KHNrYi0+bGVuID09IGhkcl9sZW4pKSB7CiAJCQkJLyogb25seSB4c3VtIG5lZWQgKi8KLQkJCQlkZXZfd2FybigmcGRldi0+ZGV2LAotCQkJCSAgICAgICJJUFY0IHRzbyB3aXRoIHplcm8gZGF0YT8/XG4iKTsKKwkJCQluZXRkZXZfd2FybihhZGFwdGVyLT5uZXRkZXYsCisJCQkJCSAgICAiSVBWNCB0c28gd2l0aCB6ZXJvIGRhdGE/P1xuIik7CiAJCQkJZ290byBjaGVja19zdW07CiAJCQl9IGVsc2UgewogCQkJCWlwX2hkcihza2IpLT5jaGVjayA9IDA7CkBAIC0xNjcyLDggKzE2NTksOCBAQAogCiAJCWNzbyA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYik7CiAJCWlmICh1bmxpa2VseShjc28gJiAweDEpKSB7Ci0JCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCi0JCQkgICAicGF5IGxvYWQgb2Zmc2V0IHNob3VsZCBub3QgYW50IGV2ZW50IG51bWJlclxuIik7CisJCQluZXRkZXZfZXJyKGFkYXB0ZXItPm5ldGRldiwKKwkJCQkgICAicGF5bG9hZCBvZmZzZXQgc2hvdWxkIG5vdCBhbnQgZXZlbnQgbnVtYmVyXG4iKTsKIAkJCXJldHVybiAtMTsKIAkJfSBlbHNlIHsKIAkJCWNzcyA9IGNzbyArIHNrYi0+Y3N1bV9vZmZzZXQ7CkBAIC0xODg2LDggKzE4NzMsOCBAQAogCWFkYXB0ZXItPmhhdmVfbXNpID0gdHJ1ZTsKIAllcnIgPSBwY2lfZW5hYmxlX21zaShhZGFwdGVyLT5wZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwKLQkJCSJVbmFibGUgdG8gYWxsb2NhdGUgTVNJIGludGVycnVwdCBFcnJvcjogJWRcbiIsIGVycik7CisJCW5ldGRldl9kYmcoYWRhcHRlci0+bmV0ZGV2LAorCQkJICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBNU0kgaW50ZXJydXB0IEVycm9yOiAlZFxuIiwgZXJyKTsKIAkJYWRhcHRlci0+aGF2ZV9tc2kgPSBmYWxzZTsKIAl9IGVsc2UKIAkJbmV0ZGV2LT5pcnEgPSBwZGV2LT5pcnE7CkBAIC0xODk4LDEzICsxODg1LDEzIEBACiAJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+cGRldi0+aXJxLCBhdGwxZV9pbnRyLCBmbGFncywKIAkJCW5ldGRldi0+bmFtZSwgbmV0ZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCWRldl9kYmcoJnBkZXYtPmRldiwKLQkJCSJVbmFibGUgdG8gYWxsb2NhdGUgaW50ZXJydXB0IEVycm9yOiAlZFxuIiwgZXJyKTsKKwkJbmV0ZGV2X2RiZyhhZGFwdGVyLT5uZXRkZXYsCisJCQkgICAiVW5hYmxlIHRvIGFsbG9jYXRlIGludGVycnVwdCBFcnJvcjogJWRcbiIsIGVycik7CiAJCWlmIChhZGFwdGVyLT5oYXZlX21zaSkKIAkJCXBjaV9kaXNhYmxlX21zaShhZGFwdGVyLT5wZGV2KTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JZGV2X2RiZygmcGRldi0+ZGV2LCAiYXRsMWVfcmVxdWVzdF9pcnEgT0tcbiIpOworCW5ldGRldl9kYmcoYWRhcHRlci0+bmV0ZGV2LCAiYXRsMWVfcmVxdWVzdF9pcnEgT0tcbiIpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTIwNzgsNyArMjA2NSw3IEBACiAJCSAgICAoYXRsMWVfd3JpdGVfcGh5X3JlZyhodywKIAkJCSAgIE1JSV9BRFZFUlRJU0UsIG1paV9hZHZlcnRpc2VfZGF0YSkgIT0gMCkgfHwKIAkJICAgIChhdGwxZV9waHlfY29tbWl0KGh3KSkgIT0gMCkgewotCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAic2V0IHBoeSByZWdpc3RlciBmYWlsZWRcbiIpOworCQkJbmV0ZGV2X2RiZyhhZGFwdGVyLT5uZXRkZXYsICJzZXQgcGh5IHJlZ2lzdGVyIGZhaWxlZFxuIik7CiAJCQlnb3RvIHdvbF9kaXM7CiAJCX0KIApAQCAtMjEwMCwxNyArMjA4NywxNCBAQAogCQkJCX0KIAogCQkJCWlmICgobWlpX2Jtc3JfZGF0YSAmIEJNU1JfTFNUQVRVUykgPT0gMCkKLQkJCQkJZGV2X2RiZygmcGRldi0+ZGV2LAotCQkJCQkJIiVzOiBMaW5rIG1heSBjaGFuZ2UiCi0JCQkJCQkid2hlbiBzdXNwZW5kXG4iLAotCQkJCQkJYXRsMWVfZHJpdmVyX25hbWUpOworCQkJCQluZXRkZXZfZGJnKGFkYXB0ZXItPm5ldGRldiwKKwkJCQkJCSAgICJMaW5rIG1heSBjaGFuZ2Ugd2hlbiBzdXNwZW5kXG4iKTsKIAkJCX0KIAkJCXdvbF9jdHJsX2RhdGEgfD0gIFdPTF9MSU5LX0NIR19FTiB8IFdPTF9MSU5LX0NIR19QTUVfRU47CiAJCQkvKiBvbmx5IGxpbmsgdXAgY2FuIHdha2UgdXAgKi8KIAkJCWlmIChhdGwxZV93cml0ZV9waHlfcmVnKGh3LCBNSUlfSU5UX0NUUkwsIDB4NDAwKSAhPSAwKSB7Ci0JCQkJZGV2X2RiZygmcGRldi0+ZGV2LCAiJXM6IHJlYWQgd3JpdGUgcGh5ICIKLQkJCQkJCSAgInJlZ2lzdGVyIGZhaWxlZC5cbiIsCi0JCQkJCQkgIGF0bDFlX2RyaXZlcl9uYW1lKTsKKwkJCQluZXRkZXZfZGJnKGFkYXB0ZXItPm5ldGRldiwKKwkJCQkJICAgInJlYWQgd3JpdGUgcGh5IHJlZ2lzdGVyIGZhaWxlZFxuIik7CiAJCQkJZ290byB3b2xfZGlzOwogCQkJfQogCQl9CkBAIC0yMTMxLDkgKzIxMTUsOCBAQAogCQlpZiAod3VmYyAmIEFUX1dVRkNfTUFHKQogCQkJbWFjX2N0cmxfZGF0YSB8PSBNQUNfQ1RSTF9CQ19FTjsKIAotCQlkZXZfZGJnKCZwZGV2LT5kZXYsCi0JCQkiJXM6IHN1c3BlbmQgTUFDPTB4JXhcbiIsCi0JCQlhdGwxZV9kcml2ZXJfbmFtZSwgbWFjX2N0cmxfZGF0YSk7CisJCW5ldGRldl9kYmcoYWRhcHRlci0+bmV0ZGV2LCAic3VzcGVuZCBNQUM9MHgleFxuIiwKKwkJCSAgIG1hY19jdHJsX2RhdGEpOwogCiAJCUFUX1dSSVRFX1JFRyhodywgUkVHX1dPTF9DVFJMLCB3b2xfY3RybF9kYXRhKTsKIAkJQVRfV1JJVEVfUkVHKGh3LCBSRUdfTUFDX0NUUkwsIG1hY19jdHJsX2RhdGEpOwpAQCAtMjE4Myw4ICsyMTY2LDggQEAKIAogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQVRMMWU6IENhbm5vdCBlbmFibGUgUENJIgotCQkJCSIgZGV2aWNlIGZyb20gc3VzcGVuZFxuIik7CisJCW5ldGRldl9lcnIoYWRhcHRlci0+bmV0ZGV2LAorCQkJICAgIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtMjMxNSw3ICsyMjk4LDcgQEAKIAogCWVyciA9IGF0bDFlX2luaXRfbmV0ZGV2KG5ldGRldiwgcGRldik7CiAJaWYgKGVycikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbml0IG5ldGRldmljZSBmYWlsZWRcbiIpOworCQluZXRkZXZfZXJyKG5ldGRldiwgImluaXQgbmV0ZGV2aWNlIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX2luaXRfbmV0ZGV2OwogCX0KIAlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTIzMjYsNyArMjMwOSw3IEBACiAJYWRhcHRlci0+aHcuaHdfYWRkciA9IHBjaV9pb21hcChwZGV2LCBCQVJfMCwgMCk7CiAJaWYgKCFhZGFwdGVyLT5ody5od19hZGRyKSB7CiAJCWVyciA9IC1FSU87Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBtYXAgZGV2aWNlIHJlZ2lzdGVyc1xuIik7CisJCW5ldGRldl9lcnIobmV0ZGV2LCAiY2Fubm90IG1hcCBkZXZpY2UgcmVnaXN0ZXJzXG4iKTsKIAkJZ290byBlcnJfaW9yZW1hcDsKIAl9CiAJbmV0ZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZylhZGFwdGVyLT5ody5od19hZGRyOwpAQCAtMjM1Niw3ICsyMzM5LDcgQEAKIAkvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KIAllcnIgPSBhdGwxZV9zd19pbml0KGFkYXB0ZXIpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAibmV0IGRldmljZSBwcml2YXRlIGRhdGEgaW5pdCBmYWlsZWRcbiIpOworCQluZXRkZXZfZXJyKG5ldGRldiwgIm5ldCBkZXZpY2UgcHJpdmF0ZSBkYXRhIGluaXQgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfc3dfaW5pdDsKIAl9CiAKQEAgLTIzNzIsMjIgKzIzNTUsMTkgQEAKIAogCWlmIChhdGwxZV9yZWFkX21hY19hZGRyKCZhZGFwdGVyLT5odykgIT0gMCkgewogCQllcnIgPSAtRUlPOwotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJnZXQgbWFjIGFkZHJlc3MgZmFpbGVkXG4iKTsKKwkJbmV0ZGV2X2VycihuZXRkZXYsICJnZXQgbWFjIGFkZHJlc3MgZmFpbGVkXG4iKTsKIAkJZ290byBlcnJfZWVwcm9tOwogCX0KIAogCW1lbWNweShuZXRkZXYtPmRldl9hZGRyLCBhZGFwdGVyLT5ody5tYWNfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAJbWVtY3B5KG5ldGRldi0+cGVybV9hZGRyLCBhZGFwdGVyLT5ody5tYWNfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7Ci0JZGV2X2RiZygmcGRldi0+ZGV2LCAibWFjIGFkZHJlc3MgOiAlMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMngtJTAyeFxuIiwKLQkJCWFkYXB0ZXItPmh3Lm1hY19hZGRyWzBdLCBhZGFwdGVyLT5ody5tYWNfYWRkclsxXSwKLQkJCWFkYXB0ZXItPmh3Lm1hY19hZGRyWzJdLCBhZGFwdGVyLT5ody5tYWNfYWRkclszXSwKLQkJCWFkYXB0ZXItPmh3Lm1hY19hZGRyWzRdLCBhZGFwdGVyLT5ody5tYWNfYWRkcls1XSk7CisJbmV0ZGV2X2RiZyhuZXRkZXYsICJtYWMgYWRkcmVzcyA6ICVwTVxuIiwgYWRhcHRlci0+aHcubWFjX2FkZHIpOwogCiAJSU5JVF9XT1JLKCZhZGFwdGVyLT5yZXNldF90YXNrLCBhdGwxZV9yZXNldF90YXNrKTsKIAlJTklUX1dPUksoJmFkYXB0ZXItPmxpbmtfY2hnX3Rhc2ssIGF0bDFlX2xpbmtfY2hnX3Rhc2spOwogCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVnaXN0ZXIgbmV0ZGV2aWNlIGZhaWxlZFxuIik7CisJCW5ldGRldl9lcnIobmV0ZGV2LCAicmVnaXN0ZXIgbmV0ZGV2aWNlIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCX0KIApAQCAtMjQ4OCw4ICsyNDY4LDggQEAKIAlzdHJ1Y3QgYXRsMWVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkgICAgICAgIkFUTDFlOiBDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXG4iKTsKKwkJbmV0ZGV2X2VycihhZGFwdGVyLT5uZXRkZXYsCisJCQkgICAiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0XG4iKTsKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiAJfQogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwpAQCAtMjUxNyw4ICsyNDk3LDggQEAKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKIAkJaWYgKGF0bDFlX3VwKGFkYXB0ZXIpKSB7Ci0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkgICJBVEwxZTogY2FuJ3QgYnJpbmcgZGV2aWNlIGJhY2sgdXAgYWZ0ZXIgcmVzZXRcbiIpOworCQkJbmV0ZGV2X2VycihhZGFwdGVyLT5uZXRkZXYsCisJCQkJICAgImNhbid0IGJyaW5nIGRldmljZSBiYWNrIHVwIGFmdGVyIHJlc2V0XG4iKTsKIAkJCXJldHVybjsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX3BhcmFtLmMgYi9kcml2ZXJzL25ldC9hdGwxZS9hdGwxZV9wYXJhbS5jCmluZGV4IGIzYmU1OWYuLjBjZTYwYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bDFlL2F0bDFlX3BhcmFtLmMKKysrIGIvZHJpdmVycy9uZXQvYXRsMWUvYXRsMWVfcGFyYW0uYwpAQCAtMTE2LDcgKzExNiw3IEBACiAJfSBhcmc7CiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBhdGwxZV92YWxpZGF0ZV9vcHRpb24oaW50ICp2YWx1ZSwgc3RydWN0IGF0bDFlX29wdGlvbiAqb3B0LCBzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGF0bDFlX3ZhbGlkYXRlX29wdGlvbihpbnQgKnZhbHVlLCBzdHJ1Y3QgYXRsMWVfb3B0aW9uICpvcHQsIHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQogewogCWlmICgqdmFsdWUgPT0gT1BUSU9OX1VOU0VUKSB7CiAJCSp2YWx1ZSA9IG9wdC0+ZGVmOwpAQCAtMTI3LDE2ICsxMjcsMTkgQEAKIAljYXNlIGVuYWJsZV9vcHRpb246CiAJCXN3aXRjaCAoKnZhbHVlKSB7CiAJCWNhc2UgT1BUSU9OX0VOQUJMRUQ6Ci0JCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgRW5hYmxlZFxuIiwgb3B0LT5uYW1lKTsKKwkJCW5ldGRldl9pbmZvKGFkYXB0ZXItPm5ldGRldiwKKwkJCQkgICAgIiVzIEVuYWJsZWRcbiIsIG9wdC0+bmFtZSk7CiAJCQlyZXR1cm4gMDsKIAkJY2FzZSBPUFRJT05fRElTQUJMRUQ6Ci0JCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXMgRGlzYWJsZWRcbiIsIG9wdC0+bmFtZSk7CisJCQluZXRkZXZfaW5mbyhhZGFwdGVyLT5uZXRkZXYsCisJCQkJICAgICIlcyBEaXNhYmxlZFxuIiwgb3B0LT5uYW1lKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgcmFuZ2Vfb3B0aW9uOgogCQlpZiAoKnZhbHVlID49IG9wdC0+YXJnLnIubWluICYmICp2YWx1ZSA8PSBvcHQtPmFyZy5yLm1heCkgewotCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVzIHNldCB0byAlaVxuIiwgb3B0LT5uYW1lLCAqdmFsdWUpOworCQkJbmV0ZGV2X2luZm8oYWRhcHRlci0+bmV0ZGV2LCAiJXMgc2V0IHRvICVpXG4iLAorCQkJCSAgICBvcHQtPm5hbWUsICp2YWx1ZSk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlicmVhazsKQEAgLTE0OCw4ICsxNTEsOCBAQAogCQkJCWVudCA9ICZvcHQtPmFyZy5sLnBbaV07CiAJCQkJaWYgKCp2YWx1ZSA9PSBlbnQtPmkpIHsKIAkJCQkJaWYgKGVudC0+c3RyWzBdICE9ICdcMCcpCi0JCQkJCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiJXNcbiIsCi0JCQkJCQkJZW50LT5zdHIpOworCQkJCQkJbmV0ZGV2X2luZm8oYWRhcHRlci0+bmV0ZGV2LAorCQkJCQkJCSAgICAiJXNcbiIsIGVudC0+c3RyKTsKIAkJCQkJcmV0dXJuIDA7CiAJCQkJfQogCQkJfQpAQCAtMTU5LDggKzE2Miw4IEBACiAJCUJVRygpOwogCX0KIAotCWRldl9pbmZvKCZwZGV2LT5kZXYsICJJbnZhbGlkICVzIHNwZWNpZmllZCAoJWkpICVzXG4iLAotCQkJb3B0LT5uYW1lLCAqdmFsdWUsIG9wdC0+ZXJyKTsKKwluZXRkZXZfaW5mbyhhZGFwdGVyLT5uZXRkZXYsICJJbnZhbGlkICVzIHNwZWNpZmllZCAoJWkpICVzXG4iLAorCQkgICAgb3B0LT5uYW1lLCAqdmFsdWUsIG9wdC0+ZXJyKTsKIAkqdmFsdWUgPSBvcHQtPmRlZjsKIAlyZXR1cm4gLTE7CiB9CkBAIC0xNzYsMTEgKzE3OSwxMyBAQAogICovCiB2b2lkIF9fZGV2aW5pdCBhdGwxZV9jaGVja19vcHRpb25zKHN0cnVjdCBhdGwxZV9hZGFwdGVyICphZGFwdGVyKQogewotCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIAlpbnQgYmQgPSBhZGFwdGVyLT5iZF9udW1iZXI7CisKIAlpZiAoYmQgPj0gQVRMMUVfTUFYX05JQykgewotCQlkZXZfbm90aWNlKCZwZGV2LT5kZXYsICJubyBjb25maWd1cmF0aW9uIGZvciBib2FyZCAjJWlcbiIsIGJkKTsKLQkJZGV2X25vdGljZSgmcGRldi0+ZGV2LCAiVXNpbmcgZGVmYXVsdHMgZm9yIGFsbCB2YWx1ZXNcbiIpOworCQluZXRkZXZfbm90aWNlKGFkYXB0ZXItPm5ldGRldiwKKwkJCSAgICAgICJubyBjb25maWd1cmF0aW9uIGZvciBib2FyZCAjJWlcbiIsIGJkKTsKKwkJbmV0ZGV2X25vdGljZShhZGFwdGVyLT5uZXRkZXYsCisJCQkgICAgICAiVXNpbmcgZGVmYXVsdHMgZm9yIGFsbCB2YWx1ZXNcbiIpOwogCX0KIAogCXsgCQkvKiBUcmFuc21pdCBSaW5nIFNpemUgKi8KQEAgLTE5Niw3ICsyMDEsNyBAQAogCQlpbnQgdmFsOwogCQlpZiAobnVtX3R4X2Rlc2NfY250ID4gYmQpIHsKIAkJCXZhbCA9IHR4X2Rlc2NfY250W2JkXTsKLQkJCWF0bDFlX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0LCBwZGV2KTsKKwkJCWF0bDFlX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0LCBhZGFwdGVyKTsKIAkJCWFkYXB0ZXItPnR4X3JpbmcuY291bnQgPSAodTE2KSB2YWwgJiAweEZGRkM7CiAJCX0gZWxzZQogCQkJYWRhcHRlci0+dHhfcmluZy5jb3VudCA9ICh1MTYpb3B0LmRlZjsKQEAgLTIxNSw3ICsyMjAsNyBAQAogCQlpbnQgdmFsOwogCQlpZiAobnVtX3J4X21lbV9zaXplID4gYmQpIHsKIAkJCXZhbCA9IHJ4X21lbV9zaXplW2JkXTsKLQkJCWF0bDFlX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0LCBwZGV2KTsKKwkJCWF0bDFlX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0LCBhZGFwdGVyKTsKIAkJCWFkYXB0ZXItPnJ4X3JpbmcucGFnZV9zaXplID0gKHUzMil2YWwgKiAxMDI0OwogCQl9IGVsc2UgewogCQkJYWRhcHRlci0+cnhfcmluZy5wYWdlX3NpemUgPSAodTMyKW9wdC5kZWYgKiAxMDI0OwpAQCAtMjM1LDcgKzI0MCw3IEBACiAJCWludCB2YWw7CiAJCWlmIChudW1faW50X21vZF90aW1lciA+IGJkKSB7CiAJCQl2YWwgPSBpbnRfbW9kX3RpbWVyW2JkXTsKLQkJCWF0bDFlX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0LCBwZGV2KTsKKwkJCWF0bDFlX3ZhbGlkYXRlX29wdGlvbigmdmFsLCAmb3B0LCBhZGFwdGVyKTsKIAkJCWFkYXB0ZXItPmh3LmltdCA9ICh1MTYpIHZhbDsKIAkJfSBlbHNlCiAJCQlhZGFwdGVyLT5ody5pbXQgPSAodTE2KShvcHQuZGVmKTsKQEAgLTI1NCw3ICsyNTksNyBAQAogCQlpbnQgdmFsOwogCQlpZiAobnVtX21lZGlhX3R5cGUgPiBiZCkgewogCQkJdmFsID0gbWVkaWFfdHlwZVtiZF07Ci0JCQlhdGwxZV92YWxpZGF0ZV9vcHRpb24oJnZhbCwgJm9wdCwgcGRldik7CisJCQlhdGwxZV92YWxpZGF0ZV9vcHRpb24oJnZhbCwgJm9wdCwgYWRhcHRlcik7CiAJCQlhZGFwdGVyLT5ody5tZWRpYV90eXBlID0gKHUxNikgdmFsOwogCQl9IGVsc2UKIAkJCWFkYXB0ZXItPmh3Lm1lZGlhX3R5cGUgPSAodTE2KShvcHQuZGVmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMS5jIGIvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKaW5kZXggYjZjZjMyNi4uOWJhNTQ3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKKysrIGIvZHJpdmVycy9uZXQvYXRseC9hdGwxLmMKQEAgLTIzMiw3ICsyMzIsNyBAQAogLyoKICAqIGF0bDFfcGNpX3RibCAtIFBDSSBEZXZpY2UgSUQgVGFibGUKICAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0bDFfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGF0bDFfcGNpX3RibCkgPSB7CiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BVFRBTlNJQywgUENJX0RFVklDRV9JRF9BVFRBTlNJQ19MMSl9LAogCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KIAl7MCx9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGx4L2F0bDIuYyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jCmluZGV4IGVjNTI1MjkuLjcwNjFkNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jCisrKyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5jCkBAIC02Myw3ICs2Myw3IEBACiAvKgogICogYXRsMl9wY2lfdGJsIC0gUENJIERldmljZSBJRCBUYWJsZQogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRsMl9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYXRsMl9wY2lfdGJsKSA9IHsKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FUVEFOU0lDLCBQQ0lfREVWSUNFX0lEX0FUVEFOU0lDX0wyKX0sCiAJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLwogCXswLH0KQEAgLTE1Nyw3ICsxNTcsNyBAQAogCUFUTDJfV1JJVEVfUkVHX0FSUkFZKGh3LCBSRUdfUlhfSEFTSF9UQUJMRSwgMSwgMCk7CiAKIAkvKiBjb21vdXRlIG1jIGFkZHJlc3NlcycgaGFzaCB2YWx1ZSAsYW5kIHB1dCBpdCBpbnRvIGhhc2ggdGFibGUgKi8KLQlmb3IgKG1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsgbWNfcHRyOyBtY19wdHIgPSBtY19wdHItPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19wdHIsIG5ldGRldikgewogCQloYXNoX3ZhbHVlID0gYXRsMl9oYXNoX21jX2FkZHIoaHcsIG1jX3B0ci0+ZG1pX2FkZHIpOwogCQlhdGwyX2hhc2hfc2V0KGh3LCBoYXNoX3ZhbHVlKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdGx4L2F0bDIuaCBiL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5oCmluZGV4IGQ5MThiYmUuLjkyN2U0ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5oCisrKyBiL2RyaXZlcnMvbmV0L2F0bHgvYXRsMi5oCkBAIC00NDIsNyArNDQyLDcgQEAKIHN0cnVjdCBhdGwyX3JpbmdfaGVhZGVyIHsKICAgICAvKiBwb2ludGVyIHRvIHRoZSBkZXNjcmlwdG9yIHJpbmcgbWVtb3J5ICovCiAgICAgdm9pZCAqZGVzYzsKLSAgICAvKiBwaHlzaWNhbCBhZHJlc3Mgb2YgdGhlIGRlc2NyaXB0b3IgcmluZyAqLworICAgIC8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIGRlc2NyaXB0b3IgcmluZyAqLwogICAgIGRtYV9hZGRyX3QgZG1hOwogICAgIC8qIGxlbmd0aCBvZiBkZXNjcmlwdG9yIHJpbmcgaW4gYnl0ZXMgKi8KICAgICB1bnNpZ25lZCBpbnQgc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2F0bHgvYXRseC5jIGIvZHJpdmVycy9uZXQvYXRseC9hdGx4LmMKaW5kZXggM2RjMDE0Mi4uNzJmMzMwNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYXRseC9hdGx4LmMKKysrIGIvZHJpdmVycy9uZXQvYXRseC9hdGx4LmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogCWlvd3JpdGUzMigwLCAoaHctPmh3X2FkZHIgKyBSRUdfUlhfSEFTSF9UQUJMRSkgKyAoMSA8PCAyKSk7CiAKIAkvKiBjb21wdXRlIG1jIGFkZHJlc3NlcycgaGFzaCB2YWx1ZSAsYW5kIHB1dCBpdCBpbnRvIGhhc2ggdGFibGUgKi8KLQlmb3IgKG1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsgbWNfcHRyOyBtY19wdHIgPSBtY19wdHItPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19wdHIsIG5ldGRldikgewogCQloYXNoX3ZhbHVlID0gYXRseF9oYXNoX21jX2FkZHIoaHcsIG1jX3B0ci0+ZG1pX2FkZHIpOwogCQlhdGx4X2hhc2hfc2V0KGh3LCBoYXNoX3ZhbHVlKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hdHAuYyBiL2RyaXZlcnMvbmV0L2F0cC5jCmluZGV4IDJmODI2MWMuLjZhZDE2MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F0cC5jCisrKyBiL2RyaXZlcnMvbmV0L2F0cC5jCkBAIC04NjEsNyArODYxLDcgQEAKIAlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAotCWlmIChkZXYtPm1jX2NvdW50ID4gMCB8fCAoZGV2LT5mbGFncyAmIChJRkZfQUxMTVVMVEl8SUZGX1BST01JU0MpKSkKKwlpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpIHx8IChkZXYtPmZsYWdzICYgKElGRl9BTExNVUxUSXxJRkZfUFJPTUlTQykpKQogCQlscC0+YWRkcl9tb2RlID0gQ01SMmhfUFJPTUlTQzsKIAllbHNlCiAJCWxwLT5hZGRyX21vZGUgPSBDTVIyaF9Ob3JtYWw7CkBAIC04NzcsNyArODc3LDggQEAKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsJCQkvKiBTZXQgcHJvbWlzY3VvdXMuICovCiAJCW5ld19tb2RlID0gQ01SMmhfUFJPTUlTQzsKLQl9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gMTAwMCkgIHx8ICAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKKwl9IGVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IDEwMDApIHx8CisJCSAgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkvKiBUb28gbWFueSB0byBmaWx0ZXIgcGVyZmVjdGx5IC0tIGFjY2VwdCBhbGwgbXVsdGljYXN0cy4gKi8KIAkJbWVtc2V0KG1jX2ZpbHRlciwgMHhmZiwgc2l6ZW9mKG1jX2ZpbHRlcikpOwogCQluZXdfbW9kZSA9IENNUjJoX05vcm1hbDsKQEAgLTg4NSw5ICs4ODYsNyBAQAogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKIAogCQltZW1zZXQobWNfZmlsdGVyLCAwLCBzaXplb2YobWNfZmlsdGVyKSk7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkJIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KQotCQl7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCQlpbnQgZmlsdGVyYml0ID0gZXRoZXJfY3JjX2xlKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSAmIDB4M2Y7CiAJCQltY19maWx0ZXJbZmlsdGVyYml0ID4+IDVdIHw9IDEgPDwgKGZpbHRlcmJpdCAmIDMxKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jIGIvZHJpdmVycy9uZXQvYXUxMDAwX2V0aC5jCmluZGV4IDZlNWE2OGUuLjRkYTE5MWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2F1MTAwMF9ldGguYworKysgYi9kcml2ZXJzL25ldC9hdTEwMDBfZXRoLmMKQEAgLTk1MiwyMSArOTUyLDE4IEBACiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewkJCS8qIFNldCBwcm9taXNjdW91cy4gKi8KIAkJYXVwLT5tYWMtPmNvbnRyb2wgfD0gTUFDX1BST01JU0NVT1VTOwogCX0gZWxzZSBpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpICB8fAotCQkJICAgZGV2LT5tY19jb3VudCA+IE1VTFRJQ0FTVF9GSUxURVJfTElNSVQpIHsKKwkJCSAgIG5ldGRldl9tY19jb3VudChkZXYpID4gTVVMVElDQVNUX0ZJTFRFUl9MSU1JVCkgewogCQlhdXAtPm1hYy0+Y29udHJvbCB8PSBNQUNfUEFTU19BTExfTVVMVEk7CiAJCWF1cC0+bWFjLT5jb250cm9sICY9IH5NQUNfUFJPTUlTQ1VPVVM7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQYXNzIGFsbCBtdWx0aWNhc3RcbiIsIGRldi0+bmFtZSk7CiAJfSBlbHNlIHsKLQkJaW50IGk7CiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwogCQl1MzIgbWNfZmlsdGVyWzJdOwkvKiBNdWx0aWNhc3QgaGFzaCBmaWx0ZXIgKi8KIAogCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAwOwotCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKLQkJCSBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikKIAkJCXNldF9iaXQoZXRoZXJfY3JjKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKT4+MjYsCiAJCQkJCShsb25nICopbWNfZmlsdGVyKTsKLQkJfQogCQlhdXAtPm1hYy0+bXVsdGlfaGFzaF9oaWdoID0gbWNfZmlsdGVyWzFdOwogCQlhdXAtPm1hYy0+bXVsdGlfaGFzaF9sb3cgPSBtY19maWx0ZXJbMF07CiAJCWF1cC0+bWFjLT5jb250cm9sICY9IH5NQUNfUFJPTUlTQ1VPVVM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iNDQuYyBiL2RyaXZlcnMvbmV0L2I0NC5jCmluZGV4IDQ4NjlhZGIuLjMzMmM2MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2I0NC5jCisrKyBiL2RyaXZlcnMvbmV0L2I0NC5jCkBAIC0xMCw2ICsxMCw4IEBACiAgKiBEaXN0cmlidXRlIHVuZGVyIEdQTC4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgpAQCAtMzQsNyArMzYsNiBAQAogI2luY2x1ZGUgImI0NC5oIgogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImI0NCIKLSNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCiAjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMi4wIgogCiAjZGVmaW5lIEI0NF9ERUZfTVNHX0VOQUJMRQkgIFwKQEAgLTEwMiw3ICsxMDMsNyBAQAogCiAKICNpZmRlZiBDT05GSUdfQjQ0X1BDSQotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGI0NF9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYjQ0X3BjaV90YmwpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX0JDTTQ0MDEpIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfQkNNNDQwMUIwKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX0JDTTQ0MDFCMSkgfSwKQEAgLTE4OSwxMSArMTkwLDEwIEBACiAJCXVkZWxheSgxMCk7CiAJfQogCWlmIChpID09IHRpbWVvdXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEJVRyEgIFRpbWVvdXQgd2FpdGluZyBmb3IgYml0ICUwOHggb2YgcmVnaXN0ZXIgIgotCQkgICAgICAgIiVseCB0byAlcy5cbiIsCi0JCSAgICAgICBicC0+ZGV2LT5uYW1lLAotCQkgICAgICAgYml0LCByZWcsCi0JCSAgICAgICAoY2xlYXIgPyAiY2xlYXIiIDogInNldCIpKTsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCW5ldGRldl9lcnIoYnAtPmRldiwgIkJVRyEgIFRpbWVvdXQgd2FpdGluZyBmb3IgYml0ICUwOHggb2YgcmVnaXN0ZXIgJWx4IHRvICVzXG4iLAorCQkJCSAgIGJpdCwgcmVnLCBjbGVhciA/ICJjbGVhciIgOiAic2V0Iik7CisKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwpAQCAtMzMzLDEzICszMzMsMTIgQEAKIAllcnIgPSBiNDRfcmVhZHBoeShicCwgTUlJX0JNQ1IsICZ2YWwpOwogCWlmICghZXJyKSB7CiAJCWlmICh2YWwgJiBCTUNSX1JFU0VUKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogUEhZIFJlc2V0IHdvdWxkIG5vdCBjb21wbGV0ZS5cbiIsCi0JCQkgICAgICAgYnAtPmRldi0+bmFtZSk7CisJCQluZXRkZXZfZXJyKGJwLT5kZXYsICJQSFkgUmVzZXQgd291bGQgbm90IGNvbXBsZXRlXG4iKTsKIAkJCWVyciA9IC1FTk9ERVY7CiAJCX0KIAl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2I0NF9zZXRfZmxvd19jdHJsKHN0cnVjdCBiNDQgKmJwLCB1MzIgcGF1c2VfZmxhZ3MpCkBAIC00MTMsNyArNDEyLDcgQEAKIAl9CiAJcmV0dXJuOwogZXJyb3I6Ci0JcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIlBIWTogY2Fubm90IHJlc2V0IE1JSSB0cmFuc2NlaXZlciBpc29sYXRlIGJpdC5cbiIpOworCXByX3dhcm5pbmcoIlBIWTogY2Fubm90IHJlc2V0IE1JSSB0cmFuc2NlaXZlciBpc29sYXRlIGJpdFxuIik7CiB9CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIGI0NF93YXA1NGcxMF93b3JrYXJvdW5kKHN0cnVjdCBiNDQgKmJwKQpAQCAtNTA2LDE4ICs1MDUsMTUgQEAKIHN0YXRpYyB2b2lkIGI0NF9saW5rX3JlcG9ydChzdHJ1Y3QgYjQ0ICpicCkKIHsKIAlpZiAoIW5ldGlmX2NhcnJpZXJfb2soYnAtPmRldikpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBMaW5rIGlzIGRvd24uXG4iLCBicC0+ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2luZm8oYnAtPmRldiwgIkxpbmsgaXMgZG93blxuIik7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBMaW5rIGlzIHVwIGF0ICVkIE1icHMsICVzIGR1cGxleC5cbiIsCi0JCSAgICAgICBicC0+ZGV2LT5uYW1lLAotCQkgICAgICAgKGJwLT5mbGFncyAmIEI0NF9GTEFHXzEwMF9CQVNFX1QpID8gMTAwIDogMTAsCi0JCSAgICAgICAoYnAtPmZsYWdzICYgQjQ0X0ZMQUdfRlVMTF9EVVBMRVgpID8gImZ1bGwiIDogImhhbGYiKTsKKwkJbmV0ZGV2X2luZm8oYnAtPmRldiwgIkxpbmsgaXMgdXAgYXQgJWQgTWJwcywgJXMgZHVwbGV4XG4iLAorCQkJICAgIChicC0+ZmxhZ3MgJiBCNDRfRkxBR18xMDBfQkFTRV9UKSA/IDEwMCA6IDEwLAorCQkJICAgIChicC0+ZmxhZ3MgJiBCNDRfRkxBR19GVUxMX0RVUExFWCkgPyAiZnVsbCIgOiAiaGFsZiIpOwogCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogRmxvdyBjb250cm9sIGlzICVzIGZvciBUWCBhbmQgIgotCQkgICAgICAgIiVzIGZvciBSWC5cbiIsCi0JCSAgICAgICBicC0+ZGV2LT5uYW1lLAotCQkgICAgICAgKGJwLT5mbGFncyAmIEI0NF9GTEFHX1RYX1BBVVNFKSA/ICJvbiIgOiAib2ZmIiwKLQkJICAgICAgIChicC0+ZmxhZ3MgJiBCNDRfRkxBR19SWF9QQVVTRSkgPyAib24iIDogIm9mZiIpOworCQluZXRkZXZfaW5mbyhicC0+ZGV2LCAiRmxvdyBjb250cm9sIGlzICVzIGZvciBUWCBhbmQgJXMgZm9yIFJYXG4iLAorCQkJICAgIChicC0+ZmxhZ3MgJiBCNDRfRkxBR19UWF9QQVVTRSkgPyAib24iIDogIm9mZiIsCisJCQkgICAgKGJwLT5mbGFncyAmIEI0NF9GTEFHX1JYX1BBVVNFKSA/ICJvbiIgOiAib2ZmIik7CiAJfQogfQogCkBAIC01NzYsMTEgKzU3Miw5IEBACiAJCX0KIAogCQlpZiAoYm1zciAmIEJNU1JfUkZBVUxUKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiBSZW1vdGUgZmF1bHQgZGV0ZWN0ZWQgaW4gUEhZXG4iLAotCQkJICAgICAgIGJwLT5kZXYtPm5hbWUpOworCQkJbmV0ZGV2X3dhcm4oYnAtPmRldiwgIlJlbW90ZSBmYXVsdCBkZXRlY3RlZCBpbiBQSFlcbiIpOwogCQlpZiAoYm1zciAmIEJNU1JfSkNEKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiBKYWJiZXIgZGV0ZWN0ZWQgaW4gUEhZXG4iLAotCQkJICAgICAgIGJwLT5kZXYtPm5hbWUpOworCQkJbmV0ZGV2X3dhcm4oYnAtPmRldiwgIkphYmJlciBkZXRlY3RlZCBpbiBQSFlcbiIpOwogCX0KIH0KIApAQCAtODE1LDcgKzgwOSw3IEBACiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqY29weV9za2I7CiAKIAkJCWI0NF9yZWN5Y2xlX3J4KGJwLCBjb25zLCBicC0+cnhfcHJvZCk7Ci0JCQljb3B5X3NrYiA9IGRldl9hbGxvY19za2IobGVuICsgMik7CisJCQljb3B5X3NrYiA9IG5ldGRldl9hbGxvY19za2IoYnAtPmRldiwgbGVuICsgMik7CiAJCQlpZiAoY29weV9za2IgPT0gTlVMTCkKIAkJCQlnb3RvIGRyb3BfaXRfbm9fcmVjeWNsZTsKIApAQCAtOTAxLDcgKzg5NSw3IEBACiAJCWhhbmRsZWQgPSAxOwogCiAJCWlmICh1bmxpa2VseSghbmV0aWZfcnVubmluZyhkZXYpKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGxhdGUgaW50ZXJydXB0LlxuIiwgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9pbmZvKGRldiwgImxhdGUgaW50ZXJydXB0XG4iKTsKIAkJCWdvdG8gaXJxX2FjazsKIAkJfQogCkBAIC05MjYsOCArOTIwLDcgQEAKIHsKIAlzdHJ1Y3QgYjQ0ICpicCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogdHJhbnNtaXQgdGltZWQgb3V0LCByZXNldHRpbmdcbiIsCi0JICAgICAgIGRldi0+bmFtZSk7CisJbmV0ZGV2X2VycihkZXYsICJ0cmFuc21pdCB0aW1lZCBvdXQsIHJlc2V0dGluZ1xuIik7CiAKIAlzcGluX2xvY2tfaXJxKCZicC0+bG9jayk7CiAKQEAgLTk1Niw4ICs5NDksNyBAQAogCS8qIFRoaXMgaXMgYSBoYXJkIGVycm9yLCBsb2cgaXQuICovCiAJaWYgKHVubGlrZWx5KFRYX0JVRkZTX0FWQUlMKGJwKSA8IDEpKSB7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEJVRyEgVHggUmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJCVUchIFR4IFJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIik7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKQEAgLTEzMzMsNyArMTMyNSw3IEBACiAJLyogcmVzZXQgUEhZICovCiAJYjQ0X3BoeV9yZXNldChicCk7CiAJLyogcG93ZXIgZG93biBQSFkgKi8KLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IHBvd2VyaW5nIGRvd24gUEhZXG4iLCBicC0+ZGV2LT5uYW1lKTsKKwluZXRkZXZfaW5mbyhicC0+ZGV2LCAicG93ZXJpbmcgZG93biBQSFlcbiIpOwogCWJ3MzIoYnAsIEI0NF9NQUNfQ1RSTCwgTUFDX0NUUkxfUEhZX1BET1dOKTsKIAkvKiBub3cgcmVzZXQgdGhlIGNoaXAsIGJ1dCB3aXRob3V0IGVuYWJsaW5nIHRoZSBNQUMmUEhZCiAJICogcGFydCBvZiBpdC4gVGhpcyBoYXMgdG8gYmUgZG9uZSBfYWZ0ZXJfIHdlIHNodXQgZG93biB0aGUgUEhZICovCkBAIC0xNTI0LDcgKzE1MTYsNyBAQAogCiAJcHdvbF9wYXR0ZXJuID0ga3phbGxvYyhCNDRfUEFUVEVSTl9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXB3b2xfcGF0dGVybikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJNZW1vcnkgbm90IGF2YWlsYWJsZSBmb3IgV09MXG4iKTsKKwkJcHJfZXJyKCJNZW1vcnkgbm90IGF2YWlsYWJsZSBmb3IgV09MXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTY5MSwxMCArMTY4MywxMiBAQAogCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwogCWludCBpLCBudW1fZW50czsKIAotCW51bV9lbnRzID0gbWluX3QoaW50LCBkZXYtPm1jX2NvdW50LCBCNDRfTUNBU1RfVEFCTEVfU0laRSk7Ci0JbWNsaXN0ID0gZGV2LT5tY19saXN0OwotCWZvciAoaSA9IDA7IG1jbGlzdCAmJiBpIDwgbnVtX2VudHM7IGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7Ci0JCV9fYjQ0X2NhbV93cml0ZShicCwgbWNsaXN0LT5kbWlfYWRkciwgaSArIDEpOworCW51bV9lbnRzID0gbWluX3QoaW50LCBuZXRkZXZfbWNfY291bnQoZGV2KSwgQjQ0X01DQVNUX1RBQkxFX1NJWkUpOworCWkgPSAwOworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CisJCWlmIChpID09IG51bV9lbnRzKQorCQkJYnJlYWs7CisJCV9fYjQ0X2NhbV93cml0ZShicCwgbWNsaXN0LT5kbWlfYWRkciwgaSsrICsgMSk7CiAJfQogCXJldHVybiBpKzE7CiB9CkBAIC0xNzE2LDcgKzE3MTAsNyBAQAogCQlfX2I0NF9zZXRfbWFjX2FkZHIoYnApOwogCiAJCWlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKLQkJICAgIChkZXYtPm1jX2NvdW50ID4gQjQ0X01DQVNUX1RBQkxFX1NJWkUpKQorCQkgICAgKG5ldGRldl9tY19jb3VudChkZXYpID4gQjQ0X01DQVNUX1RBQkxFX1NJWkUpKQogCQkJdmFsIHw9IFJYQ09ORklHX0FMTE1VTFRJOwogCQllbHNlCiAJCQlpID0gX19iNDRfbG9hZF9tY2FzdChicCwgZGV2KTsKQEAgLTIwOTcsNyArMjA5MSw3IEBACiAJbWVtY3B5KGJwLT5kZXYtPmRldl9hZGRyLCBhZGRyLCA2KTsKIAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcigmYnAtPmRldi0+ZGV2X2FkZHJbMF0pKXsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiSW52YWxpZCBNQUMgYWRkcmVzcyBmb3VuZCBpbiBFRVBST01cbiIpOworCQlwcl9lcnIoIkludmFsaWQgTUFDIGFkZHJlc3MgZm91bmQgaW4gRUVQUk9NXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yMTQyLDEyICsyMTM2LDEyIEBACiAJaW5zdGFuY2UrKzsKIAogCWlmIChiNDRfdmVyc2lvbl9wcmludGVkKysgPT0gMCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uKTsKKwkJcHJfaW5mbygiJXMiLCB2ZXJzaW9uKTsKIAogCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCpicCkpOwogCWlmICghZGV2KSB7Ci0JCWRldl9lcnIoc2Rldi0+ZGV2LCAiRXRoZXJkZXYgYWxsb2MgZmFpbGVkLCBhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKHNkZXYtPmRldiwgIkV0aGVyZGV2IGFsbG9jIGZhaWxlZCwgYWJvcnRpbmdcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yMTg2LDEzICsyMTgwLDEzIEBACiAJZXJyID0gc3NiX2RtYV9zZXRfbWFzayhzZGV2LCBETUFfQklUX01BU0soMzApKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoc2Rldi0+ZGV2LAotCQkJIlJlcXVpcmVkIDMwQklUIERNQSBtYXNrIHVuc3VwcG9ydGVkIGJ5IHRoZSBzeXN0ZW0uXG4iKTsKKwkJCSJSZXF1aXJlZCAzMEJJVCBETUEgbWFzayB1bnN1cHBvcnRlZCBieSB0aGUgc3lzdGVtXG4iKTsKIAkJZ290byBlcnJfb3V0X3Bvd2VyZG93bjsKIAl9CiAJZXJyID0gYjQ0X2dldF9pbnZhcmlhbnRzKGJwKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoc2Rldi0+ZGV2LAotCQkJIlByb2JsZW0gZmV0Y2hpbmcgaW52YXJpYW50cyBvZiBjaGlwLCBhYm9ydGluZy5cbiIpOworCQkJIlByb2JsZW0gZmV0Y2hpbmcgaW52YXJpYW50cyBvZiBjaGlwLCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gZXJyX291dF9wb3dlcmRvd247CiAJfQogCkBAIC0yMjEyLDcgKzIyMDYsNyBAQAogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewotCQlkZXZfZXJyKHNkZXYtPmRldiwgIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKHNkZXYtPmRldiwgIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gZXJyX291dF9wb3dlcmRvd247CiAJfQogCkBAIC0yMjIzLDggKzIyMTcsMTIgQEAKIAkgKi8KIAliNDRfY2hpcF9yZXNldChicCwgQjQ0X0NISVBfUkVTRVRfRlVMTCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogQnJvYWRjb20gNDR4eC80N3h4IDEwLzEwMEJhc2VUIEV0aGVybmV0ICVwTVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPmRldl9hZGRyKTsKKwkvKiBkbyBhIHBoeSByZXNldCB0byB0ZXN0IGlmIHRoZXJlIGlzIGFuIGFjdGl2ZSBwaHkgKi8KKwlpZiAoYjQ0X3BoeV9yZXNldChicCkgPCAwKQorCQlicC0+cGh5X2FkZHIgPSBCNDRfUEhZX0FERFJfTk9fUEhZOworCisJbmV0ZGV2X2luZm8oZGV2LCAiQnJvYWRjb20gNDR4eC80N3h4IDEwLzEwMEJhc2VUIEV0aGVybmV0ICVwTVxuIiwKKwkJICAgIGRldi0+ZGV2X2FkZHIpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTIyOTcsNyArMjI5NSw3IEBACiAKIAlyYyA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBiNDRfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogcmVxdWVzdF9pcnEgZmFpbGVkXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgInJlcXVlc3RfaXJxIGZhaWxlZFxuIik7CiAJCXJldHVybiByYzsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JjbTYzeHhfZW5ldC5jIGIvZHJpdmVycy9uZXQvYmNtNjN4eF9lbmV0LmMKaW5kZXggMGJkNDdkMy4uOGNkY2FiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmNtNjN4eF9lbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvYmNtNjN4eF9lbmV0LmMKQEAgLTYxOSw3ICs2MTksNyBAQAogCiAJLyogb25seSAzIHBlcmZlY3QgbWF0Y2ggcmVnaXN0ZXJzIGxlZnQsIGZpcnN0IG9uZSBpcyB1c2VkIGZvcgogCSAqIG93biBtYWMgYWRkcmVzcyAqLwotCWlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgZGV2LT5tY19jb3VudCA+IDMpCisJaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCBuZXRkZXZfbWNfY291bnQoZGV2KSA+IDMpCiAJCXZhbCB8PSBFTkVUX1JYQ0ZHX0FMTE1DQVNUX01BU0s7CiAJZWxzZQogCQl2YWwgJj0gfkVORVRfUlhDRkdfQUxMTUNBU1RfTUFTSzsKQEAgLTYzMSwxNiArNjMxLDEzIEBACiAJCXJldHVybjsKIAl9CiAKLQlmb3IgKGkgPSAwLCBtY19saXN0ID0gZGV2LT5tY19saXN0OwotCSAgICAgKG1jX2xpc3QgIT0gTlVMTCkgJiYgKGkgPCBkZXYtPm1jX2NvdW50KSAmJiAoaSA8IDMpOwotCSAgICAgaSsrLCBtY19saXN0ID0gbWNfbGlzdC0+bmV4dCkgeworCWkgPSAwOworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jX2xpc3QsIGRldikgewogCQl1OCAqZG1pX2FkZHI7CiAJCXUzMiB0bXA7CiAKLQkJLyogZmlsdGVyIG5vbiBldGhlcm5ldCBhZGRyZXNzICovCi0JCWlmIChtY19saXN0LT5kbWlfYWRkcmxlbiAhPSA2KQotCQkJY29udGludWU7Ci0KKwkJaWYgKGkgPT0gMykKKwkJCWJyZWFrOwogCQkvKiB1cGRhdGUgcGVyZmVjdCBtYXRjaCByZWdpc3RlcnMgKi8KIAkJZG1pX2FkZHIgPSBtY19saXN0LT5kbWlfYWRkcjsKIAkJdG1wID0gKGRtaV9hZGRyWzJdIDw8IDI0KSB8IChkbWlfYWRkclszXSA8PCAxNikgfApAQCAtNjQ5LDcgKzY0Niw3IEBACiAKIAkJdG1wID0gKGRtaV9hZGRyWzBdIDw8IDggfCBkbWlfYWRkclsxXSk7CiAJCXRtcCB8PSBFTkVUX1BNSF9EQVRBVkFMSURfTUFTSzsKLQkJZW5ldF93cml0ZWwocHJpdiwgdG1wLCBFTkVUX1BNSF9SRUcoaSArIDEpKTsKKwkJZW5ldF93cml0ZWwocHJpdiwgdG1wLCBFTkVUX1BNSF9SRUcoaSsrICsgMSkpOwogCX0KIAogCWZvciAoOyBpIDwgMzsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvYmVuZXQvS2NvbmZpZwppbmRleCBmZGI2ZTgxLi4xYTQxYTQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgQkUyTkVUCi0JdHJpc3RhdGUgIlNlcnZlckVuZ2luZXMnIDEwR2JwcyBOSUMgLSBCbGFkZUVuZ2luZSAyIgorCXRyaXN0YXRlICJTZXJ2ZXJFbmdpbmVzJyAxMEdicHMgTklDIC0gQmxhZGVFbmdpbmUiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgSU5FVAogCWhlbHAKIAlUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHRoZSBOSUMgZnVuY3Rpb25hbGl0eSBmb3IgU2VydmVyRW5naW5lcycKLQkxMEdicHMgbmV0d29yayBhZGFwdGVyIC0gQmxhZGVFbmdpbmUgMi4KKwkxMEdicHMgbmV0d29yayBhZGFwdGVyIC0gQmxhZGVFbmdpbmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZS5oIGIvZHJpdmVycy9uZXQvYmVuZXQvYmUuaAppbmRleCA1YmM3NDU5Li5iZTgxZmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZS5oCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlLmgKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzIsMjggKzMyLDI2IEBACiAKICNpbmNsdWRlICJiZV9ody5oIgogCi0jZGVmaW5lIERSVl9WRVIJCQkiMi4xMDEuMzQ2dSIKKyNkZWZpbmUgRFJWX1ZFUgkJCSIyLjEwMi4xNDd1IgogI2RlZmluZSBEUlZfTkFNRQkJImJlMm5ldCIKICNkZWZpbmUgQkVfTkFNRQkJCSJTZXJ2ZXJFbmdpbmVzIEJsYWRlRW5naW5lMiAxMEdicHMgTklDIgogI2RlZmluZSBCRTNfTkFNRQkJIlNlcnZlckVuZ2luZXMgQmxhZGVFbmdpbmUzIDEwR2JwcyBOSUMiCiAjZGVmaW5lIE9DX05BTUUJCQkiRW11bGV4IE9uZUNvbm5lY3QgMTBHYnBzIE5JQyIKICNkZWZpbmUgT0NfTkFNRTEJCSJFbXVsZXggT25lQ29ubmVjdCAxMEdicHMgTklDIChiZTMpIgotI2RlZmluZSBEUlZfREVTQwkJQkVfTkFNRSAiRHJpdmVyIgorI2RlZmluZSBEUlZfREVTQwkJIlNlcnZlckVuZ2luZXMgQmxhZGVFbmdpbmUgMTBHYnBzIE5JQyBEcml2ZXIiCiAKICNkZWZpbmUgQkVfVkVORE9SX0lEIAkJMHgxOWEyCiAjZGVmaW5lIEJFX0RFVklDRV9JRDEJCTB4MjExCiAjZGVmaW5lIEJFX0RFVklDRV9JRDIJCTB4MjIxCiAjZGVmaW5lIE9DX0RFVklDRV9JRDEJCTB4NzAwCi0jZGVmaW5lIE9DX0RFVklDRV9JRDIJCTB4NzAxCi0jZGVmaW5lIE9DX0RFVklDRV9JRDMJCTB4NzEwCisjZGVmaW5lIE9DX0RFVklDRV9JRDIJCTB4NzEwCiAKIHN0YXRpYyBpbmxpbmUgY2hhciAqbmljX25hbWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3dpdGNoIChwZGV2LT5kZXZpY2UpIHsKIAljYXNlIE9DX0RFVklDRV9JRDE6Ci0JY2FzZSBPQ19ERVZJQ0VfSUQyOgogCQlyZXR1cm4gT0NfTkFNRTsKLQljYXNlIE9DX0RFVklDRV9JRDM6CisJY2FzZSBPQ19ERVZJQ0VfSUQyOgogCQlyZXR1cm4gT0NfTkFNRTE7CiAJY2FzZSBCRV9ERVZJQ0VfSUQyOgogCQlyZXR1cm4gQkUzX05BTUU7CkBAIC0xNTMsNiArMTUxLDcgQEAKIHN0cnVjdCBiZV9tY2Nfb2JqIHsKIAlzdHJ1Y3QgYmVfcXVldWVfaW5mbyBxOwogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvIGNxOworCWJvb2wgcmVhcm1fY3E7CiB9OwogCiBzdHJ1Y3QgYmVfZHJ2cl9zdGF0cyB7CkBAIC0xNjUsNiArMTY0LDcgQEAKIAl1bG9uZyBiZV90eF9qaWZmaWVzOwogCXU2NCBiZV90eF9ieXRlczsKIAl1NjQgYmVfdHhfYnl0ZXNfcHJldjsKKwl1NjQgYmVfdHhfcGt0czsKIAl1MzIgYmVfdHhfcmF0ZTsKIAogCXUzMiBjYWNoZV9iYXJyaWVyWzE2XTsKQEAgLTE3Niw2ICsxNzYsNyBAQAogCXVsb25nIGJlX3J4X2ppZmZpZXM7CiAJdTY0IGJlX3J4X2J5dGVzOwogCXU2NCBiZV9yeF9ieXRlc19wcmV2OworCXU2NCBiZV9yeF9wa3RzOwogCXUzMiBiZV9yeF9yYXRlOwogCS8qIG51bWJlciBvZiBub24gZXRoZXIgdHlwZSBJSSBmcmFtZXMgZHJvcHBlZCB3aGVyZQogCSAqIGZyYW1lIGxlbiA+IGxlbmd0aCBmaWVsZCBvZiBNYWMgSGRyICovCkBAIC0yNTIsNyArMjUzLDggQEAKIAlib29sIHJ4X3Bvc3Rfc3RhcnZlZDsJLyogWmVybyByeCBmcmFncyBoYXZlIGJlZW4gcG9zdGVkIHRvIEJFICovCiAKIAlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxhbl9ncnA7Ci0JdTE2IG51bV92bGFuczsKKwl1MTYgdmxhbnNfYWRkZWQ7CisJdTE2IG1heF92bGFuczsJLyogTnVtYmVyIG9mIHZsYW5zIHN1cHBvcnRlZCAqLwogCXU4IHZsYW5fdGFnW1ZMQU5fR1JPVVBfQVJSQVlfTEVOXTsKIAlzdHJ1Y3QgYmVfZG1hX21lbSBtY19jbWRfbWVtOwogCkBAIC0yNjYsNiArMjY4LDcgQEAKIAl1MzIgaWZfaGFuZGxlOwkJLyogVXNlZCB0byBjb25maWd1cmUgZmlsdGVyaW5nICovCiAJdTMyIHBtYWNfaWQ7CQkvKiBNQUMgYWRkciBoYW5kbGUgdXNlZCBieSBCRSBjYXJkICovCiAKKwlib29sIGVlaF9lcnI7CiAJYm9vbCBsaW5rX3VwOwogCXUzMiBwb3J0X251bTsKIAlib29sIHByb21pc2N1b3VzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCmluZGV4IDAwNmNiMmVmLi40YjFmODA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmMKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTEwNCwxMCArMTA0LDI2IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLWludCBiZV9wcm9jZXNzX21jYyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3ZvaWQgYmVfYXN5bmNfbWNjX2VuYWJsZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPm1jY19jcV9sb2NrKTsKKworCWJlX2NxX25vdGlmeShhZGFwdGVyLCBhZGFwdGVyLT5tY2Nfb2JqLmNxLmlkLCB0cnVlLCAwKTsKKwlhZGFwdGVyLT5tY2Nfb2JqLnJlYXJtX2NxID0gdHJ1ZTsKKworCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5tY2NfY3FfbG9jayk7Cit9CisKK3ZvaWQgYmVfYXN5bmNfbWNjX2Rpc2FibGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJYWRhcHRlci0+bWNjX29iai5yZWFybV9jcSA9IGZhbHNlOworfQorCitpbnQgYmVfcHJvY2Vzc19tY2Moc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCAqc3RhdHVzKQogewogCXN0cnVjdCBiZV9tY2NfY29tcGwgKmNvbXBsOwotCWludCBudW0gPSAwLCBzdGF0dXMgPSAwOworCWludCBudW0gPSAwOworCXN0cnVjdCBiZV9tY2Nfb2JqICptY2Nfb2JqID0gJmFkYXB0ZXItPm1jY19vYmo7CiAKIAlzcGluX2xvY2tfYmgoJmFkYXB0ZXItPm1jY19jcV9sb2NrKTsKIAl3aGlsZSAoKGNvbXBsID0gYmVfbWNjX2NvbXBsX2dldChhZGFwdGVyKSkpIHsKQEAgLTExOSwzMSArMTM1LDMxIEBACiAJCQliZV9hc3luY19saW5rX3N0YXRlX3Byb2Nlc3MoYWRhcHRlciwKIAkJCQkoc3RydWN0IGJlX2FzeW5jX2V2ZW50X2xpbmtfc3RhdGUgKikgY29tcGwpOwogCQl9IGVsc2UgaWYgKGNvbXBsLT5mbGFncyAmIENRRV9GTEFHU19DT01QTEVURURfTUFTSykgewotCQkJCXN0YXR1cyA9IGJlX21jY19jb21wbF9wcm9jZXNzKGFkYXB0ZXIsIGNvbXBsKTsKLQkJCQlhdG9taWNfZGVjKCZhZGFwdGVyLT5tY2Nfb2JqLnEudXNlZCk7CisJCQkJKnN0YXR1cyA9IGJlX21jY19jb21wbF9wcm9jZXNzKGFkYXB0ZXIsIGNvbXBsKTsKKwkJCQlhdG9taWNfZGVjKCZtY2Nfb2JqLT5xLnVzZWQpOwogCQl9CiAJCWJlX21jY19jb21wbF91c2UoY29tcGwpOwogCQludW0rKzsKIAl9CiAKLQlpZiAobnVtKQotCQliZV9jcV9ub3RpZnkoYWRhcHRlciwgYWRhcHRlci0+bWNjX29iai5jcS5pZCwgdHJ1ZSwgbnVtKTsKLQogCXNwaW5fdW5sb2NrX2JoKCZhZGFwdGVyLT5tY2NfY3FfbG9jayk7Ci0JcmV0dXJuIHN0YXR1czsKKwlyZXR1cm4gbnVtOwogfQogCiAvKiBXYWl0IHRpbGwgbm8gbW9yZSBwZW5kaW5nIG1jYyByZXF1ZXN0cyBhcmUgcHJlc2VudCAqLwogc3RhdGljIGludCBiZV9tY2Nfd2FpdF9jb21wbChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKICNkZWZpbmUgbWNjX3RpbWVvdXQJCTEyMDAwMCAvKiAxMnMgdGltZW91dCAqLwotCWludCBpLCBzdGF0dXM7Ci0JZm9yIChpID0gMDsgaSA8IG1jY190aW1lb3V0OyBpKyspIHsKLQkJc3RhdHVzID0gYmVfcHJvY2Vzc19tY2MoYWRhcHRlcik7Ci0JCWlmIChzdGF0dXMpCi0JCQlyZXR1cm4gc3RhdHVzOworCWludCBpLCBudW0sIHN0YXR1cyA9IDA7CisJc3RydWN0IGJlX21jY19vYmogKm1jY19vYmogPSAmYWRhcHRlci0+bWNjX29iajsKIAotCQlpZiAoYXRvbWljX3JlYWQoJmFkYXB0ZXItPm1jY19vYmoucS51c2VkKSA9PSAwKQorCWZvciAoaSA9IDA7IGkgPCBtY2NfdGltZW91dDsgaSsrKSB7CisJCW51bSA9IGJlX3Byb2Nlc3NfbWNjKGFkYXB0ZXIsICZzdGF0dXMpOworCQlpZiAobnVtKQorCQkJYmVfY3Ffbm90aWZ5KGFkYXB0ZXIsIG1jY19vYmotPmNxLmlkLAorCQkJCW1jY19vYmotPnJlYXJtX2NxLCBudW0pOworCisJCWlmIChhdG9taWNfcmVhZCgmbWNjX29iai0+cS51c2VkKSA9PSAwKQogCQkJYnJlYWs7CiAJCXVkZWxheSgxMDApOwogCX0KQEAgLTE1MSw3ICsxNjcsNyBAQAogCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJtY2NxIHBvbGwgdGltZWQgb3V0XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gc3RhdHVzOwogfQogCiAvKiBOb3RpZnkgTUNDIHJlcXVlc3RzIGFuZCB3YWl0IGZvciBjb21wbGV0aW9uICovCkBAIC0xNjcsNyArMTgzLDE0IEBACiAJdTMyIHJlYWR5OwogCiAJZG8gewotCQlyZWFkeSA9IGlvcmVhZDMyKGRiKSAmIE1QVV9NQUlMQk9YX0RCX1JEWV9NQVNLOworCQlyZWFkeSA9IGlvcmVhZDMyKGRiKTsKKwkJaWYgKHJlYWR5ID09IDB4ZmZmZmZmZmYpIHsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkicGNpIHNsb3QgZGlzY29ubmVjdGVkXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCisJCXJlYWR5ICY9IE1QVV9NQUlMQk9YX0RCX1JEWV9NQVNLOwogCQlpZiAocmVhZHkpCiAJCQlicmVhazsKIApAQCAtMTk4LDYgKzIyMSwxMSBAQAogCXN0cnVjdCBiZV9tY2NfbWFpbGJveCAqbWJveCA9IG1ib3hfbWVtLT52YTsKIAlzdHJ1Y3QgYmVfbWNjX2NvbXBsICpjb21wbCA9ICZtYm94LT5jb21wbDsKIAorCS8qIHdhaXQgZm9yIHJlYWR5IHRvIGJlIHNldCAqLworCXN0YXR1cyA9IGJlX21ib3hfZGJfcmVhZHlfd2FpdChhZGFwdGVyLCBkYik7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlyZXR1cm4gc3RhdHVzOworCiAJdmFsIHw9IE1QVV9NQUlMQk9YX0RCX0hJX01BU0s7CiAJLyogYXQgYml0cyAyIC0gMzEgcGxhY2UgbWJveCBkbWEgYWRkciBtc2IgYml0cyAzNCAtIDYzICovCiAJdmFsIHw9ICh1cHBlcl8zMl9iaXRzKG1ib3hfbWVtLT5kbWEpID4+IDIpIDw8IDI7CkBAIC0zOTcsNiArNDI1LDkgQEAKIAl1OCAqd3JiOwogCWludCBzdGF0dXM7CiAKKwlpZiAoYWRhcHRlci0+ZWVoX2VycikKKwkJcmV0dXJuIC1FSU87CisKIAlzcGluX2xvY2soJmFkYXB0ZXItPm1ib3hfbG9jayk7CiAKIAl3cmIgPSAodTggKil3cmJfZnJvbV9tYm94KGFkYXB0ZXIpOwpAQCAtNzY5LDYgKzgwMCw5IEBACiAJdTggc3Vic3lzID0gMCwgb3Bjb2RlID0gMDsKIAlpbnQgc3RhdHVzOwogCisJaWYgKGFkYXB0ZXItPmVlaF9lcnIpCisJCXJldHVybiAtRUlPOworCiAJc3Bpbl9sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCiAJd3JiID0gd3JiX2Zyb21fbWJveChhZGFwdGVyKTsKQEAgLTg1Nyw2ICs4OTEsOSBAQAogCXN0cnVjdCBiZV9jbWRfcmVxX2lmX2Rlc3Ryb3kgKnJlcTsKIAlpbnQgc3RhdHVzOwogCisJaWYgKGFkYXB0ZXItPmVlaF9lcnIpCisJCXJldHVybiAtRUlPOworCiAJc3Bpbl9sb2NrKCZhZGFwdGVyLT5tYm94X2xvY2spOwogCiAJd3JiID0gd3JiX2Zyb21fbWJveChhZGFwdGVyKTsKQEAgLTEwOTcsOCArMTEzNCw3IEBACiAgKiAobWMgPT0gTlVMTCkgPT4gbXVsdGljYXN0IHByb21pc2NvdXMKICAqLwogaW50IGJlX2NtZF9tdWx0aWNhc3Rfc2V0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgaWZfaWQsCi0JCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdCwgdTMyIG1jX2NvdW50LAotCQlzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtKQorCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtKQogewogCXN0cnVjdCBiZV9tY2Nfd3JiICp3cmI7CiAJc3RydWN0IGJlX2NtZF9yZXFfbWNhc3RfbWFjX2NvbmZpZyAqcmVxID0gbWVtLT52YTsKQEAgLTExMjUsMTMgKzExNjEsMTQgQEAKIAkJT1BDT0RFX0NPTU1PTl9OVFdLX01VTFRJQ0FTVF9TRVQsIHNpemVvZigqcmVxKSk7CiAKIAlyZXEtPmludGVyZmFjZV9pZCA9IGlmX2lkOwotCWlmIChtY19saXN0KSB7CisJaWYgKG5ldGRldikgewogCQlpbnQgaTsKIAkJc3RydWN0IGRldl9tY19saXN0ICptYzsKIAotCQlyZXEtPm51bV9tYWMgPSBjcHVfdG9fbGUxNihtY19jb3VudCk7CisJCXJlcS0+bnVtX21hYyA9IGNwdV90b19sZTE2KG5ldGRldl9tY19jb3VudChuZXRkZXYpKTsKIAotCQlmb3IgKG1jID0gbWNfbGlzdCwgaSA9IDA7IG1jOyBtYyA9IG1jLT5uZXh0LCBpKyspCisJCWkgPSAwOworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtYywgbmV0ZGV2KQogCQkJbWVtY3B5KHJlcS0+bWFjW2ldLmJ5dGUsIG1jLT5kbWlfYWRkciwgRVRIX0FMRU4pOwogCX0gZWxzZSB7CiAJCXJlcS0+cHJvbWlzY3VvdXMgPSAxOwpAQCAtMTM3NSw3ICsxNDEyLDcgQEAKIAkJCXUzMiBmbGFzaF90eXBlLCB1MzIgZmxhc2hfb3Bjb2RlLCB1MzIgYnVmX3NpemUpCiB7CiAJc3RydWN0IGJlX21jY193cmIgKndyYjsKLQlzdHJ1Y3QgYmVfY21kX3dyaXRlX2ZsYXNocm9tICpyZXEgPSBjbWQtPnZhOworCXN0cnVjdCBiZV9jbWRfd3JpdGVfZmxhc2hyb20gKnJlcTsKIAlzdHJ1Y3QgYmVfc2dlICpzZ2U7CiAJaW50IHN0YXR1czsKIApAQCAtMTQwOSw3ICsxNDQ2LDggQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi1pbnQgYmVfY21kX2dldF9mbGFzaF9jcmMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICpmbGFzaGVkX2NyYykKK2ludCBiZV9jbWRfZ2V0X2ZsYXNoX2NyYyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTggKmZsYXNoZWRfY3JjLAorCQkJIGludCBvZmZzZXQpCiB7CiAJc3RydWN0IGJlX21jY193cmIgKndyYjsKIAlzdHJ1Y3QgYmVfY21kX3dyaXRlX2ZsYXNocm9tICpyZXE7CkBAIC0xNDMwLDkgKzE0NjgsOSBAQAogCWJlX2NtZF9oZHJfcHJlcGFyZSgmcmVxLT5oZHIsIENNRF9TVUJTWVNURU1fQ09NTU9OLAogCQlPUENPREVfQ09NTU9OX1JFQURfRkxBU0hST00sIHNpemVvZigqcmVxKSs0KTsKIAotCXJlcS0+cGFyYW1zLm9wX3R5cGUgPSBjcHVfdG9fbGUzMihGTEFTSFJPTV9UWVBFX1JFREJPT1QpOworCXJlcS0+cGFyYW1zLm9wX3R5cGUgPSBjcHVfdG9fbGUzMihJTUdfVFlQRV9SRURCT09UKTsKIAlyZXEtPnBhcmFtcy5vcF9jb2RlID0gY3B1X3RvX2xlMzIoRkxBU0hST01fT1BFUl9SRVBPUlQpOwotCXJlcS0+cGFyYW1zLm9mZnNldCA9IDB4M0ZGRkM7CisJcmVxLT5wYXJhbXMub2Zmc2V0ID0gb2Zmc2V0OwogCXJlcS0+cGFyYW1zLmRhdGFfYnVmX3NpemUgPSAweDQ7CiAKIAlzdGF0dXMgPSBiZV9tY2Nfbm90aWZ5X3dhaXQoYWRhcHRlcik7CkBAIC0xNjA4LDMgKzE2NDYsMzMgQEAKIAlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWNjX2xvY2spOwogCXJldHVybiBzdGF0dXM7CiB9CisKK2V4dGVybiBpbnQgYmVfY21kX2dldF9zZWVwcm9tX2RhdGEoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJc3RydWN0IGJlX2RtYV9tZW0gKm5vbmVtYl9jbWQpCit7CisJc3RydWN0IGJlX21jY193cmIgKndyYjsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9zZWVwcm9tX3JlYWQgKnJlcTsKKwlzdHJ1Y3QgYmVfc2dlICpzZ2U7CisJaW50IHN0YXR1czsKKworCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+bWNjX2xvY2spOworCisJd3JiID0gd3JiX2Zyb21fbWNjcShhZGFwdGVyKTsKKwlyZXEgPSBub25lbWJfY21kLT52YTsKKwlzZ2UgPSBub25lbWJlZGRlZF9zZ2wod3JiKTsKKworCWJlX3dyYl9oZHJfcHJlcGFyZSh3cmIsIHNpemVvZigqcmVxKSwgZmFsc2UsIDEsCisJCQlPUENPREVfQ09NTU9OX1NFRVBST01fUkVBRCk7CisKKwliZV9jbWRfaGRyX3ByZXBhcmUoJnJlcS0+aGRyLCBDTURfU1VCU1lTVEVNX0NPTU1PTiwKKwkJCU9QQ09ERV9DT01NT05fU0VFUFJPTV9SRUFELCBzaXplb2YoKnJlcSkpOworCisJc2dlLT5wYV9oaSA9IGNwdV90b19sZTMyKHVwcGVyXzMyX2JpdHMobm9uZW1iX2NtZC0+ZG1hKSk7CisJc2dlLT5wYV9sbyA9IGNwdV90b19sZTMyKG5vbmVtYl9jbWQtPmRtYSAmIDB4RkZGRkZGRkYpOworCXNnZS0+bGVuID0gY3B1X3RvX2xlMzIobm9uZW1iX2NtZC0+c2l6ZSk7CisKKwlzdGF0dXMgPSBiZV9tY2Nfbm90aWZ5X3dhaXQoYWRhcHRlcik7CisKKwlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWNjX2xvY2spOworCXJldHVybiBzdGF0dXM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmggYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9jbWRzLmgKaW5kZXggMTNiMzNjOC4uY2NlNjFmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfY21kcy5oCisrKyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2NtZHMuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0xMjQsNiArMTI0LDcgQEAKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9DUV9DUkVBVEUJCQkJMTIKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9FUV9DUkVBVEUJCQkJMTMKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9NQ0NfQ1JFQVRFICAgICAgICAJCTIxCisjZGVmaW5lIE9QQ09ERV9DT01NT05fU0VFUFJPTV9SRUFECQkJMzAKICNkZWZpbmUgT1BDT0RFX0NPTU1PTl9OVFdLX1JYX0ZJTFRFUiAgICAJCTM0CiAjZGVmaW5lIE9QQ09ERV9DT01NT05fR0VUX0ZXX1ZFUlNJT04JCQkzNQogI2RlZmluZSBPUENPREVfQ09NTU9OX1NFVF9GTE9XX0NPTlRST0wJCQkzNgpAQCAtODU1LDYgKzg1NiwxOSBAQAogCXU4ICByY3ZfYnVmZls0MDk2XTsKIH07CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKiBTRUVQUk9NIFJlYWQgKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQkVfUkVBRF9TRUVQUk9NX0xFTiAxMDI0CitzdHJ1Y3QgYmVfY21kX3JlcV9zZWVwcm9tX3JlYWQgeworCXN0cnVjdCBiZV9jbWRfcmVxX2hkciBoZHI7CisJdTggcnN2ZDBbQkVfUkVBRF9TRUVQUk9NX0xFTl07Cit9OworCitzdHJ1Y3QgYmVfY21kX3Jlc3Bfc2VlcHJvbV9yZWFkIHsKKwlzdHJ1Y3QgYmVfY21kX3JlcV9oZHIgaGRyOworCXU4IHNlZXByb21fZGF0YVtCRV9SRUFEX1NFRVBST01fTEVOXTsKK307CisKIGV4dGVybiBpbnQgYmVfcGNpX2ZudW1fZ2V0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiBpbnQgYmVfY21kX1BPU1Qoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIGludCBiZV9jbWRfbWFjX2FkZHJfcXVlcnkoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICptYWNfYWRkciwKQEAgLTg5OCw4ICs5MTIsNyBAQAogZXh0ZXJuIGludCBiZV9jbWRfcHJvbWlzY3VvdXNfY29uZmlnKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAogCQkJdTggcG9ydF9udW0sIGJvb2wgZW4pOwogZXh0ZXJuIGludCBiZV9jbWRfbXVsdGljYXN0X3NldChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIGlmX2lkLAotCQkJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0LCB1MzIgbWNfY291bnQsCi0JCQlzdHJ1Y3QgYmVfZG1hX21lbSAqbWVtKTsKKwkJCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBiZV9kbWFfbWVtICptZW0pOwogZXh0ZXJuIGludCBiZV9jbWRfc2V0X2Zsb3dfY29udHJvbChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJCXUzMiB0eF9mYywgdTMyIHJ4X2ZjKTsKIGV4dGVybiBpbnQgYmVfY21kX2dldF9mbG93X2NvbnRyb2woc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCkBAIC05MDcsNyArOTIwLDcgQEAKIGV4dGVybiBpbnQgYmVfY21kX3F1ZXJ5X2Z3X2NmZyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJCXUzMiAqcG9ydF9udW0sIHUzMiAqY2FwKTsKIGV4dGVybiBpbnQgYmVfY21kX3Jlc2V0X2Z1bmN0aW9uKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKLWV4dGVybiBpbnQgYmVfcHJvY2Vzc19tY2Moc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpOworZXh0ZXJuIGludCBiZV9wcm9jZXNzX21jYyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgaW50ICpzdGF0dXMpOwogZXh0ZXJuIGludCBiZV9jbWRfc2V0X2JlYWNvbl9zdGF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJCXU4IHBvcnRfbnVtLCB1OCBiZWFjb24sIHU4IHN0YXR1cywgdTggc3RhdGUpOwogZXh0ZXJuIGludCBiZV9jbWRfZ2V0X2JlYWNvbl9zdGF0ZShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKQEAgLTkxNywxNSArOTMwLDIxIEBACiBleHRlcm4gaW50IGJlX2NtZF93cml0ZV9mbGFzaHJvbShzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKIAkJCXN0cnVjdCBiZV9kbWFfbWVtICpjbWQsIHUzMiBmbGFzaF9vcGVyLAogCQkJdTMyIGZsYXNoX29wY29kZSwgdTMyIGJ1Zl9zaXplKTsKLWV4dGVybiBpbnQgYmVfY21kX2dldF9mbGFzaF9jcmMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICpmbGFzaGVkX2NyYyk7CitpbnQgYmVfY21kX2dldF9mbGFzaF9jcmMoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICpmbGFzaGVkX2NyYywKKwkJCQlpbnQgb2Zmc2V0KTsKIGV4dGVybiBpbnQgYmVfY21kX2VuYWJsZV9tYWdpY193b2woc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHU4ICptYWMsCiAJCQkJc3RydWN0IGJlX2RtYV9tZW0gKm5vbmVtYl9jbWQpOwogZXh0ZXJuIGludCBiZV9jbWRfZndfaW5pdChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gaW50IGJlX2NtZF9md19jbGVhbihzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBiZV9hc3luY19tY2NfZW5hYmxlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiB2b2lkIGJlX2FzeW5jX21jY19kaXNhYmxlKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiBpbnQgYmVfY21kX2xvb3BiYWNrX3Rlc3Qoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBwb3J0X251bSwKIAkJCQl1MzIgbG9vcGJhY2tfdHlwZSwgdTMyIHBrdF9zaXplLAogCQkJCXUzMiBudW1fcGt0cywgdTY0IHBhdHRlcm4pOwogZXh0ZXJuIGludCBiZV9jbWRfZGRyX2RtYV90ZXN0KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLCB1NjQgcGF0dGVybiwKIAkJCXUzMiBieXRlX2NudCwgc3RydWN0IGJlX2RtYV9tZW0gKmNtZCk7CitleHRlcm4gaW50IGJlX2NtZF9nZXRfc2VlcHJvbV9kYXRhKHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyLAorCQkJCXN0cnVjdCBiZV9kbWFfbWVtICpub25lbWJfY21kKTsKIGV4dGVybiBpbnQgYmVfY21kX3NldF9sb29wYmFjayhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTggcG9ydF9udW0sCiAJCQkJdTggbG9vcGJhY2tfdHlwZSwgdTggZW5hYmxlKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfZXRodG9vbC5jCmluZGV4IDVkMDAxYzQuLjk1NjBkNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ldGh0b29sLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAwOSBTZXJ2ZXJFbmdpbmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDEwIFNlcnZlckVuZ2luZXMKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMTEyLDYgKzExMiw3IEBACiAJIlBIWSBMb29wYmFjayB0ZXN0IiwKIAkiRXh0ZXJuYWwgTG9vcGJhY2sgdGVzdCIsCiAJIkREUiBETUEgdGVzdCIKKwkiTGluayB0ZXN0IgogfTsKIAogI2RlZmluZSBFVEhUT09MX1RFU1RTX05VTSBBUlJBWV9TSVpFKGV0X3NlbGZfdGVzdHMpCkBAIC01MjksNiArNTMwLDkgQEAKIGJlX3NlbGZfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgZXRodG9vbF90ZXN0ICp0ZXN0LCB1NjQgKmRhdGEpCiB7CiAJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWJvb2wgbGlua191cDsKKwl1OCBtYWNfc3BlZWQgPSAwOworCXUxNiBxb3NfbGlua19zcGVlZCA9IDA7CiAKIAltZW1zZXQoZGF0YSwgMCwgc2l6ZW9mKHU2NCkgKiBFVEhUT09MX1RFU1RTX05VTSk7CiAKQEAgLTU0NSwxMiArNTQ5LDIwIEBACiAJCQkJCQkmZGF0YVsyXSkgIT0gMCkgewogCQkJdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogCQl9Ci0KLQkJZGF0YVszXSA9IGJlX3Rlc3RfZGRyX2RtYShhZGFwdGVyKTsKLQkJaWYgKGRhdGFbM10gIT0gMCkKLQkJCXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKIAl9CiAKKwlpZiAoYmVfdGVzdF9kZHJfZG1hKGFkYXB0ZXIpICE9IDApIHsKKwkJZGF0YVszXSA9IDE7CisJCXRlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKwl9CisKKwlpZiAoYmVfY21kX2xpbmtfc3RhdHVzX3F1ZXJ5KGFkYXB0ZXIsICZsaW5rX3VwLCAmbWFjX3NwZWVkLAorCQkJCSZxb3NfbGlua19zcGVlZCkgIT0gMCkgeworCQl0ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisJCWRhdGFbNF0gPSAtMTsKKwl9IGVsc2UgaWYgKG1hY19zcGVlZCkgeworCQlkYXRhWzRdID0gMTsKKwl9CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTU2NywxMiArNTc5LDU3IEBACiAJcmV0dXJuIGJlX2xvYWRfZncoYWRhcHRlciwgZmlsZV9uYW1lKTsKIH0KIAorc3RhdGljIGludAorYmVfZ2V0X2VlcHJvbV9sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlyZXR1cm4gQkVfUkVBRF9TRUVQUk9NX0xFTjsKK30KKworc3RhdGljIGludAorYmVfcmVhZF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sCisJCQl1aW50OF90ICpkYXRhKQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgYmVfZG1hX21lbSBlZXByb21fY21kOworCXN0cnVjdCBiZV9jbWRfcmVzcF9zZWVwcm9tX3JlYWQgKnJlc3A7CisJaW50IHN0YXR1czsKKworCWlmICghZWVwcm9tLT5sZW4pCisJCXJldHVybiAtRUlOVkFMOworCisJZWVwcm9tLT5tYWdpYyA9IEJFX1ZFTkRPUl9JRCB8IChhZGFwdGVyLT5wZGV2LT5kZXZpY2U8PDE2KTsKKworCW1lbXNldCgmZWVwcm9tX2NtZCwgMCwgc2l6ZW9mKHN0cnVjdCBiZV9kbWFfbWVtKSk7CisJZWVwcm9tX2NtZC5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9jbWRfcmVxX3NlZXByb21fcmVhZCk7CisJZWVwcm9tX2NtZC52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIGVlcHJvbV9jbWQuc2l6ZSwKKwkJCQkmZWVwcm9tX2NtZC5kbWEpOworCisJaWYgKCFlZXByb21fY21kLnZhKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLiBDb3VsZCBub3QgcmVhZCBlZXByb21cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlzdGF0dXMgPSBiZV9jbWRfZ2V0X3NlZXByb21fZGF0YShhZGFwdGVyLCAmZWVwcm9tX2NtZCk7CisKKwlpZiAoIXN0YXR1cykgeworCQlyZXNwID0gKHN0cnVjdCBiZV9jbWRfcmVzcF9zZWVwcm9tX3JlYWQgKikgZWVwcm9tX2NtZC52YTsKKwkJbWVtY3B5KGRhdGEsIHJlc3AtPnNlZXByb21fZGF0YSArIGVlcHJvbS0+b2Zmc2V0LCBlZXByb20tPmxlbik7CisJfQorCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgZWVwcm9tX2NtZC5zaXplLCBlZXByb21fY21kLnZhLAorCQkJZWVwcm9tX2NtZC5kbWEpOworCisJcmV0dXJuIHN0YXR1czsKK30KKwogY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGJlX2V0aHRvb2xfb3BzID0gewogCS5nZXRfc2V0dGluZ3MgPSBiZV9nZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvID0gYmVfZ2V0X2RydmluZm8sCiAJLmdldF93b2wgPSBiZV9nZXRfd29sLAogCS5zZXRfd29sID0gYmVfc2V0X3dvbCwKIAkuZ2V0X2xpbmsgPSBldGh0b29sX29wX2dldF9saW5rLAorCS5nZXRfZWVwcm9tX2xlbiA9IGJlX2dldF9lZXByb21fbGVuLAorCS5nZXRfZWVwcm9tID0gYmVfcmVhZF9lZXByb20sCiAJLmdldF9jb2FsZXNjZSA9IGJlX2dldF9jb2FsZXNjZSwKIAkuc2V0X2NvYWxlc2NlID0gYmVfc2V0X2NvYWxlc2NlLAogCS5nZXRfcmluZ3BhcmFtID0gYmVfZ2V0X3JpbmdwYXJhbSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2h3LmggYi9kcml2ZXJzL25ldC9iZW5ldC9iZV9ody5oCmluZGV4IGUyYjNiZWYuLjVmZmIxNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfaHcuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgLSAyMDA5IFNlcnZlckVuZ2luZXMKKyAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMTAgU2VydmVyRW5naW5lcwogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC05OSw2ICs5OSw2MyBAQAogLyogTnVtYmVyIG9mIGVudHJpZXMgcG9zdGVkICovCiAjZGVmaW5lIERCX01DQ1FfTlVNX1BPU1RFRF9TSElGVAkoMTYpCS8qIGJpdHMgMTYgLSAyOSAqLwogCisvKiBGbGFzaHJvbSByZWxhdGVkIGRlc2NyaXB0b3JzICovCisjZGVmaW5lIElNQUdFX1RZUEVfRklSTVdBUkUJCTE2MAorI2RlZmluZSBJTUFHRV9UWVBFX0JPT1RDT0RFCQkyMjQKKyNkZWZpbmUgSU1BR0VfVFlQRV9PUFRJT05ST00JCTMyCisKKyNkZWZpbmUgTlVNX0ZMQVNIRElSX0VOVFJJRVMJCTMyCisKKyNkZWZpbmUgSU1HX1RZUEVfSVNDU0lfQUNUSVZFCQkwCisjZGVmaW5lIElNR19UWVBFX1JFREJPT1QJCTEKKyNkZWZpbmUgSU1HX1RZUEVfQklPUwkJCTIKKyNkZWZpbmUgSU1HX1RZUEVfUFhFX0JJT1MJCTMKKyNkZWZpbmUgSU1HX1RZUEVfRkNPRV9CSU9TCQk4CisjZGVmaW5lIElNR19UWVBFX0lTQ1NJX0JBQ0tVUAkJOQorI2RlZmluZSBJTUdfVFlQRV9GQ09FX0ZXX0FDVElWRQkJMTAKKyNkZWZpbmUgSU1HX1RZUEVfRkNPRV9GV19CQUNLVVAgCTExCisjZGVmaW5lIElNR19UWVBFX05DU0lfQklURklMRQkJMTMKKyNkZWZpbmUgSU1HX1RZUEVfTkNTSV84MDUxCQkxNAorCisjZGVmaW5lIEZMQVNIUk9NX09QRVJfRkxBU0gJCTEKKyNkZWZpbmUgRkxBU0hST01fT1BFUl9TQVZFCQkyCisjZGVmaW5lIEZMQVNIUk9NX09QRVJfUkVQT1JUCQk0CisKKyNkZWZpbmUgRkxBU0hfSU1BR0VfTUFYX1NJWkVfZzIgICAgICAgICAgICAoMTMxMDcyMCkgLyogTWF4IGZpcm13YXJlIGltYWdlIHN6ICovCisjZGVmaW5lIEZMQVNIX0JJT1NfSU1BR0VfTUFYX1NJWkVfZzIgICAgICAgKDI2MjE0NCkgIC8qIE1heCBPUFRJT04gUk9NIGltZyBzeiAqLworI2RlZmluZSBGTEFTSF9SRURCT09UX0lNQUdFX01BWF9TSVpFX2cyCSAgKDI2MjE0NCkgIC8qIE1heCBSZWRib290IGltYWdlIHN6ICovCisjZGVmaW5lIEZMQVNIX0lNQUdFX01BWF9TSVpFX2czICAgICAgICAgICAgKDIwOTcxNTIpIC8qIE1heCBmdyBpbWFnZSBzaXplICovCisjZGVmaW5lIEZMQVNIX0JJT1NfSU1BR0VfTUFYX1NJWkVfZzMgICAgICAgKDUyNDI4OCkgIC8qIE1heCBPUFRJT04gUk9NIGltZyBzeiAqLworI2RlZmluZSBGTEFTSF9SRURCT09UX0lNQUdFX01BWF9TSVpFX2czCSAgKDEwNDg1NzYpICAvKiBNYXggUmVkYm9vdCBpbWFnZSBzeiAqLworCisjZGVmaW5lIEZMQVNIX05DU0lfTUFHSUMJCSgweDE2MDMyMDA5KQorI2RlZmluZSBGTEFTSF9OQ1NJX0RJU0FCTEVECQkoMCkKKyNkZWZpbmUgRkxBU0hfTkNTSV9FTkFCTEVECQkoMSkKKworI2RlZmluZSBGTEFTSF9OQ1NJX0JJVEZJTEVfSERSX09GRlNFVAkoMHg2MDAwMDApCisKKy8qIE9mZnNldHMgZm9yIGNvbXBvbmVudHMgb24gRmxhc2guICovCisjZGVmaW5lIEZMQVNIX2lTQ1NJX1BSSU1BUllfSU1BR0VfU1RBUlRfZzIgKDEwNDg1NzYpCisjZGVmaW5lIEZMQVNIX2lTQ1NJX0JBQ0tVUF9JTUFHRV9TVEFSVF9nMiAgKDIzNTkyOTYpCisjZGVmaW5lIEZMQVNIX0ZDb0VfUFJJTUFSWV9JTUFHRV9TVEFSVF9nMiAgKDM2NzAwMTYpCisjZGVmaW5lIEZMQVNIX0ZDb0VfQkFDS1VQX0lNQUdFX1NUQVJUX2cyICAgKDQ5ODA3MzYpCisjZGVmaW5lIEZMQVNIX2lTQ1NJX0JJT1NfU1RBUlRfZzIgICAgICAgICAgKDczNDAwMzIpCisjZGVmaW5lIEZMQVNIX1BYRV9CSU9TX1NUQVJUX2cyICAgICAgICAgICAgKDc4NjQzMjApCisjZGVmaW5lIEZMQVNIX0ZDb0VfQklPU19TVEFSVF9nMiAgICAgICAgICAgKDUyNDI4OCkKKyNkZWZpbmUgRkxBU0hfUkVEQk9PVF9TVEFSVF9nMgkJICAoMCkKKworI2RlZmluZSBGTEFTSF9pU0NTSV9QUklNQVJZX0lNQUdFX1NUQVJUX2czICgyMDk3MTUyKQorI2RlZmluZSBGTEFTSF9pU0NTSV9CQUNLVVBfSU1BR0VfU1RBUlRfZzMgICg0MTk0MzA0KQorI2RlZmluZSBGTEFTSF9GQ29FX1BSSU1BUllfSU1BR0VfU1RBUlRfZzMgICg2MjkxNDU2KQorI2RlZmluZSBGTEFTSF9GQ29FX0JBQ0tVUF9JTUFHRV9TVEFSVF9nMyAgICg4Mzg4NjA4KQorI2RlZmluZSBGTEFTSF9pU0NTSV9CSU9TX1NUQVJUX2czICAgICAgICAgICgxMjU4MjkxMikKKyNkZWZpbmUgRkxBU0hfUFhFX0JJT1NfU1RBUlRfZzMgICAgICAgICAgICAoMTMxMDcyMDApCisjZGVmaW5lIEZMQVNIX0ZDb0VfQklPU19TVEFSVF9nMyAgICAgICAgICAgKDEzNjMxNDg4KQorI2RlZmluZSBGTEFTSF9SRURCT09UX1NUQVJUX2czICAgICAgICAgICAgICgyNjIxNDQpCisKKworCisKIC8qCiAgKiBCRSBkZXNjcmlwdG9yczogaG9zdCBtZW1vcnkgZGF0YSBzdHJ1Y3R1cmVzIHdob3NlIGZvcm1hdHMKICAqIGFyZSBoYXJkd2lyZWQgaW4gQkUgc2lsaWNvbi4KQEAgLTEwNyw2ICsxNjQsNyBAQAogI2RlZmluZSBFUV9FTlRSWV9WQUxJRF9NQVNLIAkJMHgxCS8qIGJpdCAwICovCiAjZGVmaW5lIEVRX0VOVFJZX1JFU19JRF9NQVNLIAkJMHhGRkZGCS8qIGJpdHMgMTYgLSAzMSAqLwogI2RlZmluZSBFUV9FTlRSWV9SRVNfSURfU0hJRlQgCQkxNgorCiBzdHJ1Y3QgYmVfZXFfZW50cnkgewogCXUzMiBldnQ7CiB9OwpAQCAtMjIxLDQxICsyNzksNiBAQAogCXUzMiBkd1s0XTsKIH07CiAKLS8qIEZsYXNocm9tIHJlbGF0ZWQgZGVzY3JpcHRvcnMgKi8KLSNkZWZpbmUgSU1BR0VfVFlQRV9GSVJNV0FSRQkJMTYwCi0jZGVmaW5lIElNQUdFX1RZUEVfQk9PVENPREUJCTIyNAotI2RlZmluZSBJTUFHRV9UWVBFX09QVElPTlJPTQkJMzIKLQotI2RlZmluZSBOVU1fRkxBU0hESVJfRU5UUklFUwkJMzIKLQotI2RlZmluZSBGTEFTSFJPTV9UWVBFX0lTQ1NJX0FDVElWRQkwCi0jZGVmaW5lIEZMQVNIUk9NX1RZUEVfUkVEQk9PVAkJMQotI2RlZmluZSBGTEFTSFJPTV9UWVBFX0JJT1MJCTIKLSNkZWZpbmUgRkxBU0hST01fVFlQRV9QWEVfQklPUwkJMwotI2RlZmluZSBGTEFTSFJPTV9UWVBFX0ZDT0VfQklPUwkJOAotI2RlZmluZSBGTEFTSFJPTV9UWVBFX0lTQ1NJX0JBQ0tVUAk5Ci0jZGVmaW5lIEZMQVNIUk9NX1RZUEVfRkNPRV9GV19BQ1RJVkUJMTAKLSNkZWZpbmUgRkxBU0hST01fVFlQRV9GQ09FX0ZXX0JBQ0tVUCAJMTEKLQotI2RlZmluZSBGTEFTSFJPTV9PUEVSX0ZMQVNICQkxCi0jZGVmaW5lIEZMQVNIUk9NX09QRVJfU0FWRQkJMgotI2RlZmluZSBGTEFTSFJPTV9PUEVSX1JFUE9SVAkJNAotCi0jZGVmaW5lIEZMQVNIX0lNQUdFX01BWF9TSVpFICAgICAgICAgICAgKDEzMTA3MjApIC8qIE1heCBmaXJtd2FyZSBpbWFnZSBzaXplICovCi0jZGVmaW5lIEZMQVNIX0JJT1NfSU1BR0VfTUFYX1NJWkUgICAgICAgKDI2MjE0NCkgIC8qIE1heCBPUFRJT04gUk9NIGltYWdlIHN6ICovCi0jZGVmaW5lIEZMQVNIX1JFREJPT1RfSU1BR0VfTUFYX1NJWkUgICAgKDI2MjE0NCkgIC8qIE1heCByZWRib290IGltYWdlIHN6ICovCi0KLS8qIE9mZnNldHMgZm9yIGNvbXBvbmVudHMgb24gRmxhc2guICovCi0jZGVmaW5lIEZMQVNIX2lTQ1NJX1BSSU1BUllfSU1BR0VfU1RBUlQgKDEwNDg1NzYpCi0jZGVmaW5lIEZMQVNIX2lTQ1NJX0JBQ0tVUF9JTUFHRV9TVEFSVCAgKDIzNTkyOTYpCi0jZGVmaW5lIEZMQVNIX0ZDb0VfUFJJTUFSWV9JTUFHRV9TVEFSVCAgKDM2NzAwMTYpCi0jZGVmaW5lIEZMQVNIX0ZDb0VfQkFDS1VQX0lNQUdFX1NUQVJUICAgKDQ5ODA3MzYpCi0jZGVmaW5lIEZMQVNIX2lTQ1NJX0JJT1NfU1RBUlQgICAgICAgICAgKDczNDAwMzIpCi0jZGVmaW5lIEZMQVNIX1BYRV9CSU9TX1NUQVJUICAgICAgICAgICAgKDc4NjQzMjApCi0jZGVmaW5lIEZMQVNIX0ZDb0VfQklPU19TVEFSVCAgICAgICAgICAgKDUyNDI4OCkKLSNkZWZpbmUgRkxBU0hfUkVEQk9PVF9TVEFSVAkJKDMyNzY4KQotI2RlZmluZSBGTEFTSF9SRURCT09UX0lTTV9TVEFSVAkJKDApCi0KIHN0cnVjdCBjb250cm9sbGVyX2lkIHsKIAl1MzIgdmVuZG9yOwogCXUzMiBkZXZpY2U7CkBAIC0yNjMsNyArMjg2LDIwIEBACiAJdTMyIHN1YmRldmljZTsKIH07CiAKLXN0cnVjdCBmbGFzaF9maWxlX2hkciB7CitzdHJ1Y3QgZmxhc2hfY29tcCB7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CisJaW50IG9wdHlwZTsKKwlpbnQgc2l6ZTsKK307CisKK3N0cnVjdCBpbWFnZV9oZHIgeworCXUzMiBpbWFnZWlkOworCXUzMiBpbWFnZW9mZnNldDsKKwl1MzIgaW1hZ2VsZW5ndGg7CisJdTMyIGltYWdlX2NoZWNrc3VtOworCXU4IGltYWdlX3ZlcnNpb25bMzJdOworfTsKK3N0cnVjdCBmbGFzaF9maWxlX2hkcl9nMiB7CiAJdTggc2lnblszMl07CiAJdTMyIGNrc3VtOwogCXUzMiBhbnRpZG90ZTsKQEAgLTI3NSw2ICszMTEsMTcgQEAKIAl1OCBidWlsZFsyNF07CiB9OwogCitzdHJ1Y3QgZmxhc2hfZmlsZV9oZHJfZzMgeworCXU4IHNpZ25bNTJdOworCXU4IHVmaV92ZXJzaW9uWzRdOworCXUzMiBmaWxlX2xlbjsKKwl1MzIgY2tzdW07CisJdTMyIGFudGlkb3RlOworCXUzMiBudW1faW1nczsKKwl1OCBidWlsZFsyNF07CisJdTggcnN2ZFszMl07Cit9OworCiBzdHJ1Y3QgZmxhc2hfc2VjdGlvbl9oZHIgewogCXUzMiBmb3JtYXRfcmV2OwogCXUzMiBja3N1bTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYyBiL2RyaXZlcnMvbmV0L2JlbmV0L2JlX21haW4uYwppbmRleCA2MjZiNzZjLi5hNzAzZWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZW5ldC9iZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYmVuZXQvYmVfbWFpbi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNSAtIDIwMDkgU2VydmVyRW5naW5lcworICogQ29weXJpZ2h0IChDKSAyMDA1IC0gMjAxMCBTZXJ2ZXJFbmdpbmVzCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTM0LDcgKzM0LDYgQEAKIAl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBCRV9ERVZJQ0VfSUQyKSB9LAogCXsgUENJX0RFVklDRShCRV9WRU5ET1JfSUQsIE9DX0RFVklDRV9JRDEpIH0sCiAJeyBQQ0lfREVWSUNFKEJFX1ZFTkRPUl9JRCwgT0NfREVWSUNFX0lEMikgfSwKLQl7IFBDSV9ERVZJQ0UoQkVfVkVORE9SX0lELCBPQ19ERVZJQ0VfSUQzKSB9LAogCXsgMCB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGJlX2Rldl9pZHMpOwpAQCAtNjksNiArNjgsOSBAQAogCXUzMiByZWcgPSBpb3JlYWQzMihhZGRyKTsKIAl1MzIgZW5hYmxlZCA9IHJlZyAmIE1FTUJBUl9DVFJMX0lOVF9DVFJMX0hPU1RJTlRSX01BU0s7CiAKKwlpZiAoYWRhcHRlci0+ZWVoX2VycikKKwkJcmV0dXJuOworCiAJaWYgKCFlbmFibGVkICYmIGVuYWJsZSkKIAkJcmVnIHw9IE1FTUJBUl9DVFJMX0lOVF9DVFJMX0hPU1RJTlRSX01BU0s7CiAJZWxzZSBpZiAoZW5hYmxlZCAmJiAhZW5hYmxlKQpAQCAtMTAwLDYgKzEwMiwxMCBAQAogewogCXUzMiB2YWwgPSAwOwogCXZhbCB8PSBxaWQgJiBEQl9FUV9SSU5HX0lEX01BU0s7CisKKwlpZiAoYWRhcHRlci0+ZWVoX2VycikKKwkJcmV0dXJuOworCiAJaWYgKGFybSkKIAkJdmFsIHw9IDEgPDwgREJfRVFfUkVBUk1fU0hJRlQ7CiAJaWYgKGNsZWFyX2ludCkKQEAgLTExMyw2ICsxMTksMTAgQEAKIHsKIAl1MzIgdmFsID0gMDsKIAl2YWwgfD0gcWlkICYgREJfQ1FfUklOR19JRF9NQVNLOworCisJaWYgKGFkYXB0ZXItPmVlaF9lcnIpCisJCXJldHVybjsKKwogCWlmIChhcm0pCiAJCXZhbCB8PSAxIDw8IERCX0NRX1JFQVJNX1NISUZUOwogCXZhbCB8PSBudW1fcG9wcGVkIDw8IERCX0NRX05VTV9QT1BQRURfU0hJRlQ7CkBAIC0xNDksMTMgKzE1OSwxMCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpkZXZfc3RhdHMgPSAmYWRhcHRlci0+bmV0ZGV2LT5zdGF0czsKIAlzdHJ1Y3QgYmVfZXJ4X3N0YXRzICplcnhfc3RhdHMgPSAmaHdfc3RhdHMtPmVyeDsKIAotCWRldl9zdGF0cy0+cnhfcGFja2V0cyA9IHBvcnRfc3RhdHMtPnJ4X3RvdGFsX2ZyYW1lczsKLQlkZXZfc3RhdHMtPnR4X3BhY2tldHMgPSBwb3J0X3N0YXRzLT50eF91bmljYXN0ZnJhbWVzICsKLQkJcG9ydF9zdGF0cy0+dHhfbXVsdGljYXN0ZnJhbWVzICsgcG9ydF9zdGF0cy0+dHhfYnJvYWRjYXN0ZnJhbWVzOwotCWRldl9zdGF0cy0+cnhfYnl0ZXMgPSAodTY0KSBwb3J0X3N0YXRzLT5yeF9ieXRlc19tc2QgPDwgMzIgfAotCQkJCSh1NjQpIHBvcnRfc3RhdHMtPnJ4X2J5dGVzX2xzZDsKLQlkZXZfc3RhdHMtPnR4X2J5dGVzID0gKHU2NCkgcG9ydF9zdGF0cy0+dHhfYnl0ZXNfbXNkIDw8IDMyIHwKLQkJCQkodTY0KSBwb3J0X3N0YXRzLT50eF9ieXRlc19sc2Q7CisJZGV2X3N0YXRzLT5yeF9wYWNrZXRzID0gZHJ2cl9zdGF0cyhhZGFwdGVyKS0+YmVfcnhfcGt0czsKKwlkZXZfc3RhdHMtPnR4X3BhY2tldHMgPSBkcnZyX3N0YXRzKGFkYXB0ZXIpLT5iZV90eF9wa3RzOworCWRldl9zdGF0cy0+cnhfYnl0ZXMgPSBkcnZyX3N0YXRzKGFkYXB0ZXIpLT5iZV9yeF9ieXRlczsKKwlkZXZfc3RhdHMtPnR4X2J5dGVzID0gZHJ2cl9zdGF0cyhhZGFwdGVyKS0+YmVfdHhfYnl0ZXM7CiAKIAkvKiBiYWQgcGt0cyByZWNlaXZlZCAqLwogCWRldl9zdGF0cy0+cnhfZXJyb3JzID0gcG9ydF9zdGF0cy0+cnhfY3JjX2Vycm9ycyArCkBAIC0zMTIsMTIgKzMxOSwxMyBAQAogfQogCiBzdGF0aWMgdm9pZCBiZV90eF9zdGF0c191cGRhdGUoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQl1MzIgd3JiX2NudCwgdTMyIGNvcGllZCwgYm9vbCBzdG9wcGVkKQorCQkJdTMyIHdyYl9jbnQsIHUzMiBjb3BpZWQsIHUzMiBnc29fc2VncywgYm9vbCBzdG9wcGVkKQogewogCXN0cnVjdCBiZV9kcnZyX3N0YXRzICpzdGF0cyA9IGRydnJfc3RhdHMoYWRhcHRlcik7CiAJc3RhdHMtPmJlX3R4X3JlcXMrKzsKIAlzdGF0cy0+YmVfdHhfd3JicyArPSB3cmJfY250OwogCXN0YXRzLT5iZV90eF9ieXRlcyArPSBjb3BpZWQ7CisJc3RhdHMtPmJlX3R4X3BrdHMgKz0gKGdzb19zZWdzID8gZ3NvX3NlZ3MgOiAxKTsKIAlpZiAoc3RvcHBlZCkKIAkJc3RhdHMtPmJlX3R4X3N0b3BzKys7CiB9CkBAIC00NjIsNyArNDcwLDggQEAKIAogCQliZV90eHFfbm90aWZ5KGFkYXB0ZXIsIHR4cS0+aWQsIHdyYl9jbnQpOwogCi0JCWJlX3R4X3N0YXRzX3VwZGF0ZShhZGFwdGVyLCB3cmJfY250LCBjb3BpZWQsIHN0b3BwZWQpOworCQliZV90eF9zdGF0c191cGRhdGUoYWRhcHRlciwgd3JiX2NudCwgY29waWVkLAorCQkJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MsIHN0b3BwZWQpOwogCX0gZWxzZSB7CiAJCXR4cS0+aGVhZCA9IHN0YXJ0OwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwpAQCAtNDc0LDEwICs0ODMsMTIgQEAKIHsKIAlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJaWYgKG5ld19tdHUgPCBCRV9NSU5fTVRVIHx8Ci0JCQluZXdfbXR1ID4gQkVfTUFYX0pVTUJPX0ZSQU1FX1NJWkUpIHsKKwkJCW5ld19tdHUgPiAoQkVfTUFYX0pVTUJPX0ZSQU1FX1NJWkUgLQorCQkJCQkoRVRIX0hMRU4gKyBFVEhfRkNTX0xFTikpKSB7CiAJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsCiAJCQkiTVRVIG11c3QgYmUgYmV0d2VlbiAlZCBhbmQgJWQgYnl0ZXNcbiIsCi0JCQlCRV9NSU5fTVRVLCBCRV9NQVhfSlVNQk9fRlJBTUVfU0laRSk7CisJCQlCRV9NSU5fTVRVLAorCQkJKEJFX01BWF9KVU1CT19GUkFNRV9TSVpFIC0gKEVUSF9ITEVOICsgRVRIX0ZDU19MRU4pKSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiTVRVIGNoYW5nZWQgZnJvbSAlZCB0byAlZCBieXRlc1xuIiwKQEAgLTQ4NywxNyArNDk4LDE2IEBACiB9CiAKIC8qCi0gKiBpZiB0aGVyZSBhcmUgQkVfTlVNX1ZMQU5TX1NVUFBPUlRFRCBvciBsZXNzZXIgbnVtYmVyIG9mIFZMQU5TIGNvbmZpZ3VyZWQsCi0gKiBwcm9ncmFtIHRoZW0gaW4gQkUuICBJZiBtb3JlIHRoYW4gQkVfTlVNX1ZMQU5TX1NVUFBPUlRFRCBhcmUgY29uZmlndXJlZCwKLSAqIHNldCB0aGUgQkUgaW4gcHJvbWlzY3VvdXMgVkxBTiBtb2RlLgorICogQSBtYXggb2YgNjQgKEJFX05VTV9WTEFOU19TVVBQT1JURUQpIHZsYW5zIGNhbiBiZSBjb25maWd1cmVkIGluIEJFLgorICogSWYgdGhlIHVzZXIgY29uZmlndXJlcyBtb3JlLCBwbGFjZSBCRSBpbiB2bGFuIHByb21pc2N1b3VzIG1vZGUuCiAgKi8KIHN0YXRpYyBpbnQgYmVfdmlkX2NvbmZpZyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAl1MTYgdnRhZ1tCRV9OVU1fVkxBTlNfU1VQUE9SVEVEXTsKIAl1MTYgbnRhZ3MgPSAwLCBpOwotCWludCBzdGF0dXM7CisJaW50IHN0YXR1cyA9IDA7CiAKLQlpZiAoYWRhcHRlci0+bnVtX3ZsYW5zIDw9IEJFX05VTV9WTEFOU19TVVBQT1JURUQpICB7CisJaWYgKGFkYXB0ZXItPnZsYW5zX2FkZGVkIDw9IGFkYXB0ZXItPm1heF92bGFucykgIHsKIAkJLyogQ29uc3RydWN0IFZMQU4gVGFibGUgdG8gZ2l2ZSB0byBIVyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgVkxBTl9HUk9VUF9BUlJBWV9MRU47IGkrKykgewogCQkJaWYgKGFkYXB0ZXItPnZsYW5fdGFnW2ldKSB7CkBAIC01MzEsMjEgKzU0MSwyMSBAQAogewogCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCWFkYXB0ZXItPm51bV92bGFucysrOwogCWFkYXB0ZXItPnZsYW5fdGFnW3ZpZF0gPSAxOwotCi0JYmVfdmlkX2NvbmZpZyhhZGFwdGVyKTsKKwlhZGFwdGVyLT52bGFuc19hZGRlZCsrOworCWlmIChhZGFwdGVyLT52bGFuc19hZGRlZCA8PSAoYWRhcHRlci0+bWF4X3ZsYW5zICsgMSkpCisJCWJlX3ZpZF9jb25maWcoYWRhcHRlcik7CiB9CiAKIHN0YXRpYyB2b2lkIGJlX3ZsYW5fcmVtX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQogewogCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAotCWFkYXB0ZXItPm51bV92bGFucy0tOwogCWFkYXB0ZXItPnZsYW5fdGFnW3ZpZF0gPSAwOwotCiAJdmxhbl9ncm91cF9zZXRfZGV2aWNlKGFkYXB0ZXItPnZsYW5fZ3JwLCB2aWQsIE5VTEwpOwotCWJlX3ZpZF9jb25maWcoYWRhcHRlcik7CisJYWRhcHRlci0+dmxhbnNfYWRkZWQtLTsKKwlpZiAoYWRhcHRlci0+dmxhbnNfYWRkZWQgPD0gYWRhcHRlci0+bWF4X3ZsYW5zKQorCQliZV92aWRfY29uZmlnKGFkYXB0ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBiZV9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKQEAgLTU2NSwxNCArNTc1LDE1IEBACiAJfQogCiAJLyogRW5hYmxlIG11bHRpY2FzdCBwcm9taXNjIGlmIG51bSBjb25maWd1cmVkIGV4Y2VlZHMgd2hhdCB3ZSBzdXBwb3J0ICovCi0JaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgbmV0ZGV2LT5tY19jb3VudCA+IEJFX01BWF9NQykgewotCQliZV9jbWRfbXVsdGljYXN0X3NldChhZGFwdGVyLCBhZGFwdGVyLT5pZl9oYW5kbGUsIE5VTEwsIDAsCisJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwKKwkgICAgbmV0ZGV2X21jX2NvdW50KG5ldGRldikgPiBCRV9NQVhfTUMpIHsKKwkJYmVfY21kX211bHRpY2FzdF9zZXQoYWRhcHRlciwgYWRhcHRlci0+aWZfaGFuZGxlLCBOVUxMLAogCQkJCSZhZGFwdGVyLT5tY19jbWRfbWVtKTsKIAkJZ290byBkb25lOwogCX0KIAotCWJlX2NtZF9tdWx0aWNhc3Rfc2V0KGFkYXB0ZXIsIGFkYXB0ZXItPmlmX2hhbmRsZSwgbmV0ZGV2LT5tY19saXN0LAotCQluZXRkZXYtPm1jX2NvdW50LCAmYWRhcHRlci0+bWNfY21kX21lbSk7CisJYmVfY21kX211bHRpY2FzdF9zZXQoYWRhcHRlciwgYWRhcHRlci0+aWZfaGFuZGxlLCBuZXRkZXYsCisJCSZhZGFwdGVyLT5tY19jbWRfbWVtKTsKIGRvbmU6CiAJcmV0dXJuOwogfQpAQCAtNjA3LDYgKzYxOCw3IEBACiAJc3RhdHMtPmJlX3J4X2NvbXBsKys7CiAJc3RhdHMtPmJlX3J4X2ZyYWdzICs9IG51bWZyYWdzOwogCXN0YXRzLT5iZV9yeF9ieXRlcyArPSBwa3RzaXplOworCXN0YXRzLT5iZV9yeF9wa3RzKys7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBkb19wa3RfY3N1bShzdHJ1Y3QgYmVfZXRoX3J4X2NvbXBsICpyeGNwLCBib29sIGNzbykKQEAgLTYzNCw5ICs2NDYsMTEgQEAKIAlyeF9wYWdlX2luZm8gPSAmYWRhcHRlci0+cnhfb2JqLnBhZ2VfaW5mb190YmxbZnJhZ19pZHhdOwogCUJVR19PTighcnhfcGFnZV9pbmZvLT5wYWdlKTsKIAotCWlmIChyeF9wYWdlX2luZm8tPmxhc3RfcGFnZV91c2VyKQorCWlmIChyeF9wYWdlX2luZm8tPmxhc3RfcGFnZV91c2VyKSB7CiAJCXBjaV91bm1hcF9wYWdlKGFkYXB0ZXItPnBkZXYsIHBjaV91bm1hcF9hZGRyKHJ4X3BhZ2VfaW5mbywgYnVzKSwKIAkJCWFkYXB0ZXItPmJpZ19wYWdlX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCXJ4X3BhZ2VfaW5mby0+bGFzdF9wYWdlX3VzZXIgPSBmYWxzZTsKKwl9CiAKIAlhdG9taWNfZGVjKCZyeHEtPnVzZWQpOwogCXJldHVybiByeF9wYWdlX2luZm87CkBAIC02NjYsMTcgKzY4MCwxNyBAQAogICogaW5kaWNhdGVkIGJ5IHJ4Y3AuCiAgKi8KIHN0YXRpYyB2b2lkIHNrYl9maWxsX3J4X2RhdGEoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgYmVfZXRoX3J4X2NvbXBsICpyeGNwKQorCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGJlX2V0aF9yeF9jb21wbCAqcnhjcCwKKwkJCXUxNiBudW1fcmN2ZCkKIHsKIAlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqcnhxID0gJmFkYXB0ZXItPnJ4X29iai5xOwogCXN0cnVjdCBiZV9yeF9wYWdlX2luZm8gKnBhZ2VfaW5mbzsKLQl1MTYgcnhxX2lkeCwgaSwgbnVtX3JjdmQsIGo7CisJdTE2IHJ4cV9pZHgsIGksIGo7CiAJdTMyIHBrdHNpemUsIGhkcl9sZW4sIGN1cnJfZnJhZ19sZW4sIHNpemU7CiAJdTggKnN0YXJ0OwogCiAJcnhxX2lkeCA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCBmcmFnbmR4LCByeGNwKTsKIAlwa3RzaXplID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIHBrdHNpemUsIHJ4Y3ApOwotCW51bV9yY3ZkID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIG51bWZyYWdzLCByeGNwKTsKIAogCXBhZ2VfaW5mbyA9IGdldF9yeF9wYWdlX2luZm8oYWRhcHRlciwgcnhxX2lkeCk7CiAKQEAgLTcwNCw3ICs3MTgsNyBAQAogCQlza2ItPmRhdGFfbGVuID0gY3Vycl9mcmFnX2xlbiAtIGhkcl9sZW47CiAJCXNrYi0+dGFpbCArPSBoZHJfbGVuOwogCX0KLQltZW1zZXQocGFnZV9pbmZvLCAwLCBzaXplb2YoKnBhZ2VfaW5mbykpOworCXBhZ2VfaW5mby0+cGFnZSA9IE5VTEw7CiAKIAlpZiAocGt0c2l6ZSA8PSByeF9mcmFnX3NpemUpIHsKIAkJQlVHX09OKG51bV9yY3ZkICE9IDEpOwpAQCAtNzM3LDcgKzc1MSw3IEBACiAJCXNrYi0+bGVuICs9IGN1cnJfZnJhZ19sZW47CiAJCXNrYi0+ZGF0YV9sZW4gKz0gY3Vycl9mcmFnX2xlbjsKIAotCQltZW1zZXQocGFnZV9pbmZvLCAwLCBzaXplb2YoKnBhZ2VfaW5mbykpOworCQlwYWdlX2luZm8tPnBhZ2UgPSBOVUxMOwogCX0KIAlCVUdfT04oaiA+IE1BWF9TS0JfRlJBR1MpOwogCkBAIC03NTIsMjUgKzc2NiwyMyBAQAogewogCXN0cnVjdCBza19idWZmICpza2I7CiAJdTMyIHZsYW5mLCB2aWQ7CisJdTE2IG51bV9yY3ZkOwogCXU4IHZ0bTsKIAotCXZsYW5mID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIHZ0cCwgcnhjcCk7Ci0JdnRtID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIHZ0bSwgcnhjcCk7Ci0KLQkvKiB2bGFuZiBjb3VsZCBiZSB3cm9uZ2x5IHNldCBpbiBzb21lIGNhcmRzLgotCSAqIGlnbm9yZSBpZiB2dG0gaXMgbm90IHNldCAqLwotCWlmICgoYWRhcHRlci0+Y2FwICYgMHg0MDApICYmICF2dG0pCi0JCXZsYW5mID0gMDsKKwludW1fcmN2ZCA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCBudW1mcmFncywgcnhjcCk7CisJLyogSXMgaXQgYSBmbHVzaCBjb21wbCB0aGF0IGhhcyBubyBkYXRhICovCisJaWYgKHVubGlrZWx5KG51bV9yY3ZkID09IDApKQorCQlyZXR1cm47CiAKIAlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKGFkYXB0ZXItPm5ldGRldiwgQkVfSERSX0xFTik7Ci0JaWYgKCFza2IpIHsKKwlpZiAodW5saWtlbHkoIXNrYikpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJza2IgYWxsb2MgZmFpbGVkXG4iKTsKIAkJYmVfcnhfY29tcGxfZGlzY2FyZChhZGFwdGVyLCByeGNwKTsKIAkJcmV0dXJuOwogCX0KIAotCXNrYl9maWxsX3J4X2RhdGEoYWRhcHRlciwgc2tiLCByeGNwKTsKKwlza2JfZmlsbF9yeF9kYXRhKGFkYXB0ZXIsIHNrYiwgcnhjcCwgbnVtX3JjdmQpOwogCiAJaWYgKGRvX3BrdF9jc3VtKHJ4Y3AsIGFkYXB0ZXItPnJ4X2NzdW0pKQogCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CkBAIC03ODEsOCArNzkzLDE2IEBACiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYWRhcHRlci0+bmV0ZGV2KTsKIAlza2ItPmRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAotCWlmICh2bGFuZikgewotCQlpZiAoIWFkYXB0ZXItPnZsYW5fZ3JwIHx8IGFkYXB0ZXItPm51bV92bGFucyA9PSAwKSB7CisJdmxhbmYgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgdnRwLCByeGNwKTsKKwl2dG0gPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgdnRtLCByeGNwKTsKKworCS8qIHZsYW5mIGNvdWxkIGJlIHdyb25nbHkgc2V0IGluIHNvbWUgY2FyZHMuCisJICogaWdub3JlIGlmIHZ0bSBpcyBub3Qgc2V0ICovCisJaWYgKChhZGFwdGVyLT5jYXAgJiAweDQwMCkgJiYgIXZ0bSkKKwkJdmxhbmYgPSAwOworCisJaWYgKHVubGlrZWx5KHZsYW5mKSkgeworCQlpZiAoIWFkYXB0ZXItPnZsYW5fZ3JwIHx8IGFkYXB0ZXItPnZsYW5zX2FkZGVkID09IDApIHsKIAkJCWtmcmVlX3NrYihza2IpOwogCQkJcmV0dXJuOwogCQl9CkBAIC04MDksNiArODI5LDEwIEBACiAJdTggdnRtOwogCiAJbnVtX3JjdmQgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgbnVtZnJhZ3MsIHJ4Y3ApOworCS8qIElzIGl0IGEgZmx1c2ggY29tcGwgdGhhdCBoYXMgbm8gZGF0YSAqLworCWlmICh1bmxpa2VseShudW1fcmN2ZCA9PSAwKSkKKwkJcmV0dXJuOworCiAJcGt0X3NpemUgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgcGt0c2l6ZSwgcnhjcCk7CiAJdmxhbmYgPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF9yeF9jb21wbCwgdnRwLCByeGNwKTsKIAlyeHFfaWR4ID0gQU1BUF9HRVRfQklUUyhzdHJ1Y3QgYW1hcF9ldGhfcnhfY29tcGwsIGZyYWduZHgsIHJ4Y3ApOwpAQCAtODYyLDcgKzg4Niw3IEBACiAJCXZpZCA9IEFNQVBfR0VUX0JJVFMoc3RydWN0IGFtYXBfZXRoX3J4X2NvbXBsLCB2bGFuX3RhZywgcnhjcCk7CiAJCXZpZCA9IGJlMTZfdG9fY3B1KHZpZCk7CiAKLQkJaWYgKCFhZGFwdGVyLT52bGFuX2dycCB8fCBhZGFwdGVyLT5udW1fdmxhbnMgPT0gMCkKKwkJaWYgKCFhZGFwdGVyLT52bGFuX2dycCB8fCBhZGFwdGVyLT52bGFuc19hZGRlZCA9PSAwKQogCQkJcmV0dXJuOwogCiAJCXZsYW5fZ3JvX2ZyYWdzKCZlcV9vYmotPm5hcGksIGFkYXB0ZXItPnZsYW5fZ3JwLCB2aWQpOwpAQCAtMTEwNCw2ICsxMTI4LDkgQEAKIAlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqdHhxID0gJmFkYXB0ZXItPnR4X29iai5xOwogCXN0cnVjdCBiZV9ldGhfdHhfY29tcGwgKnR4Y3A7CiAJdTE2IGVuZF9pZHgsIGNtcGwgPSAwLCB0aW1lbyA9IDA7CisJc3RydWN0IHNrX2J1ZmYgKipzZW50X3NrYnMgPSBhZGFwdGVyLT50eF9vYmouc2VudF9za2JfbGlzdDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2VudF9za2I7CisJYm9vbCBkdW1teV93cmI7CiAKIAkvKiBXYWl0IGZvciBhIG1heCBvZiAyMDBtcyBmb3IgYWxsIHRoZSB0eC1jb21wbGV0aW9ucyB0byBhcnJpdmUuICovCiAJZG8gewpAQCAtMTEyNyw2ICsxMTU0LDE1IEBACiAJaWYgKGF0b21pY19yZWFkKCZ0eHEtPnVzZWQpKQogCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICIlZCBwZW5kaW5nIHR4LWNvbXBsZXRpb25zXG4iLAogCQkJYXRvbWljX3JlYWQoJnR4cS0+dXNlZCkpOworCisJLyogZnJlZSBwb3N0ZWQgdHggZm9yIHdoaWNoIGNvbXBscyB3aWxsIG5ldmVyIGFycml2ZSAqLworCXdoaWxlIChhdG9taWNfcmVhZCgmdHhxLT51c2VkKSkgeworCQlzZW50X3NrYiA9IHNlbnRfc2tic1t0eHEtPnRhaWxdOworCQllbmRfaWR4ID0gdHhxLT50YWlsOworCQlpbmRleF9hZHYoJmVuZF9pZHgsCisJCQl3cmJfY250X2Zvcl9za2Ioc2VudF9za2IsICZkdW1teV93cmIpIC0gMSwgdHhxLT5sZW4pOworCQliZV90eF9jb21wbF9wcm9jZXNzKGFkYXB0ZXIsIGVuZF9pZHgpOworCX0KIH0KIAogc3RhdGljIHZvaWQgYmVfbWNjX3F1ZXVlc19kZXN0cm95KHN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyKQpAQCAtMTI1OSw2ICsxMjk1LDExIEBACiAJcSA9ICZhZGFwdGVyLT5yeF9vYmoucTsKIAlpZiAocS0+Y3JlYXRlZCkgewogCQliZV9jbWRfcV9kZXN0cm95KGFkYXB0ZXIsIHEsIFFUWVBFX1JYUSk7CisKKwkJLyogQWZ0ZXIgdGhlIHJ4cSBpcyBpbnZhbGlkYXRlZCwgd2FpdCBmb3IgYSBncmFjZSB0aW1lCisJCSAqIG9mIDFtcyBmb3IgYWxsIGRtYSB0byBlbmQgYW5kIHRoZSBmbHVzaCBjb21wbCB0byBhcnJpdmUKKwkJICovCisJCW1kZWxheSgxKTsKIAkJYmVfcnhfcV9jbGVhbihhZGFwdGVyKTsKIAl9CiAJYmVfcXVldWVfZnJlZShhZGFwdGVyLCBxKTsKQEAgLTE0MjgsMjMgKzE0NjksMzggQEAKIAlyZXR1cm4gd29ya19kb25lOwogfQogCi12b2lkIGJlX3Byb2Nlc3NfdHgoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIpCisvKiBBcyBUWCBhbmQgTUNDIHNoYXJlIHRoZSBzYW1lIEVRIGNoZWNrIGZvciBib3RoIFRYIGFuZCBNQ0MgY29tcGxldGlvbnMuCisgKiBGb3IgVFgvTUNDIHdlIGRvbid0IGhvbm91ciBidWRnZXQ7IGNvbnN1bWUgZXZlcnl0aGluZworICovCitzdGF0aWMgaW50IGJlX3BvbGxfdHhfbWNjKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKKwlzdHJ1Y3QgYmVfZXFfb2JqICp0eF9lcSA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgYmVfZXFfb2JqLCBuYXBpKTsKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9CisJCWNvbnRhaW5lcl9vZih0eF9lcSwgc3RydWN0IGJlX2FkYXB0ZXIsIHR4X2VxKTsKIAlzdHJ1Y3QgYmVfcXVldWVfaW5mbyAqdHhxID0gJmFkYXB0ZXItPnR4X29iai5xOwogCXN0cnVjdCBiZV9xdWV1ZV9pbmZvICp0eF9jcSA9ICZhZGFwdGVyLT50eF9vYmouY3E7CiAJc3RydWN0IGJlX2V0aF90eF9jb21wbCAqdHhjcDsKLQl1MzIgbnVtX2NtcGwgPSAwOworCWludCB0eF9jb21wbCA9IDAsIG1jY19jb21wbCwgc3RhdHVzID0gMDsKIAl1MTYgZW5kX2lkeDsKIAogCXdoaWxlICgodHhjcCA9IGJlX3R4X2NvbXBsX2dldCh0eF9jcSkpKSB7CiAJCWVuZF9pZHggPSBBTUFQX0dFVF9CSVRTKHN0cnVjdCBhbWFwX2V0aF90eF9jb21wbCwKLQkJCQkJd3JiX2luZGV4LCB0eGNwKTsKKwkJCQl3cmJfaW5kZXgsIHR4Y3ApOwogCQliZV90eF9jb21wbF9wcm9jZXNzKGFkYXB0ZXIsIGVuZF9pZHgpOwotCQludW1fY21wbCsrOworCQl0eF9jb21wbCsrOwogCX0KIAotCWlmIChudW1fY21wbCkgewotCQliZV9jcV9ub3RpZnkoYWRhcHRlciwgdHhfY3EtPmlkLCB0cnVlLCBudW1fY21wbCk7CisJbWNjX2NvbXBsID0gYmVfcHJvY2Vzc19tY2MoYWRhcHRlciwgJnN0YXR1cyk7CisKKwluYXBpX2NvbXBsZXRlKG5hcGkpOworCisJaWYgKG1jY19jb21wbCkgeworCQlzdHJ1Y3QgYmVfbWNjX29iaiAqbWNjX29iaiA9ICZhZGFwdGVyLT5tY2Nfb2JqOworCQliZV9jcV9ub3RpZnkoYWRhcHRlciwgbWNjX29iai0+Y3EuaWQsIHRydWUsIG1jY19jb21wbCk7CisJfQorCisJaWYgKHR4X2NvbXBsKSB7CisJCWJlX2NxX25vdGlmeShhZGFwdGVyLCBhZGFwdGVyLT50eF9vYmouY3EuaWQsIHRydWUsIHR4X2NvbXBsKTsKIAogCQkvKiBBcyBUeCB3cmJzIGhhdmUgYmVlbiBmcmVlZCB1cCwgd2FrZSB1cCBuZXRkZXYgcXVldWUgaWYKIAkJICogaXQgd2FzIHN0b3BwZWQgZHVlIHRvIGxhY2sgb2YgdHggd3Jicy4KQEAgLTE0NTUsMjQgKzE1MTEsOCBAQAogCQl9CiAKIAkJZHJ2cl9zdGF0cyhhZGFwdGVyKS0+YmVfdHhfZXZlbnRzKys7Ci0JCWRydnJfc3RhdHMoYWRhcHRlciktPmJlX3R4X2NvbXBsICs9IG51bV9jbXBsOworCQlkcnZyX3N0YXRzKGFkYXB0ZXIpLT5iZV90eF9jb21wbCArPSB0eF9jb21wbDsKIAl9Ci19Ci0KLS8qIEFzIFRYIGFuZCBNQ0Mgc2hhcmUgdGhlIHNhbWUgRVEgY2hlY2sgZm9yIGJvdGggVFggYW5kIE1DQyBjb21wbGV0aW9ucy4KLSAqIEZvciBUWC9NQ0Mgd2UgZG9uJ3QgaG9ub3VyIGJ1ZGdldDsgY29uc3VtZSBldmVyeXRoaW5nCi0gKi8KLXN0YXRpYyBpbnQgYmVfcG9sbF90eF9tY2Moc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQotewotCXN0cnVjdCBiZV9lcV9vYmogKnR4X2VxID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBiZV9lcV9vYmosIG5hcGkpOwotCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0KLQkJY29udGFpbmVyX29mKHR4X2VxLCBzdHJ1Y3QgYmVfYWRhcHRlciwgdHhfZXEpOwotCi0JbmFwaV9jb21wbGV0ZShuYXBpKTsKLQotCWJlX3Byb2Nlc3NfdHgoYWRhcHRlcik7Ci0KLQliZV9wcm9jZXNzX21jYyhhZGFwdGVyKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTY0MSw2ICsxNjgxLDkgQEAKIAkvKiBSeCBjb21wbCBxdWV1ZSBtYXkgYmUgaW4gdW5hcm1lZCBzdGF0ZTsgcmVhcm0gaXQgKi8KIAliZV9jcV9ub3RpZnkoYWRhcHRlciwgYWRhcHRlci0+cnhfb2JqLmNxLmlkLCB0cnVlLCAwKTsKIAorCS8qIE5vdyB0aGF0IGludGVycnVwdHMgYXJlIG9uIHdlIGNhbiBwcm9jZXNzIGFzeW5jIG1jYyAqLworCWJlX2FzeW5jX21jY19lbmFibGUoYWRhcHRlcik7CisKIAlzdGF0dXMgPSBiZV9jbWRfbGlua19zdGF0dXNfcXVlcnkoYWRhcHRlciwgJmxpbmtfdXAsICZtYWNfc3BlZWQsCiAJCQkmbGlua19zcGVlZCk7CiAJaWYgKHN0YXR1cykKQEAgLTE3NjYsNiArMTgwOSw4IEBACiAKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmFkYXB0ZXItPndvcmspOwogCisJYmVfYXN5bmNfbWNjX2Rpc2FibGUoYWRhcHRlcik7CisKIAluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKIAlhZGFwdGVyLT5saW5rX3VwID0gZmFsc2U7CkBAIC0xNzk4LDE1ICsxODQzLDE5IEBACiAJCQkJIkggRElSRUNUT1JZICoqKiAifTsKIAogc3RhdGljIGJvb2wgYmVfZmxhc2hfcmVkYm9vdChzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwKLQkJCWNvbnN0IHU4ICpwKQorCQkJY29uc3QgdTggKnAsIHUzMiBpbWdfc3RhcnQsIGludCBpbWFnZV9zaXplLAorCQkJaW50IGhkcl9zaXplKQogewogCXUzMiBjcmNfb2Zmc2V0OwogCXU4IGZsYXNoZWRfY3JjWzRdOwogCWludCBzdGF0dXM7Ci0JY3JjX29mZnNldCA9IEZMQVNIX1JFREJPT1RfU1RBUlQgKyBGTEFTSF9SRURCT09UX0lNQUdFX01BWF9TSVpFIC0gNAotCQkJKyBzaXplb2Yoc3RydWN0IGZsYXNoX2ZpbGVfaGRyKSAtIDMyKjEwMjQ7CisKKwljcmNfb2Zmc2V0ID0gaGRyX3NpemUgKyBpbWdfc3RhcnQgKyBpbWFnZV9zaXplIC0gNDsKKwogCXAgKz0gY3JjX29mZnNldDsKLQlzdGF0dXMgPSBiZV9jbWRfZ2V0X2ZsYXNoX2NyYyhhZGFwdGVyLCBmbGFzaGVkX2NyYyk7CisKKwlzdGF0dXMgPSBiZV9jbWRfZ2V0X2ZsYXNoX2NyYyhhZGFwdGVyLCBmbGFzaGVkX2NyYywKKwkJCShpbWdfc3RhcnQgKyBpbWFnZV9zaXplIC0gNCkpOwogCWlmIChzdGF0dXMpIHsKIAkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAogCQkiY291bGQgbm90IGdldCBjcmMgZnJvbSBmbGFzaCwgbm90IGZsYXNoaW5nIHJlZGJvb3RcbiIpOwpAQCAtMTgxOCwxMDIgKzE4NjcsMTI0IEBACiAJCXJldHVybiBmYWxzZTsKIAllbHNlCiAJCXJldHVybiB0cnVlOwotCiB9CiAKLXN0YXRpYyBpbnQgYmVfZmxhc2hfaW1hZ2Uoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCitzdGF0aWMgaW50IGJlX2ZsYXNoX2RhdGEoc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJCQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LAotCQkJc3RydWN0IGJlX2RtYV9tZW0gKmZsYXNoX2NtZCwgdTMyIGZsYXNoX3R5cGUpCisJCQlzdHJ1Y3QgYmVfZG1hX21lbSAqZmxhc2hfY21kLCBpbnQgbnVtX29mX2ltYWdlcykKKwogewotCWludCBzdGF0dXM7Ci0JdTMyIGZsYXNoX29wLCBpbWFnZV9vZmZzZXQgPSAwLCB0b3RhbF9ieXRlcywgaW1hZ2Vfc2l6ZSA9IDA7CisJaW50IHN0YXR1cyA9IDAsIGksIGZpbGVoZHJfc2l6ZSA9IDA7CisJdTMyIHRvdGFsX2J5dGVzID0gMCwgZmxhc2hfb3A7CiAJaW50IG51bV9ieXRlczsKIAljb25zdCB1OCAqcCA9IGZ3LT5kYXRhOwogCXN0cnVjdCBiZV9jbWRfd3JpdGVfZmxhc2hyb20gKnJlcSA9IGZsYXNoX2NtZC0+dmE7CisJc3RydWN0IGZsYXNoX2NvbXAgKnBmbGFzaGNvbXA7CiAKLQlzd2l0Y2ggKGZsYXNoX3R5cGUpIHsKLQljYXNlIEZMQVNIUk9NX1RZUEVfSVNDU0lfQUNUSVZFOgotCQlpbWFnZV9vZmZzZXQgPSBGTEFTSF9pU0NTSV9QUklNQVJZX0lNQUdFX1NUQVJUOwotCQlpbWFnZV9zaXplID0gRkxBU0hfSU1BR0VfTUFYX1NJWkU7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hST01fVFlQRV9JU0NTSV9CQUNLVVA6Ci0JCWltYWdlX29mZnNldCA9IEZMQVNIX2lTQ1NJX0JBQ0tVUF9JTUFHRV9TVEFSVDsKLQkJaW1hZ2Vfc2l6ZSA9IEZMQVNIX0lNQUdFX01BWF9TSVpFOwotCQlicmVhazsKLQljYXNlIEZMQVNIUk9NX1RZUEVfRkNPRV9GV19BQ1RJVkU6Ci0JCWltYWdlX29mZnNldCA9IEZMQVNIX0ZDb0VfUFJJTUFSWV9JTUFHRV9TVEFSVDsKLQkJaW1hZ2Vfc2l6ZSA9IEZMQVNIX0lNQUdFX01BWF9TSVpFOwotCQlicmVhazsKLQljYXNlIEZMQVNIUk9NX1RZUEVfRkNPRV9GV19CQUNLVVA6Ci0JCWltYWdlX29mZnNldCA9IEZMQVNIX0ZDb0VfQkFDS1VQX0lNQUdFX1NUQVJUOwotCQlpbWFnZV9zaXplID0gRkxBU0hfSU1BR0VfTUFYX1NJWkU7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hST01fVFlQRV9CSU9TOgotCQlpbWFnZV9vZmZzZXQgPSBGTEFTSF9pU0NTSV9CSU9TX1NUQVJUOwotCQlpbWFnZV9zaXplID0gRkxBU0hfQklPU19JTUFHRV9NQVhfU0laRTsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSFJPTV9UWVBFX0ZDT0VfQklPUzoKLQkJaW1hZ2Vfb2Zmc2V0ID0gRkxBU0hfRkNvRV9CSU9TX1NUQVJUOwotCQlpbWFnZV9zaXplID0gRkxBU0hfQklPU19JTUFHRV9NQVhfU0laRTsKLQkJYnJlYWs7Ci0JY2FzZSBGTEFTSFJPTV9UWVBFX1BYRV9CSU9TOgotCQlpbWFnZV9vZmZzZXQgPSBGTEFTSF9QWEVfQklPU19TVEFSVDsKLQkJaW1hZ2Vfc2l6ZSA9IEZMQVNIX0JJT1NfSU1BR0VfTUFYX1NJWkU7Ci0JCWJyZWFrOwotCWNhc2UgRkxBU0hST01fVFlQRV9SRURCT09UOgotCQlpZiAoIWJlX2ZsYXNoX3JlZGJvb3QoYWRhcHRlciwgZnctPmRhdGEpKQotCQkJcmV0dXJuIDA7Ci0JCWltYWdlX29mZnNldCA9IEZMQVNIX1JFREJPT1RfSVNNX1NUQVJUOwotCQlpbWFnZV9zaXplID0gRkxBU0hfUkVEQk9PVF9JTUFHRV9NQVhfU0laRTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7CisJc3RydWN0IGZsYXNoX2NvbXAgZ2VuM19mbGFzaF90eXBlc1s4XSA9IHsKKwkJeyBGTEFTSF9pU0NTSV9QUklNQVJZX0lNQUdFX1NUQVJUX2czLCBJTUdfVFlQRV9JU0NTSV9BQ1RJVkUsCisJCQlGTEFTSF9JTUFHRV9NQVhfU0laRV9nM30sCisJCXsgRkxBU0hfUkVEQk9PVF9TVEFSVF9nMywgSU1HX1RZUEVfUkVEQk9PVCwKKwkJCUZMQVNIX1JFREJPT1RfSU1BR0VfTUFYX1NJWkVfZzN9LAorCQl7IEZMQVNIX2lTQ1NJX0JJT1NfU1RBUlRfZzMsIElNR19UWVBFX0JJT1MsCisJCQlGTEFTSF9CSU9TX0lNQUdFX01BWF9TSVpFX2czfSwKKwkJeyBGTEFTSF9QWEVfQklPU19TVEFSVF9nMywgSU1HX1RZUEVfUFhFX0JJT1MsCisJCQlGTEFTSF9CSU9TX0lNQUdFX01BWF9TSVpFX2czfSwKKwkJeyBGTEFTSF9GQ29FX0JJT1NfU1RBUlRfZzMsIElNR19UWVBFX0ZDT0VfQklPUywKKwkJCUZMQVNIX0JJT1NfSU1BR0VfTUFYX1NJWkVfZzN9LAorCQl7IEZMQVNIX2lTQ1NJX0JBQ0tVUF9JTUFHRV9TVEFSVF9nMywgSU1HX1RZUEVfSVNDU0lfQkFDS1VQLAorCQkJRkxBU0hfSU1BR0VfTUFYX1NJWkVfZzN9LAorCQl7IEZMQVNIX0ZDb0VfUFJJTUFSWV9JTUFHRV9TVEFSVF9nMywgSU1HX1RZUEVfRkNPRV9GV19BQ1RJVkUsCisJCQlGTEFTSF9JTUFHRV9NQVhfU0laRV9nM30sCisJCXsgRkxBU0hfRkNvRV9CQUNLVVBfSU1BR0VfU1RBUlRfZzMsIElNR19UWVBFX0ZDT0VfRldfQkFDS1VQLAorCQkJRkxBU0hfSU1BR0VfTUFYX1NJWkVfZzN9CisJfTsKKwlzdHJ1Y3QgZmxhc2hfY29tcCBnZW4yX2ZsYXNoX3R5cGVzWzhdID0geworCQl7IEZMQVNIX2lTQ1NJX1BSSU1BUllfSU1BR0VfU1RBUlRfZzIsIElNR19UWVBFX0lTQ1NJX0FDVElWRSwKKwkJCUZMQVNIX0lNQUdFX01BWF9TSVpFX2cyfSwKKwkJeyBGTEFTSF9SRURCT09UX1NUQVJUX2cyLCBJTUdfVFlQRV9SRURCT09ULAorCQkJRkxBU0hfUkVEQk9PVF9JTUFHRV9NQVhfU0laRV9nMn0sCisJCXsgRkxBU0hfaVNDU0lfQklPU19TVEFSVF9nMiwgSU1HX1RZUEVfQklPUywKKwkJCUZMQVNIX0JJT1NfSU1BR0VfTUFYX1NJWkVfZzJ9LAorCQl7IEZMQVNIX1BYRV9CSU9TX1NUQVJUX2cyLCBJTUdfVFlQRV9QWEVfQklPUywKKwkJCUZMQVNIX0JJT1NfSU1BR0VfTUFYX1NJWkVfZzJ9LAorCQl7IEZMQVNIX0ZDb0VfQklPU19TVEFSVF9nMiwgSU1HX1RZUEVfRkNPRV9CSU9TLAorCQkJRkxBU0hfQklPU19JTUFHRV9NQVhfU0laRV9nMn0sCisJCXsgRkxBU0hfaVNDU0lfQkFDS1VQX0lNQUdFX1NUQVJUX2cyLCBJTUdfVFlQRV9JU0NTSV9CQUNLVVAsCisJCQlGTEFTSF9JTUFHRV9NQVhfU0laRV9nMn0sCisJCXsgRkxBU0hfRkNvRV9QUklNQVJZX0lNQUdFX1NUQVJUX2cyLCBJTUdfVFlQRV9GQ09FX0ZXX0FDVElWRSwKKwkJCUZMQVNIX0lNQUdFX01BWF9TSVpFX2cyfSwKKwkJeyBGTEFTSF9GQ29FX0JBQ0tVUF9JTUFHRV9TVEFSVF9nMiwgSU1HX1RZUEVfRkNPRV9GV19CQUNLVVAsCisJCQkgRkxBU0hfSU1BR0VfTUFYX1NJWkVfZzJ9CisJfTsKKworCWlmIChhZGFwdGVyLT5nZW5lcmF0aW9uID09IEJFX0dFTjMpIHsKKwkJcGZsYXNoY29tcCA9IGdlbjNfZmxhc2hfdHlwZXM7CisJCWZpbGVoZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZmxhc2hfZmlsZV9oZHJfZzMpOworCX0gZWxzZSB7CisJCXBmbGFzaGNvbXAgPSBnZW4yX2ZsYXNoX3R5cGVzOworCQlmaWxlaGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGZsYXNoX2ZpbGVfaGRyX2cyKTsKIAl9Ci0KLQlwICs9IHNpemVvZihzdHJ1Y3QgZmxhc2hfZmlsZV9oZHIpICsgaW1hZ2Vfb2Zmc2V0OwotCWlmIChwICsgaW1hZ2Vfc2l6ZSA+IGZ3LT5kYXRhICsgZnctPnNpemUpCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlpZiAoKHBmbGFzaGNvbXBbaV0ub3B0eXBlID09IElNR19UWVBFX1JFREJPT1QpICYmCisJCQkoIWJlX2ZsYXNoX3JlZGJvb3QoYWRhcHRlciwgZnctPmRhdGEsCisJCQkgcGZsYXNoY29tcFtpXS5vZmZzZXQsIHBmbGFzaGNvbXBbaV0uc2l6ZSwKKwkJCSBmaWxlaGRyX3NpemUpKSkKKwkJCWNvbnRpbnVlOworCQlwID0gZnctPmRhdGE7CisJCXAgKz0gZmlsZWhkcl9zaXplICsgcGZsYXNoY29tcFtpXS5vZmZzZXQKKwkJCSsgKG51bV9vZl9pbWFnZXMgKiBzaXplb2Yoc3RydWN0IGltYWdlX2hkcikpOworCWlmIChwICsgcGZsYXNoY29tcFtpXS5zaXplID4gZnctPmRhdGEgKyBmdy0+c2l6ZSkKIAkJcmV0dXJuIC0xOworCXRvdGFsX2J5dGVzID0gcGZsYXNoY29tcFtpXS5zaXplOworCQl3aGlsZSAodG90YWxfYnl0ZXMpIHsKKwkJCWlmICh0b3RhbF9ieXRlcyA+IDMyKjEwMjQpCisJCQkJbnVtX2J5dGVzID0gMzIqMTAyNDsKKwkJCWVsc2UKKwkJCQludW1fYnl0ZXMgPSB0b3RhbF9ieXRlczsKKwkJCXRvdGFsX2J5dGVzIC09IG51bV9ieXRlczsKIAotCXRvdGFsX2J5dGVzID0gaW1hZ2Vfc2l6ZTsKLQotCXdoaWxlICh0b3RhbF9ieXRlcykgewotCQlpZiAodG90YWxfYnl0ZXMgPiAzMioxMDI0KQotCQkJbnVtX2J5dGVzID0gMzIqMTAyNDsKLQkJZWxzZQotCQkJbnVtX2J5dGVzID0gdG90YWxfYnl0ZXM7Ci0JCXRvdGFsX2J5dGVzIC09IG51bV9ieXRlczsKLQotCQlpZiAoIXRvdGFsX2J5dGVzKQotCQkJZmxhc2hfb3AgPSBGTEFTSFJPTV9PUEVSX0ZMQVNIOwotCQllbHNlCi0JCQlmbGFzaF9vcCA9IEZMQVNIUk9NX09QRVJfU0FWRTsKLQkJbWVtY3B5KHJlcS0+cGFyYW1zLmRhdGFfYnVmLCBwLCBudW1fYnl0ZXMpOwotCQlwICs9IG51bV9ieXRlczsKLQkJc3RhdHVzID0gYmVfY21kX3dyaXRlX2ZsYXNocm9tKGFkYXB0ZXIsIGZsYXNoX2NtZCwKLQkJCQlmbGFzaF90eXBlLCBmbGFzaF9vcCwgbnVtX2J5dGVzKTsKLQkJaWYgKHN0YXR1cykgewotCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAotCQkJImNtZCB0byB3cml0ZSB0byBmbGFzaCByb20gZmFpbGVkLiB0eXBlL29wICVkLyVkXG4iLAotCQkJZmxhc2hfdHlwZSwgZmxhc2hfb3ApOwotCQkJcmV0dXJuIC0xOworCQkJaWYgKCF0b3RhbF9ieXRlcykKKwkJCQlmbGFzaF9vcCA9IEZMQVNIUk9NX09QRVJfRkxBU0g7CisJCQllbHNlCisJCQkJZmxhc2hfb3AgPSBGTEFTSFJPTV9PUEVSX1NBVkU7CisJCQltZW1jcHkocmVxLT5wYXJhbXMuZGF0YV9idWYsIHAsIG51bV9ieXRlcyk7CisJCQlwICs9IG51bV9ieXRlczsKKwkJCXN0YXR1cyA9IGJlX2NtZF93cml0ZV9mbGFzaHJvbShhZGFwdGVyLCBmbGFzaF9jbWQsCisJCQkJcGZsYXNoY29tcFtpXS5vcHR5cGUsIGZsYXNoX29wLCBudW1fYnl0ZXMpOworCQkJaWYgKHN0YXR1cykgeworCQkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJImNtZCB0byB3cml0ZSB0byBmbGFzaCByb20gZmFpbGVkLlxuIik7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJeWllbGQoKTsKIAkJfQotCQl5aWVsZCgpOwogCX0KLQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGdldF91ZmlnZW5fdHlwZShzdHJ1Y3QgZmxhc2hfZmlsZV9oZHJfZzIgKmZoZHIpCit7CisJaWYgKGZoZHIgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisJaWYgKGZoZHItPmJ1aWxkWzBdID09ICczJykKKwkJcmV0dXJuIEJFX0dFTjM7CisJZWxzZSBpZiAoZmhkci0+YnVpbGRbMF0gPT0gJzInKQorCQlyZXR1cm4gQkVfR0VOMjsKKwllbHNlCisJCXJldHVybiAwOworfQorCiBpbnQgYmVfbG9hZF9mdyhzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciwgdTggKmZ1bmMpCiB7CiAJY2hhciBmd19maWxlW0VUSFRPT0xfRkxBU0hfTUFYX0ZJTEVOQU1FXTsKIAljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OwotCXN0cnVjdCBmbGFzaF9maWxlX2hkciAqZmhkcjsKLQlzdHJ1Y3QgZmxhc2hfc2VjdGlvbl9pbmZvICpmc2VjID0gTlVMTDsKKwlzdHJ1Y3QgZmxhc2hfZmlsZV9oZHJfZzIgKmZoZHI7CisJc3RydWN0IGZsYXNoX2ZpbGVfaGRyX2czICpmaGRyMzsKKwlzdHJ1Y3QgaW1hZ2VfaGRyICppbWdfaGRyX3B0ciA9IE5VTEw7CiAJc3RydWN0IGJlX2RtYV9tZW0gZmxhc2hfY21kOwotCWludCBzdGF0dXM7CisJaW50IHN0YXR1cywgaSA9IDA7CiAJY29uc3QgdTggKnA7Ci0JYm9vbCBlbnRyeV9mb3VuZCA9IGZhbHNlOwotCWludCBmbGFzaF90eXBlOwogCWNoYXIgZndfdmVyW0ZXX1ZFUl9MRU5dOwogCWNoYXIgZndfY2ZnOwogCkBAIC0xOTMxLDM0ICsyMDAyLDkgQEAKIAkJZ290byBmd19leGl0OwogCiAJcCA9IGZ3LT5kYXRhOwotCWZoZHIgPSAoc3RydWN0IGZsYXNoX2ZpbGVfaGRyICopIHA7Ci0JaWYgKG1lbWNtcChmaGRyLT5zaWduLCBGV19GSUxFX0hEUl9TSUdOLCBzdHJsZW4oRldfRklMRV9IRFJfU0lHTikpKSB7Ci0JCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKLQkJCSJGaXJtd2FyZSglcykgbG9hZCBlcnJvciAoc2lnbmF0dXJlIGRpZCBub3QgbWF0Y2gpXG4iLAotCQkJCWZ3X2ZpbGUpOwotCQlzdGF0dXMgPSAtMTsKLQkJZ290byBmd19leGl0OwotCX0KLQorCWZoZHIgPSAoc3RydWN0IGZsYXNoX2ZpbGVfaGRyX2cyICopIHA7CiAJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIkZsYXNoaW5nIGZpcm13YXJlIGZpbGUgJXNcbiIsIGZ3X2ZpbGUpOwogCi0JcCArPSBzaXplb2Yoc3RydWN0IGZsYXNoX2ZpbGVfaGRyKTsKLQl3aGlsZSAocCA8IChmdy0+ZGF0YSArIGZ3LT5zaXplKSkgewotCQlmc2VjID0gKHN0cnVjdCBmbGFzaF9zZWN0aW9uX2luZm8gKilwOwotCQlpZiAoIW1lbWNtcChmbGFzaF9jb29raWUsIGZzZWMtPmNvb2tpZSwgc2l6ZW9mKGZsYXNoX2Nvb2tpZSkpKSB7Ci0JCQllbnRyeV9mb3VuZCA9IHRydWU7Ci0JCQlicmVhazsKLQkJfQotCQlwICs9IDMyOwotCX0KLQotCWlmICghZW50cnlfZm91bmQpIHsKLQkJc3RhdHVzID0gLTE7Ci0JCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKLQkJCSJGbGFzaCBjb29raWUgbm90IGZvdW5kIGluIGZpcm13YXJlIGltYWdlXG4iKTsKLQkJZ290byBmd19leGl0OwotCX0KLQogCWZsYXNoX2NtZC5zaXplID0gc2l6ZW9mKHN0cnVjdCBiZV9jbWRfd3JpdGVfZmxhc2hyb20pICsgMzIqMTAyNDsKIAlmbGFzaF9jbWQudmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBmbGFzaF9jbWQuc2l6ZSwKIAkJCQkJJmZsYXNoX2NtZC5kbWEpOwpAQCAtMTk2OSwxMiArMjAxNSwyNiBAQAogCQlnb3RvIGZ3X2V4aXQ7CiAJfQogCi0JZm9yIChmbGFzaF90eXBlID0gRkxBU0hST01fVFlQRV9JU0NTSV9BQ1RJVkU7Ci0JCWZsYXNoX3R5cGUgPD0gRkxBU0hST01fVFlQRV9GQ09FX0ZXX0JBQ0tVUDsgZmxhc2hfdHlwZSsrKSB7Ci0JCXN0YXR1cyA9IGJlX2ZsYXNoX2ltYWdlKGFkYXB0ZXIsIGZ3LCAmZmxhc2hfY21kLAotCQkJCWZsYXNoX3R5cGUpOwotCQlpZiAoc3RhdHVzKQotCQkJYnJlYWs7CisJaWYgKChhZGFwdGVyLT5nZW5lcmF0aW9uID09IEJFX0dFTjMpICYmCisJCQkoZ2V0X3VmaWdlbl90eXBlKGZoZHIpID09IEJFX0dFTjMpKSB7CisJCWZoZHIzID0gKHN0cnVjdCBmbGFzaF9maWxlX2hkcl9nMyAqKSBmdy0+ZGF0YTsKKwkJZm9yIChpID0gMDsgaSA8IGZoZHIzLT5udW1faW1nczsgaSsrKSB7CisJCQlpbWdfaGRyX3B0ciA9IChzdHJ1Y3QgaW1hZ2VfaGRyICopIChmdy0+ZGF0YSArCisJCQkJCShzaXplb2Yoc3RydWN0IGZsYXNoX2ZpbGVfaGRyX2czKSArCisJCQkJCWkgKiBzaXplb2Yoc3RydWN0IGltYWdlX2hkcikpKTsKKwkJCWlmIChpbWdfaGRyX3B0ci0+aW1hZ2VpZCA9PSAxKSB7CisJCQkJc3RhdHVzID0gYmVfZmxhc2hfZGF0YShhZGFwdGVyLCBmdywKKwkJCQkJCSZmbGFzaF9jbWQsIGZoZHIzLT5udW1faW1ncyk7CisJCQl9CisKKwkJfQorCX0gZWxzZSBpZiAoKGFkYXB0ZXItPmdlbmVyYXRpb24gPT0gQkVfR0VOMikgJiYKKwkJCShnZXRfdWZpZ2VuX3R5cGUoZmhkcikgPT0gQkVfR0VOMikpIHsKKwkJc3RhdHVzID0gYmVfZmxhc2hfZGF0YShhZGFwdGVyLCBmdywgJmZsYXNoX2NtZCwgMCk7CisJfSBlbHNlIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIlVGSSBhbmQgSW50ZXJmYWNlIGFyZSBub3QgY29tcGF0aWJsZSBmb3IgZmxhc2hpbmdcbiIpOworCQlzdGF0dXMgPSAtMTsKIAl9CiAKIAlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIGZsYXNoX2NtZC5zaXplLCBmbGFzaF9jbWQudmEsCkBAIC0yMTM2LDYgKzIxOTYsNyBAQAogCXNwaW5fbG9ja19pbml0KCZhZGFwdGVyLT5tY2NfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmFkYXB0ZXItPm1jY19jcV9sb2NrKTsKIAorCXBjaV9zYXZlX3N0YXRlKGFkYXB0ZXItPnBkZXYpOwogCXJldHVybiAwOwogCiBmcmVlX21ib3g6CkBAIC0yMjIyLDYgKzIyODMsMTEgQEAKIAltZW1jcHkoYWRhcHRlci0+bmV0ZGV2LT5kZXZfYWRkciwgbWFjLCBFVEhfQUxFTik7CiAJbWVtY3B5KGFkYXB0ZXItPm5ldGRldi0+cGVybV9hZGRyLCBtYWMsIEVUSF9BTEVOKTsKIAorCWlmIChhZGFwdGVyLT5jYXAgJiAweDQwMCkKKwkJYWRhcHRlci0+bWF4X3ZsYW5zID0gQkVfTlVNX1ZMQU5TX1NVUFBPUlRFRC80OworCWVsc2UKKwkJYWRhcHRlci0+bWF4X3ZsYW5zID0gQkVfTlVNX1ZMQU5TX1NVUFBPUlRFRDsKKwogCXJldHVybiAwOwogfQogCkBAIC0yMzk0LDEzICsyNDYwLDEyMyBAQAogCXJldHVybiAwOwogfQogCisvKgorICogQW4gRkxSIHdpbGwgc3RvcCBCRSBmcm9tIERNQWluZyBhbnkgZGF0YS4KKyAqLworc3RhdGljIHZvaWQgYmVfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGJlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9ICBhZGFwdGVyLT5uZXRkZXY7CisKKwluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CisKKwliZV9jbWRfcmVzZXRfZnVuY3Rpb24oYWRhcHRlcik7CisKKwlpZiAoYWRhcHRlci0+d29sKQorCQliZV9zZXR1cF93b2woYWRhcHRlciwgdHJ1ZSk7CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGJlX2VlaF9lcnJfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCQkJcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gIGFkYXB0ZXItPm5ldGRldjsKKworCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIkVFSCBlcnJvciBkZXRlY3RlZFxuIik7CisKKwlhZGFwdGVyLT5lZWhfZXJyID0gdHJ1ZTsKKworCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJcnRubF9sb2NrKCk7CisJCWJlX2Nsb3NlKG5ldGRldik7CisJCXJ0bmxfdW5sb2NrKCk7CisJfQorCWJlX2NsZWFyKGFkYXB0ZXIpOworCisJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwlyZXR1cm4gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVDsKK30KKworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgYmVfZWVoX3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBiZV9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCWludCBzdGF0dXM7CisKKwlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiRUVIIHJlc2V0XG4iKTsKKwlhZGFwdGVyLT5lZWhfZXJyID0gZmFsc2U7CisKKwlzdGF0dXMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAoc3RhdHVzKQorCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwkvKiBDaGVjayBpZiBjYXJkIGlzIG9rIGFuZCBmdyBpcyByZWFkeSAqLworCXN0YXR1cyA9IGJlX2NtZF9QT1NUKGFkYXB0ZXIpOworCWlmIChzdGF0dXMpCisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCisJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKK30KKworc3RhdGljIHZvaWQgYmVfZWVoX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgYmVfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gIGFkYXB0ZXItPm5ldGRldjsKKworCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJFRUggcmVzdW1lXG4iKTsKKworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOworCisJLyogdGVsbCBmdyB3ZSdyZSByZWFkeSB0byBmaXJlIGNtZHMgKi8KKwlzdGF0dXMgPSBiZV9jbWRfZndfaW5pdChhZGFwdGVyKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVycjsKKworCXN0YXR1cyA9IGJlX3NldHVwKGFkYXB0ZXIpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXJyOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQlzdGF0dXMgPSBiZV9vcGVuKG5ldGRldik7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGVycjsKKwl9CisJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOworCXJldHVybjsKK2VycjoKKwlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJFRUggcmVzdW1lIGZhaWxlZFxuIik7CisJcmV0dXJuOworfQorCitzdGF0aWMgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBiZV9lZWhfaGFuZGxlcnMgPSB7CisJLmVycm9yX2RldGVjdGVkID0gYmVfZWVoX2Vycl9kZXRlY3RlZCwKKwkuc2xvdF9yZXNldCA9IGJlX2VlaF9yZXNldCwKKwkucmVzdW1lID0gYmVfZWVoX3Jlc3VtZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBiZV9kcml2ZXIgPSB7CiAJLm5hbWUgPSBEUlZfTkFNRSwKIAkuaWRfdGFibGUgPSBiZV9kZXZfaWRzLAogCS5wcm9iZSA9IGJlX3Byb2JlLAogCS5yZW1vdmUgPSBiZV9yZW1vdmUsCiAJLnN1c3BlbmQgPSBiZV9zdXNwZW5kLAotCS5yZXN1bWUgPSBiZV9yZXN1bWUKKwkucmVzdW1lID0gYmVfcmVzdW1lLAorCS5zaHV0ZG93biA9IGJlX3NodXRkb3duLAorCS5lcnJfaGFuZGxlciA9ICZiZV9lZWhfaGFuZGxlcnMKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGJlX2luaXRfbW9kdWxlKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9iZmluX21hYy5jIGIvZHJpdmVycy9uZXQvYmZpbl9tYWMuYwppbmRleCAwYjIzYmM0Li41ODdmOTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9iZmluX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2JmaW5fbWFjLmMKQEAgLTgxMiwxNiArODEyLDE0IEBACiBzdGF0aWMgdm9pZCBiZmluX21hY19tdWx0aWNhc3RfaGFzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXUzMiBlbWFjX2hhc2hoaSwgZW1hY19oYXNobG87Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJY2hhciAqYWRkcnM7Ci0JaW50IGk7CiAJdTMyIGNyYzsKIAogCWVtYWNfaGFzaGhpID0gZW1hY19oYXNobG8gPSAwOwogCi0JZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCWFkZHJzID0gZG1pLT5kbWlfYWRkcjsKLQkJZG1pID0gZG1pLT5uZXh0OwogCiAJCS8qIHNraXAgbm9uLW11bHRpY2FzdCBhZGRyZXNzZXMgKi8KIAkJaWYgKCEoKmFkZHJzICYgMSkpCkBAIC04NjIsNyArODYwLDcgQEAKIAkJc3lzY3RsID0gYmZpbl9yZWFkX0VNQUNfT1BNT0RFKCk7CiAJCXN5c2N0bCB8PSBQQU07CiAJCWJmaW5fd3JpdGVfRU1BQ19PUE1PREUoc3lzY3RsKTsKLQl9IGVsc2UgaWYgKGRldi0+bWNfY291bnQpIHsKKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQkvKiBzZXQgdXAgbXVsdGljYXN0IGhhc2ggdGFibGUgKi8KIAkJc3lzY3RsID0gYmZpbl9yZWFkX0VNQUNfT1BNT0RFKCk7CiAJCXN5c2N0bCB8PSBITTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JtYWMuYyBiL2RyaXZlcnMvbmV0L2JtYWMuYwppbmRleCA5YjU4N2MzLi4xMTk0NjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibWFjLmMKKysrIGIvZHJpdmVycy9uZXQvYm1hYy5jCkBAIC05NzMsNyArOTczLDcgQEAKIHsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAlzdHJ1Y3QgYm1hY19kYXRhICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IG51bV9hZGRycyA9IGRldi0+bWNfY291bnQ7CisJaW50IG51bV9hZGRycyA9IG5ldGRldl9tY19jb3VudChkZXYpOwogCXVuc2lnbmVkIHNob3J0IHJ4X2NmZzsKIAlpbnQgaTsKIApAQCAtOTgyLDcgKzk4Miw3IEBACiAKIAlYWERFQlVHKCgiYm1hYzogZW50ZXIgYm1hY19zZXRfbXVsdGljYXN0LCBuX2FkZHJzPSVkXG4iLCBudW1fYWRkcnMpKTsKIAotCWlmKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCAoZGV2LT5tY19jb3VudCA+IDY0KSkgeworCWlmKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCAobmV0ZGV2X21jX2NvdW50KGRldikgPiA2NCkpIHsKIAkJZm9yIChpPTA7IGk8NDsgaSsrKSBicC0+aGFzaF90YWJsZV9tYXNrW2ldID0gMHhmZmZmOwogCQlibWFjX3VwZGF0ZV9oYXNoX3RhYmxlX21hc2soZGV2LCBicCk7CiAJCXJ4X2NmZyA9IGJtYWNfcnhfb24oZGV2LCAxLCAwKTsKQEAgLTEwMDAsNyArMTAwMCw3IEBACiAJCQlyeF9jZmcgPSBibWFjX3J4X29uKGRldiwgMCwgMCk7CiAJCQlYWERFQlVHKCgiYm1hYzogbXVsdGkgZGlzYWJsZWQsIHJ4X2NmZz0lIzA4eFxuIiwgcnhfY2ZnKSk7CiAJCX0gZWxzZSB7Ci0JCQlmb3IgKGRtaT1kZXYtPm1jX2xpc3Q7IGRtaSE9TlVMTDsgZG1pPWRtaS0+bmV4dCkKKwkJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KQogCQkJCWJtYWNfYWRkaGFzaChicCwgZG1pLT5kbWlfYWRkcik7CiAJCQlibWFjX3VwZGF0ZV9oYXNoX3RhYmxlX21hc2soZGV2LCBicCk7CiAJCQlyeF9jZmcgPSBibWFjX3J4X29uKGRldiwgMSwgMCk7CkBAIC0xMDE1LDEzICsxMDE1LDEzIEBACiAKIHN0YXRpYyB2b2lkIGJtYWNfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCWNoYXIgKmFkZHJzOwogCWludCBpOwogCXVuc2lnbmVkIHNob3J0IHJ4X2NmZzsKIAl1MzIgY3JjOwogCi0JaWYoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8IChkZXYtPm1jX2NvdW50ID4gNjQpKSB7CisJaWYoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8IChuZXRkZXZfbWNfY291bnQoZGV2KSA+IDY0KSkgewogCQlibXdyaXRlKGRldiwgQkhBU0gwLCAweGZmZmYpOwogCQlibXdyaXRlKGRldiwgQkhBU0gxLCAweGZmZmYpOwogCQlibXdyaXRlKGRldiwgQkhBU0gyLCAweGZmZmYpOwpAQCAtMTAzOSw5ICsxMDM5LDggQEAKIAogCQlmb3IoaSA9IDA7IGkgPCA0OyBpKyspIGhhc2hfdGFibGVbaV0gPSAwOwogCi0JCWZvcihpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogCQkJYWRkcnMgPSBkbWktPmRtaV9hZGRyOwotCQkJZG1pID0gZG1pLT5uZXh0OwogCiAJCQlpZighKCphZGRycyAmIDEpKQogCQkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54Mi5jIGIvZHJpdmVycy9uZXQvYm54Mi5jCmluZGV4IDY1ZGYxZGUuLjM4MTg4N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JueDIuYworKysgYi9kcml2ZXJzL25ldC9ibngyLmMKQEAgLTEsNiArMSw2IEBACiAvKiBibngyLmM6IEJyb2FkY29tIE5YMiBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTksNiArOSw3IEBACiAgKiBXcml0dGVuIGJ5OiBNaWNoYWVsIENoYW4gIChtY2hhbkBicm9hZGNvbS5jb20pCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KQEAgLTQ4LDcgKzQ5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogI2lmIGRlZmluZWQoQ09ORklHX0NOSUMpIHx8IGRlZmluZWQoQ09ORklHX0NOSUNfTU9EVUxFKQogI2RlZmluZSBCQ01fQ05JQyAxCkBAIC01OCwxNCArNTgsMTMgQEAKICNpbmNsdWRlICJibngyX2Z3LmgiCiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkiYm54MiIKLSNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMi4wLjMiCi0jZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiRGVjIDAzLCAyMDA5IgotI2RlZmluZSBGV19NSVBTX0ZJTEVfMDYJCSJibngyL2JueDItbWlwcy0wNi01LjAuMC5qMy5mdyIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIyLjAuOCIKKyNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJGZWIgMTUsIDIwMTAiCisjZGVmaW5lIEZXX01JUFNfRklMRV8wNgkJImJueDIvYm54Mi1taXBzLTA2LTUuMC4wLmo2LmZ3IgogI2RlZmluZSBGV19SVjJQX0ZJTEVfMDYJCSJibngyL2JueDItcnYycC0wNi01LjAuMC5qMy5mdyIKLSNkZWZpbmUgRldfTUlQU19GSUxFXzA5CQkiYm54Mi9ibngyLW1pcHMtMDktNS4wLjAuajMuZnciCi0jZGVmaW5lIEZXX1JWMlBfRklMRV8wOV9BeAkiYm54Mi9ibngyLXJ2MnAtMDlheC01LjAuMC5qMy5mdyIKLSNkZWZpbmUgRldfUlYyUF9GSUxFXzA5CQkiYm54Mi9ibngyLXJ2MnAtMDktNS4wLjAuajMuZnciCisjZGVmaW5lIEZXX01JUFNfRklMRV8wOQkJImJueDIvYm54Mi1taXBzLTA5LTUuMC4wLmo5LmZ3IgorI2RlZmluZSBGV19SVjJQX0ZJTEVfMDlfQXgJImJueDIvYm54Mi1ydjJwLTA5YXgtNS4wLjAuajEwLmZ3IgorI2RlZmluZSBGV19SVjJQX0ZJTEVfMDkJCSJibngyL2JueDItcnYycC0wOS01LjAuMC5qMTAuZnciCiAKICNkZWZpbmUgUlVOX0FUKHgpIChqaWZmaWVzICsgKHgpKQogCkBAIC05ODAsMzMgKzk3OSwyNyBAQAogewogCWlmIChicC0+bGlua191cCkgewogCQluZXRpZl9jYXJyaWVyX29uKGJwLT5kZXYpOwotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXMgTklDICVzIExpbmsgaXMgVXAsICIsIGJwLT5kZXYtPm5hbWUsCi0JCSAgICAgICBibngyX3hjZWl2ZXJfc3RyKGJwKSk7Ci0KLQkJcHJpbnRrKCIlZCBNYnBzICIsIGJwLT5saW5lX3NwZWVkKTsKLQotCQlpZiAoYnAtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKLQkJCXByaW50aygiZnVsbCBkdXBsZXgiKTsKLQkJZWxzZQotCQkJcHJpbnRrKCJoYWxmIGR1cGxleCIpOworCQluZXRkZXZfaW5mbyhicC0+ZGV2LCAiTklDICVzIExpbmsgaXMgVXAsICVkIE1icHMgJXMgZHVwbGV4IiwKKwkJCSAgICBibngyX3hjZWl2ZXJfc3RyKGJwKSwKKwkJCSAgICBicC0+bGluZV9zcGVlZCwKKwkJCSAgICBicC0+ZHVwbGV4ID09IERVUExFWF9GVUxMID8gImZ1bGwiIDogImhhbGYiKTsKIAogCQlpZiAoYnAtPmZsb3dfY3RybCkgewogCQkJaWYgKGJwLT5mbG93X2N0cmwgJiBGTE9XX0NUUkxfUlgpIHsKLQkJCQlwcmludGsoIiwgcmVjZWl2ZSAiKTsKKwkJCQlwcl9jb250KCIsIHJlY2VpdmUgIik7CiAJCQkJaWYgKGJwLT5mbG93X2N0cmwgJiBGTE9XX0NUUkxfVFgpCi0JCQkJCXByaW50aygiJiB0cmFuc21pdCAiKTsKKwkJCQkJcHJfY29udCgiJiB0cmFuc21pdCAiKTsKIAkJCX0KIAkJCWVsc2UgewotCQkJCXByaW50aygiLCB0cmFuc21pdCAiKTsKKwkJCQlwcl9jb250KCIsIHRyYW5zbWl0ICIpOwogCQkJfQotCQkJcHJpbnRrKCJmbG93IGNvbnRyb2wgT04iKTsKKwkJCXByX2NvbnQoImZsb3cgY29udHJvbCBPTiIpOwogCQl9Ci0JCXByaW50aygiXG4iKTsKLQl9Ci0JZWxzZSB7CisJCXByX2NvbnQoIlxuIik7CisJfSBlbHNlIHsKIAkJbmV0aWZfY2Fycmllcl9vZmYoYnAtPmRldik7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzIE5JQyAlcyBMaW5rIGlzIERvd25cbiIsIGJwLT5kZXYtPm5hbWUsCi0JCSAgICAgICBibngyX3hjZWl2ZXJfc3RyKGJwKSk7CisJCW5ldGRldl9lcnIoYnAtPmRldiwgIk5JQyAlcyBMaW5rIGlzIERvd25cbiIsCisJCQkgICBibngyX3hjZWl2ZXJfc3RyKGJwKSk7CiAJfQogCiAJYm54Ml9yZXBvcnRfZndfbGluayhicCk7CkBAIC0xMjc4LDcgKzEyNzEsNyBAQAogCQlpZiAobG9fd2F0ZXIgPj0gYnAtPnJ4X3Jpbmdfc2l6ZSkKIAkJCWxvX3dhdGVyID0gMDsKIAotCQloaV93YXRlciA9IGJwLT5yeF9yaW5nX3NpemUgLyA0OworCQloaV93YXRlciA9IG1pbl90KGludCwgYnAtPnJ4X3Jpbmdfc2l6ZSAvIDQsIGxvX3dhdGVyICsgMTYpOwogCiAJCWlmIChoaV93YXRlciA8PSBsb193YXRlcikKIAkJCWxvX3dhdGVyID0gMDsKQEAgLTI0ODMsOCArMjQ3Niw3IEBACiAJLyogSWYgd2UgdGltZWQgb3V0LCBpbmZvcm0gdGhlIGZpcm13YXJlIHRoYXQgdGhpcyBpcyB0aGUgY2FzZS4gKi8KIAlpZiAoKHZhbCAmIEJOWDJfRldfTVNHX0FDSykgIT0gKG1zZ19kYXRhICYgQk5YMl9EUlZfTVNHX1NFUSkpIHsKIAkJaWYgKCFzaWxlbnQpCi0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJmdyBzeW5jIHRpbWVvdXQsIHJlc2V0IGNvZGUgPSAiCi0JCQkJCSAgICAiJXhcbiIsIG1zZ19kYXRhKTsKKwkJCXByX2VycigiZncgc3luYyB0aW1lb3V0LCByZXNldCBjb2RlID0gJXhcbiIsIG1zZ19kYXRhKTsKIAogCQltc2dfZGF0YSAmPSB+Qk5YMl9EUlZfTVNHX0NPREU7CiAJCW1zZ19kYXRhIHw9IEJOWDJfRFJWX01TR19DT0RFX0ZXX1RJTUVPVVQ7CkBAIC0yNjAwLDggKzI1OTIsNyBAQAogCiAJZ29vZF9tYnVmID0ga21hbGxvYyg1MTIgKiBzaXplb2YodTE2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGdvb2RfbWJ1ZiA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgaW4gIgotCQkJCSAgICAiYm54Ml9hbGxvY19iYWRfcmJ1ZlxuIik7CisJCXByX2VycigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBpbiAlc1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTM1NjEsOSArMzU1Miw3IEBACiAKIAkJbWVtc2V0KG1jX2ZpbHRlciwgMCwgNCAqIE5VTV9NQ19IQVNIX1JFR0lTVEVSUyk7CiAKLQkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7Ci0JCSAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKLQorCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQkJY3JjID0gZXRoZXJfY3JjX2xlKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKTsKIAkJCWJpdCA9IGNyYyAmIDB4ZmY7CiAJCQlyZWdpZHggPSAoYml0ICYgMHhlMCkgPj4gNTsKQEAgLTM1NzksMTQgKzM1NjgsMTQgQEAKIAkJc29ydF9tb2RlIHw9IEJOWDJfUlBNX1NPUlRfVVNFUjBfTUNfSFNIX0VOOwogCX0KIAotCWlmIChkZXYtPnVjLmNvdW50ID4gQk5YMl9NQVhfVU5JQ0FTVF9BRERSRVNTRVMpIHsKKwlpZiAobmV0ZGV2X3VjX2NvdW50KGRldikgPiBCTlgyX01BWF9VTklDQVNUX0FERFJFU1NFUykgewogCQlyeF9tb2RlIHw9IEJOWDJfRU1BQ19SWF9NT0RFX1BST01JU0NVT1VTOwogCQlzb3J0X21vZGUgfD0gQk5YMl9SUE1fU09SVF9VU0VSMF9QUk9NX0VOIHwKIAkJCSAgICAgQk5YMl9SUE1fU09SVF9VU0VSMF9QUk9NX1ZMQU47CiAJfSBlbHNlIGlmICghKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykpIHsKIAkJLyogQWRkIGFsbCBlbnRyaWVzIGludG8gdG8gdGhlIG1hdGNoIGZpbHRlciBsaXN0ICovCiAJCWkgPSAwOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhLCAmZGV2LT51Yy5saXN0LCBsaXN0KSB7CisJCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBkZXYpIHsKIAkJCWJueDJfc2V0X21hY19hZGRyKGJwLCBoYS0+YWRkciwKIAkJCQkJICBpICsgQk5YMl9TVEFSVF9VTklDQVNUX0FERFJFU1NfSU5ERVgpOwogCQkJc29ydF9tb2RlIHw9ICgxIDw8CkBAIC0zNjU3LDE1ICszNjQ2LDEzIEBACiAKIAlyYyA9IHJlcXVlc3RfZmlybXdhcmUoJmJwLT5taXBzX2Zpcm13YXJlLCBtaXBzX2Z3X2ZpbGUsICZicC0+cGRldi0+ZGV2KTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2FuJ3QgbG9hZCBmaXJtd2FyZSBmaWxlIFwiJXNcIlxuIiwKLQkJICAgICAgIG1pcHNfZndfZmlsZSk7CisJCXByX2VycigiQ2FuJ3QgbG9hZCBmaXJtd2FyZSBmaWxlIFwiJXNcIlxuIiwgbWlwc19md19maWxlKTsKIAkJcmV0dXJuIHJjOwogCX0KIAogCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmYnAtPnJ2MnBfZmlybXdhcmUsIHJ2MnBfZndfZmlsZSwgJmJwLT5wZGV2LT5kZXYpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW4ndCBsb2FkIGZpcm13YXJlIGZpbGUgXCIlc1wiXG4iLAotCQkgICAgICAgcnYycF9md19maWxlKTsKKwkJcHJfZXJyKCJDYW4ndCBsb2FkIGZpcm13YXJlIGZpbGUgXCIlc1wiXG4iLCBydjJwX2Z3X2ZpbGUpOwogCQlyZXR1cm4gcmM7CiAJfQogCW1pcHNfZncgPSAoY29uc3Qgc3RydWN0IGJueDJfbWlwc19md19maWxlICopIGJwLT5taXBzX2Zpcm13YXJlLT5kYXRhOwpAQCAtMzY3NiwxNSArMzY2MywxMyBAQAogCSAgICBjaGVja19taXBzX2Z3X2VudHJ5KGJwLT5taXBzX2Zpcm13YXJlLCAmbWlwc19mdy0+cnhwKSB8fAogCSAgICBjaGVja19taXBzX2Z3X2VudHJ5KGJwLT5taXBzX2Zpcm13YXJlLCAmbWlwc19mdy0+dHBhdCkgfHwKIAkgICAgY2hlY2tfbWlwc19md19lbnRyeShicC0+bWlwc19maXJtd2FyZSwgJm1pcHNfZnctPnR4cCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiRmlybXdhcmUgZmlsZSBcIiVzXCIgaXMgaW52YWxpZFxuIiwKLQkJICAgICAgIG1pcHNfZndfZmlsZSk7CisJCXByX2VycigiRmlybXdhcmUgZmlsZSBcIiVzXCIgaXMgaW52YWxpZFxuIiwgbWlwc19md19maWxlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChicC0+cnYycF9maXJtd2FyZS0+c2l6ZSA8IHNpemVvZigqcnYycF9mdykgfHwKIAkgICAgY2hlY2tfZndfc2VjdGlvbihicC0+cnYycF9maXJtd2FyZSwgJnJ2MnBfZnctPnByb2MxLnJ2MnAsIDgsIHRydWUpIHx8CiAJICAgIGNoZWNrX2Z3X3NlY3Rpb24oYnAtPnJ2MnBfZmlybXdhcmUsICZydjJwX2Z3LT5wcm9jMi5ydjJwLCA4LCB0cnVlKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJGaXJtd2FyZSBmaWxlIFwiJXNcIiBpcyBpbnZhbGlkXG4iLAotCQkgICAgICAgcnYycF9md19maWxlKTsKKwkJcHJfZXJyKCJGaXJtd2FyZSBmaWxlIFwiJXNcIiBpcyBpbnZhbGlkXG4iLCBydjJwX2Z3X2ZpbGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTQzMTgsNyArNDMwMyw3IEBACiAKIAlpZiAoaiA9PSBlbnRyeV9jb3VudCkgewogCQlicC0+Zmxhc2hfaW5mbyA9IE5VTEw7Ci0JCXByaW50ayhLRVJOX0FMRVJUIFBGWCAiVW5rbm93biBmbGFzaC9FRVBST00gdHlwZS5cbiIpOworCQlwcl9hbGVydCgiVW5rbm93biBmbGFzaC9FRVBST00gdHlwZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNDczOCw3ICs0NzIzLDcgQEAKIAogCQlpZiAodmFsICYgKEJOWDJfUENJQ0ZHX01JU0NfQ09ORklHX0NPUkVfUlNUX1JFUSB8CiAJCQkgICBCTlgyX1BDSUNGR19NSVNDX0NPTkZJR19DT1JFX1JTVF9CU1kpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJDaGlwIHJlc2V0IGRpZCBub3QgY29tcGxldGVcbiIpOworCQkJcHJfZXJyKCJDaGlwIHJlc2V0IGRpZCBub3QgY29tcGxldGVcbiIpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCX0KQEAgLTQ3NDYsNyArNDczMSw3IEBACiAJLyogTWFrZSBzdXJlIGJ5dGUgc3dhcHBpbmcgaXMgcHJvcGVybHkgY29uZmlndXJlZC4gKi8KIAl2YWwgPSBSRUdfUkQoYnAsIEJOWDJfUENJX1NXQVBfRElBRzApOwogCWlmICh2YWwgIT0gMHgwMTAyMDMwNCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDaGlwIG5vdCBpbiBjb3JyZWN0IGVuZGlhbiBtb2RlXG4iKTsKKwkJcHJfZXJyKCJDaGlwIG5vdCBpbiBjb3JyZWN0IGVuZGlhbiBtb2RlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC00OTQxLDcgKzQ5MjYsNyBAQAogCQkgICAgICBCTlgyX0hDX0NPTkZJR19DT0xMRUNUX1NUQVRTOwogCX0KIAotCWlmIChicC0+aXJxX252ZWNzID4gMSkgeworCWlmIChicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfVVNJTkdfTVNJWCkgewogCQlSRUdfV1IoYnAsIEJOWDJfSENfTVNJWF9CSVRfVkVDVE9SLAogCQkgICAgICAgQk5YMl9IQ19NU0lYX0JJVF9WRUNUT1JfVkFMKTsKIApAQCAtNTE2Nyw5ICs1MTUyLDggQEAKIAlyaW5nX3Byb2QgPSBwcm9kID0gcnhyLT5yeF9wZ19wcm9kOwogCWZvciAoaSA9IDA7IGkgPCBicC0+cnhfcGdfcmluZ19zaXplOyBpKyspIHsKIAkJaWYgKGJueDJfYWxsb2NfcnhfcGFnZShicCwgcnhyLCByaW5nX3Byb2QpIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiBpbml0J2VkIHJ4IHBhZ2UgcmluZyAlZCAiCi0JCQkJCQkid2l0aCAlZC8lZCBwYWdlcyBvbmx5XG4iLAotCQkJICAgICAgIGJwLT5kZXYtPm5hbWUsIHJpbmdfbnVtLCBpLCBicC0+cnhfcGdfcmluZ19zaXplKTsKKwkJCW5ldGRldl93YXJuKGJwLT5kZXYsICJpbml0J2VkIHJ4IHBhZ2UgcmluZyAlZCB3aXRoICVkLyVkIHBhZ2VzIG9ubHlcbiIsCisJCQkJICAgIHJpbmdfbnVtLCBpLCBicC0+cnhfcGdfcmluZ19zaXplKTsKIAkJCWJyZWFrOwogCQl9CiAJCXByb2QgPSBORVhUX1JYX0JEKHByb2QpOwpAQCAtNTE4MCw5ICs1MTY0LDggQEAKIAlyaW5nX3Byb2QgPSBwcm9kID0gcnhyLT5yeF9wcm9kOwogCWZvciAoaSA9IDA7IGkgPCBicC0+cnhfcmluZ19zaXplOyBpKyspIHsKIAkJaWYgKGJueDJfYWxsb2Nfcnhfc2tiKGJwLCByeHIsIHJpbmdfcHJvZCkgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IGluaXQnZWQgcnggcmluZyAlZCB3aXRoICIKLQkJCQkJCSIlZC8lZCBza2JzIG9ubHlcbiIsCi0JCQkgICAgICAgYnAtPmRldi0+bmFtZSwgcmluZ19udW0sIGksIGJwLT5yeF9yaW5nX3NpemUpOworCQkJbmV0ZGV2X3dhcm4oYnAtPmRldiwgImluaXQnZWQgcnggcmluZyAlZCB3aXRoICVkLyVkIHNrYnMgb25seVxuIiwKKwkJCQkgICAgcmluZ19udW0sIGksIGJwLT5yeF9yaW5nX3NpemUpOwogCQkJYnJlYWs7CiAJCX0KIAkJcHJvZCA9IE5FWFRfUlhfQkQocHJvZCk7CkBAIC02MTQ1LDYgKzYxMjgsMTAgQEAKIAlSRUdfV1IoYnAsIEJOWDJfUENJX01TSVhfVEJMX09GRl9CSVIsIEJOWDJfUENJX0dSQ19XSU5ET1cyX0JBU0UpOwogCVJFR19XUihicCwgQk5YMl9QQ0lfTVNJWF9QQkFfT0ZGX0JJVCwgQk5YMl9QQ0lfR1JDX1dJTkRPVzNfQkFTRSk7CiAKKwkvKiAgTmVlZCB0byBmbHVzaCB0aGUgcHJldmlvdXMgdGhyZWUgd3JpdGVzIHRvIGVuc3VyZSBNU0ktWAorCSAqICBpcyBzZXR1cCBwcm9wZXJseSAqLworCVJFR19SRChicCwgQk5YMl9QQ0lfTVNJWF9DT05UUk9MKTsKKwogCWZvciAoaSA9IDA7IGkgPCBCTlgyX01BWF9NU0lYX1ZFQzsgaSsrKSB7CiAJCW1zaXhfZW50W2ldLmVudHJ5ID0gaTsKIAkJbXNpeF9lbnRbaV0udmVjdG9yID0gMDsKQEAgLTYyMjcsNiArNjIxNCw4IEBACiAKIAlhdG9taWNfc2V0KCZicC0+aW50cl9zZW0sIDApOwogCisJbWVtc2V0KGJwLT50ZW1wX3N0YXRzX2JsaywgMCwgc2l6ZW9mKHN0cnVjdCBzdGF0aXN0aWNzX2Jsb2NrKSk7CisKIAlibngyX2VuYWJsZV9pbnQoYnApOwogCiAJaWYgKGJwLT5mbGFncyAmIEJOWDJfRkxBR19VU0lOR19NU0kpIHsKQEAgLTYyMzQsMTEgKzYyMjMsNyBAQAogCQkgKiBJZiBNU0kgdGVzdCBmYWlscywgZ28gYmFjayB0byBJTlR4IG1vZGUKIAkJICovCiAJCWlmIChibngyX3Rlc3RfaW50cihicCkgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiBObyBpbnRlcnJ1cHQgd2FzIGdlbmVyYXRlZCIKLQkJCSAgICAgICAiIHVzaW5nIE1TSSwgc3dpdGNoaW5nIHRvIElOVHggbW9kZS4gUGxlYXNlIgotCQkJICAgICAgICIgcmVwb3J0IHRoaXMgZmFpbHVyZSB0byB0aGUgUENJIG1haW50YWluZXIiCi0JCQkgICAgICAgIiBhbmQgaW5jbHVkZSBzeXN0ZW0gY2hpcHNldCBpbmZvcm1hdGlvbi5cbiIsCi0JCQkgICAgICAgYnAtPmRldi0+bmFtZSk7CisJCQluZXRkZXZfd2FybihicC0+ZGV2LCAiTm8gaW50ZXJydXB0IHdhcyBnZW5lcmF0ZWQgdXNpbmcgTVNJLCBzd2l0Y2hpbmcgdG8gSU5UeCBtb2RlLiBQbGVhc2UgcmVwb3J0IHRoaXMgZmFpbHVyZSB0byB0aGUgUENJIG1haW50YWluZXIgYW5kIGluY2x1ZGUgc3lzdGVtIGNoaXBzZXQgaW5mb3JtYXRpb24uXG4iKTsKIAogCQkJYm54Ml9kaXNhYmxlX2ludChicCk7CiAJCQlibngyX2ZyZWVfaXJxKGJwKTsKQEAgLTYyNTgsOSArNjI0Myw5IEBACiAJCX0KIAl9CiAJaWYgKGJwLT5mbGFncyAmIEJOWDJfRkxBR19VU0lOR19NU0kpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogdXNpbmcgTVNJXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfaW5mbyhkZXYsICJ1c2luZyBNU0lcbiIpOwogCWVsc2UgaWYgKGJwLT5mbGFncyAmIEJOWDJfRkxBR19VU0lOR19NU0lYKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IHVzaW5nIE1TSVhcbiIsIGRldi0+bmFtZSk7CisJCW5ldGRldl9pbmZvKGRldiwgInVzaW5nIE1TSVhcbiIpOwogCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhkZXYpOwogCkBAIC02Mjk5LDIwICs2Mjg0LDE4IEBACiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGJwLT5kZXY7CiAKLQlwcmludGsoS0VSTl9FUlIgUEZYICIlcyBERUJVRzogaW50cl9zZW1bJXhdXG4iLCBkZXYtPm5hbWUsCi0JCWF0b21pY19yZWFkKCZicC0+aW50cl9zZW0pKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICIlcyBERUJVRzogRU1BQ19UWF9TVEFUVVNbJTA4eF0gIgotCQkJICAgICJSUE1fTUdNVF9QS1RfQ1RSTFslMDh4XVxuIiwgZGV2LT5uYW1lLAotCQlSRUdfUkQoYnAsIEJOWDJfRU1BQ19UWF9TVEFUVVMpLAotCQlSRUdfUkQoYnAsIEJOWDJfUlBNX01HTVRfUEtUX0NUUkwpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICIlcyBERUJVRzogTUNQX1NUQVRFX1AwWyUwOHhdIE1DUF9TVEFURV9QMVslMDh4XVxuIiwKLQkJZGV2LT5uYW1lLCBibngyX3JlZ19yZF9pbmQoYnAsIEJOWDJfTUNQX1NUQVRFX1AwKSwKLQkJYm54Ml9yZWdfcmRfaW5kKGJwLCBCTlgyX01DUF9TVEFURV9QMSkpOwotCXByaW50ayhLRVJOX0VSUiBQRlggIiVzIERFQlVHOiBIQ19TVEFUU19JTlRFUlJVUFRfU1RBVFVTWyUwOHhdXG4iLAotCQlkZXYtPm5hbWUsIFJFR19SRChicCwgQk5YMl9IQ19TVEFUU19JTlRFUlJVUFRfU1RBVFVTKSk7CisJbmV0ZGV2X2VycihkZXYsICJERUJVRzogaW50cl9zZW1bJXhdXG4iLCBhdG9taWNfcmVhZCgmYnAtPmludHJfc2VtKSk7CisJbmV0ZGV2X2VycihkZXYsICJERUJVRzogRU1BQ19UWF9TVEFUVVNbJTA4eF0gUlBNX01HTVRfUEtUX0NUUkxbJTA4eF1cbiIsCisJCSAgIFJFR19SRChicCwgQk5YMl9FTUFDX1RYX1NUQVRVUyksCisJCSAgIFJFR19SRChicCwgQk5YMl9SUE1fTUdNVF9QS1RfQ1RSTCkpOworCW5ldGRldl9lcnIoZGV2LCAiREVCVUc6IE1DUF9TVEFURV9QMFslMDh4XSBNQ1BfU1RBVEVfUDFbJTA4eF1cbiIsCisJCSAgIGJueDJfcmVnX3JkX2luZChicCwgQk5YMl9NQ1BfU1RBVEVfUDApLAorCQkgICBibngyX3JlZ19yZF9pbmQoYnAsIEJOWDJfTUNQX1NUQVRFX1AxKSk7CisJbmV0ZGV2X2VycihkZXYsICJERUJVRzogSENfU1RBVFNfSU5URVJSVVBUX1NUQVRVU1slMDh4XVxuIiwKKwkJICAgUkVHX1JEKGJwLCBCTlgyX0hDX1NUQVRTX0lOVEVSUlVQVF9TVEFUVVMpKTsKIAlpZiAoYnAtPmZsYWdzICYgQk5YMl9GTEFHX1VTSU5HX01TSVgpCi0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzIERFQlVHOiBQQkFbJTA4eF1cbiIsIGRldi0+bmFtZSwKLQkJCVJFR19SRChicCwgQk5YMl9QQ0lfR1JDX1dJTkRPVzNfQkFTRSkpOworCQluZXRkZXZfZXJyKGRldiwgIkRFQlVHOiBQQkFbJTA4eF1cbiIsCisJCQkgICBSRUdfUkQoYnAsIEJOWDJfUENJX0dSQ19XSU5ET1czX0JBU0UpKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTYzNzYsOCArNjM1OSw3IEBACiAJaWYgKHVubGlrZWx5KGJueDJfdHhfYXZhaWwoYnAsIHR4cikgPAogCSAgICAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpKSkgewogCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBCVUchIFR4IHJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIiwKLQkJCWRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiQlVHISBUeCByaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIpOwogCiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CkBAIC02NTM4LDkyICs2NTIwLDEyMSBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIEdFVF9ORVRfU1RBVFM2NChjdHIpCQkJCQlcCitzdGF0aWMgdm9pZAorYm54Ml9zYXZlX3N0YXRzKHN0cnVjdCBibngyICpicCkKK3sKKwl1MzIgKmh3X3N0YXRzID0gKHUzMiAqKSBicC0+c3RhdHNfYmxrOworCXUzMiAqdGVtcF9zdGF0cyA9ICh1MzIgKikgYnAtPnRlbXBfc3RhdHNfYmxrOworCWludCBpOworCisJLyogVGhlIDFzdCAxMCBjb3VudGVycyBhcmUgNjQtYml0IGNvdW50ZXJzICovCisJZm9yIChpID0gMDsgaSA8IDIwOyBpICs9IDIpIHsKKwkJdTMyIGhpOworCQl1NjQgbG87CisKKwkJaGkgPSB0ZW1wX3N0YXRzW2ldICsgaHdfc3RhdHNbaV07CisJCWxvID0gKHU2NCkgdGVtcF9zdGF0c1tpICsgMV0gKyAodTY0KSBod19zdGF0c1tpICsgMV07CisJCWlmIChsbyA+IDB4ZmZmZmZmZmYpCisJCQloaSsrOworCQl0ZW1wX3N0YXRzW2ldID0gaGk7CisJCXRlbXBfc3RhdHNbaSArIDFdID0gbG8gJiAweGZmZmZmZmZmOworCX0KKworCWZvciAoIDsgaSA8IHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19ibG9jaykgLyA0OyBpKyspCisJCXRlbXBfc3RhdHNbaV0gKz0gaHdfc3RhdHNbaV07Cit9CisKKyNkZWZpbmUgR0VUXzY0QklUX05FVF9TVEFUUzY0KGN0cikJCQkJXAogCSh1bnNpZ25lZCBsb25nKSAoKHVuc2lnbmVkIGxvbmcpIChjdHIjI19oaSkgPDwgMzIpICsJXAogCSh1bnNpZ25lZCBsb25nKSAoY3RyIyNfbG8pCiAKLSNkZWZpbmUgR0VUX05FVF9TVEFUUzMyKGN0cikJCVwKKyNkZWZpbmUgR0VUXzY0QklUX05FVF9TVEFUUzMyKGN0cikJCQkJXAogCShjdHIjI19sbykKIAogI2lmIChCSVRTX1BFUl9MT05HID09IDY0KQotI2RlZmluZSBHRVRfTkVUX1NUQVRTCUdFVF9ORVRfU1RBVFM2NAorI2RlZmluZSBHRVRfNjRCSVRfTkVUX1NUQVRTKGN0cikJCQkJXAorCUdFVF82NEJJVF9ORVRfU1RBVFM2NChicC0+c3RhdHNfYmxrLT5jdHIpICsJCVwKKwlHRVRfNjRCSVRfTkVUX1NUQVRTNjQoYnAtPnRlbXBfc3RhdHNfYmxrLT5jdHIpCiAjZWxzZQotI2RlZmluZSBHRVRfTkVUX1NUQVRTCUdFVF9ORVRfU1RBVFMzMgorI2RlZmluZSBHRVRfNjRCSVRfTkVUX1NUQVRTKGN0cikJCQkJXAorCUdFVF82NEJJVF9ORVRfU1RBVFMzMihicC0+c3RhdHNfYmxrLT5jdHIpICsJCVwKKwlHRVRfNjRCSVRfTkVUX1NUQVRTMzIoYnAtPnRlbXBfc3RhdHNfYmxrLT5jdHIpCiAjZW5kaWYKIAorI2RlZmluZSBHRVRfMzJCSVRfTkVUX1NUQVRTKGN0cikJCQkJXAorCSh1bnNpZ25lZCBsb25nKSAoYnAtPnN0YXRzX2Jsay0+Y3RyICsJCQlcCisJCQkgYnAtPnRlbXBfc3RhdHNfYmxrLT5jdHIpCisKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqCiBibngyX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBibngyICpicCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfYmxvY2sgKnN0YXRzX2JsayA9IGJwLT5zdGF0c19ibGs7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5ldF9zdGF0cyA9ICZkZXYtPnN0YXRzOwogCiAJaWYgKGJwLT5zdGF0c19ibGsgPT0gTlVMTCkgewogCQlyZXR1cm4gbmV0X3N0YXRzOwogCX0KIAluZXRfc3RhdHMtPnJ4X3BhY2tldHMgPQotCQlHRVRfTkVUX1NUQVRTKHN0YXRzX2Jsay0+c3RhdF9JZkhDSW5VY2FzdFBrdHMpICsKLQkJR0VUX05FVF9TVEFUUyhzdGF0c19ibGstPnN0YXRfSWZIQ0luTXVsdGljYXN0UGt0cykgKwotCQlHRVRfTkVUX1NUQVRTKHN0YXRzX2Jsay0+c3RhdF9JZkhDSW5Ccm9hZGNhc3RQa3RzKTsKKwkJR0VUXzY0QklUX05FVF9TVEFUUyhzdGF0X0lmSENJblVjYXN0UGt0cykgKworCQlHRVRfNjRCSVRfTkVUX1NUQVRTKHN0YXRfSWZIQ0luTXVsdGljYXN0UGt0cykgKworCQlHRVRfNjRCSVRfTkVUX1NUQVRTKHN0YXRfSWZIQ0luQnJvYWRjYXN0UGt0cyk7CiAKIAluZXRfc3RhdHMtPnR4X3BhY2tldHMgPQotCQlHRVRfTkVUX1NUQVRTKHN0YXRzX2Jsay0+c3RhdF9JZkhDT3V0VWNhc3RQa3RzKSArCi0JCUdFVF9ORVRfU1RBVFMoc3RhdHNfYmxrLT5zdGF0X0lmSENPdXRNdWx0aWNhc3RQa3RzKSArCi0JCUdFVF9ORVRfU1RBVFMoc3RhdHNfYmxrLT5zdGF0X0lmSENPdXRCcm9hZGNhc3RQa3RzKTsKKwkJR0VUXzY0QklUX05FVF9TVEFUUyhzdGF0X0lmSENPdXRVY2FzdFBrdHMpICsKKwkJR0VUXzY0QklUX05FVF9TVEFUUyhzdGF0X0lmSENPdXRNdWx0aWNhc3RQa3RzKSArCisJCUdFVF82NEJJVF9ORVRfU1RBVFMoc3RhdF9JZkhDT3V0QnJvYWRjYXN0UGt0cyk7CiAKIAluZXRfc3RhdHMtPnJ4X2J5dGVzID0KLQkJR0VUX05FVF9TVEFUUyhzdGF0c19ibGstPnN0YXRfSWZIQ0luT2N0ZXRzKTsKKwkJR0VUXzY0QklUX05FVF9TVEFUUyhzdGF0X0lmSENJbk9jdGV0cyk7CiAKIAluZXRfc3RhdHMtPnR4X2J5dGVzID0KLQkJR0VUX05FVF9TVEFUUyhzdGF0c19ibGstPnN0YXRfSWZIQ091dE9jdGV0cyk7CisJCUdFVF82NEJJVF9ORVRfU1RBVFMoc3RhdF9JZkhDT3V0T2N0ZXRzKTsKIAogCW5ldF9zdGF0cy0+bXVsdGljYXN0ID0KLQkJR0VUX05FVF9TVEFUUyhzdGF0c19ibGstPnN0YXRfSWZIQ091dE11bHRpY2FzdFBrdHMpOworCQlHRVRfNjRCSVRfTkVUX1NUQVRTKHN0YXRfSWZIQ091dE11bHRpY2FzdFBrdHMpOwogCiAJbmV0X3N0YXRzLT5jb2xsaXNpb25zID0KLQkJKHVuc2lnbmVkIGxvbmcpIHN0YXRzX2Jsay0+c3RhdF9FdGhlclN0YXRzQ29sbGlzaW9uczsKKwkJR0VUXzMyQklUX05FVF9TVEFUUyhzdGF0X0V0aGVyU3RhdHNDb2xsaXNpb25zKTsKIAogCW5ldF9zdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyA9Ci0JCSh1bnNpZ25lZCBsb25nKSAoc3RhdHNfYmxrLT5zdGF0X0V0aGVyU3RhdHNVbmRlcnNpemVQa3RzICsKLQkJc3RhdHNfYmxrLT5zdGF0X0V0aGVyU3RhdHNPdmVycnNpemVQa3RzKTsKKwkJR0VUXzMyQklUX05FVF9TVEFUUyhzdGF0X0V0aGVyU3RhdHNVbmRlcnNpemVQa3RzKSArCisJCUdFVF8zMkJJVF9ORVRfU1RBVFMoc3RhdF9FdGhlclN0YXRzT3ZlcnJzaXplUGt0cyk7CiAKIAluZXRfc3RhdHMtPnJ4X292ZXJfZXJyb3JzID0KLQkJKHVuc2lnbmVkIGxvbmcpIChzdGF0c19ibGstPnN0YXRfSWZJbkZUUURpc2NhcmRzICsKLQkJc3RhdHNfYmxrLT5zdGF0X0lmSW5NQlVGRGlzY2FyZHMpOworCQlHRVRfMzJCSVRfTkVUX1NUQVRTKHN0YXRfSWZJbkZUUURpc2NhcmRzKSArCisJCUdFVF8zMkJJVF9ORVRfU1RBVFMoc3RhdF9JZkluTUJVRkRpc2NhcmRzKTsKIAogCW5ldF9zdGF0cy0+cnhfZnJhbWVfZXJyb3JzID0KLQkJKHVuc2lnbmVkIGxvbmcpIHN0YXRzX2Jsay0+c3RhdF9Eb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnM7CisJCUdFVF8zMkJJVF9ORVRfU1RBVFMoc3RhdF9Eb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnMpOwogCiAJbmV0X3N0YXRzLT5yeF9jcmNfZXJyb3JzID0KLQkJKHVuc2lnbmVkIGxvbmcpIHN0YXRzX2Jsay0+c3RhdF9Eb3QzU3RhdHNGQ1NFcnJvcnM7CisJCUdFVF8zMkJJVF9ORVRfU1RBVFMoc3RhdF9Eb3QzU3RhdHNGQ1NFcnJvcnMpOwogCiAJbmV0X3N0YXRzLT5yeF9lcnJvcnMgPSBuZXRfc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMgKwogCQluZXRfc3RhdHMtPnJ4X292ZXJfZXJyb3JzICsgbmV0X3N0YXRzLT5yeF9mcmFtZV9lcnJvcnMgKwogCQluZXRfc3RhdHMtPnJ4X2NyY19lcnJvcnM7CiAKIAluZXRfc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzID0KLSAgICAJCSh1bnNpZ25lZCBsb25nKSAoc3RhdHNfYmxrLT5zdGF0X0RvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnMgKwotCQlzdGF0c19ibGstPnN0YXRfRG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMpOworCQlHRVRfMzJCSVRfTkVUX1NUQVRTKHN0YXRfRG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9ucykgKworCQlHRVRfMzJCSVRfTkVUX1NUQVRTKHN0YXRfRG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMpOwogCiAJaWYgKChDSElQX05VTShicCkgPT0gQ0hJUF9OVU1fNTcwNikgfHwKIAkgICAgKENISVBfSUQoYnApID09IENISVBfSURfNTcwOF9BMCkpCiAJCW5ldF9zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMgPSAwOwogCWVsc2UgewogCQluZXRfc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzID0KLQkJCSh1bnNpZ25lZCBsb25nKQotCQkJc3RhdHNfYmxrLT5zdGF0X0RvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9yczsKKwkJCUdFVF8zMkJJVF9ORVRfU1RBVFMoc3RhdF9Eb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnMpOwogCX0KIAogCW5ldF9zdGF0cy0+dHhfZXJyb3JzID0KLSAgICAJCSh1bnNpZ25lZCBsb25nKQotCQlzdGF0c19ibGstPnN0YXRfZW1hY190eF9zdGF0X2RvdDNzdGF0c2ludGVybmFsbWFjdHJhbnNtaXRlcnJvcnMKLQkJKworCQlHRVRfMzJCSVRfTkVUX1NUQVRTKHN0YXRfZW1hY190eF9zdGF0X2RvdDNzdGF0c2ludGVybmFsbWFjdHJhbnNtaXRlcnJvcnMpICsKIAkJbmV0X3N0YXRzLT50eF9hYm9ydGVkX2Vycm9ycyArCiAJCW5ldF9zdGF0cy0+dHhfY2Fycmllcl9lcnJvcnM7CiAKIAluZXRfc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgPQotCQkodW5zaWduZWQgbG9uZykgKHN0YXRzX2Jsay0+c3RhdF9JZkluRlRRRGlzY2FyZHMgKwotCQlzdGF0c19ibGstPnN0YXRfSWZJbk1CVUZEaXNjYXJkcyArIHN0YXRzX2Jsay0+c3RhdF9Gd1J4RHJvcCk7CisJCUdFVF8zMkJJVF9ORVRfU1RBVFMoc3RhdF9JZkluRlRRRGlzY2FyZHMpICsKKwkJR0VUXzMyQklUX05FVF9TVEFUUyhzdGF0X0lmSW5NQlVGRGlzY2FyZHMpICsKKwkJR0VUXzMyQklUX05FVF9TVEFUUyhzdGF0X0Z3UnhEcm9wKTsKIAogCXJldHVybiBuZXRfc3RhdHM7CiB9CkBAIC02NzE3LDMyICs2NzI4LDE1IEBACiAJaWYgKGNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgewogCQlhdXRvbmVnIHw9IEFVVE9ORUdfU1BFRUQ7CiAKLQkJY21kLT5hZHZlcnRpc2luZyAmPSBFVEhUT09MX0FMTF9DT1BQRVJfU1BFRUQ7Ci0KLQkJLyogYWxsb3cgYWR2ZXJ0aXNpbmcgMSBzcGVlZCAqLwotCQlpZiAoKGNtZC0+YWR2ZXJ0aXNpbmcgPT0gQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYpIHx8Ci0JCQkoY21kLT5hZHZlcnRpc2luZyA9PSBBRFZFUlRJU0VEXzEwYmFzZVRfRnVsbCkgfHwKLQkJCShjbWQtPmFkdmVydGlzaW5nID09IEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZikgfHwKLQkJCShjbWQtPmFkdmVydGlzaW5nID09IEFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCkpIHsKLQotCQkJaWYgKGNtZC0+cG9ydCA9PSBQT1JUX0ZJQlJFKQotCQkJCWdvdG8gZXJyX291dF91bmxvY2s7Ci0KLQkJCWFkdmVydGlzaW5nID0gY21kLT5hZHZlcnRpc2luZzsKLQotCQl9IGVsc2UgaWYgKGNtZC0+YWR2ZXJ0aXNpbmcgPT0gQURWRVJUSVNFRF8yNTAwYmFzZVhfRnVsbCkgewotCQkJaWYgKCEoYnAtPnBoeV9mbGFncyAmIEJOWDJfUEhZX0ZMQUdfMl81R19DQVBBQkxFKSB8fAotCQkJICAgIChjbWQtPnBvcnQgPT0gUE9SVF9UUCkpCi0JCQkJZ290byBlcnJfb3V0X3VubG9jazsKLQkJfSBlbHNlIGlmIChjbWQtPmFkdmVydGlzaW5nID09IEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpCi0JCQlhZHZlcnRpc2luZyA9IGNtZC0+YWR2ZXJ0aXNpbmc7Ci0JCWVsc2UgaWYgKGNtZC0+YWR2ZXJ0aXNpbmcgPT0gQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZikKLQkJCWdvdG8gZXJyX291dF91bmxvY2s7Ci0JCWVsc2UgewotCQkJaWYgKGNtZC0+cG9ydCA9PSBQT1JUX0ZJQlJFKQotCQkJCWFkdmVydGlzaW5nID0gRVRIVE9PTF9BTExfRklCUkVfU1BFRUQ7Ci0JCQllbHNlCisJCWFkdmVydGlzaW5nID0gY21kLT5hZHZlcnRpc2luZzsKKwkJaWYgKGNtZC0+cG9ydCA9PSBQT1JUX1RQKSB7CisJCQlhZHZlcnRpc2luZyAmPSBFVEhUT09MX0FMTF9DT1BQRVJfU1BFRUQ7CisJCQlpZiAoIWFkdmVydGlzaW5nKQogCQkJCWFkdmVydGlzaW5nID0gRVRIVE9PTF9BTExfQ09QUEVSX1NQRUVEOworCQl9IGVsc2UgeworCQkJYWR2ZXJ0aXNpbmcgJj0gRVRIVE9PTF9BTExfRklCUkVfU1BFRUQ7CisJCQlpZiAoIWFkdmVydGlzaW5nKQorCQkJCWFkdmVydGlzaW5nID0gRVRIVE9PTF9BTExfRklCUkVfU1BFRUQ7CiAJCX0KIAkJYWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9BdXRvbmVnOwogCX0KQEAgLTcwODMsNiArNzA3Nyw5IEBACiBibngyX2NoYW5nZV9yaW5nX3NpemUoc3RydWN0IGJueDIgKmJwLCB1MzIgcngsIHUzMiB0eCkKIHsKIAlpZiAobmV0aWZfcnVubmluZyhicC0+ZGV2KSkgeworCQkvKiBSZXNldCB3aWxsIGVyYXNlIGNoaXBzZXQgc3RhdHM7IHNhdmUgdGhlbSAqLworCQlibngyX3NhdmVfc3RhdHMoYnApOworCiAJCWJueDJfbmV0aWZfc3RvcChicCk7CiAJCWJueDJfcmVzZXRfY2hpcChicCwgQk5YMl9EUlZfTVNHX0NPREVfUkVTRVQpOwogCQlibngyX2ZyZWVfc2ticyhicCk7CkBAIC03MTA0LDYgKzcxMDEsMTMgQEAKIAkJCWRldl9jbG9zZShicC0+ZGV2KTsKIAkJCXJldHVybiByYzsKIAkJfQorI2lmZGVmIEJDTV9DTklDCisJCW11dGV4X2xvY2soJmJwLT5jbmljX2xvY2spOworCQkvKiBMZXQgY25pYyBrbm93IGFib3V0IHRoZSBuZXcgc3RhdHVzIGJsb2NrLiAqLworCQlpZiAoYnAtPmNuaWNfZXRoX2Rldi5kcnZfc3RhdGUgJiBDTklDX0RSVl9TVEFURV9SRUdEKQorCQkJYm54Ml9zZXR1cF9jbmljX2lycV9pbmZvKGJwKTsKKwkJbXV0ZXhfdW5sb2NrKCZicC0+Y25pY19sb2NrKTsKKyNlbmRpZgogCQlibngyX25ldGlmX3N0YXJ0KGJwKTsKIAl9CiAJcmV0dXJuIDA7CkBAIC03NDI3LDYgKzc0MzEsNyBAQAogCXN0cnVjdCBibngyICpicCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IGk7CiAJdTMyICpod19zdGF0cyA9ICh1MzIgKikgYnAtPnN0YXRzX2JsazsKKwl1MzIgKnRlbXBfc3RhdHMgPSAodTMyICopIGJwLT50ZW1wX3N0YXRzX2JsazsKIAl1OCAqc3RhdHNfbGVuX2FyciA9IE5VTEw7CiAKIAlpZiAoaHdfc3RhdHMgPT0gTlVMTCkgewpAQCAtNzQ0MywyMSArNzQ0OCwyNiBAQAogCQlzdGF0c19sZW5fYXJyID0gYm54Ml81NzA4X3N0YXRzX2xlbl9hcnI7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQk5YMl9OVU1fU1RBVFM7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIG9mZnNldDsKKwogCQlpZiAoc3RhdHNfbGVuX2FycltpXSA9PSAwKSB7CiAJCQkvKiBza2lwIHRoaXMgY291bnRlciAqLwogCQkJYnVmW2ldID0gMDsKIAkJCWNvbnRpbnVlOwogCQl9CisKKwkJb2Zmc2V0ID0gYm54Ml9zdGF0c19vZmZzZXRfYXJyW2ldOwogCQlpZiAoc3RhdHNfbGVuX2FycltpXSA9PSA0KSB7CiAJCQkvKiA0LWJ5dGUgY291bnRlciAqLwotCQkJYnVmW2ldID0gKHU2NCkKLQkJCQkqKGh3X3N0YXRzICsgYm54Ml9zdGF0c19vZmZzZXRfYXJyW2ldKTsKKwkJCWJ1ZltpXSA9ICh1NjQpICooaHdfc3RhdHMgKyBvZmZzZXQpICsKKwkJCQkgKih0ZW1wX3N0YXRzICsgb2Zmc2V0KTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCS8qIDgtYnl0ZSBjb3VudGVyICovCi0JCWJ1ZltpXSA9ICgoKHU2NCkgKihod19zdGF0cyArCi0JCQkJCWJueDJfc3RhdHNfb2Zmc2V0X2FycltpXSkpIDw8IDMyKSArCi0JCQkJKihod19zdGF0cyArIGJueDJfc3RhdHNfb2Zmc2V0X2FycltpXSArIDEpOworCQlidWZbaV0gPSAoKCh1NjQpICooaHdfc3RhdHMgKyBvZmZzZXQpKSA8PCAzMikgKworCQkJICooaHdfc3RhdHMgKyBvZmZzZXQgKyAxKSArCisJCQkgKCgodTY0KSAqKHRlbXBfc3RhdHMgKyBvZmZzZXQpKSA8PCAzMikgKworCQkJICoodGVtcF9zdGF0cyArIG9mZnNldCArIDEpOwogCX0KIH0KIApAQCAtNzYyNSw3ICs3NjM1LDcgQEAKIAlyZXR1cm4gKGJueDJfY2hhbmdlX3Jpbmdfc2l6ZShicCwgYnAtPnJ4X3Jpbmdfc2l6ZSwgYnAtPnR4X3Jpbmdfc2l6ZSkpOwogfQogCi0jaWYgZGVmaW5lZChIQVZFX1BPTExfQ09OVFJPTExFUikgfHwgZGVmaW5lZChDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUikKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQKIHBvbGxfYm54MihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtNzczMywxMCArNzc0Myw5IEBACiBzdGF0aWMgdm9pZCBfX2RldmluaXQKIGJueDJfcmVhZF92cGRfZndfdmVyKHN0cnVjdCBibngyICpicCkKIHsKLQlpbnQgcmMsIGksIHYwX2xlbiA9IDA7CisJaW50IHJjLCBpLCBqOwogCXU4ICpkYXRhOwotCXU4ICp2MF9zdHIgPSBOVUxMOwotCWJvb2wgbW5fbWF0Y2ggPSBmYWxzZTsKKwl1bnNpZ25lZCBpbnQgYmxvY2tfZW5kLCByb3NpemUsIGxlbjsKIAogI2RlZmluZSBCTlgyX1ZQRF9OVlJBTV9PRkZTRVQJMHgzMDAKICNkZWZpbmUgQk5YMl9WUERfTEVOCQkxMjgKQEAgLTc3NTgsNTMgKzc3NjcsNDIgQEAKIAkJZGF0YVtpICsgM10gPSBkYXRhW2kgKyBCTlgyX1ZQRF9MRU5dOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPD0gQk5YMl9WUERfTEVOIC0gMzsgKSB7Ci0JCXVuc2lnbmVkIGNoYXIgdmFsID0gZGF0YVtpXTsKLQkJdW5zaWduZWQgaW50IGJsb2NrX2VuZDsKLQotCQlpZiAodmFsID09IDB4ODIgfHwgdmFsID09IDB4OTEpIHsKLQkJCWkgPSAoaSArIDMgKyAoZGF0YVtpICsgMV0gKyAoZGF0YVtpICsgMl0gPDwgOCkpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHZhbCAhPSAweDkwKQotCQkJZ290byB2cGRfZG9uZTsKLQotCQlibG9ja19lbmQgPSAoaSArIDMgKyAoZGF0YVtpICsgMV0gKyAoZGF0YVtpICsgMl0gPDwgOCkpKTsKLQkJaSArPSAzOwotCi0JCWlmIChibG9ja19lbmQgPiBCTlgyX1ZQRF9MRU4pCi0JCQlnb3RvIHZwZF9kb25lOwotCi0JCXdoaWxlIChpIDwgKGJsb2NrX2VuZCAtIDIpKSB7Ci0JCQlpbnQgbGVuID0gZGF0YVtpICsgMl07Ci0KLQkJCWlmIChpICsgMyArIGxlbiA+IGJsb2NrX2VuZCkKLQkJCQlnb3RvIHZwZF9kb25lOwotCi0JCQlpZiAoZGF0YVtpXSA9PSAnTScgJiYgZGF0YVtpICsgMV0gPT0gJ04nKSB7Ci0JCQkJaWYgKGxlbiAhPSA0IHx8Ci0JCQkJICAgIG1lbWNtcCgmZGF0YVtpICsgM10sICIxMDI4IiwgNCkpCi0JCQkJCWdvdG8gdnBkX2RvbmU7Ci0JCQkJbW5fbWF0Y2ggPSB0cnVlOwotCi0JCQl9IGVsc2UgaWYgKGRhdGFbaV0gPT0gJ1YnICYmIGRhdGFbaSArIDFdID09ICcwJykgewotCQkJCWlmIChsZW4gPiBCTlgyX01BWF9WRVJfU0xFTikKLQkJCQkJZ290byB2cGRfZG9uZTsKLQotCQkJCXYwX2xlbiA9IGxlbjsKLQkJCQl2MF9zdHIgPSAmZGF0YVtpICsgM107Ci0JCQl9Ci0JCQlpICs9IDMgKyBsZW47Ci0KLQkJCWlmIChtbl9tYXRjaCAmJiB2MF9zdHIpIHsKLQkJCQltZW1jcHkoYnAtPmZ3X3ZlcnNpb24sIHYwX3N0ciwgdjBfbGVuKTsKLQkJCQlicC0+ZndfdmVyc2lvblt2MF9sZW5dID0gJyAnOwotCQkJCWdvdG8gdnBkX2RvbmU7Ci0JCQl9Ci0JCX0KKwlpID0gcGNpX3ZwZF9maW5kX3RhZyhkYXRhLCAwLCBCTlgyX1ZQRF9MRU4sIFBDSV9WUERfTFJEVF9ST19EQVRBKTsKKwlpZiAoaSA8IDApCiAJCWdvdG8gdnBkX2RvbmU7Ci0JfQorCisJcm9zaXplID0gcGNpX3ZwZF9scmR0X3NpemUoJmRhdGFbaV0pOworCWkgKz0gUENJX1ZQRF9MUkRUX1RBR19TSVpFOworCWJsb2NrX2VuZCA9IGkgKyByb3NpemU7CisKKwlpZiAoYmxvY2tfZW5kID4gQk5YMl9WUERfTEVOKQorCQlnb3RvIHZwZF9kb25lOworCisJaiA9IHBjaV92cGRfZmluZF9pbmZvX2tleXdvcmQoZGF0YSwgaSwgcm9zaXplLAorCQkJCSAgICAgIFBDSV9WUERfUk9fS0VZV09SRF9NRlJfSUQpOworCWlmIChqIDwgMCkKKwkJZ290byB2cGRfZG9uZTsKKworCWxlbiA9IHBjaV92cGRfaW5mb19maWVsZF9zaXplKCZkYXRhW2pdKTsKKworCWogKz0gUENJX1ZQRF9JTkZPX0ZMRF9IRFJfU0laRTsKKwlpZiAoaiArIGxlbiA+IGJsb2NrX2VuZCB8fCBsZW4gIT0gNCB8fAorCSAgICBtZW1jbXAoJmRhdGFbal0sICIxMDI4IiwgNCkpCisJCWdvdG8gdnBkX2RvbmU7CisKKwlqID0gcGNpX3ZwZF9maW5kX2luZm9fa2V5d29yZChkYXRhLCBpLCByb3NpemUsCisJCQkJICAgICAgUENJX1ZQRF9ST19LRVlXT1JEX1ZFTkRPUjApOworCWlmIChqIDwgMCkKKwkJZ290byB2cGRfZG9uZTsKKworCWxlbiA9IHBjaV92cGRfaW5mb19maWVsZF9zaXplKCZkYXRhW2pdKTsKKworCWogKz0gUENJX1ZQRF9JTkZPX0ZMRF9IRFJfU0laRTsKKwlpZiAoaiArIGxlbiA+IGJsb2NrX2VuZCB8fCBsZW4gPiBCTlgyX01BWF9WRVJfU0xFTikKKwkJZ290byB2cGRfZG9uZTsKKworCW1lbWNweShicC0+ZndfdmVyc2lvbiwgJmRhdGFbal0sIGxlbik7CisJYnAtPmZ3X3ZlcnNpb25bbGVuXSA9ICcgJzsKIAogdnBkX2RvbmU6CiAJa2ZyZWUoZGF0YSk7CkBAIC03ODI1LDIzICs3ODIzLDMxIEBACiAJYnAtPmZsYWdzID0gMDsKIAlicC0+cGh5X2ZsYWdzID0gMDsKIAorCWJwLT50ZW1wX3N0YXRzX2JsayA9CisJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzdGF0aXN0aWNzX2Jsb2NrKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoYnAtPnRlbXBfc3RhdHNfYmxrID09IE5VTEwpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXQ7CisJfQorCiAJLyogZW5hYmxlIGRldmljZSAoaW5jbC4gUENJIFBNIHdha2V1cCksIGFuZCBidXMtbWFzdGVyaW5nICovCiAJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmMpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlLCBhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2UsIGFib3J0aW5nXG4iKTsKIAkJZ290byBlcnJfb3V0OwogCX0KIAogCWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAwKSAmIElPUkVTT1VSQ0VfTUVNKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkiQ2Fubm90IGZpbmQgUENJIGRldmljZSBiYXNlIGFkZHJlc3MsIGFib3J0aW5nLlxuIik7CisJCQkiQ2Fubm90IGZpbmQgUENJIGRldmljZSBiYXNlIGFkZHJlc3MsIGFib3J0aW5nXG4iKTsKIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIGVycl9vdXRfZGlzYWJsZTsKIAl9CiAKIAlyYyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJWX01PRFVMRV9OQU1FKTsKIAlpZiAocmMpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzLCBhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXMsIGFib3J0aW5nXG4iKTsKIAkJZ290byBlcnJfb3V0X2Rpc2FibGU7CiAJfQogCkBAIC03ODUxLDcgKzc4NTcsNyBAQAogCWJwLT5wbV9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfUE0pOwogCWlmIChicC0+cG1fY2FwID09IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJIkNhbm5vdCBmaW5kIHBvd2VyIG1hbmFnZW1lbnQgY2FwYWJpbGl0eSwgYWJvcnRpbmcuXG4iKTsKKwkJCSJDYW5ub3QgZmluZCBwb3dlciBtYW5hZ2VtZW50IGNhcGFiaWxpdHksIGFib3J0aW5nXG4iKTsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKIAl9CkBAIC03ODc0LDcgKzc4ODAsNyBAQAogCWJwLT5yZWd2aWV3ID0gaW9yZW1hcF9ub2NhY2hlKGRldi0+YmFzZV9hZGRyLCBtZW1fbGVuKTsKIAogCWlmICghYnAtPnJlZ3ZpZXcpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IG1hcCByZWdpc3RlciBzcGFjZSwgYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IG1hcCByZWdpc3RlciBzcGFjZSwgYWJvcnRpbmdcbiIpOwogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dF9yZWxlYXNlOwogCX0KQEAgLTc4OTQsNyArNzkwMCw3IEBACiAJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA5KSB7CiAJCWlmIChwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfRVhQKSA9PSAwKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkJIkNhbm5vdCBmaW5kIFBDSUUgY2FwYWJpbGl0eSwgYWJvcnRpbmcuXG4iKTsKKwkJCQkiQ2Fubm90IGZpbmQgUENJRSBjYXBhYmlsaXR5LCBhYm9ydGluZ1xuIik7CiAJCQlyYyA9IC1FSU87CiAJCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAJCX0KQEAgLTc5MDUsNyArNzkxMSw3IEBACiAJCWJwLT5wY2l4X2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9QQ0lYKTsKIAkJaWYgKGJwLT5wY2l4X2NhcCA9PSAwKSB7CiAJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkJIkNhbm5vdCBmaW5kIFBDSVggY2FwYWJpbGl0eSwgYWJvcnRpbmcuXG4iKTsKKwkJCQkiQ2Fubm90IGZpbmQgUENJWCBjYXBhYmlsaXR5LCBhYm9ydGluZ1xuIik7CiAJCQlyYyA9IC1FSU87CiAJCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAJCX0KQEAgLTc5MzQsMTEgKzc5NDAsMTEgQEAKIAkJcmMgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgcGVyc2lzdF9kbWFfbWFzayk7CiAJCWlmIChyYykgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJCSJwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2sgZmFpbGVkLCBhYm9ydGluZy5cbiIpOworCQkJCSJwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2sgZmFpbGVkLCBhYm9ydGluZ1xuIik7CiAJCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAJCX0KIAl9IGVsc2UgaWYgKChyYyA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpICE9IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgRE1BLCBhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBETUEsIGFib3J0aW5nXG4iKTsKIAkJZ290byBlcnJfb3V0X3VubWFwOwogCX0KIApAQCAtNzk1NSw3ICs3OTYxLDcgQEAKIAkJIShicC0+ZmxhZ3MgJiBCTlgyX0ZMQUdfUENJWCkpIHsKIAogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCi0JCQkiNTcwNiBBMSBjYW4gb25seSBiZSB1c2VkIGluIGEgUENJWCBidXMsIGFib3J0aW5nLlxuIik7CisJCQkiNTcwNiBBMSBjYW4gb25seSBiZSB1c2VkIGluIGEgUENJWCBidXMsIGFib3J0aW5nXG4iKTsKIAkJZ290byBlcnJfb3V0X3VubWFwOwogCX0KIApAQCAtNzk3OCw3ICs3OTg0LDcgQEAKIAogCWlmICgocmVnICYgQk5YMl9ERVZfSU5GT19TSUdOQVRVUkVfTUFHSUNfTUFTSykgIT0KIAkgICAgQk5YMl9ERVZfSU5GT19TSUdOQVRVUkVfTUFHSUMpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmlybXdhcmUgbm90IHJ1bm5pbmcsIGFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZpcm13YXJlIG5vdCBydW5uaW5nLCBhYm9ydGluZ1xuIik7CiAJCXJjID0gLUVOT0RFVjsKIAkJZ290byBlcnJfb3V0X3VubWFwOwogCX0KQEAgLTgyMjksNyArODIzNSw3IEBACiAjaWZkZWYgQkNNX1ZMQU4KIAkubmRvX3ZsYW5fcnhfcmVnaXN0ZXIJPSBibngyX3ZsYW5fcnhfcmVnaXN0ZXIsCiAjZW5kaWYKLSNpZiBkZWZpbmVkKEhBVkVfUE9MTF9DT05UUk9MTEVSKSB8fCBkZWZpbmVkKENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSKQorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBwb2xsX2JueDIsCiAjZW5kaWYKIH07CkBAIC04MjUxLDcgKzgyNTcsNyBAQAogCWNoYXIgc3RyWzQwXTsKIAogCWlmICh2ZXJzaW9uX3ByaW50ZWQrKyA9PSAwKQotCQlwcmludGsoS0VSTl9JTkZPICIlcyIsIHZlcnNpb24pOworCQlwcl9pbmZvKCIlcyIsIHZlcnNpb24pOwogCiAJLyogZGV2IHplcm9lZCBpbiBpbml0X2V0aGVyZGV2ICovCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKCpicCksIFRYX01BWF9SSU5HUyk7CkBAIC04MzAxLDE1ICs4MzA3LDEzIEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzICglYyVkKSAlcyBmb3VuZCBhdCBtZW0gJWx4LCAiCi0JCSJJUlEgJWQsIG5vZGUgYWRkciAlcE1cbiIsCi0JCWRldi0+bmFtZSwKLQkJYm9hcmRfaW5mb1tlbnQtPmRyaXZlcl9kYXRhXS5uYW1lLAotCQkoKENISVBfSUQoYnApICYgMHhmMDAwKSA+PiAxMikgKyAnQScsCi0JCSgoQ0hJUF9JRChicCkgJiAweDBmZjApID4+IDQpLAotCQlibngyX2J1c19zdHJpbmcoYnAsIHN0ciksCi0JCWRldi0+YmFzZV9hZGRyLAotCQlicC0+cGRldi0+aXJxLCBkZXYtPmRldl9hZGRyKTsKKwluZXRkZXZfaW5mbyhkZXYsICIlcyAoJWMlZCkgJXMgZm91bmQgYXQgbWVtICVseCwgSVJRICVkLCBub2RlIGFkZHIgJXBNXG4iLAorCQkgICAgYm9hcmRfaW5mb1tlbnQtPmRyaXZlcl9kYXRhXS5uYW1lLAorCQkgICAgKChDSElQX0lEKGJwKSAmIDB4ZjAwMCkgPj4gMTIpICsgJ0EnLAorCQkgICAgKChDSElQX0lEKGJwKSAmIDB4MGZmMCkgPj4gNCksCisJCSAgICBibngyX2J1c19zdHJpbmcoYnAsIHN0ciksCisJCSAgICBkZXYtPmJhc2VfYWRkciwKKwkJICAgIGJwLT5wZGV2LT5pcnEsIGRldi0+ZGV2X2FkZHIpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTgzNDYsNiArODM1MCw4IEBACiAJaWYgKGJwLT5yZWd2aWV3KQogCQlpb3VubWFwKGJwLT5yZWd2aWV3KTsKIAorCWtmcmVlKGJwLT50ZW1wX3N0YXRzX2Jsayk7CisKIAlmcmVlX25ldGRldihkZXYpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwpAQCAtODQ0Miw3ICs4NDQ4LDcgQEAKIAlydG5sX2xvY2soKTsKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cbiIpOworCQkJIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldFxuIik7CiAJCXJ0bmxfdW5sb2NrKCk7CiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuaCBiL2RyaXZlcnMvbmV0L2JueDIuaAppbmRleCA5MzlkYzQ0Li5jZDRiMGU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmgKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5oCkBAIC0zNDksNyArMzQ5LDcgQEAKICNkZWZpbmUgQk5YMl9MMkNUWF9CRF9QUkVfUkVBRAkJCQkweDAwMDAwMDAwCiAjZGVmaW5lIEJOWDJfTDJDVFhfQ1RYX1NJWkUJCQkJMHgwMDAwMDAwMAogI2RlZmluZSBCTlgyX0wyQ1RYX0NUWF9UWVBFCQkJCTB4MDAwMDAwMDAKLSNkZWZpbmUgQk5YMl9MMkNUWF9MT19XQVRFUl9NQVJLX0RFRkFVTFQJCSAzMgorI2RlZmluZSBCTlgyX0wyQ1RYX0xPX1dBVEVSX01BUktfREVGQVVMVAkJIDQKICNkZWZpbmUgQk5YMl9MMkNUWF9MT19XQVRFUl9NQVJLX1NDQUxFCQkJIDQKICNkZWZpbmUgQk5YMl9MMkNUWF9MT19XQVRFUl9NQVJLX0RJUwkJCSAwCiAjZGVmaW5lIEJOWDJfTDJDVFhfSElfV0FURVJfTUFSS19TSElGVAkJCSA0CkBAIC02ODUxLDYgKzY4NTEsNyBAQAogCWRtYV9hZGRyX3QJCXN0YXR1c19ibGtfbWFwcGluZzsKIAogCXN0cnVjdCBzdGF0aXN0aWNzX2Jsb2NrCSpzdGF0c19ibGs7CisJc3RydWN0IHN0YXRpc3RpY3NfYmxvY2sJKnRlbXBfc3RhdHNfYmxrOwogCWRtYV9hZGRyX3QJCXN0YXRzX2Jsa19tYXBwaW5nOwogCiAJaW50CQkJY3R4X3BhZ2VzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnguaCBiL2RyaXZlcnMvbmV0L2JueDJ4LmgKaW5kZXggNjAyYWI4Ni4uM2M0OGE3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnguaAorKysgYi9kcml2ZXJzL25ldC9ibngyeC5oCkBAIC0xLDYgKzEsNiBAQAogLyogYm54MnguaDogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTQ0LDcgKzQ0LDYgQEAKIC8qIGVycm9yL2RlYnVnIHByaW50cyAqLwogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImJueDJ4IgotI2RlZmluZSBQRlggRFJWX01PRFVMRV9OQU1FCSI6ICIKIAogLyogZm9yIG1lc3NhZ2VzIHRoYXQgYXJlIGN1cnJlbnRseSBvZmYgKi8KICNkZWZpbmUgQk5YMlhfTVNHX09GRgkJCTAKQEAgLTU4LDMwICs1Nyw0MCBAQAogI2RlZmluZSBEUF9MRVZFTAkJCUtFUk5fTk9USUNFCS8qIHdhczogS0VSTl9ERUJVRyAqLwogCiAvKiByZWd1bGFyIGRlYnVnIHByaW50ICovCi0jZGVmaW5lIERQKF9fbWFzaywgX19mbXQsIF9fYXJncy4uLikgZG8geyBcCi0JaWYgKGJwLT5tc2dsZXZlbCAmIChfX21hc2spKSBcCi0JCXByaW50ayhEUF9MRVZFTCAiWyVzOiVkKCVzKV0iIF9fZm10LCBfX2Z1bmNfXywgX19MSU5FX18sIFwKLQkJCWJwLT5kZXYgPyAoYnAtPmRldi0+bmFtZSkgOiAiPyIsICMjX19hcmdzKTsgXAotCX0gd2hpbGUgKDApCisjZGVmaW5lIERQKF9fbWFzaywgX19mbXQsIF9fYXJncy4uLikJCQkJXAorZG8gewkJCQkJCQkJXAorCWlmIChicC0+bXNnX2VuYWJsZSAmIChfX21hc2spKQkJCQlcCisJCXByaW50ayhEUF9MRVZFTCAiWyVzOiVkKCVzKV0iIF9fZm10LAkJXAorCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fLAkJCVwKKwkJICAgICAgIGJwLT5kZXYgPyAoYnAtPmRldi0+bmFtZSkgOiAiPyIsCQlcCisJCSAgICAgICAjI19fYXJncyk7CQkJCVwKK30gd2hpbGUgKDApCiAKIC8qIGVycm9ycyBkZWJ1ZyBwcmludCAqLwotI2RlZmluZSBCTlgyWF9EQkdfRVJSKF9fZm10LCBfX2FyZ3MuLi4pIGRvIHsgXAotCWlmIChicC0+bXNnbGV2ZWwgJiBORVRJRl9NU0dfUFJPQkUpIFwKLQkJcHJpbnRrKEtFUk5fRVJSICJbJXM6JWQoJXMpXSIgX19mbXQsIF9fZnVuY19fLCBfX0xJTkVfXywgXAotCQkJYnAtPmRldiA/IChicC0+ZGV2LT5uYW1lKSA6ICI/IiwgIyNfX2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKKyNkZWZpbmUgQk5YMlhfREJHX0VSUihfX2ZtdCwgX19hcmdzLi4uKQkJCQlcCitkbyB7CQkJCQkJCQlcCisJaWYgKG5ldGlmX21zZ19wcm9iZShicCkpCQkJCVwKKwkJcHJfZXJyKCJbJXM6JWQoJXMpXSIgX19mbXQsCQkJXAorCQkgICAgICAgX19mdW5jX18sIF9fTElORV9fLAkJCVwKKwkJICAgICAgIGJwLT5kZXYgPyAoYnAtPmRldi0+bmFtZSkgOiAiPyIsCQlcCisJCSAgICAgICAjI19fYXJncyk7CQkJCVwKK30gd2hpbGUgKDApCiAKIC8qIGZvciBlcnJvcnMgKG5ldmVyIG1hc2tlZCkgKi8KLSNkZWZpbmUgQk5YMlhfRVJSKF9fZm10LCBfX2FyZ3MuLi4pIGRvIHsgXAotCXByaW50ayhLRVJOX0VSUiAiWyVzOiVkKCVzKV0iIF9fZm10LCBfX2Z1bmNfXywgX19MSU5FX18sIFwKLQkJYnAtPmRldiA/IChicC0+ZGV2LT5uYW1lKSA6ICI/IiwgIyNfX2FyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKKyNkZWZpbmUgQk5YMlhfRVJSKF9fZm10LCBfX2FyZ3MuLi4pCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlwcl9lcnIoIlslczolZCglcyldIiBfX2ZtdCwJCQkJXAorCSAgICAgICBfX2Z1bmNfXywgX19MSU5FX18sCQkJCVwKKwkgICAgICAgYnAtPmRldiA/IChicC0+ZGV2LT5uYW1lKSA6ICI/IiwJCQlcCisJICAgICAgICMjX19hcmdzKTsJCQkJCVwKK30gd2hpbGUgKDApCiAKIC8qIGJlZm9yZSB3ZSBoYXZlIGEgZGV2LT5uYW1lIHVzZSBkZXZfaW5mbygpICovCi0jZGVmaW5lIEJOWDJYX0RFVl9JTkZPKF9fZm10LCBfX2FyZ3MuLi4pIGRvIHsgXAotCWlmIChicC0+bXNnbGV2ZWwgJiBORVRJRl9NU0dfUFJPQkUpIFwKLQkJZGV2X2luZm8oJmJwLT5wZGV2LT5kZXYsIF9fZm10LCAjI19fYXJncyk7IFwKLQl9IHdoaWxlICgwKQorI2RlZmluZSBCTlgyWF9ERVZfSU5GTyhfX2ZtdCwgX19hcmdzLi4uKQkJCSBcCitkbyB7CQkJCQkJCQkgXAorCWlmIChuZXRpZl9tc2dfcHJvYmUoYnApKQkJCQkgXAorCQlkZXZfaW5mbygmYnAtPnBkZXYtPmRldiwgX19mbXQsICMjX19hcmdzKTsJIFwKK30gd2hpbGUgKDApCiAKIAogI2lmZGVmIEJOWDJYX1NUT1BfT05fRVJST1IKQEAgLTEzMCw3ICsxMzksNyBAQAogCQkJCSBvZmZzZXQsIGxlbjMyKTsgXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgVklSVF9XUl9ETUFFX0xFTihicCwgZGF0YSwgYWRkciwgbGVuMzIpIFwKKyNkZWZpbmUgVklSVF9XUl9ETUFFX0xFTihicCwgZGF0YSwgYWRkciwgbGVuMzIsIGxlMzJfc3dhcCkgXAogCWRvIHsgXAogCQltZW1jcHkoR1VOWklQX0JVRihicCksIGRhdGEsIChsZW4zMikgKiA0KTsgXAogCQlibngyeF93cml0ZV9iaWdfYnVmX3diKGJwLCBhZGRyLCBsZW4zMik7IFwKQEAgLTg4Miw3ICs4OTEsNyBAQAogCS8qIEVuZCBvZiBmaWVsZHMgdXNlZCBpbiB0aGUgcGVyZm9ybWFuY2UgY29kZSBwYXRocyAqLwogCiAJaW50CQkJcGFuaWM7Ci0JaW50CQkJbXNnbGV2ZWw7CisJaW50CQkJbXNnX2VuYWJsZTsKIAogCXUzMgkJCWZsYWdzOwogI2RlZmluZSBQQ0lYX0ZMQUcJCQkxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9md19kZWZzLmggYi9kcml2ZXJzL25ldC9ibngyeF9md19kZWZzLmgKaW5kZXggOTMxZGNhYy4uMDhkNzFiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfZndfZGVmcy5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2Z3X2RlZnMuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGJueDJ4X2Z3X2RlZnMuaDogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTQ3MSw2ICs0NzEsMTEgQEAKIAogCiAvKiBIb3N0IGNvYWxlc2NpbmcgY29uc3RhbnRzICovCisjZGVmaW5lIEhDX0lHVV9CQ19NT0RFIDAKKyNkZWZpbmUgSENfSUdVX05CQ19NT0RFIDEKKworI2RlZmluZSBIQ19SRUdVTEFSX1NFR01FTlQgMAorI2RlZmluZSBIQ19ERUZBVUxUX1NFR01FTlQgMQogCiAvKiBpbmRleCBudW1iZXJzICovCiAjZGVmaW5lIEhDX1VTVE9STV9ERUZfU0JfTlVNX0lORElDRVMgOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm54MnhfaHNpLmggYi9kcml2ZXJzL25ldC9ibngyeF9oc2kuaAppbmRleCA1MjU4NTMzLi43NjAwNjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9oc2kuaAorKysgYi9kcml2ZXJzL25ldC9ibngyeF9oc2kuaApAQCAtMSw2ICsxLDYgQEAKIC8qIGJueDJ4X2hzaS5oOiBCcm9hZGNvbSBFdmVyZXN0IG5ldHdvcmsgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNy0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTI2MSw3ICsxMjYxLDcgQEAKIAogI2RlZmluZSBCQ01fNTcxMF9GV19NQUpPUl9WRVJTSU9OCQkJNQogI2RlZmluZSBCQ01fNTcxMF9GV19NSU5PUl9WRVJTSU9OCQkJMgotI2RlZmluZSBCQ01fNTcxMF9GV19SRVZJU0lPTl9WRVJTSU9OCQkJNworI2RlZmluZSBCQ01fNTcxMF9GV19SRVZJU0lPTl9WRVJTSU9OCQkJMTMKICNkZWZpbmUgQkNNXzU3MTBfRldfRU5HSU5FRVJJTkdfVkVSU0lPTiAJCTAKICNkZWZpbmUgQkNNXzU3MTBfRldfQ09NUElMRV9GTEFHUwkJCTEKIApAQCAtMjQzMyw4ICsyNDMzLDEwIEBACiAJdTggcmFtcm9kX3R5cGU7CiAjZGVmaW5lIENPTU1PTl9SQU1ST0RfRVRIX1JYX0NRRV9UWVBFICgweDE8PDApCiAjZGVmaW5lIENPTU1PTl9SQU1ST0RfRVRIX1JYX0NRRV9UWVBFX1NISUZUIDAKLSNkZWZpbmUgQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX1JFU0VSVkVEMCAoMHg3Rjw8MSkKLSNkZWZpbmUgQ09NTU9OX1JBTVJPRF9FVEhfUlhfQ1FFX1JFU0VSVkVEMF9TSElGVCAxCisjZGVmaW5lIENPTU1PTl9SQU1ST0RfRVRIX1JYX0NRRV9FUlJPUiAoMHgxPDwxKQorI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfRVJST1JfU0hJRlQgMQorI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfUkVTRVJWRUQwICgweDNGPDwyKQorI2RlZmluZSBDT01NT05fUkFNUk9EX0VUSF9SWF9DUUVfUkVTRVJWRUQwX1NISUZUIDIKIAl1OCBjb25uX3R5cGU7CiAJX19sZTE2IHJlc2VydmVkMTsKIAlfX2xlMzIgY29ubl9hbmRfY21kX2RhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9pbml0X29wcy5oIGIvZHJpdmVycy9uZXQvYm54MnhfaW5pdF9vcHMuaAppbmRleCAzOGI5NzBhLi4yYjEzNjNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9pbml0X29wcy5oCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X2luaXRfb3BzLmgKQEAgLTIsNyArMiw3IEBACiAgKiAgICAgICAgICAgICAgIFN0YXRpYyBmdW5jdGlvbnMgbmVlZGVkIGR1cmluZyB0aGUgaW5pdGlhbGl6YXRpb24uCiAgKiAgICAgICAgICAgICAgIFRoaXMgZmlsZSBpcyAiaW5jbHVkZWQiIGluIGJueDJ4X21haW4uYy4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTEzOCwxMSArMTM4LDE2IEBACiBzdGF0aWMgdm9pZCBibngyeF9pbml0X3dyX3diKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhZGRyLCBjb25zdCB1MzIgKmRhdGEsCiAJCQkgICAgIHUzMiBsZW4pCiB7CisJY29uc3QgdTMyICpvbGRfZGF0YSA9IGRhdGE7CisKIAlkYXRhID0gKGNvbnN0IHUzMiAqKWJueDJ4X3NlbF9ibG9iKGJwLCBhZGRyLCAoY29uc3QgdTggKilkYXRhKTsKIAotCWlmIChicC0+ZG1hZV9yZWFkeSkKLQkJVklSVF9XUl9ETUFFX0xFTihicCwgZGF0YSwgYWRkciwgbGVuKTsKLQllbHNlCisJaWYgKGJwLT5kbWFlX3JlYWR5KSB7CisJCWlmIChvbGRfZGF0YSAhPSBkYXRhKQorCQkJVklSVF9XUl9ETUFFX0xFTihicCwgZGF0YSwgYWRkciwgbGVuLCAxKTsKKwkJZWxzZQorCQkJVklSVF9XUl9ETUFFX0xFTihicCwgZGF0YSwgYWRkciwgbGVuLCAwKTsKKwl9IGVsc2UKIAkJYm54MnhfaW5pdF9pbmRfd3IoYnAsIGFkZHIsIGRhdGEsIGxlbik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuYyBiL2RyaXZlcnMvbmV0L2JueDJ4X2xpbmsuYwppbmRleCBjZjU3Nzg5Li4zMmU3OWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyeF9saW5rLmMKKysrIGIvZHJpdmVycy9uZXQvYm54MnhfbGluay5jCkBAIC0xNCw2ICsxNCw4IEBACiAgKgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC0yOTg3LDExICsyOTg5LDggQEAKIAllbHNlCiAJCXZlbmRvcl9wbltTRlBfRUVQUk9NX1BBUlRfTk9fU0laRV0gPSAnXDAnOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggICJXYXJuaW5nOiAiCi0JCQkgIlVucXVhbGlmaWVkIFNGUCsgbW9kdWxlICIKLQkJCSAiZGV0ZWN0ZWQgb24gJXMsIFBvcnQgJWQgZnJvbSAlcyBwYXJ0IG51bWJlciAlc1xuIgotCQkJLCBicC0+ZGV2LT5uYW1lLCBwYXJhbXMtPnBvcnQsCi0JCQl2ZW5kb3JfbmFtZSwgdmVuZG9yX3BuKTsKKwluZXRkZXZfaW5mbyhicC0+ZGV2LCAiV2FybmluZzogVW5xdWFsaWZpZWQgU0ZQKyBtb2R1bGUgZGV0ZWN0ZWQsIFBvcnQgJWQgZnJvbSAlcyBwYXJ0IG51bWJlciAlc1xuIiwKKwkJICAgIHBhcmFtcy0+cG9ydCwgdmVuZG9yX25hbWUsIHZlbmRvcl9wbik7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKQEAgLTQ4NDYsMTYgKzQ4NDUsOCBAQAogCQkJCQkJICAgICAiIGhhcyBiZWVuIGRldGVjdGVkIG9uICIKIAkJCQkJCSAgICAgInBvcnQgJWRcbiIsCiAJCQkJCQkgcGFyYW1zLT5wb3J0KTsKLQkJCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAgIkVycm9yOiAgUG93ZXIiCi0JCQkJCQkgIiBmYXVsdCBvbiAlcyBQb3J0ICVkIGhhcyIKLQkJCQkJCSAiIGJlZW4gZGV0ZWN0ZWQgYW5kIHRoZSIKLQkJCQkJCSAiIHBvd2VyIHRvIHRoYXQgU0ZQKyBtb2R1bGUiCi0JCQkJCQkgIiBoYXMgYmVlbiByZW1vdmVkIHRvIHByZXZlbnQiCi0JCQkJCQkgIiBmYWlsdXJlIG9mIHRoZSBjYXJkLiBQbGVhc2UiCi0JCQkJCQkgIiByZW1vdmUgdGhlIFNGUCsgbW9kdWxlIGFuZCIKLQkJCQkJCSAiIHJlc3RhcnQgdGhlIHN5c3RlbSB0byBjbGVhciIKLQkJCQkJCSAiIHRoaXMgZXJyb3IuXG4iCi0JCQksIGJwLT5kZXYtPm5hbWUsIHBhcmFtcy0+cG9ydCk7CisJCQkJCW5ldGRldl9lcnIoYnAtPmRldiwgIkVycm9yOiAgUG93ZXIgZmF1bHQgb24gUG9ydCAlZCBoYXMgYmVlbiBkZXRlY3RlZCBhbmQgdGhlIHBvd2VyIHRvIHRoYXQgU0ZQKyBtb2R1bGUgaGFzIGJlZW4gcmVtb3ZlZCB0byBwcmV2ZW50IGZhaWx1cmUgb2YgdGhlIGNhcmQuIFBsZWFzZSByZW1vdmUgdGhlIFNGUCsgbW9kdWxlIGFuZCByZXN0YXJ0IHRoZSBzeXN0ZW0gdG8gY2xlYXIgdGhpcyBlcnJvci5cbiIsCisJCQkJCQkgICBwYXJhbXMtPnBvcnQpOwogCQkJCQkvKgogCQkJCQkgKiBEaXNhYmxlIGFsbCBSWF9BTEFSTXMgZXhjZXB0IGZvcgogCQkJCQkgKiBtb2RfYWJzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ibngyeF9tYWluLmMgYi9kcml2ZXJzL25ldC9ibngyeF9tYWluLmMKaW5kZXggMzA2YzJiOC4uZWQ3ODVhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm54MnhfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JueDJ4X21haW4uYwpAQCAtMSw2ICsxLDYgQEAKIC8qIGJueDJ4X21haW4uYzogQnJvYWRjb20gRXZlcmVzdCBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTU3LDggKzU3LDggQEAKICNpbmNsdWRlICJibngyeF9pbml0X29wcy5oIgogI2luY2x1ZGUgImJueDJ4X2R1bXAuaCIKIAotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNTIuMS01IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIjIwMDkvMTEvMDkiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS41Mi4xLTciCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiMjAxMC8wMi8yOCIKICNkZWZpbmUgQk5YMlhfQkNfVkVSCQkweDA0MDIwMAogCiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KQEAgLTE0MCw3ICsxNDAsNyBAQAogfTsKIAogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYm54MnhfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGJueDJ4X3BjaV90YmwpID0gewogCXsgUENJX1ZERVZJQ0UoQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfTlgyXzU3NzEwKSwgQkNNNTc3MTAgfSwKIAl7IFBDSV9WREVWSUNFKEJST0FEQ09NLCBQQ0lfREVWSUNFX0lEX05YMl81NzcxMSksIEJDTTU3NzExIH0sCiAJeyBQQ0lfVkRFVklDRShCUk9BRENPTSwgUENJX0RFVklDRV9JRF9OWDJfNTc3MTFFKSwgQkNNNTc3MTFFIH0sCkBAIC01MTQsMjQgKzUxNCwyNCBAQAogCiAJbWFyayA9IFJFR19SRChicCwgTUNQX1JFR19NQ1BSX1NDUkFUQ0ggKyAweGYxMDQpOwogCW1hcmsgPSAoKG1hcmsgKyAweDMpICYgfjB4Myk7Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiYmVnaW4gZncgZHVtcCAobWFyayAweCV4KVxuIiwgbWFyayk7CisJcHJfZXJyKCJiZWdpbiBmdyBkdW1wIChtYXJrIDB4JXgpXG4iLCBtYXJrKTsKIAotCXByaW50ayhLRVJOX0VSUiBQRlgpOworCXByX2VycigiIik7CiAJZm9yIChvZmZzZXQgPSBtYXJrIC0gMHgwODAwMDAwMDsgb2Zmc2V0IDw9IDB4RjkwMDsgb2Zmc2V0ICs9IDB4OCo0KSB7CiAJCWZvciAod29yZCA9IDA7IHdvcmQgPCA4OyB3b3JkKyspCiAJCQlkYXRhW3dvcmRdID0gaHRvbmwoUkVHX1JEKGJwLCBNQ1BfUkVHX01DUFJfU0NSQVRDSCArCiAJCQkJCQkgIG9mZnNldCArIDQqd29yZCkpOwogCQlkYXRhWzhdID0gMHgwOwotCQlwcmludGsoS0VSTl9DT05UICIlcyIsIChjaGFyICopZGF0YSk7CisJCXByX2NvbnQoIiVzIiwgKGNoYXIgKilkYXRhKTsKIAl9CiAJZm9yIChvZmZzZXQgPSAweEYxMDg7IG9mZnNldCA8PSBtYXJrIC0gMHgwODAwMDAwMDsgb2Zmc2V0ICs9IDB4OCo0KSB7CiAJCWZvciAod29yZCA9IDA7IHdvcmQgPCA4OyB3b3JkKyspCiAJCQlkYXRhW3dvcmRdID0gaHRvbmwoUkVHX1JEKGJwLCBNQ1BfUkVHX01DUFJfU0NSQVRDSCArCiAJCQkJCQkgIG9mZnNldCArIDQqd29yZCkpOwogCQlkYXRhWzhdID0gMHgwOwotCQlwcmludGsoS0VSTl9DT05UICIlcyIsIChjaGFyICopZGF0YSk7CisJCXByX2NvbnQoIiVzIiwgKGNoYXIgKilkYXRhKTsKIAl9Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiZW5kIG9mIGZ3IGR1bXBcbiIpOworCXByX2VycigiZW5kIG9mIGZ3IGR1bXBcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBibngyeF9wYW5pY19kdW1wKHN0cnVjdCBibngyeCAqYnApCkBAIC05NTcsMjEgKzk1NywzNCBAQAogCWZwLT50eF9wa3RfY29ucyA9IHN3X2NvbnM7CiAJZnAtPnR4X2JkX2NvbnMgPSBiZF9jb25zOwogCisJLyogTmVlZCB0byBtYWtlIHRoZSB0eF9iZF9jb25zIHVwZGF0ZSB2aXNpYmxlIHRvIHN0YXJ0X3htaXQoKQorCSAqIGJlZm9yZSBjaGVja2luZyBmb3IgbmV0aWZfdHhfcXVldWVfc3RvcHBlZCgpLiAgV2l0aG91dCB0aGUKKwkgKiBtZW1vcnkgYmFycmllciwgdGhlcmUgaXMgYSBzbWFsbCBwb3NzaWJpbGl0eSB0aGF0CisJICogc3RhcnRfeG1pdCgpIHdpbGwgbWlzcyBpdCBhbmQgY2F1c2UgdGhlIHF1ZXVlIHRvIGJlIHN0b3BwZWQKKwkgKiBmb3JldmVyLgorCSAqLworCXNtcF93bWIoKTsKKwogCS8qIFRCRCBuZWVkIGEgdGhyZXNoPyAqLwogCWlmICh1bmxpa2VseShuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkpKSB7Ci0KLQkJLyogTmVlZCB0byBtYWtlIHRoZSB0eF9iZF9jb25zIHVwZGF0ZSB2aXNpYmxlIHRvIHN0YXJ0X3htaXQoKQotCQkgKiBiZWZvcmUgY2hlY2tpbmcgZm9yIG5ldGlmX3R4X3F1ZXVlX3N0b3BwZWQoKS4gIFdpdGhvdXQgdGhlCi0JCSAqIG1lbW9yeSBiYXJyaWVyLCB0aGVyZSBpcyBhIHNtYWxsIHBvc3NpYmlsaXR5IHRoYXQKLQkJICogc3RhcnRfeG1pdCgpIHdpbGwgbWlzcyBpdCBhbmQgY2F1c2UgdGhlIHF1ZXVlIHRvIGJlIHN0b3BwZWQKLQkJICogZm9yZXZlci4KKwkJLyogVGFraW5nIHR4X2xvY2soKSBpcyBuZWVkZWQgdG8gcHJldmVudCByZWVuYWJsaW5nIHRoZSBxdWV1ZQorCQkgKiB3aGlsZSBpdCdzIGVtcHR5LiBUaGlzIGNvdWxkIGhhdmUgaGFwcGVuIGlmIHJ4X2FjdGlvbigpIGdldHMKKwkJICogc3VzcGVuZGVkIGluIGJueDJ4X3R4X2ludCgpIGFmdGVyIHRoZSBjb25kaXRpb24gYmVmb3JlCisJCSAqIG5ldGlmX3R4X3dha2VfcXVldWUoKSwgd2hpbGUgdHhfYWN0aW9uIChibngyeF9zdGFydF94bWl0KCkpOgorCQkgKgorCQkgKiBzdG9wcyB0aGUgcXVldWUtPnNlZXMgZnJlc2ggdHhfYmRfY29ucy0+cmVsZWFzZXMgdGhlIHF1ZXVlLT4KKwkJICogc2VuZHMgc29tZSBwYWNrZXRzIGNvbnN1bWluZyB0aGUgd2hvbGUgcXVldWUgYWdhaW4tPgorCQkgKiBzdG9wcyB0aGUgcXVldWUKIAkJICovCi0JCXNtcF9tYigpOworCisJCV9fbmV0aWZfdHhfbG9jayh0eHEsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKIAkJaWYgKChuZXRpZl90eF9xdWV1ZV9zdG9wcGVkKHR4cSkpICYmCiAJCSAgICAoYnAtPnN0YXRlID09IEJOWDJYX1NUQVRFX09QRU4pICYmCiAJCSAgICAoYm54MnhfdHhfYXZhaWwoZnApID49IE1BWF9TS0JfRlJBR1MgKyAzKSkKIAkJCW5ldGlmX3R4X3dha2VfcXVldWUodHhxKTsKKworCQlfX25ldGlmX3R4X3VubG9jayh0eHEpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIxMzYsNyArMjE0OSw3IEBACiB7CiAJaWYgKGJwLT5mbGFncyAmIE1GX0ZVTkNfRElTKSB7CiAJCW5ldGlmX2NhcnJpZXJfb2ZmKGJwLT5kZXYpOwotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlcyBOSUMgTGluayBpcyBEb3duXG4iLCBicC0+ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihicC0+ZGV2LCAiTklDIExpbmsgaXMgRG93blxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIxNDUsNyArMjE1OCw3IEBACiAKIAkJaWYgKGJwLT5zdGF0ZSA9PSBCTlgyWF9TVEFURV9PUEVOKQogCQkJbmV0aWZfY2Fycmllcl9vbihicC0+ZGV2KTsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzIE5JQyBMaW5rIGlzIFVwLCAiLCBicC0+ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2luZm8oYnAtPmRldiwgIk5JQyBMaW5rIGlzIFVwLCAiKTsKIAogCQlsaW5lX3NwZWVkID0gYnAtPmxpbmtfdmFycy5saW5lX3NwZWVkOwogCQlpZiAoSVNfRTFITUYoYnApKSB7CkBAIC0yMTU3LDI5ICsyMTcwLDI5IEBACiAJCQlpZiAodm5fbWF4X3JhdGUgPCBsaW5lX3NwZWVkKQogCQkJCWxpbmVfc3BlZWQgPSB2bl9tYXhfcmF0ZTsKIAkJfQotCQlwcmludGsoIiVkIE1icHMgIiwgbGluZV9zcGVlZCk7CisJCXByX2NvbnQoIiVkIE1icHMgIiwgbGluZV9zcGVlZCk7CiAKIAkJaWYgKGJwLT5saW5rX3ZhcnMuZHVwbGV4ID09IERVUExFWF9GVUxMKQotCQkJcHJpbnRrKCJmdWxsIGR1cGxleCIpOworCQkJcHJfY29udCgiZnVsbCBkdXBsZXgiKTsKIAkJZWxzZQotCQkJcHJpbnRrKCJoYWxmIGR1cGxleCIpOworCQkJcHJfY29udCgiaGFsZiBkdXBsZXgiKTsKIAogCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgIT0gQk5YMlhfRkxPV19DVFJMX05PTkUpIHsKIAkJCWlmIChicC0+bGlua192YXJzLmZsb3dfY3RybCAmIEJOWDJYX0ZMT1dfQ1RSTF9SWCkgewotCQkJCXByaW50aygiLCByZWNlaXZlICIpOworCQkJCXByX2NvbnQoIiwgcmVjZWl2ZSAiKTsKIAkJCQlpZiAoYnAtPmxpbmtfdmFycy5mbG93X2N0cmwgJgogCQkJCSAgICBCTlgyWF9GTE9XX0NUUkxfVFgpCi0JCQkJCXByaW50aygiJiB0cmFuc21pdCAiKTsKKwkJCQkJcHJfY29udCgiJiB0cmFuc21pdCAiKTsKIAkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRrKCIsIHRyYW5zbWl0ICIpOworCQkJCXByX2NvbnQoIiwgdHJhbnNtaXQgIik7CiAJCQl9Ci0JCQlwcmludGsoImZsb3cgY29udHJvbCBPTiIpOworCQkJcHJfY29udCgiZmxvdyBjb250cm9sIE9OIik7CiAJCX0KLQkJcHJpbnRrKCJcbiIpOworCQlwcl9jb250KCJcbiIpOwogCiAJfSBlbHNlIHsgLyogbGlua19kb3duICovCiAJCW5ldGlmX2NhcnJpZXJfb2ZmKGJwLT5kZXYpOwotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlcyBOSUMgTGluayBpcyBEb3duXG4iLCBicC0+ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihicC0+ZGV2LCAiTklDIExpbmsgaXMgRG93blxuIik7CiAJfQogfQogCkBAIC0yODk4LDEwICsyOTExLDggQEAKIAkJIGJwLT5saW5rX3BhcmFtcy5leHRfcGh5X2NvbmZpZyk7CiAKIAkvKiBsb2cgdGhlIGZhaWx1cmUgKi8KLQlwcmludGsoS0VSTl9FUlIgUEZYICJGYW4gRmFpbHVyZSBvbiBOZXR3b3JrIENvbnRyb2xsZXIgJXMgaGFzIGNhdXNlZCIKLQkgICAgICAgIiB0aGUgZHJpdmVyIHRvIHNodXRkb3duIHRoZSBjYXJkIHRvIHByZXZlbnQgcGVybWFuZW50IgotCSAgICAgICAiIGRhbWFnZS4gIFBsZWFzZSBjb250YWN0IERlbGwgU3VwcG9ydCBmb3IgYXNzaXN0YW5jZVxuIiwKLQkgICAgICAgYnAtPmRldi0+bmFtZSk7CisJbmV0ZGV2X2VycihicC0+ZGV2LCAiRmFuIEZhaWx1cmUgb24gTmV0d29yayBDb250cm9sbGVyIGhhcyBjYXVzZWQgdGhlIGRyaXZlciB0byBzaHV0ZG93biB0aGUgY2FyZCB0byBwcmV2ZW50IHBlcm1hbmVudCBkYW1hZ2UuXG4iCisJCSAgICJQbGVhc2UgY29udGFjdCBEZWxsIFN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXG4iKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGJueDJ4X2F0dG5faW50X2RlYXNzZXJ0ZWQwKHN0cnVjdCBibngyeCAqYnAsIHUzMiBhdHRuKQpAQCAtNDI5Niw3ICs0MzA3LDcgQEAKIAlibngyeF9uZXRfc3RhdHNfdXBkYXRlKGJwKTsKIAlibngyeF9kcnZfc3RhdHNfdXBkYXRlKGJwKTsKIAotCWlmIChicC0+bXNnbGV2ZWwgJiBORVRJRl9NU0dfVElNRVIpIHsKKwlpZiAobmV0aWZfbXNnX3RpbWVyKGJwKSkgewogCQlzdHJ1Y3QgYm54MnhfZmFzdHBhdGggKmZwMF9yeCA9IGJwLT5mcDsKIAkJc3RydWN0IGJueDJ4X2Zhc3RwYXRoICpmcDBfdHggPSBicC0+ZnA7CiAJCXN0cnVjdCB0c3Rvcm1fcGVyX2NsaWVudF9zdGF0cyAqb2xkX3RjbGllbnQgPQpAQCAtNDMwNiw3ICs0MzE3LDcgQEAKIAkJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5zdGF0cyA9ICZicC0+ZGV2LT5zdGF0czsKIAkJaW50IGk7CiAKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOlxuIiwgYnAtPmRldi0+bmFtZSk7CisJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgYnAtPmRldiwgIlxuIik7CiAJCXByaW50ayhLRVJOX0RFQlVHICIgIHR4IGF2YWlsICglNHgpICB0eCBoYyBpZHggKCV4KSIKIAkJCQkgICIgIHR4IHBrdCAoJWx4KVxuIiwKIAkJICAgICAgIGJueDJ4X3R4X2F2YWlsKGZwMF90eCksCkBAIC00NDY0LDcgKzQ0NzUsNyBAQAogCS8qIE1ha2Ugc3VyZSB0aGUgc3RhdGUgaGFzIGJlZW4gImNoYW5nZWQiICovCiAJc21wX3dtYigpOwogCi0JaWYgKChldmVudCAhPSBTVEFUU19FVkVOVF9VUERBVEUpIHx8IChicC0+bXNnbGV2ZWwgJiBORVRJRl9NU0dfVElNRVIpKQorCWlmICgoZXZlbnQgIT0gU1RBVFNfRVZFTlRfVVBEQVRFKSB8fCBuZXRpZl9tc2dfdGltZXIoYnApKQogCQlEUChCTlgyWF9NU0dfU1RBVFMsICJzdGF0ZSAlZCAtPiBldmVudCAlZCAtPiBzdGF0ZSAlZFxuIiwKIAkJICAgc3RhdGUsIGV2ZW50LCBicC0+c3RhdHNfc3RhdGUpOwogfQpAQCAtNTY3NCw4ICs1Njg1LDcgQEAKIAlicC0+Z3VuemlwX2J1ZiA9IE5VTEw7CiAKIGd1bnppcF9ub21lbTE6Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IENhbm5vdCBhbGxvY2F0ZSBmaXJtd2FyZSBidWZmZXIgZm9yIgotCSAgICAgICAiIHVuLWNvbXByZXNzaW9uXG4iLCBicC0+ZGV2LT5uYW1lKTsKKwluZXRkZXZfZXJyKGJwLT5kZXYsICJDYW5ub3QgYWxsb2NhdGUgZmlybXdhcmUgYnVmZmVyIGZvciB1bi1jb21wcmVzc2lvblxuIik7CiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKQEAgLTU3MjEsMTQgKzU3MzEsMTMgQEAKIAogCXJjID0gemxpYl9pbmZsYXRlKGJwLT5zdHJtLCBaX0ZJTklTSCk7CiAJaWYgKChyYyAhPSBaX09LKSAmJiAocmMgIT0gWl9TVFJFQU1fRU5EKSkKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEZpcm13YXJlIGRlY29tcHJlc3Npb24gZXJyb3I6ICVzXG4iLAotCQkgICAgICAgYnAtPmRldi0+bmFtZSwgYnAtPnN0cm0tPm1zZyk7CisJCW5ldGRldl9lcnIoYnAtPmRldiwgIkZpcm13YXJlIGRlY29tcHJlc3Npb24gZXJyb3I6ICVzXG4iLAorCQkJICAgYnAtPnN0cm0tPm1zZyk7CiAKIAlicC0+Z3VuemlwX291dGxlbiA9IChGV19CVUZfU0laRSAtIGJwLT5zdHJtLT5hdmFpbF9vdXQpOwogCWlmIChicC0+Z3VuemlwX291dGxlbiAmIDB4MykKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEZpcm13YXJlIGRlY29tcHJlc3Npb24gZXJyb3I6IgotCQkJCSAgICAiIGd1bnppcF9vdXRsZW4gKCVkKSBub3QgYWxpZ25lZFxuIiwKLQkJICAgICAgIGJwLT5kZXYtPm5hbWUsIGJwLT5ndW56aXBfb3V0bGVuKTsKKwkJbmV0ZGV2X2VycihicC0+ZGV2LCAiRmlybXdhcmUgZGVjb21wcmVzc2lvbiBlcnJvcjogZ3VuemlwX291dGxlbiAoJWQpIG5vdCBhbGlnbmVkXG4iLAorCQkJICAgYnAtPmd1bnppcF9vdXRsZW4pOwogCWJwLT5ndW56aXBfb3V0bGVuID4+PSAyOwogCiAJemxpYl9pbmZsYXRlRW5kKGJwLT5zdHJtKTsKQEAgLTYyMTMsOCArNjIyMiw4IEBACiAKIAlpZiAoc2l6ZW9mKHVuaW9uIGNkdV9jb250ZXh0KSAhPSAxMDI0KQogCQkvKiB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgYSBjb250ZXh0IGlzIDEwMjQgYnl0ZXMgKi8KLQkJcHJpbnRrKEtFUk5fQUxFUlQgUEZYICJwbGVhc2UgYWRqdXN0IHRoZSBzaXplIG9mIgotCQkgICAgICAgIiBjZHVfY29udGV4dCglbGQpXG4iLCAobG9uZylzaXplb2YodW5pb24gY2R1X2NvbnRleHQpKTsKKwkJcHJfYWxlcnQoInBsZWFzZSBhZGp1c3QgdGhlIHNpemUgb2YgY2R1X2NvbnRleHQoJWxkKVxuIiwKKwkJCSAobG9uZylzaXplb2YodW5pb24gY2R1X2NvbnRleHQpKTsKIAogCWJueDJ4X2luaXRfYmxvY2soYnAsIENEVV9CTE9DSywgQ09NTU9OX1NUQUdFKTsKIAl2YWwgPSAoNCA8PCAyNCkgKyAoMCA8PCAxMikgKyAxMDI0OwpAQCAtNjkzOCwxOSArNjk0NywyMSBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgYm54MnhfZnJlZV9pcnEoc3RydWN0IGJueDJ4ICpicCkKK3N0YXRpYyB2b2lkIGJueDJ4X2ZyZWVfaXJxKHN0cnVjdCBibngyeCAqYnAsIGJvb2wgZGlzYWJsZV9vbmx5KQogewogCWlmIChicC0+ZmxhZ3MgJiBVU0lOR19NU0lYX0ZMQUcpIHsKLQkJYm54MnhfZnJlZV9tc2l4X2lycXMoYnApOworCQlpZiAoIWRpc2FibGVfb25seSkKKwkJCWJueDJ4X2ZyZWVfbXNpeF9pcnFzKGJwKTsKIAkJcGNpX2Rpc2FibGVfbXNpeChicC0+cGRldik7CiAJCWJwLT5mbGFncyAmPSB+VVNJTkdfTVNJWF9GTEFHOwogCiAJfSBlbHNlIGlmIChicC0+ZmxhZ3MgJiBVU0lOR19NU0lfRkxBRykgewotCQlmcmVlX2lycShicC0+cGRldi0+aXJxLCBicC0+ZGV2KTsKKwkJaWYgKCFkaXNhYmxlX29ubHkpCisJCQlmcmVlX2lycShicC0+cGRldi0+aXJxLCBicC0+ZGV2KTsKIAkJcGNpX2Rpc2FibGVfbXNpKGJwLT5wZGV2KTsKIAkJYnAtPmZsYWdzICY9IH5VU0lOR19NU0lfRkxBRzsKIAotCX0gZWxzZQorCX0gZWxzZSBpZiAoIWRpc2FibGVfb25seSkKIAkJZnJlZV9pcnEoYnAtPnBkZXYtPmlycSwgYnAtPmRldik7CiB9CiAKQEAgLTcwMTgsMTEgKzcwMjksMTAgQEAKIAl9CiAKIAlpID0gQk5YMlhfTlVNX1FVRVVFUyhicCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiB1c2luZyBNU0ktWCAgSVJRczogc3AgJWQgIGZwWyVkXSAlZCIKLQkgICAgICAgIiAuLi4gZnBbJWRdICVkXG4iLAotCSAgICAgICBicC0+ZGV2LT5uYW1lLCBicC0+bXNpeF90YWJsZVswXS52ZWN0b3IsCi0JICAgICAgIDAsIGJwLT5tc2l4X3RhYmxlW29mZnNldF0udmVjdG9yLAotCSAgICAgICBpIC0gMSwgYnAtPm1zaXhfdGFibGVbb2Zmc2V0ICsgaSAtIDFdLnZlY3Rvcik7CisJbmV0ZGV2X2luZm8oYnAtPmRldiwgInVzaW5nIE1TSS1YICBJUlFzOiBzcCAlZCAgZnBbJWRdICVkIC4uLiBmcFslZF0gJWRcbiIsCisJCSAgICBicC0+bXNpeF90YWJsZVswXS52ZWN0b3IsCisJCSAgICAwLCBicC0+bXNpeF90YWJsZVtvZmZzZXRdLnZlY3RvciwKKwkJICAgIGkgLSAxLCBicC0+bXNpeF90YWJsZVtvZmZzZXQgKyBpIC0gMV0udmVjdG9yKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzQ0Myw4ICs3NDUzLDEwIEBACiAKIAlyYyA9IGJueDJ4X3NldF9udW1fcXVldWVzKGJwKTsKIAotCWlmIChibngyeF9hbGxvY19tZW0oYnApKQorCWlmIChibngyeF9hbGxvY19tZW0oYnApKSB7CisJCWJueDJ4X2ZyZWVfaXJxKGJwLCB0cnVlKTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJZm9yX2VhY2hfcXVldWUoYnAsIGkpCiAJCWJueDJ4X2ZwKGJwLCBpLCBkaXNhYmxlX3RwYSkgPQpAQCAtNzQ1OSw3ICs3NDcxLDcgQEAKIAlpZiAoYnAtPmZsYWdzICYgVVNJTkdfTVNJWF9GTEFHKSB7CiAJCXJjID0gYm54MnhfcmVxX21zaXhfaXJxcyhicCk7CiAJCWlmIChyYykgewotCQkJcGNpX2Rpc2FibGVfbXNpeChicC0+cGRldik7CisJCQlibngyeF9mcmVlX2lycShicCwgdHJ1ZSk7CiAJCQlnb3RvIGxvYWRfZXJyb3IxOwogCQl9CiAJfSBlbHNlIHsKQEAgLTc0NzEsMTQgKzc0ODMsMTMgQEAKIAkJcmMgPSBibngyeF9yZXFfaXJxKGJwKTsKIAkJaWYgKHJjKSB7CiAJCQlCTlgyWF9FUlIoIklSUSByZXF1ZXN0IGZhaWxlZCAgcmMgJWQsIGFib3J0aW5nXG4iLCByYyk7Ci0JCQlpZiAoYnAtPmZsYWdzICYgVVNJTkdfTVNJX0ZMQUcpCi0JCQkJcGNpX2Rpc2FibGVfbXNpKGJwLT5wZGV2KTsKKwkJCWJueDJ4X2ZyZWVfaXJxKGJwLCB0cnVlKTsKIAkJCWdvdG8gbG9hZF9lcnJvcjE7CiAJCX0KIAkJaWYgKGJwLT5mbGFncyAmIFVTSU5HX01TSV9GTEFHKSB7CiAJCQlicC0+ZGV2LT5pcnEgPSBicC0+cGRldi0+aXJxOwotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiB1c2luZyBNU0kgIElSUSAlZFxuIiwKLQkJCSAgICAgICBicC0+ZGV2LT5uYW1lLCBicC0+cGRldi0+aXJxKTsKKwkJCW5ldGRldl9pbmZvKGJwLT5kZXYsICJ1c2luZyBNU0kgIElSUSAlZFxuIiwKKwkJCQkgICAgYnAtPnBkZXYtPmlycSk7CiAJCX0KIAl9CiAKQEAgLTc1MjcsNiArNzUzOCw5IEBACiAJcmMgPSBibngyeF9pbml0X2h3KGJwLCBsb2FkX2NvZGUpOwogCWlmIChyYykgewogCQlCTlgyWF9FUlIoIkhXIGluaXQgZmFpbGVkLCBhYm9ydGluZ1xuIik7CisJCWJueDJ4X2Z3X2NvbW1hbmQoYnAsIERSVl9NU0dfQ09ERV9MT0FEX0RPTkUpOworCQlibngyeF9md19jb21tYW5kKGJwLCBEUlZfTVNHX0NPREVfVU5MT0FEX1JFUV9XT0xfTUNQKTsKKwkJYm54MnhfZndfY29tbWFuZChicCwgRFJWX01TR19DT0RFX1VOTE9BRF9ET05FKTsKIAkJZ290byBsb2FkX2Vycm9yMjsKIAl9CiAKQEAgLTc2NjQsNyArNzY3OCw3IEBACiAJCWJueDJ4X2ZyZWVfcnhfc2dlX3JhbmdlKGJwLCBicC0+ZnAgKyBpLCBOVU1fUlhfU0dFKTsKIGxvYWRfZXJyb3IyOgogCS8qIFJlbGVhc2UgSVJRcyAqLwotCWJueDJ4X2ZyZWVfaXJxKGJwKTsKKwlibngyeF9mcmVlX2lycShicCwgZmFsc2UpOwogbG9hZF9lcnJvcjE6CiAJYm54MnhfbmFwaV9kaXNhYmxlKGJwKTsKIAlmb3JfZWFjaF9xdWV1ZShicCwgaSkKQEAgLTc4NTUsNyArNzg2OSw3IEBACiAJYm54Mnhfc3RhdHNfaGFuZGxlKGJwLCBTVEFUU19FVkVOVF9TVE9QKTsKIAogCS8qIFJlbGVhc2UgSVJRcyAqLwotCWJueDJ4X2ZyZWVfaXJxKGJwKTsKKwlibngyeF9mcmVlX2lycShicCwgZmFsc2UpOwogCiAJLyogV2FpdCB1bnRpbCB0eCBmYXN0cGF0aCB0YXNrcyBjb21wbGV0ZSAqLwogCWZvcl9lYWNoX3F1ZXVlKGJwLCBpKSB7CkBAIC04Mjk3LDggKzgzMTEsNyBAQAogCXZhbDMgPSBTSE1FTV9SRChicCwgZGV2X2luZm8uc2hhcmVkX2h3X2NvbmZpZy5wYXJ0X251bVs4XSk7CiAJdmFsNCA9IFNITUVNX1JEKGJwLCBkZXZfaW5mby5zaGFyZWRfaHdfY29uZmlnLnBhcnRfbnVtWzEyXSk7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAicGFydCBudW1iZXIgJVgtJVgtJVgtJVhcbiIsCi0JICAgICAgIHZhbCwgdmFsMiwgdmFsMywgdmFsNCk7CisJcHJfaW5mbygicGFydCBudW1iZXIgJVgtJVgtJVgtJVhcbiIsIHZhbCwgdmFsMiwgdmFsMywgdmFsNCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBibngyeF9saW5rX3NldHRpbmdzX3N1cHBvcnRlZChzdHJ1Y3QgYm54MnggKmJwLApAQCAtODkwOSwxNyArODkyMiwxNSBAQAogCQlibngyeF91bmRpX3VubG9hZChicCk7CiAKIAlpZiAoQ0hJUF9SRVZfSVNfRlBHQShicCkpCi0JCXByaW50ayhLRVJOX0VSUiBQRlggIkZQR0EgZGV0ZWN0ZWRcbiIpOworCQlwcl9lcnIoIkZQR0EgZGV0ZWN0ZWRcbiIpOwogCiAJaWYgKEJQX05PTUNQKGJwKSAmJiAoZnVuYyA9PSAwKSkKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkgICAgICAgIk1DUCBkaXNhYmxlZCwgbXVzdCBsb2FkIGRldmljZXMgaW4gb3JkZXIhXG4iKTsKKwkJcHJfZXJyKCJNQ1AgZGlzYWJsZWQsIG11c3QgbG9hZCBkZXZpY2VzIGluIG9yZGVyIVxuIik7CiAKIAkvKiBTZXQgbXVsdGkgcXVldWUgbW9kZSAqLwogCWlmICgobXVsdGlfbW9kZSAhPSBFVEhfUlNTX01PREVfRElTQUJMRUQpICYmCiAJICAgICgoaW50X21vZGUgPT0gSU5UX01PREVfSU5UeCkgfHwgKGludF9tb2RlID09IElOVF9NT0RFX01TSSkpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJICAgICAgIk11bHRpIGRpc2FibGVkIHNpbmNlIGludF9tb2RlIHJlcXVlc3RlZCBpcyBub3QgTVNJLVhcbiIpOworCQlwcl9lcnIoIk11bHRpIGRpc2FibGVkIHNpbmNlIGludF9tb2RlIHJlcXVlc3RlZCBpcyBub3QgTVNJLVhcbiIpOwogCQltdWx0aV9tb2RlID0gRVRIX1JTU19NT0RFX0RJU0FCTEVEOwogCX0KIAlicC0+bXVsdGlfbW9kZSA9IG11bHRpX21vZGU7CkBAIC05MzQ1LDcgKzkzNTYsNyBAQAogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcmV0dXJuIGJwLT5tc2dsZXZlbDsKKwlyZXR1cm4gYnAtPm1zZ19lbmFibGU7CiB9CiAKIHN0YXRpYyB2b2lkIGJueDJ4X3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgbGV2ZWwpCkBAIC05MzUzLDcgKzkzNjQsNyBAQAogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKGNhcGFibGUoQ0FQX05FVF9BRE1JTikpCi0JCWJwLT5tc2dsZXZlbCA9IGxldmVsOworCQlicC0+bXNnX2VuYWJsZSA9IGxldmVsOwogfQogCiBzdGF0aWMgaW50IGJueDJ4X253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTk5NjIsMTIgKzk5NzMsMTQgQEAKIAogCS8qIFRQQSByZXF1aXJlcyBSeCBDU1VNIG9mZmxvYWRpbmcgKi8KIAlpZiAoKGRhdGEgJiBFVEhfRkxBR19MUk8pICYmIGJwLT5yeF9jc3VtKSB7Ci0JCWlmICghKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykpIHsKLQkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87Ci0JCQlicC0+ZmxhZ3MgfD0gVFBBX0VOQUJMRV9GTEFHOwotCQkJY2hhbmdlZCA9IDE7Ci0JCX0KLQorCQlpZiAoIWRpc2FibGVfdHBhKSB7CisJCQlpZiAoIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pKSB7CisJCQkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKKwkJCQlicC0+ZmxhZ3MgfD0gVFBBX0VOQUJMRV9GTEFHOworCQkJCWNoYW5nZWQgPSAxOworCQkJfQorCQl9IGVsc2UKKwkJCXJjID0gLUVJTlZBTDsKIAl9IGVsc2UgaWYgKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX0xSTykgewogCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0xSTzsKIAkJYnAtPmZsYWdzICY9IH5UUEFfRU5BQkxFX0ZMQUc7CkBAIC0xMDQyNSw3ICsxMDQzOCw4IEBACiAKIAljb25maWctPmhkci5sZW5ndGggPSAwOwogCWlmIChDSElQX0lTX0UxKGJwKSkKLQkJY29uZmlnLT5oZHIub2Zmc2V0ID0gKEJQX1BPUlQoYnApID8gMzIgOiAwKTsKKwkJLyogdXNlIGxhc3QgdW5pY2FzdCBlbnRyaWVzICovCisJCWNvbmZpZy0+aGRyLm9mZnNldCA9IChCUF9QT1JUKGJwKSA/IDYzIDogMzEpOwogCWVsc2UKIAkJY29uZmlnLT5oZHIub2Zmc2V0ID0gQlBfRlVOQyhicCk7CiAJY29uZmlnLT5oZHIuY2xpZW50X2lkID0gYnAtPmZwLT5jbF9pZDsKQEAgLTEwNjQ0LDcgKzEwNjU4LDcgQEAKIAkoKGJueDJ4X3N0YXRzX2FycltpXS5mbGFncyAmIFNUQVRTX0ZMQUdTX0JPVEgpID09IFNUQVRTX0ZMQUdTX1BPUlQpCiAjZGVmaW5lIElTX0ZVTkNfU1RBVChpKQkJKGJueDJ4X3N0YXRzX2FycltpXS5mbGFncyAmIFNUQVRTX0ZMQUdTX0ZVTkMpCiAjZGVmaW5lIElTX0UxSE1GX01PREVfU1RBVChicCkgXAotCQkJKElTX0UxSE1GKGJwKSAmJiAhKGJwLT5tc2dsZXZlbCAmIEJOWDJYX01TR19TVEFUUykpCisJCQkoSVNfRTFITUYoYnApICYmICEoYnAtPm1zZ19lbmFibGUgJiBCTlgyWF9NU0dfU1RBVFMpKQogCiBzdGF0aWMgaW50IGJueDJ4X2dldF9zc2V0X2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBzdHJpbmdzZXQpCiB7CkBAIC0xMTQ3MSw3ICsxMTQ4NSw4IEBACiAJCXJ4X21vZGUgPSBCTlgyWF9SWF9NT0RFX1BST01JU0M7CiAKIAllbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKLQkJICgoZGV2LT5tY19jb3VudCA+IEJOWDJYX01BWF9NVUxUSUNBU1QpICYmIENISVBfSVNfRTEoYnApKSkKKwkJICgobmV0ZGV2X21jX2NvdW50KGRldikgPiBCTlgyWF9NQVhfTVVMVElDQVNUKSAmJgorCQkgIENISVBfSVNfRTEoYnApKSkKIAkJcnhfbW9kZSA9IEJOWDJYX1JYX01PREVfQUxMTVVMVEk7CiAKIAllbHNlIHsgLyogc29tZSBtdWx0aWNhc3RzICovCkBAIC0xMTQ4MSwxMCArMTE0OTYsOCBAQAogCQkJc3RydWN0IG1hY19jb25maWd1cmF0aW9uX2NtZCAqY29uZmlnID0KIAkJCQkJCWJueDJ4X3NwKGJwLCBtY2FzdF9jb25maWcpOwogCi0JCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7Ci0JCQkgICAgIG1jbGlzdCAmJiAoaSA8IGRldi0+bWNfY291bnQpOwotCQkJICAgICBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgewotCisJCQlpID0gMDsKKwkJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCQkJY29uZmlnLT5jb25maWdfdGFibGVbaV0uCiAJCQkJCWNhbV9lbnRyeS5tc2JfbWFjX2FkZHIgPQogCQkJCQlzd2FiMTYoKih1MTYgKikmbWNsaXN0LT5kbWlfYWRkclswXSk7CkBAIC0xMTUxMiw2ICsxMTUyNSw3IEBACiAJCQkJCQljYW1fZW50cnkubWlkZGxlX21hY19hZGRyLAogCQkJCSAgIGNvbmZpZy0+Y29uZmlnX3RhYmxlW2ldLgogCQkJCQkJY2FtX2VudHJ5LmxzYl9tYWNfYWRkcik7CisJCQkJaSsrOwogCQkJfQogCQkJb2xkID0gY29uZmlnLT5oZHIubGVuZ3RoOwogCQkJaWYgKG9sZCA+IGkpIHsKQEAgLTExNTUzLDEwICsxMTU2Nyw3IEBACiAKIAkJCW1lbXNldChtY19maWx0ZXIsIDAsIDQgKiBNQ19IQVNIX1NJWkUpOwogCi0JCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7Ci0JCQkgICAgIG1jbGlzdCAmJiAoaSA8IGRldi0+bWNfY291bnQpOwotCQkJICAgICBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgewotCisJCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQkJCURQKE5FVElGX01TR19JRlVQLCAiQWRkaW5nIG1jYXN0IE1BQzogJXBNXG4iLAogCQkJCSAgIG1jbGlzdC0+ZG1pX2FkZHIpOwogCkBAIC0xMTczMSw3ICsxMTc0Miw3IEBACiAKICNlbmRpZgogCi0jaWYgZGVmaW5lZChIQVZFX1BPTExfQ09OVFJPTExFUikgfHwgZGVmaW5lZChDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUikKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgogc3RhdGljIHZvaWQgcG9sbF9ibngyeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBibngyeCAqYnAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTE3NTUsNyArMTE3NjYsNyBAQAogI2lmZGVmIEJDTV9WTEFOCiAJLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gYm54Mnhfdmxhbl9yeF9yZWdpc3RlciwKICNlbmRpZgotI2lmIGRlZmluZWQoSEFWRV9QT0xMX0NPTlRST0xMRVIpIHx8IGRlZmluZWQoQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIpCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlcgk9IHBvbGxfYm54MngsCiAjZW5kaWYKIH07CkBAIC0xMTc3NiwyMCArMTE3ODcsMTggQEAKIAogCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSwgYWJvcnRpbmdcbiIpOworCQlwcl9lcnIoIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSwgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCiAJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDApICYgSU9SRVNPVVJDRV9NRU0pKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBmaW5kIFBDSSBkZXZpY2UgYmFzZSBhZGRyZXNzLCIKLQkJICAgICAgICIgYWJvcnRpbmdcbiIpOworCQlwcl9lcnIoIkNhbm5vdCBmaW5kIFBDSSBkZXZpY2UgYmFzZSBhZGRyZXNzLCBhYm9ydGluZ1xuIik7CiAJCXJjID0gLUVOT0RFVjsKIAkJZ290byBlcnJfb3V0X2Rpc2FibGU7CiAJfQogCiAJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDIpICYgSU9SRVNPVVJDRV9NRU0pKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBmaW5kIHNlY29uZCBQQ0kgZGV2aWNlIgotCQkgICAgICAgIiBiYXNlIGFkZHJlc3MsIGFib3J0aW5nXG4iKTsKKwkJcHJfZXJyKCJDYW5ub3QgZmluZCBzZWNvbmQgUENJIGRldmljZSBiYXNlIGFkZHJlc3MsIGFib3J0aW5nXG4iKTsKIAkJcmMgPSAtRU5PREVWOwogCQlnb3RvIGVycl9vdXRfZGlzYWJsZTsKIAl9CkBAIC0xMTc5Nyw4ICsxMTgwNiw3IEBACiAJaWYgKGF0b21pY19yZWFkKCZwZGV2LT5lbmFibGVfY250KSA9PSAxKSB7CiAJCXJjID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTU9EVUxFX05BTUUpOwogCQlpZiAocmMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlcywiCi0JCQkgICAgICAgIiBhYm9ydGluZ1xuIik7CisJCQlwcl9lcnIoIkNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlcywgYWJvcnRpbmdcbiIpOwogCQkJZ290byBlcnJfb3V0X2Rpc2FibGU7CiAJCX0KIApAQCAtMTE4MDgsMTYgKzExODE2LDE0IEBACiAKIAlicC0+cG1fY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX1BNKTsKIAlpZiAoYnAtPnBtX2NhcCA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBmaW5kIHBvd2VyIG1hbmFnZW1lbnQiCi0JCSAgICAgICAiIGNhcGFiaWxpdHksIGFib3J0aW5nXG4iKTsKKwkJcHJfZXJyKCJDYW5ub3QgZmluZCBwb3dlciBtYW5hZ2VtZW50IGNhcGFiaWxpdHksIGFib3J0aW5nXG4iKTsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIGVycl9vdXRfcmVsZWFzZTsKIAl9CiAKIAlicC0+cGNpZV9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfRVhQKTsKIAlpZiAoYnAtPnBjaWVfY2FwID09IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGZpbmQgUENJIEV4cHJlc3MgY2FwYWJpbGl0eSwiCi0JCSAgICAgICAiIGFib3J0aW5nXG4iKTsKKwkJcHJfZXJyKCJDYW5ub3QgZmluZCBQQ0kgRXhwcmVzcyBjYXBhYmlsaXR5LCBhYm9ydGluZ1xuIik7CiAJCXJjID0gLUVJTzsKIAkJZ290byBlcnJfb3V0X3JlbGVhc2U7CiAJfQpAQCAtMTE4MjUsMTUgKzExODMxLDEzIEBACiAJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkgPT0gMCkgewogCQlicC0+ZmxhZ3MgfD0gVVNJTkdfREFDX0ZMQUc7CiAJCWlmIChwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAicGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrIgotCQkJICAgICAgICIgZmFpbGVkLCBhYm9ydGluZ1xuIik7CisJCQlwcl9lcnIoInBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayBmYWlsZWQsIGFib3J0aW5nXG4iKTsKIAkJCXJjID0gLUVJTzsKIAkJCWdvdG8gZXJyX291dF9yZWxlYXNlOwogCQl9CiAKIAl9IGVsc2UgaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJTeXN0ZW0gZG9lcyBub3Qgc3VwcG9ydCBETUEsIgotCQkgICAgICAgIiBhYm9ydGluZ1xuIik7CisJCXByX2VycigiU3lzdGVtIGRvZXMgbm90IHN1cHBvcnQgRE1BLCBhYm9ydGluZ1xuIik7CiAJCXJjID0gLUVJTzsKIAkJZ290byBlcnJfb3V0X3JlbGVhc2U7CiAJfQpAQCAtMTE4NDYsNyArMTE4NTAsNyBAQAogCiAJYnAtPnJlZ3ZpZXcgPSBwY2lfaW9yZW1hcF9iYXIocGRldiwgMCk7CiAJaWYgKCFicC0+cmVndmlldykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgbWFwIHJlZ2lzdGVyIHNwYWNlLCBhYm9ydGluZ1xuIik7CisJCXByX2VycigiQ2Fubm90IG1hcCByZWdpc3RlciBzcGFjZSwgYWJvcnRpbmdcbiIpOwogCQlyYyA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dF9yZWxlYXNlOwogCX0KQEAgLTExODU1LDcgKzExODU5LDcgQEAKIAkJCQkJbWluX3QodTY0LCBCTlgyWF9EQl9TSVpFLAogCQkJCQkgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDIpKSk7CiAJaWYgKCFicC0+ZG9vcmJlbGxzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBtYXAgZG9vcmJlbGwgc3BhY2UsIGFib3J0aW5nXG4iKTsKKwkJcHJfZXJyKCJDYW5ub3QgbWFwIGRvb3JiZWxsIHNwYWNlLCBhYm9ydGluZ1xuIik7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0X3VubWFwOwogCX0KQEAgLTExOTU3LDggKzExOTYxLDcgQEAKIAkJb2Zmc2V0ID0gYmUzMl90b19jcHUoc2VjdGlvbnNbaV0ub2Zmc2V0KTsKIAkJbGVuID0gYmUzMl90b19jcHUoc2VjdGlvbnNbaV0ubGVuKTsKIAkJaWYgKG9mZnNldCArIGxlbiA+IGZpcm13YXJlLT5zaXplKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJTZWN0aW9uICVkIGxlbmd0aCBpcyBvdXQgb2YgIgotCQkJCQkgICAgImJvdW5kc1xuIiwgaSk7CisJCQlwcl9lcnIoIlNlY3Rpb24gJWQgbGVuZ3RoIGlzIG91dCBvZiBib3VuZHNcbiIsIGkpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CkBAIC0xMTk3MCw4ICsxMTk3Myw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgYmUzMl90b19jcHUoZndfaGRyLT5pbml0X29wc19vZmZzZXRzLmxlbikgLyAyOyBpKyspIHsKIAkJaWYgKGJlMTZfdG9fY3B1KG9wc19vZmZzZXRzW2ldKSA+IG51bV9vcHMpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIlNlY3Rpb24gb2Zmc2V0ICVkIGlzIG91dCBvZiAiCi0JCQkJCSAgICAiYm91bmRzXG4iLCBpKTsKKwkJCXByX2VycigiU2VjdGlvbiBvZmZzZXQgJWQgaXMgb3V0IG9mIGJvdW5kc1xuIiwgaSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTExOTgzLDggKzExOTg1LDcgQEAKIAkgICAgKGZ3X3ZlclsxXSAhPSBCQ01fNTcxMF9GV19NSU5PUl9WRVJTSU9OKSB8fAogCSAgICAoZndfdmVyWzJdICE9IEJDTV81NzEwX0ZXX1JFVklTSU9OX1ZFUlNJT04pIHx8CiAJICAgIChmd192ZXJbM10gIT0gQkNNXzU3MTBfRldfRU5HSU5FRVJJTkdfVkVSU0lPTikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQmFkIEZXIHZlcnNpb246JWQuJWQuJWQuJWQuIgotCQkJCSAgICAiIFNob3VsZCBiZSAlZC4lZC4lZC4lZFxuIiwKKwkJcHJfZXJyKCJCYWQgRlcgdmVyc2lvbjolZC4lZC4lZC4lZC4gU2hvdWxkIGJlICVkLiVkLiVkLiVkXG4iLAogCQkgICAgICAgZndfdmVyWzBdLCBmd192ZXJbMV0sIGZ3X3ZlclsyXSwKIAkJICAgICAgIGZ3X3ZlclszXSwgQkNNXzU3MTBfRldfTUFKT1JfVkVSU0lPTiwKIAkJICAgICAgIEJDTV81NzEwX0ZXX01JTk9SX1ZFUlNJT04sCkBAIC0xMjAzNCwxOCArMTIwMzUsMTcgQEAKIAkJdGFyZ2V0W2ldID0gYmUxNl90b19jcHUoc291cmNlW2ldKTsKIH0KIAotI2RlZmluZSBCTlgyWF9BTExPQ19BTkRfU0VUKGFyciwgbGJsLCBmdW5jKSBcCi0JZG8geyBcCi0JCXUzMiBsZW4gPSBiZTMyX3RvX2NwdShmd19oZHItPmFyci5sZW4pOyBcCi0JCWJwLT5hcnIgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7IFwKLQkJaWYgKCFicC0+YXJyKSB7IFwKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkZhaWxlZCB0byBhbGxvY2F0ZSAlZCBieXRlcyAiIFwKLQkJCQkJICAgICJmb3IgIiNhcnIiXG4iLCBsZW4pOyBcCi0JCQlnb3RvIGxibDsgXAotCQl9IFwKLQkJZnVuYyhicC0+ZmlybXdhcmUtPmRhdGEgKyBiZTMyX3RvX2NwdShmd19oZHItPmFyci5vZmZzZXQpLCBcCi0JCSAgICAgKHU4ICopYnAtPmFyciwgbGVuKTsgXAotCX0gd2hpbGUgKDApCisjZGVmaW5lIEJOWDJYX0FMTE9DX0FORF9TRVQoYXJyLCBsYmwsIGZ1bmMpCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJdTMyIGxlbiA9IGJlMzJfdG9fY3B1KGZ3X2hkci0+YXJyLmxlbik7CQkJCVwKKwlicC0+YXJyID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwkJCQlcCisJaWYgKCFicC0+YXJyKSB7CQkJCQkJCVwKKwkJcHJfZXJyKCJGYWlsZWQgdG8gYWxsb2NhdGUgJWQgYnl0ZXMgZm9yICIjYXJyIlxuIiwgbGVuKTsgXAorCQlnb3RvIGxibDsJCQkJCQlcCisJfQkJCQkJCQkJXAorCWZ1bmMoYnAtPmZpcm13YXJlLT5kYXRhICsgYmUzMl90b19jcHUoZndfaGRyLT5hcnIub2Zmc2V0KSwJXAorCSAgICAgKHU4ICopYnAtPmFyciwgbGVuKTsJCQkJCVwKK30gd2hpbGUgKDApCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGJueDJ4X2luaXRfZmlybXdhcmUoc3RydWN0IGJueDJ4ICpicCwgc3RydWN0IGRldmljZSAqZGV2KQogewpAQCAtMTIwNTgsMTggKzEyMDU4LDE3IEBACiAJZWxzZQogCQlmd19maWxlX25hbWUgPSBGV19GSUxFX05BTUVfRTFIOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIkxvYWRpbmcgJXNcbiIsIGZ3X2ZpbGVfbmFtZSk7CisJcHJfaW5mbygiTG9hZGluZyAlc1xuIiwgZndfZmlsZV9uYW1lKTsKIAogCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmYnAtPmZpcm13YXJlLCBmd19maWxlX25hbWUsIGRldik7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbid0IGxvYWQgZmlybXdhcmUgZmlsZSAlc1xuIiwKLQkJICAgICAgIGZ3X2ZpbGVfbmFtZSk7CisJCXByX2VycigiQ2FuJ3QgbG9hZCBmaXJtd2FyZSBmaWxlICVzXG4iLCBmd19maWxlX25hbWUpOwogCQlnb3RvIHJlcXVlc3RfZmlybXdhcmVfZXhpdDsKIAl9CiAKIAlyYyA9IGJueDJ4X2NoZWNrX2Zpcm13YXJlKGJwKTsKIAlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ29ycnVwdCBmaXJtd2FyZSBmaWxlICVzXG4iLCBmd19maWxlX25hbWUpOworCQlwcl9lcnIoIkNvcnJ1cHQgZmlybXdhcmUgZmlsZSAlc1xuIiwgZndfZmlsZV9uYW1lKTsKIAkJZ290byByZXF1ZXN0X2Zpcm13YXJlX2V4aXQ7CiAJfQogCkBAIC0xMjEyOCwxMiArMTIxMjcsMTIgQEAKIAkvKiBkZXYgemVyb2VkIGluIGluaXRfZXRoZXJkZXYgKi8KIAlkZXYgPSBhbGxvY19ldGhlcmRldl9tcShzaXplb2YoKmJwKSwgTUFYX0NPTlRFWFQpOwogCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBhbGxvY2F0ZSBuZXQgZGV2aWNlXG4iKTsKKwkJcHJfZXJyKCJDYW5ub3QgYWxsb2NhdGUgbmV0IGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlicC0+bXNnbGV2ZWwgPSBkZWJ1ZzsKKwlicC0+bXNnX2VuYWJsZSA9IGRlYnVnOwogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKQEAgLTEyMTUwLDcgKzEyMTQ5LDcgQEAKIAkvKiBTZXQgaW5pdCBhcnJheXMgKi8KIAlyYyA9IGJueDJ4X2luaXRfZmlybXdhcmUoYnAsICZwZGV2LT5kZXYpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJFcnJvciBsb2FkaW5nIGZpcm13YXJlXG4iKTsKKwkJcHJfZXJyKCJFcnJvciBsb2FkaW5nIGZpcm13YXJlXG4iKTsKIAkJZ290byBpbml0X29uZV9leGl0OwogCX0KIApAQCAtMTIxNjEsMTIgKzEyMTYwLDExIEBACiAJfQogCiAJYm54MnhfZ2V0X3BjaWVfd2lkdGhfc3BlZWQoYnAsICZwY2llX3dpZHRoLCAmcGNpZV9zcGVlZCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzICglYyVkKSBQQ0ktRSB4JWQgJXMgZm91bmQgYXQgbWVtICVseCwiCi0JICAgICAgICIgSVJRICVkLCAiLCBkZXYtPm5hbWUsIGJvYXJkX2luZm9bZW50LT5kcml2ZXJfZGF0YV0ubmFtZSwKLQkgICAgICAgKENISVBfUkVWKGJwKSA+PiAxMikgKyAnQScsIChDSElQX01FVEFMKGJwKSA+PiA0KSwKLQkgICAgICAgcGNpZV93aWR0aCwgKHBjaWVfc3BlZWQgPT0gMikgPyAiNUdIeiAoR2VuMikiIDogIjIuNUdIeiIsCi0JICAgICAgIGRldi0+YmFzZV9hZGRyLCBicC0+cGRldi0+aXJxKTsKLQlwcmludGsoS0VSTl9DT05UICJub2RlIGFkZHIgJXBNXG4iLCBkZXYtPmRldl9hZGRyKTsKKwluZXRkZXZfaW5mbyhkZXYsICIlcyAoJWMlZCkgUENJLUUgeCVkICVzIGZvdW5kIGF0IG1lbSAlbHgsIElSUSAlZCwgbm9kZSBhZGRyICVwTVxuIiwKKwkJICAgIGJvYXJkX2luZm9bZW50LT5kcml2ZXJfZGF0YV0ubmFtZSwKKwkJICAgIChDSElQX1JFVihicCkgPj4gMTIpICsgJ0EnLCAoQ0hJUF9NRVRBTChicCkgPj4gNCksCisJCSAgICBwY2llX3dpZHRoLCAocGNpZV9zcGVlZCA9PSAyKSA/ICI1R0h6IChHZW4yKSIgOiAiMi41R0h6IiwKKwkJICAgIGRldi0+YmFzZV9hZGRyLCBicC0+cGRldi0+aXJxLCBkZXYtPmRldl9hZGRyKTsKIAogCXJldHVybiAwOwogCkBAIC0xMjE5NCw3ICsxMjE5Miw3IEBACiAJc3RydWN0IGJueDJ4ICpicDsKIAogCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkJBRCBuZXQgZGV2aWNlIGZyb20gYm54MnhfaW5pdF9vbmVcbiIpOworCQlwcl9lcnIoIkJBRCBuZXQgZGV2aWNlIGZyb20gYm54MnhfaW5pdF9vbmVcbiIpOwogCQlyZXR1cm47CiAJfQogCWJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKQEAgLTEyMjI3LDcgKzEyMjI1LDcgQEAKIAlzdHJ1Y3QgYm54MnggKmJwOwogCiAJaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQkFEIG5ldCBkZXZpY2UgZnJvbSBibngyeF9pbml0X29uZVxuIik7CisJCXByX2VycigiQkFEIG5ldCBkZXZpY2UgZnJvbSBibngyeF9pbml0X29uZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlicCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMjI1OSw3ICsxMjI1Nyw3IEBACiAJaW50IHJjOwogCiAJaWYgKCFkZXYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQkFEIG5ldCBkZXZpY2UgZnJvbSBibngyeF9pbml0X29uZVxuIik7CisJCXByX2VycigiQkFEIG5ldCBkZXZpY2UgZnJvbSBibngyeF9pbml0X29uZVxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlicCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMjI5OCw3ICsxMjI5Niw3IEBACiAJRFAoQk5YMlhfTVNHX1NUQVRTLCAic3RhdHNfc3RhdGUgLSBESVNBQkxFRFxuIik7CiAKIAkvKiBSZWxlYXNlIElSUXMgKi8KLQlibngyeF9mcmVlX2lycShicCk7CisJYm54MnhfZnJlZV9pcnEoYnAsIGZhbHNlKTsKIAogCWlmIChDSElQX0lTX0UxKGJwKSkgewogCQlzdHJ1Y3QgbWFjX2NvbmZpZ3VyYXRpb25fY21kICpjb25maWcgPQpAQCAtMTI0NjIsMTcgKzEyNDYwLDE3IEBACiB7CiAJaW50IHJldDsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzIiwgdmVyc2lvbik7CisJcHJfaW5mbygiJXMiLCB2ZXJzaW9uKTsKIAogCWJueDJ4X3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImJueDJ4Iik7CiAJaWYgKGJueDJ4X3dxID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGNyZWF0ZSB3b3JrcXVldWVcbiIpOworCQlwcl9lcnIoIkNhbm5vdCBjcmVhdGUgd29ya3F1ZXVlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYm54MnhfcGNpX2RyaXZlcik7CiAJaWYgKHJldCkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgcmVnaXN0ZXIgZHJpdmVyXG4iKTsKKwkJcHJfZXJyKCJDYW5ub3QgcmVnaXN0ZXIgZHJpdmVyXG4iKTsKIAkJZGVzdHJveV93b3JrcXVldWUoYm54Mnhfd3EpOwogCX0KIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKaW5kZXggZWZhMGU0MS4uNDMwYzAyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYworKysgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCkBAIC0yNjE1LDYgKzI2MTUsMTcgQEAKIAl1bnNpZ25lZCBjaGFyICphcnBfcHRyOwogCV9fYmUzMiBzaXAsIHRpcDsKIAorCWlmIChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfODAyXzFRX1ZMQU4pIHsKKwkJLyoKKwkJICogV2hlbiB1c2luZyBWTEFOUyBhbmQgYm9uZGluZywgZGV2IGFuZCBvcml2X2RldiBtYXkgYmUKKwkJICogaW5jb3JyZWN0IGlmIHRoZSBwaHlzaWNhbCBpbnRlcmZhY2Ugc3VwcG9ydHMgVkxBTgorCQkgKiBhY2NlbGVyYXRpb24uICBXaXRoIHRoaXMgY2hhbmdlIEFSUCB2YWxpZGF0aW9uIG5vdworCQkgKiB3b3JrcyBmb3IgaG9zdHMgb25seSByZWFjaGFibGUgb24gdGhlIFZMQU4gaW50ZXJmYWNlLgorCQkgKi8KKwkJZGV2ID0gdmxhbl9kZXZfcmVhbF9kZXYoZGV2KTsKKwkJb3JpZ19kZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShkZXZfbmV0KHNrYi0+ZGV2KSxza2ItPnNrYl9paWYpOworCX0KKwogCWlmICghKGRldi0+cHJpdl9mbGFncyAmIElGRl9CT05ESU5HKSB8fCAhKGRldi0+ZmxhZ3MgJiBJRkZfTUFTVEVSKSkKIAkJZ290byBvdXQ7CiAKQEAgLTMyOTYsNyArMzMwNyw3IEBACiAvKiBDcmVhdGUgdGhlIGJvbmRpbmcgZGlyZWN0b3J5IHVuZGVyIC9wcm9jL25ldCwgaWYgZG9lc24ndCBleGlzdCB5ZXQuCiAgKiBDYWxsZXIgbXVzdCBob2xkIHJ0bmxfbG9jay4KICAqLwotc3RhdGljIHZvaWQgYm9uZF9jcmVhdGVfcHJvY19kaXIoc3RydWN0IGJvbmRfbmV0ICpibikKK3N0YXRpYyB2b2lkIF9fbmV0X2luaXQgYm9uZF9jcmVhdGVfcHJvY19kaXIoc3RydWN0IGJvbmRfbmV0ICpibikKIHsKIAlpZiAoIWJuLT5wcm9jX2RpcikgewogCQlibi0+cHJvY19kaXIgPSBwcm9jX21rZGlyKERSVl9OQU1FLCBibi0+bmV0LT5wcm9jX25ldCk7CkBAIC0zMzA5LDcgKzMzMjAsNyBAQAogLyogRGVzdHJveSB0aGUgYm9uZGluZyBkaXJlY3RvcnkgdW5kZXIgL3Byb2MvbmV0LCBpZiBlbXB0eS4KICAqIENhbGxlciBtdXN0IGhvbGQgcnRubF9sb2NrLgogICovCi1zdGF0aWMgdm9pZCBib25kX2Rlc3Ryb3lfcHJvY19kaXIoc3RydWN0IGJvbmRfbmV0ICpibikKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgYm9uZF9kZXN0cm95X3Byb2NfZGlyKHN0cnVjdCBib25kX25ldCAqYm4pCiB7CiAJaWYgKGJuLT5wcm9jX2RpcikgewogCQlyZW1vdmVfcHJvY19lbnRyeShEUlZfTkFNRSwgYm4tPm5ldC0+cHJvY19uZXQpOwpAQCAtMzMyNywxMSArMzMzOCwxMSBAQAogewogfQogCi1zdGF0aWMgdm9pZCBib25kX2NyZWF0ZV9wcm9jX2RpcihzdHJ1Y3QgYm9uZF9uZXQgKmJuKQorc3RhdGljIGlubGluZSB2b2lkIGJvbmRfY3JlYXRlX3Byb2NfZGlyKHN0cnVjdCBib25kX25ldCAqYm4pCiB7CiB9CiAKLXN0YXRpYyB2b2lkIGJvbmRfZGVzdHJveV9wcm9jX2RpcihzdHJ1Y3QgYm9uZF9uZXQgKmJuKQorc3RhdGljIGlubGluZSB2b2lkIGJvbmRfZGVzdHJveV9wcm9jX2RpcihzdHJ1Y3QgYm9uZF9uZXQgKmJuKQogewogfQogCkBAIC0zNzMxLDcgKzM3NDIsNyBAQAogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpib25kX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYpCiB7CiAJc3RydWN0IGJvbmRpbmcgKmJvbmQgPSBuZXRkZXZfcHJpdihib25kX2Rldik7Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmJvbmQtPnN0YXRzOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9ICZib25kX2Rldi0+c3RhdHM7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgbG9jYWxfc3RhdHM7CiAJc3RydWN0IHNsYXZlICpzbGF2ZTsKIAlpbnQgaTsKQEAgLTQ5MzUsNiArNDk0Niw4IEBACiAJfQogCiAJcmVzID0gcmVnaXN0ZXJfbmV0ZGV2aWNlKGJvbmRfZGV2KTsKKwlpZiAocmVzIDwgMCkKKwkJZ290byBvdXRfbmV0ZGV2OwogCiBvdXQ6CiAJcnRubF91bmxvY2soKTsKQEAgLTQ5NDQsNyArNDk1Nyw3IEBACiAJZ290byBvdXQ7CiB9CiAKLXN0YXRpYyBpbnQgYm9uZF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgYm9uZF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGJvbmRfbmV0ICpibiA9IG5ldF9nZW5lcmljKG5ldCwgYm9uZF9uZXRfaWQpOwogCkBAIC00OTU2LDcgKzQ5NjksNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBib25kX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgYm9uZF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGJvbmRfbmV0ICpibiA9IG5ldF9nZW5lcmljKG5ldCwgYm9uZF9uZXRfaWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfc3lzZnMuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jCmluZGV4IDVhY2Q1NTcuLmI4YmVjMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jCkBAIC01MSw3ICs1MSw5IEBACiAgKiAic2hvdyIgZnVuY3Rpb24gZm9yIHRoZSBib25kX21hc3RlcnMgYXR0cmlidXRlLgogICogVGhlIGNsYXNzIHBhcmFtZXRlciBpcyBpZ25vcmVkLgogICovCi1zdGF0aWMgc3NpemVfdCBib25kaW5nX3Nob3dfYm9uZHMoc3RydWN0IGNsYXNzICpjbHMsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IGJvbmRpbmdfc2hvd19ib25kcyhzdHJ1Y3QgY2xhc3MgKmNscywKKwkJCQkgIHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICBjaGFyICpidWYpCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gY3VycmVudC0+bnNwcm94eS0+bmV0X25zOwogCXN0cnVjdCBib25kX25ldCAqYm4gPSBuZXRfZ2VuZXJpYyhuZXQsIGJvbmRfbmV0X2lkKTsKQEAgLTk4LDYgKzEwMCw3IEBACiAgKi8KIAogc3RhdGljIHNzaXplX3QgYm9uZGluZ19zdG9yZV9ib25kcyhzdHJ1Y3QgY2xhc3MgKmNscywKKwkJCQkgICBzdHJ1Y3QgY2xhc3NfYXR0cmlidXRlICphdHRyLAogCQkJCSAgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGN1cnJlbnQtPm5zcHJveHktPm5ldF9uczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKaW5kZXggNTU4ZWMxMy4uMjU3YTdhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kaW5nLmgKQEAgLTE5Nyw3ICsxOTcsNiBAQAogCXM4CSBzZW5kX2dyYXRfYXJwOwogCXM4CSBzZW5kX3Vuc29sX25hOwogCXM4CSBzZXR1cF9ieV9zbGF2ZTsKLQlzdHJ1Y3QgICBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAJc3RydWN0ICAgcHJvY19kaXJfZW50cnkgKnByb2NfZW50cnk7CiAJY2hhciAgICAgcHJvY19maWxlX25hbWVbSUZOQU1TSVpdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2F0OTFfY2FuLmMgYi9kcml2ZXJzL25ldC9jYW4vYXQ5MV9jYW4uYwppbmRleCAxNjZjYzdlLi5hMmYyOWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vYXQ5MV9jYW4uYworKysgYi9kcml2ZXJzL25ldC9jYW4vYXQ5MV9jYW4uYwpAQCAtMzQyLDYgKzM0Miw5IEBACiAJdW5zaWduZWQgaW50IG1iLCBwcmlvOwogCXUzMiByZWdfbWlkLCByZWdfbWNyOwogCisJaWYgKGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKGRldiwgc2tiKSkKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwogCW1iID0gZ2V0X3R4X25leHRfbWIocHJpdik7CiAJcHJpbyA9IGdldF90eF9uZXh0X3ByaW8ocHJpdik7CiAKQEAgLTEwNzAsNiArMTA3Myw3IEBACiAJcHJpdi0+Y2FuLmJpdHRpbWluZ19jb25zdCA9ICZhdDkxX2JpdHRpbWluZ19jb25zdDsKIAlwcml2LT5jYW4uZG9fc2V0X2JpdHRpbWluZyA9IGF0OTFfc2V0X2JpdHRpbWluZzsKIAlwcml2LT5jYW4uZG9fc2V0X21vZGUgPSBhdDkxX3NldF9tb2RlOworCXByaXYtPmNhbi5jdHJsbW9kZV9zdXBwb3J0ZWQgPSBDQU5fQ1RSTE1PREVfM19TQU1QTEVTOwogCXByaXYtPnJlZ19iYXNlID0gYWRkcjsKIAlwcml2LT5kZXYgPSBkZXY7CiAJcHJpdi0+Y2xrID0gY2xrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2JmaW5fY2FuLmMgYi9kcml2ZXJzL25ldC9jYW4vYmZpbl9jYW4uYwppbmRleCAwZWMxNTI0Li5iZjdmOWJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vYmZpbl9jYW4uYworKysgYi9kcml2ZXJzL25ldC9jYW4vYmZpbl9jYW4uYwpAQCAtMzE4LDYgKzMxOCw5IEBACiAJdTE2IHZhbDsKIAlpbnQgaTsKIAorCWlmIChjYW5fZHJvcHBlZF9pbnZhbGlkX3NrYihkZXYsIHNrYikpCisJCXJldHVybiBORVRERVZfVFhfT0s7CisKIAluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKIAkvKiBmaWxsIGlkICovCkBAIC02MDAsNiArNjAzLDcgQEAKIAlwcml2LT5jYW4uYml0dGltaW5nX2NvbnN0ID0gJmJmaW5fY2FuX2JpdHRpbWluZ19jb25zdDsKIAlwcml2LT5jYW4uZG9fc2V0X2JpdHRpbWluZyA9IGJmaW5fY2FuX3NldF9iaXR0aW1pbmc7CiAJcHJpdi0+Y2FuLmRvX3NldF9tb2RlID0gYmZpbl9jYW5fc2V0X21vZGU7CisJcHJpdi0+Y2FuLmN0cmxtb2RlX3N1cHBvcnRlZCA9IENBTl9DVFJMTU9ERV8zX1NBTVBMRVM7CiAKIAlyZXR1cm4gZGV2OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL2Rldi5jIGIvZHJpdmVycy9uZXQvY2FuL2Rldi5jCmluZGV4IGMxYmIyOWYuLjkwNGFhMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9kZXYuYworKysgYi9kcml2ZXJzL25ldC9jYW4vZGV2LmMKQEAgLTU3NCw2ICs1NzQsNyBAQAogCVtJRkxBX0NBTl9CSVRUSU1JTkdfQ09OU1RdCiAJCQkJPSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IGNhbl9iaXR0aW1pbmdfY29uc3QpIH0sCiAJW0lGTEFfQ0FOX0NMT0NLXQk9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgY2FuX2Nsb2NrKSB9LAorCVtJRkxBX0NBTl9CRVJSX0NPVU5URVJdCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCBjYW5fYmVycl9jb3VudGVyKSB9LAogfTsKIAogc3RhdGljIGludCBjYW5fY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtNTkyLDYgKzU5Myw4IEBACiAJCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKQogCQkJcmV0dXJuIC1FQlVTWTsKIAkJY20gPSBubGFfZGF0YShkYXRhW0lGTEFfQ0FOX0NUUkxNT0RFXSk7CisJCWlmIChjbS0+ZmxhZ3MgJiB+cHJpdi0+Y3RybG1vZGVfc3VwcG9ydGVkKQorCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQlwcml2LT5jdHJsbW9kZSAmPSB+Y20tPm1hc2s7CiAJCXByaXYtPmN0cmxtb2RlIHw9IGNtLT5mbGFnczsKIAl9CkBAIC02NDcsNiArNjUwLDggQEAKIAlzaXplICs9IG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKTsgIC8qIElGTEFfQ0FOX1JFU1RBUlRfTVMgKi8KIAlzaXplICs9IHNpemVvZihzdHJ1Y3QgY2FuX2JpdHRpbWluZyk7IC8qIElGTEFfQ0FOX0JJVFRJTUlORyAqLwogCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBjYW5fY2xvY2spOyAgICAgLyogSUZMQV9DQU5fQ0xPQ0sgKi8KKwlpZiAocHJpdi0+ZG9fZ2V0X2JlcnJfY291bnRlcikgICAgICAgIC8qIElGTEFfQ0FOX0JFUlJfQ09VTlRFUiAqLworCQlzaXplICs9IHNpemVvZihzdHJ1Y3QgY2FuX2JlcnJfY291bnRlcik7CiAJaWYgKHByaXYtPmJpdHRpbWluZ19jb25zdCkJICAgICAgLyogSUZMQV9DQU5fQklUVElNSU5HX0NPTlNUICovCiAJCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBjYW5fYml0dGltaW5nX2NvbnN0KTsKIApAQCAtNjU3LDYgKzY2Miw3IEBACiB7CiAJc3RydWN0IGNhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgY2FuX2N0cmxtb2RlIGNtID0gey5mbGFncyA9IHByaXYtPmN0cmxtb2RlfTsKKwlzdHJ1Y3QgY2FuX2JlcnJfY291bnRlciBiZWM7CiAJZW51bSBjYW5fc3RhdGUgc3RhdGUgPSBwcml2LT5zdGF0ZTsKIAogCWlmIChwcml2LT5kb19nZXRfc3RhdGUpCkBAIC02NjcsNiArNjczLDggQEAKIAlOTEFfUFVUKHNrYiwgSUZMQV9DQU5fQklUVElNSU5HLAogCQlzaXplb2YocHJpdi0+Yml0dGltaW5nKSwgJnByaXYtPmJpdHRpbWluZyk7CiAJTkxBX1BVVChza2IsIElGTEFfQ0FOX0NMT0NLLCBzaXplb2YoY20pLCAmcHJpdi0+Y2xvY2spOworCWlmIChwcml2LT5kb19nZXRfYmVycl9jb3VudGVyICYmICFwcml2LT5kb19nZXRfYmVycl9jb3VudGVyKGRldiwgJmJlYykpCisJCU5MQV9QVVQoc2tiLCBJRkxBX0NBTl9CRVJSX0NPVU5URVIsIHNpemVvZihiZWMpLCAmYmVjKTsKIAlpZiAocHJpdi0+Yml0dGltaW5nX2NvbnN0KQogCQlOTEFfUFVUKHNrYiwgSUZMQV9DQU5fQklUVElNSU5HX0NPTlNULAogCQkJc2l6ZW9mKCpwcml2LT5iaXR0aW1pbmdfY29uc3QpLCBwcml2LT5iaXR0aW1pbmdfY29uc3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL21jcDI1MXguYyBiL2RyaXZlcnMvbmV0L2Nhbi9tY3AyNTF4LmMKaW5kZXggMWE3MmNhMC4uZjhjYzE2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL21jcDI1MXguYworKysgYi9kcml2ZXJzL25ldC9jYW4vbWNwMjUxeC5jCkBAIC0xODAsNiArMTgwLDE0IEBACiAjZGVmaW5lIFJYQkVJRDBfT0ZGIDQKICNkZWZpbmUgUlhCRExDX09GRiAgNQogI2RlZmluZSBSWEJEQVRfT0ZGICA2CisjZGVmaW5lIFJYRlNJREgobikgKChuKSAqIDQpCisjZGVmaW5lIFJYRlNJREwobikgKChuKSAqIDQgKyAxKQorI2RlZmluZSBSWEZFSUQ4KG4pICgobikgKiA0ICsgMikKKyNkZWZpbmUgUlhGRUlEMChuKSAoKG4pICogNCArIDMpCisjZGVmaW5lIFJYTVNJREgobikgKChuKSAqIDQgKyAweDIwKQorI2RlZmluZSBSWE1TSURMKG4pICgobikgKiA0ICsgMHgyMSkKKyNkZWZpbmUgUlhNRUlEOChuKSAoKG4pICogNCArIDB4MjIpCisjZGVmaW5lIFJYTUVJRDAobikgKChuKSAqIDQgKyAweDIzKQogCiAjZGVmaW5lIEdFVF9CWVRFKHZhbCwgYnl0ZSkJCQlcCiAJKCgodmFsKSA+PiAoKGJ5dGUpICogOCkpICYgMHhmZikKQEAgLTIxOSw3ICsyMjcsOCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQ7CiAJc3RydWN0IHNwaV9kZXZpY2UgKnNwaTsKIAotCXN0cnVjdCBtdXRleCBzcGlfbG9jazsgLyogU1BJIGJ1ZmZlciBsb2NrICovCisJc3RydWN0IG11dGV4IG1jcF9sb2NrOyAvKiBTUEkgZGV2aWNlIGxvY2sgKi8KKwogCXU4ICpzcGlfdHhfYnVmOwogCXU4ICpzcGlfcnhfYnVmOwogCWRtYV9hZGRyX3Qgc3BpX3R4X2RtYTsKQEAgLTIyNywxMSArMjM2LDExIEBACiAKIAlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiOwogCWludCB0eF9sZW47CisKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CiAJc3RydWN0IHdvcmtfc3RydWN0IHR4X3dvcms7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGlycV93b3JrOwotCXN0cnVjdCBjb21wbGV0aW9uIGF3YWtlOwotCWludCB3YWtlOworCXN0cnVjdCB3b3JrX3N0cnVjdCByZXN0YXJ0X3dvcms7CisKIAlpbnQgZm9yY2VfcXVpdDsKIAlpbnQgYWZ0ZXJfc3VzcGVuZDsKICNkZWZpbmUgQUZURVJfU1VTUEVORF9VUCAxCkBAIC0yNDUsNyArMjU0LDggQEAKIHsKIAlzdHJ1Y3QgbWNwMjUxeF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAotCW5ldC0+c3RhdHMudHhfZXJyb3JzKys7CisJaWYgKHByaXYtPnR4X3NrYiB8fCBwcml2LT50eF9sZW4pCisJCW5ldC0+c3RhdHMudHhfZXJyb3JzKys7CiAJaWYgKHByaXYtPnR4X3NrYikKIAkJZGV2X2tmcmVlX3NrYihwcml2LT50eF9za2IpOwogCWlmIChwcml2LT50eF9sZW4pCkBAIC0zMDAsMTYgKzMxMCwxMiBAQAogCXN0cnVjdCBtY3AyNTF4X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKIAl1OCB2YWwgPSAwOwogCi0JbXV0ZXhfbG9jaygmcHJpdi0+c3BpX2xvY2spOwotCiAJcHJpdi0+c3BpX3R4X2J1ZlswXSA9IElOU1RSVUNUSU9OX1JFQUQ7CiAJcHJpdi0+c3BpX3R4X2J1ZlsxXSA9IHJlZzsKIAogCW1jcDI1MXhfc3BpX3RyYW5zKHNwaSwgMyk7CiAJdmFsID0gcHJpdi0+c3BpX3J4X2J1ZlsyXTsKIAotCW11dGV4X3VubG9jaygmcHJpdi0+c3BpX2xvY2spOwotCiAJcmV0dXJuIHZhbDsKIH0KIApAQCAtMzE3LDE1ICszMjMsMTEgQEAKIHsKIAlzdHJ1Y3QgbWNwMjUxeF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CiAKLQltdXRleF9sb2NrKCZwcml2LT5zcGlfbG9jayk7Ci0KIAlwcml2LT5zcGlfdHhfYnVmWzBdID0gSU5TVFJVQ1RJT05fV1JJVEU7CiAJcHJpdi0+c3BpX3R4X2J1ZlsxXSA9IHJlZzsKIAlwcml2LT5zcGlfdHhfYnVmWzJdID0gdmFsOwogCiAJbWNwMjUxeF9zcGlfdHJhbnMoc3BpLCAzKTsKLQotCW11dGV4X3VubG9jaygmcHJpdi0+c3BpX2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBtY3AyNTF4X3dyaXRlX2JpdHMoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgdTggcmVnLApAQCAtMzMzLDE2ICszMzUsMTIgQEAKIHsKIAlzdHJ1Y3QgbWNwMjUxeF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CiAKLQltdXRleF9sb2NrKCZwcml2LT5zcGlfbG9jayk7Ci0KIAlwcml2LT5zcGlfdHhfYnVmWzBdID0gSU5TVFJVQ1RJT05fQklUX01PRElGWTsKIAlwcml2LT5zcGlfdHhfYnVmWzFdID0gcmVnOwogCXByaXYtPnNwaV90eF9idWZbMl0gPSBtYXNrOwogCXByaXYtPnNwaV90eF9idWZbM10gPSB2YWw7CiAKIAltY3AyNTF4X3NwaV90cmFucyhzcGksIDQpOwotCi0JbXV0ZXhfdW5sb2NrKCZwcml2LT5zcGlfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIG1jcDI1MXhfaHdfdHhfZnJhbWUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgdTggKmJ1ZiwKQEAgLTM1OCwxMCArMzU2LDggQEAKIAkJCW1jcDI1MXhfd3JpdGVfcmVnKHNwaSwgVFhCQ1RSTCh0eF9idWZfaWR4KSArIGksCiAJCQkJCSAgYnVmW2ldKTsKIAl9IGVsc2UgewotCQltdXRleF9sb2NrKCZwcml2LT5zcGlfbG9jayk7CiAJCW1lbWNweShwcml2LT5zcGlfdHhfYnVmLCBidWYsIFRYQkRBVF9PRkYgKyBsZW4pOwogCQltY3AyNTF4X3NwaV90cmFucyhzcGksIFRYQkRBVF9PRkYgKyBsZW4pOwotCQltdXRleF91bmxvY2soJnByaXYtPnNwaV9sb2NrKTsKIAl9CiB9CiAKQEAgLTQwOCwxMyArNDA0LDkgQEAKIAkJZm9yICg7IGkgPCAoUlhCREFUX09GRiArIGxlbik7IGkrKykKIAkJCWJ1ZltpXSA9IG1jcDI1MXhfcmVhZF9yZWcoc3BpLCBSWEJDVFJMKGJ1Zl9pZHgpICsgaSk7CiAJfSBlbHNlIHsKLQkJbXV0ZXhfbG9jaygmcHJpdi0+c3BpX2xvY2spOwotCiAJCXByaXYtPnNwaV90eF9idWZbUlhCQ1RSTF9PRkZdID0gSU5TVFJVQ1RJT05fUkVBRF9SWEIoYnVmX2lkeCk7CiAJCW1jcDI1MXhfc3BpX3RyYW5zKHNwaSwgU1BJX1RSQU5TRkVSX0JVRl9MRU4pOwogCQltZW1jcHkoYnVmLCBwcml2LT5zcGlfcnhfYnVmLCBTUElfVFJBTlNGRVJfQlVGX0xFTik7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZwcml2LT5zcGlfbG9jayk7CiAJfQogfQogCkBAIC00NjcsMjEgKzQ1OSw2IEBACiAJbWNwMjUxeF93cml0ZV9yZWcoc3BpLCBDQU5DVFJMLCBDQU5DVFJMX1JFUU9QX1NMRUVQKTsKIH0KIAotc3RhdGljIHZvaWQgbWNwMjUxeF9od193YWtldXAoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKLXsKLQlzdHJ1Y3QgbWNwMjUxeF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7Ci0KLQlwcml2LT53YWtlID0gMTsKLQotCS8qIENhbiBvbmx5IHdha2UgdXAgYnkgZ2VuZXJhdGluZyBhIHdha2UtdXAgaW50ZXJydXB0LiAqLwotCW1jcDI1MXhfd3JpdGVfYml0cyhzcGksIENBTklOVEUsIENBTklOVEVfV0FLSUUsIENBTklOVEVfV0FLSUUpOwotCW1jcDI1MXhfd3JpdGVfYml0cyhzcGksIENBTklOVEYsIENBTklOVEZfV0FLSUYsIENBTklOVEZfV0FLSUYpOwotCi0JLyogV2FpdCB1bnRpbCB0aGUgZGV2aWNlIGlzIGF3YWtlICovCi0JaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJnByaXYtPmF3YWtlLCBIWikpCi0JCWRldl9lcnIoJnNwaS0+ZGV2LCAiTUNQMjUxeCBkaWRuJ3Qgd2FrZS11cFxuIik7Ci19Ci0KIHN0YXRpYyBuZXRkZXZfdHhfdCBtY3AyNTF4X2hhcmRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewpAQCAtNDkwLDE2ICs0NjcsMTEgQEAKIAogCWlmIChwcml2LT50eF9za2IgfHwgcHJpdi0+dHhfbGVuKSB7CiAJCWRldl93YXJuKCZzcGktPmRldiwgImhhcmRfeG1pdCBjYWxsZWQgd2hpbGUgdHggYnVzeVxuIik7Ci0JCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIAotCWlmIChza2ItPmxlbiAhPSBzaXplb2Yoc3RydWN0IGNhbl9mcmFtZSkpIHsKLQkJZGV2X2Vycigmc3BpLT5kZXYsICJkcm9wcGluZyBwYWNrZXQgLSBiYWQgbGVuZ3RoXG4iKTsKLQkJZGV2X2tmcmVlX3NrYihza2IpOwotCQluZXQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwlpZiAoY2FuX2Ryb3BwZWRfaW52YWxpZF9za2IobmV0LCBza2IpKQogCQlyZXR1cm4gTkVUREVWX1RYX09LOwotCX0KIAogCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKIAlwcml2LT50eF9za2IgPSBza2I7CkBAIC01MTUsMTIgKzQ4NywxMyBAQAogCiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSBDQU5fTU9ERV9TVEFSVDoKKwkJbWNwMjUxeF9jbGVhbihuZXQpOwogCQkvKiBXZSBoYXZlIHRvIGRlbGF5IHdvcmsgc2luY2UgU1BJIEkvTyBtYXkgc2xlZXAgKi8KIAkJcHJpdi0+Y2FuLnN0YXRlID0gQ0FOX1NUQVRFX0VSUk9SX0FDVElWRTsKIAkJcHJpdi0+cmVzdGFydF90eCA9IDE7CiAJCWlmIChwcml2LT5jYW4ucmVzdGFydF9tcyA9PSAwKQogCQkJcHJpdi0+YWZ0ZXJfc3VzcGVuZCA9IEFGVEVSX1NVU1BFTkRfUkVTVEFSVDsKLQkJcXVldWVfd29yayhwcml2LT53cSwgJnByaXYtPmlycV93b3JrKTsKKwkJcXVldWVfd29yayhwcml2LT53cSwgJnByaXYtPnJlc3RhcnRfd29yayk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTUyOSw3ICs1MDIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBtY3AyNTF4X3NldF9ub3JtYWxfbW9kZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQorc3RhdGljIGludCBtY3AyNTF4X3NldF9ub3JtYWxfbW9kZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQogewogCXN0cnVjdCBtY3AyNTF4X3ByaXYgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJnNwaS0+ZGV2KTsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CkBAIC01MzcsMTIgKzUxMCwxNCBAQAogCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCiAJbWNwMjUxeF93cml0ZV9yZWcoc3BpLCBDQU5JTlRFLAogCQkJICBDQU5JTlRFX0VSUklFIHwgQ0FOSU5URV9UWDJJRSB8IENBTklOVEVfVFgxSUUgfAotCQkJICBDQU5JTlRFX1RYMElFIHwgQ0FOSU5URV9SWDFJRSB8IENBTklOVEVfUlgwSUUgfAotCQkJICBDQU5JTlRGX01FUlJGKTsKKwkJCSAgQ0FOSU5URV9UWDBJRSB8IENBTklOVEVfUlgxSUUgfCBDQU5JTlRFX1JYMElFKTsKIAogCWlmIChwcml2LT5jYW4uY3RybG1vZGUgJiBDQU5fQ1RSTE1PREVfTE9PUEJBQ0spIHsKIAkJLyogUHV0IGRldmljZSBpbnRvIGxvb3BiYWNrIG1vZGUgKi8KIAkJbWNwMjUxeF93cml0ZV9yZWcoc3BpLCBDQU5DVFJMLCBDQU5DVFJMX1JFUU9QX0xPT1BCQUNLKTsKKwl9IGVsc2UgaWYgKHByaXYtPmNhbi5jdHJsbW9kZSAmIENBTl9DVFJMTU9ERV9MSVNURU5PTkxZKSB7CisJCS8qIFB1dCBkZXZpY2UgaW50byBsaXN0ZW4tb25seSBtb2RlICovCisJCW1jcDI1MXhfd3JpdGVfcmVnKHNwaSwgQ0FOQ1RSTCwgQ0FOQ1RSTF9SRVFPUF9MSVNURU5fT05MWSk7CiAJfSBlbHNlIHsKIAkJLyogUHV0IGRldmljZSBpbnRvIG5vcm1hbCBtb2RlICovCiAJCW1jcDI1MXhfd3JpdGVfcmVnKHNwaSwgQ0FOQ1RSTCwgQ0FOQ1RSTF9SRVFPUF9OT1JNQUwpOwpAQCAtNTU0LDExICs1MjksMTIgQEAKIAkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CiAJCQkJZGV2X2Vycigmc3BpLT5kZXYsICJNQ1AyNTF4IGRpZG4ndCIKIAkJCQkJIiBlbnRlciBpbiBub3JtYWwgbW9kZVxuIik7Ci0JCQkJcmV0dXJuOworCQkJCXJldHVybiAtRUJVU1k7CiAJCQl9CiAJCX0KIAl9CiAJcHJpdi0+Y2FuLnN0YXRlID0gQ0FOX1NUQVRFX0VSUk9SX0FDVElWRTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBtY3AyNTF4X2RvX3NldF9iaXR0aW1pbmcoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKQEAgLTU4OSwzMyArNTY1LDM5IEBACiB7CiAJbWNwMjUxeF9kb19zZXRfYml0dGltaW5nKG5ldCk7CiAKLQkvKiBFbmFibGUgUlgwLT5SWDEgYnVmZmVyIHJvbGwgb3ZlciBhbmQgZGlzYWJsZSBmaWx0ZXJzICovCi0JbWNwMjUxeF93cml0ZV9iaXRzKHNwaSwgUlhCQ1RSTCgwKSwKLQkJCSAgIFJYQkNUUkxfQlVLVCB8IFJYQkNUUkxfUlhNMCB8IFJYQkNUUkxfUlhNMSwKLQkJCSAgIFJYQkNUUkxfQlVLVCB8IFJYQkNUUkxfUlhNMCB8IFJYQkNUUkxfUlhNMSk7Ci0JbWNwMjUxeF93cml0ZV9iaXRzKHNwaSwgUlhCQ1RSTCgxKSwKLQkJCSAgIFJYQkNUUkxfUlhNMCB8IFJYQkNUUkxfUlhNMSwKLQkJCSAgIFJYQkNUUkxfUlhNMCB8IFJYQkNUUkxfUlhNMSk7CisJbWNwMjUxeF93cml0ZV9yZWcoc3BpLCBSWEJDVFJMKDApLAorCQkJICBSWEJDVFJMX0JVS1QgfCBSWEJDVFJMX1JYTTAgfCBSWEJDVFJMX1JYTTEpOworCW1jcDI1MXhfd3JpdGVfcmVnKHNwaSwgUlhCQ1RSTCgxKSwKKwkJCSAgUlhCQ1RSTF9SWE0wIHwgUlhCQ1RSTF9SWE0xKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbWNwMjUxeF9od19yZXNldChzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQorc3RhdGljIGludCBtY3AyNTF4X2h3X3Jlc2V0KHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IG1jcDI1MXhfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmc3BpLT5kZXYpOwogCWludCByZXQ7Ci0KLQltdXRleF9sb2NrKCZwcml2LT5zcGlfbG9jayk7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OwogCiAJcHJpdi0+c3BpX3R4X2J1ZlswXSA9IElOU1RSVUNUSU9OX1JFU0VUOwotCiAJcmV0ID0gc3BpX3dyaXRlKHNwaSwgcHJpdi0+c3BpX3R4X2J1ZiwgMSk7Ci0KLQltdXRleF91bmxvY2soJnByaXYtPnNwaV9sb2NrKTsKLQotCWlmIChyZXQpCisJaWYgKHJldCkgewogCQlkZXZfZXJyKCZzcGktPmRldiwgInJlc2V0IGZhaWxlZDogcmV0ID0gJWRcbiIsIHJldCk7CisJCXJldHVybiAtRUlPOworCX0KKwogCS8qIFdhaXQgZm9yIHJlc2V0IHRvIGZpbmlzaCAqLworCXRpbWVvdXQgPSBqaWZmaWVzICsgSFo7CiAJbWRlbGF5KDEwKTsKKwl3aGlsZSAoKG1jcDI1MXhfcmVhZF9yZWcoc3BpLCBDQU5TVEFUKSAmIENBTkNUUkxfUkVRT1BfTUFTSykKKwkgICAgICAgIT0gQ0FOQ1RSTF9SRVFPUF9DT05GKSB7CisJCXNjaGVkdWxlKCk7CisJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CisJCQlkZXZfZXJyKCZzcGktPmRldiwgIk1DUDI1MXggZGlkbid0IgorCQkJCSIgZW50ZXIgaW4gY29uZiBtb2RlIGFmdGVyIHJlc2V0XG4iKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwl9CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbWNwMjUxeF9od19wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQpAQCAtNjM5LDYzICs2MjEsMTcgQEAKIAlyZXR1cm4gKHN0MSA9PSAweDgwICYmIHN0MiA9PSAweDA3KSA/IDEgOiAwOwogfQogCi1zdGF0aWMgaXJxcmV0dXJuX3QgbWNwMjUxeF9jYW5faXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopZGV2X2lkOwotCXN0cnVjdCBtY3AyNTF4X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXQpOwotCi0JLyogU2NoZWR1bGUgYm90dG9tIGhhbGYgKi8KLQlpZiAoIXdvcmtfcGVuZGluZygmcHJpdi0+aXJxX3dvcmspKQotCQlxdWV1ZV93b3JrKHByaXYtPndxLCAmcHJpdi0+aXJxX3dvcmspOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaW50IG1jcDI1MXhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQorc3RhdGljIHZvaWQgbWNwMjUxeF9vcGVuX2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7CiAJc3RydWN0IG1jcDI1MXhfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5ldCk7CiAJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHByaXYtPnNwaTsKIAlzdHJ1Y3QgbWNwMjUxeF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JaW50IHJldDsKIAotCXJldCA9IG9wZW5fY2FuZGV2KG5ldCk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZzcGktPmRldiwgInVuYWJsZSB0byBzZXQgaW5pdGlhbCBiYXVkcmF0ZSFcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQorCWZyZWVfaXJxKHNwaS0+aXJxLCBwcml2KTsKKwltY3AyNTF4X2h3X3NsZWVwKHNwaSk7CiAJaWYgKHBkYXRhLT50cmFuc2NlaXZlcl9lbmFibGUpCi0JCXBkYXRhLT50cmFuc2NlaXZlcl9lbmFibGUoMSk7Ci0KLQlwcml2LT5mb3JjZV9xdWl0ID0gMDsKLQlwcml2LT50eF9za2IgPSBOVUxMOwotCXByaXYtPnR4X2xlbiA9IDA7Ci0KLQlyZXQgPSByZXF1ZXN0X2lycShzcGktPmlycSwgbWNwMjUxeF9jYW5faXNyLAotCQkJICBJUlFGX1RSSUdHRVJfRkFMTElORywgREVWSUNFX05BTUUsIG5ldCk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZzcGktPmRldiwgImZhaWxlZCB0byBhY3F1aXJlIGlycSAlZFxuIiwgc3BpLT5pcnEpOwotCQlpZiAocGRhdGEtPnRyYW5zY2VpdmVyX2VuYWJsZSkKLQkJCXBkYXRhLT50cmFuc2NlaXZlcl9lbmFibGUoMCk7Ci0JCWNsb3NlX2NhbmRldihuZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCW1jcDI1MXhfaHdfd2FrZXVwKHNwaSk7Ci0JbWNwMjUxeF9od19yZXNldChzcGkpOwotCXJldCA9IG1jcDI1MXhfc2V0dXAobmV0LCBwcml2LCBzcGkpOwotCWlmIChyZXQpIHsKLQkJZnJlZV9pcnEoc3BpLT5pcnEsIG5ldCk7Ci0JCW1jcDI1MXhfaHdfc2xlZXAoc3BpKTsKLQkJaWYgKHBkYXRhLT50cmFuc2NlaXZlcl9lbmFibGUpCi0JCQlwZGF0YS0+dHJhbnNjZWl2ZXJfZW5hYmxlKDApOwotCQljbG9zZV9jYW5kZXYobmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JbWNwMjUxeF9zZXRfbm9ybWFsX21vZGUoc3BpKTsKLQluZXRpZl93YWtlX3F1ZXVlKG5ldCk7Ci0KLQlyZXR1cm4gMDsKKwkJcGRhdGEtPnRyYW5zY2VpdmVyX2VuYWJsZSgwKTsKKwljbG9zZV9jYW5kZXYobmV0KTsKIH0KIAogc3RhdGljIGludCBtY3AyNTF4X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKQEAgLTcwNiwxNyArNjQyLDE5IEBACiAKIAljbG9zZV9jYW5kZXYobmV0KTsKIAorCXByaXYtPmZvcmNlX3F1aXQgPSAxOworCWZyZWVfaXJxKHNwaS0+aXJxLCBwcml2KTsKKwlkZXN0cm95X3dvcmtxdWV1ZShwcml2LT53cSk7CisJcHJpdi0+d3EgPSBOVUxMOworCisJbXV0ZXhfbG9jaygmcHJpdi0+bWNwX2xvY2spOworCiAJLyogRGlzYWJsZSBhbmQgY2xlYXIgcGVuZGluZyBpbnRlcnJ1cHRzICovCiAJbWNwMjUxeF93cml0ZV9yZWcoc3BpLCBDQU5JTlRFLCAweDAwKTsKIAltY3AyNTF4X3dyaXRlX3JlZyhzcGksIENBTklOVEYsIDB4MDApOwogCi0JcHJpdi0+Zm9yY2VfcXVpdCA9IDE7Ci0JZnJlZV9pcnEoc3BpLT5pcnEsIG5ldCk7Ci0JZmx1c2hfd29ya3F1ZXVlKHByaXYtPndxKTsKLQogCW1jcDI1MXhfd3JpdGVfcmVnKHNwaSwgVFhCQ1RSTCgwKSwgMCk7Ci0JaWYgKHByaXYtPnR4X3NrYiB8fCBwcml2LT50eF9sZW4pCi0JCW1jcDI1MXhfY2xlYW4obmV0KTsKKwltY3AyNTF4X2NsZWFuKG5ldCk7CiAKIAltY3AyNTF4X2h3X3NsZWVwKHNwaSk7CiAKQEAgLTcyNSw5ICs2NjMsMjcgQEAKIAogCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9TVE9QUEVEOwogCisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tY3BfbG9jayk7CisKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgbWNwMjUxeF9lcnJvcl9za2Ioc3RydWN0IG5ldF9kZXZpY2UgKm5ldCwgaW50IGNhbl9pZCwgaW50IGRhdGExKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGNhbl9mcmFtZSAqZnJhbWU7CisKKwlza2IgPSBhbGxvY19jYW5fZXJyX3NrYihuZXQsICZmcmFtZSk7CisJaWYgKHNrYikgeworCQlmcmFtZS0+Y2FuX2lkID0gY2FuX2lkOworCQlmcmFtZS0+ZGF0YVsxXSA9IGRhdGExOworCQluZXRpZl9yeChza2IpOworCX0gZWxzZSB7CisJCWRldl9lcnIoJm5ldC0+ZGV2LAorCQkJImNhbm5vdCBhbGxvY2F0ZSBlcnJvciBza2JcbiIpOworCX0KK30KKwogc3RhdGljIHZvaWQgbWNwMjUxeF90eF93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3cykKIHsKIAlzdHJ1Y3QgbWNwMjUxeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdzLCBzdHJ1Y3QgbWNwMjUxeF9wcml2LApAQCAtNzM2LDMzICs2OTIsMzIgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0gcHJpdi0+bmV0OwogCXN0cnVjdCBjYW5fZnJhbWUgKmZyYW1lOwogCisJbXV0ZXhfbG9jaygmcHJpdi0+bWNwX2xvY2spOwogCWlmIChwcml2LT50eF9za2IpIHsKLQkJZnJhbWUgPSAoc3RydWN0IGNhbl9mcmFtZSAqKXByaXYtPnR4X3NrYi0+ZGF0YTsKLQogCQlpZiAocHJpdi0+Y2FuLnN0YXRlID09IENBTl9TVEFURV9CVVNfT0ZGKSB7CiAJCQltY3AyNTF4X2NsZWFuKG5ldCk7Ci0JCQluZXRpZl93YWtlX3F1ZXVlKG5ldCk7Ci0JCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQlmcmFtZSA9IChzdHJ1Y3QgY2FuX2ZyYW1lICopcHJpdi0+dHhfc2tiLT5kYXRhOworCisJCQlpZiAoZnJhbWUtPmNhbl9kbGMgPiBDQU5fRlJBTUVfTUFYX0RBVEFfTEVOKQorCQkJCWZyYW1lLT5jYW5fZGxjID0gQ0FOX0ZSQU1FX01BWF9EQVRBX0xFTjsKKwkJCW1jcDI1MXhfaHdfdHgoc3BpLCBmcmFtZSwgMCk7CisJCQlwcml2LT50eF9sZW4gPSAxICsgZnJhbWUtPmNhbl9kbGM7CisJCQljYW5fcHV0X2VjaG9fc2tiKHByaXYtPnR4X3NrYiwgbmV0LCAwKTsKKwkJCXByaXYtPnR4X3NrYiA9IE5VTEw7CiAJCX0KLQkJaWYgKGZyYW1lLT5jYW5fZGxjID4gQ0FOX0ZSQU1FX01BWF9EQVRBX0xFTikKLQkJCWZyYW1lLT5jYW5fZGxjID0gQ0FOX0ZSQU1FX01BWF9EQVRBX0xFTjsKLQkJbWNwMjUxeF9od190eChzcGksIGZyYW1lLCAwKTsKLQkJcHJpdi0+dHhfbGVuID0gMSArIGZyYW1lLT5jYW5fZGxjOwotCQljYW5fcHV0X2VjaG9fc2tiKHByaXYtPnR4X3NrYiwgbmV0LCAwKTsKLQkJcHJpdi0+dHhfc2tiID0gTlVMTDsKIAl9CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tY3BfbG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIG1jcDI1MXhfaXJxX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKQorc3RhdGljIHZvaWQgbWNwMjUxeF9yZXN0YXJ0X3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndzKQogewogCXN0cnVjdCBtY3AyNTF4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod3MsIHN0cnVjdCBtY3AyNTF4X3ByaXYsCi0JCQkJCQkgaXJxX3dvcmspOworCQkJCQkJIHJlc3RhcnRfd29yayk7CiAJc3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHByaXYtPnNwaTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0gcHJpdi0+bmV0OwotCXU4IHR4Ym5jdHJsOwotCXU4IGludGY7Ci0JZW51bSBjYW5fc3RhdGUgbmV3X3N0YXRlOwogCisJbXV0ZXhfbG9jaygmcHJpdi0+bWNwX2xvY2spOwogCWlmIChwcml2LT5hZnRlcl9zdXNwZW5kKSB7CiAJCW1kZWxheSgxMCk7CiAJCW1jcDI1MXhfaHdfcmVzZXQoc3BpKTsKQEAgLTc3MSw0NSArNzI2LDU0IEBACiAJCQltY3AyNTF4X3NldF9ub3JtYWxfbW9kZShzcGkpOwogCQl9IGVsc2UgaWYgKHByaXYtPmFmdGVyX3N1c3BlbmQgJiBBRlRFUl9TVVNQRU5EX1VQKSB7CiAJCQluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldCk7Ci0JCQkvKiBDbGVhbiBzaW5jZSB3ZSBsb3N0IHR4IGJ1ZmZlciAqLwotCQkJaWYgKHByaXYtPnR4X3NrYiB8fCBwcml2LT50eF9sZW4pIHsKLQkJCQltY3AyNTF4X2NsZWFuKG5ldCk7Ci0JCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXQpOwotCQkJfQorCQkJbWNwMjUxeF9jbGVhbihuZXQpOwogCQkJbWNwMjUxeF9zZXRfbm9ybWFsX21vZGUoc3BpKTsKKwkJCW5ldGlmX3dha2VfcXVldWUobmV0KTsKIAkJfSBlbHNlIHsKIAkJCW1jcDI1MXhfaHdfc2xlZXAoc3BpKTsKIAkJfQogCQlwcml2LT5hZnRlcl9zdXNwZW5kID0gMDsKKwkJcHJpdi0+Zm9yY2VfcXVpdCA9IDA7CiAJfQogCi0JaWYgKHByaXYtPmNhbi5yZXN0YXJ0X21zID09IDAgJiYgcHJpdi0+Y2FuLnN0YXRlID09IENBTl9TVEFURV9CVVNfT0ZGKQotCQlyZXR1cm47CisJaWYgKHByaXYtPnJlc3RhcnRfdHgpIHsKKwkJcHJpdi0+cmVzdGFydF90eCA9IDA7CisJCW1jcDI1MXhfd3JpdGVfcmVnKHNwaSwgVFhCQ1RSTCgwKSwgMCk7CisJCW1jcDI1MXhfY2xlYW4obmV0KTsKKwkJbmV0aWZfd2FrZV9xdWV1ZShuZXQpOworCQltY3AyNTF4X2Vycm9yX3NrYihuZXQsIENBTl9FUlJfUkVTVEFSVEVELCAwKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tY3BfbG9jayk7Cit9CiAKLQl3aGlsZSAoIXByaXYtPmZvcmNlX3F1aXQgJiYgIWZyZWV6aW5nKGN1cnJlbnQpKSB7Ci0JCXU4IGVmbGFnID0gbWNwMjUxeF9yZWFkX3JlZyhzcGksIEVGTEcpOworc3RhdGljIGlycXJldHVybl90IG1jcDI1MXhfY2FuX2lzdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IG1jcDI1MXhfcHJpdiAqcHJpdiA9IGRldl9pZDsKKwlzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gcHJpdi0+c3BpOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXQgPSBwcml2LT5uZXQ7CisKKwltdXRleF9sb2NrKCZwcml2LT5tY3BfbG9jayk7CisJd2hpbGUgKCFwcml2LT5mb3JjZV9xdWl0KSB7CisJCWVudW0gY2FuX3N0YXRlIG5ld19zdGF0ZTsKKwkJdTggaW50ZiA9IG1jcDI1MXhfcmVhZF9yZWcoc3BpLCBDQU5JTlRGKTsKKwkJdTggZWZsYWc7CiAJCWludCBjYW5faWQgPSAwLCBkYXRhMSA9IDA7CiAKLQkJbWNwMjUxeF93cml0ZV9yZWcoc3BpLCBFRkxHLCAweDAwKTsKLQotCQlpZiAocHJpdi0+cmVzdGFydF90eCkgewotCQkJcHJpdi0+cmVzdGFydF90eCA9IDA7Ci0JCQltY3AyNTF4X3dyaXRlX3JlZyhzcGksIFRYQkNUUkwoMCksIDApOwotCQkJaWYgKHByaXYtPnR4X3NrYiB8fCBwcml2LT50eF9sZW4pCi0JCQkJbWNwMjUxeF9jbGVhbihuZXQpOwotCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXQpOwotCQkJY2FuX2lkIHw9IENBTl9FUlJfUkVTVEFSVEVEOworCQlpZiAoaW50ZiAmIENBTklOVEZfUlgwSUYpIHsKKwkJCW1jcDI1MXhfaHdfcngoc3BpLCAwKTsKKwkJCS8qIEZyZWUgb25lIGJ1ZmZlciBBU0FQICovCisJCQltY3AyNTF4X3dyaXRlX2JpdHMoc3BpLCBDQU5JTlRGLCBpbnRmICYgQ0FOSU5URl9SWDBJRiwKKwkJCQkJICAgMHgwMCk7CiAJCX0KIAotCQlpZiAocHJpdi0+d2FrZSkgewotCQkJLyogV2FpdCB3aGlsc3QgdGhlIGRldmljZSB3YWtlcyB1cCAqLwotCQkJbWRlbGF5KDEwKTsKLQkJCXByaXYtPndha2UgPSAwOwotCQl9CisJCWlmIChpbnRmICYgQ0FOSU5URl9SWDFJRikKKwkJCW1jcDI1MXhfaHdfcngoc3BpLCAxKTsKIAotCQlpbnRmID0gbWNwMjUxeF9yZWFkX3JlZyhzcGksIENBTklOVEYpOwogCQltY3AyNTF4X3dyaXRlX2JpdHMoc3BpLCBDQU5JTlRGLCBpbnRmLCAweDAwKTsKIAorCQllZmxhZyA9IG1jcDI1MXhfcmVhZF9yZWcoc3BpLCBFRkxHKTsKKwkJbWNwMjUxeF93cml0ZV9yZWcoc3BpLCBFRkxHLCAweDAwKTsKKwogCQkvKiBVcGRhdGUgY2FuIHN0YXRlICovCiAJCWlmIChlZmxhZyAmIEVGTEdfVFhCTykgewogCQkJbmV3X3N0YXRlID0gQ0FOX1NUQVRFX0JVU19PRkY7CkBAIC04NTAsNTkgKzgxNCwzMSBAQAogCQl9CiAJCXByaXYtPmNhbi5zdGF0ZSA9IG5ld19zdGF0ZTsKIAotCQlpZiAoKGludGYgJiBDQU5JTlRGX0VSUklGKSB8fCAoY2FuX2lkICYgQ0FOX0VSUl9SRVNUQVJURUQpKSB7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCQkJc3RydWN0IGNhbl9mcmFtZSAqZnJhbWU7Ci0KLQkJCS8qIENyZWF0ZSBlcnJvciBmcmFtZSAqLwotCQkJc2tiID0gYWxsb2NfY2FuX2Vycl9za2IobmV0LCAmZnJhbWUpOwotCQkJaWYgKHNrYikgewotCQkJCS8qIFNldCBlcnJvciBmcmFtZSBmbGFncyBiYXNlZCBvbiBidXMgc3RhdGUgKi8KLQkJCQlmcmFtZS0+Y2FuX2lkID0gY2FuX2lkOwotCQkJCWZyYW1lLT5kYXRhWzFdID0gZGF0YTE7Ci0KLQkJCQkvKiBVcGRhdGUgbmV0IHN0YXRzIGZvciBvdmVyZmxvd3MgKi8KLQkJCQlpZiAoZWZsYWcgJiAoRUZMR19SWDBPVlIgfCBFRkxHX1JYMU9WUikpIHsKLQkJCQkJaWYgKGVmbGFnICYgRUZMR19SWDBPVlIpCi0JCQkJCQluZXQtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7Ci0JCQkJCWlmIChlZmxhZyAmIEVGTEdfUlgxT1ZSKQotCQkJCQkJbmV0LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwotCQkJCQlmcmFtZS0+Y2FuX2lkIHw9IENBTl9FUlJfQ1JUTDsKLQkJCQkJZnJhbWUtPmRhdGFbMV0gfD0KLQkJCQkJCUNBTl9FUlJfQ1JUTF9SWF9PVkVSRkxPVzsKLQkJCQl9Ci0KLQkJCQluZXRpZl9yeChza2IpOwotCQkJfSBlbHNlIHsKLQkJCQlkZXZfaW5mbygmc3BpLT5kZXYsCi0JCQkJCSAiY2Fubm90IGFsbG9jYXRlIGVycm9yIHNrYlxuIik7CisJCWlmIChpbnRmICYgQ0FOSU5URl9FUlJJRikgeworCQkJLyogSGFuZGxlIG92ZXJmbG93IGNvdW50ZXJzICovCisJCQlpZiAoZWZsYWcgJiAoRUZMR19SWDBPVlIgfCBFRkxHX1JYMU9WUikpIHsKKwkJCQlpZiAoZWZsYWcgJiBFRkxHX1JYME9WUikKKwkJCQkJbmV0LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQkJCWlmIChlZmxhZyAmIEVGTEdfUlgxT1ZSKQorCQkJCQluZXQtPnN0YXRzLnJ4X292ZXJfZXJyb3JzKys7CisJCQkJY2FuX2lkIHw9IENBTl9FUlJfQ1JUTDsKKwkJCQlkYXRhMSB8PSBDQU5fRVJSX0NSVExfUlhfT1ZFUkZMT1c7CiAJCQl9CisJCQltY3AyNTF4X2Vycm9yX3NrYihuZXQsIGNhbl9pZCwgZGF0YTEpOwogCQl9CiAKIAkJaWYgKHByaXYtPmNhbi5zdGF0ZSA9PSBDQU5fU1RBVEVfQlVTX09GRikgewogCQkJaWYgKHByaXYtPmNhbi5yZXN0YXJ0X21zID09IDApIHsKKwkJCQlwcml2LT5mb3JjZV9xdWl0ID0gMTsKIAkJCQljYW5fYnVzX29mZihuZXQpOwogCQkJCW1jcDI1MXhfaHdfc2xlZXAoc3BpKTsKLQkJCQlyZXR1cm47CisJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAogCQlpZiAoaW50ZiA9PSAwKQogCQkJYnJlYWs7CiAKLQkJaWYgKGludGYgJiBDQU5JTlRGX1dBS0lGKQotCQkJY29tcGxldGUoJnByaXYtPmF3YWtlKTsKLQotCQlpZiAoaW50ZiAmIENBTklOVEZfTUVSUkYpIHsKLQkJCS8qIElmIHRoZXJlIGFyZSBwZW5kaW5nIFR4IGJ1ZmZlcnMsIHJlc3RhcnQgcXVldWUgKi8KLQkJCXR4Ym5jdHJsID0gbWNwMjUxeF9yZWFkX3JlZyhzcGksIFRYQkNUUkwoMCkpOwotCQkJaWYgKCEodHhibmN0cmwgJiBUWEJDVFJMX1RYUkVRKSkgewotCQkJCWlmIChwcml2LT50eF9za2IgfHwgcHJpdi0+dHhfbGVuKQotCQkJCQltY3AyNTF4X2NsZWFuKG5ldCk7Ci0JCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXQpOwotCQkJfQotCQl9Ci0KIAkJaWYgKGludGYgJiAoQ0FOSU5URl9UWDJJRiB8IENBTklOVEZfVFgxSUYgfCBDQU5JTlRGX1RYMElGKSkgewogCQkJbmV0LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCQluZXQtPnN0YXRzLnR4X2J5dGVzICs9IHByaXYtPnR4X2xlbiAtIDE7CkBAIC05MTMsMTIgKzg0OSw2NiBAQAogCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXQpOwogCQl9CiAKLQkJaWYgKGludGYgJiBDQU5JTlRGX1JYMElGKQotCQkJbWNwMjUxeF9od19yeChzcGksIDApOwotCi0JCWlmIChpbnRmICYgQ0FOSU5URl9SWDFJRikKLQkJCW1jcDI1MXhfaHdfcngoc3BpLCAxKTsKIAl9CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tY3BfbG9jayk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IG1jcDI1MXhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCBtY3AyNTF4X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZXQpOworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGkgPSBwcml2LT5zcGk7CisJc3RydWN0IG1jcDI1MXhfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBzcGktPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCByZXQ7CisKKwlyZXQgPSBvcGVuX2NhbmRldihuZXQpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJ1bmFibGUgdG8gc2V0IGluaXRpYWwgYmF1ZHJhdGUhXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltdXRleF9sb2NrKCZwcml2LT5tY3BfbG9jayk7CisJaWYgKHBkYXRhLT50cmFuc2NlaXZlcl9lbmFibGUpCisJCXBkYXRhLT50cmFuc2NlaXZlcl9lbmFibGUoMSk7CisKKwlwcml2LT5mb3JjZV9xdWl0ID0gMDsKKwlwcml2LT50eF9za2IgPSBOVUxMOworCXByaXYtPnR4X2xlbiA9IDA7CisKKwlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShzcGktPmlycSwgTlVMTCwgbWNwMjUxeF9jYW5faXN0LAorCQkJICBJUlFGX1RSSUdHRVJfRkFMTElORywgREVWSUNFX05BTUUsIHByaXYpOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJmYWlsZWQgdG8gYWNxdWlyZSBpcnEgJWRcbiIsIHNwaS0+aXJxKTsKKwkJaWYgKHBkYXRhLT50cmFuc2NlaXZlcl9lbmFibGUpCisJCQlwZGF0YS0+dHJhbnNjZWl2ZXJfZW5hYmxlKDApOworCQljbG9zZV9jYW5kZXYobmV0KTsKKwkJZ290byBvcGVuX3VubG9jazsKKwl9CisKKwlwcml2LT53cSA9IGNyZWF0ZV9mcmVlemVhYmxlX3dvcmtxdWV1ZSgibWNwMjUxeF93cSIpOworCUlOSVRfV09SSygmcHJpdi0+dHhfd29yaywgbWNwMjUxeF90eF93b3JrX2hhbmRsZXIpOworCUlOSVRfV09SSygmcHJpdi0+cmVzdGFydF93b3JrLCBtY3AyNTF4X3Jlc3RhcnRfd29ya19oYW5kbGVyKTsKKworCXJldCA9IG1jcDI1MXhfaHdfcmVzZXQoc3BpKTsKKwlpZiAocmV0KSB7CisJCW1jcDI1MXhfb3Blbl9jbGVhbihuZXQpOworCQlnb3RvIG9wZW5fdW5sb2NrOworCX0KKwlyZXQgPSBtY3AyNTF4X3NldHVwKG5ldCwgcHJpdiwgc3BpKTsKKwlpZiAocmV0KSB7CisJCW1jcDI1MXhfb3Blbl9jbGVhbihuZXQpOworCQlnb3RvIG9wZW5fdW5sb2NrOworCX0KKwlyZXQgPSBtY3AyNTF4X3NldF9ub3JtYWxfbW9kZShzcGkpOworCWlmIChyZXQpIHsKKwkJbWNwMjUxeF9vcGVuX2NsZWFuKG5ldCk7CisJCWdvdG8gb3Blbl91bmxvY2s7CisJfQorCW5ldGlmX3dha2VfcXVldWUobmV0KTsKKworb3Blbl91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tY3BfbG9jayk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtY3AyNTF4X25ldGRldl9vcHMgPSB7CkBAIC05NTIsMTEgKzk0MiwxMyBAQAogCXByaXYtPmNhbi5iaXR0aW1pbmdfY29uc3QgPSAmbWNwMjUxeF9iaXR0aW1pbmdfY29uc3Q7CiAJcHJpdi0+Y2FuLmRvX3NldF9tb2RlID0gbWNwMjUxeF9kb19zZXRfbW9kZTsKIAlwcml2LT5jYW4uY2xvY2suZnJlcSA9IHBkYXRhLT5vc2NpbGxhdG9yX2ZyZXF1ZW5jeSAvIDI7CisJcHJpdi0+Y2FuLmN0cmxtb2RlX3N1cHBvcnRlZCA9IENBTl9DVFJMTU9ERV8zX1NBTVBMRVMgfAorCQlDQU5fQ1RSTE1PREVfTE9PUEJBQ0sgfCBDQU5fQ1RSTE1PREVfTElTVEVOT05MWTsKIAlwcml2LT5uZXQgPSBuZXQ7CiAJZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgcHJpdik7CiAKIAlwcml2LT5zcGkgPSBzcGk7Ci0JbXV0ZXhfaW5pdCgmcHJpdi0+c3BpX2xvY2spOworCW11dGV4X2luaXQoJnByaXYtPm1jcF9sb2NrKTsKIAogCS8qIElmIHJlcXVlc3RlZCwgYWxsb2NhdGUgRE1BIGJ1ZmZlcnMgKi8KIAlpZiAobWNwMjUxeF9lbmFibGVfZG1hKSB7CkBAIC0xMDA1LDE4ICs5OTcsMTIgQEAKIAogCVNFVF9ORVRERVZfREVWKG5ldCwgJnNwaS0+ZGV2KTsKIAotCXByaXYtPndxID0gY3JlYXRlX2ZyZWV6ZWFibGVfd29ya3F1ZXVlKCJtY3AyNTF4X3dxIik7Ci0KLQlJTklUX1dPUksoJnByaXYtPnR4X3dvcmssIG1jcDI1MXhfdHhfd29ya19oYW5kbGVyKTsKLQlJTklUX1dPUksoJnByaXYtPmlycV93b3JrLCBtY3AyNTF4X2lycV93b3JrX2hhbmRsZXIpOwotCi0JaW5pdF9jb21wbGV0aW9uKCZwcml2LT5hd2FrZSk7Ci0KIAkvKiBDb25maWd1cmUgdGhlIFNQSSBidXMgKi8KIAlzcGktPm1vZGUgPSBTUElfTU9ERV8wOwogCXNwaS0+Yml0c19wZXJfd29yZCA9IDg7CiAJc3BpX3NldHVwKHNwaSk7CiAKKwkvKiBIZXJlIGlzIE9LIHRvIG5vdCBsb2NrIHRoZSBNQ1AsIG5vIG9uZSBrbm93cyBhYm91dCBpdCB5ZXQgKi8KIAlpZiAoIW1jcDI1MXhfaHdfcHJvYmUoc3BpKSkgewogCQlkZXZfaW5mbygmc3BpLT5kZXYsICJQcm9iZSBmYWlsZWRcbiIpOwogCQlnb3RvIGVycm9yX3Byb2JlOwpAQCAtMTA1OSwxMCArMTA0NSw2IEBACiAJdW5yZWdpc3Rlcl9jYW5kZXYobmV0KTsKIAlmcmVlX2NhbmRldihuZXQpOwogCi0JcHJpdi0+Zm9yY2VfcXVpdCA9IDE7Ci0JZmx1c2hfd29ya3F1ZXVlKHByaXYtPndxKTsKLQlkZXN0cm95X3dvcmtxdWV1ZShwcml2LT53cSk7Ci0KIAlpZiAobWNwMjUxeF9lbmFibGVfZG1hKSB7CiAJCWRtYV9mcmVlX2NvaGVyZW50KCZzcGktPmRldiwgUEFHRV9TSVpFLAogCQkJCSAgcHJpdi0+c3BpX3R4X2J1ZiwgcHJpdi0+c3BpX3R4X2RtYSk7CkBAIC0xMDg0LDYgKzEwNjYsMTIgQEAKIAlzdHJ1Y3QgbWNwMjUxeF9wcml2ICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldCA9IHByaXYtPm5ldDsKIAorCXByaXYtPmZvcmNlX3F1aXQgPSAxOworCWRpc2FibGVfaXJxKHNwaS0+aXJxKTsKKwkvKgorCSAqIE5vdGU6IGF0IHRoaXMgcG9pbnQgbmVpdGhlciBJU1Qgbm9yIHdvcmtxdWV1ZXMgYXJlIHJ1bm5pbmcuCisJICogb3Blbi9zdG9wIGNhbm5vdCBiZSBjYWxsZWQgYW55d2F5IHNvIGxvY2tpbmcgaXMgbm90IG5lZWRlZAorCSAqLwogCWlmIChuZXRpZl9ydW5uaW5nKG5ldCkpIHsKIAkJbmV0aWZfZGV2aWNlX2RldGFjaChuZXQpOwogCkBAIC0xMTEwLDE2ICsxMDk4LDE4IEBACiAKIAlpZiAocHJpdi0+YWZ0ZXJfc3VzcGVuZCAmIEFGVEVSX1NVU1BFTkRfUE9XRVIpIHsKIAkJcGRhdGEtPnBvd2VyX2VuYWJsZSgxKTsKLQkJcXVldWVfd29yayhwcml2LT53cSwgJnByaXYtPmlycV93b3JrKTsKKwkJcXVldWVfd29yayhwcml2LT53cSwgJnByaXYtPnJlc3RhcnRfd29yayk7CiAJfSBlbHNlIHsKIAkJaWYgKHByaXYtPmFmdGVyX3N1c3BlbmQgJiBBRlRFUl9TVVNQRU5EX1VQKSB7CiAJCQlpZiAocGRhdGEtPnRyYW5zY2VpdmVyX2VuYWJsZSkKIAkJCQlwZGF0YS0+dHJhbnNjZWl2ZXJfZW5hYmxlKDEpOwotCQkJcXVldWVfd29yayhwcml2LT53cSwgJnByaXYtPmlycV93b3JrKTsKKwkJCXF1ZXVlX3dvcmsocHJpdi0+d3EsICZwcml2LT5yZXN0YXJ0X3dvcmspOwogCQl9IGVsc2UgewogCQkJcHJpdi0+YWZ0ZXJfc3VzcGVuZCA9IDA7CiAJCX0KIAl9CisJcHJpdi0+Zm9yY2VfcXVpdCA9IDA7CisJZW5hYmxlX2lycShzcGktPmlycSk7CiAJcmV0dXJuIDA7CiB9CiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL21zY2FuL0tjb25maWcgYi9kcml2ZXJzL25ldC9jYW4vbXNjYW4vS2NvbmZpZwppbmRleCBjZDBmMmQ2Li4yN2QxZDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vbXNjYW4vS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9jYW4vbXNjYW4vS2NvbmZpZwpAQCAtMTEsMTIgKzExLDEzIEBACiAKIGNvbmZpZyBDQU5fTVBDNVhYWAogCXRyaXN0YXRlICJGcmVlc2NhbGUgTVBDNXh4eCBvbmJvYXJkIENBTiBjb250cm9sbGVyIgotCWRlcGVuZHMgb24gUFBDX01QQzUyeHgKKwlkZXBlbmRzIG9uIChQUENfTVBDNTJ4eCB8fCBQUENfTVBDNTEyeCkKIAktLS1oZWxwLS0tCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgRnJlZXNjYWxlJ3MgTVBDNXh4eAotCSAgb25ib2FyZCBDQU4gY29udHJvbGxlci4KKwkgIG9uYm9hcmQgQ0FOIGNvbnRyb2xsZXIuIEN1cnJlbnRseSwgdGhlIE1QQzUyMDAsIE1QQzUyMDBCIGFuZAorCSAgTVBDNTEyMSAoUmV2LiAyIGFuZCBsYXRlcikgYXJlIHN1cHBvcnRlZC4KIAotCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBtc2Nhbi1tcGM1eHh4LmtvLgogCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL21zY2FuL21wYzV4eHhfY2FuLmMgYi9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXBjNXh4eF9jYW4uYwppbmRleCAxZGU2ZjYzLi4wM2U3YzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXBjNXh4eF9jYW4uYworKysgYi9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXBjNXh4eF9jYW4uYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Nhbi9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgogI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vbXBjNTJ4eC5oPgogCkBAIC0zNiwyMiArMzcsMjEgQEAKIAogI2RlZmluZSBEUlZfTkFNRSAibXBjNXh4eF9jYW4iCiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzUyeHhfY2RtX2lkc1tdIF9fZGV2aW5pdGRhdGEgPSB7CitzdHJ1Y3QgbXBjNXh4eF9jYW5fZGF0YSB7CisJdW5zaWduZWQgaW50IHR5cGU7CisJdTMyICgqZ2V0X2Nsb2NrKShzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwgY29uc3QgY2hhciAqY2xvY2tfbmFtZSwKKwkJCSBpbnQgKm1zY2FuX2Nsa3NyYyk7Cit9OworCisjaWZkZWYgQ09ORklHX1BQQ19NUEM1Mnh4CitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2RldmluaXRkYXRhIG1wYzUyeHhfY2RtX2lkc1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtY2RtIiwgfSwKIAl7fQogfTsKIAotLyoKLSAqIEdldCBmcmVxdWVuY3kgb2YgdGhlIE1TQ0FOIGNsb2NrIHNvdXJjZQotICoKLSAqIEVpdGhlciB0aGUgb3NjaWxsYXRvciBjbG9jayAoU1lTX1hUQUxfSU4pIG9yIHRoZSBJUCBidXMgY2xvY2sgKElQX0NMSykKLSAqIGNhbiBiZSBzZWxlY3RlZC4gQWNjb3JkaW5nIHRvIHRoZSBNUEM1MjAwIHVzZXIncyBtYW51YWwsIHRoZSBvc2NpbGxhdG9yCi0gKiBjbG9jayBpcyB0aGUgYmV0dGVyIGNob2ljZSBhcyBpdCBoYXMgbGVzcyBqaXR0ZXIgYnV0IGR1ZSB0byBhIGhhcmR3YXJlCi0gKiBidWcsIGl0IGNhbiBub3QgYmUgc2VsZWN0ZWQgZm9yIHRoZSBvbGQgTVBDNTIwMCBSZXYuIEEgY2hpcHMuCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCAgX19kZXZpbml0IG1wYzUyeHhfY2FuX2Nsb2NrX2ZyZXEoc3RydWN0IG9mX2RldmljZSAqb2YsCi0JCQkJCQkgICAgICBpbnQgY2xvY2tfc3JjKQorc3RhdGljIHUzMiBfX2RldmluaXQgbXBjNTJ4eF9jYW5fZ2V0X2Nsb2NrKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAorCQkJCQkgICBjb25zdCBjaGFyICpjbG9ja19uYW1lLAorCQkJCQkgICBpbnQgKm1zY2FuX2Nsa3NyYykKIHsKIAl1bnNpZ25lZCBpbnQgcHZyOwogCXN0cnVjdCBtcGM1Mnh4X2NkbSAgX19pb21lbSAqY2RtOwpAQCAtNjEsMjEgKzYxLDMzIEBACiAKIAlwdnIgPSBtZnNwcihTUFJOX1BWUik7CiAKLQlmcmVxID0gbXBjNXh4eF9nZXRfYnVzX2ZyZXF1ZW5jeShvZi0+bm9kZSk7CisJLyoKKwkgKiBFaXRoZXIgdGhlIG9zY2lsbGF0b3IgY2xvY2sgKFNZU19YVEFMX0lOKSBvciB0aGUgSVAgYnVzIGNsb2NrCisJICogKElQX0NMSykgY2FuIGJlIHNlbGVjdGVkIGFzIE1TQ0FOIGNsb2NrIHNvdXJjZS4gQWNjb3JkaW5nIHRvCisJICogdGhlIE1QQzUyMDAgdXNlcidzIG1hbnVhbCwgdGhlIG9zY2lsbGF0b3IgY2xvY2sgaXMgdGhlIGJldHRlcgorCSAqIGNob2ljZSBhcyBpdCBoYXMgbGVzcyBqaXR0ZXIuIEZvciB0aGlzIHJlYXNvbiwgaXQgaXMgc2VsZWN0ZWQKKwkgKiBieSBkZWZhdWx0LiBVbmZvcnR1bmF0ZWx5LCBpdCBjYW4gbm90IGJlIHNlbGVjdGVkIGZvciB0aGUgb2xkCisJICogTVBDNTIwMCBSZXYuIEEgY2hpcHMgZHVlIHRvIGEgaGFyZHdhcmUgYnVnIChjaGVjayBlcnJhdGEpLgorCSAqLworCWlmIChjbG9ja19uYW1lICYmIHN0cmNtcChjbG9ja19uYW1lLCAiaXAiKSA9PSAwKQorCQkqbXNjYW5fY2xrc3JjID0gTVNDQU5fQ0xLU1JDX0JVUzsKKwllbHNlCisJCSptc2Nhbl9jbGtzcmMgPSBNU0NBTl9DTEtTUkNfWFRBTDsKKworCWZyZXEgPSBtcGM1eHh4X2dldF9idXNfZnJlcXVlbmN5KG9mZGV2LT5ub2RlKTsKIAlpZiAoIWZyZXEpCiAJCXJldHVybiAwOwogCi0JaWYgKGNsb2NrX3NyYyA9PSBNU0NBTl9DTEtTUkNfQlVTIHx8IHB2ciA9PSAweDgwODIyMDExKQorCWlmICgqbXNjYW5fY2xrc3JjID09IE1TQ0FOX0NMS1NSQ19CVVMgfHwgcHZyID09IDB4ODA4MjIwMTEpCiAJCXJldHVybiBmcmVxOwogCiAJLyogRGV0ZXJtaW5lIFNZU19YVEFMX0lOIGZyZXF1ZW5jeSBmcm9tIHRoZSBjbG9jayBkb21haW4gc2V0dGluZ3MgKi8KIAlucF9jZG0gPSBvZl9maW5kX21hdGNoaW5nX25vZGUoTlVMTCwgbXBjNTJ4eF9jZG1faWRzKTsKIAlpZiAoIW5wX2NkbSkgewotCQlkZXZfZXJyKCZvZi0+ZGV2LCAiY2FuJ3QgZ2V0IGNsb2NrIG5vZGUhXG4iKTsKKwkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImNhbid0IGdldCBjbG9jayBub2RlIVxuIik7CiAJCXJldHVybiAwOwogCX0KIAljZG0gPSBvZl9pb21hcChucF9jZG0sIDApOwotCW9mX25vZGVfcHV0KG5wX2NkbSk7CiAKIAlpZiAoaW5fOCgmY2RtLT5pcGJfY2xrX3NlbCkgJiAweDEpCiAJCWZyZXEgKj0gMjsKQEAgLTg0LDI2ICs5NiwxNzQgQEAKIAlmcmVxICo9ICh2YWwgJiAoMSA8PCA1KSkgPyA4IDogNDsKIAlmcmVxIC89ICh2YWwgJiAoMSA8PCA2KSkgPyAxMiA6IDE2OwogCisJb2Zfbm9kZV9wdXQobnBfY2RtKTsKIAlpb3VubWFwKGNkbSk7CiAKIAlyZXR1cm4gZnJlcTsKIH0KKyNlbHNlIC8qICFDT05GSUdfUFBDX01QQzUyeHggKi8KK3N0YXRpYyB1MzIgX19kZXZpbml0IG1wYzUyeHhfY2FuX2dldF9jbG9jayhzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKKwkJCQkJICAgY29uc3QgY2hhciAqY2xvY2tfbmFtZSwKKwkJCQkJICAgaW50ICptc2Nhbl9jbGtzcmMpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1BQQ19NUEM1Mnh4ICovCisKKyNpZmRlZiBDT05GSUdfUFBDX01QQzUxMngKK3N0cnVjdCBtcGM1MTJ4X2Nsb2NrY3RsIHsKKwl1MzIgc3BtcjsJCS8qIFN5c3RlbSBQTEwgTW9kZSBSZWcgKi8KKwl1MzIgc2NjclsyXTsJCS8qIFN5c3RlbSBDbGsgQ3RybCBSZWcgMSAmIDIgKi8KKwl1MzIgc2NmcjE7CQkvKiBTeXN0ZW0gQ2xrIEZyZXEgUmVnIDEgKi8KKwl1MzIgc2NmcjI7CQkvKiBTeXN0ZW0gQ2xrIEZyZXEgUmVnIDIgKi8KKwl1MzIgcmVzZXJ2ZWQ7CisJdTMyIGJjcjsJCS8qIEJyZWFkIENydW1iIFJlZyAqLworCXUzMiBwY2NyWzEyXTsJCS8qIFBTQyBDbGsgQ3RybCBSZWcgMC0xMSAqLworCXUzMiBzcGNjcjsJCS8qIFNQRElGIENsayBDdHJsIFJlZyAqLworCXUzMiBjY2NyOwkJLyogQ0ZNIENsayBDdHJsIFJlZyAqLworCXUzMiBkY2NyOwkJLyogRElVIENsayBDbmZnIFJlZyAqLworCXUzMiBtY2NyWzRdOwkJLyogTVNDQU4gQ2xrIEN0cmwgUmVnIDEtMyAqLworfTsKKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19kZXZpbml0ZGF0YSBtcGM1MTJ4X2Nsb2NrX2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtY2xvY2siLCB9LAorCXt9Cit9OworCitzdGF0aWMgdTMyIF9fZGV2aW5pdCBtcGM1MTJ4X2Nhbl9nZXRfY2xvY2soc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsCisJCQkJCSAgIGNvbnN0IGNoYXIgKmNsb2NrX25hbWUsCisJCQkJCSAgIGludCAqbXNjYW5fY2xrc3JjKQoreworCXN0cnVjdCBtcGM1MTJ4X2Nsb2NrY3RsIF9faW9tZW0gKmNsb2NrY3RsOworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnBfY2xvY2s7CisJc3RydWN0IGNsayAqc3lzX2NsaywgKnJlZl9jbGs7CisJaW50IHBsZW4sIGNsb2NraWR4LCBjbG9ja3NyYyA9IC0xOworCXUzMiBzeXNfZnJlcSwgdmFsLCBjbG9ja2RpdiA9IDEsIGZyZXEgPSAwOworCWNvbnN0IHUzMiAqcHZhbDsKKworCW5wX2Nsb2NrID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKE5VTEwsIG1wYzUxMnhfY2xvY2tfaWRzKTsKKwlpZiAoIW5wX2Nsb2NrKSB7CisJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJjb3VsZG4ndCBmaW5kIGNsb2NrIG5vZGVcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJY2xvY2tjdGwgPSBvZl9pb21hcChucF9jbG9jaywgMCk7CisJaWYgKCFjbG9ja2N0bCkgeworCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAiY291bGRuJ3QgbWFwIGNsb2NrIHJlZ2lzdGVyc1xuIik7CisJCXJldHVybiAwOworCX0KKworCS8qIERldGVybWluZSB0aGUgTVNDQU4gZGV2aWNlIGluZGV4IGZyb20gdGhlIHBoeXNpY2FsIGFkZHJlc3MgKi8KKwlwdmFsID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5ub2RlLCAicmVnIiwgJnBsZW4pOworCUJVR19PTighcHZhbCB8fCBwbGVuIDwgc2l6ZW9mKCpwdmFsKSk7CisJY2xvY2tpZHggPSAoKnB2YWwgJiAweDgwKSA/IDEgOiAwOworCWlmICgqcHZhbCAmIDB4MjAwMCkKKwkJY2xvY2tpZHggKz0gMjsKKworCS8qCisJICogQ2xvY2sgc291cmNlIGFuZCBkaXZpZGVyIHNlbGVjdGlvbjogMyBkaWZmZXJlbnQgY2xvY2sgc291cmNlcworCSAqIGNhbiBiZSBzZWxlY3RlZDogImlwIiwgInJlZiIgb3IgInN5cyIuIEZvciB0aGUgbGF0dGVyIHR3bywgYQorCSAqIGNsb2NrIGRpdmlkZXIgY2FuIGJlIGRlZmluZWQgYXMgd2VsbC4gSWYgdGhlIGNsb2NrIHNvdXJjZSBpcworCSAqIG5vdCBzcGVjaWZpZWQgYnkgdGhlIGRldmljZSB0cmVlLCB3ZSBmaXJzdCB0cnkgdG8gZmluZCBhbgorCSAqIG9wdGltYWwgQ0FOIHNvdXJjZSBjbG9jayBiYXNlZCBvbiB0aGUgc3lzdGVtIGNsb2NrLiBJZiB0aGF0CisJICogaXMgbm90IHBvc3NsaWJsZSwgdGhlIHJlZmVyZW5jZSBjbG9jayB3aWxsIGJlIHVzZWQuCisJICovCisJaWYgKGNsb2NrX25hbWUgJiYgIXN0cmNtcChjbG9ja19uYW1lLCAiaXAiKSkgeworCQkqbXNjYW5fY2xrc3JjID0gTVNDQU5fQ0xLU1JDX0lQUzsKKwkJZnJlcSA9IG1wYzV4eHhfZ2V0X2J1c19mcmVxdWVuY3kob2ZkZXYtPm5vZGUpOworCX0gZWxzZSB7CisJCSptc2Nhbl9jbGtzcmMgPSBNU0NBTl9DTEtTUkNfQlVTOworCisJCXB2YWwgPSBvZl9nZXRfcHJvcGVydHkob2ZkZXYtPm5vZGUsCisJCQkJICAgICAgICJmc2wsbXNjYW4tY2xvY2stZGl2aWRlciIsICZwbGVuKTsKKwkJaWYgKHB2YWwgJiYgcGxlbiA9PSBzaXplb2YoKnB2YWwpKQorCQkJY2xvY2tkaXYgPSAqcHZhbDsKKwkJaWYgKCFjbG9ja2RpdikKKwkJCWNsb2NrZGl2ID0gMTsKKworCQlpZiAoIWNsb2NrX25hbWUgfHwgIXN0cmNtcChjbG9ja19uYW1lLCAic3lzIikpIHsKKwkJCXN5c19jbGsgPSBjbGtfZ2V0KCZvZmRldi0+ZGV2LCAic3lzX2NsayIpOworCQkJaWYgKCFzeXNfY2xrKSB7CisJCQkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImNvdWxkbid0IGdldCBzeXNfY2xrXG4iKTsKKwkJCQlnb3RvIGV4aXRfdW5tYXA7CisJCQl9CisJCQkvKiBHZXQgYW5kIHJvdW5kIHVwL2Rvd24gc3lzIGNsb2NrIHJhdGUgKi8KKwkJCXN5c19mcmVxID0gMTAwMDAwMCAqCisJCQkJKChjbGtfZ2V0X3JhdGUoc3lzX2NsaykgKyA0OTk5OTkpIC8gMTAwMDAwMCk7CisKKwkJCWlmICghY2xvY2tfbmFtZSkgeworCQkJCS8qIEEgbXVsdGlwbGUgb2YgMTYgTUh6IHdvdWxkIGJlIG9wdGltYWwgKi8KKwkJCQlpZiAoKHN5c19mcmVxICUgMTYwMDAwMDApID09IDApIHsKKwkJCQkJY2xvY2tzcmMgPSAwOworCQkJCQljbG9ja2RpdiA9IHN5c19mcmVxIC8gMTYwMDAwMDA7CisJCQkJCWZyZXEgPSBzeXNfZnJlcSAvIGNsb2NrZGl2OworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJY2xvY2tzcmMgPSAwOworCQkJCWZyZXEgPSBzeXNfZnJlcSAvIGNsb2NrZGl2OworCQkJfQorCQl9CisKKwkJaWYgKGNsb2Nrc3JjIDwgMCkgeworCQkJcmVmX2NsayA9IGNsa19nZXQoJm9mZGV2LT5kZXYsICJyZWZfY2xrIik7CisJCQlpZiAoIXJlZl9jbGspIHsKKwkJCQlkZXZfZXJyKCZvZmRldi0+ZGV2LCAiY291bGRuJ3QgZ2V0IHJlZl9jbGtcbiIpOworCQkJCWdvdG8gZXhpdF91bm1hcDsKKwkJCX0KKwkJCWNsb2Nrc3JjID0gMTsKKwkJCWZyZXEgPSBjbGtfZ2V0X3JhdGUocmVmX2NsaykgLyBjbG9ja2RpdjsKKwkJfQorCX0KKworCS8qIERpc2FibGUgY2xvY2sgKi8KKwlvdXRfYmUzMigmY2xvY2tjdGwtPm1jY3JbY2xvY2tpZHhdLCAweDApOworCWlmIChjbG9ja3NyYyA+PSAwKSB7CisJCS8qIFNldCBzb3VyY2UgYW5kIGRpdmlkZXIgKi8KKwkJdmFsID0gKGNsb2Nrc3JjIDw8IDE0KSB8ICgoY2xvY2tkaXYgLSAxKSA8PCAxNyk7CisJCW91dF9iZTMyKCZjbG9ja2N0bC0+bWNjcltjbG9ja2lkeF0sIHZhbCk7CisJCS8qIEVuYWJsZSBjbG9jayAqLworCQlvdXRfYmUzMigmY2xvY2tjdGwtPm1jY3JbY2xvY2tpZHhdLCB2YWwgfCAweDEwMDAwKTsKKwl9CisKKwkvKiBFbmFibGUgTVNDQU4gY2xvY2sgZG9tYWluICovCisJdmFsID0gaW5fYmUzMigmY2xvY2tjdGwtPnNjY3JbMV0pOworCWlmICghKHZhbCAmICgxIDw8IDI1KSkpCisJCW91dF9iZTMyKCZjbG9ja2N0bC0+c2NjclsxXSwgdmFsIHwgKDEgPDwgMjUpKTsKKworCWRldl9kYmcoJm9mZGV2LT5kZXYsICJ1c2luZyAnJXMnIHdpdGggZnJlcXVlbmN5IGRpdmlkZXIgJWRcbiIsCisJCSptc2Nhbl9jbGtzcmMgPT0gTVNDQU5fQ0xLU1JDX0lQUyA/ICJpcHNfY2xrIiA6CisJCWNsb2Nrc3JjID09IDEgPyAicmVmX2NsayIgOiAic3lzX2NsayIsIGNsb2NrZGl2KTsKKworZXhpdF91bm1hcDoKKwlvZl9ub2RlX3B1dChucF9jbG9jayk7CisJaW91bm1hcChjbG9ja2N0bCk7CisKKwlyZXR1cm4gZnJlcTsKK30KKyNlbHNlIC8qICFDT05GSUdfUFBDX01QQzUxMnggKi8KK3N0YXRpYyB1MzIgX19kZXZpbml0IG1wYzUxMnhfY2FuX2dldF9jbG9jayhzdHJ1Y3Qgb2ZfZGV2aWNlICpvZmRldiwKKwkJCQkJICAgY29uc3QgY2hhciAqY2xvY2tfbmFtZSwKKwkJCQkJICAgaW50ICptc2Nhbl9jbGtzcmMpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX1BQQ19NUEM1MTJ4ICovCiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG1wYzV4eHhfY2FuX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAogCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICppZCkKIHsKKwlzdHJ1Y3QgbXBjNXh4eF9jYW5fZGF0YSAqZGF0YSA9IChzdHJ1Y3QgbXBjNXh4eF9jYW5fZGF0YSAqKWlkLT5kYXRhOwogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBvZmRldi0+bm9kZTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBtc2Nhbl9wcml2ICpwcml2OwogCXZvaWQgX19pb21lbSAqYmFzZTsKLQljb25zdCBjaGFyICpjbGtfc3JjOwotCWludCBlcnIsIGlycSwgY2xvY2tfc3JjOworCWNvbnN0IGNoYXIgKmNsb2NrX25hbWUgPSBOVUxMOworCWludCBpcnEsIG1zY2FuX2Nsa3NyYyA9IDA7CisJaW50IGVyciA9IC1FTk9NRU07CiAKLQliYXNlID0gb2ZfaW9tYXAob2ZkZXYtPm5vZGUsIDApOworCWJhc2UgPSBvZl9pb21hcChucCwgMCk7CiAJaWYgKCFiYXNlKSB7CiAJCWRldl9lcnIoJm9mZGV2LT5kZXYsICJjb3VsZG4ndCBpb3JlbWFwXG4iKTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBleGl0X3JlbGVhc2VfbWVtOworCQlyZXR1cm4gZXJyOwogCX0KIAogCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKG5wLCAwKTsKQEAgLTExNCwzNyArMjc0LDI3IEBACiAJfQogCiAJZGV2ID0gYWxsb2NfbXNjYW5kZXYoKTsKLQlpZiAoIWRldikgewotCQllcnIgPSAtRU5PTUVNOworCWlmICghZGV2KQogCQlnb3RvIGV4aXRfZGlzcG9zZV9pcnE7Ci0JfQogCiAJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJcHJpdi0+cmVnX2Jhc2UgPSBiYXNlOwogCWRldi0+aXJxID0gaXJxOwogCi0JLyoKLQkgKiBFaXRoZXIgdGhlIG9zY2lsbGF0b3IgY2xvY2sgKFNZU19YVEFMX0lOKSBvciB0aGUgSVAgYnVzIGNsb2NrCi0JICogKElQX0NMSykgY2FuIGJlIHNlbGVjdGVkIGFzIE1TQ0FOIGNsb2NrIHNvdXJjZS4gQWNjb3JkaW5nIHRvCi0JICogdGhlIE1QQzUyMDAgdXNlcidzIG1hbnVhbCwgdGhlIG9zY2lsbGF0b3IgY2xvY2sgaXMgdGhlIGJldHRlcgotCSAqIGNob2ljZSBhcyBpdCBoYXMgbGVzcyBqaXR0ZXIuIEZvciB0aGlzIHJlYXNvbiwgaXQgaXMgc2VsZWN0ZWQKLQkgKiBieSBkZWZhdWx0LgotCSAqLwotCWNsa19zcmMgPSBvZl9nZXRfcHJvcGVydHkobnAsICJmc2wsbXNjYW4tY2xvY2stc291cmNlIiwgTlVMTCk7Ci0JaWYgKGNsa19zcmMgJiYgc3RyY21wKGNsa19zcmMsICJpcCIpID09IDApCi0JCWNsb2NrX3NyYyA9IE1TQ0FOX0NMS1NSQ19CVVM7Ci0JZWxzZQotCQljbG9ja19zcmMgPSBNU0NBTl9DTEtTUkNfWFRBTDsKLQlwcml2LT5jYW4uY2xvY2suZnJlcSA9IG1wYzUyeHhfY2FuX2Nsb2NrX2ZyZXEob2ZkZXYsIGNsb2NrX3NyYyk7CisJY2xvY2tfbmFtZSA9IG9mX2dldF9wcm9wZXJ0eShucCwgImZzbCxtc2Nhbi1jbG9jay1zb3VyY2UiLCBOVUxMKTsKKworCUJVR19PTighZGF0YSk7CisJcHJpdi0+dHlwZSA9IGRhdGEtPnR5cGU7CisJcHJpdi0+Y2FuLmNsb2NrLmZyZXEgPSBkYXRhLT5nZXRfY2xvY2sob2ZkZXYsIGNsb2NrX25hbWUsCisJCQkJCSAgICAgICAmbXNjYW5fY2xrc3JjKTsKIAlpZiAoIXByaXYtPmNhbi5jbG9jay5mcmVxKSB7Ci0JCWRldl9lcnIoJm9mZGV2LT5kZXYsICJjb3VsZG4ndCBnZXQgTVNDQU4gY2xvY2sgZnJlcXVlbmN5XG4iKTsKLQkJZXJyID0gLUVOT0RFVjsKKwkJZGV2X2Vycigmb2ZkZXYtPmRldiwgImNvdWxkbid0IGdldCBNU0NBTiBjbG9jayBwcm9wZXJ0aWVzXG4iKTsKIAkJZ290byBleGl0X2ZyZWVfbXNjYW47CiAJfQogCiAJU0VUX05FVERFVl9ERVYoZGV2LCAmb2ZkZXYtPmRldik7CiAKLQllcnIgPSByZWdpc3Rlcl9tc2NhbmRldihkZXYsIGNsb2NrX3NyYyk7CisJZXJyID0gcmVnaXN0ZXJfbXNjYW5kZXYoZGV2LCBtc2Nhbl9jbGtzcmMpOwogCWlmIChlcnIpIHsKIAkJZGV2X2Vycigmb2ZkZXYtPmRldiwgInJlZ2lzdGVyaW5nICVzIGZhaWxlZCAoZXJyPSVkKVxuIiwKIAkJCURSVl9OQU1FLCBlcnIpOwpAQCAtMTY0LDcgKzMxNCw3IEBACiAJaXJxX2Rpc3Bvc2VfbWFwcGluZyhpcnEpOwogZXhpdF91bm1hcF9tZW06CiAJaW91bm1hcChiYXNlKTsKLWV4aXRfcmVsZWFzZV9tZW06CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yMjUsOCArMzc1LDIwIEBACiB9CiAjZW5kaWYKIAorc3RhdGljIHN0cnVjdCBtcGM1eHh4X2Nhbl9kYXRhIF9fZGV2aW5pdGRhdGEgbXBjNTIwMF9jYW5fZGF0YSA9IHsKKwkudHlwZSA9IE1TQ0FOX1RZUEVfTVBDNTIwMCwKKwkuZ2V0X2Nsb2NrID0gbXBjNTJ4eF9jYW5fZ2V0X2Nsb2NrLAorfTsKKworc3RhdGljIHN0cnVjdCBtcGM1eHh4X2Nhbl9kYXRhIF9fZGV2aW5pdGRhdGEgbXBjNTEyMV9jYW5fZGF0YSA9IHsKKwkudHlwZSA9IE1TQ0FOX1RZUEVfTVBDNTEyMSwKKwkuZ2V0X2Nsb2NrID0gbXBjNTEyeF9jYW5fZ2V0X2Nsb2NrLAorfTsKKwogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19kZXZpbml0ZGF0YSBtcGM1eHh4X2Nhbl90YWJsZVtdID0gewotCXsuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1tc2NhbiJ9LAorCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtbXNjYW4iLCAuZGF0YSA9ICZtcGM1MjAwX2Nhbl9kYXRhLCB9LAorCS8qIE5vdGUgdGhhdCBvbmx5IE1QQzUxMjEgUmV2LiAyIChhbmQgbGF0ZXIpIGlzIHN1cHBvcnRlZCAqLworCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUxMjEtbXNjYW4iLCAuZGF0YSA9ICZtcGM1MTIxX2Nhbl9kYXRhLCB9LAogCXt9LAogfTsKIApAQCAtMjU1LDUgKzQxNyw1IEBACiBtb2R1bGVfZXhpdChtcGM1eHh4X2Nhbl9leGl0KTsKIAogTU9EVUxFX0FVVEhPUigiV29sZmdhbmcgR3JhbmRlZ2dlciA8d2dAZ3JhbmRlZ2dlci5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkZyZWVzY2FsZSBNUEM1MjAwIENBTiBkcml2ZXIiKTsKK01PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIE1QQzV4eHggQ0FOIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL21zY2FuL21zY2FuLmMgYi9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXNjYW4uYwppbmRleCAwNzM0NmY4OC4uNmI3ZGQ1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL21zY2FuL21zY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL21zY2FuL21zY2FuLmMKQEAgLTQsNyArNCw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBBbmRyZXkgVm9sa292IDxhdm9sa292QHZhcm1hLWVsLmNvbT4sCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICBWYXJtYSBFbGVjdHJvbmljcyBPeQogICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgV29sZmdhbmcgR3JhbmRlZ2dlciA8d2dAZ3JhbmRlZ2dlci5jb20+Ci0gKiBDb3B5dGlnaHQgKEMpIDIwMDgtMjAwOSBQZW5ndXRyb25peCA8a2VybmVsQHBlbmd1dHJvbml4LmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUGVuZ3V0cm9uaXggPGtlcm5lbEBwZW5ndXRyb25peC5kZT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xNTIsNiArMTUyLDEyIEBACiAJcHJpdi0+c2hhZG93X2NhbnJpZXIgPSAwOwogCXByaXYtPmZsYWdzID0gMDsKIAorCWlmIChwcml2LT50eXBlID09IE1TQ0FOX1RZUEVfTVBDNTEyMSkgeworCQkvKiBDbGVhciBwZW5kaW5nIGJ1cy1vZmYgY29uZGl0aW9uICovCisJCWlmIChpbl84KCZyZWdzLT5jYW5taXNjKSAmIE1TQ0FOX0JPSE9MRCkKKwkJCW91dF84KCZyZWdzLT5jYW5taXNjLCBNU0NBTl9CT0hPTEQpOworCX0KKwogCWVyciA9IG1zY2FuX3NldF9tb2RlKGRldiwgTVNDQU5fTk9STUFMX01PREUpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CkBAIC0xNjMsOCArMTY5LDI5IEBACiAJb3V0XzgoJnJlZ3MtPmNhbnRpZXIsIDApOwogCiAJLyogRW5hYmxlIHJlY2VpdmUgaW50ZXJydXB0cy4gKi8KLQlvdXRfOCgmcmVncy0+Y2FucmllciwgTVNDQU5fT1ZSSUUgfCBNU0NBTl9SWEZJRSB8IE1TQ0FOX0NTQ0lFIHwKLQkgICAgICBNU0NBTl9SU1RBVEUxIHwgTVNDQU5fUlNUQVRFMCB8IE1TQ0FOX1RTVEFURTEgfCBNU0NBTl9UU1RBVEUwKTsKKwlvdXRfOCgmcmVncy0+Y2FucmllciwgTVNDQU5fUlhfSU5UU19FTkFCTEUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXNjYW5fcmVzdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBtc2Nhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmIChwcml2LT50eXBlID09IE1TQ0FOX1RZUEVfTVBDNTEyMSkgeworCQlzdHJ1Y3QgbXNjYW5fcmVncyAqcmVncyA9IChzdHJ1Y3QgbXNjYW5fcmVncyAqKXByaXYtPnJlZ19iYXNlOworCisJCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9FUlJPUl9BQ1RJVkU7CisJCVdBUk4oIShpbl84KCZyZWdzLT5jYW5taXNjKSAmIE1TQ0FOX0JPSE9MRCksCisJCSAgICAgImJ1cy1vZmYgc3RhdGUgZXhwZWN0ZWQiKTsKKwkJb3V0XzgoJnJlZ3MtPmNhbm1pc2MsIE1TQ0FOX0JPSE9MRCk7CisJCS8qIFJlLWVuYWJsZSByZWNlaXZlIGludGVycnVwdHMuICovCisJCW91dF84KCZyZWdzLT5jYW5yaWVyLCBNU0NBTl9SWF9JTlRTX0VOQUJMRSk7CisJfSBlbHNlIHsKKwkJaWYgKHByaXYtPmNhbi5zdGF0ZSA8PSBDQU5fU1RBVEVfQlVTX09GRikKKwkJCW1zY2FuX3NldF9tb2RlKGRldiwgTVNDQU5fSU5JVF9NT0RFKTsKKwkJcmV0dXJuIG1zY2FuX3N0YXJ0KGRldik7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNzcsOCArMjA0LDggQEAKIAlpbnQgaSwgcnRyLCBidWZfaWQ7CiAJdTMyIGNhbl9pZDsKIAotCWlmIChmcmFtZS0+Y2FuX2RsYyA+IDgpCi0JCXJldHVybiAtRUlOVkFMOworCWlmIChjYW5fZHJvcHBlZF9pbnZhbGlkX3NrYihkZXYsIHNrYikpCisJCXJldHVybiBORVRERVZfVFhfT0s7CiAKIAlvdXRfOCgmcmVncy0+Y2FudGllciwgMCk7CiAKQEAgLTM1OSw5ICszODYsMTIgQEAKIAkJCSAqIGF1dG9tYXRpY2FsbHkuIFRvIGF2b2lkIHRoYXQgd2Ugc3RvcCB0aGUgY2hpcCBkb2luZwogCQkJICogYSBsaWdodC13ZWlnaHQgc3RvcCAod2UgYXJlIGluIGlycS1jb250ZXh0KS4KIAkJCSAqLwotCQkJb3V0XzgoJnJlZ3MtPmNhbnRpZXIsIDApOwotCQkJb3V0XzgoJnJlZ3MtPmNhbnJpZXIsIDApOwotCQkJc2V0Yml0czgoJnJlZ3MtPmNhbmN0bDAsIE1TQ0FOX1NMUFJRIHwgTVNDQU5fSU5JVFJRKTsKKwkJCWlmIChwcml2LT50eXBlICE9IE1TQ0FOX1RZUEVfTVBDNTEyMSkgeworCQkJCW91dF84KCZyZWdzLT5jYW50aWVyLCAwKTsKKwkJCQlvdXRfOCgmcmVncy0+Y2FucmllciwgMCk7CisJCQkJc2V0Yml0czgoJnJlZ3MtPmNhbmN0bDAsCisJCQkJCSBNU0NBTl9TTFBSUSB8IE1TQ0FOX0lOSVRSUSk7CisJCQl9CiAJCQljYW5fYnVzX29mZihkZXYpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC00OTEsOSArNTIxLDcgQEAKIAogCXN3aXRjaCAobW9kZSkgewogCWNhc2UgQ0FOX01PREVfU1RBUlQ6Ci0JCWlmIChwcml2LT5jYW4uc3RhdGUgPD0gQ0FOX1NUQVRFX0JVU19PRkYpCi0JCQltc2Nhbl9zZXRfbW9kZShkZXYsIE1TQ0FOX0lOSVRfTU9ERSk7Ci0JCXJldCA9IG1zY2FuX3N0YXJ0KGRldik7CisJCXJldCA9IG1zY2FuX3Jlc3RhcnQoZGV2KTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChkZXYpKQpAQCAtNTkyLDE4ICs2MjAsMjEgQEAKICAgICAgICAubmRvX3N0YXJ0X3htaXQgICAgICAgICA9IG1zY2FuX3N0YXJ0X3htaXQsCiB9OwogCi1pbnQgcmVnaXN0ZXJfbXNjYW5kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNsb2NrX3NyYykKK2ludCByZWdpc3Rlcl9tc2NhbmRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbXNjYW5fY2xrc3JjKQogewogCXN0cnVjdCBtc2Nhbl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbXNjYW5fcmVncyAqcmVncyA9IChzdHJ1Y3QgbXNjYW5fcmVncyAqKXByaXYtPnJlZ19iYXNlOwogCXU4IGN0bDE7CiAKIAljdGwxID0gaW5fOCgmcmVncy0+Y2FuY3RsMSk7Ci0JaWYgKGNsb2NrX3NyYykKKwlpZiAobXNjYW5fY2xrc3JjKQogCQljdGwxIHw9IE1TQ0FOX0NMS1NSQzsKIAllbHNlCiAJCWN0bDEgJj0gfk1TQ0FOX0NMS1NSQzsKIAorCWlmIChwcml2LT50eXBlID09IE1TQ0FOX1RZUEVfTVBDNTEyMSkKKwkJY3RsMSB8PSBNU0NBTl9CT1JNOyAvKiBidXMtb2ZmIHJlY292ZXJ5IHVwb24gcmVxdWVzdCAqLworCiAJY3RsMSB8PSBNU0NBTl9DQU5FOwogCW91dF84KCZyZWdzLT5jYW5jdGwxLCBjdGwxKTsKIAl1ZGVsYXkoMTAwKTsKQEAgLTY1NSw2ICs2ODYsNyBAQAogCXByaXYtPmNhbi5iaXR0aW1pbmdfY29uc3QgPSAmbXNjYW5fYml0dGltaW5nX2NvbnN0OwogCXByaXYtPmNhbi5kb19zZXRfYml0dGltaW5nID0gbXNjYW5fZG9fc2V0X2JpdHRpbWluZzsKIAlwcml2LT5jYW4uZG9fc2V0X21vZGUgPSBtc2Nhbl9kb19zZXRfbW9kZTsKKwlwcml2LT5jYW4uY3RybG1vZGVfc3VwcG9ydGVkID0gQ0FOX0NUUkxNT0RFXzNfU0FNUExFUzsKIAogCWZvciAoaSA9IDA7IGkgPCBUWF9RVUVVRV9TSVpFOyBpKyspIHsKIAkJcHJpdi0+dHhfcXVldWVbaV0uaWQgPSBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL21zY2FuL21zY2FuLmggYi9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXNjYW4uaAppbmRleCAwMGZjNGFhLi40ZmY5NjY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXNjYW4uaAorKysgYi9kcml2ZXJzL25ldC9jYW4vbXNjYW4vbXNjYW4uaApAQCAtMzgsMTggKzM4LDIwIEBACiAjZGVmaW5lIE1TQ0FOX0NMS1NSQwkJMHg0MAogI2RlZmluZSBNU0NBTl9MT09QQgkJMHgyMAogI2RlZmluZSBNU0NBTl9MSVNURU4JCTB4MTAKKyNkZWZpbmUgTVNDQU5fQk9STQkJMHgwOAogI2RlZmluZSBNU0NBTl9XVVBNCQkweDA0CiAjZGVmaW5lIE1TQ0FOX1NMUEFLCQkweDAyCiAjZGVmaW5lIE1TQ0FOX0lOSVRBSwkJMHgwMQogCi0vKiBVc2UgdGhlIE1QQzUyMDAgTVNDQU4gdmFyaWFudD8gKi8KKy8qIFVzZSB0aGUgTVBDNVhYWCBNU0NBTiB2YXJpYW50PyAqLwogI2lmZGVmIENPTkZJR19QUEMKLSNkZWZpbmUgTVNDQU5fRk9SX01QQzUyMDAKKyNkZWZpbmUgTVNDQU5fRk9SX01QQzVYWFgKICNlbmRpZgogCi0jaWZkZWYgTVNDQU5fRk9SX01QQzUyMDAKKyNpZmRlZiBNU0NBTl9GT1JfTVBDNVhYWAogI2RlZmluZSBNU0NBTl9DTEtTUkNfQlVTCTAKICNkZWZpbmUgTVNDQU5fQ0xLU1JDX1hUQUwJTVNDQU5fQ0xLU1JDCisjZGVmaW5lIE1TQ0FOX0NMS1NSQ19JUFMJTVNDQU5fQ0xLU1JDCiAjZWxzZQogI2RlZmluZSBNU0NBTl9DTEtTUkNfQlVTCU1TQ0FOX0NMS1NSQwogI2RlZmluZSBNU0NBTl9DTEtTUkNfWFRBTAkwCkBAIC0xMzYsNyArMTM4LDcgQEAKICNkZWZpbmUgTVNDQU5fRUZGX1JUUl9TSElGVAkwCiAjZGVmaW5lIE1TQ0FOX0VGRl9GTEFHUwkJMHgxOAkvKiBJREUgKyBTUlIgKi8KIAotI2lmZGVmIE1TQ0FOX0ZPUl9NUEM1MjAwCisjaWZkZWYgTVNDQU5fRk9SX01QQzVYWFgKICNkZWZpbmUgX01TQ0FOX1JFU0VSVkVEXyhuLCBudW0pIHU4IF9yZXMjI25bbnVtXQogI2RlZmluZSBfTVNDQU5fUkVTRVJWRURfRFNSX1NJWkUJMgogI2Vsc2UKQEAgLTE2NSw2NyArMTY3LDY2IEBACiAJdTggY2FudGJzZWw7CQkJCS8qICsgMHgxNCAgICAgMHgwYSAqLwogCXU4IGNhbmlkYWM7CQkJCS8qICsgMHgxNSAgICAgMHgwYiAqLwogCXU4IHJlc2VydmVkOwkJCQkvKiArIDB4MTYgICAgIDB4MGMgKi8KLQlfTVNDQU5fUkVTRVJWRURfKDYsIDUpOwkJCS8qICsgMHgxNyAgICAgICAgICAqLwotI2lmbmRlZiBNU0NBTl9GT1JfTVBDNTIwMAotCXU4IGNhbm1pc2M7CQkJCS8qICAgICAgICAgICAgMHgwZCAqLwotI2VuZGlmCisJX01TQ0FOX1JFU0VSVkVEXyg2LCAyKTsJCQkvKiArIDB4MTcgICAgICAgICAgKi8KKwl1OCBjYW5taXNjOwkJCQkvKiArIDB4MTkgICAgIDB4MGQgKi8KKwlfTVNDQU5fUkVTRVJWRURfKDcsIDIpOwkJCS8qICsgMHgxYSAgICAgICAgICAqLwogCXU4IGNhbnJ4ZXJyOwkJCQkvKiArIDB4MWMgICAgIDB4MGUgKi8KIAl1OCBjYW50eGVycjsJCQkJLyogKyAweDFkICAgICAweDBmICovCi0JX01TQ0FOX1JFU0VSVkVEXyg3LCAyKTsJCQkvKiArIDB4MWUgICAgICAgICAgKi8KKwlfTVNDQU5fUkVTRVJWRURfKDgsIDIpOwkJCS8qICsgMHgxZSAgICAgICAgICAqLwogCXUxNiBjYW5pZGFyMV8wOwkJCQkvKiArIDB4MjAgICAgIDB4MTAgKi8KLQlfTVNDQU5fUkVTRVJWRURfKDgsIDIpOwkJCS8qICsgMHgyMiAgICAgICAgICAqLworCV9NU0NBTl9SRVNFUlZFRF8oOSwgMik7CQkJLyogKyAweDIyICAgICAgICAgICovCiAJdTE2IGNhbmlkYXIzXzI7CQkJCS8qICsgMHgyNCAgICAgMHgxMiAqLwotCV9NU0NBTl9SRVNFUlZFRF8oOSwgMik7CQkJLyogKyAweDI2ICAgICAgICAgICovCisJX01TQ0FOX1JFU0VSVkVEXygxMCwgMik7CQkvKiArIDB4MjYgICAgICAgICAgKi8KIAl1MTYgY2FuaWRtcjFfMDsJCQkJLyogKyAweDI4ICAgICAweDE0ICovCi0JX01TQ0FOX1JFU0VSVkVEXygxMCwgMik7CQkvKiArIDB4MmEgICAgICAgICAgKi8KKwlfTVNDQU5fUkVTRVJWRURfKDExLCAyKTsJCS8qICsgMHgyYSAgICAgICAgICAqLwogCXUxNiBjYW5pZG1yM18yOwkJCQkvKiArIDB4MmMgICAgIDB4MTYgKi8KLQlfTVNDQU5fUkVTRVJWRURfKDExLCAyKTsJCS8qICsgMHgyZSAgICAgICAgICAqLworCV9NU0NBTl9SRVNFUlZFRF8oMTIsIDIpOwkJLyogKyAweDJlICAgICAgICAgICovCiAJdTE2IGNhbmlkYXI1XzQ7CQkJCS8qICsgMHgzMCAgICAgMHgxOCAqLwotCV9NU0NBTl9SRVNFUlZFRF8oMTIsIDIpOwkJLyogKyAweDMyICAgICAgICAgICovCisJX01TQ0FOX1JFU0VSVkVEXygxMywgMik7CQkvKiArIDB4MzIgICAgICAgICAgKi8KIAl1MTYgY2FuaWRhcjdfNjsJCQkJLyogKyAweDM0ICAgICAweDFhICovCi0JX01TQ0FOX1JFU0VSVkVEXygxMywgMik7CQkvKiArIDB4MzYgICAgICAgICAgKi8KKwlfTVNDQU5fUkVTRVJWRURfKDE0LCAyKTsJCS8qICsgMHgzNiAgICAgICAgICAqLwogCXUxNiBjYW5pZG1yNV80OwkJCQkvKiArIDB4MzggICAgIDB4MWMgKi8KLQlfTVNDQU5fUkVTRVJWRURfKDE0LCAyKTsJCS8qICsgMHgzYSAgICAgICAgICAqLworCV9NU0NBTl9SRVNFUlZFRF8oMTUsIDIpOwkJLyogKyAweDNhICAgICAgICAgICovCiAJdTE2IGNhbmlkbXI3XzY7CQkJCS8qICsgMHgzYyAgICAgMHgxZSAqLwotCV9NU0NBTl9SRVNFUlZFRF8oMTUsIDIpOwkJLyogKyAweDNlICAgICAgICAgICovCisJX01TQ0FOX1JFU0VSVkVEXygxNiwgMik7CQkvKiArIDB4M2UgICAgICAgICAgKi8KIAlzdHJ1Y3QgewogCQl1MTYgaWRyMV8wOwkJCS8qICsgMHg0MCAgICAgMHgyMCAqLwotCQkgX01TQ0FOX1JFU0VSVkVEXygxNiwgMik7CS8qICsgMHg0MiAgICAgICAgICAqLworCQlfTVNDQU5fUkVTRVJWRURfKDE3LCAyKTsJLyogKyAweDQyICAgICAgICAgICovCiAJCXUxNiBpZHIzXzI7CQkJLyogKyAweDQ0ICAgICAweDIyICovCi0JCSBfTVNDQU5fUkVTRVJWRURfKDE3LCAyKTsJLyogKyAweDQ2ICAgICAgICAgICovCisJCV9NU0NBTl9SRVNFUlZFRF8oMTgsIDIpOwkvKiArIDB4NDYgICAgICAgICAgKi8KIAkJdTE2IGRzcjFfMDsJCQkvKiArIDB4NDggICAgIDB4MjQgKi8KLQkJIF9NU0NBTl9SRVNFUlZFRF8oMTgsIDIpOwkvKiArIDB4NGEgICAgICAgICAgKi8KKwkJX01TQ0FOX1JFU0VSVkVEXygxOSwgMik7CS8qICsgMHg0YSAgICAgICAgICAqLwogCQl1MTYgZHNyM18yOwkJCS8qICsgMHg0YyAgICAgMHgyNiAqLwotCQkgX01TQ0FOX1JFU0VSVkVEXygxOSwgMik7CS8qICsgMHg0ZSAgICAgICAgICAqLworCQlfTVNDQU5fUkVTRVJWRURfKDIwLCAyKTsJLyogKyAweDRlICAgICAgICAgICovCiAJCXUxNiBkc3I1XzQ7CQkJLyogKyAweDUwICAgICAweDI4ICovCi0JCSBfTVNDQU5fUkVTRVJWRURfKDIwLCAyKTsJLyogKyAweDUyICAgICAgICAgICovCisJCV9NU0NBTl9SRVNFUlZFRF8oMjEsIDIpOwkvKiArIDB4NTIgICAgICAgICAgKi8KIAkJdTE2IGRzcjdfNjsJCQkvKiArIDB4NTQgICAgIDB4MmEgKi8KLQkJIF9NU0NBTl9SRVNFUlZFRF8oMjEsIDIpOwkvKiArIDB4NTYgICAgICAgICAgKi8KKwkJX01TQ0FOX1JFU0VSVkVEXygyMiwgMik7CS8qICsgMHg1NiAgICAgICAgICAqLwogCQl1OCBkbHI7CQkJCS8qICsgMHg1OCAgICAgMHgyYyAqLwotCQkgdTg6ODsJCQkJLyogKyAweDU5ICAgICAweDJkICovCi0JCSBfTVNDQU5fUkVTRVJWRURfKDIyLCAyKTsJLyogKyAweDVhICAgICAgICAgICovCisJCXU4IHJlc2VydmVkOwkJCS8qICsgMHg1OSAgICAgMHgyZCAqLworCQlfTVNDQU5fUkVTRVJWRURfKDIzLCAyKTsJLyogKyAweDVhICAgICAgICAgICovCiAJCXUxNiB0aW1lOwkJCS8qICsgMHg1YyAgICAgMHgyZSAqLwogCX0gcng7Ci0JIF9NU0NBTl9SRVNFUlZFRF8oMjMsIDIpOwkJLyogKyAweDVlICAgICAgICAgICovCisJX01TQ0FOX1JFU0VSVkVEXygyNCwgMik7CQkvKiArIDB4NWUgICAgICAgICAgKi8KIAlzdHJ1Y3QgewogCQl1MTYgaWRyMV8wOwkJCS8qICsgMHg2MCAgICAgMHgzMCAqLwotCQkgX01TQ0FOX1JFU0VSVkVEXygyNCwgMik7CS8qICsgMHg2MiAgICAgICAgICAqLworCQlfTVNDQU5fUkVTRVJWRURfKDI1LCAyKTsJLyogKyAweDYyICAgICAgICAgICovCiAJCXUxNiBpZHIzXzI7CQkJLyogKyAweDY0ICAgICAweDMyICovCi0JCSBfTVNDQU5fUkVTRVJWRURfKDI1LCAyKTsJLyogKyAweDY2ICAgICAgICAgICovCisJCV9NU0NBTl9SRVNFUlZFRF8oMjYsIDIpOwkvKiArIDB4NjYgICAgICAgICAgKi8KIAkJdTE2IGRzcjFfMDsJCQkvKiArIDB4NjggICAgIDB4MzQgKi8KLQkJIF9NU0NBTl9SRVNFUlZFRF8oMjYsIDIpOwkvKiArIDB4NmEgICAgICAgICAgKi8KKwkJX01TQ0FOX1JFU0VSVkVEXygyNywgMik7CS8qICsgMHg2YSAgICAgICAgICAqLwogCQl1MTYgZHNyM18yOwkJCS8qICsgMHg2YyAgICAgMHgzNiAqLwotCQkgX01TQ0FOX1JFU0VSVkVEXygyNywgMik7CS8qICsgMHg2ZSAgICAgICAgICAqLworCQlfTVNDQU5fUkVTRVJWRURfKDI4LCAyKTsJLyogKyAweDZlICAgICAgICAgICovCiAJCXUxNiBkc3I1XzQ7CQkJLyogKyAweDcwICAgICAweDM4ICovCi0JCSBfTVNDQU5fUkVTRVJWRURfKDI4LCAyKTsJLyogKyAweDcyICAgICAgICAgICovCisJCV9NU0NBTl9SRVNFUlZFRF8oMjksIDIpOwkvKiArIDB4NzIgICAgICAgICAgKi8KIAkJdTE2IGRzcjdfNjsJCQkvKiArIDB4NzQgICAgIDB4M2EgKi8KLQkJIF9NU0NBTl9SRVNFUlZFRF8oMjksIDIpOwkvKiArIDB4NzYgICAgICAgICAgKi8KKwkJX01TQ0FOX1JFU0VSVkVEXygzMCwgMik7CS8qICsgMHg3NiAgICAgICAgICAqLwogCQl1OCBkbHI7CQkJCS8qICsgMHg3OCAgICAgMHgzYyAqLwogCQl1OCB0YnByOwkJCS8qICsgMHg3OSAgICAgMHgzZCAqLwotCQkgX01TQ0FOX1JFU0VSVkVEXygzMCwgMik7CS8qICsgMHg3YSAgICAgICAgICAqLworCQlfTVNDQU5fUkVTRVJWRURfKDMxLCAyKTsJLyogKyAweDdhICAgICAgICAgICovCiAJCXUxNiB0aW1lOwkJCS8qICsgMHg3YyAgICAgMHgzZSAqLwogCX0gdHg7Ci0JIF9NU0NBTl9SRVNFUlZFRF8oMzEsIDIpOwkJLyogKyAweDdlICAgICAgICAgICovCisJX01TQ0FOX1JFU0VSVkVEXygzMiwgMik7CQkvKiArIDB4N2UgICAgICAgICAgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiAjdW5kZWYgX01TQ0FOX1JFU0VSVkVEXwpAQCAtMjM3LDYgKzIzOCwxNSBAQAogI2RlZmluZSBNU0NBTl9QT1dFUk9GRl9NT0RFCShNU0NBTl9DU1dBSSB8IE1TQ0FOX1NMUFJRKQogI2RlZmluZSBNU0NBTl9TRVRfTU9ERV9SRVRSSUVTCTI1NQogI2RlZmluZSBNU0NBTl9FQ0hPX1NLQl9NQVgJMworI2RlZmluZSBNU0NBTl9SWF9JTlRTX0VOQUJMRQkoTVNDQU5fT1ZSSUUgfCBNU0NBTl9SWEZJRSB8IE1TQ0FOX0NTQ0lFIHwgXAorCQkJCSBNU0NBTl9SU1RBVEUxIHwgTVNDQU5fUlNUQVRFMCB8IFwKKwkJCQkgTVNDQU5fVFNUQVRFMSB8IE1TQ0FOX1RTVEFURTApCisKKy8qIE1TQ0FOIHR5cGUgdmFyaWFudHMgKi8KK2VudW0geworCU1TQ0FOX1RZUEVfTVBDNTIwMCwKKwlNU0NBTl9UWVBFX01QQzUxMjEKK307CiAKICNkZWZpbmUgQlRSMF9CUlBfTUFTSwkJMHgzZgogI2RlZmluZSBCVFIwX1NKV19TSElGVAkJNgpAQCAtMjcwLDYgKzI4MCw3IEBACiAKIHN0cnVjdCBtc2Nhbl9wcml2IHsKIAlzdHJ1Y3QgY2FuX3ByaXYgY2FuOwkvKiBtdXN0IGJlIHRoZSBmaXJzdCBtZW1iZXIgKi8KKwl1bnNpZ25lZCBpbnQgdHlwZTsgCS8qIE1TQ0FOIHR5cGUgdmFyaWFudHMgKi8KIAlsb25nIG9wZW5fdGltZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXZvaWQgX19pb21lbSAqcmVnX2Jhc2U7CS8qIGlvcmVtYXAnZWQgYWRkcmVzcyB0byByZWdpc3RlcnMgKi8KQEAgLTI4NSwxMiArMjk2LDcgQEAKIH07CiAKIGV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfbXNjYW5kZXYodm9pZCk7Ci0vKgotICogY2xvY2tfc3JjOgotICoJMSA9IFRoZSBNU0NBTiBjbG9jayBzb3VyY2UgaXMgdGhlIG9uY2hpcCBCdXMgQ2xvY2suCi0gKgkwID0gVGhlIE1TQ0FOIGNsb2NrIHNvdXJjZSBpcyB0aGUgY2hpcCBPc2NpbGxhdG9yIENsb2NrLgotICovCi1leHRlcm4gaW50IHJlZ2lzdGVyX21zY2FuZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjbG9ja19zcmMpOworZXh0ZXJuIGludCByZWdpc3Rlcl9tc2NhbmRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbXNjYW5fY2xrc3JjKTsKIGV4dGVybiB2b2lkIHVucmVnaXN0ZXJfbXNjYW5kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKICNlbmRpZiAvKiBfX01TQ0FOX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL0tjb25maWcKaW5kZXggNGM2NzQ5Mi4uOWUyNzdkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9LY29uZmlnCkBAIC00NCw0ICs0NCwxNiBAQAogCSAgVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSB0aGUgUENJY2FueCBhbmQgUENJY2FuIGNhcmRzICgxLCAyIG9yCiAJICA0IGNoYW5uZWwpIGZyb20gS3Zhc2VyIChodHRwOi8vd3d3Lmt2YXNlci5jb20pLgogCitjb25maWcgQ0FOX1BMWF9QQ0kKKwl0cmlzdGF0ZSAiUExYOTB4eCBQQ0ktYnJpZGdlIGJhc2VkIENhcmRzIgorCWRlcGVuZHMgb24gUENJCisJLS0taGVscC0tLQorCSAgVGhpcyBkcml2ZXIgaXMgZm9yIENBTiBpbnRlcmZhY2UgY2FyZHMgYmFzZWQgb24KKwkgIHRoZSBQTFg5MHh4IFBDSSBicmlkZ2UuCisJICBEcml2ZXIgc3VwcG9ydHMgbm93OgorCSAgIC0gQWRsaW5rIFBDSS03ODQxL2NQQ0ktNzg0MSBjYXJkIChodHRwOi8vd3d3LmFkbGlua3RlY2guY29tLykKKwkgICAtIEFkbGluayBQQ0ktNzg0MS9jUENJLTc4NDEgU0UgY2FyZAorCSAgIC0gTWFyYXRob24gQ0FOLWJ1cy1QQ0kgY2FyZCAoaHR0cDovL3d3dy5tYXJhdGhvbi5ydS8pCisJICAgLSBURVdTIFRFQ0hOT0xPR0lFUyBUUE1DODEwIGNhcmQgKGh0dHA6Ly93d3cudGV3cy5jb20vKQorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9NYWtlZmlsZQppbmRleCA5ZDI0NWFjLi5jZTkyNDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9NYWtlZmlsZQpAQCAtOCw1ICs4LDYgQEAKIG9iai0kKENPTkZJR19DQU5fU0pBMTAwMF9PRl9QTEFURk9STSkgKz0gc2phMTAwMF9vZl9wbGF0Zm9ybS5vCiBvYmotJChDT05GSUdfQ0FOX0VNU19QQ0kpICs9IGVtc19wY2kubwogb2JqLSQoQ09ORklHX0NBTl9LVkFTRVJfUENJKSArPSBrdmFzZXJfcGNpLm8KK29iai0kKENPTkZJR19DQU5fUExYX1BDSSkgKz0gcGx4X3BjaS5vCiAKIGNjZmxhZ3MtJChDT05GSUdfQ0FOX0RFQlVHX0RFVklDRVMpIDo9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL2Vtc19wY2kuYyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL2Vtc19wY2kuYwppbmRleCBmZDA0Nzg5Li44NzMwMDYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9lbXNfcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvZW1zX3BjaS5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAogI2RlZmluZSBFTVNfUENJX0JBU0VfU0laRSAgNDA5NiAvKiBzaXplIG9mIGNvbnRyb2xsZXIgYXJlYSAqLwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZW1zX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShlbXNfcGNpX3RibCkgPSB7CiAJLyogQ1BDLVBDSSB2MSAqLwogCXtQQ0lfVkVORE9SX0lEX1NJRU1FTlMsIDB4MjEwNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCx9LAogCS8qIENQQy1QQ0kgdjIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL2t2YXNlcl9wY2kuYyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL2t2YXNlcl9wY2kuYwppbmRleCA3ZGQ3NzY5Li40NDFlNzc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9rdmFzZXJfcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAva3Zhc2VyX3BjaS5jCkBAIC0xMDksNyArMTA5LDcgQEAKICNkZWZpbmUgS1ZBU0VSX1BDSV9WRU5ET1JfSUQyICAgICAweDFhMDcgICAgLyogdGhlIFBDSSBkZXZpY2UgYW5kIHZlbmRvciBJRHMgKi8KICNkZWZpbmUgS1ZBU0VSX1BDSV9ERVZJQ0VfSUQyICAgICAweDAwMDgKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGt2YXNlcl9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoa3Zhc2VyX3BjaV90YmwpID0gewogCXtLVkFTRVJfUENJX1ZFTkRPUl9JRDEsIEtWQVNFUl9QQ0lfREVWSUNFX0lEMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCx9LAogCXtLVkFTRVJfUENJX1ZFTkRPUl9JRDIsIEtWQVNFUl9QQ0lfREVWSUNFX0lEMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCx9LAogCXsgMCx9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9wbHhfcGNpLmMgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9wbHhfcGNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0NmE2MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3BseF9wY2kuYwpAQCAtMCwwICsxLDQ3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIFBhdmVsIENoZWJsYWtvdiA8UC5CLkNoZWJsYWtvdkBpbnAubnNrLnN1PgorICoKKyAqIERlcml2ZWQgZnJvbSB0aGUgZW1zX3BjaS5jIGRyaXZlcjoKKyAqCUNvcHlyaWdodCAoQykgMjAwNyBXb2xmZ2FuZyBHcmFuZGVnZ2VyIDx3Z0BncmFuZGVnZ2VyLmNvbT4KKyAqCUNvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgUGxlc3NpbmcgPHBsZXNzaW5nQGVtcy13dWVuc2NoZS5jb20+CisgKglDb3B5cmlnaHQgKEMpIDIwMDggU2ViYXN0aWFuIEhhYXMgPGhhYXNAZW1zLXd1ZW5zY2hlLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvY2FuLmg+CisjaW5jbHVkZSA8bGludXgvY2FuL2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlICJzamExMDAwLmgiCisKKyNkZWZpbmUgRFJWX05BTUUgICJzamExMDAwX3BseF9wY2kiCisKK01PRFVMRV9BVVRIT1IoIlBhdmVsIENoZWJsYWtvdiA8UC5CLkNoZWJsYWtvdkBpbnAubnNrLnN1PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTb2NrZXQtQ0FOIGRyaXZlciBmb3IgUExYOTB4eCBQQ0ktYnJpZGdlIGNhcmRzIHdpdGggIgorCQkgICAidGhlIFNKQTEwMDAgY2hpcHMiKTsKK01PRFVMRV9TVVBQT1JURURfREVWSUNFKCJBZGxpbmsgUENJLTc4NDEvY1BDSS03ODQxLCAiCisJCQkiQWRsaW5rIFBDSS03ODQxL2NQQ0ktNzg0MSBTRSwgIgorCQkJIk1hcmF0aG9uIENBTi1idXMtUENJLCAiCisJCQkiVEVXUyBURUNITk9MT0dJRVMgVFBNQzgxMCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworCisjZGVmaW5lIFBMWF9QQ0lfTUFYX0NIQU4gMgorCitzdHJ1Y3QgcGx4X3BjaV9jYXJkIHsKKwlpbnQgY2hhbm5lbHM7CQkJLyogZGV0ZWN0ZWQgY2hhbm5lbHMgY291bnQgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldltQTFhfUENJX01BWF9DSEFOXTsKKwl2b2lkIF9faW9tZW0gKmNvbmZfYWRkcjsKK307CisKKyNkZWZpbmUgUExYX1BDSV9DQU5fQ0xPQ0sgKDE2MDAwMDAwIC8gMikKKworLyogUExYOTB4eCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUExYX0lOVENTUgkweDRjCQkvKiBJbnRlcnJ1cHQgQ29udHJvbC9TdGF0dXMgKi8KKyNkZWZpbmUgUExYX0NOVFJMCTB4NTAJCS8qIFVzZXIgSS9PLCBEaXJlY3QgU2xhdmUgUmVzcG9uc2UsCisJCQkJCSAqIFNlcmlhbCBFRVBST00sIGFuZCBJbml0aWFsaXphdGlvbgorCQkJCQkgKiBDb250cm9sIHJlZ2lzdGVyCisJCQkJCSAqLworCisjZGVmaW5lIFBMWF9MSU5UMV9FTgkweDEJCS8qIExvY2FsIGludGVycnVwdCAxIGVuYWJsZSAqLworI2RlZmluZSBQTFhfTElOVDJfRU4JKDEgPDwgMykJLyogTG9jYWwgaW50ZXJydXB0IDIgZW5hYmxlICovCisjZGVmaW5lIFBMWF9QQ0lfSU5UX0VOCSgxIDw8IDYpCS8qIFBDSSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIFBMWF9QQ0lfUkVTRVQJKDEgPDwgMzApCS8qIFBDSSBBZGFwdGVyIFNvZnR3YXJlIFJlc2V0ICovCisKKy8qCisgKiBUaGUgYm9hcmQgY29uZmlndXJhdGlvbiBpcyBwcm9iYWJseSBmb2xsb3dpbmc6CisgKiBSWDEgaXMgY29ubmVjdGVkIHRvIGdyb3VuZC4KKyAqIFRYMSBpcyBub3QgY29ubmVjdGVkLgorICogQ0xLTyBpcyBub3QgY29ubmVjdGVkLgorICogU2V0dGluZyB0aGUgT0NSIHJlZ2lzdGVyIHRvIDB4REEgaXMgYSBnb29kIGlkZWEuCisgKiBUaGlzIG1lYW5zIG5vcm1hbCBvdXRwdXQgbW9kZSwgcHVzaC1wdWxsIGFuZCB0aGUgY29ycmVjdCBwb2xhcml0eS4KKyAqLworI2RlZmluZSBQTFhfUENJX09DUgkoT0NSX1RYMF9QVVNIUFVMTCB8IE9DUl9UWDFfUFVTSFBVTEwpCisKKy8qCisgKiBJbiB0aGUgQ0RSIHJlZ2lzdGVyLCB5b3Ugc2hvdWxkIHNldCBDQlAgdG8gMS4KKyAqIFlvdSB3aWxsIHByb2JhYmx5IGFsc28gd2FudCB0byBzZXQgdGhlIGNsb2NrIGRpdmlkZXIgdmFsdWUgdG8gNworICogKG1lYW5pbmcgZGlyZWN0IG9zY2lsbGF0b3Igb3V0cHV0KSBiZWNhdXNlIHRoZSBzZWNvbmQgU0pBMTAwMCBjaGlwCisgKiBpcyBkcml2ZW4gYnkgdGhlIGZpcnN0IG9uZSBDTEtPVVQgb3V0cHV0LgorICovCisjZGVmaW5lIFBMWF9QQ0lfQ0RSCQkJKENEUl9DQlAgfCBDRFJfQ0xLT1VUX01BU0spCisKKy8qIFNKQTEwMDAgQ29udHJvbCBSZWdpc3RlciBpbiB0aGUgQmFzaWNDQU4gTW9kZSAqLworI2RlZmluZSBSRUdfQ1IJCQkJMHgwMAorCisvKiBTdGF0ZXMgb2Ygc29tZSBTSkExMDAwIHJlZ2lzdGVycyBhZnRlciBoYXJkd2FyZSByZXNldCBpbiB0aGUgQmFzaWNDQU4gbW9kZSovCisjZGVmaW5lIFJFR19DUl9CQVNJQ0NBTl9JTklUSUFMCQkweDIxCisjZGVmaW5lIFJFR19DUl9CQVNJQ0NBTl9JTklUSUFMX01BU0sJMHhhMQorI2RlZmluZSBSRUdfU1JfQkFTSUNDQU5fSU5JVElBTAkJMHgwYworI2RlZmluZSBSRUdfSVJfQkFTSUNDQU5fSU5JVElBTAkJMHhlMAorCisvKiBTdGF0ZXMgb2Ygc29tZSBTSkExMDAwIHJlZ2lzdGVycyBhZnRlciBoYXJkd2FyZSByZXNldCBpbiB0aGUgUGVsaUNBTiBtb2RlKi8KKyNkZWZpbmUgUkVHX01PRF9QRUxJQ0FOX0lOSVRJQUwJCTB4MDEKKyNkZWZpbmUgUkVHX1NSX1BFTElDQU5fSU5JVElBTAkJMHgzYworI2RlZmluZSBSRUdfSVJfUEVMSUNBTl9JTklUSUFMCQkweDAwCisKKyNkZWZpbmUgQURMSU5LX1BDSV9WRU5ET1JfSUQJCTB4MTQ0QQorI2RlZmluZSBBRExJTktfUENJX0RFVklDRV9JRAkJMHg3ODQxCisKKyNkZWZpbmUgTUFSQVRIT05fUENJX0RFVklDRV9JRAkJMHgyNzE1CisKKyNkZWZpbmUgVEVXU19QQ0lfVkVORE9SX0lECQkweDE0OTgKKyNkZWZpbmUgVEVXU19QQ0lfREVWSUNFX0lEX1RNUEM4MTAJMHgwMzJBCisKK3N0YXRpYyB2b2lkIHBseF9wY2lfcmVzZXRfY29tbW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK3N0YXRpYyB2b2lkIHBseF9wY2lfcmVzZXRfbWFyYXRob24oc3RydWN0IHBjaV9kZXYgKnBkZXYpOworCitzdHJ1Y3QgcGx4X3BjaV9jaGFubmVsX21hcCB7CisJdTMyIGJhcjsKKwl1MzIgb2Zmc2V0OworCXUzMiBzaXplOwkJLyogMHgwMCAtIGF1dG8sIGUuZy4gbGVuZ3RoIG9mIGVudGlyZSBiYXIgKi8KK307CisKK3N0cnVjdCBwbHhfcGNpX2NhcmRfaW5mbyB7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgY2hhbm5lbF9jb3VudDsKKwl1MzIgY2FuX2Nsb2NrOworCXU4IG9jcjsJCQkvKiBvdXRwdXQgY29udHJvbCByZWdpc3RlciAqLworCXU4IGNkcjsJCQkvKiBjbG9jayBkaXZpZGVyIHJlZ2lzdGVyICovCisKKwkvKiBQYXJhbWV0ZXJzIGZvciBtYXBwaW5nIGxvY2FsIGNvbmZpZ3VyYXRpb24gc3BhY2UgKi8KKwlzdHJ1Y3QgcGx4X3BjaV9jaGFubmVsX21hcCBjb25mX21hcDsKKworCS8qIFBhcmFtZXRlcnMgZm9yIG1hcHBpbmcgdGhlIFNKQTEwMDAgY2hpcHMgKi8KKwlzdHJ1Y3QgcGx4X3BjaV9jaGFubmVsX21hcCBjaGFuX21hcF90YmxbUExYX1BDSV9NQVhfQ0hBTl07CisKKwkvKiBQb2ludGVyIHRvIGRldmljZS1kZXBlbmRlbnQgcmVzZXQgZnVuY3Rpb24gKi8KKwl2b2lkICgqcmVzZXRfZnVuYykoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworfTsKKworc3RhdGljIHN0cnVjdCBwbHhfcGNpX2NhcmRfaW5mbyBwbHhfcGNpX2NhcmRfaW5mb19hZGxpbmsgX19kZXZpbml0ZGF0YSA9IHsKKwkiQWRsaW5rIFBDSS03ODQxL2NQQ0ktNzg0MSIsIDIsCisJUExYX1BDSV9DQU5fQ0xPQ0ssIFBMWF9QQ0lfT0NSLCBQTFhfUENJX0NEUiwKKwl7MSwgMHgwMCwgMHgwMH0sIHsgezIsIDB4MDAsIDB4ODB9LCB7MiwgMHg4MCwgMHg4MH0gfSwKKwkmcGx4X3BjaV9yZXNldF9jb21tb24KKwkvKiBiYXNlZCBvbiBQTFg5MDUyICovCit9OworCitzdGF0aWMgc3RydWN0IHBseF9wY2lfY2FyZF9pbmZvIHBseF9wY2lfY2FyZF9pbmZvX2FkbGlua19zZSBfX2RldmluaXRkYXRhID0geworCSJBZGxpbmsgUENJLTc4NDEvY1BDSS03ODQxIFNFIiwgMiwKKwlQTFhfUENJX0NBTl9DTE9DSywgUExYX1BDSV9PQ1IsIFBMWF9QQ0lfQ0RSLAorCXswLCAweDAwLCAweDAwfSwgeyB7MiwgMHgwMCwgMHg4MH0sIHsyLCAweDgwLCAweDgwfSB9LAorCSZwbHhfcGNpX3Jlc2V0X2NvbW1vbgorCS8qIGJhc2VkIG9uIFBMWDkwNTIgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGx4X3BjaV9jYXJkX2luZm8gcGx4X3BjaV9jYXJkX2luZm9fbWFyYXRob24gX19kZXZpbml0ZGF0YSA9IHsKKwkiTWFyYXRob24gQ0FOLWJ1cy1QQ0kiLCAyLAorCVBMWF9QQ0lfQ0FOX0NMT0NLLCBQTFhfUENJX09DUiwgUExYX1BDSV9DRFIsCisJezAsIDB4MDAsIDB4MDB9LCB7IHsyLCAweDAwLCAweDAwfSwgezQsIDB4MDAsIDB4MDB9IH0sCisJJnBseF9wY2lfcmVzZXRfbWFyYXRob24KKwkvKiBiYXNlZCBvbiBQTFg5MDUyICovCit9OworCitzdGF0aWMgc3RydWN0IHBseF9wY2lfY2FyZF9pbmZvIHBseF9wY2lfY2FyZF9pbmZvX3Rld3MgX19kZXZpbml0ZGF0YSA9IHsKKwkiVEVXUyBURUNITk9MT0dJRVMgVFBNQzgxMCIsIDIsCisJUExYX1BDSV9DQU5fQ0xPQ0ssIFBMWF9QQ0lfT0NSLCBQTFhfUENJX0NEUiwKKwl7MCwgMHgwMCwgMHgwMH0sIHsgezIsIDB4MDAwLCAweDgwfSwgezIsIDB4MTAwLCAweDgwfSB9LAorCSZwbHhfcGNpX3Jlc2V0X2NvbW1vbgorCS8qIGJhc2VkIG9uIFBMWDkwMzAgKi8KK307CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwbHhfcGNpX3RibCkgPSB7CisJeworCQkvKiBBZGxpbmsgUENJLTc4NDEvY1BDSS03ODQxICovCisJCUFETElOS19QQ0lfVkVORE9SX0lELCBBRExJTktfUENJX0RFVklDRV9JRCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkJUENJX0NMQVNTX05FVFdPUktfT1RIRVIgPDwgOCwgfjAsCisJCShrZXJuZWxfdWxvbmdfdCkmcGx4X3BjaV9jYXJkX2luZm9fYWRsaW5rCisJfSwKKwl7CisJCS8qIEFkbGluayBQQ0ktNzg0MS9jUENJLTc4NDEgU0UgKi8KKwkJQURMSU5LX1BDSV9WRU5ET1JfSUQsIEFETElOS19QQ0lfREVWSUNFX0lELAorCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELAorCQlQQ0lfQ0xBU1NfQ09NTVVOSUNBVElPTl9PVEhFUiA8PCA4LCB+MCwKKwkJKGtlcm5lbF91bG9uZ190KSZwbHhfcGNpX2NhcmRfaW5mb19hZGxpbmtfc2UKKwl9LAorCXsKKwkJLyogTWFyYXRob24gQ0FOLWJ1cy1QQ0kgY2FyZCAqLworCQlQQ0lfVkVORE9SX0lEX1BMWCwgTUFSQVRIT05fUENJX0RFVklDRV9JRCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkJMCwgMCwKKwkJKGtlcm5lbF91bG9uZ190KSZwbHhfcGNpX2NhcmRfaW5mb19tYXJhdGhvbgorCX0sCisJeworCQkvKiBURVdTIFRFQ0hOT0xPR0lFUyBUUE1DODEwIGNhcmQgKi8KKwkJVEVXU19QQ0lfVkVORE9SX0lELCBURVdTX1BDSV9ERVZJQ0VfSURfVE1QQzgxMCwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwKKwkJMCwgMCwKKwkJKGtlcm5lbF91bG9uZ190KSZwbHhfcGNpX2NhcmRfaW5mb190ZXdzCisJfSwKKwl7IDAsfQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwbHhfcGNpX3RibCk7CisKK3N0YXRpYyB1OCBwbHhfcGNpX3JlYWRfcmVnKGNvbnN0IHN0cnVjdCBzamExMDAwX3ByaXYgKnByaXYsIGludCBwb3J0KQoreworCXJldHVybiBpb3JlYWQ4KHByaXYtPnJlZ19iYXNlICsgcG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIHBseF9wY2lfd3JpdGVfcmVnKGNvbnN0IHN0cnVjdCBzamExMDAwX3ByaXYgKnByaXYsIGludCBwb3J0LCB1OCB2YWwpCit7CisJaW93cml0ZTgodmFsLCBwcml2LT5yZWdfYmFzZSArIHBvcnQpOworfQorCisvKgorICogQ2hlY2sgaWYgYSBDQU4gY29udHJvbGxlciBpcyBwcmVzZW50IGF0IHRoZSBzcGVjaWZpZWQgbG9jYXRpb24KKyAqIGJ5IHRyeWluZyB0byBzd2l0Y2ggJ2VtIGZyb20gdGhlIEJhc2ljIG1vZGUgaW50byB0aGUgUGVsaUNBTiBtb2RlLgorICogQWxzbyBjaGVjayBzdGF0ZXMgb2Ygc29tZSByZWdpc3RlcnMgaW4gcmVzZXQgbW9kZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcGx4X3BjaV9jaGVja19zamExMDAwKGNvbnN0IHN0cnVjdCBzamExMDAwX3ByaXYgKnByaXYpCit7CisJaW50IGZsYWcgPSAwOworCisJLyoKKwkgKiBDaGVjayByZWdpc3RlcnMgYWZ0ZXIgaGFyZHdhcmUgcmVzZXQgKHRoZSBCYXNpYyBtb2RlKQorCSAqIFNlZSBzdGF0ZXMgb24gcC4gMTAgb2YgdGhlIERhdGFzaGVldC4KKwkgKi8KKwlpZiAoKHByaXYtPnJlYWRfcmVnKHByaXYsIFJFR19DUikgJiBSRUdfQ1JfQkFTSUNDQU5fSU5JVElBTF9NQVNLKSA9PQorCSAgICBSRUdfQ1JfQkFTSUNDQU5fSU5JVElBTCAmJgorCSAgICAocHJpdi0+cmVhZF9yZWcocHJpdiwgUkVHX1NSKSA9PSBSRUdfU1JfQkFTSUNDQU5fSU5JVElBTCkgJiYKKwkgICAgKHByaXYtPnJlYWRfcmVnKHByaXYsIFJFR19JUikgPT0gUkVHX0lSX0JBU0lDQ0FOX0lOSVRJQUwpKQorCQlmbGFnID0gMTsKKworCS8qIEJyaW5nIHRoZSBTSkExMDAwIGludG8gdGhlIFBlbGlDQU4gbW9kZSovCisJcHJpdi0+d3JpdGVfcmVnKHByaXYsIFJFR19DRFIsIENEUl9QRUxJQ0FOKTsKKworCS8qCisJICogQ2hlY2sgcmVnaXN0ZXJzIGFmdGVyIHJlc2V0IGluIHRoZSBQZWxpQ0FOIG1vZGUuCisJICogU2VlIHN0YXRlcyBvbiBwLiAyMyBvZiB0aGUgRGF0YXNoZWV0LgorCSAqLworCWlmIChwcml2LT5yZWFkX3JlZyhwcml2LCBSRUdfTU9EKSA9PSBSRUdfTU9EX1BFTElDQU5fSU5JVElBTCAmJgorCSAgICBwcml2LT5yZWFkX3JlZyhwcml2LCBSRUdfU1IpID09IFJFR19TUl9QRUxJQ0FOX0lOSVRJQUwgJiYKKwkgICAgcHJpdi0+cmVhZF9yZWcocHJpdiwgUkVHX0lSKSA9PSBSRUdfSVJfUEVMSUNBTl9JTklUSUFMKQorCQlyZXR1cm4gZmxhZzsKKworCXJldHVybiAwOworfQorCisvKgorICogUExYOTB4eCBzb2Z0d2FyZSByZXNldAorICogQWxzbyBMUkVTRVQjIGFzc2VydHMgYW5kIGJyaW5ncyB0byByZXNldCBkZXZpY2Ugb24gdGhlIExvY2FsIEJ1cyAoaWYgd2lyZWQpLgorICogRm9yIG1vc3QgY2FyZHMgaXQncyBlbm91Z2ggZm9yIHJlc2V0IHRoZSBTSkExMDAwIGNoaXBzLgorICovCitzdGF0aWMgdm9pZCBwbHhfcGNpX3Jlc2V0X2NvbW1vbihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgcGx4X3BjaV9jYXJkICpjYXJkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXUzMiBjbnRybDsKKworCWNudHJsID0gaW9yZWFkMzIoY2FyZC0+Y29uZl9hZGRyICsgUExYX0NOVFJMKTsKKwljbnRybCB8PSBQTFhfUENJX1JFU0VUOworCWlvd3JpdGUzMihjbnRybCwgY2FyZC0+Y29uZl9hZGRyICsgUExYX0NOVFJMKTsKKwl1ZGVsYXkoMTAwKTsKKwljbnRybCBePSBQTFhfUENJX1JFU0VUOworCWlvd3JpdGUzMihjbnRybCwgY2FyZC0+Y29uZl9hZGRyICsgUExYX0NOVFJMKTsKK307CisKKy8qIFNwZWNpYWwgcmVzZXQgZnVuY3Rpb24gZm9yIE1hcmF0aG9uIGNhcmQgKi8KK3N0YXRpYyB2b2lkIHBseF9wY2lfcmVzZXRfbWFyYXRob24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdm9pZCBfX2lvbWVtICpyZXNldF9hZGRyOworCWludCBpOworCWludCByZXNldF9iYXJbMl0gPSB7MywgNX07CisKKwlwbHhfcGNpX3Jlc2V0X2NvbW1vbihwZGV2KTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJcmVzZXRfYWRkciA9IHBjaV9pb21hcChwZGV2LCByZXNldF9iYXJbaV0sIDApOworCQlpZiAoIXJlc2V0X2FkZHIpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZW1hcCByZXNldCAiCisJCQkJInNwYWNlICVkIChCQVIlZClcbiIsIGksIHJlc2V0X2JhcltpXSk7CisJCX0gZWxzZSB7CisJCQkvKiByZXNldCB0aGUgU0pBMTAwMCBjaGlwICovCisJCQlpb3dyaXRlOCgweDEsIHJlc2V0X2FkZHIpOworCQkJdWRlbGF5KDEwMCk7CisJCQlwY2lfaW91bm1hcChwZGV2LCByZXNldF9hZGRyKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgcGx4X3BjaV9kZWxfY2FyZChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgcGx4X3BjaV9jYXJkICpjYXJkID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IHNqYTEwMDBfcHJpdiAqcHJpdjsKKwlpbnQgaSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgY2FyZC0+Y2hhbm5lbHM7IGkrKykgeworCQlkZXYgPSBjYXJkLT5uZXRfZGV2W2ldOworCQlpZiAoIWRldikKKwkJCWNvbnRpbnVlOworCisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJSZW1vdmluZyAlc1xuIiwgZGV2LT5uYW1lKTsKKwkJdW5yZWdpc3Rlcl9zamExMDAwZGV2KGRldik7CisJCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCQlpZiAocHJpdi0+cmVnX2Jhc2UpCisJCQlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5yZWdfYmFzZSk7CisJCWZyZWVfc2phMTAwMGRldihkZXYpOworCX0KKworCXBseF9wY2lfcmVzZXRfY29tbW9uKHBkZXYpOworCisJLyoKKwkgKiBEaXNhYmxlIGludGVycnVwdHMgZnJvbSBQQ0ktY2FyZCAoUExYOTB4eCkgYW5kIGRpc2FibGUgTG9jYWxfMSwKKwkgKiBMb2NhbF8yIGludGVycnVwdHMKKwkgKi8KKwlpb3dyaXRlMzIoMHgwLCBjYXJkLT5jb25mX2FkZHIgKyBQTFhfSU5UQ1NSKTsKKworCWlmIChjYXJkLT5jb25mX2FkZHIpCisJCXBjaV9pb3VubWFwKHBkZXYsIGNhcmQtPmNvbmZfYWRkcik7CisKKwlrZnJlZShjYXJkKTsKKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7Cit9CisKKy8qCisgKiBQcm9iZSBQTFg5MHh4IGJhc2VkIGRldmljZSBmb3IgdGhlIFNKQTEwMDAgY2hpcHMgYW5kIHJlZ2lzdGVyIGVhY2gKKyAqIGF2YWlsYWJsZSBDQU4gY2hhbm5lbCB0byBTSkExMDAwIFNvY2tldC1DQU4gc3Vic3lzdGVtLgorICovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBwbHhfcGNpX2FkZF9jYXJkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJc3RydWN0IHNqYTEwMDBfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBwbHhfcGNpX2NhcmQgKmNhcmQ7CisJc3RydWN0IHBseF9wY2lfY2FyZF9pbmZvICpjaTsKKwlpbnQgZXJyLCBpOworCXUzMiB2YWw7CisJdm9pZCBfX2lvbWVtICphZGRyOworCisJY2kgPSAoc3RydWN0IHBseF9wY2lfY2FyZF9pbmZvICopZW50LT5kcml2ZXJfZGF0YTsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIkRldGVjdGVkIFwiJXNcIiBjYXJkIGF0IHNsb3QgIyVpXG4iLAorCQkgY2ktPm5hbWUsIFBDSV9TTE9UKHBkZXYtPmRldmZuKSk7CisKKwkvKiBBbGxvY2F0ZSBjYXJkIHN0cnVjdHVyZXMgdG8gaG9sZCBhZGRyZXNzZXMsIC4uLiAqLworCWNhcmQgPSBremFsbG9jKHNpemVvZigqY2FyZCksIEdGUF9LRVJORUwpOworCWlmICghY2FyZCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5XG4iKTsKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgY2FyZCk7CisKKwljYXJkLT5jaGFubmVscyA9IDA7CisKKwkvKiBSZW1hcCBQTFg5MHh4IGNvbmZpZ3VyYXRpb24gc3BhY2UgKi8KKwlhZGRyID0gcGNpX2lvbWFwKHBkZXYsIGNpLT5jb25mX21hcC5iYXIsIGNpLT5jb25mX21hcC5zaXplKTsKKwlpZiAoIWFkZHIpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlbWFwIGNvbmZpZ3VyYXRpb24gc3BhY2UgIgorCQkJIihCQVIlZClcbiIsIGNpLT5jb25mX21hcC5iYXIpOworCQlnb3RvIGZhaWx1cmVfY2xlYW51cDsKKwl9CisJY2FyZC0+Y29uZl9hZGRyID0gYWRkciArIGNpLT5jb25mX21hcC5vZmZzZXQ7CisKKwljaS0+cmVzZXRfZnVuYyhwZGV2KTsKKworCS8qIERldGVjdCBhdmFpbGFibGUgY2hhbm5lbHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY2ktPmNoYW5uZWxfY291bnQ7IGkrKykgeworCQlzdHJ1Y3QgcGx4X3BjaV9jaGFubmVsX21hcCAqY20gPSAmY2ktPmNoYW5fbWFwX3RibFtpXTsKKworCQlkZXYgPSBhbGxvY19zamExMDAwZGV2KDApOworCQlpZiAoIWRldikgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWdvdG8gZmFpbHVyZV9jbGVhbnVwOworCQl9CisKKwkJY2FyZC0+bmV0X2RldltpXSA9IGRldjsKKwkJcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJCXByaXYtPnByaXYgPSBjYXJkOworCQlwcml2LT5pcnFfZmxhZ3MgPSBJUlFGX1NIQVJFRDsKKworCQlkZXYtPmlycSA9IHBkZXYtPmlycTsKKworCQkvKgorCQkgKiBSZW1hcCBJTyBzcGFjZSBvZiB0aGUgU0pBMTAwMCBjaGlwcworCQkgKiBUaGlzIGlzIGRldmljZS1kZXBlbmRlbnQgbWFwcGluZworCQkgKi8KKwkJYWRkciA9IHBjaV9pb21hcChwZGV2LCBjbS0+YmFyLCBjbS0+c2l6ZSk7CisJCWlmICghYWRkcikgeworCQkJZXJyID0gLUVOT01FTTsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZW1hcCBCQVIlZFxuIiwgY20tPmJhcik7CisJCQlnb3RvIGZhaWx1cmVfY2xlYW51cDsKKwkJfQorCisJCXByaXYtPnJlZ19iYXNlID0gYWRkciArIGNtLT5vZmZzZXQ7CisJCXByaXYtPnJlYWRfcmVnID0gcGx4X3BjaV9yZWFkX3JlZzsKKwkJcHJpdi0+d3JpdGVfcmVnID0gcGx4X3BjaV93cml0ZV9yZWc7CisKKwkJLyogQ2hlY2sgaWYgY2hhbm5lbCBpcyBwcmVzZW50ICovCisJCWlmIChwbHhfcGNpX2NoZWNrX3NqYTEwMDAocHJpdikpIHsKKwkJCXByaXYtPmNhbi5jbG9jay5mcmVxID0gY2ktPmNhbl9jbG9jazsKKwkJCXByaXYtPm9jciA9IGNpLT5vY3I7CisJCQlwcml2LT5jZHIgPSBjaS0+Y2RyOworCisJCQlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOworCisJCQkvKiBSZWdpc3RlciBTSkExMDAwIGRldmljZSAqLworCQkJZXJyID0gcmVnaXN0ZXJfc2phMTAwMGRldihkZXYpOworCQkJaWYgKGVycikgeworCQkJCWRldl9lcnIoJnBkZXYtPmRldiwgIlJlZ2lzdGVyaW5nIGRldmljZSBmYWlsZWQgIgorCQkJCQkiKGVycj0lZClcbiIsIGVycik7CisJCQkJZnJlZV9zamExMDAwZGV2KGRldik7CisJCQkJZ290byBmYWlsdXJlX2NsZWFudXA7CisJCQl9CisKKwkJCWNhcmQtPmNoYW5uZWxzKys7CisKKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJDaGFubmVsICMlZCBhdCAweCVwLCBpcnEgJWQgIgorCQkJCSAicmVnaXN0ZXJlZCBhcyAlc1xuIiwgaSArIDEsIHByaXYtPnJlZ19iYXNlLAorCQkJCSBkZXYtPmlycSwgZGV2LT5uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNoYW5uZWwgIyVkIG5vdCBkZXRlY3RlZFxuIiwKKwkJCQlpICsgMSk7CisJCQlmcmVlX3NqYTEwMDBkZXYoZGV2KTsKKwkJfQorCX0KKworCWlmICghY2FyZC0+Y2hhbm5lbHMpIHsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBmYWlsdXJlX2NsZWFudXA7CisJfQorCisJLyoKKwkgKiBFbmFibGUgaW50ZXJydXB0cyBmcm9tIFBDSS1jYXJkIChQTFg5MHh4KSBhbmQgZW5hYmxlIExvY2FsXzEsCisJICogTG9jYWxfMiBpbnRlcnJ1cHRzIGZyb20gdGhlIFNKQTEwMDAgY2hpcHMKKwkgKi8KKwl2YWwgPSBpb3JlYWQzMihjYXJkLT5jb25mX2FkZHIgKyBQTFhfSU5UQ1NSKTsKKwl2YWwgfD0gUExYX0xJTlQxX0VOIHwgUExYX0xJTlQyX0VOIHwgUExYX1BDSV9JTlRfRU47CisJaW93cml0ZTMyKHZhbCwgY2FyZC0+Y29uZl9hZGRyICsgUExYX0lOVENTUik7CisKKwlyZXR1cm4gMDsKKworZmFpbHVyZV9jbGVhbnVwOgorCWRldl9lcnIoJnBkZXYtPmRldiwgIkVycm9yOiAlZC4gQ2xlYW5pbmcgVXAuXG4iLCBlcnIpOworCisJcGx4X3BjaV9kZWxfY2FyZChwZGV2KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwbHhfcGNpX2RyaXZlciA9IHsKKwkubmFtZSA9IERSVl9OQU1FLAorCS5pZF90YWJsZSA9IHBseF9wY2lfdGJsLAorCS5wcm9iZSA9IHBseF9wY2lfYWRkX2NhcmQsCisJLnJlbW92ZSA9IHBseF9wY2lfZGVsX2NhcmQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBwbHhfcGNpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcGx4X3BjaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcGx4X3BjaV9leGl0KHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZwbHhfcGNpX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHBseF9wY2lfaW5pdCk7Cittb2R1bGVfZXhpdChwbHhfcGNpX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMC5jIGIvZHJpdmVycy9uZXQvY2FuL3NqYTEwMDAvc2phMTAwMC5jCmluZGV4IDU0MmE0ZjcuLjE0NWIxYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi9zamExMDAwL3NqYTEwMDAuYworKysgYi9kcml2ZXJzL25ldC9jYW4vc2phMTAwMC9zamExMDAwLmMKQEAgLTEzMCw4ICsxMzAsMTIgQEAKIAkJLyogY2hlY2sgcmVzZXQgYml0ICovCiAJCWlmICgoc3RhdHVzICYgTU9EX1JNKSA9PSAwKSB7CiAJCQlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfQUNUSVZFOwotCQkJLyogZW5hYmxlIGFsbCBpbnRlcnJ1cHRzICovCi0JCQlwcml2LT53cml0ZV9yZWcocHJpdiwgUkVHX0lFUiwgSVJRX0FMTCk7CisJCQkvKiBlbmFibGUgaW50ZXJydXB0cyAqLworCQkJaWYgKHByaXYtPmNhbi5jdHJsbW9kZSAmIENBTl9DVFJMTU9ERV9CRVJSX1JFUE9SVElORykKKwkJCQlwcml2LT53cml0ZV9yZWcocHJpdiwgUkVHX0lFUiwgSVJRX0FMTCk7CisJCQllbHNlCisJCQkJcHJpdi0+d3JpdGVfcmVnKHByaXYsIFJFR19JRVIsCisJCQkJCQlJUlFfQUxMICYgfklSUV9CRUkpOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTIwMyw2ICsyMDcsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzamExMDAwX2dldF9iZXJyX2NvdW50ZXIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkgICAgc3RydWN0IGNhbl9iZXJyX2NvdW50ZXIgKmJlYykKK3sKKwlzdHJ1Y3Qgc2phMTAwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWJlYy0+dHhlcnIgPSBwcml2LT5yZWFkX3JlZyhwcml2LCBSRUdfVFhFUlIpOworCWJlYy0+cnhlcnIgPSBwcml2LT5yZWFkX3JlZyhwcml2LCBSRUdfUlhFUlIpOworCisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBpbml0aWFsaXplIFNKQTEwMDAgY2hpcDoKICAqICAgLSByZXNldCBjaGlwCkBAIC0yNDksNiArMjY0LDkgQEAKIAl1aW50OF90IGRyZWc7CiAJaW50IGk7CiAKKwlpZiAoY2FuX2Ryb3BwZWRfaW52YWxpZF9za2IoZGV2LCBza2IpKQorCQlyZXR1cm4gTkVUREVWX1RYX09LOworCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCiAJZmkgPSBkbGMgPSBjZi0+Y2FuX2RsYzsKQEAgLTQzNCw2ICs0NTIsOCBAQAogCQkJCUNBTl9FUlJfQ1JUTF9UWF9QQVNTSVZFIDoKIAkJCQlDQU5fRVJSX0NSVExfUlhfUEFTU0lWRTsKIAkJfQorCQljZi0+ZGF0YVs2XSA9IHR4ZXJyOworCQljZi0+ZGF0YVs3XSA9IHJ4ZXJyOwogCX0KIAogCXByaXYtPmNhbi5zdGF0ZSA9IHN0YXRlOwpAQCAtNTY0LDYgKzU4NCw5IEBACiAJcHJpdi0+Y2FuLmJpdHRpbWluZ19jb25zdCA9ICZzamExMDAwX2JpdHRpbWluZ19jb25zdDsKIAlwcml2LT5jYW4uZG9fc2V0X2JpdHRpbWluZyA9IHNqYTEwMDBfc2V0X2JpdHRpbWluZzsKIAlwcml2LT5jYW4uZG9fc2V0X21vZGUgPSBzamExMDAwX3NldF9tb2RlOworCXByaXYtPmNhbi5kb19nZXRfYmVycl9jb3VudGVyID0gc2phMTAwMF9nZXRfYmVycl9jb3VudGVyOworCXByaXYtPmNhbi5jdHJsbW9kZV9zdXBwb3J0ZWQgPSBDQU5fQ1RSTE1PREVfM19TQU1QTEVTIHwKKwkJQ0FOX0NUUkxNT0RFX0JFUlJfUkVQT1JUSU5HOwogCiAJaWYgKHNpemVvZl9wcml2KQogCQlwcml2LT5wcml2ID0gKHZvaWQgKilwcml2ICsgc2l6ZW9mKHN0cnVjdCBzamExMDAwX3ByaXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3RpX2hlY2MuYyBiL2RyaXZlcnMvbmV0L2Nhbi90aV9oZWNjLmMKaW5kZXggNWM5OTNjMi4uMGMzZDJiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2FuL3RpX2hlY2MuYworKysgYi9kcml2ZXJzL25ldC9jYW4vdGlfaGVjYy5jCkBAIC0yOCw5ICsyOCwxMSBAQAogICogICAgICAgICAubWJ4X29mZnNldCAgICAgICAgICAgICA9IDB4MjAwMCwKICAqICAgICAgICAgLmludF9saW5lICAgICAgICAgICAgICAgPSAwLAogICogICAgICAgICAucmV2aXNpb24gICAgICAgICAgICAgICA9IDEsCisgKiAgICAgICAgIC50cmFuc2NlaXZlcl9zd2l0Y2ggICAgID0gaGVjY19waHlfY29udHJvbCwKICAqIH07CiAgKgotICogUGxlYXNlIHNlZSBpbmNsdWRlL2Nhbi9wbGF0Zm9ybS90aV9oZWNjLmggZm9yIGRlc2NyaXB0aW9uIG9mIGFib3ZlIGZpZWxkcworICogUGxlYXNlIHNlZSBpbmNsdWRlL2xpbnV4L2Nhbi9wbGF0Zm9ybS90aV9oZWNjLmggZm9yIGRlc2NyaXB0aW9uIG9mCisgKiBhYm92ZSBmaWVsZHMuCiAgKgogICovCiAKQEAgLTIyMCw2ICsyMjIsNyBAQAogCXUzMiB0eF9oZWFkOwogCXUzMiB0eF90YWlsOwogCXUzMiByeF9uZXh0OworCXZvaWQgKCp0cmFuc2NlaXZlcl9zd2l0Y2gpKGludCk7CiB9OwogCiBzdGF0aWMgaW5saW5lIGludCBnZXRfdHhfaGVhZF9tYihzdHJ1Y3QgdGlfaGVjY19wcml2ICpwcml2KQpAQCAtMzE3LDYgKzMyMCwxMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCB0aV9oZWNjX3RyYW5zY2VpdmVyX3N3aXRjaChjb25zdCBzdHJ1Y3QgdGlfaGVjY19wcml2ICpwcml2LAorCQkJCQlpbnQgb24pCit7CisJaWYgKHByaXYtPnRyYW5zY2VpdmVyX3N3aXRjaCkKKwkJcHJpdi0+dHJhbnNjZWl2ZXJfc3dpdGNoKG9uKTsKK30KKwogc3RhdGljIHZvaWQgdGlfaGVjY19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAl1MzIgY250OwpAQCAtNDc3LDYgKzQ4Nyw5IEBACiAJdTMyIG1ieG5vLCBtYnhfbWFzaywgZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKGNhbl9kcm9wcGVkX2ludmFsaWRfc2tiKG5kZXYsIHNrYikpCisJCXJldHVybiBORVRERVZfVFhfT0s7CisKIAltYnhubyA9IGdldF90eF9oZWFkX21iKHByaXYpOwogCW1ieF9tYXNrID0gQklUKG1ieG5vKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bWJ4X2xvY2ssIGZsYWdzKTsKQEAgLTQ5MSw3ICs1MDQsNiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPm1ieF9sb2NrLCBmbGFncyk7CiAKIAkvKiBQcmVwYXJlIG1haWxib3ggZm9yIHRyYW5zbWlzc2lvbiAqLwotCWRhdGEgPSBtaW5fdCh1OCwgY2YtPmNhbl9kbGMsIDgpOwogCWlmIChjZi0+Y2FuX2lkICYgQ0FOX1JUUl9GTEFHKSAvKiBSZW1vdGUgdHJhbnNtaXNzaW9uIHJlcXVlc3QgKi8KIAkJZGF0YSB8PSBIRUNDX0NBTk1DRl9SVFI7CiAJZGF0YSB8PSBnZXRfdHhfaGVhZF9wcmlvKHByaXYpIDw8IDg7CkBAIC04MTYsMTUgKzgyOCwxNyBAQAogCQlyZXR1cm4gZXJyOwogCX0KIAorCXRpX2hlY2NfdHJhbnNjZWl2ZXJfc3dpdGNoKHByaXYsIDEpOworCiAJLyogT3BlbiBjb21tb24gY2FuIGRldmljZSAqLwogCWVyciA9IG9wZW5fY2FuZGV2KG5kZXYpOwogCWlmIChlcnIpIHsKIAkJZGV2X2VycihuZGV2LT5kZXYucGFyZW50LCAib3Blbl9jYW5kZXYoKSBmYWlsZWQgJWRcbiIsIGVycik7CisJCXRpX2hlY2NfdHJhbnNjZWl2ZXJfc3dpdGNoKHByaXYsIDApOwogCQlmcmVlX2lycShuZGV2LT5pcnEsIG5kZXYpOwogCQlyZXR1cm4gZXJyOwogCX0KIAotCWNsa19lbmFibGUocHJpdi0+Y2xrKTsKIAl0aV9oZWNjX3N0YXJ0KG5kZXYpOwogCW5hcGlfZW5hYmxlKCZwcml2LT5uYXBpKTsKIAluZXRpZl9zdGFydF9xdWV1ZShuZGV2KTsKQEAgLTg0MCw4ICs4NTQsOCBAQAogCW5hcGlfZGlzYWJsZSgmcHJpdi0+bmFwaSk7CiAJdGlfaGVjY19zdG9wKG5kZXYpOwogCWZyZWVfaXJxKG5kZXYtPmlycSwgbmRldik7Ci0JY2xrX2Rpc2FibGUocHJpdi0+Y2xrKTsKIAljbG9zZV9jYW5kZXYobmRldik7CisJdGlfaGVjY190cmFuc2NlaXZlcl9zd2l0Y2gocHJpdiwgMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTkwMywxMCArOTE3LDEyIEBACiAJcHJpdi0+aGVjY19yYW1fb2Zmc2V0ID0gcGRhdGEtPmhlY2NfcmFtX29mZnNldDsKIAlwcml2LT5tYnhfb2Zmc2V0ID0gcGRhdGEtPm1ieF9vZmZzZXQ7CiAJcHJpdi0+aW50X2xpbmUgPSBwZGF0YS0+aW50X2xpbmU7CisJcHJpdi0+dHJhbnNjZWl2ZXJfc3dpdGNoID0gcGRhdGEtPnRyYW5zY2VpdmVyX3N3aXRjaDsKIAogCXByaXYtPmNhbi5iaXR0aW1pbmdfY29uc3QgPSAmdGlfaGVjY19iaXR0aW1pbmdfY29uc3Q7CiAJcHJpdi0+Y2FuLmRvX3NldF9tb2RlID0gdGlfaGVjY19kb19zZXRfbW9kZTsKIAlwcml2LT5jYW4uZG9fZ2V0X3N0YXRlID0gdGlfaGVjY19nZXRfc3RhdGU7CisJcHJpdi0+Y2FuLmN0cmxtb2RlX3N1cHBvcnRlZCA9IENBTl9DVFJMTU9ERV8zX1NBTVBMRVM7CiAKIAluZGV2LT5pcnEgPSBpcnEtPnN0YXJ0OwogCW5kZXYtPmZsYWdzIHw9IElGRl9FQ0hPOwpAQCAtOTI1LDYgKzk0MSw3IEBACiAJbmV0aWZfbmFwaV9hZGQobmRldiwgJnByaXYtPm5hcGksIHRpX2hlY2NfcnhfcG9sbCwKIAkJSEVDQ19ERUZfTkFQSV9XRUlHSFQpOwogCisJY2xrX2VuYWJsZShwcml2LT5jbGspOwogCWVyciA9IHJlZ2lzdGVyX2NhbmRldihuZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgInJlZ2lzdGVyX2NhbmRldigpIGZhaWxlZFxuIik7CkBAIC05NTMsNiArOTcwLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB0aV9oZWNjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAorCWNsa19kaXNhYmxlKHByaXYtPmNsayk7CiAJY2xrX3B1dChwcml2LT5jbGspOwogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CiAJaW91bm1hcChwcml2LT5iYXNlKTsKQEAgLTk2NCw2ICs5ODIsNDggQEAKIAlyZXR1cm4gMDsKIH0KIAorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHRpX2hlY2Nfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCB0aV9oZWNjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCW5ldGlmX2RldmljZV9kZXRhY2goZGV2KTsKKwl9CisKKwloZWNjX3NldF9iaXQocHJpdiwgSEVDQ19DQU5NQywgSEVDQ19DQU5NQ19QRFIpOworCXByaXYtPmNhbi5zdGF0ZSA9IENBTl9TVEFURV9TTEVFUElORzsKKworCWNsa19kaXNhYmxlKHByaXYtPmNsayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0aV9oZWNjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdGlfaGVjY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWNsa19lbmFibGUocHJpdi0+Y2xrKTsKKworCWhlY2NfY2xlYXJfYml0KHByaXYsIEhFQ0NfQ0FOTUMsIEhFQ0NfQ0FOTUNfUERSKTsKKwlwcml2LT5jYW4uc3RhdGUgPSBDQU5fU1RBVEVfRVJST1JfQUNUSVZFOworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CisJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZWxzZQorI2RlZmluZSB0aV9oZWNjX3N1c3BlbmQgTlVMTAorI2RlZmluZSB0aV9oZWNjX3Jlc3VtZSBOVUxMCisjZW5kaWYKKwogLyogVEkgSEVDQyBuZXRkZXZpY2UgZHJpdmVyOiBwbGF0Zm9ybSBkcml2ZXIgc3RydWN0dXJlICovCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0aV9oZWNjX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewpAQCAtOTcyLDYgKzEwMzIsOCBAQAogCX0sCiAJLnByb2JlID0gdGlfaGVjY19wcm9iZSwKIAkucmVtb3ZlID0gX19kZXZleGl0X3AodGlfaGVjY19yZW1vdmUpLAorCS5zdXNwZW5kID0gdGlfaGVjY19zdXNwZW5kLAorCS5yZXN1bWUgPSB0aV9oZWNjX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHRpX2hlY2NfaW5pdF9kcml2ZXIodm9pZCkKQEAgLTk3OSwxNCArMTA0MSwxNSBAQAogCXByaW50ayhLRVJOX0lORk8gRFJWX0RFU0MgIlxuIik7CiAJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdGlfaGVjY19kcml2ZXIpOwogfQotbW9kdWxlX2luaXQodGlfaGVjY19pbml0X2RyaXZlcik7CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCB0aV9oZWNjX2V4aXRfZHJpdmVyKHZvaWQpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyBEUlZfREVTQyAiIHVubG9hZGVkXG4iKTsKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdGlfaGVjY19kcml2ZXIpOwogfQorCiBtb2R1bGVfZXhpdCh0aV9oZWNjX2V4aXRfZHJpdmVyKTsKK21vZHVsZV9pbml0KHRpX2hlY2NfaW5pdF9kcml2ZXIpOwogCiBNT0RVTEVfQVVUSE9SKCJBbmFudCBHb2xlIDxhbmFudGdvbGVAdGkuY29tPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnIGIvZHJpdmVycy9uZXQvY2FuL3VzYi9LY29uZmlnCmluZGV4IGJiYzc4ZTAuLjk3ZmY2ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi91c2IvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9jYW4vdXNiL0tjb25maWcKQEAgLTUsNiArNSw2IEBACiAJdHJpc3RhdGUgIkVNUyBDUEMtVVNCL0FSTTcgQ0FOL1VTQiBpbnRlcmZhY2UiCiAJLS0taGVscC0tLQogCSAgVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBvbmUgY2hhbm5lbCBDUEMtVVNCL0FSTTcgQ0FOL1VTQiBpbnRlcmZhY2UKLQkgIGZyb20gZnJvbSBFTVMgRHIuIFRob21hcyBXdWVuc2NoZSAoaHR0cDovL3d3dy5lbXMtd3VlbnNjaGUuZGUpLgorCSAgZnJvbSBFTVMgRHIuIFRob21hcyBXdWVuc2NoZSAoaHR0cDovL3d3dy5lbXMtd3VlbnNjaGUuZGUpLgogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYW4vdXNiL2Vtc191c2IuYyBiL2RyaXZlcnMvbmV0L2Nhbi91c2IvZW1zX3VzYi5jCmluZGV4IGVmYmIwNWM3Li4xMWM4Nzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jYW4vdXNiL2Vtc191c2IuYworKysgYi9kcml2ZXJzL25ldC9jYW4vdXNiL2Vtc191c2IuYwpAQCAtNzY3LDYgKzc2Nyw5IEBACiAJc2l6ZV90IHNpemUgPSBDUENfSEVBREVSX1NJWkUgKyBDUENfTVNHX0hFQURFUl9MRU4KIAkJCSsgc2l6ZW9mKHN0cnVjdCBjcGNfY2FuX21zZyk7CiAKKwlpZiAoY2FuX2Ryb3BwZWRfaW52YWxpZF9za2IobmV0ZGV2LCBza2IpKQorCQlyZXR1cm4gTkVUREVWX1RYX09LOworCiAJLyogY3JlYXRlIGEgVVJCLCBhbmQgYSBidWZmZXIgZm9yIGl0LCBhbmQgY29weSB0aGUgZGF0YSB0byB0aGUgVVJCICovCiAJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXVyYikgewpAQCAtMTAxOSw4ICsxMDIyLDcgQEAKIAlkZXYtPmNhbi5iaXR0aW1pbmdfY29uc3QgPSAmZW1zX3VzYl9iaXR0aW1pbmdfY29uc3Q7CiAJZGV2LT5jYW4uZG9fc2V0X2JpdHRpbWluZyA9IGVtc191c2Jfc2V0X2JpdHRpbWluZzsKIAlkZXYtPmNhbi5kb19zZXRfbW9kZSA9IGVtc191c2Jfc2V0X21vZGU7Ci0KLQluZXRkZXYtPmZsYWdzIHw9IElGRl9FQ0hPOyAvKiB3ZSBzdXBwb3J0IGxvY2FsIGVjaG8gKi8KKwlkZXYtPmNhbi5jdHJsbW9kZV9zdXBwb3J0ZWQgPSBDQU5fQ1RSTE1PREVfM19TQU1QTEVTOwogCiAJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmVtc191c2JfbmV0ZGV2X29wczsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2FuL3ZjYW4uYyBiL2RyaXZlcnMvbmV0L2Nhbi92Y2FuLmMKaW5kZXggODBhYzU2MzEuLmQxMjRkODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2Nhbi92Y2FuLmMKKysrIGIvZHJpdmVycy9uZXQvY2FuL3ZjYW4uYwpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvY2FuLmg+CisjaW5jbHVkZSA8bGludXgvY2FuL2Rldi5oPgogI2luY2x1ZGUgPG5ldC9ydG5ldGxpbmsuaD4KIAogc3RhdGljIF9faW5pdGRhdGEgY29uc3QgY2hhciBiYW5uZXJbXSA9CkBAIC03MCwxMCArNzEsMTEgQEAKIAogc3RhdGljIHZvaWQgdmNhbl9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogeworCXN0cnVjdCBjYW5fZnJhbWUgKmNmID0gKHN0cnVjdCBjYW5fZnJhbWUgKilza2ItPmRhdGE7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmRldi0+c3RhdHM7CiAKIAlzdGF0cy0+cnhfcGFja2V0cysrOwotCXN0YXRzLT5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwlzdGF0cy0+cnhfYnl0ZXMgKz0gY2YtPmNhbl9kbGM7CiAKIAlza2ItPnByb3RvY29sICA9IGh0b25zKEVUSF9QX0NBTik7CiAJc2tiLT5wa3RfdHlwZSAgPSBQQUNLRVRfQlJPQURDQVNUOwpAQCAtODUsMTEgKzg3LDE1IEBACiAKIHN0YXRpYyBuZXRkZXZfdHhfdCB2Y2FuX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IGNhbl9mcmFtZSAqY2YgPSAoc3RydWN0IGNhbl9mcmFtZSAqKXNrYi0+ZGF0YTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKIAlpbnQgbG9vcDsKIAorCWlmIChjYW5fZHJvcHBlZF9pbnZhbGlkX3NrYihkZXYsIHNrYikpCisJCXJldHVybiBORVRERVZfVFhfT0s7CisKIAlzdGF0cy0+dHhfcGFja2V0cysrOwotCXN0YXRzLT50eF9ieXRlcyArPSBza2ItPmxlbjsKKwlzdGF0cy0+dHhfYnl0ZXMgKz0gY2YtPmNhbl9kbGM7CiAKIAkvKiBzZXQgZmxhZyB3aGV0aGVyIHRoaXMgcGFja2V0IGhhcyB0byBiZSBsb29wZWQgYmFjayAqLwogCWxvb3AgPSBza2ItPnBrdF90eXBlID09IFBBQ0tFVF9MT09QQkFDSzsKQEAgLTEwMyw3ICsxMDksNyBAQAogCQkJICogQ0FOIGNvcmUgYWxyZWFkeSBkaWQgdGhlIGVjaG8gZm9yIHVzCiAJCQkgKi8KIAkJCXN0YXRzLT5yeF9wYWNrZXRzKys7Ci0JCQlzdGF0cy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCQlzdGF0cy0+cnhfYnl0ZXMgKz0gY2YtPmNhbl9kbGM7CiAJCX0KIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBORVRERVZfVFhfT0s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jYXNzaW5pLmMgYi9kcml2ZXJzL25ldC9jYXNzaW5pLmMKaW5kZXggZjg1N2FmZS4uN2NiY2ZiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2Fzc2luaS5jCisrKyBiL2RyaXZlcnMvbmV0L2Nhc3NpbmkuYwpAQCAtNjYsNiArNjYsNyBAQAogICogYnkgZGVmYXVsdCwgdGhlIHNlbGVjdGl2ZSBjbGVhciBtYXNrIGlzIHNldCB1cCB0byBwcm9jZXNzIHJ4IHBhY2tldHMuCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CkBAIC0xMDYsNyArMTA3LDcgQEAKICNkZWZpbmUgY2FzX3BhZ2VfdW5tYXAoeCkgICAga3VubWFwX2F0b21pYygoeCksIEtNX1NLQl9EQVRBX1NPRlRJUlEpCiAjZGVmaW5lIENBU19OQ1BVUyAgICAgICAgICAgIG51bV9vbmxpbmVfY3B1cygpCiAKLSNpZiBkZWZpbmVkKENPTkZJR19DQVNTSU5JX05BUEkpICYmIGRlZmluZWQoSEFWRV9ORVRERVZfUE9MTCkKKyNpZmRlZiBDT05GSUdfQ0FTU0lOSV9OQVBJCiAjZGVmaW5lIFVTRV9OQVBJCiAjZGVmaW5lIGNhc19za2JfcmVsZWFzZSh4KSAgbmV0aWZfcmVjZWl2ZV9za2IoeCkKICNlbHNlCkBAIC0xNDMsNyArMTQ0LDYgQEAKICN1bmRlZiAgUlhfQ09VTlRfQlVGRkVSUyAgICAvKiBkZWZpbmUgdG8gY2FsY3VsYXRlIFJYIGJ1ZmZlciBzdGF0cyAqLwogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImNhc3NpbmkiCi0jZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgogI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjEuNiIKICNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSIyMSBNYXkgMjAwOCIKIApAQCAtMjM2LDcgKzIzNiw3IEBACiAJQ0FTX0JNQ1JfU1BFRUQxMDAwfEJNQ1JfRlVMTERQTFggLyogNSA6IDEwMDBidCBmdWxsIGR1cGxleCAqLwogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNhc19wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShjYXNfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1NVTiwgUENJX0RFVklDRV9JRF9TVU5fQ0FTU0lOSSwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDBVTCB9LAogCXsgUENJX1ZFTkRPUl9JRF9OUywgUENJX0RFVklDRV9JRF9OU19TQVRVUk4sCkBAIC02NDksOSArNjQ5LDggQEAKIAkJY2FzX3NwYXJlX3JlY292ZXIoY3AsIEdGUF9BVE9NSUMpOwogCQlzcGluX2xvY2soJmNwLT5yeF9zcGFyZV9sb2NrKTsKIAkJaWYgKGxpc3RfZW1wdHkoJmNwLT5yeF9zcGFyZV9saXN0KSkgewotCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIoY3ApKQotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG5vIHNwYXJlIGJ1ZmZlcnMgIgotCQkJCSAgICAgICAiYXZhaWxhYmxlLlxuIiwgY3AtPmRldi0+bmFtZSk7CisJCQluZXRpZl9lcnIoY3AsIHJ4X2VyciwgY3AtPmRldiwKKwkJCQkgICJubyBzcGFyZSBidWZmZXJzIGF2YWlsYWJsZVxuIik7CiAJCQlzcGluX3VubG9jaygmY3AtPnJ4X3NwYXJlX2xvY2spOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KQEAgLTcyOCwxMiArNzI3LDEwIEBACiAjZW5kaWYKIHN0YXJ0X2FuZWc6CiAJaWYgKGNwLT5sc3RhdGUgPT0gbGlua191cCkgewotCQlwcmludGsoS0VSTl9JTkZPICIlczogUENTIGxpbmsgZG93bi5cbiIsCi0JCSAgICAgICBjcC0+ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2luZm8oY3AtPmRldiwgIlBDUyBsaW5rIGRvd25cbiIpOwogCX0gZWxzZSB7CiAJCWlmIChjaGFuZ2VkKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayBjb25maWd1cmF0aW9uIGNoYW5nZWRcbiIsCi0JCQkgICAgICAgY3AtPmRldi0+bmFtZSk7CisJCQluZXRkZXZfaW5mbyhjcC0+ZGV2LCAibGluayBjb25maWd1cmF0aW9uIGNoYW5nZWRcbiIpOwogCQl9CiAJfQogCWNwLT5sc3RhdGUgPSBsaW5rX2Rvd247CkBAIC04MjYsMTIgKzgyMywxMiBAQAogCiAJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X25hbWUsICZjcC0+cGRldi0+ZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2Fzc2luaTogRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgXCIlc1wiXG4iLAorCQlwcl9lcnIoIkZhaWxlZCB0byBsb2FkIGZpcm13YXJlIFwiJXNcIlxuIiwKIAkJICAgICAgIGZ3X25hbWUpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlpZiAoZnctPnNpemUgPCAyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2Fzc2luaTogYm9ndXMgbGVuZ3RoICV6dSBpbiBcIiVzXCJcbiIsCisJCXByX2VycigiYm9ndXMgbGVuZ3RoICV6dSBpbiBcIiVzXCJcbiIsCiAJCSAgICAgICBmdy0+c2l6ZSwgZndfbmFtZSk7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gb3V0OwpAQCAtODQxLDcgKzgzOCw3IEBACiAJY3AtPmZ3X2RhdGEgPSB2bWFsbG9jKGNwLT5md19zaXplKTsKIAlpZiAoIWNwLT5md19kYXRhKSB7CiAJCWVyciA9IC1FTk9NRU07Ci0JCXByaW50ayhLRVJOX0VSUiAiY2Fzc2luaTogXCIlc1wiIEZhaWxlZCAlZFxuIiwgZndfbmFtZSwgZXJyKTsKKwkJcHJfZXJyKCJcIiVzXCIgRmFpbGVkICVkXG4iLCBmd19uYW1lLCBlcnIpOwogCQlnb3RvIG91dDsKIAl9CiAJbWVtY3B5KGNwLT5md19kYXRhLCAmZnctPmRhdGFbMl0sIGNwLT5md19zaXplKTsKQEAgLTk4Niw5ICs5ODMsOCBAQAogCQkJCWJyZWFrOwogCQl9CiAJCWlmIChsaW1pdCA8PSAwKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFBDUyByZXNldCBiaXQgd291bGQgbm90ICIKLQkJCSAgICAgICAiY2xlYXIgWyUwOHhdLlxuIiwgY3AtPmRldi0+bmFtZSwKLQkJCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19QQ1NfU1RBVEVfTUFDSElORSkpOworCQkJbmV0ZGV2X3dhcm4oY3AtPmRldiwgIlBDUyByZXNldCBiaXQgd291bGQgbm90IGNsZWFyIFslMDh4XVxuIiwKKwkJCQkgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfUENTX1NUQVRFX01BQ0hJTkUpKTsKIAogCQkvKiBNYWtlIHN1cmUgUENTIGlzIGRpc2FibGVkIHdoaWxlIGNoYW5naW5nIGFkdmVydGlzZW1lbnQKIAkJICogY29uZmlndXJhdGlvbi4KQEAgLTEwMzAsMTEgKzEwMjYsOCBAQAogCSAqLwogCWlmICgoc3RhdCAmIChQQ1NfTUlJX1NUQVRVU19BVVRPTkVHX0NPTVAgfAogCQkgICAgIFBDU19NSUlfU1RBVFVTX1JFTU9URV9GQVVMVCkpID09Ci0JICAgIChQQ1NfTUlJX1NUQVRVU19BVVRPTkVHX0NPTVAgfCBQQ1NfTUlJX1NUQVRVU19SRU1PVEVfRkFVTFQpKSB7Ci0JCWlmIChuZXRpZl9tc2dfbGluayhjcCkpCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUENTIFJlbW90ZUZhdWx0XG4iLAotCQkJICAgICAgIGNwLT5kZXYtPm5hbWUpOwotCX0KKwkgICAgKFBDU19NSUlfU1RBVFVTX0FVVE9ORUdfQ09NUCB8IFBDU19NSUlfU1RBVFVTX1JFTU9URV9GQVVMVCkpCisJCW5ldGlmX2luZm8oY3AsIGxpbmssIGNwLT5kZXYsICJQQ1MgUmVtb3RlRmF1bHRcbiIpOwogCiAJLyogd29yayBhcm91bmQgbGluayBkZXRlY3Rpb24gaXNzdWUgYnkgcXVlcnlpbmcgdGhlIFBDUyBzdGF0ZQogCSAqIG1hY2hpbmUgZGlyZWN0bHkuCkBAIC0xMDgxLDEwICsxMDc0LDggQEAKIAkJCWNwLT5saW5rX3RyYW5zaXRpb24gPSBMSU5LX1RSQU5TSVRJT05fT05fRkFJTFVSRTsKIAkJfQogCQluZXRpZl9jYXJyaWVyX29mZihjcC0+ZGV2KTsKLQkJaWYgKGNwLT5vcGVuZWQgJiYgbmV0aWZfbXNnX2xpbmsoY3ApKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUENTIGxpbmsgZG93bi5cbiIsCi0JCQkgICAgICAgY3AtPmRldi0+bmFtZSk7Ci0JCX0KKwkJaWYgKGNwLT5vcGVuZWQpCisJCQluZXRpZl9pbmZvKGNwLCBsaW5rLCBjcC0+ZGV2LCAiUENTIGxpbmsgZG93blxuIik7CiAKIAkJLyogQ2Fzc2luaSBvbmx5OiBpZiB5b3UgZm9yY2UgYSBtb2RlLCB0aGVyZSBjYW4gYmUKIAkJICogc3luYyBwcm9ibGVtcyBvbiBsaW5rIGRvd24uIHRvIGZpeCB0aGF0LCB0aGUgZm9sbG93aW5nCkBAIC0xMTM5LDkgKzExMzAsOCBAQAogCWlmICghdHhtYWNfc3RhdCkKIAkJcmV0dXJuIDA7CiAKLQlpZiAobmV0aWZfbXNnX2ludHIoY3ApKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4bWFjIGludGVycnVwdCwgdHhtYWNfc3RhdDogMHgleFxuIiwKLQkJCWNwLT5kZXYtPm5hbWUsIHR4bWFjX3N0YXQpOworCW5ldGlmX3ByaW50ayhjcCwgaW50ciwgS0VSTl9ERUJVRywgY3AtPmRldiwKKwkJICAgICAidHhtYWMgaW50ZXJydXB0LCB0eG1hY19zdGF0OiAweCV4XG4iLCB0eG1hY19zdGF0KTsKIAogCS8qIERlZmVyIHRpbWVyIGV4cGlyYXRpb24gaXMgcXVpdGUgbm9ybWFsLAogCSAqIGRvbid0IGV2ZW4gbG9nIHRoZSBldmVudC4KQEAgLTExNTIsMTQgKzExNDIsMTIgQEAKIAogCXNwaW5fbG9jaygmY3AtPnN0YXRfbG9ja1swXSk7CiAJaWYgKHR4bWFjX3N0YXQgJiBNQUNfVFhfVU5ERVJSVU4pIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogVFggTUFDIHhtaXQgdW5kZXJydW4uXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJUWCBNQUMgeG1pdCB1bmRlcnJ1blxuIik7CiAJCWNwLT5uZXRfc3RhdHNbMF0udHhfZmlmb19lcnJvcnMrKzsKIAl9CiAKIAlpZiAodHhtYWNfc3RhdCAmIE1BQ19UWF9NQVhfUEFDS0VUX0VSUikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBUWCBNQUMgbWF4IHBhY2tldCBzaXplIGVycm9yLlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiVFggTUFDIG1heCBwYWNrZXQgc2l6ZSBlcnJvclxuIik7CiAJCWNwLT5uZXRfc3RhdHNbMF0udHhfZXJyb3JzKys7CiAJfQogCkBAIC0xNDg3LDggKzE0NzUsNyBAQAogCQl1ZGVsYXkoMTApOwogCX0KIAlpZiAobGltaXQgPT0gU1RPUF9UUklFUykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBSWCBNQUMgd2lsbCBub3QgZGlzYWJsZSwgcmVzZXR0aW5nIHdob2xlICIKLQkJICAgICAgICJjaGlwLlxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJSWCBNQUMgd2lsbCBub3QgZGlzYWJsZSwgcmVzZXR0aW5nIHdob2xlIGNoaXBcbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTE1MDAsOCArMTQ4Nyw3IEBACiAJCXVkZWxheSgxMCk7CiAJfQogCWlmIChsaW1pdCA9PSBTVE9QX1RSSUVTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IFJYIERNQSB3aWxsIG5vdCBkaXNhYmxlLCByZXNldHRpbmcgd2hvbGUgIgotCQkgICAgICAgImNoaXAuXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgIlJYIERNQSB3aWxsIG5vdCBkaXNhYmxlLCByZXNldHRpbmcgd2hvbGUgY2hpcFxuIik7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMTUxNSw4ICsxNTAxLDcgQEAKIAkJdWRlbGF5KDEwKTsKIAl9CiAJaWYgKGxpbWl0ID09IFNUT1BfVFJJRVMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogUlggcmVzZXQgY29tbWFuZCB3aWxsIG5vdCBleGVjdXRlLCAiCi0JCSAgICAgICAicmVzZXR0aW5nIHdob2xlIGNoaXAuXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgIlJYIHJlc2V0IGNvbW1hbmQgd2lsbCBub3QgZXhlY3V0ZSwgcmVzZXR0aW5nIHdob2xlIGNoaXBcbiIpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTE1NDUsOSArMTUzMCw3IEBACiAJaWYgKCFzdGF0KQogCQlyZXR1cm4gMDsKIAotCWlmIChuZXRpZl9tc2dfaW50cihjcCkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogcnhtYWMgaW50ZXJydXB0LCBzdGF0OiAweCV4XG4iLAotCQkJY3AtPmRldi0+bmFtZSwgc3RhdCk7CisJbmV0aWZfZGJnKGNwLCBpbnRyLCBjcC0+ZGV2LCAicnhtYWMgaW50ZXJydXB0LCBzdGF0OiAweCV4XG4iLCBzdGF0KTsKIAogCS8qIHRoZXNlIGFyZSBhbGwgcm9sbG92ZXJzICovCiAJc3Bpbl9sb2NrKCZjcC0+c3RhdF9sb2NrWzBdKTsKQEAgLTE1ODAsOSArMTU2Myw4IEBACiAJaWYgKCFzdGF0KQogCQlyZXR1cm4gMDsKIAotCWlmIChuZXRpZl9tc2dfaW50cihjcCkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogbWFjIGludGVycnVwdCwgc3RhdDogMHgleFxuIiwKLQkJCWNwLT5kZXYtPm5hbWUsIHN0YXQpOworCW5ldGlmX3ByaW50ayhjcCwgaW50ciwgS0VSTl9ERUJVRywgY3AtPmRldiwKKwkJICAgICAibWFjIGludGVycnVwdCwgc3RhdDogMHgleFxuIiwgc3RhdCk7CiAKIAkvKiBUaGlzIGludGVycnVwdCBpcyBqdXN0IGZvciBwYXVzZSBmcmFtZSBhbmQgcGF1c2UKIAkgKiB0cmFja2luZy4gIEl0IGlzIHVzZWZ1bCBmb3IgZGlhZ25vc3RpY3MgYW5kIGRlYnVnCkBAIC0xNjA1LDkgKzE1ODcsNyBAQAogCiAJc3dpdGNoIChjcC0+bHN0YXRlKSB7CiAJY2FzZSBsaW5rX2ZvcmNlX3JldDoKLQkJaWYgKG5ldGlmX21zZ19saW5rKGNwKSkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBBdXRvbmVnIGZhaWxlZCBhZ2Fpbiwga2VlcGluZyIKLQkJCQkiIGZvcmNlZCBtb2RlXG4iLCBjcC0+ZGV2LT5uYW1lKTsKKwkJbmV0aWZfaW5mbyhjcCwgbGluaywgY3AtPmRldiwgIkF1dG9uZWcgZmFpbGVkIGFnYWluLCBrZWVwaW5nIGZvcmNlZCBtb2RlXG4iKTsKIAkJY2FzX3BoeV93cml0ZShjcCwgTUlJX0JNQ1IsIGNwLT5saW5rX2ZjbnRsKTsKIAkJY3AtPnRpbWVyX3RpY2tzID0gNTsKIAkJY3AtPmxzdGF0ZSA9IGxpbmtfZm9yY2Vfb2s7CkBAIC0xNjc1LDkgKzE2NTUsOSBAQAogCQkJY2FzX21pZl9wb2xsKGNwLCAwKTsKIAkJCWNwLT5saW5rX2ZjbnRsID0gY2FzX3BoeV9yZWFkKGNwLCBNSUlfQk1DUik7CiAJCQljcC0+dGltZXJfdGlja3MgPSA1OwotCQkJaWYgKGNwLT5vcGVuZWQgJiYgbmV0aWZfbXNnX2xpbmsoY3ApKQotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBHb3QgbGluayBhZnRlciBmYWxsYmFjaywgcmV0cnlpbmciCi0JCQkJICAgICAgICIgYXV0b25lZyBvbmNlLi4uXG4iLCBjcC0+ZGV2LT5uYW1lKTsKKwkJCWlmIChjcC0+b3BlbmVkKQorCQkJCW5ldGlmX2luZm8oY3AsIGxpbmssIGNwLT5kZXYsCisJCQkJCSAgICJHb3QgbGluayBhZnRlciBmYWxsYmFjaywgcmV0cnlpbmcgYXV0b25lZyBvbmNlLi4uXG4iKTsKIAkJCWNhc19waHlfd3JpdGUoY3AsIE1JSV9CTUNSLAogCQkJCSAgICAgIGNwLT5saW5rX2ZjbnRsIHwgQk1DUl9BTkVOQUJMRSB8CiAJCQkJICAgICAgQk1DUl9BTlJFU1RBUlQpOwpAQCAtMTcwNCw5ICsxNjg0LDggQEAKIAkJY3AtPmxpbmtfdHJhbnNpdGlvbiA9IExJTktfVFJBTlNJVElPTl9MSU5LX0RPV047CiAKIAkJbmV0aWZfY2Fycmllcl9vZmYoY3AtPmRldik7Ci0JCWlmIChjcC0+b3BlbmVkICYmIG5ldGlmX21zZ19saW5rKGNwKSkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBMaW5rIGRvd25cbiIsCi0JCQkgICAgICAgY3AtPmRldi0+bmFtZSk7CisJCWlmIChjcC0+b3BlbmVkKQorCQkJbmV0aWZfaW5mbyhjcCwgbGluaywgY3AtPmRldiwgIkxpbmsgZG93blxuIik7CiAJCXJlc3RhcnQgPSAxOwogCiAJfSBlbHNlIGlmICgrK2NwLT50aW1lcl90aWNrcyA+IDEwKQpAQCAtMTczNywyMyArMTcxNiwyMyBAQAogCWlmICghc3RhdCkKIAkJcmV0dXJuIDA7CiAKLQlwcmludGsoS0VSTl9FUlIgIiVzOiBQQ0kgZXJyb3IgWyUwNHg6JTA0eF0gIiwgZGV2LT5uYW1lLCBzdGF0LAotCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19CSU1fRElBRykpOworCW5ldGRldl9lcnIoZGV2LCAiUENJIGVycm9yIFslMDR4OiUwNHhdIiwKKwkJICAgc3RhdCwgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfQklNX0RJQUcpKTsKIAogCS8qIGNhc3NpbmkrIGhhcyB0aGlzIHJlc2VydmVkICovCiAJaWYgKChzdGF0ICYgUENJX0VSUl9CQURBQ0spICYmCiAJICAgICgoY3AtPmNhc19mbGFncyAmIENBU19GTEFHX1JFR19QTFVTKSA9PSAwKSkKLQkJcHJpbnRrKCI8Tm8gQUNLNjQjIGR1cmluZyBBQlM2NCBjeWNsZT4gIik7CisJCXByX2NvbnQoIiA8Tm8gQUNLNjQjIGR1cmluZyBBQlM2NCBjeWNsZT4iKTsKIAogCWlmIChzdGF0ICYgUENJX0VSUl9EVFJUTykKLQkJcHJpbnRrKCI8RGVsYXllZCB0cmFuc2FjdGlvbiB0aW1lb3V0PiAiKTsKKwkJcHJfY29udCgiIDxEZWxheWVkIHRyYW5zYWN0aW9uIHRpbWVvdXQ+Iik7CiAJaWYgKHN0YXQgJiBQQ0lfRVJSX09USEVSKQotCQlwcmludGsoIjxvdGhlcj4gIik7CisJCXByX2NvbnQoIiA8b3RoZXI+Iik7CiAJaWYgKHN0YXQgJiBQQ0lfRVJSX0JJTV9ETUFfV1JJVEUpCi0JCXByaW50aygiPEJJTSBETUEgMCB3cml0ZSByZXE+ICIpOworCQlwcl9jb250KCIgPEJJTSBETUEgMCB3cml0ZSByZXE+Iik7CiAJaWYgKHN0YXQgJiBQQ0lfRVJSX0JJTV9ETUFfUkVBRCkKLQkJcHJpbnRrKCI8QklNIERNQSAwIHJlYWQgcmVxPiAiKTsKLQlwcmludGsoIlxuIik7CisJCXByX2NvbnQoIiA8QklNIERNQSAwIHJlYWQgcmVxPiIpOworCXByX2NvbnQoIlxuIik7CiAKIAlpZiAoc3RhdCAmIFBDSV9FUlJfT1RIRVIpIHsKIAkJdTE2IGNmZzsKQEAgLTE3NjIsMjUgKzE3NDEsMTkgQEAKIAkJICogdHJ1ZSBjYXVzZS4KIAkJICovCiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKGNwLT5wZGV2LCBQQ0lfU1RBVFVTLCAmY2ZnKTsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogUmVhZCBQQ0kgY2ZnIHNwYWNlIHN0YXR1cyBbJTA0eF1cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGNmZyk7CisJCW5ldGRldl9lcnIoZGV2LCAiUmVhZCBQQ0kgY2ZnIHNwYWNlIHN0YXR1cyBbJTA0eF1cbiIsIGNmZyk7CiAJCWlmIChjZmcgJiBQQ0lfU1RBVFVTX1BBUklUWSkKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFBDSSBwYXJpdHkgZXJyb3IgZGV0ZWN0ZWQuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQluZXRkZXZfZXJyKGRldiwgIlBDSSBwYXJpdHkgZXJyb3IgZGV0ZWN0ZWRcbiIpOwogCQlpZiAoY2ZnICYgUENJX1NUQVRVU19TSUdfVEFSR0VUX0FCT1JUKQotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogUENJIHRhcmdldCBhYm9ydC5cbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAiUENJIHRhcmdldCBhYm9ydFxuIik7CiAJCWlmIChjZmcgJiBQQ0lfU1RBVFVTX1JFQ19UQVJHRVRfQUJPUlQpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQQ0kgbWFzdGVyIGFja3MgdGFyZ2V0IGFib3J0LlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X2VycihkZXYsICJQQ0kgbWFzdGVyIGFja3MgdGFyZ2V0IGFib3J0XG4iKTsKIAkJaWYgKGNmZyAmIFBDSV9TVEFUVVNfUkVDX01BU1RFUl9BQk9SVCkKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFBDSSBtYXN0ZXIgYWJvcnQuXG4iLCBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X2VycihkZXYsICJQQ0kgbWFzdGVyIGFib3J0XG4iKTsKIAkJaWYgKGNmZyAmIFBDSV9TVEFUVVNfU0lHX1NZU1RFTV9FUlJPUikKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFBDSSBzeXN0ZW0gZXJyb3IgU0VSUiMuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQluZXRkZXZfZXJyKGRldiwgIlBDSSBzeXN0ZW0gZXJyb3IgU0VSUiNcbiIpOwogCQlpZiAoY2ZnICYgUENJX1NUQVRVU19ERVRFQ1RFRF9QQVJJVFkpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQQ0kgcGFyaXR5IGVycm9yLlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X2VycihkZXYsICJQQ0kgcGFyaXR5IGVycm9yXG4iKTsKIAogCQkvKiBXcml0ZSB0aGUgZXJyb3IgYml0cyBiYWNrIHRvIGNsZWFyIHRoZW0uICovCiAJCWNmZyAmPSAoUENJX1NUQVRVU19QQVJJVFkgfApAQCAtMTgwNiw5ICsxNzc5LDggQEAKIHsKIAlpZiAoc3RhdHVzICYgSU5UUl9SWF9UQUdfRVJST1IpIHsKIAkJLyogY29ycnVwdCBSWCB0YWcgZnJhbWluZyAqLwotCQlpZiAobmV0aWZfbXNnX3J4X2VycihjcCkpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGNvcnJ1cHQgcnggdGFnIGZyYW1pbmdcbiIsCi0JCQkJY3AtPmRldi0+bmFtZSk7CisJCW5ldGlmX3ByaW50ayhjcCwgcnhfZXJyLCBLRVJOX0RFQlVHLCBjcC0+ZGV2LAorCQkJICAgICAiY29ycnVwdCByeCB0YWcgZnJhbWluZ1xuIik7CiAJCXNwaW5fbG9jaygmY3AtPnN0YXRfbG9ja1swXSk7CiAJCWNwLT5uZXRfc3RhdHNbMF0ucnhfZXJyb3JzKys7CiAJCXNwaW5fdW5sb2NrKCZjcC0+c3RhdF9sb2NrWzBdKTsKQEAgLTE4MTcsOSArMTc4OSw4IEBACiAKIAlpZiAoc3RhdHVzICYgSU5UUl9SWF9MRU5fTUlTTUFUQ0gpIHsKIAkJLyogbGVuZ3RoIG1pc21hdGNoLiAqLwotCQlpZiAobmV0aWZfbXNnX3J4X2VycihjcCkpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGxlbmd0aCBtaXNtYXRjaCBmb3IgcnggZnJhbWVcbiIsCi0JCQkJY3AtPmRldi0+bmFtZSk7CisJCW5ldGlmX3ByaW50ayhjcCwgcnhfZXJyLCBLRVJOX0RFQlVHLCBjcC0+ZGV2LAorCQkJICAgICAibGVuZ3RoIG1pc21hdGNoIGZvciByeCBmcmFtZVxuIik7CiAJCXNwaW5fbG9jaygmY3AtPnN0YXRfbG9ja1swXSk7CiAJCWNwLT5uZXRfc3RhdHNbMF0ucnhfZXJyb3JzKys7CiAJCXNwaW5fdW5sb2NrKCZjcC0+c3RhdF9sb2NrWzBdKTsKQEAgLTE4NjEsMTIgKzE4MzIsMTEgQEAKICNpZiAxCiAJYXRvbWljX2luYygmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZyk7CiAJYXRvbWljX2luYygmY3AtPnJlc2V0X3Rhc2tfcGVuZGluZ19hbGwpOwotCXByaW50ayhLRVJOX0VSUiAiJXM6cmVzZXQgY2FsbGVkIGluIGNhc19hYm5vcm1hbF9pcnEgWzB4JXhdXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cyk7CisJbmV0ZGV2X2VycihkZXYsICJyZXNldCBjYWxsZWQgaW4gY2FzX2Fibm9ybWFsX2lycSBbMHgleF1cbiIsIHN0YXR1cyk7CiAJc2NoZWR1bGVfd29yaygmY3AtPnJlc2V0X3Rhc2spOwogI2Vsc2UKIAlhdG9taWNfc2V0KCZjcC0+cmVzZXRfdGFza19wZW5kaW5nLCBDQVNfUkVTRVRfQUxMKTsKLQlwcmludGsoS0VSTl9FUlIgInJlc2V0IGNhbGxlZCBpbiBjYXNfYWJub3JtYWxfaXJxXG4iKTsKKwluZXRkZXZfZXJyKGRldiwgInJlc2V0IGNhbGxlZCBpbiBjYXNfYWJub3JtYWxfaXJxXG4iKTsKIAlzY2hlZHVsZV93b3JrKCZjcC0+cmVzZXRfdGFzayk7CiAjZW5kaWYKIAlyZXR1cm4gMTsKQEAgLTE5MjAsOSArMTg5MCw4IEBACiAJCWlmIChjb3VudCA8IDApCiAJCQlicmVhazsKIAotCQlpZiAobmV0aWZfbXNnX3R4X2RvbmUoY3ApKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eFslZF0gZG9uZSwgc2xvdCAlZFxuIiwKLQkJCSAgICAgICBjcC0+ZGV2LT5uYW1lLCByaW5nLCBlbnRyeSk7CisJCW5ldGlmX3ByaW50ayhjcCwgdHhfZG9uZSwgS0VSTl9ERUJVRywgY3AtPmRldiwKKwkJCSAgICAgInR4WyVkXSBkb25lLCBzbG90ICVkXG4iLCByaW5nLCBlbnRyeSk7CiAKIAkJc2tic1tlbnRyeV0gPSBOVUxMOwogCQljcC0+dHhfdGlueV91c2VbcmluZ11bZW50cnldLm5idWZzID0gMDsKQEAgLTE5NjksOSArMTkzOCw5IEBACiAjaWZkZWYgVVNFX1RYX0NPTVBXQgogCXU2NCBjb21wd2IgPSBsZTY0X3RvX2NwdShjcC0+aW5pdF9ibG9jay0+dHhfY29tcHdiKTsKICNlbmRpZgotCWlmIChuZXRpZl9tc2dfaW50cihjcCkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogdHggaW50ZXJydXB0LCBzdGF0dXM6IDB4JXgsICVsbHhcbiIsCi0JCQljcC0+ZGV2LT5uYW1lLCBzdGF0dXMsICh1bnNpZ25lZCBsb25nIGxvbmcpY29tcHdiKTsKKwluZXRpZl9wcmludGsoY3AsIGludHIsIEtFUk5fREVCVUcsIGNwLT5kZXYsCisJCSAgICAgInR4IGludGVycnVwdCwgc3RhdHVzOiAweCV4LCAlbGx4XG4iLAorCQkgICAgIHN0YXR1cywgKHVuc2lnbmVkIGxvbmcgbG9uZyljb21wd2IpOwogCS8qIHByb2Nlc3MgYWxsIHRoZSByaW5ncyAqLwogCWZvciAocmluZyA9IDA7IHJpbmcgPCBOX1RYX1JJTkdTOyByaW5nKyspIHsKICNpZmRlZiBVU0VfVFhfQ09NUFdCCkBAIC0yMDUwLDEwICsyMDE5LDggQEAKIAogCQlobGVuID0gbWluKGNwLT5wYWdlX3NpemUgLSBvZmYsIGRsZW4pOwogCQlpZiAoaGxlbiA8IDApIHsKLQkJCWlmIChuZXRpZl9tc2dfcnhfZXJyKGNwKSkgewotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogcnggcGFnZSBvdmVyZmxvdzogIgotCQkJCSAgICAgICAiJWRcbiIsIGNwLT5kZXYtPm5hbWUsIGhsZW4pOwotCQkJfQorCQkJbmV0aWZfcHJpbnRrKGNwLCByeF9lcnIsIEtFUk5fREVCVUcsIGNwLT5kZXYsCisJCQkJICAgICAicnggcGFnZSBvdmVyZmxvdzogJWRcbiIsIGhsZW4pOwogCQkJZGV2X2tmcmVlX3NrYl9pcnEoc2tiKTsKIAkJCXJldHVybiAtMTsKIAkJfQpAQCAtMjEzMCwxMCArMjA5Nyw4IEBACiAJCW9mZiA9IENBU19WQUwoUlhfQ09NUDFfREFUQV9PRkYsIHdvcmRzWzBdKSArIHN3aXZlbDsKIAkJaGxlbiA9IG1pbihjcC0+cGFnZV9zaXplIC0gb2ZmLCBkbGVuKTsKIAkJaWYgKGhsZW4gPCAwKSB7Ci0JCQlpZiAobmV0aWZfbXNnX3J4X2VycihjcCkpIHsKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJ4IHBhZ2Ugb3ZlcmZsb3c6ICIKLQkJCQkgICAgICAgIiVkXG4iLCBjcC0+ZGV2LT5uYW1lLCBobGVuKTsKLQkJCX0KKwkJCW5ldGlmX3ByaW50ayhjcCwgcnhfZXJyLCBLRVJOX0RFQlVHLCBjcC0+ZGV2LAorCQkJCSAgICAgInJ4IHBhZ2Ugb3ZlcmZsb3c6ICVkXG4iLCBobGVuKTsKIAkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KQEAgLTIyNjUsOSArMjIzMCw4IEBACiAKIAllbnRyeSA9IGNwLT5yeF9vbGRbcmluZ107CiAKLQlpZiAobmV0aWZfbXNnX2ludHIoY3ApKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJ4ZFslZF0gaW50ZXJydXB0LCBkb25lOiAlZFxuIiwKLQkJICAgICAgIGNwLT5kZXYtPm5hbWUsIHJpbmcsIGVudHJ5KTsKKwluZXRpZl9wcmludGsoY3AsIGludHIsIEtFUk5fREVCVUcsIGNwLT5kZXYsCisJCSAgICAgInJ4ZFslZF0gaW50ZXJydXB0LCBkb25lOiAlZFxuIiwgcmluZywgZW50cnkpOwogCiAJY2x1c3RlciA9IC0xOwogCWNvdW50ID0gZW50cnkgJiAweDM7CkBAIC0yMzM3LDExICsyMzAxLDEwIEBACiAJaW50IGVudHJ5LCBkcm9wczsKIAlpbnQgbnBhY2tldHMgPSAwOwogCi0JaWYgKG5ldGlmX21zZ19pbnRyKGNwKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiByeFslZF0gaW50ZXJydXB0LCBkb25lOiAlZC8lZFxuIiwKLQkJICAgICAgIGNwLT5kZXYtPm5hbWUsIHJpbmcsCi0JCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19SWF9DT01QX0hFQUQpLAotCQkgICAgICAgY3AtPnJ4X25ld1tyaW5nXSk7CisJbmV0aWZfcHJpbnRrKGNwLCBpbnRyLCBLRVJOX0RFQlVHLCBjcC0+ZGV2LAorCQkgICAgICJyeFslZF0gaW50ZXJydXB0LCBkb25lOiAlZC8lZFxuIiwKKwkJICAgICByaW5nLAorCQkgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX1JYX0NPTVBfSEVBRCksIGNwLT5yeF9uZXdbcmluZ10pOwogCiAJZW50cnkgPSBjcC0+cnhfbmV3W3JpbmddOwogCWRyb3BzID0gMDsKQEAgLTI0NDIsOCArMjQwNSw3IEBACiAJY3AtPnJ4X25ld1tyaW5nXSA9IGVudHJ5OwogCiAJaWYgKGRyb3BzKQotCQlwcmludGsoS0VSTl9JTkZPICIlczogTWVtb3J5IHNxdWVlemUsIGRlZmVycmluZyBwYWNrZXQuXG4iLAotCQkgICAgICAgY3AtPmRldi0+bmFtZSk7CisJCW5ldGRldl9pbmZvKGNwLT5kZXYsICJNZW1vcnkgc3F1ZWV6ZSwgZGVmZXJyaW5nIHBhY2tldFxuIik7CiAJcmV0dXJuIG5wYWNrZXRzOwogfQogCkBAIC0yNDU3LDEwICsyNDE5LDkgQEAKIAogCWxhc3QgPSBjcC0+cnhfY3VyW3JpbmddOwogCWVudHJ5ID0gY3AtPnJ4X25ld1tyaW5nXTsKLQlpZiAobmV0aWZfbXNnX2ludHIoY3ApKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJ4Y1slZF0gaW50ZXJydXB0LCBkb25lOiAlZC8lZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgcmluZywgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfUlhfQ09NUF9IRUFEKSwKLQkJICAgICAgIGVudHJ5KTsKKwluZXRpZl9wcmludGsoY3AsIGludHIsIEtFUk5fREVCVUcsIGRldiwKKwkJICAgICAicnhjWyVkXSBpbnRlcnJ1cHQsIGRvbmU6ICVkLyVkXG4iLAorCQkgICAgIHJpbmcsIHJlYWRsKGNwLT5yZWdzICsgUkVHX1JYX0NPTVBfSEVBRCksIGVudHJ5KTsKIAogCS8qIHplcm8gYW5kIHJlLW1hcmsgZGVzY3JpcHRvcnMgKi8KIAl3aGlsZSAobGFzdCAhPSBlbnRyeSkgewpAQCAtMjcyOSw0MiArMjY5MCwzOCBAQAogewogCXN0cnVjdCBjYXMgKmNwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCXByaW50ayhLRVJOX0VSUiAiJXM6IHRyYW5zbWl0IHRpbWVkIG91dCwgcmVzZXR0aW5nXG4iLCBkZXYtPm5hbWUpOworCW5ldGRldl9lcnIoZGV2LCAidHJhbnNtaXQgdGltZWQgb3V0LCByZXNldHRpbmdcbiIpOwogCWlmICghY3AtPmh3X3J1bm5pbmcpIHsKLQkJcHJpbnRrKCIlczogaHJtLi4gaHcgbm90IHJ1bm5pbmchXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgImhybS4uIGh3IG5vdCBydW5uaW5nIVxuIik7CiAJCXJldHVybjsKIAl9CiAKLQlwcmludGsoS0VSTl9FUlIgIiVzOiBNSUZfU1RBVEVbJTA4eF1cbiIsCi0JICAgICAgIGRldi0+bmFtZSwgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUlGX1NUQVRFX01BQ0hJTkUpKTsKKwluZXRkZXZfZXJyKGRldiwgIk1JRl9TVEFURVslMDh4XVxuIiwKKwkJICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUlGX1NUQVRFX01BQ0hJTkUpKTsKIAotCXByaW50ayhLRVJOX0VSUiAiJXM6IE1BQ19TVEFURVslMDh4XVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCByZWFkbChjcC0+cmVncyArIFJFR19NQUNfU1RBVEVfTUFDSElORSkpOworCW5ldGRldl9lcnIoZGV2LCAiTUFDX1NUQVRFWyUwOHhdXG4iLAorCQkgICByZWFkbChjcC0+cmVncyArIFJFR19NQUNfU1RBVEVfTUFDSElORSkpOwogCi0JcHJpbnRrKEtFUk5fRVJSICIlczogVFhfU1RBVEVbJTA4eDolMDh4OiUwOHhdICIKLQkgICAgICAgIkZJRk9bJTA4eDolMDh4OiUwOHhdIFNNMVslMDh4XSBTTTJbJTA4eF1cbiIsCi0JICAgICAgIGRldi0+bmFtZSwKLQkgICAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfVFhfQ0ZHKSwKLQkgICAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1RYX1NUQVRVUyksCi0JICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19UWF9DRkcpLAotCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19UWF9GSUZPX1BLVF9DTlQpLAotCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19UWF9GSUZPX1dSSVRFX1BUUiksCi0JICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX1RYX0ZJRk9fUkVBRF9QVFIpLAotCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19UWF9TTV8xKSwKLQkgICAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfVFhfU01fMikpOworCW5ldGRldl9lcnIoZGV2LCAiVFhfU1RBVEVbJTA4eDolMDh4OiUwOHhdIEZJRk9bJTA4eDolMDh4OiUwOHhdIFNNMVslMDh4XSBTTTJbJTA4eF1cbiIsCisJCSAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX1RYX0NGRyksCisJCSAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19UWF9TVEFUVVMpLAorCQkgICByZWFkbChjcC0+cmVncyArIFJFR19NQUNfVFhfQ0ZHKSwKKwkJICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfVFhfRklGT19QS1RfQ05UKSwKKwkJICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfVFhfRklGT19XUklURV9QVFIpLAorCQkgICByZWFkbChjcC0+cmVncyArIFJFR19UWF9GSUZPX1JFQURfUFRSKSwKKwkJICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfVFhfU01fMSksCisJCSAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX1RYX1NNXzIpKTsKIAotCXByaW50ayhLRVJOX0VSUiAiJXM6IFJYX1NUQVRFWyUwOHg6JTA4eDolMDh4XVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLAotCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19SWF9DRkcpLAotCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19NQUNfUlhfU1RBVFVTKSwKLQkgICAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1JYX0NGRykpOworCW5ldGRldl9lcnIoZGV2LCAiUlhfU1RBVEVbJTA4eDolMDh4OiUwOHhdXG4iLAorCQkgICByZWFkbChjcC0+cmVncyArIFJFR19SWF9DRkcpLAorCQkgICByZWFkbChjcC0+cmVncyArIFJFR19NQUNfUlhfU1RBVFVTKSwKKwkJICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1JYX0NGRykpOwogCi0JcHJpbnRrKEtFUk5fRVJSICIlczogSFBfU1RBVEVbJTA4eDolMDh4OiUwOHg6JTA4eF1cbiIsCi0JICAgICAgIGRldi0+bmFtZSwKLQkgICAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfSFBfU1RBVEVfTUFDSElORSksCi0JICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX0hQX1NUQVRVUzApLAotCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19IUF9TVEFUVVMxKSwKLQkgICAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfSFBfU1RBVFVTMikpOworCW5ldGRldl9lcnIoZGV2LCAiSFBfU1RBVEVbJTA4eDolMDh4OiUwOHg6JTA4eF1cbiIsCisJCSAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX0hQX1NUQVRFX01BQ0hJTkUpLAorCQkgICByZWFkbChjcC0+cmVncyArIFJFR19IUF9TVEFUVVMwKSwKKwkJICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfSFBfU1RBVFVTMSksCisJCSAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX0hQX1NUQVRVUzIpKTsKIAogI2lmIDEKIAlhdG9taWNfaW5jKCZjcC0+cmVzZXRfdGFza19wZW5kaW5nKTsKQEAgLTI4MzAsOCArMjc4Nyw3IEBACiAJICAgIENBU19UQUJPUlQoY3ApKihza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMSkpIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcC0+dHhfbG9ja1tyaW5nXSwgZmxhZ3MpOwotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiAiCi0JCSAgICAgICAicXVldWUgYXdha2UhXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgIkJVRyEgVHggUmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0yOTA4LDExICsyODY0LDkgQEAKIAlpZiAoVFhfQlVGRlNfQVZBSUwoY3AsIHJpbmcpIDw9IENBU19UQUJPUlQoY3ApKihNQVhfU0tCX0ZSQUdTICsgMSkpCiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotCWlmIChuZXRpZl9tc2dfdHhfcXVldWVkKGNwKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eFslZF0gcXVldWVkLCBzbG90ICVkLCBza2JsZW4gJWQsICIKLQkJICAgICAgICJhdmFpbCAlZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgcmluZywgZW50cnksIHNrYi0+bGVuLAotCQkgICAgICAgVFhfQlVGRlNfQVZBSUwoY3AsIHJpbmcpKTsKKwluZXRpZl9wcmludGsoY3AsIHR4X3F1ZXVlZCwgS0VSTl9ERUJVRywgZGV2LAorCQkgICAgICJ0eFslZF0gcXVldWVkLCBzbG90ICVkLCBza2JsZW4gJWQsIGF2YWlsICVkXG4iLAorCQkgICAgIHJpbmcsIGVudHJ5LCBza2ItPmxlbiwgVFhfQlVGRlNfQVZBSUwoY3AsIHJpbmcpKTsKIAl3cml0ZWwoZW50cnksIGNwLT5yZWdzICsgUkVHX1RYX0tJQ0tOKHJpbmcpKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjcC0+dHhfbG9ja1tyaW5nXSwgZmxhZ3MpOwogCXJldHVybiAwOwpAQCAtMjk5OSw2ICsyOTUzLDQwIEBACiAJY2FzX2luaXRfcnhfZG1hKGNwKTsKIH0KIAorc3RhdGljIHZvaWQgY2FzX3Byb2Nlc3NfbWNfbGlzdChzdHJ1Y3QgY2FzICpjcCkKK3sKKwl1MTYgaGFzaF90YWJsZVsxNl07CisJdTMyIGNyYzsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKKwlpbnQgaSA9IDE7CisKKwltZW1zZXQoaGFzaF90YWJsZSwgMCwgc2l6ZW9mKGhhc2hfdGFibGUpKTsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGNwLT5kZXYpIHsKKwkJaWYgKGkgPD0gQ0FTX01DX0VYQUNUX01BVENIX1NJWkUpIHsKKwkJCS8qIHVzZSB0aGUgYWx0ZXJuYXRlIG1hYyBhZGRyZXNzIHJlZ2lzdGVycyBmb3IgdGhlCisJCQkgKiBmaXJzdCAxNSBtdWx0aWNhc3QgYWRkcmVzc2VzCisJCQkgKi8KKwkJCXdyaXRlbCgoZG1pLT5kbWlfYWRkcls0XSA8PCA4KSB8IGRtaS0+ZG1pX2FkZHJbNV0sCisJCQkgICAgICAgY3AtPnJlZ3MgKyBSRUdfTUFDX0FERFJOKGkqMyArIDApKTsKKwkJCXdyaXRlbCgoZG1pLT5kbWlfYWRkclsyXSA8PCA4KSB8IGRtaS0+ZG1pX2FkZHJbM10sCisJCQkgICAgICAgY3AtPnJlZ3MgKyBSRUdfTUFDX0FERFJOKGkqMyArIDEpKTsKKwkJCXdyaXRlbCgoZG1pLT5kbWlfYWRkclswXSA8PCA4KSB8IGRtaS0+ZG1pX2FkZHJbMV0sCisJCQkgICAgICAgY3AtPnJlZ3MgKyBSRUdfTUFDX0FERFJOKGkqMyArIDIpKTsKKwkJCWkrKzsKKwkJfQorCQllbHNlIHsKKwkJCS8qIHVzZSBodyBoYXNoIHRhYmxlIGZvciB0aGUgbmV4dCBzZXJpZXMgb2YKKwkJCSAqIG11bHRpY2FzdCBhZGRyZXNzZXMKKwkJCSAqLworCQkJY3JjID0gZXRoZXJfY3JjX2xlKEVUSF9BTEVOLCBkbWktPmRtaV9hZGRyKTsKKwkJCWNyYyA+Pj0gMjQ7CisJCQloYXNoX3RhYmxlW2NyYyA+PiA0XSB8PSAxIDw8ICgxNSAtIChjcmMgJiAweGYpKTsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJd3JpdGVsKGhhc2hfdGFibGVbaV0sIGNwLT5yZWdzICsgUkVHX01BQ19IQVNIX1RBQkxFTihpKSk7Cit9CisKIC8qIE11c3QgYmUgaW52b2tlZCB1bmRlciBjcC0+bG9jay4gKi8KIHN0YXRpYyB1MzIgY2FzX3NldHVwX211bHRpY2FzdChzdHJ1Y3QgY2FzICpjcCkKIHsKQEAgLTMwMTQsNDMgKzMwMDIsNyBAQAogCQlyeGNmZyB8PSBNQUNfUlhfQ0ZHX0hBU0hfRklMVEVSX0VOOwogCiAJfSBlbHNlIHsKLQkJdTE2IGhhc2hfdGFibGVbMTZdOwotCQl1MzIgY3JjOwotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSA9IGNwLT5kZXYtPm1jX2xpc3Q7Ci0JCWludCBpOwotCi0JCS8qIHVzZSB0aGUgYWx0ZXJuYXRlIG1hYyBhZGRyZXNzIHJlZ2lzdGVycyBmb3IgdGhlCi0JCSAqIGZpcnN0IDE1IG11bHRpY2FzdCBhZGRyZXNzZXMKLQkJICovCi0JCWZvciAoaSA9IDE7IGkgPD0gQ0FTX01DX0VYQUNUX01BVENIX1NJWkU7IGkrKykgewotCQkJaWYgKCFkbWkpIHsKLQkJCQl3cml0ZWwoMHgwLCBjcC0+cmVncyArIFJFR19NQUNfQUREUk4oaSozICsgMCkpOwotCQkJCXdyaXRlbCgweDAsIGNwLT5yZWdzICsgUkVHX01BQ19BRERSTihpKjMgKyAxKSk7Ci0JCQkJd3JpdGVsKDB4MCwgY3AtPnJlZ3MgKyBSRUdfTUFDX0FERFJOKGkqMyArIDIpKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCXdyaXRlbCgoZG1pLT5kbWlfYWRkcls0XSA8PCA4KSB8IGRtaS0+ZG1pX2FkZHJbNV0sCi0JCQkgICAgICAgY3AtPnJlZ3MgKyBSRUdfTUFDX0FERFJOKGkqMyArIDApKTsKLQkJCXdyaXRlbCgoZG1pLT5kbWlfYWRkclsyXSA8PCA4KSB8IGRtaS0+ZG1pX2FkZHJbM10sCi0JCQkgICAgICAgY3AtPnJlZ3MgKyBSRUdfTUFDX0FERFJOKGkqMyArIDEpKTsKLQkJCXdyaXRlbCgoZG1pLT5kbWlfYWRkclswXSA8PCA4KSB8IGRtaS0+ZG1pX2FkZHJbMV0sCi0JCQkgICAgICAgY3AtPnJlZ3MgKyBSRUdfTUFDX0FERFJOKGkqMyArIDIpKTsKLQkJCWRtaSA9IGRtaS0+bmV4dDsKLQkJfQotCi0JCS8qIHVzZSBodyBoYXNoIHRhYmxlIGZvciB0aGUgbmV4dCBzZXJpZXMgb2YKLQkJICogbXVsdGljYXN0IGFkZHJlc3NlcwotCQkgKi8KLQkJbWVtc2V0KGhhc2hfdGFibGUsIDAsIHNpemVvZihoYXNoX3RhYmxlKSk7Ci0JCXdoaWxlIChkbWkpIHsKLSAJCQljcmMgPSBldGhlcl9jcmNfbGUoRVRIX0FMRU4sIGRtaS0+ZG1pX2FkZHIpOwotCQkJY3JjID4+PSAyNDsKLQkJCWhhc2hfdGFibGVbY3JjID4+IDRdIHw9IDEgPDwgKDE1IC0gKGNyYyAmIDB4ZikpOwotCQkJZG1pID0gZG1pLT5uZXh0OwotCQl9Ci0JICAgIAlmb3IgKGk9MDsgaSA8IDE2OyBpKyspCi0JCQl3cml0ZWwoaGFzaF90YWJsZVtpXSwgY3AtPnJlZ3MgKwotCQkJICAgICAgIFJFR19NQUNfSEFTSF9UQUJMRU4oaSkpOworCQljYXNfcHJvY2Vzc19tY19saXN0KGNwKTsKIAkJcnhjZmcgfD0gTUFDX1JYX0NGR19IQVNIX0ZJTFRFUl9FTjsKIAl9CiAKQEAgLTMxMDAsMTAgKzMwNTIsMTAgQEAKIAogCWlmIChyZWFkbChjcC0+cmVncyArIFJFR19NQUNfVFhfUkVTRVQpIHwKIAkgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1JYX1JFU0VUKSkKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogbWFjIHR4WyVkXS9yeFslZF0gcmVzZXQgZmFpbGVkIFslMDh4XVxuIiwKLQkJICAgICAgIGNwLT5kZXYtPm5hbWUsIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19UWF9SRVNFVCksCi0JCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19NQUNfUlhfUkVTRVQpLAotCQkgICAgICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1NUQVRFX01BQ0hJTkUpKTsKKwkJbmV0ZGV2X2VycihjcC0+ZGV2LCAibWFjIHR4WyVkXS9yeFslZF0gcmVzZXQgZmFpbGVkIFslMDh4XVxuIiwKKwkJCSAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19UWF9SRVNFVCksCisJCQkgICByZWFkbChjcC0+cmVncyArIFJFR19NQUNfUlhfUkVTRVQpLAorCQkJICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUFDX1NUQVRFX01BQ0hJTkUpKTsKIH0KIAogCkBAIC0zNDIzLDcgKzMzNzUsNyBAQAogCQlnb3RvIGRvbmU7CiAKIAkvKiBTdW4gTUFDIHByZWZpeCB0aGVuIDMgcmFuZG9tIGJ5dGVzLiAqLwotCXByaW50ayhQRlggIk1BQyBhZGRyZXNzIG5vdCBmb3VuZCBpbiBST00gVlBEXG4iKTsKKwlwcl9pbmZvKCJNQUMgYWRkcmVzcyBub3QgZm91bmQgaW4gUk9NIFZQRFxuIik7CiAJZGV2X2FkZHJbMF0gPSAweDA4OwogCWRldl9hZGRyWzFdID0gMHgwMDsKIAlkZXZfYWRkclsyXSA9IDB4MjA7CkBAIC0zNDg0LDcgKzM0MzYsNyBAQAogCQkJX19mcmVlX3BhZ2VzKHBhZ2UsIENBU19KVU1CT19QQUdFX1NISUZUIC0gUEFHRV9TSElGVCk7CiAJCQljcC0+cGFnZV9vcmRlciA9IENBU19KVU1CT19QQUdFX1NISUZUIC0gUEFHRV9TSElGVDsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhQRlggIk1UVSBsaW1pdGVkIHRvICVkIGJ5dGVzXG4iLCBDQVNfTUFYX01UVSk7CisJCQlwcmludGsoIk1UVSBsaW1pdGVkIHRvICVkIGJ5dGVzXG4iLCBDQVNfTUFYX01UVSk7CiAJCX0KIAl9CiAjZW5kaWYKQEAgLTM1MjksNyArMzQ4MSw3IEBACiAJCQl9CiAJCX0KIAl9Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiTUlJIHBoeSBkaWQgbm90IHJlc3BvbmQgWyUwOHhdXG4iLAorCXByX2VycigiTUlJIHBoeSBkaWQgbm90IHJlc3BvbmQgWyUwOHhdXG4iLAogCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19NSUZfU1RBVEVfTUFDSElORSkpOwogCXJldHVybiAtMTsKIApAQCAtMzU3NCwyMSArMzUyNiwxOSBAQAogCQl2YWwgPSByZWFkbChjcC0+cmVncyArIFJFR19NQUNfUlhfQ0ZHKTsKIAkJaWYgKCh2YWwgJiBNQUNfUlhfQ0ZHX0VOKSkgewogCQkJaWYgKHR4ZmFpbGVkKSB7Ci0JCQkgIHByaW50ayhLRVJOX0VSUgotCQkJCSAiJXM6IGVuYWJsaW5nIG1hYyBmYWlsZWQgW3R4OiUwOHg6JTA4eF0uXG4iLAotCQkJCSBjcC0+ZGV2LT5uYW1lLAotCQkJCSByZWFkbChjcC0+cmVncyArIFJFR19NSUZfU1RBVEVfTUFDSElORSksCi0JCQkJIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19TVEFURV9NQUNISU5FKSk7CisJCQkJbmV0ZGV2X2VycihjcC0+ZGV2LAorCQkJCQkgICAiZW5hYmxpbmcgbWFjIGZhaWxlZCBbdHg6JTA4eDolMDh4XVxuIiwKKwkJCQkJICAgcmVhZGwoY3AtPnJlZ3MgKyBSRUdfTUlGX1NUQVRFX01BQ0hJTkUpLAorCQkJCQkgICByZWFkbChjcC0+cmVncyArIFJFR19NQUNfU1RBVEVfTUFDSElORSkpOwogCQkJfQogCQkJZ290byBlbmFibGVfcnhfZG9uZTsKIAkJfQogCQl1ZGVsYXkoMTApOwogCX0KLQlwcmludGsoS0VSTl9FUlIgIiVzOiBlbmFibGluZyBtYWMgZmFpbGVkIFslczolMDh4OiUwOHhdLlxuIiwKLQkgICAgICAgY3AtPmRldi0+bmFtZSwKLQkgICAgICAgKHR4ZmFpbGVkPyAidHgscngiOiJyeCIpLAotCSAgICAgICByZWFkbChjcC0+cmVncyArIFJFR19NSUZfU1RBVEVfTUFDSElORSksCi0JICAgICAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19TVEFURV9NQUNISU5FKSk7CisJbmV0ZGV2X2VycihjcC0+ZGV2LCAiZW5hYmxpbmcgbWFjIGZhaWxlZCBbJXM6JTA4eDolMDh4XVxuIiwKKwkJICAgKHR4ZmFpbGVkID8gInR4LHJ4IiA6ICJyeCIpLAorCQkgICByZWFkbChjcC0+cmVncyArIFJFR19NSUZfU1RBVEVfTUFDSElORSksCisJCSAgIHJlYWRsKGNwLT5yZWdzICsgUkVHX01BQ19TVEFURV9NQUNISU5FKSk7CiAKIGVuYWJsZV9yeF9kb25lOgogCWNhc191bm1hc2tfaW50cihjcCk7IC8qIGVuYWJsZSBpbnRlcnJ1cHRzICovCkBAIC0zNjkwLDkgKzM2NDAsOCBAQAogCQl9CiAJfQogCi0JaWYgKG5ldGlmX21zZ19saW5rKGNwKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IExpbmsgdXAgYXQgJWQgTWJwcywgJXMtZHVwbGV4LlxuIiwKLQkJICAgICAgIGNwLT5kZXYtPm5hbWUsIHNwZWVkLCAoZnVsbF9kdXBsZXggPyAiZnVsbCIgOiAiaGFsZiIpKTsKKwluZXRpZl9pbmZvKGNwLCBsaW5rLCBjcC0+ZGV2LCAiTGluayB1cCBhdCAlZCBNYnBzLCAlcy1kdXBsZXhcbiIsCisJCSAgIHNwZWVkLCBmdWxsX2R1cGxleCA/ICJmdWxsIiA6ICJoYWxmIik7CiAKIAl2YWwgPSBNQUNfWElGX1RYX01JSV9PVVRQVVRfRU4gfCBNQUNfWElGX0xJTktfTEVEOwogCWlmIChDQVNfUEhZX01JSShjcC0+cGh5X3R5cGUpKSB7CkBAIC0zNzYyLDE4ICszNzExLDE0IEBACiAKIAlpZiAobmV0aWZfbXNnX2xpbmsoY3ApKSB7CiAJCWlmIChwYXVzZSAmIDB4MDEpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQYXVzZSBpcyBlbmFibGVkICIKLQkJCSAgICAgICAiKHJ4ZmlmbzogJWQgb2ZmOiAlZCBvbjogJWQpXG4iLAotCQkJICAgICAgIGNwLT5kZXYtPm5hbWUsCi0JCQkgICAgICAgY3AtPnJ4X2ZpZm9fc2l6ZSwKLQkJCSAgICAgICBjcC0+cnhfcGF1c2Vfb2ZmLAotCQkJICAgICAgIGNwLT5yeF9wYXVzZV9vbik7CisJCQluZXRkZXZfaW5mbyhjcC0+ZGV2LCAiUGF1c2UgaXMgZW5hYmxlZCAocnhmaWZvOiAlZCBvZmY6ICVkIG9uOiAlZClcbiIsCisJCQkJICAgIGNwLT5yeF9maWZvX3NpemUsCisJCQkJICAgIGNwLT5yeF9wYXVzZV9vZmYsCisJCQkJICAgIGNwLT5yeF9wYXVzZV9vbik7CiAJCX0gZWxzZSBpZiAocGF1c2UgJiAweDEwKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogVFggcGF1c2UgZW5hYmxlZFxuIiwKLQkJCSAgICAgICBjcC0+ZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9pbmZvKGNwLT5kZXYsICJUWCBwYXVzZSBlbmFibGVkXG4iKTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQYXVzZSBpcyBkaXNhYmxlZFxuIiwKLQkJCSAgICAgICBjcC0+ZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9pbmZvKGNwLT5kZXYsICJQYXVzZSBpcyBkaXNhYmxlZFxuIik7CiAJCX0KIAl9CiAKQEAgLTM4NDksNyArMzc5NCw3IEBACiAJCQlnb3RvIGRvbmU7CiAJCXVkZWxheSgxMCk7CiAJfQotCXByaW50ayhLRVJOX0VSUiAiJXM6IHN3IHJlc2V0IGZhaWxlZC5cbiIsIGNwLT5kZXYtPm5hbWUpOworCW5ldGRldl9lcnIoY3AtPmRldiwgInN3IHJlc2V0IGZhaWxlZFxuIik7CiAKIGRvbmU6CiAJLyogZW5hYmxlIHZhcmlvdXMgQklNIGludGVycnVwdHMgKi8KQEAgLTM5NTUsNyArMzkwMCw3IEBACiAjZWxzZQogCWF0b21pY19zZXQoJmNwLT5yZXNldF90YXNrX3BlbmRpbmcsIChjcC0+cGh5X3R5cGUgJiBDQVNfUEhZX1NFUkRFUykgPwogCQkgICBDQVNfUkVTRVRfQUxMIDogQ0FTX1JFU0VUX01UVSk7Ci0JcHJpbnRrKEtFUk5fRVJSICJyZXNldCBjYWxsZWQgaW4gY2FzX2NoYW5nZV9tdHVcbiIpOworCXByX2VycigicmVzZXQgY2FsbGVkIGluIGNhc19jaGFuZ2VfbXR1XG4iKTsKIAlzY2hlZHVsZV93b3JrKCZjcC0+cmVzZXRfdGFzayk7CiAjZW5kaWYKIApAQCAtNDIzNywxMCArNDE4Miw4IEBACiAKIAkJaWYgKCgodGxtID09IDB4NSkgfHwgKHRsbSA9PSAweDMpKSAmJgogCQkgICAgKENBU19WQUwoTUFDX1NNX0VOQ0FQX1NNLCB2YWwpID09IDApKSB7Ci0JCQlpZiAobmV0aWZfbXNnX3R4X2VycihjcCkpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBlcnI6ICIKLQkJCQkgICAgICAgIk1BQ19TVEFURVslMDh4XVxuIiwKLQkJCQkgICAgICAgY3AtPmRldi0+bmFtZSwgdmFsKTsKKwkJCW5ldGlmX3ByaW50ayhjcCwgdHhfZXJyLCBLRVJOX0RFQlVHLCBjcC0+ZGV2LAorCQkJCSAgICAgInR4IGVycjogTUFDX1NUQVRFWyUwOHhdXG4iLCB2YWwpOwogCQkJcmVzZXQgPSAxOwogCQkJZ290byBkb25lOwogCQl9CkBAIC00MjQ5LDEwICs0MTkyLDkgQEAKIAkJd3B0ciA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX1RYX0ZJRk9fV1JJVEVfUFRSKTsKIAkJcnB0ciA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX1RYX0ZJRk9fUkVBRF9QVFIpOwogCQlpZiAoKHZhbCA9PSAwKSAmJiAod3B0ciAhPSBycHRyKSkgewotCQkJaWYgKG5ldGlmX21zZ190eF9lcnIoY3ApKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdHggZXJyOiAiCi0JCQkJICAgICAgICJUWF9GSUZPWyUwOHg6JTA4eDolMDh4XVxuIiwKLQkJCQkgICAgICAgY3AtPmRldi0+bmFtZSwgdmFsLCB3cHRyLCBycHRyKTsKKwkJCW5ldGlmX3ByaW50ayhjcCwgdHhfZXJyLCBLRVJOX0RFQlVHLCBjcC0+ZGV2LAorCQkJCSAgICAgInR4IGVycjogVFhfRklGT1slMDh4OiUwOHg6JTA4eF1cbiIsCisJCQkJICAgICB2YWwsIHdwdHIsIHJwdHIpOwogCQkJcmVzZXQgPSAxOwogCQl9CiAKQEAgLTQyNjgsNyArNDIxMCw3IEBACiAJCXNjaGVkdWxlX3dvcmsoJmNwLT5yZXNldF90YXNrKTsKICNlbHNlCiAJCWF0b21pY19zZXQoJmNwLT5yZXNldF90YXNrX3BlbmRpbmcsIENBU19SRVNFVF9BTEwpOwotCQlwcmludGsoS0VSTl9FUlIgInJlc2V0IGNhbGxlZCBpbiBjYXNfbGlua190aW1lclxuIik7CisJCXByX2VycigicmVzZXQgY2FsbGVkIGluIGNhc19saW5rX3RpbWVyXG4iKTsKIAkJc2NoZWR1bGVfd29yaygmY3AtPnJlc2V0X3Rhc2spOwogI2VuZGlmCiAJfQpAQCAtNDM2MSw4ICs0MzAzLDcgQEAKIAkgKi8KIAlpZiAocmVxdWVzdF9pcnEoY3AtPnBkZXYtPmlycSwgY2FzX2ludGVycnVwdCwKIAkJCUlSUUZfU0hBUkVELCBkZXYtPm5hbWUsICh2b2lkICopIGRldikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlcXVlc3QgaXJxICFcbiIsCi0JCSAgICAgICBjcC0+ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihjcC0+ZGV2LCAiZmFpbGVkIHRvIHJlcXVlc3QgaXJxICFcbiIpOwogCQllcnIgPSAtRUFHQUlOOwogCQlnb3RvIGVycl9zcGFyZTsKIAl9CkBAIC01MDAyLDI0ICs0OTQzLDI0IEBACiAJdTggb3JpZ19jYWNoZWxpbmVfc2l6ZSA9IDAsIGNhc19jYWNoZWxpbmVfc2l6ZSA9IDA7CiAKIAlpZiAoY2FzX3ZlcnNpb25fcHJpbnRlZCsrID09IDApCi0JCXByaW50ayhLRVJOX0lORk8gIiVzIiwgdmVyc2lvbik7CisJCXByX2luZm8oIiVzIiwgdmVyc2lvbik7CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSwgYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlLCBhYm9ydGluZ1xuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCiAJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDApICYgSU9SRVNPVVJDRV9NRU0pKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBmaW5kIHByb3BlciBQQ0kgZGV2aWNlICIKLQkJICAgICAgICJiYXNlIGFkZHJlc3MsIGFib3J0aW5nLlxuIik7CisJCSAgICAgICAiYmFzZSBhZGRyZXNzLCBhYm9ydGluZ1xuIik7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9kaXNhYmxlX3BkZXY7CiAJfQogCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCpjcCkpOwogCWlmICghZGV2KSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkV0aGVyZGV2IGFsbG9jIGZhaWxlZCwgYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRXRoZXJkZXYgYWxsb2MgZmFpbGVkLCBhYm9ydGluZ1xuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dF9kaXNhYmxlX3BkZXY7CiAJfQpAQCAtNTAyNyw3ICs0OTY4LDcgQEAKIAogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgZGV2LT5uYW1lKTsKIAlpZiAoZXJyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlcywgYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzLCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gZXJyX291dF9mcmVlX25ldGRldjsKIAl9CiAJcGNpX3NldF9tYXN0ZXIocGRldik7CkBAIC01MDQxLDggKzQ5ODIsNyBAQAogCXBjaV9jbWQgfD0gUENJX0NPTU1BTkRfUEFSSVRZOwogCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgcGNpX2NtZCk7CiAJaWYgKHBjaV90cnlfc2V0X213aShwZGV2KSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkNvdWxkIG5vdCBlbmFibGUgTVdJIGZvciAlc1xuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJcHJfd2FybmluZygiQ291bGQgbm90IGVuYWJsZSBNV0kgZm9yICVzXG4iLCBwY2lfbmFtZShwZGV2KSk7CiAKIAljYXNfcHJvZ3JhbV9icmlkZ2UocGRldik7CiAKQEAgLTUwODUsNyArNTAyNSw3IEBACiAJCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CiAJCWlmIChlcnIpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgIgotCQkJICAgICAgICJhYm9ydGluZy5cbiIpOworCQkJICAgICAgICJhYm9ydGluZ1xuIik7CiAJCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CiAJCX0KIAkJcGNpX3VzaW5nX2RhYyA9IDA7CkBAIC01MTQ0LDcgKzUwODQsNyBAQAogCS8qIGdpdmUgdXMgYWNjZXNzIHRvIGNhc3NpbmkgcmVnaXN0ZXJzICovCiAJY3AtPnJlZ3MgPSBwY2lfaW9tYXAocGRldiwgMCwgY2FzcmVnX2xlbik7CiAJaWYgKCFjcC0+cmVncykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgbWFwIGRldmljZSByZWdpc3RlcnMsIGFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBtYXAgZGV2aWNlIHJlZ2lzdGVycywgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CiAJfQogCWNwLT5jYXNyZWdfbGVuID0gY2FzcmVnX2xlbjsKQEAgLTUxNjMsNyArNTEwMyw3IEBACiAJCXBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHNpemVvZihzdHJ1Y3QgY2FzX2luaXRfYmxvY2spLAogCQkJCSAgICAgJmNwLT5ibG9ja19kdm1hKTsKIAlpZiAoIWNwLT5pbml0X2Jsb2NrKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBhbGxvY2F0ZSBpbml0IGJsb2NrLCBhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgYWxsb2NhdGUgaW5pdCBibG9jaywgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAl9CiAKQEAgLTUxOTcsMTggKzUxMzcsMTcgQEAKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKIAlpZiAocmVnaXN0ZXJfbmV0ZGV2KGRldikpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsIGFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gZXJyX291dF9mcmVlX2NvbnNpc3RlbnQ7CiAJfQogCiAJaSA9IHJlYWRsKGNwLT5yZWdzICsgUkVHX0JJTV9DRkcpOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBTdW4gQ2Fzc2luaSVzICglc2JpdC8lc01IeiBQQ0kvJXMpICIKLQkgICAgICAgIkV0aGVybmV0WyVkXSAlcE1cbiIsICBkZXYtPm5hbWUsCi0JICAgICAgIChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfUkVHX1BMVVMpID8gIisiIDogIiIsCi0JICAgICAgIChpICYgQklNX0NGR18zMkJJVCkgPyAiMzIiIDogIjY0IiwKLQkgICAgICAgKGkgJiBCSU1fQ0ZHXzY2TUhaKSA/ICI2NiIgOiAiMzMiLAotCSAgICAgICAoY3AtPnBoeV90eXBlID09IENBU19QSFlfU0VSREVTKSA/ICJGaSIgOiAiQ3UiLCBwZGV2LT5pcnEsCi0JICAgICAgIGRldi0+ZGV2X2FkZHIpOworCW5ldGRldl9pbmZvKGRldiwgIlN1biBDYXNzaW5pJXMgKCVzYml0LyVzTUh6IFBDSS8lcykgRXRoZXJuZXRbJWRdICVwTVxuIiwKKwkJICAgIChjcC0+Y2FzX2ZsYWdzICYgQ0FTX0ZMQUdfUkVHX1BMVVMpID8gIisiIDogIiIsCisJCSAgICAoaSAmIEJJTV9DRkdfMzJCSVQpID8gIjMyIiA6ICI2NCIsCisJCSAgICAoaSAmIEJJTV9DRkdfNjZNSFopID8gIjY2IiA6ICIzMyIsCisJCSAgICAoY3AtPnBoeV90eXBlID09IENBU19QSFlfU0VSREVTKSA/ICJGaSIgOiAiQ3UiLCBwZGV2LT5pcnEsCisJCSAgICBkZXYtPmRldl9hZGRyKTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCWNwLT5od19ydW5uaW5nID0gMTsKQEAgLTUzMjIsNyArNTI2MSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgY2FzICpjcCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogcmVzdW1pbmdcbiIsIGRldi0+bmFtZSk7CisJbmV0ZGV2X2luZm8oZGV2LCAicmVzdW1pbmdcbiIpOwogCiAJbXV0ZXhfbG9jaygmY3AtPnBtX211dGV4KTsKIAljYXNfaGFyZF9yZXNldChjcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvY2hlbHNpby9jb21tb24uaAppbmRleCA2OTlkMjJjLi4yZDExYWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vY29tbW9uLmgKQEAgLTM2LDYgKzM2LDggQEAKICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgImN4Z2I6ICIgZm10CisKICNpZm5kZWYgX0NYR0JfQ09NTU9OX0hfCiAjZGVmaW5lIF9DWEdCX0NPTU1PTl9IXwogCkBAIC01NSwyOCArNTcsNiBAQAogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04gIkNoZWxzaW8gMTBHYiBFdGhlcm5ldCBEcml2ZXIiCiAjZGVmaW5lIERSVl9OQU1FICJjeGdiIgogI2RlZmluZSBEUlZfVkVSU0lPTiAiMi4yIgotI2RlZmluZSBQRlggICAgICBEUlZfTkFNRSAiOiAiCi0KLSNkZWZpbmUgQ0hfRVJSKGZtdCwgLi4uKSAgIHByaW50ayhLRVJOX0VSUiBQRlggZm10LCAjIyBfX1ZBX0FSR1NfXykKLSNkZWZpbmUgQ0hfV0FSTihmbXQsIC4uLikgIHByaW50ayhLRVJOX1dBUk5JTkcgUEZYIGZtdCwgIyMgX19WQV9BUkdTX18pCi0jZGVmaW5lIENIX0FMRVJUKGZtdCwgLi4uKSBwcmludGsoS0VSTl9BTEVSVCBQRlggZm10LCAjIyBfX1ZBX0FSR1NfXykKLQotLyoKLSAqIE1vcmUgcG93ZXJmdWwgbWFjcm8gdGhhdCBzZWxlY3RpdmVseSBwcmludHMgbWVzc2FnZXMgYmFzZWQgb24gbXNnX2VuYWJsZS4KLSAqIEZvciBpbmZvIGFuZCBkZWJ1Z2dpbmcgbWVzc2FnZXMuCi0gKi8KLSNkZWZpbmUgQ0hfTVNHKGFkYXB0ZXIsIGxldmVsLCBjYXRlZ29yeSwgZm10LCAuLi4pIGRvIHsgXAotCWlmICgoYWRhcHRlciktPm1zZ19lbmFibGUgJiBORVRJRl9NU0dfIyNjYXRlZ29yeSkgXAotCQlwcmludGsoS0VSTl8jI2xldmVsIFBGWCAiJXM6ICIgZm10LCAoYWRhcHRlciktPm5hbWUsIFwKLQkJICAgICAgICMjIF9fVkFfQVJHU19fKTsgXAotfSB3aGlsZSAoMCkKLQotI2lmZGVmIERFQlVHCi0jIGRlZmluZSBDSF9EQkcoYWRhcHRlciwgY2F0ZWdvcnksIGZtdCwgLi4uKSBcCi0JQ0hfTVNHKGFkYXB0ZXIsIERFQlVHLCBjYXRlZ29yeSwgZm10LCAjIyBfX1ZBX0FSR1NfXykKLSNlbHNlCi0jIGRlZmluZSBDSF9EQkcoZm10LCAuLi4pCi0jZW5kaWYKIAogI2RlZmluZSBDSF9ERVZJQ0UoZGV2aWQsIHNzaWQsIGlkeCkgXAogCXsgUENJX1ZFTkRPUl9JRF9DSEVMU0lPLCBkZXZpZCwgUENJX0FOWV9JRCwgc3NpZCwgMCwgMCwgaWR4IH0KQEAgLTkwLDI1ICs3MCwxMyBAQAogdHlwZWRlZiBzdHJ1Y3QgYWRhcHRlciBhZGFwdGVyX3Q7CiAKIHN0cnVjdCB0MV9yeF9tb2RlIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXUzMiBpZHg7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpsaXN0OworICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiB9OwogCiAjZGVmaW5lIHQxX3J4X21vZGVfcHJvbWlzYyhybSkJKHJtLT5kZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCiAjZGVmaW5lIHQxX3J4X21vZGVfYWxsbXVsdGkocm0pCShybS0+ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkKLSNkZWZpbmUgdDFfcnhfbW9kZV9tY19jbnQocm0pCShybS0+ZGV2LT5tY19jb3VudCkKLQotc3RhdGljIGlubGluZSB1OCAqdDFfZ2V0X25leHRfbWNhZGRyKHN0cnVjdCB0MV9yeF9tb2RlICpybSkKLXsKLQl1OCAqYWRkciA9IE5VTEw7Ci0KLQlpZiAocm0tPmlkeCsrIDwgcm0tPmRldi0+bWNfY291bnQpIHsKLQkJYWRkciA9IHJtLT5saXN0LT5kbWlfYWRkcjsKLQkJcm0tPmxpc3QgPSBybS0+bGlzdC0+bmV4dDsKLQl9Ci0JcmV0dXJuIGFkZHI7Ci19CisjZGVmaW5lIHQxX3J4X21vZGVfbWNfY250KHJtKQkobmV0ZGV2X21jX2NvdW50KHJtLT5kZXYpKQorI2RlZmluZSB0MV9nZXRfbmV0ZGV2KHJtKQkocm0tPmRldikKIAogI2RlZmluZQlNQVhfTlBPUlRTIDQKICNkZWZpbmUgUE9SVF9NQVNLICgoMSA8PCBNQVhfTlBPUlRTKSAtIDEpCkBAIC0zMzQsNyArMzAyLDcgQEAKIAlyZXR1cm4gYWRhcHRlci0+cGFyYW1zLmlzX2FzaWM7CiB9CiAKLWV4dGVybiBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0MV9wY2lfdGJsW107CitleHRlcm4gY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgdDFfcGNpX3RibFtdOwogCiBzdGF0aWMgaW5saW5lIGludCBhZGFwdGVyX21hdGNoZXNfdHlwZShjb25zdCBhZGFwdGVyX3QgKmFkYXB0ZXIsCiAJCQkJICAgICAgIGludCB2ZXJzaW9uLCBpbnQgcmV2aXNpb24pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL2N4Z2IyLmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL2N4Z2IyLmMKaW5kZXggMDgyY2RiMi4uMGY3MTMwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9jeGdiMi5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vY3hnYjIuYwpAQCAtMTI1LDggKzEyNSw2IEBACiAJc3RydWN0IHQxX3J4X21vZGUgcm07CiAKIAlybS5kZXYgPSBkZXY7Ci0Jcm0uaWR4ID0gMDsKLQlybS5saXN0ID0gZGV2LT5tY19saXN0OwogCW1hYy0+b3BzLT5zZXRfcnhfbW9kZShtYWMsICZybSk7CiB9CiAKQEAgLTk3Niw3ICs5NzQsNyBAQAogCQl0MV9zZ2Vfc3RvcChhZGFwdGVyLT5zZ2UpOwogCQl0MV9pbnRlcnJ1cHRzX2Rpc2FibGUoYWRhcHRlcik7CiAJfQotCUNIX0FMRVJUKCIlczogZW5jb3VudGVyZWQgZmF0YWwgZXJyb3IsIG9wZXJhdGlvbiBzdXNwZW5kZWRcbiIsCisJcHJfYWxlcnQoIiVzOiBlbmNvdW50ZXJlZCBmYXRhbCBlcnJvciwgb3BlcmF0aW9uIHN1c3BlbmRlZFxuIiwKIAkJIGFkYXB0ZXItPm5hbWUpOwogfQogCkBAIC0xMDIwLDcgKzEwMTgsNyBAQAogCQlyZXR1cm4gZXJyOwogCiAJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDApICYgSU9SRVNPVVJDRV9NRU0pKSB7Ci0JCUNIX0VSUigiJXM6IGNhbm5vdCBmaW5kIFBDSSBkZXZpY2UgbWVtb3J5IGJhc2UgYWRkcmVzc1xuIiwKKwkJcHJfZXJyKCIlczogY2Fubm90IGZpbmQgUENJIGRldmljZSBtZW1vcnkgYmFzZSBhZGRyZXNzXG4iLAogCQkgICAgICAgcGNpX25hbWUocGRldikpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIG91dF9kaXNhYmxlX3BkZXY7CkBAIC0xMDMwLDIwICsxMDI4LDIwIEBACiAJCXBjaV91c2luZ19kYWMgPSAxOwogCiAJCWlmIChwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkpIHsKLQkJCUNIX0VSUigiJXM6IHVuYWJsZSB0byBvYnRhaW4gNjQtYml0IERNQSBmb3IgIgorCQkJcHJfZXJyKCIlczogdW5hYmxlIHRvIG9idGFpbiA2NC1iaXQgRE1BIGZvciAiCiAJCQkgICAgICAgImNvbnNpc3RlbnQgYWxsb2NhdGlvbnNcbiIsIHBjaV9uYW1lKHBkZXYpKTsKIAkJCWVyciA9IC1FTk9ERVY7CiAJCQlnb3RvIG91dF9kaXNhYmxlX3BkZXY7CiAJCX0KIAogCX0gZWxzZSBpZiAoKGVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpICE9IDApIHsKLQkJQ0hfRVJSKCIlczogbm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uXG4iLCBwY2lfbmFtZShwZGV2KSk7CisJCXByX2VycigiJXM6IG5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvblxuIiwgcGNpX25hbWUocGRldikpOwogCQlnb3RvIG91dF9kaXNhYmxlX3BkZXY7CiAJfQogCiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTkFNRSk7CiAJaWYgKGVycikgewotCQlDSF9FUlIoIiVzOiBjYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIsIHBjaV9uYW1lKHBkZXYpKTsKKwkJcHJfZXJyKCIlczogY2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzXG4iLCBwY2lfbmFtZShwZGV2KSk7CiAJCWdvdG8gb3V0X2Rpc2FibGVfcGRldjsKIAl9CiAKQEAgLTEwNzEsNyArMTA2OSw3IEBACiAKIAkJCWFkYXB0ZXItPnJlZ3MgPSBpb3JlbWFwKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKIAkJCWlmICghYWRhcHRlci0+cmVncykgewotCQkJCUNIX0VSUigiJXM6IGNhbm5vdCBtYXAgZGV2aWNlIHJlZ2lzdGVyc1xuIiwKKwkJCQlwcl9lcnIoIiVzOiBjYW5ub3QgbWFwIGRldmljZSByZWdpc3RlcnNcbiIsCiAJCQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKIAkJCQllcnIgPSAtRU5PTUVNOwogCQkJCWdvdG8gb3V0X2ZyZWVfZGV2OwpAQCAtMTE1MCw4ICsxMTQ4LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgYmktPnBvcnRfbnVtYmVyOyArK2kpIHsKIAkJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGFkYXB0ZXItPnBvcnRbaV0uZGV2KTsKIAkJaWYgKGVycikKLQkJCUNIX1dBUk4oIiVzOiBjYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSAlcywgc2tpcHBpbmdcbiIsCi0JCQkJcGNpX25hbWUocGRldiksIGFkYXB0ZXItPnBvcnRbaV0uZGV2LT5uYW1lKTsKKwkJCXByX3dhcm5pbmcoIiVzOiBjYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSAlcywgc2tpcHBpbmdcbiIsCisJCQkJICAgcGNpX25hbWUocGRldiksIGFkYXB0ZXItPnBvcnRbaV0uZGV2LT5uYW1lKTsKIAkJZWxzZSB7CiAJCQkvKgogCQkJICogQ2hhbmdlIHRoZSBuYW1lIHdlIHVzZSBmb3IgbWVzc2FnZXMgdG8gdGhlIG5hbWUgb2YKQEAgLTExNjQsNyArMTE2Miw3IEBACiAJCX0KIAl9CiAJaWYgKCFhZGFwdGVyLT5yZWdpc3RlcmVkX2RldmljZV9tYXApIHsKLQkJQ0hfRVJSKCIlczogY291bGQgbm90IHJlZ2lzdGVyIGFueSBuZXQgZGV2aWNlc1xuIiwKKwkJcHJfZXJyKCIlczogY291bGQgbm90IHJlZ2lzdGVyIGFueSBuZXQgZGV2aWNlc1xuIiwKIAkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKIAkJZ290byBvdXRfcmVsZWFzZV9hZGFwdGVyX3JlczsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL2VzcGkuYyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vZXNwaS5jCmluZGV4IDFlMDc0OWUuLjYzOWZmMTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NoZWxzaW8vZXNwaS5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vZXNwaS5jCkBAIC03Niw3ICs3Niw3IEBACiAJfSB3aGlsZSAoYnVzeSAmJiAtLWF0dGVtcHRzKTsKIAogCWlmIChidXN5KQotCQlDSF9FUlIoIiVzOiBUUklDTiB3cml0ZSB0aW1lZCBvdXRcbiIsIGFkYXB0ZXItPm5hbWUpOworCQlwcl9lcnIoIiVzOiBUUklDTiB3cml0ZSB0aW1lZCBvdXRcbiIsIGFkYXB0ZXItPm5hbWUpOwogCiAJcmV0dXJuIGJ1c3k7CiB9CkBAIC04Niw3ICs4Niw3IEBACiAJaW50IGksIHNtZSA9IDE7CiAKIAlpZiAoIShyZWFkbChhZGFwdGVyLT5yZWdzICsgQV9FU1BJX1JYX1JFU0VUKSAgJiBGX1JYX0NMS19TVEFUVVMpKSB7Ci0JCUNIX0VSUigiJXM6IEVTUEkgY2xvY2sgbm90IHJlYWR5XG4iLCBhZGFwdGVyLT5uYW1lKTsKKwkJcHJfZXJyKCIlczogRVNQSSBjbG9jayBub3QgcmVhZHlcbiIsIGFkYXB0ZXItPm5hbWUpOwogCQlyZXR1cm4gLTE7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jaGVsc2lvL3BtMzM5My5jIGIvZHJpdmVycy9uZXQvY2hlbHNpby9wbTMzOTMuYwppbmRleCAyMTE3YzRmLi5hNmViMzBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3BtMzM5My5jCisrKyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vcG0zMzkzLmMKQEAgLTI1MSw4ICsyNTEsOSBAQAogCS8qIFJlYWQgdGhlIG1hc3RlciBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyLiAqLwogCXBtcmVhZChjbWFjLCBTVU5JMXgxMEdFWFBfUkVHX01BU1RFUl9JTlRFUlJVUFRfU1RBVFVTLAogCSAgICAgICAmbWFzdGVyX2ludHJfc3RhdHVzKTsKLQlDSF9EQkcoY21hYy0+YWRhcHRlciwgSU5UUiwgIlBNMzM5MyBpbnRyIGNhdXNlIDB4JXhcbiIsCi0JICAgICAgIG1hc3Rlcl9pbnRyX3N0YXR1cyk7CisJaWYgKG5ldGlmX21zZ19pbnRyKGNtYWMtPmFkYXB0ZXIpKQorCQlkZXZfZGJnKCZjbWFjLT5hZGFwdGVyLT5wZGV2LT5kZXYsICJQTTMzOTMgaW50ciBjYXVzZSAweCV4XG4iLAorCQkJbWFzdGVyX2ludHJfc3RhdHVzKTsKIAogCS8qIFRCRCBYWFggTGV0cyBqdXN0IGNsZWFyIGV2ZXJ5dGhpbmcgZm9yIG5vdyAqLwogCXBtMzM5M19pbnRlcnJ1cHRfY2xlYXIoY21hYyk7CkBAIC0zNzUsMTIgKzM3NiwxMiBAQAogCQlyeF9tb2RlIHw9IFNVTkkxeDEwR0VYUF9CSVRNU0tfUlhYR19NSEFTSF9FTjsKIAl9IGVsc2UgaWYgKHQxX3J4X21vZGVfbWNfY250KHJtKSkgewogCQkvKiBBY2NlcHQgb25lIG9yIG1vcmUgbXVsdGljYXN0KHMpLiAqLwotCQl1OCAqYWRkcjsKKwkJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJCWludCBiaXQ7CiAJCXUxNiBtY19maWx0ZXJbNF0gPSB7IDAsIH07CiAKLQkJd2hpbGUgKChhZGRyID0gdDFfZ2V0X25leHRfbWNhZGRyKHJtKSkpIHsKLQkJCWJpdCA9IChldGhlcl9jcmMoRVRIX0FMRU4sIGFkZHIpID4+IDIzKSAmIDB4M2Y7CS8qIGJpdFsyMzoyOF0gKi8KKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCB0MV9nZXRfbmV0ZGV2KHJtKSkgeworCQkJYml0ID0gKGV0aGVyX2NyYyhFVEhfQUxFTiwgZG1pLT5kbWlfYWRkcikgPj4gMjMpICYgMHgzZjsgLyogYml0WzIzOjI4XSAqLwogCQkJbWNfZmlsdGVyW2JpdCA+PiA0XSB8PSAxIDw8IChiaXQgJiAweGYpOwogCQl9CiAJCXBtd3JpdGUoY21hYywgU1VOSTF4MTBHRVhQX1JFR19SWFhHX01VTFRJQ0FTVF9IQVNIX0xPVywgbWNfZmlsdGVyWzBdKTsKQEAgLTc3NiwxMSArNzc3LDEyIEBACiAJCXN1Y2Nlc3NmdWxfcmVzZXQgPSAoaXNfcGw0X3Jlc2V0X2ZpbmlzaGVkICYmICFpc19wbDRfb3V0b2ZfbG9jawogCQkJCSAgICAmJiBpc194YXVpX21hYmNfcGxsX2xvY2tlZCk7CiAKLQkJQ0hfREJHKGFkYXB0ZXIsIEhXLAotCQkgICAgICAgIlBNMzM5MyBIVyByZXNldCAlZDogcGw0X3Jlc2V0IDB4JXgsIHZhbCAweCV4LCAiCi0JCSAgICAgICAiaXNfcGw0X291dG9mX2xvY2sgMHgleCwgeGF1aV9sb2NrZWQgMHgleFxuIiwKLQkJICAgICAgIGksIGlzX3BsNF9yZXNldF9maW5pc2hlZCwgdmFsLCBpc19wbDRfb3V0b2ZfbG9jaywKLQkJICAgICAgIGlzX3hhdWlfbWFiY19wbGxfbG9ja2VkKTsKKwkJaWYgKG5ldGlmX21zZ19odyhhZGFwdGVyKSkKKwkJCWRldl9kYmcoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkiUE0zMzkzIEhXIHJlc2V0ICVkOiBwbDRfcmVzZXQgMHgleCwgdmFsIDB4JXgsICIKKwkJCQkiaXNfcGw0X291dG9mX2xvY2sgMHgleCwgeGF1aV9sb2NrZWQgMHgleFxuIiwKKwkJCQlpLCBpc19wbDRfcmVzZXRfZmluaXNoZWQsIHZhbCwKKwkJCQlpc19wbDRfb3V0b2ZfbG9jaywgaXNfeGF1aV9tYWJjX3BsbF9sb2NrZWQpOwogCX0KIAlyZXR1cm4gc3VjY2Vzc2Z1bF9yZXNldCA/IDAgOiAxOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYyBiL2RyaXZlcnMvbmV0L2NoZWxzaW8vc2dlLmMKaW5kZXggMTA5ZDI3OC4uNTVkOTljYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY2hlbHNpby9zZ2UuYworKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3NnZS5jCkBAIC0yNDgsNyArMjQ4LDcgQEAKICAqCiAgKiBJbnRlcnJ1cHRzIGFyZSBoYW5kbGVkIGJ5IGEgc2luZ2xlIENQVSBhbmQgaXQgaXMgbGlrZWx5IHRoYXQgb24gYSBNUCBzeXN0ZW0KICAqIHRoZSBhcHBsaWNhdGlvbiBpcyBtaWdyYXRlZCB0byBhbm90aGVyIENQVS4gSW4gdGhhdCBzY2VuYXJpbywgd2UgdHJ5IHRvCi0gKiBzZXBlcmF0ZSB0aGUgUlgoaW4gaXJxIGNvbnRleHQpIGFuZCBUWCBzdGF0ZSBpbiBvcmRlciB0byBkZWNyZWFzZSBtZW1vcnkKKyAqIHNlcGFyYXRlIHRoZSBSWChpbiBpcnEgY29udGV4dCkgYW5kIFRYIHN0YXRlIGluIG9yZGVyIHRvIGRlY3JlYXNlIG1lbW9yeQogICogY29udGVudGlvbi4KICAqLwogc3RydWN0IHNnZSB7CkBAIC0yNjcsNyArMjY3LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZgkqZXNwaWJ1Z19za2JbTUFYX05QT1JUU107CiAJdTMyCQlzZ2VfY29udHJvbDsJLyogc2hhZG93IHZhbHVlIG9mIHNnZSBjb250cm9sIHJlZyAqLwogCXN0cnVjdCBzZ2VfaW50cl9jb3VudHMgc3RhdHM7Ci0Jc3RydWN0IHNnZV9wb3J0X3N0YXRzICpwb3J0X3N0YXRzW01BWF9OUE9SVFNdOworCXN0cnVjdCBzZ2VfcG9ydF9zdGF0cyBfX3BlcmNwdSAqcG9ydF9zdGF0c1tNQVhfTlBPUlRTXTsKIAlzdHJ1Y3Qgc2NoZWQJKnR4X3NjaGVkOwogCXN0cnVjdCBjbWRRIGNtZFFbU0dFX0NNRFFfTl0gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIH07CkBAIC05NTMsNyArOTUzLDcgQEAKIAkJc2dlLT5zdGF0cy5yZXNwUV9lbXB0eSsrOwogCWlmIChjYXVzZSAmIEZfUkVTUFFfT1ZFUkZMT1cpIHsKIAkJc2dlLT5zdGF0cy5yZXNwUV9vdmVyZmxvdysrOwotCQlDSF9BTEVSVCgiJXM6IFNHRSByZXNwb25zZSBxdWV1ZSBvdmVyZmxvd1xuIiwKKwkJcHJfYWxlcnQoIiVzOiBTR0UgcmVzcG9uc2UgcXVldWUgb3ZlcmZsb3dcbiIsCiAJCQkgYWRhcHRlci0+bmFtZSk7CiAJfQogCWlmIChjYXVzZSAmIEZfRkxfRVhIQVVTVEVEKSB7CkBAIC05NjIsMTIgKzk2MiwxMiBAQAogCX0KIAlpZiAoY2F1c2UgJiBGX1BBQ0tFVF9UT09fQklHKSB7CiAJCXNnZS0+c3RhdHMucGt0X3Rvb19iaWcrKzsKLQkJQ0hfQUxFUlQoIiVzOiBTR0UgbWF4IHBhY2tldCBzaXplIGV4Y2VlZGVkXG4iLAorCQlwcl9hbGVydCgiJXM6IFNHRSBtYXggcGFja2V0IHNpemUgZXhjZWVkZWRcbiIsCiAJCQkgYWRhcHRlci0+bmFtZSk7CiAJfQogCWlmIChjYXVzZSAmIEZfUEFDS0VUX01JU01BVENIKSB7CiAJCXNnZS0+c3RhdHMucGt0X21pc21hdGNoKys7Ci0JCUNIX0FMRVJUKCIlczogU0dFIHBhY2tldCBtaXNtYXRjaFxuIiwgYWRhcHRlci0+bmFtZSk7CisJCXByX2FsZXJ0KCIlczogU0dFIHBhY2tldCBtaXNtYXRjaFxuIiwgYWRhcHRlci0+bmFtZSk7CiAJfQogCWlmIChjYXVzZSAmIFNHRV9JTlRfRkFUQUwpCiAJCXQxX2ZhdGFsX2VycihhZGFwdGVyKTsKQEAgLTExMDEsNyArMTEwMSw3IEBACiAKIAlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoYWRhcHRlci0+cGRldiwgcGNpX3VubWFwX2FkZHIoY2UsIGRtYV9hZGRyKSwKIAkJCSAgICBwY2lfdW5tYXBfbGVuKGNlLCBkbWFfbGVuKSwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQlDSF9FUlIoIiVzOiB1bmV4cGVjdGVkIG9mZmxvYWQgcGFja2V0LCBjbWQgJXVcbiIsCisJcHJfZXJyKCIlczogdW5leHBlY3RlZCBvZmZsb2FkIHBhY2tldCwgY21kICV1XG4iLAogCSAgICAgICBhZGFwdGVyLT5uYW1lLCAqc2tiLT5kYXRhKTsKIAlyZWN5Y2xlX2ZsX2J1ZihmbCwgZmwtPmNpZHgpOwogfQpAQCAtMTY4Nyw3ICsxNjg3LDcgQEAKIAkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJCXNldF9iaXQoZGV2LT5pZl9wb3J0LCAmc2dlLT5zdG9wcGVkX3R4X3F1ZXVlcyk7CiAJCQlzZ2UtPnN0YXRzLmNtZFFfZnVsbFsyXSsrOwotCQkJQ0hfRVJSKCIlczogVHggcmluZyBmdWxsIHdoaWxlIHF1ZXVlIGF3YWtlIVxuIiwKKwkJCXByX2VycigiJXM6IFR4IHJpbmcgZnVsbCB3aGlsZSBxdWV1ZSBhd2FrZSFcbiIsCiAJCQkgICAgICAgYWRhcHRlci0+bmFtZSk7CiAJCX0KIAkJc3Bpbl91bmxvY2soJnEtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby9zdWJyLmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3N1YnIuYwppbmRleCAxNzcyMGM2Li41M2JkZTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3N1YnIuYworKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3N1YnIuYwpAQCAtOTAsNyArOTAsNyBAQAogCXRwaV9idXN5ID0gdDFfd2FpdF9vcF9kb25lKGFkYXB0ZXIsIEFfVFBJX0NTUiwgRl9UUElSRFksIDEsCiAJCQkJICAgVFBJX0FUVEVNUFRTLCAzKTsKIAlpZiAodHBpX2J1c3kpCi0JCUNIX0FMRVJUKCIlczogVFBJIHdyaXRlIHRvIDB4JXggZmFpbGVkXG4iLAorCQlwcl9hbGVydCgiJXM6IFRQSSB3cml0ZSB0byAweCV4IGZhaWxlZFxuIiwKIAkJCSBhZGFwdGVyLT5uYW1lLCBhZGRyKTsKIAlyZXR1cm4gdHBpX2J1c3k7CiB9CkBAIC0xMTgsNyArMTE4LDcgQEAKIAl0cGlfYnVzeSA9IHQxX3dhaXRfb3BfZG9uZShhZGFwdGVyLCBBX1RQSV9DU1IsIEZfVFBJUkRZLCAxLAogCQkJCSAgIFRQSV9BVFRFTVBUUywgMyk7CiAJaWYgKHRwaV9idXN5KQotCQlDSF9BTEVSVCgiJXM6IFRQSSByZWFkIGZyb20gMHgleCBmYWlsZWRcbiIsCisJCXByX2FsZXJ0KCIlczogVFBJIHJlYWQgZnJvbSAweCV4IGZhaWxlZFxuIiwKIAkJCSBhZGFwdGVyLT5uYW1lLCBhZGRyKTsKIAllbHNlCiAJCSp2YWxwID0gcmVhZGwoYWRhcHRlci0+cmVncyArIEFfVFBJX1JEX0RBVEEpOwpAQCAtMjYyLDcgKzI2Miw3IEBACiAJCQl1ZGVsYXkoMTApOwogCX0gd2hpbGUgKGJ1c3kgJiYgLS1hdHRlbXB0cyk7CiAJaWYgKGJ1c3kpCi0JCUNIX0FMRVJUKCIlczogTURJTyBvcGVyYXRpb24gdGltZWQgb3V0XG4iLCBhZGFwdGVyLT5uYW1lKTsKKwkJcHJfYWxlcnQoIiVzOiBNRElPIG9wZXJhdGlvbiB0aW1lZCBvdXRcbiIsIGFkYXB0ZXItPm5hbWUpOwogCXJldHVybiBidXN5OwogfQogCkBAIC01MjgsNyArNTI4LDcgQEAKIAogfTsKIAotc3RydWN0IHBjaV9kZXZpY2VfaWQgdDFfcGNpX3RibFtdID0geworREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodDFfcGNpX3RibCkgPSB7CiAJQ0hfREVWSUNFKDgsIDAsIENIX0JSRF9UMTEwXzFDVSksCiAJQ0hfREVWSUNFKDgsIDEsIENIX0JSRF9UMTEwXzFDVSksCiAJQ0hfREVWSUNFKDcsIDAsIENIX0JSRF9OMTEwXzFGKSwKQEAgLTU4MSw3ICs1ODEsNyBAQAogCX0gd2hpbGUgKCEodmFsICYgRl9WUERfT1BfRkxBRykgJiYgLS1pKTsKIAogCWlmICghKHZhbCAmIEZfVlBEX09QX0ZMQUcpKSB7Ci0JCUNIX0VSUigiJXM6IHJlYWRpbmcgRUVQUk9NIGFkZHJlc3MgMHgleCBmYWlsZWRcbiIsCisJCXByX2VycigiJXM6IHJlYWRpbmcgRUVQUk9NIGFkZHJlc3MgMHgleCBmYWlsZWRcbiIsCiAJCSAgICAgICBhZGFwdGVyLT5uYW1lLCBhZGRyKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtNzM0LDggKzczNCw5IEBACiAJCWJyZWFrOwogCWNhc2UgQ0hCVF9CT0FSRF84MDAwOgogCWNhc2UgQ0hCVF9CT0FSRF9DSFQxMTA6Ci0JCUNIX0RCRyhhZGFwdGVyLCBJTlRSLCAiRXh0ZXJuYWwgaW50ZXJydXB0IGNhdXNlIDB4JXhcbiIsCi0JCSAgICAgICBjYXVzZSk7CisJCWlmIChuZXRpZl9tc2dfaW50cihhZGFwdGVyKSkKKwkJCWRldl9kYmcoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkiRXh0ZXJuYWwgaW50ZXJydXB0IGNhdXNlIDB4JXhcbiIsIGNhdXNlKTsKIAkJaWYgKGNhdXNlICYgRUxNRVIwX0dQX0JJVDEpIHsgICAgICAgIC8qIFBNQzMzOTMgSU5UQiAqLwogCQkJc3RydWN0IGNtYWMgKm1hYyA9IGFkYXB0ZXItPnBvcnRbMF0ubWFjOwogCkBAIC03NDYsOCArNzQ3LDkgQEAKIAogCQkJdDFfdHBpX3JlYWQoYWRhcHRlciwKIAkJCQkJQV9FTE1FUjBfR1BJX1NUQVQsICZtb2RfZGV0ZWN0KTsKLQkJCUNIX01TRyhhZGFwdGVyLCBJTkZPLCBMSU5LLCAiWFBBSyAlc1xuIiwKLQkJCSAgICAgICBtb2RfZGV0ZWN0ID8gInJlbW92ZWQiIDogImluc2VydGVkIik7CisJCQlpZiAobmV0aWZfbXNnX2xpbmsoYWRhcHRlcikpCisJCQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIlhQQUsgJXNcbiIsCisJCQkJCSBtb2RfZGV0ZWN0ID8gInJlbW92ZWQiIDogImluc2VydGVkIik7CiAJCX0KIAkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX0NIRUxTSU9fVDFfQ09VR0FSCkBAIC0xMDg0LDcgKzEwODYsNyBAQAogCiAjaWZkZWYgQ09ORklHX0NIRUxTSU9fVDFfQ09VR0FSCiAJaWYgKGJpLT5jbG9ja19jc3BpICYmICEoYWRhcHRlci0+Y3NwaSA9IHQxX2NzcGlfY3JlYXRlKGFkYXB0ZXIpKSkgewotCQlDSF9FUlIoIiVzOiBDU1BJIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKKwkJcHJfZXJyKCIlczogQ1NQSSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsCiAJCSAgICAgICBhZGFwdGVyLT5uYW1lKTsKIAkJZ290byBlcnJvcjsKIAl9CkBAIC0xMTA1LDIwICsxMTA3LDIwIEBACiAKIAlhZGFwdGVyLT5zZ2UgPSB0MV9zZ2VfY3JlYXRlKGFkYXB0ZXIsICZhZGFwdGVyLT5wYXJhbXMuc2dlKTsKIAlpZiAoIWFkYXB0ZXItPnNnZSkgewotCQlDSF9FUlIoIiVzOiBTR0UgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLAorCQlwcl9lcnIoIiVzOiBTR0UgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLAogCQkgICAgICAgYWRhcHRlci0+bmFtZSk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCiAJaWYgKGJpLT5lc3BpX25wb3J0cyAmJiAhKGFkYXB0ZXItPmVzcGkgPSB0MV9lc3BpX2NyZWF0ZShhZGFwdGVyKSkpIHsKLQkJQ0hfRVJSKCIlczogRVNQSSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsCisJCXByX2VycigiJXM6IEVTUEkgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLAogCQkgICAgICAgYWRhcHRlci0+bmFtZSk7CiAJCWdvdG8gZXJyb3I7CiAJfQogCiAJYWRhcHRlci0+dHAgPSB0MV90cF9jcmVhdGUoYWRhcHRlciwgJmFkYXB0ZXItPnBhcmFtcy50cCk7CiAJaWYgKCFhZGFwdGVyLT50cCkgewotCQlDSF9FUlIoIiVzOiBUUCBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIsCisJCXByX2VycigiJXM6IFRQIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKIAkJICAgICAgIGFkYXB0ZXItPm5hbWUpOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTExMzgsMTQgKzExNDAsMTQgQEAKIAkJYWRhcHRlci0+cG9ydFtpXS5waHkgPSBiaS0+Z3BoeS0+Y3JlYXRlKGFkYXB0ZXItPnBvcnRbaV0uZGV2LAogCQkJCQkJCXBoeV9hZGRyLCBiaS0+bWRpb19vcHMpOwogCQlpZiAoIWFkYXB0ZXItPnBvcnRbaV0ucGh5KSB7Ci0JCQlDSF9FUlIoIiVzOiBQSFkgJWQgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLAorCQkJcHJfZXJyKCIlczogUEhZICVkIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKIAkJCSAgICAgICBhZGFwdGVyLT5uYW1lLCBpKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KIAogCQlhZGFwdGVyLT5wb3J0W2ldLm1hYyA9IG1hYyA9IGJpLT5nbWFjLT5jcmVhdGUoYWRhcHRlciwgaSk7CiAJCWlmICghbWFjKSB7Ci0JCQlDSF9FUlIoIiVzOiBNQUMgJWQgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLAorCQkJcHJfZXJyKCIlczogTUFDICVkIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwKIAkJCSAgICAgICBhZGFwdGVyLT5uYW1lLCBpKTsKIAkJCWdvdG8gZXJyb3I7CiAJCX0KQEAgLTExNTcsNyArMTE1OSw3IEBACiAJCWlmICghdDFfaXNfYXNpYyhhZGFwdGVyKSB8fCBiaS0+Y2hpcF9tYWMgPT0gQ0hCVF9NQUNfRFVNTVkpCiAJCQltYWMtPm9wcy0+bWFjYWRkcmVzc19nZXQobWFjLCBod19hZGRyKTsKIAkJZWxzZSBpZiAodnBkX21hY2FkZHJlc3NfZ2V0KGFkYXB0ZXIsIGksIGh3X2FkZHIpKSB7Ci0JCQlDSF9FUlIoIiVzOiBjb3VsZCBub3QgcmVhZCBNQUMgYWRkcmVzcyBmcm9tIFZQRCBST01cbiIsCisJCQlwcl9lcnIoIiVzOiBjb3VsZCBub3QgcmVhZCBNQUMgYWRkcmVzcyBmcm9tIFZQRCBST01cbiIsCiAJCQkgICAgICAgYWRhcHRlci0+cG9ydFtpXS5kZXYtPm5hbWUpOwogCQkJZ290byBlcnJvcjsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY2hlbHNpby92c2M3MzI2LmMgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3ZzYzczMjYuYwppbmRleCA5OWI1MWY2Li5jODQ0MTExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jaGVsc2lvL3ZzYzczMjYuYworKysgYi9kcml2ZXJzL25ldC9jaGVsc2lvL3ZzYzczMjYuYwpAQCAtNDgsMTQgKzQ4LDE0IEBACiAJCWkrKzsKIAl9IHdoaWxlICgoKHN0YXR1cyAmIDEpID09IDApICYmIChpIDwgNTApKTsKIAlpZiAoaSA9PSA1MCkKLQkJQ0hfRVJSKCJJbnZhbGlkIHRwaSByZWFkIGZyb20gTUFDLCBicmVha2luZyBsb29wLlxuIik7CisJCXByX2VycigiSW52YWxpZCB0cGkgcmVhZCBmcm9tIE1BQywgYnJlYWtpbmcgbG9vcC5cbiIpOwogCiAJdDFfdHBpX3JlYWQoYWRhcHRlciwgKFJFR19MT0NBTF9EQVRBIDw8IDIpICsgNCwgJnZsbyk7CiAJdDFfdHBpX3JlYWQoYWRhcHRlciwgUkVHX0xPQ0FMX0RBVEEgPDwgMiwgJnZoaSk7CiAKIAkqdmFsID0gKHZoaSA8PCAxNikgfCB2bG87CiAKLQkvKiBDSF9FUlIoInJkOiBibG9jazogMHgleCAgc3VibG9jazogMHgleCAgcmVnOiAweCV4ICBkYXRhOiAweCV4XG4iLAorCS8qIHByX2VycigicmQ6IGJsb2NrOiAweCV4ICBzdWJsb2NrOiAweCV4ICByZWc6IDB4JXggIGRhdGE6IDB4JXhcbiIsCiAJCSgoYWRkciYweGUwMDApPj4xMyksICgoYWRkciYweDFlMDApPj45KSwKIAkJKChhZGRyJjB4MDFmZSk+PjEpLCAqdmFsKTsgKi8KIAlzcGluX3VubG9ja19iaCgmYWRhcHRlci0+bWFjX2xvY2spOwpAQCAtNjYsNyArNjYsNyBAQAogCXNwaW5fbG9ja19iaCgmYWRhcHRlci0+bWFjX2xvY2spOwogCXQxX3RwaV93cml0ZShhZGFwdGVyLCAoYWRkciA8PCAyKSArIDQsIGRhdGEgJiAweEZGRkYpOwogCXQxX3RwaV93cml0ZShhZGFwdGVyLCBhZGRyIDw8IDIsIChkYXRhID4+IDE2KSAmIDB4RkZGRik7Ci0JLyogQ0hfRVJSKCJ3cjogYmxvY2s6IDB4JXggIHN1YmxvY2s6IDB4JXggIHJlZzogMHgleCAgZGF0YTogMHgleFxuIiwKKwkvKiBwcl9lcnIoIndyOiBibG9jazogMHgleCAgc3VibG9jazogMHgleCAgcmVnOiAweCV4ICBkYXRhOiAweCV4XG4iLAogCQkoKGFkZHImMHhlMDAwKT4+MTMpLCAoKGFkZHImMHgxZTAwKT4+OSksCiAJCSgoYWRkciYweDAxZmUpPj4xKSwgZGF0YSk7ICovCiAJc3Bpbl91bmxvY2tfYmgoJmFkYXB0ZXItPm1hY19sb2NrKTsKQEAgLTIyNSw3ICsyMjUsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgewogCQlpZiAoaWJbaV0uYWRkciA9PSBJTklUQkxPQ0tfU0xFRVApIHsKIAkJCXVkZWxheSggaWJbaV0uZGF0YSApOwotCQkJQ0hfRVJSKCJzbGVlcCAlZCB1c1xuIixpYltpXS5kYXRhKTsKKwkJCXByX2Vycigic2xlZXAgJWQgdXNcbiIsaWJbaV0uZGF0YSk7CiAJCX0gZWxzZQogCQkJdnNjX3dyaXRlKCBhZGFwdGVyLCBpYltpXS5hZGRyLCBpYltpXS5kYXRhICk7CiAJfQpAQCAtMjQxLDcgKzI0MSw3IEBACiAJICAgIChhZGRyZXNzICE9IDB4MikgJiYKIAkgICAgKGFkZHJlc3MgIT0gMHhkKSAmJgogCSAgICAoYWRkcmVzcyAhPSAweGUpKQotCQkJQ0hfRVJSKCJObyBiaXN0IGFkZHJlc3M6IDB4JXhcbiIsIGFkZHJlc3MpOworCQkJcHJfZXJyKCJObyBiaXN0IGFkZHJlc3M6IDB4JXhcbiIsIGFkZHJlc3MpOwogCiAJZGF0YSA9ICgoMHgwMCA8PCAyNCkgfCAoKGFkZHJlc3MgJiAweGZmKSA8PCAxNikgfCAoMHgwMCA8PCA4KSB8CiAJCSgobW9kdWxlaWQgJiAweGZmKSA8PCAwKSk7CkBAIC0yNTEsOSArMjUxLDkgQEAKIAogCXZzY19yZWFkKGFkYXB0ZXIsIFJFR19SQU1fQklTVF9SRVNVTFQsICZyZXN1bHQpOwogCWlmICgocmVzdWx0ICYgKDEgPDwgOSkpICE9IDB4MCkKLQkJQ0hfRVJSKCJTdGlsbCBpbiBiaXN0IHJlYWQ6IDB4JXhcbiIsIHJlc3VsdCk7CisJCXByX2VycigiU3RpbGwgaW4gYmlzdCByZWFkOiAweCV4XG4iLCByZXN1bHQpOwogCWVsc2UgaWYgKChyZXN1bHQgJiAoMSA8PCA4KSkgIT0gMHgwKQotCQlDSF9FUlIoImJpc3QgcmVhZCBlcnJvcjogMHgleFxuIiwgcmVzdWx0KTsKKwkJcHJfZXJyKCJiaXN0IHJlYWQgZXJyb3I6IDB4JXhcbiIsIHJlc3VsdCk7CiAKIAlyZXR1cm4gKHJlc3VsdCAmIDB4ZmYpOwogfQpAQCAtMjY4LDEwICsyNjgsMTAgQEAKIAkgICAgKGFkZHJlc3MgIT0gMHgyKSAmJgogCSAgICAoYWRkcmVzcyAhPSAweGQpICYmCiAJICAgIChhZGRyZXNzICE9IDB4ZSkpCi0JCQlDSF9FUlIoIk5vIGJpc3QgYWRkcmVzczogMHgleFxuIiwgYWRkcmVzcyk7CisJCQlwcl9lcnIoIk5vIGJpc3QgYWRkcmVzczogMHgleFxuIiwgYWRkcmVzcyk7CiAKIAlpZiAodmFsdWUgPiAyNTUpCi0JCUNIX0VSUigiU3VzcGljaW91cyB3cml0ZSBvdXQgb2YgcmFuZ2UgdmFsdWU6IDB4JXhcbiIsIHZhbHVlKTsKKwkJcHJfZXJyKCJTdXNwaWNpb3VzIHdyaXRlIG91dCBvZiByYW5nZSB2YWx1ZTogMHgleFxuIiwgdmFsdWUpOwogCiAJZGF0YSA9ICgoMHgwMSA8PCAyNCkgfCAoKGFkZHJlc3MgJiAweGZmKSA8PCAxNikgfCAodmFsdWUgPDwgOCkgfAogCQkoKG1vZHVsZWlkICYgMHhmZikgPDwgMCkpOwpAQCAtMjgxLDkgKzI4MSw5IEBACiAKIAl2c2NfcmVhZChhZGFwdGVyLCBSRUdfUkFNX0JJU1RfQ01ELCAmcmVzdWx0KTsKIAlpZiAoKHJlc3VsdCAmICgxIDw8IDI3KSkgIT0gMHgwKQotCQlDSF9FUlIoIlN0aWxsIGluIGJpc3Qgd3JpdGU6IDB4JXhcbiIsIHJlc3VsdCk7CisJCXByX2VycigiU3RpbGwgaW4gYmlzdCB3cml0ZTogMHgleFxuIiwgcmVzdWx0KTsKIAllbHNlIGlmICgocmVzdWx0ICYgKDEgPDwgMjYpKSAhPSAweDApCi0JCUNIX0VSUigiYmlzdCB3cml0ZSBlcnJvcjogMHgleFxuIiwgcmVzdWx0KTsKKwkJcHJfZXJyKCJiaXN0IHdyaXRlIGVycm9yOiAweCV4XG4iLCByZXN1bHQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMDYsNyArMzA2LDcgQEAKIAljb2x1bW4gPSAoKGJpc3RfcmQoYWRhcHRlcixtb2R1bGVpZCwgMHgwZSk8PDgpICsKIAkJCShiaXN0X3JkKGFkYXB0ZXIsbW9kdWxlaWQsIDB4MGQpKSk7CiAJaWYgKChyZXN1bHQgJiAzKSAhPSAweDMpCi0JCUNIX0VSUigiUmVzdWx0OiAweCV4ICBCSVNUIGVycm9yIGluIHJhbSAlZCwgY29sdW1uOiAweCUwNHhcbiIsCisJCXByX2VycigiUmVzdWx0OiAweCV4ICBCSVNUIGVycm9yIGluIHJhbSAlZCwgY29sdW1uOiAweCUwNHhcbiIsCiAJCQlyZXN1bHQsIG1vZHVsZWlkLCBjb2x1bW4pOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY25pYy5jIGIvZHJpdmVycy9uZXQvY25pYy5jCmluZGV4IDQzMzJiM2EuLjk3ODE5NDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NuaWMuYworKysgYi9kcml2ZXJzL25ldC9jbmljLmMKQEAgLTEsNiArMSw2IEBACiAvKiBjbmljLmM6IEJyb2FkY29tIENOSUMgY29yZSBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTEwLDYgKzEwLDggQEAKICAqIE1vZGlmaWVkIGFuZCBtYWludGFpbmVkIGJ5OiBNaWNoYWVsIENoYW4gPG1jaGFuQGJyb2FkY29tLmNvbT4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNDcsNyArNDksNiBAQAogI2luY2x1ZGUgImNuaWNfZGVmcy5oIgogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJImNuaWMiCi0jZGVmaW5lIFBGWCBEUlZfTU9EVUxFX05BTUUJIjogIgogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CiAJIkJyb2FkY29tIE5ldFh0cmVtZSBJSSBDTklDIERyaXZlciAiIERSVl9NT0RVTEVfTkFNRSAiIHYiIENOSUNfTU9EVUxFX1ZFUlNJT04gIiAoIiBDTklDX01PRFVMRV9SRUxEQVRFICIpXG4iOwpAQCAtMzI2LDYgKzMyNywxMiBAQAogCQlpZiAobDVfY2lkID49IE1BWF9DTV9TS19UQkxfU1opCiAJCQlicmVhazsKIAorCQlyY3VfcmVhZF9sb2NrKCk7CisJCWlmICghcmN1X2RlcmVmZXJlbmNlKGNwLT51bHBfb3BzW0NOSUNfVUxQX0w0XSkpIHsKKwkJCXJjID0gLUVOT0RFVjsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJYnJlYWs7CisJCX0KIAkJY3NrID0gJmNwLT5jc2tfdGJsW2w1X2NpZF07CiAJCWNza19ob2xkKGNzayk7CiAJCWlmIChjbmljX2luX3VzZShjc2spKSB7CkBAIC0zNDAsNiArMzQ3LDcgQEAKIAkJCQljbmljX2NtX3NldF9wZyhjc2spOwogCQl9CiAJCWNza19wdXQoY3NrKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJjID0gMDsKIAl9CiAJfQpAQCAtNDA5LDE0ICs0MTcsMTMgQEAKIAlzdHJ1Y3QgY25pY19kZXYgKmRldjsKIAogCWlmICh1bHBfdHlwZSA8IDAgfHwgdWxwX3R5cGUgPj0gTUFYX0NOSUNfVUxQX1RZUEUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY25pY19yZWdpc3Rlcl9kcml2ZXI6IEJhZCB0eXBlICVkXG4iLAotCQkgICAgICAgdWxwX3R5cGUpOworCQlwcl9lcnIoIiVzOiBCYWQgdHlwZSAlZFxuIiwgX19mdW5jX18sIHVscF90eXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCW11dGV4X2xvY2soJmNuaWNfbG9jayk7CiAJaWYgKGNuaWNfdWxwX3RibFt1bHBfdHlwZV0pIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY25pY19yZWdpc3Rlcl9kcml2ZXI6IFR5cGUgJWQgaGFzIGFscmVhZHkgIgotCQkJCSAgICAiYmVlbiByZWdpc3RlcmVkXG4iLCB1bHBfdHlwZSk7CisJCXByX2VycigiJXM6IFR5cGUgJWQgaGFzIGFscmVhZHkgYmVlbiByZWdpc3RlcmVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIHVscF90eXBlKTsKIAkJbXV0ZXhfdW5sb2NrKCZjbmljX2xvY2spOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KQEAgLTQ1NSwxNSArNDYyLDE0IEBACiAJaW50IGkgPSAwOwogCiAJaWYgKHVscF90eXBlIDwgMCB8fCB1bHBfdHlwZSA+PSBNQVhfQ05JQ19VTFBfVFlQRSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjbmljX3VucmVnaXN0ZXJfZHJpdmVyOiBCYWQgdHlwZSAlZFxuIiwKLQkJICAgICAgIHVscF90eXBlKTsKKwkJcHJfZXJyKCIlczogQmFkIHR5cGUgJWRcbiIsIF9fZnVuY19fLCB1bHBfdHlwZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAltdXRleF9sb2NrKCZjbmljX2xvY2spOwogCXVscF9vcHMgPSBjbmljX3VscF90YmxbdWxwX3R5cGVdOwogCWlmICghdWxwX29wcykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjbmljX3VucmVnaXN0ZXJfZHJpdmVyOiBUeXBlICVkIGhhcyBub3QgIgotCQkJCSAgICAiYmVlbiByZWdpc3RlcmVkXG4iLCB1bHBfdHlwZSk7CisJCXByX2VycigiJXM6IFR5cGUgJWQgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgdWxwX3R5cGUpOwogCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCXJlYWRfbG9jaygmY25pY19kZXZfbG9jayk7CkBAIC00NzEsOCArNDc3LDggQEAKIAkJc3RydWN0IGNuaWNfbG9jYWwgKmNwID0gZGV2LT5jbmljX3ByaXY7CiAKIAkJaWYgKHJjdV9kZXJlZmVyZW5jZShjcC0+dWxwX29wc1t1bHBfdHlwZV0pKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJjbmljX3VucmVnaXN0ZXJfZHJpdmVyOiBUeXBlICVkICIKLQkJCSAgICAgICAic3RpbGwgaGFzIGRldmljZXMgcmVnaXN0ZXJlZFxuIiwgdWxwX3R5cGUpOworCQkJcHJfZXJyKCIlczogVHlwZSAlZCBzdGlsbCBoYXMgZGV2aWNlcyByZWdpc3RlcmVkXG4iLAorCQkJICAgICAgIF9fZnVuY19fLCB1bHBfdHlwZSk7CiAJCQlyZWFkX3VubG9jaygmY25pY19kZXZfbG9jayk7CiAJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KQEAgLTQ5Miw4ICs0OTgsNyBAQAogCX0KIAogCWlmIChhdG9taWNfcmVhZCgmdWxwX29wcy0+cmVmX2NvdW50KSAhPSAwKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IEZhaWxlZCB3YWl0aW5nIGZvciByZWYgY291bnQgdG8gZ28iCi0JCQkJCSIgdG8gemVyby5cbiIsIGRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXRkZXYsICJGYWlsZWQgd2FpdGluZyBmb3IgcmVmIGNvdW50IHRvIGdvIHRvIHplcm9cbiIpOwogCXJldHVybiAwOwogCiBvdXRfdW5sb2NrOgpAQCAtNTExLDIwICs1MTYsMTkgQEAKIAlzdHJ1Y3QgY25pY191bHBfb3BzICp1bHBfb3BzOwogCiAJaWYgKHVscF90eXBlIDwgMCB8fCB1bHBfdHlwZSA+PSBNQVhfQ05JQ19VTFBfVFlQRSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJjbmljX3JlZ2lzdGVyX2RldmljZTogQmFkIHR5cGUgJWRcbiIsCi0JCSAgICAgICB1bHBfdHlwZSk7CisJCXByX2VycigiJXM6IEJhZCB0eXBlICVkXG4iLCBfX2Z1bmNfXywgdWxwX3R5cGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJbXV0ZXhfbG9jaygmY25pY19sb2NrKTsKIAlpZiAoY25pY191bHBfdGJsW3VscF90eXBlXSA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNuaWNfcmVnaXN0ZXJfZGV2aWNlOiBEcml2ZXIgd2l0aCB0eXBlICVkICIKLQkJCQkgICAgImhhcyBub3QgYmVlbiByZWdpc3RlcmVkXG4iLCB1bHBfdHlwZSk7CisJCXByX2VycigiJXM6IERyaXZlciB3aXRoIHR5cGUgJWQgaGFzIG5vdCBiZWVuIHJlZ2lzdGVyZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgdWxwX3R5cGUpOwogCQltdXRleF91bmxvY2soJmNuaWNfbG9jayk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAlpZiAocmN1X2RlcmVmZXJlbmNlKGNwLT51bHBfb3BzW3VscF90eXBlXSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY25pY19yZWdpc3Rlcl9kZXZpY2U6IFR5cGUgJWQgaGFzIGFscmVhZHkgIgotCQkgICAgICAgImJlZW4gcmVnaXN0ZXJlZCB0byB0aGlzIGRldmljZVxuIiwgdWxwX3R5cGUpOworCQlwcl9lcnIoIiVzOiBUeXBlICVkIGhhcyBhbHJlYWR5IGJlZW4gcmVnaXN0ZXJlZCB0byB0aGlzIGRldmljZVxuIiwKKwkJICAgICAgIF9fZnVuY19fLCB1bHBfdHlwZSk7CiAJCW11dGV4X3VubG9jaygmY25pY19sb2NrKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC01NTIsOCArNTU2LDcgQEAKIAlpbnQgaSA9IDA7CiAKIAlpZiAodWxwX3R5cGUgPCAwIHx8IHVscF90eXBlID49IE1BWF9DTklDX1VMUF9UWVBFKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggImNuaWNfdW5yZWdpc3Rlcl9kZXZpY2U6IEJhZCB0eXBlICVkXG4iLAotCQkgICAgICAgdWxwX3R5cGUpOworCQlwcl9lcnIoIiVzOiBCYWQgdHlwZSAlZFxuIiwgX19mdW5jX18sIHVscF90eXBlKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCW11dGV4X2xvY2soJmNuaWNfbG9jayk7CkBAIC01NjEsOCArNTY0LDggQEAKIAkJcmN1X2Fzc2lnbl9wb2ludGVyKGNwLT51bHBfb3BzW3VscF90eXBlXSwgTlVMTCk7CiAJCWNuaWNfcHV0KGRldik7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiY25pY191bnJlZ2lzdGVyX2RldmljZTogZGV2aWNlIG5vdCAiCi0JCSAgICAgICAicmVnaXN0ZXJlZCB0byB0aGlzIHVscCB0eXBlICVkXG4iLCB1bHBfdHlwZSk7CisJCXByX2VycigiJXM6IGRldmljZSBub3QgcmVnaXN0ZXJlZCB0byB0aGlzIHVscCB0eXBlICVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIHVscF90eXBlKTsKIAkJbXV0ZXhfdW5sb2NrKCZjbmljX2xvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC01NzYsOCArNTc5LDcgQEAKIAkJaSsrOwogCX0KIAlpZiAodGVzdF9iaXQoVUxQX0ZfQ0FMTF9QRU5ESU5HLCAmY3AtPnVscF9mbGFnc1t1bHBfdHlwZV0pKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IEZhaWxlZCB3YWl0aW5nIGZvciBVTFAgdXAgY2FsbCIKLQkJCQkJIiB0byBjb21wbGV0ZS5cbiIsIGRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXRkZXYsICJGYWlsZWQgd2FpdGluZyBmb3IgVUxQIHVwIGNhbGwgdG8gY29tcGxldGVcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04OTgsNyArOTAwLDggQEAKIAl1aW5mby0+bWVtWzBdLm1lbXR5cGUgPSBVSU9fTUVNX1BIWVM7CiAKIAlpZiAodGVzdF9iaXQoQ05JQ19GX0JOWDJfQ0xBU1MsICZkZXYtPmZsYWdzKSkgewotCQl1aW5mby0+bWVtWzFdLmFkZHIgPSAodW5zaWduZWQgbG9uZykgY3AtPnN0YXR1c19ibGsgJiBQQUdFX01BU0s7CisJCXVpbmZvLT5tZW1bMV0uYWRkciA9ICh1bnNpZ25lZCBsb25nKSBjcC0+c3RhdHVzX2Jsay5nZW4gJgorCQkJUEFHRV9NQVNLOwogCQlpZiAoY3AtPmV0aGRldi0+ZHJ2X3N0YXRlICYgQ05JQ19EUlZfU1RBVEVfVVNJTkdfTVNJWCkKIAkJCXVpbmZvLT5tZW1bMV0uc2l6ZSA9IEJOWDJfU0JMS19NU0lYX0FMSUdOX1NJWkUgKiA5OwogCQllbHNlCkBAIC0xMTAxLDEwICsxMTA0LDkgQEAKIAlpZiAocmV0KQogCQlnb3RvIGVycm9yOwogCi0JY3AtPmJueDJ4X3N0YXR1c19ibGsgPSBjcC0+c3RhdHVzX2JsazsKIAljcC0+Ym54MnhfZGVmX3N0YXR1c19ibGsgPSBjcC0+ZXRoZGV2LT5pcnFfYXJyWzFdLnN0YXR1c19ibGs7CiAKLQltZW1zZXQoY3AtPmJueDJ4X3N0YXR1c19ibGssIDAsIHNpemVvZihzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2spKTsKKwltZW1zZXQoY3AtPnN0YXR1c19ibGsuYm54MngsIDAsIHNpemVvZigqY3AtPnN0YXR1c19ibGsuYm54MngpKTsKIAogCWNwLT5sMl9yeF9yaW5nX3NpemUgPSAxNTsKIApAQCAtMTg2NSw4ICsxODY3LDcgQEAKIAl9CiAKIAlpZiAoc2l6ZW9mKCpjb25uX2J1ZikgPiBDTklDX0tXUTE2X0RBVEFfU0laRSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogY29ubl9idWYgc2l6ZSB0b28gYmlnXG4iLAotCQkJICAgICAgIGRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYtPm5ldGRldiwgImNvbm5fYnVmIHNpemUgdG9vIGJpZ1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAljb25uX2J1ZiA9IGNuaWNfZ2V0X2t3cWVfMTZfZGF0YShjcCwgbDVfY2lkLCAmbDVfZGF0YSk7CkBAIC0yMDI2LDEzICsyMDI3LDEzIEBACiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXJldCA9IDA7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogVW5rbm93biB0eXBlIG9mIEtXUUUoMHgleClcbiIsCi0JCQkgICAgICAgZGV2LT5uZXRkZXYtPm5hbWUsIG9wY29kZSk7CisJCQluZXRkZXZfZXJyKGRldi0+bmV0ZGV2LCAiVW5rbm93biB0eXBlIG9mIEtXUUUoMHgleClcbiIsCisJCQkJICAgb3Bjb2RlKTsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChyZXQgPCAwKQotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEtXUUUoMHgleCkgZmFpbGVkXG4iLAotCQkJICAgICAgIGRldi0+bmV0ZGV2LT5uYW1lLCBvcGNvZGUpOworCQkJbmV0ZGV2X2VycihkZXYtPm5ldGRldiwgIktXUUUoMHgleCkgZmFpbGVkXG4iLAorCQkJCSAgIG9wY29kZSk7CiAJCWkgKz0gd29yazsKIAl9CiAJcmV0dXJuIDA7CkBAIC0yMDc0LDggKzIwNzUsOCBAQAogCQllbHNlIGlmIChrY3FlX2xheWVyID09IEtDUUVfRkxBR1NfTEFZRVJfTUFTS19MMikKIAkJCWdvdG8gZW5kOwogCQllbHNlIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBVbmtub3duIHR5cGUgb2YgS0NRRSgweCV4KVxuIiwKLQkJCSAgICAgICBkZXYtPm5ldGRldi0+bmFtZSwga2NxZV9vcF9mbGFnKTsKKwkJCW5ldGRldl9lcnIoZGV2LT5uZXRkZXYsICJVbmtub3duIHR5cGUgb2YgS0NRRSgweCV4KVxuIiwKKwkJCQkgICBrY3FlX29wX2ZsYWcpOwogCQkJZ290byBlbmQ7CiAJCX0KIApAQCAtMjIwNCw3ICsyMjA1LDcgQEAKIHsKIAlzdHJ1Y3QgY25pY19kZXYgKmRldiA9IChzdHJ1Y3QgY25pY19kZXYgKikgZGF0YTsKIAlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKLQlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrX21zaXggKnN0YXR1c19ibGsgPSBjcC0+Ym54Ml9zdGF0dXNfYmxrOworCXN0cnVjdCBzdGF0dXNfYmxvY2tfbXNpeCAqc3RhdHVzX2JsayA9IGNwLT5zdGF0dXNfYmxrLmJueDI7CiAJdTMyIHN0YXR1c19pZHggPSBzdGF0dXNfYmxrLT5zdGF0dXNfaWR4OwogCXUxNiBod19wcm9kLCBzd19wcm9kOwogCWludCBrY3FlX2NudDsKQEAgLTIyNTAsNyArMjI1MSw3IEBACiAJaWYgKGNwLT5hY2tfaW50KQogCQljcC0+YWNrX2ludChkZXYpOwogCi0JcHJlZmV0Y2goY3AtPnN0YXR1c19ibGspOworCXByZWZldGNoKGNwLT5zdGF0dXNfYmxrLmdlbik7CiAJcHJlZmV0Y2goJmNwLT5rY3FbS0NRX1BHKHByb2QpXVtLQ1FfSURYKHByb2QpXSk7CiAKIAlpZiAobGlrZWx5KHRlc3RfYml0KENOSUNfRl9DTklDX1VQLCAmZGV2LT5mbGFncykpKQpAQCAtMjI5MSw3ICsyMjkyLDcgQEAKIAlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKIAl1MTYgaHdfcHJvZCwgc3dfcHJvZDsKIAlzdHJ1Y3QgY3N0b3JtX3N0YXR1c19ibG9ja19jICpzYmxrID0KLQkJJmNwLT5ibngyeF9zdGF0dXNfYmxrLT5jX3N0YXR1c19ibG9jazsKKwkJJmNwLT5zdGF0dXNfYmxrLmJueDJ4LT5jX3N0YXR1c19ibG9jazsKIAl1MzIgc3RhdHVzX2lkeCA9IHNibGstPnN0YXR1c19ibG9ja19pbmRleDsKIAlpbnQga2NxZV9jbnQ7CiAKQEAgLTIzMzMsNyArMjMzNCw3IEBACiAJc3RydWN0IGNuaWNfbG9jYWwgKmNwID0gZGV2LT5jbmljX3ByaXY7CiAJdTE2IHByb2QgPSBjcC0+a2NxX3Byb2RfaWR4ICYgTUFYX0tDUV9JRFg7CiAKLQlwcmVmZXRjaChjcC0+c3RhdHVzX2Jsayk7CisJcHJlZmV0Y2goY3AtPnN0YXR1c19ibGsuYm54MngpOwogCXByZWZldGNoKCZjcC0+a2NxW0tDUV9QRyhwcm9kKV1bS0NRX0lEWChwcm9kKV0pOwogCiAJaWYgKGxpa2VseSh0ZXN0X2JpdChDTklDX0ZfQ05JQ19VUCwgJmRldi0+ZmxhZ3MpKSkKQEAgLTI1MTMsNyArMjUxNCw3IEBACiAJbDRrd3FlLT5zYTUgPSBkZXYtPm1hY19hZGRyWzVdOwogCiAJbDRrd3FlLT5ldHlwZSA9IEVUSF9QX0lQOwotCWw0a3dxZS0+aXBpZF9jb3VudCA9IERFRl9JUElEX0NPVU5UOworCWw0a3dxZS0+aXBpZF9zdGFydCA9IERFRl9JUElEX1NUQVJUOwogCWw0a3dxZS0+aG9zdF9vcGFxdWUgPSBjc2stPmw1X2NpZDsKIAogCWlmIChjc2stPnZsYW5faWQpIHsKQEAgLTI4NTksOCArMjg2MCw4IEBACiB7CiAJc3RydWN0IGNuaWNfZGV2ICpkZXYgPSBjc2stPmRldjsKIAlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKLQlpbnQgaXNfdjYsIGVyciwgcmMgPSAtRU5FVFVOUkVBQ0g7Ci0Jc3RydWN0IGRzdF9lbnRyeSAqZHN0OworCWludCBpc192NiwgcmMgPSAwOworCXN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IE5VTEw7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnJlYWxkZXY7CiAJdTMyIGxvY2FsX3BvcnQ7CiAKQEAgLTI4NzYsMzkgKzI4NzcsMzEgQEAKIAljbGVhcl9iaXQoU0tfRl9JUFY2LCAmY3NrLT5mbGFncyk7CiAKIAlpZiAoaXNfdjYpIHsKLSNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCAoZGVmaW5lZChDT05GSUdfSVBWNl9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKIAkJc2V0X2JpdChTS19GX0lQVjYsICZjc2stPmZsYWdzKTsKLQkJZXJyID0gY25pY19nZXRfdjZfcm91dGUoJnNhZGRyLT5yZW1vdGUudjYsICZkc3QpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQlpZiAoIWRzdCB8fCBkc3QtPmVycm9yIHx8ICFkc3QtPmRldikKLQkJCWdvdG8gZXJyX291dDsKKwkJY25pY19nZXRfdjZfcm91dGUoJnNhZGRyLT5yZW1vdGUudjYsICZkc3QpOwogCiAJCW1lbWNweSgmY3NrLT5kc3RfaXBbMF0sICZzYWRkci0+cmVtb3RlLnY2LnNpbjZfYWRkciwKIAkJICAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKIAkJY3NrLT5kc3RfcG9ydCA9IHNhZGRyLT5yZW1vdGUudjYuc2luNl9wb3J0OwogCQlsb2NhbF9wb3J0ID0gc2FkZHItPmxvY2FsLnY2LnNpbjZfcG9ydDsKLSNlbHNlCi0JCXJldHVybiByYzsKLSNlbmRpZgogCiAJfSBlbHNlIHsKLQkJZXJyID0gY25pY19nZXRfdjRfcm91dGUoJnNhZGRyLT5yZW1vdGUudjQsICZkc3QpOwotCQlpZiAoZXJyKQotCQkJcmV0dXJuIGVycjsKLQotCQlpZiAoIWRzdCB8fCBkc3QtPmVycm9yIHx8ICFkc3QtPmRldikKLQkJCWdvdG8gZXJyX291dDsKKwkJY25pY19nZXRfdjRfcm91dGUoJnNhZGRyLT5yZW1vdGUudjQsICZkc3QpOwogCiAJCWNzay0+ZHN0X2lwWzBdID0gc2FkZHItPnJlbW90ZS52NC5zaW5fYWRkci5zX2FkZHI7CiAJCWNzay0+ZHN0X3BvcnQgPSBzYWRkci0+cmVtb3RlLnY0LnNpbl9wb3J0OwogCQlsb2NhbF9wb3J0ID0gc2FkZHItPmxvY2FsLnY0LnNpbl9wb3J0OwogCX0KIAotCWNzay0+dmxhbl9pZCA9IGNuaWNfZ2V0X3ZsYW4oZHN0LT5kZXYsICZyZWFsZGV2KTsKLQlpZiAocmVhbGRldiAhPSBkZXYtPm5ldGRldikKLQkJZ290byBlcnJfb3V0OworCWNzay0+dmxhbl9pZCA9IDA7CisJY3NrLT5tdHUgPSBkZXYtPm5ldGRldi0+bXR1OworCWlmIChkc3QgJiYgZHN0LT5kZXYpIHsKKwkJdTE2IHZsYW4gPSBjbmljX2dldF92bGFuKGRzdC0+ZGV2LCAmcmVhbGRldik7CisJCWlmIChyZWFsZGV2ID09IGRldi0+bmV0ZGV2KSB7CisJCQljc2stPnZsYW5faWQgPSB2bGFuOworCQkJY3NrLT5tdHUgPSBkc3RfbXR1KGRzdCk7CisJCX0KKwl9CiAKIAlpZiAobG9jYWxfcG9ydCA+PSBDTklDX0xPQ0FMX1BPUlRfTUlOICYmCiAJICAgIGxvY2FsX3BvcnQgPCBDTklDX0xPQ0FMX1BPUlRfTUFYKSB7CkBAIC0yOTI2LDkgKzI5MTksNiBAQAogCX0KIAljc2stPnNyY19wb3J0ID0gbG9jYWxfcG9ydDsKIAotCWNzay0+bXR1ID0gZHN0X210dShkc3QpOwotCXJjID0gMDsKLQogZXJyX291dDoKIAlkc3RfcmVsZWFzZShkc3QpOwogCXJldHVybiByYzsKQEAgLTMwNTIsNiArMzA0MiwxNCBAQAogCQljbGVhcl9iaXQoU0tfRl9PRkZMRF9TQ0hFRCwgJmNzay0+ZmxhZ3MpOwogCQlnb3RvIGRvbmU7CiAJfQorCS8qIFBvc3NpYmxlIFBHIGtjcWUgc3RhdHVzOiAgU1VDQ0VTUywgT0ZGTE9BREVEX1BHLCBvciBDVFhfQUxMT0NfRkFJTCAqLworCWlmIChrY3FlLT5zdGF0dXMgPT0gTDRfS0NRRV9DT01QTEVUSU9OX1NUQVRVU19DVFhfQUxMT0NfRkFJTCkgeworCQljbGVhcl9iaXQoU0tfRl9PRkZMRF9TQ0hFRCwgJmNzay0+ZmxhZ3MpOworCQljbmljX2NtX3VwY2FsbChjcCwgY3NrLAorCQkJICAgICAgIEw0X0tDUUVfT1BDT0RFX1ZBTFVFX0NPTk5FQ1RfQ09NUExFVEUpOworCQlnb3RvIGRvbmU7CisJfQorCiAJY3NrLT5wZ19jaWQgPSBrY3FlLT5wZ19jaWQ7CiAJc2V0X2JpdChTS19GX1BHX09GRkxEX0NPTVBMRVRFLCAmY3NrLT5mbGFncyk7CiAJY25pY19jbV9jb25uX3JlcShjc2spOwpAQCAtMzA4OSw2ICszMDg3LDEzIEBACiAJfQogCiAJc3dpdGNoIChvcGNvZGUpIHsKKwljYXNlIEw1Q01fUkFNUk9EX0NNRF9JRF9UQ1BfQ09OTkVDVDoKKwkJaWYgKGw0a2NxZS0+c3RhdHVzICE9IDApIHsKKwkJCWNsZWFyX2JpdChTS19GX09GRkxEX1NDSEVELCAmY3NrLT5mbGFncyk7CisJCQljbmljX2NtX3VwY2FsbChjcCwgY3NrLAorCQkJCSAgICAgICBMNF9LQ1FFX09QQ09ERV9WQUxVRV9DT05ORUNUX0NPTVBMRVRFKTsKKwkJfQorCQlicmVhazsKIAljYXNlIEw0X0tDUUVfT1BDT0RFX1ZBTFVFX0NPTk5FQ1RfQ09NUExFVEU6CiAJCWlmIChsNGtjcWUtPnN0YXR1cyA9PSAwKQogCQkJc2V0X2JpdChTS19GX09GRkxEX0NPTVBMRVRFLCAmY3NrLT5mbGFncyk7CkBAIC0zMDk5LDcgKzMxMDQsMTAgQEAKIAkJYnJlYWs7CiAKIAljYXNlIEw0X0tDUUVfT1BDT0RFX1ZBTFVFX1JFU0VUX1JFQ0VJVkVEOgotCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFNLX0ZfT0ZGTERfQ09NUExFVEUsICZjc2stPmZsYWdzKSkKKwkJaWYgKHRlc3RfYml0KENOSUNfRl9CTlgyX0NMQVNTLCAmZGV2LT5mbGFncykpIHsKKwkJCWNuaWNfY21fdXBjYWxsKGNwLCBjc2ssIG9wY29kZSk7CisJCQlicmVhazsKKwkJfSBlbHNlIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoU0tfRl9PRkZMRF9DT01QTEVURSwgJmNzay0+ZmxhZ3MpKQogCQkJY3NrLT5zdGF0ZSA9IG9wY29kZTsKIAkJLyogZmFsbCB0aHJvdWdoICovCiAJY2FzZSBMNF9LQ1FFX09QQ09ERV9WQUxVRV9DTE9TRV9DT01QOgpAQCAtMzE2Myw2ICszMTcxLDE2IEBACiAJCWlmICghdGVzdF9hbmRfc2V0X2JpdChTS19GX0NMT1NJTkcsICZjc2stPmZsYWdzKSkKIAkJCXJldHVybiAxOwogCX0KKwkvKiA1NzcxMCsgb25seSAgd29ya2Fyb3VuZCB0byBoYW5kbGUgdW5zb2xpY2l0ZWQgUkVTRVRfQ09NUAorCSAqIHdoaWNoIHdpbGwgYmUgdHJlYXRlZCBsaWtlIGEgUkVTRVQgUkNWRCBub3RpZmljYXRpb24KKwkgKiB3aGljaCB0cmlnZ2VycyB0aGUgY2xlYW4gdXAgcHJvY2VkdXJlCisJICovCisJZWxzZSBpZiAob3Bjb2RlID09IEw0X0tDUUVfT1BDT0RFX1ZBTFVFX1JFU0VUX0NPTVApIHsKKwkJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFNLX0ZfQ0xPU0lORywgJmNzay0+ZmxhZ3MpKSB7CisJCQljc2stPnN0YXRlID0gTDRfS0NRRV9PUENPREVfVkFMVUVfUkVTRVRfUkVDRUlWRUQ7CisJCQlyZXR1cm4gMTsKKwkJfQorCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzE3MiwxMCArMzE5MCw4IEBACiAJc3RydWN0IGNuaWNfbG9jYWwgKmNwID0gZGV2LT5jbmljX3ByaXY7CiAKIAljbGVhcl9iaXQoU0tfRl9DT05ORUNUX1NUQVJULCAmY3NrLT5mbGFncyk7Ci0JaWYgKGNuaWNfcmVhZHlfdG9fY2xvc2UoY3NrLCBvcGNvZGUpKSB7Ci0JCWNuaWNfY2xvc2VfY29ubihjc2spOwotCQljbmljX2NtX3VwY2FsbChjcCwgY3NrLCBvcGNvZGUpOwotCX0KKwljbmljX2Nsb3NlX2Nvbm4oY3NrKTsKKwljbmljX2NtX3VwY2FsbChjcCwgY3NrLCBvcGNvZGUpOwogfQogCiBzdGF0aWMgdm9pZCBjbmljX2NtX3N0b3BfYm54Ml9odyhzdHJ1Y3QgY25pY19kZXYgKmRldikKQEAgLTMzOTMsOCArMzQwOSw3IEBACiAJCUNOSUNfV1IoZGV2LCBiYXNlICsgQk5YMl9IQ19DT01fVElDS1NfT0ZGLCAoNjQgPDwgMTYpIHwgMjIwKTsKIAkJQ05JQ19XUihkZXYsIGJhc2UgKyBCTlgyX0hDX0NNRF9USUNLU19PRkYsICg2NCA8PCAxNikgfCAyMjApOwogCi0JCWNwLT5ibngyX3N0YXR1c19ibGsgPSBjcC0+c3RhdHVzX2JsazsKLQkJY3AtPmxhc3Rfc3RhdHVzX2lkeCA9IGNwLT5ibngyX3N0YXR1c19ibGstPnN0YXR1c19pZHg7CisJCWNwLT5sYXN0X3N0YXR1c19pZHggPSBjcC0+c3RhdHVzX2Jsay5ibngyLT5zdGF0dXNfaWR4OwogCQl0YXNrbGV0X2luaXQoJmNwLT5jbmljX2lycV90YXNrLCBjbmljX3NlcnZpY2VfYm54Ml9tc2l4LAogCQkJICAgICAodW5zaWduZWQgbG9uZykgZGV2KTsKIAkJZXJyID0gcmVxdWVzdF9pcnEoZXRoZGV2LT5pcnFfYXJyWzBdLnZlY3RvciwgY25pY19pcnEsIDAsCkBAIC0zNDAzLDcgKzM0MTgsNyBAQAogCQkJdGFza2xldF9kaXNhYmxlKCZjcC0+Y25pY19pcnFfdGFzayk7CiAJCQlyZXR1cm4gZXJyOwogCQl9Ci0JCXdoaWxlIChjcC0+Ym54Ml9zdGF0dXNfYmxrLT5zdGF0dXNfY29tcGxldGlvbl9wcm9kdWNlcl9pbmRleCAmJgorCQl3aGlsZSAoY3AtPnN0YXR1c19ibGsuYm54Mi0+c3RhdHVzX2NvbXBsZXRpb25fcHJvZHVjZXJfaW5kZXggJiYKIAkJICAgICAgIGkgPCAxMCkgewogCQkJQ05JQ19XUihkZXYsIEJOWDJfSENfQ09BTEVTQ0VfTk9XLAogCQkJCTEgPDwgKDExICsgc2Jsa19udW0pKTsKQEAgLTM0MTEsMTMgKzM0MjYsMTMgQEAKIAkJCWkrKzsKIAkJCWJhcnJpZXIoKTsKIAkJfQotCQlpZiAoY3AtPmJueDJfc3RhdHVzX2Jsay0+c3RhdHVzX2NvbXBsZXRpb25fcHJvZHVjZXJfaW5kZXgpIHsKKwkJaWYgKGNwLT5zdGF0dXNfYmxrLmJueDItPnN0YXR1c19jb21wbGV0aW9uX3Byb2R1Y2VyX2luZGV4KSB7CiAJCQljbmljX2ZyZWVfaXJxKGRldik7CiAJCQlnb3RvIGZhaWxlZDsKIAkJfQogCiAJfSBlbHNlIHsKLQkJc3RydWN0IHN0YXR1c19ibG9jayAqc2JsayA9IGNwLT5zdGF0dXNfYmxrOworCQlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrICpzYmxrID0gY3AtPnN0YXR1c19ibGsuZ2VuOwogCQl1MzIgaGNfY21kID0gQ05JQ19SRChkZXYsIEJOWDJfSENfQ09NTUFORCk7CiAJCWludCBpID0gMDsKIApAQCAtMzQzNSw4ICszNDUwLDcgQEAKIAlyZXR1cm4gMDsKIAogZmFpbGVkOgotCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiAiICJLQ1EgaW5kZXggbm90IHJlc2V0dGluZyB0byAwLlxuIiwKLQkgICAgICAgZGV2LT5uZXRkZXYtPm5hbWUpOworCW5ldGRldl9lcnIoZGV2LT5uZXRkZXYsICJLQ1EgaW5kZXggbm90IHJlc2V0dGluZyB0byAwXG4iKTsKIAlyZXR1cm4gLUVCVVNZOwogfQogCkBAIC0zNDc1LDcgKzM0ODksNyBAQAogCWludCBpOwogCXN0cnVjdCB0eF9iZCAqdHhiZDsKIAlkbWFfYWRkcl90IGJ1Zl9tYXA7Ci0Jc3RydWN0IHN0YXR1c19ibG9jayAqc19ibGsgPSBjcC0+c3RhdHVzX2JsazsKKwlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrICpzX2JsayA9IGNwLT5zdGF0dXNfYmxrLmdlbjsKIAogCXNiX2lkID0gY3AtPnN0YXR1c19ibGtfbnVtOwogCXR4X2NpZCA9IDIwOwpAQCAtMzQ4Myw3ICszNDk3LDcgQEAKIAljbmljX2luaXRfY29udGV4dChkZXYsIHR4X2NpZCArIDEpOwogCWNwLT50eF9jb25zX3B0ciA9ICZzX2Jsay0+c3RhdHVzX3R4X3F1aWNrX2NvbnN1bWVyX2luZGV4MjsKIAlpZiAoZXRoZGV2LT5kcnZfc3RhdGUgJiBDTklDX0RSVl9TVEFURV9VU0lOR19NU0lYKSB7Ci0JCXN0cnVjdCBzdGF0dXNfYmxvY2tfbXNpeCAqc2JsayA9IGNwLT5zdGF0dXNfYmxrOworCQlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrX21zaXggKnNibGsgPSBjcC0+c3RhdHVzX2Jsay5ibngyOwogCiAJCXR4X2NpZCA9IFRYX1RTU19DSUQgKyBzYl9pZCAtIDE7CiAJCWNuaWNfaW5pdF9jb250ZXh0KGRldiwgdHhfY2lkKTsKQEAgLTM1MzksNyArMzU1Myw3IEBACiAJdTMyIGNpZF9hZGRyLCBzYl9pZCwgdmFsLCBjb2FsX3JlZywgY29hbF92YWw7CiAJaW50IGk7CiAJc3RydWN0IHJ4X2JkICpyeGJkOwotCXN0cnVjdCBzdGF0dXNfYmxvY2sgKnNfYmxrID0gY3AtPnN0YXR1c19ibGs7CisJc3RydWN0IHN0YXR1c19ibG9jayAqc19ibGsgPSBjcC0+c3RhdHVzX2Jsay5nZW47CiAKIAlzYl9pZCA9IGNwLT5zdGF0dXNfYmxrX251bTsKIAljbmljX2luaXRfY29udGV4dChkZXYsIDIpOwpAQCAtMzU0Nyw3ICszNTYxLDcgQEAKIAljb2FsX3JlZyA9IEJOWDJfSENfQ09NTUFORDsKIAljb2FsX3ZhbCA9IENOSUNfUkQoZGV2LCBjb2FsX3JlZyk7CiAJaWYgKGV0aGRldi0+ZHJ2X3N0YXRlICYgQ05JQ19EUlZfU1RBVEVfVVNJTkdfTVNJWCkgewotCQlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrX21zaXggKnNibGsgPSBjcC0+c3RhdHVzX2JsazsKKwkJc3RydWN0IHN0YXR1c19ibG9ja19tc2l4ICpzYmxrID0gY3AtPnN0YXR1c19ibGsuYm54MjsKIAogCQljcC0+cnhfY29uc19wdHIgPSAmc2Jsay0+c3RhdHVzX3J4X3F1aWNrX2NvbnN1bWVyX2luZGV4OwogCQljb2FsX3JlZyA9IEJOWDJfSENfQ09BTEVTQ0VfTk9XOwpAQCAtMzY0Niw3ICszNjYwLDcgQEAKIHsKIAlzdHJ1Y3QgY25pY19sb2NhbCAqY3AgPSBkZXYtPmNuaWNfcHJpdjsKIAlzdHJ1Y3QgY25pY19ldGhfZGV2ICpldGhkZXYgPSBjcC0+ZXRoZGV2OwotCXN0cnVjdCBzdGF0dXNfYmxvY2sgKnNibGsgPSBjcC0+c3RhdHVzX2JsazsKKwlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrICpzYmxrID0gY3AtPnN0YXR1c19ibGsuZ2VuOwogCXUzMiB2YWw7CiAJaW50IGVycjsKIApAQCAtMzc1OCw4ICszNzcyLDcgQEAKIAogCWVyciA9IGNuaWNfaW5pdF9ibngyX2lycShkZXYpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGNuaWNfaW5pdF9pcnEgZmFpbGVkXG4iLAotCQkgICAgICAgZGV2LT5uZXRkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldi0+bmV0ZGV2LCAiY25pY19pbml0X2lycSBmYWlsZWRcbiIpOwogCQljbmljX3JlZ193cl9pbmQoZGV2LCBCTlgyX0NQX1NDUkFUQ0ggKyAweDIwLCAwKTsKIAkJY25pY19yZWdfd3JfaW5kKGRldiwgQk5YMl9DT01fU0NSQVRDSCArIDB4MjAsIDApOwogCQlyZXR1cm4gZXJyOwpAQCAtNDEyMiw4ICs0MTM1LDcgQEAKIAkJCSAgIG9mZnNldG9mKHN0cnVjdCBjc3Rvcm1fc3RhdHVzX2Jsb2NrX2MsCiAJCQkJICAgIGluZGV4X3ZhbHVlc1tIQ19JTkRFWF9DX0lTQ1NJX0VRX0NPTlNdKSk7CiAJaWYgKGVxX2lkeCAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBFUSBjb25zIGluZGV4ICV4ICE9IDBcbiIsCi0JCSAgICAgICBkZXYtPm5ldGRldi0+bmFtZSwgZXFfaWR4KTsKKwkJbmV0ZGV2X2VycihkZXYtPm5ldGRldiwgIkVRIGNvbnMgaW5kZXggJXggIT0gMFxuIiwgZXFfaWR4KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJcmV0ID0gY25pY19pbml0X2JueDJ4X2lycShkZXYpOwpAQCAtNDIwOCw4ICs0MjIwLDcgQEAKIAogCWVyciA9IGV0aGRldi0+ZHJ2X3JlZ2lzdGVyX2NuaWMoZGV2LT5uZXRkZXYsIGNwLT5jbmljX29wcywgZGV2KTsKIAlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogcmVnaXN0ZXJfY25pYyBmYWlsZWRcbiIsCi0JCSAgICAgICBkZXYtPm5ldGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LT5uZXRkZXYsICJyZWdpc3Rlcl9jbmljIGZhaWxlZFxuIik7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtNDIzOCwxMyArNDI0OSwxMiBAQAogCWNwLT5jaGlwX2lkID0gZXRoZGV2LT5jaGlwX2lkOwogCXBjaV9kZXZfZ2V0KGRldi0+cGNpZGV2KTsKIAljcC0+ZnVuYyA9IFBDSV9GVU5DKGRldi0+cGNpZGV2LT5kZXZmbik7Ci0JY3AtPnN0YXR1c19ibGsgPSBldGhkZXYtPmlycV9hcnJbMF0uc3RhdHVzX2JsazsKKwljcC0+c3RhdHVzX2Jsay5nZW4gPSBldGhkZXYtPmlycV9hcnJbMF0uc3RhdHVzX2JsazsKIAljcC0+c3RhdHVzX2Jsa19udW0gPSBldGhkZXYtPmlycV9hcnJbMF0uc3RhdHVzX2Jsa19udW07CiAKIAllcnIgPSBjcC0+YWxsb2NfcmVzYyhkZXYpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGFsbG9jYXRlIHJlc291cmNlIGZhaWx1cmVcbiIsCi0JCSAgICAgICBkZXYtPm5ldGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LT5uZXRkZXYsICJhbGxvY2F0ZSByZXNvdXJjZSBmYWlsdXJlXG4iKTsKIAkJZ290byBlcnIxOwogCX0KIApAQCAtNDMyNiwxMCArNDMzNiw5IEBACiAJCWkrKzsKIAl9CiAJaWYgKGF0b21pY19yZWFkKCZkZXYtPnJlZl9jb3VudCkgIT0gMCkKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEZhaWxlZCB3YWl0aW5nIGZvciByZWYgY291bnQgdG8gZ28iCi0JCQkJICAgICIgdG8gemVyby5cbiIsIGRldi0+bmV0ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYtPm5ldGRldiwgIkZhaWxlZCB3YWl0aW5nIGZvciByZWYgY291bnQgdG8gZ28gdG8gemVyb1xuIik7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiUmVtb3ZlZCBDTklDIGRldmljZTogJXNcbiIsIGRldi0+bmV0ZGV2LT5uYW1lKTsKKwluZXRkZXZfaW5mbyhkZXYtPm5ldGRldiwgIlJlbW92ZWQgQ05JQyBkZXZpY2VcbiIpOwogCWRldl9wdXQoZGV2LT5uZXRkZXYpOwogCWtmcmVlKGRldik7CiB9CkBAIC00MzQ1LDggKzQzNTQsNyBAQAogCiAJY2RldiA9IGt6YWxsb2MoYWxsb2Nfc2l6ZSAsIEdGUF9LRVJORUwpOwogCWlmIChjZGV2ID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IGFsbG9jYXRlIGRldiBzdHJ1Y3QgZmFpbHVyZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiYWxsb2NhdGUgZGV2IHN0cnVjdCBmYWlsdXJlXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC00MzY0LDcgKzQzNzIsNyBAQAogCiAJc3Bpbl9sb2NrX2luaXQoJmNwLT5jbmljX3VscF9sb2NrKTsKIAotCXByaW50ayhLRVJOX0lORk8gUEZYICJBZGRlZCBDTklDIGRldmljZTogJXNcbiIsIGRldi0+bmFtZSk7CisJbmV0ZGV2X2luZm8oZGV2LCAiQWRkZWQgQ05JQyBkZXZpY2VcbiIpOwogCiAJcmV0dXJuIGNkZXY7CiB9CkBAIC00NjA1LDcgKzQ2MTMsNyBAQAogewogCWludCByYyA9IDA7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlcyIsIHZlcnNpb24pOworCXByX2luZm8oIiVzIiwgdmVyc2lvbik7CiAKIAlyYyA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmY25pY19uZXRkZXZfbm90aWZpZXIpOwogCWlmIChyYykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY25pYy5oIGIvZHJpdmVycy9uZXQvY25pYy5oCmluZGV4IDI0MWQwOWEuLmEwZDg1M2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NuaWMuaAorKysgYi9kcml2ZXJzL25ldC9jbmljLmgKQEAgLTEsNiArMSw2IEBACiAvKiBjbmljLmg6IEJyb2FkY29tIENOSUMgY29yZSBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMTAgQnJvYWRjb20gQ29ycG9yYXRpb24KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTEwMSw3ICsxMDEsNyBAQAogI2RlZmluZSBCTlgyWF9LV1FfREFUQShjcCwgeCkJCQkJCQlcCiAJJihjcCktPmt3cV8xNl9kYXRhW0JOWDJYX0tXUV9EQVRBX1BHKGNwLCB4KV1bQk5YMlhfS1dRX0RBVEFfSURYKGNwLCB4KV0KIAotI2RlZmluZSBERUZfSVBJRF9DT1VOVAkJMHhjMDAxCisjZGVmaW5lIERFRl9JUElEX1NUQVJUCQkweDgwMDAKIAogI2RlZmluZSBERUZfS0FfVElNRU9VVAkJMTAwMDAKICNkZWZpbmUgREVGX0tBX0lOVEVSVkFMCQkzMDAwMDAKQEAgLTIyNCw5ICsyMjQsMTIgQEAKIAl1MTYJCWtjcV9wcm9kX2lkeDsKIAl1MzIJCWtjcV9pb19hZGRyOwogCi0Jdm9pZAkJCQkqc3RhdHVzX2JsazsKLQlzdHJ1Y3Qgc3RhdHVzX2Jsb2NrX21zaXgJKmJueDJfc3RhdHVzX2JsazsKLQlzdHJ1Y3QgaG9zdF9zdGF0dXNfYmxvY2sJKmJueDJ4X3N0YXR1c19ibGs7CisJdW5pb24geworCQl2b2lkCQkJCSpnZW47CisJCXN0cnVjdCBzdGF0dXNfYmxvY2tfbXNpeAkqYm54MjsKKwkJc3RydWN0IGhvc3Rfc3RhdHVzX2Jsb2NrCSpibngyeDsKKwl9IHN0YXR1c19ibGs7CisKIAlzdHJ1Y3QgaG9zdF9kZWZfc3RhdHVzX2Jsb2NrCSpibngyeF9kZWZfc3RhdHVzX2JsazsKIAogCXUzMgkJCQlzdGF0dXNfYmxrX251bTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NuaWNfZGVmcy5oIGIvZHJpdmVycy9uZXQvY25pY19kZWZzLmgKaW5kZXggOTgyN2IyNy4uN2NlNjk0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY25pY19kZWZzLmgKKysrIGIvZHJpdmVycy9uZXQvY25pY19kZWZzLmgKQEAgLTEsNyArMSw3IEBACiAKIC8qIGNuaWMuYzogQnJvYWRjb20gQ05JQyBjb3JlIG5ldHdvcmsgZHJpdmVyLgogICoKLSAqIENvcHlyaWdodCAoYykgMjAwNi0yMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY25pY19pZi5oIGIvZHJpdmVycy9uZXQvY25pY19pZi5oCmluZGV4IDhhYWY5OGIuLjExMGM2MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NuaWNfaWYuaAorKysgYi9kcml2ZXJzL25ldC9jbmljX2lmLmgKQEAgLTEsNiArMSw2IEBACiAvKiBjbmljX2lmLmg6IEJyb2FkY29tIENOSUMgY29yZSBuZXR3b3JrIGRyaXZlci4KICAqCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYgQnJvYWRjb20gQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoYykgMjAwNi0yMDEwIEJyb2FkY29tIENvcnBvcmF0aW9uCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xMiw4ICsxMiw4IEBACiAjaWZuZGVmIENOSUNfSUZfSAogI2RlZmluZSBDTklDX0lGX0gKIAotI2RlZmluZSBDTklDX01PRFVMRV9WRVJTSU9OCSIyLjEuMCIKLSNkZWZpbmUgQ05JQ19NT0RVTEVfUkVMREFURQkiT2N0IDEwLCAyMDA5IgorI2RlZmluZSBDTklDX01PRFVMRV9WRVJTSU9OCSIyLjEuMSIKKyNkZWZpbmUgQ05JQ19NT0RVTEVfUkVMREFURQkiRmViIDIyLCAyMDEwIgogCiAjZGVmaW5lIENOSUNfVUxQX1JETUEJCTAKICNkZWZpbmUgQ05JQ19VTFBfSVNDU0kJCTEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NwbWFjLmMgYi9kcml2ZXJzL25ldC9jcG1hYy5jCmluZGV4IGJmMjA3MmUuLmI4NWM4MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NwbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvY3BtYWMuYwpAQCAtMzI4LDcgKzMyOCw2IEBACiBzdGF0aWMgdm9pZCBjcG1hY19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKml0ZXI7Ci0JaW50IGk7CiAJdTggdG1wOwogCXUzMiBtYnAsIGJpdCwgaGFzaFsyXSA9IHsgMCwgfTsKIAlzdHJ1Y3QgY3BtYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zNDgsOCArMzQ3LDcgQEAKIAkJCSAqIGNwbWFjIHVzZXMgc29tZSBzdHJhbmdlIG1hYyBhZGRyZXNzIGhhc2hpbmcKIAkJCSAqIChub3QgY3JjMzIpCiAJCQkgKi8KLQkJCWZvciAoaSA9IDAsIGl0ZXIgPSBkZXYtPm1jX2xpc3Q7IGkgPCBkZXYtPm1jX2NvdW50OwotCQkJICAgICBpKyssIGl0ZXIgPSBpdGVyLT5uZXh0KSB7CisJCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihpdGVyLCBkZXYpIHsKIAkJCQliaXQgPSAwOwogCQkJCXRtcCA9IGl0ZXItPmRtaV9hZGRyWzBdOwogCQkJCWJpdCAgXj0gKHRtcCA+PiAyKSBeICh0bXAgPDwgNCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jcmlzL2V0aF92MTAuYyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCmluZGV4IGEyNGJlMzQuLmRkMjRhYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCisrKyBiL2RyaXZlcnMvbmV0L2NyaXMvZXRoX3YxMC5jCkBAIC0xNTY0LDcgKzE1NjQsNyBAQAogc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBudW1fYWRkciA9IGRldi0+bWNfY291bnQ7CisJaW50IG51bV9hZGRyID0gbmV0ZGV2X21jX2NvdW50KGRldik7CiAJdW5zaWduZWQgbG9uZyBpbnQgbG9fYml0czsKIAl1bnNpZ25lZCBsb25nIGludCBoaV9iaXRzOwogCkBAIC0xNTk2LDEzICsxNTk2LDEyIEBACiAJfSBlbHNlIHsKIAkJLyogTUMgbW9kZSwgcmVjZWl2ZSBub3JtYWwgYW5kIE1DIHBhY2tldHMgKi8KIAkJY2hhciBoYXNoX2l4OwotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSA9IGRldi0+bWNfbGlzdDsKLQkJaW50IGk7CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCQljaGFyICpiYWRkcjsKIAogCQlsb19iaXRzID0gMHgwMDAwMDAwMHVsOwogCQloaV9iaXRzID0gMHgwMDAwMDAwMHVsOwotCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2FkZHI7IGkrKykgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogCQkJLyogQ2FsY3VsYXRlIHRoZSBoYXNoIGluZGV4IGZvciB0aGUgR0EgcmVnaXN0ZXJzICovCiAKIAkJCWhhc2hfaXggPSAwOwpAQCAtMTYzMiw3ICsxNjMxLDYgQEAKIAkJCX0gZWxzZSB7CiAJCQkJbG9fYml0cyB8PSAoMSA8PCBoYXNoX2l4KTsKIAkJCX0KLQkJCWRtaSA9IGRtaS0+bmV4dDsKIAkJfQogCQkvKiBEaXNhYmxlIGluZGl2aWR1YWwgcmVjZWl2ZSAqLwogCQlTRVRTKG5ldHdvcmtfcmVjX2NvbmZpZ19zaGFkb3csIFJfTkVUV09SS19SRUNfQ09ORklHLCBpbmRpdmlkdWFsLCBkaXNjYXJkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2NzODl4MC5jIGIvZHJpdmVycy9uZXQvY3M4OXgwLmMKaW5kZXggMGU3OWNlZi4uYjAyMDhlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3M4OXgwLmMKKysrIGIvZHJpdmVycy9uZXQvY3M4OXgwLmMKQEAgLTU4MCw3ICs1ODAsNyBAQAogCX0KIAogI2lmZGVmIENPTkZJR19TSF9ISUNPU0g0Ci0JLyogdHJ1ZWx5IHJlc2V0IHRoZSBjaGlwICovCisJLyogdHJ1bHkgcmVzZXQgdGhlIGNoaXAgKi8KIAl3cml0ZXdvcmQoaW9hZGRyLCBBRERfUE9SVCwgMHgwMTE0KTsKIAl3cml0ZXdvcmQoaW9hZGRyLCBEQVRBX1BPUlQsIDB4MDA0MCk7CiAjZW5kaWYKQEAgLTE3ODUsNyArMTc4NSw3IEBACiAJewogCQlscC0+cnhfbW9kZSA9IFJYX0FMTF9BQ0NFUFQ7CiAJfQotCWVsc2UgaWYoKGRldi0+ZmxhZ3MmSUZGX0FMTE1VTFRJKXx8ZGV2LT5tY19saXN0KQorCWVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCAhbmV0ZGV2X21jX2VtcHR5KGRldikpCiAJewogCQkvKiBUaGUgbXVsdGljYXN0LWFjY2VwdCBsaXN0IGlzIGluaXRpYWxpemVkIHRvIGFjY2VwdC1hbGwsIGFuZCB3ZQogCQkgICByZWx5IG9uIGhpZ2hlci1sZXZlbCBmaWx0ZXJpbmcgZm9yIG5vdy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaAppbmRleCAzZTg2MThiLi40Y2Q3ZjQyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvYWRhcHRlci5oCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2FkYXB0ZXIuaApAQCAtMjY0LDYgKzI2NCwxMCBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdCBmYXRhbF9lcnJvcl9oYW5kbGVyX3Rhc2s7CiAJc3RydWN0IHdvcmtfc3RydWN0IGxpbmtfZmF1bHRfaGFuZGxlcl90YXNrOwogCisJc3RydWN0IHdvcmtfc3RydWN0IGRiX2Z1bGxfdGFzazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGJfZW1wdHlfdGFzazsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGJfZHJvcF90YXNrOworCiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc19yb290OwogCiAJc3RydWN0IG11dGV4IG1kaW9fbG9jazsKQEAgLTMzNSw2ICszMzksNyBAQAogaW50IHQzX2dldF9kZXNjKGNvbnN0IHN0cnVjdCBzZ2VfcXNldCAqcXMsIHVuc2lnbmVkIGludCBxbnVtLCB1bnNpZ25lZCBpbnQgaWR4LAogCQl1bnNpZ25lZCBjaGFyICpkYXRhKTsKIGlycXJldHVybl90IHQzX3NnZV9pbnRyX21zaXgoaW50IGlycSwgdm9pZCAqY29va2llKTsKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqY3hnYjNfd3E7CiAKIGludCB0M19nZXRfZWRjX2Z3KHN0cnVjdCBjcGh5ICpwaHksIGludCBlZGNfaWR4LCBpbnQgc2l6ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKaW5kZXggNmZmMzU2ZC4uZmUwOGEwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvY29tbW9uLmgKQEAgLTY3LDMyICs2Nyw2IEBACiAvKiBBZGRpdGlvbmFsIE5FVElGX01TR18qIGNhdGVnb3JpZXMgKi8KICNkZWZpbmUgTkVUSUZfTVNHX01NSU8gMHg4MDAwMDAwCiAKLXN0cnVjdCB0M19yeF9tb2RlIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwotCXVuc2lnbmVkIGludCBpZHg7Ci19OwotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9yeF9tb2RlKHN0cnVjdCB0M19yeF9tb2RlICpwLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0KQotewotCXAtPmRldiA9IGRldjsKLQlwLT5tY2xpc3QgPSBtY2xpc3Q7Ci0JcC0+aWR4ID0gMDsKLX0KLQotc3RhdGljIGlubGluZSB1OCAqdDNfZ2V0X25leHRfbWNhZGRyKHN0cnVjdCB0M19yeF9tb2RlICpybSkKLXsKLQl1OCAqYWRkciA9IE5VTEw7Ci0KLQlpZiAocm0tPm1jbGlzdCAmJiBybS0+aWR4IDwgcm0tPmRldi0+bWNfY291bnQpIHsKLQkJYWRkciA9IHJtLT5tY2xpc3QtPmRtaV9hZGRyOwotCQlybS0+bWNsaXN0ID0gcm0tPm1jbGlzdC0+bmV4dDsKLQkJcm0tPmlkeCsrOwotCX0KLQlyZXR1cm4gYWRkcjsKLX0KLQogZW51bSB7CiAJTUFYX05QT1JUUyA9IDIsCQkvKiBtYXggIyBvZiBwb3J0cyAqLwogCU1BWF9GUkFNRV9TSVpFID0gMTAyNDAsCS8qIG1heCBNQUMgZnJhbWUgc2l6ZSwgaW5jbHVkaW5nIGhlYWRlciArIEZDUyAqLwpAQCAtNzQ2LDcgKzcyMCw3IEBACiBpbnQgdDNfbWFjX2VuYWJsZShzdHJ1Y3QgY21hYyAqbWFjLCBpbnQgd2hpY2gpOwogaW50IHQzX21hY19kaXNhYmxlKHN0cnVjdCBjbWFjICptYWMsIGludCB3aGljaCk7CiBpbnQgdDNfbWFjX3NldF9tdHUoc3RydWN0IGNtYWMgKm1hYywgdW5zaWduZWQgaW50IG10dSk7Ci1pbnQgdDNfbWFjX3NldF9yeF9tb2RlKHN0cnVjdCBjbWFjICptYWMsIHN0cnVjdCB0M19yeF9tb2RlICpybSk7CitpbnQgdDNfbWFjX3NldF9yeF9tb2RlKHN0cnVjdCBjbWFjICptYWMsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogaW50IHQzX21hY19zZXRfYWRkcmVzcyhzdHJ1Y3QgY21hYyAqbWFjLCB1bnNpZ25lZCBpbnQgaWR4LCB1OCBhZGRyWzZdKTsKIGludCB0M19tYWNfc2V0X251bV91Y2FzdChzdHJ1Y3QgY21hYyAqbWFjLCBpbnQgbik7CiBjb25zdCBzdHJ1Y3QgbWFjX3N0YXRzICp0M19tYWNfdXBkYXRlX3N0YXRzKHN0cnVjdCBjbWFjICptYWMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfbWFpbi5jCmluZGV4IDg5YmVjOWMuLjNlNDUzZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX21haW4uYworKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19tYWluLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlICJjb21tb24uaCIKQEAgLTgwLDcgKzgxLDcgQEAKICNkZWZpbmUgQ0hfREVWSUNFKGRldmlkLCBpZHgpIFwKIAl7IFBDSV9WRU5ET1JfSURfQ0hFTFNJTywgZGV2aWQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIGlkeCB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjeGdiM19wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY3hnYjNfcGNpX3RibCkgPSB7CiAJQ0hfREVWSUNFKDB4MjAsIDApLAkvKiBQRTkwMDAgKi8KIAlDSF9ERVZJQ0UoMHgyMSwgMSksCS8qIFQzMDJFICovCiAJQ0hfREVWSUNFKDB4MjIsIDIpLAkvKiBUMzEwRSAqLwpAQCAtMTQwLDcgKzE0MSw3IEBACiAgKiB3aWxsIGJsb2NrIGtldmVudGQgYXMgaXQgbmVlZHMgdGhlIHJ0bmwgbG9jaywgYW5kIHdlJ2xsIGRlYWRsb2NrIHdhaXRpbmcKICAqIGZvciBvdXIgd29yayB0byBjb21wbGV0ZS4gIEdldCBvdXIgb3duIHdvcmsgcXVldWUgdG8gc29sdmUgdGhpcy4KICAqLwotc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjeGdiM193cTsKK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjeGdiM193cTsKIAogLyoqCiAgKglsaW5rX3JlcG9ydCAtIHNob3cgbGluayBzdGF0dXMgYW5kIGxpbmsgc3BlZWQvZHVwbGV4CkBAIC0zMjQsMTEgKzMyNSw5IEBACiAKIHN0YXRpYyB2b2lkIGN4Z2Jfc2V0X3J4bW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCB0M19yeF9tb2RlIHJtOwogCXN0cnVjdCBwb3J0X2luZm8gKnBpID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWluaXRfcnhfbW9kZSgmcm0sIGRldiwgZGV2LT5tY19saXN0KTsKLQl0M19tYWNfc2V0X3J4X21vZGUoJnBpLT5tYWMsICZybSk7CisJdDNfbWFjX3NldF9yeF9tb2RlKCZwaS0+bWFjLCBkZXYpOwogfQogCiAvKioKQEAgLTMzOSwxNyArMzM4LDE1IEBACiAgKi8KIHN0YXRpYyB2b2lkIGxpbmtfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdDNfcnhfbW9kZSBybTsKIAlzdHJ1Y3QgcG9ydF9pbmZvICpwaSA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGNtYWMgKm1hYyA9ICZwaS0+bWFjOwogCi0JaW5pdF9yeF9tb2RlKCZybSwgZGV2LCBkZXYtPm1jX2xpc3QpOwogCXQzX21hY19yZXNldChtYWMpOwogCXQzX21hY19zZXRfbnVtX3VjYXN0KG1hYywgTUFYX01BQ19JRFgpOwogCXQzX21hY19zZXRfbXR1KG1hYywgZGV2LT5tdHUpOwogCXQzX21hY19zZXRfYWRkcmVzcyhtYWMsIExBTl9NQUNfSURYLCBkZXYtPmRldl9hZGRyKTsKIAl0M19tYWNfc2V0X2FkZHJlc3MobWFjLCBTQU5fTUFDX0lEWCwgcGktPmlzY3NpYy5tYWNfYWRkcik7Ci0JdDNfbWFjX3NldF9yeF9tb2RlKG1hYywgJnJtKTsKKwl0M19tYWNfc2V0X3J4X21vZGUobWFjLCBkZXYpOwogCXQzX2xpbmtfc3RhcnQoJnBpLT5waHksIG1hYywgJnBpLT5saW5rX2NvbmZpZyk7CiAJdDNfbWFjX2VuYWJsZShtYWMsIE1BQ19ESVJFQ1RJT05fUlggfCBNQUNfRElSRUNUSU9OX1RYKTsKIH0KQEAgLTU5MCw2ICs1ODcsMTkgQEAKIAkJICAgICAgVl9SUkNQTENQVVNJWkUoNikgfCBGX0hBU0hUT0VQTElUWiwgY3B1cywgcnNwcV9tYXApOwogfQogCitzdGF0aWMgdm9pZCByaW5nX2RicyhzdHJ1Y3QgYWRhcHRlciAqYWRhcCkKK3sKKwlpbnQgaSwgajsKKworCWZvciAoaSA9IDA7IGkgPCBTR0VfUVNFVFM7IGkrKykgeworCQlzdHJ1Y3Qgc2dlX3FzZXQgKnFzID0gJmFkYXAtPnNnZS5xc1tpXTsKKworCQlpZiAocXMtPmFkYXApCisJCQlmb3IgKGogPSAwOyBqIDwgU0dFX1RYUV9QRVJfU0VUOyBqKyspCisJCQkJdDNfd3JpdGVfcmVnKGFkYXAsIEFfU0dfS0RPT1JCRUxMLCBGX1NFTEVHUkNOVFggfCBWX0VHUkNOVFgocXMtPnR4cVtqXS5jbnR4dF9pZCkpOworCX0KK30KKwogc3RhdGljIHZvaWQgaW5pdF9uYXBpKHN0cnVjdCBhZGFwdGVyICphZGFwKQogewogCWludCBpOwpAQCAtMjc1NCw2ICsyNzY0LDQyIEBACiAJc3Bpbl91bmxvY2tfaXJxKCZhZGFwdGVyLT53b3JrX2xvY2spOwogfQogCitzdGF0aWMgdm9pZCBkYl9mdWxsX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhZGFwdGVyLAorCQkJCQkgICAgICAgZGJfZnVsbF90YXNrKTsKKworCWN4Z2IzX2V2ZW50X25vdGlmeSgmYWRhcHRlci0+dGRldiwgT0ZGTE9BRF9EQl9GVUxMLCAwKTsKK30KKworc3RhdGljIHZvaWQgZGJfZW1wdHlfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFkYXB0ZXIsCisJCQkJCSAgICAgICBkYl9lbXB0eV90YXNrKTsKKworCWN4Z2IzX2V2ZW50X25vdGlmeSgmYWRhcHRlci0+dGRldiwgT0ZGTE9BRF9EQl9FTVBUWSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRiX2Ryb3BfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFkYXB0ZXIsCisJCQkJCSAgICAgICBkYl9kcm9wX3Rhc2spOworCXVuc2lnbmVkIGxvbmcgZGVsYXkgPSAxMDAwOworCXVuc2lnbmVkIHNob3J0IHI7CisKKwljeGdiM19ldmVudF9ub3RpZnkoJmFkYXB0ZXItPnRkZXYsIE9GRkxPQURfREJfRFJPUCwgMCk7CisKKwkvKgorCSAqIFNsZWVwIGEgd2hpbGUgYmVmb3JlIHJpbmdpbmcgdGhlIGRyaXZlciBxc2V0IGRicy4KKwkgKiBUaGUgZGVsYXkgaXMgYmV0d2VlbiAxMDAwLTIwMjMgdXNlY3MuCisJICovCisJZ2V0X3JhbmRvbV9ieXRlcygmciwgMik7CisJZGVsYXkgKz0gciAmIDEwMjM7CisJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19VTklOVEVSUlVQVElCTEUpOworCXNjaGVkdWxlX3RpbWVvdXQodXNlY3NfdG9famlmZmllcyhkZWxheSkpOworCXJpbmdfZGJzKGFkYXB0ZXIpOworfQorCiAvKgogICogUHJvY2Vzc2VzIGV4dGVybmFsIChQSFkpIGludGVycnVwdHMgaW4gcHJvY2VzcyBjb250ZXh0LgogICovCkBAIC0zMjIyLDYgKzMyNjgsMTEgQEAKIAlJTklUX0xJU1RfSEVBRCgmYWRhcHRlci0+YWRhcHRlcl9saXN0KTsKIAlJTklUX1dPUksoJmFkYXB0ZXItPmV4dF9pbnRyX2hhbmRsZXJfdGFzaywgZXh0X2ludHJfdGFzayk7CiAJSU5JVF9XT1JLKCZhZGFwdGVyLT5mYXRhbF9lcnJvcl9oYW5kbGVyX3Rhc2ssIGZhdGFsX2Vycm9yX3Rhc2spOworCisJSU5JVF9XT1JLKCZhZGFwdGVyLT5kYl9mdWxsX3Rhc2ssIGRiX2Z1bGxfdGFzayk7CisJSU5JVF9XT1JLKCZhZGFwdGVyLT5kYl9lbXB0eV90YXNrLCBkYl9lbXB0eV90YXNrKTsKKwlJTklUX1dPUksoJmFkYXB0ZXItPmRiX2Ryb3BfdGFzaywgZGJfZHJvcF90YXNrKTsKKwogCUlOSVRfREVMQVlFRF9XT1JLKCZhZGFwdGVyLT5hZGFwX2NoZWNrX3Rhc2ssIHQzX2FkYXBfY2hlY2tfdGFzayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWktPm5wb3J0czAgKyBhaS0+bnBvcnRzMTsgKytpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmMKaW5kZXggNzUwNjRlZS4uOTQ5ODM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuYwpAQCAtMTI1Miw3ICsxMjUyLDcgQEAKIAlzdHJ1Y3QgbXR1dGFiIG10dXRhYjsKIAl1bnNpZ25lZCBpbnQgbDJ0X2NhcGFjaXR5OwogCi0JdCA9IGtjYWxsb2MoMSwgc2l6ZW9mKCp0KSwgR0ZQX0tFUk5FTCk7CisJdCA9IGt6YWxsb2Moc2l6ZW9mKCp0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0KQogCQlyZXR1cm4gLUVOT01FTTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5oIGIvZHJpdmVycy9uZXQvY3hnYjMvY3hnYjNfb2ZmbG9hZC5oCmluZGV4IDY3MGFhNjIuLjkyOWMyOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL2N4Z2IzX29mZmxvYWQuaAorKysgYi9kcml2ZXJzL25ldC9jeGdiMy9jeGdiM19vZmZsb2FkLmgKQEAgLTczLDcgKzczLDEwIEBACiAJT0ZGTE9BRF9TVEFUVVNfVVAsCiAJT0ZGTE9BRF9TVEFUVVNfRE9XTiwKIAlPRkZMT0FEX1BPUlRfRE9XTiwKLQlPRkZMT0FEX1BPUlRfVVAKKwlPRkZMT0FEX1BPUlRfVVAsCisJT0ZGTE9BRF9EQl9GVUxMLAorCU9GRkxPQURfREJfRU1QVFksCisJT0ZGTE9BRF9EQl9EUk9QCiB9OwogCiBzdHJ1Y3QgY3hnYjNfY2xpZW50IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2N4Z2IzL3JlZ3MuaAppbmRleCAxYjUzMjdiLi5jYjQyMzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy9yZWdzLmgKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMvcmVncy5oCkBAIC0yNTQsNiArMjU0LDIyIEBACiAjZGVmaW5lIFZfTE9QSU9EUkJEUk9QRVJSKHgpICgoeCkgPDwgU19MT1BJT0RSQkRST1BFUlIpCiAjZGVmaW5lIEZfTE9QSU9EUkJEUk9QRVJSICAgIFZfTE9QSU9EUkJEUk9QRVJSKDFVKQogCisjZGVmaW5lIFNfSElQUklPUklUWURCRlVMTCAgICA3CisjZGVmaW5lIFZfSElQUklPUklUWURCRlVMTCh4KSAoKHgpIDw8IFNfSElQUklPUklUWURCRlVMTCkKKyNkZWZpbmUgRl9ISVBSSU9SSVRZREJGVUxMICAgIFZfSElQUklPUklUWURCRlVMTCgxVSkKKworI2RlZmluZSBTX0hJUFJJT1JJVFlEQkVNUFRZICAgNgorI2RlZmluZSBWX0hJUFJJT1JJVFlEQkVNUFRZKHgpICgoeCkgPDwgU19ISVBSSU9SSVRZREJFTVBUWSkKKyNkZWZpbmUgRl9ISVBSSU9SSVRZREJFTVBUWSAgICBWX0hJUFJJT1JJVFlEQkVNUFRZKDFVKQorCisjZGVmaW5lIFNfTE9QUklPUklUWURCRlVMTCAgICA1CisjZGVmaW5lIFZfTE9QUklPUklUWURCRlVMTCh4KSAoKHgpIDw8IFNfTE9QUklPUklUWURCRlVMTCkKKyNkZWZpbmUgRl9MT1BSSU9SSVRZREJGVUxMICAgIFZfTE9QUklPUklUWURCRlVMTCgxVSkKKworI2RlZmluZSBTX0xPUFJJT1JJVFlEQkVNUFRZICAgNAorI2RlZmluZSBWX0xPUFJJT1JJVFlEQkVNUFRZKHgpICgoeCkgPDwgU19MT1BSSU9SSVRZREJFTVBUWSkKKyNkZWZpbmUgRl9MT1BSSU9SSVRZREJFTVBUWSAgICBWX0xPUFJJT1JJVFlEQkVNUFRZKDFVKQorCiAjZGVmaW5lIFNfUlNQUURJU0FCTEVEICAgIDMKICNkZWZpbmUgVl9SU1BRRElTQUJMRUQoeCkgKCh4KSA8PCBTX1JTUFFESVNBQkxFRCkKICNkZWZpbmUgRl9SU1BRRElTQUJMRUQgICAgVl9SU1BRRElTQUJMRUQoMVUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy9zZ2UuYyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCmluZGV4IDMxOGEwMTguLjY3ZTYxYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3NnZS5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSAic2dlX2RlZnMuaCIKICNpbmNsdWRlICJ0M19jcGwuaCIKICNpbmNsdWRlICJmaXJtd2FyZV9leHBvcnRzLmgiCisjaW5jbHVkZSAiY3hnYjNfb2ZmbG9hZC5oIgogCiAjZGVmaW5lIFVTRV9HVFMgMAogCkBAIC0xOTYsMTMgKzE5NywxMyBAQAogLyoqCiAgKgluZWVkX3NrYl91bm1hcCAtIGRvZXMgdGhlIHBsYXRmb3JtIG5lZWQgdW5tYXBwaW5nIG9mIHNrX2J1ZmZzPwogICoKLSAqCVJldHVybnMgdHJ1ZSBpZiB0aGUgcGxhdGZyb20gbmVlZHMgc2tfYnVmZiB1bm1hcHBpbmcuICBUaGUgY29tcGlsZXIKKyAqCVJldHVybnMgdHJ1ZSBpZiB0aGUgcGxhdGZvcm0gbmVlZHMgc2tfYnVmZiB1bm1hcHBpbmcuICBUaGUgY29tcGlsZXIKICAqCW9wdGltaXplcyBhd2F5IHVuZWNlc3NhcnkgY29kZSBpZiB0aGlzIHJldHVybnMgdHJ1ZS4KICAqLwogc3RhdGljIGlubGluZSBpbnQgbmVlZF9za2JfdW5tYXAodm9pZCkKIHsKIAkvKgotCSAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gdGVsbCBpZiB0aGUgcGxhdGZyb20gbmVlZHMgYnVmZmVyCisJICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byB0ZWxsIGlmIHRoZSBwbGF0Zm9ybSBuZWVkcyBidWZmZXIKIAkgKiB1bm1hcHBpbmcgYnkgY2hlY2tpbmcgaWYgREVDTEFSRV9QQ0lfVU5NQVBfQUREUiBkZWZpbmVzIGFueXRoaW5nLgogCSAqLwogCXN0cnVjdCBkdW1teSB7CkBAIC00ODAsNiArNDgxLDcgQEAKIHsKIAlpZiAocS0+cGVuZF9jcmVkID49IHEtPmNyZWRpdHMgLyA0KSB7CiAJCXEtPnBlbmRfY3JlZCA9IDA7CisJCXdtYigpOwogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9TR19LRE9PUkJFTEwsIFZfRUdSQ05UWChxLT5jbnR4dF9pZCkpOwogCX0KIH0KQEAgLTIyODYsMTEgKzIyODgsMTQgQEAKIAl3aGlsZSAobGlrZWx5KGJ1ZGdldF9sZWZ0ICYmIGlzX25ld19yZXNwb25zZShyLCBxKSkpIHsKIAkJaW50IHBhY2tldF9jb21wbGV0ZSwgZXRoLCBldGhwYWQgPSAyLCBscm8gPSBxcy0+bHJvX2VuYWJsZWQ7CiAJCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwotCQl1MzIgbGVuLCBmbGFncyA9IG50b2hsKHItPmZsYWdzKTsKLQkJX19iZTMyIHJzc19oaSA9ICooY29uc3QgX19iZTMyICopciwKLQkJICAgICAgIHJzc19sbyA9IHItPnJzc19oZHIucnNzX2hhc2hfdmFsOworCQl1MzIgbGVuLCBmbGFnczsKKwkJX19iZTMyIHJzc19oaSwgcnNzX2xvOwogCisJCXJtYigpOwogCQlldGggPSByLT5yc3NfaGRyLm9wY29kZSA9PSBDUExfUlhfUEtUOworCQlyc3NfaGkgPSAqKGNvbnN0IF9fYmUzMiAqKXI7CisJCXJzc19sbyA9IHItPnJzc19oZHIucnNzX2hhc2hfdmFsOworCQlmbGFncyA9IG50b2hsKHItPmZsYWdzKTsKIAogCQlpZiAodW5saWtlbHkoZmxhZ3MgJiBGX1JTUERfQVNZTkNfTk9USUYpKSB7CiAJCQlza2IgPSBhbGxvY19za2IoQU5fUEtUX1NJWkUsIEdGUF9BVE9NSUMpOwpAQCAtMjUwMSw3ICsyNTA2LDEwIEBACiAJCQlyZWZpbGxfcnNwcShhZGFwLCBxLCBxLT5jcmVkaXRzKTsKIAkJCXEtPmNyZWRpdHMgPSAwOwogCQl9Ci0JfSB3aGlsZSAoaXNfbmV3X3Jlc3BvbnNlKHIsIHEpICYmIGlzX3B1cmVfcmVzcG9uc2UocikpOworCQlpZiAoIWlzX25ld19yZXNwb25zZShyLCBxKSkKKwkJCWJyZWFrOworCQlybWIoKTsKKwl9IHdoaWxlIChpc19wdXJlX3Jlc3BvbnNlKHIpKTsKIAogCWlmIChzbGVlcGluZykKIAkJY2hlY2tfcmluZ19kYihhZGFwLCBxcywgc2xlZXBpbmcpOwpAQCAtMjUzNSw2ICsyNTQzLDcgQEAKIAogCWlmICghaXNfbmV3X3Jlc3BvbnNlKHIsIHEpKQogCQlyZXR1cm4gLTE7CisJcm1iKCk7CiAJaWYgKGlzX3B1cmVfcmVzcG9uc2UocikgJiYgcHJvY2Vzc19wdXJlX3Jlc3BvbnNlcyhhZGFwLCBxcywgcikgPT0gMCkgewogCQl0M193cml0ZV9yZWcoYWRhcCwgQV9TR19HVFMsIFZfUlNQUShxLT5jbnR4dF9pZCkgfAogCQkJICAgICBWX05FV1RJTUVSKHEtPmhvbGRvZmZfdG1yKSB8IFZfTkVXSU5ERVgocS0+Y2lkeCkpOwpAQCAtMjgzMyw4ICsyODQyLDEzIEBACiAJfQogCiAJaWYgKHN0YXR1cyAmIChGX0hJUElPRFJCRFJPUEVSUiB8IEZfTE9QSU9EUkJEUk9QRVJSKSkKLQkJQ0hfQUxFUlQoYWRhcHRlciwgIlNHRSBkcm9wcGVkICVzIHByaW9yaXR5IGRvb3JiZWxsXG4iLAotCQkJIHN0YXR1cyAmIEZfSElQSU9EUkJEUk9QRVJSID8gImhpZ2giIDogImxvIik7CisJCXF1ZXVlX3dvcmsoY3hnYjNfd3EsICZhZGFwdGVyLT5kYl9kcm9wX3Rhc2spOworCisJaWYgKHN0YXR1cyAmIChGX0hJUFJJT1JJVFlEQkZVTEwgfCBGX0xPUFJJT1JJVFlEQkZVTEwpKQorCQlxdWV1ZV93b3JrKGN4Z2IzX3dxLCAmYWRhcHRlci0+ZGJfZnVsbF90YXNrKTsKKworCWlmIChzdGF0dXMgJiAoRl9ISVBSSU9SSVRZREJFTVBUWSB8IEZfTE9QUklPUklUWURCRU1QVFkpKQorCQlxdWV1ZV93b3JrKGN4Z2IzX3dxLCAmYWRhcHRlci0+ZGJfZW1wdHlfdGFzayk7CiAKIAl0M193cml0ZV9yZWcoYWRhcHRlciwgQV9TR19JTlRfQ0FVU0UsIHN0YXR1cyk7CiAJaWYgKHN0YXR1cyAmICBTR0VfRkFUQUxFUlIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jIGIvZHJpdmVycy9uZXQvY3hnYjMvdDNfaHcuYwppbmRleCAwMzJjZmUwLi45NWE4YmEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9jeGdiMy90M19ody5jCisrKyBiL2RyaXZlcnMvbmV0L2N4Z2IzL3QzX2h3LmMKQEAgLTEyNjIsNyArMTI2Miw4IEBACiAJCWxjLT5mYyA9IGZjOwogCX0KIAotCXQzX29zX2xpbmtfY2hhbmdlZChhZGFwdGVyLCBwb3J0X2lkLCBsaW5rX29rLCBzcGVlZCwgZHVwbGV4LCBmYyk7CisJdDNfb3NfbGlua19jaGFuZ2VkKGFkYXB0ZXIsIHBvcnRfaWQsIGxpbmtfb2sgJiYgIXBpLT5saW5rX2ZhdWx0LAorCQkJICAgc3BlZWQsIGR1cGxleCwgZmMpOwogfQogCiB2b2lkIHQzX2xpbmtfZmF1bHQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGludCBwb3J0X2lkKQpAQCAtMTQzMiw3ICsxNDMzLDEwIEBACiAJCSAgICAgICBGX0lSUEFSSVRZRVJST1IgfCBWX0lUUEFSSVRZRVJST1IoTV9JVFBBUklUWUVSUk9SKSB8IFwKIAkJICAgICAgIFZfRkxQQVJJVFlFUlJPUihNX0ZMUEFSSVRZRVJST1IpIHwgRl9MT0RSQlBBUklUWUVSUk9SIHwgXAogCQkgICAgICAgRl9ISURSQlBBUklUWUVSUk9SIHwgRl9MT1JDUVBBUklUWUVSUk9SIHwgXAotCQkgICAgICAgRl9ISVJDUVBBUklUWUVSUk9SKQorCQkgICAgICAgRl9ISVJDUVBBUklUWUVSUk9SIHwgRl9MT1BSSU9SSVRZREJGVUxMIHwgXAorCQkgICAgICAgRl9ISVBSSU9SSVRZREJGVUxMIHwgRl9MT1BSSU9SSVRZREJFTVBUWSB8IFwKKwkJICAgICAgIEZfSElQUklPUklUWURCRU1QVFkgfCBGX0hJUElPRFJCRFJPUEVSUiB8IFwKKwkJICAgICAgIEZfTE9QSU9EUkJEUk9QRVJSKQogI2RlZmluZSBNQzVfSU5UUl9NQVNLIChGX1BBUklUWUVSUiB8IEZfQUNUUkdORlVMTCB8IEZfVU5LTk9XTkNNRCB8IFwKIAkJICAgICAgIEZfUkVRUVBBUkVSUiB8IEZfRElTUFFQQVJFUlIgfCBGX0RFTEFDVEVNUFRZIHwgXAogCQkgICAgICAgRl9ORkFTUkNIRkFJTCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2N4Z2IzL3hnbWFjLmMgYi9kcml2ZXJzL25ldC9jeGdiMy94Z21hYy5jCmluZGV4IDAxMDllZTQuLmMxNDJhMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2N4Z2IzL3hnbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvY3hnYjMveGdtYWMuYwpAQCAtMjk3LDI5ICsyOTcsMzAgQEAKIAlyZXR1cm4gaGFzaDsKIH0KIAotaW50IHQzX21hY19zZXRfcnhfbW9kZShzdHJ1Y3QgY21hYyAqbWFjLCBzdHJ1Y3QgdDNfcnhfbW9kZSAqcm0pCitpbnQgdDNfbWFjX3NldF9yeF9tb2RlKHN0cnVjdCBjbWFjICptYWMsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJdTMyIHZhbCwgaGFzaF9sbywgaGFzaF9oaTsKIAlzdHJ1Y3QgYWRhcHRlciAqYWRhcCA9IG1hYy0+YWRhcHRlcjsKIAl1bnNpZ25lZCBpbnQgb2Z0ID0gbWFjLT5vZmZzZXQ7CiAKIAl2YWwgPSB0M19yZWFkX3JlZyhhZGFwLCBBX1hHTV9SWF9DRkcgKyBvZnQpICYgfkZfQ09QWUFMTEZSQU1FUzsKLQlpZiAocm0tPmRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQogCQl2YWwgfD0gRl9DT1BZQUxMRlJBTUVTOwogCXQzX3dyaXRlX3JlZyhhZGFwLCBBX1hHTV9SWF9DRkcgKyBvZnQsIHZhbCk7CiAKLQlpZiAocm0tPmRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCiAJCWhhc2hfbG8gPSBoYXNoX2hpID0gMHhmZmZmZmZmZjsKIAllbHNlIHsKLQkJdTggKmFkZHI7CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCQlpbnQgZXhhY3RfYWRkcl9pZHggPSBtYWMtPm51Y2FzdDsKIAogCQloYXNoX2xvID0gaGFzaF9oaSA9IDA7Ci0JCXdoaWxlICgoYWRkciA9IHQzX2dldF9uZXh0X21jYWRkcihybSkpKQorCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikKIAkJCWlmIChleGFjdF9hZGRyX2lkeCA8IEVYQUNUX0FERFJfRklMVEVSUykKLQkJCQlzZXRfYWRkcl9maWx0ZXIobWFjLCBleGFjdF9hZGRyX2lkeCsrLCBhZGRyKTsKKwkJCQlzZXRfYWRkcl9maWx0ZXIobWFjLCBleGFjdF9hZGRyX2lkeCsrLAorCQkJCQkJZG1pLT5kbWlfYWRkcik7CiAJCQllbHNlIHsKLQkJCQlpbnQgaGFzaCA9IGhhc2hfaHdfYWRkcihhZGRyKTsKKwkJCQlpbnQgaGFzaCA9IGhhc2hfaHdfYWRkcihkbWktPmRtaV9hZGRyKTsKIAogCQkJCWlmIChoYXNoIDwgMzIpCiAJCQkJCWhhc2hfbG8gfD0gKDEgPDwgaGFzaCk7CkBAIC0zNTMsNiArMzU0LDkgQEAKIAkgKiBwYWNrZXQgc2l6ZSByZWdpc3RlciBpbmNsdWRlcyBoZWFkZXIsIGJ1dCBub3QgRkNTLgogCSAqLwogCW10dSArPSAxNDsKKwlpZiAobXR1ID4gMTUzNikKKwkJbXR1ICs9IDQ7CisKIAlpZiAobXR1ID4gTUFYX0ZSQU1FX1NJWkUgLSA0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAl0M193cml0ZV9yZWcoYWRhcCwgQV9YR01fUlhfTUFYX1BLVF9TSVpFICsgbWFjLT5vZmZzZXQsIG10dSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kYXZpbmNpX2VtYWMuYyBiL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCmluZGV4IDE2MDViYzIuLjEzZjk4NjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCisrKyBiL2RyaXZlcnMvbmV0L2RhdmluY2lfZW1hYy5jCkBAIC05NTcsMTkgKzk1NywxOCBAQAogCX0gZWxzZSB7CiAJCW1icF9lbmFibGUgPSAobWJwX2VuYWJsZSAmIH5FTUFDX01CUF9SWFBST01JU0MpOwogCQlpZiAoKG5kZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAotCQkgICAgKG5kZXYtPm1jX2NvdW50ID4gRU1BQ19ERUZfTUFYX01VTFRJQ0FTVF9BRERSRVNTRVMpKSB7CisJCSAgICBuZXRkZXZfbWNfY291bnQobmRldikgPiBFTUFDX0RFRl9NQVhfTVVMVElDQVNUX0FERFJFU1NFUykgewogCQkJbWJwX2VuYWJsZSA9IChtYnBfZW5hYmxlIHwgRU1BQ19NQlBfUlhNQ0FTVCk7CiAJCQllbWFjX2FkZF9tY2FzdChwcml2LCBFTUFDX0FMTF9NVUxUSV9TRVQsIE5VTEwpOwogCQl9Ci0JCWlmIChuZGV2LT5tY19jb3VudCA+IDApIHsKKwkJaWYgKCFuZXRkZXZfbWNfZW1wdHkobmRldikpIHsKIAkJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfcHRyOwogCQkJbWJwX2VuYWJsZSA9IChtYnBfZW5hYmxlIHwgRU1BQ19NQlBfUlhNQ0FTVCk7CiAJCQllbWFjX2FkZF9tY2FzdChwcml2LCBFTUFDX0FMTF9NVUxUSV9DTFIsIE5VTEwpOwogCQkJLyogcHJvZ3JhbSBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0IGludG8gRU1BQyBoYXJkd2FyZSAqLwotCQkJZm9yIChtY19wdHIgPSBuZGV2LT5tY19saXN0OyBtY19wdHI7Ci0JCQkgICAgIG1jX3B0ciA9IG1jX3B0ci0+bmV4dCkgeworCQkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfcHRyLCBuZGV2KSB7CiAJCQkJZW1hY19hZGRfbWNhc3QocHJpdiwgRU1BQ19NVUxUSUNBU1RfQURELAotCQkJCQkgICAgICAgKHU4ICopbWNfcHRyLT5kbWlfYWRkcik7CisJCQkJCSAgICAgICAodTggKikgbWNfcHRyLT5kbWlfYWRkcik7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQltYnBfZW5hYmxlID0gKG1icF9lbmFibGUgJiB+RU1BQ19NQlBfUlhNQ0FTVCk7CkBAIC0yNjU5LDcgKzI2NTgsNyBAQAogCiAJcGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlpZiAoIXBkYXRhKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiRGFWaW5jaSBFTUFDOiBObyBwbGF0ZnJvbSBkYXRhXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJEYVZpbmNpIEVNQUM6IE5vIHBsYXRmb3JtIGRhdGFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTI2ODMsOCArMjY4Miw3IEBACiAJcHJpdi0+ZW1hY19iYXNlX3BoeXMgPSByZXMtPnN0YXJ0ICsgcGRhdGEtPmN0cmxfcmVnX29mZnNldDsKIAlzaXplID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBzaXplLCBuZGV2LT5uYW1lKSkgewotCQlkZXZfZXJyKGVtYWNfZGV2LCAiRGFWaW5jaSBFTUFDOiBmYWlsZWQgcmVxdWVzdF9tZW1fcmVnaW9uKCkgXAotCQkJCQkgZm9yIHJlZ3NcbiIpOworCQlkZXZfZXJyKGVtYWNfZGV2LCAiRGFWaW5jaSBFTUFDOiBmYWlsZWQgcmVxdWVzdF9tZW1fcmVnaW9uKCkgZm9yIHJlZ3NcbiIpOwogCQlyYyA9IC1FTlhJTzsKIAkJZ290byBwcm9iZV9xdWl0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RlNjIwLmMgYi9kcml2ZXJzL25ldC9kZTYyMC5jCmluZGV4IDQ1Nzk0ZjYuLmEwYTY4MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RlNjIwLmMKKysrIGIvZHJpdmVycy9uZXQvZGU2MjAuYwpAQCAtNDY0LDcgKzQ2NCw3IEBACiAKIHN0YXRpYyB2b2lkIGRlNjIwX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWlmIChkZXYtPm1jX2NvdW50IHx8IGRldi0+ZmxhZ3MmKElGRl9BTExNVUxUSXxJRkZfUFJPTUlTQykpCisJaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSB8fCBkZXYtPmZsYWdzJihJRkZfQUxMTVVMVEl8SUZGX1BST01JU0MpKQogCXsgLyogRW5hYmxlIHByb21pc2N1b3VzIG1vZGUgKi8KIAkJZGU2MjBfc2V0X3JlZ2lzdGVyKGRldiwgV19UQ1IsIChUQ1JfREVGICYgflJYUEJNKSB8IFJYQUxMKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZWNsYW5jZS5jIGIvZHJpdmVycy9uZXQvZGVjbGFuY2UuYwppbmRleCBiZTk1OTAyLi44Y2YzY2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZWNsYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L2RlY2xhbmNlLmMKQEAgLTk0MCw5ICs5NDAsOCBAQAogewogCXN0cnVjdCBsYW5jZV9wcml2YXRlICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9sYXRpbGUgdTE2ICppYiA9ICh2b2xhdGlsZSB1MTYgKilkZXYtPm1lbV9zdGFydDsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSA9IGRldi0+bWNfbGlzdDsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAljaGFyICphZGRyczsKLQlpbnQgaTsKIAl1MzIgY3JjOwogCiAJLyogc2V0IGFsbCBtdWx0aWNhc3QgYml0cyAqLwpAQCAtOTYwLDkgKzk1OSw4IEBACiAJKmxpYl9wdHIoaWIsIGZpbHRlclszXSwgbHAtPnR5cGUpID0gMDsKIAogCS8qIEFkZCBhZGRyZXNzZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrKSB7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKIAkJYWRkcnMgPSBkbWktPmRtaV9hZGRyOwotCQlkbWkgPSBkbWktPm5leHQ7CiAKIAkJLyogbXVsdGljYXN0IGFkZHJlc3M/ICovCiAJCWlmICghKCphZGRycyAmIDEpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGVmeHguYyBiL2RyaXZlcnMvbmV0L2RlZnh4LmMKaW5kZXggNmE2ZWEwMy4uZWQ1M2E4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZGVmeHguYworKysgYi9kcml2ZXJzL25ldC9kZWZ4eC5jCkBAIC0xMDUyLDEyICsxMDUyLDkgQEAKIAkJYm9hcmRfbmFtZSA9ICJERUZFQSI7CiAJaWYgKGRmeF9idXNfcGNpKQogCQlib2FyZF9uYW1lID0gIkRFRlBBIjsKLQlwcl9pbmZvKCIlczogJXMgYXQgJXNhZGRyID0gMHglbGx4LCBJUlEgPSAlZCwgIgotCQkiSGFyZHdhcmUgYWRkciA9ICUwMlgtJTAyWC0lMDJYLSUwMlgtJTAyWC0lMDJYXG4iLAorCXByX2luZm8oIiVzOiAlcyBhdCAlc2FkZHIgPSAweCVsbHgsIElSUSA9ICVkLCBIYXJkd2FyZSBhZGRyID0gJXBNRlxuIiwKIAkJcHJpbnRfbmFtZSwgYm9hcmRfbmFtZSwgZGZ4X3VzZV9tbWlvID8gIiIgOiAiSS9PICIsCi0JCShsb25nIGxvbmcpYmFyX3N0YXJ0LCBkZXYtPmlycSwKLQkJZGV2LT5kZXZfYWRkclswXSwgZGV2LT5kZXZfYWRkclsxXSwgZGV2LT5kZXZfYWRkclsyXSwKLQkJZGV2LT5kZXZfYWRkclszXSwgZGV2LT5kZXZfYWRkcls0XSwgZGV2LT5kZXZfYWRkcls1XSk7CisJCShsb25nIGxvbmcpYmFyX3N0YXJ0LCBkZXYtPmlycSwgZGV2LT5kZXZfYWRkcik7CiAKIAkvKgogCSAqIEdldCBtZW1vcnkgZm9yIGRlc2NyaXB0b3IgYmxvY2ssIGNvbnN1bWVyIGJsb2NrLCBhbmQgb3RoZXIgYnVmZmVycwpAQCAtMjIzMCw3ICsyMjI3LDcgQEAKIAkJICoJCSBwZXJmZWN0IGZpbHRlcmluZyB3aWxsIGJlIHVzZWQuCiAJCSAqLwogCi0JCWlmIChkZXYtPm1jX2NvdW50ID4gKFBJX0NNRF9BRERSX0ZJTFRFUl9LX1NJWkUgLSBicC0+dWNfY291bnQpKQorCQlpZiAobmV0ZGV2X21jX2NvdW50KGRldikgPiAoUElfQ01EX0FERFJfRklMVEVSX0tfU0laRSAtIGJwLT51Y19jb3VudCkpCiAJCQl7CiAJCQlicC0+Z3JvdXBfcHJvbQk9IFBJX0ZTVEFURV9LX1BBU1M7CQkvKiBFbmFibGUgTExDIGdyb3VwIHByb20gbW9kZSAqLwogCQkJYnAtPm1jX2NvdW50CT0gMDsJCQkJCS8qIERvbid0IGFkZCBtYyBhZGRycyB0byBDQU0gKi8KQEAgLTIyMzgsMTcgKzIyMzUsMTYgQEAKIAkJZWxzZQogCQkJewogCQkJYnAtPmdyb3VwX3Byb20JPSBQSV9GU1RBVEVfS19CTE9DSzsJLyogRGlzYWJsZSBMTEMgZ3JvdXAgcHJvbSBtb2RlICovCi0JCQlicC0+bWNfY291bnQJPSBkZXYtPm1jX2NvdW50OwkJLyogQWRkIG1jIGFkZHJzIHRvIENBTSAqLworCQkJYnAtPm1jX2NvdW50CT0gbmV0ZGV2X21jX2NvdW50KGRldik7CQkvKiBBZGQgbWMgYWRkcnMgdG8gQ0FNICovCiAJCQl9CiAKIAkJLyogQ29weSBhZGRyZXNzZXMgdG8gbXVsdGljYXN0IGFkZHJlc3MgdGFibGUsIHRoZW4gdXBkYXRlIGFkYXB0ZXIgQ0FNICovCiAKLQkJZG1pID0gZGV2LT5tY19saXN0OwkJCQkvKiBwb2ludCB0byBmaXJzdCBtdWx0aWNhc3QgYWRkciAqLwotCQlmb3IgKGk9MDsgaSA8IGJwLT5tY19jb3VudDsgaSsrKQotCQkJewotCQkJbWVtY3B5KCZicC0+bWNfdGFibGVbaSpGRERJX0tfQUxFTl0sIGRtaS0+ZG1pX2FkZHIsIEZERElfS19BTEVOKTsKLQkJCWRtaSA9IGRtaS0+bmV4dDsJCQkvKiBwb2ludCB0byBuZXh0IG11bHRpY2FzdCBhZGRyICovCi0JCQl9CisJCWkgPSAwOworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikKKwkJCW1lbWNweSgmYnAtPm1jX3RhYmxlW2krKyAqIEZERElfS19BTEVOXSwKKwkJCSAgICAgICBkbWktPmRtaV9hZGRyLCBGRERJX0tfQUxFTik7CisKIAkJaWYgKGRmeF9jdGxfdXBkYXRlX2NhbShicCkgIT0gREZYX0tfU1VDQ0VTUykKIAkJCXsKIAkJCURCR19wcmludGsoIiVzOiBDb3VsZCBub3QgdXBkYXRlIG11bHRpY2FzdCBhZGRyZXNzIHRhYmxlIVxuIiwgZGV2LT5uYW1lKTsKQEAgLTM2MzEsNyArMzYyNyw3IEBACiAJCQkJICAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKik7CiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgZGZ4X3BjaV91bnJlZ2lzdGVyKHN0cnVjdCBwY2lfZGV2ICopOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZGZ4X3BjaV90YWJsZVtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGRmeF9wY2lfdGFibGUpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0RFQywgUENJX0RFVklDRV9JRF9ERUNfRkRESSkgfSwKIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kZXBjYS5jIGIvZHJpdmVycy9uZXQvZGVwY2EuYwppbmRleCAwYzFmNDkxLi43NDRjMTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZXBjYS5jCisrKyBiL2RyaXZlcnMvbmV0L2RlcGNhLmMKQEAgLTEyNzIsNyArMTI3Miw3IEBACiBzdGF0aWMgdm9pZCBTZXRNdWx0aWNhc3RGaWx0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZGVwY2FfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCWNoYXIgKmFkZHJzOwogCWludCBpLCBqLCBiaXQsIGJ5dGU7CiAJdTE2IGhhc2hjb2RlOwpAQCAtMTI4Nyw5ICsxMjg3LDggQEAKIAkJCWxwLT5pbml0X2Jsb2NrLm1jYXN0X3RhYmxlW2ldID0gMDsKIAkJfQogCQkvKiBBZGQgbXVsdGljYXN0IGFkZHJlc3NlcyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrKSB7CS8qIGZvciBlYWNoIGFkZHJlc3MgaW4gdGhlIGxpc3QgKi8KKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKIAkJCWFkZHJzID0gZG1pLT5kbWlfYWRkcjsKLQkJCWRtaSA9IGRtaS0+bmV4dDsKIAkJCWlmICgoKmFkZHJzICYgMHgwMSkgPT0gMSkgewkvKiBtdWx0aWNhc3QgYWRkcmVzcz8gKi8KIAkJCQljcmMgPSBldGhlcl9jcmMoRVRIX0FMRU4sIGFkZHJzKTsKIAkJCQloYXNoY29kZSA9IChjcmMgJiAxKTsJLyogaGFzaGNvZGUgaXMgNiBMU2Igb2YgQ1JDIC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGwyay5jIGIvZHJpdmVycy9uZXQvZGwyay5jCmluZGV4IDJhOGI2YTcuLmIwNWJhZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RsMmsuYworKysgYi9kcml2ZXJzL25ldC9kbDJrLmMKQEAgLTExMjgsMTkgKzExMjgsMTYgQEAKIAkJLyogUmVjZWl2ZSBhbGwgZnJhbWVzIHByb21pc2N1b3VzbHkuICovCiAJCXJ4X21vZGUgPSBSZWNlaXZlQWxsRnJhbWVzOwogCX0gZWxzZSBpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8Ci0JCQkoZGV2LT5tY19jb3VudCA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpKSB7CisJCQkobmV0ZGV2X21jX2NvdW50KGRldikgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSkgewogCQkvKiBSZWNlaXZlIGJyb2FkY2FzdCBhbmQgbXVsdGljYXN0IGZyYW1lcyAqLwogCQlyeF9tb2RlID0gUmVjZWl2ZUJyb2FkY2FzdCB8IFJlY2VpdmVNdWx0aWNhc3QgfCBSZWNlaXZlVW5pY2FzdDsKLQl9IGVsc2UgaWYgKGRldi0+bWNfY291bnQgPiAwKSB7Ci0JCWludCBpOworCX0gZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwogCQkvKiBSZWNlaXZlIGJyb2FkY2FzdCBmcmFtZXMgYW5kIG11bHRpY2FzdCBmcmFtZXMgZmlsdGVyaW5nCiAJCSAgIGJ5IEhhc2h0YWJsZSAqLwogCQlyeF9tb2RlID0KIAkJICAgIFJlY2VpdmVCcm9hZGNhc3QgfCBSZWNlaXZlTXVsdGljYXN0SGFzaCB8IFJlY2VpdmVVbmljYXN0OwotCQlmb3IgKGk9MCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7Ci0JCQkJaSsrLCBtY2xpc3Q9bWNsaXN0LT5uZXh0KQotCQl7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCQlpbnQgYml0LCBpbmRleCA9IDA7CiAJCQlpbnQgY3JjID0gZXRoZXJfY3JjX2xlIChFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcik7CiAJCQkvKiBUaGUgaW52ZXJ0ZWQgaGlnaCBzaWduaWZpY2FudCA2IGJpdHMgb2YgQ1JDIGFyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGwyay5oIGIvZHJpdmVycy9uZXQvZGwyay5oCmluZGV4IDI2NmVjODcuLjdjYWFiM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RsMmsuaAorKysgYi9kcml2ZXJzL25ldC9kbDJrLmgKQEAgLTUzNyw3ICs1MzcsNyBAQAogICAgICAgICBkcml2ZXJfZGF0YSAgICAgICAgICAgICBEYXRhIHByaXZhdGUgdG8gdGhlIGRyaXZlci4KICovCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCByaW9fcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHJpb19wY2lfdGJsKSA9IHsKIAl7MHgxMTg2LCAweDQwMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJezB4MTNmMCwgMHgxMDIxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXsgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZG05MDAwLmMgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwppbmRleCBiMzc3MzAwLi4xYzY3ZjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kbTkwMDAuYworKysgYi9kcml2ZXJzL25ldC9kbTkwMDAuYwpAQCAtNzI0LDggKzcyNCw3IEBACiBkbTkwMDBfaGFzaF90YWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWJvYXJkX2luZm9fdCAqZGIgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNwdHIgPSBkZXYtPm1jX2xpc3Q7Ci0JaW50IG1jX2NudCA9IGRldi0+bWNfY291bnQ7CisJc3RydWN0IGRldl9tY19saXN0ICptY3B0cjsKIAlpbnQgaSwgb2Z0OwogCXUzMiBoYXNoX3ZhbDsKIAl1MTYgaGFzaF90YWJsZVs0XTsKQEAgLTc1Myw3ICs3NTIsNyBAQAogCQlyY3IgfD0gUkNSX0FMTDsKIAogCS8qIHRoZSBtdWx0aWNhc3QgYWRkcmVzcyBpbiBIYXNoIFRhYmxlIDogNjQgYml0cyAqLwotCWZvciAoaSA9IDA7IGkgPCBtY19jbnQ7IGkrKywgbWNwdHIgPSBtY3B0ci0+bmV4dCkgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jcHRyLCBkZXYpIHsKIAkJaGFzaF92YWwgPSBldGhlcl9jcmNfbGUoNiwgbWNwdHItPmRtaV9hZGRyKSAmIDB4M2Y7CiAJCWhhc2hfdGFibGVbaGFzaF92YWwgLyAxNl0gfD0gKHUxNikgMSA8PCAoaGFzaF92YWwgJSAxNik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMC5jIGIvZHJpdmVycy9uZXQvZTEwMC5jCmluZGV4IDgzOWZiMmIuLmEyNmNjYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAuYworKysgYi9kcml2ZXJzL25ldC9lMTAwLmMKQEAgLTIwOCw3ICsyMDgsNyBAQAogI2RlZmluZSBJTlRFTF84MjU1WF9FVEhFUk5FVF9ERVZJQ0UoZGV2aWNlX2lkLCBpY2gpIHtcCiAJUENJX1ZFTkRPUl9JRF9JTlRFTCwgZGV2aWNlX2lkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBcCiAJUENJX0NMQVNTX05FVFdPUktfRVRIRVJORVQgPDwgOCwgMHhGRkZGMDAsIGljaCB9Ci1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZTEwMF9pZF90YWJsZVtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGUxMDBfaWRfdGFibGUpID0gewogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEwMjksIDApLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEwMzAsIDApLAogCUlOVEVMXzgyNTVYX0VUSEVSTkVUX0RFVklDRSgweDEwMzEsIDMpLApAQCAtMTUzNywxNCArMTUzNywxOCBAQAogc3RhdGljIHZvaWQgZTEwMF9tdWx0aShzdHJ1Y3QgbmljICpuaWMsIHN0cnVjdCBjYiAqY2IsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5pYy0+bmV0ZGV2OwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqbGlzdCA9IG5ldGRldi0+bWNfbGlzdDsKLQl1MTYgaSwgY291bnQgPSBtaW4obmV0ZGV2LT5tY19jb3VudCwgRTEwMF9NQVhfTVVMVElDQVNUX0FERFJTKTsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmxpc3Q7CisJdTE2IGksIGNvdW50ID0gbWluKG5ldGRldl9tY19jb3VudChuZXRkZXYpLCBFMTAwX01BWF9NVUxUSUNBU1RfQUREUlMpOwogCiAJY2ItPmNvbW1hbmQgPSBjcHVfdG9fbGUxNihjYl9tdWx0aSk7CiAJY2ItPnUubXVsdGkuY291bnQgPSBjcHVfdG9fbGUxNihjb3VudCAqIEVUSF9BTEVOKTsKLQlmb3IgKGkgPSAwOyBsaXN0ICYmIGkgPCBjb3VudDsgaSsrLCBsaXN0ID0gbGlzdC0+bmV4dCkKLQkJbWVtY3B5KCZjYi0+dS5tdWx0aS5hZGRyW2kqRVRIX0FMRU5dLCAmbGlzdC0+ZG1pX2FkZHIsCisJaSA9IDA7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobGlzdCwgbmV0ZGV2KSB7CisJCWlmIChpID09IGNvdW50KQorCQkJYnJlYWs7CisJCW1lbWNweSgmY2ItPnUubXVsdGkuYWRkcltpKysgKiBFVEhfQUxFTl0sICZsaXN0LT5kbWlfYWRkciwKIAkJCUVUSF9BTEVOKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGUxMDBfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCkBAIC0xNTUyLDcgKzE1NTYsNyBAQAogCXN0cnVjdCBuaWMgKm5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKIAlEUFJJTlRLKEhXLCBERUJVRywgIm1jX2NvdW50PSVkLCBmbGFncz0weCUwNFhcbiIsCi0JCW5ldGRldi0+bWNfY291bnQsIG5ldGRldi0+ZmxhZ3MpOworCQluZXRkZXZfbWNfY291bnQobmV0ZGV2KSwgbmV0ZGV2LT5mbGFncyk7CiAKIAlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQogCQluaWMtPmZsYWdzIHw9IHByb21pc2N1b3VzOwpAQCAtMTU2MCw3ICsxNTY0LDcgQEAKIAkJbmljLT5mbGFncyAmPSB+cHJvbWlzY3VvdXM7CiAKIAlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fAotCQluZXRkZXYtPm1jX2NvdW50ID4gRTEwMF9NQVhfTVVMVElDQVNUX0FERFJTKQorCQluZXRkZXZfbWNfY291bnQobmV0ZGV2KSA+IEUxMDBfTUFYX01VTFRJQ0FTVF9BRERSUykKIAkJbmljLT5mbGFncyB8PSBtdWx0aWNhc3RfYWxsOwogCWVsc2UKIAkJbmljLT5mbGFncyAmPSB+bXVsdGljYXN0X2FsbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmggYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMC5oCmluZGV4IGU4OTMyZGIuLjk5MDJiMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwLmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDAuaApAQCAtMzQ5LDYgKzM0OSw3IEBACiBleHRlcm4gdm9pZCBlMTAwMF9mcmVlX2FsbF9yeF9yZXNvdXJjZXMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgZTEwMDBfZnJlZV9hbGxfdHhfcmVzb3VyY2VzKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiB2b2lkIGUxMDAwX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gYm9vbCBlMTAwMF9oYXNfbGluayhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gdm9pZCBlMTAwMF9wb3dlcl91cF9waHkoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKik7CiBleHRlcm4gdm9pZCBlMTAwMF9zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiBleHRlcm4gdm9pZCBlMTAwMF9jaGVja19vcHRpb25zKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2V0aHRvb2wuYwppbmRleCAxM2U5ZWNlLi5jNjdlOTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfZXRodG9vbC5jCkBAIC0yMTUsNiArMjE1LDIzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1MzIgZTEwMDBfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwkvKgorCSAqIElmIHRoZSBsaW5rIGlzIG5vdCByZXBvcnRlZCB1cCB0byBuZXRkZXYsIGludGVycnVwdHMgYXJlIGRpc2FibGVkLAorCSAqIGFuZCBzbyB0aGUgcGh5c2ljYWwgbGluayBzdGF0ZSBtYXkgaGF2ZSBjaGFuZ2VkIHNpbmNlIHdlIGxhc3QKKwkgKiBsb29rZWQuIFNldCBnZXRfbGlua19zdGF0dXMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHRydWUgbGluaworCSAqIHN0YXRlIGlzIGludGVycm9nYXRlZCwgcmF0aGVyIHRoYW4gcHVsbGluZyBhIGNhY2hlZCBhbmQgcG9zc2libHkKKwkgKiBzdGFsZSBsaW5rIHN0YXRlIGZyb20gdGhlIGRyaXZlci4KKwkgKi8KKwlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkKKwkJYWRhcHRlci0+aHcuZ2V0X2xpbmtfc3RhdHVzID0gMTsKKworCXJldHVybiBlMTAwMF9oYXNfbGluayhhZGFwdGVyKTsKK30KKwogc3RhdGljIHZvaWQgZTEwMDBfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCiB7CkBAIC0xODkyLDcgKzE5MDksNyBAQAogCS5nZXRfbXNnbGV2ZWwgICAgICAgICAgID0gZTEwMDBfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwgICAgICAgICAgID0gZTEwMDBfc2V0X21zZ2xldmVsLAogCS5ud2F5X3Jlc2V0ICAgICAgICAgICAgID0gZTEwMDBfbndheV9yZXNldCwKLQkuZ2V0X2xpbmsgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9saW5rICAgICAgICAgICAgICAgPSBlMTAwMF9nZXRfbGluaywKIAkuZ2V0X2VlcHJvbV9sZW4gICAgICAgICA9IGUxMDAwX2dldF9lZXByb21fbGVuLAogCS5nZXRfZWVwcm9tICAgICAgICAgICAgID0gZTEwMDBfZ2V0X2VlcHJvbSwKIAkuc2V0X2VlcHJvbSAgICAgICAgICAgICA9IGUxMDAwX3NldF9lZXByb20sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMgYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9tYWluLmMKaW5kZXggNzY1NTQzNi4uOGJlNmZhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX21haW4uYwpAQCAtNDIsNyArNDIsNyBAQAogICogTWFjcm8gZXhwYW5kcyB0by4uLgogICogICB7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBkZXZpY2VfaWQpfQogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZTEwMDBfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGUxMDAwX3BjaV90YmwpID0gewogCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwMDApLAogCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwMDEpLAogCUlOVEVMX0UxMDAwX0VUSEVSTkVUX0RFVklDRSgweDEwMDQpLApAQCAtODQ3LDYgKzg0Nyw5IEBACiAJCWdvdG8gZXJyX3BjaV9yZWc7CiAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKKwllcnIgPSBwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9hbGxvY19ldGhlcmRldjsKIAogCWVyciA9IC1FTk9NRU07CiAJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBlMTAwMF9hZGFwdGVyKSk7CkBAIC0yMTI3LDcgKzIxMzAsNyBAQAogCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX1ZGRTsKIAl9CiAKLQlpZiAobmV0ZGV2LT51Yy5jb3VudCA+IHJhcl9lbnRyaWVzIC0gMSkgeworCWlmIChuZXRkZXZfdWNfY291bnQobmV0ZGV2KSA+IHJhcl9lbnRyaWVzIC0gMSkgewogCQlyY3RsIHw9IEUxMDAwX1JDVExfVVBFOwogCX0gZWxzZSBpZiAoIShuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpKSB7CiAJCXJjdGwgJj0gfkUxMDAwX1JDVExfVVBFOwpAQCAtMjE1MCw3ICsyMTUzLDcgQEAKIAkgKi8KIAlpID0gMTsKIAlpZiAodXNlX3VjKQotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhLCAmbmV0ZGV2LT51Yy5saXN0LCBsaXN0KSB7CisJCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBuZXRkZXYpIHsKIAkJCWlmIChpID09IHJhcl9lbnRyaWVzKQogCQkJCWJyZWFrOwogCQkJZTEwMDBfcmFyX3NldChodywgaGEtPmFkZHIsIGkrKyk7CkBAIC0yMTU4LDI5ICsyMTYxLDI1IEBACiAKIAlXQVJOX09OKGkgPT0gcmFyX2VudHJpZXMpOwogCi0JbWNfcHRyID0gbmV0ZGV2LT5tY19saXN0OwotCi0JZm9yICg7IGkgPCByYXJfZW50cmllczsgaSsrKSB7Ci0JCWlmIChtY19wdHIpIHsKLQkJCWUxMDAwX3Jhcl9zZXQoaHcsIG1jX3B0ci0+ZGFfYWRkciwgaSk7Ci0JCQltY19wdHIgPSBtY19wdHItPm5leHQ7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfcHRyLCBuZXRkZXYpIHsKKwkJaWYgKGkgPT0gcmFyX2VudHJpZXMpIHsKKwkJCS8qIGxvYWQgYW55IHJlbWFpbmluZyBhZGRyZXNzZXMgaW50byB0aGUgaGFzaCB0YWJsZSAqLworCQkJdTMyIGhhc2hfcmVnLCBoYXNoX2JpdCwgbXRhOworCQkJaGFzaF92YWx1ZSA9IGUxMDAwX2hhc2hfbWNfYWRkcihodywgbWNfcHRyLT5kYV9hZGRyKTsKKwkJCWhhc2hfcmVnID0gKGhhc2hfdmFsdWUgPj4gNSkgJiAweDdGOworCQkJaGFzaF9iaXQgPSBoYXNoX3ZhbHVlICYgMHgxRjsKKwkJCW10YSA9ICgxIDw8IGhhc2hfYml0KTsKKwkJCW1jYXJyYXlbaGFzaF9yZWddIHw9IG10YTsKIAkJfSBlbHNlIHsKLQkJCUUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgUkEsIGkgPDwgMSwgMCk7Ci0JCQlFMTAwMF9XUklURV9GTFVTSCgpOwotCQkJRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBSQSwgKGkgPDwgMSkgKyAxLCAwKTsKLQkJCUUxMDAwX1dSSVRFX0ZMVVNIKCk7CisJCQllMTAwMF9yYXJfc2V0KGh3LCBtY19wdHItPmRhX2FkZHIsIGkrKyk7CiAJCX0KIAl9CiAKLQkvKiBsb2FkIGFueSByZW1haW5pbmcgYWRkcmVzc2VzIGludG8gdGhlIGhhc2ggdGFibGUgKi8KLQotCWZvciAoOyBtY19wdHI7IG1jX3B0ciA9IG1jX3B0ci0+bmV4dCkgewotCQl1MzIgaGFzaF9yZWcsIGhhc2hfYml0LCBtdGE7Ci0JCWhhc2hfdmFsdWUgPSBlMTAwMF9oYXNoX21jX2FkZHIoaHcsIG1jX3B0ci0+ZGFfYWRkcik7Ci0JCWhhc2hfcmVnID0gKGhhc2hfdmFsdWUgPj4gNSkgJiAweDdGOwotCQloYXNoX2JpdCA9IGhhc2hfdmFsdWUgJiAweDFGOwotCQltdGEgPSAoMSA8PCBoYXNoX2JpdCk7Ci0JCW1jYXJyYXlbaGFzaF9yZWddIHw9IG10YTsKKwlmb3IgKDsgaSA8IHJhcl9lbnRyaWVzOyBpKyspIHsKKwkJRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBSQSwgaSA8PCAxLCAwKTsKKwkJRTEwMDBfV1JJVEVfRkxVU0goKTsKKwkJRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBSQSwgKGkgPDwgMSkgKyAxLCAwKTsKKwkJRTEwMDBfV1JJVEVfRkxVU0goKTsKIAl9CiAKIAkvKiB3cml0ZSB0aGUgaGFzaCB0YWJsZSBjb21wbGV0ZWx5LCB3cml0ZSBmcm9tIGJvdHRvbSB0byBhdm9pZApAQCAtMjI0Niw3ICsyMjQ1LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBib29sIGUxMDAwX2hhc19saW5rKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQorYm9vbCBlMTAwMF9oYXNfbGluayhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCWJvb2wgbGlua19hY3RpdmUgPSBmYWxzZTsKQEAgLTQ2MTMsNiArNDYxMiw3IEBACiAKIAlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJcGNpX3NhdmVfc3RhdGUocGRldik7CiAKIAlpZiAoYWRhcHRlci0+bmVlZF9pb3BvcnQpCiAJCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlLzgyNTcxLmMgYi9kcml2ZXJzL25ldC9lMTAwMGUvODI1NzEuYwppbmRleCAwMmQ2N2QwLi43MTJjY2M2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvODI1NzEuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvODI1NzEuYwpAQCAtMjY3LDggKzI2NywxNCBAQAogCX0KIAogCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7CisJY2FzZSBlMTAwMF84MjU3MzoKKwkJZnVuYy0+c2V0X2xhbl9pZCA9IGUxMDAwX3NldF9sYW5faWRfc2luZ2xlX3BvcnQ7CisJCWZ1bmMtPmNoZWNrX21uZ19tb2RlID0gZTEwMDBlX2NoZWNrX21uZ19tb2RlX2dlbmVyaWM7CisJCWZ1bmMtPmxlZF9vbiA9IGUxMDAwZV9sZWRfb25fZ2VuZXJpYzsKKwkJYnJlYWs7CiAJY2FzZSBlMTAwMF84MjU3NDoKIAljYXNlIGUxMDAwXzgyNTgzOgorCQlmdW5jLT5zZXRfbGFuX2lkID0gZTEwMDBfc2V0X2xhbl9pZF9zaW5nbGVfcG9ydDsKIAkJZnVuYy0+Y2hlY2tfbW5nX21vZGUgPSBlMTAwMF9jaGVja19tbmdfbW9kZV84MjU3NDsKIAkJZnVuYy0+bGVkX29uID0gZTEwMDBfbGVkX29uXzgyNTc0OwogCQlicmVhazsKQEAgLTkyMiw5ICs5MjgsMTIgQEAKIAlldzMyKElNQywgMHhmZmZmZmZmZik7CiAJaWNyID0gZXIzMihJQ1IpOwogCi0JaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3MSAmJgotCQlody0+ZGV2X3NwZWMuZTgyNTcxLmFsdF9tYWNfYWRkcl9pc19wcmVzZW50KQotCQkJZTEwMDBlX3NldF9sYWFfc3RhdGVfODI1NzEoaHcsIHRydWUpOworCS8qIEluc3RhbGwgYW55IGFsdGVybmF0ZSBNQUMgYWRkcmVzcyBpbnRvIFJBUjAgKi8KKwlyZXRfdmFsID0gZTEwMDBfY2hlY2tfYWx0X21hY19hZGRyX2dlbmVyaWMoaHcpOworCWlmIChyZXRfdmFsKQorCQlyZXR1cm4gcmV0X3ZhbDsKKworCWUxMDAwZV9zZXRfbGFhX3N0YXRlXzgyNTcxKGh3LCB0cnVlKTsKIAogCS8qIFJlaW5pdGlhbGl6ZSB0aGUgODI1NzEgc2VyZGVzIGxpbmsgc3RhdGUgbWFjaGluZSAqLwogCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMpCkBAIC0xMjI1LDMyICsxMjM0LDYgQEAKIH0KIAogLyoqCi0gKiAgZTEwMDBfdXBkYXRlX21jX2FkZHJfbGlzdF84MjU3MSAtIFVwZGF0ZSBNdWx0aWNhc3QgYWRkcmVzc2VzCi0gKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKLSAqICBAbWNfYWRkcl9saXN0OiBhcnJheSBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIHByb2dyYW0KLSAqICBAbWNfYWRkcl9jb3VudDogbnVtYmVyIG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gcHJvZ3JhbQotICogIEByYXJfdXNlZF9jb3VudDogdGhlIGZpcnN0IFJBUiByZWdpc3RlciBmcmVlIHRvIHByb2dyYW0KLSAqICBAcmFyX2NvdW50OiB0b3RhbCBudW1iZXIgb2Ygc3VwcG9ydGVkIFJlY2VpdmUgQWRkcmVzcyBSZWdpc3RlcnMKLSAqCi0gKiAgVXBkYXRlcyB0aGUgUmVjZWl2ZSBBZGRyZXNzIFJlZ2lzdGVycyBhbmQgTXVsdGljYXN0IFRhYmxlIEFycmF5LgotICogIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGEgcGFja2VkIG1jX2FkZHJfbGlzdCBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzLgotICogIFRoZSBwYXJhbWV0ZXIgcmFyX2NvdW50IHdpbGwgdXN1YWxseSBiZSBody0+bWFjLnJhcl9lbnRyeV9jb3VudAotICogIHVubGVzcyB0aGVyZSBhcmUgd29ya2Fyb3VuZHMgdGhhdCBjaGFuZ2UgdGhpcy4KLSAqKi8KLXN0YXRpYyB2b2lkIGUxMDAwX3VwZGF0ZV9tY19hZGRyX2xpc3RfODI1NzEoc3RydWN0IGUxMDAwX2h3ICpodywKLQkJCQkJICAgIHU4ICptY19hZGRyX2xpc3QsCi0JCQkJCSAgICB1MzIgbWNfYWRkcl9jb3VudCwKLQkJCQkJICAgIHUzMiByYXJfdXNlZF9jb3VudCwKLQkJCQkJICAgIHUzMiByYXJfY291bnQpCi17Ci0JaWYgKGUxMDAwZV9nZXRfbGFhX3N0YXRlXzgyNTcxKGh3KSkKLQkJcmFyX2NvdW50LS07Ci0KLQllMTAwMGVfdXBkYXRlX21jX2FkZHJfbGlzdF9nZW5lcmljKGh3LCBtY19hZGRyX2xpc3QsIG1jX2FkZHJfY291bnQsCi0JCQkJCSAgIHJhcl91c2VkX2NvdW50LCByYXJfY291bnQpOwotfQotCi0vKioKICAqICBlMTAwMF9zZXR1cF9saW5rXzgyNTcxIC0gU2V0dXAgZmxvdyBjb250cm9sIGFuZCBsaW5rIHNldHRpbmdzCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCkBAIC0xMzYzLDcgKzEzNDYsNyBAQAogICoKICAqICAxKSBkb3duCiAgKiAgMikgYXV0b25lZ19wcm9ncmVzcwotICogIDMpIGF1dG9uZWdfY29tcGxldGUgKHRoZSBsaW5rIHN1Y2Vzc2Z1bGx5IGF1dG9uZWdvdGlhdGVkKQorICogIDMpIGF1dG9uZWdfY29tcGxldGUgKHRoZSBsaW5rIHN1Y2Nlc3NmdWxseSBhdXRvbmVnb3RpYXRlZCkKICAqICA0KSBmb3JjZWRfdXAgKHRoZSBsaW5rIGhhcyBiZWVuIGZvcmNlZCB1cCwgaXQgZGlkIG5vdCBhdXRvbmVnb3RpYXRlKQogICoKICAqKi8KQEAgLTE2MjEsNiArMTYwNCwyOSBAQAogfQogCiAvKioKKyAqICBlMTAwMF9yZWFkX21hY19hZGRyXzgyNTcxIC0gUmVhZCBkZXZpY2UgTUFDIGFkZHJlc3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoqLworc3RhdGljIHMzMiBlMTAwMF9yZWFkX21hY19hZGRyXzgyNTcxKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJczMyIHJldF92YWwgPSAwOworCisJLyoKKwkgKiBJZiB0aGVyZSdzIGFuIGFsdGVybmF0ZSBNQUMgYWRkcmVzcyBwbGFjZSBpdCBpbiBSQVIwCisJICogc28gdGhhdCBpdCB3aWxsIG92ZXJyaWRlIHRoZSBTaSBpbnN0YWxsZWQgZGVmYXVsdCBwZXJtCisJICogYWRkcmVzcy4KKwkgKi8KKwlyZXRfdmFsID0gZTEwMDBfY2hlY2tfYWx0X21hY19hZGRyX2dlbmVyaWMoaHcpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKKworCXJldF92YWwgPSBlMTAwMF9yZWFkX21hY19hZGRyX2dlbmVyaWMoaHcpOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgogICogZTEwMDBfcG93ZXJfZG93bl9waHlfY29wcGVyXzgyNTcxIC0gUmVtb3ZlIGxpbmsgZHVyaW5nIFBIWSBwb3dlciBkb3duCiAgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKQEAgLTE2OTUsMTAgKzE3MDEsMTEgQEAKIAkuY2xlYW51cF9sZWQJCT0gZTEwMDBlX2NsZWFudXBfbGVkX2dlbmVyaWMsCiAJLmNsZWFyX2h3X2NudHJzCQk9IGUxMDAwX2NsZWFyX2h3X2NudHJzXzgyNTcxLAogCS5nZXRfYnVzX2luZm8JCT0gZTEwMDBlX2dldF9idXNfaW5mb19wY2llLAorCS5zZXRfbGFuX2lkCQk9IGUxMDAwX3NldF9sYW5faWRfbXVsdGlfcG9ydF9wY2llLAogCS8qIC5nZXRfbGlua191cF9pbmZvOiBtZWRpYSB0eXBlIGRlcGVuZGVudCAqLwogCS8qIC5sZWRfb246IG1hYyB0eXBlIGRlcGVuZGVudCAqLwogCS5sZWRfb2ZmCQk9IGUxMDAwZV9sZWRfb2ZmX2dlbmVyaWMsCi0JLnVwZGF0ZV9tY19hZGRyX2xpc3QJPSBlMTAwMF91cGRhdGVfbWNfYWRkcl9saXN0XzgyNTcxLAorCS51cGRhdGVfbWNfYWRkcl9saXN0CT0gZTEwMDBlX3VwZGF0ZV9tY19hZGRyX2xpc3RfZ2VuZXJpYywKIAkud3JpdGVfdmZ0YQkJPSBlMTAwMF93cml0ZV92ZnRhX2dlbmVyaWMsCiAJLmNsZWFyX3ZmdGEJCT0gZTEwMDBfY2xlYXJfdmZ0YV84MjU3MSwKIAkucmVzZXRfaHcJCT0gZTEwMDBfcmVzZXRfaHdfODI1NzEsCkBAIC0xNzA2LDYgKzE3MTMsNyBAQAogCS5zZXR1cF9saW5rCQk9IGUxMDAwX3NldHVwX2xpbmtfODI1NzEsCiAJLyogLnNldHVwX3BoeXNpY2FsX2ludGVyZmFjZTogbWVkaWEgdHlwZSBkZXBlbmRlbnQgKi8KIAkuc2V0dXBfbGVkCQk9IGUxMDAwZV9zZXR1cF9sZWRfZ2VuZXJpYywKKwkucmVhZF9tYWNfYWRkcgkJPSBlMTAwMF9yZWFkX21hY19hZGRyXzgyNTcxLAogfTsKIAogc3RhdGljIHN0cnVjdCBlMTAwMF9waHlfb3BlcmF0aW9ucyBlODJfcGh5X29wc19pZ3AgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZGVmaW5lcy5oIGIvZHJpdmVycy9uZXQvZTEwMDBlL2RlZmluZXMuaAppbmRleCBlMDJlMzgyLi5kYjA1ZWMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZGVmaW5lcy5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9kZWZpbmVzLmgKQEAgLTQ2MCw2ICs0NjAsOCBAQAogICovCiAjZGVmaW5lIEUxMDAwX1JBUl9FTlRSSUVTICAgICAxNQogI2RlZmluZSBFMTAwMF9SQUhfQVYgIDB4ODAwMDAwMDAgICAgICAgIC8qIFJlY2VpdmUgZGVzY3JpcHRvciB2YWxpZCAqLworI2RlZmluZSBFMTAwMF9SQUxfTUFDX0FERFJfTEVOIDQKKyNkZWZpbmUgRTEwMDBfUkFIX01BQ19BRERSX0xFTiAyCiAKIC8qIEVycm9yIENvZGVzICovCiAjZGVmaW5lIEUxMDAwX0VSUl9OVk0gICAgICAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lMTAwMGUvZTEwMDAuaCBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCmluZGV4IGQyMzZlZmEuLmMyZWMwOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCisrKyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMC5oCkBAIC00NTksNyArNDU5LDcgQEAKIGV4dGVybiB2b2lkIGUxMDAwZV9mcmVlX3J4X3Jlc291cmNlcyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gdm9pZCBlMTAwMGVfZnJlZV90eF9yZXNvdXJjZXMoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgZTEwMDBlX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7Ci1leHRlcm4gYm9vbCBlMTAwMF9oYXNfbGluayhzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gYm9vbCBlMTAwMGVfaGFzX2xpbmsoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogZXh0ZXJuIHZvaWQgZTEwMDBlX3NldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlcik7CiBleHRlcm4gdm9pZCBlMTAwMGVfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpOwogCkBAIC01MDMsNiArNTAzLDggQEAKIGV4dGVybiBzMzIgZTEwMDBlX2xlZF9vbl9nZW5lcmljKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHMzMiBlMTAwMGVfbGVkX29mZl9nZW5lcmljKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHMzMiBlMTAwMGVfZ2V0X2J1c19pbmZvX3BjaWUoc3RydWN0IGUxMDAwX2h3ICpodyk7CitleHRlcm4gdm9pZCBlMTAwMF9zZXRfbGFuX2lkX211bHRpX3BvcnRfcGNpZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK2V4dGVybiB2b2lkIGUxMDAwX3NldF9sYW5faWRfc2luZ2xlX3BvcnQoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gczMyIGUxMDAwZV9nZXRfc3BlZWRfYW5kX2R1cGxleF9jb3BwZXIoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2ICpzcGVlZCwgdTE2ICpkdXBsZXgpOwogZXh0ZXJuIHMzMiBlMTAwMGVfZ2V0X3NwZWVkX2FuZF9kdXBsZXhfZmliZXJfc2VyZGVzKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiAqc3BlZWQsIHUxNiAqZHVwbGV4KTsKIGV4dGVybiBzMzIgZTEwMDBlX2Rpc2FibGVfcGNpZV9tYXN0ZXIoc3RydWN0IGUxMDAwX2h3ICpodyk7CkBAIC01MTcsOSArNTE5LDcgQEAKIGV4dGVybiB2b2lkIGUxMDAwZV9pbml0X3J4X2FkZHJzKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiByYXJfY291bnQpOwogZXh0ZXJuIHZvaWQgZTEwMDBlX3VwZGF0ZV9tY19hZGRyX2xpc3RfZ2VuZXJpYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LAogCQkJCQkgICAgICAgdTggKm1jX2FkZHJfbGlzdCwKLQkJCQkJICAgICAgIHUzMiBtY19hZGRyX2NvdW50LAotCQkJCQkgICAgICAgdTMyIHJhcl91c2VkX2NvdW50LAotCQkJCQkgICAgICAgdTMyIHJhcl9jb3VudCk7CisJCQkJCSAgICAgICB1MzIgbWNfYWRkcl9jb3VudCk7CiBleHRlcm4gdm9pZCBlMTAwMGVfcmFyX3NldChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1OCAqYWRkciwgdTMyIGluZGV4KTsKIGV4dGVybiBzMzIgZTEwMDBlX3NldF9mY193YXRlcm1hcmtzKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHZvaWQgZTEwMDBlX3NldF9wY2llX25vX3Nub29wKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBub19zbm9vcCk7CkBAIC01MzAsNiArNTMwLDcgQEAKIGV4dGVybiBzMzIgZTEwMDBlX2ZvcmNlX21hY19mYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiBzMzIgZTEwMDBlX2JsaW5rX2xlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiB2b2lkIGUxMDAwX3dyaXRlX3ZmdGFfZ2VuZXJpYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MzIgdmFsdWUpOworZXh0ZXJuIHMzMiBlMTAwMF9jaGVja19hbHRfbWFjX2FkZHJfZ2VuZXJpYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiB2b2lkIGUxMDAwZV9yZXNldF9hZGFwdGl2ZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIGV4dGVybiB2b2lkIGUxMDAwZV91cGRhdGVfYWRhcHRpdmUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiAKQEAgLTYyOSw3ICs2MzAsMTUgQEAKIGV4dGVybiBzMzIgZTEwMDBlX3ZhbGlkYXRlX252bV9jaGVja3N1bV9nZW5lcmljKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHZvaWQgZTEwMDBlX3JlbGVhc2VfbnZtKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogZXh0ZXJuIHZvaWQgZTEwMDBlX3JlbG9hZF9udm0oc3RydWN0IGUxMDAwX2h3ICpodyk7Ci1leHRlcm4gczMyIGUxMDAwZV9yZWFkX21hY19hZGRyKHN0cnVjdCBlMTAwMF9odyAqaHcpOworZXh0ZXJuIHMzMiBlMTAwMF9yZWFkX21hY19hZGRyX2dlbmVyaWMoc3RydWN0IGUxMDAwX2h3ICpodyk7CisKK3N0YXRpYyBpbmxpbmUgczMyIGUxMDAwZV9yZWFkX21hY19hZGRyKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJaWYgKGh3LT5tYWMub3BzLnJlYWRfbWFjX2FkZHIpCisJCXJldHVybiBody0+bWFjLm9wcy5yZWFkX21hY19hZGRyKGh3KTsKKworCXJldHVybiBlMTAwMF9yZWFkX21hY19hZGRyX2dlbmVyaWMoaHcpOworfQogCiBzdGF0aWMgaW5saW5lIHMzMiBlMTAwMF92YWxpZGF0ZV9udm1fY2hlY2tzdW0oc3RydWN0IGUxMDAwX2h3ICpodykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9lczJsYW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9lczJsYW4uYwppbmRleCBlMmFhM2I3Li4yN2QyMTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvZXMybGFuLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2VzMmxhbi5jCkBAIC0yNDYsNiArMjQ2LDkgQEAKIAkJYnJlYWs7CiAJfQogCisJLyogc2V0IGxhbiBpZCBmb3IgcG9ydCB0byBkZXRlcm1pbmUgd2hpY2ggcGh5IGxvY2sgdG8gdXNlICovCisJaHctPm1hYy5vcHMuc2V0X2xhbl9pZChodyk7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtODE0LDcgKzgxNyw5IEBACiAJZXczMihJTUMsIDB4ZmZmZmZmZmYpOwogCWljciA9IGVyMzIoSUNSKTsKIAotCXJldHVybiAwOworCXJldF92YWwgPSBlMTAwMF9jaGVja19hbHRfbWFjX2FkZHJfZ2VuZXJpYyhodyk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKIH0KIAogLyoqCkBAIC0xMzQwLDYgKzEzNDUsMjkgQEAKIH0KIAogLyoqCisgKiAgZTEwMDBfcmVhZF9tYWNfYWRkcl84MDAwM2VzMmxhbiAtIFJlYWQgZGV2aWNlIE1BQyBhZGRyZXNzCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyBzMzIgZTEwMDBfcmVhZF9tYWNfYWRkcl84MDAwM2VzMmxhbihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXMzMiByZXRfdmFsID0gMDsKKworCS8qCisJICogSWYgdGhlcmUncyBhbiBhbHRlcm5hdGUgTUFDIGFkZHJlc3MgcGxhY2UgaXQgaW4gUkFSMAorCSAqIHNvIHRoYXQgaXQgd2lsbCBvdmVycmlkZSB0aGUgU2kgaW5zdGFsbGVkIGRlZmF1bHQgcGVybQorCSAqIGFkZHJlc3MuCisJICovCisJcmV0X3ZhbCA9IGUxMDAwX2NoZWNrX2FsdF9tYWNfYWRkcl9nZW5lcmljKGh3KTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwlyZXRfdmFsID0gZTEwMDBfcmVhZF9tYWNfYWRkcl9nZW5lcmljKGh3KTsKKworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKICAqIGUxMDAwX3Bvd2VyX2Rvd25fcGh5X2NvcHBlcl84MDAwM2VzMmxhbiAtIFJlbW92ZSBsaW5rIGR1cmluZyBQSFkgcG93ZXIgZG93bgogICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCkBAIC0xNDAzLDEyICsxNDMxLDE0IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZTEwMDBfbWFjX29wZXJhdGlvbnMgZXMyX21hY19vcHMgPSB7CisJLnJlYWRfbWFjX2FkZHIJCT0gZTEwMDBfcmVhZF9tYWNfYWRkcl84MDAwM2VzMmxhbiwKIAkuaWRfbGVkX2luaXQJCT0gZTEwMDBlX2lkX2xlZF9pbml0LAogCS5jaGVja19tbmdfbW9kZQkJPSBlMTAwMGVfY2hlY2tfbW5nX21vZGVfZ2VuZXJpYywKIAkvKiBjaGVja19mb3JfbGluayBkZXBlbmRlbnQgb24gbWVkaWEgdHlwZSAqLwogCS5jbGVhbnVwX2xlZAkJPSBlMTAwMGVfY2xlYW51cF9sZWRfZ2VuZXJpYywKIAkuY2xlYXJfaHdfY250cnMJCT0gZTEwMDBfY2xlYXJfaHdfY250cnNfODAwMDNlczJsYW4sCiAJLmdldF9idXNfaW5mbwkJPSBlMTAwMGVfZ2V0X2J1c19pbmZvX3BjaWUsCisJLnNldF9sYW5faWQJCT0gZTEwMDBfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWUsCiAJLmdldF9saW5rX3VwX2luZm8JPSBlMTAwMF9nZXRfbGlua191cF9pbmZvXzgwMDAzZXMybGFuLAogCS5sZWRfb24JCQk9IGUxMDAwZV9sZWRfb25fZ2VuZXJpYywKIAkubGVkX29mZgkJPSBlMTAwMGVfbGVkX29mZl9nZW5lcmljLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9ldGh0b29sLmMKaW5kZXggMGFhNTBjMi4uYjMzZTNjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvZXRodG9vbC5jCkBAIC0yMDIsNyArMjAyLDcgQEAKIAlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkKIAkJbWFjLT5nZXRfbGlua19zdGF0dXMgPSAxOwogCi0JcmV0dXJuIGUxMDAwX2hhc19saW5rKGFkYXB0ZXIpOworCXJldHVybiBlMTAwMGVfaGFzX2xpbmsoYWRhcHRlcik7CiB9CiAKIHN0YXRpYyBpbnQgZTEwMDBfc2V0X3NwZF9kcGx4KHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyLCB1MTYgc3BkZHBseCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9ody5oIGIvZHJpdmVycy9uZXQvZTEwMDBlL2h3LmgKaW5kZXggZWNjZjI5Yi4uOGJkY2Q1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2h3LmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2h3LmgKQEAgLTM4OSw2ICszODksOSBAQAogCiAjZGVmaW5lIEUxMDAwX0ZVTkNfMSAxCiAKKyNkZWZpbmUgRTEwMDBfQUxUX01BQ19BRERSRVNTX09GRlNFVF9MQU4wICAgMAorI2RlZmluZSBFMTAwMF9BTFRfTUFDX0FERFJFU1NfT0ZGU0VUX0xBTjEgICAzCisKIGVudW0gZTEwMDBfbWFjX3R5cGUgewogCWUxMDAwXzgyNTcxLAogCWUxMDAwXzgyNTcyLApAQCAtNzQ2LDE2ICs3NDksMTggQEAKIAl2b2lkICgqY2xlYXJfaHdfY250cnMpKHN0cnVjdCBlMTAwMF9odyAqKTsKIAl2b2lkICgqY2xlYXJfdmZ0YSkoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpnZXRfYnVzX2luZm8pKHN0cnVjdCBlMTAwMF9odyAqKTsKKwl2b2lkICgqc2V0X2xhbl9pZCkoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpnZXRfbGlua191cF9pbmZvKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2ICosIHUxNiAqKTsKIAlzMzIgICgqbGVkX29uKShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJczMyICAoKmxlZF9vZmYpKHN0cnVjdCBlMTAwMF9odyAqKTsKLQl2b2lkICgqdXBkYXRlX21jX2FkZHJfbGlzdCkoc3RydWN0IGUxMDAwX2h3ICosIHU4ICosIHUzMiwgdTMyLCB1MzIpOworCXZvaWQgKCp1cGRhdGVfbWNfYWRkcl9saXN0KShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTggKiwgdTMyKTsKIAlzMzIgICgqcmVzZXRfaHcpKHN0cnVjdCBlMTAwMF9odyAqKTsKIAlzMzIgICgqaW5pdF9odykoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpzZXR1cF9saW5rKShzdHJ1Y3QgZTEwMDBfaHcgKik7CiAJczMyICAoKnNldHVwX3BoeXNpY2FsX2ludGVyZmFjZSkoc3RydWN0IGUxMDAwX2h3ICopOwogCXMzMiAgKCpzZXR1cF9sZWQpKHN0cnVjdCBlMTAwMF9odyAqKTsKIAl2b2lkICgqd3JpdGVfdmZ0YSkoc3RydWN0IGUxMDAwX2h3ICosIHUzMiwgdTMyKTsKKwlzMzIgICgqcmVhZF9tYWNfYWRkcikoc3RydWN0IGUxMDAwX2h3ICopOwogfTsKIAogLyogRnVuY3Rpb24gcG9pbnRlcnMgZm9yIHRoZSBQSFkuICovCkBAIC04MTQsNiArODE5LDEwIEBACiAJdTE2IGlmc19yYXRpbzsKIAl1MTYgaWZzX3N0ZXBfc2l6ZTsKIAl1MTYgbXRhX3JlZ19jb3VudDsKKworCS8qIE1heGltdW0gc2l6ZSBvZiB0aGUgTVRBIHJlZ2lzdGVyIHRhYmxlIGluIGFsbCBzdXBwb3J0ZWQgYWRhcHRlcnMgKi8KKwkjZGVmaW5lIE1BWF9NVEFfUkVHIDEyOAorCXUzMiBtdGFfc2hhZG93W01BWF9NVEFfUkVHXTsKIAl1MTYgcmFyX2VudHJ5X2NvdW50OwogCiAJdTggIGZvcmNlZF9zcGVlZF9kdXBsZXg7CkBAIC04OTcsNyArOTA2LDYgQEAKIAogc3RydWN0IGUxMDAwX2Rldl9zcGVjXzgyNTcxIHsKIAlib29sIGxhYV9pc19wcmVzZW50OwotCWJvb2wgYWx0X21hY19hZGRyX2lzX3ByZXNlbnQ7CiAJdTMyIHNtYl9jb3VudGVyOwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9pY2g4bGFuLmMKaW5kZXggOGI2ZWNkMS4uNTRkMDNhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZTEwMDBlL2ljaDhsYW4uYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvaWNoOGxhbi5jCkBAIC0zMzY4LDYgKzMzNjgsNyBAQAogCS8qIGNsZWFudXBfbGVkIGRlcGVuZGVudCBvbiBtYWMgdHlwZSAqLwogCS5jbGVhcl9od19jbnRycwkJPSBlMTAwMF9jbGVhcl9od19jbnRyc19pY2g4bGFuLAogCS5nZXRfYnVzX2luZm8JCT0gZTEwMDBfZ2V0X2J1c19pbmZvX2ljaDhsYW4sCisJLnNldF9sYW5faWQJCT0gZTEwMDBfc2V0X2xhbl9pZF9zaW5nbGVfcG9ydCwKIAkuZ2V0X2xpbmtfdXBfaW5mbwk9IGUxMDAwX2dldF9saW5rX3VwX2luZm9faWNoOGxhbiwKIAkvKiBsZWRfb24gZGVwZW5kZW50IG9uIG1hYyB0eXBlICovCiAJLyogbGVkX29mZiBkZXBlbmRlbnQgb24gbWFjIHR5cGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYyBiL2RyaXZlcnMvbmV0L2UxMDAwZS9saWIuYwppbmRleCAyZmE5YjM2Li5hOGIyYzBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lMTAwMGUvbGliLmMKKysrIGIvZHJpdmVycy9uZXQvZTEwMDBlL2xpYi5jCkBAIC01MSwxMCArNTEsMTAgQEAKICAqKi8KIHMzMiBlMTAwMGVfZ2V0X2J1c19pbmZvX3BjaWUoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKKwlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOwogCXN0cnVjdCBlMTAwMF9idXNfaW5mbyAqYnVzID0gJmh3LT5idXM7CiAJc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YWRhcHRlcjsKLQl1MzIgc3RhdHVzOwotCXUxNiBwY2llX2xpbmtfc3RhdHVzLCBwY2lfaGVhZGVyX3R5cGUsIGNhcF9vZmZzZXQ7CisJdTE2IHBjaWVfbGlua19zdGF0dXMsIGNhcF9vZmZzZXQ7CiAKIAljYXBfb2Zmc2V0ID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShhZGFwdGVyLT5wZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CiAJaWYgKCFjYXBfb2Zmc2V0KSB7CkBAIC02OCwyMCArNjgsNDYgQEAKIAkJCQkJCSAgICBQQ0lFX0xJTktfV0lEVEhfU0hJRlQpOwogCX0KIAotCXBjaV9yZWFkX2NvbmZpZ193b3JkKGFkYXB0ZXItPnBkZXYsIFBDSV9IRUFERVJfVFlQRV9SRUdJU1RFUiwKLQkJCSAgICAgJnBjaV9oZWFkZXJfdHlwZSk7Ci0JaWYgKHBjaV9oZWFkZXJfdHlwZSAmIFBDSV9IRUFERVJfVFlQRV9NVUxUSUZVTkMpIHsKLQkJc3RhdHVzID0gZXIzMihTVEFUVVMpOwotCQlidXMtPmZ1bmMgPSAoc3RhdHVzICYgRTEwMDBfU1RBVFVTX0ZVTkNfTUFTSykKLQkJCSAgICA+PiBFMTAwMF9TVEFUVVNfRlVOQ19TSElGVDsKLQl9IGVsc2UgewotCQlidXMtPmZ1bmMgPSAwOwotCX0KKwltYWMtPm9wcy5zZXRfbGFuX2lkKGh3KTsKIAogCXJldHVybiAwOwogfQogCiAvKioKKyAqICBlMTAwMF9zZXRfbGFuX2lkX211bHRpX3BvcnRfcGNpZSAtIFNldCBMQU4gaWQgZm9yIFBDSWUgbXVsdGlwbGUgcG9ydCBkZXZpY2VzCisgKgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIERldGVybWluZXMgdGhlIExBTiBmdW5jdGlvbiBpZCBieSByZWFkaW5nIG1lbW9yeS1tYXBwZWQgcmVnaXN0ZXJzCisgKiAgYW5kIHN3YXBzIHRoZSBwb3J0IHZhbHVlIGlmIHJlcXVlc3RlZC4KKyAqKi8KK3ZvaWQgZTEwMDBfc2V0X2xhbl9pZF9tdWx0aV9wb3J0X3BjaWUoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwlzdHJ1Y3QgZTEwMDBfYnVzX2luZm8gKmJ1cyA9ICZody0+YnVzOworCXUzMiByZWc7CisKKwkvKgorCSAqIFRoZSBzdGF0dXMgcmVnaXN0ZXIgcmVwb3J0cyB0aGUgY29ycmVjdCBmdW5jdGlvbiBudW1iZXIKKwkgKiBmb3IgdGhlIGRldmljZSByZWdhcmRsZXNzIG9mIGZ1bmN0aW9uIHN3YXAgc3RhdGUuCisJICovCisJcmVnID0gZXIzMihTVEFUVVMpOworCWJ1cy0+ZnVuYyA9IChyZWcgJiBFMTAwMF9TVEFUVVNfRlVOQ19NQVNLKSA+PiBFMTAwMF9TVEFUVVNfRlVOQ19TSElGVDsKK30KKworLyoqCisgKiAgZTEwMDBfc2V0X2xhbl9pZF9zaW5nbGVfcG9ydCAtIFNldCBMQU4gaWQgZm9yIGEgc2luZ2xlIHBvcnQgZGV2aWNlCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgU2V0cyB0aGUgTEFOIGZ1bmN0aW9uIGlkIHRvIHplcm8gZm9yIGEgc2luZ2xlIHBvcnQgZGV2aWNlLgorICoqLwordm9pZCBlMTAwMF9zZXRfbGFuX2lkX3NpbmdsZV9wb3J0KHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJc3RydWN0IGUxMDAwX2J1c19pbmZvICpidXMgPSAmaHctPmJ1czsKKworCWJ1cy0+ZnVuYyA9IDA7Cit9CisKKy8qKgogICogIGUxMDAwX2NsZWFyX3ZmdGFfZ2VuZXJpYyAtIENsZWFyIFZMQU4gZmlsdGVyIHRhYmxlCiAgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKICAqCkBAIC0xMzksNiArMTY1LDY4IEBACiB9CiAKIC8qKgorICogIGUxMDAwX2NoZWNrX2FsdF9tYWNfYWRkcl9nZW5lcmljIC0gQ2hlY2sgZm9yIGFsdGVybmF0ZSBNQUMgYWRkcgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIENoZWNrcyB0aGUgbnZtIGZvciBhbiBhbHRlcm5hdGUgTUFDIGFkZHJlc3MuICBBbiBhbHRlcm5hdGUgTUFDIGFkZHJlc3MKKyAqICBjYW4gYmUgc2V0dXAgYnkgcHJlLWJvb3Qgc29mdHdhcmUgYW5kIG11c3QgYmUgdHJlYXRlZCBsaWtlIGEgcGVybWFuZW50CisgKiAgYWRkcmVzcyBhbmQgbXVzdCBvdmVycmlkZSB0aGUgYWN0dWFsIHBlcm1hbmVudCBNQUMgYWRkcmVzcy4gSWYgYW4KKyAqICBhbHRlcm5hdGUgTUFDIGFkZHJlc3MgaXMgZm91bmQgaXQgaXMgcHJvZ3JhbW1lZCBpbnRvIFJBUjAsIHJlcGxhY2luZworICogIHRoZSBwZXJtYW5lbnQgYWRkcmVzcyB0aGF0IHdhcyBpbnN0YWxsZWQgaW50byBSQVIwIGJ5IHRoZSBTaSBvbiByZXNldC4KKyAqICBUaGlzIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIFNVQ0NFU1MgdW5sZXNzIGl0IGVuY291bnRlcnMgYW4gZXJyb3Igd2hpbGUKKyAqICByZWFkaW5nIHRoZSBFRVBST00uCisgKiovCitzMzIgZTEwMDBfY2hlY2tfYWx0X21hY19hZGRyX2dlbmVyaWMoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1MzIgaTsKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTE2IG9mZnNldCwgbnZtX2FsdF9tYWNfYWRkcl9vZmZzZXQsIG52bV9kYXRhOworCXU4IGFsdF9tYWNfYWRkcltFVEhfQUxFTl07CisKKwlyZXRfdmFsID0gZTEwMDBfcmVhZF9udm0oaHcsIE5WTV9BTFRfTUFDX0FERFJfUFRSLCAxLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAmbnZtX2FsdF9tYWNfYWRkcl9vZmZzZXQpOworCWlmIChyZXRfdmFsKSB7CisJCWVfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChudm1fYWx0X21hY19hZGRyX29mZnNldCA9PSAweEZGRkYpIHsKKwkJLyogVGhlcmUgaXMgbm8gQWx0ZXJuYXRlIE1BQyBBZGRyZXNzICovCisJCWdvdG8gb3V0OworCX0KKworCWlmIChody0+YnVzLmZ1bmMgPT0gRTEwMDBfRlVOQ18xKQorCQludm1fYWx0X21hY19hZGRyX29mZnNldCArPSBFMTAwMF9BTFRfTUFDX0FERFJFU1NfT0ZGU0VUX0xBTjE7CisJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpICs9IDIpIHsKKwkJb2Zmc2V0ID0gbnZtX2FsdF9tYWNfYWRkcl9vZmZzZXQgKyAoaSA+PiAxKTsKKwkJcmV0X3ZhbCA9IGUxMDAwX3JlYWRfbnZtKGh3LCBvZmZzZXQsIDEsICZudm1fZGF0YSk7CisJCWlmIChyZXRfdmFsKSB7CisJCQllX2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlhbHRfbWFjX2FkZHJbaV0gPSAodTgpKG52bV9kYXRhICYgMHhGRik7CisJCWFsdF9tYWNfYWRkcltpICsgMV0gPSAodTgpKG52bV9kYXRhID4+IDgpOworCX0KKworCS8qIGlmIG11bHRpY2FzdCBiaXQgaXMgc2V0LCB0aGUgYWx0ZXJuYXRlIGFkZHJlc3Mgd2lsbCBub3QgYmUgdXNlZCAqLworCWlmIChhbHRfbWFjX2FkZHJbMF0gJiAweDAxKSB7CisJCWVfZGJnKCJJZ25vcmluZyBBbHRlcm5hdGUgTWFjIEFkZHJlc3Mgd2l0aCBNQyBiaXQgc2V0XG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoKKwkgKiBXZSBoYXZlIGEgdmFsaWQgYWx0ZXJuYXRlIE1BQyBhZGRyZXNzLCBhbmQgd2Ugd2FudCB0byB0cmVhdCBpdCB0aGUKKwkgKiBzYW1lIGFzIHRoZSBub3JtYWwgcGVybWFuZW50IE1BQyBhZGRyZXNzIHN0b3JlZCBieSB0aGUgSFcgaW50byB0aGUKKwkgKiBSQVIuIERvIHRoaXMgYnkgbWFwcGluZyB0aGlzIGFkZHJlc3MgaW50byBSQVIwLgorCSAqLworCWUxMDAwZV9yYXJfc2V0KGh3LCBhbHRfbWFjX2FkZHIsIDApOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgogICogIGUxMDAwZV9yYXJfc2V0IC0gU2V0IHJlY2VpdmUgYWRkcmVzcyByZWdpc3RlcgogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQGFkZHI6IHBvaW50ZXIgdG8gdGhlIHJlY2VpdmUgYWRkcmVzcwpAQCAtMjUyLDYyICszNDAsMzQgQEAKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBtY19hZGRyX2xpc3Q6IGFycmF5IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gcHJvZ3JhbQogICogIEBtY19hZGRyX2NvdW50OiBudW1iZXIgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBwcm9ncmFtCi0gKiAgQHJhcl91c2VkX2NvdW50OiB0aGUgZmlyc3QgUkFSIHJlZ2lzdGVyIGZyZWUgdG8gcHJvZ3JhbQotICogIEByYXJfY291bnQ6IHRvdGFsIG51bWJlciBvZiBzdXBwb3J0ZWQgUmVjZWl2ZSBBZGRyZXNzIFJlZ2lzdGVycwogICoKLSAqICBVcGRhdGVzIHRoZSBSZWNlaXZlIEFkZHJlc3MgUmVnaXN0ZXJzIGFuZCBNdWx0aWNhc3QgVGFibGUgQXJyYXkuCisgKiAgVXBkYXRlcyBlbnRpcmUgTXVsdGljYXN0IFRhYmxlIEFycmF5LgogICogIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGEgcGFja2VkIG1jX2FkZHJfbGlzdCBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzLgotICogIFRoZSBwYXJhbWV0ZXIgcmFyX2NvdW50IHdpbGwgdXN1YWxseSBiZSBody0+bWFjLnJhcl9lbnRyeV9jb3VudAotICogIHVubGVzcyB0aGVyZSBhcmUgd29ya2Fyb3VuZHMgdGhhdCBjaGFuZ2UgdGhpcy4KICAqKi8KIHZvaWQgZTEwMDBlX3VwZGF0ZV9tY19hZGRyX2xpc3RfZ2VuZXJpYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LAotCQkJCQl1OCAqbWNfYWRkcl9saXN0LCB1MzIgbWNfYWRkcl9jb3VudCwKLQkJCQkJdTMyIHJhcl91c2VkX2NvdW50LCB1MzIgcmFyX2NvdW50KQorCQkJCQl1OCAqbWNfYWRkcl9saXN0LCB1MzIgbWNfYWRkcl9jb3VudCkKIHsKLQl1MzIgaTsKLQl1MzIgKm1jYXJyYXkgPSBremFsbG9jKGh3LT5tYWMubXRhX3JlZ19jb3VudCAqIHNpemVvZih1MzIpLCBHRlBfQVRPTUlDKTsKKwl1MzIgaGFzaF92YWx1ZSwgaGFzaF9iaXQsIGhhc2hfcmVnOworCWludCBpOwogCi0JaWYgKCFtY2FycmF5KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibXVsdGljYXN0IGFycmF5IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7Ci0JCXJldHVybjsKLQl9CisJLyogY2xlYXIgbXRhX3NoYWRvdyAqLworCW1lbXNldCgmaHctPm1hYy5tdGFfc2hhZG93LCAwLCBzaXplb2YoaHctPm1hYy5tdGFfc2hhZG93KSk7CiAKLQkvKgotCSAqIExvYWQgdGhlIGZpcnN0IHNldCBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzIGludG8gdGhlIGV4YWN0Ci0JICogZmlsdGVycyAoUkFSKS4gIElmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHRvIGZpbGwgdGhlIFJBUgotCSAqIGFycmF5LCBjbGVhciB0aGUgZmlsdGVycy4KLQkgKi8KLQlmb3IgKGkgPSByYXJfdXNlZF9jb3VudDsgaSA8IHJhcl9jb3VudDsgaSsrKSB7Ci0JCWlmIChtY19hZGRyX2NvdW50KSB7Ci0JCQllMTAwMGVfcmFyX3NldChodywgbWNfYWRkcl9saXN0LCBpKTsKLQkJCW1jX2FkZHJfY291bnQtLTsKLQkJCW1jX2FkZHJfbGlzdCArPSBFVEhfQUxFTjsKLQkJfSBlbHNlIHsKLQkJCUUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgRTEwMDBfUkEsIGkgPDwgMSwgMCk7Ci0JCQllMWVfZmx1c2goKTsKLQkJCUUxMDAwX1dSSVRFX1JFR19BUlJBWShodywgRTEwMDBfUkEsIChpIDw8IDEpICsgMSwgMCk7Ci0JCQllMWVfZmx1c2goKTsKLQkJfQotCX0KLQotCS8qIExvYWQgYW55IHJlbWFpbmluZyBtdWx0aWNhc3QgYWRkcmVzc2VzIGludG8gdGhlIGhhc2ggdGFibGUuICovCi0JZm9yICg7IG1jX2FkZHJfY291bnQgPiAwOyBtY19hZGRyX2NvdW50LS0pIHsKLQkJdTMyIGhhc2hfdmFsdWUsIGhhc2hfcmVnLCBoYXNoX2JpdCwgbXRhOworCS8qIHVwZGF0ZSBtdGFfc2hhZG93IGZyb20gbWNfYWRkcl9saXN0ICovCisJZm9yIChpID0gMDsgKHUzMikgaSA8IG1jX2FkZHJfY291bnQ7IGkrKykgewogCQloYXNoX3ZhbHVlID0gZTEwMDBfaGFzaF9tY19hZGRyKGh3LCBtY19hZGRyX2xpc3QpOwotCQllX2RiZygiSGFzaCB2YWx1ZSA9IDB4JTAzWFxuIiwgaGFzaF92YWx1ZSk7CisKIAkJaGFzaF9yZWcgPSAoaGFzaF92YWx1ZSA+PiA1KSAmIChody0+bWFjLm10YV9yZWdfY291bnQgLSAxKTsKIAkJaGFzaF9iaXQgPSBoYXNoX3ZhbHVlICYgMHgxRjsKLQkJbXRhID0gKDEgPDwgaGFzaF9iaXQpOwotCQltY2FycmF5W2hhc2hfcmVnXSB8PSBtdGE7Ci0JCW1jX2FkZHJfbGlzdCArPSBFVEhfQUxFTjsKKworCQlody0+bWFjLm10YV9zaGFkb3dbaGFzaF9yZWddIHw9ICgxIDw8IGhhc2hfYml0KTsKKwkJbWNfYWRkcl9saXN0ICs9IChFVEhfQUxFTik7CiAJfQogCi0JLyogd3JpdGUgdGhlIGhhc2ggdGFibGUgY29tcGxldGVseSAqLwotCWZvciAoaSA9IDA7IGkgPCBody0+bWFjLm10YV9yZWdfY291bnQ7IGkrKykKLQkJRTEwMDBfV1JJVEVfUkVHX0FSUkFZKGh3LCBFMTAwMF9NVEEsIGksIG1jYXJyYXlbaV0pOwotCisJLyogcmVwbGFjZSB0aGUgZW50aXJlIE1UQSB0YWJsZSAqLworCWZvciAoaSA9IGh3LT5tYWMubXRhX3JlZ19jb3VudCAtIDE7IGkgPj0gMDsgaS0tKQorCQlFMTAwMF9XUklURV9SRUdfQVJSQVkoaHcsIEUxMDAwX01UQSwgaSwgaHctPm1hYy5tdGFfc2hhZG93W2ldKTsKIAllMWVfZmx1c2goKTsKLQlrZnJlZShtY2FycmF5KTsKIH0KIAogLyoqCkBAIC01ODcsNyArNjQ3LDcgQEAKIAkJCQlpZiAoIShyeGN3ICYgRTEwMDBfUlhDV19JVikpIHsKIAkJCQkJbWFjLT5zZXJkZXNfaGFzX2xpbmsgPSB0cnVlOwogCQkJCQllX2RiZygiU0VSREVTOiBMaW5rIHVwIC0gYXV0b25lZyAiCi0JCQkJCSAgICJjb21wbGV0ZWQgc3VjZXNzZnVsbHkuXG4iKTsKKwkJCQkJICAgImNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXG4iKTsKIAkJCQl9IGVsc2UgewogCQkJCQltYWMtPnNlcmRlc19oYXNfbGluayA9IGZhbHNlOwogCQkJCQllX2RiZygiU0VSREVTOiBMaW5rIGRvd24gLSBpbnZhbGlkIgpAQCAtMjA3Miw2NyArMjEzMiwyNyBAQAogfQogCiAvKioKLSAqICBlMTAwMGVfcmVhZF9tYWNfYWRkciAtIFJlYWQgZGV2aWNlIE1BQyBhZGRyZXNzCisgKiAgZTEwMDBfcmVhZF9tYWNfYWRkcl9nZW5lcmljIC0gUmVhZCBkZXZpY2UgTUFDIGFkZHJlc3MKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKICAqICBSZWFkcyB0aGUgZGV2aWNlIE1BQyBhZGRyZXNzIGZyb20gdGhlIEVFUFJPTSBhbmQgc3RvcmVzIHRoZSB2YWx1ZS4KICAqICBTaW5jZSBkZXZpY2VzIHdpdGggdHdvIHBvcnRzIHVzZSB0aGUgc2FtZSBFRVBST00sIHdlIGluY3JlbWVudCB0aGUKICAqICBsYXN0IGJpdCBpbiB0aGUgTUFDIGFkZHJlc3MgZm9yIHRoZSBzZWNvbmQgcG9ydC4KICAqKi8KLXMzMiBlMTAwMGVfcmVhZF9tYWNfYWRkcihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQorczMyIGUxMDAwX3JlYWRfbWFjX2FkZHJfZ2VuZXJpYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewotCXMzMiByZXRfdmFsOwotCXUxNiBvZmZzZXQsIG52bV9kYXRhLCBpOwotCXUxNiBtYWNfYWRkcl9vZmZzZXQgPSAwOworCXUzMiByYXJfaGlnaDsKKwl1MzIgcmFyX2xvdzsKKwl1MTYgaTsKIAotCWlmIChody0+bWFjLnR5cGUgPT0gZTEwMDBfODI1NzEpIHsKLQkJLyogQ2hlY2sgZm9yIGFuIGFsdGVybmF0ZSBNQUMgYWRkcmVzcy4gIEFuIGFsdGVybmF0ZSBNQUMKLQkJICogYWRkcmVzcyBjYW4gYmUgc2V0dXAgYnkgcHJlLWJvb3Qgc29mdHdhcmUgYW5kIG11c3QgYmUKLQkJICogdHJlYXRlZCBsaWtlIGEgcGVybWFuZW50IGFkZHJlc3MgYW5kIG11c3Qgb3ZlcnJpZGUgdGhlCi0JCSAqIGFjdHVhbCBwZXJtYW5lbnQgTUFDIGFkZHJlc3MuKi8KLQkJcmV0X3ZhbCA9IGUxMDAwX3JlYWRfbnZtKGh3LCBOVk1fQUxUX01BQ19BRERSX1BUUiwgMSwKLQkJCQkJICZtYWNfYWRkcl9vZmZzZXQpOwotCQlpZiAocmV0X3ZhbCkgewotCQkJZV9kYmcoIk5WTSBSZWFkIEVycm9yXG4iKTsKLQkJCXJldHVybiByZXRfdmFsOwotCQl9Ci0JCWlmIChtYWNfYWRkcl9vZmZzZXQgPT0gMHhGRkZGKQotCQkJbWFjX2FkZHJfb2Zmc2V0ID0gMDsKKwlyYXJfaGlnaCA9IGVyMzIoUkFIKDApKTsKKwlyYXJfbG93ID0gZXIzMihSQUwoMCkpOwogCi0JCWlmIChtYWNfYWRkcl9vZmZzZXQpIHsKLQkJCWlmIChody0+YnVzLmZ1bmMgPT0gRTEwMDBfRlVOQ18xKQotCQkJCW1hY19hZGRyX29mZnNldCArPSBFVEhfQUxFTi9zaXplb2YodTE2KTsKKwlmb3IgKGkgPSAwOyBpIDwgRTEwMDBfUkFMX01BQ19BRERSX0xFTjsgaSsrKQorCQlody0+bWFjLnBlcm1fYWRkcltpXSA9ICh1OCkocmFyX2xvdyA+PiAoaSo4KSk7CiAKLQkJCS8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgdmFsaWQgbWFjIGFkZHJlc3MgaGVyZQotCQkJKiBiZWZvcmUgdXNpbmcgaXQgKi8KLQkJCXJldF92YWwgPSBlMTAwMF9yZWFkX252bShodywgbWFjX2FkZHJfb2Zmc2V0LCAxLAotCQkJCQkJICZudm1fZGF0YSk7Ci0JCQlpZiAocmV0X3ZhbCkgewotCQkJCWVfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7Ci0JCQkJcmV0dXJuIHJldF92YWw7Ci0JCQl9Ci0JCQlpZiAobnZtX2RhdGEgJiAweDAwMDEpCi0JCQkJbWFjX2FkZHJfb2Zmc2V0ID0gMDsKLQkJfQotCi0JCWlmIChtYWNfYWRkcl9vZmZzZXQpCi0JCWh3LT5kZXZfc3BlYy5lODI1NzEuYWx0X21hY19hZGRyX2lzX3ByZXNlbnQgPSAxOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSArPSAyKSB7Ci0JCW9mZnNldCA9IG1hY19hZGRyX29mZnNldCArIChpID4+IDEpOwotCQlyZXRfdmFsID0gZTEwMDBfcmVhZF9udm0oaHcsIG9mZnNldCwgMSwgJm52bV9kYXRhKTsKLQkJaWYgKHJldF92YWwpIHsKLQkJCWVfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7Ci0JCQlyZXR1cm4gcmV0X3ZhbDsKLQkJfQotCQlody0+bWFjLnBlcm1fYWRkcltpXSA9ICh1OCkobnZtX2RhdGEgJiAweEZGKTsKLQkJaHctPm1hYy5wZXJtX2FkZHJbaSsxXSA9ICh1OCkobnZtX2RhdGEgPj4gOCk7Ci0JfQotCi0JLyogRmxpcCBsYXN0IGJpdCBvZiBtYWMgYWRkcmVzcyBpZiB3ZSdyZSBvbiBzZWNvbmQgcG9ydCAqLwotCWlmICghbWFjX2FkZHJfb2Zmc2V0ICYmIGh3LT5idXMuZnVuYyA9PSBFMTAwMF9GVU5DXzEpCi0JCWh3LT5tYWMucGVybV9hZGRyWzVdIF49IDE7CisJZm9yIChpID0gMDsgaSA8IEUxMDAwX1JBSF9NQUNfQUREUl9MRU47IGkrKykKKwkJaHctPm1hYy5wZXJtX2FkZHJbaSs0XSA9ICh1OCkocmFyX2hpZ2ggPj4gKGkqOCkpOwogCiAJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCiAJCWh3LT5tYWMuYWRkcltpXSA9IGh3LT5tYWMucGVybV9hZGRyW2ldOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jIGIvZHJpdmVycy9uZXQvZTEwMDBlL25ldGRldi5jCmluZGV4IDU3ZjE0OWIuLjg4ZDU0ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwZS9uZXRkZXYuYworKysgYi9kcml2ZXJzL25ldC9lMTAwMGUvbmV0ZGV2LmMKQEAgLTI1NDEsMjIgKzI1NDEsMTQgQEAKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICogIEBtY19hZGRyX2xpc3Q6IGFycmF5IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gcHJvZ3JhbQogICogIEBtY19hZGRyX2NvdW50OiBudW1iZXIgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBwcm9ncmFtCi0gKiAgQHJhcl91c2VkX2NvdW50OiB0aGUgZmlyc3QgUkFSIHJlZ2lzdGVyIGZyZWUgdG8gcHJvZ3JhbQotICogIEByYXJfY291bnQ6IHRvdGFsIG51bWJlciBvZiBzdXBwb3J0ZWQgUmVjZWl2ZSBBZGRyZXNzIFJlZ2lzdGVycwogICoKLSAqICBVcGRhdGVzIHRoZSBSZWNlaXZlIEFkZHJlc3MgUmVnaXN0ZXJzIGFuZCBNdWx0aWNhc3QgVGFibGUgQXJyYXkuCisgKiAgVXBkYXRlcyB0aGUgTXVsdGljYXN0IFRhYmxlIEFycmF5LgogICogIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGEgcGFja2VkIG1jX2FkZHJfbGlzdCBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzLgotICogIFRoZSBwYXJhbWV0ZXIgcmFyX2NvdW50IHdpbGwgdXN1YWxseSBiZSBody0+bWFjLnJhcl9lbnRyeV9jb3VudAotICogIHVubGVzcyB0aGVyZSBhcmUgd29ya2Fyb3VuZHMgdGhhdCBjaGFuZ2UgdGhpcy4gIEN1cnJlbnRseSBubyBmdW5jIHBvaW50ZXIKLSAqICBleGlzdHMgYW5kIGFsbCBpbXBsZW1lbnRhdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIGdlbmVyaWMgdmVyc2lvbiBvZiB0aGlzCi0gKiAgZnVuY3Rpb24uCiAgKiovCiBzdGF0aWMgdm9pZCBlMTAwMF91cGRhdGVfbWNfYWRkcl9saXN0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHU4ICptY19hZGRyX2xpc3QsCi0JCQkJICAgICAgdTMyIG1jX2FkZHJfY291bnQsIHUzMiByYXJfdXNlZF9jb3VudCwKLQkJCQkgICAgICB1MzIgcmFyX2NvdW50KQorCQkJCSAgICAgIHUzMiBtY19hZGRyX2NvdW50KQogewotCWh3LT5tYWMub3BzLnVwZGF0ZV9tY19hZGRyX2xpc3QoaHcsIG1jX2FkZHJfbGlzdCwgbWNfYWRkcl9jb3VudCwKLQkJCQkgICAgICAgIHJhcl91c2VkX2NvdW50LCByYXJfY291bnQpOworCWh3LT5tYWMub3BzLnVwZGF0ZV9tY19hZGRyX2xpc3QoaHcsIG1jX2FkZHJfbGlzdCwgbWNfYWRkcl9jb3VudCk7CiB9CiAKIC8qKgpAQCAtMjU3Miw3ICsyNTY0LDYgQEAKIHsKIAlzdHJ1Y3QgZTEwMDBfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOwogCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfcHRyOwogCXU4ICAqbXRhX2xpc3Q7CiAJdTMyIHJjdGw7CkBAIC0yNTk4LDMxICsyNTg5LDI1IEBACiAKIAlldzMyKFJDVEwsIHJjdGwpOwogCi0JaWYgKG5ldGRldi0+bWNfY291bnQpIHsKLQkJbXRhX2xpc3QgPSBrbWFsbG9jKG5ldGRldi0+bWNfY291bnQgKiA2LCBHRlBfQVRPTUlDKTsKKwlpZiAoIW5ldGRldl9tY19lbXB0eShuZXRkZXYpKSB7CisJCW10YV9saXN0ID0ga21hbGxvYyhuZXRkZXZfbWNfY291bnQobmV0ZGV2KSAqIDYsIEdGUF9BVE9NSUMpOwogCQlpZiAoIW10YV9saXN0KQogCQkJcmV0dXJuOwogCiAJCS8qIHByZXBhcmUgYSBwYWNrZWQgYXJyYXkgb2Ygb25seSBhZGRyZXNzZXMuICovCi0JCW1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsKKwkJaSA9IDA7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jX3B0ciwgbmV0ZGV2KQorCQkJbWVtY3B5KG10YV9saXN0ICsgKGkrKyAqIEVUSF9BTEVOKSwKKwkJCSAgICAgICBtY19wdHItPmRtaV9hZGRyLCBFVEhfQUxFTik7CiAKLQkJZm9yIChpID0gMDsgaSA8IG5ldGRldi0+bWNfY291bnQ7IGkrKykgewotCQkJaWYgKCFtY19wdHIpCi0JCQkJYnJlYWs7Ci0JCQltZW1jcHkobXRhX2xpc3QgKyAoaSpFVEhfQUxFTiksIG1jX3B0ci0+ZG1pX2FkZHIsCi0JCQkgICAgICAgRVRIX0FMRU4pOwotCQkJbWNfcHRyID0gbWNfcHRyLT5uZXh0OwotCQl9Ci0KLQkJZTEwMDBfdXBkYXRlX21jX2FkZHJfbGlzdChodywgbXRhX2xpc3QsIGksIDEsCi0JCQkJCSAgbWFjLT5yYXJfZW50cnlfY291bnQpOworCQllMTAwMF91cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBtdGFfbGlzdCwgaSk7CiAJCWtmcmVlKG10YV9saXN0KTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBpZiB3ZSdyZSBjYWxsZWQgZnJvbSBwcm9iZSwgd2UgbWlnaHQgbm90IGhhdmUKIAkJICogYW55dGhpbmcgdG8gZG8gaGVyZSwgc28gY2xlYXIgb3V0IHRoZSBsaXN0CiAJCSAqLwotCQllMTAwMF91cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBOVUxMLCAwLCAxLCBtYWMtPnJhcl9lbnRyeV9jb3VudCk7CisJCWUxMDAwX3VwZGF0ZV9tY19hZGRyX2xpc3QoaHcsIE5VTEwsIDApOwogCX0KIH0KIApAQCAtMzQ4Miw3ICszNDY3LDcgQEAKIAkgICAgICAgKChjdHJsICYgRTEwMDBfQ1RSTF9URkNFKSA/ICJUWCIgOiAiTm9uZSIgKSkpOwogfQogCi1ib29sIGUxMDAwX2hhc19saW5rKHN0cnVjdCBlMTAwMF9hZGFwdGVyICphZGFwdGVyKQorYm9vbCBlMTAwMGVfaGFzX2xpbmsoc3RydWN0IGUxMDAwX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlib29sIGxpbmtfYWN0aXZlID0gMDsKQEAgLTM1NjMsNyArMzU0OCw3IEBACiAJdTMyIGxpbmssIHRjdGw7CiAJaW50IHR4X3BlbmRpbmcgPSAwOwogCi0JbGluayA9IGUxMDAwX2hhc19saW5rKGFkYXB0ZXIpOworCWxpbmsgPSBlMTAwMGVfaGFzX2xpbmsoYWRhcHRlcik7CiAJaWYgKChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpICYmIGxpbmspIHsKIAkJZTEwMDBlX2VuYWJsZV9yZWNlaXZlcyhhZGFwdGVyKTsKIAkJZ290byBsaW5rX3VwOwpAQCAtNTEzNCw3ICs1MTE5LDcgQEAKIAogCWUxMDAwX2VlcHJvbV9jaGVja3MoYWRhcHRlcik7CiAKLQkvKiBjb3B5IHRoZSBNQUMgYWRkcmVzcyBvdXQgb2YgdGhlIE5WTSAqLworCS8qIGNvcHkgdGhlIE1BQyBhZGRyZXNzICovCiAJaWYgKGUxMDAwZV9yZWFkX21hY19hZGRyKCZhZGFwdGVyLT5odykpCiAJCWVfZXJyKCJOVk0gUmVhZCBFcnJvciB3aGlsZSByZWFkaW5nIE1BQyBhZGRyZXNzXG4iKTsKIApAQCAtNTMyNiw3ICs1MzExLDcgQEAKIAkucmVzdW1lID0gZTEwMDBfaW9fcmVzdW1lLAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGUxMDAwX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShlMTAwMF9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzFFQl9DT1BQRVIpLCBib2FyZF84MjU3MSB9LAogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3MUVCX0ZJQkVSKSwgYm9hcmRfODI1NzEgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzFFQl9RVUFEX0NPUFBFUiksIGJvYXJkXzgyNTcxIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lZXByby5jIGIvZHJpdmVycy9uZXQvZWVwcm8uYwppbmRleCA5NGM1OTQ5Li4xYjA1YmRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lZXByby5jCisrKyBiL2RyaXZlcnMvbmV0L2VlcHJvLmMKQEAgLTEyODcsOSArMTI4NywxMCBAQAogCXN0cnVjdCBlZXByb19sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXNob3J0IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwogCXVuc2lnbmVkIHNob3J0IG1vZGU7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWk9ZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOworCWludCBtY19jb3VudCA9IG5ldGRldl9tY19jb3VudChkZXYpOwogCi0JaWYgKGRldi0+ZmxhZ3MmKElGRl9BTExNVUxUSXxJRkZfUFJPTUlTQykgfHwgZGV2LT5tY19jb3VudCA+IDYzKQorCWlmIChkZXYtPmZsYWdzJihJRkZfQUxMTVVMVEl8SUZGX1BST01JU0MpIHx8IG1jX2NvdW50ID4gNjMpCiAJewogCQllZXByb19zdzJiYW5rMihpb2FkZHIpOyAvKiBiZSBDQVJFRlVMLCBCQU5LIDIgbm93ICovCiAJCW1vZGUgPSBpbmIoaW9hZGRyICsgUkVHMik7CkBAIC0xMjk5LDcgKzEzMDAsNyBAQAogCQllZXByb19zdzJiYW5rMChpb2FkZHIpOyAvKiBSZXR1cm4gdG8gQkFOSyAwIG5vdyAqLwogCX0KIAotCWVsc2UgaWYgKGRldi0+bWNfY291bnQ9PTAgKQorCWVsc2UgaWYgKG1jX2NvdW50ID09IDApCiAJewogCQllZXByb19zdzJiYW5rMihpb2FkZHIpOyAvKiBiZSBDQVJFRlVMLCBCQU5LIDIgbm93ICovCiAJCW1vZGUgPSBpbmIoaW9hZGRyICsgUkVHMik7CkBAIC0xMzI5LDEyICsxMzMwLDEwIEBACiAJCW91dHcoTUNfU0VUVVAsIGlvYWRkciArIElPX1BPUlQpOwogCQlvdXR3KDAsIGlvYWRkciArIElPX1BPUlQpOwogCQlvdXR3KDAsIGlvYWRkciArIElPX1BPUlQpOwotCQlvdXR3KDYqKGRldi0+bWNfY291bnQgKyAxKSwgaW9hZGRyICsgSU9fUE9SVCk7CisJCW91dHcoNiAqIChtY19jb3VudCArIDEpLCBpb2FkZHIgKyBJT19QT1JUKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrKQotCQl7Ci0JCQllYWRkcnM9KHVuc2lnbmVkIHNob3J0ICopZG1pLT5kbWlfYWRkcjsKLQkJCWRtaT1kbWktPm5leHQ7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CisJCQllYWRkcnMgPSAodW5zaWduZWQgc2hvcnQgKikgZG1pLT5kbWlfYWRkcjsKIAkJCW91dHcoKmVhZGRycysrLCBpb2FkZHIgKyBJT19QT1JUKTsKIAkJCW91dHcoKmVhZGRycysrLCBpb2FkZHIgKyBJT19QT1JUKTsKIAkJCW91dHcoKmVhZGRycysrLCBpb2FkZHIgKyBJT19QT1JUKTsKQEAgLTEzNDgsNyArMTM0Nyw3IEBACiAJCW91dGIoTUNfU0VUVVAsIGlvYWRkcik7CiAKIAkJLyogVXBkYXRlIHRoZSB0cmFuc21pdCBxdWV1ZSAqLwotCQlpID0gbHAtPnR4X2VuZCArIFhNVF9IRUFERVIgKyA2KihkZXYtPm1jX2NvdW50ICsgMSk7CisJCWkgPSBscC0+dHhfZW5kICsgWE1UX0hFQURFUiArIDYgKiAobWNfY291bnQgKyAxKTsKIAogCQlpZiAobHAtPnR4X3N0YXJ0ICE9IGxwLT50eF9lbmQpCiAJCXsKQEAgLTEzODAsOCArMTM3OSw4IEBACiAJCQkJCWJyZWFrOwogCQkJCX0gZWxzZSBpZiAoKGkgJiAweDBmKSA9PSAweDAzKQl7IC8qIE1DLURvbmUgKi8KIAkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzZXQgUnggbW9kZSB0byAlZCBhZGRyZXNzJXMuXG4iLAotCQkJCQkJZGV2LT5uYW1lLCBkZXYtPm1jX2NvdW50LAotCQkJCQkJZGV2LT5tY19jb3VudCA+IDEgPyAiZXMiOiIiKTsKKwkJCQkJCWRldi0+bmFtZSwgbWNfY291bnQsCisJCQkJCQltY19jb3VudCA+IDEgPyAiZXMiOiIiKTsKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZWV4cHJlc3MuYyBiL2RyaXZlcnMvbmV0L2VleHByZXNzLmMKaW5kZXggNmZiZmM4ZS4uNzAxM2RjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZWV4cHJlc3MuYworKysgYi9kcml2ZXJzL25ldC9lZXhwcmVzcy5jCkBAIC0xNTc4LDcgKzE1NzgsNyBAQAogewogCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCXVuc2lnbmVkIHNob3J0IGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwotCWludCBjb3VudCA9IGRldi0+bWNfY291bnQ7CisJaW50IGNvdW50ID0gbmV0ZGV2X21jX2NvdW50KGRldik7CiAJaW50IGk7CiAJaWYgKGNvdW50ID4gOCkgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogdG9vIG1hbnkgbXVsdGljYXN0IGFkZHJlc3NlcyAoJWQpXG4iLApAQCAtMTU4OCwyMyArMTU4OCwxOSBAQAogCiAJb3V0dyhDT05GX05SX01VTFRJQ0FTVCAmIH4zMSwgaW9hZGRyK1NNX1BUUik7CiAJb3V0dyg2KmNvdW50LCBpb2FkZHIrU0hBRE9XKENPTkZfTlJfTVVMVElDQVNUKSk7Ci0JZm9yIChpID0gMCwgZG1pID0gZGV2LT5tY19saXN0OyBpIDwgY291bnQ7IGkrKywgZG1pID0gZG1pLT5uZXh0KSB7Ci0JCXVuc2lnbmVkIHNob3J0ICpkYXRhOwotCQlpZiAoIWRtaSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHRvbyBmZXcgbXVsdGljYXN0IGFkZHJlc3Nlc1xuIiwgZGV2LT5uYW1lKTsKKwlpID0gMDsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgeworCQl1bnNpZ25lZCBzaG9ydCAqZGF0YSA9ICh1bnNpZ25lZCBzaG9ydCAqKSBkbWktPmRtaV9hZGRyOworCisJCWlmIChpID09IGNvdW50KQogCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGRtaS0+ZG1pX2FkZHJsZW4gIT0gRVRIX0FMRU4pIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBpbnZhbGlkIG11bHRpY2FzdCBhZGRyZXNzIGxlbmd0aCBnaXZlbi5cbiIsIGRldi0+bmFtZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlkYXRhID0gKHVuc2lnbmVkIHNob3J0ICopZG1pLT5kbWlfYWRkcjsKIAkJb3V0dygoQ09ORl9NVUxUSUNBU1QrKDYqaSkpICYgfjMxLCBpb2FkZHIrU01fUFRSKTsKIAkJb3V0dyhkYXRhWzBdLCBpb2FkZHIrU0hBRE9XKENPTkZfTVVMVElDQVNUKyg2KmkpKSk7CiAJCW91dHcoKENPTkZfTVVMVElDQVNUKyg2KmkpKzIpICYgfjMxLCBpb2FkZHIrU01fUFRSKTsKIAkJb3V0dyhkYXRhWzFdLCBpb2FkZHIrU0hBRE9XKENPTkZfTVVMVElDQVNUKyg2KmkpKzIpKTsKIAkJb3V0dygoQ09ORl9NVUxUSUNBU1QrKDYqaSkrNCkgJiB+MzEsIGlvYWRkcitTTV9QVFIpOwogCQlvdXR3KGRhdGFbMl0sIGlvYWRkcitTSEFET1coQ09ORl9NVUxUSUNBU1QrKDYqaSkrNCkpOworCQlpKys7CiAJfQogfQogCkBAIC0xNjI3LDkgKzE2MjMsOSBAQAogICAgICAgICB9CiAgICAgICAgIGlmICghKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykpIHsKICAgICAgICAgICAgICAgICBlZXhwX3NldHVwX2ZpbHRlcihkZXYpOwotICAgICAgICAgICAgICAgIGlmIChscC0+b2xkX21jX2NvdW50ICE9IGRldi0+bWNfY291bnQpIHsKKyAgICAgICAgICAgICAgICBpZiAobHAtPm9sZF9tY19jb3VudCAhPSBuZXRkZXZfbWNfY291bnQoZGV2KSkgewogICAgICAgICAgICAgICAgICAgICAgICAga2ljayA9IDE7Ci0gICAgICAgICAgICAgICAgICAgICAgICBscC0+b2xkX21jX2NvdW50ID0gZGV2LT5tY19jb3VudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxwLT5vbGRfbWNfY291bnQgPSBuZXRkZXZfbWNfY291bnQoZGV2KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaWYgKGtpY2spIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMgYi9kcml2ZXJzL25ldC9laGVhL2VoZWFfbWFpbi5jCmluZGV4IDdiNjIzMzYuLmIwMDRlYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VoZWEvZWhlYV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZWhlYS9laGVhX21haW4uYwpAQCAtMTk2Nyw3ICsxOTY3LDcgQEAKIHsKIAlzdHJ1Y3QgZWhlYV9wb3J0ICpwb3J0ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKmtfbWNsX2VudHJ5OwotCWludCByZXQsIGk7CisJaW50IHJldDsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJZWhlYV9wcm9taXNjdW91cyhkZXYsIDEpOwpAQCAtMTk4MSw3ICsxOTgxLDcgQEAKIAl9CiAJZWhlYV9hbGxtdWx0aShkZXYsIDApOwogCi0JaWYgKGRldi0+bWNfY291bnQpIHsKKwlpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCXJldCA9IGVoZWFfZHJvcF9tdWx0aWNhc3RfbGlzdChkZXYpOwogCQlpZiAocmV0KSB7CiAJCQkvKiBEcm9wcGluZyB0aGUgY3VycmVudCBtdWx0aWNhc3QgbGlzdCBmYWlsZWQuCkBAIC0xOTkwLDE1ICsxOTkwLDE0IEBACiAJCQllaGVhX2FsbG11bHRpKGRldiwgMSk7CiAJCX0KIAotCQlpZiAoZGV2LT5tY19jb3VudCA+IHBvcnQtPmFkYXB0ZXItPm1heF9tY19tYWMpIHsKKwkJaWYgKG5ldGRldl9tY19jb3VudChkZXYpID4gcG9ydC0+YWRhcHRlci0+bWF4X21jX21hYykgewogCQkJZWhlYV9pbmZvKCJNY2FzdCByZWdpc3RyYXRpb24gbGltaXQgcmVhY2hlZCAoMHglbGx4KS4gIgogCQkJCSAgIlVzZSBBTExNVUxUSSEiLAogCQkJCSAgcG9ydC0+YWRhcHRlci0+bWF4X21jX21hYyk7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCWZvciAoaSA9IDAsIGtfbWNsX2VudHJ5ID0gZGV2LT5tY19saXN0OyBpIDwgZGV2LT5tY19jb3VudDsgaSsrLAotCQkJICAgICBrX21jbF9lbnRyeSA9IGtfbWNsX2VudHJ5LT5uZXh0KQorCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihrX21jbF9lbnRyeSwgZGV2KQogCQkJZWhlYV9hZGRfbXVsdGljYXN0X2VudHJ5KHBvcnQsIGtfbWNsX2VudHJ5LT5kbWlfYWRkcik7CiAKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmMyOGo2MC5jIGIvZHJpdmVycy9uZXQvZW5jMjhqNjAuYwppbmRleCA2NjgxM2M5Li4zZWUzMmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmMyOGo2MC5jCisrKyBiL2RyaXZlcnMvbmV0L2VuYzI4ajYwLmMKQEAgLTE0MTMsNyArMTQxMyw3IEBACiAJCWlmIChuZXRpZl9tc2dfbGluayhwcml2KSkKIAkJCWRldl9pbmZvKCZkZXYtPmRldiwgInByb21pc2N1b3VzIG1vZGVcbiIpOwogCQlwcml2LT5yeGZpbHRlciA9IFJYRklMVEVSX1BST01JU0M7Ci0JfSBlbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgZGV2LT5tY19jb3VudCkgeworCX0gZWxzZSBpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8ICFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQlpZiAobmV0aWZfbXNnX2xpbmsocHJpdikpCiAJCQlkZXZfaW5mbygmZGV2LT5kZXYsICIlc211bHRpY2FzdCBtb2RlXG4iLAogCQkJCShkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSA/ICJhbGwtIiA6ICIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pYy5oIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljLmgKaW5kZXggZTFjMjA3Ni4uZWUwMWY1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy9lbmljLmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljLmgKQEAgLTM0LDcgKzM0LDcgQEAKIAogI2RlZmluZSBEUlZfTkFNRQkJImVuaWMiCiAjZGVmaW5lIERSVl9ERVNDUklQVElPTgkJIkNpc2NvIDEwRyBFdGhlcm5ldCBEcml2ZXIiCi0jZGVmaW5lIERSVl9WRVJTSU9OCQkiMS4xLjAuMTAwIgorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMS4wLjI0MWEiCiAjZGVmaW5lIERSVl9DT1BZUklHSFQJCSJDb3B5cmlnaHQgMjAwOC0yMDA5IENpc2NvIFN5c3RlbXMsIEluYyIKICNkZWZpbmUgUEZYCQkJRFJWX05BTUUgIjogIgogCkBAIC04OSw5ICs4OSwxMiBAQAogCXNwaW5sb2NrX3QgZGV2Y21kX2xvY2s7CiAJdTggbWFjX2FkZHJbRVRIX0FMRU5dOwogCXU4IG1jX2FkZHJbRU5JQ19NVUxUSUNBU1RfUEVSRkVDVF9GSUxURVJTXVtFVEhfQUxFTl07CisJdW5zaWduZWQgaW50IGZsYWdzOwogCXVuc2lnbmVkIGludCBtY19jb3VudDsKIAlpbnQgY3N1bV9yeF9lbmFibGVkOwogCXUzMiBwb3J0X210dTsKKwl1MzIgcnhfY29hbGVzY2VfdXNlY3M7CisJdTMyIHR4X2NvYWxlc2NlX3VzZWNzOwogCiAJLyogd29yayBxdWV1ZSBjYWNoZSBsaW5lIHNlY3Rpb24gKi8KIAlfX19fY2FjaGVsaW5lX2FsaWduZWQgc3RydWN0IHZuaWNfd3Egd3FbRU5JQ19XUV9NQVhdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19tYWluLmMKaW5kZXggZjg3NTc1MS4uY2YwOThiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy9lbmljX21haW4uYworKysgYi9kcml2ZXJzL25ldC9lbmljL2VuaWNfbWFpbi5jCkBAIC01MSw3ICs1MSw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lTQ09fVklDX0VORVQgICAgICAgICAweDAwNDMgIC8qIGV0aGVybmV0IHZuaWMgKi8KIAogLyogU3VwcG9ydGVkIGRldmljZXMgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBlbmljX2lkX3RhYmxlW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoZW5pY19pZF90YWJsZSkgPSB7CiAJeyBQQ0lfVkRFVklDRShDSVNDTywgUENJX0RFVklDRV9JRF9DSVNDT19WSUNfRU5FVCkgfSwKIAl7IDAsIH0JLyogZW5kIG9mIHRhYmxlICovCiB9OwpAQCAtMjYxLDYgKzI2MSw2MiBAQAogCWVuaWMtPm1zZ19lbmFibGUgPSB2YWx1ZTsKIH0KIAorc3RhdGljIGludCBlbmljX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCXN0cnVjdCBldGh0b29sX2NvYWxlc2NlICplY21kKQoreworCXN0cnVjdCBlbmljICplbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWVjbWQtPnR4X2NvYWxlc2NlX3VzZWNzID0gZW5pYy0+dHhfY29hbGVzY2VfdXNlY3M7CisJZWNtZC0+cnhfY29hbGVzY2VfdXNlY3MgPSBlbmljLT5yeF9jb2FsZXNjZV91c2VjczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVuaWNfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjbWQpCit7CisJc3RydWN0IGVuaWMgKmVuaWMgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUzMiB0eF9jb2FsZXNjZV91c2VjczsKKwl1MzIgcnhfY29hbGVzY2VfdXNlY3M7CisKKwl0eF9jb2FsZXNjZV91c2VjcyA9IG1pbl90KHUzMiwKKwkJSU5UUl9DT0FMRVNDRV9IV19UT19VU0VDKFZOSUNfSU5UUl9USU1FUl9NQVgpLAorCQllY21kLT50eF9jb2FsZXNjZV91c2Vjcyk7CisJcnhfY29hbGVzY2VfdXNlY3MgPSBtaW5fdCh1MzIsCisJCUlOVFJfQ09BTEVTQ0VfSFdfVE9fVVNFQyhWTklDX0lOVFJfVElNRVJfTUFYKSwKKwkJZWNtZC0+cnhfY29hbGVzY2VfdXNlY3MpOworCisJc3dpdGNoICh2bmljX2Rldl9nZXRfaW50cl9tb2RlKGVuaWMtPnZkZXYpKSB7CisJY2FzZSBWTklDX0RFVl9JTlRSX01PREVfSU5UWDoKKwkJaWYgKHR4X2NvYWxlc2NlX3VzZWNzICE9IHJ4X2NvYWxlc2NlX3VzZWNzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJdm5pY19pbnRyX2NvYWxlc2NpbmdfdGltZXJfc2V0KCZlbmljLT5pbnRyW0VOSUNfSU5UWF9XUV9SUV0sCisJCQlJTlRSX0NPQUxFU0NFX1VTRUNfVE9fSFcodHhfY29hbGVzY2VfdXNlY3MpKTsKKwkJYnJlYWs7CisJY2FzZSBWTklDX0RFVl9JTlRSX01PREVfTVNJOgorCQlpZiAodHhfY29hbGVzY2VfdXNlY3MgIT0gcnhfY29hbGVzY2VfdXNlY3MpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQl2bmljX2ludHJfY29hbGVzY2luZ190aW1lcl9zZXQoJmVuaWMtPmludHJbMF0sCisJCQlJTlRSX0NPQUxFU0NFX1VTRUNfVE9fSFcodHhfY29hbGVzY2VfdXNlY3MpKTsKKwkJYnJlYWs7CisJY2FzZSBWTklDX0RFVl9JTlRSX01PREVfTVNJWDoKKwkJdm5pY19pbnRyX2NvYWxlc2NpbmdfdGltZXJfc2V0KCZlbmljLT5pbnRyW0VOSUNfTVNJWF9XUV0sCisJCQlJTlRSX0NPQUxFU0NFX1VTRUNfVE9fSFcodHhfY29hbGVzY2VfdXNlY3MpKTsKKwkJdm5pY19pbnRyX2NvYWxlc2NpbmdfdGltZXJfc2V0KCZlbmljLT5pbnRyW0VOSUNfTVNJWF9SUV0sCisJCQlJTlRSX0NPQUxFU0NFX1VTRUNfVE9fSFcocnhfY29hbGVzY2VfdXNlY3MpKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJZW5pYy0+dHhfY29hbGVzY2VfdXNlY3MgPSB0eF9jb2FsZXNjZV91c2VjczsKKwllbmljLT5yeF9jb2FsZXNjZV91c2VjcyA9IHJ4X2NvYWxlc2NlX3VzZWNzOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgZW5pY19ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NldHRpbmdzID0gZW5pY19nZXRfc2V0dGluZ3MsCiAJLmdldF9kcnZpbmZvID0gZW5pY19nZXRfZHJ2aW5mbywKQEAgLTI3OCw2ICszMzQsOCBAQAogCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKIAkuZ2V0X3RzbyA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKIAkuc2V0X3RzbyA9IGVuaWNfc2V0X3RzbywKKwkuZ2V0X2NvYWxlc2NlID0gZW5pY19nZXRfY29hbGVzY2UsCisJLnNldF9jb2FsZXNjZSA9IGVuaWNfc2V0X2NvYWxlc2NlLAogCS5nZXRfZmxhZ3MgPSBldGh0b29sX29wX2dldF9mbGFncywKIAkuc2V0X2ZsYWdzID0gZXRodG9vbF9vcF9zZXRfZmxhZ3MsCiB9OwpAQCAtMzYzLDEyICs0MjEsMTIgQEAKIAl1MzIgbXR1ID0gdm5pY19kZXZfbXR1KGVuaWMtPnZkZXYpOwogCiAJaWYgKG10dSAmJiBtdHUgIT0gZW5pYy0+cG9ydF9tdHUpIHsKKwkJZW5pYy0+cG9ydF9tdHUgPSBtdHU7CiAJCWlmIChtdHUgPCBlbmljLT5uZXRkZXYtPm10dSkKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYCiAJCQkJIiVzOiBpbnRlcmZhY2UgTVRVICglZCkgc2V0IGhpZ2hlciAiCiAJCQkJInRoYW4gc3dpdGNoIHBvcnQgTVRVICglZClcbiIsCiAJCQkJZW5pYy0+bmV0ZGV2LT5uYW1lLCBlbmljLT5uZXRkZXYtPm10dSwgbXR1KTsKLQkJZW5pYy0+cG9ydF9tdHUgPSBtdHU7CiAJfQogfQogCkBAIC02NzMsNyArNzMxLDcgQEAKIAogLyogbmV0aWZfdHhfbG9jayBoZWxkLCBwcm9jZXNzIGNvbnRleHQgd2l0aCBCSHMgZGlzYWJsZWQsIG9yIEJIICovCiBzdGF0aWMgbmV0ZGV2X3R4X3QgZW5pY19oYXJkX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBlbmljICplbmljID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3Qgdm5pY193cSAqd3EgPSAmZW5pYy0+d3FbMF07CkBAIC03NjQsMTUgKzgyMiwxNiBAQAogc3RhdGljIHZvaWQgZW5pY19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgZW5pYyAqZW5pYyA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpsaXN0ID0gbmV0ZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbGlzdDsKIAlpbnQgZGlyZWN0ZWQgPSAxOwogCWludCBtdWx0aWNhc3QgPSAobmV0ZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpID8gMSA6IDA7CiAJaW50IGJyb2FkY2FzdCA9IChuZXRkZXYtPmZsYWdzICYgSUZGX0JST0FEQ0FTVCkgPyAxIDogMDsKIAlpbnQgcHJvbWlzYyA9IChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpID8gMSA6IDA7CisJdW5zaWduZWQgaW50IG1jX2NvdW50ID0gbmV0ZGV2X21jX2NvdW50KG5ldGRldik7CiAJaW50IGFsbG11bHRpID0gKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8Ci0JICAgIChuZXRkZXYtPm1jX2NvdW50ID4gRU5JQ19NVUxUSUNBU1RfUEVSRkVDVF9GSUxURVJTKTsKKwkJICAgICAgIG1jX2NvdW50ID4gRU5JQ19NVUxUSUNBU1RfUEVSRkVDVF9GSUxURVJTOworCXVuc2lnbmVkIGludCBmbGFncyA9IG5ldGRldi0+ZmxhZ3MgfCAoYWxsbXVsdGkgPyBJRkZfQUxMTVVMVEkgOiAwKTsKIAl1OCBtY19hZGRyW0VOSUNfTVVMVElDQVNUX1BFUkZFQ1RfRklMVEVSU11bRVRIX0FMRU5dOwotCXVuc2lnbmVkIGludCBtY19jb3VudCA9IG5ldGRldi0+bWNfY291bnQ7CiAJdW5zaWduZWQgaW50IGksIGo7CiAKIAlpZiAobWNfY291bnQgPiBFTklDX01VTFRJQ0FTVF9QRVJGRUNUX0ZJTFRFUlMpCkBAIC03ODAsOCArODM5LDExIEBACiAKIAlzcGluX2xvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKIAotCXZuaWNfZGV2X3BhY2tldF9maWx0ZXIoZW5pYy0+dmRldiwgZGlyZWN0ZWQsCi0JCW11bHRpY2FzdCwgYnJvYWRjYXN0LCBwcm9taXNjLCBhbGxtdWx0aSk7CisJaWYgKGVuaWMtPmZsYWdzICE9IGZsYWdzKSB7CisJCWVuaWMtPmZsYWdzID0gZmxhZ3M7CisJCXZuaWNfZGV2X3BhY2tldF9maWx0ZXIoZW5pYy0+dmRldiwgZGlyZWN0ZWQsCisJCQltdWx0aWNhc3QsIGJyb2FkY2FzdCwgcHJvbWlzYywgYWxsbXVsdGkpOworCX0KIAogCS8qIElzIHRoZXJlIGFuIGVhc2llciB3YXk/ICBUcnlpbmcgdG8gbWluaW1pemUgdG8KIAkgKiBjYWxscyB0byBhZGQvZGVsIG11bHRpY2FzdCBhZGRycy4gIFdlIGtlZXAgdGhlCkBAIC03ODksOSArODUxLDExIEBACiAJICogbG9vayBmb3IgY2hhbmdlcyB0byBhZGQvZGVsLgogCSAqLwogCi0JZm9yIChpID0gMDsgbGlzdCAmJiBpIDwgbWNfY291bnQ7IGkrKykgewotCQltZW1jcHkobWNfYWRkcltpXSwgbGlzdC0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKLQkJbGlzdCA9IGxpc3QtPm5leHQ7CisJaSA9IDA7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobGlzdCwgbmV0ZGV2KSB7CisJCWlmIChpID09IG1jX2NvdW50KQorCQkJYnJlYWs7CisJCW1lbWNweShtY19hZGRyW2krK10sIGxpc3QtPmRtaV9hZGRyLCBFVEhfQUxFTik7CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGVuaWMtPm1jX2NvdW50OyBpKyspIHsKQEAgLTEwODQsMzQgKzExNDgsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBlbmljX3JxX2Ryb3BfYnVmKHN0cnVjdCB2bmljX3JxICpycSwKLQlzdHJ1Y3QgY3FfZGVzYyAqY3FfZGVzYywgc3RydWN0IHZuaWNfcnFfYnVmICpidWYsCi0JaW50IHNraXBwZWQsIHZvaWQgKm9wYXF1ZSkKLXsKLQlzdHJ1Y3QgZW5pYyAqZW5pYyA9IHZuaWNfZGV2X3ByaXYocnEtPnZkZXYpOwotCXN0cnVjdCBza19idWZmICpza2IgPSBidWYtPm9zX2J1ZjsKLQotCWlmIChza2lwcGVkKQotCQlyZXR1cm47Ci0KLQlwY2lfdW5tYXBfc2luZ2xlKGVuaWMtPnBkZXYsIGJ1Zi0+ZG1hX2FkZHIsCi0JCWJ1Zi0+bGVuLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCi0JZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLX0KLQotc3RhdGljIGludCBlbmljX3JxX3NlcnZpY2VfZHJvcChzdHJ1Y3Qgdm5pY19kZXYgKnZkZXYsIHN0cnVjdCBjcV9kZXNjICpjcV9kZXNjLAotCXU4IHR5cGUsIHUxNiBxX251bWJlciwgdTE2IGNvbXBsZXRlZF9pbmRleCwgdm9pZCAqb3BhcXVlKQotewotCXN0cnVjdCBlbmljICplbmljID0gdm5pY19kZXZfcHJpdih2ZGV2KTsKLQotCXZuaWNfcnFfc2VydmljZSgmZW5pYy0+cnFbcV9udW1iZXJdLCBjcV9kZXNjLAotCQljb21wbGV0ZWRfaW5kZXgsIFZOSUNfUlFfUkVUVVJOX0RFU0MsCi0JCWVuaWNfcnFfZHJvcF9idWYsIG9wYXF1ZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBlbmljX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogewogCXN0cnVjdCBlbmljICplbmljID0gY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBlbmljLCBuYXBpKTsKQEAgLTExMTksNiArMTE1NSw3IEBACiAJdW5zaWduZWQgaW50IHJxX3dvcmtfdG9fZG8gPSBidWRnZXQ7CiAJdW5zaWduZWQgaW50IHdxX3dvcmtfdG9fZG8gPSAtMTsgLyogbm8gbGltaXQgKi8KIAl1bnNpZ25lZCBpbnQgIHdvcmtfZG9uZSwgcnFfd29ya19kb25lLCB3cV93b3JrX2RvbmU7CisJaW50IGVycjsKIAogCS8qIFNlcnZpY2UgUlEgKGZpcnN0KSBhbmQgV1EKIAkgKi8KQEAgLTExNDIsMTYgKzExNzksMTkgQEAKIAkJCTAgLyogZG9uJ3QgdW5tYXNrIGludHIgKi8sCiAJCQkwIC8qIGRvbid0IHJlc2V0IGludHIgdGltZXIgKi8pOwogCi0JaWYgKHJxX3dvcmtfZG9uZSA+IDApIHsKKwllcnIgPSB2bmljX3JxX2ZpbGwoJmVuaWMtPnJxWzBdLCBlbmljLT5ycV9hbGxvY19idWYpOwogCi0JCS8qIFJlcGxlbmlzaCBSUQotCQkgKi8KKwkvKiBCdWZmZXIgYWxsb2NhdGlvbiBmYWlsZWQuIFN0YXkgaW4gcG9sbGluZworCSAqIG1vZGUgc28gd2UgY2FuIHRyeSB0byBmaWxsIHRoZSByaW5nIGFnYWluLgorCSAqLwogCi0JCXZuaWNfcnFfZmlsbCgmZW5pYy0+cnFbMF0sIGVuaWMtPnJxX2FsbG9jX2J1Zik7CisJaWYgKGVycikKKwkJcnFfd29ya19kb25lID0gcnFfd29ya190b19kbzsKIAotCX0gZWxzZSB7CisJaWYgKHJxX3dvcmtfZG9uZSA8IHJxX3dvcmtfdG9fZG8pIHsKIAotCQkvKiBJZiBubyB3b3JrIGRvbmUsIGZsdXNoIGFsbCBMUk9zIGFuZCBleGl0IHBvbGxpbmcKKwkJLyogU29tZSB3b3JrIGRvbmUsIGJ1dCBub3QgZW5vdWdoIHRvIHN0YXkgaW4gcG9sbGluZywKKwkJICogZmx1c2ggYWxsIExST3MgYW5kIGV4aXQgcG9sbGluZwogCQkgKi8KIAogCQlpZiAobmV0ZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfTFJPKQpAQCAtMTE3MCw2ICsxMjEwLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gZW5pYy0+bmV0ZGV2OwogCXVuc2lnbmVkIGludCB3b3JrX3RvX2RvID0gYnVkZ2V0OwogCXVuc2lnbmVkIGludCB3b3JrX2RvbmU7CisJaW50IGVycjsKIAogCS8qIFNlcnZpY2UgUlEKIAkgKi8KQEAgLTExNzcsMjUgKzEyMTgsMzAgQEAKIAl3b3JrX2RvbmUgPSB2bmljX2NxX3NlcnZpY2UoJmVuaWMtPmNxW0VOSUNfQ1FfUlFdLAogCQl3b3JrX3RvX2RvLCBlbmljX3JxX3NlcnZpY2UsIE5VTEwpOwogCi0JaWYgKHdvcmtfZG9uZSA+IDApIHsKKwkvKiBSZXR1cm4gaW50ciBldmVudCBjcmVkaXRzIGZvciB0aGlzIHBvbGxpbmcKKwkgKiBjeWNsZS4gIEFuIGludHIgZXZlbnQgaXMgdGhlIGNvbXBsZXRpb24gb2YgYQorCSAqIFJRIHBhY2tldC4KKwkgKi8KIAotCQkvKiBSZXBsZW5pc2ggUlEKLQkJICovCi0KLQkJdm5pY19ycV9maWxsKCZlbmljLT5ycVswXSwgZW5pYy0+cnFfYWxsb2NfYnVmKTsKLQotCQkvKiBSZXR1cm4gaW50ciBldmVudCBjcmVkaXRzIGZvciB0aGlzIHBvbGxpbmcKLQkJICogY3ljbGUuICBBbiBpbnRyIGV2ZW50IGlzIHRoZSBjb21wbGV0aW9uIG9mIGEKLQkJICogUlEgcGFja2V0LgotCQkgKi8KLQorCWlmICh3b3JrX2RvbmUgPiAwKQogCQl2bmljX2ludHJfcmV0dXJuX2NyZWRpdHMoJmVuaWMtPmludHJbRU5JQ19NU0lYX1JRXSwKIAkJCXdvcmtfZG9uZSwKIAkJCTAgLyogZG9uJ3QgdW5tYXNrIGludHIgKi8sCiAJCQkwIC8qIGRvbid0IHJlc2V0IGludHIgdGltZXIgKi8pOwotCX0gZWxzZSB7CiAKLQkJLyogSWYgbm8gd29yayBkb25lLCBmbHVzaCBhbGwgTFJPcyBhbmQgZXhpdCBwb2xsaW5nCisJZXJyID0gdm5pY19ycV9maWxsKCZlbmljLT5ycVswXSwgZW5pYy0+cnFfYWxsb2NfYnVmKTsKKworCS8qIEJ1ZmZlciBhbGxvY2F0aW9uIGZhaWxlZC4gU3RheSBpbiBwb2xsaW5nIG1vZGUKKwkgKiBzbyB3ZSBjYW4gdHJ5IHRvIGZpbGwgdGhlIHJpbmcgYWdhaW4uCisJICovCisKKwlpZiAoZXJyKQorCQl3b3JrX2RvbmUgPSB3b3JrX3RvX2RvOworCisJaWYgKHdvcmtfZG9uZSA8IHdvcmtfdG9fZG8pIHsKKworCQkvKiBTb21lIHdvcmsgZG9uZSwgYnV0IG5vdCBlbm91Z2ggdG8gc3RheSBpbiBwb2xsaW5nLAorCQkgKiBmbHVzaCBhbGwgTFJPcyBhbmQgZXhpdCBwb2xsaW5nCiAJCSAqLwogCiAJCWlmIChuZXRkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9MUk8pCkBAIC0xMzA0LDYgKzEzNTAsMjQgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgdm9pZCBlbmljX3N5bmNocm9uaXplX2lycXMoc3RydWN0IGVuaWMgKmVuaWMpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlzd2l0Y2ggKHZuaWNfZGV2X2dldF9pbnRyX21vZGUoZW5pYy0+dmRldikpIHsKKwljYXNlIFZOSUNfREVWX0lOVFJfTU9ERV9JTlRYOgorCWNhc2UgVk5JQ19ERVZfSU5UUl9NT0RFX01TSToKKwkJc3luY2hyb25pemVfaXJxKGVuaWMtPnBkZXYtPmlycSk7CisJCWJyZWFrOworCWNhc2UgVk5JQ19ERVZfSU5UUl9NT0RFX01TSVg6CisJCWZvciAoaSA9IDA7IGkgPCBlbmljLT5pbnRyX2NvdW50OyBpKyspCisJCQlzeW5jaHJvbml6ZV9pcnEoZW5pYy0+bXNpeF9lbnRyeVtpXS52ZWN0b3IpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKIHN0YXRpYyBpbnQgZW5pY19ub3RpZnlfc2V0KHN0cnVjdCBlbmljICplbmljKQogewogCWludCBlcnI7CkBAIC0xMzYwLDExICsxNDI0LDEzIEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGVuaWMtPnJxX2NvdW50OyBpKyspIHsKLQkJZXJyID0gdm5pY19ycV9maWxsKCZlbmljLT5ycVtpXSwgZW5pYy0+cnFfYWxsb2NfYnVmKTsKLQkJaWYgKGVycikgeworCQl2bmljX3JxX2ZpbGwoJmVuaWMtPnJxW2ldLCBlbmljLT5ycV9hbGxvY19idWYpOworCQkvKiBOZWVkIGF0IGxlYXN0IG9uZSBidWZmZXIgb24gcmluZyB0byBnZXQgZ29pbmcgKi8KKwkJaWYgKHZuaWNfcnFfZGVzY191c2VkKCZlbmljLT5ycVtpXSkgPT0gMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAogCQkJCSIlczogVW5hYmxlIHRvIGFsbG9jIHJlY2VpdmUgYnVmZmVycy5cbiIsCiAJCQkJbmV0ZGV2LT5uYW1lKTsKKwkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIGVycl9vdXRfbm90aWZ5X3Vuc2V0OwogCQl9CiAJfQpAQCAtMTQwOSwxNiArMTQ3NSwxOSBAQAogCXVuc2lnbmVkIGludCBpOwogCWludCBlcnI7CiAKKwlmb3IgKGkgPSAwOyBpIDwgZW5pYy0+aW50cl9jb3VudDsgaSsrKQorCQl2bmljX2ludHJfbWFzaygmZW5pYy0+aW50cltpXSk7CisKKwllbmljX3N5bmNocm9uaXplX2lycXMoZW5pYyk7CisKIAlkZWxfdGltZXJfc3luYygmZW5pYy0+bm90aWZ5X3RpbWVyKTsKIAogCXNwaW5fbG9jaygmZW5pYy0+ZGV2Y21kX2xvY2spOwogCXZuaWNfZGV2X2Rpc2FibGUoZW5pYy0+dmRldik7CiAJc3Bpbl91bmxvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKIAluYXBpX2Rpc2FibGUoJmVuaWMtPm5hcGkpOwotCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKLQotCWZvciAoaSA9IDA7IGkgPCBlbmljLT5pbnRyX2NvdW50OyBpKyspCi0JCXZuaWNfaW50cl9tYXNrKCZlbmljLT5pbnRyW2ldKTsKKwluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCW5ldGlmX3R4X2Rpc2FibGUobmV0ZGV2KTsKIAogCWZvciAoaSA9IDA7IGkgPCBlbmljLT53cV9jb3VudDsgaSsrKSB7CiAJCWVyciA9IHZuaWNfd3FfZGlzYWJsZSgmZW5pYy0+d3FbaV0pOwpAQCAtMTQzNiwxMSArMTUwNSw2IEBACiAJc3Bpbl91bmxvY2soJmVuaWMtPmRldmNtZF9sb2NrKTsKIAllbmljX2ZyZWVfaW50cihlbmljKTsKIAotCSh2b2lkKXZuaWNfY3Ffc2VydmljZSgmZW5pYy0+Y3FbRU5JQ19DUV9SUV0sCi0JCS0xLCBlbmljX3JxX3NlcnZpY2VfZHJvcCwgTlVMTCk7Ci0JKHZvaWQpdm5pY19jcV9zZXJ2aWNlKCZlbmljLT5jcVtFTklDX0NRX1dRXSwKLQkJLTEsIGVuaWNfd3Ffc2VydmljZSwgTlVMTCk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgZW5pYy0+d3FfY291bnQ7IGkrKykKIAkJdm5pY193cV9jbGVhbigmZW5pYy0+d3FbaV0sIGVuaWNfZnJlZV93cV9idWYpOwogCWZvciAoaSA9IDA7IGkgPCBlbmljLT5ycV9jb3VudDsgaSsrKQpAQCAtMTc2Miw3ICsxODI2LDggQEAKIAllcnIgPSBlbmljX3NldF9pbnRyX21vZGUoZW5pYyk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkiRmFpbGVkIHRvIHNldCBpbnRyIG1vZGUsIGFib3J0aW5nLlxuIik7CisJCQkiRmFpbGVkIHRvIHNldCBpbnRyIG1vZGUgYmFzZWQgb24gcmVzb3VyY2UgIgorCQkJImNvdW50cyBhbmQgc3lzdGVtIGNhcGFiaWxpdGllcywgYWJvcnRpbmcuXG4iKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTE5ODYsNiArMjA1MSw5IEBACiAJCWdvdG8gZXJyX291dF9kZXZfZGVpbml0OwogCX0KIAorCWVuaWMtPnR4X2NvYWxlc2NlX3VzZWNzID0gZW5pYy0+Y29uZmlnLmludHJfdGltZXJfdXNlYzsKKwllbmljLT5yeF9jb2FsZXNjZV91c2VjcyA9IGVuaWMtPnR4X2NvYWxlc2NlX3VzZWNzOworCiAJbmV0ZGV2LT5uZXRkZXZfb3BzID0gJmVuaWNfbmV0ZGV2X29wczsKIAluZXRkZXYtPndhdGNoZG9nX3RpbWVvID0gMiAqIEhaOwogCW5ldGRldi0+ZXRodG9vbF9vcHMgPSAmZW5pY19ldGh0b29sX29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19yZXMuYyBiL2RyaXZlcnMvbmV0L2VuaWMvZW5pY19yZXMuYwppbmRleCAzMjExMTE0Li4wMjgzOWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL2VuaWNfcmVzLmMKKysrIGIvZHJpdmVycy9uZXQvZW5pYy9lbmljX3Jlcy5jCkBAIC02NiwyMSArNjYsMjEgQEAKIAlHRVRfQ09ORklHKHdxX2Rlc2NfY291bnQpOwogCUdFVF9DT05GSUcocnFfZGVzY19jb3VudCk7CiAJR0VUX0NPTkZJRyhtdHUpOwotCUdFVF9DT05GSUcoaW50cl90aW1lcik7CiAJR0VUX0NPTkZJRyhpbnRyX3RpbWVyX3R5cGUpOwogCUdFVF9DT05GSUcoaW50cl9tb2RlKTsKKwlHRVRfQ09ORklHKGludHJfdGltZXJfdXNlYyk7CiAKIAljLT53cV9kZXNjX2NvdW50ID0KIAkJbWluX3QodTMyLCBFTklDX01BWF9XUV9ERVNDUywKIAkJbWF4X3QodTMyLCBFTklDX01JTl9XUV9ERVNDUywKIAkJYy0+d3FfZGVzY19jb3VudCkpOwotCWMtPndxX2Rlc2NfY291bnQgJj0gMHhmZmZmZmZmMDsgLyogbXVzdCBiZSBhbGlnbmVkIHRvIGdyb3VwcyBvZiAxNiAqLworCWMtPndxX2Rlc2NfY291bnQgJj0gMHhmZmZmZmZlMDsgLyogbXVzdCBiZSBhbGlnbmVkIHRvIGdyb3VwcyBvZiAzMiAqLwogCiAJYy0+cnFfZGVzY19jb3VudCA9CiAJCW1pbl90KHUzMiwgRU5JQ19NQVhfUlFfREVTQ1MsCiAJCW1heF90KHUzMiwgRU5JQ19NSU5fUlFfREVTQ1MsCiAJCWMtPnJxX2Rlc2NfY291bnQpKTsKLQljLT5ycV9kZXNjX2NvdW50ICY9IDB4ZmZmZmZmZjA7IC8qIG11c3QgYmUgYWxpZ25lZCB0byBncm91cHMgb2YgMTYgKi8KKwljLT5ycV9kZXNjX2NvdW50ICY9IDB4ZmZmZmZmZTA7IC8qIG11c3QgYmUgYWxpZ25lZCB0byBncm91cHMgb2YgMzIgKi8KIAogCWlmIChjLT5tdHUgPT0gMCkKIAkJYy0+bXR1ID0gMTUwMDsKQEAgLTg4LDE1ICs4OCwxNyBAQAogCQltYXhfdCh1MTYsIEVOSUNfTUlOX01UVSwKIAkJYy0+bXR1KSk7CiAKLQljLT5pbnRyX3RpbWVyID0gbWluX3QodTE2LCBWTklDX0lOVFJfVElNRVJfTUFYLCBjLT5pbnRyX3RpbWVyKTsKKwljLT5pbnRyX3RpbWVyX3VzZWMgPSBtaW5fdCh1MzIsCisJCUlOVFJfQ09BTEVTQ0VfSFdfVE9fVVNFQyhWTklDX0lOVFJfVElNRVJfTUFYKSwKKwkJYy0+aW50cl90aW1lcl91c2VjKTsKIAogCXByaW50ayhLRVJOX0lORk8gUEZYICJ2TklDIE1BQyBhZGRyICVwTSB3cS9ycSAlZC8lZFxuIiwKIAkJZW5pYy0+bWFjX2FkZHIsIGMtPndxX2Rlc2NfY291bnQsIGMtPnJxX2Rlc2NfY291bnQpOwogCXByaW50ayhLRVJOX0lORk8gUEZYICJ2TklDIG10dSAlZCBjc3VtIHR4L3J4ICVkLyVkIHRzby9scm8gJWQvJWQgIgotCQkiaW50ciB0aW1lciAlZFxuIiwKKwkJImludHIgdGltZXIgJWQgdXNlY1xuIiwKIAkJYy0+bXR1LCBFTklDX1NFVFRJTkcoZW5pYywgVFhDU1VNKSwKIAkJRU5JQ19TRVRUSU5HKGVuaWMsIFJYQ1NVTSksIEVOSUNfU0VUVElORyhlbmljLCBUU08pLAotCQlFTklDX1NFVFRJTkcoZW5pYywgTFJPKSwgYy0+aW50cl90aW1lcik7CisJCUVOSUNfU0VUVElORyhlbmljLCBMUk8pLCBjLT5pbnRyX3RpbWVyX3VzZWMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMDMsNyArMzA1LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBlbmljLT5pbnRyX2NvdW50OyBpKyspIHsKIAkJdm5pY19pbnRyX2luaXQoJmVuaWMtPmludHJbaV0sCi0JCQllbmljLT5jb25maWcuaW50cl90aW1lciwKKwkJCUlOVFJfQ09BTEVTQ0VfVVNFQ19UT19IVyhlbmljLT5jb25maWcuaW50cl90aW1lcl91c2VjKSwKIAkJCWVuaWMtPmNvbmZpZy5pbnRyX3RpbWVyX3R5cGUsCiAJCQltYXNrX29uX2Fzc2VydGlvbik7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5jIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2Rldi5jCmluZGV4IDI5YTQ4ZTguLjY5YjliNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19kZXYuYworKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZGV2LmMKQEAgLTM2LDcgKzM2LDYgQEAKIH07CiAKICNkZWZpbmUgVk5JQ19ERVZfQ0FQX0lOSVQJMHgwMDAxCi0jZGVmaW5lIFZOSUNfREVWX0NBUF9QRVJCSQkweDAwMDIKIAogc3RydWN0IHZuaWNfZGV2IHsKIAl2b2lkICpwcml2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2VuZXQuaCBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19lbmV0LmgKaW5kZXggNjMzMmFjOS4uOGVlYjY3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZW5pYy92bmljX2VuZXQuaAorKysgYi9kcml2ZXJzL25ldC9lbmljL3ZuaWNfZW5ldC5oCkBAIC0yMCw2ICsyMCwxMCBAQAogI2lmbmRlZiBfVk5JQ19FTklDX0hfCiAjZGVmaW5lIF9WTklDX0VOSUNfSF8KIAorLyogSGFyZHdhcmUgaW50ciBjb2FsZXNjZSB0aW1lciBpcyBpbiB1bml0cyBvZiAxLjV1cyAqLworI2RlZmluZSBJTlRSX0NPQUxFU0NFX1VTRUNfVE9fSFcodXNlYykgKCh1c2VjKSAqIDIvMykKKyNkZWZpbmUgSU5UUl9DT0FMRVNDRV9IV19UT19VU0VDKHVzZWMpICgodXNlYykgKiAzLzIpCisKIC8qIERldmljZS1zcGVjaWZpYyByZWdpb246IGVuZXQgY29uZmlndXJhdGlvbiAqLwogc3RydWN0IHZuaWNfZW5ldF9jb25maWcgewogCXUzMiBmbGFnczsKQEAgLTMwLDYgKzM0LDcgQEAKIAl1OCBpbnRyX3RpbWVyX3R5cGU7CiAJdTggaW50cl9tb2RlOwogCWNoYXIgZGV2bmFtZVsxNl07CisJdTMyIGludHJfdGltZXJfdXNlYzsKIH07CiAKICNkZWZpbmUgVkVORVRGX1RTTwkJMHgxCS8qIFRTTyBlbmFibGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfaW50ci5jIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuYwppbmRleCAxZjg3ODZkLi4zOTM0MzA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfaW50ci5jCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmMKQEAgLTUwLDEyICs1MCwxOCBAQAogdm9pZCB2bmljX2ludHJfaW5pdChzdHJ1Y3Qgdm5pY19pbnRyICppbnRyLCB1bnNpZ25lZCBpbnQgY29hbGVzY2luZ190aW1lciwKIAl1bnNpZ25lZCBpbnQgY29hbGVzY2luZ190eXBlLCB1bnNpZ25lZCBpbnQgbWFza19vbl9hc3NlcnRpb24pCiB7Ci0JaW93cml0ZTMyKGNvYWxlc2NpbmdfdGltZXIsICZpbnRyLT5jdHJsLT5jb2FsZXNjaW5nX3RpbWVyKTsKKwl2bmljX2ludHJfY29hbGVzY2luZ190aW1lcl9zZXQoaW50ciwgY29hbGVzY2luZ190aW1lcik7CiAJaW93cml0ZTMyKGNvYWxlc2NpbmdfdHlwZSwgJmludHItPmN0cmwtPmNvYWxlc2NpbmdfdHlwZSk7CiAJaW93cml0ZTMyKG1hc2tfb25fYXNzZXJ0aW9uLCAmaW50ci0+Y3RybC0+bWFza19vbl9hc3NlcnRpb24pOwogCWlvd3JpdGUzMigwLCAmaW50ci0+Y3RybC0+aW50X2NyZWRpdHMpOwogfQogCit2b2lkIHZuaWNfaW50cl9jb2FsZXNjaW5nX3RpbWVyX3NldChzdHJ1Y3Qgdm5pY19pbnRyICppbnRyLAorCXVuc2lnbmVkIGludCBjb2FsZXNjaW5nX3RpbWVyKQoreworCWlvd3JpdGUzMihjb2FsZXNjaW5nX3RpbWVyLCAmaW50ci0+Y3RybC0+Y29hbGVzY2luZ190aW1lcik7Cit9CisKIHZvaWQgdm5pY19pbnRyX2NsZWFuKHN0cnVjdCB2bmljX2ludHIgKmludHIpCiB7CiAJaW93cml0ZTMyKDAsICZpbnRyLT5jdHJsLT5pbnRfY3JlZGl0cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfaW50ci5oIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX2ludHIuaAppbmRleCA5YTUzNjA0Li4yZmU2YzYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfaW50ci5oCisrKyBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19pbnRyLmgKQEAgLTYxLDYgKzYxLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB2bmljX2ludHJfbWFzayhzdHJ1Y3Qgdm5pY19pbnRyICppbnRyKQogewogCWlvd3JpdGUzMigxLCAmaW50ci0+Y3RybC0+bWFzayk7CisJKHZvaWQpaW9yZWFkMzIoJmludHItPmN0cmwtPm1hc2spOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdm5pY19pbnRyX3JldHVybl9jcmVkaXRzKHN0cnVjdCB2bmljX2ludHIgKmludHIsCkBAIC0xMDEsNiArMTAyLDggQEAKIAl1bnNpZ25lZCBpbnQgaW5kZXgpOwogdm9pZCB2bmljX2ludHJfaW5pdChzdHJ1Y3Qgdm5pY19pbnRyICppbnRyLCB1bnNpZ25lZCBpbnQgY29hbGVzY2luZ190aW1lciwKIAl1bnNpZ25lZCBpbnQgY29hbGVzY2luZ190eXBlLCB1bnNpZ25lZCBpbnQgbWFza19vbl9hc3NlcnRpb24pOwordm9pZCB2bmljX2ludHJfY29hbGVzY2luZ190aW1lcl9zZXQoc3RydWN0IHZuaWNfaW50ciAqaW50ciwKKwl1bnNpZ25lZCBpbnQgY29hbGVzY2luZ190aW1lcik7CiB2b2lkIHZuaWNfaW50cl9jbGVhbihzdHJ1Y3Qgdm5pY19pbnRyICppbnRyKTsKIAogI2VuZGlmIC8qIF9WTklDX0lOVFJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19uaWMuaCBiL2RyaXZlcnMvbmV0L2VuaWMvdm5pY19uaWMuaAppbmRleCBlZWFmMzI5Li5jZjgwYWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lbmljL3ZuaWNfbmljLmgKKysrIGIvZHJpdmVycy9uZXQvZW5pYy92bmljX25pYy5oCkBAIC00MSwxMiArNDEsMTIgQEAKICNkZWZpbmUgTklDX0NGR19JR19WTEFOX1NUUklQX0VOX01BU0tfRklFTEQJMVVMCiAjZGVmaW5lIE5JQ19DRkdfSUdfVkxBTl9TVFJJUF9FTl9TSElGVAkJMjQKIAotI2RlZmluZSBOSUNfQ0ZHX1JTU19IQVNIX1RZUEVfSVBWNAkJKDEgPDwgMCkKLSNkZWZpbmUgTklDX0NGR19SU1NfSEFTSF9UWVBFX1RDUF9JUFY0CQkoMSA8PCAxKQotI2RlZmluZSBOSUNfQ0ZHX1JTU19IQVNIX1RZUEVfSVBWNgkJKDEgPDwgMikKLSNkZWZpbmUgTklDX0NGR19SU1NfSEFTSF9UWVBFX1RDUF9JUFY2CQkoMSA8PCAzKQotI2RlZmluZSBOSUNfQ0ZHX1JTU19IQVNIX1RZUEVfSVBWNl9FWAkJKDEgPDwgNCkKLSNkZWZpbmUgTklDX0NGR19SU1NfSEFTSF9UWVBFX1RDUF9JUFY2X0VYCSgxIDw8IDUpCisjZGVmaW5lIE5JQ19DRkdfUlNTX0hBU0hfVFlQRV9JUFY0CQkoMSA8PCAxKQorI2RlZmluZSBOSUNfQ0ZHX1JTU19IQVNIX1RZUEVfVENQX0lQVjQJCSgxIDw8IDIpCisjZGVmaW5lIE5JQ19DRkdfUlNTX0hBU0hfVFlQRV9JUFY2CQkoMSA8PCAzKQorI2RlZmluZSBOSUNfQ0ZHX1JTU19IQVNIX1RZUEVfVENQX0lQVjYJCSgxIDw8IDQpCisjZGVmaW5lIE5JQ19DRkdfUlNTX0hBU0hfVFlQRV9JUFY2X0VYCQkoMSA8PCA1KQorI2RlZmluZSBOSUNfQ0ZHX1JTU19IQVNIX1RZUEVfVENQX0lQVjZfRVgJKDEgPDwgNikKIAogc3RhdGljIGlubGluZSB2b2lkIHZuaWNfc2V0X25pY19jZmcodTMyICpuaWNfY2ZnLAogCXU4IHJzc19kZWZhdWx0X2NwdSwgdTggcnNzX2hhc2hfdHlwZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2VwaWMxMDAuYyBiL2RyaXZlcnMvbmV0L2VwaWMxMDAuYwppbmRleCA0MTQ5NGY3Li4zOWMyNzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9lcGljMTAwLmMKKysrIGIvZHJpdmVycy9uZXQvZXBpYzEwMC5jCkBAIC0xNjcsNyArMTY3LDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGVwaWNfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGVwaWNfcGNpX3RibCkgPSB7CiAJeyAweDEwQjgsIDB4MDAwNSwgMHgxMDkyLCAweDBBQjQsIDAsIDAsIFNNU0NfODNDMTcwXzAgfSwKIAl7IDB4MTBCOCwgMHgwMDA1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBTTVNDXzgzQzE3MCB9LAogCXsgMHgxMEI4LCAweDAwMDYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCkBAIC0xMzkwLDIxICsxMzkwLDIwIEBACiAJCW91dGwoMHgwMDJDLCBpb2FkZHIgKyBSeEN0cmwpOwogCQkvKiBVbmNvbmRpdGlvbmFsbHkgbG9nIG5ldCB0YXBzLiAqLwogCQltZW1zZXQobWNfZmlsdGVyLCAweGZmLCBzaXplb2YobWNfZmlsdGVyKSk7Ci0JfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IDApICB8fCAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisJfSBlbHNlIGlmICgoIW5ldGRldl9tY19lbXB0eShkZXYpKSB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJLyogVGhlcmUgaXMgYXBwYXJlbnRseSBhIGNoaXAgYnVnLCBzbyB0aGUgbXVsdGljYXN0IGZpbHRlcgogCQkgICBpcyBuZXZlciBlbmFibGVkLiAqLwogCQkvKiBUb28gbWFueSB0byBmaWx0ZXIgcGVyZmVjdGx5IC0tIGFjY2VwdCBhbGwgbXVsdGljYXN0cy4gKi8KIAkJbWVtc2V0KG1jX2ZpbHRlciwgMHhmZiwgc2l6ZW9mKG1jX2ZpbHRlcikpOwogCQlvdXRsKDB4MDAwQywgaW9hZGRyICsgUnhDdHJsKTsKLQl9IGVsc2UgaWYgKGRldi0+bWNfY291bnQgPT0gMCkgeworCX0gZWxzZSBpZiAobmV0ZGV2X21jX2VtcHR5KGRldikpIHsKIAkJb3V0bCgweDAwMDQsIGlvYWRkciArIFJ4Q3RybCk7CiAJCXJldHVybjsKIAl9IGVsc2UgewkJCQkJLyogTmV2ZXIgZXhlY3V0ZWQsIGZvciBub3cuICovCiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwogCiAJCW1lbXNldChtY19maWx0ZXIsIDAsIHNpemVvZihtY19maWx0ZXIpKTsKLQkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7Ci0JCQkgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCXVuc2lnbmVkIGludCBiaXRfbnIgPQogCQkJCWV0aGVyX2NyY19sZShFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgJiAweDNmOwogCQkJbWNfZmlsdGVyW2JpdF9uciA+PiAzXSB8PSAoMSA8PCBiaXRfbnIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoMTZpLmMgYi9kcml2ZXJzL25ldC9ldGgxNmkuYwppbmRleCA3MWJmZWVjLi5kM2FiZWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGgxNmkuYworKysgYi9kcml2ZXJzL25ldC9ldGgxNmkuYwpAQCAtMTM1OSw3ICsxMzU5LDcgQEAKIHsKIAlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAKLQlpZihkZXYtPm1jX2NvdW50IHx8IGRldi0+ZmxhZ3MmKElGRl9BTExNVUxUSXxJRkZfUFJPTUlTQykpCisJaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSB8fCBkZXYtPmZsYWdzJihJRkZfQUxMTVVMVEl8SUZGX1BST01JU0MpKQogCXsKIAkJb3V0YigzLCBpb2FkZHIgKyBSRUNFSVZFX01PREVfUkVHKTsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRob2MuYyBiL2RyaXZlcnMvbmV0L2V0aG9jLmMKaW5kZXggYmQxZGI5Mi4uMjA5NzQyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRob2MuYworKysgYi9kcml2ZXJzL25ldC9ldGhvYy5jCkBAIC03NTUsNyArNzU1LDcgQEAKIHsKIAlzdHJ1Y3QgZXRob2MgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBtb2RlID0gZXRob2NfcmVhZChwcml2LCBNT0RFUik7Ci0Jc3RydWN0IGRldl9tY19saXN0ICptYyA9IE5VTEw7CisJc3RydWN0IGRldl9tY19saXN0ICptYzsKIAl1MzIgaGFzaFsyXSA9IHsgMCwgMCB9OwogCiAJLyogc2V0IGxvb3BiYWNrIG1vZGUgaWYgcmVxdWVzdGVkICovCkBAIC03ODMsOCArNzgzLDggQEAKIAkJaGFzaFswXSA9IDB4ZmZmZmZmZmY7CiAJCWhhc2hbMV0gPSAweGZmZmZmZmZmOwogCX0gZWxzZSB7Ci0JCWZvciAobWMgPSBkZXYtPm1jX2xpc3Q7IG1jOyBtYyA9IG1jLT5uZXh0KSB7Ci0JCQl1MzIgY3JjID0gZXRoZXJfY3JjKG1jLT5kbWlfYWRkcmxlbiwgbWMtPmRtaV9hZGRyKTsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWMsIGRldikgeworCQkJdTMyIGNyYyA9IGV0aGVyX2NyYyhFVEhfQUxFTiwgbWMtPmRtaV9hZGRyKTsKIAkJCWludCBiaXQgPSAoY3JjID4+IDI2KSAmIDB4M2Y7CiAJCQloYXNoW2JpdCA+PiA1XSB8PSAxIDw8IChiaXQgJiAweDFmKTsKIAkJfQpAQCAtOTA0LDcgKzkwNCw3IEBACiAJfQogCiAJbW1pbyA9IGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCi0JCQlyZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLCByZXMtPm5hbWUpOworCQkJcmVzb3VyY2Vfc2l6ZShyZXMpLCByZXMtPm5hbWUpOwogCWlmICghbW1pbykgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVxdWVzdCBJL08gbWVtb3J5IHNwYWNlXG4iKTsKIAkJcmV0ID0gLUVOWElPOwpAQCAtOTE3LDcgKzkxNyw3IEBACiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKIAlpZiAocmVzKSB7CiAJCW1lbSA9IGRldm1fcmVxdWVzdF9tZW1fcmVnaW9uKCZwZGV2LT5kZXYsIHJlcy0+c3RhcnQsCi0JCQlyZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxLCByZXMtPm5hbWUpOworCQkJcmVzb3VyY2Vfc2l6ZShyZXMpLCByZXMtPm5hbWUpOwogCQlpZiAoIW1lbSkgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgbWVtb3J5IHNwYWNlXG4iKTsKIAkJCXJldCA9IC1FTlhJTzsKQEAgLTk0NSw3ICs5NDUsNyBAQAogCXByaXYtPmRtYV9hbGxvYyA9IDA7CiAKIAlwcml2LT5pb2Jhc2UgPSBkZXZtX2lvcmVtYXBfbm9jYWNoZSgmcGRldi0+ZGV2LCBuZXRkZXYtPmJhc2VfYWRkciwKLQkJCW1taW8tPmVuZCAtIG1taW8tPnN0YXJ0ICsgMSk7CisJCQlyZXNvdXJjZV9zaXplKG1taW8pKTsKIAlpZiAoIXByaXYtPmlvYmFzZSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVtYXAgSS9PIG1lbW9yeSBzcGFjZVxuIik7CiAJCXJldCA9IC1FTlhJTzsKQEAgLTk1NCw3ICs5NTQsNyBAQAogCiAJaWYgKG5ldGRldi0+bWVtX2VuZCkgewogCQlwcml2LT5tZW1iYXNlID0gZGV2bV9pb3JlbWFwX25vY2FjaGUoJnBkZXYtPmRldiwKLQkJCW5ldGRldi0+bWVtX3N0YXJ0LCBtZW0tPmVuZCAtIG1lbS0+c3RhcnQgKyAxKTsKKwkJCW5ldGRldi0+bWVtX3N0YXJ0LCByZXNvdXJjZV9zaXplKG1lbSkpOwogCQlpZiAoIXByaXYtPm1lbWJhc2UpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZW1hcCBtZW1vcnkgc3BhY2VcbiIpOwogCQkJcmV0ID0gLUVOWElPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXdyazMuYyBiL2RyaXZlcnMvbmV0L2V3cmszLmMKaW5kZXggZGQ0YmEwMS4uOTFlNTlmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXdyazMuYworKysgYi9kcml2ZXJzL25ldC9ld3JrMy5jCkBAIC0xMTY5LDcgKzExNjksNyBAQAogc3RhdGljIHZvaWQgU2V0TXVsdGljYXN0RmlsdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGV3cmszX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSA9IGRldi0+bWNfbGlzdDsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAl1X2xvbmcgaW9iYXNlID0gZGV2LT5iYXNlX2FkZHI7CiAJaW50IGk7CiAJY2hhciAqYWRkcnMsIGJpdCwgYnl0ZTsKQEAgLTEyMTMsOSArMTIxMyw4IEBACiAJCX0KIAogCQkvKiBVcGRhdGUgdGFibGUgKi8KLQkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgewkvKiBmb3IgZWFjaCBhZGRyZXNzIGluIHRoZSBsaXN0ICovCisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCQlhZGRycyA9IGRtaS0+ZG1pX2FkZHI7Ci0JCQlkbWkgPSBkbWktPm5leHQ7CiAJCQlpZiAoKCphZGRycyAmIDB4MDEpID09IDEpIHsJLyogbXVsdGljYXN0IGFkZHJlc3M/ICovCiAJCQkJY3JjID0gZXRoZXJfY3JjX2xlKEVUSF9BTEVOLCBhZGRycyk7CiAJCQkJaGFzaGNvZGUgPSBjcmMgJiAoKDEgPDwgOSkgLSAxKTsJLyogaGFzaGNvZGUgaXMgOSBMU2Igb2YgQ1JDICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWFsbnguYyBiL2RyaXZlcnMvbmV0L2ZlYWxueC5jCmluZGV4IGRhYzRlNTkuLjlkNWFkMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZlYWxueC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlYWxueC5jCkBAIC0xNzg2LDE4ICsxNzg2LDE2IEBACiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewkvKiBTZXQgcHJvbWlzY3VvdXMuICovCiAJCW1lbXNldChtY19maWx0ZXIsIDB4ZmYsIHNpemVvZihtY19maWx0ZXIpKTsKIAkJcnhfbW9kZSA9IENSX1dfUFJPTSB8IENSX1dfQUIgfCBDUl9XX0FNOwotCX0gZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSB8fAorCX0gZWxzZSBpZiAoKG5ldGRldl9tY19jb3VudChkZXYpID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKIAkJICAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCS8qIFRvbyBtYW55IHRvIG1hdGNoLCBvciBhY2NlcHQgYWxsIG11bHRpY2FzdHMuICovCiAJCW1lbXNldChtY19maWx0ZXIsIDB4ZmYsIHNpemVvZihtY19maWx0ZXIpKTsKIAkJcnhfbW9kZSA9IENSX1dfQUIgfCBDUl9XX0FNOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwotCQlpbnQgaTsKIAogCQltZW1zZXQobWNfZmlsdGVyLCAwLCBzaXplb2YobWNfZmlsdGVyKSk7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCQl1bnNpZ25lZCBpbnQgYml0OwogCQkJYml0ID0gKGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgPj4gMjYpIF4gMHgzRjsKIAkJCW1jX2ZpbHRlcltiaXQgPj4gNV0gfD0gKDEgPDwgYml0KTsKQEAgLTE5NDEsNyArMTkzOSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBmZWFsbnhfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGZlYWxueF9wY2lfdGJsKSA9IHsKIAl7MHgxNTE2LCAweDA4MDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXsweDE1MTYsIDB4MDgwMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMX0sCiAJezB4MTUxNiwgMHgwODkxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAyfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZlYy5jIGIvZHJpdmVycy9uZXQvZmVjLmMKaW5kZXggMTZhMWQ1OC4uOWY5OGMxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVjLmMKKysrIGIvZHJpdmVycy9uZXQvZmVjLmMKQEAgLTExMjgsNiArMTEyOCwyNiBAQAogCX0sCiB9OwogCitzdGF0aWMgcGh5X2luZm9fdCBwaHlfaW5mb19sYW44NzAwID0geworCTB4MDAwN0MwQywKKwkiTEFOODcwMCIsCisJKGNvbnN0IHBoeV9jbWRfdCBbXSkgeyAvKiBjb25maWcgKi8KKwkJeyBta19taWlfcmVhZChNSUlfUkVHX0NSKSwgbWlpX3BhcnNlX2NyIH0sCisJCXsgbWtfbWlpX3JlYWQoTUlJX1JFR19BTkFSKSwgbWlpX3BhcnNlX2FuYXIgfSwKKwkJeyBta19taWlfZW5kLCB9CisJfSwKKwkoY29uc3QgcGh5X2NtZF90IFtdKSB7IC8qIHN0YXJ0dXAgKi8KKwkJeyBta19taWlfd3JpdGUoTUlJX1JFR19DUiwgMHgxMjAwKSwgTlVMTCB9LCAvKiBhdXRvbmVnb3RpYXRlICovCisJCXsgbWtfbWlpX3JlYWQoTUlJX1JFR19TUiksIG1paV9wYXJzZV9zciB9LAorCQl7IG1rX21paV9lbmQsIH0KKwl9LAorCShjb25zdCBwaHlfY21kX3QgW10pIHsgLyogYWN0X2ludCAqLworCQl7IG1rX21paV9lbmQsIH0KKwl9LAorCShjb25zdCBwaHlfY21kX3QgW10pIHsgLyogc2h1dGRvd24gKi8KKwkJeyBta19taWlfZW5kLCB9CisJfSwKK307CiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBwaHlfaW5mb190IGNvbnN0ICogY29uc3QgcGh5X2luZm9bXSA9IHsKQEAgLTExMzcsNiArMTE1Nyw3IEBACiAJJnBoeV9pbmZvX2FtNzljODc0LAogCSZwaHlfaW5mb19rczg3MjFibCwKIAkmcGh5X2luZm9fZHA4Mzg0OCwKKwkmcGh5X2luZm9fbGFuODcwMCwKIAlOVUxMCiB9OwogCkBAIC0xNTU0LDcgKzE1NzUsNyBAQAogewogCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwotCXVuc2lnbmVkIGludCBpLCBqLCBiaXQsIGRhdGEsIGNyYywgdG1wOworCXVuc2lnbmVkIGludCBpLCBiaXQsIGRhdGEsIGNyYywgdG1wOwogCXVuc2lnbmVkIGNoYXIgaGFzaDsKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKQEAgLTE1ODMsOSArMTYwNCw3IEBACiAJd3JpdGVsKDAsIGZlcC0+aHdwICsgRkVDX0dSUF9IQVNIX1RBQkxFX0hJR0gpOwogCXdyaXRlbCgwLCBmZXAtPmh3cCArIEZFQ19HUlBfSEFTSF9UQUJMRV9MT1cpOwogCi0JZG1pID0gZGV2LT5tY19saXN0OwotCi0JZm9yIChqID0gMDsgaiA8IGRldi0+bWNfY291bnQ7IGorKywgZG1pID0gZG1pLT5uZXh0KSB7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKIAkJLyogT25seSBzdXBwb3J0IGdyb3VwIG11bHRpY2FzdCBmb3Igbm93ICovCiAJCWlmICghKGRtaS0+ZG1pX2FkZHJbMF0gJiAxKSkKIAkJCWNvbnRpbnVlOwpAQCAtMTY1OCw2ICsxNjc3LDcgQEAKIHsKIAlzdHJ1Y3QgZmVjX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgYnVmZGVzYyAqY2JkX2Jhc2U7CisJc3RydWN0IGJ1ZmRlc2MgKmJkcDsKIAlpbnQgaTsKIAogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgYnVmZmVyIGRlc2NyaXB0b3JzLiAqLwpAQCAtMTcxMCw2ICsxNzMwLDM0IEBACiAJLyogU2V0IE1JSSBzcGVlZCB0byAyLjUgTUh6ICovCiAJZmVwLT5waHlfc3BlZWQgPSAoKCgoY2xrX2dldF9yYXRlKGZlcC0+Y2xrKSAvIDIgKyA0OTk5OTk5KQogCQkJCQkvIDI1MDAwMDApIC8gMikgJiAweDNGKSA8PCAxOworCisJLyogSW5pdGlhbGl6ZSB0aGUgcmVjZWl2ZSBidWZmZXIgZGVzY3JpcHRvcnMuICovCisJYmRwID0gZmVwLT5yeF9iZF9iYXNlOworCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykgeworCisJCS8qIEluaXRpYWxpemUgdGhlIEJEIGZvciBldmVyeSBmcmFnbWVudCBpbiB0aGUgcGFnZS4gKi8KKwkJYmRwLT5jYmRfc2MgPSAwOworCQliZHArKzsKKwl9CisKKwkvKiBTZXQgdGhlIGxhc3QgYnVmZmVyIHRvIHdyYXAgKi8KKwliZHAtLTsKKwliZHAtPmNiZF9zYyB8PSBCRF9TQ19XUkFQOworCisJLyogLi4uYW5kIHRoZSBzYW1lIGZvciB0cmFuc21pdCAqLworCWJkcCA9IGZlcC0+dHhfYmRfYmFzZTsKKwlmb3IgKGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKyspIHsKKworCQkvKiBJbml0aWFsaXplIHRoZSBCRCBmb3IgZXZlcnkgZnJhZ21lbnQgaW4gdGhlIHBhZ2UuICovCisJCWJkcC0+Y2JkX3NjID0gMDsKKwkJYmRwLT5jYmRfYnVmYWRkciA9IDA7CisJCWJkcCsrOworCX0KKworCS8qIFNldCB0aGUgbGFzdCBidWZmZXIgdG8gd3JhcCAqLworCWJkcC0tOworCWJkcC0+Y2JkX3NjIHw9IEJEX1NDX1dSQVA7CisKIAlmZWNfcmVzdGFydChkZXYsIDApOwogCiAJLyogUXVldWUgdXAgY29tbWFuZCB0byBkZXRlY3QgdGhlIFBIWSBhbmQgaW5pdGlhbGl6ZSB0aGUKQEAgLTE3MzAsNyArMTc3OCw2IEBACiBmZWNfcmVzdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZHVwbGV4KQogewogCXN0cnVjdCBmZWNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBidWZkZXNjICpiZHA7CiAJaW50IGk7CiAKIAkvKiBXaGFjayBhIHJlc2V0LiAgV2Ugc2hvdWxkIHdhaXQgZm9yIHRoaXMuICovCkBAIC0xNzY4LDMzICsxODE1LDYgQEAKIAkJfQogCX0KIAotCS8qIEluaXRpYWxpemUgdGhlIHJlY2VpdmUgYnVmZmVyIGRlc2NyaXB0b3JzLiAqLwotCWJkcCA9IGZlcC0+cnhfYmRfYmFzZTsKLQlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspIHsKLQotCQkvKiBJbml0aWFsaXplIHRoZSBCRCBmb3IgZXZlcnkgZnJhZ21lbnQgaW4gdGhlIHBhZ2UuICovCi0JCWJkcC0+Y2JkX3NjID0gQkRfRU5FVF9SWF9FTVBUWTsKLQkJYmRwKys7Ci0JfQotCi0JLyogU2V0IHRoZSBsYXN0IGJ1ZmZlciB0byB3cmFwICovCi0JYmRwLS07Ci0JYmRwLT5jYmRfc2MgfD0gQkRfU0NfV1JBUDsKLQotCS8qIC4uLmFuZCB0aGUgc2FtZSBmb3IgdHJhbnNtaXQgKi8KLQliZHAgPSBmZXAtPnR4X2JkX2Jhc2U7Ci0JZm9yIChpID0gMDsgaSA8IFRYX1JJTkdfU0laRTsgaSsrKSB7Ci0KLQkJLyogSW5pdGlhbGl6ZSB0aGUgQkQgZm9yIGV2ZXJ5IGZyYWdtZW50IGluIHRoZSBwYWdlLiAqLwotCQliZHAtPmNiZF9zYyA9IDA7Ci0JCWJkcC0+Y2JkX2J1ZmFkZHIgPSAwOwotCQliZHArKzsKLQl9Ci0KLQkvKiBTZXQgdGhlIGxhc3QgYnVmZmVyIHRvIHdyYXAgKi8KLQliZHAtLTsKLQliZHAtPmNiZF9zYyB8PSBCRF9TQ19XUkFQOwotCiAJLyogRW5hYmxlIE1JSSBtb2RlICovCiAJaWYgKGR1cGxleCkgewogCQkvKiBNSUkgZW5hYmxlIC8gRkQgZW5hYmxlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jIGIvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYwppbmRleCA4NDhlODQwLi4wZGJkNzIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMKQEAgLTU3NSwxOSArNTc1LDE2IEBACiAJCQlvdXRfYmUzMigmZmVjLT5nYWRkcjIsIDB4ZmZmZmZmZmYpOwogCQl9IGVsc2UgewogCQkJdTMyIGNyYzsKLQkJCWludCBpOwogCQkJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJCQl1MzIgZ2FkZHIxID0gMHgwMDAwMDAwMDsKIAkJCXUzMiBnYWRkcjIgPSAweDAwMDAwMDAwOwogCi0JCQlkbWkgPSBkZXYtPm1jX2xpc3Q7Ci0JCQlmb3IgKGk9MDsgaTxkZXYtPm1jX2NvdW50OyBpKyspIHsKKwkJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCQkJY3JjID0gZXRoZXJfY3JjX2xlKDYsIGRtaS0+ZG1pX2FkZHIpID4+IDI2OwogCQkJCWlmIChjcmMgPj0gMzIpCiAJCQkJCWdhZGRyMSB8PSAxIDw8IChjcmMtMzIpOwogCQkJCWVsc2UKIAkJCQkJZ2FkZHIyIHw9IDEgPDwgY3JjOwotCQkJCWRtaSA9IGRtaS0+bmV4dDsKIAkJCX0KIAkJCW91dF9iZTMyKCZmZWMtPmdhZGRyMSwgZ2FkZHIxKTsKIAkJCW91dF9iZTMyKCZmZWMtPmdhZGRyMiwgZ2FkZHIyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKaW5kZXggM2MzNDA0OC4uY2EwNWU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKQEAgLTMwOTUsNyArMzA5NSw3IEBACiAJfSBlbHNlIHsKIAkJcGZmIHw9IE5WUkVHX1BGRl9NWUFERFI7CiAKLQkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgZGV2LT5tY19saXN0KSB7CisJCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8ICFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQkJdTMyIGFsd2F5c09mZlsyXTsKIAkJCXUzMiBhbHdheXNPblsyXTsKIApAQCAtMzEwNSw4ICszMTA1LDcgQEAKIAkJCX0gZWxzZSB7CiAJCQkJc3RydWN0IGRldl9tY19saXN0ICp3YWxrOwogCi0JCQkJd2FsayA9IGRldi0+bWNfbGlzdDsKLQkJCQl3aGlsZSAod2FsayAhPSBOVUxMKSB7CisJCQkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIod2FsaywgZGV2KSB7CiAJCQkJCXUzMiBhLCBiOwogCQkJCQlhID0gbGUzMl90b19jcHUoKihfX2xlMzIgKikgd2Fsay0+ZG1pX2FkZHIpOwogCQkJCQliID0gbGUxNl90b19jcHUoKihfX2xlMTYgKikgKCZ3YWxrLT5kbWlfYWRkcls0XSkpOwpAQCAtMzExNCw3ICszMTEzLDYgQEAKIAkJCQkJYWx3YXlzT2ZmWzBdICY9IH5hOwogCQkJCQlhbHdheXNPblsxXSAmPSBiOwogCQkJCQlhbHdheXNPZmZbMV0gJj0gfmI7Ci0JCQkJCXdhbGsgPSB3YWxrLT5uZXh0OwogCQkJCX0KIAkJCX0KIAkJCWFkZHJbMF0gPSBhbHdheXNPblswXTsKQEAgLTYxOTgsNyArNjE5Niw3IEBACiAjZGVmaW5lIG52X3Jlc3VtZSBOVUxMCiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGNpX3RibCkgPSB7CiAJewkvKiBuRm9yY2UgRXRoZXJuZXQgQ29udHJvbGxlciAqLwogCQlQQ0lfREVWSUNFKDB4MTBERSwgMHgwMUMzKSwKIAkJLmRyaXZlcl9kYXRhID0gREVWX05FRURfVElNRVJJUlF8REVWX05FRURfTElOS1RJTUVSLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9LY29uZmlnCmluZGV4IDU2MmVhNjguLmZjMDczYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L0tjb25maWcKQEAgLTEsOSArMSwxMyBAQAogY29uZmlnIEZTX0VORVQKICAgICAgICB0cmlzdGF0ZSAiRnJlZXNjYWxlIEV0aGVybmV0IERyaXZlciIKLSAgICAgICBkZXBlbmRzIG9uIENQTTEgfHwgQ1BNMgorICAgICAgIGRlcGVuZHMgb24gQ1BNMSB8fCBDUE0yIHx8IFBQQ19NUEM1MTJ4CiAgICAgICAgc2VsZWN0IE1JSQogICAgICAgIHNlbGVjdCBQSFlMSUIKIAorY29uZmlnIEZTX0VORVRfTVBDNTEyMV9GRUMKKwlkZWZfYm9vbCB5IGlmIChGU19FTkVUICYmIFBQQ19NUEM1MTJ4KQorCXNlbGVjdCBGU19FTkVUX0hBU19GRUMKKwogY29uZmlnIEZTX0VORVRfSEFTX1NDQwogCWJvb2wgIkNoaXAgaGFzIGFuIFNDQyB1c2FibGUgZm9yIGV0aGVybmV0IgogCWRlcGVuZHMgb24gRlNfRU5FVCAmJiAoQ1BNMSB8fCBDUE0yKQpAQCAtMTYsMTMgKzIwLDEzIEBACiAKIGNvbmZpZyBGU19FTkVUX0hBU19GRUMKIAlib29sICJDaGlwIGhhcyBhbiBGRUMgdXNhYmxlIGZvciBldGhlcm5ldCIKLQlkZXBlbmRzIG9uIEZTX0VORVQgJiYgQ1BNMQorCWRlcGVuZHMgb24gRlNfRU5FVCAmJiAoQ1BNMSB8fCBGU19FTkVUX01QQzUxMjFfRkVDKQogCXNlbGVjdCBGU19FTkVUX01ESU9fRkVDCiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBGU19FTkVUX01ESU9fRkVDCiAJdHJpc3RhdGUgIk1ESU8gZHJpdmVyIGZvciBGRUMiCi0JZGVwZW5kcyBvbiBGU19FTkVUICYmIENQTTEKKwlkZXBlbmRzIG9uIEZTX0VORVQgJiYgKENQTTEgfHwgRlNfRU5FVF9NUEM1MTIxX0ZFQykKIAogY29uZmlnIEZTX0VORVRfTURJT19GQ0MKIAl0cmlzdGF0ZSAiTURJTyBkcml2ZXIgZm9yIEZDQyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jCmluZGV4IGVjMmY1MDMuLjA3NzBlMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC1tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LW1haW4uYwpAQCAtMTA4LDkgKzEwOCw3IEBACiAJCSAqIHRoZSBsYXN0IGluZGljYXRvciBzaG91bGQgYmUgc2V0LgogCQkgKi8KIAkJaWYgKChzYyAmIEJEX0VORVRfUlhfTEFTVCkgPT0gMCkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX01PRFVMRV9OQU1FCi0JCQkgICAgICAgIjogJXMgcmN2IGlzIG5vdCArbGFzdFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZGV2X3dhcm4oZmVwLT5kZXYsICJyY3YgaXMgbm90ICtsYXN0XG4iKTsKIAogCQkvKgogCQkgKiBDaGVjayBmb3IgZXJyb3JzLgpAQCAtMTc4LDkgKzE3Niw4IEBACiAJCQkJcmVjZWl2ZWQrKzsKIAkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOwogCQkJfSBlbHNlIHsKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9NT0RVTEVfTkFNRQotCQkJCSAgICAgICAiOiAlcyBNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCQlkZXZfd2FybihmZXAtPmRldiwKKwkJCQkJICJNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIik7CiAJCQkJZmVwLT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCQkJc2tibiA9IHNrYjsKIAkJCX0KQEAgLTI0Miw5ICsyMzksNyBAQAogCQkgKiB0aGUgbGFzdCBpbmRpY2F0b3Igc2hvdWxkIGJlIHNldC4KIAkJICovCiAJCWlmICgoc2MgJiBCRF9FTkVUX1JYX0xBU1QpID09IDApCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9NT0RVTEVfTkFNRQotCQkJICAgICAgICI6ICVzIHJjdiBpcyBub3QgK2xhc3RcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCWRldl93YXJuKGZlcC0+ZGV2LCAicmN2IGlzIG5vdCArbGFzdFxuIik7CiAKIAkJLyoKIAkJICogQ2hlY2sgZm9yIGVycm9ycy4KQEAgLTMxMyw5ICszMDgsOCBAQAogCQkJCXJlY2VpdmVkKys7CiAJCQkJbmV0aWZfcngoc2tiKTsKIAkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTU9EVUxFX05BTUUKLQkJCQkgICAgICAgIjogJXMgTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQkJZGV2X3dhcm4oZmVwLT5kZXYsCisJCQkJCSAiTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIpOwogCQkJCWZlcC0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQkJCXNrYm4gPSBza2I7CiAJCQl9CkBAIC0zODgsMTAgKzM4MiwxMCBAQAogCQl9IGVsc2UKIAkJCWZlcC0+c3RhdHMudHhfcGFja2V0cysrOwogCi0JCWlmIChzYyAmIEJEX0VORVRfVFhfUkVBRFkpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9NT0RVTEVfTkFNRQotCQkJICAgICAgICI6ICVzIEhFWSEgRW5ldCB4bWl0IGludGVycnVwdCBhbmQgVFhfUkVBRFkuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCWlmIChzYyAmIEJEX0VORVRfVFhfUkVBRFkpIHsKKwkJCWRldl93YXJuKGZlcC0+ZGV2LAorCQkJCSAiSEVZISBFbmV0IHhtaXQgaW50ZXJydXB0IGFuZCBUWF9SRUFEWS5cbiIpOworCQl9CiAKIAkJLyoKIAkJICogRGVmZXJyZWQgbWVhbnMgc29tZSBjb2xsaXNpb25zIG9jY3VycmVkIGR1cmluZyB0cmFuc21pdCwKQEAgLTUxMSw5ICs1MDUsOCBAQAogCWZvciAoaSA9IDAsIGJkcCA9IGZlcC0+cnhfYmRfYmFzZTsgaSA8IGZlcC0+cnhfcmluZzsgaSsrLCBiZHArKykgewogCQlza2IgPSBkZXZfYWxsb2Nfc2tiKEVORVRfUlhfRlJTSVpFKTsKIAkJaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9NT0RVTEVfTkFNRQotCQkJICAgICAgICI6ICVzIE1lbW9yeSBzcXVlZXplLCB1bmFibGUgdG8gYWxsb2NhdGUgc2tiXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlkZXZfd2FybihmZXAtPmRldiwKKwkJCQkgIk1lbW9yeSBzcXVlZXplLCB1bmFibGUgdG8gYWxsb2NhdGUgc2tiXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJCXNrYl9hbGlnbihza2IsIEVORVRfUlhfQUxJR04pOwpAQCAtNTg3LDYgKzU4MCw0MCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2lmZGVmIENPTkZJR19GU19FTkVUX01QQzUxMjFfRkVDCisvKgorICogTVBDNTEyMSBGRUMgcmVxdWVyaWVzIDQtYnl0ZSBhbGlnbm1lbnQgZm9yIFRYIGRhdGEgYnVmZmVyIQorICovCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnR4X3NrYl9hbGlnbl93b3JrYXJvdW5kKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBza19idWZmICpuZXdfc2tiOworCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CisKKwkvKiBBbGxvYyBuZXcgc2tiICovCisJbmV3X3NrYiA9IGRldl9hbGxvY19za2Ioc2tiLT5sZW4gKyA0KTsKKwlpZiAoIW5ld19za2IpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkgeworCQkJZGV2X3dhcm4oZmVwLT5kZXYsCisJCQkJICJNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgdHggcGFja2V0LlxuIik7CisJCX0KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJLyogTWFrZSBzdXJlIG5ldyBza2IgaXMgcHJvcGVybHkgYWxpZ25lZCAqLworCXNrYl9hbGlnbihuZXdfc2tiLCA0KTsKKworCS8qIENvcHkgZGF0YSB0byBuZXcgc2tiIC4uLiAqLworCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCBuZXdfc2tiLT5kYXRhLCBza2ItPmxlbik7CisJc2tiX3B1dChuZXdfc2tiLCBza2ItPmxlbik7CisKKwkvKiAuLi4gYW5kIGZyZWUgYW4gb2xkIG9uZSAqLworCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisKKwlyZXR1cm4gbmV3X3NrYjsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IGZzX2VuZXRfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CkBAIC01OTUsNiArNjIyLDE5IEBACiAJdTE2IHNjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKyNpZmRlZiBDT05GSUdfRlNfRU5FVF9NUEM1MTIxX0ZFQworCWlmICgoKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhKSAmIDB4MykgeworCQlza2IgPSB0eF9za2JfYWxpZ25fd29ya2Fyb3VuZChkZXYsIHNrYik7CisJCWlmICghc2tiKSB7CisJCQkvKgorCQkJICogV2UgaGF2ZSBsb3N0IHBhY2tldCBkdWUgdG8gbWVtb3J5IGFsbG9jYXRpb24gZXJyb3IKKwkJCSAqIGluIHR4X3NrYl9hbGlnbl93b3JrYXJvdW5kKCkuIEhvcGVmdWxseSBvcmlnaW5hbAorCQkJICogc2tiIGlzIHN0aWxsIHZhbGlkLCBzbyB0cnkgdHJhbnNtaXQgaXQgbGF0ZXIuCisJCQkgKi8KKwkJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwkJfQorCX0KKyNlbmRpZgogCXNwaW5fbG9ja19pcnFzYXZlKCZmZXAtPnR4X2xvY2ssIGZsYWdzKTsKIAogCS8qCkBAIC02MTAsOCArNjUwLDcgQEAKIAkJICogT29vcHMuICBBbGwgdHJhbnNtaXQgYnVmZmVycyBhcmUgZnVsbC4gIEJhaWwgb3V0LgogCQkgKiBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBzaW5jZSB0aGUgdHggcXVldWUgc2hvdWxkIGJlIHN0b3BwZWQuCiAJCSAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9NT0RVTEVfTkFNRQotCQkgICAgICAgIjogJXMgdHggcXVldWUgZnVsbCEuXG4iLCBkZXYtPm5hbWUpOworCQlkZXZfd2FybihmZXAtPmRldiwgInR4IHF1ZXVlIGZ1bGwhLlxuIik7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKQEAgLTc4OCw4ICs4MjcsNyBAQAogCXIgPSByZXF1ZXN0X2lycShmZXAtPmludGVycnVwdCwgZnNfZW5ldF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJImZzX2VuZXQtbWFjIiwgZGV2KTsKIAlpZiAociAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTU9EVUxFX05BTUUKLQkJICAgICAgICI6ICVzIENvdWxkIG5vdCBhbGxvY2F0ZSBGU19FTkVUIElSUSEiLCBkZXYtPm5hbWUpOworCQlkZXZfZXJyKGZlcC0+ZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIEZTX0VORVQgSVJRISIpOwogCQlpZiAoZmVwLT5mcGktPnVzZV9uYXBpKQogCQkJbmFwaV9kaXNhYmxlKCZmZXAtPm5hcGkpOwogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEwNTMsNyArMTA5MSw3IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfZnJlZV9iZDsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBmc19lbmV0OiAlcE1cbiIsIG5kZXYtPm5hbWUsIG5kZXYtPmRldl9hZGRyKTsKKwlwcl9pbmZvKCIlczogZnNfZW5ldDogJXBNXG4iLCBuZGV2LT5uYW1lLCBuZGV2LT5kZXZfYWRkcik7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTEwMywxMSArMTE0MSwxOCBAQAogCX0sCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfRlNfRU5FVF9IQVNfRkVDCisjaWZkZWYgQ09ORklHX0ZTX0VORVRfTVBDNTEyMV9GRUMKKwl7CisJCS5jb21wYXRpYmxlID0gImZzbCxtcGM1MTIxLWZlYyIsCisJCS5kYXRhID0gKHZvaWQgKikmZnNfZmVjX29wcywKKwl9LAorI2Vsc2UKIAl7CiAJCS5jb21wYXRpYmxlID0gImZzbCxwcTEtZmVjLWVuZXQiLAogCQkuZGF0YSA9ICh2b2lkICopJmZzX2ZlY19vcHMsCiAJfSwKICNlbmRpZgorI2VuZGlmCiAJe30KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBmc19lbmV0X21hdGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC5oIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LmgKaW5kZXggZWYwMWUwOS4uMWVjZTRiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LmgKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LmgKQEAgLTEzLDkgKzEzLDU2IEBACiAKICNpZmRlZiBDT05GSUdfQ1BNMQogI2luY2x1ZGUgPGFzbS9jcG0xLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoQ09ORklHX0ZTX0VORVRfSEFTX0ZFQykKKyNpbmNsdWRlIDxhc20vY3BtLmg+CisKKyNpZiBkZWZpbmVkKENPTkZJR19GU19FTkVUX01QQzUxMjFfRkVDKQorLyogTVBDNTEyMSBGRUMgaGFzIGRpZmZlcmVudCByZWdpc3RlciBsYXlvdXQgKi8KK3N0cnVjdCBmZWMgeworCXUzMiBmZWNfcmVzZXJ2ZWQwOworCXUzMiBmZWNfaWV2ZW50OwkJCS8qIEludGVycnVwdCBldmVudCByZWcgKi8KKwl1MzIgZmVjX2ltYXNrOwkJCS8qIEludGVycnVwdCBtYXNrIHJlZyAqLworCXUzMiBmZWNfcmVzZXJ2ZWQxOworCXUzMiBmZWNfcl9kZXNfYWN0aXZlOwkJLyogUmVjZWl2ZSBkZXNjcmlwdG9yIHJlZyAqLworCXUzMiBmZWNfeF9kZXNfYWN0aXZlOwkJLyogVHJhbnNtaXQgZGVzY3JpcHRvciByZWcgKi8KKwl1MzIgZmVjX3Jlc2VydmVkMlszXTsKKwl1MzIgZmVjX2VjbnRybDsJCQkvKiBFdGhlcm5ldCBjb250cm9sIHJlZyAqLworCXUzMiBmZWNfcmVzZXJ2ZWQzWzZdOworCXUzMiBmZWNfbWlpX2RhdGE7CQkvKiBNSUkgbWFuYWdlIGZyYW1lIHJlZyAqLworCXUzMiBmZWNfbWlpX3NwZWVkOwkJLyogTUlJIHNwZWVkIGNvbnRyb2wgcmVnICovCisJdTMyIGZlY19yZXNlcnZlZDRbN107CisJdTMyIGZlY19taWJfY3RybHN0YXQ7CQkvKiBNSUIgY29udHJvbC9zdGF0dXMgcmVnICovCisJdTMyIGZlY19yZXNlcnZlZDVbN107CisJdTMyIGZlY19yX2NudHJsOwkJLyogUmVjZWl2ZSBjb250cm9sIHJlZyAqLworCXUzMiBmZWNfcmVzZXJ2ZWQ2WzE1XTsKKwl1MzIgZmVjX3hfY250cmw7CQkvKiBUcmFuc21pdCBDb250cm9sIHJlZyAqLworCXUzMiBmZWNfcmVzZXJ2ZWQ3WzddOworCXUzMiBmZWNfYWRkcl9sb3c7CQkvKiBMb3cgMzJiaXRzIE1BQyBhZGRyZXNzICovCisJdTMyIGZlY19hZGRyX2hpZ2g7CQkvKiBIaWdoIDE2Yml0cyBNQUMgYWRkcmVzcyAqLworCXUzMiBmZWNfb3BkOwkJCS8qIE9wY29kZSArIFBhdXNlIGR1cmF0aW9uICovCisJdTMyIGZlY19yZXNlcnZlZDhbMTBdOworCXUzMiBmZWNfaGFzaF90YWJsZV9oaWdoOwkvKiBIaWdoIDMyYml0cyBoYXNoIHRhYmxlICovCisJdTMyIGZlY19oYXNoX3RhYmxlX2xvdzsJCS8qIExvdyAzMmJpdHMgaGFzaCB0YWJsZSAqLworCXUzMiBmZWNfZ3JwX2hhc2hfdGFibGVfaGlnaDsJLyogSGlnaCAzMmJpdHMgaGFzaCB0YWJsZSAqLworCXUzMiBmZWNfZ3JwX2hhc2hfdGFibGVfbG93OwkvKiBMb3cgMzJiaXRzIGhhc2ggdGFibGUgKi8KKwl1MzIgZmVjX3Jlc2VydmVkOVs3XTsKKwl1MzIgZmVjX3hfd21yazsJCQkvKiBGSUZPIHRyYW5zbWl0IHdhdGVyIG1hcmsgKi8KKwl1MzIgZmVjX3Jlc2VydmVkMTA7CisJdTMyIGZlY19yX2JvdW5kOwkJLyogRklGTyByZWNlaXZlIGJvdW5kIHJlZyAqLworCXUzMiBmZWNfcl9mc3RhcnQ7CQkvKiBGSUZPIHJlY2VpdmUgc3RhcnQgcmVnICovCisJdTMyIGZlY19yZXNlcnZlZDExWzExXTsKKwl1MzIgZmVjX3JfZGVzX3N0YXJ0OwkJLyogUmVjZWl2ZSBkZXNjcmlwdG9yIHJpbmcgKi8KKwl1MzIgZmVjX3hfZGVzX3N0YXJ0OwkJLyogVHJhbnNtaXQgZGVzY3JpcHRvciByaW5nICovCisJdTMyIGZlY19yX2J1ZmZfc2l6ZTsJCS8qIE1heGltdW0gcmVjZWl2ZSBidWZmIHNpemUgKi8KKwl1MzIgZmVjX3Jlc2VydmVkMTJbMjZdOworCXUzMiBmZWNfZG1hX2NvbnRyb2w7CQkvKiBETUEgRW5kaWFuIGFuZCBvdGhlciBjdHJsICovCit9OworI2VuZGlmCiAKIHN0cnVjdCBmZWNfaW5mbyB7Ci0JZmVjX3QgX19pb21lbSAqZmVjcDsKKwlzdHJ1Y3QgZmVjIF9faW9tZW0gKmZlY3A7CiAJdTMyIG1paV9zcGVlZDsKIH07CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvbWFjLWZjYy5jIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmNjLmMKaW5kZXggMjJlNWE4NC4uY2Y0ZjY3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmNjLmMKKysrIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmNjLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCiAJLyogaWYgYWxsIG11bHRpIG9yIHRvbyBtYW55IG11bHRpY2FzdHM7IGp1c3QgZW5hYmxlIGFsbCAqLwogCWlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgIT0gMCB8fAotCSAgICBkZXYtPm1jX2NvdW50ID4gRkNDX01BWF9NVUxUSUNBU1RfQUREUlMpIHsKKwkgICAgbmV0ZGV2X21jX2NvdW50KGRldikgPiBGQ0NfTUFYX01VTFRJQ0FTVF9BRERSUykgewogCiAJCVczMihlcCwgZmVuX2dhZGRyaCwgMHhmZmZmZmZmZik7CiAJCVczMihlcCwgZmVuX2dhZGRybCwgMHhmZmZmZmZmZik7CkBAIC0yMzUsNyArMjM1LDcgQEAKIAogCWlmICgoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSA9PSAwKSB7CiAJCXNldF9tdWx0aWNhc3Rfc3RhcnQoZGV2KTsKLQkJZm9yIChwbWMgPSBkZXYtPm1jX2xpc3Q7IHBtYyAhPSBOVUxMOyBwbWMgPSBwbWMtPm5leHQpCisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKHBtYywgZGV2KQogCQkJc2V0X211bHRpY2FzdF9vbmUoZGV2LCBwbWMtPmRtaV9hZGRyKTsKIAkJc2V0X211bHRpY2FzdF9maW5pc2goZGV2KTsKIAl9IGVsc2UKQEAgLTQ3Niw4ICs0NzYsOSBAQAogCiBzdGF0aWMgdm9pZCBldl9lcnJvcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgaW50X2V2ZW50cykKIHsKLQlwcmludGsoS0VSTl9XQVJOSU5HIERSVl9NT0RVTEVfTkFNRQotCSAgICAgICAiOiAlcyBGU19FTkVUIEVSUk9SKHMpIDB4JXhcbiIsIGRldi0+bmFtZSwgaW50X2V2ZW50cyk7CisJc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWRldl93YXJuKGZlcC0+ZGV2LCAiRlNfRU5FVCBFUlJPUihzKSAweCV4XG4iLCBpbnRfZXZlbnRzKTsKIH0KIAogc3RhdGljIGludCBnZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwLCBpbnQgKnNpemVwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtZmVjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYwppbmRleCBjYTdiY2I4Li5jZDJjNmNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1mZWMuYwpAQCAtODAsNyArODAsNyBAQAogICovCiAjZGVmaW5lIEZFQ19SRVNFVF9ERUxBWQkJNTAKIAotc3RhdGljIGludCB3aGFja19yZXNldChmZWNfdCBfX2lvbWVtICpmZWNwKQorc3RhdGljIGludCB3aGFja19yZXNldChzdHJ1Y3QgZmVjIF9faW9tZW0gKmZlY3ApCiB7CiAJaW50IGk7CiAKQEAgLTE2OCw3ICsxNjgsNyBAQAogc3RhdGljIHZvaWQgc2V0X3Byb21pc2N1b3VzX21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWZlY190IF9faW9tZW0gKmZlY3AgPSBmZXAtPmZlYy5mZWNwOworCXN0cnVjdCBmZWMgX19pb21lbSAqZmVjcCA9IGZlcC0+ZmVjLmZlY3A7CiAKIAlGUyhmZWNwLCByX2NudHJsLCBGRUNfUkNOVFJMX1BST00pOwogfQpAQCAtMjE2LDExICsyMTYsMTEgQEAKIHN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfZmluaXNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlmZWNfdCBfX2lvbWVtICpmZWNwID0gZmVwLT5mZWMuZmVjcDsKKwlzdHJ1Y3QgZmVjIF9faW9tZW0gKmZlY3AgPSBmZXAtPmZlYy5mZWNwOwogCiAJLyogaWYgYWxsIG11bHRpIG9yIHRvbyBtYW55IG11bHRpY2FzdHM7IGp1c3QgZW5hYmxlIGFsbCAqLwogCWlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgIT0gMCB8fAotCSAgICBkZXYtPm1jX2NvdW50ID4gRkVDX01BWF9NVUxUSUNBU1RfQUREUlMpIHsKKwkgICAgbmV0ZGV2X21jX2NvdW50KGRldikgPiBGRUNfTUFYX01VTFRJQ0FTVF9BRERSUykgewogCQlmZXAtPmZlYy5odGhpID0gMHhmZmZmZmZmZlU7CiAJCWZlcC0+ZmVjLmh0bG8gPSAweGZmZmZmZmZmVTsKIAl9CkBAIC0yMzYsNyArMjM2LDcgQEAKIAogCWlmICgoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSA9PSAwKSB7CiAJCXNldF9tdWx0aWNhc3Rfc3RhcnQoZGV2KTsKLQkJZm9yIChwbWMgPSBkZXYtPm1jX2xpc3Q7IHBtYyAhPSBOVUxMOyBwbWMgPSBwbWMtPm5leHQpCisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKHBtYywgZGV2KQogCQkJc2V0X211bHRpY2FzdF9vbmUoZGV2LCBwbWMtPmRtaV9hZGRyKTsKIAkJc2V0X211bHRpY2FzdF9maW5pc2goZGV2KTsKIAl9IGVsc2UKQEAgLTI0Niw3ICsyNDYsNyBAQAogc3RhdGljIHZvaWQgcmVzdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0JZmVjX3QgX19pb21lbSAqZmVjcCA9IGZlcC0+ZmVjLmZlY3A7CisJc3RydWN0IGZlYyBfX2lvbWVtICpmZWNwID0gZmVwLT5mZWMuZmVjcDsKIAljb25zdCBzdHJ1Y3QgZnNfcGxhdGZvcm1faW5mbyAqZnBpID0gZmVwLT5mcGk7CiAJZG1hX2FkZHJfdCByeF9iZF9iYXNlX3BoeXMsIHR4X2JkX2Jhc2VfcGh5czsKIAlpbnQgcjsKQEAgLTI1Nyw4ICsyNTcsNyBAQAogCiAJciA9IHdoYWNrX3Jlc2V0KGZlcC0+ZmVjLmZlY3ApOwogCWlmIChyICE9IDApCi0JCXByaW50ayhLRVJOX0VSUiBEUlZfTU9EVUxFX05BTUUKLQkJCQkiOiAlcyBGRUMgUmVzZXQgRkFJTEVEIVxuIiwgZGV2LT5uYW1lKTsKKwkJZGV2X2VycihmZXAtPmRldiwgIkZFQyBSZXNldCBGQUlMRUQhXG4iKTsKIAkvKgogCSAqIFNldCBzdGF0aW9uIGFkZHJlc3MuCiAJICovCkBAIC0yODEsNyArMjgwLDExIEBACiAJICogU2V0IG1heGltdW0gcmVjZWl2ZSBidWZmZXIgc2l6ZS4KIAkgKi8KIAlGVyhmZWNwLCByX2J1ZmZfc2l6ZSwgUEtUX01BWEJMUl9TSVpFKTsKKyNpZmRlZiBDT05GSUdfRlNfRU5FVF9NUEM1MTIxX0ZFQworCUZXKGZlY3AsIHJfY250cmwsIFBLVF9NQVhCVUZfU0laRSA8PCAxNik7CisjZWxzZQogCUZXKGZlY3AsIHJfaGFzaCwgUEtUX01BWEJVRl9TSVpFKTsKKyNlbmRpZgogCiAJLyogZ2V0IHBoeXNpY2FsIGFkZHJlc3MgKi8KIAlyeF9iZF9iYXNlX3BoeXMgPSBmZXAtPnJpbmdfbWVtX2FkZHI7CkBAIC0yOTgsNyArMzAxLDExIEBACiAJLyoKIAkgKiBFbmFibGUgYmlnIGVuZGlhbiBhbmQgZG9uJ3QgY2FyZSBhYm91dCBTRE1BIEZDLgogCSAqLworI2lmZGVmIENPTkZJR19GU19FTkVUX01QQzUxMjFfRkVDCisJRlMoZmVjcCwgZG1hX2NvbnRyb2wsIDB4QzAwMDAwMDApOworI2Vsc2UKIAlGVyhmZWNwLCBmdW5fY29kZSwgMHg3ODAwMDAwMCk7CisjZW5kaWYKIAogCS8qCiAJICogU2V0IE1JSSBzcGVlZC4KQEAgLTMwOSw5ICszMTYsMTcgQEAKIAkgKiBDbGVhciBhbnkgb3V0c3RhbmRpbmcgaW50ZXJydXB0LgogCSAqLwogCUZXKGZlY3AsIGlldmVudCwgMHhmZmMwKTsKKyNpZm5kZWYgQ09ORklHX0ZTX0VORVRfTVBDNTEyMV9GRUMKIAlGVyhmZWNwLCBpdmVjLCAodmlycV90b19odyhmZXAtPmludGVycnVwdCkgLyAyKSA8PCAyOSk7CiAKIAlGVyhmZWNwLCByX2NudHJsLCBGRUNfUkNOVFJMX01JSV9NT0RFKTsJLyogTUlJIGVuYWJsZSAqLworI2Vsc2UKKwkvKgorCSAqIE9ubHkgc2V0IE1JSSBtb2RlIC0gZG8gbm90IHRvdWNoIG1heGltdW0gZnJhbWUgbGVuZ3RoCisJICogY29uZmlndXJlZCBiZWZvcmUuCisJICovCisJRlMoZmVjcCwgcl9jbnRybCwgRkVDX1JDTlRSTF9NSUlfTU9ERSk7CisjZW5kaWYKIAkvKgogCSAqIGFkanVzdCB0byBkdXBsZXggbW9kZQogCSAqLwpAQCAtMzQwLDcgKzM1NSw3IEBACiB7CiAJc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAljb25zdCBzdHJ1Y3QgZnNfcGxhdGZvcm1faW5mbyAqZnBpID0gZmVwLT5mcGk7Ci0JZmVjX3QgX19pb21lbSAqZmVjcCA9IGZlcC0+ZmVjLmZlY3A7CisJc3RydWN0IGZlYyBfX2lvbWVtICpmZWNwID0gZmVwLT5mZWMuZmVjcDsKIAogCXN0cnVjdCBmZWNfaW5mbyogZmVjaT0gZmVwLT5waHlkZXYtPmJ1cy0+cHJpdjsKIApAQCAtMzU1LDkgKzM3MCw3IEBACiAJCXVkZWxheSgxKTsKIAogCWlmIChpID09IEZFQ19SRVNFVF9ERUxBWSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTU9EVUxFX05BTUUKLQkJICAgICAgICI6ICVzIEZFQyB0aW1lb3V0IG9uIGdyYWNlZnVsIHRyYW5zbWl0IHN0b3BcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQlkZXZfd2FybihmZXAtPmRldiwgIkZFQyB0aW1lb3V0IG9uIGdyYWNlZnVsIHRyYW5zbWl0IHN0b3BcbiIpOwogCS8qCiAJICogRGlzYWJsZSBGRUMuIExldCBvbmx5IE1JSSBpbnRlcnJ1cHRzLgogCSAqLwpAQCAtMzc4LDcgKzM5MSw3IEBACiBzdGF0aWMgdm9pZCBuYXBpX2NsZWFyX3J4X2V2ZW50KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZzX2VuZXRfcHJpdmF0ZSAqZmVwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlmZWNfdCBfX2lvbWVtICpmZWNwID0gZmVwLT5mZWMuZmVjcDsKKwlzdHJ1Y3QgZmVjIF9faW9tZW0gKmZlY3AgPSBmZXAtPmZlYy5mZWNwOwogCiAJRlcoZmVjcCwgaWV2ZW50LCBGRUNfTkFQSV9SWF9FVkVOVF9NU0spOwogfQpAQCAtMzg2LDcgKzM5OSw3IEBACiBzdGF0aWMgdm9pZCBuYXBpX2VuYWJsZV9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0JZmVjX3QgX19pb21lbSAqZmVjcCA9IGZlcC0+ZmVjLmZlY3A7CisJc3RydWN0IGZlYyBfX2lvbWVtICpmZWNwID0gZmVwLT5mZWMuZmVjcDsKIAogCUZTKGZlY3AsIGltYXNrLCBGRUNfTkFQSV9SWF9FVkVOVF9NU0spOwogfQpAQCAtMzk0LDcgKzQwNyw3IEBACiBzdGF0aWMgdm9pZCBuYXBpX2Rpc2FibGVfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWZlY190IF9faW9tZW0gKmZlY3AgPSBmZXAtPmZlYy5mZWNwOworCXN0cnVjdCBmZWMgX19pb21lbSAqZmVjcCA9IGZlcC0+ZmVjLmZlY3A7CiAKIAlGQyhmZWNwLCBpbWFzaywgRkVDX05BUElfUlhfRVZFTlRfTVNLKTsKIH0KQEAgLTQwMiw3ICs0MTUsNyBAQAogc3RhdGljIHZvaWQgcnhfYmRfZG9uZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0JZmVjX3QgX19pb21lbSAqZmVjcCA9IGZlcC0+ZmVjLmZlY3A7CisJc3RydWN0IGZlYyBfX2lvbWVtICpmZWNwID0gZmVwLT5mZWMuZmVjcDsKIAogCUZXKGZlY3AsIHJfZGVzX2FjdGl2ZSwgMHgwMTAwMDAwMCk7CiB9CkBAIC00MTAsNyArNDIzLDcgQEAKIHN0YXRpYyB2b2lkIHR4X2tpY2tzdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0JZmVjX3QgX19pb21lbSAqZmVjcCA9IGZlcC0+ZmVjLmZlY3A7CisJc3RydWN0IGZlYyBfX2lvbWVtICpmZWNwID0gZmVwLT5mZWMuZmVjcDsKIAogCUZXKGZlY3AsIHhfZGVzX2FjdGl2ZSwgMHgwMTAwMDAwMCk7CiB9CkBAIC00MTgsNyArNDMxLDcgQEAKIHN0YXRpYyB1MzIgZ2V0X2ludF9ldmVudHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZnNfZW5ldF9wcml2YXRlICpmZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWZlY190IF9faW9tZW0gKmZlY3AgPSBmZXAtPmZlYy5mZWNwOworCXN0cnVjdCBmZWMgX19pb21lbSAqZmVjcCA9IGZlcC0+ZmVjLmZlY3A7CiAKIAlyZXR1cm4gRlIoZmVjcCwgaWV2ZW50KSAmIEZSKGZlY3AsIGltYXNrKTsKIH0KQEAgLTQyNiwzMiArNDM5LDMzIEBACiBzdGF0aWMgdm9pZCBjbGVhcl9pbnRfZXZlbnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBpbnRfZXZlbnRzKQogewogCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7Ci0JZmVjX3QgX19pb21lbSAqZmVjcCA9IGZlcC0+ZmVjLmZlY3A7CisJc3RydWN0IGZlYyBfX2lvbWVtICpmZWNwID0gZmVwLT5mZWMuZmVjcDsKIAogCUZXKGZlY3AsIGlldmVudCwgaW50X2V2ZW50cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGV2X2Vycm9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBpbnRfZXZlbnRzKQogewotCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX01PRFVMRV9OQU1FCi0JICAgICAgICI6ICVzIEZFQyBFUlJPUihzKSAweCV4XG4iLCBkZXYtPm5hbWUsIGludF9ldmVudHMpOworCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlkZXZfd2FybihmZXAtPmRldiwgIkZFQyBFUlJPUihzKSAweCV4XG4iLCBpbnRfZXZlbnRzKTsKIH0KIAogc3RhdGljIGludCBnZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwLCBpbnQgKnNpemVwKQogewogCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAoKnNpemVwIDwgc2l6ZW9mKGZlY190KSkKKwlpZiAoKnNpemVwIDwgc2l6ZW9mKHN0cnVjdCBmZWMpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1lbWNweV9mcm9taW8ocCwgZmVwLT5mZWMuZmVjcCwgc2l6ZW9mKGZlY190KSk7CisJbWVtY3B5X2Zyb21pbyhwLCBmZXAtPmZlYy5mZWNwLCBzaXplb2Yoc3RydWN0IGZlYykpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JcmV0dXJuIHNpemVvZihmZWNfdCk7CisJcmV0dXJuIHNpemVvZihzdHJ1Y3QgZmVjKTsKIH0KIAogc3RhdGljIHZvaWQgdHhfcmVzdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9tYWMtc2NjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1zY2MuYwppbmRleCAwMDhjZGQ5Li5jNDkwYTQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1zY2MuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21hYy1zY2MuYwpAQCAtMjEzLDcgKzIxMyw3IEBACiAKIAkvKiBpZiBhbGwgbXVsdGkgb3IgdG9vIG1hbnkgbXVsdGljYXN0czsganVzdCBlbmFibGUgYWxsICovCiAJaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSAhPSAwIHx8Ci0JICAgIGRldi0+bWNfY291bnQgPiBTQ0NfTUFYX01VTFRJQ0FTVF9BRERSUykgeworCSAgICBuZXRkZXZfbWNfY291bnQoZGV2KSA+IFNDQ19NQVhfTVVMVElDQVNUX0FERFJTKSB7CiAKIAkJVzE2KGVwLCBzZW5fZ2FkZHIxLCAweGZmZmYpOwogCQlXMTYoZXAsIHNlbl9nYWRkcjIsIDB4ZmZmZik7CkBAIC0yMjgsNyArMjI4LDcgQEAKIAogCWlmICgoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSA9PSAwKSB7CiAJCXNldF9tdWx0aWNhc3Rfc3RhcnQoZGV2KTsKLQkJZm9yIChwbWMgPSBkZXYtPm1jX2xpc3Q7IHBtYyAhPSBOVUxMOyBwbWMgPSBwbWMtPm5leHQpCisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKHBtYywgZGV2KQogCQkJc2V0X211bHRpY2FzdF9vbmUoZGV2LCBwbWMtPmRtaV9hZGRyKTsKIAkJc2V0X211bHRpY2FzdF9maW5pc2goZGV2KTsKIAl9IGVsc2UKQEAgLTM2Nyw5ICszNjcsNyBAQAogCQl1ZGVsYXkoMSk7CiAKIAlpZiAoaSA9PSBTQ0NfUkVTRVRfREVMQVkpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX01PRFVMRV9OQU1FCi0JCSAgICAgICAiOiAlcyBTQ0MgdGltZW91dCBvbiBncmFjZWZ1bCB0cmFuc21pdCBzdG9wXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJZGV2X3dhcm4oZmVwLT5kZXYsICJTQ0MgdGltZW91dCBvbiBncmFjZWZ1bCB0cmFuc21pdCBzdG9wXG4iKTsKIAogCVcxNihzY2NwLCBzY2Nfc2NjbSwgMCk7CiAJQzMyKHNjY3AsIHNjY19nc21ybCwgU0NDX0dTTVJMX0VOUiB8IFNDQ19HU01STF9FTlQpOwpAQCAtNDI5LDggKzQyNyw5IEBACiAKIHN0YXRpYyB2b2lkIGV2X2Vycm9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBpbnRfZXZlbnRzKQogewotCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX01PRFVMRV9OQU1FCi0JICAgICAgICI6ICVzIFNDQyBFUlJPUihzKSAweCV4XG4iLCBkZXYtPm5hbWUsIGludF9ldmVudHMpOworCXN0cnVjdCBmc19lbmV0X3ByaXZhdGUgKmZlcCA9IG5ldGRldl9wcml2KGRldik7CisKKwlkZXZfd2FybihmZXAtPmRldiwgIlNDQyBFUlJPUihzKSAweCV4XG4iLCBpbnRfZXZlbnRzKTsKIH0KIAogc3RhdGljIGludCBnZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwLCBpbnQgKnNpemVwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZnNfZW5ldC9taWktZmVjLmMgYi9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYwppbmRleCA5NmViYTQyLi41OTQ0YjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYworKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L21paS1mZWMuYwpAQCAtNTIsNyArNTIsNyBAQAogc3RhdGljIGludCBmc19lbmV0X2ZlY19taWlfcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzICwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uKQogewogCXN0cnVjdCBmZWNfaW5mbyogZmVjID0gYnVzLT5wcml2OwotCWZlY190IF9faW9tZW0gKmZlY3AgPSBmZWMtPmZlY3A7CisJc3RydWN0IGZlYyBfX2lvbWVtICpmZWNwID0gZmVjLT5mZWNwOwogCWludCBpLCByZXQgPSAtMTsKIAogCUJVR19PTigoaW5fYmUzMigmZmVjcC0+ZmVjX3JfY250cmwpICYgRkVDX1JDTlRSTF9NSUlfTU9ERSkgPT0gMCk7CkBAIC03NSw3ICs3NSw3IEBACiBzdGF0aWMgaW50IGZzX2VuZXRfZmVjX21paV93cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sIHUxNiB2YWwpCiB7CiAJc3RydWN0IGZlY19pbmZvKiBmZWMgPSBidXMtPnByaXY7Ci0JZmVjX3QgX19pb21lbSAqZmVjcCA9IGZlYy0+ZmVjcDsKKwlzdHJ1Y3QgZmVjIF9faW9tZW0gKmZlY3AgPSBmZWMtPmZlY3A7CiAJaW50IGk7CiAKIAkvKiB0aGlzIG11c3QgbmV2ZXIgaGFwcGVuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9naWFuZmFyLmMgYi9kcml2ZXJzL25ldC9naWFuZmFyLmMKaW5kZXggOGJkM2M5Zi4uNjFhN2I0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZ2lhbmZhci5jCisrKyBiL2RyaXZlcnMvbmV0L2dpYW5mYXIuYwpAQCAtOTk4LDcgKzk5OCw3IEBACiAJfQogCiAJLyogTmVlZCB0byByZXZlcnNlIHRoZSBiaXQgbWFwcyBhcyAgYml0X21hcCdzIE1TQiBpcyBxMAotCSAqIGJ1dCwgZm9yX2VhY2hfYml0IHBhcnNlcyBmcm9tIHJpZ2h0IHRvIGxlZnQsIHdoaWNoCisJICogYnV0LCBmb3JfZWFjaF9zZXRfYml0IHBhcnNlcyBmcm9tIHJpZ2h0IHRvIGxlZnQsIHdoaWNoCiAJICogYmFzaWNhbGx5IHJldmVyc2VzIHRoZSBxdWV1ZSBudW1iZXJzICovCiAJZm9yIChpID0gMDsgaTwgcHJpdi0+bnVtX2dycHM7IGkrKykgewogCQlwcml2LT5nZmFyZ3JwW2ldLnR4X2JpdF9tYXAgPSByZXZlcnNlX2JpdG1hcCgKQEAgLTEwMTEsNyArMTAxMSw3IEBACiAJICogYWxzbyBhc3NpZ24gcXVldWVzIHRvIGdyb3VwcyAqLwogCWZvciAoZ3JwX2lkeCA9IDA7IGdycF9pZHggPCBwcml2LT5udW1fZ3JwczsgZ3JwX2lkeCsrKSB7CiAJCXByaXYtPmdmYXJncnBbZ3JwX2lkeF0ubnVtX3J4X3F1ZXVlcyA9IDB4MDsKLQkJZm9yX2VhY2hfYml0KGksICZwcml2LT5nZmFyZ3JwW2dycF9pZHhdLnJ4X2JpdF9tYXAsCisJCWZvcl9lYWNoX3NldF9iaXQoaSwgJnByaXYtPmdmYXJncnBbZ3JwX2lkeF0ucnhfYml0X21hcCwKIAkJCQlwcml2LT5udW1fcnhfcXVldWVzKSB7CiAJCQlwcml2LT5nZmFyZ3JwW2dycF9pZHhdLm51bV9yeF9xdWV1ZXMrKzsKIAkJCXByaXYtPnJ4X3F1ZXVlW2ldLT5ncnAgPSAmcHJpdi0+Z2ZhcmdycFtncnBfaWR4XTsKQEAgLTEwMTksNyArMTAxOSw3IEBACiAJCQlycXVldWUgPSBycXVldWUgfCAoKFJRVUVVRV9FTjAgfCBSUVVFVUVfRVgwKSA+PiBpKTsKIAkJfQogCQlwcml2LT5nZmFyZ3JwW2dycF9pZHhdLm51bV90eF9xdWV1ZXMgPSAweDA7Ci0JCWZvcl9lYWNoX2JpdCAoaSwgJnByaXYtPmdmYXJncnBbZ3JwX2lkeF0udHhfYml0X21hcCwKKwkJZm9yX2VhY2hfc2V0X2JpdChpLCAmcHJpdi0+Z2ZhcmdycFtncnBfaWR4XS50eF9iaXRfbWFwLAogCQkJCXByaXYtPm51bV90eF9xdWV1ZXMpIHsKIAkJCXByaXYtPmdmYXJncnBbZ3JwX2lkeF0ubnVtX3R4X3F1ZXVlcysrOwogCQkJcHJpdi0+dHhfcXVldWVbaV0tPmdycCA9ICZwcml2LT5nZmFyZ3JwW2dycF9pZHhdOwpAQCAtMTcwOSw3ICsxNzA5LDcgQEAKIAogCWlmIChwcml2LT5tb2RlID09IE1RX01HX01PREUpIHsKIAkJYmFkZHIgPSAmcmVncy0+dHhpYzA7Ci0JCWZvcl9lYWNoX2JpdCAoaSwgJnR4X21hc2ssIHByaXYtPm51bV90eF9xdWV1ZXMpIHsKKwkJZm9yX2VhY2hfc2V0X2JpdChpLCAmdHhfbWFzaywgcHJpdi0+bnVtX3R4X3F1ZXVlcykgewogCQkJaWYgKGxpa2VseShwcml2LT50eF9xdWV1ZVtpXS0+dHhjb2FsZXNjaW5nKSkgewogCQkJCWdmYXJfd3JpdGUoYmFkZHIgKyBpLCAwKTsKIAkJCQlnZmFyX3dyaXRlKGJhZGRyICsgaSwgcHJpdi0+dHhfcXVldWVbaV0tPnR4aWMpOwpAQCAtMTcxNyw3ICsxNzE3LDcgQEAKIAkJfQogCiAJCWJhZGRyID0gJnJlZ3MtPnJ4aWMwOwotCQlmb3JfZWFjaF9iaXQgKGksICZyeF9tYXNrLCBwcml2LT5udW1fcnhfcXVldWVzKSB7CisJCWZvcl9lYWNoX3NldF9iaXQoaSwgJnJ4X21hc2ssIHByaXYtPm51bV9yeF9xdWV1ZXMpIHsKIAkJCWlmIChsaWtlbHkocHJpdi0+cnhfcXVldWVbaV0tPnJ4Y29hbGVzY2luZykpIHsKIAkJCQlnZmFyX3dyaXRlKGJhZGRyICsgaSwgMCk7CiAJCQkJZ2Zhcl93cml0ZShiYWRkciArIGksIHByaXYtPnJ4X3F1ZXVlW2ldLT5yeGljKTsKQEAgLTI2MDcsNyArMjYwNyw3IEBACiAJCWJ1ZGdldF9wZXJfcXVldWUgPSBsZWZ0X292ZXJfYnVkZ2V0L251bV9xdWV1ZXM7CiAJCWxlZnRfb3Zlcl9idWRnZXQgPSAwOwogCi0JCWZvcl9lYWNoX2JpdChpLCAmZ2ZhcmdycC0+cnhfYml0X21hcCwgcHJpdi0+bnVtX3J4X3F1ZXVlcykgeworCQlmb3JfZWFjaF9zZXRfYml0KGksICZnZmFyZ3JwLT5yeF9iaXRfbWFwLCBwcml2LT5udW1fcnhfcXVldWVzKSB7CiAJCQlpZiAodGVzdF9iaXQoaSwgJnNlcnZpY2VkX3F1ZXVlcykpCiAJCQkJY29udGludWU7CiAJCQlyeF9xdWV1ZSA9IHByaXYtPnJ4X3F1ZXVlW2ldOwpAQCAtMjg2MywxMSArMjg2MywxMSBAQAogCQkJZW1fbnVtID0gMDsKIAkJfQogCi0JCWlmIChkZXYtPm1jX2NvdW50ID09IDApCisJCWlmIChuZXRkZXZfbWNfZW1wdHkoZGV2KSkKIAkJCXJldHVybjsKIAogCQkvKiBQYXJzZSB0aGUgbGlzdCwgYW5kIHNldCB0aGUgYXBwcm9wcmlhdGUgYml0cyAqLwotCQlmb3IobWNfcHRyID0gZGV2LT5tY19saXN0OyBtY19wdHI7IG1jX3B0ciA9IG1jX3B0ci0+bmV4dCkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19wdHIsIGRldikgewogCQkJaWYgKGlkeCA8IGVtX251bSkgewogCQkJCWdmYXJfc2V0X21hY19mb3JfYWRkcihkZXYsIGlkeCwKIAkJCQkJCW1jX3B0ci0+ZG1pX2FkZHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ3JldGguYyBiL2RyaXZlcnMvbmV0L2dyZXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI5YzFjYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2dyZXRoLmMKQEAgLTAsMCArMSwxNjM0IEBACisvKgorICogQWVyb2ZsZXggR2Fpc2xlciBHUkVUSCAxMC8xMDAvMUcgRXRoZXJuZXQgTUFDLgorICoKKyAqIDIwMDUtMjAwOSAoYykgQWVyb2ZsZXggR2Fpc2xlciBBQgorICoKKyAqIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEdSRVRIIDEwLzEwMCBhbmQgR1JFVEggMTAvMTAwLzFHIEV0aGVybmV0IE1BQ3MKKyAqIGF2YWlsYWJsZSBpbiB0aGUgR1JMSUIgVkhETCBJUCBjb3JlIGxpYnJhcnkuCisgKgorICogRnVsbCBkb2N1bWVudGF0aW9uIG9mIGJvdGggY29yZXMgY2FuIGJlIGZvdW5kIGhlcmU6CisgKiBodHRwOi8vd3d3LmdhaXNsZXIuY29tL3Byb2R1Y3RzL2dybGliL2dyaXAucGRmCisgKgorICogVGhlIEdpZ2FiaXQgdmVyc2lvbiBzdXBwb3J0cyBzY2F0dGVyL2dhdGhlciBETUEsIGFueSBhbGlnbm1lbnQgb2YKKyAqIGJ1ZmZlcnMgYW5kIGNoZWNrc3VtIG9mZmxvYWRpbmcuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBDb250cmlidXRvcnM6IEtyaXN0b2ZmZXIgR2xlbWJvCisgKiAgICAgICAgICAgICAgIERhbmllbCBIZWxsc3Ryb20KKyAqICAgICAgICAgICAgICAgTWFya28gSXNvbWFraQorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjaWZkZWYgQ09ORklHX1NQQVJDCisjaW5jbHVkZSA8YXNtL2lkcHJvbS5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJncmV0aC5oIgorCisjZGVmaW5lIEdSRVRIX0RFRl9NU0dfRU5BQkxFCSAgXAorCShORVRJRl9NU0dfRFJWCQl8IFwKKwkgTkVUSUZfTVNHX1BST0JFCXwgXAorCSBORVRJRl9NU0dfTElOSwkJfCBcCisJIE5FVElGX01TR19JRkRPV04JfCBcCisJIE5FVElGX01TR19JRlVQCQl8IFwKKwkgTkVUSUZfTVNHX1JYX0VSUgl8IFwKKwkgTkVUSUZfTVNHX1RYX0VSUikKKworc3RhdGljIGludCBncmV0aF9kZWJ1ZyA9IC0xOwkvKiAtMSA9PSB1c2UgR1JFVEhfREVGX01TR19FTkFCTEUgYXMgdmFsdWUgKi8KK21vZHVsZV9wYXJhbShncmV0aF9kZWJ1ZywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZ3JldGhfZGVidWcsICJHUkVUSCBiaXRtYXBwZWQgZGVidWdnaW5nIG1lc3NhZ2UgZW5hYmxlIHZhbHVlIik7CisKKy8qIEFjY2VwdCBNQUMgYWRkcmVzcyBvZiB0aGUgZm9ybSBtYWNhZGRyPTB4MDgsMHgwMCwweDIwLDB4MzAsMHg0MCwweDUwICovCitzdGF0aWMgaW50IG1hY2FkZHJbNl07Cittb2R1bGVfcGFyYW1fYXJyYXkobWFjYWRkciwgaW50LCBOVUxMLCAwKTsKK01PRFVMRV9QQVJNX0RFU0MobWFjYWRkciwgIkdSRVRIIEV0aGVybmV0IE1BQyBhZGRyZXNzIik7CisKK3N0YXRpYyBpbnQgZ3JldGhfZWRjbCA9IDE7Cittb2R1bGVfcGFyYW0oZ3JldGhfZWRjbCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoZ3JldGhfZWRjbCwgIkdSRVRIIEVEQ0wgdXNhZ2UgaW5kaWNhdG9yLiBTZXQgdG8gMSBpZiBFRENMIGlzIHVzZWQuIik7CisKK3N0YXRpYyBpbnQgZ3JldGhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBuZXRkZXZfdHhfdCBncmV0aF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3QgZ3JldGhfc3RhcnRfeG1pdF9nYml0KHN0cnVjdCBza19idWZmICpza2IsCisJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IGdyZXRoX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBsaW1pdCk7CitzdGF0aWMgaW50IGdyZXRoX3J4X2diaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGxpbWl0KTsKK3N0YXRpYyB2b2lkIGdyZXRoX2NsZWFuX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgZ3JldGhfY2xlYW5fdHhfZ2JpdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBncmV0aF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKK3N0YXRpYyBpbnQgZ3JldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IGdyZXRoX3NldF9tYWNfYWRkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApOworc3RhdGljIHZvaWQgZ3JldGhfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCisjZGVmaW5lIEdSRVRIX1JFR0xPQUQoYSkJICAgIChiZTMyX3RvX2NwdShfX3Jhd19yZWFkbCgmKGEpKSkpCisjZGVmaW5lIEdSRVRIX1JFR1NBVkUoYSwgdikgICAgICAgICAoX19yYXdfd3JpdGVsKGNwdV90b19iZTMyKHYpLCAmKGEpKSkKKyNkZWZpbmUgR1JFVEhfUkVHT1JJTihhLCB2KSAgICAgICAgIChHUkVUSF9SRUdTQVZFKGEsIChHUkVUSF9SRUdMT0FEKGEpIHwgKHYpKSkpCisjZGVmaW5lIEdSRVRIX1JFR0FORElOKGEsIHYpICAgICAgICAoR1JFVEhfUkVHU0FWRShhLCAoR1JFVEhfUkVHTE9BRChhKSAmICh2KSkpKQorCisjZGVmaW5lIE5FWFRfVFgoTikgICAgICAoKChOKSArIDEpICYgR1JFVEhfVFhCRF9OVU1fTUFTSykKKyNkZWZpbmUgU0tJUF9UWChOLCBDKSAgICgoKE4pICsgQykgJiBHUkVUSF9UWEJEX05VTV9NQVNLKQorI2RlZmluZSBORVhUX1JYKE4pICAgICAgKCgoTikgKyAxKSAmIEdSRVRIX1JYQkRfTlVNX01BU0spCisKK3N0YXRpYyB2b2lkIGdyZXRoX3ByaW50X3J4X3BhY2tldCh2b2lkICphZGRyLCBpbnQgbGVuKQoreworCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICJSWDogIiwgRFVNUF9QUkVGSVhfT0ZGU0VULCAxNiwgMSwKKwkJCWFkZHIsIGxlbiwgdHJ1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGdyZXRoX3ByaW50X3R4X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCWludCBpOworCWludCBsZW5ndGg7CisKKwlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9PSAwKQorCQlsZW5ndGggPSBza2ItPmxlbjsKKwllbHNlCisJCWxlbmd0aCA9IHNrYl9oZWFkbGVuKHNrYik7CisKKwlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiVFg6ICIsIERVTVBfUFJFRklYX09GRlNFVCwgMTYsIDEsCisJCQlza2ItPmRhdGEsIGxlbmd0aCwgdHJ1ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKSB7CisKKwkJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgIlRYOiAiLCBEVU1QX1BSRUZJWF9PRkZTRVQsIDE2LCAxLAorCQkJICAgICAgIHBoeXNfdG9fdmlydChwYWdlX3RvX3BoeXMoc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5wYWdlKSkgKworCQkJICAgICAgIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZV9vZmZzZXQsCisJCQkgICAgICAgbGVuZ3RoLCB0cnVlKTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncmV0aF9lbmFibGVfdHgoc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoKQoreworCXdtYigpOworCUdSRVRIX1JFR09SSU4oZ3JldGgtPnJlZ3MtPmNvbnRyb2wsIEdSRVRIX1RYRU4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3JldGhfZGlzYWJsZV90eChzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGgpCit7CisJR1JFVEhfUkVHQU5ESU4oZ3JldGgtPnJlZ3MtPmNvbnRyb2wsIH5HUkVUSF9UWEVOKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdyZXRoX2VuYWJsZV9yeChzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGgpCit7CisJd21iKCk7CisJR1JFVEhfUkVHT1JJTihncmV0aC0+cmVncy0+Y29udHJvbCwgR1JFVEhfUlhFTik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncmV0aF9kaXNhYmxlX3J4KHN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCkKK3sKKwlHUkVUSF9SRUdBTkRJTihncmV0aC0+cmVncy0+Y29udHJvbCwgfkdSRVRIX1JYRU4pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ3JldGhfZW5hYmxlX2lycXMoc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoKQoreworCUdSRVRIX1JFR09SSU4oZ3JldGgtPnJlZ3MtPmNvbnRyb2wsIEdSRVRIX1JYSSB8IEdSRVRIX1RYSSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBncmV0aF9kaXNhYmxlX2lycXMoc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoKQoreworCUdSRVRIX1JFR0FORElOKGdyZXRoLT5yZWdzLT5jb250cm9sLCB+KEdSRVRIX1JYSXxHUkVUSF9UWEkpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdyZXRoX3dyaXRlX2JkKHUzMiAqYmQsIHUzMiB2YWwpCit7CisJX19yYXdfd3JpdGVsKGNwdV90b19iZTMyKHZhbCksIGJkKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgZ3JldGhfcmVhZF9iZCh1MzIgKmJkKQoreworCXJldHVybiBiZTMyX3RvX2NwdShfX3Jhd19yZWFkbChiZCkpOworfQorCitzdGF0aWMgdm9pZCBncmV0aF9jbGVhbl9yaW5ncyhzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGgpCit7CisJaW50IGk7CisJc3RydWN0IGdyZXRoX2JkICpyeF9iZHAgPSBncmV0aC0+cnhfYmRfYmFzZTsKKwlzdHJ1Y3QgZ3JldGhfYmQgKnR4X2JkcCA9IGdyZXRoLT50eF9iZF9iYXNlOworCisJaWYgKGdyZXRoLT5nYml0X21hYykgeworCisJCS8qIEZyZWUgYW5kIHVubWFwIFJYIGJ1ZmZlcnMgKi8KKwkJZm9yIChpID0gMDsgaSA8IEdSRVRIX1JYQkRfTlVNOyBpKyssIHJ4X2JkcCsrKSB7CisJCQlpZiAoZ3JldGgtPnJ4X3NrYnVmZltpXSAhPSBOVUxMKSB7CisJCQkJZGV2X2tmcmVlX3NrYihncmV0aC0+cnhfc2tidWZmW2ldKTsKKwkJCQlkbWFfdW5tYXBfc2luZ2xlKGdyZXRoLT5kZXYsCisJCQkJCQkgZ3JldGhfcmVhZF9iZCgmcnhfYmRwLT5hZGRyKSwKKwkJCQkJCSBNQVhfRlJBTUVfU0laRStORVRfSVBfQUxJR04sCisJCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKKwkJCX0KKwkJfQorCisJCS8qIFRYIGJ1ZmZlcnMgKi8KKwkJd2hpbGUgKGdyZXRoLT50eF9mcmVlIDwgR1JFVEhfVFhCRF9OVU0pIHsKKworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGdyZXRoLT50eF9za2J1ZmZbZ3JldGgtPnR4X2xhc3RdOworCQkJaW50IG5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwkJCXR4X2JkcCA9IGdyZXRoLT50eF9iZF9iYXNlICsgZ3JldGgtPnR4X2xhc3Q7CisJCQlncmV0aC0+dHhfbGFzdCA9IE5FWFRfVFgoZ3JldGgtPnR4X2xhc3QpOworCisJCQlkbWFfdW5tYXBfc2luZ2xlKGdyZXRoLT5kZXYsCisJCQkJCSBncmV0aF9yZWFkX2JkKCZ0eF9iZHAtPmFkZHIpLAorCQkJCQkgc2tiX2hlYWRsZW4oc2tiKSwKKwkJCQkJIERNQV9UT19ERVZJQ0UpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgbnJfZnJhZ3M7IGkrKykgeworCQkJCXNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKKwkJCQl0eF9iZHAgPSBncmV0aC0+dHhfYmRfYmFzZSArIGdyZXRoLT50eF9sYXN0OworCisJCQkJZG1hX3VubWFwX3BhZ2UoZ3JldGgtPmRldiwKKwkJCQkJICAgICAgIGdyZXRoX3JlYWRfYmQoJnR4X2JkcC0+YWRkciksCisJCQkJCSAgICAgICBmcmFnLT5zaXplLAorCQkJCQkgICAgICAgRE1BX1RPX0RFVklDRSk7CisKKwkJCQlncmV0aC0+dHhfbGFzdCA9IE5FWFRfVFgoZ3JldGgtPnR4X2xhc3QpOworCQkJfQorCQkJZ3JldGgtPnR4X2ZyZWUgKz0gbnJfZnJhZ3MrMTsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJfQorCisKKwl9IGVsc2UgeyAvKiAxMC8xMDAgTWJwcyBNQUMgKi8KKworCQlmb3IgKGkgPSAwOyBpIDwgR1JFVEhfUlhCRF9OVU07IGkrKywgcnhfYmRwKyspIHsKKwkJCWtmcmVlKGdyZXRoLT5yeF9idWZzW2ldKTsKKwkJCWRtYV91bm1hcF9zaW5nbGUoZ3JldGgtPmRldiwKKwkJCQkJIGdyZXRoX3JlYWRfYmQoJnJ4X2JkcC0+YWRkciksCisJCQkJCSBNQVhfRlJBTUVfU0laRSwKKwkJCQkJIERNQV9GUk9NX0RFVklDRSk7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IEdSRVRIX1RYQkRfTlVNOyBpKyssIHR4X2JkcCsrKSB7CisJCQlrZnJlZShncmV0aC0+dHhfYnVmc1tpXSk7CisJCQlkbWFfdW5tYXBfc2luZ2xlKGdyZXRoLT5kZXYsCisJCQkJCSBncmV0aF9yZWFkX2JkKCZ0eF9iZHAtPmFkZHIpLAorCQkJCQkgTUFYX0ZSQU1FX1NJWkUsCisJCQkJCSBETUFfVE9fREVWSUNFKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBncmV0aF9pbml0X3JpbmdzKHN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBncmV0aF9iZCAqcnhfYmQsICp0eF9iZDsKKwl1MzIgZG1hX2FkZHI7CisJaW50IGk7CisKKwlyeF9iZCA9IGdyZXRoLT5yeF9iZF9iYXNlOworCXR4X2JkID0gZ3JldGgtPnR4X2JkX2Jhc2U7CisKKwkvKiBJbml0aWFsaXplIGRlc2NyaXB0b3IgcmluZ3MgYW5kIGJ1ZmZlcnMgKi8KKwlpZiAoZ3JldGgtPmdiaXRfbWFjKSB7CisKKwkJZm9yIChpID0gMDsgaSA8IEdSRVRIX1JYQkRfTlVNOyBpKyspIHsKKwkJCXNrYiA9IG5ldGRldl9hbGxvY19za2IoZ3JldGgtPm5ldGRldiwgTUFYX0ZSQU1FX1NJWkUrTkVUX0lQX0FMSUdOKTsKKwkJCWlmIChza2IgPT0gTlVMTCkgeworCQkJCWlmIChuZXRpZl9tc2dfaWZ1cChncmV0aCkpCisJCQkJCWRldl9lcnIoZ3JldGgtPmRldiwgIkVycm9yIGFsbG9jYXRpbmcgRE1BIHJpbmcuXG4iKTsKKwkJCQlnb3RvIGNsZWFudXA7CisJCQl9CisJCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CisJCQlkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGdyZXRoLT5kZXYsCisJCQkJCQkgIHNrYi0+ZGF0YSwKKwkJCQkJCSAgTUFYX0ZSQU1FX1NJWkUrTkVUX0lQX0FMSUdOLAorCQkJCQkJICBETUFfRlJPTV9ERVZJQ0UpOworCisJCQlpZiAoZG1hX21hcHBpbmdfZXJyb3IoZ3JldGgtPmRldiwgZG1hX2FkZHIpKSB7CisJCQkJaWYgKG5ldGlmX21zZ19pZnVwKGdyZXRoKSkKKwkJCQkJZGV2X2VycihncmV0aC0+ZGV2LCAiQ291bGQgbm90IGNyZWF0ZSBpbml0aWFsIERNQSBtYXBwaW5nXG4iKTsKKwkJCQlnb3RvIGNsZWFudXA7CisJCQl9CisJCQlncmV0aC0+cnhfc2tidWZmW2ldID0gc2tiOworCQkJZ3JldGhfd3JpdGVfYmQoJnJ4X2JkW2ldLmFkZHIsIGRtYV9hZGRyKTsKKwkJCWdyZXRoX3dyaXRlX2JkKCZyeF9iZFtpXS5zdGF0LCBHUkVUSF9CRF9FTiB8IEdSRVRIX0JEX0lFKTsKKwkJfQorCisJfSBlbHNlIHsKKworCQkvKiAxMC8xMDAgTUFDIHVzZXMgYSBmaXhlZCBzZXQgb2YgYnVmZmVycyBhbmQgY29weSB0by9mcm9tIFNLQnMgKi8KKwkJZm9yIChpID0gMDsgaSA8IEdSRVRIX1JYQkRfTlVNOyBpKyspIHsKKworCQkJZ3JldGgtPnJ4X2J1ZnNbaV0gPSBrbWFsbG9jKE1BWF9GUkFNRV9TSVpFLCBHRlBfS0VSTkVMKTsKKworCQkJaWYgKGdyZXRoLT5yeF9idWZzW2ldID09IE5VTEwpIHsKKwkJCQlpZiAobmV0aWZfbXNnX2lmdXAoZ3JldGgpKQorCQkJCQlkZXZfZXJyKGdyZXRoLT5kZXYsICJFcnJvciBhbGxvY2F0aW5nIERNQSByaW5nLlxuIik7CisJCQkJZ290byBjbGVhbnVwOworCQkJfQorCisJCQlkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGdyZXRoLT5kZXYsCisJCQkJCQkgIGdyZXRoLT5yeF9idWZzW2ldLAorCQkJCQkJICBNQVhfRlJBTUVfU0laRSwKKwkJCQkJCSAgRE1BX0ZST01fREVWSUNFKTsKKworCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGdyZXRoLT5kZXYsIGRtYV9hZGRyKSkgeworCQkJCWlmIChuZXRpZl9tc2dfaWZ1cChncmV0aCkpCisJCQkJCWRldl9lcnIoZ3JldGgtPmRldiwgIkNvdWxkIG5vdCBjcmVhdGUgaW5pdGlhbCBETUEgbWFwcGluZ1xuIik7CisJCQkJZ290byBjbGVhbnVwOworCQkJfQorCQkJZ3JldGhfd3JpdGVfYmQoJnJ4X2JkW2ldLmFkZHIsIGRtYV9hZGRyKTsKKwkJCWdyZXRoX3dyaXRlX2JkKCZyeF9iZFtpXS5zdGF0LCBHUkVUSF9CRF9FTiB8IEdSRVRIX0JEX0lFKTsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgR1JFVEhfVFhCRF9OVU07IGkrKykgeworCisJCQlncmV0aC0+dHhfYnVmc1tpXSA9IGttYWxsb2MoTUFYX0ZSQU1FX1NJWkUsIEdGUF9LRVJORUwpOworCisJCQlpZiAoZ3JldGgtPnR4X2J1ZnNbaV0gPT0gTlVMTCkgeworCQkJCWlmIChuZXRpZl9tc2dfaWZ1cChncmV0aCkpCisJCQkJCWRldl9lcnIoZ3JldGgtPmRldiwgIkVycm9yIGFsbG9jYXRpbmcgRE1BIHJpbmcuXG4iKTsKKwkJCQlnb3RvIGNsZWFudXA7CisJCQl9CisKKwkJCWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoZ3JldGgtPmRldiwKKwkJCQkJCSAgZ3JldGgtPnR4X2J1ZnNbaV0sCisJCQkJCQkgIE1BWF9GUkFNRV9TSVpFLAorCQkJCQkJICBETUFfVE9fREVWSUNFKTsKKworCQkJaWYgKGRtYV9tYXBwaW5nX2Vycm9yKGdyZXRoLT5kZXYsIGRtYV9hZGRyKSkgeworCQkJCWlmIChuZXRpZl9tc2dfaWZ1cChncmV0aCkpCisJCQkJCWRldl9lcnIoZ3JldGgtPmRldiwgIkNvdWxkIG5vdCBjcmVhdGUgaW5pdGlhbCBETUEgbWFwcGluZ1xuIik7CisJCQkJZ290byBjbGVhbnVwOworCQkJfQorCQkJZ3JldGhfd3JpdGVfYmQoJnR4X2JkW2ldLmFkZHIsIGRtYV9hZGRyKTsKKwkJCWdyZXRoX3dyaXRlX2JkKCZ0eF9iZFtpXS5zdGF0LCAwKTsKKwkJfQorCX0KKwlncmV0aF93cml0ZV9iZCgmcnhfYmRbR1JFVEhfUlhCRF9OVU0gLSAxXS5zdGF0LAorCQkgICAgICAgZ3JldGhfcmVhZF9iZCgmcnhfYmRbR1JFVEhfUlhCRF9OVU0gLSAxXS5zdGF0KSB8IEdSRVRIX0JEX1dSKTsKKworCS8qIEluaXRpYWxpemUgcG9pbnRlcnMuICovCisJZ3JldGgtPnJ4X2N1ciA9IDA7CisJZ3JldGgtPnR4X25leHQgPSAwOworCWdyZXRoLT50eF9sYXN0ID0gMDsKKwlncmV0aC0+dHhfZnJlZSA9IEdSRVRIX1RYQkRfTlVNOworCisJLyogSW5pdGlhbGl6ZSBkZXNjcmlwdG9yIGJhc2UgYWRkcmVzcyAqLworCUdSRVRIX1JFR1NBVkUoZ3JldGgtPnJlZ3MtPnR4X2Rlc2NfcCwgZ3JldGgtPnR4X2JkX2Jhc2VfcGh5cyk7CisJR1JFVEhfUkVHU0FWRShncmV0aC0+cmVncy0+cnhfZGVzY19wLCBncmV0aC0+cnhfYmRfYmFzZV9waHlzKTsKKworCXJldHVybiAwOworCitjbGVhbnVwOgorCWdyZXRoX2NsZWFuX3JpbmdzKGdyZXRoKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworc3RhdGljIGludCBncmV0aF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgZXJyOworCisJZXJyID0gZ3JldGhfaW5pdF9yaW5ncyhncmV0aCk7CisJaWYgKGVycikgeworCQlpZiAobmV0aWZfbXNnX2lmdXAoZ3JldGgpKQorCQkJZGV2X2VycigmZGV2LT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBETUEgcmluZ3NcbiIpOworCQlyZXR1cm4gZXJyOworCX0KKworCWVyciA9IHJlcXVlc3RfaXJxKGdyZXRoLT5pcnEsIGdyZXRoX2ludGVycnVwdCwgMCwgImV0aCIsICh2b2lkICopIGRldik7CisJaWYgKGVycikgeworCQlpZiAobmV0aWZfbXNnX2lmdXAoZ3JldGgpKQorCQkJZGV2X2VycigmZGV2LT5kZXYsICJDb3VsZCBub3QgYWxsb2NhdGUgaW50ZXJydXB0ICVkXG4iLCBkZXYtPmlycSk7CisJCWdyZXRoX2NsZWFuX3JpbmdzKGdyZXRoKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwlpZiAobmV0aWZfbXNnX2lmdXAoZ3JldGgpKQorCQlkZXZfZGJnKCZkZXYtPmRldiwgIiBzdGFydGluZyBxdWV1ZVxuIik7CisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKKworCW5hcGlfZW5hYmxlKCZncmV0aC0+bmFwaSk7CisKKwlncmV0aF9lbmFibGVfaXJxcyhncmV0aCk7CisJZ3JldGhfZW5hYmxlX3R4KGdyZXRoKTsKKwlncmV0aF9lbmFibGVfcngoZ3JldGgpOworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgZ3JldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGggPSBuZXRkZXZfcHJpdihkZXYpOworCisJbmFwaV9kaXNhYmxlKCZncmV0aC0+bmFwaSk7CisKKwlncmV0aF9kaXNhYmxlX3R4KGdyZXRoKTsKKworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCWZyZWVfaXJxKGdyZXRoLT5pcnEsICh2b2lkICopIGRldik7CisKKwlncmV0aF9jbGVhbl9yaW5ncyhncmV0aCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIG5ldGRldl90eF90CitncmV0aF9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZ3JldGhfYmQgKmJkcDsKKwlpbnQgZXJyID0gTkVUREVWX1RYX09LOworCXUzMiBzdGF0dXMsIGRtYV9hZGRyOworCisJYmRwID0gZ3JldGgtPnR4X2JkX2Jhc2UgKyBncmV0aC0+dHhfbmV4dDsKKworCWlmICh1bmxpa2VseShncmV0aC0+dHhfZnJlZSA8PSAwKSkgeworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CisKKwlpZiAobmV0aWZfbXNnX3BrdGRhdGEoZ3JldGgpKQorCQlncmV0aF9wcmludF90eF9wYWNrZXQoc2tiKTsKKworCisJaWYgKHVubGlrZWx5KHNrYi0+bGVuID4gTUFYX0ZSQU1FX1NJWkUpKSB7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWdvdG8gb3V0OworCX0KKworCWRtYV9hZGRyID0gZ3JldGhfcmVhZF9iZCgmYmRwLT5hZGRyKTsKKworCW1lbWNweSgodW5zaWduZWQgY2hhciAqKSBwaHlzX3RvX3ZpcnQoZG1hX2FkZHIpLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCWRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGdyZXRoLT5kZXYsIGRtYV9hZGRyLCBza2ItPmxlbiwgRE1BX1RPX0RFVklDRSk7CisKKwlzdGF0dXMgPSBHUkVUSF9CRF9FTiB8IChza2ItPmxlbiAmIEdSRVRIX0JEX0xFTik7CisKKwkvKiBXcmFwIGFyb3VuZCBkZXNjcmlwdG9yIHJpbmcgKi8KKwlpZiAoZ3JldGgtPnR4X25leHQgPT0gR1JFVEhfVFhCRF9OVU1fTUFTSykgeworCQlzdGF0dXMgfD0gR1JFVEhfQkRfV1I7CisJfQorCisJZ3JldGgtPnR4X25leHQgPSBORVhUX1RYKGdyZXRoLT50eF9uZXh0KTsKKwlncmV0aC0+dHhfZnJlZS0tOworCisJLyogTm8gbW9yZSBkZXNjcmlwdG9ycyAqLworCWlmICh1bmxpa2VseShncmV0aC0+dHhfZnJlZSA9PSAwKSkgeworCisJCS8qIEZyZWUgdHJhbnNtaXR0ZWQgZGVzY3JpcHRvcnMgKi8KKwkJZ3JldGhfY2xlYW5fdHgoZGV2KTsKKworCQkvKiBJZiBub3RoaW5nIHdhcyBjbGVhbmVkLCBzdG9wIHF1ZXVlICYgd2FpdCBmb3IgaXJxICovCisJCWlmICh1bmxpa2VseShncmV0aC0+dHhfZnJlZSA9PSAwKSkgeworCQkJc3RhdHVzIHw9IEdSRVRIX0JEX0lFOworCQkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQl9CisJfQorCisJLyogV3JpdGUgZGVzY3JpcHRvciBjb250cm9sIHdvcmQgYW5kIGVuYWJsZSB0cmFuc21pc3Npb24gKi8KKwlncmV0aF93cml0ZV9iZCgmYmRwLT5zdGF0LCBzdGF0dXMpOworCWdyZXRoX2VuYWJsZV90eChncmV0aCk7CisKK291dDoKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgbmV0ZGV2X3R4X3QKK2dyZXRoX3N0YXJ0X3htaXRfZ2JpdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGdyZXRoX2JkICpiZHA7CisJdTMyIHN0YXR1cyA9IDAsIGRtYV9hZGRyOworCWludCBjdXJyX3R4LCBucl9mcmFncywgaSwgZXJyID0gTkVUREVWX1RYX09LOworCisJbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCisJaWYgKGdyZXRoLT50eF9mcmVlIDwgbnJfZnJhZ3MgKyAxKSB7CisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJZXJyID0gTkVUREVWX1RYX0JVU1k7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChuZXRpZl9tc2dfcGt0ZGF0YShncmV0aCkpCisJCWdyZXRoX3ByaW50X3R4X3BhY2tldChza2IpOworCisJaWYgKHVubGlrZWx5KHNrYi0+bGVuID4gTUFYX0ZSQU1FX1NJWkUpKSB7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWdvdG8gb3V0OworCX0KKworCS8qIFNhdmUgc2tiIHBvaW50ZXIuICovCisJZ3JldGgtPnR4X3NrYnVmZltncmV0aC0+dHhfbmV4dF0gPSBza2I7CisKKwkvKiBMaW5lYXIgYnVmICovCisJaWYgKG5yX2ZyYWdzICE9IDApCisJCXN0YXR1cyA9IEdSRVRIX1RYQkRfTU9SRTsKKworCXN0YXR1cyB8PSBHUkVUSF9UWEJEX0NTQUxMOworCXN0YXR1cyB8PSBza2JfaGVhZGxlbihza2IpICYgR1JFVEhfQkRfTEVOOworCWlmIChncmV0aC0+dHhfbmV4dCA9PSBHUkVUSF9UWEJEX05VTV9NQVNLKQorCQlzdGF0dXMgfD0gR1JFVEhfQkRfV1I7CisKKworCWJkcCA9IGdyZXRoLT50eF9iZF9iYXNlICsgZ3JldGgtPnR4X25leHQ7CisJZ3JldGhfd3JpdGVfYmQoJmJkcC0+c3RhdCwgc3RhdHVzKTsKKwlkbWFfYWRkciA9IGRtYV9tYXBfc2luZ2xlKGdyZXRoLT5kZXYsIHNrYi0+ZGF0YSwgc2tiX2hlYWRsZW4oc2tiKSwgRE1BX1RPX0RFVklDRSk7CisKKwlpZiAodW5saWtlbHkoZG1hX21hcHBpbmdfZXJyb3IoZ3JldGgtPmRldiwgZG1hX2FkZHIpKSkKKwkJZ290byBtYXBfZXJyb3I7CisKKwlncmV0aF93cml0ZV9iZCgmYmRwLT5hZGRyLCBkbWFfYWRkcik7CisKKwljdXJyX3R4ID0gTkVYVF9UWChncmV0aC0+dHhfbmV4dCk7CisKKwkvKiBGcmFncyAqLworCWZvciAoaSA9IDA7IGkgPCBucl9mcmFnczsgaSsrKSB7CisJCXNrYl9mcmFnX3QgKmZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKKwkJZ3JldGgtPnR4X3NrYnVmZltjdXJyX3R4XSA9IE5VTEw7CisJCWJkcCA9IGdyZXRoLT50eF9iZF9iYXNlICsgY3Vycl90eDsKKworCQlzdGF0dXMgPSBHUkVUSF9UWEJEX0NTQUxMOworCQlzdGF0dXMgfD0gZnJhZy0+c2l6ZSAmIEdSRVRIX0JEX0xFTjsKKworCQkvKiBXcmFwIGFyb3VuZCBkZXNjcmlwdG9yIHJpbmcgKi8KKwkJaWYgKGN1cnJfdHggPT0gR1JFVEhfVFhCRF9OVU1fTUFTSykKKwkJCXN0YXR1cyB8PSBHUkVUSF9CRF9XUjsKKworCQkvKiBNb3JlIGZyYWdtZW50cyBsZWZ0ICovCisJCWlmIChpIDwgbnJfZnJhZ3MgLSAxKQorCQkJc3RhdHVzIHw9IEdSRVRIX1RYQkRfTU9SRTsKKworCQkvKiAuLi4gbGFzdCBmcmFnbWVudCwgY2hlY2sgaWYgb3V0IG9mIGRlc2NyaXB0b3JzICAqLworCQllbHNlIGlmIChncmV0aC0+dHhfZnJlZSAtIG5yX2ZyYWdzIC0gMSA8IChNQVhfU0tCX0ZSQUdTICsgMSkpIHsKKworCQkJLyogRW5hYmxlIGludGVycnVwdHMgYW5kIHN0b3AgcXVldWUgKi8KKwkJCXN0YXR1cyB8PSBHUkVUSF9CRF9JRTsKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwkJfQorCisJCWdyZXRoX3dyaXRlX2JkKCZiZHAtPnN0YXQsIHN0YXR1cyk7CisKKwkJZG1hX2FkZHIgPSBkbWFfbWFwX3BhZ2UoZ3JldGgtPmRldiwKKwkJCQkJZnJhZy0+cGFnZSwKKwkJCQkJZnJhZy0+cGFnZV9vZmZzZXQsCisJCQkJCWZyYWctPnNpemUsCisJCQkJCURNQV9UT19ERVZJQ0UpOworCisJCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihncmV0aC0+ZGV2LCBkbWFfYWRkcikpKQorCQkJZ290byBmcmFnX21hcF9lcnJvcjsKKworCQlncmV0aF93cml0ZV9iZCgmYmRwLT5hZGRyLCBkbWFfYWRkcik7CisKKwkJY3Vycl90eCA9IE5FWFRfVFgoY3Vycl90eCk7CisJfQorCisJd21iKCk7CisKKwkvKiBFbmFibGUgdGhlIGRlc2NyaXB0b3JzIHRoYXQgd2UgY29uZmlndXJlZCAuLi4gICovCisJZm9yIChpID0gMDsgaSA8IG5yX2ZyYWdzICsgMTsgaSsrKSB7CisJCWJkcCA9IGdyZXRoLT50eF9iZF9iYXNlICsgZ3JldGgtPnR4X25leHQ7CisJCWdyZXRoX3dyaXRlX2JkKCZiZHAtPnN0YXQsIGdyZXRoX3JlYWRfYmQoJmJkcC0+c3RhdCkgfCBHUkVUSF9CRF9FTik7CisJCWdyZXRoLT50eF9uZXh0ID0gTkVYVF9UWChncmV0aC0+dHhfbmV4dCk7CisJCWdyZXRoLT50eF9mcmVlLS07CisJfQorCisJZ3JldGhfZW5hYmxlX3R4KGdyZXRoKTsKKworCXJldHVybiBORVRERVZfVFhfT0s7CisKK2ZyYWdfbWFwX2Vycm9yOgorCS8qIFVubWFwIFNLQiBtYXBwaW5ncyB0aGF0IHN1Y2NlZWRlZCAqLworCWZvciAoaSA9IDA7IGdyZXRoLT50eF9uZXh0ICsgaSAhPSBjdXJyX3R4OyBpKyspIHsKKwkJYmRwID0gZ3JldGgtPnR4X2JkX2Jhc2UgKyBncmV0aC0+dHhfbmV4dCArIGk7CisJCWRtYV91bm1hcF9zaW5nbGUoZ3JldGgtPmRldiwKKwkJCQkgZ3JldGhfcmVhZF9iZCgmYmRwLT5hZGRyKSwKKwkJCQkgZ3JldGhfcmVhZF9iZCgmYmRwLT5zdGF0KSAmIEdSRVRIX0JEX0xFTiwKKwkJCQkgRE1BX1RPX0RFVklDRSk7CisJfQorbWFwX2Vycm9yOgorCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCWRldl93YXJuKGdyZXRoLT5kZXYsICJDb3VsZCBub3QgY3JlYXRlIFRYIERNQSBtYXBwaW5nXG4iKTsKKwlkZXZfa2ZyZWVfc2tiKHNrYik7CitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgaXJxcmV0dXJuX3QgZ3JldGhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aDsKKwl1MzIgc3RhdHVzOworCWlycXJldHVybl90IHJldHZhbCA9IElSUV9OT05FOworCisJZ3JldGggPSBuZXRkZXZfcHJpdihkZXYpOworCisJc3Bpbl9sb2NrKCZncmV0aC0+ZGV2bG9jayk7CisKKwkvKiBHZXQgdGhlIGludGVycnVwdCBldmVudHMgdGhhdCBjYXVzZWQgdXMgdG8gYmUgaGVyZS4gKi8KKwlzdGF0dXMgPSBHUkVUSF9SRUdMT0FEKGdyZXRoLT5yZWdzLT5zdGF0dXMpOworCisJLyogSGFuZGxlIHJ4IGFuZCB0eCBpbnRlcnJ1cHRzIHRocm91Z2ggcG9sbCAqLworCWlmIChzdGF0dXMgJiAoR1JFVEhfSU5UX1JYIHwgR1JFVEhfSU5UX1RYKSkgeworCisJCS8qIENsZWFyIGludGVycnVwdCBzdGF0dXMgKi8KKwkJR1JFVEhfUkVHT1JJTihncmV0aC0+cmVncy0+c3RhdHVzLAorCQkJICAgICAgc3RhdHVzICYgKEdSRVRIX0lOVF9SWCB8IEdSRVRIX0lOVF9UWCkpOworCisJCXJldHZhbCA9IElSUV9IQU5ETEVEOworCisJCS8qIERpc2FibGUgaW50ZXJydXB0cyBhbmQgc2NoZWR1bGUgcG9sbCgpICovCisJCWdyZXRoX2Rpc2FibGVfaXJxcyhncmV0aCk7CisJCW5hcGlfc2NoZWR1bGUoJmdyZXRoLT5uYXBpKTsKKwl9CisKKwltbWlvd2IoKTsKKwlzcGluX3VubG9jaygmZ3JldGgtPmRldmxvY2spOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgZ3JldGhfY2xlYW5fdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGg7CisJc3RydWN0IGdyZXRoX2JkICpiZHA7CisJdTMyIHN0YXQ7CisKKwlncmV0aCA9IG5ldGRldl9wcml2KGRldik7CisKKwl3aGlsZSAoMSkgeworCQliZHAgPSBncmV0aC0+dHhfYmRfYmFzZSArIGdyZXRoLT50eF9sYXN0OworCQlzdGF0ID0gZ3JldGhfcmVhZF9iZCgmYmRwLT5zdGF0KTsKKworCQlpZiAodW5saWtlbHkoc3RhdCAmIEdSRVRIX0JEX0VOKSkKKwkJCWJyZWFrOworCisJCWlmIChncmV0aC0+dHhfZnJlZSA9PSBHUkVUSF9UWEJEX05VTSkKKwkJCWJyZWFrOworCisJCS8qIENoZWNrIHN0YXR1cyBmb3IgZXJyb3JzICovCisJCWlmICh1bmxpa2VseShzdGF0ICYgR1JFVEhfVFhCRF9TVEFUVVMpKSB7CisJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOworCQkJaWYgKHN0YXQgJiBHUkVUSF9UWEJEX0VSUl9BTCkKKwkJCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCQlpZiAoc3RhdCAmIEdSRVRIX1RYQkRfRVJSX1VFKQorCQkJCWRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKKwkJfQorCQlkZXYtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwkJZ3JldGgtPnR4X2xhc3QgPSBORVhUX1RYKGdyZXRoLT50eF9sYXN0KTsKKwkJZ3JldGgtPnR4X2ZyZWUrKzsKKwl9CisKKwlpZiAoZ3JldGgtPnR4X2ZyZWUgPiAwKSB7CisJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwl9CisKK30KKworc3RhdGljIGlubGluZSB2b2lkIGdyZXRoX3VwZGF0ZV90eF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RhdCkKK3sKKwkvKiBDaGVjayBzdGF0dXMgZm9yIGVycm9ycyAqLworCWlmICh1bmxpa2VseShzdGF0ICYgR1JFVEhfVFhCRF9TVEFUVVMpKSB7CisJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CisJCWlmIChzdGF0ICYgR1JFVEhfVFhCRF9FUlJfQUwpCisJCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJCWlmIChzdGF0ICYgR1JFVEhfVFhCRF9FUlJfVUUpCisJCQlkZXYtPnN0YXRzLnR4X2ZpZm9fZXJyb3JzKys7CisJCWlmIChzdGF0ICYgR1JFVEhfVFhCRF9FUlJfTEMpCisJCQlkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CisJfQorCWRldi0+c3RhdHMudHhfcGFja2V0cysrOworfQorCitzdGF0aWMgdm9pZCBncmV0aF9jbGVhbl90eF9nYml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoOworCXN0cnVjdCBncmV0aF9iZCAqYmRwLCAqYmRwX2xhc3RfZnJhZzsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXUzMiBzdGF0OworCWludCBucl9mcmFncywgaTsKKworCWdyZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXdoaWxlIChncmV0aC0+dHhfZnJlZSA8IEdSRVRIX1RYQkRfTlVNKSB7CisKKwkJc2tiID0gZ3JldGgtPnR4X3NrYnVmZltncmV0aC0+dHhfbGFzdF07CisKKwkJbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCisJCS8qIFdlIG9ubHkgY2xlYW4gZnVsbHkgY29tcGxldGVkIFNLQnMgKi8KKwkJYmRwX2xhc3RfZnJhZyA9IGdyZXRoLT50eF9iZF9iYXNlICsgU0tJUF9UWChncmV0aC0+dHhfbGFzdCwgbnJfZnJhZ3MpOworCQlzdGF0ID0gYmRwX2xhc3RfZnJhZy0+c3RhdDsKKworCQlpZiAoc3RhdCAmIEdSRVRIX0JEX0VOKQorCQkJYnJlYWs7CisKKwkJZ3JldGgtPnR4X3NrYnVmZltncmV0aC0+dHhfbGFzdF0gPSBOVUxMOworCisJCWdyZXRoX3VwZGF0ZV90eF9zdGF0cyhkZXYsIHN0YXQpOworCisJCWJkcCA9IGdyZXRoLT50eF9iZF9iYXNlICsgZ3JldGgtPnR4X2xhc3Q7CisKKwkJZ3JldGgtPnR4X2xhc3QgPSBORVhUX1RYKGdyZXRoLT50eF9sYXN0KTsKKworCQlkbWFfdW5tYXBfc2luZ2xlKGdyZXRoLT5kZXYsCisJCQkJIGdyZXRoX3JlYWRfYmQoJmJkcC0+YWRkciksCisJCQkJIHNrYl9oZWFkbGVuKHNrYiksCisJCQkJIERNQV9UT19ERVZJQ0UpOworCisJCWZvciAoaSA9IDA7IGkgPCBucl9mcmFnczsgaSsrKSB7CisJCQlza2JfZnJhZ190ICpmcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV07CisJCQliZHAgPSBncmV0aC0+dHhfYmRfYmFzZSArIGdyZXRoLT50eF9sYXN0OworCisJCQlkbWFfdW5tYXBfcGFnZShncmV0aC0+ZGV2LAorCQkJCSAgICAgICBncmV0aF9yZWFkX2JkKCZiZHAtPmFkZHIpLAorCQkJCSAgICAgICBmcmFnLT5zaXplLAorCQkJCSAgICAgICBETUFfVE9fREVWSUNFKTsKKworCQkJZ3JldGgtPnR4X2xhc3QgPSBORVhUX1RYKGdyZXRoLT50eF9sYXN0KTsKKwkJfQorCQlncmV0aC0+dHhfZnJlZSArPSBucl9mcmFncysxOworCQlkZXZfa2ZyZWVfc2tiKHNrYik7CisJfQorCWlmIChncmV0aC0+dHhfZnJlZSA+IChNQVhfU0tCX0ZSQUdTICsgMSkpIHsKKwkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCX0KK30KKworc3RhdGljIGludCBncmV0aF9wZW5kaW5nX3BhY2tldHMoc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoKQoreworCXN0cnVjdCBncmV0aF9iZCAqYmRwOworCXUzMiBzdGF0dXM7CisJYmRwID0gZ3JldGgtPnJ4X2JkX2Jhc2UgKyBncmV0aC0+cnhfY3VyOworCXN0YXR1cyA9IGdyZXRoX3JlYWRfYmQoJmJkcC0+c3RhdCk7CisJaWYgKHN0YXR1cyAmIEdSRVRIX0JEX0VOKQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGdyZXRoX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBsaW1pdCkKK3sKKwlzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGg7CisJc3RydWN0IGdyZXRoX2JkICpiZHA7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgcGt0X2xlbjsKKwlpbnQgYmFkLCBjb3VudDsKKwl1MzIgc3RhdHVzLCBkbWFfYWRkcjsKKworCWdyZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IGxpbWl0OyArK2NvdW50KSB7CisKKwkJYmRwID0gZ3JldGgtPnJ4X2JkX2Jhc2UgKyBncmV0aC0+cnhfY3VyOworCQlzdGF0dXMgPSBncmV0aF9yZWFkX2JkKCZiZHAtPnN0YXQpOworCQlkbWFfYWRkciA9IGdyZXRoX3JlYWRfYmQoJmJkcC0+YWRkcik7CisJCWJhZCA9IDA7CisKKwkJaWYgKHVubGlrZWx5KHN0YXR1cyAmIEdSRVRIX0JEX0VOKSkgeworCQkJYnJlYWs7CisJCX0KKworCQkvKiBDaGVjayBzdGF0dXMgZm9yIGVycm9ycy4gKi8KKwkJaWYgKHVubGlrZWx5KHN0YXR1cyAmIEdSRVRIX1JYQkRfU1RBVFVTKSkgeworCQkJaWYgKHN0YXR1cyAmIEdSRVRIX1JYQkRfRVJSX0ZUKSB7CisJCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJYmFkID0gMTsKKwkJCX0KKwkJCWlmIChzdGF0dXMgJiAoR1JFVEhfUlhCRF9FUlJfQUUgfCBHUkVUSF9SWEJEX0VSUl9PRSkpIHsKKwkJCQlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQkJCWJhZCA9IDE7CisJCQl9CisJCQlpZiAoc3RhdHVzICYgR1JFVEhfUlhCRF9FUlJfQ1JDKSB7CisJCQkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQkJYmFkID0gMTsKKwkJCX0KKwkJfQorCQlpZiAodW5saWtlbHkoYmFkKSkgeworCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKKworCQl9IGVsc2UgeworCisJCQlwa3RfbGVuID0gc3RhdHVzICYgR1JFVEhfQkRfTEVOOworCisJCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGRldiwgcGt0X2xlbiArIE5FVF9JUF9BTElHTik7CisKKwkJCWlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpIHsKKworCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJCWRldl93YXJuKCZkZXYtPmRldiwgImxvdyBvbiBtZW1vcnkgLSAiICJwYWNrZXQgZHJvcHBlZFxuIik7CisKKwkJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKworCQkJfSBlbHNlIHsKKwkJCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CisJCQkJc2tiLT5kZXYgPSBkZXY7CisKKwkJCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdShncmV0aC0+ZGV2LAorCQkJCQkJCWRtYV9hZGRyLAorCQkJCQkJCXBrdF9sZW4sCisJCQkJCQkJRE1BX0ZST01fREVWSUNFKTsKKworCQkJCWlmIChuZXRpZl9tc2dfcGt0ZGF0YShncmV0aCkpCisJCQkJCWdyZXRoX3ByaW50X3J4X3BhY2tldChwaHlzX3RvX3ZpcnQoZG1hX2FkZHIpLCBwa3RfbGVuKTsKKworCQkJCW1lbWNweShza2JfcHV0KHNrYiwgcGt0X2xlbiksIHBoeXNfdG9fdmlydChkbWFfYWRkciksIHBrdF9sZW4pOworCisJCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwkJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCQkJfQorCQl9CisKKwkJc3RhdHVzID0gR1JFVEhfQkRfRU4gfCBHUkVUSF9CRF9JRTsKKwkJaWYgKGdyZXRoLT5yeF9jdXIgPT0gR1JFVEhfUlhCRF9OVU1fTUFTSykgeworCQkJc3RhdHVzIHw9IEdSRVRIX0JEX1dSOworCQl9CisKKwkJd21iKCk7CisJCWdyZXRoX3dyaXRlX2JkKCZiZHAtPnN0YXQsIHN0YXR1cyk7CisKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZ3JldGgtPmRldiwgZG1hX2FkZHIsIE1BWF9GUkFNRV9TSVpFLCBETUFfRlJPTV9ERVZJQ0UpOworCisJCWdyZXRoX2VuYWJsZV9yeChncmV0aCk7CisKKwkJZ3JldGgtPnJ4X2N1ciA9IE5FWFRfUlgoZ3JldGgtPnJ4X2N1cik7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW5saW5lIGludCBod19jaGVja3N1bW1lZCh1MzIgc3RhdHVzKQoreworCisJaWYgKHN0YXR1cyAmIEdSRVRIX1JYQkRfSVBfRlJBRykKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RhdHVzICYgR1JFVEhfUlhCRF9JUCAmJiBzdGF0dXMgJiBHUkVUSF9SWEJEX0lQX0NTRVJSKQorCQlyZXR1cm4gMDsKKworCWlmIChzdGF0dXMgJiBHUkVUSF9SWEJEX1VEUCAmJiBzdGF0dXMgJiBHUkVUSF9SWEJEX1VEUF9DU0VSUikKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3RhdHVzICYgR1JFVEhfUlhCRF9UQ1AgJiYgc3RhdHVzICYgR1JFVEhfUlhCRF9UQ1BfQ1NFUlIpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZ3JldGhfcnhfZ2JpdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbGltaXQpCit7CisJc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoOworCXN0cnVjdCBncmV0aF9iZCAqYmRwOworCXN0cnVjdCBza19idWZmICpza2IsICpuZXdza2I7CisJaW50IHBrdF9sZW47CisJaW50IGJhZCwgY291bnQgPSAwOworCXUzMiBzdGF0dXMsIGRtYV9hZGRyOworCisJZ3JldGggPSBuZXRkZXZfcHJpdihkZXYpOworCisJZm9yIChjb3VudCA9IDA7IGNvdW50IDwgbGltaXQ7ICsrY291bnQpIHsKKworCQliZHAgPSBncmV0aC0+cnhfYmRfYmFzZSArIGdyZXRoLT5yeF9jdXI7CisJCXNrYiA9IGdyZXRoLT5yeF9za2J1ZmZbZ3JldGgtPnJ4X2N1cl07CisJCXN0YXR1cyA9IGdyZXRoX3JlYWRfYmQoJmJkcC0+c3RhdCk7CisJCWJhZCA9IDA7CisKKwkJaWYgKHN0YXR1cyAmIEdSRVRIX0JEX0VOKQorCQkJYnJlYWs7CisKKwkJLyogQ2hlY2sgc3RhdHVzIGZvciBlcnJvcnMuICovCisJCWlmICh1bmxpa2VseShzdGF0dXMgJiBHUkVUSF9SWEJEX1NUQVRVUykpIHsKKworCQkJaWYgKHN0YXR1cyAmIEdSRVRIX1JYQkRfRVJSX0ZUKSB7CisJCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CisJCQkJYmFkID0gMTsKKwkJCX0gZWxzZSBpZiAoc3RhdHVzICYKKwkJCQkgICAoR1JFVEhfUlhCRF9FUlJfQUUgfCBHUkVUSF9SWEJEX0VSUl9PRSB8IEdSRVRIX1JYQkRfRVJSX0xFKSkgeworCQkJCWRldi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CisJCQkJYmFkID0gMTsKKwkJCX0gZWxzZSBpZiAoc3RhdHVzICYgR1JFVEhfUlhCRF9FUlJfQ1JDKSB7CisJCQkJZGV2LT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CisJCQkJYmFkID0gMTsKKwkJCX0KKwkJfQorCisJCS8qIEFsbG9jYXRlIG5ldyBza2IgdG8gcmVwbGFjZSBjdXJyZW50ICovCisJCW5ld3NrYiA9IG5ldGRldl9hbGxvY19za2IoZGV2LCBNQVhfRlJBTUVfU0laRSArIE5FVF9JUF9BTElHTik7CisKKwkJaWYgKCFiYWQgJiYgbmV3c2tiKSB7CisJCQlza2JfcmVzZXJ2ZShuZXdza2IsIE5FVF9JUF9BTElHTik7CisKKwkJCWRtYV9hZGRyID0gZG1hX21hcF9zaW5nbGUoZ3JldGgtPmRldiwKKwkJCQkJCSAgICAgIG5ld3NrYi0+ZGF0YSwKKwkJCQkJCSAgICAgIE1BWF9GUkFNRV9TSVpFICsgTkVUX0lQX0FMSUdOLAorCQkJCQkJICAgICAgRE1BX0ZST01fREVWSUNFKTsKKworCQkJaWYgKCFkbWFfbWFwcGluZ19lcnJvcihncmV0aC0+ZGV2LCBkbWFfYWRkcikpIHsKKwkJCQkvKiBQcm9jZXNzIHRoZSBpbmNvbWluZyBmcmFtZS4gKi8KKwkJCQlwa3RfbGVuID0gc3RhdHVzICYgR1JFVEhfQkRfTEVOOworCisJCQkJZG1hX3VubWFwX3NpbmdsZShncmV0aC0+ZGV2LAorCQkJCQkJIGdyZXRoX3JlYWRfYmQoJmJkcC0+YWRkciksCisJCQkJCQkgTUFYX0ZSQU1FX1NJWkUgKyBORVRfSVBfQUxJR04sCisJCQkJCQkgRE1BX0ZST01fREVWSUNFKTsKKworCQkJCWlmIChuZXRpZl9tc2dfcGt0ZGF0YShncmV0aCkpCisJCQkJCWdyZXRoX3ByaW50X3J4X3BhY2tldChwaHlzX3RvX3ZpcnQoZ3JldGhfcmVhZF9iZCgmYmRwLT5hZGRyKSksIHBrdF9sZW4pOworCisJCQkJc2tiX3B1dChza2IsIHBrdF9sZW4pOworCisJCQkJaWYgKGdyZXRoLT5mbGFncyAmIEdSRVRIX0ZMQUdfUlhfQ1NVTSAmJiBod19jaGVja3N1bW1lZChzdGF0dXMpKQorCQkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQkJCWVsc2UKKwkJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCisJCQkJc2tiLT5kZXYgPSBkZXY7CisJCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwkJCQlkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCisJCQkJZ3JldGgtPnJ4X3NrYnVmZltncmV0aC0+cnhfY3VyXSA9IG5ld3NrYjsKKwkJCQlncmV0aF93cml0ZV9iZCgmYmRwLT5hZGRyLCBkbWFfYWRkcik7CisJCQl9IGVsc2UgeworCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJCWRldl93YXJuKGdyZXRoLT5kZXYsICJDb3VsZCBub3QgY3JlYXRlIERNQSBtYXBwaW5nLCBkcm9wcGluZyBwYWNrZXRcbiIpOworCQkJCWRldl9rZnJlZV9za2IobmV3c2tiKTsKKwkJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJZGV2X3dhcm4oZ3JldGgtPmRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBTS0IsIGRyb3BwaW5nIHBhY2tldFxuIik7CisJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJfQorCisJCXN0YXR1cyA9IEdSRVRIX0JEX0VOIHwgR1JFVEhfQkRfSUU7CisJCWlmIChncmV0aC0+cnhfY3VyID09IEdSRVRIX1JYQkRfTlVNX01BU0spIHsKKwkJCXN0YXR1cyB8PSBHUkVUSF9CRF9XUjsKKwkJfQorCisJCXdtYigpOworCQlncmV0aF93cml0ZV9iZCgmYmRwLT5zdGF0LCBzdGF0dXMpOworCQlncmV0aF9lbmFibGVfcngoZ3JldGgpOworCQlncmV0aC0+cnhfY3VyID0gTkVYVF9SWChncmV0aC0+cnhfY3VyKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7CisKK30KKworc3RhdGljIGludCBncmV0aF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGg7CisJaW50IHdvcmtfZG9uZSA9IDA7CisJZ3JldGggPSBjb250YWluZXJfb2YobmFwaSwgc3RydWN0IGdyZXRoX3ByaXZhdGUsIG5hcGkpOworCisJaWYgKGdyZXRoLT5nYml0X21hYykgeworCQlncmV0aF9jbGVhbl90eF9nYml0KGdyZXRoLT5uZXRkZXYpOworCX0gZWxzZSB7CisJCWdyZXRoX2NsZWFuX3R4KGdyZXRoLT5uZXRkZXYpOworCX0KKworcmVzdGFydF9wb2xsOgorCWlmIChncmV0aC0+Z2JpdF9tYWMpIHsKKwkJd29ya19kb25lICs9IGdyZXRoX3J4X2diaXQoZ3JldGgtPm5ldGRldiwgYnVkZ2V0IC0gd29ya19kb25lKTsKKwl9IGVsc2UgeworCQl3b3JrX2RvbmUgKz0gZ3JldGhfcngoZ3JldGgtPm5ldGRldiwgYnVkZ2V0IC0gd29ya19kb25lKTsKKwl9CisKKwlpZiAod29ya19kb25lIDwgYnVkZ2V0KSB7CisKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKworCQlpZiAoZ3JldGhfcGVuZGluZ19wYWNrZXRzKGdyZXRoKSkgeworCQkJbmFwaV9yZXNjaGVkdWxlKG5hcGkpOworCQkJZ290byByZXN0YXJ0X3BvbGw7CisJCX0KKwl9CisKKwlncmV0aF9lbmFibGVfaXJxcyhncmV0aCk7CisJcmV0dXJuIHdvcmtfZG9uZTsKK30KKworc3RhdGljIGludCBncmV0aF9zZXRfbWFjX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpwKQoreworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisJc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoOworCXN0cnVjdCBncmV0aF9yZWdzICpyZWdzOworCisJZ3JldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXJlZ3MgPSAoc3RydWN0IGdyZXRoX3JlZ3MgKikgZ3JldGgtPnJlZ3M7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOworCisJR1JFVEhfUkVHU0FWRShyZWdzLT5lc2FfbXNiLCBhZGRyLT5zYV9kYXRhWzBdIDw8IDggfCBhZGRyLT5zYV9kYXRhWzFdKTsKKwlHUkVUSF9SRUdTQVZFKHJlZ3MtPmVzYV9sc2IsCisJCSAgICAgIGFkZHItPnNhX2RhdGFbMl0gPDwgMjQgfCBhZGRyLT4KKwkJICAgICAgc2FfZGF0YVszXSA8PCAxNiB8IGFkZHItPnNhX2RhdGFbNF0gPDwgOCB8IGFkZHItPnNhX2RhdGFbNV0pOworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGdyZXRoX2hhc2hfZ2V0X2luZGV4KF9fdTggKmFkZHIpCit7CisJcmV0dXJuIChldGhlcl9jcmMoNiwgYWRkcikpICYgMHgzRjsKK30KKworc3RhdGljIHZvaWQgZ3JldGhfc2V0X2hhc2hfZmlsdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldl9tY19saXN0ICpjdXJyOworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGdyZXRoX3JlZ3MgKnJlZ3MgPSAoc3RydWN0IGdyZXRoX3JlZ3MgKikgZ3JldGgtPnJlZ3M7CisJdTMyIG1jX2ZpbHRlclsyXTsKKwl1bnNpZ25lZCBpbnQgYml0bnI7CisKKwltY19maWx0ZXJbMF0gPSBtY19maWx0ZXJbMV0gPSAwOworCisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoY3VyciwgZGV2KSB7CisJCWJpdG5yID0gZ3JldGhfaGFzaF9nZXRfaW5kZXgoY3Vyci0+ZG1pX2FkZHIpOworCQltY19maWx0ZXJbYml0bnIgPj4gNV0gfD0gMSA8PCAoYml0bnIgJiAzMSk7CisJfQorCisJR1JFVEhfUkVHU0FWRShyZWdzLT5oYXNoX21zYiwgbWNfZmlsdGVyWzFdKTsKKwlHUkVUSF9SRUdTQVZFKHJlZ3MtPmhhc2hfbHNiLCBtY19maWx0ZXJbMF0pOworfQorCitzdGF0aWMgdm9pZCBncmV0aF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpbnQgY2ZnOworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGdyZXRoX3JlZ3MgKnJlZ3MgPSAoc3RydWN0IGdyZXRoX3JlZ3MgKikgZ3JldGgtPnJlZ3M7CisKKwljZmcgPSBHUkVUSF9SRUdMT0FEKHJlZ3MtPmNvbnRyb2wpOworCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCisJCWNmZyB8PSBHUkVUSF9DVFJMX1BSOworCWVsc2UKKwkJY2ZnICY9IH5HUkVUSF9DVFJMX1BSOworCisJaWYgKGdyZXRoLT5tdWx0aWNhc3QpIHsKKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKKwkJCUdSRVRIX1JFR1NBVkUocmVncy0+aGFzaF9tc2IsIC0xKTsKKwkJCUdSRVRIX1JFR1NBVkUocmVncy0+aGFzaF9sc2IsIC0xKTsKKwkJCWNmZyB8PSBHUkVUSF9DVFJMX01DRU47CisJCQlHUkVUSF9SRUdTQVZFKHJlZ3MtPmNvbnRyb2wsIGNmZyk7CisJCQlyZXR1cm47CisJCX0KKworCQlpZiAobmV0ZGV2X21jX2VtcHR5KGRldikpIHsKKwkJCWNmZyAmPSB+R1JFVEhfQ1RSTF9NQ0VOOworCQkJR1JFVEhfUkVHU0FWRShyZWdzLT5jb250cm9sLCBjZmcpOworCQkJcmV0dXJuOworCQl9CisKKwkJLyogU2V0dXAgbXVsdGljYXN0IGZpbHRlciAqLworCQlncmV0aF9zZXRfaGFzaF9maWx0ZXIoZGV2KTsKKwkJY2ZnIHw9IEdSRVRIX0NUUkxfTUNFTjsKKwl9CisJR1JFVEhfUkVHU0FWRShyZWdzLT5jb250cm9sLCBjZmcpOworfQorCitzdGF0aWMgdTMyIGdyZXRoX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuIGdyZXRoLT5tc2dfZW5hYmxlOworfQorCitzdGF0aWMgdm9pZCBncmV0aF9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZhbHVlKQoreworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCA9IG5ldGRldl9wcml2KGRldik7CisJZ3JldGgtPm1zZ19lbmFibGUgPSB2YWx1ZTsKK30KK3N0YXRpYyBpbnQgZ3JldGhfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeSA9IGdyZXRoLT5waHk7CisKKwlpZiAoIXBoeSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gcGh5X2V0aHRvb2xfZ3NldChwaHksIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgZ3JldGhfc2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeSA9IGdyZXRoLT5waHk7CisKKwlpZiAoIXBoeSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlyZXR1cm4gcGh5X2V0aHRvb2xfc3NldChwaHksIGNtZCk7Cit9CisKK3N0YXRpYyBpbnQgZ3JldGhfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIHNpemVvZihzdHJ1Y3QgZ3JldGhfcmVncyk7Cit9CisKK3N0YXRpYyB2b2lkIGdyZXRoX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmluZm8pCit7CisJc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXN0cm5jcHkoaW5mby0+ZHJpdmVyLCBkZXZfZHJpdmVyX3N0cmluZyhncmV0aC0+ZGV2KSwgMzIpOworCXN0cm5jcHkoaW5mby0+dmVyc2lvbiwgInJldmlzaW9uOiAxLjAiLCAzMik7CisJc3RybmNweShpbmZvLT5idXNfaW5mbywgZ3JldGgtPmRldi0+YnVzLT5uYW1lLCAzMik7CisJc3RybmNweShpbmZvLT5md192ZXJzaW9uLCAiTi9BIiwgMzIpOworCWluZm8tPmVlZHVtcF9sZW4gPSAwOworCWluZm8tPnJlZ2R1bXBfbGVuID0gc2l6ZW9mKHN0cnVjdCBncmV0aF9yZWdzKTsKK30KKworc3RhdGljIHZvaWQgZ3JldGhfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqcCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSAqZ3JldGggPSBuZXRkZXZfcHJpdihkZXYpOworCXUzMiBfX2lvbWVtICpncmV0aF9yZWdzID0gKHUzMiBfX2lvbWVtICopIGdyZXRoLT5yZWdzOworCXUzMiAqYnVmZiA9IHA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHN0cnVjdCBncmV0aF9yZWdzKSAvIHNpemVvZih1MzIpOyBpKyspCisJCWJ1ZmZbaV0gPSBncmV0aF9yZWFkX2JkKCZncmV0aF9yZWdzW2ldKTsKK30KKworc3RhdGljIHUzMiBncmV0aF9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCA9IG5ldGRldl9wcml2KGRldik7CisJcmV0dXJuIChncmV0aC0+ZmxhZ3MgJiBHUkVUSF9GTEFHX1JYX0NTVU0pICE9IDA7Cit9CisKK3N0YXRpYyBpbnQgZ3JldGhfc2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCit7CisJc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXNwaW5fbG9ja19iaCgmZ3JldGgtPmRldmxvY2spOworCisJaWYgKGRhdGEpCisJCWdyZXRoLT5mbGFncyB8PSBHUkVUSF9GTEFHX1JYX0NTVU07CisJZWxzZQorCQlncmV0aC0+ZmxhZ3MgJj0gfkdSRVRIX0ZMQUdfUlhfQ1NVTTsKKworCXNwaW5fdW5sb2NrX2JoKCZncmV0aC0+ZGV2bG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBncmV0aF9nZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiAoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfSVBfQ1NVTSkgIT0gMDsKK30KKworc3RhdGljIGludCBncmV0aF9zZXRfdHhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3sKKwluZXRpZl90eF9sb2NrX2JoKGRldik7CisJZXRodG9vbF9vcF9zZXRfdHhfY3N1bShkZXYsIGRhdGEpOworCW5ldGlmX3R4X3VubG9ja19iaChkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGdyZXRoX2V0aHRvb2xfb3BzID0geworCS5nZXRfbXNnbGV2ZWwJCT0gZ3JldGhfZ2V0X21zZ2xldmVsLAorCS5zZXRfbXNnbGV2ZWwJCT0gZ3JldGhfc2V0X21zZ2xldmVsLAorCS5nZXRfc2V0dGluZ3MJCT0gZ3JldGhfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MJCT0gZ3JldGhfc2V0X3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbwkJPSBncmV0aF9nZXRfZHJ2aW5mbywKKwkuZ2V0X3JlZ3NfbGVuICAgICAgICAgICA9IGdyZXRoX2dldF9yZWdzX2xlbiwKKwkuZ2V0X3JlZ3MgICAgICAgICAgICAgICA9IGdyZXRoX2dldF9yZWdzLAorCS5nZXRfcnhfY3N1bQkJPSBncmV0aF9nZXRfcnhfY3N1bSwKKwkuc2V0X3J4X2NzdW0JCT0gZ3JldGhfc2V0X3J4X2NzdW0sCisJLmdldF90eF9jc3VtCQk9IGdyZXRoX2dldF90eF9jc3VtLAorCS5zZXRfdHhfY3N1bQkJPSBncmV0aF9zZXRfdHhfY3N1bSwKKwkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgZ3JldGhfbmV0ZGV2X29wcyA9IHsKKwkubmRvX29wZW4gPSBncmV0aF9vcGVuLAorCS5uZG9fc3RvcCA9IGdyZXRoX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCA9IGdyZXRoX3N0YXJ0X3htaXQsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBncmV0aF9zZXRfbWFjX2FkZCwKKwkubmRvX3ZhbGlkYXRlX2FkZHIgCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCit9OworCitzdGF0aWMgaW5saW5lIGludCB3YWl0X2Zvcl9tZGlvKHN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCkKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgNCpIWi8xMDA7CisJd2hpbGUgKEdSRVRIX1JFR0xPQUQoZ3JldGgtPnJlZ3MtPm1kaW8pICYgR1JFVEhfTUlJX0JVU1kpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZ3JldGhfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHksIGludCByZWcpCit7CisJc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoID0gYnVzLT5wcml2OworCWludCBkYXRhOworCisJaWYgKCF3YWl0X2Zvcl9tZGlvKGdyZXRoKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCUdSRVRIX1JFR1NBVkUoZ3JldGgtPnJlZ3MtPm1kaW8sICgocGh5ICYgMHgxRikgPDwgMTEpIHwgKChyZWcgJiAweDFGKSA8PCA2KSB8IDIpOworCisJaWYgKCF3YWl0X2Zvcl9tZGlvKGdyZXRoKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmICghKEdSRVRIX1JFR0xPQUQoZ3JldGgtPnJlZ3MtPm1kaW8pICYgR1JFVEhfTUlJX05WQUxJRCkpIHsKKwkJZGF0YSA9IChHUkVUSF9SRUdMT0FEKGdyZXRoLT5yZWdzLT5tZGlvKSA+PiAxNikgJiAweEZGRkY7CisJCXJldHVybiBkYXRhOworCisJfSBlbHNlIHsKKwkJcmV0dXJuIC0xOworCX0KK30KKworc3RhdGljIGludCBncmV0aF9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHksIGludCByZWcsIHUxNiB2YWwpCit7CisJc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoID0gYnVzLT5wcml2OworCisJaWYgKCF3YWl0X2Zvcl9tZGlvKGdyZXRoKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCUdSRVRIX1JFR1NBVkUoZ3JldGgtPnJlZ3MtPm1kaW8sCisJCSAgICAgICgodmFsICYgMHhGRkZGKSA8PCAxNikgfCAoKHBoeSAmIDB4MUYpIDw8IDExKSB8ICgocmVnICYgMHgxRikgPDwgNikgfCAxKTsKKworCWlmICghd2FpdF9mb3JfbWRpbyhncmV0aCkpCisJCXJldHVybiAtRUJVU1k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBncmV0aF9tZGlvX3Jlc2V0KHN0cnVjdCBtaWlfYnVzICpidXMpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdyZXRoX2xpbmtfY2hhbmdlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gZ3JldGgtPnBoeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaW50IHN0YXR1c19jaGFuZ2UgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdyZXRoLT5kZXZsb2NrLCBmbGFncyk7CisKKwlpZiAocGh5ZGV2LT5saW5rKSB7CisKKwkJaWYgKChncmV0aC0+c3BlZWQgIT0gcGh5ZGV2LT5zcGVlZCkgfHwgKGdyZXRoLT5kdXBsZXggIT0gcGh5ZGV2LT5kdXBsZXgpKSB7CisKKwkJCUdSRVRIX1JFR0FORElOKGdyZXRoLT5yZWdzLT5jb250cm9sLAorCQkJCSAgICAgICB+KEdSRVRIX0NUUkxfRkQgfCBHUkVUSF9DVFJMX1NQIHwgR1JFVEhfQ1RSTF9HQikpOworCisJCQlpZiAocGh5ZGV2LT5kdXBsZXgpCisJCQkJR1JFVEhfUkVHT1JJTihncmV0aC0+cmVncy0+Y29udHJvbCwgR1JFVEhfQ1RSTF9GRCk7CisKKwkJCWlmIChwaHlkZXYtPnNwZWVkID09IFNQRUVEXzEwMCkgeworCisJCQkJR1JFVEhfUkVHT1JJTihncmV0aC0+cmVncy0+Y29udHJvbCwgR1JFVEhfQ1RSTF9TUCk7CisJCQl9CisKKwkJCWVsc2UgaWYgKHBoeWRldi0+c3BlZWQgPT0gU1BFRURfMTAwMCkKKwkJCQlHUkVUSF9SRUdPUklOKGdyZXRoLT5yZWdzLT5jb250cm9sLCBHUkVUSF9DVFJMX0dCKTsKKworCQkJZ3JldGgtPnNwZWVkID0gcGh5ZGV2LT5zcGVlZDsKKwkJCWdyZXRoLT5kdXBsZXggPSBwaHlkZXYtPmR1cGxleDsKKwkJCXN0YXR1c19jaGFuZ2UgPSAxOworCQl9CisJfQorCisJaWYgKHBoeWRldi0+bGluayAhPSBncmV0aC0+bGluaykgeworCQlpZiAoIXBoeWRldi0+bGluaykgeworCQkJZ3JldGgtPnNwZWVkID0gMDsKKwkJCWdyZXRoLT5kdXBsZXggPSAtMTsKKwkJfQorCQlncmV0aC0+bGluayA9IHBoeWRldi0+bGluazsKKworCQlzdGF0dXNfY2hhbmdlID0gMTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncmV0aC0+ZGV2bG9jaywgZmxhZ3MpOworCisJaWYgKHN0YXR1c19jaGFuZ2UpIHsKKwkJaWYgKHBoeWRldi0+bGluaykKKwkJCXByX2RlYnVnKCIlczogbGluayB1cCAoJWQvJXMpXG4iLAorCQkJCWRldi0+bmFtZSwgcGh5ZGV2LT5zcGVlZCwKKwkJCQlEVVBMRVhfRlVMTCA9PSBwaHlkZXYtPmR1cGxleCA/ICJGdWxsIiA6ICJIYWxmIik7CisJCWVsc2UKKwkJCXByX2RlYnVnKCIlczogbGluayBkb3duXG4iLCBkZXYtPm5hbWUpOworCX0KK30KKworc3RhdGljIGludCBncmV0aF9tZGlvX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ID0gTlVMTDsKKwlpbnQgcmV0OworCisJLyogRmluZCB0aGUgZmlyc3QgUEhZICovCisJcGh5ID0gcGh5X2ZpbmRfZmlyc3QoZ3JldGgtPm1kaW8pOworCisJaWYgKCFwaHkpIHsKKwkJaWYgKG5ldGlmX21zZ19wcm9iZShncmV0aCkpCisJCQlkZXZfZXJyKCZkZXYtPmRldiwgIm5vIFBIWSBmb3VuZFxuIik7CisJCXJldHVybiAtRU5YSU87CisJfQorCisJcmV0ID0gcGh5X2Nvbm5lY3RfZGlyZWN0KGRldiwgcGh5LCAmZ3JldGhfbGlua19jaGFuZ2UsCisJCQkwLCBncmV0aC0+Z2JpdF9tYWMgPworCQkJUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgOgorCQkJUEhZX0lOVEVSRkFDRV9NT0RFX01JSSk7CisJaWYgKHJldCkgeworCQlpZiAobmV0aWZfbXNnX2lmdXAoZ3JldGgpKQorCQkJZGV2X2VycigmZGV2LT5kZXYsICJjb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGdyZXRoLT5nYml0X21hYykKKwkJcGh5LT5zdXBwb3J0ZWQgJj0gUEhZX0dCSVRfRkVBVFVSRVM7CisJZWxzZQorCQlwaHktPnN1cHBvcnRlZCAmPSBQSFlfQkFTSUNfRkVBVFVSRVM7CisKKwlwaHktPmFkdmVydGlzaW5nID0gcGh5LT5zdXBwb3J0ZWQ7CisKKwlncmV0aC0+bGluayA9IDA7CisJZ3JldGgtPnNwZWVkID0gMDsKKwlncmV0aC0+ZHVwbGV4ID0gLTE7CisJZ3JldGgtPnBoeSA9IHBoeTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBwaHlfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0JNU1IpOworCisJcmV0dXJuIChyZXR2YWwgPCAwKSA/IHJldHZhbCA6IChyZXR2YWwgJiBCTVNSX0FORUdDT01QTEVURSk7Cit9CisKK3N0YXRpYyBpbnQgZ3JldGhfbWRpb19pbml0KHN0cnVjdCBncmV0aF9wcml2YXRlICpncmV0aCkKK3sKKwlpbnQgcmV0LCBwaHk7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCisJZ3JldGgtPm1kaW8gPSBtZGlvYnVzX2FsbG9jKCk7CisJaWYgKCFncmV0aC0+bWRpbykgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlncmV0aC0+bWRpby0+bmFtZSA9ICJncmV0aC1tZGlvIjsKKwlzbnByaW50ZihncmV0aC0+bWRpby0+aWQsIE1JSV9CVVNfSURfU0laRSwgIiVzLSVkIiwgZ3JldGgtPm1kaW8tPm5hbWUsIGdyZXRoLT5pcnEpOworCWdyZXRoLT5tZGlvLT5yZWFkID0gZ3JldGhfbWRpb19yZWFkOworCWdyZXRoLT5tZGlvLT53cml0ZSA9IGdyZXRoX21kaW9fd3JpdGU7CisJZ3JldGgtPm1kaW8tPnJlc2V0ID0gZ3JldGhfbWRpb19yZXNldDsKKwlncmV0aC0+bWRpby0+cHJpdiA9IGdyZXRoOworCisJZ3JldGgtPm1kaW8tPmlycSA9IGdyZXRoLT5tZGlvX2lycXM7CisKKwlmb3IgKHBoeSA9IDA7IHBoeSA8IFBIWV9NQVhfQUREUjsgcGh5KyspCisJCWdyZXRoLT5tZGlvLT5pcnFbcGh5XSA9IFBIWV9QT0xMOworCisJcmV0ID0gbWRpb2J1c19yZWdpc3RlcihncmV0aC0+bWRpbyk7CisJaWYgKHJldCkgeworCQlnb3RvIGVycm9yOworCX0KKworCXJldCA9IGdyZXRoX21kaW9fcHJvYmUoZ3JldGgtPm5ldGRldik7CisJaWYgKHJldCkgeworCQlpZiAobmV0aWZfbXNnX3Byb2JlKGdyZXRoKSkKKwkJCWRldl9lcnIoJmdyZXRoLT5uZXRkZXYtPmRldiwgImZhaWxlZCB0byBwcm9iZSBNRElPIGJ1c1xuIik7CisJCWdvdG8gdW5yZWdfbWRpbzsKKwl9CisKKwlwaHlfc3RhcnQoZ3JldGgtPnBoeSk7CisKKwkvKiBJZiBFdGhlcm5ldCBkZWJ1ZyBsaW5rIGlzIHVzZWQgbWFrZSBhdXRvbmVnIGhhcHBlbiByaWdodCBhd2F5ICovCisJaWYgKGdyZXRoLT5lZGNsICYmIGdyZXRoX2VkY2wgPT0gMSkgeworCQlwaHlfc3RhcnRfYW5lZyhncmV0aC0+cGh5KTsKKwkJdGltZW91dCA9IGppZmZpZXMgKyA2KkhaOworCQl3aGlsZSAoIXBoeV9hbmVnX2RvbmUoZ3JldGgtPnBoeSkgJiYgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpIHsKKwkJfQorCQlnZW5waHlfcmVhZF9zdGF0dXMoZ3JldGgtPnBoeSk7CisJCWdyZXRoX2xpbmtfY2hhbmdlKGdyZXRoLT5uZXRkZXYpOworCX0KKworCXJldHVybiAwOworCit1bnJlZ19tZGlvOgorCW1kaW9idXNfdW5yZWdpc3RlcihncmV0aC0+bWRpbyk7CitlcnJvcjoKKwltZGlvYnVzX2ZyZWUoZ3JldGgtPm1kaW8pOworCXJldHVybiByZXQ7Cit9CisKKy8qIEluaXRpYWxpemUgdGhlIEdSRVRIIE1BQyAqLworc3RhdGljIGludCBfX2RldmluaXQgZ3JldGhfb2ZfcHJvYmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYsIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgKm1hdGNoKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoOworCXN0cnVjdCBncmV0aF9yZWdzICpyZWdzOworCisJaW50IGk7CisJaW50IGVycjsKKwlpbnQgdG1wOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKworCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSkpOworCisJaWYgKGRldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWdyZXRoID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlncmV0aC0+bmV0ZGV2ID0gZGV2OworCWdyZXRoLT5kZXYgPSAmb2ZkZXYtPmRldjsKKworCWlmIChncmV0aF9kZWJ1ZyA+IDApCisJCWdyZXRoLT5tc2dfZW5hYmxlID0gZ3JldGhfZGVidWc7CisJZWxzZQorCQlncmV0aC0+bXNnX2VuYWJsZSA9IEdSRVRIX0RFRl9NU0dfRU5BQkxFOworCisJc3Bpbl9sb2NrX2luaXQoJmdyZXRoLT5kZXZsb2NrKTsKKworCWdyZXRoLT5yZWdzID0gb2ZfaW9yZW1hcCgmb2ZkZXYtPnJlc291cmNlWzBdLCAwLAorCQkJCSByZXNvdXJjZV9zaXplKCZvZmRldi0+cmVzb3VyY2VbMF0pLAorCQkJCSAiZ3JsaWItZ3JldGggcmVncyIpOworCisJaWYgKGdyZXRoLT5yZWdzID09IE5VTEwpIHsKKwkJaWYgKG5ldGlmX21zZ19wcm9iZShncmV0aCkpCisJCQlkZXZfZXJyKGdyZXRoLT5kZXYsICJpb3JlbWFwIGZhaWx1cmUuXG4iKTsKKwkJZXJyID0gLUVJTzsKKwkJZ290byBlcnJvcjE7CisJfQorCisJcmVncyA9IChzdHJ1Y3QgZ3JldGhfcmVncyAqKSBncmV0aC0+cmVnczsKKwlncmV0aC0+aXJxID0gb2ZkZXYtPmlycXNbMF07CisKKwlkZXZfc2V0X2RydmRhdGEoZ3JldGgtPmRldiwgZGV2KTsKKwlTRVRfTkVUREVWX0RFVihkZXYsIGdyZXRoLT5kZXYpOworCisJaWYgKG5ldGlmX21zZ19wcm9iZShncmV0aCkpCisJCWRldl9kYmcoZ3JldGgtPmRldiwgInJlc2V0aW5nIGNvbnRyb2xsZXIuXG4iKTsKKworCS8qIFJlc2V0IHRoZSBjb250cm9sbGVyLiAqLworCUdSRVRIX1JFR1NBVkUocmVncy0+Y29udHJvbCwgR1JFVEhfUkVTRVQpOworCisJLyogV2FpdCBmb3IgTUFDIHRvIHJlc2V0IGl0c2VsZiAqLworCXRpbWVvdXQgPSBqaWZmaWVzICsgSFovMTAwOworCXdoaWxlIChHUkVUSF9SRUdMT0FEKHJlZ3MtPmNvbnRyb2wpICYgR1JFVEhfUkVTRVQpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCWVyciA9IC1FSU87CisJCQlpZiAobmV0aWZfbXNnX3Byb2JlKGdyZXRoKSkKKwkJCQlkZXZfZXJyKGdyZXRoLT5kZXYsICJ0aW1lb3V0IHdoZW4gd2FpdGluZyBmb3IgcmVzZXQuXG4iKTsKKwkJCWdvdG8gZXJyb3IyOworCQl9CisJfQorCisJLyogR2V0IGRlZmF1bHQgUEhZIGFkZHJlc3MgICovCisJZ3JldGgtPnBoeWFkZHIgPSAoR1JFVEhfUkVHTE9BRChyZWdzLT5tZGlvKSA+PiAxMSkgJiAweDFGOworCisJLyogQ2hlY2sgaWYgd2UgaGF2ZSBHQklUIGNhcGFibGUgTUFDICovCisJdG1wID0gR1JFVEhfUkVHTE9BRChyZWdzLT5jb250cm9sKTsKKwlncmV0aC0+Z2JpdF9tYWMgPSAodG1wID4+IDI3KSAmIDE7CisKKwkvKiBDaGVjayBmb3IgbXVsdGljYXN0IGNhcGFiaWxpdHkgKi8KKwlncmV0aC0+bXVsdGljYXN0ID0gKHRtcCA+PiAyNSkgJiAxOworCisJZ3JldGgtPmVkY2wgPSAodG1wID4+IDMxKSAmIDE7CisKKwkvKiBJZiB3ZSBoYXZlIEVEQ0wgd2UgZGlzYWJsZSB0aGUgRURDTCBzcGVlZC1kdXBsZXggRlNNIHNvCisJICogaXQgZG9lc24ndCBpbnRlcmZlcmUgd2l0aCB0aGUgc29mdHdhcmUgKi8KKwlpZiAoZ3JldGgtPmVkY2wgIT0gMCkKKwkJR1JFVEhfUkVHT1JJTihyZWdzLT5jb250cm9sLCBHUkVUSF9DVFJMX0RJU0RVUExFWCk7CisKKwkvKiBDaGVjayBpZiBNQUMgY2FuIGhhbmRsZSBNRElPIGludGVycnVwdHMgKi8KKwlncmV0aC0+bWRpb19pbnRfZW4gPSAodG1wID4+IDI2KSAmIDE7CisKKwllcnIgPSBncmV0aF9tZGlvX2luaXQoZ3JldGgpOworCWlmIChlcnIpIHsKKwkJaWYgKG5ldGlmX21zZ19wcm9iZShncmV0aCkpCisJCQlkZXZfZXJyKGdyZXRoLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgTURJTyBidXNcbiIpOworCQlnb3RvIGVycm9yMjsKKwl9CisKKwkvKiBBbGxvY2F0ZSBUWCBkZXNjcmlwdG9yIHJpbmcgaW4gY29oZXJlbnQgbWVtb3J5ICovCisJZ3JldGgtPnR4X2JkX2Jhc2UgPSAoc3RydWN0IGdyZXRoX2JkICopIGRtYV9hbGxvY19jb2hlcmVudChncmV0aC0+ZGV2LAorCQkJCQkJCQkgICAxMDI0LAorCQkJCQkJCQkgICAmZ3JldGgtPnR4X2JkX2Jhc2VfcGh5cywKKwkJCQkJCQkJICAgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWdyZXRoLT50eF9iZF9iYXNlKSB7CisJCWlmIChuZXRpZl9tc2dfcHJvYmUoZ3JldGgpKQorCQkJZGV2X2VycigmZGV2LT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgZGVzY3JpcHRvciBtZW1vcnkuXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjM7CisJfQorCisJbWVtc2V0KGdyZXRoLT50eF9iZF9iYXNlLCAwLCAxMDI0KTsKKworCS8qIEFsbG9jYXRlIFJYIGRlc2NyaXB0b3IgcmluZyBpbiBjb2hlcmVudCBtZW1vcnkgKi8KKwlncmV0aC0+cnhfYmRfYmFzZSA9IChzdHJ1Y3QgZ3JldGhfYmQgKikgZG1hX2FsbG9jX2NvaGVyZW50KGdyZXRoLT5kZXYsCisJCQkJCQkJCSAgIDEwMjQsCisJCQkJCQkJCSAgICZncmV0aC0+cnhfYmRfYmFzZV9waHlzLAorCQkJCQkJCQkgICBHRlBfS0VSTkVMKTsKKworCWlmICghZ3JldGgtPnJ4X2JkX2Jhc2UpIHsKKwkJaWYgKG5ldGlmX21zZ19wcm9iZShncmV0aCkpCisJCQlkZXZfZXJyKGdyZXRoLT5kZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgZGVzY3JpcHRvciBtZW1vcnkuXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlcnJvcjQ7CisJfQorCisJbWVtc2V0KGdyZXRoLT5yeF9iZF9iYXNlLCAwLCAxMDI0KTsKKworCS8qIEdldCBNQUMgYWRkcmVzcyBmcm9tOiBtb2R1bGUgcGFyYW0sIE9GIHByb3BlcnR5IG9yIElEIHByb20gKi8KKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCWlmIChtYWNhZGRyW2ldICE9IDApCisJCQlicmVhazsKKwl9CisJaWYgKGkgPT0gNikgeworCQljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyOworCQlpbnQgbGVuOworCQlhZGRyID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5ub2RlLCAibG9jYWwtbWFjLWFkZHJlc3MiLCAmbGVuKTsKKwkJaWYgKGFkZHIgIT0gTlVMTCAmJiBsZW4gPT0gNikgeworCQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJCQltYWNhZGRyW2ldID0gKHVuc2lnbmVkIGludCkgYWRkcltpXTsKKwkJfSBlbHNlIHsKKyNpZmRlZiBDT05GSUdfU1BBUkMKKwkJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCQkJbWFjYWRkcltpXSA9ICh1bnNpZ25lZCBpbnQpIGlkcHJvbS0+aWRfZXRoYWRkcltpXTsKKyNlbmRpZgorCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJZGV2LT5kZXZfYWRkcltpXSA9IG1hY2FkZHJbaV07CisKKwltYWNhZGRyWzVdKys7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoJmRldi0+ZGV2X2FkZHJbMF0pKSB7CisJCWlmIChuZXRpZl9tc2dfcHJvYmUoZ3JldGgpKQorCQkJZGV2X2VycihncmV0aC0+ZGV2LCAibm8gdmFsaWQgZXRoZXJuZXQgYWRkcmVzcywgYWJvcnRpbmcuXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJvcjU7CisJfQorCisJR1JFVEhfUkVHU0FWRShyZWdzLT5lc2FfbXNiLCBkZXYtPmRldl9hZGRyWzBdIDw8IDggfCBkZXYtPmRldl9hZGRyWzFdKTsKKwlHUkVUSF9SRUdTQVZFKHJlZ3MtPmVzYV9sc2IsIGRldi0+ZGV2X2FkZHJbMl0gPDwgMjQgfCBkZXYtPmRldl9hZGRyWzNdIDw8IDE2IHwKKwkJICAgICAgZGV2LT5kZXZfYWRkcls0XSA8PCA4IHwgZGV2LT5kZXZfYWRkcls1XSk7CisKKwkvKiBDbGVhciBhbGwgcGVuZGluZyBpbnRlcnJ1cHRzIGV4Y2VwdCBQSFkgaXJxICovCisJR1JFVEhfUkVHU0FWRShyZWdzLT5zdGF0dXMsIDB4RkYpOworCisJaWYgKGdyZXRoLT5nYml0X21hYykgeworCQlkZXYtPmZlYXR1cmVzID0gTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfSElHSERNQTsKKwkJZ3JldGhfbmV0ZGV2X29wcy5uZG9fc3RhcnRfeG1pdCA9IGdyZXRoX3N0YXJ0X3htaXRfZ2JpdDsKKwkJZ3JldGgtPmZsYWdzID0gR1JFVEhfRkxBR19SWF9DU1VNOworCX0KKworCWlmIChncmV0aC0+bXVsdGljYXN0KSB7CisJCWdyZXRoX25ldGRldl9vcHMubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGdyZXRoX3NldF9tdWx0aWNhc3RfbGlzdDsKKwkJZGV2LT5mbGFncyB8PSBJRkZfTVVMVElDQVNUOworCX0gZWxzZSB7CisJCWRldi0+ZmxhZ3MgJj0gfklGRl9NVUxUSUNBU1Q7CisJfQorCisJZGV2LT5uZXRkZXZfb3BzID0gJmdyZXRoX25ldGRldl9vcHM7CisJZGV2LT5ldGh0b29sX29wcyA9ICZncmV0aF9ldGh0b29sX29wczsKKworCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSkgeworCQlpZiAobmV0aWZfbXNnX3Byb2JlKGdyZXRoKSkKKwkJCWRldl9lcnIoZ3JldGgtPmRldiwgIm5ldGRldmljZSByZWdpc3RyYXRpb24gZmFpbGVkLlxuIik7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I1OworCX0KKworCS8qIHNldHVwIE5BUEkgKi8KKwltZW1zZXQoJmdyZXRoLT5uYXBpLCAwLCBzaXplb2YoZ3JldGgtPm5hcGkpKTsKKwluZXRpZl9uYXBpX2FkZChkZXYsICZncmV0aC0+bmFwaSwgZ3JldGhfcG9sbCwgNjQpOworCisJcmV0dXJuIDA7CisKK2Vycm9yNToKKwlkbWFfZnJlZV9jb2hlcmVudChncmV0aC0+ZGV2LCAxMDI0LCBncmV0aC0+cnhfYmRfYmFzZSwgZ3JldGgtPnJ4X2JkX2Jhc2VfcGh5cyk7CitlcnJvcjQ6CisJZG1hX2ZyZWVfY29oZXJlbnQoZ3JldGgtPmRldiwgMTAyNCwgZ3JldGgtPnR4X2JkX2Jhc2UsIGdyZXRoLT50eF9iZF9iYXNlX3BoeXMpOworZXJyb3IzOgorCW1kaW9idXNfdW5yZWdpc3RlcihncmV0aC0+bWRpbyk7CitlcnJvcjI6CisJb2ZfaW91bm1hcCgmb2ZkZXYtPnJlc291cmNlWzBdLCBncmV0aC0+cmVncywgcmVzb3VyY2Vfc2l6ZSgmb2ZkZXYtPnJlc291cmNlWzBdKSk7CitlcnJvcjE6CisJZnJlZV9uZXRkZXYoZGV2KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBncmV0aF9vZl9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZfZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZvZl9kZXYtPmRldik7CisJc3RydWN0IGdyZXRoX3ByaXZhdGUgKmdyZXRoID0gbmV0ZGV2X3ByaXYobmRldik7CisKKwkvKiBGcmVlIGRlc2NyaXB0b3IgYXJlYXMgKi8KKwlkbWFfZnJlZV9jb2hlcmVudCgmb2ZfZGV2LT5kZXYsIDEwMjQsIGdyZXRoLT5yeF9iZF9iYXNlLCBncmV0aC0+cnhfYmRfYmFzZV9waHlzKTsKKworCWRtYV9mcmVlX2NvaGVyZW50KCZvZl9kZXYtPmRldiwgMTAyNCwgZ3JldGgtPnR4X2JkX2Jhc2UsIGdyZXRoLT50eF9iZF9iYXNlX3BoeXMpOworCisJZGV2X3NldF9kcnZkYXRhKCZvZl9kZXYtPmRldiwgTlVMTCk7CisKKwlpZiAoZ3JldGgtPnBoeSkKKwkJcGh5X3N0b3AoZ3JldGgtPnBoeSk7CisJbWRpb2J1c191bnJlZ2lzdGVyKGdyZXRoLT5tZGlvKTsKKworCXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOworCWZyZWVfbmV0ZGV2KG5kZXYpOworCisJb2ZfaW91bm1hcCgmb2ZfZGV2LT5yZXNvdXJjZVswXSwgZ3JldGgtPnJlZ3MsIHJlc291cmNlX3NpemUoJm9mX2Rldi0+cmVzb3VyY2VbMF0pKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBncmV0aF9vZl9tYXRjaFtdID0geworCXsKKwkgLm5hbWUgPSAiR0FJU0xFUl9FVEhNQUMiLAorCSB9LAorCXt9LAorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgZ3JldGhfb2ZfbWF0Y2gpOworCitzdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBncmV0aF9vZl9kcml2ZXIgPSB7CisJLm5hbWUgPSAiZ3JsaWItZ3JldGgiLAorCS5tYXRjaF90YWJsZSA9IGdyZXRoX29mX21hdGNoLAorCS5wcm9iZSA9IGdyZXRoX29mX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChncmV0aF9vZl9yZW1vdmUpLAorCS5kcml2ZXIgPSB7CisJCSAgIC5vd25lciA9IFRISVNfTU9EVUxFLAorCQkgICAubmFtZSA9ICJncmxpYi1ncmV0aCIsCisJCSAgIH0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBncmV0aF9pbml0KHZvaWQpCit7CisJcmV0dXJuIG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZ3JldGhfb2ZfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGdyZXRoX2NsZWFudXAodm9pZCkKK3sKKwlvZl91bnJlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmZ3JldGhfb2ZfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoZ3JldGhfaW5pdCk7Cittb2R1bGVfZXhpdChncmV0aF9jbGVhbnVwKTsKKworTU9EVUxFX0FVVEhPUigiQWVyb2ZsZXggR2Fpc2xlciBBQi4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQWVyb2ZsZXggR2Fpc2xlciBFdGhlcm5ldCBNQUMgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ncmV0aC5oIGIvZHJpdmVycy9uZXQvZ3JldGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzMzODhkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvZ3JldGguaApAQCAtMCwwICsxLDE0MyBAQAorI2lmbmRlZiBHUkVUSF9ICisjZGVmaW5lIEdSRVRIX0gKKworI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorCisvKiBSZWdpc3RlciBiaXRzIGFuZCBtYXNrcyAqLworI2RlZmluZSBHUkVUSF9SRVNFVCAweDQwCisjZGVmaW5lIEdSRVRIX01JSV9CVVNZIDB4OAorI2RlZmluZSBHUkVUSF9NSUlfTlZBTElEIDB4MTAKKworI2RlZmluZSBHUkVUSF9DVFJMX0ZEICAgICAgICAgMHgxMAorI2RlZmluZSBHUkVUSF9DVFJMX1BSICAgICAgICAgMHgyMAorI2RlZmluZSBHUkVUSF9DVFJMX1NQICAgICAgICAgMHg4MAorI2RlZmluZSBHUkVUSF9DVFJMX0dCICAgICAgICAgMHgxMDAKKyNkZWZpbmUgR1JFVEhfQ1RSTF9QU1RBVElFTiAgIDB4NDAwCisjZGVmaW5lIEdSRVRIX0NUUkxfTUNFTiAgICAgICAweDgwMAorI2RlZmluZSBHUkVUSF9DVFJMX0RJU0RVUExFWCAgMHgxMDAwCisjZGVmaW5lIEdSRVRIX1NUQVRVU19QSFlTVEFUICAweDEwMAorCisjZGVmaW5lIEdSRVRIX0JEX0VOIDB4ODAwCisjZGVmaW5lIEdSRVRIX0JEX1dSIDB4MTAwMAorI2RlZmluZSBHUkVUSF9CRF9JRSAweDIwMDAKKyNkZWZpbmUgR1JFVEhfQkRfTEVOIDB4N0ZGCisKKyNkZWZpbmUgR1JFVEhfVFhFTiAweDEKKyNkZWZpbmUgR1JFVEhfSU5UX1RYIDB4OAorI2RlZmluZSBHUkVUSF9UWEkgMHg0CisjZGVmaW5lIEdSRVRIX1RYQkRfU1RBVFVTIDB4MDAwMUMwMDAKKyNkZWZpbmUgR1JFVEhfVFhCRF9NT1JFIDB4MjAwMDAKKyNkZWZpbmUgR1JFVEhfVFhCRF9JUENTIDB4NDAwMDAKKyNkZWZpbmUgR1JFVEhfVFhCRF9UQ1BDUyAweDgwMDAwCisjZGVmaW5lIEdSRVRIX1RYQkRfVURQQ1MgMHgxMDAwMDAKKyNkZWZpbmUgR1JFVEhfVFhCRF9DU0FMTCAoR1JFVEhfVFhCRF9JUENTIHwgR1JFVEhfVFhCRF9UQ1BDUyB8IEdSRVRIX1RYQkRfVURQQ1MpCisjZGVmaW5lIEdSRVRIX1RYQkRfRVJSX0xDIDB4MTAwMDAKKyNkZWZpbmUgR1JFVEhfVFhCRF9FUlJfVUUgMHg0MDAwCisjZGVmaW5lIEdSRVRIX1RYQkRfRVJSX0FMIDB4ODAwMAorCisjZGVmaW5lIEdSRVRIX0lOVF9SWCAgICAgICAgIDB4NAorI2RlZmluZSBHUkVUSF9SWEVOICAgICAgICAgICAweDIKKyNkZWZpbmUgR1JFVEhfUlhJICAgICAgICAgICAgMHg4CisjZGVmaW5lIEdSRVRIX1JYQkRfU1RBVFVTICAgIDB4RkZGRkMwMDAKKyNkZWZpbmUgR1JFVEhfUlhCRF9FUlJfQUUgICAgMHg0MDAwCisjZGVmaW5lIEdSRVRIX1JYQkRfRVJSX0ZUICAgIDB4ODAwMAorI2RlZmluZSBHUkVUSF9SWEJEX0VSUl9DUkMgICAweDEwMDAwCisjZGVmaW5lIEdSRVRIX1JYQkRfRVJSX09FICAgIDB4MjAwMDAKKyNkZWZpbmUgR1JFVEhfUlhCRF9FUlJfTEUgICAgMHg0MDAwMAorI2RlZmluZSBHUkVUSF9SWEJEX0lQICAgICAgICAweDgwMDAwCisjZGVmaW5lIEdSRVRIX1JYQkRfSVBfQ1NFUlIgIDB4MTAwMDAwCisjZGVmaW5lIEdSRVRIX1JYQkRfVURQICAgICAgIDB4MjAwMDAwCisjZGVmaW5lIEdSRVRIX1JYQkRfVURQX0NTRVJSIDB4NDAwMDAwCisjZGVmaW5lIEdSRVRIX1JYQkRfVENQICAgICAgIDB4ODAwMDAwCisjZGVmaW5lIEdSRVRIX1JYQkRfVENQX0NTRVJSIDB4MTAwMDAwMAorI2RlZmluZSBHUkVUSF9SWEJEX0lQX0ZSQUcgICAweDIwMDAwMDAKKyNkZWZpbmUgR1JFVEhfUlhCRF9NQ0FTVCAgICAgMHg0MDAwMDAwCisKKy8qIERlc2NyaXB0b3IgcGFyYW1ldGVycyAqLworI2RlZmluZSBHUkVUSF9UWEJEX05VTSAxMjgKKyNkZWZpbmUgR1JFVEhfVFhCRF9OVU1fTUFTSyAoR1JFVEhfVFhCRF9OVU0tMSkKKyNkZWZpbmUgR1JFVEhfVFhfQlVGX1NJWkUgMjA0OAorI2RlZmluZSBHUkVUSF9SWEJEX05VTSAxMjgKKyNkZWZpbmUgR1JFVEhfUlhCRF9OVU1fTUFTSyAoR1JFVEhfUlhCRF9OVU0tMSkKKyNkZWZpbmUgR1JFVEhfUlhfQlVGX1NJWkUgMjA0OAorCisvKiBCdWZmZXJzIHBlciBwYWdlICovCisjZGVmaW5lIEdSRVRIX1JYX0JVRl9QUEdBRQkoUEFHRV9TSVpFL0dSRVRIX1JYX0JVRl9TSVpFKQorI2RlZmluZSBHUkVUSF9UWF9CVUZfUFBHQUUJKFBBR0VfU0laRS9HUkVUSF9UWF9CVUZfU0laRSkKKworLyogSG93IG1hbnkgcGFnZXMgYXJlIG5lZWRlZCBmb3IgYnVmZmVycyAqLworI2RlZmluZSBHUkVUSF9SWF9CVUZfUEFHRV9OVU0JKEdSRVRIX1JYQkRfTlVNL0dSRVRIX1JYX0JVRl9QUEdBRSkKKyNkZWZpbmUgR1JFVEhfVFhfQlVGX1BBR0VfTlVNCShHUkVUSF9UWEJEX05VTS9HUkVUSF9UWF9CVUZfUFBHQUUpCisKKy8qIEJ1ZmZlciBzaXplLgorICogR2JpdCBNQUMgdXNlcyB0YWdnZWQgbWF4aW11bSBmcmFtZSBzaXplIHdoaWNoIGlzIDE1MTggZXhjbHVkaW5nIENSQy4KKyAqIFNldCB0byAxNTIwIHRvIG1ha2UgYWxsIGJ1ZmZlcnMgd29yZCBhbGlnbmVkIGZvciBub24tZ2JpdCBNQUMuCisgKi8KKyNkZWZpbmUgTUFYX0ZSQU1FX1NJWkUJCTE1MjAKKworLyogRmxhZ3MgKi8KKyNkZWZpbmUgR1JFVEhfRkxBR19SWF9DU1VNIDB4MQorCisvKiBHUkVUSCBBUEIgcmVnaXN0ZXJzICovCitzdHJ1Y3QgZ3JldGhfcmVncyB7CisJdTMyIGNvbnRyb2w7CisJdTMyIHN0YXR1czsKKwl1MzIgZXNhX21zYjsKKwl1MzIgZXNhX2xzYjsKKwl1MzIgbWRpbzsKKwl1MzIgdHhfZGVzY19wOworCXUzMiByeF9kZXNjX3A7CisJdTMyIGVkY2xpcDsKKwl1MzIgaGFzaF9tc2I7CisJdTMyIGhhc2hfbHNiOworfTsKKworLyogR1JFVEggYnVmZmVyIGRlc2NyaXB0b3IgKi8KK3N0cnVjdCBncmV0aF9iZCB7CisJdTMyIHN0YXQ7CisJdTMyIGFkZHI7Cit9OworCitzdHJ1Y3QgZ3JldGhfcHJpdmF0ZSB7CisJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYnVmZltHUkVUSF9SWEJEX05VTV07CisJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYnVmZltHUkVUSF9UWEJEX05VTV07CisKKwl1bnNpZ25lZCBjaGFyICp0eF9idWZzW0dSRVRIX1RYQkRfTlVNXTsKKwl1bnNpZ25lZCBjaGFyICpyeF9idWZzW0dSRVRIX1JYQkRfTlVNXTsKKworCXUxNiB0eF9uZXh0OworCXUxNiB0eF9sYXN0OworCXUxNiB0eF9mcmVlOworCXUxNiByeF9jdXI7CisKKwlzdHJ1Y3QgZ3JldGhfcmVncyAqcmVnczsJLyogQWRkcmVzcyBvZiBjb250cm9sbGVyIHJlZ2lzdGVycy4gKi8KKwlzdHJ1Y3QgZ3JldGhfYmQgKnJ4X2JkX2Jhc2U7CS8qIEFkZHJlc3Mgb2YgUnggQkRzLiAqLworCXN0cnVjdCBncmV0aF9iZCAqdHhfYmRfYmFzZTsJLyogQWRkcmVzcyBvZiBUeCBCRHMuICovCisJZG1hX2FkZHJfdCByeF9iZF9iYXNlX3BoeXM7CisJZG1hX2FkZHJfdCB0eF9iZF9iYXNlX3BoeXM7CisKKwlpbnQgaXJxOworCisJc3RydWN0IGRldmljZSAqZGV2OwkgICAgICAgIC8qIFBvaW50ZXIgdG8gb2ZfZGV2aWNlLT5kZXYgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworCXNwaW5sb2NrX3QgZGV2bG9jazsKKworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHk7CisJc3RydWN0IG1paV9idXMgKm1kaW87CisJaW50IG1kaW9faXJxc1tQSFlfTUFYX0FERFJdOworCXVuc2lnbmVkIGludCBsaW5rOworCXVuc2lnbmVkIGludCBzcGVlZDsKKwl1bnNpZ25lZCBpbnQgZHVwbGV4OworCisJdTMyIG1zZ19lbmFibGU7CisJdTMyIGZsYWdzOworCisJdTggcGh5YWRkcjsKKwl1OCBtdWx0aWNhc3Q7CisJdTggZ2JpdF9tYWM7CisJdTggbWRpb19pbnRfZW47CisJdTggZWRjbDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaGFtYWNoaS5jIGIvZHJpdmVycy9uZXQvaGFtYWNoaS5jCmluZGV4IGVhODUwNzUuLjM3MzU0NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2hhbWFjaGkuYworKysgYi9kcml2ZXJzL25ldC9oYW1hY2hpLmMKQEAgLTE4NTQsMTcgKzE4NTQsMTggQEAKIAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsJCQkvKiBTZXQgcHJvbWlzY3VvdXMuICovCiAJCXdyaXRldygweDAwMEYsIGlvYWRkciArIEFkZHJNb2RlKTsKLQl9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gNjMpICB8fCAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisJfSBlbHNlIGlmICgobmV0ZGV2X21jX2NvdW50KGRldikgPiA2MykgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCS8qIFRvbyBtYW55IHRvIG1hdGNoLCBvciBhY2NlcHQgYWxsIG11bHRpY2FzdHMuICovCiAJCXdyaXRldygweDAwMEIsIGlvYWRkciArIEFkZHJNb2RlKTsKLQl9IGVsc2UgaWYgKGRldi0+bWNfY291bnQgPiAwKSB7IC8qIE11c3QgdXNlIHRoZSBDQU0gZmlsdGVyLiAqLworCX0gZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKSB7IC8qIE11c3QgdXNlIHRoZSBDQU0gZmlsdGVyLiAqLwogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkJIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCWludCBpID0gMDsKKworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQkJd3JpdGVsKCoodTMyKikobWNsaXN0LT5kbWlfYWRkciksIGlvYWRkciArIDB4MTAwICsgaSo4KTsKIAkJCXdyaXRlbCgweDIwMDAwIHwgKCoodTE2KikmbWNsaXN0LT5kbWlfYWRkcls0XSksCiAJCQkJICAgaW9hZGRyICsgMHgxMDQgKyBpKjgpOworCQkJaSsrOwogCQl9CiAJCS8qIENsZWFyIHJlbWFpbmluZyBlbnRyaWVzLiAqLwogCQlmb3IgKDsgaSA8IDY0OyBpKyspCkBAIC0xOTkwLDcgKzE5OTEsNyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhhbWFjaGlfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGhhbWFjaGlfcGNpX3RibCkgPSB7CiAJeyAweDEzMTgsIDB4MDkxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7IDAsIH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ocDEwMC5jIGIvZHJpdmVycy9uZXQvaHAxMDAuYwppbmRleCA5MGY4OTBlLi5iNzY2YTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ocDEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2hwMTAwLmMKQEAgLTIxMCw3ICsyMTAsNyBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUENJCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaHAxMDBfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGhwMTAwX3BjaV90YmwpID0gewogCXtQQ0lfVkVORE9SX0lEX0hQLCBQQ0lfREVWSUNFX0lEX0hQX0oyNTg1QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCx9LAogCXtQQ0lfVkVORE9SX0lEX0hQLCBQQ0lfREVWSUNFX0lEX0hQX0oyNTg1QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCx9LAogCXtQQ0lfVkVORE9SX0lEX0hQLCBQQ0lfREVWSUNFX0lEX0hQX0oyOTcwQSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCx9LApAQCAtMjA5MCw3ICsyMDkwLDcgQEAKIAkJbHAtPm1hYzJfbW9kZSA9IEhQMTAwX01BQzJNT0RFNjsJLyogcHJvbWlzY3VvdXMgbW9kZSA9IGdldCBhbGwgZ29vZCAqLwogCQlscC0+bWFjMV9tb2RlID0gSFAxMDBfTUFDMU1PREU2OwkvKiBwYWNrZXRzIG9uIHRoZSBuZXQgKi8KIAkJbWVtc2V0KCZscC0+aGFzaF9ieXRlcywgMHhmZiwgOCk7Ci0JfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50IHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCX0gZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQlscC0+bWFjMl9tb2RlID0gSFAxMDBfTUFDMk1PREU1OwkvKiBtdWx0aWNhc3QgbW9kZSA9IGdldCBwYWNrZXRzIGZvciAqLwogCQlscC0+bWFjMV9tb2RlID0gSFAxMDBfTUFDMU1PREU1OwkvKiBtZSwgYnJvYWRjYXN0cyBhbmQgYWxsIG11bHRpY2FzdHMgKi8KICNpZmRlZiBIUDEwMF9NVUxUSUNBU1RfRklMVEVSCS8qIGRvZXNuJ3Qgd29yayEhISAqLwpAQCAtMjA5OCwyMiArMjA5OCwyMyBAQAogCQkJLyogc2V0IGhhc2ggZmlsdGVyIHRvIHJlY2VpdmUgYWxsIG11bHRpY2FzdCBwYWNrZXRzICovCiAJCQltZW1zZXQoJmxwLT5oYXNoX2J5dGVzLCAweGZmLCA4KTsKIAkJfSBlbHNlIHsKLQkJCWludCBpLCBqLCBpZHg7CisJCQlpbnQgaSwgaWR4OwogCQkJdV9jaGFyICphZGRyczsKIAkJCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCiAJCQltZW1zZXQoJmxwLT5oYXNoX2J5dGVzLCAweDAwLCA4KTsKICNpZmRlZiBIUDEwMF9ERUJVRwotCQkJcHJpbnRrKCJocDEwMDogJXM6IGNvbXB1dGluZyBoYXNoIGZpbHRlciAtIG1jX2NvdW50ID0gJWlcbiIsIGRldi0+bmFtZSwgZGV2LT5tY19jb3VudCk7CisJCQlwcmludGsoImhwMTAwOiAlczogY29tcHV0aW5nIGhhc2ggZmlsdGVyIC0gbWNfY291bnQgPSAlaVxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUsIG5ldGRldl9tY19jb3VudChkZXYpKTsKICNlbmRpZgotCQkJZm9yIChpID0gMCwgZG1pID0gZGV2LT5tY19saXN0OyBpIDwgZGV2LT5tY19jb3VudDsgaSsrLCBkbWkgPSBkbWktPm5leHQpIHsKKwkJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCQkJYWRkcnMgPSBkbWktPmRtaV9hZGRyOwogCQkJCWlmICgoKmFkZHJzICYgMHgwMSkgPT0gMHgwMSkgewkvKiBtdWx0aWNhc3QgYWRkcmVzcz8gKi8KICNpZmRlZiBIUDEwMF9ERUJVRwogCQkJCQlwcmludGsoImhwMTAwOiAlczogbXVsdGljYXN0ID0gJXBNLCAiLAogCQkJCQkJICAgICBkZXYtPm5hbWUsIGFkZHJzKTsKICNlbmRpZgotCQkJCQlmb3IgKGogPSBpZHggPSAwOyBqIDwgNjsgaisrKSB7CisJCQkJCWZvciAoaSA9IGlkeCA9IDA7IGkgPCA2OyBpKyspIHsKIAkJCQkJCWlkeCBePSAqYWRkcnMrKyAmIDB4M2Y7CiAJCQkJCQlwcmludGsoIjolMDJ4OiIsIGlkeCk7CiAJCQkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYyBiL2RyaXZlcnMvbmV0L2libV9uZXdlbWFjL2NvcmUuYwppbmRleCBmYjVlMDE5Li5mYjBhYzZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pYm1fbmV3ZW1hYy9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvaWJtX25ld2VtYWMvY29yZS5jCkBAIC0zOTEsMTEgKzM5MSwxMSBAQAogCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCWludCBpOwogCi0JREJHKGRldiwgImhhc2hfbWMgJWQiIE5MLCBkZXYtPm5kZXYtPm1jX2NvdW50KTsKKwlEQkcoZGV2LCAiaGFzaF9tYyAlZCIgTkwsIG5ldGRldl9tY19jb3VudChkZXYtPm5kZXYpKTsKIAogCW1lbXNldChnYWh0X3RlbXAsIDAsIHNpemVvZiAoZ2FodF90ZW1wKSk7CiAKLQlmb3IgKGRtaSA9IGRldi0+bmRldi0+bWNfbGlzdDsgZG1pOyBkbWkgPSBkbWktPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldi0+bmRldikgewogCQlpbnQgc2xvdCwgcmVnLCBtYXNrOwogCQlEQkcyKGRldiwgIm1jICVwTSIgTkwsIGRtaS0+ZG1pX2FkZHIpOwogCkBAIC00MjUsOSArNDI1LDkgQEAKIAlpZiAobmRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKIAkJciB8PSBFTUFDX1JNUl9QTUU7CiAJZWxzZSBpZiAobmRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwKLQkJCSAobmRldi0+bWNfY291bnQgPiBFTUFDX1hBSFRfU0xPVFMoZGV2KSkpCisJCQkgKG5ldGRldl9tY19jb3VudChuZGV2KSA+IEVNQUNfWEFIVF9TTE9UUyhkZXYpKSkKIAkJciB8PSBFTUFDX1JNUl9QTU1FOwotCWVsc2UgaWYgKG5kZXYtPm1jX2NvdW50ID4gMCkKKwllbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KG5kZXYpKQogCQlyIHw9IEVNQUNfUk1SX01BRTsKIAogCXJldHVybiByOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWJtbGFuYS5jIGIvZHJpdmVycy9uZXQvaWJtbGFuYS5jCmluZGV4IDA1MmM3NDAuLmI1ZDBmNGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libWxhbmEuYworKysgYi9kcml2ZXJzL25ldC9pYm1sYW5hLmMKQEAgLTQyMCw3ICs0MjAsNyBAQAogCS8qIHN0YXJ0IHB1dHRpbmcgdGhlIG11bHRpY2FzdCBhZGRyZXNzZXMgaW50byB0aGUgQ0FNIGxpc3QuICBTdG9wIGlmCiAJICAgaXQgaXMgZnVsbC4gKi8KIAotCWZvciAobWNwdHIgPSBkZXYtPm1jX2xpc3Q7IG1jcHRyICE9IE5VTEw7IG1jcHRyID0gbWNwdHItPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY3B0ciwgZGV2KSB7CiAJCXB1dGNhbShjYW1zLCAmY2FtY250LCBtY3B0ci0+ZG1pX2FkZHIpOwogCQlpZiAoY2FtY250ID09IDE2KQogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pYm12ZXRoLmMgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmMKaW5kZXggYTg2NjkzOS4uMGJjNzc3YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2libXZldGguYworKysgYi9kcml2ZXJzL25ldC9pYm12ZXRoLmMKQEAgLTEwNjIsNyArMTA2Miw4IEBACiAJc3RydWN0IGlibXZldGhfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdW5zaWduZWQgbG9uZyBscGFyX3JjOwogCi0JaWYoKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgfHwgKG5ldGRldi0+bWNfY291bnQgPiBhZGFwdGVyLT5tY2FzdEZpbHRlclNpemUpKSB7CisJaWYgKChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8CisJICAgIChuZXRkZXZfbWNfY291bnQobmV0ZGV2KSA+IGFkYXB0ZXItPm1jYXN0RmlsdGVyU2l6ZSkpIHsKIAkJbHBhcl9yYyA9IGhfbXVsdGljYXN0X2N0cmwoYWRhcHRlci0+dmRldi0+dW5pdF9hZGRyZXNzLAogCQkJCQkgICBJYm1WZXRoTWNhc3RFbmFibGVSZWN2IHwKIAkJCQkJICAgSWJtVmV0aE1jYXN0RGlzYWJsZUZpbHRlcmluZywKQEAgLTEwNzEsOCArMTA3Miw3IEBACiAJCQlpYm12ZXRoX2Vycm9yX3ByaW50aygiaF9tdWx0aWNhc3RfY3RybCByYz0lbGQgd2hlbiBlbnRlcmluZyBwcm9taXNjIG1vZGVcbiIsIGxwYXJfcmMpOwogCQl9CiAJfSBlbHNlIHsKLQkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QgPSBuZXRkZXYtPm1jX2xpc3Q7Ci0JCWludCBpOworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKIAkJLyogY2xlYXIgdGhlIGZpbHRlciB0YWJsZSAmIGRpc2FibGUgZmlsdGVyaW5nICovCiAJCWxwYXJfcmMgPSBoX211bHRpY2FzdF9jdHJsKGFkYXB0ZXItPnZkZXYtPnVuaXRfYWRkcmVzcywKIAkJCQkJICAgSWJtVmV0aE1jYXN0RW5hYmxlUmVjdiB8CkBAIC0xMDgzLDcgKzEwODMsNyBAQAogCQkJaWJtdmV0aF9lcnJvcl9wcmludGsoImhfbXVsdGljYXN0X2N0cmwgcmM9JWxkIHdoZW4gYXR0ZW1wdGluZyB0byBjbGVhciBmaWx0ZXIgdGFibGVcbiIsIGxwYXJfcmMpOwogCQl9CiAJCS8qIGFkZCB0aGUgYWRkcmVzc2VzIHRvIHRoZSBmaWx0ZXIgdGFibGUgKi8KLQkJZm9yKGkgPSAwOyBpIDwgbmV0ZGV2LT5tY19jb3VudDsgKytpLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBuZXRkZXYpIHsKIAkJCS8vIGFkZCB0aGUgbXVsdGljYXN0IGFkZHJlc3MgdG8gdGhlIGZpbHRlciB0YWJsZQogCQkJdW5zaWduZWQgbG9uZyBtY2FzdF9hZGRyID0gMDsKIAkJCW1lbWNweSgoKGNoYXIgKikmbWNhc3RfYWRkcikrMiwgbWNsaXN0LT5kbWlfYWRkciwgNik7CkBAIC0xNTc3LDcgKzE1NzcsNyBAQAogCU5VTEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyB2ZXRoX3Bvb2xfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgdmV0aF9wb29sX29wcyA9IHsKIAkuc2hvdyAgID0gdmV0aF9wb29sX3Nob3csCiAJLnN0b3JlICA9IHZldGhfcG9vbF9zdG9yZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5jCmluZGV4IGM1MDViNTBkLi45ZDdmYTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfODI1NzUuYwpAQCAtNzI3LDYgKzcyNywzNCBAQAogfQogCiAvKioKKyAqICBpZ2JfcG93ZXJfdXBfc2VyZGVzX2xpbmtfODI1NzUgLSBQb3dlciB1cCB0aGUgc2VyZGVzIGxpbmsgYWZ0ZXIgc2h1dGRvd24KKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoqLwordm9pZCBpZ2JfcG93ZXJfdXBfc2VyZGVzX2xpbmtfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1MzIgcmVnOworCisKKwlpZiAoKGh3LT5waHkubWVkaWFfdHlwZSAhPSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykgJiYKKwkgICAgIWlnYl9zZ21paV9hY3RpdmVfODI1NzUoaHcpKQorCQlyZXR1cm47CisKKwkvKiBFbmFibGUgUENTIHRvIHR1cm4gb24gbGluayAqLworCXJlZyA9IHJkMzIoRTEwMDBfUENTX0NGRzApOworCXJlZyB8PSBFMTAwMF9QQ1NfQ0ZHX1BDU19FTjsKKwl3cjMyKEUxMDAwX1BDU19DRkcwLCByZWcpOworCisJLyogUG93ZXIgdXAgdGhlIGxhc2VyICovCisJcmVnID0gcmQzMihFMTAwMF9DVFJMX0VYVCk7CisJcmVnICY9IH5FMTAwMF9DVFJMX0VYVF9TRFAzX0RBVEE7CisJd3IzMihFMTAwMF9DVFJMX0VYVCwgcmVnKTsKKworCS8qIGZsdXNoIHRoZSB3cml0ZSB0byB2ZXJpZnkgY29tcGxldGlvbiAqLworCXdyZmwoKTsKKwltc2xlZXAoMSk7Cit9CisKKy8qKgogICogIGlnYl9nZXRfcGNzX3NwZWVkX2FuZF9kdXBsZXhfODI1NzUgLSBSZXRyaWV2ZSBjdXJyZW50IHNwZWVkL2R1cGxleAogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKiAgQHNwZWVkOiBzdG9yZXMgdGhlIGN1cnJlbnQgc3BlZWQKQEAgLTc5MSwyNyArODE5LDEyIEBACiB2b2lkIGlnYl9zaHV0ZG93bl9zZXJkZXNfbGlua184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQogewogCXUzMiByZWc7Ci0JdTE2IGVlcHJvbV9kYXRhID0gMDsKIAotCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgIT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMgfHwKKwlpZiAoaHctPnBoeS5tZWRpYV90eXBlICE9IGUxMDAwX21lZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzICYmCiAJICAgIGlnYl9zZ21paV9hY3RpdmVfODI1NzUoaHcpKQogCQlyZXR1cm47CiAKLQlpZiAoaHctPmJ1cy5mdW5jID09IEUxMDAwX0ZVTkNfMCkKLQkJaHctPm52bS5vcHMucmVhZChodywgTlZNX0lOSVRfQ09OVFJPTDNfUE9SVF9BLCAxLCAmZWVwcm9tX2RhdGEpOwotCWVsc2UgaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU4MCkKLQkJaHctPm52bS5vcHMucmVhZChodywgTlZNX0lOSVRfQ09OVFJPTDNfUE9SVF9BICsKLQkJICAgICAgICAgICAgICAgICBOVk1fODI1ODBfTEFOX0ZVTkNfT0ZGU0VUKGh3LT5idXMuZnVuYyksIDEsCi0JCSAgICAgICAgICAgICAgICAgJmVlcHJvbV9kYXRhKTsKLQllbHNlIGlmIChody0+YnVzLmZ1bmMgPT0gRTEwMDBfRlVOQ18xKQotCQlody0+bnZtLm9wcy5yZWFkKGh3LCBOVk1fSU5JVF9DT05UUk9MM19QT1JUX0IsIDEsICZlZXByb21fZGF0YSk7Ci0KLQkvKgotCSAqIElmIEFQTSBpcyBub3QgZW5hYmxlZCBpbiB0aGUgRUVQUk9NIGFuZCBtYW5hZ2VtZW50IGludGVyZmFjZSBpcwotCSAqIG5vdCBlbmFibGVkLCB0aGVuIHBvd2VyIGRvd24uCi0JICovCi0JaWYgKCEoZWVwcm9tX2RhdGEgJiBFMTAwMF9OVk1fQVBNRV84MjU3NSkgJiYKLQkgICAgIWlnYl9lbmFibGVfbW5nX3Bhc3NfdGhydShodykpIHsKKwlpZiAoIWlnYl9lbmFibGVfbW5nX3Bhc3NfdGhydShodykpIHsKIAkJLyogRGlzYWJsZSBQQ1MgdG8gdHVybiBvZmYgbGluayAqLwogCQlyZWcgPSByZDMyKEUxMDAwX1BDU19DRkcwKTsKIAkJcmVnICY9IH5FMTAwMF9QQ1NfQ0ZHX1BDU19FTjsKQEAgLTgyNiw4ICs4MzksNiBAQAogCQl3cmZsKCk7CiAJCW1zbGVlcCgxKTsKIAl9Ci0KLQlyZXR1cm47CiB9CiAKIC8qKgpAQCAtMTE4Myw2ICsxMTk0LDIyIEBACiB9CiAKIC8qKgorICogaWdiX3Bvd2VyX2Rvd25fcGh5X2NvcHBlcl84MjU3NSAtIFJlbW92ZSBsaW5rIGR1cmluZyBQSFkgcG93ZXIgZG93bgorICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiBJbiB0aGUgY2FzZSBvZiBhIFBIWSBwb3dlciBkb3duIHRvIHNhdmUgcG93ZXIsIG9yIHRvIHR1cm4gb2ZmIGxpbmsgZHVyaW5nIGEKKyAqIGRyaXZlciB1bmxvYWQsIG9yIHdha2Ugb24gbGFuIGlzIG5vdCBlbmFibGVkLCByZW1vdmUgdGhlIGxpbmsuCisgKiovCit2b2lkIGlnYl9wb3dlcl9kb3duX3BoeV9jb3BwZXJfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwkvKiBJZiB0aGUgbWFuYWdlbWVudCBpbnRlcmZhY2UgaXMgbm90IGVuYWJsZWQsIHRoZW4gcG93ZXIgZG93biAqLworCWlmICghKGlnYl9lbmFibGVfbW5nX3Bhc3NfdGhydShodykgfHwgaWdiX2NoZWNrX3Jlc2V0X2Jsb2NrKGh3KSkpCisJCWlnYl9wb3dlcl9kb3duX3BoeV9jb3BwZXIoaHcpOworCisJcmV0dXJuOworfQorCisvKioKICAqICBpZ2JfY2xlYXJfaHdfY250cnNfODI1NzUgLSBDbGVhciBkZXZpY2Ugc3BlY2lmaWMgaGFyZHdhcmUgY291bnRlcnMKICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF84MjU3NS5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmgKaW5kZXggZDUxYzk5Mi4uZmJlMWM5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmgKQEAgLTI5LDYgKzI5LDggQEAKICNkZWZpbmUgX0UxMDAwXzgyNTc1X0hfCiAKIGV4dGVybiB2b2lkIGlnYl9zaHV0ZG93bl9zZXJkZXNfbGlua184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK2V4dGVybiB2b2lkIGlnYl9wb3dlcl91cF9zZXJkZXNfbGlua184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK2V4dGVybiB2b2lkIGlnYl9wb3dlcl9kb3duX3BoeV9jb3BwZXJfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodyk7CiBleHRlcm4gdm9pZCBpZ2JfcnhfZmlmb19mbHVzaF84MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIAogI2RlZmluZSBJRF9MRURfREVGQVVMVF84MjU3NV9TRVJERVMgKChJRF9MRURfREVGMV9ERUYyIDw8IDEyKSB8IFwKQEAgLTIxOSw2ICsyMjEsOSBAQAogI2RlZmluZSBFMTAwMF9WTFZGX0xWTEFOICAgICAgICAgIDB4MDAxMDAwMDAKICNkZWZpbmUgRTEwMDBfVkxWRl9WTEFOSURfRU5BQkxFICAweDgwMDAwMDAwCiAKKyNkZWZpbmUgRTEwMDBfVk1WSVJfVkxBTkFfREVGQVVMVCAgICAgIDB4NDAwMDAwMDAgLyogQWx3YXlzIHVzZSBkZWZhdWx0IFZMQU4gKi8KKyNkZWZpbmUgRTEwMDBfVk1WSVJfVkxBTkFfTkVWRVIgICAgICAgIDB4ODAwMDAwMDAgLyogTmV2ZXIgaW5zZXJ0IFZMQU4gdGFnICovCisKICNkZWZpbmUgRTEwMDBfSU9WQ1RMIDB4MDVCQkMKICNkZWZpbmUgRTEwMDBfSU9WQ1RMX1JFVVNFX1ZGUSAweDAwMDAwMDAxCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9kZWZpbmVzLmggYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfZGVmaW5lcy5oCmluZGV4IDZlMDM2YWUuLmZlNmNmMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9kZWZpbmVzLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2RlZmluZXMuaApAQCAtMzEzLDEyICszMTMsNiBAQAogI2RlZmluZSBFMTAwMF9QQkFfMzRLIDB4MDAyMgogI2RlZmluZSBFMTAwMF9QQkFfNjRLIDB4MDA0MCAgICAvKiA2NEtCICovCiAKLSNkZWZpbmUgSUZTX01BWCAgICAgICA4MAotI2RlZmluZSBJRlNfTUlOICAgICAgIDQwCi0jZGVmaW5lIElGU19SQVRJTyAgICAgNAotI2RlZmluZSBJRlNfU1RFUCAgICAgIDEwCi0jZGVmaW5lIE1JTl9OVU1fWE1JVFMgMTAwMAotCiAvKiBTVyBTZW1hcGhvcmUgUmVnaXN0ZXIgKi8KICNkZWZpbmUgRTEwMDBfU1dTTV9TTUJJICAgICAgICAgMHgwMDAwMDAwMSAvKiBEcml2ZXIgU2VtYXBob3JlIGJpdCAqLwogI2RlZmluZSBFMTAwMF9TV1NNX1NXRVNNQkkgICAgICAweDAwMDAwMDAyIC8qIEZXIFNlbWFwaG9yZSBiaXQgKi8KQEAgLTQ4MSw2ICs0NzUsNyBAQAogLyogUEhZIENvbnRyb2wgUmVnaXN0ZXIgKi8KICNkZWZpbmUgTUlJX0NSX0ZVTExfRFVQTEVYICAgICAgMHgwMTAwICAvKiBGRFggPTEsIGhhbGYgZHVwbGV4ID0wICovCiAjZGVmaW5lIE1JSV9DUl9SRVNUQVJUX0FVVE9fTkVHIDB4MDIwMCAgLyogUmVzdGFydCBhdXRvIG5lZ290aWF0aW9uICovCisjZGVmaW5lIE1JSV9DUl9QT1dFUl9ET1dOICAgICAgIDB4MDgwMCAgLyogUG93ZXIgZG93biAqLwogI2RlZmluZSBNSUlfQ1JfQVVUT19ORUdfRU4gICAgICAweDEwMDAgIC8qIEF1dG8gTmVnIEVuYWJsZSAqLwogI2RlZmluZSBNSUlfQ1JfTE9PUEJBQ0sgICAgICAgICAweDQwMDAgIC8qIDAgPSBub3JtYWwsIDEgPSBsb29wYmFjayAqLwogI2RlZmluZSBNSUlfQ1JfUkVTRVQgICAgICAgICAgICAweDgwMDAgIC8qIDAgPSBub3JtYWwsIDEgPSBQSFkgcmVzZXQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9ody5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2h3LmgKaW5kZXggZGJhZWI1Zi4uNDQ4MDA1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX2h3LmgKQEAgLTMzOSwxOSArMzM5LDEyIEBACiAKIAllbnVtIGUxMDAwX21hY190eXBlIHR5cGU7CiAKLQl1MzIgY29sbGlzaW9uX2RlbHRhOwogCXUzMiBsZWRjdGxfZGVmYXVsdDsKIAl1MzIgbGVkY3RsX21vZGUxOwogCXUzMiBsZWRjdGxfbW9kZTI7CiAJdTMyIG1jX2ZpbHRlcl90eXBlOwotCXUzMiB0eF9wYWNrZXRfZGVsdGE7CiAJdTMyIHR4Y3c7CiAKLQl1MTYgY3VycmVudF9pZnNfdmFsOwotCXUxNiBpZnNfbWF4X3ZhbDsKLQl1MTYgaWZzX21pbl92YWw7Ci0JdTE2IGlmc19yYXRpbzsKLQl1MTYgaWZzX3N0ZXBfc2l6ZTsKIAl1MTYgbXRhX3JlZ19jb3VudDsKIAl1MTYgdXRhX3JlZ19jb3VudDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5jIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5jCmluZGV4IDJhZDM1OGEuLjJhOGE4ODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmMKQEAgLTEzMDQsNzYgKzEzMDQsNiBAQAogfQogCiAvKioKLSAqICBpZ2JfcmVzZXRfYWRhcHRpdmUgLSBSZXNldCBBZGFwdGl2ZSBJbnRlcmZyYW1lIFNwYWNpbmcKLSAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQotICoKLSAqICBSZXNldCB0aGUgQWRhcHRpdmUgSW50ZXJmcmFtZSBTcGFjaW5nIHRocm90dGxlIHRvIGRlZmF1bHQgdmFsdWVzLgotICoqLwotdm9pZCBpZ2JfcmVzZXRfYWRhcHRpdmUoc3RydWN0IGUxMDAwX2h3ICpodykKLXsKLQlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOwotCi0JaWYgKCFtYWMtPmFkYXB0aXZlX2lmcykgewotCQlod19kYmcoIk5vdCBpbiBBZGFwdGl2ZSBJRlMgbW9kZSFcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoIW1hYy0+aWZzX3BhcmFtc19mb3JjZWQpIHsKLQkJbWFjLT5jdXJyZW50X2lmc192YWwgPSAwOwotCQltYWMtPmlmc19taW5fdmFsID0gSUZTX01JTjsKLQkJbWFjLT5pZnNfbWF4X3ZhbCA9IElGU19NQVg7Ci0JCW1hYy0+aWZzX3N0ZXBfc2l6ZSA9IElGU19TVEVQOwotCQltYWMtPmlmc19yYXRpbyA9IElGU19SQVRJTzsKLQl9Ci0KLQltYWMtPmluX2lmc19tb2RlID0gZmFsc2U7Ci0Jd3IzMihFMTAwMF9BSVQsIDApOwotb3V0OgotCXJldHVybjsKLX0KLQotLyoqCi0gKiAgaWdiX3VwZGF0ZV9hZGFwdGl2ZSAtIFVwZGF0ZSBBZGFwdGl2ZSBJbnRlcmZyYW1lIFNwYWNpbmcKLSAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQotICoKLSAqICBVcGRhdGUgdGhlIEFkYXB0aXZlIEludGVyZnJhbWUgU3BhY2luZyBUaHJvdHRsZSB2YWx1ZSBiYXNlZCBvbiB0aGUKLSAqICB0aW1lIGJldHdlZW4gdHJhbnNtaXR0ZWQgcGFja2V0cyBhbmQgdGltZSBiZXR3ZWVuIGNvbGxpc2lvbnMuCi0gKiovCi12b2lkIGlnYl91cGRhdGVfYWRhcHRpdmUoc3RydWN0IGUxMDAwX2h3ICpodykKLXsKLQlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOwotCi0JaWYgKCFtYWMtPmFkYXB0aXZlX2lmcykgewotCQlod19kYmcoIk5vdCBpbiBBZGFwdGl2ZSBJRlMgbW9kZSFcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoKG1hYy0+Y29sbGlzaW9uX2RlbHRhICogbWFjLT5pZnNfcmF0aW8pID4gbWFjLT50eF9wYWNrZXRfZGVsdGEpIHsKLQkJaWYgKG1hYy0+dHhfcGFja2V0X2RlbHRhID4gTUlOX05VTV9YTUlUUykgewotCQkJbWFjLT5pbl9pZnNfbW9kZSA9IHRydWU7Ci0JCQlpZiAobWFjLT5jdXJyZW50X2lmc192YWwgPCBtYWMtPmlmc19tYXhfdmFsKSB7Ci0JCQkJaWYgKCFtYWMtPmN1cnJlbnRfaWZzX3ZhbCkKLQkJCQkJbWFjLT5jdXJyZW50X2lmc192YWwgPSBtYWMtPmlmc19taW5fdmFsOwotCQkJCWVsc2UKLQkJCQkJbWFjLT5jdXJyZW50X2lmc192YWwgKz0KLQkJCQkJCW1hYy0+aWZzX3N0ZXBfc2l6ZTsKLQkJCQl3cjMyKEUxMDAwX0FJVCwKLQkJCQkJCW1hYy0+Y3VycmVudF9pZnNfdmFsKTsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChtYWMtPmluX2lmc19tb2RlICYmCi0JCSAgICAobWFjLT50eF9wYWNrZXRfZGVsdGEgPD0gTUlOX05VTV9YTUlUUykpIHsKLQkJCW1hYy0+Y3VycmVudF9pZnNfdmFsID0gMDsKLQkJCW1hYy0+aW5faWZzX21vZGUgPSBmYWxzZTsKLQkJCXdyMzIoRTEwMDBfQUlULCAwKTsKLQkJfQotCX0KLW91dDoKLQlyZXR1cm47Ci19Ci0KLS8qKgogICogIGlnYl92YWxpZGF0ZV9tZGlfc2V0dGluZyAtIFZlcmlmeSBNREkvTURJeCBzZXR0aW5ncwogICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5oCmluZGV4IGJjYTE3ZDg4Li42MDFiZTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbWFjLmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5oCkBAIC02Nyw4ICs2Nyw2IEBACiB2b2lkIGlnYl9wdXRfaHdfc2VtYXBob3JlKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogdm9pZCBpZ2JfcmFyX3NldChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1OCAqYWRkciwgdTMyIGluZGV4KTsKIHMzMiAgaWdiX2NoZWNrX2FsdF9tYWNfYWRkcihzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKLXZvaWQgaWdiX3Jlc2V0X2FkYXB0aXZlKHN0cnVjdCBlMTAwMF9odyAqaHcpOwotdm9pZCBpZ2JfdXBkYXRlX2FkYXB0aXZlKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogCiBib29sIGlnYl9lbmFibGVfbW5nX3Bhc3NfdGhydShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jCmluZGV4IDM2NzBhNjYuLmNmMWYzMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuYworKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmMKQEAgLTE5MzEsNiArMTkzMSw0MSBAQAogfQogCiAvKioKKyAqIGlnYl9wb3dlcl91cF9waHlfY29wcGVyIC0gUmVzdG9yZSBjb3BwZXIgbGluayBpbiBjYXNlIG9mIFBIWSBwb3dlciBkb3duCisgKiBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqIEluIHRoZSBjYXNlIG9mIGEgUEhZIHBvd2VyIGRvd24gdG8gc2F2ZSBwb3dlciwgb3IgdG8gdHVybiBvZmYgbGluayBkdXJpbmcgYQorICogZHJpdmVyIHVubG9hZCwgcmVzdG9yZSB0aGUgbGluayB0byBwcmV2aW91cyBzZXR0aW5ncy4KKyAqKi8KK3ZvaWQgaWdiX3Bvd2VyX3VwX3BoeV9jb3BwZXIoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1MTYgbWlpX3JlZyA9IDA7CisKKwkvKiBUaGUgUEhZIHdpbGwgcmV0YWluIGl0cyBzZXR0aW5ncyBhY3Jvc3MgYSBwb3dlciBkb3duL3VwIGN5Y2xlICovCisJaHctPnBoeS5vcHMucmVhZF9yZWcoaHcsIFBIWV9DT05UUk9MLCAmbWlpX3JlZyk7CisJbWlpX3JlZyAmPSB+TUlJX0NSX1BPV0VSX0RPV047CisJaHctPnBoeS5vcHMud3JpdGVfcmVnKGh3LCBQSFlfQ09OVFJPTCwgbWlpX3JlZyk7Cit9CisKKy8qKgorICogaWdiX3Bvd2VyX2Rvd25fcGh5X2NvcHBlciAtIFBvd2VyIGRvd24gY29wcGVyIFBIWQorICogQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiBQb3dlciBkb3duIFBIWSB0byBzYXZlIHBvd2VyIHdoZW4gaW50ZXJmYWNlIGlzIGRvd24gYW5kIHdha2Ugb24gbGFuCisgKiBpcyBub3QgZW5hYmxlZC4KKyAqKi8KK3ZvaWQgaWdiX3Bvd2VyX2Rvd25fcGh5X2NvcHBlcihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXUxNiBtaWlfcmVnID0gMDsKKworCS8qIFRoZSBQSFkgd2lsbCByZXRhaW4gaXRzIHNldHRpbmdzIGFjcm9zcyBhIHBvd2VyIGRvd24vdXAgY3ljbGUgKi8KKwlody0+cGh5Lm9wcy5yZWFkX3JlZyhodywgUEhZX0NPTlRST0wsICZtaWlfcmVnKTsKKwltaWlfcmVnIHw9IE1JSV9DUl9QT1dFUl9ET1dOOworCWh3LT5waHkub3BzLndyaXRlX3JlZyhodywgUEhZX0NPTlRST0wsIG1paV9yZWcpOworCW1zbGVlcCgxKTsKK30KKworLyoqCiAgKiAgaWdiX2NoZWNrX3BvbGFyaXR5XzgyNTgwIC0gQ2hlY2tzIHRoZSBwb2xhcml0eS4KICAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuaCBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuaAppbmRleCA1NTVlYjU0Li41NjVhNmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcGh5LmgKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5oCkBAIC02MCw2ICs2MCw4IEBACiBzMzIgIGlnYl93cml0ZV9waHlfcmVnX2lncChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSk7CiBzMzIgIGlnYl9waHlfaGFzX2xpbmsoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGl0ZXJhdGlvbnMsCiAJCQkJdTMyIHVzZWNfaW50ZXJ2YWwsIGJvb2wgKnN1Y2Nlc3MpOwordm9pZCBpZ2JfcG93ZXJfdXBfcGh5X2NvcHBlcihzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3ZvaWQgaWdiX3Bvd2VyX2Rvd25fcGh5X2NvcHBlcihzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKIHMzMiAgaWdiX3BoeV9pbml0X3NjcmlwdF9pZ3AzKHN0cnVjdCBlMTAwMF9odyAqaHcpOwogczMyICBpZ2JfcmVhZF9waHlfcmVnX21kaWMoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2ICpkYXRhKTsKIHMzMiAgaWdiX3dyaXRlX3BoeV9yZWdfbWRpYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcmVncy5oIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3JlZ3MuaAppbmRleCBkZDRlNmZmLi5hYmI3MzMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfcmVncy5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9yZWdzLmgKQEAgLTMxMCw2ICszMTAsNyBAQAogI2RlZmluZSBFMTAwMF9WTU9MUihfbikgICAgICAgICgweDA1QUQwICsgKDQgKiAoX24pKSkKICNkZWZpbmUgRTEwMDBfVkxWRihfbikgICAgICAgICAoMHgwNUQwMCArICg0ICogKF9uKSkpIC8qIFZMQU4gVmlydHVhbCBNYWNoaW5lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBGaWx0ZXIgLSBSVyAqLworI2RlZmluZSBFMTAwMF9WTVZJUihfbikgICAgICAgICgweDAzNzAwICsgKDQgKiAoX24pKSkKIAogI2RlZmluZSB3cjMyKHJlZywgdmFsdWUpICh3cml0ZWwodmFsdWUsIGh3LT5od19hZGRyICsgcmVnKSkKICNkZWZpbmUgcmQzMihyZWcpIChyZWFkbChody0+aHdfYWRkciArIHJlZykpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2IvaWdiLmggYi9kcml2ZXJzL25ldC9pZ2IvaWdiLmgKaW5kZXggYjFjMWViOC4uYTE3NzU3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYi5oCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2IuaApAQCAtNzUsMTEgKzc1LDE0IEBACiAJdTE2IHZsYW5zX2VuYWJsZWQ7CiAJdTMyIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgbGFzdF9uYWNrOworCXUxNiBwZl92bGFuOyAvKiBXaGVuIHNldCwgZ3Vlc3QgVkxBTiBjb25maWcgbm90IGFsbG93ZWQuICovCisJdTE2IHBmX3FvczsKIH07CiAKICNkZWZpbmUgSUdCX1ZGX0ZMQUdfQ1RTICAgICAgICAgICAgMHgwMDAwMDAwMSAvKiBWRiBpcyBjbGVhciB0byBzZW5kIGRhdGEgKi8KICNkZWZpbmUgSUdCX1ZGX0ZMQUdfVU5JX1BST01JU0MgICAgMHgwMDAwMDAwMiAvKiBWRiBoYXMgdW5pY2FzdCBwcm9taXNjICovCiAjZGVmaW5lIElHQl9WRl9GTEFHX01VTFRJX1BST01JU0MgIDB4MDAwMDAwMDQgLyogVkYgaGFzIG11bHRpY2FzdCBwcm9taXNjICovCisjZGVmaW5lIElHQl9WRl9GTEFHX1BGX1NFVF9NQUMgICAgIDB4MDAwMDAwMDggLyogUEYgaGFzIHNldCBNQUMgYWRkcmVzcyAqLwogCiAvKiBSWCBkZXNjcmlwdG9yIGNvbnRyb2wgdGhyZXNob2xkcy4KICAqIFBUSFJFU0ggLSBNQUMgd2lsbCBjb25zaWRlciBwcmVmZXRjaCBpZiBpdCBoYXMgZmV3ZXIgdGhhbiB0aGlzIG51bWJlciBvZgpAQCAtOTIsMTMgKzk1LDEzIEBACiAgKiAgICAgICAgICAgZGVzY3JpcHRvcnMgdW50aWwgZWl0aGVyIGl0IGhhcyB0aGlzIG1hbnkgdG8gd3JpdGUgYmFjaywgb3IgdGhlCiAgKiAgICAgICAgICAgSVRSIHRpbWVyIGV4cGlyZXMuCiAgKi8KLSNkZWZpbmUgSUdCX1JYX1BUSFJFU0ggICAgICAgICAgICAgICAgICAgIChody0+bWFjLnR5cGUgPD0gZTEwMDBfODI1NzYgPyAxNiA6IDgpCisjZGVmaW5lIElHQl9SWF9QVEhSRVNIICAgICAgICAgICAgICAgICAgICAgOAogI2RlZmluZSBJR0JfUlhfSFRIUkVTSCAgICAgICAgICAgICAgICAgICAgIDgKICNkZWZpbmUgSUdCX1JYX1dUSFJFU0ggICAgICAgICAgICAgICAgICAgICAxCiAjZGVmaW5lIElHQl9UWF9QVEhSRVNIICAgICAgICAgICAgICAgICAgICAgOAogI2RlZmluZSBJR0JfVFhfSFRIUkVTSCAgICAgICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgSUdCX1RYX1dUSFJFU0ggICAgICAgICAgICAgICAgICAgICAoKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NiAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5tc2l4X2VudHJpZXMpID8gMCA6IDE2KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+bXNpeF9lbnRyaWVzKSA/IDEgOiAxNikKIAogLyogdGhpcyBpcyB0aGUgc2l6ZSBwYXN0IHdoaWNoIGhhcmR3YXJlIHdpbGwgZHJvcCBwYWNrZXRzIHdoZW4gc2V0dGluZyBMUEU9MCAqLwogI2RlZmluZSBNQVhJTVVNX0VUSEVSTkVUX1ZMQU5fU0laRSAxNTIyCkBAIC0xMzgsNiArMTQxLDcgQEAKIAkJCXUxNiBsZW5ndGg7CiAJCQl1MTYgbmV4dF90b193YXRjaDsKIAkJCXUxNiBtYXBwZWRfYXNfcGFnZTsKKwkJCXUxNiBnc29fc2VnczsKIAkJfTsKIAkJLyogUlggKi8KIAkJc3RydWN0IHsKQEAgLTE3Myw3ICsxNzcsNiBAQAogCiAJdTE2IGl0cl92YWw7CiAJdTggc2V0X2l0cjsKLQl1OCBpdHJfc2hpZnQ7CiAJdm9pZCBfX2lvbWVtICppdHJfcmVnaXN0ZXI7CiAKIAljaGFyIG5hbWVbSUZOQU1TSVogKyA5XTsKQEAgLTIzOCw3ICsyNDEsNiBAQAogfQogCiAvKiBib2FyZCBzcGVjaWZpYyBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCi0KIHN0cnVjdCBpZ2JfYWRhcHRlciB7CiAJc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2dfdGltZXI7CiAJc3RydWN0IHRpbWVyX2xpc3QgcGh5X2luZm9fdGltZXI7CkBAIC0yNjQsMTIgKzI2NiwxMiBAQAogCXVuc2lnbmVkIGxvbmcgbGVkX3N0YXR1czsKIAogCS8qIFRYICovCi0Jc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nOyAgICAgIC8qIE9uZSBwZXIgYWN0aXZlIHF1ZXVlICovCisJc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nWzE2XTsKIAl1bnNpZ25lZCBsb25nIHR4X3F1ZXVlX2xlbjsKIAl1MzIgdHhfdGltZW91dF9jb3VudDsKIAogCS8qIFJYICovCi0Jc3RydWN0IGlnYl9yaW5nICpyeF9yaW5nOyAgICAgIC8qIE9uZSBwZXIgYWN0aXZlIHF1ZXVlICovCisJc3RydWN0IGlnYl9yaW5nICpyeF9yaW5nWzE2XTsKIAlpbnQgbnVtX3R4X3F1ZXVlczsKIAlpbnQgbnVtX3J4X3F1ZXVlczsKIApAQCAtMzU0LDcgKzM1Niw5IEBACiAJCQkJCSAgIHN0cnVjdCBpZ2JfYnVmZmVyICopOwogZXh0ZXJuIHZvaWQgaWdiX2FsbG9jX3J4X2J1ZmZlcnNfYWR2KHN0cnVjdCBpZ2JfcmluZyAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgaWdiX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKik7CitleHRlcm4gYm9vbCBpZ2JfaGFzX2xpbmsoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiB2b2lkIGlnYl9zZXRfZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKik7CitleHRlcm4gdm9pZCBpZ2JfcG93ZXJfdXBfbGluayhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKik7CiAKIHN0YXRpYyBpbmxpbmUgczMyIGlnYl9yZXNldF9waHkoc3RydWN0IGUxMDAwX2h3ICpodykKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKaW5kZXggZjc3MWE2Yy4uYTRjZWFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9ldGh0b29sLmMKQEAgLTIzNCw2ICsyMzQsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHUzMiBpZ2JfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmFkYXB0ZXItPmh3Lm1hYzsKKworCS8qCisJICogSWYgdGhlIGxpbmsgaXMgbm90IHJlcG9ydGVkIHVwIHRvIG5ldGRldiwgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQsCisJICogYW5kIHNvIHRoZSBwaHlzaWNhbCBsaW5rIHN0YXRlIG1heSBoYXZlIGNoYW5nZWQgc2luY2Ugd2UgbGFzdAorCSAqIGxvb2tlZC4gU2V0IGdldF9saW5rX3N0YXR1cyB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdHJ1ZSBsaW5rCisJICogc3RhdGUgaXMgaW50ZXJyb2dhdGVkLCByYXRoZXIgdGhhbiBwdWxsaW5nIGEgY2FjaGVkIGFuZCBwb3NzaWJseQorCSAqIHN0YWxlIGxpbmsgc3RhdGUgZnJvbSB0aGUgZHJpdmVyLgorCSAqLworCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKQorCQltYWMtPmdldF9saW5rX3N0YXR1cyA9IDE7CisKKwlyZXR1cm4gaWdiX2hhc19saW5rKGFkYXB0ZXIpOworfQorCiBzdGF0aWMgdm9pZCBpZ2JfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCSAgICAgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSkKIHsKQEAgLTI5Niw3ICszMTQsNyBAQAogc3RhdGljIHUzMiBpZ2JfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXJldHVybiAhIShhZGFwdGVyLT5yeF9yaW5nWzBdLmZsYWdzICYgSUdCX1JJTkdfRkxBR19SWF9DU1VNKTsKKwlyZXR1cm4gISEoYWRhcHRlci0+cnhfcmluZ1swXS0+ZmxhZ3MgJiBJR0JfUklOR19GTEFHX1JYX0NTVU0pOwogfQogCiBzdGF0aWMgaW50IGlnYl9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKQEAgLTMwNiw5ICszMjQsOSBAQAogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewogCQlpZiAoZGF0YSkKLQkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0uZmxhZ3MgfD0gSUdCX1JJTkdfRkxBR19SWF9DU1VNOworCQkJYWRhcHRlci0+cnhfcmluZ1tpXS0+ZmxhZ3MgfD0gSUdCX1JJTkdfRkxBR19SWF9DU1VNOwogCQllbHNlCi0JCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmZsYWdzICY9IH5JR0JfUklOR19GTEFHX1JYX0NTVU07CisJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLT5mbGFncyAmPSB+SUdCX1JJTkdfRkxBR19SWF9DU1VNOwogCX0KIAogCXJldHVybiAwOwpAQCAtNzcxLDkgKzc4OSw5IEBACiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkgewogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5jb3VudCA9IG5ld190eF9jb3VudDsKKwkJCWFkYXB0ZXItPnR4X3JpbmdbaV0tPmNvdW50ID0gbmV3X3R4X2NvdW50OwogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5jb3VudCA9IG5ld19yeF9jb3VudDsKKwkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0tPmNvdW50ID0gbmV3X3J4X2NvdW50OwogCQlhZGFwdGVyLT50eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50OwogCQlhZGFwdGVyLT5yeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50OwogCQlnb3RvIGNsZWFyX3Jlc2V0OwpAQCAtNzk3LDEwICs4MTUsMTAgQEAKIAkgKiB0byB0aGUgdHggYW5kIHJ4IHJpbmcgc3RydWN0cy4KIAkgKi8KIAlpZiAobmV3X3R4X2NvdW50ICE9IGFkYXB0ZXItPnR4X3JpbmdfY291bnQpIHsKLQkJbWVtY3B5KHRlbXBfcmluZywgYWRhcHRlci0+dHhfcmluZywKLQkJICAgICAgIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMgKiBzaXplb2Yoc3RydWN0IGlnYl9yaW5nKSk7Ci0KIAkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQkJbWVtY3B5KCZ0ZW1wX3JpbmdbaV0sIGFkYXB0ZXItPnR4X3JpbmdbaV0sCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZ2JfcmluZykpOworCiAJCQl0ZW1wX3JpbmdbaV0uY291bnQgPSBuZXdfdHhfY291bnQ7CiAJCQllcnIgPSBpZ2Jfc2V0dXBfdHhfcmVzb3VyY2VzKCZ0ZW1wX3JpbmdbaV0pOwogCQkJaWYgKGVycikgewpAQCAtODEyLDIwICs4MzAsMjEgQEAKIAkJCX0KIAkJfQogCi0JCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCQlpZ2JfZnJlZV90eF9yZXNvdXJjZXMoJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCQlpZ2JfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlci0+dHhfcmluZ1tpXSk7CiAKLQkJbWVtY3B5KGFkYXB0ZXItPnR4X3JpbmcsIHRlbXBfcmluZywKLQkJICAgICAgIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMgKiBzaXplb2Yoc3RydWN0IGlnYl9yaW5nKSk7CisJCQltZW1jcHkoYWRhcHRlci0+dHhfcmluZ1tpXSwgJnRlbXBfcmluZ1tpXSwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGlnYl9yaW5nKSk7CisJCX0KIAogCQlhZGFwdGVyLT50eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50OwogCX0KIAotCWlmIChuZXdfcnhfY291bnQgIT0gYWRhcHRlci0+cnhfcmluZy0+Y291bnQpIHsKLQkJbWVtY3B5KHRlbXBfcmluZywgYWRhcHRlci0+cnhfcmluZywKLQkJICAgICAgIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgKiBzaXplb2Yoc3RydWN0IGlnYl9yaW5nKSk7Ci0KKwlpZiAobmV3X3J4X2NvdW50ICE9IGFkYXB0ZXItPnJ4X3JpbmdfY291bnQpIHsKIAkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQkJbWVtY3B5KCZ0ZW1wX3JpbmdbaV0sIGFkYXB0ZXItPnJ4X3JpbmdbaV0sCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpZ2JfcmluZykpOworCiAJCQl0ZW1wX3JpbmdbaV0uY291bnQgPSBuZXdfcnhfY291bnQ7CiAJCQllcnIgPSBpZ2Jfc2V0dXBfcnhfcmVzb3VyY2VzKCZ0ZW1wX3JpbmdbaV0pOwogCQkJaWYgKGVycikgewpAQCAtODM4LDExICs4NTcsMTIgQEAKIAogCQl9CiAKLQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJCWlnYl9mcmVlX3J4X3Jlc291cmNlcygmYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJCWlnYl9mcmVlX3J4X3Jlc291cmNlcyhhZGFwdGVyLT5yeF9yaW5nW2ldKTsKIAotCQltZW1jcHkoYWRhcHRlci0+cnhfcmluZywgdGVtcF9yaW5nLAotCQkgICAgICAgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyAqIHNpemVvZihzdHJ1Y3QgaWdiX3JpbmcpKTsKKwkJCW1lbWNweShhZGFwdGVyLT5yeF9yaW5nW2ldLCAmdGVtcF9yaW5nW2ldLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaWdiX3JpbmcpKTsKKwkJfQogCiAJCWFkYXB0ZXItPnJ4X3JpbmdfY291bnQgPSBuZXdfcnhfY291bnQ7CiAJfQpAQCAtMTcwNCw2ICsxNzI0LDkgQEAKIAogCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAib2ZmbGluZSB0ZXN0aW5nIHN0YXJ0aW5nXG4iKTsKIAorCQkvKiBwb3dlciB1cCBsaW5rIGZvciBsaW5rIHRlc3QgKi8KKwkJaWdiX3Bvd2VyX3VwX2xpbmsoYWRhcHRlcik7CisKIAkJLyogTGluayB0ZXN0IHBlcmZvcm1lZCBiZWZvcmUgaGFyZHdhcmUgcmVzZXQgc28gYXV0b25lZyBkb2Vzbid0CiAJCSAqIGludGVyZmVyZSB3aXRoIHRlc3QgcmVzdWx0ICovCiAJCWlmIChpZ2JfbGlua190ZXN0KGFkYXB0ZXIsICZkYXRhWzRdKSkKQEAgLTE3MjcsNiArMTc1MCw4IEBACiAJCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogCiAJCWlnYl9yZXNldChhZGFwdGVyKTsKKwkJLyogcG93ZXIgdXAgbGluayBmb3IgbG9vcGJhY2sgdGVzdCAqLworCQlpZ2JfcG93ZXJfdXBfbGluayhhZGFwdGVyKTsKIAkJaWYgKGlnYl9sb29wYmFja190ZXN0KGFkYXB0ZXIsICZkYXRhWzNdKSkKIAkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CiAKQEAgLTE3NDUsOSArMTc3MCwxNCBAQAogCQkJZGV2X29wZW4obmV0ZGV2KTsKIAl9IGVsc2UgewogCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAib25saW5lIHRlc3Rpbmcgc3RhcnRpbmdcbiIpOwotCQkvKiBPbmxpbmUgdGVzdHMgKi8KLQkJaWYgKGlnYl9saW5rX3Rlc3QoYWRhcHRlciwgJmRhdGFbNF0pKQotCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKworCQkvKiBQSFkgaXMgcG93ZXJlZCBkb3duIHdoZW4gaW50ZXJmYWNlIGlzIGRvd24gKi8KKwkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKKwkJCWRhdGFbNF0gPSAwOworCQl9IGVsc2UgeworCQkJaWYgKGlnYl9saW5rX3Rlc3QoYWRhcHRlciwgJmRhdGFbNF0pKQorCQkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisJCX0KIAogCQkvKiBPbmxpbmUgdGVzdHMgYXJlbid0IHJ1bjsgcGFzcyBieSBkZWZhdWx0ICovCiAJCWRhdGFbMF0gPSAwOwpAQCAtMTgxMiw3ICsxODQyLDggQEAKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJd29sLT5zdXBwb3J0ZWQgPSBXQUtFX1VDQVNUIHwgV0FLRV9NQ0FTVCB8Ci0JCQkgV0FLRV9CQ0FTVCB8IFdBS0VfTUFHSUM7CisJICAgICAgICAgICAgICAgICBXQUtFX0JDQVNUIHwgV0FLRV9NQUdJQyB8CisJICAgICAgICAgICAgICAgICBXQUtFX1BIWTsKIAl3b2wtPndvbG9wdHMgPSAwOwogCiAJLyogdGhpcyBmdW5jdGlvbiB3aWxsIHNldCAtPnN1cHBvcnRlZCA9IDAgYW5kIHJldHVybiAxIGlmIHdvbCBpcyBub3QKQEAgLTE4MzUsMTUgKzE4NjYsMTUgQEAKIAkJd29sLT53b2xvcHRzIHw9IFdBS0VfQkNBU1Q7CiAJaWYgKGFkYXB0ZXItPndvbCAmIEUxMDAwX1dVRkNfTUFHKQogCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9NQUdJQzsKLQotCXJldHVybjsKKwlpZiAoYWRhcHRlci0+d29sICYgRTEwMDBfV1VGQ19MTktDKQorCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9QSFk7CiB9CiAKIHN0YXRpYyBpbnQgaWdiX3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQogewogCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQlpZiAod29sLT53b2xvcHRzICYgKFdBS0VfUEhZIHwgV0FLRV9BUlAgfCBXQUtFX01BR0lDU0VDVVJFKSkKKwlpZiAod29sLT53b2xvcHRzICYgKFdBS0VfQVJQIHwgV0FLRV9NQUdJQ1NFQ1VSRSkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlmIChpZ2Jfd29sX2V4Y2x1c2lvbihhZGFwdGVyLCB3b2wpIHx8CkBAIC0xODYxLDYgKzE4OTIsOCBAQAogCQlhZGFwdGVyLT53b2wgfD0gRTEwMDBfV1VGQ19CQzsKIAlpZiAod29sLT53b2xvcHRzICYgV0FLRV9NQUdJQykKIAkJYWRhcHRlci0+d29sIHw9IEUxMDAwX1dVRkNfTUFHOworCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX1BIWSkKKwkJYWRhcHRlci0+d29sIHw9IEUxMDAwX1dVRkNfTE5LQzsKIAlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJmFkYXB0ZXItPnBkZXYtPmRldiwgYWRhcHRlci0+d29sKTsKIAogCXJldHVybiAwOwpAQCAtMjAwNSwxMiArMjAzOCwxMiBAQAogCQkJc2l6ZW9mKHU2NCkpID8gKih1NjQgKilwIDogKih1MzIgKilwOwogCX0KIAlmb3IgKGogPSAwOyBqIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaisrKSB7Ci0JCXF1ZXVlX3N0YXQgPSAodTY0ICopJmFkYXB0ZXItPnR4X3Jpbmdbal0udHhfc3RhdHM7CisJCXF1ZXVlX3N0YXQgPSAodTY0ICopJmFkYXB0ZXItPnR4X3Jpbmdbal0tPnR4X3N0YXRzOwogCQlmb3IgKGsgPSAwOyBrIDwgSUdCX1RYX1FVRVVFX1NUQVRTX0xFTjsgaysrLCBpKyspCiAJCQlkYXRhW2ldID0gcXVldWVfc3RhdFtrXTsKIAl9CiAJZm9yIChqID0gMDsgaiA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGorKykgewotCQlxdWV1ZV9zdGF0ID0gKHU2NCAqKSZhZGFwdGVyLT5yeF9yaW5nW2pdLnJ4X3N0YXRzOworCQlxdWV1ZV9zdGF0ID0gKHU2NCAqKSZhZGFwdGVyLT5yeF9yaW5nW2pdLT5yeF9zdGF0czsKIAkJZm9yIChrID0gMDsgayA8IElHQl9SWF9RVUVVRV9TVEFUU19MRU47IGsrKywgaSsrKQogCQkJZGF0YVtpXSA9IHF1ZXVlX3N0YXRba107CiAJfQpAQCAtMjA3NCw3ICsyMTA3LDcgQEAKIAkuZ2V0X21zZ2xldmVsICAgICAgICAgICA9IGlnYl9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbCAgICAgICAgICAgPSBpZ2Jfc2V0X21zZ2xldmVsLAogCS5ud2F5X3Jlc2V0ICAgICAgICAgICAgID0gaWdiX253YXlfcmVzZXQsCi0JLmdldF9saW5rICAgICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF9saW5rLAorCS5nZXRfbGluayAgICAgICAgICAgICAgID0gaWdiX2dldF9saW5rLAogCS5nZXRfZWVwcm9tX2xlbiAgICAgICAgID0gaWdiX2dldF9lZXByb21fbGVuLAogCS5nZXRfZWVwcm9tICAgICAgICAgICAgID0gaWdiX2dldF9lZXByb20sCiAJLnNldF9lZXByb20gICAgICAgICAgICAgPSBpZ2Jfc2V0X2VlcHJvbSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lnYi9pZ2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKaW5kZXggYzg4MTM0Ny4uMGVkMjVmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvaWdiL2lnYl9tYWluLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAlbYm9hcmRfODI1NzVdID0gJmUxMDAwXzgyNTc1X2luZm8sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWdiX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShpZ2JfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTgwX0NPUFBFUiksIGJvYXJkXzgyNTc1IH0sCiAJeyBQQ0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTgwX0ZJQkVSKSwgYm9hcmRfODI1NzUgfSwKIAl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1ODBfU0VSREVTKSwgYm9hcmRfODI1NzUgfSwKQEAgLTEzMyw2ICsxMzMsMTIgQEAKIHN0YXRpYyB2b2lkIGlnYl92bW1fY29udHJvbChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKik7CiBzdGF0aWMgaW50IGlnYl9zZXRfdmZfbWFjKHN0cnVjdCBpZ2JfYWRhcHRlciAqLCBpbnQsIHVuc2lnbmVkIGNoYXIgKik7CiBzdGF0aWMgdm9pZCBpZ2JfcmVzdG9yZV92Zl9tdWx0aWNhc3RzKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IGlnYl9uZG9fc2V0X3ZmX21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmYsIHU4ICptYWMpOworc3RhdGljIGludCBpZ2JfbmRvX3NldF92Zl92bGFuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICAgICAgaW50IHZmLCB1MTYgdmxhbiwgdTggcW9zKTsKK3N0YXRpYyBpbnQgaWdiX25kb19zZXRfdmZfYncoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmLCBpbnQgdHhfcmF0ZSk7CitzdGF0aWMgaW50IGlnYl9uZG9fZ2V0X3ZmX2NvbmZpZyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgdmYsCisJCQkJIHN0cnVjdCBpZmxhX3ZmX2luZm8gKml2aSk7CiAKICNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgaWdiX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKiwgcG1fbWVzc2FnZV90KTsKQEAgLTMxMiwzMSArMzE4LDM1IEBACiAJCSAqLwogCQlpZiAoYWRhcHRlci0+dmZzX2FsbG9jYXRlZF9jb3VudCkgewogCQkJZm9yICg7IGkgPCBhZGFwdGVyLT5yc3NfcXVldWVzOyBpKyspCi0JCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gcmJhc2Vfb2Zmc2V0ICsKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRX0lEWF84MjU3NihpKTsKKwkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLT5yZWdfaWR4ID0gcmJhc2Vfb2Zmc2V0ICsKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUV9JRFhfODI1NzYoaSk7CiAJCQlmb3IgKDsgaiA8IGFkYXB0ZXItPnJzc19xdWV1ZXM7IGorKykKLQkJCQlhZGFwdGVyLT50eF9yaW5nW2pdLnJlZ19pZHggPSByYmFzZV9vZmZzZXQgKwotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFfSURYXzgyNTc2KGopOworCQkJCWFkYXB0ZXItPnR4X3Jpbmdbal0tPnJlZ19pZHggPSByYmFzZV9vZmZzZXQgKworCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRX0lEWF84MjU3NihqKTsKIAkJfQogCWNhc2UgZTEwMDBfODI1NzU6CiAJY2FzZSBlMTAwMF84MjU4MDoKIAlkZWZhdWx0OgogCQlmb3IgKDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeCA9IHJiYXNlX29mZnNldCArIGk7CisJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLT5yZWdfaWR4ID0gcmJhc2Vfb2Zmc2V0ICsgaTsKIAkJZm9yICg7IGogPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBqKyspCi0JCQlhZGFwdGVyLT50eF9yaW5nW2pdLnJlZ19pZHggPSByYmFzZV9vZmZzZXQgKyBqOworCQkJYWRhcHRlci0+dHhfcmluZ1tqXS0+cmVnX2lkeCA9IHJiYXNlX29mZnNldCArIGo7CiAJCWJyZWFrOwogCX0KIH0KIAogc3RhdGljIHZvaWQgaWdiX2ZyZWVfcXVldWVzKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKIHsKLQlrZnJlZShhZGFwdGVyLT50eF9yaW5nKTsKLQlrZnJlZShhZGFwdGVyLT5yeF9yaW5nKTsKKwlpbnQgaTsKIAotCWFkYXB0ZXItPnR4X3JpbmcgPSBOVUxMOwotCWFkYXB0ZXItPnJ4X3JpbmcgPSBOVUxMOwotCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQlrZnJlZShhZGFwdGVyLT50eF9yaW5nW2ldKTsKKwkJYWRhcHRlci0+dHhfcmluZ1tpXSA9IE5VTEw7CisJfQorCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJa2ZyZWUoYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCWFkYXB0ZXItPnJ4X3JpbmdbaV0gPSBOVUxMOworCX0KIAlhZGFwdGVyLT5udW1fcnhfcXVldWVzID0gMDsKIAlhZGFwdGVyLT5udW1fdHhfcXVldWVzID0gMDsKIH0KQEAgLTM1MCwyMCArMzYwLDEzIEBACiAgKiovCiBzdGF0aWMgaW50IGlnYl9hbGxvY19xdWV1ZXMoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQogeworCXN0cnVjdCBpZ2JfcmluZyAqcmluZzsKIAlpbnQgaTsKIAotCWFkYXB0ZXItPnR4X3JpbmcgPSBrY2FsbG9jKGFkYXB0ZXItPm51bV90eF9xdWV1ZXMsCi0JCQkJICAgc2l6ZW9mKHN0cnVjdCBpZ2JfcmluZyksIEdGUF9LRVJORUwpOwotCWlmICghYWRhcHRlci0+dHhfcmluZykKLQkJZ290byBlcnI7Ci0KLQlhZGFwdGVyLT5yeF9yaW5nID0ga2NhbGxvYyhhZGFwdGVyLT5udW1fcnhfcXVldWVzLAotCQkJCSAgIHNpemVvZihzdHJ1Y3QgaWdiX3JpbmcpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFkYXB0ZXItPnJ4X3JpbmcpCi0JCWdvdG8gZXJyOwotCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgewotCQlzdHJ1Y3QgaWdiX3JpbmcgKnJpbmcgPSAmKGFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQlyaW5nID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlnYl9yaW5nKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcmluZykKKwkJCWdvdG8gZXJyOwogCQlyaW5nLT5jb3VudCA9IGFkYXB0ZXItPnR4X3JpbmdfY291bnQ7CiAJCXJpbmctPnF1ZXVlX2luZGV4ID0gaTsKIAkJcmluZy0+cGRldiA9IGFkYXB0ZXItPnBkZXY7CkBAIC0zNzEsMTAgKzM3NCwxMyBAQAogCQkvKiBGb3IgODI1NzUsIGNvbnRleHQgaW5kZXggbXVzdCBiZSB1bmlxdWUgcGVyIHJpbmcuICovCiAJCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBlMTAwMF84MjU3NSkKIAkJCXJpbmctPmZsYWdzID0gSUdCX1JJTkdfRkxBR19UWF9DVFhfSURYOworCQlhZGFwdGVyLT50eF9yaW5nW2ldID0gcmluZzsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7Ci0JCXN0cnVjdCBpZ2JfcmluZyAqcmluZyA9ICYoYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCXJpbmcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaWdiX3JpbmcpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFyaW5nKQorCQkJZ290byBlcnI7CiAJCXJpbmctPmNvdW50ID0gYWRhcHRlci0+cnhfcmluZ19jb3VudDsKIAkJcmluZy0+cXVldWVfaW5kZXggPSBpOwogCQlyaW5nLT5wZGV2ID0gYWRhcHRlci0+cGRldjsKQEAgLTM4NCw2ICszOTAsNyBAQAogCQkvKiBzZXQgZmxhZyBpbmRpY2F0aW5nIHJpbmcgc3VwcG9ydHMgU0NUUCBjaGVja3N1bSBvZmZsb2FkICovCiAJCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA+PSBlMTAwMF84MjU3NikKIAkJCXJpbmctPmZsYWdzIHw9IElHQl9SSU5HX0ZMQUdfUlhfU0NUUF9DU1VNOworCQlhZGFwdGVyLT5yeF9yaW5nW2ldID0gcmluZzsKIAl9CiAKIAlpZ2JfY2FjaGVfcmluZ19yZWdpc3RlcihhZGFwdGVyKTsKQEAgLTQ5OCw2ICs1MDUsMTIgQEAKIAkJQlVHKCk7CiAJCWJyZWFrOwogCX0KKworCS8qIGFkZCBxX3ZlY3RvciBlaW1zIHZhbHVlIHRvIGdsb2JhbCBlaW1zX2VuYWJsZV9tYXNrICovCisJYWRhcHRlci0+ZWltc19lbmFibGVfbWFzayB8PSBxX3ZlY3Rvci0+ZWltc192YWx1ZTsKKworCS8qIGNvbmZpZ3VyZSBxX3ZlY3RvciB0byBzZXQgaXRyIG9uIGZpcnN0IGludGVycnVwdCAqLworCXFfdmVjdG9yLT5zZXRfaXRyID0gMTsKIH0KIAogLyoqCkBAIC01NTUsMTEgKzU2OCw4IEBACiAKIAlhZGFwdGVyLT5laW1zX2VuYWJsZV9tYXNrIHw9IGFkYXB0ZXItPmVpbXNfb3RoZXI7CiAKLQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3FfdmVjdG9yczsgaSsrKSB7Ci0JCXN0cnVjdCBpZ2JfcV92ZWN0b3IgKnFfdmVjdG9yID0gYWRhcHRlci0+cV92ZWN0b3JbaV07Ci0JCWlnYl9hc3NpZ25fdmVjdG9yKHFfdmVjdG9yLCB2ZWN0b3IrKyk7Ci0JCWFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2sgfD0gcV92ZWN0b3ItPmVpbXNfdmFsdWU7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcV92ZWN0b3JzOyBpKyspCisJCWlnYl9hc3NpZ25fdmVjdG9yKGFkYXB0ZXItPnFfdmVjdG9yW2ldLCB2ZWN0b3IrKyk7CiAKIAl3cmZsKCk7CiB9CkBAIC02MzksNiArNjQ5LDggQEAKIAlmb3IgKHZfaWR4ID0gMDsgdl9pZHggPCBhZGFwdGVyLT5udW1fcV92ZWN0b3JzOyB2X2lkeCsrKSB7CiAJCXN0cnVjdCBpZ2JfcV92ZWN0b3IgKnFfdmVjdG9yID0gYWRhcHRlci0+cV92ZWN0b3Jbdl9pZHhdOwogCQlhZGFwdGVyLT5xX3ZlY3Rvclt2X2lkeF0gPSBOVUxMOworCQlpZiAoIXFfdmVjdG9yKQorCQkJY29udGludWU7CiAJCW5ldGlmX25hcGlfZGVsKCZxX3ZlY3Rvci0+bmFwaSk7CiAJCWtmcmVlKHFfdmVjdG9yKTsKIAl9CkBAIC02NzYsNyArNjg4LDcgQEAKIAkvKiBzdGFydCB3aXRoIG9uZSB2ZWN0b3IgZm9yIGV2ZXJ5IHJ4IHF1ZXVlICovCiAJbnVtdmVjcyA9IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7CiAKLQkvKiBpZiB0eCBoYW5kbGVyIGlzIHNlcGVyYXRlIGFkZCAxIGZvciBldmVyeSB0eCBxdWV1ZSAqLworCS8qIGlmIHR4IGhhbmRsZXIgaXMgc2VwYXJhdGUgYWRkIDEgZm9yIGV2ZXJ5IHR4IHF1ZXVlICovCiAJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19RVUVVRV9QQUlSUykpCiAJCW51bXZlY3MgKz0gYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsKIApAQCAtNzUwLDMzICs3NjIsMjQgQEAKIAkJaWYgKCFxX3ZlY3RvcikKIAkJCWdvdG8gZXJyX291dDsKIAkJcV92ZWN0b3ItPmFkYXB0ZXIgPSBhZGFwdGVyOwotCQlxX3ZlY3Rvci0+aXRyX3NoaWZ0ID0gKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NSkgPyAxNiA6IDA7CiAJCXFfdmVjdG9yLT5pdHJfcmVnaXN0ZXIgPSBody0+aHdfYWRkciArIEUxMDAwX0VJVFIoMCk7CiAJCXFfdmVjdG9yLT5pdHJfdmFsID0gSUdCX1NUQVJUX0lUUjsKLQkJcV92ZWN0b3ItPnNldF9pdHIgPSAxOwogCQluZXRpZl9uYXBpX2FkZChhZGFwdGVyLT5uZXRkZXYsICZxX3ZlY3Rvci0+bmFwaSwgaWdiX3BvbGwsIDY0KTsKIAkJYWRhcHRlci0+cV92ZWN0b3Jbdl9pZHhdID0gcV92ZWN0b3I7CiAJfQogCXJldHVybiAwOwogCiBlcnJfb3V0OgotCXdoaWxlICh2X2lkeCkgewotCQl2X2lkeC0tOwotCQlxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yW3ZfaWR4XTsKLQkJbmV0aWZfbmFwaV9kZWwoJnFfdmVjdG9yLT5uYXBpKTsKLQkJa2ZyZWUocV92ZWN0b3IpOwotCQlhZGFwdGVyLT5xX3ZlY3Rvclt2X2lkeF0gPSBOVUxMOwotCX0KKwlpZ2JfZnJlZV9xX3ZlY3RvcnMoYWRhcHRlcik7CiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyB2b2lkIGlnYl9tYXBfcnhfcmluZ190b192ZWN0b3Ioc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmluZ19pZHgsIGludCB2X2lkeCkKIHsKLQlzdHJ1Y3QgaWdiX3FfdmVjdG9yICpxX3ZlY3RvcjsKKwlzdHJ1Y3QgaWdiX3FfdmVjdG9yICpxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yW3ZfaWR4XTsKIAotCXFfdmVjdG9yID0gYWRhcHRlci0+cV92ZWN0b3Jbdl9pZHhdOwotCXFfdmVjdG9yLT5yeF9yaW5nID0gJmFkYXB0ZXItPnJ4X3JpbmdbcmluZ19pZHhdOworCXFfdmVjdG9yLT5yeF9yaW5nID0gYWRhcHRlci0+cnhfcmluZ1tyaW5nX2lkeF07CiAJcV92ZWN0b3ItPnJ4X3JpbmctPnFfdmVjdG9yID0gcV92ZWN0b3I7CiAJcV92ZWN0b3ItPml0cl92YWwgPSBhZGFwdGVyLT5yeF9pdHJfc2V0dGluZzsKIAlpZiAocV92ZWN0b3ItPml0cl92YWwgJiYgcV92ZWN0b3ItPml0cl92YWwgPD0gMykKQEAgLTc4NiwxMCArNzg5LDkgQEAKIHN0YXRpYyB2b2lkIGlnYl9tYXBfdHhfcmluZ190b192ZWN0b3Ioc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmluZ19pZHgsIGludCB2X2lkeCkKIHsKLQlzdHJ1Y3QgaWdiX3FfdmVjdG9yICpxX3ZlY3RvcjsKKwlzdHJ1Y3QgaWdiX3FfdmVjdG9yICpxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yW3ZfaWR4XTsKIAotCXFfdmVjdG9yID0gYWRhcHRlci0+cV92ZWN0b3Jbdl9pZHhdOwotCXFfdmVjdG9yLT50eF9yaW5nID0gJmFkYXB0ZXItPnR4X3JpbmdbcmluZ19pZHhdOworCXFfdmVjdG9yLT50eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZ1tyaW5nX2lkeF07CiAJcV92ZWN0b3ItPnR4X3JpbmctPnFfdmVjdG9yID0gcV92ZWN0b3I7CiAJcV92ZWN0b3ItPml0cl92YWwgPSBhZGFwdGVyLT50eF9pdHJfc2V0dGluZzsKIAlpZiAocV92ZWN0b3ItPml0cl92YWwgJiYgcV92ZWN0b3ItPml0cl92YWwgPD0gMykKQEAgLTEwOTksNyArMTEwMSw3IEBACiAJICogYXQgbGVhc3QgMSBkZXNjcmlwdG9yIHVudXNlZCB0byBtYWtlIHN1cmUKIAkgKiBuZXh0X3RvX3VzZSAhPSBuZXh0X3RvX2NsZWFuICovCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewotCQlzdHJ1Y3QgaWdiX3JpbmcgKnJpbmcgPSAmYWRhcHRlci0+cnhfcmluZ1tpXTsKKwkJc3RydWN0IGlnYl9yaW5nICpyaW5nID0gYWRhcHRlci0+cnhfcmluZ1tpXTsKIAkJaWdiX2FsbG9jX3J4X2J1ZmZlcnNfYWR2KHJpbmcsIGlnYl9kZXNjX3VudXNlZChyaW5nKSk7CiAJfQogCkBAIC0xMTA3LDYgKzExMDksMjkgQEAKIAlhZGFwdGVyLT50eF9xdWV1ZV9sZW4gPSBuZXRkZXYtPnR4X3F1ZXVlX2xlbjsKIH0KIAorLyoqCisgKiBpZ2JfcG93ZXJfdXBfbGluayAtIFBvd2VyIHVwIHRoZSBwaHkvc2VyZGVzIGxpbmsKKyAqIEBhZGFwdGVyOiBhZGRyZXNzIG9mIGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiovCit2b2lkIGlnYl9wb3dlcl91cF9saW5rKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+aHcucGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpCisJCWlnYl9wb3dlcl91cF9waHlfY29wcGVyKCZhZGFwdGVyLT5odyk7CisJZWxzZQorCQlpZ2JfcG93ZXJfdXBfc2VyZGVzX2xpbmtfODI1NzUoJmFkYXB0ZXItPmh3KTsKK30KKworLyoqCisgKiBpZ2JfcG93ZXJfZG93bl9saW5rIC0gUG93ZXIgZG93biB0aGUgcGh5L3NlcmRlcyBsaW5rCisgKiBAYWRhcHRlcjogYWRkcmVzcyBvZiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICovCitzdGF0aWMgdm9pZCBpZ2JfcG93ZXJfZG93bl9saW5rKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+aHcucGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpCisJCWlnYl9wb3dlcl9kb3duX3BoeV9jb3BwZXJfODI1NzUoJmFkYXB0ZXItPmh3KTsKKwllbHNlCisJCWlnYl9zaHV0ZG93bl9zZXJkZXNfbGlua184MjU3NSgmYWRhcHRlci0+aHcpOworfQogCiAvKioKICAqIGlnYl91cCAtIE9wZW4gdGhlIGludGVyZmFjZSBhbmQgcHJlcGFyZSBpdCB0byBoYW5kbGUgdHJhZmZpYwpAQCAtMTMyOCwxMiArMTM1MywxNCBAQAogCQl3cjMyKEUxMDAwX1BDSUVNSVNDLAogCQkgICAgICAgICAgICAgICAgcmVnICYgfkUxMDAwX1BDSUVNSVNDX0xYX0RFQ0lTSU9OKTsKIAl9CisJaWYgKCFuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpCisJCWlnYl9wb3dlcl9kb3duX2xpbmsoYWRhcHRlcik7CisKIAlpZ2JfdXBkYXRlX21uZ192bGFuKGFkYXB0ZXIpOwogCiAJLyogRW5hYmxlIGgvdyB0byByZWNvZ25pemUgYW4gODAyLjFRIFZMQU4gRXRoZXJuZXQgcGFja2V0ICovCiAJd3IzMihFMTAwMF9WRVQsIEVUSEVSTkVUX0lFRUVfVkxBTl9UWVBFKTsKIAotCWlnYl9yZXNldF9hZGFwdGl2ZShodyk7CiAJaWdiX2dldF9waHlfaW5mbyhodyk7CiB9CiAKQEAgLTEzNTIsNiArMTM3OSwxMCBAQAogCS5uZG9fdmxhbl9yeF9yZWdpc3Rlcgk9IGlnYl92bGFuX3J4X3JlZ2lzdGVyLAogCS5uZG9fdmxhbl9yeF9hZGRfdmlkCT0gaWdiX3ZsYW5fcnhfYWRkX3ZpZCwKIAkubmRvX3ZsYW5fcnhfa2lsbF92aWQJPSBpZ2Jfdmxhbl9yeF9raWxsX3ZpZCwKKwkubmRvX3NldF92Zl9tYWMJCT0gaWdiX25kb19zZXRfdmZfbWFjLAorCS5uZG9fc2V0X3ZmX3ZsYW4JPSBpZ2JfbmRvX3NldF92Zl92bGFuLAorCS5uZG9fc2V0X3ZmX3R4X3JhdGUJPSBpZ2JfbmRvX3NldF92Zl9idywKKwkubmRvX2dldF92Zl9jb25maWcJPSBpZ2JfbmRvX2dldF92Zl9jb25maWcsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlcgk9IGlnYl9uZXRwb2xsLAogI2VuZGlmCkBAIC0xNDcyLDcgKzE1MDMsNiBAQAogCWlnYl9nZXRfYnVzX2luZm9fcGNpZShodyk7CiAKIAlody0+cGh5LmF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSA9IGZhbHNlOwotCWh3LT5tYWMuYWRhcHRpdmVfaWZzID0gdHJ1ZTsKIAogCS8qIENvcHBlciBvcHRpb25zICovCiAJaWYgKGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikgewpAQCAtMTcwNiw5ICsxNzM2LDYgQEAKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAKLQlpZiAoIWlnYl9jaGVja19yZXNldF9ibG9jayhodykpCi0JCWlnYl9yZXNldF9waHkoaHcpOwotCiAJaWdiX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CiAKICNpZmRlZiBDT05GSUdfUENJX0lPVgpAQCAtMTk4NCw3ICsyMDExLDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIGVycl9zZXR1cF9yeDsKIAotCS8qIGUxMDAwX3Bvd2VyX3VwX3BoeShhZGFwdGVyKTsgKi8KKwlpZ2JfcG93ZXJfdXBfbGluayhhZGFwdGVyKTsKIAogCS8qIGJlZm9yZSB3ZSBhbGxvY2F0ZSBhbiBpbnRlcnJ1cHQsIHdlIG11c3QgYmUgcmVhZHkgdG8gaGFuZGxlIGl0LgogCSAqIFNldHRpbmcgREVCVUdfU0hJUlEgaW4gdGhlIGtlcm5lbCBtYWtlcyBpdCBmaXJlIGFuIGludGVycnVwdApAQCAtMjAyNiw3ICsyMDUzLDcgQEAKIAogZXJyX3JlcV9pcnE6CiAJaWdiX3JlbGVhc2VfaHdfY29udHJvbChhZGFwdGVyKTsKLQkvKiBlMTAwMF9wb3dlcl9kb3duX3BoeShhZGFwdGVyKTsgKi8KKwlpZ2JfcG93ZXJfZG93bl9saW5rKGFkYXB0ZXIpOwogCWlnYl9mcmVlX2FsbF9yeF9yZXNvdXJjZXMoYWRhcHRlcik7CiBlcnJfc2V0dXBfcng6CiAJaWdiX2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhhZGFwdGVyKTsKQEAgLTIxMTQsMTkgKzIxNDEsMTkgQEAKIAlpbnQgaSwgZXJyID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJZXJyID0gaWdiX3NldHVwX3R4X3Jlc291cmNlcygmYWRhcHRlci0+dHhfcmluZ1tpXSk7CisJCWVyciA9IGlnYl9zZXR1cF90eF9yZXNvdXJjZXMoYWRhcHRlci0+dHhfcmluZ1tpXSk7CiAJCWlmIChlcnIpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwKIAkJCQkiQWxsb2NhdGlvbiBmb3IgVHggUXVldWUgJXUgZmFpbGVkXG4iLCBpKTsKIAkJCWZvciAoaS0tOyBpID49IDA7IGktLSkKLQkJCQlpZ2JfZnJlZV90eF9yZXNvdXJjZXMoJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQkJCWlnYl9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLT50eF9yaW5nW2ldKTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IElHQl9BQlNfTUFYX1RYX1FVRVVFUzsgaSsrKSB7CiAJCWludCByX2lkeCA9IGkgJSBhZGFwdGVyLT5udW1fdHhfcXVldWVzOwotCQlhZGFwdGVyLT5tdWx0aV90eF90YWJsZVtpXSA9ICZhZGFwdGVyLT50eF9yaW5nW3JfaWR4XTsKKwkJYWRhcHRlci0+bXVsdGlfdHhfdGFibGVbaV0gPSBhZGFwdGVyLT50eF9yaW5nW3JfaWR4XTsKIAl9CiAJcmV0dXJuIGVycjsKIH0KQEAgLTIyMDksNyArMjIzNiw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQlpZ2JfY29uZmlndXJlX3R4X3JpbmcoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQlpZ2JfY29uZmlndXJlX3R4X3JpbmcoYWRhcHRlciwgYWRhcHRlci0+dHhfcmluZ1tpXSk7CiB9CiAKIC8qKgpAQCAtMjI2NywxMiArMjI5NCwxMiBAQAogCWludCBpLCBlcnIgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewotCQllcnIgPSBpZ2Jfc2V0dXBfcnhfcmVzb3VyY2VzKCZhZGFwdGVyLT5yeF9yaW5nW2ldKTsKKwkJZXJyID0gaWdiX3NldHVwX3J4X3Jlc291cmNlcyhhZGFwdGVyLT5yeF9yaW5nW2ldKTsKIAkJaWYgKGVycikgewogCQkJZGV2X2VycigmcGRldi0+ZGV2LAogCQkJCSJBbGxvY2F0aW9uIGZvciBSeCBRdWV1ZSAldSBmYWlsZWRcbiIsIGkpOwogCQkJZm9yIChpLS07IGkgPj0gMDsgaS0tKQotCQkJCWlnYl9mcmVlX3J4X3Jlc291cmNlcygmYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCQkJaWdiX2ZyZWVfcnhfcmVzb3VyY2VzKGFkYXB0ZXItPnJ4X3JpbmdbaV0pOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0yNDc5LDcgKzI1MDYsOCBAQAogCXdyMzIoRTEwMDBfUkxQTUwsIG1heF9mcmFtZV9zaXplKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGlnYl9zZXRfdm1vbHIoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCBpbnQgdmZuKQorc3RhdGljIGlubGluZSB2b2lkIGlnYl9zZXRfdm1vbHIoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLAorCQkJCSBpbnQgdmZuLCBib29sIGF1cGUpCiB7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAl1MzIgdm1vbHI7CkBAIC0yNDkyLDggKzI1MjAsMTEgQEAKIAkJcmV0dXJuOwogCiAJdm1vbHIgPSByZDMyKEUxMDAwX1ZNT0xSKHZmbikpOwotCXZtb2xyIHw9IEUxMDAwX1ZNT0xSX0FVUEUgfCAgICAgICAgLyogQWNjZXB0IHVudGFnZ2VkIHBhY2tldHMgKi8KLQkgICAgICAgICBFMTAwMF9WTU9MUl9TVFJWTEFOOyAgICAgIC8qIFN0cmlwIHZsYW4gdGFncyAqLworCXZtb2xyIHw9IEUxMDAwX1ZNT0xSX1NUUlZMQU47ICAgICAgLyogU3RyaXAgdmxhbiB0YWdzICovCisJaWYgKGF1cGUpCisJCXZtb2xyIHw9IEUxMDAwX1ZNT0xSX0FVUEU7ICAgICAgICAvKiBBY2NlcHQgdW50YWdnZWQgcGFja2V0cyAqLworCWVsc2UKKwkJdm1vbHIgJj0gfihFMTAwMF9WTU9MUl9BVVBFKTsgLyogVGFnZ2VkIHBhY2tldHMgT05MWSAqLwogCiAJLyogY2xlYXIgYWxsIGJpdHMgdGhhdCBtaWdodCBub3QgYmUgc2V0ICovCiAJdm1vbHIgJj0gfihFMTAwMF9WTU9MUl9CQU0gfCBFMTAwMF9WTU9MUl9SU1NFKTsKQEAgLTI1NjAsMTEgKzI1OTEsMTQgQEAKIAkJICAgICAgICAgRTEwMDBfU1JSQ1RMX0JTSVpFUEtUX1NISUZUOwogCQlzcnJjdGwgfD0gRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUY7CiAJfQorCS8qIE9ubHkgc2V0IERyb3AgRW5hYmxlIGlmIHdlIGFyZSBzdXBwb3J0aW5nIG11bHRpcGxlIHF1ZXVlcyAqLworCWlmIChhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50IHx8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPiAxKQorCQlzcnJjdGwgfD0gRTEwMDBfU1JSQ1RMX0RST1BfRU47CiAKIAl3cjMyKEUxMDAwX1NSUkNUTChyZWdfaWR4KSwgc3JyY3RsKTsKIAogCS8qIHNldCBmaWx0ZXJpbmcgZm9yIFZNRFEgcG9vbHMgKi8KLQlpZ2Jfc2V0X3Ztb2xyKGFkYXB0ZXIsIHJlZ19pZHggJiAweDcpOworCWlnYl9zZXRfdm1vbHIoYWRhcHRlciwgcmVnX2lkeCAmIDB4NywgdHJ1ZSk7CiAKIAkvKiBlbmFibGUgcmVjZWl2ZSBkZXNjcmlwdG9yIGZldGNoaW5nICovCiAJcnhkY3RsID0gcmQzMihFMTAwMF9SWERDVEwocmVnX2lkeCkpOwpAQCAtMjU5Niw3ICsyNjMwLDcgQEAKIAkvKiBTZXR1cCB0aGUgSFcgUnggSGVhZCBhbmQgVGFpbCBEZXNjcmlwdG9yIFBvaW50ZXJzIGFuZAogCSAqIHRoZSBCYXNlIGFuZCBMZW5ndGggb2YgdGhlIFJ4IERlc2NyaXB0b3IgUmluZyAqLwogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCWlnYl9jb25maWd1cmVfcnhfcmluZyhhZGFwdGVyLCAmYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCWlnYl9jb25maWd1cmVfcnhfcmluZyhhZGFwdGVyLCBhZGFwdGVyLT5yeF9yaW5nW2ldKTsKIH0KIAogLyoqCkBAIC0yNjMzLDcgKzI2NjcsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKLQkJaWdiX2ZyZWVfdHhfcmVzb3VyY2VzKCZhZGFwdGVyLT50eF9yaW5nW2ldKTsKKwkJaWdiX2ZyZWVfdHhfcmVzb3VyY2VzKGFkYXB0ZXItPnR4X3JpbmdbaV0pOwogfQogCiB2b2lkIGlnYl91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcsCkBAIC0yNzAwLDcgKzI3MzQsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKLQkJaWdiX2NsZWFuX3R4X3JpbmcoJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQlpZ2JfY2xlYW5fdHhfcmluZyhhZGFwdGVyLT50eF9yaW5nW2ldKTsKIH0KIAogLyoqCkBAIC0yNzM3LDcgKzI3NzEsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJaWdiX2ZyZWVfcnhfcmVzb3VyY2VzKCZhZGFwdGVyLT5yeF9yaW5nW2ldKTsKKwkJaWdiX2ZyZWVfcnhfcmVzb3VyY2VzKGFkYXB0ZXItPnJ4X3JpbmdbaV0pOwogfQogCiAvKioKQEAgLTI4MDEsNyArMjgzNSw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQlpZ2JfY2xlYW5fcnhfcmluZygmYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCWlnYl9jbGVhbl9yeF9yaW5nKGFkYXB0ZXItPnJ4X3JpbmdbaV0pOwogfQogCiAvKioKQEAgLTI4NDMsMzggKzI4NzcsMzAgQEAKIHsKIAlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7Ci0Jc3RydWN0IGRldl9tY19saXN0ICptY19wdHIgPSBuZXRkZXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICptY19wdHI7CiAJdTggICptdGFfbGlzdDsKLQl1MzIgdm1vbHIgPSAwOwogCWludCBpOwogCi0JaWYgKCFuZXRkZXYtPm1jX2NvdW50KSB7CisJaWYgKG5ldGRldl9tY19lbXB0eShuZXRkZXYpKSB7CiAJCS8qIG5vdGhpbmcgdG8gcHJvZ3JhbSwgc28gY2xlYXIgbWMgbGlzdCAqLwogCQlpZ2JfdXBkYXRlX21jX2FkZHJfbGlzdChodywgTlVMTCwgMCk7CiAJCWlnYl9yZXN0b3JlX3ZmX211bHRpY2FzdHMoYWRhcHRlcik7CiAJCXJldHVybiAwOwogCX0KIAotCW10YV9saXN0ID0ga3phbGxvYyhuZXRkZXYtPm1jX2NvdW50ICogNiwgR0ZQX0FUT01JQyk7CisJbXRhX2xpc3QgPSBremFsbG9jKG5ldGRldl9tY19jb3VudChuZXRkZXYpICogNiwgR0ZQX0FUT01JQyk7CiAJaWYgKCFtdGFfbGlzdCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKiBzZXQgdm1vbHIgcmVjZWl2ZSBvdmVyZmxvdyBtdWx0aWNhc3QgYml0ICovCi0Jdm1vbHIgfD0gRTEwMDBfVk1PTFJfUk9NUEU7Ci0KIAkvKiBUaGUgc2hhcmVkIGZ1bmN0aW9uIGV4cGVjdHMgYSBwYWNrZWQgYXJyYXkgb2Ygb25seSBhZGRyZXNzZXMuICovCi0JbWNfcHRyID0gbmV0ZGV2LT5tY19saXN0OworCWkgPSAwOworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jX3B0ciwgbmV0ZGV2KQorCQltZW1jcHkobXRhX2xpc3QgKyAoaSsrICogRVRIX0FMRU4pLCBtY19wdHItPmRtaV9hZGRyLCBFVEhfQUxFTik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbmV0ZGV2LT5tY19jb3VudDsgaSsrKSB7Ci0JCWlmICghbWNfcHRyKQotCQkJYnJlYWs7Ci0JCW1lbWNweShtdGFfbGlzdCArIChpKkVUSF9BTEVOKSwgbWNfcHRyLT5kbWlfYWRkciwgRVRIX0FMRU4pOwotCQltY19wdHIgPSBtY19wdHItPm5leHQ7Ci0JfQogCWlnYl91cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBtdGFfbGlzdCwgaSk7CiAJa2ZyZWUobXRhX2xpc3QpOwogCi0JcmV0dXJuIG5ldGRldi0+bWNfY291bnQ7CisJcmV0dXJuIG5ldGRldl9tY19jb3VudChuZXRkZXYpOwogfQogCiAvKioKQEAgLTI4OTUsMTIgKzI5MjEsMTMgQEAKIAlpbnQgY291bnQgPSAwOwogCiAJLyogcmV0dXJuIEVOT01FTSBpbmRpY2F0aW5nIGluc3VmZmljaWVudCBtZW1vcnkgZm9yIGFkZHJlc3NlcyAqLwotCWlmIChuZXRkZXYtPnVjLmNvdW50ID4gcmFyX2VudHJpZXMpCisJaWYgKG5ldGRldl91Y19jb3VudChuZXRkZXYpID4gcmFyX2VudHJpZXMpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKG5ldGRldi0+dWMuY291bnQgJiYgcmFyX2VudHJpZXMpIHsKKwlpZiAoIW5ldGRldl91Y19lbXB0eShuZXRkZXYpICYmIHJhcl9lbnRyaWVzKSB7CiAJCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoaGEsICZuZXRkZXYtPnVjLmxpc3QsIGxpc3QpIHsKKworCQluZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgbmV0ZGV2KSB7CiAJCQlpZiAoIXJhcl9lbnRyaWVzKQogCQkJCWJyZWFrOwogCQkJaWdiX3Jhcl9zZXRfcXNlbChhZGFwdGVyLCBoYS0+YWRkciwKQEAgLTMwMDQsNyArMzAzMSw3IEBACiAgKiBpZ2JfaGFzX2xpbmsgLSBjaGVjayBzaGFyZWQgY29kZSBmb3IgbGluayBhbmQgZGV0ZXJtaW5lIHVwL2Rvd24KICAqIEBhZGFwdGVyOiBwb2ludGVyIHRvIGRyaXZlciBwcml2YXRlIGluZm8KICAqKi8KLXN0YXRpYyBib29sIGlnYl9oYXNfbGluayhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCitib29sIGlnYl9oYXNfbGluayhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAlib29sIGxpbmtfYWN0aXZlID0gZmFsc2U7CkBAIC0zMTIxLDEwICszMTQ4LDkgQEAKIAl9CiAKIAlpZ2JfdXBkYXRlX3N0YXRzKGFkYXB0ZXIpOwotCWlnYl91cGRhdGVfYWRhcHRpdmUoaHcpOwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgewotCQlzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcgPSAmYWRhcHRlci0+dHhfcmluZ1tpXTsKKwkJc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZ1tpXTsKIAkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKIAkJCS8qIFdlJ3ZlIGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLAogCQkJICogYnV0IHdlJ3ZlIGdvdCBxdWV1ZWQgVHggd29yayB0aGF0J3MgbmV2ZXIgZ29pbmcKQEAgLTMyMjUsNiArMzI1MSwxMCBAQAogCWVsc2UKIAkJbmV3X3ZhbCA9IGF2Z193aXJlX3NpemUgLyAyOwogCisJLyogd2hlbiBpbiBpdHIgbW9kZSAzIGRvIG5vdCBleGNlZWQgMjBLIGludHMvc2VjICovCisJaWYgKGFkYXB0ZXItPnJ4X2l0cl9zZXR0aW5nID09IDMgJiYgbmV3X3ZhbCA8IDE5NikKKwkJbmV3X3ZhbCA9IDE5NjsKKwogc2V0X2l0cl92YWw6CiAJaWYgKG5ld192YWwgIT0gcV92ZWN0b3ItPml0cl92YWwpIHsKIAkJcV92ZWN0b3ItPml0cl92YWwgPSBuZXdfdmFsOwpAQCAtMzMyMCwxMyArMzM1MCwxMyBAQAogCiAJYWRhcHRlci0+cnhfaXRyID0gaWdiX3VwZGF0ZV9pdHIoYWRhcHRlciwKIAkJCQkgICAgYWRhcHRlci0+cnhfaXRyLAotCQkJCSAgICBhZGFwdGVyLT5yeF9yaW5nLT50b3RhbF9wYWNrZXRzLAotCQkJCSAgICBhZGFwdGVyLT5yeF9yaW5nLT50b3RhbF9ieXRlcyk7CisJCQkJICAgIHFfdmVjdG9yLT5yeF9yaW5nLT50b3RhbF9wYWNrZXRzLAorCQkJCSAgICBxX3ZlY3Rvci0+cnhfcmluZy0+dG90YWxfYnl0ZXMpOwogCiAJYWRhcHRlci0+dHhfaXRyID0gaWdiX3VwZGF0ZV9pdHIoYWRhcHRlciwKIAkJCQkgICAgYWRhcHRlci0+dHhfaXRyLAotCQkJCSAgICBhZGFwdGVyLT50eF9yaW5nLT50b3RhbF9wYWNrZXRzLAotCQkJCSAgICBhZGFwdGVyLT50eF9yaW5nLT50b3RhbF9ieXRlcyk7CisJCQkJICAgIHFfdmVjdG9yLT50eF9yaW5nLT50b3RhbF9wYWNrZXRzLAorCQkJCSAgICBxX3ZlY3Rvci0+dHhfcmluZy0+dG90YWxfYnl0ZXMpOwogCWN1cnJlbnRfaXRyID0gbWF4KGFkYXB0ZXItPnJ4X2l0ciwgYWRhcHRlci0+dHhfaXRyKTsKIAogCS8qIGNvbnNlcnZhdGl2ZSBtb2RlIChpdHIgMykgZWxpbWluYXRlcyB0aGUgbG93ZXN0X2xhdGVuY3kgc2V0dGluZyAqLwpAQCAtMzM0OSwxMCArMzM3OSwxMCBAQAogCX0KIAogc2V0X2l0cl9ub3c6Ci0JYWRhcHRlci0+cnhfcmluZy0+dG90YWxfYnl0ZXMgPSAwOwotCWFkYXB0ZXItPnJ4X3JpbmctPnRvdGFsX3BhY2tldHMgPSAwOwotCWFkYXB0ZXItPnR4X3JpbmctPnRvdGFsX2J5dGVzID0gMDsKLQlhZGFwdGVyLT50eF9yaW5nLT50b3RhbF9wYWNrZXRzID0gMDsKKwlxX3ZlY3Rvci0+cnhfcmluZy0+dG90YWxfYnl0ZXMgPSAwOworCXFfdmVjdG9yLT5yeF9yaW5nLT50b3RhbF9wYWNrZXRzID0gMDsKKwlxX3ZlY3Rvci0+dHhfcmluZy0+dG90YWxfYnl0ZXMgPSAwOworCXFfdmVjdG9yLT50eF9yaW5nLT50b3RhbF9wYWNrZXRzID0gMDsKIAogCWlmIChuZXdfaXRyICE9IHFfdmVjdG9yLT5pdHJfdmFsKSB7CiAJCS8qIHRoaXMgYXR0ZW1wdHMgdG8gYmlhcyB0aGUgaW50ZXJydXB0IHJhdGUgdG93YXJkcyBCdWxrCkBAIC0zMzkyLDggKzM0MjIsOCBAQAogCWludCBlcnI7CiAJc3RydWN0IGlnYl9idWZmZXIgKmJ1ZmZlcl9pbmZvOwogCXUzMiBpbmZvID0gMCwgdHVfY21kID0gMDsKLQl1MzIgbXNzX2w0bGVuX2lkeCwgbDRsZW47Ci0JKmhkcl9sZW4gPSAwOworCXUzMiBtc3NfbDRsZW5faWR4OworCXU4IGw0bGVuOwogCiAJaWYgKHNrYl9oZWFkZXJfY2xvbmVkKHNrYikpIHsKIAkJZXJyID0gcHNrYl9leHBhbmRfaGVhZChza2IsIDAsIDAsIEdGUF9BVE9NSUMpOwpAQCAtMzU5OSw2ICszNjI5LDcgQEAKIAl9CiAKIAl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5za2IgPSBza2I7CisJdHhfcmluZy0+YnVmZmVyX2luZm9baV0uZ3NvX3NlZ3MgPSBza2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzID86IDE7CiAJdHhfcmluZy0+YnVmZmVyX2luZm9bZmlyc3RdLm5leHRfdG9fd2F0Y2ggPSBpOwogCiAJcmV0dXJuICsrY291bnQ7CkBAIC0zNjEyLDE0ICszNjQzLDEyIEBACiAJYnVmZmVyX2luZm8tPmxlbmd0aCA9IDA7CiAJYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSAwOwogCWJ1ZmZlcl9pbmZvLT5tYXBwZWRfYXNfcGFnZSA9IGZhbHNlOwotCWNvdW50LS07CiAKIAkvKiBjbGVhciB0aW1lc3RhbXAgYW5kIGRtYSBtYXBwaW5ncyBmb3IgcmVtYWluaW5nIHBvcnRpb24gb2YgcGFja2V0ICovCi0Jd2hpbGUgKGNvdW50ID49IDApIHsKLQkJY291bnQtLTsKKwl3aGlsZSAoY291bnQtLSkgeworCQlpZiAoaSA9PSAwKQorCQkJaSA9IHR4X3JpbmctPmNvdW50OwogCQlpLS07Ci0JCWlmIChpIDwgMCkKLQkJCWkgKz0gdHhfcmluZy0+Y291bnQ7CiAJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOwogCQlpZ2JfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2UodHhfcmluZywgYnVmZmVyX2luZm8pOwogCX0KQEAgLTM2MjgsNyArMzY1Nyw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpZ2JfdHhfcXVldWVfYWR2KHN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZywKLQkJCQkgICAgaW50IHR4X2ZsYWdzLCBpbnQgY291bnQsIHUzMiBwYXlsZW4sCisJCQkJICAgIHUzMiB0eF9mbGFncywgaW50IGNvdW50LCB1MzIgcGF5bGVuLAogCQkJCSAgICB1OCBoZHJfbGVuKQogewogCXVuaW9uIGUxMDAwX2Fkdl90eF9kZXNjICp0eF9kZXNjOwpAQCAtMzcxNiw3ICszNzQ1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpZ2JfbWF5YmVfc3RvcF90eChzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcsIGludCBzaXplKQorc3RhdGljIGlubGluZSBpbnQgaWdiX21heWJlX3N0b3BfdHgoc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nLCBpbnQgc2l6ZSkKIHsKIAlpZiAoaWdiX2Rlc2NfdW51c2VkKHR4X3JpbmcpID49IHNpemUpCiAJCXJldHVybiAwOwpAQCAtMzcyNywxMCArMzc1NiwxMCBAQAogCQkJCSAgICBzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcpCiB7CiAJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYodHhfcmluZy0+bmV0ZGV2KTsKLQl1bnNpZ25lZCBpbnQgZmlyc3Q7Ci0JdW5zaWduZWQgaW50IHR4X2ZsYWdzID0gMDsKLQl1OCBoZHJfbGVuID0gMDsKIAlpbnQgdHNvID0gMCwgY291bnQ7CisJdTMyIHR4X2ZsYWdzID0gMDsKKwl1MTYgZmlyc3Q7CisJdTggaGRyX2xlbiA9IDA7CiAJdW5pb24gc2tiX3NoYXJlZF90eCAqc2h0eCA9IHNrYl90eChza2IpOwogCiAJLyogbmVlZDogMSBkZXNjcmlwdG9yIHBlciBwYWdlLApAQCAtMzkxMSw3ICszOTQwLDcgQEAKIAluZXRkZXYtPm10dSA9IG5ld19tdHU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJ4X2J1ZmZlcl9sZW4gPSByeF9idWZmZXJfbGVuOworCQlhZGFwdGVyLT5yeF9yaW5nW2ldLT5yeF9idWZmZXJfbGVuID0gcnhfYnVmZmVyX2xlbjsKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCWlnYl91cChhZGFwdGVyKTsKQEAgLTM5MzMsNyArMzk2Miw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5ldF9zdGF0cyA9IGlnYl9nZXRfc3RhdHMoYWRhcHRlci0+bmV0ZGV2KTsKIAlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKLQl1MzIgcm5iYzsKKwl1MzIgcm5iYywgcmVnOwogCXUxNiBwaHlfdG1wOwogCWludCBpOwogCXU2NCBieXRlcywgcGFja2V0czsKQEAgLTM5NTMsMTAgKzM5ODIsMTEgQEAKIAlwYWNrZXRzID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CiAJCXUzMiBycWRwY190bXAgPSByZDMyKEUxMDAwX1JRRFBDKGkpKSAmIDB4MEZGRjsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yeF9zdGF0cy5kcm9wcyArPSBycWRwY190bXA7CisJCXN0cnVjdCBpZ2JfcmluZyAqcmluZyA9IGFkYXB0ZXItPnJ4X3JpbmdbaV07CisJCXJpbmctPnJ4X3N0YXRzLmRyb3BzICs9IHJxZHBjX3RtcDsKIAkJbmV0X3N0YXRzLT5yeF9maWZvX2Vycm9ycyArPSBycWRwY190bXA7Ci0JCWJ5dGVzICs9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ucnhfc3RhdHMuYnl0ZXM7Ci0JCXBhY2tldHMgKz0gYWRhcHRlci0+cnhfcmluZ1tpXS5yeF9zdGF0cy5wYWNrZXRzOworCQlieXRlcyArPSByaW5nLT5yeF9zdGF0cy5ieXRlczsKKwkJcGFja2V0cyArPSByaW5nLT5yeF9zdGF0cy5wYWNrZXRzOwogCX0KIAogCW5ldF9zdGF0cy0+cnhfYnl0ZXMgPSBieXRlczsKQEAgLTM5NjUsOCArMzk5NSw5IEBACiAJYnl0ZXMgPSAwOwogCXBhY2tldHMgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJYnl0ZXMgKz0gYWRhcHRlci0+dHhfcmluZ1tpXS50eF9zdGF0cy5ieXRlczsKLQkJcGFja2V0cyArPSBhZGFwdGVyLT50eF9yaW5nW2ldLnR4X3N0YXRzLnBhY2tldHM7CisJCXN0cnVjdCBpZ2JfcmluZyAqcmluZyA9IGFkYXB0ZXItPnR4X3JpbmdbaV07CisJCWJ5dGVzICs9IHJpbmctPnR4X3N0YXRzLmJ5dGVzOworCQlwYWNrZXRzICs9IHJpbmctPnR4X3N0YXRzLnBhY2tldHM7CiAJfQogCW5ldF9zdGF0cy0+dHhfYnl0ZXMgPSBieXRlczsKIAluZXRfc3RhdHMtPnR4X3BhY2tldHMgPSBwYWNrZXRzOwpAQCAtNDAyNCwxNSArNDA1NSwxNyBAQAogCWFkYXB0ZXItPnN0YXRzLm1wdGMgKz0gcmQzMihFMTAwMF9NUFRDKTsKIAlhZGFwdGVyLT5zdGF0cy5icHRjICs9IHJkMzIoRTEwMDBfQlBUQyk7CiAKLQkvKiB1c2VkIGZvciBhZGFwdGl2ZSBJRlMgKi8KLQlody0+bWFjLnR4X3BhY2tldF9kZWx0YSA9IHJkMzIoRTEwMDBfVFBUKTsKLQlhZGFwdGVyLT5zdGF0cy50cHQgKz0gaHctPm1hYy50eF9wYWNrZXRfZGVsdGE7Ci0JaHctPm1hYy5jb2xsaXNpb25fZGVsdGEgPSByZDMyKEUxMDAwX0NPTEMpOwotCWFkYXB0ZXItPnN0YXRzLmNvbGMgKz0gaHctPm1hYy5jb2xsaXNpb25fZGVsdGE7CisJYWRhcHRlci0+c3RhdHMudHB0ICs9IHJkMzIoRTEwMDBfVFBUKTsKKwlhZGFwdGVyLT5zdGF0cy5jb2xjICs9IHJkMzIoRTEwMDBfQ09MQyk7CiAKIAlhZGFwdGVyLT5zdGF0cy5hbGduZXJyYyArPSByZDMyKEUxMDAwX0FMR05FUlJDKTsKLQlhZGFwdGVyLT5zdGF0cy5yeGVycmMgKz0gcmQzMihFMTAwMF9SWEVSUkMpOwotCWFkYXB0ZXItPnN0YXRzLnRuY3JzICs9IHJkMzIoRTEwMDBfVE5DUlMpOworCS8qIHJlYWQgaW50ZXJuYWwgcGh5IHNwZWNpZmljIHN0YXRzICovCisJcmVnID0gcmQzMihFMTAwMF9DVFJMX0VYVCk7CisJaWYgKCEocmVnICYgRTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0spKSB7CisJCWFkYXB0ZXItPnN0YXRzLnJ4ZXJyYyArPSByZDMyKEUxMDAwX1JYRVJSQyk7CisJCWFkYXB0ZXItPnN0YXRzLnRuY3JzICs9IHJkMzIoRTEwMDBfVE5DUlMpOworCX0KKwogCWFkYXB0ZXItPnN0YXRzLnRzY3RjICs9IHJkMzIoRTEwMDBfVFNDVEMpOwogCWFkYXB0ZXItPnN0YXRzLnRzY3RmYyArPSByZDMyKEUxMDAwX1RTQ1RGQyk7CiAKQEAgLTQwOTUsNiArNDEyOCw5IEBACiAJdTMyIGljciA9IHJkMzIoRTEwMDBfSUNSKTsKIAkvKiByZWFkaW5nIElDUiBjYXVzZXMgYml0IDMxIG9mIEVJQ1IgdG8gYmUgY2xlYXJlZCAqLwogCisJaWYgKGljciAmIEUxMDAwX0lDUl9EUlNUQSkKKwkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cmVzZXRfdGFzayk7CisKIAlpZiAoaWNyICYgRTEwMDBfSUNSX0RPVVRTWU5DKSB7CiAJCS8qIEhXIGlzIHJlcG9ydGluZyBETUEgaXMgb3V0IG9mIHN5bmMgKi8KIAkJYWRhcHRlci0+c3RhdHMuZG9vc3luYysrOwpAQCAtNDEyNCw2ICs0MTYwLDcgQEAKIAogc3RhdGljIHZvaWQgaWdiX3dyaXRlX2l0cihzdHJ1Y3QgaWdiX3FfdmVjdG9yICpxX3ZlY3RvcikKIHsKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBxX3ZlY3Rvci0+YWRhcHRlcjsKIAl1MzIgaXRyX3ZhbCA9IHFfdmVjdG9yLT5pdHJfdmFsICYgMHg3RkZDOwogCiAJaWYgKCFxX3ZlY3Rvci0+c2V0X2l0cikKQEAgLTQxMzIsOCArNDE2OSw4IEBACiAJaWYgKCFpdHJfdmFsKQogCQlpdHJfdmFsID0gMHg0OwogCi0JaWYgKHFfdmVjdG9yLT5pdHJfc2hpZnQpCi0JCWl0cl92YWwgfD0gaXRyX3ZhbCA8PCBxX3ZlY3Rvci0+aXRyX3NoaWZ0OworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBlMTAwMF84MjU3NSkKKwkJaXRyX3ZhbCB8PSBpdHJfdmFsIDw8IDE2OwogCWVsc2UKIAkJaXRyX3ZhbCB8PSAweDgwMDAwMDA7CiAKQEAgLTQyMTAsOSArNDI0Nyw4IEBACiAJd3IzMihFMTAwMF9EQ0FfQ1RSTCwgRTEwMDBfRENBX0NUUkxfRENBX01PREVfQ0IyKTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcV92ZWN0b3JzOyBpKyspIHsKLQkJc3RydWN0IGlnYl9xX3ZlY3RvciAqcV92ZWN0b3IgPSBhZGFwdGVyLT5xX3ZlY3RvcltpXTsKLQkJcV92ZWN0b3ItPmNwdSA9IC0xOwotCQlpZ2JfdXBkYXRlX2RjYShxX3ZlY3Rvcik7CisJCWFkYXB0ZXItPnFfdmVjdG9yW2ldLT5jcHUgPSAtMTsKKwkJaWdiX3VwZGF0ZV9kY2EoYWRhcHRlci0+cV92ZWN0b3JbaV0pOwogCX0KIH0KIApAQCAtNDQ4NiwxMCArNDUyMiw1NyBAQAogCQkJCXJlZyB8PSBzaXplOwogCQkJCXdyMzIoRTEwMDBfVk1PTFIodmYpLCByZWcpOwogCQkJfQotCQkJcmV0dXJuIDA7CiAJCX0KIAl9Ci0JcmV0dXJuIC0xOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBpZ2Jfc2V0X3ZtdmlyKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgdTMyIHZpZCwgdTMyIHZmKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwlpZiAodmlkKQorCQl3cjMyKEUxMDAwX1ZNVklSKHZmKSwgKHZpZCB8IEUxMDAwX1ZNVklSX1ZMQU5BX0RFRkFVTFQpKTsKKwllbHNlCisJCXdyMzIoRTEwMDBfVk1WSVIodmYpLCAwKTsKK30KKworc3RhdGljIGludCBpZ2JfbmRvX3NldF92Zl92bGFuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICAgICAgaW50IHZmLCB1MTYgdmxhbiwgdTggcW9zKQoreworCWludCBlcnIgPSAwOworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAoKHZmID49IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpIHx8ICh2bGFuID4gNDA5NSkgfHwgKHFvcyA+IDcpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodmxhbiB8fCBxb3MpIHsKKwkJZXJyID0gaWdiX3ZsdmZfc2V0KGFkYXB0ZXIsIHZsYW4sICEhdmxhbiwgdmYpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJCWlnYl9zZXRfdm12aXIoYWRhcHRlciwgdmxhbiB8IChxb3MgPDwgVkxBTl9QUklPX1NISUZUKSwgdmYpOworCQlpZ2Jfc2V0X3Ztb2xyKGFkYXB0ZXIsIHZmLCAhdmxhbik7CisJCWFkYXB0ZXItPnZmX2RhdGFbdmZdLnBmX3ZsYW4gPSB2bGFuOworCQlhZGFwdGVyLT52Zl9kYXRhW3ZmXS5wZl9xb3MgPSBxb3M7CisJCWRldl9pbmZvKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkgIlNldHRpbmcgVkxBTiAlZCwgUU9TIDB4JXggb24gVkYgJWRcbiIsIHZsYW4sIHFvcywgdmYpOworCQlpZiAodGVzdF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgeworCQkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkgIlRoZSBWRiBWTEFOIGhhcyBiZWVuIHNldCwiCisJCQkJICIgYnV0IHRoZSBQRiBkZXZpY2UgaXMgbm90IHVwLlxuIik7CisJCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCSAiQnJpbmcgdGhlIFBGIGRldmljZSB1cCBiZWZvcmUiCisJCQkJICIgYXR0ZW1wdGluZyB0byB1c2UgdGhlIFZGIGRldmljZS5cbiIpOworCQl9CisJfSBlbHNlIHsKKwkJaWdiX3ZsdmZfc2V0KGFkYXB0ZXIsIGFkYXB0ZXItPnZmX2RhdGFbdmZdLnBmX3ZsYW4sCisJCQkJICAgZmFsc2UsIHZmKTsKKwkJaWdiX3NldF92bXZpcihhZGFwdGVyLCB2bGFuLCB2Zik7CisJCWlnYl9zZXRfdm1vbHIoYWRhcHRlciwgdmYsIHRydWUpOworCQlhZGFwdGVyLT52Zl9kYXRhW3ZmXS5wZl92bGFuID0gMDsKKwkJYWRhcHRlci0+dmZfZGF0YVt2Zl0ucGZfcW9zID0gMDsKKyAgICAgICB9CitvdXQ6CisgICAgICAgcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCBpZ2Jfc2V0X3ZmX3ZsYW4oc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MzIgKm1zZ2J1ZiwgdTMyIHZmKQpAQCAtNDUwMiwxNSArNDU4NSwyMSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3ZmX3Jlc2V0KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgdTMyIHZmKQogewotCS8qIGNsZWFyIGFsbCBmbGFncyAqLwotCWFkYXB0ZXItPnZmX2RhdGFbdmZdLmZsYWdzID0gMDsKKwkvKiBjbGVhciBmbGFncyAqLworCWFkYXB0ZXItPnZmX2RhdGFbdmZdLmZsYWdzICY9IH4oSUdCX1ZGX0ZMQUdfUEZfU0VUX01BQyk7CiAJYWRhcHRlci0+dmZfZGF0YVt2Zl0ubGFzdF9uYWNrID0gamlmZmllczsKIAogCS8qIHJlc2V0IG9mZmxvYWRzIHRvIGRlZmF1bHRzICovCi0JaWdiX3NldF92bW9scihhZGFwdGVyLCB2Zik7CisJaWdiX3NldF92bW9scihhZGFwdGVyLCB2ZiwgdHJ1ZSk7CiAKIAkvKiByZXNldCB2bGFucyBmb3IgZGV2aWNlICovCiAJaWdiX2NsZWFyX3ZmX3ZmdGEoYWRhcHRlciwgdmYpOworCWlmIChhZGFwdGVyLT52Zl9kYXRhW3ZmXS5wZl92bGFuKQorCQlpZ2JfbmRvX3NldF92Zl92bGFuKGFkYXB0ZXItPm5ldGRldiwgdmYsCisJCQkJICAgIGFkYXB0ZXItPnZmX2RhdGFbdmZdLnBmX3ZsYW4sCisJCQkJICAgIGFkYXB0ZXItPnZmX2RhdGFbdmZdLnBmX3Fvcyk7CisJZWxzZQorCQlpZ2JfY2xlYXJfdmZfdmZ0YShhZGFwdGVyLCB2Zik7CiAKIAkvKiByZXNldCBtdWx0aWNhc3QgdGFibGUgYXJyYXkgZm9yIHZmICovCiAJYWRhcHRlci0+dmZfZGF0YVt2Zl0ubnVtX3ZmX21jX2hhc2hlcyA9IDA7CkBAIC00NTI0LDcgKzQ2MTMsOCBAQAogCXVuc2lnbmVkIGNoYXIgKnZmX21hYyA9IGFkYXB0ZXItPnZmX2RhdGFbdmZdLnZmX21hY19hZGRyZXNzZXM7CiAKIAkvKiBnZW5lcmF0ZSBhIG5ldyBtYWMgYWRkcmVzcyBhcyB3ZSB3ZXJlIGhvdHBsdWcgcmVtb3ZlZC9hZGRlZCAqLwotCXJhbmRvbV9ldGhlcl9hZGRyKHZmX21hYyk7CisJaWYgKCEoYWRhcHRlci0+dmZfZGF0YVt2Zl0uZmxhZ3MgJiBJR0JfVkZfRkxBR19QRl9TRVRfTUFDKSkKKwkJcmFuZG9tX2V0aGVyX2FkZHIodmZfbWFjKTsKIAogCS8qIHByb2Nlc3MgcmVtYWluaW5nIHJlc2V0IGV2ZW50cyAqLwogCWlnYl92Zl9yZXNldChhZGFwdGVyLCB2Zik7CkBAIC00NjM3LDcgKzQ3MjcsMTAgQEAKIAkJcmV0dmFsID0gaWdiX3NldF92Zl9ybHBtbChhZGFwdGVyLCBtc2didWZbMV0sIHZmKTsKIAkJYnJlYWs7CiAJY2FzZSBFMTAwMF9WRl9TRVRfVkxBTjoKLQkJcmV0dmFsID0gaWdiX3NldF92Zl92bGFuKGFkYXB0ZXIsIG1zZ2J1ZiwgdmYpOworCQlpZiAoYWRhcHRlci0+dmZfZGF0YVt2Zl0ucGZfdmxhbikKKwkJCXJldHZhbCA9IC0xOworCQllbHNlCisJCQlyZXR2YWwgPSBpZ2Jfc2V0X3ZmX3ZsYW4oYWRhcHRlciwgbXNnYnVmLCB2Zik7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuaGFuZGxlZCBNc2cgJTA4eFxuIiwgbXNnYnVmWzBdKTsKQEAgLTQ3MTgsNiArNDgxMSw5IEBACiAKIAlpZ2Jfd3JpdGVfaXRyKHFfdmVjdG9yKTsKIAorCWlmIChpY3IgJiBFMTAwMF9JQ1JfRFJTVEEpCisJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOworCiAJaWYgKGljciAmIEUxMDAwX0lDUl9ET1VUU1lOQykgewogCQkvKiBIVyBpcyByZXBvcnRpbmcgRE1BIGlzIG91dCBvZiBzeW5jICovCiAJCWFkYXB0ZXItPnN0YXRzLmRvb3N5bmMrKzsKQEAgLTQ3NTcsNiArNDg1Myw5IEBACiAJaWYgKCEoaWNyICYgRTEwMDBfSUNSX0lOVF9BU1NFUlRFRCkpCiAJCXJldHVybiBJUlFfTk9ORTsKIAorCWlmIChpY3IgJiBFMTAwMF9JQ1JfRFJTVEEpCisJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOworCiAJaWYgKGljciAmIEUxMDAwX0lDUl9ET1VUU1lOQykgewogCQkvKiBIVyBpcyByZXBvcnRpbmcgRE1BIGlzIG91dCBvZiBzeW5jICovCiAJCWFkYXB0ZXItPnN0YXRzLmRvb3N5bmMrKzsKQEAgLTQ5MjAsNyArNTAxOSw3IEBACiAJCQlpZiAoc2tiKSB7CiAJCQkJdW5zaWduZWQgaW50IHNlZ3MsIGJ5dGVjb3VudDsKIAkJCQkvKiBnc29fc2VncyBpcyBjdXJyZW50bHkgb25seSB2YWxpZCBmb3IgdGNwICovCi0JCQkJc2VncyA9IHNrYl9zaGluZm8oc2tiKS0+Z3NvX3NlZ3MgPzogMTsKKwkJCQlzZWdzID0gYnVmZmVyX2luZm8tPmdzb19zZWdzOwogCQkJCS8qIG11bHRpcGx5IGRhdGEgY2h1bmtzIGJ5IHNpemUgb2YgaGVhZGVycyAqLwogCQkJCWJ5dGVjb3VudCA9ICgoc2VncyAtIDEpICogc2tiX2hlYWRsZW4oc2tiKSkgKwogCQkJCQkgICAgc2tiLT5sZW47CkBAIC01NzM4LDcgKzU4MzcsOSBAQAogCiAJKmVuYWJsZV93YWtlID0gd3VmYyB8fCBhZGFwdGVyLT5lbl9tbmdfcHQ7CiAJaWYgKCEqZW5hYmxlX3dha2UpCi0JCWlnYl9zaHV0ZG93bl9zZXJkZXNfbGlua184MjU3NShodyk7CisJCWlnYl9wb3dlcl9kb3duX2xpbmsoYWRhcHRlcik7CisJZWxzZQorCQlpZ2JfcG93ZXJfdXBfbGluayhhZGFwdGVyKTsKIAogCS8qIFJlbGVhc2UgY29udHJvbCBvZiBoL3cgdG8gZi93LiAgSWYgZi93IGlzIEFNVCBlbmFibGVkLCB0aGlzCiAJICogd291bGQgaGF2ZSBhbHJlYWR5IGhhcHBlbmVkIGluIGNsb3NlIGFuZCBpcyByZWR1bmRhbnQuICovCkBAIC01Nzc4LDYgKzU4NzksNyBAQAogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOwogCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpOwogCWlmIChlcnIpIHsKQEAgLTU3OTUsOCArNTg5Nyw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCS8qIGUxMDAwX3Bvd2VyX3VwX3BoeShhZGFwdGVyKTsgKi8KLQogCWlnYl9yZXNldChhZGFwdGVyKTsKIAogCS8qIGxldCB0aGUgZi93IGtub3cgdGhhdCB0aGUgaC93IGlzIG5vdyB1bmRlciB0aGUgY29udHJvbCBvZiB0aGUKQEAgLTU5MDUsNiArNjAwNSw3IEBACiAJfSBlbHNlIHsKIAkJcGNpX3NldF9tYXN0ZXIocGRldik7CiAJCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKIAogCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKIAkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOwpAQCAtNTk5Myw2ICs2MDk0LDQzIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgaWdiX25kb19zZXRfdmZfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB2ZiwgdTggKm1hYykKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihtYWMpIHx8ICh2ZiA+PSBhZGFwdGVyLT52ZnNfYWxsb2NhdGVkX2NvdW50KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJYWRhcHRlci0+dmZfZGF0YVt2Zl0uZmxhZ3MgfD0gSUdCX1ZGX0ZMQUdfUEZfU0VUX01BQzsKKwlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAic2V0dGluZyBNQUMgJXBNIG9uIFZGICVkXG4iLCBtYWMsIHZmKTsKKwlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiUmVsb2FkIHRoZSBWRiBkcml2ZXIgdG8gbWFrZSB0aGlzIgorCQkJCSAgICAgICIgY2hhbmdlIGVmZmVjdGl2ZS4iKTsKKwlpZiAodGVzdF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgeworCQlkZXZfd2FybigmYWRhcHRlci0+cGRldi0+ZGV2LCAiVGhlIFZGIE1BQyBhZGRyZXNzIGhhcyBiZWVuIHNldCwiCisJCQkgIiBidXQgdGhlIFBGIGRldmljZSBpcyBub3QgdXAuXG4iKTsKKwkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwgIkJyaW5nIHRoZSBQRiBkZXZpY2UgdXAgYmVmb3JlIgorCQkJICIgYXR0ZW1wdGluZyB0byB1c2UgdGhlIFZGIGRldmljZS5cbiIpOworCX0KKwlyZXR1cm4gaWdiX3NldF92Zl9tYWMoYWRhcHRlciwgdmYsIG1hYyk7Cit9CisKK3N0YXRpYyBpbnQgaWdiX25kb19zZXRfdmZfYncoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHZmLCBpbnQgdHhfcmF0ZSkKK3sKKwlyZXR1cm4gLUVPUE5PVFNVUFA7Cit9CisKK3N0YXRpYyBpbnQgaWdiX25kb19nZXRfdmZfY29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJIGludCB2Ziwgc3RydWN0IGlmbGFfdmZfaW5mbyAqaXZpKQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaWYgKHZmID49IGFkYXB0ZXItPnZmc19hbGxvY2F0ZWRfY291bnQpCisJCXJldHVybiAtRUlOVkFMOworCWl2aS0+dmYgPSB2ZjsKKwltZW1jcHkoJml2aS0+bWFjLCBhZGFwdGVyLT52Zl9kYXRhW3ZmXS52Zl9tYWNfYWRkcmVzc2VzLCBFVEhfQUxFTik7CisJaXZpLT50eF9yYXRlID0gMDsKKwlpdmktPnZsYW4gPSBhZGFwdGVyLT52Zl9kYXRhW3ZmXS5wZl92bGFuOworCWl2aS0+cW9zID0gYWRhcHRlci0+dmZfZGF0YVt2Zl0ucGZfcW9zOworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBpZ2Jfdm1tX2NvbnRyb2woc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQogewogCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pZ2J2Zi9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L2lnYnZmL25ldGRldi5jCmluZGV4IDJhYTcxYTcuLmE3N2FmZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lnYnZmL25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L2lnYnZmL25ldGRldi5jCkBAIC0xNDAzLDggKzE0MDMsOCBAQAogCXU4ICAqbXRhX2xpc3QgPSBOVUxMOwogCWludCBpOwogCi0JaWYgKG5ldGRldi0+bWNfY291bnQpIHsKLQkJbXRhX2xpc3QgPSBrbWFsbG9jKG5ldGRldi0+bWNfY291bnQgKiA2LCBHRlBfQVRPTUlDKTsKKwlpZiAoIW5ldGRldl9tY19lbXB0eShuZXRkZXYpKSB7CisJCW10YV9saXN0ID0ga21hbGxvYyhuZXRkZXZfbWNfY291bnQobmV0ZGV2KSAqIDYsIEdGUF9BVE9NSUMpOwogCQlpZiAoIW10YV9saXN0KSB7CiAJCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCiAJCQkgICAgICAgICJmYWlsZWQgdG8gYWxsb2NhdGUgbXVsdGljYXN0IGZpbHRlciBsaXN0XG4iKTsKQEAgLTE0MTMsMTUgKzE0MTMsOSBAQAogCX0KIAogCS8qIHByZXBhcmUgYSBwYWNrZWQgYXJyYXkgb2Ygb25seSBhZGRyZXNzZXMuICovCi0JbWNfcHRyID0gbmV0ZGV2LT5tY19saXN0OwotCi0JZm9yIChpID0gMDsgaSA8IG5ldGRldi0+bWNfY291bnQ7IGkrKykgewotCQlpZiAoIW1jX3B0cikKLQkJCWJyZWFrOwotCQltZW1jcHkobXRhX2xpc3QgKyAoaSpFVEhfQUxFTiksIG1jX3B0ci0+ZG1pX2FkZHIsCi0JCSAgICAgICBFVEhfQUxFTik7Ci0JCW1jX3B0ciA9IG1jX3B0ci0+bmV4dDsKLQl9CisJaSA9IDA7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfcHRyLCBuZXRkZXYpCisJCW1lbWNweShtdGFfbGlzdCArIChpKysgKiBFVEhfQUxFTiksIG1jX3B0ci0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKIAogCWh3LT5tYWMub3BzLnVwZGF0ZV9tY19hZGRyX2xpc3QoaHcsIG10YV9saXN0LCBpLCAwLCAwKTsKIAlrZnJlZShtdGFfbGlzdCk7CkBAIC0yNjA5LDExICsyNjAzLDcgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CiAKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiSW50ZWwoUikgODI1NzYgVmlydHVhbCBGdW5jdGlvblxuIik7Ci0JZGV2X2luZm8oJnBkZXYtPmRldiwgIkFkZHJlc3M6ICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAotCSAgICAgICAgIC8qIE1BQyBhZGRyZXNzICovCi0JICAgICAgICAgbmV0ZGV2LT5kZXZfYWRkclswXSwgbmV0ZGV2LT5kZXZfYWRkclsxXSwKLQkgICAgICAgICBuZXRkZXYtPmRldl9hZGRyWzJdLCBuZXRkZXYtPmRldl9hZGRyWzNdLAotCSAgICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbNF0sIG5ldGRldi0+ZGV2X2FkZHJbNV0pOworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJBZGRyZXNzOiAlcE1cbiIsIG5ldGRldi0+ZGV2X2FkZHIpOwogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJNQUM6ICVkXG4iLCBody0+bWFjLnR5cGUpOwogfQogCkBAIC0yNzc5LDExICsyNzY5LDggQEAKIAltZW1jcHkobmV0ZGV2LT5wZXJtX2FkZHIsIGFkYXB0ZXItPmh3Lm1hYy5hZGRyLCBuZXRkZXYtPmFkZHJfbGVuKTsKIAogCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZXRkZXYtPnBlcm1fYWRkcikpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBNQUMgQWRkcmVzczogIgotCQkgICAgICAgICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJICAgICAgICBuZXRkZXYtPmRldl9hZGRyWzBdLCBuZXRkZXYtPmRldl9hZGRyWzFdLAotCQkgICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbMl0sIG5ldGRldi0+ZGV2X2FkZHJbM10sCi0JCSAgICAgICAgbmV0ZGV2LT5kZXZfYWRkcls0XSwgbmV0ZGV2LT5kZXZfYWRkcls1XSk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkludmFsaWQgTUFDIEFkZHJlc3M6ICVwTVxuIiwKKwkJICAgICAgICBuZXRkZXYtPmRldl9hZGRyKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJfaHdfaW5pdDsKIAl9CkBAIC0yODg1LDcgKzI4NzIsNyBAQAogCS5yZXN1bWUgPSBpZ2J2Zl9pb19yZXN1bWUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaWdidmZfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGlnYnZmX3BjaV90YmwpID0gewogCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84MjU3Nl9WRiksIGJvYXJkX3ZmIH0sCiAJeyB9IC8qIHRlcm1pbmF0ZSBsaXN0ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaW9jMy1ldGguYyBiL2RyaXZlcnMvbmV0L2lvYzMtZXRoLmMKaW5kZXggOGVjMTVhYi4uNzA4NzFiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaW9jMy1ldGguYworKysgYi9kcml2ZXJzL25ldC9pb2MzLWV0aC5jCkBAIC0xMzgzLDcgKzEzODMsNyBAQAogCSAqLwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaW9jM19wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoaW9jM19wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfU0dJLCBQQ0lfREVWSUNFX0lEX1NHSV9JT0MzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCiAJeyAwIH0KIH07CkBAIC0xNjY0LDExICsxNjY0LDEwIEBACiAKIHN0YXRpYyB2b2lkIGlvYzNfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJc3RydWN0IGlvYzNfcHJpdmF0ZSAqaXAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpb2MzICppb2MzID0gaXAtPnJlZ3M7CiAJdTY0IGVoYXIgPSAwOwotCWludCBpOwogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwkJCQkvKiBMb2NrIG91dCBvdGhlcnMuICovCiAKQEAgLTE2ODEsMTYgKzE2ODAsMTYgQEAKIAkJaW9jM193X2VtY3IoaXAtPmVtY3IpOwkJCS8qIENsZWFyIHByb21pc2N1b3VzLiAqLwogCQkodm9pZCkgaW9jM19yX2VtY3IoKTsKIAotCQlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8IChkZXYtPm1jX2NvdW50ID4gNjQpKSB7CisJCWlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKKwkJICAgIChuZXRkZXZfbWNfY291bnQoZGV2KSA+IDY0KSkgewogCQkJLyogVG9vIG1hbnkgZm9yIGhhc2hpbmcgdG8gbWFrZSBzZW5zZSBvciB3ZSB3YW50IGFsbAogCQkJICAgbXVsdGljYXN0IHBhY2tldHMgYW55d2F5LCAgc28gc2tpcCBjb21wdXRpbmcgYWxsIHRoZQogCQkJICAgaGFzaGVzIGFuZCBqdXN0IGFjY2VwdCBhbGwgcGFja2V0cy4gICovCiAJCQlpcC0+ZWhhcl9oID0gMHhmZmZmZmZmZjsKIAkJCWlwLT5laGFyX2wgPSAweGZmZmZmZmZmOwogCQl9IGVsc2UgewotCQkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgeworCQkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKIAkJCQljaGFyICphZGRyID0gZG1pLT5kbWlfYWRkcjsKLQkJCQlkbWkgPSBkbWktPm5leHQ7CiAKIAkJCQlpZiAoISgqYWRkciAmIDEpKQogCQkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lwZy5jIGIvZHJpdmVycy9uZXQvaXBnLmMKaW5kZXggYmE4ZDI0Ni4uMTUwNDE1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXBnLmMKKysrIGIvZHJpdmVycy9uZXQvaXBnLmMKQEAgLTg4LDE3ICs4OCwxNSBAQAogCSJTdW5kYW5jZSBUZWNobm9sb2d5IFNUMjAyMSBiYXNlZCBOSUMiLAogCSJUYW1hcmFjayBNaWNyb2VsZWN0cm9uaWNzIFRDOTAyMC85MDIxIGJhc2VkIE5JQyIsCiAJIlRhbWFyYWNrIE1pY3JvZWxlY3Ryb25pY3MgVEM5MDIwLzkwMjEgYmFzZWQgTklDIiwKLQkiRC1MaW5rIE5JQyIsCiAJIkQtTGluayBOSUMgSVAxMDAwQSIKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpcGdfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoaXBnX3BjaV90YmwpID0gewogCXsgUENJX1ZERVZJQ0UoU1VOREFOQ0UsCTB4MTAyMyksIDAgfSwKIAl7IFBDSV9WREVWSUNFKFNVTkRBTkNFLAkweDIwMjEpLCAxIH0sCiAJeyBQQ0lfVkRFVklDRShTVU5EQU5DRSwJMHgxMDIxKSwgMiB9LAogCXsgUENJX1ZERVZJQ0UoRExJTkssCTB4OTAyMSksIDMgfSwKLQl7IFBDSV9WREVWSUNFKERMSU5LLAkweDQwMDApLCA0IH0sCi0JeyBQQ0lfVkRFVklDRShETElOSywJMHg0MDIwKSwgNSB9LAorCXsgUENJX1ZERVZJQ0UoRExJTkssCTB4NDAyMCksIDQgfSwKIAl7IDAsIH0KIH07CiAKQEAgLTU4NSwxMSArNTgzLDExIEBACiAJCXJlY2VpdmVtb2RlID0gSVBHX1JNX1JFQ0VJVkVBTExGUkFNRVM7CiAJfSBlbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKIAkJICAgKChkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCkgJiYKLQkJICAgIChkZXYtPm1jX2NvdW50ID4gSVBHX01VTFRJQ0FTVF9IQVNIVEFCTEVfU0laRSkpKSB7CisJCSAgICAobmV0ZGV2X21jX2NvdW50KGRldikgPiBJUEdfTVVMVElDQVNUX0hBU0hUQUJMRV9TSVpFKSkpIHsKIAkJLyogTklDIHRvIGJlIGNvbmZpZ3VyZWQgdG8gcmVjZWl2ZSBhbGwgbXVsdGljYXN0CiAJCSAqIGZyYW1lcy4gKi8KIAkJcmVjZWl2ZW1vZGUgfD0gSVBHX1JNX1JFQ0VJVkVNVUxUSUNBU1Q7Ci0JfSBlbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpICYmIChkZXYtPm1jX2NvdW50ID4gMCkpIHsKKwl9IGVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCkgJiYgIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCS8qIE5JQyB0byBiZSBjb25maWd1cmVkIHRvIHJlY2VpdmUgc2VsZWN0ZWQKIAkJICogbXVsdGljYXN0IGFkZHJlc3Nlcy4gKi8KIAkJcmVjZWl2ZW1vZGUgfD0gSVBHX1JNX1JFQ0VJVkVNVUxUSUNBU1RIQVNIOwpAQCAtNjEwLDggKzYwOCw3IEBACiAJaGFzaHRhYmxlWzFdID0gMHgwMDAwMDAwMDsKIAogCS8qIEN5Y2xlIHRocm91Z2ggYWxsIG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gZmlsdGVyLiAqLwotCWZvciAobWNfbGlzdF9wdHIgPSBkZXYtPm1jX2xpc3Q7Ci0JICAgICBtY19saXN0X3B0ciAhPSBOVUxMOyBtY19saXN0X3B0ciA9IG1jX2xpc3RfcHRyLT5uZXh0KSB7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfbGlzdF9wdHIsIGRldikgewogCQkvKiBDYWxjdWxhdGUgQ1JDIHJlc3VsdCBmb3IgZWFjaCBtdWx0aWNhc3QgYWRkcmVzcy4gKi8KIAkJaGFzaGluZGV4ID0gY3JjMzJfbGUoMHhmZmZmZmZmZiwgbWNfbGlzdF9wdHItPmRtaV9hZGRyLAogCQkJCSAgICAgRVRIX0FMRU4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvaXJkYS9LY29uZmlnCmluZGV4IGY3NjM4NDIuLmFmMTBlOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9pcmRhL0tjb25maWcKQEAgLTY0LDYgKzY0LDE2IEBACiAKIGNvbW1lbnQgIkRvbmdsZSBzdXBwb3J0IgogCitjb25maWcgU0hfU0lSCisJdHJpc3RhdGUgIlN1cGVySCBTSVIgb24gVUFSVCIKKwlkZXBlbmRzIG9uIElSREEgJiYgU1VQRVJIICYmIFwKKwkJKENQVV9TVUJUWVBFX1NINzcyMiB8fCBDUFVfU1VCVFlQRV9TSDc3MjMgfHwgXAorCQkgQ1BVX1NVQlRZUEVfU0g3NzI0KQorCWRlZmF1bHQgbgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91ciB3YW50IHRvIGVuYWJsZSBTSVIgZnVuY3Rpb24gb24gU3VwZXJIIFVBUlQKKwkgIGRldmljZXMuCisKIGNvbmZpZyBET05HTEUKIAlib29sICJTZXJpYWwgZG9uZ2xlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBJUlRUWV9TSVIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9pcmRhL01ha2VmaWxlCmluZGV4IGQ4MmUxZTMuLmUwMzBkNDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9NYWtlZmlsZQpAQCAtMjIsNiArMjIsNyBAQAogIyBTSVIgZHJpdmVycwogb2JqLSQoQ09ORklHX0lSVFRZX1NJUikJCSs9IGlydHR5LXNpci5vCXNpci1kZXYubwogb2JqLSQoQ09ORklHX0JGSU5fU0lSKQkJKz0gYmZpbl9zaXIubworb2JqLSQoQ09ORklHX1NIX1NJUikJCSs9IHNoX3Npci5vCiAjIGRvbmdsZSBkcml2ZXJzIGZvciBTSVIgZHJpdmVycwogb2JqLSQoQ09ORklHX0VTSV9ET05HTEUpCSs9IGVzaS1zaXIubwogb2JqLSQoQ09ORklHX1RFS1JBTV9ET05HTEUpCSs9IHRla3JhbS1zaXIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jIGIvZHJpdmVycy9uZXQvaXJkYS9kb25hdWJvZS5jCmluZGV4IDJkN2I1YzEuLmI3ZTY2MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvZG9uYXVib2UuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2RvbmF1Ym9lLmMKQEAgLTE4NCw3ICsxODQsNyBAQAogI2RlZmluZSBDT05GSUcwSF9ETUFfT05fTk9SWCBDT05GSUcwSF9ETUFfT0ZGfCBPQk9FX0NPTkZJRzBIX0VORE1BQwogI2RlZmluZSBDT05GSUcwSF9ETUFfT04gQ09ORklHMEhfRE1BX09OX05PUlggfCBPQk9FX0NPTkZJRzBIX0VOUlgKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHRvc2hvYm9lX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh0b3Nob2JvZV9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfVE9TSElCQSwgUENJX0RFVklDRV9JRF9GSVI3MDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1RPU0hJQkEsIFBDSV9ERVZJQ0VfSURfRklSRDAxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXsgfQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS9zYTExMDBfaXIuYwppbmRleCBjNDEyZTgwLi4xZGNkY2UwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9pcmRhL3NhMTEwMF9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc2ExMTAwX2lyLmMKQEAgLTMzMSw3ICszMzEsNyBAQAogCQkgKiBJZiB3ZSBtaXNzZWQgYSBzcGVlZCBjaGFuZ2UsIGluaXRpYWxpc2UgYXQgdGhlIG5ldyBzcGVlZAogCQkgKiBkaXJlY3RseS4gIEl0IGlzIGRlYmF0YWJsZSB3aGV0aGVyIHRoaXMgaXMgYWN0dWFsbHkKIAkJICogcmVxdWlyZWQsIGJ1dCBpbiB0aGUgaW50ZXJlc3RzIG9mIGNvbnRpbnVpbmcgZnJvbSB3aGVyZQotCQkgKiB3ZSBsZWZ0IG9mZiBpdCBpcyBkZXNpcmVhYmxlLiAgVGhlIGNvbnZlcnNlIGFyZ3VtZW50IGlzCisJCSAqIHdlIGxlZnQgb2ZmIGl0IGlzIGRlc2lyYWJsZS4gIFRoZSBjb252ZXJzZSBhcmd1bWVudCBpcwogCQkgKiB0aGF0IHdlIHNob3VsZCByZS1uZWdvdGlhdGUgYXQgOTYwMCBiYXVkIGFnYWluLgogCQkgKi8KIAkJaWYgKHNpLT5uZXdzcGVlZCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9zaF9zaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvc2hfc2lyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdjOTgzZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc2hfc2lyLmMKQEAgLTAsMCArMSw4MjMgQEAKKy8qCisgKiBTdXBlckggSXJEQSBEcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmVuZXNhcyBTb2x1dGlvbnMgQ29ycC4KKyAqIEt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4KKyAqCisgKiBCYXNlZCBvbiBiZmluX3Npci5jCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA5IEFuYWxvZyBEZXZpY2VzIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxuZXQvaXJkYS93cmFwcGVyLmg+CisjaW5jbHVkZSA8bmV0L2lyZGEvaXJkYV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKworI2RlZmluZSBEUklWRVJfTkFNRSAic2hfc2lyIgorCisjZGVmaW5lIFJYX1BIQVNFCSgxIDw8IDApCisjZGVmaW5lIFRYX1BIQVNFCSgxIDw8IDEpCisjZGVmaW5lIFRYX0NPTVBfUEhBU0UJKDEgPDwgMikgLyogdHggY29tcGxldGUgKi8KKyNkZWZpbmUgTk9ORV9QSEFTRQkoMSA8PCAzMSkKKworI2RlZmluZSBJUklGX1JJTlRDTFIJMHgwMDE2IC8qIERNQSByeCBpbnRlcnJ1cHQgc291cmNlIGNsZWFyICovCisjZGVmaW5lIElSSUZfVElOVENMUgkweDAwMTggLyogRE1BIHR4IGludGVycnVwdCBzb3VyY2UgY2xlYXIgKi8KKyNkZWZpbmUgSVJJRl9TSVIwCTB4MDAyMCAvKiBJckRBLVNJUjEwIGNvbnRyb2wgKi8KKyNkZWZpbmUgSVJJRl9TSVIxCTB4MDAyMiAvKiBJckRBLVNJUjEwIGJhdWRyYXRlIGVycm9yIGNvcnJlY3Rpb24gKi8KKyNkZWZpbmUgSVJJRl9TSVIyCTB4MDAyNCAvKiBJckRBLVNJUjEwIGJhdWRyYXRlIGNvdW50ICovCisjZGVmaW5lIElSSUZfU0lSMwkweDAwMjYgLyogSXJEQS1TSVIxMCBzdGF0dXMgKi8KKyNkZWZpbmUgSVJJRl9TSVJfRlJNCTB4MDAyOCAvKiBIYXJkd2FyZSBmcmFtZSBwcm9jZXNzaW5nIHNldCAqLworI2RlZmluZSBJUklGX1NJUl9FT0YJMHgwMDJBIC8qIEVPRiB2YWx1ZSAqLworI2RlZmluZSBJUklGX1NJUl9GTEcJMHgwMDJDIC8qIEZsYWcgY2xlYXIgKi8KKyNkZWZpbmUgSVJJRl9VQVJUX1NUUzIJMHgwMDJFIC8qIFVBUlQgc3RhdHVzIDIgKi8KKyNkZWZpbmUgSVJJRl9VQVJUMAkweDAwMzAgLyogVUFSVCBjb250cm9sICovCisjZGVmaW5lIElSSUZfVUFSVDEJMHgwMDMyIC8qIFVBUlQgc3RhdHVzICovCisjZGVmaW5lIElSSUZfVUFSVDIJMHgwMDM0IC8qIFVBUlQgbW9kZSAqLworI2RlZmluZSBJUklGX1VBUlQzCTB4MDAzNiAvKiBVQVJUIHRyYW5zbWl0IGRhdGEgKi8KKyNkZWZpbmUgSVJJRl9VQVJUNAkweDAwMzggLyogVUFSVCByZWNlaXZlIGRhdGEgKi8KKyNkZWZpbmUgSVJJRl9VQVJUNQkweDAwM0EgLyogVUFSVCBpbnRlcnJ1cHQgbWFzayAqLworI2RlZmluZSBJUklGX1VBUlQ2CTB4MDAzQyAvKiBVQVJUIGJhdWQgcmF0ZSBlcnJvciBjb3JyZWN0aW9uICovCisjZGVmaW5lIElSSUZfVUFSVDcJMHgwMDNFIC8qIFVBUlQgYmF1ZCByYXRlIGNvdW50IHNldCAqLworI2RlZmluZSBJUklGX0NSQzAJMHgwMDQwIC8qIENSQyBlbmdpbmUgY29udHJvbCAqLworI2RlZmluZSBJUklGX0NSQzEJMHgwMDQyIC8qIENSQyBlbmdpbmUgaW5wdXQgZGF0YSAqLworI2RlZmluZSBJUklGX0NSQzIJMHgwMDQ0IC8qIENSQyBlbmdpbmUgY2FsY3VsYXRpb24gKi8KKyNkZWZpbmUgSVJJRl9DUkMzCTB4MDA0NiAvKiBDUkMgZW5naW5lIG91dHB1dCBkYXRhIDEgKi8KKyNkZWZpbmUgSVJJRl9DUkM0CTB4MDA0OCAvKiBDUkMgZW5naW5lIG91dHB1dCBkYXRhIDIgKi8KKworLyogSVJJRl9TSVIwICovCisjZGVmaW5lIElSVFBXCQkoMSA8PCAxKSAvKiB0cmFuc21pdCBwdWxzZSB3aWR0aCBzZWxlY3QgKi8KKyNkZWZpbmUgSVJFUlJDCQkoMSA8PCAwKSAvKiBDbGVhciByZWNlaXZlIHB1bHNlIHdpZHRoIGVycm9yICovCisKKy8qIElSSUZfU0lSMyAqLworI2RlZmluZSBJUkVSUgkJKDEgPDwgMCkgLyogcmVjZWl2ZWQgcHVsc2Ugd2lkdGggRXJyb3IgKi8KKworLyogSVJJRl9TSVJfRlJNICovCisjZGVmaW5lIEVPRkQJCSgxIDw8IDkpIC8qIEVPRiBkZXRlY3Rpb24gZmxhZyAqLworI2RlZmluZSBGUkVSCQkoMSA8PCA4KSAvKiBGcmFtZSBFcnJvciBiaXQgKi8KKyNkZWZpbmUgRlJQCQkoMSA8PCAwKSAvKiBGcmFtZSBwcm9jZXNzaW5nIHNldCAqLworCisvKiBJUklGX1VBUlRfU1RTMiAqLworI2RlZmluZSBJUlNNRQkJKDEgPDwgNikgLyogUmVjZWl2ZSBTdW0gICAgIEVycm9yIGZsYWcgKi8KKyNkZWZpbmUgSVJPVkUJCSgxIDw8IDUpIC8qIFJlY2VpdmUgT3ZlcnJ1biBFcnJvciBmbGFnICovCisjZGVmaW5lIElSRlJFCQkoMSA8PCA0KSAvKiBSZWNlaXZlIEZyYW1pbmcgRXJyb3IgZmxhZyAqLworI2RlZmluZSBJUlBSRQkJKDEgPDwgMykgLyogUmVjZWl2ZSBQYXJpdHkgIEVycm9yIGZsYWcgKi8KKworLyogSVJJRl9VQVJUMF8qLworI2RlZmluZSBUQkVDCQkoMSA8PCAyKSAvKiBUcmFuc21pdCBEYXRhIENsZWFyICovCisjZGVmaW5lIFJJRQkJKDEgPDwgMSkgLyogUmVjZWl2ZSBFbmFibGUgKi8KKyNkZWZpbmUgVElFCQkoMSA8PCAwKSAvKiBUcmFuc21pdCBFbmFibGUgKi8KKworLyogSVJJRl9VQVJUMSAqLworI2RlZmluZSBVUlNNRQkJKDEgPDwgNikgLyogUmVjZWl2ZSBTdW0gRXJyb3IgRmxhZyAqLworI2RlZmluZSBVUk9WRQkJKDEgPDwgNSkgLyogUmVjZWl2ZSBPdmVycnVuIEVycm9yIEZsYWcgKi8KKyNkZWZpbmUgVVJGUkUJCSgxIDw8IDQpIC8qIFJlY2VpdmUgRnJhbWluZyBFcnJvciBGbGFnICovCisjZGVmaW5lIFVSUFJFCQkoMSA8PCAzKSAvKiBSZWNlaXZlIFBhcml0eSBFcnJvciBGbGFnICovCisjZGVmaW5lIFJCRgkJKDEgPDwgMikgLyogUmVjZWl2ZSBCdWZmZXIgRnVsbCBGbGFnICovCisjZGVmaW5lIFRTQkUJCSgxIDw8IDEpIC8qIFRyYW5zbWl0IFNoaWZ0IEJ1ZmZlciBFbXB0eSBGbGFnICovCisjZGVmaW5lIFRCRQkJKDEgPDwgMCkgLyogVHJhbnNtaXQgQnVmZmVyIEVtcHR5IGZsYWcgKi8KKyNkZWZpbmUgVEJDT01QCQkoVFNCRSB8IFRCRSkKKworLyogSVJJRl9VQVJUNSAqLworI2RlZmluZSBSU0VJTQkJKDEgPDwgNikgLyogUmVjZWl2ZSBTdW0gRXJyb3IgRmxhZyBJUlEgTWFzayAqLworI2RlZmluZSBSQkZJTQkJKDEgPDwgMikgLyogUmVjZWl2ZSBCdWZmZXIgRnVsbCBGbGFnIElSUSBNYXNrICovCisjZGVmaW5lIFRTQkVJTQkJKDEgPDwgMSkgLyogVHJhbnNtaXQgU2hpZnQgQnVmZmVyIEVtcHR5IEZsYWcgSVJRIE1hc2sgKi8KKyNkZWZpbmUgVEJFSU0JCSgxIDw8IDApIC8qIFRyYW5zbWl0IEJ1ZmZlciBFbXB0eSBGbGFnIElSUSBNYXNrICovCisjZGVmaW5lIFJYX01BU0sJCShSU0VJTSAgfCBSQkZJTSkKKworLyogSVJJRl9DUkMwICovCisjZGVmaW5lIENSQ19SU1QJCSgxIDw8IDE1KSAvKiBDUkMgRW5naW5lIFJlc2V0ICovCisjZGVmaW5lIENSQ19DVF9NQVNLCTB4MEZGRgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworCQkJc3RydWN0dXJlCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RydWN0IHNoX3Npcl9zZWxmIHsKKwl2b2lkIF9faW9tZW0JCSptZW1iYXNlOworCXVuc2lnbmVkIGludAkJIGlycTsKKwlzdHJ1Y3QgY2xrCQkqY2xrOworCisJc3RydWN0IG5ldF9kZXZpY2UJKm5kZXY7CisKKwlzdHJ1Y3QgaXJsYXBfY2IJCSppcmxhcDsKKwlzdHJ1Y3QgcW9zX2luZm8JCXFvczsKKworCWlvYnVmZl90CQl0eF9idWZmOworCWlvYnVmZl90CQlyeF9idWZmOworfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKwkJCWNvbW1vbiBmdW5jdGlvbgorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIHNoX3Npcl93cml0ZShzdHJ1Y3Qgc2hfc2lyX3NlbGYgKnNlbGYsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKQoreworCWlvd3JpdGUxNihkYXRhLCBzZWxmLT5tZW1iYXNlICsgb2Zmc2V0KTsKK30KKworc3RhdGljIHUxNiBzaF9zaXJfcmVhZChzdHJ1Y3Qgc2hfc2lyX3NlbGYgKnNlbGYsIHUzMiBvZmZzZXQpCit7CisJcmV0dXJuIGlvcmVhZDE2KHNlbGYtPm1lbWJhc2UgKyBvZmZzZXQpOworfQorCitzdGF0aWMgdm9pZCBzaF9zaXJfdXBkYXRlX2JpdHMoc3RydWN0IHNoX3Npcl9zZWxmICpzZWxmLCB1MzIgb2Zmc2V0LAorCQkJICAgICAgIHUxNiBtYXNrLCB1MTYgZGF0YSkKK3sKKwl1MTYgb2xkLCBuZXc7CisKKwlvbGQgPSBzaF9zaXJfcmVhZChzZWxmLCBvZmZzZXQpOworCW5ldyA9IChvbGQgJiB+bWFzaykgfCBkYXRhOworCWlmIChvbGQgIT0gbmV3KQorCQlzaF9zaXJfd3JpdGUoc2VsZiwgb2Zmc2V0LCBuZXcpOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworCQkJQ1JDIGZ1bmN0aW9uCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgc2hfc2lyX2NyY19yZXNldChzdHJ1Y3Qgc2hfc2lyX3NlbGYgKnNlbGYpCit7CisJc2hfc2lyX3dyaXRlKHNlbGYsIElSSUZfQ1JDMCwgQ1JDX1JTVCk7Cit9CisKK3N0YXRpYyB2b2lkIHNoX3Npcl9jcmNfYWRkKHN0cnVjdCBzaF9zaXJfc2VsZiAqc2VsZiwgdTggZGF0YSkKK3sKKwlzaF9zaXJfd3JpdGUoc2VsZiwgSVJJRl9DUkMxLCAodTE2KWRhdGEpOworfQorCitzdGF0aWMgdTE2IHNoX3Npcl9jcmNfY250KHN0cnVjdCBzaF9zaXJfc2VsZiAqc2VsZikKK3sKKwlyZXR1cm4gQ1JDX0NUX01BU0sgJiBzaF9zaXJfcmVhZChzZWxmLCBJUklGX0NSQzApOworfQorCitzdGF0aWMgdTE2IHNoX3Npcl9jcmNfb3V0KHN0cnVjdCBzaF9zaXJfc2VsZiAqc2VsZikKK3sKKwlyZXR1cm4gc2hfc2lyX3JlYWQoc2VsZiwgSVJJRl9DUkM0KTsKK30KKworc3RhdGljIGludCBzaF9zaXJfY3JjX2luaXQoc3RydWN0IHNoX3Npcl9zZWxmICpzZWxmKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzZWxmLT5uZGV2LT5kZXY7CisJaW50IHJldCA9IC1FSU87CisJdTE2IHZhbDsKKworCXNoX3Npcl9jcmNfcmVzZXQoc2VsZik7CisKKwlzaF9zaXJfY3JjX2FkZChzZWxmLCAweENDKTsKKwlzaF9zaXJfY3JjX2FkZChzZWxmLCAweEY1KTsKKwlzaF9zaXJfY3JjX2FkZChzZWxmLCAweEYxKTsKKwlzaF9zaXJfY3JjX2FkZChzZWxmLCAweEE3KTsKKworCXZhbCA9IHNoX3Npcl9jcmNfY250KHNlbGYpOworCWlmICg0ICE9IHZhbCkgeworCQlkZXZfZXJyKGRldiwgIkNSQyBjb3VudCBlcnJvciAleFxuIiwgdmFsKTsKKwkJZ290byBjcmNfaW5pdF9vdXQ7CisJfQorCisJdmFsID0gc2hfc2lyX2NyY19vdXQoc2VsZik7CisJaWYgKDB4NTFERiAhPSB2YWwpIHsKKwkJZGV2X2VycihkZXYsICJDUkMgcmVzdWx0IGVycm9yJXhcbiIsIHZhbCk7CisJCWdvdG8gY3JjX2luaXRfb3V0OworCX0KKworCXJldCA9IDA7CisKK2NyY19pbml0X291dDoKKworCXNoX3Npcl9jcmNfcmVzZXQoc2VsZik7CisJcmV0dXJuIHJldDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKwkJCWJhdWQgcmF0ZSBmdW5jdGlvbnMKKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNDTEtfQkFTRSAxODQzMjAwIC8qIDEuODQzMk1IeiAqLworCitzdGF0aWMgdTMyIHNoX3Npcl9maW5kX3NjbGsoc3RydWN0IGNsayAqaXJkYV9jbGspCit7CisJc3RydWN0IGNwdWZyZXFfZnJlcXVlbmN5X3RhYmxlICpmcmVxX3RhYmxlID0gaXJkYV9jbGstPmZyZXFfdGFibGU7CisJc3RydWN0IGNsayAqcGNsayA9IGNsa19nZXQoTlVMTCwgInBlcmlwaGVyYWxfY2xrIik7CisJdTMyIGxpbWl0LCBtaW4gPSAweGZmZmZmZmZmLCB0bXA7CisJaW50IGksIGluZGV4ID0gMDsKKworCWxpbWl0ID0gY2xrX2dldF9yYXRlKHBjbGspOworCWNsa19wdXQocGNsayk7CisKKwkvKiBJckRBIGNhbiBub3Qgc2V0IG92ZXIgcGVyaXBoZXJhbF9jbGsgKi8KKwlmb3IgKGkgPSAwOworCSAgICAgZnJlcV90YWJsZVtpXS5mcmVxdWVuY3kgIT0gQ1BVRlJFUV9UQUJMRV9FTkQ7CisJICAgICBpKyspIHsKKwkJdTMyIGZyZXEgPSBmcmVxX3RhYmxlW2ldLmZyZXF1ZW5jeTsKKworCQlpZiAoZnJlcSA9PSBDUFVGUkVRX0VOVFJZX0lOVkFMSUQpCisJCQljb250aW51ZTsKKworCQkvKiBJckRBIHNob3VsZCBub3Qgb3ZlciBwZXJpcGhlcmFsX2NsayAqLworCQlpZiAoZnJlcSA+IGxpbWl0KQorCQkJY29udGludWU7CisKKwkJdG1wID0gZnJlcSAlIFNDTEtfQkFTRTsKKwkJaWYgKHRtcCA8IG1pbikgeworCQkJbWluID0gdG1wOworCQkJaW5kZXggPSBpOworCQl9CisJfQorCisJcmV0dXJuIGZyZXFfdGFibGVbaW5kZXhdLmZyZXF1ZW5jeTsKK30KKworI2RlZmluZSBFUlJfUk9VTkRJTkcoYSkgKChhICsgNTAwMCkgLyAxMDAwMCkKK3N0YXRpYyBpbnQgc2hfc2lyX3NldF9iYXVkcmF0ZShzdHJ1Y3Qgc2hfc2lyX3NlbGYgKnNlbGYsIHUzMiBiYXVkcmF0ZSkKK3sKKwlzdHJ1Y3QgY2xrICpjbGs7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnNlbGYtPm5kZXYtPmRldjsKKwl1MzIgcmF0ZTsKKwl1MTYgdWFiY2EsIHVhYmM7CisJdTE2IGlyYmNhLCBpcmJjOworCXUzMiBtaW4sIHJlcnIsIHRtcDsKKwlpbnQgaTsKKworCS8qIEJhdWQgUmF0ZSBFcnJvciBDb3JyZWN0aW9uIHggMTAwMDAgKi8KKwl1MzIgcmF0ZV9lcnJfYXJyYXlbXSA9IHsKKwkJMDAwMCwgMDYyNSwgMTI1MCwgMTg3NSwKKwkJMjUwMCwgMzEyNSwgMzc1MCwgNDM3NSwKKwkJNTAwMCwgNTYyNSwgNjI1MCwgNjg3NSwKKwkJNzUwMCwgODEyNSwgODc1MCwgOTM3NSwKKwl9OworCisJLyoKKwkgKiBGSVhNRQorCSAqCisJICogaXQgc3VwcG9ydCA5NjAwIG9ubHkgbm93CisJICovCisJc3dpdGNoIChiYXVkcmF0ZSkgeworCWNhc2UgOTYwMDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2VycihkZXYsICJ1bi1zdXBwb3J0ZWQgYmF1ZHJhdGUgJWRcbiIsIGJhdWRyYXRlKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJY2xrID0gY2xrX2dldChOVUxMLCAiaXJkYV9jbGsiKTsKKwlpZiAoIWNsaykgeworCQlkZXZfZXJyKGRldiwgImNhbiBub3QgZ2V0IGlyZGFfY2xrXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJY2xrX3NldF9yYXRlKGNsaywgc2hfc2lyX2ZpbmRfc2NsayhjbGspKTsKKwlyYXRlID0gY2xrX2dldF9yYXRlKGNsayk7CisJY2xrX3B1dChjbGspOworCisJZGV2X2RiZyhkZXYsICJzZWxlY3RlZCBzY2xrID0gJWRcbiIsIHJhdGUpOworCisJLyoKKwkgKiBDQUxDVUxBVElPTgorCSAqCisJICogMTg0MzIwMCA9IHN5c3RlbSByYXRlIC8gKGlyYmNhICsgKGlyYmMgKyAxKSkKKwkgKi8KKworCWlyYmMgPSByYXRlIC8gU0NMS19CQVNFOworCisJdG1wID0gcmF0ZSAtIChTQ0xLX0JBU0UgKiBpcmJjKTsKKwl0bXAgKj0gMTAwMDA7CisKKwlyZXJyID0gdG1wIC8gU0NMS19CQVNFOworCisJbWluID0gMHhmZmZmZmZmZjsKKwlpcmJjYSA9IDA7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmF0ZV9lcnJfYXJyYXkpOyBpKyspIHsKKwkJdG1wID0gYWJzKHJhdGVfZXJyX2FycmF5W2ldIC0gcmVycik7CisJCWlmIChtaW4gPiB0bXApIHsKKwkJCW1pbiA9IHRtcDsKKwkJCWlyYmNhID0gaTsKKwkJfQorCX0KKworCXRtcCA9IHJhdGUgLyAoaXJiYyArIEVSUl9ST1VORElORyhyYXRlX2Vycl9hcnJheVtpcmJjYV0pKTsKKwlpZiAoKFNDTEtfQkFTRSAvIDEwMCkgPCBhYnModG1wIC0gU0NMS19CQVNFKSkKKwkJZGV2X3dhcm4oZGV2LCAiSXJEQSBmcmVxIGVycm9yIG1hcmdpbiBvdmVyICVkXG4iLCB0bXApOworCisJZGV2X2RiZyhkZXYsICJ0YXJnZXQgPSAlZCwgcmVzdWx0ID0gJWQsIGluZnJhcmVkID0gJWQuJWRcbiIsCisJICAgICAgIFNDTEtfQkFTRSwgdG1wLCBpcmJjLCByYXRlX2Vycl9hcnJheVtpcmJjYV0pOworCisJaXJiY2EgPSAoaXJiY2EgJiAweEYpIDw8IDQ7CisJaXJiYyAgPSAoaXJiYyAtIDEpICYgMHhGOworCisJaWYgKCFpcmJjKSB7CisJCWRldl9lcnIoZGV2LCAic2hfc2lyIGNhbiBub3Qgc2V0IDAgaW4gSVJJRl9TSVIyXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJc2hfc2lyX3dyaXRlKHNlbGYsIElSSUZfU0lSMCwgSVJUUFcgfCBJUkVSUkMpOworCXNoX3Npcl93cml0ZShzZWxmLCBJUklGX1NJUjEsIGlyYmNhKTsKKwlzaF9zaXJfd3JpdGUoc2VsZiwgSVJJRl9TSVIyLCBpcmJjKTsKKworCS8qCisJICogQ0FMQ1VMQVRJT04KKwkgKgorCSAqIEJhdWRSYXRlW2Jwc10gPSBzeXN0ZW0gcmF0ZSAvICh1YWJjYSArICh1YWJjICsgMSkgeCAxNikKKwkgKi8KKworCXVhYmMgPSByYXRlIC8gYmF1ZHJhdGU7CisJdWFiYyA9ICh1YWJjIC8gMTYpIC0gMTsKKwl1YWJjID0gKHVhYmMgKyAxKSAqIDE2OworCisJdG1wID0gcmF0ZSAtICh1YWJjICogYmF1ZHJhdGUpOworCXRtcCAqPSAxMDAwMDsKKworCXJlcnIgPSB0bXAgLyBiYXVkcmF0ZTsKKworCW1pbiA9IDB4ZmZmZmZmZmY7CisJdWFiY2EgPSAwOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhdGVfZXJyX2FycmF5KTsgaSsrKSB7CisJCXRtcCA9IGFicyhyYXRlX2Vycl9hcnJheVtpXSAtIHJlcnIpOworCQlpZiAobWluID4gdG1wKSB7CisJCQltaW4gPSB0bXA7CisJCQl1YWJjYSA9IGk7CisJCX0KKwl9CisKKwl0bXAgPSByYXRlIC8gKHVhYmMgKyBFUlJfUk9VTkRJTkcocmF0ZV9lcnJfYXJyYXlbdWFiY2FdKSk7CisJaWYgKChiYXVkcmF0ZSAvIDEwMCkgPCBhYnModG1wIC0gYmF1ZHJhdGUpKQorCQlkZXZfd2FybihkZXYsICJVQVJUIGZyZXEgZXJyb3IgbWFyZ2luIG92ZXIgJWRcbiIsIHRtcCk7CisKKwlkZXZfZGJnKGRldiwgInRhcmdldCA9ICVkLCByZXN1bHQgPSAlZCwgdWFydCA9ICVkLiVkXG4iLAorCSAgICAgICBiYXVkcmF0ZSwgdG1wLAorCSAgICAgICB1YWJjLCByYXRlX2Vycl9hcnJheVt1YWJjYV0pOworCisJdWFiY2EgPSAodWFiY2EgJiAweEYpIDw8IDQ7CisJdWFiYyAgPSAodWFiYyAvIDE2KSAtIDE7CisKKwlzaF9zaXJfd3JpdGUoc2VsZiwgSVJJRl9VQVJUNiwgdWFiY2EpOworCXNoX3Npcl93cml0ZShzZWxmLCBJUklGX1VBUlQ3LCB1YWJjKTsKKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworCQkJaW9idWYgZnVuY3Rpb24KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IF9fc2hfc2lyX2luaXRfaW9idWYoaW9idWZmX3QgKmlvLCBpbnQgc2l6ZSkKK3sKKwlpby0+aGVhZCA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpby0+aGVhZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpby0+dHJ1ZXNpemUJPSBzaXplOworCWlvLT5pbl9mcmFtZQk9IEZBTFNFOworCWlvLT5zdGF0ZQk9IE9VVFNJREVfRlJBTUU7CisJaW8tPmRhdGEJPSBpby0+aGVhZDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaF9zaXJfcmVtb3ZlX2lvYnVmKHN0cnVjdCBzaF9zaXJfc2VsZiAqc2VsZikKK3sKKwlrZnJlZShzZWxmLT5yeF9idWZmLmhlYWQpOworCWtmcmVlKHNlbGYtPnR4X2J1ZmYuaGVhZCk7CisKKwlzZWxmLT5yeF9idWZmLmhlYWQgPSBOVUxMOworCXNlbGYtPnR4X2J1ZmYuaGVhZCA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgc2hfc2lyX2luaXRfaW9idWYoc3RydWN0IHNoX3Npcl9zZWxmICpzZWxmLCBpbnQgcnhzaXplLCBpbnQgdHhzaXplKQoreworCWludCBlcnIgPSAtRU5PTUVNOworCisJaWYgKHNlbGYtPnJ4X2J1ZmYuaGVhZCB8fAorCSAgICBzZWxmLT50eF9idWZmLmhlYWQpIHsKKwkJZGV2X2Vycigmc2VsZi0+bmRldi0+ZGV2LCAiaW9idWZmIGhhcyBhbHJlYWR5IGV4aXN0ZWQuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gX19zaF9zaXJfaW5pdF9pb2J1Zigmc2VsZi0+cnhfYnVmZiwgcnhzaXplKTsKKwlpZiAoZXJyKQorCQlnb3RvIGlvYnVmX2VycjsKKworCWVyciA9IF9fc2hfc2lyX2luaXRfaW9idWYoJnNlbGYtPnR4X2J1ZmYsIHR4c2l6ZSk7CisKK2lvYnVmX2VycjoKKwlpZiAoZXJyKQorCQlzaF9zaXJfcmVtb3ZlX2lvYnVmKHNlbGYpOworCisJcmV0dXJuIGVycjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisKKwkJCXN0YXR1cyBmdW5jdGlvbgorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIHNoX3Npcl9jbGVhcl9hbGxfZXJyKHN0cnVjdCBzaF9zaXJfc2VsZiAqc2VsZikKK3sKKwkvKiBDbGVhciBlcnJvciBmbGFnIGZvciByZWNlaXZlIHB1bHNlIHdpZHRoICovCisJc2hfc2lyX3VwZGF0ZV9iaXRzKHNlbGYsIElSSUZfU0lSMCwgSVJFUlJDLCBJUkVSUkMpOworCisJLyogQ2xlYXIgZnJhbWUgLyBFT0YgZXJyb3IgZmxhZyAqLworCXNoX3Npcl93cml0ZShzZWxmLCBJUklGX1NJUl9GTEcsIDB4ZmZmZik7CisKKwkvKiBDbGVhciBhbGwgc3RhdHVzIGVycm9yICovCisJc2hfc2lyX3dyaXRlKHNlbGYsIElSSUZfVUFSVF9TVFMyLCAwKTsKK30KKworc3RhdGljIHZvaWQgc2hfc2lyX3NldF9waGFzZShzdHJ1Y3Qgc2hfc2lyX3NlbGYgKnNlbGYsIGludCBwaGFzZSkKK3sKKwl1MTYgdWFydDUgPSAwOworCXUxNiB1YXJ0MCA9IDA7CisKKwlzd2l0Y2ggKHBoYXNlKSB7CisJY2FzZSBUWF9QSEFTRToKKwkJdWFydDUgPSBUQkVJTTsKKwkJdWFydDAgPSBUQkVDIHwgVElFOworCQlicmVhazsKKwljYXNlIFRYX0NPTVBfUEhBU0U6CisJCXVhcnQ1ID0gVFNCRUlNOworCQl1YXJ0MCA9IFRJRTsKKwkJYnJlYWs7CisJY2FzZSBSWF9QSEFTRToKKwkJdWFydDUgPSBSWF9NQVNLOworCQl1YXJ0MCA9IFJJRTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJc2hfc2lyX3dyaXRlKHNlbGYsIElSSUZfVUFSVDUsIHVhcnQ1KTsKKwlzaF9zaXJfd3JpdGUoc2VsZiwgSVJJRl9VQVJUMCwgdWFydDApOworfQorCitzdGF0aWMgaW50IHNoX3Npcl9pc193aGljaF9waGFzZShzdHJ1Y3Qgc2hfc2lyX3NlbGYgKnNlbGYpCit7CisJdTE2IHZhbCA9IHNoX3Npcl9yZWFkKHNlbGYsIElSSUZfVUFSVDUpOworCisJaWYgKHZhbCAmIFRCRUlNKQorCQlyZXR1cm4gVFhfUEhBU0U7CisKKwlpZiAodmFsICYgVFNCRUlNKQorCQlyZXR1cm4gVFhfQ09NUF9QSEFTRTsKKworCWlmICh2YWwgJiBSWF9NQVNLKQorCQlyZXR1cm4gUlhfUEhBU0U7CisKKwlyZXR1cm4gTk9ORV9QSEFTRTsKK30KKworc3RhdGljIHZvaWQgc2hfc2lyX3R4KHN0cnVjdCBzaF9zaXJfc2VsZiAqc2VsZiwgaW50IHBoYXNlKQoreworCXN3aXRjaCAocGhhc2UpIHsKKwljYXNlIFRYX1BIQVNFOgorCQlpZiAoMCA+PSBzZWxmLT50eF9idWZmLmxlbikgeworCQkJc2hfc2lyX3NldF9waGFzZShzZWxmLCBUWF9DT01QX1BIQVNFKTsKKwkJfSBlbHNlIHsKKwkJCXNoX3Npcl93cml0ZShzZWxmLCBJUklGX1VBUlQzLCBzZWxmLT50eF9idWZmLmRhdGFbMF0pOworCQkJc2VsZi0+dHhfYnVmZi5sZW4tLTsKKwkJCXNlbGYtPnR4X2J1ZmYuZGF0YSsrOworCQl9CisJCWJyZWFrOworCWNhc2UgVFhfQ09NUF9QSEFTRToKKwkJc2hfc2lyX3NldF9waGFzZShzZWxmLCBSWF9QSEFTRSk7CisJCW5ldGlmX3dha2VfcXVldWUoc2VsZi0+bmRldik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJnNlbGYtPm5kZXYtPmRldiwgInNob3VsZCBub3QgaGFwcGVuXG4iKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IHNoX3Npcl9yZWFkX2RhdGEoc3RydWN0IHNoX3Npcl9zZWxmICpzZWxmKQoreworCXUxNiB2YWw7CisJaW50IHRpbWVvdXQgPSAxMDI0OworCisJd2hpbGUgKHRpbWVvdXQtLSkgeworCQl2YWwgPSBzaF9zaXJfcmVhZChzZWxmLCBJUklGX1VBUlQxKTsKKworCQkvKiBkYXRhIGdldCAqLworCQlpZiAodmFsICYgUkJGKSB7CisJCQlpZiAodmFsICYgKFVSU01FIHwgVVJPVkUgfCBVUkZSRSB8IFVSUFJFKSkKKwkJCQlicmVhazsKKworCQkJcmV0dXJuIChpbnQpc2hfc2lyX3JlYWQoc2VsZiwgSVJJRl9VQVJUNCk7CisJCX0KKworCQl1ZGVsYXkoMSk7CisJfQorCisJZGV2X2Vycigmc2VsZi0+bmRldi0+ZGV2LCAiVUFSVDEgJTA0eCA6IFNUQVRVUyAlMDR4XG4iLAorCQl2YWwsIHNoX3Npcl9yZWFkKHNlbGYsIElSSUZfVUFSVF9TVFMyKSk7CisKKwkvKiByZWFkIGRhdGEgcmVnaXN0ZXIgZm9yIGNsZWFyIGVycm9yICovCisJc2hfc2lyX3JlYWQoc2VsZiwgSVJJRl9VQVJUNCk7CisKKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIHNoX3Npcl9yeChzdHJ1Y3Qgc2hfc2lyX3NlbGYgKnNlbGYpCit7CisJaW50IHRpbWVvdXQgPSAxMDI0OworCWludCBkYXRhOworCisJd2hpbGUgKHRpbWVvdXQtLSkgeworCQlkYXRhID0gc2hfc2lyX3JlYWRfZGF0YShzZWxmKTsKKwkJaWYgKGRhdGEgPCAwKQorCQkJYnJlYWs7CisKKwkJYXN5bmNfdW53cmFwX2NoYXIoc2VsZi0+bmRldiwgJnNlbGYtPm5kZXYtPnN0YXRzLAorCQkJCSAgJnNlbGYtPnJ4X2J1ZmYsICh1OClkYXRhKTsKKwkJc2VsZi0+bmRldi0+bGFzdF9yeCA9IGppZmZpZXM7CisKKwkJaWYgKEVPRkQgJiBzaF9zaXJfcmVhZChzZWxmLCBJUklGX1NJUl9GUk0pKQorCQkJY29udGludWU7CisKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2hfc2lyX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCit7CisJc3RydWN0IHNoX3Npcl9zZWxmICpzZWxmID0gZGV2X2lkOworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzZWxmLT5uZGV2LT5kZXY7CisJaW50IHBoYXNlID0gc2hfc2lyX2lzX3doaWNoX3BoYXNlKHNlbGYpOworCisJc3dpdGNoIChwaGFzZSkgeworCWNhc2UgVFhfQ09NUF9QSEFTRToKKwljYXNlIFRYX1BIQVNFOgorCQlzaF9zaXJfdHgoc2VsZiwgcGhhc2UpOworCQlicmVhazsKKwljYXNlIFJYX1BIQVNFOgorCQlpZiAoc2hfc2lyX3JlYWQoc2VsZiwgSVJJRl9TSVIzKSkKKwkJCWRldl9lcnIoZGV2LCAicmN2IHB1bHNlIHdpZHRoIGVycm9yIG9jY3VycmVkXG4iKTsKKworCQlzaF9zaXJfcngoc2VsZik7CisJCXNoX3Npcl9jbGVhcl9hbGxfZXJyKHNlbGYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKGRldiwgInVua25vd24gaW50ZXJydXB0XG4iKTsKKwl9CisKKwkgcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworCQkJbmV0X2RldmljZV9vcHMgZnVuY3Rpb24KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IHNoX3Npcl9oYXJkX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IHNoX3Npcl9zZWxmICpzZWxmID0gbmV0ZGV2X3ByaXYobmRldik7CisJaW50IHNwZWVkID0gaXJkYV9nZXRfbmV4dF9zcGVlZChza2IpOworCisJaWYgKCgwIDwgc3BlZWQpICYmCisJICAgICg5NjAwICE9IHNwZWVkKSkgeworCQlkZXZfZXJyKCZuZGV2LT5kZXYsICJzdXBwb3J0IDk2MDAgb25seSAoJWQpXG4iLCBzcGVlZCk7CisJCXJldHVybiAtRUlPOworCX0KKworCW5ldGlmX3N0b3BfcXVldWUobmRldik7CisKKwlzZWxmLT50eF9idWZmLmRhdGEgPSBzZWxmLT50eF9idWZmLmhlYWQ7CisJc2VsZi0+dHhfYnVmZi5sZW4gPSAwOworCWlmIChza2ItPmxlbikKKwkJc2VsZi0+dHhfYnVmZi5sZW4gPSBhc3luY193cmFwX3NrYihza2IsIHNlbGYtPnR4X2J1ZmYuZGF0YSwKKwkJCQkJCSAgIHNlbGYtPnR4X2J1ZmYudHJ1ZXNpemUpOworCisJc2hfc2lyX3NldF9waGFzZShzZWxmLCBUWF9QSEFTRSk7CisJZGV2X2tmcmVlX3NrYihza2IpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hfc2lyX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcmVxLCBpbnQgY21kKQoreworCS8qCisJICogRklYTUUKKwkgKgorCSAqIFRoaXMgZnVuY3Rpb24gaXMgbmVlZGVkIGZvciBpcmRhIGZyYW1ld29yay4KKwkgKiBCdXQgbm90aGluZyB0byBkbyBub3cKKwkgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzaF9zaXJfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCit7CisJc3RydWN0IHNoX3Npcl9zZWxmICpzZWxmID0gbmV0ZGV2X3ByaXYobmRldik7CisKKwlyZXR1cm4gJnNlbGYtPm5kZXYtPnN0YXRzOworfQorCitzdGF0aWMgaW50IHNoX3Npcl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBzaF9zaXJfc2VsZiAqc2VsZiA9IG5ldGRldl9wcml2KG5kZXYpOworCWludCBlcnI7CisKKwljbGtfZW5hYmxlKHNlbGYtPmNsayk7CisJZXJyID0gc2hfc2lyX2NyY19pbml0KHNlbGYpOworCWlmIChlcnIpCisJCWdvdG8gb3Blbl9lcnI7CisKKwlzaF9zaXJfc2V0X2JhdWRyYXRlKHNlbGYsIDk2MDApOworCisJc2VsZi0+aXJsYXAgPSBpcmxhcF9vcGVuKG5kZXYsICZzZWxmLT5xb3MsIERSSVZFUl9OQU1FKTsKKwlpZiAoIXNlbGYtPmlybGFwKQorCQlnb3RvIG9wZW5fZXJyOworCisJLyoKKwkgKiBOb3cgZW5hYmxlIHRoZSBpbnRlcnJ1cHQgdGhlbiBzdGFydCB0aGUgcXVldWUKKwkgKi8KKwlzaF9zaXJfdXBkYXRlX2JpdHMoc2VsZiwgSVJJRl9TSVJfRlJNLCBGUlAsIEZSUCk7CisJc2hfc2lyX3JlYWQoc2VsZiwgSVJJRl9VQVJUMSk7IC8qIGZsYWcgY2xlYXIgKi8KKwlzaF9zaXJfcmVhZChzZWxmLCBJUklGX1VBUlQ0KTsgLyogZmxhZyBjbGVhciAqLworCXNoX3Npcl9zZXRfcGhhc2Uoc2VsZiwgUlhfUEhBU0UpOworCisJbmV0aWZfc3RhcnRfcXVldWUobmRldik7CisKKwlkZXZfaW5mbygmc2VsZi0+bmRldi0+ZGV2LCAib3BlbmVkXG4iKTsKKworCXJldHVybiAwOworCitvcGVuX2VycjoKKwljbGtfZGlzYWJsZShzZWxmLT5jbGspOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBzaF9zaXJfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKK3sKKwlzdHJ1Y3Qgc2hfc2lyX3NlbGYgKnNlbGYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKworCS8qIFN0b3AgSXJMQVAgKi8KKwlpZiAoc2VsZi0+aXJsYXApIHsKKwkJaXJsYXBfY2xvc2Uoc2VsZi0+aXJsYXApOworCQlzZWxmLT5pcmxhcCA9IE5VTEw7CisJfQorCisJbmV0aWZfc3RvcF9xdWV1ZShuZGV2KTsKKworCWRldl9pbmZvKCZuZGV2LT5kZXYsICJzdG9wZWRcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgc2hfc2lyX25kbyA9IHsKKwkubmRvX29wZW4JCT0gc2hfc2lyX29wZW4sCisJLm5kb19zdG9wCQk9IHNoX3Npcl9zdG9wLAorCS5uZG9fc3RhcnRfeG1pdAkJPSBzaF9zaXJfaGFyZF94bWl0LAorCS5uZG9fZG9faW9jdGwJCT0gc2hfc2lyX2lvY3RsLAorCS5uZG9fZ2V0X3N0YXRzCQk9IHNoX3Npcl9zdGF0cywKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisJCQlwbGF0Zm9ybV9kcml2ZXIgZnVuY3Rpb24KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzaF9zaXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjsKKwlzdHJ1Y3Qgc2hfc2lyX3NlbGYgKnNlbGY7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJY2hhciBjbGtfbmFtZVs4XTsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJdW5zaWduZWQgaW50IGlycTsKKwlpbnQgZXJyID0gLUVOT01FTTsKKworCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoIXJlcyB8fCBpcnEgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vdCBlbm91Z2ggcGxhdGZvcm0gcmVzb3VyY2VzLlxuIik7CisJCWdvdG8gZXhpdDsKKwl9CisKKwluZGV2ID0gYWxsb2NfaXJkYWRldihzaXplb2YoKnNlbGYpKTsKKwlpZiAoIW5kZXYpCisJCWdvdG8gZXhpdDsKKworCWJhc2UgPSBpb3JlbWFwX25vY2FjaGUocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoIWJhc2UpIHsKKwkJZXJyID0gLUVOWElPOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gaW9yZW1hcC5cbiIpOworCQlnb3RvIGVycl9tZW1fMTsKKwl9CisKKwlzZWxmID0gbmV0ZGV2X3ByaXYobmRldik7CisJZXJyID0gc2hfc2lyX2luaXRfaW9idWYoc2VsZiwgSVJEQV9TS0JfTUFYX01UVSwgSVJEQV9TSVJfTUFYX0ZSQU1FKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9tZW1fMjsKKworCXNucHJpbnRmKGNsa19uYW1lLCBzaXplb2YoY2xrX25hbWUpLCAiaXJkYSVkIiwgcGRldi0+aWQpOworCXNlbGYtPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgY2xrX25hbWUpOworCWlmIChJU19FUlIoc2VsZi0+Y2xrKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZ2V0IGNsb2NrIFwiJXNcIlxuIiwgY2xrX25hbWUpOworCQlnb3RvIGVycl9tZW1fMzsKKwl9CisKKwlpcmRhX2luaXRfbWF4X3Fvc19jYXBhYmlsaWVzKCZzZWxmLT5xb3MpOworCisJbmRldi0+bmV0ZGV2X29wcwk9ICZzaF9zaXJfbmRvOworCW5kZXYtPmlycQkJPSBpcnE7CisKKwlzZWxmLT5tZW1iYXNlCQkJPSBiYXNlOworCXNlbGYtPm5kZXYJCQk9IG5kZXY7CisJc2VsZi0+cW9zLmJhdWRfcmF0ZS5iaXRzCSY9IElSXzk2MDA7IC8qIEZJWE1FICovCisJc2VsZi0+cW9zLm1pbl90dXJuX3RpbWUuYml0cwk9IDE7IC8qIDEwIG1zIG9yIG1vcmUgKi8KKworCWlyZGFfcW9zX2JpdHNfdG9fdmFsdWUoJnNlbGYtPnFvcyk7CisKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7CisJaWYgKGVycikKKwkJZ290byBlcnJfbWVtXzQ7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuZGV2KTsKKworCWlmIChyZXF1ZXN0X2lycShpcnEsIHNoX3Npcl9pcnEsIElSUUZfRElTQUJMRUQsICJzaF9zaXIiLCBzZWxmKSkgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIGF0dGFjaCBzaF9zaXIgaW50ZXJydXB0XG4iKTsKKwkJZ290byBlcnJfbWVtXzQ7CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIlN1cGVySCBJckRBIHByb2JlZFxuIik7CisKKwlnb3RvIGV4aXQ7CisKK2Vycl9tZW1fNDoKKwljbGtfcHV0KHNlbGYtPmNsayk7CitlcnJfbWVtXzM6CisJc2hfc2lyX3JlbW92ZV9pb2J1ZihzZWxmKTsKK2Vycl9tZW1fMjoKKwlpb3VubWFwKHNlbGYtPm1lbWJhc2UpOworZXJyX21lbV8xOgorCWZyZWVfbmV0ZGV2KG5kZXYpOworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzaF9zaXJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3Qgc2hfc2lyX3NlbGYgKnNlbGYgPSBuZXRkZXZfcHJpdihuZGV2KTsKKworCWlmICghc2VsZikKKwkJcmV0dXJuIDA7CisKKwl1bnJlZ2lzdGVyX25ldGRldihuZGV2KTsKKwljbGtfcHV0KHNlbGYtPmNsayk7CisJc2hfc2lyX3JlbW92ZV9pb2J1ZihzZWxmKTsKKwlpb3VubWFwKHNlbGYtPm1lbWJhc2UpOworCWZyZWVfbmV0ZGV2KG5kZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNoX3Npcl9kcml2ZXIgPSB7CisJLnByb2JlICAgPSBzaF9zaXJfcHJvYmUsCisJLnJlbW92ZSAgPSBfX2RldmV4aXRfcChzaF9zaXJfcmVtb3ZlKSwKKwkuZHJpdmVyICA9IHsKKwkJLm5hbWUgPSBEUklWRVJfTkFNRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2hfc2lyX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzaF9zaXJfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNoX3Npcl9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNoX3Npcl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzaF9zaXJfaW5pdCk7Cittb2R1bGVfZXhpdChzaF9zaXJfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkt1bmlub3JpIE1vcmltb3RvIDxtb3JpbW90by5rdW5pbm9yaUByZW5lc2FzLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU3VwZXJIIElyREEgZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmMgYi9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmMKaW5kZXggZmRkYjRlZi4uNjUzM2MwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdmlhX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh2aWFfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1ZJQSwgMHg4MjMxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELDAsMCwwIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1ZJQSwgMHgzMTA5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELDAsMCwxIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1ZJQSwgMHgzMDc0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELDAsMCwyIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuYyBiL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCmluZGV4IGJkM2M2YjUuLjIwOWQ0YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jCkBAIC01OSw3ICs1OSw3IEBACiAKIHN0YXRpYyAvKiBjb25zdCAqLyBjaGFyIGRyaXZlcm5hbWVbXSA9IERSSVZFUl9OQU1FOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdmxzaV9pcmRhX3RhYmxlIFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHZsc2lfaXJkYV90YWJsZSkgPSB7CiAJewogCQkuY2xhc3MgPSAgICAgICAgUENJX0NMQVNTX1dJUkVMRVNTX0lSREEgPDwgOCwKIAkJLmNsYXNzX21hc2sgPQlQQ0lfQ0xBU1NfU1VCQ0xBU1NfTUFTSyA8PCA4LCAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lzYS1za2VsZXRvbi5jIGIvZHJpdmVycy9uZXQvaXNhLXNrZWxldG9uLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0ZDA1MDIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvaXNhLXNrZWxldG9uLmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MTggKzAsMCBAQAotLyogaXNhLXNrZWxldG9uLmM6IEEgbmV0d29yayBkcml2ZXIgb3V0bGluZSBmb3IgbGludXguCi0gKgotICoJV3JpdHRlbiAxOTkzLTk0IGJ5IERvbmFsZCBCZWNrZXIuCi0gKgotICoJQ29weXJpZ2h0IDE5OTMgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IGFzIHJlcHJlc2VudGVkIGJ5IHRoZQotICoJRGlyZWN0b3IsIE5hdGlvbmFsIFNlY3VyaXR5IEFnZW5jeS4KLSAqCi0gKglUaGlzIHNvZnR3YXJlIG1heSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zCi0gKglvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLgotICoKLSAqCVRoZSBhdXRob3IgbWF5IGJlIHJlYWNoZWQgYXMgYmVja2VyQHNjeWxkLmNvbSwgb3IgQy9PCi0gKglTY3lsZCBDb21wdXRpbmcgQ29ycG9yYXRpb24KLSAqCTQxMCBTZXZlcm4gQXZlLiwgU3VpdGUgMjEwCi0gKglBbm5hcG9saXMgTUQgMjE0MDMKLSAqCi0gKglUaGlzIGZpbGUgaXMgYW4gb3V0bGluZSBmb3Igd3JpdGluZyBhIG5ldHdvcmsgZGV2aWNlIGRyaXZlciBmb3IgdGhlCi0gKgl0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbS4KLSAqCi0gKglUbyB3cml0ZSAob3IgdW5kZXJzdGFuZCkgYSBkcml2ZXIsIGhhdmUgYSBsb29rIGF0IHRoZSAibG9vcGJhY2suYyIgZmlsZSB0bwotICoJZ2V0IGEgZmVlbCBvZiB3aGF0IGlzIGdvaW5nIG9uLCBhbmQgdGhlbiB1c2UgdGhlIGNvZGUgYmVsb3cgYXMgYSBza2VsZXRvbgotICoJZm9yIHRoZSBuZXcgZHJpdmVyLgotICoKLSAqLwotCi1zdGF0aWMgY29uc3QgY2hhciAqdmVyc2lvbiA9Ci0JImlzYS1za2VsZXRvbi5jOnYxLjUxIDkvMjQvOTQgRG9uYWxkIEJlY2tlciAoYmVja2VyQGNlc2Rpcy5nc2ZjLm5hc2EuZ292KVxuIjsKLQotLyoKLSAqICBTb3VyY2VzOgotICoJTGlzdCB5b3VyIHNvdXJjZXMgb2YgcHJvZ3JhbW1pbmcgaW5mb3JtYXRpb24gdG8gZG9jdW1lbnQgdGhhdAotICoJdGhlIGRyaXZlciBpcyB5b3VyIG93biBjcmVhdGlvbiwgYW5kIGdpdmUgZHVlIGNyZWRpdCB0byBvdGhlcnMKLSAqCXRoYXQgY29udHJpYnV0ZWQgdG8gdGhlIHdvcmsuIFJlbWVtYmVyIHRoYXQgR05VIHByb2plY3QgY29kZQotICoJY2Fubm90IHVzZSBwcm9wcmlldGFyeSBvciB0cmFkZSBzZWNyZXQgaW5mb3JtYXRpb24uIEludGVyZmFjZQotICoJZGVmaW5pdGlvbnMgYXJlIGdlbmVyYWxseSBjb25zaWRlcmVkIG5vbi1jb3B5cmlnaHRhYmxlIHRvIHRoZQotICoJZXh0ZW50IHRoYXQgdGhlIHNhbWUgbmFtZXMgYW5kIHN0cnVjdHVyZXMgbXVzdCBiZSB1c2VkIHRvIGJlCi0gKgljb21wYXRpYmxlLgotICoKLSAqCUZpbmFsbHksIGtlZXAgaW4gbWluZCB0aGF0IHRoZSBMaW51eCBrZXJuZWwgaXMgaGFzIGFuIEFQSSwgbm90Ci0gKglBQkkuIFByb3ByaWV0YXJ5IG9iamVjdC1jb2RlLW9ubHkgZGlzdHJpYnV0aW9ucyBhcmUgbm90IHBlcm1pdHRlZAotICoJdW5kZXIgdGhlIEdQTC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9mY250bC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGxpbnV4L2luLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLQotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vZG1hLmg+Ci0KLS8qCi0gKiBUaGUgbmFtZSBvZiB0aGUgY2FyZC4gSXMgdXNlZCBmb3IgbWVzc2FnZXMgYW5kIGluIHRoZSByZXF1ZXN0cyBmb3IKLSAqIGlvIHJlZ2lvbnMsIGlycXMgYW5kIGRtYSBjaGFubmVscwotICovCi1zdGF0aWMgY29uc3QgY2hhciogY2FyZG5hbWUgPSAibmV0Y2FyZCI7Ci0KLS8qIEZpcnN0LCBhIGZldyBkZWZpbml0aW9ucyB0aGF0IHRoZSBicmF2ZSBtaWdodCBjaGFuZ2UuICovCi0KLS8qIEEgemVyby10ZXJtaW5hdGVkIGxpc3Qgb2YgSS9PIGFkZHJlc3NlcyB0byBiZSBwcm9iZWQuICovCi1zdGF0aWMgdW5zaWduZWQgaW50IG5ldGNhcmRfcG9ydGxpc3RbXSBfX2luaXRkYXRhID0KLSAgIHsgMHgyMDAsIDB4MjQwLCAweDI4MCwgMHgyQzAsIDB4MzAwLCAweDMyMCwgMHgzNDAsIDB9OwotCi0vKiB1c2UgMCBmb3IgcHJvZHVjdGlvbiwgMSBmb3IgdmVyaWZpY2F0aW9uLCA+MiBmb3IgZGVidWcgKi8KLSNpZm5kZWYgTkVUX0RFQlVHCi0jZGVmaW5lIE5FVF9ERUJVRyAyCi0jZW5kaWYKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbmV0X2RlYnVnID0gTkVUX0RFQlVHOwotCi0vKiBUaGUgbnVtYmVyIG9mIGxvdyBJL08gcG9ydHMgdXNlZCBieSB0aGUgZXRoZXJjYXJkLiAqLwotI2RlZmluZSBORVRDQVJEX0lPX0VYVEVOVAkzMgotCi0jZGVmaW5lIE1ZX1RYX1RJTUVPVVQgICgoNDAwKkhaKS8xMDAwKQotCi0vKiBJbmZvcm1hdGlvbiB0aGF0IG5lZWQgdG8gYmUga2VwdCBmb3IgZWFjaCBib2FyZC4gKi8KLXN0cnVjdCBuZXRfbG9jYWwgewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwotCWxvbmcgb3Blbl90aW1lOwkJCS8qIFVzZWxlc3MgZXhhbXBsZSBsb2NhbCBpbmZvLiAqLwotCi0JLyogVHggY29udHJvbCBsb2NrLiAgVGhpcyBwcm90ZWN0cyB0aGUgdHJhbnNtaXQgYnVmZmVyIHJpbmcKLQkgKiBzdGF0ZSBhbG9uZyB3aXRoIHRoZSAidHggZnVsbCIgc3RhdGUgb2YgdGhlIGRyaXZlci4gIFRoaXMKLQkgKiBtZWFucyBhbGwgbmV0aWZfcXVldWUgZmxvdyBjb250cm9sIGFjdGlvbnMgYXJlIHByb3RlY3RlZAotCSAqIGJ5IHRoaXMgbG9jayBhcyB3ZWxsLgotCSAqLwotCXNwaW5sb2NrX3QgbG9jazsKLX07Ci0KLS8qIFRoZSBzdGF0aW9uIChldGhlcm5ldCkgYWRkcmVzcyBwcmVmaXgsIHVzZWQgZm9yIElEaW5nIHRoZSBib2FyZC4gKi8KLSNkZWZpbmUgU0FfQUREUjAgMHgwMAotI2RlZmluZSBTQV9BRERSMSAweDQyCi0jZGVmaW5lIFNBX0FERFIyIDB4NjUKLQotLyogSW5kZXggdG8gZnVuY3Rpb25zLCBhcyBmdW5jdGlvbiBwcm90b3R5cGVzLiAqLwotCi1zdGF0aWMgaW50CW5ldGNhcmRfcHJvYmUxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpb2FkZHIpOwotc3RhdGljIGludAluZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQJbmV0X3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIGlycXJldHVybl90IG5ldF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKLXN0YXRpYyB2b2lkCW5ldF9yeChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQJbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdAluZXRfZGV2aWNlX3N0YXRzICpuZXRfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQJc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgICAgIG5ldF90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotCi0KLS8qIEV4YW1wbGUgcm91dGluZXMgeW91IG11c3Qgd3JpdGUgOy0+LiAqLwotI2RlZmluZSB0eF9kb25lKGRldikgMQotc3RhdGljIHZvaWQJaGFyZHdhcmVfc2VuZF9wYWNrZXQoc2hvcnQgaW9hZGRyLCBjaGFyICpidWYsIGludCBsZW5ndGgpOwotc3RhdGljIHZvaWQgCWNoaXBzZXRfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3RhcnRwKTsKLQotLyoKLSAqIENoZWNrIGZvciBhIG5ldHdvcmsgYWRhcHRvciBvZiB0aGlzIHR5cGUsIGFuZCByZXR1cm4gJzAnIGlmZiBvbmUgZXhpc3RzLgotICogSWYgZGV2LT5iYXNlX2FkZHIgPT0gMCwgcHJvYmUgYWxsIGxpa2VseSBsb2NhdGlvbnMuCi0gKiBJZiBkZXYtPmJhc2VfYWRkciA9PSAxLCBhbHdheXMgcmV0dXJuIGZhaWx1cmUuCi0gKiBJZiBkZXYtPmJhc2VfYWRkciA9PSAyLCBhbGxvY2F0ZSBzcGFjZSBmb3IgdGhlIGRldmljZSBhbmQgcmV0dXJuIHN1Y2Nlc3MKLSAqIChkZXRhY2hhYmxlIGRldmljZXMgb25seSkuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGRvX25ldGNhcmRfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlpbnQgaTsKLQlpbnQgYmFzZV9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0JaW50IGlycSA9IGRldi0+aXJxOwotCi0JaWYgKGJhc2VfYWRkciA+IDB4MWZmKSAgICAvKiBDaGVjayBhIHNpbmdsZSBzcGVjaWZpZWQgbG9jYXRpb24uICovCi0JCXJldHVybiBuZXRjYXJkX3Byb2JlMShkZXYsIGJhc2VfYWRkcik7Ci0JZWxzZSBpZiAoYmFzZV9hZGRyICE9IDApICAvKiBEb24ndCBwcm9iZSBhdCBhbGwuICovCi0JCXJldHVybiAtRU5YSU87Ci0KLQlmb3IgKGkgPSAwOyBuZXRjYXJkX3BvcnRsaXN0W2ldOyBpKyspIHsKLQkJaW50IGlvYWRkciA9IG5ldGNhcmRfcG9ydGxpc3RbaV07Ci0JCWlmIChuZXRjYXJkX3Byb2JlMShkZXYsIGlvYWRkcikgPT0gMCkKLQkJCXJldHVybiAwOwotCQlkZXYtPmlycSA9IGlycTsKLQl9Ci0KLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotc3RhdGljIHZvaWQgY2xlYW51cF9jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0jaWZkZWYganVtcGVyZWRfZG1hCi0JZnJlZV9kbWEoZGV2LT5kbWEpOwotI2VuZGlmCi0jaWZkZWYganVtcGVyZWRfaW50ZXJydXB0cwotCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotI2VuZGlmCi0JcmVsZWFzZV9yZWdpb24oZGV2LT5iYXNlX2FkZHIsIE5FVENBUkRfSU9fRVhURU5UKTsKLX0KLQotI2lmbmRlZiBNT0RVTEUKLXN0cnVjdCBuZXRfZGV2aWNlICogX19pbml0IG5ldGNhcmRfcHJvYmUoaW50IHVuaXQpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgbmV0X2xvY2FsKSk7Ci0JaW50IGVycjsKLQotCWlmICghZGV2KQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKLQotCXNwcmludGYoZGV2LT5uYW1lLCAiZXRoJWQiLCB1bml0KTsKLQluZXRkZXZfYm9vdF9zZXR1cF9jaGVjayhkZXYpOwotCi0JZXJyID0gZG9fbmV0Y2FyZF9wcm9iZShkZXYpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCXJldHVybiBkZXY7Ci1vdXQ6Ci0JZnJlZV9uZXRkZXYoZGV2KTsKLQlyZXR1cm4gRVJSX1BUUihlcnIpOwotfQotI2VuZGlmCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0Y2FyZF9uZXRkZXZfb3BzID0gewotCS5uZG9fb3BlbgkJPSBuZXRfb3BlbiwKLQkubmRvX3N0b3AJCT0gbmV0X2Nsb3NlLAotCS5uZG9fc3RhcnRfeG1pdAkJPSBuZXRfc2VuZF9wYWNrZXQsCi0JLm5kb19nZXRfc3RhdHMJCT0gbmV0X2dldF9zdGF0cywKLQkubmRvX3NldF9tdWx0aWNhc3RfbGlzdAk9IHNldF9tdWx0aWNhc3RfbGlzdCwKLQkubmRvX3R4X3RpbWVvdXQJCT0gbmV0X3R4X3RpbWVvdXQsCi0JLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCi0JLm5kb19jaGFuZ2VfbXR1CQk9IGV0aF9jaGFuZ2VfbXR1LAotfTsKLQotLyoKLSAqIFRoaXMgaXMgdGhlIHJlYWwgcHJvYmUgcm91dGluZS4gTGludXggaGFzIGEgaGlzdG9yeSBvZiBmcmllbmRseSBkZXZpY2UKLSAqIHByb2JlcyBvbiB0aGUgSVNBIGJ1cy4gQSBnb29kIGRldmljZSBwcm9iZXMgYXZvaWRzIGRvaW5nIHdyaXRlcywgYW5kCi0gKiB2ZXJpZmllcyB0aGF0IHRoZSBjb3JyZWN0IGRldmljZSBleGlzdHMgYW5kIGZ1bmN0aW9ucy4KLSAqLwotc3RhdGljIGludCBfX2luaXQgbmV0Y2FyZF9wcm9iZTEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGlvYWRkcikKLXsKLQlzdHJ1Y3QgbmV0X2xvY2FsICpucDsKLQlzdGF0aWMgdW5zaWduZWQgdmVyc2lvbl9wcmludGVkOwotCWludCBpOwotCWludCBlcnIgPSAtRU5PREVWOwotCi0JLyogR3JhYiB0aGUgcmVnaW9uIHNvIHRoYXQgbm8gb25lIGVsc2UgdHJpZXMgdG8gcHJvYmUgb3VyIGlvcG9ydHMuICovCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2FkZHIsIE5FVENBUkRfSU9fRVhURU5ULCBjYXJkbmFtZSkpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkvKgotCSAqIEZvciBldGhlcm5ldCBhZGFwdG9ycyB0aGUgZmlyc3QgdGhyZWUgb2N0ZXRzIG9mIHRoZSBzdGF0aW9uIGFkZHJlc3MKLQkgKiBjb250YWlucyB0aGUgbWFudWZhY3R1cmVyJ3MgdW5pcXVlIGNvZGUuIFRoYXQgbWlnaHQgYmUgYSBnb29kIHByb2JlCi0JICogbWV0aG9kLiBJZGVhbGx5IHlvdSB3b3VsZCBhZGQgYWRkaXRpb25hbCBjaGVja3MuCi0JICovCi0JaWYgKGluYihpb2FkZHIgKyAwKSAhPSBTQV9BRERSMCB8fAotCSAgICBpbmIoaW9hZGRyICsgMSkgIT0gU0FfQUREUjEgfHwKLQkgICAgaW5iKGlvYWRkciArIDIpICE9IFNBX0FERFIyKQotCQlnb3RvIG91dDsKLQotCWlmIChuZXRfZGVidWcgICYmICB2ZXJzaW9uX3ByaW50ZWQrKyA9PSAwKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXMiLCB2ZXJzaW9uKTsKLQotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBmb3VuZCBhdCAlIzN4LCAiLCBkZXYtPm5hbWUsIGNhcmRuYW1lLCBpb2FkZHIpOwotCi0JLyogRmlsbCBpbiB0aGUgJ2RldicgZmllbGRzLiAqLwotCWRldi0+YmFzZV9hZGRyID0gaW9hZGRyOwotCi0JLyogUmV0cmlldmUgYW5kIHByaW50IHRoZSBldGhlcm5ldCBhZGRyZXNzLiAqLwotCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCWRldi0+ZGV2X2FkZHJbaV0gPSBpbmIoaW9hZGRyICsgaSk7Ci0KLQlwcmludGsoIiVwTSIsIGRldi0+ZGV2X2FkZHIpOwotCi0JZXJyID0gLUVBR0FJTjsKLSNpZmRlZiBqdW1wZXJlZF9pbnRlcnJ1cHRzCi0JLyoKLQkgKiBJZiB0aGlzIGJvYXJkIGhhcyBqdW1wZXJlZCBpbnRlcnJ1cHRzLCBhbGxvY2F0ZSB0aGUgaW50ZXJydXB0Ci0JICogdmVjdG9yIG5vdy4gVGhlcmUgaXMgbm8gcG9pbnQgaW4gd2FpdGluZyBzaW5jZSBubyBvdGhlciBkZXZpY2UKLQkgKiBjYW4gdXNlIHRoZSBpbnRlcnJ1cHQsIGFuZCB0aGlzIG1hcmtzIHRoZSBpcnEgYXMgYnVzeS4gSnVtcGVyZWQKLQkgKiBpbnRlcnJ1cHRzIGFyZSB0eXBpY2FsbHkgbm90IHJlcG9ydGVkIGJ5IHRoZSBib2FyZHMsIGFuZCB3ZSBtdXN0Ci0JICogdXNlZCBhdXRvSVJRIHRvIGZpbmQgdGhlbS4KLQkgKi8KLQotCWlmIChkZXYtPmlycSA9PSAtMSkKLQkJOwkvKiBEbyBub3RoaW5nOiBhIHVzZXItbGV2ZWwgcHJvZ3JhbSB3aWxsIHNldCBpdC4gKi8KLQllbHNlIGlmIChkZXYtPmlycSA8IDIpIHsJLyogIkF1dG8tSVJRIiAqLwotCQl1bnNpZ25lZCBsb25nIGlycV9tYXNrID0gcHJvYmVfaXJxX29uKCk7Ci0JCS8qIFRyaWdnZXIgYW4gaW50ZXJydXB0IGhlcmUuICovCi0KLQkJZGV2LT5pcnEgPSBwcm9iZV9pcnFfb2ZmKGlycV9tYXNrKTsKLQkJaWYgKG5ldF9kZWJ1ZyA+PSAyKQotCQkJcHJpbnRrKCIgYXV0b2lycSBpcyAlZCIsIGRldi0+aXJxKTsKLQl9IGVsc2UgaWYgKGRldi0+aXJxID09IDIpCi0JCS8qCi0JCSAqIEZpeHVwIGZvciB1c2VycyB0aGF0IGRvbid0IGtub3cgdGhhdCBJUlEgMiBpcyByZWFsbHkKLQkJICogSVJROSwgb3IgZG9uJ3Qga25vdyB3aGljaCBvbmUgdG8gc2V0LgotCQkgKi8KLQkJZGV2LT5pcnEgPSA5OwotCi0JewotCQlpbnQgaXJxdmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIG5ldF9pbnRlcnJ1cHQsIDAsIGNhcmRuYW1lLCBkZXYpOwotCQlpZiAoaXJxdmFsKSB7Ci0JCQlwcmludGsoIiVzOiB1bmFibGUgdG8gZ2V0IElSUSAlZCAoaXJxdmFsPSVkKS5cbiIsCi0JCQkJICAgZGV2LT5uYW1lLCBkZXYtPmlycSwgaXJxdmFsKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotI2VuZGlmCS8qIGp1bXBlcmVkIGludGVycnVwdCAqLwotI2lmZGVmIGp1bXBlcmVkX2RtYQotCS8qCi0JICogSWYgd2UgdXNlIGEganVtcGVyZWQgRE1BIGNoYW5uZWwsIHRoYXQgc2hvdWxkIGJlIHByb2JlZCBmb3IgYW5kCi0JICogYWxsb2NhdGVkIGhlcmUgYXMgd2VsbC4gU2VlIGxhbmNlLmMgZm9yIGFuIGV4YW1wbGUuCi0JICovCi0JaWYgKGRldi0+ZG1hID09IDApIHsKLQkJaWYgKHJlcXVlc3RfZG1hKGRldi0+ZG1hLCBjYXJkbmFtZSkpIHsKLQkJCXByaW50aygiRE1BICVkIGFsbG9jYXRpb24gZmFpbGVkLlxuIiwgZGV2LT5kbWEpOwotCQkJZ290byBvdXQxOwotCQl9IGVsc2UKLQkJCXByaW50aygiLCBhc3NpZ25lZCBETUEgJWQuXG4iLCBkZXYtPmRtYSk7Ci0JfSBlbHNlIHsKLQkJc2hvcnQgZG1hX3N0YXR1cywgbmV3X2RtYV9zdGF0dXM7Ci0KLQkJLyogUmVhZCB0aGUgRE1BIGNoYW5uZWwgc3RhdHVzIHJlZ2lzdGVycy4gKi8KLQkJZG1hX3N0YXR1cyA9ICgoaW5iKERNQTFfU1RBVF9SRUcpID4+IDQpICYgMHgwZikgfAotCQkJKGluYihETUEyX1NUQVRfUkVHKSAmIDB4ZjApOwotCQkvKiBUcmlnZ2VyIGEgRE1BIHJlcXVlc3QsIHBlcmhhcHMgcGF1c2UgYSBiaXQuICovCi0JCW91dHcoMHgxMjM0LCBpb2FkZHIgKyA4KTsKLQkJLyogUmUtcmVhZCB0aGUgRE1BIHN0YXR1cyByZWdpc3RlcnMuICovCi0JCW5ld19kbWFfc3RhdHVzID0gKChpbmIoRE1BMV9TVEFUX1JFRykgPj4gNCkgJiAweDBmKSB8Ci0JCQkoaW5iKERNQTJfU1RBVF9SRUcpICYgMHhmMCk7Ci0JCS8qCi0JCSAqIEVsaW1pbmF0ZSB0aGUgb2xkIGFuZCBmbG9hdGluZyByZXF1ZXN0cywKLQkJICogYW5kIERNQTQgdGhlIGNhc2NhZGUuCi0JCSAqLwotCQluZXdfZG1hX3N0YXR1cyBePSBkbWFfc3RhdHVzOwotCQluZXdfZG1hX3N0YXR1cyAmPSB+MHgxMDsKLQkJZm9yIChpID0gNzsgaSA+IDA7IGktLSkKLQkJCWlmICh0ZXN0X2JpdChpLCAmbmV3X2RtYV9zdGF0dXMpKSB7Ci0JCQkJZGV2LT5kbWEgPSBpOwotCQkJCWJyZWFrOwotCQkJfQotCQlpZiAoaSA8PSAwKSB7Ci0JCQlwcmludGsoIkRNQSBwcm9iZSBmYWlsZWQuXG4iKTsKLQkJCWdvdG8gb3V0MTsKLQkJfQotCQlpZiAocmVxdWVzdF9kbWEoZGV2LT5kbWEsIGNhcmRuYW1lKSkgewotCQkJcHJpbnRrKCJwcm9iZWQgRE1BICVkIGFsbG9jYXRpb24gZmFpbGVkLlxuIiwgZGV2LT5kbWEpOwotCQkJZ290byBvdXQxOwotCQl9Ci0JfQotI2VuZGlmCS8qIGp1bXBlcmVkIERNQSAqLwotCi0JbnAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXNwaW5fbG9ja19pbml0KCZucC0+bG9jayk7Ci0KLSAgICAgICAgZGV2LT5uZXRkZXZfb3BzCQk9ICZuZXRjYXJkX25ldGRldl9vcHM7Ci0gICAgICAgIGRldi0+d2F0Y2hkb2dfdGltZW8JPSBNWV9UWF9USU1FT1VUOwotCi0JZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7Ci0JaWYgKGVycikKLQkJZ290byBvdXQyOwotCXJldHVybiAwOwotb3V0MjoKLSNpZmRlZiBqdW1wZXJlZF9kbWEKLQlmcmVlX2RtYShkZXYtPmRtYSk7Ci0jZW5kaWYKLW91dDE6Ci0jaWZkZWYganVtcGVyZWRfaW50ZXJydXB0cwotCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotI2VuZGlmCi1vdXQ6Ci0JcmVsZWFzZV9yZWdpb24oYmFzZV9hZGRyLCBORVRDQVJEX0lPX0VYVEVOVCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIHZvaWQgbmV0X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbmV0X2xvY2FsICpucCA9IG5ldGRldl9wcml2KGRldik7Ci0KLQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdHJhbnNtaXQgdGltZWQgb3V0LCAlcz9cbiIsIGRldi0+bmFtZSwKLQkgICAgICAgdHhfZG9uZShkZXYpID8gIklSUSBjb25mbGljdCIgOiAibmV0d29yayBjYWJsZSBwcm9ibGVtIik7Ci0KLQkvKiBUcnkgdG8gcmVzdGFydCB0aGUgYWRhcHRvci4gKi8KLQljaGlwc2V0X2luaXQoZGV2LCAxKTsKLQotCW5wLT5zdGF0cy50eF9lcnJvcnMrKzsKLQotCS8qIElmIHdlIGhhdmUgc3BhY2UgYXZhaWxhYmxlIHRvIGFjY2VwdCBuZXcgdHJhbnNtaXQKLQkgKiByZXF1ZXN0cywgd2FrZSB1cCB0aGUgcXVldWVpbmcgbGF5ZXIuICBUaGlzIHdvdWxkCi0JICogYmUgdGhlIGNhc2UgaWYgdGhlIGNoaXBzZXRfaW5pdCgpIGNhbGwgYWJvdmUganVzdAotCSAqIGZsdXNoZXMgb3V0IHRoZSB0eCBxdWV1ZSBhbmQgZW1wdGllcyBpdC4KLQkgKgotCSAqIElmIGluc3RlYWQsIHRoZSB0eCBxdWV1ZSBpcyByZXRhaW5lZCB0aGVuIHRoZQotCSAqIG5ldGlmX3dha2VfcXVldWUoKSBjYWxsIHNob3VsZCBiZSBwbGFjZWQgaW4gdGhlCi0JICogVFggY29tcGxldGlvbiBpbnRlcnJ1cHQgaGFuZGxlciBvZiB0aGUgZHJpdmVyIGluc3RlYWQKLQkgKiBvZiBoZXJlLgotCSAqLwotCWlmICghdHhfZnVsbChkZXYpKQotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7Ci19Ci0KLS8qCi0gKiBPcGVuL2luaXRpYWxpemUgdGhlIGJvYXJkLiBUaGlzIGlzIGNhbGxlZCAoaW4gdGhlIGN1cnJlbnQga2VybmVsKQotICogc29tZXRpbWUgYWZ0ZXIgYm9vdGluZyB3aGVuIHRoZSAnaWZjb25maWcnIHByb2dyYW0gaXMgcnVuLgotICoKLSAqIFRoaXMgcm91dGluZSBzaG91bGQgc2V0IGV2ZXJ5dGhpbmcgdXAgYW5ldyBhdCBlYWNoIG9wZW4sIGV2ZW4KLSAqIHJlZ2lzdGVycyB0aGF0ICJzaG91bGQiIG9ubHkgbmVlZCB0byBiZSBzZXQgb25jZSBhdCBib290LCBzbyB0aGF0Ci0gKiB0aGVyZSBpcyBub24tcmVib290IHdheSB0byByZWNvdmVyIGlmIHNvbWV0aGluZyBnb2VzIHdyb25nLgotICovCi1zdGF0aWMgaW50Ci1uZXRfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBuZXRfbG9jYWwgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0JLyoKLQkgKiBUaGlzIGlzIHVzZWQgaWYgdGhlIGludGVycnVwdCBsaW5lIGNhbiB0dXJuZWQgb2ZmIChzaGFyZWQpLgotCSAqIFNlZSAzYzUwMy5jIGZvciBhbiBleGFtcGxlIG9mIHNlbGVjdGluZyB0aGUgSVJRIGF0IGNvbmZpZy10aW1lLgotCSAqLwotCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgbmV0X2ludGVycnVwdCwgMCwgY2FyZG5hbWUsIGRldikpIHsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCS8qCi0JICogQWx3YXlzIGFsbG9jYXRlIHRoZSBETUEgY2hhbm5lbCBhZnRlciB0aGUgSVJRLAotCSAqIGFuZCBjbGVhbiB1cCBvbiBmYWlsdXJlLgotCSAqLwotCWlmIChyZXF1ZXN0X2RtYShkZXYtPmRtYSwgY2FyZG5hbWUpKSB7Ci0JCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0KLQkvKiBSZXNldCB0aGUgaGFyZHdhcmUgaGVyZS4gRG9uJ3QgZm9yZ2V0IHRvIHNldCB0aGUgc3RhdGlvbiBhZGRyZXNzLiAqLwotCWNoaXBzZXRfaW5pdChkZXYsIDEpOwotCW91dGIoMHgwMCwgaW9hZGRyKTsKLQlucC0+b3Blbl90aW1lID0gamlmZmllczsKLQotCS8qIFdlIGFyZSBub3cgcmVhZHkgdG8gYWNjZXB0IHRyYW5zbWl0IHJlcXVldXN0cyBmcm9tCi0JICogdGhlIHF1ZXVlaW5nIGxheWVyIG9mIHRoZSBuZXR3b3JraW5nLgotCSAqLwotCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogVGhpcyB3aWxsIG9ubHkgYmUgaW52b2tlZCBpZiB5b3VyIGRyaXZlciBpcyBfbm90XyBpbiBYT0ZGIHN0YXRlLgotICogV2hhdCB0aGlzIG1lYW5zIGlzIHRoYXQgeW91IG5lZWQgbm90IGNoZWNrIGl0LCBhbmQgdGhhdCB0aGlzCi0gKiBpbnZhcmlhbnQgd2lsbCBob2xkIGlmIHlvdSBtYWtlIHN1cmUgdGhhdCB0aGUgbmV0aWZfKl9xdWV1ZSgpCi0gKiBjYWxscyBhcmUgZG9uZSBhdCB0aGUgcHJvcGVyIHRpbWVzLgotICovCi1zdGF0aWMgaW50IG5ldF9zZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXN0cnVjdCBuZXRfbG9jYWwgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlpbnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0Jc2hvcnQgbGVuZ3RoID0gRVRIX1pMRU4gPCBza2ItPmxlbiA/IHNrYi0+bGVuIDogRVRIX1pMRU47Ci0JdW5zaWduZWQgY2hhciAqYnVmID0gc2tiLT5kYXRhOwotCi0JLyogSWYgc29tZSBlcnJvciBvY2N1cnMgd2hpbGUgdHJ5aW5nIHRvIHRyYW5zbWl0IHRoaXMKLQkgKiBwYWNrZXQsIHlvdSBzaG91bGQgcmV0dXJuICcxJyBmcm9tIHRoaXMgZnVuY3Rpb24uCi0JICogSW4gc3VjaCBhIGNhc2UgeW91IF9tYXkgbm90XyBkbyBhbnl0aGluZyB0byB0aGUKLQkgKiBTS0IsIGl0IGlzIHN0aWxsIG93bmVkIGJ5IHRoZSBuZXR3b3JrIHF1ZXVlaW5nCi0JICogbGF5ZXIgd2hlbiBhbiBlcnJvciBpcyByZXR1cm5lZC4gIFRoaXMgbWVhbnMgeW91Ci0JICogbWF5IG5vdCBtb2RpZnkgYW55IFNLQiBmaWVsZHMsIHlvdSBtYXkgbm90IGZyZWUKLQkgKiB0aGUgU0tCLCBldGMuCi0JICovCi0KLSNpZiBUWF9SSU5HCi0JLyogVGhpcyBpcyB0aGUgbW9zdCBjb21tb24gY2FzZSBmb3IgbW9kZXJuIGhhcmR3YXJlLgotCSAqIFRoZSBzcGlubG9jayBwcm90ZWN0cyB0aGlzIGNvZGUgZnJvbSB0aGUgVFggY29tcGxldGUKLQkgKiBoYXJkd2FyZSBpbnRlcnJ1cHQgaGFuZGxlci4gIFF1ZXVlIGZsb3cgY29udHJvbCBpcwotCSAqIHRodXMgbWFuYWdlZCB1bmRlciB0aGlzIGxvY2sgYXMgd2VsbC4KLQkgKi8KLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOwotCi0JYWRkX3RvX3R4X3JpbmcobnAsIHNrYiwgbGVuZ3RoKTsKLQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLQotCS8qIElmIHdlIGp1c3QgdXNlZCB1cCB0aGUgdmVyeSBsYXN0IGVudHJ5IGluIHRoZQotCSAqIFRYIHJpbmcgb24gdGhpcyBkZXZpY2UsIHRlbGwgdGhlIHF1ZXVlaW5nCi0JICogbGF5ZXIgdG8gc2VuZCBubyBtb3JlLgotCSAqLwotCWlmICh0eF9mdWxsKGRldikpCi0JCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQotCS8qIFdoZW4gdGhlIFRYIGNvbXBsZXRpb24gaHcgaW50ZXJydXB0IGFycml2ZXMsIHRoaXMKLQkgKiBpcyB3aGVuIHRoZSB0cmFuc21pdCBzdGF0aXN0aWNzIGFyZSB1cGRhdGVkLgotCSAqLwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKLSNlbHNlCi0JLyogVGhpcyBpcyB0aGUgY2FzZSBmb3Igb2xkZXIgaGFyZHdhcmUgd2hpY2ggdGFrZXMKLQkgKiBhIHNpbmdsZSB0cmFuc21pdCBidWZmZXIgYXQgYSB0aW1lLCBhbmQgaXQgaXMKLQkgKiBqdXN0IHdyaXR0ZW4gdG8gdGhlIGRldmljZSB2aWEgUElPLgotCSAqCi0JICogTm8gc3BpbiBsb2NraW5nIGlzIG5lZWRlZCBzaW5jZSB0aGVyZSBpcyBubyBUWCBjb21wbGV0ZQotCSAqIGV2ZW50LiAgSWYgYnkgY2hhbmNlIHlvdXIgY2FyZCBkb2VzIGhhdmUgYSBUWCBjb21wbGV0ZQotCSAqIGhhcmR3YXJlIElSUSB0aGVuIHlvdSBtYXkgbmVlZCB0byB1dGlsaXplIG5wLT5sb2NrIGhlcmUuCi0JICovCi0JaGFyZHdhcmVfc2VuZF9wYWNrZXQoaW9hZGRyLCBidWYsIGxlbmd0aCk7Ci0JbnAtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwotCi0JZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0KLQkvKiBZb3UgbWlnaHQgbmVlZCB0byBjbGVhbiB1cCBhbmQgcmVjb3JkIFR4IHN0YXRpc3RpY3MgaGVyZS4gKi8KLQlpZiAoaW53KGlvYWRkcikgPT0gLypSVSovODEpCi0JCW5wLT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwotCWRldl9rZnJlZV9za2IgKHNrYik7Ci0jZW5kaWYKLQotCXJldHVybiBORVRERVZfVFhfT0s7Ci19Ci0KLSNpZiBUWF9SSU5HCi0vKiBUaGlzIGhhbmRsZXMgVFggY29tcGxldGUgZXZlbnRzIHBvc3RlZCBieSB0aGUgZGV2aWNlCi0gKiB2aWEgaW50ZXJydXB0cy4KLSAqLwotdm9pZCBuZXRfdHgoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbmV0X2xvY2FsICpucCA9IG5ldGRldl9wcml2KGRldik7Ci0JaW50IGVudHJ5OwotCi0JLyogVGhpcyBwcm90ZWN0cyB1cyBmcm9tIGNvbmN1cnJlbnQgZXhlY3V0aW9uIG9mCi0JICogb3VyIGRldi0+aGFyZF9zdGFydF94bWl0IGZ1bmN0aW9uIGFib3ZlLgotCSAqLwotCXNwaW5fbG9jaygmbnAtPmxvY2spOwotCi0JZW50cnkgPSBucC0+dHhfb2xkOwotCXdoaWxlICh0eF9lbnRyeV9pc19zZW50KG5wLCBlbnRyeSkpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IG5wLT5za2JzW2VudHJ5XTsKLQotCQlucC0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47Ci0JCWRldl9rZnJlZV9za2JfaXJxIChza2IpOwotCi0JCWVudHJ5ID0gbmV4dF90eF9lbnRyeShucCwgZW50cnkpOwotCX0KLQlucC0+dHhfb2xkID0gZW50cnk7Ci0KLQkvKiBJZiB3ZSBoYWQgc3RvcHBlZCB0aGUgcXVldWUgZHVlIHRvIGEgInR4IGZ1bGwiCi0JICogY29uZGl0aW9uLCBhbmQgc3BhY2UgaGFzIG5vdyBiZWVuIG1hZGUgYXZhaWxhYmxlLAotCSAqIHdha2UgdXAgdGhlIHF1ZXVlLgotCSAqLwotCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKGRldikgJiYgISB0eF9mdWxsKGRldikpCi0JCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKLQotCXNwaW5fdW5sb2NrKCZucC0+bG9jayk7Ci19Ci0jZW5kaWYKLQotLyoKLSAqIFRoZSB0eXBpY2FsIHdvcmtsb2FkIG9mIHRoZSBkcml2ZXI6Ci0gKiBIYW5kbGUgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGludGVycnVwdHMuCi0gKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCBuZXRfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZGV2X2lkOwotCXN0cnVjdCBuZXRfbG9jYWwgKm5wOwotCWludCBpb2FkZHIsIHN0YXR1czsKLQlpbnQgaGFuZGxlZCA9IDA7Ci0KLQlpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQotCW5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdGF0dXMgPSBpbncoaW9hZGRyICsgMCk7Ci0KLQlpZiAoc3RhdHVzID09IDApCi0JCWdvdG8gb3V0OwotCWhhbmRsZWQgPSAxOwotCi0JaWYgKHN0YXR1cyAmIFJYX0lOVFIpIHsKLQkJLyogR290IGEgcGFja2V0KHMpLiAqLwotCQluZXRfcngoZGV2KTsKLQl9Ci0jaWYgVFhfUklORwotCWlmIChzdGF0dXMgJiBUWF9JTlRSKSB7Ci0JCS8qIFRyYW5zbWl0IGNvbXBsZXRlLiAqLwotCQluZXRfdHgoZGV2KTsKLQkJbnAtPnN0YXRzLnR4X3BhY2tldHMrKzsKLQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwotCX0KLSNlbmRpZgotCWlmIChzdGF0dXMgJiBDT1VOVEVSU19JTlRSKSB7Ci0JCS8qIEluY3JlbWVudCB0aGUgYXBwcm9wcmlhdGUgJ2xvY2Fsc3RhdHMnIGZpZWxkLiAqLwotCQlucC0+c3RhdHMudHhfd2luZG93X2Vycm9ycysrOwotCX0KLW91dDoKLQlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKLX0KLQotLyogV2UgaGF2ZSBhIGdvb2QgcGFja2V0KHMpLCBnZXQgaXQvdGhlbSBvdXQgb2YgdGhlIGJ1ZmZlcnMuICovCi1zdGF0aWMgdm9pZAotbmV0X3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQlpbnQgYm9ndXNjb3VudCA9IDEwOwotCi0JZG8gewotCQlpbnQgc3RhdHVzID0gaW53KGlvYWRkcik7Ci0JCWludCBwa3RfbGVuID0gaW53KGlvYWRkcik7Ci0KLQkJaWYgKHBrdF9sZW4gPT0gMCkJCS8qIFJlYWQgYWxsIHRoZSBmcmFtZXM/ICovCi0JCQlicmVhazsJCQkvKiBEb25lIGZvciBub3cgKi8KLQotCQlpZiAoc3RhdHVzICYgMHg0MCkgewkvKiBUaGVyZSB3YXMgYW4gZXJyb3IuICovCi0JCQlscC0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQlpZiAoc3RhdHVzICYgMHgyMCkgbHAtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwotCQkJaWYgKHN0YXR1cyAmIDB4MTApIGxwLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwotCQkJaWYgKHN0YXR1cyAmIDB4MDgpIGxwLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7Ci0JCQlpZiAoc3RhdHVzICYgMHgwNCkgbHAtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBNYWxsb2MgdXAgbmV3IGJ1ZmZlci4gKi8KLQkJCXN0cnVjdCBza19idWZmICpza2I7Ci0KLQkJCWxwLT5zdGF0cy5yeF9ieXRlcys9cGt0X2xlbjsKLQotCQkJc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuKTsKLQkJCWlmIChza2IgPT0gTlVMTCkgewotCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IE1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXQuXG4iLAotCQkJCQkgICBkZXYtPm5hbWUpOwotCQkJCWxwLT5zdGF0cy5yeF9kcm9wcGVkKys7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlza2ItPmRldiA9IGRldjsKLQotCQkJLyogJ3NrYi0+ZGF0YScgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiBza19idWZmIGRhdGEgYXJlYS4gKi8KLQkJCW1lbWNweShza2JfcHV0KHNrYixwa3RfbGVuKSwgKHZvaWQqKWRldi0+cm1lbV9zdGFydCwKLQkJCQkgICBwa3RfbGVuKTsKLQkJCS8qIG9yICovCi0JCQlpbnN3KGlvYWRkciwgc2tiLT5kYXRhLCAocGt0X2xlbiArIDEpID4+IDEpOwotCi0JCQluZXRpZl9yeChza2IpOwotCQkJbHAtPnN0YXRzLnJ4X3BhY2tldHMrKzsKLQkJCWxwLT5zdGF0cy5yeF9ieXRlcyArPSBwa3RfbGVuOwotCQl9Ci0JfSB3aGlsZSAoLS1ib2d1c2NvdW50KTsKLQotCXJldHVybjsKLX0KLQotLyogVGhlIGludmVyc2Ugcm91dGluZSB0byBuZXRfb3BlbigpLiAqLwotc3RhdGljIGludAotbmV0X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQotCWxwLT5vcGVuX3RpbWUgPSAwOwotCi0JbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCi0JLyogRmx1c2ggdGhlIFR4IGFuZCBkaXNhYmxlIFJ4IGhlcmUuICovCi0KLQlkaXNhYmxlX2RtYShkZXYtPmRtYSk7Ci0KLQkvKiBJZiBub3QgSVJRIG9yIERNQSBqdW1wZXJlZCwgZnJlZSB1cCB0aGUgbGluZS4gKi8KLQlvdXR3KDB4MDAsIGlvYWRkciswKTsJLyogUmVsZWFzZSB0aGUgcGh5c2ljYWwgaW50ZXJydXB0IGxpbmUuICovCi0KLQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQlmcmVlX2RtYShkZXYtPmRtYSk7Ci0KLQkvKiBVcGRhdGUgdGhlIHN0YXRpc3RpY3MgaGVyZS4gKi8KLQotCXJldHVybiAwOwotCi19Ci0KLS8qCi0gKiBHZXQgdGhlIGN1cnJlbnQgc3RhdGlzdGljcy4KLSAqIFRoaXMgbWF5IGJlIGNhbGxlZCB3aXRoIHRoZSBjYXJkIG9wZW4gb3IgY2xvc2VkLgotICovCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKm5ldF9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc2hvcnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0KLQkvKiBVcGRhdGUgdGhlIHN0YXRpc3RpY3MgZnJvbSB0aGUgZGV2aWNlIHJlZ2lzdGVycy4gKi8KLQlscC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyA9IGludyhpb2FkZHIrMSk7Ci0JcmV0dXJuICZscC0+c3RhdHM7Ci19Ci0KLS8qCi0gKiBTZXQgb3IgY2xlYXIgdGhlIG11bHRpY2FzdCBmaWx0ZXIgZm9yIHRoaXMgYWRhcHRvci4KLSAqIG51bV9hZGRycyA9PSAtMQlQcm9taXNjdW91cyBtb2RlLCByZWNlaXZlIGFsbCBwYWNrZXRzCi0gKiBudW1fYWRkcnMgPT0gMAlOb3JtYWwgbW9kZSwgY2xlYXIgbXVsdGljYXN0IGxpc3QKLSAqIG51bV9hZGRycyA+IDAJTXVsdGljYXN0IG1vZGUsIHJlY2VpdmUgbm9ybWFsIGFuZCBNQyBwYWNrZXRzLAotICoJCQlhbmQgZG8gYmVzdC1lZmZvcnQgZmlsdGVyaW5nLgotICovCi1zdGF0aWMgdm9pZAotc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jc2hvcnQgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7Ci0JaWYgKGRldi0+ZmxhZ3MmSUZGX1BST01JU0MpCi0JewotCQkvKiBFbmFibGUgcHJvbWlzY3VvdXMgbW9kZSAqLwotCQlvdXR3KE1VTFRJQ0FTVHxQUk9NSVNDLCBpb2FkZHIpOwotCX0KLQllbHNlIGlmKChkZXYtPmZsYWdzJklGRl9BTExNVUxUSSkgfHwgZGV2LT5tY19jb3VudCA+IEhXX01BWF9BRERSUykKLQl7Ci0JCS8qIERpc2FibGUgcHJvbWlzY3VvdXMgbW9kZSwgdXNlIG5vcm1hbCBtb2RlLiAqLwotCQloYXJkd2FyZV9zZXRfZmlsdGVyKE5VTEwpOwotCi0JCW91dHcoTVVMVElDQVNULCBpb2FkZHIpOwotCX0KLQllbHNlIGlmKGRldi0+bWNfY291bnQpCi0JewotCQkvKiBXYWxrIHRoZSBhZGRyZXNzIGxpc3QsIGFuZCBsb2FkIHRoZSBmaWx0ZXIgKi8KLQkJaGFyZHdhcmVfc2V0X2ZpbHRlcihkZXYtPm1jX2xpc3QpOwotCi0JCW91dHcoTVVMVElDQVNULCBpb2FkZHIpOwotCX0KLQllbHNlCi0JCW91dHcoMCwgaW9hZGRyKTsKLX0KLQotI2lmZGVmIE1PRFVMRQotCi1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2UgKnRoaXNfZGV2aWNlOwotc3RhdGljIGludCBpbyA9IDB4MzAwOwotc3RhdGljIGludCBpcnE7Ci1zdGF0aWMgaW50IGRtYTsKLXN0YXRpYyBpbnQgbWVtOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1pbnQgaW5pdF9tb2R1bGUodm9pZCkKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCWludCByZXN1bHQ7Ci0KLQlpZiAoaW8gPT0gMCkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFlvdSBzaG91bGRuJ3QgdXNlIGF1dG8tcHJvYmluZyB3aXRoIGluc21vZCFcbiIsCi0JCQkgICBjYXJkbmFtZSk7Ci0JZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBuZXRfbG9jYWwpKTsKLQlpZiAoIWRldikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBDb3B5IHRoZSBwYXJhbWV0ZXJzIGZyb20gaW5zbW9kIGludG8gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICovCi0JZGV2LT5iYXNlX2FkZHIgPSBpbzsKLQlkZXYtPmlycSAgICAgICA9IGlycTsKLQlkZXYtPmRtYSAgICAgICA9IGRtYTsKLQlkZXYtPm1lbV9zdGFydCA9IG1lbTsKLQlpZiAoZG9fbmV0Y2FyZF9wcm9iZShkZXYpID09IDApIHsKLQkJdGhpc19kZXZpY2UgPSBkZXY7Ci0JCXJldHVybiAwOwotCX0KLQlmcmVlX25ldGRldihkZXYpOwotCXJldHVybiAtRU5YSU87Ci19Ci0KLXZvaWQKLWNsZWFudXBfbW9kdWxlKHZvaWQpCi17Ci0JdW5yZWdpc3Rlcl9uZXRkZXYodGhpc19kZXZpY2UpOwotCWNsZWFudXBfY2FyZCh0aGlzX2RldmljZSk7Ci0JZnJlZV9uZXRkZXYodGhpc19kZXZpY2UpOwotfQotCi0jZW5kaWYgLyogTU9EVUxFICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pc2VyaWVzX3ZldGguYyBiL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jCmluZGV4IDE2YzkxOTEuLmU2ZTk3MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jCisrKyBiL2RyaXZlcnMvbmV0L2lzZXJpZXNfdmV0aC5jCkBAIC0zODQsNyArMzg0LDcgQEAKIAlOVUxMCiB9OwogCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyB2ZXRoX2NueF9zeXNmc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyB2ZXRoX2NueF9zeXNmc19vcHMgPSB7CiAJCS5zaG93ID0gdmV0aF9jbnhfYXR0cmlidXRlX3Nob3cKIH07CiAKQEAgLTQ0MSw3ICs0NDEsNyBAQAogCU5VTEwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIHZldGhfcG9ydF9zeXNmc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyB2ZXRoX3BvcnRfc3lzZnNfb3BzID0gewogCS5zaG93ID0gdmV0aF9wb3J0X2F0dHJpYnV0ZV9zaG93CiB9OwogCkBAIC05NTgsMTggKzk1OCwxNyBAQAogCXdyaXRlX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bWNhc3RfZ2F0ZSwgZmxhZ3MpOwogCiAJaWYgKChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAotCQkJKGRldi0+bWNfY291bnQgPiBWRVRIX01BWF9NQ0FTVCkpIHsKKwkJCShuZXRkZXZfbWNfY291bnQoZGV2KSA+IFZFVEhfTUFYX01DQVNUKSkgewogCQlwb3J0LT5wcm9taXNjdW91cyA9IDE7CiAJfSBlbHNlIHsKLQkJc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7Ci0JCWludCBpOworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAogCQlwb3J0LT5wcm9taXNjdW91cyA9IDA7CiAKIAkJLyogVXBkYXRlIHRhYmxlICovCiAJCXBvcnQtPm51bV9tY2FzdCA9IDA7CiAKLQkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogCQkJdTggKmFkZHIgPSBkbWktPmRtaV9hZGRyOwogCQkJdTY0IHhhZGRyID0gMDsKIApAQCAtOTc4LDcgKzk3Nyw2IEBACiAJCQkJcG9ydC0+bWNhc3RfYWRkcltwb3J0LT5udW1fbWNhc3RdID0geGFkZHI7CiAJCQkJcG9ydC0+bnVtX21jYXN0Kys7CiAJCQl9Ci0JCQlkbWkgPSBkbWktPm5leHQ7CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYi5oIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiLmgKaW5kZXggNTI1N2FlMC4uOTJkMmU3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYi9peGdiLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiLmgKQEAgLTc1LDE5ICs3NSwxNCBAQAogI2luY2x1ZGUgIml4Z2JfZWUuaCIKICNpbmNsdWRlICJpeGdiX2lkcy5oIgogCisjZGVmaW5lIFBGWCAiaXhnYjogIgorCiAjaWZkZWYgX0RFQlVHX0RSSVZFUl8KLSNkZWZpbmUgSVhHQl9EQkcoYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgIml4Z2I6ICIgYXJncykKKyNkZWZpbmUgSVhHQl9EQkcoYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgUEZYIGFyZ3MpCiAjZWxzZQogI2RlZmluZSBJWEdCX0RCRyhhcmdzLi4uKQogI2VuZGlmCiAKLSNkZWZpbmUgUEZYICJpeGdiOiAiCi0jZGVmaW5lIERQUklOVEsobmxldmVsLCBrbGV2ZWwsIGZtdCwgYXJncy4uLikgXAotCSh2b2lkKSgoTkVUSUZfTVNHXyMjbmxldmVsICYgYWRhcHRlci0+bXNnX2VuYWJsZSkgJiYgXAotCXByaW50ayhLRVJOXyMja2xldmVsIFBGWCAiJXM6ICVzOiAiIGZtdCwgYWRhcHRlci0+bmV0ZGV2LT5uYW1lLCBcCi0JCV9fZnVuY19fICwgIyMgYXJncykpCi0KLQogLyogVFgvUlggZGVzY3JpcHRvciBkZWZpbmVzICovCiAjZGVmaW5lIERFRkFVTFRfVFhEICAgICAgMjU2CiAjZGVmaW5lIE1BWF9UWEQgICAgICAgICA0MDk2CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYi9peGdiX21haW4uYwppbmRleCA1OTNkMWE0Li5jOWZlZjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9peGdiL2l4Z2JfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2IvaXhnYl9tYWluLmMKQEAgLTUwLDcgKzUwLDcgQEAKICAqIHsgVmVuZG9yIElELCBEZXZpY2UgSUQsIFN1YlZlbmRvciBJRCwgU3ViRGV2aWNlIElELAogICogICBDbGFzcywgQ2xhc3MgTWFzaywgcHJpdmF0ZSBkYXRhIChub3QgdXNlZCkgfQogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXhnYl9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoaXhnYl9wY2lfdGJsKSA9IHsKIAl7SU5URUxfVkVORE9SX0lELCBJWEdCX0RFVklDRV9JRF84MjU5N0VYLAogCSBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKIAl7SU5URUxfVkVORE9SX0lELCBJWEdCX0RFVklDRV9JRF84MjU5N0VYX0NYNCwKQEAgLTIzOCw4ICsyMzgsOCBAQAogCWlmIChlcnIpIHsKIAkJaWYgKGFkYXB0ZXItPmhhdmVfbXNpKQogCQkJcGNpX2Rpc2FibGVfbXNpKGFkYXB0ZXItPnBkZXYpOwotCQlEUFJJTlRLKFBST0JFLCBFUlIsCi0JCSAiVW5hYmxlIHRvIGFsbG9jYXRlIGludGVycnVwdCBFcnJvcjogJWRcbiIsIGVycik7CisJCW5ldGlmX2VycihhZGFwdGVyLCBwcm9iZSwgYWRhcHRlci0+bmV0ZGV2LAorCQkJICAiVW5hYmxlIHRvIGFsbG9jYXRlIGludGVycnVwdCBFcnJvcjogJWRcbiIsIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC0zMTAsNyArMzEwLDcgQEAKIAogCWl4Z2JfYWRhcHRlcl9zdG9wKGh3KTsKIAlpZiAoIWl4Z2JfaW5pdF9odyhodykpCi0JCURQUklOVEsoUFJPQkUsIEVSUiwgIml4Z2JfaW5pdF9odyBmYWlsZWQuXG4iKTsKKwkJbmV0aWZfZXJyKGFkYXB0ZXIsIHByb2JlLCBhZGFwdGVyLT5uZXRkZXYsICJpeGdiX2luaXRfaHcgZmFpbGVkXG4iKTsKIAogCS8qIHJlc3RvcmUgZnJhbWUgc2l6ZSBpbmZvcm1hdGlvbiAqLwogCUlYR0JfV1JJVEVfUkVHKGh3LCBNRlMsIGh3LT5tYXhfZnJhbWVfc2l6ZSA8PCBJWEdCX01GU19TSElGVCk7CkBAIC00NDcsNyArNDQ3LDggQEAKIAkvKiBtYWtlIHN1cmUgdGhlIEVFUFJPTSBpcyBnb29kICovCiAKIAlpZiAoIWl4Z2JfdmFsaWRhdGVfZWVwcm9tX2NoZWNrc3VtKCZhZGFwdGVyLT5odykpIHsKLQkJRFBSSU5USyhQUk9CRSwgRVJSLCAiVGhlIEVFUFJPTSBDaGVja3N1bSBJcyBOb3QgVmFsaWRcbiIpOworCQluZXRpZl9lcnIoYWRhcHRlciwgcHJvYmUsIGFkYXB0ZXItPm5ldGRldiwKKwkJCSAgIlRoZSBFRVBST00gQ2hlY2tzdW0gSXMgTm90IFZhbGlkXG4iKTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJfZWVwcm9tOwogCX0KQEAgLTQ1Niw3ICs0NTcsNyBAQAogCW1lbWNweShuZXRkZXYtPnBlcm1fYWRkciwgbmV0ZGV2LT5kZXZfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV0ZGV2LT5wZXJtX2FkZHIpKSB7Ci0JCURQUklOVEsoUFJPQkUsIEVSUiwgIkludmFsaWQgTUFDIEFkZHJlc3NcbiIpOworCQluZXRpZl9lcnIoYWRhcHRlciwgcHJvYmUsIGFkYXB0ZXItPm5ldGRldiwgIkludmFsaWQgTUFDIEFkZHJlc3NcbiIpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGVycl9lZXByb207CiAJfQpAQCAtNDc3LDcgKzQ3OCw4IEBACiAJLyogY2FycmllciBvZmYgcmVwb3J0aW5nIGlzIGltcG9ydGFudCB0byBldGh0b29sIGV2ZW4gQkVGT1JFIG9wZW4gKi8KIAluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOwogCi0JRFBSSU5USyhQUk9CRSwgSU5GTywgIkludGVsKFIpIFBSTy8xMEdiRSBOZXR3b3JrIENvbm5lY3Rpb25cbiIpOworCW5ldGlmX2luZm8oYWRhcHRlciwgcHJvYmUsIGFkYXB0ZXItPm5ldGRldiwKKwkJICAgIkludGVsKFIpIFBSTy8xMEdiRSBOZXR3b3JrIENvbm5lY3Rpb25cbiIpOwogCWl4Z2JfY2hlY2tfb3B0aW9ucyhhZGFwdGVyKTsKIAkvKiByZXNldCB0aGUgaGFyZHdhcmUgd2l0aCB0aGUgbmV3IHNldHRpbmdzICovCiAKQEAgLTU1MiwxNCArNTU0LDE0IEBACiAJaHctPm1heF9mcmFtZV9zaXplID0gbmV0ZGV2LT5tdHUgKyBFTkVUX0hFQURFUl9TSVpFICsgRU5FVF9GQ1NfTEVOR1RIOwogCWFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gPSBody0+bWF4X2ZyYW1lX3NpemUgKyA4OyAvKiArIDggZm9yIGVycmF0YSAqLwogCi0JaWYgKChody0+ZGV2aWNlX2lkID09IElYR0JfREVWSUNFX0lEXzgyNTk3RVgpCi0JICAgfHwgKGh3LT5kZXZpY2VfaWQgPT0gSVhHQl9ERVZJQ0VfSURfODI1OTdFWF9DWDQpCi0JICAgfHwgKGh3LT5kZXZpY2VfaWQgPT0gSVhHQl9ERVZJQ0VfSURfODI1OTdFWF9MUikKLQkgICB8fCAoaHctPmRldmljZV9pZCA9PSBJWEdCX0RFVklDRV9JRF84MjU5N0VYX1NSKSkKKwlpZiAoKGh3LT5kZXZpY2VfaWQgPT0gSVhHQl9ERVZJQ0VfSURfODI1OTdFWCkgfHwKKwkgICAgKGh3LT5kZXZpY2VfaWQgPT0gSVhHQl9ERVZJQ0VfSURfODI1OTdFWF9DWDQpIHx8CisJICAgIChody0+ZGV2aWNlX2lkID09IElYR0JfREVWSUNFX0lEXzgyNTk3RVhfTFIpIHx8CisJICAgIChody0+ZGV2aWNlX2lkID09IElYR0JfREVWSUNFX0lEXzgyNTk3RVhfU1IpKQogCQlody0+bWFjX3R5cGUgPSBpeGdiXzgyNTk3OwogCWVsc2UgewogCQkvKiBzaG91bGQgbmV2ZXIgaGF2ZSBsb2FkZWQgb24gdGhpcyBkZXZpY2UgKi8KLQkJRFBSSU5USyhQUk9CRSwgRVJSLCAidW5zdXBwb3J0ZWQgZGV2aWNlIGlkXG4iKTsKKwkJbmV0aWZfZXJyKGFkYXB0ZXIsIHByb2JlLCBhZGFwdGVyLT5uZXRkZXYsICJ1bnN1cHBvcnRlZCBkZXZpY2UgaWRcbiIpOwogCX0KIAogCS8qIGVuYWJsZSBmbG93IGNvbnRyb2wgdG8gYmUgcHJvZ3JhbW1lZCAqLwpAQCAtNjYxLDggKzY2Myw4IEBACiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXhnYl9idWZmZXIpICogdHhkci0+Y291bnQ7CiAJdHhkci0+YnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOwogCWlmICghdHhkci0+YnVmZmVyX2luZm8pIHsKLQkJRFBSSU5USyhQUk9CRSwgRVJSLAotCQkgIlVuYWJsZSB0byBhbGxvY2F0ZSB0cmFuc21pdCBkZXNjcmlwdG9yIHJpbmcgbWVtb3J5XG4iKTsKKwkJbmV0aWZfZXJyKGFkYXB0ZXIsIHByb2JlLCBhZGFwdGVyLT5uZXRkZXYsCisJCQkgICJVbmFibGUgdG8gYWxsb2NhdGUgdHJhbnNtaXQgZGVzY3JpcHRvciByaW5nIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1zZXQodHhkci0+YnVmZmVyX2luZm8sIDAsIHNpemUpOwpAQCAtNjc1LDggKzY3Nyw4IEBACiAJdHhkci0+ZGVzYyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHR4ZHItPnNpemUsICZ0eGRyLT5kbWEpOwogCWlmICghdHhkci0+ZGVzYykgewogCQl2ZnJlZSh0eGRyLT5idWZmZXJfaW5mbyk7Ci0JCURQUklOVEsoUFJPQkUsIEVSUiwKLQkJICJVbmFibGUgdG8gYWxsb2NhdGUgdHJhbnNtaXQgZGVzY3JpcHRvciBtZW1vcnlcbiIpOworCQluZXRpZl9lcnIoYWRhcHRlciwgcHJvYmUsIGFkYXB0ZXItPm5ldGRldiwKKwkJCSAgIlVuYWJsZSB0byBhbGxvY2F0ZSB0cmFuc21pdCBkZXNjcmlwdG9yIG1lbW9yeVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1zZXQodHhkci0+ZGVzYywgMCwgdHhkci0+c2l6ZSk7CkBAIC03NTAsOCArNzUyLDggQEAKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBpeGdiX2J1ZmZlcikgKiByeGRyLT5jb3VudDsKIAlyeGRyLT5idWZmZXJfaW5mbyA9IHZtYWxsb2Moc2l6ZSk7CiAJaWYgKCFyeGRyLT5idWZmZXJfaW5mbykgewotCQlEUFJJTlRLKFBST0JFLCBFUlIsCi0JCSAiVW5hYmxlIHRvIGFsbG9jYXRlIHJlY2VpdmUgZGVzY3JpcHRvciByaW5nXG4iKTsKKwkJbmV0aWZfZXJyKGFkYXB0ZXIsIHByb2JlLCBhZGFwdGVyLT5uZXRkZXYsCisJCQkgICJVbmFibGUgdG8gYWxsb2NhdGUgcmVjZWl2ZSBkZXNjcmlwdG9yIHJpbmdcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWVtc2V0KHJ4ZHItPmJ1ZmZlcl9pbmZvLCAwLCBzaXplKTsKQEAgLTc2NSw4ICs3NjcsOCBAQAogCiAJaWYgKCFyeGRyLT5kZXNjKSB7CiAJCXZmcmVlKHJ4ZHItPmJ1ZmZlcl9pbmZvKTsKLQkJRFBSSU5USyhQUk9CRSwgRVJSLAotCQkgIlVuYWJsZSB0byBhbGxvY2F0ZSByZWNlaXZlIGRlc2NyaXB0b3JzXG4iKTsKKwkJbmV0aWZfZXJyKGFkYXB0ZXIsIHByb2JlLCBhZGFwdGVyLT5uZXRkZXYsCisJCQkgICJVbmFibGUgdG8gYWxsb2NhdGUgcmVjZWl2ZSBkZXNjcmlwdG9yc1xuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAltZW1zZXQocnhkci0+ZGVzYywgMCwgcnhkci0+c2l6ZSk7CkBAIC0xMDc3LDcgKzEwNzksNyBAQAogCQlyY3RsIHw9IElYR0JfUkNUTF9WRkU7CiAJfQogCi0JaWYgKG5ldGRldi0+bWNfY291bnQgPiBJWEdCX01BWF9OVU1fTVVMVElDQVNUX0FERFJFU1NFUykgeworCWlmIChuZXRkZXZfbWNfY291bnQobmV0ZGV2KSA+IElYR0JfTUFYX05VTV9NVUxUSUNBU1RfQUREUkVTU0VTKSB7CiAJCXJjdGwgfD0gSVhHQl9SQ1RMX01QRTsKIAkJSVhHQl9XUklURV9SRUcoaHcsIFJDVEwsIHJjdGwpOwogCX0gZWxzZSB7CkBAIC0xMDg2LDEzICsxMDg4LDEyIEBACiAKIAkJSVhHQl9XUklURV9SRUcoaHcsIFJDVEwsIHJjdGwpOwogCi0JCWZvciAoaSA9IDAsIG1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsKLQkJICAgICBtY19wdHI7Ci0JCSAgICAgaSsrLCBtY19wdHIgPSBtY19wdHItPm5leHQpCi0JCQltZW1jcHkoJm10YVtpICogSVhHQl9FVEhfTEVOR1RIX09GX0FERFJFU1NdLAorCQlpID0gMDsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfcHRyLCBuZXRkZXYpCisJCQltZW1jcHkoJm10YVtpKysgKiBJWEdCX0VUSF9MRU5HVEhfT0ZfQUREUkVTU10sCiAJCQkgICAgICAgbWNfcHRyLT5kbWlfYWRkciwgSVhHQl9FVEhfTEVOR1RIX09GX0FERFJFU1MpOwogCi0JCWl4Z2JfbWNfYWRkcl9saXN0X3VwZGF0ZShodywgbXRhLCBuZXRkZXYtPm1jX2NvdW50LCAwKTsKKwkJaXhnYl9tY19hZGRyX2xpc3RfdXBkYXRlKGh3LCBtdGEsIG5ldGRldl9tY19jb3VudChuZXRkZXYpLCAwKTsKIAl9CiB9CiAKQEAgLTE1ODAsNyArMTU4MSw4IEBACiAJLyogTVRVIDwgNjggaXMgYW4gZXJyb3IgZm9yIElQdjQgdHJhZmZpYywganVzdCBkb24ndCBhbGxvdyBpdCAqLwogCWlmICgobmV3X210dSA8IDY4KSB8fAogCSAgICAobWF4X2ZyYW1lID4gSVhHQl9NQVhfSlVNQk9fRlJBTUVfU0laRSArIEVORVRfRkNTX0xFTkdUSCkpIHsKLQkJRFBSSU5USyhQUk9CRSwgRVJSLCAiSW52YWxpZCBNVFUgc2V0dGluZyAlZFxuIiwgbmV3X210dSk7CisJCW5ldGlmX2VycihhZGFwdGVyLCBwcm9iZSwgYWRhcHRlci0+bmV0ZGV2LAorCQkJICAiSW52YWxpZCBNVFUgc2V0dGluZyAlZFxuIiwgbmV3X210dSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTYxNiw3ICsxNjE4LDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHx8IChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAotCSAgIChuZXRkZXYtPm1jX2NvdW50ID4gSVhHQl9NQVhfTlVNX01VTFRJQ0FTVF9BRERSRVNTRVMpKSB7CisJICAgKG5ldGRldl9tY19jb3VudChuZXRkZXYpID4gSVhHQl9NQVhfTlVNX01VTFRJQ0FTVF9BRERSRVNTRVMpKSB7CiAJCXU2NCBtdWx0aSA9IElYR0JfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBNUFJDTCk7CiAJCXUzMiBiY2FzdF9sID0gSVhHQl9SRUFEX1JFRygmYWRhcHRlci0+aHcsIEJQUkNMKTsKIAkJdTMyIGJjYXN0X2ggPSBJWEdCX1JFQURfUkVHKCZhZGFwdGVyLT5odywgQlBSQ0gpOwpAQCAtMTg1NCwyNCArMTg1NiwyNSBAQAogCQkgICAmJiAhKElYR0JfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBTVEFUVVMpICYKIAkJICAgICAgICBJWEdCX1NUQVRVU19UWE9GRikpIHsKIAkJCS8qIGRldGVjdGVkIFR4IHVuaXQgaGFuZyAqLwotCQkJRFBSSU5USyhEUlYsIEVSUiwgIkRldGVjdGVkIFR4IFVuaXQgSGFuZ1xuIgotCQkJCQkiICBUREggICAgICAgICAgICAgICAgICA8JXg+XG4iCi0JCQkJCSIgIFREVCAgICAgICAgICAgICAgICAgIDwleD5cbiIKLQkJCQkJIiAgbmV4dF90b191c2UgICAgICAgICAgPCV4PlxuIgotCQkJCQkiICBuZXh0X3RvX2NsZWFuICAgICAgICA8JXg+XG4iCi0JCQkJCSJidWZmZXJfaW5mb1tuZXh0X3RvX2NsZWFuXVxuIgotCQkJCQkiICB0aW1lX3N0YW1wICAgICAgICAgICA8JWx4PlxuIgotCQkJCQkiICBuZXh0X3RvX3dhdGNoICAgICAgICA8JXg+XG4iCi0JCQkJCSIgIGppZmZpZXMgICAgICAgICAgICAgIDwlbHg+XG4iCi0JCQkJCSIgIG5leHRfdG9fd2F0Y2guc3RhdHVzIDwleD5cbiIsCi0JCQkJSVhHQl9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFRESCksCi0JCQkJSVhHQl9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFREVCksCi0JCQkJdHhfcmluZy0+bmV4dF90b191c2UsCi0JCQkJdHhfcmluZy0+bmV4dF90b19jbGVhbiwKLQkJCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tlb3BdLnRpbWVfc3RhbXAsCi0JCQkJZW9wLAotCQkJCWppZmZpZXMsCi0JCQkJZW9wX2Rlc2MtPnN0YXR1cyk7CisJCQluZXRpZl9lcnIoYWRhcHRlciwgZHJ2LCBhZGFwdGVyLT5uZXRkZXYsCisJCQkJICAiRGV0ZWN0ZWQgVHggVW5pdCBIYW5nXG4iCisJCQkJICAiICBUREggICAgICAgICAgICAgICAgICA8JXg+XG4iCisJCQkJICAiICBURFQgICAgICAgICAgICAgICAgICA8JXg+XG4iCisJCQkJICAiICBuZXh0X3RvX3VzZSAgICAgICAgICA8JXg+XG4iCisJCQkJICAiICBuZXh0X3RvX2NsZWFuICAgICAgICA8JXg+XG4iCisJCQkJICAiYnVmZmVyX2luZm9bbmV4dF90b19jbGVhbl1cbiIKKwkJCQkgICIgIHRpbWVfc3RhbXAgICAgICAgICAgIDwlbHg+XG4iCisJCQkJICAiICBuZXh0X3RvX3dhdGNoICAgICAgICA8JXg+XG4iCisJCQkJICAiICBqaWZmaWVzICAgICAgICAgICAgICA8JWx4PlxuIgorCQkJCSAgIiAgbmV4dF90b193YXRjaC5zdGF0dXMgPCV4PlxuIiwKKwkJCQkgIElYR0JfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LCBUREgpLAorCQkJCSAgSVhHQl9SRUFEX1JFRygmYWRhcHRlci0+aHcsIFREVCksCisJCQkJICB0eF9yaW5nLT5uZXh0X3RvX3VzZSwKKwkJCQkgIHR4X3JpbmctPm5leHRfdG9fY2xlYW4sCisJCQkJICB0eF9yaW5nLT5idWZmZXJfaW5mb1tlb3BdLnRpbWVfc3RhbXAsCisJCQkJICBlb3AsCisJCQkJICBqaWZmaWVzLAorCQkJCSAgZW9wX2Rlc2MtPnN0YXR1cyk7CiAJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CiAJCX0KIAl9CkBAIC0yMjY5LDcgKzIyNzIsOCBAQAogCXN0cnVjdCBpeGdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7Ci0JCURQUklOVEsoUFJPQkUsIEVSUiwgIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldC5cbiIpOworCQluZXRpZl9lcnIoYWRhcHRlciwgcHJvYmUsIGFkYXB0ZXItPm5ldGRldiwKKwkJCSAgIkNhbm5vdCByZS1lbmFibGUgUENJIGRldmljZSBhZnRlciByZXNldFxuIik7CiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwogCX0KIApAQCAtMjI4NSwxNCArMjI4OSwxNiBAQAogCiAJLyogTWFrZSBzdXJlIHRoZSBFRVBST00gaXMgZ29vZCAqLwogCWlmICghaXhnYl92YWxpZGF0ZV9lZXByb21fY2hlY2tzdW0oJmFkYXB0ZXItPmh3KSkgewotCQlEUFJJTlRLKFBST0JFLCBFUlIsICJBZnRlciByZXNldCwgdGhlIEVFUFJPTSBjaGVja3N1bSBpcyBub3QgdmFsaWQuXG4iKTsKKwkJbmV0aWZfZXJyKGFkYXB0ZXIsIHByb2JlLCBhZGFwdGVyLT5uZXRkZXYsCisJCQkgICJBZnRlciByZXNldCwgdGhlIEVFUFJPTSBjaGVja3N1bSBpcyBub3QgdmFsaWRcbiIpOwogCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKIAl9CiAJaXhnYl9nZXRfZWVfbWFjX2FkZHIoJmFkYXB0ZXItPmh3LCBuZXRkZXYtPmRldl9hZGRyKTsKIAltZW1jcHkobmV0ZGV2LT5wZXJtX2FkZHIsIG5ldGRldi0+ZGV2X2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOwogCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5ldGRldi0+cGVybV9hZGRyKSkgewotCQlEUFJJTlRLKFBST0JFLCBFUlIsICJBZnRlciByZXNldCwgaW52YWxpZCBNQUMgYWRkcmVzcy5cbiIpOworCQluZXRpZl9lcnIoYWRhcHRlciwgcHJvYmUsIGFkYXB0ZXItPm5ldGRldiwKKwkJCSAgIkFmdGVyIHJlc2V0LCBpbnZhbGlkIE1BQyBhZGRyZXNzXG4iKTsKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2l4Z2JlL01ha2VmaWxlCmluZGV4IGJmZWYwZWIuLjhmODFlZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL01ha2VmaWxlCkBAIC0zMyw3ICszMyw4IEBACiBvYmotJChDT05GSUdfSVhHQkUpICs9IGl4Z2JlLm8KIAogaXhnYmUtb2JqcyA6PSBpeGdiZV9tYWluLm8gaXhnYmVfY29tbW9uLm8gaXhnYmVfZXRodG9vbC5vIFwKLSAgICAgICAgICAgICAgaXhnYmVfODI1OTkubyBpeGdiZV84MjU5OC5vIGl4Z2JlX3BoeS5vCisgICAgICAgICAgICAgIGl4Z2JlXzgyNTk5Lm8gaXhnYmVfODI1OTgubyBpeGdiZV9waHkubyBpeGdiZV9zcmlvdi5vIFwKKyAgICAgICAgICAgICAgaXhnYmVfbWJ4Lm8KIAogaXhnYmUtJChDT05GSUdfSVhHQkVfRENCKSArPSAgaXhnYmVfZGNiLm8gaXhnYmVfZGNiXzgyNTk4Lm8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfZGNiXzgyNTk5Lm8gaXhnYmVfZGNiX25sLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZS5oCmluZGV4IDMwM2U3YmQuLjE5ZTk0ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmUuaApAQCAtOTgsNiArOTgsMjIgQEAKIAogI2RlZmluZSBJWEdCRV9NQVhfUlNDX0lOVF9SQVRFICAgICAgICAgIDE2Mjc2MAogCisjZGVmaW5lIElYR0JFX01BWF9WRl9NQ19FTlRSSUVTICAgICAgICAgMzAKKyNkZWZpbmUgSVhHQkVfTUFYX1ZGX0ZVTkNUSU9OUyAgICAgICAgICA2NAorI2RlZmluZSBJWEdCRV9NQVhfVkZUQV9FTlRSSUVTICAgICAgICAgIDEyOAorI2RlZmluZSBNQVhfRU1VTEFUSU9OX01BQ19BRERSUyAgICAgICAgIDE2CisjZGVmaW5lIFZNRFFfUChwKSAgICgocCkgKyBhZGFwdGVyLT5udW1fdmZzKQorCitzdHJ1Y3QgdmZfZGF0YV9zdG9yYWdlIHsKKwl1bnNpZ25lZCBjaGFyIHZmX21hY19hZGRyZXNzZXNbRVRIX0FMRU5dOworCXUxNiB2Zl9tY19oYXNoZXNbSVhHQkVfTUFYX1ZGX01DX0VOVFJJRVNdOworCXUxNiBudW1fdmZfbWNfaGFzaGVzOworCXUxNiBkZWZhdWx0X3ZmX3ZsYW5faWQ7CisJdTE2IHZsYW5zX2VuYWJsZWQ7CisJYm9vbCBjbGVhcl90b19zZW5kOworCWludCByYXI7Cit9OworCiAvKiB3cmFwcGVyIGFyb3VuZCBhIHBvaW50ZXIgdG8gYSBzb2NrZXQgYnVmZmVyLAogICogc28gYSBETUEgaGFuZGxlIGNhbiBiZSBzdG9yZWQgYWxvbmcgd2l0aCB0aGUgYnVmZmVyICovCiBzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyIHsKQEAgLTE1OSw2ICsxNzUsNyBAQAogCiAJc3RydWN0IGl4Z2JlX3F1ZXVlX3N0YXRzIHN0YXRzOwogCXVuc2lnbmVkIGxvbmcgcmVpbml0X3N0YXRlOworCWludCBudW1hX25vZGU7CiAJdTY0IHJzY19jb3VudDsJCQkvKiBzdGF0IGZvciBjb2FsZXNjZWQgcGFja2V0cyAqLwogCXU2NCByc2NfZmx1c2g7CQkJLyogc3RhdHMgZm9yIGZsdXNoZWQgcGFja2V0cyAqLwogCXUzMiByZXN0YXJ0X3F1ZXVlOwkJLyogdHJhY2sgdHggcXVldWUgcmVzdGFydHMgKi8KQEAgLTE3MSw3ICsxODgsNyBAQAogZW51bSBpeGdiZV9yaW5nX2ZfZW51bSB7CiAJUklOR19GX05PTkUgPSAwLAogCVJJTkdfRl9EQ0IsCi0JUklOR19GX1ZNRFEsCisJUklOR19GX1ZNRFEsICAvKiBTUi1JT1YgdXNlcyB0aGUgc2FtZSByaW5nIGZlYXR1cmUgKi8KIAlSSU5HX0ZfUlNTLAogCVJJTkdfRl9GRElSLAogI2lmZGVmIElYR0JFX0ZDT0UKQEAgLTE4Myw3ICsyMDAsNyBAQAogCiAjZGVmaW5lIElYR0JFX01BWF9EQ0JfSU5ESUNFUyAgIDgKICNkZWZpbmUgSVhHQkVfTUFYX1JTU19JTkRJQ0VTICAxNgotI2RlZmluZSBJWEdCRV9NQVhfVk1EUV9JTkRJQ0VTIDE2CisjZGVmaW5lIElYR0JFX01BWF9WTURRX0lORElDRVMgNjQKICNkZWZpbmUgSVhHQkVfTUFYX0ZESVJfSU5ESUNFUyA2NAogI2lmZGVmIElYR0JFX0ZDT0UKICNkZWZpbmUgSVhHQkVfTUFYX0ZDT0VfSU5ESUNFUyAgOApAQCAtMjc3LDcgKzI5NCw3IEBACiAJdTE2IGVpdHJfaGlnaDsKIAogCS8qIFRYICovCi0Jc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3JpbmcgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsgLyogT25lIHBlciBhY3RpdmUgcXVldWUgKi8KKwlzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZ1tNQVhfVFhfUVVFVUVTXSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCWludCBudW1fdHhfcXVldWVzOwogCXUzMiB0eF90aW1lb3V0X2NvdW50OwogCWJvb2wgZGV0ZWN0X3R4X2h1bmc7CkBAIC0yODYsOCArMzAzLDEwIEBACiAJdTY0IGxzY19pbnQ7CiAKIAkvKiBSWCAqLwotCXN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7IC8qIE9uZSBwZXIgYWN0aXZlIHF1ZXVlICovCisJc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3JpbmdbTUFYX1JYX1FVRVVFU10gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKIAlpbnQgbnVtX3J4X3F1ZXVlczsKKwlpbnQgbnVtX3J4X3Bvb2xzOwkJLyogPT0gbnVtX3J4X3F1ZXVlcyBpbiA4MjU5OCAqLworCWludCBudW1fcnhfcXVldWVzX3Blcl9wb29sOwkvKiAxIGlmIDgyNTk4LCBjYW4gYmUgbWFueSBpZiA4MjU5OSAqLwogCXU2NCBod19jc3VtX3J4X2Vycm9yOwogCXU2NCBod19yeF9ub19kbWFfcmVzb3VyY2VzOwogCXU2NCBub25fZW9wX2Rlc2NzOwpAQCAtMzIzLDEzICszNDIsMTQgQEAKICNkZWZpbmUgSVhHQkVfRkxBR19WTURRX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMTkpCiAjZGVmaW5lIElYR0JFX0ZMQUdfRkFOX0ZBSUxfQ0FQQUJMRSAgICAgICAgICAgICAodTMyKSgxIDw8IDIwKQogI2RlZmluZSBJWEdCRV9GTEFHX05FRURfTElOS19VUERBVEUgICAgICAgICAgICAgKHUzMikoMSA8PCAyMikKLSNkZWZpbmUgSVhHQkVfRkxBR19JTl9XQVRDSERPR19UQVNLICAgICAgICAgICAgICh1MzIpKDEgPDwgMjMpCi0jZGVmaW5lIElYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSyAgICAgICAgICAgICAodTMyKSgxIDw8IDI0KQotI2RlZmluZSBJWEdCRV9GTEFHX0lOX1NGUF9NT0RfVEFTSyAgICAgICAgICAgICAgKHUzMikoMSA8PCAyNSkKLSNkZWZpbmUgSVhHQkVfRkxBR19GRElSX0hBU0hfQ0FQQUJMRSAgICAgICAgICAgICh1MzIpKDEgPDwgMjYpCi0jZGVmaW5lIElYR0JFX0ZMQUdfRkRJUl9QRVJGRUNUX0NBUEFCTEUgICAgICAgICAodTMyKSgxIDw8IDI3KQotI2RlZmluZSBJWEdCRV9GTEFHX0ZDT0VfQ0FQQUJMRSAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAyOCkKLSNkZWZpbmUgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMjkpCisjZGVmaW5lIElYR0JFX0ZMQUdfSU5fU0ZQX0xJTktfVEFTSyAgICAgICAgICAgICAodTMyKSgxIDw8IDIzKQorI2RlZmluZSBJWEdCRV9GTEFHX0lOX1NGUF9NT0RfVEFTSyAgICAgICAgICAgICAgKHUzMikoMSA8PCAyNCkKKyNkZWZpbmUgSVhHQkVfRkxBR19GRElSX0hBU0hfQ0FQQUJMRSAgICAgICAgICAgICh1MzIpKDEgPDwgMjUpCisjZGVmaW5lIElYR0JFX0ZMQUdfRkRJUl9QRVJGRUNUX0NBUEFCTEUgICAgICAgICAodTMyKSgxIDw8IDI2KQorI2RlZmluZSBJWEdCRV9GTEFHX0ZDT0VfQ0FQQUJMRSAgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAyNykKKyNkZWZpbmUgSVhHQkVfRkxBR19GQ09FX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMjgpCisjZGVmaW5lIElYR0JFX0ZMQUdfU1JJT1ZfQ0FQQUJMRSAgICAgICAgICAgICAgICAodTMyKSgxIDw8IDI5KQorI2RlZmluZSBJWEdCRV9GTEFHX1NSSU9WX0VOQUJMRUQgICAgICAgICAgICAgICAgKHUzMikoMSA8PCAzMCkKIAogCXUzMiBmbGFnczI7CiAjZGVmaW5lIElYR0JFX0ZMQUcyX1JTQ19DQVBBQkxFICAgICAgICAgICAgICAgICAodTMyKSgxKQpAQCAtMzc5LDYgKzM5OSwxMyBAQAogCXU2NCByc2NfdG90YWxfZmx1c2g7CiAJdTMyIHdvbDsKIAl1MTYgZWVwcm9tX3ZlcnNpb247CisKKwlpbnQgbm9kZTsKKworCS8qIFNSLUlPViAqLworCURFQ0xBUkVfQklUTUFQKGFjdGl2ZV92ZnMsIElYR0JFX01BWF9WRl9GVU5DVElPTlMpOworCXVuc2lnbmVkIGludCBudW1fdmZzOworCXN0cnVjdCB2Zl9kYXRhX3N0b3JhZ2UgKnZmaW5mbzsKIH07CiAKIGVudW0gaXhiZ2Vfc3RhdGVfdCB7CkBAIC00MjYsNiArNDUzLDEwIEBACiBleHRlcm4gczMyIGl4Z2JlX2ZkaXJfYWRkX3NpZ25hdHVyZV9maWx0ZXJfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1OCBxdWV1ZSk7CitleHRlcm4gczMyIGl4Z2JlX2ZkaXJfYWRkX3BlcmZlY3RfZmlsdGVyXzgyNTk5KHN0cnVjdCBpeGdiZV9odyAqaHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0X21hc2tzICppbnB1dF9tYXNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHNvZnRfaWQsIHU4IHF1ZXVlKTsKIGV4dGVybiBzMzIgaXhnYmVfYXRyX3NldF92bGFuX2lkXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHZsYW5faWQpOwogZXh0ZXJuIHMzMiBpeGdiZV9hdHJfc2V0X3NyY19pcHY0XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LApAQCAtNDQwLDYgKzQ3MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBmbGV4X2J5dGUpOwogZXh0ZXJuIHMzMiBpeGdiZV9hdHJfc2V0X2w0dHlwZV84MjU5OShzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggbDR0eXBlKTsKK2V4dGVybiB2b2lkIGl4Z2JlX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogI2lmZGVmIElYR0JFX0ZDT0UKIGV4dGVybiB2b2lkIGl4Z2JlX2NvbmZpZ3VyZV9mY29lKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiBpbnQgaXhnYmVfZnNvKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlXzgyNTk5LmMKaW5kZXggYjQ5YmQ2Yi4uMWYzMGUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfODI1OTkuYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV84MjU5OS5jCkBAIC0zMSw2ICszMSw3IEBACiAKICNpbmNsdWRlICJpeGdiZS5oIgogI2luY2x1ZGUgIml4Z2JlX3BoeS5oIgorI2luY2x1ZGUgIml4Z2JlX21ieC5oIgogCiAjZGVmaW5lIElYR0JFXzgyNTk5X01BWF9UWF9RVUVVRVMgMTI4CiAjZGVmaW5lIElYR0JFXzgyNTk5X01BWF9SWF9RVUVVRVMgMTI4CkBAIC04ODksNyArODkwLDcgQEAKIHN0YXRpYyBzMzIgaXhnYmVfcmVzZXRfaHdfODI1OTkoc3RydWN0IGl4Z2JlX2h3ICpodykKIHsKIAlzMzIgc3RhdHVzID0gMDsKLQl1MzIgY3RybCwgY3RybF9leHQ7CisJdTMyIGN0cmw7CiAJdTMyIGk7CiAJdTMyIGF1dG9jOwogCXUzMiBhdXRvYzI7CkBAIC05NDQsMTUgKzk0NSw5IEBACiAJCXN0YXR1cyA9IElYR0JFX0VSUl9SRVNFVF9GQUlMRUQ7CiAJCWh3X2RiZyhodywgIlJlc2V0IHBvbGxpbmcgZmFpbGVkIHRvIGNvbXBsZXRlLlxuIik7CiAJfQotCS8qIENsZWFyIFBGIFJlc2V0IERvbmUgYml0IHNvIFBGL1ZGIE1haWwgT3BzIGNhbiB3b3JrICovCi0JY3RybF9leHQgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfQ1RSTF9FWFQpOwotCWN0cmxfZXh0IHw9IElYR0JFX0NUUkxfRVhUX1BGUlNURDsKLQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0NUUkxfRVhULCBjdHJsX2V4dCk7CiAKIAltc2xlZXAoNTApOwogCi0KLQogCS8qCiAJICogU3RvcmUgdGhlIG9yaWdpbmFsIEFVVE9DL0FVVE9DMiB2YWx1ZXMgaWYgdGhleSBoYXZlIG5vdCBiZWVuCiAJICogc3RvcmVkIG9mZiB5ZXQuICBPdGhlcndpc2UgcmVzdG9yZSB0aGUgc3RvcmVkIG9yaWdpbmFsCkBAIC0xMDk1LDkgKzEwOTAsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB2bGFuX29uKQogewogCXUzMiByZWdpbmRleDsKKwl1MzIgdmx2Zl9pbmRleDsKIAl1MzIgYml0aW5kZXg7CiAJdTMyIGJpdHM7CiAJdTMyIGZpcnN0X2VtcHR5X3Nsb3Q7CisJdTMyIHZ0X2N0bDsKIAogCWlmICh2bGFuID4gNDA5NSkKIAkJcmV0dXJuIElYR0JFX0VSUl9QQVJBTTsKQEAgLTExMjQsNzcgKzExMjEsODUgQEAKIAogCiAJLyogUGFydCAyCi0JICogSWYgdGhlIHZpbmQgaXMgc2V0CisJICogSWYgVlQgbW9kZSBpcyBzZXQKIAkgKiAgIEVpdGhlciB2bGFuX29uCiAJICogICAgIG1ha2Ugc3VyZSB0aGUgdmxhbiBpcyBpbiBWTFZGCiAJICogICAgIHNldCB0aGUgdmluZCBiaXQgaW4gdGhlIG1hdGNoaW5nIFZMVkZCCiAJICogICBPciAhdmxhbl9vbgogCSAqICAgICBjbGVhciB0aGUgcG9vbCBiaXQgYW5kIHBvc3NpYmx5IHRoZSB2aW5kCiAJICovCi0JaWYgKHZpbmQpIHsKLQkJLyogZmluZCB0aGUgdmxhbmlkIG9yIHRoZSBmaXJzdCBlbXB0eSBzbG90ICovCi0JCWZpcnN0X2VtcHR5X3Nsb3QgPSAwOworCXZ0X2N0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVF9DVEwpOworCWlmICghKHZ0X2N0bCAmIElYR0JFX1ZUX0NUTF9WVF9FTkFCTEUpKQorCQlnb3RvIG91dDsKIAotCQlmb3IgKHJlZ2luZGV4ID0gMTsgcmVnaW5kZXggPCBJWEdCRV9WTFZGX0VOVFJJRVM7IHJlZ2luZGV4KyspIHsKLQkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkxWRihyZWdpbmRleCkpOwotCQkJaWYgKCFiaXRzICYmICFmaXJzdF9lbXB0eV9zbG90KQotCQkJCWZpcnN0X2VtcHR5X3Nsb3QgPSByZWdpbmRleDsKLQkJCWVsc2UgaWYgKChiaXRzICYgMHgwRkZGKSA9PSB2bGFuKQotCQkJCWJyZWFrOwotCQl9CisJLyogZmluZCB0aGUgdmxhbmlkIG9yIHRoZSBmaXJzdCBlbXB0eSBzbG90ICovCisJZmlyc3RfZW1wdHlfc2xvdCA9IDA7CiAKLQkJaWYgKHJlZ2luZGV4ID49IElYR0JFX1ZMVkZfRU5UUklFUykgewotCQkJaWYgKGZpcnN0X2VtcHR5X3Nsb3QpCi0JCQkJcmVnaW5kZXggPSBmaXJzdF9lbXB0eV9zbG90OwotCQkJZWxzZSB7Ci0JCQkJaHdfZGJnKGh3LCAiTm8gc3BhY2UgaW4gVkxWRi5cbiIpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQl9Ci0KLQkJaWYgKHZsYW5fb24pIHsKLQkJCS8qIHNldCB0aGUgcG9vbCBiaXQgKi8KLQkJCWlmICh2aW5kIDwgMzIpIHsKLQkJCQliaXRzID0gSVhHQkVfUkVBRF9SRUcoaHcsCi0JCQkJICAgICAgICAgICAgICAgICAgICBJWEdCRV9WTFZGQihyZWdpbmRleCAqIDIpKTsKLQkJCQliaXRzIHw9ICgxIDw8IHZpbmQpOwotCQkJCUlYR0JFX1dSSVRFX1JFRyhodywKLQkJCQkgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKHJlZ2luZGV4ICogMiksIGJpdHMpOwotCQkJfSBlbHNlIHsKLQkJCQliaXRzID0gSVhHQkVfUkVBRF9SRUcoaHcsCi0JCQkJICAgICAgICAgICAgICBJWEdCRV9WTFZGQigocmVnaW5kZXggKiAyKSArIDEpKTsKLQkJCQliaXRzIHw9ICgxIDw8IHZpbmQpOwotCQkJCUlYR0JFX1dSSVRFX1JFRyhodywKLQkJCQkgICAgICAgIElYR0JFX1ZMVkZCKChyZWdpbmRleCAqIDIpICsgMSksIGJpdHMpOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyogY2xlYXIgdGhlIHBvb2wgYml0ICovCi0JCQlpZiAodmluZCA8IDMyKSB7Ci0JCQkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LAotCQkJCSAgICAgSVhHQkVfVkxWRkIocmVnaW5kZXggKiAyKSk7Ci0JCQliaXRzICY9IH4oMSA8PCB2aW5kKTsKLQkJCQlJWEdCRV9XUklURV9SRUcoaHcsCi0JCQkJICAgICAgICAgICAgICBJWEdCRV9WTFZGQihyZWdpbmRleCAqIDIpLCBiaXRzKTsKLQkJCQliaXRzIHw9IElYR0JFX1JFQURfUkVHKGh3LAotCQkJCSAgICAgICAgICAgICAgSVhHQkVfVkxWRkIoKHJlZ2luZGV4ICogMikgKyAxKSk7Ci0JCQl9IGVsc2UgewotCQkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywKLQkJCQkgICAgICAgICAgICAgIElYR0JFX1ZMVkZCKChyZWdpbmRleCAqIDIpICsgMSkpOwotCQkJCWJpdHMgJj0gfigxIDw8IHZpbmQpOwotCQkJCUlYR0JFX1dSSVRFX1JFRyhodywKLQkJCQkgICAgICAgIElYR0JFX1ZMVkZCKChyZWdpbmRleCAqIDIpICsgMSksIGJpdHMpOwotCQkJCWJpdHMgfD0gSVhHQkVfUkVBRF9SRUcoaHcsCi0JCQkJICAgICAgICAgICAgICAgICAgICBJWEdCRV9WTFZGQihyZWdpbmRleCAqIDIpKTsKLQkJCX0KLQkJfQotCi0JCWlmIChiaXRzKQotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTFZGKHJlZ2luZGV4KSwKLQkJCSAgICAgICAgICAgICAgICAoSVhHQkVfVkxWRl9WSUVOIHwgdmxhbikpOwotCQllbHNlCi0JCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMVkYocmVnaW5kZXgpLCAwKTsKKwlmb3IgKHZsdmZfaW5kZXggPSAxOyB2bHZmX2luZGV4IDwgSVhHQkVfVkxWRl9FTlRSSUVTOyB2bHZmX2luZGV4KyspIHsKKwkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WTFZGKHZsdmZfaW5kZXgpKTsKKwkJaWYgKCFiaXRzICYmICFmaXJzdF9lbXB0eV9zbG90KQorCQkJZmlyc3RfZW1wdHlfc2xvdCA9IHZsdmZfaW5kZXg7CisJCWVsc2UgaWYgKChiaXRzICYgMHgwRkZGKSA9PSB2bGFuKQorCQkJYnJlYWs7CiAJfQogCisJaWYgKHZsdmZfaW5kZXggPj0gSVhHQkVfVkxWRl9FTlRSSUVTKSB7CisJCWlmIChmaXJzdF9lbXB0eV9zbG90KQorCQkJdmx2Zl9pbmRleCA9IGZpcnN0X2VtcHR5X3Nsb3Q7CisJCWVsc2UgeworCQkJaHdfZGJnKGh3LCAiTm8gc3BhY2UgaW4gVkxWRi5cbiIpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlpZiAodmxhbl9vbikgeworCQkvKiBzZXQgdGhlIHBvb2wgYml0ICovCisJCWlmICh2aW5kIDwgMzIpIHsKKwkJCWJpdHMgPSBJWEdCRV9SRUFEX1JFRyhodywKKwkJCQkJICAgICAgSVhHQkVfVkxWRkIodmx2Zl9pbmRleCAqIDIpKTsKKwkJCWJpdHMgfD0gKDEgPDwgdmluZCk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsCisJCQkJCUlYR0JFX1ZMVkZCKHZsdmZfaW5kZXggKiAyKSwgYml0cyk7CisJCX0gZWxzZSB7CisJCQliaXRzID0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJSVhHQkVfVkxWRkIoKHZsdmZfaW5kZXggKiAyKSArIDEpKTsKKwkJCWJpdHMgfD0gKDEgPDwgKHZpbmQgLSAzMikpOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LAorCQkJCUlYR0JFX1ZMVkZCKCh2bHZmX2luZGV4ICogMikgKyAxKSwgYml0cyk7CisJCX0KKwl9IGVsc2UgeworCQkvKiBjbGVhciB0aGUgcG9vbCBiaXQgKi8KKwkJaWYgKHZpbmQgPCAzMikgeworCQkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJCQkgICAgICBJWEdCRV9WTFZGQih2bHZmX2luZGV4ICogMikpOworCQkJYml0cyAmPSB+KDEgPDwgdmluZCk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsCisJCQkJCUlYR0JFX1ZMVkZCKHZsdmZfaW5kZXggKiAyKSwgYml0cyk7CisJCQliaXRzIHw9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJCQlJWEdCRV9WTFZGQigodmx2Zl9pbmRleCAqIDIpICsgMSkpOworCQl9IGVsc2UgeworCQkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LAorCQkJCUlYR0JFX1ZMVkZCKCh2bHZmX2luZGV4ICogMikgKyAxKSk7CisJCQliaXRzICY9IH4oMSA8PCAodmluZCAtIDMyKSk7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsCisJCQkJSVhHQkVfVkxWRkIoKHZsdmZfaW5kZXggKiAyKSArIDEpLCBiaXRzKTsKKwkJCWJpdHMgfD0gSVhHQkVfUkVBRF9SRUcoaHcsCisJCQkJCSAgICAgICBJWEdCRV9WTFZGQih2bHZmX2luZGV4ICogMikpOworCQl9CisJfQorCisJaWYgKGJpdHMpIHsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WTFZGKHZsdmZfaW5kZXgpLAorCQkJCShJWEdCRV9WTFZGX1ZJRU4gfCB2bGFuKSk7CisJCS8qIGlmIGJpdHMgaXMgbm9uLXplcm8gdGhlbiBzb21lIHBvb2xzL1ZGcyBhcmUgc3RpbGwKKwkJICogdXNpbmcgdGhpcyBWTEFOIElELiAgRm9yY2UgdGhlIFZGVEEgZW50cnkgdG8gb24gKi8KKwkJYml0cyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlRBKHJlZ2luZGV4KSk7CisJCWJpdHMgfD0gKDEgPDwgYml0aW5kZXgpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGVEEocmVnaW5kZXgpLCBiaXRzKTsKKwl9CisJZWxzZQorCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMVkYodmx2Zl9pbmRleCksIDApOworCiBvdXQ6CiAJcmV0dXJuIDA7CiB9CkBAIC0xNDM0LDYgKzE0MzksOSBAQAogCS8qIFNlbmQgaW50ZXJydXB0IHdoZW4gNjQgZmlsdGVycyBhcmUgbGVmdCAqLwogCWZkaXJjdHJsIHw9IDQgPDwgSVhHQkVfRkRJUkNUUkxfRlVMTF9USFJFU0hfU0hJRlQ7CiAKKwkvKiBJbml0aWFsaXplIHRoZSBkcm9wIHF1ZXVlIHRvIFJ4IHF1ZXVlIDEyNyAqLworCWZkaXJjdHJsIHw9ICgxMjcgPDwgSVhHQkVfRkRJUkNUUkxfRFJPUF9RX1NISUZUKTsKKwogCXN3aXRjaCAocGJhbGxvYykgewogCWNhc2UgSVhHQkVfRkRJUl9QQkFMTE9DXzY0SzoKIAkJLyogMmsgLSAxIHBlcmZlY3QgZmlsdGVycyAqLwpAQCAtMTY3NSw4ICsxNjgzLDggQEAKICAqICBAc3JjX2FkZHJfNDogdGhlIGZvdXJ0aCA0IGJ5dGVzIG9mIHRoZSBJUCBhZGRyZXNzIHRvIGxvYWQKICAqKi8KIHMzMiBpeGdiZV9hdHJfc2V0X3NyY19pcHY2XzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBzcmNfYWRkcl8xLCB1MzIgc3JjX2FkZHJfMiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgc3JjX2FkZHJfMywgdTMyIHNyY19hZGRyXzQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgc3JjX2FkZHJfMSwgdTMyIHNyY19hZGRyXzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgc3JjX2FkZHJfMywgdTMyIHNyY19hZGRyXzQpCiB7CiAJaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9TUkNfSVBWNl9PRkZTRVRdID0gc3JjX2FkZHJfNCAmIDB4ZmY7CiAJaW5wdXQtPmJ5dGVfc3RyZWFtW0lYR0JFX0FUUl9TUkNfSVBWNl9PRkZTRVQgKyAxXSA9CkBAIC0xNzE4LDggKzE3MjYsOCBAQAogICogIEBkc3RfYWRkcl80OiB0aGUgZm91cnRoIDQgYnl0ZXMgb2YgdGhlIElQIGFkZHJlc3MgdG8gbG9hZAogICoqLwogczMyIGl4Z2JlX2F0cl9zZXRfZHN0X2lwdjZfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGRzdF9hZGRyXzEsIHUzMiBkc3RfYWRkcl8yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBkc3RfYWRkcl8zLCB1MzIgZHN0X2FkZHJfNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBkc3RfYWRkcl8xLCB1MzIgZHN0X2FkZHJfMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBkc3RfYWRkcl8zLCB1MzIgZHN0X2FkZHJfNCkKIHsKIAlpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX0RTVF9JUFY2X09GRlNFVF0gPSBkc3RfYWRkcl80ICYgMHhmZjsKIAlpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX0RTVF9JUFY2X09GRlNFVCArIDFdID0KQEAgLTE3OTcsNyArMTgwNSw3IEBACiAgKiAgQHZtX3Bvb2w6IHRoZSBWaXJ0dWFsIE1hY2hpbmUgcG9vbCB0byBsb2FkCiAgKiovCiBzMzIgaXhnYmVfYXRyX3NldF92bV9wb29sXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggdm1fcG9vbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggdm1fcG9vbCkKIHsKIAlpbnB1dC0+Ynl0ZV9zdHJlYW1bSVhHQkVfQVRSX1ZNX1BPT0xfT0ZGU0VUXSA9IHZtX3Bvb2w7CiAKQEAgLTE4MjEsOCArMTgyOSw3IEBACiAgKiAgQGlucHV0OiBpbnB1dCBzdHJlYW0gdG8gc2VhcmNoCiAgKiAgQHZsYW46IHRoZSBWTEFOIGlkIHRvIGxvYWQKICAqKi8KLXN0YXRpYyBzMzIgaXhnYmVfYXRyX2dldF92bGFuX2lkXzgyNTk5KHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgKmlucHV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2ICp2bGFuKQorc3RhdGljIHMzMiBpeGdiZV9hdHJfZ2V0X3ZsYW5faWRfODI1OTkoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dCAqaW5wdXQsIHUxNiAqdmxhbikKIHsKIAkqdmxhbiA9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfVkxBTl9PRkZTRVRdOwogCSp2bGFuIHw9IGlucHV0LT5ieXRlX3N0cmVhbVtJWEdCRV9BVFJfVkxBTl9PRkZTRVQgKyAxXSA8PCA4OwpAQCAtMjA3OCwyMyArMjA4NSwyNiBAQAogICogIGl4Z2JlX2ZkaXJfYWRkX3BlcmZlY3RfZmlsdGVyXzgyNTk5IC0gQWRkcyBhIHBlcmZlY3QgZmlsdGVyCiAgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQogICogIEBpbnB1dDogaW5wdXQgYml0c3RyZWFtCisgKiAgQGlucHV0X21hc2tzOiBiaXR3aXNlIG1hc2tzIGZvciByZWxldmFudCBmaWVsZHMKKyAqICBAc29mdF9pZDogc29mdHdhcmUgaW5kZXggaW50byB0aGUgc2lsaWNvbiBoYXNoIHRhYmxlcyBmb3IgZmlsdGVyIHN0b3JhZ2UKICAqICBAcXVldWU6IHF1ZXVlIGluZGV4IHRvIGRpcmVjdCB0cmFmZmljIHRvCiAgKgogICogIE5vdGUgdGhhdCB0aGUgY2FsbGVyIHRvIHRoaXMgZnVuY3Rpb24gbXVzdCBsb2NrIGJlZm9yZSBjYWxsaW5nLCBzaW5jZSB0aGUKICAqICBoYXJkd2FyZSB3cml0ZXMgbXVzdCBiZSBwcm90ZWN0ZWQgZnJvbSBvbmUgYW5vdGhlci4KICAqKi8KIHMzMiBpeGdiZV9mZGlyX2FkZF9wZXJmZWN0X2ZpbHRlcl84MjU5OShzdHJ1Y3QgaXhnYmVfaHcgKmh3LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHNvZnRfaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU4IHF1ZXVlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfYXRyX2lucHV0ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl4Z2JlX2F0cl9pbnB1dF9tYXNrcyAqaW5wdXRfbWFza3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiBzb2Z0X2lkLCB1OCBxdWV1ZSkKIHsKIAl1MzIgZmRpcmNtZCA9IDA7CiAJdTMyIGZkaXJoYXNoOwotCXUzMiBzcmNfaXB2NCwgZHN0X2lwdjQ7CisJdTMyIHNyY19pcHY0ID0gMCwgZHN0X2lwdjQgPSAwOwogCXUzMiBzcmNfaXB2Nl8xLCBzcmNfaXB2Nl8yLCBzcmNfaXB2Nl8zLCBzcmNfaXB2Nl80OwogCXUxNiBzcmNfcG9ydCwgZHN0X3BvcnQsIHZsYW5faWQsIGZsZXhfYnl0ZXM7CiAJdTE2IGJ1Y2tldF9oYXNoOwogCXU4ICBsNHR5cGU7CisJdTggIGZkaXJtID0gMDsKIAogCS8qIEdldCBvdXIgaW5wdXQgdmFsdWVzICovCiAJaXhnYmVfYXRyX2dldF9sNHR5cGVfODI1OTkoaW5wdXQsICZsNHR5cGUpOwpAQCAtMjE0OSw3ICsyMTU5LDYgQEAKIAkJLyogSVB2NCAqLwogCQlpeGdiZV9hdHJfZ2V0X3NyY19pcHY0XzgyNTk5KGlucHV0LCAmc3JjX2lwdjQpOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJJUFNBLCBzcmNfaXB2NCk7Ci0KIAl9CiAKIAlpeGdiZV9hdHJfZ2V0X2RzdF9pcHY0XzgyNTk5KGlucHV0LCAmZHN0X2lwdjQpOwpAQCAtMjE1OCw3ICsyMTY3LDc4IEBACiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GRElSVkxBTiwgKHZsYW5faWQgfAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmxleF9ieXRlcyA8PCBJWEdCRV9GRElSVkxBTl9GTEVYX1NISUZUKSkpOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUlBPUlQsIChzcmNfcG9ydCB8Ci0JICAgICAgICAgICAgICAgICAgICAgICAoZHN0X3BvcnQgPDwgSVhHQkVfRkRJUlBPUlRfREVTVElOQVRJT05fU0hJRlQpKSk7CisJICAgICAgICAgICAgICAoZHN0X3BvcnQgPDwgSVhHQkVfRkRJUlBPUlRfREVTVElOQVRJT05fU0hJRlQpKSk7CisKKwkvKgorCSAqIFByb2dyYW0gdGhlIHJlbGV2YW50IG1hc2sgcmVnaXN0ZXJzLiAgSWYgc3JjL2RzdF9wb3J0IG9yIHNyYy9kc3RfYWRkcgorCSAqIGFyZSB6ZXJvLCB0aGVuIGFzc3VtZSBhIGZ1bGwgbWFzayBmb3IgdGhhdCBmaWVsZC4gIEFsc28gYXNzdW1lIHRoYXQKKwkgKiBhIFZMQU4gb2YgMCBpcyB1bnNwZWNpZmllZCwgc28gbWFzayB0aGF0IG91dCBhcyB3ZWxsLiAgTDR0eXBlCisJICogY2Fubm90IGJlIG1hc2tlZCBvdXQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbi4KKwkgKgorCSAqIFRoaXMgYWxzbyBhc3N1bWVzIElQdjQgb25seS4gIElQdjYgbWFza2luZyBpc24ndCBzdXBwb3J0ZWQgYXQgdGhpcworCSAqIHBvaW50IGluIHRpbWUuCisJICovCisJaWYgKHNyY19pcHY0ID09IDApCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUlNJUDRNLCAweGZmZmZmZmZmKTsKKwllbHNlCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUlNJUDRNLCBpbnB1dF9tYXNrcy0+c3JjX2lwX21hc2spOworCisJaWYgKGRzdF9pcHY0ID09IDApCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUkRJUDRNLCAweGZmZmZmZmZmKTsKKwllbHNlCisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUkRJUDRNLCBpbnB1dF9tYXNrcy0+ZHN0X2lwX21hc2spOworCisJc3dpdGNoIChsNHR5cGUgJiBJWEdCRV9BVFJfTDRUWVBFX01BU0spIHsKKwljYXNlIElYR0JFX0FUUl9MNFRZUEVfVENQOgorCQlpZiAoc3JjX3BvcnQgPT0gMCkKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUlRDUE0sIDB4ZmZmZik7CisJCWVsc2UKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUlRDUE0sCisJCQkgICAgICAgICAgICAgICAgaW5wdXRfbWFza3MtPnNyY19wb3J0X21hc2spOworCisJCWlmIChkc3RfcG9ydCA9PSAwKQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GRElSVENQTSwKKwkJCSAgICAgICAgICAgICAgIChJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkRJUlRDUE0pIHwKKwkJCSAgICAgICAgICAgICAgICAoMHhmZmZmIDw8IDE2KSkpOworCQllbHNlCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJUQ1BNLAorCQkJICAgICAgICAgICAgICAgKElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9GRElSVENQTSkgfAorCQkJICAgICAgICAgICAgICAgIChpbnB1dF9tYXNrcy0+ZHN0X3BvcnRfbWFzayA8PCAxNikpKTsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9BVFJfTDRUWVBFX1VEUDoKKwkJaWYgKHNyY19wb3J0ID09IDApCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJVRFBNLCAweGZmZmYpOworCQllbHNlCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0ZESVJVRFBNLAorCQkJICAgICAgICAgICAgICAgIGlucHV0X21hc2tzLT5zcmNfcG9ydF9tYXNrKTsKKworCQlpZiAoZHN0X3BvcnQgPT0gMCkKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkRJUlVEUE0sCisJCQkgICAgICAgICAgICAgICAoSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0ZESVJVRFBNKSB8CisJCQkgICAgICAgICAgICAgICAgKDB4ZmZmZiA8PCAxNikpKTsKKwkJZWxzZQorCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GRElSVURQTSwKKwkJCSAgICAgICAgICAgICAgIChJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfRkRJUlVEUE0pIHwKKwkJCSAgICAgICAgICAgICAgICAoaW5wdXRfbWFza3MtPnNyY19wb3J0X21hc2sgPDwgMTYpKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIHRoaXMgYWxyZWFkeSB3b3VsZCBoYXZlIGZhaWxlZCBhYm92ZSAqLworCQlicmVhazsKKwl9CisKKwkvKiBQcm9ncmFtIHRoZSBsYXN0IG1hc2sgcmVnaXN0ZXIsIEZESVJNICovCisJaWYgKGlucHV0X21hc2tzLT52bGFuX2lkX21hc2sgfHwgIXZsYW5faWQpCisJCS8qIE1hc2sgYm90aCBWTEFOIGFuZCBWTEFOUCAtIGJpdHMgMCBhbmQgMSAqLworCQlmZGlybSB8PSAweDM7CisKKwlpZiAoaW5wdXRfbWFza3MtPmRhdGFfbWFzayB8fCAhZmxleF9ieXRlcykKKwkJLyogRmxleCBieXRlcyBuZWVkIG1hc2tpbmcsIHNvIG1hc2sgdGhlIHdob2xlIHRoaW5nIC0gYml0IDQgKi8KKwkJZmRpcm0gfD0gMHgxMDsKKworCS8qIE5vdyBtYXNrIFZNIHBvb2wgYW5kIGRlc3RpbmF0aW9uIElQdjYgLSBiaXRzIDUgYW5kIDIgKi8KKwlmZGlybSB8PSAweDI0OworCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GRElSTSwgZmRpcm0pOwogCiAJZmRpcmNtZCB8PSBJWEdCRV9GRElSQ01EX0NNRF9BRERfRkxPVzsKIAlmZGlyY21kIHw9IElYR0JFX0ZESVJDTURfRklMVEVSX1VQREFURTsKQEAgLTI2NTUsNCArMjczNSw1IEBACiAJLm1hY19vcHMgICAgICAgICAgICAgICAgPSAmbWFjX29wc184MjU5OSwKIAkuZWVwcm9tX29wcyAgICAgICAgICAgICA9ICZlZXByb21fb3BzXzgyNTk5LAogCS5waHlfb3BzICAgICAgICAgICAgICAgID0gJnBoeV9vcHNfODI1OTksCisJLm1ieF9vcHMgICAgICAgICAgICAgICAgPSAmbWJ4X29wc184MjU5OSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCmluZGV4IDIxZjE1OGYuLmViNDkwMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5jCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KIAogI2luY2x1ZGUgIml4Z2JlLmgiCkBAIC0xMjc4LDE5ICsxMjc3LDExIEBACiAJCS8qIEdldCB0aGUgTUFDIGFkZHJlc3MgZnJvbSB0aGUgUkFSMCBmb3IgbGF0ZXIgcmVmZXJlbmNlICovCiAJCWh3LT5tYWMub3BzLmdldF9tYWNfYWRkcihodywgaHctPm1hYy5hZGRyKTsKIAotCQlod19kYmcoaHcsICIgS2VlcGluZyBDdXJyZW50IFJBUjAgQWRkciA9JS4yWCAlLjJYICUuMlggIiwKLQkJICAgICAgIGh3LT5tYWMuYWRkclswXSwgaHctPm1hYy5hZGRyWzFdLAotCQkgICAgICAgaHctPm1hYy5hZGRyWzJdKTsKLQkJaHdfZGJnKGh3LCAiJS4yWCAlLjJYICUuMlhcbiIsIGh3LT5tYWMuYWRkclszXSwKLQkJICAgICAgIGh3LT5tYWMuYWRkcls0XSwgaHctPm1hYy5hZGRyWzVdKTsKKwkJaHdfZGJnKGh3LCAiIEtlZXBpbmcgQ3VycmVudCBSQVIwIEFkZHIgPSVwTVxuIiwgaHctPm1hYy5hZGRyKTsKIAl9IGVsc2UgewogCQkvKiBTZXR1cCB0aGUgcmVjZWl2ZSBhZGRyZXNzLiAqLwogCQlod19kYmcoaHcsICJPdmVycmlkaW5nIE1BQyBBZGRyZXNzIGluIFJBUlswXVxuIik7Ci0JCWh3X2RiZyhodywgIiBOZXcgTUFDIEFkZHIgPSUuMlggJS4yWCAlLjJYICIsCi0JCSAgICAgICBody0+bWFjLmFkZHJbMF0sIGh3LT5tYWMuYWRkclsxXSwKLQkJICAgICAgIGh3LT5tYWMuYWRkclsyXSk7Ci0JCWh3X2RiZyhodywgIiUuMlggJS4yWCAlLjJYXG4iLCBody0+bWFjLmFkZHJbM10sCi0JCSAgICAgICBody0+bWFjLmFkZHJbNF0sIGh3LT5tYWMuYWRkcls1XSk7CisJCWh3X2RiZyhodywgIiBOZXcgTUFDIEFkZHIgPSVwTVxuIiwgaHctPm1hYy5hZGRyKTsKIAogCQlody0+bWFjLm9wcy5zZXRfcmFyKGh3LCAwLCBody0+bWFjLmFkZHIsIDAsIElYR0JFX1JBSF9BVik7CiAJfQpAQCAtMTM1NSw3ICsxMzQ2LDcgQEAKIC8qKgogICogIGl4Z2JlX3VwZGF0ZV91Y19hZGRyX2xpc3RfZ2VuZXJpYyAtIFVwZGF0ZXMgTUFDIGxpc3Qgb2Ygc2Vjb25kYXJ5IGFkZHJlc3NlcwogICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKLSAqICBAdWNfbGlzdDogdGhlIGxpc3Qgb2YgbmV3IGFkZHJlc3NlcworICogIEBuZXRkZXY6IHBvaW50ZXIgdG8gbmV0IGRldmljZSBzdHJ1Y3R1cmUKICAqCiAgKiAgVGhlIGdpdmVuIGxpc3QgcmVwbGFjZXMgYW55IGV4aXN0aW5nIGxpc3QuICBDbGVhcnMgdGhlIHNlY29uZGFyeSBhZGRycyBmcm9tCiAgKiAgcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVycy4gIFVzZXMgdW51c2VkIHJlY2VpdmUgYWRkcmVzcyByZWdpc3RlcnMgZm9yIHRoZQpAQCAtMTM2NSw3ICsxMzU2LDcgQEAKICAqICBtYW51YWxseSBwdXR0aW5nIHRoZSBkZXZpY2UgaW50byBwcm9taXNjdW91cyBtb2RlLgogICoqLwogczMyIGl4Z2JlX3VwZGF0ZV91Y19hZGRyX2xpc3RfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LAotCQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnVjX2xpc3QpCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKIHsKIAl1MzIgaTsKIAl1MzIgb2xkX3Byb21pc2Nfc2V0dGluZyA9IGh3LT5hZGRyX2N0cmwub3ZlcmZsb3dfcHJvbWlzYzsKQEAgLTEzODksNyArMTM4MCw3IEBACiAJfQogCiAJLyogQWRkIHRoZSBuZXcgYWRkcmVzc2VzICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShoYSwgdWNfbGlzdCwgbGlzdCkgeworCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBuZXRkZXYpIHsKIAkJaHdfZGJnKGh3LCAiIEFkZGluZyB0aGUgc2Vjb25kYXJ5IGFkZHJlc3NlczpcbiIpOwogCQlpeGdiZV9hZGRfdWNfYWRkcihodywgaGEtPmFkZHIsIDApOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmgKaW5kZXggZGZmZjBmZi4uMTM2MDZkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmgKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfY29tbW9uLmgKQEAgLTYwLDcgKzYwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIG1jX2FkZHJfY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX21jX2FkZHJfaXRyIGZ1bmMpOwogczMyIGl4Z2JlX3VwZGF0ZV91Y19hZGRyX2xpc3RfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3LAotCQkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnVjX2xpc3QpOworCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogczMyIGl4Z2JlX2VuYWJsZV9tY19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOwogczMyIGl4Z2JlX2Rpc2FibGVfbWNfZ2VuZXJpYyhzdHJ1Y3QgaXhnYmVfaHcgKmh3KTsKIHMzMiBpeGdiZV9lbmFibGVfcnhfZG1hX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHJlZ3ZhbCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9ldGh0b29sLmMKaW5kZXggZDc3OTYxZi4uNzk0OWE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2V0aHRvb2wuYwpAQCAtNDQxLDEwICs0NDEsOCBAQAogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwogCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPNjsKIAl9IGVsc2UgewotCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIAkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU087CiAJCW5ldGRldi0+ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPNjsKLQkJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTgzNCw4ICs4MzIsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKLQlzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZyA9IGFkYXB0ZXItPnJ4X3Jpbmc7CisJc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nWzBdOworCXN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nID0gYWRhcHRlci0+cnhfcmluZ1swXTsKIAogCXJpbmctPnJ4X21heF9wZW5kaW5nID0gSVhHQkVfTUFYX1JYRDsKIAlyaW5nLT50eF9tYXhfcGVuZGluZyA9IElYR0JFX01BWF9UWEQ7CkBAIC04NjcsOCArODY1LDggQEAKIAluZXdfdHhfY291bnQgPSBtaW4obmV3X3R4X2NvdW50LCAodTMyKUlYR0JFX01BWF9UWEQpOwogCW5ld190eF9jb3VudCA9IEFMSUdOKG5ld190eF9jb3VudCwgSVhHQkVfUkVRX1RYX0RFU0NSSVBUT1JfTVVMVElQTEUpOwogCi0JaWYgKChuZXdfdHhfY291bnQgPT0gYWRhcHRlci0+dHhfcmluZy0+Y291bnQpICYmCi0JICAgIChuZXdfcnhfY291bnQgPT0gYWRhcHRlci0+cnhfcmluZy0+Y291bnQpKSB7CisJaWYgKChuZXdfdHhfY291bnQgPT0gYWRhcHRlci0+dHhfcmluZ1swXS0+Y291bnQpICYmCisJICAgIChuZXdfcnhfY291bnQgPT0gYWRhcHRlci0+cnhfcmluZ1swXS0+Y291bnQpKSB7CiAJCS8qIG5vdGhpbmcgdG8gZG8gKi8KIAkJcmV0dXJuIDA7CiAJfQpAQCAtODc4LDI1ICs4NzYsMjQgQEAKIAogCWlmICghbmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT50eF9yaW5nW2ldLmNvdW50ID0gbmV3X3R4X2NvdW50OworCQkJYWRhcHRlci0+dHhfcmluZ1tpXS0+Y291bnQgPSBuZXdfdHhfY291bnQ7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmNvdW50ID0gbmV3X3J4X2NvdW50OworCQkJYWRhcHRlci0+cnhfcmluZ1tpXS0+Y291bnQgPSBuZXdfcnhfY291bnQ7CiAJCWFkYXB0ZXItPnR4X3JpbmdfY291bnQgPSBuZXdfdHhfY291bnQ7CiAJCWFkYXB0ZXItPnJ4X3JpbmdfY291bnQgPSBuZXdfcnhfY291bnQ7Ci0JCWdvdG8gZXJyX3NldHVwOworCQlnb3RvIGNsZWFyX3Jlc2V0OwogCX0KIAotCXRlbXBfdHhfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKLQkgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZyksIEdGUF9LRVJORUwpOworCXRlbXBfdHhfcmluZyA9IHZtYWxsb2MoYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyAqIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZykpOwogCWlmICghdGVtcF90eF9yaW5nKSB7CiAJCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3NldHVwOworCQlnb3RvIGNsZWFyX3Jlc2V0OwogCX0KIAogCWlmIChuZXdfdHhfY291bnQgIT0gYWRhcHRlci0+dHhfcmluZ19jb3VudCkgewotCQltZW1jcHkodGVtcF90eF9yaW5nLCBhZGFwdGVyLT50eF9yaW5nLAotCQkgICAgICAgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyAqIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZykpOwogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCQltZW1jcHkoJnRlbXBfdHhfcmluZ1tpXSwgYWRhcHRlci0+dHhfcmluZ1tpXSwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IGl4Z2JlX3JpbmcpKTsKIAkJCXRlbXBfdHhfcmluZ1tpXS5jb3VudCA9IG5ld190eF9jb3VudDsKIAkJCWVyciA9IGl4Z2JlX3NldHVwX3R4X3Jlc291cmNlcyhhZGFwdGVyLAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0ZW1wX3R4X3JpbmdbaV0pOwpAQCAtOTA0LDI4ICs5MDEsMjQgQEAKIAkJCQl3aGlsZSAoaSkgewogCQkJCQlpLS07CiAJCQkJCWl4Z2JlX2ZyZWVfdHhfcmVzb3VyY2VzKGFkYXB0ZXIsCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICZ0ZW1wX3R4X3JpbmdbaV0pOworCQkJCQkgICAgICAgICAgICAgICAgICAgICAgJnRlbXBfdHhfcmluZ1tpXSk7CiAJCQkJfQotCQkJCWdvdG8gZXJyX3NldHVwOworCQkJCWdvdG8gY2xlYXJfcmVzZXQ7CiAJCQl9CiAJCX0KIAkJbmVlZF91cGRhdGUgPSB0cnVlOwogCX0KIAotCXRlbXBfcnhfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKLQkgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZyksIEdGUF9LRVJORUwpOwotCWlmICgoIXRlbXBfcnhfcmluZykgJiYgKG5lZWRfdXBkYXRlKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQkJaXhnYmVfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwgJnRlbXBfdHhfcmluZ1tpXSk7Ci0JCWtmcmVlKHRlbXBfdHhfcmluZyk7CisJdGVtcF9yeF9yaW5nID0gdm1hbGxvYyhhZGFwdGVyLT5udW1fcnhfcXVldWVzICogc2l6ZW9mKHN0cnVjdCBpeGdiZV9yaW5nKSk7CisJaWYgKCF0ZW1wX3J4X3JpbmcpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfc2V0dXA7CiAJfQogCiAJaWYgKG5ld19yeF9jb3VudCAhPSBhZGFwdGVyLT5yeF9yaW5nX2NvdW50KSB7Ci0JCW1lbWNweSh0ZW1wX3J4X3JpbmcsIGFkYXB0ZXItPnJ4X3JpbmcsCi0JCSAgICAgICBhZGFwdGVyLT5udW1fcnhfcXVldWVzICogc2l6ZW9mKHN0cnVjdCBpeGdiZV9yaW5nKSk7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJCW1lbWNweSgmdGVtcF9yeF9yaW5nW2ldLCBhZGFwdGVyLT5yeF9yaW5nW2ldLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZykpOwogCQkJdGVtcF9yeF9yaW5nW2ldLmNvdW50ID0gbmV3X3J4X2NvdW50OwogCQkJZXJyID0gaXhnYmVfc2V0dXBfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRlbXBfcnhfcmluZ1tpXSk7CkBAIC05NDcsMjIgKzk0MCwzMiBAQAogCiAJCS8qIHR4ICovCiAJCWlmIChuZXdfdHhfY291bnQgIT0gYWRhcHRlci0+dHhfcmluZ19jb3VudCkgewotCQkJa2ZyZWUoYWRhcHRlci0+dHhfcmluZyk7Ci0JCQlhZGFwdGVyLT50eF9yaW5nID0gdGVtcF90eF9yaW5nOwotCQkJdGVtcF90eF9yaW5nID0gTlVMTDsKKwkJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJCQlpeGdiZV9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQkJCW1lbWNweShhZGFwdGVyLT50eF9yaW5nW2ldLCAmdGVtcF90eF9yaW5nW2ldLAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGl4Z2JlX3JpbmcpKTsKKwkJCX0KIAkJCWFkYXB0ZXItPnR4X3JpbmdfY291bnQgPSBuZXdfdHhfY291bnQ7CiAJCX0KIAogCQkvKiByeCAqLwogCQlpZiAobmV3X3J4X2NvdW50ICE9IGFkYXB0ZXItPnJ4X3JpbmdfY291bnQpIHsKLQkJCWtmcmVlKGFkYXB0ZXItPnJ4X3JpbmcpOwotCQkJYWRhcHRlci0+cnhfcmluZyA9IHRlbXBfcnhfcmluZzsKLQkJCXRlbXBfcnhfcmluZyA9IE5VTEw7CisJCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCQkJaXhnYmVfZnJlZV9yeF9yZXNvdXJjZXMoYWRhcHRlciwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5yeF9yaW5nW2ldKTsKKwkJCQltZW1jcHkoYWRhcHRlci0+cnhfcmluZ1tpXSwgJnRlbXBfcnhfcmluZ1tpXSwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpeGdiZV9yaW5nKSk7CisJCQl9CiAJCQlhZGFwdGVyLT5yeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50OwogCQl9CiAJCWl4Z2JlX3VwKGFkYXB0ZXIpOwogCX0KKworCXZmcmVlKHRlbXBfcnhfcmluZyk7CiBlcnJfc2V0dXA6CisJdmZyZWUodGVtcF90eF9yaW5nKTsKK2NsZWFyX3Jlc2V0OgogCWNsZWFyX2JpdChfX0lYR0JFX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtOTc0LDYgKzk3Nyw5IEBACiAJCXJldHVybiBJWEdCRV9URVNUX0xFTjsKIAljYXNlIEVUSF9TU19TVEFUUzoKIAkJcmV0dXJuIElYR0JFX1NUQVRTX0xFTjsKKwljYXNlIEVUSF9TU19OVFVQTEVfRklMVEVSUzoKKwkJcmV0dXJuIChFVEhUT09MX01BWF9OVFVQTEVfTElTVF9FTlRSWSAqCisJCSAgICAgICAgRVRIVE9PTF9NQVhfTlRVUExFX1NUUklOR19QRVJfRU5UUlkpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CkBAIC0xMDA3LDEzICsxMDEzLDEzIEBACiAJCSAgICAgICAgICAgc2l6ZW9mKHU2NCkpID8gKih1NjQgKilwIDogKih1MzIgKilwOwogCX0KIAlmb3IgKGogPSAwOyBqIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaisrKSB7Ci0JCXF1ZXVlX3N0YXQgPSAodTY0ICopJmFkYXB0ZXItPnR4X3Jpbmdbal0uc3RhdHM7CisJCXF1ZXVlX3N0YXQgPSAodTY0ICopJmFkYXB0ZXItPnR4X3Jpbmdbal0tPnN0YXRzOwogCQlmb3IgKGsgPSAwOyBrIDwgc3RhdF9jb3VudDsgaysrKQogCQkJZGF0YVtpICsga10gPSBxdWV1ZV9zdGF0W2tdOwogCQlpICs9IGs7CiAJfQogCWZvciAoaiA9IDA7IGogPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBqKyspIHsKLQkJcXVldWVfc3RhdCA9ICh1NjQgKikmYWRhcHRlci0+cnhfcmluZ1tqXS5zdGF0czsKKwkJcXVldWVfc3RhdCA9ICh1NjQgKikmYWRhcHRlci0+cnhfcmluZ1tqXS0+c3RhdHM7CiAJCWZvciAoayA9IDA7IGsgPCBzdGF0X2NvdW50OyBrKyspCiAJCQlkYXRhW2kgKyBrXSA9IHF1ZXVlX3N0YXRba107CiAJCWkgKz0gazsKQEAgLTE2MjcsNyArMTYzMyw3IEBACiAJcmVnX2RhdGEgfD0gSVhHQkVfUlhEQ1RMX0VOQUJMRTsKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9SWERDVEwoMCksIHJlZ19kYXRhKTsKIAlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpIHsKLQkJaW50IGogPSBhZGFwdGVyLT5yeF9yaW5nWzBdLnJlZ19pZHg7CisJCWludCBqID0gYWRhcHRlci0+cnhfcmluZ1swXS0+cmVnX2lkeDsKIAkJdTMyIGs7CiAJCWZvciAoayA9IDA7IGsgPCAxMDsgaysrKSB7CiAJCQlpZiAoSVhHQkVfUkVBRF9SRUcoJmFkYXB0ZXItPmh3LApAQCAtMTg2NywxMSArMTg3MywyMiBAQAogCQlpZiAoaXhnYmVfaW50cl90ZXN0KGFkYXB0ZXIsICZkYXRhWzJdKSkKIAkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CiAKKwkJLyogSWYgU1JJT1Ygb3IgVk1EcSBpcyBlbmFibGVkIHRoZW4gc2tpcCBNQUMKKwkJICogbG9vcGJhY2sgZGlhZ25vc3RpYy4gKi8KKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgKElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCB8CisJCQkJICAgICAgSVhHQkVfRkxBR19WTURRX0VOQUJMRUQpKSB7CisJCQlEUFJJTlRLKEhXLCBJTkZPLCAiU2tpcCBNQUMgbG9vcGJhY2sgZGlhZ25vc3RpYyBpbiBWVCAiCisJCQkJIm1vZGVcbiIpOworCQkJZGF0YVszXSA9IDA7CisJCQlnb3RvIHNraXBfbG9vcGJhY2s7CisJCX0KKwogCQlpeGdiZV9yZXNldChhZGFwdGVyKTsKIAkJRFBSSU5USyhIVywgSU5GTywgImxvb3BiYWNrIHRlc3Rpbmcgc3RhcnRpbmdcbiIpOwogCQlpZiAoaXhnYmVfbG9vcGJhY2tfdGVzdChhZGFwdGVyLCAmZGF0YVszXSkpCiAJCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogCitza2lwX2xvb3BiYWNrOgogCQlpeGdiZV9yZXNldChhZGFwdGVyKTsKIAogCQljbGVhcl9iaXQoX19JWEdCRV9URVNUSU5HLCAmYWRhcHRlci0+c3RhdGUpOwpAQCAtMjAwMCw3ICsyMDE3LDcgQEAKIHsKIAlzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAKLQllYy0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxID0gYWRhcHRlci0+dHhfcmluZ1swXS53b3JrX2xpbWl0OworCWVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnEgPSBhZGFwdGVyLT50eF9yaW5nWzBdLT53b3JrX2xpbWl0OwogCiAJLyogb25seSB2YWxpZCBpZiBpbiBjb25zdGFudCBJVFIgbW9kZSAqLwogCXN3aXRjaCAoYWRhcHRlci0+cnhfaXRyX3NldHRpbmcpIHsKQEAgLTIwNTMsNyArMjA3MCw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnEpCi0JCWFkYXB0ZXItPnR4X3JpbmdbMF0ud29ya19saW1pdCA9IGVjLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnE7CisJCWFkYXB0ZXItPnR4X3JpbmdbMF0tPndvcmtfbGltaXQgPSBlYy0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfaXJxOwogCiAJaWYgKGVjLT5yeF9jb2FsZXNjZV91c2VjcyA+IDEpIHsKIAkJLyogY2hlY2sgdGhlIGxpbWl0cyAqLwpAQCAtMjEzNCwyMyArMjE1MSwxMjQgQEAKIHN0YXRpYyBpbnQgaXhnYmVfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlib29sIG5lZWRfcmVzZXQgPSBmYWxzZTsKIAogCWV0aHRvb2xfb3Bfc2V0X2ZsYWdzKG5ldGRldiwgZGF0YSk7CiAKLQlpZiAoIShhZGFwdGVyLT5mbGFnczIgJiBJWEdCRV9GTEFHMl9SU0NfQ0FQQUJMRSkpCi0JCXJldHVybiAwOwotCiAJLyogaWYgc3RhdGUgY2hhbmdlcyB3ZSBuZWVkIHRvIHVwZGF0ZSBhZGFwdGVyLT5mbGFncyBhbmQgcmVzZXQgKi8KIAlpZiAoKCEhKGRhdGEgJiBFVEhfRkxBR19MUk8pKSAhPSAKIAkgICAgKCEhKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1JTQ19FTkFCTEVEKSkpIHsKIAkJYWRhcHRlci0+ZmxhZ3MyIF49IElYR0JFX0ZMQUcyX1JTQ19FTkFCTEVEOworCQluZWVkX3Jlc2V0ID0gdHJ1ZTsKKwl9CisKKwkvKgorCSAqIENoZWNrIGlmIEZsb3cgRGlyZWN0b3Igbi10dXBsZSBzdXBwb3J0IHdhcyBlbmFibGVkIG9yIGRpc2FibGVkLiAgSWYKKwkgKiB0aGUgc3RhdGUgY2hhbmdlZCwgd2UgbmVlZCB0byByZXNldC4KKwkgKi8KKwlpZiAoKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRSkgJiYKKwkgICAgKCEoZGF0YSAmIEVUSF9GTEFHX05UVVBMRSkpKSB7CisJCS8qIHR1cm4gb2ZmIEZsb3cgRGlyZWN0b3IgcGVyZmVjdCwgc2V0IGhhc2ggYW5kIHJlc2V0ICovCisJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0ZESVJfUEVSRkVDVF9DQVBBQkxFOworCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0ZESVJfSEFTSF9DQVBBQkxFOworCQluZWVkX3Jlc2V0ID0gdHJ1ZTsKKwl9IGVsc2UgaWYgKCghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRSkpICYmCisJICAgICAgICAgICAoZGF0YSAmIEVUSF9GTEFHX05UVVBMRSkpIHsKKwkJLyogdHVybiBvZmYgRmxvdyBEaXJlY3RvciBoYXNoLCBlbmFibGUgcGVyZmVjdCBhbmQgcmVzZXQgKi8KKwkJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEU7CisJCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfRkRJUl9QRVJGRUNUX0NBUEFCTEU7CisJCW5lZWRfcmVzZXQgPSB0cnVlOworCX0gZWxzZSB7CisJCS8qIG5vIHN0YXRlIGNoYW5nZSAqLworCX0KKworCWlmIChuZWVkX3Jlc2V0KSB7CiAJCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCQlpeGdiZV9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOwogCQllbHNlCiAJCQlpeGdiZV9yZXNldChhZGFwdGVyKTsKIAl9Ci0JcmV0dXJuIDA7CiAKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpeGdiZV9zZXRfcnhfbnR1cGxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfcnhfbnR1cGxlICpjbWQpCit7CisJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBldGh0b29sX3J4X250dXBsZV9mbG93X3NwZWMgZnMgPSBjbWQtPmZzOworCXN0cnVjdCBpeGdiZV9hdHJfaW5wdXQgaW5wdXRfc3RydWN0OworCXN0cnVjdCBpeGdiZV9hdHJfaW5wdXRfbWFza3MgaW5wdXRfbWFza3M7CisJaW50IHRhcmdldF9xdWV1ZTsKKworCWlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OThFQikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJLyoKKwkgKiBEb24ndCBhbGxvdyBwcm9ncmFtbWluZyBpZiB0aGUgYWN0aW9uIGlzIGEgcXVldWUgZ3JlYXRlciB0aGFuCisJICogdGhlIG51bWJlciBvZiBvbmxpbmUgVHggcXVldWVzLgorCSAqLworCWlmICgoZnMuYWN0aW9uID49IGFkYXB0ZXItPm51bV90eF9xdWV1ZXMpIHx8CisJICAgIChmcy5hY3Rpb24gPCBFVEhUT09MX1JYTlRVUExFX0FDVElPTl9EUk9QKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQoJmlucHV0X3N0cnVjdCwgMCwgc2l6ZW9mKHN0cnVjdCBpeGdiZV9hdHJfaW5wdXQpKTsKKwltZW1zZXQoJmlucHV0X21hc2tzLCAwLCBzaXplb2Yoc3RydWN0IGl4Z2JlX2F0cl9pbnB1dF9tYXNrcykpOworCisJaW5wdXRfbWFza3Muc3JjX2lwX21hc2sgPSBmcy5tX3UudGNwX2lwNF9zcGVjLmlwNHNyYzsKKwlpbnB1dF9tYXNrcy5kc3RfaXBfbWFzayA9IGZzLm1fdS50Y3BfaXA0X3NwZWMuaXA0ZHN0OworCWlucHV0X21hc2tzLnNyY19wb3J0X21hc2sgPSBmcy5tX3UudGNwX2lwNF9zcGVjLnBzcmM7CisJaW5wdXRfbWFza3MuZHN0X3BvcnRfbWFzayA9IGZzLm1fdS50Y3BfaXA0X3NwZWMucGRzdDsKKwlpbnB1dF9tYXNrcy52bGFuX2lkX21hc2sgPSBmcy52bGFuX3RhZ19tYXNrOworCS8qIG9ubHkgdXNlIHRoZSBsb3dlc3QgMiBieXRlcyBmb3IgZmxleCBieXRlcyAqLworCWlucHV0X21hc2tzLmRhdGFfbWFzayA9IChmcy5kYXRhX21hc2sgJiAweGZmZmYpOworCisJc3dpdGNoIChmcy5mbG93X3R5cGUpIHsKKwljYXNlIFRDUF9WNF9GTE9XOgorCQlpeGdiZV9hdHJfc2V0X2w0dHlwZV84MjU5OSgmaW5wdXRfc3RydWN0LCBJWEdCRV9BVFJfTDRUWVBFX1RDUCk7CisJCWJyZWFrOworCWNhc2UgVURQX1Y0X0ZMT1c6CisJCWl4Z2JlX2F0cl9zZXRfbDR0eXBlXzgyNTk5KCZpbnB1dF9zdHJ1Y3QsIElYR0JFX0FUUl9MNFRZUEVfVURQKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1Y0X0ZMT1c6CisJCWl4Z2JlX2F0cl9zZXRfbDR0eXBlXzgyNTk5KCZpbnB1dF9zdHJ1Y3QsIElYR0JFX0FUUl9MNFRZUEVfU0NUUCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtMTsKKwl9CisKKwkvKiBNYXNrIGJpdHMgZnJvbSB0aGUgaW5wdXRzIGJhc2VkIG9uIHVzZXItc3VwcGxpZWQgbWFzayAqLworCWl4Z2JlX2F0cl9zZXRfc3JjX2lwdjRfODI1OTkoJmlucHV0X3N0cnVjdCwKKwkgICAgICAgICAgICAoZnMuaF91LnRjcF9pcDRfc3BlYy5pcDRzcmMgJiB+ZnMubV91LnRjcF9pcDRfc3BlYy5pcDRzcmMpKTsKKwlpeGdiZV9hdHJfc2V0X2RzdF9pcHY0XzgyNTk5KCZpbnB1dF9zdHJ1Y3QsCisJICAgICAgICAgICAgKGZzLmhfdS50Y3BfaXA0X3NwZWMuaXA0ZHN0ICYgfmZzLm1fdS50Y3BfaXA0X3NwZWMuaXA0ZHN0KSk7CisJLyogODI1OTkgZXhwZWN0cyB0aGVzZSB0byBiZSBieXRlLXN3YXBwZWQgZm9yIHBlcmZlY3QgZmlsdGVyaW5nICovCisJaXhnYmVfYXRyX3NldF9zcmNfcG9ydF84MjU5OSgmaW5wdXRfc3RydWN0LAorCSAgICAgICAoKG50b2hzKGZzLmhfdS50Y3BfaXA0X3NwZWMucHNyYykpICYgfmZzLm1fdS50Y3BfaXA0X3NwZWMucHNyYykpOworCWl4Z2JlX2F0cl9zZXRfZHN0X3BvcnRfODI1OTkoJmlucHV0X3N0cnVjdCwKKwkgICAgICAgKChudG9ocyhmcy5oX3UudGNwX2lwNF9zcGVjLnBkc3QpKSAmIH5mcy5tX3UudGNwX2lwNF9zcGVjLnBkc3QpKTsKKworCS8qIFZMQU4gYW5kIEZsZXggYnl0ZXMgYXJlIGVpdGhlciBjb21wbGV0ZWx5IG1hc2tlZCBvciBub3QgKi8KKwlpZiAoIWZzLnZsYW5fdGFnX21hc2spCisJCWl4Z2JlX2F0cl9zZXRfdmxhbl9pZF84MjU5OSgmaW5wdXRfc3RydWN0LCBmcy52bGFuX3RhZyk7CisKKwlpZiAoIWlucHV0X21hc2tzLmRhdGFfbWFzaykKKwkJLyogbWFrZSBzdXJlIHdlIG9ubHkgdXNlIHRoZSBmaXJzdCAyIGJ5dGVzIG9mIHVzZXIgZGF0YSAqLworCQlpeGdiZV9hdHJfc2V0X2ZsZXhfYnl0ZV84MjU5OSgmaW5wdXRfc3RydWN0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnMuZGF0YSAmIDB4ZmZmZikpOworCisJLyogZGV0ZXJtaW5lIGlmIHdlIG5lZWQgdG8gZHJvcCBvciByb3V0ZSB0aGUgcGFja2V0ICovCisJaWYgKGZzLmFjdGlvbiA9PSBFVEhUT09MX1JYTlRVUExFX0FDVElPTl9EUk9QKQorCQl0YXJnZXRfcXVldWUgPSBNQVhfUlhfUVVFVUVTIC0gMTsKKwllbHNlCisJCXRhcmdldF9xdWV1ZSA9IGZzLmFjdGlvbjsKKworCXNwaW5fbG9jaygmYWRhcHRlci0+ZmRpcl9wZXJmZWN0X2xvY2spOworCWl4Z2JlX2ZkaXJfYWRkX3BlcmZlY3RfZmlsdGVyXzgyNTk5KCZhZGFwdGVyLT5odywgJmlucHV0X3N0cnVjdCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5wdXRfbWFza3MsIDAsIHRhcmdldF9xdWV1ZSk7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPmZkaXJfcGVyZmVjdF9sb2NrKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGl4Z2JlX2V0aHRvb2xfb3BzID0gewpAQCAtMjE4OCw2ICsyMzA2LDcgQEAKIAkuc2V0X2NvYWxlc2NlICAgICAgICAgICA9IGl4Z2JlX3NldF9jb2FsZXNjZSwKIAkuZ2V0X2ZsYWdzICAgICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2ZsYWdzLAogCS5zZXRfZmxhZ3MgICAgICAgICAgICAgID0gaXhnYmVfc2V0X2ZsYWdzLAorCS5zZXRfcnhfbnR1cGxlICAgICAgICAgID0gaXhnYmVfc2V0X3J4X250dXBsZSwKIH07CiAKIHZvaWQgaXhnYmVfc2V0X2V0aHRvb2xfb3BzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9mY29lLmMKaW5kZXggZTlhMjBjOC4uNDEyM2RlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfZmNvZS5jCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX2Zjb2UuYwpAQCAtNTI1LDcgKzUyNSw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9GQ1JFVEFfU0laRTsgaSsrKSB7CiAJCQlmY29lX2kgPSBmLT5tYXNrICsgaSAlIGYtPmluZGljZXM7CiAJCQlmY29lX2kgJj0gSVhHQkVfRkNSRVRBX0VOVFJZX01BU0s7Ci0JCQlmY29lX3EgPSBhZGFwdGVyLT5yeF9yaW5nW2Zjb2VfaV0ucmVnX2lkeDsKKwkJCWZjb2VfcSA9IGFkYXB0ZXItPnJ4X3JpbmdbZmNvZV9pXS0+cmVnX2lkeDsKIAkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSRVRBKGkpLCBmY29lX3EpOwogCQl9CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfRkNSRUNUTCwgSVhHQkVfRkNSRUNUTF9FTkEpOwpAQCAtNTMzLDcgKzUzMyw3IEBACiAJfSBlbHNlICB7CiAJCS8qIFVzZSBzaW5nbGUgcnggcXVldWUgZm9yIEZDb0UgKi8KIAkJZmNvZV9pID0gZi0+bWFzazsKLQkJZmNvZV9xID0gYWRhcHRlci0+cnhfcmluZ1tmY29lX2ldLnJlZ19pZHg7CisJCWZjb2VfcSA9IGFkYXB0ZXItPnJ4X3JpbmdbZmNvZV9pXS0+cmVnX2lkeDsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9GQ1JFQ1RMLCAwKTsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9FVFFTKElYR0JFX0VUUUZfRklMVEVSX0ZDT0UpLAogCQkJCUlYR0JFX0VUUVNfUVVFVUVfRU4gfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWFpbi5jCmluZGV4IDk1MWI3M2MuLjY4NGFmMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21haW4uYworKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYWluLmMKQEAgLTQ1LDEyICs0NSwxMyBAQAogI2luY2x1ZGUgIml4Z2JlLmgiCiAjaW5jbHVkZSAiaXhnYmVfY29tbW9uLmgiCiAjaW5jbHVkZSAiaXhnYmVfZGNiXzgyNTk5LmgiCisjaW5jbHVkZSAiaXhnYmVfc3Jpb3YuaCIKIAogY2hhciBpeGdiZV9kcml2ZXJfbmFtZVtdID0gIml4Z2JlIjsKIHN0YXRpYyBjb25zdCBjaGFyIGl4Z2JlX2RyaXZlcl9zdHJpbmdbXSA9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW50ZWwoUikgMTAgR2lnYWJpdCBQQ0kgRXhwcmVzcyBOZXR3b3JrIERyaXZlciI7CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjIuMC40NC1rMiIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjIuMC42Mi1rMiIKIGNvbnN0IGNoYXIgaXhnYmVfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOwogc3RhdGljIGNoYXIgaXhnYmVfY29weXJpZ2h0W10gPSAiQ29weXJpZ2h0IChjKSAxOTk5LTIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIjsKIApAQCAtNjcsNyArNjgsNyBAQAogICogeyBWZW5kb3IgSUQsIERldmljZSBJRCwgU3ViVmVuZG9yIElELCBTdWJEZXZpY2UgSUQsCiAgKiAgIENsYXNzLCBDbGFzcyBNYXNrLCBwcml2YXRlIGRhdGEgKG5vdCB1c2VkKSB9CiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpeGdiZV9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoaXhnYmVfcGNpX3RibCkgPSB7CiAJe1BDSV9WREVWSUNFKElOVEVMLCBJWEdCRV9ERVZfSURfODI1OTgpLAogCSBib2FyZF84MjU5OCB9LAogCXtQQ0lfVkRFVklDRShJTlRFTCwgSVhHQkVfREVWX0lEXzgyNTk4QUZfRFVBTF9QT1JUKSwKQEAgLTEyNCw2ICsxMjUsMTMgQEAKIH07CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QQ0lfSU9WCitzdGF0aWMgdW5zaWduZWQgaW50IG1heF92ZnM7Cittb2R1bGVfcGFyYW0obWF4X3ZmcywgdWludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1heF92ZnMsICJNYXhpbXVtIG51bWJlciBvZiB2aXJ0dWFsIGZ1bmN0aW9ucyB0byBhbGxvY2F0ZSAiCisgICAgICAgICAgICAgICAgICJwZXIgcGh5c2ljYWwgZnVuY3Rpb24iKTsKKyNlbmRpZiAvKiBDT05GSUdfUENJX0lPViAqLworCiBNT0RVTEVfQVVUSE9SKCJJbnRlbCBDb3Jwb3JhdGlvbiwgPGxpbnV4Lm5pY3NAaW50ZWwuY29tPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbChSKSAxMCBHaWdhYml0IFBDSSBFeHByZXNzIE5ldHdvcmsgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC0xMzEsNiArMTM5LDQxIEBACiAKICNkZWZpbmUgREVGQVVMVF9ERUJVR19MRVZFTF9TSElGVCAzCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZV9kaXNhYmxlX3NyaW92KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGdjcjsKKwl1MzIgZ3BpZTsKKwl1MzIgdm1kY3RsOworCisjaWZkZWYgQ09ORklHX1BDSV9JT1YKKwkvKiBkaXNhYmxlIGlvdiBhbmQgYWxsb3cgdGltZSBmb3IgdHJhbnNhY3Rpb25zIHRvIGNsZWFyICovCisJcGNpX2Rpc2FibGVfc3Jpb3YoYWRhcHRlci0+cGRldik7CisjZW5kaWYKKworCS8qIHR1cm4gb2ZmIGRldmljZSBJT1YgbW9kZSAqLworCWdjciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HQ1JfRVhUKTsKKwlnY3IgJj0gfihJWEdCRV9HQ1JfRVhUX1NSSU9WKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0dDUl9FWFQsIGdjcik7CisJZ3BpZSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9HUElFKTsKKwlncGllICY9IH5JWEdCRV9HUElFX1ZUTU9ERV9NQVNLOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfR1BJRSwgZ3BpZSk7CisKKwkvKiBzZXQgZGVmYXVsdCBwb29sIGJhY2sgdG8gMCAqLworCXZtZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVF9DVEwpOworCXZtZGN0bCAmPSB+SVhHQkVfVlRfQ1RMX1BPT0xfTUFTSzsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZUX0NUTCwgdm1kY3RsKTsKKworCS8qIHRha2UgYSBicmVhdGhlciB0aGVuIGNsZWFuIHVwIGRyaXZlciBkYXRhICovCisJbXNsZWVwKDEwMCk7CisJaWYgKGFkYXB0ZXItPnZmaW5mbykKKwkJa2ZyZWUoYWRhcHRlci0+dmZpbmZvKTsKKwlhZGFwdGVyLT52ZmluZm8gPSBOVUxMOworCisJYWRhcHRlci0+bnVtX3ZmcyA9IDA7CisJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRDsKK30KKwogc3RhdGljIHZvaWQgaXhnYmVfcmVsZWFzZV9od19jb250cm9sKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewogCXUzMiBjdHJsX2V4dDsKQEAgLTQ1MSw3ICs0OTQsNyBAQAogewogCXUzMiByeGN0cmw7CiAJaW50IGNwdSA9IGdldF9jcHUoKTsKLQlpbnQgcSA9IHJ4X3JpbmcgLSBhZGFwdGVyLT5yeF9yaW5nOworCWludCBxID0gcnhfcmluZy0+cmVnX2lkeDsKIAogCWlmIChyeF9yaW5nLT5jcHUgIT0gY3B1KSB7CiAJCXJ4Y3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfRENBX1JYQ1RSTChxKSk7CkBAIC00NzksNyArNTIyLDcgQEAKIHsKIAl1MzIgdHhjdHJsOwogCWludCBjcHUgPSBnZXRfY3B1KCk7Ci0JaW50IHEgPSB0eF9yaW5nIC0gYWRhcHRlci0+dHhfcmluZzsKKwlpbnQgcSA9IHR4X3JpbmctPnJlZ19pZHg7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKIAogCWlmICh0eF9yaW5nLT5jcHUgIT0gY3B1KSB7CkBAIC01MTMsMTIgKzU1NiwxMiBAQAogCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0RDQV9DVFJMLCAyKTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJYWRhcHRlci0+dHhfcmluZ1tpXS5jcHUgPSAtMTsKLQkJaXhnYmVfdXBkYXRlX3R4X2RjYShhZGFwdGVyLCAmYWRhcHRlci0+dHhfcmluZ1tpXSk7CisJCWFkYXB0ZXItPnR4X3JpbmdbaV0tPmNwdSA9IC0xOworCQlpeGdiZV91cGRhdGVfdHhfZGNhKGFkYXB0ZXIsIGFkYXB0ZXItPnR4X3JpbmdbaV0pOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbaV0uY3B1ID0gLTE7Ci0JCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X3JpbmdbaV0pOworCQlhZGFwdGVyLT5yeF9yaW5nW2ldLT5jcHUgPSAtMTsKKwkJaXhnYmVfdXBkYXRlX3J4X2RjYShhZGFwdGVyLCBhZGFwdGVyLT5yeF9yaW5nW2ldKTsKIAl9CiB9CiAKQEAgLTc3NSw2ICs4MTgsMTIgQEAKIAlyZXR1cm4gc2tiOwogfQogCitzdHJ1Y3QgaXhnYmVfcnNjX2NiIHsKKwlkbWFfYWRkcl90IGRtYTsKK307CisKKyNkZWZpbmUgSVhHQkVfUlNDX0NCKHNrYikgKChzdHJ1Y3QgaXhnYmVfcnNjX2NiICopKHNrYiktPmNiKQorCiBzdGF0aWMgYm9vbCBpeGdiZV9jbGVhbl9yeF9pcnEoc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXhnYmVfcmluZyAqcnhfcmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pCkBAIC04MDYsNiArODU1LDcgQEAKIAkJCWJyZWFrOwogCQkoKndvcmtfZG9uZSkrKzsKIAorCQlybWIoKTsgLyogcmVhZCBkZXNjcmlwdG9yIGFuZCByeF9idWZmZXJfaW5mbyBhZnRlciBzdGF0dXMgREQgKi8KIAkJaWYgKHJ4X3JpbmctPmZsYWdzICYgSVhHQkVfUklOR19SWF9QU19FTkFCTEVEKSB7CiAJCQloZHJfaW5mbyA9IGxlMTZfdG9fY3B1KGl4Z2JlX2dldF9oZHJfaW5mbyhyeF9kZXNjKSk7CiAJCQlsZW4gPSAoaGRyX2luZm8gJiBJWEdCRV9SWERBRFZfSERSQlVGTEVOX01BU0spID4+CkBAIC04MjMsOSArODczLDIxIEBACiAJCXJ4X2J1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCiAJCWlmIChyeF9idWZmZXJfaW5mby0+ZG1hKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIHJ4X2J1ZmZlcl9pbmZvLT5kbWEsCi0JCQkgICAgICAgICAgICAgICAgIHJ4X3JpbmctPnJ4X2J1Zl9sZW4sCi0JCQkgICAgICAgICAgICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlpZiAoKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1JTQ19FTkFCTEVEKSAmJgorCQkJICAgICghKHN0YXRlcnIgJiBJWEdCRV9SWERfU1RBVF9FT1ApKSAmJgorCQkJCSAoIShza2ItPnByZXYpKSkKKwkJCQkvKgorCQkJCSAqIFdoZW4gSFdSU0MgaXMgZW5hYmxlZCwgZGVsYXkgdW5tYXBwaW5nCisJCQkJICogb2YgdGhlIGZpcnN0IHBhY2tldC4gSXQgY2FycmllcyB0aGUKKwkJCQkgKiBoZWFkZXIgaW5mb3JtYXRpb24sIEhXIG1heSBzdGlsbAorCQkJCSAqIGFjY2VzcyB0aGUgaGVhZGVyIGFmdGVyIHRoZSB3cml0ZWJhY2suCisJCQkJICogT25seSB1bm1hcCBpdCB3aGVuIEVPUCBpcyByZWFjaGVkCisJCQkJICovCisJCQkJSVhHQkVfUlNDX0NCKHNrYiktPmRtYSA9IHJ4X2J1ZmZlcl9pbmZvLT5kbWE7CisJCQllbHNlCisJCQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCByeF9idWZmZXJfaW5mby0+ZG1hLAorCQkJCSAgICAgICAgICAgICAgICAgcnhfcmluZy0+cnhfYnVmX2xlbiwKKwkJCQkgICAgICAgICAgICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQlyeF9idWZmZXJfaW5mby0+ZG1hID0gMDsKIAkJCXNrYl9wdXQoc2tiLCBsZW4pOwogCQl9CkBAIC04NzMsNiArOTM1LDEwIEBACiAJCQlpZiAoc2tiLT5wcmV2KQogCQkJCXNrYiA9IGl4Z2JlX3RyYW5zZm9ybV9yc2NfcXVldWUoc2tiLCAmKHJ4X3JpbmctPnJzY19jb3VudCkpOwogCQkJaWYgKGFkYXB0ZXItPmZsYWdzMiAmIElYR0JFX0ZMQUcyX1JTQ19FTkFCTEVEKSB7CisJCQkJaWYgKElYR0JFX1JTQ19DQihza2IpLT5kbWEpCisJCQkJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgSVhHQkVfUlNDX0NCKHNrYiktPmRtYSwKKwkJCQkJICAgICAgICAgICAgICAgICByeF9yaW5nLT5yeF9idWZfbGVuLAorCQkJCQkgICAgICAgICAgICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQkJaWYgKHJ4X3JpbmctPmZsYWdzICYgSVhHQkVfUklOR19SWF9QU19FTkFCTEVEKQogCQkJCQlyeF9yaW5nLT5yc2NfY291bnQgKz0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKIAkJCQllbHNlCkBAIC05ODQsMTIgKzEwNTAsMTIgQEAKIAkgKi8KIAlmb3IgKHZfaWR4ID0gMDsgdl9pZHggPCBxX3ZlY3RvcnM7IHZfaWR4KyspIHsKIAkJcV92ZWN0b3IgPSBhZGFwdGVyLT5xX3ZlY3Rvclt2X2lkeF07Ci0JCS8qIFhYWCBmb3JfZWFjaF9iaXQoLi4uKSAqLworCQkvKiBYWFggZm9yX2VhY2hfc2V0X2JpdCguLi4pICovCiAJCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsCiAJCSAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyk7CiAKIAkJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT5yeHJfY291bnQ7IGkrKykgewotCQkJaiA9IGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdLnJlZ19pZHg7CisJCQlqID0gYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0tPnJlZ19pZHg7CiAJCQlpeGdiZV9zZXRfaXZhcihhZGFwdGVyLCAwLCBqLCB2X2lkeCk7CiAJCQlyX2lkeCA9IGZpbmRfbmV4dF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsCiAJCQkgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKQEAgLTk5OSw3ICsxMDY1LDcgQEAKIAkJICAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5udW1fdHhfcXVldWVzKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnR4cl9jb3VudDsgaSsrKSB7Ci0JCQlqID0gYWRhcHRlci0+dHhfcmluZ1tyX2lkeF0ucmVnX2lkeDsKKwkJCWogPSBhZGFwdGVyLT50eF9yaW5nW3JfaWR4XS0+cmVnX2lkeDsKIAkJCWl4Z2JlX3NldF9pdmFyKGFkYXB0ZXIsIDEsIGosIHZfaWR4KTsKIAkJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwKIAkJCSAgICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5udW1fdHhfcXVldWVzLApAQCAtMTAyNSw3ICsxMDkxLDEyIEBACiAKIAkvKiBzZXQgdXAgdG8gYXV0b2NsZWFyIHRpbWVyLCBhbmQgdGhlIHZlY3RvcnMgKi8KIAltYXNrID0gSVhHQkVfRUlNU19FTkFCTEVfTUFTSzsKLQltYXNrICY9IH4oSVhHQkVfRUlNU19PVEhFUiB8IElYR0JFX0VJTVNfTFNDKTsKKwlpZiAoYWRhcHRlci0+bnVtX3ZmcykKKwkJbWFzayAmPSB+KElYR0JFX0VJTVNfT1RIRVIgfAorCQkJICBJWEdCRV9FSU1TX01BSUxCT1ggfAorCQkJICBJWEdCRV9FSU1TX0xTQyk7CisJZWxzZQorCQltYXNrICY9IH4oSVhHQkVfRUlNU19PVEhFUiB8IElYR0JFX0VJTVNfTFNDKTsKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSUFDLCBtYXNrKTsKIH0KIApAQCAtMTEzNCw3ICsxMjA1LDcgQEAKIAogCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnR4cl9pZHgsIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMpOwogCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+dHhyX2NvdW50OyBpKyspIHsKLQkJdHhfcmluZyA9ICYoYWRhcHRlci0+dHhfcmluZ1tyX2lkeF0pOworCQl0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZ1tyX2lkeF07CiAJCXJldF9pdHIgPSBpeGdiZV91cGRhdGVfaXRyKGFkYXB0ZXIsIHFfdmVjdG9yLT5laXRyLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBxX3ZlY3Rvci0+dHhfaXRyLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICB0eF9yaW5nLT50b3RhbF9wYWNrZXRzLApAQCAtMTE0OSw3ICsxMjIwLDcgQEAKIAogCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOwogCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+cnhyX2NvdW50OyBpKyspIHsKLQkJcnhfcmluZyA9ICYoYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0pOworCQlyeF9yaW5nID0gYWRhcHRlci0+cnhfcmluZ1tyX2lkeF07CiAJCXJldF9pdHIgPSBpeGdiZV91cGRhdGVfaXRyKGFkYXB0ZXIsIHFfdmVjdG9yLT5laXRyLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBxX3ZlY3Rvci0+cnhfaXRyLAogCQkgICAgICAgICAgICAgICAgICAgICAgICAgICByeF9yaW5nLT50b3RhbF9wYWNrZXRzLApAQCAtMTI1NCw2ICsxMzI1LDkgQEAKIAlpZiAoZWljciAmIElYR0JFX0VJQ1JfTFNDKQogCQlpeGdiZV9jaGVja19sc2MoYWRhcHRlcik7CiAKKwlpZiAoZWljciAmIElYR0JFX0VJQ1JfTUFJTEJPWCkKKwkJaXhnYmVfbXNnX3Rhc2soYWRhcHRlcik7CisKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OEVCKQogCQlpeGdiZV9jaGVja19mYW5fZmFpbHVyZShhZGFwdGVyLCBlaWNyKTsKIApAQCAtMTI2OCw3ICsxMzQyLDcgQEAKIAkJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOwogCQkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgewogCQkJCXN0cnVjdCBpeGdiZV9yaW5nICp0eF9yaW5nID0KLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRhcHRlci0+dHhfcmluZ1tpXTsKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+dHhfcmluZ1tpXTsKIAkJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KF9fSVhHQkVfRkRJUl9JTklUX0RPTkUsCiAJCQkJICAgICAgICAgICAgICAgICAgICAgICAmdHhfcmluZy0+cmVpbml0X3N0YXRlKSkKIAkJCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+ZmRpcl9yZWluaXRfdGFzayk7CkBAIC0xMzI3LDcgKzE0MDEsNyBAQAogCiAJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyk7CiAJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT50eHJfY291bnQ7IGkrKykgewotCQl0eF9yaW5nID0gJihhZGFwdGVyLT50eF9yaW5nW3JfaWR4XSk7CisJCXR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nW3JfaWR4XTsKIAkJdHhfcmluZy0+dG90YWxfYnl0ZXMgPSAwOwogCQl0eF9yaW5nLT50b3RhbF9wYWNrZXRzID0gMDsKIAkJcl9pZHggPSBmaW5kX25leHRfYml0KHFfdmVjdG9yLT50eHJfaWR4LCBhZGFwdGVyLT5udW1fdHhfcXVldWVzLApAQCAtMTM1NSw3ICsxNDI5LDcgQEAKIAogCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOwogCWZvciAoaSA9IDA7ICBpIDwgcV92ZWN0b3ItPnJ4cl9jb3VudDsgaSsrKSB7Ci0JCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKKwkJcnhfcmluZyA9IGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdOwogCQlyeF9yaW5nLT50b3RhbF9ieXRlcyA9IDA7CiAJCXJ4X3JpbmctPnRvdGFsX3BhY2tldHMgPSAwOwogCQlyX2lkeCA9IGZpbmRfbmV4dF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCkBAIC0xMzg1LDcgKzE0NTksNyBAQAogCiAJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyk7CiAJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT50eHJfY291bnQ7IGkrKykgewotCQlyaW5nID0gJihhZGFwdGVyLT50eF9yaW5nW3JfaWR4XSk7CisJCXJpbmcgPSBhZGFwdGVyLT50eF9yaW5nW3JfaWR4XTsKIAkJcmluZy0+dG90YWxfYnl0ZXMgPSAwOwogCQlyaW5nLT50b3RhbF9wYWNrZXRzID0gMDsKIAkJcl9pZHggPSBmaW5kX25leHRfYml0KHFfdmVjdG9yLT50eHJfaWR4LCBhZGFwdGVyLT5udW1fdHhfcXVldWVzLApAQCAtMTM5NCw3ICsxNDY4LDcgQEAKIAogCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOwogCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+cnhyX2NvdW50OyBpKyspIHsKLQkJcmluZyA9ICYoYWRhcHRlci0+cnhfcmluZ1tyX2lkeF0pOworCQlyaW5nID0gYWRhcHRlci0+cnhfcmluZ1tyX2lkeF07CiAJCXJpbmctPnRvdGFsX2J5dGVzID0gMDsKIAkJcmluZy0+dG90YWxfcGFja2V0cyA9IDA7CiAJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+cnhyX2lkeCwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKQEAgLTE0MjUsNyArMTQ5OSw3IEBACiAJbG9uZyByX2lkeDsKIAogCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOwotCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKKwlyeF9yaW5nID0gYWRhcHRlci0+cnhfcmluZ1tyX2lkeF07CiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpCiAJCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgcnhfcmluZyk7CkBAIC0xNDY2LDcgKzE1NDAsNyBAQAogCiAJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyk7CiAJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT50eHJfY291bnQ7IGkrKykgewotCQlyaW5nID0gJihhZGFwdGVyLT50eF9yaW5nW3JfaWR4XSk7CisJCXJpbmcgPSBhZGFwdGVyLT50eF9yaW5nW3JfaWR4XTsKICNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpCiAJCQlpeGdiZV91cGRhdGVfdHhfZGNhKGFkYXB0ZXIsIHJpbmcpOwpAQCAtMTQ4Miw3ICsxNTU2LDcgQEAKIAlidWRnZXQgPSBtYXgoYnVkZ2V0LCAxKTsKIAlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzKTsKIAlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnJ4cl9jb3VudDsgaSsrKSB7Ci0JCXJpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKKwkJcmluZyA9IGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdOwogI2lmZGVmIENPTkZJR19JWEdCRV9EQ0EKIAkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkKIAkJCWl4Z2JlX3VwZGF0ZV9yeF9kY2EoYWRhcHRlciwgcmluZyk7CkBAIC0xNDkzLDcgKzE1NjcsNyBAQAogCX0KIAogCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOwotCXJpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKKwlyaW5nID0gYWRhcHRlci0+cnhfcmluZ1tyX2lkeF07CiAJLyogSWYgYWxsIFJ4IHdvcmsgZG9uZSwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCiAJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgewogCQluYXBpX2NvbXBsZXRlKG5hcGkpOwpAQCAtMTUyNiw3ICsxNjAwLDcgQEAKIAlsb25nIHJfaWR4OwogCiAJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyk7Ci0JdHhfcmluZyA9ICYoYWRhcHRlci0+dHhfcmluZ1tyX2lkeF0pOworCXR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nW3JfaWR4XTsKICNpZmRlZiBDT05GSUdfSVhHQkVfRENBCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0FfRU5BQkxFRCkKIAkJaXhnYmVfdXBkYXRlX3R4X2RjYShhZGFwdGVyLCB0eF9yaW5nKTsKQEAgLTE3MTEsOCArMTc4NSw4IEBACiAJc3RydWN0IGl4Z2JlX3FfdmVjdG9yICpxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yWzBdOwogCXU4IGN1cnJlbnRfaXRyOwogCXUzMiBuZXdfaXRyID0gcV92ZWN0b3ItPmVpdHI7Ci0Jc3RydWN0IGl4Z2JlX3JpbmcgKnJ4X3JpbmcgPSAmYWRhcHRlci0+cnhfcmluZ1swXTsKLQlzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZyA9ICZhZGFwdGVyLT50eF9yaW5nWzBdOworCXN0cnVjdCBpeGdiZV9yaW5nICpyeF9yaW5nID0gYWRhcHRlci0+cnhfcmluZ1swXTsKKwlzdHJ1Y3QgaXhnYmVfcmluZyAqdHhfcmluZyA9IGFkYXB0ZXItPnR4X3JpbmdbMF07CiAKIAlxX3ZlY3Rvci0+dHhfaXRyID0gaXhnYmVfdXBkYXRlX2l0cihhZGFwdGVyLCBuZXdfaXRyLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfdmVjdG9yLT50eF9pdHIsCkBAIC0xNzY4LDYgKzE4NDIsOCBAQAogCQltYXNrIHw9IElYR0JFX0VJTVNfRUNDOwogCQltYXNrIHw9IElYR0JFX0VJTVNfR1BJX1NEUDE7CiAJCW1hc2sgfD0gSVhHQkVfRUlNU19HUElfU0RQMjsKKwkJaWYgKGFkYXB0ZXItPm51bV92ZnMpCisJCQltYXNrIHw9IElYR0JFX0VJTVNfTUFJTEJPWDsKIAl9CiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX0hBU0hfQ0FQQUJMRSB8fAogCSAgICBhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkRJUl9QRVJGRUNUX0NBUEFCTEUpCkBAIC0xNzc2LDYgKzE4NTIsMTEgQEAKIAlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1TLCBtYXNrKTsKIAlpeGdiZV9pcnFfZW5hYmxlX3F1ZXVlcyhhZGFwdGVyLCB+MCk7CiAJSVhHQkVfV1JJVEVfRkxVU0goJmFkYXB0ZXItPmh3KTsKKworCWlmIChhZGFwdGVyLT5udW1fdmZzID4gMzIpIHsKKwkJdTMyIGVpdHJzZWwgPSAoMSA8PCAoYWRhcHRlci0+bnVtX3ZmcyAtIDMyKSkgLSAxOworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSVRSU0VMLCBlaXRyc2VsKTsKKwl9CiB9CiAKIC8qKgpAQCAtMTgxNywxMCArMTg5OCwxMCBAQAogCWl4Z2JlX2NoZWNrX2Zhbl9mYWlsdXJlKGFkYXB0ZXIsIGVpY3IpOwogCiAJaWYgKG5hcGlfc2NoZWR1bGVfcHJlcCgmKHFfdmVjdG9yLT5uYXBpKSkpIHsKLQkJYWRhcHRlci0+dHhfcmluZ1swXS50b3RhbF9wYWNrZXRzID0gMDsKLQkJYWRhcHRlci0+dHhfcmluZ1swXS50b3RhbF9ieXRlcyA9IDA7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbMF0udG90YWxfcGFja2V0cyA9IDA7Ci0JCWFkYXB0ZXItPnJ4X3JpbmdbMF0udG90YWxfYnl0ZXMgPSAwOworCQlhZGFwdGVyLT50eF9yaW5nWzBdLT50b3RhbF9wYWNrZXRzID0gMDsKKwkJYWRhcHRlci0+dHhfcmluZ1swXS0+dG90YWxfYnl0ZXMgPSAwOworCQlhZGFwdGVyLT5yeF9yaW5nWzBdLT50b3RhbF9wYWNrZXRzID0gMDsKKwkJYWRhcHRlci0+cnhfcmluZ1swXS0+dG90YWxfYnl0ZXMgPSAwOwogCQkvKiB3b3VsZCBkaXNhYmxlIGludGVycnVwdHMgaGVyZSBidXQgRUlBTSBkaXNhYmxlZCBpdCAqLwogCQlfX25hcGlfc2NoZWR1bGUoJihxX3ZlY3Rvci0+bmFwaSkpOwogCX0KQEAgLTE5MDUsNiArMTk4Niw4IEBACiAJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUMsIDB4RkZGRjAwMDApOwogCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9FSU1DX0VYKDApLCB+MCk7CiAJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJTUNfRVgoMSksIH4wKTsKKwkJaWYgKGFkYXB0ZXItPm51bV92ZnMgPiAzMikKKwkJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX0VJVFJTRUwsIDApOwogCX0KIAlJWEdCRV9XUklURV9GTFVTSCgmYWRhcHRlci0+aHcpOwogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTVNJWF9FTkFCTEVEKSB7CkBAIC0xOTUwLDcgKzIwMzMsNyBAQAogCiAJLyogU2V0dXAgdGhlIEhXIFR4IEhlYWQgYW5kIFRhaWwgZGVzY3JpcHRvciBwb2ludGVycyAqLwogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJc3RydWN0IGl4Z2JlX3JpbmcgKnJpbmcgPSAmYWRhcHRlci0+dHhfcmluZ1tpXTsKKwkJc3RydWN0IGl4Z2JlX3JpbmcgKnJpbmcgPSBhZGFwdGVyLT50eF9yaW5nW2ldOwogCQlqID0gcmluZy0+cmVnX2lkeDsKIAkJdGRiYSA9IHJpbmctPmRtYTsKIAkJdGRsZW4gPSByaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyk7CkBAIC0xOTYwLDggKzIwNDMsOCBAQAogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RETEVOKGopLCB0ZGxlbik7CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVERIKGopLCAwKTsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9URFQoaiksIDApOwotCQlhZGFwdGVyLT50eF9yaW5nW2ldLmhlYWQgPSBJWEdCRV9UREgoaik7Ci0JCWFkYXB0ZXItPnR4X3JpbmdbaV0udGFpbCA9IElYR0JFX1REVChqKTsKKwkJYWRhcHRlci0+dHhfcmluZ1tpXS0+aGVhZCA9IElYR0JFX1RESChqKTsKKwkJYWRhcHRlci0+dHhfcmluZ1tpXS0+dGFpbCA9IElYR0JFX1REVChqKTsKIAkJLyoKIAkJICogRGlzYWJsZSBUeCBIZWFkIFdyaXRlYmFjayBSTyBiaXQsIHNpbmNlIHRoaXMgaG9zZXMKIAkJICogYm9va2tlZXBpbmcgaWYgdGhpbmdzIGFyZW4ndCBkZWxpdmVyZWQgaW4gb3JkZXIuCkBAIC0xOTg5LDE4ICsyMDcyLDMyIEBACiAKIAlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CiAJCXUzMiBydHRkY3M7CisJCXUzMiBtYXNrOwogCiAJCS8qIGRpc2FibGUgdGhlIGFyYml0ZXIgd2hpbGUgc2V0dGluZyBNVFFDICovCiAJCXJ0dGRjcyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SVFREQ1MpOwogCQlydHRkY3MgfD0gSVhHQkVfUlRURENTX0FSQkRJUzsKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SVFREQ1MsIHJ0dGRjcyk7CiAKLQkJLyogV2UgZW5hYmxlIDggdHJhZmZpYyBjbGFzc2VzLCBEQ0Igb25seSAqLwotCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKQotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NVFFDLCAoSVhHQkVfTVRRQ19SVF9FTkEgfAotCQkJICAgICAgICAgICAgICAgIElYR0JFX01UUUNfOFRDXzhUUSkpOwotCQllbHNlCisJCS8qIHNldCB0cmFuc21pdCBwb29sIGxheW91dCAqLworCQltYXNrID0gKElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCB8IElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpOworCQlzd2l0Y2ggKGFkYXB0ZXItPmZsYWdzICYgbWFzaykgeworCisJCWNhc2UgKElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCk6CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01UUUMsCisJCQkJCShJWEdCRV9NVFFDX1ZUX0VOQSB8IElYR0JFX01UUUNfNjRWRikpOworCQkJYnJlYWs7CisKKwkJY2FzZSAoSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCk6CisJCQkvKiBXZSBlbmFibGUgOCB0cmFmZmljIGNsYXNzZXMsIERDQiBvbmx5ICovCisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX01UUUMsCisJCQkJICAgICAgKElYR0JFX01UUUNfUlRfRU5BIHwgSVhHQkVfTVRRQ184VENfOFRRKSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgogCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NVFFDLCBJWEdCRV9NVFFDXzY0UV8xUEIpOworCQkJYnJlYWs7CisJCX0KIAogCQkvKiByZS1lYWJsZSB0aGUgYXJiaXRlciAqLwogCQlydHRkY3MgJj0gfklYR0JFX1JUVERDU19BUkJESVM7CkBAIC0yMDU5LDEyICsyMTU2LDE2IEBACiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQgogCQkJCSB8IElYR0JFX0ZMQUdfRENCX0VOQUJMRUQKICNlbmRpZgorCQkJCSB8IElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRAogCQkJCSk7CiAKIAlzd2l0Y2ggKG1hc2spIHsKIAljYXNlIChJWEdCRV9GTEFHX1JTU19FTkFCTEVEKToKIAkJbXJxYyA9IElYR0JFX01SUUNfUlNTRU47CiAJCWJyZWFrOworCWNhc2UgKElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCk6CisJCW1ycWMgPSBJWEdCRV9NUlFDX1ZNRFFFTjsKKwkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQgogCWNhc2UgKElYR0JFX0ZMQUdfRENCX0VOQUJMRUQpOgogCQltcnFjID0gSVhHQkVfTVJRQ19SVDhUQ0VOOwpAQCAtMjA5MCw3ICsyMTkxLDcgQEAKIAl1MzIgcnNjY3RybDsKIAlpbnQgcnhfYnVmX2xlbjsKIAotCXJ4X3JpbmcgPSAmYWRhcHRlci0+cnhfcmluZ1tpbmRleF07CisJcnhfcmluZyA9IGFkYXB0ZXItPnJ4X3JpbmdbaW5kZXhdOwogCWogPSByeF9yaW5nLT5yZWdfaWR4OwogCXJ4X2J1Zl9sZW4gPSByeF9yaW5nLT5yeF9idWZfbGVuOwogCXJzY2N0cmwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlNDQ1RMKGopKTsKQEAgLTIxNDUsNyArMjI0Niw5IEBACiAJaW50IHJ4X2J1Zl9sZW47CiAKIAkvKiBEZWNpZGUgd2hldGhlciB0byB1c2UgcGFja2V0IHNwbGl0IG1vZGUgb3Igbm90ICovCi0JYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEOworCS8qIERvIG5vdCB1c2UgcGFja2V0IHNwbGl0IGlmIHdlJ3JlIGluIFNSLUlPViBNb2RlICovCisJaWYgKCFhZGFwdGVyLT5udW1fdmZzKQorCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQ7CiAKIAkvKiBTZXQgdGhlIFJYIGJ1ZmZlciBsZW5ndGggYWNjb3JkaW5nIHRvIHRoZSBtb2RlICovCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEKSB7CkBAIC0yMTU3LDcgKzIyNjAsOSBAQAogCQkJICAgICAgICAgICAgICBJWEdCRV9QU1JUWVBFX0lQVjRIRFIgfAogCQkJICAgICAgICAgICAgICBJWEdCRV9QU1JUWVBFX0lQVjZIRFIgfAogCQkJICAgICAgICAgICAgICBJWEdCRV9QU1JUWVBFX0wySERSOwotCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9QU1JUWVBFKDApLCBwc3J0eXBlKTsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywKKwkJCQkJSVhHQkVfUFNSVFlQRShhZGFwdGVyLT5udW1fdmZzKSwKKwkJCQkJcHNydHlwZSk7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAoIShhZGFwdGVyLT5mbGFnczIgJiBJWEdCRV9GTEFHMl9SU0NfRU5BQkxFRCkgJiYKQEAgLTIxODQsNyArMjI4OSw3IEBACiAjZW5kaWYKIAlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX0hMUkVHMCwgaGxyZWcwKTsKIAotCXJkbGVuID0gYWRhcHRlci0+cnhfcmluZ1swXS5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyk7CisJcmRsZW4gPSBhZGFwdGVyLT5yeF9yaW5nWzBdLT5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyk7CiAJLyogZGlzYWJsZSByZWNlaXZlcyB3aGlsZSBzZXR0aW5nIHVwIHRoZSBkZXNjcmlwdG9ycyAqLwogCXJ4Y3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWENUUkwpOwogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUlhDVFJMLCByeGN0cmwgJiB+SVhHQkVfUlhDVFJMX1JYRU4pOwpAQCAtMjE5NCw3ICsyMjk5LDcgQEAKIAkgKiB0aGUgQmFzZSBhbmQgTGVuZ3RoIG9mIHRoZSBSeCBEZXNjcmlwdG9yIFJpbmcKIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7Ci0JCXJ4X3JpbmcgPSAmYWRhcHRlci0+cnhfcmluZ1tpXTsKKwkJcnhfcmluZyA9IGFkYXB0ZXItPnJ4X3JpbmdbaV07CiAJCXJkYmEgPSByeF9yaW5nLT5kbWE7CiAJCWogPSByeF9yaW5nLT5yZWdfaWR4OwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JEQkFMKGopLCAocmRiYSAmIERNQV9CSVRfTUFTSygzMikpKTsKQEAgLTIyNDMsNiArMjM0OCwzMCBAQAogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JEUlhDVEwsIHJkcnhjdGwpOwogCX0KIAorCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCkgeworCQl1MzIgdnRfcmVnX2JpdHM7CisJCXUzMiByZWdfb2Zmc2V0LCB2Zl9zaGlmdDsKKwkJdTMyIHZtZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVF9DVEwpOworCQl2dF9yZWdfYml0cyA9IElYR0JFX1ZNRF9DVExfVk1EUV9FTgorCQkJfCBJWEdCRV9WVF9DVExfUkVQTEVOOworCQl2dF9yZWdfYml0cyB8PSAoYWRhcHRlci0+bnVtX3ZmcyA8PAorCQkJCUlYR0JFX1ZUX0NUTF9QT09MX1NISUZUKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WVF9DVEwsIHZtZGN0bCB8IHZ0X3JlZ19iaXRzKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUlFDLCAwKTsKKworCQl2Zl9zaGlmdCA9IGFkYXB0ZXItPm51bV92ZnMgJSAzMjsKKwkJcmVnX29mZnNldCA9IGFkYXB0ZXItPm51bV92ZnMgLyAzMjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJFKDApLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJFKDEpLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRFKDApLCAwKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRFKDEpLCAwKTsKKwkJLyogRW5hYmxlIG9ubHkgdGhlIFBGJ3MgcG9vbCBmb3IgVHgvUnggKi8KKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJFKHJlZ19vZmZzZXQpLCAoMSA8PCB2Zl9zaGlmdCkpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGVEUocmVnX29mZnNldCksICgxIDw8IHZmX3NoaWZ0KSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUEZEVFhHU1dDLCBJWEdCRV9QRkRUWEdTV0NfVlRfTEJFTik7CisJCWl4Z2JlX3NldF92bW9scihodywgYWRhcHRlci0+bnVtX3Zmcyk7CisJfQorCiAJLyogUHJvZ3JhbSBNUlFDIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHF1ZXVlcyAqLwogCW1ycWMgPSBpeGdiZV9zZXR1cF9tcnFjKGFkYXB0ZXIpOwogCkBAIC0yMjc0LDYgKzI0MDMsMjAgQEAKIAl9CiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NUlFDLCBtcnFjKTsKIAorCWlmIChhZGFwdGVyLT5udW1fdmZzKSB7CisJCXUzMiByZWc7CisKKwkJLyogTWFwIFBGIE1BQyBhZGRyZXNzIGluIFJBUiBFbnRyeSAwIHRvIGZpcnN0IHBvb2wKKwkJICogZm9sbG93aW5nIFZGcyAqLworCQlody0+bWFjLm9wcy5zZXRfdm1kcShodywgMCwgYWRhcHRlci0+bnVtX3Zmcyk7CisKKwkJLyogU2V0IHVwIFZGIHJlZ2lzdGVyIG9mZnNldHMgZm9yIHNlbGVjdGVkIFZUIE1vZGUsIGkuZS4KKwkJICogNjQgVkZzIGZvciBTUi1JT1YgKi8KKwkJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0dDUl9FWFQpOworCQlyZWcgfD0gSVhHQkVfR0NSX0VYVF9TUklPVjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9HQ1JfRVhULCByZWcpOworCX0KKwogCXJ4Y3N1bSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9SWENTVU0pOwogCiAJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SU1NfRU5BQkxFRCB8fApAQCAtMjMxMiwxNSArMjQ1NSwxNyBAQAogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWludCBwb29sX25keCA9IGFkYXB0ZXItPm51bV92ZnM7CiAKIAkvKiBhZGQgVklEIHRvIGZpbHRlciB0YWJsZSAqLwotCWh3LT5tYWMub3BzLnNldF92ZnRhKCZhZGFwdGVyLT5odywgdmlkLCAwLCB0cnVlKTsKKwlody0+bWFjLm9wcy5zZXRfdmZ0YSgmYWRhcHRlci0+aHcsIHZpZCwgcG9vbF9uZHgsIHRydWUpOwogfQogCiBzdGF0aWMgdm9pZCBpeGdiZV92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUxNiB2aWQpCiB7CiAJc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IHBvb2xfbmR4ID0gYWRhcHRlci0+bnVtX3ZmczsKIAogCWlmICghdGVzdF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQogCQlpeGdiZV9pcnFfZGlzYWJsZShhZGFwdGVyKTsKQEAgLTIzMzEsNyArMjQ3Niw3IEBACiAJCWl4Z2JlX2lycV9lbmFibGUoYWRhcHRlcik7CiAKIAkvKiByZW1vdmUgVklEIGZyb20gZmlsdGVyIHRhYmxlICovCi0JaHctPm1hYy5vcHMuc2V0X3ZmdGEoJmFkYXB0ZXItPmh3LCB2aWQsIDAsIGZhbHNlKTsKKwlody0+bWFjLm9wcy5zZXRfdmZ0YSgmYWRhcHRlci0+aHcsIHZpZCwgcG9vbF9uZHgsIGZhbHNlKTsKIH0KIAogc3RhdGljIHZvaWQgaXhnYmVfdmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LApAQCAtMjM2MSw3ICsyNTA2LDcgQEAKIAl9IGVsc2UgaWYgKGFkYXB0ZXItPmh3Lm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKIAkJCXUzMiBjdHJsOwotCQkJaiA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeDsKKwkJCWogPSBhZGFwdGVyLT5yeF9yaW5nW2ldLT5yZWdfaWR4OwogCQkJY3RybCA9IElYR0JFX1JFQURfUkVHKCZhZGFwdGVyLT5odywgSVhHQkVfUlhEQ1RMKGopKTsKIAkJCWN0cmwgfD0gSVhHQkVfUlhEQ1RMX1ZNRTsKIAkJCUlYR0JFX1dSSVRFX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1JYRENUTChqKSwgY3RybCk7CkBAIC0yNDE0LDcgKzI1NTksNyBAQAogICogcmVzcG9uc2libGUgZm9yIGNvbmZpZ3VyaW5nIHRoZSBoYXJkd2FyZSBmb3IgcHJvcGVyIHVuaWNhc3QsIG11bHRpY2FzdCBhbmQKICAqIHByb21pc2N1b3VzIG1vZGUuCiAgKiovCi1zdGF0aWMgdm9pZCBpeGdiZV9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQordm9pZCBpeGdiZV9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OwpAQCAtMjQ0NiwxNCArMjU5MSwxNiBAQAogCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkxOQ1RSTCwgdmxuY3RybCk7CiAKIAkvKiByZXByb2dyYW0gc2Vjb25kYXJ5IHVuaWNhc3QgbGlzdCAqLwotCWh3LT5tYWMub3BzLnVwZGF0ZV91Y19hZGRyX2xpc3QoaHcsICZuZXRkZXYtPnVjLmxpc3QpOworCWh3LT5tYWMub3BzLnVwZGF0ZV91Y19hZGRyX2xpc3QoaHcsIG5ldGRldik7CiAKIAkvKiByZXByb2dyYW0gbXVsdGljYXN0IGxpc3QgKi8KLQlhZGRyX2NvdW50ID0gbmV0ZGV2LT5tY19jb3VudDsKKwlhZGRyX2NvdW50ID0gbmV0ZGV2X21jX2NvdW50KG5ldGRldik7CiAJaWYgKGFkZHJfY291bnQpCiAJCWFkZHJfbGlzdCA9IG5ldGRldi0+bWNfbGlzdC0+ZG1pX2FkZHI7CiAJaHctPm1hYy5vcHMudXBkYXRlX21jX2FkZHJfbGlzdChodywgYWRkcl9saXN0LCBhZGRyX2NvdW50LAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXhnYmVfYWRkcl9saXN0X2l0cik7CisJaWYgKGFkYXB0ZXItPm51bV92ZnMpCisJCWl4Z2JlX3Jlc3RvcmVfdmZfbXVsdGljYXN0cyhhZGFwdGVyKTsKIH0KIAogc3RhdGljIHZvaWQgaXhnYmVfbmFwaV9lbmFibGVfYWxsKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQpAQCAtMjUyMiw3ICsyNjY5LDcgQEAKIAlpeGdiZV9kY2JfaHdfY29uZmlnKCZhZGFwdGVyLT5odywgJmFkYXB0ZXItPmRjYl9jZmcpOwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgewotCQlqID0gYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4OworCQlqID0gYWRhcHRlci0+dHhfcmluZ1tpXS0+cmVnX2lkeDsKIAkJdHhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RYRENUTChqKSk7CiAJCS8qIFBUaHJlc2ggd29ya2Fyb3VuZCBmb3IgVHggaGFuZyB3aXRoIERGUCBlbmFibGVkLiAqLwogCQl0eGRjdGwgfD0gMzI7CkBAIC0yNTM5LDcgKzI2ODYsNyBAQAogCQl2bG5jdHJsICY9IH5JWEdCRV9WTE5DVFJMX0NGSUVOOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZMTkNUUkwsIHZsbmN0cmwpOwogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7Ci0JCQlqID0gYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4OworCQkJaiA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0tPnJlZ19pZHg7CiAJCQl2bG5jdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYRENUTChqKSk7CiAJCQl2bG5jdHJsIHw9IElYR0JFX1JYRENUTF9WTUU7CiAJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1JYRENUTChqKSwgdmxuY3RybCk7CkBAIC0yNTc5LDcgKzI3MjYsNyBAQAogI2VuZGlmIC8qIElYR0JFX0ZDT0UgKi8KIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZESVJfSEFTSF9DQVBBQkxFKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT50eF9yaW5nW2ldLmF0cl9zYW1wbGVfcmF0ZSA9CisJCQlhZGFwdGVyLT50eF9yaW5nW2ldLT5hdHJfc2FtcGxlX3JhdGUgPQogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPmF0cl9zYW1wbGVfcmF0ZTsKIAkJaXhnYmVfaW5pdF9mZGlyX3NpZ25hdHVyZV84MjU5OShodywgYWRhcHRlci0+ZmRpcl9wYmFsbG9jKTsKIAl9IGVsc2UgaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRSkgewpAQCAtMjU4OSw4ICsyNzM2LDggQEAKIAlpeGdiZV9jb25maWd1cmVfdHgoYWRhcHRlcik7CiAJaXhnYmVfY29uZmlndXJlX3J4KGFkYXB0ZXIpOwogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCWl4Z2JlX2FsbG9jX3J4X2J1ZmZlcnMoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X3JpbmdbaV0sCi0JCSAgICAgICAgICAgICAgICAgICAgICAgKGFkYXB0ZXItPnJ4X3JpbmdbaV0uY291bnQgLSAxKSk7CisJCWl4Z2JlX2FsbG9jX3J4X2J1ZmZlcnMoYWRhcHRlciwgYWRhcHRlci0+cnhfcmluZ1tpXSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAoYWRhcHRlci0+cnhfcmluZ1tpXS0+Y291bnQgLSAxKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZV9pc19zZnAoc3RydWN0IGl4Z2JlX2h3ICpodykKQEAgLTI2NzMsNyArMjgyMCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaXhnYmVfcnhfZGVzY19xdWV1ZV9lbmFibGUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCiAJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcnhyKQogewotCWludCBqID0gYWRhcHRlci0+cnhfcmluZ1tyeHJdLnJlZ19pZHg7CisJaW50IGogPSBhZGFwdGVyLT5yeF9yaW5nW3J4cl0tPnJlZ19pZHg7CiAJaW50IGs7CiAKIAlmb3IgKGsgPSAwOyBrIDwgSVhHQkVfTUFYX1JYX0RFU0NfUE9MTDsgaysrKSB7CkBAIC0yNjg3LDggKzI4MzQsOCBAQAogCQlEUFJJTlRLKERSViwgRVJSLCAiUlhEQ1RMLkVOQUJMRSBvbiBSeCBxdWV1ZSAlZCAiCiAJCSAgICAgICAgIm5vdCBzZXQgd2l0aGluIHRoZSBwb2xsaW5nIHBlcmlvZFxuIiwgcnhyKTsKIAl9Ci0JaXhnYmVfcmVsZWFzZV9yeF9kZXNjKCZhZGFwdGVyLT5odywgJmFkYXB0ZXItPnJ4X3JpbmdbcnhyXSwKLQkgICAgICAgICAgICAgICAgICAgICAgKGFkYXB0ZXItPnJ4X3JpbmdbcnhyXS5jb3VudCAtIDEpKTsKKwlpeGdiZV9yZWxlYXNlX3J4X2Rlc2MoJmFkYXB0ZXItPmh3LCBhZGFwdGVyLT5yeF9yaW5nW3J4cl0sCisJICAgICAgICAgICAgICAgICAgICAgIChhZGFwdGVyLT5yeF9yaW5nW3J4cl0tPmNvdW50IC0gMSkpOwogfQogCiBzdGF0aWMgaW50IGl4Z2JlX3VwX2NvbXBsZXRlKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQpAQCAtMjcwMiw2ICsyODQ5LDcgQEAKIAl1MzIgdHhkY3RsLCByeGRjdGwsIG1oYWRkOwogCXUzMiBkbWF0eGN0bDsKIAl1MzIgZ3BpZTsKKwl1MzIgY3RybF9leHQ7CiAKIAlpeGdiZV9nZXRfaHdfY29udHJvbChhZGFwdGVyKTsKIApAQCAtMjcxNCw2ICsyODYyLDEwIEBACiAJCQkvKiBNU0kgb25seSAqLwogCQkJZ3BpZSA9IDA7CiAJCX0KKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19TUklPVl9FTkFCTEVEKSB7CisJCQlncGllICY9IH5JWEdCRV9HUElFX1ZUTU9ERV9NQVNLOworCQkJZ3BpZSB8PSBJWEdCRV9HUElFX1ZUTU9ERV82NDsKKwkJfQogCQkvKiBYWFg6IHRvIGludGVycnVwdCBpbW1lZGlhdGVseSBmb3IgRUlDUyB3cml0ZXMsIGVuYWJsZSB0aGlzICovCiAJCS8qIGdwaWUgfD0gSVhHQkVfR1BJRV9FSU1FTjsgKi8KIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9HUElFLCBncGllKTsKQEAgLTI3NzAsNyArMjkyMiw3IEBACiAJfQogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgewotCQlqID0gYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4OworCQlqID0gYWRhcHRlci0+dHhfcmluZ1tpXS0+cmVnX2lkeDsKIAkJdHhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RYRENUTChqKSk7CiAJCS8qIGVuYWJsZSBXVEhSRVNIPTggZGVzY3JpcHRvcnMsIHRvIGVuY291cmFnZSBidXJzdCB3cml0ZWJhY2sgKi8KIAkJdHhkY3RsIHw9ICg4IDw8IDE2KTsKQEAgLTI3ODQsMTQgKzI5MzYsMjYgQEAKIAkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9ETUFUWENUTCwgZG1hdHhjdGwpOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7Ci0JCWogPSBhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHg7CisJCWogPSBhZGFwdGVyLT50eF9yaW5nW2ldLT5yZWdfaWR4OwogCQl0eGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVFhEQ1RMKGopKTsKIAkJdHhkY3RsIHw9IElYR0JFX1RYRENUTF9FTkFCTEU7CiAJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVFhEQ1RMKGopLCB0eGRjdGwpOworCQlpZiAoaHctPm1hYy50eXBlID09IGl4Z2JlX21hY184MjU5OUVCKSB7CisJCQlpbnQgd2FpdF9sb29wID0gMTA7CisJCQkvKiBwb2xsIGZvciBUeCBFbmFibGUgcmVhZHkgKi8KKwkJCWRvIHsKKwkJCQltc2xlZXAoMSk7CisJCQkJdHhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1RYRENUTChqKSk7CisJCQl9IHdoaWxlICgtLXdhaXRfbG9vcCAmJgorCQkJICAgICAgICAgISh0eGRjdGwgJiBJWEdCRV9UWERDVExfRU5BQkxFKSk7CisJCQlpZiAoIXdhaXRfbG9vcCkKKwkJCQlEUFJJTlRLKERSViwgRVJSLCAiQ291bGQgbm90IGVuYWJsZSAiCisJCQkJICAgICAgICAiVHggUXVldWUgJWRcbiIsIGopOworCQl9CiAJfQogCiAJZm9yIChpID0gMDsgaSA8IG51bV9yeF9yaW5nczsgaSsrKSB7Ci0JCWogPSBhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHg7CisJCWogPSBhZGFwdGVyLT5yeF9yaW5nW2ldLT5yZWdfaWR4OwogCQlyeGRjdGwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUlhEQ1RMKGopKTsKIAkJLyogZW5hYmxlIFBUSFJFU0g9MzIgZGVzY3JpcHRvcnMgKGhhbGYgdGhlIGludGVybmFsIGNhY2hlKQogCQkgKiBhbmQgSFRIUkVTSD0wIGRlc2NyaXB0b3JzICh0byBtaW5pbWl6ZSBsYXRlbmN5IG9uIGZldGNoKSwKQEAgLTI4NjUsNyArMzAyOSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQogCQlzZXRfYml0KF9fSVhHQkVfRkRJUl9JTklUX0RPTkUsCi0JCSAgICAgICAgJihhZGFwdGVyLT50eF9yaW5nW2ldLnJlaW5pdF9zdGF0ZSkpOworCQkgICAgICAgICYoYWRhcHRlci0+dHhfcmluZ1tpXS0+cmVpbml0X3N0YXRlKSk7CiAKIAkvKiBlbmFibGUgdHJhbnNtaXRzICovCiAJbmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpOwpAQCAtMjg3NSw2ICszMDM5LDEyIEBACiAJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19ORUVEX0xJTktfVVBEQVRFOwogCWFkYXB0ZXItPmxpbmtfY2hlY2tfdGltZW91dCA9IGppZmZpZXM7CiAJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7CisKKwkvKiBTZXQgUEYgUmVzZXQgRG9uZSBiaXQgc28gUEYvVkYgTWFpbCBPcHMgY2FuIHdvcmsgKi8KKwljdHJsX2V4dCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9DVFJMX0VYVCk7CisJY3RybF9leHQgfD0gSVhHQkVfQ1RSTF9FWFRfUEZSU1REOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfQ1RSTF9FWFQsIGN0cmxfZXh0KTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yOTIzLDcgKzMwOTMsOCBAQAogCX0KIAogCS8qIHJlcHJvZ3JhbSB0aGUgUkFSWzBdIGluIGNhc2UgdXNlciBjaGFuZ2VkIGl0LiAqLwotCWh3LT5tYWMub3BzLnNldF9yYXIoaHcsIDAsIGh3LT5tYWMuYWRkciwgMCwgSVhHQkVfUkFIX0FWKTsKKwlody0+bWFjLm9wcy5zZXRfcmFyKGh3LCAwLCBody0+bWFjLmFkZHIsIGFkYXB0ZXItPm51bV92ZnMsCisJCQkgICAgSVhHQkVfUkFIX0FWKTsKIH0KIAogLyoqCkBAIC0yOTU1LDYgKzMxMjYsMTAgQEAKIAkJCXJ4X2J1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOwogCQkJZG8gewogCQkJCXN0cnVjdCBza19idWZmICp0aGlzID0gc2tiOworCQkJCWlmIChJWEdCRV9SU0NfQ0IodGhpcyktPmRtYSkKKwkJCQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBJWEdCRV9SU0NfQ0IodGhpcyktPmRtYSwKKwkJCQkJICAgICAgICAgICAgICAgICByeF9yaW5nLT5yeF9idWZfbGVuLAorCQkJCQkgICAgICAgICAgICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQkJc2tiID0gc2tiLT5wcmV2OwogCQkJCWRldl9rZnJlZV9za2IodGhpcyk7CiAJCQl9IHdoaWxlIChza2IpOwpAQCAtMzAyOSw3ICszMjA0LDcgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCWl4Z2JlX2NsZWFuX3J4X3JpbmcoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X3JpbmdbaV0pOworCQlpeGdiZV9jbGVhbl9yeF9yaW5nKGFkYXB0ZXIsIGFkYXB0ZXItPnJ4X3JpbmdbaV0pOwogfQogCiAvKioKQEAgLTMwNDEsNyArMzIxNiw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQlpeGdiZV9jbGVhbl90eF9yaW5nKGFkYXB0ZXIsICZhZGFwdGVyLT50eF9yaW5nW2ldKTsKKwkJaXhnYmVfY2xlYW5fdHhfcmluZyhhZGFwdGVyLCBhZGFwdGVyLT50eF9yaW5nW2ldKTsKIH0KIAogdm9pZCBpeGdiZV9kb3duKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQpAQCAtMzA1NSw2ICszMjMwLDE3IEBACiAJLyogc2lnbmFsIHRoYXQgd2UgYXJlIGRvd24gdG8gdGhlIGludGVycnVwdCBoYW5kbGVyICovCiAJc2V0X2JpdChfX0lYR0JFX0RPV04sICZhZGFwdGVyLT5zdGF0ZSk7CiAKKwkvKiBkaXNhYmxlIHJlY2VpdmUgZm9yIGFsbCBWRnMgYW5kIHdhaXQgb25lIHNlY29uZCAqLworCWlmIChhZGFwdGVyLT5udW1fdmZzKSB7CisJCWZvciAoaSA9IDAgOyBpIDwgYWRhcHRlci0+bnVtX3ZmczsgaSsrKQorCQkJYWRhcHRlci0+dmZpbmZvW2ldLmNsZWFyX3RvX3NlbmQgPSAwOworCisJCS8qIHBpbmcgYWxsIHRoZSBhY3RpdmUgdmZzIHRvIGxldCB0aGVtIGtub3cgd2UgYXJlIGdvaW5nIGRvd24gKi8KKwkJaXhnYmVfcGluZ19hbGxfdmZzKGFkYXB0ZXIpOworCQkvKiBEaXNhYmxlIGFsbCBWRlRFL1ZGUkUgVFgvUlggKi8KKwkJaXhnYmVfZGlzYWJsZV90eF9yeChhZGFwdGVyKTsKKwl9CisKIAkvKiBkaXNhYmxlIHJlY2VpdmVzICovCiAJcnhjdHJsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1JYQ1RSTCk7CiAJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9SWENUUkwsIHJ4Y3RybCAmIH5JWEdCRV9SWENUUkxfUlhFTik7CkBAIC0zMDgxLDcgKzMyNjcsNyBAQAogCiAJLyogZGlzYWJsZSB0cmFuc21pdHMgaW4gdGhlIGhhcmR3YXJlIG5vdyB0aGF0IGludGVycnVwdHMgYXJlIG9mZiAqLwogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJaiA9IGFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeDsKKwkJaiA9IGFkYXB0ZXItPnR4X3JpbmdbaV0tPnJlZ19pZHg7CiAJCXR4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9UWERDVEwoaikpOwogCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1RYRENUTChqKSwKIAkJICAgICAgICAgICAgICAgICh0eGRjdGwgJiB+SVhHQkVfVFhEQ1RMX0VOQUJMRSkpOwpAQCAtMzA5NCw2ICszMjgwLDkgQEAKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAKKwkvKiBjbGVhciBuLXR1cGxlIGZpbHRlcnMgdGhhdCBhcmUgY2FjaGVkICovCisJZXRodG9vbF9udHVwbGVfZmx1c2gobmV0ZGV2KTsKKwogCWlmICghcGNpX2NoYW5uZWxfb2ZmbGluZShhZGFwdGVyLT5wZGV2KSkKIAkJaXhnYmVfcmVzZXQoYWRhcHRlcik7CiAJaXhnYmVfY2xlYW5fYWxsX3R4X3JpbmdzKGFkYXB0ZXIpOwpAQCAtMzEyMSwxMyArMzMxMCwxMyBAQAogCiAjaWZkZWYgQ09ORklHX0lYR0JFX0RDQQogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRENBX0VOQUJMRUQpIHsKLQkJaXhnYmVfdXBkYXRlX3R4X2RjYShhZGFwdGVyLCBhZGFwdGVyLT50eF9yaW5nKTsKLQkJaXhnYmVfdXBkYXRlX3J4X2RjYShhZGFwdGVyLCBhZGFwdGVyLT5yeF9yaW5nKTsKKwkJaXhnYmVfdXBkYXRlX3R4X2RjYShhZGFwdGVyLCBhZGFwdGVyLT50eF9yaW5nWzBdKTsKKwkJaXhnYmVfdXBkYXRlX3J4X2RjYShhZGFwdGVyLCBhZGFwdGVyLT5yeF9yaW5nWzBdKTsKIAl9CiAjZW5kaWYKIAotCXR4X2NsZWFuX2NvbXBsZXRlID0gaXhnYmVfY2xlYW5fdHhfaXJxKHFfdmVjdG9yLCBhZGFwdGVyLT50eF9yaW5nKTsKLQlpeGdiZV9jbGVhbl9yeF9pcnEocV92ZWN0b3IsIGFkYXB0ZXItPnJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CisJdHhfY2xlYW5fY29tcGxldGUgPSBpeGdiZV9jbGVhbl90eF9pcnEocV92ZWN0b3IsIGFkYXB0ZXItPnR4X3JpbmdbMF0pOworCWl4Z2JlX2NsZWFuX3J4X2lycShxX3ZlY3RvciwgYWRhcHRlci0+cnhfcmluZ1swXSwgJndvcmtfZG9uZSwgYnVkZ2V0KTsKIAogCWlmICghdHhfY2xlYW5fY29tcGxldGUpCiAJCXdvcmtfZG9uZSA9IGJ1ZGdldDsKQEAgLTMyOTEsNiArMzQ4MCwxOSBAQAogfQogCiAjZW5kaWYgLyogSVhHQkVfRkNPRSAqLworLyoqCisgKiBpeGdiZV9zZXRfc3Jpb3ZfcXVldWVzOiBBbGxvY2F0ZSBxdWV1ZXMgZm9yIElPViB1c2UKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCisgKgorICogSU9WIGRvZXNuJ3QgYWN0dWFsbHkgdXNlIGFueXRoaW5nLCBzbyBqdXN0IE5BSyB0aGUKKyAqIHJlcXVlc3QgZm9yIG5vdyBhbmQgbGV0IHRoZSBvdGhlciBxdWV1ZSByb3V0aW5lcworICogZmlndXJlIG91dCB3aGF0IHRvIGRvLgorICovCitzdGF0aWMgaW5saW5lIGJvb2wgaXhnYmVfc2V0X3NyaW92X3F1ZXVlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlyZXR1cm4gZmFsc2U7Cit9CisKIC8qCiAgKiBpeGdiZV9zZXRfbnVtX3F1ZXVlczogQWxsb2NhdGUgcXVldWVzIGZvciBkZXZpY2UsIGZlYXR1cmUgZGVwZW5kYW50CiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQpAQCAtMzMwNCw2ICszNTA2LDE1IEBACiAgKiovCiBzdGF0aWMgdm9pZCBpeGdiZV9zZXRfbnVtX3F1ZXVlcyhzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKKwkvKiBTdGFydCB3aXRoIGJhc2UgY2FzZSAqLworCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPSAxOworCWFkYXB0ZXItPm51bV90eF9xdWV1ZXMgPSAxOworCWFkYXB0ZXItPm51bV9yeF9wb29scyA9IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7CisJYWRhcHRlci0+bnVtX3J4X3F1ZXVlc19wZXJfcG9vbCA9IDE7CisKKwlpZiAoaXhnYmVfc2V0X3NyaW92X3F1ZXVlcyhhZGFwdGVyKSkKKwkJcmV0dXJuOworCiAjaWZkZWYgSVhHQkVfRkNPRQogCWlmIChpeGdiZV9zZXRfZmNvZV9xdWV1ZXMoYWRhcHRlcikpCiAJCWdvdG8gZG9uZTsKQEAgLTMzOTMsOSArMzYwNCw5IEBACiAKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JTU19FTkFCTEVEKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBpOworCQkJYWRhcHRlci0+cnhfcmluZ1tpXS0+cmVnX2lkeCA9IGk7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHggPSBpOworCQkJYWRhcHRlci0+dHhfcmluZ1tpXS0+cmVnX2lkeCA9IGk7CiAJCXJldCA9IHRydWU7CiAJfSBlbHNlIHsKIAkJcmV0ID0gZmFsc2U7CkBAIC0zNDIyLDggKzM2MzMsOCBAQAogCQlpZiAoYWRhcHRlci0+aHcubWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk4RUIpIHsKIAkJCS8qIHRoZSBudW1iZXIgb2YgcXVldWVzIGlzIGFzc3VtZWQgdG8gYmUgc3ltbWV0cmljICovCiAJCQlmb3IgKGkgPSAwOyBpIDwgZGNiX2k7IGkrKykgewotCQkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeCA9IGkgPDwgMzsKLQkJCQlhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHggPSBpIDw8IDI7CisJCQkJYWRhcHRlci0+cnhfcmluZ1tpXS0+cmVnX2lkeCA9IGkgPDwgMzsKKwkJCQlhZGFwdGVyLT50eF9yaW5nW2ldLT5yZWdfaWR4ID0gaSA8PCAyOwogCQkJfQogCQkJcmV0ID0gdHJ1ZTsKIAkJfSBlbHNlIGlmIChhZGFwdGVyLT5ody5tYWMudHlwZSA9PSBpeGdiZV9tYWNfODI1OTlFQikgewpAQCAtMzQ0MSwxOCArMzY1MiwxOCBAQAogCQkJCSAqIFJ4IFRDMC1UQzcgYXJlIG9mZnNldCBieSAxNiBxdWV1ZXMgZWFjaAogCQkJCSAqLwogCQkJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKLQkJCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4ID0gaSA8PCA1OwotCQkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBpIDw8IDQ7CisJCQkJCWFkYXB0ZXItPnR4X3JpbmdbaV0tPnJlZ19pZHggPSBpIDw8IDU7CisJCQkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0tPnJlZ19pZHggPSBpIDw8IDQ7CiAJCQkJfQogCQkJCWZvciAoIDsgaSA8IDU7IGkrKykgewotCQkJCQlhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHggPQorCQkJCQlhZGFwdGVyLT50eF9yaW5nW2ldLT5yZWdfaWR4ID0KIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICgoaSArIDIpIDw8IDQpOwotCQkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBpIDw8IDQ7CisJCQkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0tPnJlZ19pZHggPSBpIDw8IDQ7CiAJCQkJfQogCQkJCWZvciAoIDsgaSA8IGRjYl9pOyBpKyspIHsKLQkJCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5yZWdfaWR4ID0KKwkJCQkJYWRhcHRlci0+dHhfcmluZ1tpXS0+cmVnX2lkeCA9CiAJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAoKGkgKyA4KSA8PCAzKTsKLQkJCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5yZWdfaWR4ID0gaSA8PCA0OworCQkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLT5yZWdfaWR4ID0gaSA8PCA0OwogCQkJCX0KIAogCQkJCXJldCA9IHRydWU7CkBAIC0zNDY1LDEyICszNjc2LDEyIEBACiAJCQkJICoKIAkJCQkgKiBSeCBUQzAtVEMzIGFyZSBvZmZzZXQgYnkgMzIgcXVldWVzIGVhY2gKIAkJCQkgKi8KLQkJCQlhZGFwdGVyLT50eF9yaW5nWzBdLnJlZ19pZHggPSAwOwotCQkJCWFkYXB0ZXItPnR4X3JpbmdbMV0ucmVnX2lkeCA9IDY0OwotCQkJCWFkYXB0ZXItPnR4X3JpbmdbMl0ucmVnX2lkeCA9IDk2OwotCQkJCWFkYXB0ZXItPnR4X3JpbmdbM10ucmVnX2lkeCA9IDExMjsKKwkJCQlhZGFwdGVyLT50eF9yaW5nWzBdLT5yZWdfaWR4ID0gMDsKKwkJCQlhZGFwdGVyLT50eF9yaW5nWzFdLT5yZWdfaWR4ID0gNjQ7CisJCQkJYWRhcHRlci0+dHhfcmluZ1syXS0+cmVnX2lkeCA9IDk2OworCQkJCWFkYXB0ZXItPnR4X3JpbmdbM10tPnJlZ19pZHggPSAxMTI7CiAJCQkJZm9yIChpID0gMCA7IGkgPCBkY2JfaTsgaSsrKQotCQkJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBpIDw8IDU7CisJCQkJCWFkYXB0ZXItPnJ4X3JpbmdbaV0tPnJlZ19pZHggPSBpIDw8IDU7CiAKIAkJCQlyZXQgPSB0cnVlOwogCQkJfSBlbHNlIHsKQEAgLTM1MDMsOSArMzcxNCw5IEBACiAJICAgICgoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0ZESVJfSEFTSF9DQVBBQkxFKSB8fAogCSAgICAgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRSkpKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHggPSBpOworCQkJYWRhcHRlci0+cnhfcmluZ1tpXS0+cmVnX2lkeCA9IGk7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCi0JCQlhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHggPSBpOworCQkJYWRhcHRlci0+dHhfcmluZ1tpXS0+cmVnX2lkeCA9IGk7CiAJCXJldCA9IHRydWU7CiAJfQogCkBAIC0zNTMzLDggKzM3NDQsOCBAQAogCiAJCQlpeGdiZV9jYWNoZV9yaW5nX2RjYihhZGFwdGVyKTsKIAkJCS8qIGZpbmQgb3V0IHF1ZXVlcyBpbiBUQyBmb3IgRkNvRSAqLwotCQkJZmNvZV9yeF9pID0gYWRhcHRlci0+cnhfcmluZ1tmY29lLT50Y10ucmVnX2lkeCArIDE7Ci0JCQlmY29lX3R4X2kgPSBhZGFwdGVyLT50eF9yaW5nW2Zjb2UtPnRjXS5yZWdfaWR4ICsgMTsKKwkJCWZjb2VfcnhfaSA9IGFkYXB0ZXItPnJ4X3JpbmdbZmNvZS0+dGNdLT5yZWdfaWR4ICsgMTsKKwkJCWZjb2VfdHhfaSA9IGFkYXB0ZXItPnR4X3JpbmdbZmNvZS0+dGNdLT5yZWdfaWR4ICsgMTsKIAkJCS8qCiAJCQkgKiBJbiA4MjU5OSwgdGhlIG51bWJlciBvZiBUeCBxdWV1ZXMgZm9yIGVhY2ggdHJhZmZpYwogCQkJICogY2xhc3MgZm9yIGJvdGggOC1UQyBhbmQgNC1UQyBtb2RlcyBhcmU6CkBAIC0zNTY1LDggKzM3NzYsOCBAQAogCQkJZmNvZV90eF9pID0gZi0+bWFzazsKIAkJfQogCQlmb3IgKGkgPSAwOyBpIDwgZi0+aW5kaWNlczsgaSsrLCBmY29lX3J4X2krKywgZmNvZV90eF9pKyspIHsKLQkJCWFkYXB0ZXItPnJ4X3JpbmdbZi0+bWFzayArIGldLnJlZ19pZHggPSBmY29lX3J4X2k7Ci0JCQlhZGFwdGVyLT50eF9yaW5nW2YtPm1hc2sgKyBpXS5yZWdfaWR4ID0gZmNvZV90eF9pOworCQkJYWRhcHRlci0+cnhfcmluZ1tmLT5tYXNrICsgaV0tPnJlZ19pZHggPSBmY29lX3J4X2k7CisJCQlhZGFwdGVyLT50eF9yaW5nW2YtPm1hc2sgKyBpXS0+cmVnX2lkeCA9IGZjb2VfdHhfaTsKIAkJfQogCQlyZXQgPSB0cnVlOwogCX0KQEAgLTM1NzUsNiArMzc4NiwyNCBAQAogCiAjZW5kaWYgLyogSVhHQkVfRkNPRSAqLwogLyoqCisgKiBpeGdiZV9jYWNoZV9yaW5nX3NyaW92IC0gRGVzY3JpcHRvciByaW5nIHRvIHJlZ2lzdGVyIG1hcHBpbmcgZm9yIHNyaW92CisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIFNSLUlPViBkb2Vzbid0IHVzZSBhbnkgZGVzY3JpcHRvciByaW5ncyBidXQgY2hhbmdlcyB0aGUgZGVmYXVsdCBpZgorICogbm8gb3RoZXIgbWFwcGluZyBpcyB1c2VkLgorICoKKyAqLworc3RhdGljIGlubGluZSBib29sIGl4Z2JlX2NhY2hlX3Jpbmdfc3Jpb3Yoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJYWRhcHRlci0+cnhfcmluZ1swXS0+cmVnX2lkeCA9IGFkYXB0ZXItPm51bV92ZnMgKiAyOworCWFkYXB0ZXItPnR4X3JpbmdbMF0tPnJlZ19pZHggPSBhZGFwdGVyLT5udW1fdmZzICogMjsKKwlpZiAoYWRhcHRlci0+bnVtX3ZmcykKKwkJcmV0dXJuIHRydWU7CisJZWxzZQorCQlyZXR1cm4gZmFsc2U7Cit9CisKKy8qKgogICogaXhnYmVfY2FjaGVfcmluZ19yZWdpc3RlciAtIERlc2NyaXB0b3IgcmluZyB0byByZWdpc3RlciBtYXBwaW5nCiAgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQogICoKQEAgLTM1ODgsOCArMzgxNywxMSBAQAogc3RhdGljIHZvaWQgaXhnYmVfY2FjaGVfcmluZ19yZWdpc3RlcihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKIHsKIAkvKiBzdGFydCB3aXRoIGRlZmF1bHQgY2FzZSAqLwotCWFkYXB0ZXItPnJ4X3JpbmdbMF0ucmVnX2lkeCA9IDA7Ci0JYWRhcHRlci0+dHhfcmluZ1swXS5yZWdfaWR4ID0gMDsKKwlhZGFwdGVyLT5yeF9yaW5nWzBdLT5yZWdfaWR4ID0gMDsKKwlhZGFwdGVyLT50eF9yaW5nWzBdLT5yZWdfaWR4ID0gMDsKKworCWlmIChpeGdiZV9jYWNoZV9yaW5nX3NyaW92KGFkYXB0ZXIpKQorCQlyZXR1cm47CiAKICNpZmRlZiBJWEdCRV9GQ09FCiAJaWYgKGl4Z2JlX2NhY2hlX3JpbmdfZmNvZShhZGFwdGVyKSkKQEAgLTM2MTksMzMgKzM4NTEsNjMgQEAKIHN0YXRpYyBpbnQgaXhnYmVfYWxsb2NfcXVldWVzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQogewogCWludCBpOwotCi0JYWRhcHRlci0+dHhfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGl4Z2JlX3JpbmcpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFkYXB0ZXItPnR4X3JpbmcpCi0JCWdvdG8gZXJyX3R4X3JpbmdfYWxsb2NhdGlvbjsKLQotCWFkYXB0ZXItPnJ4X3JpbmcgPSBrY2FsbG9jKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpeGdiZV9yaW5nKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhZGFwdGVyLT5yeF9yaW5nKQotCQlnb3RvIGVycl9yeF9yaW5nX2FsbG9jYXRpb247CisJaW50IG9yaWdfbm9kZSA9IGFkYXB0ZXItPm5vZGU7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7Ci0JCWFkYXB0ZXItPnR4X3JpbmdbaV0uY291bnQgPSBhZGFwdGVyLT50eF9yaW5nX2NvdW50OwotCQlhZGFwdGVyLT50eF9yaW5nW2ldLnF1ZXVlX2luZGV4ID0gaTsKKwkJc3RydWN0IGl4Z2JlX3JpbmcgKnJpbmcgPSBhZGFwdGVyLT50eF9yaW5nW2ldOworCQlpZiAob3JpZ19ub2RlID09IC0xKSB7CisJCQlpbnQgY3VyX25vZGUgPSBuZXh0X29ubGluZV9ub2RlKGFkYXB0ZXItPm5vZGUpOworCQkJaWYgKGN1cl9ub2RlID09IE1BWF9OVU1OT0RFUykKKwkJCQljdXJfbm9kZSA9IGZpcnN0X29ubGluZV9ub2RlOworCQkJYWRhcHRlci0+bm9kZSA9IGN1cl9ub2RlOworCQl9CisJCXJpbmcgPSBremFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBpeGdiZV9yaW5nKSwgR0ZQX0tFUk5FTCwKKwkJICAgICAgICAgICAgICAgICAgICBhZGFwdGVyLT5ub2RlKTsKKwkJaWYgKCFyaW5nKQorCQkJcmluZyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpeGdiZV9yaW5nKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcmluZykKKwkJCWdvdG8gZXJyX3R4X3JpbmdfYWxsb2NhdGlvbjsKKwkJcmluZy0+Y291bnQgPSBhZGFwdGVyLT50eF9yaW5nX2NvdW50OworCQlyaW5nLT5xdWV1ZV9pbmRleCA9IGk7CisJCXJpbmctPm51bWFfbm9kZSA9IGFkYXB0ZXItPm5vZGU7CisKKwkJYWRhcHRlci0+dHhfcmluZ1tpXSA9IHJpbmc7CiAJfQogCisJLyogUmVzdG9yZSB0aGUgYWRhcHRlcidzIG9yaWdpbmFsIG5vZGUgKi8KKwlhZGFwdGVyLT5ub2RlID0gb3JpZ19ub2RlOworCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewotCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmNvdW50ID0gYWRhcHRlci0+cnhfcmluZ19jb3VudDsKLQkJYWRhcHRlci0+cnhfcmluZ1tpXS5xdWV1ZV9pbmRleCA9IGk7CisJCXN0cnVjdCBpeGdiZV9yaW5nICpyaW5nID0gYWRhcHRlci0+cnhfcmluZ1tpXTsKKwkJaWYgKG9yaWdfbm9kZSA9PSAtMSkgeworCQkJaW50IGN1cl9ub2RlID0gbmV4dF9vbmxpbmVfbm9kZShhZGFwdGVyLT5ub2RlKTsKKwkJCWlmIChjdXJfbm9kZSA9PSBNQVhfTlVNTk9ERVMpCisJCQkJY3VyX25vZGUgPSBmaXJzdF9vbmxpbmVfbm9kZTsKKwkJCWFkYXB0ZXItPm5vZGUgPSBjdXJfbm9kZTsKKwkJfQorCQlyaW5nID0ga3phbGxvY19ub2RlKHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZyksIEdGUF9LRVJORUwsCisJCSAgICAgICAgICAgICAgICAgICAgYWRhcHRlci0+bm9kZSk7CisJCWlmICghcmluZykKKwkJCXJpbmcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXhnYmVfcmluZyksIEdGUF9LRVJORUwpOworCQlpZiAoIXJpbmcpCisJCQlnb3RvIGVycl9yeF9yaW5nX2FsbG9jYXRpb247CisJCXJpbmctPmNvdW50ID0gYWRhcHRlci0+cnhfcmluZ19jb3VudDsKKwkJcmluZy0+cXVldWVfaW5kZXggPSBpOworCQlyaW5nLT5udW1hX25vZGUgPSBhZGFwdGVyLT5ub2RlOworCisJCWFkYXB0ZXItPnJ4X3JpbmdbaV0gPSByaW5nOwogCX0KIAorCS8qIFJlc3RvcmUgdGhlIGFkYXB0ZXIncyBvcmlnaW5hbCBub2RlICovCisJYWRhcHRlci0+bm9kZSA9IG9yaWdfbm9kZTsKKwogCWl4Z2JlX2NhY2hlX3JpbmdfcmVnaXN0ZXIoYWRhcHRlcik7CiAKIAlyZXR1cm4gMDsKIAogZXJyX3J4X3JpbmdfYWxsb2NhdGlvbjoKLQlrZnJlZShhZGFwdGVyLT50eF9yaW5nKTsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQorCQlrZnJlZShhZGFwdGVyLT50eF9yaW5nW2ldKTsKIGVycl90eF9yaW5nX2FsbG9jYXRpb246CiAJcmV0dXJuIC1FTk9NRU07CiB9CkBAIC0zNzAwLDYgKzM5NjIsOSBAQAogCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0ZESVJfSEFTSF9DQVBBQkxFOwogCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0ZESVJfUEVSRkVDVF9DQVBBQkxFOwogCWFkYXB0ZXItPmF0cl9zYW1wbGVfcmF0ZSA9IDA7CisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19TUklPVl9FTkFCTEVEKQorCQlpeGdiZV9kaXNhYmxlX3NyaW92KGFkYXB0ZXIpOworCiAJaXhnYmVfc2V0X251bV9xdWV1ZXMoYWRhcHRlcik7CiAKIAllcnIgPSBwY2lfZW5hYmxlX21zaShhZGFwdGVyLT5wZGV2KTsKQEAgLTM3NDEsNyArNDAwNiwxMSBAQAogCX0KIAogCWZvciAocV9pZHggPSAwOyBxX2lkeCA8IG51bV9xX3ZlY3RvcnM7IHFfaWR4KyspIHsKLQkJcV92ZWN0b3IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IpLCBHRlBfS0VSTkVMKTsKKwkJcV92ZWN0b3IgPSBremFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBpeGdiZV9xX3ZlY3RvciksCisJCSAgICAgICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwsIGFkYXB0ZXItPm5vZGUpOworCQlpZiAoIXFfdmVjdG9yKQorCQkJcV92ZWN0b3IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXhnYmVfcV92ZWN0b3IpLAorCQkJICAgICAgICAgICAgICAgICAgIEdGUF9LRVJORUwpOwogCQlpZiAoIXFfdmVjdG9yKQogCQkJZ290byBlcnJfb3V0OwogCQlxX3ZlY3Rvci0+YWRhcHRlciA9IGFkYXB0ZXI7CkBAIC0zODY4LDEwICs0MTM3LDE2IEBACiAgKiovCiB2b2lkIGl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Ja2ZyZWUoYWRhcHRlci0+dHhfcmluZyk7Ci0Ja2ZyZWUoYWRhcHRlci0+cnhfcmluZyk7Ci0JYWRhcHRlci0+dHhfcmluZyA9IE5VTEw7Ci0JYWRhcHRlci0+cnhfcmluZyA9IE5VTEw7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCWtmcmVlKGFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQlhZGFwdGVyLT50eF9yaW5nW2ldID0gTlVMTDsKKwl9CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlrZnJlZShhZGFwdGVyLT5yeF9yaW5nW2ldKTsKKwkJYWRhcHRlci0+cnhfcmluZ1tpXSA9IE5VTEw7CisJfQogCiAJaXhnYmVfZnJlZV9xX3ZlY3RvcnMoYWRhcHRlcik7CiAJaXhnYmVfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CkBAIC0zOTQyLDYgKzQyMTcsNyBAQAogewogCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJdW5zaWduZWQgaW50IHJzczsKICNpZmRlZiBDT05GSUdfSVhHQkVfRENCCiAJaW50IGo7CkBAIC0zOTY5LDEwICs0MjQ1LDE4IEBACiAJCWFkYXB0ZXItPm1heF9tc2l4X3FfdmVjdG9ycyA9IE1BWF9NU0lYX1FfVkVDVE9SU184MjU5OTsKIAkJYWRhcHRlci0+ZmxhZ3MyIHw9IElYR0JFX0ZMQUcyX1JTQ19DQVBBQkxFOwogCQlhZGFwdGVyLT5mbGFnczIgfD0gSVhHQkVfRkxBRzJfUlNDX0VOQUJMRUQ7Ci0JCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfRkRJUl9IQVNIX0NBUEFCTEU7CisJCWlmIChkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9OVFVQTEUpIHsKKwkJCS8qIEZsb3cgRGlyZWN0b3IgcGVyZmVjdCBmaWx0ZXIgZW5hYmxlZCAqLworCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19GRElSX1BFUkZFQ1RfQ0FQQUJMRTsKKwkJCWFkYXB0ZXItPmF0cl9zYW1wbGVfcmF0ZSA9IDA7CisJCQlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+ZmRpcl9wZXJmZWN0X2xvY2spOworCQl9IGVsc2UgeworCQkJLyogRmxvdyBEaXJlY3RvciBoYXNoIGZpbHRlcnMgZW5hYmxlZCAqLworCQkJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19GRElSX0hBU0hfQ0FQQUJMRTsKKwkJCWFkYXB0ZXItPmF0cl9zYW1wbGVfcmF0ZSA9IDIwOworCQl9CiAJCWFkYXB0ZXItPnJpbmdfZmVhdHVyZVtSSU5HX0ZfRkRJUl0uaW5kaWNlcyA9CiAJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVhHQkVfTUFYX0ZESVJfSU5ESUNFUzsKLQkJYWRhcHRlci0+YXRyX3NhbXBsZV9yYXRlID0gMjA7CiAJCWFkYXB0ZXItPmZkaXJfcGJhbGxvYyA9IDA7CiAjaWZkZWYgSVhHQkVfRkNPRQogCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0ZDT0VfQ0FQQUJMRTsKQEAgLTQwNDEsNiArNDMyNSw5IEBACiAJLyogZW5hYmxlIHJ4IGNzdW0gYnkgZGVmYXVsdCAqLwogCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfUlhfQ1NVTV9FTkFCTEVEOwogCisJLyogZ2V0IGFzc2lnbmVkIE5VTUEgbm9kZSAqLworCWFkYXB0ZXItPm5vZGUgPSBkZXZfdG9fbm9kZSgmcGRldi0+ZGV2KTsKKwogCXNldF9iaXQoX19JWEdCRV9ET1dOLCAmYWRhcHRlci0+c3RhdGUpOwogCiAJcmV0dXJuIDA7CkBAIC00MDYwLDcgKzQzNDcsOSBAQAogCWludCBzaXplOwogCiAJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXhnYmVfdHhfYnVmZmVyKSAqIHR4X3JpbmctPmNvdW50OwotCXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvID0gdm1hbGxvYyhzaXplKTsKKwl0eF9yaW5nLT50eF9idWZmZXJfaW5mbyA9IHZtYWxsb2Nfbm9kZShzaXplLCB0eF9yaW5nLT5udW1hX25vZGUpOworCWlmICghdHhfcmluZy0+dHhfYnVmZmVyX2luZm8pCisJCXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvID0gdm1hbGxvYyhzaXplKTsKIAlpZiAoIXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvKQogCQlnb3RvIGVycjsKIAltZW1zZXQodHhfcmluZy0+dHhfYnVmZmVyX2luZm8sIDAsIHNpemUpOwpAQCAtNDEwMiw3ICs0MzkxLDcgQEAKIAlpbnQgaSwgZXJyID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKLQkJZXJyID0gaXhnYmVfc2V0dXBfdHhfcmVzb3VyY2VzKGFkYXB0ZXIsICZhZGFwdGVyLT50eF9yaW5nW2ldKTsKKwkJZXJyID0gaXhnYmVfc2V0dXBfdHhfcmVzb3VyY2VzKGFkYXB0ZXIsIGFkYXB0ZXItPnR4X3JpbmdbaV0pOwogCQlpZiAoIWVycikKIAkJCWNvbnRpbnVlOwogCQlEUFJJTlRLKFBST0JFLCBFUlIsICJBbGxvY2F0aW9uIGZvciBUeCBRdWV1ZSAldSBmYWlsZWRcbiIsIGkpOwpAQCAtNDEyNiw3ICs0NDE1LDkgQEAKIAlpbnQgc2l6ZTsKIAogCXNpemUgPSBzaXplb2Yoc3RydWN0IGl4Z2JlX3J4X2J1ZmZlcikgKiByeF9yaW5nLT5jb3VudDsKLQlyeF9yaW5nLT5yeF9idWZmZXJfaW5mbyA9IHZtYWxsb2Moc2l6ZSk7CisJcnhfcmluZy0+cnhfYnVmZmVyX2luZm8gPSB2bWFsbG9jX25vZGUoc2l6ZSwgYWRhcHRlci0+bm9kZSk7CisJaWYgKCFyeF9yaW5nLT5yeF9idWZmZXJfaW5mbykKKwkJcnhfcmluZy0+cnhfYnVmZmVyX2luZm8gPSB2bWFsbG9jKHNpemUpOwogCWlmICghcnhfcmluZy0+cnhfYnVmZmVyX2luZm8pIHsKIAkJRFBSSU5USyhQUk9CRSwgRVJSLAogCQkgICAgICAgICJ2bWFsbG9jIGFsbG9jYXRpb24gZmFpbGVkIGZvciB0aGUgcnggZGVzYyByaW5nXG4iKTsKQEAgLTQxNzIsNyArNDQ2Myw3IEBACiAJaW50IGksIGVyciA9IDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7Ci0JCWVyciA9IGl4Z2JlX3NldHVwX3J4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCWVyciA9IGl4Z2JlX3NldHVwX3J4X3Jlc291cmNlcyhhZGFwdGVyLCBhZGFwdGVyLT5yeF9yaW5nW2ldKTsKIAkJaWYgKCFlcnIpCiAJCQljb250aW51ZTsKIAkJRFBSSU5USyhQUk9CRSwgRVJSLCAiQWxsb2NhdGlvbiBmb3IgUnggUXVldWUgJXUgZmFpbGVkXG4iLCBpKTsKQEAgLTQyMTUsOCArNDUwNiw4IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQlpZiAoYWRhcHRlci0+dHhfcmluZ1tpXS5kZXNjKQotCQkJaXhnYmVfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQlpZiAoYWRhcHRlci0+dHhfcmluZ1tpXS0+ZGVzYykKKwkJCWl4Z2JlX2ZyZWVfdHhfcmVzb3VyY2VzKGFkYXB0ZXIsIGFkYXB0ZXItPnR4X3JpbmdbaV0pOwogfQogCiAvKioKQEAgLTQyNTIsOCArNDU0Myw4IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQotCQlpZiAoYWRhcHRlci0+cnhfcmluZ1tpXS5kZXNjKQotCQkJaXhnYmVfZnJlZV9yeF9yZXNvdXJjZXMoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X3JpbmdbaV0pOworCQlpZiAoYWRhcHRlci0+cnhfcmluZ1tpXS0+ZGVzYykKKwkJCWl4Z2JlX2ZyZWVfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsIGFkYXB0ZXItPnJ4X3JpbmdbaV0pOwogfQogCiAvKioKQEAgLTQ1MzAsOCArNDgyMSw4IEBACiAJCQlhZGFwdGVyLT5od19yeF9ub19kbWFfcmVzb3VyY2VzICs9CiAJCQkgICAgICAgICAgICAgICAgICAgICBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfUVBSREMoaSkpOwogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7Ci0JCQlyc2NfY291bnQgKz0gYWRhcHRlci0+cnhfcmluZ1tpXS5yc2NfY291bnQ7Ci0JCQlyc2NfZmx1c2ggKz0gYWRhcHRlci0+cnhfcmluZ1tpXS5yc2NfZmx1c2g7CisJCQlyc2NfY291bnQgKz0gYWRhcHRlci0+cnhfcmluZ1tpXS0+cnNjX2NvdW50OworCQkJcnNjX2ZsdXNoICs9IGFkYXB0ZXItPnJ4X3JpbmdbaV0tPnJzY19mbHVzaDsKIAkJfQogCQlhZGFwdGVyLT5yc2NfdG90YWxfY291bnQgPSByc2NfY291bnQ7CiAJCWFkYXB0ZXItPnJzY190b3RhbF9mbHVzaCA9IHJzY19mbHVzaDsKQEAgLTQ1MzksMTEgKzQ4MzAsMTEgQEAKIAogCS8qIGdhdGhlciBzb21lIHN0YXRzIHRvIHRoZSBhZGFwdGVyIHN0cnVjdCB0aGF0IGFyZSBwZXIgcXVldWUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQotCQlyZXN0YXJ0X3F1ZXVlICs9IGFkYXB0ZXItPnR4X3JpbmdbaV0ucmVzdGFydF9xdWV1ZTsKKwkJcmVzdGFydF9xdWV1ZSArPSBhZGFwdGVyLT50eF9yaW5nW2ldLT5yZXN0YXJ0X3F1ZXVlOwogCWFkYXB0ZXItPnJlc3RhcnRfcXVldWUgPSByZXN0YXJ0X3F1ZXVlOwogCiAJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKLQkJbm9uX2VvcF9kZXNjcyArPSBhZGFwdGVyLT5yeF9yaW5nW2ldLm5vbl9lb3BfZGVzY3M7CisJCW5vbl9lb3BfZGVzY3MgKz0gYWRhcHRlci0+cnhfcmluZ1tpXS0+bm9uX2VvcF9kZXNjczsKIAlhZGFwdGVyLT5ub25fZW9wX2Rlc2NzID0gbm9uX2VvcF9kZXNjczsKIAogCWFkYXB0ZXItPnN0YXRzLmNyY2VycnMgKz0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX0NSQ0VSUlMpOwpAQCAtNDc4Miw3ICs1MDczLDcgQEAKIAlpZiAoaXhnYmVfcmVpbml0X2ZkaXJfdGFibGVzXzgyNTk5KGh3KSA9PSAwKSB7CiAJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCiAJCQlzZXRfYml0KF9fSVhHQkVfRkRJUl9JTklUX0RPTkUsCi0JCQkgICAgICAgICYoYWRhcHRlci0+dHhfcmluZ1tpXS5yZWluaXRfc3RhdGUpKTsKKwkJCSAgICAgICAgJihhZGFwdGVyLT50eF9yaW5nW2ldLT5yZWluaXRfc3RhdGUpKTsKIAl9IGVsc2UgewogCQlEUFJJTlRLKFBST0JFLCBFUlIsICJmYWlsZWQgdG8gZmluaXNoIEZESVIgcmUtaW5pdGlhbGl6YXRpb24sICIKIAkJICAgICAgICAiaWdub3JlZCBhZGRpbmcgRkRJUiBBVFIgZmlsdGVycyBcbiIpOwpAQCAtNDc5MSw2ICs1MDgyLDggQEAKIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKGFkYXB0ZXItPm5ldGRldik7CiB9CiAKK3N0YXRpYyBERUZJTkVfTVVURVgoaXhnYmVfd2F0Y2hkb2dfbG9jayk7CisKIC8qKgogICogaXhnYmVfd2F0Y2hkb2dfdGFzayAtIHdvcmtlciB0aHJlYWQgdG8gYnJpbmcgbGluayB1cAogICogQHdvcms6IHBvaW50ZXIgdG8gd29ya19zdHJ1Y3QgY29udGFpbmluZyBvdXIgZGF0YQpAQCAtNDgwMiwxMyArNTA5NSwxNiBAQAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhdGNoZG9nX3Rhc2spOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKLQl1MzIgbGlua19zcGVlZCA9IGFkYXB0ZXItPmxpbmtfc3BlZWQ7Ci0JYm9vbCBsaW5rX3VwID0gYWRhcHRlci0+bGlua191cDsKKwl1MzIgbGlua19zcGVlZDsKKwlib29sIGxpbmtfdXA7CiAJaW50IGk7CiAJc3RydWN0IGl4Z2JlX3JpbmcgKnR4X3Jpbmc7CiAJaW50IHNvbWVfdHhfcGVuZGluZyA9IDA7CiAKLQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0lOX1dBVENIRE9HX1RBU0s7CisJbXV0ZXhfbG9jaygmaXhnYmVfd2F0Y2hkb2dfbG9jayk7CisKKwlsaW5rX3VwID0gYWRhcHRlci0+bGlua191cDsKKwlsaW5rX3NwZWVkID0gYWRhcHRlci0+bGlua19zcGVlZDsKIAogCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfTkVFRF9MSU5LX1VQREFURSkgewogCQlody0+bWFjLm9wcy5jaGVja19saW5rKGh3LCAmbGlua19zcGVlZCwgJmxpbmtfdXAsIGZhbHNlKTsKQEAgLTQ4NzksNyArNTE3NSw3IEBACiAKIAlpZiAoIW5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgewogCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7Ci0JCQl0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3JpbmdbaV07CisJCQl0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZ1tpXTsKIAkJCWlmICh0eF9yaW5nLT5uZXh0X3RvX3VzZSAhPSB0eF9yaW5nLT5uZXh0X3RvX2NsZWFuKSB7CiAJCQkJc29tZV90eF9wZW5kaW5nID0gMTsKIAkJCQlicmVhazsKQEAgLTQ4OTcsNyArNTE5Myw3IEBACiAJfQogCiAJaXhnYmVfdXBkYXRlX3N0YXRzKGFkYXB0ZXIpOwotCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX0lOX1dBVENIRE9HX1RBU0s7CisJbXV0ZXhfdW5sb2NrKCZpeGdiZV93YXRjaGRvZ19sb2NrKTsKIH0KIAogc3RhdGljIGludCBpeGdiZV90c28oc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCkBAIC01MzQzLDggKzU2MzksMTQgQEAKIAkJcmV0dXJuIHR4cTsKIAl9CiAjZW5kaWYKLQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKQotCQlyZXR1cm4gKHNrYi0+dmxhbl90Y2kgJiBJWEdCRV9UWF9GTEFHU19WTEFOX1BSSU9fTUFTSykgPj4gMTM7CisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19EQ0JfRU5BQkxFRCkgeworCQlpZiAoc2tiLT5wcmlvcml0eSA9PSBUQ19QUklPX0NPTlRST0wpCisJCQl0eHEgPSBhZGFwdGVyLT5yaW5nX2ZlYXR1cmVbUklOR19GX0RDQl0uaW5kaWNlcy0xOworCQllbHNlCisJCQl0eHEgPSAoc2tiLT52bGFuX3RjaSAmIElYR0JFX1RYX0ZMQUdTX1ZMQU5fUFJJT19NQVNLKQorCQkJICAgICAgID4+IDEzOworCQlyZXR1cm4gdHhxOworCX0KIAogCXJldHVybiBza2JfdHhfaGFzaChkZXYsIHNrYik7CiB9CkBAIC01MzcxLDE3ICs1NjczLDEyIEBACiAJCXR4X2ZsYWdzIDw8PSBJWEdCRV9UWF9GTEFHU19WTEFOX1NISUZUOwogCQl0eF9mbGFncyB8PSBJWEdCRV9UWF9GTEFHU19WTEFOOwogCX0gZWxzZSBpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKSB7Ci0JCWlmIChza2ItPnByaW9yaXR5ICE9IFRDX1BSSU9fQ09OVFJPTCkgewotCQkJdHhfZmxhZ3MgfD0gKChza2ItPnF1ZXVlX21hcHBpbmcgJiAweDcpIDw8IDEzKTsKLQkJCXR4X2ZsYWdzIDw8PSBJWEdCRV9UWF9GTEFHU19WTEFOX1NISUZUOwotCQkJdHhfZmxhZ3MgfD0gSVhHQkVfVFhfRkxBR1NfVkxBTjsKLQkJfSBlbHNlIHsKLQkJCXNrYi0+cXVldWVfbWFwcGluZyA9Ci0JCQkJYWRhcHRlci0+cmluZ19mZWF0dXJlW1JJTkdfRl9EQ0JdLmluZGljZXMtMTsKLQkJfQorCQl0eF9mbGFncyB8PSAoKHNrYi0+cXVldWVfbWFwcGluZyAmIDB4NykgPDwgMTMpOworCQl0eF9mbGFncyA8PD0gSVhHQkVfVFhfRkxBR1NfVkxBTl9TSElGVDsKKwkJdHhfZmxhZ3MgfD0gSVhHQkVfVFhfRkxBR1NfVkxBTjsKIAl9CiAKLQl0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3Jpbmdbc2tiLT5xdWV1ZV9tYXBwaW5nXTsKKwl0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZ1tza2ItPnF1ZXVlX21hcHBpbmddOwogCiAJaWYgKChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfRkNPRV9FTkFCTEVEKSAmJgogCSAgICAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9GQ09FKSkpIHsKQEAgLTU0ODcsNyArNTc4NCw4IEBACiAJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwogCW1lbWNweShody0+bWFjLmFkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwogCi0JaHctPm1hYy5vcHMuc2V0X3JhcihodywgMCwgaHctPm1hYy5hZGRyLCAwLCBJWEdCRV9SQUhfQVYpOworCWh3LT5tYWMub3BzLnNldF9yYXIoaHcsIDAsIGh3LT5tYWMuYWRkciwgYWRhcHRlci0+bnVtX3ZmcywKKwkJCSAgICBJWEdCRV9SQUhfQVYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NjI0LDYgKzU5MjIsNjEgQEAKICNlbmRpZiAvKiBJWEdCRV9GQ09FICovCiB9OwogCitzdGF0aWMgdm9pZCBfX2RldmluaXQgaXhnYmVfcHJvYmVfdmYoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICBjb25zdCBzdHJ1Y3QgaXhnYmVfaW5mbyAqaWkpCit7CisjaWZkZWYgQ09ORklHX1BDSV9JT1YKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWludCBlcnI7CisKKwlpZiAoaHctPm1hYy50eXBlICE9IGl4Z2JlX21hY184MjU5OUVCIHx8ICFtYXhfdmZzKQorCQlyZXR1cm47CisKKwkvKiBUaGUgODI1OTkgc3VwcG9ydHMgdXAgdG8gNjQgVkZzIHBlciBwaHlzaWNhbCBmdW5jdGlvbgorCSAqIGJ1dCB0aGlzIGltcGxlbWVudGF0aW9uIGxpbWl0cyBhbGxvY2F0aW9uIHRvIDYzIHNvIHRoYXQKKwkgKiBiYXNpYyBuZXR3b3JraW5nIHJlc291cmNlcyBhcmUgc3RpbGwgYXZhaWxhYmxlIHRvIHRoZQorCSAqIHBoeXNpY2FsIGZ1bmN0aW9uCisJICovCisJYWRhcHRlci0+bnVtX3ZmcyA9IChtYXhfdmZzID4gNjMpID8gNjMgOiBtYXhfdmZzOworCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRDsKKwllcnIgPSBwY2lfZW5hYmxlX3NyaW92KGFkYXB0ZXItPnBkZXYsIGFkYXB0ZXItPm51bV92ZnMpOworCWlmIChlcnIpIHsKKwkJRFBSSU5USyhQUk9CRSwgRVJSLAorCQkJIkZhaWxlZCB0byBlbmFibGUgUENJIHNyaW92OiAlZFxuIiwgZXJyKTsKKwkJZ290byBlcnJfbm92ZnM7CisJfQorCS8qIElmIGNhbGwgdG8gZW5hYmxlIFZGcyBzdWNjZWVkZWQgdGhlbiBhbGxvY2F0ZSBtZW1vcnkKKwkgKiBmb3IgcGVyIFZGIGNvbnRyb2wgc3RydWN0dXJlcy4KKwkgKi8KKwlhZGFwdGVyLT52ZmluZm8gPQorCQlrY2FsbG9jKGFkYXB0ZXItPm51bV92ZnMsCisJCQlzaXplb2Yoc3RydWN0IHZmX2RhdGFfc3RvcmFnZSksIEdGUF9LRVJORUwpOworCWlmIChhZGFwdGVyLT52ZmluZm8pIHsKKwkJLyogTm93IHRoYXQgd2UncmUgc3VyZSBTUi1JT1YgaXMgZW5hYmxlZAorCQkgKiBhbmQgbWVtb3J5IGFsbG9jYXRlZCBzZXQgdXAgdGhlIG1haWxib3ggcGFyYW1ldGVycworCQkgKi8KKwkJaXhnYmVfaW5pdF9tYnhfcGFyYW1zX3BmKGh3KTsKKwkJbWVtY3B5KCZody0+bWJ4Lm9wcywgaWktPm1ieF9vcHMsCisJCSAgICAgICBzaXplb2YoaHctPm1ieC5vcHMpKTsKKworCQkvKiBEaXNhYmxlIFJTQyB3aGVuIGluIFNSLUlPViBtb2RlICovCisJCWFkYXB0ZXItPmZsYWdzMiAmPSB+KElYR0JFX0ZMQUcyX1JTQ19DQVBBQkxFIHwKKwkJCQkgICAgIElYR0JFX0ZMQUcyX1JTQ19FTkFCTEVEKTsKKwkJcmV0dXJuOworCX0KKworCS8qIE9oIG9oICovCisJRFBSSU5USyhQUk9CRSwgRVJSLAorCQkiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgVkYgIgorCQkiRGF0YSBTdG9yYWdlIC0gU1JJT1YgZGlzYWJsZWRcbiIpOworCXBjaV9kaXNhYmxlX3NyaW92KGFkYXB0ZXItPnBkZXYpOworCitlcnJfbm92ZnM6CisJYWRhcHRlci0+ZmxhZ3MgJj0gfklYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRDsKKwlhZGFwdGVyLT5udW1fdmZzID0gMDsKKyNlbmRpZiAvKiBDT05GSUdfUENJX0lPViAqLworfQorCiAvKioKICAqIGl4Z2JlX3Byb2JlIC0gRGV2aWNlIEluaXRpYWxpemF0aW9uIFJvdXRpbmUKICAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdApAQCAtNTY0NCw2ICs1OTk3LDcgQEAKIAljb25zdCBzdHJ1Y3QgaXhnYmVfaW5mbyAqaWkgPSBpeGdiZV9pbmZvX3RibFtlbnQtPmRyaXZlcl9kYXRhXTsKIAlzdGF0aWMgaW50IGNhcmRzX2ZvdW5kOwogCWludCBpLCBlcnIsIHBjaV91c2luZ19kYWM7CisJdW5zaWduZWQgaW50IGluZGljZXMgPSBudW1fcG9zc2libGVfY3B1cygpOwogI2lmZGVmIElYR0JFX0ZDT0UKIAl1MTYgZGV2aWNlX2NhcHM7CiAjZW5kaWYKQEAgLTU2ODIsNyArNjAzNiwxOCBAQAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCi0JbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKHN0cnVjdCBpeGdiZV9hZGFwdGVyKSwgTUFYX1RYX1FVRVVFUyk7CisJaWYgKGlpLT5tYWMgPT0gaXhnYmVfbWFjXzgyNTk4RUIpCisJCWluZGljZXMgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGluZGljZXMsIElYR0JFX01BWF9SU1NfSU5ESUNFUyk7CisJZWxzZQorCQlpbmRpY2VzID0gbWluX3QodW5zaWduZWQgaW50LCBpbmRpY2VzLCBJWEdCRV9NQVhfRkRJUl9JTkRJQ0VTKTsKKworCWluZGljZXMgPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGluZGljZXMsIElYR0JFX01BWF9EQ0JfSU5ESUNFUyk7CisjaWZkZWYgSVhHQkVfRkNPRQorCWluZGljZXMgKz0gbWluX3QodW5zaWduZWQgaW50LCBudW1fcG9zc2libGVfY3B1cygpLAorCQkJIElYR0JFX01BWF9GQ09FX0lORElDRVMpOworI2VuZGlmCisJaW5kaWNlcyA9IG1pbl90KHVuc2lnbmVkIGludCwgaW5kaWNlcywgTUFYX1RYX1FVRVVFUyk7CisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKHN0cnVjdCBpeGdiZV9hZGFwdGVyKSwgaW5kaWNlcyk7CiAJaWYgKCFuZXRkZXYpIHsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfYWxsb2NfZXRoZXJkZXY7CkBAIC01ODAyLDYgKzYxNjcsOCBAQAogCQlnb3RvIGVycl9zd19pbml0OwogCX0KIAorCWl4Z2JlX3Byb2JlX3ZmKGFkYXB0ZXIsIGlpKTsKKwogCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwKIAkgICAgICAgICAgICAgICAgICAgTkVUSUZfRl9JUF9DU1VNIHwKIAkgICAgICAgICAgICAgICAgICAgTkVUSUZfRl9IV19WTEFOX1RYIHwKQEAgLTU4MjIsNiArNjE4OSw5IEBACiAJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNOwogCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1NHOwogCisJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19TUklPVl9FTkFCTEVEKQorCQlhZGFwdGVyLT5mbGFncyAmPSB+KElYR0JFX0ZMQUdfUlNTX0VOQUJMRUQgfAorCQkJCSAgICBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKTsKIAlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0RDQl9FTkFCTEVEKQogCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19SU1NfRU5BQkxFRDsKIApAQCAtNTk0OCw2ICs2MzE4LDEzIEBACiAJCWl4Z2JlX3NldHVwX2RjYShhZGFwdGVyKTsKIAl9CiAjZW5kaWYKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1NSSU9WX0VOQUJMRUQpIHsKKwkJRFBSSU5USyhQUk9CRSwgSU5GTywgIklPViBpcyBlbmFibGVkIHdpdGggJWQgVkZzXG4iLAorCQkJYWRhcHRlci0+bnVtX3Zmcyk7CisJCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdmZzOyBpKyspCisJCQlpeGdiZV92Zl9jb25maWd1cmF0aW9uKHBkZXYsIChpIHwgMHgxMDAwMDAwMCkpOworCX0KKwogCS8qIGFkZCBzYW4gbWFjIGFkZHIgdG8gbmV0ZGV2ICovCiAJaXhnYmVfYWRkX3Nhbm1hY19uZXRkZXYobmV0ZGV2KTsKIApAQCAtNTk2MCw2ICs2MzM3LDggQEAKIAlpeGdiZV9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKGFkYXB0ZXIpOwogZXJyX3N3X2luaXQ6CiBlcnJfZWVwcm9tOgorCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCkKKwkJaXhnYmVfZGlzYWJsZV9zcmlvdihhZGFwdGVyKTsKIAljbGVhcl9iaXQoX19JWEdCRV9TRlBfTU9EVUxFX05PVF9GT1VORCwgJmFkYXB0ZXItPnN0YXRlKTsKIAlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+c2ZwX3RpbWVyKTsKIAljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT5zZnBfdGFzayk7CkBAIC02MDI4LDYgKzY0MDcsOSBAQAogCWlmIChuZXRkZXYtPnJlZ19zdGF0ZSA9PSBORVRSRUdfUkVHSVNURVJFRCkKIAkJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKIAorCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfU1JJT1ZfRU5BQkxFRCkKKwkJaXhnYmVfZGlzYWJsZV9zcmlvdihhZGFwdGVyKTsKKwogCWl4Z2JlX2NsZWFyX2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CiAKIAlpeGdiZV9yZWxlYXNlX2h3X2NvbnRyb2woYWRhcHRlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYnguYyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX21ieC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3NWY5MTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYnguYwpAQCAtMCwwICsxLDQ3OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSAiaXhnYmVfdHlwZS5oIgorI2luY2x1ZGUgIml4Z2JlX2NvbW1vbi5oIgorI2luY2x1ZGUgIml4Z2JlX21ieC5oIgorCisvKioKKyAqICBpeGdiZV9yZWFkX21ieCAtIFJlYWRzIGEgbWVzc2FnZSBmcm9tIHRoZSBtYWlsYm94CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gcmVhZAorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgaXQgc3VjY2Vzc2Z1bHkgcmVhZCBtZXNzYWdlIGZyb20gYnVmZmVyCisgKiovCitzMzIgaXhnYmVfcmVhZF9tYngoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplLCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJLyogbGltaXQgcmVhZCB0byBzaXplIG9mIG1haWxib3ggKi8KKwlpZiAoc2l6ZSA+IG1ieC0+c2l6ZSkKKwkJc2l6ZSA9IG1ieC0+c2l6ZTsKKworCWlmIChtYngtPm9wcy5yZWFkKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMucmVhZChodywgbXNnLCBzaXplLCBtYnhfaWQpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX3dyaXRlX21ieCAtIFdyaXRlIGEgbWVzc2FnZSB0byB0aGUgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIHdyaXRlCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiBpdCBzdWNjZXNzZnVsbHkgY29waWVkIG1lc3NhZ2UgaW50byB0aGUgYnVmZmVyCisgKiovCitzMzIgaXhnYmVfd3JpdGVfbWJ4KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsID0gMDsKKworCWlmIChzaXplID4gbWJ4LT5zaXplKQorCQlyZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKworCWVsc2UgaWYgKG1ieC0+b3BzLndyaXRlKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMud3JpdGUoaHcsIG1zZywgc2l6ZSwgbWJ4X2lkKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9jaGVja19mb3JfbXNnIC0gY2hlY2tzIHRvIHNlZSBpZiBzb21lb25lIHNlbnQgdXMgbWFpbAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byBjaGVjaworICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgdGhlIFN0YXR1cyBiaXQgd2FzIGZvdW5kIG9yIGVsc2UgRVJSX01CWAorICoqLworczMyIGl4Z2JlX2NoZWNrX2Zvcl9tc2coc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKworCWlmIChtYngtPm9wcy5jaGVja19mb3JfbXNnKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMuY2hlY2tfZm9yX21zZyhodywgbWJ4X2lkKTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9jaGVja19mb3JfYWNrIC0gY2hlY2tzIHRvIHNlZSBpZiBzb21lb25lIHNlbnQgdXMgQUNLCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIGNoZWNrCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgU3RhdHVzIGJpdCB3YXMgZm91bmQgb3IgZWxzZSBFUlJfTUJYCisgKiovCitzMzIgaXhnYmVfY2hlY2tfZm9yX2FjayhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJaWYgKG1ieC0+b3BzLmNoZWNrX2Zvcl9hY2spCisJCXJldF92YWwgPSBtYngtPm9wcy5jaGVja19mb3JfYWNrKGh3LCBtYnhfaWQpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX2NoZWNrX2Zvcl9yc3QgLSBjaGVja3MgdG8gc2VlIGlmIG90aGVyIHNpZGUgaGFzIHJlc2V0CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIGNoZWNrCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgU3RhdHVzIGJpdCB3YXMgZm91bmQgb3IgZWxzZSBFUlJfTUJYCisgKiovCitzMzIgaXhnYmVfY2hlY2tfZm9yX3JzdChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJaWYgKG1ieC0+b3BzLmNoZWNrX2Zvcl9yc3QpCisJCXJldF92YWwgPSBtYngtPm9wcy5jaGVja19mb3JfcnN0KGh3LCBtYnhfaWQpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX3BvbGxfZm9yX21zZyAtIFdhaXQgZm9yIG1lc3NhZ2Ugbm90aWZpY2F0aW9uCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbWJ4X2lkOiBpZCBvZiBtYWlsYm94IHRvIHdyaXRlCisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiBpdCBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBtZXNzYWdlIG5vdGlmaWNhdGlvbgorICoqLworc3RhdGljIHMzMiBpeGdiZV9wb2xsX2Zvcl9tc2coc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IG1ieF9pZCkKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCWludCBjb3VudGRvd24gPSBtYngtPnRpbWVvdXQ7CisKKwlpZiAoIWNvdW50ZG93biB8fCAhbWJ4LT5vcHMuY2hlY2tfZm9yX21zZykKKwkJZ290byBvdXQ7CisKKwl3aGlsZSAoY291bnRkb3duICYmIG1ieC0+b3BzLmNoZWNrX2Zvcl9tc2coaHcsIG1ieF9pZCkpIHsKKwkJY291bnRkb3duLS07CisJCWlmICghY291bnRkb3duKQorCQkJYnJlYWs7CisJCXVkZWxheShtYngtPnVzZWNfZGVsYXkpOworCX0KKworCS8qIGlmIHdlIGZhaWxlZCwgYWxsIGZ1dHVyZSBwb3N0ZWQgbWVzc2FnZXMgZmFpbCB1bnRpbCByZXNldCAqLworCWlmICghY291bnRkb3duKQorCQltYngtPnRpbWVvdXQgPSAwOworb3V0OgorCXJldHVybiBjb3VudGRvd24gPyAwIDogSVhHQkVfRVJSX01CWDsKK30KKworLyoqCisgKiAgaXhnYmVfcG9sbF9mb3JfYWNrIC0gV2FpdCBmb3IgbWVzc2FnZSBhY2tub3dsZWRnZW1lbnQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gd3JpdGUKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIG1lc3NhZ2UgYWNrbm93bGVkZ2VtZW50CisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3BvbGxfZm9yX2FjayhzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJaW50IGNvdW50ZG93biA9IG1ieC0+dGltZW91dDsKKworCWlmICghY291bnRkb3duIHx8ICFtYngtPm9wcy5jaGVja19mb3JfYWNrKQorCQlnb3RvIG91dDsKKworCXdoaWxlIChjb3VudGRvd24gJiYgbWJ4LT5vcHMuY2hlY2tfZm9yX2FjayhodywgbWJ4X2lkKSkgeworCQljb3VudGRvd24tLTsKKwkJaWYgKCFjb3VudGRvd24pCisJCQlicmVhazsKKwkJdWRlbGF5KG1ieC0+dXNlY19kZWxheSk7CisJfQorCisJLyogaWYgd2UgZmFpbGVkLCBhbGwgZnV0dXJlIHBvc3RlZCBtZXNzYWdlcyBmYWlsIHVudGlsIHJlc2V0ICovCisJaWYgKCFjb3VudGRvd24pCisJCW1ieC0+dGltZW91dCA9IDA7CitvdXQ6CisJcmV0dXJuIGNvdW50ZG93biA/IDAgOiBJWEdCRV9FUlJfTUJYOworfQorCisvKioKKyAqICBpeGdiZV9yZWFkX3Bvc3RlZF9tYnggLSBXYWl0IGZvciBtZXNzYWdlIG5vdGlmaWNhdGlvbiBhbmQgcmVjZWl2ZSBtZXNzYWdlCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICogIEBtYnhfaWQ6IGlkIG9mIG1haWxib3ggdG8gd3JpdGUKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIG1lc3NhZ2Ugbm90aWZpY2F0aW9uIGFuZAorICogIGNvcGllZCBpdCBpbnRvIHRoZSByZWNlaXZlIGJ1ZmZlci4KKyAqKi8KK3MzMiBpeGdiZV9yZWFkX3Bvc3RlZF9tYngoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplLCB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJaWYgKCFtYngtPm9wcy5yZWFkKQorCQlnb3RvIG91dDsKKworCXJldF92YWwgPSBpeGdiZV9wb2xsX2Zvcl9tc2coaHcsIG1ieF9pZCk7CisKKwkvKiBpZiBhY2sgcmVjZWl2ZWQgcmVhZCBtZXNzYWdlLCBvdGhlcndpc2Ugd2UgdGltZWQgb3V0ICovCisJaWYgKCFyZXRfdmFsKQorCQlyZXRfdmFsID0gbWJ4LT5vcHMucmVhZChodywgbXNnLCBzaXplLCBtYnhfaWQpOworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV93cml0ZV9wb3N0ZWRfbWJ4IC0gV3JpdGUgYSBtZXNzYWdlIHRvIHRoZSBtYWlsYm94LCB3YWl0IGZvciBhY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlcgorICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyCisgKiAgQG1ieF9pZDogaWQgb2YgbWFpbGJveCB0byB3cml0ZQorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgaXQgc3VjY2Vzc2Z1bGx5IGNvcGllZCBtZXNzYWdlIGludG8gdGhlIGJ1ZmZlciBhbmQKKyAqICByZWNlaXZlZCBhbiBhY2sgdG8gdGhhdCBtZXNzYWdlIHdpdGhpbiBkZWxheSAqIHRpbWVvdXQgcGVyaW9kCisgKiovCitzMzIgaXhnYmVfd3JpdGVfcG9zdGVkX21ieChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKm1zZywgdTE2IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgbWJ4X2lkKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJLyogZXhpdCBpZiBlaXRoZXIgd2UgY2FuJ3Qgd3JpdGUgb3IgdGhlcmUgaXNuJ3QgYSBkZWZpbmVkIHRpbWVvdXQgKi8KKwlpZiAoIW1ieC0+b3BzLndyaXRlIHx8ICFtYngtPnRpbWVvdXQpCisJCWdvdG8gb3V0OworCisJLyogc2VuZCBtc2cgKi8KKwlyZXRfdmFsID0gbWJ4LT5vcHMud3JpdGUoaHcsIG1zZywgc2l6ZSwgbWJ4X2lkKTsKKworCS8qIGlmIG1zZyBzZW50IHdhaXQgdW50aWwgd2UgcmVjZWl2ZSBhbiBhY2sgKi8KKwlpZiAoIXJldF92YWwpCisJCXJldF92YWwgPSBpeGdiZV9wb2xsX2Zvcl9hY2soaHcsIG1ieF9pZCk7CitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX2luaXRfbWJ4X29wc19nZW5lcmljIC0gSW5pdGlhbGl6ZSBNQiBmdW5jdGlvbiBwb2ludGVycworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIFNldHVwIHRoZSBtYWlsYm94IHJlYWQgYW5kIHdyaXRlIG1lc3NhZ2UgZnVuY3Rpb24gcG9pbnRlcnMKKyAqKi8KK3ZvaWQgaXhnYmVfaW5pdF9tYnhfb3BzX2dlbmVyaWMoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCisJbWJ4LT5vcHMucmVhZF9wb3N0ZWQgPSBpeGdiZV9yZWFkX3Bvc3RlZF9tYng7CisJbWJ4LT5vcHMud3JpdGVfcG9zdGVkID0gaXhnYmVfd3JpdGVfcG9zdGVkX21ieDsKK30KKworc3RhdGljIHMzMiBpeGdiZV9jaGVja19mb3JfYml0X3BmKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiBtYXNrLCBzMzIgaW5kZXgpCit7CisJdTMyIG1idmZpY3IgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfTUJWRklDUihpbmRleCkpOworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKworCWlmIChtYnZmaWNyICYgbWFzaykgeworCQlyZXRfdmFsID0gMDsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9NQlZGSUNSKGluZGV4KSwgbWFzayk7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX2NoZWNrX2Zvcl9tc2dfcGYgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBWRiBoYXMgc2VudCBtYWlsCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIHRoZSBWRiBoYXMgc2V0IHRoZSBTdGF0dXMgYml0IG9yIGVsc2UgRVJSX01CWAorICoqLworc3RhdGljIHMzMiBpeGdiZV9jaGVja19mb3JfbXNnX3BmKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUxNiB2Zl9udW1iZXIpCit7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCXMzMiBpbmRleCA9IElYR0JFX01CVkZJQ1JfSU5ERVgodmZfbnVtYmVyKTsKKwl1MzIgdmZfYml0ID0gdmZfbnVtYmVyICUgMTY7CisKKwlpZiAoIWl4Z2JlX2NoZWNrX2Zvcl9iaXRfcGYoaHcsIElYR0JFX01CVkZJQ1JfVkZSRVFfVkYxIDw8IHZmX2JpdCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgpKSB7CisJCXJldF92YWwgPSAwOworCQlody0+bWJ4LnN0YXRzLnJlcXMrKzsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmVfY2hlY2tfZm9yX2Fja19wZiAtIGNoZWNrcyB0byBzZWUgaWYgdGhlIFZGIGhhcyBBQ0tlZAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQHZmX251bWJlcjogdGhlIFZGIGluZGV4CisgKgorICogIHJldHVybnMgU1VDQ0VTUyBpZiB0aGUgVkYgaGFzIHNldCB0aGUgU3RhdHVzIGJpdCBvciBlbHNlIEVSUl9NQlgKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfY2hlY2tfZm9yX2Fja19wZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MTYgdmZfbnVtYmVyKQoreworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKwlzMzIgaW5kZXggPSBJWEdCRV9NQlZGSUNSX0lOREVYKHZmX251bWJlcik7CisJdTMyIHZmX2JpdCA9IHZmX251bWJlciAlIDE2OworCisJaWYgKCFpeGdiZV9jaGVja19mb3JfYml0X3BmKGh3LCBJWEdCRV9NQlZGSUNSX1ZGQUNLX1ZGMSA8PCB2Zl9iaXQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4KSkgeworCQlyZXRfdmFsID0gMDsKKwkJaHctPm1ieC5zdGF0cy5hY2tzKys7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JlX2NoZWNrX2Zvcl9yc3RfcGYgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBWRiBoYXMgcmVzZXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEB2Zl9udW1iZXI6IHRoZSBWRiBpbmRleAorICoKKyAqICByZXR1cm5zIFNVQ0NFU1MgaWYgdGhlIFZGIGhhcyBzZXQgdGhlIFN0YXR1cyBiaXQgb3IgZWxzZSBFUlJfTUJYCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX2NoZWNrX2Zvcl9yc3RfcGYoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IHZmX251bWJlcikKK3sKKwl1MzIgcmVnX29mZnNldCA9ICh2Zl9udW1iZXIgPCAzMikgPyAwIDogMTsKKwl1MzIgdmZfc2hpZnQgPSB2Zl9udW1iZXIgJSAzMjsKKwl1MzIgdmZscmUgPSAwOworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKworCWlmIChody0+bWFjLnR5cGUgPT0gaXhnYmVfbWFjXzgyNTk5RUIpCisJCXZmbHJlID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTFJFKHJlZ19vZmZzZXQpKTsKKworCWlmICh2ZmxyZSAmICgxIDw8IHZmX3NoaWZ0KSkgeworCQlyZXRfdmFsID0gMDsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRkxSRUMocmVnX29mZnNldCksICgxIDw8IHZmX3NoaWZ0KSk7CisJCWh3LT5tYnguc3RhdHMucnN0cysrOworCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9vYnRhaW5fbWJ4X2xvY2tfcGYgLSBvYnRhaW4gbWFpbGJveCBsb2NrCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgcmV0dXJuIFNVQ0NFU1MgaWYgd2Ugb2J0YWluZWQgdGhlIG1haWxib3ggbG9jaworICoqLworc3RhdGljIHMzMiBpeGdiZV9vYnRhaW5fbWJ4X2xvY2tfcGYoc3RydWN0IGl4Z2JlX2h3ICpodywgdTE2IHZmX251bWJlcikKK3sKKwlzMzIgcmV0X3ZhbCA9IElYR0JFX0VSUl9NQlg7CisJdTMyIHAydl9tYWlsYm94OworCisJLyogVGFrZSBvd25lcnNoaXAgb2YgdGhlIGJ1ZmZlciAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUEZNQUlMQk9YKHZmX251bWJlciksIElYR0JFX1BGTUFJTEJPWF9QRlUpOworCisJLyogcmVzZXJ2ZSBtYWlsYm94IGZvciB2ZiB1c2UgKi8KKwlwMnZfbWFpbGJveCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9QRk1BSUxCT1godmZfbnVtYmVyKSk7CisJaWYgKHAydl9tYWlsYm94ICYgSVhHQkVfUEZNQUlMQk9YX1BGVSkKKwkJcmV0X3ZhbCA9IDA7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmVfd3JpdGVfbWJ4X3BmIC0gUGxhY2VzIGEgbWVzc2FnZSBpbiB0aGUgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgcmV0dXJucyBTVUNDRVNTIGlmIGl0IHN1Y2Nlc3NmdWxseSBjb3BpZWQgbWVzc2FnZSBpbnRvIHRoZSBidWZmZXIKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmVfd3JpdGVfbWJ4X3BmKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxNiB2Zl9udW1iZXIpCit7CisJczMyIHJldF92YWw7CisJdTE2IGk7CisKKwkvKiBsb2NrIHRoZSBtYWlsYm94IHRvIHByZXZlbnQgcGYvdmYgcmFjZSBjb25kaXRpb24gKi8KKwlyZXRfdmFsID0gaXhnYmVfb2J0YWluX21ieF9sb2NrX3BmKGh3LCB2Zl9udW1iZXIpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dF9ub193cml0ZTsKKworCS8qIGZsdXNoIG1zZyBhbmQgYWNrcyBhcyB3ZSBhcmUgb3ZlcndyaXRpbmcgdGhlIG1lc3NhZ2UgYnVmZmVyICovCisJaXhnYmVfY2hlY2tfZm9yX21zZ19wZihodywgdmZfbnVtYmVyKTsKKwlpeGdiZV9jaGVja19mb3JfYWNrX3BmKGh3LCB2Zl9udW1iZXIpOworCisJLyogY29weSB0aGUgY2FsbGVyIHNwZWNpZmllZCBtZXNzYWdlIHRvIHRoZSBtYWlsYm94IG1lbW9yeSBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQlJWEdCRV9XUklURV9SRUdfQVJSQVkoaHcsIElYR0JFX1BGTUJNRU0odmZfbnVtYmVyKSwgaSwgbXNnW2ldKTsKKworCS8qIEludGVycnVwdCBWRiB0byB0ZWxsIGl0IGEgbWVzc2FnZSBoYXMgYmVlbiBzZW50IGFuZCByZWxlYXNlIGJ1ZmZlciovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9QRk1BSUxCT1godmZfbnVtYmVyKSwgSVhHQkVfUEZNQUlMQk9YX1NUUyk7CisKKwkvKiB1cGRhdGUgc3RhdHMgKi8KKwlody0+bWJ4LnN0YXRzLm1zZ3NfdHgrKzsKKworb3V0X25vX3dyaXRlOgorCXJldHVybiByZXRfdmFsOworCit9CisKKy8qKgorICogIGl4Z2JlX3JlYWRfbWJ4X3BmIC0gUmVhZCBhIG1lc3NhZ2UgZnJvbSB0aGUgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyCisgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXIKKyAqICBAdmZfbnVtYmVyOiB0aGUgVkYgaW5kZXgKKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgYSBtZXNzYWdlIGZyb20gdGhlIG1haWxib3ggYnVmZmVyIHRvIHRoZSBjYWxsZXIncworICogIG1lbW9yeSBidWZmZXIuICBUaGUgcHJlc3VtcHRpb24gaXMgdGhhdCB0aGUgY2FsbGVyIGtub3dzIHRoYXQgdGhlcmUgd2FzCisgKiAgYSBtZXNzYWdlIGR1ZSB0byBhIFZGIHJlcXVlc3Qgc28gbm8gcG9sbGluZyBmb3IgbWVzc2FnZSBpcyBuZWVkZWQuCisgKiovCitzdGF0aWMgczMyIGl4Z2JlX3JlYWRfbWJ4X3BmKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHZmX251bWJlcikKK3sKKwlzMzIgcmV0X3ZhbDsKKwl1MTYgaTsKKworCS8qIGxvY2sgdGhlIG1haWxib3ggdG8gcHJldmVudCBwZi92ZiByYWNlIGNvbmRpdGlvbiAqLworCXJldF92YWwgPSBpeGdiZV9vYnRhaW5fbWJ4X2xvY2tfcGYoaHcsIHZmX251bWJlcik7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0X25vX3JlYWQ7CisKKwkvKiBjb3B5IHRoZSBtZXNzYWdlIHRvIHRoZSBtYWlsYm94IG1lbW9yeSBidWZmZXIgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQltc2dbaV0gPSBJWEdCRV9SRUFEX1JFR19BUlJBWShodywgSVhHQkVfUEZNQk1FTSh2Zl9udW1iZXIpLCBpKTsKKworCS8qIEFja25vd2xlZGdlIHRoZSBtZXNzYWdlIGFuZCByZWxlYXNlIGJ1ZmZlciAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfUEZNQUlMQk9YKHZmX251bWJlciksIElYR0JFX1BGTUFJTEJPWF9BQ0spOworCisJLyogdXBkYXRlIHN0YXRzICovCisJaHctPm1ieC5zdGF0cy5tc2dzX3J4Kys7CisKK291dF9ub19yZWFkOgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZV9pbml0X21ieF9wYXJhbXNfcGYgLSBzZXQgaW5pdGlhbCB2YWx1ZXMgZm9yIHBmIG1haWxib3gKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBJbml0aWFsaXplcyB0aGUgaHctPm1ieCBzdHJ1Y3QgdG8gY29ycmVjdCB2YWx1ZXMgZm9yIHBmIG1haWxib3gKKyAqLwordm9pZCBpeGdiZV9pbml0X21ieF9wYXJhbXNfcGYoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCisJaWYgKGh3LT5tYWMudHlwZSAhPSBpeGdiZV9tYWNfODI1OTlFQikKKwkJcmV0dXJuOworCisJbWJ4LT50aW1lb3V0ID0gMDsKKwltYngtPnVzZWNfZGVsYXkgPSAwOworCisJbWJ4LT5zaXplID0gSVhHQkVfVkZNQUlMQk9YX1NJWkU7CisKKwltYngtPnN0YXRzLm1zZ3NfdHggPSAwOworCW1ieC0+c3RhdHMubXNnc19yeCA9IDA7CisJbWJ4LT5zdGF0cy5yZXFzID0gMDsKKwltYngtPnN0YXRzLmFja3MgPSAwOworCW1ieC0+c3RhdHMucnN0cyA9IDA7Cit9CisKK3N0cnVjdCBpeGdiZV9tYnhfb3BlcmF0aW9ucyBtYnhfb3BzXzgyNTk5ID0geworCS5yZWFkICAgICAgICAgICAgICAgICAgID0gaXhnYmVfcmVhZF9tYnhfcGYsCisJLndyaXRlICAgICAgICAgICAgICAgICAgPSBpeGdiZV93cml0ZV9tYnhfcGYsCisJLnJlYWRfcG9zdGVkICAgICAgICAgICAgPSBpeGdiZV9yZWFkX3Bvc3RlZF9tYngsCisJLndyaXRlX3Bvc3RlZCAgICAgICAgICAgPSBpeGdiZV93cml0ZV9wb3N0ZWRfbWJ4LAorCS5jaGVja19mb3JfbXNnICAgICAgICAgID0gaXhnYmVfY2hlY2tfZm9yX21zZ19wZiwKKwkuY2hlY2tfZm9yX2FjayAgICAgICAgICA9IGl4Z2JlX2NoZWNrX2Zvcl9hY2tfcGYsCisJLmNoZWNrX2Zvcl9yc3QgICAgICAgICAgPSBpeGdiZV9jaGVja19mb3JfcnN0X3BmLAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWJ4LmggYi9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9tYnguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTdhYjMzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfbWJ4LmgKQEAgLTAsMCArMSw5NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfSVhHQkVfTUJYX0hfCisjZGVmaW5lIF9JWEdCRV9NQlhfSF8KKworI2luY2x1ZGUgIml4Z2JlX3R5cGUuaCIKKworI2RlZmluZSBJWEdCRV9WRk1BSUxCT1hfU0laRSAgICAgICAgMTYgLyogMTYgMzIgYml0IHdvcmRzIC0gNjQgYnl0ZXMgKi8KKyNkZWZpbmUgSVhHQkVfRVJSX01CWCAgICAgICAgICAgICAgIC0xMDAKKworI2RlZmluZSBJWEdCRV9WRk1BSUxCT1ggICAgICAgICAgICAgMHgwMDJGQworI2RlZmluZSBJWEdCRV9WRk1CTUVNICAgICAgICAgICAgICAgMHgwMDIwMAorCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWCh4KSAgICAgICAgICAoMHgwNEIwMCArICg0ICogeCkpCisjZGVmaW5lIElYR0JFX1BGTUJNRU0odmZuKSAgICAgICAgICAoMHgxMzAwMCArICg2NCAqIHZmbikpCisKKyNkZWZpbmUgSVhHQkVfUEZNQUlMQk9YX1NUUyAgIDB4MDAwMDAwMDEgLyogSW5pdGlhdGUgbWVzc2FnZSBzZW5kIHRvIFZGICovCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9BQ0sgICAweDAwMDAwMDAyIC8qIEFjayBtZXNzYWdlIHJlY3YnZCBmcm9tIFZGICovCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9WRlUgICAweDAwMDAwMDA0IC8qIFZGIG93bnMgdGhlIG1haWxib3ggYnVmZmVyICovCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9QRlUgICAweDAwMDAwMDA4IC8qIFBGIG93bnMgdGhlIG1haWxib3ggYnVmZmVyICovCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9SVkZVICAweDAwMDAwMDEwIC8qIFJlc2V0IFZGVSAtIHVzZWQgd2hlbiBWRiBzdHVjayAqLworCisjZGVmaW5lIElYR0JFX01CVkZJQ1JfVkZSRVFfTUFTSyAweDAwMDBGRkZGIC8qIGJpdHMgZm9yIFZGIG1lc3NhZ2VzICovCisjZGVmaW5lIElYR0JFX01CVkZJQ1JfVkZSRVFfVkYxICAweDAwMDAwMDAxIC8qIGJpdCBmb3IgVkYgMSBtZXNzYWdlICovCisjZGVmaW5lIElYR0JFX01CVkZJQ1JfVkZBQ0tfTUFTSyAweEZGRkYwMDAwIC8qIGJpdHMgZm9yIFZGIGFja3MgKi8KKyNkZWZpbmUgSVhHQkVfTUJWRklDUl9WRkFDS19WRjEgIDB4MDAwMTAwMDAgLyogYml0IGZvciBWRiAxIGFjayAqLworCisKKy8qIElmIGl0J3MgYSBJWEdCRV9WRl8qIG1zZyB0aGVuIGl0IG9yaWdpbmF0ZXMgaW4gdGhlIFZGIGFuZCBpcyBzZW50IHRvIHRoZQorICogUEYuICBUaGUgcmV2ZXJzZSBpcyB0cnVlIGlmIGl0IGlzIElYR0JFX1BGXyouCisgKiBNZXNzYWdlIEFDSydzIGFyZSB0aGUgdmFsdWUgb3InZCB3aXRoIDB4RjAwMDAwMDAKKyAqLworI2RlZmluZSBJWEdCRV9WVF9NU0dUWVBFX0FDSyAgICAgIDB4ODAwMDAwMDAgIC8qIE1lc3NhZ2VzIGJlbG93IG9yJ2Qgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoaXMgYXJlIHRoZSBBQ0sgKi8KKyNkZWZpbmUgSVhHQkVfVlRfTVNHVFlQRV9OQUNLICAgICAweDQwMDAwMDAwICAvKiBNZXNzYWdlcyBiZWxvdyBvcidkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGlzIGFyZSB0aGUgTkFDSyAqLworI2RlZmluZSBJWEdCRV9WVF9NU0dUWVBFX0NUUyAgICAgIDB4MjAwMDAwMDAgIC8qIEluZGljYXRlcyB0aGF0IFZGIGlzIHN0aWxsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXIgdG8gc2VuZCByZXF1ZXN0cyAqLworI2RlZmluZSBJWEdCRV9WVF9NU0dJTkZPX1NISUZUICAgIDE2CisvKiBiaXRzIDIzOjE2IGFyZSB1c2VkIGZvciBleHJhIGluZm8gZm9yIGNlcnRhaW4gbWVzc2FnZXMgKi8KKyNkZWZpbmUgSVhHQkVfVlRfTVNHSU5GT19NQVNLICAgICAoMHhGRiA8PCBJWEdCRV9WVF9NU0dJTkZPX1NISUZUKQorCisjZGVmaW5lIElYR0JFX1ZGX1JFU0VUICAgICAgICAgICAgMHgwMSAvKiBWRiByZXF1ZXN0cyByZXNldCAqLworI2RlZmluZSBJWEdCRV9WRl9TRVRfTUFDX0FERFIgICAgIDB4MDIgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IE1BQyBhZGRyICovCisjZGVmaW5lIElYR0JFX1ZGX1NFVF9NVUxUSUNBU1QgICAgMHgwMyAvKiBWRiByZXF1ZXN0cyBQRiB0byBzZXQgTUMgYWRkciAqLworI2RlZmluZSBJWEdCRV9WRl9TRVRfVkxBTiAgICAgICAgIDB4MDQgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IFZMQU4gKi8KKyNkZWZpbmUgSVhHQkVfVkZfU0VUX0xQRSAgICAgICAgICAweDA1IC8qIFZGIHJlcXVlc3RzIFBGIHRvIHNldCBWTU9MUi5MUEUgKi8KKworLyogbGVuZ3RoIG9mIHBlcm1hbmVudCBhZGRyZXNzIG1lc3NhZ2UgcmV0dXJuZWQgZnJvbSBQRiAqLworI2RlZmluZSBJWEdCRV9WRl9QRVJNQUREUl9NU0dfTEVOIDQKKy8qIHdvcmQgaW4gcGVybWFuZW50IGFkZHJlc3MgbWVzc2FnZSB3aXRoIHRoZSBjdXJyZW50IG11bHRpY2FzdCB0eXBlICovCisjZGVmaW5lIElYR0JFX1ZGX01DX1RZUEVfV09SRCAgICAgMworCisjZGVmaW5lIElYR0JFX1BGX0NPTlRST0xfTVNHICAgICAgMHgwMTAwIC8qIFBGIGNvbnRyb2wgbWVzc2FnZSAqLworCisjZGVmaW5lIElYR0JFX1ZGX01CWF9JTklUX1RJTUVPVVQgMjAwMCAvKiBudW1iZXIgb2YgcmV0cmllcyBvbiBtYWlsYm94ICovCisjZGVmaW5lIElYR0JFX1ZGX01CWF9JTklUX0RFTEFZICAgNTAwICAvKiBtaWNyb3NlY29uZHMgYmV0d2VlbiByZXRyaWVzICovCisKK3MzMiBpeGdiZV9yZWFkX21ieChzdHJ1Y3QgaXhnYmVfaHcgKiwgdTMyICosIHUxNiwgdTE2KTsKK3MzMiBpeGdiZV93cml0ZV9tYngoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiAqLCB1MTYsIHUxNik7CitzMzIgaXhnYmVfcmVhZF9wb3N0ZWRfbWJ4KHN0cnVjdCBpeGdiZV9odyAqLCB1MzIgKiwgdTE2LCB1MTYpOworczMyIGl4Z2JlX3dyaXRlX3Bvc3RlZF9tYngoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiAqLCB1MTYsIHUxNik7CitzMzIgaXhnYmVfY2hlY2tfZm9yX21zZyhzdHJ1Y3QgaXhnYmVfaHcgKiwgdTE2KTsKK3MzMiBpeGdiZV9jaGVja19mb3JfYWNrKHN0cnVjdCBpeGdiZV9odyAqLCB1MTYpOworczMyIGl4Z2JlX2NoZWNrX2Zvcl9yc3Qoc3RydWN0IGl4Z2JlX2h3ICosIHUxNik7Cit2b2lkIGl4Z2JlX2luaXRfbWJ4X29wc19nZW5lcmljKHN0cnVjdCBpeGdiZV9odyAqaHcpOwordm9pZCBpeGdiZV9pbml0X21ieF9wYXJhbXNfcGYoc3RydWN0IGl4Z2JlX2h3ICopOworCitleHRlcm4gc3RydWN0IGl4Z2JlX21ieF9vcGVyYXRpb25zIG1ieF9vcHNfODI1OTk7CisKKyNlbmRpZiAvKiBfSVhHQkVfTUJYX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5jIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGNkMjBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuYwpAQCAtMCwwICsxLDM2MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworICBJbnRlbCAxMCBHaWdhYml0IFBDSSBFeHByZXNzIExpbnV4IGRyaXZlcgorICBDb3B5cmlnaHQoYykgMTk5OSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC9pcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpZmRlZiBORVRJRl9GX0hXX1ZMQU5fVFgKKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIml4Z2JlLmgiCisKKyNpbmNsdWRlICJpeGdiZV9zcmlvdi5oIgorCitpbnQgaXhnYmVfc2V0X3ZmX211bHRpY2FzdHMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgaW50IGVudHJpZXMsIHUxNiAqaGFzaF9saXN0LCB1MzIgdmYpCit7CisJc3RydWN0IHZmX2RhdGFfc3RvcmFnZSAqdmZpbmZvID0gJmFkYXB0ZXItPnZmaW5mb1t2Zl07CisJaW50IGk7CisKKwkvKiBvbmx5IHNvIG1hbnkgaGFzaCB2YWx1ZXMgc3VwcG9ydGVkICovCisJZW50cmllcyA9IG1pbihlbnRyaWVzLCBJWEdCRV9NQVhfVkZfTUNfRU5UUklFUyk7CisKKwkvKgorCSAqIHNhbHQgYXdheSB0aGUgbnVtYmVyIG9mIG11bHRpIGNhc3QgYWRkcmVzc2VzIGFzc2lnbmVkCisJICogdG8gdGhpcyBWRiBmb3IgbGF0ZXIgdXNlIHRvIHJlc3RvcmUgd2hlbiB0aGUgUEYgbXVsdGkgY2FzdAorCSAqIGxpc3QgY2hhbmdlcworCSAqLworCXZmaW5mby0+bnVtX3ZmX21jX2hhc2hlcyA9IGVudHJpZXM7CisKKwkvKgorCSAqIFZGcyBhcmUgbGltaXRlZCB0byB1c2luZyB0aGUgTVRBIGhhc2ggdGFibGUgZm9yIHRoZWlyIG11bHRpY2FzdAorCSAqIGFkZHJlc3NlcworCSAqLworCWZvciAoaSA9IDA7IGkgPCBlbnRyaWVzOyBpKyspIHsKKwkJdmZpbmZvLT52Zl9tY19oYXNoZXNbaV0gPSBoYXNoX2xpc3RbaV07OworCX0KKworCS8qIEZsdXNoIGFuZCByZXNldCB0aGUgbXRhIHdpdGggdGhlIG5ldyB2YWx1ZXMgKi8KKwlpeGdiZV9zZXRfcnhfbW9kZShhZGFwdGVyLT5uZXRkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaXhnYmVfcmVzdG9yZV92Zl9tdWx0aWNhc3RzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IHZmX2RhdGFfc3RvcmFnZSAqdmZpbmZvOworCWludCBpLCBqOworCXUzMiB2ZWN0b3JfYml0OworCXUzMiB2ZWN0b3JfcmVnOworCXUzMiBtdGFfcmVnOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV92ZnM7IGkrKykgeworCQl2ZmluZm8gPSAmYWRhcHRlci0+dmZpbmZvW2ldOworCQlmb3IgKGogPSAwOyBqIDwgdmZpbmZvLT5udW1fdmZfbWNfaGFzaGVzOyBqKyspIHsKKwkJCWh3LT5hZGRyX2N0cmwubXRhX2luX3VzZSsrOworCQkJdmVjdG9yX3JlZyA9ICh2ZmluZm8tPnZmX21jX2hhc2hlc1tqXSA+PiA1KSAmIDB4N0Y7CisJCQl2ZWN0b3JfYml0ID0gdmZpbmZvLT52Zl9tY19oYXNoZXNbal0gJiAweDFGOworCQkJbXRhX3JlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9NVEEodmVjdG9yX3JlZykpOworCQkJbXRhX3JlZyB8PSAoMSA8PCB2ZWN0b3JfYml0KTsKKwkJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfTVRBKHZlY3Rvcl9yZWcpLCBtdGFfcmVnKTsKKwkJfQorCX0KK30KKworaW50IGl4Z2JlX3NldF92Zl92bGFuKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkLCBpbnQgdmlkLCB1MzIgdmYpCit7CisJdTMyIGN0cmw7CisKKwkvKiBDaGVjayBpZiBnbG9iYWwgVkxBTiBhbHJlYWR5IHNldCwgaWYgbm90IHNldCBpdCAqLworCWN0cmwgPSBJWEdCRV9SRUFEX1JFRygmYWRhcHRlci0+aHcsIElYR0JFX1ZMTkNUUkwpOworCWlmICghKGN0cmwgJiBJWEdCRV9WTE5DVFJMX1ZGRSkpIHsKKwkJLyogZW5hYmxlIFZMQU4gdGFnIGluc2VydC9zdHJpcCAqLworCQljdHJsIHw9IElYR0JFX1ZMTkNUUkxfVkZFOworCQljdHJsICY9IH5JWEdCRV9WTE5DVFJMX0NGSUVOOworCQlJWEdCRV9XUklURV9SRUcoJmFkYXB0ZXItPmh3LCBJWEdCRV9WTE5DVFJMLCBjdHJsKTsKKwl9CisKKwlyZXR1cm4gYWRhcHRlci0+aHcubWFjLm9wcy5zZXRfdmZ0YSgmYWRhcHRlci0+aHcsIHZpZCwgdmYsIChib29sKWFkZCk7Cit9CisKKwordm9pZCBpeGdiZV9zZXRfdm1vbHIoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHZmKQoreworCXUzMiB2bW9sciA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WTU9MUih2ZikpOworCXZtb2xyIHw9IChJWEdCRV9WTU9MUl9BVVBFIHwKKwkJICBJWEdCRV9WTU9MUl9ST01QRSB8CisJCSAgSVhHQkVfVk1PTFJfUk9QRSB8CisJCSAgSVhHQkVfVk1PTFJfQkFNKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZNT0xSKHZmKSwgdm1vbHIpOworfQorCitpbmxpbmUgdm9pZCBpeGdiZV92Zl9yZXNldF9ldmVudChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgdTMyIHZmKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwkvKiByZXNldCBvZmZsb2FkcyB0byBkZWZhdWx0cyAqLworCWl4Z2JlX3NldF92bW9scihodywgdmYpOworCisKKwkvKiByZXNldCBtdWx0aWNhc3QgdGFibGUgYXJyYXkgZm9yIHZmICovCisJYWRhcHRlci0+dmZpbmZvW3ZmXS5udW1fdmZfbWNfaGFzaGVzID0gMDsKKworCS8qIEZsdXNoIGFuZCByZXNldCB0aGUgbXRhIHdpdGggdGhlIG5ldyB2YWx1ZXMgKi8KKwlpeGdiZV9zZXRfcnhfbW9kZShhZGFwdGVyLT5uZXRkZXYpOworCisJaWYgKGFkYXB0ZXItPnZmaW5mb1t2Zl0ucmFyID4gMCkgeworCQlhZGFwdGVyLT5ody5tYWMub3BzLmNsZWFyX3JhcigmYWRhcHRlci0+aHcsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkYXB0ZXItPnZmaW5mb1t2Zl0ucmFyKTsKKwkJYWRhcHRlci0+dmZpbmZvW3ZmXS5yYXIgPSAtMTsKKwl9Cit9CisKK2ludCBpeGdiZV9zZXRfdmZfbWFjKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmYsIHVuc2lnbmVkIGNoYXIgKm1hY19hZGRyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwlhZGFwdGVyLT52ZmluZm9bdmZdLnJhciA9IGh3LT5tYWMub3BzLnNldF9yYXIoaHcsIHZmICsgMSwgbWFjX2FkZHIsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZmLCBJWEdCRV9SQUhfQVYpOworCWlmIChhZGFwdGVyLT52ZmluZm9bdmZdLnJhciA8IDApIHsKKwkJRFBSSU5USyhEUlYsIEVSUiwgIkNvdWxkIG5vdCBzZXQgTUFDIEZpbHRlciBmb3IgVkYgJWRcbiIsIHZmKTsKKwkJcmV0dXJuIC0xOworCX0KKworCW1lbWNweShhZGFwdGVyLT52ZmluZm9bdmZdLnZmX21hY19hZGRyZXNzZXMsIG1hY19hZGRyLCA2KTsKKworCXJldHVybiAwOworfQorCitpbnQgaXhnYmVfdmZfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGV2ZW50X21hc2spCit7CisJdW5zaWduZWQgY2hhciB2Zl9tYWNfYWRkcls2XTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwl1bnNpZ25lZCBpbnQgdmZuID0gKGV2ZW50X21hc2sgJiAweDNmKTsKKworCWJvb2wgZW5hYmxlID0gKChldmVudF9tYXNrICYgMHgxMDAwMDAwMFUpICE9IDApOworCisJaWYgKGVuYWJsZSkgeworCQlyYW5kb21fZXRoZXJfYWRkcih2Zl9tYWNfYWRkcik7CisJCURQUklOVEsoUFJPQkUsIElORk8sICJJT1Y6IFZGICVkIGlzIGVuYWJsZWQgIgorCQkgICAgICAgIm1hYyAlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKKwkJICAgICAgIHZmbiwKKwkJICAgICAgIHZmX21hY19hZGRyWzBdLCB2Zl9tYWNfYWRkclsxXSwgdmZfbWFjX2FkZHJbMl0sCisJCSAgICAgICB2Zl9tYWNfYWRkclszXSwgdmZfbWFjX2FkZHJbNF0sIHZmX21hY19hZGRyWzVdKTsKKwkJLyoKKwkJICogU3RvcmUgYXdheSB0aGUgVkYgInBlcm1hbmFuZXQiIE1BQyBhZGRyZXNzLCBpdCB3aWxsIGFzaworCQkgKiBmb3IgaXQgbGF0ZXIuCisJCSAqLworCQltZW1jcHkoYWRhcHRlci0+dmZpbmZvW3Zmbl0udmZfbWFjX2FkZHJlc3NlcywgdmZfbWFjX2FkZHIsIDYpOworCX0KKworCXJldHVybiAwOworfQorCitpbmxpbmUgdm9pZCBpeGdiZV92Zl9yZXNldF9tc2coc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2ZikKK3sKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiByZWc7CisJdTMyIHJlZ19vZmZzZXQsIHZmX3NoaWZ0OworCisJdmZfc2hpZnQgPSB2ZiAlIDMyOworCXJlZ19vZmZzZXQgPSB2ZiAvIDMyOworCisJLyogZW5hYmxlIHRyYW5zbWl0IGFuZCByZWNlaXZlIGZvciB2ZiAqLworCXJlZyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlRFKHJlZ19vZmZzZXQpKTsKKwlyZWcgfD0gKHJlZyB8ICgxIDw8IHZmX3NoaWZ0KSk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRFKHJlZ19vZmZzZXQpLCByZWcpOworCisJcmVnID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGUkUocmVnX29mZnNldCkpOworCXJlZyB8PSAocmVnIHwgKDEgPDwgdmZfc2hpZnQpKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGUkUocmVnX29mZnNldCksIHJlZyk7CisKKwlpeGdiZV92Zl9yZXNldF9ldmVudChhZGFwdGVyLCB2Zik7Cit9CisKK3N0YXRpYyBpbnQgaXhnYmVfcmN2X21zZ19mcm9tX3ZmKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCit7CisJdTMyIG1ieF9zaXplID0gSVhHQkVfVkZNQUlMQk9YX1NJWkU7CisJdTMyIG1zZ2J1ZlttYnhfc2l6ZV07CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzMzIgcmV0dmFsOworCWludCBlbnRyaWVzOworCXUxNiAqaGFzaF9saXN0OworCWludCBhZGQsIHZpZDsKKworCXJldHZhbCA9IGl4Z2JlX3JlYWRfbWJ4KGh3LCBtc2didWYsIG1ieF9zaXplLCB2Zik7CisKKwlpZiAocmV0dmFsKQorCQlwcmludGsoS0VSTl9FUlIgIkVycm9yIHJlY2VpdmluZyBtZXNzYWdlIGZyb20gVkZcbiIpOworCisJLyogdGhpcyBpcyBhIG1lc3NhZ2Ugd2UgYWxyZWFkeSBwcm9jZXNzZWQsIGRvIG5vdGhpbmcgKi8KKwlpZiAobXNnYnVmWzBdICYgKElYR0JFX1ZUX01TR1RZUEVfQUNLIHwgSVhHQkVfVlRfTVNHVFlQRV9OQUNLKSkKKwkJcmV0dXJuIHJldHZhbDsKKworCS8qCisJICogdW50aWwgdGhlIHZmIGNvbXBsZXRlcyBhIHZpcnR1YWwgZnVuY3Rpb24gcmVzZXQgaXQgc2hvdWxkIG5vdCBiZQorCSAqIGFsbG93ZWQgdG8gc3RhcnQgYW55IGNvbmZpZ3VyYXRpb24uCisJICovCisKKwlpZiAobXNnYnVmWzBdID09IElYR0JFX1ZGX1JFU0VUKSB7CisJCXVuc2lnbmVkIGNoYXIgKnZmX21hYyA9IGFkYXB0ZXItPnZmaW5mb1t2Zl0udmZfbWFjX2FkZHJlc3NlczsKKwkJdTggKmFkZHIgPSAodTggKikoJm1zZ2J1ZlsxXSk7CisJCURQUklOVEsoUFJPQkUsIElORk8sICJWRiBSZXNldCBtc2cgcmVjZWl2ZWQgZnJvbSB2ZiAlZFxuIiwgdmYpOworCQlhZGFwdGVyLT52ZmluZm9bdmZdLmNsZWFyX3RvX3NlbmQgPSBmYWxzZTsKKwkJaXhnYmVfdmZfcmVzZXRfbXNnKGFkYXB0ZXIsIHZmKTsKKwkJYWRhcHRlci0+dmZpbmZvW3ZmXS5jbGVhcl90b19zZW5kID0gdHJ1ZTsKKworCQkvKiByZXBseSB0byByZXNldCB3aXRoIGFjayBhbmQgdmYgbWFjIGFkZHJlc3MgKi8KKwkJbXNnYnVmWzBdID0gSVhHQkVfVkZfUkVTRVQgfCBJWEdCRV9WVF9NU0dUWVBFX0FDSzsKKwkJbWVtY3B5KGFkZHIsIHZmX21hYywgSVhHQkVfRVRIX0xFTkdUSF9PRl9BRERSRVNTKTsKKwkJLyoKKwkJICogUGlnZ3liYWNrIHRoZSBtdWx0aWNhc3QgZmlsdGVyIHR5cGUgc28gVkYgY2FuIGNvbXB1dGUgdGhlCisJCSAqIGNvcnJlY3QgdmVjdG9ycworCQkgKi8KKwkJbXNnYnVmWzNdID0gaHctPm1hYy5tY19maWx0ZXJfdHlwZTsKKwkJaXhnYmVfd3JpdGVfbWJ4KGh3LCBtc2didWYsIElYR0JFX1ZGX1BFUk1BRERSX01TR19MRU4sIHZmKTsKKworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWlmICghYWRhcHRlci0+dmZpbmZvW3ZmXS5jbGVhcl90b19zZW5kKSB7CisJCW1zZ2J1ZlswXSB8PSBJWEdCRV9WVF9NU0dUWVBFX05BQ0s7CisJCWl4Z2JlX3dyaXRlX21ieChodywgbXNnYnVmLCAxLCB2Zik7CisJCXJldHVybiByZXR2YWw7CisJfQorCisJc3dpdGNoICgobXNnYnVmWzBdICYgMHhGRkZGKSkgeworCWNhc2UgSVhHQkVfVkZfU0VUX01BQ19BRERSOgorCQl7CisJCQl1OCAqbmV3X21hYyA9ICgodTggKikoJm1zZ2J1ZlsxXSkpOworCQkJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIobmV3X21hYykpCisJCQkJaXhnYmVfc2V0X3ZmX21hYyhhZGFwdGVyLCB2ZiwgbmV3X21hYyk7CisJCQllbHNlCisJCQkJcmV0dmFsID0gLTE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9WRl9TRVRfTVVMVElDQVNUOgorCQllbnRyaWVzID0gKG1zZ2J1ZlswXSAmIElYR0JFX1ZUX01TR0lORk9fTUFTSykKKwkJICAgICAgICAgID4+IElYR0JFX1ZUX01TR0lORk9fU0hJRlQ7CisJCWhhc2hfbGlzdCA9ICh1MTYgKikmbXNnYnVmWzFdOworCQlyZXR2YWwgPSBpeGdiZV9zZXRfdmZfbXVsdGljYXN0cyhhZGFwdGVyLCBlbnRyaWVzLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoX2xpc3QsIHZmKTsKKwkJYnJlYWs7CisJY2FzZSBJWEdCRV9WRl9TRVRfTFBFOgorCQlXQVJOX09OKChtc2didWZbMF0gJiAweEZGRkYpID09IElYR0JFX1ZGX1NFVF9MUEUpOworCQlicmVhazsKKwljYXNlIElYR0JFX1ZGX1NFVF9WTEFOOgorCQlhZGQgPSAobXNnYnVmWzBdICYgSVhHQkVfVlRfTVNHSU5GT19NQVNLKQorCQkgICAgICA+PiBJWEdCRV9WVF9NU0dJTkZPX1NISUZUOworCQl2aWQgPSAobXNnYnVmWzFdICYgSVhHQkVfVkxWRl9WTEFOSURfTUFTSyk7CisJCXJldHZhbCA9IGl4Z2JlX3NldF92Zl92bGFuKGFkYXB0ZXIsIGFkZCwgdmlkLCB2Zik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURQUklOVEsoRFJWLCBFUlIsICJVbmhhbmRsZWQgTXNnICU4Ljh4XG4iLCBtc2didWZbMF0pOworCQlyZXR2YWwgPSBJWEdCRV9FUlJfTUJYOworCQlicmVhazsKKwl9CisKKwkvKiBub3RpZnkgdGhlIFZGIG9mIHRoZSByZXN1bHRzIG9mIHdoYXQgaXQgc2VudCB1cyAqLworCWlmIChyZXR2YWwpCisJCW1zZ2J1ZlswXSB8PSBJWEdCRV9WVF9NU0dUWVBFX05BQ0s7CisJZWxzZQorCQltc2didWZbMF0gfD0gSVhHQkVfVlRfTVNHVFlQRV9BQ0s7CisKKwltc2didWZbMF0gfD0gSVhHQkVfVlRfTVNHVFlQRV9DVFM7CisKKwlpeGdiZV93cml0ZV9tYngoaHcsIG1zZ2J1ZiwgMSwgdmYpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgaXhnYmVfcmN2X2Fja19mcm9tX3ZmKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgbXNnID0gSVhHQkVfVlRfTVNHVFlQRV9OQUNLOworCisJLyogaWYgZGV2aWNlIGlzbid0IGNsZWFyIHRvIHNlbmQgaXQgc2hvdWxkbid0IGJlIHJlYWRpbmcgZWl0aGVyICovCisJaWYgKCFhZGFwdGVyLT52ZmluZm9bdmZdLmNsZWFyX3RvX3NlbmQpCisJCWl4Z2JlX3dyaXRlX21ieChodywgJm1zZywgMSwgdmYpOworfQorCit2b2lkIGl4Z2JlX21zZ190YXNrKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHZmOworCisJZm9yICh2ZiA9IDA7IHZmIDwgYWRhcHRlci0+bnVtX3ZmczsgdmYrKykgeworCQkvKiBwcm9jZXNzIGFueSByZXNldCByZXF1ZXN0cyAqLworCQlpZiAoIWl4Z2JlX2NoZWNrX2Zvcl9yc3QoaHcsIHZmKSkKKwkJCWl4Z2JlX3ZmX3Jlc2V0X2V2ZW50KGFkYXB0ZXIsIHZmKTsKKworCQkvKiBwcm9jZXNzIGFueSBtZXNzYWdlcyBwZW5kaW5nICovCisJCWlmICghaXhnYmVfY2hlY2tfZm9yX21zZyhodywgdmYpKQorCQkJaXhnYmVfcmN2X21zZ19mcm9tX3ZmKGFkYXB0ZXIsIHZmKTsKKworCQkvKiBwcm9jZXNzIGFueSBhY2tzICovCisJCWlmICghaXhnYmVfY2hlY2tfZm9yX2FjayhodywgdmYpKQorCQkJaXhnYmVfcmN2X2Fja19mcm9tX3ZmKGFkYXB0ZXIsIHZmKTsKKwl9Cit9CisKK3ZvaWQgaXhnYmVfZGlzYWJsZV90eF9yeChzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJLyogZGlzYWJsZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBmb3IgYWxsIHZmcyAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZURSgwKSwgMCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRFKDEpLCAwKTsKKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZSRSgwKSwgMCk7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJFKDEpLCAwKTsKK30KKwordm9pZCBpeGdiZV9waW5nX2FsbF92ZnMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgcGluZzsKKwlpbnQgaTsKKworCWZvciAoaSA9IDAgOyBpIDwgYWRhcHRlci0+bnVtX3ZmczsgaSsrKSB7CisJCXBpbmcgPSBJWEdCRV9QRl9DT05UUk9MX01TRzsKKwkJaWYgKGFkYXB0ZXItPnZmaW5mb1tpXS5jbGVhcl90b19zZW5kKQorCQkJcGluZyB8PSBJWEdCRV9WVF9NU0dUWVBFX0NUUzsKKwkJaXhnYmVfd3JpdGVfbWJ4KGh3LCAmcGluZywgMSwgaSk7CisJfQorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZS9peGdiZV9zcmlvdi5oIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWQxMTA2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfc3Jpb3YuaApAQCAtMCwwICsxLDQ3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsIDEwIEdpZ2FiaXQgUENJIEV4cHJlc3MgTGludXggZHJpdmVyCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JWEdCRV9TUklPVl9IXworI2RlZmluZSBfSVhHQkVfU1JJT1ZfSF8KKworaW50IGl4Z2JlX3NldF92Zl9tdWx0aWNhc3RzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBlbnRyaWVzLCB1MTYgKmhhc2hfbGlzdCwgdTMyIHZmKTsKK3ZvaWQgaXhnYmVfcmVzdG9yZV92Zl9tdWx0aWNhc3RzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKTsKK2ludCBpeGdiZV9zZXRfdmZfdmxhbihzdHJ1Y3QgaXhnYmVfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZCwgaW50IHZpZCwgdTMyIHZmKTsKK3ZvaWQgaXhnYmVfc2V0X3Ztb2xyKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiB2Zik7Cit2b2lkIGl4Z2JlX3ZmX3Jlc2V0X2V2ZW50KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLCB1MzIgdmYpOwordm9pZCBpeGdiZV92Zl9yZXNldF9tc2coc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiB2Zik7Cit2b2lkIGl4Z2JlX21zZ190YXNrKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKTsKK2ludCBpeGdiZV9zZXRfdmZfbWFjKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyLAorICAgICAgICAgICAgICAgICAgICAgaW50IHZmLCB1bnNpZ25lZCBjaGFyICptYWNfYWRkcik7CitpbnQgaXhnYmVfdmZfY29uZmlndXJhdGlvbihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdW5zaWduZWQgaW50IGV2ZW50X21hc2spOwordm9pZCBpeGdiZV9kaXNhYmxlX3R4X3J4KHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgaXhnYmVfcGluZ19hbGxfdmZzKHN0cnVjdCBpeGdiZV9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgaXhnYmVfZHVtcF9yZWdpc3RlcnMoc3RydWN0IGl4Z2JlX2FkYXB0ZXIgKmFkYXB0ZXIpOworCisjZW5kaWYgLyogX0lYR0JFX1NSSU9WX0hfICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaCBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaAppbmRleCA5ZWFmZGRmLi4yYmU5MDc0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXhnYmUvaXhnYmVfdHlwZS5oCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JlL2l4Z2JlX3R5cGUuaApAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9tZGlvLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogCiAvKiBWZW5kb3IgSUQgKi8KICNkZWZpbmUgSVhHQkVfSU5URUxfVkVORE9SX0lEICAgMHg4MDg2CkBAIC0yNzcsNiArMjc3LDcgQEAKICNkZWZpbmUgSVhHQkVfRFRYQ1RMICAgIDB4MDdFMDAKIAogI2RlZmluZSBJWEdCRV9ETUFUWENUTCAgMHgwNEE4MAorI2RlZmluZSBJWEdCRV9QRkRUWEdTV0MgICAgIDB4MDgyMjAKICNkZWZpbmUgSVhHQkVfRFRYTVhTWlJRICAgICAweDA4MTAwCiAjZGVmaW5lIElYR0JFX0RUWFRDUEZMR0wgICAgMHgwNEE4OAogI2RlZmluZSBJWEdCRV9EVFhUQ1BGTEdIICAgIDB4MDRBOEMKQEAgLTI4Nyw2ICsyODgsOCBAQAogI2RlZmluZSBJWEdCRV9ETUFUWENUTF9OUyAgICAgICAweDIgLyogTm8gU25vb3AgTFNPIGhkciBidWZmZXIgKi8KICNkZWZpbmUgSVhHQkVfRE1BVFhDVExfR0RWICAgICAgMHg4IC8qIEdsb2JhbCBEb3VibGUgVkxBTiAqLwogI2RlZmluZSBJWEdCRV9ETUFUWENUTF9WVF9TSElGVCAxNiAgLyogVkxBTiBFdGhlclR5cGUgKi8KKworI2RlZmluZSBJWEdCRV9QRkRUWEdTV0NfVlRfTEJFTiAweDEgLyogTG9jYWwgTDIgVlQgc3dpdGNoIGVuYWJsZSAqLwogI2RlZmluZSBJWEdCRV9EQ0FfVFhDVFJMKF9pKSAgICAoMHgwNzIwMCArICgoX2kpICogNCkpIC8qIDE2IG9mIHRoZXNlICgwLTE1KSAqLwogLyogVHggRENBIENvbnRyb2wgcmVnaXN0ZXIgOiAxMjggb2YgdGhlc2UgKDAtMTI3KSAqLwogI2RlZmluZSBJWEdCRV9EQ0FfVFhDVFJMXzgyNTk5KF9pKSAgKDB4MDYwMEMgKyAoKF9pKSAqIDB4NDApKQpAQCAtNDk3LDYgKzUwMCw3IEBACiAvKiBEQ0IgcmVnaXN0ZXJzICovCiAjZGVmaW5lIElYR0JFX1JUUlBDUyAgICAgIDB4MDI0MzAKICNkZWZpbmUgSVhHQkVfUlRURENTICAgICAgMHgwNDkwMAorI2RlZmluZSBJWEdCRV9SVFREQ1NfQVJCRElTICAgICAweDAwMDAwMDQwIC8qIERDQiBhcmJpdGVyIGRpc2FibGUgKi8KICNkZWZpbmUgSVhHQkVfUlRUUENTICAgICAgMHgwQ0QwMAogI2RlZmluZSBJWEdCRV9SVFJVUDJUQyAgICAweDAzMDIwCiAjZGVmaW5lIElYR0JFX1JUVFVQMlRDICAgIDB4MEM4MDAKQEAgLTczMCw2ICs3MzQsMTMgQEAKICNkZWZpbmUgSVhHQkVfR0NSX0NNUExfVE1PVVRfUkVTRU5EICAgICAweDAwMDEwMDAwCiAjZGVmaW5lIElYR0JFX0dDUl9DQVBfVkVSMiAgICAgICAgICAgICAgMHgwMDA0MDAwMAogCisjZGVmaW5lIElYR0JFX0dDUl9FWFRfTVNJWF9FTiAgICAgICAgICAgMHg4MDAwMDAwMAorI2RlZmluZSBJWEdCRV9HQ1JfRVhUX1ZUX01PREVfMTYgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVhHQkVfR0NSX0VYVF9WVF9NT0RFXzMyICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIElYR0JFX0dDUl9FWFRfVlRfTU9ERV82NCAgICAgICAgMHgwMDAwMDAwMworI2RlZmluZSBJWEdCRV9HQ1JfRVhUX1NSSU9WICAgICAgICAgICAgIChJWEdCRV9HQ1JfRVhUX01TSVhfRU4gfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElYR0JFX0dDUl9FWFRfVlRfTU9ERV82NCkKKwogLyogVGltZSBTeW5jIFJlZ2lzdGVycyAqLwogI2RlZmluZSBJWEdCRV9UU1lOQ1JYQ1RMIDB4MDUxODggLyogUnggVGltZSBTeW5jIENvbnRyb2wgcmVnaXN0ZXIgLSBSVyAqLwogI2RlZmluZSBJWEdCRV9UU1lOQ1RYQ1RMIDB4MDhDMDAgLyogVHggVGltZSBTeW5jIENvbnRyb2wgcmVnaXN0ZXIgLSBSVyAqLwpAQCAtMTA2NSw2ICsxMDc2LDggQEAKIC8qIFZGUkUgYml0bWFzayAqLwogI2RlZmluZSBJWEdCRV9WRlJFX0VOQUJMRV9BTEwgICAweEZGRkZGRkZGCiAKKyNkZWZpbmUgSVhHQkVfVkZfSU5JVF9USU1FT1VUICAgMjAwIC8qIE51bWJlciBvZiByZXRyaWVzIHRvIGNsZWFyIFJTVEkgKi8KKwogLyogUkRITVBOIGFuZCBUREhNUE4gYml0bWFza3MgKi8KICNkZWZpbmUgSVhHQkVfUkRITVBOX1JESUNBRERSICAgICAgIDB4MDA3RkY4MDAKICNkZWZpbmUgSVhHQkVfUkRITVBOX1JESUNSRFJFUSAgICAgIDB4MDA4MDAwMDAKQEAgLTEyOTUsNiArMTMwOCw3IEBACiAvKiBWTEFOIHBvb2wgZmlsdGVyaW5nIG1hc2tzICovCiAjZGVmaW5lIElYR0JFX1ZMVkZfVklFTiAgICAgICAgIDB4ODAwMDAwMDAgIC8qIGZpbHRlciBpcyB2YWxpZCAqLwogI2RlZmluZSBJWEdCRV9WTFZGX0VOVFJJRVMgICAgICA2NAorI2RlZmluZSBJWEdCRV9WTFZGX1ZMQU5JRF9NQVNLICAweDAwMDAwRkZGCiAKICNkZWZpbmUgSVhHQkVfRVRIRVJORVRfSUVFRV9WTEFOX1RZUEUgMHg4MTAwICAvKiA4MDIuMXEgcHJvdG9jb2wgKi8KIApAQCAtMTg0Myw2ICsxODU3LDEyIEBACiAjZGVmaW5lIElYR0JFX1JYX0RFU0NfU1BFQ0lBTF9QUklfU0hJRlQgIDB4MDAwRCAvKiBQcmlvcml0eSBpbiB1cHBlciAzIG9mIDE2ICovCiAjZGVmaW5lIElYR0JFX1RYX0RFU0NfU1BFQ0lBTF9QUklfU0hJRlQgIElYR0JFX1JYX0RFU0NfU1BFQ0lBTF9QUklfU0hJRlQKIAorLyogU1ItSU9WIHNwZWNpZmljIG1hY3JvcyAqLworI2RlZmluZSBJWEdCRV9NQlZGSUNSX0lOREVYKHZmX251bWJlcikgICAodmZfbnVtYmVyID4+IDQpCisjZGVmaW5lIElYR0JFX01CVkZJQ1IoX2kpICAgICAgICAgICAgICAgICgweDAwNzEwICsgKF9pICogNCkpCisjZGVmaW5lIElYR0JFX1ZGTFJFKF9pKSAgICAgICAgICAgICAgICAgICgoKF9pICYgMSkgPyAweDAwMUMwIDogMHgwMDYwMCkpCisjZGVmaW5lIElYR0JFX1ZGTFJFQyhfaSkgICAgICAgICAgICAgICAgICgweDAwNzAwICsgKF9pICogNCkpCisKIC8qIExpdHRsZSBFbmRpYW4gZGVmaW5lcyAqLwogI2lmbmRlZiBfX2xlMzIKICNkZWZpbmUgX19sZTMyICB1MzIKQEAgLTIxMDksNiArMjEyOSwxNSBAQAogCXU4IGJ5dGVfc3RyZWFtWzQyXTsKIH07CiAKK3N0cnVjdCBpeGdiZV9hdHJfaW5wdXRfbWFza3MgeworCXUzMiBzcmNfaXBfbWFzazsKKwl1MzIgZHN0X2lwX21hc2s7CisJdTE2IHNyY19wb3J0X21hc2s7CisJdTE2IGRzdF9wb3J0X21hc2s7CisJdTE2IHZsYW5faWRfbWFzazsKKwl1MTYgZGF0YV9tYXNrOworfTsKKwogZW51bSBpeGdiZV9lZXByb21fdHlwZSB7CiAJaXhnYmVfZWVwcm9tX3VuaW5pdGlhbGl6ZWQgPSAwLAogCWl4Z2JlX2VlcHJvbV9zcGksCkBAIC0yMzg1LDcgKzI0MTQsNyBAQAogCXMzMiAoKnNldF92bWRxKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTMyLCB1MzIpOwogCXMzMiAoKmNsZWFyX3ZtZHEpKHN0cnVjdCBpeGdiZV9odyAqLCB1MzIsIHUzMik7CiAJczMyICgqaW5pdF9yeF9hZGRycykoc3RydWN0IGl4Z2JlX2h3ICopOwotCXMzMiAoKnVwZGF0ZV91Y19hZGRyX2xpc3QpKHN0cnVjdCBpeGdiZV9odyAqLCBzdHJ1Y3QgbGlzdF9oZWFkICopOworCXMzMiAoKnVwZGF0ZV91Y19hZGRyX2xpc3QpKHN0cnVjdCBpeGdiZV9odyAqLCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKIAlzMzIgKCp1cGRhdGVfbWNfYWRkcl9saXN0KShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTggKiwgdTMyLAogCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGl4Z2JlX21jX2FkZHJfaXRyKTsKIAlzMzIgKCplbmFibGVfbWMpKHN0cnVjdCBpeGdiZV9odyAqKTsKQEAgLTI0NjMsNiArMjQ5MiwzNyBAQAogCWJvb2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlzcGVlZF9maWJlcjsKIH07CiAKKyNpbmNsdWRlICJpeGdiZV9tYnguaCIKKworc3RydWN0IGl4Z2JlX21ieF9vcGVyYXRpb25zIHsKKwlzMzIgKCppbml0X3BhcmFtcykoc3RydWN0IGl4Z2JlX2h3ICpodyk7CisJczMyICgqcmVhZCkoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiAqLCB1MTYsICB1MTYpOworCXMzMiAoKndyaXRlKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTMyICosIHUxNiwgdTE2KTsKKwlzMzIgKCpyZWFkX3Bvc3RlZCkoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiAqLCB1MTYsICB1MTYpOworCXMzMiAoKndyaXRlX3Bvc3RlZCkoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiAqLCB1MTYsIHUxNik7CisJczMyICgqY2hlY2tfZm9yX21zZykoc3RydWN0IGl4Z2JlX2h3ICosIHUxNik7CisJczMyICgqY2hlY2tfZm9yX2Fjaykoc3RydWN0IGl4Z2JlX2h3ICosIHUxNik7CisJczMyICgqY2hlY2tfZm9yX3JzdCkoc3RydWN0IGl4Z2JlX2h3ICosIHUxNik7Cit9OworCitzdHJ1Y3QgaXhnYmVfbWJ4X3N0YXRzIHsKKwl1MzIgbXNnc190eDsKKwl1MzIgbXNnc19yeDsKKworCXUzMiBhY2tzOworCXUzMiByZXFzOworCXUzMiByc3RzOworfTsKKworc3RydWN0IGl4Z2JlX21ieF9pbmZvIHsKKwlzdHJ1Y3QgaXhnYmVfbWJ4X29wZXJhdGlvbnMgb3BzOworCXN0cnVjdCBpeGdiZV9tYnhfc3RhdHMgc3RhdHM7CisJdTMyIHRpbWVvdXQ7CisJdTMyIHVzZWNfZGVsYXk7CisJdTMyIHYycF9tYWlsYm94OworCXUxNiBzaXplOworfTsKKwogc3RydWN0IGl4Z2JlX2h3IHsKIAl1OCBfX2lvbWVtCQkJKmh3X2FkZHI7CiAJdm9pZAkJCQkqYmFjazsKQEAgLTI0NzIsNiArMjUzMiw3IEBACiAJc3RydWN0IGl4Z2JlX3BoeV9pbmZvCQlwaHk7CiAJc3RydWN0IGl4Z2JlX2VlcHJvbV9pbmZvCWVlcHJvbTsKIAlzdHJ1Y3QgaXhnYmVfYnVzX2luZm8JCWJ1czsKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8JCW1ieDsKIAl1MTYJCQkJZGV2aWNlX2lkOwogCXUxNgkJCQl2ZW5kb3JfaWQ7CiAJdTE2CQkJCXN1YnN5c3RlbV9kZXZpY2VfaWQ7CkBAIC0yNDg2LDYgKzI1NDcsNyBAQAogCXN0cnVjdCBpeGdiZV9tYWNfb3BlcmF0aW9ucwkqbWFjX29wczsKIAlzdHJ1Y3QgaXhnYmVfZWVwcm9tX29wZXJhdGlvbnMJKmVlcHJvbV9vcHM7CiAJc3RydWN0IGl4Z2JlX3BoeV9vcGVyYXRpb25zCSpwaHlfb3BzOworCXN0cnVjdCBpeGdiZV9tYnhfb3BlcmF0aW9ucwkqbWJ4X29wczsKIH07CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQ0ZTBkMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvTWFrZWZpbGUKQEAgLTAsMCArMSwzOCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgSW50ZWwgODI1OTkgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIKKyMgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorIyB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisjIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisjIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorIyB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyMKKyMgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyMgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKyMKKyMgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyMgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisjIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBJbnRlbChSKSA4MjU5OSBWRiBldGhlcm5ldCBkcml2ZXIKKyMKKworb2JqLSQoQ09ORklHX0lYR0JFVkYpICs9IGl4Z2JldmYubworCitpeGdiZXZmLW9ianMgOj0gdmYubyBcCisgICAgICAgICAgICAgICAgbWJ4Lm8gXAorICAgICAgICAgICAgICAgIGV0aHRvb2wubyBcCisgICAgICAgICAgICAgICAgaXhnYmV2Zl9tYWluLm8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9kZWZpbmVzLmggYi9kcml2ZXJzL25ldC9peGdiZXZmL2RlZmluZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDRmZGIwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9kZWZpbmVzLmgKQEAgLTAsMCArMSwyOTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgODI1OTkgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0lYR0JFVkZfREVGSU5FU19IXworI2RlZmluZSBfSVhHQkVWRl9ERUZJTkVTX0hfCisKKy8qIERldmljZSBJRHMgKi8KKyNkZWZpbmUgSVhHQkVfREVWX0lEXzgyNTk5X1ZGICAgICAgICAgICAweDEwRUQKKworI2RlZmluZSBJWEdCRV9WRl9JUlFfQ0xFQVJfTUFTSyAgICAgICAgIDcKKyNkZWZpbmUgSVhHQkVfVkZfTUFYX1RYX1FVRVVFUyAgICAgICAgICAxCisjZGVmaW5lIElYR0JFX1ZGX01BWF9SWF9RVUVVRVMgICAgICAgICAgMQorI2RlZmluZSBJWEdCRV9FVEhfTEVOR1RIX09GX0FERFJFU1MgICAgIDYKKworLyogTGluayBzcGVlZCAqLwordHlwZWRlZiB1MzIgaXhnYmVfbGlua19zcGVlZDsKKyNkZWZpbmUgSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTCAgICAgICAweDAwMjAKKyNkZWZpbmUgSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwgICAgICAweDAwODAKKworI2RlZmluZSBJWEdCRV9DVFJMX1JTVCAgICAgICAgICAweDA0MDAwMDAwIC8qIFJlc2V0IChTVykgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQ1RMX0VOQUJMRSAgICAgMHgwMjAwMDAwMCAvKiBFbmFibGUgc3BlY2lmaWMgUnggUXVldWUgKi8KKyNkZWZpbmUgSVhHQkVfVFhEQ1RMX0VOQUJMRSAgICAgMHgwMjAwMDAwMCAvKiBFbmFibGUgc3BlY2lmaWMgVHggUXVldWUgKi8KKyNkZWZpbmUgSVhHQkVfTElOS1NfVVAgICAgICAgICAgMHg0MDAwMDAwMAorI2RlZmluZSBJWEdCRV9MSU5LU19TUEVFRCAgICAgICAweDIwMDAwMDAwCisKKy8qIE51bWJlciBvZiBUcmFuc21pdCBhbmQgUmVjZWl2ZSBEZXNjcmlwdG9ycyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCAqLworI2RlZmluZSBJWEdCRV9SRVFfVFhfREVTQ1JJUFRPUl9NVUxUSVBMRSAgOAorI2RlZmluZSBJWEdCRV9SRVFfUlhfREVTQ1JJUFRPUl9NVUxUSVBMRSAgOAorI2RlZmluZSBJWEdCRV9SRVFfVFhfQlVGRkVSX0dSQU5VTEFSSVRZICAgMTAyNAorCisvKiBJbnRlcnJ1cHQgVmVjdG9yIEFsbG9jYXRpb24gUmVnaXN0ZXJzICovCisjZGVmaW5lIElYR0JFX0lWQVJfQUxMT0NfVkFMICAgIDB4ODAgLyogSW50ZXJydXB0IEFsbG9jYXRpb24gdmFsaWQgKi8KKworI2RlZmluZSBJWEdCRV9WRl9JTklUX1RJTUVPVVQgICAyMDAgLyogTnVtYmVyIG9mIHJldHJpZXMgdG8gY2xlYXIgUlNUSSAqLworCisvKiBSZWNlaXZlIENvbmZpZyBtYXNrcyAqLworI2RlZmluZSBJWEdCRV9SWENUUkxfUlhFTiAgICAgICAweDAwMDAwMDAxICAvKiBFbmFibGUgUmVjZWl2ZXIgKi8KKyNkZWZpbmUgSVhHQkVfUlhDVFJMX0RNQllQUyAgICAgMHgwMDAwMDAwMiAgLyogRGVzY3JpcHRvciBNb25pdG9yIEJ5cGFzcyAqLworI2RlZmluZSBJWEdCRV9SWERDVExfRU5BQkxFICAgICAweDAyMDAwMDAwICAvKiBFbmFibGUgc3BlY2lmaWMgUnggUXVldWUgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQ1RMX1ZNRSAgICAgICAgMHg0MDAwMDAwMCAgLyogVkxBTiBtb2RlIGVuYWJsZSAqLworCisvKiBEQ0EgQ29udHJvbCAqLworI2RlZmluZSBJWEdCRV9EQ0FfVFhDVFJMX1RYX1dCX1JPX0VOICgxIDw8IDExKSAvKiBUeCBEZXNjIHdyaXRlYmFjayBSTyBiaXQgKi8KKworLyogUFNSVFlQRSBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVhHQkVfUFNSVFlQRV9UQ1BIRFIgICAgMHgwMDAwMDAxMAorI2RlZmluZSBJWEdCRV9QU1JUWVBFX1VEUEhEUiAgICAweDAwMDAwMDIwCisjZGVmaW5lIElYR0JFX1BTUlRZUEVfSVBWNEhEUiAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgSVhHQkVfUFNSVFlQRV9JUFY2SERSICAgMHgwMDAwMDIwMAorI2RlZmluZSBJWEdCRV9QU1JUWVBFX0wySERSICAgICAweDAwMDAxMDAwCisKKy8qIFNSUkNUTCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX0JTSVpFUEtUX1NISUZUICAgICAxMCAgICAgLyogc28gbWFueSBLQnMgKi8KKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX1JETVRTX1NISUZUICAgICAgICAyMgorI2RlZmluZSBJWEdCRV9TUlJDVExfUkRNVFNfTUFTSyAgICAgICAgIDB4MDFDMDAwMDAKKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX0RST1BfRU4gICAgICAgICAgICAweDEwMDAwMDAwCisjZGVmaW5lIElYR0JFX1NSUkNUTF9CU0laRVBLVF9NQVNLICAgICAgMHgwMDAwMDA3RgorI2RlZmluZSBJWEdCRV9TUlJDVExfQlNJWkVIRFJfTUFTSyAgICAgIDB4MDAwMDNGMDAKKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX0RFU0NUWVBFX0xFR0FDWSAgICAweDAwMDAwMDAwCisjZGVmaW5lIElYR0JFX1NSUkNUTF9ERVNDVFlQRV9BRFZfT05FQlVGIDB4MDIwMDAwMDAKKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX0RFU0NUWVBFX0hEUl9TUExJVCAgMHgwNDAwMDAwMAorI2RlZmluZSBJWEdCRV9TUlJDVExfREVTQ1RZUEVfSERSX1JFUExJQ0FUSU9OX0xBUkdFX1BLVCAweDA4MDAwMDAwCisjZGVmaW5lIElYR0JFX1NSUkNUTF9ERVNDVFlQRV9IRFJfU1BMSVRfQUxXQVlTIDB4MEEwMDAwMDAKKyNkZWZpbmUgSVhHQkVfU1JSQ1RMX0RFU0NUWVBFX01BU0sgICAgICAweDBFMDAwMDAwCisKKy8qIFJlY2VpdmUgRGVzY3JpcHRvciBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfREQgICAgICAgICAweDAxICAgIC8qIERlc2NyaXB0b3IgRG9uZSAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9FT1AgICAgICAgIDB4MDIgICAgLyogRW5kIG9mIFBhY2tldCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9GTE0gICAgICAgIDB4MDQgICAgLyogRkRpciBNYXRjaCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9WUCAgICAgICAgIDB4MDggICAgLyogSUVFRSBWTEFOIFBhY2tldCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfTkVYVFBfTUFTSyAgIDB4MDAwRkZGRjAgLyogTmV4dCBEZXNjcmlwdG9yIEluZGV4ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9ORVhUUF9TSElGVCAgMHgwMDAwMDAwNAorI2RlZmluZSBJWEdCRV9SWERfU1RBVF9VRFBDUyAgICAgIDB4MTAgICAgLyogVURQIHhzdW0gY2FsY3VsYXRlZCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9MNENTICAgICAgIDB4MjAgICAgLyogTDQgeHN1bSBjYWxjdWxhdGVkICovCisjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0lQQ1MgICAgICAgMHg0MCAgICAvKiBJUCB4c3VtIGNhbGN1bGF0ZWQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfUElGICAgICAgICAweDgwICAgIC8qIHBhc3NlZCBpbi1leGFjdCBmaWx0ZXIgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfQ1JDViAgICAgICAweDEwMCAgIC8qIFNwZWN1bGF0aXZlIENSQyBWYWxpZCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9WRVhUICAgICAgIDB4MjAwICAgLyogMXN0IFZMQU4gZm91bmQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1NUQVRfVURQViAgICAgICAweDQwMCAgIC8qIFZhbGlkIFVEUCBjaGVja3N1bSAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9EWU5JTlQgICAgIDB4ODAwICAgLyogUGt0IGNhdXNlZCBJTlQgdmlhIERZTklOVCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9UUyAgICAgICAgIDB4MTAwMDAgLyogVGltZSBTdGFtcCAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9TRUNQICAgICAgIDB4MjAwMDAgLyogU2VjdXJpdHkgUHJvY2Vzc2luZyAqLworI2RlZmluZSBJWEdCRV9SWERfU1RBVF9MQiAgICAgICAgIDB4NDAwMDAgLyogTG9vcGJhY2sgU3RhdHVzICovCisjZGVmaW5lIElYR0JFX1JYRF9TVEFUX0FDSyAgICAgICAgMHg4MDAwICAvKiBBQ0sgUGFja2V0IGluZGljYXRpb24gKi8KKyNkZWZpbmUgSVhHQkVfUlhEX0VSUl9DRSAgICAgICAgICAweDAxICAgIC8qIENSQyBFcnJvciAqLworI2RlZmluZSBJWEdCRV9SWERfRVJSX0xFICAgICAgICAgIDB4MDIgICAgLyogTGVuZ3RoIEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYRF9FUlJfUEUgICAgICAgICAgMHgwOCAgICAvKiBQYWNrZXQgRXJyb3IgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX0VSUl9PU0UgICAgICAgICAweDEwICAgIC8qIE92ZXJzaXplIEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYRF9FUlJfVVNFICAgICAgICAgMHgyMCAgICAvKiBVbmRlcnNpemUgRXJyb3IgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX0VSUl9UQ1BFICAgICAgICAweDQwICAgIC8qIFRDUC9VRFAgQ2hlY2tzdW0gRXJyb3IgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX0VSUl9JUEUgICAgICAgICAweDgwICAgIC8qIElQIENoZWNrc3VtIEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfTUFTSyAgICAgMHhGRkYwMDAwMCAvKiBSREVTQy5FUlJPUlMgbWFzayAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfRVJSX1NISUZUICAgIDIwICAgICAgICAgLyogUkRFU0MuRVJST1JTIHNoaWZ0ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfSEJPICAgICAgMHgwMDgwMDAwMCAvKkhlYWRlciBCdWZmZXIgT3ZlcmZsb3cgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9DRSAgICAgICAweDAxMDAwMDAwIC8qIENSQyBFcnJvciAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfRVJSX0xFICAgICAgIDB4MDIwMDAwMDAgLyogTGVuZ3RoIEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfUEUgICAgICAgMHgwODAwMDAwMCAvKiBQYWNrZXQgRXJyb3IgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9PU0UgICAgICAweDEwMDAwMDAwIC8qIE92ZXJzaXplIEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfVVNFICAgICAgMHgyMDAwMDAwMCAvKiBVbmRlcnNpemUgRXJyb3IgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9UQ1BFICAgICAweDQwMDAwMDAwIC8qIFRDUC9VRFAgQ2hlY2tzdW0gRXJyb3IgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX0VSUl9JUEUgICAgICAweDgwMDAwMDAwIC8qIElQIENoZWNrc3VtIEVycm9yICovCisjZGVmaW5lIElYR0JFX1JYRF9WTEFOX0lEX01BU0sgICAgMHgwRkZGICAvKiBWTEFOIElEIGlzIGluIGxvd2VyIDEyIGJpdHMgKi8KKyNkZWZpbmUgSVhHQkVfUlhEX1BSSV9NQVNLICAgICAgICAweEUwMDAgIC8qIFByaW9yaXR5IGlzIGluIHVwcGVyIDMgYml0cyAqLworI2RlZmluZSBJWEdCRV9SWERfUFJJX1NISUZUICAgICAgIDEzCisjZGVmaW5lIElYR0JFX1JYRF9DRklfTUFTSyAgICAgICAgMHgxMDAwICAvKiBDRkkgaXMgYml0IDEyICovCisjZGVmaW5lIElYR0JFX1JYRF9DRklfU0hJRlQgICAgICAgMTIKKworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9ERCAgICAgICAgICAgIElYR0JFX1JYRF9TVEFUX0REICAvKiBEb25lICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX0VPUCAgICAgICAgICAgSVhHQkVfUlhEX1NUQVRfRU9QIC8qIEVuZCBvZiBQYWNrZXQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfRkxNICAgICAgICAgICBJWEdCRV9SWERfU1RBVF9GTE0gLyogRkRpciBNYXRjaCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9WUCAgICAgICAgICAgIElYR0JFX1JYRF9TVEFUX1ZQICAvKiBJRUVFIFZMQU4gUGt0ICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX01BU0sgICAgICAgICAgMHgwMDBGRkZGRiAvKiBTdGF0L05FWFRQOiBiaXQgMC0xOSAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9GQ0VPRlMgICAgICAgIDB4MDAwMDAwNDAgLyogRkNvRSBFT0YvU09GIFN0YXQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfRkNTVEFUICAgICAgICAweDAwMDAwMDMwIC8qIEZDb0UgUGt0IFN0YXQgKi8KKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NUQVRfRkNTVEFUX05PTVRDSCAweDAwMDAwMDAwIC8qIDAwOiBObyBDdHh0IE1hdGNoICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX0ZDU1RBVF9OT0REUCAgMHgwMDAwMDAxMCAvKiAwMTogQ3R4dCB3L28gRERQICovCisjZGVmaW5lIElYR0JFX1JYREFEVl9TVEFUX0ZDU1RBVF9GQ1BSU1AgMHgwMDAwMDAyMCAvKiAxMDogUmVjdi4gRkNQX1JTUCAqLworI2RlZmluZSBJWEdCRV9SWERBRFZfU1RBVF9GQ1NUQVRfRERQICAgIDB4MDAwMDAwMzAgLyogMTE6IEN0eHQgdy8gRERQICovCisKKyNkZWZpbmUgSVhHQkVfUlhEQURWX1JTU1RZUEVfTUFTSyAgICAgICAweDAwMDAwMDBGCisjZGVmaW5lIElYR0JFX1JYREFEVl9QS1RUWVBFX01BU0sgICAgICAgMHgwMDAwRkZGMAorI2RlZmluZSBJWEdCRV9SWERBRFZfUEtUVFlQRV9NQVNLX0VYICAgIDB4MDAwMUZGRjAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX0hEUkJVRkxFTl9NQVNLICAgICAweDAwMDA3RkUwCisjZGVmaW5lIElYR0JFX1JYREFEVl9SU0NDTlRfTUFTSyAgICAgICAgMHgwMDFFMDAwMAorI2RlZmluZSBJWEdCRV9SWERBRFZfUlNDQ05UX1NISUZUICAgICAgIDE3CisjZGVmaW5lIElYR0JFX1JYREFEVl9IRFJCVUZMRU5fU0hJRlQgICAgNQorI2RlZmluZSBJWEdCRV9SWERBRFZfU1BMSVRIRUFERVJfRU4gICAgIDB4MDAwMDEwMDAKKyNkZWZpbmUgSVhHQkVfUlhEQURWX1NQSCAgICAgICAgICAgICAgICAweDgwMDAKKworI2RlZmluZSBJWEdCRV9SWERfRVJSX0ZSQU1FX0VSUl9NQVNLICggXAorCQkJCSAgICAgIElYR0JFX1JYRF9FUlJfQ0UgfCAgXAorCQkJCSAgICAgIElYR0JFX1JYRF9FUlJfTEUgfCAgXAorCQkJCSAgICAgIElYR0JFX1JYRF9FUlJfUEUgfCAgXAorCQkJCSAgICAgIElYR0JFX1JYRF9FUlJfT1NFIHwgXAorCQkJCSAgICAgIElYR0JFX1JYRF9FUlJfVVNFKQorCisjZGVmaW5lIElYR0JFX1JYREFEVl9FUlJfRlJBTUVfRVJSX01BU0sgKCBcCisJCQkJCSBJWEdCRV9SWERBRFZfRVJSX0NFIHwgIFwKKwkJCQkJIElYR0JFX1JYREFEVl9FUlJfTEUgfCAgXAorCQkJCQkgSVhHQkVfUlhEQURWX0VSUl9QRSB8ICBcCisJCQkJCSBJWEdCRV9SWERBRFZfRVJSX09TRSB8IFwKKwkJCQkJIElYR0JFX1JYREFEVl9FUlJfVVNFKQorCisjZGVmaW5lIElYR0JFX1RYRF9QT1BUU19JWFNNIDB4MDEgICAgICAgLyogSW5zZXJ0IElQIGNoZWNrc3VtICovCisjZGVmaW5lIElYR0JFX1RYRF9QT1BUU19UWFNNIDB4MDIgICAgICAgLyogSW5zZXJ0IFRDUC9VRFAgY2hlY2tzdW0gKi8KKyNkZWZpbmUgSVhHQkVfVFhEX0NNRF9FT1AgICAgMHgwMTAwMDAwMCAvKiBFbmQgb2YgUGFja2V0ICovCisjZGVmaW5lIElYR0JFX1RYRF9DTURfSUZDUyAgIDB4MDIwMDAwMDAgLyogSW5zZXJ0IEZDUyAoRXRoZXJuZXQgQ1JDKSAqLworI2RlZmluZSBJWEdCRV9UWERfQ01EX0lDICAgICAweDA0MDAwMDAwIC8qIEluc2VydCBDaGVja3N1bSAqLworI2RlZmluZSBJWEdCRV9UWERfQ01EX1JTICAgICAweDA4MDAwMDAwIC8qIFJlcG9ydCBTdGF0dXMgKi8KKyNkZWZpbmUgSVhHQkVfVFhEX0NNRF9ERVhUICAgMHgyMDAwMDAwMCAvKiBEZXNjcmlwdG9yIGV4dGVuc2lvbiAoMCA9IGxlZ2FjeSkgKi8KKyNkZWZpbmUgSVhHQkVfVFhEX0NNRF9WTEUgICAgMHg0MDAwMDAwMCAvKiBBZGQgVkxBTiB0YWcgKi8KKyNkZWZpbmUgSVhHQkVfVFhEX1NUQVRfREQgICAgMHgwMDAwMDAwMSAvKiBEZXNjcmlwdG9yIERvbmUgKi8KKworLyogVHJhbnNtaXQgRGVzY3JpcHRvciAtIEFkdmFuY2VkICovCit1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyB7CisJc3RydWN0IHsKKwkJX19sZTY0IGJ1ZmZlcl9hZGRyOyAgICAgIC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvcidzIGRhdGEgYnVmICovCisJCV9fbGUzMiBjbWRfdHlwZV9sZW47CisJCV9fbGUzMiBvbGluZm9fc3RhdHVzOworCX0gcmVhZDsKKwlzdHJ1Y3QgeworCQlfX2xlNjQgcnN2ZDsgICAgICAgLyogUmVzZXJ2ZWQgKi8KKwkJX19sZTMyIG54dHNlcV9zZWVkOworCQlfX2xlMzIgc3RhdHVzOworCX0gd2I7Cit9OworCisvKiBSZWNlaXZlIERlc2NyaXB0b3IgLSBBZHZhbmNlZCAqLwordW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgeworCXN0cnVjdCB7CisJCV9fbGU2NCBwa3RfYWRkcjsgLyogUGFja2V0IGJ1ZmZlciBhZGRyZXNzICovCisJCV9fbGU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovCisJfSByZWFkOworCXN0cnVjdCB7CisJCXN0cnVjdCB7CisJCQl1bmlvbiB7CisJCQkJX19sZTMyIGRhdGE7CisJCQkJc3RydWN0IHsKKwkJCQkJX19sZTE2IHBrdF9pbmZvOyAvKiBSU1MsIFBrdCB0eXBlICovCisJCQkJCV9fbGUxNiBoZHJfaW5mbzsgLyogU3BsaXRoZHIsIGhkcmxlbiAqLworCQkJCX0gaHNfcnNzOworCQkJfSBsb19kd29yZDsKKwkJCXVuaW9uIHsKKwkJCQlfX2xlMzIgcnNzOyAvKiBSU1MgSGFzaCAqLworCQkJCXN0cnVjdCB7CisJCQkJCV9fbGUxNiBpcF9pZDsgLyogSVAgaWQgKi8KKwkJCQkJX19sZTE2IGNzdW07IC8qIFBhY2tldCBDaGVja3N1bSAqLworCQkJCX0gY3N1bV9pcDsKKwkJCX0gaGlfZHdvcmQ7CisJCX0gbG93ZXI7CisJCXN0cnVjdCB7CisJCQlfX2xlMzIgc3RhdHVzX2Vycm9yOyAvKiBleHQgc3RhdHVzL2Vycm9yICovCisJCQlfX2xlMTYgbGVuZ3RoOyAvKiBQYWNrZXQgbGVuZ3RoICovCisJCQlfX2xlMTYgdmxhbjsgLyogVkxBTiB0YWcgKi8KKwkJfSB1cHBlcjsKKwl9IHdiOyAgLyogd3JpdGViYWNrICovCit9OworCisvKiBDb250ZXh0IGRlc2NyaXB0b3JzICovCitzdHJ1Y3QgaXhnYmVfYWR2X3R4X2NvbnRleHRfZGVzYyB7CisJX19sZTMyIHZsYW5fbWFjaXBfbGVuczsKKwlfX2xlMzIgc2VxbnVtX3NlZWQ7CisJX19sZTMyIHR5cGVfdHVjbWRfbWxobDsKKwlfX2xlMzIgbXNzX2w0bGVuX2lkeDsKK307CisKKy8qIEFkdiBUcmFuc21pdCBEZXNjcmlwdG9yIENvbmZpZyBNYXNrcyAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfRFRZUF9NQVNLICAweDAwRjAwMDAwIC8qIERUWVAgbWFzayAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfRFRZUF9DVFhUICAweDAwMjAwMDAwIC8qIEFkdmFuY2VkIENvbnRleHQgRGVzYyAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfRFRZUF9EQVRBICAweDAwMzAwMDAwIC8qIEFkdmFuY2VkIERhdGEgRGVzY3JpcHRvciAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfRENNRF9FT1AgICBJWEdCRV9UWERfQ01EX0VPUCAgLyogRW5kIG9mIFBhY2tldCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfRENNRF9JRkNTICBJWEdCRV9UWERfQ01EX0lGQ1MgLyogSW5zZXJ0IEZDUyAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfRENNRF9SUyAgICBJWEdCRV9UWERfQ01EX1JTICAgLyogUmVwb3J0IFN0YXR1cyAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfRENNRF9ERVhUICBJWEdCRV9UWERfQ01EX0RFWFQgLyogRGVzYyBleHQgKDE9QWR2KSAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfRENNRF9WTEUgICBJWEdCRV9UWERfQ01EX1ZMRSAgLyogVkxBTiBwa3QgZW5hYmxlICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9EQ01EX1RTRSAgIDB4ODAwMDAwMDAgLyogVENQIFNlZyBlbmFibGUgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX1NUQVRfREQgICAgSVhHQkVfVFhEX1NUQVRfREQgIC8qIERlc2NyaXB0b3IgRG9uZSAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfVFVDTURfSVBWNCAgICAgIDB4MDAwMDA0MDAgIC8qIElQIFBhY2tldCBUeXBlOiAxPUlQdjQgKi8KKyNkZWZpbmUgSVhHQkVfQURWVFhEX1RVQ01EX0lQVjYgICAgICAweDAwMDAwMDAwICAvKiBJUCBQYWNrZXQgVHlwZTogMD1JUHY2ICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9UVUNNRF9MNFRfVURQICAgMHgwMDAwMDAwMCAgLyogTDQgUGFja2V0IFRZUEUgb2YgVURQICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9UVUNNRF9MNFRfVENQICAgMHgwMDAwMDgwMCAgLyogTDQgUGFja2V0IFRZUEUgb2YgVENQICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9UVUNNRF9MNFRfU0NUUCAgMHgwMDAwMTAwMCAgLyogTDQgUGFja2V0IFRZUEUgb2YgU0NUUCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfSURYX1NISUZUICA0IC8qIEFkdiBkZXNjIEluZGV4IHNoaWZ0ICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9QT1BUU19TSElGVCAgICAgIDggIC8qIEFkdiBkZXNjIFBPUFRTIHNoaWZ0ICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9QT1BUU19JWFNNIChJWEdCRV9UWERfUE9QVFNfSVhTTSA8PCBcCisJCQkJIElYR0JFX0FEVlRYRF9QT1BUU19TSElGVCkKKyNkZWZpbmUgSVhHQkVfQURWVFhEX1BPUFRTX1RYU00gKElYR0JFX1RYRF9QT1BUU19UWFNNIDw8IFwKKwkJCQkgSVhHQkVfQURWVFhEX1BPUFRTX1NISUZUKQorI2RlZmluZSBJWEdCRV9BRFZUWERfUEFZTEVOX1NISUZUICAgIDE0IC8qIEFkdiBkZXNjIFBBWUxFTiBzaGlmdCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfTUFDTEVOX1NISUZUICAgIDkgIC8qIEFkdiBjdHh0IGRlc2MgbWFjIGxlbiBzaGlmdCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfVkxBTl9TSElGVCAgICAgIDE2ICAvKiBBZHYgY3R4dCB2bGFuIHRhZyBzaGlmdCAqLworI2RlZmluZSBJWEdCRV9BRFZUWERfTDRMRU5fU0hJRlQgICAgIDggIC8qIEFkdiBjdHh0IEw0TEVOIHNoaWZ0ICovCisjZGVmaW5lIElYR0JFX0FEVlRYRF9NU1NfU0hJRlQgICAgICAgMTYgIC8qIEFkdiBjdHh0IE1TUyBzaGlmdCAqLworCisvKiBJbnRlcnJ1cHQgcmVnaXN0ZXIgYml0bWFza3MgKi8KKworLyogRXh0ZW5kZWQgSW50ZXJydXB0IENhdXNlIFJlYWQgKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9SVFhfUVVFVUUgICAgMHgwMDAwRkZGRiAvKiBSVHggUXVldWUgSW50ZXJydXB0ICovCisjZGVmaW5lIElYR0JFX0VJQ1JfTUFJTEJPWCAgICAgIDB4MDAwODAwMDAgLyogVkYgdG8gUEYgTWFpbGJveCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgSVhHQkVfRUlDUl9PVEhFUiAgICAgICAgMHg4MDAwMDAwMCAvKiBJbnRlcnJ1cHQgQ2F1c2UgQWN0aXZlICovCisKKy8qIEV4dGVuZGVkIEludGVycnVwdCBDYXVzZSBTZXQgKi8KKyNkZWZpbmUgSVhHQkVfRUlDU19SVFhfUVVFVUUgICAgSVhHQkVfRUlDUl9SVFhfUVVFVUUgLyogUlR4IFF1ZXVlIEludGVycnVwdCAqLworI2RlZmluZSBJWEdCRV9FSUNTX01BSUxCT1ggICAgICBJWEdCRV9FSUNSX01BSUxCT1ggICAvKiBWRiB0byBQRiBNYWlsYm94IEludCAqLworI2RlZmluZSBJWEdCRV9FSUNTX09USEVSICAgICAgICBJWEdCRV9FSUNSX09USEVSICAgICAvKiBJTlQgQ2F1c2UgQWN0aXZlICovCisKKy8qIEV4dGVuZGVkIEludGVycnVwdCBNYXNrIFNldCAqLworI2RlZmluZSBJWEdCRV9FSU1TX1JUWF9RVUVVRSAgICBJWEdCRV9FSUNSX1JUWF9RVUVVRSAvKiBSVHggUXVldWUgSW50ZXJydXB0ICovCisjZGVmaW5lIElYR0JFX0VJTVNfTUFJTEJPWCAgICAgIElYR0JFX0VJQ1JfTUFJTEJPWCAgIC8qIFZGIHRvIFBGIE1haWxib3ggSW50ICovCisjZGVmaW5lIElYR0JFX0VJTVNfT1RIRVIgICAgICAgIElYR0JFX0VJQ1JfT1RIRVIgICAgIC8qIElOVCBDYXVzZSBBY3RpdmUgKi8KKworLyogRXh0ZW5kZWQgSW50ZXJydXB0IE1hc2sgQ2xlYXIgKi8KKyNkZWZpbmUgSVhHQkVfRUlNQ19SVFhfUVVFVUUgICAgSVhHQkVfRUlDUl9SVFhfUVVFVUUgLyogUlR4IFF1ZXVlIEludGVycnVwdCAqLworI2RlZmluZSBJWEdCRV9FSU1DX01BSUxCT1ggICAgICBJWEdCRV9FSUNSX01BSUxCT1ggICAvKiBWRiB0byBQRiBNYWlsYm94IEludCAqLworI2RlZmluZSBJWEdCRV9FSU1DX09USEVSICAgICAgICBJWEdCRV9FSUNSX09USEVSICAgICAvKiBJTlQgQ2F1c2UgQWN0aXZlICovCisKKyNkZWZpbmUgSVhHQkVfRUlNU19FTkFCTEVfTUFTSyAoIFwKKwkJCQlJWEdCRV9FSU1TX1JUWF9RVUVVRSAgICAgICB8IFwKKwkJCQlJWEdCRV9FSU1TX01BSUxCT1ggICAgICAgICB8IFwKKwkJCQlJWEdCRV9FSU1TX09USEVSKQorCisjZGVmaW5lIElYR0JFX0VJVFJfQ05UX1dESVMgICAgIDB4ODAwMDAwMDAKKworLyogRXJyb3IgQ29kZXMgKi8KKyNkZWZpbmUgSVhHQkVfRVJSX0lOVkFMSURfTUFDX0FERFIgICAgICAgICAgICAgIC0xCisjZGVmaW5lIElYR0JFX0VSUl9SRVNFVF9GQUlMRUQgICAgICAgICAgICAgICAgICAtMgorCisjZW5kaWYgLyogX0lYR0JFVkZfREVGSU5FU19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9peGdiZXZmL2V0aHRvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTliZTBjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9ldGh0b29sLmMKQEAgLTAsMCArMSw3MTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgODI1OTkgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIGV0aHRvb2wgc3VwcG9ydCBmb3IgaXhnYmV2ZiAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJpeGdiZXZmLmgiCisKKyNkZWZpbmUgSVhHQkVfQUxMX1JBUl9FTlRSSUVTIDE2CisKKyNpZmRlZiBFVEhUT09MX0dTVEFUUworc3RydWN0IGl4Z2JlX3N0YXRzIHsKKwljaGFyIHN0YXRfc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07CisJaW50IHNpemVvZl9zdGF0OworCWludCBzdGF0X29mZnNldDsKKwlpbnQgYmFzZV9zdGF0X29mZnNldDsKK307CisKKyNkZWZpbmUgSVhHQkVWRl9TVEFUKG0sIGIpICBzaXplb2YoKChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICopMCktPm0pLCBcCisJCQkgICAgb2Zmc2V0b2Yoc3RydWN0IGl4Z2JldmZfYWRhcHRlciwgbSksICAgICAgXAorCQkJICAgIG9mZnNldG9mKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIsIGIpCitzdGF0aWMgc3RydWN0IGl4Z2JlX3N0YXRzIGl4Z2JlX2dzdHJpbmdzX3N0YXRzW10gPSB7CisJeyJyeF9wYWNrZXRzIiwgSVhHQkVWRl9TVEFUKHN0YXRzLnZmZ3ByYywgc3RhdHMuYmFzZV92ZmdwcmMpfSwKKwl7InR4X3BhY2tldHMiLCBJWEdCRVZGX1NUQVQoc3RhdHMudmZncHRjLCBzdGF0cy5iYXNlX3ZmZ3B0Yyl9LAorCXsicnhfYnl0ZXMiLCBJWEdCRVZGX1NUQVQoc3RhdHMudmZnb3JjLCBzdGF0cy5iYXNlX3ZmZ29yYyl9LAorCXsidHhfYnl0ZXMiLCBJWEdCRVZGX1NUQVQoc3RhdHMudmZnb3RjLCBzdGF0cy5iYXNlX3ZmZ290Yyl9LAorCXsidHhfYnVzeSIsIElYR0JFVkZfU1RBVCh0eF9idXN5LCB6ZXJvX2Jhc2UpfSwKKwl7Im11bHRpY2FzdCIsIElYR0JFVkZfU1RBVChzdGF0cy52Zm1wcmMsIHN0YXRzLmJhc2VfdmZtcHJjKX0sCisJeyJyeF9jc3VtX29mZmxvYWRfZ29vZCIsIElYR0JFVkZfU1RBVChod19jc3VtX3J4X2dvb2QsIHplcm9fYmFzZSl9LAorCXsicnhfY3N1bV9vZmZsb2FkX2Vycm9ycyIsIElYR0JFVkZfU1RBVChod19jc3VtX3J4X2Vycm9yLCB6ZXJvX2Jhc2UpfSwKKwl7InR4X2NzdW1fb2ZmbG9hZF9jdHh0IiwgSVhHQkVWRl9TVEFUKGh3X2NzdW1fdHhfZ29vZCwgemVyb19iYXNlKX0sCisJeyJyeF9oZWFkZXJfc3BsaXQiLCBJWEdCRVZGX1NUQVQocnhfaGRyX3NwbGl0LCB6ZXJvX2Jhc2UpfSwKK307CisKKyNkZWZpbmUgSVhHQkVfUVVFVUVfU1RBVFNfTEVOIDAKKyNkZWZpbmUgSVhHQkVfR0xPQkFMX1NUQVRTX0xFTglBUlJBWV9TSVpFKGl4Z2JlX2dzdHJpbmdzX3N0YXRzKQorCisjZGVmaW5lIElYR0JFVkZfU1RBVFNfTEVOIChJWEdCRV9HTE9CQUxfU1RBVFNfTEVOICsgSVhHQkVfUVVFVUVfU1RBVFNfTEVOKQorI2VuZGlmIC8qIEVUSFRPT0xfR1NUQVRTICovCisjaWZkZWYgRVRIVE9PTF9URVNUCitzdGF0aWMgY29uc3QgY2hhciBpeGdiZV9nc3RyaW5nc190ZXN0W11bRVRIX0dTVFJJTkdfTEVOXSA9IHsKKwkiUmVnaXN0ZXIgdGVzdCAgKG9mZmxpbmUpIiwKKwkiTGluayB0ZXN0ICAgKG9uL29mZmxpbmUpIgorfTsKKyNkZWZpbmUgSVhHQkVfVEVTVF9MRU4gKHNpemVvZihpeGdiZV9nc3RyaW5nc190ZXN0KSAvIEVUSF9HU1RSSU5HX0xFTikKKyNlbmRpZiAvKiBFVEhUT09MX1RFU1QgKi8KKworc3RhdGljIGludCBpeGdiZXZmX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCXN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBsaW5rX3NwZWVkID0gMDsKKwlib29sIGxpbmtfdXA7CisKKwllY21kLT5zdXBwb3J0ZWQgPSBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsOworCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CisJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0RVTU1ZMTsKKwllY21kLT5wb3J0ID0gLTE7CisKKwlody0+bWFjLm9wcy5jaGVja19saW5rKGh3LCAmbGlua19zcGVlZCwgJmxpbmtfdXAsIGZhbHNlKTsKKworCWlmIChsaW5rX3VwKSB7CisJCWVjbWQtPnNwZWVkID0gKGxpbmtfc3BlZWQgPT0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEwpID8KKwkJCSAgICAgICBTUEVFRF8xMDAwMCA6IFNQRUVEXzEwMDA7CisJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOworCX0gZWxzZSB7CisJCWVjbWQtPnNwZWVkID0gLTE7CisJCWVjbWQtPmR1cGxleCA9IC0xOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGl4Z2JldmZfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlyZXR1cm4gYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JYX0NTVU1fRU5BQkxFRDsKK30KKworc3RhdGljIGludCBpeGdiZXZmX3NldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWlmIChkYXRhKQorCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX1JYX0NTVU1fRU5BQkxFRDsKKwllbHNlCisJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX1JYX0NTVU1fRU5BQkxFRDsKKworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHsKKwkJaWYgKCFhZGFwdGVyLT5kZXZfY2xvc2VkKQorCQkJaXhnYmV2Zl9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOworCX0gZWxzZSB7CisJCWl4Z2JldmZfcmVzZXQoYWRhcHRlcik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXhnYmV2Zl9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQoreworCWlmIChkYXRhKSB7CisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OworCX0gZWxzZSB7CisJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOworCQluZXRkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX1RTTzsKKwkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9UU082OworCQluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGl4Z2JldmZfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJcmV0dXJuIGFkYXB0ZXItPm1zZ19lbmFibGU7Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfc2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWFkYXB0ZXItPm1zZ19lbmFibGUgPSBkYXRhOworfQorCisjZGVmaW5lIElYR0JFX0dFVF9TVEFUKF9BXywgX1JfKSAoX0FfLT5zdGF0cy5fUl8pCisKK3N0YXRpYyBjaGFyICppeGdiZXZmX3JlZ19uYW1lc1tdID0geworCSJJWEdCRV9WRkNUUkwiLAorCSJJWEdCRV9WRlNUQVRVUyIsCisJIklYR0JFX1ZGTElOS1MiLAorCSJJWEdCRV9WRlJYTUVNV1JBUCIsCisJIklYR0JFX1ZGUlRJTUVSIiwKKwkiSVhHQkVfVlRFSUNSIiwKKwkiSVhHQkVfVlRFSUNTIiwKKwkiSVhHQkVfVlRFSU1TIiwKKwkiSVhHQkVfVlRFSU1DIiwKKwkiSVhHQkVfVlRFSUFDIiwKKwkiSVhHQkVfVlRFSUFNIiwKKwkiSVhHQkVfVlRFSVRSIiwKKwkiSVhHQkVfVlRJVkFSIiwKKwkiSVhHQkVfVlRJVkFSX01JU0MiLAorCSJJWEdCRV9WRlJEQkFMMCIsCisJIklYR0JFX1ZGUkRCQUwxIiwKKwkiSVhHQkVfVkZSREJBSDAiLAorCSJJWEdCRV9WRlJEQkFIMSIsCisJIklYR0JFX1ZGUkRMRU4wIiwKKwkiSVhHQkVfVkZSRExFTjEiLAorCSJJWEdCRV9WRlJESDAiLAorCSJJWEdCRV9WRlJESDEiLAorCSJJWEdCRV9WRlJEVDAiLAorCSJJWEdCRV9WRlJEVDEiLAorCSJJWEdCRV9WRlJYRENUTDAiLAorCSJJWEdCRV9WRlJYRENUTDEiLAorCSJJWEdCRV9WRlNSUkNUTDAiLAorCSJJWEdCRV9WRlNSUkNUTDEiLAorCSJJWEdCRV9WRlBTUlRZUEUiLAorCSJJWEdCRV9WRlREQkFMMCIsCisJIklYR0JFX1ZGVERCQUwxIiwKKwkiSVhHQkVfVkZUREJBSDAiLAorCSJJWEdCRV9WRlREQkFIMSIsCisJIklYR0JFX1ZGVERMRU4wIiwKKwkiSVhHQkVfVkZURExFTjEiLAorCSJJWEdCRV9WRlRESDAiLAorCSJJWEdCRV9WRlRESDEiLAorCSJJWEdCRV9WRlREVDAiLAorCSJJWEdCRV9WRlREVDEiLAorCSJJWEdCRV9WRlRYRENUTDAiLAorCSJJWEdCRV9WRlRYRENUTDEiLAorCSJJWEdCRV9WRlREV0JBTDAiLAorCSJJWEdCRV9WRlREV0JBTDEiLAorCSJJWEdCRV9WRlREV0JBSDAiLAorCSJJWEdCRV9WRlREV0JBSDEiCit9OworCisKK3N0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlyZXR1cm4gKEFSUkFZX1NJWkUoaXhnYmV2Zl9yZWdfbmFtZXMpKSAqIHNpemVvZih1MzIpOworfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICAgIHN0cnVjdCBldGh0b29sX3JlZ3MgKnJlZ3MsCisJCQkgICAgIHZvaWQgKnApCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgKnJlZ3NfYnVmZiA9IHA7CisJdTMyIHJlZ3NfbGVuID0gaXhnYmV2Zl9nZXRfcmVnc19sZW4obmV0ZGV2KTsKKwl1OCBpOworCisJbWVtc2V0KHAsIDAsIHJlZ3NfbGVuKTsKKworCXJlZ3MtPnZlcnNpb24gPSAoMSA8PCAyNCkgfCBody0+cmV2aXNpb25faWQgPDwgMTYgfCBody0+ZGV2aWNlX2lkOworCisJLyogR2VuZXJhbCBSZWdpc3RlcnMgKi8KKwlyZWdzX2J1ZmZbMF0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZDVFJMKTsKKwlyZWdzX2J1ZmZbMV0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZTVEFUVVMpOworCXJlZ3NfYnVmZlsyXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkxJTktTKTsKKwlyZWdzX2J1ZmZbM10gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZSWE1FTVdSQVApOworCXJlZ3NfYnVmZls0XSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlJUSU1FUik7CisKKwkvKiBJbnRlcnJ1cHQgKi8KKwkvKiBkb24ndCByZWFkIEVJQ1IgYmVjYXVzZSBpdCBjYW4gY2xlYXIgaW50ZXJydXB0IGNhdXNlcywgaW5zdGVhZAorCSAqIHJlYWQgRUlDUyB3aGljaCBpcyBhIHNoYWRvdyBidXQgZG9lc24ndCBjbGVhciBFSUNSICovCisJcmVnc19idWZmWzVdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZURUlDUyk7CisJcmVnc19idWZmWzZdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZURUlDUyk7CisJcmVnc19idWZmWzddID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZURUlNUyk7CisJcmVnc19idWZmWzhdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZURUlNQyk7CisJcmVnc19idWZmWzldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZURUlBQyk7CisJcmVnc19idWZmWzEwXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVEVJQU0pOworCXJlZ3NfYnVmZlsxMV0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVlRFSVRSKDApKTsKKwlyZWdzX2J1ZmZbMTJdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZUSVZBUigwKSk7CisJcmVnc19idWZmWzEzXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVElWQVJfTUlTQyk7CisKKwkvKiBSZWNlaXZlIERNQSAqLworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlsxNCArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGUkRCQUwoaSkpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlsxNiArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGUkRCQUgoaSkpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlsxOCArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGUkRMRU4oaSkpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlsyMCArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGUkRIKGkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlyZWdzX2J1ZmZbMjIgKyBpXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlJEVChpKSk7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJcmVnc19idWZmWzI0ICsgaV0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZSWERDVEwoaSkpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlsyNiArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGU1JSQ1RMKGkpKTsKKworCS8qIFJlY2VpdmUgKi8KKwlyZWdzX2J1ZmZbMjhdID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGUFNSVFlQRSk7CisKKwkvKiBUcmFuc21pdCAqLworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlsyOSArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGVERCQUwoaSkpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlszMSArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGVERCQUgoaSkpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlszMyArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGVERMRU4oaSkpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZlszNSArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGVERIKGkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlyZWdzX2J1ZmZbMzcgKyBpXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlREVChpKSk7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKKwkJcmVnc19idWZmWzM5ICsgaV0gPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZUWERDVEwoaSkpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspCisJCXJlZ3NfYnVmZls0MSArIGldID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGVERXQkFMKGkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKQorCQlyZWdzX2J1ZmZbNDMgKyBpXSA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlREV0JBSChpKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpeGdiZXZmX3JlZ19uYW1lcyk7IGkrKykKKwkJaHdfZGJnKGh3LCAiJXNcdCU4Ljh4XG4iLCBpeGdiZXZmX3JlZ19uYW1lc1tpXSwgcmVnc19idWZmW2ldKTsKK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCXN0cnVjdCBldGh0b29sX2RydmluZm8gKmRydmluZm8pCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlzdHJsY3B5KGRydmluZm8tPmRyaXZlciwgaXhnYmV2Zl9kcml2ZXJfbmFtZSwgMzIpOworCXN0cmxjcHkoZHJ2aW5mby0+dmVyc2lvbiwgaXhnYmV2Zl9kcml2ZXJfdmVyc2lvbiwgMzIpOworCisJc3RybGNweShkcnZpbmZvLT5md192ZXJzaW9uLCAiTi9BIiwgNCk7CisJc3RybGNweShkcnZpbmZvLT5idXNfaW5mbywgcGNpX25hbWUoYWRhcHRlci0+cGRldiksIDMyKTsKK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmc7CisJc3RydWN0IGl4Z2JldmZfcmluZyAqcnhfcmluZyA9IGFkYXB0ZXItPnJ4X3Jpbmc7CisKKwlyaW5nLT5yeF9tYXhfcGVuZGluZyA9IElYR0JFVkZfTUFYX1JYRDsKKwlyaW5nLT50eF9tYXhfcGVuZGluZyA9IElYR0JFVkZfTUFYX1RYRDsKKwlyaW5nLT5yeF9taW5pX21heF9wZW5kaW5nID0gMDsKKwlyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IDA7CisJcmluZy0+cnhfcGVuZGluZyA9IHJ4X3JpbmctPmNvdW50OworCXJpbmctPnR4X3BlbmRpbmcgPSB0eF9yaW5nLT5jb3VudDsKKwlyaW5nLT5yeF9taW5pX3BlbmRpbmcgPSAwOworCXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgPSAwOworfQorCitzdGF0aWMgaW50IGl4Z2JldmZfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZyA9IE5VTEwsICpyeF9yaW5nID0gTlVMTDsKKwlpbnQgaSwgZXJyOworCXUzMiBuZXdfcnhfY291bnQsIG5ld190eF9jb3VudDsKKwlib29sIG5lZWRfdHhfdXBkYXRlID0gZmFsc2U7CisJYm9vbCBuZWVkX3J4X3VwZGF0ZSA9IGZhbHNlOworCisJaWYgKChyaW5nLT5yeF9taW5pX3BlbmRpbmcpIHx8IChyaW5nLT5yeF9qdW1ib19wZW5kaW5nKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwluZXdfcnhfY291bnQgPSBtYXgocmluZy0+cnhfcGVuZGluZywgKHUzMilJWEdCRVZGX01JTl9SWEQpOworCW5ld19yeF9jb3VudCA9IG1pbihuZXdfcnhfY291bnQsICh1MzIpSVhHQkVWRl9NQVhfUlhEKTsKKwluZXdfcnhfY291bnQgPSBBTElHTihuZXdfcnhfY291bnQsIElYR0JFX1JFUV9SWF9ERVNDUklQVE9SX01VTFRJUExFKTsKKworCW5ld190eF9jb3VudCA9IG1heChyaW5nLT50eF9wZW5kaW5nLCAodTMyKUlYR0JFVkZfTUlOX1RYRCk7CisJbmV3X3R4X2NvdW50ID0gbWluKG5ld190eF9jb3VudCwgKHUzMilJWEdCRVZGX01BWF9UWEQpOworCW5ld190eF9jb3VudCA9IEFMSUdOKG5ld190eF9jb3VudCwgSVhHQkVfUkVRX1RYX0RFU0NSSVBUT1JfTVVMVElQTEUpOworCisJaWYgKChuZXdfdHhfY291bnQgPT0gYWRhcHRlci0+dHhfcmluZy0+Y291bnQpICYmCisJICAgIChuZXdfcnhfY291bnQgPT0gYWRhcHRlci0+cnhfcmluZy0+Y291bnQpKSB7CisJCS8qIG5vdGhpbmcgdG8gZG8gKi8KKwkJcmV0dXJuIDA7CisJfQorCisJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JWEdCRVZGX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJbXNsZWVwKDEpOworCisJaWYgKG5ld190eF9jb3VudCAhPSBhZGFwdGVyLT50eF9yaW5nX2NvdW50KSB7CisJCXR4X3JpbmcgPSBrY2FsbG9jKGFkYXB0ZXItPm51bV90eF9xdWV1ZXMsCisJCQkJICBzaXplb2Yoc3RydWN0IGl4Z2JldmZfcmluZyksIEdGUF9LRVJORUwpOworCQlpZiAoIXR4X3JpbmcpIHsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9zZXR1cDsKKwkJfQorCQltZW1jcHkodHhfcmluZywgYWRhcHRlci0+dHhfcmluZywKKwkJICAgICAgIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMgKiBzaXplb2Yoc3RydWN0IGl4Z2JldmZfcmluZykpOworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCQl0eF9yaW5nW2ldLmNvdW50ID0gbmV3X3R4X2NvdW50OworCQkJZXJyID0gaXhnYmV2Zl9zZXR1cF90eF9yZXNvdXJjZXMoYWRhcHRlciwKKwkJCQkJCQkgJnR4X3JpbmdbaV0pOworCQkJaWYgKGVycikgeworCQkJCXdoaWxlIChpKSB7CisJCQkJCWktLTsKKwkJCQkJaXhnYmV2Zl9mcmVlX3R4X3Jlc291cmNlcyhhZGFwdGVyLAorCQkJCQkJCQkgICZ0eF9yaW5nW2ldKTsKKwkJCQl9CisJCQkJa2ZyZWUodHhfcmluZyk7CisJCQkJZ290byBlcnJfc2V0dXA7CisJCQl9CisJCQl0eF9yaW5nW2ldLnZfaWR4ID0gYWRhcHRlci0+dHhfcmluZ1tpXS52X2lkeDsKKwkJfQorCQluZWVkX3R4X3VwZGF0ZSA9IHRydWU7CisJfQorCisJaWYgKG5ld19yeF9jb3VudCAhPSBhZGFwdGVyLT5yeF9yaW5nX2NvdW50KSB7CisJCXJ4X3JpbmcgPSBrY2FsbG9jKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCisJCQkJICBzaXplb2Yoc3RydWN0IGl4Z2JldmZfcmluZyksIEdGUF9LRVJORUwpOworCQlpZiAoKCFyeF9yaW5nKSAmJiAobmVlZF90eF91cGRhdGUpKSB7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnJfcnhfc2V0dXA7CisJCX0KKwkJbWVtY3B5KHJ4X3JpbmcsIGFkYXB0ZXItPnJ4X3JpbmcsCisJCSAgICAgICBhZGFwdGVyLT5udW1fcnhfcXVldWVzICogc2l6ZW9mKHN0cnVjdCBpeGdiZXZmX3JpbmcpKTsKKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQkJcnhfcmluZ1tpXS5jb3VudCA9IG5ld19yeF9jb3VudDsKKwkJCWVyciA9IGl4Z2JldmZfc2V0dXBfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsCisJCQkJCQkJICZyeF9yaW5nW2ldKTsKKwkJCWlmIChlcnIpIHsKKwkJCQl3aGlsZSAoaSkgeworCQkJCQlpLS07CisJCQkJCWl4Z2JldmZfZnJlZV9yeF9yZXNvdXJjZXMoYWRhcHRlciwKKwkJCQkJCQkJICAmcnhfcmluZ1tpXSk7CisJCQkJfQorCQkJCWtmcmVlKHJ4X3JpbmcpOworCQkJCWdvdG8gZXJyX3J4X3NldHVwOworCQkJfQorCQkJcnhfcmluZ1tpXS52X2lkeCA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0udl9pZHg7CisJCX0KKwkJbmVlZF9yeF91cGRhdGUgPSB0cnVlOworCX0KKworZXJyX3J4X3NldHVwOgorCS8qIGlmIHJpbmdzIG5lZWQgdG8gYmUgdXBkYXRlZCwgaGVyZSdzIHRoZSBwbGFjZSB0byBkbyBpdCBpbiBvbmUgc2hvdCAqLworCWlmIChuZWVkX3R4X3VwZGF0ZSB8fCBuZWVkX3J4X3VwZGF0ZSkgeworCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQkJaXhnYmV2Zl9kb3duKGFkYXB0ZXIpOworCX0KKworCS8qIHR4ICovCisJaWYgKG5lZWRfdHhfdXBkYXRlKSB7CisJCWtmcmVlKGFkYXB0ZXItPnR4X3JpbmcpOworCQlhZGFwdGVyLT50eF9yaW5nID0gdHhfcmluZzsKKwkJdHhfcmluZyA9IE5VTEw7CisJCWFkYXB0ZXItPnR4X3JpbmdfY291bnQgPSBuZXdfdHhfY291bnQ7CisJfQorCisJLyogcnggKi8KKwlpZiAobmVlZF9yeF91cGRhdGUpIHsKKwkJa2ZyZWUoYWRhcHRlci0+cnhfcmluZyk7CisJCWFkYXB0ZXItPnJ4X3JpbmcgPSByeF9yaW5nOworCQlyeF9yaW5nID0gTlVMTDsKKwkJYWRhcHRlci0+cnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDsKKwl9CisKKwkvKiBzdWNjZXNzISAqLworCWVyciA9IDA7CisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJaXhnYmV2Zl91cChhZGFwdGVyKTsKKworZXJyX3NldHVwOgorCWNsZWFyX2JpdChfX0lYR0JFVkZfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgaXhnYmV2Zl9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3RyaW5nc2V0KQoreworICAgICAgIHN3aXRjaCAoc3RyaW5nc2V0KSB7CisgICAgICAgY2FzZSBFVEhfU1NfVEVTVDoKKwkgICAgICAgcmV0dXJuIElYR0JFX1RFU1RfTEVOOworICAgICAgIGNhc2UgRVRIX1NTX1NUQVRTOgorCSAgICAgICByZXR1cm4gSVhHQkVfR0xPQkFMX1NUQVRTX0xFTjsKKyAgICAgICBkZWZhdWx0OgorCSAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfZ2V0X2V0aHRvb2xfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgaTsKKworCWl4Z2JldmZfdXBkYXRlX3N0YXRzKGFkYXB0ZXIpOworCWZvciAoaSA9IDA7IGkgPCBJWEdCRV9HTE9CQUxfU1RBVFNfTEVOOyBpKyspIHsKKwkJY2hhciAqcCA9IChjaGFyICopYWRhcHRlciArCisJCQlpeGdiZV9nc3RyaW5nc19zdGF0c1tpXS5zdGF0X29mZnNldDsKKwkJY2hhciAqYiA9IChjaGFyICopYWRhcHRlciArCisJCQlpeGdiZV9nc3RyaW5nc19zdGF0c1tpXS5iYXNlX3N0YXRfb2Zmc2V0OworCQlkYXRhW2ldID0gKChpeGdiZV9nc3RyaW5nc19zdGF0c1tpXS5zaXplb2Zfc3RhdCA9PQorCQkJICAgIHNpemVvZih1NjQpKSA/ICoodTY0ICopcCA6ICoodTMyICopcCkgLQorCQkJICAoKGl4Z2JlX2dzdHJpbmdzX3N0YXRzW2ldLnNpemVvZl9zdGF0ID09CisJCQkgICAgc2l6ZW9mKHU2NCkpID8gKih1NjQgKiliIDogKih1MzIgKiliKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfZ2V0X3N0cmluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIHN0cmluZ3NldCwKKwkJCQl1OCAqZGF0YSkKK3sKKwljaGFyICpwID0gKGNoYXIgKilkYXRhOworCWludCBpOworCisJc3dpdGNoIChzdHJpbmdzZXQpIHsKKwljYXNlIEVUSF9TU19URVNUOgorCQltZW1jcHkoZGF0YSwgKml4Z2JlX2dzdHJpbmdzX3Rlc3QsCisJCSAgICAgICBJWEdCRV9URVNUX0xFTiAqIEVUSF9HU1RSSU5HX0xFTik7CisJCWJyZWFrOworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQlmb3IgKGkgPSAwOyBpIDwgSVhHQkVfR0xPQkFMX1NUQVRTX0xFTjsgaSsrKSB7CisJCQltZW1jcHkocCwgaXhnYmVfZ3N0cmluZ3Nfc3RhdHNbaV0uc3RhdF9zdHJpbmcsCisJCQkgICAgICAgRVRIX0dTVFJJTkdfTEVOKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludCBpeGdiZXZmX2xpbmtfdGVzdChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRhdGEpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlib29sIGxpbmtfdXA7CisJdTMyIGxpbmtfc3BlZWQgPSAwOworCSpkYXRhID0gMDsKKworCWh3LT5tYWMub3BzLmNoZWNrX2xpbmsoaHcsICZsaW5rX3NwZWVkLCAmbGlua191cCwgdHJ1ZSk7CisJaWYgKCFsaW5rX3VwKQorCQkqZGF0YSA9IDE7CisKKwlyZXR1cm4gKmRhdGE7Cit9CisKKy8qIGV0aHRvb2wgcmVnaXN0ZXIgdGVzdCBkYXRhICovCitzdHJ1Y3QgaXhnYmV2Zl9yZWdfdGVzdCB7CisJdTE2IHJlZzsKKwl1OCAgYXJyYXlfbGVuOworCXU4ICB0ZXN0X3R5cGU7CisJdTMyIG1hc2s7CisJdTMyIHdyaXRlOworfTsKKworLyogSW4gdGhlIGhhcmR3YXJlLCByZWdpc3RlcnMgYXJlIGxhaWQgb3V0IGVpdGhlciBzaW5nbHksIGluIGFycmF5cworICogc3BhY2VkIDB4NDAgYnl0ZXMgYXBhcnQsIG9yIGluIGNvbnRpZ3VvdXMgdGFibGVzLiAgV2UgYXNzdW1lCisgKiBtb3N0IHRlc3RzIHRha2UgcGxhY2Ugb24gYXJyYXlzIG9yIHNpbmdsZSByZWdpc3RlcnMgKGhhbmRsZWQKKyAqIGFzIGEgc2luZ2xlLWVsZW1lbnQgYXJyYXkpIGFuZCBzcGVjaWFsLWNhc2UgdGhlIHRhYmxlcy4KKyAqIFRhYmxlIHRlc3RzIGFyZSBhbHdheXMgcGF0dGVybiB0ZXN0cy4KKyAqCisgKiBXZSBhbHNvIG1ha2UgcHJvdmlzaW9uIGZvciBzb21lIHJlcXVpcmVkIHNldHVwIHN0ZXBzIGJ5IHNwZWNpZnlpbmcKKyAqIHJlZ2lzdGVycyB0byBiZSB3cml0dGVuIHdpdGhvdXQgYW55IHJlYWQtYmFjayB0ZXN0aW5nLgorICovCisKKyNkZWZpbmUgUEFUVEVSTl9URVNUCTEKKyNkZWZpbmUgU0VUX1JFQURfVEVTVAkyCisjZGVmaW5lIFdSSVRFX05PX1RFU1QJMworI2RlZmluZSBUQUJMRTMyX1RFU1QJNAorI2RlZmluZSBUQUJMRTY0X1RFU1RfTE8JNQorI2RlZmluZSBUQUJMRTY0X1RFU1RfSEkJNgorCisvKiBkZWZhdWx0IFZGIHJlZ2lzdGVyIHRlc3QgKi8KK3N0YXRpYyBzdHJ1Y3QgaXhnYmV2Zl9yZWdfdGVzdCByZWdfdGVzdF92ZltdID0geworCXsgSVhHQkVfVkZSREJBTCgwKSwgMiwgUEFUVEVSTl9URVNULCAweEZGRkZGRjgwLCAweEZGRkZGRjgwIH0sCisJeyBJWEdCRV9WRlJEQkFIKDApLCAyLCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKKwl7IElYR0JFX1ZGUkRMRU4oMCksIDIsIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkY4MCwgMHgwMDBGRkZGRiB9LAorCXsgSVhHQkVfVkZSWERDVEwoMCksIDIsIFdSSVRFX05PX1RFU1QsIDAsIElYR0JFX1JYRENUTF9FTkFCTEUgfSwKKwl7IElYR0JFX1ZGUkRUKDApLCAyLCBQQVRURVJOX1RFU1QsIDB4MDAwMEZGRkYsIDB4MDAwMEZGRkYgfSwKKwl7IElYR0JFX1ZGUlhEQ1RMKDApLCAyLCBXUklURV9OT19URVNULCAwLCAwIH0sCisJeyBJWEdCRV9WRlREQkFMKDApLCAyLCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGODAsIDB4RkZGRkZGRkYgfSwKKwl7IElYR0JFX1ZGVERCQUgoMCksIDIsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAorCXsgSVhHQkVfVkZURExFTigwKSwgMiwgUEFUVEVSTl9URVNULCAweDAwMEZGRjgwLCAweDAwMEZGRjgwIH0sCisJeyAwLCAwLCAwLCAwIH0KK307CisKKyNkZWZpbmUgUkVHX1BBVFRFUk5fVEVTVChSLCBNLCBXKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl1MzIgcGF0LCB2YWwsIGJlZm9yZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWNvbnN0IHUzMiBfdGVzdFtdID0gezB4NUE1QTVBNUEsIDB4QTVBNUE1QTUsIDB4MDAwMDAwMDAsIDB4RkZGRkZGRkZ9OyBcCisJZm9yIChwYXQgPSAwOyBwYXQgPCBBUlJBWV9TSVpFKF90ZXN0KTsgcGF0KyspIHsgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJYmVmb3JlID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIFIpOyAgICAgICAgICAgICAgICAgICAgICBcCisJCXdyaXRlbCgoX3Rlc3RbcGF0XSAmIFcpLCAoYWRhcHRlci0+aHcuaHdfYWRkciArIFIpKTsgICAgICAgICAgXAorCQl2YWwgPSByZWFkbChhZGFwdGVyLT5ody5od19hZGRyICsgUik7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKHZhbCAhPSAoX3Rlc3RbcGF0XSAmIFcgJiBNKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlod19kYmcoJmFkYXB0ZXItPmh3LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkicGF0dGVybiB0ZXN0IHJlZyAlMDRYIGZhaWxlZDogZ290ICIgICAgICAgICAgICAgICAgICBcCisJCQkiMHglMDhYIGV4cGVjdGVkIDB4JTA4WFxuIiwgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlSLCB2YWwsIChfdGVzdFtwYXRdICYgVyAmIE0pKTsgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkqZGF0YSA9IFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQl3cml0ZWwoYmVmb3JlLCBhZGFwdGVyLT5ody5od19hZGRyICsgUik7ICAgICAgICAgICAgICBcCisJCQlyZXR1cm4gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQl3cml0ZWwoYmVmb3JlLCBhZGFwdGVyLT5ody5od19hZGRyICsgUik7ICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIFJFR19TRVRfQU5EX0NIRUNLKFIsIE0sIFcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJdTMyIHZhbCwgYmVmb3JlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwliZWZvcmUgPSByZWFkbChhZGFwdGVyLT5ody5od19hZGRyICsgUik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXdyaXRlbCgoVyAmIE0pLCAoYWRhcHRlci0+aHcuaHdfYWRkciArIFIpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJdmFsID0gcmVhZGwoYWRhcHRlci0+aHcuaHdfYWRkciArIFIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoKFcgJiBNKSAhPSAodmFsICYgTSkpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlwcmludGsoS0VSTl9FUlIgInNldC9jaGVjayByZWcgJTA0WCB0ZXN0IGZhaWxlZDogZ290IDB4JTA4WCAiIFwKKwkJCQkgImV4cGVjdGVkIDB4JTA4WFxuIiwgUiwgKHZhbCAmIE0pLCAoVyAmIE0pKTsgXAorCQkqZGF0YSA9IFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJd3JpdGVsKGJlZm9yZSwgKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKSk7ICAgICAgICAgICAgICAgICAgICBcCisJCXJldHVybiAxOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJd3JpdGVsKGJlZm9yZSwgKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyBSKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworc3RhdGljIGludCBpeGdiZXZmX3JlZ190ZXN0KHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9yZWdfdGVzdCAqdGVzdDsKKwl1MzIgaTsKKworCXRlc3QgPSByZWdfdGVzdF92ZjsKKworCS8qCisJICogUGVyZm9ybSB0aGUgcmVnaXN0ZXIgdGVzdCwgbG9vcGluZyB0aHJvdWdoIHRoZSB0ZXN0IHRhYmxlCisJICogdW50aWwgd2UgZWl0aGVyIGZhaWwgb3IgcmVhY2ggdGhlIG51bGwgZW50cnkuCisJICovCisJd2hpbGUgKHRlc3QtPnJlZykgeworCQlmb3IgKGkgPSAwOyBpIDwgdGVzdC0+YXJyYXlfbGVuOyBpKyspIHsKKwkJCXN3aXRjaCAodGVzdC0+dGVzdF90eXBlKSB7CisJCQljYXNlIFBBVFRFUk5fVEVTVDoKKwkJCQlSRUdfUEFUVEVSTl9URVNUKHRlc3QtPnJlZyArIChpICogMHg0MCksCisJCQkJCQl0ZXN0LT5tYXNrLAorCQkJCQkJdGVzdC0+d3JpdGUpOworCQkJCWJyZWFrOworCQkJY2FzZSBTRVRfUkVBRF9URVNUOgorCQkJCVJFR19TRVRfQU5EX0NIRUNLKHRlc3QtPnJlZyArIChpICogMHg0MCksCisJCQkJCQl0ZXN0LT5tYXNrLAorCQkJCQkJdGVzdC0+d3JpdGUpOworCQkJCWJyZWFrOworCQkJY2FzZSBXUklURV9OT19URVNUOgorCQkJCXdyaXRlbCh0ZXN0LT53cml0ZSwKKwkJCQkgICAgICAgKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyB0ZXN0LT5yZWcpCisJCQkJICAgICAgICsgKGkgKiAweDQwKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIFRBQkxFMzJfVEVTVDoKKwkJCQlSRUdfUEFUVEVSTl9URVNUKHRlc3QtPnJlZyArIChpICogNCksCisJCQkJCQl0ZXN0LT5tYXNrLAorCQkJCQkJdGVzdC0+d3JpdGUpOworCQkJCWJyZWFrOworCQkJY2FzZSBUQUJMRTY0X1RFU1RfTE86CisJCQkJUkVHX1BBVFRFUk5fVEVTVCh0ZXN0LT5yZWcgKyAoaSAqIDgpLAorCQkJCQkJdGVzdC0+bWFzaywKKwkJCQkJCXRlc3QtPndyaXRlKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVEFCTEU2NF9URVNUX0hJOgorCQkJCVJFR19QQVRURVJOX1RFU1QoKHRlc3QtPnJlZyArIDQpICsgKGkgKiA4KSwKKwkJCQkJCXRlc3QtPm1hc2ssCisJCQkJCQl0ZXN0LT53cml0ZSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJdGVzdCsrOworCX0KKworCSpkYXRhID0gMDsKKwlyZXR1cm4gKmRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfZGlhZ190ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgICAgICBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGhfdGVzdCwgdTY0ICpkYXRhKQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWJvb2wgaWZfcnVubmluZyA9IG5ldGlmX3J1bm5pbmcobmV0ZGV2KTsKKworCXNldF9iaXQoX19JWEdCRVZGX1RFU1RJTkcsICZhZGFwdGVyLT5zdGF0ZSk7CisJaWYgKGV0aF90ZXN0LT5mbGFncyA9PSBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7CisJCS8qIE9mZmxpbmUgdGVzdHMgKi8KKworCQlod19kYmcoJmFkYXB0ZXItPmh3LCAib2ZmbGluZSB0ZXN0aW5nIHN0YXJ0aW5nXG4iKTsKKworCQkvKiBMaW5rIHRlc3QgcGVyZm9ybWVkIGJlZm9yZSBoYXJkd2FyZSByZXNldCBzbyBhdXRvbmVnIGRvZXNuJ3QKKwkJICogaW50ZXJmZXJlIHdpdGggdGVzdCByZXN1bHQgKi8KKwkJaWYgKGl4Z2JldmZfbGlua190ZXN0KGFkYXB0ZXIsICZkYXRhWzFdKSkKKwkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisKKwkJaWYgKGlmX3J1bm5pbmcpCisJCQkvKiBpbmRpY2F0ZSB3ZSdyZSBpbiB0ZXN0IG1vZGUgKi8KKwkJCWRldl9jbG9zZShuZXRkZXYpOworCQllbHNlCisJCQlpeGdiZXZmX3Jlc2V0KGFkYXB0ZXIpOworCisJCWh3X2RiZygmYWRhcHRlci0+aHcsICJyZWdpc3RlciB0ZXN0aW5nIHN0YXJ0aW5nXG4iKTsKKwkJaWYgKGl4Z2JldmZfcmVnX3Rlc3QoYWRhcHRlciwgJmRhdGFbMF0pKQorCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKworCQlpeGdiZXZmX3Jlc2V0KGFkYXB0ZXIpOworCisJCWNsZWFyX2JpdChfX0lYR0JFVkZfVEVTVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwkJaWYgKGlmX3J1bm5pbmcpCisJCQlkZXZfb3BlbihuZXRkZXYpOworCX0gZWxzZSB7CisJCWh3X2RiZygmYWRhcHRlci0+aHcsICJvbmxpbmUgdGVzdGluZyBzdGFydGluZ1xuIik7CisJCS8qIE9ubGluZSB0ZXN0cyAqLworCQlpZiAoaXhnYmV2Zl9saW5rX3Rlc3QoYWRhcHRlciwgJmRhdGFbMV0pKQorCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKworCQkvKiBPbmxpbmUgdGVzdHMgYXJlbid0IHJ1bjsgcGFzcyBieSBkZWZhdWx0ICovCisJCWRhdGFbMF0gPSAwOworCisJCWNsZWFyX2JpdChfX0lYR0JFVkZfVEVTVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwl9CisJbXNsZWVwX2ludGVycnVwdGlibGUoNCAqIDEwMDApOworfQorCitzdGF0aWMgaW50IGl4Z2JldmZfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQlpZiAoIWFkYXB0ZXItPmRldl9jbG9zZWQpCisJCQlpeGdiZXZmX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgaXhnYmV2Zl9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X3NldHRpbmdzICAgICAgICAgICA9IGl4Z2JldmZfZ2V0X3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbyAgICAgICAgICAgID0gaXhnYmV2Zl9nZXRfZHJ2aW5mbywKKwkuZ2V0X3JlZ3NfbGVuICAgICAgICAgICA9IGl4Z2JldmZfZ2V0X3JlZ3NfbGVuLAorCS5nZXRfcmVncyAgICAgICAgICAgICAgID0gaXhnYmV2Zl9nZXRfcmVncywKKwkubndheV9yZXNldCAgICAgICAgICAgICA9IGl4Z2JldmZfbndheV9yZXNldCwKKwkuZ2V0X2xpbmsgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9yaW5ncGFyYW0gICAgICAgICAgPSBpeGdiZXZmX2dldF9yaW5ncGFyYW0sCisJLnNldF9yaW5ncGFyYW0gICAgICAgICAgPSBpeGdiZXZmX3NldF9yaW5ncGFyYW0sCisJLmdldF9yeF9jc3VtICAgICAgICAgICAgPSBpeGdiZXZmX2dldF9yeF9jc3VtLAorCS5zZXRfcnhfY3N1bSAgICAgICAgICAgID0gaXhnYmV2Zl9zZXRfcnhfY3N1bSwKKwkuZ2V0X3R4X2NzdW0gICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X3R4X2NzdW0sCisJLnNldF90eF9jc3VtICAgICAgICAgICAgPSBldGh0b29sX29wX3NldF90eF9pcHY2X2NzdW0sCisJLmdldF9zZyAgICAgICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF9zZywKKwkuc2V0X3NnICAgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3Bfc2V0X3NnLAorCS5nZXRfbXNnbGV2ZWwgICAgICAgICAgID0gaXhnYmV2Zl9nZXRfbXNnbGV2ZWwsCisJLnNldF9tc2dsZXZlbCAgICAgICAgICAgPSBpeGdiZXZmX3NldF9tc2dsZXZlbCwKKwkuZ2V0X3RzbyAgICAgICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X3RzbywKKwkuc2V0X3RzbyAgICAgICAgICAgICAgICA9IGl4Z2JldmZfc2V0X3RzbywKKwkuc2VsZl90ZXN0ICAgICAgICAgICAgICA9IGl4Z2JldmZfZGlhZ190ZXN0LAorCS5nZXRfc3NldF9jb3VudCAgICAgICAgID0gaXhnYmV2Zl9nZXRfc3NldF9jb3VudCwKKwkuZ2V0X3N0cmluZ3MgICAgICAgICAgICA9IGl4Z2JldmZfZ2V0X3N0cmluZ3MsCisJLmdldF9ldGh0b29sX3N0YXRzICAgICAgPSBpeGdiZXZmX2dldF9ldGh0b29sX3N0YXRzLAorfTsKKwordm9pZCBpeGdiZXZmX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZpeGdiZXZmX2V0aHRvb2xfb3BzKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zi5oIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi9peGdiZXZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcwMTVlZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zi5oCkBAIC0wLDAgKzEsMzE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JWEdCRVZGX0hfCisjZGVmaW5lIF9JWEdCRVZGX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKworI2luY2x1ZGUgInZmLmgiCisKKy8qIHdyYXBwZXIgYXJvdW5kIGEgcG9pbnRlciB0byBhIHNvY2tldCBidWZmZXIsCisgKiBzbyBhIERNQSBoYW5kbGUgY2FuIGJlIHN0b3JlZCBhbG9uZyB3aXRoIHRoZSBidWZmZXIgKi8KK3N0cnVjdCBpeGdiZXZmX3R4X2J1ZmZlciB7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlkbWFfYWRkcl90IGRtYTsKKwl1bnNpZ25lZCBsb25nIHRpbWVfc3RhbXA7CisJdTE2IGxlbmd0aDsKKwl1MTYgbmV4dF90b193YXRjaDsKKwl1MTYgbWFwcGVkX2FzX3BhZ2U7Cit9OworCitzdHJ1Y3QgaXhnYmV2Zl9yeF9idWZmZXIgeworCXN0cnVjdCBza19idWZmICpza2I7CisJZG1hX2FkZHJfdCBkbWE7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJZG1hX2FkZHJfdCBwYWdlX2RtYTsKKwl1bnNpZ25lZCBpbnQgcGFnZV9vZmZzZXQ7Cit9OworCitzdHJ1Y3QgaXhnYmV2Zl9yaW5nIHsKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyOyAgLyogYmFja2xpbmsgKi8KKwl2b2lkICpkZXNjOwkJCS8qIGRlc2NyaXB0b3IgcmluZyBtZW1vcnkgKi8KKwlkbWFfYWRkcl90IGRtYTsJCQkvKiBwaHlzLiBhZGRyZXNzIG9mIGRlc2NyaXB0b3IgcmluZyAqLworCXVuc2lnbmVkIGludCBzaXplOwkJLyogbGVuZ3RoIGluIGJ5dGVzICovCisJdW5zaWduZWQgaW50IGNvdW50OwkJLyogYW1vdW50IG9mIGRlc2NyaXB0b3JzICovCisJdW5zaWduZWQgaW50IG5leHRfdG9fdXNlOworCXVuc2lnbmVkIGludCBuZXh0X3RvX2NsZWFuOworCisJaW50IHF1ZXVlX2luZGV4OyAvKiBuZWVkZWQgZm9yIG11bHRpcXVldWUgcXVldWUgbWFuYWdlbWVudCAqLworCXVuaW9uIHsKKwkJc3RydWN0IGl4Z2JldmZfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbzsKKwkJc3RydWN0IGl4Z2JldmZfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbzsKKwl9OworCisJdTE2IGhlYWQ7CisJdTE2IHRhaWw7CisKKwl1bnNpZ25lZCBpbnQgdG90YWxfYnl0ZXM7CisJdW5zaWduZWQgaW50IHRvdGFsX3BhY2tldHM7CisKKwl1MTYgcmVnX2lkeDsgLyogaG9sZHMgdGhlIHNwZWNpYWwgdmFsdWUgdGhhdCBnZXRzIHRoZSBoYXJkd2FyZSByZWdpc3RlcgorCQkgICAgICAqIG9mZnNldCBhc3NvY2lhdGVkIHdpdGggdGhpcyByaW5nLCB3aGljaCBpcyBkaWZmZXJlbnQKKwkJICAgICAgKiBmb3IgRENCIGFuZCBSU1MgbW9kZXMgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0RDQSkgfHwgZGVmaW5lZChDT05GSUdfRENBX01PRFVMRSkKKwkvKiBjcHUgZm9yIHR4IHF1ZXVlICovCisJaW50IGNwdTsKKyNlbmRpZgorCisJdTY0IHZfaWR4OyAvKiBtYXBzIGRpcmVjdGx5IHRvIHRoZSBpbmRleCBmb3IgdGhpcyByaW5nIGluIHRoZSBoYXJkd2FyZQorCQkgICAgKiB2ZWN0b3IgYXJyYXksIGNhbiBhbHNvIGJlIHVzZWQgZm9yIGZpbmRpbmcgdGhlIGJpdCBpbiBFSUNSCisJCSAgICAqIGFuZCBmcmllbmRzIHRoYXQgcmVwcmVzZW50cyB0aGUgdmVjdG9yIGZvciB0aGlzIHJpbmcgKi8KKworCXUxNiB3b3JrX2xpbWl0OyAgICAgICAgICAgICAgICAvKiBtYXggd29yayBwZXIgaW50ZXJydXB0ICovCisJdTE2IHJ4X2J1Zl9sZW47Cit9OworCitlbnVtIGl4Z2JldmZfcmluZ19mX2VudW0geworCVJJTkdfRl9OT05FID0gMCwKKwlSSU5HX0ZfQVJSQVlfU0laRSAgICAgIC8qIG11c3QgYmUgbGFzdCBpbiBlbnVtIHNldCAqLworfTsKKworc3RydWN0IGl4Z2JldmZfcmluZ19mZWF0dXJlIHsKKwlpbnQgaW5kaWNlczsKKwlpbnQgbWFzazsKK307CisKKy8qIEhvdyBtYW55IFJ4IEJ1ZmZlcnMgZG8gd2UgYnVuZGxlIGludG8gb25lIHdyaXRlIHRvIHRoZSBoYXJkd2FyZSA/ICovCisjZGVmaW5lIElYR0JFVkZfUlhfQlVGRkVSX1dSSVRFCTE2CS8qIE11c3QgYmUgcG93ZXIgb2YgMiAqLworCisjZGVmaW5lIE1BWF9SWF9RVUVVRVMgMQorI2RlZmluZSBNQVhfVFhfUVVFVUVTIDEKKworI2RlZmluZSBJWEdCRVZGX0RFRkFVTFRfVFhEICAgMTAyNAorI2RlZmluZSBJWEdCRVZGX0RFRkFVTFRfUlhEICAgNTEyCisjZGVmaW5lIElYR0JFVkZfTUFYX1RYRCAgICAgICA0MDk2CisjZGVmaW5lIElYR0JFVkZfTUlOX1RYRCAgICAgICA2NAorI2RlZmluZSBJWEdCRVZGX01BWF9SWEQgICAgICAgNDA5NgorI2RlZmluZSBJWEdCRVZGX01JTl9SWEQgICAgICAgNjQKKworLyogU3VwcG9ydGVkIFJ4IEJ1ZmZlciBTaXplcyAqLworI2RlZmluZSBJWEdCRVZGX1JYQlVGRkVSXzY0ICAgIDY0ICAgICAvKiBVc2VkIGZvciBwYWNrZXQgc3BsaXQgKi8KKyNkZWZpbmUgSVhHQkVWRl9SWEJVRkZFUl8xMjggICAxMjggICAgLyogVXNlZCBmb3IgcGFja2V0IHNwbGl0ICovCisjZGVmaW5lIElYR0JFVkZfUlhCVUZGRVJfMjU2ICAgMjU2ICAgIC8qIFVzZWQgZm9yIHBhY2tldCBzcGxpdCAqLworI2RlZmluZSBJWEdCRVZGX1JYQlVGRkVSXzIwNDggIDIwNDgKKyNkZWZpbmUgSVhHQkVWRl9NQVhfUlhCVUZGRVIgICAxNjM4NCAgLyogbGFyZ2VzdCBzaXplIGZvciBzaW5nbGUgZGVzY3JpcHRvciAqLworCisjZGVmaW5lIElYR0JFVkZfUlhfSERSX1NJWkUgSVhHQkVWRl9SWEJVRkZFUl8yNTYKKworI2RlZmluZSBNQVhJTVVNX0VUSEVSTkVUX1ZMQU5fU0laRSAoVkxBTl9FVEhfRlJBTUVfTEVOICsgRVRIX0ZDU19MRU4pCisKKyNkZWZpbmUgSVhHQkVfVFhfRkxBR1NfQ1NVTQkJKHUzMikoMSkKKyNkZWZpbmUgSVhHQkVfVFhfRkxBR1NfVkxBTgkJKHUzMikoMSA8PCAxKQorI2RlZmluZSBJWEdCRV9UWF9GTEFHU19UU08JCSh1MzIpKDEgPDwgMikKKyNkZWZpbmUgSVhHQkVfVFhfRkxBR1NfSVBWNAkJKHUzMikoMSA8PCAzKQorI2RlZmluZSBJWEdCRV9UWF9GTEFHU19GQ09FCQkodTMyKSgxIDw8IDQpCisjZGVmaW5lIElYR0JFX1RYX0ZMQUdTX0ZTTwkJKHUzMikoMSA8PCA1KQorI2RlZmluZSBJWEdCRV9UWF9GTEFHU19WTEFOX01BU0sJMHhmZmZmMDAwMAorI2RlZmluZSBJWEdCRV9UWF9GTEFHU19WTEFOX1BSSU9fTUFTSwkweDAwMDBlMDAwCisjZGVmaW5lIElYR0JFX1RYX0ZMQUdTX1ZMQU5fU0hJRlQJMTYKKworLyogTUFYX01TSVhfUV9WRUNUT1JTIG9mIHRoZXNlIGFyZSBhbGxvY2F0ZWQsCisgKiBidXQgd2Ugb25seSB1c2Ugb25lIHBlciBxdWV1ZS1zcGVjaWZpYyB2ZWN0b3IuCisgKi8KK3N0cnVjdCBpeGdiZXZmX3FfdmVjdG9yIHsKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOworCURFQ0xBUkVfQklUTUFQKHJ4cl9pZHgsIE1BWF9SWF9RVUVVRVMpOyAvKiBSeCByaW5nIGluZGljZXMgKi8KKwlERUNMQVJFX0JJVE1BUCh0eHJfaWR4LCBNQVhfVFhfUVVFVUVTKTsgLyogVHggcmluZyBpbmRpY2VzICovCisJdTggcnhyX2NvdW50OyAgICAgLyogUnggcmluZyBjb3VudCBhc3NpZ25lZCB0byB0aGlzIHZlY3RvciAqLworCXU4IHR4cl9jb3VudDsgICAgIC8qIFR4IHJpbmcgY291bnQgYXNzaWduZWQgdG8gdGhpcyB2ZWN0b3IgKi8KKwl1OCB0eF9pdHI7CisJdTggcnhfaXRyOworCXUzMiBlaXRyOworCWludCB2X2lkeDsJICAvKiB2ZWN0b3IgaW5kZXggaW4gbGlzdCAqLworfTsKKworLyogSGVscGVyIG1hY3JvcyB0byBzd2l0Y2ggYmV0d2VlbiBpbnRzL3NlYyBhbmQgd2hhdCB0aGUgcmVnaXN0ZXIgdXNlcy4KKyAqIEFuZCB5ZXMsIGl0J3MgdGhlIHNhbWUgbWF0aCBnb2luZyBib3RoIHdheXMuICBUaGUgbG93ZXN0IHZhbHVlCisgKiBzdXBwb3J0ZWQgYnkgYWxsIG9mIHRoZSBpeGdiZSBoYXJkd2FyZSBpcyA4LgorICovCisjZGVmaW5lIEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRyhfZWl0cikgXAorCSgoX2VpdHIpID8gKDEwMDAwMDAwMDAgLyAoKF9laXRyKSAqIDI1NikpIDogOCkKKyNkZWZpbmUgRUlUUl9SRUdfVE9fSU5UU19QRVJfU0VDIEVJVFJfSU5UU19QRVJfU0VDX1RPX1JFRworCisjZGVmaW5lIElYR0JFX0RFU0NfVU5VU0VEKFIpIFwKKwkoKCgoUiktPm5leHRfdG9fY2xlYW4gPiAoUiktPm5leHRfdG9fdXNlKSA/IDAgOiAoUiktPmNvdW50KSArIFwKKwkoUiktPm5leHRfdG9fY2xlYW4gLSAoUiktPm5leHRfdG9fdXNlIC0gMSkKKworI2RlZmluZSBJWEdCRV9SWF9ERVNDX0FEVihSLCBpKQkgICAgXAorCSgmKCgodW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgKikoKFIpLmRlc2MpKVtpXSkpCisjZGVmaW5lIElYR0JFX1RYX0RFU0NfQURWKFIsIGkpCSAgICBcCisJKCYoKCh1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyAqKSgoUikuZGVzYykpW2ldKSkKKyNkZWZpbmUgSVhHQkVfVFhfQ1RYVERFU0NfQURWKFIsIGkpCSAgICBcCisJKCYoKChzdHJ1Y3QgaXhnYmVfYWR2X3R4X2NvbnRleHRfZGVzYyAqKSgoUikuZGVzYykpW2ldKSkKKworI2RlZmluZSBJWEdCRV9NQVhfSlVNQk9fRlJBTUVfU0laRSAgICAgICAgMTYxMjgKKworI2RlZmluZSBPVEhFUl9WRUNUT1IgMQorI2RlZmluZSBOT05fUV9WRUNUT1JTIChPVEhFUl9WRUNUT1IpCisKKyNkZWZpbmUgTUFYX01TSVhfUV9WRUNUT1JTIDIKKyNkZWZpbmUgTUFYX01TSVhfQ09VTlQgMgorCisjZGVmaW5lIE1JTl9NU0lYX1FfVkVDVE9SUyAyCisjZGVmaW5lIE1JTl9NU0lYX0NPVU5UIChNSU5fTVNJWF9RX1ZFQ1RPUlMgKyBOT05fUV9WRUNUT1JTKQorCisvKiBib2FyZCBzcGVjaWZpYyBwcml2YXRlIGRhdGEgc3RydWN0dXJlICovCitzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyIHsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKKyNpZmRlZiBORVRJRl9GX0hXX1ZMQU5fVFgKKwlzdHJ1Y3Qgdmxhbl9ncm91cCAqdmxncnA7CisjZW5kaWYKKwl1MTYgYmRfbnVtYmVyOworCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOworCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvcltNQVhfTVNJWF9RX1ZFQ1RPUlNdOworCWNoYXIgbmFtZVtNQVhfTVNJWF9DT1VOVF1bSUZOQU1TSVogKyA5XTsKKworCS8qIEludGVycnVwdCBUaHJvdHRsZSBSYXRlICovCisJdTMyIGl0cl9zZXR0aW5nOworCXUxNiBlaXRyX2xvdzsKKwl1MTYgZWl0cl9oaWdoOworCisJLyogVFggKi8KKwlzdHJ1Y3QgaXhnYmV2Zl9yaW5nICp0eF9yaW5nOwkvKiBPbmUgcGVyIGFjdGl2ZSBxdWV1ZSAqLworCWludCBudW1fdHhfcXVldWVzOworCXU2NCByZXN0YXJ0X3F1ZXVlOworCXU2NCBod19jc3VtX3R4X2dvb2Q7CisJdTY0IGxzY19pbnQ7CisJdTY0IGh3X3Rzb19jdHh0OworCXU2NCBod190c282X2N0eHQ7CisJdTMyIHR4X3RpbWVvdXRfY291bnQ7CisJYm9vbCBkZXRlY3RfdHhfaHVuZzsKKworCS8qIFJYICovCisJc3RydWN0IGl4Z2JldmZfcmluZyAqcnhfcmluZzsJLyogT25lIHBlciBhY3RpdmUgcXVldWUgKi8KKwlpbnQgbnVtX3J4X3F1ZXVlczsKKwlpbnQgbnVtX3J4X3Bvb2xzOyAgICAgICAgICAgICAgIC8qID09IG51bV9yeF9xdWV1ZXMgaW4gODI1OTggKi8KKwlpbnQgbnVtX3J4X3F1ZXVlc19wZXJfcG9vbDsJLyogMSBpZiA4MjU5OCwgY2FuIGJlIG1hbnkgaWYgODI1OTkgKi8KKwl1NjQgaHdfY3N1bV9yeF9lcnJvcjsKKwl1NjQgaHdfcnhfbm9fZG1hX3Jlc291cmNlczsKKwl1NjQgaHdfY3N1bV9yeF9nb29kOworCXU2NCBub25fZW9wX2Rlc2NzOworCWludCBudW1fbXNpeF92ZWN0b3JzOworCWludCBtYXhfbXNpeF9xX3ZlY3RvcnM7ICAgICAgICAgLyogdHJ1ZSBjb3VudCBvZiBxX3ZlY3RvcnMgZm9yIGRldmljZSAqLworCXN0cnVjdCBpeGdiZXZmX3JpbmdfZmVhdHVyZSByaW5nX2ZlYXR1cmVbUklOR19GX0FSUkFZX1NJWkVdOworCXN0cnVjdCBtc2l4X2VudHJ5ICptc2l4X2VudHJpZXM7CisKKwl1NjQgcnhfaGRyX3NwbGl0OworCXUzMiBhbGxvY19yeF9wYWdlX2ZhaWxlZDsKKwl1MzIgYWxsb2NfcnhfYnVmZl9mYWlsZWQ7CisKKwkvKiBTb21lIGZlYXR1cmVzIG5lZWQgdHJpLXN0YXRlIGNhcGFiaWxpdHksCisJICogdGh1cyB0aGUgYWRkaXRpb25hbCAqX0NBUEFCTEUgZmxhZ3MuCisJICovCisJdTMyIGZsYWdzOworI2RlZmluZSBJWEdCRV9GTEFHX1JYX0NTVU1fRU5BQkxFRCAgICAgICAgICAgICAgKHUzMikoMSkKKyNkZWZpbmUgSVhHQkVfRkxBR19SWF8xQlVGX0NBUEFCTEUgICAgICAgICAgICAgICh1MzIpKDEgPDwgMSkKKyNkZWZpbmUgSVhHQkVfRkxBR19SWF9QU19DQVBBQkxFICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMikKKyNkZWZpbmUgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgMykKKyNkZWZpbmUgSVhHQkVfRkxBR19JTl9ORVRQT0xMICAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgNCkKKyNkZWZpbmUgSVhHQkVfRkxBR19JTUlSX0VOQUJMRUQgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgNSkKKyNkZWZpbmUgSVhHQkVfRkxBR19NUV9DQVBBQkxFICAgICAgICAgICAgICAgICAgICh1MzIpKDEgPDwgNikKKyNkZWZpbmUgSVhHQkVfRkxBR19ORUVEX0xJTktfVVBEQVRFICAgICAgICAgICAgICh1MzIpKDEgPDwgNykKKyNkZWZpbmUgSVhHQkVfRkxBR19JTl9XQVRDSERPR19UQVNLICAgICAgICAgICAgICh1MzIpKDEgPDwgOCkKKwkvKiBPUyBkZWZpbmVkIHN0cnVjdHMgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldF9zdGF0czsKKworCS8qIHN0cnVjdHMgZGVmaW5lZCBpbiBpeGdiZV92Zi5oICovCisJc3RydWN0IGl4Z2JlX2h3IGh3OworCXUxNiBtc2dfZW5hYmxlOworCXN0cnVjdCBpeGdiZXZmX2h3X3N0YXRzIHN0YXRzOworCXU2NCB6ZXJvX2Jhc2U7CisJLyogSW50ZXJydXB0IFRocm90dGxlIFJhdGUgKi8KKwl1MzIgZWl0cl9wYXJhbTsKKworCXVuc2lnbmVkIGxvbmcgc3RhdGU7CisJdTMyICpjb25maWdfc3BhY2U7CisJdTY0IHR4X2J1c3k7CisJdW5zaWduZWQgaW50IHR4X3JpbmdfY291bnQ7CisJdW5zaWduZWQgaW50IHJ4X3JpbmdfY291bnQ7CisKKwl1MzIgbGlua19zcGVlZDsKKwlib29sIGxpbmtfdXA7CisJdW5zaWduZWQgbG9uZyBsaW5rX2NoZWNrX3RpbWVvdXQ7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2F0Y2hkb2dfdGFzazsKKwlib29sIG5ldGRldl9yZWdpc3RlcmVkOworCWJvb2wgZGV2X2Nsb3NlZDsKK307CisKK2VudW0gaXhiZ2V2Zl9zdGF0ZV90IHsKKwlfX0lYR0JFVkZfVEVTVElORywKKwlfX0lYR0JFVkZfUkVTRVRUSU5HLAorCV9fSVhHQkVWRl9ET1dOCit9OworCitlbnVtIGl4Z2JldmZfYm9hcmRzIHsKKwlib2FyZF84MjU5OV92ZiwKK307CisKK2V4dGVybiBzdHJ1Y3QgaXhnYmV2Zl9pbmZvIGl4Z2JldmZfdmZfaW5mbzsKK2V4dGVybiBzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMgaXhnYmV2Zl9tYnhfb3BzOworCisvKiBuZWVkZWQgYnkgZXRodG9vbC5jICovCitleHRlcm4gY2hhciBpeGdiZXZmX2RyaXZlcl9uYW1lW107CitleHRlcm4gY29uc3QgY2hhciBpeGdiZXZmX2RyaXZlcl92ZXJzaW9uW107CisKK2V4dGVybiBpbnQgaXhnYmV2Zl91cChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiB2b2lkIGl4Z2JldmZfZG93bihzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiB2b2lkIGl4Z2JldmZfcmVpbml0X2xvY2tlZChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiB2b2lkIGl4Z2JldmZfcmVzZXQoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBpeGdiZXZmX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK2V4dGVybiBpbnQgaXhnYmV2Zl9zZXR1cF9yeF9yZXNvdXJjZXMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqLAorCQkJCSAgICAgIHN0cnVjdCBpeGdiZXZmX3JpbmcgKik7CitleHRlcm4gaW50IGl4Z2JldmZfc2V0dXBfdHhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKiwKKwkJCQkgICAgICBzdHJ1Y3QgaXhnYmV2Zl9yaW5nICopOworZXh0ZXJuIHZvaWQgaXhnYmV2Zl9mcmVlX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICosCisJCQkJICAgICAgc3RydWN0IGl4Z2JldmZfcmluZyAqKTsKK2V4dGVybiB2b2lkIGl4Z2JldmZfZnJlZV90eF9yZXNvdXJjZXMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqLAorCQkJCSAgICAgIHN0cnVjdCBpeGdiZXZmX3JpbmcgKik7CitleHRlcm4gdm9pZCBpeGdiZXZmX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKTsKKworI2lmZGVmIEVUSFRPT0xfT1BTX0NPTVBBVAorZXh0ZXJuIGludCBldGh0b29sX2lvY3RsKHN0cnVjdCBpZnJlcSAqaWZyKTsKKworI2VuZGlmCitleHRlcm4gdm9pZCBpeGdiZV9uYXBpX2FkZF9hbGwoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcik7CitleHRlcm4gdm9pZCBpeGdiZV9uYXBpX2RlbF9hbGwoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcik7CisKKyNpZmRlZiBERUJVRworZXh0ZXJuIGNoYXIgKml4Z2JldmZfZ2V0X2h3X2Rldl9uYW1lKHN0cnVjdCBpeGdiZV9odyAqaHcpOworI2RlZmluZSBod19kYmcoaHcsIGZvcm1hdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZvcm1hdCwgaXhnYmV2Zl9nZXRfaHdfZGV2X25hbWUoaHcpLCAjI2FyZykKKyNlbHNlCisjZGVmaW5lIGh3X2RiZyhodywgZm9ybWF0LCBhcmcuLi4pIGRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbmRpZiAvKiBfSVhHQkVWRl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9peGdiZXZmX21haW4uYyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E2NTNjNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvaXhnYmV2Zl9tYWluLmMKQEAgLTAsMCArMSwzNTc4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyBDb3B5cmlnaHQgKGMpMjAwNiAtIDIwMDcgTXlyaWNvbSwgSW5jLiBmb3Igc29tZSBMUk8gc3BlY2lmaWMgY29kZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgorI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl92bGFuLmg+CisKKyNpbmNsdWRlICJpeGdiZXZmLmgiCisKK2NoYXIgaXhnYmV2Zl9kcml2ZXJfbmFtZVtdID0gIml4Z2JldmYiOworc3RhdGljIGNvbnN0IGNoYXIgaXhnYmV2Zl9kcml2ZXJfc3RyaW5nW10gPQorCSJJbnRlbChSKSA4MjU5OSBWaXJ0dWFsIEZ1bmN0aW9uIjsKKworI2RlZmluZSBEUlZfVkVSU0lPTiAiMS4wLjAtazAiCitjb25zdCBjaGFyIGl4Z2JldmZfZHJpdmVyX3ZlcnNpb25bXSA9IERSVl9WRVJTSU9OOworc3RhdGljIGNoYXIgaXhnYmV2Zl9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpeGdiZXZmX2luZm8gKml4Z2JldmZfaW5mb190YmxbXSA9IHsKKwlbYm9hcmRfODI1OTlfdmZdID0gJml4Z2JldmZfdmZfaW5mbywKK307CisKKy8qIGl4Z2JldmZfcGNpX3RibCAtIFBDSSBEZXZpY2UgSUQgVGFibGUKKyAqCisgKiBXaWxkY2FyZCBlbnRyaWVzIChQQ0lfQU5ZX0lEKSBzaG91bGQgY29tZSBsYXN0CisgKiBMYXN0IGVudHJ5IG11c3QgYmUgYWxsIDBzCisgKgorICogeyBWZW5kb3IgSUQsIERldmljZSBJRCwgU3ViVmVuZG9yIElELCBTdWJEZXZpY2UgSUQsCisgKiAgIENsYXNzLCBDbGFzcyBNYXNrLCBwcml2YXRlIGRhdGEgKG5vdCB1c2VkKSB9CisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpeGdiZXZmX3BjaV90YmxbXSA9IHsKKwl7UENJX1ZERVZJQ0UoSU5URUwsIElYR0JFX0RFVl9JRF84MjU5OV9WRiksCisJYm9hcmRfODI1OTlfdmZ9LAorCisJLyogcmVxdWlyZWQgbGFzdCBlbnRyeSAqLworCXswLCB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGl4Z2JldmZfcGNpX3RibCk7CisKK01PRFVMRV9BVVRIT1IoIkludGVsIENvcnBvcmF0aW9uLCA8bGludXgubmljc0BpbnRlbC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkludGVsKFIpIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb24gRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CisKKyNkZWZpbmUgREVGQVVMVF9ERUJVR19MRVZFTF9TSElGVCAzCisKKy8qIGZvcndhcmQgZGVjbHMgKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfc2V0X2l0cl9tc2l4KHN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3Rvcik7CitzdGF0aWMgdm9pZCBpeGdiZXZmX3dyaXRlX2VpdHIoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwgaW50IHZfaWR4LAorCQkJICAgICAgIHUzMiBpdHJfcmVnKTsKKworc3RhdGljIGlubGluZSB2b2lkIGl4Z2JldmZfcmVsZWFzZV9yeF9kZXNjKHN0cnVjdCBpeGdiZV9odyAqaHcsCisJCQkJCSAgIHN0cnVjdCBpeGdiZXZmX3JpbmcgKnJ4X3JpbmcsCisJCQkJCSAgIHUzMiB2YWwpCit7CisJLyoKKwkgKiBGb3JjZSBtZW1vcnkgd3JpdGVzIHRvIGNvbXBsZXRlIGJlZm9yZSBsZXR0aW5nIGgvdworCSAqIGtub3cgdGhlcmUgYXJlIG5ldyBkZXNjcmlwdG9ycyB0byBmZXRjaC4gIChPbmx5CisJICogYXBwbGljYWJsZSBmb3Igd2Vhay1vcmRlcmVkIG1lbW9yeSBtb2RlbCBhcmNocywKKwkgKiBzdWNoIGFzIElBLTY0KS4KKwkgKi8KKwl3bWIoKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGUkRUKHJ4X3JpbmctPnJlZ19pZHgpLCB2YWwpOworfQorCisvKgorICogaXhnYmVfc2V0X2l2YXIgLSBzZXQgdGhlIElWQVIgcmVnaXN0ZXJzLCBtYXBwaW5nIGludGVycnVwdCBjYXVzZXMgdG8gdmVjdG9ycworICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gYWRhcHRlciBzdHJ1Y3QKKyAqIEBkaXJlY3Rpb246IDAgZm9yIFJ4LCAxIGZvciBUeCwgLTEgZm9yIG90aGVyIGNhdXNlcworICogQHF1ZXVlOiBxdWV1ZSB0byBtYXAgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJydXB0IHRvCisgKiBAbXNpeF92ZWN0b3I6IHRoZSB2ZWN0b3IgdG8gbWFwIHRvIHRoZSBjb3JyZXNwb25kaW5nIHF1ZXVlCisgKgorICovCitzdGF0aWMgdm9pZCBpeGdiZXZmX3NldF9pdmFyKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIHM4IGRpcmVjdGlvbiwKKwkJCSAgICAgdTggcXVldWUsIHU4IG1zaXhfdmVjdG9yKQoreworCXUzMiBpdmFyLCBpbmRleDsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWlmIChkaXJlY3Rpb24gPT0gLTEpIHsKKwkJLyogb3RoZXIgY2F1c2VzICovCisJCW1zaXhfdmVjdG9yIHw9IElYR0JFX0lWQVJfQUxMT0NfVkFMOworCQlpdmFyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZUSVZBUl9NSVNDKTsKKwkJaXZhciAmPSB+MHhGRjsKKwkJaXZhciB8PSBtc2l4X3ZlY3RvcjsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WVElWQVJfTUlTQywgaXZhcik7CisJfSBlbHNlIHsKKwkJLyogdHggb3IgcnggY2F1c2VzICovCisJCW1zaXhfdmVjdG9yIHw9IElYR0JFX0lWQVJfQUxMT0NfVkFMOworCQlpbmRleCA9ICgoMTYgKiAocXVldWUgJiAxKSkgKyAoOCAqIGRpcmVjdGlvbikpOworCQlpdmFyID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZUSVZBUihxdWV1ZSA+PiAxKSk7CisJCWl2YXIgJj0gfigweEZGIDw8IGluZGV4KTsKKwkJaXZhciB8PSAobXNpeF92ZWN0b3IgPDwgaW5kZXgpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZUSVZBUihxdWV1ZSA+PiAxKSwgaXZhcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJCSAgICAgICBzdHJ1Y3QgaXhnYmV2Zl90eF9idWZmZXIKKwkJCQkJICAgICAgICp0eF9idWZmZXJfaW5mbykKK3sKKwlpZiAodHhfYnVmZmVyX2luZm8tPmRtYSkgeworCQlpZiAodHhfYnVmZmVyX2luZm8tPm1hcHBlZF9hc19wYWdlKQorCQkJcGNpX3VubWFwX3BhZ2UoYWRhcHRlci0+cGRldiwKKwkJCQkgICAgICAgdHhfYnVmZmVyX2luZm8tPmRtYSwKKwkJCQkgICAgICAgdHhfYnVmZmVyX2luZm8tPmxlbmd0aCwKKwkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJCWVsc2UKKwkJCXBjaV91bm1hcF9zaW5nbGUoYWRhcHRlci0+cGRldiwKKwkJCQkJIHR4X2J1ZmZlcl9pbmZvLT5kbWEsCisJCQkJCSB0eF9idWZmZXJfaW5mby0+bGVuZ3RoLAorCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCXR4X2J1ZmZlcl9pbmZvLT5kbWEgPSAwOworCX0KKwlpZiAodHhfYnVmZmVyX2luZm8tPnNrYikgeworCQlkZXZfa2ZyZWVfc2tiX2FueSh0eF9idWZmZXJfaW5mby0+c2tiKTsKKwkJdHhfYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CisJfQorCXR4X2J1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gMDsKKwkvKiB0eF9idWZmZXJfaW5mbyBtdXN0IGJlIGNvbXBsZXRlbHkgc2V0IHVwIGluIHRoZSB0cmFuc21pdCBwYXRoICovCit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpeGdiZXZmX2NoZWNrX3R4X2hhbmcoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJIHN0cnVjdCBpeGdiZXZmX3JpbmcgKnR4X3JpbmcsCisJCQkJCSB1bnNpZ25lZCBpbnQgZW9wKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGhlYWQsIHRhaWw7CisKKwkvKiBEZXRlY3QgYSB0cmFuc21pdCBoYW5nIGluIGhhcmR3YXJlLCB0aGlzIHNlcmlhbGl6ZXMgdGhlCisJICogY2hlY2sgd2l0aCB0aGUgY2xlYXJpbmcgb2YgdGltZV9zdGFtcCBhbmQgbW92ZW1lbnQgb2YgZW9wICovCisJaGVhZCA9IHJlYWRsKGh3LT5od19hZGRyICsgdHhfcmluZy0+aGVhZCk7CisJdGFpbCA9IHJlYWRsKGh3LT5od19hZGRyICsgdHhfcmluZy0+dGFpbCk7CisJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSBmYWxzZTsKKwlpZiAoKGhlYWQgIT0gdGFpbCkgJiYKKwkgICAgdHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wICYmCisJICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgdHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wICsgSFopKSB7CisJCS8qIGRldGVjdGVkIFR4IHVuaXQgaGFuZyAqLworCQl1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyAqdHhfZGVzYzsKKwkJdHhfZGVzYyA9IElYR0JFX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBlb3ApOworCQlwcmludGsoS0VSTl9FUlIgIkRldGVjdGVkIFR4IFVuaXQgSGFuZ1xuIgorCQkgICAgICAgIiAgVHggUXVldWUgICAgICAgICAgICAgPCVkPlxuIgorCQkgICAgICAgIiAgVERILCBURFQgICAgICAgICAgICAgPCV4PiwgPCV4PlxuIgorCQkgICAgICAgIiAgbmV4dF90b191c2UgICAgICAgICAgPCV4PlxuIgorCQkgICAgICAgIiAgbmV4dF90b19jbGVhbiAgICAgICAgPCV4PlxuIgorCQkgICAgICAgInR4X2J1ZmZlcl9pbmZvW25leHRfdG9fY2xlYW5dXG4iCisJCSAgICAgICAiICB0aW1lX3N0YW1wICAgICAgICAgICA8JWx4PlxuIgorCQkgICAgICAgIiAgamlmZmllcyAgICAgICAgICAgICAgPCVseD5cbiIsCisJCSAgICAgICB0eF9yaW5nLT5xdWV1ZV9pbmRleCwKKwkJICAgICAgIGhlYWQsIHRhaWwsCisJCSAgICAgICB0eF9yaW5nLT5uZXh0X3RvX3VzZSwgZW9wLAorCQkgICAgICAgdHhfcmluZy0+dHhfYnVmZmVyX2luZm9bZW9wXS50aW1lX3N0YW1wLCBqaWZmaWVzKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCisjZGVmaW5lIElYR0JFX01BWF9UWERfUFdSCTE0CisjZGVmaW5lIElYR0JFX01BWF9EQVRBX1BFUl9UWEQJKDEgPDwgSVhHQkVfTUFYX1RYRF9QV1IpCisKKy8qIFR4IERlc2NyaXB0b3JzIG5lZWRlZCwgd29yc3QgY2FzZSAqLworI2RlZmluZSBUWERfVVNFX0NPVU5UKFMpICgoKFMpID4+IElYR0JFX01BWF9UWERfUFdSKSArIFwKKwkJCSAoKChTKSAmIChJWEdCRV9NQVhfREFUQV9QRVJfVFhEIC0gMSkpID8gMSA6IDApKQorI2lmZGVmIE1BWF9TS0JfRlJBR1MKKyNkZWZpbmUgREVTQ19ORUVERUQgKFRYRF9VU0VfQ09VTlQoSVhHQkVfTUFYX0RBVEFfUEVSX1RYRCkgLyogc2tiLT5kYXRhICovICsgXAorCU1BWF9TS0JfRlJBR1MgKiBUWERfVVNFX0NPVU5UKFBBR0VfU0laRSkgKyAxKSAgICAgIC8qIGZvciBjb250ZXh0ICovCisjZWxzZQorI2RlZmluZSBERVNDX05FRURFRCBUWERfVVNFX0NPVU5UKElYR0JFX01BWF9EQVRBX1BFUl9UWEQpCisjZW5kaWYKKworc3RhdGljIHZvaWQgaXhnYmV2Zl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworCisvKioKKyAqIGl4Z2JldmZfY2xlYW5fdHhfaXJxIC0gUmVjbGFpbSByZXNvdXJjZXMgYWZ0ZXIgdHJhbnNtaXQgY29tcGxldGVzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEB0eF9yaW5nOiB0eCByaW5nIHRvIGNsZWFuCisgKiovCitzdGF0aWMgYm9vbCBpeGdiZXZmX2NsZWFuX3R4X2lycShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJCSBzdHJ1Y3QgaXhnYmV2Zl9yaW5nICp0eF9yaW5nKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyAqdHhfZGVzYywgKmVvcF9kZXNjOworCXN0cnVjdCBpeGdiZXZmX3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87CisJdW5zaWduZWQgaW50IGksIGVvcCwgY291bnQgPSAwOworCXVuc2lnbmVkIGludCB0b3RhbF9ieXRlcyA9IDAsIHRvdGFsX3BhY2tldHMgPSAwOworCisJaSA9IHR4X3JpbmctPm5leHRfdG9fY2xlYW47CisJZW9wID0gdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV0ubmV4dF90b193YXRjaDsKKwllb3BfZGVzYyA9IElYR0JFX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBlb3ApOworCisJd2hpbGUgKChlb3BfZGVzYy0+d2Iuc3RhdHVzICYgY3B1X3RvX2xlMzIoSVhHQkVfVFhEX1NUQVRfREQpKSAmJgorCSAgICAgICAoY291bnQgPCB0eF9yaW5nLT53b3JrX2xpbWl0KSkgeworCQlib29sIGNsZWFuZWQgPSBmYWxzZTsKKwkJZm9yICggOyAhY2xlYW5lZDsgY291bnQrKykgeworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJCXR4X2Rlc2MgPSBJWEdCRV9UWF9ERVNDX0FEVigqdHhfcmluZywgaSk7CisJCQl0eF9idWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXTsKKwkJCWNsZWFuZWQgPSAoaSA9PSBlb3ApOworCQkJc2tiID0gdHhfYnVmZmVyX2luZm8tPnNrYjsKKworCQkJaWYgKGNsZWFuZWQgJiYgc2tiKSB7CisJCQkJdW5zaWduZWQgaW50IHNlZ3MsIGJ5dGVjb3VudDsKKworCQkJCS8qIGdzb19zZWdzIGlzIGN1cnJlbnRseSBvbmx5IHZhbGlkIGZvciB0Y3AgKi8KKwkJCQlzZWdzID0gc2tiX3NoaW5mbyhza2IpLT5nc29fc2VncyA/OiAxOworCQkJCS8qIG11bHRpcGx5IGRhdGEgY2h1bmtzIGJ5IHNpemUgb2YgaGVhZGVycyAqLworCQkJCWJ5dGVjb3VudCA9ICgoc2VncyAtIDEpICogc2tiX2hlYWRsZW4oc2tiKSkgKworCQkJCQkgICAgc2tiLT5sZW47CisJCQkJdG90YWxfcGFja2V0cyArPSBzZWdzOworCQkJCXRvdGFsX2J5dGVzICs9IGJ5dGVjb3VudDsKKwkJCX0KKworCQkJaXhnYmV2Zl91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShhZGFwdGVyLAorCQkJCQkJCSAgIHR4X2J1ZmZlcl9pbmZvKTsKKworCQkJdHhfZGVzYy0+d2Iuc3RhdHVzID0gMDsKKworCQkJaSsrOworCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQkJaSA9IDA7CisJCX0KKworCQllb3AgPSB0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXS5uZXh0X3RvX3dhdGNoOworCQllb3BfZGVzYyA9IElYR0JFX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBlb3ApOworCX0KKworCXR4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOworCisjZGVmaW5lIFRYX1dBS0VfVEhSRVNIT0xEIChERVNDX05FRURFRCAqIDIpCisJaWYgKHVubGlrZWx5KGNvdW50ICYmIG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSAmJgorCQkgICAgIChJWEdCRV9ERVNDX1VOVVNFRCh0eF9yaW5nKSA+PSBUWF9XQUtFX1RIUkVTSE9MRCkpKSB7CisJCS8qIE1ha2Ugc3VyZSB0aGF0IGFueWJvZHkgc3RvcHBpbmcgdGhlIHF1ZXVlIGFmdGVyIHRoaXMKKwkJICogc2VlcyB0aGUgbmV3IG5leHRfdG9fY2xlYW4uCisJCSAqLworCQlzbXBfbWIoKTsKKyNpZmRlZiBIQVZFX1RYX01RCisJCWlmIChfX25ldGlmX3N1YnF1ZXVlX3N0b3BwZWQobmV0ZGV2LCB0eF9yaW5nLT5xdWV1ZV9pbmRleCkgJiYKKwkJICAgICF0ZXN0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkgeworCQkJbmV0aWZfd2FrZV9zdWJxdWV1ZShuZXRkZXYsIHR4X3JpbmctPnF1ZXVlX2luZGV4KTsKKwkJCSsrYWRhcHRlci0+cmVzdGFydF9xdWV1ZTsKKwkJfQorI2Vsc2UKKwkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQobmV0ZGV2KSAmJgorCQkgICAgIXRlc3RfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKSB7CisJCQluZXRpZl93YWtlX3F1ZXVlKG5ldGRldik7CisJCQkrK2FkYXB0ZXItPnJlc3RhcnRfcXVldWU7CisJCX0KKyNlbmRpZgorCX0KKworCWlmIChhZGFwdGVyLT5kZXRlY3RfdHhfaHVuZykgeworCQlpZiAoaXhnYmV2Zl9jaGVja190eF9oYW5nKGFkYXB0ZXIsIHR4X3JpbmcsIGkpKSB7CisJCQkvKiBzY2hlZHVsZSBpbW1lZGlhdGUgcmVzZXQgaWYgd2UgYmVsaWV2ZSB3ZSBodW5nICovCisJCQlwcmludGsoS0VSTl9JTkZPCisJCQkgICAgICAgInR4IGhhbmcgJWQgZGV0ZWN0ZWQsIHJlc2V0dGluZyBhZGFwdGVyXG4iLAorCQkJICAgICAgIGFkYXB0ZXItPnR4X3RpbWVvdXRfY291bnQgKyAxKTsKKwkJCWl4Z2JldmZfdHhfdGltZW91dChhZGFwdGVyLT5uZXRkZXYpOworCQl9CisJfQorCisJLyogcmUtYXJtIHRoZSBpbnRlcnJ1cHQgKi8KKwlpZiAoKGNvdW50ID49IHR4X3JpbmctPndvcmtfbGltaXQpICYmCisJICAgICghdGVzdF9iaXQoX19JWEdCRVZGX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpKSB7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVlRFSUNTLCB0eF9yaW5nLT52X2lkeCk7CisJfQorCisJdHhfcmluZy0+dG90YWxfYnl0ZXMgKz0gdG90YWxfYnl0ZXM7CisJdHhfcmluZy0+dG90YWxfcGFja2V0cyArPSB0b3RhbF9wYWNrZXRzOworCisJYWRhcHRlci0+bmV0X3N0YXRzLnR4X2J5dGVzICs9IHRvdGFsX2J5dGVzOworCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9wYWNrZXRzICs9IHRvdGFsX3BhY2tldHM7CisKKwlyZXR1cm4gKGNvdW50IDwgdHhfcmluZy0+d29ya19saW1pdCk7Cit9CisKKy8qKgorICogaXhnYmV2Zl9yZWNlaXZlX3NrYiAtIFNlbmQgYSBjb21wbGV0ZWQgcGFja2V0IHVwIHRoZSBzdGFjaworICogQHFfdmVjdG9yOiBzdHJ1Y3R1cmUgY29udGFpbmluZyBpbnRlcnJ1cHQgYW5kIHJpbmcgaW5mb3JtYXRpb24KKyAqIEBza2I6IHBhY2tldCB0byBzZW5kIHVwCisgKiBAc3RhdHVzOiBoYXJkd2FyZSBpbmRpY2F0aW9uIG9mIHN0YXR1cyBvZiByZWNlaXZlCisgKiBAcnhfcmluZzogcnggZGVzY3JpcHRvciByaW5nIChmb3IgYSBzcGVjaWZpYyBxdWV1ZSkgdG8gc2V0dXAKKyAqIEByeF9kZXNjOiByeCBkZXNjcmlwdG9yCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZXZmX3JlY2VpdmVfc2tiKHN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvciwKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBzdGF0dXMsCisJCQkJc3RydWN0IGl4Z2JldmZfcmluZyAqcmluZywKKwkJCQl1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyAqcnhfZGVzYykKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7CisJYm9vbCBpc192bGFuID0gKHN0YXR1cyAmIElYR0JFX1JYRF9TVEFUX1ZQKTsKKwl1MTYgdGFnID0gbGUxNl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIudmxhbik7CisJaW50IHJldDsKKworCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19JTl9ORVRQT0xMKSkgeworCQlpZiAoYWRhcHRlci0+dmxncnAgJiYgaXNfdmxhbikKKwkJCXZsYW5fZ3JvX3JlY2VpdmUoJnFfdmVjdG9yLT5uYXBpLAorCQkJCQkgYWRhcHRlci0+dmxncnAsCisJCQkJCSB0YWcsIHNrYik7CisJCWVsc2UKKwkJCW5hcGlfZ3JvX3JlY2VpdmUoJnFfdmVjdG9yLT5uYXBpLCBza2IpOworCX0gZWxzZSB7CisJCWlmIChhZGFwdGVyLT52bGdycCAmJiBpc192bGFuKQorCQkJcmV0ID0gdmxhbl9od2FjY2VsX3J4KHNrYiwgYWRhcHRlci0+dmxncnAsIHRhZyk7CisJCWVsc2UKKwkJCXJldCA9IG5ldGlmX3J4KHNrYik7CisJfQorfQorCisvKioKKyAqIGl4Z2JldmZfcnhfY2hlY2tzdW0gLSBpbmRpY2F0ZSBpbiBza2IgaWYgaHcgaW5kaWNhdGVkIGEgZ29vZCBja3N1bQorICogQGFkYXB0ZXI6IGFkZHJlc3Mgb2YgYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEBzdGF0dXNfZXJyOiBoYXJkd2FyZSBpbmRpY2F0aW9uIG9mIHN0YXR1cyBvZiByZWNlaXZlCisgKiBAc2tiOiBza2IgY3VycmVudGx5IGJlaW5nIHJlY2VpdmVkIGFuZCBtb2RpZmllZAorICoqLworc3RhdGljIGlubGluZSB2b2lkIGl4Z2JldmZfcnhfY2hlY2tzdW0oc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICAgICAgdTMyIHN0YXR1c19lcnIsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCisJLyogUnggY3N1bSBkaXNhYmxlZCAqLworCWlmICghKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9DU1VNX0VOQUJMRUQpKQorCQlyZXR1cm47CisKKwkvKiBpZiBJUCBhbmQgZXJyb3IgKi8KKwlpZiAoKHN0YXR1c19lcnIgJiBJWEdCRV9SWERfU1RBVF9JUENTKSAmJgorCSAgICAoc3RhdHVzX2VyciAmIElYR0JFX1JYREFEVl9FUlJfSVBFKSkgeworCQlhZGFwdGVyLT5od19jc3VtX3J4X2Vycm9yKys7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIShzdGF0dXNfZXJyICYgSVhHQkVfUlhEX1NUQVRfTDRDUykpCisJCXJldHVybjsKKworCWlmIChzdGF0dXNfZXJyICYgSVhHQkVfUlhEQURWX0VSUl9UQ1BFKSB7CisJCWFkYXB0ZXItPmh3X2NzdW1fcnhfZXJyb3IrKzsKKwkJcmV0dXJuOworCX0KKworCS8qIEl0IG11c3QgYmUgYSBUQ1Agb3IgVURQIHBhY2tldCB3aXRoIGEgdmFsaWQgY2hlY2tzdW0gKi8KKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCWFkYXB0ZXItPmh3X2NzdW1fcnhfZ29vZCsrOworfQorCisvKioKKyAqIGl4Z2JldmZfYWxsb2NfcnhfYnVmZmVycyAtIFJlcGxhY2UgdXNlZCByZWNlaXZlIGJ1ZmZlcnM7IHBhY2tldCBzcGxpdAorICogQGFkYXB0ZXI6IGFkZHJlc3Mgb2YgYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfYWxsb2NfcnhfYnVmZmVycyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgICAgc3RydWN0IGl4Z2JldmZfcmluZyAqcnhfcmluZywKKwkJCQkgICAgIGludCBjbGVhbmVkX2NvdW50KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwl1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyAqcnhfZGVzYzsKKwlzdHJ1Y3QgaXhnYmV2Zl9yeF9idWZmZXIgKmJpOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGJ1ZnN6ID0gcnhfcmluZy0+cnhfYnVmX2xlbiArIE5FVF9JUF9BTElHTjsKKworCWkgPSByeF9yaW5nLT5uZXh0X3RvX3VzZTsKKwliaSA9ICZyeF9yaW5nLT5yeF9idWZmZXJfaW5mb1tpXTsKKworCXdoaWxlIChjbGVhbmVkX2NvdW50LS0pIHsKKwkJcnhfZGVzYyA9IElYR0JFX1JYX0RFU0NfQURWKCpyeF9yaW5nLCBpKTsKKworCQlpZiAoIWJpLT5wYWdlX2RtYSAmJgorCQkgICAgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEKSkgeworCQkJaWYgKCFiaS0+cGFnZSkgeworCQkJCWJpLT5wYWdlID0gbmV0ZGV2X2FsbG9jX3BhZ2UoYWRhcHRlci0+bmV0ZGV2KTsKKwkJCQlpZiAoIWJpLT5wYWdlKSB7CisJCQkJCWFkYXB0ZXItPmFsbG9jX3J4X3BhZ2VfZmFpbGVkKys7CisJCQkJCWdvdG8gbm9fYnVmZmVyczsKKwkJCQl9CisJCQkJYmktPnBhZ2Vfb2Zmc2V0ID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJLyogdXNlIGEgaGFsZiBwYWdlIGlmIHdlJ3JlIHJlLXVzaW5nICovCisJCQkJYmktPnBhZ2Vfb2Zmc2V0IF49IChQQUdFX1NJWkUgLyAyKTsKKwkJCX0KKworCQkJYmktPnBhZ2VfZG1hID0gcGNpX21hcF9wYWdlKHBkZXYsIGJpLT5wYWdlLAorCQkJCQkJICAgIGJpLT5wYWdlX29mZnNldCwKKwkJCQkJCSAgICAoUEFHRV9TSVpFIC8gMiksCisJCQkJCQkgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJfQorCisJCXNrYiA9IGJpLT5za2I7CisJCWlmICghc2tiKSB7CisJCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKGFkYXB0ZXItPm5ldGRldiwKKwkJCQkJCQkgICAgICAgYnVmc3opOworCisJCQlpZiAoIXNrYikgeworCQkJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZmZfZmFpbGVkKys7CisJCQkJZ290byBub19idWZmZXJzOworCQkJfQorCisJCQkvKgorCQkJICogTWFrZSBidWZmZXIgYWxpZ25tZW50IDIgYmV5b25kIGEgMTYgYnl0ZSBib3VuZGFyeQorCQkJICogdGhpcyB3aWxsIHJlc3VsdCBpbiBhIDE2IGJ5dGUgYWxpZ25lZCBJUCBoZWFkZXIgYWZ0ZXIKKwkJCSAqIHRoZSAxNCBieXRlIE1BQyBoZWFkZXIgaXMgcmVtb3ZlZAorCQkJICovCisJCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CisKKwkJCWJpLT5za2IgPSBza2I7CisJCX0KKwkJaWYgKCFiaS0+ZG1hKSB7CisJCQliaS0+ZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwgc2tiLT5kYXRhLAorCQkJCQkJIHJ4X3JpbmctPnJ4X2J1Zl9sZW4sCisJCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJfQorCQkvKiBSZWZyZXNoIHRoZSBkZXNjIGV2ZW4gaWYgYnVmZmVyX2FkZHJzIGRpZG4ndCBjaGFuZ2UgYmVjYXVzZQorCQkgKiBlYWNoIHdyaXRlLWJhY2sgZXJhc2VzIHRoaXMgaW5mby4gKi8KKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEKSB7CisJCQlyeF9kZXNjLT5yZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoYmktPnBhZ2VfZG1hKTsKKwkJCXJ4X2Rlc2MtPnJlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NChiaS0+ZG1hKTsKKwkJfSBlbHNlIHsKKwkJCXJ4X2Rlc2MtPnJlYWQucGt0X2FkZHIgPSBjcHVfdG9fbGU2NChiaS0+ZG1hKTsKKwkJfQorCisJCWkrKzsKKwkJaWYgKGkgPT0gcnhfcmluZy0+Y291bnQpCisJCQlpID0gMDsKKwkJYmkgPSAmcnhfcmluZy0+cnhfYnVmZmVyX2luZm9baV07CisJfQorCitub19idWZmZXJzOgorCWlmIChyeF9yaW5nLT5uZXh0X3RvX3VzZSAhPSBpKSB7CisJCXJ4X3JpbmctPm5leHRfdG9fdXNlID0gaTsKKwkJaWYgKGktLSA9PSAwKQorCQkJaSA9IChyeF9yaW5nLT5jb3VudCAtIDEpOworCisJCWl4Z2JldmZfcmVsZWFzZV9yeF9kZXNjKCZhZGFwdGVyLT5odywgcnhfcmluZywgaSk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXhnYmV2Zl9pcnFfZW5hYmxlX3F1ZXVlcyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJCQkgICAgIHU2NCBxbWFzaykKK3sKKwl1MzIgbWFzazsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJbWFzayA9IChxbWFzayAmIDB4RkZGRkZGRkYpOworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVlRFSU1TLCBtYXNrKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgaXhnYmV2Zl9nZXRfaGRyX2luZm8odW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MpCit7CisJcmV0dXJuIHJ4X2Rlc2MtPndiLmxvd2VyLmxvX2R3b3JkLmhzX3Jzcy5oZHJfaW5mbzsKK30KKworc3RhdGljIGlubGluZSB1MTYgaXhnYmV2Zl9nZXRfcGt0X2luZm8odW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MpCit7CisJcmV0dXJuIHJ4X2Rlc2MtPndiLmxvd2VyLmxvX2R3b3JkLmhzX3Jzcy5wa3RfaW5mbzsKK30KKworc3RhdGljIGJvb2wgaXhnYmV2Zl9jbGVhbl9yeF9pcnEoc3RydWN0IGl4Z2JldmZfcV92ZWN0b3IgKnFfdmVjdG9yLAorCQkJCSBzdHJ1Y3QgaXhnYmV2Zl9yaW5nICpyeF9yaW5nLAorCQkJCSBpbnQgKndvcmtfZG9uZSwgaW50IHdvcmtfdG9fZG8pCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwl1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyAqcnhfZGVzYywgKm5leHRfcnhkOworCXN0cnVjdCBpeGdiZXZmX3J4X2J1ZmZlciAqcnhfYnVmZmVyX2luZm8sICpuZXh0X2J1ZmZlcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGludCBpOworCXUzMiBsZW4sIHN0YXRlcnI7CisJdTE2IGhkcl9pbmZvOworCWJvb2wgY2xlYW5lZCA9IGZhbHNlOworCWludCBjbGVhbmVkX2NvdW50ID0gMDsKKwl1bnNpZ25lZCBpbnQgdG90YWxfcnhfYnl0ZXMgPSAwLCB0b3RhbF9yeF9wYWNrZXRzID0gMDsKKworCWkgPSByeF9yaW5nLT5uZXh0X3RvX2NsZWFuOworCXJ4X2Rlc2MgPSBJWEdCRV9SWF9ERVNDX0FEVigqcnhfcmluZywgaSk7CisJc3RhdGVyciA9IGxlMzJfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLnN0YXR1c19lcnJvcik7CisJcnhfYnVmZmVyX2luZm8gPSAmcnhfcmluZy0+cnhfYnVmZmVyX2luZm9baV07CisKKwl3aGlsZSAoc3RhdGVyciAmIElYR0JFX1JYRF9TVEFUX0REKSB7CisJCXUzMiB1cHBlcl9sZW4gPSAwOworCQlpZiAoKndvcmtfZG9uZSA+PSB3b3JrX3RvX2RvKQorCQkJYnJlYWs7CisJCSgqd29ya19kb25lKSsrOworCisJCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRCkgeworCQkJaGRyX2luZm8gPSBsZTE2X3RvX2NwdShpeGdiZXZmX2dldF9oZHJfaW5mbyhyeF9kZXNjKSk7CisJCQlsZW4gPSAoaGRyX2luZm8gJiBJWEdCRV9SWERBRFZfSERSQlVGTEVOX01BU0spID4+CisJCQkgICAgICAgSVhHQkVfUlhEQURWX0hEUkJVRkxFTl9TSElGVDsKKwkJCWlmIChoZHJfaW5mbyAmIElYR0JFX1JYREFEVl9TUEgpCisJCQkJYWRhcHRlci0+cnhfaGRyX3NwbGl0Kys7CisJCQlpZiAobGVuID4gSVhHQkVWRl9SWF9IRFJfU0laRSkKKwkJCQlsZW4gPSBJWEdCRVZGX1JYX0hEUl9TSVpFOworCQkJdXBwZXJfbGVuID0gbGUxNl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIubGVuZ3RoKTsKKwkJfSBlbHNlIHsKKwkJCWxlbiA9IGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLmxlbmd0aCk7CisJCX0KKwkJY2xlYW5lZCA9IHRydWU7CisJCXNrYiA9IHJ4X2J1ZmZlcl9pbmZvLT5za2I7CisJCXByZWZldGNoKHNrYi0+ZGF0YSAtIE5FVF9JUF9BTElHTik7CisJCXJ4X2J1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOworCisJCWlmIChyeF9idWZmZXJfaW5mby0+ZG1hKSB7CisJCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIHJ4X2J1ZmZlcl9pbmZvLT5kbWEsCisJCQkJCSByeF9yaW5nLT5yeF9idWZfbGVuLAorCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCXJ4X2J1ZmZlcl9pbmZvLT5kbWEgPSAwOworCQkJc2tiX3B1dChza2IsIGxlbik7CisJCX0KKworCQlpZiAodXBwZXJfbGVuKSB7CisJCQlwY2lfdW5tYXBfcGFnZShwZGV2LCByeF9idWZmZXJfaW5mby0+cGFnZV9kbWEsCisJCQkJICAgICAgIFBBR0VfU0laRSAvIDIsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlyeF9idWZmZXJfaW5mby0+cGFnZV9kbWEgPSAwOworCQkJc2tiX2ZpbGxfcGFnZV9kZXNjKHNrYiwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncywKKwkJCQkJICAgcnhfYnVmZmVyX2luZm8tPnBhZ2UsCisJCQkJCSAgIHJ4X2J1ZmZlcl9pbmZvLT5wYWdlX29mZnNldCwKKwkJCQkJICAgdXBwZXJfbGVuKTsKKworCQkJaWYgKChyeF9yaW5nLT5yeF9idWZfbGVuID4gKFBBR0VfU0laRSAvIDIpKSB8fAorCQkJICAgIChwYWdlX2NvdW50KHJ4X2J1ZmZlcl9pbmZvLT5wYWdlKSAhPSAxKSkKKwkJCQlyeF9idWZmZXJfaW5mby0+cGFnZSA9IE5VTEw7CisJCQllbHNlCisJCQkJZ2V0X3BhZ2UocnhfYnVmZmVyX2luZm8tPnBhZ2UpOworCisJCQlza2ItPmxlbiArPSB1cHBlcl9sZW47CisJCQlza2ItPmRhdGFfbGVuICs9IHVwcGVyX2xlbjsKKwkJCXNrYi0+dHJ1ZXNpemUgKz0gdXBwZXJfbGVuOworCQl9CisKKwkJaSsrOworCQlpZiAoaSA9PSByeF9yaW5nLT5jb3VudCkKKwkJCWkgPSAwOworCisJCW5leHRfcnhkID0gSVhHQkVfUlhfREVTQ19BRFYoKnJ4X3JpbmcsIGkpOworCQlwcmVmZXRjaChuZXh0X3J4ZCk7CisJCWNsZWFuZWRfY291bnQrKzsKKworCQluZXh0X2J1ZmZlciA9ICZyeF9yaW5nLT5yeF9idWZmZXJfaW5mb1tpXTsKKworCQlpZiAoIShzdGF0ZXJyICYgSVhHQkVfUlhEX1NUQVRfRU9QKSkgeworCQkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF9QU19FTkFCTEVEKSB7CisJCQkJcnhfYnVmZmVyX2luZm8tPnNrYiA9IG5leHRfYnVmZmVyLT5za2I7CisJCQkJcnhfYnVmZmVyX2luZm8tPmRtYSA9IG5leHRfYnVmZmVyLT5kbWE7CisJCQkJbmV4dF9idWZmZXItPnNrYiA9IHNrYjsKKwkJCQluZXh0X2J1ZmZlci0+ZG1hID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJc2tiLT5uZXh0ID0gbmV4dF9idWZmZXItPnNrYjsKKwkJCQlza2ItPm5leHQtPnByZXYgPSBza2I7CisJCQl9CisJCQlhZGFwdGVyLT5ub25fZW9wX2Rlc2NzKys7CisJCQlnb3RvIG5leHRfZGVzYzsKKwkJfQorCisJCS8qIEVSUl9NQVNLIHdpbGwgb25seSBoYXZlIHZhbGlkIGJpdHMgaWYgRU9QIHNldCAqLworCQlpZiAodW5saWtlbHkoc3RhdGVyciAmIElYR0JFX1JYREFEVl9FUlJfRlJBTUVfRVJSX01BU0spKSB7CisJCQlkZXZfa2ZyZWVfc2tiX2lycShza2IpOworCQkJZ290byBuZXh0X2Rlc2M7CisJCX0KKworCQlpeGdiZXZmX3J4X2NoZWNrc3VtKGFkYXB0ZXIsIHN0YXRlcnIsIHNrYik7CisKKwkJLyogcHJvYmFibHkgYSBsaXR0bGUgc2tld2VkIGR1ZSB0byByZW1vdmluZyBDUkMgKi8KKwkJdG90YWxfcnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJCXRvdGFsX3J4X3BhY2tldHMrKzsKKworCQkvKgorCQkgKiBXb3JrIGFyb3VuZCBpc3N1ZSBvZiBzb21lIHR5cGVzIG9mIFZNIHRvIFZNIGxvb3AgYmFjaworCQkgKiBwYWNrZXRzIG5vdCBnZXR0aW5nIHNwbGl0IGNvcnJlY3RseQorCQkgKi8KKwkJaWYgKHN0YXRlcnIgJiBJWEdCRV9SWERfU1RBVF9MQikgeworCQkJdTMyIGhlYWRlcl9maXh1cF9sZW4gPSBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW47CisJCQlpZiAoaGVhZGVyX2ZpeHVwX2xlbiA8IDE0KQorCQkJCXNrYl9wdXNoKHNrYiwgaGVhZGVyX2ZpeHVwX2xlbik7CisJCX0KKwkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgYWRhcHRlci0+bmV0ZGV2KTsKKworCQlpeGdiZXZmX3JlY2VpdmVfc2tiKHFfdmVjdG9yLCBza2IsIHN0YXRlcnIsIHJ4X3JpbmcsIHJ4X2Rlc2MpOworCQlhZGFwdGVyLT5uZXRkZXYtPmxhc3RfcnggPSBqaWZmaWVzOworCituZXh0X2Rlc2M6CisJCXJ4X2Rlc2MtPndiLnVwcGVyLnN0YXR1c19lcnJvciA9IDA7CisKKwkJLyogcmV0dXJuIHNvbWUgYnVmZmVycyB0byBoYXJkd2FyZSwgb25lIGF0IGEgdGltZSBpcyB0b28gc2xvdyAqLworCQlpZiAoY2xlYW5lZF9jb3VudCA+PSBJWEdCRVZGX1JYX0JVRkZFUl9XUklURSkgeworCQkJaXhnYmV2Zl9hbGxvY19yeF9idWZmZXJzKGFkYXB0ZXIsIHJ4X3JpbmcsCisJCQkJCQkgY2xlYW5lZF9jb3VudCk7CisJCQljbGVhbmVkX2NvdW50ID0gMDsKKwkJfQorCisJCS8qIHVzZSBwcmVmZXRjaGVkIHZhbHVlcyAqLworCQlyeF9kZXNjID0gbmV4dF9yeGQ7CisJCXJ4X2J1ZmZlcl9pbmZvID0gJnJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvW2ldOworCisJCXN0YXRlcnIgPSBsZTMyX3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci5zdGF0dXNfZXJyb3IpOworCX0KKworCXJ4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOworCWNsZWFuZWRfY291bnQgPSBJWEdCRV9ERVNDX1VOVVNFRChyeF9yaW5nKTsKKworCWlmIChjbGVhbmVkX2NvdW50KQorCQlpeGdiZXZmX2FsbG9jX3J4X2J1ZmZlcnMoYWRhcHRlciwgcnhfcmluZywgY2xlYW5lZF9jb3VudCk7CisKKwlyeF9yaW5nLT50b3RhbF9wYWNrZXRzICs9IHRvdGFsX3J4X3BhY2tldHM7CisJcnhfcmluZy0+dG90YWxfYnl0ZXMgKz0gdG90YWxfcnhfYnl0ZXM7CisJYWRhcHRlci0+bmV0X3N0YXRzLnJ4X2J5dGVzICs9IHRvdGFsX3J4X2J5dGVzOworCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9wYWNrZXRzICs9IHRvdGFsX3J4X3BhY2tldHM7CisKKwlyZXR1cm4gY2xlYW5lZDsKK30KKworLyoqCisgKiBpeGdiZXZmX2NsZWFuX3J4b25seSAtIG1zaXggKGFrYSBvbmUgc2hvdCkgcnggY2xlYW4gcm91dGluZQorICogQG5hcGk6IG5hcGkgc3RydWN0IHdpdGggb3VyIGRldmljZXMgaW5mbyBpbiBpdAorICogQGJ1ZGdldDogYW1vdW50IG9mIHdvcmsgZHJpdmVyIGlzIGFsbG93ZWQgdG8gZG8gdGhpcyBwYXNzLCBpbiBwYWNrZXRzCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBvcHRpbWl6ZWQgZm9yIGNsZWFuaW5nIG9uZSBxdWV1ZSBvbmx5IG9uIGEgc2luZ2xlCisgKiBxX3ZlY3RvciEhIQorICoqLworc3RhdGljIGludCBpeGdiZXZmX2NsZWFuX3J4b25seShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCit7CisJc3RydWN0IGl4Z2JldmZfcV92ZWN0b3IgKnFfdmVjdG9yID0KKwkJY29udGFpbmVyX29mKG5hcGksIHN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yLCBuYXBpKTsKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7CisJc3RydWN0IGl4Z2JldmZfcmluZyAqcnhfcmluZyA9IE5VTEw7CisJaW50IHdvcmtfZG9uZSA9IDA7CisJbG9uZyByX2lkeDsKKworCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOworCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKKworCWl4Z2JldmZfY2xlYW5fcnhfaXJxKHFfdmVjdG9yLCByeF9yaW5nLCAmd29ya19kb25lLCBidWRnZXQpOworCisJLyogSWYgYWxsIFJ4IHdvcmsgZG9uZSwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCisJaWYgKHdvcmtfZG9uZSA8IGJ1ZGdldCkgeworCQluYXBpX2NvbXBsZXRlKG5hcGkpOworCQlpZiAoYWRhcHRlci0+aXRyX3NldHRpbmcgJiAxKQorCQkJaXhnYmV2Zl9zZXRfaXRyX21zaXgocV92ZWN0b3IpOworCQlpZiAoIXRlc3RfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQkJaXhnYmV2Zl9pcnFfZW5hYmxlX3F1ZXVlcyhhZGFwdGVyLCByeF9yaW5nLT52X2lkeCk7CisJfQorCisJcmV0dXJuIHdvcmtfZG9uZTsKK30KKworLyoqCisgKiBpeGdiZXZmX2NsZWFuX3J4b25seV9tYW55IC0gbXNpeCAoYWthIG9uZSBzaG90KSByeCBjbGVhbiByb3V0aW5lCisgKiBAbmFwaTogbmFwaSBzdHJ1Y3Qgd2l0aCBvdXIgZGV2aWNlcyBpbmZvIGluIGl0CisgKiBAYnVkZ2V0OiBhbW91bnQgb2Ygd29yayBkcml2ZXIgaXMgYWxsb3dlZCB0byBkbyB0aGlzIHBhc3MsIGluIHBhY2tldHMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2xlYW4gbW9yZSB0aGFuIG9uZSByeCBxdWV1ZSBhc3NvY2lhdGVkIHdpdGggYQorICogcV92ZWN0b3IuCisgKiovCitzdGF0aWMgaW50IGl4Z2JldmZfY2xlYW5fcnhvbmx5X21hbnkoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvciA9CisJCWNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciwgbmFwaSk7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOworCXN0cnVjdCBpeGdiZXZmX3JpbmcgKnJ4X3JpbmcgPSBOVUxMOworCWludCB3b3JrX2RvbmUgPSAwLCBpOworCWxvbmcgcl9pZHg7CisJdTY0IGVuYWJsZV9tYXNrID0gMDsKKworCS8qIGF0dGVtcHQgdG8gZGlzdHJpYnV0ZSBidWRnZXQgdG8gZWFjaCBxdWV1ZSBmYWlybHksIGJ1dCBkb24ndCBhbGxvdworCSAqIHRoZSBidWRnZXQgdG8gZ28gYmVsb3cgMSBiZWNhdXNlIHdlJ2xsIGV4aXQgcG9sbGluZyAqLworCWJ1ZGdldCAvPSAocV92ZWN0b3ItPnJ4cl9jb3VudCA/OiAxKTsKKwlidWRnZXQgPSBtYXgoYnVkZ2V0LCAxKTsKKwlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnJ4cl9jb3VudDsgaSsrKSB7CisJCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKKwkJaXhnYmV2Zl9jbGVhbl9yeF9pcnEocV92ZWN0b3IsIHJ4X3JpbmcsICZ3b3JrX2RvbmUsIGJ1ZGdldCk7CisJCWVuYWJsZV9tYXNrIHw9IHJ4X3JpbmctPnZfaWR4OworCQlyX2lkeCA9IGZpbmRfbmV4dF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCisJCQkJICAgICAgcl9pZHggKyAxKTsKKwl9CisKKyNpZm5kZWYgSEFWRV9ORVRERVZfTkFQSV9MSVNUCisJaWYgKCFuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpCisJCXdvcmtfZG9uZSA9IDA7CisKKyNlbmRpZgorCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOworCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKKworCS8qIElmIGFsbCBSeCB3b3JrIGRvbmUsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAqLworCWlmICh3b3JrX2RvbmUgPCBidWRnZXQpIHsKKwkJbmFwaV9jb21wbGV0ZShuYXBpKTsKKwkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMSkKKwkJCWl4Z2JldmZfc2V0X2l0cl9tc2l4KHFfdmVjdG9yKTsKKwkJaWYgKCF0ZXN0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJCWl4Z2JldmZfaXJxX2VuYWJsZV9xdWV1ZXMoYWRhcHRlciwgZW5hYmxlX21hc2spOworCX0KKworCXJldHVybiB3b3JrX2RvbmU7Cit9CisKKworLyoqCisgKiBpeGdiZXZmX2NvbmZpZ3VyZV9tc2l4IC0gQ29uZmlndXJlIE1TSS1YIGhhcmR3YXJlCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBpeGdiZXZmX2NvbmZpZ3VyZV9tc2l4IHNldHMgdXAgdGhlIGhhcmR3YXJlIHRvIHByb3Blcmx5IGdlbmVyYXRlIE1TSS1YCisgKiBpbnRlcnJ1cHRzLgorICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl9jb25maWd1cmVfbXNpeChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvcjsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWludCBpLCBqLCBxX3ZlY3RvcnMsIHZfaWR4LCByX2lkeDsKKwl1MzIgbWFzazsKKworCXFfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOworCisJLyoKKwkgKiBQb3B1bGF0ZSB0aGUgSVZBUiB0YWJsZSBhbmQgc2V0IHRoZSBJVFIgdmFsdWVzIHRvIHRoZQorCSAqIGNvcnJlc3BvbmRpbmcgcmVnaXN0ZXIuCisJICovCisJZm9yICh2X2lkeCA9IDA7IHZfaWR4IDwgcV92ZWN0b3JzOyB2X2lkeCsrKSB7CisJCXFfdmVjdG9yID0gYWRhcHRlci0+cV92ZWN0b3Jbdl9pZHhdOworCQkvKiBYWFggZm9yX2VhY2hfc2V0X2JpdCguLi4pICovCisJCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsCisJCQkJICAgICAgIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMpOworCisJCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+cnhyX2NvdW50OyBpKyspIHsKKwkJCWogPSBhZGFwdGVyLT5yeF9yaW5nW3JfaWR4XS5yZWdfaWR4OworCQkJaXhnYmV2Zl9zZXRfaXZhcihhZGFwdGVyLCAwLCBqLCB2X2lkeCk7CisJCQlyX2lkeCA9IGZpbmRfbmV4dF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsCisJCQkJCSAgICAgIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCisJCQkJCSAgICAgIHJfaWR4ICsgMSk7CisJCX0KKwkJcl9pZHggPSBmaW5kX2ZpcnN0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwKKwkJCQkgICAgICAgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyk7CisKKwkJZm9yIChpID0gMDsgaSA8IHFfdmVjdG9yLT50eHJfY291bnQ7IGkrKykgeworCQkJaiA9IGFkYXB0ZXItPnR4X3Jpbmdbcl9pZHhdLnJlZ19pZHg7CisJCQlpeGdiZXZmX3NldF9pdmFyKGFkYXB0ZXIsIDEsIGosIHZfaWR4KTsKKwkJCXJfaWR4ID0gZmluZF9uZXh0X2JpdChxX3ZlY3Rvci0+dHhyX2lkeCwKKwkJCQkJICAgICAgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKKwkJCQkJICAgICAgcl9pZHggKyAxKTsKKwkJfQorCisJCS8qIGlmIHRoaXMgaXMgYSB0eCBvbmx5IHZlY3RvciBoYWx2ZSB0aGUgaW50ZXJydXB0IHJhdGUgKi8KKwkJaWYgKHFfdmVjdG9yLT50eHJfY291bnQgJiYgIXFfdmVjdG9yLT5yeHJfY291bnQpCisJCQlxX3ZlY3Rvci0+ZWl0ciA9IChhZGFwdGVyLT5laXRyX3BhcmFtID4+IDEpOworCQllbHNlIGlmIChxX3ZlY3Rvci0+cnhyX2NvdW50KQorCQkJLyogcnggb25seSAqLworCQkJcV92ZWN0b3ItPmVpdHIgPSBhZGFwdGVyLT5laXRyX3BhcmFtOworCisJCWl4Z2JldmZfd3JpdGVfZWl0cihhZGFwdGVyLCB2X2lkeCwgcV92ZWN0b3ItPmVpdHIpOworCX0KKworCWl4Z2JldmZfc2V0X2l2YXIoYWRhcHRlciwgLTEsIDEsIHZfaWR4KTsKKworCS8qIHNldCB1cCB0byBhdXRvY2xlYXIgdGltZXIsIGFuZCB0aGUgdmVjdG9ycyAqLworCW1hc2sgPSBJWEdCRV9FSU1TX0VOQUJMRV9NQVNLOworCW1hc2sgJj0gfklYR0JFX0VJTVNfT1RIRVI7CisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WVEVJQUMsIG1hc2spOworfQorCitlbnVtIGxhdGVuY3lfcmFuZ2UgeworCWxvd2VzdF9sYXRlbmN5ID0gMCwKKwlsb3dfbGF0ZW5jeSA9IDEsCisJYnVsa19sYXRlbmN5ID0gMiwKKwlsYXRlbmN5X2ludmFsaWQgPSAyNTUKK307CisKKy8qKgorICogaXhnYmV2Zl91cGRhdGVfaXRyIC0gdXBkYXRlIHRoZSBkeW5hbWljIElUUiB2YWx1ZSBiYXNlZCBvbiBzdGF0aXN0aWNzCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBhZGFwdGVyCisgKiBAZWl0cjogZWl0ciBzZXR0aW5nIChpbnRzIHBlciBzZWMpIHRvIGdpdmUgbGFzdCB0aW1lc2xpY2UKKyAqIEBpdHJfc2V0dGluZzogY3VycmVudCB0aHJvdHRsZSByYXRlIGluIGludHMvc2Vjb25kCisgKiBAcGFja2V0czogdGhlIG51bWJlciBvZiBwYWNrZXRzIGR1cmluZyB0aGlzIG1lYXN1cmVtZW50IGludGVydmFsCisgKiBAYnl0ZXM6IHRoZSBudW1iZXIgb2YgYnl0ZXMgZHVyaW5nIHRoaXMgbWVhc3VyZW1lbnQgaW50ZXJ2YWwKKyAqCisgKiAgICAgIFN0b3JlcyBhIG5ldyBJVFIgdmFsdWUgYmFzZWQgb24gcGFja2V0cyBhbmQgYnl0ZQorICogICAgICBjb3VudHMgZHVyaW5nIHRoZSBsYXN0IGludGVycnVwdC4gIFRoZSBhZHZhbnRhZ2Ugb2YgcGVyIGludGVycnVwdAorICogICAgICBjb21wdXRhdGlvbiBpcyBmYXN0ZXIgdXBkYXRlcyBhbmQgbW9yZSBhY2N1cmF0ZSBJVFIgZm9yIHRoZSBjdXJyZW50CisgKiAgICAgIHRyYWZmaWMgcGF0dGVybi4gIENvbnN0YW50cyBpbiB0aGlzIGZ1bmN0aW9uIHdlcmUgY29tcHV0ZWQKKyAqICAgICAgYmFzZWQgb24gdGhlb3JldGljYWwgbWF4aW11bSB3aXJlIHNwZWVkIGFuZCB0aHJlc2hvbGRzIHdlcmUgc2V0IGJhc2VkCisgKiAgICAgIG9uIHRlc3RpbmcgZGF0YSBhcyB3ZWxsIGFzIGF0dGVtcHRpbmcgdG8gbWluaW1pemUgcmVzcG9uc2UgdGltZQorICogICAgICB3aGlsZSBpbmNyZWFzaW5nIGJ1bGsgdGhyb3VnaHB1dC4KKyAqKi8KK3N0YXRpYyB1OCBpeGdiZXZmX3VwZGF0ZV9pdHIoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgdTMyIGVpdHIsIHU4IGl0cl9zZXR0aW5nLAorCQkJICAgICBpbnQgcGFja2V0cywgaW50IGJ5dGVzKQoreworCXVuc2lnbmVkIGludCByZXR2YWwgPSBpdHJfc2V0dGluZzsKKwl1MzIgdGltZXBhc3NlZF91czsKKwl1NjQgYnl0ZXNfcGVyaW50OworCisJaWYgKHBhY2tldHMgPT0gMCkKKwkJZ290byB1cGRhdGVfaXRyX2RvbmU7CisKKworCS8qIHNpbXBsZSB0aHJvdHRsZXJhdGUgbWFuYWdlbWVudAorCSAqICAgIDAtMjBNQi9zIGxvd2VzdCAoMTAwMDAwIGludHMvcykKKwkgKiAgIDIwLTEwME1CL3MgbG93ICAgKDIwMDAwIGludHMvcykKKwkgKiAgMTAwLTEyNDlNQi9zIGJ1bGsgKDgwMDAgaW50cy9zKQorCSAqLworCS8qIHdoYXQgd2FzIGxhc3QgaW50ZXJydXB0IHRpbWVzbGljZT8gKi8KKwl0aW1lcGFzc2VkX3VzID0gMTAwMDAwMC9laXRyOworCWJ5dGVzX3BlcmludCA9IGJ5dGVzIC8gdGltZXBhc3NlZF91czsgLyogYnl0ZXMvdXNlYyAqLworCisJc3dpdGNoIChpdHJfc2V0dGluZykgeworCWNhc2UgbG93ZXN0X2xhdGVuY3k6CisJCWlmIChieXRlc19wZXJpbnQgPiBhZGFwdGVyLT5laXRyX2xvdykKKwkJCXJldHZhbCA9IGxvd19sYXRlbmN5OworCQlicmVhazsKKwljYXNlIGxvd19sYXRlbmN5OgorCQlpZiAoYnl0ZXNfcGVyaW50ID4gYWRhcHRlci0+ZWl0cl9oaWdoKQorCQkJcmV0dmFsID0gYnVsa19sYXRlbmN5OworCQllbHNlIGlmIChieXRlc19wZXJpbnQgPD0gYWRhcHRlci0+ZWl0cl9sb3cpCisJCQlyZXR2YWwgPSBsb3dlc3RfbGF0ZW5jeTsKKwkJYnJlYWs7CisJY2FzZSBidWxrX2xhdGVuY3k6CisJCWlmIChieXRlc19wZXJpbnQgPD0gYWRhcHRlci0+ZWl0cl9oaWdoKQorCQkJcmV0dmFsID0gbG93X2xhdGVuY3k7CisJCWJyZWFrOworCX0KKwordXBkYXRlX2l0cl9kb25lOgorCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICogaXhnYmV2Zl93cml0ZV9laXRyIC0gd3JpdGUgVlRFSVRSIHJlZ2lzdGVyIGluIGhhcmR3YXJlIHNwZWNpZmljIHdheQorICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gYWRhcHRlciBzdHJ1Y3QKKyAqIEB2X2lkeDogdmVjdG9yIGluZGV4IGludG8gcV92ZWN0b3IgYXJyYXkKKyAqIEBpdHJfcmVnOiBuZXcgdmFsdWUgdG8gYmUgd3JpdHRlbiBpbiAqcmVnaXN0ZXIqIGZvcm1hdCwgbm90IGludHMvcworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgbWFkZSB0byBiZSBjYWxsZWQgYnkgZXRodG9vbCBhbmQgYnkgdGhlIGRyaXZlcgorICogd2hlbiBpdCBuZWVkcyB0byB1cGRhdGUgVlRFSVRSIHJlZ2lzdGVycyBhdCBydW50aW1lLiAgSGFyZHdhcmUKKyAqIHNwZWNpZmljIHF1aXJrcy9kaWZmZXJlbmNlcyBhcmUgdGFrZW4gY2FyZSBvZiBoZXJlLgorICovCitzdGF0aWMgdm9pZCBpeGdiZXZmX3dyaXRlX2VpdHIoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwgaW50IHZfaWR4LAorCQkJICAgICAgIHUzMiBpdHJfcmVnKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwlpdHJfcmVnID0gRUlUUl9JTlRTX1BFUl9TRUNfVE9fUkVHKGl0cl9yZWcpOworCisJLyoKKwkgKiBzZXQgdGhlIFdESVMgYml0IHRvIG5vdCBjbGVhciB0aGUgdGltZXIgYml0cyBhbmQgY2F1c2UgYW4KKwkgKiBpbW1lZGlhdGUgYXNzZXJ0aW9uIG9mIHRoZSBpbnRlcnJ1cHQKKwkgKi8KKwlpdHJfcmVnIHw9IElYR0JFX0VJVFJfQ05UX1dESVM7CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZURUlUUih2X2lkeCksIGl0cl9yZWcpOworfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX3NldF9pdHJfbXNpeChzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciAqcV92ZWN0b3IpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IHFfdmVjdG9yLT5hZGFwdGVyOworCXUzMiBuZXdfaXRyOworCXU4IGN1cnJlbnRfaXRyLCByZXRfaXRyOworCWludCBpLCByX2lkeCwgdl9pZHggPSBxX3ZlY3Rvci0+dl9pZHg7CisJc3RydWN0IGl4Z2JldmZfcmluZyAqcnhfcmluZywgKnR4X3Jpbmc7CisKKwlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT50eHJfaWR4LCBhZGFwdGVyLT5udW1fdHhfcXVldWVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnR4cl9jb3VudDsgaSsrKSB7CisJCXR4X3JpbmcgPSAmKGFkYXB0ZXItPnR4X3Jpbmdbcl9pZHhdKTsKKwkJcmV0X2l0ciA9IGl4Z2JldmZfdXBkYXRlX2l0cihhZGFwdGVyLCBxX3ZlY3Rvci0+ZWl0ciwKKwkJCQkJICAgICBxX3ZlY3Rvci0+dHhfaXRyLAorCQkJCQkgICAgIHR4X3JpbmctPnRvdGFsX3BhY2tldHMsCisJCQkJCSAgICAgdHhfcmluZy0+dG90YWxfYnl0ZXMpOworCQkvKiBpZiB0aGUgcmVzdWx0IGZvciB0aGlzIHF1ZXVlIHdvdWxkIGRlY3JlYXNlIGludGVycnVwdAorCQkgKiByYXRlIGZvciB0aGlzIHZlY3RvciB0aGVuIHVzZSB0aGF0IHJlc3VsdCAqLworCQlxX3ZlY3Rvci0+dHhfaXRyID0gKChxX3ZlY3Rvci0+dHhfaXRyID4gcmV0X2l0cikgPworCQkJCSAgICBxX3ZlY3Rvci0+dHhfaXRyIC0gMSA6IHJldF9pdHIpOworCQlyX2lkeCA9IGZpbmRfbmV4dF9iaXQocV92ZWN0b3ItPnR4cl9pZHgsIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMsCisJCQkJICAgICAgcl9pZHggKyAxKTsKKwl9CisKKwlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnJ4cl9jb3VudDsgaSsrKSB7CisJCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKKwkJcmV0X2l0ciA9IGl4Z2JldmZfdXBkYXRlX2l0cihhZGFwdGVyLCBxX3ZlY3Rvci0+ZWl0ciwKKwkJCQkJICAgICBxX3ZlY3Rvci0+cnhfaXRyLAorCQkJCQkgICAgIHJ4X3JpbmctPnRvdGFsX3BhY2tldHMsCisJCQkJCSAgICAgcnhfcmluZy0+dG90YWxfYnl0ZXMpOworCQkvKiBpZiB0aGUgcmVzdWx0IGZvciB0aGlzIHF1ZXVlIHdvdWxkIGRlY3JlYXNlIGludGVycnVwdAorCQkgKiByYXRlIGZvciB0aGlzIHZlY3RvciB0aGVuIHVzZSB0aGF0IHJlc3VsdCAqLworCQlxX3ZlY3Rvci0+cnhfaXRyID0gKChxX3ZlY3Rvci0+cnhfaXRyID4gcmV0X2l0cikgPworCQkJCSAgICBxX3ZlY3Rvci0+cnhfaXRyIC0gMSA6IHJldF9pdHIpOworCQlyX2lkeCA9IGZpbmRfbmV4dF9iaXQocV92ZWN0b3ItPnJ4cl9pZHgsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsCisJCQkJICAgICAgcl9pZHggKyAxKTsKKwl9CisKKwljdXJyZW50X2l0ciA9IG1heChxX3ZlY3Rvci0+cnhfaXRyLCBxX3ZlY3Rvci0+dHhfaXRyKTsKKworCXN3aXRjaCAoY3VycmVudF9pdHIpIHsKKwkvKiBjb3VudHMgYW5kIHBhY2tldHMgaW4gdXBkYXRlX2l0ciBhcmUgZGVwZW5kZW50IG9uIHRoZXNlIG51bWJlcnMgKi8KKwljYXNlIGxvd2VzdF9sYXRlbmN5OgorCQluZXdfaXRyID0gMTAwMDAwOworCQlicmVhazsKKwljYXNlIGxvd19sYXRlbmN5OgorCQluZXdfaXRyID0gMjAwMDA7IC8qIGFrYSBod2l0ciA9IH4yMDAgKi8KKwkJYnJlYWs7CisJY2FzZSBidWxrX2xhdGVuY3k6CisJZGVmYXVsdDoKKwkJbmV3X2l0ciA9IDgwMDA7CisJCWJyZWFrOworCX0KKworCWlmIChuZXdfaXRyICE9IHFfdmVjdG9yLT5laXRyKSB7CisJCXUzMiBpdHJfcmVnOworCisJCS8qIHNhdmUgdGhlIGFsZ29yaXRobSB2YWx1ZSBoZXJlLCBub3QgdGhlIHNtb290aGVkIG9uZSAqLworCQlxX3ZlY3Rvci0+ZWl0ciA9IG5ld19pdHI7CisJCS8qIGRvIGFuIGV4cG9uZW50aWFsIHNtb290aGluZyAqLworCQluZXdfaXRyID0gKChxX3ZlY3Rvci0+ZWl0ciAqIDkwKS8xMDApICsgKChuZXdfaXRyICogMTApLzEwMCk7CisJCWl0cl9yZWcgPSBFSVRSX0lOVFNfUEVSX1NFQ19UT19SRUcobmV3X2l0cik7CisJCWl4Z2JldmZfd3JpdGVfZWl0cihhZGFwdGVyLCB2X2lkeCwgaXRyX3JlZyk7CisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaXhnYmV2Zl9tc2l4X21ieChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkYXRhOworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGVpY3I7CisJdTMyIG1zZzsKKworCWVpY3IgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVlRFSUNTKTsKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZURUlDUiwgZWljcik7CisKKwlody0+bWJ4Lm9wcy5yZWFkKGh3LCAmbXNnLCAxKTsKKworCWlmICgobXNnICYgSVhHQkVfTUJWRklDUl9WRlJFUV9NQVNLKSA9PSBJWEdCRV9QRl9DT05UUk9MX01TRykKKwkJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwKKwkJCSAgcm91bmRfamlmZmllcyhqaWZmaWVzICsgMTApKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IGl4Z2JldmZfbXNpeF9jbGVhbl90eChpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvciA9IGRhdGE7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAgKmFkYXB0ZXIgPSBxX3ZlY3Rvci0+YWRhcHRlcjsKKwlzdHJ1Y3QgaXhnYmV2Zl9yaW5nICAgICAqdHhfcmluZzsKKwlpbnQgaSwgcl9pZHg7CisKKwlpZiAoIXFfdmVjdG9yLT50eHJfY291bnQpCisJCXJldHVybiBJUlFfSEFORExFRDsKKworCXJfaWR4ID0gZmluZF9maXJzdF9iaXQocV92ZWN0b3ItPnR4cl9pZHgsIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMpOworCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3Rvci0+dHhyX2NvdW50OyBpKyspIHsKKwkJdHhfcmluZyA9ICYoYWRhcHRlci0+dHhfcmluZ1tyX2lkeF0pOworCQl0eF9yaW5nLT50b3RhbF9ieXRlcyA9IDA7CisJCXR4X3JpbmctPnRvdGFsX3BhY2tldHMgPSAwOworCQlpeGdiZXZmX2NsZWFuX3R4X2lycShhZGFwdGVyLCB0eF9yaW5nKTsKKwkJcl9pZHggPSBmaW5kX25leHRfYml0KHFfdmVjdG9yLT50eHJfaWR4LCBhZGFwdGVyLT5udW1fdHhfcXVldWVzLAorCQkJCSAgICAgIHJfaWR4ICsgMSk7CisJfQorCisJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nICYgMSkKKwkJaXhnYmV2Zl9zZXRfaXRyX21zaXgocV92ZWN0b3IpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIGl4Z2JlX21zaXhfY2xlYW5fcnggLSBzaW5nbGUgdW5zaGFyZWQgdmVjdG9yIHJ4IGNsZWFuIChhbGwgcXVldWVzKQorICogQGlycTogdW51c2VkCisgKiBAZGF0YTogcG9pbnRlciB0byBvdXIgcV92ZWN0b3Igc3RydWN0IGZvciB0aGlzIGludGVycnVwdCB2ZWN0b3IKKyAqKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpeGdiZXZmX21zaXhfY2xlYW5fcngoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciAqcV92ZWN0b3IgPSBkYXRhOworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgICphZGFwdGVyID0gcV92ZWN0b3ItPmFkYXB0ZXI7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgaXhnYmV2Zl9yaW5nICAqcnhfcmluZzsKKwlpbnQgcl9pZHg7CisJaW50IGk7CisKKwlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgcV92ZWN0b3ItPnJ4cl9jb3VudDsgaSsrKSB7CisJCXJ4X3JpbmcgPSAmKGFkYXB0ZXItPnJ4X3Jpbmdbcl9pZHhdKTsKKwkJcnhfcmluZy0+dG90YWxfYnl0ZXMgPSAwOworCQlyeF9yaW5nLT50b3RhbF9wYWNrZXRzID0gMDsKKwkJcl9pZHggPSBmaW5kX25leHRfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzLAorCQkJCSAgICAgIHJfaWR4ICsgMSk7CisJfQorCisJaWYgKCFxX3ZlY3Rvci0+cnhyX2NvdW50KQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisKKwlyX2lkeCA9IGZpbmRfZmlyc3RfYml0KHFfdmVjdG9yLT5yeHJfaWR4LCBhZGFwdGVyLT5udW1fcnhfcXVldWVzKTsKKwlyeF9yaW5nID0gJihhZGFwdGVyLT5yeF9yaW5nW3JfaWR4XSk7CisJLyogZGlzYWJsZSBpbnRlcnJ1cHRzIG9uIHRoaXMgdmVjdG9yIG9ubHkgKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZURUlNQywgcnhfcmluZy0+dl9pZHgpOworCW5hcGlfc2NoZWR1bGUoJnFfdmVjdG9yLT5uYXBpKTsKKworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaXhnYmV2Zl9tc2l4X2NsZWFuX21hbnkoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlpeGdiZXZmX21zaXhfY2xlYW5fcngoaXJxLCBkYXRhKTsKKwlpeGdiZXZmX21zaXhfY2xlYW5fdHgoaXJxLCBkYXRhKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1hcF92ZWN0b3JfdG9fcnhxKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmEsIGludCB2X2lkeCwKKwkJCQkgICAgIGludCByX2lkeCkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciAqcV92ZWN0b3IgPSBhLT5xX3ZlY3Rvclt2X2lkeF07CisKKwlzZXRfYml0KHJfaWR4LCBxX3ZlY3Rvci0+cnhyX2lkeCk7CisJcV92ZWN0b3ItPnJ4cl9jb3VudCsrOworCWEtPnJ4X3Jpbmdbcl9pZHhdLnZfaWR4ID0gMSA8PCB2X2lkeDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG1hcF92ZWN0b3JfdG9fdHhxKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmEsIGludCB2X2lkeCwKKwkJCQkgICAgIGludCB0X2lkeCkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciAqcV92ZWN0b3IgPSBhLT5xX3ZlY3Rvclt2X2lkeF07CisKKwlzZXRfYml0KHRfaWR4LCBxX3ZlY3Rvci0+dHhyX2lkeCk7CisJcV92ZWN0b3ItPnR4cl9jb3VudCsrOworCWEtPnR4X3JpbmdbdF9pZHhdLnZfaWR4ID0gMSA8PCB2X2lkeDsKK30KKworLyoqCisgKiBpeGdiZXZmX21hcF9yaW5nc190b192ZWN0b3JzIC0gTWFwcyBkZXNjcmlwdG9yIHJpbmdzIHRvIHZlY3RvcnMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZSB0byBpbml0aWFsaXplCisgKgorICogVGhpcyBmdW5jdGlvbiBtYXBzIGRlc2NyaXB0b3IgcmluZ3MgdG8gdGhlIHF1ZXVlLXNwZWNpZmljIHZlY3RvcnMKKyAqIHdlIHdlcmUgYWxsb3R0ZWQgdGhyb3VnaCB0aGUgTVNJLVggZW5hYmxpbmcgY29kZS4gIElkZWFsbHksIHdlJ2QgaGF2ZQorICogb25lIHZlY3RvciBwZXIgcmluZy9xdWV1ZSwgYnV0IG9uIGEgY29uc3RyYWluZWQgdmVjdG9yIGJ1ZGdldCwgd2UKKyAqIGdyb3VwIHRoZSByaW5ncyBhcyAiZWZmaWNpZW50bHkiIGFzIHBvc3NpYmxlLiAgWW91IHdvdWxkIGFkZCBuZXcKKyAqIG1hcHBpbmcgY29uZmlndXJhdGlvbnMgaW4gaGVyZS4KKyAqKi8KK3N0YXRpYyBpbnQgaXhnYmV2Zl9tYXBfcmluZ3NfdG9fdmVjdG9ycyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBxX3ZlY3RvcnM7CisJaW50IHZfc3RhcnQgPSAwOworCWludCByeHJfaWR4ID0gMCwgdHhyX2lkeCA9IDA7CisJaW50IHJ4cl9yZW1haW5pbmcgPSBhZGFwdGVyLT5udW1fcnhfcXVldWVzOworCWludCB0eHJfcmVtYWluaW5nID0gYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsKKwlpbnQgaSwgajsKKwlpbnQgcnFwdiwgdHFwdjsKKwlpbnQgZXJyID0gMDsKKworCXFfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOworCisJLyoKKwkgKiBUaGUgaWRlYWwgY29uZmlndXJhdGlvbi4uLgorCSAqIFdlIGhhdmUgZW5vdWdoIHZlY3RvcnMgdG8gbWFwIG9uZSBwZXIgcXVldWUuCisJICovCisJaWYgKHFfdmVjdG9ycyA9PSBhZGFwdGVyLT5udW1fcnhfcXVldWVzICsgYWRhcHRlci0+bnVtX3R4X3F1ZXVlcykgeworCQlmb3IgKDsgcnhyX2lkeCA8IHJ4cl9yZW1haW5pbmc7IHZfc3RhcnQrKywgcnhyX2lkeCsrKQorCQkJbWFwX3ZlY3Rvcl90b19yeHEoYWRhcHRlciwgdl9zdGFydCwgcnhyX2lkeCk7CisKKwkJZm9yICg7IHR4cl9pZHggPCB0eHJfcmVtYWluaW5nOyB2X3N0YXJ0KyssIHR4cl9pZHgrKykKKwkJCW1hcF92ZWN0b3JfdG9fdHhxKGFkYXB0ZXIsIHZfc3RhcnQsIHR4cl9pZHgpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIElmIHdlIGRvbid0IGhhdmUgZW5vdWdoIHZlY3RvcnMgZm9yIGEgMS10by0xCisJICogbWFwcGluZywgd2UnbGwgaGF2ZSB0byBncm91cCB0aGVtIHNvIHRoZXJlIGFyZQorCSAqIG11bHRpcGxlIHF1ZXVlcyBwZXIgdmVjdG9yLgorCSAqLworCS8qIFJlLWFkanVzdGluZyAqcXB2IHRha2VzIGNhcmUgb2YgdGhlIHJlbWFpbmRlci4gKi8KKwlmb3IgKGkgPSB2X3N0YXJ0OyBpIDwgcV92ZWN0b3JzOyBpKyspIHsKKwkJcnFwdiA9IERJVl9ST1VORF9VUChyeHJfcmVtYWluaW5nLCBxX3ZlY3RvcnMgLSBpKTsKKwkJZm9yIChqID0gMDsgaiA8IHJxcHY7IGorKykgeworCQkJbWFwX3ZlY3Rvcl90b19yeHEoYWRhcHRlciwgaSwgcnhyX2lkeCk7CisJCQlyeHJfaWR4Kys7CisJCQlyeHJfcmVtYWluaW5nLS07CisJCX0KKwl9CisJZm9yIChpID0gdl9zdGFydDsgaSA8IHFfdmVjdG9yczsgaSsrKSB7CisJCXRxcHYgPSBESVZfUk9VTkRfVVAodHhyX3JlbWFpbmluZywgcV92ZWN0b3JzIC0gaSk7CisJCWZvciAoaiA9IDA7IGogPCB0cXB2OyBqKyspIHsKKwkJCW1hcF92ZWN0b3JfdG9fdHhxKGFkYXB0ZXIsIGksIHR4cl9pZHgpOworCQkJdHhyX2lkeCsrOworCQkJdHhyX3JlbWFpbmluZy0tOworCQl9CisJfQorCitvdXQ6CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBpeGdiZXZmX3JlcXVlc3RfbXNpeF9pcnFzIC0gSW5pdGlhbGl6ZSBNU0ktWCBpbnRlcnJ1cHRzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBpeGdiZXZmX3JlcXVlc3RfbXNpeF9pcnFzIGFsbG9jYXRlcyBNU0ktWCB2ZWN0b3JzIGFuZCByZXF1ZXN0cworICogaW50ZXJydXB0cyBmcm9tIHRoZSBrZXJuZWwuCisgKiovCitzdGF0aWMgaW50IGl4Z2JldmZfcmVxdWVzdF9tc2l4X2lycXMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWlycXJldHVybl90ICgqaGFuZGxlcikoaW50LCB2b2lkICopOworCWludCBpLCB2ZWN0b3IsIHFfdmVjdG9ycywgZXJyOworCWludCByaSA9IDAsIHRpID0gMDsKKworCS8qIERlY3JlbWVudCBmb3IgT3RoZXIgYW5kIFRDUCBUaW1lciB2ZWN0b3JzICovCisJcV92ZWN0b3JzID0gYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlM7CisKKyNkZWZpbmUgU0VUX0hBTkRMRVIoX3YpICgoKF92KS0+cnhyX2NvdW50ICYmIChfdiktPnR4cl9jb3VudCkgICAgICAgICAgXAorCQkJCQkgID8gJml4Z2JldmZfbXNpeF9jbGVhbl9tYW55IDogXAorCQkJICAoX3YpLT5yeHJfY291bnQgPyAmaXhnYmV2Zl9tc2l4X2NsZWFuX3J4ICAgOiBcCisJCQkgIChfdiktPnR4cl9jb3VudCA/ICZpeGdiZXZmX21zaXhfY2xlYW5fdHggICA6IFwKKwkJCSAgTlVMTCkKKwlmb3IgKHZlY3RvciA9IDA7IHZlY3RvciA8IHFfdmVjdG9yczsgdmVjdG9yKyspIHsKKwkJaGFuZGxlciA9IFNFVF9IQU5ETEVSKGFkYXB0ZXItPnFfdmVjdG9yW3ZlY3Rvcl0pOworCisJCWlmIChoYW5kbGVyID09ICZpeGdiZXZmX21zaXhfY2xlYW5fcngpIHsKKwkJCXNwcmludGYoYWRhcHRlci0+bmFtZVt2ZWN0b3JdLCAiJXMtJXMtJWQiLAorCQkJCW5ldGRldi0+bmFtZSwgInJ4IiwgcmkrKyk7CisJCX0gZWxzZSBpZiAoaGFuZGxlciA9PSAmaXhnYmV2Zl9tc2l4X2NsZWFuX3R4KSB7CisJCQlzcHJpbnRmKGFkYXB0ZXItPm5hbWVbdmVjdG9yXSwgIiVzLSVzLSVkIiwKKwkJCQluZXRkZXYtPm5hbWUsICJ0eCIsIHRpKyspOworCQl9IGVsc2UgaWYgKGhhbmRsZXIgPT0gJml4Z2JldmZfbXNpeF9jbGVhbl9tYW55KSB7CisJCQlzcHJpbnRmKGFkYXB0ZXItPm5hbWVbdmVjdG9yXSwgIiVzLSVzLSVkIiwKKwkJCQluZXRkZXYtPm5hbWUsICJUeFJ4IiwgdmVjdG9yKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHNraXAgdGhpcyB1bnVzZWQgcV92ZWN0b3IgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWVyciA9IHJlcXVlc3RfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1t2ZWN0b3JdLnZlY3RvciwKKwkJCQkgIGhhbmRsZXIsIDAsIGFkYXB0ZXItPm5hbWVbdmVjdG9yXSwKKwkJCQkgIGFkYXB0ZXItPnFfdmVjdG9yW3ZlY3Rvcl0pOworCQlpZiAoZXJyKSB7CisJCQlod19kYmcoJmFkYXB0ZXItPmh3LAorCQkJICAgICAgICJyZXF1ZXN0X2lycSBmYWlsZWQgZm9yIE1TSVggaW50ZXJydXB0ICIKKwkJCSAgICAgICAiRXJyb3I6ICVkXG4iLCBlcnIpOworCQkJZ290byBmcmVlX3F1ZXVlX2lycXM7CisJCX0KKwl9CisKKwlzcHJpbnRmKGFkYXB0ZXItPm5hbWVbdmVjdG9yXSwgIiVzOm1ieCIsIG5ldGRldi0+bmFtZSk7CisJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+bXNpeF9lbnRyaWVzW3ZlY3Rvcl0udmVjdG9yLAorCQkJICAmaXhnYmV2Zl9tc2l4X21ieCwgMCwgYWRhcHRlci0+bmFtZVt2ZWN0b3JdLCBuZXRkZXYpOworCWlmIChlcnIpIHsKKwkJaHdfZGJnKCZhZGFwdGVyLT5odywKKwkJICAgICAgICJyZXF1ZXN0X2lycSBmb3IgbXNpeF9tYnggZmFpbGVkOiAlZFxuIiwgZXJyKTsKKwkJZ290byBmcmVlX3F1ZXVlX2lycXM7CisJfQorCisJcmV0dXJuIDA7CisKK2ZyZWVfcXVldWVfaXJxczoKKwlmb3IgKGkgPSB2ZWN0b3IgLSAxOyBpID49IDA7IGktLSkKKwkJZnJlZV9pcnEoYWRhcHRlci0+bXNpeF9lbnRyaWVzWy0tdmVjdG9yXS52ZWN0b3IsCisJCQkgJihhZGFwdGVyLT5xX3ZlY3RvcltpXSkpOworCXBjaV9kaXNhYmxlX21zaXgoYWRhcHRlci0+cGRldik7CisJa2ZyZWUoYWRhcHRlci0+bXNpeF9lbnRyaWVzKTsKKwlhZGFwdGVyLT5tc2l4X2VudHJpZXMgPSBOVUxMOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZXZmX3Jlc2V0X3FfdmVjdG9ycyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpLCBxX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKKworCWZvciAoaSA9IDA7IGkgPCBxX3ZlY3RvcnM7IGkrKykgeworCQlzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciAqcV92ZWN0b3IgPSBhZGFwdGVyLT5xX3ZlY3RvcltpXTsKKwkJYml0bWFwX3plcm8ocV92ZWN0b3ItPnJ4cl9pZHgsIE1BWF9SWF9RVUVVRVMpOworCQliaXRtYXBfemVybyhxX3ZlY3Rvci0+dHhyX2lkeCwgTUFYX1RYX1FVRVVFUyk7CisJCXFfdmVjdG9yLT5yeHJfY291bnQgPSAwOworCQlxX3ZlY3Rvci0+dHhyX2NvdW50ID0gMDsKKwkJcV92ZWN0b3ItPmVpdHIgPSBhZGFwdGVyLT5laXRyX3BhcmFtOworCX0KK30KKworLyoqCisgKiBpeGdiZXZmX3JlcXVlc3RfaXJxIC0gaW5pdGlhbGl6ZSBpbnRlcnJ1cHRzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBBdHRlbXB0cyB0byBjb25maWd1cmUgaW50ZXJydXB0cyB1c2luZyB0aGUgYmVzdCBhdmFpbGFibGUKKyAqIGNhcGFiaWxpdGllcyBvZiB0aGUgaGFyZHdhcmUgYW5kIGtlcm5lbC4KKyAqKi8KK3N0YXRpYyBpbnQgaXhnYmV2Zl9yZXF1ZXN0X2lycShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBlcnIgPSAwOworCisJZXJyID0gaXhnYmV2Zl9yZXF1ZXN0X21zaXhfaXJxcyhhZGFwdGVyKTsKKworCWlmIChlcnIpCisJCWh3X2RiZygmYWRhcHRlci0+aHcsCisJCSAgICAgICAicmVxdWVzdF9pcnEgZmFpbGVkLCBFcnJvciAlZFxuIiwgZXJyKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfZnJlZV9pcnEoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCBpLCBxX3ZlY3RvcnM7CisKKwlxX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzOworCisJaSA9IHFfdmVjdG9ycyAtIDE7CisKKwlmcmVlX2lycShhZGFwdGVyLT5tc2l4X2VudHJpZXNbaV0udmVjdG9yLCBuZXRkZXYpOworCWktLTsKKworCWZvciAoOyBpID49IDA7IGktLSkgeworCQlmcmVlX2lycShhZGFwdGVyLT5tc2l4X2VudHJpZXNbaV0udmVjdG9yLAorCQkJIGFkYXB0ZXItPnFfdmVjdG9yW2ldKTsKKwl9CisKKwlpeGdiZXZmX3Jlc2V0X3FfdmVjdG9ycyhhZGFwdGVyKTsKK30KKworLyoqCisgKiBpeGdiZXZmX2lycV9kaXNhYmxlIC0gTWFzayBvZmYgaW50ZXJydXB0IGdlbmVyYXRpb24gb24gdGhlIE5JQworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiovCitzdGF0aWMgaW5saW5lIHZvaWQgaXhnYmV2Zl9pcnFfZGlzYWJsZShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZURUlNQywgfjApOworCisJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnM7IGkrKykKKwkJc3luY2hyb25pemVfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1tpXS52ZWN0b3IpOworfQorCisvKioKKyAqIGl4Z2JldmZfaXJxX2VuYWJsZSAtIEVuYWJsZSBkZWZhdWx0IGludGVycnVwdCBnZW5lcmF0aW9uIHNldHRpbmdzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpeGdiZXZmX2lycV9lbmFibGUoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICAgICBib29sIHF1ZXVlcywgYm9vbCBmbHVzaCkKK3sKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBtYXNrOworCXU2NCBxbWFzazsKKworCW1hc2sgPSAoSVhHQkVfRUlNU19FTkFCTEVfTUFTSyAmIH5JWEdCRV9FSU1TX1JUWF9RVUVVRSk7CisJcW1hc2sgPSB+MDsKKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVlRFSU1TLCBtYXNrKTsKKworCWlmIChxdWV1ZXMpCisJCWl4Z2JldmZfaXJxX2VuYWJsZV9xdWV1ZXMoYWRhcHRlciwgcW1hc2spOworCisJaWYgKGZsdXNoKQorCQlJWEdCRV9XUklURV9GTFVTSChodyk7Cit9CisKKy8qKgorICogaXhnYmV2Zl9jb25maWd1cmVfdHggLSBDb25maWd1cmUgODI1OTkgVkYgVHJhbnNtaXQgVW5pdCBhZnRlciBSZXNldAorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIHRoZSBUeCB1bml0IG9mIHRoZSBNQUMgYWZ0ZXIgYSByZXNldC4KKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfY29uZmlndXJlX3R4KHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTY0IHRkYmE7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgaSwgaiwgdGRsZW4sIHR4Y3RybDsKKworCS8qIFNldHVwIHRoZSBIVyBUeCBIZWFkIGFuZCBUYWlsIGRlc2NyaXB0b3IgcG9pbnRlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCXN0cnVjdCBpeGdiZXZmX3JpbmcgKnJpbmcgPSAmYWRhcHRlci0+dHhfcmluZ1tpXTsKKwkJaiA9IHJpbmctPnJlZ19pZHg7CisJCXRkYmEgPSByaW5nLT5kbWE7CisJCXRkbGVuID0gcmluZy0+Y291bnQgKiBzaXplb2YodW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGVERCQUwoaiksCisJCQkJKHRkYmEgJiBETUFfQklUX01BU0soMzIpKSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZUREJBSChqKSwgKHRkYmEgPj4gMzIpKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRETEVOKGopLCB0ZGxlbik7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZUREgoaiksIDApOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGVERUKGopLCAwKTsKKwkJYWRhcHRlci0+dHhfcmluZ1tpXS5oZWFkID0gSVhHQkVfVkZUREgoaik7CisJCWFkYXB0ZXItPnR4X3JpbmdbaV0udGFpbCA9IElYR0JFX1ZGVERUKGopOworCQkvKiBEaXNhYmxlIFR4IEhlYWQgV3JpdGViYWNrIFJPIGJpdCwgc2luY2UgdGhpcyBob3NlcworCQkgKiBib29ra2VlcGluZyBpZiB0aGluZ3MgYXJlbid0IGRlbGl2ZXJlZCBpbiBvcmRlci4KKwkJICovCisJCXR4Y3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkRDQV9UWENUUkwoaikpOworCQl0eGN0cmwgJj0gfklYR0JFX0RDQV9UWENUUkxfVFhfV0JfUk9fRU47CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZEQ0FfVFhDVFJMKGopLCB0eGN0cmwpOworCX0KK30KKworI2RlZmluZSBJWEdCRV9TUlJDVExfQlNJWkVIRFJTSVpFX1NISUZUCTIKKworc3RhdGljIHZvaWQgaXhnYmV2Zl9jb25maWd1cmVfc3JyY3RsKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBpbmRleCkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9yaW5nICpyeF9yaW5nOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHNycmN0bDsKKworCXJ4X3JpbmcgPSAmYWRhcHRlci0+cnhfcmluZ1tpbmRleF07CisKKwlzcnJjdGwgPSBJWEdCRV9TUlJDVExfRFJPUF9FTjsKKworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRCkgeworCQl1MTYgYnVmc3ogPSBJWEdCRVZGX1JYQlVGRkVSXzIwNDg7CisJCS8qIGdyb3cgdGhlIGFtb3VudCB3ZSBjYW4gcmVjZWl2ZSBvbiBsYXJnZSBwYWdlIG1hY2hpbmVzICovCisJCWlmIChidWZzeiA8IChQQUdFX1NJWkUgLyAyKSkKKwkJCWJ1ZnN6ID0gKFBBR0VfU0laRSAvIDIpOworCQkvKiBjYXAgdGhlIGJ1ZnN6IGF0IG91ciBsYXJnZXN0IGRlc2NyaXB0b3Igc2l6ZSAqLworCQlidWZzeiA9IG1pbigodTE2KUlYR0JFVkZfTUFYX1JYQlVGRkVSLCBidWZzeik7CisKKwkJc3JyY3RsIHw9IGJ1ZnN6ID4+IElYR0JFX1NSUkNUTF9CU0laRVBLVF9TSElGVDsKKwkJc3JyY3RsIHw9IElYR0JFX1NSUkNUTF9ERVNDVFlQRV9IRFJfU1BMSVRfQUxXQVlTOworCQlzcnJjdGwgfD0gKChJWEdCRVZGX1JYX0hEUl9TSVpFIDw8CisJCQkgICBJWEdCRV9TUlJDVExfQlNJWkVIRFJTSVpFX1NISUZUKSAmCisJCQkgICBJWEdCRV9TUlJDVExfQlNJWkVIRFJfTUFTSyk7CisJfSBlbHNlIHsKKwkJc3JyY3RsIHw9IElYR0JFX1NSUkNUTF9ERVNDVFlQRV9BRFZfT05FQlVGOworCisJCWlmIChyeF9yaW5nLT5yeF9idWZfbGVuID09IE1BWElNVU1fRVRIRVJORVRfVkxBTl9TSVpFKQorCQkJc3JyY3RsIHw9IElYR0JFVkZfUlhCVUZGRVJfMjA0OCA+PgorCQkJCUlYR0JFX1NSUkNUTF9CU0laRVBLVF9TSElGVDsKKwkJZWxzZQorCQkJc3JyY3RsIHw9IHJ4X3JpbmctPnJ4X2J1Zl9sZW4gPj4KKwkJCQlJWEdCRV9TUlJDVExfQlNJWkVQS1RfU0hJRlQ7CisJfQorCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZTUlJDVEwoaW5kZXgpLCBzcnJjdGwpOworfQorCisvKioKKyAqIGl4Z2JldmZfY29uZmlndXJlX3J4IC0gQ29uZmlndXJlIDgyNTk5IFZGIFJlY2VpdmUgVW5pdCBhZnRlciBSZXNldAorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIHRoZSBSeCB1bml0IG9mIHRoZSBNQUMgYWZ0ZXIgYSByZXNldC4KKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfY29uZmlndXJlX3J4KHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTY0IHJkYmE7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCBtYXhfZnJhbWUgPSBuZXRkZXYtPm10dSArIEVUSF9ITEVOICsgRVRIX0ZDU19MRU47CisJaW50IGksIGo7CisJdTMyIHJkbGVuOworCWludCByeF9idWZfbGVuOworCisJLyogRGVjaWRlIHdoZXRoZXIgdG8gdXNlIHBhY2tldCBzcGxpdCBtb2RlIG9yIG5vdCAqLworCWlmIChuZXRkZXYtPm10dSA+IEVUSF9EQVRBX0xFTikgeworCQlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX1JYX1BTX0NBUEFCTEUpCisJCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQ7CisJCWVsc2UKKwkJCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQ7CisJfSBlbHNlIHsKKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgSVhHQkVfRkxBR19SWF8xQlVGX0NBUEFCTEUpCisJCQlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19SWF9QU19FTkFCTEVEOworCQllbHNlCisJCQlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQ7CisJfQorCisJLyogU2V0IHRoZSBSWCBidWZmZXIgbGVuZ3RoIGFjY29yZGluZyB0byB0aGUgbW9kZSAqLworCWlmIChhZGFwdGVyLT5mbGFncyAmIElYR0JFX0ZMQUdfUlhfUFNfRU5BQkxFRCkgeworCQkvKiBQU1JUWVBFIG11c3QgYmUgaW5pdGlhbGl6ZWQgaW4gODI1OTkgKi8KKwkJdTMyIHBzcnR5cGUgPSBJWEdCRV9QU1JUWVBFX1RDUEhEUiB8CisJCQlJWEdCRV9QU1JUWVBFX1VEUEhEUiB8CisJCQlJWEdCRV9QU1JUWVBFX0lQVjRIRFIgfAorCQkJSVhHQkVfUFNSVFlQRV9JUFY2SERSIHwKKwkJCUlYR0JFX1BTUlRZUEVfTDJIRFI7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZQU1JUWVBFLCBwc3J0eXBlKTsKKwkJcnhfYnVmX2xlbiA9IElYR0JFVkZfUlhfSERSX1NJWkU7CisJfSBlbHNlIHsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlBTUlRZUEUsIDApOworCQlpZiAobmV0ZGV2LT5tdHUgPD0gRVRIX0RBVEFfTEVOKQorCQkJcnhfYnVmX2xlbiA9IE1BWElNVU1fRVRIRVJORVRfVkxBTl9TSVpFOworCQllbHNlCisJCQlyeF9idWZfbGVuID0gQUxJR04obWF4X2ZyYW1lLCAxMDI0KTsKKwl9CisKKwlyZGxlbiA9IGFkYXB0ZXItPnJ4X3JpbmdbMF0uY291bnQgKiBzaXplb2YodW5pb24gaXhnYmVfYWR2X3J4X2Rlc2MpOworCS8qIFNldHVwIHRoZSBIVyBSeCBIZWFkIGFuZCBUYWlsIERlc2NyaXB0b3IgUG9pbnRlcnMgYW5kCisJICogdGhlIEJhc2UgYW5kIExlbmd0aCBvZiB0aGUgUnggRGVzY3JpcHRvciBSaW5nICovCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlyZGJhID0gYWRhcHRlci0+cnhfcmluZ1tpXS5kbWE7CisJCWogPSBhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHg7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZSREJBTChqKSwKKwkJCQkocmRiYSAmIERNQV9CSVRfTUFTSygzMikpKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJEQkFIKGopLCAocmRiYSA+PiAzMikpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGUkRMRU4oaiksIHJkbGVuKTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJESChqKSwgMCk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZSRFQoaiksIDApOworCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmhlYWQgPSBJWEdCRV9WRlJESChqKTsKKwkJYWRhcHRlci0+cnhfcmluZ1tpXS50YWlsID0gSVhHQkVfVkZSRFQoaik7CisJCWFkYXB0ZXItPnJ4X3JpbmdbaV0ucnhfYnVmX2xlbiA9IHJ4X2J1Zl9sZW47CisKKwkJaXhnYmV2Zl9jb25maWd1cmVfc3JyY3RsKGFkYXB0ZXIsIGopOworCX0KK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJICAgICBzdHJ1Y3Qgdmxhbl9ncm91cCAqZ3JwKQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IGksIGo7CisJdTMyIGN0cmw7CisKKwlhZGFwdGVyLT52bGdycCA9IGdycDsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJaiA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeDsKKwkJY3RybCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlJYRENUTChqKSk7CisJCWN0cmwgfD0gSVhHQkVfUlhEQ1RMX1ZNRTsKKwkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlJYRENUTChqKSwgY3RybCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX3ZsYW5fcnhfYWRkX3ZpZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MTYgdmlkKQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IG5ldF9kZXZpY2UgKnZfbmV0ZGV2OworCisJLyogYWRkIFZJRCB0byBmaWx0ZXIgdGFibGUgKi8KKwlpZiAoaHctPm1hYy5vcHMuc2V0X3ZmdGEpCisJCWh3LT5tYWMub3BzLnNldF92ZnRhKGh3LCB2aWQsIDAsIHRydWUpOworCS8qCisJICogQ29weSBmZWF0dXJlIGZsYWdzIGZyb20gbmV0ZGV2IHRvIHRoZSB2bGFuIG5ldGRldiBmb3IgdGhpcyB2aWQuCisJICogVGhpcyBhbGxvd3MgdGhpbmdzIGxpa2UgVFNPIHRvIGJ1YmJsZSBkb3duIHRvIG91ciB2bGFuIGRldmljZS4KKwkgKi8KKwl2X25ldGRldiA9IHZsYW5fZ3JvdXBfZ2V0X2RldmljZShhZGFwdGVyLT52bGdycCwgdmlkKTsKKwl2X25ldGRldi0+ZmVhdHVyZXMgfD0gYWRhcHRlci0+bmV0ZGV2LT5mZWF0dXJlczsKKwl2bGFuX2dyb3VwX3NldF9kZXZpY2UoYWRhcHRlci0+dmxncnAsIHZpZCwgdl9uZXRkZXYpOworfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX3ZsYW5fcnhfa2lsbF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTE2IHZpZCkKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJaWYgKCF0ZXN0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJaXhnYmV2Zl9pcnFfZGlzYWJsZShhZGFwdGVyKTsKKworCXZsYW5fZ3JvdXBfc2V0X2RldmljZShhZGFwdGVyLT52bGdycCwgdmlkLCBOVUxMKTsKKworCWlmICghdGVzdF9iaXQoX19JWEdCRVZGX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCWl4Z2JldmZfaXJxX2VuYWJsZShhZGFwdGVyLCB0cnVlLCB0cnVlKTsKKworCS8qIHJlbW92ZSBWSUQgZnJvbSBmaWx0ZXIgdGFibGUgKi8KKwlpZiAoaHctPm1hYy5vcHMuc2V0X3ZmdGEpCisJCWh3LT5tYWMub3BzLnNldF92ZnRhKGh3LCB2aWQsIDAsIGZhbHNlKTsKK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl9yZXN0b3JlX3ZsYW4oc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpeGdiZXZmX3ZsYW5fcnhfcmVnaXN0ZXIoYWRhcHRlci0+bmV0ZGV2LCBhZGFwdGVyLT52bGdycCk7CisKKwlpZiAoYWRhcHRlci0+dmxncnApIHsKKwkJdTE2IHZpZDsKKwkJZm9yICh2aWQgPSAwOyB2aWQgPCBWTEFOX0dST1VQX0FSUkFZX0xFTjsgdmlkKyspIHsKKwkJCWlmICghdmxhbl9ncm91cF9nZXRfZGV2aWNlKGFkYXB0ZXItPnZsZ3JwLCB2aWQpKQorCQkJCWNvbnRpbnVlOworCQkJaXhnYmV2Zl92bGFuX3J4X2FkZF92aWQoYWRhcHRlci0+bmV0ZGV2LCB2aWQpOworCQl9CisJfQorfQorCitzdGF0aWMgdTggKml4Z2JldmZfYWRkcl9saXN0X2l0cihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqKm1jX2FkZHJfcHRyLAorCQkJCSB1MzIgKnZtZHEpCit7CisJc3RydWN0IGRldl9tY19saXN0ICptY19wdHI7CisJdTggKmFkZHIgPSAqbWNfYWRkcl9wdHI7CisJKnZtZHEgPSAwOworCisJbWNfcHRyID0gY29udGFpbmVyX29mKGFkZHIsIHN0cnVjdCBkZXZfbWNfbGlzdCwgZG1pX2FkZHJbMF0pOworCWlmIChtY19wdHItPm5leHQpCisJCSptY19hZGRyX3B0ciA9IG1jX3B0ci0+bmV4dC0+ZG1pX2FkZHI7CisJZWxzZQorCQkqbWNfYWRkcl9wdHIgPSBOVUxMOworCisJcmV0dXJuIGFkZHI7Cit9CisKKy8qKgorICogaXhnYmV2Zl9zZXRfcnhfbW9kZSAtIE11bHRpY2FzdCBzZXQKKyAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGUgc2V0X3J4X21ldGhvZCBlbnRyeSBwb2ludCBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIG11bHRpY2FzdCBhZGRyZXNzCisgKiBsaXN0IG9yIHRoZSBuZXR3b3JrIGludGVyZmFjZSBmbGFncyBhcmUgdXBkYXRlZC4gIFRoaXMgcm91dGluZSBpcworICogcmVzcG9uc2libGUgZm9yIGNvbmZpZ3VyaW5nIHRoZSBoYXJkd2FyZSBmb3IgcHJvcGVyIG11bHRpY2FzdCBtb2RlLgorICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTggKmFkZHJfbGlzdCA9IE5VTEw7CisJaW50IGFkZHJfY291bnQgPSAwOworCisJLyogcmVwcm9ncmFtIG11bHRpY2FzdCBsaXN0ICovCisJYWRkcl9jb3VudCA9IG5ldGRldl9tY19jb3VudChuZXRkZXYpOworCWlmIChhZGRyX2NvdW50KQorCQlhZGRyX2xpc3QgPSBuZXRkZXYtPm1jX2xpc3QtPmRtaV9hZGRyOworCWlmIChody0+bWFjLm9wcy51cGRhdGVfbWNfYWRkcl9saXN0KQorCQlody0+bWFjLm9wcy51cGRhdGVfbWNfYWRkcl9saXN0KGh3LCBhZGRyX2xpc3QsIGFkZHJfY291bnQsCisJCQkJCQlpeGdiZXZmX2FkZHJfbGlzdF9pdHIpOworfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX25hcGlfZW5hYmxlX2FsbChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBxX2lkeDsKKwlzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciAqcV92ZWN0b3I7CisJaW50IHFfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOworCisJZm9yIChxX2lkeCA9IDA7IHFfaWR4IDwgcV92ZWN0b3JzOyBxX2lkeCsrKSB7CisJCXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaTsKKwkJcV92ZWN0b3IgPSBhZGFwdGVyLT5xX3ZlY3RvcltxX2lkeF07CisJCWlmICghcV92ZWN0b3ItPnJ4cl9jb3VudCkKKwkJCWNvbnRpbnVlOworCQluYXBpID0gJnFfdmVjdG9yLT5uYXBpOworCQlpZiAocV92ZWN0b3ItPnJ4cl9jb3VudCA+IDEpCisJCQluYXBpLT5wb2xsID0gJml4Z2JldmZfY2xlYW5fcnhvbmx5X21hbnk7CisKKwkJbmFwaV9lbmFibGUobmFwaSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBpeGdiZXZmX25hcGlfZGlzYWJsZV9hbGwoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcV9pZHg7CisJc3RydWN0IGl4Z2JldmZfcV92ZWN0b3IgKnFfdmVjdG9yOworCWludCBxX3ZlY3RvcnMgPSBhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzIC0gTk9OX1FfVkVDVE9SUzsKKworCWZvciAocV9pZHggPSAwOyBxX2lkeCA8IHFfdmVjdG9yczsgcV9pZHgrKykgeworCQlxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yW3FfaWR4XTsKKwkJaWYgKCFxX3ZlY3Rvci0+cnhyX2NvdW50KQorCQkJY29udGludWU7CisJCW5hcGlfZGlzYWJsZSgmcV92ZWN0b3ItPm5hcGkpOworCX0KK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl9jb25maWd1cmUoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCBpOworCisJaXhnYmV2Zl9zZXRfcnhfbW9kZShuZXRkZXYpOworCisJaXhnYmV2Zl9yZXN0b3JlX3ZsYW4oYWRhcHRlcik7CisKKwlpeGdiZXZmX2NvbmZpZ3VyZV90eChhZGFwdGVyKTsKKwlpeGdiZXZmX2NvbmZpZ3VyZV9yeChhZGFwdGVyKTsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCXN0cnVjdCBpeGdiZXZmX3JpbmcgKnJpbmcgPSAmYWRhcHRlci0+cnhfcmluZ1tpXTsKKwkJaXhnYmV2Zl9hbGxvY19yeF9idWZmZXJzKGFkYXB0ZXIsIHJpbmcsIHJpbmctPmNvdW50KTsKKwkJcmluZy0+bmV4dF90b191c2UgPSByaW5nLT5jb3VudCAtIDE7CisJCXdyaXRlbChyaW5nLT5uZXh0X3RvX3VzZSwgYWRhcHRlci0+aHcuaHdfYWRkciArIHJpbmctPnRhaWwpOworCX0KK30KKworI2RlZmluZSBJWEdCRV9NQVhfUlhfREVTQ19QT0xMIDEwCitzdGF0aWMgaW5saW5lIHZvaWQgaXhnYmV2Zl9yeF9kZXNjX3F1ZXVlX2VuYWJsZShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJCQkJaW50IHJ4cikKK3sKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWludCBqID0gYWRhcHRlci0+cnhfcmluZ1tyeHJdLnJlZ19pZHg7CisJaW50IGs7CisKKwlmb3IgKGsgPSAwOyBrIDwgSVhHQkVfTUFYX1JYX0RFU0NfUE9MTDsgaysrKSB7CisJCWlmIChJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZSWERDVEwoaikpICYgSVhHQkVfUlhEQ1RMX0VOQUJMRSkKKwkJCWJyZWFrOworCQllbHNlCisJCQltc2xlZXAoMSk7CisJfQorCWlmIChrID49IElYR0JFX01BWF9SWF9ERVNDX1BPTEwpIHsKKwkJaHdfZGJnKGh3LCAiUlhEQ1RMLkVOQUJMRSBvbiBSeCBxdWV1ZSAlZCAiCisJCSAgICAgICAibm90IHNldCB3aXRoaW4gdGhlIHBvbGxpbmcgcGVyaW9kXG4iLCByeHIpOworCX0KKworCWl4Z2JldmZfcmVsZWFzZV9yeF9kZXNjKCZhZGFwdGVyLT5odywgJmFkYXB0ZXItPnJ4X3JpbmdbcnhyXSwKKwkJCQkoYWRhcHRlci0+cnhfcmluZ1tyeHJdLmNvdW50IC0gMSkpOworfQorCitzdGF0aWMgaW50IGl4Z2JldmZfdXBfY29tcGxldGUoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IGksIGogPSAwOworCWludCBudW1fcnhfcmluZ3MgPSBhZGFwdGVyLT5udW1fcnhfcXVldWVzOworCXUzMiB0eGRjdGwsIHJ4ZGN0bDsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJaiA9IGFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeDsKKwkJdHhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGVFhEQ1RMKGopKTsKKwkJLyogZW5hYmxlIFdUSFJFU0g9OCBkZXNjcmlwdG9ycywgdG8gZW5jb3VyYWdlIGJ1cnN0IHdyaXRlYmFjayAqLworCQl0eGRjdGwgfD0gKDggPDwgMTYpOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGVFhEQ1RMKGopLCB0eGRjdGwpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJaiA9IGFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeDsKKwkJdHhkY3RsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGVFhEQ1RMKGopKTsKKwkJdHhkY3RsIHw9IElYR0JFX1RYRENUTF9FTkFCTEU7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZUWERDVEwoaiksIHR4ZGN0bCk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG51bV9yeF9yaW5nczsgaSsrKSB7CisJCWogPSBhZGFwdGVyLT5yeF9yaW5nW2ldLnJlZ19pZHg7CisJCXJ4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlJYRENUTChqKSk7CisJCXJ4ZGN0bCB8PSBJWEdCRV9SWERDVExfRU5BQkxFOworCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGUlhEQ1RMKGopLCByeGRjdGwpOworCQlpeGdiZXZmX3J4X2Rlc2NfcXVldWVfZW5hYmxlKGFkYXB0ZXIsIGkpOworCX0KKworCWl4Z2JldmZfY29uZmlndXJlX21zaXgoYWRhcHRlcik7CisKKwlpZiAoaHctPm1hYy5vcHMuc2V0X3JhcikgeworCQlpZiAoaXNfdmFsaWRfZXRoZXJfYWRkcihody0+bWFjLmFkZHIpKQorCQkJaHctPm1hYy5vcHMuc2V0X3JhcihodywgMCwgaHctPm1hYy5hZGRyLCAwKTsKKwkJZWxzZQorCQkJaHctPm1hYy5vcHMuc2V0X3JhcihodywgMCwgaHctPm1hYy5wZXJtX2FkZHIsIDApOworCX0KKworCWNsZWFyX2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKKwlpeGdiZXZmX25hcGlfZW5hYmxlX2FsbChhZGFwdGVyKTsKKworCS8qIGVuYWJsZSB0cmFuc21pdHMgKi8KKwluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7CisKKwkvKiBicmluZyB0aGUgbGluayB1cCBpbiB0aGUgd2F0Y2hkb2csIHRoaXMgY291bGQgcmFjZSB3aXRoIG91ciBmaXJzdAorCSAqIGxpbmsgdXAgaW50ZXJydXB0IGJ1dCBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtICovCisJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19ORUVEX0xJTktfVVBEQVRFOworCWFkYXB0ZXItPmxpbmtfY2hlY2tfdGltZW91dCA9IGppZmZpZXM7CisJbW9kX3RpbWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyk7CisJcmV0dXJuIDA7Cit9CisKK2ludCBpeGdiZXZmX3VwKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGVycjsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJaXhnYmV2Zl9jb25maWd1cmUoYWRhcHRlcik7CisKKwllcnIgPSBpeGdiZXZmX3VwX2NvbXBsZXRlKGFkYXB0ZXIpOworCisJLyogY2xlYXIgYW55IHBlbmRpbmcgaW50ZXJydXB0cywgbWF5IGF1dG8gbWFzayAqLworCUlYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WVEVJQ1IpOworCisJaXhnYmV2Zl9pcnFfZW5hYmxlKGFkYXB0ZXIsIHRydWUsIHRydWUpOworCisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBpeGdiZXZmX2NsZWFuX3J4X3JpbmcgLSBGcmVlIFJ4IEJ1ZmZlcnMgcGVyIFF1ZXVlCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEByeF9yaW5nOiByaW5nIHRvIGZyZWUgYnVmZmVycyBmcm9tCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZXZmX2NsZWFuX3J4X3Jpbmcoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgIHN0cnVjdCBpeGdiZXZmX3JpbmcgKnJ4X3JpbmcpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICghcnhfcmluZy0+cnhfYnVmZmVyX2luZm8pCisJCXJldHVybjsKKworCS8qIEZyZWUgYWxsIHRoZSBSeCByaW5nIHNrX2J1ZmZzICovCisJZm9yIChpID0gMDsgaSA8IHJ4X3JpbmctPmNvdW50OyBpKyspIHsKKwkJc3RydWN0IGl4Z2JldmZfcnhfYnVmZmVyICpyeF9idWZmZXJfaW5mbzsKKworCQlyeF9idWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5yeF9idWZmZXJfaW5mb1tpXTsKKwkJaWYgKHJ4X2J1ZmZlcl9pbmZvLT5kbWEpIHsKKwkJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgcnhfYnVmZmVyX2luZm8tPmRtYSwKKwkJCQkJIHJ4X3JpbmctPnJ4X2J1Zl9sZW4sCisJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJcnhfYnVmZmVyX2luZm8tPmRtYSA9IDA7CisJCX0KKwkJaWYgKHJ4X2J1ZmZlcl9pbmZvLT5za2IpIHsKKwkJCXN0cnVjdCBza19idWZmICpza2IgPSByeF9idWZmZXJfaW5mby0+c2tiOworCQkJcnhfYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CisJCQlkbyB7CisJCQkJc3RydWN0IHNrX2J1ZmYgKnRoaXMgPSBza2I7CisJCQkJc2tiID0gc2tiLT5wcmV2OworCQkJCWRldl9rZnJlZV9za2IodGhpcyk7CisJCQl9IHdoaWxlIChza2IpOworCQl9CisJCWlmICghcnhfYnVmZmVyX2luZm8tPnBhZ2UpCisJCQljb250aW51ZTsKKwkJcGNpX3VubWFwX3BhZ2UocGRldiwgcnhfYnVmZmVyX2luZm8tPnBhZ2VfZG1hLCBQQUdFX1NJWkUgLyAyLAorCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCXJ4X2J1ZmZlcl9pbmZvLT5wYWdlX2RtYSA9IDA7CisJCXB1dF9wYWdlKHJ4X2J1ZmZlcl9pbmZvLT5wYWdlKTsKKwkJcnhfYnVmZmVyX2luZm8tPnBhZ2UgPSBOVUxMOworCQlyeF9idWZmZXJfaW5mby0+cGFnZV9vZmZzZXQgPSAwOworCX0KKworCXNpemUgPSBzaXplb2Yoc3RydWN0IGl4Z2JldmZfcnhfYnVmZmVyKSAqIHJ4X3JpbmctPmNvdW50OworCW1lbXNldChyeF9yaW5nLT5yeF9idWZmZXJfaW5mbywgMCwgc2l6ZSk7CisKKwkvKiBaZXJvIG91dCB0aGUgZGVzY3JpcHRvciByaW5nICovCisJbWVtc2V0KHJ4X3JpbmctPmRlc2MsIDAsIHJ4X3JpbmctPnNpemUpOworCisJcnhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7CisJcnhfcmluZy0+bmV4dF90b191c2UgPSAwOworCisJaWYgKHJ4X3JpbmctPmhlYWQpCisJCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+aGVhZCk7CisJaWYgKHJ4X3JpbmctPnRhaWwpCisJCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgcnhfcmluZy0+dGFpbCk7Cit9CisKKy8qKgorICogaXhnYmV2Zl9jbGVhbl90eF9yaW5nIC0gRnJlZSBUeCBCdWZmZXJzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEB0eF9yaW5nOiByaW5nIHRvIGJlIGNsZWFuZWQKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfY2xlYW5fdHhfcmluZyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZykKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWlmICghdHhfcmluZy0+dHhfYnVmZmVyX2luZm8pCisJCXJldHVybjsKKworCS8qIEZyZWUgYWxsIHRoZSBUeCByaW5nIHNrX2J1ZmZzICovCisKKwlmb3IgKGkgPSAwOyBpIDwgdHhfcmluZy0+Y291bnQ7IGkrKykgeworCQl0eF9idWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXTsKKwkJaXhnYmV2Zl91bm1hcF9hbmRfZnJlZV90eF9yZXNvdXJjZShhZGFwdGVyLCB0eF9idWZmZXJfaW5mbyk7CisJfQorCisJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXhnYmV2Zl90eF9idWZmZXIpICogdHhfcmluZy0+Y291bnQ7CisJbWVtc2V0KHR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvLCAwLCBzaXplKTsKKworCW1lbXNldCh0eF9yaW5nLT5kZXNjLCAwLCB0eF9yaW5nLT5zaXplKTsKKworCXR4X3JpbmctPm5leHRfdG9fdXNlID0gMDsKKwl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gMDsKKworCWlmICh0eF9yaW5nLT5oZWFkKQorCQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHR4X3JpbmctPmhlYWQpOworCWlmICh0eF9yaW5nLT50YWlsKQorCQl3cml0ZWwoMCwgYWRhcHRlci0+aHcuaHdfYWRkciArIHR4X3JpbmctPnRhaWwpOworfQorCisvKioKKyAqIGl4Z2JldmZfY2xlYW5fYWxsX3J4X3JpbmdzIC0gRnJlZSBSeCBCdWZmZXJzIGZvciBhbGwgcXVldWVzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfY2xlYW5fYWxsX3J4X3JpbmdzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQorCQlpeGdiZXZmX2NsZWFuX3J4X3JpbmcoYWRhcHRlciwgJmFkYXB0ZXItPnJ4X3JpbmdbaV0pOworfQorCisvKioKKyAqIGl4Z2JldmZfY2xlYW5fYWxsX3R4X3JpbmdzIC0gRnJlZSBUeCBCdWZmZXJzIGZvciBhbGwgcXVldWVzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfY2xlYW5fYWxsX3R4X3JpbmdzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKQorCQlpeGdiZXZmX2NsZWFuX3R4X3JpbmcoYWRhcHRlciwgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworfQorCit2b2lkIGl4Z2JldmZfZG93bihzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgdHhkY3RsOworCWludCBpLCBqOworCisJLyogc2lnbmFsIHRoYXQgd2UgYXJlIGRvd24gdG8gdGhlIGludGVycnVwdCBoYW5kbGVyICovCisJc2V0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKKwkvKiBkaXNhYmxlIHJlY2VpdmVzICovCisKKwluZXRpZl90eF9kaXNhYmxlKG5ldGRldik7CisKKwltc2xlZXAoMTApOworCisJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CisKKwlpeGdiZXZmX2lycV9kaXNhYmxlKGFkYXB0ZXIpOworCisJaXhnYmV2Zl9uYXBpX2Rpc2FibGVfYWxsKGFkYXB0ZXIpOworCisJZGVsX3RpbWVyX3N5bmMoJmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyKTsKKwkvKiBjYW4ndCBjYWxsIGZsdXNoIHNjaGVkdWxlZCB3b3JrIGhlcmUgYmVjYXVzZSBpdCBjYW4gZGVhZGxvY2sKKwkgKiBpZiBsaW5rd2F0Y2hfZXZlbnQgdHJpZXMgdG8gYWNxdWlyZSB0aGUgcnRubF9sb2NrIHdoaWNoIHdlIGFyZQorCSAqIGhvbGRpbmcgKi8KKwl3aGlsZSAoYWRhcHRlci0+ZmxhZ3MgJiBJWEdCRV9GTEFHX0lOX1dBVENIRE9HX1RBU0spCisJCW1zbGVlcCgxKTsKKworCS8qIGRpc2FibGUgdHJhbnNtaXRzIGluIHRoZSBoYXJkd2FyZSBub3cgdGhhdCBpbnRlcnJ1cHRzIGFyZSBvZmYgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCWogPSBhZGFwdGVyLT50eF9yaW5nW2ldLnJlZ19pZHg7CisJCXR4ZGN0bCA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRlRYRENUTChqKSk7CisJCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZUWERDVEwoaiksCisJCQkJKHR4ZGN0bCAmIH5JWEdCRV9UWERDVExfRU5BQkxFKSk7CisJfQorCisJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKworCWlmICghcGNpX2NoYW5uZWxfb2ZmbGluZShhZGFwdGVyLT5wZGV2KSkKKwkJaXhnYmV2Zl9yZXNldChhZGFwdGVyKTsKKworCWl4Z2JldmZfY2xlYW5fYWxsX3R4X3JpbmdzKGFkYXB0ZXIpOworCWl4Z2JldmZfY2xlYW5fYWxsX3J4X3JpbmdzKGFkYXB0ZXIpOworfQorCit2b2lkIGl4Z2JldmZfcmVpbml0X2xvY2tlZChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwlXQVJOX09OKGluX2ludGVycnVwdCgpKTsKKworCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSVhHQkVWRl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCisJCW1zbGVlcCgxKTsKKworCS8qCisJICogQ2hlY2sgaWYgUEYgaXMgdXAgYmVmb3JlIHJlLWluaXQuICBJZiBub3QgdGhlbiBza2lwIHVudGlsCisJICogbGF0ZXIgd2hlbiB0aGUgUEYgaXMgdXAgYW5kIHJlYWR5IHRvIHNlcnZpY2UgcmVxdWVzdHMgZnJvbQorCSAqIHRoZSBWRiB2aWEgbWFpbGJveC4gIElmIHRoZSBWRiBpcyB1cCBhbmQgcnVubmluZyB0aGVuIHRoZQorCSAqIHdhdGNoZG9nIHRhc2sgd2lsbCBjb250aW51ZSB0byBzY2hlZHVsZSByZXNldCB0YXNrcyB1bnRpbAorCSAqIHRoZSBQRiBpcyB1cCBhbmQgcnVubmluZy4KKwkgKi8KKwlpZiAoIWh3LT5tYWMub3BzLnJlc2V0X2h3KGh3KSkgeworCQlpeGdiZXZmX2Rvd24oYWRhcHRlcik7CisJCWl4Z2JldmZfdXAoYWRhcHRlcik7CisJfQorCisJY2xlYXJfYml0KF9fSVhHQkVWRl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7Cit9CisKK3ZvaWQgaXhnYmV2Zl9yZXNldChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCWlmIChody0+bWFjLm9wcy5yZXNldF9odyhodykpCisJCWh3X2RiZyhodywgIlBGIHN0aWxsIHJlc2V0dGluZ1xuIik7CisJZWxzZQorCQlody0+bWFjLm9wcy5pbml0X2h3KGh3KTsKKworCWlmIChpc192YWxpZF9ldGhlcl9hZGRyKGFkYXB0ZXItPmh3Lm1hYy5hZGRyKSkgeworCQltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRhcHRlci0+aHcubWFjLmFkZHIsCisJCSAgICAgICBuZXRkZXYtPmFkZHJfbGVuKTsKKwkJbWVtY3B5KG5ldGRldi0+cGVybV9hZGRyLCBhZGFwdGVyLT5ody5tYWMuYWRkciwKKwkJICAgICAgIG5ldGRldi0+YWRkcl9sZW4pOworCX0KK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl9hY3F1aXJlX21zaXhfdmVjdG9ycyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJCQkgaW50IHZlY3RvcnMpCit7CisJaW50IGVyciwgdmVjdG9yX3RocmVzaG9sZDsKKworCS8qIFdlJ2xsIHdhbnQgYXQgbGVhc3QgMyAodmVjdG9yX3RocmVzaG9sZCk6CisJICogMSkgVHhRWzBdIENsZWFudXAKKwkgKiAyKSBSeFFbMF0gQ2xlYW51cAorCSAqIDMpIE90aGVyIChMaW5rIFN0YXR1cyBDaGFuZ2UsIGV0Yy4pCisJICovCisJdmVjdG9yX3RocmVzaG9sZCA9IE1JTl9NU0lYX0NPVU5UOworCisJLyogVGhlIG1vcmUgd2UgZ2V0LCB0aGUgbW9yZSB3ZSB3aWxsIGFzc2lnbiB0byBUeC9SeCBDbGVhbnVwCisJICogZm9yIHRoZSBzZXBhcmF0ZSBxdWV1ZXMuLi53aGVyZSBSeCBDbGVhbnVwID49IFR4IENsZWFudXAuCisJICogUmlnaHQgbm93LCB3ZSBzaW1wbHkgY2FyZSBhYm91dCBob3cgbWFueSB3ZSdsbCBnZXQ7IHdlJ2xsCisJICogc2V0IHRoZW0gdXAgbGF0ZXIgd2hpbGUgcmVxdWVzdGluZyBpcnEncy4KKwkgKi8KKwl3aGlsZSAodmVjdG9ycyA+PSB2ZWN0b3JfdGhyZXNob2xkKSB7CisJCWVyciA9IHBjaV9lbmFibGVfbXNpeChhZGFwdGVyLT5wZGV2LCBhZGFwdGVyLT5tc2l4X2VudHJpZXMsCisJCQkJICAgICAgdmVjdG9ycyk7CisJCWlmICghZXJyKSAvKiBTdWNjZXNzIGluIGFjcXVpcmluZyBhbGwgcmVxdWVzdGVkIHZlY3RvcnMuICovCisJCQlicmVhazsKKwkJZWxzZSBpZiAoZXJyIDwgMCkKKwkJCXZlY3RvcnMgPSAwOyAvKiBOYXN0eSBmYWlsdXJlLCBxdWl0IG5vdyAqLworCQllbHNlIC8qIGVyciA9PSBudW1iZXIgb2YgdmVjdG9ycyB3ZSBzaG91bGQgdHJ5IGFnYWluIHdpdGggKi8KKwkJCXZlY3RvcnMgPSBlcnI7CisJfQorCisJaWYgKHZlY3RvcnMgPCB2ZWN0b3JfdGhyZXNob2xkKSB7CisJCS8qIENhbid0IGFsbG9jYXRlIGVub3VnaCBNU0ktWCBpbnRlcnJ1cHRzPyAgT2ggd2VsbC4KKwkJICogVGhpcyBqdXN0IG1lYW5zIHdlJ2xsIGdvIHdpdGggZWl0aGVyIGEgc2luZ2xlIE1TSQorCQkgKiB2ZWN0b3Igb3IgZmFsbCBiYWNrIHRvIGxlZ2FjeSBpbnRlcnJ1cHRzLgorCQkgKi8KKwkJaHdfZGJnKCZhZGFwdGVyLT5odywKKwkJICAgICAgICJVbmFibGUgdG8gYWxsb2NhdGUgTVNJLVggaW50ZXJydXB0c1xuIik7CisJCWtmcmVlKGFkYXB0ZXItPm1zaXhfZW50cmllcyk7CisJCWFkYXB0ZXItPm1zaXhfZW50cmllcyA9IE5VTEw7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogQWRqdXN0IGZvciBvbmx5IHRoZSB2ZWN0b3JzIHdlJ2xsIHVzZSwgd2hpY2ggaXMgbWluaW11bQorCQkgKiBvZiBtYXhfbXNpeF9xX3ZlY3RvcnMgKyBOT05fUV9WRUNUT1JTLCBvciB0aGUgbnVtYmVyIG9mCisJCSAqIHZlY3RvcnMgd2Ugd2VyZSBhbGxvY2F0ZWQuCisJCSAqLworCQlhZGFwdGVyLT5udW1fbXNpeF92ZWN0b3JzID0gdmVjdG9yczsKKwl9Cit9CisKKy8qCisgKiBpeGdiZV9zZXRfbnVtX3F1ZXVlczogQWxsb2NhdGUgcXVldWVzIGZvciBkZXZpY2UsIGZlYXR1cmUgZGVwZW5kYW50CisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIFRoaXMgaXMgdGhlIHRvcCBsZXZlbCBxdWV1ZSBhbGxvY2F0aW9uIHJvdXRpbmUuICBUaGUgb3JkZXIgaGVyZSBpcyB2ZXJ5CisgKiBpbXBvcnRhbnQsIHN0YXJ0aW5nIHdpdGggdGhlICJtb3N0IiBudW1iZXIgb2YgZmVhdHVyZXMgdHVybmVkIG9uIGF0IG9uY2UsCisgKiBhbmQgZW5kaW5nIHdpdGggdGhlIHNtYWxsZXN0IHNldCBvZiBmZWF0dXJlcy4gIFRoaXMgd2F5IGxhcmdlIGNvbWJpbmF0aW9ucworICogY2FuIGJlIGFsbG9jYXRlZCBpZiB0aGV5J3JlIHR1cm5lZCBvbiwgYW5kIHNtYWxsZXIgY29tYmluYXRpb25zIGFyZSB0aGUKKyAqIGZhbGx0aHJvdWdoIGNvbmRpdGlvbnMuCisgKgorICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl9zZXRfbnVtX3F1ZXVlcyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCS8qIFN0YXJ0IHdpdGggYmFzZSBjYXNlICovCisJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IDE7CisJYWRhcHRlci0+bnVtX3R4X3F1ZXVlcyA9IDE7CisJYWRhcHRlci0+bnVtX3J4X3Bvb2xzID0gYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsKKwlhZGFwdGVyLT5udW1fcnhfcXVldWVzX3Blcl9wb29sID0gMTsKK30KKworLyoqCisgKiBpeGdiZXZmX2FsbG9jX3F1ZXVlcyAtIEFsbG9jYXRlIG1lbW9yeSBmb3IgYWxsIHJpbmdzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIFdlIGFsbG9jYXRlIG9uZSByaW5nIHBlciBxdWV1ZSBhdCBydW4tdGltZSBzaW5jZSB3ZSBkb24ndCBrbm93IHRoZQorICogbnVtYmVyIG9mIHF1ZXVlcyBhdCBjb21waWxlLXRpbWUuICBUaGUgcG9sbGluZ19uZXRkZXYgYXJyYXkgaXMKKyAqIGludGVuZGVkIGZvciBNdWx0aXF1ZXVlLCBidXQgc2hvdWxkIHdvcmsgZmluZSB3aXRoIGEgc2luZ2xlIHF1ZXVlLgorICoqLworc3RhdGljIGludCBpeGdiZXZmX2FsbG9jX3F1ZXVlcyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCisJYWRhcHRlci0+dHhfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3R4X3F1ZXVlcywKKwkJCQkgICBzaXplb2Yoc3RydWN0IGl4Z2JldmZfcmluZyksIEdGUF9LRVJORUwpOworCWlmICghYWRhcHRlci0+dHhfcmluZykKKwkJZ290byBlcnJfdHhfcmluZ19hbGxvY2F0aW9uOworCisJYWRhcHRlci0+cnhfcmluZyA9IGtjYWxsb2MoYWRhcHRlci0+bnVtX3J4X3F1ZXVlcywKKwkJCQkgICBzaXplb2Yoc3RydWN0IGl4Z2JldmZfcmluZyksIEdGUF9LRVJORUwpOworCWlmICghYWRhcHRlci0+cnhfcmluZykKKwkJZ290byBlcnJfcnhfcmluZ19hbGxvY2F0aW9uOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQlhZGFwdGVyLT50eF9yaW5nW2ldLmNvdW50ID0gYWRhcHRlci0+dHhfcmluZ19jb3VudDsKKwkJYWRhcHRlci0+dHhfcmluZ1tpXS5xdWV1ZV9pbmRleCA9IGk7CisJCWFkYXB0ZXItPnR4X3JpbmdbaV0ucmVnX2lkeCA9IGk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmNvdW50ID0gYWRhcHRlci0+cnhfcmluZ19jb3VudDsKKwkJYWRhcHRlci0+cnhfcmluZ1tpXS5xdWV1ZV9pbmRleCA9IGk7CisJCWFkYXB0ZXItPnJ4X3JpbmdbaV0ucmVnX2lkeCA9IGk7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9yeF9yaW5nX2FsbG9jYXRpb246CisJa2ZyZWUoYWRhcHRlci0+dHhfcmluZyk7CitlcnJfdHhfcmluZ19hbGxvY2F0aW9uOgorCXJldHVybiAtRU5PTUVNOworfQorCisvKioKKyAqIGl4Z2JldmZfc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5IC0gc2V0IE1TSS1YIG9yIEZBSUwgaWYgbm90IHN1cHBvcnRlZAorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqCisgKiBBdHRlbXB0IHRvIGNvbmZpZ3VyZSB0aGUgaW50ZXJydXB0cyB1c2luZyB0aGUgYmVzdCBhdmFpbGFibGUKKyAqIGNhcGFiaWxpdGllcyBvZiB0aGUgaGFyZHdhcmUgYW5kIHRoZSBrZXJuZWwuCisgKiovCitzdGF0aWMgaW50IGl4Z2JldmZfc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGVyciA9IDA7CisJaW50IHZlY3Rvciwgdl9idWRnZXQ7CisKKwkvKgorCSAqIEl0J3MgZWFzeSB0byBiZSBncmVlZHkgZm9yIE1TSS1YIHZlY3RvcnMsIGJ1dCBpdCByZWFsbHkKKwkgKiBkb2Vzbid0IGRvIHVzIG11Y2ggZ29vZCBpZiB3ZSBoYXZlIGEgbG90IG1vcmUgdmVjdG9ycworCSAqIHRoYW4gQ1BVJ3MuICBTbyBsZXQncyBiZSBjb25zZXJ2YXRpdmUgYW5kIG9ubHkgYXNrIGZvcgorCSAqIChyb3VnaGx5KSB0d2ljZSB0aGUgbnVtYmVyIG9mIHZlY3RvcnMgYXMgdGhlcmUgYXJlIENQVSdzLgorCSAqLworCXZfYnVkZ2V0ID0gbWluKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgKyBhZGFwdGVyLT5udW1fdHhfcXVldWVzLAorCQkgICAgICAgKGludCkobnVtX29ubGluZV9jcHVzKCkgKiAyKSkgKyBOT05fUV9WRUNUT1JTOworCisJLyogQSBmYWlsdXJlIGluIE1TSS1YIGVudHJ5IGFsbG9jYXRpb24gaXNuJ3QgZmF0YWwsIGJ1dCBpdCBkb2VzCisJICogbWVhbiB3ZSBkaXNhYmxlIE1TSS1YIGNhcGFiaWxpdGllcyBvZiB0aGUgYWRhcHRlci4gKi8KKwlhZGFwdGVyLT5tc2l4X2VudHJpZXMgPSBrY2FsbG9jKHZfYnVkZ2V0LAorCQkJCQlzaXplb2Yoc3RydWN0IG1zaXhfZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFkYXB0ZXItPm1zaXhfZW50cmllcykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKHZlY3RvciA9IDA7IHZlY3RvciA8IHZfYnVkZ2V0OyB2ZWN0b3IrKykKKwkJYWRhcHRlci0+bXNpeF9lbnRyaWVzW3ZlY3Rvcl0uZW50cnkgPSB2ZWN0b3I7CisKKwlpeGdiZXZmX2FjcXVpcmVfbXNpeF92ZWN0b3JzKGFkYXB0ZXIsIHZfYnVkZ2V0KTsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogaXhnYmV2Zl9hbGxvY19xX3ZlY3RvcnMgLSBBbGxvY2F0ZSBtZW1vcnkgZm9yIGludGVycnVwdCB2ZWN0b3JzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIFdlIGFsbG9jYXRlIG9uZSBxX3ZlY3RvciBwZXIgcXVldWUgaW50ZXJydXB0LiAgSWYgYWxsb2NhdGlvbiBmYWlscyB3ZQorICogcmV0dXJuIC1FTk9NRU0uCisgKiovCitzdGF0aWMgaW50IGl4Z2JldmZfYWxsb2NfcV92ZWN0b3JzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHFfaWR4LCBudW1fcV92ZWN0b3JzOworCXN0cnVjdCBpeGdiZXZmX3FfdmVjdG9yICpxX3ZlY3RvcjsKKwlpbnQgbmFwaV92ZWN0b3JzOworCWludCAoKnBvbGwpKHN0cnVjdCBuYXBpX3N0cnVjdCAqLCBpbnQpOworCisJbnVtX3FfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9tc2l4X3ZlY3RvcnMgLSBOT05fUV9WRUNUT1JTOworCW5hcGlfdmVjdG9ycyA9IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7CisJcG9sbCA9ICZpeGdiZXZmX2NsZWFuX3J4b25seTsKKworCWZvciAocV9pZHggPSAwOyBxX2lkeCA8IG51bV9xX3ZlY3RvcnM7IHFfaWR4KyspIHsKKwkJcV92ZWN0b3IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciksIEdGUF9LRVJORUwpOworCQlpZiAoIXFfdmVjdG9yKQorCQkJZ290byBlcnJfb3V0OworCQlxX3ZlY3Rvci0+YWRhcHRlciA9IGFkYXB0ZXI7CisJCXFfdmVjdG9yLT52X2lkeCA9IHFfaWR4OworCQlxX3ZlY3Rvci0+ZWl0ciA9IGFkYXB0ZXItPmVpdHJfcGFyYW07CisJCWlmIChxX2lkeCA8IG5hcGlfdmVjdG9ycykKKwkJCW5ldGlmX25hcGlfYWRkKGFkYXB0ZXItPm5ldGRldiwgJnFfdmVjdG9yLT5uYXBpLAorCQkJCSAgICAgICAoKnBvbGwpLCA2NCk7CisJCWFkYXB0ZXItPnFfdmVjdG9yW3FfaWR4XSA9IHFfdmVjdG9yOworCX0KKworCXJldHVybiAwOworCitlcnJfb3V0OgorCXdoaWxlIChxX2lkeCkgeworCQlxX2lkeC0tOworCQlxX3ZlY3RvciA9IGFkYXB0ZXItPnFfdmVjdG9yW3FfaWR4XTsKKwkJbmV0aWZfbmFwaV9kZWwoJnFfdmVjdG9yLT5uYXBpKTsKKwkJa2ZyZWUocV92ZWN0b3IpOworCQlhZGFwdGVyLT5xX3ZlY3RvcltxX2lkeF0gPSBOVUxMOworCX0KKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyoqCisgKiBpeGdiZXZmX2ZyZWVfcV92ZWN0b3JzIC0gRnJlZSBtZW1vcnkgYWxsb2NhdGVkIGZvciBpbnRlcnJ1cHQgdmVjdG9ycworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGZyZWVzIHRoZSBtZW1vcnkgYWxsb2NhdGVkIHRvIHRoZSBxX3ZlY3RvcnMuICBJbiBhZGRpdGlvbiBpZgorICogTkFQSSBpcyBlbmFibGVkIGl0IHdpbGwgZGVsZXRlIGFueSByZWZlcmVuY2VzIHRvIHRoZSBOQVBJIHN0cnVjdCBwcmlvcgorICogdG8gZnJlZWluZyB0aGUgcV92ZWN0b3IuCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZXZmX2ZyZWVfcV92ZWN0b3JzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHFfaWR4LCBudW1fcV92ZWN0b3JzOworCWludCBuYXBpX3ZlY3RvcnM7CisKKwludW1fcV92ZWN0b3JzID0gYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlM7CisJbmFwaV92ZWN0b3JzID0gYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsKKworCWZvciAocV9pZHggPSAwOyBxX2lkeCA8IG51bV9xX3ZlY3RvcnM7IHFfaWR4KyspIHsKKwkJc3RydWN0IGl4Z2JldmZfcV92ZWN0b3IgKnFfdmVjdG9yID0gYWRhcHRlci0+cV92ZWN0b3JbcV9pZHhdOworCisJCWFkYXB0ZXItPnFfdmVjdG9yW3FfaWR4XSA9IE5VTEw7CisJCWlmIChxX2lkeCA8IG5hcGlfdmVjdG9ycykKKwkJCW5ldGlmX25hcGlfZGVsKCZxX3ZlY3Rvci0+bmFwaSk7CisJCWtmcmVlKHFfdmVjdG9yKTsKKwl9Cit9CisKKy8qKgorICogaXhnYmV2Zl9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eSAtIFJlc2V0IE1TSVggc2V0dXAKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlwY2lfZGlzYWJsZV9tc2l4KGFkYXB0ZXItPnBkZXYpOworCWtmcmVlKGFkYXB0ZXItPm1zaXhfZW50cmllcyk7CisJYWRhcHRlci0+bXNpeF9lbnRyaWVzID0gTlVMTDsKKworCXJldHVybjsKK30KKworLyoqCisgKiBpeGdiZXZmX2luaXRfaW50ZXJydXB0X3NjaGVtZSAtIERldGVybWluZSBpZiBNU0lYIGlzIHN1cHBvcnRlZCBhbmQgaW5pdAorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqCisgKiovCitzdGF0aWMgaW50IGl4Z2JldmZfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGVycjsKKworCS8qIE51bWJlciBvZiBzdXBwb3J0ZWQgcXVldWVzICovCisJaXhnYmV2Zl9zZXRfbnVtX3F1ZXVlcyhhZGFwdGVyKTsKKworCWVyciA9IGl4Z2JldmZfc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOworCWlmIChlcnIpIHsKKwkJaHdfZGJnKCZhZGFwdGVyLT5odywKKwkJICAgICAgICJVbmFibGUgdG8gc2V0dXAgaW50ZXJydXB0IGNhcGFiaWxpdGllc1xuIik7CisJCWdvdG8gZXJyX3NldF9pbnRlcnJ1cHQ7CisJfQorCisJZXJyID0gaXhnYmV2Zl9hbGxvY19xX3ZlY3RvcnMoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlod19kYmcoJmFkYXB0ZXItPmh3LCAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcXVldWUgIgorCQkgICAgICAgInZlY3RvcnNcbiIpOworCQlnb3RvIGVycl9hbGxvY19xX3ZlY3RvcnM7CisJfQorCisJZXJyID0gaXhnYmV2Zl9hbGxvY19xdWV1ZXMoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHF1ZXVlc1xuIik7CisJCWdvdG8gZXJyX2FsbG9jX3F1ZXVlczsKKwl9CisKKwlod19kYmcoJmFkYXB0ZXItPmh3LCAiTXVsdGlxdWV1ZSAlczogUnggUXVldWUgY291bnQgPSAldSwgIgorCSAgICAgICAiVHggUXVldWUgY291bnQgPSAldVxuIiwKKwkgICAgICAgKGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPiAxKSA/ICJFbmFibGVkIiA6CisJICAgICAgICJEaXNhYmxlZCIsIGFkYXB0ZXItPm51bV9yeF9xdWV1ZXMsIGFkYXB0ZXItPm51bV90eF9xdWV1ZXMpOworCisJc2V0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKKworCXJldHVybiAwOworZXJyX2FsbG9jX3F1ZXVlczoKKwlpeGdiZXZmX2ZyZWVfcV92ZWN0b3JzKGFkYXB0ZXIpOworZXJyX2FsbG9jX3FfdmVjdG9yczoKKwlpeGdiZXZmX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOworZXJyX3NldF9pbnRlcnJ1cHQ6CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBpeGdiZXZmX3N3X2luaXQgLSBJbml0aWFsaXplIGdlbmVyYWwgc29mdHdhcmUgc3RydWN0dXJlcworICogKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIpCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUgdG8gaW5pdGlhbGl6ZQorICoKKyAqIGl4Z2JldmZfc3dfaW5pdCBpbml0aWFsaXplcyB0aGUgQWRhcHRlciBwcml2YXRlIGRhdGEgc3RydWN0dXJlLgorICogRmllbGRzIGFyZSBpbml0aWFsaXplZCBiYXNlZCBvbiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIGFuZAorICogT1MgbmV0d29yayBkZXZpY2Ugc2V0dGluZ3MgKE1UVSBzaXplKS4KKyAqKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IGl4Z2JldmZfc3dfaW5pdChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCBlcnI7CisKKwkvKiBQQ0kgY29uZmlnIHNwYWNlIGluZm8gKi8KKworCWh3LT52ZW5kb3JfaWQgPSBwZGV2LT52ZW5kb3I7CisJaHctPmRldmljZV9pZCA9IHBkZXYtPmRldmljZTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfUkVWSVNJT05fSUQsICZody0+cmV2aXNpb25faWQpOworCWh3LT5zdWJzeXN0ZW1fdmVuZG9yX2lkID0gcGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKKwlody0+c3Vic3lzdGVtX2RldmljZV9pZCA9IHBkZXYtPnN1YnN5c3RlbV9kZXZpY2U7CisKKwlody0+bWJ4Lm9wcy5pbml0X3BhcmFtcyhodyk7CisJaHctPm1hYy5tYXhfdHhfcXVldWVzID0gTUFYX1RYX1FVRVVFUzsKKwlody0+bWFjLm1heF9yeF9xdWV1ZXMgPSBNQVhfUlhfUVVFVUVTOworCWVyciA9IGh3LT5tYWMub3BzLnJlc2V0X2h3KGh3KTsKKwlpZiAoZXJyKSB7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsCisJCSAgICAgICAgICJQRiBzdGlsbCBpbiByZXNldCBzdGF0ZSwgYXNzaWduaW5nIG5ldyBhZGRyZXNzXG4iKTsKKwkJcmFuZG9tX2V0aGVyX2FkZHIoaHctPm1hYy5hZGRyKTsKKwl9IGVsc2UgeworCQllcnIgPSBody0+bWFjLm9wcy5pbml0X2h3KGh3KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fRVJSICJpbml0X3NoYXJlZF9jb2RlIGZhaWxlZDogJWRcbiIsIGVycik7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCS8qIEVuYWJsZSBkeW5hbWljIGludGVycnVwdCB0aHJvdHRsaW5nIHJhdGVzICovCisJYWRhcHRlci0+ZWl0cl9wYXJhbSA9IDIwMDAwOworCWFkYXB0ZXItPml0cl9zZXR0aW5nID0gMTsKKworCS8qIHNldCBkZWZhdWx0cyBmb3IgZWl0ciBpbiBNZWdhQnl0ZXMgKi8KKwlhZGFwdGVyLT5laXRyX2xvdyA9IDEwOworCWFkYXB0ZXItPmVpdHJfaGlnaCA9IDIwOworCisJLyogc2V0IGRlZmF1bHQgcmluZyBzaXplcyAqLworCWFkYXB0ZXItPnR4X3JpbmdfY291bnQgPSBJWEdCRVZGX0RFRkFVTFRfVFhEOworCWFkYXB0ZXItPnJ4X3JpbmdfY291bnQgPSBJWEdCRVZGX0RFRkFVTFRfUlhEOworCisJLyogZW5hYmxlIHJ4IGNzdW0gYnkgZGVmYXVsdCAqLworCWFkYXB0ZXItPmZsYWdzIHw9IElYR0JFX0ZMQUdfUlhfQ1NVTV9FTkFCTEVEOworCisJc2V0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfaW5pdF9sYXN0X2NvdW50ZXJfc3RhdHMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJYWRhcHRlci0+c3RhdHMubGFzdF92ZmdwcmMgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZHUFJDKTsKKwlhZGFwdGVyLT5zdGF0cy5sYXN0X3ZmZ29yYyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkdPUkNfTFNCKTsKKwlhZGFwdGVyLT5zdGF0cy5sYXN0X3ZmZ29yYyB8PQorCQkoKCh1NjQpKElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkdPUkNfTVNCKSkpIDw8IDMyKTsKKwlhZGFwdGVyLT5zdGF0cy5sYXN0X3ZmZ3B0YyA9IElYR0JFX1JFQURfUkVHKGh3LCBJWEdCRV9WRkdQVEMpOworCWFkYXB0ZXItPnN0YXRzLmxhc3RfdmZnb3RjID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGR09UQ19MU0IpOworCWFkYXB0ZXItPnN0YXRzLmxhc3RfdmZnb3RjIHw9CisJCSgoKHU2NCkoSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGR09UQ19NU0IpKSkgPDwgMzIpOworCWFkYXB0ZXItPnN0YXRzLmxhc3RfdmZtcHJjID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTVBSQyk7CisKKwlhZGFwdGVyLT5zdGF0cy5iYXNlX3ZmZ3ByYyA9IGFkYXB0ZXItPnN0YXRzLmxhc3RfdmZncHJjOworCWFkYXB0ZXItPnN0YXRzLmJhc2VfdmZnb3JjID0gYWRhcHRlci0+c3RhdHMubGFzdF92ZmdvcmM7CisJYWRhcHRlci0+c3RhdHMuYmFzZV92ZmdwdGMgPSBhZGFwdGVyLT5zdGF0cy5sYXN0X3ZmZ3B0YzsKKwlhZGFwdGVyLT5zdGF0cy5iYXNlX3ZmZ290YyA9IGFkYXB0ZXItPnN0YXRzLmxhc3RfdmZnb3RjOworCWFkYXB0ZXItPnN0YXRzLmJhc2VfdmZtcHJjID0gYWRhcHRlci0+c3RhdHMubGFzdF92Zm1wcmM7Cit9CisKKyNkZWZpbmUgVVBEQVRFX1ZGX0NPVU5URVJfMzJiaXQocmVnLCBsYXN0X2NvdW50ZXIsIGNvdW50ZXIpCVwKKwl7CQkJCQkJCVwKKwkJdTMyIGN1cnJlbnRfY291bnRlciA9IElYR0JFX1JFQURfUkVHKGh3LCByZWcpOwlcCisJCWlmIChjdXJyZW50X2NvdW50ZXIgPCBsYXN0X2NvdW50ZXIpCQlcCisJCQljb3VudGVyICs9IDB4MTAwMDAwMDAwTEw7CQlcCisJCWxhc3RfY291bnRlciA9IGN1cnJlbnRfY291bnRlcjsJCQlcCisJCWNvdW50ZXIgJj0gMHhGRkZGRkZGRjAwMDAwMDAwTEw7CQlcCisJCWNvdW50ZXIgfD0gY3VycmVudF9jb3VudGVyOwkJCVwKKwl9CisKKyNkZWZpbmUgVVBEQVRFX1ZGX0NPVU5URVJfMzZiaXQocmVnX2xzYiwgcmVnX21zYiwgbGFzdF9jb3VudGVyLCBjb3VudGVyKSBcCisJewkJCQkJCQkJIFwKKwkJdTY0IGN1cnJlbnRfY291bnRlcl9sc2IgPSBJWEdCRV9SRUFEX1JFRyhodywgcmVnX2xzYik7CSBcCisJCXU2NCBjdXJyZW50X2NvdW50ZXJfbXNiID0gSVhHQkVfUkVBRF9SRUcoaHcsIHJlZ19tc2IpOwkgXAorCQl1NjQgY3VycmVudF9jb3VudGVyID0gKGN1cnJlbnRfY291bnRlcl9tc2IgPDwgMzIpIHwgICAgICBcCisJCQljdXJyZW50X2NvdW50ZXJfbHNiOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQlpZiAoY3VycmVudF9jb3VudGVyIDwgbGFzdF9jb3VudGVyKQkJCSBcCisJCQljb3VudGVyICs9IDB4MTAwMDAwMDAwMExMOwkJCSBcCisJCWxhc3RfY291bnRlciA9IGN1cnJlbnRfY291bnRlcjsJCQkJIFwKKwkJY291bnRlciAmPSAweEZGRkZGRkYwMDAwMDAwMDBMTDsJCQkgXAorCQljb3VudGVyIHw9IGN1cnJlbnRfY291bnRlcjsJCQkJIFwKKwl9CisvKioKKyAqIGl4Z2JldmZfdXBkYXRlX3N0YXRzIC0gVXBkYXRlIHRoZSBib2FyZCBzdGF0aXN0aWNzIGNvdW50ZXJzLgorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiovCit2b2lkIGl4Z2JldmZfdXBkYXRlX3N0YXRzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCVVQREFURV9WRl9DT1VOVEVSXzMyYml0KElYR0JFX1ZGR1BSQywgYWRhcHRlci0+c3RhdHMubGFzdF92ZmdwcmMsCisJCQkJYWRhcHRlci0+c3RhdHMudmZncHJjKTsKKwlVUERBVEVfVkZfQ09VTlRFUl8zMmJpdChJWEdCRV9WRkdQVEMsIGFkYXB0ZXItPnN0YXRzLmxhc3RfdmZncHRjLAorCQkJCWFkYXB0ZXItPnN0YXRzLnZmZ3B0Yyk7CisJVVBEQVRFX1ZGX0NPVU5URVJfMzZiaXQoSVhHQkVfVkZHT1JDX0xTQiwgSVhHQkVfVkZHT1JDX01TQiwKKwkJCQlhZGFwdGVyLT5zdGF0cy5sYXN0X3ZmZ29yYywKKwkJCQlhZGFwdGVyLT5zdGF0cy52ZmdvcmMpOworCVVQREFURV9WRl9DT1VOVEVSXzM2Yml0KElYR0JFX1ZGR09UQ19MU0IsIElYR0JFX1ZGR09UQ19NU0IsCisJCQkJYWRhcHRlci0+c3RhdHMubGFzdF92ZmdvdGMsCisJCQkJYWRhcHRlci0+c3RhdHMudmZnb3RjKTsKKwlVUERBVEVfVkZfQ09VTlRFUl8zMmJpdChJWEdCRV9WRk1QUkMsIGFkYXB0ZXItPnN0YXRzLmxhc3RfdmZtcHJjLAorCQkJCWFkYXB0ZXItPnN0YXRzLnZmbXByYyk7CisKKwkvKiBGaWxsIG91dCB0aGUgT1Mgc3RhdGlzdGljcyBzdHJ1Y3R1cmUgKi8KKwlhZGFwdGVyLT5uZXRfc3RhdHMubXVsdGljYXN0ID0gYWRhcHRlci0+c3RhdHMudmZtcHJjIC0KKwkJYWRhcHRlci0+c3RhdHMuYmFzZV92Zm1wcmM7Cit9CisKKy8qKgorICogaXhnYmV2Zl93YXRjaGRvZyAtIFRpbWVyIENhbGwtYmFjaworICogQGRhdGE6IHBvaW50ZXIgdG8gYWRhcHRlciBjYXN0IGludG8gYW4gdW5zaWduZWQgbG9uZworICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl93YXRjaGRvZyh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICopZGF0YTsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXU2NCBlaWNzID0gMDsKKwlpbnQgaTsKKworCS8qCisJICogRG8gdGhlIHdhdGNoZG9nIG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQgZHVlIHRvIHRoZSBsb3ZlbHkKKwkgKiBkZWxheXMgdGhhdCBzb21lIG9mIHRoZSBuZXdlciBoYXJkd2FyZSByZXF1aXJlcworCSAqLworCisJaWYgKHRlc3RfYml0KF9fSVhHQkVWRl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQlnb3RvIHdhdGNoZG9nX3Nob3J0X2NpcmN1aXQ7CisKKwkvKiBnZXQgb25lIGJpdCBmb3IgZXZlcnkgYWN0aXZlIHR4L3J4IGludGVycnVwdCB2ZWN0b3IgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX21zaXhfdmVjdG9ycyAtIE5PTl9RX1ZFQ1RPUlM7IGkrKykgeworCQlzdHJ1Y3QgaXhnYmV2Zl9xX3ZlY3RvciAqcXYgPSBhZGFwdGVyLT5xX3ZlY3RvcltpXTsKKwkJaWYgKHF2LT5yeHJfY291bnQgfHwgcXYtPnR4cl9jb3VudCkKKwkJCWVpY3MgfD0gKDEgPDwgaSk7CisJfQorCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WVEVJQ1MsICh1MzIpZWljcyk7CisKK3dhdGNoZG9nX3Nob3J0X2NpcmN1aXQ6CisJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+d2F0Y2hkb2dfdGFzayk7Cit9CisKKy8qKgorICogaXhnYmV2Zl90eF90aW1lb3V0IC0gUmVzcG9uZCB0byBhIFR4IEhhbmcKKyAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyB2b2lkIGl4Z2JldmZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJLyogRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQgKi8KKwlzY2hlZHVsZV93b3JrKCZhZGFwdGVyLT5yZXNldF90YXNrKTsKK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl9yZXNldF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyOworCWFkYXB0ZXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGl4Z2JldmZfYWRhcHRlciwgcmVzZXRfdGFzayk7CisKKwkvKiBJZiB3ZSdyZSBhbHJlYWR5IGRvd24gb3IgcmVzZXR0aW5nLCBqdXN0IGJhaWwgKi8KKwlpZiAodGVzdF9iaXQoX19JWEdCRVZGX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkgfHwKKwkgICAgdGVzdF9iaXQoX19JWEdCRVZGX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuOworCisJYWRhcHRlci0+dHhfdGltZW91dF9jb3VudCsrOworCisJaXhnYmV2Zl9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOworfQorCisvKioKKyAqIGl4Z2JldmZfd2F0Y2hkb2dfdGFzayAtIHdvcmtlciB0aHJlYWQgdG8gYnJpbmcgbGluayB1cAorICogQHdvcms6IHBvaW50ZXIgdG8gd29ya19zdHJ1Y3QgY29udGFpbmluZyBvdXIgZGF0YQorICoqLworc3RhdGljIHZvaWQgaXhnYmV2Zl93YXRjaGRvZ190YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCisJCQkJCQkgICAgICAgc3RydWN0IGl4Z2JldmZfYWRhcHRlciwKKwkJCQkJCSAgICAgICB3YXRjaGRvZ190YXNrKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGxpbmtfc3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCWJvb2wgbGlua191cCA9IGFkYXB0ZXItPmxpbmtfdXA7CisKKwlhZGFwdGVyLT5mbGFncyB8PSBJWEdCRV9GTEFHX0lOX1dBVENIRE9HX1RBU0s7CisKKwkvKgorCSAqIEFsd2F5cyBjaGVjayB0aGUgbGluayBvbiB0aGUgd2F0Y2hkb2cgYmVjYXVzZSB3ZSBoYXZlCisJICogbm8gTFNDIGludGVycnVwdAorCSAqLworCWlmIChody0+bWFjLm9wcy5jaGVja19saW5rKSB7CisJCWlmICgoaHctPm1hYy5vcHMuY2hlY2tfbGluayhodywgJmxpbmtfc3BlZWQsCisJCQkJCSAgICAmbGlua191cCwgZmFsc2UpKSAhPSAwKSB7CisJCQlhZGFwdGVyLT5saW5rX3VwID0gbGlua191cDsKKwkJCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSBsaW5rX3NwZWVkOworCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwkJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOworCQkJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cmVzZXRfdGFzayk7CisJCQlnb3RvIHBmX2hhc19yZXNldDsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGFsd2F5cyBhc3N1bWUgbGluayBpcyB1cCwgaWYgbm8gY2hlY2sgbGluaworCQkgKiBmdW5jdGlvbiAqLworCQlsaW5rX3NwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xMEdCX0ZVTEw7CisJCWxpbmtfdXAgPSB0cnVlOworCX0KKwlhZGFwdGVyLT5saW5rX3VwID0gbGlua191cDsKKwlhZGFwdGVyLT5saW5rX3NwZWVkID0gbGlua19zcGVlZDsKKworCWlmIChsaW5rX3VwKSB7CisJCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CisJCQlod19kYmcoJmFkYXB0ZXItPmh3LCAiTklDIExpbmsgaXMgVXAgJXMsICIsCisJCQkgICAgICAgKChsaW5rX3NwZWVkID09IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMKSA/CisJCQkJIjEwIEdicHMiIDogIjEgR2JwcyIpKTsKKwkJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKKwkJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhuZXRkZXYpOworCQl9IGVsc2UgeworCQkJLyogRm9yY2UgZGV0ZWN0aW9uIG9mIGh1bmcgY29udHJvbGxlciAqLworCQkJYWRhcHRlci0+ZGV0ZWN0X3R4X2h1bmcgPSB0cnVlOworCQl9CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+bGlua191cCA9IGZhbHNlOworCQlhZGFwdGVyLT5saW5rX3NwZWVkID0gMDsKKwkJaWYgKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgeworCQkJaHdfZGJnKCZhZGFwdGVyLT5odywgIk5JQyBMaW5rIGlzIERvd25cbiIpOworCQkJbmV0aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwkJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpOworCQl9CisJfQorCitwZl9oYXNfcmVzZXQ6CisJaXhnYmV2Zl91cGRhdGVfc3RhdHMoYWRhcHRlcik7CisKKwkvKiBGb3JjZSBkZXRlY3Rpb24gb2YgaHVuZyBjb250cm9sbGVyIGV2ZXJ5IHdhdGNoZG9nIHBlcmlvZCAqLworCWFkYXB0ZXItPmRldGVjdF90eF9odW5nID0gdHJ1ZTsKKworCS8qIFJlc2V0IHRoZSB0aW1lciAqLworCWlmICghdGVzdF9iaXQoX19JWEdCRVZGX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIsCisJCQkgIHJvdW5kX2ppZmZpZXMoamlmZmllcyArICgyICogSFopKSk7CisKKwlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19JTl9XQVRDSERPR19UQVNLOworfQorCisvKioKKyAqIGl4Z2JldmZfZnJlZV90eF9yZXNvdXJjZXMgLSBGcmVlIFR4IFJlc291cmNlcyBwZXIgUXVldWUKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICogQHR4X3Jpbmc6IFR4IGRlc2NyaXB0b3IgcmluZyBmb3IgYSBzcGVjaWZpYyBxdWV1ZQorICoKKyAqIEZyZWUgYWxsIHRyYW5zbWl0IHNvZnR3YXJlIHJlc291cmNlcworICoqLwordm9pZCBpeGdiZXZmX2ZyZWVfdHhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgICAgc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlpeGdiZXZmX2NsZWFuX3R4X3JpbmcoYWRhcHRlciwgdHhfcmluZyk7CisKKwl2ZnJlZSh0eF9yaW5nLT50eF9idWZmZXJfaW5mbyk7CisJdHhfcmluZy0+dHhfYnVmZmVyX2luZm8gPSBOVUxMOworCisJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCB0eF9yaW5nLT5zaXplLCB0eF9yaW5nLT5kZXNjLCB0eF9yaW5nLT5kbWEpOworCisJdHhfcmluZy0+ZGVzYyA9IE5VTEw7Cit9CisKKy8qKgorICogaXhnYmV2Zl9mcmVlX2FsbF90eF9yZXNvdXJjZXMgLSBGcmVlIFR4IFJlc291cmNlcyBmb3IgQWxsIFF1ZXVlcworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKgorICogRnJlZSBhbGwgdHJhbnNtaXQgc29mdHdhcmUgcmVzb3VyY2VzCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZXZmX2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykKKwkJaWYgKGFkYXB0ZXItPnR4X3JpbmdbaV0uZGVzYykKKwkJCWl4Z2JldmZfZnJlZV90eF9yZXNvdXJjZXMoYWRhcHRlciwKKwkJCQkJCSAgJmFkYXB0ZXItPnR4X3JpbmdbaV0pOworCit9CisKKy8qKgorICogaXhnYmV2Zl9zZXR1cF90eF9yZXNvdXJjZXMgLSBhbGxvY2F0ZSBUeCByZXNvdXJjZXMgKERlc2NyaXB0b3JzKQorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiBAdHhfcmluZzogICAgdHggZGVzY3JpcHRvciByaW5nIChmb3IgYSBzcGVjaWZpYyBxdWV1ZSkgdG8gc2V0dXAKKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCisgKiovCitpbnQgaXhnYmV2Zl9zZXR1cF90eF9yZXNvdXJjZXMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgICBzdHJ1Y3QgaXhnYmV2Zl9yaW5nICp0eF9yaW5nKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlpbnQgc2l6ZTsKKworCXNpemUgPSBzaXplb2Yoc3RydWN0IGl4Z2JldmZfdHhfYnVmZmVyKSAqIHR4X3JpbmctPmNvdW50OworCXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvID0gdm1hbGxvYyhzaXplKTsKKwlpZiAoIXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvKQorCQlnb3RvIGVycjsKKwltZW1zZXQodHhfcmluZy0+dHhfYnVmZmVyX2luZm8sIDAsIHNpemUpOworCisJLyogcm91bmQgdXAgdG8gbmVhcmVzdCA0SyAqLworCXR4X3JpbmctPnNpemUgPSB0eF9yaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfdHhfZGVzYyk7CisJdHhfcmluZy0+c2l6ZSA9IEFMSUdOKHR4X3JpbmctPnNpemUsIDQwOTYpOworCisJdHhfcmluZy0+ZGVzYyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHR4X3JpbmctPnNpemUsCisJCQkJCSAgICAgJnR4X3JpbmctPmRtYSk7CisJaWYgKCF0eF9yaW5nLT5kZXNjKQorCQlnb3RvIGVycjsKKworCXR4X3JpbmctPm5leHRfdG9fdXNlID0gMDsKKwl0eF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gMDsKKwl0eF9yaW5nLT53b3JrX2xpbWl0ID0gdHhfcmluZy0+Y291bnQ7CisJcmV0dXJuIDA7CisKK2VycjoKKwl2ZnJlZSh0eF9yaW5nLT50eF9idWZmZXJfaW5mbyk7CisJdHhfcmluZy0+dHhfYnVmZmVyX2luZm8gPSBOVUxMOworCWh3X2RiZygmYWRhcHRlci0+aHcsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgdHJhbnNtaXQgIgorCSAgICAgICAiZGVzY3JpcHRvciByaW5nXG4iKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKworLyoqCisgKiBpeGdiZXZmX3NldHVwX2FsbF90eF9yZXNvdXJjZXMgLSBhbGxvY2F0ZSBhbGwgcXVldWVzIFR4IHJlc291cmNlcworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKgorICogSWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHdpdGggYW4gZXJyb3IsIHRoZW4gaXQncyBwb3NzaWJsZSBvbmUgb3IKKyAqIG1vcmUgb2YgdGhlIHJpbmdzIGlzIHBvcHVsYXRlZCAod2hpbGUgdGhlIHJlc3QgYXJlIG5vdCkuICBJdCBpcyB0aGUKKyAqIGNhbGxlcnMgZHV0eSB0byBjbGVhbiB0aG9zZSBvcnBoYW5lZCByaW5ncy4KKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCisgKiovCitzdGF0aWMgaW50IGl4Z2JldmZfc2V0dXBfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpLCBlcnIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykgeworCQllcnIgPSBpeGdiZXZmX3NldHVwX3R4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+dHhfcmluZ1tpXSk7CisJCWlmICghZXJyKQorCQkJY29udGludWU7CisJCWh3X2RiZygmYWRhcHRlci0+aHcsCisJCSAgICAgICAiQWxsb2NhdGlvbiBmb3IgVHggUXVldWUgJXUgZmFpbGVkXG4iLCBpKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBpeGdiZXZmX3NldHVwX3J4X3Jlc291cmNlcyAtIGFsbG9jYXRlIFJ4IHJlc291cmNlcyAoRGVzY3JpcHRvcnMpCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEByeF9yaW5nOiAgICByeCBkZXNjcmlwdG9yIHJpbmcgKGZvciBhIHNwZWNpZmljIHF1ZXVlKSB0byBzZXR1cAorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCisgKiovCitpbnQgaXhnYmV2Zl9zZXR1cF9yeF9yZXNvdXJjZXMoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgICBzdHJ1Y3QgaXhnYmV2Zl9yaW5nICpyeF9yaW5nKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlpbnQgc2l6ZTsKKworCXNpemUgPSBzaXplb2Yoc3RydWN0IGl4Z2JldmZfcnhfYnVmZmVyKSAqIHJ4X3JpbmctPmNvdW50OworCXJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvID0gdm1hbGxvYyhzaXplKTsKKwlpZiAoIXJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvKSB7CisJCWh3X2RiZygmYWRhcHRlci0+aHcsCisJCSAgICAgICAiVW5hYmxlIHRvIHZtYWxsb2MgYnVmZmVyIG1lbW9yeSBmb3IgIgorCQkgICAgICAgInRoZSByZWNlaXZlIGRlc2NyaXB0b3IgcmluZ1xuIik7CisJCWdvdG8gYWxsb2NfZmFpbGVkOworCX0KKwltZW1zZXQocnhfcmluZy0+cnhfYnVmZmVyX2luZm8sIDAsIHNpemUpOworCisJLyogUm91bmQgdXAgdG8gbmVhcmVzdCA0SyAqLworCXJ4X3JpbmctPnNpemUgPSByeF9yaW5nLT5jb3VudCAqIHNpemVvZih1bmlvbiBpeGdiZV9hZHZfcnhfZGVzYyk7CisJcnhfcmluZy0+c2l6ZSA9IEFMSUdOKHJ4X3JpbmctPnNpemUsIDQwOTYpOworCisJcnhfcmluZy0+ZGVzYyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHJ4X3JpbmctPnNpemUsCisJCQkJCSAgICAgJnJ4X3JpbmctPmRtYSk7CisKKwlpZiAoIXJ4X3JpbmctPmRlc2MpIHsKKwkJaHdfZGJnKCZhZGFwdGVyLT5odywKKwkJICAgICAgICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciAiCisJCSAgICAgICAidGhlIHJlY2VpdmUgZGVzY3JpcHRvciByaW5nXG4iKTsKKwkJdmZyZWUocnhfcmluZy0+cnhfYnVmZmVyX2luZm8pOworCQlyeF9yaW5nLT5yeF9idWZmZXJfaW5mbyA9IE5VTEw7CisJCWdvdG8gYWxsb2NfZmFpbGVkOworCX0KKworCXJ4X3JpbmctPm5leHRfdG9fY2xlYW4gPSAwOworCXJ4X3JpbmctPm5leHRfdG9fdXNlID0gMDsKKworCXJldHVybiAwOworYWxsb2NfZmFpbGVkOgorCXJldHVybiAtRU5PTUVNOworfQorCisvKioKKyAqIGl4Z2JldmZfc2V0dXBfYWxsX3J4X3Jlc291cmNlcyAtIGFsbG9jYXRlIGFsbCBxdWV1ZXMgUnggcmVzb3VyY2VzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBJZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgd2l0aCBhbiBlcnJvciwgdGhlbiBpdCdzIHBvc3NpYmxlIG9uZSBvcgorICogbW9yZSBvZiB0aGUgcmluZ3MgaXMgcG9wdWxhdGVkICh3aGlsZSB0aGUgcmVzdCBhcmUgbm90KS4gIEl0IGlzIHRoZQorICogY2FsbGVycyBkdXR5IHRvIGNsZWFuIHRob3NlIG9ycGhhbmVkIHJpbmdzLgorICoKKyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKKyAqKi8KK3N0YXRpYyBpbnQgaXhnYmV2Zl9zZXR1cF9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGksIGVyciA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCWVyciA9IGl4Z2JldmZfc2V0dXBfcnhfcmVzb3VyY2VzKGFkYXB0ZXIsICZhZGFwdGVyLT5yeF9yaW5nW2ldKTsKKwkJaWYgKCFlcnIpCisJCQljb250aW51ZTsKKwkJaHdfZGJnKCZhZGFwdGVyLT5odywKKwkJICAgICAgICJBbGxvY2F0aW9uIGZvciBSeCBRdWV1ZSAldSBmYWlsZWRcbiIsIGkpOworCQlicmVhazsKKwl9CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBpeGdiZXZmX2ZyZWVfcnhfcmVzb3VyY2VzIC0gRnJlZSBSeCBSZXNvdXJjZXMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICogQHJ4X3Jpbmc6IHJpbmcgdG8gY2xlYW4gdGhlIHJlc291cmNlcyBmcm9tCisgKgorICogRnJlZSBhbGwgcmVjZWl2ZSBzb2Z0d2FyZSByZXNvdXJjZXMKKyAqKi8KK3ZvaWQgaXhnYmV2Zl9mcmVlX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIHN0cnVjdCBpeGdiZXZmX3JpbmcgKnJ4X3JpbmcpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJaXhnYmV2Zl9jbGVhbl9yeF9yaW5nKGFkYXB0ZXIsIHJ4X3JpbmcpOworCisJdmZyZWUocnhfcmluZy0+cnhfYnVmZmVyX2luZm8pOworCXJ4X3JpbmctPnJ4X2J1ZmZlcl9pbmZvID0gTlVMTDsKKworCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgcnhfcmluZy0+c2l6ZSwgcnhfcmluZy0+ZGVzYywgcnhfcmluZy0+ZG1hKTsKKworCXJ4X3JpbmctPmRlc2MgPSBOVUxMOworfQorCisvKioKKyAqIGl4Z2JldmZfZnJlZV9hbGxfcnhfcmVzb3VyY2VzIC0gRnJlZSBSeCBSZXNvdXJjZXMgZm9yIEFsbCBRdWV1ZXMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICoKKyAqIEZyZWUgYWxsIHJlY2VpdmUgc29mdHdhcmUgcmVzb3VyY2VzCisgKiovCitzdGF0aWMgdm9pZCBpeGdiZXZmX2ZyZWVfYWxsX3J4X3Jlc291cmNlcyhzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKKwkJaWYgKGFkYXB0ZXItPnJ4X3JpbmdbaV0uZGVzYykKKwkJCWl4Z2JldmZfZnJlZV9yeF9yZXNvdXJjZXMoYWRhcHRlciwKKwkJCQkJCSAgJmFkYXB0ZXItPnJ4X3JpbmdbaV0pOworfQorCisvKioKKyAqIGl4Z2JldmZfb3BlbiAtIENhbGxlZCB3aGVuIGEgbmV0d29yayBpbnRlcmZhY2UgaXMgbWFkZSBhY3RpdmUKKyAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQorICoKKyAqIFRoZSBvcGVuIGVudHJ5IHBvaW50IGlzIGNhbGxlZCB3aGVuIGEgbmV0d29yayBpbnRlcmZhY2UgaXMgbWFkZQorICogYWN0aXZlIGJ5IHRoZSBzeXN0ZW0gKElGRl9VUCkuICBBdCB0aGlzIHBvaW50IGFsbCByZXNvdXJjZXMgbmVlZGVkCisgKiBmb3IgdHJhbnNtaXQgYW5kIHJlY2VpdmUgb3BlcmF0aW9ucyBhcmUgYWxsb2NhdGVkLCB0aGUgaW50ZXJydXB0CisgKiBoYW5kbGVyIGlzIHJlZ2lzdGVyZWQgd2l0aCB0aGUgT1MsIHRoZSB3YXRjaGRvZyB0aW1lciBpcyBzdGFydGVkLAorICogYW5kIHRoZSBzdGFjayBpcyBub3RpZmllZCB0aGF0IHRoZSBpbnRlcmZhY2UgaXMgcmVhZHkuCisgKiovCitzdGF0aWMgaW50IGl4Z2JldmZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpeGdiZV9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IGVycjsKKworCS8qIGRpc2FsbG93IG9wZW4gZHVyaW5nIHRlc3QgKi8KKwlpZiAodGVzdF9iaXQoX19JWEdCRVZGX1RFU1RJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoaHctPmFkYXB0ZXJfc3RvcHBlZCkgeworCQlpeGdiZXZmX3Jlc2V0KGFkYXB0ZXIpOworCQkvKiBpZiBhZGFwdGVyIGlzIHN0aWxsIHN0b3BwZWQgdGhlbiBQRiBpc24ndCB1cCBhbmQKKwkJICogdGhlIHZmIGNhbid0IHN0YXJ0LiAqLworCQlpZiAoaHctPmFkYXB0ZXJfc3RvcHBlZCkgeworCQkJZXJyID0gSVhHQkVfRVJSX01CWDsKKwkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHN0YXJ0IC0gcGVyaGFwcyB0aGUgUEYiCisJCQkgICAgICAgIkRyaXZlciBpc24ndCB1cCB5ZXRcbiIpOworCQkJZ290byBlcnJfc2V0dXBfcmVzZXQ7CisJCX0KKwl9CisKKwkvKiBhbGxvY2F0ZSB0cmFuc21pdCBkZXNjcmlwdG9ycyAqLworCWVyciA9IGl4Z2JldmZfc2V0dXBfYWxsX3R4X3Jlc291cmNlcyhhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9zZXR1cF90eDsKKworCS8qIGFsbG9jYXRlIHJlY2VpdmUgZGVzY3JpcHRvcnMgKi8KKwllcnIgPSBpeGdiZXZmX3NldHVwX2FsbF9yeF9yZXNvdXJjZXMoYWRhcHRlcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfc2V0dXBfcng7CisKKwlpeGdiZXZmX2NvbmZpZ3VyZShhZGFwdGVyKTsKKworCS8qCisJICogTWFwIHRoZSBUeC9SeCByaW5ncyB0byB0aGUgdmVjdG9ycyB3ZSB3ZXJlIGFsbG90dGVkLgorCSAqIGlmIHJlcXVlc3RfaXJxIHdpbGwgYmUgY2FsbGVkIGluIHRoaXMgZnVuY3Rpb24gbWFwX3JpbmdzCisJICogbXVzdCBiZSBjYWxsZWQgKmJlZm9yZSogdXBfY29tcGxldGUKKwkgKi8KKwlpeGdiZXZmX21hcF9yaW5nc190b192ZWN0b3JzKGFkYXB0ZXIpOworCisJZXJyID0gaXhnYmV2Zl91cF9jb21wbGV0ZShhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl91cDsKKworCS8qIGNsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMsIG1heSBhdXRvIG1hc2sgKi8KKwlJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVlRFSUNSKTsKKwllcnIgPSBpeGdiZXZmX3JlcXVlc3RfaXJxKGFkYXB0ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3JlcV9pcnE7CisKKwlpeGdiZXZmX2lycV9lbmFibGUoYWRhcHRlciwgdHJ1ZSwgdHJ1ZSk7CisKKwlyZXR1cm4gMDsKKworZXJyX3JlcV9pcnE6CisJaXhnYmV2Zl9kb3duKGFkYXB0ZXIpOworZXJyX3VwOgorCWl4Z2JldmZfZnJlZV9pcnEoYWRhcHRlcik7CitlcnJfc2V0dXBfcng6CisJaXhnYmV2Zl9mcmVlX2FsbF9yeF9yZXNvdXJjZXMoYWRhcHRlcik7CitlcnJfc2V0dXBfdHg6CisJaXhnYmV2Zl9mcmVlX2FsbF90eF9yZXNvdXJjZXMoYWRhcHRlcik7CisJaXhnYmV2Zl9yZXNldChhZGFwdGVyKTsKKworZXJyX3NldHVwX3Jlc2V0OgorCisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBpeGdiZXZmX2Nsb3NlIC0gRGlzYWJsZXMgYSBuZXR3b3JrIGludGVyZmFjZQorICogQG5ldGRldjogbmV0d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgMCwgdGhpcyBpcyBub3QgYWxsb3dlZCB0byBmYWlsCisgKgorICogVGhlIGNsb3NlIGVudHJ5IHBvaW50IGlzIGNhbGxlZCB3aGVuIGFuIGludGVyZmFjZSBpcyBkZS1hY3RpdmF0ZWQKKyAqIGJ5IHRoZSBPUy4gIFRoZSBoYXJkd2FyZSBpcyBzdGlsbCB1bmRlciB0aGUgZHJpdmVycyBjb250cm9sLCBidXQKKyAqIG5lZWRzIHRvIGJlIGRpc2FibGVkLiAgQSBnbG9iYWwgTUFDIHJlc2V0IGlzIGlzc3VlZCB0byBzdG9wIHRoZQorICogaGFyZHdhcmUsIGFuZCBhbGwgdHJhbnNtaXQgYW5kIHJlY2VpdmUgcmVzb3VyY2VzIGFyZSBmcmVlZC4KKyAqKi8KK3N0YXRpYyBpbnQgaXhnYmV2Zl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaXhnYmV2Zl9kb3duKGFkYXB0ZXIpOworCWl4Z2JldmZfZnJlZV9pcnEoYWRhcHRlcik7CisKKwlpeGdiZXZmX2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhhZGFwdGVyKTsKKwlpeGdiZXZmX2ZyZWVfYWxsX3J4X3Jlc291cmNlcyhhZGFwdGVyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGl4Z2JldmZfdHNvKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCSAgICAgICBzdHJ1Y3QgaXhnYmV2Zl9yaW5nICp0eF9yaW5nLAorCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHR4X2ZsYWdzLCB1OCAqaGRyX2xlbikKK3sKKwlzdHJ1Y3QgaXhnYmVfYWR2X3R4X2NvbnRleHRfZGVzYyAqY29udGV4dF9kZXNjOworCXVuc2lnbmVkIGludCBpOworCWludCBlcnI7CisJc3RydWN0IGl4Z2JldmZfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbzsKKwl1MzIgdmxhbl9tYWNpcF9sZW5zID0gMCwgdHlwZV90dWNtZF9tbGhsOworCXUzMiBtc3NfbDRsZW5faWR4LCBsNGxlbjsKKworCWlmIChza2JfaXNfZ3NvKHNrYikpIHsKKwkJaWYgKHNrYl9oZWFkZXJfY2xvbmVkKHNrYikpIHsKKwkJCWVyciA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCAwLCAwLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChlcnIpCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCQlsNGxlbiA9IHRjcF9oZHJsZW4oc2tiKTsKKwkJKmhkcl9sZW4gKz0gbDRsZW47CisKKwkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7CisJCQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IGlwX2hkcihza2IpOworCQkJaXBoLT50b3RfbGVuID0gMDsKKwkJCWlwaC0+Y2hlY2sgPSAwOworCQkJdGNwX2hkcihza2IpLT5jaGVjayA9IH5jc3VtX3RjcHVkcF9tYWdpYyhpcGgtPnNhZGRyLAorCQkJCQkJCQkgaXBoLT5kYWRkciwgMCwKKwkJCQkJCQkJIElQUFJPVE9fVENQLAorCQkJCQkJCQkgMCk7CisJCQlhZGFwdGVyLT5od190c29fY3R4dCsrOworCQl9IGVsc2UgaWYgKHNrYl9pc19nc29fdjYoc2tiKSkgeworCQkJaXB2Nl9oZHIoc2tiKS0+cGF5bG9hZF9sZW4gPSAwOworCQkJdGNwX2hkcihza2IpLT5jaGVjayA9CisJCQkgICAgfmNzdW1faXB2Nl9tYWdpYygmaXB2Nl9oZHIoc2tiKS0+c2FkZHIsCisJCQkJCSAgICAgJmlwdjZfaGRyKHNrYiktPmRhZGRyLAorCQkJCQkgICAgIDAsIElQUFJPVE9fVENQLCAwKTsKKwkJCWFkYXB0ZXItPmh3X3RzbzZfY3R4dCsrOworCQl9CisKKwkJaSA9IHR4X3JpbmctPm5leHRfdG9fdXNlOworCisJCXR4X2J1ZmZlcl9pbmZvID0gJnR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldOworCQljb250ZXh0X2Rlc2MgPSBJWEdCRV9UWF9DVFhUREVTQ19BRFYoKnR4X3JpbmcsIGkpOworCisJCS8qIFZMQU4gTUFDTEVOIElQTEVOICovCisJCWlmICh0eF9mbGFncyAmIElYR0JFX1RYX0ZMQUdTX1ZMQU4pCisJCQl2bGFuX21hY2lwX2xlbnMgfD0KKwkJCQkodHhfZmxhZ3MgJiBJWEdCRV9UWF9GTEFHU19WTEFOX01BU0spOworCQl2bGFuX21hY2lwX2xlbnMgfD0gKChza2JfbmV0d29ya19vZmZzZXQoc2tiKSkgPDwKKwkJCQkgICAgSVhHQkVfQURWVFhEX01BQ0xFTl9TSElGVCk7CisJCSpoZHJfbGVuICs9IHNrYl9uZXR3b3JrX29mZnNldChza2IpOworCQl2bGFuX21hY2lwX2xlbnMgfD0KKwkJCShza2JfdHJhbnNwb3J0X2hlYWRlcihza2IpIC0gc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpOworCQkqaGRyX2xlbiArPQorCQkJKHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikgLSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSk7CisJCWNvbnRleHRfZGVzYy0+dmxhbl9tYWNpcF9sZW5zID0gY3B1X3RvX2xlMzIodmxhbl9tYWNpcF9sZW5zKTsKKwkJY29udGV4dF9kZXNjLT5zZXFudW1fc2VlZCA9IDA7CisKKwkJLyogQURWIERUWVAgVFVDTUQgTUtSTE9DL0lTQ1NJSEVETEVOICovCisJCXR5cGVfdHVjbWRfbWxobCA9IChJWEdCRV9UWERfQ01EX0RFWFQgfAorCQkJCSAgICBJWEdCRV9BRFZUWERfRFRZUF9DVFhUKTsKKworCQlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCisJCQl0eXBlX3R1Y21kX21saGwgfD0gSVhHQkVfQURWVFhEX1RVQ01EX0lQVjQ7CisJCXR5cGVfdHVjbWRfbWxobCB8PSBJWEdCRV9BRFZUWERfVFVDTURfTDRUX1RDUDsKKwkJY29udGV4dF9kZXNjLT50eXBlX3R1Y21kX21saGwgPSBjcHVfdG9fbGUzMih0eXBlX3R1Y21kX21saGwpOworCisJCS8qIE1TUyBMNExFTiBJRFggKi8KKwkJbXNzX2w0bGVuX2lkeCA9CisJCQkoc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA8PCBJWEdCRV9BRFZUWERfTVNTX1NISUZUKTsKKwkJbXNzX2w0bGVuX2lkeCB8PSAobDRsZW4gPDwgSVhHQkVfQURWVFhEX0w0TEVOX1NISUZUKTsKKwkJLyogdXNlIGluZGV4IDEgZm9yIFRTTyAqLworCQltc3NfbDRsZW5faWR4IHw9ICgxIDw8IElYR0JFX0FEVlRYRF9JRFhfU0hJRlQpOworCQljb250ZXh0X2Rlc2MtPm1zc19sNGxlbl9pZHggPSBjcHVfdG9fbGUzMihtc3NfbDRsZW5faWR4KTsKKworCQl0eF9idWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7CisJCXR4X2J1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKKworCQlpKys7CisJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQorCQkJaSA9IDA7CisJCXR4X3JpbmctPm5leHRfdG9fdXNlID0gaTsKKworCQlyZXR1cm4gdHJ1ZTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBib29sIGl4Z2JldmZfdHhfY3N1bShzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgIHN0cnVjdCBpeGdiZXZmX3JpbmcgKnR4X3JpbmcsCisJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHR4X2ZsYWdzKQoreworCXN0cnVjdCBpeGdiZV9hZHZfdHhfY29udGV4dF9kZXNjICpjb250ZXh0X2Rlc2M7CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGl4Z2JldmZfdHhfYnVmZmVyICp0eF9idWZmZXJfaW5mbzsKKwl1MzIgdmxhbl9tYWNpcF9sZW5zID0gMCwgdHlwZV90dWNtZF9tbGhsID0gMDsKKworCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMIHx8CisJICAgICh0eF9mbGFncyAmIElYR0JFX1RYX0ZMQUdTX1ZMQU4pKSB7CisJCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKKwkJdHhfYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+dHhfYnVmZmVyX2luZm9baV07CisJCWNvbnRleHRfZGVzYyA9IElYR0JFX1RYX0NUWFRERVNDX0FEVigqdHhfcmluZywgaSk7CisKKwkJaWYgKHR4X2ZsYWdzICYgSVhHQkVfVFhfRkxBR1NfVkxBTikKKwkJCXZsYW5fbWFjaXBfbGVucyB8PSAodHhfZmxhZ3MgJgorCQkJCQkgICAgSVhHQkVfVFhfRkxBR1NfVkxBTl9NQVNLKTsKKwkJdmxhbl9tYWNpcF9sZW5zIHw9IChza2JfbmV0d29ya19vZmZzZXQoc2tiKSA8PAorCQkJCSAgICBJWEdCRV9BRFZUWERfTUFDTEVOX1NISUZUKTsKKwkJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpCisJCQl2bGFuX21hY2lwX2xlbnMgfD0gKHNrYl90cmFuc3BvcnRfaGVhZGVyKHNrYikgLQorCQkJCQkgICAgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikpOworCisJCWNvbnRleHRfZGVzYy0+dmxhbl9tYWNpcF9sZW5zID0gY3B1X3RvX2xlMzIodmxhbl9tYWNpcF9sZW5zKTsKKwkJY29udGV4dF9kZXNjLT5zZXFudW1fc2VlZCA9IDA7CisKKwkJdHlwZV90dWNtZF9tbGhsIHw9IChJWEdCRV9UWERfQ01EX0RFWFQgfAorCQkJCSAgICBJWEdCRV9BRFZUWERfRFRZUF9DVFhUKTsKKworCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgeworCQkJc3dpdGNoIChza2ItPnByb3RvY29sKSB7CisJCQljYXNlIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOgorCQkJCXR5cGVfdHVjbWRfbWxobCB8PSBJWEdCRV9BRFZUWERfVFVDTURfSVBWNDsKKwkJCQlpZiAoaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fVENQKQorCQkJCQl0eXBlX3R1Y21kX21saGwgfD0KKwkJCQkJICAgIElYR0JFX0FEVlRYRF9UVUNNRF9MNFRfVENQOworCQkJCWJyZWFrOworCQkJY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgorCQkJCS8qIFhYWCB3aGF0IGFib3V0IG90aGVyIFY2IGhlYWRlcnM/PyAqLworCQkJCWlmIChpcHY2X2hkcihza2IpLT5uZXh0aGRyID09IElQUFJPVE9fVENQKQorCQkJCQl0eXBlX3R1Y21kX21saGwgfD0KKwkJCQkJCUlYR0JFX0FEVlRYRF9UVUNNRF9MNFRfVENQOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlpZiAodW5saWtlbHkobmV0X3JhdGVsaW1pdCgpKSkgeworCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCSAgICAgICAicGFydGlhbCBjaGVja3N1bSBidXQgIgorCQkJCQkgICAgICAgInByb3RvPSV4IVxuIiwKKwkJCQkJICAgICAgIHNrYi0+cHJvdG9jb2wpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWNvbnRleHRfZGVzYy0+dHlwZV90dWNtZF9tbGhsID0gY3B1X3RvX2xlMzIodHlwZV90dWNtZF9tbGhsKTsKKwkJLyogdXNlIGluZGV4IHplcm8gZm9yIHR4IGNoZWNrc3VtIG9mZmxvYWQgKi8KKwkJY29udGV4dF9kZXNjLT5tc3NfbDRsZW5faWR4ID0gMDsKKworCQl0eF9idWZmZXJfaW5mby0+dGltZV9zdGFtcCA9IGppZmZpZXM7CisJCXR4X2J1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKKworCQlhZGFwdGVyLT5od19jc3VtX3R4X2dvb2QrKzsKKwkJaSsrOworCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKKwkJCWkgPSAwOworCQl0eF9yaW5nLT5uZXh0X3RvX3VzZSA9IGk7CisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW50IGl4Z2JldmZfdHhfbWFwKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgIHN0cnVjdCBpeGdiZXZmX3JpbmcgKnR4X3JpbmcsCisJCQkgIHN0cnVjdCBza19idWZmICpza2IsIHUzMiB0eF9mbGFncywKKwkJCSAgdW5zaWduZWQgaW50IGZpcnN0KQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlzdHJ1Y3QgaXhnYmV2Zl90eF9idWZmZXIgKnR4X2J1ZmZlcl9pbmZvOworCXVuc2lnbmVkIGludCBsZW47CisJdW5zaWduZWQgaW50IHRvdGFsID0gc2tiLT5sZW47CisJdW5zaWduZWQgaW50IG9mZnNldCA9IDAsIHNpemUsIGNvdW50ID0gMCwgaTsKKwl1bnNpZ25lZCBpbnQgbnJfZnJhZ3MgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCXVuc2lnbmVkIGludCBmOworCisJaSA9IHR4X3JpbmctPm5leHRfdG9fdXNlOworCisJbGVuID0gbWluKHNrYl9oZWFkbGVuKHNrYiksIHRvdGFsKTsKKwl3aGlsZSAobGVuKSB7CisJCXR4X2J1ZmZlcl9pbmZvID0gJnR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldOworCQlzaXplID0gbWluKGxlbiwgKHVuc2lnbmVkIGludClJWEdCRV9NQVhfREFUQV9QRVJfVFhEKTsKKworCQl0eF9idWZmZXJfaW5mby0+bGVuZ3RoID0gc2l6ZTsKKwkJdHhfYnVmZmVyX2luZm8tPm1hcHBlZF9hc19wYWdlID0gZmFsc2U7CisJCXR4X2J1ZmZlcl9pbmZvLT5kbWEgPSBwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LAorCQkJCQkJICAgICBza2ItPmRhdGEgKyBvZmZzZXQsCisJCQkJCQkgICAgIHNpemUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBkZXYsIHR4X2J1ZmZlcl9pbmZvLT5kbWEpKQorCQkJZ290byBkbWFfZXJyb3I7CisJCXR4X2J1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKKwkJdHhfYnVmZmVyX2luZm8tPm5leHRfdG9fd2F0Y2ggPSBpOworCisJCWxlbiAtPSBzaXplOworCQl0b3RhbCAtPSBzaXplOworCQlvZmZzZXQgKz0gc2l6ZTsKKwkJY291bnQrKzsKKwkJaSsrOworCQlpZiAoaSA9PSB0eF9yaW5nLT5jb3VudCkKKwkJCWkgPSAwOworCX0KKworCWZvciAoZiA9IDA7IGYgPCBucl9mcmFnczsgZisrKSB7CisJCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmZyYWc7CisKKwkJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ZdOworCQlsZW4gPSBtaW4oKHVuc2lnbmVkIGludClmcmFnLT5zaXplLCB0b3RhbCk7CisJCW9mZnNldCA9IGZyYWctPnBhZ2Vfb2Zmc2V0OworCisJCXdoaWxlIChsZW4pIHsKKwkJCXR4X2J1ZmZlcl9pbmZvID0gJnR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldOworCQkJc2l6ZSA9IG1pbihsZW4sICh1bnNpZ25lZCBpbnQpSVhHQkVfTUFYX0RBVEFfUEVSX1RYRCk7CisKKwkJCXR4X2J1ZmZlcl9pbmZvLT5sZW5ndGggPSBzaXplOworCQkJdHhfYnVmZmVyX2luZm8tPmRtYSA9IHBjaV9tYXBfcGFnZShhZGFwdGVyLT5wZGV2LAorCQkJCQkJCSAgIGZyYWctPnBhZ2UsCisJCQkJCQkJICAgb2Zmc2V0LAorCQkJCQkJCSAgIHNpemUsCisJCQkJCQkJICAgUENJX0RNQV9UT0RFVklDRSk7CisJCQl0eF9idWZmZXJfaW5mby0+bWFwcGVkX2FzX3BhZ2UgPSB0cnVlOworCQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwZGV2LCB0eF9idWZmZXJfaW5mby0+ZG1hKSkKKwkJCQlnb3RvIGRtYV9lcnJvcjsKKwkJCXR4X2J1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKKwkJCXR4X2J1ZmZlcl9pbmZvLT5uZXh0X3RvX3dhdGNoID0gaTsKKworCQkJbGVuIC09IHNpemU7CisJCQl0b3RhbCAtPSBzaXplOworCQkJb2Zmc2V0ICs9IHNpemU7CisJCQljb3VudCsrOworCQkJaSsrOworCQkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQkJaSA9IDA7CisJCX0KKwkJaWYgKHRvdGFsID09IDApCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA9PSAwKQorCQlpID0gdHhfcmluZy0+Y291bnQgLSAxOworCWVsc2UKKwkJaSA9IGkgLSAxOworCXR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldLnNrYiA9IHNrYjsKKwl0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tmaXJzdF0ubmV4dF90b193YXRjaCA9IGk7CisKKwlyZXR1cm4gY291bnQ7CisKK2RtYV9lcnJvcjoKKwlkZXZfZXJyKCZwZGV2LT5kZXYsICJUWCBETUEgbWFwIGZhaWxlZFxuIik7CisKKwkvKiBjbGVhciB0aW1lc3RhbXAgYW5kIGRtYSBtYXBwaW5ncyBmb3IgZmFpbGVkIHR4X2J1ZmZlcl9pbmZvIG1hcCAqLworCXR4X2J1ZmZlcl9pbmZvLT5kbWEgPSAwOworCXR4X2J1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gMDsKKwl0eF9idWZmZXJfaW5mby0+bmV4dF90b193YXRjaCA9IDA7CisJY291bnQtLTsKKworCS8qIGNsZWFyIHRpbWVzdGFtcCBhbmQgZG1hIG1hcHBpbmdzIGZvciByZW1haW5pbmcgcG9ydGlvbiBvZiBwYWNrZXQgKi8KKwl3aGlsZSAoY291bnQgPj0gMCkgeworCQljb3VudC0tOworCQlpLS07CisJCWlmIChpIDwgMCkKKwkJCWkgKz0gdHhfcmluZy0+Y291bnQ7CisJCXR4X2J1ZmZlcl9pbmZvID0gJnR4X3JpbmctPnR4X2J1ZmZlcl9pbmZvW2ldOworCQlpeGdiZXZmX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNlKGFkYXB0ZXIsIHR4X2J1ZmZlcl9pbmZvKTsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkIGl4Z2JldmZfdHhfcXVldWUoc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgc3RydWN0IGl4Z2JldmZfcmluZyAqdHhfcmluZywgaW50IHR4X2ZsYWdzLAorCQkJICAgICBpbnQgY291bnQsIHUzMiBwYXlsZW4sIHU4IGhkcl9sZW4pCit7CisJdW5pb24gaXhnYmVfYWR2X3R4X2Rlc2MgKnR4X2Rlc2MgPSBOVUxMOworCXN0cnVjdCBpeGdiZXZmX3R4X2J1ZmZlciAqdHhfYnVmZmVyX2luZm87CisJdTMyIG9saW5mb19zdGF0dXMgPSAwLCBjbWRfdHlwZV9sZW4gPSAwOworCXVuc2lnbmVkIGludCBpOworCisJdTMyIHR4ZF9jbWQgPSBJWEdCRV9UWERfQ01EX0VPUCB8IElYR0JFX1RYRF9DTURfUlMgfCBJWEdCRV9UWERfQ01EX0lGQ1M7CisKKwljbWRfdHlwZV9sZW4gfD0gSVhHQkVfQURWVFhEX0RUWVBfREFUQTsKKworCWNtZF90eXBlX2xlbiB8PSBJWEdCRV9BRFZUWERfRENNRF9JRkNTIHwgSVhHQkVfQURWVFhEX0RDTURfREVYVDsKKworCWlmICh0eF9mbGFncyAmIElYR0JFX1RYX0ZMQUdTX1ZMQU4pCisJCWNtZF90eXBlX2xlbiB8PSBJWEdCRV9BRFZUWERfRENNRF9WTEU7CisKKwlpZiAodHhfZmxhZ3MgJiBJWEdCRV9UWF9GTEFHU19UU08pIHsKKwkJY21kX3R5cGVfbGVuIHw9IElYR0JFX0FEVlRYRF9EQ01EX1RTRTsKKworCQlvbGluZm9fc3RhdHVzIHw9IElYR0JFX1RYRF9QT1BUU19UWFNNIDw8CisJCQlJWEdCRV9BRFZUWERfUE9QVFNfU0hJRlQ7CisKKwkJLyogdXNlIGluZGV4IDEgY29udGV4dCBmb3IgdHNvICovCisJCW9saW5mb19zdGF0dXMgfD0gKDEgPDwgSVhHQkVfQURWVFhEX0lEWF9TSElGVCk7CisJCWlmICh0eF9mbGFncyAmIElYR0JFX1RYX0ZMQUdTX0lQVjQpCisJCQlvbGluZm9fc3RhdHVzIHw9IElYR0JFX1RYRF9QT1BUU19JWFNNIDw8CisJCQkJSVhHQkVfQURWVFhEX1BPUFRTX1NISUZUOworCisJfSBlbHNlIGlmICh0eF9mbGFncyAmIElYR0JFX1RYX0ZMQUdTX0NTVU0pCisJCW9saW5mb19zdGF0dXMgfD0gSVhHQkVfVFhEX1BPUFRTX1RYU00gPDwKKwkJCUlYR0JFX0FEVlRYRF9QT1BUU19TSElGVDsKKworCW9saW5mb19zdGF0dXMgfD0gKChwYXlsZW4gLSBoZHJfbGVuKSA8PCBJWEdCRV9BRFZUWERfUEFZTEVOX1NISUZUKTsKKworCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKKwl3aGlsZSAoY291bnQtLSkgeworCQl0eF9idWZmZXJfaW5mbyA9ICZ0eF9yaW5nLT50eF9idWZmZXJfaW5mb1tpXTsKKwkJdHhfZGVzYyA9IElYR0JFX1RYX0RFU0NfQURWKCp0eF9yaW5nLCBpKTsKKwkJdHhfZGVzYy0+cmVhZC5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KHR4X2J1ZmZlcl9pbmZvLT5kbWEpOworCQl0eF9kZXNjLT5yZWFkLmNtZF90eXBlX2xlbiA9CisJCQljcHVfdG9fbGUzMihjbWRfdHlwZV9sZW4gfCB0eF9idWZmZXJfaW5mby0+bGVuZ3RoKTsKKwkJdHhfZGVzYy0+cmVhZC5vbGluZm9fc3RhdHVzID0gY3B1X3RvX2xlMzIob2xpbmZvX3N0YXR1cyk7CisJCWkrKzsKKwkJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCQlpID0gMDsKKwl9CisKKwl0eF9kZXNjLT5yZWFkLmNtZF90eXBlX2xlbiB8PSBjcHVfdG9fbGUzMih0eGRfY21kKTsKKworCS8qCisJICogRm9yY2UgbWVtb3J5IHdyaXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgbGV0dGluZyBoL3cKKwkgKiBrbm93IHRoZXJlIGFyZSBuZXcgZGVzY3JpcHRvcnMgdG8gZmV0Y2guICAoT25seQorCSAqIGFwcGxpY2FibGUgZm9yIHdlYWstb3JkZXJlZCBtZW1vcnkgbW9kZWwgYXJjaHMsCisJICogc3VjaCBhcyBJQS02NCkuCisJICovCisJd21iKCk7CisKKwl0eF9yaW5nLT5uZXh0X3RvX3VzZSA9IGk7CisJd3JpdGVsKGksIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyB0eF9yaW5nLT50YWlsKTsKK30KKworc3RhdGljIGludCBfX2l4Z2JldmZfbWF5YmVfc3RvcF90eChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgIHN0cnVjdCBpeGdiZXZmX3JpbmcgKnR4X3JpbmcsIGludCBzaXplKQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJbmV0aWZfc3RvcF9zdWJxdWV1ZShuZXRkZXYsIHR4X3JpbmctPnF1ZXVlX2luZGV4KTsKKwkvKiBIZXJiZXJ0J3Mgb3JpZ2luYWwgcGF0Y2ggaGFkOgorCSAqICBzbXBfbWJfX2FmdGVyX25ldGlmX3N0b3BfcXVldWUoKTsKKwkgKiBidXQgc2luY2UgdGhhdCBkb2Vzbid0IGV4aXN0IHlldCwganVzdCBvcGVuIGNvZGUgaXQuICovCisJc21wX21iKCk7CisKKwkvKiBXZSBuZWVkIHRvIGNoZWNrIGFnYWluIGluIGEgY2FzZSBhbm90aGVyIENQVSBoYXMganVzdAorCSAqIG1hZGUgcm9vbSBhdmFpbGFibGUuICovCisJaWYgKGxpa2VseShJWEdCRV9ERVNDX1VOVVNFRCh0eF9yaW5nKSA8IHNpemUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyogQSByZXByaWV2ZSEgLSB1c2Ugc3RhcnRfcXVldWUgYmVjYXVzZSBpdCBkb2Vzbid0IGNhbGwgc2NoZWR1bGUgKi8KKwluZXRpZl9zdGFydF9zdWJxdWV1ZShuZXRkZXYsIHR4X3JpbmctPnF1ZXVlX2luZGV4KTsKKwkrK2FkYXB0ZXItPnJlc3RhcnRfcXVldWU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaXhnYmV2Zl9tYXliZV9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkJIHN0cnVjdCBpeGdiZXZmX3JpbmcgKnR4X3JpbmcsIGludCBzaXplKQoreworCWlmIChsaWtlbHkoSVhHQkVfREVTQ19VTlVTRUQodHhfcmluZykgPj0gc2l6ZSkpCisJCXJldHVybiAwOworCXJldHVybiBfX2l4Z2JldmZfbWF5YmVfc3RvcF90eChuZXRkZXYsIHR4X3JpbmcsIHNpemUpOworfQorCitzdGF0aWMgaW50IGl4Z2JldmZfeG1pdF9mcmFtZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpeGdiZXZmX3JpbmcgKnR4X3Jpbmc7CisJdW5zaWduZWQgaW50IGZpcnN0OworCXVuc2lnbmVkIGludCB0eF9mbGFncyA9IDA7CisJdTggaGRyX2xlbiA9IDA7CisJaW50IHJfaWR4ID0gMCwgdHNvOworCWludCBjb3VudCA9IDA7CisKKwl1bnNpZ25lZCBpbnQgZjsKKworCXR4X3JpbmcgPSAmYWRhcHRlci0+dHhfcmluZ1tyX2lkeF07CisKKwlpZiAoYWRhcHRlci0+dmxncnAgJiYgdmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisJCXR4X2ZsYWdzIHw9IHZsYW5fdHhfdGFnX2dldChza2IpOworCQl0eF9mbGFncyA8PD0gSVhHQkVfVFhfRkxBR1NfVkxBTl9TSElGVDsKKwkJdHhfZmxhZ3MgfD0gSVhHQkVfVFhfRkxBR1NfVkxBTjsKKwl9CisKKwkvKiBmb3VyIHRoaW5ncyBjYW4gY2F1c2UgdXMgdG8gbmVlZCBhIGNvbnRleHQgZGVzY3JpcHRvciAqLworCWlmIChza2JfaXNfZ3NvKHNrYikgfHwKKwkgICAgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHx8CisJICAgICh0eF9mbGFncyAmIElYR0JFX1RYX0ZMQUdTX1ZMQU4pKQorCQljb3VudCsrOworCisJY291bnQgKz0gVFhEX1VTRV9DT1VOVChza2JfaGVhZGxlbihza2IpKTsKKwlmb3IgKGYgPSAwOyBmIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgZisrKQorCQljb3VudCArPSBUWERfVVNFX0NPVU5UKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZl0uc2l6ZSk7CisKKwlpZiAoaXhnYmV2Zl9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgY291bnQpKSB7CisJCWFkYXB0ZXItPnR4X2J1c3krKzsKKwkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCX0KKworCWZpcnN0ID0gdHhfcmluZy0+bmV4dF90b191c2U7CisKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCisJCXR4X2ZsYWdzIHw9IElYR0JFX1RYX0ZMQUdTX0lQVjQ7CisJdHNvID0gaXhnYmV2Zl90c28oYWRhcHRlciwgdHhfcmluZywgc2tiLCB0eF9mbGFncywgJmhkcl9sZW4pOworCWlmICh0c28gPCAwKSB7CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCXJldHVybiBORVRERVZfVFhfT0s7CisJfQorCisJaWYgKHRzbykKKwkJdHhfZmxhZ3MgfD0gSVhHQkVfVFhfRkxBR1NfVFNPOworCWVsc2UgaWYgKGl4Z2JldmZfdHhfY3N1bShhZGFwdGVyLCB0eF9yaW5nLCBza2IsIHR4X2ZsYWdzKSAmJgorCQkgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpKQorCQl0eF9mbGFncyB8PSBJWEdCRV9UWF9GTEFHU19DU1VNOworCisJaXhnYmV2Zl90eF9xdWV1ZShhZGFwdGVyLCB0eF9yaW5nLCB0eF9mbGFncywKKwkJCSBpeGdiZXZmX3R4X21hcChhZGFwdGVyLCB0eF9yaW5nLCBza2IsIHR4X2ZsYWdzLCBmaXJzdCksCisJCQkgc2tiLT5sZW4sIGhkcl9sZW4pOworCisJbmV0ZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7CisKKwlpeGdiZXZmX21heWJlX3N0b3BfdHgobmV0ZGV2LCB0eF9yaW5nLCBERVNDX05FRURFRCk7CisKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCisvKioKKyAqIGl4Z2JldmZfZ2V0X3N0YXRzIC0gR2V0IFN5c3RlbSBOZXR3b3JrIFN0YXRpc3RpY3MKKyAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSBkZXZpY2Ugc3RhdGlzdGljcyBzdHJ1Y3R1cmUuCisgKiBUaGUgc3RhdGlzdGljcyBhcmUgYWN0dWFsbHkgdXBkYXRlZCBmcm9tIHRoZSB0aW1lciBjYWxsYmFjay4KKyAqKi8KK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaXhnYmV2Zl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCS8qIG9ubHkgcmV0dXJuIHRoZSBjdXJyZW50IHN0YXRzICovCisJcmV0dXJuICZhZGFwdGVyLT5uZXRfc3RhdHM7Cit9CisKKy8qKgorICogaXhnYmV2Zl9zZXRfbWFjIC0gQ2hhbmdlIHRoZSBFdGhlcm5ldCBBZGRyZXNzIG9mIHRoZSBOSUMKKyAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKKyAqIEBwOiBwb2ludGVyIHRvIGFuIGFkZHJlc3Mgc3RydWN0dXJlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKKyAqKi8KK3N0YXRpYyBpbnQgaXhnYmV2Zl9zZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGl4Z2JlX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CisJbWVtY3B5KGh3LT5tYWMuYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CisKKwlpZiAoaHctPm1hYy5vcHMuc2V0X3JhcikKKwkJaHctPm1hYy5vcHMuc2V0X3JhcihodywgMCwgaHctPm1hYy5hZGRyLCAwKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGl4Z2JldmZfY2hhbmdlX210dSAtIENoYW5nZSB0aGUgTWF4aW11bSBUcmFuc2ZlciBVbml0CisgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAbmV3X210dTogbmV3IHZhbHVlIGZvciBtYXhpbXVtIGZyYW1lIHNpemUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICoqLworc3RhdGljIGludCBpeGdiZXZmX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG5ld19tdHUpCit7CisJc3RydWN0IGl4Z2JldmZfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IG1heF9mcmFtZSA9IG5ld19tdHUgKyBFVEhfSExFTiArIEVUSF9GQ1NfTEVOOworCisJLyogTVRVIDwgNjggaXMgYW4gZXJyb3IgYW5kIGNhdXNlcyBwcm9ibGVtcyBvbiBzb21lIGtlcm5lbHMgKi8KKwlpZiAoKG5ld19tdHUgPCA2OCkgfHwgKG1heF9mcmFtZSA+IE1BWElNVU1fRVRIRVJORVRfVkxBTl9TSVpFKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlod19kYmcoJmFkYXB0ZXItPmh3LCAiY2hhbmdpbmcgTVRVIGZyb20gJWQgdG8gJWRcbiIsCisJICAgICAgIG5ldGRldi0+bXR1LCBuZXdfbXR1KTsKKwkvKiBtdXN0IHNldCBuZXcgTVRVIGJlZm9yZSBjYWxsaW5nIGRvd24gb3IgdXAgKi8KKwluZXRkZXYtPm10dSA9IG5ld19tdHU7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlpeGdiZXZmX3JlaW5pdF9sb2NrZWQoYWRhcHRlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaXhnYmV2Zl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQlpeGdiZXZmX2Rvd24oYWRhcHRlcik7CisJCWl4Z2JldmZfZnJlZV9pcnEoYWRhcHRlcik7CisJCWl4Z2JldmZfZnJlZV9hbGxfdHhfcmVzb3VyY2VzKGFkYXB0ZXIpOworCQlpeGdiZXZmX2ZyZWVfYWxsX3J4X3Jlc291cmNlcyhhZGFwdGVyKTsKKwl9CisKKyNpZmRlZiBDT05GSUdfUE0KKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKyNlbmRpZgorCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGl4Z2JlX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCQk9ICZpeGdiZXZmX29wZW4sCisJLm5kb19zdG9wCQk9ICZpeGdiZXZmX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdAkJPSAmaXhnYmV2Zl94bWl0X2ZyYW1lLAorCS5uZG9fZ2V0X3N0YXRzCQk9ICZpeGdiZXZmX2dldF9zdGF0cywKKwkubmRvX3NldF9yeF9tb2RlCT0gJml4Z2JldmZfc2V0X3J4X21vZGUsCisJLm5kb19zZXRfbXVsdGljYXN0X2xpc3QJPSAmaXhnYmV2Zl9zZXRfcnhfbW9kZSwKKwkubmRvX3ZhbGlkYXRlX2FkZHIJPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9ICZpeGdiZXZmX3NldF9tYWMsCisJLm5kb19jaGFuZ2VfbXR1CQk9ICZpeGdiZXZmX2NoYW5nZV9tdHUsCisJLm5kb190eF90aW1lb3V0CQk9ICZpeGdiZXZmX3R4X3RpbWVvdXQsCisJLm5kb192bGFuX3J4X3JlZ2lzdGVyCT0gJml4Z2JldmZfdmxhbl9yeF9yZWdpc3RlciwKKwkubmRvX3ZsYW5fcnhfYWRkX3ZpZAk9ICZpeGdiZXZmX3ZsYW5fcnhfYWRkX3ZpZCwKKwkubmRvX3ZsYW5fcnhfa2lsbF92aWQJPSAmaXhnYmV2Zl92bGFuX3J4X2tpbGxfdmlkLAorfTsKKworc3RhdGljIHZvaWQgaXhnYmV2Zl9hc3NpZ25fbmV0ZGV2X29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXI7CisJYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJZGV2LT5uZXRkZXZfb3BzID0gJml4Z2JlX25ldGRldl9vcHM7CisJaXhnYmV2Zl9zZXRfZXRodG9vbF9vcHMoZGV2KTsKKwlkZXYtPndhdGNoZG9nX3RpbWVvID0gNSAqIEhaOworfQorCisvKioKKyAqIGl4Z2JldmZfcHJvYmUgLSBEZXZpY2UgSW5pdGlhbGl6YXRpb24gUm91dGluZQorICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0CisgKiBAZW50OiBlbnRyeSBpbiBpeGdiZXZmX3BjaV90YmwKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICoKKyAqIGl4Z2JldmZfcHJvYmUgaW5pdGlhbGl6ZXMgYW4gYWRhcHRlciBpZGVudGlmaWVkIGJ5IGEgcGNpX2RldiBzdHJ1Y3R1cmUuCisgKiBUaGUgT1MgaW5pdGlhbGl6YXRpb24sIGNvbmZpZ3VyaW5nIG9mIHRoZSBhZGFwdGVyIHByaXZhdGUgc3RydWN0dXJlLAorICogYW5kIGEgaGFyZHdhcmUgcmVzZXQgb2NjdXIuCisgKiovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpeGdiZXZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gTlVMTDsKKwlzdHJ1Y3QgaXhnYmVfaHcgKmh3ID0gTlVMTDsKKwljb25zdCBzdHJ1Y3QgaXhnYmV2Zl9pbmZvICppaSA9IGl4Z2JldmZfaW5mb190YmxbZW50LT5kcml2ZXJfZGF0YV07CisJc3RhdGljIGludCBjYXJkc19mb3VuZDsKKwlpbnQgZXJyLCBwY2lfdXNpbmdfZGFjOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmICghcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soNjQpKSAmJgorCSAgICAhcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpKSB7CisJCXBjaV91c2luZ19kYWMgPSAxOworCX0gZWxzZSB7CisJCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CisJCWlmIChlcnIpIHsKKwkJCWVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LAorCQkJCQkJCSAgRE1BX0JJVF9NQVNLKDMyKSk7CisJCQlpZiAoZXJyKSB7CisJCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gdXNhYmxlIERNQSAiCisJCQkJCSJjb25maWd1cmF0aW9uLCBhYm9ydGluZ1xuIik7CisJCQkJZ290byBlcnJfZG1hOworCQkJfQorCQl9CisJCXBjaV91c2luZ19kYWMgPSAwOworCX0KKworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgaXhnYmV2Zl9kcml2ZXJfbmFtZSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwY2lfcmVxdWVzdF9yZWdpb25zIGZhaWxlZCAweCV4XG4iLCBlcnIpOworCQlnb3RvIGVycl9wY2lfcmVnOworCX0KKworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCisjaWZkZWYgSEFWRV9UWF9NUQorCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2X21xKHNpemVvZihzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyKSwKKwkJCQkgICBNQVhfVFhfUVVFVUVTKTsKKyNlbHNlCisJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIpKTsKKyNlbmRpZgorCWlmICghbmV0ZGV2KSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2FsbG9jX2V0aGVyZGV2OworCX0KKworCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJnBkZXYtPmRldik7CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgbmV0ZGV2KTsKKwlhZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWFkYXB0ZXItPm5ldGRldiA9IG5ldGRldjsKKwlhZGFwdGVyLT5wZGV2ID0gcGRldjsKKwlodyA9ICZhZGFwdGVyLT5odzsKKwlody0+YmFjayA9IGFkYXB0ZXI7CisJYWRhcHRlci0+bXNnX2VuYWJsZSA9ICgxIDw8IERFRkFVTFRfREVCVUdfTEVWRUxfU0hJRlQpIC0gMTsKKworCS8qCisJICogY2FsbCBzYXZlIHN0YXRlIGhlcmUgaW4gc3RhbmRhbG9uZSBkcml2ZXIgYmVjYXVzZSBpdCByZWxpZXMgb24KKwkgKiBhZGFwdGVyIHN0cnVjdCB0byBleGlzdCwgYW5kIG5lZWRzIHRvIGNhbGwgbmV0ZGV2X3ByaXYKKwkgKi8KKwlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKworCWh3LT5od19hZGRyID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCisJCQkgICAgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKKwlpZiAoIWh3LT5od19hZGRyKSB7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyX2lvcmVtYXA7CisJfQorCisJaXhnYmV2Zl9hc3NpZ25fbmV0ZGV2X29wcyhuZXRkZXYpOworCisJYWRhcHRlci0+YmRfbnVtYmVyID0gY2FyZHNfZm91bmQ7CisKKwkvKiBTZXR1cCBodyBhcGkgKi8KKwltZW1jcHkoJmh3LT5tYWMub3BzLCBpaS0+bWFjX29wcywgc2l6ZW9mKGh3LT5tYWMub3BzKSk7CisJaHctPm1hYy50eXBlICA9IGlpLT5tYWM7CisKKwltZW1jcHkoJmh3LT5tYngub3BzLCAmaXhnYmV2Zl9tYnhfb3BzLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGl4Z2JlX21hY19vcGVyYXRpb25zKSk7CisKKwlhZGFwdGVyLT5mbGFncyAmPSB+SVhHQkVfRkxBR19SWF9QU19DQVBBQkxFOworCWFkYXB0ZXItPmZsYWdzICY9IH5JWEdCRV9GTEFHX1JYX1BTX0VOQUJMRUQ7CisJYWRhcHRlci0+ZmxhZ3MgfD0gSVhHQkVfRkxBR19SWF8xQlVGX0NBUEFCTEU7CisKKwkvKiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwllcnIgPSBpeGdiZXZmX3N3X2luaXQoYWRhcHRlcik7CisKKwlpeGdiZXZmX2luaXRfbGFzdF9jb3VudGVyX3N0YXRzKGFkYXB0ZXIpOworCisjaWZkZWYgTUFYX1NLQl9GUkFHUworCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwKKwkJCSAgIE5FVElGX0ZfSVBfQ1NVTSB8CisJCQkgICBORVRJRl9GX0hXX1ZMQU5fVFggfAorCQkJICAgTkVUSUZfRl9IV19WTEFOX1JYIHwKKwkJCSAgIE5FVElGX0ZfSFdfVkxBTl9GSUxURVI7CisKKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSVBWNl9DU1VNOworCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU087CisJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOworCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzY7CisJbmV0ZGV2LT52bGFuX2ZlYXR1cmVzIHw9IE5FVElGX0ZfSVBfQ1NVTTsKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9TRzsKKworCWlmIChwY2lfdXNpbmdfZGFjKQorCQluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKKworI2VuZGlmIC8qIE1BWF9TS0JfRlJBR1MgKi8KKworCS8qIFRoZSBIVyBNQUMgYWRkcmVzcyB3YXMgc2V0IGFuZC9vciBkZXRlcm1pbmVkIGluIHN3X2luaXQgKi8KKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRhcHRlci0+aHcubWFjLmFkZHIsIG5ldGRldi0+YWRkcl9sZW4pOworCW1lbWNweShuZXRkZXYtPnBlcm1fYWRkciwgYWRhcHRlci0+aHcubWFjLmFkZHIsIG5ldGRldi0+YWRkcl9sZW4pOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKG5ldGRldi0+ZGV2X2FkZHIpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaW52YWxpZCBNQUMgYWRkcmVzc1xuIik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gZXJyX3N3X2luaXQ7CisJfQorCisJaW5pdF90aW1lcigmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOworCWFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLmZ1bmN0aW9uID0gJml4Z2JldmZfd2F0Y2hkb2c7CisJYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWFkYXB0ZXI7CisKKwlJTklUX1dPUksoJmFkYXB0ZXItPnJlc2V0X3Rhc2ssIGl4Z2JldmZfcmVzZXRfdGFzayk7CisJSU5JVF9XT1JLKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrLCBpeGdiZXZmX3dhdGNoZG9nX3Rhc2spOworCisJZXJyID0gaXhnYmV2Zl9pbml0X2ludGVycnVwdF9zY2hlbWUoYWRhcHRlcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfc3dfaW5pdDsKKworCS8qIHBpY2sgdXAgdGhlIFBDSSBidXMgc2V0dGluZ3MgZm9yIHJlcG9ydGluZyBsYXRlciAqLworCWlmIChody0+bWFjLm9wcy5nZXRfYnVzX2luZm8pCisJCWh3LT5tYWMub3BzLmdldF9idXNfaW5mbyhodyk7CisKKworCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CisJbmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7CisKKwlzdHJjcHkobmV0ZGV2LT5uYW1lLCAiZXRoJWQiKTsKKworCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3JlZ2lzdGVyOworCisJYWRhcHRlci0+bmV0ZGV2X3JlZ2lzdGVyZWQgPSB0cnVlOworCisJLyogcHJpbnQgdGhlIE1BQyBhZGRyZXNzICovCisJaHdfZGJnKGh3LCAiJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMnhcbiIsCisJICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbMF0sCisJICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbMV0sCisJICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbMl0sCisJICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbM10sCisJICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbNF0sCisJICAgICAgIG5ldGRldi0+ZGV2X2FkZHJbNV0pOworCisJaHdfZGJnKGh3LCAiTUFDOiAlZFxuIiwgaHctPm1hYy50eXBlKTsKKworCWh3X2RiZyhodywgIkxSTyBpcyBkaXNhYmxlZCBcbiIpOworCisJaHdfZGJnKGh3LCAiSW50ZWwoUikgODI1OTkgVmlydHVhbCBGdW5jdGlvblxuIik7CisJY2FyZHNfZm91bmQrKzsKKwlyZXR1cm4gMDsKKworZXJyX3JlZ2lzdGVyOgorZXJyX3N3X2luaXQ6CisJaXhnYmV2Zl9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShhZGFwdGVyKTsKKwlpb3VubWFwKGh3LT5od19hZGRyKTsKK2Vycl9pb3JlbWFwOgorCWZyZWVfbmV0ZGV2KG5ldGRldik7CitlcnJfYWxsb2NfZXRoZXJkZXY6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2Vycl9wY2lfcmVnOgorZXJyX2RtYToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcmV0dXJuIGVycjsKK30KKworLyoqCisgKiBpeGdiZXZmX3JlbW92ZSAtIERldmljZSBSZW1vdmFsIFJvdXRpbmUKKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdAorICoKKyAqIGl4Z2JldmZfcmVtb3ZlIGlzIGNhbGxlZCBieSB0aGUgUENJIHN1YnN5c3RlbSB0byBhbGVydCB0aGUgZHJpdmVyCisgKiB0aGF0IGl0IHNob3VsZCByZWxlYXNlIGEgUENJIGRldmljZS4gIFRoZSBjb3VsZCBiZSBjYXVzZWQgYnkgYQorICogSG90LVBsdWcgZXZlbnQsIG9yIGJlY2F1c2UgdGhlIGRyaXZlciBpcyBnb2luZyB0byBiZSByZW1vdmVkIGZyb20KKyAqIG1lbW9yeS4KKyAqKi8KK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpeGdiZXZmX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpeGdiZXZmX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJc2V0X2JpdChfX0lYR0JFVkZfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKKworCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lcik7CisKKwljYW5jZWxfd29ya19zeW5jKCZhZGFwdGVyLT53YXRjaGRvZ190YXNrKTsKKworCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisKKwlpZiAoYWRhcHRlci0+bmV0ZGV2X3JlZ2lzdGVyZWQpIHsKKwkJdW5yZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTsKKwkJYWRhcHRlci0+bmV0ZGV2X3JlZ2lzdGVyZWQgPSBmYWxzZTsKKwl9CisKKwlpeGdiZXZmX3Jlc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KGFkYXB0ZXIpOworCisJaW91bm1hcChhZGFwdGVyLT5ody5od19hZGRyKTsKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCisJaHdfZGJnKCZhZGFwdGVyLT5odywgIlJlbW92ZSBjb21wbGV0ZVxuIik7CisKKwlrZnJlZShhZGFwdGVyLT50eF9yaW5nKTsKKwlrZnJlZShhZGFwdGVyLT5yeF9yaW5nKTsKKworCWZyZWVfbmV0ZGV2KG5ldGRldik7CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpeGdiZXZmX2RyaXZlciA9IHsKKwkubmFtZSAgICAgPSBpeGdiZXZmX2RyaXZlcl9uYW1lLAorCS5pZF90YWJsZSA9IGl4Z2JldmZfcGNpX3RibCwKKwkucHJvYmUgICAgPSBpeGdiZXZmX3Byb2JlLAorCS5yZW1vdmUgICA9IF9fZGV2ZXhpdF9wKGl4Z2JldmZfcmVtb3ZlKSwKKwkuc2h1dGRvd24gPSBpeGdiZXZmX3NodXRkb3duLAorfTsKKworLyoqCisgKiBpeGdiZV9pbml0X21vZHVsZSAtIERyaXZlciBSZWdpc3RyYXRpb24gUm91dGluZQorICoKKyAqIGl4Z2JlX2luaXRfbW9kdWxlIGlzIHRoZSBmaXJzdCByb3V0aW5lIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMKKyAqIGxvYWRlZC4gQWxsIGl0IGRvZXMgaXMgcmVnaXN0ZXIgd2l0aCB0aGUgUENJIHN1YnN5c3RlbS4KKyAqKi8KK3N0YXRpYyBpbnQgX19pbml0IGl4Z2JldmZfaW5pdF9tb2R1bGUodm9pZCkKK3sKKwlpbnQgcmV0OworCXByaW50ayhLRVJOX0lORk8gIml4Z2JldmY6ICVzIC0gdmVyc2lvbiAlc1xuIiwgaXhnYmV2Zl9kcml2ZXJfc3RyaW5nLAorCSAgICAgICBpeGdiZXZmX2RyaXZlcl92ZXJzaW9uKTsKKworCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBpeGdiZXZmX2NvcHlyaWdodCk7CisKKwlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpeGdiZXZmX2RyaXZlcik7CisJcmV0dXJuIHJldDsKK30KKworbW9kdWxlX2luaXQoaXhnYmV2Zl9pbml0X21vZHVsZSk7CisKKy8qKgorICogaXhnYmVfZXhpdF9tb2R1bGUgLSBEcml2ZXIgRXhpdCBDbGVhbnVwIFJvdXRpbmUKKyAqCisgKiBpeGdiZV9leGl0X21vZHVsZSBpcyBjYWxsZWQganVzdCBiZWZvcmUgdGhlIGRyaXZlciBpcyByZW1vdmVkCisgKiBmcm9tIG1lbW9yeS4KKyAqKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBpeGdiZXZmX2V4aXRfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZpeGdiZXZmX2RyaXZlcik7Cit9CisKKyNpZmRlZiBERUJVRworLyoqCisgKiBpeGdiZV9nZXRfaHdfZGV2X25hbWUgLSByZXR1cm4gZGV2aWNlIG5hbWUgc3RyaW5nCisgKiB1c2VkIGJ5IGhhcmR3YXJlIGxheWVyIHRvIHByaW50IGRlYnVnZ2luZyBpbmZvcm1hdGlvbgorICoqLworY2hhciAqaXhnYmV2Zl9nZXRfaHdfZGV2X25hbWUoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmV2Zl9hZGFwdGVyICphZGFwdGVyID0gaHctPmJhY2s7CisJcmV0dXJuIGFkYXB0ZXItPm5ldGRldi0+bmFtZTsKK30KKworI2VuZGlmCittb2R1bGVfZXhpdChpeGdiZXZmX2V4aXRfbW9kdWxlKTsKKworLyogaXhnYmV2Zl9tYWluLmMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2l4Z2JldmYvbWJ4LmMgYi9kcml2ZXJzL25ldC9peGdiZXZmL21ieC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MTQzNTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peGdiZXZmL21ieC5jCkBAIC0wLDAgKzEsMzQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibWJ4LmgiCisKKy8qKgorICogIGl4Z2JldmZfcG9sbF9mb3JfbXNnIC0gV2FpdCBmb3IgbWVzc2FnZSBub3RpZmljYXRpb24KKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICByZXR1cm5zIDAgaWYgaXQgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGEgbWVzc2FnZSBub3RpZmljYXRpb24KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl9wb2xsX2Zvcl9tc2coc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCWludCBjb3VudGRvd24gPSBtYngtPnRpbWVvdXQ7CisKKwl3aGlsZSAoY291bnRkb3duICYmIG1ieC0+b3BzLmNoZWNrX2Zvcl9tc2coaHcpKSB7CisJCWNvdW50ZG93bi0tOworCQl1ZGVsYXkobWJ4LT51ZGVsYXkpOworCX0KKworCS8qIGlmIHdlIGZhaWxlZCwgYWxsIGZ1dHVyZSBwb3N0ZWQgbWVzc2FnZXMgZmFpbCB1bnRpbCByZXNldCAqLworCWlmICghY291bnRkb3duKQorCQltYngtPnRpbWVvdXQgPSAwOworCisJcmV0dXJuIGNvdW50ZG93biA/IDAgOiBJWEdCRV9FUlJfTUJYOworfQorCisvKioKKyAqICBpeGdiZXZmX3BvbGxfZm9yX2FjayAtIFdhaXQgZm9yIG1lc3NhZ2UgYWNrbm93bGVkZ2VtZW50CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgcmV0dXJucyAwIGlmIGl0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIG1lc3NhZ2UgYWNrbm93bGVkZ2VtZW50CisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfcG9sbF9mb3JfYWNrKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJc3RydWN0IGl4Z2JlX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwlpbnQgY291bnRkb3duID0gbWJ4LT50aW1lb3V0OworCisJd2hpbGUgKGNvdW50ZG93biAmJiBtYngtPm9wcy5jaGVja19mb3JfYWNrKGh3KSkgeworCQljb3VudGRvd24tLTsKKwkJdWRlbGF5KG1ieC0+dWRlbGF5KTsKKwl9CisKKwkvKiBpZiB3ZSBmYWlsZWQsIGFsbCBmdXR1cmUgcG9zdGVkIG1lc3NhZ2VzIGZhaWwgdW50aWwgcmVzZXQgKi8KKwlpZiAoIWNvdW50ZG93bikKKwkJbWJ4LT50aW1lb3V0ID0gMDsKKworCXJldHVybiBjb3VudGRvd24gPyAwIDogSVhHQkVfRVJSX01CWDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9yZWFkX3Bvc3RlZF9tYnggLSBXYWl0IGZvciBtZXNzYWdlIG5vdGlmaWNhdGlvbiBhbmQgcmVjZWl2ZSBtZXNzYWdlCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICoKKyAqICByZXR1cm5zIDAgaWYgaXQgc3VjY2Vzc2Z1bGx5IHJlY2VpdmVkIGEgbWVzc2FnZSBub3RpZmljYXRpb24gYW5kCisgKiAgY29waWVkIGl0IGludG8gdGhlIHJlY2VpdmUgYnVmZmVyLgorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX3JlYWRfcG9zdGVkX21ieChzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgKm1zZywgdTE2IHNpemUpCit7CisJc3RydWN0IGl4Z2JlX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwlzMzIgcmV0X3ZhbCA9IElYR0JFX0VSUl9NQlg7CisKKwlyZXRfdmFsID0gaXhnYmV2Zl9wb2xsX2Zvcl9tc2coaHcpOworCisJLyogaWYgYWNrIHJlY2VpdmVkIHJlYWQgbWVzc2FnZSwgb3RoZXJ3aXNlIHdlIHRpbWVkIG91dCAqLworCWlmICghcmV0X3ZhbCkKKwkJcmV0X3ZhbCA9IG1ieC0+b3BzLnJlYWQoaHcsIG1zZywgc2l6ZSk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl93cml0ZV9wb3N0ZWRfbWJ4IC0gV3JpdGUgYSBtZXNzYWdlIHRvIHRoZSBtYWlsYm94LCB3YWl0IGZvciBhY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlcgorICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyCisgKgorICogIHJldHVybnMgMCBpZiBpdCBzdWNjZXNzZnVsbHkgY29waWVkIG1lc3NhZ2UgaW50byB0aGUgYnVmZmVyIGFuZAorICogIHJlY2VpdmVkIGFuIGFjayB0byB0aGF0IG1lc3NhZ2Ugd2l0aGluIGRlbGF5ICogdGltZW91dCBwZXJpb2QKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl93cml0ZV9wb3N0ZWRfbWJ4KHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSkKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXMzMiByZXRfdmFsOworCisJLyogc2VuZCBtc2cgKi8KKwlyZXRfdmFsID0gbWJ4LT5vcHMud3JpdGUoaHcsIG1zZywgc2l6ZSk7CisKKwkvKiBpZiBtc2cgc2VudCB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYW4gYWNrICovCisJaWYgKCFyZXRfdmFsKQorCQlyZXRfdmFsID0gaXhnYmV2Zl9wb2xsX2Zvcl9hY2soaHcpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JldmZfcmVhZF92MnBfbWFpbGJveCAtIHJlYWQgdjJwIG1haWxib3gKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcmVhZCB0aGUgdjJwIG1haWxib3ggd2l0aG91dCBsb3NpbmcgdGhlIHJlYWQgdG8KKyAqICBjbGVhciBzdGF0dXMgYml0cy4KKyAqKi8KK3N0YXRpYyB1MzIgaXhnYmV2Zl9yZWFkX3YycF9tYWlsYm94KHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIHYycF9tYWlsYm94ID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGTUFJTEJPWCk7CisKKwl2MnBfbWFpbGJveCB8PSBody0+bWJ4LnYycF9tYWlsYm94OworCWh3LT5tYngudjJwX21haWxib3ggfD0gdjJwX21haWxib3ggJiBJWEdCRV9WRk1BSUxCT1hfUjJDX0JJVFM7CisKKwlyZXR1cm4gdjJwX21haWxib3g7Cit9CisKKy8qKgorICogIGl4Z2JldmZfY2hlY2tfZm9yX2JpdF92ZiAtIERldGVybWluZSBpZiBhIHN0YXR1cyBiaXQgd2FzIHNldAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1hc2s6IGJpdG1hc2sgZm9yIGJpdHMgdG8gYmUgdGVzdGVkIGFuZCBjbGVhcmVkCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjaGVjayBmb3IgdGhlIHJlYWQgdG8gY2xlYXIgYml0cyB3aXRoaW4KKyAqICB0aGUgVjJQIG1haWxib3guCisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfY2hlY2tfZm9yX2JpdF92ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1MzIgbWFzaykKK3sKKwl1MzIgdjJwX21haWxib3ggPSBpeGdiZXZmX3JlYWRfdjJwX21haWxib3goaHcpOworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKworCWlmICh2MnBfbWFpbGJveCAmIG1hc2spCisJCXJldF92YWwgPSAwOworCisJaHctPm1ieC52MnBfbWFpbGJveCAmPSB+bWFzazsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZXZmX2NoZWNrX2Zvcl9tc2dfdmYgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBQRiBoYXMgc2VudCBtYWlsCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgcmV0dXJucyAwIGlmIHRoZSBQRiBoYXMgc2V0IHRoZSBTdGF0dXMgYml0IG9yIGVsc2UgRVJSX01CWAorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX2NoZWNrX2Zvcl9tc2dfdmYoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzMzIgcmV0X3ZhbCA9IElYR0JFX0VSUl9NQlg7CisKKwlpZiAoIWl4Z2JldmZfY2hlY2tfZm9yX2JpdF92ZihodywgSVhHQkVfVkZNQUlMQk9YX1BGU1RTKSkgeworCQlyZXRfdmFsID0gMDsKKwkJaHctPm1ieC5zdGF0cy5yZXFzKys7CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JldmZfY2hlY2tfZm9yX2Fja192ZiAtIGNoZWNrcyB0byBzZWUgaWYgdGhlIFBGIGhhcyBBQ0snZAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIHJldHVybnMgMCBpZiB0aGUgUEYgaGFzIHNldCB0aGUgQUNLIGJpdCBvciBlbHNlIEVSUl9NQlgKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl9jaGVja19mb3JfYWNrX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJaWYgKCFpeGdiZXZmX2NoZWNrX2Zvcl9iaXRfdmYoaHcsIElYR0JFX1ZGTUFJTEJPWF9QRkFDSykpIHsKKwkJcmV0X3ZhbCA9IDA7CisJCWh3LT5tYnguc3RhdHMuYWNrcysrOworCX0KKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZXZmX2NoZWNrX2Zvcl9yc3RfdmYgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBQRiBoYXMgcmVzZXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICByZXR1cm5zIHRydWUgaWYgdGhlIFBGIGhhcyBzZXQgdGhlIHJlc2V0IGRvbmUgYml0IG9yIGVsc2UgZmFsc2UKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl9jaGVja19mb3JfcnN0X3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJczMyIHJldF92YWwgPSBJWEdCRV9FUlJfTUJYOworCisJaWYgKCFpeGdiZXZmX2NoZWNrX2Zvcl9iaXRfdmYoaHcsIChJWEdCRV9WRk1BSUxCT1hfUlNURCB8CisJCQkJCSBJWEdCRV9WRk1BSUxCT1hfUlNUSSkpKSB7CisJCXJldF92YWwgPSAwOworCQlody0+bWJ4LnN0YXRzLnJzdHMrKzsKKwl9CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9vYnRhaW5fbWJ4X2xvY2tfdmYgLSBvYnRhaW4gbWFpbGJveCBsb2NrCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgcmV0dXJuIDAgaWYgd2Ugb2J0YWluZWQgdGhlIG1haWxib3ggbG9jaworICoqLworc3RhdGljIHMzMiBpeGdiZXZmX29idGFpbl9tYnhfbG9ja192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3KQoreworCXMzMiByZXRfdmFsID0gSVhHQkVfRVJSX01CWDsKKworCS8qIFRha2Ugb3duZXJzaGlwIG9mIHRoZSBidWZmZXIgKi8KKwlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGTUFJTEJPWCwgSVhHQkVfVkZNQUlMQk9YX1ZGVSk7CisKKwkvKiByZXNlcnZlIG1haWxib3ggZm9yIHZmIHVzZSAqLworCWlmIChpeGdiZXZmX3JlYWRfdjJwX21haWxib3goaHcpICYgSVhHQkVfVkZNQUlMQk9YX1ZGVSkKKwkJcmV0X3ZhbCA9IDA7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl93cml0ZV9tYnhfdmYgLSBXcml0ZSBhIG1lc3NhZ2UgdG8gdGhlIG1haWxib3gKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlcgorICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyCisgKgorICogIHJldHVybnMgMCBpZiBpdCBzdWNjZXNzZnVsbHkgY29waWVkIG1lc3NhZ2UgaW50byB0aGUgYnVmZmVyCisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfd3JpdGVfbWJ4X3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsIHUzMiAqbXNnLCB1MTYgc2l6ZSkKK3sKKwlzMzIgcmV0X3ZhbDsKKwl1MTYgaTsKKworCisJLyogbG9jayB0aGUgbWFpbGJveCB0byBwcmV2ZW50IHBmL3ZmIHJhY2UgY29uZGl0aW9uICovCisJcmV0X3ZhbCA9IGl4Z2JldmZfb2J0YWluX21ieF9sb2NrX3ZmKGh3KTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXRfbm9fd3JpdGU7CisKKwkvKiBmbHVzaCBtc2cgYW5kIGFja3MgYXMgd2UgYXJlIG92ZXJ3cml0aW5nIHRoZSBtZXNzYWdlIGJ1ZmZlciAqLworCWl4Z2JldmZfY2hlY2tfZm9yX21zZ192Zihodyk7CisJaXhnYmV2Zl9jaGVja19mb3JfYWNrX3ZmKGh3KTsKKworCS8qIGNvcHkgdGhlIGNhbGxlciBzcGVjaWZpZWQgbWVzc2FnZSB0byB0aGUgbWFpbGJveCBtZW1vcnkgYnVmZmVyICovCisJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKKwkJSVhHQkVfV1JJVEVfUkVHX0FSUkFZKGh3LCBJWEdCRV9WRk1CTUVNLCBpLCBtc2dbaV0pOworCisJLyogdXBkYXRlIHN0YXRzICovCisJaHctPm1ieC5zdGF0cy5tc2dzX3R4Kys7CisKKwkvKiBEcm9wIFZGVSBhbmQgaW50ZXJydXB0IHRoZSBQRiB0byB0ZWxsIGl0IGEgbWVzc2FnZSBoYXMgYmVlbiBzZW50ICovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRk1BSUxCT1gsIElYR0JFX1ZGTUFJTEJPWF9SRVEpOworCitvdXRfbm9fd3JpdGU6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGl4Z2JldmZfcmVhZF9tYnhfdmYgLSBSZWFkcyBhIG1lc3NhZ2UgZnJvbSB0aGUgaW5ib3ggaW50ZW5kZWQgZm9yIHZmCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXIKKyAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlcgorICoKKyAqICByZXR1cm5zIDAgaWYgaXQgc3VjY2Vzc2Z1bHkgcmVhZCBtZXNzYWdlIGZyb20gYnVmZmVyCisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfcmVhZF9tYnhfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyICptc2csIHUxNiBzaXplKQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MTYgaTsKKworCS8qIGxvY2sgdGhlIG1haWxib3ggdG8gcHJldmVudCBwZi92ZiByYWNlIGNvbmRpdGlvbiAqLworCXJldF92YWwgPSBpeGdiZXZmX29idGFpbl9tYnhfbG9ja192Zihodyk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0X25vX3JlYWQ7CisKKwkvKiBjb3B5IHRoZSBtZXNzYWdlIGZyb20gdGhlIG1haWxib3ggbWVtb3J5IGJ1ZmZlciAqLworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspCisJCW1zZ1tpXSA9IElYR0JFX1JFQURfUkVHX0FSUkFZKGh3LCBJWEdCRV9WRk1CTUVNLCBpKTsKKworCS8qIEFja25vd2xlZGdlIHJlY2VpcHQgYW5kIHJlbGVhc2UgbWFpbGJveCwgdGhlbiB3ZSdyZSBkb25lICovCisJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRk1BSUxCT1gsIElYR0JFX1ZGTUFJTEJPWF9BQ0spOworCisJLyogdXBkYXRlIHN0YXRzICovCisJaHctPm1ieC5zdGF0cy5tc2dzX3J4Kys7CisKK291dF9ub19yZWFkOgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpeGdiZXZmX2luaXRfbWJ4X3BhcmFtc192ZiAtIHNldCBpbml0aWFsIHZhbHVlcyBmb3IgdmYgbWFpbGJveAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIEluaXRpYWxpemVzIHRoZSBody0+bWJ4IHN0cnVjdCB0byBjb3JyZWN0IHZhbHVlcyBmb3IgdmYgbWFpbGJveAorICovCitzMzIgaXhnYmV2Zl9pbml0X21ieF9wYXJhbXNfdmYoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCisJLyogc3RhcnQgbWFpbGJveCBhcyB0aW1lZCBvdXQgYW5kIGxldCB0aGUgcmVzZXRfaHcgY2FsbCBzZXQgdGhlIHRpbWVvdXQKKwkgKiB2YWx1ZSB0byBiZWdpbiBjb21tdW5pY2F0aW9ucyAqLworCW1ieC0+dGltZW91dCA9IDA7CisJbWJ4LT51ZGVsYXkgPSBJWEdCRV9WRl9NQlhfSU5JVF9ERUxBWTsKKworCW1ieC0+c2l6ZSA9IElYR0JFX1ZGTUFJTEJPWF9TSVpFOworCisJbWJ4LT5zdGF0cy5tc2dzX3R4ID0gMDsKKwltYngtPnN0YXRzLm1zZ3NfcnggPSAwOworCW1ieC0+c3RhdHMucmVxcyA9IDA7CisJbWJ4LT5zdGF0cy5hY2tzID0gMDsKKwltYngtPnN0YXRzLnJzdHMgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBpeGdiZV9tYnhfb3BlcmF0aW9ucyBpeGdiZXZmX21ieF9vcHMgPSB7CisJLmluaXRfcGFyYW1zICAgPSBpeGdiZXZmX2luaXRfbWJ4X3BhcmFtc192ZiwKKwkucmVhZCAgICAgICAgICA9IGl4Z2JldmZfcmVhZF9tYnhfdmYsCisJLndyaXRlICAgICAgICAgPSBpeGdiZXZmX3dyaXRlX21ieF92ZiwKKwkucmVhZF9wb3N0ZWQgICA9IGl4Z2JldmZfcmVhZF9wb3N0ZWRfbWJ4LAorCS53cml0ZV9wb3N0ZWQgID0gaXhnYmV2Zl93cml0ZV9wb3N0ZWRfbWJ4LAorCS5jaGVja19mb3JfbXNnID0gaXhnYmV2Zl9jaGVja19mb3JfbXNnX3ZmLAorCS5jaGVja19mb3JfYWNrID0gaXhnYmV2Zl9jaGVja19mb3JfYWNrX3ZmLAorCS5jaGVja19mb3JfcnN0ID0gaXhnYmV2Zl9jaGVja19mb3JfcnN0X3ZmLAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi9tYnguaCBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvbWJ4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwZTBiZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvbWJ4LmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgODI1OTkgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0lYR0JFX01CWF9IXworI2RlZmluZSBfSVhHQkVfTUJYX0hfCisKKyNpbmNsdWRlICJ2Zi5oIgorCisjZGVmaW5lIElYR0JFX1ZGTUFJTEJPWF9TSVpFICAgICAgICAxNiAvKiAxNiAzMiBiaXQgd29yZHMgLSA2NCBieXRlcyAqLworI2RlZmluZSBJWEdCRV9FUlJfTUJYICAgICAgICAgICAgICAgLTEwMAorCisjZGVmaW5lIElYR0JFX1ZGTUFJTEJPWCAgICAgICAgICAgICAweDAwMkZDCisjZGVmaW5lIElYR0JFX1ZGTUJNRU0gICAgICAgICAgICAgICAweDAwMjAwCisKKy8qIERlZmluZSBtYWlsYm94IHJlZ2lzdGVyIGJpdHMgKi8KKyNkZWZpbmUgSVhHQkVfVkZNQUlMQk9YX1JFUSAgICAgIDB4MDAwMDAwMDEgLyogUmVxdWVzdCBmb3IgUEYgUmVhZHkgYml0ICovCisjZGVmaW5lIElYR0JFX1ZGTUFJTEJPWF9BQ0sgICAgICAweDAwMDAwMDAyIC8qIEFjayBQRiBtZXNzYWdlIHJlY2VpdmVkICovCisjZGVmaW5lIElYR0JFX1ZGTUFJTEJPWF9WRlUgICAgICAweDAwMDAwMDA0IC8qIFZGIG93bnMgdGhlIG1haWxib3ggYnVmZmVyICovCisjZGVmaW5lIElYR0JFX1ZGTUFJTEJPWF9QRlUgICAgICAweDAwMDAwMDA4IC8qIFBGIG93bnMgdGhlIG1haWxib3ggYnVmZmVyICovCisjZGVmaW5lIElYR0JFX1ZGTUFJTEJPWF9QRlNUUyAgICAweDAwMDAwMDEwIC8qIFBGIHdyb3RlIGEgbWVzc2FnZSBpbiB0aGUgTUIgKi8KKyNkZWZpbmUgSVhHQkVfVkZNQUlMQk9YX1BGQUNLICAgIDB4MDAwMDAwMjAgLyogUEYgYWNrIHRoZSBwcmV2aW91cyBWRiBtc2cgKi8KKyNkZWZpbmUgSVhHQkVfVkZNQUlMQk9YX1JTVEkgICAgIDB4MDAwMDAwNDAgLyogUEYgaGFzIHJlc2V0IGluZGljYXRpb24gKi8KKyNkZWZpbmUgSVhHQkVfVkZNQUlMQk9YX1JTVEQgICAgIDB4MDAwMDAwODAgLyogUEYgaGFzIGluZGljYXRlZCByZXNldCBkb25lICovCisjZGVmaW5lIElYR0JFX1ZGTUFJTEJPWF9SMkNfQklUUyAweDAwMDAwMEIwIC8qIEFsbCByZWFkIHRvIGNsZWFyIGJpdHMgKi8KKworI2RlZmluZSBJWEdCRV9QRk1BSUxCT1goeCkgICAgICAgICAgKDB4MDRCMDAgKyAoNCAqIHgpKQorI2RlZmluZSBJWEdCRV9QRk1CTUVNKHZmbikgICAgICAgICAgKDB4MTMwMDAgKyAoNjQgKiB2Zm4pKQorCisjZGVmaW5lIElYR0JFX1BGTUFJTEJPWF9TVFMgICAweDAwMDAwMDAxIC8qIEluaXRpYXRlIG1lc3NhZ2Ugc2VuZCB0byBWRiAqLworI2RlZmluZSBJWEdCRV9QRk1BSUxCT1hfQUNLICAgMHgwMDAwMDAwMiAvKiBBY2sgbWVzc2FnZSByZWN2J2QgZnJvbSBWRiAqLworI2RlZmluZSBJWEdCRV9QRk1BSUxCT1hfVkZVICAgMHgwMDAwMDAwNCAvKiBWRiBvd25zIHRoZSBtYWlsYm94IGJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9QRk1BSUxCT1hfUEZVICAgMHgwMDAwMDAwOCAvKiBQRiBvd25zIHRoZSBtYWlsYm94IGJ1ZmZlciAqLworI2RlZmluZSBJWEdCRV9QRk1BSUxCT1hfUlZGVSAgMHgwMDAwMDAxMCAvKiBSZXNldCBWRlUgLSB1c2VkIHdoZW4gVkYgc3R1Y2sgKi8KKworI2RlZmluZSBJWEdCRV9NQlZGSUNSX1ZGUkVRX01BU0sgMHgwMDAwRkZGRiAvKiBiaXRzIGZvciBWRiBtZXNzYWdlcyAqLworI2RlZmluZSBJWEdCRV9NQlZGSUNSX1ZGUkVRX1ZGMSAgMHgwMDAwMDAwMSAvKiBiaXQgZm9yIFZGIDEgbWVzc2FnZSAqLworI2RlZmluZSBJWEdCRV9NQlZGSUNSX1ZGQUNLX01BU0sgMHhGRkZGMDAwMCAvKiBiaXRzIGZvciBWRiBhY2tzICovCisjZGVmaW5lIElYR0JFX01CVkZJQ1JfVkZBQ0tfVkYxICAweDAwMDEwMDAwIC8qIGJpdCBmb3IgVkYgMSBhY2sgKi8KKworCisvKiBJZiBpdCdzIGEgSVhHQkVfVkZfKiBtc2cgdGhlbiBpdCBvcmlnaW5hdGVzIGluIHRoZSBWRiBhbmQgaXMgc2VudCB0byB0aGUKKyAqIFBGLiAgVGhlIHJldmVyc2UgaXMgdHJ1ZSBpZiBpdCBpcyBJWEdCRV9QRl8qLgorICogTWVzc2FnZSBBQ0sncyBhcmUgdGhlIHZhbHVlIG9yJ2Qgd2l0aCAweEYwMDAwMDAwCisgKi8KKyNkZWZpbmUgSVhHQkVfVlRfTVNHVFlQRV9BQ0sgICAgICAweDgwMDAwMDAwICAvKiBNZXNzYWdlcyBiZWxvdyBvcidkIHdpdGgKKwkJCQkJICAgICAgICogdGhpcyBhcmUgdGhlIEFDSyAqLworI2RlZmluZSBJWEdCRV9WVF9NU0dUWVBFX05BQ0sgICAgIDB4NDAwMDAwMDAgIC8qIE1lc3NhZ2VzIGJlbG93IG9yJ2Qgd2l0aAorCQkJCQkgICAgICAgKiB0aGlzIGFyZSB0aGUgTkFDSyAqLworI2RlZmluZSBJWEdCRV9WVF9NU0dUWVBFX0NUUyAgICAgIDB4MjAwMDAwMDAgIC8qIEluZGljYXRlcyB0aGF0IFZGIGlzIHN0aWxsCisJCQkJCSAgICAgICAqICBjbGVhciB0byBzZW5kIHJlcXVlc3RzICovCisjZGVmaW5lIElYR0JFX1ZUX01TR0lORk9fU0hJRlQgICAgMTYKKy8qIGJpdHMgMjM6MTYgYXJlIHVzZWQgZm9yIGV4cmEgaW5mbyBmb3IgY2VydGFpbiBtZXNzYWdlcyAqLworI2RlZmluZSBJWEdCRV9WVF9NU0dJTkZPX01BU0sgICAgICgweEZGIDw8IElYR0JFX1ZUX01TR0lORk9fU0hJRlQpCisKKyNkZWZpbmUgSVhHQkVfVkZfUkVTRVQgICAgICAgICAgICAweDAxIC8qIFZGIHJlcXVlc3RzIHJlc2V0ICovCisjZGVmaW5lIElYR0JFX1ZGX1NFVF9NQUNfQUREUiAgICAgMHgwMiAvKiBWRiByZXF1ZXN0cyBQRiB0byBzZXQgTUFDIGFkZHIgKi8KKyNkZWZpbmUgSVhHQkVfVkZfU0VUX01VTFRJQ0FTVCAgICAweDAzIC8qIFZGIHJlcXVlc3RzIFBGIHRvIHNldCBNQyBhZGRyICovCisjZGVmaW5lIElYR0JFX1ZGX1NFVF9WTEFOICAgICAgICAgMHgwNCAvKiBWRiByZXF1ZXN0cyBQRiB0byBzZXQgVkxBTiAqLworI2RlZmluZSBJWEdCRV9WRl9TRVRfTFBFICAgICAgICAgIDB4MDUgLyogVkYgcmVxdWVzdHMgUEYgdG8gc2V0IFZNT0xSLkxQRSAqLworCisvKiBsZW5ndGggb2YgcGVybWFuZW50IGFkZHJlc3MgbWVzc2FnZSByZXR1cm5lZCBmcm9tIFBGICovCisjZGVmaW5lIElYR0JFX1ZGX1BFUk1BRERSX01TR19MRU4gNAorLyogd29yZCBpbiBwZXJtYW5lbnQgYWRkcmVzcyBtZXNzYWdlIHdpdGggdGhlIGN1cnJlbnQgbXVsdGljYXN0IHR5cGUgKi8KKyNkZWZpbmUgSVhHQkVfVkZfTUNfVFlQRV9XT1JEICAgICAzCisKKyNkZWZpbmUgSVhHQkVfUEZfQ09OVFJPTF9NU0cgICAgICAweDAxMDAgLyogUEYgY29udHJvbCBtZXNzYWdlICovCisKKyNkZWZpbmUgSVhHQkVfVkZfTUJYX0lOSVRfVElNRU9VVCAyMDAwIC8qIG51bWJlciBvZiByZXRyaWVzIG9uIG1haWxib3ggKi8KKyNkZWZpbmUgSVhHQkVfVkZfTUJYX0lOSVRfREVMQVkgICA1MDAgIC8qIG1pY3Jvc2Vjb25kcyBiZXR3ZWVuIHJldHJpZXMgKi8KKworLyogZm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgSFcgc3RydWN0ICovCitzdHJ1Y3QgaXhnYmVfaHc7CisKK3MzMiBpeGdiZXZmX2luaXRfbWJ4X3BhcmFtc192ZihzdHJ1Y3QgaXhnYmVfaHcgKik7CisKKyNlbmRpZiAvKiBfSVhHQkVfTUJYX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9peGdiZXZmL3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2l4Z2JldmYvcmVncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZjc1OTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peGdiZXZmL3JlZ3MuaApAQCAtMCwwICsxLDg1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsIDgyNTk5IFZpcnR1YWwgRnVuY3Rpb24gZHJpdmVyCisgIENvcHlyaWdodChjKSAxOTk5IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9JWEdCRVZGX1JFR1NfSF8KKyNkZWZpbmUgX0lYR0JFVkZfUkVHU19IXworCisjZGVmaW5lIElYR0JFX1ZGQ1RSTCAgICAgICAgICAgMHgwMDAwMAorI2RlZmluZSBJWEdCRV9WRlNUQVRVUyAgICAgICAgIDB4MDAwMDgKKyNkZWZpbmUgSVhHQkVfVkZMSU5LUyAgICAgICAgICAweDAwMDEwCisjZGVmaW5lIElYR0JFX1ZGUlRJTUVSICAgICAgICAgMHgwMDA0OAorI2RlZmluZSBJWEdCRV9WRlJYTUVNV1JBUCAgICAgIDB4MDMxOTAKKyNkZWZpbmUgSVhHQkVfVlRFSUNSICAgICAgICAgICAweDAwMTAwCisjZGVmaW5lIElYR0JFX1ZURUlDUyAgICAgICAgICAgMHgwMDEwNAorI2RlZmluZSBJWEdCRV9WVEVJTVMgICAgICAgICAgIDB4MDAxMDgKKyNkZWZpbmUgSVhHQkVfVlRFSU1DICAgICAgICAgICAweDAwMTBDCisjZGVmaW5lIElYR0JFX1ZURUlBQyAgICAgICAgICAgMHgwMDExMAorI2RlZmluZSBJWEdCRV9WVEVJQU0gICAgICAgICAgIDB4MDAxMTQKKyNkZWZpbmUgSVhHQkVfVlRFSVRSKHgpICAgICAgICAoMHgwMDgyMCArICg0ICogeCkpCisjZGVmaW5lIElYR0JFX1ZUSVZBUih4KSAgICAgICAgKDB4MDAxMjAgKyAoNCAqIHgpKQorI2RlZmluZSBJWEdCRV9WVElWQVJfTUlTQyAgICAgIDB4MDAxNDAKKyNkZWZpbmUgSVhHQkVfVlRSU0NJTlQoeCkgICAgICAoMHgwMDE4MCArICg0ICogeCkpCisjZGVmaW5lIElYR0JFX1ZGUkRCQUwoeCkgICAgICAgKDB4MDEwMDAgKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRlJEQkFIKHgpICAgICAgICgweDAxMDA0ICsgKDB4NDAgKiB4KSkKKyNkZWZpbmUgSVhHQkVfVkZSRExFTih4KSAgICAgICAoMHgwMTAwOCArICgweDQwICogeCkpCisjZGVmaW5lIElYR0JFX1ZGUkRIKHgpICAgICAgICAgKDB4MDEwMTAgKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRlJEVCh4KSAgICAgICAgICgweDAxMDE4ICsgKDB4NDAgKiB4KSkKKyNkZWZpbmUgSVhHQkVfVkZSWERDVEwoeCkgICAgICAoMHgwMTAyOCArICgweDQwICogeCkpCisjZGVmaW5lIElYR0JFX1ZGU1JSQ1RMKHgpICAgICAgKDB4MDEwMTQgKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRlJTQ0NUTCh4KSAgICAgICgweDAxMDJDICsgKDB4NDAgKiB4KSkKKyNkZWZpbmUgSVhHQkVfVkZQU1JUWVBFICAgICAgICAweDAwMzAwCisjZGVmaW5lIElYR0JFX1ZGVERCQUwoeCkgICAgICAgKDB4MDIwMDAgKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRlREQkFIKHgpICAgICAgICgweDAyMDA0ICsgKDB4NDAgKiB4KSkKKyNkZWZpbmUgSVhHQkVfVkZURExFTih4KSAgICAgICAoMHgwMjAwOCArICgweDQwICogeCkpCisjZGVmaW5lIElYR0JFX1ZGVERIKHgpICAgICAgICAgKDB4MDIwMTAgKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRlREVCh4KSAgICAgICAgICgweDAyMDE4ICsgKDB4NDAgKiB4KSkKKyNkZWZpbmUgSVhHQkVfVkZUWERDVEwoeCkgICAgICAoMHgwMjAyOCArICgweDQwICogeCkpCisjZGVmaW5lIElYR0JFX1ZGVERXQkFMKHgpICAgICAgKDB4MDIwMzggKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRlREV0JBSCh4KSAgICAgICgweDAyMDNDICsgKDB4NDAgKiB4KSkKKyNkZWZpbmUgSVhHQkVfVkZEQ0FfUlhDVFJMKHgpICAoMHgwMTAwQyArICgweDQwICogeCkpCisjZGVmaW5lIElYR0JFX1ZGRENBX1RYQ1RSTCh4KSAgKDB4MDIwMGMgKyAoMHg0MCAqIHgpKQorI2RlZmluZSBJWEdCRV9WRkdQUkMgICAgICAgICAgIDB4MDEwMUMKKyNkZWZpbmUgSVhHQkVfVkZHUFRDICAgICAgICAgICAweDAyMDFDCisjZGVmaW5lIElYR0JFX1ZGR09SQ19MU0IgICAgICAgMHgwMTAyMAorI2RlZmluZSBJWEdCRV9WRkdPUkNfTVNCICAgICAgIDB4MDEwMjQKKyNkZWZpbmUgSVhHQkVfVkZHT1RDX0xTQiAgICAgICAweDAyMDIwCisjZGVmaW5lIElYR0JFX1ZGR09UQ19NU0IgICAgICAgMHgwMjAyNAorI2RlZmluZSBJWEdCRV9WRk1QUkMgICAgICAgICAgIDB4MDEwMzQKKworI2RlZmluZSBJWEdCRV9XUklURV9SRUcoYSwgcmVnLCB2YWx1ZSkgd3JpdGVsKCh2YWx1ZSksICgoYSktPmh3X2FkZHIgKyAocmVnKSkpCisKKyNkZWZpbmUgSVhHQkVfUkVBRF9SRUcoYSwgcmVnKSByZWFkbCgoYSktPmh3X2FkZHIgKyAocmVnKSkKKworI2RlZmluZSBJWEdCRV9XUklURV9SRUdfQVJSQVkoYSwgcmVnLCBvZmZzZXQsIHZhbHVlKSAoIFwKKyAgICB3cml0ZWwoKHZhbHVlKSwgKChhKS0+aHdfYWRkciArIChyZWcpICsgKChvZmZzZXQpIDw8IDIpKSkpCisKKyNkZWZpbmUgSVhHQkVfUkVBRF9SRUdfQVJSQVkoYSwgcmVnLCBvZmZzZXQpICggXAorICAgIHJlYWRsKChhKS0+aHdfYWRkciArIChyZWcpICsgKChvZmZzZXQpIDw8IDIpKSkKKworI2RlZmluZSBJWEdCRV9XUklURV9GTFVTSChhKSAoSVhHQkVfUkVBRF9SRUcoYSwgSVhHQkVfVkZTVEFUVVMpKQorCisjZW5kaWYgLyogX0lYR0JFVkZfUkVHU19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi92Zi5jIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi92Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNWRlYzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peGdiZXZmL3ZmLmMKQEAgLTAsMCArMSwzODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgODI1OTkgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJ2Zi5oIgorCisvKioKKyAqICBpeGdiZXZmX3N0YXJ0X2h3X3ZmIC0gUHJlcGFyZSBoYXJkd2FyZSBmb3IgVHgvUngKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKgorICogIFN0YXJ0cyB0aGUgaGFyZHdhcmUgYnkgZmlsbGluZyB0aGUgYnVzIGluZm8gc3RydWN0dXJlIGFuZCBtZWRpYSB0eXBlLCBjbGVhcnMKKyAqICBhbGwgb24gY2hpcCBjb3VudGVycywgaW5pdGlhbGl6ZXMgcmVjZWl2ZSBhZGRyZXNzIHJlZ2lzdGVycywgbXVsdGljYXN0CisgKiAgdGFibGUsIFZMQU4gZmlsdGVyIHRhYmxlLCBjYWxscyByb3V0aW5lIHRvIHNldCB1cCBsaW5rIGFuZCBmbG93IGNvbnRyb2wKKyAqICBzZXR0aW5ncywgYW5kIGxlYXZlcyB0cmFuc21pdCBhbmQgcmVjZWl2ZSB1bml0cyBkaXNhYmxlZCBhbmQgdW5pbml0aWFsaXplZAorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX3N0YXJ0X2h3X3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJLyogQ2xlYXIgYWRhcHRlciBzdG9wcGVkIGZsYWcgKi8KKwlody0+YWRhcHRlcl9zdG9wcGVkID0gZmFsc2U7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9pbml0X2h3X3ZmIC0gdmlydHVhbCBmdW5jdGlvbiBoYXJkd2FyZSBpbml0aWFsaXphdGlvbgorICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqCisgKiAgSW5pdGlhbGl6ZSB0aGUgaGFyZHdhcmUgYnkgcmVzZXR0aW5nIHRoZSBoYXJkd2FyZSBhbmQgdGhlbiBzdGFydGluZworICogIHRoZSBoYXJkd2FyZQorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX2luaXRfaHdfdmYoc3RydWN0IGl4Z2JlX2h3ICpodykKK3sKKwlzMzIgc3RhdHVzID0gaHctPm1hYy5vcHMuc3RhcnRfaHcoaHcpOworCisJaHctPm1hYy5vcHMuZ2V0X21hY19hZGRyKGh3LCBody0+bWFjLmFkZHIpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9yZXNldF9od192ZiAtIFBlcmZvcm1zIGhhcmR3YXJlIHJlc2V0CisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBSZXNldHMgdGhlIGhhcmR3YXJlIGJ5IHJlc2V0aW5nIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSB1bml0cywgbWFza3MgYW5kCisgKiAgY2xlYXJzIGFsbCBpbnRlcnJ1cHRzLgorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX3Jlc2V0X2h3X3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJc3RydWN0IGl4Z2JlX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwl1MzIgdGltZW91dCA9IElYR0JFX1ZGX0lOSVRfVElNRU9VVDsKKwlzMzIgcmV0X3ZhbCA9IElYR0JFX0VSUl9JTlZBTElEX01BQ19BRERSOworCXUzMiBtc2didWZbSVhHQkVfVkZfUEVSTUFERFJfTVNHX0xFTl07CisJdTggKmFkZHIgPSAodTggKikoJm1zZ2J1ZlsxXSk7CisKKwkvKiBDYWxsIGFkYXB0ZXIgc3RvcCB0byBkaXNhYmxlIHR4L3J4IGFuZCBjbGVhciBpbnRlcnJ1cHRzICovCisJaHctPm1hYy5vcHMuc3RvcF9hZGFwdGVyKGh3KTsKKworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVkZDVFJMLCBJWEdCRV9DVFJMX1JTVCk7CisJSVhHQkVfV1JJVEVfRkxVU0goaHcpOworCisJLyogd2UgY2Fubm90IHJlc2V0IHdoaWxlIHRoZSBSU1RJIC8gUlNURCBiaXRzIGFyZSBhc3NlcnRlZCAqLworCXdoaWxlICghbWJ4LT5vcHMuY2hlY2tfZm9yX3JzdChodykgJiYgdGltZW91dCkgeworCQl0aW1lb3V0LS07CisJCXVkZWxheSg1KTsKKwl9CisKKwlpZiAoIXRpbWVvdXQpCisJCXJldHVybiBJWEdCRV9FUlJfUkVTRVRfRkFJTEVEOworCisJLyogbWFpbGJveCB0aW1lb3V0IGNhbiBub3cgYmVjb21lIGFjdGl2ZSAqLworCW1ieC0+dGltZW91dCA9IElYR0JFX1ZGX01CWF9JTklUX1RJTUVPVVQ7CisKKwltc2didWZbMF0gPSBJWEdCRV9WRl9SRVNFVDsKKwltYngtPm9wcy53cml0ZV9wb3N0ZWQoaHcsIG1zZ2J1ZiwgMSk7CisKKwltc2xlZXAoMTApOworCisJLyogc2V0IG91ciAicGVybV9hZGRyIiBiYXNlZCBvbiBpbmZvIHByb3ZpZGVkIGJ5IFBGICovCisJLyogYWxzbyBzZXQgdXAgdGhlIG1jX2ZpbHRlcl90eXBlIHdoaWNoIGlzIHBpZ2d5IGJhY2tlZAorCSAqIG9uIHRoZSBtYWMgYWRkcmVzcyBpbiB3b3JkIDMgKi8KKwlyZXRfdmFsID0gbWJ4LT5vcHMucmVhZF9wb3N0ZWQoaHcsIG1zZ2J1ZiwgSVhHQkVfVkZfUEVSTUFERFJfTVNHX0xFTik7CisJaWYgKHJldF92YWwpCisJCXJldHVybiByZXRfdmFsOworCisJaWYgKG1zZ2J1ZlswXSAhPSAoSVhHQkVfVkZfUkVTRVQgfCBJWEdCRV9WVF9NU0dUWVBFX0FDSykpCisJCXJldHVybiBJWEdCRV9FUlJfSU5WQUxJRF9NQUNfQUREUjsKKworCW1lbWNweShody0+bWFjLnBlcm1fYWRkciwgYWRkciwgSVhHQkVfRVRIX0xFTkdUSF9PRl9BRERSRVNTKTsKKwlody0+bWFjLm1jX2ZpbHRlcl90eXBlID0gbXNnYnVmW0lYR0JFX1ZGX01DX1RZUEVfV09SRF07CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9zdG9wX2h3X3ZmIC0gR2VuZXJpYyBzdG9wIFR4L1J4IHVuaXRzCisgKiAgQGh3OiBwb2ludGVyIHRvIGhhcmR3YXJlIHN0cnVjdHVyZQorICoKKyAqICBTZXRzIHRoZSBhZGFwdGVyX3N0b3BwZWQgZmxhZyB3aXRoaW4gaXhnYmVfaHcgc3RydWN0LiBDbGVhcnMgaW50ZXJydXB0cywKKyAqICBkaXNhYmxlcyB0cmFuc21pdCBhbmQgcmVjZWl2ZSB1bml0cy4gVGhlIGFkYXB0ZXJfc3RvcHBlZCBmbGFnIGlzIHVzZWQgYnkKKyAqICB0aGUgc2hhcmVkIGNvZGUgYW5kIGRyaXZlcnMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBhZGFwdGVyIGlzIGluIGEgc3RvcHBlZAorICogIHN0YXRlIGFuZCBzaG91bGQgbm90IHRvdWNoIHRoZSBoYXJkd2FyZS4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl9zdG9wX2h3X3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcpCit7CisJdTMyIG51bWJlcl9vZl9xdWV1ZXM7CisJdTMyIHJlZ192YWw7CisJdTE2IGk7CisKKwkvKgorCSAqIFNldCB0aGUgYWRhcHRlcl9zdG9wcGVkIGZsYWcgc28gb3RoZXIgZHJpdmVyIGZ1bmN0aW9ucyBzdG9wIHRvdWNoaW5nCisJICogdGhlIGhhcmR3YXJlCisJICovCisJaHctPmFkYXB0ZXJfc3RvcHBlZCA9IHRydWU7CisKKwkvKiBEaXNhYmxlIHRoZSByZWNlaXZlIHVuaXQgYnkgc3RvcHBlZCBlYWNoIHF1ZXVlICovCisJbnVtYmVyX29mX3F1ZXVlcyA9IGh3LT5tYWMubWF4X3J4X3F1ZXVlczsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyX29mX3F1ZXVlczsgaSsrKSB7CisJCXJlZ192YWwgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZSWERDVEwoaSkpOworCQlpZiAocmVnX3ZhbCAmIElYR0JFX1JYRENUTF9FTkFCTEUpIHsKKwkJCXJlZ192YWwgJj0gfklYR0JFX1JYRENUTF9FTkFCTEU7CisJCQlJWEdCRV9XUklURV9SRUcoaHcsIElYR0JFX1ZGUlhEQ1RMKGkpLCByZWdfdmFsKTsKKwkJfQorCX0KKworCUlYR0JFX1dSSVRFX0ZMVVNIKGh3KTsKKworCS8qIENsZWFyIGludGVycnVwdCBtYXNrIHRvIHN0b3AgZnJvbSBpbnRlcnJ1cHRzIGJlaW5nIGdlbmVyYXRlZCAqLworCUlYR0JFX1dSSVRFX1JFRyhodywgSVhHQkVfVlRFSU1DLCBJWEdCRV9WRl9JUlFfQ0xFQVJfTUFTSyk7CisKKwkvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHRzICovCisJSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZURUlDUik7CisKKwkvKiBEaXNhYmxlIHRoZSB0cmFuc21pdCB1bml0LiAgRWFjaCBxdWV1ZSBtdXN0IGJlIGRpc2FibGVkLiAqLworCW51bWJlcl9vZl9xdWV1ZXMgPSBody0+bWFjLm1heF90eF9xdWV1ZXM7CisJZm9yIChpID0gMDsgaSA8IG51bWJlcl9vZl9xdWV1ZXM7IGkrKykgeworCQlyZWdfdmFsID0gSVhHQkVfUkVBRF9SRUcoaHcsIElYR0JFX1ZGVFhEQ1RMKGkpKTsKKwkJaWYgKHJlZ192YWwgJiBJWEdCRV9UWERDVExfRU5BQkxFKSB7CisJCQlyZWdfdmFsICY9IH5JWEdCRV9UWERDVExfRU5BQkxFOworCQkJSVhHQkVfV1JJVEVfUkVHKGh3LCBJWEdCRV9WRlRYRENUTChpKSwgcmVnX3ZhbCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9tdGFfdmVjdG9yIC0gRGV0ZXJtaW5lcyBiaXQtdmVjdG9yIGluIG11bHRpY2FzdCB0YWJsZSB0byBzZXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQG1jX2FkZHI6IHRoZSBtdWx0aWNhc3QgYWRkcmVzcworICoKKyAqICBFeHRyYWN0cyB0aGUgMTIgYml0cywgZnJvbSBhIG11bHRpY2FzdCBhZGRyZXNzLCB0byBkZXRlcm1pbmUgd2hpY2gKKyAqICBiaXQtdmVjdG9yIHRvIHNldCBpbiB0aGUgbXVsdGljYXN0IHRhYmxlLiBUaGUgaGFyZHdhcmUgdXNlcyAxMiBiaXRzLCBmcm9tCisgKiAgaW5jb21pbmcgcnggbXVsdGljYXN0IGFkZHJlc3NlcywgdG8gZGV0ZXJtaW5lIHRoZSBiaXQtdmVjdG9yIHRvIGNoZWNrIGluCisgKiAgdGhlIE1UQS4gV2hpY2ggb2YgdGhlIDQgY29tYmluYXRpb24sIG9mIDEyLWJpdHMsIHRoZSBoYXJkd2FyZSB1c2VzIGlzIHNldAorICogIGJ5IHRoZSBNTyBmaWVsZCBvZiB0aGUgTUNTVENUUkwuIFRoZSBNTyBmaWVsZCBpcyBzZXQgZHVyaW5nIGluaXRpYWxpemF0aW9uCisgKiAgdG8gbWNfZmlsdGVyX3R5cGUuCisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfbXRhX3ZlY3RvcihzdHJ1Y3QgaXhnYmVfaHcgKmh3LCB1OCAqbWNfYWRkcikKK3sKKwl1MzIgdmVjdG9yID0gMDsKKworCXN3aXRjaCAoaHctPm1hYy5tY19maWx0ZXJfdHlwZSkgeworCWNhc2UgMDogICAvKiB1c2UgYml0cyBbNDc6MzZdIG9mIHRoZSBhZGRyZXNzICovCisJCXZlY3RvciA9ICgobWNfYWRkcls0XSA+PiA0KSB8ICgoKHUxNiltY19hZGRyWzVdKSA8PCA0KSk7CisJCWJyZWFrOworCWNhc2UgMTogICAvKiB1c2UgYml0cyBbNDY6MzVdIG9mIHRoZSBhZGRyZXNzICovCisJCXZlY3RvciA9ICgobWNfYWRkcls0XSA+PiAzKSB8ICgoKHUxNiltY19hZGRyWzVdKSA8PCA1KSk7CisJCWJyZWFrOworCWNhc2UgMjogICAvKiB1c2UgYml0cyBbNDU6MzRdIG9mIHRoZSBhZGRyZXNzICovCisJCXZlY3RvciA9ICgobWNfYWRkcls0XSA+PiAyKSB8ICgoKHUxNiltY19hZGRyWzVdKSA8PCA2KSk7CisJCWJyZWFrOworCWNhc2UgMzogICAvKiB1c2UgYml0cyBbNDM6MzJdIG9mIHRoZSBhZGRyZXNzICovCisJCXZlY3RvciA9ICgobWNfYWRkcls0XSkgfCAoKCh1MTYpbWNfYWRkcls1XSkgPDwgOCkpOworCQlicmVhazsKKwlkZWZhdWx0OiAgLyogSW52YWxpZCBtY19maWx0ZXJfdHlwZSAqLworCQlicmVhazsKKwl9CisKKwkvKiB2ZWN0b3IgY2FuIG9ubHkgYmUgMTItYml0cyBvciBib3VuZGFyeSB3aWxsIGJlIGV4Y2VlZGVkICovCisJdmVjdG9yICY9IDB4RkZGOworCXJldHVybiB2ZWN0b3I7Cit9CisKKy8qKgorICogIGl4Z2JldmZfZ2V0X21hY19hZGRyX3ZmIC0gUmVhZCBkZXZpY2UgTUFDIGFkZHJlc3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtYWNfYWRkcjogcG9pbnRlciB0byBzdG9yYWdlIGZvciByZXRyaWV2ZWQgTUFDIGFkZHJlc3MKKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl9nZXRfbWFjX2FkZHJfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggKm1hY19hZGRyKQoreworCW1lbWNweShtYWNfYWRkciwgaHctPm1hYy5wZXJtX2FkZHIsIElYR0JFX0VUSF9MRU5HVEhfT0ZfQUREUkVTUyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9zZXRfcmFyX3ZmIC0gc2V0IGRldmljZSBNQUMgYWRkcmVzcworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAaW5kZXg6IFJlY2VpdmUgYWRkcmVzcyByZWdpc3RlciB0byB3cml0ZQorICogIEBhZGRyOiBBZGRyZXNzIHRvIHB1dCBpbnRvIHJlY2VpdmUgYWRkcmVzcyByZWdpc3RlcgorICogIEB2bWRxOiBVbnVzZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbgorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX3NldF9yYXJfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIGluZGV4LCB1OCAqYWRkciwKKwkJCSAgICAgIHUzMiB2bWRxKQoreworCXN0cnVjdCBpeGdiZV9tYnhfaW5mbyAqbWJ4ID0gJmh3LT5tYng7CisJdTMyIG1zZ2J1ZlszXTsKKwl1OCAqbXNnX2FkZHIgPSAodTggKikoJm1zZ2J1ZlsxXSk7CisJczMyIHJldF92YWw7CisKKwltZW1zZXQobXNnYnVmLCAwLCBzaXplb2YobXNnYnVmKSk7CisJbXNnYnVmWzBdID0gSVhHQkVfVkZfU0VUX01BQ19BRERSOworCW1lbWNweShtc2dfYWRkciwgYWRkciwgNik7CisJcmV0X3ZhbCA9IG1ieC0+b3BzLndyaXRlX3Bvc3RlZChodywgbXNnYnVmLCAzKTsKKworCWlmICghcmV0X3ZhbCkKKwkJcmV0X3ZhbCA9IG1ieC0+b3BzLnJlYWRfcG9zdGVkKGh3LCBtc2didWYsIDMpOworCisJbXNnYnVmWzBdICY9IH5JWEdCRV9WVF9NU0dUWVBFX0NUUzsKKworCS8qIGlmIG5hY2tlZCB0aGUgYWRkcmVzcyB3YXMgcmVqZWN0ZWQsIHVzZSAicGVybV9hZGRyIiAqLworCWlmICghcmV0X3ZhbCAmJgorCSAgICAobXNnYnVmWzBdID09IChJWEdCRV9WRl9TRVRfTUFDX0FERFIgfCBJWEdCRV9WVF9NU0dUWVBFX05BQ0spKSkKKwkJaXhnYmV2Zl9nZXRfbWFjX2FkZHJfdmYoaHcsIGh3LT5tYWMuYWRkcik7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl91cGRhdGVfbWNfYWRkcl9saXN0X3ZmIC0gVXBkYXRlIE11bHRpY2FzdCBhZGRyZXNzZXMKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBtY19hZGRyX2xpc3Q6IGFycmF5IG9mIG11bHRpY2FzdCBhZGRyZXNzZXMgdG8gcHJvZ3JhbQorICogIEBtY19hZGRyX2NvdW50OiBudW1iZXIgb2YgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBwcm9ncmFtCisgKiAgQG5leHQ6IGNhbGxlciBzdXBwbGllZCBmdW5jdGlvbiB0byByZXR1cm4gbmV4dCBhZGRyZXNzIGluIGxpc3QKKyAqCisgKiAgVXBkYXRlcyB0aGUgTXVsdGljYXN0IFRhYmxlIEFycmF5LgorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX3VwZGF0ZV9tY19hZGRyX2xpc3RfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywgdTggKm1jX2FkZHJfbGlzdCwKKwkJCQkJdTMyIG1jX2FkZHJfY291bnQsCisJCQkJCWl4Z2JlX21jX2FkZHJfaXRyIG5leHQpCit7CisJc3RydWN0IGl4Z2JlX21ieF9pbmZvICptYnggPSAmaHctPm1ieDsKKwl1MzIgbXNnYnVmW0lYR0JFX1ZGTUFJTEJPWF9TSVpFXTsKKwl1MTYgKnZlY3Rvcl9saXN0ID0gKHUxNiAqKSZtc2didWZbMV07CisJdTMyIHZlY3RvcjsKKwl1MzIgY250LCBpOworCXUzMiB2bWRxOworCisJLyogRWFjaCBlbnRyeSBpbiB0aGUgbGlzdCB1c2VzIDEgMTYgYml0IHdvcmQuICBXZSBoYXZlIDMwCisJICogMTYgYml0IHdvcmRzIGF2YWlsYWJsZSBpbiBvdXIgSFcgbXNnIGJ1ZmZlciAobWludXMgMSBmb3IgdGhlCisJICogbXNnIHR5cGUpLiAgVGhhdCdzIDMwIGhhc2ggdmFsdWVzIGlmIHdlIHBhY2sgJ2VtIHJpZ2h0LiAgSWYKKwkgKiB0aGVyZSBhcmUgbW9yZSB0aGFuIDMwIE1DIGFkZHJlc3NlcyB0byBhZGQgdGhlbiBwdW50IHRoZQorCSAqIGV4dHJhcyBmb3Igbm93IGFuZCB0aGVuIGFkZCBjb2RlIHRvIGhhbmRsZSBtb3JlIHRoYW4gMzAgbGF0ZXIuCisJICogSXQgd291bGQgYmUgdW51c3VhbCBmb3IgYSBzZXJ2ZXIgdG8gcmVxdWVzdCB0aGF0IG1hbnkgbXVsdGktY2FzdAorCSAqIGFkZHJlc3NlcyBleGNlcHQgZm9yIGluIGxhcmdlIGVudGVycHJpc2UgbmV0d29yayBlbnZpcm9ubWVudHMuCisJICovCisKKwljbnQgPSAobWNfYWRkcl9jb3VudCA+IDMwKSA/IDMwIDogbWNfYWRkcl9jb3VudDsKKwltc2didWZbMF0gPSBJWEdCRV9WRl9TRVRfTVVMVElDQVNUOworCW1zZ2J1ZlswXSB8PSBjbnQgPDwgSVhHQkVfVlRfTVNHSU5GT19TSElGVDsKKworCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgeworCQl2ZWN0b3IgPSBpeGdiZXZmX210YV92ZWN0b3IoaHcsIG5leHQoaHcsICZtY19hZGRyX2xpc3QsICZ2bWRxKSk7CisJCXZlY3Rvcl9saXN0W2ldID0gdmVjdG9yOworCX0KKworCW1ieC0+b3BzLndyaXRlX3Bvc3RlZChodywgbXNnYnVmLCBJWEdCRV9WRk1BSUxCT1hfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaXhnYmV2Zl9zZXRfdmZ0YV92ZiAtIFNldC9VbnNldCB2bGFuIGZpbHRlciB0YWJsZSBhZGRyZXNzCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAdmxhbjogMTIgYml0IFZMQU4gSUQKKyAqICBAdmluZDogdW51c2VkIGJ5IFZGIGRyaXZlcnMKKyAqICBAdmxhbl9vbjogaWYgdHJ1ZSB0aGVuIHNldCBiaXQsIGVsc2UgY2xlYXIgYml0CisgKiovCitzdGF0aWMgczMyIGl4Z2JldmZfc2V0X3ZmdGFfdmYoc3RydWN0IGl4Z2JlX2h3ICpodywgdTMyIHZsYW4sIHUzMiB2aW5kLAorCQkJICAgICAgIGJvb2wgdmxhbl9vbikKK3sKKwlzdHJ1Y3QgaXhnYmVfbWJ4X2luZm8gKm1ieCA9ICZody0+bWJ4OworCXUzMiBtc2didWZbMl07CisKKwltc2didWZbMF0gPSBJWEdCRV9WRl9TRVRfVkxBTjsKKwltc2didWZbMV0gPSB2bGFuOworCS8qIFNldHRpbmcgdGhlIDggYml0IGZpZWxkIE1TRyBJTkZPIHRvIFRSVUUgaW5kaWNhdGVzICJhZGQiICovCisJbXNnYnVmWzBdIHw9IHZsYW5fb24gPDwgSVhHQkVfVlRfTVNHSU5GT19TSElGVDsKKworCXJldHVybiBtYngtPm9wcy53cml0ZV9wb3N0ZWQoaHcsIG1zZ2J1ZiwgMik7Cit9CisKKy8qKgorICogIGl4Z2JldmZfc2V0dXBfbWFjX2xpbmtfdmYgLSBTZXR1cCBNQUMgbGluayBzZXR0aW5ncworICogIEBodzogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUKKyAqICBAc3BlZWQ6IFVudXNlZCBpbiB0aGlzIGltcGxlbWVudGF0aW9uCisgKiAgQGF1dG9uZWc6IFVudXNlZCBpbiB0aGlzIGltcGxlbWVudGF0aW9uCisgKiAgQGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZTogVW51c2VkIGluIHRoaXMgaW1wbGVtZW50YXRpb24KKyAqCisgKiAgRG8gbm90aGluZyBhbmQgcmV0dXJuIHN1Y2Nlc3MuICBWRiBkcml2ZXJzIGFyZSBub3QgYWxsb3dlZCB0byBjaGFuZ2UKKyAqICBnbG9iYWwgc2V0dGluZ3MuICBNYWludGFpbmVkIGZvciBkcml2ZXIgY29tcGF0aWJpbGl0eS4KKyAqKi8KK3N0YXRpYyBzMzIgaXhnYmV2Zl9zZXR1cF9tYWNfbGlua192ZihzdHJ1Y3QgaXhnYmVfaHcgKmh3LAorCQkJCSAgICAgaXhnYmVfbGlua19zcGVlZCBzcGVlZCwgYm9vbCBhdXRvbmVnLAorCQkJCSAgICAgYm9vbCBhdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpCit7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGl4Z2JldmZfY2hlY2tfbWFjX2xpbmtfdmYgLSBHZXQgbGluay9zcGVlZCBzdGF0dXMKKyAqICBAaHc6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlCisgKiAgQHNwZWVkOiBwb2ludGVyIHRvIGxpbmsgc3BlZWQKKyAqICBAbGlua191cDogdHJ1ZSBpcyBsaW5rIGlzIHVwLCBmYWxzZSBvdGhlcndpc2UKKyAqICBAYXV0b25lZ193YWl0X3RvX2NvbXBsZXRlOiB0cnVlIHdoZW4gd2FpdGluZyBmb3IgY29tcGxldGlvbiBpcyBuZWVkZWQKKyAqCisgKiAgUmVhZHMgdGhlIGxpbmtzIHJlZ2lzdGVyIHRvIGRldGVybWluZSBpZiBsaW5rIGlzIHVwIGFuZCB0aGUgY3VycmVudCBzcGVlZAorICoqLworc3RhdGljIHMzMiBpeGdiZXZmX2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCBpeGdiZV9odyAqaHcsCisJCQkJICAgICBpeGdiZV9saW5rX3NwZWVkICpzcGVlZCwKKwkJCQkgICAgIGJvb2wgKmxpbmtfdXAsCisJCQkJICAgICBib29sIGF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSkKK3sKKwl1MzIgbGlua3NfcmVnOworCisJaWYgKCEoaHctPm1ieC5vcHMuY2hlY2tfZm9yX3JzdChodykpKSB7CisJCSpsaW5rX3VwID0gZmFsc2U7CisJCSpzcGVlZCA9IDA7CisJCXJldHVybiAtMTsKKwl9CisKKwlsaW5rc19yZWcgPSBJWEdCRV9SRUFEX1JFRyhodywgSVhHQkVfVkZMSU5LUyk7CisKKwlpZiAobGlua3NfcmVnICYgSVhHQkVfTElOS1NfVVApCisJCSpsaW5rX3VwID0gdHJ1ZTsKKwllbHNlCisJCSpsaW5rX3VwID0gZmFsc2U7CisKKwlpZiAobGlua3NfcmVnICYgSVhHQkVfTElOS1NfU1BFRUQpCisJCSpzcGVlZCA9IElYR0JFX0xJTktfU1BFRURfMTBHQl9GVUxMOworCWVsc2UKKwkJKnNwZWVkID0gSVhHQkVfTElOS19TUEVFRF8xR0JfRlVMTDsKKworCXJldHVybiAwOworfQorCitzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMgaXhnYmV2Zl9tYWNfb3BzID0geworCS5pbml0X2h3ICAgICAgICAgICAgID0gaXhnYmV2Zl9pbml0X2h3X3ZmLAorCS5yZXNldF9odyAgICAgICAgICAgID0gaXhnYmV2Zl9yZXNldF9od192ZiwKKwkuc3RhcnRfaHcgICAgICAgICAgICA9IGl4Z2JldmZfc3RhcnRfaHdfdmYsCisJLmdldF9tYWNfYWRkciAgICAgICAgPSBpeGdiZXZmX2dldF9tYWNfYWRkcl92ZiwKKwkuc3RvcF9hZGFwdGVyICAgICAgICA9IGl4Z2JldmZfc3RvcF9od192ZiwKKwkuc2V0dXBfbGluayAgICAgICAgICA9IGl4Z2JldmZfc2V0dXBfbWFjX2xpbmtfdmYsCisJLmNoZWNrX2xpbmsgICAgICAgICAgPSBpeGdiZXZmX2NoZWNrX21hY19saW5rX3ZmLAorCS5zZXRfcmFyICAgICAgICAgICAgID0gaXhnYmV2Zl9zZXRfcmFyX3ZmLAorCS51cGRhdGVfbWNfYWRkcl9saXN0ID0gaXhnYmV2Zl91cGRhdGVfbWNfYWRkcl9saXN0X3ZmLAorCS5zZXRfdmZ0YSAgICAgICAgICAgID0gaXhnYmV2Zl9zZXRfdmZ0YV92ZiwKK307CisKK3N0cnVjdCBpeGdiZXZmX2luZm8gaXhnYmV2Zl92Zl9pbmZvID0geworCS5tYWMgPSBpeGdiZV9tYWNfODI1OTlfdmYsCisJLm1hY19vcHMgPSAmaXhnYmV2Zl9tYWNfb3BzLAorfTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXhnYmV2Zi92Zi5oIGIvZHJpdmVycy9uZXQvaXhnYmV2Zi92Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5OTYwMGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC9peGdiZXZmL3ZmLmgKQEAgLTAsMCArMSwxNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwgODI1OTkgVmlydHVhbCBGdW5jdGlvbiBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX19JWEdCRV9WRl9IX18KKyNkZWZpbmUgX19JWEdCRV9WRl9IX18KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKworI2luY2x1ZGUgImRlZmluZXMuaCIKKyNpbmNsdWRlICJyZWdzLmgiCisjaW5jbHVkZSAibWJ4LmgiCisKK3N0cnVjdCBpeGdiZV9odzsKKworLyogaXRlcmF0b3IgdHlwZSBmb3Igd2Fsa2luZyBtdWx0aWNhc3QgYWRkcmVzcyBsaXN0cyAqLwordHlwZWRlZiB1OCogKCppeGdiZV9tY19hZGRyX2l0cikgKHN0cnVjdCBpeGdiZV9odyAqaHcsIHU4ICoqbWNfYWRkcl9wdHIsCisJCQkJICB1MzIgKnZtZHEpOworc3RydWN0IGl4Z2JlX21hY19vcGVyYXRpb25zIHsKKwlzMzIgKCppbml0X2h3KShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJczMyICgqcmVzZXRfaHcpKHN0cnVjdCBpeGdiZV9odyAqKTsKKwlzMzIgKCpzdGFydF9odykoc3RydWN0IGl4Z2JlX2h3ICopOworCXMzMiAoKmNsZWFyX2h3X2NudHJzKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJZW51bSBpeGdiZV9tZWRpYV90eXBlICgqZ2V0X21lZGlhX3R5cGUpKHN0cnVjdCBpeGdiZV9odyAqKTsKKwl1MzIgKCpnZXRfc3VwcG9ydGVkX3BoeXNpY2FsX2xheWVyKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJczMyICgqZ2V0X21hY19hZGRyKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTggKik7CisJczMyICgqc3RvcF9hZGFwdGVyKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJczMyICgqZ2V0X2J1c19pbmZvKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisKKwkvKiBMaW5rICovCisJczMyICgqc2V0dXBfbGluaykoc3RydWN0IGl4Z2JlX2h3ICosIGl4Z2JlX2xpbmtfc3BlZWQsIGJvb2wsIGJvb2wpOworCXMzMiAoKmNoZWNrX2xpbmspKHN0cnVjdCBpeGdiZV9odyAqLCBpeGdiZV9saW5rX3NwZWVkICosIGJvb2wgKiwgYm9vbCk7CisJczMyICgqZ2V0X2xpbmtfY2FwYWJpbGl0aWVzKShzdHJ1Y3QgaXhnYmVfaHcgKiwgaXhnYmVfbGlua19zcGVlZCAqLAorCQkJCSAgICAgYm9vbCAqKTsKKworCS8qIFJBUiwgTXVsdGljYXN0LCBWTEFOICovCisJczMyICgqc2V0X3Jhcikoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiwgdTggKiwgdTMyKTsKKwlzMzIgKCppbml0X3J4X2FkZHJzKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJczMyICgqdXBkYXRlX21jX2FkZHJfbGlzdCkoc3RydWN0IGl4Z2JlX2h3ICosIHU4ICosIHUzMiwKKwkJCQkgICBpeGdiZV9tY19hZGRyX2l0cik7CisJczMyICgqZW5hYmxlX21jKShzdHJ1Y3QgaXhnYmVfaHcgKik7CisJczMyICgqZGlzYWJsZV9tYykoc3RydWN0IGl4Z2JlX2h3ICopOworCXMzMiAoKmNsZWFyX3ZmdGEpKHN0cnVjdCBpeGdiZV9odyAqKTsKKwlzMzIgKCpzZXRfdmZ0YSkoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiwgdTMyLCBib29sKTsKK307CisKK2VudW0gaXhnYmVfbWFjX3R5cGUgeworCWl4Z2JlX21hY191bmtub3duID0gMCwKKwlpeGdiZV9tYWNfODI1OTlfdmYsCisJaXhnYmVfbnVtX21hY3MKK307CisKK3N0cnVjdCBpeGdiZV9tYWNfaW5mbyB7CisJc3RydWN0IGl4Z2JlX21hY19vcGVyYXRpb25zIG9wczsKKwl1OCBhZGRyWzZdOworCXU4IHBlcm1fYWRkcls2XTsKKworCWVudW0gaXhnYmVfbWFjX3R5cGUgdHlwZTsKKworCXMzMiAgbWNfZmlsdGVyX3R5cGU7CisKKwlib29sIGdldF9saW5rX3N0YXR1czsKKwl1MzIgIG1heF90eF9xdWV1ZXM7CisJdTMyICBtYXhfcnhfcXVldWVzOworCXUzMiAgbWF4X21zaXhfdmVjdG9yczsKK307CisKK3N0cnVjdCBpeGdiZV9tYnhfb3BlcmF0aW9ucyB7CisJczMyICgqaW5pdF9wYXJhbXMpKHN0cnVjdCBpeGdiZV9odyAqaHcpOworCXMzMiAoKnJlYWQpKHN0cnVjdCBpeGdiZV9odyAqLCB1MzIgKiwgdTE2KTsKKwlzMzIgKCp3cml0ZSkoc3RydWN0IGl4Z2JlX2h3ICosIHUzMiAqLCB1MTYpOworCXMzMiAoKnJlYWRfcG9zdGVkKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTMyICosIHUxNik7CisJczMyICgqd3JpdGVfcG9zdGVkKShzdHJ1Y3QgaXhnYmVfaHcgKiwgdTMyICosIHUxNik7CisJczMyICgqY2hlY2tfZm9yX21zZykoc3RydWN0IGl4Z2JlX2h3ICopOworCXMzMiAoKmNoZWNrX2Zvcl9hY2spKHN0cnVjdCBpeGdiZV9odyAqKTsKKwlzMzIgKCpjaGVja19mb3JfcnN0KShzdHJ1Y3QgaXhnYmVfaHcgKik7Cit9OworCitzdHJ1Y3QgaXhnYmVfbWJ4X3N0YXRzIHsKKwl1MzIgbXNnc190eDsKKwl1MzIgbXNnc19yeDsKKworCXUzMiBhY2tzOworCXUzMiByZXFzOworCXUzMiByc3RzOworfTsKKworc3RydWN0IGl4Z2JlX21ieF9pbmZvIHsKKwlzdHJ1Y3QgaXhnYmVfbWJ4X29wZXJhdGlvbnMgb3BzOworCXN0cnVjdCBpeGdiZV9tYnhfc3RhdHMgc3RhdHM7CisJdTMyIHRpbWVvdXQ7CisJdTMyIHVkZWxheTsKKwl1MzIgdjJwX21haWxib3g7CisJdTE2IHNpemU7Cit9OworCitzdHJ1Y3QgaXhnYmVfaHcgeworCXZvaWQgKmJhY2s7CisKKwl1OCBfX2lvbWVtICpod19hZGRyOworCXU4ICpmbGFzaF9hZGRyZXNzOworCXVuc2lnbmVkIGxvbmcgaW9fYmFzZTsKKworCXN0cnVjdCBpeGdiZV9tYWNfaW5mbyBtYWM7CisJc3RydWN0IGl4Z2JlX21ieF9pbmZvIG1ieDsKKworCXUxNiBkZXZpY2VfaWQ7CisJdTE2IHN1YnN5c3RlbV92ZW5kb3JfaWQ7CisJdTE2IHN1YnN5c3RlbV9kZXZpY2VfaWQ7CisJdTE2IHZlbmRvcl9pZDsKKworCXU4ICByZXZpc2lvbl9pZDsKKwlib29sIGFkYXB0ZXJfc3RvcHBlZDsKK307CisKK3N0cnVjdCBpeGdiZXZmX2h3X3N0YXRzIHsKKwl1NjQgYmFzZV92ZmdwcmM7CisJdTY0IGJhc2VfdmZncHRjOworCXU2NCBiYXNlX3ZmZ29yYzsKKwl1NjQgYmFzZV92ZmdvdGM7CisJdTY0IGJhc2VfdmZtcHJjOworCisJdTY0IGxhc3RfdmZncHJjOworCXU2NCBsYXN0X3ZmZ3B0YzsKKwl1NjQgbGFzdF92ZmdvcmM7CisJdTY0IGxhc3RfdmZnb3RjOworCXU2NCBsYXN0X3ZmbXByYzsKKworCXU2NCB2ZmdwcmM7CisJdTY0IHZmZ3B0YzsKKwl1NjQgdmZnb3JjOworCXU2NCB2ZmdvdGM7CisJdTY0IHZmbXByYzsKK307CisKK3N0cnVjdCBpeGdiZXZmX2luZm8geworCWVudW0gaXhnYmVfbWFjX3R5cGUJCW1hYzsKKwlzdHJ1Y3QgaXhnYmVfbWFjX29wZXJhdGlvbnMJKm1hY19vcHM7Cit9OworCisjZW5kaWYgLyogX19JWEdCRV9WRl9IX18gKi8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvam1lLmMgYi9kcml2ZXJzL25ldC9qbWUuYwppbmRleCA3OTJiODhmLi4wZjMxNDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9qbWUuYworKysgYi9kcml2ZXJzL25ldC9qbWUuYwpAQCAtMjg4LDcgKzI4OCw3IEBACiAJd21iKCk7CiAKIAlpZiAoISh0ZXN0X2JpdChKTUVfRkxBR19QT0xMLCAmam1lLT5mbGFncykpKQotCQltc2dfcnhfc3RhdHVzKGptZSwgIlN3aXRjaGVkIHRvIFBDQ19QJWRcbiIsIHApOworCQluZXRpZl9pbmZvKGptZSwgcnhfc3RhdHVzLCBqbWUtPmRldiwgIlN3aXRjaGVkIHRvIFBDQ19QJWRcbiIsIHApOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNDgzLDEzICs0ODMsMTMgQEAKIAkJc3RyY2F0KGxpbmttc2csIChwaHlsaW5rICYgUEhZX0xJTktfTURJX1NUQVQpID8KIAkJCQkJIk1ESS1YIiA6CiAJCQkJCSJNREkiKTsKLQkJbXNnX2xpbmsoam1lLCAiTGluayBpcyB1cCBhdCAlcy5cbiIsIGxpbmttc2cpOworCQluZXRpZl9pbmZvKGptZSwgbGluaywgam1lLT5kZXYsICJMaW5rIGlzIHVwIGF0ICVzLlxuIiwgbGlua21zZyk7CiAJCW5ldGlmX2NhcnJpZXJfb24obmV0ZGV2KTsKIAl9IGVsc2UgewogCQlpZiAodGVzdG9ubHkpCiAJCQlnb3RvIG91dDsKIAotCQltc2dfbGluayhqbWUsICJMaW5rIGlzIGRvd24uXG4iKTsKKwkJbmV0aWZfaW5mbyhqbWUsIGxpbmssIGptZS0+ZGV2LCAiTGluayBpcyBkb3duLlxuIik7CiAJCWptZS0+cGh5bGluayA9IDA7CiAJCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CiAJfQpAQCAtODgzLDIwICs4ODMsMjAgQEAKIAlpZiAodW5saWtlbHkoKGZsYWdzICYgKFJYV0JGTEFHX01GIHwgUlhXQkZMQUdfVENQT04gfCBSWFdCRkxBR19UQ1BDUykpCiAJCQk9PSBSWFdCRkxBR19UQ1BPTikpIHsKIAkJaWYgKGZsYWdzICYgUlhXQkZMQUdfSVBWNCkKLQkJCW1zZ19yeF9lcnIoam1lLCAiVENQIENoZWNrc3VtIGVycm9yXG4iKTsKKwkJCW5ldGlmX2VycihqbWUsIHJ4X2Vyciwgam1lLT5kZXYsICJUQ1AgQ2hlY2tzdW0gZXJyb3JcbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJaWYgKHVubGlrZWx5KChmbGFncyAmIChSWFdCRkxBR19NRiB8IFJYV0JGTEFHX1VEUE9OIHwgUlhXQkZMQUdfVURQQ1MpKQogCQkJPT0gUlhXQkZMQUdfVURQT04pKSB7CiAJCWlmIChmbGFncyAmIFJYV0JGTEFHX0lQVjQpCi0JCQltc2dfcnhfZXJyKGptZSwgIlVEUCBDaGVja3N1bSBlcnJvci5cbiIpOworCQkJbmV0aWZfZXJyKGptZSwgcnhfZXJyLCBqbWUtPmRldiwgIlVEUCBDaGVja3N1bSBlcnJvci5cbiIpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJaWYgKHVubGlrZWx5KChmbGFncyAmIChSWFdCRkxBR19JUFY0IHwgUlhXQkZMQUdfSVBDUykpCiAJCQk9PSBSWFdCRkxBR19JUFY0KSkgewotCQltc2dfcnhfZXJyKGptZSwgIklQdjQgQ2hlY2tzdW0gZXJyb3IuXG4iKTsKKwkJbmV0aWZfZXJyKGptZSwgcnhfZXJyLCBqbWUtPmRldiwgIklQdjQgQ2hlY2tzdW0gZXJyb3IuXG4iKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtMTE4Niw5ICsxMTg2LDkgQEAKIAogCXdoaWxlICghYXRvbWljX2RlY19hbmRfdGVzdCgmam1lLT5saW5rX2NoYW5naW5nKSkgewogCQlhdG9taWNfaW5jKCZqbWUtPmxpbmtfY2hhbmdpbmcpOwotCQltc2dfaW50cihqbWUsICJHZXQgbGluayBjaGFuZ2UgbG9jayBmYWlsZWQuXG4iKTsKKwkJbmV0aWZfaW5mbyhqbWUsIGludHIsIGptZS0+ZGV2LCAiR2V0IGxpbmsgY2hhbmdlIGxvY2sgZmFpbGVkLlxuIik7CiAJCXdoaWxlIChhdG9taWNfcmVhZCgmam1lLT5saW5rX2NoYW5naW5nKSAhPSAxKQotCQkJbXNnX2ludHIoam1lLCAiV2FpdGluZyBsaW5rIGNoYW5nZSBsb2NrLlxuIik7CisJCQluZXRpZl9pbmZvKGptZSwgaW50ciwgam1lLT5kZXYsICJXYWl0aW5nIGxpbmsgY2hhbmdlIGxvY2suXG4iKTsKIAl9CiAKIAlpZiAoam1lX2NoZWNrX2xpbmsobmV0ZGV2LCAxKSAmJiBqbWUtPm9sZF9tdHUgPT0gbmV0ZGV2LT5tdHUpCkBAIC0xMzA1LDcgKzEzMDUsNyBAQAogCWlmICh1bmxpa2VseSghbmV0aWZfY2Fycmllcl9vayhqbWUtPmRldikpKQogCQlyZXR1cm47CiAKLQltc2dfcnhfc3RhdHVzKGptZSwgIlJYIFF1ZXVlIEZ1bGwhXG4iKTsKKwluZXRpZl9pbmZvKGptZSwgcnhfc3RhdHVzLCBqbWUtPmRldiwgIlJYIFF1ZXVlIEZ1bGwhXG4iKTsKIAogCWptZV9yeF9jbGVhbl90YXNrbGV0KGFyZyk7CiAKQEAgLTEzMjUsNyArMTMyNSw3IEBACiAJc21wX3dtYigpOwogCWlmICh1bmxpa2VseShuZXRpZl9xdWV1ZV9zdG9wcGVkKGptZS0+ZGV2KSAmJgogCWF0b21pY19yZWFkKCZ0eHJpbmctPm5yX2ZyZWUpID49IChqbWUtPnR4X3dha2VfdGhyZXNob2xkKSkpIHsKLQkJbXNnX3R4X2RvbmUoam1lLCAiVFggUXVldWUgV2FrZWQuXG4iKTsKKwkJbmV0aWZfaW5mbyhqbWUsIHR4X2RvbmUsIGptZS0+ZGV2LCAiVFggUXVldWUgV2FrZWQuXG4iKTsKIAkJbmV0aWZfd2FrZV9xdWV1ZShqbWUtPmRldik7CiAJfQogCkBAIC0xODM1LDcgKzE4MzUsNyBAQAogCQkJKmZsYWdzIHw9IFRYRkxBR19VRFBDUzsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJbXNnX3R4X2VycihqbWUsICJFcnJvciB1cHBlciBsYXllciBwcm90b2NvbC5cbiIpOworCQkJbmV0aWZfZXJyKGptZSwgdHhfZXJyLCBqbWUtPmRldiwgIkVycm9yIHVwcGVyIGxheWVyIHByb3RvY29sLlxuIik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTE5MTAsMTIgKzE5MTAsMTIgQEAKIAlzbXBfd21iKCk7CiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZ0eHJpbmctPm5yX2ZyZWUpIDwgKE1BWF9TS0JfRlJBR1MrMikpKSB7CiAJCW5ldGlmX3N0b3BfcXVldWUoam1lLT5kZXYpOwotCQltc2dfdHhfcXVldWVkKGptZSwgIlRYIFF1ZXVlIFBhdXNlZC5cbiIpOworCQluZXRpZl9pbmZvKGptZSwgdHhfcXVldWVkLCBqbWUtPmRldiwgIlRYIFF1ZXVlIFBhdXNlZC5cbiIpOwogCQlzbXBfd21iKCk7CiAJCWlmIChhdG9taWNfcmVhZCgmdHhyaW5nLT5ucl9mcmVlKQogCQkJPj0gKGptZS0+dHhfd2FrZV90aHJlc2hvbGQpKSB7CiAJCQluZXRpZl93YWtlX3F1ZXVlKGptZS0+ZGV2KTsKLQkJCW1zZ190eF9xdWV1ZWQoam1lLCAiVFggUXVldWUgRmFzdCBXYWtlZC5cbiIpOworCQkJbmV0aWZfaW5mbyhqbWUsIHR4X3F1ZXVlZCwgam1lLT5kZXYsICJUWCBRdWV1ZSBGYXN0IFdha2VkLlxuIik7CiAJCX0KIAl9CiAKQEAgLTE5MjMsNyArMTkyMyw3IEBACiAJCQkoamlmZmllcyAtIHR4YmktPnN0YXJ0X3htaXQpID49IFRYX1RJTUVPVVQgJiYKIAkJCXR4YmktPnNrYikpIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZShqbWUtPmRldik7Ci0JCW1zZ190eF9xdWV1ZWQoam1lLCAiVFggUXVldWUgU3RvcHBlZCAlZEAlbHUuXG4iLCBpZHgsIGppZmZpZXMpOworCQluZXRpZl9pbmZvKGptZSwgdHhfcXVldWVkLCBqbWUtPmRldiwgIlRYIFF1ZXVlIFN0b3BwZWQgJWRAJWx1LlxuIiwgaWR4LCBqaWZmaWVzKTsKIAl9CiB9CiAKQEAgLTE5NDYsNyArMTk0Niw3IEBACiAKIAlpZiAodW5saWtlbHkoaWR4IDwgMCkpIHsKIAkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOwotCQltc2dfdHhfZXJyKGptZSwgIkJVRyEgVHggcmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iKTsKKwkJbmV0aWZfZXJyKGptZSwgdHhfZXJyLCBqbWUtPmRldiwgIkJVRyEgVHggcmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iKTsKIAogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQpAQCAtMTk5Nyw3ICsxOTk3LDYgQEAKIHsKIAlzdHJ1Y3Qgam1lX2FkYXB0ZXIgKmptZSA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJdTMyIG1jX2hhc2hbMl0gPSB7fTsKLQlpbnQgaTsKIAogCXNwaW5fbG9ja19iaCgmam1lLT5yeG1jc19sb2NrKTsKIApAQCAtMjAxMiwxMCArMjAxMSw3IEBACiAJCWludCBiaXRfbnI7CiAKIAkJam1lLT5yZWdfcnhtY3MgfD0gUlhNQ1NfTVVMRlJBTUUgfCBSWE1DU19NVUxGSUxURVJFRDsKLQkJZm9yIChpID0gMCwgbWNsaXN0ID0gbmV0ZGV2LT5tY19saXN0OwotCQkJbWNsaXN0ICYmIGkgPCBuZXRkZXYtPm1jX2NvdW50OwotCQkJKytpLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKLQorCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIG5ldGRldikgewogCQkJYml0X25yID0gZXRoZXJfY3JjKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSAmIDB4M0Y7CiAJCQltY19oYXNoW2JpdF9uciA+PiA1XSB8PSAxIDw8IChiaXRfbnIgJiAweDFGKTsKIAkJfQpAQCAtMjQ3Myw3ICsyNDY5LDcgQEAKIAkJdmFsID0ganJlYWQzMihqbWUsIEpNRV9TTUJDU1IpOwogCX0KIAlpZiAoIXRvKSB7Ci0JCW1zZ19odyhqbWUsICJTTUIgQnVzIEJ1c3kuXG4iKTsKKwkJbmV0aWZfZXJyKGptZSwgaHcsIGptZS0+ZGV2LCAiU01CIEJ1cyBCdXN5LlxuIik7CiAJCXJldHVybiAweEZGOwogCX0KIApAQCAtMjQ4OSw3ICsyNDg1LDcgQEAKIAkJdmFsID0ganJlYWQzMihqbWUsIEpNRV9TTUJJTlRGKTsKIAl9CiAJaWYgKCF0bykgewotCQltc2dfaHcoam1lLCAiU01CIEJ1cyBCdXN5LlxuIik7CisJCW5ldGlmX2VycihqbWUsIGh3LCBqbWUtPmRldiwgIlNNQiBCdXMgQnVzeS5cbiIpOwogCQlyZXR1cm4gMHhGRjsKIAl9CiAKQEAgLTI1MDksNyArMjUwNSw3IEBACiAJCXZhbCA9IGpyZWFkMzIoam1lLCBKTUVfU01CQ1NSKTsKIAl9CiAJaWYgKCF0bykgewotCQltc2dfaHcoam1lLCAiU01CIEJ1cyBCdXN5LlxuIik7CisJCW5ldGlmX2VycihqbWUsIGh3LCBqbWUtPmRldiwgIlNNQiBCdXMgQnVzeS5cbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0yNTI2LDcgKzI1MjIsNyBAQAogCQl2YWwgPSBqcmVhZDMyKGptZSwgSk1FX1NNQklOVEYpOwogCX0KIAlpZiAoIXRvKSB7Ci0JCW1zZ19odyhqbWUsICJTTUIgQnVzIEJ1c3kuXG4iKTsKKwkJbmV0aWZfZXJyKGptZSwgaHcsIGptZS0+ZGV2LCAiU01CIEJ1cyBCdXN5LlxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTI4NzYsMTQgKzI4NzIsMTQgQEAKIAkJZ290byBlcnJfb3V0X3VubWFwOwogCX0KIAotCW1zZ19wcm9iZShqbWUsICIlcyVzIHZlcjoleCByZXY6JXggbWFjYWRkcjolcE1cbiIsCi0JCShqbWUtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1DMjUwKSA/Ci0JCQkiSk1DMjUwIEdpZ2FiaXQgRXRoZXJuZXQiIDoKLQkJCShqbWUtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1DMjYwKSA/Ci0JCQkJIkpNQzI2MCBGYXN0IEV0aGVybmV0IiA6ICJVbmtub3duIiwKLQkJKGptZS0+ZnBnYXZlciAhPSAwKSA/ICIgKEZQR0EpIiA6ICIiLAotCQkoam1lLT5mcGdhdmVyICE9IDApID8gam1lLT5mcGdhdmVyIDogam1lLT5jaGlwcmV2LAotCQlqbWUtPnJldiwgbmV0ZGV2LT5kZXZfYWRkcik7CisJbmV0aWZfaW5mbyhqbWUsIHByb2JlLCBqbWUtPmRldiwgIiVzJXMgdmVyOiV4IHJldjoleCBtYWNhZGRyOiVwTVxuIiwKKwkJICAgKGptZS0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUMyNTApID8KKwkJICAgIkpNQzI1MCBHaWdhYml0IEV0aGVybmV0IiA6CisJCSAgIChqbWUtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1DMjYwKSA/CisJCSAgICJKTUMyNjAgRmFzdCBFdGhlcm5ldCIgOiAiVW5rbm93biIsCisJCSAgIChqbWUtPmZwZ2F2ZXIgIT0gMCkgPyAiIChGUEdBKSIgOiAiIiwKKwkJICAgKGptZS0+ZnBnYXZlciAhPSAwKSA/IGptZS0+ZnBnYXZlciA6IGptZS0+Y2hpcHJldiwKKwkJICAgam1lLT5yZXYsIG5ldGRldi0+ZGV2X2FkZHIpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTI5OTQsNyArMjk5MCw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGptZV9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoam1lX3BjaV90YmwpID0gewogCXsgUENJX1ZERVZJQ0UoSk1JQ1JPTiwgUENJX0RFVklDRV9JRF9KTUlDUk9OX0pNQzI1MCkgfSwKIAl7IFBDSV9WREVWSUNFKEpNSUNST04sIFBDSV9ERVZJQ0VfSURfSk1JQ1JPTl9KTUMyNjApIH0sCiAJeyB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9qbWUuaCBiL2RyaXZlcnMvbmV0L2ptZS5oCmluZGV4IDI1MWFiZWQuLmMxOWRiOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2ptZS5oCisrKyBiL2RyaXZlcnMvbmV0L2ptZS5oCkBAIC00NSw0MyArNDUsMTYgQEAKIAlwcmludGsoS0VSTl9FUlIgUEZYIGZtdCwgIyMgYXJncykKIAogI2lmZGVmIFRYX0RFQlVHCi0jZGVmaW5lIHR4X2RiZyhwcml2LCBmbXQsIGFyZ3MuLi4pIFwKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10LCAocHJpdiktPmRldi0+bmFtZSwgIyMgYXJncykKKyNkZWZpbmUgdHhfZGJnKHByaXYsIGZtdCwgYXJncy4uLikJCQkJCVwKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10LCAocHJpdiktPmRldi0+bmFtZSwgIyNhcmdzKQogI2Vsc2UKLSNkZWZpbmUgdHhfZGJnKHByaXYsIGZtdCwgYXJncy4uLikKKyNkZWZpbmUgdHhfZGJnKHByaXYsIGZtdCwgYXJncy4uLikJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKDApCQkJCQkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmbXQsIChwcml2KS0+ZGV2LT5uYW1lLCAjI2FyZ3MpOyBcCit9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNkZWZpbmUgam1lX21zZyhtc2dsdmwsIHR5cGUsIHByaXYsIGZtdCwgYXJncy4uLikgXAotCWlmIChuZXRpZl9tc2dfIyN0eXBlKHByaXYpKSBcCi0JCXByaW50ayhtc2dsdmwgIiVzOiAiIGZtdCwgKHByaXYpLT5kZXYtPm5hbWUsICMjIGFyZ3MpCi0KLSNkZWZpbmUgbXNnX3Byb2JlKHByaXYsIGZtdCwgYXJncy4uLikgXAotCWptZV9tc2coS0VSTl9JTkZPLCBwcm9iZSwgcHJpdiwgZm10LCAjIyBhcmdzKQotCi0jZGVmaW5lIG1zZ19saW5rKHByaXYsIGZtdCwgYXJncy4uLikgXAotCWptZV9tc2coS0VSTl9JTkZPLCBsaW5rLCBwcml2LCBmbXQsICMjIGFyZ3MpCi0KLSNkZWZpbmUgbXNnX2ludHIocHJpdiwgZm10LCBhcmdzLi4uKSBcCi0Jam1lX21zZyhLRVJOX0lORk8sIGludHIsIHByaXYsIGZtdCwgIyMgYXJncykKLQotI2RlZmluZSBtc2dfcnhfZXJyKHByaXYsIGZtdCwgYXJncy4uLikgXAotCWptZV9tc2coS0VSTl9FUlIsIHJ4X2VyciwgcHJpdiwgZm10LCAjIyBhcmdzKQotCi0jZGVmaW5lIG1zZ19yeF9zdGF0dXMocHJpdiwgZm10LCBhcmdzLi4uKSBcCi0Jam1lX21zZyhLRVJOX0lORk8sIHJ4X3N0YXR1cywgcHJpdiwgZm10LCAjIyBhcmdzKQotCi0jZGVmaW5lIG1zZ190eF9lcnIocHJpdiwgZm10LCBhcmdzLi4uKSBcCi0Jam1lX21zZyhLRVJOX0VSUiwgdHhfZXJyLCBwcml2LCBmbXQsICMjIGFyZ3MpCi0KLSNkZWZpbmUgbXNnX3R4X2RvbmUocHJpdiwgZm10LCBhcmdzLi4uKSBcCi0Jam1lX21zZyhLRVJOX0lORk8sIHR4X2RvbmUsIHByaXYsIGZtdCwgIyMgYXJncykKLQotI2RlZmluZSBtc2dfdHhfcXVldWVkKHByaXYsIGZtdCwgYXJncy4uLikgXAotCWptZV9tc2coS0VSTl9JTkZPLCB0eF9xdWV1ZWQsIHByaXYsIGZtdCwgIyMgYXJncykKLQotI2RlZmluZSBtc2dfaHcocHJpdiwgZm10LCBhcmdzLi4uKSBcCi0Jam1lX21zZyhLRVJOX0VSUiwgaHcsIHByaXYsIGZtdCwgIyMgYXJncykKLQogLyoKICAqIEV4dHJhIFBDSSBDb25maWd1cmF0aW9uIHNwYWNlIGludGVyZmFjZQogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9rb3JpbmEuYyBiL2RyaXZlcnMvbmV0L2tvcmluYS5jCmluZGV4IDI1ZTJhZjYuLjMwMGMyMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2tvcmluYS5jCisrKyBiL2RyaXZlcnMvbmV0L2tvcmluYS5jCkBAIC00ODIsNyArNDgyLDcgQEAKIHsKIAlzdHJ1Y3Qga29yaW5hX3ByaXZhdGUgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCXUzMiByZWNvZ25pc2UgPSBFVEhfQVJDX0FCOwkvKiBhbHdheXMgYWNjZXB0IGJyb2FkY2FzdHMgKi8KIAlpbnQgaTsKIApAQCAtNDkwLDIzICs0OTAsMjEgQEAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQogCQlyZWNvZ25pc2UgfD0gRVRIX0FSQ19QUk87CiAKLQllbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgKGRldi0+bWNfY291bnQgPiA0KSkKKwllbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgKG5ldGRldl9tY19jb3VudChkZXYpID4gNCkpCiAJCS8qIEFsbCBtdWx0aWNhc3QgYW5kIGJyb2FkY2FzdCAqLwogCQlyZWNvZ25pc2UgfD0gRVRIX0FSQ19BTTsKIAogCS8qIEJ1aWxkIHRoZSBoYXNoIHRhYmxlICovCi0JaWYgKGRldi0+bWNfY291bnQgPiA0KSB7CisJaWYgKG5ldGRldl9tY19jb3VudChkZXYpID4gNCkgewogCQl1MTYgaGFzaF90YWJsZVs0XTsKIAkJdTMyIGNyYzsKIAogCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQogCQkJaGFzaF90YWJsZVtpXSA9IDA7CiAKLQkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogCQkJY2hhciAqYWRkcnMgPSBkbWktPmRtaV9hZGRyOwogCi0JCQlkbWkgPSBkbWktPm5leHQ7Ci0KIAkJCWlmICghKCphZGRycyAmIDEpKQogCQkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9rczg4NTEuYyBiL2RyaXZlcnMvbmV0L2tzODg1MS5jCmluZGV4IDZkM2FjNjUuLjA1NzNlMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2tzODg1MS5jCisrKyBiL2RyaXZlcnMvbmV0L2tzODg1MS5jCkBAIC00MDcsNyArNDA3LDcgQEAKICAqIEBidWZmOiBUaGUgYnVmZmVyIGFkZHJlc3MKICAqIEBsZW46IFRoZSBsZW5ndGggb2YgdGhlIGRhdGEgdG8gcmVhZAogICoKLSAqIElzc3VlIGFuIFJYUSBGSUZPIHJlYWQgY29tbWFuZCBhbmQgcmVhZCB0aGUgQGxlbiBhbW1vdW50IG9mIGRhdGEgZnJvbQorICogSXNzdWUgYW4gUlhRIEZJRk8gcmVhZCBjb21tYW5kIGFuZCByZWFkIHRoZSBAbGVuIGFtb3VudCBvZiBkYXRhIGZyb20KICAqIHRoZSBGSUZPIGludG8gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkgQGJ1ZmYuCiAgKi8KIHN0YXRpYyB2b2lkIGtzODg1MV9yZGZpZm8oc3RydWN0IGtzODg1MV9uZXQgKmtzLCB1OCAqYnVmZiwgdW5zaWduZWQgbGVuKQpAQCAtOTY1LDE0ICs5NjUsMTMgQEAKIAogCQlyeGN0cmwucnhjcjEgPSAoUlhDUjFfUlhNRSB8IFJYQ1IxX1JYQUUgfAogCQkJCVJYQ1IxX1JYUEFGTUEgfCBSWENSMV9SWE1BRk1BKTsKLQl9IGVsc2UgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUICYmIGRldi0+bWNfY291bnQgPiAwKSB7Ci0JCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNwdHIgPSBkZXYtPm1jX2xpc3Q7CisJfSBlbHNlIGlmIChkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCAmJiAhbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKKwkJc3RydWN0IGRldl9tY19saXN0ICptY3B0cjsKIAkJdTMyIGNyYzsKLQkJaW50IGk7CiAKIAkJLyogYWNjZXB0IHNvbWUgbXVsdGljYXN0ICovCiAKLQkJZm9yIChpID0gZGV2LT5tY19jb3VudDsgaSA+IDA7IGktLSkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY3B0ciwgZGV2KSB7CiAJCQljcmMgPSBldGhlcl9jcmMoRVRIX0FMRU4sIG1jcHRyLT5kbWlfYWRkcik7CiAJCQljcmMgPj49ICgzMiAtIDYpOyAgLyogZ2V0IHRvcCBzaXggYml0cyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9rczg4NTFfbWxsLmMgYi9kcml2ZXJzL25ldC9rczg4NTFfbWxsLmMKaW5kZXggYzBjZWViYy4uODRiMGUxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQva3M4ODUxX21sbC5jCisrKyBiL2RyaXZlcnMvbmV0L2tzODg1MV9tbGwuYwpAQCAtMTE5MywxMCArMTE5MywxMSBAQAogCWVsc2UKIAkJa3Nfc2V0X3Byb21pcyhrcywgZmFsc2UpOwogCi0JaWYgKChuZXRkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCkgJiYgbmV0ZGV2LT5tY19jb3VudCkgewotCQlpZiAobmV0ZGV2LT5tY19jb3VudCA8PSBNQVhfTUNBU1RfTFNUKSB7CisJaWYgKChuZXRkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCkgJiYgbmV0ZGV2X21jX2NvdW50KG5ldGRldikpIHsKKwkJaWYgKG5ldGRldl9tY19jb3VudChuZXRkZXYpIDw9IE1BWF9NQ0FTVF9MU1QpIHsKIAkJCWludCBpID0gMDsKLQkJCWZvciAocHRyID0gbmV0ZGV2LT5tY19saXN0OyBwdHI7IHB0ciA9IHB0ci0+bmV4dCkgeworCisJCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihwdHIsIG5ldGRldikgewogCQkJCWlmICghKCpwdHItPmRtaV9hZGRyICYgMSkpCiAJCQkJCWNvbnRpbnVlOwogCQkJCWlmIChpID49IE1BWF9NQ0FTVF9MU1QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9rc3o4ODR4LmMgYi9kcml2ZXJzL25ldC9rc3o4ODR4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI2NGEzZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L2tzejg4NHguYwpAQCAtMCwwICsxLDczMzUgQEAKKy8qKgorICogZHJpdmVycy9uZXQva3N4ODg0eC5jIC0gTWljcmVsIEtTWjg4NDEvMiBQQ0kgRXRoZXJuZXQgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgTWljcmVsLCBJbmMuCisgKiAJVHJpc3RyYW0gSGEgPFRyaXN0cmFtLkhhQG1pY3JlbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9taWkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworCisvKiBETUEgUmVnaXN0ZXJzICovCisKKyNkZWZpbmUgS1NfRE1BX1RYX0NUUkwJCQkweDAwMDAKKyNkZWZpbmUgRE1BX1RYX0VOQUJMRQkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgRE1BX1RYX0NSQ19FTkFCTEUJCTB4MDAwMDAwMDIKKyNkZWZpbmUgRE1BX1RYX1BBRF9FTkFCTEUJCTB4MDAwMDAwMDQKKyNkZWZpbmUgRE1BX1RYX0xPT1BCQUNLCQkJMHgwMDAwMDEwMAorI2RlZmluZSBETUFfVFhfRkxPV19FTkFCTEUJCTB4MDAwMDAyMDAKKyNkZWZpbmUgRE1BX1RYX0NTVU1fSVAJCQkweDAwMDEwMDAwCisjZGVmaW5lIERNQV9UWF9DU1VNX1RDUAkJCTB4MDAwMjAwMDAKKyNkZWZpbmUgRE1BX1RYX0NTVU1fVURQCQkJMHgwMDA0MDAwMAorI2RlZmluZSBETUFfVFhfQlVSU1RfU0laRQkJMHgzRjAwMDAwMAorCisjZGVmaW5lIEtTX0RNQV9SWF9DVFJMCQkJMHgwMDA0CisjZGVmaW5lIERNQV9SWF9FTkFCTEUJCQkweDAwMDAwMDAxCisjZGVmaW5lIEtTODg0WF9ETUFfUlhfTVVMVElDQVNUCQkweDAwMDAwMDAyCisjZGVmaW5lIERNQV9SWF9QUk9NSVNDVU9VUwkJMHgwMDAwMDAwNAorI2RlZmluZSBETUFfUlhfRVJST1IJCQkweDAwMDAwMDA4CisjZGVmaW5lIERNQV9SWF9VTklDQVNUCQkJMHgwMDAwMDAxMAorI2RlZmluZSBETUFfUlhfQUxMX01VTFRJQ0FTVAkJMHgwMDAwMDAyMAorI2RlZmluZSBETUFfUlhfQlJPQURDQVNUCQkweDAwMDAwMDQwCisjZGVmaW5lIERNQV9SWF9GTE9XX0VOQUJMRQkJMHgwMDAwMDIwMAorI2RlZmluZSBETUFfUlhfQ1NVTV9JUAkJCTB4MDAwMTAwMDAKKyNkZWZpbmUgRE1BX1JYX0NTVU1fVENQCQkJMHgwMDAyMDAwMAorI2RlZmluZSBETUFfUlhfQ1NVTV9VRFAJCQkweDAwMDQwMDAwCisjZGVmaW5lIERNQV9SWF9CVVJTVF9TSVpFCQkweDNGMDAwMDAwCisKKyNkZWZpbmUgRE1BX0JVUlNUX1NISUZUCQkJMjQKKyNkZWZpbmUgRE1BX0JVUlNUX0RFRkFVTFQJCTgKKworI2RlZmluZSBLU19ETUFfVFhfU1RBUlQJCQkweDAwMDgKKyNkZWZpbmUgS1NfRE1BX1JYX1NUQVJUCQkJMHgwMDBDCisjZGVmaW5lIERNQV9TVEFSVAkJCTB4MDAwMDAwMDEKKworI2RlZmluZSBLU19ETUFfVFhfQUREUgkJCTB4MDAxMAorI2RlZmluZSBLU19ETUFfUlhfQUREUgkJCTB4MDAxNAorCisjZGVmaW5lIERNQV9BRERSX0xJU1RfTUFTSwkJMHhGRkZGRkZGQworI2RlZmluZSBETUFfQUREUl9MSVNUX1NISUZUCQkyCisKKy8qIE1UUjAgKi8KKyNkZWZpbmUgS1M4ODRYX01VTFRJQ0FTVF8wX09GRlNFVAkweDAwMjAKKyNkZWZpbmUgS1M4ODRYX01VTFRJQ0FTVF8xX09GRlNFVAkweDAwMjEKKyNkZWZpbmUgS1M4ODRYX01VTFRJQ0FTVF8yX09GRlNFVAkweDAwMjIKKyNkZWZpbmUgS1M4ODR4X01VTFRJQ0FTVF8zX09GRlNFVAkweDAwMjMKKy8qIE1UUjEgKi8KKyNkZWZpbmUgS1M4ODRYX01VTFRJQ0FTVF80X09GRlNFVAkweDAwMjQKKyNkZWZpbmUgS1M4ODRYX01VTFRJQ0FTVF81X09GRlNFVAkweDAwMjUKKyNkZWZpbmUgS1M4ODRYX01VTFRJQ0FTVF82X09GRlNFVAkweDAwMjYKKyNkZWZpbmUgS1M4ODRYX01VTFRJQ0FTVF83X09GRlNFVAkweDAwMjcKKworLyogSW50ZXJydXB0IFJlZ2lzdGVycyAqLworCisvKiBJTlRFTiAqLworI2RlZmluZSBLUzg4NFhfSU5URVJSVVBUU19FTkFCTEUJMHgwMDI4CisvKiBJTlRTVCAqLworI2RlZmluZSBLUzg4NFhfSU5URVJSVVBUU19TVEFUVVMJMHgwMDJDCisKKyNkZWZpbmUgS1M4ODRYX0lOVF9SWF9TVE9QUEVECQkweDAyMDAwMDAwCisjZGVmaW5lIEtTODg0WF9JTlRfVFhfU1RPUFBFRAkJMHgwNDAwMDAwMAorI2RlZmluZSBLUzg4NFhfSU5UX1JYX09WRVJSVU4JCTB4MDgwMDAwMDAKKyNkZWZpbmUgS1M4ODRYX0lOVF9UWF9FTVBUWQkJMHgxMDAwMDAwMAorI2RlZmluZSBLUzg4NFhfSU5UX1JYCQkJMHgyMDAwMDAwMAorI2RlZmluZSBLUzg4NFhfSU5UX1RYCQkJMHg0MDAwMDAwMAorI2RlZmluZSBLUzg4NFhfSU5UX1BIWQkJCTB4ODAwMDAwMDAKKworI2RlZmluZSBLUzg4NFhfSU5UX1JYX01BU0sJCVwKKwkoS1M4ODRYX0lOVF9SWCB8IEtTODg0WF9JTlRfUlhfT1ZFUlJVTikKKyNkZWZpbmUgS1M4ODRYX0lOVF9UWF9NQVNLCQlcCisJKEtTODg0WF9JTlRfVFggfCBLUzg4NFhfSU5UX1RYX0VNUFRZKQorI2RlZmluZSBLUzg4NFhfSU5UX01BU0sJKEtTODg0WF9JTlRfUlggfCBLUzg4NFhfSU5UX1RYIHwgS1M4ODRYX0lOVF9QSFkpCisKKy8qIE1BQyBBZGRpdGlvbmFsIFN0YXRpb24gQWRkcmVzcyAqLworCisvKiBNQUFMMCAqLworI2RlZmluZSBLU19BRERfQUREUl8wX0xPCQkweDAwODAKKy8qIE1BQUgwICovCisjZGVmaW5lIEtTX0FERF9BRERSXzBfSEkJCTB4MDA4NAorLyogTUFBTDEgKi8KKyNkZWZpbmUgS1NfQUREX0FERFJfMV9MTwkJMHgwMDg4CisvKiBNQUFIMSAqLworI2RlZmluZSBLU19BRERfQUREUl8xX0hJCQkweDAwOEMKKy8qIE1BQUwyICovCisjZGVmaW5lIEtTX0FERF9BRERSXzJfTE8JCTB4MDA5MAorLyogTUFBSDIgKi8KKyNkZWZpbmUgS1NfQUREX0FERFJfMl9ISQkJMHgwMDk0CisvKiBNQUFMMyAqLworI2RlZmluZSBLU19BRERfQUREUl8zX0xPCQkweDAwOTgKKy8qIE1BQUgzICovCisjZGVmaW5lIEtTX0FERF9BRERSXzNfSEkJCTB4MDA5QworLyogTUFBTDQgKi8KKyNkZWZpbmUgS1NfQUREX0FERFJfNF9MTwkJMHgwMEEwCisvKiBNQUFINCAqLworI2RlZmluZSBLU19BRERfQUREUl80X0hJCQkweDAwQTQKKy8qIE1BQUw1ICovCisjZGVmaW5lIEtTX0FERF9BRERSXzVfTE8JCTB4MDBBOAorLyogTUFBSDUgKi8KKyNkZWZpbmUgS1NfQUREX0FERFJfNV9ISQkJMHgwMEFDCisvKiBNQUFMNiAqLworI2RlZmluZSBLU19BRERfQUREUl82X0xPCQkweDAwQjAKKy8qIE1BQUg2ICovCisjZGVmaW5lIEtTX0FERF9BRERSXzZfSEkJCTB4MDBCNAorLyogTUFBTDcgKi8KKyNkZWZpbmUgS1NfQUREX0FERFJfN19MTwkJMHgwMEI4CisvKiBNQUFINyAqLworI2RlZmluZSBLU19BRERfQUREUl83X0hJCQkweDAwQkMKKy8qIE1BQUw4ICovCisjZGVmaW5lIEtTX0FERF9BRERSXzhfTE8JCTB4MDBDMAorLyogTUFBSDggKi8KKyNkZWZpbmUgS1NfQUREX0FERFJfOF9ISQkJMHgwMEM0CisvKiBNQUFMOSAqLworI2RlZmluZSBLU19BRERfQUREUl85X0xPCQkweDAwQzgKKy8qIE1BQUg5ICovCisjZGVmaW5lIEtTX0FERF9BRERSXzlfSEkJCTB4MDBDQworLyogTUFBTDEwICovCisjZGVmaW5lIEtTX0FERF9BRERSX0FfTE8JCTB4MDBEMAorLyogTUFBSDEwICovCisjZGVmaW5lIEtTX0FERF9BRERSX0FfSEkJCTB4MDBENAorLyogTUFBTDExICovCisjZGVmaW5lIEtTX0FERF9BRERSX0JfTE8JCTB4MDBEOAorLyogTUFBSDExICovCisjZGVmaW5lIEtTX0FERF9BRERSX0JfSEkJCTB4MDBEQworLyogTUFBTDEyICovCisjZGVmaW5lIEtTX0FERF9BRERSX0NfTE8JCTB4MDBFMAorLyogTUFBSDEyICovCisjZGVmaW5lIEtTX0FERF9BRERSX0NfSEkJCTB4MDBFNAorLyogTUFBTDEzICovCisjZGVmaW5lIEtTX0FERF9BRERSX0RfTE8JCTB4MDBFOAorLyogTUFBSDEzICovCisjZGVmaW5lIEtTX0FERF9BRERSX0RfSEkJCTB4MDBFQworLyogTUFBTDE0ICovCisjZGVmaW5lIEtTX0FERF9BRERSX0VfTE8JCTB4MDBGMAorLyogTUFBSDE0ICovCisjZGVmaW5lIEtTX0FERF9BRERSX0VfSEkJCTB4MDBGNAorLyogTUFBTDE1ICovCisjZGVmaW5lIEtTX0FERF9BRERSX0ZfTE8JCTB4MDBGOAorLyogTUFBSDE1ICovCisjZGVmaW5lIEtTX0FERF9BRERSX0ZfSEkJCTB4MDBGQworCisjZGVmaW5lIEFERF9BRERSX0hJX01BU0sJCTB4MDAwMEZGRkYKKyNkZWZpbmUgQUREX0FERFJfRU5BQkxFCQkJMHg4MDAwMDAwMAorI2RlZmluZSBBRERfQUREUl9JTkNSCQkJOAorCisvKiBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVycyAqLworCisvKiBNQVJMICovCisjZGVmaW5lIEtTODg0WF9BRERSXzBfT0ZGU0VUCQkweDAyMDAKKyNkZWZpbmUgS1M4ODRYX0FERFJfMV9PRkZTRVQJCTB4MDIwMQorLyogTUFSTSAqLworI2RlZmluZSBLUzg4NFhfQUREUl8yX09GRlNFVAkJMHgwMjAyCisjZGVmaW5lIEtTODg0WF9BRERSXzNfT0ZGU0VUCQkweDAyMDMKKy8qIE1BUkggKi8KKyNkZWZpbmUgS1M4ODRYX0FERFJfNF9PRkZTRVQJCTB4MDIwNAorI2RlZmluZSBLUzg4NFhfQUREUl81X09GRlNFVAkJMHgwMjA1CisKKy8qIE9CQ1IgKi8KKyNkZWZpbmUgS1M4ODRYX0JVU19DVFJMX09GRlNFVAkJMHgwMjEwCisKKyNkZWZpbmUgQlVTX1NQRUVEXzEyNV9NSFoJCTB4MDAwMAorI2RlZmluZSBCVVNfU1BFRURfNjJfNV9NSFoJCTB4MDAwMQorI2RlZmluZSBCVVNfU1BFRURfNDFfNjZfTUhaCQkweDAwMDIKKyNkZWZpbmUgQlVTX1NQRUVEXzI1X01IWgkJMHgwMDAzCisKKy8qIEVFUENSICovCisjZGVmaW5lIEtTODg0WF9FRVBST01fQ1RSTF9PRkZTRVQJMHgwMjEyCisKKyNkZWZpbmUgRUVQUk9NX0NISVBfU0VMRUNUCQkweDAwMDEKKyNkZWZpbmUgRUVQUk9NX1NFUklBTF9DTE9DSwkJMHgwMDAyCisjZGVmaW5lIEVFUFJPTV9EQVRBX09VVAkJCTB4MDAwNAorI2RlZmluZSBFRVBST01fREFUQV9JTgkJCTB4MDAwOAorI2RlZmluZSBFRVBST01fQUNDRVNTX0VOQUJMRQkJMHgwMDEwCisKKy8qIE1CSVIgKi8KKyNkZWZpbmUgS1M4ODRYX01FTV9JTkZPX09GRlNFVAkJMHgwMjE0CisKKyNkZWZpbmUgUlhfTUVNX1RFU1RfRkFJTEVECQkweDAwMDgKKyNkZWZpbmUgUlhfTUVNX1RFU1RfRklOSVNIRUQJCTB4MDAxMAorI2RlZmluZSBUWF9NRU1fVEVTVF9GQUlMRUQJCTB4MDgwMAorI2RlZmluZSBUWF9NRU1fVEVTVF9GSU5JU0hFRAkJMHgxMDAwCisKKy8qIEdDUiAqLworI2RlZmluZSBLUzg4NFhfR0xPQkFMX0NUUkxfT0ZGU0VUCTB4MDIxNgorI2RlZmluZSBHTE9CQUxfU09GVFdBUkVfUkVTRVQJCTB4MDAwMQorCisjZGVmaW5lIEtTODg0MV9QT1dFUl9NQU5BR0VfT0ZGU0VUCTB4MDIxOAorCisvKiBXRkNSICovCisjZGVmaW5lIEtTODg0MV9XT0xfQ1RSTF9PRkZTRVQJCTB4MDIxQQorI2RlZmluZSBLUzg4NDFfV09MX01BR0lDX0VOQUJMRQkJMHgwMDgwCisjZGVmaW5lIEtTODg0MV9XT0xfRlJBTUUzX0VOQUJMRQkweDAwMDgKKyNkZWZpbmUgS1M4ODQxX1dPTF9GUkFNRTJfRU5BQkxFCTB4MDAwNAorI2RlZmluZSBLUzg4NDFfV09MX0ZSQU1FMV9FTkFCTEUJMHgwMDAyCisjZGVmaW5lIEtTODg0MV9XT0xfRlJBTUUwX0VOQUJMRQkweDAwMDEKKworLyogV0YwICovCisjZGVmaW5lIEtTODg0MV9XT0xfRlJBTUVfQ1JDX09GRlNFVAkweDAyMjAKKyNkZWZpbmUgS1M4ODQxX1dPTF9GUkFNRV9CWVRFMF9PRkZTRVQJMHgwMjI0CisjZGVmaW5lIEtTODg0MV9XT0xfRlJBTUVfQllURTJfT0ZGU0VUCTB4MDIyOAorCisvKiBJQUNSICovCisjZGVmaW5lIEtTODg0WF9JQUNSX1AJCQkweDA0QTAKKyNkZWZpbmUgS1M4ODRYX0lBQ1JfT0ZGU0VUCQlLUzg4NFhfSUFDUl9QCisKKy8qIElBRFIxICovCisjZGVmaW5lIEtTODg0WF9JQURSMV9QCQkJMHgwNEEyCisjZGVmaW5lIEtTODg0WF9JQURSMl9QCQkJMHgwNEE0CisjZGVmaW5lIEtTODg0WF9JQURSM19QCQkJMHgwNEE2CisjZGVmaW5lIEtTODg0WF9JQURSNF9QCQkJMHgwNEE4CisjZGVmaW5lIEtTODg0WF9JQURSNV9QCQkJMHgwNEFBCisKKyNkZWZpbmUgS1M4ODRYX0FDQ19DVFJMX1NFTF9PRkZTRVQJS1M4ODRYX0lBQ1JfUAorI2RlZmluZSBLUzg4NFhfQUNDX0NUUkxfSU5ERVhfT0ZGU0VUCShLUzg4NFhfQUNDX0NUUkxfU0VMX09GRlNFVCArIDEpCisKKyNkZWZpbmUgS1M4ODRYX0FDQ19EQVRBXzBfT0ZGU0VUCUtTODg0WF9JQURSNF9QCisjZGVmaW5lIEtTODg0WF9BQ0NfREFUQV8xX09GRlNFVAkoS1M4ODRYX0FDQ19EQVRBXzBfT0ZGU0VUICsgMSkKKyNkZWZpbmUgS1M4ODRYX0FDQ19EQVRBXzJfT0ZGU0VUCUtTODg0WF9JQURSNV9QCisjZGVmaW5lIEtTODg0WF9BQ0NfREFUQV8zX09GRlNFVAkoS1M4ODRYX0FDQ19EQVRBXzJfT0ZGU0VUICsgMSkKKyNkZWZpbmUgS1M4ODRYX0FDQ19EQVRBXzRfT0ZGU0VUCUtTODg0WF9JQURSMl9QCisjZGVmaW5lIEtTODg0WF9BQ0NfREFUQV81X09GRlNFVAkoS1M4ODRYX0FDQ19EQVRBXzRfT0ZGU0VUICsgMSkKKyNkZWZpbmUgS1M4ODRYX0FDQ19EQVRBXzZfT0ZGU0VUCUtTODg0WF9JQURSM19QCisjZGVmaW5lIEtTODg0WF9BQ0NfREFUQV83X09GRlNFVAkoS1M4ODRYX0FDQ19EQVRBXzZfT0ZGU0VUICsgMSkKKyNkZWZpbmUgS1M4ODRYX0FDQ19EQVRBXzhfT0ZGU0VUCUtTODg0WF9JQURSMV9QCisKKy8qIFAxTUJDUiAqLworI2RlZmluZSBLUzg4NFhfUDFNQkNSX1AJCQkweDA0RDAKKyNkZWZpbmUgS1M4ODRYX1AxTUJTUl9QCQkJMHgwNEQyCisjZGVmaW5lIEtTODg0WF9QSFkxSUxSX1AJCTB4MDRENAorI2RlZmluZSBLUzg4NFhfUEhZMUlIUl9QCQkweDA0RDYKKyNkZWZpbmUgS1M4ODRYX1AxQU5BUl9QCQkJMHgwNEQ4CisjZGVmaW5lIEtTODg0WF9QMUFOTFBSX1AJCTB4MDREQQorCisvKiBQMk1CQ1IgKi8KKyNkZWZpbmUgS1M4ODRYX1AyTUJDUl9QCQkJMHgwNEUwCisjZGVmaW5lIEtTODg0WF9QMk1CU1JfUAkJCTB4MDRFMgorI2RlZmluZSBLUzg4NFhfUEhZMklMUl9QCQkweDA0RTQKKyNkZWZpbmUgS1M4ODRYX1BIWTJJSFJfUAkJMHgwNEU2CisjZGVmaW5lIEtTODg0WF9QMkFOQVJfUAkJCTB4MDRFOAorI2RlZmluZSBLUzg4NFhfUDJBTkxQUl9QCQkweDA0RUEKKworI2RlZmluZSBLUzg4NFhfUEhZXzFfQ1RSTF9PRkZTRVQJS1M4ODRYX1AxTUJDUl9QCisjZGVmaW5lIFBIWV9DVFJMX0lOVEVSVkFMCQkoS1M4ODRYX1AyTUJDUl9QIC0gS1M4ODRYX1AxTUJDUl9QKQorCisjZGVmaW5lIEtTODg0WF9QSFlfQ1RSTF9PRkZTRVQJCTB4MDAKKworLyogTW9kZSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFBIWV9SRUdfQ1RSTAkJCTAKKworI2RlZmluZSBQSFlfUkVTRVQJCQkweDgwMDAKKyNkZWZpbmUgUEhZX0xPT1BCQUNLCQkJMHg0MDAwCisjZGVmaW5lIFBIWV9TUEVFRF8xMDBNQklUCQkweDIwMDAKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX0VOQUJMRQkJMHgxMDAwCisjZGVmaW5lIFBIWV9QT1dFUl9ET1dOCQkJMHgwODAwCisjZGVmaW5lIFBIWV9NSUlfRElTQUJMRQkJCTB4MDQwMAorI2RlZmluZSBQSFlfQVVUT19ORUdfUkVTVEFSVAkJMHgwMjAwCisjZGVmaW5lIFBIWV9GVUxMX0RVUExFWAkJCTB4MDEwMAorI2RlZmluZSBQSFlfQ09MTElTSU9OX1RFU1QJCTB4MDA4MAorI2RlZmluZSBQSFlfSFBfTURJWAkJCTB4MDAyMAorI2RlZmluZSBQSFlfRk9SQ0VfTURJWAkJCTB4MDAxMAorI2RlZmluZSBQSFlfQVVUT19NRElYX0RJU0FCTEUJCTB4MDAwOAorI2RlZmluZSBQSFlfUkVNT1RFX0ZBVUxUX0RJU0FCTEUJMHgwMDA0CisjZGVmaW5lIFBIWV9UUkFOU01JVF9ESVNBQkxFCQkweDAwMDIKKyNkZWZpbmUgUEhZX0xFRF9ESVNBQkxFCQkJMHgwMDAxCisKKyNkZWZpbmUgS1M4ODRYX1BIWV9TVEFUVVNfT0ZGU0VUCTB4MDIKKworLyogTW9kZSBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUEhZX1JFR19TVEFUVVMJCQkxCisKKyNkZWZpbmUgUEhZXzEwMEJUNF9DQVBBQkxFCQkweDgwMDAKKyNkZWZpbmUgUEhZXzEwMEJUWF9GRF9DQVBBQkxFCQkweDQwMDAKKyNkZWZpbmUgUEhZXzEwMEJUWF9DQVBBQkxFCQkweDIwMDAKKyNkZWZpbmUgUEhZXzEwQlRfRkRfQ0FQQUJMRQkJMHgxMDAwCisjZGVmaW5lIFBIWV8xMEJUX0NBUEFCTEUJCTB4MDgwMAorI2RlZmluZSBQSFlfTUlJX1NVUFBSRVNTX0NBUEFCTEUJMHgwMDQwCisjZGVmaW5lIFBIWV9BVVRPX05FR19BQ0tOT1dMRURHRQkweDAwMjAKKyNkZWZpbmUgUEhZX1JFTU9URV9GQVVMVAkJMHgwMDEwCisjZGVmaW5lIFBIWV9BVVRPX05FR19DQVBBQkxFCQkweDAwMDgKKyNkZWZpbmUgUEhZX0xJTktfU1RBVFVTCQkJMHgwMDA0CisjZGVmaW5lIFBIWV9KQUJCRVJfREVURUNUCQkweDAwMDIKKyNkZWZpbmUgUEhZX0VYVEVOREVEX0NBUEFCSUxJVFkJCTB4MDAwMQorCisjZGVmaW5lIEtTODg0WF9QSFlfSURfMV9PRkZTRVQJCTB4MDQKKyNkZWZpbmUgS1M4ODRYX1BIWV9JRF8yX09GRlNFVAkJMHgwNgorCisvKiBQSFkgSWRlbnRpZmllciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUEhZX1JFR19JRF8xCQkJMgorI2RlZmluZSBQSFlfUkVHX0lEXzIJCQkzCisKKyNkZWZpbmUgS1M4ODRYX1BIWV9BVVRPX05FR19PRkZTRVQJMHgwOAorCisvKiBBdXRvLU5lZ290aWF0aW9uIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUEhZX1JFR19BVVRPX05FR09USUFUSU9OCTQKKworI2RlZmluZSBQSFlfQVVUT19ORUdfTkVYVF9QQUdFCQkweDgwMDAKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX1JFTU9URV9GQVVMVAkweDIwMDAKKy8qIE5vdCBzdXBwb3J0ZWQuICovCisjZGVmaW5lIFBIWV9BVVRPX05FR19BU1lNX1BBVVNFCQkweDA4MDAKKyNkZWZpbmUgUEhZX0FVVE9fTkVHX1NZTV9QQVVTRQkJMHgwNDAwCisjZGVmaW5lIFBIWV9BVVRPX05FR18xMDBCVDQJCTB4MDIwMAorI2RlZmluZSBQSFlfQVVUT19ORUdfMTAwQlRYX0ZECQkweDAxMDAKKyNkZWZpbmUgUEhZX0FVVE9fTkVHXzEwMEJUWAkJMHgwMDgwCisjZGVmaW5lIFBIWV9BVVRPX05FR18xMEJUX0ZECQkweDAwNDAKKyNkZWZpbmUgUEhZX0FVVE9fTkVHXzEwQlQJCTB4MDAyMAorI2RlZmluZSBQSFlfQVVUT19ORUdfU0VMRUNUT1IJCTB4MDAxRgorI2RlZmluZSBQSFlfQVVUT19ORUdfODAyXzMJCTB4MDAwMQorCisjZGVmaW5lIFBIWV9BVVRPX05FR19QQVVTRSAgKFBIWV9BVVRPX05FR19TWU1fUEFVU0UgfCBQSFlfQVVUT19ORUdfQVNZTV9QQVVTRSkKKworI2RlZmluZSBLUzg4NFhfUEhZX1JFTU9URV9DQVBfT0ZGU0VUCTB4MEEKKworLyogQXV0by1OZWdvdGlhdGlvbiBMaW5rIFBhcnRuZXIgQWJpbGl0eSBSZWdpc3RlciAqLworI2RlZmluZSBQSFlfUkVHX1JFTU9URV9DQVBBQklMSVRZCTUKKworI2RlZmluZSBQSFlfUkVNT1RFX05FWFRfUEFHRQkJMHg4MDAwCisjZGVmaW5lIFBIWV9SRU1PVEVfQUNLTk9XTEVER0UJCTB4NDAwMAorI2RlZmluZSBQSFlfUkVNT1RFX1JFTU9URV9GQVVMVAkJMHgyMDAwCisjZGVmaW5lIFBIWV9SRU1PVEVfU1lNX1BBVVNFCQkweDA0MDAKKyNkZWZpbmUgUEhZX1JFTU9URV8xMDBCVFhfRkQJCTB4MDEwMAorI2RlZmluZSBQSFlfUkVNT1RFXzEwMEJUWAkJMHgwMDgwCisjZGVmaW5lIFBIWV9SRU1PVEVfMTBCVF9GRAkJMHgwMDQwCisjZGVmaW5lIFBIWV9SRU1PVEVfMTBCVAkJCTB4MDAyMAorCisvKiBQMVZDVCAqLworI2RlZmluZSBLUzg4NFhfUDFWQ1RfUAkJCTB4MDRGMAorI2RlZmluZSBLUzg4NFhfUDFQSFlDVFJMX1AJCTB4MDRGMgorCisvKiBQMlZDVCAqLworI2RlZmluZSBLUzg4NFhfUDJWQ1RfUAkJCTB4MDRGNAorI2RlZmluZSBLUzg4NFhfUDJQSFlDVFJMX1AJCTB4MDRGNgorCisjZGVmaW5lIEtTODg0WF9QSFlfU1BFQ0lBTF9PRkZTRVQJS1M4ODRYX1AxVkNUX1AKKyNkZWZpbmUgUEhZX1NQRUNJQUxfSU5URVJWQUwJCShLUzg4NFhfUDJWQ1RfUCAtIEtTODg0WF9QMVZDVF9QKQorCisjZGVmaW5lIEtTODg0WF9QSFlfTElOS19NRF9PRkZTRVQJMHgwMAorCisjZGVmaW5lIFBIWV9TVEFSVF9DQUJMRV9ESUFHCQkweDgwMDAKKyNkZWZpbmUgUEhZX0NBQkxFX0RJQUdfUkVTVUxUCQkweDYwMDAKKyNkZWZpbmUgUEhZX0NBQkxFX1NUQVRfTk9STUFMCQkweDAwMDAKKyNkZWZpbmUgUEhZX0NBQkxFX1NUQVRfT1BFTgkJMHgyMDAwCisjZGVmaW5lIFBIWV9DQUJMRV9TVEFUX1NIT1JUCQkweDQwMDAKKyNkZWZpbmUgUEhZX0NBQkxFX1NUQVRfRkFJTEVECQkweDYwMDAKKyNkZWZpbmUgUEhZX0NBQkxFXzEwTV9TSE9SVAkJMHgxMDAwCisjZGVmaW5lIFBIWV9DQUJMRV9GQVVMVF9DT1VOVEVSCQkweDAxRkYKKworI2RlZmluZSBLUzg4NFhfUEhZX1BIWV9DVFJMX09GRlNFVAkweDAyCisKKyNkZWZpbmUgUEhZX1NUQVRfUkVWRVJTRURfUE9MQVJJVFkJMHgwMDIwCisjZGVmaW5lIFBIWV9TVEFUX01ESVgJCQkweDAwMTAKKyNkZWZpbmUgUEhZX0ZPUkNFX0xJTksJCQkweDAwMDgKKyNkZWZpbmUgUEhZX1BPV0VSX1NBVklOR19ESVNBQkxFCTB4MDAwNAorI2RlZmluZSBQSFlfUkVNT1RFX0xPT1BCQUNLCQkweDAwMDIKKworLyogU0lERVIgKi8KKyNkZWZpbmUgS1M4ODRYX1NJREVSX1AJCQkweDA0MDAKKyNkZWZpbmUgS1M4ODRYX0NISVBfSURfT0ZGU0VUCQlLUzg4NFhfU0lERVJfUAorI2RlZmluZSBLUzg4NFhfRkFNSUxZX0lEX09GRlNFVAkJKEtTODg0WF9DSElQX0lEX09GRlNFVCArIDEpCisKKyNkZWZpbmUgUkVHX0ZBTUlMWV9JRAkJCTB4ODgKKworI2RlZmluZSBSRUdfQ0hJUF9JRF80MQkJCTB4ODgxMAorI2RlZmluZSBSRUdfQ0hJUF9JRF80MgkJCTB4ODgwMAorCisjZGVmaW5lIEtTODg0WF9DSElQX0lEX01BU0tfNDEJCTB4RkYxMAorI2RlZmluZSBLUzg4NFhfQ0hJUF9JRF9NQVNLCQkweEZGRjAKKyNkZWZpbmUgS1M4ODRYX0NISVBfSURfU0hJRlQJCTQKKyNkZWZpbmUgS1M4ODRYX1JFVklTSU9OX01BU0sJCTB4MDAwRQorI2RlZmluZSBLUzg4NFhfUkVWSVNJT05fU0hJRlQJCTEKKyNkZWZpbmUgS1M4ODQyX1NUQVJUCQkJMHgwMDAxCisKKyNkZWZpbmUgQ0hJUF9JUF80MV9NCQkJMHg4ODEwCisjZGVmaW5lIENISVBfSVBfNDJfTQkJCTB4ODgwMAorI2RlZmluZSBDSElQX0lQXzYxX00JCQkweDg4OTAKKyNkZWZpbmUgQ0hJUF9JUF82Ml9NCQkJMHg4ODgwCisKKyNkZWZpbmUgQ0hJUF9JUF80MV9QCQkJMHg4ODUwCisjZGVmaW5lIENISVBfSVBfNDJfUAkJCTB4ODg0MAorI2RlZmluZSBDSElQX0lQXzYxX1AJCQkweDg4RDAKKyNkZWZpbmUgQ0hJUF9JUF82Ml9QCQkJMHg4OEMwCisKKy8qIFNHQ1IxICovCisjZGVmaW5lIEtTODg0Ml9TR0NSMV9QCQkJMHgwNDAyCisjZGVmaW5lIEtTODg0Ml9TV0lUQ0hfQ1RSTF8xX09GRlNFVAlLUzg4NDJfU0dDUjFfUAorCisjZGVmaW5lIFNXSVRDSF9QQVNTX0FMTAkJCTB4ODAwMAorI2RlZmluZSBTV0lUQ0hfVFhfRkxPV19DVFJMCQkweDIwMDAKKyNkZWZpbmUgU1dJVENIX1JYX0ZMT1dfQ1RSTAkJMHgxMDAwCisjZGVmaW5lIFNXSVRDSF9DSEVDS19MRU5HVEgJCTB4MDgwMAorI2RlZmluZSBTV0lUQ0hfQUdJTkdfRU5BQkxFCQkweDA0MDAKKyNkZWZpbmUgU1dJVENIX0ZBU1RfQUdJTkcJCTB4MDIwMAorI2RlZmluZSBTV0lUQ0hfQUdHUl9CQUNLT0ZGCQkweDAxMDAKKyNkZWZpbmUgU1dJVENIX1BBU1NfUEFVU0UJCTB4MDAwOAorI2RlZmluZSBTV0lUQ0hfTElOS19BVVRPX0FHSU5HCQkweDAwMDEKKworLyogU0dDUjIgKi8KKyNkZWZpbmUgS1M4ODQyX1NHQ1IyX1AJCQkweDA0MDQKKyNkZWZpbmUgS1M4ODQyX1NXSVRDSF9DVFJMXzJfT0ZGU0VUCUtTODg0Ml9TR0NSMl9QCisKKyNkZWZpbmUgU1dJVENIX1ZMQU5fRU5BQkxFCQkweDgwMDAKKyNkZWZpbmUgU1dJVENIX0lHTVBfU05PT1AJCTB4NDAwMAorI2RlZmluZSBJUFY2X01MRF9TTk9PUF9FTkFCTEUJCTB4MjAwMAorI2RlZmluZSBJUFY2X01MRF9TTk9PUF9PUFRJT04JCTB4MTAwMAorI2RlZmluZSBQUklPUklUWV9TQ0hFTUVfU0VMRUNUCQkweDA4MDAKKyNkZWZpbmUgU1dJVENIX01JUlJPUl9SWF9UWAkJMHgwMTAwCisjZGVmaW5lIFVOSUNBU1RfVkxBTl9CT1VOREFSWQkJMHgwMDgwCisjZGVmaW5lIE1VTFRJQ0FTVF9TVE9STV9ESVNBQkxFCQkweDAwNDAKKyNkZWZpbmUgU1dJVENIX0JBQ0tfUFJFU1NVUkUJCTB4MDAyMAorI2RlZmluZSBGQUlSX0ZMT1dfQ1RSTAkJCTB4MDAxMAorI2RlZmluZSBOT19FWENfQ09MTElTSU9OX0RST1AJCTB4MDAwOAorI2RlZmluZSBTV0lUQ0hfSFVHRV9QQUNLRVQJCTB4MDAwNAorI2RlZmluZSBTV0lUQ0hfTEVHQUxfUEFDS0VUCQkweDAwMDIKKyNkZWZpbmUgU1dJVENIX0JVRl9SRVNFUlZFCQkweDAwMDEKKworLyogU0dDUjMgKi8KKyNkZWZpbmUgS1M4ODQyX1NHQ1IzX1AJCQkweDA0MDYKKyNkZWZpbmUgS1M4ODQyX1NXSVRDSF9DVFJMXzNfT0ZGU0VUCUtTODg0Ml9TR0NSM19QCisKKyNkZWZpbmUgQlJPQURDQVNUX1NUT1JNX1JBVEVfTE8JCTB4RkYwMAorI2RlZmluZSBTV0lUQ0hfUkVQRUFURVIJCQkweDAwODAKKyNkZWZpbmUgU1dJVENIX0hBTEZfRFVQTEVYCQkweDAwNDAKKyNkZWZpbmUgU1dJVENIX0ZMT1dfQ1RSTAkJMHgwMDIwCisjZGVmaW5lIFNXSVRDSF8xMF9NQklUCQkJMHgwMDEwCisjZGVmaW5lIFNXSVRDSF9SRVBMQUNFX05VTExfVklECQkweDAwMDgKKyNkZWZpbmUgQlJPQURDQVNUX1NUT1JNX1JBVEVfSEkJCTB4MDAwNworCisjZGVmaW5lIEJST0FEQ0FTVF9TVE9STV9SQVRFCQkweDA3RkYKKworLyogU0dDUjQgKi8KKyNkZWZpbmUgS1M4ODQyX1NHQ1I0X1AJCQkweDA0MDgKKworLyogU0dDUjUgKi8KKyNkZWZpbmUgS1M4ODQyX1NHQ1I1X1AJCQkweDA0MEEKKyNkZWZpbmUgS1M4ODQyX1NXSVRDSF9DVFJMXzVfT0ZGU0VUCUtTODg0Ml9TR0NSNV9QCisKKyNkZWZpbmUgTEVEX01PREUJCQkweDgyMDAKKyNkZWZpbmUgTEVEX1NQRUVEX0RVUExFWF9BQ1QJCTB4MDAwMAorI2RlZmluZSBMRURfU1BFRURfRFVQTEVYX0xJTktfQUNUCTB4ODAwMAorI2RlZmluZSBMRURfRFVQTEVYXzEwXzEwMAkJMHgwMjAwCisKKy8qIFNHQ1I2ICovCisjZGVmaW5lIEtTODg0Ml9TR0NSNl9QCQkJMHgwNDEwCisjZGVmaW5lIEtTODg0Ml9TV0lUQ0hfQ1RSTF82X09GRlNFVAlLUzg4NDJfU0dDUjZfUAorCisjZGVmaW5lIEtTODg0Ml9QUklPUklUWV9NQVNLCQkzCisjZGVmaW5lIEtTODg0Ml9QUklPUklUWV9TSElGVAkJMgorCisvKiBTR0NSNyAqLworI2RlZmluZSBLUzg4NDJfU0dDUjdfUAkJCTB4MDQxMgorI2RlZmluZSBLUzg4NDJfU1dJVENIX0NUUkxfN19PRkZTRVQJS1M4ODQyX1NHQ1I3X1AKKworI2RlZmluZSBTV0lUQ0hfVU5LX0RFRl9QT1JUX0VOQUJMRQkweDAwMDgKKyNkZWZpbmUgU1dJVENIX1VOS19ERUZfUE9SVF8zCQkweDAwMDQKKyNkZWZpbmUgU1dJVENIX1VOS19ERUZfUE9SVF8yCQkweDAwMDIKKyNkZWZpbmUgU1dJVENIX1VOS19ERUZfUE9SVF8xCQkweDAwMDEKKworLyogTUFDQVIxICovCisjZGVmaW5lIEtTODg0Ml9NQUNBUjFfUAkJCTB4MDQ3MAorI2RlZmluZSBLUzg4NDJfTUFDQVIyX1AJCQkweDA0NzIKKyNkZWZpbmUgS1M4ODQyX01BQ0FSM19QCQkJMHgwNDc0CisjZGVmaW5lIEtTODg0Ml9NQUNfQUREUl8xX09GRlNFVAlLUzg4NDJfTUFDQVIxX1AKKyNkZWZpbmUgS1M4ODQyX01BQ19BRERSXzBfT0ZGU0VUCShLUzg4NDJfTUFDX0FERFJfMV9PRkZTRVQgKyAxKQorI2RlZmluZSBLUzg4NDJfTUFDX0FERFJfM19PRkZTRVQJS1M4ODQyX01BQ0FSMl9QCisjZGVmaW5lIEtTODg0Ml9NQUNfQUREUl8yX09GRlNFVAkoS1M4ODQyX01BQ19BRERSXzNfT0ZGU0VUICsgMSkKKyNkZWZpbmUgS1M4ODQyX01BQ19BRERSXzVfT0ZGU0VUCUtTODg0Ml9NQUNBUjNfUAorI2RlZmluZSBLUzg4NDJfTUFDX0FERFJfNF9PRkZTRVQJKEtTODg0Ml9NQUNfQUREUl81X09GRlNFVCArIDEpCisKKy8qIFRPU1IxICovCisjZGVmaW5lIEtTODg0Ml9UT1NSMV9QCQkJMHgwNDgwCisjZGVmaW5lIEtTODg0Ml9UT1NSMl9QCQkJMHgwNDgyCisjZGVmaW5lIEtTODg0Ml9UT1NSM19QCQkJMHgwNDg0CisjZGVmaW5lIEtTODg0Ml9UT1NSNF9QCQkJMHgwNDg2CisjZGVmaW5lIEtTODg0Ml9UT1NSNV9QCQkJMHgwNDg4CisjZGVmaW5lIEtTODg0Ml9UT1NSNl9QCQkJMHgwNDhBCisjZGVmaW5lIEtTODg0Ml9UT1NSN19QCQkJMHgwNDkwCisjZGVmaW5lIEtTODg0Ml9UT1NSOF9QCQkJMHgwNDkyCisjZGVmaW5lIEtTODg0Ml9UT1NfMV9PRkZTRVQJCUtTODg0Ml9UT1NSMV9QCisjZGVmaW5lIEtTODg0Ml9UT1NfMl9PRkZTRVQJCUtTODg0Ml9UT1NSMl9QCisjZGVmaW5lIEtTODg0Ml9UT1NfM19PRkZTRVQJCUtTODg0Ml9UT1NSM19QCisjZGVmaW5lIEtTODg0Ml9UT1NfNF9PRkZTRVQJCUtTODg0Ml9UT1NSNF9QCisjZGVmaW5lIEtTODg0Ml9UT1NfNV9PRkZTRVQJCUtTODg0Ml9UT1NSNV9QCisjZGVmaW5lIEtTODg0Ml9UT1NfNl9PRkZTRVQJCUtTODg0Ml9UT1NSNl9QCisKKyNkZWZpbmUgS1M4ODQyX1RPU183X09GRlNFVAkJS1M4ODQyX1RPU1I3X1AKKyNkZWZpbmUgS1M4ODQyX1RPU184X09GRlNFVAkJS1M4ODQyX1RPU1I4X1AKKworLyogUDFDUjEgKi8KKyNkZWZpbmUgS1M4ODQyX1AxQ1IxX1AJCQkweDA1MDAKKyNkZWZpbmUgS1M4ODQyX1AxQ1IyX1AJCQkweDA1MDIKKyNkZWZpbmUgS1M4ODQyX1AxVklEUl9QCQkJMHgwNTA0CisjZGVmaW5lIEtTODg0Ml9QMUNSM19QCQkJMHgwNTA2CisjZGVmaW5lIEtTODg0Ml9QMUlSQ1JfUAkJCTB4MDUwOAorI2RlZmluZSBLUzg4NDJfUDFFUkNSX1AJCQkweDA1MEEKKyNkZWZpbmUgS1M4ODRYX1AxU0NTTE1EX1AJCTB4MDUxMAorI2RlZmluZSBLUzg4NFhfUDFDUjRfUAkJCTB4MDUxMgorI2RlZmluZSBLUzg4NFhfUDFTUl9QCQkJMHgwNTE0CisKKy8qIFAyQ1IxICovCisjZGVmaW5lIEtTODg0Ml9QMkNSMV9QCQkJMHgwNTIwCisjZGVmaW5lIEtTODg0Ml9QMkNSMl9QCQkJMHgwNTIyCisjZGVmaW5lIEtTODg0Ml9QMlZJRFJfUAkJCTB4MDUyNAorI2RlZmluZSBLUzg4NDJfUDJDUjNfUAkJCTB4MDUyNgorI2RlZmluZSBLUzg4NDJfUDJJUkNSX1AJCQkweDA1MjgKKyNkZWZpbmUgS1M4ODQyX1AyRVJDUl9QCQkJMHgwNTJBCisjZGVmaW5lIEtTODg0WF9QMlNDU0xNRF9QCQkweDA1MzAKKyNkZWZpbmUgS1M4ODRYX1AyQ1I0X1AJCQkweDA1MzIKKyNkZWZpbmUgS1M4ODRYX1AyU1JfUAkJCTB4MDUzNAorCisvKiBQM0NSMSAqLworI2RlZmluZSBLUzg4NDJfUDNDUjFfUAkJCTB4MDU0MAorI2RlZmluZSBLUzg4NDJfUDNDUjJfUAkJCTB4MDU0MgorI2RlZmluZSBLUzg4NDJfUDNWSURSX1AJCQkweDA1NDQKKyNkZWZpbmUgS1M4ODQyX1AzQ1IzX1AJCQkweDA1NDYKKyNkZWZpbmUgS1M4ODQyX1AzSVJDUl9QCQkJMHgwNTQ4CisjZGVmaW5lIEtTODg0Ml9QM0VSQ1JfUAkJCTB4MDU0QQorCisjZGVmaW5lIEtTODg0Ml9QT1JUXzFfQ1RSTF8xCQlLUzg4NDJfUDFDUjFfUAorI2RlZmluZSBLUzg4NDJfUE9SVF8yX0NUUkxfMQkJS1M4ODQyX1AyQ1IxX1AKKyNkZWZpbmUgS1M4ODQyX1BPUlRfM19DVFJMXzEJCUtTODg0Ml9QM0NSMV9QCisKKyNkZWZpbmUgUE9SVF9DVFJMX0FERFIocG9ydCwgYWRkcikJCVwKKwkoYWRkciA9IEtTODg0Ml9QT1JUXzFfQ1RSTF8xICsgKHBvcnQpICoJXAorCQkoS1M4ODQyX1BPUlRfMl9DVFJMXzEgLSBLUzg4NDJfUE9SVF8xX0NUUkxfMSkpCisKKyNkZWZpbmUgS1M4ODQyX1BPUlRfQ1RSTF8xX09GRlNFVAkweDAwCisKKyNkZWZpbmUgUE9SVF9CUk9BRENBU1RfU1RPUk0JCTB4MDA4MAorI2RlZmluZSBQT1JUX0RJRkZTRVJWX0VOQUJMRQkJMHgwMDQwCisjZGVmaW5lIFBPUlRfODAyXzFQX0VOQUJMRQkJMHgwMDIwCisjZGVmaW5lIFBPUlRfQkFTRURfUFJJT1JJVFlfTUFTSwkweDAwMTgKKyNkZWZpbmUgUE9SVF9CQVNFRF9QUklPUklUWV9CQVNFCTB4MDAwMworI2RlZmluZSBQT1JUX0JBU0VEX1BSSU9SSVRZX1NISUZUCTMKKyNkZWZpbmUgUE9SVF9CQVNFRF9QUklPUklUWV8wCQkweDAwMDAKKyNkZWZpbmUgUE9SVF9CQVNFRF9QUklPUklUWV8xCQkweDAwMDgKKyNkZWZpbmUgUE9SVF9CQVNFRF9QUklPUklUWV8yCQkweDAwMTAKKyNkZWZpbmUgUE9SVF9CQVNFRF9QUklPUklUWV8zCQkweDAwMTgKKyNkZWZpbmUgUE9SVF9JTlNFUlRfVEFHCQkJMHgwMDA0CisjZGVmaW5lIFBPUlRfUkVNT1ZFX1RBRwkJCTB4MDAwMgorI2RlZmluZSBQT1JUX1BSSU9fUVVFVUVfRU5BQkxFCQkweDAwMDEKKworI2RlZmluZSBLUzg4NDJfUE9SVF9DVFJMXzJfT0ZGU0VUCTB4MDIKKworI2RlZmluZSBQT1JUX0lOR1JFU1NfVkxBTl9GSUxURVIJMHg0MDAwCisjZGVmaW5lIFBPUlRfRElTQ0FSRF9OT05fVklECQkweDIwMDAKKyNkZWZpbmUgUE9SVF9GT1JDRV9GTE9XX0NUUkwJCTB4MTAwMAorI2RlZmluZSBQT1JUX0JBQ0tfUFJFU1NVUkUJCTB4MDgwMAorI2RlZmluZSBQT1JUX1RYX0VOQUJMRQkJCTB4MDQwMAorI2RlZmluZSBQT1JUX1JYX0VOQUJMRQkJCTB4MDIwMAorI2RlZmluZSBQT1JUX0xFQVJOX0RJU0FCTEUJCTB4MDEwMAorI2RlZmluZSBQT1JUX01JUlJPUl9TTklGRkVSCQkweDAwODAKKyNkZWZpbmUgUE9SVF9NSVJST1JfUlgJCQkweDAwNDAKKyNkZWZpbmUgUE9SVF9NSVJST1JfVFgJCQkweDAwMjAKKyNkZWZpbmUgUE9SVF9VU0VSX1BSSU9SSVRZX0NFSUxJTkcJMHgwMDA4CisjZGVmaW5lIFBPUlRfVkxBTl9NRU1CRVJTSElQCQkweDAwMDcKKworI2RlZmluZSBLUzg4NDJfUE9SVF9DVFJMX1ZJRF9PRkZTRVQJMHgwNAorCisjZGVmaW5lIFBPUlRfREVGQVVMVF9WSUQJCTB4MDAwMQorCisjZGVmaW5lIEtTODg0Ml9QT1JUX0NUUkxfM19PRkZTRVQJMHgwNgorCisjZGVmaW5lIFBPUlRfSU5HUkVTU19MSU1JVF9NT0RFCQkweDAwMEMKKyNkZWZpbmUgUE9SVF9JTkdSRVNTX0FMTAkJMHgwMDAwCisjZGVmaW5lIFBPUlRfSU5HUkVTU19VTklDQVNUCQkweDAwMDQKKyNkZWZpbmUgUE9SVF9JTkdSRVNTX01VTFRJQ0FTVAkJMHgwMDA4CisjZGVmaW5lIFBPUlRfSU5HUkVTU19CUk9BRENBU1QJCTB4MDAwQworI2RlZmluZSBQT1JUX0NPVU5UX0lGRwkJCTB4MDAwMgorI2RlZmluZSBQT1JUX0NPVU5UX1BSRUFNQkxFCQkweDAwMDEKKworI2RlZmluZSBLUzg4NDJfUE9SVF9JTl9SQVRFX09GRlNFVAkweDA4CisjZGVmaW5lIEtTODg0Ml9QT1JUX09VVF9SQVRFX09GRlNFVAkweDBBCisKKyNkZWZpbmUgUE9SVF9QUklPUklUWV9SQVRFCQkweDBGCisjZGVmaW5lIFBPUlRfUFJJT1JJVFlfUkFURV9TSElGVAk0CisKKyNkZWZpbmUgS1M4ODRYX1BPUlRfTElOS19NRAkJMHgxMAorCisjZGVmaW5lIFBPUlRfQ0FCTEVfMTBNX1NIT1JUCQkweDgwMDAKKyNkZWZpbmUgUE9SVF9DQUJMRV9ESUFHX1JFU1VMVAkJMHg2MDAwCisjZGVmaW5lIFBPUlRfQ0FCTEVfU1RBVF9OT1JNQUwJCTB4MDAwMAorI2RlZmluZSBQT1JUX0NBQkxFX1NUQVRfT1BFTgkJMHgyMDAwCisjZGVmaW5lIFBPUlRfQ0FCTEVfU1RBVF9TSE9SVAkJMHg0MDAwCisjZGVmaW5lIFBPUlRfQ0FCTEVfU1RBVF9GQUlMRUQJCTB4NjAwMAorI2RlZmluZSBQT1JUX1NUQVJUX0NBQkxFX0RJQUcJCTB4MTAwMAorI2RlZmluZSBQT1JUX0ZPUkNFX0xJTksJCQkweDA4MDAKKyNkZWZpbmUgUE9SVF9QT1dFUl9TQVZJTkdfRElTQUJMRQkweDA0MDAKKyNkZWZpbmUgUE9SVF9QSFlfUkVNT1RFX0xPT1BCQUNLCTB4MDIwMAorI2RlZmluZSBQT1JUX0NBQkxFX0ZBVUxUX0NPVU5URVIJMHgwMUZGCisKKyNkZWZpbmUgS1M4ODRYX1BPUlRfQ1RSTF80X09GRlNFVAkweDEyCisKKyNkZWZpbmUgUE9SVF9MRURfT0ZGCQkJMHg4MDAwCisjZGVmaW5lIFBPUlRfVFhfRElTQUJMRQkJCTB4NDAwMAorI2RlZmluZSBQT1JUX0FVVE9fTkVHX1JFU1RBUlQJCTB4MjAwMAorI2RlZmluZSBQT1JUX1JFTU9URV9GQVVMVF9ESVNBQkxFCTB4MTAwMAorI2RlZmluZSBQT1JUX1BPV0VSX0RPV04JCQkweDA4MDAKKyNkZWZpbmUgUE9SVF9BVVRPX01ESVhfRElTQUJMRQkJMHgwNDAwCisjZGVmaW5lIFBPUlRfRk9SQ0VfTURJWAkJCTB4MDIwMAorI2RlZmluZSBQT1JUX0xPT1BCQUNLCQkJMHgwMTAwCisjZGVmaW5lIFBPUlRfQVVUT19ORUdfRU5BQkxFCQkweDAwODAKKyNkZWZpbmUgUE9SVF9GT1JDRV8xMDBfTUJJVAkJMHgwMDQwCisjZGVmaW5lIFBPUlRfRk9SQ0VfRlVMTF9EVVBMRVgJCTB4MDAyMAorI2RlZmluZSBQT1JUX0FVVE9fTkVHX1NZTV9QQVVTRQkJMHgwMDEwCisjZGVmaW5lIFBPUlRfQVVUT19ORUdfMTAwQlRYX0ZECQkweDAwMDgKKyNkZWZpbmUgUE9SVF9BVVRPX05FR18xMDBCVFgJCTB4MDAwNAorI2RlZmluZSBQT1JUX0FVVE9fTkVHXzEwQlRfRkQJCTB4MDAwMgorI2RlZmluZSBQT1JUX0FVVE9fTkVHXzEwQlQJCTB4MDAwMQorCisjZGVmaW5lIEtTODg0WF9QT1JUX1NUQVRVU19PRkZTRVQJMHgxNAorCisjZGVmaW5lIFBPUlRfSFBfTURJWAkJCTB4ODAwMAorI2RlZmluZSBQT1JUX1JFVkVSU0VEX1BPTEFSSVRZCQkweDIwMDAKKyNkZWZpbmUgUE9SVF9SWF9GTE9XX0NUUkwJCTB4MDgwMAorI2RlZmluZSBQT1JUX1RYX0ZMT1dfQ1RSTAkJMHgxMDAwCisjZGVmaW5lIFBPUlRfU1RBVFVTX1NQRUVEXzEwME1CSVQJMHgwNDAwCisjZGVmaW5lIFBPUlRfU1RBVFVTX0ZVTExfRFVQTEVYCQkweDAyMDAKKyNkZWZpbmUgUE9SVF9SRU1PVEVfRkFVTFQJCTB4MDEwMAorI2RlZmluZSBQT1JUX01ESVhfU1RBVFVTCQkweDAwODAKKyNkZWZpbmUgUE9SVF9BVVRPX05FR19DT01QTEVURQkJMHgwMDQwCisjZGVmaW5lIFBPUlRfU1RBVFVTX0xJTktfR09PRAkJMHgwMDIwCisjZGVmaW5lIFBPUlRfUkVNT1RFX1NZTV9QQVVTRQkJMHgwMDEwCisjZGVmaW5lIFBPUlRfUkVNT1RFXzEwMEJUWF9GRAkJMHgwMDA4CisjZGVmaW5lIFBPUlRfUkVNT1RFXzEwMEJUWAkJMHgwMDA0CisjZGVmaW5lIFBPUlRfUkVNT1RFXzEwQlRfRkQJCTB4MDAwMgorI2RlZmluZSBQT1JUX1JFTU9URV8xMEJUCQkweDAwMDEKKworLyoKKyNkZWZpbmUgU1RBVElDX01BQ19UQUJMRV9BRERSCQkwMC0wMDAwRkZGRi1GRkZGRkZGRgorI2RlZmluZSBTVEFUSUNfTUFDX1RBQkxFX0ZXRF9QT1JUUwkwMC0wMDA3MDAwMC0wMDAwMDAwMAorI2RlZmluZSBTVEFUSUNfTUFDX1RBQkxFX1ZBTElECQkwMC0wMDA4MDAwMC0wMDAwMDAwMAorI2RlZmluZSBTVEFUSUNfTUFDX1RBQkxFX09WRVJSSURFCTAwLTAwMTAwMDAwLTAwMDAwMDAwCisjZGVmaW5lIFNUQVRJQ19NQUNfVEFCTEVfVVNFX0ZJRAkwMC0wMDIwMDAwMC0wMDAwMDAwMAorI2RlZmluZSBTVEFUSUNfTUFDX1RBQkxFX0ZJRAkJMDAtMDNDMDAwMDAtMDAwMDAwMDAKKyovCisKKyNkZWZpbmUgU1RBVElDX01BQ19UQUJMRV9BRERSCQkweDAwMDBGRkZGCisjZGVmaW5lIFNUQVRJQ19NQUNfVEFCTEVfRldEX1BPUlRTCTB4MDAwNzAwMDAKKyNkZWZpbmUgU1RBVElDX01BQ19UQUJMRV9WQUxJRAkJMHgwMDA4MDAwMAorI2RlZmluZSBTVEFUSUNfTUFDX1RBQkxFX09WRVJSSURFCTB4MDAxMDAwMDAKKyNkZWZpbmUgU1RBVElDX01BQ19UQUJMRV9VU0VfRklECTB4MDAyMDAwMDAKKyNkZWZpbmUgU1RBVElDX01BQ19UQUJMRV9GSUQJCTB4MDNDMDAwMDAKKworI2RlZmluZSBTVEFUSUNfTUFDX0ZXRF9QT1JUU19TSElGVAkxNgorI2RlZmluZSBTVEFUSUNfTUFDX0ZJRF9TSElGVAkJMjIKKworLyoKKyNkZWZpbmUgVkxBTl9UQUJMRV9WSUQJCQkwMC0wMDAwMDAwMC0wMDAwMEZGRgorI2RlZmluZSBWTEFOX1RBQkxFX0ZJRAkJCTAwLTAwMDAwMDAwLTAwMDBGMDAwCisjZGVmaW5lIFZMQU5fVEFCTEVfTUVNQkVSU0hJUAkJMDAtMDAwMDAwMDAtMDAwNzAwMDAKKyNkZWZpbmUgVkxBTl9UQUJMRV9WQUxJRAkJMDAtMDAwMDAwMDAtMDAwODAwMDAKKyovCisKKyNkZWZpbmUgVkxBTl9UQUJMRV9WSUQJCQkweDAwMDAwRkZGCisjZGVmaW5lIFZMQU5fVEFCTEVfRklECQkJMHgwMDAwRjAwMAorI2RlZmluZSBWTEFOX1RBQkxFX01FTUJFUlNISVAJCTB4MDAwNzAwMDAKKyNkZWZpbmUgVkxBTl9UQUJMRV9WQUxJRAkJMHgwMDA4MDAwMAorCisjZGVmaW5lIFZMQU5fVEFCTEVfRklEX1NISUZUCQkxMgorI2RlZmluZSBWTEFOX1RBQkxFX01FTUJFUlNISVBfU0hJRlQJMTYKKworLyoKKyNkZWZpbmUgRFlOQU1JQ19NQUNfVEFCTEVfQUREUgkJMDAtMDAwMEZGRkYtRkZGRkZGRkYKKyNkZWZpbmUgRFlOQU1JQ19NQUNfVEFCTEVfRklECQkwMC0wMDBGMDAwMC0wMDAwMDAwMAorI2RlZmluZSBEWU5BTUlDX01BQ19UQUJMRV9TUkNfUE9SVAkwMC0wMDMwMDAwMC0wMDAwMDAwMAorI2RlZmluZSBEWU5BTUlDX01BQ19UQUJMRV9USU1FU1RBTVAJMDAtMDBDMDAwMDAtMDAwMDAwMDAKKyNkZWZpbmUgRFlOQU1JQ19NQUNfVEFCTEVfRU5UUklFUwkwMy1GRjAwMDAwMC0wMDAwMDAwMAorI2RlZmluZSBEWU5BTUlDX01BQ19UQUJMRV9NQUNfRU1QVFkJMDQtMDAwMDAwMDAtMDAwMDAwMDAKKyNkZWZpbmUgRFlOQU1JQ19NQUNfVEFCTEVfUkVTRVJWRUQJNzgtMDAwMDAwMDAtMDAwMDAwMDAKKyNkZWZpbmUgRFlOQU1JQ19NQUNfVEFCTEVfTk9UX1JFQURZCTgwLTAwMDAwMDAwLTAwMDAwMDAwCisqLworCisjZGVmaW5lIERZTkFNSUNfTUFDX1RBQkxFX0FERFIJCTB4MDAwMEZGRkYKKyNkZWZpbmUgRFlOQU1JQ19NQUNfVEFCTEVfRklECQkweDAwMEYwMDAwCisjZGVmaW5lIERZTkFNSUNfTUFDX1RBQkxFX1NSQ19QT1JUCTB4MDAzMDAwMDAKKyNkZWZpbmUgRFlOQU1JQ19NQUNfVEFCTEVfVElNRVNUQU1QCTB4MDBDMDAwMDAKKyNkZWZpbmUgRFlOQU1JQ19NQUNfVEFCTEVfRU5UUklFUwkweEZGMDAwMDAwCisKKyNkZWZpbmUgRFlOQU1JQ19NQUNfVEFCTEVfRU5UUklFU19ICTB4MDMKKyNkZWZpbmUgRFlOQU1JQ19NQUNfVEFCTEVfTUFDX0VNUFRZCTB4MDQKKyNkZWZpbmUgRFlOQU1JQ19NQUNfVEFCTEVfUkVTRVJWRUQJMHg3OAorI2RlZmluZSBEWU5BTUlDX01BQ19UQUJMRV9OT1RfUkVBRFkJMHg4MAorCisjZGVmaW5lIERZTkFNSUNfTUFDX0ZJRF9TSElGVAkJMTYKKyNkZWZpbmUgRFlOQU1JQ19NQUNfU1JDX1BPUlRfU0hJRlQJMjAKKyNkZWZpbmUgRFlOQU1JQ19NQUNfVElNRVNUQU1QX1NISUZUCTIyCisjZGVmaW5lIERZTkFNSUNfTUFDX0VOVFJJRVNfU0hJRlQJMjQKKyNkZWZpbmUgRFlOQU1JQ19NQUNfRU5UUklFU19IX1NISUZUCTgKKworLyoKKyNkZWZpbmUgTUlCX0NPVU5URVJfVkFMVUUJCTAwLTAwMDAwMDAwLTNGRkZGRkZGCisjZGVmaW5lIE1JQl9DT1VOVEVSX1ZBTElECQkwMC0wMDAwMDAwMC00MDAwMDAwMAorI2RlZmluZSBNSUJfQ09VTlRFUl9PVkVSRkxPVwkJMDAtMDAwMDAwMDAtODAwMDAwMDAKKyovCisKKyNkZWZpbmUgTUlCX0NPVU5URVJfVkFMVUUJCTB4M0ZGRkZGRkYKKyNkZWZpbmUgTUlCX0NPVU5URVJfVkFMSUQJCTB4NDAwMDAwMDAKKyNkZWZpbmUgTUlCX0NPVU5URVJfT1ZFUkZMT1cJCTB4ODAwMDAwMDAKKworI2RlZmluZSBNSUJfUEFDS0VUX0RST1BQRUQJCTB4MDAwMEZGRkYKKworI2RlZmluZSBLU19NSUJfUEFDS0VUX0RST1BQRURfVFhfMAkweDEwMAorI2RlZmluZSBLU19NSUJfUEFDS0VUX0RST1BQRURfVFhfMQkweDEwMQorI2RlZmluZSBLU19NSUJfUEFDS0VUX0RST1BQRURfVFgJMHgxMDIKKyNkZWZpbmUgS1NfTUlCX1BBQ0tFVF9EUk9QUEVEX1JYXzAJMHgxMDMKKyNkZWZpbmUgS1NfTUlCX1BBQ0tFVF9EUk9QUEVEX1JYXzEJMHgxMDQKKyNkZWZpbmUgS1NfTUlCX1BBQ0tFVF9EUk9QUEVEX1JYCTB4MTA1CisKKy8qIENoYW5nZSBkZWZhdWx0IExFRCBtb2RlLiAqLworI2RlZmluZSBTRVRfREVGQVVMVF9MRUQJCQlMRURfU1BFRURfRFVQTEVYX0FDVAorCisjZGVmaW5lIE1BQ19BRERSX0xFTgkJCTYKKyNkZWZpbmUgTUFDX0FERFJfT1JERVIoaSkJCShNQUNfQUREUl9MRU4gLSAxIC0gKGkpKQorCisjZGVmaW5lIE1BWF9FVEhFUk5FVF9CT0RZX1NJWkUJCTE1MDAKKyNkZWZpbmUgRVRIRVJORVRfSEVBREVSX1NJWkUJCTE0CisKKyNkZWZpbmUgTUFYX0VUSEVSTkVUX1BBQ0tFVF9TSVpFCVwKKwkoTUFYX0VUSEVSTkVUX0JPRFlfU0laRSArIEVUSEVSTkVUX0hFQURFUl9TSVpFKQorCisjZGVmaW5lIFJFR1VMQVJfUlhfQlVGX1NJWkUJCShNQVhfRVRIRVJORVRfUEFDS0VUX1NJWkUgKyA0KQorI2RlZmluZSBNQVhfUlhfQlVGX1NJWkUJCQkoMTkxMiArIDQpCisKKyNkZWZpbmUgQURESVRJT05BTF9FTlRSSUVTCQkxNgorI2RlZmluZSBNQVhfTVVMVElDQVNUX0xJU1QJCTMyCisKKyNkZWZpbmUgSFdfTVVMVElDQVNUX1NJWkUJCTgKKworI2RlZmluZSBIV19UT19ERVZfUE9SVChwb3J0KQkJKHBvcnQgLSAxKQorCitlbnVtIHsKKwltZWRpYV9jb25uZWN0ZWQsCisJbWVkaWFfZGlzY29ubmVjdGVkCit9OworCitlbnVtIHsKKwlPSURfQ09VTlRFUl9VTktPV04sCisKKwlPSURfQ09VTlRFUl9GSVJTVCwKKworCS8qIHRvdGFsIHRyYW5zbWl0IGVycm9ycyAqLworCU9JRF9DT1VOVEVSX1hNSVRfRVJST1IsCisKKwkvKiB0b3RhbCByZWNlaXZlIGVycm9ycyAqLworCU9JRF9DT1VOVEVSX1JDVl9FUlJPUiwKKworCU9JRF9DT1VOVEVSX0xBU1QKK307CisKKy8qCisgKiBIYXJkd2FyZSBkZXNjcmlwdG9yIGRlZmluaXRpb25zCisgKi8KKworI2RlZmluZSBERVNDX0FMSUdOTUVOVAkJCTE2CisjZGVmaW5lIEJVRkZFUl9BTElHTk1FTlQJCTgKKworI2RlZmluZSBOVU1fT0ZfUlhfREVTQwkJCTY0CisjZGVmaW5lIE5VTV9PRl9UWF9ERVNDCQkJNjQKKworI2RlZmluZSBLU19ERVNDX1JYX0ZSQU1FX0xFTgkJMHgwMDAwMDdGRgorI2RlZmluZSBLU19ERVNDX1JYX0ZSQU1FX1RZUEUJCTB4MDAwMDgwMDAKKyNkZWZpbmUgS1NfREVTQ19SWF9FUlJPUl9DUkMJCTB4MDAwMTAwMDAKKyNkZWZpbmUgS1NfREVTQ19SWF9FUlJPUl9SVU5UCQkweDAwMDIwMDAwCisjZGVmaW5lIEtTX0RFU0NfUlhfRVJST1JfVE9PX0xPTkcJMHgwMDA0MDAwMAorI2RlZmluZSBLU19ERVNDX1JYX0VSUk9SX1BIWQkJMHgwMDA4MDAwMAorI2RlZmluZSBLUzg4NFhfREVTQ19SWF9QT1JUX01BU0sJMHgwMDMwMDAwMAorI2RlZmluZSBLU19ERVNDX1JYX01VTFRJQ0FTVAkJMHgwMTAwMDAwMAorI2RlZmluZSBLU19ERVNDX1JYX0VSUk9SCQkweDAyMDAwMDAwCisjZGVmaW5lIEtTX0RFU0NfUlhfRVJST1JfQ1NVTV9VRFAJMHgwNDAwMDAwMAorI2RlZmluZSBLU19ERVNDX1JYX0VSUk9SX0NTVU1fVENQCTB4MDgwMDAwMDAKKyNkZWZpbmUgS1NfREVTQ19SWF9FUlJPUl9DU1VNX0lQCTB4MTAwMDAwMDAKKyNkZWZpbmUgS1NfREVTQ19SWF9MQVNUCQkJMHgyMDAwMDAwMAorI2RlZmluZSBLU19ERVNDX1JYX0ZJUlNUCQkweDQwMDAwMDAwCisjZGVmaW5lIEtTX0RFU0NfUlhfRVJST1JfQ09ORAkJXAorCShLU19ERVNDX1JYX0VSUk9SX0NSQyB8CQlcCisJS1NfREVTQ19SWF9FUlJPUl9SVU5UIHwJCVwKKwlLU19ERVNDX1JYX0VSUk9SX1BIWSB8CQlcCisJS1NfREVTQ19SWF9FUlJPUl9UT09fTE9ORykKKworI2RlZmluZSBLU19ERVNDX0hXX09XTkVECQkweDgwMDAwMDAwCisKKyNkZWZpbmUgS1NfREVTQ19CVUZfU0laRQkJMHgwMDAwMDdGRgorI2RlZmluZSBLUzg4NFhfREVTQ19UWF9QT1JUX01BU0sJMHgwMDMwMDAwMAorI2RlZmluZSBLU19ERVNDX0VORF9PRl9SSU5HCQkweDAyMDAwMDAwCisjZGVmaW5lIEtTX0RFU0NfVFhfQ1NVTV9HRU5fVURQCQkweDA0MDAwMDAwCisjZGVmaW5lIEtTX0RFU0NfVFhfQ1NVTV9HRU5fVENQCQkweDA4MDAwMDAwCisjZGVmaW5lIEtTX0RFU0NfVFhfQ1NVTV9HRU5fSVAJCTB4MTAwMDAwMDAKKyNkZWZpbmUgS1NfREVTQ19UWF9MQVNUCQkJMHgyMDAwMDAwMAorI2RlZmluZSBLU19ERVNDX1RYX0ZJUlNUCQkweDQwMDAwMDAwCisjZGVmaW5lIEtTX0RFU0NfVFhfSU5URVJSVVBUCQkweDgwMDAwMDAwCisKKyNkZWZpbmUgS1NfREVTQ19QT1JUX1NISUZUCQkyMAorCisjZGVmaW5lIEtTX0RFU0NfUlhfTUFTSwkJCShLU19ERVNDX0JVRl9TSVpFKQorCisjZGVmaW5lIEtTX0RFU0NfVFhfTUFTSwkJCVwKKwkoS1NfREVTQ19UWF9JTlRFUlJVUFQgfAkJXAorCUtTX0RFU0NfVFhfRklSU1QgfAkJXAorCUtTX0RFU0NfVFhfTEFTVCB8CQlcCisJS1NfREVTQ19UWF9DU1VNX0dFTl9JUCB8CVwKKwlLU19ERVNDX1RYX0NTVU1fR0VOX1RDUCB8CVwKKwlLU19ERVNDX1RYX0NTVU1fR0VOX1VEUCB8CVwKKwlLU19ERVNDX0JVRl9TSVpFKQorCitzdHJ1Y3Qga3N6X2Rlc2Nfcnhfc3RhdCB7CisjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECisJdTMyIGh3X293bmVkOjE7CisJdTMyIGZpcnN0X2Rlc2M6MTsKKwl1MzIgbGFzdF9kZXNjOjE7CisJdTMyIGNzdW1fZXJyX2lwOjE7CisJdTMyIGNzdW1fZXJyX3RjcDoxOworCXUzMiBjc3VtX2Vycl91ZHA6MTsKKwl1MzIgZXJyb3I6MTsKKwl1MzIgbXVsdGljYXN0OjE7CisJdTMyIHNyY19wb3J0OjQ7CisJdTMyIGVycl9waHk6MTsKKwl1MzIgZXJyX3Rvb19sb25nOjE7CisJdTMyIGVycl9ydW50OjE7CisJdTMyIGVycl9jcmM6MTsKKwl1MzIgZnJhbWVfdHlwZToxOworCXUzMiByZXNlcnZlZDE6NDsKKwl1MzIgZnJhbWVfbGVuOjExOworI2Vsc2UKKwl1MzIgZnJhbWVfbGVuOjExOworCXUzMiByZXNlcnZlZDE6NDsKKwl1MzIgZnJhbWVfdHlwZToxOworCXUzMiBlcnJfY3JjOjE7CisJdTMyIGVycl9ydW50OjE7CisJdTMyIGVycl90b29fbG9uZzoxOworCXUzMiBlcnJfcGh5OjE7CisJdTMyIHNyY19wb3J0OjQ7CisJdTMyIG11bHRpY2FzdDoxOworCXUzMiBlcnJvcjoxOworCXUzMiBjc3VtX2Vycl91ZHA6MTsKKwl1MzIgY3N1bV9lcnJfdGNwOjE7CisJdTMyIGNzdW1fZXJyX2lwOjE7CisJdTMyIGxhc3RfZGVzYzoxOworCXUzMiBmaXJzdF9kZXNjOjE7CisJdTMyIGh3X293bmVkOjE7CisjZW5kaWYKK307CisKK3N0cnVjdCBrc3pfZGVzY190eF9zdGF0IHsKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKwl1MzIgaHdfb3duZWQ6MTsKKwl1MzIgcmVzZXJ2ZWQxOjMxOworI2Vsc2UKKwl1MzIgcmVzZXJ2ZWQxOjMxOworCXUzMiBod19vd25lZDoxOworI2VuZGlmCit9OworCitzdHJ1Y3Qga3N6X2Rlc2NfcnhfYnVmIHsKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKwl1MzIgcmVzZXJ2ZWQ0OjY7CisJdTMyIGVuZF9vZl9yaW5nOjE7CisJdTMyIHJlc2VydmVkMzoxNDsKKwl1MzIgYnVmX3NpemU6MTE7CisjZWxzZQorCXUzMiBidWZfc2l6ZToxMTsKKwl1MzIgcmVzZXJ2ZWQzOjE0OworCXUzMiBlbmRfb2ZfcmluZzoxOworCXUzMiByZXNlcnZlZDQ6NjsKKyNlbmRpZgorfTsKKworc3RydWN0IGtzel9kZXNjX3R4X2J1ZiB7CisjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECisJdTMyIGludHI6MTsKKwl1MzIgZmlyc3Rfc2VnOjE7CisJdTMyIGxhc3Rfc2VnOjE7CisJdTMyIGNzdW1fZ2VuX2lwOjE7CisJdTMyIGNzdW1fZ2VuX3RjcDoxOworCXUzMiBjc3VtX2dlbl91ZHA6MTsKKwl1MzIgZW5kX29mX3Jpbmc6MTsKKwl1MzIgcmVzZXJ2ZWQ0OjE7CisJdTMyIGRlc3RfcG9ydDo0OworCXUzMiByZXNlcnZlZDM6OTsKKwl1MzIgYnVmX3NpemU6MTE7CisjZWxzZQorCXUzMiBidWZfc2l6ZToxMTsKKwl1MzIgcmVzZXJ2ZWQzOjk7CisJdTMyIGRlc3RfcG9ydDo0OworCXUzMiByZXNlcnZlZDQ6MTsKKwl1MzIgZW5kX29mX3Jpbmc6MTsKKwl1MzIgY3N1bV9nZW5fdWRwOjE7CisJdTMyIGNzdW1fZ2VuX3RjcDoxOworCXUzMiBjc3VtX2dlbl9pcDoxOworCXUzMiBsYXN0X3NlZzoxOworCXUzMiBmaXJzdF9zZWc6MTsKKwl1MzIgaW50cjoxOworI2VuZGlmCit9OworCit1bmlvbiBkZXNjX3N0YXQgeworCXN0cnVjdCBrc3pfZGVzY19yeF9zdGF0IHJ4OworCXN0cnVjdCBrc3pfZGVzY190eF9zdGF0IHR4OworCXUzMiBkYXRhOworfTsKKwordW5pb24gZGVzY19idWYgeworCXN0cnVjdCBrc3pfZGVzY19yeF9idWYgcng7CisJc3RydWN0IGtzel9kZXNjX3R4X2J1ZiB0eDsKKwl1MzIgZGF0YTsKK307CisKKy8qKgorICogc3RydWN0IGtzel9od19kZXNjIC0gSGFyZHdhcmUgZGVzY3JpcHRvciBkYXRhIHN0cnVjdHVyZQorICogQGN0cmw6CURlc2NyaXB0b3IgY29udHJvbCB2YWx1ZS4KKyAqIEBidWY6CURlc2NyaXB0b3IgYnVmZmVyIHZhbHVlLgorICogQGFkZHI6CVBoeXNpY2FsIGFkZHJlc3Mgb2YgbWVtb3J5IGJ1ZmZlci4KKyAqIEBuZXh0OglQb2ludGVyIHRvIG5leHQgaGFyZHdhcmUgZGVzY3JpcHRvci4KKyAqLworc3RydWN0IGtzel9od19kZXNjIHsKKwl1bmlvbiBkZXNjX3N0YXQgY3RybDsKKwl1bmlvbiBkZXNjX2J1ZiBidWY7CisJdTMyIGFkZHI7CisJdTMyIG5leHQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBrc3pfc3dfZGVzYyAtIFNvZnR3YXJlIGRlc2NyaXB0b3IgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBjdHJsOglEZXNjcmlwdG9yIGNvbnRyb2wgdmFsdWUuCisgKiBAYnVmOglEZXNjcmlwdG9yIGJ1ZmZlciB2YWx1ZS4KKyAqIEBidWZfc2l6ZToJQ3VycmVudCBidWZmZXJzIHNpemUgdmFsdWUgaW4gaGFyZHdhcmUgZGVzY3JpcHRvci4KKyAqLworc3RydWN0IGtzel9zd19kZXNjIHsKKwl1bmlvbiBkZXNjX3N0YXQgY3RybDsKKwl1bmlvbiBkZXNjX2J1ZiBidWY7CisJdTMyIGJ1Zl9zaXplOworfTsKKworLyoqCisgKiBzdHJ1Y3Qga3N6X2RtYV9idWYgLSBPUyBkZXBlbmRlbnQgRE1BIGJ1ZmZlciBkYXRhIHN0cnVjdHVyZQorICogQHNrYjoJQXNzb2NpYXRlZCBzb2NrZXQgYnVmZmVyLgorICogQGRtYToJQXNzb2NpYXRlZCBwaHlzaWNhbCBETUEgYWRkcmVzcy4KKyAqIGxlbjoJCUFjdHVhbCBsZW4gdXNlZC4KKyAqLworc3RydWN0IGtzel9kbWFfYnVmIHsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWRtYV9hZGRyX3QgZG1hOworCWludCBsZW47Cit9OworCisvKioKKyAqIHN0cnVjdCBrc3pfZGVzYyAtIERlc2NyaXB0b3Igc3RydWN0dXJlCisgKiBAcGh3OglIYXJkd2FyZSBkZXNjcmlwdG9yIHBvaW50ZXIgdG8gdW5jYWNoZWQgcGh5c2ljYWwgbWVtb3J5LgorICogQHN3OgkJQ2FjaGVkIG1lbW9yeSB0byBob2xkIGhhcmR3YXJlIGRlc2NyaXB0b3IgdmFsdWVzIGZvcgorICogCQltYW5pcHVsYXRpb24uCisgKiBAZG1hX2J1ZjoJT3BlcmF0aW5nIHN5c3RlbSBkZXBlbmRlbnQgZGF0YSBzdHJ1Y3R1cmUgdG8gaG9sZCBwaHlzaWNhbAorICogCQltZW1vcnkgYnVmZmVyIGFsbG9jYXRpb24gaW5mb3JtYXRpb24uCisgKi8KK3N0cnVjdCBrc3pfZGVzYyB7CisJc3RydWN0IGtzel9od19kZXNjICpwaHc7CisJc3RydWN0IGtzel9zd19kZXNjIHN3OworCXN0cnVjdCBrc3pfZG1hX2J1ZiBkbWFfYnVmOworfTsKKworI2RlZmluZSBETUFfQlVGRkVSKGRlc2MpICAoKHN0cnVjdCBrc3pfZG1hX2J1ZiAqKSgmKGRlc2MpLT5kbWFfYnVmKSkKKworLyoqCisgKiBzdHJ1Y3Qga3N6X2Rlc2NfaW5mbyAtIERlc2NyaXB0b3IgaW5mb3JtYXRpb24gZGF0YSBzdHJ1Y3R1cmUKKyAqIEByaW5nOglGaXJzdCBkZXNjcmlwdG9yIGluIHRoZSByaW5nLgorICogQGN1cjoJQ3VycmVudCBkZXNjcmlwdG9yIGJlaW5nIG1hbmlwdWxhdGVkLgorICogQHJpbmdfdmlydDoJRmlyc3QgaGFyZHdhcmUgZGVzY3JpcHRvciBpbiB0aGUgcmluZy4KKyAqIEByaW5nX3BoeXM6CVRoZSBwaHlzaWNhbCBhZGRyZXNzIG9mIHRoZSBmaXJzdCBkZXNjcmlwdG9yIG9mIHRoZSByaW5nLgorICogQHNpemU6CVNpemUgb2YgaGFyZHdhcmUgZGVzY3JpcHRvci4KKyAqIEBhbGxvYzoJTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGFsbG9jYXRlZC4KKyAqIEBhdmFpbDoJTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGF2YWlsYWJsZSBmb3IgdXNlLgorICogQGxhc3Q6CUluZGV4IGZvciBsYXN0IGRlc2NyaXB0b3IgcmVsZWFzZWQgdG8gaGFyZHdhcmUuCisgKiBAbmV4dDoJSW5kZXggZm9yIG5leHQgZGVzY3JpcHRvciBhdmFpbGFibGUgZm9yIHVzZS4KKyAqIEBtYXNrOglNYXNrIGZvciBpbmRleCB3cmFwcGluZy4KKyAqLworc3RydWN0IGtzel9kZXNjX2luZm8geworCXN0cnVjdCBrc3pfZGVzYyAqcmluZzsKKwlzdHJ1Y3Qga3N6X2Rlc2MgKmN1cjsKKwlzdHJ1Y3Qga3N6X2h3X2Rlc2MgKnJpbmdfdmlydDsKKwl1MzIgcmluZ19waHlzOworCWludCBzaXplOworCWludCBhbGxvYzsKKwlpbnQgYXZhaWw7CisJaW50IGxhc3Q7CisJaW50IG5leHQ7CisJaW50IG1hc2s7Cit9OworCisvKgorICogS1NaODg0MiBzd2l0Y2ggZGVmaW5pdGlvbnMKKyAqLworCitlbnVtIHsKKwlUQUJMRV9TVEFUSUNfTUFDID0gMCwKKwlUQUJMRV9WTEFOLAorCVRBQkxFX0RZTkFNSUNfTUFDLAorCVRBQkxFX01JQgorfTsKKworI2RlZmluZSBMRUFSTkVEX01BQ19UQUJMRV9FTlRSSUVTCTEwMjQKKyNkZWZpbmUgU1RBVElDX01BQ19UQUJMRV9FTlRSSUVTCTgKKworLyoqCisgKiBzdHJ1Y3Qga3N6X21hY190YWJsZSAtIFN0YXRpYyBNQUMgdGFibGUgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBtYWNfYWRkcjoJTUFDIGFkZHJlc3MgdG8gZmlsdGVyLgorICogQHZpZDoJVklEIHZhbHVlLgorICogQGZpZDoJRklEIHZhbHVlLgorICogQHBvcnRzOglQb3J0IG1lbWJlcnNoaXAuCisgKiBAb3ZlcnJpZGU6CU92ZXJyaWRlIHNldHRpbmcuCisgKiBAdXNlX2ZpZDoJRklEIHVzZSBzZXR0aW5nLgorICogQHZhbGlkOglWYWxpZCBzZXR0aW5nIGluZGljYXRpbmcgdGhlIGVudHJ5IGlzIGJlaW5nIHVzZWQuCisgKi8KK3N0cnVjdCBrc3pfbWFjX3RhYmxlIHsKKwl1OCBtYWNfYWRkcltNQUNfQUREUl9MRU5dOworCXUxNiB2aWQ7CisJdTggZmlkOworCXU4IHBvcnRzOworCXU4IG92ZXJyaWRlOjE7CisJdTggdXNlX2ZpZDoxOworCXU4IHZhbGlkOjE7Cit9OworCisjZGVmaW5lIFZMQU5fVEFCTEVfRU5UUklFUwkJMTYKKworLyoqCisgKiBzdHJ1Y3Qga3N6X3ZsYW5fdGFibGUgLSBWTEFOIHRhYmxlIGRhdGEgc3RydWN0dXJlCisgKiBAdmlkOglWSUQgdmFsdWUuCisgKiBAZmlkOglGSUQgdmFsdWUuCisgKiBAbWVtYmVyOglQb3J0IG1lbWJlcnNoaXAuCisgKi8KK3N0cnVjdCBrc3pfdmxhbl90YWJsZSB7CisJdTE2IHZpZDsKKwl1OCBmaWQ7CisJdTggbWVtYmVyOworfTsKKworI2RlZmluZSBESUZGU0VSVl9FTlRSSUVTCQk2NAorI2RlZmluZSBQUklPXzgwMl8xUF9FTlRSSUVTCQk4CisjZGVmaW5lIFBSSU9fUVVFVUVTCQkJNAorCisjZGVmaW5lIFNXSVRDSF9QT1JUX05VTQkJCTIKKyNkZWZpbmUgVE9UQUxfUE9SVF9OVU0JCQkoU1dJVENIX1BPUlRfTlVNICsgMSkKKyNkZWZpbmUgSE9TVF9NQVNLCQkJKDEgPDwgU1dJVENIX1BPUlRfTlVNKQorI2RlZmluZSBQT1JUX01BU0sJCQk3CisKKyNkZWZpbmUgTUFJTl9QT1JUCQkJMAorI2RlZmluZSBPVEhFUl9QT1JUCQkJMQorI2RlZmluZSBIT1NUX1BPUlQJCQlTV0lUQ0hfUE9SVF9OVU0KKworI2RlZmluZSBQT1JUX0NPVU5URVJfTlVNCQkweDIwCisjZGVmaW5lIFRPVEFMX1BPUlRfQ09VTlRFUl9OVU0JCShQT1JUX0NPVU5URVJfTlVNICsgMikKKworI2RlZmluZSBNSUJfQ09VTlRFUl9SWF9MT19QUklPUklUWQkweDAwCisjZGVmaW5lIE1JQl9DT1VOVEVSX1JYX0hJX1BSSU9SSVRZCTB4MDEKKyNkZWZpbmUgTUlCX0NPVU5URVJfUlhfVU5ERVJTSVpFCTB4MDIKKyNkZWZpbmUgTUlCX0NPVU5URVJfUlhfRlJBR01FTlQJCTB4MDMKKyNkZWZpbmUgTUlCX0NPVU5URVJfUlhfT1ZFUlNJWkUJCTB4MDQKKyNkZWZpbmUgTUlCX0NPVU5URVJfUlhfSkFCQkVSCQkweDA1CisjZGVmaW5lIE1JQl9DT1VOVEVSX1JYX1NZTUJPTF9FUlIJMHgwNgorI2RlZmluZSBNSUJfQ09VTlRFUl9SWF9DUkNfRVJSCQkweDA3CisjZGVmaW5lIE1JQl9DT1VOVEVSX1JYX0FMSUdOTUVOVF9FUlIJMHgwOAorI2RlZmluZSBNSUJfQ09VTlRFUl9SWF9DVFJMXzg4MDgJMHgwOQorI2RlZmluZSBNSUJfQ09VTlRFUl9SWF9QQVVTRQkJMHgwQQorI2RlZmluZSBNSUJfQ09VTlRFUl9SWF9CUk9BRENBU1QJMHgwQgorI2RlZmluZSBNSUJfQ09VTlRFUl9SWF9NVUxUSUNBU1QJMHgwQworI2RlZmluZSBNSUJfQ09VTlRFUl9SWF9VTklDQVNUCQkweDBECisjZGVmaW5lIE1JQl9DT1VOVEVSX1JYX09DVEVUXzY0CQkweDBFCisjZGVmaW5lIE1JQl9DT1VOVEVSX1JYX09DVEVUXzY1XzEyNwkweDBGCisjZGVmaW5lIE1JQl9DT1VOVEVSX1JYX09DVEVUXzEyOF8yNTUJMHgxMAorI2RlZmluZSBNSUJfQ09VTlRFUl9SWF9PQ1RFVF8yNTZfNTExCTB4MTEKKyNkZWZpbmUgTUlCX0NPVU5URVJfUlhfT0NURVRfNTEyXzEwMjMJMHgxMgorI2RlZmluZSBNSUJfQ09VTlRFUl9SWF9PQ1RFVF8xMDI0XzE1MjIJMHgxMworI2RlZmluZSBNSUJfQ09VTlRFUl9UWF9MT19QUklPUklUWQkweDE0CisjZGVmaW5lIE1JQl9DT1VOVEVSX1RYX0hJX1BSSU9SSVRZCTB4MTUKKyNkZWZpbmUgTUlCX0NPVU5URVJfVFhfTEFURV9DT0xMSVNJT04JMHgxNgorI2RlZmluZSBNSUJfQ09VTlRFUl9UWF9QQVVTRQkJMHgxNworI2RlZmluZSBNSUJfQ09VTlRFUl9UWF9CUk9BRENBU1QJMHgxOAorI2RlZmluZSBNSUJfQ09VTlRFUl9UWF9NVUxUSUNBU1QJMHgxOQorI2RlZmluZSBNSUJfQ09VTlRFUl9UWF9VTklDQVNUCQkweDFBCisjZGVmaW5lIE1JQl9DT1VOVEVSX1RYX0RFRkVSUkVECQkweDFCCisjZGVmaW5lIE1JQl9DT1VOVEVSX1RYX1RPVEFMX0NPTExJU0lPTgkweDFDCisjZGVmaW5lIE1JQl9DT1VOVEVSX1RYX0VYQ0VTU19DT0xMSVNJT04JMHgxRAorI2RlZmluZSBNSUJfQ09VTlRFUl9UWF9TSU5HTEVfQ09MTElTSU9OCTB4MUUKKyNkZWZpbmUgTUlCX0NPVU5URVJfVFhfTVVMVElfQ09MTElTSU9OCTB4MUYKKworI2RlZmluZSBNSUJfQ09VTlRFUl9SWF9EUk9QUEVEX1BBQ0tFVAkweDIwCisjZGVmaW5lIE1JQl9DT1VOVEVSX1RYX0RST1BQRURfUEFDS0VUCTB4MjEKKworLyoqCisgKiBzdHJ1Y3Qga3N6X3BvcnRfbWliIC0gUG9ydCBNSUIgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBjbnRfcHRyOglDdXJyZW50IHBvaW50ZXIgdG8gTUlCIGNvdW50ZXIgaW5kZXguCisgKiBAbGlua19kb3duOglJbmRpY2F0aW9uIHRoZSBsaW5rIGhhcyBqdXN0IGdvbmUgZG93bi4KKyAqIEBzdGF0ZToJQ29ubmVjdGlvbiBzdGF0dXMgb2YgdGhlIHBvcnQuCisgKiBAbWliX3N0YXJ0OglUaGUgc3RhcnRpbmcgY291bnRlciBpbmRleC4gIFNvbWUgcG9ydHMgZG8gbm90IHN0YXJ0IGF0IDAuCisgKiBAY291bnRlcjoJNjQtYml0IE1JQiBjb3VudGVyIHZhbHVlLgorICogQGRyb3BwZWQ6CVRlbXBvcmFyeSBidWZmZXIgdG8gcmVtZW1iZXIgbGFzdCByZWFkIHBhY2tldCBkcm9wcGVkIHZhbHVlcy4KKyAqCisgKiBNSUIgY291bnRlcnMgbmVlZHMgdG8gYmUgcmVhZCBwZXJpb2RpY2FsbHkgc28gdGhhdCBjb3VudGVycyBkbyBub3QgZ2V0CisgKiBvdmVyZmxvd2VkIGFuZCBnaXZlIGluY29ycmVjdCB2YWx1ZXMuICBBIHJpZ2h0IGJhbGFuY2UgaXMgbmVlZGVkIHRvCisgKiBzYXRpc2Z5IHRoaXMgY29uZGl0aW9uIGFuZCBub3Qgd2FzdGUgdG9vIG11Y2ggQ1BVIHRpbWUuCisgKgorICogSXQgaXMgcG9pbnRsZXNzIHRvIHJlYWQgTUlCIGNvdW50ZXJzIHdoZW4gdGhlIHBvcnQgaXMgZGlzY29ubmVjdGVkLiAgVGhlCisgKiBAc3RhdGUgcHJvdmlkZXMgdGhlIGNvbm5lY3Rpb24gc3RhdHVzIHNvIHRoYXQgTUlCIGNvdW50ZXJzIGFyZSByZWFkIG9ubHkKKyAqIHdoZW4gdGhlIHBvcnQgaXMgY29ubmVjdGVkLiAgVGhlIEBsaW5rX2Rvd24gaW5kaWNhdGVzIHRoZSBwb3J0IGlzIGp1c3QKKyAqIGRpc2Nvbm5lY3RlZCBzbyB0aGF0IGFsbCBNSUIgY291bnRlcnMgYXJlIHJlYWQgb25lIGxhc3QgdGltZSB0byB1cGRhdGUgdGhlCisgKiBpbmZvcm1hdGlvbi4KKyAqLworc3RydWN0IGtzel9wb3J0X21pYiB7CisJdTggY250X3B0cjsKKwl1OCBsaW5rX2Rvd247CisJdTggc3RhdGU7CisJdTggbWliX3N0YXJ0OworCisJdTY0IGNvdW50ZXJbVE9UQUxfUE9SVF9DT1VOVEVSX05VTV07CisJdTMyIGRyb3BwZWRbMl07Cit9OworCisvKioKKyAqIHN0cnVjdCBrc3pfcG9ydF9jZmcgLSBQb3J0IGNvbmZpZ3VyYXRpb24gZGF0YSBzdHJ1Y3R1cmUKKyAqIEB2aWQ6CVZJRCB2YWx1ZS4KKyAqIEBtZW1iZXI6CVBvcnQgbWVtYmVyc2hpcC4KKyAqIEBwb3J0X3ByaW86CVBvcnQgcHJpb3JpdHkuCisgKiBAcnhfcmF0ZToJUmVjZWl2ZSBwcmlvcml0eSByYXRlLgorICogQHR4X3JhdGU6CVRyYW5zbWl0IHByaW9yaXR5IHJhdGUuCisgKiBAc3RwX3N0YXRlOglDdXJyZW50IFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wgc3RhdGUuCisgKi8KK3N0cnVjdCBrc3pfcG9ydF9jZmcgeworCXUxNiB2aWQ7CisJdTggbWVtYmVyOworCXU4IHBvcnRfcHJpbzsKKwl1MzIgcnhfcmF0ZVtQUklPX1FVRVVFU107CisJdTMyIHR4X3JhdGVbUFJJT19RVUVVRVNdOworCWludCBzdHBfc3RhdGU7Cit9OworCisvKioKKyAqIHN0cnVjdCBrc3pfc3dpdGNoIC0gS1NaODg0MiBzd2l0Y2ggZGF0YSBzdHJ1Y3R1cmUKKyAqIEBtYWNfdGFibGU6CU1BQyB0YWJsZSBlbnRyaWVzIGluZm9ybWF0aW9uLgorICogQHZsYW5fdGFibGU6CVZMQU4gdGFibGUgZW50cmllcyBpbmZvcm1hdGlvbi4KKyAqIEBwb3J0X2NmZzoJUG9ydCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLgorICogQGRpZmZzZXJ2OglEaWZmU2VydiBwcmlvcml0eSBzZXR0aW5ncy4gIFBvc3NpYmxlIHZhbHVlcyBmcm9tIDYtYml0IG9mIFRvUworICogCQkoYml0NyB+IGJpdDIpIGZpZWxkLgorICogQHBfODAyXzFwOgk4MDIuMVAgcHJpb3JpdHkgc2V0dGluZ3MuICBQb3NzaWJsZSB2YWx1ZXMgZnJvbSAzLWJpdCBvZiA4MDIuMXAKKyAqIAkJVGFnIHByaW9yaXR5IGZpZWxkLgorICogQGJyX2FkZHI6CUJyaWRnZSBhZGRyZXNzLiAgVXNlZCBmb3IgU1RQLgorICogQG90aGVyX2FkZHI6CU90aGVyIE1BQyBhZGRyZXNzLiAgVXNlZCBmb3IgbXVsdGlwbGUgbmV0d29yayBkZXZpY2UgbW9kZS4KKyAqIEBicm9hZF9wZXI6CUJyb2FkY2FzdCBzdG9ybSBwZXJjZW50YWdlLgorICogQG1lbWJlcjoJQ3VycmVudCBwb3J0IG1lbWJlcnNoaXAuICBVc2VkIGZvciBTVFAuCisgKi8KK3N0cnVjdCBrc3pfc3dpdGNoIHsKKwlzdHJ1Y3Qga3N6X21hY190YWJsZSBtYWNfdGFibGVbU1RBVElDX01BQ19UQUJMRV9FTlRSSUVTXTsKKwlzdHJ1Y3Qga3N6X3ZsYW5fdGFibGUgdmxhbl90YWJsZVtWTEFOX1RBQkxFX0VOVFJJRVNdOworCXN0cnVjdCBrc3pfcG9ydF9jZmcgcG9ydF9jZmdbVE9UQUxfUE9SVF9OVU1dOworCisJdTggZGlmZnNlcnZbRElGRlNFUlZfRU5UUklFU107CisJdTggcF84MDJfMXBbUFJJT184MDJfMVBfRU5UUklFU107CisKKwl1OCBicl9hZGRyW01BQ19BRERSX0xFTl07CisJdTggb3RoZXJfYWRkcltNQUNfQUREUl9MRU5dOworCisJdTggYnJvYWRfcGVyOworCXU4IG1lbWJlcjsKK307CisKKyNkZWZpbmUgVFhfUkFURV9VTklUCQkJMTAwMDAKKworLyoqCisgKiBzdHJ1Y3Qga3N6X3BvcnRfaW5mbyAtIFBvcnQgaW5mb3JtYXRpb24gZGF0YSBzdHJ1Y3R1cmUKKyAqIEBzdGF0ZToJQ29ubmVjdGlvbiBzdGF0dXMgb2YgdGhlIHBvcnQuCisgKiBAdHhfcmF0ZToJVHJhbnNtaXQgcmF0ZSBkaXZpZGVkIGJ5IDEwMDAwIHRvIGdldCBNYml0LgorICogQGR1cGxleDoJRHVwbGV4IG1vZGUuCisgKiBAYWR2ZXJ0aXNlZDoJQWR2ZXJ0aXNlZCBhdXRvLW5lZ290aWF0aW9uIHNldHRpbmcuICBVc2VkIHRvIGRldGVybWluZSBsaW5rLgorICogQHBhcnRuZXI6CUF1dG8tbmVnb3RpYXRpb24gcGFydG5lciBzZXR0aW5nLiAgVXNlZCB0byBkZXRlcm1pbmUgbGluay4KKyAqIEBwb3J0X2lkOglQb3J0IGluZGV4IHRvIGFjY2VzcyBhY3R1YWwgaGFyZHdhcmUgcmVnaXN0ZXIuCisgKiBAcGRldjoJUG9pbnRlciB0byBPUyBkZXBlbmRlbnQgbmV0d29yayBkZXZpY2UuCisgKi8KK3N0cnVjdCBrc3pfcG9ydF9pbmZvIHsKKwl1aW50IHN0YXRlOworCXVpbnQgdHhfcmF0ZTsKKwl1OCBkdXBsZXg7CisJdTggYWR2ZXJ0aXNlZDsKKwl1OCBwYXJ0bmVyOworCXU4IHBvcnRfaWQ7CisJdm9pZCAqcGRldjsKK307CisKKyNkZWZpbmUgTUFYX1RYX0hFTERfU0laRQkJNTIwMDAKKworLyogSGFyZHdhcmUgZmVhdHVyZXMgYW5kIGJ1ZyBmaXhlcy4gKi8KKyNkZWZpbmUgTElOS19JTlRfV09SS0lORwkJKDEgPDwgMCkKKyNkZWZpbmUgU01BTExfUEFDS0VUX1RYX0JVRwkJKDEgPDwgMSkKKyNkZWZpbmUgSEFMRl9EVVBMRVhfU0lHTkFMX0JVRwkJKDEgPDwgMikKKyNkZWZpbmUgSVBWNl9DU1VNX0dFTl9IQUNLCQkoMSA8PCAzKQorI2RlZmluZSBSWF9IVUdFX0ZSQU1FCQkJKDEgPDwgNCkKKyNkZWZpbmUgU1RQX1NVUFBPUlQJCQkoMSA8PCA4KQorCisvKiBTb2Z0d2FyZSBvdmVycmlkZXMuICovCisjZGVmaW5lIFBBVVNFX0ZMT1dfQ1RSTAkJCSgxIDw8IDApCisjZGVmaW5lIEZBU1RfQUdJTkcJCQkoMSA8PCAxKQorCisvKioKKyAqIHN0cnVjdCBrc3pfaHcgLSBLU1o4ODRYIGhhcmR3YXJlIGRhdGEgc3RydWN0dXJlCisgKiBAaW86CQkJVmlydHVhbCBhZGRyZXNzIGFzc2lnbmVkLgorICogQGtzel9zd2l0Y2g6CQlQb2ludGVyIHRvIEtTWjg4NDIgc3dpdGNoLgorICogQHBvcnRfaW5mbzoJCVBvcnQgaW5mb3JtYXRpb24uCisgKiBAcG9ydF9taWI6CQlQb3J0IE1JQiBpbmZvcm1hdGlvbi4KKyAqIEBkZXZfY291bnQ6CQlOdW1iZXIgb2YgbmV0d29yayBkZXZpY2VzIHRoaXMgaGFyZHdhcmUgc3VwcG9ydHMuCisgKiBAZHN0X3BvcnRzOgkJRGVzdGluYXRpb24gcG9ydHMgaW4gc3dpdGNoIGZvciB0cmFuc21pc3Npb24uCisgKiBAaWQ6CQkJSGFyZHdhcmUgSUQuICBVc2VkIGZvciBkaXNwbGF5IG9ubHkuCisgKiBAbWliX2NudDoJCU51bWJlciBvZiBNSUIgY291bnRlcnMgdGhpcyBoYXJkd2FyZSBoYXMuCisgKiBAbWliX3BvcnRfY250OglOdW1iZXIgb2YgcG9ydHMgd2l0aCBNSUIgY291bnRlcnMuCisgKiBAdHhfY2ZnOgkJQ2FjaGVkIHRyYW5zbWl0IGNvbnRyb2wgc2V0dGluZ3MuCisgKiBAcnhfY2ZnOgkJQ2FjaGVkIHJlY2VpdmUgY29udHJvbCBzZXR0aW5ncy4KKyAqIEBpbnRyX21hc2s6CQlDdXJyZW50IGludGVycnVwdCBtYXNrLgorICogQGludHJfc2V0OgkJQ3VycmVudCBpbnRlcnJ1cCBzZXQuCisgKiBAaW50cl9ibG9ja2VkOglJbnRlcnJ1cHQgYmxvY2tlZC4KKyAqIEByeF9kZXNjX2luZm86CVJlY2VpdmUgZGVzY3JpcHRvciBpbmZvcm1hdGlvbi4KKyAqIEB0eF9kZXNjX2luZm86CVRyYW5zbWl0IGRlc2NyaXB0b3IgaW5mb3JtYXRpb24uCisgKiBAdHhfaW50X2NudDoJCVRyYW5zbWl0IGludGVycnVwdCBjb3VudC4gIFVzZWQgZm9yIFRYIG9wdGltaXphdGlvbi4KKyAqIEB0eF9pbnRfbWFzazoJVHJhbnNtaXQgaW50ZXJydXB0IG1hc2suICBVc2VkIGZvciBUWCBvcHRpbWl6YXRpb24uCisgKiBAdHhfc2l6ZToJCVRyYW5zbWl0IGRhdGEgc2l6ZS4gIFVzZWQgZm9yIFRYIG9wdGltaXphdGlvbi4KKyAqIAkJCVRoZSBtYXhpbXVtIGlzIGRlZmluZWQgYnkgTUFYX1RYX0hFTERfU0laRS4KKyAqIEBwZXJtX2FkZHI6CQlQZXJtYW5lbnQgTUFDIGFkZHJlc3MuCisgKiBAb3ZlcnJpZGVfYWRkcjoJT3ZlcnJpZGVkIE1BQyBhZGRyZXNzLgorICogQGFkZHJlc3M6CQlBZGRpdGlvbmFsIE1BQyBhZGRyZXNzIGVudHJpZXMuCisgKiBAYWRkcl9saXN0X3NpemU6CUFkZGl0aW9uYWwgTUFDIGFkZHJlc3MgbGlzdCBzaXplLgorICogQG1hY19vdmVycmlkZToJSW5kaWNhdGlvbiBvZiBNQUMgYWRkcmVzcyBvdmVycmlkZWQuCisgKiBAcHJvbWlzY3VvdXM6CUNvdW50ZXIgdG8ga2VlcCB0cmFjayBvZiBwcm9taXNjdW91cyBtb2RlIHNldC4KKyAqIEBhbGxfbXVsdGk6CQlDb3VudGVyIHRvIGtlZXAgdHJhY2sgb2YgYWxsIG11bHRpY2FzdCBtb2RlIHNldC4KKyAqIEBtdWx0aV9saXN0OgkJTXVsdGljYXN0IGFkZHJlc3MgZW50cmllcy4KKyAqIEBtdWx0aV9iaXRzOgkJQ2FjaGVkIG11bHRpY2FzdCBoYXNoIHRhYmxlIHNldHRpbmdzLgorICogQG11bHRpX2xpc3Rfc2l6ZToJTXVsdGljYXN0IGFkZHJlc3MgbGlzdCBzaXplLgorICogQGVuYWJsZWQ6CQlJbmRpY2F0aW9uIG9mIGhhcmR3YXJlIGVuYWJsZWQuCisgKiBAcnhfc3RvcDoJCUluZGljYXRpb24gb2YgcmVjZWl2ZSBwcm9jZXNzIHN0b3AuCisgKiBAZmVhdHVyZXM6CQlIYXJkd2FyZSBmZWF0dXJlcyB0byBlbmFibGUuCisgKiBAb3ZlcnJpZGVzOgkJSGFyZHdhcmUgZmVhdHVyZXMgdG8gb3ZlcnJpZGUuCisgKiBAcGFyZW50OgkJUG9pbnRlciB0byBwYXJlbnQsIG5ldHdvcmsgZGV2aWNlIHByaXZhdGUgc3RydWN0dXJlLgorICovCitzdHJ1Y3Qga3N6X2h3IHsKKwl2b2lkIF9faW9tZW0gKmlvOworCisJc3RydWN0IGtzel9zd2l0Y2ggKmtzel9zd2l0Y2g7CisJc3RydWN0IGtzel9wb3J0X2luZm8gcG9ydF9pbmZvW1NXSVRDSF9QT1JUX05VTV07CisJc3RydWN0IGtzel9wb3J0X21pYiBwb3J0X21pYltUT1RBTF9QT1JUX05VTV07CisJaW50IGRldl9jb3VudDsKKwlpbnQgZHN0X3BvcnRzOworCWludCBpZDsKKwlpbnQgbWliX2NudDsKKwlpbnQgbWliX3BvcnRfY250OworCisJdTMyIHR4X2NmZzsKKwl1MzIgcnhfY2ZnOworCXUzMiBpbnRyX21hc2s7CisJdTMyIGludHJfc2V0OworCXVpbnQgaW50cl9ibG9ja2VkOworCisJc3RydWN0IGtzel9kZXNjX2luZm8gcnhfZGVzY19pbmZvOworCXN0cnVjdCBrc3pfZGVzY19pbmZvIHR4X2Rlc2NfaW5mbzsKKworCWludCB0eF9pbnRfY250OworCWludCB0eF9pbnRfbWFzazsKKwlpbnQgdHhfc2l6ZTsKKworCXU4IHBlcm1fYWRkcltNQUNfQUREUl9MRU5dOworCXU4IG92ZXJyaWRlX2FkZHJbTUFDX0FERFJfTEVOXTsKKwl1OCBhZGRyZXNzW0FERElUSU9OQUxfRU5UUklFU11bTUFDX0FERFJfTEVOXTsKKwl1OCBhZGRyX2xpc3Rfc2l6ZTsKKwl1OCBtYWNfb3ZlcnJpZGU7CisJdTggcHJvbWlzY3VvdXM7CisJdTggYWxsX211bHRpOworCXU4IG11bHRpX2xpc3RbTUFYX01VTFRJQ0FTVF9MSVNUXVtNQUNfQUREUl9MRU5dOworCXU4IG11bHRpX2JpdHNbSFdfTVVMVElDQVNUX1NJWkVdOworCXU4IG11bHRpX2xpc3Rfc2l6ZTsKKworCXU4IGVuYWJsZWQ7CisJdTggcnhfc3RvcDsKKwl1OCByZXNlcnZlZDJbMV07CisKKwl1aW50IGZlYXR1cmVzOworCXVpbnQgb3ZlcnJpZGVzOworCisJdm9pZCAqcGFyZW50OworfTsKKworZW51bSB7CisJUEhZX05PX0ZMT1dfQ1RSTCwKKwlQSFlfRkxPV19DVFJMLAorCVBIWV9UWF9PTkxZLAorCVBIWV9SWF9PTkxZCit9OworCisvKioKKyAqIHN0cnVjdCBrc3pfcG9ydCAtIFZpcnR1YWwgcG9ydCBkYXRhIHN0cnVjdHVyZQorICogQGR1cGxleDoJCUR1cGxleCBtb2RlIHNldHRpbmcuICAxIGZvciBoYWxmIGR1cGxleCwgMiBmb3IgZnVsbAorICogCQkJZHVwbGV4LCBhbmQgMCBmb3IgYXV0bywgd2hpY2ggbm9ybWFsbHkgcmVzdWx0cyBpbiBmdWxsCisgKiAJCQlkdXBsZXguCisgKiBAc3BlZWQ6CQlTcGVlZCBzZXR0aW5nLiAgMTAgZm9yIDEwIE1iaXQsIDEwMCBmb3IgMTAwIE1iaXQsIGFuZAorICogCQkJMCBmb3IgYXV0bywgd2hpY2ggbm9ybWFsbHkgcmVzdWx0cyBpbiAxMDAgTWJpdC4KKyAqIEBmb3JjZV9saW5rOgkJRm9yY2UgbGluayBzZXR0aW5nLiAgMCBmb3IgYXV0by1uZWdvdGlhdGlvbiwgYW5kIDEgZm9yCisgKiAJCQlmb3JjZS4KKyAqIEBmbG93X2N0cmw6CQlGbG93IGNvbnRyb2wgc2V0dGluZy4gIFBIWV9OT19GTE9XX0NUUkwgZm9yIG5vIGZsb3cKKyAqIAkJCWNvbnRyb2wsIGFuZCBQSFlfRkxPV19DVFJMIGZvciBmbG93IGNvbnRyb2wuCisgKiAJCQlQSFlfVFhfT05MWSBhbmQgUEhZX1JYX09OTFkgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIDEwMAorICogCQkJTWJpdCBQSFkuCisgKiBAZmlyc3RfcG9ydDoJCUluZGV4IG9mIGZpcnN0IHBvcnQgdGhpcyBwb3J0IHN1cHBvcnRzLgorICogQG1pYl9wb3J0X2NudDoJTnVtYmVyIG9mIHBvcnRzIHdpdGggTUlCIGNvdW50ZXJzLgorICogQHBvcnRfY250OgkJTnVtYmVyIG9mIHBvcnRzIHRoaXMgcG9ydCBzdXBwb3J0cy4KKyAqIEBjb3VudGVyOgkJUG9ydCBzdGF0aXN0aWNzIGNvdW50ZXIuCisgKiBAaHc6CQkJUG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmUuCisgKiBAbGlua2VkOgkJUG9pbnRlciB0byBwb3J0IGluZm9ybWF0aW9uIGxpbmtlZCB0byB0aGlzIHBvcnQuCisgKi8KK3N0cnVjdCBrc3pfcG9ydCB7CisJdTggZHVwbGV4OworCXU4IHNwZWVkOworCXU4IGZvcmNlX2xpbms7CisJdTggZmxvd19jdHJsOworCisJaW50IGZpcnN0X3BvcnQ7CisJaW50IG1pYl9wb3J0X2NudDsKKwlpbnQgcG9ydF9jbnQ7CisJdTY0IGNvdW50ZXJbT0lEX0NPVU5URVJfTEFTVF07CisKKwlzdHJ1Y3Qga3N6X2h3ICpodzsKKwlzdHJ1Y3Qga3N6X3BvcnRfaW5mbyAqbGlua2VkOworfTsKKworLyoqCisgKiBzdHJ1Y3Qga3N6X3RpbWVyX2luZm8gLSBUaW1lciBpbmZvcm1hdGlvbiBkYXRhIHN0cnVjdHVyZQorICogQHRpbWVyOglLZXJuZWwgdGltZXIuCisgKiBAY250OglSdW5uaW5nIHRpbWVyIGNvdW50ZXIuCisgKiBAbWF4OglOdW1iZXIgb2YgdGltZXMgdG8gcnVuIHRpbWVyOyAtMSBmb3IgaW5maW5pdHkuCisgKiBAcGVyaW9kOglUaW1lciBwZXJpb2QgaW4gamlmZmllcy4KKyAqLworc3RydWN0IGtzel90aW1lcl9pbmZvIHsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlpbnQgY250OworCWludCBtYXg7CisJaW50IHBlcmlvZDsKK307CisKKy8qKgorICogc3RydWN0IGtzel9zaGFyZWRfbWVtIC0gT1MgZGVwZW5kZW50IHNoYXJlZCBtZW1vcnkgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBkbWFfYWRkcjoJUGh5c2ljYWwgRE1BIGFkZHJlc3MgYWxsb2NhdGVkLgorICogQGFsbG9jX3NpemU6CUFsbG9jYXRpb24gc2l6ZS4KKyAqIEBwaHlzOglBY3R1YWwgcGh5c2ljYWwgYWRkcmVzcyB1c2VkLgorICogQGFsbG9jX3ZpcnQ6CVZpcnR1YWwgYWRkcmVzcyBhbGxvY2F0ZWQuCisgKiBAdmlydDoJQWN0dWFsIHZpcnR1YWwgYWRkcmVzcyB1c2VkLgorICovCitzdHJ1Y3Qga3N6X3NoYXJlZF9tZW0geworCWRtYV9hZGRyX3QgZG1hX2FkZHI7CisJdWludCBhbGxvY19zaXplOworCXVpbnQgcGh5czsKKwl1OCAqYWxsb2NfdmlydDsKKwl1OCAqdmlydDsKK307CisKKy8qKgorICogc3RydWN0IGtzel9jb3VudGVyX2luZm8gLSBPUyBkZXBlbmRlbnQgY291bnRlciBpbmZvcm1hdGlvbiBkYXRhIHN0cnVjdHVyZQorICogQGNvdW50ZXI6CVdhaXQgcXVldWUgdG8gd2FrZXVwIGFmdGVyIGNvdW50ZXJzIGFyZSByZWFkLgorICogQHRpbWU6CU5leHQgdGltZSBpbiBqaWZmaWVzIHRvIHJlYWQgY291bnRlci4KKyAqIEByZWFkOglJbmRpY2F0aW9uIG9mIGNvdW50ZXJzIHJlYWQgaW4gZnVsbCBvciBub3QuCisgKi8KK3N0cnVjdCBrc3pfY291bnRlcl9pbmZvIHsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBjb3VudGVyOworCXVuc2lnbmVkIGxvbmcgdGltZTsKKwlpbnQgcmVhZDsKK307CisKKy8qKgorICogc3RydWN0IGRldl9pbmZvIC0gTmV0d29yayBkZXZpY2UgaW5mb3JtYXRpb24gZGF0YSBzdHJ1Y3R1cmUKKyAqIEBkZXY6CQlQb2ludGVyIHRvIG5ldHdvcmsgZGV2aWNlLgorICogQHBkZXY6CQlQb2ludGVyIHRvIFBDSSBkZXZpY2UuCisgKiBAaHc6CQkJSGFyZHdhcmUgc3RydWN0dXJlLgorICogQGRlc2NfcG9vbDoJCVBoeXNpY2FsIG1lbW9yeSB1c2VkIGZvciBkZXNjcmlwdG9yIHBvb2wuCisgKiBAaHdsb2NrOgkJU3BpbmxvY2sgdG8gcHJldmVudCBoYXJkd2FyZSBmcm9tIGFjY2Vzc2luZy4KKyAqIEBsb2NrOgkJTXV0ZXggbG9jayB0byBwcmV2ZW50IGRldmljZSBmcm9tIGFjY2Vzc2luZy4KKyAqIEBkZXZfcmN2OgkJUmVjZWl2ZSBwcm9jZXNzIGZ1bmN0aW9uIHVzZWQuCisgKiBAbGFzdF9za2I6CQlTb2NrZXQgYnVmZmVyIGFsbG9jYXRlZCBmb3IgZGVzY3JpcHRvciByeCBmcmFnbWVudHMuCisgKiBAc2tiX2luZGV4OgkJQnVmZmVyIGluZGV4IGZvciByZWNlaXZpbmcgZnJhZ21lbnRzLgorICogQHNrYl9sZW46CQlCdWZmZXIgbGVuZ3RoIGZvciByZWNlaXZpbmcgZnJhZ21lbnRzLgorICogQG1pYl9yZWFkOgkJV29ya3F1ZXVlIHRvIHJlYWQgTUlCIGNvdW50ZXJzLgorICogQG1pYl90aW1lcl9pbmZvOglUaW1lciB0byByZWFkIE1JQiBjb3VudGVycy4KKyAqIEBjb3VudGVyOgkJVXNlZCBmb3IgTUlCIHJlYWRpbmcuCisgKiBAbXR1OgkJQ3VycmVudCBNVFUgdXNlZC4gIFRoZSBkZWZhdWx0IGlzIFJFR1VMQVJfUlhfQlVGX1NJWkU7CisgKiAJCQl0aGUgbWF4aW11bSBpcyBNQVhfUlhfQlVGX1NJWkUuCisgKiBAb3BlbmVkOgkJQ291bnRlciB0byBrZWVwIHRyYWNrIG9mIGRldmljZSBvcGVuLgorICogQHJ4X3Rhc2tsZXQ6CQlSZWNlaXZlIHByb2Nlc3NpbmcgdGFza2xldC4KKyAqIEB0eF90YXNrbGV0OgkJVHJhbnNtaXQgcHJvY2Vzc2luZyB0YXNrbGV0LgorICogQHdvbF9lbmFibGU6CQlXYWtlLW9uLUxBTiBlbmFibGUgc2V0IGJ5IGV0aHRvb2wuCisgKiBAd29sX3N1cHBvcnQ6CVdha2Utb24tTEFOIHN1cHBvcnQgdXNlZCBieSBldGh0b29sLgorICogQHBtZV93YWl0OgkJVXNlZCBmb3IgS1NaODg0MSBwb3dlciBtYW5hZ2VtZW50LgorICovCitzdHJ1Y3QgZGV2X2luZm8geworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisKKwlzdHJ1Y3Qga3N6X2h3IGh3OworCXN0cnVjdCBrc3pfc2hhcmVkX21lbSBkZXNjX3Bvb2w7CisKKwlzcGlubG9ja190IGh3bG9jazsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKworCWludCAoKmRldl9yY3YpKHN0cnVjdCBkZXZfaW5mbyAqKTsKKworCXN0cnVjdCBza19idWZmICpsYXN0X3NrYjsKKwlpbnQgc2tiX2luZGV4OworCWludCBza2JfbGVuOworCisJc3RydWN0IHdvcmtfc3RydWN0IG1pYl9yZWFkOworCXN0cnVjdCBrc3pfdGltZXJfaW5mbyBtaWJfdGltZXJfaW5mbzsKKwlzdHJ1Y3Qga3N6X2NvdW50ZXJfaW5mbyBjb3VudGVyW1RPVEFMX1BPUlRfTlVNXTsKKworCWludCBtdHU7CisJaW50IG9wZW5lZDsKKworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCByeF90YXNrbGV0OworCXN0cnVjdCB0YXNrbGV0X3N0cnVjdCB0eF90YXNrbGV0OworCisJaW50IHdvbF9lbmFibGU7CisJaW50IHdvbF9zdXBwb3J0OworCXVuc2lnbmVkIGxvbmcgcG1lX3dhaXQ7Cit9OworCisvKioKKyAqIHN0cnVjdCBkZXZfcHJpdiAtIE5ldHdvcmsgZGV2aWNlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmUKKyAqIEBhZGFwdGVyOgkJQWRhcHRlciBkZXZpY2UgaW5mb3JtYXRpb24uCisgKiBAcG9ydDoJCVBvcnQgaW5mb3JtYXRpb24uCisgKiBAbW9uaXRvcl90aW1lX2luZm86CVRpbWVyIHRvIG1vbml0b3IgcG9ydHMuCisgKiBAc3RhdHM6CQlOZXR3b3JrIHN0YXRpc3RpY3MuCisgKiBAcHJvY19zZW06CQlTZW1hcGhvcmUgZm9yIHByb2MgYWNjZXNzaW5nLgorICogQGlkOgkJCURldmljZSBJRC4KKyAqIEBtaWlfaWY6CQlNSUkgaW50ZXJmYWNlIGluZm9ybWF0aW9uLgorICogQGFkdmVydGlzaW5nOglUZW1wb3JhcnkgdmFyaWFibGUgdG8gc3RvcmUgYWR2ZXJ0aXNlZCBzZXR0aW5ncy4KKyAqIEBtc2dfZW5hYmxlOgkJVGhlIG1lc3NhZ2UgZmxhZ3MgY29udHJvbGxpbmcgZHJpdmVyIG91dHB1dC4KKyAqIEBtZWRpYV9zdGF0ZToJVGhlIGNvbm5lY3Rpb24gc3RhdHVzIG9mIHRoZSBkZXZpY2UuCisgKiBAbXVsdGljYXN0OgkJVGhlIGFsbCBtdWx0aWNhc3Qgc3RhdGUgb2YgdGhlIGRldmljZS4KKyAqIEBwcm9taXNjdW91czoJVGhlIHByb21pc2N1b3VzIHN0YXRlIG9mIHRoZSBkZXZpY2UuCisgKi8KK3N0cnVjdCBkZXZfcHJpdiB7CisJc3RydWN0IGRldl9pbmZvICphZGFwdGVyOworCXN0cnVjdCBrc3pfcG9ydCBwb3J0OworCXN0cnVjdCBrc3pfdGltZXJfaW5mbyBtb25pdG9yX3RpbWVyX2luZm87CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CisKKwlzdHJ1Y3Qgc2VtYXBob3JlIHByb2Nfc2VtOworCWludCBpZDsKKworCXN0cnVjdCBtaWlfaWZfaW5mbyBtaWlfaWY7CisJdTMyIGFkdmVydGlzaW5nOworCisJdTMyIG1zZ19lbmFibGU7CisJaW50IG1lZGlhX3N0YXRlOworCWludCBtdWx0aWNhc3Q7CisJaW50IHByb21pc2N1b3VzOworfTsKKworI2RlZmluZSBrc19pbmZvKF9rcywgX21zZy4uLikgZGV2X2luZm8oJihfa3MpLT5wZGV2LT5kZXYsIF9tc2cpCisjZGVmaW5lIGtzX3dhcm4oX2tzLCBfbXNnLi4uKSBkZXZfd2FybigmKF9rcyktPnBkZXYtPmRldiwgX21zZykKKyNkZWZpbmUga3NfZGJnKF9rcywgX21zZy4uLikgZGV2X2RiZygmKF9rcyktPnBkZXYtPmRldiwgX21zZykKKyNkZWZpbmUga3NfZXJyKF9rcywgX21zZy4uLikgZGV2X2VycigmKF9rcyktPnBkZXYtPmRldiwgX21zZykKKworI2RlZmluZSBEUlZfTkFNRQkJIktTWjg4NFggUENJIgorI2RlZmluZSBERVZJQ0VfTkFNRQkJIktTWjg4NHggUENJIgorI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMC4wIgorI2RlZmluZSBEUlZfUkVMREFURQkJIkZlYiA4LCAyMDEwIgorCitzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CisJIk1pY3JlbCAiIERFVklDRV9OQU1FICIgIiBEUlZfVkVSU0lPTiAiICgiIERSVl9SRUxEQVRFICIpIjsKKworc3RhdGljIHU4IERFRkFVTFRfTUFDX0FERFJFU1NbXSA9IHsgMHgwMCwgMHgxMCwgMHhBMSwgMHg4OCwgMHg0MiwgMHgwMSB9OworCisvKgorICogSW50ZXJydXB0IHByb2Nlc3NpbmcgcHJpbWFyeSByb3V0aW5lcworICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19hY2tfaW50cihzdHJ1Y3Qga3N6X2h3ICpodywgdWludCBpbnRlcnJ1cHQpCit7CisJd3JpdGVsKGludGVycnVwdCwgaHctPmlvICsgS1M4ODRYX0lOVEVSUlVQVFNfU1RBVFVTKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh3X2Rpc19pbnRyKHN0cnVjdCBrc3pfaHcgKmh3KQoreworCWh3LT5pbnRyX2Jsb2NrZWQgPSBody0+aW50cl9tYXNrOworCXdyaXRlbCgwLCBody0+aW8gKyBLUzg4NFhfSU5URVJSVVBUU19FTkFCTEUpOworCWh3LT5pbnRyX3NldCA9IHJlYWRsKGh3LT5pbyArIEtTODg0WF9JTlRFUlJVUFRTX0VOQUJMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19zZXRfaW50cihzdHJ1Y3Qga3N6X2h3ICpodywgdWludCBpbnRlcnJ1cHQpCit7CisJaHctPmludHJfc2V0ID0gaW50ZXJydXB0OworCXdyaXRlbChpbnRlcnJ1cHQsIGh3LT5pbyArIEtTODg0WF9JTlRFUlJVUFRTX0VOQUJMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19lbmFfaW50cihzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlody0+aW50cl9ibG9ja2VkID0gMDsKKwlod19zZXRfaW50cihodywgaHctPmludHJfbWFzayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19kaXNfaW50cl9iaXQoc3RydWN0IGtzel9odyAqaHcsIHVpbnQgYml0KQoreworCWh3LT5pbnRyX21hc2sgJj0gfihiaXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfdHVybl9vZmZfaW50cihzdHJ1Y3Qga3N6X2h3ICpodywgdWludCBpbnRlcnJ1cHQpCit7CisJdTMyIHJlYWRfaW50cjsKKworCXJlYWRfaW50ciA9IHJlYWRsKGh3LT5pbyArIEtTODg0WF9JTlRFUlJVUFRTX0VOQUJMRSk7CisJaHctPmludHJfc2V0ID0gcmVhZF9pbnRyICYgfmludGVycnVwdDsKKwl3cml0ZWwoaHctPmludHJfc2V0LCBody0+aW8gKyBLUzg4NFhfSU5URVJSVVBUU19FTkFCTEUpOworCWh3X2Rpc19pbnRyX2JpdChodywgaW50ZXJydXB0KTsKK30KKworLyoqCisgKiBod190dXJuX29uX2ludHIgLSB0dXJuIG9uIHNwZWNpZmllZCBpbnRlcnJ1cHRzCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAYml0OglUaGUgaW50ZXJydXB0IGJpdHMgdG8gYmUgb24uCisgKgorICogVGhpcyByb3V0aW5lIHR1cm5zIG9uIHRoZSBzcGVjaWZpZWQgaW50ZXJydXB0cyBpbiB0aGUgaW50ZXJydXB0IG1hc2sgc28gdGhhdAorICogdGhvc2UgaW50ZXJydXB0cyB3aWxsIGJlIGVuYWJsZWQuCisgKi8KK3N0YXRpYyB2b2lkIGh3X3R1cm5fb25faW50cihzdHJ1Y3Qga3N6X2h3ICpodywgdTMyIGJpdCkKK3sKKwlody0+aW50cl9tYXNrIHw9IGJpdDsKKworCWlmICghaHctPmludHJfYmxvY2tlZCkKKwkJaHdfc2V0X2ludHIoaHcsIGh3LT5pbnRyX21hc2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfZW5hX2ludHJfYml0KHN0cnVjdCBrc3pfaHcgKmh3LCB1aW50IGludGVycnVwdCkKK3sKKwl1MzIgcmVhZF9pbnRyOworCisJcmVhZF9pbnRyID0gcmVhZGwoaHctPmlvICsgS1M4ODRYX0lOVEVSUlVQVFNfRU5BQkxFKTsKKwlody0+aW50cl9zZXQgPSByZWFkX2ludHIgfCBpbnRlcnJ1cHQ7CisJd3JpdGVsKGh3LT5pbnRyX3NldCwgaHctPmlvICsgS1M4ODRYX0lOVEVSUlVQVFNfRU5BQkxFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh3X3JlYWRfaW50cihzdHJ1Y3Qga3N6X2h3ICpodywgdWludCAqc3RhdHVzKQoreworCSpzdGF0dXMgPSByZWFkbChody0+aW8gKyBLUzg4NFhfSU5URVJSVVBUU19TVEFUVVMpOworCSpzdGF0dXMgPSAqc3RhdHVzICYgaHctPmludHJfc2V0OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcmVzdG9yZV9pbnRyKHN0cnVjdCBrc3pfaHcgKmh3LCB1aW50IGludGVycnVwdCkKK3sKKwlpZiAoaW50ZXJydXB0KQorCQlod19lbmFfaW50cihodyk7Cit9CisKKy8qKgorICogaHdfYmxvY2tfaW50ciAtIGJsb2NrIGhhcmR3YXJlIGludGVycnVwdHMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGJsb2NrcyBhbGwgaW50ZXJydXB0cyBvZiB0aGUgaGFyZHdhcmUgYW5kIHJldHVybnMgdGhlIGN1cnJlbnQKKyAqIGludGVycnVwdCBlbmFibGUgbWFzayBzbyB0aGF0IGludGVycnVwdHMgY2FuIGJlIHJlc3RvcmVkIGxhdGVyLgorICoKKyAqIFJldHVybiB0aGUgY3VycmVudCBpbnRlcnJ1cHQgZW5hYmxlIG1hc2suCisgKi8KK3N0YXRpYyB1aW50IGh3X2Jsb2NrX2ludHIoc3RydWN0IGtzel9odyAqaHcpCit7CisJdWludCBpbnRlcnJ1cHQgPSAwOworCisJaWYgKCFody0+aW50cl9ibG9ja2VkKSB7CisJCWh3X2Rpc19pbnRyKGh3KTsKKwkJaW50ZXJydXB0ID0gaHctPmludHJfYmxvY2tlZDsKKwl9CisJcmV0dXJuIGludGVycnVwdDsKK30KKworLyoKKyAqIEhhcmR3YXJlIGRlc2NyaXB0b3Igcm91dGluZXMKKyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgcmVzZXRfZGVzYyhzdHJ1Y3Qga3N6X2Rlc2MgKmRlc2MsIHVuaW9uIGRlc2Nfc3RhdCBzdGF0dXMpCit7CisJc3RhdHVzLnJ4Lmh3X293bmVkID0gMDsKKwlkZXNjLT5waHctPmN0cmwuZGF0YSA9IGNwdV90b19sZTMyKHN0YXR1cy5kYXRhKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlbGVhc2VfZGVzYyhzdHJ1Y3Qga3N6X2Rlc2MgKmRlc2MpCit7CisJZGVzYy0+c3cuY3RybC50eC5od19vd25lZCA9IDE7CisJaWYgKGRlc2MtPnN3LmJ1Zl9zaXplICE9IGRlc2MtPnN3LmJ1Zi5kYXRhKSB7CisJCWRlc2MtPnN3LmJ1Zl9zaXplID0gZGVzYy0+c3cuYnVmLmRhdGE7CisJCWRlc2MtPnBody0+YnVmLmRhdGEgPSBjcHVfdG9fbGUzMihkZXNjLT5zdy5idWYuZGF0YSk7CisJfQorCWRlc2MtPnBody0+Y3RybC5kYXRhID0gY3B1X3RvX2xlMzIoZGVzYy0+c3cuY3RybC5kYXRhKTsKK30KKworc3RhdGljIHZvaWQgZ2V0X3J4X3BrdChzdHJ1Y3Qga3N6X2Rlc2NfaW5mbyAqaW5mbywgc3RydWN0IGtzel9kZXNjICoqZGVzYykKK3sKKwkqZGVzYyA9ICZpbmZvLT5yaW5nW2luZm8tPmxhc3RdOworCWluZm8tPmxhc3QrKzsKKwlpbmZvLT5sYXN0ICY9IGluZm8tPm1hc2s7CisJaW5mby0+YXZhaWwtLTsKKwkoKmRlc2MpLT5zdy5idWYuZGF0YSAmPSB+S1NfREVTQ19SWF9NQVNLOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3J4X2J1ZihzdHJ1Y3Qga3N6X2Rlc2MgKmRlc2MsIHUzMiBhZGRyKQoreworCWRlc2MtPnBody0+YWRkciA9IGNwdV90b19sZTMyKGFkZHIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3J4X2xlbihzdHJ1Y3Qga3N6X2Rlc2MgKmRlc2MsIHUzMiBsZW4pCit7CisJZGVzYy0+c3cuYnVmLnJ4LmJ1Zl9zaXplID0gbGVuOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X3R4X3BrdChzdHJ1Y3Qga3N6X2Rlc2NfaW5mbyAqaW5mbywKKwlzdHJ1Y3Qga3N6X2Rlc2MgKipkZXNjKQoreworCSpkZXNjID0gJmluZm8tPnJpbmdbaW5mby0+bmV4dF07CisJaW5mby0+bmV4dCsrOworCWluZm8tPm5leHQgJj0gaW5mby0+bWFzazsKKwlpbmZvLT5hdmFpbC0tOworCSgqZGVzYyktPnN3LmJ1Zi5kYXRhICY9IH5LU19ERVNDX1RYX01BU0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdHhfYnVmKHN0cnVjdCBrc3pfZGVzYyAqZGVzYywgdTMyIGFkZHIpCit7CisJZGVzYy0+cGh3LT5hZGRyID0gY3B1X3RvX2xlMzIoYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdHhfbGVuKHN0cnVjdCBrc3pfZGVzYyAqZGVzYywgdTMyIGxlbikKK3sKKwlkZXNjLT5zdy5idWYudHguYnVmX3NpemUgPSBsZW47Cit9CisKKy8qIFN3aXRjaCBmdW5jdGlvbnMgKi8KKworI2RlZmluZSBUQUJMRV9SRUFECQkJMHgxMAorI2RlZmluZSBUQUJMRV9TRUxfU0hJRlQJCQkyCisKKyNkZWZpbmUgSFdfREVMQVkoaHcsIHJlZykJCQlcCisJZG8gewkJCQkJXAorCQl1MTYgZHVtbXk7CQkJXAorCQlkdW1teSA9IHJlYWR3KGh3LT5pbyArIHJlZyk7CVwKKwl9IHdoaWxlICgwKQorCisvKioKKyAqIHN3X3JfdGFibGUgLSByZWFkIDQgYnl0ZXMgb2YgZGF0YSBmcm9tIHN3aXRjaCB0YWJsZQorICogQGh3OgkJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHRhYmxlOglUaGUgdGFibGUgc2VsZWN0b3IuCisgKiBAYWRkcjoJVGhlIGFkZHJlc3Mgb2YgdGhlIHRhYmxlIGVudHJ5LgorICogQGRhdGE6CUJ1ZmZlciB0byBzdG9yZSB0aGUgcmVhZCBkYXRhLgorICoKKyAqIFRoaXMgcm91dGluZSByZWFkcyA0IGJ5dGVzIG9mIGRhdGEgZnJvbSB0aGUgdGFibGUgb2YgdGhlIHN3aXRjaC4KKyAqIEhhcmR3YXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHRvIG1pbmltaXplIGNvcnJ1cHRpb24gb2YgcmVhZCBkYXRhLgorICovCitzdGF0aWMgdm9pZCBzd19yX3RhYmxlKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgdGFibGUsIHUxNiBhZGRyLCB1MzIgKmRhdGEpCit7CisJdTE2IGN0cmxfYWRkcjsKKwl1aW50IGludGVycnVwdDsKKworCWN0cmxfYWRkciA9ICgoKHRhYmxlIDw8IFRBQkxFX1NFTF9TSElGVCkgfCBUQUJMRV9SRUFEKSA8PCA4KSB8IGFkZHI7CisKKwlpbnRlcnJ1cHQgPSBod19ibG9ja19pbnRyKGh3KTsKKworCXdyaXRldyhjdHJsX2FkZHIsIGh3LT5pbyArIEtTODg0WF9JQUNSX09GRlNFVCk7CisJSFdfREVMQVkoaHcsIEtTODg0WF9JQUNSX09GRlNFVCk7CisJKmRhdGEgPSByZWFkbChody0+aW8gKyBLUzg4NFhfQUNDX0RBVEFfMF9PRkZTRVQpOworCisJaHdfcmVzdG9yZV9pbnRyKGh3LCBpbnRlcnJ1cHQpOworfQorCisvKioKKyAqIHN3X3dfdGFibGVfNjQgLSB3cml0ZSA4IGJ5dGVzIG9mIGRhdGEgdG8gdGhlIHN3aXRjaCB0YWJsZQorICogQGh3OgkJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHRhYmxlOglUaGUgdGFibGUgc2VsZWN0b3IuCisgKiBAYWRkcjoJVGhlIGFkZHJlc3Mgb2YgdGhlIHRhYmxlIGVudHJ5LgorICogQGRhdGFfaGk6CVRoZSBoaWdoIHBhcnQgb2YgZGF0YSB0byBiZSB3cml0dGVuIChiaXQ2MyB+IGJpdDMyKS4KKyAqIEBkYXRhX2xvOglUaGUgbG93IHBhcnQgb2YgZGF0YSB0byBiZSB3cml0dGVuIChiaXQzMSB+IGJpdDApLgorICoKKyAqIFRoaXMgcm91dGluZSB3cml0ZXMgOCBieXRlcyBvZiBkYXRhIHRvIHRoZSB0YWJsZSBvZiB0aGUgc3dpdGNoLgorICogSGFyZHdhcmUgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgdG8gbWluaW1pemUgY29ycnVwdGlvbiBvZiB3cml0dGVuIGRhdGEuCisgKi8KK3N0YXRpYyB2b2lkIHN3X3dfdGFibGVfNjQoc3RydWN0IGtzel9odyAqaHcsIGludCB0YWJsZSwgdTE2IGFkZHIsIHUzMiBkYXRhX2hpLAorCXUzMiBkYXRhX2xvKQoreworCXUxNiBjdHJsX2FkZHI7CisJdWludCBpbnRlcnJ1cHQ7CisKKwljdHJsX2FkZHIgPSAoKHRhYmxlIDw8IFRBQkxFX1NFTF9TSElGVCkgPDwgOCkgfCBhZGRyOworCisJaW50ZXJydXB0ID0gaHdfYmxvY2tfaW50cihodyk7CisKKwl3cml0ZWwoZGF0YV9oaSwgaHctPmlvICsgS1M4ODRYX0FDQ19EQVRBXzRfT0ZGU0VUKTsKKwl3cml0ZWwoZGF0YV9sbywgaHctPmlvICsgS1M4ODRYX0FDQ19EQVRBXzBfT0ZGU0VUKTsKKworCXdyaXRldyhjdHJsX2FkZHIsIGh3LT5pbyArIEtTODg0WF9JQUNSX09GRlNFVCk7CisJSFdfREVMQVkoaHcsIEtTODg0WF9JQUNSX09GRlNFVCk7CisKKwlod19yZXN0b3JlX2ludHIoaHcsIGludGVycnVwdCk7Cit9CisKKy8qKgorICogc3dfd19zdGFfbWFjX3RhYmxlIC0gd3JpdGUgdG8gdGhlIHN0YXRpYyBNQUMgdGFibGUKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBhZGRyOglUaGUgYWRkcmVzcyBvZiB0aGUgdGFibGUgZW50cnkuCisgKiBAbWFjX2FkZHI6CVRoZSBNQUMgYWRkcmVzcy4KKyAqIEBwb3J0czoJVGhlIHBvcnQgbWVtYmVycy4KKyAqIEBvdmVycmlkZToJVGhlIGZsYWcgdG8gb3ZlcnJpZGUgdGhlIHBvcnQgcmVjZWl2ZS90cmFuc21pdCBzZXR0aW5ncy4KKyAqIEB2YWxpZDoJVGhlIGZsYWcgdG8gaW5kaWNhdGUgZW50cnkgaXMgdmFsaWQuCisgKiBAdXNlX2ZpZDoJVGhlIGZsYWcgdG8gaW5kaWNhdGUgdGhlIEZJRCBpcyB2YWxpZC4KKyAqIEBmaWQ6CVRoZSBGSUQgdmFsdWUuCisgKgorICogVGhpcyByb3V0aW5lIHdyaXRlcyBhbiBlbnRyeSBvZiB0aGUgc3RhdGljIE1BQyB0YWJsZSBvZiB0aGUgc3dpdGNoLiAgSXQKKyAqIGNhbGxzIHN3X3dfdGFibGVfNjQoKSB0byB3cml0ZSB0aGUgZGF0YS4KKyAqLworc3RhdGljIHZvaWQgc3dfd19zdGFfbWFjX3RhYmxlKHN0cnVjdCBrc3pfaHcgKmh3LCB1MTYgYWRkciwgdTggKm1hY19hZGRyLAorCXU4IHBvcnRzLCBpbnQgb3ZlcnJpZGUsIGludCB2YWxpZCwgaW50IHVzZV9maWQsIHU4IGZpZCkKK3sKKwl1MzIgZGF0YV9oaTsKKwl1MzIgZGF0YV9sbzsKKworCWRhdGFfbG8gPSAoKHUzMikgbWFjX2FkZHJbMl0gPDwgMjQpIHwKKwkJKCh1MzIpIG1hY19hZGRyWzNdIDw8IDE2KSB8CisJCSgodTMyKSBtYWNfYWRkcls0XSA8PCA4KSB8IG1hY19hZGRyWzVdOworCWRhdGFfaGkgPSAoKHUzMikgbWFjX2FkZHJbMF0gPDwgOCkgfCBtYWNfYWRkclsxXTsKKwlkYXRhX2hpIHw9ICh1MzIpIHBvcnRzIDw8IFNUQVRJQ19NQUNfRldEX1BPUlRTX1NISUZUOworCisJaWYgKG92ZXJyaWRlKQorCQlkYXRhX2hpIHw9IFNUQVRJQ19NQUNfVEFCTEVfT1ZFUlJJREU7CisJaWYgKHVzZV9maWQpIHsKKwkJZGF0YV9oaSB8PSBTVEFUSUNfTUFDX1RBQkxFX1VTRV9GSUQ7CisJCWRhdGFfaGkgfD0gKHUzMikgZmlkIDw8IFNUQVRJQ19NQUNfRklEX1NISUZUOworCX0KKwlpZiAodmFsaWQpCisJCWRhdGFfaGkgfD0gU1RBVElDX01BQ19UQUJMRV9WQUxJRDsKKworCXN3X3dfdGFibGVfNjQoaHcsIFRBQkxFX1NUQVRJQ19NQUMsIGFkZHIsIGRhdGFfaGksIGRhdGFfbG8pOworfQorCisvKioKKyAqIHN3X3Jfdmxhbl90YWJsZSAtIHJlYWQgZnJvbSB0aGUgVkxBTiB0YWJsZQorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQGFkZHI6CVRoZSBhZGRyZXNzIG9mIHRoZSB0YWJsZSBlbnRyeS4KKyAqIEB2aWQ6CUJ1ZmZlciB0byBzdG9yZSB0aGUgVklELgorICogQGZpZDoJQnVmZmVyIHRvIHN0b3JlIHRoZSBWSUQuCisgKiBAbWVtYmVyOglCdWZmZXIgdG8gc3RvcmUgdGhlIHBvcnQgbWVtYmVyc2hpcC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIGFuIGVudHJ5IG9mIHRoZSBWTEFOIHRhYmxlIG9mIHRoZSBzd2l0Y2guICBJdCBjYWxscworICogc3dfcl90YWJsZSgpIHRvIGdldCB0aGUgZGF0YS4KKyAqCisgKiBSZXR1cm4gMCBpZiB0aGUgZW50cnkgaXMgdmFsaWQ7IG90aGVyd2lzZSAtMS4KKyAqLworc3RhdGljIGludCBzd19yX3ZsYW5fdGFibGUoc3RydWN0IGtzel9odyAqaHcsIHUxNiBhZGRyLCB1MTYgKnZpZCwgdTggKmZpZCwKKwl1OCAqbWVtYmVyKQoreworCXUzMiBkYXRhOworCisJc3dfcl90YWJsZShodywgVEFCTEVfVkxBTiwgYWRkciwgJmRhdGEpOworCWlmIChkYXRhICYgVkxBTl9UQUJMRV9WQUxJRCkgeworCQkqdmlkID0gKHUxNikoZGF0YSAmIFZMQU5fVEFCTEVfVklEKTsKKwkJKmZpZCA9ICh1OCkoKGRhdGEgJiBWTEFOX1RBQkxFX0ZJRCkgPj4gVkxBTl9UQUJMRV9GSURfU0hJRlQpOworCQkqbWVtYmVyID0gKHU4KSgoZGF0YSAmIFZMQU5fVEFCTEVfTUVNQkVSU0hJUCkgPj4KKwkJCVZMQU5fVEFCTEVfTUVNQkVSU0hJUF9TSElGVCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLTE7Cit9CisKKy8qKgorICogcG9ydF9yX21pYl9jbnQgLSByZWFkIE1JQiBjb3VudGVyCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcG9ydDoJVGhlIHBvcnQgaW5kZXguCisgKiBAYWRkcjoJVGhlIGFkZHJlc3Mgb2YgdGhlIGNvdW50ZXIuCisgKiBAY250OglCdWZmZXIgdG8gc3RvcmUgdGhlIGNvdW50ZXIuCisgKgorICogVGhpcyByb3V0aW5lIHJlYWRzIGEgTUlCIGNvdW50ZXIgb2YgdGhlIHBvcnQuCisgKiBIYXJkd2FyZSBpbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCB0byBtaW5pbWl6ZSBjb3JydXB0aW9uIG9mIHJlYWQgZGF0YS4KKyAqLworc3RhdGljIHZvaWQgcG9ydF9yX21pYl9jbnQoc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0LCB1MTYgYWRkciwgdTY0ICpjbnQpCit7CisJdTMyIGRhdGE7CisJdTE2IGN0cmxfYWRkcjsKKwl1aW50IGludGVycnVwdDsKKwlpbnQgdGltZW91dDsKKworCWN0cmxfYWRkciA9IGFkZHIgKyBQT1JUX0NPVU5URVJfTlVNICogcG9ydDsKKworCWludGVycnVwdCA9IGh3X2Jsb2NrX2ludHIoaHcpOworCisJY3RybF9hZGRyIHw9ICgoKFRBQkxFX01JQiA8PCBUQUJMRV9TRUxfU0hJRlQpIHwgVEFCTEVfUkVBRCkgPDwgOCk7CisJd3JpdGV3KGN0cmxfYWRkciwgaHctPmlvICsgS1M4ODRYX0lBQ1JfT0ZGU0VUKTsKKwlIV19ERUxBWShodywgS1M4ODRYX0lBQ1JfT0ZGU0VUKTsKKworCWZvciAodGltZW91dCA9IDEwMDsgdGltZW91dCA+IDA7IHRpbWVvdXQtLSkgeworCQlkYXRhID0gcmVhZGwoaHctPmlvICsgS1M4ODRYX0FDQ19EQVRBXzBfT0ZGU0VUKTsKKworCQlpZiAoZGF0YSAmIE1JQl9DT1VOVEVSX1ZBTElEKSB7CisJCQlpZiAoZGF0YSAmIE1JQl9DT1VOVEVSX09WRVJGTE9XKQorCQkJCSpjbnQgKz0gTUlCX0NPVU5URVJfVkFMVUUgKyAxOworCQkJKmNudCArPSBkYXRhICYgTUlCX0NPVU5URVJfVkFMVUU7CisJCQlicmVhazsKKwkJfQorCX0KKworCWh3X3Jlc3RvcmVfaW50cihodywgaW50ZXJydXB0KTsKK30KKworLyoqCisgKiBwb3J0X3JfbWliX3BrdCAtIHJlYWQgZHJvcHBlZCBwYWNrZXQgY291bnRzCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcG9ydDoJVGhlIHBvcnQgaW5kZXguCisgKiBAY250OglCdWZmZXIgdG8gc3RvcmUgdGhlIHJlY2VpdmUgYW5kIHRyYW5zbWl0IGRyb3BwZWQgcGFja2V0IGNvdW50cy4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmVhZHMgdGhlIGRyb3BwZWQgcGFja2V0IGNvdW50cyBvZiB0aGUgcG9ydC4KKyAqIEhhcmR3YXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkIHRvIG1pbmltaXplIGNvcnJ1cHRpb24gb2YgcmVhZCBkYXRhLgorICovCitzdGF0aWMgdm9pZCBwb3J0X3JfbWliX3BrdChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBvcnQsIHUzMiAqbGFzdCwgdTY0ICpjbnQpCit7CisJdTMyIGN1cjsKKwl1MzIgZGF0YTsKKwl1MTYgY3RybF9hZGRyOworCXVpbnQgaW50ZXJydXB0OworCWludCBpbmRleDsKKworCWluZGV4ID0gS1NfTUlCX1BBQ0tFVF9EUk9QUEVEX1JYXzAgKyBwb3J0OworCWRvIHsKKwkJaW50ZXJydXB0ID0gaHdfYmxvY2tfaW50cihodyk7CisKKwkJY3RybF9hZGRyID0gKHUxNikgaW5kZXg7CisJCWN0cmxfYWRkciB8PSAoKChUQUJMRV9NSUIgPDwgVEFCTEVfU0VMX1NISUZUKSB8IFRBQkxFX1JFQUQpCisJCQk8PCA4KTsKKwkJd3JpdGV3KGN0cmxfYWRkciwgaHctPmlvICsgS1M4ODRYX0lBQ1JfT0ZGU0VUKTsKKwkJSFdfREVMQVkoaHcsIEtTODg0WF9JQUNSX09GRlNFVCk7CisJCWRhdGEgPSByZWFkbChody0+aW8gKyBLUzg4NFhfQUNDX0RBVEFfMF9PRkZTRVQpOworCisJCWh3X3Jlc3RvcmVfaW50cihodywgaW50ZXJydXB0KTsKKworCQlkYXRhICY9IE1JQl9QQUNLRVRfRFJPUFBFRDsKKwkJY3VyID0gKmxhc3Q7CisJCWlmIChkYXRhICE9IGN1cikgeworCQkJKmxhc3QgPSBkYXRhOworCQkJaWYgKGRhdGEgPCBjdXIpCisJCQkJZGF0YSArPSBNSUJfUEFDS0VUX0RST1BQRUQgKyAxOworCQkJZGF0YSAtPSBjdXI7CisJCQkqY250ICs9IGRhdGE7CisJCX0KKwkJKytsYXN0OworCQkrK2NudDsKKwkJaW5kZXggLT0gS1NfTUlCX1BBQ0tFVF9EUk9QUEVEX1RYIC0KKwkJCUtTX01JQl9QQUNLRVRfRFJPUFBFRF9UWF8wICsgMTsKKwl9IHdoaWxlIChpbmRleCA+PSBLU19NSUJfUEFDS0VUX0RST1BQRURfVFhfMCArIHBvcnQpOworfQorCisvKioKKyAqIHBvcnRfcl9jbnQgLSByZWFkIE1JQiBjb3VudGVycyBwZXJpb2RpY2FsbHkKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBwb3J0OglUaGUgcG9ydCBpbmRleC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byByZWFkIHRoZSBjb3VudGVycyBvZiB0aGUgcG9ydCBwZXJpb2RpY2FsbHkgdG8gYXZvaWQKKyAqIGNvdW50ZXIgb3ZlcmZsb3cuICBUaGUgaGFyZHdhcmUgc2hvdWxkIGJlIGFjcXVpcmVkIGZpcnN0IGJlZm9yZSBjYWxsaW5nIHRoaXMKKyAqIHJvdXRpbmUuCisgKgorICogUmV0dXJuIG5vbi16ZXJvIHdoZW4gbm90IGFsbCBjb3VudGVycyBub3QgcmVhZC4KKyAqLworc3RhdGljIGludCBwb3J0X3JfY250KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcG9ydCkKK3sKKwlzdHJ1Y3Qga3N6X3BvcnRfbWliICptaWIgPSAmaHctPnBvcnRfbWliW3BvcnRdOworCisJaWYgKG1pYi0+bWliX3N0YXJ0IDwgUE9SVF9DT1VOVEVSX05VTSkKKwkJd2hpbGUgKG1pYi0+Y250X3B0ciA8IFBPUlRfQ09VTlRFUl9OVU0pIHsKKwkJCXBvcnRfcl9taWJfY250KGh3LCBwb3J0LCBtaWItPmNudF9wdHIsCisJCQkJJm1pYi0+Y291bnRlclttaWItPmNudF9wdHJdKTsKKwkJCSsrbWliLT5jbnRfcHRyOworCQl9CisJaWYgKGh3LT5taWJfY250ID4gUE9SVF9DT1VOVEVSX05VTSkKKwkJcG9ydF9yX21pYl9wa3QoaHcsIHBvcnQsIG1pYi0+ZHJvcHBlZCwKKwkJCSZtaWItPmNvdW50ZXJbUE9SVF9DT1VOVEVSX05VTV0pOworCW1pYi0+Y250X3B0ciA9IDA7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogcG9ydF9pbml0X2NudCAtIGluaXRpYWxpemUgTUlCIGNvdW50ZXIgdmFsdWVzCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcG9ydDoJVGhlIHBvcnQgaW5kZXguCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSBhbGwgY291bnRlcnMgdG8gemVybyBpZiB0aGUgaGFyZHdhcmUKKyAqIGNhbm5vdCBkbyBpdCBhZnRlciByZXNldC4KKyAqLworc3RhdGljIHZvaWQgcG9ydF9pbml0X2NudChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBvcnQpCit7CisJc3RydWN0IGtzel9wb3J0X21pYiAqbWliID0gJmh3LT5wb3J0X21pYltwb3J0XTsKKworCW1pYi0+Y250X3B0ciA9IDA7CisJaWYgKG1pYi0+bWliX3N0YXJ0IDwgUE9SVF9DT1VOVEVSX05VTSkKKwkJZG8geworCQkJcG9ydF9yX21pYl9jbnQoaHcsIHBvcnQsIG1pYi0+Y250X3B0ciwKKwkJCQkmbWliLT5jb3VudGVyW21pYi0+Y250X3B0cl0pOworCQkJKyttaWItPmNudF9wdHI7CisJCX0gd2hpbGUgKG1pYi0+Y250X3B0ciA8IFBPUlRfQ09VTlRFUl9OVU0pOworCWlmIChody0+bWliX2NudCA+IFBPUlRfQ09VTlRFUl9OVU0pCisJCXBvcnRfcl9taWJfcGt0KGh3LCBwb3J0LCBtaWItPmRyb3BwZWQsCisJCQkmbWliLT5jb3VudGVyW1BPUlRfQ09VTlRFUl9OVU1dKTsKKwltZW1zZXQoKHZvaWQgKikgbWliLT5jb3VudGVyLCAwLCBzaXplb2YodTY0KSAqIFRPVEFMX1BPUlRfQ09VTlRFUl9OVU0pOworCW1pYi0+Y250X3B0ciA9IDA7Cit9CisKKy8qCisgKiBQb3J0IGZ1bmN0aW9ucworICovCisKKy8qKgorICogcG9ydF9jaGsgLSBjaGVjayBwb3J0IHJlZ2lzdGVyIGJpdHMKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBwb3J0OglUaGUgcG9ydCBpbmRleC4KKyAqIEBvZmZzZXQ6CVRoZSBvZmZzZXQgb2YgdGhlIHBvcnQgcmVnaXN0ZXIuCisgKiBAYml0czoJVGhlIGRhdGEgYml0cyB0byBjaGVjay4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgYml0cyBvZiB0aGUgcG9ydCByZWdpc3RlciBhcmUgc2V0CisgKiBvciBub3QuCisgKgorICogUmV0dXJuIDAgaWYgdGhlIGJpdHMgYXJlIG5vdCBzZXQuCisgKi8KK3N0YXRpYyBpbnQgcG9ydF9jaGsoc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0LCBpbnQgb2Zmc2V0LCB1MTYgYml0cykKK3sKKwl1MzIgYWRkcjsKKwl1MTYgZGF0YTsKKworCVBPUlRfQ1RSTF9BRERSKHBvcnQsIGFkZHIpOworCWFkZHIgKz0gb2Zmc2V0OworCWRhdGEgPSByZWFkdyhody0+aW8gKyBhZGRyKTsKKwlyZXR1cm4gKGRhdGEgJiBiaXRzKSA9PSBiaXRzOworfQorCisvKioKKyAqIHBvcnRfY2ZnIC0gc2V0IHBvcnQgcmVnaXN0ZXIgYml0cworICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHBvcnQ6CVRoZSBwb3J0IGluZGV4LgorICogQG9mZnNldDoJVGhlIG9mZnNldCBvZiB0aGUgcG9ydCByZWdpc3Rlci4KKyAqIEBiaXRzOglUaGUgZGF0YSBiaXRzIHRvIHNldC4KKyAqIEBzZXQ6CVRoZSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0aGUgYml0cyBhcmUgdG8gYmUgc2V0IG9yIG5vdC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgc2V0cyBvciByZXNldHMgdGhlIHNwZWNpZmllZCBiaXRzIG9mIHRoZSBwb3J0IHJlZ2lzdGVyLgorICovCitzdGF0aWMgdm9pZCBwb3J0X2NmZyhzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBvcnQsIGludCBvZmZzZXQsIHUxNiBiaXRzLAorCWludCBzZXQpCit7CisJdTMyIGFkZHI7CisJdTE2IGRhdGE7CisKKwlQT1JUX0NUUkxfQUREUihwb3J0LCBhZGRyKTsKKwlhZGRyICs9IG9mZnNldDsKKwlkYXRhID0gcmVhZHcoaHctPmlvICsgYWRkcik7CisJaWYgKHNldCkKKwkJZGF0YSB8PSBiaXRzOworCWVsc2UKKwkJZGF0YSAmPSB+Yml0czsKKwl3cml0ZXcoZGF0YSwgaHctPmlvICsgYWRkcik7Cit9CisKKy8qKgorICogcG9ydF9jaGtfc2hpZnQgLSBjaGVjayBwb3J0IGJpdAorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHBvcnQ6CVRoZSBwb3J0IGluZGV4LgorICogQG9mZnNldDoJVGhlIG9mZnNldCBvZiB0aGUgcmVnaXN0ZXIuCisgKiBAc2hpZnQ6CU51bWJlciBvZiBiaXRzIHRvIHNoaWZ0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCBwb3J0IGlzIHNldCBpbiB0aGUgcmVnaXN0ZXIgb3IKKyAqIG5vdC4KKyAqCisgKiBSZXR1cm4gMCBpZiB0aGUgcG9ydCBpcyBub3Qgc2V0LgorICovCitzdGF0aWMgaW50IHBvcnRfY2hrX3NoaWZ0KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcG9ydCwgdTMyIGFkZHIsIGludCBzaGlmdCkKK3sKKwl1MTYgZGF0YTsKKwl1MTYgYml0ID0gMSA8PCBwb3J0OworCisJZGF0YSA9IHJlYWR3KGh3LT5pbyArIGFkZHIpOworCWRhdGEgPj49IHNoaWZ0OworCXJldHVybiAoZGF0YSAmIGJpdCkgPT0gYml0OworfQorCisvKioKKyAqIHBvcnRfY2ZnX3NoaWZ0IC0gc2V0IHBvcnQgYml0CisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcG9ydDoJVGhlIHBvcnQgaW5kZXguCisgKiBAb2Zmc2V0OglUaGUgb2Zmc2V0IG9mIHRoZSByZWdpc3Rlci4KKyAqIEBzaGlmdDoJTnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQuCisgKiBAc2V0OglUaGUgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHBvcnQgaXMgdG8gYmUgc2V0IG9yIG5vdC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgc2V0cyBvciByZXNldHMgdGhlIHNwZWNpZmllZCBwb3J0IGluIHRoZSByZWdpc3Rlci4KKyAqLworc3RhdGljIHZvaWQgcG9ydF9jZmdfc2hpZnQoc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0LCB1MzIgYWRkciwgaW50IHNoaWZ0LAorCWludCBzZXQpCit7CisJdTE2IGRhdGE7CisJdTE2IGJpdHMgPSAxIDw8IHBvcnQ7CisKKwlkYXRhID0gcmVhZHcoaHctPmlvICsgYWRkcik7CisJYml0cyA8PD0gc2hpZnQ7CisJaWYgKHNldCkKKwkJZGF0YSB8PSBiaXRzOworCWVsc2UKKwkJZGF0YSAmPSB+Yml0czsKKwl3cml0ZXcoZGF0YSwgaHctPmlvICsgYWRkcik7Cit9CisKKy8qKgorICogcG9ydF9yOCAtIHJlYWQgYnl0ZSBmcm9tIHBvcnQgcmVnaXN0ZXIKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBwb3J0OglUaGUgcG9ydCBpbmRleC4KKyAqIEBvZmZzZXQ6CVRoZSBvZmZzZXQgb2YgdGhlIHBvcnQgcmVnaXN0ZXIuCisgKiBAZGF0YToJQnVmZmVyIHRvIHN0b3JlIHRoZSBkYXRhLgorICoKKyAqIFRoaXMgcm91dGluZSByZWFkcyBhIGJ5dGUgZnJvbSB0aGUgcG9ydCByZWdpc3Rlci4KKyAqLworc3RhdGljIHZvaWQgcG9ydF9yOChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBvcnQsIGludCBvZmZzZXQsIHU4ICpkYXRhKQoreworCXUzMiBhZGRyOworCisJUE9SVF9DVFJMX0FERFIocG9ydCwgYWRkcik7CisJYWRkciArPSBvZmZzZXQ7CisJKmRhdGEgPSByZWFkYihody0+aW8gKyBhZGRyKTsKK30KKworLyoqCisgKiBwb3J0X3IxNiAtIHJlYWQgd29yZCBmcm9tIHBvcnQgcmVnaXN0ZXIuCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcG9ydDoJVGhlIHBvcnQgaW5kZXguCisgKiBAb2Zmc2V0OglUaGUgb2Zmc2V0IG9mIHRoZSBwb3J0IHJlZ2lzdGVyLgorICogQGRhdGE6CUJ1ZmZlciB0byBzdG9yZSB0aGUgZGF0YS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmVhZHMgYSB3b3JkIGZyb20gdGhlIHBvcnQgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIHBvcnRfcjE2KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcG9ydCwgaW50IG9mZnNldCwgdTE2ICpkYXRhKQoreworCXUzMiBhZGRyOworCisJUE9SVF9DVFJMX0FERFIocG9ydCwgYWRkcik7CisJYWRkciArPSBvZmZzZXQ7CisJKmRhdGEgPSByZWFkdyhody0+aW8gKyBhZGRyKTsKK30KKworLyoqCisgKiBwb3J0X3cxNiAtIHdyaXRlIHdvcmQgdG8gcG9ydCByZWdpc3Rlci4KKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBwb3J0OglUaGUgcG9ydCBpbmRleC4KKyAqIEBvZmZzZXQ6CVRoZSBvZmZzZXQgb2YgdGhlIHBvcnQgcmVnaXN0ZXIuCisgKiBAZGF0YToJRGF0YSB0byB3cml0ZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgd3JpdGVzIGEgd29yZCB0byB0aGUgcG9ydCByZWdpc3Rlci4KKyAqLworc3RhdGljIHZvaWQgcG9ydF93MTYoc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0LCBpbnQgb2Zmc2V0LCB1MTYgZGF0YSkKK3sKKwl1MzIgYWRkcjsKKworCVBPUlRfQ1RSTF9BRERSKHBvcnQsIGFkZHIpOworCWFkZHIgKz0gb2Zmc2V0OworCXdyaXRldyhkYXRhLCBody0+aW8gKyBhZGRyKTsKK30KKworLyoqCisgKiBzd19jaGsgLSBjaGVjayBzd2l0Y2ggcmVnaXN0ZXIgYml0cworICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQGFkZHI6CVRoZSBhZGRyZXNzIG9mIHRoZSBzd2l0Y2ggcmVnaXN0ZXIuCisgKiBAYml0czoJVGhlIGRhdGEgYml0cyB0byBjaGVjay4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgYml0cyBvZiB0aGUgc3dpdGNoIHJlZ2lzdGVyIGFyZQorICogc2V0IG9yIG5vdC4KKyAqCisgKiBSZXR1cm4gMCBpZiB0aGUgYml0cyBhcmUgbm90IHNldC4KKyAqLworc3RhdGljIGludCBzd19jaGsoc3RydWN0IGtzel9odyAqaHcsIHUzMiBhZGRyLCB1MTYgYml0cykKK3sKKwl1MTYgZGF0YTsKKworCWRhdGEgPSByZWFkdyhody0+aW8gKyBhZGRyKTsKKwlyZXR1cm4gKGRhdGEgJiBiaXRzKSA9PSBiaXRzOworfQorCisvKioKKyAqIHN3X2NmZyAtIHNldCBzd2l0Y2ggcmVnaXN0ZXIgYml0cworICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQGFkZHI6CVRoZSBhZGRyZXNzIG9mIHRoZSBzd2l0Y2ggcmVnaXN0ZXIuCisgKiBAYml0czoJVGhlIGRhdGEgYml0cyB0byBzZXQuCisgKiBAc2V0OglUaGUgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGJpdHMgYXJlIHRvIGJlIHNldCBvciBub3QuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIG9yIHJlc2V0cyB0aGUgc3BlY2lmaWVkIGJpdHMgb2YgdGhlIHN3aXRjaCByZWdpc3Rlci4KKyAqLworc3RhdGljIHZvaWQgc3dfY2ZnKHN0cnVjdCBrc3pfaHcgKmh3LCB1MzIgYWRkciwgdTE2IGJpdHMsIGludCBzZXQpCit7CisJdTE2IGRhdGE7CisKKwlkYXRhID0gcmVhZHcoaHctPmlvICsgYWRkcik7CisJaWYgKHNldCkKKwkJZGF0YSB8PSBiaXRzOworCWVsc2UKKwkJZGF0YSAmPSB+Yml0czsKKwl3cml0ZXcoZGF0YSwgaHctPmlvICsgYWRkcik7Cit9CisKKy8qIEJhbmR3aWR0aCAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgcG9ydF9jZmdfYnJvYWRfc3Rvcm0oc3RydWN0IGtzel9odyAqaHcsIGludCBwLCBpbnQgc2V0KQoreworCXBvcnRfY2ZnKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzFfT0ZGU0VULCBQT1JUX0JST0FEQ0FTVF9TVE9STSwgc2V0KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG9ydF9jaGtfYnJvYWRfc3Rvcm0oc3RydWN0IGtzel9odyAqaHcsIGludCBwKQoreworCXJldHVybiBwb3J0X2NoayhodywgcCwKKwkJS1M4ODQyX1BPUlRfQ1RSTF8xX09GRlNFVCwgUE9SVF9CUk9BRENBU1RfU1RPUk0pOworfQorCisvKiBEcml2ZXIgc2V0IHN3aXRjaCBicm9hZGNhc3Qgc3Rvcm0gcHJvdGVjdGlvbiBhdCAxMCUgcmF0ZS4gKi8KKyNkZWZpbmUgQlJPQURDQVNUX1NUT1JNX1BST1RFQ1RJT05fUkFURQkxMAorCisvKiAxNDgsODAwIGZyYW1lcyAqIDY3IG1zIC8gMTAwICovCisjZGVmaW5lIEJST0FEQ0FTVF9TVE9STV9WQUxVRQkJOTk2OQorCisvKioKKyAqIHN3X2NmZ19icm9hZF9zdG9ybSAtIGNvbmZpZ3VyZSBicm9hZGNhc3Qgc3Rvcm0gdGhyZXNob2xkCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcGVyY2VudDoJQnJvYWRjYXN0IHN0b3JtIHRocmVzaG9sZCBpbiBwZXJjZW50IG9mIHRyYW5zbWl0IHJhdGUuCisgKgorICogVGhpcyByb3V0aW5lIGNvbmZpZ3VyZXMgdGhlIGJyb2FkY2FzdCBzdG9ybSB0aHJlc2hvbGQgb2YgdGhlIHN3aXRjaC4KKyAqLworc3RhdGljIHZvaWQgc3dfY2ZnX2Jyb2FkX3N0b3JtKHN0cnVjdCBrc3pfaHcgKmh3LCB1OCBwZXJjZW50KQoreworCXUxNiBkYXRhOworCXUzMiB2YWx1ZSA9ICgodTMyKSBCUk9BRENBU1RfU1RPUk1fVkFMVUUgKiAodTMyKSBwZXJjZW50IC8gMTAwKTsKKworCWlmICh2YWx1ZSA+IEJST0FEQ0FTVF9TVE9STV9SQVRFKQorCQl2YWx1ZSA9IEJST0FEQ0FTVF9TVE9STV9SQVRFOworCisJZGF0YSA9IHJlYWR3KGh3LT5pbyArIEtTODg0Ml9TV0lUQ0hfQ1RSTF8zX09GRlNFVCk7CisJZGF0YSAmPSB+KEJST0FEQ0FTVF9TVE9STV9SQVRFX0xPIHwgQlJPQURDQVNUX1NUT1JNX1JBVEVfSEkpOworCWRhdGEgfD0gKCh2YWx1ZSAmIDB4MDBGRikgPDwgOCkgfCAoKHZhbHVlICYgMHhGRjAwKSA+PiA4KTsKKwl3cml0ZXcoZGF0YSwgaHctPmlvICsgS1M4ODQyX1NXSVRDSF9DVFJMXzNfT0ZGU0VUKTsKK30KKworLyoqCisgKiBzd19nZXRfYm9hcmRfc3Rvcm0gLSBnZXQgYnJvYWRjYXN0IHN0b3JtIHRocmVzaG9sZAorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHBlcmNlbnQ6CUJ1ZmZlciB0byBzdG9yZSB0aGUgYnJvYWRjYXN0IHN0b3JtIHRocmVzaG9sZCBwZXJjZW50YWdlLgorICoKKyAqIFRoaXMgcm91dGluZSByZXRyaWV2ZXMgdGhlIGJyb2FkY2FzdCBzdG9ybSB0aHJlc2hvbGQgb2YgdGhlIHN3aXRjaC4KKyAqLworc3RhdGljIHZvaWQgc3dfZ2V0X2Jyb2FkX3N0b3JtKHN0cnVjdCBrc3pfaHcgKmh3LCB1OCAqcGVyY2VudCkKK3sKKwlpbnQgbnVtOworCXUxNiBkYXRhOworCisJZGF0YSA9IHJlYWR3KGh3LT5pbyArIEtTODg0Ml9TV0lUQ0hfQ1RSTF8zX09GRlNFVCk7CisJbnVtID0gKGRhdGEgJiBCUk9BRENBU1RfU1RPUk1fUkFURV9ISSk7CisJbnVtIDw8PSA4OworCW51bSB8PSAoZGF0YSAmIEJST0FEQ0FTVF9TVE9STV9SQVRFX0xPKSA+PiA4OworCW51bSA9IChudW0gKiAxMDAgKyBCUk9BRENBU1RfU1RPUk1fVkFMVUUgLyAyKSAvIEJST0FEQ0FTVF9TVE9STV9WQUxVRTsKKwkqcGVyY2VudCA9ICh1OCkgbnVtOworfQorCisvKioKKyAqIHN3X2Rpc19icm9hZF9zdG9ybSAtIGRpc2FibGUgYnJvYWRzdG9ybQorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHBvcnQ6CVRoZSBwb3J0IGluZGV4LgorICoKKyAqIFRoaXMgcm91dGluZSBkaXNhYmxlcyB0aGUgYnJvYWRjYXN0IHN0b3JtIGxpbWl0IGZ1bmN0aW9uIG9mIHRoZSBzd2l0Y2guCisgKi8KK3N0YXRpYyB2b2lkIHN3X2Rpc19icm9hZF9zdG9ybShzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBvcnQpCit7CisJcG9ydF9jZmdfYnJvYWRfc3Rvcm0oaHcsIHBvcnQsIDApOworfQorCisvKioKKyAqIHN3X2VuYV9icm9hZF9zdG9ybSAtIGVuYWJsZSBicm9hZGNhc3Qgc3Rvcm0KKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBwb3J0OglUaGUgcG9ydCBpbmRleC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZW5hYmxlcyB0aGUgYnJvYWRjYXN0IHN0b3JtIGxpbWl0IGZ1bmN0aW9uIG9mIHRoZSBzd2l0Y2guCisgKi8KK3N0YXRpYyB2b2lkIHN3X2VuYV9icm9hZF9zdG9ybShzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBvcnQpCit7CisJc3dfY2ZnX2Jyb2FkX3N0b3JtKGh3LCBody0+a3N6X3N3aXRjaC0+YnJvYWRfcGVyKTsKKwlwb3J0X2NmZ19icm9hZF9zdG9ybShodywgcG9ydCwgMSk7Cit9CisKKy8qKgorICogc3dfaW5pdF9icm9hZF9zdG9ybSAtIGluaXRpYWxpemUgYnJvYWRjYXN0IHN0b3JtCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIGluaXRpYWxpemVzIHRoZSBicm9hZGNhc3Qgc3Rvcm0gbGltaXQgZnVuY3Rpb24gb2YgdGhlIHN3aXRjaC4KKyAqLworc3RhdGljIHZvaWQgc3dfaW5pdF9icm9hZF9zdG9ybShzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlpbnQgcG9ydDsKKworCWh3LT5rc3pfc3dpdGNoLT5icm9hZF9wZXIgPSAxOworCXN3X2NmZ19icm9hZF9zdG9ybShodywgaHctPmtzel9zd2l0Y2gtPmJyb2FkX3Blcik7CisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFRPVEFMX1BPUlRfTlVNOyBwb3J0KyspCisJCXN3X2Rpc19icm9hZF9zdG9ybShodywgcG9ydCk7CisJc3dfY2ZnKGh3LCBLUzg4NDJfU1dJVENIX0NUUkxfMl9PRkZTRVQsIE1VTFRJQ0FTVF9TVE9STV9ESVNBQkxFLCAxKTsKK30KKworLyoqCisgKiBod19jZmdfYnJvYWRfc3Rvcm0gLSBjb25maWd1cmUgYnJvYWRjYXN0IHN0b3JtCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcGVyY2VudDoJQnJvYWRjYXN0IHN0b3JtIHRocmVzaG9sZCBpbiBwZXJjZW50IG9mIHRyYW5zbWl0IHJhdGUuCisgKgorICogVGhpcyByb3V0aW5lIGNvbmZpZ3VyZXMgdGhlIGJyb2FkY2FzdCBzdG9ybSB0aHJlc2hvbGQgb2YgdGhlIHN3aXRjaC4KKyAqIEl0IGlzIGNhbGxlZCBieSB1c2VyIGZ1bmN0aW9ucy4gIFRoZSBoYXJkd2FyZSBzaG91bGQgYmUgYWNxdWlyZWQgZmlyc3QuCisgKi8KK3N0YXRpYyB2b2lkIGh3X2NmZ19icm9hZF9zdG9ybShzdHJ1Y3Qga3N6X2h3ICpodywgdTggcGVyY2VudCkKK3sKKwlpZiAocGVyY2VudCA+IDEwMCkKKwkJcGVyY2VudCA9IDEwMDsKKworCXN3X2NmZ19icm9hZF9zdG9ybShodywgcGVyY2VudCk7CisJc3dfZ2V0X2Jyb2FkX3N0b3JtKGh3LCAmcGVyY2VudCk7CisJaHctPmtzel9zd2l0Y2gtPmJyb2FkX3BlciA9IHBlcmNlbnQ7Cit9CisKKy8qKgorICogc3dfZGlzX3ByaW9fcmF0ZSAtIGRpc2FibGUgc3dpdGNoIHByaW9yaXR5IHJhdGUKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBwb3J0OglUaGUgcG9ydCBpbmRleC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZGlzYWJsZXMgdGhlIHByaW9yaXR5IHJhdGUgZnVuY3Rpb24gb2YgdGhlIHN3aXRjaC4KKyAqLworc3RhdGljIHZvaWQgc3dfZGlzX3ByaW9fcmF0ZShzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBvcnQpCit7CisJdTMyIGFkZHI7CisKKwlQT1JUX0NUUkxfQUREUihwb3J0LCBhZGRyKTsKKwlhZGRyICs9IEtTODg0Ml9QT1JUX0lOX1JBVEVfT0ZGU0VUOworCXdyaXRlbCgwLCBody0+aW8gKyBhZGRyKTsKK30KKworLyoqCisgKiBzd19pbml0X3ByaW9fcmF0ZSAtIGluaXRpYWxpemUgc3dpdGNoIHByaW9pcnR5IHJhdGUKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaW5pdGlhbGl6ZXMgdGhlIHByaW9yaXR5IHJhdGUgZnVuY3Rpb24gb2YgdGhlIHN3aXRjaC4KKyAqLworc3RhdGljIHZvaWQgc3dfaW5pdF9wcmlvX3JhdGUoc3RydWN0IGtzel9odyAqaHcpCit7CisJaW50IHBvcnQ7CisJaW50IHByaW87CisJc3RydWN0IGtzel9zd2l0Y2ggKnN3ID0gaHctPmtzel9zd2l0Y2g7CisKKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgVE9UQUxfUE9SVF9OVU07IHBvcnQrKykgeworCQlmb3IgKHByaW8gPSAwOyBwcmlvIDwgUFJJT19RVUVVRVM7IHByaW8rKykgeworCQkJc3ctPnBvcnRfY2ZnW3BvcnRdLnJ4X3JhdGVbcHJpb10gPQorCQkJc3ctPnBvcnRfY2ZnW3BvcnRdLnR4X3JhdGVbcHJpb10gPSAwOworCQl9CisJCXN3X2Rpc19wcmlvX3JhdGUoaHcsIHBvcnQpOworCX0KK30KKworLyogQ29tbXVuaWNhdGlvbiAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgcG9ydF9jZmdfYmFja19wcmVzc3VyZShzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHAsIGludCBzZXQpCit7CisJcG9ydF9jZmcoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMl9PRkZTRVQsIFBPUlRfQkFDS19QUkVTU1VSRSwgc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBvcnRfY2ZnX2ZvcmNlX2Zsb3dfY3RybChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHAsIGludCBzZXQpCit7CisJcG9ydF9jZmcoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMl9PRkZTRVQsIFBPUlRfRk9SQ0VfRkxPV19DVFJMLCBzZXQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwb3J0X2Noa19iYWNrX3ByZXNzdXJlKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCkKK3sKKwlyZXR1cm4gcG9ydF9jaGsoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMl9PRkZTRVQsIFBPUlRfQkFDS19QUkVTU1VSRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBvcnRfY2hrX2ZvcmNlX2Zsb3dfY3RybChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHApCit7CisJcmV0dXJuIHBvcnRfY2hrKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzJfT0ZGU0VULCBQT1JUX0ZPUkNFX0ZMT1dfQ1RSTCk7Cit9CisKKy8qIFNwYW5uaW5nIFRyZWUgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHBvcnRfY2ZnX2Rpc19sZWFybihzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHAsIGludCBzZXQpCit7CisJcG9ydF9jZmcoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMl9PRkZTRVQsIFBPUlRfTEVBUk5fRElTQUJMRSwgc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBvcnRfY2ZnX3J4KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCwgaW50IHNldCkKK3sKKwlwb3J0X2NmZyhodywgcCwKKwkJS1M4ODQyX1BPUlRfQ1RSTF8yX09GRlNFVCwgUE9SVF9SWF9FTkFCTEUsIHNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3J0X2NmZ190eChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHAsIGludCBzZXQpCit7CisJcG9ydF9jZmcoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMl9PRkZTRVQsIFBPUlRfVFhfRU5BQkxFLCBzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dfY2ZnX2Zhc3RfYWdpbmcoc3RydWN0IGtzel9odyAqaHcsIGludCBzZXQpCit7CisJc3dfY2ZnKGh3LCBLUzg4NDJfU1dJVENIX0NUUkxfMV9PRkZTRVQsIFNXSVRDSF9GQVNUX0FHSU5HLCBzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3dfZmx1c2hfZHluX21hY190YWJsZShzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlpZiAoIShody0+b3ZlcnJpZGVzICYgRkFTVF9BR0lORykpIHsKKwkJc3dfY2ZnX2Zhc3RfYWdpbmcoaHcsIDEpOworCQltZGVsYXkoMSk7CisJCXN3X2NmZ19mYXN0X2FnaW5nKGh3LCAwKTsKKwl9Cit9CisKKy8qIFZMQU4gKi8KKworc3RhdGljIGlubGluZSB2b2lkIHBvcnRfY2ZnX2luc190YWcoc3RydWN0IGtzel9odyAqaHcsIGludCBwLCBpbnQgaW5zZXJ0KQoreworCXBvcnRfY2ZnKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzFfT0ZGU0VULCBQT1JUX0lOU0VSVF9UQUcsIGluc2VydCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3J0X2NmZ19ybXZfdGFnKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCwgaW50IHJlbW92ZSkKK3sKKwlwb3J0X2NmZyhodywgcCwKKwkJS1M4ODQyX1BPUlRfQ1RSTF8xX09GRlNFVCwgUE9SVF9SRU1PVkVfVEFHLCByZW1vdmUpOworfQorCitzdGF0aWMgaW5saW5lIGludCBwb3J0X2Noa19pbnNfdGFnKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCkKK3sKKwlyZXR1cm4gcG9ydF9jaGsoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMV9PRkZTRVQsIFBPUlRfSU5TRVJUX1RBRyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBvcnRfY2hrX3Jtdl90YWcoc3RydWN0IGtzel9odyAqaHcsIGludCBwKQoreworCXJldHVybiBwb3J0X2NoayhodywgcCwKKwkJS1M4ODQyX1BPUlRfQ1RSTF8xX09GRlNFVCwgUE9SVF9SRU1PVkVfVEFHKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHBvcnRfY2ZnX2Rpc19ub25fdmlkKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCwgaW50IHNldCkKK3sKKwlwb3J0X2NmZyhodywgcCwKKwkJS1M4ODQyX1BPUlRfQ1RSTF8yX09GRlNFVCwgUE9SVF9ESVNDQVJEX05PTl9WSUQsIHNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3J0X2NmZ19pbl9maWx0ZXIoc3RydWN0IGtzel9odyAqaHcsIGludCBwLCBpbnQgc2V0KQoreworCXBvcnRfY2ZnKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzJfT0ZGU0VULCBQT1JUX0lOR1JFU1NfVkxBTl9GSUxURVIsIHNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBvcnRfY2hrX2Rpc19ub25fdmlkKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCkKK3sKKwlyZXR1cm4gcG9ydF9jaGsoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMl9PRkZTRVQsIFBPUlRfRElTQ0FSRF9OT05fVklEKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG9ydF9jaGtfaW5fZmlsdGVyKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCkKK3sKKwlyZXR1cm4gcG9ydF9jaGsoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMl9PRkZTRVQsIFBPUlRfSU5HUkVTU19WTEFOX0ZJTFRFUik7Cit9CisKKy8qIE1pcnJvcmluZyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgcG9ydF9jZmdfbWlycm9yX3NuaWZmZXIoc3RydWN0IGtzel9odyAqaHcsIGludCBwLCBpbnQgc2V0KQoreworCXBvcnRfY2ZnKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzJfT0ZGU0VULCBQT1JUX01JUlJPUl9TTklGRkVSLCBzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG9ydF9jZmdfbWlycm9yX3J4KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCwgaW50IHNldCkKK3sKKwlwb3J0X2NmZyhodywgcCwKKwkJS1M4ODQyX1BPUlRfQ1RSTF8yX09GRlNFVCwgUE9SVF9NSVJST1JfUlgsIHNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3J0X2NmZ19taXJyb3JfdHgoc3RydWN0IGtzel9odyAqaHcsIGludCBwLCBpbnQgc2V0KQoreworCXBvcnRfY2ZnKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzJfT0ZGU0VULCBQT1JUX01JUlJPUl9UWCwgc2V0KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3X2NmZ19taXJyb3JfcnhfdHgoc3RydWN0IGtzel9odyAqaHcsIGludCBzZXQpCit7CisJc3dfY2ZnKGh3LCBLUzg4NDJfU1dJVENIX0NUUkxfMl9PRkZTRVQsIFNXSVRDSF9NSVJST1JfUlhfVFgsIHNldCk7Cit9CisKK3N0YXRpYyB2b2lkIHN3X2luaXRfbWlycm9yKHN0cnVjdCBrc3pfaHcgKmh3KQoreworCWludCBwb3J0OworCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFRPVEFMX1BPUlRfTlVNOyBwb3J0KyspIHsKKwkJcG9ydF9jZmdfbWlycm9yX3NuaWZmZXIoaHcsIHBvcnQsIDApOworCQlwb3J0X2NmZ19taXJyb3JfcngoaHcsIHBvcnQsIDApOworCQlwb3J0X2NmZ19taXJyb3JfdHgoaHcsIHBvcnQsIDApOworCX0KKwlzd19jZmdfbWlycm9yX3J4X3R4KGh3LCAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3X2NmZ191bmtfZGVmX2RlbGl2ZXIoc3RydWN0IGtzel9odyAqaHcsIGludCBzZXQpCit7CisJc3dfY2ZnKGh3LCBLUzg4NDJfU1dJVENIX0NUUkxfN19PRkZTRVQsCisJCVNXSVRDSF9VTktfREVGX1BPUlRfRU5BQkxFLCBzZXQpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzd19jZmdfY2hrX3Vua19kZWZfZGVsaXZlcihzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlyZXR1cm4gc3dfY2hrKGh3LCBLUzg4NDJfU1dJVENIX0NUUkxfN19PRkZTRVQsCisJCVNXSVRDSF9VTktfREVGX1BPUlRfRU5BQkxFKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN3X2NmZ191bmtfZGVmX3BvcnQoc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0LCBpbnQgc2V0KQoreworCXBvcnRfY2ZnX3NoaWZ0KGh3LCBwb3J0LCBLUzg4NDJfU1dJVENIX0NUUkxfN19PRkZTRVQsIDAsIHNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN3X2Noa191bmtfZGVmX3BvcnQoc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0KQoreworCXJldHVybiBwb3J0X2Noa19zaGlmdChodywgcG9ydCwgS1M4ODQyX1NXSVRDSF9DVFJMXzdfT0ZGU0VULCAwKTsKK30KKworLyogUHJpb3JpdHkgKi8KKworc3RhdGljIGlubGluZSB2b2lkIHBvcnRfY2ZnX2RpZmZzZXJ2KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCwgaW50IHNldCkKK3sKKwlwb3J0X2NmZyhodywgcCwKKwkJS1M4ODQyX1BPUlRfQ1RSTF8xX09GRlNFVCwgUE9SVF9ESUZGU0VSVl9FTkFCTEUsIHNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3J0X2NmZ184MDJfMXAoc3RydWN0IGtzel9odyAqaHcsIGludCBwLCBpbnQgc2V0KQoreworCXBvcnRfY2ZnKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzFfT0ZGU0VULCBQT1JUXzgwMl8xUF9FTkFCTEUsIHNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3J0X2NmZ19yZXBsYWNlX3ZpZChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHAsIGludCBzZXQpCit7CisJcG9ydF9jZmcoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMl9PRkZTRVQsIFBPUlRfVVNFUl9QUklPUklUWV9DRUlMSU5HLCBzZXQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcG9ydF9jZmdfcHJpbyhzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHAsIGludCBzZXQpCit7CisJcG9ydF9jZmcoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMV9PRkZTRVQsIFBPUlRfUFJJT19RVUVVRV9FTkFCTEUsIHNldCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBvcnRfY2hrX2RpZmZzZXJ2KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCkKK3sKKwlyZXR1cm4gcG9ydF9jaGsoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMV9PRkZTRVQsIFBPUlRfRElGRlNFUlZfRU5BQkxFKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG9ydF9jaGtfODAyXzFwKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCkKK3sKKwlyZXR1cm4gcG9ydF9jaGsoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMV9PRkZTRVQsIFBPUlRfODAyXzFQX0VOQUJMRSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBvcnRfY2hrX3JlcGxhY2VfdmlkKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcCkKK3sKKwlyZXR1cm4gcG9ydF9jaGsoaHcsIHAsCisJCUtTODg0Ml9QT1JUX0NUUkxfMl9PRkZTRVQsIFBPUlRfVVNFUl9QUklPUklUWV9DRUlMSU5HKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcG9ydF9jaGtfcHJpbyhzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHApCit7CisJcmV0dXJuIHBvcnRfY2hrKGh3LCBwLAorCQlLUzg4NDJfUE9SVF9DVFJMXzFfT0ZGU0VULCBQT1JUX1BSSU9fUVVFVUVfRU5BQkxFKTsKK30KKworLyoqCisgKiBzd19kaXNfZGlmZnNlcnYgLSBkaXNhYmxlIHN3aXRjaCBEaWZmU2VydiBwcmlvcml0eQorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHBvcnQ6CVRoZSBwb3J0IGluZGV4LgorICoKKyAqIFRoaXMgcm91dGluZSBkaXNhYmxlcyB0aGUgRGlmZlNlcnYgcHJpb3JpdHkgZnVuY3Rpb24gb2YgdGhlIHN3aXRjaC4KKyAqLworc3RhdGljIHZvaWQgc3dfZGlzX2RpZmZzZXJ2KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcG9ydCkKK3sKKwlwb3J0X2NmZ19kaWZmc2VydihodywgcG9ydCwgMCk7Cit9CisKKy8qKgorICogc3dfZGlzXzgwMl8xcCAtIGRpc2FibGUgc3dpdGNoIDgwMi4xcCBwcmlvcml0eQorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHBvcnQ6CVRoZSBwb3J0IGluZGV4LgorICoKKyAqIFRoaXMgcm91dGluZSBkaXNhYmxlcyB0aGUgODAyLjFwIHByaW9yaXR5IGZ1bmN0aW9uIG9mIHRoZSBzd2l0Y2guCisgKi8KK3N0YXRpYyB2b2lkIHN3X2Rpc184MDJfMXAoc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0KQoreworCXBvcnRfY2ZnXzgwMl8xcChodywgcG9ydCwgMCk7Cit9CisKKy8qKgorICogc3dfY2ZnX3JlcGxhY2VfbnVsbF92aWQgLQorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHNldDoJVGhlIGZsYWcgdG8gZGlzYWJsZSBvciBlbmFibGUuCisgKgorICovCitzdGF0aWMgdm9pZCBzd19jZmdfcmVwbGFjZV9udWxsX3ZpZChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHNldCkKK3sKKwlzd19jZmcoaHcsIEtTODg0Ml9TV0lUQ0hfQ1RSTF8zX09GRlNFVCwgU1dJVENIX1JFUExBQ0VfTlVMTF9WSUQsIHNldCk7Cit9CisKKy8qKgorICogc3dfY2ZnX3JlcGxhY2VfdmlkIC0gZW5hYmxlIHN3aXRjaCA4MDIuMTAgcHJpb3JpdHkgcmUtbWFwcGluZworICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHBvcnQ6CVRoZSBwb3J0IGluZGV4LgorICogQHNldDoJVGhlIGZsYWcgdG8gZGlzYWJsZSBvciBlbmFibGUuCisgKgorICogVGhpcyByb3V0aW5lIGVuYWJsZXMgdGhlIDgwMi4xcCBwcmlvcml0eSByZS1tYXBwaW5nIGZ1bmN0aW9uIG9mIHRoZSBzd2l0Y2guCisgKiBUaGF0IGFsbG93cyA4MDIuMXAgcHJpb3JpdHkgZmllbGQgdG8gYmUgcmVwbGFjZWQgd2l0aCB0aGUgcG9ydCdzIGRlZmF1bHQKKyAqIHRhZydzIHByaW9yaXR5IHZhbHVlIGlmIHRoZSBpbmdyZXNzIHBhY2tldCdzIDgwMi4xcCBwcmlvcml0eSBoYXMgYSBoaWdoZXIKKyAqIHByaW9yaXR5IHRoYW4gcG9ydCdzIGRlZmF1bHQgdGFnJ3MgcHJpb3JpdHkuCisgKi8KK3N0YXRpYyB2b2lkIHN3X2NmZ19yZXBsYWNlX3ZpZChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBvcnQsIGludCBzZXQpCit7CisJcG9ydF9jZmdfcmVwbGFjZV92aWQoaHcsIHBvcnQsIHNldCk7Cit9CisKKy8qKgorICogc3dfY2ZnX3BvcnRfYmFzZWQgLSBjb25maWd1cmUgc3dpdGNoIHBvcnQgYmFzZWQgcHJpb3JpdHkKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBwb3J0OglUaGUgcG9ydCBpbmRleC4KKyAqIEBwcmlvOglUaGUgcHJpb3JpdHkgdG8gc2V0LgorICoKKyAqIFRoaXMgcm91dGluZSBjb25maWd1cmVzIHRoZSBwb3J0IGJhc2VkIHByaW9yaXR5IG9mIHRoZSBzd2l0Y2guCisgKi8KK3N0YXRpYyB2b2lkIHN3X2NmZ19wb3J0X2Jhc2VkKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcG9ydCwgdTggcHJpbykKK3sKKwl1MTYgZGF0YTsKKworCWlmIChwcmlvID4gUE9SVF9CQVNFRF9QUklPUklUWV9CQVNFKQorCQlwcmlvID0gUE9SVF9CQVNFRF9QUklPUklUWV9CQVNFOworCisJaHctPmtzel9zd2l0Y2gtPnBvcnRfY2ZnW3BvcnRdLnBvcnRfcHJpbyA9IHByaW87CisKKwlwb3J0X3IxNihodywgcG9ydCwgS1M4ODQyX1BPUlRfQ1RSTF8xX09GRlNFVCwgJmRhdGEpOworCWRhdGEgJj0gflBPUlRfQkFTRURfUFJJT1JJVFlfTUFTSzsKKwlkYXRhIHw9IHByaW8gPDwgUE9SVF9CQVNFRF9QUklPUklUWV9TSElGVDsKKwlwb3J0X3cxNihodywgcG9ydCwgS1M4ODQyX1BPUlRfQ1RSTF8xX09GRlNFVCwgZGF0YSk7Cit9CisKKy8qKgorICogc3dfZGlzX211bHRpX3F1ZXVlIC0gZGlzYWJsZSB0cmFuc21pdCBtdWx0aXBsZSBxdWV1ZXMKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBwb3J0OglUaGUgcG9ydCBpbmRleC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZGlzYWJsZXMgdGhlIHRyYW5zbWl0IG11bHRpcGxlIHF1ZXVlcyBzZWxlY3Rpb24gb2YgdGhlIHN3aXRjaAorICogcG9ydC4gIE9ubHkgc2luZ2xlIHRyYW5zbWl0IHF1ZXVlIG9uIHRoZSBwb3J0LgorICovCitzdGF0aWMgdm9pZCBzd19kaXNfbXVsdGlfcXVldWUoc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0KQoreworCXBvcnRfY2ZnX3ByaW8oaHcsIHBvcnQsIDApOworfQorCisvKioKKyAqIHN3X2luaXRfcHJpbyAtIGluaXRpYWxpemUgc3dpdGNoIHByaW9yaXR5CisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIGluaXRpYWxpemVzIHRoZSBzd2l0Y2ggUW9TIHByaW9yaXR5IGZ1bmN0aW9ucy4KKyAqLworc3RhdGljIHZvaWQgc3dfaW5pdF9wcmlvKHN0cnVjdCBrc3pfaHcgKmh3KQoreworCWludCBwb3J0OworCWludCB0b3M7CisJc3RydWN0IGtzel9zd2l0Y2ggKnN3ID0gaHctPmtzel9zd2l0Y2g7CisKKwkvKgorCSAqIEluaXQgYWxsIHRoZSA4MDIuMXAgdGFnIHByaW9yaXR5IHZhbHVlIHRvIGJlIGFzc2lnbmVkIHRvIGRpZmZlcmVudAorCSAqIHByaW9yaXR5IHF1ZXVlLgorCSAqLworCXN3LT5wXzgwMl8xcFswXSA9IDA7CisJc3ctPnBfODAyXzFwWzFdID0gMDsKKwlzdy0+cF84MDJfMXBbMl0gPSAxOworCXN3LT5wXzgwMl8xcFszXSA9IDE7CisJc3ctPnBfODAyXzFwWzRdID0gMjsKKwlzdy0+cF84MDJfMXBbNV0gPSAyOworCXN3LT5wXzgwMl8xcFs2XSA9IDM7CisJc3ctPnBfODAyXzFwWzddID0gMzsKKworCS8qCisJICogSW5pdCBhbGwgdGhlIERpZmZTZXJ2IHByaW9yaXR5IHZhbHVlIHRvIGJlIGFzc2lnbmVkIHRvIHByaW9yaXR5CisJICogcXVldWUgMC4KKwkgKi8KKwlmb3IgKHRvcyA9IDA7IHRvcyA8IERJRkZTRVJWX0VOVFJJRVM7IHRvcysrKQorCQlzdy0+ZGlmZnNlcnZbdG9zXSA9IDA7CisKKwkvKiBBbGwgUW9TIGZ1bmN0aW9ucyBkaXNhYmxlZC4gKi8KKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgVE9UQUxfUE9SVF9OVU07IHBvcnQrKykgeworCQlzd19kaXNfbXVsdGlfcXVldWUoaHcsIHBvcnQpOworCQlzd19kaXNfZGlmZnNlcnYoaHcsIHBvcnQpOworCQlzd19kaXNfODAyXzFwKGh3LCBwb3J0KTsKKwkJc3dfY2ZnX3JlcGxhY2VfdmlkKGh3LCBwb3J0LCAwKTsKKworCQlzdy0+cG9ydF9jZmdbcG9ydF0ucG9ydF9wcmlvID0gMDsKKwkJc3dfY2ZnX3BvcnRfYmFzZWQoaHcsIHBvcnQsIHN3LT5wb3J0X2NmZ1twb3J0XS5wb3J0X3ByaW8pOworCX0KKwlzd19jZmdfcmVwbGFjZV9udWxsX3ZpZChodywgMCk7Cit9CisKKy8qKgorICogcG9ydF9nZXRfZGVmX3ZpZCAtIGdldCBwb3J0IGRlZmF1bHQgVklELgorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHBvcnQ6CVRoZSBwb3J0IGluZGV4LgorICogQHZpZDoJQnVmZmVyIHRvIHN0b3JlIHRoZSBWSUQuCisgKgorICogVGhpcyByb3V0aW5lIHJldHJpZXZlcyB0aGUgZGVmYXVsdCBWSUQgb2YgdGhlIHBvcnQuCisgKi8KK3N0YXRpYyB2b2lkIHBvcnRfZ2V0X2RlZl92aWQoc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0LCB1MTYgKnZpZCkKK3sKKwl1MzIgYWRkcjsKKworCVBPUlRfQ1RSTF9BRERSKHBvcnQsIGFkZHIpOworCWFkZHIgKz0gS1M4ODQyX1BPUlRfQ1RSTF9WSURfT0ZGU0VUOworCSp2aWQgPSByZWFkdyhody0+aW8gKyBhZGRyKTsKK30KKworLyoqCisgKiBzd19pbml0X3ZsYW4gLSBpbml0aWFsaXplIHN3aXRjaCBWTEFOCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIGluaXRpYWxpemVzIHRoZSBWTEFOIGZ1bmN0aW9uIG9mIHRoZSBzd2l0Y2guCisgKi8KK3N0YXRpYyB2b2lkIHN3X2luaXRfdmxhbihzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlpbnQgcG9ydDsKKwlpbnQgZW50cnk7CisJc3RydWN0IGtzel9zd2l0Y2ggKnN3ID0gaHctPmtzel9zd2l0Y2g7CisKKwkvKiBSZWFkIDE2IFZMQU4gZW50cmllcyBmcm9tIGRldmljZSdzIFZMQU4gdGFibGUuICovCisJZm9yIChlbnRyeSA9IDA7IGVudHJ5IDwgVkxBTl9UQUJMRV9FTlRSSUVTOyBlbnRyeSsrKSB7CisJCXN3X3Jfdmxhbl90YWJsZShodywgZW50cnksCisJCQkmc3ctPnZsYW5fdGFibGVbZW50cnldLnZpZCwKKwkJCSZzdy0+dmxhbl90YWJsZVtlbnRyeV0uZmlkLAorCQkJJnN3LT52bGFuX3RhYmxlW2VudHJ5XS5tZW1iZXIpOworCX0KKworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBUT1RBTF9QT1JUX05VTTsgcG9ydCsrKSB7CisJCXBvcnRfZ2V0X2RlZl92aWQoaHcsIHBvcnQsICZzdy0+cG9ydF9jZmdbcG9ydF0udmlkKTsKKwkJc3ctPnBvcnRfY2ZnW3BvcnRdLm1lbWJlciA9IFBPUlRfTUFTSzsKKwl9Cit9CisKKy8qKgorICogc3dfY2ZnX3BvcnRfYmFzZV92bGFuIC0gY29uZmlndXJlIHBvcnQtYmFzZWQgVkxBTiBtZW1iZXJzaGlwCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcG9ydDoJVGhlIHBvcnQgaW5kZXguCisgKiBAbWVtYmVyOglUaGUgcG9ydC1iYXNlZCBWTEFOIG1lbWJlcnNoaXAuCisgKgorICogVGhpcyByb3V0aW5lIGNvbmZpZ3VyZXMgdGhlIHBvcnQtYmFzZWQgVkxBTiBtZW1iZXJzaGlwIG9mIHRoZSBwb3J0LgorICovCitzdGF0aWMgdm9pZCBzd19jZmdfcG9ydF9iYXNlX3ZsYW4oc3RydWN0IGtzel9odyAqaHcsIGludCBwb3J0LCB1OCBtZW1iZXIpCit7CisJdTMyIGFkZHI7CisJdTggZGF0YTsKKworCVBPUlRfQ1RSTF9BRERSKHBvcnQsIGFkZHIpOworCWFkZHIgKz0gS1M4ODQyX1BPUlRfQ1RSTF8yX09GRlNFVDsKKworCWRhdGEgPSByZWFkYihody0+aW8gKyBhZGRyKTsKKwlkYXRhICY9IH5QT1JUX1ZMQU5fTUVNQkVSU0hJUDsKKwlkYXRhIHw9IChtZW1iZXIgJiBQT1JUX01BU0spOworCXdyaXRlYihkYXRhLCBody0+aW8gKyBhZGRyKTsKKworCWh3LT5rc3pfc3dpdGNoLT5wb3J0X2NmZ1twb3J0XS5tZW1iZXIgPSBtZW1iZXI7Cit9CisKKy8qKgorICogc3dfZ2V0X2FkZHIgLSBnZXQgdGhlIHN3aXRjaCBNQUMgYWRkcmVzcy4KKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBtYWNfYWRkcjoJQnVmZmVyIHRvIHN0b3JlIHRoZSBNQUMgYWRkcmVzcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHJpZXZlcyB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIHN3aXRjaC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHN3X2dldF9hZGRyKHN0cnVjdCBrc3pfaHcgKmh3LCB1OCAqbWFjX2FkZHIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSArPSAyKSB7CisJCW1hY19hZGRyW2ldID0gcmVhZGIoaHctPmlvICsgS1M4ODQyX01BQ19BRERSXzBfT0ZGU0VUICsgaSk7CisJCW1hY19hZGRyWzEgKyBpXSA9IHJlYWRiKGh3LT5pbyArIEtTODg0Ml9NQUNfQUREUl8xX09GRlNFVCArIGkpOworCX0KK30KKworLyoqCisgKiBzd19zZXRfYWRkciAtIGNvbmZpZ3VyZSBzd2l0Y2ggTUFDIGFkZHJlc3MKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBtYWNfYWRkcjoJVGhlIE1BQyBhZGRyZXNzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgTUFDIGFkZHJlc3Mgb2YgdGhlIHN3aXRjaC4KKyAqLworc3RhdGljIHZvaWQgc3dfc2V0X2FkZHIoc3RydWN0IGtzel9odyAqaHcsIHU4ICptYWNfYWRkcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA2OyBpICs9IDIpIHsKKwkJd3JpdGViKG1hY19hZGRyW2ldLCBody0+aW8gKyBLUzg4NDJfTUFDX0FERFJfMF9PRkZTRVQgKyBpKTsKKwkJd3JpdGViKG1hY19hZGRyWzEgKyBpXSwgaHctPmlvICsgS1M4ODQyX01BQ19BRERSXzFfT0ZGU0VUICsgaSk7CisJfQorfQorCisvKioKKyAqIHN3X3NldF9nbG9iYWxfY3RybCAtIHNldCBzd2l0Y2ggZ2xvYmFsIGNvbnRyb2wKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgc2V0cyB0aGUgZ2xvYmFsIGNvbnRyb2wgb2YgdGhlIHN3aXRjaCBmdW5jdGlvbi4KKyAqLworc3RhdGljIHZvaWQgc3dfc2V0X2dsb2JhbF9jdHJsKHN0cnVjdCBrc3pfaHcgKmh3KQoreworCXUxNiBkYXRhOworCisJLyogRW5hYmxlIHN3aXRjaCBNSUkgZmxvdyBjb250cm9sLiAqLworCWRhdGEgPSByZWFkdyhody0+aW8gKyBLUzg4NDJfU1dJVENIX0NUUkxfM19PRkZTRVQpOworCWRhdGEgfD0gU1dJVENIX0ZMT1dfQ1RSTDsKKwl3cml0ZXcoZGF0YSwgaHctPmlvICsgS1M4ODQyX1NXSVRDSF9DVFJMXzNfT0ZGU0VUKTsKKworCWRhdGEgPSByZWFkdyhody0+aW8gKyBLUzg4NDJfU1dJVENIX0NUUkxfMV9PRkZTRVQpOworCisJLyogRW5hYmxlIGFnZ3Jlc3NpdmUgYmFjayBvZmYgYWxnb3JpdGhtIGluIGhhbGYgZHVwbGV4IG1vZGUuICovCisJZGF0YSB8PSBTV0lUQ0hfQUdHUl9CQUNLT0ZGOworCisJLyogRW5hYmxlIGF1dG9tYXRpYyBmYXN0IGFnaW5nIHdoZW4gbGluayBjaGFuZ2VkIGRldGVjdGVkLiAqLworCWRhdGEgfD0gU1dJVENIX0FHSU5HX0VOQUJMRTsKKwlkYXRhIHw9IFNXSVRDSF9MSU5LX0FVVE9fQUdJTkc7CisKKwlpZiAoaHctPm92ZXJyaWRlcyAmIEZBU1RfQUdJTkcpCisJCWRhdGEgfD0gU1dJVENIX0ZBU1RfQUdJTkc7CisJZWxzZQorCQlkYXRhICY9IH5TV0lUQ0hfRkFTVF9BR0lORzsKKwl3cml0ZXcoZGF0YSwgaHctPmlvICsgS1M4ODQyX1NXSVRDSF9DVFJMXzFfT0ZGU0VUKTsKKworCWRhdGEgPSByZWFkdyhody0+aW8gKyBLUzg4NDJfU1dJVENIX0NUUkxfMl9PRkZTRVQpOworCisJLyogRW5hYmxlIG5vIGV4Y2Vzc2l2ZSBjb2xsaXNpb24gZHJvcC4gKi8KKwlkYXRhIHw9IE5PX0VYQ19DT0xMSVNJT05fRFJPUDsKKwl3cml0ZXcoZGF0YSwgaHctPmlvICsgS1M4ODQyX1NXSVRDSF9DVFJMXzJfT0ZGU0VUKTsKK30KKworZW51bSB7CisJU1RQX1NUQVRFX0RJU0FCTEVEID0gMCwKKwlTVFBfU1RBVEVfTElTVEVOSU5HLAorCVNUUF9TVEFURV9MRUFSTklORywKKwlTVFBfU1RBVEVfRk9SV0FSRElORywKKwlTVFBfU1RBVEVfQkxPQ0tFRCwKKwlTVFBfU1RBVEVfU0lNUExFCit9OworCisvKioKKyAqIHBvcnRfc2V0X3N0cF9zdGF0ZSAtIGNvbmZpZ3VyZSBwb3J0IHNwYW5uaW5nIHRyZWUgc3RhdGUKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBwb3J0OglUaGUgcG9ydCBpbmRleC4KKyAqIEBzdGF0ZToJVGhlIHNwYW5uaW5nIHRyZWUgc3RhdGUuCisgKgorICogVGhpcyByb3V0aW5lIGNvbmZpZ3VyZXMgdGhlIHNwYW5uaW5nIHRyZWUgc3RhdGUgb2YgdGhlIHBvcnQuCisgKi8KK3N0YXRpYyB2b2lkIHBvcnRfc2V0X3N0cF9zdGF0ZShzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBvcnQsIGludCBzdGF0ZSkKK3sKKwl1MTYgZGF0YTsKKworCXBvcnRfcjE2KGh3LCBwb3J0LCBLUzg4NDJfUE9SVF9DVFJMXzJfT0ZGU0VULCAmZGF0YSk7CisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgU1RQX1NUQVRFX0RJU0FCTEVEOgorCQlkYXRhICY9IH4oUE9SVF9UWF9FTkFCTEUgfCBQT1JUX1JYX0VOQUJMRSk7CisJCWRhdGEgfD0gUE9SVF9MRUFSTl9ESVNBQkxFOworCQlicmVhazsKKwljYXNlIFNUUF9TVEFURV9MSVNURU5JTkc6CisvKgorICogTm8gbmVlZCB0byB0dXJuIG9uIHRyYW5zbWl0IGJlY2F1c2Ugb2YgcG9ydCBkaXJlY3QgbW9kZS4KKyAqIFR1cm5pbmcgb24gcmVjZWl2ZSBpcyByZXF1aXJlZCBpZiBzdGF0aWMgTUFDIHRhYmxlIGlzIG5vdCBzZXR1cC4KKyAqLworCQlkYXRhICY9IH5QT1JUX1RYX0VOQUJMRTsKKwkJZGF0YSB8PSBQT1JUX1JYX0VOQUJMRTsKKwkJZGF0YSB8PSBQT1JUX0xFQVJOX0RJU0FCTEU7CisJCWJyZWFrOworCWNhc2UgU1RQX1NUQVRFX0xFQVJOSU5HOgorCQlkYXRhICY9IH5QT1JUX1RYX0VOQUJMRTsKKwkJZGF0YSB8PSBQT1JUX1JYX0VOQUJMRTsKKwkJZGF0YSAmPSB+UE9SVF9MRUFSTl9ESVNBQkxFOworCQlicmVhazsKKwljYXNlIFNUUF9TVEFURV9GT1JXQVJESU5HOgorCQlkYXRhIHw9IChQT1JUX1RYX0VOQUJMRSB8IFBPUlRfUlhfRU5BQkxFKTsKKwkJZGF0YSAmPSB+UE9SVF9MRUFSTl9ESVNBQkxFOworCQlicmVhazsKKwljYXNlIFNUUF9TVEFURV9CTE9DS0VEOgorLyoKKyAqIE5lZWQgdG8gc2V0dXAgc3RhdGljIE1BQyB0YWJsZSB3aXRoIG92ZXJyaWRlIHRvIGtlZXAgcmVjZWl2aW5nIEJQRFUKKyAqIG1lc3NhZ2VzLiAgU2VlIHN3X2luaXRfc3RwIHJvdXRpbmUuCisgKi8KKwkJZGF0YSAmPSB+KFBPUlRfVFhfRU5BQkxFIHwgUE9SVF9SWF9FTkFCTEUpOworCQlkYXRhIHw9IFBPUlRfTEVBUk5fRElTQUJMRTsKKwkJYnJlYWs7CisJY2FzZSBTVFBfU1RBVEVfU0lNUExFOgorCQlkYXRhIHw9IChQT1JUX1RYX0VOQUJMRSB8IFBPUlRfUlhfRU5BQkxFKTsKKwkJZGF0YSB8PSBQT1JUX0xFQVJOX0RJU0FCTEU7CisJCWJyZWFrOworCX0KKwlwb3J0X3cxNihodywgcG9ydCwgS1M4ODQyX1BPUlRfQ1RSTF8yX09GRlNFVCwgZGF0YSk7CisJaHctPmtzel9zd2l0Y2gtPnBvcnRfY2ZnW3BvcnRdLnN0cF9zdGF0ZSA9IHN0YXRlOworfQorCisjZGVmaW5lIFNUUF9FTlRSWQkJCTAKKyNkZWZpbmUgQlJPQURDQVNUX0VOVFJZCQkJMQorI2RlZmluZSBCUklER0VfQUREUl9FTlRSWQkJMgorI2RlZmluZSBJUFY2X0FERFJfRU5UUlkJCQkzCisKKy8qKgorICogc3dfY2xyX3N0YV9tYWNfdGFibGUgLSBjbGVhciBzdGF0aWMgTUFDIHRhYmxlCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIGNsZWFycyB0aGUgc3RhdGljIE1BQyB0YWJsZS4KKyAqLworc3RhdGljIHZvaWQgc3dfY2xyX3N0YV9tYWNfdGFibGUoc3RydWN0IGtzel9odyAqaHcpCit7CisJc3RydWN0IGtzel9tYWNfdGFibGUgKmVudHJ5OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFNUQVRJQ19NQUNfVEFCTEVfRU5UUklFUzsgaSsrKSB7CisJCWVudHJ5ID0gJmh3LT5rc3pfc3dpdGNoLT5tYWNfdGFibGVbaV07CisJCXN3X3dfc3RhX21hY190YWJsZShodywgaSwKKwkJCWVudHJ5LT5tYWNfYWRkciwgZW50cnktPnBvcnRzLAorCQkJZW50cnktPm92ZXJyaWRlLCAwLAorCQkJZW50cnktPnVzZV9maWQsIGVudHJ5LT5maWQpOworCX0KK30KKworLyoqCisgKiBzd19pbml0X3N0cCAtIGluaXRpYWxpemUgc3dpdGNoIHNwYW5uaW5nIHRyZWUgc3VwcG9ydAorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSBpbml0aWFsaXplcyB0aGUgc3Bhbm5pbmcgdHJlZSBzdXBwb3J0IG9mIHRoZSBzd2l0Y2guCisgKi8KK3N0YXRpYyB2b2lkIHN3X2luaXRfc3RwKHN0cnVjdCBrc3pfaHcgKmh3KQoreworCXN0cnVjdCBrc3pfbWFjX3RhYmxlICplbnRyeTsKKworCWVudHJ5ID0gJmh3LT5rc3pfc3dpdGNoLT5tYWNfdGFibGVbU1RQX0VOVFJZXTsKKwllbnRyeS0+bWFjX2FkZHJbMF0gPSAweDAxOworCWVudHJ5LT5tYWNfYWRkclsxXSA9IDB4ODA7CisJZW50cnktPm1hY19hZGRyWzJdID0gMHhDMjsKKwllbnRyeS0+bWFjX2FkZHJbM10gPSAweDAwOworCWVudHJ5LT5tYWNfYWRkcls0XSA9IDB4MDA7CisJZW50cnktPm1hY19hZGRyWzVdID0gMHgwMDsKKwllbnRyeS0+cG9ydHMgPSBIT1NUX01BU0s7CisJZW50cnktPm92ZXJyaWRlID0gMTsKKwllbnRyeS0+dmFsaWQgPSAxOworCXN3X3dfc3RhX21hY190YWJsZShodywgU1RQX0VOVFJZLAorCQllbnRyeS0+bWFjX2FkZHIsIGVudHJ5LT5wb3J0cywKKwkJZW50cnktPm92ZXJyaWRlLCBlbnRyeS0+dmFsaWQsCisJCWVudHJ5LT51c2VfZmlkLCBlbnRyeS0+ZmlkKTsKK30KKworLyoqCisgKiBzd19ibG9ja19hZGRyIC0gYmxvY2sgY2VydGFpbiBwYWNrZXRzIGZyb20gdGhlIGhvc3QgcG9ydAorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSBibG9ja3MgY2VydGFpbiBwYWNrZXRzIGZyb20gcmVhY2hpbmcgdG8gdGhlIGhvc3QgcG9ydC4KKyAqLworc3RhdGljIHZvaWQgc3dfYmxvY2tfYWRkcihzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlzdHJ1Y3Qga3N6X21hY190YWJsZSAqZW50cnk7CisJaW50IGk7CisKKwlmb3IgKGkgPSBCUk9BRENBU1RfRU5UUlk7IGkgPD0gSVBWNl9BRERSX0VOVFJZOyBpKyspIHsKKwkJZW50cnkgPSAmaHctPmtzel9zd2l0Y2gtPm1hY190YWJsZVtpXTsKKwkJZW50cnktPnZhbGlkID0gMDsKKwkJc3dfd19zdGFfbWFjX3RhYmxlKGh3LCBpLAorCQkJZW50cnktPm1hY19hZGRyLCBlbnRyeS0+cG9ydHMsCisJCQllbnRyeS0+b3ZlcnJpZGUsIGVudHJ5LT52YWxpZCwKKwkJCWVudHJ5LT51c2VfZmlkLCBlbnRyeS0+ZmlkKTsKKwl9Cit9CisKKyNkZWZpbmUgUEhZX0xJTktfU1VQUE9SVAkJXAorCShQSFlfQVVUT19ORUdfQVNZTV9QQVVTRSB8CVwKKwlQSFlfQVVUT19ORUdfU1lNX1BBVVNFIHwJXAorCVBIWV9BVVRPX05FR18xMDBCVDQgfAkJXAorCVBIWV9BVVRPX05FR18xMDBCVFhfRkQgfAlcCisJUEhZX0FVVE9fTkVHXzEwMEJUWCB8CQlcCisJUEhZX0FVVE9fTkVHXzEwQlRfRkQgfAkJXAorCVBIWV9BVVRPX05FR18xMEJUKQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfcl9waHlfY3RybChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBoeSwgdTE2ICpkYXRhKQoreworCSpkYXRhID0gcmVhZHcoaHctPmlvICsgcGh5ICsgS1M4ODRYX1BIWV9DVFJMX09GRlNFVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod193X3BoeV9jdHJsKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcGh5LCB1MTYgZGF0YSkKK3sKKwl3cml0ZXcoZGF0YSwgaHctPmlvICsgcGh5ICsgS1M4ODRYX1BIWV9DVFJMX09GRlNFVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19yX3BoeV9saW5rX3N0YXQoc3RydWN0IGtzel9odyAqaHcsIGludCBwaHksIHUxNiAqZGF0YSkKK3sKKwkqZGF0YSA9IHJlYWR3KGh3LT5pbyArIHBoeSArIEtTODg0WF9QSFlfU1RBVFVTX09GRlNFVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19yX3BoeV9hdXRvX25lZyhzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBoeSwgdTE2ICpkYXRhKQoreworCSpkYXRhID0gcmVhZHcoaHctPmlvICsgcGh5ICsgS1M4ODRYX1BIWV9BVVRPX05FR19PRkZTRVQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfd19waHlfYXV0b19uZWcoc3RydWN0IGtzel9odyAqaHcsIGludCBwaHksIHUxNiBkYXRhKQoreworCXdyaXRldyhkYXRhLCBody0+aW8gKyBwaHkgKyBLUzg4NFhfUEhZX0FVVE9fTkVHX09GRlNFVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19yX3BoeV9yZW1fY2FwKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcGh5LCB1MTYgKmRhdGEpCit7CisJKmRhdGEgPSByZWFkdyhody0+aW8gKyBwaHkgKyBLUzg4NFhfUEhZX1JFTU9URV9DQVBfT0ZGU0VUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh3X3JfcGh5X2Nyb3Nzb3ZlcihzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBoeSwgdTE2ICpkYXRhKQoreworCSpkYXRhID0gcmVhZHcoaHctPmlvICsgcGh5ICsgS1M4ODRYX1BIWV9DVFJMX09GRlNFVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod193X3BoeV9jcm9zc292ZXIoc3RydWN0IGtzel9odyAqaHcsIGludCBwaHksIHUxNiBkYXRhKQoreworCXdyaXRldyhkYXRhLCBody0+aW8gKyBwaHkgKyBLUzg4NFhfUEhZX0NUUkxfT0ZGU0VUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh3X3JfcGh5X3BvbGFyaXR5KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcGh5LCB1MTYgKmRhdGEpCit7CisJKmRhdGEgPSByZWFkdyhody0+aW8gKyBwaHkgKyBLUzg4NFhfUEhZX1BIWV9DVFJMX09GRlNFVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod193X3BoeV9wb2xhcml0eShzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBoeSwgdTE2IGRhdGEpCit7CisJd3JpdGV3KGRhdGEsIGh3LT5pbyArIHBoeSArIEtTODg0WF9QSFlfUEhZX0NUUkxfT0ZGU0VUKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGh3X3JfcGh5X2xpbmtfbWQoc3RydWN0IGtzel9odyAqaHcsIGludCBwaHksIHUxNiAqZGF0YSkKK3sKKwkqZGF0YSA9IHJlYWR3KGh3LT5pbyArIHBoeSArIEtTODg0WF9QSFlfTElOS19NRF9PRkZTRVQpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHdfd19waHlfbGlua19tZChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBoeSwgdTE2IGRhdGEpCit7CisJd3JpdGV3KGRhdGEsIGh3LT5pbyArIHBoeSArIEtTODg0WF9QSFlfTElOS19NRF9PRkZTRVQpOworfQorCisvKioKKyAqIGh3X3JfcGh5IC0gcmVhZCBkYXRhIGZyb20gUEhZIHJlZ2lzdGVyCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcG9ydDoJUG9ydCB0byByZWFkLgorICogQHJlZzoJUEhZIHJlZ2lzdGVyIHRvIHJlYWQuCisgKiBAdmFsOglCdWZmZXIgdG8gc3RvcmUgdGhlIHJlYWQgZGF0YS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmVhZHMgZGF0YSBmcm9tIHRoZSBQSFkgcmVnaXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkIGh3X3JfcGh5KHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcG9ydCwgdTE2IHJlZywgdTE2ICp2YWwpCit7CisJaW50IHBoeTsKKworCXBoeSA9IEtTODg0WF9QSFlfMV9DVFJMX09GRlNFVCArIHBvcnQgKiBQSFlfQ1RSTF9JTlRFUlZBTCArIHJlZzsKKwkqdmFsID0gcmVhZHcoaHctPmlvICsgcGh5KTsKK30KKworLyoqCisgKiBwb3J0X3dfcGh5IC0gd3JpdGUgZGF0YSB0byBQSFkgcmVnaXN0ZXIKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBwb3J0OglQb3J0IHRvIHdyaXRlLgorICogQHJlZzoJUEhZIHJlZ2lzdGVyIHRvIHdyaXRlLgorICogQHZhbDoJV29yZCBkYXRhIHRvIHdyaXRlLgorICoKKyAqIFRoaXMgcm91dGluZSB3cml0ZXMgZGF0YSB0byB0aGUgUEhZIHJlZ2lzdGVyLgorICovCitzdGF0aWMgdm9pZCBod193X3BoeShzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHBvcnQsIHUxNiByZWcsIHUxNiB2YWwpCit7CisJaW50IHBoeTsKKworCXBoeSA9IEtTODg0WF9QSFlfMV9DVFJMX09GRlNFVCArIHBvcnQgKiBQSFlfQ1RSTF9JTlRFUlZBTCArIHJlZzsKKwl3cml0ZXcodmFsLCBody0+aW8gKyBwaHkpOworfQorCisvKgorICogRUVQUk9NIGFjY2VzcyBmdW5jdGlvbnMKKyAqLworCisjZGVmaW5lIEFUOTNDX0NPREUJCQkwCisjZGVmaW5lIEFUOTNDX1dSX09GRgkJCTB4MDAKKyNkZWZpbmUgQVQ5M0NfV1JfQUxMCQkJMHgxMAorI2RlZmluZSBBVDkzQ19FUl9BTEwJCQkweDIwCisjZGVmaW5lIEFUOTNDX1dSX09OCQkJMHgzMAorCisjZGVmaW5lIEFUOTNDX1dSSVRFCQkJMQorI2RlZmluZSBBVDkzQ19SRUFECQkJMgorI2RlZmluZSBBVDkzQ19FUkFTRQkJCTMKKworI2RlZmluZSBFRVBST01fREVMQVkJCQk0CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcm9wX2dwaW8oc3RydWN0IGtzel9odyAqaHcsIHU4IGdwaW8pCit7CisJdTE2IGRhdGE7CisKKwlkYXRhID0gcmVhZHcoaHctPmlvICsgS1M4ODRYX0VFUFJPTV9DVFJMX09GRlNFVCk7CisJZGF0YSAmPSB+Z3BpbzsKKwl3cml0ZXcoZGF0YSwgaHctPmlvICsgS1M4ODRYX0VFUFJPTV9DVFJMX09GRlNFVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByYWlzZV9ncGlvKHN0cnVjdCBrc3pfaHcgKmh3LCB1OCBncGlvKQoreworCXUxNiBkYXRhOworCisJZGF0YSA9IHJlYWR3KGh3LT5pbyArIEtTODg0WF9FRVBST01fQ1RSTF9PRkZTRVQpOworCWRhdGEgfD0gZ3BpbzsKKwl3cml0ZXcoZGF0YSwgaHctPmlvICsgS1M4ODRYX0VFUFJPTV9DVFJMX09GRlNFVCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggc3RhdGVfZ3BpbyhzdHJ1Y3Qga3N6X2h3ICpodywgdTggZ3BpbykKK3sKKwl1MTYgZGF0YTsKKworCWRhdGEgPSByZWFkdyhody0+aW8gKyBLUzg4NFhfRUVQUk9NX0NUUkxfT0ZGU0VUKTsKKwlyZXR1cm4gKHU4KShkYXRhICYgZ3Bpbyk7Cit9CisKK3N0YXRpYyB2b2lkIGVlcHJvbV9jbGsoc3RydWN0IGtzel9odyAqaHcpCit7CisJcmFpc2VfZ3BpbyhodywgRUVQUk9NX1NFUklBTF9DTE9DSyk7CisJdWRlbGF5KEVFUFJPTV9ERUxBWSk7CisJZHJvcF9ncGlvKGh3LCBFRVBST01fU0VSSUFMX0NMT0NLKTsKKwl1ZGVsYXkoRUVQUk9NX0RFTEFZKTsKK30KKworc3RhdGljIHUxNiBzcGlfcihzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlpbnQgaTsKKwl1MTYgdGVtcCA9IDA7CisKKwlmb3IgKGkgPSAxNTsgaSA+PSAwOyBpLS0pIHsKKwkJcmFpc2VfZ3BpbyhodywgRUVQUk9NX1NFUklBTF9DTE9DSyk7CisJCXVkZWxheShFRVBST01fREVMQVkpOworCisJCXRlbXAgfD0gKHN0YXRlX2dwaW8oaHcsIEVFUFJPTV9EQVRBX0lOKSkgPyAxIDw8IGkgOiAwOworCisJCWRyb3BfZ3BpbyhodywgRUVQUk9NX1NFUklBTF9DTE9DSyk7CisJCXVkZWxheShFRVBST01fREVMQVkpOworCX0KKwlyZXR1cm4gdGVtcDsKK30KKworc3RhdGljIHZvaWQgc3BpX3coc3RydWN0IGtzel9odyAqaHcsIHUxNiBkYXRhKQoreworCWludCBpOworCisJZm9yIChpID0gMTU7IGkgPj0gMDsgaS0tKSB7CisJCShkYXRhICYgKDB4MDEgPDwgaSkpID8gcmFpc2VfZ3BpbyhodywgRUVQUk9NX0RBVEFfT1VUKSA6CisJCQlkcm9wX2dwaW8oaHcsIEVFUFJPTV9EQVRBX09VVCk7CisJCWVlcHJvbV9jbGsoaHcpOworCX0KK30KKworc3RhdGljIHZvaWQgc3BpX3JlZyhzdHJ1Y3Qga3N6X2h3ICpodywgdTggZGF0YSwgdTggcmVnKQoreworCWludCBpOworCisJLyogSW5pdGlhbCBzdGFydCBiaXQgKi8KKwlyYWlzZV9ncGlvKGh3LCBFRVBST01fREFUQV9PVVQpOworCWVlcHJvbV9jbGsoaHcpOworCisJLyogQVQ5M0Mgb3BlcmF0aW9uICovCisJZm9yIChpID0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJKGRhdGEgJiAoMHgwMSA8PCBpKSkgPyByYWlzZV9ncGlvKGh3LCBFRVBST01fREFUQV9PVVQpIDoKKwkJCWRyb3BfZ3BpbyhodywgRUVQUk9NX0RBVEFfT1VUKTsKKwkJZWVwcm9tX2Nsayhodyk7CisJfQorCisJLyogQWRkcmVzcyBsb2NhdGlvbiAqLworCWZvciAoaSA9IDU7IGkgPj0gMDsgaS0tKSB7CisJCShyZWcgJiAoMHgwMSA8PCBpKSkgPyByYWlzZV9ncGlvKGh3LCBFRVBST01fREFUQV9PVVQpIDoKKwkJCWRyb3BfZ3BpbyhodywgRUVQUk9NX0RBVEFfT1VUKTsKKwkJZWVwcm9tX2Nsayhodyk7CisJfQorfQorCisjZGVmaW5lIEVFUFJPTV9EQVRBX1JFU0VSVkVECQkwCisjZGVmaW5lIEVFUFJPTV9EQVRBX01BQ19BRERSXzAJCTEKKyNkZWZpbmUgRUVQUk9NX0RBVEFfTUFDX0FERFJfMQkJMgorI2RlZmluZSBFRVBST01fREFUQV9NQUNfQUREUl8yCQkzCisjZGVmaW5lIEVFUFJPTV9EQVRBX1NVQlNZU19JRAkJNAorI2RlZmluZSBFRVBST01fREFUQV9TVUJTWVNfVkVOX0lECTUKKyNkZWZpbmUgRUVQUk9NX0RBVEFfUE1fQ0FQCQk2CisKKy8qIFVzZXIgZGVmaW5lZCBFRVBST00gZGF0YSAqLworI2RlZmluZSBFRVBST01fREFUQV9PVEhFUl9NQUNfQUREUgk5CisKKy8qKgorICogZWVwcm9tX3JlYWQgLSByZWFkIGZyb20gQVQ5M0M0NiBFRVBST00KKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEByZWc6CVRoZSByZWdpc3RlciBvZmZzZXQuCisgKgorICogVGhpcyBmdW5jdGlvbiByZWFkcyBhIHdvcmQgZnJvbSB0aGUgQVQ5M0M0NiBFRVBST00uCisgKgorICogUmV0dXJuIHRoZSBkYXRhIHZhbHVlLgorICovCitzdGF0aWMgdTE2IGVlcHJvbV9yZWFkKHN0cnVjdCBrc3pfaHcgKmh3LCB1OCByZWcpCit7CisJdTE2IGRhdGE7CisKKwlyYWlzZV9ncGlvKGh3LCBFRVBST01fQUNDRVNTX0VOQUJMRSB8IEVFUFJPTV9DSElQX1NFTEVDVCk7CisKKwlzcGlfcmVnKGh3LCBBVDkzQ19SRUFELCByZWcpOworCWRhdGEgPSBzcGlfcihodyk7CisKKwlkcm9wX2dwaW8oaHcsIEVFUFJPTV9BQ0NFU1NfRU5BQkxFIHwgRUVQUk9NX0NISVBfU0VMRUNUKTsKKworCXJldHVybiBkYXRhOworfQorCisvKioKKyAqIGVlcHJvbV93cml0ZSAtIHdyaXRlIHRvIEFUOTNDNDYgRUVQUk9NCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcmVnOglUaGUgcmVnaXN0ZXIgb2Zmc2V0LgorICogQGRhdGE6CVRoZSBkYXRhIHZhbHVlLgorICoKKyAqIFRoaXMgcHJvY2VkdXJlIHdyaXRlcyBhIHdvcmQgdG8gdGhlIEFUOTNDNDYgRUVQUk9NLgorICovCitzdGF0aWMgdm9pZCBlZXByb21fd3JpdGUoc3RydWN0IGtzel9odyAqaHcsIHU4IHJlZywgdTE2IGRhdGEpCit7CisJaW50IHRpbWVvdXQ7CisKKwlyYWlzZV9ncGlvKGh3LCBFRVBST01fQUNDRVNTX0VOQUJMRSB8IEVFUFJPTV9DSElQX1NFTEVDVCk7CisKKwkvKiBFbmFibGUgd3JpdGUuICovCisJc3BpX3JlZyhodywgQVQ5M0NfQ09ERSwgQVQ5M0NfV1JfT04pOworCWRyb3BfZ3BpbyhodywgRUVQUk9NX0NISVBfU0VMRUNUKTsKKwl1ZGVsYXkoMSk7CisKKwkvKiBFcmFzZSB0aGUgcmVnaXN0ZXIuICovCisJcmFpc2VfZ3BpbyhodywgRUVQUk9NX0NISVBfU0VMRUNUKTsKKwlzcGlfcmVnKGh3LCBBVDkzQ19FUkFTRSwgcmVnKTsKKwlkcm9wX2dwaW8oaHcsIEVFUFJPTV9DSElQX1NFTEVDVCk7CisJdWRlbGF5KDEpOworCisJLyogQ2hlY2sgb3BlcmF0aW9uIGNvbXBsZXRlLiAqLworCXJhaXNlX2dwaW8oaHcsIEVFUFJPTV9DSElQX1NFTEVDVCk7CisJdGltZW91dCA9IDg7CisJbWRlbGF5KDIpOworCWRvIHsKKwkJbWRlbGF5KDEpOworCX0gd2hpbGUgKCFzdGF0ZV9ncGlvKGh3LCBFRVBST01fREFUQV9JTikgJiYgLS10aW1lb3V0KTsKKwlkcm9wX2dwaW8oaHcsIEVFUFJPTV9DSElQX1NFTEVDVCk7CisJdWRlbGF5KDEpOworCisJLyogV3JpdGUgdGhlIHJlZ2lzdGVyLiAqLworCXJhaXNlX2dwaW8oaHcsIEVFUFJPTV9DSElQX1NFTEVDVCk7CisJc3BpX3JlZyhodywgQVQ5M0NfV1JJVEUsIHJlZyk7CisJc3BpX3coaHcsIGRhdGEpOworCWRyb3BfZ3BpbyhodywgRUVQUk9NX0NISVBfU0VMRUNUKTsKKwl1ZGVsYXkoMSk7CisKKwkvKiBDaGVjayBvcGVyYXRpb24gY29tcGxldGUuICovCisJcmFpc2VfZ3BpbyhodywgRUVQUk9NX0NISVBfU0VMRUNUKTsKKwl0aW1lb3V0ID0gODsKKwltZGVsYXkoMik7CisJZG8geworCQltZGVsYXkoMSk7CisJfSB3aGlsZSAoIXN0YXRlX2dwaW8oaHcsIEVFUFJPTV9EQVRBX0lOKSAmJiAtLXRpbWVvdXQpOworCWRyb3BfZ3BpbyhodywgRUVQUk9NX0NISVBfU0VMRUNUKTsKKwl1ZGVsYXkoMSk7CisKKwkvKiBEaXNhYmxlIHdyaXRlLiAqLworCXJhaXNlX2dwaW8oaHcsIEVFUFJPTV9DSElQX1NFTEVDVCk7CisJc3BpX3JlZyhodywgQVQ5M0NfQ09ERSwgQVQ5M0NfV1JfT0ZGKTsKKworCWRyb3BfZ3BpbyhodywgRUVQUk9NX0FDQ0VTU19FTkFCTEUgfCBFRVBST01fQ0hJUF9TRUxFQ1QpOworfQorCisvKgorICogTGluayBkZXRlY3Rpb24gcm91dGluZXMKKyAqLworCitzdGF0aWMgdTE2IGFkdmVydGlzZWRfZmxvd19jdHJsKHN0cnVjdCBrc3pfcG9ydCAqcG9ydCwgdTE2IGN0cmwpCit7CisJY3RybCAmPSB+UE9SVF9BVVRPX05FR19TWU1fUEFVU0U7CisJc3dpdGNoIChwb3J0LT5mbG93X2N0cmwpIHsKKwljYXNlIFBIWV9GTE9XX0NUUkw6CisJCWN0cmwgfD0gUE9SVF9BVVRPX05FR19TWU1fUEFVU0U7CisJCWJyZWFrOworCS8qIE5vdCBzdXBwb3J0ZWQuICovCisJY2FzZSBQSFlfVFhfT05MWToKKwljYXNlIFBIWV9SWF9PTkxZOgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gY3RybDsKK30KKworc3RhdGljIHZvaWQgc2V0X2Zsb3dfY3RybChzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHJ4LCBpbnQgdHgpCit7CisJdTMyIHJ4X2NmZzsKKwl1MzIgdHhfY2ZnOworCisJcnhfY2ZnID0gaHctPnJ4X2NmZzsKKwl0eF9jZmcgPSBody0+dHhfY2ZnOworCWlmIChyeCkKKwkJaHctPnJ4X2NmZyB8PSBETUFfUlhfRkxPV19FTkFCTEU7CisJZWxzZQorCQlody0+cnhfY2ZnICY9IH5ETUFfUlhfRkxPV19FTkFCTEU7CisJaWYgKHR4KQorCQlody0+dHhfY2ZnIHw9IERNQV9UWF9GTE9XX0VOQUJMRTsKKwllbHNlCisJCWh3LT50eF9jZmcgJj0gfkRNQV9UWF9GTE9XX0VOQUJMRTsKKwlpZiAoaHctPmVuYWJsZWQpIHsKKwkJaWYgKHJ4X2NmZyAhPSBody0+cnhfY2ZnKQorCQkJd3JpdGVsKGh3LT5yeF9jZmcsIGh3LT5pbyArIEtTX0RNQV9SWF9DVFJMKTsKKwkJaWYgKHR4X2NmZyAhPSBody0+dHhfY2ZnKQorCQkJd3JpdGVsKGh3LT50eF9jZmcsIGh3LT5pbyArIEtTX0RNQV9UWF9DVFJMKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGRldGVybWluZV9mbG93X2N0cmwoc3RydWN0IGtzel9odyAqaHcsIHN0cnVjdCBrc3pfcG9ydCAqcG9ydCwKKwl1MTYgbG9jYWwsIHUxNiByZW1vdGUpCit7CisJaW50IHJ4OworCWludCB0eDsKKworCWlmIChody0+b3ZlcnJpZGVzICYgUEFVU0VfRkxPV19DVFJMKQorCQlyZXR1cm47CisKKwlyeCA9IHR4ID0gMDsKKwlpZiAocG9ydC0+Zm9yY2VfbGluaykKKwkJcnggPSB0eCA9IDE7CisJaWYgKHJlbW90ZSAmIFBIWV9BVVRPX05FR19TWU1fUEFVU0UpIHsKKwkJaWYgKGxvY2FsICYgUEhZX0FVVE9fTkVHX1NZTV9QQVVTRSkgeworCQkJcnggPSB0eCA9IDE7CisJCX0gZWxzZSBpZiAoKHJlbW90ZSAmIFBIWV9BVVRPX05FR19BU1lNX1BBVVNFKSAmJgorCQkJCShsb2NhbCAmIFBIWV9BVVRPX05FR19QQVVTRSkgPT0KKwkJCQlQSFlfQVVUT19ORUdfQVNZTV9QQVVTRSkgeworCQkJdHggPSAxOworCQl9CisJfSBlbHNlIGlmIChyZW1vdGUgJiBQSFlfQVVUT19ORUdfQVNZTV9QQVVTRSkgeworCQlpZiAoKGxvY2FsICYgUEhZX0FVVE9fTkVHX1BBVVNFKSA9PSBQSFlfQVVUT19ORUdfUEFVU0UpCisJCQlyeCA9IDE7CisJfQorCWlmICghaHctPmtzel9zd2l0Y2gpCisJCXNldF9mbG93X2N0cmwoaHcsIHJ4LCB0eCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwb3J0X2NmZ19jaGFuZ2Uoc3RydWN0IGtzel9odyAqaHcsIHN0cnVjdCBrc3pfcG9ydCAqcG9ydCwKKwlzdHJ1Y3Qga3N6X3BvcnRfaW5mbyAqaW5mbywgdTE2IGxpbmtfc3RhdHVzKQoreworCWlmICgoaHctPmZlYXR1cmVzICYgSEFMRl9EVVBMRVhfU0lHTkFMX0JVRykgJiYKKwkJCSEoaHctPm92ZXJyaWRlcyAmIFBBVVNFX0ZMT1dfQ1RSTCkpIHsKKwkJdTMyIGNmZyA9IGh3LT50eF9jZmc7CisKKwkJLyogRGlzYWJsZSBmbG93IGNvbnRyb2wgaW4gdGhlIGhhbGYgZHVwbGV4IG1vZGUuICovCisJCWlmICgxID09IGluZm8tPmR1cGxleCkKKwkJCWh3LT50eF9jZmcgJj0gfkRNQV9UWF9GTE9XX0VOQUJMRTsKKwkJaWYgKGh3LT5lbmFibGVkICYmIGNmZyAhPSBody0+dHhfY2ZnKQorCQkJd3JpdGVsKGh3LT50eF9jZmcsIGh3LT5pbyArIEtTX0RNQV9UWF9DVFJMKTsKKwl9Cit9CisKKy8qKgorICogcG9ydF9nZXRfbGlua19zcGVlZCAtIGdldCBjdXJyZW50IGxpbmsgc3RhdHVzCisgKiBAcG9ydDogCVRoZSBwb3J0IGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSByZWFkcyBQSFkgcmVnaXN0ZXJzIHRvIGRldGVybWluZSB0aGUgY3VycmVudCBsaW5rIHN0YXR1cyBvZiB0aGUKKyAqIHN3aXRjaCBwb3J0cy4KKyAqLworc3RhdGljIHZvaWQgcG9ydF9nZXRfbGlua19zcGVlZChzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQpCit7CisJdWludCBpbnRlcnJ1cHQ7CisJc3RydWN0IGtzel9wb3J0X2luZm8gKmluZm87CisJc3RydWN0IGtzel9wb3J0X2luZm8gKmxpbmtlZCA9IE5VTEw7CisJc3RydWN0IGtzel9odyAqaHcgPSBwb3J0LT5odzsKKwl1MTYgZGF0YTsKKwl1MTYgc3RhdHVzOworCXU4IGxvY2FsOworCXU4IHJlbW90ZTsKKwlpbnQgaTsKKwlpbnQgcDsKKwlpbnQgY2hhbmdlID0gMDsKKworCWludGVycnVwdCA9IGh3X2Jsb2NrX2ludHIoaHcpOworCisJZm9yIChpID0gMCwgcCA9IHBvcnQtPmZpcnN0X3BvcnQ7IGkgPCBwb3J0LT5wb3J0X2NudDsgaSsrLCBwKyspIHsKKwkJaW5mbyA9ICZody0+cG9ydF9pbmZvW3BdOworCQlwb3J0X3IxNihodywgcCwgS1M4ODRYX1BPUlRfQ1RSTF80X09GRlNFVCwgJmRhdGEpOworCQlwb3J0X3IxNihodywgcCwgS1M4ODRYX1BPUlRfU1RBVFVTX09GRlNFVCwgJnN0YXR1cyk7CisKKwkJLyoKKwkJICogTGluayBzdGF0dXMgaXMgY2hhbmdpbmcgYWxsIHRoZSB0aW1lIGV2ZW4gd2hlbiB0aGVyZSBpcyBubworCQkgKiBjYWJsZSBjb25uZWN0aW9uIQorCQkgKi8KKwkJcmVtb3RlID0gc3RhdHVzICYgKFBPUlRfQVVUT19ORUdfQ09NUExFVEUgfAorCQkJUE9SVF9TVEFUVVNfTElOS19HT09EKTsKKwkJbG9jYWwgPSAodTgpIGRhdGE7CisKKwkJLyogTm8gY2hhbmdlIHRvIHN0YXR1cy4gKi8KKwkJaWYgKGxvY2FsID09IGluZm8tPmFkdmVydGlzZWQgJiYgcmVtb3RlID09IGluZm8tPnBhcnRuZXIpCisJCQljb250aW51ZTsKKworCQlpbmZvLT5hZHZlcnRpc2VkID0gbG9jYWw7CisJCWluZm8tPnBhcnRuZXIgPSByZW1vdGU7CisJCWlmIChzdGF0dXMgJiBQT1JUX1NUQVRVU19MSU5LX0dPT0QpIHsKKworCQkJLyogUmVtZW1iZXIgdGhlIGZpcnN0IGxpbmtlZCBwb3J0LiAqLworCQkJaWYgKCFsaW5rZWQpCisJCQkJbGlua2VkID0gaW5mbzsKKworCQkJaW5mby0+dHhfcmF0ZSA9IDEwICogVFhfUkFURV9VTklUOworCQkJaWYgKHN0YXR1cyAmIFBPUlRfU1RBVFVTX1NQRUVEXzEwME1CSVQpCisJCQkJaW5mby0+dHhfcmF0ZSA9IDEwMCAqIFRYX1JBVEVfVU5JVDsKKworCQkJaW5mby0+ZHVwbGV4ID0gMTsKKwkJCWlmIChzdGF0dXMgJiBQT1JUX1NUQVRVU19GVUxMX0RVUExFWCkKKwkJCQlpbmZvLT5kdXBsZXggPSAyOworCisJCQlpZiAobWVkaWFfY29ubmVjdGVkICE9IGluZm8tPnN0YXRlKSB7CisJCQkJaHdfcl9waHkoaHcsIHAsIEtTODg0WF9QSFlfQVVUT19ORUdfT0ZGU0VULAorCQkJCQkmZGF0YSk7CisJCQkJaHdfcl9waHkoaHcsIHAsIEtTODg0WF9QSFlfUkVNT1RFX0NBUF9PRkZTRVQsCisJCQkJCSZzdGF0dXMpOworCQkJCWRldGVybWluZV9mbG93X2N0cmwoaHcsIHBvcnQsIGRhdGEsIHN0YXR1cyk7CisJCQkJaWYgKGh3LT5rc3pfc3dpdGNoKSB7CisJCQkJCXBvcnRfY2ZnX2JhY2tfcHJlc3N1cmUoaHcsIHAsCisJCQkJCQkoMSA9PSBpbmZvLT5kdXBsZXgpKTsKKwkJCQl9CisJCQkJY2hhbmdlIHw9IDEgPDwgaTsKKwkJCQlwb3J0X2NmZ19jaGFuZ2UoaHcsIHBvcnQsIGluZm8sIHN0YXR1cyk7CisJCQl9CisJCQlpbmZvLT5zdGF0ZSA9IG1lZGlhX2Nvbm5lY3RlZDsKKwkJfSBlbHNlIHsKKwkJCWlmIChtZWRpYV9kaXNjb25uZWN0ZWQgIT0gaW5mby0+c3RhdGUpIHsKKwkJCQljaGFuZ2UgfD0gMSA8PCBpOworCisJCQkJLyogSW5kaWNhdGUgdGhlIGxpbmsganVzdCBnb2VzIGRvd24uICovCisJCQkJaHctPnBvcnRfbWliW3BdLmxpbmtfZG93biA9IDE7CisJCQl9CisJCQlpbmZvLT5zdGF0ZSA9IG1lZGlhX2Rpc2Nvbm5lY3RlZDsKKwkJfQorCQlody0+cG9ydF9taWJbcF0uc3RhdGUgPSAodTgpIGluZm8tPnN0YXRlOworCX0KKworCWlmIChsaW5rZWQgJiYgbWVkaWFfZGlzY29ubmVjdGVkID09IHBvcnQtPmxpbmtlZC0+c3RhdGUpCisJCXBvcnQtPmxpbmtlZCA9IGxpbmtlZDsKKworCWh3X3Jlc3RvcmVfaW50cihodywgaW50ZXJydXB0KTsKK30KKworI2RlZmluZSBQSFlfUkVTRVRfVElNRU9VVAkJMTAKKworLyoqCisgKiBwb3J0X3NldF9saW5rX3NwZWVkIC0gc2V0IHBvcnQgc3BlZWQKKyAqIEBwb3J0OiAJVGhlIHBvcnQgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIHNldHMgdGhlIGxpbmsgc3BlZWQgb2YgdGhlIHN3aXRjaCBwb3J0cy4KKyAqLworc3RhdGljIHZvaWQgcG9ydF9zZXRfbGlua19zcGVlZChzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQpCit7CisJc3RydWN0IGtzel9wb3J0X2luZm8gKmluZm87CisJc3RydWN0IGtzel9odyAqaHcgPSBwb3J0LT5odzsKKwl1MTYgZGF0YTsKKwl1MTYgY2ZnOworCXU4IHN0YXR1czsKKwlpbnQgaTsKKwlpbnQgcDsKKworCWZvciAoaSA9IDAsIHAgPSBwb3J0LT5maXJzdF9wb3J0OyBpIDwgcG9ydC0+cG9ydF9jbnQ7IGkrKywgcCsrKSB7CisJCWluZm8gPSAmaHctPnBvcnRfaW5mb1twXTsKKworCQlwb3J0X3IxNihodywgcCwgS1M4ODRYX1BPUlRfQ1RSTF80X09GRlNFVCwgJmRhdGEpOworCQlwb3J0X3I4KGh3LCBwLCBLUzg4NFhfUE9SVF9TVEFUVVNfT0ZGU0VULCAmc3RhdHVzKTsKKworCQljZmcgPSAwOworCQlpZiAoc3RhdHVzICYgUE9SVF9TVEFUVVNfTElOS19HT09EKQorCQkJY2ZnID0gZGF0YTsKKworCQlkYXRhIHw9IFBPUlRfQVVUT19ORUdfRU5BQkxFOworCQlkYXRhID0gYWR2ZXJ0aXNlZF9mbG93X2N0cmwocG9ydCwgZGF0YSk7CisKKwkJZGF0YSB8PSBQT1JUX0FVVE9fTkVHXzEwMEJUWF9GRCB8IFBPUlRfQVVUT19ORUdfMTAwQlRYIHwKKwkJCVBPUlRfQVVUT19ORUdfMTBCVF9GRCB8IFBPUlRfQVVUT19ORUdfMTBCVDsKKworCQkvKiBDaGVjayBpZiBtYW51YWwgY29uZmlndXJhdGlvbiBpcyBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuICovCisJCWlmIChwb3J0LT5zcGVlZCB8fCBwb3J0LT5kdXBsZXgpIHsKKwkJCWlmICgxMCA9PSBwb3J0LT5zcGVlZCkKKwkJCQlkYXRhICY9IH4oUE9SVF9BVVRPX05FR18xMDBCVFhfRkQgfAorCQkJCQlQT1JUX0FVVE9fTkVHXzEwMEJUWCk7CisJCQllbHNlIGlmICgxMDAgPT0gcG9ydC0+c3BlZWQpCisJCQkJZGF0YSAmPSB+KFBPUlRfQVVUT19ORUdfMTBCVF9GRCB8CisJCQkJCVBPUlRfQVVUT19ORUdfMTBCVCk7CisJCQlpZiAoMSA9PSBwb3J0LT5kdXBsZXgpCisJCQkJZGF0YSAmPSB+KFBPUlRfQVVUT19ORUdfMTAwQlRYX0ZEIHwKKwkJCQkJUE9SVF9BVVRPX05FR18xMEJUX0ZEKTsKKwkJCWVsc2UgaWYgKDIgPT0gcG9ydC0+ZHVwbGV4KQorCQkJCWRhdGEgJj0gfihQT1JUX0FVVE9fTkVHXzEwMEJUWCB8CisJCQkJCVBPUlRfQVVUT19ORUdfMTBCVCk7CisJCX0KKwkJaWYgKGRhdGEgIT0gY2ZnKSB7CisJCQlkYXRhIHw9IFBPUlRfQVVUT19ORUdfUkVTVEFSVDsKKwkJCXBvcnRfdzE2KGh3LCBwLCBLUzg4NFhfUE9SVF9DVFJMXzRfT0ZGU0VULCBkYXRhKTsKKwkJfQorCX0KK30KKworLyoqCisgKiBwb3J0X2ZvcmNlX2xpbmtfc3BlZWQgLSBmb3JjZSBwb3J0IHNwZWVkCisgKiBAcG9ydDogCVRoZSBwb3J0IGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSBmb3JjZXMgdGhlIGxpbmsgc3BlZWQgb2YgdGhlIHN3aXRjaCBwb3J0cy4KKyAqLworc3RhdGljIHZvaWQgcG9ydF9mb3JjZV9saW5rX3NwZWVkKHN0cnVjdCBrc3pfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9IHBvcnQtPmh3OworCXUxNiBkYXRhOworCWludCBpOworCWludCBwaHk7CisJaW50IHA7CisKKwlmb3IgKGkgPSAwLCBwID0gcG9ydC0+Zmlyc3RfcG9ydDsgaSA8IHBvcnQtPnBvcnRfY250OyBpKyssIHArKykgeworCQlwaHkgPSBLUzg4NFhfUEhZXzFfQ1RSTF9PRkZTRVQgKyBwICogUEhZX0NUUkxfSU5URVJWQUw7CisJCWh3X3JfcGh5X2N0cmwoaHcsIHBoeSwgJmRhdGEpOworCisJCWRhdGEgJj0gflBIWV9BVVRPX05FR19FTkFCTEU7CisKKwkJaWYgKDEwID09IHBvcnQtPnNwZWVkKQorCQkJZGF0YSAmPSB+UEhZX1NQRUVEXzEwME1CSVQ7CisJCWVsc2UgaWYgKDEwMCA9PSBwb3J0LT5zcGVlZCkKKwkJCWRhdGEgfD0gUEhZX1NQRUVEXzEwME1CSVQ7CisJCWlmICgxID09IHBvcnQtPmR1cGxleCkKKwkJCWRhdGEgJj0gflBIWV9GVUxMX0RVUExFWDsKKwkJZWxzZSBpZiAoMiA9PSBwb3J0LT5kdXBsZXgpCisJCQlkYXRhIHw9IFBIWV9GVUxMX0RVUExFWDsKKwkJaHdfd19waHlfY3RybChodywgcGh5LCBkYXRhKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHBvcnRfc2V0X3Bvd2VyX3NhdmluZyhzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQsIGludCBlbmFibGUpCit7CisJc3RydWN0IGtzel9odyAqaHcgPSBwb3J0LT5odzsKKwlpbnQgaTsKKwlpbnQgcDsKKworCWZvciAoaSA9IDAsIHAgPSBwb3J0LT5maXJzdF9wb3J0OyBpIDwgcG9ydC0+cG9ydF9jbnQ7IGkrKywgcCsrKQorCQlwb3J0X2NmZyhodywgcCwKKwkJCUtTODg0WF9QT1JUX0NUUkxfNF9PRkZTRVQsIFBPUlRfUE9XRVJfRE9XTiwgZW5hYmxlKTsKK30KKworLyoKKyAqIEtTWjg4NDEgcG93ZXIgbWFuYWdlbWVudCBmdW5jdGlvbnMKKyAqLworCisvKioKKyAqIGh3X2Noa193b2xfcG1lX3N0YXR1cyAtIGNoZWNrIFBNRU4gcGluCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGNoZWNrIFBNRU4gcGluIGlzIGFzc2VydGVkLgorICoKKyAqIFJldHVybiAxIGlmIFBNRU4gcGluIGlzIGFzc2VydGVkOyBvdGhlcndpc2UsIDAuCisgKi8KK3N0YXRpYyBpbnQgaHdfY2hrX3dvbF9wbWVfc3RhdHVzKHN0cnVjdCBrc3pfaHcgKmh3KQoreworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IGNvbnRhaW5lcl9vZihodywgc3RydWN0IGRldl9pbmZvLCBodyk7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBod19wcml2LT5wZGV2OworCXUxNiBkYXRhOworCisJaWYgKCFwZGV2LT5wbV9jYXApCisJCXJldHVybiAwOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIHBkZXYtPnBtX2NhcCArIFBDSV9QTV9DVFJMLCAmZGF0YSk7CisJcmV0dXJuIChkYXRhICYgUENJX1BNX0NUUkxfUE1FX1NUQVRVUykgPT0gUENJX1BNX0NUUkxfUE1FX1NUQVRVUzsKK30KKworLyoqCisgKiBod19jbHJfd29sX3BtZV9zdGF0dXMgLSBjbGVhciBQTUVOIHBpbgorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGNsZWFyIFBNRV9TdGF0dXMgdG8gZGVhc3NlcnQgUE1FTiBwaW4uCisgKi8KK3N0YXRpYyB2b2lkIGh3X2Nscl93b2xfcG1lX3N0YXR1cyhzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBkZXZfaW5mbywgaHcpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gaHdfcHJpdi0+cGRldjsKKwl1MTYgZGF0YTsKKworCWlmICghcGRldi0+cG1fY2FwKQorCQlyZXR1cm47CisKKwkvKiBDbGVhciBQTUVfU3RhdHVzIHRvIGRlYXNzZXJ0IFBNRU4gcGluLiAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIHBkZXYtPnBtX2NhcCArIFBDSV9QTV9DVFJMLCAmZGF0YSk7CisJZGF0YSB8PSBQQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTOworCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBwZGV2LT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwgZGF0YSk7Cit9CisKKy8qKgorICogaHdfY2ZnX3dvbF9wbWUgLSBlbmFibGUgb3IgZGlzYWJsZSBXYWtlLW9uLUxBTgorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHNldDoJVGhlIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIGVuYWJsZSBvciBkaXNhYmxlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGVuYWJsZSBvciBkaXNhYmxlIFdha2Utb24tTEFOLgorICovCitzdGF0aWMgdm9pZCBod19jZmdfd29sX3BtZShzdHJ1Y3Qga3N6X2h3ICpodywgaW50IHNldCkKK3sKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBkZXZfaW5mbywgaHcpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gaHdfcHJpdi0+cGRldjsKKwl1MTYgZGF0YTsKKworCWlmICghcGRldi0+cG1fY2FwKQorCQlyZXR1cm47CisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgcGRldi0+cG1fY2FwICsgUENJX1BNX0NUUkwsICZkYXRhKTsKKwlkYXRhICY9IH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLOworCWlmIChzZXQpCisJCWRhdGEgfD0gUENJX1BNX0NUUkxfUE1FX0VOQUJMRSB8IFBDSV9EM2hvdDsKKwllbHNlCisJCWRhdGEgJj0gflBDSV9QTV9DVFJMX1BNRV9FTkFCTEU7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIHBkZXYtPnBtX2NhcCArIFBDSV9QTV9DVFJMLCBkYXRhKTsKK30KKworLyoqCisgKiBod19jZmdfd29sIC0gY29uZmlndXJlIFdha2Utb24tTEFOIGZlYXR1cmVzCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAZnJhbWU6CVRoZSBwYXR0ZXJuIGZyYW1lIGJpdC4KKyAqIEBzZXQ6CVRoZSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0byBlbmFibGUgb3IgZGlzYWJsZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBlbmFibGUgb3IgZGlzYWJsZSBjZXJ0YWluIFdha2Utb24tTEFOIGZlYXR1cmVzLgorICovCitzdGF0aWMgdm9pZCBod19jZmdfd29sKHN0cnVjdCBrc3pfaHcgKmh3LCB1MTYgZnJhbWUsIGludCBzZXQpCit7CisJdTE2IGRhdGE7CisKKwlkYXRhID0gcmVhZHcoaHctPmlvICsgS1M4ODQxX1dPTF9DVFJMX09GRlNFVCk7CisJaWYgKHNldCkKKwkJZGF0YSB8PSBmcmFtZTsKKwllbHNlCisJCWRhdGEgJj0gfmZyYW1lOworCXdyaXRldyhkYXRhLCBody0+aW8gKyBLUzg4NDFfV09MX0NUUkxfT0ZGU0VUKTsKK30KKworLyoqCisgKiBod19zZXRfd29sX2ZyYW1lIC0gcHJvZ3JhbSBXYWtlLW9uLUxBTiBwYXR0ZXJuCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAaToJCVRoZSBmcmFtZSBpbmRleC4KKyAqIEBtYXNrX3NpemU6CVRoZSBzaXplIG9mIHRoZSBtYXNrLgorICogQG1hc2s6CU1hc2sgdG8gaWdub3JlIGNlcnRhaW4gYnl0ZXMgaW4gdGhlIHBhdHRlcm4uCisgKiBAZnJhbWVfc2l6ZToJVGhlIHNpemUgb2YgdGhlIGZyYW1lLgorICogQHBhdHRlcm46CVRoZSBmcmFtZSBkYXRhLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIHByb2dyYW0gV2FrZS1vbi1MQU4gcGF0dGVybi4KKyAqLworc3RhdGljIHZvaWQgaHdfc2V0X3dvbF9mcmFtZShzdHJ1Y3Qga3N6X2h3ICpodywgaW50IGksIHVpbnQgbWFza19zaXplLAorCXU4ICptYXNrLCB1aW50IGZyYW1lX3NpemUsIHU4ICpwYXR0ZXJuKQoreworCWludCBiaXRzOworCWludCBmcm9tOworCWludCBsZW47CisJaW50IHRvOworCXUzMiBjcmM7CisJdTggZGF0YVs2NF07CisJdTggdmFsID0gMDsKKworCWlmIChmcmFtZV9zaXplID4gbWFza19zaXplICogOCkKKwkJZnJhbWVfc2l6ZSA9IG1hc2tfc2l6ZSAqIDg7CisJaWYgKGZyYW1lX3NpemUgPiA2NCkKKwkJZnJhbWVfc2l6ZSA9IDY0OworCisJaSAqPSAweDEwOworCXdyaXRlbCgwLCBody0+aW8gKyBLUzg4NDFfV09MX0ZSQU1FX0JZVEUwX09GRlNFVCArIGkpOworCXdyaXRlbCgwLCBody0+aW8gKyBLUzg4NDFfV09MX0ZSQU1FX0JZVEUyX09GRlNFVCArIGkpOworCisJYml0cyA9IGxlbiA9IGZyb20gPSB0byA9IDA7CisJZG8geworCQlpZiAoYml0cykgeworCQkJaWYgKCh2YWwgJiAxKSkKKwkJCQlkYXRhW3RvKytdID0gcGF0dGVybltmcm9tXTsKKwkJCXZhbCA+Pj0gMTsKKwkJCSsrZnJvbTsKKwkJCS0tYml0czsKKwkJfSBlbHNlIHsKKwkJCXZhbCA9IG1hc2tbbGVuXTsKKwkJCXdyaXRlYih2YWwsIGh3LT5pbyArIEtTODg0MV9XT0xfRlJBTUVfQllURTBfT0ZGU0VUICsgaQorCQkJCSsgbGVuKTsKKwkJCSsrbGVuOworCQkJaWYgKHZhbCkKKwkJCQliaXRzID0gODsKKwkJCWVsc2UKKwkJCQlmcm9tICs9IDg7CisJCX0KKwl9IHdoaWxlIChmcm9tIDwgKGludCkgZnJhbWVfc2l6ZSk7CisJaWYgKHZhbCkgeworCQliaXRzID0gbWFza1tsZW4gLSAxXTsKKwkJdmFsIDw8PSAoZnJvbSAlIDgpOworCQliaXRzICY9IH52YWw7CisJCXdyaXRlYihiaXRzLCBody0+aW8gKyBLUzg4NDFfV09MX0ZSQU1FX0JZVEUwX09GRlNFVCArIGkgKyBsZW4gLQorCQkJMSk7CisJfQorCWNyYyA9IGV0aGVyX2NyYyh0bywgZGF0YSk7CisJd3JpdGVsKGNyYywgaHctPmlvICsgS1M4ODQxX1dPTF9GUkFNRV9DUkNfT0ZGU0VUICsgaSk7Cit9CisKKy8qKgorICogaHdfYWRkX3dvbF9hcnAgLSBhZGQgQVJQIHBhdHRlcm4KKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBpcF9hZGRyOglUaGUgSVB2NCBhZGRyZXNzIGFzc2lnbmVkIHRvIHRoZSBkZXZpY2UuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gYWRkIEFSUCBwYXR0ZXJuIGZvciB3YWtpbmcgdXAgdGhlIGhvc3QuCisgKi8KK3N0YXRpYyB2b2lkIGh3X2FkZF93b2xfYXJwKHN0cnVjdCBrc3pfaHcgKmh3LCB1OCAqaXBfYWRkcikKK3sKKwl1OCBtYXNrWzZdID0geyAweDNGLCAweEYwLCAweDNGLCAweDAwLCAweEMwLCAweDAzIH07CisJdTggcGF0dGVybls0Ml0gPSB7CisJCTB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsIDB4RkYsCisJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCTB4MDgsIDB4MDYsCisJCTB4MDAsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDYsIDB4MDQsIDB4MDAsIDB4MDEsCisJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworCW1lbWNweSgmcGF0dGVyblszOF0sIGlwX2FkZHIsIDQpOworCWh3X3NldF93b2xfZnJhbWUoaHcsIDMsIDYsIG1hc2ssIDQyLCBwYXR0ZXJuKTsKK30KKworLyoqCisgKiBod19hZGRfd29sX2JjYXN0IC0gYWRkIGJyb2FkY2FzdCBwYXR0ZXJuCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIGlzIHVzZWQgdG8gYWRkIGJyb2FkY2FzdCBwYXR0ZXJuIGZvciB3YWtpbmcgdXAgdGhlIGhvc3QuCisgKi8KK3N0YXRpYyB2b2lkIGh3X2FkZF93b2xfYmNhc3Qoc3RydWN0IGtzel9odyAqaHcpCit7CisJdTggbWFza1tdID0geyAweDNGIH07CisJdTggcGF0dGVybltdID0geyAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGLCAweEZGIH07CisKKwlod19zZXRfd29sX2ZyYW1lKGh3LCAyLCAxLCBtYXNrLCBNQUNfQUREUl9MRU4sIHBhdHRlcm4pOworfQorCisvKioKKyAqIGh3X2FkZF93b2xfbWNhc3QgLSBhZGQgbXVsdGljYXN0IHBhdHRlcm4KKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBhZGQgbXVsdGljYXN0IHBhdHRlcm4gZm9yIHdha2luZyB1cCB0aGUgaG9zdC4KKyAqCisgKiBJdCBpcyBhc3N1bWVkIHRoZSBtdWx0aWNhc3QgcGFja2V0IGlzIHRoZSBJQ01QdjYgbmVpZ2hib3Igc29saWNpdGF0aW9uIHVzZWQKKyAqIGJ5IElQdjYgcGluZyBjb21tYW5kLiAgTm90ZSB0aGF0IG11bHRpY2FzdCBwYWNrZXRzIGFyZSBmaWx0cmVkIHRocm91Z2ggdGhlCisgKiBtdWx0aWNhc3QgaGFzaCB0YWJsZSwgc28gbm90IGFsbCBtdWx0aWNhc3QgcGFja2V0cyBjYW4gd2FrZSB1cCB0aGUgaG9zdC4KKyAqLworc3RhdGljIHZvaWQgaHdfYWRkX3dvbF9tY2FzdChzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwl1OCBtYXNrW10gPSB7IDB4M0YgfTsKKwl1OCBwYXR0ZXJuW10gPSB7IDB4MzMsIDB4MzMsIDB4RkYsIDB4MDAsIDB4MDAsIDB4MDAgfTsKKworCW1lbWNweSgmcGF0dGVyblszXSwgJmh3LT5vdmVycmlkZV9hZGRyWzNdLCAzKTsKKwlod19zZXRfd29sX2ZyYW1lKGh3LCAxLCAxLCBtYXNrLCA2LCBwYXR0ZXJuKTsKK30KKworLyoqCisgKiBod19hZGRfd29sX3VjYXN0IC0gYWRkIHVuaWNhc3QgcGF0dGVybgorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGFkZCB1bmljYXN0IHBhdHRlcm4gdG8gd2FrZXVwIHRoZSBob3N0LgorICoKKyAqIEl0IGlzIGFzc3VtZWQgdGhlIHVuaWNhc3QgcGFja2V0IGlzIGRpcmVjdGVkIHRvIHRoZSBkZXZpY2UsIGFzIHRoZSBoYXJkd2FyZQorICogY2FuIG9ubHkgcmVjZWl2ZSB0aGVtIGluIG5vcm1hbCBjYXNlLgorICovCitzdGF0aWMgdm9pZCBod19hZGRfd29sX3VjYXN0KHN0cnVjdCBrc3pfaHcgKmh3KQoreworCXU4IG1hc2tbXSA9IHsgMHgzRiB9OworCisJaHdfc2V0X3dvbF9mcmFtZShodywgMCwgMSwgbWFzaywgTUFDX0FERFJfTEVOLCBody0+b3ZlcnJpZGVfYWRkcik7Cit9CisKKy8qKgorICogaHdfZW5hYmxlX3dvbCAtIGVuYWJsZSBXYWtlLW9uLUxBTgorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHdvbF9lbmFibGU6CVRoZSBXYWtlLW9uLUxBTiBzZXR0aW5ncy4KKyAqIEBuZXRfYWRkcjoJVGhlIElQdjQgYWRkcmVzcyBhc3NpZ25lZCB0byB0aGUgZGV2aWNlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGVuYWJsZSBXYWtlLW9uLUxBTiBkZXBlbmRpbmcgb24gZHJpdmVyIHNldHRpbmdzLgorICovCitzdGF0aWMgdm9pZCBod19lbmFibGVfd29sKHN0cnVjdCBrc3pfaHcgKmh3LCB1MzIgd29sX2VuYWJsZSwgdTggKm5ldF9hZGRyKQoreworCWh3X2NmZ193b2woaHcsIEtTODg0MV9XT0xfTUFHSUNfRU5BQkxFLCAod29sX2VuYWJsZSAmIFdBS0VfTUFHSUMpKTsKKwlod19jZmdfd29sKGh3LCBLUzg4NDFfV09MX0ZSQU1FMF9FTkFCTEUsICh3b2xfZW5hYmxlICYgV0FLRV9VQ0FTVCkpOworCWh3X2FkZF93b2xfdWNhc3QoaHcpOworCWh3X2NmZ193b2woaHcsIEtTODg0MV9XT0xfRlJBTUUxX0VOQUJMRSwgKHdvbF9lbmFibGUgJiBXQUtFX01DQVNUKSk7CisJaHdfYWRkX3dvbF9tY2FzdChodyk7CisJaHdfY2ZnX3dvbChodywgS1M4ODQxX1dPTF9GUkFNRTJfRU5BQkxFLCAod29sX2VuYWJsZSAmIFdBS0VfQkNBU1QpKTsKKwlod19jZmdfd29sKGh3LCBLUzg4NDFfV09MX0ZSQU1FM19FTkFCTEUsICh3b2xfZW5hYmxlICYgV0FLRV9BUlApKTsKKwlod19hZGRfd29sX2FycChodywgbmV0X2FkZHIpOworfQorCisvKioKKyAqIGh3X2luaXQgLSBjaGVjayBkcml2ZXIgaXMgY29ycmVjdCBmb3IgdGhlIGhhcmR3YXJlCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIGhhcmR3YXJlIGlzIGNvcnJlY3QgZm9yIHRoaXMgZHJpdmVyIGFuZCBzZXRzIHRoZQorICogaGFyZHdhcmUgdXAgZm9yIHByb3BlciBpbml0aWFsaXphdGlvbi4KKyAqCisgKiBSZXR1cm4gbnVtYmVyIG9mIHBvcnRzIG9yIDAgaWYgbm90IHJpZ2h0LgorICovCitzdGF0aWMgaW50IGh3X2luaXQoc3RydWN0IGtzel9odyAqaHcpCit7CisJaW50IHJjID0gMDsKKwl1MTYgZGF0YTsKKwl1MTYgcmV2aXNpb247CisKKwkvKiBTZXQgYnVzIHNwZWVkIHRvIDEyNU1Iei4gKi8KKwl3cml0ZXcoQlVTX1NQRUVEXzEyNV9NSFosIGh3LT5pbyArIEtTODg0WF9CVVNfQ1RSTF9PRkZTRVQpOworCisJLyogQ2hlY2sgS1NaODg0eCBjaGlwIElELiAqLworCWRhdGEgPSByZWFkdyhody0+aW8gKyBLUzg4NFhfQ0hJUF9JRF9PRkZTRVQpOworCisJcmV2aXNpb24gPSAoZGF0YSAmIEtTODg0WF9SRVZJU0lPTl9NQVNLKSA+PiBLUzg4NFhfUkVWSVNJT05fU0hJRlQ7CisJZGF0YSAmPSBLUzg4NFhfQ0hJUF9JRF9NQVNLXzQxOworCWlmIChSRUdfQ0hJUF9JRF80MSA9PSBkYXRhKQorCQlyYyA9IDE7CisJZWxzZSBpZiAoUkVHX0NISVBfSURfNDIgPT0gZGF0YSkKKwkJcmMgPSAyOworCWVsc2UKKwkJcmV0dXJuIDA7CisKKwkvKiBTZXR1cCBoYXJkd2FyZSBmZWF0dXJlcyBvciBidWcgd29ya2Fyb3VuZHMuICovCisJaWYgKHJldmlzaW9uIDw9IDEpIHsKKwkJaHctPmZlYXR1cmVzIHw9IFNNQUxMX1BBQ0tFVF9UWF9CVUc7CisJCWlmICgxID09IHJjKQorCQkJaHctPmZlYXR1cmVzIHw9IEhBTEZfRFVQTEVYX1NJR05BTF9CVUc7CisJfQorCWh3LT5mZWF0dXJlcyB8PSBJUFY2X0NTVU1fR0VOX0hBQ0s7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIGh3X3Jlc2V0IC0gcmVzZXQgdGhlIGhhcmR3YXJlCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIHJlc2V0cyB0aGUgaGFyZHdhcmUuCisgKi8KK3N0YXRpYyB2b2lkIGh3X3Jlc2V0KHN0cnVjdCBrc3pfaHcgKmh3KQoreworCXdyaXRldyhHTE9CQUxfU09GVFdBUkVfUkVTRVQsIGh3LT5pbyArIEtTODg0WF9HTE9CQUxfQ1RSTF9PRkZTRVQpOworCisJLyogV2FpdCBmb3IgZGV2aWNlIHRvIHJlc2V0LiAqLworCW1kZWxheSgxMCk7CisKKwkvKiBXcml0ZSAwIHRvIGNsZWFyIGRldmljZSByZXNldC4gKi8KKwl3cml0ZXcoMCwgaHctPmlvICsgS1M4ODRYX0dMT0JBTF9DVFJMX09GRlNFVCk7Cit9CisKKy8qKgorICogaHdfc2V0dXAgLSBzZXR1cCB0aGUgaGFyZHdhcmUKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgc2V0dXAgdGhlIGhhcmR3YXJlIGZvciBwcm9wZXIgb3BlcmF0aW9uLgorICovCitzdGF0aWMgdm9pZCBod19zZXR1cChzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKyNpZiBTRVRfREVGQVVMVF9MRUQKKwl1MTYgZGF0YTsKKworCS8qIENoYW5nZSBkZWZhdWx0IExFRCBtb2RlLiAqLworCWRhdGEgPSByZWFkdyhody0+aW8gKyBLUzg4NDJfU1dJVENIX0NUUkxfNV9PRkZTRVQpOworCWRhdGEgJj0gfkxFRF9NT0RFOworCWRhdGEgfD0gU0VUX0RFRkFVTFRfTEVEOworCXdyaXRldyhkYXRhLCBody0+aW8gKyBLUzg4NDJfU1dJVENIX0NUUkxfNV9PRkZTRVQpOworI2VuZGlmCisKKwkvKiBTZXR1cCB0cmFuc21pdCBjb250cm9sLiAqLworCWh3LT50eF9jZmcgPSAoRE1BX1RYX1BBRF9FTkFCTEUgfCBETUFfVFhfQ1JDX0VOQUJMRSB8CisJCShETUFfQlVSU1RfREVGQVVMVCA8PCBETUFfQlVSU1RfU0hJRlQpIHwgRE1BX1RYX0VOQUJMRSk7CisKKwkvKiBTZXR1cCByZWNlaXZlIGNvbnRyb2wuICovCisJaHctPnJ4X2NmZyA9IChETUFfUlhfQlJPQURDQVNUIHwgRE1BX1JYX1VOSUNBU1QgfAorCQkoRE1BX0JVUlNUX0RFRkFVTFQgPDwgRE1BX0JVUlNUX1NISUZUKSB8IERNQV9SWF9FTkFCTEUpOworCWh3LT5yeF9jZmcgfD0gS1M4ODRYX0RNQV9SWF9NVUxUSUNBU1Q7CisKKwkvKiBIYXJkd2FyZSBjYW5ub3QgaGFuZGxlIFVEUCBwYWNrZXQgaW4gSVAgZnJhZ21lbnRzLiAqLworCWh3LT5yeF9jZmcgfD0gKERNQV9SWF9DU1VNX1RDUCB8IERNQV9SWF9DU1VNX0lQKTsKKworCWlmIChody0+YWxsX211bHRpKQorCQlody0+cnhfY2ZnIHw9IERNQV9SWF9BTExfTVVMVElDQVNUOworCWlmIChody0+cHJvbWlzY3VvdXMpCisJCWh3LT5yeF9jZmcgfD0gRE1BX1JYX1BST01JU0NVT1VTOworfQorCisvKioKKyAqIGh3X3NldHVwX2ludHIgLSBzZXR1cCBpbnRlcnJ1cHQgbWFzaworICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSBzZXR1cCB0aGUgaW50ZXJydXB0IG1hc2sgZm9yIHByb3BlciBvcGVyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIGh3X3NldHVwX2ludHIoc3RydWN0IGtzel9odyAqaHcpCit7CisJaHctPmludHJfbWFzayA9IEtTODg0WF9JTlRfTUFTSyB8IEtTODg0WF9JTlRfUlhfT1ZFUlJVTjsKK30KKworc3RhdGljIHZvaWQga3N6X2NoZWNrX2Rlc2NfbnVtKHN0cnVjdCBrc3pfZGVzY19pbmZvICppbmZvKQoreworI2RlZmluZSBNSU5fREVTQ19TSElGVCAgMgorCisJaW50IGFsbG9jID0gaW5mby0+YWxsb2M7CisJaW50IHNoaWZ0OworCisJc2hpZnQgPSAwOworCXdoaWxlICghKGFsbG9jICYgMSkpIHsKKwkJc2hpZnQrKzsKKwkJYWxsb2MgPj49IDE7CisJfQorCWlmIChhbGxvYyAhPSAxIHx8IHNoaWZ0IDwgTUlOX0RFU0NfU0hJRlQpIHsKKwkJcHJpbnRrKEtFUk5fQUxFUlQgIkhhcmR3YXJlIGRlc2NyaXB0b3IgbnVtYmVycyBub3QgcmlnaHQhXG4iKTsKKwkJd2hpbGUgKGFsbG9jKSB7CisJCQlzaGlmdCsrOworCQkJYWxsb2MgPj49IDE7CisJCX0KKwkJaWYgKHNoaWZ0IDwgTUlOX0RFU0NfU0hJRlQpCisJCQlzaGlmdCA9IE1JTl9ERVNDX1NISUZUOworCQlhbGxvYyA9IDEgPDwgc2hpZnQ7CisJCWluZm8tPmFsbG9jID0gYWxsb2M7CisJfQorCWluZm8tPm1hc2sgPSBpbmZvLT5hbGxvYyAtIDE7Cit9CisKK3N0YXRpYyB2b2lkIGh3X2luaXRfZGVzYyhzdHJ1Y3Qga3N6X2Rlc2NfaW5mbyAqZGVzY19pbmZvLCBpbnQgdHJhbnNtaXQpCit7CisJaW50IGk7CisJdTMyIHBoeXMgPSBkZXNjX2luZm8tPnJpbmdfcGh5czsKKwlzdHJ1Y3Qga3N6X2h3X2Rlc2MgKmRlc2MgPSBkZXNjX2luZm8tPnJpbmdfdmlydDsKKwlzdHJ1Y3Qga3N6X2Rlc2MgKmN1ciA9IGRlc2NfaW5mby0+cmluZzsKKwlzdHJ1Y3Qga3N6X2Rlc2MgKnByZXZpb3VzID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBkZXNjX2luZm8tPmFsbG9jOyBpKyspIHsKKwkJY3VyLT5waHcgPSBkZXNjKys7CisJCXBoeXMgKz0gZGVzY19pbmZvLT5zaXplOworCQlwcmV2aW91cyA9IGN1cisrOworCQlwcmV2aW91cy0+cGh3LT5uZXh0ID0gY3B1X3RvX2xlMzIocGh5cyk7CisJfQorCXByZXZpb3VzLT5waHctPm5leHQgPSBjcHVfdG9fbGUzMihkZXNjX2luZm8tPnJpbmdfcGh5cyk7CisJcHJldmlvdXMtPnN3LmJ1Zi5yeC5lbmRfb2ZfcmluZyA9IDE7CisJcHJldmlvdXMtPnBody0+YnVmLmRhdGEgPSBjcHVfdG9fbGUzMihwcmV2aW91cy0+c3cuYnVmLmRhdGEpOworCisJZGVzY19pbmZvLT5hdmFpbCA9IGRlc2NfaW5mby0+YWxsb2M7CisJZGVzY19pbmZvLT5sYXN0ID0gZGVzY19pbmZvLT5uZXh0ID0gMDsKKworCWRlc2NfaW5mby0+Y3VyID0gZGVzY19pbmZvLT5yaW5nOworfQorCisvKioKKyAqIGh3X3NldF9kZXNjX2Jhc2UgLSBzZXQgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3NlcworICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQHR4X2FkZHI6CVRoZSB0cmFuc21pdCBkZXNjcmlwdG9yIGJhc2UuCisgKiBAcnhfYWRkcjoJVGhlIHJlY2VpdmUgZGVzY3JpcHRvciBiYXNlLgorICoKKyAqIFRoaXMgcm91dGluZSBwcm9ncmFtcyB0aGUgZGVzY3JpcHRvciBiYXNlIGFkZHJlc3NlcyBhZnRlciByZXNldC4KKyAqLworc3RhdGljIHZvaWQgaHdfc2V0X2Rlc2NfYmFzZShzdHJ1Y3Qga3N6X2h3ICpodywgdTMyIHR4X2FkZHIsIHUzMiByeF9hZGRyKQoreworCS8qIFNldCBiYXNlIGFkZHJlc3Mgb2YgVHgvUnggZGVzY3JpcHRvcnMuICovCisJd3JpdGVsKHR4X2FkZHIsIGh3LT5pbyArIEtTX0RNQV9UWF9BRERSKTsKKwl3cml0ZWwocnhfYWRkciwgaHctPmlvICsgS1NfRE1BX1JYX0FERFIpOworfQorCitzdGF0aWMgdm9pZCBod19yZXNldF9wa3RzKHN0cnVjdCBrc3pfZGVzY19pbmZvICppbmZvKQoreworCWluZm8tPmN1ciA9IGluZm8tPnJpbmc7CisJaW5mby0+YXZhaWwgPSBpbmZvLT5hbGxvYzsKKwlpbmZvLT5sYXN0ID0gaW5mby0+bmV4dCA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBod19yZXN1bWVfcngoc3RydWN0IGtzel9odyAqaHcpCit7CisJd3JpdGVsKERNQV9TVEFSVCwgaHctPmlvICsgS1NfRE1BX1JYX1NUQVJUKTsKK30KKworLyoqCisgKiBod19zdGFydF9yeCAtIHN0YXJ0IHJlY2VpdmluZworICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSBzdGFydHMgdGhlIHJlY2VpdmUgZnVuY3Rpb24gb2YgdGhlIGhhcmR3YXJlLgorICovCitzdGF0aWMgdm9pZCBod19zdGFydF9yeChzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwl3cml0ZWwoaHctPnJ4X2NmZywgaHctPmlvICsgS1NfRE1BX1JYX0NUUkwpOworCisJLyogTm90aWZ5IHdoZW4gdGhlIHJlY2VpdmUgc3RvcHMuICovCisJaHctPmludHJfbWFzayB8PSBLUzg4NFhfSU5UX1JYX1NUT1BQRUQ7CisKKwl3cml0ZWwoRE1BX1NUQVJULCBody0+aW8gKyBLU19ETUFfUlhfU1RBUlQpOworCWh3X2Fja19pbnRyKGh3LCBLUzg4NFhfSU5UX1JYX1NUT1BQRUQpOworCWh3LT5yeF9zdG9wKys7CisKKwkvKiBWYXJpYWJsZSBvdmVyZmxvd3MuICovCisJaWYgKDAgPT0gaHctPnJ4X3N0b3ApCisJCWh3LT5yeF9zdG9wID0gMjsKK30KKworLyoKKyAqIGh3X3N0b3BfcnggLSBzdG9wIHJlY2VpdmluZworICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSBzdG9wcyB0aGUgcmVjZWl2ZSBmdW5jdGlvbiBvZiB0aGUgaGFyZHdhcmUuCisgKi8KK3N0YXRpYyB2b2lkIGh3X3N0b3Bfcngoc3RydWN0IGtzel9odyAqaHcpCit7CisJaHctPnJ4X3N0b3AgPSAwOworCWh3X3R1cm5fb2ZmX2ludHIoaHcsIEtTODg0WF9JTlRfUlhfU1RPUFBFRCk7CisJd3JpdGVsKChody0+cnhfY2ZnICYgfkRNQV9SWF9FTkFCTEUpLCBody0+aW8gKyBLU19ETUFfUlhfQ1RSTCk7Cit9CisKKy8qKgorICogaHdfc3RhcnRfdHggLSBzdGFydCB0cmFuc21pdHRpbmcKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgc3RhcnRzIHRoZSB0cmFuc21pdCBmdW5jdGlvbiBvZiB0aGUgaGFyZHdhcmUuCisgKi8KK3N0YXRpYyB2b2lkIGh3X3N0YXJ0X3R4KHN0cnVjdCBrc3pfaHcgKmh3KQoreworCXdyaXRlbChody0+dHhfY2ZnLCBody0+aW8gKyBLU19ETUFfVFhfQ1RSTCk7Cit9CisKKy8qKgorICogaHdfc3RvcF90eCAtIHN0b3AgdHJhbnNtaXR0aW5nCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIHN0b3BzIHRoZSB0cmFuc21pdCBmdW5jdGlvbiBvZiB0aGUgaGFyZHdhcmUuCisgKi8KK3N0YXRpYyB2b2lkIGh3X3N0b3BfdHgoc3RydWN0IGtzel9odyAqaHcpCit7CisJd3JpdGVsKChody0+dHhfY2ZnICYgfkRNQV9UWF9FTkFCTEUpLCBody0+aW8gKyBLU19ETUFfVFhfQ1RSTCk7Cit9CisKKy8qKgorICogaHdfZGlzYWJsZSAtIGRpc2FibGUgaGFyZHdhcmUKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZGlzYWJsZXMgdGhlIGhhcmR3YXJlLgorICovCitzdGF0aWMgdm9pZCBod19kaXNhYmxlKHN0cnVjdCBrc3pfaHcgKmh3KQoreworCWh3X3N0b3BfcngoaHcpOworCWh3X3N0b3BfdHgoaHcpOworCWh3LT5lbmFibGVkID0gMDsKK30KKworLyoqCisgKiBod19lbmFibGUgLSBlbmFibGUgaGFyZHdhcmUKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgZW5hYmxlcyB0aGUgaGFyZHdhcmUuCisgKi8KK3N0YXRpYyB2b2lkIGh3X2VuYWJsZShzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlod19zdGFydF90eChodyk7CisJaHdfc3RhcnRfcngoaHcpOworCWh3LT5lbmFibGVkID0gMTsKK30KKworLyoqCisgKiBod19hbGxvY19wa3QgLSBhbGxvY2F0ZSBlbm91Z2ggZGVzY3JpcHRvcnMgZm9yIHRyYW5zbWlzc2lvbgorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQGxlbmd0aDoJVGhlIGxlbmd0aCBvZiB0aGUgcGFja2V0LgorICogQHBoeXNpY2FsOglOdW1iZXIgb2YgZGVzY3JpcHRvcnMgcmVxdWlyZWQuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgZGVzY3JpcHRvcnMgZm9yIHRyYW5zbWlzc2lvbi4KKyAqCisgKiBSZXR1cm4gMCBpZiBub3Qgc3VjY2Vzc2Z1bDsgMSBmb3IgYnVmZmVyIGNvcHk7IG9yIG51bWJlciBvZiBkZXNjcmlwdG9ycy4KKyAqLworc3RhdGljIGludCBod19hbGxvY19wa3Qoc3RydWN0IGtzel9odyAqaHcsIGludCBsZW5ndGgsIGludCBwaHlzaWNhbCkKK3sKKwkvKiBBbHdheXMgbGVhdmUgb25lIGRlc2NyaXB0b3IgZnJlZS4gKi8KKwlpZiAoaHctPnR4X2Rlc2NfaW5mby5hdmFpbCA8PSAxKQorCQlyZXR1cm4gMDsKKworCS8qIEFsbG9jYXRlIGEgZGVzY3JpcHRvciBmb3IgdHJhbnNtaXNzaW9uIGFuZCBtYXJrIGl0IGN1cnJlbnQuICovCisJZ2V0X3R4X3BrdCgmaHctPnR4X2Rlc2NfaW5mbywgJmh3LT50eF9kZXNjX2luZm8uY3VyKTsKKwlody0+dHhfZGVzY19pbmZvLmN1ci0+c3cuYnVmLnR4LmZpcnN0X3NlZyA9IDE7CisKKwkvKiBLZWVwIHRyYWNrIG9mIG51bWJlciBvZiB0cmFuc21pdCBkZXNjcmlwdG9ycyB1c2VkIHNvIGZhci4gKi8KKwkrK2h3LT50eF9pbnRfY250OworCWh3LT50eF9zaXplICs9IGxlbmd0aDsKKworCS8qIENhbm5vdCBob2xkIG9uIHRvbyBtdWNoIGRhdGEuICovCisJaWYgKGh3LT50eF9zaXplID49IE1BWF9UWF9IRUxEX1NJWkUpCisJCWh3LT50eF9pbnRfY250ID0gaHctPnR4X2ludF9tYXNrICsgMTsKKworCWlmIChwaHlzaWNhbCA+IGh3LT50eF9kZXNjX2luZm8uYXZhaWwpCisJCXJldHVybiAxOworCisJcmV0dXJuIGh3LT50eF9kZXNjX2luZm8uYXZhaWw7Cit9CisKKy8qKgorICogaHdfc2VuZF9wa3QgLSBtYXJrIHBhY2tldCBmb3IgdHJhbnNtaXNzaW9uCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIG1hcmtzIHRoZSBwYWNrZXQgZm9yIHRyYW5zbWlzc2lvbiBpbiBQQ0kgdmVyc2lvbi4KKyAqLworc3RhdGljIHZvaWQgaHdfc2VuZF9wa3Qoc3RydWN0IGtzel9odyAqaHcpCit7CisJc3RydWN0IGtzel9kZXNjICpjdXIgPSBody0+dHhfZGVzY19pbmZvLmN1cjsKKworCWN1ci0+c3cuYnVmLnR4Lmxhc3Rfc2VnID0gMTsKKworCS8qIEludGVycnVwdCBvbmx5IGFmdGVyIHNwZWNpZmllZCBudW1iZXIgb2YgZGVzY3JpcHRvcnMgdXNlZC4gKi8KKwlpZiAoaHctPnR4X2ludF9jbnQgPiBody0+dHhfaW50X21hc2spIHsKKwkJY3VyLT5zdy5idWYudHguaW50ciA9IDE7CisJCWh3LT50eF9pbnRfY250ID0gMDsKKwkJaHctPnR4X3NpemUgPSAwOworCX0KKworCS8qIEtTWjg4NDIgc3VwcG9ydHMgcG9ydCBkaXJlY3RlZCB0cmFuc21pc3Npb24uICovCisJY3VyLT5zdy5idWYudHguZGVzdF9wb3J0ID0gaHctPmRzdF9wb3J0czsKKworCXJlbGVhc2VfZGVzYyhjdXIpOworCisJd3JpdGVsKDAsIGh3LT5pbyArIEtTX0RNQV9UWF9TVEFSVCk7Cit9CisKK3N0YXRpYyBpbnQgZW1wdHlfYWRkcih1OCAqYWRkcikKK3sKKwl1MzIgKmFkZHIxID0gKHUzMiAqKSBhZGRyOworCXUxNiAqYWRkcjIgPSAodTE2ICopICZhZGRyWzRdOworCisJcmV0dXJuIDAgPT0gKmFkZHIxICYmIDAgPT0gKmFkZHIyOworfQorCisvKioKKyAqIGh3X3NldF9hZGRyIC0gc2V0IE1BQyBhZGRyZXNzCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIHByb2dyYW1zIHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgaGFyZHdhcmUgd2hlbiB0aGUgYWRkcmVzcyBpcworICogb3ZlcnJpZGVkLgorICovCitzdGF0aWMgdm9pZCBod19zZXRfYWRkcihzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQUNfQUREUl9MRU47IGkrKykKKwkJd3JpdGViKGh3LT5vdmVycmlkZV9hZGRyW01BQ19BRERSX09SREVSKGkpXSwKKwkJCWh3LT5pbyArIEtTODg0WF9BRERSXzBfT0ZGU0VUICsgaSk7CisKKwlzd19zZXRfYWRkcihodywgaHctPm92ZXJyaWRlX2FkZHIpOworfQorCisvKioKKyAqIGh3X3JlYWRfYWRkciAtIHJlYWQgTUFDIGFkZHJlc3MKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmV0cmlldmVzIHRoZSBNQUMgYWRkcmVzcyBvZiB0aGUgaGFyZHdhcmUuCisgKi8KK3N0YXRpYyB2b2lkIGh3X3JlYWRfYWRkcihzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQUNfQUREUl9MRU47IGkrKykKKwkJaHctPnBlcm1fYWRkcltNQUNfQUREUl9PUkRFUihpKV0gPSByZWFkYihody0+aW8gKworCQkJS1M4ODRYX0FERFJfMF9PRkZTRVQgKyBpKTsKKworCWlmICghaHctPm1hY19vdmVycmlkZSkgeworCQltZW1jcHkoaHctPm92ZXJyaWRlX2FkZHIsIGh3LT5wZXJtX2FkZHIsIE1BQ19BRERSX0xFTik7CisJCWlmIChlbXB0eV9hZGRyKGh3LT5vdmVycmlkZV9hZGRyKSkgeworCQkJbWVtY3B5KGh3LT5wZXJtX2FkZHIsIERFRkFVTFRfTUFDX0FERFJFU1MsCisJCQkJTUFDX0FERFJfTEVOKTsKKwkJCW1lbWNweShody0+b3ZlcnJpZGVfYWRkciwgREVGQVVMVF9NQUNfQUREUkVTUywKKwkJCQlNQUNfQUREUl9MRU4pOworCQkJaHctPm92ZXJyaWRlX2FkZHJbNV0gKz0gaHctPmlkOworCQkJaHdfc2V0X2FkZHIoaHcpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBod19lbmFfYWRkX2FkZHIoc3RydWN0IGtzel9odyAqaHcsIGludCBpbmRleCwgdTggKm1hY19hZGRyKQoreworCWludCBpOworCXUzMiBtYWNfYWRkcl9sbzsKKwl1MzIgbWFjX2FkZHJfaGk7CisKKwltYWNfYWRkcl9oaSA9IDA7CisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQltYWNfYWRkcl9oaSA8PD0gODsKKwkJbWFjX2FkZHJfaGkgfD0gbWFjX2FkZHJbaV07CisJfQorCW1hY19hZGRyX2hpIHw9IEFERF9BRERSX0VOQUJMRTsKKwltYWNfYWRkcl9sbyA9IDA7CisJZm9yIChpID0gMjsgaSA8IDY7IGkrKykgeworCQltYWNfYWRkcl9sbyA8PD0gODsKKwkJbWFjX2FkZHJfbG8gfD0gbWFjX2FkZHJbaV07CisJfQorCWluZGV4ICo9IEFERF9BRERSX0lOQ1I7CisKKwl3cml0ZWwobWFjX2FkZHJfbG8sIGh3LT5pbyArIGluZGV4ICsgS1NfQUREX0FERFJfMF9MTyk7CisJd3JpdGVsKG1hY19hZGRyX2hpLCBody0+aW8gKyBpbmRleCArIEtTX0FERF9BRERSXzBfSEkpOworfQorCitzdGF0aWMgdm9pZCBod19zZXRfYWRkX2FkZHIoc3RydWN0IGtzel9odyAqaHcpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQURESVRJT05BTF9FTlRSSUVTOyBpKyspIHsKKwkJaWYgKGVtcHR5X2FkZHIoaHctPmFkZHJlc3NbaV0pKQorCQkJd3JpdGVsKDAsIGh3LT5pbyArIEFERF9BRERSX0lOQ1IgKiBpICsKKwkJCQlLU19BRERfQUREUl8wX0hJKTsKKwkJZWxzZQorCQkJaHdfZW5hX2FkZF9hZGRyKGh3LCBpLCBody0+YWRkcmVzc1tpXSk7CisJfQorfQorCitzdGF0aWMgaW50IGh3X2FkZF9hZGRyKHN0cnVjdCBrc3pfaHcgKmh3LCB1OCAqbWFjX2FkZHIpCit7CisJaW50IGk7CisJaW50IGogPSBBRERJVElPTkFMX0VOVFJJRVM7CisKKwlpZiAoIW1lbWNtcChody0+b3ZlcnJpZGVfYWRkciwgbWFjX2FkZHIsIE1BQ19BRERSX0xFTikpCisJCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCBody0+YWRkcl9saXN0X3NpemU7IGkrKykgeworCQlpZiAoIW1lbWNtcChody0+YWRkcmVzc1tpXSwgbWFjX2FkZHIsIE1BQ19BRERSX0xFTikpCisJCQlyZXR1cm4gMDsKKwkJaWYgKEFERElUSU9OQUxfRU5UUklFUyA9PSBqICYmIGVtcHR5X2FkZHIoaHctPmFkZHJlc3NbaV0pKQorCQkJaiA9IGk7CisJfQorCWlmIChqIDwgQURESVRJT05BTF9FTlRSSUVTKSB7CisJCW1lbWNweShody0+YWRkcmVzc1tqXSwgbWFjX2FkZHIsIE1BQ19BRERSX0xFTik7CisJCWh3X2VuYV9hZGRfYWRkcihodywgaiwgaHctPmFkZHJlc3Nbal0pOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgaW50IGh3X2RlbF9hZGRyKHN0cnVjdCBrc3pfaHcgKmh3LCB1OCAqbWFjX2FkZHIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaHctPmFkZHJfbGlzdF9zaXplOyBpKyspIHsKKwkJaWYgKCFtZW1jbXAoaHctPmFkZHJlc3NbaV0sIG1hY19hZGRyLCBNQUNfQUREUl9MRU4pKSB7CisJCQltZW1zZXQoaHctPmFkZHJlc3NbaV0sIDAsIE1BQ19BRERSX0xFTik7CisJCQl3cml0ZWwoMCwgaHctPmlvICsgQUREX0FERFJfSU5DUiAqIGkgKworCQkJCUtTX0FERF9BRERSXzBfSEkpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC0xOworfQorCisvKioKKyAqIGh3X2Nscl9tdWx0aWNhc3QgLSBjbGVhciBtdWx0aWNhc3QgYWRkcmVzc2VzCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIHJlbW92ZXMgYWxsIG11bHRpY2FzdCBhZGRyZXNzZXMgc2V0IGluIHRoZSBoYXJkd2FyZS4KKyAqLworc3RhdGljIHZvaWQgaHdfY2xyX211bHRpY2FzdChzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBIV19NVUxUSUNBU1RfU0laRTsgaSsrKSB7CisJCWh3LT5tdWx0aV9iaXRzW2ldID0gMDsKKworCQl3cml0ZWIoMCwgaHctPmlvICsgS1M4ODRYX01VTFRJQ0FTVF8wX09GRlNFVCArIGkpOworCX0KK30KKworLyoqCisgKiBod19zZXRfZ3JwX2FkZHIgLSBzZXQgbXVsdGljYXN0IGFkZHJlc3NlcworICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICoKKyAqIFRoaXMgcm91dGluZSBwcm9ncmFtcyBtdWx0aWNhc3QgYWRkcmVzc2VzIGZvciB0aGUgaGFyZHdhcmUgdG8gYWNjZXB0IHRob3NlCisgKiBhZGRyZXNzZXMuCisgKi8KK3N0YXRpYyB2b2lkIGh3X3NldF9ncnBfYWRkcihzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlpbnQgaTsKKwlpbnQgaW5kZXg7CisJaW50IHBvc2l0aW9uOworCWludCB2YWx1ZTsKKworCW1lbXNldChody0+bXVsdGlfYml0cywgMCwgc2l6ZW9mKHU4KSAqIEhXX01VTFRJQ0FTVF9TSVpFKTsKKworCWZvciAoaSA9IDA7IGkgPCBody0+bXVsdGlfbGlzdF9zaXplOyBpKyspIHsKKwkJcG9zaXRpb24gPSAoZXRoZXJfY3JjKDYsIGh3LT5tdWx0aV9saXN0W2ldKSA+PiAyNikgJiAweDNmOworCQlpbmRleCA9IHBvc2l0aW9uID4+IDM7CisJCXZhbHVlID0gMSA8PCAocG9zaXRpb24gJiA3KTsKKwkJaHctPm11bHRpX2JpdHNbaW5kZXhdIHw9ICh1OCkgdmFsdWU7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEhXX01VTFRJQ0FTVF9TSVpFOyBpKyspCisJCXdyaXRlYihody0+bXVsdGlfYml0c1tpXSwgaHctPmlvICsgS1M4ODRYX01VTFRJQ0FTVF8wX09GRlNFVCArCisJCQlpKTsKK30KKworLyoqCisgKiBod19zZXRfbXVsdGljYXN0IC0gZW5hYmxlIG9yIGRpc2FibGUgYWxsIG11bHRpY2FzdCByZWNlaXZpbmcKKyAqIEBodzogCVRoZSBoYXJkd2FyZSBpbnN0YW5jZS4KKyAqIEBtdWx0aWNhc3Q6CVRvIHR1cm4gb24gb3Igb2ZmIHRoZSBhbGwgbXVsdGljYXN0IGZlYXR1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGVuYWJsZXMvZGlzYWJsZXMgdGhlIGhhcmR3YXJlIHRvIGFjY2VwdCBhbGwgbXVsdGljYXN0IHBhY2tldHMuCisgKi8KK3N0YXRpYyB2b2lkIGh3X3NldF9tdWx0aWNhc3Qoc3RydWN0IGtzel9odyAqaHcsIHU4IG11bHRpY2FzdCkKK3sKKwkvKiBTdG9wIHJlY2VpdmluZyBmb3IgcmVjb25maWd1cmF0aW9uLiAqLworCWh3X3N0b3BfcngoaHcpOworCisJaWYgKG11bHRpY2FzdCkKKwkJaHctPnJ4X2NmZyB8PSBETUFfUlhfQUxMX01VTFRJQ0FTVDsKKwllbHNlCisJCWh3LT5yeF9jZmcgJj0gfkRNQV9SWF9BTExfTVVMVElDQVNUOworCisJaWYgKGh3LT5lbmFibGVkKQorCQlod19zdGFydF9yeChodyk7Cit9CisKKy8qKgorICogaHdfc2V0X3Byb21pc2N1b3VzIC0gZW5hYmxlIG9yIGRpc2FibGUgcHJvbWlzY3VvdXMgcmVjZWl2aW5nCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKiBAcHJvbToJVG8gdHVybiBvbiBvciBvZmYgdGhlIHByb21pc2N1b3VzIGZlYXR1cmUuCisgKgorICogVGhpcyByb3V0aW5lIGVuYWJsZXMvZGlzYWJsZXMgdGhlIGhhcmR3YXJlIHRvIGFjY2VwdCBhbGwgcGFja2V0cy4KKyAqLworc3RhdGljIHZvaWQgaHdfc2V0X3Byb21pc2N1b3VzKHN0cnVjdCBrc3pfaHcgKmh3LCB1OCBwcm9tKQoreworCS8qIFN0b3AgcmVjZWl2aW5nIGZvciByZWNvbmZpZ3VyYXRpb24uICovCisJaHdfc3RvcF9yeChodyk7CisKKwlpZiAocHJvbSkKKwkJaHctPnJ4X2NmZyB8PSBETUFfUlhfUFJPTUlTQ1VPVVM7CisJZWxzZQorCQlody0+cnhfY2ZnICY9IH5ETUFfUlhfUFJPTUlTQ1VPVVM7CisKKwlpZiAoaHctPmVuYWJsZWQpCisJCWh3X3N0YXJ0X3J4KGh3KTsKK30KKworLyoqCisgKiBzd19lbmFibGUgLSBlbmFibGUgdGhlIHN3aXRjaAorICogQGh3OiAJVGhlIGhhcmR3YXJlIGluc3RhbmNlLgorICogQGVuYWJsZToJVGhlIGZsYWcgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIHN3aXRjaAorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBzd2l0Y2ggaW4gS1NaODg0Mi4KKyAqLworc3RhdGljIHZvaWQgc3dfZW5hYmxlKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgZW5hYmxlKQoreworCWludCBwb3J0OworCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFNXSVRDSF9QT1JUX05VTTsgcG9ydCsrKSB7CisJCWlmIChody0+ZGV2X2NvdW50ID4gMSkgeworCQkJLyogU2V0IHBvcnQtYmFzZSB2bGFuIG1lbWJlcnNoaXAgd2l0aCBob3N0IHBvcnQuICovCisJCQlzd19jZmdfcG9ydF9iYXNlX3ZsYW4oaHcsIHBvcnQsCisJCQkJSE9TVF9NQVNLIHwgKDEgPDwgcG9ydCkpOworCQkJcG9ydF9zZXRfc3RwX3N0YXRlKGh3LCBwb3J0LCBTVFBfU1RBVEVfRElTQUJMRUQpOworCQl9IGVsc2UgeworCQkJc3dfY2ZnX3BvcnRfYmFzZV92bGFuKGh3LCBwb3J0LCBQT1JUX01BU0spOworCQkJcG9ydF9zZXRfc3RwX3N0YXRlKGh3LCBwb3J0LCBTVFBfU1RBVEVfRk9SV0FSRElORyk7CisJCX0KKwl9CisJaWYgKGh3LT5kZXZfY291bnQgPiAxKQorCQlwb3J0X3NldF9zdHBfc3RhdGUoaHcsIFNXSVRDSF9QT1JUX05VTSwgU1RQX1NUQVRFX1NJTVBMRSk7CisJZWxzZQorCQlwb3J0X3NldF9zdHBfc3RhdGUoaHcsIFNXSVRDSF9QT1JUX05VTSwgU1RQX1NUQVRFX0ZPUldBUkRJTkcpOworCisJaWYgKGVuYWJsZSkKKwkJZW5hYmxlID0gS1M4ODQyX1NUQVJUOworCXdyaXRldyhlbmFibGUsIGh3LT5pbyArIEtTODg0WF9DSElQX0lEX09GRlNFVCk7Cit9CisKKy8qKgorICogc3dfc2V0dXAgLSBzZXR1cCB0aGUgc3dpdGNoCisgKiBAaHc6IAlUaGUgaGFyZHdhcmUgaW5zdGFuY2UuCisgKgorICogVGhpcyByb3V0aW5lIHNldHVwIHRoZSBoYXJkd2FyZSBzd2l0Y2ggZW5naW5lIGZvciBkZWZhdWx0IG9wZXJhdGlvbi4KKyAqLworc3RhdGljIHZvaWQgc3dfc2V0dXAoc3RydWN0IGtzel9odyAqaHcpCit7CisJaW50IHBvcnQ7CisKKwlzd19zZXRfZ2xvYmFsX2N0cmwoaHcpOworCisJLyogRW5hYmxlIHN3aXRjaCBicm9hZGNhc3Qgc3Rvcm0gcHJvdGVjdGlvbiBhdCAxMCUgcGVyY2VudCByYXRlLiAqLworCXN3X2luaXRfYnJvYWRfc3Rvcm0oaHcpOworCWh3X2NmZ19icm9hZF9zdG9ybShodywgQlJPQURDQVNUX1NUT1JNX1BST1RFQ1RJT05fUkFURSk7CisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFNXSVRDSF9QT1JUX05VTTsgcG9ydCsrKQorCQlzd19lbmFfYnJvYWRfc3Rvcm0oaHcsIHBvcnQpOworCisJc3dfaW5pdF9wcmlvKGh3KTsKKworCXN3X2luaXRfbWlycm9yKGh3KTsKKworCXN3X2luaXRfcHJpb19yYXRlKGh3KTsKKworCXN3X2luaXRfdmxhbihodyk7CisKKwlpZiAoaHctPmZlYXR1cmVzICYgU1RQX1NVUFBPUlQpCisJCXN3X2luaXRfc3RwKGh3KTsKKwlpZiAoIXN3X2NoayhodywgS1M4ODQyX1NXSVRDSF9DVFJMXzFfT0ZGU0VULAorCQkJU1dJVENIX1RYX0ZMT1dfQ1RSTCB8IFNXSVRDSF9SWF9GTE9XX0NUUkwpKQorCQlody0+b3ZlcnJpZGVzIHw9IFBBVVNFX0ZMT1dfQ1RSTDsKKwlzd19lbmFibGUoaHcsIDEpOworfQorCisvKioKKyAqIGtzel9zdGFydF90aW1lciAtIHN0YXJ0IGtlcm5lbCB0aW1lcgorICogQGluZm86CUtlcm5lbCB0aW1lciBpbmZvcm1hdGlvbi4KKyAqIEB0aW1lOglUaGUgdGltZSB0aWNrLgorICoKKyAqIFRoaXMgcm91dGluZSBzdGFydHMgdGhlIGtlcm5lbCB0aW1lciBhZnRlciB0aGUgc3BlY2lmaWVkIHRpbWUgdGljay4KKyAqLworc3RhdGljIHZvaWQga3N6X3N0YXJ0X3RpbWVyKHN0cnVjdCBrc3pfdGltZXJfaW5mbyAqaW5mbywgaW50IHRpbWUpCit7CisJaW5mby0+Y250ID0gMDsKKwlpbmZvLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIHRpbWU7CisJYWRkX3RpbWVyKCZpbmZvLT50aW1lcik7CisKKwkvKiBpbmZpbml0eSAqLworCWluZm8tPm1heCA9IC0xOworfQorCisvKioKKyAqIGtzel9zdG9wX3RpbWVyIC0gc3RvcCBrZXJuZWwgdGltZXIKKyAqIEBpbmZvOglLZXJuZWwgdGltZXIgaW5mb3JtYXRpb24uCisgKgorICogVGhpcyByb3V0aW5lIHN0b3BzIHRoZSBrZXJuZWwgdGltZXIuCisgKi8KK3N0YXRpYyB2b2lkIGtzel9zdG9wX3RpbWVyKHN0cnVjdCBrc3pfdGltZXJfaW5mbyAqaW5mbykKK3sKKwlpZiAoaW5mby0+bWF4KSB7CisJCWluZm8tPm1heCA9IDA7CisJCWRlbF90aW1lcl9zeW5jKCZpbmZvLT50aW1lcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBrc3pfaW5pdF90aW1lcihzdHJ1Y3Qga3N6X3RpbWVyX2luZm8gKmluZm8sIGludCBwZXJpb2QsCisJdm9pZCAoKmZ1bmN0aW9uKSh1bnNpZ25lZCBsb25nKSwgdm9pZCAqZGF0YSkKK3sKKwlpbmZvLT5tYXggPSAwOworCWluZm8tPnBlcmlvZCA9IHBlcmlvZDsKKwlpbml0X3RpbWVyKCZpbmZvLT50aW1lcik7CisJaW5mby0+dGltZXIuZnVuY3Rpb24gPSBmdW5jdGlvbjsKKwlpbmZvLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGRhdGE7Cit9CisKK3N0YXRpYyB2b2lkIGtzel91cGRhdGVfdGltZXIoc3RydWN0IGtzel90aW1lcl9pbmZvICppbmZvKQoreworCSsraW5mby0+Y250OworCWlmIChpbmZvLT5tYXggPiAwKSB7CisJCWlmIChpbmZvLT5jbnQgPCBpbmZvLT5tYXgpIHsKKwkJCWluZm8tPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgaW5mby0+cGVyaW9kOworCQkJYWRkX3RpbWVyKCZpbmZvLT50aW1lcik7CisJCX0gZWxzZQorCQkJaW5mby0+bWF4ID0gMDsKKwl9IGVsc2UgaWYgKGluZm8tPm1heCA8IDApIHsKKwkJaW5mby0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBpbmZvLT5wZXJpb2Q7CisJCWFkZF90aW1lcigmaW5mby0+dGltZXIpOworCX0KK30KKworLyoqCisgKiBrc3pfYWxsb2Nfc29mdF9kZXNjIC0gYWxsb2NhdGUgc29mdHdhcmUgZGVzY3JpcHRvcnMKKyAqIEBkZXNjX2luZm86CURlc2NyaXB0b3IgaW5mb3JtYXRpb24gc3RydWN0dXJlLgorICogQHRyYW5zbWl0OglJbmRpY2F0aW9uIHRoYXQgZGVzY3JpcHRvcnMgYXJlIGZvciB0cmFuc21pdC4KKyAqCisgKiBUaGlzIGxvY2FsIGZ1bmN0aW9uIGFsbG9jYXRlcyBzb2Z0d2FyZSBkZXNjcmlwdG9ycyBmb3IgbWFuaXB1bGF0aW9uIGluCisgKiBtZW1vcnkuCisgKgorICogUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bC4KKyAqLworc3RhdGljIGludCBrc3pfYWxsb2Nfc29mdF9kZXNjKHN0cnVjdCBrc3pfZGVzY19pbmZvICpkZXNjX2luZm8sIGludCB0cmFuc21pdCkKK3sKKwlkZXNjX2luZm8tPnJpbmcgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qga3N6X2Rlc2MpICogZGVzY19pbmZvLT5hbGxvYywKKwkJR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXNjX2luZm8tPnJpbmcpCisJCXJldHVybiAxOworCW1lbXNldCgodm9pZCAqKSBkZXNjX2luZm8tPnJpbmcsIDAsCisJCXNpemVvZihzdHJ1Y3Qga3N6X2Rlc2MpICogZGVzY19pbmZvLT5hbGxvYyk7CisJaHdfaW5pdF9kZXNjKGRlc2NfaW5mbywgdHJhbnNtaXQpOworCXJldHVybiAwOworfQorCisvKioKKyAqIGtzel9hbGxvY19kZXNjIC0gYWxsb2NhdGUgaGFyZHdhcmUgZGVzY3JpcHRvcnMKKyAqIEBhZGFwdGVyOglBZGFwdGVyIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIGxvY2FsIGZ1bmN0aW9uIGFsbG9jYXRlcyBoYXJkd2FyZSBkZXNjcmlwdG9ycyBmb3IgcmVjZWl2aW5nIGFuZAorICogdHJhbnNtaXR0aW5nLgorICoKKyAqIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWwuCisgKi8KK3N0YXRpYyBpbnQga3N6X2FsbG9jX2Rlc2Moc3RydWN0IGRldl9pbmZvICphZGFwdGVyKQoreworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWludCBvZmZzZXQ7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIFJYICYgVFggZGVzY3JpcHRvcnMuICovCisJYWRhcHRlci0+ZGVzY19wb29sLmFsbG9jX3NpemUgPQorCQlody0+cnhfZGVzY19pbmZvLnNpemUgKiBody0+cnhfZGVzY19pbmZvLmFsbG9jICsKKwkJaHctPnR4X2Rlc2NfaW5mby5zaXplICogaHctPnR4X2Rlc2NfaW5mby5hbGxvYyArCisJCURFU0NfQUxJR05NRU5UOworCisJYWRhcHRlci0+ZGVzY19wb29sLmFsbG9jX3ZpcnQgPQorCQlwY2lfYWxsb2NfY29uc2lzdGVudCgKKwkJCWFkYXB0ZXItPnBkZXYsIGFkYXB0ZXItPmRlc2NfcG9vbC5hbGxvY19zaXplLAorCQkJJmFkYXB0ZXItPmRlc2NfcG9vbC5kbWFfYWRkcik7CisJaWYgKGFkYXB0ZXItPmRlc2NfcG9vbC5hbGxvY192aXJ0ID09IE5VTEwpIHsKKwkJYWRhcHRlci0+ZGVzY19wb29sLmFsbG9jX3NpemUgPSAwOworCQlyZXR1cm4gMTsKKwl9CisJbWVtc2V0KGFkYXB0ZXItPmRlc2NfcG9vbC5hbGxvY192aXJ0LCAwLCBhZGFwdGVyLT5kZXNjX3Bvb2wuYWxsb2Nfc2l6ZSk7CisKKwkvKiBBbGlnbiB0byB0aGUgbmV4dCBjYWNoZSBsaW5lIGJvdW5kYXJ5LiAqLworCW9mZnNldCA9ICgoKHVsb25nKSBhZGFwdGVyLT5kZXNjX3Bvb2wuYWxsb2NfdmlydCAlIERFU0NfQUxJR05NRU5UKSA/CisJCShERVNDX0FMSUdOTUVOVCAtCisJCSgodWxvbmcpIGFkYXB0ZXItPmRlc2NfcG9vbC5hbGxvY192aXJ0ICUgREVTQ19BTElHTk1FTlQpKSA6IDApOworCWFkYXB0ZXItPmRlc2NfcG9vbC52aXJ0ID0gYWRhcHRlci0+ZGVzY19wb29sLmFsbG9jX3ZpcnQgKyBvZmZzZXQ7CisJYWRhcHRlci0+ZGVzY19wb29sLnBoeXMgPSBhZGFwdGVyLT5kZXNjX3Bvb2wuZG1hX2FkZHIgKyBvZmZzZXQ7CisKKwkvKiBBbGxvY2F0ZSByZWNlaXZlL3RyYW5zbWl0IGRlc2NyaXB0b3JzLiAqLworCWh3LT5yeF9kZXNjX2luZm8ucmluZ192aXJ0ID0gKHN0cnVjdCBrc3pfaHdfZGVzYyAqKQorCQlhZGFwdGVyLT5kZXNjX3Bvb2wudmlydDsKKwlody0+cnhfZGVzY19pbmZvLnJpbmdfcGh5cyA9IGFkYXB0ZXItPmRlc2NfcG9vbC5waHlzOworCW9mZnNldCA9IGh3LT5yeF9kZXNjX2luZm8uYWxsb2MgKiBody0+cnhfZGVzY19pbmZvLnNpemU7CisJaHctPnR4X2Rlc2NfaW5mby5yaW5nX3ZpcnQgPSAoc3RydWN0IGtzel9od19kZXNjICopCisJCShhZGFwdGVyLT5kZXNjX3Bvb2wudmlydCArIG9mZnNldCk7CisJaHctPnR4X2Rlc2NfaW5mby5yaW5nX3BoeXMgPSBhZGFwdGVyLT5kZXNjX3Bvb2wucGh5cyArIG9mZnNldDsKKworCWlmIChrc3pfYWxsb2Nfc29mdF9kZXNjKCZody0+cnhfZGVzY19pbmZvLCAwKSkKKwkJcmV0dXJuIDE7CisJaWYgKGtzel9hbGxvY19zb2Z0X2Rlc2MoJmh3LT50eF9kZXNjX2luZm8sIDEpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGZyZWVfZG1hX2J1ZiAtIHJlbGVhc2UgRE1BIGJ1ZmZlciByZXNvdXJjZXMKKyAqIEBhZGFwdGVyOglBZGFwdGVyIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMganVzdCBhIGhlbHBlciBmdW5jdGlvbiB0byByZWxlYXNlIHRoZSBETUEgYnVmZmVyIHJlc291cmNlcy4KKyAqLworc3RhdGljIHZvaWQgZnJlZV9kbWFfYnVmKHN0cnVjdCBkZXZfaW5mbyAqYWRhcHRlciwgc3RydWN0IGtzel9kbWFfYnVmICpkbWFfYnVmLAorCWludCBkaXJlY3Rpb24pCit7CisJcGNpX3VubWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LCBkbWFfYnVmLT5kbWEsIGRtYV9idWYtPmxlbiwgZGlyZWN0aW9uKTsKKwlkZXZfa2ZyZWVfc2tiKGRtYV9idWYtPnNrYik7CisJZG1hX2J1Zi0+c2tiID0gTlVMTDsKKwlkbWFfYnVmLT5kbWEgPSAwOworfQorCisvKioKKyAqIGtzel9pbml0X3J4X2J1ZmZlcnMgLSBpbml0aWFsaXplIHJlY2VpdmUgZGVzY3JpcHRvcnMKKyAqIEBhZGFwdGVyOglBZGFwdGVyIGluZm9ybWF0aW9uIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaW5pdGlhbGl6ZXMgRE1BIGJ1ZmZlcnMgZm9yIHJlY2VpdmluZy4KKyAqLworc3RhdGljIHZvaWQga3N6X2luaXRfcnhfYnVmZmVycyhzdHJ1Y3QgZGV2X2luZm8gKmFkYXB0ZXIpCit7CisJaW50IGk7CisJc3RydWN0IGtzel9kZXNjICpkZXNjOworCXN0cnVjdCBrc3pfZG1hX2J1ZiAqZG1hX2J1ZjsKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1Y3Qga3N6X2Rlc2NfaW5mbyAqaW5mbyA9ICZody0+cnhfZGVzY19pbmZvOworCisJZm9yIChpID0gMDsgaSA8IGh3LT5yeF9kZXNjX2luZm8uYWxsb2M7IGkrKykgeworCQlnZXRfcnhfcGt0KGluZm8sICZkZXNjKTsKKworCQlkbWFfYnVmID0gRE1BX0JVRkZFUihkZXNjKTsKKwkJaWYgKGRtYV9idWYtPnNrYiAmJiBkbWFfYnVmLT5sZW4gIT0gYWRhcHRlci0+bXR1KQorCQkJZnJlZV9kbWFfYnVmKGFkYXB0ZXIsIGRtYV9idWYsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCWRtYV9idWYtPmxlbiA9IGFkYXB0ZXItPm10dTsKKwkJaWYgKCFkbWFfYnVmLT5za2IpCisJCQlkbWFfYnVmLT5za2IgPSBhbGxvY19za2IoZG1hX2J1Zi0+bGVuLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGRtYV9idWYtPnNrYiAmJiAhZG1hX2J1Zi0+ZG1hKSB7CisJCQlkbWFfYnVmLT5za2ItPmRldiA9IGFkYXB0ZXItPmRldjsKKwkJCWRtYV9idWYtPmRtYSA9IHBjaV9tYXBfc2luZ2xlKAorCQkJCWFkYXB0ZXItPnBkZXYsCisJCQkJc2tiX3RhaWxfcG9pbnRlcihkbWFfYnVmLT5za2IpLAorCQkJCWRtYV9idWYtPmxlbiwKKwkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQl9CisKKwkJLyogU2V0IGRlc2NyaXB0b3IuICovCisJCXNldF9yeF9idWYoZGVzYywgZG1hX2J1Zi0+ZG1hKTsKKwkJc2V0X3J4X2xlbihkZXNjLCBkbWFfYnVmLT5sZW4pOworCQlyZWxlYXNlX2Rlc2MoZGVzYyk7CisJfQorfQorCisvKioKKyAqIGtzel9hbGxvY19tZW0gLSBhbGxvY2F0ZSBtZW1vcnkgZm9yIGhhcmR3YXJlIGRlc2NyaXB0b3JzCisgKiBAYWRhcHRlcjoJQWRhcHRlciBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgbWVtb3J5IGZvciB1c2UgYnkgaGFyZHdhcmUgZGVzY3JpcHRvcnMgZm9yIHJlY2VpdmluZworICogYW5kIHRyYW5zbWl0dGluZy4KKyAqCisgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsLgorICovCitzdGF0aWMgaW50IGtzel9hbGxvY19tZW0oc3RydWN0IGRldl9pbmZvICphZGFwdGVyKQoreworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJLyogRGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgcmVjZWl2ZSBhbmQgdHJhbnNtaXQgZGVzY3JpcHRvcnMuICovCisJaHctPnJ4X2Rlc2NfaW5mby5hbGxvYyA9IE5VTV9PRl9SWF9ERVNDOworCWh3LT50eF9kZXNjX2luZm8uYWxsb2MgPSBOVU1fT0ZfVFhfREVTQzsKKworCS8qIERldGVybWluZSBob3cgbWFueSBkZXNjcmlwdG9ycyB0byBza2lwIHRyYW5zbWl0IGludGVycnVwdC4gKi8KKwlody0+dHhfaW50X2NudCA9IDA7CisJaHctPnR4X2ludF9tYXNrID0gTlVNX09GX1RYX0RFU0MgLyA0OworCWlmIChody0+dHhfaW50X21hc2sgPiA4KQorCQlody0+dHhfaW50X21hc2sgPSA4OworCXdoaWxlIChody0+dHhfaW50X21hc2spIHsKKwkJaHctPnR4X2ludF9jbnQrKzsKKwkJaHctPnR4X2ludF9tYXNrID4+PSAxOworCX0KKwlpZiAoaHctPnR4X2ludF9jbnQpIHsKKwkJaHctPnR4X2ludF9tYXNrID0gKDEgPDwgKGh3LT50eF9pbnRfY250IC0gMSkpIC0gMTsKKwkJaHctPnR4X2ludF9jbnQgPSAwOworCX0KKworCS8qIERldGVybWluZSB0aGUgZGVzY3JpcHRvciBzaXplLiAqLworCWh3LT5yeF9kZXNjX2luZm8uc2l6ZSA9CisJCSgoKHNpemVvZihzdHJ1Y3Qga3N6X2h3X2Rlc2MpICsgREVTQ19BTElHTk1FTlQgLSAxKSAvCisJCURFU0NfQUxJR05NRU5UKSAqIERFU0NfQUxJR05NRU5UKTsKKwlody0+dHhfZGVzY19pbmZvLnNpemUgPQorCQkoKChzaXplb2Yoc3RydWN0IGtzel9od19kZXNjKSArIERFU0NfQUxJR05NRU5UIC0gMSkgLworCQlERVNDX0FMSUdOTUVOVCkgKiBERVNDX0FMSUdOTUVOVCk7CisJaWYgKGh3LT5yeF9kZXNjX2luZm8uc2l6ZSAhPSBzaXplb2Yoc3RydWN0IGtzel9od19kZXNjKSkKKwkJcHJpbnRrKEtFUk5fQUxFUlQKKwkJCSJIYXJkd2FyZSBkZXNjcmlwdG9yIHNpemUgbm90IHJpZ2h0IVxuIik7CisJa3N6X2NoZWNrX2Rlc2NfbnVtKCZody0+cnhfZGVzY19pbmZvKTsKKwlrc3pfY2hlY2tfZGVzY19udW0oJmh3LT50eF9kZXNjX2luZm8pOworCisJLyogQWxsb2NhdGUgZGVzY3JpcHRvcnMuICovCisJaWYgKGtzel9hbGxvY19kZXNjKGFkYXB0ZXIpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGtzel9mcmVlX2Rlc2MgLSBmcmVlIHNvZnR3YXJlIGFuZCBoYXJkd2FyZSBkZXNjcmlwdG9ycworICogQGFkYXB0ZXI6CUFkYXB0ZXIgaW5mb3JtYXRpb24gc3RydWN0dXJlLgorICoKKyAqIFRoaXMgbG9jYWwgcm91dGluZSBmcmVlcyB0aGUgc29mdHdhcmUgYW5kIGhhcmR3YXJlIGRlc2NyaXB0b3JzIGFsbG9jYXRlZCBieQorICoga3N6X2FsbG9jX2Rlc2MoKS4KKyAqLworc3RhdGljIHZvaWQga3N6X2ZyZWVfZGVzYyhzdHJ1Y3QgZGV2X2luZm8gKmFkYXB0ZXIpCit7CisJc3RydWN0IGtzel9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisKKwkvKiBSZXNldCBkZXNjcmlwdG9yLiAqLworCWh3LT5yeF9kZXNjX2luZm8ucmluZ192aXJ0ID0gTlVMTDsKKwlody0+dHhfZGVzY19pbmZvLnJpbmdfdmlydCA9IE5VTEw7CisJaHctPnJ4X2Rlc2NfaW5mby5yaW5nX3BoeXMgPSAwOworCWh3LT50eF9kZXNjX2luZm8ucmluZ19waHlzID0gMDsKKworCS8qIEZyZWUgbWVtb3J5LiAqLworCWlmIChhZGFwdGVyLT5kZXNjX3Bvb2wuYWxsb2NfdmlydCkKKwkJcGNpX2ZyZWVfY29uc2lzdGVudCgKKwkJCWFkYXB0ZXItPnBkZXYsCisJCQlhZGFwdGVyLT5kZXNjX3Bvb2wuYWxsb2Nfc2l6ZSwKKwkJCWFkYXB0ZXItPmRlc2NfcG9vbC5hbGxvY192aXJ0LAorCQkJYWRhcHRlci0+ZGVzY19wb29sLmRtYV9hZGRyKTsKKworCS8qIFJlc2V0IHJlc291cmNlIHBvb2wuICovCisJYWRhcHRlci0+ZGVzY19wb29sLmFsbG9jX3NpemUgPSAwOworCWFkYXB0ZXItPmRlc2NfcG9vbC5hbGxvY192aXJ0ID0gTlVMTDsKKworCWtmcmVlKGh3LT5yeF9kZXNjX2luZm8ucmluZyk7CisJaHctPnJ4X2Rlc2NfaW5mby5yaW5nID0gTlVMTDsKKwlrZnJlZShody0+dHhfZGVzY19pbmZvLnJpbmcpOworCWh3LT50eF9kZXNjX2luZm8ucmluZyA9IE5VTEw7Cit9CisKKy8qKgorICoga3N6X2ZyZWVfYnVmZmVycyAtIGZyZWUgYnVmZmVycyB1c2VkIGluIHRoZSBkZXNjcmlwdG9ycworICogQGFkYXB0ZXI6CUFkYXB0ZXIgaW5mb3JtYXRpb24gc3RydWN0dXJlLgorICogQGRlc2NfaW5mbzoJRGVzY3JpcHRvciBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBsb2NhbCByb3V0aW5lIGZyZWVzIGJ1ZmZlcnMgdXNlZCBpbiB0aGUgRE1BIGJ1ZmZlcnMuCisgKi8KK3N0YXRpYyB2b2lkIGtzel9mcmVlX2J1ZmZlcnMoc3RydWN0IGRldl9pbmZvICphZGFwdGVyLAorCXN0cnVjdCBrc3pfZGVzY19pbmZvICpkZXNjX2luZm8sIGludCBkaXJlY3Rpb24pCit7CisJaW50IGk7CisJc3RydWN0IGtzel9kbWFfYnVmICpkbWFfYnVmOworCXN0cnVjdCBrc3pfZGVzYyAqZGVzYyA9IGRlc2NfaW5mby0+cmluZzsKKworCWZvciAoaSA9IDA7IGkgPCBkZXNjX2luZm8tPmFsbG9jOyBpKyspIHsKKwkJZG1hX2J1ZiA9IERNQV9CVUZGRVIoZGVzYyk7CisJCWlmIChkbWFfYnVmLT5za2IpCisJCQlmcmVlX2RtYV9idWYoYWRhcHRlciwgZG1hX2J1ZiwgZGlyZWN0aW9uKTsKKwkJZGVzYysrOworCX0KK30KKworLyoqCisgKiBrc3pfZnJlZV9tZW0gLSBmcmVlIGFsbCByZXNvdXJjZXMgdXNlZCBieSBkZXNjcmlwdG9ycworICogQGFkYXB0ZXI6CUFkYXB0ZXIgaW5mb3JtYXRpb24gc3RydWN0dXJlLgorICoKKyAqIFRoaXMgbG9jYWwgcm91dGluZSBmcmVlcyBhbGwgdGhlIHJlc291cmNlcyBhbGxvY2F0ZWQgYnkga3N6X2FsbG9jX21lbSgpLgorICovCitzdGF0aWMgdm9pZCBrc3pfZnJlZV9tZW0oc3RydWN0IGRldl9pbmZvICphZGFwdGVyKQoreworCS8qIEZyZWUgdHJhbnNtaXQgYnVmZmVycy4gKi8KKwlrc3pfZnJlZV9idWZmZXJzKGFkYXB0ZXIsICZhZGFwdGVyLT5ody50eF9kZXNjX2luZm8sCisJCVBDSV9ETUFfVE9ERVZJQ0UpOworCisJLyogRnJlZSByZWNlaXZlIGJ1ZmZlcnMuICovCisJa3N6X2ZyZWVfYnVmZmVycyhhZGFwdGVyLCAmYWRhcHRlci0+aHcucnhfZGVzY19pbmZvLAorCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJLyogRnJlZSBkZXNjcmlwdG9ycy4gKi8KKwlrc3pfZnJlZV9kZXNjKGFkYXB0ZXIpOworfQorCitzdGF0aWMgdm9pZCBnZXRfbWliX2NvdW50ZXJzKHN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgZmlyc3QsIGludCBjbnQsCisJdTY0ICpjb3VudGVyKQoreworCWludCBpOworCWludCBtaWI7CisJaW50IHBvcnQ7CisJc3RydWN0IGtzel9wb3J0X21pYiAqcG9ydF9taWI7CisKKwltZW1zZXQoY291bnRlciwgMCwgc2l6ZW9mKHU2NCkgKiBUT1RBTF9QT1JUX0NPVU5URVJfTlVNKTsKKwlmb3IgKGkgPSAwLCBwb3J0ID0gZmlyc3Q7IGkgPCBjbnQ7IGkrKywgcG9ydCsrKSB7CisJCXBvcnRfbWliID0gJmh3LT5wb3J0X21pYltwb3J0XTsKKwkJZm9yIChtaWIgPSBwb3J0X21pYi0+bWliX3N0YXJ0OyBtaWIgPCBody0+bWliX2NudDsgbWliKyspCisJCQljb3VudGVyW21pYl0gKz0gcG9ydF9taWItPmNvdW50ZXJbbWliXTsKKwl9Cit9CisKKy8qKgorICogc2VuZF9wYWNrZXQgLSBzZW5kIHBhY2tldAorICogQHNrYjoJU29ja2V0IGJ1ZmZlci4KKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB1c2VkIHRvIHNlbmQgYSBwYWNrZXQgb3V0IHRvIHRoZSBuZXR3b3JrLgorICovCitzdGF0aWMgdm9pZCBzZW5kX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBrc3pfZGVzYyAqZGVzYzsKKwlzdHJ1Y3Qga3N6X2Rlc2MgKmZpcnN0OworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZod19wcml2LT5odzsKKwlzdHJ1Y3Qga3N6X2Rlc2NfaW5mbyAqaW5mbyA9ICZody0+dHhfZGVzY19pbmZvOworCXN0cnVjdCBrc3pfZG1hX2J1ZiAqZG1hX2J1ZjsKKwlpbnQgbGVuOworCWludCBsYXN0X2ZyYWcgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOworCisJLyoKKwkgKiBLU1o4ODQyIHdpdGggbXVsdGlwbGUgZGV2aWNlIGludGVyZmFjZXMgbmVlZHMgdG8gYmUgdG9sZCB3aGljaCBwb3J0CisJICogdG8gc2VuZC4KKwkgKi8KKwlpZiAoaHctPmRldl9jb3VudCA+IDEpCisJCWh3LT5kc3RfcG9ydHMgPSAxIDw8IHByaXYtPnBvcnQuZmlyc3RfcG9ydDsKKworCS8qIEhhcmR3YXJlIHdpbGwgcGFkIHRoZSBsZW5ndGggdG8gNjAuICovCisJbGVuID0gc2tiLT5sZW47CisKKwkvKiBSZW1lbWJlciB0aGUgdmVyeSBmaXJzdCBkZXNjcmlwdG9yLiAqLworCWZpcnN0ID0gaW5mby0+Y3VyOworCWRlc2MgPSBmaXJzdDsKKworCWRtYV9idWYgPSBETUFfQlVGRkVSKGRlc2MpOworCWlmIChsYXN0X2ZyYWcpIHsKKwkJaW50IGZyYWc7CisJCXNrYl9mcmFnX3QgKnRoaXNfZnJhZzsKKworCQlkbWFfYnVmLT5sZW4gPSBza2ItPmxlbiAtIHNrYi0+ZGF0YV9sZW47CisKKwkJZG1hX2J1Zi0+ZG1hID0gcGNpX21hcF9zaW5nbGUoCisJCQlod19wcml2LT5wZGV2LCBza2ItPmRhdGEsIGRtYV9idWYtPmxlbiwKKwkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCQlzZXRfdHhfYnVmKGRlc2MsIGRtYV9idWYtPmRtYSk7CisJCXNldF90eF9sZW4oZGVzYywgZG1hX2J1Zi0+bGVuKTsKKworCQlmcmFnID0gMDsKKwkJZG8geworCQkJdGhpc19mcmFnID0gJnNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbZnJhZ107CisKKwkJCS8qIEdldCBhIG5ldyBkZXNjcmlwdG9yLiAqLworCQkJZ2V0X3R4X3BrdChpbmZvLCAmZGVzYyk7CisKKwkJCS8qIEtlZXAgdHJhY2sgb2YgZGVzY3JpcHRvcnMgdXNlZCBzbyBmYXIuICovCisJCQkrK2h3LT50eF9pbnRfY250OworCisJCQlkbWFfYnVmID0gRE1BX0JVRkZFUihkZXNjKTsKKwkJCWRtYV9idWYtPmxlbiA9IHRoaXNfZnJhZy0+c2l6ZTsKKworCQkJZG1hX2J1Zi0+ZG1hID0gcGNpX21hcF9zaW5nbGUoCisJCQkJaHdfcHJpdi0+cGRldiwKKwkJCQlwYWdlX2FkZHJlc3ModGhpc19mcmFnLT5wYWdlKSArCisJCQkJdGhpc19mcmFnLT5wYWdlX29mZnNldCwKKwkJCQlkbWFfYnVmLT5sZW4sCisJCQkJUENJX0RNQV9UT0RFVklDRSk7CisJCQlzZXRfdHhfYnVmKGRlc2MsIGRtYV9idWYtPmRtYSk7CisJCQlzZXRfdHhfbGVuKGRlc2MsIGRtYV9idWYtPmxlbik7CisKKwkJCWZyYWcrKzsKKwkJCWlmIChmcmFnID09IGxhc3RfZnJhZykKKwkJCQlicmVhazsKKworCQkJLyogRG8gbm90IHJlbGVhc2UgdGhlIGxhc3QgZGVzY3JpcHRvciBoZXJlLiAqLworCQkJcmVsZWFzZV9kZXNjKGRlc2MpOworCQl9IHdoaWxlICgxKTsKKworCQkvKiBjdXJyZW50IHBvaW50cyB0byB0aGUgbGFzdCBkZXNjcmlwdG9yLiAqLworCQlpbmZvLT5jdXIgPSBkZXNjOworCisJCS8qIFJlbGVhc2UgdGhlIGZpcnN0IGRlc2NyaXB0b3IuICovCisJCXJlbGVhc2VfZGVzYyhmaXJzdCk7CisJfSBlbHNlIHsKKwkJZG1hX2J1Zi0+bGVuID0gbGVuOworCisJCWRtYV9idWYtPmRtYSA9IHBjaV9tYXBfc2luZ2xlKAorCQkJaHdfcHJpdi0+cGRldiwgc2tiLT5kYXRhLCBkbWFfYnVmLT5sZW4sCisJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwkJc2V0X3R4X2J1ZihkZXNjLCBkbWFfYnVmLT5kbWEpOworCQlzZXRfdHhfbGVuKGRlc2MsIGRtYV9idWYtPmxlbik7CisJfQorCisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKKwkJKGRlc2MpLT5zdy5idWYudHguY3N1bV9nZW5fdGNwID0gMTsKKwkJKGRlc2MpLT5zdy5idWYudHguY3N1bV9nZW5fdWRwID0gMTsKKwl9CisKKwkvKgorCSAqIFRoZSBsYXN0IGRlc2NyaXB0b3IgaG9sZHMgdGhlIHBhY2tldCBzbyB0aGF0IGl0IGNhbiBiZSByZXR1cm5lZCB0bworCSAqIG5ldHdvcmsgc3Vic3lzdGVtIGFmdGVyIGFsbCBkZXNjcmlwdG9ycyBhcmUgdHJhbnNtaXR0ZWQuCisJICovCisJZG1hX2J1Zi0+c2tiID0gc2tiOworCisJaHdfc2VuZF9wa3QoaHcpOworCisJLyogVXBkYXRlIHRyYW5zbWl0IHN0YXRpc3RpY3MuICovCisJcHJpdi0+c3RhdHMudHhfcGFja2V0cysrOworCXByaXYtPnN0YXRzLnR4X2J5dGVzICs9IGxlbjsKK30KKworLyoqCisgKiB0cmFuc21pdF9jbGVhbnVwIC0gY2xlYW4gdXAgdHJhbnNtaXQgZGVzY3JpcHRvcnMKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gY2xlYW4gdXAgdGhlIHRyYW5zbWl0dGVkIGJ1ZmZlcnMuCisgKi8KK3N0YXRpYyB2b2lkIHRyYW5zbWl0X2NsZWFudXAoc3RydWN0IGRldl9pbmZvICpod19wcml2LCBpbnQgbm9ybWFsKQoreworCWludCBsYXN0OworCXVuaW9uIGRlc2Nfc3RhdCBzdGF0dXM7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisJc3RydWN0IGtzel9kZXNjX2luZm8gKmluZm8gPSAmaHctPnR4X2Rlc2NfaW5mbzsKKwlzdHJ1Y3Qga3N6X2Rlc2MgKmRlc2M7CisJc3RydWN0IGtzel9kbWFfYnVmICpkbWFfYnVmOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBOVUxMOworCisJc3Bpbl9sb2NrKCZod19wcml2LT5od2xvY2spOworCWxhc3QgPSBpbmZvLT5sYXN0OworCisJd2hpbGUgKGluZm8tPmF2YWlsIDwgaW5mby0+YWxsb2MpIHsKKwkJLyogR2V0IG5leHQgZGVzY3JpcHRvciB3aGljaCBpcyBub3QgaGFyZHdhcmUgb3duZWQuICovCisJCWRlc2MgPSAmaW5mby0+cmluZ1tsYXN0XTsKKwkJc3RhdHVzLmRhdGEgPSBsZTMyX3RvX2NwdShkZXNjLT5waHctPmN0cmwuZGF0YSk7CisJCWlmIChzdGF0dXMudHguaHdfb3duZWQpIHsKKwkJCWlmIChub3JtYWwpCisJCQkJYnJlYWs7CisJCQllbHNlCisJCQkJcmVzZXRfZGVzYyhkZXNjLCBzdGF0dXMpOworCQl9CisKKwkJZG1hX2J1ZiA9IERNQV9CVUZGRVIoZGVzYyk7CisJCXBjaV91bm1hcF9zaW5nbGUoCisJCQlod19wcml2LT5wZGV2LCBkbWFfYnVmLT5kbWEsIGRtYV9idWYtPmxlbiwKKwkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCisJCS8qIFRoaXMgZGVzY3JpcHRvciBjb250YWlucyB0aGUgbGFzdCBidWZmZXIgaW4gdGhlIHBhY2tldC4gKi8KKwkJaWYgKGRtYV9idWYtPnNrYikgeworCQkJZGV2ID0gZG1hX2J1Zi0+c2tiLT5kZXY7CisKKwkJCS8qIFJlbGVhc2UgdGhlIHBhY2tldCBiYWNrIHRvIG5ldHdvcmsgc3Vic3lzdGVtLiAqLworCQkJZGV2X2tmcmVlX3NrYl9pcnEoZG1hX2J1Zi0+c2tiKTsKKwkJCWRtYV9idWYtPnNrYiA9IE5VTEw7CisJCX0KKworCQkvKiBGcmVlIHRoZSB0cmFuc21pdHRlZCBkZXNjcmlwdG9yLiAqLworCQlsYXN0Kys7CisJCWxhc3QgJj0gaW5mby0+bWFzazsKKwkJaW5mby0+YXZhaWwrKzsKKwl9CisJaW5mby0+bGFzdCA9IGxhc3Q7CisJc3Bpbl91bmxvY2soJmh3X3ByaXYtPmh3bG9jayk7CisKKwkvKiBOb3RpZnkgdGhlIG5ldHdvcmsgc3Vic3lzdGVtIHRoYXQgdGhlIHBhY2tldCBoYXMgYmVlbiBzZW50LiAqLworCWlmIChkZXYpCisJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworfQorCisvKioKKyAqIHRyYW5zbWl0X2RvbmUgLSB0cmFuc21pdCBkb25lIHByb2Nlc3NpbmcKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgd2hlbiB0aGUgdHJhbnNtaXQgaW50ZXJydXB0IGlzIHRyaWdnZXJlZCwgaW5kaWNhdGluZworICogZWl0aGVyIGEgcGFja2V0IGlzIHNlbnQgc3VjY2Vzc2Z1bGx5IG9yIHRoZXJlIGFyZSB0cmFuc21pdCBlcnJvcnMuCisgKi8KK3N0YXRpYyB2b2lkIHR4X2RvbmUoc3RydWN0IGRldl9pbmZvICpod19wcml2KQoreworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCWludCBwb3J0OworCisJdHJhbnNtaXRfY2xlYW51cChod19wcml2LCAxKTsKKworCWZvciAocG9ydCA9IDA7IHBvcnQgPCBody0+ZGV2X2NvdW50OyBwb3J0KyspIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGh3LT5wb3J0X2luZm9bcG9ydF0ucGRldjsKKworCQlpZiAobmV0aWZfcnVubmluZyhkZXYpICYmIG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkKKwkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjb3B5X29sZF9za2Ioc3RydWN0IHNrX2J1ZmYgKm9sZCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlza2ItPmRldiA9IG9sZC0+ZGV2OworCXNrYi0+cHJvdG9jb2wgPSBvbGQtPnByb3RvY29sOworCXNrYi0+aXBfc3VtbWVkID0gb2xkLT5pcF9zdW1tZWQ7CisJc2tiLT5jc3VtID0gb2xkLT5jc3VtOworCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBFVEhfSExFTik7CisKKwlkZXZfa2ZyZWVfc2tiKG9sZCk7Cit9CisKKy8qKgorICogbmV0ZGV2X3R4IC0gc2VuZCBvdXQgcGFja2V0CisgKiBAc2tiOglTb2NrZXQgYnVmZmVyLgorICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IHRoZSB1cHBlciBuZXR3b3JrIGxheWVyIHRvIHNlbmQgb3V0IGEgcGFja2V0LgorICoKKyAqIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWw7IG90aGVyd2lzZSBhbiBlcnJvciBjb2RlIGluZGljYXRpbmcgZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBuZXRkZXZfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisJaW50IGxlZnQ7CisJaW50IG51bSA9IDE7CisJaW50IHJjID0gMDsKKworCWlmIChody0+ZmVhdHVyZXMgJiBTTUFMTF9QQUNLRVRfVFhfQlVHKSB7CisJCXN0cnVjdCBza19idWZmICpvcmdfc2tiID0gc2tiOworCisJCWlmIChza2ItPmxlbiA8PSA0OCkgeworCQkJaWYgKHNrYl9lbmRfcG9pbnRlcihza2IpIC0gc2tiLT5kYXRhID49IDUwKSB7CisJCQkJbWVtc2V0KCZza2ItPmRhdGFbc2tiLT5sZW5dLCAwLCA1MCAtIHNrYi0+bGVuKTsKKwkJCQlza2ItPmxlbiA9IDUwOworCQkJfSBlbHNlIHsKKwkJCQlza2IgPSBkZXZfYWxsb2Nfc2tiKDUwKTsKKwkJCQlpZiAoIXNrYikKKwkJCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCQkJCW1lbWNweShza2ItPmRhdGEsIG9yZ19za2ItPmRhdGEsIG9yZ19za2ItPmxlbik7CisJCQkJbWVtc2V0KCZza2ItPmRhdGFbb3JnX3NrYi0+bGVuXSwgMCwKKwkJCQkJNTAgLSBvcmdfc2tiLT5sZW4pOworCQkJCXNrYi0+bGVuID0gNTA7CisJCQkJY29weV9vbGRfc2tiKG9yZ19za2IsIHNrYik7CisJCQl9CisJCX0KKwl9CisKKwlzcGluX2xvY2tfaXJxKCZod19wcml2LT5od2xvY2spOworCisJbnVtID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDE7CisJbGVmdCA9IGh3X2FsbG9jX3BrdChodywgc2tiLT5sZW4sIG51bSk7CisJaWYgKGxlZnQpIHsKKwkJaWYgKGxlZnQgPCBudW0gfHwKKwkJCQkoKGh3LT5mZWF0dXJlcyAmIElQVjZfQ1NVTV9HRU5fSEFDSykgJiYKKwkJCQkoQ0hFQ0tTVU1fUEFSVElBTCA9PSBza2ItPmlwX3N1bW1lZCkgJiYKKwkJCQkoRVRIX1BfSVBWNiA9PSBodG9ucyhza2ItPnByb3RvY29sKSkpKSB7CisJCQlzdHJ1Y3Qgc2tfYnVmZiAqb3JnX3NrYiA9IHNrYjsKKworCQkJc2tiID0gZGV2X2FsbG9jX3NrYihvcmdfc2tiLT5sZW4pOworCQkJaWYgKCFza2IpCisJCQkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOworCQkJc2tiX2NvcHlfYW5kX2NzdW1fZGV2KG9yZ19za2IsIHNrYi0+ZGF0YSk7CisJCQlvcmdfc2tiLT5pcF9zdW1tZWQgPSAwOworCQkJc2tiLT5sZW4gPSBvcmdfc2tiLT5sZW47CisJCQljb3B5X29sZF9za2Iob3JnX3NrYiwgc2tiKTsKKwkJfQorCQlzZW5kX3BhY2tldChza2IsIGRldik7CisJCWlmIChsZWZ0IDw9IG51bSkKKwkJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwl9IGVsc2UgeworCQkvKiBTdG9wIHRoZSB0cmFuc21pdCBxdWV1ZSB1bnRpbCBwYWNrZXQgaXMgYWxsb2NhdGVkLiAqLworCQluZXRpZl9zdG9wX3F1ZXVlKGRldik7CisJCXJjID0gTkVUREVWX1RYX0JVU1k7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxKCZod19wcml2LT5od2xvY2spOworCisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIG5ldGRldl90eF90aW1lb3V0IC0gdHJhbnNtaXQgdGltZW91dCBwcm9jZXNzaW5nCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIHdoZW4gdGhlIHRyYW5zbWl0IHRpbWVyIGV4cGlyZXMuICBUaGF0IGluZGljYXRlcyB0aGUKKyAqIGhhcmR3YXJlIGlzIG5vdCBydW5uaW5nIGNvcnJlY3RseSBiZWNhdXNlIHRyYW5zbWl0IGludGVycnVwdHMgYXJlIG5vdAorICogdHJpZ2dlcmVkIHRvIGZyZWUgdXAgcmVzb3VyY2VzIHNvIHRoYXQgdGhlIHRyYW5zbWl0IHJvdXRpbmUgY2FuIGNvbnRpbnVlCisgKiBzZW5kaW5nIG91dCBwYWNrZXRzLiAgVGhlIGhhcmR3YXJlIGlzIHJlc2V0IHRvIGNvcnJlY3QgdGhlIHByb2JsZW0uCisgKi8KK3N0YXRpYyB2b2lkIG5ldGRldl90eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RhdGljIHVuc2lnbmVkIGxvbmcgbGFzdF9yZXNldDsKKworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZod19wcml2LT5odzsKKwlpbnQgcG9ydDsKKworCWlmIChody0+ZGV2X2NvdW50ID4gMSkgeworCQkvKgorCQkgKiBPbmx5IHJlc2V0IHRoZSBoYXJkd2FyZSBpZiB0aW1lIGJldHdlZW4gY2FsbHMgaXMgbG9uZworCQkgKiBlbm91Z2guCisJCSAqLworCQlpZiAoamlmZmllcyAtIGxhc3RfcmVzZXQgPD0gZGV2LT53YXRjaGRvZ190aW1lbykKKwkJCWh3X3ByaXYgPSBOVUxMOworCX0KKworCWxhc3RfcmVzZXQgPSBqaWZmaWVzOworCWlmIChod19wcml2KSB7CisJCWh3X2Rpc19pbnRyKGh3KTsKKwkJaHdfZGlzYWJsZShodyk7CisKKwkJdHJhbnNtaXRfY2xlYW51cChod19wcml2LCAwKTsKKwkJaHdfcmVzZXRfcGt0cygmaHctPnJ4X2Rlc2NfaW5mbyk7CisJCWh3X3Jlc2V0X3BrdHMoJmh3LT50eF9kZXNjX2luZm8pOworCQlrc3pfaW5pdF9yeF9idWZmZXJzKGh3X3ByaXYpOworCisJCWh3X3Jlc2V0KGh3KTsKKworCQlod19zZXRfZGVzY19iYXNlKGh3LAorCQkJaHctPnR4X2Rlc2NfaW5mby5yaW5nX3BoeXMsCisJCQlody0+cnhfZGVzY19pbmZvLnJpbmdfcGh5cyk7CisJCWh3X3NldF9hZGRyKGh3KTsKKwkJaWYgKGh3LT5hbGxfbXVsdGkpCisJCQlod19zZXRfbXVsdGljYXN0KGh3LCBody0+YWxsX211bHRpKTsKKwkJZWxzZSBpZiAoaHctPm11bHRpX2xpc3Rfc2l6ZSkKKwkJCWh3X3NldF9ncnBfYWRkcihodyk7CisKKwkJaWYgKGh3LT5kZXZfY291bnQgPiAxKSB7CisJCQlod19zZXRfYWRkX2FkZHIoaHcpOworCQkJZm9yIChwb3J0ID0gMDsgcG9ydCA8IFNXSVRDSF9QT1JUX05VTTsgcG9ydCsrKSB7CisJCQkJc3RydWN0IG5ldF9kZXZpY2UgKnBvcnRfZGV2OworCisJCQkJcG9ydF9zZXRfc3RwX3N0YXRlKGh3LCBwb3J0LAorCQkJCQlTVFBfU1RBVEVfRElTQUJMRUQpOworCisJCQkJcG9ydF9kZXYgPSBody0+cG9ydF9pbmZvW3BvcnRdLnBkZXY7CisJCQkJaWYgKG5ldGlmX3J1bm5pbmcocG9ydF9kZXYpKQorCQkJCQlwb3J0X3NldF9zdHBfc3RhdGUoaHcsIHBvcnQsCisJCQkJCQlTVFBfU1RBVEVfU0lNUExFKTsKKwkJCX0KKwkJfQorCisJCWh3X2VuYWJsZShodyk7CisJCWh3X2VuYV9pbnRyKGh3KTsKKwl9CisKKwlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKKwluZXRpZl93YWtlX3F1ZXVlKGRldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjc3VtX3ZlcmlmaWVkKHN0cnVjdCBza19idWZmICpza2IpCit7CisJdW5zaWduZWQgc2hvcnQgcHJvdG9jb2w7CisJc3RydWN0IGlwaGRyICppcGg7CisKKwlwcm90b2NvbCA9IHNrYi0+cHJvdG9jb2w7CisJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CisJaXBoID0gKHN0cnVjdCBpcGhkciAqKSBza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKKwlpZiAocHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfODAyMVEpKSB7CisJCXByb3RvY29sID0gaXBoLT50b3RfbGVuOworCQlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgVkxBTl9ITEVOKTsKKwkJaXBoID0gKHN0cnVjdCBpcGhkciAqKSBza2JfbmV0d29ya19oZWFkZXIoc2tiKTsKKwl9CisJaWYgKHByb3RvY29sID09IGh0b25zKEVUSF9QX0lQKSkgeworCQlpZiAoaXBoLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCkKKwkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJfQorfQorCitzdGF0aWMgaW5saW5lIGludCByeF9wcm9jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBrc3pfaHcqIGh3LAorCXN0cnVjdCBrc3pfZGVzYyAqZGVzYywgdW5pb24gZGVzY19zdGF0IHN0YXR1cykKK3sKKwlpbnQgcGFja2V0X2xlbjsKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9kbWFfYnVmICpkbWFfYnVmOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IHJ4X3N0YXR1czsKKworCS8qIFJlY2VpdmVkIGxlbmd0aCBpbmNsdWRlcyA0LWJ5dGUgQ1JDLiAqLworCXBhY2tldF9sZW4gPSBzdGF0dXMucnguZnJhbWVfbGVuIC0gNDsKKworCWRtYV9idWYgPSBETUFfQlVGRkVSKGRlc2MpOworCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSgKKwkJaHdfcHJpdi0+cGRldiwgZG1hX2J1Zi0+ZG1hLCBwYWNrZXRfbGVuICsgNCwKKwkJUENJX0RNQV9GUk9NREVWSUNFKTsKKworCWRvIHsKKwkJLyogc2tiLT5kYXRhICE9IHNrYi0+aGVhZCAqLworCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHBhY2tldF9sZW4gKyAyKTsKKwkJaWYgKCFza2IpIHsKKwkJCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJLyoKKwkJICogQWxpZ24gc29ja2V0IGJ1ZmZlciBpbiA0LWJ5dGUgYm91bmRhcnkgZm9yIGJldHRlcgorCQkgKiBwZXJmb3JtYW5jZS4KKwkJICovCisJCXNrYl9yZXNlcnZlKHNrYiwgMik7CisKKwkJbWVtY3B5KHNrYl9wdXQoc2tiLCBwYWNrZXRfbGVuKSwKKwkJCWRtYV9idWYtPnNrYi0+ZGF0YSwgcGFja2V0X2xlbik7CisJfSB3aGlsZSAoMCk7CisKKwlza2ItPmRldiA9IGRldjsKKworCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CisKKwlpZiAoaHctPnJ4X2NmZyAmIChETUFfUlhfQ1NVTV9VRFAgfCBETUFfUlhfQ1NVTV9UQ1ApKQorCQljc3VtX3ZlcmlmaWVkKHNrYik7CisKKwkvKiBVcGRhdGUgcmVjZWl2ZSBzdGF0aXN0aWNzLiAqLworCXByaXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBwYWNrZXRfbGVuOworCisJLyogTm90aWZ5IHVwcGVyIGxheWVyIGZvciByZWNlaXZlZCBwYWNrZXQuICovCisJZGV2LT5sYXN0X3J4ID0gamlmZmllczsKKworCXJ4X3N0YXR1cyA9IG5ldGlmX3J4KHNrYik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZXZfcmN2X3BhY2tldHMoc3RydWN0IGRldl9pbmZvICpod19wcml2KQoreworCWludCBuZXh0OworCXVuaW9uIGRlc2Nfc3RhdCBzdGF0dXM7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGh3LT5wb3J0X2luZm9bMF0ucGRldjsKKwlzdHJ1Y3Qga3N6X2Rlc2NfaW5mbyAqaW5mbyA9ICZody0+cnhfZGVzY19pbmZvOworCWludCBsZWZ0ID0gaW5mby0+YWxsb2M7CisJc3RydWN0IGtzel9kZXNjICpkZXNjOworCWludCByZWNlaXZlZCA9IDA7CisKKwluZXh0ID0gaW5mby0+bmV4dDsKKwl3aGlsZSAobGVmdC0tKSB7CisJCS8qIEdldCBuZXh0IGRlc2NyaXB0b3Igd2hpY2ggaXMgbm90IGhhcmR3YXJlIG93bmVkLiAqLworCQlkZXNjID0gJmluZm8tPnJpbmdbbmV4dF07CisJCXN0YXR1cy5kYXRhID0gbGUzMl90b19jcHUoZGVzYy0+cGh3LT5jdHJsLmRhdGEpOworCQlpZiAoc3RhdHVzLnJ4Lmh3X293bmVkKQorCQkJYnJlYWs7CisKKwkJLyogU3RhdHVzIHZhbGlkIG9ubHkgd2hlbiBsYXN0IGRlc2NyaXB0b3IgYml0IGlzIHNldC4gKi8KKwkJaWYgKHN0YXR1cy5yeC5sYXN0X2Rlc2MgJiYgc3RhdHVzLnJ4LmZpcnN0X2Rlc2MpIHsKKwkJCWlmIChyeF9wcm9jKGRldiwgaHcsIGRlc2MsIHN0YXR1cykpCisJCQkJZ290byByZWxlYXNlX3BhY2tldDsKKwkJCXJlY2VpdmVkKys7CisJCX0KKworcmVsZWFzZV9wYWNrZXQ6CisJCXJlbGVhc2VfZGVzYyhkZXNjKTsKKwkJbmV4dCsrOworCQluZXh0ICY9IGluZm8tPm1hc2s7CisJfQorCWluZm8tPm5leHQgPSBuZXh0OworCisJcmV0dXJuIHJlY2VpdmVkOworfQorCitzdGF0aWMgaW50IHBvcnRfcmN2X3BhY2tldHMoc3RydWN0IGRldl9pbmZvICpod19wcml2KQoreworCWludCBuZXh0OworCXVuaW9uIGRlc2Nfc3RhdCBzdGF0dXM7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGh3LT5wb3J0X2luZm9bMF0ucGRldjsKKwlzdHJ1Y3Qga3N6X2Rlc2NfaW5mbyAqaW5mbyA9ICZody0+cnhfZGVzY19pbmZvOworCWludCBsZWZ0ID0gaW5mby0+YWxsb2M7CisJc3RydWN0IGtzel9kZXNjICpkZXNjOworCWludCByZWNlaXZlZCA9IDA7CisKKwluZXh0ID0gaW5mby0+bmV4dDsKKwl3aGlsZSAobGVmdC0tKSB7CisJCS8qIEdldCBuZXh0IGRlc2NyaXB0b3Igd2hpY2ggaXMgbm90IGhhcmR3YXJlIG93bmVkLiAqLworCQlkZXNjID0gJmluZm8tPnJpbmdbbmV4dF07CisJCXN0YXR1cy5kYXRhID0gbGUzMl90b19jcHUoZGVzYy0+cGh3LT5jdHJsLmRhdGEpOworCQlpZiAoc3RhdHVzLnJ4Lmh3X293bmVkKQorCQkJYnJlYWs7CisKKwkJaWYgKGh3LT5kZXZfY291bnQgPiAxKSB7CisJCQkvKiBHZXQgcmVjZWl2ZWQgcG9ydCBudW1iZXIuICovCisJCQlpbnQgcCA9IEhXX1RPX0RFVl9QT1JUKHN0YXR1cy5yeC5zcmNfcG9ydCk7CisKKwkJCWRldiA9IGh3LT5wb3J0X2luZm9bcF0ucGRldjsKKwkJCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQkJCWdvdG8gcmVsZWFzZV9wYWNrZXQ7CisJCX0KKworCQkvKiBTdGF0dXMgdmFsaWQgb25seSB3aGVuIGxhc3QgZGVzY3JpcHRvciBiaXQgaXMgc2V0LiAqLworCQlpZiAoc3RhdHVzLnJ4Lmxhc3RfZGVzYyAmJiBzdGF0dXMucnguZmlyc3RfZGVzYykgeworCQkJaWYgKHJ4X3Byb2MoZGV2LCBodywgZGVzYywgc3RhdHVzKSkKKwkJCQlnb3RvIHJlbGVhc2VfcGFja2V0OworCQkJcmVjZWl2ZWQrKzsKKwkJfQorCityZWxlYXNlX3BhY2tldDoKKwkJcmVsZWFzZV9kZXNjKGRlc2MpOworCQluZXh0Kys7CisJCW5leHQgJj0gaW5mby0+bWFzazsKKwl9CisJaW5mby0+bmV4dCA9IG5leHQ7CisKKwlyZXR1cm4gcmVjZWl2ZWQ7Cit9CisKK3N0YXRpYyBpbnQgZGV2X3Jjdl9zcGVjaWFsKHN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdikKK3sKKwlpbnQgbmV4dDsKKwl1bmlvbiBkZXNjX3N0YXQgc3RhdHVzOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+cG9ydF9pbmZvWzBdLnBkZXY7CisJc3RydWN0IGtzel9kZXNjX2luZm8gKmluZm8gPSAmaHctPnJ4X2Rlc2NfaW5mbzsKKwlpbnQgbGVmdCA9IGluZm8tPmFsbG9jOworCXN0cnVjdCBrc3pfZGVzYyAqZGVzYzsKKwlpbnQgcmVjZWl2ZWQgPSAwOworCisJbmV4dCA9IGluZm8tPm5leHQ7CisJd2hpbGUgKGxlZnQtLSkgeworCQkvKiBHZXQgbmV4dCBkZXNjcmlwdG9yIHdoaWNoIGlzIG5vdCBoYXJkd2FyZSBvd25lZC4gKi8KKwkJZGVzYyA9ICZpbmZvLT5yaW5nW25leHRdOworCQlzdGF0dXMuZGF0YSA9IGxlMzJfdG9fY3B1KGRlc2MtPnBody0+Y3RybC5kYXRhKTsKKwkJaWYgKHN0YXR1cy5yeC5od19vd25lZCkKKwkJCWJyZWFrOworCisJCWlmIChody0+ZGV2X2NvdW50ID4gMSkgeworCQkJLyogR2V0IHJlY2VpdmVkIHBvcnQgbnVtYmVyLiAqLworCQkJaW50IHAgPSBIV19UT19ERVZfUE9SVChzdGF0dXMucnguc3JjX3BvcnQpOworCisJCQlkZXYgPSBody0+cG9ydF9pbmZvW3BdLnBkZXY7CisJCQlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJCQlnb3RvIHJlbGVhc2VfcGFja2V0OworCQl9CisKKwkJLyogU3RhdHVzIHZhbGlkIG9ubHkgd2hlbiBsYXN0IGRlc2NyaXB0b3IgYml0IGlzIHNldC4gKi8KKwkJaWYgKHN0YXR1cy5yeC5sYXN0X2Rlc2MgJiYgc3RhdHVzLnJ4LmZpcnN0X2Rlc2MpIHsKKwkJCS8qCisJCQkgKiBSZWNlaXZlIHdpdGhvdXQgZXJyb3IuICBXaXRoIHJlY2VpdmUgZXJyb3JzCisJCQkgKiBkaXNhYmxlZCwgcGFja2V0cyB3aXRoIHJlY2VpdmUgZXJyb3JzIHdpbGwgYmUKKwkJCSAqIGRyb3BwZWQsIHNvIG5vIG5lZWQgdG8gY2hlY2sgdGhlIGVycm9yIGJpdC4KKwkJCSAqLworCQkJaWYgKCFzdGF0dXMucnguZXJyb3IgfHwgKHN0YXR1cy5kYXRhICYKKwkJCQkJS1NfREVTQ19SWF9FUlJPUl9DT05EKSA9PQorCQkJCQlLU19ERVNDX1JYX0VSUk9SX1RPT19MT05HKSB7CisJCQkJaWYgKHJ4X3Byb2MoZGV2LCBodywgZGVzYywgc3RhdHVzKSkKKwkJCQkJZ290byByZWxlYXNlX3BhY2tldDsKKwkJCQlyZWNlaXZlZCsrOworCQkJfSBlbHNlIHsKKwkJCQlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJCQkJLyogVXBkYXRlIHJlY2VpdmUgZXJyb3Igc3RhdGlzdGljcy4gKi8KKwkJCQlwcml2LT5wb3J0LmNvdW50ZXJbT0lEX0NPVU5URVJfUkNWX0VSUk9SXSsrOworCQkJfQorCQl9CisKK3JlbGVhc2VfcGFja2V0OgorCQlyZWxlYXNlX2Rlc2MoZGVzYyk7CisJCW5leHQrKzsKKwkJbmV4dCAmPSBpbmZvLT5tYXNrOworCX0KKwlpbmZvLT5uZXh0ID0gbmV4dDsKKworCXJldHVybiByZWNlaXZlZDsKK30KKworc3RhdGljIHZvaWQgcnhfcHJvY190YXNrKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSAoc3RydWN0IGRldl9pbmZvICopIGRhdGE7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisKKwlpZiAoIWh3LT5lbmFibGVkKQorCQlyZXR1cm47CisJaWYgKHVubGlrZWx5KCFod19wcml2LT5kZXZfcmN2KGh3X3ByaXYpKSkgeworCisJCS8qIEluIGNhc2UgcmVjZWl2ZSBwcm9jZXNzIGlzIHN1c3BlbmRlZCBiZWNhdXNlIG9mIG92ZXJydW4uICovCisJCWh3X3Jlc3VtZV9yeChodyk7CisKKwkJLyogdGFza2xldHMgYXJlIGludGVycnVwdGlibGUuICovCisJCXNwaW5fbG9ja19pcnEoJmh3X3ByaXYtPmh3bG9jayk7CisJCWh3X3R1cm5fb25faW50cihodywgS1M4ODRYX0lOVF9SWF9NQVNLKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZod19wcml2LT5od2xvY2spOworCX0gZWxzZSB7CisJCWh3X2Fja19pbnRyKGh3LCBLUzg4NFhfSU5UX1JYKTsKKwkJdGFza2xldF9zY2hlZHVsZSgmaHdfcHJpdi0+cnhfdGFza2xldCk7CisJfQorfQorCitzdGF0aWMgdm9pZCB0eF9wcm9jX3Rhc2sodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IChzdHJ1Y3QgZGV2X2luZm8gKikgZGF0YTsKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZod19wcml2LT5odzsKKworCWh3X2Fja19pbnRyKGh3LCBLUzg4NFhfSU5UX1RYX01BU0spOworCisJdHhfZG9uZShod19wcml2KTsKKworCS8qIHRhc2tsZXRzIGFyZSBpbnRlcnJ1cHRpYmxlLiAqLworCXNwaW5fbG9ja19pcnEoJmh3X3ByaXYtPmh3bG9jayk7CisJaHdfdHVybl9vbl9pbnRyKGh3LCBLUzg4NFhfSU5UX1RYKTsKKwlzcGluX3VubG9ja19pcnEoJmh3X3ByaXYtPmh3bG9jayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfcnhfc3RvcChzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwkvKiBSZWNlaXZlIGp1c3QgaGFzIGJlZW4gc3RvcHBlZC4gKi8KKwlpZiAoMCA9PSBody0+cnhfc3RvcCkKKwkJaHctPmludHJfbWFzayAmPSB+S1M4ODRYX0lOVF9SWF9TVE9QUEVEOworCWVsc2UgaWYgKGh3LT5yeF9zdG9wID4gMSkgeworCQlpZiAoaHctPmVuYWJsZWQgJiYgKGh3LT5yeF9jZmcgJiBETUFfUlhfRU5BQkxFKSkgeworCQkJaHdfc3RhcnRfcngoaHcpOworCQl9IGVsc2UgeworCQkJaHctPmludHJfbWFzayAmPSB+S1M4ODRYX0lOVF9SWF9TVE9QUEVEOworCQkJaHctPnJ4X3N0b3AgPSAwOworCQl9CisJfSBlbHNlCisJCS8qIFJlY2VpdmUganVzdCBoYXMgYmVlbiBzdGFydGVkLiAqLworCQlody0+cnhfc3RvcCsrOworfQorCisvKioKKyAqIG5ldGRldl9pbnRyIC0gaW50ZXJydXB0IGhhbmRsaW5nCisgKiBAaXJxOglJbnRlcnJ1cHQgbnVtYmVyLgorICogQGRldl9pZDoJTmV0d29yayBkZXZpY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdXBwZXIgbmV0d29yayBsYXllciB0byBzaWduYWwgaW50ZXJydXB0LgorICoKKyAqIFJldHVybiBJUlFfSEFORExFRCBpZiBpbnRlcnJ1cHQgaXMgaGFuZGxlZC4KKyAqLworc3RhdGljIGlycXJldHVybl90IG5ldGRldl9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwl1aW50IGludF9lbmFibGUgPSAwOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGV2X2lkOworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZod19wcml2LT5odzsKKworCWh3X3JlYWRfaW50cihodywgJmludF9lbmFibGUpOworCisJLyogTm90IG91ciBpbnRlcnJ1cHQhICovCisJaWYgKCFpbnRfZW5hYmxlKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwlkbyB7CisJCWh3X2Fja19pbnRyKGh3LCBpbnRfZW5hYmxlKTsKKwkJaW50X2VuYWJsZSAmPSBody0+aW50cl9tYXNrOworCisJCWlmICh1bmxpa2VseShpbnRfZW5hYmxlICYgS1M4ODRYX0lOVF9UWF9NQVNLKSkgeworCQkJaHdfZGlzX2ludHJfYml0KGh3LCBLUzg4NFhfSU5UX1RYX01BU0spOworCQkJdGFza2xldF9zY2hlZHVsZSgmaHdfcHJpdi0+dHhfdGFza2xldCk7CisJCX0KKworCQlpZiAobGlrZWx5KGludF9lbmFibGUgJiBLUzg4NFhfSU5UX1JYKSkgeworCQkJaHdfZGlzX2ludHJfYml0KGh3LCBLUzg4NFhfSU5UX1JYKTsKKwkJCXRhc2tsZXRfc2NoZWR1bGUoJmh3X3ByaXYtPnJ4X3Rhc2tsZXQpOworCQl9CisKKwkJaWYgKHVubGlrZWx5KGludF9lbmFibGUgJiBLUzg4NFhfSU5UX1JYX09WRVJSVU4pKSB7CisJCQlwcml2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOworCQkJaHdfcmVzdW1lX3J4KGh3KTsKKwkJfQorCisJCWlmICh1bmxpa2VseShpbnRfZW5hYmxlICYgS1M4ODRYX0lOVF9QSFkpKSB7CisJCQlzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQgPSAmcHJpdi0+cG9ydDsKKworCQkJaHctPmZlYXR1cmVzIHw9IExJTktfSU5UX1dPUktJTkc7CisJCQlwb3J0X2dldF9saW5rX3NwZWVkKHBvcnQpOworCQl9CisKKwkJaWYgKHVubGlrZWx5KGludF9lbmFibGUgJiBLUzg4NFhfSU5UX1JYX1NUT1BQRUQpKSB7CisJCQloYW5kbGVfcnhfc3RvcChodyk7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh1bmxpa2VseShpbnRfZW5hYmxlICYgS1M4ODRYX0lOVF9UWF9TVE9QUEVEKSkgeworCQkJdTMyIGRhdGE7CisKKwkJCWh3LT5pbnRyX21hc2sgJj0gfktTODg0WF9JTlRfVFhfU1RPUFBFRDsKKwkJCXByaW50ayhLRVJOX0lORk8gIlR4IHN0b3BwZWRcbiIpOworCQkJZGF0YSA9IHJlYWRsKGh3LT5pbyArIEtTX0RNQV9UWF9DVFJMKTsKKwkJCWlmICghKGRhdGEgJiBETUFfVFhfRU5BQkxFKSkKKwkJCQlwcmludGsoS0VSTl9JTkZPICJUeCBkaXNhYmxlZFxuIik7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKDApOworCisJaHdfZW5hX2ludHIoaHcpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKgorICogTGludXggbmV0d29yayBkZXZpY2UgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbmV4dF9qaWZmaWVzOworCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKK3N0YXRpYyB2b2lkIG5ldGRldl9uZXRwb2xsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOworCisJaHdfZGlzX2ludHIoJmh3X3ByaXYtPmh3KTsKKwluZXRkZXZfaW50cihkZXYtPmlycSwgZGV2KTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBicmlkZ2VfY2hhbmdlKHN0cnVjdCBrc3pfaHcgKmh3KQoreworCWludCBwb3J0OworCXU4ICBtZW1iZXI7CisJc3RydWN0IGtzel9zd2l0Y2ggKnN3ID0gaHctPmtzel9zd2l0Y2g7CisKKwkvKiBObyBwb3J0cyBpbiBmb3J3YXJkaW5nIHN0YXRlLiAqLworCWlmICghc3ctPm1lbWJlcikgeworCQlwb3J0X3NldF9zdHBfc3RhdGUoaHcsIFNXSVRDSF9QT1JUX05VTSwgU1RQX1NUQVRFX1NJTVBMRSk7CisJCXN3X2Jsb2NrX2FkZHIoaHcpOworCX0KKwlmb3IgKHBvcnQgPSAwOyBwb3J0IDwgU1dJVENIX1BPUlRfTlVNOyBwb3J0KyspIHsKKwkJaWYgKFNUUF9TVEFURV9GT1JXQVJESU5HID09IHN3LT5wb3J0X2NmZ1twb3J0XS5zdHBfc3RhdGUpCisJCQltZW1iZXIgPSBIT1NUX01BU0sgfCBzdy0+bWVtYmVyOworCQllbHNlCisJCQltZW1iZXIgPSBIT1NUX01BU0sgfCAoMSA8PCBwb3J0KTsKKwkJaWYgKG1lbWJlciAhPSBzdy0+cG9ydF9jZmdbcG9ydF0ubWVtYmVyKQorCQkJc3dfY2ZnX3BvcnRfYmFzZV92bGFuKGh3LCBwb3J0LCBtZW1iZXIpOworCX0KK30KKworLyoqCisgKiBuZXRkZXZfY2xvc2UgLSBjbG9zZSBuZXR3b3JrIGRldmljZQorICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzIHRoZSBjbG9zZSBvcGVyYXRpb24gb2YgbmV0d29yayBkZXZpY2UuICBUaGlzIGlzIGNhdXNlZAorICogYnkgdGhlIHVzZXIgY29tbWFuZCAiaWZjb25maWcgZXRoWCBkb3duLiIKKyAqCisgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsOyBvdGhlcndpc2UgYW4gZXJyb3IgY29kZSBpbmRpY2F0aW5nIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgbmV0ZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBrc3pfcG9ydCAqcG9ydCA9ICZwcml2LT5wb3J0OworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCWludCBwaTsKKworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKworCWtzel9zdG9wX3RpbWVyKCZwcml2LT5tb25pdG9yX3RpbWVyX2luZm8pOworCisJLyogTmVlZCB0byBzaHV0IHRoZSBwb3J0IG1hbnVhbGx5IGluIG11bHRpcGxlIGRldmljZSBpbnRlcmZhY2VzIG1vZGUuICovCisJaWYgKGh3LT5kZXZfY291bnQgPiAxKSB7CisJCXBvcnRfc2V0X3N0cF9zdGF0ZShodywgcG9ydC0+Zmlyc3RfcG9ydCwgU1RQX1NUQVRFX0RJU0FCTEVEKTsKKworCQkvKiBQb3J0IGlzIGNsb3NlZC4gIE5lZWQgdG8gY2hhbmdlIGJyaWRnZSBzZXR0aW5nLiAqLworCQlpZiAoaHctPmZlYXR1cmVzICYgU1RQX1NVUFBPUlQpIHsKKwkJCXBpID0gMSA8PCBwb3J0LT5maXJzdF9wb3J0OworCQkJaWYgKGh3LT5rc3pfc3dpdGNoLT5tZW1iZXIgJiBwaSkgeworCQkJCWh3LT5rc3pfc3dpdGNoLT5tZW1iZXIgJj0gfnBpOworCQkJCWJyaWRnZV9jaGFuZ2UoaHcpOworCQkJfQorCQl9CisJfQorCWlmIChwb3J0LT5maXJzdF9wb3J0ID4gMCkKKwkJaHdfZGVsX2FkZHIoaHcsIGRldi0+ZGV2X2FkZHIpOworCWlmICghaHdfcHJpdi0+d29sX2VuYWJsZSkKKwkJcG9ydF9zZXRfcG93ZXJfc2F2aW5nKHBvcnQsIHRydWUpOworCisJaWYgKHByaXYtPm11bHRpY2FzdCkKKwkJLS1ody0+YWxsX211bHRpOworCWlmIChwcml2LT5wcm9taXNjdW91cykKKwkJLS1ody0+cHJvbWlzY3VvdXM7CisKKwlod19wcml2LT5vcGVuZWQtLTsKKwlpZiAoIShod19wcml2LT5vcGVuZWQpKSB7CisJCWtzel9zdG9wX3RpbWVyKCZod19wcml2LT5taWJfdGltZXJfaW5mbyk7CisJCWZsdXNoX3dvcmsoJmh3X3ByaXYtPm1pYl9yZWFkKTsKKworCQlod19kaXNfaW50cihodyk7CisJCWh3X2Rpc2FibGUoaHcpOworCQlod19jbHJfbXVsdGljYXN0KGh3KTsKKworCQkvKiBEZWxheSBmb3IgcmVjZWl2ZSB0YXNrIHRvIHN0b3Agc2NoZWR1bGluZyBpdHNlbGYuICovCisJCW1zbGVlcCgyMDAwIC8gSFopOworCisJCXRhc2tsZXRfZGlzYWJsZSgmaHdfcHJpdi0+cnhfdGFza2xldCk7CisJCXRhc2tsZXRfZGlzYWJsZSgmaHdfcHJpdi0+dHhfdGFza2xldCk7CisJCWZyZWVfaXJxKGRldi0+aXJxLCBod19wcml2LT5kZXYpOworCisJCXRyYW5zbWl0X2NsZWFudXAoaHdfcHJpdiwgMCk7CisJCWh3X3Jlc2V0X3BrdHMoJmh3LT5yeF9kZXNjX2luZm8pOworCQlod19yZXNldF9wa3RzKCZody0+dHhfZGVzY19pbmZvKTsKKworCQkvKiBDbGVhbiBvdXQgc3RhdGljIE1BQyB0YWJsZSB3aGVuIHRoZSBzd2l0Y2ggaXMgc2h1dGRvd24uICovCisJCWlmIChody0+ZmVhdHVyZXMgJiBTVFBfU1VQUE9SVCkKKwkJCXN3X2Nscl9zdGFfbWFjX3RhYmxlKGh3KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaHdfY2ZnX2h1Z2VfZnJhbWUoc3RydWN0IGRldl9pbmZvICpod19wcml2LCBzdHJ1Y3Qga3N6X2h3ICpodykKK3sKKwlpZiAoaHctPmtzel9zd2l0Y2gpIHsKKwkJdTMyIGRhdGE7CisKKwkJZGF0YSA9IHJlYWR3KGh3LT5pbyArIEtTODg0Ml9TV0lUQ0hfQ1RSTF8yX09GRlNFVCk7CisJCWlmIChody0+ZmVhdHVyZXMgJiBSWF9IVUdFX0ZSQU1FKQorCQkJZGF0YSB8PSBTV0lUQ0hfSFVHRV9QQUNLRVQ7CisJCWVsc2UKKwkJCWRhdGEgJj0gflNXSVRDSF9IVUdFX1BBQ0tFVDsKKwkJd3JpdGV3KGRhdGEsIGh3LT5pbyArIEtTODg0Ml9TV0lUQ0hfQ1RSTF8yX09GRlNFVCk7CisJfQorCWlmIChody0+ZmVhdHVyZXMgJiBSWF9IVUdFX0ZSQU1FKSB7CisJCWh3LT5yeF9jZmcgfD0gRE1BX1JYX0VSUk9SOworCQlod19wcml2LT5kZXZfcmN2ID0gZGV2X3Jjdl9zcGVjaWFsOworCX0gZWxzZSB7CisJCWh3LT5yeF9jZmcgJj0gfkRNQV9SWF9FUlJPUjsKKwkJaWYgKGh3LT5kZXZfY291bnQgPiAxKQorCQkJaHdfcHJpdi0+ZGV2X3JjdiA9IHBvcnRfcmN2X3BhY2tldHM7CisJCWVsc2UKKwkJCWh3X3ByaXYtPmRldl9yY3YgPSBkZXZfcmN2X3BhY2tldHM7CisJfQorfQorCitzdGF0aWMgaW50IHByZXBhcmVfaGFyZHdhcmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisJaW50IHJjID0gMDsKKworCS8qIFJlbWVtYmVyIHRoZSBuZXR3b3JrIGRldmljZSB0aGF0IHJlcXVlc3RzIGludGVycnVwdHMuICovCisJaHdfcHJpdi0+ZGV2ID0gZGV2OworCXJjID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIG5ldGRldl9pbnRyLCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCXRhc2tsZXRfZW5hYmxlKCZod19wcml2LT5yeF90YXNrbGV0KTsKKwl0YXNrbGV0X2VuYWJsZSgmaHdfcHJpdi0+dHhfdGFza2xldCk7CisKKwlody0+cHJvbWlzY3VvdXMgPSAwOworCWh3LT5hbGxfbXVsdGkgPSAwOworCWh3LT5tdWx0aV9saXN0X3NpemUgPSAwOworCisJaHdfcmVzZXQoaHcpOworCisJaHdfc2V0X2Rlc2NfYmFzZShodywKKwkJaHctPnR4X2Rlc2NfaW5mby5yaW5nX3BoeXMsIGh3LT5yeF9kZXNjX2luZm8ucmluZ19waHlzKTsKKwlod19zZXRfYWRkcihodyk7CisJaHdfY2ZnX2h1Z2VfZnJhbWUoaHdfcHJpdiwgaHcpOworCWtzel9pbml0X3J4X2J1ZmZlcnMoaHdfcHJpdik7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbmV0ZGV2X29wZW4gLSBvcGVuIG5ldHdvcmsgZGV2aWNlCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3MgdGhlIG9wZW4gb3BlcmF0aW9uIG9mIG5ldHdvcmsgZGV2aWNlLiAgVGhpcyBpcyBjYXVzZWQKKyAqIGJ5IHRoZSB1c2VyIGNvbW1hbmQgImlmY29uZmlnIGV0aFggdXAuIgorICoKKyAqIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWw7IG90aGVyd2lzZSBhbiBlcnJvciBjb2RlIGluZGljYXRpbmcgZmFpbHVyZS4KKyAqLworc3RhdGljIGludCBuZXRkZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZod19wcml2LT5odzsKKwlzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQgPSAmcHJpdi0+cG9ydDsKKwlpbnQgaTsKKwlpbnQgcDsKKwlpbnQgcmMgPSAwOworCisJcHJpdi0+bXVsdGljYXN0ID0gMDsKKwlwcml2LT5wcm9taXNjdW91cyA9IDA7CisKKwkvKiBSZXNldCBkZXZpY2Ugc3RhdGlzdGljcy4gKi8KKwltZW1zZXQoJnByaXYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKKwltZW1zZXQoKHZvaWQgKikgcG9ydC0+Y291bnRlciwgMCwKKwkJKHNpemVvZih1NjQpICogT0lEX0NPVU5URVJfTEFTVCkpOworCisJaWYgKCEoaHdfcHJpdi0+b3BlbmVkKSkgeworCQlyYyA9IHByZXBhcmVfaGFyZHdhcmUoZGV2KTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIHJjOworCQlmb3IgKGkgPSAwOyBpIDwgaHctPm1pYl9wb3J0X2NudDsgaSsrKSB7CisJCQlpZiAobmV4dF9qaWZmaWVzIDwgamlmZmllcykKKwkJCQluZXh0X2ppZmZpZXMgPSBqaWZmaWVzICsgSFogKiAyOworCQkJZWxzZQorCQkJCW5leHRfamlmZmllcyArPSBIWiAqIDE7CisJCQlod19wcml2LT5jb3VudGVyW2ldLnRpbWUgPSBuZXh0X2ppZmZpZXM7CisJCQlody0+cG9ydF9taWJbaV0uc3RhdGUgPSBtZWRpYV9kaXNjb25uZWN0ZWQ7CisJCQlwb3J0X2luaXRfY250KGh3LCBpKTsKKwkJfQorCQlpZiAoaHctPmtzel9zd2l0Y2gpCisJCQlody0+cG9ydF9taWJbSE9TVF9QT1JUXS5zdGF0ZSA9IG1lZGlhX2Nvbm5lY3RlZDsKKwkJZWxzZSB7CisJCQlod19hZGRfd29sX2JjYXN0KGh3KTsKKwkJCWh3X2NmZ193b2xfcG1lKGh3LCAwKTsKKwkJCWh3X2Nscl93b2xfcG1lX3N0YXR1cygmaHdfcHJpdi0+aHcpOworCQl9CisJfQorCXBvcnRfc2V0X3Bvd2VyX3NhdmluZyhwb3J0LCBmYWxzZSk7CisKKwlmb3IgKGkgPSAwLCBwID0gcG9ydC0+Zmlyc3RfcG9ydDsgaSA8IHBvcnQtPnBvcnRfY250OyBpKyssIHArKykgeworCQkvKgorCQkgKiBJbml0aWFsaXplIHRvIGludmFsaWQgdmFsdWUgc28gdGhhdCBsaW5rIGRldGVjdGlvbgorCQkgKiBpcyBkb25lLgorCQkgKi8KKwkJaHctPnBvcnRfaW5mb1twXS5wYXJ0bmVyID0gMHhGRjsKKwkJaHctPnBvcnRfaW5mb1twXS5zdGF0ZSA9IG1lZGlhX2Rpc2Nvbm5lY3RlZDsKKwl9CisKKwkvKiBOZWVkIHRvIG9wZW4gdGhlIHBvcnQgaW4gbXVsdGlwbGUgZGV2aWNlIGludGVyZmFjZXMgbW9kZS4gKi8KKwlpZiAoaHctPmRldl9jb3VudCA+IDEpIHsKKwkJcG9ydF9zZXRfc3RwX3N0YXRlKGh3LCBwb3J0LT5maXJzdF9wb3J0LCBTVFBfU1RBVEVfU0lNUExFKTsKKwkJaWYgKHBvcnQtPmZpcnN0X3BvcnQgPiAwKQorCQkJaHdfYWRkX2FkZHIoaHcsIGRldi0+ZGV2X2FkZHIpOworCX0KKworCXBvcnRfZ2V0X2xpbmtfc3BlZWQocG9ydCk7CisJaWYgKHBvcnQtPmZvcmNlX2xpbmspCisJCXBvcnRfZm9yY2VfbGlua19zcGVlZChwb3J0KTsKKwllbHNlCisJCXBvcnRfc2V0X2xpbmtfc3BlZWQocG9ydCk7CisKKwlpZiAoIShod19wcml2LT5vcGVuZWQpKSB7CisJCWh3X3NldHVwX2ludHIoaHcpOworCQlod19lbmFibGUoaHcpOworCQlod19lbmFfaW50cihodyk7CisKKwkJaWYgKGh3LT5taWJfcG9ydF9jbnQpCisJCQlrc3pfc3RhcnRfdGltZXIoJmh3X3ByaXYtPm1pYl90aW1lcl9pbmZvLAorCQkJCWh3X3ByaXYtPm1pYl90aW1lcl9pbmZvLnBlcmlvZCk7CisJfQorCisJaHdfcHJpdi0+b3BlbmVkKys7CisKKwlrc3pfc3RhcnRfdGltZXIoJnByaXYtPm1vbml0b3JfdGltZXJfaW5mbywKKwkJcHJpdi0+bW9uaXRvcl90aW1lcl9pbmZvLnBlcmlvZCk7CisKKwlwcml2LT5tZWRpYV9zdGF0ZSA9IHBvcnQtPmxpbmtlZC0+c3RhdGU7CisKKwlpZiAobWVkaWFfY29ubmVjdGVkID09IHByaXYtPm1lZGlhX3N0YXRlKQorCQluZXRpZl9jYXJyaWVyX29uKGRldik7CisJZWxzZQorCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCWlmIChuZXRpZl9tc2dfbGluayhwcml2KSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgbGluayAlc1xuIiwgZGV2LT5uYW1lLAorCQkJKG1lZGlhX2Nvbm5lY3RlZCA9PSBwcml2LT5tZWRpYV9zdGF0ZSA/CisJCQkib24iIDogIm9mZiIpKTsKKworCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyogUlggZXJyb3JzID0gcnhfZXJyb3JzICovCisvKiBSWCBkcm9wcGVkID0gcnhfZHJvcHBlZCAqLworLyogUlggb3ZlcnJ1bnMgPSByeF9maWZvX2Vycm9ycyAqLworLyogUlggZnJhbWUgPSByeF9jcmNfZXJyb3JzICsgcnhfZnJhbWVfZXJyb3JzICsgcnhfbGVuZ3RoX2Vycm9ycyAqLworLyogVFggZXJyb3JzID0gdHhfZXJyb3JzICovCisvKiBUWCBkcm9wcGVkID0gdHhfZHJvcHBlZCAqLworLyogVFggb3ZlcnJ1bnMgPSB0eF9maWZvX2Vycm9ycyAqLworLyogVFggY2FycmllciA9IHR4X2Fib3J0ZWRfZXJyb3JzICsgdHhfY2Fycmllcl9lcnJvcnMgKyB0eF93aW5kb3dfZXJyb3JzICovCisvKiBjb2xsaXNpb25zID0gY29sbGlzaW9ucyAqLworCisvKioKKyAqIG5ldGRldl9xdWVyeV9zdGF0aXN0aWNzIC0gcXVlcnkgbmV0d29yayBkZXZpY2Ugc3RhdGlzdGljcworICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdGF0aXN0aWNzIG9mIHRoZSBuZXR3b3JrIGRldmljZS4gIFRoZSBkZXZpY2UKKyAqIG5lZWRzIG5vdCBiZSBvcGVuZWQuCisgKgorICogUmV0dXJuIG5ldHdvcmsgZGV2aWNlIHN0YXRpc3RpY3MuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbmV0ZGV2X3F1ZXJ5X3N0YXRpc3RpY3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBrc3pfcG9ydCAqcG9ydCA9ICZwcml2LT5wb3J0OworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJnByaXYtPmFkYXB0ZXItPmh3OworCXN0cnVjdCBrc3pfcG9ydF9taWIgKm1pYjsKKwlpbnQgaTsKKwlpbnQgcDsKKworCXByaXYtPnN0YXRzLnJ4X2Vycm9ycyA9IHBvcnQtPmNvdW50ZXJbT0lEX0NPVU5URVJfUkNWX0VSUk9SXTsKKwlwcml2LT5zdGF0cy50eF9lcnJvcnMgPSBwb3J0LT5jb3VudGVyW09JRF9DT1VOVEVSX1hNSVRfRVJST1JdOworCisJLyogUmVzZXQgdG8gemVybyB0byBhZGQgY291bnQgbGF0ZXIuICovCisJcHJpdi0+c3RhdHMubXVsdGljYXN0ID0gMDsKKwlwcml2LT5zdGF0cy5jb2xsaXNpb25zID0gMDsKKwlwcml2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzID0gMDsKKwlwcml2LT5zdGF0cy5yeF9jcmNfZXJyb3JzID0gMDsKKwlwcml2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgPSAwOworCXByaXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMgPSAwOworCisJZm9yIChpID0gMCwgcCA9IHBvcnQtPmZpcnN0X3BvcnQ7IGkgPCBwb3J0LT5taWJfcG9ydF9jbnQ7IGkrKywgcCsrKSB7CisJCW1pYiA9ICZody0+cG9ydF9taWJbcF07CisKKwkJcHJpdi0+c3RhdHMubXVsdGljYXN0ICs9ICh1bnNpZ25lZCBsb25nKQorCQkJbWliLT5jb3VudGVyW01JQl9DT1VOVEVSX1JYX01VTFRJQ0FTVF07CisKKwkJcHJpdi0+c3RhdHMuY29sbGlzaW9ucyArPSAodW5zaWduZWQgbG9uZykKKwkJCW1pYi0+Y291bnRlcltNSUJfQ09VTlRFUl9UWF9UT1RBTF9DT0xMSVNJT05dOworCisJCXByaXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMgKz0gKHVuc2lnbmVkIGxvbmcpKAorCQkJbWliLT5jb3VudGVyW01JQl9DT1VOVEVSX1JYX1VOREVSU0laRV0gKworCQkJbWliLT5jb3VudGVyW01JQl9DT1VOVEVSX1JYX0ZSQUdNRU5UXSArCisJCQltaWItPmNvdW50ZXJbTUlCX0NPVU5URVJfUlhfT1ZFUlNJWkVdICsKKwkJCW1pYi0+Y291bnRlcltNSUJfQ09VTlRFUl9SWF9KQUJCRVJdKTsKKwkJcHJpdi0+c3RhdHMucnhfY3JjX2Vycm9ycyArPSAodW5zaWduZWQgbG9uZykKKwkJCW1pYi0+Y291bnRlcltNSUJfQ09VTlRFUl9SWF9DUkNfRVJSXTsKKwkJcHJpdi0+c3RhdHMucnhfZnJhbWVfZXJyb3JzICs9ICh1bnNpZ25lZCBsb25nKSgKKwkJCW1pYi0+Y291bnRlcltNSUJfQ09VTlRFUl9SWF9BTElHTk1FTlRfRVJSXSArCisJCQltaWItPmNvdW50ZXJbTUlCX0NPVU5URVJfUlhfU1lNQk9MX0VSUl0pOworCisJCXByaXYtPnN0YXRzLnR4X3dpbmRvd19lcnJvcnMgKz0gKHVuc2lnbmVkIGxvbmcpCisJCQltaWItPmNvdW50ZXJbTUlCX0NPVU5URVJfVFhfTEFURV9DT0xMSVNJT05dOworCX0KKworCXJldHVybiAmcHJpdi0+c3RhdHM7Cit9CisKKy8qKgorICogbmV0ZGV2X3NldF9tYWNfYWRkcmVzcyAtIHNldCBuZXR3b3JrIGRldmljZSBNQUMgYWRkcmVzcworICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKiBAYWRkcjoJQnVmZmVyIG9mIE1BQyBhZGRyZXNzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBzZXQgdGhlIE1BQyBhZGRyZXNzIG9mIHRoZSBuZXR3b3JrIGRldmljZS4KKyAqCisgKiBSZXR1cm4gMCB0byBpbmRpY2F0ZSBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IG5ldGRldl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisJc3RydWN0IHNvY2thZGRyICptYWMgPSBhZGRyOworCXVpbnQgaW50ZXJydXB0OworCisJaWYgKHByaXYtPnBvcnQuZmlyc3RfcG9ydCA+IDApCisJCWh3X2RlbF9hZGRyKGh3LCBkZXYtPmRldl9hZGRyKTsKKwllbHNlIHsKKwkJaHctPm1hY19vdmVycmlkZSA9IDE7CisJCW1lbWNweShody0+b3ZlcnJpZGVfYWRkciwgbWFjLT5zYV9kYXRhLCBNQUNfQUREUl9MRU4pOworCX0KKworCW1lbWNweShkZXYtPmRldl9hZGRyLCBtYWMtPnNhX2RhdGEsIE1BWF9BRERSX0xFTik7CisKKwlpbnRlcnJ1cHQgPSBod19ibG9ja19pbnRyKGh3KTsKKworCWlmIChwcml2LT5wb3J0LmZpcnN0X3BvcnQgPiAwKQorCQlod19hZGRfYWRkcihodywgZGV2LT5kZXZfYWRkcik7CisJZWxzZQorCQlod19zZXRfYWRkcihodyk7CisJaHdfcmVzdG9yZV9pbnRyKGh3LCBpbnRlcnJ1cHQpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRldl9zZXRfcHJvbWlzY3VvdXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGRldl9wcml2ICpwcml2LAorCXN0cnVjdCBrc3pfaHcgKmh3LCBpbnQgcHJvbWlzY3VvdXMpCit7CisJaWYgKHByb21pc2N1b3VzICE9IHByaXYtPnByb21pc2N1b3VzKSB7CisJCXU4IHByZXZfc3RhdGUgPSBody0+cHJvbWlzY3VvdXM7CisKKwkJaWYgKHByb21pc2N1b3VzKQorCQkJKytody0+cHJvbWlzY3VvdXM7CisJCWVsc2UKKwkJCS0taHctPnByb21pc2N1b3VzOworCQlwcml2LT5wcm9taXNjdW91cyA9IHByb21pc2N1b3VzOworCisJCS8qIFR1cm4gb24vb2ZmIHByb21pc2N1b3VzIG1vZGUuICovCisJCWlmIChody0+cHJvbWlzY3VvdXMgPD0gMSAmJiBwcmV2X3N0YXRlIDw9IDEpCisJCQlod19zZXRfcHJvbWlzY3VvdXMoaHcsIGh3LT5wcm9taXNjdW91cyk7CisKKwkJLyoKKwkJICogUG9ydCBpcyBub3QgaW4gcHJvbWlzY3VvdXMgbW9kZSwgbWVhbmluZyBpdCBpcyByZWxlYXNlZAorCQkgKiBmcm9tIHRoZSBicmlkZ2UuCisJCSAqLworCQlpZiAoKGh3LT5mZWF0dXJlcyAmIFNUUF9TVVBQT1JUKSAmJiAhcHJvbWlzY3VvdXMgJiYKKwkJCQlkZXYtPmJyX3BvcnQpIHsKKwkJCXN0cnVjdCBrc3pfc3dpdGNoICpzdyA9IGh3LT5rc3pfc3dpdGNoOworCQkJaW50IHBvcnQgPSBwcml2LT5wb3J0LmZpcnN0X3BvcnQ7CisKKwkJCXBvcnRfc2V0X3N0cF9zdGF0ZShodywgcG9ydCwgU1RQX1NUQVRFX0RJU0FCTEVEKTsKKwkJCXBvcnQgPSAxIDw8IHBvcnQ7CisJCQlpZiAoc3ctPm1lbWJlciAmIHBvcnQpIHsKKwkJCQlzdy0+bWVtYmVyICY9IH5wb3J0OworCQkJCWJyaWRnZV9jaGFuZ2UoaHcpOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBkZXZfc2V0X211bHRpY2FzdChzdHJ1Y3QgZGV2X3ByaXYgKnByaXYsIHN0cnVjdCBrc3pfaHcgKmh3LAorCWludCBtdWx0aWNhc3QpCit7CisJaWYgKG11bHRpY2FzdCAhPSBwcml2LT5tdWx0aWNhc3QpIHsKKwkJdTggYWxsX211bHRpID0gaHctPmFsbF9tdWx0aTsKKworCQlpZiAobXVsdGljYXN0KQorCQkJKytody0+YWxsX211bHRpOworCQllbHNlCisJCQktLWh3LT5hbGxfbXVsdGk7CisJCXByaXYtPm11bHRpY2FzdCA9IG11bHRpY2FzdDsKKworCQkvKiBUdXJuIG9uL29mZiBhbGwgbXVsdGljYXN0IG1vZGUuICovCisJCWlmIChody0+YWxsX211bHRpIDw9IDEgJiYgYWxsX211bHRpIDw9IDEpCisJCQlod19zZXRfbXVsdGljYXN0KGh3LCBody0+YWxsX211bHRpKTsKKwl9Cit9CisKKy8qKgorICogbmV0ZGV2X3NldF9yeF9tb2RlCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCB0byBzZXQgbXVsdGljYXN0IGFkZHJlc3NlcyBvciBwdXQgdGhlIG5ldHdvcmsgZGV2aWNlCisgKiBpbnRvIHByb21pc2N1b3VzIG1vZGUuCisgKi8KK3N0YXRpYyB2b2lkIG5ldGRldl9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZod19wcml2LT5odzsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX3B0cjsKKwlpbnQgbXVsdGljYXN0ID0gKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpOworCisJZGV2X3NldF9wcm9taXNjdW91cyhkZXYsIHByaXYsIGh3LCAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSk7CisKKwlpZiAoaHdfcHJpdi0+aHcuZGV2X2NvdW50ID4gMSkKKwkJbXVsdGljYXN0IHw9IChkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCk7CisJZGV2X3NldF9tdWx0aWNhc3QocHJpdiwgaHcsIG11bHRpY2FzdCk7CisKKwkvKiBDYW5ub3QgdXNlIGRpZmZlcmVudCBoYXNoZXMgaW4gbXVsdGlwbGUgZGV2aWNlIGludGVyZmFjZXMgbW9kZS4gKi8KKwlpZiAoaHdfcHJpdi0+aHcuZGV2X2NvdW50ID4gMSkKKwkJcmV0dXJuOworCisJaWYgKChkZXYtPmZsYWdzICYgSUZGX01VTFRJQ0FTVCkgJiYgIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CisJCWludCBpID0gMDsKKworCQkvKiBMaXN0IHRvbyBiaWcgdG8gc3VwcG9ydCBzbyB0dXJuIG9uIGFsbCBtdWx0aWNhc3QgbW9kZS4gKi8KKwkJaWYgKGRldi0+bWNfY291bnQgPiBNQVhfTVVMVElDQVNUX0xJU1QpIHsKKwkJCWlmIChNQVhfTVVMVElDQVNUX0xJU1QgIT0gaHctPm11bHRpX2xpc3Rfc2l6ZSkgeworCQkJCWh3LT5tdWx0aV9saXN0X3NpemUgPSBNQVhfTVVMVElDQVNUX0xJU1Q7CisJCQkJKytody0+YWxsX211bHRpOworCQkJCWh3X3NldF9tdWx0aWNhc3QoaHcsIGh3LT5hbGxfbXVsdGkpOworCQkJfQorCQkJcmV0dXJuOworCQl9CisKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfcHRyLCBkZXYpIHsKKwkJCWlmICghKCptY19wdHItPmRtaV9hZGRyICYgMSkpCisJCQkJY29udGludWU7CisJCQlpZiAoaSA+PSBNQVhfTVVMVElDQVNUX0xJU1QpCisJCQkJYnJlYWs7CisJCQltZW1jcHkoaHctPm11bHRpX2xpc3RbaSsrXSwgbWNfcHRyLT5kbWlfYWRkciwKKwkJCQlNQUNfQUREUl9MRU4pOworCQl9CisJCWh3LT5tdWx0aV9saXN0X3NpemUgPSAodTgpIGk7CisJCWh3X3NldF9ncnBfYWRkcihodyk7CisJfSBlbHNlIHsKKwkJaWYgKE1BWF9NVUxUSUNBU1RfTElTVCA9PSBody0+bXVsdGlfbGlzdF9zaXplKSB7CisJCQktLWh3LT5hbGxfbXVsdGk7CisJCQlod19zZXRfbXVsdGljYXN0KGh3LCBody0+YWxsX211bHRpKTsKKwkJfQorCQlody0+bXVsdGlfbGlzdF9zaXplID0gMDsKKwkJaHdfY2xyX211bHRpY2FzdChodyk7CisJfQorfQorCitzdGF0aWMgaW50IG5ldGRldl9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQoreworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZod19wcml2LT5odzsKKwlpbnQgaHdfbXR1OworCisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIENhbm5vdCB1c2UgZGlmZmVyZW50IE1UVSBpbiBtdWx0aXBsZSBkZXZpY2UgaW50ZXJmYWNlcyBtb2RlLiAqLworCWlmIChody0+ZGV2X2NvdW50ID4gMSkKKwkJaWYgKGRldiAhPSBod19wcml2LT5kZXYpCisJCQlyZXR1cm4gMDsKKwlpZiAobmV3X210dSA8IDYwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkZXYtPm10dSAhPSBuZXdfbXR1KSB7CisJCWh3X210dSA9IG5ld19tdHUgKyBFVEhFUk5FVF9IRUFERVJfU0laRSArIDQ7CisJCWlmIChod19tdHUgPiBNQVhfUlhfQlVGX1NJWkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGh3X210dSA+IFJFR1VMQVJfUlhfQlVGX1NJWkUpIHsKKwkJCWh3LT5mZWF0dXJlcyB8PSBSWF9IVUdFX0ZSQU1FOworCQkJaHdfbXR1ID0gTUFYX1JYX0JVRl9TSVpFOworCQl9IGVsc2UgeworCQkJaHctPmZlYXR1cmVzICY9IH5SWF9IVUdFX0ZSQU1FOworCQkJaHdfbXR1ID0gUkVHVUxBUl9SWF9CVUZfU0laRTsKKwkJfQorCQlod19tdHUgPSAoaHdfbXR1ICsgMykgJiB+MzsKKwkJaHdfcHJpdi0+bXR1ID0gaHdfbXR1OworCQlkZXYtPm10dSA9IG5ld19tdHU7CisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqIG5ldGRldl9pb2N0bCAtIEkvTyBjb250cm9sIHByb2Nlc3NpbmcKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICogQGlmcjoJSW50ZXJmYWNlIHJlcXVlc3Qgc3RydWN0dXJlLgorICogQGNtZDoJSS9PIGNvbnRyb2wgY29kZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcHJvY2VzcyBJL08gY29udHJvbCBjYWxscy4KKyAqCisgKiBSZXR1cm4gMCB0byBpbmRpY2F0ZSBzdWNjZXNzLgorICovCitzdGF0aWMgaW50IG5ldGRldl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisJc3RydWN0IGtzel9wb3J0ICpwb3J0ID0gJnByaXYtPnBvcnQ7CisJaW50IHJjOworCWludCByZXN1bHQgPSAwOworCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSA9IGlmX21paShpZnIpOworCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmcHJpdi0+cHJvY19zZW0pKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJLyogYXNzdW1lIHN1Y2Nlc3MgKi8KKwlyYyA9IDA7CisJc3dpdGNoIChjbWQpIHsKKwkvKiBHZXQgYWRkcmVzcyBvZiBNSUkgUEhZIGluIHVzZS4gKi8KKwljYXNlIFNJT0NHTUlJUEhZOgorCQlkYXRhLT5waHlfaWQgPSBwcml2LT5pZDsKKworCQkvKiBGYWxsdGhyb3VnaC4uLiAqLworCisJLyogUmVhZCBNSUkgUEhZIHJlZ2lzdGVyLiAqLworCWNhc2UgU0lPQ0dNSUlSRUc6CisJCWlmIChkYXRhLT5waHlfaWQgIT0gcHJpdi0+aWQgfHwgZGF0YS0+cmVnX251bSA+PSA2KQorCQkJcmVzdWx0ID0gLUVJTzsKKwkJZWxzZQorCQkJaHdfcl9waHkoaHcsIHBvcnQtPmxpbmtlZC0+cG9ydF9pZCwgZGF0YS0+cmVnX251bSwKKwkJCQkmZGF0YS0+dmFsX291dCk7CisJCWJyZWFrOworCisJLyogV3JpdGUgTUlJIFBIWSByZWdpc3Rlci4gKi8KKwljYXNlIFNJT0NTTUlJUkVHOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQlyZXN1bHQgPSAtRVBFUk07CisJCWVsc2UgaWYgKGRhdGEtPnBoeV9pZCAhPSBwcml2LT5pZCB8fCBkYXRhLT5yZWdfbnVtID49IDYpCisJCQlyZXN1bHQgPSAtRUlPOworCQllbHNlCisJCQlod193X3BoeShodywgcG9ydC0+bGlua2VkLT5wb3J0X2lkLCBkYXRhLT5yZWdfbnVtLAorCQkJCWRhdGEtPnZhbF9pbik7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gLUVPUE5PVFNVUFA7CisJfQorCisJdXAoJnByaXYtPnByb2Nfc2VtKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBNSUkgc3VwcG9ydAorICovCisKKy8qKgorICogbWRpb19yZWFkIC0gcmVhZCBQSFkgcmVnaXN0ZXIKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICogQHBoeV9pZDoJVGhlIFBIWSBpZC4KKyAqIEByZWdfbnVtOglUaGUgcmVnaXN0ZXIgbnVtYmVyLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgUEhZIHJlZ2lzdGVyIHZhbHVlLgorICoKKyAqIFJldHVybiB0aGUgcmVnaXN0ZXIgdmFsdWUuCisgKi8KK3N0YXRpYyBpbnQgbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCByZWdfbnVtKQoreworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGtzel9wb3J0ICpwb3J0ID0gJnByaXYtPnBvcnQ7CisJc3RydWN0IGtzel9odyAqaHcgPSBwb3J0LT5odzsKKwl1MTYgdmFsX291dDsKKworCWh3X3JfcGh5KGh3LCBwb3J0LT5saW5rZWQtPnBvcnRfaWQsIHJlZ19udW0gPDwgMSwgJnZhbF9vdXQpOworCXJldHVybiB2YWxfb3V0OworfQorCisvKioKKyAqIG1kaW9fd3JpdGUgLSBzZXQgUEhZIHJlZ2lzdGVyCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqIEBwaHlfaWQ6CVRoZSBQSFkgaWQuCisgKiBAcmVnX251bToJVGhlIHJlZ2lzdGVyIG51bWJlci4KKyAqIEB2YWw6CVRoZSByZWdpc3RlciB2YWx1ZS4KKyAqCisgKiBUaGlzIHByb2NlZHVyZSBzZXRzIHRoZSBQSFkgcmVnaXN0ZXIgdmFsdWUuCisgKi8KK3N0YXRpYyB2b2lkIG1kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IHJlZ19udW0sIGludCB2YWwpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQgPSAmcHJpdi0+cG9ydDsKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9IHBvcnQtPmh3OworCWludCBpOworCWludCBwaTsKKworCWZvciAoaSA9IDAsIHBpID0gcG9ydC0+Zmlyc3RfcG9ydDsgaSA8IHBvcnQtPnBvcnRfY250OyBpKyssIHBpKyspCisJCWh3X3dfcGh5KGh3LCBwaSwgcmVnX251bSA8PCAxLCB2YWwpOworfQorCisvKgorICogZXRodG9vbCBzdXBwb3J0CisgKi8KKworI2RlZmluZSBFRVBST01fU0laRQkJCTB4NDAKKworc3RhdGljIHUxNiBlZXByb21fZGF0YVtFRVBST01fU0laRV0gPSB7IDAgfTsKKworI2RlZmluZSBBRFZFUlRJU0VEX0FMTAkJCVwKKwkoQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYgfAlcCisJQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfAlcCisJQURWRVJUSVNFRF8xMDBiYXNlVF9IYWxmIHwJXAorCUFEVkVSVElTRURfMTAwYmFzZVRfRnVsbCkKKworLyogVGhlc2UgZnVuY3Rpb25zIHVzZSB0aGUgTUlJIGZ1bmN0aW9ucyBpbiBtaWkuYy4gKi8KKworLyoqCisgKiBuZXRkZXZfZ2V0X3NldHRpbmdzIC0gZ2V0IG5ldHdvcmsgZGV2aWNlIHNldHRpbmdzCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqIEBjbWQ6CUV0aHRvb2wgY29tbWFuZC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHF1ZXJpZXMgdGhlIFBIWSBhbmQgcmV0dXJucyBpdHMgc3RhdGUgaW4gdGhlIGV0aHRvb2wgY29tbWFuZC4KKyAqCisgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsOyBvdGhlcndpc2UgYW4gZXJyb3IgY29kZS4KKyAqLworc3RhdGljIGludCBuZXRkZXZfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQoreworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gcHJpdi0+YWRhcHRlcjsKKworCW11dGV4X2xvY2soJmh3X3ByaXYtPmxvY2spOworCW1paV9ldGh0b29sX2dzZXQoJnByaXYtPm1paV9pZiwgY21kKTsKKwljbWQtPmFkdmVydGlzaW5nIHw9IFNVUFBPUlRFRF9UUDsKKwltdXRleF91bmxvY2soJmh3X3ByaXYtPmxvY2spOworCisJLyogU2F2ZSBhZHZlcnRpc2VkIHNldHRpbmdzIGZvciB3b3JrYXJvdW5kIGluIG5leHQgZnVuY3Rpb24uICovCisJcHJpdi0+YWR2ZXJ0aXNpbmcgPSBjbWQtPmFkdmVydGlzaW5nOworCXJldHVybiAwOworfQorCisvKioKKyAqIG5ldGRldl9zZXRfc2V0dGluZ3MgLSBzZXQgbmV0d29yayBkZXZpY2Ugc2V0dGluZ3MKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICogQGNtZDoJRXRodG9vbCBjb21tYW5kLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgUEhZIGFjY29yZGluZyB0byB0aGUgZXRodG9vbCBjb21tYW5kLgorICoKKyAqIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWw7IG90aGVyd2lzZSBhbiBlcnJvciBjb2RlLgorICovCitzdGF0aWMgaW50IG5ldGRldl9zZXRfc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICpjbWQpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBrc3pfcG9ydCAqcG9ydCA9ICZwcml2LT5wb3J0OworCWludCByYzsKKworCS8qCisJICogZXRodG9vbCB1dGlsaXR5IGRvZXMgbm90IGNoYW5nZSBhZHZlcnRpc2VkIHNldHRpbmcgaWYgYXV0bworCSAqIG5lZ290aWF0aW9uIGlzIG5vdCBzcGVjaWZpZWQgZXhwbGljaXRseS4KKwkgKi8KKwlpZiAoY21kLT5hdXRvbmVnICYmIHByaXYtPmFkdmVydGlzaW5nID09IGNtZC0+YWR2ZXJ0aXNpbmcpIHsKKwkJY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX0FMTDsKKwkJaWYgKDEwID09IGNtZC0+c3BlZWQpCisJCQljbWQtPmFkdmVydGlzaW5nICY9CisJCQkJfihBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAorCQkJCUFEVkVSVElTRURfMTAwYmFzZVRfSGFsZik7CisJCWVsc2UgaWYgKDEwMCA9PSBjbWQtPnNwZWVkKQorCQkJY21kLT5hZHZlcnRpc2luZyAmPQorCQkJCX4oQURWRVJUSVNFRF8xMGJhc2VUX0Z1bGwgfAorCQkJCUFEVkVSVElTRURfMTBiYXNlVF9IYWxmKTsKKwkJaWYgKDAgPT0gY21kLT5kdXBsZXgpCisJCQljbWQtPmFkdmVydGlzaW5nICY9CisJCQkJfihBRFZFUlRJU0VEXzEwMGJhc2VUX0Z1bGwgfAorCQkJCUFEVkVSVElTRURfMTBiYXNlVF9GdWxsKTsKKwkJZWxzZSBpZiAoMSA9PSBjbWQtPmR1cGxleCkKKwkJCWNtZC0+YWR2ZXJ0aXNpbmcgJj0KKwkJCQl+KEFEVkVSVElTRURfMTAwYmFzZVRfSGFsZiB8CisJCQkJQURWRVJUSVNFRF8xMGJhc2VUX0hhbGYpOworCX0KKwltdXRleF9sb2NrKCZod19wcml2LT5sb2NrKTsKKwlpZiAoY21kLT5hdXRvbmVnICYmCisJCQkoY21kLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfQUxMKSA9PQorCQkJQURWRVJUSVNFRF9BTEwpIHsKKwkJcG9ydC0+ZHVwbGV4ID0gMDsKKwkJcG9ydC0+c3BlZWQgPSAwOworCQlwb3J0LT5mb3JjZV9saW5rID0gMDsKKwl9IGVsc2UgeworCQlwb3J0LT5kdXBsZXggPSBjbWQtPmR1cGxleCArIDE7CisJCWlmIChjbWQtPnNwZWVkICE9IDEwMDApCisJCQlwb3J0LT5zcGVlZCA9IGNtZC0+c3BlZWQ7CisJCWlmIChjbWQtPmF1dG9uZWcpCisJCQlwb3J0LT5mb3JjZV9saW5rID0gMDsKKwkJZWxzZQorCQkJcG9ydC0+Zm9yY2VfbGluayA9IDE7CisJfQorCXJjID0gbWlpX2V0aHRvb2xfc3NldCgmcHJpdi0+bWlpX2lmLCBjbWQpOworCW11dGV4X3VubG9jaygmaHdfcHJpdi0+bG9jayk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIG5ldGRldl9ud2F5X3Jlc2V0IC0gcmVzdGFydCBhdXRvLW5lZ290aWF0aW9uCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJlc3RhcnRzIHRoZSBQSFkgZm9yIGF1dG8tbmVnb3RpYXRpb24uCisgKgorICogUmV0dXJuIDAgaWYgc3VjY2Vzc2Z1bDsgb3RoZXJ3aXNlIGFuIGVycm9yIGNvZGUuCisgKi8KK3N0YXRpYyBpbnQgbmV0ZGV2X253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJaW50IHJjOworCisJbXV0ZXhfbG9jaygmaHdfcHJpdi0+bG9jayk7CisJcmMgPSBtaWlfbndheV9yZXN0YXJ0KCZwcml2LT5taWlfaWYpOworCW11dGV4X3VubG9jaygmaHdfcHJpdi0+bG9jayk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIG5ldGRldl9nZXRfbGluayAtIGdldCBuZXR3b3JrIGRldmljZSBsaW5rIHN0YXR1cworICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBsaW5rIHN0YXR1cyBmcm9tIHRoZSBQSFkuCisgKgorICogUmV0dXJuIHRydWUgaWYgUEhZIGlzIGxpbmtlZCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLgorICovCitzdGF0aWMgdTMyIG5ldGRldl9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJjOworCisJcmMgPSBtaWlfbGlua19vaygmcHJpdi0+bWlpX2lmKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qKgorICogbmV0ZGV2X2dldF9kcnZpbmZvIC0gZ2V0IG5ldHdvcmsgZHJpdmVyIGluZm9ybWF0aW9uCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqIEBpbmZvOglFdGh0b29sIGRyaXZlciBpbmZvIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgcHJvY2VkdXJlIHJldHVybnMgdGhlIGRyaXZlciBpbmZvcm1hdGlvbi4KKyAqLworc3RhdGljIHZvaWQgbmV0ZGV2X2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisKKwlzdHJjcHkoaW5mby0+ZHJpdmVyLCBEUlZfTkFNRSk7CisJc3RyY3B5KGluZm8tPnZlcnNpb24sIERSVl9WRVJTSU9OKTsKKwlzdHJjcHkoaW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKGh3X3ByaXYtPnBkZXYpKTsKK30KKworLyoqCisgKiBuZXRkZXZfZ2V0X3JlZ3NfbGVuIC0gZ2V0IGxlbmd0aCBvZiByZWdpc3RlciBkdW1wCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgcmVnaXN0ZXIgZHVtcC4KKyAqCisgKiBSZXR1cm4gbGVuZ3RoIG9mIHRoZSByZWdpc3RlciBkdW1wLgorICovCitzdGF0aWMgc3RydWN0IGh3X3JlZ3MgeworCWludCBzdGFydDsKKwlpbnQgZW5kOworfSBod19yZWdzX3JhbmdlW10gPSB7CisJeyBLU19ETUFfVFhfQ1RSTCwJS1M4ODRYX0lOVEVSUlVQVFNfU1RBVFVTIH0sCisJeyBLU19BRERfQUREUl8wX0xPLAlLU19BRERfQUREUl9GX0hJIH0sCisJeyBLUzg4NFhfQUREUl8wX09GRlNFVCwJS1M4ODQxX1dPTF9GUkFNRV9CWVRFMl9PRkZTRVQgfSwKKwl7IEtTODg0WF9TSURFUl9QLAlLUzg4NDJfU0dDUjdfUCB9LAorCXsgS1M4ODQyX01BQ0FSMV9QLAlLUzg4NDJfVE9TUjhfUCB9LAorCXsgS1M4ODRYX1AxTUJDUl9QLAlLUzg4NDJfUDNFUkNSX1AgfSwKKwl7IDAsIDAgfQorfTsKKworc3RhdGljIGludCBuZXRkZXZfZ2V0X3JlZ3NfbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGh3X3JlZ3MgKnJhbmdlID0gaHdfcmVnc19yYW5nZTsKKwlpbnQgcmVnc19sZW4gPSAweDEwICogc2l6ZW9mKHUzMik7CisKKwl3aGlsZSAocmFuZ2UtPmVuZCA+IHJhbmdlLT5zdGFydCkgeworCQlyZWdzX2xlbiArPSAocmFuZ2UtPmVuZCAtIHJhbmdlLT5zdGFydCArIDMpIC8gNCAqIDQ7CisJCXJhbmdlKys7CisJfQorCXJldHVybiByZWdzX2xlbjsKK30KKworLyoqCisgKiBuZXRkZXZfZ2V0X3JlZ3MgLSBnZXQgcmVnaXN0ZXIgZHVtcAorICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKiBAcmVnczoJRXRodG9vbCByZWdpc3RlcnMgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAcHRyOglCdWZmZXIgdG8gc3RvcmUgdGhlIHJlZ2lzdGVyIHZhbHVlcy4KKyAqCisgKiBUaGlzIHByb2NlZHVyZSBkdW1wcyB0aGUgcmVnaXN0ZXIgdmFsdWVzIGluIHRoZSBwcm92aWRlZCBidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkIG5ldGRldl9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLAorCXZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisJaW50ICpidWYgPSAoaW50ICopIHB0cjsKKwlzdHJ1Y3QgaHdfcmVncyAqcmFuZ2UgPSBod19yZWdzX3JhbmdlOworCWludCBsZW47CisKKwltdXRleF9sb2NrKCZod19wcml2LT5sb2NrKTsKKwlyZWdzLT52ZXJzaW9uID0gMDsKKwlmb3IgKGxlbiA9IDA7IGxlbiA8IDB4NDA7IGxlbiArPSA0KSB7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChod19wcml2LT5wZGV2LCBsZW4sIGJ1Zik7CisJCWJ1ZisrOworCX0KKwl3aGlsZSAocmFuZ2UtPmVuZCA+IHJhbmdlLT5zdGFydCkgeworCQlmb3IgKGxlbiA9IHJhbmdlLT5zdGFydDsgbGVuIDwgcmFuZ2UtPmVuZDsgbGVuICs9IDQpIHsKKwkJCSpidWYgPSByZWFkbChody0+aW8gKyBsZW4pOworCQkJYnVmKys7CisJCX0KKwkJcmFuZ2UrKzsKKwl9CisJbXV0ZXhfdW5sb2NrKCZod19wcml2LT5sb2NrKTsKK30KKworI2RlZmluZSBXT0xfU1VQUE9SVAkJCVwKKwkoV0FLRV9QSFkgfCBXQUtFX01BR0lDIHwJXAorCVdBS0VfVUNBU1QgfCBXQUtFX01DQVNUIHwJXAorCVdBS0VfQkNBU1QgfCBXQUtFX0FSUCkKKworLyoqCisgKiBuZXRkZXZfZ2V0X3dvbCAtIGdldCBXYWtlLW9uLUxBTiBzdXBwb3J0CisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqIEB3b2w6CUV0aHRvb2wgV2FrZS1vbi1MQU4gZGF0YSBzdHJ1Y3R1cmUuCisgKgorICogVGhpcyBwcm9jZWR1cmUgcmV0dXJucyBXYWtlLW9uLUxBTiBzdXBwb3J0LgorICovCitzdGF0aWMgdm9pZCBuZXRkZXZfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCXN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisKKwl3b2wtPnN1cHBvcnRlZCA9IGh3X3ByaXYtPndvbF9zdXBwb3J0OworCXdvbC0+d29sb3B0cyA9IGh3X3ByaXYtPndvbF9lbmFibGU7CisJbWVtc2V0KCZ3b2wtPnNvcGFzcywgMCwgc2l6ZW9mKHdvbC0+c29wYXNzKSk7Cit9CisKKy8qKgorICogbmV0ZGV2X3NldF93b2wgLSBzZXQgV2FrZS1vbi1MQU4gc3VwcG9ydAorICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKiBAd29sOglFdGh0b29sIFdha2Utb24tTEFOIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyBXYWtlLW9uLUxBTiBzdXBwb3J0LgorICoKKyAqIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWw7IG90aGVyd2lzZSBhbiBlcnJvciBjb2RlLgorICovCitzdGF0aWMgaW50IG5ldGRldl9zZXRfd29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gcHJpdi0+YWRhcHRlcjsKKworCS8qIE5lZWQgdG8gZmluZCBhIHdheSB0byByZXRyaWV2ZSB0aGUgZGV2aWNlIElQIGFkZHJlc3MuICovCisJdTggbmV0X2FkZHJbXSA9IHsgMTkyLCAxNjgsIDEsIDEgfTsKKworCWlmICh3b2wtPndvbG9wdHMgJiB+aHdfcHJpdi0+d29sX3N1cHBvcnQpCisJCXJldHVybiAtRUlOVkFMOworCisJaHdfcHJpdi0+d29sX2VuYWJsZSA9IHdvbC0+d29sb3B0czsKKworCS8qIExpbmsgd2FrZXVwIGNhbm5vdCByZWFsbHkgYmUgZGlzYWJsZWQuICovCisJaWYgKHdvbC0+d29sb3B0cykKKwkJaHdfcHJpdi0+d29sX2VuYWJsZSB8PSBXQUtFX1BIWTsKKwlod19lbmFibGVfd29sKCZod19wcml2LT5odywgaHdfcHJpdi0+d29sX2VuYWJsZSwgbmV0X2FkZHIpOworCXJldHVybiAwOworfQorCisvKioKKyAqIG5ldGRldl9nZXRfbXNnbGV2ZWwgLSBnZXQgZGVidWcgbWVzc2FnZSBsZXZlbAorICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGN1cnJlbnQgZGVidWcgbWVzc2FnZSBsZXZlbC4KKyAqCisgKiBSZXR1cm4gY3VycmVudCBkZWJ1ZyBtZXNzYWdlIGZsYWdzLgorICovCitzdGF0aWMgdTMyIG5ldGRldl9nZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcmV0dXJuIHByaXYtPm1zZ19lbmFibGU7Cit9CisKKy8qKgorICogbmV0ZGV2X3NldF9tc2dsZXZlbCAtIHNldCBkZWJ1ZyBtZXNzYWdlIGxldmVsCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqIEB2YWx1ZToJRGVidWcgbWVzc2FnZSBmbGFncy4KKyAqCisgKiBUaGlzIHByb2NlZHVyZSBzZXRzIGRlYnVnIG1lc3NhZ2UgbGV2ZWwuCisgKi8KK3N0YXRpYyB2b2lkIG5ldGRldl9zZXRfbXNnbGV2ZWwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHZhbHVlKQoreworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisKKwlwcml2LT5tc2dfZW5hYmxlID0gdmFsdWU7Cit9CisKKy8qKgorICogbmV0ZGV2X2dldF9lZXByb21fbGVuIC0gZ2V0IEVFUFJPTSBsZW5ndGgKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbGVuZ3RoIG9mIHRoZSBFRVBST00uCisgKgorICogUmV0dXJuIGxlbmd0aCBvZiB0aGUgRUVQUk9NLgorICovCitzdGF0aWMgaW50IG5ldGRldl9nZXRfZWVwcm9tX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiBFRVBST01fU0laRSAqIDI7Cit9CisKKy8qKgorICogbmV0ZGV2X2dldF9lZXByb20gLSBnZXQgRUVQUk9NIGRhdGEKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICogQGVlcHJvbToJRXRodG9vbCBFRVBST00gZGF0YSBzdHJ1Y3R1cmUuCisgKiBAZGF0YToJQnVmZmVyIHRvIHN0b3JlIHRoZSBFRVBST00gZGF0YS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGR1bXBzIHRoZSBFRVBST00gZGF0YSBpbiB0aGUgcHJvdmlkZWQgYnVmZmVyLgorICoKKyAqIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWw7IG90aGVyd2lzZSBhbiBlcnJvciBjb2RlLgorICovCisjZGVmaW5lIEVFUFJPTV9NQUdJQwkJCTB4MTBBMTg4NDIKKworc3RhdGljIGludCBuZXRkZXZfZ2V0X2VlcHJvbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCXN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLCB1OCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJdTggKmVlcHJvbV9ieXRlID0gKHU4ICopIGVlcHJvbV9kYXRhOworCWludCBpOworCWludCBsZW47CisKKwlsZW4gPSAoZWVwcm9tLT5vZmZzZXQgKyBlZXByb20tPmxlbiArIDEpIC8gMjsKKwlmb3IgKGkgPSBlZXByb20tPm9mZnNldCAvIDI7IGkgPCBsZW47IGkrKykKKwkJZWVwcm9tX2RhdGFbaV0gPSBlZXByb21fcmVhZCgmaHdfcHJpdi0+aHcsIGkpOworCWVlcHJvbS0+bWFnaWMgPSBFRVBST01fTUFHSUM7CisJbWVtY3B5KGRhdGEsICZlZXByb21fYnl0ZVtlZXByb20tPm9mZnNldF0sIGVlcHJvbS0+bGVuKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG5ldGRldl9zZXRfZWVwcm9tIC0gd3JpdGUgRUVQUk9NIGRhdGEKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICogQGVlcHJvbToJRXRodG9vbCBFRVBST00gZGF0YSBzdHJ1Y3R1cmUuCisgKiBAZGF0YToJRGF0YSBidWZmZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiBtb2RpZmllcyB0aGUgRUVQUk9NIGRhdGEgb25lIGJ5dGUgYXQgYSB0aW1lLgorICoKKyAqIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWw7IG90aGVyd2lzZSBhbiBlcnJvciBjb2RlLgorICovCitzdGF0aWMgaW50IG5ldGRldl9zZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpkYXRhKQoreworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gcHJpdi0+YWRhcHRlcjsKKwl1MTYgZWVwcm9tX3dvcmRbRUVQUk9NX1NJWkVdOworCXU4ICplZXByb21fYnl0ZSA9ICh1OCAqKSBlZXByb21fd29yZDsKKwlpbnQgaTsKKwlpbnQgbGVuOworCisJaWYgKGVlcHJvbS0+bWFnaWMgIT0gRUVQUk9NX01BR0lDKQorCQlyZXR1cm4gMTsKKworCWxlbiA9IChlZXByb20tPm9mZnNldCArIGVlcHJvbS0+bGVuICsgMSkgLyAyOworCWZvciAoaSA9IGVlcHJvbS0+b2Zmc2V0IC8gMjsgaSA8IGxlbjsgaSsrKQorCQllZXByb21fZGF0YVtpXSA9IGVlcHJvbV9yZWFkKCZod19wcml2LT5odywgaSk7CisJbWVtY3B5KGVlcHJvbV93b3JkLCBlZXByb21fZGF0YSwgRUVQUk9NX1NJWkUgKiAyKTsKKwltZW1jcHkoJmVlcHJvbV9ieXRlW2VlcHJvbS0+b2Zmc2V0XSwgZGF0YSwgZWVwcm9tLT5sZW4pOworCWZvciAoaSA9IDA7IGkgPCBFRVBST01fU0laRTsgaSsrKQorCQlpZiAoZWVwcm9tX3dvcmRbaV0gIT0gZWVwcm9tX2RhdGFbaV0pIHsKKwkJCWVlcHJvbV9kYXRhW2ldID0gZWVwcm9tX3dvcmRbaV07CisJCQllZXByb21fd3JpdGUoJmh3X3ByaXYtPmh3LCBpLCBlZXByb21fZGF0YVtpXSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogbmV0ZGV2X2dldF9wYXVzZXBhcmFtIC0gZ2V0IGZsb3cgY29udHJvbCBwYXJhbWV0ZXJzCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqIEBwYXVzZToJRXRodG9vbCBQQVVTRSBzZXR0aW5ncyBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHByb2NlZHVyZSByZXR1cm5zIHRoZSBQQVVTRSBjb250cm9sIGZsb3cgc2V0dGluZ3MuCisgKi8KK3N0YXRpYyB2b2lkIG5ldGRldl9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCXN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKQoreworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZod19wcml2LT5odzsKKworCXBhdXNlLT5hdXRvbmVnID0gKGh3LT5vdmVycmlkZXMgJiBQQVVTRV9GTE9XX0NUUkwpID8gMCA6IDE7CisJaWYgKCFody0+a3N6X3N3aXRjaCkgeworCQlwYXVzZS0+cnhfcGF1c2UgPQorCQkJKGh3LT5yeF9jZmcgJiBETUFfUlhfRkxPV19FTkFCTEUpID8gMSA6IDA7CisJCXBhdXNlLT50eF9wYXVzZSA9CisJCQkoaHctPnR4X2NmZyAmIERNQV9UWF9GTE9XX0VOQUJMRSkgPyAxIDogMDsKKwl9IGVsc2UgeworCQlwYXVzZS0+cnhfcGF1c2UgPQorCQkJKHN3X2NoayhodywgS1M4ODQyX1NXSVRDSF9DVFJMXzFfT0ZGU0VULAorCQkJCVNXSVRDSF9SWF9GTE9XX0NUUkwpKSA/IDEgOiAwOworCQlwYXVzZS0+dHhfcGF1c2UgPQorCQkJKHN3X2NoayhodywgS1M4ODQyX1NXSVRDSF9DVFJMXzFfT0ZGU0VULAorCQkJCVNXSVRDSF9UWF9GTE9XX0NUUkwpKSA/IDEgOiAwOworCX0KK30KKworLyoqCisgKiBuZXRkZXZfc2V0X3BhdXNlcGFyYW0gLSBzZXQgZmxvdyBjb250cm9sIHBhcmFtZXRlcnMKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICogQHBhdXNlOglFdGh0b29sIFBBVVNFIHNldHRpbmdzIGRhdGEgc3RydWN0dXJlLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgUEFVU0UgY29udHJvbCBmbG93IHNldHRpbmdzLgorICogTm90IGltcGxlbWVudGVkIHlldC4KKyAqCisgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsOyBvdGhlcndpc2UgYW4gZXJyb3IgY29kZS4KKyAqLworc3RhdGljIGludCBuZXRkZXZfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpwYXVzZSkKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisJc3RydWN0IGtzel9wb3J0ICpwb3J0ID0gJnByaXYtPnBvcnQ7CisKKwltdXRleF9sb2NrKCZod19wcml2LT5sb2NrKTsKKwlpZiAocGF1c2UtPmF1dG9uZWcpIHsKKwkJaWYgKCFwYXVzZS0+cnhfcGF1c2UgJiYgIXBhdXNlLT50eF9wYXVzZSkKKwkJCXBvcnQtPmZsb3dfY3RybCA9IFBIWV9OT19GTE9XX0NUUkw7CisJCWVsc2UKKwkJCXBvcnQtPmZsb3dfY3RybCA9IFBIWV9GTE9XX0NUUkw7CisJCWh3LT5vdmVycmlkZXMgJj0gflBBVVNFX0ZMT1dfQ1RSTDsKKwkJcG9ydC0+Zm9yY2VfbGluayA9IDA7CisJCWlmIChody0+a3N6X3N3aXRjaCkgeworCQkJc3dfY2ZnKGh3LCBLUzg4NDJfU1dJVENIX0NUUkxfMV9PRkZTRVQsCisJCQkJU1dJVENIX1JYX0ZMT1dfQ1RSTCwgMSk7CisJCQlzd19jZmcoaHcsIEtTODg0Ml9TV0lUQ0hfQ1RSTF8xX09GRlNFVCwKKwkJCQlTV0lUQ0hfVFhfRkxPV19DVFJMLCAxKTsKKwkJfQorCQlwb3J0X3NldF9saW5rX3NwZWVkKHBvcnQpOworCX0gZWxzZSB7CisJCWh3LT5vdmVycmlkZXMgfD0gUEFVU0VfRkxPV19DVFJMOworCQlpZiAoaHctPmtzel9zd2l0Y2gpIHsKKwkJCXN3X2NmZyhodywgS1M4ODQyX1NXSVRDSF9DVFJMXzFfT0ZGU0VULAorCQkJCVNXSVRDSF9SWF9GTE9XX0NUUkwsIHBhdXNlLT5yeF9wYXVzZSk7CisJCQlzd19jZmcoaHcsIEtTODg0Ml9TV0lUQ0hfQ1RSTF8xX09GRlNFVCwKKwkJCQlTV0lUQ0hfVFhfRkxPV19DVFJMLCBwYXVzZS0+dHhfcGF1c2UpOworCQl9IGVsc2UKKwkJCXNldF9mbG93X2N0cmwoaHcsIHBhdXNlLT5yeF9wYXVzZSwgcGF1c2UtPnR4X3BhdXNlKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZod19wcml2LT5sb2NrKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIG5ldGRldl9nZXRfcmluZ3BhcmFtIC0gZ2V0IHR4L3J4IHJpbmcgcGFyYW1ldGVycworICogQGRldjoJTmV0d29yayBkZXZpY2UuCisgKiBAcGF1c2U6CUV0aHRvb2wgUklORyBzZXR0aW5ncyBkYXRhIHN0cnVjdHVyZS4KKyAqCisgKiBUaGlzIHByb2NlZHVyZSByZXR1cm5zIHRoZSBUWC9SWCByaW5nIHNldHRpbmdzLgorICovCitzdGF0aWMgdm9pZCBuZXRkZXZfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCXN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZykKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisKKwlyaW5nLT50eF9tYXhfcGVuZGluZyA9ICgxIDw8IDkpOworCXJpbmctPnR4X3BlbmRpbmcgPSBody0+dHhfZGVzY19pbmZvLmFsbG9jOworCXJpbmctPnJ4X21heF9wZW5kaW5nID0gKDEgPDwgOSk7CisJcmluZy0+cnhfcGVuZGluZyA9IGh3LT5yeF9kZXNjX2luZm8uYWxsb2M7Cit9CisKKyNkZWZpbmUgU1RBVFNfTEVOCQkJKFRPVEFMX1BPUlRfQ09VTlRFUl9OVU0pCisKK3N0YXRpYyBzdHJ1Y3QgeworCWNoYXIgc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07Cit9IGV0aHRvb2xfc3RhdHNfa2V5c1tTVEFUU19MRU5dID0geworCXsgInJ4X2xvX3ByaW9yaXR5X29jdGV0cyIgfSwKKwl7ICJyeF9oaV9wcmlvcml0eV9vY3RldHMiIH0sCisJeyAicnhfdW5kZXJzaXplX3BhY2tldHMiIH0sCisJeyAicnhfZnJhZ21lbnRzIiB9LAorCXsgInJ4X292ZXJzaXplX3BhY2tldHMiIH0sCisJeyAicnhfamFiYmVycyIgfSwKKwl7ICJyeF9zeW1ib2xfZXJyb3JzIiB9LAorCXsgInJ4X2NyY19lcnJvcnMiIH0sCisJeyAicnhfYWxpZ25fZXJyb3JzIiB9LAorCXsgInJ4X21hY19jdHJsX3BhY2tldHMiIH0sCisJeyAicnhfcGF1c2VfcGFja2V0cyIgfSwKKwl7ICJyeF9iY2FzdF9wYWNrZXRzIiB9LAorCXsgInJ4X21jYXN0X3BhY2tldHMiIH0sCisJeyAicnhfdWNhc3RfcGFja2V0cyIgfSwKKwl7ICJyeF82NF9vcl9sZXNzX29jdGV0X3BhY2tldHMiIH0sCisJeyAicnhfNjVfdG9fMTI3X29jdGV0X3BhY2tldHMiIH0sCisJeyAicnhfMTI4X3RvXzI1NV9vY3RldF9wYWNrZXRzIiB9LAorCXsgInJ4XzI1Nl90b181MTFfb2N0ZXRfcGFja2V0cyIgfSwKKwl7ICJyeF81MTJfdG9fMTAyM19vY3RldF9wYWNrZXRzIiB9LAorCXsgInJ4XzEwMjRfdG9fMTUyMl9vY3RldF9wYWNrZXRzIiB9LAorCisJeyAidHhfbG9fcHJpb3JpdHlfb2N0ZXRzIiB9LAorCXsgInR4X2hpX3ByaW9yaXR5X29jdGV0cyIgfSwKKwl7ICJ0eF9sYXRlX2NvbGxpc2lvbnMiIH0sCisJeyAidHhfcGF1c2VfcGFja2V0cyIgfSwKKwl7ICJ0eF9iY2FzdF9wYWNrZXRzIiB9LAorCXsgInR4X21jYXN0X3BhY2tldHMiIH0sCisJeyAidHhfdWNhc3RfcGFja2V0cyIgfSwKKwl7ICJ0eF9kZWZlcnJlZCIgfSwKKwl7ICJ0eF90b3RhbF9jb2xsaXNpb25zIiB9LAorCXsgInR4X2V4Y2Vzc2l2ZV9jb2xsaXNpb25zIiB9LAorCXsgInR4X3NpbmdsZV9jb2xsaXNpb25zIiB9LAorCXsgInR4X211bHRfY29sbGlzaW9ucyIgfSwKKworCXsgInJ4X2Rpc2NhcmRzIiB9LAorCXsgInR4X2Rpc2NhcmRzIiB9LAorfTsKKworLyoqCisgKiBuZXRkZXZfZ2V0X3N0cmluZ3MgLSBnZXQgc3RhdGlzdGljcyBpZGVudGl0eSBzdHJpbmdzCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqIEBzdHJpbmdzZXQ6CVN0cmluZyBzZXQgaWRlbnRpZmllci4KKyAqIEBidWY6CUJ1ZmZlciB0byBzdG9yZSB0aGUgc3RyaW5ncy4KKyAqCisgKiBUaGlzIHByb2NlZHVyZSByZXR1cm5zIHRoZSBzdHJpbmdzIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHN0YXRpc3RpY3MuCisgKi8KK3N0YXRpYyB2b2lkIG5ldGRldl9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqYnVmKQoreworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZod19wcml2LT5odzsKKworCWlmIChFVEhfU1NfU1RBVFMgPT0gc3RyaW5nc2V0KQorCQltZW1jcHkoYnVmLCAmZXRodG9vbF9zdGF0c19rZXlzLAorCQkJRVRIX0dTVFJJTkdfTEVOICogaHctPm1pYl9jbnQpOworfQorCisvKioKKyAqIG5ldGRldl9nZXRfc3NldF9jb3VudCAtIGdldCBzdGF0aXN0aWNzIHNpemUKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICogQHNzZXQ6CVRoZSBzdGF0aXN0aWNzIHNldCBudW1iZXIuCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBzdGF0aXN0aWNzIHRvIGJlIHJlcG9ydGVkLgorICoKKyAqIFJldHVybiBzaXplIG9mIHRoZSBzdGF0aXN0aWNzIHRvIGJlIHJlcG9ydGVkLgorICovCitzdGF0aWMgaW50IG5ldGRldl9nZXRfc3NldF9jb3VudChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc3NldCkKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisKKwlzd2l0Y2ggKHNzZXQpIHsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJcmV0dXJuIGh3LT5taWJfY250OworCWRlZmF1bHQ6CisJCXJldHVybiAtRU9QTk9UU1VQUDsKKwl9Cit9CisKKy8qKgorICogbmV0ZGV2X2dldF9ldGh0b29sX3N0YXRzIC0gZ2V0IG5ldHdvcmsgZGV2aWNlIHN0YXRpc3RpY3MKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICogQHN0YXRzOglFdGh0b29sIHN0YXRpc3RpY3MgZGF0YSBzdHJ1Y3R1cmUuCisgKiBAZGF0YToJQnVmZmVyIHRvIHN0b3JlIHRoZSBzdGF0aXN0aWNzLgorICoKKyAqIFRoaXMgcHJvY2VkdXJlIHJldHVybnMgdGhlIHN0YXRpc3RpY3MuCisgKi8KK3N0YXRpYyB2b2lkIG5ldGRldl9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCXN0cnVjdCBldGh0b29sX3N0YXRzICpzdGF0cywgdTY0ICpkYXRhKQoreworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gcHJpdi0+YWRhcHRlcjsKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZod19wcml2LT5odzsKKwlzdHJ1Y3Qga3N6X3BvcnQgKnBvcnQgPSAmcHJpdi0+cG9ydDsKKwlpbnQgbl9zdGF0cyA9IHN0YXRzLT5uX3N0YXRzOworCWludCBpOworCWludCBuOworCWludCBwOworCWludCByYzsKKwl1NjQgY291bnRlcltUT1RBTF9QT1JUX0NPVU5URVJfTlVNXTsKKworCW11dGV4X2xvY2soJmh3X3ByaXYtPmxvY2spOworCW4gPSBTV0lUQ0hfUE9SVF9OVU07CisJZm9yIChpID0gMCwgcCA9IHBvcnQtPmZpcnN0X3BvcnQ7IGkgPCBwb3J0LT5taWJfcG9ydF9jbnQ7IGkrKywgcCsrKSB7CisJCWlmIChtZWRpYV9jb25uZWN0ZWQgPT0gaHctPnBvcnRfbWliW3BdLnN0YXRlKSB7CisJCQlod19wcml2LT5jb3VudGVyW3BdLnJlYWQgPSAxOworCisJCQkvKiBSZW1lbWJlciBmaXJzdCBwb3J0IHRoYXQgcmVxdWVzdHMgcmVhZC4gKi8KKwkJCWlmIChuID09IFNXSVRDSF9QT1JUX05VTSkKKwkJCQluID0gcDsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJmh3X3ByaXYtPmxvY2spOworCisJaWYgKG4gPCBTV0lUQ0hfUE9SVF9OVU0pCisJCXNjaGVkdWxlX3dvcmsoJmh3X3ByaXYtPm1pYl9yZWFkKTsKKworCWlmICgxID09IHBvcnQtPm1pYl9wb3J0X2NudCAmJiBuIDwgU1dJVENIX1BPUlRfTlVNKSB7CisJCXAgPSBuOworCQlyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQkJaHdfcHJpdi0+Y291bnRlcltwXS5jb3VudGVyLAorCQkJMiA9PSBod19wcml2LT5jb3VudGVyW3BdLnJlYWQsCisJCQlIWiAqIDEpOworCX0gZWxzZQorCQlmb3IgKGkgPSAwLCBwID0gbjsgaSA8IHBvcnQtPm1pYl9wb3J0X2NudCAtIG47IGkrKywgcCsrKSB7CisJCQlpZiAoMCA9PSBpKSB7CisJCQkJcmMgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgKKwkJCQkJaHdfcHJpdi0+Y291bnRlcltwXS5jb3VudGVyLAorCQkJCQkyID09IGh3X3ByaXYtPmNvdW50ZXJbcF0ucmVhZCwKKwkJCQkJSFogKiAyKTsKKwkJCX0gZWxzZSBpZiAoaHctPnBvcnRfbWliW3BdLmNudF9wdHIpIHsKKwkJCQlyYyA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KAorCQkJCQlod19wcml2LT5jb3VudGVyW3BdLmNvdW50ZXIsCisJCQkJCTIgPT0gaHdfcHJpdi0+Y291bnRlcltwXS5yZWFkLAorCQkJCQlIWiAqIDEpOworCQkJfQorCQl9CisKKwlnZXRfbWliX2NvdW50ZXJzKGh3LCBwb3J0LT5maXJzdF9wb3J0LCBwb3J0LT5taWJfcG9ydF9jbnQsIGNvdW50ZXIpOworCW4gPSBody0+bWliX2NudDsKKwlpZiAobiA+IG5fc3RhdHMpCisJCW4gPSBuX3N0YXRzOworCW5fc3RhdHMgLT0gbjsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQkqZGF0YSsrID0gY291bnRlcltpXTsKK30KKworLyoqCisgKiBuZXRkZXZfZ2V0X3J4X2NzdW0gLSBnZXQgcmVjZWl2ZSBjaGVja3N1bSBzdXBwb3J0CisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGdldHMgcmVjZWl2ZSBjaGVja3N1bSBzdXBwb3J0IHNldHRpbmcuCisgKgorICogUmV0dXJuIHRydWUgaWYgcmVjZWl2ZSBjaGVja3N1bSBpcyBlbmFibGVkOyBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0YXRpYyB1MzIgbmV0ZGV2X2dldF9yeF9jc3VtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSBwcml2LT5hZGFwdGVyOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCisJcmV0dXJuIGh3LT5yeF9jZmcgJgorCQkoRE1BX1JYX0NTVU1fVURQIHwKKwkJRE1BX1JYX0NTVU1fVENQIHwKKwkJRE1BX1JYX0NTVU1fSVApOworfQorCisvKioKKyAqIG5ldGRldl9zZXRfcnhfY3N1bSAtIHNldCByZWNlaXZlIGNoZWNrc3VtIHN1cHBvcnQKKyAqIEBkZXY6CU5ldHdvcmsgZGV2aWNlLgorICogQGRhdGE6CVplcm8gdG8gZGlzYWJsZSByZWNlaXZlIGNoZWNrc3VtIHN1cHBvcnQuCisgKgorICogVGhpcyBmdW5jdGlvbiBzZXRzIHJlY2VpdmUgY2hlY2tzdW0gc3VwcG9ydCBzZXR0aW5nLgorICoKKyAqIFJldHVybiAwIGlmIHN1Y2Nlc3NmdWw7IG90aGVyd2lzZSBhbiBlcnJvciBjb2RlLgorICovCitzdGF0aWMgaW50IG5ldGRldl9zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisJdTMyIG5ld19zZXR0aW5nID0gaHctPnJ4X2NmZzsKKworCWlmIChkYXRhKQorCQluZXdfc2V0dGluZyB8PQorCQkJKERNQV9SWF9DU1VNX1VEUCB8IERNQV9SWF9DU1VNX1RDUCB8CisJCQlETUFfUlhfQ1NVTV9JUCk7CisJZWxzZQorCQluZXdfc2V0dGluZyAmPQorCQkJfihETUFfUlhfQ1NVTV9VRFAgfCBETUFfUlhfQ1NVTV9UQ1AgfAorCQkJRE1BX1JYX0NTVU1fSVApOworCW5ld19zZXR0aW5nICY9IH5ETUFfUlhfQ1NVTV9VRFA7CisJbXV0ZXhfbG9jaygmaHdfcHJpdi0+bG9jayk7CisJaWYgKG5ld19zZXR0aW5nICE9IGh3LT5yeF9jZmcpIHsKKwkJaHctPnJ4X2NmZyA9IG5ld19zZXR0aW5nOworCQlpZiAoaHctPmVuYWJsZWQpCisJCQl3cml0ZWwoaHctPnJ4X2NmZywgaHctPmlvICsgS1NfRE1BX1JYX0NUUkwpOworCX0KKwltdXRleF91bmxvY2soJmh3X3ByaXYtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIG5ldGRldl9ldGh0b29sX29wcyA9IHsKKwkuZ2V0X3NldHRpbmdzCQk9IG5ldGRldl9nZXRfc2V0dGluZ3MsCisJLnNldF9zZXR0aW5ncwkJPSBuZXRkZXZfc2V0X3NldHRpbmdzLAorCS5ud2F5X3Jlc2V0CQk9IG5ldGRldl9ud2F5X3Jlc2V0LAorCS5nZXRfbGluawkJPSBuZXRkZXZfZ2V0X2xpbmssCisJLmdldF9kcnZpbmZvCQk9IG5ldGRldl9nZXRfZHJ2aW5mbywKKwkuZ2V0X3JlZ3NfbGVuCQk9IG5ldGRldl9nZXRfcmVnc19sZW4sCisJLmdldF9yZWdzCQk9IG5ldGRldl9nZXRfcmVncywKKwkuZ2V0X3dvbAkJPSBuZXRkZXZfZ2V0X3dvbCwKKwkuc2V0X3dvbAkJPSBuZXRkZXZfc2V0X3dvbCwKKwkuZ2V0X21zZ2xldmVsCQk9IG5ldGRldl9nZXRfbXNnbGV2ZWwsCisJLnNldF9tc2dsZXZlbAkJPSBuZXRkZXZfc2V0X21zZ2xldmVsLAorCS5nZXRfZWVwcm9tX2xlbgkJPSBuZXRkZXZfZ2V0X2VlcHJvbV9sZW4sCisJLmdldF9lZXByb20JCT0gbmV0ZGV2X2dldF9lZXByb20sCisJLnNldF9lZXByb20JCT0gbmV0ZGV2X3NldF9lZXByb20sCisJLmdldF9wYXVzZXBhcmFtCQk9IG5ldGRldl9nZXRfcGF1c2VwYXJhbSwKKwkuc2V0X3BhdXNlcGFyYW0JCT0gbmV0ZGV2X3NldF9wYXVzZXBhcmFtLAorCS5nZXRfcmluZ3BhcmFtCQk9IG5ldGRldl9nZXRfcmluZ3BhcmFtLAorCS5nZXRfc3RyaW5ncwkJPSBuZXRkZXZfZ2V0X3N0cmluZ3MsCisJLmdldF9zc2V0X2NvdW50CQk9IG5ldGRldl9nZXRfc3NldF9jb3VudCwKKwkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBuZXRkZXZfZ2V0X2V0aHRvb2xfc3RhdHMsCisJLmdldF9yeF9jc3VtCQk9IG5ldGRldl9nZXRfcnhfY3N1bSwKKwkuc2V0X3J4X2NzdW0JCT0gbmV0ZGV2X3NldF9yeF9jc3VtLAorCS5nZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX2dldF90eF9jc3VtLAorCS5zZXRfdHhfY3N1bQkJPSBldGh0b29sX29wX3NldF90eF9jc3VtLAorCS5nZXRfc2cJCQk9IGV0aHRvb2xfb3BfZ2V0X3NnLAorCS5zZXRfc2cJCQk9IGV0aHRvb2xfb3Bfc2V0X3NnLAorfTsKKworLyoKKyAqIEhhcmR3YXJlIG1vbml0b3JpbmcKKyAqLworCitzdGF0aWMgdm9pZCB1cGRhdGVfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZGV2X3ByaXYgKnByaXYsCisJc3RydWN0IGtzel9wb3J0ICpwb3J0KQoreworCWlmIChwcml2LT5tZWRpYV9zdGF0ZSAhPSBwb3J0LT5saW5rZWQtPnN0YXRlKSB7CisJCXByaXYtPm1lZGlhX3N0YXRlID0gcG9ydC0+bGlua2VkLT5zdGF0ZTsKKwkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQkJaWYgKG1lZGlhX2Nvbm5lY3RlZCA9PSBwcml2LT5tZWRpYV9zdGF0ZSkKKwkJCQluZXRpZl9jYXJyaWVyX29uKGRldik7CisJCQllbHNlCisJCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwkJCWlmIChuZXRpZl9tc2dfbGluayhwcml2KSkKKwkJCQlwcmludGsoS0VSTl9JTkZPICIlcyBsaW5rICVzXG4iLCBkZXYtPm5hbWUsCisJCQkJCShtZWRpYV9jb25uZWN0ZWQgPT0gcHJpdi0+bWVkaWFfc3RhdGUgPworCQkJCQkib24iIDogIm9mZiIpKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgbWliX3JlYWRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkZXZfaW5mbywgbWliX3JlYWQpOworCXN0cnVjdCBrc3pfaHcgKmh3ID0gJmh3X3ByaXYtPmh3OworCXN0cnVjdCBrc3pfcG9ydF9taWIgKm1pYjsKKwlpbnQgaTsKKworCW5leHRfamlmZmllcyA9IGppZmZpZXM7CisJZm9yIChpID0gMDsgaSA8IGh3LT5taWJfcG9ydF9jbnQ7IGkrKykgeworCQltaWIgPSAmaHctPnBvcnRfbWliW2ldOworCisJCS8qIFJlYWRpbmcgTUlCIGNvdW50ZXJzIG9yIHJlcXVlc3RlZCB0byByZWFkLiAqLworCQlpZiAobWliLT5jbnRfcHRyIHx8IDEgPT0gaHdfcHJpdi0+Y291bnRlcltpXS5yZWFkKSB7CisKKwkJCS8qIE5lZWQgdG8gcHJvY2VzcyByZWNlaXZlIGludGVycnVwdC4gKi8KKwkJCWlmIChwb3J0X3JfY250KGh3LCBpKSkKKwkJCQlicmVhazsKKwkJCWh3X3ByaXYtPmNvdW50ZXJbaV0ucmVhZCA9IDA7CisKKwkJCS8qIEZpbmlzaCByZWFkaW5nIGNvdW50ZXJzLiAqLworCQkJaWYgKDAgPT0gbWliLT5jbnRfcHRyKSB7CisJCQkJaHdfcHJpdi0+Y291bnRlcltpXS5yZWFkID0gMjsKKwkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoCisJCQkJCSZod19wcml2LT5jb3VudGVyW2ldLmNvdW50ZXIpOworCQkJfQorCQl9IGVsc2UgaWYgKGppZmZpZXMgPj0gaHdfcHJpdi0+Y291bnRlcltpXS50aW1lKSB7CisJCQkvKiBPbmx5IHJlYWQgTUlCIGNvdW50ZXJzIHdoZW4gdGhlIHBvcnQgaXMgY29ubmVjdGVkLiAqLworCQkJaWYgKG1lZGlhX2Nvbm5lY3RlZCA9PSBtaWItPnN0YXRlKQorCQkJCWh3X3ByaXYtPmNvdW50ZXJbaV0ucmVhZCA9IDE7CisJCQluZXh0X2ppZmZpZXMgKz0gSFogKiAxICogaHctPm1pYl9wb3J0X2NudDsKKwkJCWh3X3ByaXYtPmNvdW50ZXJbaV0udGltZSA9IG5leHRfamlmZmllczsKKworCQkvKiBQb3J0IGlzIGp1c3QgZGlzY29ubmVjdGVkLiAqLworCQl9IGVsc2UgaWYgKG1pYi0+bGlua19kb3duKSB7CisJCQltaWItPmxpbmtfZG93biA9IDA7CisKKwkJCS8qIFJlYWQgY291bnRlcnMgb25lIGxhc3QgdGltZSBhZnRlciBsaW5rIGlzIGxvc3QuICovCisJCQlod19wcml2LT5jb3VudGVyW2ldLnJlYWQgPSAxOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBtaWJfbW9uaXRvcih1bnNpZ25lZCBsb25nIHB0cikKK3sKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSAoc3RydWN0IGRldl9pbmZvICopIHB0cjsKKworCW1pYl9yZWFkX3dvcmsoJmh3X3ByaXYtPm1pYl9yZWFkKTsKKworCS8qIFRoaXMgaXMgdXNlZCB0byB2ZXJpZnkgV2FrZS1vbi1MQU4gaXMgd29ya2luZy4gKi8KKwlpZiAoaHdfcHJpdi0+cG1lX3dhaXQpIHsKKwkJaWYgKGh3X3ByaXYtPnBtZV93YWl0IDw9IGppZmZpZXMpIHsKKwkJCWh3X2Nscl93b2xfcG1lX3N0YXR1cygmaHdfcHJpdi0+aHcpOworCQkJaHdfcHJpdi0+cG1lX3dhaXQgPSAwOworCQl9CisJfSBlbHNlIGlmIChod19jaGtfd29sX3BtZV9zdGF0dXMoJmh3X3ByaXYtPmh3KSkgeworCisJCS8qIFBNRSBpcyBhc3NlcnRlZC4gIFdhaXQgMiBzZWNvbmRzIHRvIGNsZWFyIGl0LiAqLworCQlod19wcml2LT5wbWVfd2FpdCA9IGppZmZpZXMgKyBIWiAqIDI7CisJfQorCisJa3N6X3VwZGF0ZV90aW1lcigmaHdfcHJpdi0+bWliX3RpbWVyX2luZm8pOworfQorCisvKioKKyAqIGRldl9tb25pdG9yIC0gcGVyaW9kaWMgbW9uaXRvcmluZworICogQHB0cjoJTmV0d29yayBkZXZpY2UgcG9pbnRlci4KKyAqCisgKiBUaGlzIHJvdXRpbmUgaXMgcnVuIGluIGEga2VybmVsIHRpbWVyIHRvIG1vbml0b3IgdGhlIG5ldHdvcmsgZGV2aWNlLgorICovCitzdGF0aWMgdm9pZCBkZXZfbW9uaXRvcih1bnNpZ25lZCBsb25nIHB0cikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIHB0cjsKKwlzdHJ1Y3QgZGV2X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9IHByaXYtPmFkYXB0ZXI7CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisJc3RydWN0IGtzel9wb3J0ICpwb3J0ID0gJnByaXYtPnBvcnQ7CisKKwlpZiAoIShody0+ZmVhdHVyZXMgJiBMSU5LX0lOVF9XT1JLSU5HKSkKKwkJcG9ydF9nZXRfbGlua19zcGVlZChwb3J0KTsKKwl1cGRhdGVfbGluayhkZXYsIHByaXYsIHBvcnQpOworCisJa3N6X3VwZGF0ZV90aW1lcigmcHJpdi0+bW9uaXRvcl90aW1lcl9pbmZvKTsKK30KKworLyoKKyAqIExpbnV4IG5ldHdvcmsgZGV2aWNlIGludGVyZmFjZSBmdW5jdGlvbnMKKyAqLworCisvKiBEcml2ZXIgZXhwb3J0ZWQgdmFyaWFibGVzICovCisKK3N0YXRpYyBpbnQgbXNnX2VuYWJsZTsKKworc3RhdGljIGNoYXIgKm1hY2FkZHIgPSAiOiI7CitzdGF0aWMgY2hhciAqbWFjMWFkZHIgPSAiOiI7CisKKy8qCisgKiBUaGlzIGVuYWJsZXMgbXVsdGlwbGUgbmV0d29yayBkZXZpY2UgbW9kZSBmb3IgS1NaODg0Miwgd2hpY2ggY29udGFpbnMgYQorICogc3dpdGNoIHdpdGggdHdvIHBoeXNpY2FsIHBvcnRzLiAgU29tZSB1c2VycyBsaWtlIHRvIHRha2UgY29udHJvbCBvZiB0aGUKKyAqIHBvcnRzIGZvciBydW5uaW5nIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wuICBUaGUgZHJpdmVyIHdpbGwgY3JlYXRlIGFuCisgKiBhZGRpdGlvbmFsIGV0aD8gZGV2aWNlIGZvciB0aGUgb3RoZXIgcG9ydC4KKyAqCisgKiBTb21lIGxpbWl0YXRpb25zIGFyZSB0aGUgbmV0d29yayBkZXZpY2VzIGNhbm5vdCBoYXZlIGRpZmZlcmVudCBNVFUgYW5kCisgKiBtdWx0aWNhc3QgaGFzaCB0YWJsZXMuCisgKi8KK3N0YXRpYyBpbnQgbXVsdGlfZGV2OworCisvKgorICogQXMgbW9zdCB1c2VycyBzZWxlY3QgbXVsdGlwbGUgbmV0d29yayBkZXZpY2UgbW9kZSB0byB1c2UgU3Bhbm5pbmcgVHJlZQorICogUHJvdG9jb2wsIHRoaXMgZW5hYmxlcyBhIGZlYXR1cmUgaW4gd2hpY2ggbW9zdCB1bmljYXN0IGFuZCBtdWx0aWNhc3QgcGFja2V0cworICogYXJlIGZvcndhcmRlZCBpbnNpZGUgdGhlIHN3aXRjaCBhbmQgbm90IHBhc3NlZCB0byB0aGUgaG9zdC4gIE9ubHkgcGFja2V0cworICogdGhhdCBuZWVkIHRoZSBob3N0J3MgYXR0ZW50aW9uIGFyZSBwYXNzZWQgdG8gaXQuICBUaGlzIHByZXZlbnRzIHRoZSBob3N0CisgKiB3YXN0aW5nIENQVSB0aW1lIHRvIGV4YW1pbmUgZWFjaCBhbmQgZXZlcnkgaW5jb21pbmcgcGFja2V0cyBhbmQgZG8gdGhlCisgKiBmb3J3YXJkaW5nIGl0c2VsZi4KKyAqCisgKiBBcyB0aGUgaGFjayByZXF1aXJlcyB0aGUgcHJpdmF0ZSBicmlkZ2UgaGVhZGVyLCB0aGUgZHJpdmVyIGNhbm5vdCBjb21waWxlCisgKiB3aXRoIGp1c3QgdGhlIGtlcm5lbCBoZWFkZXJzLgorICoKKyAqIEVuYWJsaW5nIFNUUCBzdXBwb3J0IGFsc28gdHVybnMgb24gbXVsdGlwbGUgbmV0d29yayBkZXZpY2UgbW9kZS4KKyAqLworc3RhdGljIGludCBzdHA7CisKKy8qCisgKiBUaGlzIGVuYWJsZXMgZmFzdCBhZ2luZyBpbiB0aGUgS1NaODg0MiBzd2l0Y2guICBOb3Qgc3VyZSB3aGF0IHNpdHVhdGlvbgorICogbmVlZHMgdGhhdC4gIEhvd2V2ZXIsIGZhc3QgYWdpbmcgaXMgdXNlZCB0byBmbHVzaCB0aGUgZHluYW1pYyBNQUMgdGFibGUgd2hlbgorICogU1RQIHN1cG9ydCBpcyBlbmFibGVkLgorICovCitzdGF0aWMgaW50IGZhc3RfYWdpbmc7CisKKy8qKgorICogbmV0ZGV2X2luaXQgLSBpbml0YWxpemUgbmV0d29yayBkZXZpY2UuCisgKiBAZGV2OglOZXR3b3JrIGRldmljZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBuZXR3b3JrIGRldmljZS4KKyAqCisgKiBSZXR1cm4gMCBpZiBzdWNjZXNzZnVsOyBvdGhlcndpc2UgYW4gZXJyb3IgY29kZSBpbmRpY2F0aW5nIGZhaWx1cmUuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IG5ldGRldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRldl9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCS8qIDUwMCBtcyB0aW1lb3V0ICovCisJa3N6X2luaXRfdGltZXIoJnByaXYtPm1vbml0b3JfdGltZXJfaW5mbywgNTAwICogSFogLyAxMDAwLAorCQlkZXZfbW9uaXRvciwgZGV2KTsKKworCS8qIDUwMCBtcyB0aW1lb3V0ICovCisJZGV2LT53YXRjaGRvZ190aW1lbyA9IEhaIC8gMjsKKworCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNOworCisJLyoKKwkgKiBIYXJkd2FyZSBkb2VzIG5vdCByZWFsbHkgc3VwcG9ydCBJUHY2IGNoZWNrc3VtIGdlbmVyYXRpb24sIGJ1dAorCSAqIGRyaXZlciBhY3R1YWxseSBydW5zIGZhc3RlciB3aXRoIHRoaXMgb24uICBSZWZlciBJUFY2X0NTVU1fR0VOX0hBQ0suCisJICovCisJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0lQVjZfQ1NVTTsKKwlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfU0c7CisKKwlzZW1hX2luaXQoJnByaXYtPnByb2Nfc2VtLCAxKTsKKworCXByaXYtPm1paV9pZi5waHlfaWRfbWFzayA9IDB4MTsKKwlwcml2LT5taWlfaWYucmVnX251bV9tYXNrID0gMHg3OworCXByaXYtPm1paV9pZi5kZXYgPSBkZXY7CisJcHJpdi0+bWlpX2lmLm1kaW9fcmVhZCA9IG1kaW9fcmVhZDsKKwlwcml2LT5taWlfaWYubWRpb193cml0ZSA9IG1kaW9fd3JpdGU7CisJcHJpdi0+bWlpX2lmLnBoeV9pZCA9IHByaXYtPnBvcnQuZmlyc3RfcG9ydCArIDE7CisKKwlwcml2LT5tc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQobXNnX2VuYWJsZSwKKwkJKE5FVElGX01TR19EUlYgfCBORVRJRl9NU0dfUFJPQkUgfCBORVRJRl9NU0dfTElOSykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgbmV0ZGV2X29wcyA9IHsKKwkubmRvX2luaXQJCT0gbmV0ZGV2X2luaXQsCisJLm5kb19vcGVuCQk9IG5ldGRldl9vcGVuLAorCS5uZG9fc3RvcAkJPSBuZXRkZXZfY2xvc2UsCisJLm5kb19nZXRfc3RhdHMJCT0gbmV0ZGV2X3F1ZXJ5X3N0YXRpc3RpY3MsCisJLm5kb19zdGFydF94bWl0CQk9IG5ldGRldl90eCwKKwkubmRvX3R4X3RpbWVvdXQJCT0gbmV0ZGV2X3R4X3RpbWVvdXQsCisJLm5kb19jaGFuZ2VfbXR1CQk9IG5ldGRldl9jaGFuZ2VfbXR1LAorCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gbmV0ZGV2X3NldF9tYWNfYWRkcmVzcywKKwkubmRvX2RvX2lvY3RsCQk9IG5ldGRldl9pb2N0bCwKKwkubmRvX3NldF9yeF9tb2RlCT0gbmV0ZGV2X3NldF9yeF9tb2RlLAorI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBuZXRkZXZfbmV0cG9sbCwKKyNlbmRpZgorfTsKKworc3RhdGljIHZvaWQgbmV0ZGV2X2ZyZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2LT53YXRjaGRvZ190aW1lbykKKwkJdW5yZWdpc3Rlcl9uZXRkZXYoZGV2KTsKKworCWZyZWVfbmV0ZGV2KGRldik7Cit9CisKK3N0cnVjdCBwbGF0Zm9ybV9pbmZvIHsKKwlzdHJ1Y3QgZGV2X2luZm8gZGV2X2luZm87CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldltTV0lUQ0hfUE9SVF9OVU1dOworfTsKKworc3RhdGljIGludCBuZXRfZGV2aWNlX3ByZXNlbnQ7CisKK3N0YXRpYyB2b2lkIGdldF9tYWNfYWRkcihzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYsIHU4ICptYWNhZGRyLCBpbnQgcG9ydCkKK3sKKwlpbnQgaTsKKwlpbnQgajsKKwlpbnQgZ290X251bTsKKwlpbnQgbnVtOworCisJaSA9IGogPSBudW0gPSBnb3RfbnVtID0gMDsKKwl3aGlsZSAoaiA8IE1BQ19BRERSX0xFTikgeworCQlpZiAobWFjYWRkcltpXSkgeworCQkJZ290X251bSA9IDE7CisJCQlpZiAoJzAnIDw9IG1hY2FkZHJbaV0gJiYgbWFjYWRkcltpXSA8PSAnOScpCisJCQkJbnVtID0gbnVtICogMTYgKyBtYWNhZGRyW2ldIC0gJzAnOworCQkJZWxzZSBpZiAoJ0EnIDw9IG1hY2FkZHJbaV0gJiYgbWFjYWRkcltpXSA8PSAnRicpCisJCQkJbnVtID0gbnVtICogMTYgKyAxMCArIG1hY2FkZHJbaV0gLSAnQSc7CisJCQllbHNlIGlmICgnYScgPD0gbWFjYWRkcltpXSAmJiBtYWNhZGRyW2ldIDw9ICdmJykKKwkJCQludW0gPSBudW0gKiAxNiArIDEwICsgbWFjYWRkcltpXSAtICdhJzsKKwkJCWVsc2UgaWYgKCc6JyA9PSBtYWNhZGRyW2ldKQorCQkJCWdvdF9udW0gPSAyOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9IGVsc2UgaWYgKGdvdF9udW0pCisJCQlnb3RfbnVtID0gMjsKKwkJZWxzZQorCQkJYnJlYWs7CisJCWlmICgyID09IGdvdF9udW0pIHsKKwkJCWlmIChNQUlOX1BPUlQgPT0gcG9ydCkgeworCQkJCWh3X3ByaXYtPmh3Lm92ZXJyaWRlX2FkZHJbaisrXSA9ICh1OCkgbnVtOworCQkJCWh3X3ByaXYtPmh3Lm92ZXJyaWRlX2FkZHJbNV0gKz0KKwkJCQkJaHdfcHJpdi0+aHcuaWQ7CisJCQl9IGVsc2UgeworCQkJCWh3X3ByaXYtPmh3Lmtzel9zd2l0Y2gtPm90aGVyX2FkZHJbaisrXSA9CisJCQkJCSh1OCkgbnVtOworCQkJCWh3X3ByaXYtPmh3Lmtzel9zd2l0Y2gtPm90aGVyX2FkZHJbNV0gKz0KKwkJCQkJaHdfcHJpdi0+aHcuaWQ7CisJCQl9CisJCQludW0gPSBnb3RfbnVtID0gMDsKKwkJfQorCQlpKys7CisJfQorCWlmIChNQUNfQUREUl9MRU4gPT0gaikgeworCQlpZiAoTUFJTl9QT1JUID09IHBvcnQpCisJCQlod19wcml2LT5ody5tYWNfb3ZlcnJpZGUgPSAxOworCX0KK30KKworI2RlZmluZSBLUzg4NFhfRE1BX01BU0sJCQkofjB4MFVMKQorCitzdGF0aWMgdm9pZCByZWFkX290aGVyX2FkZHIoc3RydWN0IGtzel9odyAqaHcpCit7CisJaW50IGk7CisJdTE2IGRhdGFbM107CisJc3RydWN0IGtzel9zd2l0Y2ggKnN3ID0gaHctPmtzel9zd2l0Y2g7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlkYXRhW2ldID0gZWVwcm9tX3JlYWQoaHcsIGkgKyBFRVBST01fREFUQV9PVEhFUl9NQUNfQUREUik7CisJaWYgKChkYXRhWzBdIHx8IGRhdGFbMV0gfHwgZGF0YVsyXSkgJiYgZGF0YVswXSAhPSAweGZmZmYpIHsKKwkJc3ctPm90aGVyX2FkZHJbNV0gPSAodTgpIGRhdGFbMF07CisJCXN3LT5vdGhlcl9hZGRyWzRdID0gKHU4KShkYXRhWzBdID4+IDgpOworCQlzdy0+b3RoZXJfYWRkclszXSA9ICh1OCkgZGF0YVsxXTsKKwkJc3ctPm90aGVyX2FkZHJbMl0gPSAodTgpKGRhdGFbMV0gPj4gOCk7CisJCXN3LT5vdGhlcl9hZGRyWzFdID0gKHU4KSBkYXRhWzJdOworCQlzdy0+b3RoZXJfYWRkclswXSA9ICh1OCkoZGF0YVsyXSA+PiA4KTsKKwl9Cit9CisKKyNpZm5kZWYgUENJX1ZFTkRPUl9JRF9NSUNSRUxfS1MKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NSUNSRUxfS1MJCTB4MTZjNgorI2VuZGlmCisKK3N0YXRpYyBpbnQgX19pbml0IHBjaWRldl9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBkZXZfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXY7CisJc3RydWN0IGtzel9odyAqaHc7CisJc3RydWN0IHBsYXRmb3JtX2luZm8gKmluZm87CisJc3RydWN0IGtzel9wb3J0ICpwb3J0OworCXVuc2lnbmVkIGxvbmcgcmVnX2Jhc2U7CisJdW5zaWduZWQgbG9uZyByZWdfbGVuOworCWludCBjbnQ7CisJaW50IGk7CisJaW50IG1pYl9wb3J0X2NvdW50OworCWludCBwaTsKKwlpbnQgcG9ydF9jb3VudDsKKwlpbnQgcmVzdWx0OworCWNoYXIgYmFubmVyWzgwXTsKKwlzdHJ1Y3Qga3N6X3N3aXRjaCAqc3cgPSBOVUxMOworCisJcmVzdWx0ID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJlc3VsdCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCXJlc3VsdCA9IC1FTk9ERVY7CisKKwlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSB8fAorCQkJcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpKQorCQlyZXR1cm4gcmVzdWx0OworCisJcmVnX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJcmVnX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisJaWYgKChwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMCkgJiBJT1JFU09VUkNFX0lPKSAhPSAwKQorCQlyZXR1cm4gcmVzdWx0OworCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVnX2Jhc2UsIHJlZ19sZW4sIERSVl9OQU1FKSkKKwkJcmV0dXJuIHJlc3VsdDsKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCXJlc3VsdCA9IC1FTk9NRU07CisKKwlpbmZvID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBsYXRmb3JtX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8pCisJCWdvdG8gcGNpZGV2X2luaXRfZGV2X2VycjsKKwltZW1zZXQoaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBwbGF0Zm9ybV9pbmZvKSk7CisKKwlod19wcml2ID0gJmluZm8tPmRldl9pbmZvOworCWh3X3ByaXYtPnBkZXYgPSBwZGV2OworCisJaHcgPSAmaHdfcHJpdi0+aHc7CisKKwlody0+aW8gPSBpb3JlbWFwKHJlZ19iYXNlLCByZWdfbGVuKTsKKwlpZiAoIWh3LT5pbykKKwkJZ290byBwY2lkZXZfaW5pdF9pb19lcnI7CisKKwljbnQgPSBod19pbml0KGh3KTsKKwlpZiAoIWNudCkgeworCQlpZiAobXNnX2VuYWJsZSAmIE5FVElGX01TR19QUk9CRSkKKwkJCXByaW50ayhLRVJOX0FMRVJUICJjaGlwIG5vdCBkZXRlY3RlZFxuIik7CisJCXJlc3VsdCA9IC1FTk9ERVY7CisJCWdvdG8gcGNpZGV2X2luaXRfYWxsb2NfZXJyOworCX0KKworCXNwcmludGYoYmFubmVyLAkiJXNcbiIsIHZlcnNpb24pOworCWJhbm5lclsxM10gPSBjbnQgKyAnMCc7CisJa3NfaW5mbyhod19wcml2LCAiJXMiLCBiYW5uZXIpOworCWtzX2RiZyhod19wcml2LCAiTWVtID0gJXA7IElSUSA9ICVkXG4iLCBody0+aW8sIHBkZXYtPmlycSk7CisKKwkvKiBBc3N1bWUgZGV2aWNlIGlzIEtTWjg4NDEuICovCisJaHctPmRldl9jb3VudCA9IDE7CisJcG9ydF9jb3VudCA9IDE7CisJbWliX3BvcnRfY291bnQgPSAxOworCWh3LT5hZGRyX2xpc3Rfc2l6ZSA9IDA7CisJaHctPm1pYl9jbnQgPSBQT1JUX0NPVU5URVJfTlVNOworCWh3LT5taWJfcG9ydF9jbnQgPSAxOworCisJLyogS1NaODg0MiBoYXMgYSBzd2l0Y2ggd2l0aCBtdWx0aXBsZSBwb3J0cy4gKi8KKwlpZiAoMiA9PSBjbnQpIHsKKwkJaWYgKGZhc3RfYWdpbmcpCisJCQlody0+b3ZlcnJpZGVzIHw9IEZBU1RfQUdJTkc7CisKKwkJaHctPm1pYl9jbnQgPSBUT1RBTF9QT1JUX0NPVU5URVJfTlVNOworCisJCS8qIE11bHRpcGxlIG5ldHdvcmsgZGV2aWNlIGludGVyZmFjZXMgYXJlIHJlcXVpcmVkLiAqLworCQlpZiAobXVsdGlfZGV2KSB7CisJCQlody0+ZGV2X2NvdW50ID0gU1dJVENIX1BPUlRfTlVNOworCQkJaHctPmFkZHJfbGlzdF9zaXplID0gU1dJVENIX1BPUlRfTlVNIC0gMTsKKwkJfQorCisJCS8qIFNpbmdsZSBuZXR3b3JrIGRldmljZSBoYXMgbXVsdGlwbGUgcG9ydHMuICovCisJCWlmICgxID09IGh3LT5kZXZfY291bnQpIHsKKwkJCXBvcnRfY291bnQgPSBTV0lUQ0hfUE9SVF9OVU07CisJCQltaWJfcG9ydF9jb3VudCA9IFNXSVRDSF9QT1JUX05VTTsKKwkJfQorCQlody0+bWliX3BvcnRfY250ID0gVE9UQUxfUE9SVF9OVU07CisJCWh3LT5rc3pfc3dpdGNoID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGtzel9zd2l0Y2gpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFody0+a3N6X3N3aXRjaCkKKwkJCWdvdG8gcGNpZGV2X2luaXRfYWxsb2NfZXJyOworCQltZW1zZXQoaHctPmtzel9zd2l0Y2gsIDAsIHNpemVvZihzdHJ1Y3Qga3N6X3N3aXRjaCkpOworCisJCXN3ID0gaHctPmtzel9zd2l0Y2g7CisJfQorCWZvciAoaSA9IDA7IGkgPCBody0+bWliX3BvcnRfY250OyBpKyspCisJCWh3LT5wb3J0X21pYltpXS5taWJfc3RhcnQgPSAwOworCisJaHctPnBhcmVudCA9IGh3X3ByaXY7CisKKwkvKiBEZWZhdWx0IE1UVSBpcyAxNTAwLiAqLworCWh3X3ByaXYtPm10dSA9IChSRUdVTEFSX1JYX0JVRl9TSVpFICsgMykgJiB+MzsKKworCWlmIChrc3pfYWxsb2NfbWVtKGh3X3ByaXYpKQorCQlnb3RvIHBjaWRldl9pbml0X21lbV9lcnI7CisKKwlod19wcml2LT5ody5pZCA9IG5ldF9kZXZpY2VfcHJlc2VudDsKKworCXNwaW5fbG9ja19pbml0KCZod19wcml2LT5od2xvY2spOworCW11dGV4X2luaXQoJmh3X3ByaXYtPmxvY2spOworCisJLyogdGFza2xldCBpcyBlbmFibGVkLiAqLworCXRhc2tsZXRfaW5pdCgmaHdfcHJpdi0+cnhfdGFza2xldCwgcnhfcHJvY190YXNrLAorCQkodW5zaWduZWQgbG9uZykgaHdfcHJpdik7CisJdGFza2xldF9pbml0KCZod19wcml2LT50eF90YXNrbGV0LCB0eF9wcm9jX3Rhc2ssCisJCSh1bnNpZ25lZCBsb25nKSBod19wcml2KTsKKworCS8qIHRhc2tsZXRfZW5hYmxlIHdpbGwgZGVjcmVtZW50IHRoZSBhdG9taWMgY291bnRlci4gKi8KKwl0YXNrbGV0X2Rpc2FibGUoJmh3X3ByaXYtPnJ4X3Rhc2tsZXQpOworCXRhc2tsZXRfZGlzYWJsZSgmaHdfcHJpdi0+dHhfdGFza2xldCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgVE9UQUxfUE9SVF9OVU07IGkrKykKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmaHdfcHJpdi0+Y291bnRlcltpXS5jb3VudGVyKTsKKworCWlmIChtYWNhZGRyWzBdICE9ICc6JykKKwkJZ2V0X21hY19hZGRyKGh3X3ByaXYsIG1hY2FkZHIsIE1BSU5fUE9SVCk7CisKKwkvKiBSZWFkIE1BQyBhZGRyZXNzIGFuZCBpbml0aWFsaXplIG92ZXJyaWRlIGFkZHJlc3MgaWYgbm90IG92ZXJyaWRlZC4gKi8KKwlod19yZWFkX2FkZHIoaHcpOworCisJLyogTXVsdGlwbGUgZGV2aWNlIGludGVyZmFjZXMgbW9kZSByZXF1aXJlcyBhIHNlY29uZCBNQUMgYWRkcmVzcy4gKi8KKwlpZiAoaHctPmRldl9jb3VudCA+IDEpIHsKKwkJbWVtY3B5KHN3LT5vdGhlcl9hZGRyLCBody0+b3ZlcnJpZGVfYWRkciwgTUFDX0FERFJfTEVOKTsKKwkJcmVhZF9vdGhlcl9hZGRyKGh3KTsKKwkJaWYgKG1hYzFhZGRyWzBdICE9ICc6JykKKwkJCWdldF9tYWNfYWRkcihod19wcml2LCBtYWMxYWRkciwgT1RIRVJfUE9SVCk7CisJfQorCisJaHdfc2V0dXAoaHcpOworCWlmIChody0+a3N6X3N3aXRjaCkKKwkJc3dfc2V0dXAoaHcpOworCWVsc2UgeworCQlod19wcml2LT53b2xfc3VwcG9ydCA9IFdPTF9TVVBQT1JUOworCQlod19wcml2LT53b2xfZW5hYmxlID0gMDsKKwl9CisKKwlJTklUX1dPUksoJmh3X3ByaXYtPm1pYl9yZWFkLCBtaWJfcmVhZF93b3JrKTsKKworCS8qIDUwMCBtcyB0aW1lb3V0ICovCisJa3N6X2luaXRfdGltZXIoJmh3X3ByaXYtPm1pYl90aW1lcl9pbmZvLCA1MDAgKiBIWiAvIDEwMDAsCisJCW1pYl9tb25pdG9yLCBod19wcml2KTsKKworCWZvciAoaSA9IDA7IGkgPCBody0+ZGV2X2NvdW50OyBpKyspIHsKKwkJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBkZXZfcHJpdikpOworCQlpZiAoIWRldikKKwkJCWdvdG8gcGNpZGV2X2luaXRfcmVnX2VycjsKKwkJaW5mby0+bmV0ZGV2W2ldID0gZGV2OworCisJCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOworCQlwcml2LT5hZGFwdGVyID0gaHdfcHJpdjsKKwkJcHJpdi0+aWQgPSBuZXRfZGV2aWNlX3ByZXNlbnQrKzsKKworCQlwb3J0ID0gJnByaXYtPnBvcnQ7CisJCXBvcnQtPnBvcnRfY250ID0gcG9ydF9jb3VudDsKKwkJcG9ydC0+bWliX3BvcnRfY250ID0gbWliX3BvcnRfY291bnQ7CisJCXBvcnQtPmZpcnN0X3BvcnQgPSBpOworCQlwb3J0LT5mbG93X2N0cmwgPSBQSFlfRkxPV19DVFJMOworCisJCXBvcnQtPmh3ID0gaHc7CisJCXBvcnQtPmxpbmtlZCA9ICZody0+cG9ydF9pbmZvW3BvcnQtPmZpcnN0X3BvcnRdOworCisJCWZvciAoY250ID0gMCwgcGkgPSBpOyBjbnQgPCBwb3J0X2NvdW50OyBjbnQrKywgcGkrKykgeworCQkJaHctPnBvcnRfaW5mb1twaV0ucG9ydF9pZCA9IHBpOworCQkJaHctPnBvcnRfaW5mb1twaV0ucGRldiA9IGRldjsKKwkJCWh3LT5wb3J0X2luZm9bcGldLnN0YXRlID0gbWVkaWFfZGlzY29ubmVjdGVkOworCQl9CisKKwkJZGV2LT5tZW1fc3RhcnQgPSAodW5zaWduZWQgbG9uZykgaHctPmlvOworCQlkZXYtPm1lbV9lbmQgPSBkZXYtPm1lbV9zdGFydCArIHJlZ19sZW4gLSAxOworCQlkZXYtPmlycSA9IHBkZXYtPmlycTsKKwkJaWYgKE1BSU5fUE9SVCA9PSBpKQorCQkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGh3X3ByaXYtPmh3Lm92ZXJyaWRlX2FkZHIsCisJCQkJTUFDX0FERFJfTEVOKTsKKwkJZWxzZSB7CisJCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgc3ctPm90aGVyX2FkZHIsCisJCQkJTUFDX0FERFJfTEVOKTsKKwkJCWlmICghbWVtY21wKHN3LT5vdGhlcl9hZGRyLCBody0+b3ZlcnJpZGVfYWRkciwKKwkJCQkJTUFDX0FERFJfTEVOKSkKKwkJCQlkZXYtPmRldl9hZGRyWzVdICs9IHBvcnQtPmZpcnN0X3BvcnQ7CisJCX0KKworCQlkZXYtPm5ldGRldl9vcHMgPSAmbmV0ZGV2X29wczsKKwkJU0VUX0VUSFRPT0xfT1BTKGRldiwgJm5ldGRldl9ldGh0b29sX29wcyk7CisJCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSkKKwkJCWdvdG8gcGNpZGV2X2luaXRfcmVnX2VycjsKKwkJcG9ydF9zZXRfcG93ZXJfc2F2aW5nKHBvcnQsIHRydWUpOworCX0KKworCXBjaV9kZXZfZ2V0KGh3X3ByaXYtPnBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBpbmZvKTsKKwlyZXR1cm4gMDsKKworcGNpZGV2X2luaXRfcmVnX2VycjoKKwlmb3IgKGkgPSAwOyBpIDwgaHctPmRldl9jb3VudDsgaSsrKSB7CisJCWlmIChpbmZvLT5uZXRkZXZbaV0pIHsKKwkJCW5ldGRldl9mcmVlKGluZm8tPm5ldGRldltpXSk7CisJCQlpbmZvLT5uZXRkZXZbaV0gPSBOVUxMOworCQl9CisJfQorCitwY2lkZXZfaW5pdF9tZW1fZXJyOgorCWtzel9mcmVlX21lbShod19wcml2KTsKKwlrZnJlZShody0+a3N6X3N3aXRjaCk7CisKK3BjaWRldl9pbml0X2FsbG9jX2VycjoKKwlpb3VubWFwKGh3LT5pbyk7CisKK3BjaWRldl9pbml0X2lvX2VycjoKKwlrZnJlZShpbmZvKTsKKworcGNpZGV2X2luaXRfZGV2X2VycjoKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVnX2Jhc2UsIHJlZ19sZW4pOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgcGNpZGV2X2V4aXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IGk7CisJc3RydWN0IHBsYXRmb3JtX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGRldl9pbmZvICpod19wcml2ID0gJmluZm8tPmRldl9pbmZvOworCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSwKKwkJcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSk7CisJZm9yIChpID0gMDsgaSA8IGh3X3ByaXYtPmh3LmRldl9jb3VudDsgaSsrKSB7CisJCWlmIChpbmZvLT5uZXRkZXZbaV0pCisJCQluZXRkZXZfZnJlZShpbmZvLT5uZXRkZXZbaV0pOworCX0KKwlpZiAoaHdfcHJpdi0+aHcuaW8pCisJCWlvdW5tYXAoaHdfcHJpdi0+aHcuaW8pOworCWtzel9mcmVlX21lbShod19wcml2KTsKKwlrZnJlZShod19wcml2LT5ody5rc3pfc3dpdGNoKTsKKwlwY2lfZGV2X3B1dChod19wcml2LT5wZGV2KTsKKwlrZnJlZShpbmZvKTsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBwY2lkZXZfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCWludCBpOworCXN0cnVjdCBwbGF0Zm9ybV9pbmZvICppbmZvID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBkZXZfaW5mbyAqaHdfcHJpdiA9ICZpbmZvLT5kZXZfaW5mbzsKKwlzdHJ1Y3Qga3N6X2h3ICpodyA9ICZod19wcml2LT5odzsKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKwlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QwLCAwKTsKKworCWlmIChod19wcml2LT53b2xfZW5hYmxlKQorCQlod19jZmdfd29sX3BtZShodywgMCk7CisJZm9yIChpID0gMDsgaSA8IGh3LT5kZXZfY291bnQ7IGkrKykgeworCQlpZiAoaW5mby0+bmV0ZGV2W2ldKSB7CisJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5mby0+bmV0ZGV2W2ldOworCisJCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCQkJbmV0ZGV2X29wZW4oZGV2KTsKKwkJCQluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpZGV2X3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgcGxhdGZvcm1faW5mbyAqaW5mbyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgZGV2X2luZm8gKmh3X3ByaXYgPSAmaW5mby0+ZGV2X2luZm87CisJc3RydWN0IGtzel9odyAqaHcgPSAmaHdfcHJpdi0+aHc7CisKKwkvKiBOZWVkIHRvIGZpbmQgYSB3YXkgdG8gcmV0cmlldmUgdGhlIGRldmljZSBJUCBhZGRyZXNzLiAqLworCXU4IG5ldF9hZGRyW10gPSB7IDE5MiwgMTY4LCAxLCAxIH07CisKKwlmb3IgKGkgPSAwOyBpIDwgaHctPmRldl9jb3VudDsgaSsrKSB7CisJCWlmIChpbmZvLT5uZXRkZXZbaV0pIHsKKwkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbmZvLT5uZXRkZXZbaV07CisKKwkJCWlmIChuZXRpZl9ydW5uaW5nKGRldikpIHsKKwkJCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CisJCQkJbmV0ZGV2X2Nsb3NlKGRldik7CisJCQl9CisJCX0KKwl9CisJaWYgKGh3X3ByaXYtPndvbF9lbmFibGUpIHsKKwkJaHdfZW5hYmxlX3dvbChodywgaHdfcHJpdi0+d29sX2VuYWJsZSwgbmV0X2FkZHIpOworCQlod19jZmdfd29sX3BtZShodywgMSk7CisJfQorCisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpLCAxKTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgY2hhciBwY2lkZXZfbmFtZVtdID0gImtzejg4NHhwIjsKKworc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWRldl90YWJsZVtdID0geworCXsgUENJX1ZFTkRPUl9JRF9NSUNSRUxfS1MsIDB4ODg0MSwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAorCXsgUENJX1ZFTkRPUl9JRF9NSUNSRUxfS1MsIDB4ODg0MiwKKwkJUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAorCXsgMCB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpZGV2X3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBjaV9kZXZpY2VfZHJpdmVyID0geworI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kCT0gcGNpZGV2X3N1c3BlbmQsCisJLnJlc3VtZQkJPSBwY2lkZXZfcmVzdW1lLAorI2VuZGlmCisJLm5hbWUJCT0gcGNpZGV2X25hbWUsCisJLmlkX3RhYmxlCT0gcGNpZGV2X3RhYmxlLAorCS5wcm9iZQkJPSBwY2lkZXZfaW5pdCwKKwkucmVtb3ZlCQk9IHBjaWRldl9leGl0Cit9OworCitzdGF0aWMgaW50IF9faW5pdCBrc3o4ODR4X2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnBjaV9kZXZpY2VfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGtzejg4NHhfY2xlYW51cF9tb2R1bGUodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnBjaV9kZXZpY2VfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoa3N6ODg0eF9pbml0X21vZHVsZSk7Cittb2R1bGVfZXhpdChrc3o4ODR4X2NsZWFudXBfbW9kdWxlKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJLU1o4ODQxLzIgUENJIG5ldHdvcmsgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJUcmlzdHJhbSBIYSA8VHJpc3RyYW0uSGFAbWljcmVsLmNvbT4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtX25hbWVkKG1lc3NhZ2UsIG1zZ19lbmFibGUsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1lc3NhZ2UsICJNZXNzYWdlIHZlcmJvc2l0eSBsZXZlbCAoMD1ub25lLCAzMT1hbGwpIik7CisKK21vZHVsZV9wYXJhbShtYWNhZGRyLCBjaGFycCwgMCk7Cittb2R1bGVfcGFyYW0obWFjMWFkZHIsIGNoYXJwLCAwKTsKK21vZHVsZV9wYXJhbShmYXN0X2FnaW5nLCBpbnQsIDApOworbW9kdWxlX3BhcmFtKG11bHRpX2RldiwgaW50LCAwKTsKK21vZHVsZV9wYXJhbShzdHAsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG1hY2FkZHIsICJNQUMgYWRkcmVzcyIpOworTU9EVUxFX1BBUk1fREVTQyhtYWMxYWRkciwgIlNlY29uZCBNQUMgYWRkcmVzcyIpOworTU9EVUxFX1BBUk1fREVTQyhmYXN0X2FnaW5nLCAiRmFzdCBhZ2luZyIpOworTU9EVUxFX1BBUk1fREVTQyhtdWx0aV9kZXYsICJNdWx0aXBsZSBkZXZpY2UgaW50ZXJmYWNlcyIpOworTU9EVUxFX1BBUk1fREVTQyhzdHAsICJTVFAgc3VwcG9ydCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbGFuY2UuYyBiL2RyaXZlcnMvbmV0L2xhbmNlLmMKaW5kZXggOGQ3ZDNkNC4uN2I5NDQ3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9sYW5jZS5jCkBAIC0xMjg4LDcgKzEyODgsNyBAQAogCX0gZWxzZSB7CiAJCXNob3J0IG11bHRpY2FzdF90YWJsZVs0XTsKIAkJaW50IGk7Ci0JCWludCBudW1fYWRkcnM9ZGV2LT5tY19jb3VudDsKKwkJaW50IG51bV9hZGRycz1uZXRkZXZfbWNfY291bnQoZGV2KTsKIAkJaWYoZGV2LT5mbGFncyZJRkZfQUxMTVVMVEkpCiAJCQludW1fYWRkcnM9MTsKIAkJLyogRklYSVQ6IFdlIGRvbid0IHVzZSB0aGUgbXVsdGljYXN0IHRhYmxlLCBidXQgcmVseSBvbiB1cHBlci1sYXllciBmaWx0ZXJpbmcuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9saWI4MjU5Ni5jIGIvZHJpdmVycy9uZXQvbGliODI1OTYuYwppbmRleCBiMTE3ZjdmLi40NDNjMzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9saWI4MjU5Ni5jCisrKyBiL2RyaXZlcnMvbmV0L2xpYjgyNTk2LmMKQEAgLTEwOTQsMTEgKzEwOTQsOSBAQAogCQlyZXR1cm4gaTsKIAl9OwogCi0JREVCKERFQl9QUk9CRSwgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IDgyNTk2IGF0ICUjM2x4LCIsCi0JCQkgICAgICBkZXYtPm5hbWUsIGRldi0+YmFzZV9hZGRyKSk7Ci0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJREVCKERFQl9QUk9CRSwgcHJpbnRrKCIgJTIuMlgiLCBkZXYtPmRldl9hZGRyW2ldKSk7Ci0JREVCKERFQl9QUk9CRSwgcHJpbnRrKCIgSVJRICVkLlxuIiwgZGV2LT5pcnEpKTsKKwlERUIoREVCX1BST0JFLCBwcmludGsoS0VSTl9JTkZPICIlczogODI1OTYgYXQgJSMzbHgsICVwTSBJUlEgJWQuXG4iLAorCQkJICAgICAgZGV2LT5uYW1lLCBkZXYtPmJhc2VfYWRkciwgZGV2LT5kZXZfYWRkciwKKwkJCSAgICAgIGRldi0+aXJxKSk7CiAJREVCKERFQl9JTklULCBwcmludGsoS0VSTl9JTkZPCiAJCQkgICAgICIlczogZG1hIGF0IDB4JXAgKCVkIGJ5dGVzKSwgbHAtPnNjYiBhdCAweCVwXG4iLAogCQkJICAgICBkZXYtPm5hbWUsIGRtYSwgKGludClzaXplb2Yoc3RydWN0IGk1OTZfZG1hKSwKQEAgLTEzODIsMzEgKzEzODAsMzIgQEAKIAkJfQogCX0KIAotCWNudCA9IGRldi0+bWNfY291bnQ7CisJY250ID0gbmV0ZGV2X21jX2NvdW50KGRldik7CiAJaWYgKGNudCA+IE1BWF9NQ19DTlQpIHsKIAkJY250ID0gTUFYX01DX0NOVDsKIAkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogT25seSAlZCBtdWx0aWNhc3QgYWRkcmVzc2VzIHN1cHBvcnRlZCIsCiAJCQlkZXYtPm5hbWUsIGNudCk7CiAJfQogCi0JaWYgKGRldi0+bWNfY291bnQgPiAwKSB7CisJaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAkJdW5zaWduZWQgY2hhciAqY3A7CiAJCXN0cnVjdCBtY19jbWQgKmNtZDsKIAogCQljbWQgPSAmZG1hLT5tY19jbWQ7CiAJCWNtZC0+Y21kLmNvbW1hbmQgPSBTV0FQMTYoQ21kTXVsdGljYXN0TGlzdCk7Ci0JCWNtZC0+bWNfY250ID0gU1dBUDE2KGRldi0+bWNfY291bnQgKiA2KTsKKwkJY21kLT5tY19jbnQgPSBTV0FQMTYobmV0ZGV2X21jX2NvdW50KGRldikgKiA2KTsKIAkJY3AgPSBjbWQtPm1jX2FkZHJzOwotCQlmb3IgKGRtaSA9IGRldi0+bWNfbGlzdDsKLQkJICAgICBjbnQgJiYgZG1pICE9IE5VTEw7Ci0JCSAgICAgZG1pID0gZG1pLT5uZXh0LCBjbnQtLSwgY3AgKz0gNikgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgeworCQkJaWYgKCFjbnQtLSkKKwkJCQlicmVhazsKIAkJCW1lbWNweShjcCwgZG1pLT5kbWlfYWRkciwgNik7CiAJCQlpZiAoaTU5Nl9kZWJ1ZyA+IDEpCiAJCQkJREVCKERFQl9NVUxUSSwKIAkJCQkgICAgcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkJICAgIiVzOiBBZGRpbmcgYWRkcmVzcyAlcE1cbiIsCiAJCQkJCSAgIGRldi0+bmFtZSwgY3ApKTsKKwkJCWNwICs9IDY7CiAJCX0KIAkJRE1BX1dCQUNLX0lOVihkZXYsICZkbWEtPm1jX2NtZCwgc2l6ZW9mKHN0cnVjdCBtY19jbWQpKTsKIAkJaTU5Nl9hZGRfY21kKGRldiwgJmNtZC0+Y21kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xpYjgzOTAuYyBiL2RyaXZlcnMvbmV0L2xpYjgzOTAuYwppbmRleCA1N2YyNTg0Li41NmY2NmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9saWI4MzkwLmMKKysrIGIvZHJpdmVycy9uZXQvbGliODM5MC5jCkBAIC05MDcsMTUgKzkwNyw4IEBACiB7CiAJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAKLQlmb3IgKGRtaT1kZXYtPm1jX2xpc3Q7IGRtaTsgZG1pPWRtaS0+bmV4dCkKLQl7Ci0JCXUzMiBjcmM7Ci0JCWlmIChkbWktPmRtaV9hZGRybGVuICE9IEVUSF9BTEVOKQotCQl7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogaW52YWxpZCBtdWx0aWNhc3QgYWRkcmVzcyBsZW5ndGggZ2l2ZW4uXG4iLCBkZXYtPm5hbWUpOwotCQkJY29udGludWU7Ci0JCX0KLQkJY3JjID0gZXRoZXJfY3JjKEVUSF9BTEVOLCBkbWktPmRtaV9hZGRyKTsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgeworCQl1MzIgY3JjID0gZXRoZXJfY3JjKEVUSF9BTEVOLCBkbWktPmRtaV9hZGRyKTsKIAkJLyoKIAkJICogVGhlIDgzOTAgdXNlcyB0aGUgNiBtb3N0IHNpZ25pZmljYW50IGJpdHMgb2YgdGhlCiAJCSAqIENSQyB0byBpbmRleCB0aGUgbXVsdGljYXN0IHRhYmxlLgpAQCAtOTQxLDcgKzkzNCw3IEBACiAJaWYgKCEoZGV2LT5mbGFncyYoSUZGX1BST01JU0N8SUZGX0FMTE1VTFRJKSkpCiAJewogCQltZW1zZXQoZWlfbG9jYWwtPm1jZmlsdGVyLCAwLCA4KTsKLQkJaWYgKGRldi0+bWNfbGlzdCkKKwkJaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkKIAkJCW1ha2VfbWNfYml0cyhlaV9sb2NhbC0+bWNmaWx0ZXIsIGRldik7CiAJfQogCWVsc2UKQEAgLTk3NSw3ICs5NjgsNyBAQAogCiAgIAlpZihkZXYtPmZsYWdzJklGRl9QUk9NSVNDKQogICAJCWVpX291dGJfcChFODM5MF9SWENPTkZJRyB8IDB4MTgsIGU4MzkwX2Jhc2UgKyBFTjBfUlhDUik7Ci0JZWxzZSBpZihkZXYtPmZsYWdzJklGRl9BTExNVUxUSSB8fCBkZXYtPm1jX2xpc3QpCisJZWxzZSBpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fCAhbmV0ZGV2X21jX2VtcHR5KGRldikpCiAgIAkJZWlfb3V0Yl9wKEU4MzkwX1JYQ09ORklHIHwgMHgwOCwgZTgzOTBfYmFzZSArIEVOMF9SWENSKTsKICAgCWVsc2UKICAgCQllaV9vdXRiX3AoRTgzOTBfUlhDT05GSUcsIGU4MzkwX2Jhc2UgKyBFTjBfUlhDUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9sbF90ZW1hY19tYWluLmMgYi9kcml2ZXJzL25ldC9sbF90ZW1hY19tYWluLmMKaW5kZXggYTg1MjJiZC4uYTE4ZTM0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbGxfdGVtYWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2xsX3RlbWFjX21haW4uYwpAQCAtMjI0LDYgKzIyNCwxMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG5ldGRldl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHZvaWQgKnApCit7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKKworCXJldHVybiB0ZW1hY19zZXRfbWFjX2FkZHJlc3MobmRldiwgYWRkci0+c2FfZGF0YSk7Cit9CisKIHN0YXRpYyB2b2lkIHRlbWFjX3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlzdHJ1Y3QgdGVtYWNfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CkBAIC0yMzIsNyArMjM5LDcgQEAKIAogCW11dGV4X2xvY2soJmxwLT5pbmRpcmVjdF9tdXRleCk7CiAJaWYgKG5kZXYtPmZsYWdzICYgKElGRl9BTExNVUxUSSB8IElGRl9QUk9NSVNDKSB8fAotCSAgICBuZGV2LT5tY19jb3VudCA+IE1VTFRJQ0FTVF9DQU1fVEFCTEVfTlVNKSB7CisJICAgIG5ldGRldl9tY19jb3VudChuZGV2KSA+IE1VTFRJQ0FTVF9DQU1fVEFCTEVfTlVNKSB7CiAJCS8qCiAJCSAqCVdlIG11c3QgbWFrZSB0aGUga2VybmVsIHJlYWxpc2Ugd2UgaGFkIHRvIG1vdmUKIAkJICoJaW50byBwcm9taXNjIG1vZGUgb3Igd2Ugc3RhcnQgYWxsIG91dCB3YXIgb24KQEAgLTI0MiwxMCArMjQ5LDExIEBACiAJCW5kZXYtPmZsYWdzIHw9IElGRl9QUk9NSVNDOwogCQl0ZW1hY19pbmRpcmVjdF9vdXQzMihscCwgWFRFX0FGTV9PRkZTRVQsIFhURV9BRk1fRVBQUk1fTUFTSyk7CiAJCWRldl9pbmZvKCZuZGV2LT5kZXYsICJQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4iKTsKLQl9IGVsc2UgaWYgKG5kZXYtPm1jX2NvdW50KSB7Ci0JCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0ID0gbmRldi0+bWNfbGlzdDsKLQkJZm9yIChpID0gMDsgbWNsaXN0ICYmIGkgPCBuZGV2LT5tY19jb3VudDsgaSsrKSB7CisJfSBlbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KG5kZXYpKSB7CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwogCisJCWkgPSAwOworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIG5kZXYpIHsKIAkJCWlmIChpID49IE1VTFRJQ0FTVF9DQU1fVEFCTEVfTlVNKQogCQkJCWJyZWFrOwogCQkJbXVsdGlfYWRkcl9tc3cgPSAoKG1jbGlzdC0+ZG1pX2FkZHJbM10gPDwgMjQpIHwKQEAgLTI1OCw3ICsyNjYsNyBAQAogCQkJCQkgIChtY2xpc3QtPmRtaV9hZGRyWzRdKSB8IChpIDw8IDE2KSk7CiAJCQl0ZW1hY19pbmRpcmVjdF9vdXQzMihscCwgWFRFX01BVzFfT0ZGU0VULAogCQkJCQkgICAgIG11bHRpX2FkZHJfbHN3KTsKLQkJCW1jbGlzdCA9IG1jbGlzdC0+bmV4dDsKKwkJCWkrKzsKIAkJfQogCX0gZWxzZSB7CiAJCXZhbCA9IHRlbWFjX2luZGlyZWN0X2luMzIobHAsIFhURV9BRk1fT0ZGU0VUKTsKQEAgLTYxNSw3ICs2MjMsNyBAQAogCXdoaWxlICgoYmRzdGF0ICYgU1RTX0NUUkxfQVBQMF9DTVBMVCkpIHsKIAogCQlza2IgPSBscC0+cnhfc2tiW2xwLT5yeF9iZF9jaV07Ci0JCWxlbmd0aCA9IGN1cl9wLT5hcHA0OworCQlsZW5ndGggPSBjdXJfcC0+YXBwNCAmIDB4M0ZGRjsKIAogCQlza2JfdmFkZHIgPSB2aXJ0X3RvX2J1cyhza2ItPmRhdGEpOwogCQlkbWFfdW5tYXBfc2luZ2xlKG5kZXYtPmRldi5wYXJlbnQsIHNrYl92YWRkciwgbGVuZ3RoLApAQCAtNzY4LDcgKzc3Niw3IEBACiAJLm5kb19vcGVuID0gdGVtYWNfb3BlbiwKIAkubmRvX3N0b3AgPSB0ZW1hY19zdG9wLAogCS5uZG9fc3RhcnRfeG1pdCA9IHRlbWFjX3N0YXJ0X3htaXQsCi0JLm5kb19zZXRfbWFjX2FkZHJlc3MgPSB0ZW1hY19zZXRfbWFjX2FkZHJlc3MsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgPSBuZXRkZXZfc2V0X21hY19hZGRyZXNzLAogCS8vLm5kb19zZXRfbXVsdGljYXN0X2xpc3QgPSB0ZW1hY19zZXRfbXVsdGljYXN0X2xpc3QsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlciA9IHRlbWFjX3BvbGxfY29udHJvbGxlciwKQEAgLTkzOCw2ICs5NDYsOSBAQAogCiBzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCB0ZW1hY19vZl9tYXRjaFtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1sbC10ZW1hYy0xLjAxLmIiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAieGxueCx4cHMtbGwtdGVtYWMtMi4wMC5hIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInhsbngseHBzLWxsLXRlbWFjLTIuMDIuYSIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1sbC10ZW1hYy0yLjAzLmEiLCB9LAogCXt9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIHRlbWFjX29mX21hdGNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMgYi9kcml2ZXJzL25ldC9sb29wYmFjay5jCmluZGV4IGI5ZmNjOTguLjcyYjc5NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKKysrIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suYwpAQCAtNzIsNyArNzIsOCBAQAogc3RhdGljIG5ldGRldl90eF90IGxvb3BiYWNrX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNwdV9sc3RhdHMgKnBjcHVfbHN0YXRzLCAqbGJfc3RhdHM7CisJc3RydWN0IHBjcHVfbHN0YXRzIF9fcGVyY3B1ICpwY3B1X2xzdGF0czsKKwlzdHJ1Y3QgcGNwdV9sc3RhdHMgKmxiX3N0YXRzOwogCWludCBsZW47CiAKIAlza2Jfb3JwaGFuKHNrYik7CkBAIC04MCw3ICs4MSw3IEBACiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAogCS8qIGl0J3MgT0sgdG8gdXNlIHBlcl9jcHVfcHRyKCkgYmVjYXVzZSBCSHMgYXJlIG9mZiAqLwotCXBjcHVfbHN0YXRzID0gZGV2LT5tbF9wcml2OworCXBjcHVfbHN0YXRzID0gKHZvaWQgX19wZXJjcHUgX19mb3JjZSAqKWRldi0+bWxfcHJpdjsKIAlsYl9zdGF0cyA9IHRoaXNfY3B1X3B0cihwY3B1X2xzdGF0cyk7CiAKIAlsZW4gPSBza2ItPmxlbjsKQEAgLTk1LDE0ICs5NiwxNCBAQAogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmxvb3BiYWNrX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWNvbnN0IHN0cnVjdCBwY3B1X2xzdGF0cyAqcGNwdV9sc3RhdHM7CisJY29uc3Qgc3RydWN0IHBjcHVfbHN0YXRzIF9fcGVyY3B1ICpwY3B1X2xzdGF0czsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmZGV2LT5zdGF0czsKIAl1bnNpZ25lZCBsb25nIGJ5dGVzID0gMDsKIAl1bnNpZ25lZCBsb25nIHBhY2tldHMgPSAwOwogCXVuc2lnbmVkIGxvbmcgZHJvcHMgPSAwOwogCWludCBpOwogCi0JcGNwdV9sc3RhdHMgPSBkZXYtPm1sX3ByaXY7CisJcGNwdV9sc3RhdHMgPSAodm9pZCBfX3BlcmNwdSBfX2ZvcmNlICopZGV2LT5tbF9wcml2OwogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CiAJCWNvbnN0IHN0cnVjdCBwY3B1X2xzdGF0cyAqbGJfc3RhdHM7CiAKQEAgLTEzNSwxOSArMTM2LDIwIEBACiAKIHN0YXRpYyBpbnQgbG9vcGJhY2tfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcGNwdV9sc3RhdHMgKmxzdGF0czsKKwlzdHJ1Y3QgcGNwdV9sc3RhdHMgX19wZXJjcHUgKmxzdGF0czsKIAogCWxzdGF0cyA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgcGNwdV9sc3RhdHMpOwogCWlmICghbHN0YXRzKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRldi0+bWxfcHJpdiA9IGxzdGF0czsKKwlkZXYtPm1sX3ByaXYgPSAodm9pZCBfX2ZvcmNlICopbHN0YXRzOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBsb29wYmFja19kZXZfZnJlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBwY3B1X2xzdGF0cyAqbHN0YXRzID0gZGV2LT5tbF9wcml2OworCXN0cnVjdCBwY3B1X2xzdGF0cyBfX3BlcmNwdSAqbHN0YXRzID0KKwkJKHZvaWQgX19wZXJjcHUgX19mb3JjZSAqKWRldi0+bWxfcHJpdjsKIAogCWZyZWVfcGVyY3B1KGxzdGF0cyk7CiAJZnJlZV9uZXRkZXYoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2xwNDg2ZS5jIGIvZHJpdmVycy9uZXQvbHA0ODZlLmMKaW5kZXggZTIwZmVmYy4uM2UzY2MwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbHA0ODZlLmMKKysrIGIvZHJpdmVycy9uZXQvbHA0ODZlLmMKQEAgLTEyNTMsMjEgKzEyNTMsMjIgQEAKIAogCWlmIChpNTk2X2RlYnVnID4gMSkKIAkJcHJpbnRrICgiJXM6IHNldCBtdWx0aWNhc3QgbGlzdCAlZFxuIiwKLQkJCWRldi0+bmFtZSwgZGV2LT5tY19jb3VudCk7CisJCQlkZXYtPm5hbWUsIG5ldGRldl9tY19jb3VudChkZXYpKTsKIAotCWlmIChkZXYtPm1jX2NvdW50ID4gMCkgeworCWlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKIAkJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJCWNoYXIgKmNwOwotCQljbWQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaTU5Nl9jbWQpKzIrZGV2LT5tY19jb3VudCo2LCBHRlBfQVRPTUlDKTsKKwkJY21kID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGk1OTZfY21kKSArIDIgKworCQkJICAgICAgbmV0ZGV2X21jX2NvdW50KGRldikgKiA2LCBHRlBfQVRPTUlDKTsKIAkJaWYgKGNtZCA9PSBOVUxMKSB7CiAJCQlwcmludGsgKEtFUk5fRVJSICIlczogc2V0X211bHRpY2FzdCBNZW1vcnkgc3F1ZWV6ZS5cbiIsIGRldi0+bmFtZSk7CiAJCQlyZXR1cm47CiAJCX0KIAkJY21kLT5jb21tYW5kID0gQ21kTXVsdGljYXN0TGlzdDsKLQkJKigodW5zaWduZWQgc2hvcnQgKikgKGNtZCArIDEpKSA9IGRldi0+bWNfY291bnQgKiA2OworCQkqKCh1bnNpZ25lZCBzaG9ydCAqKSAoY21kICsgMSkpID0gbmV0ZGV2X21jX2NvdW50KGRldikgKiA2OwogCQljcCA9ICgoY2hhciAqKShjbWQgKyAxKSkrMjsKLQkJZm9yIChkbWkgPSBkZXYtPm1jX2xpc3Q7IGRtaSAhPSBOVUxMOyBkbWkgPSBkbWktPm5leHQpIHsKLQkJCW1lbWNweShjcCwgZG1pLDYpOworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgeworCQkJbWVtY3B5KGNwLCBkbWktPmRtaV9hZGRyLCA2KTsKIAkJCWNwICs9IDY7CiAJCX0KIAkJaWYgKGk1OTZfZGVidWcgJiBMT0dfU1JDRFNUKQpAQCAtMTI3Nyw3ICsxMjc4LDggQEAKIAkJaWYgKGxwLT5zZXRfY29uZi5wYV9uZXh0ICE9IEk1OTZfTlVMTCkgewogCQkJcmV0dXJuOwogCQl9Ci0JCWlmIChkZXYtPm1jX2NvdW50ID09IDAgJiYgIShkZXYtPmZsYWdzICYgKElGRl9QUk9NSVNDIHwgSUZGX0FMTE1VTFRJKSkpIHsKKwkJaWYgKG5ldGRldl9tY19lbXB0eShkZXYpICYmCisJCSAgICAhKGRldi0+ZmxhZ3MgJiAoSUZGX1BST01JU0MgfCBJRkZfQUxMTVVMVEkpKSkgewogCQkJbHAtPmk1OTZfY29uZmlnWzhdICY9IH4weDAxOwogCQl9IGVsc2UgewogCQkJbHAtPmk1OTZfY29uZmlnWzhdIHw9IDB4MDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWM4MzkwLmMgYi9kcml2ZXJzL25ldC9tYWM4MzkwLmMKaW5kZXggZjhmYTBjMy4uYTg3Njg2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWFjODM5MC5jCisrKyBiL2RyaXZlcnMvbmV0L21hYzgzOTAuYwpAQCAtMTcsNiArMTcsOCBAQAogLyogMjAwMi0xMi0zMDogVHJ5IHRvIHN1cHBvcnQgbW9yZSBjYXJkcywgc29tZSBjbHVlcyBmcm9tIE5ldEJTRCBkcml2ZXIgKi8KIC8qIDIwMDMtMTItMjY6IE1ha2Ugc3VyZSBBc2FudGUgY2FyZHMgYWx3YXlzIHdvcmsuICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CkBAIC0zNCwzMSArMzYsMzYgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9od3Rlc3QuaD4KICNpbmNsdWRlIDxhc20vbWFjaW50cy5oPgogCiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gPQotCSJtYWM4MzkwLmM6IHYwLjQgMjAwMS0wNS0xNSBEYXZpZCBIdWdnaW5zLURhaW5lcyA8ZGhkQGRlYmlhbi5vcmc+IGFuZCBvdGhlcnNcbiI7CisJInYwLjQgMjAwMS0wNS0xNSBEYXZpZCBIdWdnaW5zLURhaW5lcyA8ZGhkQGRlYmlhbi5vcmc+IGFuZCBvdGhlcnNcbiI7CiAKICNkZWZpbmUgRUlfU0hJRlQoeCkJKGVpX2xvY2FsLT5yZWdfb2Zmc2V0W3hdKQotI2RlZmluZSBlaV9pbmIocG9ydCkgICBpbl84KHBvcnQpCi0jZGVmaW5lIGVpX291dGIodmFsLHBvcnQpICBvdXRfOChwb3J0LHZhbCkKLSNkZWZpbmUgZWlfaW5iX3AocG9ydCkgICBpbl84KHBvcnQpCi0jZGVmaW5lIGVpX291dGJfcCh2YWwscG9ydCkgIG91dF84KHBvcnQsdmFsKQorI2RlZmluZSBlaV9pbmIocG9ydCkJaW5fOChwb3J0KQorI2RlZmluZSBlaV9vdXRiKHZhbCwgcG9ydCkJb3V0XzgocG9ydCwgdmFsKQorI2RlZmluZSBlaV9pbmJfcChwb3J0KQlpbl84KHBvcnQpCisjZGVmaW5lIGVpX291dGJfcCh2YWwsIHBvcnQpCW91dF84KHBvcnQsIHZhbCkKIAogI2luY2x1ZGUgImxpYjgzOTAuYyIKIAogI2RlZmluZSBXRF9TVEFSVF9QRwkJCTB4MDAJLyogRmlyc3QgcGFnZSBvZiBUWCBidWZmZXIgKi8KICNkZWZpbmUgQ0FCTEVUUk9OX1JYX1NUQVJUX1BHCQkweDAwICAgIC8qIEZpcnN0IHBhZ2Ugb2YgUlggYnVmZmVyICovCiAjZGVmaW5lIENBQkxFVFJPTl9SWF9TVE9QX1BHCQkweDMwICAgIC8qIExhc3QgcGFnZSArMSBvZiBSWCByaW5nICovCi0jZGVmaW5lIENBQkxFVFJPTl9UWF9TVEFSVF9QRwkJQ0FCTEVUUk9OX1JYX1NUT1BfUEcgIC8qIEZpcnN0IHBhZ2Ugb2YgVFggYnVmZmVyICovCisjZGVmaW5lIENBQkxFVFJPTl9UWF9TVEFSVF9QRwkJQ0FCTEVUUk9OX1JYX1NUT1BfUEcKKwkJCQkJCS8qIEZpcnN0IHBhZ2Ugb2YgVFggYnVmZmVyICovCiAKLS8qIFVuZm9ydHVuYXRlbHkgaXQgc2VlbXMgd2UgaGF2ZSB0byBoYXJkY29kZSB0aGVzZSBmb3IgdGhlIG1vbWVudCAqLwotLyogU2hvdWxkbid0IHRoZSBjYXJkIGtub3cgYWJvdXQgdGhpcz8gRG9lcyBhbnlvbmUga25vdyB3aGVyZSB0byByZWFkIGl0IG9mZiB0aGUgY2FyZD8gRG8gd2UgdHJ1c3QgdGhlIGRhdGEgcHJvdmlkZWQgYnkgdGhlIGNhcmQ/ICovCisvKgorICogVW5mb3J0dW5hdGVseSBpdCBzZWVtcyB3ZSBoYXZlIHRvIGhhcmRjb2RlIHRoZXNlIGZvciB0aGUgbW9tZW50CisgKiBTaG91bGRuJ3QgdGhlIGNhcmQga25vdyBhYm91dCB0aGlzPworICogRG9lcyBhbnlvbmUga25vdyB3aGVyZSB0byByZWFkIGl0IG9mZiB0aGUgY2FyZD8KKyAqIERvIHdlIHRydXN0IHRoZSBkYXRhIHByb3ZpZGVkIGJ5IHRoZSBjYXJkPworICovCiAKICNkZWZpbmUgREFZTkFfODM5MF9CQVNFCQkweDgwMDAwCiAjZGVmaW5lIERBWU5BXzgzOTBfTUVNCQkweDAwMDAwCkBAIC04MCw3ICs4Nyw3IEBACiAJTUFDODM5MF9LSU5FVElDUywKIH07CiAKLXN0YXRpYyBjb25zdCBjaGFyICogY2FyZG5hbWVbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjYXJkbmFtZVtdID0gewogCSJhcHBsZSIsCiAJImFzYW50ZSIsCiAJImZhcmFsbG9uIiwKQEAgLTkwLDcgKzk3LDcgQEAKIAkia2luZXRpY3MiLAogfTsKIAotc3RhdGljIGludCB3b3JkMTZbXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgd29yZDE2W10gPSB7CiAJMSwgLyogYXBwbGUgKi8KIAkxLCAvKiBhc2FudGUgKi8KIAkxLCAvKiBmYXJhbGxvbiAqLwpAQCAtMTAxLDcgKzEwOCw3IEBACiB9OwogCiAvKiBvbiB3aGljaCBjYXJkcyBkbyB3ZSB1c2UgTnVCdXMgcmVzb3VyY2VzPyAqLwotc3RhdGljIGludCB1c2VyZXNvdXJjZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgdXNlcmVzb3VyY2VzW10gPSB7CiAJMSwgLyogYXBwbGUgKi8KIAkxLCAvKiBhc2FudGUgKi8KIAkxLCAvKiBmYXJhbGxvbiAqLwpAQCAtMTE3LDIyICsxMjQsMjIgQEAKIAlBQ0NFU1NfMTYsCiB9OwogCi1leHRlcm4gaW50IG1hYzgzOTBfbWVtdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldik7Ci1zdGF0aWMgaW50IG1hYzgzOTBfaW5pdGRldihzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgc3RydWN0IG51YnVzX2RldiAqIG5kZXYsCitleHRlcm4gaW50IG1hYzgzOTBfbWVtdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgbWFjODM5MF9pbml0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBudWJ1c19kZXYgKm5kZXYsCiAJCQkgICBlbnVtIG1hYzgzOTBfdHlwZSB0eXBlKTsKIAotc3RhdGljIGludCBtYWM4MzkwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpOwotc3RhdGljIGludCBtYWM4MzkwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICogZGV2KTsKK3N0YXRpYyBpbnQgbWFjODM5MF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBtYWM4MzkwX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgbWFjODM5MF9ub19yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGludGVybGFuX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAvKiBTYW5lICgzMi1iaXQgY2h1bmsgbWVtb3J5IHJlYWQvd3JpdGUpIC0gU29tZSBGYXJhbGxvbiBhbmQgQXBwbGUgZG8gdGhpcyovCiBzdGF0aWMgdm9pZCBzYW5lX2dldF84MzkwX2hkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJICAgICAgc3RydWN0IGU4MzkwX3BrdF9oZHIgKmhkciwgaW50IHJpbmdfcGFnZSk7Ci1zdGF0aWMgdm9pZCBzYW5lX2Jsb2NrX2lucHV0KHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LCBpbnQgY291bnQsCi0JCQkgICAgIHN0cnVjdCBza19idWZmICogc2tiLCBpbnQgcmluZ19vZmZzZXQpOwotc3RhdGljIHZvaWQgc2FuZV9ibG9ja19vdXRwdXQoc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYsIGludCBjb3VudCwKLQkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWYsIGNvbnN0IGludCBzdGFydF9wYWdlKTsKK3N0YXRpYyB2b2lkIHNhbmVfYmxvY2tfaW5wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LAorCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgcmluZ19vZmZzZXQpOworc3RhdGljIHZvaWQgc2FuZV9ibG9ja19vdXRwdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LAorCQkJICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBjb25zdCBpbnQgc3RhcnRfcGFnZSk7CiAKIC8qIGRheW5hX21lbWNweSB0byBhbmQgZnJvbSBjYXJkICovCiBzdGF0aWMgdm9pZCBkYXluYV9tZW1jcHlfZnJvbWNhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdG8sCkBAIC0xNDgsOCArMTU1LDggQEAKIHN0YXRpYyB2b2lkIGRheW5hX2Jsb2NrX291dHB1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY291bnQsCiAJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgc3RhcnRfcGFnZSk7CiAKLSNkZWZpbmUgbWVtY3B5X2Zyb21pbyhhLGIsYykJbWVtY3B5KChhKSwodm9pZCAqKShiKSwoYykpCi0jZGVmaW5lIG1lbWNweV90b2lvKGEsYixjKQltZW1jcHkoKHZvaWQgKikoYSksKGIpLChjKSkKKyNkZWZpbmUgbWVtY3B5X2Zyb21pbyhhLCBiLCBjKQltZW1jcHkoKGEpLCAodm9pZCAqKShiKSwgKGMpKQorI2RlZmluZSBtZW1jcHlfdG9pbyhhLCBiLCBjKQltZW1jcHkoKHZvaWQgKikoYSksIChiKSwgKGMpKQogCiAvKiBTbG93IFNhbmUgKDE2LWJpdCBjaHVuayBtZW1vcnkgcmVhZC93cml0ZSkgQ2FibGV0cm9uIHVzZXMgdGhpcyAqLwogc3RhdGljIHZvaWQgc2xvd19zYW5lX2dldF84MzkwX2hkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMTY0LDcwICsxNzEsNzIgQEAKIHN0YXRpYyBlbnVtIG1hYzgzOTBfdHlwZSBfX2luaXQgbWFjODM5MF9pZGVudChzdHJ1Y3QgbnVidXNfZGV2ICpkZXYpCiB7CiAJc3dpdGNoIChkZXYtPmRyX3N3KSB7Ci0JCWNhc2UgTlVCVVNfRFJTV18zQ09NOgotCQkJc3dpdGNoIChkZXYtPmRyX2h3KSB7Ci0JCQkJY2FzZSBOVUJVU19EUkhXX0FQUExFX1NPTklDX05COgotCQkJCWNhc2UgTlVCVVNfRFJIV19BUFBMRV9TT05JQ19MQzoKLQkJCQljYXNlIE5VQlVTX0RSSFdfU09OTkVUOgotCQkJCQlyZXR1cm4gTUFDODM5MF9OT05FOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQlyZXR1cm4gTUFDODM5MF9BUFBMRTsKLQkJCQkJYnJlYWs7Ci0JCQl9CisJY2FzZSBOVUJVU19EUlNXXzNDT006CisJCXN3aXRjaCAoZGV2LT5kcl9odykgeworCQljYXNlIE5VQlVTX0RSSFdfQVBQTEVfU09OSUNfTkI6CisJCWNhc2UgTlVCVVNfRFJIV19BUFBMRV9TT05JQ19MQzoKKwkJY2FzZSBOVUJVU19EUkhXX1NPTk5FVDoKKwkJCXJldHVybiBNQUM4MzkwX05PTkU7CiAJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiBNQUM4MzkwX0FQUExFOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CiAKLQkJY2FzZSBOVUJVU19EUlNXX0FQUExFOgotCQkJc3dpdGNoIChkZXYtPmRyX2h3KSB7Ci0JCQkJY2FzZSBOVUJVU19EUkhXX0FTQU5URV9MQzoKLQkJCQkJcmV0dXJuIE1BQzgzOTBfTk9ORTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBOVUJVU19EUkhXX0NBQkxFVFJPTjoKLQkJCQkJcmV0dXJuIE1BQzgzOTBfQ0FCTEVUUk9OOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQlyZXR1cm4gTUFDODM5MF9BUFBMRTsKLQkJCQkJYnJlYWs7Ci0JCQl9CisJY2FzZSBOVUJVU19EUlNXX0FQUExFOgorCQlzd2l0Y2ggKGRldi0+ZHJfaHcpIHsKKwkJY2FzZSBOVUJVU19EUkhXX0FTQU5URV9MQzoKKwkJCXJldHVybiBNQUM4MzkwX05PTkU7CiAJCQlicmVhazsKKwkJY2FzZSBOVUJVU19EUkhXX0NBQkxFVFJPTjoKKwkJCXJldHVybiBNQUM4MzkwX0NBQkxFVFJPTjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIE1BQzgzOTBfQVBQTEU7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKIAotCQljYXNlIE5VQlVTX0RSU1dfQVNBTlRFOgotCQkJcmV0dXJuIE1BQzgzOTBfQVNBTlRFOwotCQkJYnJlYWs7CisJY2FzZSBOVUJVU19EUlNXX0FTQU5URToKKwkJcmV0dXJuIE1BQzgzOTBfQVNBTlRFOworCQlicmVhazsKIAotCQljYXNlIE5VQlVTX0RSU1dfVEVDSFdPUktTOgotCQljYXNlIE5VQlVTX0RSU1dfREFZTkEyOgotCQljYXNlIE5VQlVTX0RSU1dfREFZTkFfTEM6Ci0JCQlpZiAoZGV2LT5kcl9odyA9PSBOVUJVU19EUkhXX0NBQkxFVFJPTikKLQkJCQlyZXR1cm4gTUFDODM5MF9DQUJMRVRST047Ci0JCQllbHNlCi0JCQkJcmV0dXJuIE1BQzgzOTBfQVBQTEU7Ci0JCQlicmVhazsKKwljYXNlIE5VQlVTX0RSU1dfVEVDSFdPUktTOgorCWNhc2UgTlVCVVNfRFJTV19EQVlOQTI6CisJY2FzZSBOVUJVU19EUlNXX0RBWU5BX0xDOgorCQlpZiAoZGV2LT5kcl9odyA9PSBOVUJVU19EUkhXX0NBQkxFVFJPTikKKwkJCXJldHVybiBNQUM4MzkwX0NBQkxFVFJPTjsKKwkJZWxzZQorCQkJcmV0dXJuIE1BQzgzOTBfQVBQTEU7CisJCWJyZWFrOwogCi0JCWNhc2UgTlVCVVNfRFJTV19GQVJBTExPTjoKLQkJCXJldHVybiBNQUM4MzkwX0ZBUkFMTE9OOwotCQkJYnJlYWs7CisJY2FzZSBOVUJVU19EUlNXX0ZBUkFMTE9OOgorCQlyZXR1cm4gTUFDODM5MF9GQVJBTExPTjsKKwkJYnJlYWs7CiAKLQkJY2FzZSBOVUJVU19EUlNXX0tJTkVUSUNTOgotCQkJc3dpdGNoIChkZXYtPmRyX2h3KSB7Ci0JCQkJY2FzZSBOVUJVU19EUkhXX0lOVEVSTEFOOgotCQkJCQlyZXR1cm4gTUFDODM5MF9JTlRFUkxBTjsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcmV0dXJuIE1BQzgzOTBfS0lORVRJQ1M7Ci0JCQkJCWJyZWFrOwotCQkJfQorCWNhc2UgTlVCVVNfRFJTV19LSU5FVElDUzoKKwkJc3dpdGNoIChkZXYtPmRyX2h3KSB7CisJCWNhc2UgTlVCVVNfRFJIV19JTlRFUkxBTjoKKwkJCXJldHVybiBNQUM4MzkwX0lOVEVSTEFOOwogCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gTUFDODM5MF9LSU5FVElDUzsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOwogCi0JCWNhc2UgTlVCVVNfRFJTV19EQVlOQToKLQkJCS8vIFRoZXNlIGNvcnJlc3BvbmQgdG8gRGF5bmEgU29uaWMgY2FyZHMKLQkJCS8vIHdoaWNoIHVzZSB0aGUgbWFjc29uaWMgZHJpdmVyCi0JCQlpZiAoZGV2LT5kcl9odyA9PSBOVUJVU19EUkhXX1NNQzkxOTQgfHwKLQkJCQlkZXYtPmRyX2h3ID09IE5VQlVTX0RSSFdfSU5URVJMQU4gKQotCQkJCXJldHVybiBNQUM4MzkwX05PTkU7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIE1BQzgzOTBfREFZTkE7Ci0JCQlicmVhazsKKwljYXNlIE5VQlVTX0RSU1dfREFZTkE6CisJCS8qCisJCSAqIFRoZXNlIGNvcnJlc3BvbmQgdG8gRGF5bmEgU29uaWMgY2FyZHMKKwkJICogd2hpY2ggdXNlIHRoZSBtYWNzb25pYyBkcml2ZXIKKwkJICovCisJCWlmIChkZXYtPmRyX2h3ID09IE5VQlVTX0RSSFdfU01DOTE5NCB8fAorCQkgICAgZGV2LT5kcl9odyA9PSBOVUJVU19EUkhXX0lOVEVSTEFOKQorCQkJcmV0dXJuIE1BQzgzOTBfTk9ORTsKKwkJZWxzZQorCQkJcmV0dXJuIE1BQzgzOTBfREFZTkE7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gTUFDODM5MF9OT05FOwogfQpAQCAtMjM3LDE0ICsyNDYsMTQgQEAKIAl1bnNpZ25lZCBsb25nIG91dGRhdGEgPSAweEE1QTBCNUIwOwogCXVuc2lnbmVkIGxvbmcgaW5kYXRhID0gIDB4MDAwMDAwMDA7CiAJLyogVHJ5IHdyaXRpbmcgMzIgYml0cyAqLwotCW1lbWNweSgoY2hhciAqKW1lbWJhc2UsIChjaGFyICopJm91dGRhdGEsIDQpOworCW1lbWNweShtZW1iYXNlLCAmb3V0ZGF0YSwgNCk7CiAJLyogTm93IGNvbXBhcmUgdGhlbSAqLwogCWlmIChtZW1jbXAoKGNoYXIgKikmb3V0ZGF0YSwgKGNoYXIgKiltZW1iYXNlLCA0KSA9PSAwKQogCQlyZXR1cm4gQUNDRVNTXzMyOwogCS8qIFdyaXRlIDE2IGJpdCBvdXRwdXQgKi8KLQl3b3JkX21lbWNweV90b2NhcmQoKGNoYXIgKiltZW1iYXNlLCAoY2hhciAqKSZvdXRkYXRhLCA0KTsKKwl3b3JkX21lbWNweV90b2NhcmQobWVtYmFzZSwgJm91dGRhdGEsIDQpOwogCS8qIE5vdyByZWFkIGl0IGJhY2sgKi8KLQl3b3JkX21lbWNweV9mcm9tY2FyZCgoY2hhciAqKSZpbmRhdGEsIChjaGFyICopbWVtYmFzZSwgNCk7CisJd29yZF9tZW1jcHlfZnJvbWNhcmQoJmluZGF0YSwgbWVtYmFzZSwgNCk7CiAJaWYgKG91dGRhdGEgPT0gaW5kYXRhKQogCQlyZXR1cm4gQUNDRVNTXzE2OwogCXJldHVybiBBQ0NFU1NfVU5LTk9XTjsKQEAgLTI1OCw3ICsyNjcsNyBAQAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkvKiBDaGVjayB1cCB0byAzMksgaW4gNEsgaW5jcmVtZW50cyAqLwogCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKm0gPSAodW5zaWduZWQgc2hvcnQgKikgKG1lbWJhc2UgKyAoaSAqIDB4MTAwMCkpOworCQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqbSA9ICh1bnNpZ25lZCBzaG9ydCAqKShtZW1iYXNlICsgKGkgKiAweDEwMDApKTsKIAogCQkvKiBVbndyaXRlYWJsZSAtIHdlIGhhdmUgYSBmdWxseSBkZWNvZGVkIGNhcmQgYW5kIHRoZQogCQkgICBSQU0gZW5kIGxvY2F0ZWQgKi8KQEAgLTI3MywyOCArMjgyLDEyNyBAQAogCiAJCS8qIGNoZWNrIGZvciBwYXJ0aWFsIGRlY29kZSBhbmQgd3JhcCAqLwogCQlmb3IgKGogPSAwOyBqIDwgaTsgaisrKSB7Ci0JCQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqcCA9ICh1bnNpZ25lZCBzaG9ydCAqKSAobWVtYmFzZSArIChqICogMHgxMDAwKSk7CisJCQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqcCA9ICh1bnNpZ25lZCBzaG9ydCAqKShtZW1iYXNlICsgKGogKiAweDEwMDApKTsKIAkJCWlmICgqcCAhPSAoMHhBNUEwIHwgaikpCiAJCQkJYnJlYWs7Ci0gCQl9Ci0gCX0KKwkJfQorCX0KIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JLyogaW4gYW55IGNhc2UsIHdlIHN0b3BwZWQgb25jZSB3ZSB0cmllZCBvbmUgYmxvY2sgdG9vIG1hbnksCi0gICAgICAgICAgIG9yIG9uY2Ugd2UgcmVhY2hlZCAzMksgKi8KLSAJcmV0dXJuIGkgKiAweDEwMDA7CisJLyoKKwkgKiBpbiBhbnkgY2FzZSwgd2Ugc3RvcHBlZCBvbmNlIHdlIHRyaWVkIG9uZSBibG9jayB0b28gbWFueSwKKwkgKiBvciBvbmNlIHdlIHJlYWNoZWQgMzJLCisJICovCisJcmV0dXJuIGkgKiAweDEwMDA7Cit9CisKK3N0YXRpYyBib29sIF9faW5pdCBtYWM4MzkwX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG51YnVzX2RldiAqbmRldiwKKwkJCQllbnVtIG1hYzgzOTBfdHlwZSBjYXJkdHlwZSkKK3sKKwlzdHJ1Y3QgbnVidXNfZGlyIGRpcjsKKwlzdHJ1Y3QgbnVidXNfZGlyZW50IGVudDsKKwlpbnQgb2Zmc2V0OworCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICppOworCisJcHJpbnRrX29uY2UoS0VSTl9JTkZPIHByX2ZtdCgiJXMiKSwgdmVyc2lvbik7CisKKwlkZXYtPmlycSA9IFNMT1QySVJRKG5kZXYtPmJvYXJkLT5zbG90KTsKKwkvKiBUaGlzIGlzIGdldHRpbmcgdG8gYmUgYSBoYWJpdCAqLworCWRldi0+YmFzZV9hZGRyID0gKG5kZXYtPmJvYXJkLT5zbG90X2FkZHIgfAorCQkJICAoKG5kZXYtPmJvYXJkLT5zbG90ICYgMHhmKSA8PCAyMCkpOworCisJLyoKKwkgKiBHZXQgc29tZSBOdWJ1cyBpbmZvIC0gd2Ugd2lsbCB0cnVzdCB0aGUgY2FyZCdzIGlkZWEKKwkgKiBvZiB3aGVyZSBpdHMgbWVtb3J5IGFuZCByZWdpc3RlcnMgYXJlLgorCSAqLworCisJaWYgKG51YnVzX2dldF9mdW5jX2RpcihuZGV2LCAmZGlyKSA9PSAtMSkgeworCQlwcl9lcnIoIiVzOiBVbmFibGUgdG8gZ2V0IE51YnVzIGZ1bmN0aW9uYWwgZGlyZWN0b3J5IGZvciBzbG90ICVYIVxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgbmRldi0+Ym9hcmQtPnNsb3QpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogR2V0IHRoZSBNQUMgYWRkcmVzcyAqLworCWlmIChudWJ1c19maW5kX3JzcmMoJmRpciwgTlVCVVNfUkVTSURfTUFDX0FERFJFU1MsICZlbnQpID09IC0xKSB7CisJCXByX2luZm8oIiVzOiBDb3VsZG4ndCBnZXQgTUFDIGFkZHJlc3MhXG4iLCBkZXYtPm5hbWUpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJbnVidXNfZ2V0X3JzcmNfbWVtKGRldi0+ZGV2X2FkZHIsICZlbnQsIDYpOworCisJaWYgKHVzZXJlc291cmNlc1tjYXJkdHlwZV0gPT0gMSkgeworCQludWJ1c19yZXdpbmRkaXIoJmRpcik7CisJCWlmIChudWJ1c19maW5kX3JzcmMoJmRpciwgTlVCVVNfUkVTSURfTUlOT1JfQkFTRU9TLAorCQkJCSAgICAmZW50KSA9PSAtMSkgeworCQkJcHJfZXJyKCIlczogTWVtb3J5IG9mZnNldCByZXNvdXJjZSBmb3Igc2xvdCAlWCBub3QgZm91bmQhXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgbmRldi0+Ym9hcmQtPnNsb3QpOworCQkJcmV0dXJuIGZhbHNlOworCQl9CisJCW51YnVzX2dldF9yc3JjX21lbSgmb2Zmc2V0LCAmZW50LCA0KTsKKwkJZGV2LT5tZW1fc3RhcnQgPSBkZXYtPmJhc2VfYWRkciArIG9mZnNldDsKKwkJLyogeWVzLCB0aGlzIGlzIGhvdyB0aGUgQXBwbGUgZHJpdmVyIGRvZXMgaXQgKi8KKwkJZGV2LT5iYXNlX2FkZHIgPSBkZXYtPm1lbV9zdGFydCArIDB4MTAwMDA7CisJCW51YnVzX3Jld2luZGRpcigmZGlyKTsKKwkJaWYgKG51YnVzX2ZpbmRfcnNyYygmZGlyLCBOVUJVU19SRVNJRF9NSU5PUl9MRU5HVEgsCisJCQkJICAgICZlbnQpID09IC0xKSB7CisJCQlwcl9pbmZvKCIlczogTWVtb3J5IGxlbmd0aCByZXNvdXJjZSBmb3Igc2xvdCAlWCBub3QgZm91bmQsIHByb2JpbmdcbiIsCisJCQkJZGV2LT5uYW1lLCBuZGV2LT5ib2FyZC0+c2xvdCk7CisJCQlvZmZzZXQgPSBtYWM4MzkwX21lbXNpemUoZGV2LT5tZW1fc3RhcnQpOworCQl9IGVsc2UgeworCQkJbnVidXNfZ2V0X3JzcmNfbWVtKCZvZmZzZXQsICZlbnQsIDQpOworCQl9CisJCWRldi0+bWVtX2VuZCA9IGRldi0+bWVtX3N0YXJ0ICsgb2Zmc2V0OworCX0gZWxzZSB7CisJCXN3aXRjaCAoY2FyZHR5cGUpIHsKKwkJY2FzZSBNQUM4MzkwX0tJTkVUSUNTOgorCQljYXNlIE1BQzgzOTBfREFZTkE6IC8qIGl0J3MgdGhlIHNhbWUgKi8KKwkJCWRldi0+YmFzZV9hZGRyID0gKGludCkobmRldi0+Ym9hcmQtPnNsb3RfYWRkciArCisJCQkJCSAgICAgICBEQVlOQV84MzkwX0JBU0UpOworCQkJZGV2LT5tZW1fc3RhcnQgPSAoaW50KShuZGV2LT5ib2FyZC0+c2xvdF9hZGRyICsKKwkJCQkJICAgICAgIERBWU5BXzgzOTBfTUVNKTsKKwkJCWRldi0+bWVtX2VuZCA9IGRldi0+bWVtX3N0YXJ0ICsKKwkJCQkgICAgICAgbWFjODM5MF9tZW1zaXplKGRldi0+bWVtX3N0YXJ0KTsKKwkJCWJyZWFrOworCQljYXNlIE1BQzgzOTBfSU5URVJMQU46CisJCQlkZXYtPmJhc2VfYWRkciA9IChpbnQpKG5kZXYtPmJvYXJkLT5zbG90X2FkZHIgKworCQkJCQkgICAgICAgSU5URVJMQU5fODM5MF9CQVNFKTsKKwkJCWRldi0+bWVtX3N0YXJ0ID0gKGludCkobmRldi0+Ym9hcmQtPnNsb3RfYWRkciArCisJCQkJCSAgICAgICBJTlRFUkxBTl84MzkwX01FTSk7CisJCQlkZXYtPm1lbV9lbmQgPSBkZXYtPm1lbV9zdGFydCArCisJCQkJICAgICAgIG1hYzgzOTBfbWVtc2l6ZShkZXYtPm1lbV9zdGFydCk7CisJCQlicmVhazsKKwkJY2FzZSBNQUM4MzkwX0NBQkxFVFJPTjoKKwkJCWRldi0+YmFzZV9hZGRyID0gKGludCkobmRldi0+Ym9hcmQtPnNsb3RfYWRkciArCisJCQkJCSAgICAgICBDQUJMRVRST05fODM5MF9CQVNFKTsKKwkJCWRldi0+bWVtX3N0YXJ0ID0gKGludCkobmRldi0+Ym9hcmQtPnNsb3RfYWRkciArCisJCQkJCSAgICAgICBDQUJMRVRST05fODM5MF9NRU0pOworCQkJLyogVGhlIGJhc2UgYWRkcmVzcyBpcyB1bnJlYWRhYmxlIGlmIDB4MDAKKwkJCSAqIGhhcyBiZWVuIHdyaXR0ZW4gdG8gdGhlIGNvbW1hbmQgcmVnaXN0ZXIKKwkJCSAqIFJlc2V0IHRoZSBjaGlwIGJ5IHdyaXRpbmcgRTgzOTBfTk9ETUEgKworCQkJICogICBFODM5MF9QQUdFMCArIEU4MzkwX1NUT1AganVzdCB0byBiZQorCQkJICogICBzdXJlCisJCQkgKi8KKwkJCWkgPSAodm9pZCAqKWRldi0+YmFzZV9hZGRyOworCQkJKmkgPSAweDIxOworCQkJZGV2LT5tZW1fZW5kID0gZGV2LT5tZW1fc3RhcnQgKworCQkJCSAgICAgICBtYWM4MzkwX21lbXNpemUoZGV2LT5tZW1fc3RhcnQpOworCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCXByX2VycigiQ2FyZCB0eXBlICVzIGlzIHVuc3VwcG9ydGVkLCBzb3JyeVxuIiwKKwkJCSAgICAgICBuZGV2LT5ib2FyZC0+bmFtZSk7CisJCQlyZXR1cm4gZmFsc2U7CisJCX0KKwl9CisKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogc3RydWN0IG5ldF9kZXZpY2UgKiBfX2luaXQgbWFjODM5MF9wcm9iZShpbnQgdW5pdCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICppOwotCWludCB2ZXJzaW9uX2Rpc3AgPSAwOwotCXN0cnVjdCBudWJ1c19kZXYgKiBuZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgbnVidXNfZGV2ICpuZGV2ID0gTlVMTDsKIAlpbnQgZXJyID0gLUVOT0RFVjsKIAotCXN0cnVjdCBudWJ1c19kaXIgZGlyOwotCXN0cnVjdCBudWJ1c19kaXJlbnQgZW50OwotCWludCBvZmZzZXQ7CiAJc3RhdGljIHVuc2lnbmVkIGludCBzbG90czsKIAogCWVudW0gbWFjODM5MF90eXBlIGNhcmR0eXBlOwpAQCAtMzExLDExOCArNDE5LDE5IEBACiAJaWYgKHVuaXQgPj0gMCkKIAkJc3ByaW50ZihkZXYtPm5hbWUsICJldGglZCIsIHVuaXQpOwogCi0Jd2hpbGUgKChuZGV2ID0gbnVidXNfZmluZF90eXBlKE5VQlVTX0NBVF9ORVRXT1JLLCBOVUJVU19UWVBFX0VUSEVSTkVULCBuZGV2KSkpIHsKKwl3aGlsZSAoKG5kZXYgPSBudWJ1c19maW5kX3R5cGUoTlVCVVNfQ0FUX05FVFdPUkssIE5VQlVTX1RZUEVfRVRIRVJORVQsCisJCQkJICAgICAgIG5kZXYpKSkgewogCQkvKiBIYXZlIHdlIHNlZW4gaXQgYWxyZWFkeT8gKi8KLQkJaWYgKHNsb3RzICYgKDE8PG5kZXYtPmJvYXJkLT5zbG90KSkKKwkJaWYgKHNsb3RzICYgKDEgPDwgbmRldi0+Ym9hcmQtPnNsb3QpKQogCQkJY29udGludWU7Ci0JCXNsb3RzIHw9IDE8PG5kZXYtPmJvYXJkLT5zbG90OworCQlzbG90cyB8PSAxIDw8IG5kZXYtPmJvYXJkLT5zbG90OwogCi0JCWlmICgoY2FyZHR5cGUgPSBtYWM4MzkwX2lkZW50KG5kZXYpKSA9PSBNQUM4MzkwX05PTkUpCisJCWNhcmR0eXBlID0gbWFjODM5MF9pZGVudChuZGV2KTsKKwkJaWYgKGNhcmR0eXBlID09IE1BQzgzOTBfTk9ORSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmICh2ZXJzaW9uX2Rpc3AgPT0gMCkgewotCQkJdmVyc2lvbl9kaXNwID0gMTsKLQkJCXByaW50ayh2ZXJzaW9uKTsKLQkJfQotCi0JCWRldi0+aXJxID0gU0xPVDJJUlEobmRldi0+Ym9hcmQtPnNsb3QpOwotCQkvKiBUaGlzIGlzIGdldHRpbmcgdG8gYmUgYSBoYWJpdCAqLwotCQlkZXYtPmJhc2VfYWRkciA9IG5kZXYtPmJvYXJkLT5zbG90X2FkZHIgfCAoKG5kZXYtPmJvYXJkLT5zbG90JjB4ZikgPDwgMjApOwotCi0JCS8qIEdldCBzb21lIE51YnVzIGluZm8gLSB3ZSB3aWxsIHRydXN0IHRoZSBjYXJkJ3MgaWRlYQotCQkgICBvZiB3aGVyZSBpdHMgbWVtb3J5IGFuZCByZWdpc3RlcnMgYXJlLiAqLwotCi0JCWlmIChudWJ1c19nZXRfZnVuY19kaXIobmRldiwgJmRpcikgPT0gLTEpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IFVuYWJsZSB0byBnZXQgTnVidXMgZnVuY3Rpb25hbCIKLQkJCQkJIiBkaXJlY3RvcnkgZm9yIHNsb3QgJVghXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgbmRldi0+Ym9hcmQtPnNsb3QpOworCQlpZiAoIW1hYzgzOTBfaW5pdChkZXYsIG5kZXYsIGNhcmR0eXBlKSkKIAkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyogR2V0IHRoZSBNQUMgYWRkcmVzcyAqLwotCQlpZiAoKG51YnVzX2ZpbmRfcnNyYygmZGlyLCBOVUJVU19SRVNJRF9NQUNfQUREUkVTUywgJmVudCkpID09IC0xKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogQ291bGRuJ3QgZ2V0IE1BQyBhZGRyZXNzIVxuIiwKLQkJCQkJZGV2LT5uYW1lKTsKLQkJCWNvbnRpbnVlOwotCQl9IGVsc2UgewotCQkJbnVidXNfZ2V0X3JzcmNfbWVtKGRldi0+ZGV2X2FkZHIsICZlbnQsIDYpOwotCQl9Ci0KLQkJaWYgKHVzZXJlc291cmNlc1tjYXJkdHlwZV0gPT0gMSkgewotCQkJbnVidXNfcmV3aW5kZGlyKCZkaXIpOwotCQkJaWYgKG51YnVzX2ZpbmRfcnNyYygmZGlyLCBOVUJVU19SRVNJRF9NSU5PUl9CQVNFT1MsICZlbnQpID09IC0xKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogTWVtb3J5IG9mZnNldCByZXNvdXJjZSIKLQkJCQkJCSIgZm9yIHNsb3QgJVggbm90IGZvdW5kIVxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBuZGV2LT5ib2FyZC0+c2xvdCk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQludWJ1c19nZXRfcnNyY19tZW0oJm9mZnNldCwgJmVudCwgNCk7Ci0JCQlkZXYtPm1lbV9zdGFydCA9IGRldi0+YmFzZV9hZGRyICsgb2Zmc2V0OwotCQkJLyogeWVzLCB0aGlzIGlzIGhvdyB0aGUgQXBwbGUgZHJpdmVyIGRvZXMgaXQgKi8KLQkJCWRldi0+YmFzZV9hZGRyID0gZGV2LT5tZW1fc3RhcnQgKyAweDEwMDAwOwotCQkJbnVidXNfcmV3aW5kZGlyKCZkaXIpOwotCQkJaWYgKG51YnVzX2ZpbmRfcnNyYygmZGlyLCBOVUJVU19SRVNJRF9NSU5PUl9MRU5HVEgsICZlbnQpID09IC0xKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1lbW9yeSBsZW5ndGggcmVzb3VyY2UiCi0JCQkJCQkgIiBmb3Igc2xvdCAlWCBub3QgZm91bmQiCi0JCQkJCQkgIiwgcHJvYmluZ1xuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBuZGV2LT5ib2FyZC0+c2xvdCk7Ci0JCQkJb2Zmc2V0ID0gbWFjODM5MF9tZW1zaXplKGRldi0+bWVtX3N0YXJ0KTsKLQkJCQl9IGVsc2UgewotCQkJCQludWJ1c19nZXRfcnNyY19tZW0oJm9mZnNldCwgJmVudCwgNCk7Ci0JCQkJfQotCQkJZGV2LT5tZW1fZW5kID0gZGV2LT5tZW1fc3RhcnQgKyBvZmZzZXQ7Ci0JCX0gZWxzZSB7Ci0JCQlzd2l0Y2ggKGNhcmR0eXBlKSB7Ci0JCQkJY2FzZSBNQUM4MzkwX0tJTkVUSUNTOgotCQkJCWNhc2UgTUFDODM5MF9EQVlOQTogLyogaXQncyB0aGUgc2FtZSAqLwotCQkJCQlkZXYtPmJhc2VfYWRkciA9Ci0JCQkJCQkoaW50KShuZGV2LT5ib2FyZC0+c2xvdF9hZGRyICsKLQkJCQkJCURBWU5BXzgzOTBfQkFTRSk7Ci0JCQkJCWRldi0+bWVtX3N0YXJ0ID0KLQkJCQkJCShpbnQpKG5kZXYtPmJvYXJkLT5zbG90X2FkZHIgKwotCQkJCQkJREFZTkFfODM5MF9NRU0pOwotCQkJCQlkZXYtPm1lbV9lbmQgPQotCQkJCQkJZGV2LT5tZW1fc3RhcnQgKwotCQkJCQkJbWFjODM5MF9tZW1zaXplKGRldi0+bWVtX3N0YXJ0KTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBNQUM4MzkwX0lOVEVSTEFOOgotCQkJCQlkZXYtPmJhc2VfYWRkciA9Ci0JCQkJCQkoaW50KShuZGV2LT5ib2FyZC0+c2xvdF9hZGRyICsKLQkJCQkJCUlOVEVSTEFOXzgzOTBfQkFTRSk7Ci0JCQkJCWRldi0+bWVtX3N0YXJ0ID0KLQkJCQkJCShpbnQpKG5kZXYtPmJvYXJkLT5zbG90X2FkZHIgKwotCQkJCQkJSU5URVJMQU5fODM5MF9NRU0pOwotCQkJCQlkZXYtPm1lbV9lbmQgPQotCQkJCQkJZGV2LT5tZW1fc3RhcnQgKwotCQkJCQkJbWFjODM5MF9tZW1zaXplKGRldi0+bWVtX3N0YXJ0KTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBNQUM4MzkwX0NBQkxFVFJPTjoKLQkJCQkJZGV2LT5iYXNlX2FkZHIgPQotCQkJCQkJKGludCkobmRldi0+Ym9hcmQtPnNsb3RfYWRkciArCi0JCQkJCQlDQUJMRVRST05fODM5MF9CQVNFKTsKLQkJCQkJZGV2LT5tZW1fc3RhcnQgPQotCQkJCQkJKGludCkobmRldi0+Ym9hcmQtPnNsb3RfYWRkciArCi0JCQkJCQlDQUJMRVRST05fODM5MF9NRU0pOwotCQkJCQkvKiBUaGUgYmFzZSBhZGRyZXNzIGlzIHVucmVhZGFibGUgaWYgMHgwMAotCQkJCQkgKiBoYXMgYmVlbiB3cml0dGVuIHRvIHRoZSBjb21tYW5kIHJlZ2lzdGVyCi0JCQkJCSAqIFJlc2V0IHRoZSBjaGlwIGJ5IHdyaXRpbmcgRTgzOTBfTk9ETUEgKwotCQkJCQkgKiAgIEU4MzkwX1BBR0UwICsgRTgzOTBfU1RPUCBqdXN0IHRvIGJlCi0JCQkJCSAqICAgc3VyZQotCQkJCQkgKi8KLQkJCQkJaSA9ICh2b2lkICopZGV2LT5iYXNlX2FkZHI7Ci0JCQkJCSppID0gMHgyMTsKLQkJCQkJZGV2LT5tZW1fZW5kID0KLQkJCQkJCWRldi0+bWVtX3N0YXJ0ICsKLQkJCQkJCW1hYzgzOTBfbWVtc2l6ZShkZXYtPm1lbV9zdGFydCk7Ci0JCQkJCWJyZWFrOwotCi0JCQkJZGVmYXVsdDoKLQkJCQkJcHJpbnRrKEtFUk5fRVJSICJDYXJkIHR5cGUgJXMgaXMiCi0JCQkJCSAgICAgICAiIHVuc3VwcG9ydGVkLCBzb3JyeVxuIiwKLQkJCQkJICAgICAgIG5kZXYtPmJvYXJkLT5uYW1lKTsKLQkJCQkJY29udGludWU7Ci0JCQl9Ci0JCX0KIAogCQkvKiBEbyB0aGUgbmFzdHkgODM5MCBzdHVmZiAqLwogCQlpZiAoIW1hYzgzOTBfaW5pdGRldihkZXYsIG5kZXYsIGNhcmR0eXBlKSkKQEAgLTQ1OCw3ICs0NjcsNyBAQAogCQlkZXZfbWFjODkwW2ldID0gZGV2OwogCX0KIAlpZiAoIWkpIHsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJtYWM4MzkwLmM6IE5vIHVzZWFibGUgY2FyZHMgZm91bmQsIGRyaXZlciBOT1QgaW5zdGFsbGVkLlxuIik7CisJCXByX25vdGljZSgiTm8gdXNlYWJsZSBjYXJkcyBmb3VuZCwgZHJpdmVyIE5PVCBpbnN0YWxsZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwpAQCAtNDkzLDIyICs1MDIsMjMgQEAKICNlbmRpZgogfTsKIAotc3RhdGljIGludCBfX2luaXQgbWFjODM5MF9pbml0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LCBzdHJ1Y3QgbnVidXNfZGV2ICogbmRldiwKLQkJCSAgICBlbnVtIG1hYzgzOTBfdHlwZSB0eXBlKQorc3RhdGljIGludCBfX2luaXQgbWFjODM5MF9pbml0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICBzdHJ1Y3QgbnVidXNfZGV2ICpuZGV2LAorCQkJCSAgZW51bSBtYWM4MzkwX3R5cGUgdHlwZSkKIHsKLQlzdGF0aWMgdTMyIGZ3cmQ0X29mZnNldHNbMTZdPXsKKwlzdGF0aWMgdTMyIGZ3cmQ0X29mZnNldHNbMTZdID0gewogCQkwLCAgICAgIDQsICAgICAgOCwgICAgICAxMiwKIAkJMTYsICAgICAyMCwgICAgIDI0LCAgICAgMjgsCiAJCTMyLCAgICAgMzYsICAgICA0MCwgICAgIDQ0LAogCQk0OCwgICAgIDUyLCAgICAgNTYsICAgICA2MAogCX07Ci0Jc3RhdGljIHUzMiBiYWNrNF9vZmZzZXRzWzE2XT17CisJc3RhdGljIHUzMiBiYWNrNF9vZmZzZXRzWzE2XSA9IHsKIAkJNjAsICAgICA1NiwgICAgIDUyLCAgICAgNDgsCiAJCTQ0LCAgICAgNDAsICAgICAzNiwgICAgIDMyLAogCQkyOCwgICAgIDI0LCAgICAgMjAsICAgICAxNiwKIAkJMTIsICAgICA4LCAgICAgIDQsICAgICAgMAogCX07Ci0Jc3RhdGljIHUzMiBmd3JkMl9vZmZzZXRzWzE2XT17CisJc3RhdGljIHUzMiBmd3JkMl9vZmZzZXRzWzE2XSA9IHsKIAkJMCwgICAgICAyLCAgICAgIDQsICAgICAgNiwKIAkJOCwgICAgIDEwLCAgICAgMTIsICAgICAxNCwKIAkJMTYsICAgIDE4LCAgICAgMjAsICAgICAyMiwKQEAgLTUyNiw0NyArNTM2LDQ3IEBACiAKIAkvKiBDYWJsZXRyb24ncyBUWC9SWCBidWZmZXJzIGFyZSBiYWNrd2FyZHMgKi8KIAlpZiAodHlwZSA9PSBNQUM4MzkwX0NBQkxFVFJPTikgewotICAgICAgICAgICAgICAgZWlfc3RhdHVzLnR4X3N0YXJ0X3BhZ2UgPSBDQUJMRVRST05fVFhfU1RBUlRfUEc7Ci0gICAgICAgICAgICAgICBlaV9zdGF0dXMucnhfc3RhcnRfcGFnZSA9IENBQkxFVFJPTl9SWF9TVEFSVF9QRzsKLSAgICAgICAgICAgICAgIGVpX3N0YXR1cy5zdG9wX3BhZ2UgPSBDQUJMRVRST05fUlhfU1RPUF9QRzsKLSAgICAgICAgICAgICAgIGVpX3N0YXR1cy5ybWVtX3N0YXJ0ID0gZGV2LT5tZW1fc3RhcnQ7Ci0gICAgICAgICAgICAgICBlaV9zdGF0dXMucm1lbV9lbmQgPSBkZXYtPm1lbV9zdGFydCArIENBQkxFVFJPTl9SWF9TVE9QX1BHKjI1NjsKKwkJZWlfc3RhdHVzLnR4X3N0YXJ0X3BhZ2UgPSBDQUJMRVRST05fVFhfU1RBUlRfUEc7CisJCWVpX3N0YXR1cy5yeF9zdGFydF9wYWdlID0gQ0FCTEVUUk9OX1JYX1NUQVJUX1BHOworCQllaV9zdGF0dXMuc3RvcF9wYWdlID0gQ0FCTEVUUk9OX1JYX1NUT1BfUEc7CisJCWVpX3N0YXR1cy5ybWVtX3N0YXJ0ID0gZGV2LT5tZW1fc3RhcnQ7CisJCWVpX3N0YXR1cy5ybWVtX2VuZCA9IGRldi0+bWVtX3N0YXJ0ICsgQ0FCTEVUUk9OX1JYX1NUT1BfUEcqMjU2OwogCX0gZWxzZSB7Ci0gICAgICAgICAgICAgICBlaV9zdGF0dXMudHhfc3RhcnRfcGFnZSA9IFdEX1NUQVJUX1BHOwotICAgICAgICAgICAgICAgZWlfc3RhdHVzLnJ4X3N0YXJ0X3BhZ2UgPSBXRF9TVEFSVF9QRyArIFRYX1BBR0VTOwotICAgICAgICAgICAgICAgZWlfc3RhdHVzLnN0b3BfcGFnZSA9IChkZXYtPm1lbV9lbmQgLSBkZXYtPm1lbV9zdGFydCkvMjU2OwotICAgICAgICAgICAgICAgZWlfc3RhdHVzLnJtZW1fc3RhcnQgPSBkZXYtPm1lbV9zdGFydCArIFRYX1BBR0VTKjI1NjsKLSAgICAgICAgICAgICAgIGVpX3N0YXR1cy5ybWVtX2VuZCA9IGRldi0+bWVtX2VuZDsKKwkJZWlfc3RhdHVzLnR4X3N0YXJ0X3BhZ2UgPSBXRF9TVEFSVF9QRzsKKwkJZWlfc3RhdHVzLnJ4X3N0YXJ0X3BhZ2UgPSBXRF9TVEFSVF9QRyArIFRYX1BBR0VTOworCQllaV9zdGF0dXMuc3RvcF9wYWdlID0gKGRldi0+bWVtX2VuZCAtIGRldi0+bWVtX3N0YXJ0KS8yNTY7CisJCWVpX3N0YXR1cy5ybWVtX3N0YXJ0ID0gZGV2LT5tZW1fc3RhcnQgKyBUWF9QQUdFUyoyNTY7CisJCWVpX3N0YXR1cy5ybWVtX2VuZCA9IGRldi0+bWVtX2VuZDsKIAl9CiAKIAkvKiBGaWxsIGluIG1vZGVsLXNwZWNpZmljIGluZm9ybWF0aW9uIGFuZCBmdW5jdGlvbnMgKi8KLQlzd2l0Y2godHlwZSkgeworCXN3aXRjaCAodHlwZSkgewogCWNhc2UgTUFDODM5MF9GQVJBTExPTjoKIAljYXNlIE1BQzgzOTBfQVBQTEU6Ci0JCXN3aXRjaChtYWM4MzkwX3Rlc3RpbyhkZXYtPm1lbV9zdGFydCkpIHsKLQkJCWNhc2UgQUNDRVNTX1VOS05PV046Ci0JCQkJcHJpbnRrKCJEb24ndCBrbm93IGhvdyB0byBhY2Nlc3MgY2FyZCBtZW1vcnkhXG4iKTsKLQkJCQlyZXR1cm4gLUVOT0RFVjsKLQkJCQlicmVhazsKKwkJc3dpdGNoIChtYWM4MzkwX3Rlc3RpbyhkZXYtPm1lbV9zdGFydCkpIHsKKwkJY2FzZSBBQ0NFU1NfVU5LTk9XTjoKKwkJCXByX2luZm8oIkRvbid0IGtub3cgaG93IHRvIGFjY2VzcyBjYXJkIG1lbW9yeSFcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCQlicmVhazsKIAotCQkJY2FzZSBBQ0NFU1NfMTY6Ci0JCQkJLyogMTYgYml0IGNhcmQsIHJlZ2lzdGVyIG1hcCBpcyByZXZlcnNlZCAqLwotCQkJCWVpX3N0YXR1cy5yZXNldF84MzkwID0gJm1hYzgzOTBfbm9fcmVzZXQ7Ci0JCQkJZWlfc3RhdHVzLmJsb2NrX2lucHV0ID0gJnNsb3dfc2FuZV9ibG9ja19pbnB1dDsKLQkJCQllaV9zdGF0dXMuYmxvY2tfb3V0cHV0ID0gJnNsb3dfc2FuZV9ibG9ja19vdXRwdXQ7Ci0JCQkJZWlfc3RhdHVzLmdldF84MzkwX2hkciA9ICZzbG93X3NhbmVfZ2V0XzgzOTBfaGRyOwotCQkJCWVpX3N0YXR1cy5yZWdfb2Zmc2V0ID0gYmFjazRfb2Zmc2V0czsKLQkJCQlicmVhazsKKwkJY2FzZSBBQ0NFU1NfMTY6CisJCQkvKiAxNiBiaXQgY2FyZCwgcmVnaXN0ZXIgbWFwIGlzIHJldmVyc2VkICovCisJCQllaV9zdGF0dXMucmVzZXRfODM5MCA9ICZtYWM4MzkwX25vX3Jlc2V0OworCQkJZWlfc3RhdHVzLmJsb2NrX2lucHV0ID0gJnNsb3dfc2FuZV9ibG9ja19pbnB1dDsKKwkJCWVpX3N0YXR1cy5ibG9ja19vdXRwdXQgPSAmc2xvd19zYW5lX2Jsb2NrX291dHB1dDsKKwkJCWVpX3N0YXR1cy5nZXRfODM5MF9oZHIgPSAmc2xvd19zYW5lX2dldF84MzkwX2hkcjsKKwkJCWVpX3N0YXR1cy5yZWdfb2Zmc2V0ID0gYmFjazRfb2Zmc2V0czsKKwkJCWJyZWFrOwogCi0JCQljYXNlIEFDQ0VTU18zMjoKLQkJCQkvKiAzMiBiaXQgY2FyZCwgcmVnaXN0ZXIgbWFwIGlzIHJldmVyc2VkICovCi0JCQkJZWlfc3RhdHVzLnJlc2V0XzgzOTAgPSAmbWFjODM5MF9ub19yZXNldDsKLQkJCQllaV9zdGF0dXMuYmxvY2tfaW5wdXQgPSAmc2FuZV9ibG9ja19pbnB1dDsKLQkJCQllaV9zdGF0dXMuYmxvY2tfb3V0cHV0ID0gJnNhbmVfYmxvY2tfb3V0cHV0OwotCQkJCWVpX3N0YXR1cy5nZXRfODM5MF9oZHIgPSAmc2FuZV9nZXRfODM5MF9oZHI7Ci0JCQkJZWlfc3RhdHVzLnJlZ19vZmZzZXQgPSBiYWNrNF9vZmZzZXRzOwotCQkJCWFjY2Vzc19iaXRtb2RlID0gMTsKLQkJCQlicmVhazsKKwkJY2FzZSBBQ0NFU1NfMzI6CisJCQkvKiAzMiBiaXQgY2FyZCwgcmVnaXN0ZXIgbWFwIGlzIHJldmVyc2VkICovCisJCQllaV9zdGF0dXMucmVzZXRfODM5MCA9ICZtYWM4MzkwX25vX3Jlc2V0OworCQkJZWlfc3RhdHVzLmJsb2NrX2lucHV0ID0gJnNhbmVfYmxvY2tfaW5wdXQ7CisJCQllaV9zdGF0dXMuYmxvY2tfb3V0cHV0ID0gJnNhbmVfYmxvY2tfb3V0cHV0OworCQkJZWlfc3RhdHVzLmdldF84MzkwX2hkciA9ICZzYW5lX2dldF84MzkwX2hkcjsKKwkJCWVpX3N0YXR1cy5yZWdfb2Zmc2V0ID0gYmFjazRfb2Zmc2V0czsKKwkJCWFjY2Vzc19iaXRtb2RlID0gMTsKKwkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwogCkBAIC02MDgsMjQgKzYxOCwyNSBAQAogCQllaV9zdGF0dXMuYmxvY2tfaW5wdXQgPSAmc2xvd19zYW5lX2Jsb2NrX2lucHV0OwogCQllaV9zdGF0dXMuYmxvY2tfb3V0cHV0ID0gJnNsb3dfc2FuZV9ibG9ja19vdXRwdXQ7CiAJCWVpX3N0YXR1cy5nZXRfODM5MF9oZHIgPSAmc2xvd19zYW5lX2dldF84MzkwX2hkcjsKLQkgICAgICAgIGVpX3N0YXR1cy5yZWdfb2Zmc2V0ID0gZndyZDRfb2Zmc2V0czsKLQkgICAgICAgIGJyZWFrOworCQllaV9zdGF0dXMucmVnX29mZnNldCA9IGZ3cmQ0X29mZnNldHM7CisJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJDYXJkIHR5cGUgJXMgaXMgdW5zdXBwb3J0ZWQsIHNvcnJ5XG4iLCBuZGV2LT5ib2FyZC0+bmFtZSk7CisJCXByX2VycigiQ2FyZCB0eXBlICVzIGlzIHVuc3VwcG9ydGVkLCBzb3JyeVxuIiwKKwkJICAgICAgIG5kZXYtPmJvYXJkLT5uYW1lKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJX19OUzgzOTBfaW5pdChkZXYsIDApOwogCiAJLyogR29vZCwgZG9uZSwgbm93IHNwaXQgb3V0IHNvbWUgbWVzc2FnZXMgKi8KLQlwcmludGsoS0VSTl9JTkZPICIlczogJXMgaW4gc2xvdCAlWCAodHlwZSAlcylcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgbmRldi0+Ym9hcmQtPm5hbWUsIG5kZXYtPmJvYXJkLT5zbG90LCBjYXJkbmFtZVt0eXBlXSk7Ci0JcHJpbnRrKEtFUk5fSU5GTwotCSAgICAgICAiTUFDICVwTSBJUlEgJWQsICVkIEtCIHNoYXJlZCBtZW1vcnkgYXQgJSNseCwgJWQtYml0IGFjY2Vzcy5cbiIsCi0JICAgICAgIGRldi0+ZGV2X2FkZHIsIGRldi0+aXJxLAotCSAgICAgICAodW5zaWduZWQgaW50KShkZXYtPm1lbV9lbmQgLSBkZXYtPm1lbV9zdGFydCkgPj4gMTAsCi0JICAgICAgIGRldi0+bWVtX3N0YXJ0LCBhY2Nlc3NfYml0bW9kZSA/IDMyIDogMTYpOworCXByX2luZm8oIiVzOiAlcyBpbiBzbG90ICVYICh0eXBlICVzKVxuIiwKKwkJZGV2LT5uYW1lLCBuZGV2LT5ib2FyZC0+bmFtZSwgbmRldi0+Ym9hcmQtPnNsb3QsCisJCWNhcmRuYW1lW3R5cGVdKTsKKwlwcl9pbmZvKCJNQUMgJXBNIElSUSAlZCwgJWQgS0Igc2hhcmVkIG1lbW9yeSBhdCAlI2x4LCAlZC1iaXQgYWNjZXNzLlxuIiwKKwkJZGV2LT5kZXZfYWRkciwgZGV2LT5pcnEsCisJCSh1bnNpZ25lZCBpbnQpKGRldi0+bWVtX2VuZCAtIGRldi0+bWVtX3N0YXJ0KSA+PiAxMCwKKwkJZGV2LT5tZW1fc3RhcnQsIGFjY2Vzc19iaXRtb2RlID8gMzIgOiAxNik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTYzMyw3ICs2NDQsNyBAQAogewogCV9fZWlfb3BlbihkZXYpOwogCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgX19laV9pbnRlcnJ1cHQsIDAsICI4MzkwIEV0aGVybmV0IiwgZGV2KSkgewotCQlwcmludGsgKCIlczogdW5hYmxlIHRvIGdldCBJUlEgJWQuXG4iLCBkZXYtPm5hbWUsIGRldi0+aXJxKTsKKwkJcHJfaW5mbygiJXM6IHVuYWJsZSB0byBnZXQgSVJRICVkLlxuIiwgZGV2LT5uYW1lLCBkZXYtPmlycSk7CiAJCXJldHVybiAtRUFHQUlOOwogCX0KIAlyZXR1cm4gMDsKQEAgLTY1MCw3MiArNjYxLDcxIEBACiB7CiAJZWlfc3RhdHVzLnR4aW5nID0gMDsKIAlpZiAoZWlfZGVidWcgPiAxKQotCQlwcmludGsoInJlc2V0IG5vdCBzdXBwb3J0ZWRcbiIpOworCQlwcl9pbmZvKCJyZXNldCBub3Qgc3VwcG9ydGVkXG4iKTsKIAlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkIGludGVybGFuX3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JdW5zaWduZWQgY2hhciAqdGFyZ2V0PW51YnVzX3Nsb3RfYWRkcihJUlEyU0xPVChkZXYtPmlycSkpOworCXVuc2lnbmVkIGNoYXIgKnRhcmdldCA9IG51YnVzX3Nsb3RfYWRkcihJUlEyU0xPVChkZXYtPmlycSkpOwogCWlmIChlaV9kZWJ1ZyA+IDEpCi0JCXByaW50aygiTmVlZCB0byByZXNldCB0aGUgTlM4MzkwIHQ9JWx1Li4uIiwgamlmZmllcyk7CisJCXByX2luZm8oIk5lZWQgdG8gcmVzZXQgdGhlIE5TODM5MCB0PSVsdS4uLiIsIGppZmZpZXMpOwogCWVpX3N0YXR1cy50eGluZyA9IDA7CiAJdGFyZ2V0WzB4QzAwMDBdID0gMDsKIAlpZiAoZWlfZGVidWcgPiAxKQotCQlwcmludGsoInJlc2V0IGNvbXBsZXRlXG4iKTsKKwkJcHJfY29udCgicmVzZXQgY29tcGxldGVcbiIpOwogCXJldHVybjsKIH0KIAogLyogZGF5bmFfbWVtY3B5X2Zyb21pby9kYXluYV9tZW1jcHlfdG9pbyAqLwogLyogZGlyZWN0bHkgZnJvbSBkYXluYXBvcnQuYyBieSBBbGFuIENveCAqLwotc3RhdGljIHZvaWQgZGF5bmFfbWVtY3B5X2Zyb21jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnRvLCBpbnQgZnJvbSwgaW50IGNvdW50KQorc3RhdGljIHZvaWQgZGF5bmFfbWVtY3B5X2Zyb21jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnRvLCBpbnQgZnJvbSwKKwkJCQkgIGludCBjb3VudCkKIHsKIAl2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICpwdHI7Ci0JdW5zaWduZWQgY2hhciAqdGFyZ2V0PXRvOwotCWZyb208PD0xOwkvKiB3b3JkLCBza2lwIG92ZXJoZWFkICovCi0JcHRyPSh1bnNpZ25lZCBjaGFyICopKGRldi0+bWVtX3N0YXJ0K2Zyb20pOworCXVuc2lnbmVkIGNoYXIgKnRhcmdldCA9IHRvOworCWZyb20gPDw9IDE7CS8qIHdvcmQsIHNraXAgb3ZlcmhlYWQgKi8KKwlwdHIgPSAodW5zaWduZWQgY2hhciAqKShkZXYtPm1lbV9zdGFydCtmcm9tKTsKIAkvKiBMZWFkaW5nIGJ5dGU/ICovCi0JaWYgKGZyb20mMikgeworCWlmIChmcm9tICYgMikgewogCQkqdGFyZ2V0KysgPSBwdHJbLTFdOwogCQlwdHIgKz0gMjsKIAkJY291bnQtLTsKIAl9Ci0Jd2hpbGUoY291bnQ+PTIpCi0JeworCXdoaWxlIChjb3VudCA+PSAyKSB7CiAJCSoodW5zaWduZWQgc2hvcnQgKil0YXJnZXQgPSAqKHVuc2lnbmVkIHNob3J0IHZvbGF0aWxlICopcHRyOwogCQlwdHIgKz0gNDsJCQkvKiBza2lwIGNydWZ0ICovCiAJCXRhcmdldCArPSAyOwotCQljb3VudC09MjsKKwkJY291bnQgLT0gMjsKIAl9CiAJLyogVHJhaWxpbmcgYnl0ZT8gKi8KLQlpZihjb3VudCkKKwlpZiAoY291bnQpCiAJCSp0YXJnZXQgPSAqcHRyOwogfQogCi1zdGF0aWMgdm9pZCBkYXluYV9tZW1jcHlfdG9jYXJkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB0bywgY29uc3Qgdm9pZCAqZnJvbSwgaW50IGNvdW50KQorc3RhdGljIHZvaWQgZGF5bmFfbWVtY3B5X3RvY2FyZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgdG8sCisJCQkJY29uc3Qgdm9pZCAqZnJvbSwgaW50IGNvdW50KQogewogCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpwdHI7Ci0JY29uc3QgdW5zaWduZWQgY2hhciAqc3JjPWZyb207Ci0JdG88PD0xOwkvKiB3b3JkLCBza2lwIG92ZXJoZWFkICovCi0JcHRyPSh1bnNpZ25lZCBzaG9ydCAqKShkZXYtPm1lbV9zdGFydCt0byk7CisJY29uc3QgdW5zaWduZWQgY2hhciAqc3JjID0gZnJvbTsKKwl0byA8PD0gMTsJLyogd29yZCwgc2tpcCBvdmVyaGVhZCAqLworCXB0ciA9ICh1bnNpZ25lZCBzaG9ydCAqKShkZXYtPm1lbV9zdGFydCt0byk7CiAJLyogTGVhZGluZyBieXRlPyAqLwotCWlmICh0byYyKSB7IC8qIGF2b2lkIGEgYnl0ZSB3cml0ZSAoc3RvbXBzIG9uIG90aGVyIGRhdGEpICovCisJaWYgKHRvICYgMikgewkJLyogYXZvaWQgYSBieXRlIHdyaXRlIChzdG9tcHMgb24gb3RoZXIgZGF0YSkgKi8KIAkJcHRyWy0xXSA9IChwdHJbLTFdJjB4RkYwMCl8KnNyYysrOwogCQlwdHIrKzsKIAkJY291bnQtLTsKIAl9Ci0Jd2hpbGUoY291bnQ+PTIpCi0JewotCQkqcHRyKys9Kih1bnNpZ25lZCBzaG9ydCAqKXNyYzsJCS8qIENvcHkgYW5kICovCisJd2hpbGUgKGNvdW50ID49IDIpIHsKKwkJKnB0cisrID0gKih1bnNpZ25lZCBzaG9ydCAqKXNyYzsJLyogQ29weSBhbmQgKi8KIAkJcHRyKys7CQkJLyogc2tpcCBjcnVmdCAqLwogCQlzcmMgKz0gMjsKLQkJY291bnQtPTI7CisJCWNvdW50IC09IDI7CiAJfQogCS8qIFRyYWlsaW5nIGJ5dGU/ICovCi0JaWYoY291bnQpCi0JeworCWlmIChjb3VudCkgewogCQkvKiBjYXJkIGRvZXNuJ3QgbGlrZSBieXRlIHdyaXRlcyAqLwotCQkqcHRyPSgqcHRyJjB4MDBGRil8KCpzcmMgPDwgOCk7CisJCSpwdHIgPSAoKnB0ciAmIDB4MDBGRikgfCAoKnNyYyA8PCA4KTsKIAl9CiB9CiAKQEAgLTczOCwxMSArNzQ4LDE0IEBACiAJaWYgKHhmZXJfc3RhcnQgKyBjb3VudCA+IGVpX3N0YXR1cy5ybWVtX2VuZCkgewogCQkvKiBXZSBtdXN0IHdyYXAgdGhlIGlucHV0IG1vdmUuICovCiAJCWludCBzZW1pX2NvdW50ID0gZWlfc3RhdHVzLnJtZW1fZW5kIC0geGZlcl9zdGFydDsKLQkJbWVtY3B5X2Zyb21pbyhza2ItPmRhdGEsIChjaGFyICopZGV2LT5tZW1fc3RhcnQgKyB4ZmVyX2Jhc2UsIHNlbWlfY291bnQpOworCQltZW1jcHlfZnJvbWlvKHNrYi0+ZGF0YSwgKGNoYXIgKilkZXYtPm1lbV9zdGFydCArIHhmZXJfYmFzZSwKKwkJCSAgICAgIHNlbWlfY291bnQpOwogCQljb3VudCAtPSBzZW1pX2NvdW50OwotCQltZW1jcHlfdG9pbyhza2ItPmRhdGEgKyBzZW1pX2NvdW50LCAoY2hhciAqKWVpX3N0YXR1cy5ybWVtX3N0YXJ0LCBjb3VudCk7CisJCW1lbWNweV90b2lvKHNrYi0+ZGF0YSArIHNlbWlfY291bnQsCisJCQkgICAgKGNoYXIgKillaV9zdGF0dXMucm1lbV9zdGFydCwgY291bnQpOwogCX0gZWxzZSB7Ci0JCW1lbWNweV9mcm9taW8oc2tiLT5kYXRhLCAoY2hhciAqKWRldi0+bWVtX3N0YXJ0ICsgeGZlcl9iYXNlLCBjb3VudCk7CisJCW1lbWNweV9mcm9taW8oc2tiLT5kYXRhLCAoY2hhciAqKWRldi0+bWVtX3N0YXJ0ICsgeGZlcl9iYXNlLAorCQkJICAgICAgY291bnQpOwogCX0KIH0KIApAQCAtNzU1LDE2ICs3NjgsMTggQEAKIH0KIAogLyogZGF5bmEgYmxvY2sgaW5wdXQvb3V0cHV0ICovCi1zdGF0aWMgdm9pZCBkYXluYV9nZXRfODM5MF9oZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGU4MzkwX3BrdF9oZHIgKmhkciwgaW50IHJpbmdfcGFnZSkKK3N0YXRpYyB2b2lkIGRheW5hX2dldF84MzkwX2hkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBlODM5MF9wa3RfaGRyICpoZHIsIGludCByaW5nX3BhZ2UpCiB7CiAJdW5zaWduZWQgbG9uZyBoZHJfc3RhcnQgPSAocmluZ19wYWdlIC0gV0RfU1RBUlRfUEcpPDw4OwogCi0JZGF5bmFfbWVtY3B5X2Zyb21jYXJkKGRldiwgKHZvaWQgKiloZHIsIGhkcl9zdGFydCwgNCk7CisJZGF5bmFfbWVtY3B5X2Zyb21jYXJkKGRldiwgaGRyLCBoZHJfc3RhcnQsIDQpOwogCS8qIEZpeCBlbmRpYW5uZXNzICovCi0JaGRyLT5jb3VudD0oaGRyLT5jb3VudCYweEZGKTw8OHwoaGRyLT5jb3VudD4+OCk7CisJaGRyLT5jb3VudCA9IChoZHItPmNvdW50ICYgMHhGRikgPDwgOCB8IChoZHItPmNvdW50ID4+IDgpOwogfQogCi1zdGF0aWMgdm9pZCBkYXluYV9ibG9ja19pbnB1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY291bnQsIHN0cnVjdCBza19idWZmICpza2IsIGludCByaW5nX29mZnNldCkKK3N0YXRpYyB2b2lkIGRheW5hX2Jsb2NrX2lucHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjb3VudCwKKwkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IsIGludCByaW5nX29mZnNldCkKIHsKIAl1bnNpZ25lZCBsb25nIHhmZXJfYmFzZSA9IHJpbmdfb2Zmc2V0IC0gKFdEX1NUQVJUX1BHPDw4KTsKIAl1bnNpZ25lZCBsb25nIHhmZXJfc3RhcnQgPSB4ZmVyX2Jhc2UrZGV2LT5tZW1fc3RhcnQ7CkBAIC03NzIsOCArNzg3LDcgQEAKIAkvKiBOb3RlIHRoZSBvZmZzZXQgbWF0aCBpcyBkb25lIGluIGNhcmQgbWVtb3J5IHNwYWNlIHdoaWNoIGlzIHdvcmQKIAkgICBwZXIgbG9uZyBvbnRvIG91ciBzcGFjZS4gKi8KIAotCWlmICh4ZmVyX3N0YXJ0ICsgY291bnQgPiBlaV9zdGF0dXMucm1lbV9lbmQpCi0JeworCWlmICh4ZmVyX3N0YXJ0ICsgY291bnQgPiBlaV9zdGF0dXMucm1lbV9lbmQpIHsKIAkJLyogV2UgbXVzdCB3cmFwIHRoZSBpbnB1dCBtb3ZlLiAqLwogCQlpbnQgc2VtaV9jb3VudCA9IGVpX3N0YXR1cy5ybWVtX2VuZCAtIHhmZXJfc3RhcnQ7CiAJCWRheW5hX21lbWNweV9mcm9tY2FyZChkZXYsIHNrYi0+ZGF0YSwgeGZlcl9iYXNlLCBzZW1pX2NvdW50KTsKQEAgLTc4MSwxNSArNzk1LDE0IEBACiAJCWRheW5hX21lbWNweV9mcm9tY2FyZChkZXYsIHNrYi0+ZGF0YSArIHNlbWlfY291bnQsCiAJCQkJICAgICAgZWlfc3RhdHVzLnJtZW1fc3RhcnQgLSBkZXYtPm1lbV9zdGFydCwKIAkJCQkgICAgICBjb3VudCk7Ci0JfQotCWVsc2UKLQl7CisJfSBlbHNlIHsKIAkJZGF5bmFfbWVtY3B5X2Zyb21jYXJkKGRldiwgc2tiLT5kYXRhLCB4ZmVyX2Jhc2UsIGNvdW50KTsKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGRheW5hX2Jsb2NrX291dHB1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY291bnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKLQkJCQlpbnQgc3RhcnRfcGFnZSkKK3N0YXRpYyB2b2lkIGRheW5hX2Jsb2NrX291dHB1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY291bnQsCisJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAorCQkJICAgICAgIGludCBzdGFydF9wYWdlKQogewogCWxvbmcgc2htZW0gPSAoc3RhcnRfcGFnZSAtIFdEX1NUQVJUX1BHKTw8ODsKIApAQCAtNzk3LDQwICs4MTAsMzkgQEAKIH0KIAogLyogQ2FibGV0cm9uIGJsb2NrIEkvTyAqLwotc3RhdGljIHZvaWQgc2xvd19zYW5lX2dldF84MzkwX2hkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZTgzOTBfcGt0X2hkciAqaGRyLAotCWludCByaW5nX3BhZ2UpCitzdGF0aWMgdm9pZCBzbG93X3NhbmVfZ2V0XzgzOTBfaGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGU4MzkwX3BrdF9oZHIgKmhkciwKKwkJCQkgICBpbnQgcmluZ19wYWdlKQogewogCXVuc2lnbmVkIGxvbmcgaGRyX3N0YXJ0ID0gKHJpbmdfcGFnZSAtIFdEX1NUQVJUX1BHKTw8ODsKLQl3b3JkX21lbWNweV9mcm9tY2FyZCgodm9pZCAqKWhkciwgKGNoYXIgKilkZXYtPm1lbV9zdGFydCtoZHJfc3RhcnQsIDQpOworCXdvcmRfbWVtY3B5X2Zyb21jYXJkKGhkciwgKGNoYXIgKilkZXYtPm1lbV9zdGFydCArIGhkcl9zdGFydCwgNCk7CiAJLyogUmVnaXN0ZXIgZW5kaWFuaXNtIC0gZml4IGhlcmUgcmF0aGVyIHRoYW4gODM5MC5jICovCiAJaGRyLT5jb3VudCA9IChoZHItPmNvdW50JjB4RkYpPDw4fChoZHItPmNvdW50Pj44KTsKIH0KIAotc3RhdGljIHZvaWQgc2xvd19zYW5lX2Jsb2NrX2lucHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjb3VudCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQlpbnQgcmluZ19vZmZzZXQpCitzdGF0aWMgdm9pZCBzbG93X3NhbmVfYmxvY2tfaW5wdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGNvdW50LAorCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHJpbmdfb2Zmc2V0KQogewogCXVuc2lnbmVkIGxvbmcgeGZlcl9iYXNlID0gcmluZ19vZmZzZXQgLSAoV0RfU1RBUlRfUEc8PDgpOwogCXVuc2lnbmVkIGxvbmcgeGZlcl9zdGFydCA9IHhmZXJfYmFzZStkZXYtPm1lbV9zdGFydDsKIAotCWlmICh4ZmVyX3N0YXJ0ICsgY291bnQgPiBlaV9zdGF0dXMucm1lbV9lbmQpCi0JeworCWlmICh4ZmVyX3N0YXJ0ICsgY291bnQgPiBlaV9zdGF0dXMucm1lbV9lbmQpIHsKIAkJLyogV2UgbXVzdCB3cmFwIHRoZSBpbnB1dCBtb3ZlLiAqLwogCQlpbnQgc2VtaV9jb3VudCA9IGVpX3N0YXR1cy5ybWVtX2VuZCAtIHhmZXJfc3RhcnQ7Ci0JCXdvcmRfbWVtY3B5X2Zyb21jYXJkKHNrYi0+ZGF0YSwgKGNoYXIgKilkZXYtPm1lbV9zdGFydCArCi0JCQl4ZmVyX2Jhc2UsIHNlbWlfY291bnQpOworCQl3b3JkX21lbWNweV9mcm9tY2FyZChza2ItPmRhdGEsCisJCQkJICAgICAoY2hhciAqKWRldi0+bWVtX3N0YXJ0ICsgeGZlcl9iYXNlLAorCQkJCSAgICAgc2VtaV9jb3VudCk7CiAJCWNvdW50IC09IHNlbWlfY291bnQ7CiAJCXdvcmRfbWVtY3B5X2Zyb21jYXJkKHNrYi0+ZGF0YSArIHNlbWlfY291bnQsCiAJCQkJICAgICAoY2hhciAqKWVpX3N0YXR1cy5ybWVtX3N0YXJ0LCBjb3VudCk7Ci0JfQotCWVsc2UKLQl7Ci0JCXdvcmRfbWVtY3B5X2Zyb21jYXJkKHNrYi0+ZGF0YSwgKGNoYXIgKilkZXYtPm1lbV9zdGFydCArCi0JCQl4ZmVyX2Jhc2UsIGNvdW50KTsKKwl9IGVsc2UgeworCQl3b3JkX21lbWNweV9mcm9tY2FyZChza2ItPmRhdGEsCisJCQkJICAgICAoY2hhciAqKWRldi0+bWVtX3N0YXJ0ICsgeGZlcl9iYXNlLCBjb3VudCk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCBzbG93X3NhbmVfYmxvY2tfb3V0cHV0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBjb3VudCwgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLAotCWludCBzdGFydF9wYWdlKQorc3RhdGljIHZvaWQgc2xvd19zYW5lX2Jsb2NrX291dHB1dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY291bnQsCisJCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgc3RhcnRfcGFnZSkKIHsKIAlsb25nIHNobWVtID0gKHN0YXJ0X3BhZ2UgLSBXRF9TVEFSVF9QRyk8PDg7CiAKQEAgLTg0MywxMCArODU1LDEwIEBACiAJY29uc3QgdW5zaWduZWQgc2hvcnQgKmZyb20gPSBmcDsKIAogCWNvdW50Kys7Ci0JY291bnQvPTI7CisJY291bnQgLz0gMjsKIAotCXdoaWxlKGNvdW50LS0pCi0JCSp0bysrPSpmcm9tKys7CisJd2hpbGUgKGNvdW50LS0pCisJCSp0bysrID0gKmZyb20rKzsKIH0KIAogc3RhdGljIHZvaWQgd29yZF9tZW1jcHlfZnJvbWNhcmQodm9pZCAqdHAsIGNvbnN0IHZvaWQgKmZwLCBpbnQgY291bnQpCkBAIC04NTUsMTAgKzg2NywxMCBAQAogCWNvbnN0IHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpmcm9tID0gZnA7CiAKIAljb3VudCsrOwotCWNvdW50Lz0yOworCWNvdW50IC89IDI7CiAKLQl3aGlsZShjb3VudC0tKQotCQkqdG8rKz0qZnJvbSsrOworCXdoaWxlIChjb3VudC0tKQorCQkqdG8rKyA9ICpmcm9tKys7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjODl4MC5jIGIvZHJpdmVycy9uZXQvbWFjODl4MC5jCmluZGV4IDIzYjYzM2UuLmMyOTJhNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hYzg5eDAuYworKysgYi9kcml2ZXJzL25ldC9tYWM4OXgwLmMKQEAgLTU2OCw5ICs1NjgsNyBAQAogCWlmKGRldi0+ZmxhZ3MmSUZGX1BST01JU0MpCiAJewogCQlscC0+cnhfbW9kZSA9IFJYX0FMTF9BQ0NFUFQ7Ci0JfQotCWVsc2UgaWYoKGRldi0+ZmxhZ3MmSUZGX0FMTE1VTFRJKXx8ZGV2LT5tY19saXN0KQotCXsKKwl9IGVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCAhbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKIAkJLyogVGhlIG11bHRpY2FzdC1hY2NlcHQgbGlzdCBpcyBpbml0aWFsaXplZCB0byBhY2NlcHQtYWxsLCBhbmQgd2UKIAkJICAgcmVseSBvbiBoaWdoZXItbGV2ZWwgZmlsdGVyaW5nIGZvciBub3cuICovCiAJCWxwLT5yeF9tb2RlID0gUlhfTVVMVENBU1RfQUNDRVBUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjYi5jIGIvZHJpdmVycy9uZXQvbWFjYi5jCmluZGV4IDFkMGQ0ZDkuLmM4YTE4YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY2IuYworKysgYi9kcml2ZXJzL25ldC9tYWNiLmMKQEAgLTE4OSwxOCArMTg5LDExIEBACiBzdGF0aWMgaW50IG1hY2JfbWlpX3Byb2JlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwogCXN0cnVjdCBldGhfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Ci0JaW50IHBoeV9hZGRyOworCWludCByZXQ7CiAKLQkvKiBmaW5kIHRoZSBmaXJzdCBwaHkgKi8KLQlmb3IgKHBoeV9hZGRyID0gMDsgcGh5X2FkZHIgPCBQSFlfTUFYX0FERFI7IHBoeV9hZGRyKyspIHsKLQkJaWYgKGJwLT5taWlfYnVzLT5waHlfbWFwW3BoeV9hZGRyXSkgewotCQkJcGh5ZGV2ID0gYnAtPm1paV9idXMtPnBoeV9tYXBbcGh5X2FkZHJdOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KKwlwaHlkZXYgPSBwaHlfZmluZF9maXJzdChicC0+bWlpX2J1cyk7CiAJaWYgKCFwaHlkZXYpIHsKIAkJcHJpbnRrIChLRVJOX0VSUiAiJXM6IG5vIFBIWSBmb3VuZFxuIiwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC0xOwpAQCAtMjEwLDE3ICsyMDMsMTMgQEAKIAkvKiBUT0RPIDogYWRkIHBpbl9pcnEgKi8KIAogCS8qIGF0dGFjaCB0aGUgbWFjIHRvIHRoZSBwaHkgKi8KLQlpZiAocGRhdGEgJiYgcGRhdGEtPmlzX3JtaWkpIHsKLQkJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLAotCQkJJm1hY2JfaGFuZGxlX2xpbmtfY2hhbmdlLCAwLCBQSFlfSU5URVJGQUNFX01PREVfUk1JSSk7Ci0JfSBlbHNlIHsKLQkJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLAotCQkJJm1hY2JfaGFuZGxlX2xpbmtfY2hhbmdlLCAwLCBQSFlfSU5URVJGQUNFX01PREVfTUlJKTsKLQl9Ci0KLQlpZiAoSVNfRVJSKHBoeWRldikpIHsKKwlyZXQgPSBwaHlfY29ubmVjdF9kaXJlY3QoZGV2LCBwaHlkZXYsICZtYWNiX2hhbmRsZV9saW5rX2NoYW5nZSwgMCwKKwkJCQkgcGRhdGEgJiYgcGRhdGEtPmlzX3JtaWkgPworCQkJCSBQSFlfSU5URVJGQUNFX01PREVfUk1JSSA6CisJCQkJIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOworCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ291bGQgbm90IGF0dGFjaCB0byBQSFlcbiIsIGRldi0+bmFtZSk7Ci0JCXJldHVybiBQVFJfRVJSKHBoeWRldik7CisJCXJldHVybiByZXQ7CiAJfQogCiAJLyogbWFzayB3aXRoIE1BQyBzdXBwb3J0ZWQgZmVhdHVyZXMgKi8KQEAgLTg5NSwxNSArODg0LDEyIEBACiB7CiAJc3RydWN0IGRldl9tY19saXN0ICpjdXJyOwogCXVuc2lnbmVkIGxvbmcgbWNfZmlsdGVyWzJdOwotCXVuc2lnbmVkIGludCBpLCBiaXRucjsKKwl1bnNpZ25lZCBpbnQgYml0bnI7CiAJc3RydWN0IG1hY2IgKmJwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCW1jX2ZpbHRlclswXSA9IG1jX2ZpbHRlclsxXSA9IDA7CiAKLQljdXJyID0gZGV2LT5tY19saXN0OwotCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyssIGN1cnIgPSBjdXJyLT5uZXh0KSB7Ci0JCWlmICghY3VycikgYnJlYWs7CS8qIHVuZXhwZWN0ZWQgZW5kIG9mIGxpc3QgKi8KLQorCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGN1cnIsIGRldikgewogCQliaXRuciA9IGhhc2hfZ2V0X2luZGV4KGN1cnItPmRtaV9hZGRyKTsKIAkJbWNfZmlsdGVyW2JpdG5yID4+IDVdIHw9IDEgPDwgKGJpdG5yICYgMzEpOwogCX0KQEAgLTkzNCw3ICs5MjAsNyBAQAogCQltYWNiX3dyaXRlbChicCwgSFJCLCAtMSk7CiAJCW1hY2Jfd3JpdGVsKGJwLCBIUlQsIC0xKTsKIAkJY2ZnIHw9IE1BQ0JfQklUKE5DRkdSX01USSk7Ci0JfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gMCkgeworCX0gZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCS8qIEVuYWJsZSBzcGVjaWZpYyBtdWx0aWNhc3RzICovCiAJCW1hY2Jfc2V0aGFzaHRhYmxlKGRldik7CiAJCWNmZyB8PSBNQUNCX0JJVChOQ0ZHUl9NVEkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjZS5jIGIvZHJpdmVycy9uZXQvbWFjZS5jCmluZGV4IDQzYWVhOTEuLmFiNWYwYmY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWNlLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjZS5jCkBAIC01ODgsNyArNTg4LDcgQEAKIHsKICAgICBzdHJ1Y3QgbWFjZV9kYXRhICptcCA9IG5ldGRldl9wcml2KGRldik7CiAgICAgdm9sYXRpbGUgc3RydWN0IG1hY2UgX19pb21lbSAqbWIgPSBtcC0+bWFjZTsKLSAgICBpbnQgaSwgajsKKyAgICBpbnQgaTsKICAgICB1MzIgY3JjOwogICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTU5OCw3ICs1OTgsNyBAQAogCW1wLT5tYWNjYyB8PSBQUk9NOwogICAgIH0gZWxzZSB7CiAJdW5zaWduZWQgY2hhciBtdWx0aWNhc3RfZmlsdGVyWzhdOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKIAkgICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykKQEAgLTYwNiwxMSArNjA2LDEwIEBACiAJfSBlbHNlIHsKIAkgICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykKIAkJbXVsdGljYXN0X2ZpbHRlcltpXSA9IDA7Ci0JICAgIGZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyspIHsKKwkgICAgbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKIAkgICAgICAgIGNyYyA9IGV0aGVyX2NyY19sZSg2LCBkbWktPmRtaV9hZGRyKTsKLQkJaiA9IGNyYyA+PiAyNjsJLyogYml0IG51bWJlciBpbiBtdWx0aWNhc3RfZmlsdGVyICovCi0JCW11bHRpY2FzdF9maWx0ZXJbaiA+PiAzXSB8PSAxIDw8IChqICYgNyk7Ci0JCWRtaSA9IGRtaS0+bmV4dDsKKwkJaSA9IGNyYyA+PiAyNjsJLyogYml0IG51bWJlciBpbiBtdWx0aWNhc3RfZmlsdGVyICovCisJCW11bHRpY2FzdF9maWx0ZXJbaSA+PiAzXSB8PSAxIDw8IChpICYgNyk7CiAJICAgIH0KIAl9CiAjaWYgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWFjbWFjZS5jIGIvZHJpdmVycy9uZXQvbWFjbWFjZS5jCmluZGV4IDc5NDA4YzMuLjEzYmE4ZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21hY21hY2UuYworKysgYi9kcml2ZXJzL25ldC9tYWNtYWNlLmMKQEAgLTQ5NSw3ICs0OTUsNyBAQAogewogCXN0cnVjdCBtYWNlX2RhdGEgKm1wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2xhdGlsZSBzdHJ1Y3QgbWFjZSAqbWIgPSBtcC0+bWFjZTsKLQlpbnQgaSwgajsKKwlpbnQgaTsKIAl1MzIgY3JjOwogCXU4IG1hY2NjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC01MDgsNyArNTA4LDcgQEAKIAkJbWItPm1hY2NjIHw9IFBST007CiAJfSBlbHNlIHsKIAkJdW5zaWduZWQgY2hhciBtdWx0aWNhc3RfZmlsdGVyWzhdOwotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSA9IGRldi0+bWNfbGlzdDsKKwkJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAKIAkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHsKIAkJCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKQEAgLTUxNywxMSArNTE3LDExIEBACiAJCX0gZWxzZSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCQkJCW11bHRpY2FzdF9maWx0ZXJbaV0gPSAwOwotCQkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgeworCQkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKIAkJCQljcmMgPSBldGhlcl9jcmNfbGUoNiwgZG1pLT5kbWlfYWRkcik7Ci0JCQkJaiA9IGNyYyA+PiAyNjsJLyogYml0IG51bWJlciBpbiBtdWx0aWNhc3RfZmlsdGVyICovCi0JCQkJbXVsdGljYXN0X2ZpbHRlcltqID4+IDNdIHw9IDEgPDwgKGogJiA3KTsKLQkJCQlkbWkgPSBkbWktPm5leHQ7CisJCQkJLyogYml0IG51bWJlciBpbiBtdWx0aWNhc3RfZmlsdGVyICovCisJCQkJaSA9IGNyYyA+PiAyNjsKKwkJCQltdWx0aWNhc3RfZmlsdGVyW2kgPj4gM10gfD0gMSA8PCAoaSAmIDcpOwogCQkJfQogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21hY3ZsYW4uYyBiL2RyaXZlcnMvbmV0L21hY3ZsYW4uYwppbmRleCAyMWE5YzlhLi40MGZhYTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tYWN2bGFuLmMKKysrIGIvZHJpdmVycy9uZXQvbWFjdmxhbi5jCkBAIC0zOSwzMSArMzksNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQJdmxhbnM7CiB9OwogCi0vKioKLSAqCXN0cnVjdCBtYWN2bGFuX3J4X3N0YXRzIC0gTUFDVkxBTiBwZXJjcHUgcnggc3RhdHMKLSAqCUByeF9wYWNrZXRzOiBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cwotICoJQHJ4X2J5dGVzOiBudW1iZXIgb2YgcmVjZWl2ZWQgYnl0ZXMKLSAqCUBtdWx0aWNhc3Q6IG51bWJlciBvZiByZWNlaXZlZCBtdWx0aWNhc3QgcGFja2V0cwotICoJQHJ4X2Vycm9yczogbnVtYmVyIG9mIGVycm9ycwotICovCi1zdHJ1Y3QgbWFjdmxhbl9yeF9zdGF0cyB7Ci0JdW5zaWduZWQgbG9uZyByeF9wYWNrZXRzOwotCXVuc2lnbmVkIGxvbmcgcnhfYnl0ZXM7Ci0JdW5zaWduZWQgbG9uZyBtdWx0aWNhc3Q7Ci0JdW5zaWduZWQgbG9uZyByeF9lcnJvcnM7Ci19OwotCi1zdHJ1Y3QgbWFjdmxhbl9kZXYgewotCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7Ci0Jc3RydWN0IGxpc3RfaGVhZAlsaXN0OwotCXN0cnVjdCBobGlzdF9ub2RlCWhsaXN0OwotCXN0cnVjdCBtYWN2bGFuX3BvcnQJKnBvcnQ7Ci0Jc3RydWN0IG5ldF9kZXZpY2UJKmxvd2VyZGV2OwotCXN0cnVjdCBtYWN2bGFuX3J4X3N0YXRzICpyeF9zdGF0czsKLQllbnVtIG1hY3ZsYW5fbW9kZQltb2RlOwotfTsKLQotCiBzdGF0aWMgc3RydWN0IG1hY3ZsYW5fZGV2ICptYWN2bGFuX2hhc2hfbG9va3VwKGNvbnN0IHN0cnVjdCBtYWN2bGFuX3BvcnQgKnBvcnQsCiAJCQkJCSAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICphZGRyKQogewpAQCAtMTE4LDMxICs5MywxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFjdmxhbl9jb3VudF9yeChjb25zdCBzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4sCi0JCQkJICAgIHVuc2lnbmVkIGludCBsZW4sIGJvb2wgc3VjY2VzcywKLQkJCQkgICAgYm9vbCBtdWx0aWNhc3QpCi17Ci0Jc3RydWN0IG1hY3ZsYW5fcnhfc3RhdHMgKnJ4X3N0YXRzOwogCi0Jcnhfc3RhdHMgPSBwZXJfY3B1X3B0cih2bGFuLT5yeF9zdGF0cywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlpZiAobGlrZWx5KHN1Y2Nlc3MpKSB7Ci0JCXJ4X3N0YXRzLT5yeF9wYWNrZXRzKys7OwotCQlyeF9zdGF0cy0+cnhfYnl0ZXMgKz0gbGVuOwotCQlpZiAobXVsdGljYXN0KQotCQkJcnhfc3RhdHMtPm11bHRpY2FzdCsrOwotCX0gZWxzZSB7Ci0JCXJ4X3N0YXRzLT5yeF9lcnJvcnMrKzsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQgbWFjdmxhbl9icm9hZGNhc3Rfb25lKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCitzdGF0aWMgaW50IG1hY3ZsYW5fYnJvYWRjYXN0X29uZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSBjb25zdCBzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4sCiAJCQkJIGNvbnN0IHN0cnVjdCBldGhoZHIgKmV0aCwgYm9vbCBsb2NhbCkKIHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdmxhbi0+ZGV2OwogCWlmICghc2tiKQogCQlyZXR1cm4gTkVUX1JYX0RST1A7CiAKIAlpZiAobG9jYWwpCi0JCXJldHVybiBkZXZfZm9yd2FyZF9za2IoZGV2LCBza2IpOworCQlyZXR1cm4gdmxhbi0+Zm9yd2FyZChkZXYsIHNrYik7CiAKIAlza2ItPmRldiA9IGRldjsKIAlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcl82NGJpdHMoZXRoLT5oX2Rlc3QsCkBAIC0xNTEsNyArMTEyLDcgQEAKIAllbHNlCiAJCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfTVVMVElDQVNUOwogCi0JcmV0dXJuIG5ldGlmX3J4KHNrYik7CisJcmV0dXJuIHZsYW4tPnJlY2VpdmUoc2tiKTsKIH0KIAogc3RhdGljIHZvaWQgbWFjdmxhbl9icm9hZGNhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTE3NSw3ICsxMzYsNyBAQAogCQkJCWNvbnRpbnVlOwogCiAJCQluc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7Ci0JCQllcnIgPSBtYWN2bGFuX2Jyb2FkY2FzdF9vbmUobnNrYiwgdmxhbi0+ZGV2LCBldGgsCisJCQllcnIgPSBtYWN2bGFuX2Jyb2FkY2FzdF9vbmUobnNrYiwgdmxhbiwgZXRoLAogCQkJCQkgbW9kZSA9PSBNQUNWTEFOX01PREVfQlJJREdFKTsKIAkJCW1hY3ZsYW5fY291bnRfcngodmxhbiwgc2tiLT5sZW4gKyBFVEhfSExFTiwKIAkJCQkJIGVyciA9PSBORVRfUlhfU1VDQ0VTUywgMSk7CkBAIC0yMzgsNyArMTk5LDcgQEAKIAlza2ItPmRldiA9IGRldjsKIAlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CiAKLQluZXRpZl9yeChza2IpOworCXZsYW4tPnJlY2VpdmUoc2tiKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMjYwLDcgKzIyMSw3IEBACiAJCWRlc3QgPSBtYWN2bGFuX2hhc2hfbG9va3VwKHBvcnQsIGV0aC0+aF9kZXN0KTsKIAkJaWYgKGRlc3QgJiYgZGVzdC0+bW9kZSA9PSBNQUNWTEFOX01PREVfQlJJREdFKSB7CiAJCQl1bnNpZ25lZCBpbnQgbGVuZ3RoID0gc2tiLT5sZW4gKyBFVEhfSExFTjsKLQkJCWludCByZXQgPSBkZXZfZm9yd2FyZF9za2IoZGVzdC0+ZGV2LCBza2IpOworCQkJaW50IHJldCA9IGRlc3QtPmZvcndhcmQoZGVzdC0+ZGV2LCBza2IpOwogCQkJbWFjdmxhbl9jb3VudF9yeChkZXN0LCBsZW5ndGgsCiAJCQkJCSByZXQgPT0gTkVUX1JYX1NVQ0NFU1MsIDApOwogCkBAIC0yNjksMTIgKzIzMCwxMiBAQAogCX0KIAogeG1pdF93b3JsZDoKLQlza2ItPmRldiA9IHZsYW4tPmxvd2VyZGV2OworCXNrYl9zZXRfZGV2KHNrYiwgdmxhbi0+bG93ZXJkZXYpOwogCXJldHVybiBkZXZfcXVldWVfeG1pdChza2IpOwogfQogCi1zdGF0aWMgbmV0ZGV2X3R4X3QgbWFjdmxhbl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK25ldGRldl90eF90IG1hY3ZsYW5fc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGkgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHEgPSBuZXRkZXZfZ2V0X3R4X3F1ZXVlKGRldiwgaSk7CkBAIC0yOTAsNiArMjUxLDcgQEAKIAogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChtYWN2bGFuX3N0YXJ0X3htaXQpOwogCiBzdGF0aWMgaW50IG1hY3ZsYW5faGFyZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgICB1bnNpZ25lZCBzaG9ydCB0eXBlLCBjb25zdCB2b2lkICpkYWRkciwKQEAgLTQxOCw3ICszODAsNyBAQAogI2RlZmluZSBNQUNWTEFOX0ZFQVRVUkVTIFwKIAkoTkVUSUZfRl9TRyB8IE5FVElGX0ZfQUxMX0NTVU0gfCBORVRJRl9GX0hJR0hETUEgfCBORVRJRl9GX0ZSQUdMSVNUIHwgXAogCSBORVRJRl9GX0dTTyB8IE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9VRk8gfCBORVRJRl9GX0dTT19ST0JVU1QgfCBcCi0JIE5FVElGX0ZfVFNPX0VDTiB8IE5FVElGX0ZfVFNPNikKKwkgTkVUSUZfRl9UU09fRUNOIHwgTkVUSUZfRl9UU082IHwgTkVUSUZfRl9HUk8pCiAKICNkZWZpbmUgTUFDVkxBTl9TVEFURV9NQVNLIFwKIAkoKDE8PF9fTElOS19TVEFURV9OT0NBUlJJRVIpIHwgKDE8PF9fTElOS19TVEFURV9ET1JNQU5UKSkKQEAgLTYyMyw4ICs1ODUsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtYWN2bGFuX25ld2xpbmsoc3RydWN0IG5ldCAqc3JjX25ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCSAgIHN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSkKK2ludCBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rKHN0cnVjdCBuZXQgKnNyY19uZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICBzdHJ1Y3QgbmxhdHRyICp0YltdLCBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sCisJCQkgICBpbnQgKCpyZWNlaXZlKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSwKKwkJCSAgIGludCAoKmZvcndhcmQpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikpCiB7CiAJc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgbWFjdmxhbl9wb3J0ICpwb3J0OwpAQCAtNjY0LDYgKzYyOSw4IEBACiAJdmxhbi0+bG93ZXJkZXYgPSBsb3dlcmRldjsKIAl2bGFuLT5kZXYgICAgICA9IGRldjsKIAl2bGFuLT5wb3J0ICAgICA9IHBvcnQ7CisJdmxhbi0+cmVjZWl2ZSAgPSByZWNlaXZlOworCXZsYW4tPmZvcndhcmQgID0gZm9yd2FyZDsKIAogCXZsYW4tPm1vZGUgICAgID0gTUFDVkxBTl9NT0RFX1ZFUEE7CiAJaWYgKGRhdGEgJiYgZGF0YVtJRkxBX01BQ1ZMQU5fTU9ERV0pCkBAIC02NzcsOCArNjQ0LDE3IEBACiAJbmV0aWZfc3RhY2tlZF90cmFuc2Zlcl9vcGVyc3RhdGUobG93ZXJkZXYsIGRldik7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChtYWN2bGFuX2NvbW1vbl9uZXdsaW5rKTsKIAotc3RhdGljIHZvaWQgbWFjdmxhbl9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCitzdGF0aWMgaW50IG1hY3ZsYW5fbmV3bGluayhzdHJ1Y3QgbmV0ICpzcmNfbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdKQoreworCXJldHVybiBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rKHNyY19uZXQsIGRldiwgdGIsIGRhdGEsCisJCQkJICAgICAgbmV0aWZfcngsCisJCQkJICAgICAgZGV2X2ZvcndhcmRfc2tiKTsKK30KKwordm9pZCBtYWN2bGFuX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKIAlzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4gPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBtYWN2bGFuX3BvcnQgKnBvcnQgPSB2bGFuLT5wb3J0OwpAQCAtNjg5LDYgKzY2NSw3IEBACiAJaWYgKGxpc3RfZW1wdHkoJnBvcnQtPnZsYW5zKSkKIAkJbWFjdmxhbl9wb3J0X2Rlc3Ryb3kocG9ydC0+ZGV2KTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKG1hY3ZsYW5fZGVsbGluayk7CiAKIHN0YXRpYyBpbnQgbWFjdmxhbl9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCXN0cnVjdCBubGF0dHIgKnRiW10sIHN0cnVjdCBubGF0dHIgKmRhdGFbXSkKQEAgLTcyMCwxOSArNjk3LDI3IEBACiAJW0lGTEFfTUFDVkxBTl9NT0RFXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgbWFjdmxhbl9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0geworaW50IG1hY3ZsYW5fbGlua19yZWdpc3RlcihzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzKQoreworCS8qIGNvbW1vbiBmaWVsZHMgKi8KKwlvcHMtPnByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IG1hY3ZsYW5fZGV2KTsKKwlvcHMtPmdldF90eF9xdWV1ZXMJPSBtYWN2bGFuX2dldF90eF9xdWV1ZXM7CisJb3BzLT5zZXR1cAkJPSBtYWN2bGFuX3NldHVwOworCW9wcy0+dmFsaWRhdGUJCT0gbWFjdmxhbl92YWxpZGF0ZTsKKwlvcHMtPm1heHR5cGUJCT0gSUZMQV9NQUNWTEFOX01BWDsKKwlvcHMtPnBvbGljeQkJPSBtYWN2bGFuX3BvbGljeTsKKwlvcHMtPmNoYW5nZWxpbmsJCT0gbWFjdmxhbl9jaGFuZ2VsaW5rOworCW9wcy0+Z2V0X3NpemUJCT0gbWFjdmxhbl9nZXRfc2l6ZTsKKwlvcHMtPmZpbGxfaW5mbwkJPSBtYWN2bGFuX2ZpbGxfaW5mbzsKKworCXJldHVybiBydG5sX2xpbmtfcmVnaXN0ZXIob3BzKTsKK307CitFWFBPUlRfU1lNQk9MX0dQTChtYWN2bGFuX2xpbmtfcmVnaXN0ZXIpOworCitzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgbWFjdmxhbl9saW5rX29wcyA9IHsKIAkua2luZAkJPSAibWFjdmxhbiIsCi0JLnByaXZfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgbWFjdmxhbl9kZXYpLAotCS5nZXRfdHhfcXVldWVzICA9IG1hY3ZsYW5fZ2V0X3R4X3F1ZXVlcywKLQkuc2V0dXAJCT0gbWFjdmxhbl9zZXR1cCwKLQkudmFsaWRhdGUJPSBtYWN2bGFuX3ZhbGlkYXRlLAogCS5uZXdsaW5rCT0gbWFjdmxhbl9uZXdsaW5rLAogCS5kZWxsaW5rCT0gbWFjdmxhbl9kZWxsaW5rLAotCS5tYXh0eXBlCT0gSUZMQV9NQUNWTEFOX01BWCwKLQkucG9saWN5CQk9IG1hY3ZsYW5fcG9saWN5LAotCS5jaGFuZ2VsaW5rCT0gbWFjdmxhbl9jaGFuZ2VsaW5rLAotCS5nZXRfc2l6ZQk9IG1hY3ZsYW5fZ2V0X3NpemUsCi0JLmZpbGxfaW5mbwk9IG1hY3ZsYW5fZmlsbF9pbmZvLAogfTsKIAogc3RhdGljIGludCBtYWN2bGFuX2RldmljZV9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnVudXNlZCwKQEAgLTc2MSw3ICs3NDYsNyBAQAogCQlicmVhazsKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmxhbiwgbmV4dCwgJnBvcnQtPnZsYW5zLCBsaXN0KQotCQkJbWFjdmxhbl9kZWxsaW5rKHZsYW4tPmRldiwgTlVMTCk7CisJCQl2bGFuLT5kZXYtPnJ0bmxfbGlua19vcHMtPmRlbGxpbmsodmxhbi0+ZGV2LCBOVUxMKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybiBOT1RJRllfRE9ORTsKQEAgLTc3OCw3ICs3NjMsNyBAQAogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbWFjdmxhbl9ub3RpZmllcl9ibG9jayk7CiAJbWFjdmxhbl9oYW5kbGVfZnJhbWVfaG9vayA9IG1hY3ZsYW5faGFuZGxlX2ZyYW1lOwogCi0JZXJyID0gcnRubF9saW5rX3JlZ2lzdGVyKCZtYWN2bGFuX2xpbmtfb3BzKTsKKwllcnIgPSBtYWN2bGFuX2xpbmtfcmVnaXN0ZXIoJm1hY3ZsYW5fbGlua19vcHMpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIGVycjE7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tYWN2dGFwLmMgYi9kcml2ZXJzL25ldC9tYWN2dGFwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVjZWFlMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L21hY3Z0YXAuYwpAQCAtMCwwICsxLDgwMyBAQAorI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfbWFjdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L25zcHJveHkuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl90dW4uaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorCisjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KKyNpbmNsdWRlIDxuZXQvcnRuZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9fbmV0Lmg+CisKKy8qCisgKiBBIG1hY3Z0YXAgcXVldWUgaXMgdGhlIGNlbnRyYWwgb2JqZWN0IG9mIHRoaXMgZHJpdmVyLCBpdCBjb25uZWN0cworICogYW4gb3BlbiBjaGFyYWN0ZXIgZGV2aWNlIHRvIGEgbWFjdmxhbiBpbnRlcmZhY2UuIFRoZXJlIGNhbiBiZQorICogbXVsdGlwbGUgcXVldWVzIG9uIG9uZSBpbnRlcmZhY2UsIHdoaWNoIG1hcCBiYWNrIHRvIHF1ZXVlcworICogaW1wbGVtZW50ZWQgaW4gaGFyZHdhcmUgb24gdGhlIHVuZGVybHlpbmcgZGV2aWNlLgorICoKKyAqIG1hY3Z0YXBfcHJvdG8gaXMgdXNlZCB0byBhbGxvY2F0ZSBxdWV1ZXMgdGhyb3VnaCB0aGUgc29jayBhbGxvY2F0aW9uCisgKiBtZWNoYW5pc20uCisgKgorICogVE9ETzogbXVsdGlxdWV1ZSBzdXBwb3J0IGlzIGN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQsIGV2ZW4gdGhvdWdoCisgKiBtYWN2dGFwIGlzIGJhc2ljYWxseSBwcmVwYXJlZCBmb3IgdGhhdC4gV2Ugd2lsbCBuZWVkIHRvIGFkZCB0aGlzCisgKiBoZXJlIGFzIHdlbGwgYXMgaW4gdmlydGlvLW5ldCBhbmQgcWVtdSB0byBnZXQgbGluZSByYXRlIG9uIDEwZ2JpdAorICogYWRhcHRlcnMgZnJvbSBhIGd1ZXN0LgorICovCitzdHJ1Y3QgbWFjdnRhcF9xdWV1ZSB7CisJc3RydWN0IHNvY2sgc2s7CisJc3RydWN0IHNvY2tldCBzb2NrOworCXN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbjsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7Cit9OworCitzdGF0aWMgc3RydWN0IHByb3RvIG1hY3Z0YXBfcHJvdG8gPSB7CisJLm5hbWUgPSAibWFjdnRhcCIsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9ial9zaXplID0gc2l6ZW9mIChzdHJ1Y3QgbWFjdnRhcF9xdWV1ZSksCit9OworCisvKgorICogTWlub3IgbnVtYmVyIG1hdGNoZXMgbmV0ZGV2LT5pZmluZGV4LCBzbyBuZWVkIGEgcG90ZW50aWFsbHkKKyAqIGxhcmdlIHZhbHVlLiBUaGlzIGFsc28gbWFrZXMgaXQgcG9zc2libGUgdG8gc3BsaXQgdGhlCisgKiB0YXAgZnVuY3Rpb25hbGl0eSBvdXQgYWdhaW4gaW4gdGhlIGZ1dHVyZSBieSBvZmZlcmluZyBpdAorICogZnJvbSBvdGhlciBkcml2ZXJzIGJlc2lkZXMgbWFjdnRhcC4gQXMgbG9uZyBhcyBldmVyeSBkZXZpY2UKKyAqIG9ubHkgaGFzIG9uZSB0YXAsIHRoZSBpbnRlcmZhY2UgbnVtYmVycyBhc3N1cmUgdGhhdCB0aGUKKyAqIGRldmljZSBub2RlcyBhcmUgdW5pcXVlLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IG1hY3Z0YXBfbWFqb3I7CisjZGVmaW5lIE1BQ1ZUQVBfTlVNX0RFVlMgNjU1MzYKK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKm1hY3Z0YXBfY2xhc3M7CitzdGF0aWMgc3RydWN0IGNkZXYgbWFjdnRhcF9jZGV2OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBtYWN2dGFwX3NvY2tldF9vcHM7CisKKy8qCisgKiBSQ1UgdXNhZ2U6CisgKiBUaGUgbWFjdnRhcF9xdWV1ZSBhbmQgdGhlIG1hY3ZsYW5fZGV2IGFyZSBsb29zZWx5IGNvdXBsZWQsIHRoZQorICogcG9pbnRlcnMgZnJvbSBvbmUgdG8gdGhlIG90aGVyIGNhbiBvbmx5IGJlIHJlYWQgd2hpbGUgcmN1X3JlYWRfbG9jaworICogb3IgbWFjdnRhcF9sb2NrIGlzIGhlbGQuCisgKgorICogQm90aCB0aGUgZmlsZSBhbmQgdGhlIG1hY3ZsYW5fZGV2IGhvbGQgYSByZWZlcmVuY2Ugb24gdGhlIG1hY3Z0YXBfcXVldWUKKyAqIHRocm91Z2ggc29ja19ob2xkKCZxLT5zaykuIFdoZW4gdGhlIG1hY3ZsYW5fZGV2IGdvZXMgYXdheSBmaXJzdCwKKyAqIHEtPnZsYW4gYmVjb21lcyBpbmFjY2Vzc2libGUuIFdoZW4gdGhlIGZpbGVzIGdldHMgY2xvc2VkLAorICogbWFjdnRhcF9nZXRfcXVldWUoKSBmYWlscy4KKyAqCisgKiBUaGVyZSBtYXkgc3RpbGwgYmUgcmVmZXJlbmNlcyB0byB0aGUgc3RydWN0IHNvY2sgaW5zaWRlIG9mIHRoZQorICogcXVldWUgZnJvbSBvdXRib3VuZCBTS0JzLCBidXQgdGhlc2UgbmV2ZXIgcmVmZXJlbmNlIGJhY2sgdG8gdGhlCisgKiBmaWxlIG9yIHRoZSBkZXYuIFRoZSBkYXRhIHN0cnVjdHVyZSBpcyBmcmVlZCB0aHJvdWdoIF9fc2tfZnJlZQorICogd2hlbiBib3RoIG91ciByZWZlcmVuY2VzIGFuZCBhbnkgcGVuZGluZyBTS0JzIGFyZSBnb25lLgorICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1hY3Z0YXBfbG9jayk7CisKKy8qCisgKiBDaG9vc2UgdGhlIG5leHQgZnJlZSBxdWV1ZSwgZm9yIG5vdyB0aGVyZSBpcyBvbmx5IG9uZQorICovCitzdGF0aWMgaW50IG1hY3Z0YXBfc2V0X3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCXN0cnVjdCBtYWN2dGFwX3F1ZXVlICpxKQoreworCXN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbiA9IG5ldGRldl9wcml2KGRldik7CisJaW50IGVyciA9IC1FQlVTWTsKKworCXNwaW5fbG9jaygmbWFjdnRhcF9sb2NrKTsKKwlpZiAocmN1X2RlcmVmZXJlbmNlKHZsYW4tPnRhcCkpCisJCWdvdG8gb3V0OworCisJZXJyID0gMDsKKwlyY3VfYXNzaWduX3BvaW50ZXIocS0+dmxhbiwgdmxhbik7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHZsYW4tPnRhcCwgcSk7CisJc29ja19ob2xkKCZxLT5zayk7CisKKwlxLT5maWxlID0gZmlsZTsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSBxOworCitvdXQ6CisJc3Bpbl91bmxvY2soJm1hY3Z0YXBfbG9jayk7CisJcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFRoZSBmaWxlIG93bmluZyB0aGUgcXVldWUgZ290IGNsb3NlZCwgZ2l2ZSB1cCBib3RoCisgKiB0aGUgcmVmZXJlbmNlIHRoYXQgdGhlIGZpbGVzIGhvbGRzIGFzIHdlbGwgYXMgdGhlCisgKiBvbmUgZnJvbSB0aGUgbWFjdmxhbl9kZXYgaWYgdGhhdCBzdGlsbCBleGlzdHMuCisgKgorICogVXNpbmcgdGhlIHNwaW5sb2NrIG1ha2VzIHN1cmUgdGhhdCB3ZSBkb24ndCBnZXQKKyAqIHRvIHRoZSBxdWV1ZSBhZ2FpbiBhZnRlciBkZXN0cm95aW5nIGl0LgorICovCitzdGF0aWMgdm9pZCBtYWN2dGFwX3B1dF9xdWV1ZShzdHJ1Y3QgbWFjdnRhcF9xdWV1ZSAqcSkKK3sKKwlzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW47CisKKwlzcGluX2xvY2soJm1hY3Z0YXBfbG9jayk7CisJdmxhbiA9IHJjdV9kZXJlZmVyZW5jZShxLT52bGFuKTsKKwlpZiAodmxhbikgeworCQlyY3VfYXNzaWduX3BvaW50ZXIodmxhbi0+dGFwLCBOVUxMKTsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKHEtPnZsYW4sIE5VTEwpOworCQlzb2NrX3B1dCgmcS0+c2spOworCX0KKworCXNwaW5fdW5sb2NrKCZtYWN2dGFwX2xvY2spOworCisJc3luY2hyb25pemVfcmN1KCk7CisJc29ja19wdXQoJnEtPnNrKTsKK30KKworLyoKKyAqIFNpbmNlIHdlIG9ubHkgc3VwcG9ydCBvbmUgcXVldWUsIGp1c3QgZGVyZWZlcmVuY2UgdGhlIHBvaW50ZXIuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFjdnRhcF9xdWV1ZSAqbWFjdnRhcF9nZXRfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCXJldHVybiByY3VfZGVyZWZlcmVuY2Uodmxhbi0+dGFwKTsKK30KKworLyoKKyAqIFRoZSBuZXRfZGV2aWNlIGlzIGdvaW5nIGF3YXksIGdpdmUgdXAgdGhlIHJlZmVyZW5jZQorICogdGhhdCBpdCBob2xkcyBvbiB0aGUgcXVldWUgKGFsbCB0aGUgcXVldWVzIG9uZSBkYXkpCisgKiBhbmQgc2FmZWx5IHNldCB0aGUgcG9pbnRlciBmcm9tIHRoZSBxdWV1ZXMgdG8gTlVMTC4KKyAqLworc3RhdGljIHZvaWQgbWFjdnRhcF9kZWxfcXVldWVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgbWFjdnRhcF9xdWV1ZSAqcTsKKworCXNwaW5fbG9jaygmbWFjdnRhcF9sb2NrKTsKKwlxID0gcmN1X2RlcmVmZXJlbmNlKHZsYW4tPnRhcCk7CisJaWYgKCFxKSB7CisJCXNwaW5fdW5sb2NrKCZtYWN2dGFwX2xvY2spOworCQlyZXR1cm47CisJfQorCisJcmN1X2Fzc2lnbl9wb2ludGVyKHZsYW4tPnRhcCwgTlVMTCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHEtPnZsYW4sIE5VTEwpOworCXNwaW5fdW5sb2NrKCZtYWN2dGFwX2xvY2spOworCisJc3luY2hyb25pemVfcmN1KCk7CisJc29ja19wdXQoJnEtPnNrKTsKK30KKworLyoKKyAqIEZvcndhcmQgaGFwcGVucyBmb3IgZGF0YSB0aGF0IGdldHMgc2VudCBmcm9tIG9uZSBtYWN2bGFuCisgKiBlbmRwb2ludCB0byBhbm90aGVyIG9uZSBpbiBicmlkZ2UgbW9kZS4gV2UganVzdCB0YWtlCisgKiB0aGUgc2tiIGFuZCBwdXQgaXQgaW50byB0aGUgcmVjZWl2ZSBxdWV1ZS4KKyAqLworc3RhdGljIGludCBtYWN2dGFwX2ZvcndhcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgbWFjdnRhcF9xdWV1ZSAqcSA9IG1hY3Z0YXBfZ2V0X3F1ZXVlKGRldiwgc2tiKTsKKwlpZiAoIXEpCisJCXJldHVybiAtRU5PTElOSzsKKworCXNrYl9xdWV1ZV90YWlsKCZxLT5zay5za19yZWNlaXZlX3F1ZXVlLCBza2IpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKHEtPnNrLnNrX3NsZWVwLCBQT0xMSU4gfCBQT0xMUkROT1JNIHwgUE9MTFJEQkFORCk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBSZWNlaXZlIGlzIGZvciBkYXRhIGZyb20gdGhlIGV4dGVybmFsIGludGVyZmFjZSAobG93ZXJkZXYpLAorICogaW4gY2FzZSBvZiBtYWN2dGFwLCB3ZSBjYW4gdHJlYXQgdGhhdCB0aGUgc2FtZSB3YXkgYXMKKyAqIGZvcndhcmQsIHdoaWNoIG1hY3ZsYW4gY2Fubm90LgorICovCitzdGF0aWMgaW50IG1hY3Z0YXBfcmVjZWl2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pOworCXJldHVybiBtYWN2dGFwX2ZvcndhcmQoc2tiLT5kZXYsIHNrYik7Cit9CisKK3N0YXRpYyBpbnQgbWFjdnRhcF9uZXdsaW5rKHN0cnVjdCBuZXQgKnNyY19uZXQsCisJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgc3RydWN0IG5sYXR0ciAqdGJbXSwKKwkJCSAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpjbGFzc2RldjsKKwlkZXZfdCBkZXZ0OworCWludCBlcnI7CisKKwllcnIgPSBtYWN2bGFuX2NvbW1vbl9uZXdsaW5rKHNyY19uZXQsIGRldiwgdGIsIGRhdGEsCisJCQkJICAgICBtYWN2dGFwX3JlY2VpdmUsIG1hY3Z0YXBfZm9yd2FyZCk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwlkZXZ0ID0gTUtERVYoTUFKT1IobWFjdnRhcF9tYWpvciksIGRldi0+aWZpbmRleCk7CisKKwljbGFzc2RldiA9IGRldmljZV9jcmVhdGUobWFjdnRhcF9jbGFzcywgJmRldi0+ZGV2LCBkZXZ0LAorCQkJCSBkZXYsICJ0YXAlZCIsIGRldi0+aWZpbmRleCk7CisJaWYgKElTX0VSUihjbGFzc2RldikpIHsKKwkJZXJyID0gUFRSX0VSUihjbGFzc2Rldik7CisJCW1hY3Z0YXBfZGVsX3F1ZXVlcyhkZXYpOworCX0KKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIG1hY3Z0YXBfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJZGV2aWNlX2Rlc3Ryb3kobWFjdnRhcF9jbGFzcywKKwkJICAgICAgIE1LREVWKE1BSk9SKG1hY3Z0YXBfbWFqb3IpLCBkZXYtPmlmaW5kZXgpKTsKKworCW1hY3Z0YXBfZGVsX3F1ZXVlcyhkZXYpOworCW1hY3ZsYW5fZGVsbGluayhkZXYsIGhlYWQpOworfQorCitzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgbWFjdnRhcF9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0geworCS5raW5kCQk9ICJtYWN2dGFwIiwKKwkubmV3bGluawk9IG1hY3Z0YXBfbmV3bGluaywKKwkuZGVsbGluawk9IG1hY3Z0YXBfZGVsbGluaywKK307CisKKworc3RhdGljIHZvaWQgbWFjdnRhcF9zb2NrX3dyaXRlX3NwYWNlKHN0cnVjdCBzb2NrICpzaykKK3sKKwlpZiAoIXNvY2tfd3JpdGVhYmxlKHNrKSB8fAorCSAgICAhdGVzdF9hbmRfY2xlYXJfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnNrLT5za19zb2NrZXQtPmZsYWdzKSkKKwkJcmV0dXJuOworCisJaWYgKHNrLT5za19zbGVlcCAmJiB3YWl0cXVldWVfYWN0aXZlKHNrLT5za19zbGVlcCkpCisJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9wb2xsKHNrLT5za19zbGVlcCwgUE9MTE9VVCB8IFBPTExXUk5PUk0gfCBQT0xMV1JCQU5EKTsKK30KKworc3RhdGljIGludCBtYWN2dGFwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IG5ldCAqbmV0ID0gY3VycmVudC0+bnNwcm94eS0+bmV0X25zOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KG5ldCwgaW1pbm9yKGlub2RlKSk7CisJc3RydWN0IG1hY3Z0YXBfcXVldWUgKnE7CisJaW50IGVycjsKKworCWVyciA9IC1FTk9ERVY7CisJaWYgKCFkZXYpCisJCWdvdG8gb3V0OworCisJLyogY2hlY2sgaWYgdGhpcyBpcyBhIG1hY3Z0YXAgZGV2aWNlICovCisJZXJyID0gLUVJTlZBTDsKKwlpZiAoZGV2LT5ydG5sX2xpbmtfb3BzICE9ICZtYWN2dGFwX2xpbmtfb3BzKQorCQlnb3RvIG91dDsKKworCWVyciA9IC1FTk9NRU07CisJcSA9IChzdHJ1Y3QgbWFjdnRhcF9xdWV1ZSAqKXNrX2FsbG9jKG5ldCwgQUZfVU5TUEVDLCBHRlBfS0VSTkVMLAorCQkJCQkgICAgICZtYWN2dGFwX3Byb3RvKTsKKwlpZiAoIXEpCisJCWdvdG8gb3V0OworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmcS0+c29jay53YWl0KTsKKwlxLT5zb2NrLnR5cGUgPSBTT0NLX1JBVzsKKwlxLT5zb2NrLnN0YXRlID0gU1NfQ09OTkVDVEVEOworCXEtPnNvY2suZmlsZSA9IGZpbGU7CisJcS0+c29jay5vcHMgPSAmbWFjdnRhcF9zb2NrZXRfb3BzOworCXNvY2tfaW5pdF9kYXRhKCZxLT5zb2NrLCAmcS0+c2spOworCXEtPnNrLnNrX3dyaXRlX3NwYWNlID0gbWFjdnRhcF9zb2NrX3dyaXRlX3NwYWNlOworCXEtPmZsYWdzID0gSUZGX1ZORVRfSERSIHwgSUZGX05PX1BJIHwgSUZGX1RBUDsKKworCWVyciA9IG1hY3Z0YXBfc2V0X3F1ZXVlKGRldiwgZmlsZSwgcSk7CisJaWYgKGVycikKKwkJc29ja19wdXQoJnEtPnNrKTsKKworb3V0OgorCWlmIChkZXYpCisJCWRldl9wdXQoZGV2KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbWFjdnRhcF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBtYWN2dGFwX3F1ZXVlICpxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCW1hY3Z0YXBfcHV0X3F1ZXVlKHEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG1hY3Z0YXBfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqIHdhaXQpCit7CisJc3RydWN0IG1hY3Z0YXBfcXVldWUgKnEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgaW50IG1hc2sgPSBQT0xMRVJSOworCisJaWYgKCFxKQorCQlnb3RvIG91dDsKKworCW1hc2sgPSAwOworCXBvbGxfd2FpdChmaWxlLCAmcS0+c29jay53YWl0LCB3YWl0KTsKKworCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZxLT5zay5za19yZWNlaXZlX3F1ZXVlKSkKKwkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOworCisJaWYgKHNvY2tfd3JpdGVhYmxlKCZxLT5zaykgfHwKKwkgICAgKCF0ZXN0X2FuZF9zZXRfYml0KFNPQ0tfQVNZTkNfTk9TUEFDRSwgJnEtPnNvY2suZmxhZ3MpICYmCisJICAgICBzb2NrX3dyaXRlYWJsZSgmcS0+c2spKSkKKwkJbWFzayB8PSBQT0xMT1VUIHwgUE9MTFdSTk9STTsKKworb3V0OgorCXJldHVybiBtYXNrOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICptYWN2dGFwX2FsbG9jX3NrYihzdHJ1Y3Qgc29jayAqc2ssIHNpemVfdCBwcmVwYWQsCisJCQkJCQlzaXplX3QgbGVuLCBzaXplX3QgbGluZWFyLAorCQkJCQkJaW50IG5vYmxvY2ssIGludCAqZXJyKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwkvKiBVbmRlciBhIHBhZ2U/ICBEb24ndCBib3RoZXIgd2l0aCBwYWdlZCBza2IuICovCisJaWYgKHByZXBhZCArIGxlbiA8IFBBR0VfU0laRSB8fCAhbGluZWFyKQorCQlsaW5lYXIgPSBsZW47CisKKwlza2IgPSBzb2NrX2FsbG9jX3NlbmRfcHNrYihzaywgcHJlcGFkICsgbGluZWFyLCBsZW4gLSBsaW5lYXIsIG5vYmxvY2ssCisJCQkJICAgZXJyKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIE5VTEw7CisKKwlza2JfcmVzZXJ2ZShza2IsIHByZXBhZCk7CisJc2tiX3B1dChza2IsIGxpbmVhcik7CisJc2tiLT5kYXRhX2xlbiA9IGxlbiAtIGxpbmVhcjsKKwlza2ItPmxlbiArPSBsZW4gLSBsaW5lYXI7CisKKwlyZXR1cm4gc2tiOworfQorCisvKgorICogbWFjdnRhcF9za2JfZnJvbV92bmV0X2hkciBhbmQgbWFjdnRhcF9za2JfdG9fdm5ldF9oZHIgc2hvdWxkCisgKiBiZSBzaGFyZWQgd2l0aCB0aGUgdHVuL3RhcCBkcml2ZXIuCisgKi8KK3N0YXRpYyBpbnQgbWFjdnRhcF9za2JfZnJvbV92bmV0X2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgc3RydWN0IHZpcnRpb19uZXRfaGRyICp2bmV0X2hkcikKK3sKKwl1bnNpZ25lZCBzaG9ydCBnc29fdHlwZSA9IDA7CisJaWYgKHZuZXRfaGRyLT5nc29fdHlwZSAhPSBWSVJUSU9fTkVUX0hEUl9HU09fTk9ORSkgeworCQlzd2l0Y2ggKHZuZXRfaGRyLT5nc29fdHlwZSAmIH5WSVJUSU9fTkVUX0hEUl9HU09fRUNOKSB7CisJCWNhc2UgVklSVElPX05FVF9IRFJfR1NPX1RDUFY0OgorCQkJZ3NvX3R5cGUgPSBTS0JfR1NPX1RDUFY0OworCQkJYnJlYWs7CisJCWNhc2UgVklSVElPX05FVF9IRFJfR1NPX1RDUFY2OgorCQkJZ3NvX3R5cGUgPSBTS0JfR1NPX1RDUFY2OworCQkJYnJlYWs7CisJCWNhc2UgVklSVElPX05FVF9IRFJfR1NPX1VEUDoKKwkJCWdzb190eXBlID0gU0tCX0dTT19VRFA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKHZuZXRfaGRyLT5nc29fdHlwZSAmIFZJUlRJT19ORVRfSERSX0dTT19FQ04pCisJCQlnc29fdHlwZSB8PSBTS0JfR1NPX1RDUF9FQ047CisKKwkJaWYgKHZuZXRfaGRyLT5nc29fc2l6ZSA9PSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHZuZXRfaGRyLT5mbGFncyAmIFZJUlRJT19ORVRfSERSX0ZfTkVFRFNfQ1NVTSkgeworCQlpZiAoIXNrYl9wYXJ0aWFsX2NzdW1fc2V0KHNrYiwgdm5ldF9oZHItPmNzdW1fc3RhcnQsCisJCQkJCSAgdm5ldF9oZHItPmNzdW1fb2Zmc2V0KSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh2bmV0X2hkci0+Z3NvX3R5cGUgIT0gVklSVElPX05FVF9IRFJfR1NPX05PTkUpIHsKKwkJc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSA9IHZuZXRfaGRyLT5nc29fc2l6ZTsKKwkJc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9IGdzb190eXBlOworCisJCS8qIEhlYWRlciBtdXN0IGJlIGNoZWNrZWQsIGFuZCBnc29fc2VncyBjb21wdXRlZC4gKi8KKwkJc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSB8PSBTS0JfR1NPX0RPREdZOworCQlza2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzID0gMDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWFjdnRhcF9za2JfdG9fdm5ldF9oZHIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICBzdHJ1Y3QgdmlydGlvX25ldF9oZHIgKnZuZXRfaGRyKQoreworCW1lbXNldCh2bmV0X2hkciwgMCwgc2l6ZW9mKCp2bmV0X2hkcikpOworCisJaWYgKHNrYl9pc19nc28oc2tiKSkgeworCQlzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaW5mbyA9IHNrYl9zaGluZm8oc2tiKTsKKworCQkvKiBUaGlzIGlzIGEgaGludCBhcyB0byBob3cgbXVjaCBzaG91bGQgYmUgbGluZWFyLiAqLworCQl2bmV0X2hkci0+aGRyX2xlbiA9IHNrYl9oZWFkbGVuKHNrYik7CisJCXZuZXRfaGRyLT5nc29fc2l6ZSA9IHNpbmZvLT5nc29fc2l6ZTsKKwkJaWYgKHNpbmZvLT5nc29fdHlwZSAmIFNLQl9HU09fVENQVjQpCisJCQl2bmV0X2hkci0+Z3NvX3R5cGUgPSBWSVJUSU9fTkVUX0hEUl9HU09fVENQVjQ7CisJCWVsc2UgaWYgKHNpbmZvLT5nc29fdHlwZSAmIFNLQl9HU09fVENQVjYpCisJCQl2bmV0X2hkci0+Z3NvX3R5cGUgPSBWSVJUSU9fTkVUX0hEUl9HU09fVENQVjY7CisJCWVsc2UgaWYgKHNpbmZvLT5nc29fdHlwZSAmIFNLQl9HU09fVURQKQorCQkJdm5ldF9oZHItPmdzb190eXBlID0gVklSVElPX05FVF9IRFJfR1NPX1VEUDsKKwkJZWxzZQorCQkJQlVHKCk7CisJCWlmIChzaW5mby0+Z3NvX3R5cGUgJiBTS0JfR1NPX1RDUF9FQ04pCisJCQl2bmV0X2hkci0+Z3NvX3R5cGUgfD0gVklSVElPX05FVF9IRFJfR1NPX0VDTjsKKwl9IGVsc2UKKwkJdm5ldF9oZHItPmdzb190eXBlID0gVklSVElPX05FVF9IRFJfR1NPX05PTkU7CisKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgeworCQl2bmV0X2hkci0+ZmxhZ3MgPSBWSVJUSU9fTkVUX0hEUl9GX05FRURTX0NTVU07CisJCXZuZXRfaGRyLT5jc3VtX3N0YXJ0ID0gc2tiLT5jc3VtX3N0YXJ0IC0KKwkJCQkJc2tiX2hlYWRyb29tKHNrYik7CisJCXZuZXRfaGRyLT5jc3VtX29mZnNldCA9IHNrYi0+Y3N1bV9vZmZzZXQ7CisJfSAvKiBlbHNlIGV2ZXJ5dGhpbmcgaXMgemVybyAqLworCisJcmV0dXJuIDA7Cit9CisKKworLyogR2V0IHBhY2tldCBmcm9tIHVzZXIgc3BhY2UgYnVmZmVyICovCitzdGF0aWMgc3NpemVfdCBtYWN2dGFwX2dldF91c2VyKHN0cnVjdCBtYWN2dGFwX3F1ZXVlICpxLAorCQkJCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaXYsIHNpemVfdCBjb3VudCwKKwkJCQlpbnQgbm9ibG9jaykKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBtYWN2bGFuX2RldiAqdmxhbjsKKwlzaXplX3QgbGVuID0gY291bnQ7CisJaW50IGVycjsKKwlzdHJ1Y3QgdmlydGlvX25ldF9oZHIgdm5ldF9oZHIgPSB7IDAgfTsKKwlpbnQgdm5ldF9oZHJfbGVuID0gMDsKKworCWlmIChxLT5mbGFncyAmIElGRl9WTkVUX0hEUikgeworCQl2bmV0X2hkcl9sZW4gPSBzaXplb2Yodm5ldF9oZHIpOworCisJCWVyciA9IC1FSU5WQUw7CisJCWlmICgobGVuIC09IHZuZXRfaGRyX2xlbikgPCAwKQorCQkJZ290byBlcnI7CisKKwkJZXJyID0gbWVtY3B5X2Zyb21pb3ZlY2VuZCgodm9pZCAqKSZ2bmV0X2hkciwgaXYsIDAsCisJCQkJCSAgIHZuZXRfaGRyX2xlbik7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnI7CisJCWlmICgodm5ldF9oZHIuZmxhZ3MgJiBWSVJUSU9fTkVUX0hEUl9GX05FRURTX0NTVU0pICYmCisJCSAgICAgdm5ldF9oZHIuY3N1bV9zdGFydCArIHZuZXRfaGRyLmNzdW1fb2Zmc2V0ICsgMiA+CisJCQkJCQkJdm5ldF9oZHIuaGRyX2xlbikKKwkJCXZuZXRfaGRyLmhkcl9sZW4gPSB2bmV0X2hkci5jc3VtX3N0YXJ0ICsKKwkJCQkJCXZuZXRfaGRyLmNzdW1fb2Zmc2V0ICsgMjsKKwkJZXJyID0gLUVJTlZBTDsKKwkJaWYgKHZuZXRfaGRyLmhkcl9sZW4gPiBsZW4pCisJCQlnb3RvIGVycjsKKwl9CisKKwllcnIgPSAtRUlOVkFMOworCWlmICh1bmxpa2VseShsZW4gPCBFVEhfSExFTikpCisJCWdvdG8gZXJyOworCisJc2tiID0gbWFjdnRhcF9hbGxvY19za2IoJnEtPnNrLCBORVRfSVBfQUxJR04sIGxlbiwgdm5ldF9oZHIuaGRyX2xlbiwKKwkJCQlub2Jsb2NrLCAmZXJyKTsKKwlpZiAoIXNrYikKKwkJZ290byBlcnI7CisKKwllcnIgPSBza2JfY29weV9kYXRhZ3JhbV9mcm9tX2lvdmVjKHNrYiwgMCwgaXYsIHZuZXRfaGRyX2xlbiwgbGVuKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9rZnJlZTsKKworCXNrYl9zZXRfbmV0d29ya19oZWFkZXIoc2tiLCBFVEhfSExFTik7CisJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKKwlza2ItPnByb3RvY29sID0gZXRoX2hkcihza2IpLT5oX3Byb3RvOworCisJaWYgKHZuZXRfaGRyX2xlbikgeworCQllcnIgPSBtYWN2dGFwX3NrYl9mcm9tX3ZuZXRfaGRyKHNrYiwgJnZuZXRfaGRyKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX2tmcmVlOworCX0KKworCXJjdV9yZWFkX2xvY2tfYmgoKTsKKwl2bGFuID0gcmN1X2RlcmVmZXJlbmNlKHEtPnZsYW4pOworCWlmICh2bGFuKQorCQltYWN2bGFuX3N0YXJ0X3htaXQoc2tiLCB2bGFuLT5kZXYpOworCWVsc2UKKwkJa2ZyZWVfc2tiKHNrYik7CisJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CisKKwlyZXR1cm4gY291bnQ7CisKK2Vycl9rZnJlZToKKwlrZnJlZV9za2Ioc2tiKTsKKworZXJyOgorCXJjdV9yZWFkX2xvY2tfYmgoKTsKKwl2bGFuID0gcmN1X2RlcmVmZXJlbmNlKHEtPnZsYW4pOworCWlmICh2bGFuKQorCQluZXRkZXZfZ2V0X3R4X3F1ZXVlKHZsYW4tPmRldiwgMCktPnR4X2Ryb3BwZWQrKzsKKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1hY3Z0YXBfYWlvX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppdiwKKwkJCQkgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHBvcykKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CisJc3NpemVfdCByZXN1bHQgPSAtRU5PTElOSzsKKwlzdHJ1Y3QgbWFjdnRhcF9xdWV1ZSAqcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKworCXJlc3VsdCA9IG1hY3Z0YXBfZ2V0X3VzZXIocSwgaXYsIGlvdl9sZW5ndGgoaXYsIGNvdW50KSwKKwkJCSAgICAgIGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKiBQdXQgcGFja2V0IHRvIHRoZSB1c2VyIHNwYWNlIGJ1ZmZlciAqLworc3RhdGljIHNzaXplX3QgbWFjdnRhcF9wdXRfdXNlcihzdHJ1Y3QgbWFjdnRhcF9xdWV1ZSAqcSwKKwkJCQljb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaXYsIGludCBsZW4pCit7CisJc3RydWN0IG1hY3ZsYW5fZGV2ICp2bGFuOworCWludCByZXQ7CisJaW50IHZuZXRfaGRyX2xlbiA9IDA7CisKKwlpZiAocS0+ZmxhZ3MgJiBJRkZfVk5FVF9IRFIpIHsKKwkJc3RydWN0IHZpcnRpb19uZXRfaGRyIHZuZXRfaGRyOworCQl2bmV0X2hkcl9sZW4gPSBzaXplb2YgKHZuZXRfaGRyKTsKKwkJaWYgKChsZW4gLT0gdm5ldF9oZHJfbGVuKSA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlyZXQgPSBtYWN2dGFwX3NrYl90b192bmV0X2hkcihza2IsICZ2bmV0X2hkcik7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWlmIChtZW1jcHlfdG9pb3ZlY2VuZChpdiwgKHZvaWQgKikmdm5ldF9oZHIsIDAsIHZuZXRfaGRyX2xlbikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisKKwlsZW4gPSBtaW5fdChpbnQsIHNrYi0+bGVuLCBsZW4pOworCisJcmV0ID0gc2tiX2NvcHlfZGF0YWdyYW1fY29uc3RfaW92ZWMoc2tiLCAwLCBpdiwgdm5ldF9oZHJfbGVuLCBsZW4pOworCisJcmN1X3JlYWRfbG9ja19iaCgpOworCXZsYW4gPSByY3VfZGVyZWZlcmVuY2UocS0+dmxhbik7CisJaWYgKHZsYW4pCisJCW1hY3ZsYW5fY291bnRfcngodmxhbiwgbGVuLCByZXQgPT0gMCwgMCk7CisJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CisKKwlyZXR1cm4gcmV0ID8gcmV0IDogKGxlbiArIHZuZXRfaGRyX2xlbik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1hY3Z0YXBfZG9fcmVhZChzdHJ1Y3QgbWFjdnRhcF9xdWV1ZSAqcSwgc3RydWN0IGtpb2NiICppb2NiLAorCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaXYsIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJICAgICAgIGludCBub2Jsb2NrKQoreworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3NpemVfdCByZXQgPSAwOworCisJYWRkX3dhaXRfcXVldWUocS0+c2suc2tfc2xlZXAsICZ3YWl0KTsKKwl3aGlsZSAobGVuKSB7CisJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOworCisJCS8qIFJlYWQgZnJhbWVzIGZyb20gdGhlIHF1ZXVlICovCisJCXNrYiA9IHNrYl9kZXF1ZXVlKCZxLT5zay5za19yZWNlaXZlX3F1ZXVlKTsKKwkJaWYgKCFza2IpIHsKKwkJCWlmIChub2Jsb2NrKSB7CisJCQkJcmV0ID0gLUVBR0FJTjsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJCXJldCA9IC1FUkVTVEFSVFNZUzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIE5vdGhpbmcgdG8gcmVhZCwgbGV0J3Mgc2xlZXAgKi8KKwkJCXNjaGVkdWxlKCk7CisJCQljb250aW51ZTsKKwkJfQorCQlyZXQgPSBtYWN2dGFwX3B1dF91c2VyKHEsIHNrYiwgaXYsIGxlbik7CisJCWtmcmVlX3NrYihza2IpOworCQlicmVhazsKKwl9CisKKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfUlVOTklORzsKKwlyZW1vdmVfd2FpdF9xdWV1ZShxLT5zay5za19zbGVlcCwgJndhaXQpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1hY3Z0YXBfYWlvX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKml2LAorCQkJCXVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCBwb3MpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOworCXN0cnVjdCBtYWN2dGFwX3F1ZXVlICpxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXNzaXplX3QgbGVuLCByZXQgPSAwOworCisJbGVuID0gaW92X2xlbmd0aChpdiwgY291bnQpOworCWlmIChsZW4gPCAwKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG1hY3Z0YXBfZG9fcmVhZChxLCBpb2NiLCBpdiwgbGVuLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisJcmV0ID0gbWluX3Qoc3NpemVfdCwgcmV0LCBsZW4pOyAvKiBYWFggY29waWVkIGZyb20gdHVuLmMuIFdoeT8gKi8KK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogcHJvdmlkZSBjb21wYXRpYmlsaXR5IHdpdGggZ2VuZXJpYyB0dW4vdGFwIGludGVyZmFjZQorICovCitzdGF0aWMgbG9uZyBtYWN2dGFwX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgbWFjdnRhcF9xdWV1ZSAqcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW47CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJc3RydWN0IGlmcmVxIF9fdXNlciAqaWZyID0gYXJncDsKKwl1bnNpZ25lZCBpbnQgX191c2VyICp1cCA9IGFyZ3A7CisJdW5zaWduZWQgaW50IHU7CisJaW50IHJldDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBUVU5TRVRJRkY6CisJCS8qIGlnbm9yZSB0aGUgbmFtZSwganVzdCBsb29rIGF0IGZsYWdzICovCisJCWlmIChnZXRfdXNlcih1LCAmaWZyLT5pZnJfZmxhZ3MpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0ID0gMDsKKwkJaWYgKCh1ICYgfklGRl9WTkVUX0hEUikgIT0gKElGRl9OT19QSSB8IElGRl9UQVApKQorCQkJcmV0ID0gLUVJTlZBTDsKKwkJZWxzZQorCQkJcS0+ZmxhZ3MgPSB1OworCisJCXJldHVybiByZXQ7CisKKwljYXNlIFRVTkdFVElGRjoKKwkJcmN1X3JlYWRfbG9ja19iaCgpOworCQl2bGFuID0gcmN1X2RlcmVmZXJlbmNlKHEtPnZsYW4pOworCQlpZiAodmxhbikKKwkJCWRldl9ob2xkKHZsYW4tPmRldik7CisJCXJjdV9yZWFkX3VubG9ja19iaCgpOworCisJCWlmICghdmxhbikKKwkJCXJldHVybiAtRU5PTElOSzsKKworCQlyZXQgPSAwOworCQlpZiAoY29weV90b191c2VyKCZpZnItPmlmcl9uYW1lLCBxLT52bGFuLT5kZXYtPm5hbWUsIElGTkFNU0laKSB8fAorCQkgICAgcHV0X3VzZXIocS0+ZmxhZ3MsICZpZnItPmlmcl9mbGFncykpCisJCQlyZXQgPSAtRUZBVUxUOworCQlkZXZfcHV0KHZsYW4tPmRldik7CisJCXJldHVybiByZXQ7CisKKwljYXNlIFRVTkdFVEZFQVRVUkVTOgorCQlpZiAocHV0X3VzZXIoSUZGX1RBUCB8IElGRl9OT19QSSB8IElGRl9WTkVUX0hEUiwgdXApKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCisJY2FzZSBUVU5TRVRTTkRCVUY6CisJCWlmIChnZXRfdXNlcih1LCB1cCkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlxLT5zay5za19zbmRidWYgPSB1OworCQlyZXR1cm4gMDsKKworCWNhc2UgVFVOU0VUT0ZGTE9BRDoKKwkJLyogbGV0IHRoZSB1c2VyIGNoZWNrIGZvciBmdXR1cmUgZmxhZ3MgKi8KKwkJaWYgKGFyZyAmIH4oVFVOX0ZfQ1NVTSB8IFRVTl9GX1RTTzQgfCBUVU5fRl9UU082IHwKKwkJCSAgICBUVU5fRl9UU09fRUNOIHwgVFVOX0ZfVUZPKSkKKwkJCXJldHVybiAtRUlOVkFMOworCisJCS8qIFRPRE86IG9ubHkgYWNjZXB0IGZyYW1lcyB3aXRoIHRoZSBmZWF0dXJlcyB0aGF0CisJCQkgZ290IGVuYWJsZWQgZm9yIGZvcndhcmRlZCBmcmFtZXMgKi8KKwkJaWYgKCEocS0+ZmxhZ3MgJiBJRkZfVk5FVF9IRFIpKQorCQkJcmV0dXJuICAtRUlOVkFMOworCQlyZXR1cm4gMDsKKworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBsb25nIG1hY3Z0YXBfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCSB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gbWFjdnRhcF9pb2N0bChmaWxlLCBjbWQsICh1bnNpZ25lZCBsb25nKWNvbXBhdF9wdHIoYXJnKSk7Cit9CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWFjdnRhcF9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBtYWN2dGFwX29wZW4sCisJLnJlbGVhc2UJPSBtYWN2dGFwX3JlbGVhc2UsCisJLmFpb19yZWFkCT0gbWFjdnRhcF9haW9fcmVhZCwKKwkuYWlvX3dyaXRlCT0gbWFjdnRhcF9haW9fd3JpdGUsCisJLnBvbGwJCT0gbWFjdnRhcF9wb2xsLAorCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAorCS51bmxvY2tlZF9pb2N0bAk9IG1hY3Z0YXBfaW9jdGwsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwJPSBtYWN2dGFwX2NvbXBhdF9pb2N0bCwKKyNlbmRpZgorfTsKKworc3RhdGljIGludCBtYWN2dGFwX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAorCQkJICAgc3RydWN0IG1zZ2hkciAqbSwgc2l6ZV90IHRvdGFsX2xlbikKK3sKKwlzdHJ1Y3QgbWFjdnRhcF9xdWV1ZSAqcSA9IGNvbnRhaW5lcl9vZihzb2NrLCBzdHJ1Y3QgbWFjdnRhcF9xdWV1ZSwgc29jayk7CisJcmV0dXJuIG1hY3Z0YXBfZ2V0X3VzZXIocSwgbS0+bXNnX2lvdiwgdG90YWxfbGVuLAorCQkJICAgIG0tPm1zZ19mbGFncyAmIE1TR19ET05UV0FJVCk7Cit9CisKK3N0YXRpYyBpbnQgbWFjdnRhcF9yZWN2bXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKKwkJCSAgIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4sCisJCQkgICBpbnQgZmxhZ3MpCit7CisJc3RydWN0IG1hY3Z0YXBfcXVldWUgKnEgPSBjb250YWluZXJfb2Yoc29jaywgc3RydWN0IG1hY3Z0YXBfcXVldWUsIHNvY2spOworCWludCByZXQ7CisJaWYgKGZsYWdzICYgfihNU0dfRE9OVFdBSVR8TVNHX1RSVU5DKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0ID0gbWFjdnRhcF9kb19yZWFkKHEsIGlvY2IsIG0tPm1zZ19pb3YsIHRvdGFsX2xlbiwKKwkJCSAgZmxhZ3MgJiBNU0dfRE9OVFdBSVQpOworCWlmIChyZXQgPiB0b3RhbF9sZW4pIHsKKwkJbS0+bXNnX2ZsYWdzIHw9IE1TR19UUlVOQzsKKwkJcmV0ID0gZmxhZ3MgJiBNU0dfVFJVTkMgPyByZXQgOiB0b3RhbF9sZW47CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qIE9wcyBzdHJ1Y3R1cmUgdG8gbWltaWMgcmF3IHNvY2tldHMgd2l0aCB0dW4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIG1hY3Z0YXBfc29ja2V0X29wcyA9IHsKKwkuc2VuZG1zZyA9IG1hY3Z0YXBfc2VuZG1zZywKKwkucmVjdm1zZyA9IG1hY3Z0YXBfcmVjdm1zZywKK307CisKKy8qIEdldCBhbiB1bmRlcmx5aW5nIHNvY2tldCBvYmplY3QgZnJvbSB0dW4gZmlsZS4gIFJldHVybnMgZXJyb3IgdW5sZXNzIGZpbGUgaXMKKyAqIGF0dGFjaGVkIHRvIGEgZGV2aWNlLiAgVGhlIHJldHVybmVkIG9iamVjdCB3b3JrcyBsaWtlIGEgcGFja2V0IHNvY2tldCwgaXQKKyAqIGNhbiBiZSB1c2VkIGZvciBzb2NrX3NlbmRtc2cvc29ja19yZWN2bXNnLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IKKyAqIGhvbGRpbmcgYSByZWZlcmVuY2UgdG8gdGhlIGZpbGUgZm9yIGFzIGxvbmcgYXMgdGhlIHNvY2tldCBpcyBpbiB1c2UuICovCitzdHJ1Y3Qgc29ja2V0ICptYWN2dGFwX2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IG1hY3Z0YXBfcXVldWUgKnE7CisJaWYgKGZpbGUtPmZfb3AgIT0gJm1hY3Z0YXBfZm9wcykKKwkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CisJcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpZiAoIXEpCisJCXJldHVybiBFUlJfUFRSKC1FQkFERkQpOworCXJldHVybiAmcS0+c29jazsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1hY3Z0YXBfZ2V0X3NvY2tldCk7CisKK3N0YXRpYyBpbnQgbWFjdnRhcF9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IGFsbG9jX2NocmRldl9yZWdpb24oJm1hY3Z0YXBfbWFqb3IsIDAsCisJCQkJTUFDVlRBUF9OVU1fREVWUywgIm1hY3Z0YXAiKTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDE7CisKKwljZGV2X2luaXQoJm1hY3Z0YXBfY2RldiwgJm1hY3Z0YXBfZm9wcyk7CisJZXJyID0gY2Rldl9hZGQoJm1hY3Z0YXBfY2RldiwgbWFjdnRhcF9tYWpvciwgTUFDVlRBUF9OVU1fREVWUyk7CisJaWYgKGVycikKKwkJZ290byBvdXQyOworCisJbWFjdnRhcF9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgIm1hY3Z0YXAiKTsKKwlpZiAoSVNfRVJSKG1hY3Z0YXBfY2xhc3MpKSB7CisJCWVyciA9IFBUUl9FUlIobWFjdnRhcF9jbGFzcyk7CisJCWdvdG8gb3V0MzsKKwl9CisKKwllcnIgPSBtYWN2bGFuX2xpbmtfcmVnaXN0ZXIoJm1hY3Z0YXBfbGlua19vcHMpOworCWlmIChlcnIpCisJCWdvdG8gb3V0NDsKKworCXJldHVybiAwOworCitvdXQ0OgorCWNsYXNzX3VucmVnaXN0ZXIobWFjdnRhcF9jbGFzcyk7CitvdXQzOgorCWNkZXZfZGVsKCZtYWN2dGFwX2NkZXYpOworb3V0MjoKKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24obWFjdnRhcF9tYWpvciwgTUFDVlRBUF9OVU1fREVWUyk7CitvdXQxOgorCXJldHVybiBlcnI7Cit9Cittb2R1bGVfaW5pdChtYWN2dGFwX2luaXQpOworCitzdGF0aWMgdm9pZCBtYWN2dGFwX2V4aXQodm9pZCkKK3sKKwlydG5sX2xpbmtfdW5yZWdpc3RlcigmbWFjdnRhcF9saW5rX29wcyk7CisJY2xhc3NfdW5yZWdpc3RlcihtYWN2dGFwX2NsYXNzKTsKKwljZGV2X2RlbCgmbWFjdnRhcF9jZGV2KTsKKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24obWFjdnRhcF9tYWpvciwgTUFDVlRBUF9OVU1fREVWUyk7Cit9Cittb2R1bGVfZXhpdChtYWN2dGFwX2V4aXQpOworCitNT0RVTEVfQUxJQVNfUlROTF9MSU5LKCJtYWN2dGFwIik7CitNT0RVTEVfQVVUSE9SKCJBcm5kIEJlcmdtYW5uIDxhcm5kQGFybmRiLmRlPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWV0aC5jIGIvZHJpdmVycy9uZXQvbWV0aC5jCmluZGV4IDJhZjgxNzMuLjlmNzJjYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L21ldGguYworKysgYi9kcml2ZXJzL25ldC9tZXRoLmMKQEAgLTUxLDE0ICs1MSwxMSBAQAogCiBzdGF0aWMgY29uc3QgY2hhciAqbWV0aF9zdHI9IlNHSSBPMiBGYXN0IEV0aGVybmV0IjsKIAotI2RlZmluZSBIQVZFX1RYX1RJTUVPVVQKIC8qIFRoZSBtYXhpbXVtIHRpbWUgd2FpdGVkIChpbiBqaWZmaWVzKSBiZWZvcmUgYXNzdW1pbmcgYSBUeCBmYWlsZWQuICg0MDBtcykgKi8KICNkZWZpbmUgVFhfVElNRU9VVCAoNDAwKkhaLzEwMDApCiAKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKIHN0YXRpYyBpbnQgdGltZW91dCA9IFRYX1RJTUVPVVQ7CiBtb2R1bGVfcGFyYW0odGltZW91dCwgaW50LCAwKTsKLSNlbmRpZgogCiAvKgogICogVGhpcyBzdHJ1Y3R1cmUgaXMgcHJpdmF0ZSB0byBlYWNoIGRldmljZS4gSXQgaXMgdXNlZCB0byBwYXNzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMgYi9kcml2ZXJzL25ldC9tbHg0L2VuX3J4LmMKaW5kZXggODI5YjllYy4uNjQzOTQ2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbWx4NC9lbl9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L21seDQvZW5fcnguYwpAQCAtNTA4LDExICs1MDgsMTEgQEAKIAkJLyogV2UgYXJlIGNvcHlpbmcgYWxsIHJlbGV2YW50IGRhdGEgdG8gdGhlIHNrYiAtIHRlbXBvcmFyaWx5CiAJCSAqIHN5bmNoIGJ1ZmZlcnMgZm9yIHRoZSBjb3B5ICovCiAJCWRtYSA9IGJlNjRfdG9fY3B1KHJ4X2Rlc2MtPmRhdGFbMF0uYWRkcik7Ci0JCWRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KCZtZGV2LT5wZGV2LT5kZXYsIGRtYSwgMCwKLQkJCQkJICAgICAgbGVuZ3RoLCBETUFfRlJPTV9ERVZJQ0UpOworCQlkbWFfc3luY19zaW5nbGVfZm9yX2NwdSgmbWRldi0+cGRldi0+ZGV2LCBkbWEsIGxlbmd0aCwKKwkJCQkJRE1BX0ZST01fREVWSUNFKTsKIAkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCB2YSwgbGVuZ3RoKTsKLQkJZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UoJm1kZXYtPnBkZXYtPmRldiwgZG1hLCAwLAotCQkJCQkJIGxlbmd0aCwgRE1BX0ZST01fREVWSUNFKTsKKwkJZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoJm1kZXYtPnBkZXYtPmRldiwgZG1hLCBsZW5ndGgsCisJCQkJCSAgIERNQV9GUk9NX0RFVklDRSk7CiAJCXNrYi0+dGFpbCArPSBsZW5ndGg7CiAJfSBlbHNlIHsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbWx4NC9tYWluLmMgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwppbmRleCAzY2Y1NmQ5Li44ZjZlODE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tbHg0L21haW4uYworKysgYi9kcml2ZXJzL25ldC9tbHg0L21haW4uYwpAQCAtMTI3MSw3ICsxMjcxLDcgQEAKIAlyZXR1cm4gX19tbHg0X2luaXRfb25lKHBkZXYsIE5VTEwpOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWx4NF9wY2lfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShtbHg0X3BjaV90YWJsZSkgPSB7CiAJeyBQQ0lfVkRFVklDRShNRUxMQU5PWCwgMHg2MzQwKSB9LCAvKiBNVDI1NDA4ICJIZXJtb24iIFNEUiAqLwogCXsgUENJX1ZERVZJQ0UoTUVMTEFOT1gsIDB4NjM0YSkgfSwgLyogTVQyNTQwOCAiSGVybW9uIiBERFIgKi8KIAl7IFBDSV9WREVWSUNFKE1FTExBTk9YLCAweDYzNTQpIH0sIC8qIE1UMjU0MDggIkhlcm1vbiIgUURSICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jIGIvZHJpdmVycy9uZXQvbXY2NDN4eF9ldGguYwppbmRleCBhZjY3YWY1Li5jOTdiNmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tdjY0M3h4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L212NjQzeHhfZXRoLmMKQEAgLTU1LDcgKzU1LDYgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXRfbHJvLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogc3RhdGljIGNoYXIgbXY2NDN4eF9ldGhfZHJpdmVyX25hbWVbXSA9ICJtdjY0M3h4X2V0aCI7CiBzdGF0aWMgY2hhciBtdjY0M3h4X2V0aF9kcml2ZXJfdmVyc2lvbltdID0gIjEuNCI7CkBAIC0xNjk3LDcgKzE2OTYsNyBAQAogCQlyZXR1cm4gMDsKIAogCW5pYmJsZXMgPSAxIDw8IChkZXYtPmRldl9hZGRyWzVdICYgMHgwZik7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShoYSwgJmRldi0+dWMubGlzdCwgbGlzdCkgeworCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBkZXYpIHsKIAkJaWYgKG1lbWNtcChkZXYtPmRldl9hZGRyLCBoYS0+YWRkciwgNSkpCiAJCQlyZXR1cm4gMDsKIAkJaWYgKChkZXYtPmRldl9hZGRyWzVdIF4gaGEtPmFkZHJbNV0pICYgMHhmMCkKQEAgLTE3OTUsNyArMTc5NCw3IEBACiAJbWVtc2V0KG1jX3NwZWMsIDAsIDB4MTAwKTsKIAltZW1zZXQobWNfb3RoZXIsIDAsIDB4MTAwKTsKIAotCWZvciAoYWRkciA9IGRldi0+bWNfbGlzdDsgYWRkciAhPSBOVUxMOyBhZGRyID0gYWRkci0+bmV4dCkgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGFkZHIsIGRldikgewogCQl1OCAqYSA9IGFkZHItPmRhX2FkZHI7CiAJCXUzMiAqdGFibGU7CiAJCWludCBlbnRyeTsKQEAgLTI4NDcsNiArMjg0Niw3IEBACiAJLm5kb19zdGFydF94bWl0CQk9IG12NjQzeHhfZXRoX3htaXQsCiAJLm5kb19zZXRfcnhfbW9kZQk9IG12NjQzeHhfZXRoX3NldF9yeF9tb2RlLAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gbXY2NDN4eF9ldGhfc2V0X21hY19hZGRyZXNzLAorCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogCS5uZG9fZG9faW9jdGwJCT0gbXY2NDN4eF9ldGhfaW9jdGwsCiAJLm5kb19jaGFuZ2VfbXR1CQk9IG12NjQzeHhfZXRoX2NoYW5nZV9tdHUsCiAJLm5kb190eF90aW1lb3V0CQk9IG12NjQzeHhfZXRoX3R4X3RpbWVvdXQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jIGIvZHJpdmVycy9uZXQvbXlyaTEwZ2UvbXlyaTEwZ2UuYwppbmRleCAzZmNiMWMzLi42NzZjNTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9teXJpMTBnZS9teXJpMTBnZS5jCisrKyBiL2RyaXZlcnMvbmV0L215cmkxMGdlL215cmkxMGdlLmMKQEAgLTM4LDYgKzM4LDggQEAKICAqICAgTXlyaWNvbSwgSW5jLiwgMzI1TiBTYW50YSBBbml0YSBBdmVudWUsIEFyY2FkaWEsIENBIDkxMDA2CiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CkBAIC03NSw3ICs3Nyw3IEBACiAjaW5jbHVkZSAibXlyaTEwZ2VfbWNwLmgiCiAjaW5jbHVkZSAibXlyaTEwZ2VfbWNwX2dlbl9oZWFkZXIuaCIKIAotI2RlZmluZSBNWVJJMTBHRV9WRVJTSU9OX1NUUiAiMS41LjEtMS40NTMiCisjZGVmaW5lIE1ZUkkxMEdFX1ZFUlNJT05fU1RSICIxLjUuMi0xLjQ1OSIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJNeXJpY29tIDEwRyBkcml2ZXIgKDEwR2JFKSIpOwogTU9EVUxFX0FVVEhPUigiTWFpbnRhaW5lcjogaGVscEBteXJpLmNvbSIpOwpAQCAtODE5LDkgKzgyMSw3IEBACiAJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBjdGwsICZjbWQsIDApOwogCiAJaWYgKHN0YXR1cykgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJteXJpMTBnZTogJXM6IEZhaWxlZCB0byBzZXQgZmxvdyBjb250cm9sIG1vZGVcbiIsCi0JCSAgICAgICBtZ3AtPmRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIobWdwLT5kZXYsICJGYWlsZWQgdG8gc2V0IGZsb3cgY29udHJvbCBtb2RlXG4iKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAJbWdwLT5wYXVzZSA9IHBhdXNlOwpAQCAtODM3LDggKzgzNyw3IEBACiAJY3RsID0gcHJvbWlzYyA/IE1YR0VGV19FTkFCTEVfUFJPTUlTQyA6IE1YR0VGV19ESVNBQkxFX1BST01JU0M7CiAJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBjdGwsICZjbWQsIGF0b21pYyk7CiAJaWYgKHN0YXR1cykKLQkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IEZhaWxlZCB0byBzZXQgcHJvbWlzYyBtb2RlXG4iLAotCQkgICAgICAgbWdwLT5kZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKG1ncC0+ZGV2LCAiRmFpbGVkIHRvIHNldCBwcm9taXNjIG1vZGVcbiIpOwogfQogCiBzdGF0aWMgaW50IG15cmkxMGdlX2RtYV90ZXN0KHN0cnVjdCBteXJpMTBnZV9wcml2ICptZ3AsIGludCB0ZXN0X3R5cGUpCkBAIC0xMjAxLDYgKzEyMDAsOSBAQAogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCWludCBpZHg7CisjaWYgTVlSSTEwR0VfQUxMT0NfU0laRSA+IDQwOTYKKwlpbnQgZW5kX29mZnNldDsKKyNlbmRpZgogCiAJaWYgKHVubGlrZWx5KHJ4LT53YXRjaGRvZ19uZWVkZWQgJiYgIXdhdGNoZG9nKSkKIAkJcmV0dXJuOwpAQCAtMTI0Miw5ICsxMjQ0LDkgQEAKIAogI2lmIE1ZUkkxMEdFX0FMTE9DX1NJWkUgPiA0MDk2CiAJCS8qIGRvbid0IGNyb3NzIGEgNEtCIGJvdW5kYXJ5ICovCi0JCWlmICgocngtPnBhZ2Vfb2Zmc2V0ID4+IDEyKSAhPQotCQkgICAgKChyeC0+cGFnZV9vZmZzZXQgKyBieXRlcyAtIDEpID4+IDEyKSkKLQkJCXJ4LT5wYWdlX29mZnNldCA9IChyeC0+cGFnZV9vZmZzZXQgKyA0MDk2KSAmIH40MDk1OworCQllbmRfb2Zmc2V0ID0gcngtPnBhZ2Vfb2Zmc2V0ICsgYnl0ZXMgLSAxOworCQlpZiAoKHVuc2lnbmVkKShyeC0+cGFnZV9vZmZzZXQgXiBlbmRfb2Zmc2V0KSA+IDQwOTUpCisJCQlyeC0+cGFnZV9vZmZzZXQgPSBlbmRfb2Zmc2V0ICYgfjQwOTU7CiAjZW5kaWYKIAkJcngtPmZpbGxfY250Kys7CiAKQEAgLTE0ODIsMTkgKzE0ODQsMTUgQEAKIAogCQkJaWYgKG1ncC0+bGlua19zdGF0ZSA9PSBNWEdFRldfTElOS19VUCkgewogCQkJCWlmIChuZXRpZl9tc2dfbGluayhtZ3ApKQotCQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJCSAgICAgICAibXlyaTEwZ2U6ICVzOiBsaW5rIHVwXG4iLAotCQkJCQkgICAgICAgbWdwLT5kZXYtPm5hbWUpOworCQkJCQluZXRkZXZfaW5mbyhtZ3AtPmRldiwgImxpbmsgdXBcbiIpOwogCQkJCW5ldGlmX2NhcnJpZXJfb24obWdwLT5kZXYpOwogCQkJCW1ncC0+bGlua19jaGFuZ2VzKys7CiAJCQl9IGVsc2UgewogCQkJCWlmIChuZXRpZl9tc2dfbGluayhtZ3ApKQotCQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJCSAgICAgICAibXlyaTEwZ2U6ICVzOiBsaW5rICVzXG4iLAotCQkJCQkgICAgICAgbWdwLT5kZXYtPm5hbWUsCi0JCQkJCSAgICAgICAobGlua191cCA9PSBNWEdFRldfTElOS19NWVJJTkVUID8KLQkJCQkJCSJtaXNtYXRjaCAoTXlyaW5ldCBkZXRlY3RlZCkiIDoKLQkJCQkJCSJkb3duIikpOworCQkJCQluZXRkZXZfaW5mbyhtZ3AtPmRldiwgImxpbmsgJXNcbiIsCisJCQkJCSAgICBsaW5rX3VwID09IE1YR0VGV19MSU5LX01ZUklORVQgPworCQkJCQkgICAgIm1pc21hdGNoIChNeXJpbmV0IGRldGVjdGVkKSIgOgorCQkJCQkgICAgImRvd24iKTsKIAkJCQluZXRpZl9jYXJyaWVyX29mZihtZ3AtPmRldik7CiAJCQkJbWdwLT5saW5rX2NoYW5nZXMrKzsKIAkJCX0KQEAgLTE1MDMsOSArMTUwMSw4IEBACiAJCSAgICBudG9obChzdGF0cy0+cmRtYV90YWdzX2F2YWlsYWJsZSkpIHsKIAkJCW1ncC0+cmRtYV90YWdzX2F2YWlsYWJsZSA9CiAJCQkgICAgbnRvaGwoc3RhdHMtPnJkbWFfdGFnc19hdmFpbGFibGUpOwotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXlyaTEwZ2U6ICVzOiBSRE1BIHRpbWVkIG91dCEgIgotCQkJICAgICAgICIlZCB0YWdzIGxlZnRcbiIsIG1ncC0+ZGV2LT5uYW1lLAotCQkJICAgICAgIG1ncC0+cmRtYV90YWdzX2F2YWlsYWJsZSk7CisJCQluZXRkZXZfd2FybihtZ3AtPmRldiwgIlJETUEgdGltZWQgb3V0ISAlZCB0YWdzIGxlZnRcbiIsCisJCQkJICAgIG1ncC0+cmRtYV90YWdzX2F2YWlsYWJsZSk7CiAJCX0KIAkJbWdwLT5kb3duX2NudCArPSBzdGF0cy0+bGlua19kb3duOwogCQlpZiAoc3RhdHMtPmxpbmtfZG93bikKQEAgLTE1NzYsOCArMTU3Myw3IEBACiAJCWlmIChzZW5kX2RvbmVfY291bnQgIT0gdHgtPnBrdF9kb25lKQogCQkJbXlyaTEwZ2VfdHhfZG9uZShzcywgKGludClzZW5kX2RvbmVfY291bnQpOwogCQlpZiAodW5saWtlbHkoaSA+IG15cmkxMGdlX21heF9pcnFfbG9vcHMpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJteXJpMTBnZTogJXM6IGlycSBzdHVjaz9cbiIsCi0JCQkgICAgICAgbWdwLT5kZXYtPm5hbWUpOworCQkJbmV0ZGV2X2VycihtZ3AtPmRldiwgImlycSBzdHVjaz9cbiIpOwogCQkJc3RhdHMtPnZhbGlkID0gMDsKIAkJCXNjaGVkdWxlX3dvcmsoJm1ncC0+d2F0Y2hkb2dfd29yayk7CiAJCX0KQEAgLTE2MTQsMTYgKzE2MTAsMTQgQEAKIAkgKi8KIAlwdHIgPSBtZ3AtPnByb2R1Y3RfY29kZV9zdHJpbmc7CiAJaWYgKHB0ciA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBNaXNzaW5nIHByb2R1Y3QgY29kZVxuIiwKLQkJICAgICAgIG5ldGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIobmV0ZGV2LCAiTWlzc2luZyBwcm9kdWN0IGNvZGVcbiIpOwogCQlyZXR1cm4gMDsKIAl9CiAJZm9yIChpID0gMDsgaSA8IDM7IGkrKywgcHRyKyspIHsKIAkJcHRyID0gc3RyY2hyKHB0ciwgJy0nKTsKIAkJaWYgKHB0ciA9PSBOVUxMKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogSW52YWxpZCBwcm9kdWN0ICIKLQkJCSAgICAgICAiY29kZSAlc1xuIiwgbmV0ZGV2LT5uYW1lLAotCQkJICAgICAgIG1ncC0+cHJvZHVjdF9jb2RlX3N0cmluZyk7CisJCQluZXRkZXZfZXJyKG5ldGRldiwgIkludmFsaWQgcHJvZHVjdCBjb2RlICVzXG4iLAorCQkJCSAgIG1ncC0+cHJvZHVjdF9jb2RlX3N0cmluZyk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KQEAgLTIwMDksMTcgKzIwMDMsMTUgQEAKIAkJCQltZ3AtPnNtYWxsX2J5dGVzICsgTVhHRUZXX1BBRCwgMCk7CiAKIAlpZiAoc3MtPnJ4X3NtYWxsLmZpbGxfY250IDwgc3MtPnJ4X3NtYWxsLm1hc2sgKyAxKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIm15cmkxMGdlOiAlczpzbGljZS0lZDogYWxsb2NlZCBvbmx5ICVkIHNtYWxsIGJ1ZnNcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHNsaWNlLCBzcy0+cnhfc21hbGwuZmlsbF9jbnQpOworCQluZXRkZXZfZXJyKGRldiwgInNsaWNlLSVkOiBhbGxvY2VkIG9ubHkgJWQgc21hbGwgYnVmc1xuIiwKKwkJCSAgIHNsaWNlLCBzcy0+cnhfc21hbGwuZmlsbF9jbnQpOwogCQlnb3RvIGFib3J0X3dpdGhfcnhfc21hbGxfcmluZzsKIAl9CiAKIAlteXJpMTBnZV9hbGxvY19yeF9wYWdlcyhtZ3AsICZzcy0+cnhfYmlnLCBtZ3AtPmJpZ19ieXRlcywgMCk7CiAJaWYgKHNzLT5yeF9iaWcuZmlsbF9jbnQgPCBzcy0+cnhfYmlnLm1hc2sgKyAxKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIm15cmkxMGdlOiAlczpzbGljZS0lZDogYWxsb2NlZCBvbmx5ICVkIGJpZyBidWZzXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBzbGljZSwgc3MtPnJ4X2JpZy5maWxsX2NudCk7CisJCW5ldGRldl9lcnIoZGV2LCAic2xpY2UtJWQ6IGFsbG9jZWQgb25seSAlZCBiaWcgYnVmc1xuIiwKKwkJCSAgIHNsaWNlLCBzcy0+cnhfYmlnLmZpbGxfY250KTsKIAkJZ290byBhYm9ydF93aXRoX3J4X2JpZ19yaW5nOwogCX0KIApAQCAtMjM1OCw3ICsyMzUwLDcgQEAKIAltZ3AtPnJ1bm5pbmcgPSBNWVJJMTBHRV9FVEhfU1RBUlRJTkc7CiAJc3RhdHVzID0gbXlyaTEwZ2VfcmVzZXQobWdwKTsKIAlpZiAoc3RhdHVzICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IGZhaWxlZCByZXNldFxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJmYWlsZWQgcmVzZXRcbiIpOwogCQlnb3RvIGFib3J0X3dpdGhfbm90aGluZzsKIAl9CiAKQEAgLTIzNzAsOSArMjM2Miw3IEBACiAJCXN0YXR1cyA9IG15cmkxMGdlX3NlbmRfY21kKG1ncCwgTVhHRUZXX0NNRF9FTkFCTEVfUlNTX1FVRVVFUywKIAkJCQkJICAgJmNtZCwgMCk7CiAJCWlmIChzdGF0dXMgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIm15cmkxMGdlOiAlczogZmFpbGVkIHRvIHNldCBudW1iZXIgb2Ygc2xpY2VzXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQluZXRkZXZfZXJyKGRldiwgImZhaWxlZCB0byBzZXQgbnVtYmVyIG9mIHNsaWNlc1xuIik7CiAJCQlnb3RvIGFib3J0X3dpdGhfbm90aGluZzsKIAkJfQogCQkvKiBzZXR1cCB0aGUgaW5kaXJlY3Rpb24gdGFibGUgKi8KQEAgLTIzODQsOSArMjM3NCw3IEBACiAJCQkJCSAgICBNWEdFRldfQ01EX0dFVF9SU1NfVEFCTEVfT0ZGU0VULAogCQkJCQkgICAgJmNtZCwgMCk7CiAJCWlmIChzdGF0dXMgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIm15cmkxMGdlOiAlczogZmFpbGVkIHRvIHNldHVwIHJzcyB0YWJsZXNcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHNldHVwIHJzcyB0YWJsZXNcbiIpOwogCQkJZ290byBhYm9ydF93aXRoX25vdGhpbmc7CiAJCX0KIApAQCAtMjQwMCw5ICsyMzg4LDcgQEAKIAkJc3RhdHVzID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfQ01EX1NFVF9SU1NfRU5BQkxFLAogCQkJCQkgICAmY21kLCAwKTsKIAkJaWYgKHN0YXR1cyAhPSAwKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAibXlyaTEwZ2U6ICVzOiBmYWlsZWQgdG8gZW5hYmxlIHNsaWNlc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZW5hYmxlIHNsaWNlc1xuIik7CiAJCQlnb3RvIGFib3J0X3dpdGhfbm90aGluZzsKIAkJfQogCX0KQEAgLTI0NTAsOSArMjQzNiw3IEBACiAKIAkJc3RhdHVzID0gbXlyaTEwZ2VfZ2V0X3R4cngobWdwLCBzbGljZSk7CiAJCWlmIChzdGF0dXMgIT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIm15cmkxMGdlOiAlczogZmFpbGVkIHRvIGdldCByaW5nIHNpemVzIG9yIGxvY2F0aW9uc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IHJpbmcgc2l6ZXMgb3IgbG9jYXRpb25zXG4iKTsKIAkJCWdvdG8gYWJvcnRfd2l0aF9yaW5nczsKIAkJfQogCQlzdGF0dXMgPSBteXJpMTBnZV9hbGxvY2F0ZV9yaW5ncyhzcyk7CkBAIC0yNDY1LDkgKzI0NDksNyBAQAogCQlpZiAoc2xpY2UgPT0gMCB8fCBtZ3AtPmRldi0+cmVhbF9udW1fdHhfcXVldWVzID4gMSkKIAkJCXN0YXR1cyA9IG15cmkxMGdlX3NldF9zdGF0cyhtZ3AsIHNsaWNlKTsKIAkJaWYgKHN0YXR1cykgewotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIm15cmkxMGdlOiAlczogQ291bGRuJ3Qgc2V0IHN0YXRzIERNQVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X2VycihkZXYsICJDb3VsZG4ndCBzZXQgc3RhdHMgRE1BXG4iKTsKIAkJCWdvdG8gYWJvcnRfd2l0aF9yaW5nczsKIAkJfQogCkBAIC0yNDk4LDggKzI0ODAsNyBAQAogCXN0YXR1cyB8PQogCSAgICBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfU0VUX0JJR19CVUZGRVJfU0laRSwgJmNtZCwgMCk7CiAJaWYgKHN0YXR1cykgewotCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogQ291bGRuJ3Qgc2V0IGJ1ZmZlciBzaXplc1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiQ291bGRuJ3Qgc2V0IGJ1ZmZlciBzaXplc1xuIik7CiAJCWdvdG8gYWJvcnRfd2l0aF9yaW5nczsKIAl9CiAKQEAgLTI1MTEsOCArMjQ5Miw3IEBACiAJY21kLmRhdGEwID0gMDsKIAlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfU0VUX1RTT19NT0RFLCAmY21kLCAwKTsKIAlpZiAoc3RhdHVzICYmIHN0YXR1cyAhPSAtRU5PU1lTKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBDb3VsZG4ndCBzZXQgVFNPIG1vZGVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgIkNvdWxkbid0IHNldCBUU08gbW9kZVxuIik7CiAJCWdvdG8gYWJvcnRfd2l0aF9yaW5nczsKIAl9CiAKQEAgLTI1MjEsOCArMjUwMSw3IEBACiAKIAlzdGF0dXMgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfRVRIRVJORVRfVVAsICZjbWQsIDApOwogCWlmIChzdGF0dXMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IENvdWxkbid0IGJyaW5nIHVwIGxpbmtcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgIkNvdWxkbid0IGJyaW5nIHVwIGxpbmtcbiIpOwogCQlnb3RvIGFib3J0X3dpdGhfcmluZ3M7CiAJfQogCkBAIC0yNTc1LDE1ICsyNTU0LDEyIEBACiAJCXN0YXR1cyA9CiAJCSAgICBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19DTURfRVRIRVJORVRfRE9XTiwgJmNtZCwgMCk7CiAJCWlmIChzdGF0dXMpCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAibXlyaTEwZ2U6ICVzOiBDb3VsZG4ndCBicmluZyBkb3duIGxpbmtcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAiQ291bGRuJ3QgYnJpbmcgZG93biBsaW5rXG4iKTsKIAogCQl3YWl0X2V2ZW50X3RpbWVvdXQobWdwLT5kb3duX3dxLCBvbGRfZG93bl9jbnQgIT0gbWdwLT5kb3duX2NudCwKIAkJCQkgICBIWik7CiAJCWlmIChvbGRfZG93bl9jbnQgPT0gbWdwLT5kb3duX2NudCkKLQkJCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzIG5ldmVyIGdvdCBkb3duIGlycVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X2VycihkZXYsICJuZXZlciBnb3QgZG93biBpcnFcbiIpOwogCX0KIAluZXRpZl90eF9kaXNhYmxlKGRldik7CiAJbXlyaTEwZ2VfZnJlZV9pcnEobWdwKTsKQEAgLTI5NDQsOSArMjkyMCw3IEBACiAJCWlkeCA9IChpZHggKyAxKSAmIHR4LT5tYXNrOwogCX0gd2hpbGUgKGlkeCAhPSBsYXN0X2lkeCk7CiAJaWYgKHNrYl9pc19nc28oc2tiKSkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJteXJpMTBnZTogJXM6IFRTTyBidXQgd2FudGVkIHRvIGxpbmVhcml6ZT8hPyE/XG4iLAotCQkgICAgICAgbWdwLT5kZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKG1ncC0+ZGV2LCAiVFNPIGJ1dCB3YW50ZWQgdG8gbGluZWFyaXplPyE/IT9cbiIpOwogCQlnb3RvIGRyb3A7CiAJfQogCkBAIC0zMDQzLDggKzMwMTcsOCBAQAogCiAJZXJyID0gbXlyaTEwZ2Vfc2VuZF9jbWQobWdwLCBNWEdFRldfRU5BQkxFX0FMTE1VTFRJLCAmY21kLCAxKTsKIAlpZiAoZXJyICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IEZhaWxlZCBNWEdFRldfRU5BQkxFX0FMTE1VTFRJLCIKLQkJICAgICAgICIgZXJyb3Igc3RhdHVzOiAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCQluZXRkZXZfZXJyKGRldiwgIkZhaWxlZCBNWEdFRldfRU5BQkxFX0FMTE1VTFRJLCBlcnJvciBzdGF0dXM6ICVkXG4iLAorCQkJICAgZXJyKTsKIAkJZ290byBhYm9ydDsKIAl9CiAKQEAgLTMwNTgsMTQgKzMwMzIsMTMgQEAKIAllcnIgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19MRUFWRV9BTExfTVVMVElDQVNUX0dST1VQUywKIAkJCQkmY21kLCAxKTsKIAlpZiAoZXJyICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAibXlyaTEwZ2U6ICVzOiBGYWlsZWQgTVhHRUZXX0xFQVZFX0FMTF9NVUxUSUNBU1RfR1JPVVBTIgotCQkgICAgICAgIiwgZXJyb3Igc3RhdHVzOiAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCQluZXRkZXZfZXJyKGRldiwgIkZhaWxlZCBNWEdFRldfTEVBVkVfQUxMX01VTFRJQ0FTVF9HUk9VUFMsIGVycm9yIHN0YXR1czogJWRcbiIsCisJCQkgICBlcnIpOwogCQlnb3RvIGFib3J0OwogCX0KIAogCS8qIFdhbGsgdGhlIG11bHRpY2FzdCBsaXN0LCBhbmQgYWRkIGVhY2ggYWRkcmVzcyAqLwotCWZvciAobWNfbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNfbGlzdCAhPSBOVUxMOyBtY19saXN0ID0gbWNfbGlzdC0+bmV4dCkgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jX2xpc3QsIGRldikgewogCQltZW1jcHkoZGF0YSwgJm1jX2xpc3QtPmRtaV9hZGRyLCA2KTsKIAkJY21kLmRhdGEwID0gbnRvaGwoZGF0YVswXSk7CiAJCWNtZC5kYXRhMSA9IG50b2hsKGRhdGFbMV0pOwpAQCAtMzA3MywxOCArMzA0NiwxNiBAQAogCQkJCQkmY21kLCAxKTsKIAogCQlpZiAoZXJyICE9IDApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBGYWlsZWQgIgotCQkJICAgICAgICJNWEdFRldfSk9JTl9NVUxUSUNBU1RfR1JPVVAsIGVycm9yIHN0YXR1czoiCi0JCQkgICAgICAgIiVkXHQiLCBkZXYtPm5hbWUsIGVycik7Ci0JCQlwcmludGsoS0VSTl9FUlIgIk1BQyAlcE1cbiIsIG1jX2xpc3QtPmRtaV9hZGRyKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAiRmFpbGVkIE1YR0VGV19KT0lOX01VTFRJQ0FTVF9HUk9VUCwgZXJyb3Igc3RhdHVzOiVkICVwTVxuIiwKKwkJCQkgICBlcnIsIG1jX2xpc3QtPmRtaV9hZGRyKTsKIAkJCWdvdG8gYWJvcnQ7CiAJCX0KIAl9CiAJLyogRW5hYmxlIG11bHRpY2FzdCBmaWx0ZXJpbmcgKi8KIAllcnIgPSBteXJpMTBnZV9zZW5kX2NtZChtZ3AsIE1YR0VGV19ESVNBQkxFX0FMTE1VTFRJLCAmY21kLCAxKTsKIAlpZiAoZXJyICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJteXJpMTBnZTogJXM6IEZhaWxlZCBNWEdFRldfRElTQUJMRV9BTExNVUxUSSwiCi0JCSAgICAgICAiZXJyb3Igc3RhdHVzOiAlZFxuIiwgZGV2LT5uYW1lLCBlcnIpOworCQluZXRkZXZfZXJyKGRldiwgIkZhaWxlZCBNWEdFRldfRElTQUJMRV9BTExNVUxUSSwgZXJyb3Igc3RhdHVzOiAlZFxuIiwKKwkJCSAgIGVycik7CiAJCWdvdG8gYWJvcnQ7CiAJfQogCkBAIC0zMTA1LDkgKzMwNzYsOCBAQAogCiAJc3RhdHVzID0gbXlyaTEwZ2VfdXBkYXRlX21hY19hZGRyZXNzKG1ncCwgc2EtPnNhX2RhdGEpOwogCWlmIChzdGF0dXMgIT0gMCkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJteXJpMTBnZTogJXM6IGNoYW5naW5nIG1hYyBhZGRyZXNzIGZhaWxlZCB3aXRoICVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCQluZXRkZXZfZXJyKGRldiwgImNoYW5naW5nIG1hYyBhZGRyZXNzIGZhaWxlZCB3aXRoICVkXG4iLAorCQkJICAgc3RhdHVzKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKQEAgLTMxMjIsMTIgKzMwOTIsMTAgQEAKIAlpbnQgZXJyb3IgPSAwOwogCiAJaWYgKChuZXdfbXR1IDwgNjgpIHx8IChFVEhfSExFTiArIG5ld19tdHUgPiBNWVJJMTBHRV9NQVhfRVRIRVJfTVRVKSkgewotCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogbmV3IG10dSAoJWQpIGlzIG5vdCB2YWxpZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbmV3X210dSk7CisJCW5ldGRldl9lcnIoZGV2LCAibmV3IG10dSAoJWQpIGlzIG5vdCB2YWxpZFxuIiwgbmV3X210dSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlwcmludGsoS0VSTl9JTkZPICIlczogY2hhbmdpbmcgbXR1IGZyb20gJWQgdG8gJWRcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgZGV2LT5tdHUsIG5ld19tdHUpOworCW5ldGRldl9pbmZvKGRldiwgImNoYW5naW5nIG10dSBmcm9tICVkIHRvICVkXG4iLCBkZXYtPm10dSwgbmV3X210dSk7CiAJaWYgKG1ncC0+cnVubmluZykgewogCQkvKiBpZiB3ZSBjaGFuZ2UgdGhlIG10dSBvbiBhbiBhY3RpdmUgZGV2aWNlLCB3ZSBtdXN0CiAJCSAqIHJlc2V0IHRoZSBkZXZpY2Ugc28gdGhlIGZpcm13YXJlIHNlZXMgdGhlIGNoYW5nZSAqLwpAQCAtMzM1Niw3ICszMzI0LDcgQEAKIAogCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKIAlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIm15cmkxMGdlOiBjbG9zaW5nICVzXG4iLCBuZXRkZXYtPm5hbWUpOworCQluZXRkZXZfaW5mbyhuZXRkZXYsICJjbG9zaW5nXG4iKTsKIAkJcnRubF9sb2NrKCk7CiAJCW15cmkxMGdlX2Nsb3NlKG5ldGRldik7CiAJCXJ0bmxfdW5sb2NrKCk7CkBAIC0zMzgzLDggKzMzNTEsNyBAQAogCW1zbGVlcCg1KTsJCS8qIGdpdmUgY2FyZCB0aW1lIHRvIHJlc3BvbmQgKi8KIAlwY2lfcmVhZF9jb25maWdfd29yZChtZ3AtPnBkZXYsIFBDSV9WRU5ET1JfSUQsICZ2ZW5kb3IpOwogCWlmICh2ZW5kb3IgPT0gMHhmZmZmKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBkZXZpY2UgZGlzYXBwZWFyZWQhXG4iLAotCQkgICAgICAgbWdwLT5kZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKG1ncC0+ZGV2LCAiZGV2aWNlIGRpc2FwcGVhcmVkIVxuIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMzQ2MywxMCArMzQzMCw5IEBACiAJCSAqIGlmIHRoZSBjYXJkIHJlYm9vdGVkIGR1ZSB0byBhIHBhcml0eSBlcnJvcgogCQkgKiBGb3Igbm93LCBqdXN0IHJlcG9ydCBpdCAqLwogCQlyZWJvb3QgPSBteXJpMTBnZV9yZWFkX3JlYm9vdChtZ3ApOwotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJteXJpMTBnZTogJXM6IE5JQyByZWJvb3RlZCAoMHgleCksJXMgcmVzZXR0aW5nXG4iLAotCQkgICAgICAgbWdwLT5kZXYtPm5hbWUsIHJlYm9vdCwKLQkJICAgICAgIG15cmkxMGdlX3Jlc2V0X3JlY292ZXIgPyAiICIgOiAiIG5vdCIpOworCQluZXRkZXZfZXJyKG1ncC0+ZGV2LCAiTklDIHJlYm9vdGVkICgweCV4KSwlcyByZXNldHRpbmdcbiIsCisJCQkgICByZWJvb3QsCisJCQkgICBteXJpMTBnZV9yZXNldF9yZWNvdmVyID8gIiIgOiAiIG5vdCIpOwogCQlpZiAobXlyaTEwZ2VfcmVzZXRfcmVjb3ZlciA9PSAwKQogCQkJcmV0dXJuOwogCQlydG5sX2xvY2soKTsKQEAgLTM0OTQsMzEgKzM0NjAsMjYgQEAKIAkJaWYgKGNtZCA9PSAweGZmZmYpIHsKIAkJCXBjaV9yZWFkX2NvbmZpZ193b3JkKG1ncC0+cGRldiwgUENJX1ZFTkRPUl9JRCwgJnZlbmRvcik7CiAJCQlpZiAodmVuZG9yID09IDB4ZmZmZikgewotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAibXlyaTEwZ2U6ICVzOiBkZXZpY2UgZGlzYXBwZWFyZWQhXG4iLAotCQkJCSAgICAgICBtZ3AtPmRldi0+bmFtZSk7CisJCQkJbmV0ZGV2X2VycihtZ3AtPmRldiwgImRldmljZSBkaXNhcHBlYXJlZCFcbiIpOwogCQkJCXJldHVybjsKIAkJCX0KIAkJfQogCQkvKiBQZXJoYXBzIGl0IGlzIGEgc29mdHdhcmUgZXJyb3IuICBUcnkgdG8gcmVzZXQgKi8KIAotCQlwcmludGsoS0VSTl9FUlIgIm15cmkxMGdlOiAlczogZGV2aWNlIHRpbWVvdXQsIHJlc2V0dGluZ1xuIiwKLQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihtZ3AtPmRldiwgImRldmljZSB0aW1lb3V0LCByZXNldHRpbmdcbiIpOwogCQlmb3IgKGkgPSAwOyBpIDwgbWdwLT5udW1fc2xpY2VzOyBpKyspIHsKIAkJCXR4ID0gJm1ncC0+c3NbaV0udHg7Ci0JCQlwcmludGsoS0VSTl9JTkZPCi0JCQkgICAgICAgIm15cmkxMGdlOiAlczogKCVkKTogJWQgJWQgJWQgJWQgJWQgJWRcbiIsCi0JCQkgICAgICAgbWdwLT5kZXYtPm5hbWUsIGksIHR4LT5xdWV1ZV9hY3RpdmUsIHR4LT5yZXEsCi0JCQkgICAgICAgdHgtPmRvbmUsIHR4LT5wa3Rfc3RhcnQsIHR4LT5wa3RfZG9uZSwKLQkJCSAgICAgICAoaW50KW50b2hsKG1ncC0+c3NbaV0uZndfc3RhdHMtPgotCQkJCQkgIHNlbmRfZG9uZV9jb3VudCkpOworCQkJbmV0ZGV2X2VycihtZ3AtPmRldiwgIiglZCk6ICVkICVkICVkICVkICVkICVkXG4iLAorCQkJCSAgIGksIHR4LT5xdWV1ZV9hY3RpdmUsIHR4LT5yZXEsCisJCQkJICAgdHgtPmRvbmUsIHR4LT5wa3Rfc3RhcnQsIHR4LT5wa3RfZG9uZSwKKwkJCQkgICAoaW50KW50b2hsKG1ncC0+c3NbaV0uZndfc3RhdHMtPgorCQkJCQkgICAgICBzZW5kX2RvbmVfY291bnQpKTsKIAkJCW1zbGVlcCgyMDAwKTsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCSAgICAgICAibXlyaTEwZ2U6ICVzOiAoJWQpOiAlZCAlZCAlZCAlZCAlZCAlZFxuIiwKLQkJCSAgICAgICBtZ3AtPmRldi0+bmFtZSwgaSwgdHgtPnF1ZXVlX2FjdGl2ZSwgdHgtPnJlcSwKLQkJCSAgICAgICB0eC0+ZG9uZSwgdHgtPnBrdF9zdGFydCwgdHgtPnBrdF9kb25lLAotCQkJICAgICAgIChpbnQpbnRvaGwobWdwLT5zc1tpXS5md19zdGF0cy0+Ci0JCQkJCSAgc2VuZF9kb25lX2NvdW50KSk7CisJCQluZXRkZXZfaW5mbyhtZ3AtPmRldiwgIiglZCk6ICVkICVkICVkICVkICVkICVkXG4iLAorCQkJCSAgICBpLCB0eC0+cXVldWVfYWN0aXZlLCB0eC0+cmVxLAorCQkJCSAgICB0eC0+ZG9uZSwgdHgtPnBrdF9zdGFydCwgdHgtPnBrdF9kb25lLAorCQkJCSAgICAoaW50KW50b2hsKG1ncC0+c3NbaV0uZndfc3RhdHMtPgorCQkJCQkgICAgICAgc2VuZF9kb25lX2NvdW50KSk7CiAJCX0KIAl9CiAKQEAgLTM1MjgsOCArMzQ4OSw3IEBACiAJfQogCXN0YXR1cyA9IG15cmkxMGdlX2xvYWRfZmlybXdhcmUobWdwLCAxKTsKIAlpZiAoc3RhdHVzICE9IDApCi0JCXByaW50ayhLRVJOX0VSUiAibXlyaTEwZ2U6ICVzOiBmYWlsZWQgdG8gbG9hZCBmaXJtd2FyZVxuIiwKLQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihtZ3AtPmRldiwgImZhaWxlZCB0byBsb2FkIGZpcm13YXJlXG4iKTsKIAllbHNlCiAJCW15cmkxMGdlX29wZW4obWdwLT5kZXYpOwogCXJ0bmxfdW5sb2NrKCk7CkBAIC0zNTgwLDE0ICszNTQwLDEwIEBACiAJCQkvKiBuaWMgc2VlbXMgbGlrZSBpdCBtaWdodCBiZSBzdHVjay4uICovCiAJCQlpZiAocnhfcGF1c2VfY250ICE9IG1ncC0+d2F0Y2hkb2dfcGF1c2UpIHsKIAkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCQkJCSAgICAgICAibXlyaTEwZ2UgJXMgc2xpY2UgJWQ6IgotCQkJCQkgICAgICAgIlRYIHBhdXNlZCwgY2hlY2sgbGluayBwYXJ0bmVyXG4iLAotCQkJCQkgICAgICAgbWdwLT5kZXYtPm5hbWUsIGkpOworCQkJCQluZXRkZXZfZXJyKG1ncC0+ZGV2LCAic2xpY2UgJWQ6IFRYIHBhdXNlZCwgY2hlY2sgbGluayBwYXJ0bmVyXG4iLAorCQkJCQkJICAgaSk7CiAJCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkgICAgICAgIm15cmkxMGdlICVzIHNsaWNlICVkIHN0dWNrOiIsCi0JCQkJICAgICAgIG1ncC0+ZGV2LT5uYW1lLCBpKTsKKwkJCQluZXRkZXZfd2FybihtZ3AtPmRldiwgInNsaWNlICVkIHN0dWNrOiIsIGkpOwogCQkJCXJlc2V0X25lZWRlZCA9IDE7CiAJCQl9CiAJCX0KQEAgLTQwODUsNyArNDA0MSw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVlSSUNPTV9NWVJJMTBHRV9aOEUgCTB4MDAwOAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01ZUklDT01fTVlSSTEwR0VfWjhFXzkJMHgwMDA5CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBteXJpMTBnZV9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUobXlyaTEwZ2VfcGNpX3RibCkgPSB7CiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9NWVJJQ09NLCBQQ0lfREVWSUNFX0lEX01ZUklDT01fTVlSSTEwR0VfWjhFKX0sCiAJe1BDSV9ERVZJQ0UKIAkgKFBDSV9WRU5ET1JfSURfTVlSSUNPTSwgUENJX0RFVklDRV9JRF9NWVJJQ09NX01ZUkkxMEdFX1o4RV85KX0sCkBAIC00MTI3LDEzICs0MDgzLDExIEBACiAKIHN0YXRpYyBfX2luaXQgaW50IG15cmkxMGdlX2luaXRfbW9kdWxlKHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFZlcnNpb24gJXNcbiIsIG15cmkxMGdlX2RyaXZlci5uYW1lLAotCSAgICAgICBNWVJJMTBHRV9WRVJTSU9OX1NUUik7CisJcHJfaW5mbygiVmVyc2lvbiAlc1xuIiwgTVlSSTEwR0VfVkVSU0lPTl9TVFIpOwogCiAJaWYgKG15cmkxMGdlX3Jzc19oYXNoID4gTVhHRUZXX1JTU19IQVNIX1RZUEVfTUFYKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIiVzOiBJbGxlZ2FsIHJzc2ggaGFzaCB0eXBlICVkLCBkZWZhdWx0aW5nIHRvIHNvdXJjZSBwb3J0XG4iLAotCQkgICAgICAgbXlyaTEwZ2VfZHJpdmVyLm5hbWUsIG15cmkxMGdlX3Jzc19oYXNoKTsKKwkJcHJfZXJyKCJJbGxlZ2FsIHJzc2ggaGFzaCB0eXBlICVkLCBkZWZhdWx0aW5nIHRvIHNvdXJjZSBwb3J0XG4iLAorCQkgICAgICAgbXlyaTEwZ2VfcnNzX2hhc2gpOwogCQlteXJpMTBnZV9yc3NfaGFzaCA9IE1YR0VGV19SU1NfSEFTSF9UWVBFX1NSQ19QT1JUOwogCX0KICNpZmRlZiBDT05GSUdfTVlSSTEwR0VfRENBCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9teXJpX3NidXMuYyBiL2RyaXZlcnMvbmV0L215cmlfc2J1cy5jCmluZGV4IGIzNTEzYWQuLjhiNDMxMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L215cmlfc2J1cy5jCisrKyBiL2RyaXZlcnMvbmV0L215cmlfc2J1cy5jCkBAIC03MTYsMTAgKzcxNiwxMCBAQAogCXBhZFswXSA9IE1ZUklfUEFEX0xFTjsKIAlwYWRbMV0gPSAweGFiOwogCi0JLyogU2V0IHRoZSBwcm90b2NvbCB0eXBlLiBGb3IgYSBwYWNrZXQgb2YgdHlwZSBFVEhfUF84MDJfMyB3ZSBwdXQgdGhlIGxlbmd0aAotCSAqIGluIGhlcmUgaW5zdGVhZC4gSXQgaXMgdXAgdG8gdGhlIDgwMi4yIGxheWVyIHRvIGNhcnJ5IHByb3RvY29sIGluZm9ybWF0aW9uLgorCS8qIFNldCB0aGUgcHJvdG9jb2wgdHlwZS4gRm9yIGEgcGFja2V0IG9mIHR5cGUgRVRIX1BfODAyXzMvMiB3ZSBwdXQgdGhlCisJICogbGVuZ3RoIGluIGhlcmUgaW5zdGVhZC4KIAkgKi8KLQlpZiAodHlwZSAhPSBFVEhfUF84MDJfMykKKwlpZiAodHlwZSAhPSBFVEhfUF84MDJfMyAmJiB0eXBlICE9IEVUSF9QXzgwMl8yKQogCQlldGgtPmhfcHJvdG8gPSBodG9ucyh0eXBlKTsKIAllbHNlCiAJCWV0aC0+aF9wcm90byA9IGh0b25zKGxlbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uYXRzZW1pLmMgYi9kcml2ZXJzL25ldC9uYXRzZW1pLmMKaW5kZXggNzk3ZmUxNi4uZTUyMDM4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmF0c2VtaS5jCisrKyBiL2RyaXZlcnMvbmV0L25hdHNlbWkuYwpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJeyAiTmF0U2VtaSBEUDgzODFbNTZdIiwgMCwgMjQgfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuYXRzZW1pX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG5hdHNlbWlfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX05TLCAweDAwMjAsIDB4MTJkOSwgICAgIDB4MDAwYywgICAgIDAsIDAsIDAgfSwKIAl7IFBDSV9WRU5ET1JfSURfTlMsIDB4MDAyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMSB9LAogCXsgfQkvKiB0ZXJtaW5hdGUgbGlzdCAqLwpAQCAtMjQ4OCwxNiArMjQ4OCwxNiBAQAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsgLyogU2V0IHByb21pc2N1b3VzLiAqLwogCQlyeF9tb2RlID0gUnhGaWx0ZXJFbmFibGUgfCBBY2NlcHRCcm9hZGNhc3QKIAkJCXwgQWNjZXB0QWxsTXVsdGljYXN0IHwgQWNjZXB0QWxsUGh5cyB8IEFjY2VwdE15UGh5czsKLQl9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKKwl9IGVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpIHx8CiAJCSAgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQlyeF9tb2RlID0gUnhGaWx0ZXJFbmFibGUgfCBBY2NlcHRCcm9hZGNhc3QKIAkJCXwgQWNjZXB0QWxsTXVsdGljYXN0IHwgQWNjZXB0TXlQaHlzOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwogCQlpbnQgaTsKKwogCQltZW1zZXQobWNfZmlsdGVyLCAwLCBzaXplb2YobWNfZmlsdGVyKSk7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkJIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCQlpbnQgYiA9IChldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpID4+IDIzKSAmIDB4MWZmOwogCQkJbWNfZmlsdGVyW2IvOF0gfD0gKDEgPDwgKGIgJiAweDA3KSk7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25lMmstcGNpLmMgYi9kcml2ZXJzL25ldC9uZTJrLXBjaS5jCmluZGV4IDNmY2ViYjcuLjg1YWVjNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25lMmstcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvbmUyay1wY2kuYwpAQCAtMTM2LDcgKzEzNiw3IEBACiB9OwogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZTJrX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShuZTJrX3BjaV90YmwpID0gewogCXsgMHgxMGVjLCAweDgwMjksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENIX1JlYWxUZWtfUlRMXzgwMjkgfSwKIAl7IDB4MTA1MCwgMHgwOTQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSF9XaW5ib25kXzg5Qzk0MCB9LAogCXsgMHgxMWY2LCAweDE0MDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENIX0NvbXBleF9STDIwMDAgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L25ldHhlbi9NYWtlZmlsZQppbmRleCAxMWQ5NGUyLi44NjFhMDU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvbmV0eGVuL01ha2VmaWxlCkBAIC0xOCw3ICsxOCw3IEBACiAjIE1BICAwMjExMS0xMzA3LCBVU0EuCiAjIAogIyBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotIyBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS4KKyMgaW4gdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KICMgCiAjCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmggYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCmluZGV4IDliYzViZDFkLi4xNDRkMmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pYy5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljLmgKQEAgLTE5LDcgKzE5LDcgQEAKICAqIE1BICAwMjExMS0xMzA3LCBVU0EuCiAgKgogICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KLSAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICogaW4gdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KICAqCiAgKi8KIApAQCAtNDIwLDcgKzQyMCw3IEBACiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDE2KSkpOwogCiAvKiBVTklGSUVEIFJPTUlNQUdFICoqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIE5YX1VOSV9GV19NSU5fU0laRQkJMHgzZWIwMDAKKyNkZWZpbmUgTlhfVU5JX0ZXX01JTl9TSVpFCQkweGM4MDAwCiAjZGVmaW5lIE5YX1VOSV9ESVJfU0VDVF9QUk9EVUNUX1RCTAkweDAKICNkZWZpbmUgTlhfVU5JX0RJUl9TRUNUX0JPT1RMRAkJMHg2CiAjZGVmaW5lIE5YX1VOSV9ESVJfU0VDVF9GVwkJMHg3CkBAIC0xNDI3LDggKzE0MjcsOCBAQAogCiB9CiAKLWludCBuZXR4ZW5fZ2V0X2ZsYXNoX21hY19hZGRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgX19sZTY0ICptYWMpOwotaW50IG5ldHhlbl9wM19nZXRfbWFjX2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBfX2xlNjQgKm1hYyk7CitpbnQgbmV0eGVuX2dldF9mbGFzaF9tYWNfYWRkcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqbWFjKTsKK2ludCBuZXR4ZW5fcDNfZ2V0X21hY19hZGRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0ICptYWMpOwogZXh0ZXJuIHZvaWQgbmV0eGVuX2NoYW5nZV9yaW5ncGFyYW0oc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIGV4dGVybiBpbnQgbmV0eGVuX3JvbV9mYXN0X3JlYWQoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwKIAkJCQlpbnQgKnZhbHApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfY3R4LmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19jdHguYwppbmRleCA5Y2I4ZjY4Li4yYThlZjVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19jdHguYworKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19jdHguYwpAQCAtMTksNyArMTksNyBAQAogICogTUEgIDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgogICoKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ldGh0b29sLmMKaW5kZXggNTQyZjQwOC4uZjg0OTllNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2V0aHRvb2wuYwpAQCAtMTksNyArMTksNyBAQAogICogTUEgIDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgogICoKICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19oZHIuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCmluZGV4IGQxMzhmYzIuLjYyMmU0YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2hkci5oCkBAIC0xOSw3ICsxOSw3IEBACiAgKiBNQSAgMDIxMTEtMTMwNywgVVNBLgogICoKICAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCiAgKgogICovCiAKQEAgLTk2OSw3ICs5NjksOCBAQAogI2RlZmluZSBOWF9ERVZfUkVBRFkJCTMKICNkZWZpbmUgTlhfREVWX05FRURfUkVTRVQJNAogI2RlZmluZSBOWF9ERVZfTkVFRF9RVUlTQ0VOVAk1Ci0jZGVmaW5lIE5YX0RFVl9GQUlMRUQJCTYKKyNkZWZpbmUgTlhfREVWX05FRURfQUVSIAk2CisjZGVmaW5lIE5YX0RFVl9GQUlMRUQJCTcKIAogI2RlZmluZSBOWF9SQ09ERV9EUklWRVJfSU5GTwkJMHgyMDAwMDAwMAogI2RlZmluZSBOWF9SQ09ERV9EUklWRVJfQ0FOX1JFTE9BRAkweDQwMDAwMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jIGIvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuYwppbmRleCA4NWUyOGU2Li5hOTQ1NTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmMKQEAgLTE5LDcgKzE5LDcgQEAKICAqIE1BICAwMjExMS0xMzA3LCBVU0EuCiAgKgogICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KLSAqIGluIHRoZSBmaWxlIGNhbGxlZCBMSUNFTlNFLgorICogaW4gdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KICAqCiAgKi8KIApAQCAtNTM5LDcgKzUzOSw3IEBACiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX3B0cjsKIAl1OCBudWxsX2FkZHJbNl07Ci0JaW50IGluZGV4ID0gMDsKKwlpbnQgaTsKIAogCW1lbXNldChudWxsX2FkZHIsIDAsIDYpOwogCkBAIC01NTQsNyArNTU0LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmIChuZXRkZXYtPm1jX2NvdW50ID09IDApIHsKKwlpZiAobmV0ZGV2X21jX2VtcHR5KG5ldGRldikpIHsKIAkJYWRhcHRlci0+c2V0X3Byb21pc2MoYWRhcHRlciwKIAkJCQlORVRYRU5fTklVX05PTl9QUk9NSVNDX01PREUpOwogCQluZXR4ZW5fbmljX2Rpc2FibGVfbWNhc3RfZmlsdGVyKGFkYXB0ZXIpOwpAQCAtNTYzLDIzICs1NjMsMjAgQEAKIAogCWFkYXB0ZXItPnNldF9wcm9taXNjKGFkYXB0ZXIsIE5FVFhFTl9OSVVfQUxMTVVMVElfTU9ERSk7CiAJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwKLQkJCW5ldGRldi0+bWNfY291bnQgPiBhZGFwdGVyLT5tYXhfbWNfY291bnQpIHsKKwkJCW5ldGRldl9tY19jb3VudChuZXRkZXYpID4gYWRhcHRlci0+bWF4X21jX2NvdW50KSB7CiAJCW5ldHhlbl9uaWNfZGlzYWJsZV9tY2FzdF9maWx0ZXIoYWRhcHRlcik7CiAJCXJldHVybjsKIAl9CiAKIAluZXR4ZW5fbmljX2VuYWJsZV9tY2FzdF9maWx0ZXIoYWRhcHRlcik7CiAKLQlmb3IgKG1jX3B0ciA9IG5ldGRldi0+bWNfbGlzdDsgbWNfcHRyOyBtY19wdHIgPSBtY19wdHItPm5leHQsIGluZGV4KyspCi0JCW5ldHhlbl9uaWNfc2V0X21jYXN0X2FkZHIoYWRhcHRlciwgaW5kZXgsIG1jX3B0ci0+ZG1pX2FkZHIpOwotCi0JaWYgKGluZGV4ICE9IG5ldGRldi0+bWNfY291bnQpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiAlcyBtdWx0aWNhc3QgYWRkcmVzcyBjb3VudCBtaXNtYXRjaFxuIiwKLQkJCW5ldHhlbl9uaWNfZHJpdmVyX25hbWUsIG5ldGRldi0+bmFtZSk7CisJaSA9IDA7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfcHRyLCBuZXRkZXYpCisJCW5ldHhlbl9uaWNfc2V0X21jYXN0X2FkZHIoYWRhcHRlciwgaSsrLCBtY19wdHItPmRtaV9hZGRyKTsKIAogCS8qIENsZWFyIG91dCByZW1haW5pbmcgYWRkcmVzc2VzICovCi0JZm9yICg7IGluZGV4IDwgYWRhcHRlci0+bWF4X21jX2NvdW50OyBpbmRleCsrKQotCQluZXR4ZW5fbmljX3NldF9tY2FzdF9hZGRyKGFkYXB0ZXIsIGluZGV4LCBudWxsX2FkZHIpOworCXdoaWxlIChpIDwgYWRhcHRlci0+bWF4X21jX2NvdW50KQorCQluZXR4ZW5fbmljX3NldF9tY2FzdF9hZGRyKGFkYXB0ZXIsIGkrKywgbnVsbF9hZGRyKTsKIH0KIAogc3RhdGljIGludApAQCAtNzA0LDE2ICs3MDEsMTQgQEAKIAl9CiAKIAlpZiAoKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8Ci0JCQkobmV0ZGV2LT5tY19jb3VudCA+IGFkYXB0ZXItPm1heF9tY19jb3VudCkpIHsKKwkJCShuZXRkZXZfbWNfY291bnQobmV0ZGV2KSA+IGFkYXB0ZXItPm1heF9tY19jb3VudCkpIHsKIAkJbW9kZSA9IFZQT1JUX01JU1NfTU9ERV9BQ0NFUFRfTVVMVEk7CiAJCWdvdG8gc2VuZF9md19jbWQ7CiAJfQogCi0JaWYgKG5ldGRldi0+bWNfY291bnQgPiAwKSB7Ci0JCWZvciAobWNfcHRyID0gbmV0ZGV2LT5tY19saXN0OyBtY19wdHI7Ci0JCSAgICAgbWNfcHRyID0gbWNfcHRyLT5uZXh0KSB7CisJaWYgKCFuZXRkZXZfbWNfZW1wdHkobmV0ZGV2KSkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19wdHIsIG5ldGRldikKIAkJCW54X3AzX25pY19hZGRfbWFjKGFkYXB0ZXIsIG1jX3B0ci0+ZG1pX2FkZHIsICZkZWxfbGlzdCk7Ci0JCX0KIAl9CiAKIHNlbmRfZndfY21kOgpAQCAtNzc3LDE3ICs3NzIsMjAgQEAKIGludCBuZXR4ZW5fY29uZmlnX2ludHJfY29hbGVzY2Uoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKQogewogCW54X25pY19yZXFfdCByZXE7Ci0JdTY0IHdvcmQ7Ci0JaW50IHJ2OworCXU2NCB3b3JkWzZdOworCWludCBydiwgaTsKIAogCW1lbXNldCgmcmVxLCAwLCBzaXplb2YobnhfbmljX3JlcV90KSk7CisJbWVtc2V0KHdvcmQsIDAsIHNpemVvZih3b3JkKSk7CiAKIAlyZXEucWhkciA9IGNwdV90b19sZTY0KE5YX0hPU1RfUkVRVUVTVCA8PCAyMyk7CiAKLQl3b3JkID0gTkVUWEVOX0NPTkZJR19JTlRSX0NPQUxFU0NFIHwgKCh1NjQpYWRhcHRlci0+cG9ydG51bSA8PCAxNik7Ci0JcmVxLnJlcV9oZHIgPSBjcHVfdG9fbGU2NCh3b3JkKTsKKwl3b3JkWzBdID0gTkVUWEVOX0NPTkZJR19JTlRSX0NPQUxFU0NFIHwgKCh1NjQpYWRhcHRlci0+cG9ydG51bSA8PCAxNik7CisJcmVxLnJlcV9oZHIgPSBjcHVfdG9fbGU2NCh3b3JkWzBdKTsKIAotCW1lbWNweSgmcmVxLndvcmRzWzBdLCAmYWRhcHRlci0+Y29hbCwgc2l6ZW9mKGFkYXB0ZXItPmNvYWwpKTsKKwltZW1jcHkoJndvcmRbMF0sICZhZGFwdGVyLT5jb2FsLCBzaXplb2YoYWRhcHRlci0+Y29hbCkpOworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCXJlcS53b3Jkc1tpXSA9IGNwdV90b19sZTY0KHdvcmRbaV0pOwogCiAJcnYgPSBuZXR4ZW5fc2VuZF9jbWRfZGVzY3MoYWRhcHRlciwgKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKSZyZXEsIDEpOwogCWlmIChydiAhPSAwKSB7CkBAIC0xMDMzLDcgKzEwMzEsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgbmV0eGVuX2dldF9mbGFzaF9tYWNfYWRkcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIsIF9fbGU2NCAqbWFjKQoraW50IG5ldHhlbl9nZXRfZmxhc2hfbWFjX2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCB1NjQgKm1hYykKIHsKIAlfX2xlMzIgKnBtYWMgPSAoX19sZTMyICopIG1hYzsKIAl1MzIgb2Zmc2V0OwpAQCAtMTA1OCw3ICsxMDU2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IG5ldHhlbl9wM19nZXRfbWFjX2FkZHIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyLCBfX2xlNjQgKm1hYykKK2ludCBuZXR4ZW5fcDNfZ2V0X21hY19hZGRyKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlciwgdTY0ICptYWMpCiB7CiAJdWludDMyX3QgY3JiYWRkciwgbWFjX2hpLCBtYWNfbG87CiAJaW50IHBjaV9mdW5jID0gYWRhcHRlci0+YWh3LnBjaV9mdW5jOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuaCBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2h3LmgKaW5kZXggM2ZkMWRjYi4uZTJjNWI2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaHcuaAorKysgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19ody5oCkBAIC0xOSw3ICsxOSw3IEBACiAgKiBNQSAgMDIxMTEtMTMwNywgVVNBLgogICoKICAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCi0gKiBpbiB0aGUgZmlsZSBjYWxsZWQgTElDRU5TRS4KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCiAgKgogICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYwppbmRleCA2NGNmZjY4Li4xYzYzNjEwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX2luaXQuYwpAQCAtMTksNyArMTksNyBAQAogICogTUEgIDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgogICoKICAqLwogCkBAIC03ODAsNiArNzgwLDkgQEAKIAlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKIAkJcmV0dXJuIDE7CiAKKwlpZiAoYWRhcHRlci0+bmVlZF9md19yZXNldCkKKwkJcmV0dXJuIDE7CisKIAkvKiBsYXN0IGF0dGVtcHQgaGFkIGZhaWxlZCAqLwogCWlmIChOWFJEMzIoYWRhcHRlciwgQ1JCX0NNRFBFR19TVEFURSkgPT0gUEhBTl9JTklUSUFMSVpFX0ZBSUxFRCkKIAkJcmV0dXJuIDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMgYi9kcml2ZXJzL25ldC9uZXR4ZW4vbmV0eGVuX25pY19tYWluLmMKaW5kZXggMjQyNzllNi4uMDg3ODBlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmV0eGVuL25ldHhlbl9uaWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L25ldHhlbi9uZXR4ZW5fbmljX21haW4uYwpAQCAtMTksNyArMTksNyBAQAogICogTUEgIDAyMTExLTEzMDcsIFVTQS4KICAqCiAgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgotICogaW4gdGhlIGZpbGUgY2FsbGVkIExJQ0VOU0UuCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgogICoKICAqLwogCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Flci5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIlFMb2dpYy9OZXRYZW4gKDEvMTApIEdiRSBDb252ZXJnZWQgRXRoZXJuZXQgRHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC04NCw2ICs4NSw3IEBACiBzdGF0aWMgdm9pZCBuZXR4ZW5fY3JlYXRlX2RpYWdfZW50cmllcyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogc3RhdGljIHZvaWQgbmV0eGVuX3JlbW92ZV9kaWFnX2VudHJpZXMoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIAorc3RhdGljIGludCBueF9kZXZfcmVxdWVzdF9hZXIoc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyKTsKIHN0YXRpYyBpbnQgbnhfZGVjcl9kZXZfcmVmX2NudChzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpOwogc3RhdGljIGludCBuZXR4ZW5fY2FuX3N0YXJ0X2Zpcm13YXJlKHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcik7CiAKQEAgLTk4LDcgKzEwMCw3IEBACiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9ORVRYRU4sIChkZXZpY2UpKSwgXAogCS5jbGFzcyA9IFBDSV9DTEFTU19ORVRXT1JLX0VUSEVSTkVUIDw8IDgsIC5jbGFzc19tYXNrID0gfjB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZXR4ZW5fcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUobmV0eGVuX3BjaV90YmwpID0gewogCUVOVFJZKFBDSV9ERVZJQ0VfSURfTlgyMDMxXzEwR1hTUiksCiAJRU5UUlkoUENJX0RFVklDRV9JRF9OWDIwMzFfMTBHQ1g0KSwKIAlFTlRSWShQQ0lfREVWSUNFX0lEX05YMjAzMV80R0NVKSwKQEAgLTQzMCw3ICs0MzIsNyBAQAogewogCWludCBpOwogCXVuc2lnbmVkIGNoYXIgKnA7Ci0JX19sZTY0IG1hY19hZGRyOworCXU2NCBtYWNfYWRkcjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKIApAQCAtMTI2Miw2ICsxMjY0LDkgQEAKIAlpZiAoKGVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgbmV0eGVuX25pY19kcml2ZXJfbmFtZSkpKQogCQlnb3RvIGVycl9vdXRfZGlzYWJsZV9wZGV2OwogCisJaWYgKE5YX0lTX1JFVklTSU9OX1AzKHBkZXYtPnJldmlzaW9uKSkKKwkJcGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhwZGV2KTsKKwogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCiAJbmV0ZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBuZXR4ZW5fYWRhcHRlcikpOwpAQCAtMTQwOSwxNyArMTQxNCwxOSBAQAogCiAJbmV0eGVuX3JlbGVhc2VfZmlybXdhcmUoYWRhcHRlcik7CiAKKwlpZiAoTlhfSVNfUkVWSVNJT05fUDMocGRldi0+cmV2aXNpb24pKQorCQlwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhwZGV2KTsKKwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAogCWZyZWVfbmV0ZGV2KG5ldGRldik7CiB9Ci1zdGF0aWMgaW50IF9fbmV0eGVuX25pY19zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKKworc3RhdGljIHZvaWQgbmV0eGVuX25pY19kZXRhY2hfZnVuYyhzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0Jc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7Ci0JaW50IHJldHZhbDsKIAogCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKIApAQCAtMTQzOCw1MyArMTQ0NSwyMiBAQAogCW54X2RlY3JfZGV2X3JlZl9jbnQoYWRhcHRlcik7CiAKIAljbGVhcl9iaXQoX19OWF9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7Ci0KLQlyZXR2YWwgPSBwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKLQlpZiAocmV0dmFsKQotCQlyZXR1cm4gcmV0dmFsOwotCi0JaWYgKG5ldHhlbl9uaWNfd29sX3N1cHBvcnRlZChhZGFwdGVyKSkgewotCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7Ci0JCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOwotCX0KLQotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQotCXJldHVybiAwOwotfQotc3RhdGljIHZvaWQgbmV0eGVuX25pY19zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlpZiAoX19uZXR4ZW5fbmljX3NodXRkb3duKHBkZXYpKQotCQlyZXR1cm47Ci19Ci0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgaW50Ci1uZXR4ZW5fbmljX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKLXsKLQlpbnQgcmV0dmFsOwotCi0JcmV0dmFsID0gX19uZXR4ZW5fbmljX3NodXRkb3duKHBkZXYpOwotCWlmIChyZXR2YWwpCi0JCXJldHVybiByZXR2YWw7Ci0KLQlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKLQlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotbmV0eGVuX25pY19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgaW50IG5ldHhlbl9uaWNfYXR0YWNoX2Z1bmMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CiAJaW50IGVycjsKIAotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKLQlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKLQogCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3NldF9tYXN0ZXIocGRldik7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKIAlhZGFwdGVyLT5haHcuY3JiX3dpbiA9IC0xOwogCWFkYXB0ZXItPmFody5vY21fd2luID0gLTE7CiAKQEAgLTE1MDMsMTEgKzE0NzksMTAgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyX291dF9kZXRhY2g7CiAKLQkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOwotCiAJCW5ldHhlbl9jb25maWdfaW5kZXZfYWRkcihuZXRkZXYsIE5FVERFVl9VUCk7CiAJfQogCisJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOwogCW5ldHhlbl9zY2hlZHVsZV93b3JrKGFkYXB0ZXIsIG5ldHhlbl9md19wb2xsX3dvcmssIEZXX1BPTExfREVMQVkpOwogCXJldHVybiAwOwogCkBAIC0xNTE3LDYgKzE0OTIsODUgQEAKIAlueF9kZWNyX2Rldl9yZWZfY250KGFkYXB0ZXIpOwogCXJldHVybiBlcnI7CiB9CisKK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IG5ldHhlbl9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCQkJCXBjaV9jaGFubmVsX3N0YXRlX3Qgc3RhdGUpCit7CisJc3RydWN0IG5ldHhlbl9hZGFwdGVyICphZGFwdGVyID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJaWYgKHN0YXRlID09IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZSkKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisKKwlpZiAobnhfZGV2X3JlcXVlc3RfYWVyKGFkYXB0ZXIpKQorCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOworCisJbmV0eGVuX25pY19kZXRhY2hfZnVuYyhhZGFwdGVyKTsKKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKworCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUOworfQorCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBuZXR4ZW5faW9fc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpbnQgZXJyID0gMDsKKworCWVyciA9IG5ldHhlbl9uaWNfYXR0YWNoX2Z1bmMocGRldik7CisKKwlyZXR1cm4gZXJyID8gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVCA6IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRDsKK30KKworc3RhdGljIHZvaWQgbmV0eGVuX2lvX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlwY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyhwZGV2KTsKK30KKworc3RhdGljIHZvaWQgbmV0eGVuX25pY19zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwluZXR4ZW5fbmljX2RldGFjaF9mdW5jKGFkYXB0ZXIpOworCisJaWYgKHBjaV9zYXZlX3N0YXRlKHBkZXYpKQorCQlyZXR1cm47CisKKwlpZiAobmV0eGVuX25pY193b2xfc3VwcG9ydGVkKGFkYXB0ZXIpKSB7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAxKTsKKwkJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMSk7CisJfQorCisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaW50IHJldHZhbDsKKworCW5ldHhlbl9uaWNfZGV0YWNoX2Z1bmMoYWRhcHRlcik7CisKKwlyZXR2YWwgPSBwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCisJaWYgKG5ldHhlbl9uaWNfd29sX3N1cHBvcnRlZChhZGFwdGVyKSkgeworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOworCX0KKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXR4ZW5fbmljX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlyZXR1cm4gbmV0eGVuX25pY19hdHRhY2hfZnVuYyhwZGV2KTsKK30KICNlbmRpZgogCiBzdGF0aWMgaW50IG5ldHhlbl9uaWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQpAQCAtMjEwNCwyMCArMjE1OCw0OSBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHZvaWQKLW54X2Rldl9yZXF1ZXN0X3Jlc2V0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3N0YXRpYyBpbnQKK254X2Rldl9yZXF1ZXN0X2FlcihzdHJ1Y3QgbmV0eGVuX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJdTMyIHN0YXRlOworCWludCByZXQgPSAtRUlOVkFMOwogCiAJaWYgKG5ldHhlbl9hcGlfbG9jayhhZGFwdGVyKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gcmV0OwogCiAJc3RhdGUgPSBOWFJEMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9TVEFURSk7CiAKLQlpZiAoc3RhdGUgIT0gTlhfREVWX0lOSVRBTElaSU5HKQotCQlOWFdSMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9TVEFURSwgTlhfREVWX05FRURfUkVTRVQpOworCWlmIChzdGF0ZSA9PSBOWF9ERVZfTkVFRF9BRVIpCisJCXJldCA9IDA7CisJZWxzZSBpZiAoc3RhdGUgPT0gTlhfREVWX1JFQURZKSB7CisJCU5YV1IzMihhZGFwdGVyLCBOWF9DUkJfREVWX1NUQVRFLCBOWF9ERVZfTkVFRF9BRVIpOworCQlyZXQgPSAwOworCX0KIAogCW5ldHhlbl9hcGlfdW5sb2NrKGFkYXB0ZXIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQKK254X2Rldl9yZXF1ZXN0X3Jlc2V0KHN0cnVjdCBuZXR4ZW5fYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgc3RhdGU7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAobmV0eGVuX2FwaV9sb2NrKGFkYXB0ZXIpKQorCQlyZXR1cm4gcmV0OworCisJc3RhdGUgPSBOWFJEMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9TVEFURSk7CisKKwlpZiAoc3RhdGUgPT0gTlhfREVWX05FRURfUkVTRVQpCisJCXJldCA9IDA7CisJZWxzZSBpZiAoc3RhdGUgIT0gTlhfREVWX0lOSVRBTElaSU5HICYmIHN0YXRlICE9IE5YX0RFVl9ORUVEX0FFUikgeworCQlOWFdSMzIoYWRhcHRlciwgTlhfQ1JCX0RFVl9TVEFURSwgTlhfREVWX05FRURfUkVTRVQpOworCQlyZXQgPSAwOworCX0KKworCW5ldHhlbl9hcGlfdW5sb2NrKGFkYXB0ZXIpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludApAQCAtMjI3MSwxNyArMjM1NCwyOSBAQAogCXUzMiBzdGF0ZSwgaGVhcnRiaXQ7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKIAorCXN0YXRlID0gTlhSRDMyKGFkYXB0ZXIsIE5YX0NSQl9ERVZfU1RBVEUpOworCWlmIChzdGF0ZSA9PSBOWF9ERVZfTkVFRF9BRVIpCisJCXJldHVybiAwOworCiAJaWYgKG5ldHhlbl9uaWNfY2hlY2tfdGVtcChhZGFwdGVyKSkKIAkJZ290byBkZXRhY2g7CiAKIAlpZiAoYWRhcHRlci0+bmVlZF9md19yZXNldCkgewotCQlueF9kZXZfcmVxdWVzdF9yZXNldChhZGFwdGVyKTsKKwkJaWYgKG54X2Rldl9yZXF1ZXN0X3Jlc2V0KGFkYXB0ZXIpKQorCQkJcmV0dXJuIDA7CiAJCWdvdG8gZGV0YWNoOwogCX0KIAotCXN0YXRlID0gTlhSRDMyKGFkYXB0ZXIsIE5YX0NSQl9ERVZfU1RBVEUpOwotCWlmIChzdGF0ZSA9PSBOWF9ERVZfTkVFRF9SRVNFVCkKLQkJZ290byBkZXRhY2g7CisJLyogTlhfREVWX05FRURfUkVTRVQsIHRoaXMgc3RhdGUgY2FuIGJlIG1hcmtlZCBpbiB0d28gY2FzZXMKKwkgKiAxLiBUeCB0aW1lb3V0IDIuIEZ3IGhhbmcKKwkgKiBTZW5kIHJlcXVlc3QgdG8gZGVzdHJveSBjb250ZXh0IGluIGNhc2Ugb2YgdHggdGltZW91dCBvbmx5CisJICogYW5kIGRvZXNuJ3QgcmVxdWlyZWQgaW4gY2FzZSBvZiBGdyBoYW5nCisJICovCisJaWYgKHN0YXRlID09IE5YX0RFVl9ORUVEX1JFU0VUKSB7CisJCWFkYXB0ZXItPm5lZWRfZndfcmVzZXQgPSAxOworCQlpZiAoTlhfSVNfUkVWSVNJT05fUDIoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSkKKwkJCWdvdG8gZGV0YWNoOworCX0KIAogCWlmIChOWF9JU19SRVZJU0lPTl9QMihhZGFwdGVyLT5haHcucmV2aXNpb25faWQpKQogCQlyZXR1cm4gMDsKQEAgLTIyOTAsMTIgKzIzODUsMTcgQEAKIAlpZiAoaGVhcnRiaXQgIT0gYWRhcHRlci0+aGVhcnRiaXQpIHsKIAkJYWRhcHRlci0+aGVhcnRiaXQgPSBoZWFydGJpdDsKIAkJYWRhcHRlci0+ZndfZmFpbF9jbnQgPSAwOworCQlpZiAoYWRhcHRlci0+bmVlZF9md19yZXNldCkKKwkJCWdvdG8gZGV0YWNoOwogCQlyZXR1cm4gMDsKIAl9CiAKIAlpZiAoKythZGFwdGVyLT5md19mYWlsX2NudCA8IEZXX0ZBSUxfVEhSRVNIKQogCQlyZXR1cm4gMDsKIAorCWlmIChueF9kZXZfcmVxdWVzdF9yZXNldChhZGFwdGVyKSkKKwkJcmV0dXJuIDA7CisKIAljbGVhcl9iaXQoX19OWF9GV19BVFRBQ0hFRCwgJmFkYXB0ZXItPnN0YXRlKTsKIAogCWRldl9pbmZvKCZuZXRkZXYtPmRldiwgImZpcm13YXJlIGhhbmcgZGV0ZWN0ZWRcbiIpOwpAQCAtMjQ5OCw3ICsyNTk4LDcgQEAKIAlyZXR1cm4gc2l6ZTsKIH0KIAotc3NpemVfdCBuZXR4ZW5fc3lzZnNfd3JpdGVfbWVtKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorc3RhdGljIHNzaXplX3QgbmV0eGVuX3N5c2ZzX3dyaXRlX21lbShzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZiwKIAkJbG9mZl90IG9mZnNldCwgc2l6ZV90IHNpemUpCiB7CkBAIC0yNzI1LDYgKzI4MjUsMTIgQEAKIHsgfQogI2VuZGlmCiAKK3N0YXRpYyBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIG5ldHhlbl9lcnJfaGFuZGxlciA9IHsKKwkuZXJyb3JfZGV0ZWN0ZWQgPSBuZXR4ZW5faW9fZXJyb3JfZGV0ZWN0ZWQsCisJLnNsb3RfcmVzZXQgPSBuZXR4ZW5faW9fc2xvdF9yZXNldCwKKwkucmVzdW1lID0gbmV0eGVuX2lvX3Jlc3VtZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZXR4ZW5fZHJpdmVyID0gewogCS5uYW1lID0gbmV0eGVuX25pY19kcml2ZXJfbmFtZSwKIAkuaWRfdGFibGUgPSBuZXR4ZW5fcGNpX3RibCwKQEAgLTI3MzQsNyArMjg0MCw4IEBACiAJLnN1c3BlbmQgPSBuZXR4ZW5fbmljX3N1c3BlbmQsCiAJLnJlc3VtZSA9IG5ldHhlbl9uaWNfcmVzdW1lLAogI2VuZGlmCi0JLnNodXRkb3duID0gbmV0eGVuX25pY19zaHV0ZG93bgorCS5zaHV0ZG93biA9IG5ldHhlbl9uaWNfc2h1dGRvd24sCisJLmVycl9oYW5kbGVyID0gJm5ldHhlbl9lcnJfaGFuZGxlcgogfTsKIAogc3RhdGljIGludCBfX2luaXQgbmV0eGVuX2luaXRfbW9kdWxlKHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9uaTUwMTAuYyBiL2RyaXZlcnMvbmV0L25pNTAxMC5jCmluZGV4IDZhODdkODEuLmMxNmNiZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25pNTAxMC5jCisrKyBiL2RyaXZlcnMvbmV0L25pNTAxMC5jCkBAIC02NTEsNyArNjUxLDggQEAKIAogCVBSSU5USzIoKEtFUk5fREVCVUcgIiVzOiBlbnRlcmluZyBzZXRfbXVsdGljYXN0X2xpc3RcbiIsIGRldi0+bmFtZSkpOwogCi0JaWYgKGRldi0+ZmxhZ3MmSUZGX1BST01JU0MgfHwgZGV2LT5mbGFncyZJRkZfQUxMTVVMVEkgfHwgZGV2LT5tY19saXN0KSB7CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQyB8fCBkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8CisJICAgICFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQlvdXRiKFJNRF9QUk9NSVNDLCBFRExDX1JNT0RFKTsgLyogRW5hYmxlIHByb21pc2N1b3VzIG1vZGUgKi8KIAkJUFJJTlRLKChLRVJOX0RFQlVHICIlczogRW50ZXJpbmcgcHJvbWlzY3VvdXMgbW9kZVxuIiwgZGV2LT5uYW1lKSk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pNTIuYyBiL2RyaXZlcnMvbmV0L25pNTIuYwppbmRleCBiNDJmNWU1Li4wNWMyOWMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaTUyLmMKKysrIGIvZHJpdmVycy9uZXQvbmk1Mi5jCkBAIC01OTYsOCArNTk2LDggQEAKIAlzdHJ1Y3QgaWFzZXR1cF9jbWRfc3RydWN0IF9faW9tZW0gKmlhc19jbWQ7CiAJc3RydWN0IHRkcl9jbWRfc3RydWN0IF9faW9tZW0gKnRkcl9jbWQ7CiAJc3RydWN0IG1jc2V0dXBfY21kX3N0cnVjdCBfX2lvbWVtICptY19jbWQ7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7Ci0JaW50IG51bV9hZGRycyA9IGRldi0+bWNfY291bnQ7CisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CisJaW50IG51bV9hZGRycyA9IG5ldGRldl9tY19jb3VudChkZXYpOwogCiAJcHRyID0gcC0+c2NiICsgMTsKIApAQCAtNzI0LDkgKzcyNCw5IEBACiAJCXdyaXRldygweGZmZmYsICZtY19jbWQtPmNtZF9saW5rKTsKIAkJd3JpdGV3KG51bV9hZGRycyAqIDYsICZtY19jbWQtPm1jX2NudCk7CiAKLQkJZm9yIChpID0gMDsgaSA8IG51bV9hZGRyczsgaSsrLCBkbWkgPSBkbWktPm5leHQpCi0JCQltZW1jcHlfdG9pbyhtY19jbWQtPm1jX2xpc3RbaV0sCi0JCQkJCQkJZG1pLT5kbWlfYWRkciwgNik7CisJCWkgPSAwOworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikKKwkJCW1lbWNweV90b2lvKG1jX2NtZC0+bWNfbGlzdFtpKytdLCBkbWktPmRtaV9hZGRyLCA2KTsKIAogCQl3cml0ZXcobWFrZTE2KG1jX2NtZCksICZwLT5zY2ItPmNibF9vZmZzZXQpOwogCQl3cml0ZWIoQ1VDX1NUQVJULCAmcC0+c2NiLT5jbWRfY3VjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25pNjUuYyBiL2RyaXZlcnMvbmV0L25pNjUuYwppbmRleCBhZTE5YWFmLi45MjI1Yzc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaTY1LmMKKysrIGIvZHJpdmVycy9uZXQvbmk2NS5jCkBAIC04NDksNyArODQ5LDcgQEAKIAogCSBpZihkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCiAJCSBuaTY1X2luaXRfbGFuY2UocCxkZXYtPmRldl9hZGRyLDB4MDAsTV9QUk9NKTsKLQkgZWxzZSBpZihkZXYtPm1jX2NvdW50IHx8IGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCisJIGVsc2UgaWYgKG5ldGRldl9tY19jb3VudChkZXYpIHx8IGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCiAJCSBuaTY1X2luaXRfbGFuY2UocCxkZXYtPmRldl9hZGRyLDB4ZmYsMHgwKTsKIAkgZWxzZQogCQkgbmk2NV9pbml0X2xhbmNlKHAsZGV2LT5kZXZfYWRkciwweDAwLDB4MDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbml1LmMgYi9kcml2ZXJzL25ldC9uaXUuYwppbmRleCAyYWVkMmIzLi4wNjc4ZjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9uaXUuYworKysgYi9kcml2ZXJzL25ldC9uaXUuYwpAQCAtMyw2ICszLDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGRhdmVtbG9mdC5uZXQpCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtMzMsNyArMzUsNiBAQAogI2luY2x1ZGUgIm5pdS5oIgogCiAjZGVmaW5lIERSVl9NT0RVTEVfTkFNRQkJIm5pdSIKLSNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCiAjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS4wIgogI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIk5vdiAxNCwgMjAwOCIKIApAQCAtNTgsNyArNTksNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuaXVfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG5pdV9wY2lfdGJsKSA9IHsKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NVTiwgMHhhYmNkKX0sCiAJe30KIH07CkBAIC04OSwyMSArOTAsNiBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIk5JVSBkZWJ1ZyBsZXZlbCIpOwogCi0jZGVmaW5lIG5pdWRiZyhUWVBFLCBmLCBhLi4uKSBcCi1kbyB7CWlmICgobnApLT5tc2dfZW5hYmxlICYgTkVUSUZfTVNHXyMjVFlQRSkgXAotCQlwcmludGsoS0VSTl9ERUJVRyBQRlggZiwgIyMgYSk7IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgbml1aW5mbyhUWVBFLCBmLCBhLi4uKSBcCi1kbyB7CWlmICgobnApLT5tc2dfZW5hYmxlICYgTkVUSUZfTVNHXyMjVFlQRSkgXAotCQlwcmludGsoS0VSTl9JTkZPIFBGWCBmLCAjIyBhKTsgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBuaXV3YXJuKFRZUEUsIGYsIGEuLi4pIFwKLWRvIHsJaWYgKChucCktPm1zZ19lbmFibGUgJiBORVRJRl9NU0dfIyNUWVBFKSBcCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYIGYsICMjIGEpOyBcCi19IHdoaWxlICgwKQotCiAjZGVmaW5lIG5pdV9sb2NrX3BhcmVudChucCwgZmxhZ3MpIFwKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPnBhcmVudC0+bG9jaywgZmxhZ3MpCiAjZGVmaW5lIG5pdV91bmxvY2tfcGFyZW50KG5wLCBmbGFncykgXApAQCAtMTM1LDEwICsxMjEsOSBAQAogCW53NjRfbWFjKHJlZywgYml0cyk7CiAJZXJyID0gX19uaXVfd2FpdF9iaXRzX2NsZWFyX21hYyhucCwgcmVnLCBiaXRzLCBsaW1pdCwgZGVsYXkpOwogCWlmIChlcnIpCi0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICIlczogYml0cyAoJWxseCkgb2YgcmVnaXN0ZXIgJXMgIgotCQkJIndvdWxkIG5vdCBjbGVhciwgdmFsWyVsbHhdXG4iLAotCQkJbnAtPmRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgYml0cywgcmVnX25hbWUsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKSBucjY0X21hYyhyZWcpKTsKKwkJbmV0ZGV2X2VycihucC0+ZGV2LCAiYml0cyAoJWxseCkgb2YgcmVnaXN0ZXIgJXMgd291bGQgbm90IGNsZWFyLCB2YWxbJWxseF1cbiIsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWJpdHMsIHJlZ19uYW1lLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylucjY0X21hYyhyZWcpKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNzUsMTAgKzE2MCw5IEBACiAKIAllcnIgPSBfX25pdV93YWl0X2JpdHNfY2xlYXJfaXBwKG5wLCByZWcsIGJpdHMsIGxpbWl0LCBkZWxheSk7CiAJaWYgKGVycikKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBiaXRzICglbGx4KSBvZiByZWdpc3RlciAlcyAiCi0JCQkid291bGQgbm90IGNsZWFyLCB2YWxbJWxseF1cbiIsCi0JCQlucC0+ZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKSBiaXRzLCByZWdfbmFtZSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIG5yNjRfaXBwKHJlZykpOworCQluZXRkZXZfZXJyKG5wLT5kZXYsICJiaXRzICglbGx4KSBvZiByZWdpc3RlciAlcyB3b3VsZCBub3QgY2xlYXIsIHZhbFslbGx4XVxuIiwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpYml0cywgcmVnX25hbWUsCisJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKW5yNjRfaXBwKHJlZykpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTIxNiwxMCArMjAwLDkgQEAKIAludzY0KHJlZywgYml0cyk7CiAJZXJyID0gX19uaXVfd2FpdF9iaXRzX2NsZWFyKG5wLCByZWcsIGJpdHMsIGxpbWl0LCBkZWxheSk7CiAJaWYgKGVycikKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBiaXRzICglbGx4KSBvZiByZWdpc3RlciAlcyAiCi0JCQkid291bGQgbm90IGNsZWFyLCB2YWxbJWxseF1cbiIsCi0JCQlucC0+ZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKSBiaXRzLCByZWdfbmFtZSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIG5yNjQocmVnKSk7CisJCW5ldGRldl9lcnIobnAtPmRldiwgImJpdHMgKCVsbHgpIG9mIHJlZ2lzdGVyICVzIHdvdWxkIG5vdCBjbGVhciwgdmFsWyVsbHhdXG4iLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZyliaXRzLCByZWdfbmFtZSwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpbnI2NChyZWcpKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC00NzUsOSArNDU4LDggQEAKIAllcnIgPSBtZGlvX3dyaXRlKG5wLCBucC0+cG9ydCwgTklVX0VTUjJfREVWX0FERFIsCiAJCQkgRVNSMl9USV9QTExfQ0ZHX0wsIHBsbF9jZmcpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIk5JVSBQb3J0ICVkICIKLQkJCSJzZXJkZXNfaW5pdF9uaXVfMWdfc2VyZGVzOiAiCi0JCQkibWRpbyB3cml0ZSB0byBFU1IyX1RJX1BMTF9DRkdfTCBmYWlsZWQiLCBucC0+cG9ydCk7CisJCW5ldGRldl9lcnIobnAtPmRldiwgIk5JVSBQb3J0ICVkICVzKCkgbWRpbyB3cml0ZSB0byBFU1IyX1RJX1BMTF9DRkdfTCBmYWlsZWRcbiIsCisJCQkgICBucC0+cG9ydCwgX19mdW5jX18pOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNDg2LDkgKzQ2OCw4IEBACiAJZXJyID0gbWRpb193cml0ZShucCwgbnAtPnBvcnQsIE5JVV9FU1IyX0RFVl9BRERSLAogCQkJIEVTUjJfVElfUExMX1NUU19MLCBwbGxfc3RzKTsKIAlpZiAoZXJyKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJOSVUgUG9ydCAlZCAiCi0JCQkic2VyZGVzX2luaXRfbml1XzFnX3NlcmRlczogIgotCQkJIm1kaW8gd3JpdGUgdG8gRVNSMl9USV9QTExfU1RTX0wgZmFpbGVkIiwgbnAtPnBvcnQpOworCQluZXRkZXZfZXJyKG5wLT5kZXYsICJOSVUgUG9ydCAlZCAlcygpIG1kaW8gd3JpdGUgdG8gRVNSMl9USV9QTExfU1RTX0wgZmFpbGVkXG4iLAorCQkJICAgbnAtPnBvcnQsIF9fZnVuY19fKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTUzMSw4ICs1MTIsOCBAQAogCX0KIAogCWlmICgoc2lnICYgbWFzaykgIT0gdmFsKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJQb3J0ICV1IHNpZ25hbCBiaXRzIFslMDh4XSBhcmUgbm90ICIKLQkJCSJbJTA4eF1cbiIsIG5wLT5wb3J0LCAoaW50KSAoc2lnICYgbWFzayksIChpbnQpIHZhbCk7CisJCW5ldGRldl9lcnIobnAtPmRldiwgIlBvcnQgJXUgc2lnbmFsIGJpdHMgWyUwOHhdIGFyZSBub3QgWyUwOHhdXG4iLAorCQkJICAgbnAtPnBvcnQsIChpbnQpKHNpZyAmIG1hc2spLCAoaW50KXZhbCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtNTY5LDkgKzU1MCw4IEBACiAJZXJyID0gbWRpb193cml0ZShucCwgbnAtPnBvcnQsIE5JVV9FU1IyX0RFVl9BRERSLAogCQkJIEVTUjJfVElfUExMX0NGR19MLCBwbGxfY2ZnICYgMHhmZmZmKTsKIAlpZiAoZXJyKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJOSVUgUG9ydCAlZCAiCi0JCQkic2VyZGVzX2luaXRfbml1XzEwZ19zZXJkZXM6ICIKLQkJCSJtZGlvIHdyaXRlIHRvIEVTUjJfVElfUExMX0NGR19MIGZhaWxlZCIsIG5wLT5wb3J0KTsKKwkJbmV0ZGV2X2VycihucC0+ZGV2LCAiTklVIFBvcnQgJWQgJXMoKSBtZGlvIHdyaXRlIHRvIEVTUjJfVElfUExMX0NGR19MIGZhaWxlZFxuIiwKKwkJCSAgIG5wLT5wb3J0LCBfX2Z1bmNfXyk7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC01ODAsOSArNTYwLDggQEAKIAllcnIgPSBtZGlvX3dyaXRlKG5wLCBucC0+cG9ydCwgTklVX0VTUjJfREVWX0FERFIsCiAJCQkgRVNSMl9USV9QTExfU1RTX0wsIHBsbF9zdHMgJiAweGZmZmYpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIk5JVSBQb3J0ICVkICIKLQkJCSJzZXJkZXNfaW5pdF9uaXVfMTBnX3NlcmRlczogIgotCQkJIm1kaW8gd3JpdGUgdG8gRVNSMl9USV9QTExfU1RTX0wgZmFpbGVkIiwgbnAtPnBvcnQpOworCQluZXRkZXZfZXJyKG5wLT5kZXYsICJOSVUgUG9ydCAlZCAlcygpIG1kaW8gd3JpdGUgdG8gRVNSMl9USV9QTExfU1RTX0wgZmFpbGVkXG4iLAorCQkJICAgbnAtPnBvcnQsIF9fZnVuY19fKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTYzOSw5ICs2MTgsOCBAQAogCX0KIAogCWlmICgoc2lnICYgbWFzaykgIT0gdmFsKSB7Ci0JCXByX2luZm8oUEZYICJOSVUgUG9ydCAldSBzaWduYWwgYml0cyBbJTA4eF0gYXJlIG5vdCAiCi0JCQkiWyUwOHhdIGZvciAxMEcuLi50cnlpbmcgMUdcbiIsCi0JCQlucC0+cG9ydCwgKGludCkgKHNpZyAmIG1hc2spLCAoaW50KSB2YWwpOworCQlwcl9pbmZvKCJOSVUgUG9ydCAldSBzaWduYWwgYml0cyBbJTA4eF0gYXJlIG5vdCBbJTA4eF0gZm9yIDEwRy4uLnRyeWluZyAxR1xuIiwKKwkJCW5wLT5wb3J0LCAoaW50KShzaWcgJiBtYXNrKSwgKGludCl2YWwpOwogCiAJCS8qIDEwRyBmYWlsZWQsIHRyeSBpbml0aWFsaXppbmcgYXQgMUcgKi8KIAkJZXJyID0gc2VyZGVzX2luaXRfbml1XzFnX3NlcmRlcyhucCk7CkBAIC02NDksOCArNjI3LDggQEAKIAkJCW5wLT5mbGFncyAmPSB+TklVX0ZMQUdTXzEwRzsKIAkJCW5wLT5tYWNfeGN2ciA9IE1BQ19YQ1ZSX1BDUzsKIAkJfSAgZWxzZSB7Ci0JCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiUG9ydCAldSAxMEcvMUcgU0VSREVTICIKLQkJCQkiTGluayBGYWlsZWQgXG4iLCBucC0+cG9ydCk7CisJCQluZXRkZXZfZXJyKG5wLT5kZXYsICJQb3J0ICV1IDEwRy8xRyBTRVJERVMgTGluayBGYWlsZWRcbiIsCisJCQkJICAgbnAtPnBvcnQpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CkBAIC03NjQsOSArNzQyLDggQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCWlmIChyZXNldCAhPSAwKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJQb3J0ICV1IEVTUl9SRVNFVCAiCi0JCQkiZGlkIG5vdCBjbGVhciBbJTA4eF1cbiIsCi0JCQlucC0+cG9ydCwgcmVzZXQpOworCQluZXRkZXZfZXJyKG5wLT5kZXYsICJQb3J0ICV1IEVTUl9SRVNFVCBkaWQgbm90IGNsZWFyIFslMDh4XVxuIiwKKwkJCSAgIG5wLT5wb3J0LCByZXNldCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtODkwLDggKzg2Nyw4IEBACiAJCQlucC0+ZmxhZ3MgJj0gfk5JVV9GTEFHU19IT1RQTFVHX1BIWV9QUkVTRU5UOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIlBvcnQgJXUgc2lnbmFsIGJpdHMgWyUwOHhdIGFyZSBub3QgIgotCQkJIlslMDh4XVxuIiwgbnAtPnBvcnQsIChpbnQpIChzaWcgJiBtYXNrKSwgKGludCkgdmFsKTsKKwkJbmV0ZGV2X2VycihucC0+ZGV2LCAiUG9ydCAldSBzaWduYWwgYml0cyBbJTA4eF0gYXJlIG5vdCBbJTA4eF1cbiIsCisJCQkgICBucC0+cG9ydCwgKGludCkoc2lnICYgbWFzayksIChpbnQpdmFsKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCWlmIChucC0+ZmxhZ3MgJiBOSVVfRkxBR1NfSE9UUExVR19QSFkpCkBAIC0xMDM5LDggKzEwMTYsOCBAQAogCX0KIAogCWlmICgoc2lnICYgbWFzaykgIT0gdmFsKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJQb3J0ICV1IHNpZ25hbCBiaXRzIFslMDh4XSBhcmUgbm90ICIKLQkJCSJbJTA4eF1cbiIsIG5wLT5wb3J0LCAoaW50KSAoc2lnICYgbWFzayksIChpbnQpIHZhbCk7CisJCW5ldGRldl9lcnIobnAtPmRldiwgIlBvcnQgJXUgc2lnbmFsIGJpdHMgWyUwOHhdIGFyZSBub3QgWyUwOHhdXG4iLAorCQkJICAgbnAtPnBvcnQsIChpbnQpKHNpZyAmIG1hc2spLCAoaW50KXZhbCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtMTMzMiw4ICsxMzA5LDggQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAobGltaXQgPCAwKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJQb3J0ICV1IFBIWSB3aWxsIG5vdCByZXNldCAiCi0JCQkiKGJtY3I9JTA0eClcbiIsIG5wLT5wb3J0LCAoZXJyICYgMHhmZmZmKSk7CisJCW5ldGRldl9lcnIobnAtPmRldiwgIlBvcnQgJXUgUEhZIHdpbGwgbm90IHJlc2V0IChibWNyPSUwNHgpXG4iLAorCQkJICAgbnAtPnBvcnQsIChlcnIgJiAweGZmZmYpKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiAwOwpAQCAtMTUxNSwyMSArMTQ5MiwxOCBAQAogCQkJTUlJX1NUQVQxMDAwKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKLQlwcl9pbmZvKFBGWCAiUG9ydCAldSBQTUFfUE1EKE1JSV9TVEFUMTAwMCkgWyUwNHhdXG4iLAotCQlucC0+cG9ydCwgZXJyKTsKKwlwcl9pbmZvKCJQb3J0ICV1IFBNQV9QTUQoTUlJX1NUQVQxMDAwKSBbJTA0eF1cbiIsIG5wLT5wb3J0LCBlcnIpOwogCiAJZXJyID0gbWRpb19yZWFkKG5wLCBucC0+cGh5X2FkZHIsIEJDTTg3MDRfVVNFUl9ERVYzX0FERFIsIDB4MjApOwogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwotCXByX2luZm8oUEZYICJQb3J0ICV1IFVTRVJfREVWMygweDIwKSBbJTA0eF1cbiIsCi0JCW5wLT5wb3J0LCBlcnIpOworCXByX2luZm8oIlBvcnQgJXUgVVNFUl9ERVYzKDB4MjApIFslMDR4XVxuIiwgbnAtPnBvcnQsIGVycik7CiAKIAllcnIgPSBtZGlvX3JlYWQobnAsIG5wLT5waHlfYWRkciwgQkNNODcwNF9QSFlYU19ERVZfQUREUiwKIAkJCU1JSV9OV0FZVEVTVCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JcHJfaW5mbyhQRlggIlBvcnQgJXUgUEhZWFMoTUlJX05XQVlURVNUKSBbJTA0eF1cbiIsCi0JCW5wLT5wb3J0LCBlcnIpOworCXByX2luZm8oIlBvcnQgJXUgUEhZWFMoTUlJX05XQVlURVNUKSBbJTA0eF1cbiIsIG5wLT5wb3J0LCBlcnIpOwogI2VuZGlmCiAKIAkvKiBYWFggZGlnIHRoaXMgb3V0IGl0IG1pZ2h0IG5vdCBiZSBzbyB1c2VmdWwgWFhYICovCkBAIC0xNTU1LDExICsxNTI5LDExIEBACiAKIAlpZiAoYW5hbG9nX3N0YXQwICE9IDB4MDNmYykgewogCQlpZiAoKGFuYWxvZ19zdGF0MCA9PSAweDQzYmMpICYmICh0eF9hbGFybV9zdGF0dXMgIT0gMCkpIHsKLQkJCXByX2luZm8oUEZYICJQb3J0ICV1IGNhYmxlIG5vdCBjb25uZWN0ZWQgIgotCQkJCSJvciBiYWQgY2FibGUuXG4iLCBucC0+cG9ydCk7CisJCQlwcl9pbmZvKCJQb3J0ICV1IGNhYmxlIG5vdCBjb25uZWN0ZWQgb3IgYmFkIGNhYmxlXG4iLAorCQkJCW5wLT5wb3J0KTsKIAkJfSBlbHNlIGlmIChhbmFsb2dfc3RhdDAgPT0gMHg2MzljKSB7Ci0JCQlwcl9pbmZvKFBGWCAiUG9ydCAldSBvcHRpY2FsIG1vZHVsZSBpcyBiYWQgIgotCQkJCSJvciBtaXNzaW5nLlxuIiwgbnAtPnBvcnQpOworCQkJcHJfaW5mbygiUG9ydCAldSBvcHRpY2FsIG1vZHVsZSBpcyBiYWQgb3IgbWlzc2luZ1xuIiwKKwkJCQlucC0+cG9ydCk7CiAJCX0KIAl9CiAKQEAgLTE2OTksOCArMTY3Myw4IEBACiAJCQlicmVhazsKIAl9CiAJaWYgKGxpbWl0IDwgMCkgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiUG9ydCAldSBNSUkgd291bGQgbm90IHJlc2V0LCAiCi0JCQkiYm1jclslMDR4XVxuIiwgbnAtPnBvcnQsIGVycik7CisJCW5ldGRldl9lcnIobnAtPmRldiwgIlBvcnQgJXUgTUlJIHdvdWxkIG5vdCByZXNldCwgYm1jclslMDR4XVxuIiwKKwkJCSAgIG5wLT5wb3J0LCBlcnIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTE4OTUsNyArMTg2OSw3IEBACiAJCXJldHVybiBlcnI7CiAJYm1zciA9IGVycjsKIAotCXByX2luZm8oUEZYICJQb3J0ICV1IGFmdGVyIE1JSSBpbml0IGJtY3JbJTA0eF0gYm1zclslMDR4XVxuIiwKKwlwcl9pbmZvKCJQb3J0ICV1IGFmdGVyIE1JSSBpbml0IGJtY3JbJTA0eF0gYm1zclslMDR4XVxuIiwKIAkJbnAtPnBvcnQsIGJtY3IsIGJtc3IpOwogI2VuZGlmCiAKQEAgLTE5NDgsMTYgKzE5MjIsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRldikgJiYgbGlua191cCkgewotCQluaXVpbmZvKExJTkssICIlczogTGluayBpcyB1cCBhdCAlcywgJXMgZHVwbGV4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLAotCQkgICAgICAgKGxwLT5hY3RpdmVfc3BlZWQgPT0gU1BFRURfMTAwMDAgPwotCQkJIjEwR2Ivc2VjIiA6Ci0JCQkobHAtPmFjdGl2ZV9zcGVlZCA9PSBTUEVFRF8xMDAwID8KLQkJCSAiMUdiL3NlYyIgOgotCQkJIChscC0+YWN0aXZlX3NwZWVkID09IFNQRUVEXzEwMCA/Ci0JCQkgICIxMDBNYml0L3NlYyIgOiAiMTBNYml0L3NlYyIpKSksCi0JCSAgICAgICAobHAtPmFjdGl2ZV9kdXBsZXggPT0gRFVQTEVYX0ZVTEwgPwotCQkJImZ1bGwiIDogImhhbGYiKSk7CisJCW5ldGlmX2luZm8obnAsIGxpbmssIGRldiwgIkxpbmsgaXMgdXAgYXQgJXMsICVzIGR1cGxleFxuIiwKKwkJCSAgIGxwLT5hY3RpdmVfc3BlZWQgPT0gU1BFRURfMTAwMDAgPyAiMTBHYi9zZWMiIDoKKwkJCSAgIGxwLT5hY3RpdmVfc3BlZWQgPT0gU1BFRURfMTAwMCA/ICIxR2Ivc2VjIiA6CisJCQkgICBscC0+YWN0aXZlX3NwZWVkID09IFNQRUVEXzEwMCA/ICIxMDBNYml0L3NlYyIgOgorCQkJICAgIjEwTWJpdC9zZWMiLAorCQkJICAgbHAtPmFjdGl2ZV9kdXBsZXggPT0gRFVQTEVYX0ZVTEwgPyAiZnVsbCIgOiAiaGFsZiIpOwogCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZucC0+bG9jaywgZmxhZ3MpOwogCQluaXVfaW5pdF94aWYobnApOwpAQCAtMTk2Niw3ICsxOTM2LDcgQEAKIAogCQluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJfSBlbHNlIGlmIChuZXRpZl9jYXJyaWVyX29rKGRldikgJiYgIWxpbmtfdXApIHsKLQkJbml1d2FybihMSU5LLCAiJXM6IExpbmsgaXMgZG93blxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0aWZfd2FybihucCwgbGluaywgZGV2LCAiTGluayBpcyBkb3duXG4iKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJm5wLT5sb2NrLCBmbGFncyk7CiAJCW5pdV9oYW5kbGVfbGVkKG5wLCAwKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnAtPmxvY2ssIGZsYWdzKTsKQEAgLTIyMzIsOCArMjIwMiw4IEBACiAJCQl9IGVsc2UgewogCQkJCW5wLT5mbGFncyAmPSB+TklVX0ZMQUdTX0hPVFBMVUdfUEhZX1BSRVNFTlQ7CiAJCQkJKmxpbmtfdXBfcCA9IDA7Ci0JCQkJbml1d2FybihMSU5LLCAiJXM6IEhvdHBsdWcgUEhZIFJlbW92ZWRcbiIsCi0JCQkJCW5wLT5kZXYtPm5hbWUpOworCQkJCW5ldGlmX3dhcm4obnAsIGxpbmssIG5wLT5kZXYsCisJCQkJCSAgICJIb3RwbHVnIFBIWSBSZW1vdmVkXG4iKTsKIAkJCX0KIAkJfQogb3V0OgpAQCAtMjUzMSw4ICsyNTAxLDggQEAKIAkJCW5wLT5mbGFncyAmPSB+TklVX0ZMQUdTXzEwRzsKIAkJCW5wLT5tYWNfeGN2ciA9IE1BQ19YQ1ZSX1BDUzsKIAkJfSAgZWxzZSB7Ci0JCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiUG9ydCAldSAxMEcvMUcgU0VSREVTIExpbmsgRmFpbGVkIFxuIiwKLQkJCSBucC0+cG9ydCk7CisJCQluZXRkZXZfZXJyKG5wLT5kZXYsICJQb3J0ICV1IDEwRy8xRyBTRVJERVMgTGluayBGYWlsZWRcbiIsCisJCQkJICAgbnAtPnBvcnQpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CkBAIC0zMjM0LDIzICszMjA0LDIyIEBACiAJcGFyZW50ID0gbnAtPnBhcmVudDsKIAllcnIgPSAwOwogCWlmICghKHBhcmVudC0+ZmxhZ3MgJiBQQVJFTlRfRkxHU19DTFNfSFdJTklUKSkgewotCQluaXVkYmcoUFJPQkUsICJmZmxwX2Vhcmx5X2luaXQ6IEluaXR0aW5nIGh3IG9uIHBvcnQgJXVcbiIsCi0JCSAgICAgICBucC0+cG9ydCk7CiAJCWlmIChucC0+cGFyZW50LT5wbGF0X3R5cGUgIT0gUExBVF9UWVBFX05JVSkgewogCQkJZmZscF9yZXNldChucCk7CiAJCQlmZmxwX3NldF90aW1pbmdzKG5wKTsKIAkJCWVyciA9IGZmbHBfZGlzYWJsZV9hbGxfcGFydGl0aW9ucyhucCk7CiAJCQlpZiAoZXJyKSB7Ci0JCQkJbml1ZGJnKFBST0JFLCAiZmZscF9kaXNhYmxlX2FsbF9wYXJ0aXRpb25zICIKLQkJCQkgICAgICAgImZhaWxlZCwgZXJyPSVkXG4iLCBlcnIpOworCQkJCW5ldGlmX3ByaW50ayhucCwgcHJvYmUsIEtFUk5fREVCVUcsIG5wLT5kZXYsCisJCQkJCSAgICAgImZmbHBfZGlzYWJsZV9hbGxfcGFydGl0aW9ucyBmYWlsZWQsIGVycj0lZFxuIiwKKwkJCQkJICAgICBlcnIpOwogCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9CiAKIAkJZXJyID0gdGNhbV9lYXJseV9pbml0KG5wKTsKIAkJaWYgKGVycikgewotCQkJbml1ZGJnKFBST0JFLCAidGNhbV9lYXJseV9pbml0IGZhaWxlZCwgZXJyPSVkXG4iLAotCQkJICAgICAgIGVycik7CisJCQluZXRpZl9wcmludGsobnAsIHByb2JlLCBLRVJOX0RFQlVHLCBucC0+ZGV2LAorCQkJCSAgICAgInRjYW1fZWFybHlfaW5pdCBmYWlsZWQsIGVycj0lZFxuIiwgZXJyKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCWZmbHBfbGxjc25hcF9lbmFibGUobnAsIDEpOwpAQCAtMzI2MCwyMiArMzIyOSwyMiBAQAogCiAJCWVyciA9IHRjYW1fZmx1c2hfYWxsKG5wKTsKIAkJaWYgKGVycikgewotCQkJbml1ZGJnKFBST0JFLCAidGNhbV9mbHVzaF9hbGwgZmFpbGVkLCBlcnI9JWRcbiIsCi0JCQkgICAgICAgZXJyKTsKKwkJCW5ldGlmX3ByaW50ayhucCwgcHJvYmUsIEtFUk5fREVCVUcsIG5wLT5kZXYsCisJCQkJICAgICAidGNhbV9mbHVzaF9hbGwgZmFpbGVkLCBlcnI9JWRcbiIsIGVycik7CiAJCQlnb3RvIG91dDsKIAkJfQogCQlpZiAobnAtPnBhcmVudC0+cGxhdF90eXBlICE9IFBMQVRfVFlQRV9OSVUpIHsKIAkJCWVyciA9IGZmbHBfaGFzaF9jbGVhcihucCk7CiAJCQlpZiAoZXJyKSB7Ci0JCQkJbml1ZGJnKFBST0JFLCAiZmZscF9oYXNoX2NsZWFyIGZhaWxlZCwgIgotCQkJCSAgICAgICAiZXJyPSVkXG4iLCBlcnIpOworCQkJCW5ldGlmX3ByaW50ayhucCwgcHJvYmUsIEtFUk5fREVCVUcsIG5wLT5kZXYsCisJCQkJCSAgICAgImZmbHBfaGFzaF9jbGVhciBmYWlsZWQsIGVycj0lZFxuIiwKKwkJCQkJICAgICBlcnIpOwogCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9CiAKIAkJdmxhbl90YmxfY2xlYXIobnApOwogCi0JCW5pdWRiZyhQUk9CRSwgImZmbHBfZWFybHlfaW5pdDogU3VjY2Vzc1xuIik7CiAJCXBhcmVudC0+ZmxhZ3MgfD0gUEFSRU5UX0ZMR1NfQ0xTX0hXSU5JVDsKIAl9CiBvdXQ6CkBAIC0zNjY1LDggKzM2MzQsOCBAQAogCiAJY29ucyA9IHJwLT5jb25zOwogCi0Jbml1ZGJnKFRYX0RPTkUsICIlczogbml1X3R4X3dvcmsoKSBwa3RfY250WyV1XSBjb25zWyVkXVxuIiwKLQkgICAgICAgbnAtPmRldi0+bmFtZSwgcGt0X2NudCwgY29ucyk7CisJbmV0aWZfcHJpbnRrKG5wLCB0eF9kb25lLCBLRVJOX0RFQlVHLCBucC0+ZGV2LAorCQkgICAgICIlcygpIHBrdF9jbnRbJXVdIGNvbnNbJWRdXG4iLCBfX2Z1bmNfXywgcGt0X2NudCwgY29ucyk7CiAKIAl3aGlsZSAocGt0X2NudC0tKQogCQljb25zID0gcmVsZWFzZV90eF9wYWNrZXQobnAsIHJwLCBjb25zKTsKQEAgLTM3MTQsMTEgKzM2ODMsMTIgQEAKIAkJcnAtPnJ4X2Vycm9ycyArPSBtaXNjICYgUlhNSVNDX0NPVU5UOwogCiAJCWlmICh1bmxpa2VseShtaXNjICYgUlhNSVNDX09GTE9XKSkKLQkJCWRldl9lcnIobnAtPmRldmljZSwgInJ4LSVkOiBDb3VudGVyIG92ZXJmbG93ICIKLQkJCQkiUlhNSVNDIGRpc2NhcmRcbiIsIHJ4X2NoYW5uZWwpOworCQkJZGV2X2VycihucC0+ZGV2aWNlLCAicngtJWQ6IENvdW50ZXIgb3ZlcmZsb3cgUlhNSVNDIGRpc2NhcmRcbiIsCisJCQkJcnhfY2hhbm5lbCk7CiAKLQkJbml1ZGJnKFJYX0VSUiwgIiVzLXJ4LSVkOiBNSVNDIGRyb3A9JXUgb3Zlcj0ldVxuIiwKLQkJICAgICAgIG5wLT5kZXYtPm5hbWUsIHJ4X2NoYW5uZWwsIG1pc2MsIG1pc2MtbGltaXQpOworCQluZXRpZl9wcmludGsobnAsIHJ4X2VyciwgS0VSTl9ERUJVRywgbnAtPmRldiwKKwkJCSAgICAgInJ4LSVkOiBNSVNDIGRyb3A9JXUgb3Zlcj0ldVxuIiwKKwkJCSAgICAgcnhfY2hhbm5lbCwgbWlzYywgbWlzYy1saW1pdCk7CiAJfQogCiAJLyogV1JFRCAoV2VpZ2h0ZWQgUmFuZG9tIEVhcmx5IERpc2NhcmQpIGJ5IGhhcmR3YXJlICovCkBAIC0zNzI4LDExICszNjk4LDExIEBACiAJCXJwLT5yeF9kcm9wcGVkICs9IHdyZWQgJiBSRURfRElTX0NOVF9DT1VOVDsKIAogCQlpZiAodW5saWtlbHkod3JlZCAmIFJFRF9ESVNfQ05UX09GTE9XKSkKLQkJCWRldl9lcnIobnAtPmRldmljZSwgInJ4LSVkOiBDb3VudGVyIG92ZXJmbG93ICIKLQkJCQkiV1JFRCBkaXNjYXJkXG4iLCByeF9jaGFubmVsKTsKKwkJCWRldl9lcnIobnAtPmRldmljZSwgInJ4LSVkOiBDb3VudGVyIG92ZXJmbG93IFdSRUQgZGlzY2FyZFxuIiwgcnhfY2hhbm5lbCk7CiAKLQkJbml1ZGJnKFJYX0VSUiwgIiVzLXJ4LSVkOiBXUkVEIGRyb3A9JXUgb3Zlcj0ldVxuIiwKLQkJICAgICAgIG5wLT5kZXYtPm5hbWUsIHJ4X2NoYW5uZWwsIHdyZWQsIHdyZWQtbGltaXQpOworCQluZXRpZl9wcmludGsobnAsIHJ4X2VyciwgS0VSTl9ERUJVRywgbnAtPmRldiwKKwkJCSAgICAgInJ4LSVkOiBXUkVEIGRyb3A9JXUgb3Zlcj0ldVxuIiwKKwkJCSAgICAgcnhfY2hhbm5lbCwgd3JlZCwgd3JlZC1saW1pdCk7CiAJfQogfQogCkBAIC0zNzUzLDggKzM3MjMsOSBAQAogCW1ib3gtPnJ4X2RtYV9jdGxfc3RhdCA9IDA7CiAJbWJveC0+cmNyc3RhdF9hID0gMDsKIAotCW5pdWRiZyhSWF9TVEFUVVMsICIlczogbml1X3J4X3dvcmsoY2hhblslZF0pLCBzdGF0WyVsbHhdIHFsZW49JWRcbiIsCi0JICAgICAgIG5wLT5kZXYtPm5hbWUsIHJwLT5yeF9jaGFubmVsLCAodW5zaWduZWQgbG9uZyBsb25nKSBzdGF0LCBxbGVuKTsKKwluZXRpZl9wcmludGsobnAsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgbnAtPmRldiwKKwkJICAgICAiJXMoY2hhblslZF0pLCBzdGF0WyVsbHhdIHFsZW49JWRcbiIsCisJCSAgICAgX19mdW5jX18sIHJwLT5yeF9jaGFubmVsLCAodW5zaWduZWQgbG9uZyBsb25nKXN0YXQsIHFsZW4pOwogCiAJcmNyX2RvbmUgPSB3b3JrX2RvbmUgPSAwOwogCXFsZW4gPSBtaW4ocWxlbiwgYnVkZ2V0KTsKQEAgLTM3OTEsOCArMzc2Miw4IEBACiAJdTMyIHJ4X3ZlYyA9ICh2MCAmIDB4ZmZmZmZmZmYpOwogCWludCBpLCB3b3JrX2RvbmUgPSAwOwogCi0Jbml1ZGJnKElOVFIsICIlczogbml1X3BvbGxfY29yZSgpIHYwWyUwMTZsbHhdXG4iLAotCSAgICAgICBucC0+ZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKSB2MCk7CisJbmV0aWZfcHJpbnRrKG5wLCBpbnRyLCBLRVJOX0RFQlVHLCBucC0+ZGV2LAorCQkgICAgICIlcygpIHYwWyUwMTZsbHhdXG4iLCBfX2Z1bmNfXywgKHVuc2lnbmVkIGxvbmcgbG9uZyl2MCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbnAtPm51bV90eF9yaW5nczsgaSsrKSB7CiAJCXN0cnVjdCB0eF9yaW5nX2luZm8gKnJwID0gJm5wLT50eF9yaW5nc1tpXTsKQEAgLTM4MzcsMzkgKzM4MDgsMzggQEAKIHN0YXRpYyB2b2lkIG5pdV9sb2dfcnhjaGFuX2Vycm9ycyhzdHJ1Y3Qgbml1ICpucCwgc3RydWN0IHJ4X3JpbmdfaW5mbyAqcnAsCiAJCQkJICB1NjQgc3RhdCkKIHsKLQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiJXM6IFJYIGNoYW5uZWwgJXUgZXJyb3JzICggIiwKLQkJbnAtPmRldi0+bmFtZSwgcnAtPnJ4X2NoYW5uZWwpOworCW5ldGRldl9lcnIobnAtPmRldiwgIlJYIGNoYW5uZWwgJXUgZXJyb3JzICggIiwgcnAtPnJ4X2NoYW5uZWwpOwogCiAJaWYgKHN0YXQgJiBSWF9ETUFfQ1RMX1NUQVRfUkJSX1RNT1VUKQotCQlwcmludGsoIlJCUl9UTU9VVCAiKTsKKwkJcHJfY29udCgiUkJSX1RNT1VUICIpOwogCWlmIChzdGF0ICYgUlhfRE1BX0NUTF9TVEFUX1JTUF9DTlRfRVJSKQotCQlwcmludGsoIlJTUF9DTlQgIik7CisJCXByX2NvbnQoIlJTUF9DTlQgIik7CiAJaWYgKHN0YXQgJiBSWF9ETUFfQ1RMX1NUQVRfQllURV9FTl9CVVMpCi0JCXByaW50aygiQllURV9FTl9CVVMgIik7CisJCXByX2NvbnQoIkJZVEVfRU5fQlVTICIpOwogCWlmIChzdGF0ICYgUlhfRE1BX0NUTF9TVEFUX1JTUF9EQVRfRVJSKQotCQlwcmludGsoIlJTUF9EQVQgIik7CisJCXByX2NvbnQoIlJTUF9EQVQgIik7CiAJaWYgKHN0YXQgJiBSWF9ETUFfQ1RMX1NUQVRfUkNSX0FDS19FUlIpCi0JCXByaW50aygiUkNSX0FDSyAiKTsKKwkJcHJfY29udCgiUkNSX0FDSyAiKTsKIAlpZiAoc3RhdCAmIFJYX0RNQV9DVExfU1RBVF9SQ1JfU0hBX1BBUikKLQkJcHJpbnRrKCJSQ1JfU0hBX1BBUiAiKTsKKwkJcHJfY29udCgiUkNSX1NIQV9QQVIgIik7CiAJaWYgKHN0YXQgJiBSWF9ETUFfQ1RMX1NUQVRfUkJSX1BSRV9QQVIpCi0JCXByaW50aygiUkJSX1BSRV9QQVIgIik7CisJCXByX2NvbnQoIlJCUl9QUkVfUEFSICIpOwogCWlmIChzdGF0ICYgUlhfRE1BX0NUTF9TVEFUX0NPTkZJR19FUlIpCi0JCXByaW50aygiQ09ORklHICIpOworCQlwcl9jb250KCJDT05GSUcgIik7CiAJaWYgKHN0YXQgJiBSWF9ETUFfQ1RMX1NUQVRfUkNSSU5DT04pCi0JCXByaW50aygiUkNSSU5DT04gIik7CisJCXByX2NvbnQoIlJDUklOQ09OICIpOwogCWlmIChzdGF0ICYgUlhfRE1BX0NUTF9TVEFUX1JDUkZVTEwpCi0JCXByaW50aygiUkNSRlVMTCAiKTsKKwkJcHJfY29udCgiUkNSRlVMTCAiKTsKIAlpZiAoc3RhdCAmIFJYX0RNQV9DVExfU1RBVF9SQlJGVUxMKQotCQlwcmludGsoIlJCUkZVTEwgIik7CisJCXByX2NvbnQoIlJCUkZVTEwgIik7CiAJaWYgKHN0YXQgJiBSWF9ETUFfQ1RMX1NUQVRfUkJSTE9HUEFHRSkKLQkJcHJpbnRrKCJSQlJMT0dQQUdFICIpOworCQlwcl9jb250KCJSQlJMT0dQQUdFICIpOwogCWlmIChzdGF0ICYgUlhfRE1BX0NUTF9TVEFUX0NGSUdMT0dQQUdFKQotCQlwcmludGsoIkNGSUdMT0dQQUdFICIpOworCQlwcl9jb250KCJDRklHTE9HUEFHRSAiKTsKIAlpZiAoc3RhdCAmIFJYX0RNQV9DVExfU1RBVF9EQ19GSUZPX0VSUikKLQkJcHJpbnRrKCJEQ19GSURPICIpOworCQlwcl9jb250KCJEQ19GSURPICIpOwogCi0JcHJpbnRrKCIpXG4iKTsKKwlwcl9jb250KCIpXG4iKTsKIH0KIAogc3RhdGljIGludCBuaXVfcnhfZXJyb3Ioc3RydWN0IG5pdSAqbnAsIHN0cnVjdCByeF9yaW5nX2luZm8gKnJwKQpAQCAtMzg4Myw5ICszODUzLDkgQEAKIAkJZXJyID0gLUVJTlZBTDsKIAogCWlmIChlcnIpIHsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBSWCBjaGFubmVsICV1IGVycm9yLCBzdGF0WyVsbHhdXG4iLAotCQkJbnAtPmRldi0+bmFtZSwgcnAtPnJ4X2NoYW5uZWwsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKSBzdGF0KTsKKwkJbmV0ZGV2X2VycihucC0+ZGV2LCAiUlggY2hhbm5lbCAldSBlcnJvciwgc3RhdFslbGx4XVxuIiwKKwkJCSAgIHJwLT5yeF9jaGFubmVsLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhdCk7CiAKIAkJbml1X2xvZ19yeGNoYW5fZXJyb3JzKG5wLCBycCwgc3RhdCk7CiAJfQpAQCAtMzg5OSwyNyArMzg2OSwyNiBAQAogc3RhdGljIHZvaWQgbml1X2xvZ190eGNoYW5fZXJyb3JzKHN0cnVjdCBuaXUgKm5wLCBzdHJ1Y3QgdHhfcmluZ19pbmZvICpycCwKIAkJCQkgIHU2NCBjcykKIHsKLQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiJXM6IFRYIGNoYW5uZWwgJXUgZXJyb3JzICggIiwKLQkJbnAtPmRldi0+bmFtZSwgcnAtPnR4X2NoYW5uZWwpOworCW5ldGRldl9lcnIobnAtPmRldiwgIlRYIGNoYW5uZWwgJXUgZXJyb3JzICggIiwgcnAtPnR4X2NoYW5uZWwpOwogCiAJaWYgKGNzICYgVFhfQ1NfTUJPWF9FUlIpCi0JCXByaW50aygiTUJPWCAiKTsKKwkJcHJfY29udCgiTUJPWCAiKTsKIAlpZiAoY3MgJiBUWF9DU19QS1RfU0laRV9FUlIpCi0JCXByaW50aygiUEtUX1NJWkUgIik7CisJCXByX2NvbnQoIlBLVF9TSVpFICIpOwogCWlmIChjcyAmIFRYX0NTX1RYX1JJTkdfT0ZMT1cpCi0JCXByaW50aygiVFhfUklOR19PRkxPVyAiKTsKKwkJcHJfY29udCgiVFhfUklOR19PRkxPVyAiKTsKIAlpZiAoY3MgJiBUWF9DU19QUkVGX0JVRl9QQVJfRVJSKQotCQlwcmludGsoIlBSRUZfQlVGX1BBUiAiKTsKKwkJcHJfY29udCgiUFJFRl9CVUZfUEFSICIpOwogCWlmIChjcyAmIFRYX0NTX05BQ0tfUFJFRikKLQkJcHJpbnRrKCJOQUNLX1BSRUYgIik7CisJCXByX2NvbnQoIk5BQ0tfUFJFRiAiKTsKIAlpZiAoY3MgJiBUWF9DU19OQUNLX1BLVF9SRCkKLQkJcHJpbnRrKCJOQUNLX1BLVF9SRCAiKTsKKwkJcHJfY29udCgiTkFDS19QS1RfUkQgIik7CiAJaWYgKGNzICYgVFhfQ1NfQ09ORl9QQVJUX0VSUikKLQkJcHJpbnRrKCJDT05GX1BBUlQgIik7CisJCXByX2NvbnQoIkNPTkZfUEFSVCAiKTsKIAlpZiAoY3MgJiBUWF9DU19QS1RfUFJUX0VSUikKLQkJcHJpbnRrKCJQS1RfUFRSICIpOworCQlwcl9jb250KCJQS1RfUFRSICIpOwogCi0JcHJpbnRrKCIpXG4iKTsKKwlwcl9jb250KCIpXG4iKTsKIH0KIAogc3RhdGljIGludCBuaXVfdHhfZXJyb3Ioc3RydWN0IG5pdSAqbnAsIHN0cnVjdCB0eF9yaW5nX2luZm8gKnJwKQpAQCAtMzkzMCwxMiArMzg5OSwxMSBAQAogCWxvZ2ggPSBucjY0KFRYX1JOR19FUlJfTE9HSChycC0+dHhfY2hhbm5lbCkpOwogCWxvZ2wgPSBucjY0KFRYX1JOR19FUlJfTE9HTChycC0+dHhfY2hhbm5lbCkpOwogCi0JZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBUWCBjaGFubmVsICV1IGVycm9yLCAiCi0JCSJjc1slbGx4XSBsb2doWyVsbHhdIGxvZ2xbJWxseF1cbiIsCi0JCW5wLT5kZXYtPm5hbWUsIHJwLT50eF9jaGFubmVsLAotCQkodW5zaWduZWQgbG9uZyBsb25nKSBjcywKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgbG9naCwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgbG9nbCk7CisJbmV0ZGV2X2VycihucC0+ZGV2LCAiVFggY2hhbm5lbCAldSBlcnJvciwgY3NbJWxseF0gbG9naFslbGx4XSBsb2dsWyVsbHhdXG4iLAorCQkgICBycC0+dHhfY2hhbm5lbCwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZyljcywKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsb2doLAorCQkgICAodW5zaWduZWQgbG9uZyBsb25nKWxvZ2wpOwogCiAJbml1X2xvZ190eGNoYW5fZXJyb3JzKG5wLCBycCwgY3MpOwogCkBAIC0zOTU0LDkgKzM5MjIsOCBAQAogCQkJcGh5X21kaW50ID0gMTsKIAl9CiAKLQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiJXM6IE1JRiBpbnRlcnJ1cHQsICIKLQkJInN0YXRbJWxseF0gcGh5X21kaW50KCVkKVxuIiwKLQkJbnAtPmRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgbWlmX3N0YXR1cywgcGh5X21kaW50KTsKKwluZXRkZXZfZXJyKG5wLT5kZXYsICJNSUYgaW50ZXJydXB0LCBzdGF0WyVsbHhdIHBoeV9tZGludCglZClcbiIsCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpbWlmX3N0YXR1cywgcGh5X21kaW50KTsKIAogCXJldHVybiAtRU5PREVWOwogfQpAQCAtNDA4MSw0MSArNDA0OCw0MCBAQAogCiBzdGF0aWMgdm9pZCBuaXVfbG9nX2RldmljZV9lcnJvcihzdHJ1Y3Qgbml1ICpucCwgdTY0IHN0YXQpCiB7Ci0JZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBDb3JlIGRldmljZSBlcnJvcnMgKCAiLAotCQlucC0+ZGV2LT5uYW1lKTsKKwluZXRkZXZfZXJyKG5wLT5kZXYsICJDb3JlIGRldmljZSBlcnJvcnMgKCAiKTsKIAogCWlmIChzdGF0ICYgU1lTX0VSUl9NQVNLX01FVEEyKQotCQlwcmludGsoIk1FVEEyICIpOworCQlwcl9jb250KCJNRVRBMiAiKTsKIAlpZiAoc3RhdCAmIFNZU19FUlJfTUFTS19NRVRBMSkKLQkJcHJpbnRrKCJNRVRBMSAiKTsKKwkJcHJfY29udCgiTUVUQTEgIik7CiAJaWYgKHN0YXQgJiBTWVNfRVJSX01BU0tfUEVVKQotCQlwcmludGsoIlBFVSAiKTsKKwkJcHJfY29udCgiUEVVICIpOwogCWlmIChzdGF0ICYgU1lTX0VSUl9NQVNLX1RYQykKLQkJcHJpbnRrKCJUWEMgIik7CisJCXByX2NvbnQoIlRYQyAiKTsKIAlpZiAoc3RhdCAmIFNZU19FUlJfTUFTS19SRE1DKQotCQlwcmludGsoIlJETUMgIik7CisJCXByX2NvbnQoIlJETUMgIik7CiAJaWYgKHN0YXQgJiBTWVNfRVJSX01BU0tfVERNQykKLQkJcHJpbnRrKCJURE1DICIpOworCQlwcl9jb250KCJURE1DICIpOwogCWlmIChzdGF0ICYgU1lTX0VSUl9NQVNLX1pDUCkKLQkJcHJpbnRrKCJaQ1AgIik7CisJCXByX2NvbnQoIlpDUCAiKTsKIAlpZiAoc3RhdCAmIFNZU19FUlJfTUFTS19GRkxQKQotCQlwcmludGsoIkZGTFAgIik7CisJCXByX2NvbnQoIkZGTFAgIik7CiAJaWYgKHN0YXQgJiBTWVNfRVJSX01BU0tfSVBQKQotCQlwcmludGsoIklQUCAiKTsKKwkJcHJfY29udCgiSVBQICIpOwogCWlmIChzdGF0ICYgU1lTX0VSUl9NQVNLX01BQykKLQkJcHJpbnRrKCJNQUMgIik7CisJCXByX2NvbnQoIk1BQyAiKTsKIAlpZiAoc3RhdCAmIFNZU19FUlJfTUFTS19TTVgpCi0JCXByaW50aygiU01YICIpOworCQlwcl9jb250KCJTTVggIik7CiAKLQlwcmludGsoIilcbiIpOworCXByX2NvbnQoIilcbiIpOwogfQogCiBzdGF0aWMgaW50IG5pdV9kZXZpY2VfZXJyb3Ioc3RydWN0IG5pdSAqbnApCiB7CiAJdTY0IHN0YXQgPSBucjY0KFNZU19FUlJfU1RBVCk7CiAKLQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiJXM6IENvcmUgZGV2aWNlIGVycm9yLCBzdGF0WyVsbHhdXG4iLAotCQlucC0+ZGV2LT5uYW1lLCAodW5zaWduZWQgbG9uZyBsb25nKSBzdGF0KTsKKwluZXRkZXZfZXJyKG5wLT5kZXYsICJDb3JlIGRldmljZSBlcnJvciwgc3RhdFslbGx4XVxuIiwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGF0KTsKIAogCW5pdV9sb2dfZGV2aWNlX2Vycm9yKG5wLCBzdGF0KTsKIApAQCAtNDE5Nyw4ICs0MTYzLDggQEAKIAkJICAgICAgUlhfRE1BX0NUTF9TVEFUX1JDUlRPKTsKIAludzY0KFJYX0RNQV9DVExfU1RBVChycC0+cnhfY2hhbm5lbCksIHN0YXRfd3JpdGUpOwogCi0Jbml1ZGJnKElOVFIsICIlczogcnhjaGFuX2ludHIgc3RhdFslbGx4XVxuIiwKLQkgICAgICAgbnAtPmRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgc3RhdCk7CisJbmV0aWZfcHJpbnRrKG5wLCBpbnRyLCBLRVJOX0RFQlVHLCBucC0+ZGV2LAorCQkgICAgICIlcygpIHN0YXRbJWxseF1cbiIsIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZyBsb25nKXN0YXQpOwogfQogCiBzdGF0aWMgdm9pZCBuaXVfdHhjaGFuX2ludHIoc3RydWN0IG5pdSAqbnAsIHN0cnVjdCB0eF9yaW5nX2luZm8gKnJwLApAQCAtNDIwNiw4ICs0MTcyLDggQEAKIHsKIAlycC0+dHhfY3MgPSBucjY0KFRYX0NTKHJwLT50eF9jaGFubmVsKSk7CiAKLQluaXVkYmcoSU5UUiwgIiVzOiB0eGNoYW5faW50ciBjc1slbGx4XVxuIiwKLQkgICAgICAgbnAtPmRldi0+bmFtZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgcnAtPnR4X2NzKTsKKwluZXRpZl9wcmludGsobnAsIGludHIsIEtFUk5fREVCVUcsIG5wLT5kZXYsCisJCSAgICAgIiVzKCkgY3NbJWxseF1cbiIsIF9fZnVuY19fLCAodW5zaWduZWQgbG9uZyBsb25nKXJwLT50eF9jcyk7CiB9CiAKIHN0YXRpYyB2b2lkIF9fbml1X2Zhc3RwYXRoX2ludGVycnVwdChzdHJ1Y3Qgbml1ICpucCwgaW50IGxkZywgdTY0IHYwKQpAQCAtNDI2NSw4ICs0MjMxLDggQEAKIAl1NjQgdjAsIHYxLCB2MjsKIAogCWlmIChuZXRpZl9tc2dfaW50cihucCkpCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAibml1X2ludGVycnVwdCgpIGxkZ1slcF0oJWQpICIsCi0JCSAgICAgICBscCwgbGRnKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgS0JVSUxEX01PRE5BTUUgIjogIiAiJXMoKSBsZGdbJXBdKCVkKSIsCisJCSAgICAgICBfX2Z1bmNfXywgbHAsIGxkZyk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbnAtPmxvY2ssIGZsYWdzKTsKIApAQCAtNDI3NSw3ICs0MjQxLDcgQEAKIAl2MiA9IG5yNjQoTERTVjIobGRnKSk7CiAKIAlpZiAobmV0aWZfbXNnX2ludHIobnApKQotCQlwcmludGsoInYwWyVsbHhdIHYxWyVsbHhdIHYyWyVsbHhdXG4iLAorCQlwcl9jb250KCIgdjBbJWxseF0gdjFbJWxseF0gdjJbJWxseF1cbiIsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB2MCwKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHYxLAogCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgdjIpOwpAQCAtNDQwMCw4ICs0MzY2LDggQEAKIAlpZiAoIXJwLT5tYm94KQogCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoKHVuc2lnbmVkIGxvbmcpcnAtPm1ib3ggJiAoNjRVTCAtIDEpKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICIlczogQ29oZXJlbnQgYWxsb2MgZ2l2ZXMgbWlzYWxpZ25lZCAiCi0JCQkiUlhETUEgbWFpbGJveCAlcFxuIiwgbnAtPmRldi0+bmFtZSwgcnAtPm1ib3gpOworCQluZXRkZXZfZXJyKG5wLT5kZXYsICJDb2hlcmVudCBhbGxvYyBnaXZlcyBtaXNhbGlnbmVkIFJYRE1BIG1haWxib3ggJXBcbiIsCisJCQkgICBycC0+bWJveCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDQxMSw4ICs0Mzc3LDggQEAKIAlpZiAoIXJwLT5yY3IpCiAJCXJldHVybiAtRU5PTUVNOwogCWlmICgodW5zaWduZWQgbG9uZylycC0+cmNyICYgKDY0VUwgLSAxKSkgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiJXM6IENvaGVyZW50IGFsbG9jIGdpdmVzIG1pc2FsaWduZWQgIgotCQkJIlJYRE1BIFJDUiB0YWJsZSAlcFxuIiwgbnAtPmRldi0+bmFtZSwgcnAtPnJjcik7CisJCW5ldGRldl9lcnIobnAtPmRldiwgIkNvaGVyZW50IGFsbG9jIGdpdmVzIG1pc2FsaWduZWQgUlhETUEgUkNSIHRhYmxlICVwXG4iLAorCQkJICAgcnAtPnJjcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlycC0+cmNyX3RhYmxlX3NpemUgPSBNQVhfUkNSX1JJTkdfU0laRTsKQEAgLTQ0MjQsOCArNDM5MCw4IEBACiAJaWYgKCFycC0+cmJyKQogCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoKHVuc2lnbmVkIGxvbmcpcnAtPnJiciAmICg2NFVMIC0gMSkpIHsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBDb2hlcmVudCBhbGxvYyBnaXZlcyBtaXNhbGlnbmVkICIKLQkJCSJSWERNQSBSQlIgdGFibGUgJXBcbiIsIG5wLT5kZXYtPm5hbWUsIHJwLT5yYnIpOworCQluZXRkZXZfZXJyKG5wLT5kZXYsICJDb2hlcmVudCBhbGxvYyBnaXZlcyBtaXNhbGlnbmVkIFJYRE1BIFJCUiB0YWJsZSAlcFxuIiwKKwkJCSAgIHJwLT5yYnIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcnAtPnJicl90YWJsZV9zaXplID0gTUFYX1JCUl9SSU5HX1NJWkU7CkBAIC00NDU4LDggKzQ0MjQsOCBAQAogCWlmICghcnAtPm1ib3gpCiAJCXJldHVybiAtRU5PTUVNOwogCWlmICgodW5zaWduZWQgbG9uZylycC0+bWJveCAmICg2NFVMIC0gMSkpIHsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBDb2hlcmVudCBhbGxvYyBnaXZlcyBtaXNhbGlnbmVkICIKLQkJCSJUWERNQSBtYWlsYm94ICVwXG4iLCBucC0+ZGV2LT5uYW1lLCBycC0+bWJveCk7CisJCW5ldGRldl9lcnIobnAtPmRldiwgIkNvaGVyZW50IGFsbG9jIGdpdmVzIG1pc2FsaWduZWQgVFhETUEgbWFpbGJveCAlcFxuIiwKKwkJCSAgIHJwLT5tYm94KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00NDY5LDggKzQ0MzUsOCBAQAogCWlmICghcnAtPmRlc2NyKQogCQlyZXR1cm4gLUVOT01FTTsKIAlpZiAoKHVuc2lnbmVkIGxvbmcpcnAtPmRlc2NyICYgKDY0VUwgLSAxKSkgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiJXM6IENvaGVyZW50IGFsbG9jIGdpdmVzIG1pc2FsaWduZWQgIgotCQkJIlRYRE1BIGRlc2NyIHRhYmxlICVwXG4iLCBucC0+ZGV2LT5uYW1lLCBycC0+ZGVzY3IpOworCQluZXRkZXZfZXJyKG5wLT5kZXYsICJDb2hlcmVudCBhbGxvYyBnaXZlcyBtaXNhbGlnbmVkIFRYRE1BIGRlc2NyIHRhYmxlICVwXG4iLAorCQkJICAgcnAtPmRlc2NyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00NzI2LDEwICs0NjkyLDggQEAKIAogCWlmIChycC0+ZGVzY3JfZG1hICYgfihUWF9STkdfQ0ZJR19TVEFERFJfQkFTRSB8CiAJCQkgICAgICBUWF9STkdfQ0ZJR19TVEFERFIpKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICIlczogVFggcmluZyBjaGFubmVsICVkICIKLQkJCSJETUEgYWRkciAoJWxseCkgaXMgbm90IGFsaWduZWQuXG4iLAotCQkJbnAtPmRldi0+bmFtZSwgY2hhbm5lbCwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHJwLT5kZXNjcl9kbWEpOworCQluZXRkZXZfZXJyKG5wLT5kZXYsICJUWCByaW5nIGNoYW5uZWwgJWQgRE1BIGFkZHIgKCVsbHgpIGlzIG5vdCBhbGlnbmVkXG4iLAorCQkJICAgY2hhbm5lbCwgKHVuc2lnbmVkIGxvbmcgbG9uZylycC0+ZGVzY3JfZG1hKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC00NzQ2LDEwICs0NzEwLDggQEAKIAogCWlmICgoKHJwLT5tYm94X2RtYSA+PiAzMikgJiB+VFhETUFfTUJIX01CQUREUikgfHwKIAkgICAgKCh1MzIpcnAtPm1ib3hfZG1hICYgflRYRE1BX01CTF9NQkFERFIpKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICIlczogVFggcmluZyBjaGFubmVsICVkICIKLQkJCSJNQk9YIGFkZHIgKCVsbHgpIGlzIGhhcyBpbGxlZ2FsIGJpdHMuXG4iLAotCQkJbnAtPmRldi0+bmFtZSwgY2hhbm5lbCwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIHJwLT5tYm94X2RtYSk7CisJCW5ldGRldl9lcnIobnAtPmRldiwgIlRYIHJpbmcgY2hhbm5lbCAlZCBNQk9YIGFkZHIgKCVsbHgpIGhhcyBpbnZhbGlkIGJpdHNcbiIsCisJCQkgICAgY2hhbm5lbCwgKHVuc2lnbmVkIGxvbmcgbG9uZylycC0+bWJveF9kbWEpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJbnc2NChUWERNQV9NQkgoY2hhbm5lbCksIHJwLT5tYm94X2RtYSA+PiAzMik7CkBAIC01MTQ2LDkgKzUxMDgsOCBAQAogCWVyciA9IG5pdV93YWl0X2JpdHNfY2xlYXIobnAsIFpDUF9SQU1fQUNDLCBaQ1BfUkFNX0FDQ19CVVNZLAogCQkJCSAgMTAwMCwgMTAwKTsKIAlpZiAoZXJyKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICIlczogWkNQIHJlYWQgYnVzeSB3b24ndCBjbGVhciwgIgotCQkJIlpDUF9SQU1fQUNDWyVsbHhdXG4iLCBucC0+ZGV2LT5uYW1lLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgbnI2NChaQ1BfUkFNX0FDQykpOworCQluZXRkZXZfZXJyKG5wLT5kZXYsICJaQ1AgcmVhZCBidXN5IHdvbid0IGNsZWFyLCBaQ1BfUkFNX0FDQ1slbGx4XVxuIiwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpbnI2NChaQ1BfUkFNX0FDQykpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNTE2MCw5ICs1MTIxLDggQEAKIAllcnIgPSBuaXVfd2FpdF9iaXRzX2NsZWFyKG5wLCBaQ1BfUkFNX0FDQywgWkNQX1JBTV9BQ0NfQlVTWSwKIAkJCQkgIDEwMDAsIDEwMCk7CiAJaWYgKGVycikgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiJXM6IFpDUCByZWFkIGJ1c3kyIHdvbid0IGNsZWFyLCAiCi0JCQkiWkNQX1JBTV9BQ0NbJWxseF1cbiIsIG5wLT5kZXYtPm5hbWUsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKSBucjY0KFpDUF9SQU1fQUNDKSk7CisJCW5ldGRldl9lcnIobnAtPmRldiwgIlpDUCByZWFkIGJ1c3kyIHdvbid0IGNsZWFyLCBaQ1BfUkFNX0FDQ1slbGx4XVxuIiwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpbnI2NChaQ1BfUkFNX0FDQykpOwogCQlyZXR1cm4gZXJyOwogCX0KIApAQCAtNTUyNyw4ICs1NDg3LDcgQEAKIAkJdWRlbGF5KDEwMCk7CiAJfQogCWlmIChsaW1pdCA8IDApIHsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIlBvcnQgJXUgVFggQk1BQyB3b3VsZCBub3QgcmVzZXQsICIKLQkJCSJCVFhNQUNfU1dfUlNUWyVsbHhdXG4iLAorCQlkZXZfZXJyKG5wLT5kZXZpY2UsICJQb3J0ICV1IFRYIEJNQUMgd291bGQgbm90IHJlc2V0LCBCVFhNQUNfU1dfUlNUWyVsbHhdXG4iLAogCQkJbnAtPnBvcnQsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKSBucjY0X21hYyhCVFhNQUNfU1dfUlNUKSk7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtNTYyOSwxMiArNTU4OCwxMSBAQAogCXdoaWxlICgtLWxpbWl0ID49IDApIHsKIAkJaWYgKCEobnI2NF9tYWMoWFJYTUFDX1NXX1JTVCkgJiAoWFJYTUFDX1NXX1JTVF9SRUdfUlMgfAogCQkJCQkJIFhSWE1BQ19TV19SU1RfU09GVF9SU1QpKSkKLQkJICAgIGJyZWFrOworCQkJYnJlYWs7CiAJCXVkZWxheSgxMDApOwogCX0KIAlpZiAobGltaXQgPCAwKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJQb3J0ICV1IFJYIFhNQUMgd291bGQgbm90IHJlc2V0LCAiCi0JCQkiWFJYTUFDX1NXX1JTVFslbGx4XVxuIiwKKwkJZGV2X2VycihucC0+ZGV2aWNlLCAiUG9ydCAldSBSWCBYTUFDIHdvdWxkIG5vdCByZXNldCwgWFJYTUFDX1NXX1JTVFslbGx4XVxuIiwKIAkJCW5wLT5wb3J0LAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgbnI2NF9tYWMoWFJYTUFDX1NXX1JTVCkpOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTU2NTUsOCArNTYxMyw3IEBACiAJCXVkZWxheSgxMDApOwogCX0KIAlpZiAobGltaXQgPCAwKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJQb3J0ICV1IFJYIEJNQUMgd291bGQgbm90IHJlc2V0LCAiCi0JCQkiQlJYTUFDX1NXX1JTVFslbGx4XVxuIiwKKwkJZGV2X2VycihucC0+ZGV2aWNlLCAiUG9ydCAldSBSWCBCTUFDIHdvdWxkIG5vdCByZXNldCwgQlJYTUFDX1NXX1JTVFslbGx4XVxuIiwKIAkJCW5wLT5wb3J0LAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgbnI2NF9tYWMoQlJYTUFDX1NXX1JTVCkpOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTU5NjAsMTEgKzU5MTcsOSBAQAogCX0KIAlpZiAobGltaXQgPCAwICYmCiAJICAgIChyZCAhPSAwICYmIHdyICE9IDEpKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICIlczogSVBQIHdvdWxkIG5vdCBxdWllc2NlLCAiCi0JCQkicmRfcHRyWyVsbHhdIHdyX3B0clslbGx4XVxuIiwKLQkJCW5wLT5kZXYtPm5hbWUsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKSBucjY0X2lwcChJUFBfREZJRk9fUkRfUFRSKSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIG5yNjRfaXBwKElQUF9ERklGT19XUl9QVFIpKTsKKwkJbmV0ZGV2X2VycihucC0+ZGV2LCAiSVBQIHdvdWxkIG5vdCBxdWllc2NlLCByZF9wdHJbJWxseF0gd3JfcHRyWyVsbHhdXG4iLAorCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylucjY0X2lwcChJUFBfREZJRk9fUkRfUFRSKSwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpbnI2NF9pcHAoSVBQX0RGSUZPX1dSX1BUUikpOwogCX0KIAogCXZhbCA9IG5yNjRfaXBwKElQUF9DRklHKTsKQEAgLTU5ODEsMTIgKzU5MzYsMTIgQEAKIHsKIAlpbnQgaSwgZXJyOwogCi0Jbml1ZGJnKElGVVAsICIlczogSW5pdGlhbGl6ZSBUWENcbiIsIG5wLT5kZXYtPm5hbWUpOworCW5ldGlmX3ByaW50ayhucCwgaWZ1cCwgS0VSTl9ERUJVRywgbnAtPmRldiwgIkluaXRpYWxpemUgVFhDXG4iKTsKIAluaXVfdHhjX2VuYWJsZV9wb3J0KG5wLCAxKTsKIAluaXVfdHhjX3BvcnRfZG1hX2VuYWJsZShucCwgMSk7CiAJbml1X3R4Y19zZXRfaW1hc2sobnAsIDApOwogCi0Jbml1ZGJnKElGVVAsICIlczogSW5pdGlhbGl6ZSBUWCBjaGFubmVsc1xuIiwgbnAtPmRldi0+bmFtZSk7CisJbmV0aWZfcHJpbnRrKG5wLCBpZnVwLCBLRVJOX0RFQlVHLCBucC0+ZGV2LCAiSW5pdGlhbGl6ZSBUWCBjaGFubmVsc1xuIik7CiAJZm9yIChpID0gMDsgaSA8IG5wLT5udW1fdHhfcmluZ3M7IGkrKykgewogCQlzdHJ1Y3QgdHhfcmluZ19pbmZvICpycCA9ICZucC0+dHhfcmluZ3NbaV07CiAKQEAgLTU5OTUsMjcgKzU5NTAsMjcgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCi0Jbml1ZGJnKElGVVAsICIlczogSW5pdGlhbGl6ZSBSWCBjaGFubmVsc1xuIiwgbnAtPmRldi0+bmFtZSk7CisJbmV0aWZfcHJpbnRrKG5wLCBpZnVwLCBLRVJOX0RFQlVHLCBucC0+ZGV2LCAiSW5pdGlhbGl6ZSBSWCBjaGFubmVsc1xuIik7CiAJZXJyID0gbml1X2luaXRfcnhfY2hhbm5lbHMobnApOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VuaW5pdF90eF9jaGFubmVsczsKIAotCW5pdWRiZyhJRlVQLCAiJXM6IEluaXRpYWxpemUgY2xhc3NpZmllclxuIiwgbnAtPmRldi0+bmFtZSk7CisJbmV0aWZfcHJpbnRrKG5wLCBpZnVwLCBLRVJOX0RFQlVHLCBucC0+ZGV2LCAiSW5pdGlhbGl6ZSBjbGFzc2lmaWVyXG4iKTsKIAllcnIgPSBuaXVfaW5pdF9jbGFzc2lmaWVyX2h3KG5wKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bmluaXRfcnhfY2hhbm5lbHM7CiAKLQluaXVkYmcoSUZVUCwgIiVzOiBJbml0aWFsaXplIFpDUFxuIiwgbnAtPmRldi0+bmFtZSk7CisJbmV0aWZfcHJpbnRrKG5wLCBpZnVwLCBLRVJOX0RFQlVHLCBucC0+ZGV2LCAiSW5pdGlhbGl6ZSBaQ1BcbiIpOwogCWVyciA9IG5pdV9pbml0X3pjcChucCk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfdW5pbml0X3J4X2NoYW5uZWxzOwogCi0Jbml1ZGJnKElGVVAsICIlczogSW5pdGlhbGl6ZSBJUFBcbiIsIG5wLT5kZXYtPm5hbWUpOworCW5ldGlmX3ByaW50ayhucCwgaWZ1cCwgS0VSTl9ERUJVRywgbnAtPmRldiwgIkluaXRpYWxpemUgSVBQXG4iKTsKIAllcnIgPSBuaXVfaW5pdF9pcHAobnApOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0X3VuaW5pdF9yeF9jaGFubmVsczsKIAotCW5pdWRiZyhJRlVQLCAiJXM6IEluaXRpYWxpemUgTUFDXG4iLCBucC0+ZGV2LT5uYW1lKTsKKwluZXRpZl9wcmludGsobnAsIGlmdXAsIEtFUk5fREVCVUcsIG5wLT5kZXYsICJJbml0aWFsaXplIE1BQ1xuIik7CiAJZXJyID0gbml1X2luaXRfbWFjKG5wKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bmluaXRfaXBwOwpAQCAtNjAyMywxNiArNTk3OCwxNiBAQAogCXJldHVybiAwOwogCiBvdXRfdW5pbml0X2lwcDoKLQluaXVkYmcoSUZVUCwgIiVzOiBVbmluaXQgSVBQXG4iLCBucC0+ZGV2LT5uYW1lKTsKKwluZXRpZl9wcmludGsobnAsIGlmdXAsIEtFUk5fREVCVUcsIG5wLT5kZXYsICJVbmluaXQgSVBQXG4iKTsKIAluaXVfZGlzYWJsZV9pcHAobnApOwogCiBvdXRfdW5pbml0X3J4X2NoYW5uZWxzOgotCW5pdWRiZyhJRlVQLCAiJXM6IFVuaW5pdCBSWCBjaGFubmVsc1xuIiwgbnAtPmRldi0+bmFtZSk7CisJbmV0aWZfcHJpbnRrKG5wLCBpZnVwLCBLRVJOX0RFQlVHLCBucC0+ZGV2LCAiVW5pbml0IFJYIGNoYW5uZWxzXG4iKTsKIAluaXVfc3RvcF9yeF9jaGFubmVscyhucCk7CiAJbml1X3Jlc2V0X3J4X2NoYW5uZWxzKG5wKTsKIAogb3V0X3VuaW5pdF90eF9jaGFubmVsczoKLQluaXVkYmcoSUZVUCwgIiVzOiBVbmluaXQgVFggY2hhbm5lbHNcbiIsIG5wLT5kZXYtPm5hbWUpOworCW5ldGlmX3ByaW50ayhucCwgaWZ1cCwgS0VSTl9ERUJVRywgbnAtPmRldiwgIlVuaW5pdCBUWCBjaGFubmVsc1xuIik7CiAJbml1X3N0b3BfdHhfY2hhbm5lbHMobnApOwogCW5pdV9yZXNldF90eF9jaGFubmVscyhucCk7CiAKQEAgLTYwNDEsMjUgKzU5OTYsMjUgQEAKIAogc3RhdGljIHZvaWQgbml1X3N0b3BfaHcoc3RydWN0IG5pdSAqbnApCiB7Ci0Jbml1ZGJnKElGRE9XTiwgIiVzOiBEaXNhYmxlIGludGVycnVwdHNcbiIsIG5wLT5kZXYtPm5hbWUpOworCW5ldGlmX3ByaW50ayhucCwgaWZkb3duLCBLRVJOX0RFQlVHLCBucC0+ZGV2LCAiRGlzYWJsZSBpbnRlcnJ1cHRzXG4iKTsKIAluaXVfZW5hYmxlX2ludGVycnVwdHMobnAsIDApOwogCi0Jbml1ZGJnKElGRE9XTiwgIiVzOiBEaXNhYmxlIFJYIE1BQ1xuIiwgbnAtPmRldi0+bmFtZSk7CisJbmV0aWZfcHJpbnRrKG5wLCBpZmRvd24sIEtFUk5fREVCVUcsIG5wLT5kZXYsICJEaXNhYmxlIFJYIE1BQ1xuIik7CiAJbml1X2VuYWJsZV9yeF9tYWMobnAsIDApOwogCi0Jbml1ZGJnKElGRE9XTiwgIiVzOiBEaXNhYmxlIElQUFxuIiwgbnAtPmRldi0+bmFtZSk7CisJbmV0aWZfcHJpbnRrKG5wLCBpZmRvd24sIEtFUk5fREVCVUcsIG5wLT5kZXYsICJEaXNhYmxlIElQUFxuIik7CiAJbml1X2Rpc2FibGVfaXBwKG5wKTsKIAotCW5pdWRiZyhJRkRPV04sICIlczogU3RvcCBUWCBjaGFubmVsc1xuIiwgbnAtPmRldi0+bmFtZSk7CisJbmV0aWZfcHJpbnRrKG5wLCBpZmRvd24sIEtFUk5fREVCVUcsIG5wLT5kZXYsICJTdG9wIFRYIGNoYW5uZWxzXG4iKTsKIAluaXVfc3RvcF90eF9jaGFubmVscyhucCk7CiAKLQluaXVkYmcoSUZET1dOLCAiJXM6IFN0b3AgUlggY2hhbm5lbHNcbiIsIG5wLT5kZXYtPm5hbWUpOworCW5ldGlmX3ByaW50ayhucCwgaWZkb3duLCBLRVJOX0RFQlVHLCBucC0+ZGV2LCAiU3RvcCBSWCBjaGFubmVsc1xuIik7CiAJbml1X3N0b3BfcnhfY2hhbm5lbHMobnApOwogCi0Jbml1ZGJnKElGRE9XTiwgIiVzOiBSZXNldCBUWCBjaGFubmVsc1xuIiwgbnAtPmRldi0+bmFtZSk7CisJbmV0aWZfcHJpbnRrKG5wLCBpZmRvd24sIEtFUk5fREVCVUcsIG5wLT5kZXYsICJSZXNldCBUWCBjaGFubmVsc1xuIik7CiAJbml1X3Jlc2V0X3R4X2NoYW5uZWxzKG5wKTsKIAotCW5pdWRiZyhJRkRPV04sICIlczogUmVzZXQgUlggY2hhbm5lbHNcbiIsIG5wLT5kZXYtPm5hbWUpOworCW5ldGlmX3ByaW50ayhucCwgaWZkb3duLCBLRVJOX0RFQlVHLCBucC0+ZGV2LCAiUmVzZXQgUlggY2hhbm5lbHNcbiIpOwogCW5pdV9yZXNldF9yeF9jaGFubmVscyhucCk7CiB9CiAKQEAgLTYzNjksMTAgKzYzMjQsMTAgQEAKIAlucC0+ZmxhZ3MgJj0gfihOSVVfRkxBR1NfTUNBU1QgfCBOSVVfRkxBR1NfUFJPTUlTQyk7CiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykKIAkJbnAtPmZsYWdzIHw9IE5JVV9GTEFHU19QUk9NSVNDOwotCWlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgKGRldi0+bWNfY291bnQgPiAwKSkKKwlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8ICghbmV0ZGV2X21jX2VtcHR5KGRldikpKQogCQlucC0+ZmxhZ3MgfD0gTklVX0ZMQUdTX01DQVNUOwogCi0JYWx0X2NudCA9IGRldi0+dWMuY291bnQ7CisJYWx0X2NudCA9IG5ldGRldl91Y19jb3VudChkZXYpOwogCWlmIChhbHRfY250ID4gbml1X251bV9hbHRfYWRkcihucCkpIHsKIAkJYWx0X2NudCA9IDA7CiAJCW5wLT5mbGFncyB8PSBOSVVfRkxBR1NfUFJPTUlTQzsKQEAgLTYzODEsMTcgKzYzMzYsMTUgQEAKIAlpZiAoYWx0X2NudCkgewogCQlpbnQgaW5kZXggPSAwOwogCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkoaGEsICZkZXYtPnVjLmxpc3QsIGxpc3QpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX3VjX2FkZHIoaGEsIGRldikgewogCQkJZXJyID0gbml1X3NldF9hbHRfbWFjKG5wLCBpbmRleCwgaGEtPmFkZHIpOwogCQkJaWYgKGVycikKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IEVycm9yICVkICIKLQkJCQkgICAgICAgImFkZGluZyBhbHQgbWFjICVkXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIGVyciwgaW5kZXgpOworCQkJCW5ldGRldl93YXJuKGRldiwgIkVycm9yICVkIGFkZGluZyBhbHQgbWFjICVkXG4iLAorCQkJCQkgICAgZXJyLCBpbmRleCk7CiAJCQllcnIgPSBuaXVfZW5hYmxlX2FsdF9tYWMobnAsIGluZGV4LCAxKTsKIAkJCWlmIChlcnIpCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiBFcnJvciAlZCAiCi0JCQkJICAgICAgICJlbmFibGluZyBhbHQgbWFjICVkXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIGVyciwgaW5kZXgpOworCQkJCW5ldGRldl93YXJuKGRldiwgIkVycm9yICVkIGVuYWJsaW5nIGFsdCBtYWMgJWRcbiIsCisJCQkJCSAgICBlcnIsIGluZGV4KTsKIAogCQkJaW5kZXgrKzsKIAkJfQpAQCAtNjQwNCwxNiArNjM1NywxNSBAQAogCQlmb3IgKGkgPSBhbHRfc3RhcnQ7IGkgPCBuaXVfbnVtX2FsdF9hZGRyKG5wKTsgaSsrKSB7CiAJCQllcnIgPSBuaXVfZW5hYmxlX2FsdF9tYWMobnAsIGksIDApOwogCQkJaWYgKGVycikKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IEVycm9yICVkICIKLQkJCQkgICAgICAgImRpc2FibGluZyBhbHQgbWFjICVkXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIGVyciwgaSk7CisJCQkJbmV0ZGV2X3dhcm4oZGV2LCAiRXJyb3IgJWQgZGlzYWJsaW5nIGFsdCBtYWMgJWRcbiIsCisJCQkJCSAgICBlcnIsIGkpOwogCQl9CiAJfQogCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CiAJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQogCQkJaGFzaFtpXSA9IDB4ZmZmZjsKLQl9IGVsc2UgaWYgKGRldi0+bWNfY291bnQgPiAwKSB7Ci0JCWZvciAoYWRkciA9IGRldi0+bWNfbGlzdDsgYWRkcjsgYWRkciA9IGFkZHItPm5leHQpIHsKKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihhZGRyLCBkZXYpIHsKIAkJCXUzMiBjcmMgPSBldGhlcl9jcmNfbGUoRVRIX0FMRU4sIGFkZHItPmRhX2FkZHIpOwogCiAJCQljcmMgPj49IDI0OwpAQCAtNjU3MCw3ICs2NTIyLDcgQEAKIHsKIAlzdHJ1Y3Qgbml1ICpucCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiJXM6IFRyYW5zbWl0IHRpbWVkIG91dCwgcmVzZXR0aW5nXG4iLAorCWRldl9lcnIobnAtPmRldmljZSwgIiVzOiBUcmFuc21pdCB0aW1lZCBvdXQsIHJlc2V0dGluZ1xuIiwKIAkJZGV2LT5uYW1lKTsKIAogCXNjaGVkdWxlX3dvcmsoJm5wLT5yZXNldF90YXNrKTsKQEAgLTY2NzIsOCArNjYyNCw3IEBACiAKIAlpZiAobml1X3R4X2F2YWlsKHJwKSA8PSAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyArIDEpKSB7CiAJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBCVUchIFR4IHJpbmcgZnVsbCB3aGVuICIKLQkJCSJxdWV1ZSBhd2FrZSFcbiIsIGRldi0+bmFtZSk7CisJCWRldl9lcnIobnAtPmRldmljZSwgIiVzOiBCVUchIFR4IHJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIiwgZGV2LT5uYW1lKTsKIAkJcnAtPnR4X2Vycm9ycysrOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQpAQCAtNzIzNyw4ICs3MTg4LDggQEAKIAogCXRwID0gJnBhcmVudC0+dGNhbVtpZHhdOwogCWlmICghdHAtPnZhbGlkKSB7Ci0JCXByX2luZm8oUEZYICJuaXUlZDogJXMgZW50cnkgWyVkXSBpbnZhbGlkIGZvciBpZHhbJWRdXG4iLAotCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lLCAodTE2KW5mYy0+ZnMubG9jYXRpb24sIGlkeCk7CisJCW5ldGRldl9pbmZvKG5wLT5kZXYsICJuaXUlZDogZW50cnkgWyVkXSBpbnZhbGlkIGZvciBpZHhbJWRdXG4iLAorCQkJICAgIHBhcmVudC0+aW5kZXgsICh1MTYpbmZjLT5mcy5sb2NhdGlvbiwgaWR4KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC03MjQ4LDggKzcxOTksOCBAQAogCXJldCA9IG5pdV9jbGFzc190b19ldGhmbG93KGNsYXNzLCAmZnNwLT5mbG93X3R5cGUpOwogCiAJaWYgKHJldCA8IDApIHsKLQkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBuaXVfY2xhc3NfdG9fZXRoZmxvdyBmYWlsZWRcbiIsCi0JCXBhcmVudC0+aW5kZXgsIG5wLT5kZXYtPm5hbWUpOworCQluZXRkZXZfaW5mbyhucC0+ZGV2LCAibml1JWQ6IG5pdV9jbGFzc190b19ldGhmbG93IGZhaWxlZFxuIiwKKwkJCSAgICBwYXJlbnQtPmluZGV4KTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNzMzMiw5ICs3MjgzLDggQEAKIAogCWlmIChuX2VudHJpZXMgIT0gY250KSB7CiAJCS8qIHByaW50IHdhcm5pbmcsIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gKi8KLQkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBJbiBuaXVfZ2V0X2V0aHRvb2xfdGNhbV9hbGwsICIKLQkJCSJuX2VudHJpZXNbJWRdICE9IGNudFslZF0hISFcblxuIiwKLQkJCW5wLT5wYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lLCBuX2VudHJpZXMsIGNudCk7CisJCW5ldGRldl9pbmZvKG5wLT5kZXYsICJuaXUlZDogSW4gJXMoKTogbl9lbnRyaWVzWyVkXSAhPSBjbnRbJWRdISEhXG4iLAorCQkJICAgIG5wLT5wYXJlbnQtPmluZGV4LCBfX2Z1bmNfXywgbl9lbnRyaWVzLCBjbnQpOwogCX0KIAogCXJldHVybiAwOwpAQCAtNzU2MSw5ICs3NTExLDggQEAKIAkJCX0KIAkJfQogCQlpZiAoIWFkZF91c3JfY2xzKSB7Ci0JCQlwcl9pbmZvKFBGWCAibml1JWQ6ICVzIG5pdV9hZGRfZXRodG9vbF90Y2FtX2VudHJ5OiAiCi0JCQkJIkNvdWxkIG5vdCBmaW5kL2luc2VydCBjbGFzcyBmb3IgcGlkICVkXG4iLAotCQkJCXBhcmVudC0+aW5kZXgsIG5wLT5kZXYtPm5hbWUsIHVzcGVjLT5wcm90byk7CisJCQluZXRkZXZfaW5mbyhucC0+ZGV2LCAibml1JWQ6ICVzKCk6IENvdWxkIG5vdCBmaW5kL2luc2VydCBjbGFzcyBmb3IgcGlkICVkXG4iLAorCQkJCSAgICBwYXJlbnQtPmluZGV4LCBfX2Z1bmNfXywgdXNwZWMtPnByb3RvKTsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtNzU5Niw5ICs3NTQ1LDggQEAKIAljYXNlIEFIX1Y2X0ZMT1c6CiAJY2FzZSBFU1BfVjZfRkxPVzoKIAkJLyogTm90IHlldCBpbXBsZW1lbnRlZCAqLwotCQlwcl9pbmZvKFBGWCAibml1JWQ6ICVzIEluIG5pdV9hZGRfZXRodG9vbF90Y2FtX2VudHJ5OiAiCi0JCQkiZmxvdyAlZCBmb3IgSVB2NiBub3QgaW1wbGVtZW50ZWRcblxuIiwKLQkJCXBhcmVudC0+aW5kZXgsIG5wLT5kZXYtPm5hbWUsIGZzcC0+Zmxvd190eXBlKTsKKwkJbmV0ZGV2X2luZm8obnAtPmRldiwgIm5pdSVkOiBJbiAlcygpOiBmbG93ICVkIGZvciBJUHY2IG5vdCBpbXBsZW1lbnRlZFxuIiwKKwkJCSAgICBwYXJlbnQtPmluZGV4LCBfX2Z1bmNfXywgZnNwLT5mbG93X3R5cGUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAljYXNlIElQX1VTRVJfRkxPVzoKQEAgLTc2MDcsMTcgKzc1NTUsMTUgQEAKIAkJCQkJCSAgIGNsYXNzKTsKIAkJfSBlbHNlIHsKIAkJCS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KLQkJCXByX2luZm8oUEZYICJuaXUlZDogJXMgSW4gbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnk6ICIKLQkJCSJ1c3IgZmxvdyBmb3IgSVB2NiBub3QgaW1wbGVtZW50ZWRcblxuIiwKLQkJCXBhcmVudC0+aW5kZXgsIG5wLT5kZXYtPm5hbWUpOworCQkJbmV0ZGV2X2luZm8obnAtPmRldiwgIm5pdSVkOiBJbiAlcygpOiB1c3IgZmxvdyBmb3IgSVB2NiBub3QgaW1wbGVtZW50ZWRcbiIsCisJCQkJICAgIHBhcmVudC0+aW5kZXgsIF9fZnVuY19fKTsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgotCQlwcl9pbmZvKFBGWCAibml1JWQ6ICVzIEluIG5pdV9hZGRfZXRodG9vbF90Y2FtX2VudHJ5OiAiCi0JCQkiVW5rbm93biBmbG93IHR5cGUgJWRcblxuIiwKLQkJCXBhcmVudC0+aW5kZXgsIG5wLT5kZXYtPm5hbWUsIGZzcC0+Zmxvd190eXBlKTsKKwkJbmV0ZGV2X2luZm8obnAtPmRldiwgIm5pdSVkOiBJbiAlcygpOiBVbmtub3duIGZsb3cgdHlwZSAlZFxuIiwKKwkJCSAgICBwYXJlbnQtPmluZGV4LCBfX2Z1bmNfXywgZnNwLT5mbG93X3R5cGUpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CkBAIC03NjI3LDEwICs3NTczLDkgQEAKIAkJdHAtPmFzc29jX2RhdGEgPSBUQ0FNX0FTU09DREFUQV9ESVNDOwogCX0gZWxzZSB7CiAJCWlmIChmc3AtPnJpbmdfY29va2llID49IG5wLT5udW1fcnhfcmluZ3MpIHsKLQkJCXByX2luZm8oUEZYICJuaXUlZDogJXMgSW4gbml1X2FkZF9ldGh0b29sX3RjYW1fZW50cnk6ICIKLQkJCQkiSW52YWxpZCBSWCByaW5nICVsbGRcblxuIiwKLQkJCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lLAotCQkJCShsb25nIGxvbmcpIGZzcC0+cmluZ19jb29raWUpOworCQkJbmV0ZGV2X2luZm8obnAtPmRldiwgIm5pdSVkOiBJbiAlcygpOiBJbnZhbGlkIFJYIHJpbmcgJWxsZFxuIiwKKwkJCQkgICAgcGFyZW50LT5pbmRleCwgX19mdW5jX18sCisJCQkJICAgIChsb25nIGxvbmcpZnNwLT5yaW5nX2Nvb2tpZSk7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTc2OTksMTAgKzc2NDQsOSBAQAogCQkJfQogCQl9CiAJCWlmIChpID09IE5JVV9MM19QUk9HX0NMUykgewotCQkJcHJfaW5mbyhQRlggIm5pdSVkOiAlcyBJbiBuaXVfZGVsX2V0aHRvb2xfdGNhbV9lbnRyeSwiCi0JCQkJIlVzciBjbGFzcyAweCVsbHggbm90IGZvdW5kIFxuIiwKLQkJCQlwYXJlbnQtPmluZGV4LCBucC0+ZGV2LT5uYW1lLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGNsYXNzKTsKKwkJCW5ldGRldl9pbmZvKG5wLT5kZXYsICJuaXUlZDogSW4gJXMoKTogVXNyIGNsYXNzIDB4JWxseCBub3QgZm91bmRcbiIsCisJCQkJICAgIHBhcmVudC0+aW5kZXgsIF9fZnVuY19fLAorCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKWNsYXNzKTsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQpAQCAtODAwMSw5ICs3OTQ1LDcgQEAKIAkJICogd29uJ3QgZ2V0IGFueSBpbnRlcnJ1cHRzIGFuZCB0aGF0J3MgcGFpbmZ1bCB0byBkZWJ1Zy4KIAkJICovCiAJCWlmIChucjY0KExER19OVU0obGRuKSkgIT0gbGRnKSB7Ci0JCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiUG9ydCAldSwgbWlzLW1hdGNoZWQgIgotCQkJCSJMREcgYXNzaWdubWVudCAiCi0JCQkJImZvciBsZG4gJWQsIHNob3VsZCBiZSAlZCBpcyAlbGx1XG4iLAorCQkJZGV2X2VycihucC0+ZGV2aWNlLCAiUG9ydCAldSwgbWlzLW1hdGNoZWQgTERHIGFzc2lnbm1lbnQgZm9yIGxkbiAlZCwgc2hvdWxkIGJlICVkIGlzICVsbHVcbiIsCiAJCQkJbnAtPnBvcnQsIGxkbiwgbGRnLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIG5yNjQoTERHX05VTShsZG4pKSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTgwNTYsNyArNzk5OCw3IEBACiAJCQlicmVhazsKIAl9IHdoaWxlIChsaW1pdC0tKTsKIAlpZiAoIShmcmFtZSAmIEVTUENfUElPX1NUQVRfUkVBRF9FTkQpKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJFRVBST00gcmVhZCB0aW1lb3V0IGZyYW1lWyVsbHhdXG4iLAorCQlkZXZfZXJyKG5wLT5kZXZpY2UsICJFRVBST00gcmVhZCB0aW1lb3V0IGZyYW1lWyVsbHhdXG4iLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgZnJhbWUpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC04MDcxLDcgKzgwMTMsNyBAQAogCQkJYnJlYWs7CiAJfSB3aGlsZSAobGltaXQtLSk7CiAJaWYgKCEoZnJhbWUgJiBFU1BDX1BJT19TVEFUX1JFQURfRU5EKSkgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiRUVQUk9NIHJlYWQgdGltZW91dCBmcmFtZVslbGx4XVxuIiwKKwkJZGV2X2VycihucC0+ZGV2aWNlLCAiRUVQUk9NIHJlYWQgdGltZW91dCBmcmFtZVslbGx4XVxuIiwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGZyYW1lKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtODE1Miw4ICs4MDk0LDkgQEAKIAlzICs9IGkgKyA1OwogCXNzY2FuZihzLCAiJWQuJWQiLCAmdnBkLT5mY29kZV9tYWpvciwgJnZwZC0+ZmNvZGVfbWlub3IpOwogCi0Jbml1ZGJnKFBST0JFLCAiVlBEX1NDQU46IEZDT0RFIG1ham9yKCVkKSBtaW5vciglZClcbiIsCi0JICAgICAgIHZwZC0+ZmNvZGVfbWFqb3IsIHZwZC0+ZmNvZGVfbWlub3IpOworCW5ldGlmX3ByaW50ayhucCwgcHJvYmUsIEtFUk5fREVCVUcsIG5wLT5kZXYsCisJCSAgICAgIlZQRF9TQ0FOOiBGQ09ERSBtYWpvciglZCkgbWlub3IoJWQpXG4iLAorCQkgICAgIHZwZC0+ZmNvZGVfbWFqb3IsIHZwZC0+ZmNvZGVfbWlub3IpOwogCWlmICh2cGQtPmZjb2RlX21ham9yID4gTklVX1ZQRF9NSU5fTUFKT1IgfHwKIAkgICAgKHZwZC0+ZmNvZGVfbWFqb3IgPT0gTklVX1ZQRF9NSU5fTUFKT1IgJiYKIAkgICAgIHZwZC0+ZmNvZGVfbWlub3IgPj0gTklVX1ZQRF9NSU5fTUlOT1IpKQpAQCAtODE3Myw4ICs4MTE2LDggQEAKICNkZWZpbmUgRk9VTkRfTUFTS19QSFkJCTB4MDAwMDAwMjAKICNkZWZpbmUgRk9VTkRfTUFTS19BTEwJCTB4MDAwMDAwM2YKIAotCW5pdWRiZyhQUk9CRSwgIlZQRF9TQ0FOOiBzdGFydFsleF0gZW5kWyV4XVxuIiwKLQkgICAgICAgc3RhcnQsIGVuZCk7CisJbmV0aWZfcHJpbnRrKG5wLCBwcm9iZSwgS0VSTl9ERUJVRywgbnAtPmRldiwKKwkJICAgICAiVlBEX1NDQU46IHN0YXJ0WyV4XSBlbmRbJXhdXG4iLCBzdGFydCwgZW5kKTsKIAl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKIAkJaW50IGxlbiwgZXJyLCBpbnN0YW5jZSwgdHlwZSwgcHJvcF9sZW47CiAJCWNoYXIgbmFtZWJ1Zls2NF07CkBAIC04MjI4LDggKzgxNzEsNyBAQAogCQl9CiAKIAkJaWYgKG1heF9sZW4gJiYgcHJvcF9sZW4gPiBtYXhfbGVuKSB7Ci0JCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiUHJvcGVydHkgJyVzJyBsZW5ndGggKCVkKSBpcyAiCi0JCQkJInRvbyBsb25nLlxuIiwgbmFtZWJ1ZiwgcHJvcF9sZW4pOworCQkJZGV2X2VycihucC0+ZGV2aWNlLCAiUHJvcGVydHkgJyVzJyBsZW5ndGggKCVkKSBpcyB0b28gbG9uZ1xuIiwgbmFtZWJ1ZiwgcHJvcF9sZW4pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApAQCAtODIzNyw4ICs4MTc5LDkgQEAKIAkJCXUzMiBvZmYgPSBzdGFydCArIDUgKyBlcnI7CiAJCQlpbnQgaTsKIAotCQkJbml1ZGJnKFBST0JFLCAiVlBEX1NDQU46IFJlYWRpbmcgaW4gcHJvcGVydHkgWyVzXSAiCi0JCQkgICAgICAgImxlblslZF1cbiIsIG5hbWVidWYsIHByb3BfbGVuKTsKKwkJCW5ldGlmX3ByaW50ayhucCwgcHJvYmUsIEtFUk5fREVCVUcsIG5wLT5kZXYsCisJCQkJICAgICAiVlBEX1NDQU46IFJlYWRpbmcgaW4gcHJvcGVydHkgWyVzXSBsZW5bJWRdXG4iLAorCQkJCSAgICAgbmFtZWJ1ZiwgcHJvcF9sZW4pOwogCQkJZm9yIChpID0gMDsgaSA8IHByb3BfbGVuOyBpKyspCiAJCQkJKnByb3BfYnVmKysgPSBuaXVfcGNpX2VlcHJvbV9yZWFkKG5wLCBvZmYgKyBpKTsKIAkJfQpAQCAtODQwMiw4ICs4MzQ1LDcgQEAKIAl1OCB2YWw4OwogCiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKCZ2cGQtPmxvY2FsX21hY1swXSkpIHsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIlZQRCBNQUMgaW52YWxpZCwgIgotCQkJImZhbGxpbmcgYmFjayB0byBTUFJPTS5cbiIpOworCQlkZXZfZXJyKG5wLT5kZXZpY2UsICJWUEQgTUFDIGludmFsaWQsIGZhbGxpbmcgYmFjayB0byBTUFJPTVxuIik7CiAKIAkJbnAtPmZsYWdzICY9IH5OSVVfRkxBR1NfVlBEX1ZBTElEOwogCQlyZXR1cm47CkBAIC04NDIwLDE0ICs4MzYyLDE0IEBACiAJCQlucC0+ZmxhZ3MgJj0gfk5JVV9GTEFHU18xMEc7CiAJCX0KIAkJaWYgKG5wLT5mbGFncyAmIE5JVV9GTEFHU18xMEcpCi0JCQkgbnAtPm1hY194Y3ZyID0gTUFDX1hDVlJfWFBDUzsKKwkJCW5wLT5tYWNfeGN2ciA9IE1BQ19YQ1ZSX1hQQ1M7CiAJfSBlbHNlIGlmICghc3RyY21wKG5wLT52cGQubW9kZWwsIE5JVV9GT1hYWV9NRExfU1RSKSkgewogCQlucC0+ZmxhZ3MgfD0gKE5JVV9GTEFHU18xMEcgfCBOSVVfRkxBR1NfRklCRVIgfAogCQkJICAgICAgTklVX0ZMQUdTX0hPVFBMVUdfUEhZKTsKIAl9IGVsc2UgaWYgKG5pdV9waHlfdHlwZV9wcm9wX2RlY29kZShucCwgbnAtPnZwZC5waHlfdHlwZSkpIHsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIklsbGVnYWwgcGh5IHN0cmluZyBbJXNdLlxuIiwKKwkJZGV2X2VycihucC0+ZGV2aWNlLCAiSWxsZWdhbCBwaHkgc3RyaW5nIFslc11cbiIsCiAJCQlucC0+dnBkLnBoeV90eXBlKTsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIkZhbGxpbmcgYmFjayB0byBTUFJPTS5cbiIpOworCQlkZXZfZXJyKG5wLT5kZXZpY2UsICJGYWxsaW5nIGJhY2sgdG8gU1BST01cbiIpOwogCQlucC0+ZmxhZ3MgJj0gfk5JVV9GTEFHU19WUERfVkFMSUQ7CiAJCXJldHVybjsKIAl9CkBAIC04NDU1LDcgKzgzOTcsOCBAQAogCiAJbnAtPmVlcHJvbV9sZW4gPSBsZW47CiAKLQluaXVkYmcoUFJPQkUsICJTUFJPTTogSW1hZ2Ugc2l6ZSAlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKSB2YWwpOworCW5ldGlmX3ByaW50ayhucCwgcHJvYmUsIEtFUk5fREVCVUcsIG5wLT5kZXYsCisJCSAgICAgIlNQUk9NOiBJbWFnZSBzaXplICVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpdmFsKTsKIAogCXN1bSA9IDA7CiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CkBAIC04NDY1LDEwICs4NDA4LDEwIEBACiAJCXN1bSArPSAodmFsID4+IDE2KSAmIDB4ZmY7CiAJCXN1bSArPSAodmFsID4+IDI0KSAmIDB4ZmY7CiAJfQotCW5pdWRiZyhQUk9CRSwgIlNQUk9NOiBDaGVja3N1bSAleFxuIiwgKGludCkoc3VtICYgMHhmZikpOworCW5ldGlmX3ByaW50ayhucCwgcHJvYmUsIEtFUk5fREVCVUcsIG5wLT5kZXYsCisJCSAgICAgIlNQUk9NOiBDaGVja3N1bSAleFxuIiwgKGludCkoc3VtICYgMHhmZikpOwogCWlmICgoc3VtICYgMHhmZikgIT0gMHhhYikgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiQmFkIFNQUk9NIGNoZWNrc3VtICIKLQkJCSIoJXgsIHNob3VsZCBiZSAweGFiKVxuIiwgKGludCkgKHN1bSAmIDB4ZmYpKTsKKwkJZGV2X2VycihucC0+ZGV2aWNlLCAiQmFkIFNQUk9NIGNoZWNrc3VtICgleCwgc2hvdWxkIGJlIDB4YWIpXG4iLCAoaW50KShzdW0gJiAweGZmKSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODQ5MSwxMSArODQzNCwxMiBAQAogCQkJRVNQQ19QSFlfVFlQRV9QT1JUM19TSElGVDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIkJvZ3VzIHBvcnQgbnVtYmVyICV1XG4iLAorCQlkZXZfZXJyKG5wLT5kZXZpY2UsICJCb2d1cyBwb3J0IG51bWJlciAldVxuIiwKIAkJCW5wLT5wb3J0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCW5pdWRiZyhQUk9CRSwgIlNQUk9NOiBQSFkgdHlwZSAleFxuIiwgdmFsOCk7CisJbmV0aWZfcHJpbnRrKG5wLCBwcm9iZSwgS0VSTl9ERUJVRywgbnAtPmRldiwKKwkJICAgICAiU1BST006IFBIWSB0eXBlICV4XG4iLCB2YWw4KTsKIAogCXN3aXRjaCAodmFsOCkgewogCWNhc2UgRVNQQ19QSFlfVFlQRV8xR19DT1BQRVI6CkBAIC04NTI3LDMwICs4NDcxLDI3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIkJvZ3VzIFNQUk9NIHBoeSB0eXBlICV1XG4iLCB2YWw4KTsKKwkJZGV2X2VycihucC0+ZGV2aWNlLCAiQm9ndXMgU1BST00gcGh5IHR5cGUgJXVcbiIsIHZhbDgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAl2YWwgPSBucjY0KEVTUENfTUFDX0FERFIwKTsKLQluaXVkYmcoUFJPQkUsICJTUFJPTTogTUFDX0FERFIwWyUwOGxseF1cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbCk7CisJbmV0aWZfcHJpbnRrKG5wLCBwcm9iZSwgS0VSTl9ERUJVRywgbnAtPmRldiwKKwkJICAgICAiU1BST006IE1BQ19BRERSMFslMDhsbHhdXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXZhbCk7CiAJZGV2LT5wZXJtX2FkZHJbMF0gPSAodmFsID4+ICAwKSAmIDB4ZmY7CiAJZGV2LT5wZXJtX2FkZHJbMV0gPSAodmFsID4+ICA4KSAmIDB4ZmY7CiAJZGV2LT5wZXJtX2FkZHJbMl0gPSAodmFsID4+IDE2KSAmIDB4ZmY7CiAJZGV2LT5wZXJtX2FkZHJbM10gPSAodmFsID4+IDI0KSAmIDB4ZmY7CiAKIAl2YWwgPSBucjY0KEVTUENfTUFDX0FERFIxKTsKLQluaXVkYmcoUFJPQkUsICJTUFJPTTogTUFDX0FERFIxWyUwOGxseF1cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbCk7CisJbmV0aWZfcHJpbnRrKG5wLCBwcm9iZSwgS0VSTl9ERUJVRywgbnAtPmRldiwKKwkJICAgICAiU1BST006IE1BQ19BRERSMVslMDhsbHhdXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXZhbCk7CiAJZGV2LT5wZXJtX2FkZHJbNF0gPSAodmFsID4+ICAwKSAmIDB4ZmY7CiAJZGV2LT5wZXJtX2FkZHJbNV0gPSAodmFsID4+ICA4KSAmIDB4ZmY7CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoJmRldi0+cGVybV9hZGRyWzBdKSkgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiU1BST00gTUFDIGFkZHJlc3MgaW52YWxpZFxuIik7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJbIFxuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCi0JCQlwcmludGsoIiUwMnggIiwgZGV2LT5wZXJtX2FkZHJbaV0pOwotCQlwcmludGsoIl1cbiIpOworCQlkZXZfZXJyKG5wLT5kZXZpY2UsICJTUFJPTSBNQUMgYWRkcmVzcyBpbnZhbGlkIFsgJXBNIF1cbiIsCisJCQlkZXYtPnBlcm1fYWRkcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODU2Miw4ICs4NTAzLDggQEAKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgZGV2LT5wZXJtX2FkZHIsIGRldi0+YWRkcl9sZW4pOwogCiAJdmFsID0gbnI2NChFU1BDX01PRF9TVFJfTEVOKTsKLQluaXVkYmcoUFJPQkUsICJTUFJPTTogTU9EX1NUUl9MRU5bJWxsdV1cbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHZhbCk7CisJbmV0aWZfcHJpbnRrKG5wLCBwcm9iZSwgS0VSTl9ERUJVRywgbnAtPmRldiwKKwkJICAgICAiU1BST006IE1PRF9TVFJfTEVOWyVsbHVdXG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXZhbCk7CiAJaWYgKHZhbCA+PSA4ICogNCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTg1NzgsOCArODUxOSw4IEBACiAJbnAtPnZwZC5tb2RlbFt2YWxdID0gJ1wwJzsKIAogCXZhbCA9IG5yNjQoRVNQQ19CRF9NT0RfU1RSX0xFTik7Ci0Jbml1ZGJnKFBST0JFLCAiU1BST006IEJEX01PRF9TVFJfTEVOWyVsbHVdXG4iLAotCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSB2YWwpOworCW5ldGlmX3ByaW50ayhucCwgcHJvYmUsIEtFUk5fREVCVUcsIG5wLT5kZXYsCisJCSAgICAgIlNQUk9NOiBCRF9NT0RfU1RSX0xFTlslbGx1XVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZyl2YWwpOwogCWlmICh2YWwgPj0gNCAqIDQpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC04NTk1LDggKzg1MzYsOCBAQAogCiAJbnAtPnZwZC5tYWNfbnVtID0KIAkJbnI2NChFU1BDX05VTV9QT1JUU19NQUNTKSAmIEVTUENfTlVNX1BPUlRTX01BQ1NfVkFMOwotCW5pdWRiZyhQUk9CRSwgIlNQUk9NOiBOVU1fUE9SVFNfTUFDU1slZF1cbiIsCi0JICAgICAgIG5wLT52cGQubWFjX251bSk7CisJbmV0aWZfcHJpbnRrKG5wLCBwcm9iZSwgS0VSTl9ERUJVRywgbnAtPmRldiwKKwkJICAgICAiU1BST006IE5VTV9QT1JUU19NQUNTWyVkXVxuIiwgbnAtPnZwZC5tYWNfbnVtKTsKIAogCXJldHVybiAwOwogfQpAQCAtODYyOSw4ICs4NTcwLDYgQEAKIAkJfQogCX0KIAotCW5pdWRiZyhQUk9CRSwgIm5pdV9nZXRfYW5kX3ZhbGlkYXRlX3BvcnQ6IHBvcnRbJWRdIG51bV9wb3J0c1slZF1cbiIsCi0JICAgICAgIG5wLT5wb3J0LCBwYXJlbnQtPm51bV9wb3J0cyk7CiAJaWYgKG5wLT5wb3J0ID49IHBhcmVudC0+bnVtX3BvcnRzKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtODY1OSwxNCArODU5OCwxMiBAQAogCiAJcHJfaW5mbygibml1JWQ6IEZvdW5kIFBIWSAlMDh4IHR5cGUgJXMgYXQgcGh5X3BvcnQgJXVcbiIsCiAJCXBhcmVudC0+aW5kZXgsIGlkLAotCQkodHlwZSA9PSBQSFlfVFlQRV9QTUFfUE1EID8KLQkJICJQTUEvUE1EIiA6Ci0JCSAodHlwZSA9PSBQSFlfVFlQRV9QQ1MgPwotCQkgICJQQ1MiIDogIk1JSSIpKSwKKwkJdHlwZSA9PSBQSFlfVFlQRV9QTUFfUE1EID8gIlBNQS9QTUQiIDoKKwkJdHlwZSA9PSBQSFlfVFlQRV9QQ1MgPyAiUENTIiA6ICJNSUkiLAogCQlwaHlfcG9ydCk7CiAKIAlpZiAocC0+Y3VyW3R5cGVdID49IE5JVV9NQVhfUE9SVFMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVG9vIG1hbnkgUEhZIHBvcnRzLlxuIik7CisJCXByX2VycigiVG9vIG1hbnkgUEhZIHBvcnRzXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlkeCA9IHAtPmN1clt0eXBlXTsKQEAgLTg3MjcsOCArODY2NCw3IEBACiAJCXBhcmVudC0+cnhjaGFuX3Blcl9wb3J0W2ldID0gKDE2IC8gbnVtX3BvcnRzKTsKIAkJcGFyZW50LT50eGNoYW5fcGVyX3BvcnRbaV0gPSAoMTYgLyBudW1fcG9ydHMpOwogCi0JCXByX2luZm8oUEZYICJuaXUlZDogUG9ydCAldSBbJXUgUlggY2hhbnNdICIKLQkJCSJbJXUgVFggY2hhbnNdXG4iLAorCQlwcl9pbmZvKCJuaXUlZDogUG9ydCAldSBbJXUgUlggY2hhbnNdIFsldSBUWCBjaGFuc11cbiIsCiAJCQlwYXJlbnQtPmluZGV4LCBpLAogCQkJcGFyZW50LT5yeGNoYW5fcGVyX3BvcnRbaV0sCiAJCQlwYXJlbnQtPnR4Y2hhbl9wZXJfcG9ydFtpXSk7CkBAIC04NzcxLDggKzg3MDcsNyBAQAogCQkJcGFyZW50LT5yeGNoYW5fcGVyX3BvcnRbaV0gPSByeF9jaGFuc19wZXJfMWc7CiAJCQlwYXJlbnQtPnR4Y2hhbl9wZXJfcG9ydFtpXSA9IHR4X2NoYW5zX3Blcl8xZzsKIAkJfQotCQlwcl9pbmZvKFBGWCAibml1JWQ6IFBvcnQgJXUgWyV1IFJYIGNoYW5zXSAiCi0JCQkiWyV1IFRYIGNoYW5zXVxuIiwKKwkJcHJfaW5mbygibml1JWQ6IFBvcnQgJXUgWyV1IFJYIGNoYW5zXSBbJXUgVFggY2hhbnNdXG4iLAogCQkJcGFyZW50LT5pbmRleCwgaSwKIAkJCXBhcmVudC0+cnhjaGFuX3Blcl9wb3J0W2ldLAogCQkJcGFyZW50LT50eGNoYW5fcGVyX3BvcnRbaV0pOwpAQCAtODc4MSwyMyArODcxNiwyMCBAQAogCX0KIAogCWlmICh0b3RfcnggPiBOSVVfTlVNX1JYQ0hBTikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJuaXUlZDogVG9vIG1hbnkgUlggY2hhbm5lbHMgKCVkKSwgIgotCQkgICAgICAgInJlc2V0dGluZyB0byBvbmUgcGVyIHBvcnQuXG4iLAorCQlwcl9lcnIoIm5pdSVkOiBUb28gbWFueSBSWCBjaGFubmVscyAoJWQpLCByZXNldHRpbmcgdG8gb25lIHBlciBwb3J0XG4iLAogCQkgICAgICAgcGFyZW50LT5pbmRleCwgdG90X3J4KTsKIAkJZm9yIChpID0gMDsgaSA8IG51bV9wb3J0czsgaSsrKQogCQkJcGFyZW50LT5yeGNoYW5fcGVyX3BvcnRbaV0gPSAxOwogCX0KIAlpZiAodG90X3R4ID4gTklVX05VTV9UWENIQU4pIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAibml1JWQ6IFRvbyBtYW55IFRYIGNoYW5uZWxzICglZCksICIKLQkJICAgICAgICJyZXNldHRpbmcgdG8gb25lIHBlciBwb3J0LlxuIiwKKwkJcHJfZXJyKCJuaXUlZDogVG9vIG1hbnkgVFggY2hhbm5lbHMgKCVkKSwgcmVzZXR0aW5nIHRvIG9uZSBwZXIgcG9ydFxuIiwKIAkJICAgICAgIHBhcmVudC0+aW5kZXgsIHRvdF90eCk7CiAJCWZvciAoaSA9IDA7IGkgPCBudW1fcG9ydHM7IGkrKykKIAkJCXBhcmVudC0+dHhjaGFuX3Blcl9wb3J0W2ldID0gMTsKIAl9CiAJaWYgKHRvdF9yeCA8IE5JVV9OVU1fUlhDSEFOIHx8IHRvdF90eCA8IE5JVV9OVU1fVFhDSEFOKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJuaXUlZDogRHJpdmVyIGJ1Zywgd2FzdGVkIGNoYW5uZWxzLCAiCi0JCSAgICAgICAiUlhbJWRdIFRYWyVkXVxuIiwKLQkJICAgICAgIHBhcmVudC0+aW5kZXgsIHRvdF9yeCwgdG90X3R4KTsKKwkJcHJfd2FybmluZygibml1JWQ6IERyaXZlciBidWcsIHdhc3RlZCBjaGFubmVscywgUlhbJWRdIFRYWyVkXVxuIiwKKwkJCSAgIHBhcmVudC0+aW5kZXgsIHRvdF9yeCwgdG90X3R4KTsKIAl9CiB9CiAKQEAgLTg4MjUsMTggKzg3NTcsMTggQEAKIAkJCXN0cnVjdCByZGNfdGFibGUgKnJ0ID0gJnRwLT50YWJsZXNbZ3JwXTsKIAkJCWludCBzbG90OwogCi0JCQlwcl9pbmZvKFBGWCAibml1JWQ6IFBvcnQgJWQgUkRDIHRibCglZCkgWyAiLAorCQkJcHJfaW5mbygibml1JWQ6IFBvcnQgJWQgUkRDIHRibCglZCkgWyAiLAogCQkJCXBhcmVudC0+aW5kZXgsIGksIHRwLT5maXJzdF90YWJsZV9udW0gKyBncnApOwogCQkJZm9yIChzbG90ID0gMDsgc2xvdCA8IE5JVV9SRENfVEFCTEVfU0xPVFM7IHNsb3QrKykgewogCQkJCXJ0LT5yeGRtYV9jaGFubmVsW3Nsb3RdID0KIAkJCQkJcmRjX2NoYW5uZWxfYmFzZSArIHRoaXNfY2hhbm5lbF9vZmZzZXQ7CiAKLQkJCQlwcmludGsoIiVkICIsIHJ0LT5yeGRtYV9jaGFubmVsW3Nsb3RdKTsKKwkJCQlwcl9jb250KCIlZCAiLCBydC0+cnhkbWFfY2hhbm5lbFtzbG90XSk7CiAKIAkJCQlpZiAoKyt0aGlzX2NoYW5uZWxfb2Zmc2V0ID09IG51bV9jaGFubmVscykKIAkJCQkJdGhpc19jaGFubmVsX29mZnNldCA9IDA7CiAJCQl9Ci0JCQlwcmludGsoIl1cbiIpOworCQkJcHJfY29udCgiXVxuIik7CiAJCX0KIAogCQlwYXJlbnQtPnJkY19kZWZhdWx0W2ldID0gcmRjX2NoYW5uZWxfYmFzZTsKQEAgLTg5OTYsOCArODkyOCw3IEBACiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVW5zdXBwb3J0ZWQgcG9ydCBjb25maWcgIgotCQkJICAgICAgICIxMEdbJWRdIDFHWyVkXVxuIiwKKwkJCXByX2VycigiVW5zdXBwb3J0ZWQgcG9ydCBjb25maWcgMTBHWyVkXSAxR1slZF1cbiIsCiAJCQkgICAgICAgbnVtXzEwZywgbnVtXzFnKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC05MDE1LDggKzg5NDYsNyBAQAogCXJldHVybiAwOwogCiB1bmtub3duX3ZnXzFnX3BvcnQ6Ci0JcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IGlkZW50aWZ5IHBsYXRmb3JtIHR5cGUsIDFncG9ydD0lZFxuIiwKLQkgICAgICAgbG93ZXN0XzFnKTsKKwlwcl9lcnIoIkNhbm5vdCBpZGVudGlmeSBwbGF0Zm9ybSB0eXBlLCAxZ3BvcnQ9JWRcbiIsIGxvd2VzdF8xZyk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKQEAgLTkwMjUsOSArODk1NSw2IEBACiAJc3RydWN0IG5pdV9wYXJlbnQgKnBhcmVudCA9IG5wLT5wYXJlbnQ7CiAJaW50IGVyciwgaTsKIAotCW5pdWRiZyhQUk9CRSwgIm5pdV9wcm9iZV9wb3J0cygpOiBwb3J0X3BoeVslMDh4XVxuIiwKLQkgICAgICAgcGFyZW50LT5wb3J0X3BoeSk7Ci0KIAlpZiAocGFyZW50LT5wb3J0X3BoeSA9PSBQT1JUX1BIWV9VTktOT1dOKSB7CiAJCWVyciA9IHdhbGtfcGh5cyhucCwgcGFyZW50KTsKIAkJaWYgKGVycikKQEAgLTkwNDgsOSArODk3NSw2IEBACiB7CiAJc3RydWN0IG5pdV9jbGFzc2lmaWVyICpjcCA9ICZucC0+Y2xhczsKIAotCW5pdWRiZyhQUk9CRSwgIm5pdV9jbGFzc2lmaWVyX3N3c3RhdGVfaW5pdDogbnVtX3RjYW0oJWQpXG4iLAotCSAgICAgICBucC0+cGFyZW50LT50Y2FtX251bV9lbnRyaWVzKTsKLQogCWNwLT50Y2FtX3RvcCA9ICh1MTYpIG5wLT5wb3J0OwogCWNwLT50Y2FtX3N6ID0gbnAtPnBhcmVudC0+dGNhbV9udW1fZW50cmllcyAvIG5wLT5wYXJlbnQtPm51bV9wb3J0czsKIAljcC0+aDFfaW5pdCA9IDB4ZmZmZmZmZmY7CkBAIC05MTE2LDggKzkwNDAsNyBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICJQb3J0ICV1IGlzIGludmFsaWQsIGNhbm5vdCAiCi0JCQkiY29tcHV0ZSBNQUMgYmxvY2sgb2Zmc2V0LlxuIiwgbnAtPnBvcnQpOworCQlkZXZfZXJyKG5wLT5kZXZpY2UsICJQb3J0ICV1IGlzIGludmFsaWQsIGNhbm5vdCBjb21wdXRlIE1BQyBibG9jayBvZmZzZXRcbiIsIG5wLT5wb3J0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC05MzI3LDkgKzkyNTAsOCBAQAogCiAJcGh5X3R5cGUgPSBvZl9nZXRfcHJvcGVydHkoZHAsICJwaHktdHlwZSIsICZwcm9wX2xlbik7CiAJaWYgKCFwaHlfdHlwZSkgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiJXM6IE9GIG5vZGUgbGFja3MgIgotCQkJInBoeS10eXBlIHByb3BlcnR5XG4iLAotCQkJZHAtPmZ1bGxfbmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiJXM6IE9GIG5vZGUgbGFja3MgcGh5LXR5cGUgcHJvcGVydHlcbiIsCisJCQkgICBkcC0+ZnVsbF9uYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC05MzM5LDM0ICs5MjYxLDI2IEBACiAJc3RyY3B5KG5wLT52cGQucGh5X3R5cGUsIHBoeV90eXBlKTsKIAogCWlmIChuaXVfcGh5X3R5cGVfcHJvcF9kZWNvZGUobnAsIG5wLT52cGQucGh5X3R5cGUpKSB7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICIlczogSWxsZWdhbCBwaHkgc3RyaW5nIFslc10uXG4iLAotCQkJZHAtPmZ1bGxfbmFtZSwgbnAtPnZwZC5waHlfdHlwZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiJXM6IElsbGVnYWwgcGh5IHN0cmluZyBbJXNdXG4iLAorCQkJICAgZHAtPmZ1bGxfbmFtZSwgbnAtPnZwZC5waHlfdHlwZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCW1hY19hZGRyID0gb2ZfZ2V0X3Byb3BlcnR5KGRwLCAibG9jYWwtbWFjLWFkZHJlc3MiLCAmcHJvcF9sZW4pOwogCWlmICghbWFjX2FkZHIpIHsKLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBPRiBub2RlIGxhY2tzICIKLQkJCSJsb2NhbC1tYWMtYWRkcmVzcyBwcm9wZXJ0eVxuIiwKLQkJCWRwLT5mdWxsX25hbWUpOworCQluZXRkZXZfZXJyKGRldiwgIiVzOiBPRiBub2RlIGxhY2tzIGxvY2FsLW1hYy1hZGRyZXNzIHByb3BlcnR5XG4iLAorCQkJICAgZHAtPmZ1bGxfbmFtZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAocHJvcF9sZW4gIT0gZGV2LT5hZGRyX2xlbikgewotCQlkZXZfZXJyKG5wLT5kZXZpY2UsIFBGWCAiJXM6IE9GIE1BQyBhZGRyZXNzIHByb3AgbGVuICglZCkgIgotCQkJImlzIHdyb25nLlxuIiwKLQkJCWRwLT5mdWxsX25hbWUsIHByb3BfbGVuKTsKKwkJbmV0ZGV2X2VycihkZXYsICIlczogT0YgTUFDIGFkZHJlc3MgcHJvcCBsZW4gKCVkKSBpcyB3cm9uZ1xuIiwKKwkJCSAgIGRwLT5mdWxsX25hbWUsIHByb3BfbGVuKTsKIAl9CiAJbWVtY3B5KGRldi0+cGVybV9hZGRyLCBtYWNfYWRkciwgZGV2LT5hZGRyX2xlbik7CiAJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKCZkZXYtPnBlcm1fYWRkclswXSkpIHsKLQkJaW50IGk7Ci0KLQkJZGV2X2VycihucC0+ZGV2aWNlLCBQRlggIiVzOiBPRiBNQUMgYWRkcmVzcyBpcyBpbnZhbGlkXG4iLAotCQkJZHAtPmZ1bGxfbmFtZSk7Ci0JCWRldl9lcnIobnAtPmRldmljZSwgUEZYICIlczogWyBcbiIsCi0JCQlkcC0+ZnVsbF9uYW1lKTsKLQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKLQkJCXByaW50aygiJTAyeCAiLCBkZXYtPnBlcm1fYWRkcltpXSk7Ci0JCXByaW50aygiXVxuIik7CisJCW5ldGRldl9lcnIoZGV2LCAiJXM6IE9GIE1BQyBhZGRyZXNzIGlzIGludmFsaWRcbiIsCisJCQkgICBkcC0+ZnVsbF9uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICIlczogWyAlcE0gXVxuIiwgZHAtPmZ1bGxfbmFtZSwgZGV2LT5wZXJtX2FkZHIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTk0MTQsOCArOTMyOCw4IEBACiAKIAkJbnc2NChFU1BDX1BJT19FTiwgRVNQQ19QSU9fRU5fRU5BQkxFKTsKIAkJb2Zmc2V0ID0gbml1X3BjaV92cGRfb2Zmc2V0KG5wKTsKLQkJbml1ZGJnKFBST0JFLCAibml1X2dldF9pbnZhcmlhbnRzOiBWUEQgb2Zmc2V0IFslMDh4XVxuIiwKLQkJICAgICAgIG9mZnNldCk7CisJCW5ldGlmX3ByaW50ayhucCwgcHJvYmUsIEtFUk5fREVCVUcsIG5wLT5kZXYsCisJCQkgICAgICIlcygpIFZQRCBvZmZzZXQgWyUwOHhdXG4iLCBfX2Z1bmNfXywgb2Zmc2V0KTsKIAkJaWYgKG9mZnNldCkKIAkJCW5pdV9wY2lfdnBkX2ZldGNoKG5wLCBvZmZzZXQpOwogCQludzY0KEVTUENfUElPX0VOLCAwKTsKQEAgLTk1NzUsOCArOTQ4OSw2IEBACiAJc3RydWN0IG5pdV9wYXJlbnQgKnA7CiAJaW50IGk7CiAKLQluaXVkYmcoUFJPQkUsICJuaXVfbmV3X3BhcmVudDogQ3JlYXRpbmcgbmV3IHBhcmVudC5cbiIpOwotCiAJcGxhdF9kZXYgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXJfc2ltcGxlKCJuaXUiLCBuaXVfcGFyZW50X2luZGV4LAogCQkJCQkJICAgTlVMTCwgMCk7CiAJaWYgKElTX0VSUihwbGF0X2RldikpCkBAIC05NjQxLDkgKzk1NTMsNiBAQAogCXN0cnVjdCBuaXVfcGFyZW50ICpwLCAqdG1wOwogCWludCBwb3J0ID0gbnAtPnBvcnQ7CiAKLQluaXVkYmcoUFJPQkUsICJuaXVfZ2V0X3BhcmVudDogcGxhdGZvcm1fdHlwZVsldV0gcG9ydFsldV1cbiIsCi0JICAgICAgIHB0eXBlLCBwb3J0KTsKLQogCW11dGV4X2xvY2soJm5pdV9wYXJlbnRfbG9jayk7CiAJcCA9IE5VTEw7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZuaXVfcGFyZW50X2xpc3QsIGxpc3QpIHsKQEAgLTk2ODEsNyArOTU5MCw4IEBACiAKIAlCVUdfT04oIXAgfHwgcC0+cG9ydHNbcG9ydF0gIT0gbnApOwogCi0Jbml1ZGJnKFBST0JFLCAibml1X3B1dF9wYXJlbnQ6IHBvcnRbJXVdXG4iLCBwb3J0KTsKKwluZXRpZl9wcmludGsobnAsIHByb2JlLCBLRVJOX0RFQlVHLCBucC0+ZGV2LAorCQkgICAgICIlcygpIHBvcnRbJXVdXG4iLCBfX2Z1bmNfXywgcG9ydCk7CiAKIAlzcHJpbnRmKHBvcnRfbmFtZSwgInBvcnQlZCIsIHBvcnQpOwogCkBAIC05NzcyLDcgKzk2ODIsNyBAQAogCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKHN0cnVjdCBuaXUpLCBOSVVfTlVNX1RYQ0hBTik7CiAJaWYgKCFkZXYpIHsKLQkJZGV2X2VycihnZW5fZGV2LCBQRlggIkV0aGVyZGV2IGFsbG9jIGZhaWxlZCwgYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2VycihnZW5fZGV2LCAiRXRoZXJkZXYgYWxsb2MgZmFpbGVkLCBhYm9ydGluZ1xuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIApAQCAtOTg1OCwzMCArOTc2OCwyNiBAQAogCiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKGVycikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsIFBGWCAiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlLCAiCi0JCQkiYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlLCBhYm9ydGluZ1xuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCiAJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDApICYgSU9SRVNPVVJDRV9NRU0pIHx8CiAJICAgICEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDIpICYgSU9SRVNPVVJDRV9NRU0pKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgUEZYICJDYW5ub3QgZmluZCBwcm9wZXIgUENJIGRldmljZSAiCi0JCQkiYmFzZSBhZGRyZXNzZXMsIGFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBmaW5kIHByb3BlciBQQ0kgZGV2aWNlIGJhc2UgYWRkcmVzc2VzLCBhYm9ydGluZ1xuIik7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9kaXNhYmxlX3BkZXY7CiAJfQogCiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTU9EVUxFX05BTUUpOwogCWlmIChlcnIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCBQRlggIkNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlcywgIgotCQkJImFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlcywgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXRfZGlzYWJsZV9wZGV2OwogCX0KIAogCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9FWFApOwogCWlmIChwb3MgPD0gMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsIFBGWCAiQ2Fubm90IGZpbmQgUENJIEV4cHJlc3MgY2FwYWJpbGl0eSwgIgotCQkJImFib3J0aW5nLlxuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbm5vdCBmaW5kIFBDSSBFeHByZXNzIGNhcGFiaWxpdHksIGFib3J0aW5nXG4iKTsKIAkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOwogCX0KIApAQCAtOTkyMCwxNyArOTgyNiwxNCBAQAogCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSElHSERNQTsKIAkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIGRtYV9tYXNrKTsKIAkJaWYgKGVycikgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LCBQRlggIlVuYWJsZSB0byBvYnRhaW4gNDQgYml0ICIKLQkJCQkiRE1BIGZvciBjb25zaXN0ZW50IGFsbG9jYXRpb25zLCAiCi0JCQkJImFib3J0aW5nLlxuIik7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gb2J0YWluIDQ0IGJpdCBETUEgZm9yIGNvbnNpc3RlbnQgYWxsb2NhdGlvbnMsIGFib3J0aW5nXG4iKTsKIAkJCWdvdG8gZXJyX291dF9yZWxlYXNlX3BhcmVudDsKIAkJfQogCX0KIAlpZiAoZXJyIHx8IGRtYV9tYXNrID09IERNQV9CSVRfTUFTSygzMikpIHsKIAkJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKIAkJaWYgKGVycikgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LCBQRlggIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgIgotCQkJCSJhYm9ydGluZy5cbiIpOworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCBhYm9ydGluZ1xuIik7CiAJCQlnb3RvIGVycl9vdXRfcmVsZWFzZV9wYXJlbnQ7CiAJCX0KIAl9CkBAIC05OTM5LDggKzk4NDIsNyBAQAogCiAJbnAtPnJlZ3MgPSBwY2lfaW9yZW1hcF9iYXIocGRldiwgMCk7CiAJaWYgKCFucC0+cmVncykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsIFBGWCAiQ2Fubm90IG1hcCBkZXZpY2UgcmVnaXN0ZXJzLCAiCi0JCQkiYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IG1hcCBkZXZpY2UgcmVnaXN0ZXJzLCBhYm9ydGluZ1xuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dF9yZWxlYXNlX3BhcmVudDsKIAl9CkBAIC05OTU1LDE1ICs5ODU3LDEzIEBACiAJZXJyID0gbml1X2dldF9pbnZhcmlhbnRzKG5wKTsKIAlpZiAoZXJyKSB7CiAJCWlmIChlcnIgIT0gLUVOT0RFVikKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgUEZYICJQcm9ibGVtIGZldGNoaW5nIGludmFyaWFudHMgIgotCQkJCSJvZiBjaGlwLCBhYm9ydGluZy5cbiIpOworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiUHJvYmxlbSBmZXRjaGluZyBpbnZhcmlhbnRzIG9mIGNoaXAsIGFib3J0aW5nXG4iKTsKIAkJZ290byBlcnJfb3V0X2lvdW5tYXA7CiAJfQogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsIFBGWCAiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsICIKLQkJCSJhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgcmVnaXN0ZXIgbmV0IGRldmljZSwgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAl9CiAKQEAgLTEwMTU3LDcgKzEwMDU3LDcgQEAKIAogCXJlZyA9IG9mX2dldF9wcm9wZXJ0eShvcC0+bm9kZSwgInJlZyIsIE5VTEwpOwogCWlmICghcmVnKSB7Ci0JCWRldl9lcnIoJm9wLT5kZXYsIFBGWCAiJXM6IE5vICdyZWcnIHByb3BlcnR5LCBhYm9ydGluZy5cbiIsCisJCWRldl9lcnIoJm9wLT5kZXYsICIlczogTm8gJ3JlZycgcHJvcGVydHksIGFib3J0aW5nXG4iLAogCQkJb3AtPm5vZGUtPmZ1bGxfbmFtZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTEwMTg2LDggKzEwMDg2LDcgQEAKIAkJCSAgICAgIHJlc291cmNlX3NpemUoJm9wLT5yZXNvdXJjZVsxXSksCiAJCQkgICAgICAibml1IHJlZ3MiKTsKIAlpZiAoIW5wLT5yZWdzKSB7Ci0JCWRldl9lcnIoJm9wLT5kZXYsIFBGWCAiQ2Fubm90IG1hcCBkZXZpY2UgcmVnaXN0ZXJzLCAiCi0JCQkiYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2Vycigmb3AtPmRldiwgIkNhbm5vdCBtYXAgZGV2aWNlIHJlZ2lzdGVycywgYWJvcnRpbmdcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXRfcmVsZWFzZV9wYXJlbnQ7CiAJfQpAQCAtMTAxOTYsOCArMTAwOTUsNyBAQAogCQkJCSAgICByZXNvdXJjZV9zaXplKCZvcC0+cmVzb3VyY2VbMl0pLAogCQkJCSAgICAibml1IHZyZWdzLTEiKTsKIAlpZiAoIW5wLT52aXJfcmVnc18xKSB7Ci0JCWRldl9lcnIoJm9wLT5kZXYsIFBGWCAiQ2Fubm90IG1hcCBkZXZpY2UgdmlyIHJlZ2lzdGVycyAxLCAiCi0JCQkiYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2Vycigmb3AtPmRldiwgIkNhbm5vdCBtYXAgZGV2aWNlIHZpciByZWdpc3RlcnMgMSwgYWJvcnRpbmdcbiIpOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAl9CkBAIC0xMDIwNiw4ICsxMDEwNCw3IEBACiAJCQkJICAgIHJlc291cmNlX3NpemUoJm9wLT5yZXNvdXJjZVszXSksCiAJCQkJICAgICJuaXUgdnJlZ3MtMiIpOwogCWlmICghbnAtPnZpcl9yZWdzXzIpIHsKLQkJZGV2X2Vycigmb3AtPmRldiwgUEZYICJDYW5ub3QgbWFwIGRldmljZSB2aXIgcmVnaXN0ZXJzIDIsICIKLQkJCSJhYm9ydGluZy5cbiIpOworCQlkZXZfZXJyKCZvcC0+ZGV2LCAiQ2Fubm90IG1hcCBkZXZpY2UgdmlyIHJlZ2lzdGVycyAyLCBhYm9ydGluZ1xuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCX0KQEAgLTEwMjE3LDE1ICsxMDExNCwxMyBAQAogCWVyciA9IG5pdV9nZXRfaW52YXJpYW50cyhucCk7CiAJaWYgKGVycikgewogCQlpZiAoZXJyICE9IC1FTk9ERVYpCi0JCQlkZXZfZXJyKCZvcC0+ZGV2LCBQRlggIlByb2JsZW0gZmV0Y2hpbmcgaW52YXJpYW50cyAiCi0JCQkJIm9mIGNoaXAsIGFib3J0aW5nLlxuIik7CisJCQlkZXZfZXJyKCZvcC0+ZGV2LCAiUHJvYmxlbSBmZXRjaGluZyBpbnZhcmlhbnRzIG9mIGNoaXAsIGFib3J0aW5nXG4iKTsKIAkJZ290byBlcnJfb3V0X2lvdW5tYXA7CiAJfQogCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewotCQlkZXZfZXJyKCZvcC0+ZGV2LCBQRlggIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCAiCi0JCQkiYWJvcnRpbmcuXG4iKTsKKwkJZGV2X2Vycigmb3AtPmRldiwgIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbnM4MzgyMC5jIGIvZHJpdmVycy9uZXQvbnM4MzgyMC5jCmluZGV4IDFmNjMyN2QuLjhkZDUwOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L25zODM4MjAuYworKysgYi9kcml2ZXJzL25ldC9uczgzODIwLmMKQEAgLTE3MTksNyArMTcxOSw3IEBACiAJZWxzZQogCQlhbmRfbWFzayAmPSB+KFJGQ1JfQUFVIHwgUkZDUl9BQU0pOwogCi0JaWYgKG5kZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8IG5kZXYtPm1jX2NvdW50KQorCWlmIChuZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fCBuZXRkZXZfbWNfY291bnQobmRldikpCiAJCW9yX21hc2sgfD0gUkZDUl9BQU07CiAJZWxzZQogCQlhbmRfbWFzayAmPSB+UkZDUl9BQU07CkBAIC0yMjkyLDcgKzIyOTIsNyBAQAogCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG5zODM4MjBfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG5zODM4MjBfcGNpX3RibCkgPSB7CiAJeyAweDEwMGIsIDB4MDAyMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgLmRyaXZlcl9kYXRhID0gMCwgfSwKIAl7IDAsIH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvb2N0ZW9uL29jdGVvbl9tZ210LmMgYi9kcml2ZXJzL25ldC9vY3Rlb24vb2N0ZW9uX21nbXQuYwppbmRleCAwNTA1MzhiLi5iZTM2OGU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9vY3Rlb24vb2N0ZW9uX21nbXQuYworKysgYi9kcml2ZXJzL25ldC9vY3Rlb24vb2N0ZW9uX21nbXQuYwpAQCAtNDY3LDcgKzQ2Nyw2IEBACiB7CiAJc3RydWN0IG9jdGVvbl9tZ210ICpwID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlpbnQgcG9ydCA9IHAtPnBvcnQ7Ci0JaW50IGk7CiAJdW5pb24gY3ZteF9hZ2xfZ214X3J4eF9hZHJfY3RsIGFkcl9jdGw7CiAJdW5pb24gY3ZteF9hZ2xfZ214X3BydHhfY2ZnIGFnbF9nbXhfcHJ0eDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNDkzLDggKzQ5Miw4IEBACiAJfQogCiAJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUKSB7Ci0JCWlmIChjYW1fbW9kZSA9PSAwIHx8IChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQotCQkgICAgfHwgbmV0ZGV2LT5tY19jb3VudCAgPiBhdmFpbGFibGVfY2FtX2VudHJpZXMpCisJCWlmIChjYW1fbW9kZSA9PSAwIHx8IChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAorCQkgICAgbmV0ZGV2X21jX2NvdW50KG5ldGRldikgPiBhdmFpbGFibGVfY2FtX2VudHJpZXMpCiAJCQltdWx0aWNhc3RfbW9kZSA9IDI7IC8qIDEgLSBBY2NlcHQgYWxsIG11bHRpY2FzdC4gICovCiAJCWVsc2UKIAkJCW11bHRpY2FzdF9tb2RlID0gMDsgLyogMCAtIFVzZSBDQU0uICAqLwpAQCAtNTExLDEyICs1MTAsOCBAQAogCQl9CiAJfQogCWlmIChtdWx0aWNhc3RfbW9kZSA9PSAwKSB7Ci0JCWkgPSBuZXRkZXYtPm1jX2NvdW50OwotCQlsaXN0ID0gbmV0ZGV2LT5tY19saXN0OwotCQl3aGlsZSAoaS0tKSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGxpc3QsIG5ldGRldikKIAkJCW9jdGVvbl9tZ210X2NhbV9zdGF0ZV9hZGQoJmNhbV9zdGF0ZSwgbGlzdC0+ZGFfYWRkcik7Ci0JCQlsaXN0ID0gbGlzdC0+bmV4dDsKLQkJfQogCX0KIAogCkBAIC0xMTE5LDExICsxMTE0LDggQEAKIAogCWlmIChwLT5wb3J0ID49IG9jdGVvbl9ib290aW5mby0+bWFjX2FkZHJfY291bnQpCiAJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCSJFcnJvciAlczogVXNpbmcgTUFDIG91dHNpZGUgb2YgdGhlIGFzc2lnbmVkIHJhbmdlOiAiCi0JCQkiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsIG5ldGRldi0+bmFtZSwKLQkJCW5ldGRldi0+ZGV2X2FkZHJbMF0sIG5ldGRldi0+ZGV2X2FkZHJbMV0sCi0JCQluZXRkZXYtPmRldl9hZGRyWzJdLCBuZXRkZXYtPmRldl9hZGRyWzNdLAotCQkJbmV0ZGV2LT5kZXZfYWRkcls0XSwgbmV0ZGV2LT5kZXZfYWRkcls1XSk7CisJCQkiRXJyb3IgJXM6IFVzaW5nIE1BQyBvdXRzaWRlIG9mIHRoZSBhc3NpZ25lZCByYW5nZTogJXBNXG4iLAorCQkJbmV0ZGV2LT5uYW1lLCBuZXRkZXYtPmRldl9hZGRyKTsKIAogCWlmIChyZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KSkKIAkJZ290byBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wYXNlbWlfbWFjLmMgYi9kcml2ZXJzL25ldC9wYXNlbWlfbWFjLmMKaW5kZXggMTY3M2ViMC4uZDQ0ZDRhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGFzZW1pX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3Bhc2VtaV9tYWMuYwpAQCAtMTg3NSw3ICsxODc1LDcgQEAKIAlmcmVlX25ldGRldihuZXRkZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGFzZW1pX21hY19wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGFzZW1pX21hY19wY2lfdGJsKSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9QQVNFTUksIDB4YTAwNSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9QQVNFTUksIDB4YTAwNikgfSwKIAl7IH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY2ktc2tlbGV0b24uYyBiL2RyaXZlcnMvbmV0L3BjaS1za2VsZXRvbi5jCmluZGV4IDQ4MGFmNDAuLjM2Nzg1ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjaS1za2VsZXRvbi5jCisrKyBiL2RyaXZlcnMvbmV0L3BjaS1za2VsZXRvbi5jCkBAIC0xMSw3ICsxMSw3IEBACiAKIAktLS0tLTxzbmlwPi0tLS0tCiAKLSAgICAgICAgCVdyaXR0ZW4gMTk5Ny0yMDAwIGJ5IERvbmFsZCBCZWNrZXIuCisJCVdyaXR0ZW4gMTk5Ny0yMDAwIGJ5IERvbmFsZCBCZWNrZXIuCiAJCVRoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUKIAkJdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCBpbmNvcnBvcmF0ZWQKIAkJaGVyZWluIGJ5IHJlZmVyZW5jZS4gIERyaXZlcnMgYmFzZWQgb24gb3IgZGVyaXZlZCBmcm9tIHRoaXMKQEAgLTg1LDYgKzg1LDggQEAKIAogKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC05NiwxNiArOTgsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjZGVmaW5lIE5FVERSVl9WRVJTSU9OCQkiMS4wLjEiCiAjZGVmaW5lIE1PRE5BTUUJCQkibmV0ZHJ2IgogI2RlZmluZSBORVREUlZfRFJJVkVSX0xPQURfTVNHCSJNeVZlbmRvciBGYXN0IEV0aGVybmV0IGRyaXZlciAiIE5FVERSVl9WRVJTSU9OICIgbG9hZGVkIgotI2RlZmluZSBQRlgJCQlNT0ROQU1FICI6ICIKIAogc3RhdGljIGNoYXIgdmVyc2lvbltdIF9fZGV2aW5pdGRhdGEgPQotS0VSTl9JTkZPIE5FVERSVl9EUklWRVJfTE9BRF9NU0cgIlxuIgotIiAgU3VwcG9ydCBhdmFpbGFibGUgZnJvbSBodHRwOi8vZm9vLmNvbS9iYXIvYmF6Lmh0bWxcbiI7CisJS0VSTl9JTkZPIE5FVERSVl9EUklWRVJfTE9BRF9NU0cgIlxuIgorCSIgIFN1cHBvcnQgYXZhaWxhYmxlIGZyb20gaHR0cDovL2Zvby5jb20vYmFyL2Jhei5odG1sXG4iOwogCiAvKiBkZWZpbmUgdG8gMSB0byBlbmFibGUgUElPIGluc3RlYWQgb2YgTU1JTyAqLwogI3VuZGVmIFVTRV9JT19PUFMKQEAgLTExOSwxOSArMTIwLDI0IEBACiAKICNpZmRlZiBORVREUlZfREVCVUcKIC8qIG5vdGU6IHByaW50cyBmdW5jdGlvbiBuYW1lIGZvciB5b3UgKi8KLSMgIGRlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZtdCwgX19mdW5jX18gLCAjIyBhcmdzKQorI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikJCQkJCVwKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10LCBfX2Z1bmNfXyAsICMjIGFyZ3MpCiAjZWxzZQotIyAgZGVmaW5lIERQUklOVEsoZm10LCBhcmdzLi4uKQorI2RlZmluZSBEUFJJTlRLKGZtdCwgYXJncy4uLikJCQkJXAorZG8gewkJCQkJCQlcCisJaWYgKDApCQkJCQkJXAorCQlwcmludGsoS0VSTl9ERUJVRyBmbXQsICMjYXJncyk7CQlcCit9IHdoaWxlICgwKQogI2VuZGlmCiAKICNpZmRlZiBORVREUlZfTkRFQlVHCi0jICBkZWZpbmUgYXNzZXJ0KGV4cHIpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBhc3NlcnQoZXhwcikgZG8ge30gd2hpbGUgKDApCiAjZWxzZQotIyAgZGVmaW5lIGFzc2VydChleHByKSBcCi0gICAgICAgIGlmKCEoZXhwcikpIHsJCQkJCVwKLSAgICAgICAgcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwJXAotICAgICAgICAjZXhwcixfX0ZJTEVfXyxfX2Z1bmNfXyxfX0xJTkVfXyk7CQlcCi0gICAgICAgIH0KKyNkZWZpbmUgYXNzZXJ0KGV4cHIpCQkJCQkJXAorCWlmICghKGV4cHIpKSB7CQkJCQkJXAorCQlwcmludGsoIkFzc2VydGlvbiBmYWlsZWQhICVzLCVzLCVzLGxpbmU9JWRcbiIsCVwKKwkJICAgICAgICNleHByLCBfX0ZJTEVfXywgX19mdW5jX18sIF9fTElORV9fKTsJXAorCX0KICNlbmRpZgogCiAKQEAgLTE0OCwxMCArMTU0LDEwIEBACiAKIC8qIFNpemUgb2YgdGhlIGluLW1lbW9yeSByZWNlaXZlIHJpbmcuICovCiAjZGVmaW5lIFJYX0JVRl9MRU5fSURYCTIJLyogMD09OEssIDE9PTE2SywgMj09MzJLLCAzPT02NEsgKi8KLSNkZWZpbmUgUlhfQlVGX0xFTiAoODE5MiA8PCBSWF9CVUZfTEVOX0lEWCkKLSNkZWZpbmUgUlhfQlVGX1BBRCAxNgorI2RlZmluZSBSWF9CVUZfTEVOCSg4MTkyIDw8IFJYX0JVRl9MRU5fSURYKQorI2RlZmluZSBSWF9CVUZfUEFECTE2CiAjZGVmaW5lIFJYX0JVRl9XUkFQX1BBRCAyMDQ4IC8qIHNwYXJlIHBhZGRpbmcgdG8gaGFuZGxlIGxhY2sgb2YgcGFja2V0IHdyYXAgKi8KLSNkZWZpbmUgUlhfQlVGX1RPVF9MRU4gKFJYX0JVRl9MRU4gKyBSWF9CVUZfUEFEICsgUlhfQlVGX1dSQVBfUEFEKQorI2RlZmluZSBSWF9CVUZfVE9UX0xFTgkoUlhfQlVGX0xFTiArIFJYX0JVRl9QQUQgKyBSWF9CVUZfV1JBUF9QQUQpCiAKIC8qIE51bWJlciBvZiBUeCBkZXNjcmlwdG9yIHJlZ2lzdGVycy4gKi8KICNkZWZpbmUgTlVNX1RYX0RFU0MJNApAQCAtMTY1LDkgKzE3MSwxMSBAQAogCiAvKiBQQ0kgVHVuaW5nIFBhcmFtZXRlcnMKICAgIFRocmVzaG9sZCBpcyBieXRlcyB0cmFuc2ZlcnJlZCB0byBjaGlwIGJlZm9yZSB0cmFuc21pc3Npb24gc3RhcnRzLiAqLwotI2RlZmluZSBUWF9GSUZPX1RIUkVTSCAyNTYJLyogSW4gYnl0ZXMsIHJvdW5kZWQgZG93biB0byAzMiBieXRlIHVuaXRzLiAqLworI2RlZmluZSBUWF9GSUZPX1RIUkVTSAkyNTYJLyogSW4gYnl0ZXMsIHJvdW5kZWQgZG93biB0byAzMiBieXRlIHVuaXRzLiAqLwogCi0vKiBUaGUgZm9sbG93aW5nIHNldHRpbmdzIGFyZSBsb2dfMihieXRlcyktNDogIDAgPT0gMTYgYnl0ZXMgLi4gNj09MTAyNCwgNz09ZW5kIG9mIHBhY2tldC4gKi8KKy8qIFRoZSBmb2xsb3dpbmcgc2V0dGluZ3MgYXJlIGxvZ18yKGJ5dGVzKS00OgorICAgMD09MTYgYnl0ZXMgMT09MzIgMj09NjQgMz09MTI4IDQ9PTI1NiA1PT01MTIgNj09MTAyNCA3PT1lbmQgb2YgcGFja2V0LgorKi8KICNkZWZpbmUgUlhfRklGT19USFJFU0gJNgkvKiBSeCBidWZmZXIgbGV2ZWwgYmVmb3JlIGZpcnN0IFBDSSB4ZmVyLiAgKi8KICNkZWZpbmUgUlhfRE1BX0JVUlNUCTYJLyogTWF4aW11bSBQQ0kgYnVyc3QsICc2JyBpcyAxMDI0ICovCiAjZGVmaW5lIFRYX0RNQV9CVVJTVAk2CS8qIE1heGltdW0gUENJIGJ1cnN0LCAnNicgaXMgMTAyNCAqLwpAQCAtMTc1LDggKzE4Myw3IEBACiAKIC8qIE9wZXJhdGlvbmFsIHBhcmFtZXRlcnMgdGhhdCB1c3VhbGx5IGFyZSBub3QgY2hhbmdlZC4gKi8KIC8qIFRpbWUgaW4gamlmZmllcyBiZWZvcmUgY29uY2x1ZGluZyB0aGUgdHJhbnNtaXR0ZXIgaXMgaHVuZy4gKi8KLSNkZWZpbmUgVFhfVElNRU9VVCAgKDYqSFopCi0KKyNkZWZpbmUgVFhfVElNRU9VVAkoNiAqIEhaKQogCiBlbnVtIHsKIAlIQVNfQ0hJUF9YQ1ZSID0gMHgwMjAwMDAsCkBAIC0xODYsNyArMTkzLDcgQEAKICNkZWZpbmUgTkVURFJWX01JTl9JT19TSVpFIDB4ODAKICNkZWZpbmUgUlRMODEzOUJfSU9fU0laRSAyNTYKIAotI2RlZmluZSBORVREUlZfQ0FQUwlIQVNfQ0hJUF9YQ1ZSfEhBU19MTktfQ0hORworI2RlZmluZSBORVREUlZfQ0FQUwkoSEFTX0NISVBfWENWUiB8IEhBU19MTktfQ0hORykKIAogdHlwZWRlZiBlbnVtIHsKIAlSVEw4MTM5ID0gMCwKQEAgLTIxMSw3ICsyMTgsNyBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbmV0ZHJ2X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShuZXRkcnZfcGNpX3RibCkgPSB7CiAJezB4MTBlYywgMHg4MTM5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBSVEw4MTM5IH0sCiAJezB4MTBlYywgMHg4MTM4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBORVREUlZfQ0IgfSwKIAl7MHgxMTEzLCAweDEyMTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFNNQzEyMTFUWCB9LApAQCAtMjIwLDcgKzIyNyw3IEBACiAJezB4NDAzMywgMHgxMzYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBBRERUUk9OODEzOSB9LAogCXswLH0KIH07Ci1NT0RVTEVfREVWSUNFX1RBQkxFIChwY2ksIG5ldGRydl9wY2lfdGJsKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBuZXRkcnZfcGNpX3RibCk7CiAKIAogLyogVGhlIHJlc3Qgb2YgdGhlc2UgdmFsdWVzIHNob3VsZCBuZXZlciBjaGFuZ2UuICovCkBAIC0yNzAsNyArMjc3LDcgQEAKIGVudW0gQ2xlYXJCaXRNYXNrcyB7CiAJTXVsdGlJbnRyQ2xlYXIgPSAweEYwMDAsCiAJQ2hpcENtZENsZWFyID0gMHhFMiwKLQlDb25maWcxQ2xlYXIgPSAoMTw8Nyl8KDE8PDYpfCgxPDwzKXwoMTw8Mil8KDE8PDEpLAorCUNvbmZpZzFDbGVhciA9ICgxIDw8IDcpIHwgKDEgPDwgNikgfCAoMSA8PCAzKSB8ICgxIDw8IDIpIHwgKDEgPDwgMSksCiB9OwogCiBlbnVtIENoaXBDbWRCaXRzIHsKQEAgLTMyOSw3ICszMzYsNyBAQAogCVR4TG9vcEJhY2sgPSAoMSA8PCAxOCkgfCAoMSA8PCAxNyksIC8qIGVuYWJsZSBsb29wYmFjayB0ZXN0IG1vZGUgKi8KIAlUeENSQyA9ICgxIDw8IDE2KSwJLyogRElTQUJMRSBhcHBlbmRpbmcgQ1JDIHRvIGVuZCBvZiBUeCBwYWNrZXRzICovCiAJVHhDbGVhckFidCA9ICgxIDw8IDApLAkvKiBDbGVhciBhYm9ydCAoV08pICovCi0JVHhETUFTaGlmdCA9IDgsCQkvKiBETUEgYnVyc3QgdmFsdWUgKDAtNykgaXMgc2hpZnQgdGhpcyBtYW55IGJpdHMgKi8KKwlUeERNQVNoaWZ0ID0gOCwJCS8qIERNQSBidXJzdCB2YWx1ZSgwLTcpIGlzIHNoaWZ0IHRoaXMgbWFueSBiaXRzICovCiAKIAlUeFZlcnNpb25NYXNrID0gMHg3QzgwMDAwMCwgLyogbWFzayBvdXQgdmVyc2lvbiBiaXRzIDMwLTI2LCAyMyAqLwogfTsKQEAgLTQ4MSw0MSArNDg4LDQ0IEBACiAJY2hpcF90IGNoaXBzZXQ7CiB9OwogCi1NT0RVTEVfQVVUSE9SICgiSmVmZiBHYXJ6aWsgPGpnYXJ6aWtAcG9ib3guY29tPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OICgiU2tlbGV0b24gZm9yIGEgUENJIEZhc3QgRXRoZXJuZXQgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJKZWZmIEdhcnppayA8amdhcnppa0Bwb2JveC5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNrZWxldG9uIGZvciBhIFBDSSBGYXN0IEV0aGVybmV0IGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogbW9kdWxlX3BhcmFtKG11bHRpY2FzdF9maWx0ZXJfbGltaXQsIGludCwgMCk7CiBtb2R1bGVfcGFyYW0obWF4X2ludGVycnVwdF93b3JrLCBpbnQsIDApOwogbW9kdWxlX3BhcmFtX2FycmF5KG1lZGlhLCBpbnQsIE5VTEwsIDApOwotTU9EVUxFX1BBUk1fREVTQyAobXVsdGljYXN0X2ZpbHRlcl9saW1pdCwgInBjaS1za2VsZXRvbiBtYXhpbXVtIG51bWJlciBvZiBmaWx0ZXJlZCBtdWx0aWNhc3QgYWRkcmVzc2VzIik7Ci1NT0RVTEVfUEFSTV9ERVNDIChtYXhfaW50ZXJydXB0X3dvcmssICJwY2ktc2tlbGV0b24gbWF4aW11bSBldmVudHMgaGFuZGxlZCBwZXIgaW50ZXJydXB0Iik7Ci1NT0RVTEVfUEFSTV9ERVNDIChtZWRpYSwgInBjaS1za2VsZXRvbjogQml0cyAwLTM6IG1lZGlhIHR5cGUsIGJpdCAxNzogZnVsbCBkdXBsZXgiKTsKK01PRFVMRV9QQVJNX0RFU0MobXVsdGljYXN0X2ZpbHRlcl9saW1pdCwKKwkJIE1PRE5BTUUgIiBtYXhpbXVtIG51bWJlciBvZiBmaWx0ZXJlZCBtdWx0aWNhc3QgYWRkcmVzc2VzIik7CitNT0RVTEVfUEFSTV9ERVNDKG1heF9pbnRlcnJ1cHRfd29yaywKKwkJIE1PRE5BTUUgIiBtYXhpbXVtIGV2ZW50cyBoYW5kbGVkIHBlciBpbnRlcnJ1cHQiKTsKK01PRFVMRV9QQVJNX0RFU0MobWVkaWEsCisJCSBNT0ROQU1FICIgQml0cyAwLTM6IG1lZGlhIHR5cGUsIGJpdCAxNzogZnVsbCBkdXBsZXgiKTsKIAotc3RhdGljIGludCByZWFkX2VlcHJvbSAodm9pZCAqaW9hZGRyLCBpbnQgbG9jYXRpb24sIGludCBhZGRyX2xlbik7Ci1zdGF0aWMgaW50IG5ldGRydl9vcGVuIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgbWRpb19yZWFkIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pOwotc3RhdGljIHZvaWQgbWRpb193cml0ZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLAotCQkJaW50IHZhbCk7Ci1zdGF0aWMgdm9pZCBuZXRkcnZfdGltZXIgKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci1zdGF0aWMgdm9pZCBuZXRkcnZfdHhfdGltZW91dCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCBuZXRkcnZfaW5pdF9yaW5nIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgbmV0ZHJ2X3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgaXJxcmV0dXJuX3QgbmV0ZHJ2X2ludGVycnVwdCAoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKTsKLXN0YXRpYyBpbnQgbmV0ZHJ2X2Nsb3NlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgbmV0ZHJ2X2lvY3RsIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKLXN0YXRpYyB2b2lkIG5ldGRydl9zZXRfcnhfbW9kZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1zdGF0aWMgdm9pZCBuZXRkcnZfaHdfc3RhcnQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCByZWFkX2VlcHJvbSh2b2lkICppb2FkZHIsIGludCBsb2NhdGlvbiwgaW50IGFkZHJfbGVuKTsKK3N0YXRpYyBpbnQgbmV0ZHJ2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IG1kaW9fcmVhZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24pOworc3RhdGljIHZvaWQgbWRpb193cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sCisJCSAgICAgICBpbnQgdmFsKTsKK3N0YXRpYyB2b2lkIG5ldGRydl90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpOworc3RhdGljIHZvaWQgbmV0ZHJ2X3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgdm9pZCBuZXRkcnZfaW5pdF9yaW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBuZXRkcnZfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBuZXRkcnZfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSk7CitzdGF0aWMgaW50IG5ldGRydl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3N0YXRpYyBpbnQgbmV0ZHJ2X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOworc3RhdGljIHZvaWQgbmV0ZHJ2X3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworc3RhdGljIHZvaWQgbmV0ZHJ2X2h3X3N0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiAKICNpZmRlZiBVU0VfSU9fT1BTCiAKLSNkZWZpbmUgTkVURFJWX1I4KHJlZykJCWluYiAoKCh1bnNpZ25lZCBsb25nKWlvYWRkcikgKyAocmVnKSkKLSNkZWZpbmUgTkVURFJWX1IxNihyZWcpCQlpbncgKCgodW5zaWduZWQgbG9uZylpb2FkZHIpICsgKHJlZykpCi0jZGVmaW5lIE5FVERSVl9SMzIocmVnKQkJKCh1bnNpZ25lZCBsb25nKSBpbmwgKCgodW5zaWduZWQgbG9uZylpb2FkZHIpICsgKHJlZykpKQotI2RlZmluZSBORVREUlZfVzgocmVnLCB2YWw4KQlvdXRiICgodmFsOCksICgodW5zaWduZWQgbG9uZylpb2FkZHIpICsgKHJlZykpCi0jZGVmaW5lIE5FVERSVl9XMTYocmVnLCB2YWwxNikJb3V0dyAoKHZhbDE2KSwgKCh1bnNpZ25lZCBsb25nKWlvYWRkcikgKyAocmVnKSkKLSNkZWZpbmUgTkVURFJWX1czMihyZWcsIHZhbDMyKQlvdXRsICgodmFsMzIpLCAoKHVuc2lnbmVkIGxvbmcpaW9hZGRyKSArIChyZWcpKQorI2RlZmluZSBORVREUlZfUjgocmVnKQkJaW5iKCgodW5zaWduZWQgbG9uZylpb2FkZHIpICsgKHJlZykpCisjZGVmaW5lIE5FVERSVl9SMTYocmVnKQkJaW53KCgodW5zaWduZWQgbG9uZylpb2FkZHIpICsgKHJlZykpCisjZGVmaW5lIE5FVERSVl9SMzIocmVnKQkJKCh1bnNpZ25lZCBsb25nKWlubCgoKHVuc2lnbmVkIGxvbmcpaW9hZGRyKSArIChyZWcpKSkKKyNkZWZpbmUgTkVURFJWX1c4KHJlZywgdmFsOCkJb3V0YigodmFsOCksICgodW5zaWduZWQgbG9uZylpb2FkZHIpICsgKHJlZykpCisjZGVmaW5lIE5FVERSVl9XMTYocmVnLCB2YWwxNikJb3V0dygodmFsMTYpLCAoKHVuc2lnbmVkIGxvbmcpaW9hZGRyKSArIChyZWcpKQorI2RlZmluZSBORVREUlZfVzMyKHJlZywgdmFsMzIpCW91dGwoKHZhbDMyKSwgKCh1bnNpZ25lZCBsb25nKWlvYWRkcikgKyAocmVnKSkKICNkZWZpbmUgTkVURFJWX1c4X0YJCU5FVERSVl9XOAogI2RlZmluZSBORVREUlZfVzE2X0YJCU5FVERSVl9XMTYKICNkZWZpbmUgTkVURFJWX1czMl9GCQlORVREUlZfVzMyCkBAIC01MjgsMjUgKzUzOCwzNyBAQAogI2RlZmluZSByZWFkYihhZGRyKSBpbmIoKHVuc2lnbmVkIGxvbmcpKGFkZHIpKQogI2RlZmluZSByZWFkdyhhZGRyKSBpbncoKHVuc2lnbmVkIGxvbmcpKGFkZHIpKQogI2RlZmluZSByZWFkbChhZGRyKSBpbmwoKHVuc2lnbmVkIGxvbmcpKGFkZHIpKQotI2RlZmluZSB3cml0ZWIodmFsLGFkZHIpIG91dGIoKHZhbCksKHVuc2lnbmVkIGxvbmcpKGFkZHIpKQotI2RlZmluZSB3cml0ZXcodmFsLGFkZHIpIG91dHcoKHZhbCksKHVuc2lnbmVkIGxvbmcpKGFkZHIpKQotI2RlZmluZSB3cml0ZWwodmFsLGFkZHIpIG91dGwoKHZhbCksKHVuc2lnbmVkIGxvbmcpKGFkZHIpKQorI2RlZmluZSB3cml0ZWIodmFsLCBhZGRyKSBvdXRiKCh2YWwpLCAodW5zaWduZWQgbG9uZykoYWRkcikpCisjZGVmaW5lIHdyaXRldyh2YWwsIGFkZHIpIG91dHcoKHZhbCksICh1bnNpZ25lZCBsb25nKShhZGRyKSkKKyNkZWZpbmUgd3JpdGVsKHZhbCwgYWRkcikgb3V0bCgodmFsKSwgKHVuc2lnbmVkIGxvbmcpKGFkZHIpKQogCiAjZWxzZQogCiAvKiB3cml0ZSBNTUlPIHJlZ2lzdGVyLCB3aXRoIGZsdXNoICovCiAvKiBGbHVzaCBhdm9pZHMgcnRsODEzOSBidWcgdy8gcG9zdGVkIE1NSU8gd3JpdGVzICovCi0jZGVmaW5lIE5FVERSVl9XOF9GKHJlZywgdmFsOCkJZG8geyB3cml0ZWIgKCh2YWw4KSwgaW9hZGRyICsgKHJlZykpOyByZWFkYiAoaW9hZGRyICsgKHJlZykpOyB9IHdoaWxlICgwKQotI2RlZmluZSBORVREUlZfVzE2X0YocmVnLCB2YWwxNikJZG8geyB3cml0ZXcgKCh2YWwxNiksIGlvYWRkciArIChyZWcpKTsgcmVhZHcgKGlvYWRkciArIChyZWcpKTsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgTkVURFJWX1czMl9GKHJlZywgdmFsMzIpCWRvIHsgd3JpdGVsICgodmFsMzIpLCBpb2FkZHIgKyAocmVnKSk7IHJlYWRsIChpb2FkZHIgKyAocmVnKSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIE5FVERSVl9XOF9GKHJlZywgdmFsOCkJCQlcCitkbyB7CQkJCQkJXAorCXdyaXRlYigodmFsOCksIGlvYWRkciArIChyZWcpKTsJCVwKKwlyZWFkYihpb2FkZHIgKyAocmVnKSk7CQkJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgTkVURFJWX1cxNl9GKHJlZywgdmFsMTYpCQlcCitkbyB7CQkJCQkJXAorCXdyaXRldygodmFsMTYpLCBpb2FkZHIgKyAocmVnKSk7CVwKKwlyZWFkdyhpb2FkZHIgKyAocmVnKSk7CQkJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUgTkVURFJWX1czMl9GKHJlZywgdmFsMzIpCQlcCitkbyB7CQkJCQkJXAorCXdyaXRlbCgodmFsMzIpLCBpb2FkZHIgKyAocmVnKSk7CVwKKwlyZWFkbChpb2FkZHIgKyAocmVnKSk7CQkJXAorfSB3aGlsZSAoMCkKIAogCiAjaWZkZWYgTU1JT19GTFVTSF9BVURJVF9DT01QTEVURQogCiAvKiB3cml0ZSBNTUlPIHJlZ2lzdGVyICovCi0jZGVmaW5lIE5FVERSVl9XOChyZWcsIHZhbDgpCXdyaXRlYiAoKHZhbDgpLCBpb2FkZHIgKyAocmVnKSkKLSNkZWZpbmUgTkVURFJWX1cxNihyZWcsIHZhbDE2KQl3cml0ZXcgKCh2YWwxNiksIGlvYWRkciArIChyZWcpKQotI2RlZmluZSBORVREUlZfVzMyKHJlZywgdmFsMzIpCXdyaXRlbCAoKHZhbDMyKSwgaW9hZGRyICsgKHJlZykpCisjZGVmaW5lIE5FVERSVl9XOChyZWcsIHZhbDgpCXdyaXRlYigodmFsOCksIGlvYWRkciArIChyZWcpKQorI2RlZmluZSBORVREUlZfVzE2KHJlZywgdmFsMTYpCXdyaXRldygodmFsMTYpLCBpb2FkZHIgKyAocmVnKSkKKyNkZWZpbmUgTkVURFJWX1czMihyZWcsIHZhbDMyKQl3cml0ZWwoKHZhbDMyKSwgaW9hZGRyICsgKHJlZykpCiAKICNlbHNlCiAKQEAgLTU1OCw5ICs1ODAsOSBAQAogI2VuZGlmIC8qIE1NSU9fRkxVU0hfQVVESVRfQ09NUExFVEUgKi8KIAogLyogcmVhZCBNTUlPIHJlZ2lzdGVyICovCi0jZGVmaW5lIE5FVERSVl9SOChyZWcpCQlyZWFkYiAoaW9hZGRyICsgKHJlZykpCi0jZGVmaW5lIE5FVERSVl9SMTYocmVnKQkJcmVhZHcgKGlvYWRkciArIChyZWcpKQotI2RlZmluZSBORVREUlZfUjMyKHJlZykJCSgodW5zaWduZWQgbG9uZykgcmVhZGwgKGlvYWRkciArIChyZWcpKSkKKyNkZWZpbmUgTkVURFJWX1I4KHJlZykJCXJlYWRiKGlvYWRkciArIChyZWcpKQorI2RlZmluZSBORVREUlZfUjE2KHJlZykJCXJlYWR3KGlvYWRkciArIChyZWcpKQorI2RlZmluZSBORVREUlZfUjMyKHJlZykJCSgodW5zaWduZWQgbG9uZykgcmVhZGwoaW9hZGRyICsgKHJlZykpKQogCiAjZW5kaWYgLyogVVNFX0lPX09QUyAqLwogCkBAIC01NzAsMTQgKzU5MiwxNCBAQAogCVR4RXJyIHwgVHhPSyB8IFJ4RXJyIHwgUnhPSzsKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBuZXRkcnZfcnhfY29uZmlnID0KLQkgIFJ4Q2ZnRWFybHlSeE5vbmUgfCBSeENmZ1JjdjMySyB8IFJ4Tm9XcmFwIHwKLQkgIChSWF9GSUZPX1RIUkVTSCA8PCBSeENmZ0ZJRk9TaGlmdCkgfAotCSAgKFJYX0RNQV9CVVJTVCA8PCBSeENmZ0RNQVNoaWZ0KTsKKwlSeENmZ0Vhcmx5UnhOb25lIHwgUnhDZmdSY3YzMksgfCBSeE5vV3JhcCB8CisJKFJYX0ZJRk9fVEhSRVNIIDw8IFJ4Q2ZnRklGT1NoaWZ0KSB8CisJKFJYX0RNQV9CVVJTVCA8PCBSeENmZ0RNQVNoaWZ0KTsKIAogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBuZXRkcnZfaW5pdF9ib2FyZCAoc3RydWN0IHBjaV9kZXYgKnBkZXYsCi0JCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqKmRldl9vdXQsCi0JCQkJCSB2b2lkICoqaW9hZGRyX291dCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IG5ldGRydl9pbml0X2JvYXJkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqKmRldl9vdXQsCisJCQkJICAgICAgIHZvaWQgKippb2FkZHJfb3V0KQogewogCXZvaWQgKmlvYWRkciA9IE5VTEw7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKQEAgLTU4Nyw0MyArNjA5LDQzIEBACiAJdW5zaWduZWQgbG9uZyBtbWlvX3N0YXJ0LCBtbWlvX2VuZCwgbW1pb19mbGFncywgbW1pb19sZW47CiAJdTMyIHRtcDsKIAotCURQUklOVEsgKCJFTlRFUlxuIik7CisJRFBSSU5USygiRU5URVJcbiIpOwogCi0JYXNzZXJ0IChwZGV2ICE9IE5VTEwpOwotCWFzc2VydCAoaW9hZGRyX291dCAhPSBOVUxMKTsKKwlhc3NlcnQocGRldiAhPSBOVUxMKTsKKwlhc3NlcnQoaW9hZGRyX291dCAhPSBOVUxMKTsKIAogCSppb2FkZHJfb3V0ID0gTlVMTDsKIAkqZGV2X291dCA9IE5VTEw7CiAKIAkvKiBkZXYgemVyb2VkIGluIGFsbG9jX2V0aGVyZGV2ICovCi0JZGV2ID0gYWxsb2NfZXRoZXJkZXYgKHNpemVvZiAoKnRwKSk7CisJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCp0cCkpOwogCWlmIChkZXYgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ1bmFibGUgdG8gYWxsb2MgbmV3IGV0aGVybmV0XG4iKTsKLQkJRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAtRU5PTUVNXG4iKTsKKwkJRFBSSU5USygiRVhJVCwgcmV0dXJuaW5nIC1FTk9NRU1cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAl0cCA9IG5ldGRldl9wcml2KGRldik7CiAKLQkvKiBlbmFibGUgZGV2aWNlIChpbmNsLiBQQ0kgUE0gd2FrZXVwKSwgYW5kIGJ1cy1tYXN0ZXJpbmcgKi8KLQlyYyA9IHBjaV9lbmFibGVfZGV2aWNlIChwZGV2KTsKKwkvKiBlbmFibGUgZGV2aWNlKGluY2wuIFBDSSBQTSB3YWtldXApLCBhbmQgYnVzLW1hc3RlcmluZyAqLworCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKHJjKQogCQlnb3RvIGVycl9vdXQ7CiAKLQlwaW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQgKHBkZXYsIDApOwotCXBpb19lbmQgPSBwY2lfcmVzb3VyY2VfZW5kIChwZGV2LCAwKTsKLQlwaW9fZmxhZ3MgPSBwY2lfcmVzb3VyY2VfZmxhZ3MgKHBkZXYsIDApOwotCXBpb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuIChwZGV2LCAwKTsKKwlwaW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJcGlvX2VuZCA9IHBjaV9yZXNvdXJjZV9lbmQocGRldiwgMCk7CisJcGlvX2ZsYWdzID0gcGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDApOworCXBpb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOwogCi0JbW1pb19zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydCAocGRldiwgMSk7Ci0JbW1pb19lbmQgPSBwY2lfcmVzb3VyY2VfZW5kIChwZGV2LCAxKTsKLQltbWlvX2ZsYWdzID0gcGNpX3Jlc291cmNlX2ZsYWdzIChwZGV2LCAxKTsKLQltbWlvX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4gKHBkZXYsIDEpOworCW1taW9fc3RhcnQgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMSk7CisJbW1pb19lbmQgPSBwY2lfcmVzb3VyY2VfZW5kKHBkZXYsIDEpOworCW1taW9fZmxhZ3MgPSBwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMSk7CisJbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpOwogCiAJLyogc2V0IHRoaXMgaW1tZWRpYXRlbHksIHdlIG5lZWQgdG8ga25vdyBiZWZvcmUKIAkgKiB3ZSB0YWxrIHRvIHRoZSBjaGlwIGRpcmVjdGx5ICovCi0JRFBSSU5USygiUElPIHJlZ2lvbiBzaXplID09IDB4JTAyWFxuIiwgcGlvX2xlbik7Ci0JRFBSSU5USygiTU1JTyByZWdpb24gc2l6ZSA9PSAweCUwMmxYXG4iLCBtbWlvX2xlbik7CisJRFBSSU5USygiUElPIHJlZ2lvbiBzaXplID09ICUjMDJYXG4iLCBwaW9fbGVuKTsKKwlEUFJJTlRLKCJNTUlPIHJlZ2lvbiBzaXplID09ICUjMDJsWFxuIiwgbW1pb19sZW4pOwogCiAJLyogbWFrZSBzdXJlIFBDSSBiYXNlIGFkZHIgMCBpcyBQSU8gKi8KIAlpZiAoIShwaW9fZmxhZ3MgJiBJT1JFU09VUkNFX0lPKSkgewpAQCAtNjQ3LDE3ICs2NjksMTcgQEAKIAkJZ290byBlcnJfb3V0OwogCX0KIAotCXJjID0gcGNpX3JlcXVlc3RfcmVnaW9ucyAocGRldiwgTU9ETkFNRSk7CisJcmMgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIE1PRE5BTUUpOwogCWlmIChyYykKIAkJZ290byBlcnJfb3V0OwogCi0JcGNpX3NldF9tYXN0ZXIgKHBkZXYpOworCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCiAjaWZkZWYgVVNFX0lPX09QUwotCWlvYWRkciA9ICh2b2lkICopIHBpb19zdGFydDsKKwlpb2FkZHIgPSAodm9pZCAqKXBpb19zdGFydDsKICNlbHNlCiAJLyogaW9yZW1hcCBNTUlPIHJlZ2lvbiAqLwotCWlvYWRkciA9IGlvcmVtYXAgKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKKwlpb2FkZHIgPSBpb3JlbWFwKG1taW9fc3RhcnQsIG1taW9fbGVuKTsKIAlpZiAoaW9hZGRyID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlbWFwIE1NSU8sIGFib3J0aW5nXG4iKTsKIAkJcmMgPSAtRUlPOwpAQCAtNjY2LDUyICs2ODgsNTAgQEAKICNlbmRpZiAvKiBVU0VfSU9fT1BTICovCiAKIAkvKiBTb2Z0IHJlc2V0IHRoZSBjaGlwLiAqLwotCU5FVERSVl9XOCAoQ2hpcENtZCwgKE5FVERSVl9SOCAoQ2hpcENtZCkgJiBDaGlwQ21kQ2xlYXIpIHwgQ21kUmVzZXQpOworCU5FVERSVl9XOChDaGlwQ21kLCAoTkVURFJWX1I4KENoaXBDbWQpICYgQ2hpcENtZENsZWFyKSB8IENtZFJlc2V0KTsKIAogCS8qIENoZWNrIHRoYXQgdGhlIGNoaXAgaGFzIGZpbmlzaGVkIHRoZSByZXNldC4gKi8KIAlmb3IgKGkgPSAxMDAwOyBpID4gMDsgaS0tKQotCQlpZiAoKE5FVERSVl9SOCAoQ2hpcENtZCkgJiBDbWRSZXNldCkgPT0gMCkKKwkJaWYgKChORVREUlZfUjgoQ2hpcENtZCkgJiBDbWRSZXNldCkgPT0gMCkKIAkJCWJyZWFrOwogCQllbHNlCi0JCQl1ZGVsYXkgKDEwKTsKKwkJCXVkZWxheSgxMCk7CiAKIAkvKiBCcmluZyB0aGUgY2hpcCBvdXQgb2YgbG93LXBvd2VyIG1vZGUuICovCiAJLyogPGluc2VydCBkZXZpY2Utc3BlY2lmaWMgY29kZSBoZXJlPiAqLwogCiAjaWZuZGVmIFVTRV9JT19PUFMKIAkvKiBzYW5pdHkgY2hlY2tzIC0tIGVuc3VyZSBQSU8gYW5kIE1NSU8gcmVnaXN0ZXJzIGFncmVlICovCi0JYXNzZXJ0IChpbmIgKHBpb19zdGFydCtDb25maWcwKSA9PSByZWFkYiAoaW9hZGRyK0NvbmZpZzApKTsKLQlhc3NlcnQgKGluYiAocGlvX3N0YXJ0K0NvbmZpZzEpID09IHJlYWRiIChpb2FkZHIrQ29uZmlnMSkpOwotCWFzc2VydCAoaW5iIChwaW9fc3RhcnQrVHhDb25maWcpID09IHJlYWRiIChpb2FkZHIrVHhDb25maWcpKTsKLQlhc3NlcnQgKGluYiAocGlvX3N0YXJ0K1J4Q29uZmlnKSA9PSByZWFkYiAoaW9hZGRyK1J4Q29uZmlnKSk7CisJYXNzZXJ0KGluYihwaW9fc3RhcnQrQ29uZmlnMCkgPT0gcmVhZGIoaW9hZGRyK0NvbmZpZzApKTsKKwlhc3NlcnQoaW5iKHBpb19zdGFydCtDb25maWcxKSA9PSByZWFkYihpb2FkZHIrQ29uZmlnMSkpOworCWFzc2VydChpbmIocGlvX3N0YXJ0K1R4Q29uZmlnKSA9PSByZWFkYihpb2FkZHIrVHhDb25maWcpKTsKKwlhc3NlcnQoaW5iKHBpb19zdGFydCtSeENvbmZpZykgPT0gcmVhZGIoaW9hZGRyK1J4Q29uZmlnKSk7CiAjZW5kaWYgLyogIVVTRV9JT19PUFMgKi8KIAogCS8qIGlkZW50aWZ5IGNoaXAgYXR0YWNoZWQgdG8gYm9hcmQgKi8KLQl0bXAgPSBORVREUlZfUjggKENoaXBWZXJzaW9uKTsKLQlmb3IgKGkgPSBBUlJBWV9TSVpFIChydGxfY2hpcF9pbmZvKSAtIDE7IGkgPj0gMDsgaS0tKQorCXRtcCA9IE5FVERSVl9SOChDaGlwVmVyc2lvbik7CisJZm9yIChpID0gQVJSQVlfU0laRShydGxfY2hpcF9pbmZvKSAtIDE7IGkgPj0gMDsgaS0tKQogCQlpZiAodG1wID09IHJ0bF9jaGlwX2luZm9baV0udmVyc2lvbikgewogCQkJdHAtPmNoaXBzZXQgPSBpOwogCQkJZ290byBtYXRjaDsKIAkJfQogCiAJLyogaWYgdW5rbm93biBjaGlwLCBhc3N1bWUgYXJyYXkgZWxlbWVudCAjMCwgb3JpZ2luYWwgUlRMLTgxMzkgaW4gdGhpcyBjYXNlICovCi0JZGV2X3ByaW50ayAoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwKLQkJInVua25vd24gY2hpcCB2ZXJzaW9uLCBhc3N1bWluZyBSVEwtODEzOVxuIik7Ci0JZGV2X3ByaW50ayAoS0VSTl9ERUJVRywgJnBkZXYtPmRldiwgIlR4Q29uZmlnID0gMHglbHhcbiIsCi0JCU5FVERSVl9SMzIgKFR4Q29uZmlnKSk7CisJZGV2X3ByaW50ayhLRVJOX0RFQlVHLCAmcGRldi0+ZGV2LAorCQkgICAidW5rbm93biBjaGlwIHZlcnNpb24sIGFzc3VtaW5nIFJUTC04MTM5XG4iKTsKKwlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwZGV2LT5kZXYsICJUeENvbmZpZyA9ICUjbHhcbiIsCisJCSAgIE5FVERSVl9SMzIoVHhDb25maWcpKTsKIAl0cC0+Y2hpcHNldCA9IDA7CiAKIG1hdGNoOgotCURQUklOVEsgKCJjaGlwc2V0IGlkICglZCkgPT0gaW5kZXggJWQsICclcydcbiIsCi0JCXRtcCwKLQkJdHAtPmNoaXBzZXQsCi0JCXJ0bF9jaGlwX2luZm9bdHAtPmNoaXBzZXRdLm5hbWUpOworCURQUklOVEsoImNoaXBzZXQgaWQoJWQpID09IGluZGV4ICVkLCAnJXMnXG4iLAorCQl0bXAsIHRwLT5jaGlwc2V0LCBydGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0XS5uYW1lKTsKIAotCXJjID0gcmVnaXN0ZXJfbmV0ZGV2IChkZXYpOworCXJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJjKQogCQlnb3RvIGVycl9vdXRfdW5tYXA7CiAKLQlEUFJJTlRLICgiRVhJVCwgcmV0dXJuaW5nIDBcbiIpOworCURQUklOVEsoIkVYSVQsIHJldHVybmluZyAwXG4iKTsKIAkqaW9hZGRyX291dCA9IGlvYWRkcjsKIAkqZGV2X291dCA9IGRldjsKIAlyZXR1cm4gMDsKQEAgLTcyMSwxMCArNzQxLDEwIEBACiAJaW91bm1hcChpb2FkZHIpOwogZXJyX291dF9mcmVlX3JlczoKICNlbmRpZgotCXBjaV9yZWxlYXNlX3JlZ2lvbnMgKHBkZXYpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiBlcnJfb3V0OgotCWZyZWVfbmV0ZGV2IChkZXYpOwotCURQUklOVEsgKCJFWElULCByZXR1cm5pbmcgJWRcbiIsIHJjKTsKKwlmcmVlX25ldGRldihkZXYpOworCURQUklOVEsoIkVYSVQsIHJldHVybmluZyAlZFxuIiwgcmMpOwogCXJldHVybiByYzsKIH0KIApAQCAtNzQwLDggKzc2MCw4IEBACiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBldGhfbWFjX2FkZHIsCiB9OwogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBuZXRkcnZfaW5pdF9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCQkJCSAgICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQorc3RhdGljIGludCBfX2RldmluaXQgbmV0ZHJ2X2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gTlVMTDsKIAlzdHJ1Y3QgbmV0ZHJ2X3ByaXZhdGUgKnRwOwpAQCAtNzU2LDI5ICs3NzYsMjkgQEAKIAkJcHJpbnRrKHZlcnNpb24pOwogI2VuZGlmCiAKLQlEUFJJTlRLICgiRU5URVJcbiIpOworCURQUklOVEsoIkVOVEVSXG4iKTsKIAotCWFzc2VydCAocGRldiAhPSBOVUxMKTsKLQlhc3NlcnQgKGVudCAhPSBOVUxMKTsKKwlhc3NlcnQocGRldiAhPSBOVUxMKTsKKwlhc3NlcnQoZW50ICE9IE5VTEwpOwogCiAJYm9hcmRfaWR4Kys7CiAKLQlpID0gbmV0ZHJ2X2luaXRfYm9hcmQgKHBkZXYsICZkZXYsICZpb2FkZHIpOworCWkgPSBuZXRkcnZfaW5pdF9ib2FyZChwZGV2LCAmZGV2LCAmaW9hZGRyKTsKIAlpZiAoaSA8IDApIHsKLQkJRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAlZFxuIiwgaSk7CisJCURQUklOVEsoIkVYSVQsIHJldHVybmluZyAlZFxuIiwgaSk7CiAJCXJldHVybiBpOwogCX0KIAogCXRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWFzc2VydCAoaW9hZGRyICE9IE5VTEwpOwotCWFzc2VydCAoZGV2ICE9IE5VTEwpOwotCWFzc2VydCAodHAgIT0gTlVMTCk7CisJYXNzZXJ0KGlvYWRkciAhPSBOVUxMKTsKKwlhc3NlcnQoZGV2ICE9IE5VTEwpOworCWFzc2VydCh0cCAhPSBOVUxMKTsKIAotCWFkZHJfbGVuID0gcmVhZF9lZXByb20gKGlvYWRkciwgMCwgOCkgPT0gMHg4MTI5ID8gOCA6IDY7CisJYWRkcl9sZW4gPSByZWFkX2VlcHJvbShpb2FkZHIsIDAsIDgpID09IDB4ODEyOSA/IDggOiA2OwogCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCSgodTE2ICopIChkZXYtPmRldl9hZGRyKSlbaV0gPQotCQkgICAgbGUxNl90b19jcHUgKHJlYWRfZWVwcm9tIChpb2FkZHIsIGkgKyA3LCBhZGRyX2xlbikpOworCQkoKHUxNiAqKShkZXYtPmRldl9hZGRyKSlbaV0gPQorCQkJbGUxNl90b19jcHUocmVhZF9lZXByb20oaW9hZGRyLCBpICsgNywgYWRkcl9sZW4pKTsKIAogCWRldi0+bmV0ZGV2X29wcyA9ICZuZXRkcnZfbmV0ZGV2X29wczsKIAlkZXYtPndhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDsKQEAgLTc5MSw3ICs4MTEsNyBAQAogCiAJLyogbm90ZTogdHAtPmNoaXBzZXQgc2V0IGluIG5ldGRydl9pbml0X2JvYXJkICovCiAJdHAtPmRydl9mbGFncyA9IFBDSV9DT01NQU5EX0lPIHwgUENJX0NPTU1BTkRfTUVNT1JZIHwKLQkJCVBDSV9DT01NQU5EX01BU1RFUiB8IE5FVERSVl9DQVBTOworCQlQQ0lfQ09NTUFORF9NQVNURVIgfCBORVREUlZfQ0FQUzsKIAl0cC0+cGNpX2RldiA9IHBkZXY7CiAJdHAtPmJvYXJkID0gZW50LT5kcml2ZXJfZGF0YTsKIAl0cC0+bW1pb19hZGRyID0gaW9hZGRyOwpAQCAtODAxLDE4ICs4MjEsMTUgQEAKIAogCXRwLT5waHlzWzBdID0gMzI7CiAKLQlwcmludGsgKEtFUk5fSU5GTyAiJXM6ICVzIGF0IDB4JWx4LCAlcE0gSVJRICVkXG4iLAotCQlkZXYtPm5hbWUsCi0JCWJvYXJkX2luZm9bZW50LT5kcml2ZXJfZGF0YV0ubmFtZSwKLQkJZGV2LT5iYXNlX2FkZHIsCi0JCWRldi0+ZGV2X2FkZHIsCi0JCWRldi0+aXJxKTsKKwluZXRkZXZfaW5mbyhkZXYsICIlcyBhdCAlI2x4LCAlcE0gSVJRICVkXG4iLAorCQkgICAgYm9hcmRfaW5mb1tlbnQtPmRyaXZlcl9kYXRhXS5uYW1lLAorCQkgICAgZGV2LT5iYXNlX2FkZHIsIGRldi0+ZGV2X2FkZHIsIGRldi0+aXJxKTsKIAotCXByaW50ayAoS0VSTl9ERUJVRyAiJXM6ICBJZGVudGlmaWVkIDgxMzkgY2hpcCB0eXBlICclcydcbiIsCi0JCWRldi0+bmFtZSwgcnRsX2NoaXBfaW5mb1t0cC0+Y2hpcHNldF0ubmFtZSk7CisJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICJJZGVudGlmaWVkIDgxMzkgY2hpcCB0eXBlICclcydcbiIsCisJCSAgICAgIHJ0bF9jaGlwX2luZm9bdHAtPmNoaXBzZXRdLm5hbWUpOwogCiAJLyogUHV0IHRoZSBjaGlwIGludG8gbG93LXBvd2VyIG1vZGUuICovCi0JTkVURFJWX1c4X0YgKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKKwlORVREUlZfVzhfRihDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7CiAKIAkvKiBUaGUgbG93ZXIgZm91ciBiaXRzIGFyZSB0aGUgbWVkaWEgdHlwZS4gKi8KIAlvcHRpb24gPSAoYm9hcmRfaWR4ID4gNykgPyAwIDogbWVkaWFbYm9hcmRfaWR4XTsKQEAgLTgyNCw0NSArODQxLDQzIEBACiAJfQogCiAJaWYgKHRwLT5mdWxsX2R1cGxleCkgewotCQlwcmludGsgKEtFUk5fSU5GTwotCQkJIiVzOiBNZWRpYSB0eXBlIGZvcmNlZCB0byBGdWxsIER1cGxleC5cbiIsCi0JCQlkZXYtPm5hbWUpOwotCQltZGlvX3dyaXRlIChkZXYsIHRwLT5waHlzWzBdLCBNSUlfQURWRVJUSVNFLCBBRFZFUlRJU0VfRlVMTCk7CisJCW5ldGRldl9pbmZvKGRldiwgIk1lZGlhIHR5cGUgZm9yY2VkIHRvIEZ1bGwgRHVwbGV4XG4iKTsKKwkJbWRpb193cml0ZShkZXYsIHRwLT5waHlzWzBdLCBNSUlfQURWRVJUSVNFLCBBRFZFUlRJU0VfRlVMTCk7CiAJCXRwLT5kdXBsZXhfbG9jayA9IDE7CiAJfQogCi0JRFBSSU5USyAoIkVYSVQgLSByZXR1cm5pbmcgMFxuIik7CisJRFBSSU5USygiRVhJVCAtIHJldHVybmluZyAwXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAogCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgbmV0ZHJ2X3JlbW92ZV9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIHZvaWQgX19kZXZleGl0IG5ldGRydl9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEgKHBkZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IG5ldGRydl9wcml2YXRlICpucDsKIAotCURQUklOVEsgKCJFTlRFUlxuIik7CisJRFBSSU5USygiRU5URVJcbiIpOwogCi0JYXNzZXJ0IChkZXYgIT0gTlVMTCk7CisJYXNzZXJ0KGRldiAhPSBOVUxMKTsKIAogCW5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlhc3NlcnQgKG5wICE9IE5VTEwpOworCWFzc2VydChucCAhPSBOVUxMKTsKIAotCXVucmVnaXN0ZXJfbmV0ZGV2IChkZXYpOworCXVucmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAKICNpZm5kZWYgVVNFX0lPX09QUwotCWlvdW5tYXAgKG5wLT5tbWlvX2FkZHIpOworCWlvdW5tYXAobnAtPm1taW9fYWRkcik7CiAjZW5kaWYgLyogIVVTRV9JT19PUFMgKi8KIAotCXBjaV9yZWxlYXNlX3JlZ2lvbnMgKHBkZXYpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAKLQlmcmVlX25ldGRldiAoZGV2KTsKKwlmcmVlX25ldGRldihkZXYpOwogCi0JcGNpX3NldF9kcnZkYXRhIChwZGV2LCBOVUxMKTsKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKLQlwY2lfZGlzYWJsZV9kZXZpY2UgKHBkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIAotCURQUklOVEsgKCJFWElUXG4iKTsKKwlEUFJJTlRLKCJFWElUXG4iKTsKIH0KIAogCkBAIC04NzAsNjMgKzg4NSw2MyBAQAogCiAvKiAgRUVQUk9NX0N0cmwgYml0cy4gKi8KICNkZWZpbmUgRUVfU0hJRlRfQ0xLCTB4MDQJLyogRUVQUk9NIHNoaWZ0IGNsb2NrLiAqLwotI2RlZmluZSBFRV9DUwkJCTB4MDgJLyogRUVQUk9NIGNoaXAgc2VsZWN0LiAqLworI2RlZmluZSBFRV9DUwkJMHgwOAkvKiBFRVBST00gY2hpcCBzZWxlY3QuICovCiAjZGVmaW5lIEVFX0RBVEFfV1JJVEUJMHgwMgkvKiBFRVBST00gY2hpcCBkYXRhIGluLiAqLwotI2RlZmluZSBFRV9XUklURV8wCQkweDAwCi0jZGVmaW5lIEVFX1dSSVRFXzEJCTB4MDIKKyNkZWZpbmUgRUVfV1JJVEVfMAkweDAwCisjZGVmaW5lIEVFX1dSSVRFXzEJMHgwMgogI2RlZmluZSBFRV9EQVRBX1JFQUQJMHgwMQkvKiBFRVBST00gY2hpcCBkYXRhIG91dC4gKi8KLSNkZWZpbmUgRUVfRU5CCQkJKDB4ODAgfCBFRV9DUykKKyNkZWZpbmUgRUVfRU5CCQkoMHg4MCB8IEVFX0NTKQogCiAvKiBEZWxheSBiZXR3ZWVuIEVFUFJPTSBjbG9jayB0cmFuc2l0aW9ucy4KICAgIE5vIGV4dHJhIGRlbGF5IGlzIG5lZWRlZCB3aXRoIDMzTWh6IFBDSSwgYnV0IDY2TWh6IG1heSBjaGFuZ2UgdGhpcy4KLSAqLworKi8KIAogI2RlZmluZSBlZXByb21fZGVsYXkoKQlyZWFkbChlZV9hZGRyKQogCiAvKiBUaGUgRUVQUk9NIGNvbW1hbmRzIGluY2x1ZGUgdGhlIGFsd2F5LXNldCBsZWFkaW5nIGJpdC4gKi8KICNkZWZpbmUgRUVfV1JJVEVfQ01ECSg1KQotI2RlZmluZSBFRV9SRUFEX0NNRAkJKDYpCisjZGVmaW5lIEVFX1JFQURfQ01ECSg2KQogI2RlZmluZSBFRV9FUkFTRV9DTUQJKDcpCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHJlYWRfZWVwcm9tICh2b2lkICppb2FkZHIsIGludCBsb2NhdGlvbiwgaW50IGFkZHJfbGVuKQorc3RhdGljIGludCBfX2RldmluaXQgcmVhZF9lZXByb20odm9pZCAqaW9hZGRyLCBpbnQgbG9jYXRpb24sIGludCBhZGRyX2xlbikKIHsKIAlpbnQgaTsKIAl1bnNpZ25lZCByZXR2YWwgPSAwOwogCXZvaWQgKmVlX2FkZHIgPSBpb2FkZHIgKyBDZmc5MzQ2OwogCWludCByZWFkX2NtZCA9IGxvY2F0aW9uIHwgKEVFX1JFQURfQ01EIDw8IGFkZHJfbGVuKTsKIAotCURQUklOVEsgKCJFTlRFUlxuIik7CisJRFBSSU5USygiRU5URVJcbiIpOwogCi0Jd3JpdGViIChFRV9FTkIgJiB+RUVfQ1MsIGVlX2FkZHIpOwotCXdyaXRlYiAoRUVfRU5CLCBlZV9hZGRyKTsKLQllZXByb21fZGVsYXkgKCk7CisJd3JpdGViKEVFX0VOQiAmIH5FRV9DUywgZWVfYWRkcik7CisJd3JpdGViKEVFX0VOQiwgZWVfYWRkcik7CisJZWVwcm9tX2RlbGF5KCk7CiAKIAkvKiBTaGlmdCB0aGUgcmVhZCBjb21tYW5kIGJpdHMgb3V0LiAqLwogCWZvciAoaSA9IDQgKyBhZGRyX2xlbjsgaSA+PSAwOyBpLS0pIHsKIAkJaW50IGRhdGF2YWwgPSAocmVhZF9jbWQgJiAoMSA8PCBpKSkgPyBFRV9EQVRBX1dSSVRFIDogMDsKLQkJd3JpdGViIChFRV9FTkIgfCBkYXRhdmFsLCBlZV9hZGRyKTsKLQkJZWVwcm9tX2RlbGF5ICgpOwotCQl3cml0ZWIgKEVFX0VOQiB8IGRhdGF2YWwgfCBFRV9TSElGVF9DTEssIGVlX2FkZHIpOwotCQllZXByb21fZGVsYXkgKCk7CisJCXdyaXRlYihFRV9FTkIgfCBkYXRhdmFsLCBlZV9hZGRyKTsKKwkJZWVwcm9tX2RlbGF5KCk7CisJCXdyaXRlYihFRV9FTkIgfCBkYXRhdmFsIHwgRUVfU0hJRlRfQ0xLLCBlZV9hZGRyKTsKKwkJZWVwcm9tX2RlbGF5KCk7CiAJfQotCXdyaXRlYiAoRUVfRU5CLCBlZV9hZGRyKTsKLQllZXByb21fZGVsYXkgKCk7CisJd3JpdGViKEVFX0VOQiwgZWVfYWRkcik7CisJZWVwcm9tX2RlbGF5KCk7CiAKIAlmb3IgKGkgPSAxNjsgaSA+IDA7IGktLSkgewotCQl3cml0ZWIgKEVFX0VOQiB8IEVFX1NISUZUX0NMSywgZWVfYWRkcik7Ci0JCWVlcHJvbV9kZWxheSAoKTsKKwkJd3JpdGViKEVFX0VOQiB8IEVFX1NISUZUX0NMSywgZWVfYWRkcik7CisJCWVlcHJvbV9kZWxheSgpOwogCQlyZXR2YWwgPQotCQkgICAgKHJldHZhbCA8PCAxKSB8ICgocmVhZGIgKGVlX2FkZHIpICYgRUVfREFUQV9SRUFEKSA/IDEgOgotCQkJCSAgICAgMCk7Ci0JCXdyaXRlYiAoRUVfRU5CLCBlZV9hZGRyKTsKLQkJZWVwcm9tX2RlbGF5ICgpOworCQkJKHJldHZhbCA8PCAxKSB8ICgocmVhZGIoZWVfYWRkcikgJiBFRV9EQVRBX1JFQUQpID8gMSA6CisJCQkJCTApOworCQl3cml0ZWIoRUVfRU5CLCBlZV9hZGRyKTsKKwkJZWVwcm9tX2RlbGF5KCk7CiAJfQogCiAJLyogVGVybWluYXRlIHRoZSBFRVBST00gYWNjZXNzLiAqLwotCXdyaXRlYiAofkVFX0NTLCBlZV9hZGRyKTsKLQllZXByb21fZGVsYXkgKCk7CisJd3JpdGViKH5FRV9DUywgZWVfYWRkcik7CisJZWVwcm9tX2RlbGF5KCk7CiAKLQlEUFJJTlRLICgiRVhJVCAtIHJldHVybmluZyAlZFxuIiwgcmV0dmFsKTsKKwlEUFJJTlRLKCJFWElUIC0gcmV0dXJuaW5nICVkXG4iLCByZXR2YWwpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTkzNiwxMiArOTUxLDEyIEBACiAgICBUaGUgbWF4aW11bSBkYXRhIGNsb2NrIHJhdGUgaXMgMi41IE1oei4gIFRoZSBtaW5pbXVtIHRpbWluZyBpcyB1c3VhbGx5CiAgICBtZXQgYnkgYmFjay10by1iYWNrIFBDSSBJL08gY3ljbGVzLCBidXQgd2UgaW5zZXJ0IGEgZGVsYXkgdG8gYXZvaWQKICAgICJvdmVyY2xvY2tpbmciIGlzc3Vlcy4gKi8KLSNkZWZpbmUgTURJT19ESVIJCTB4ODAKKyNkZWZpbmUgTURJT19ESVIJMHg4MAogI2RlZmluZSBNRElPX0RBVEFfT1VUCTB4MDQKICNkZWZpbmUgTURJT19EQVRBX0lOCTB4MDIKLSNkZWZpbmUgTURJT19DTEsJCTB4MDEKLSNkZWZpbmUgTURJT19XUklURTAgKE1ESU9fRElSKQotI2RlZmluZSBNRElPX1dSSVRFMSAoTURJT19ESVIgfCBNRElPX0RBVEFfT1VUKQorI2RlZmluZSBNRElPX0NMSwkweDAxCisjZGVmaW5lIE1ESU9fV1JJVEUwCShNRElPX0RJUikKKyNkZWZpbmUgTURJT19XUklURTEJKE1ESU9fRElSIHwgTURJT19EQVRBX09VVCkKIAogI2RlZmluZSBtZGlvX2RlbGF5KCkJcmVhZGIobWRpb19hZGRyKQogCkBAIC05NTksMjQgKzk3NCwyNCBAQAogCiAKIC8qIFN5bmNyb25pemUgdGhlIE1JSSBtYW5hZ2VtZW50IGludGVyZmFjZSBieSBzaGlmdGluZyAzMiBvbmUgYml0cyBvdXQuICovCi1zdGF0aWMgdm9pZCBtZGlvX3N5bmMgKHZvaWQgKm1kaW9fYWRkcikKK3N0YXRpYyB2b2lkIG1kaW9fc3luYyh2b2lkICptZGlvX2FkZHIpCiB7CiAJaW50IGk7CiAKLQlEUFJJTlRLICgiRU5URVJcbiIpOworCURQUklOVEsoIkVOVEVSXG4iKTsKIAogCWZvciAoaSA9IDMyOyBpID49IDA7IGktLSkgewotCQl3cml0ZWIgKE1ESU9fV1JJVEUxLCBtZGlvX2FkZHIpOwotCQltZGlvX2RlbGF5ICgpOwotCQl3cml0ZWIgKE1ESU9fV1JJVEUxIHwgTURJT19DTEssIG1kaW9fYWRkcik7Ci0JCW1kaW9fZGVsYXkgKCk7CisJCXdyaXRlYihNRElPX1dSSVRFMSwgbWRpb19hZGRyKTsKKwkJbWRpb19kZWxheSgpOworCQl3cml0ZWIoTURJT19XUklURTEgfCBNRElPX0NMSywgbWRpb19hZGRyKTsKKwkJbWRpb19kZWxheSgpOwogCX0KIAotCURQUklOVEsgKCJFWElUXG4iKTsKKwlEUFJJTlRLKCJFWElUXG4iKTsKIH0KIAogCi1zdGF0aWMgaW50IG1kaW9fcmVhZCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uKQorc3RhdGljIGludCBtZGlvX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uKQogewogCXN0cnVjdCBuZXRkcnZfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgKm1kaW9fYWRkciA9IHRwLT5tbWlvX2FkZHIgKyBDb25maWc0OwpAQCAtOTg0LDk3ICs5OTksOTQgQEAKIAlpbnQgcmV0dmFsID0gMDsKIAlpbnQgaTsKIAotCURQUklOVEsgKCJFTlRFUlxuIik7CisJRFBSSU5USygiRU5URVJcbiIpOwogCiAJaWYgKHBoeV9pZCA+IDMxKSB7CS8qIFJlYWxseSBhIDgxMzkuICBVc2UgaW50ZXJuYWwgcmVnaXN0ZXJzLiAqLwotCQlEUFJJTlRLICgiRVhJVCBhZnRlciBkaXJlY3RseSB1c2luZyA4MTM5IGludGVybmFsIHJlZ3NcbiIpOworCQlEUFJJTlRLKCJFWElUIGFmdGVyIGRpcmVjdGx5IHVzaW5nIDgxMzkgaW50ZXJuYWwgcmVnc1xuIik7CiAJCXJldHVybiBsb2NhdGlvbiA8IDggJiYgbWlpXzJfODEzOV9tYXBbbG9jYXRpb25dID8KLQkJICAgIHJlYWR3ICh0cC0+bW1pb19hZGRyICsgbWlpXzJfODEzOV9tYXBbbG9jYXRpb25dKSA6IDA7CisJCQlyZWFkdyh0cC0+bW1pb19hZGRyICsgbWlpXzJfODEzOV9tYXBbbG9jYXRpb25dKSA6IDA7CiAJfQotCW1kaW9fc3luYyAobWRpb19hZGRyKTsKKwltZGlvX3N5bmMobWRpb19hZGRyKTsKIAkvKiBTaGlmdCB0aGUgcmVhZCBjb21tYW5kIGJpdHMgb3V0LiAqLwogCWZvciAoaSA9IDE1OyBpID49IDA7IGktLSkgewogCQlpbnQgZGF0YXZhbCA9IChtaWlfY21kICYgKDEgPDwgaSkpID8gTURJT19EQVRBX09VVCA6IDA7CiAKLQkJd3JpdGViIChNRElPX0RJUiB8IGRhdGF2YWwsIG1kaW9fYWRkcik7Ci0JCW1kaW9fZGVsYXkgKCk7Ci0JCXdyaXRlYiAoTURJT19ESVIgfCBkYXRhdmFsIHwgTURJT19DTEssIG1kaW9fYWRkcik7Ci0JCW1kaW9fZGVsYXkgKCk7CisJCXdyaXRlYihNRElPX0RJUiB8IGRhdGF2YWwsIG1kaW9fYWRkcik7CisJCW1kaW9fZGVsYXkoKTsKKwkJd3JpdGViKE1ESU9fRElSIHwgZGF0YXZhbCB8IE1ESU9fQ0xLLCBtZGlvX2FkZHIpOworCQltZGlvX2RlbGF5KCk7CiAJfQogCiAJLyogUmVhZCB0aGUgdHdvIHRyYW5zaXRpb24sIDE2IGRhdGEsIGFuZCB3aXJlLWlkbGUgYml0cy4gKi8KIAlmb3IgKGkgPSAxOTsgaSA+IDA7IGktLSkgewotCQl3cml0ZWIgKDAsIG1kaW9fYWRkcik7Ci0JCW1kaW9fZGVsYXkgKCk7Ci0JCXJldHZhbCA9Ci0JCSAgICAocmV0dmFsIDw8IDEpIHwgKChyZWFkYiAobWRpb19hZGRyKSAmIE1ESU9fREFUQV9JTikgPyAxCi0JCQkJICAgICA6IDApOwotCQl3cml0ZWIgKE1ESU9fQ0xLLCBtZGlvX2FkZHIpOwotCQltZGlvX2RlbGF5ICgpOworCQl3cml0ZWIoMCwgbWRpb19hZGRyKTsKKwkJbWRpb19kZWxheSgpOworCQlyZXR2YWwgPSAoKHJldHZhbCA8PCAxKSB8ICgocmVhZGIobWRpb19hZGRyKSAmIE1ESU9fREFUQV9JTikpCisJCQkgID8gMSA6IDApOworCQl3cml0ZWIoTURJT19DTEssIG1kaW9fYWRkcik7CisJCW1kaW9fZGVsYXkoKTsKIAl9CiAKLQlEUFJJTlRLICgiRVhJVCwgcmV0dXJuaW5nICVkXG4iLCAocmV0dmFsID4+IDEpICYgMHhmZmZmKTsKKwlEUFJJTlRLKCJFWElULCByZXR1cm5pbmcgJWRcbiIsIChyZXR2YWwgPj4gMSkgJiAweGZmZmYpOwogCXJldHVybiAocmV0dmFsID4+IDEpICYgMHhmZmZmOwogfQogCiAKLXN0YXRpYyB2b2lkIG1kaW9fd3JpdGUgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBwaHlfaWQsIGludCBsb2NhdGlvbiwKLQkJCWludCB2YWx1ZSkKK3N0YXRpYyB2b2lkIG1kaW9fd3JpdGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLAorCQkgICAgICAgaW50IHZhbHVlKQogewogCXN0cnVjdCBuZXRkcnZfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgKm1kaW9fYWRkciA9IHRwLT5tbWlvX2FkZHIgKyBDb25maWc0OwogCWludCBtaWlfY21kID0KLQkgICAgKDB4NTAwMiA8PCAxNikgfCAocGh5X2lkIDw8IDIzKSB8IChsb2NhdGlvbiA8PCAxOCkgfCB2YWx1ZTsKKwkJKDB4NTAwMiA8PCAxNikgfCAocGh5X2lkIDw8IDIzKSB8IChsb2NhdGlvbiA8PCAxOCkgfCB2YWx1ZTsKIAlpbnQgaTsKIAotCURQUklOVEsgKCJFTlRFUlxuIik7CisJRFBSSU5USygiRU5URVJcbiIpOwogCiAJaWYgKHBoeV9pZCA+IDMxKSB7CS8qIFJlYWxseSBhIDgxMzkuICBVc2UgaW50ZXJuYWwgcmVnaXN0ZXJzLiAqLwogCQlpZiAobG9jYXRpb24gPCA4ICYmIG1paV8yXzgxMzlfbWFwW2xvY2F0aW9uXSkgewotCQkJd3JpdGV3ICh2YWx1ZSwKLQkJCQl0cC0+bW1pb19hZGRyICsgbWlpXzJfODEzOV9tYXBbbG9jYXRpb25dKTsKLQkJCXJlYWR3ICh0cC0+bW1pb19hZGRyICsgbWlpXzJfODEzOV9tYXBbbG9jYXRpb25dKTsKKwkJCXdyaXRldyh2YWx1ZSwKKwkJCSAgICAgICB0cC0+bW1pb19hZGRyICsgbWlpXzJfODEzOV9tYXBbbG9jYXRpb25dKTsKKwkJCXJlYWR3KHRwLT5tbWlvX2FkZHIgKyBtaWlfMl84MTM5X21hcFtsb2NhdGlvbl0pOwogCQl9Ci0JCURQUklOVEsgKCJFWElUIGFmdGVyIGRpcmVjdGx5IHVzaW5nIDgxMzkgaW50ZXJuYWwgcmVnc1xuIik7CisJCURQUklOVEsoIkVYSVQgYWZ0ZXIgZGlyZWN0bHkgdXNpbmcgODEzOSBpbnRlcm5hbCByZWdzXG4iKTsKIAkJcmV0dXJuOwogCX0KLQltZGlvX3N5bmMgKG1kaW9fYWRkcik7CisJbWRpb19zeW5jKG1kaW9fYWRkcik7CiAKIAkvKiBTaGlmdCB0aGUgY29tbWFuZCBiaXRzIG91dC4gKi8KIAlmb3IgKGkgPSAzMTsgaSA+PSAwOyBpLS0pIHsKIAkJaW50IGRhdGF2YWwgPQotCQkgICAgKG1paV9jbWQgJiAoMSA8PCBpKSkgPyBNRElPX1dSSVRFMSA6IE1ESU9fV1JJVEUwOwotCQl3cml0ZWIgKGRhdGF2YWwsIG1kaW9fYWRkcik7Ci0JCW1kaW9fZGVsYXkgKCk7Ci0JCXdyaXRlYiAoZGF0YXZhbCB8IE1ESU9fQ0xLLCBtZGlvX2FkZHIpOwotCQltZGlvX2RlbGF5ICgpOworCQkJKG1paV9jbWQgJiAoMSA8PCBpKSkgPyBNRElPX1dSSVRFMSA6IE1ESU9fV1JJVEUwOworCQl3cml0ZWIoZGF0YXZhbCwgbWRpb19hZGRyKTsKKwkJbWRpb19kZWxheSgpOworCQl3cml0ZWIoZGF0YXZhbCB8IE1ESU9fQ0xLLCBtZGlvX2FkZHIpOworCQltZGlvX2RlbGF5KCk7CiAJfQogCiAJLyogQ2xlYXIgb3V0IGV4dHJhIGJpdHMuICovCiAJZm9yIChpID0gMjsgaSA+IDA7IGktLSkgewotCQl3cml0ZWIgKDAsIG1kaW9fYWRkcik7Ci0JCW1kaW9fZGVsYXkgKCk7Ci0JCXdyaXRlYiAoTURJT19DTEssIG1kaW9fYWRkcik7Ci0JCW1kaW9fZGVsYXkgKCk7CisJCXdyaXRlYigwLCBtZGlvX2FkZHIpOworCQltZGlvX2RlbGF5KCk7CisJCXdyaXRlYihNRElPX0NMSywgbWRpb19hZGRyKTsKKwkJbWRpb19kZWxheSgpOwogCX0KIAotCURQUklOVEsgKCJFWElUXG4iKTsKKwlEUFJJTlRLKCJFWElUXG4iKTsKIH0KIAogCi1zdGF0aWMgaW50IG5ldGRydl9vcGVuIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBuZXRkcnZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRkcnZfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCByZXR2YWw7Ci0jaWZkZWYgTkVURFJWX0RFQlVHCiAJdm9pZCAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKLSNlbmRpZgogCi0JRFBSSU5USyAoIkVOVEVSXG4iKTsKKwlEUFJJTlRLKCJFTlRFUlxuIik7CiAKLQlyZXR2YWwgPSByZXF1ZXN0X2lycSAoZGV2LT5pcnEsIG5ldGRydl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CisJcmV0dmFsID0gcmVxdWVzdF9pcnEoZGV2LT5pcnEsIG5ldGRydl9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CiAJaWYgKHJldHZhbCkgewotCQlEUFJJTlRLICgiRVhJVCwgcmV0dXJuaW5nICVkXG4iLCByZXR2YWwpOworCQlEUFJJTlRLKCJFWElULCByZXR1cm5pbmcgJWRcbiIsIHJldHZhbCk7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCkBAIC0xMDkyLDcgKzExMDQsNyBAQAogCQkJcGNpX2ZyZWVfY29uc2lzdGVudCh0cC0+cGNpX2RldiwgUlhfQlVGX1RPVF9MRU4sCiAJCQkJCSAgICB0cC0+cnhfcmluZywgdHAtPnJ4X3JpbmdfZG1hKTsKIAotCQlEUFJJTlRLICgiRVhJVCwgcmV0dXJuaW5nIC1FTk9NRU1cbiIpOworCQlEUFJJTlRLKCJFWElULCByZXR1cm5pbmcgLUVOT01FTVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCiAJfQpAQCAtMTEwMCwxMDkgKzExMTIsMTA4IEBACiAJdHAtPmZ1bGxfZHVwbGV4ID0gdHAtPmR1cGxleF9sb2NrOwogCXRwLT50eF9mbGFnID0gKFRYX0ZJRk9fVEhSRVNIIDw8IDExKSAmIDB4MDAzZjAwMDA7CiAKLQluZXRkcnZfaW5pdF9yaW5nIChkZXYpOwotCW5ldGRydl9od19zdGFydCAoZGV2KTsKKwluZXRkcnZfaW5pdF9yaW5nKGRldik7CisJbmV0ZHJ2X2h3X3N0YXJ0KGRldik7CiAKLQlEUFJJTlRLICgiJXM6IG5ldGRydl9vcGVuKCkgaW9hZGRyICUjbHggSVJRICVkIgotCQkJIiBHUCBQaW5zICUyLjJ4ICVzLWR1cGxleC5cbiIsCi0JCQlkZXYtPm5hbWUsIHBjaV9yZXNvdXJjZV9zdGFydCAodHAtPnBjaV9kZXYsIDEpLAotCQkJZGV2LT5pcnEsIE5FVERSVl9SOCAoTWVkaWFTdGF0dXMpLAotCQkJdHAtPmZ1bGxfZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiKTsKKwluZXRkZXZfZGJnKGRldiwgImlvYWRkciAlI2xseCBJUlEgJWQgR1AgUGlucyAlMDJ4ICVzLWR1cGxleFxuIiwKKwkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQodHAtPnBjaV9kZXYsIDEpLAorCQkgICBkZXYtPmlycSwgTkVURFJWX1I4KE1lZGlhU3RhdHVzKSwKKwkJICAgdHAtPmZ1bGxfZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiKTsKIAogCS8qIFNldCB0aGUgdGltZXIgdG8gc3dpdGNoIHRvIGNoZWNrIGZvciBsaW5rIGJlYXQgYW5kIHBlcmhhcHMgc3dpdGNoCiAJICAgdG8gYW4gYWx0ZXJuYXRlIG1lZGlhIHR5cGUuICovCi0JaW5pdF90aW1lciAoJnRwLT50aW1lcik7CisJaW5pdF90aW1lcigmdHAtPnRpbWVyKTsKIAl0cC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAzICogSFo7CiAJdHAtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgZGV2OwogCXRwLT50aW1lci5mdW5jdGlvbiA9ICZuZXRkcnZfdGltZXI7Ci0JYWRkX3RpbWVyICgmdHAtPnRpbWVyKTsKKwlhZGRfdGltZXIoJnRwLT50aW1lcik7CiAKLQlEUFJJTlRLICgiRVhJVCwgcmV0dXJuaW5nIDBcbiIpOworCURQUklOVEsoIkVYSVQsIHJldHVybmluZyAwXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAogCiAvKiBTdGFydCB0aGUgaGFyZHdhcmUgYXQgb3BlbiBvciByZXN1bWUuICovCi1zdGF0aWMgdm9pZCBuZXRkcnZfaHdfc3RhcnQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBuZXRkcnZfaHdfc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0ZHJ2X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwogCXUzMiBpOwogCi0JRFBSSU5USyAoIkVOVEVSXG4iKTsKKwlEUFJJTlRLKCJFTlRFUlxuIik7CiAKIAkvKiBTb2Z0IHJlc2V0IHRoZSBjaGlwLiAqLwotCU5FVERSVl9XOCAoQ2hpcENtZCwgKE5FVERSVl9SOCAoQ2hpcENtZCkgJiBDaGlwQ21kQ2xlYXIpIHwgQ21kUmVzZXQpOwotCXVkZWxheSAoMTAwKTsKKwlORVREUlZfVzgoQ2hpcENtZCwgKE5FVERSVl9SOChDaGlwQ21kKSAmIENoaXBDbWRDbGVhcikgfCBDbWRSZXNldCk7CisJdWRlbGF5KDEwMCk7CiAKIAkvKiBDaGVjayB0aGF0IHRoZSBjaGlwIGhhcyBmaW5pc2hlZCB0aGUgcmVzZXQuICovCiAJZm9yIChpID0gMTAwMDsgaSA+IDA7IGktLSkKLQkJaWYgKChORVREUlZfUjggKENoaXBDbWQpICYgQ21kUmVzZXQpID09IDApCisJCWlmICgoTkVURFJWX1I4KENoaXBDbWQpICYgQ21kUmVzZXQpID09IDApCiAJCQlicmVhazsKIAogCS8qIFJlc3RvcmUgb3VyIGlkZWEgb2YgdGhlIE1BQyBhZGRyZXNzLiAqLwotCU5FVERSVl9XMzJfRiAoTUFDMCArIDAsIGNwdV90b19sZTMyICgqKHUzMiAqKSAoZGV2LT5kZXZfYWRkciArIDApKSk7Ci0JTkVURFJWX1czMl9GIChNQUMwICsgNCwgY3B1X3RvX2xlMzIgKCoodTMyICopIChkZXYtPmRldl9hZGRyICsgNCkpKTsKKwlORVREUlZfVzMyX0YoTUFDMCArIDAsIGNwdV90b19sZTMyKCoodTMyICopKGRldi0+ZGV2X2FkZHIgKyAwKSkpOworCU5FVERSVl9XMzJfRihNQUMwICsgNCwgY3B1X3RvX2xlMzIoKih1MzIgKikoZGV2LT5kZXZfYWRkciArIDQpKSk7CiAKIAkvKiBNdXN0IGVuYWJsZSBUeC9SeCBiZWZvcmUgc2V0dGluZyB0cmFuc2ZlciB0aHJlc2hvbGRzISAqLwotCU5FVERSVl9XOF9GIChDaGlwQ21kLCAoTkVURFJWX1I4IChDaGlwQ21kKSAmIENoaXBDbWRDbGVhcikgfAotCQkJICAgQ21kUnhFbmIgfCBDbWRUeEVuYik7CisJTkVURFJWX1c4X0YoQ2hpcENtZCwgKE5FVERSVl9SOChDaGlwQ21kKSAmIENoaXBDbWRDbGVhcikgfAorCQkgICAgQ21kUnhFbmIgfCBDbWRUeEVuYik7CiAKIAlpID0gbmV0ZHJ2X3J4X2NvbmZpZyB8Ci0JICAgIChORVREUlZfUjMyIChSeENvbmZpZykgJiBydGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0XS5SeENvbmZpZ01hc2spOwotCU5FVERSVl9XMzJfRiAoUnhDb25maWcsIGkpOworCQkoTkVURFJWX1IzMihSeENvbmZpZykgJiBydGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0XS5SeENvbmZpZ01hc2spOworCU5FVERSVl9XMzJfRihSeENvbmZpZywgaSk7CiAKIAkvKiBDaGVjayB0aGlzIHZhbHVlOiB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgSUZHIGNvbnRyYWRpY3RzIGlmc2VsZi4gKi8KLQlORVREUlZfVzMyIChUeENvbmZpZywgKFRYX0RNQV9CVVJTVCA8PCBUeERNQVNoaWZ0KSk7CisJTkVURFJWX1czMihUeENvbmZpZywgKFRYX0RNQV9CVVJTVCA8PCBUeERNQVNoaWZ0KSk7CiAKIAkvKiB1bmxvY2sgQ29uZmlnWzAxMjM0XSBhbmQgQk1DUiByZWdpc3RlciB3cml0ZXMgKi8KLQlORVREUlZfVzhfRiAoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spOwotCXVkZWxheSAoMTApOworCU5FVERSVl9XOF9GKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKKwl1ZGVsYXkoMTApOwogCiAJdHAtPmN1cl9yeCA9IDA7CiAKIAkvKiBMb2NrIENvbmZpZ1swMTIzNF0gYW5kIEJNQ1IgcmVnaXN0ZXIgd3JpdGVzICovCi0JTkVURFJWX1c4X0YgKENmZzkzNDYsIENmZzkzNDZfTG9jayk7Ci0JdWRlbGF5ICgxMCk7CisJTkVURFJWX1c4X0YoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsKKwl1ZGVsYXkoMTApOwogCiAJLyogaW5pdCBSeCByaW5nIGJ1ZmZlciBETUEgYWRkcmVzcyAqLwotCU5FVERSVl9XMzJfRiAoUnhCdWYsIHRwLT5yeF9yaW5nX2RtYSk7CisJTkVURFJWX1czMl9GKFJ4QnVmLCB0cC0+cnhfcmluZ19kbWEpOwogCiAJLyogaW5pdCBUeCBidWZmZXIgRE1BIGFkZHJlc3NlcyAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fVFhfREVTQzsgaSsrKQotCQlORVREUlZfVzMyX0YgKFR4QWRkcjAgKyAoaSAqIDQpLCB0cC0+dHhfYnVmc19kbWEgKyAodHAtPnR4X2J1ZltpXSAtIHRwLT50eF9idWZzKSk7CisJCU5FVERSVl9XMzJfRihUeEFkZHIwICsgKGkgKiA0KSwgdHAtPnR4X2J1ZnNfZG1hICsgKHRwLT50eF9idWZbaV0gLSB0cC0+dHhfYnVmcykpOwogCi0JTkVURFJWX1czMl9GIChSeE1pc3NlZCwgMCk7CisJTkVURFJWX1czMl9GKFJ4TWlzc2VkLCAwKTsKIAotCW5ldGRydl9zZXRfcnhfbW9kZSAoZGV2KTsKKwluZXRkcnZfc2V0X3J4X21vZGUoZGV2KTsKIAogCS8qIG5vIGVhcmx5LXJ4IGludGVycnVwdHMgKi8KLQlORVREUlZfVzE2IChNdWx0aUludHIsIE5FVERSVl9SMTYgKE11bHRpSW50cikgJiBNdWx0aUludHJDbGVhcik7CisJTkVURFJWX1cxNihNdWx0aUludHIsIE5FVERSVl9SMTYoTXVsdGlJbnRyKSAmIE11bHRpSW50ckNsZWFyKTsKIAogCS8qIG1ha2Ugc3VyZSBSeFR4IGhhcyBzdGFydGVkICovCi0JTkVURFJWX1c4X0YgKENoaXBDbWQsIChORVREUlZfUjggKENoaXBDbWQpICYgQ2hpcENtZENsZWFyKSB8Ci0JCQkgICBDbWRSeEVuYiB8IENtZFR4RW5iKTsKKwlORVREUlZfVzhfRihDaGlwQ21kLCAoTkVURFJWX1I4KENoaXBDbWQpICYgQ2hpcENtZENsZWFyKSB8CisJCSAgICBDbWRSeEVuYiB8IENtZFR4RW5iKTsKIAogCS8qIEVuYWJsZSBhbGwga25vd24gaW50ZXJydXB0cyBieSBzZXR0aW5nIHRoZSBpbnRlcnJ1cHQgbWFzay4gKi8KLQlORVREUlZfVzE2X0YgKEludHJNYXNrLCBuZXRkcnZfaW50cl9tYXNrKTsKKwlORVREUlZfVzE2X0YoSW50ck1hc2ssIG5ldGRydl9pbnRyX21hc2spOwogCi0JbmV0aWZfc3RhcnRfcXVldWUgKGRldik7CisJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKIAotCURQUklOVEsgKCJFWElUXG4iKTsKKwlEUFJJTlRLKCJFWElUXG4iKTsKIH0KIAogCiAvKiBJbml0aWFsaXplIHRoZSBSeCBhbmQgVHggcmluZ3MsIGFsb25nIHdpdGggdmFyaW91cyAnZGV2JyBiaXRzLiAqLwotc3RhdGljIHZvaWQgbmV0ZHJ2X2luaXRfcmluZyAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIG5ldGRydl9pbml0X3Jpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0ZHJ2X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgaTsKIAotCURQUklOVEsgKCJFTlRFUlxuIik7CisJRFBSSU5USygiRU5URVJcbiIpOwogCiAJdHAtPmN1cl9yeCA9IDA7Ci0JYXRvbWljX3NldCAoJnRwLT5jdXJfdHgsIDApOwotCWF0b21pY19zZXQgKCZ0cC0+ZGlydHlfdHgsIDApOworCWF0b21pY19zZXQoJnRwLT5jdXJfdHgsIDApOworCWF0b21pY19zZXQoJnRwLT5kaXJ0eV90eCwgMCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX1RYX0RFU0M7IGkrKykgewogCQl0cC0+dHhfaW5mb1tpXS5za2IgPSBOVUxMOwpAQCAtMTIxMCwxMSArMTIyMSwxMSBAQAogCQl0cC0+dHhfYnVmW2ldID0gJnRwLT50eF9idWZzW2kgKiBUWF9CVUZfU0laRV07CiAJfQogCi0JRFBSSU5USyAoIkVYSVRcbiIpOworCURQUklOVEsoIkVYSVRcbiIpOwogfQogCiAKLXN0YXRpYyB2b2lkIG5ldGRydl90aW1lciAodW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgbmV0ZHJ2X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopIGRhdGE7CiAJc3RydWN0IG5ldGRydl9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CkBAIC0xMjIyLDU4ICsxMjMzLDU0IEBACiAJaW50IG5leHRfdGljayA9IDYwICogSFo7CiAJaW50IG1paV9scGE7CiAKLQltaWlfbHBhID0gbWRpb19yZWFkIChkZXYsIHRwLT5waHlzWzBdLCBNSUlfTFBBKTsKKwltaWlfbHBhID0gbWRpb19yZWFkKGRldiwgdHAtPnBoeXNbMF0sIE1JSV9MUEEpOwogCiAJaWYgKCF0cC0+ZHVwbGV4X2xvY2sgJiYgbWlpX2xwYSAhPSAweGZmZmYpIHsKIAkJaW50IGR1cGxleCA9ICgobWlpX2xwYSAmIExQQV8xMDBGVUxMKSB8fAotCQkJICAgICAgKG1paV9scGEgJiAweDAxQzApID09IDB4MDA0MCk7CisJCQkgICAgIChtaWlfbHBhICYgMHgwMUMwKSA9PSAweDAwNDApOwogCQlpZiAodHAtPmZ1bGxfZHVwbGV4ICE9IGR1cGxleCkgewogCQkJdHAtPmZ1bGxfZHVwbGV4ID0gZHVwbGV4OwotCQkJcHJpbnRrIChLRVJOX0lORk8KLQkJCQkiJXM6IFNldHRpbmcgJXMtZHVwbGV4IGJhc2VkIG9uIE1JSSAjJWQgbGluayIKLQkJCQkiIHBhcnRuZXIgYWJpbGl0eSBvZiAlNC40eC5cbiIsIGRldi0+bmFtZSwKLQkJCQl0cC0+ZnVsbF9kdXBsZXggPyAiZnVsbCIgOiAiaGFsZiIsCi0JCQkJdHAtPnBoeXNbMF0sIG1paV9scGEpOwotCQkJTkVURFJWX1c4IChDZmc5MzQ2LCBDZmc5MzQ2X1VubG9jayk7Ci0JCQlORVREUlZfVzggKENvbmZpZzEsIHRwLT5mdWxsX2R1cGxleCA/IDB4NjAgOiAweDIwKTsKLQkJCU5FVERSVl9XOCAoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsKKwkJCW5ldGRldl9pbmZvKGRldiwgIlNldHRpbmcgJXMtZHVwbGV4IGJhc2VkIG9uIE1JSSAjJWQgbGluayBwYXJ0bmVyIGFiaWxpdHkgb2YgJTA0eFxuIiwKKwkJCQkgICAgdHAtPmZ1bGxfZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiLAorCQkJCSAgICB0cC0+cGh5c1swXSwgbWlpX2xwYSk7CisJCQlORVREUlZfVzgoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spOworCQkJTkVURFJWX1c4KENvbmZpZzEsIHRwLT5mdWxsX2R1cGxleCA/IDB4NjAgOiAweDIwKTsKKwkJCU5FVERSVl9XOChDZmc5MzQ2LCBDZmc5MzQ2X0xvY2spOwogCQl9CiAJfQogCi0JRFBSSU5USyAoIiVzOiBNZWRpYSBzZWxlY3Rpb24gdGljaywgTGluayBwYXJ0bmVyICU0LjR4LlxuIiwKLQkJIGRldi0+bmFtZSwgTkVURFJWX1IxNiAoTldheUxQQVIpKTsKLQlEUFJJTlRLICgiJXM6ICBPdGhlciByZWdpc3RlcnMgYXJlIEludE1hc2sgJTQuNHggSW50U3RhdHVzICU0LjR4IgotCQkgIiBSeFN0YXR1cyAlNC40eC5cbiIsIGRldi0+bmFtZSwKLQkJIE5FVERSVl9SMTYgKEludHJNYXNrKSwKLQkJIE5FVERSVl9SMTYgKEludHJTdGF0dXMpLAotCQkgTkVURFJWX1IzMiAoUnhFYXJseVN0YXR1cykpOwotCURQUklOVEsgKCIlczogIENoaXAgY29uZmlnICUyLjJ4ICUyLjJ4LlxuIiwKLQkJIGRldi0+bmFtZSwgTkVURFJWX1I4IChDb25maWcwKSwKLQkJIE5FVERSVl9SOCAoQ29uZmlnMSkpOworCW5ldGRldl9kYmcoZGV2LCAiTWVkaWEgc2VsZWN0aW9uIHRpY2ssIExpbmsgcGFydG5lciAlMDR4XG4iLAorCQkgICBORVREUlZfUjE2KE5XYXlMUEFSKSk7CisJbmV0ZGV2X2RiZyhkZXYsICJPdGhlciByZWdpc3RlcnMgYXJlIEludE1hc2sgJTA0eCBJbnRTdGF0dXMgJTA0eCBSeFN0YXR1cyAlMDRseFxuIiwKKwkJICAgTkVURFJWX1IxNihJbnRyTWFzayksCisJCSAgIE5FVERSVl9SMTYoSW50clN0YXR1cyksCisJCSAgIE5FVERSVl9SMzIoUnhFYXJseVN0YXR1cykpOworCW5ldGRldl9kYmcoZGV2LCAiQ2hpcCBjb25maWcgJTAyeCAlMDJ4XG4iLAorCQkgICBORVREUlZfUjgoQ29uZmlnMCksIE5FVERSVl9SOChDb25maWcxKSk7CiAKIAl0cC0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBuZXh0X3RpY2s7Ci0JYWRkX3RpbWVyICgmdHAtPnRpbWVyKTsKKwlhZGRfdGltZXIoJnRwLT50aW1lcik7CiB9CiAKIAotc3RhdGljIHZvaWQgbmV0ZHJ2X3R4X2NsZWFyIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgbmV0ZHJ2X3R4X2NsZWFyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGk7CiAJc3RydWN0IG5ldGRydl9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAKLQlhdG9taWNfc2V0ICgmdHAtPmN1cl90eCwgMCk7Ci0JYXRvbWljX3NldCAoJnRwLT5kaXJ0eV90eCwgMCk7CisJYXRvbWljX3NldCgmdHAtPmN1cl90eCwgMCk7CisJYXRvbWljX3NldCgmdHAtPmRpcnR5X3R4LCAwKTsKIAogCS8qIER1bXAgdGhlIHVuc2VudCBUeCBwYWNrZXRzLiAqLwogCWZvciAoaSA9IDA7IGkgPCBOVU1fVFhfREVTQzsgaSsrKSB7CiAJCXN0cnVjdCByaW5nX2luZm8gKnJwID0gJnRwLT50eF9pbmZvW2ldOwogCQlpZiAocnAtPm1hcHBpbmcgIT0gMCkgewotCQkJcGNpX3VubWFwX3NpbmdsZSAodHAtPnBjaV9kZXYsIHJwLT5tYXBwaW5nLAotCQkJCQkgIHJwLT5za2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CisJCQlwY2lfdW5tYXBfc2luZ2xlKHRwLT5wY2lfZGV2LCBycC0+bWFwcGluZywKKwkJCQkJIHJwLT5za2ItPmxlbiwgUENJX0RNQV9UT0RFVklDRSk7CiAJCQlycC0+bWFwcGluZyA9IDA7CiAJCX0KIAkJaWYgKHJwLT5za2IpIHsKLQkJCWRldl9rZnJlZV9za2IgKHJwLT5za2IpOworCQkJZGV2X2tmcmVlX3NrYihycC0+c2tiKTsKIAkJCXJwLT5za2IgPSBOVUxMOwogCQkJZGV2LT5zdGF0cy50eF9kcm9wcGVkKys7CiAJCX0KQEAgLTEyODEsNyArMTI4OCw3IEBACiB9CiAKIAotc3RhdGljIHZvaWQgbmV0ZHJ2X3R4X3RpbWVvdXQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBuZXRkcnZfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRkcnZfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CkBAIC0xMjg5LDk2ICsxMjk2LDk1IEBACiAJdTggdG1wODsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JRFBSSU5USyAoIiVzOiBUcmFuc21pdCB0aW1lb3V0LCBzdGF0dXMgJTIuMnggJTQuNHggIgotCQkgIm1lZGlhICUyLjJ4LlxuIiwgZGV2LT5uYW1lLAotCQkgTkVURFJWX1I4IChDaGlwQ21kKSwKLQkJIE5FVERSVl9SMTYgKEludHJTdGF0dXMpLAotCQkgTkVURFJWX1I4IChNZWRpYVN0YXR1cykpOworCW5ldGRldl9kYmcoZGV2LCAiVHJhbnNtaXQgdGltZW91dCwgc3RhdHVzICUwMnggJTA0eCBtZWRpYSAlMDJ4XG4iLAorCQkgICBORVREUlZfUjgoQ2hpcENtZCksCisJCSAgIE5FVERSVl9SMTYoSW50clN0YXR1cyksCisJCSAgIE5FVERSVl9SOChNZWRpYVN0YXR1cykpOwogCiAJLyogZGlzYWJsZSBUeCBBU0FQLCBpZiBub3QgYWxyZWFkeSAqLwotCXRtcDggPSBORVREUlZfUjggKENoaXBDbWQpOworCXRtcDggPSBORVREUlZfUjgoQ2hpcENtZCk7CiAJaWYgKHRtcDggJiBDbWRUeEVuYikKLQkJTkVURFJWX1c4IChDaGlwQ21kLCB0bXA4ICYgfkNtZFR4RW5iKTsKKwkJTkVURFJWX1c4KENoaXBDbWQsIHRtcDggJiB+Q21kVHhFbmIpOwogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGJ5IGNsZWFyaW5nIHRoZSBpbnRlcnJ1cHQgbWFzay4gKi8KLQlORVREUlZfVzE2IChJbnRyTWFzaywgMHgwMDAwKTsKKwlORVREUlZfVzE2KEludHJNYXNrLCAweDAwMDApOwogCiAJLyogRW1pdCBpbmZvIHRvIGZpZ3VyZSBvdXQgd2hhdCB3ZW50IHdyb25nLiAqLwotCXByaW50ayAoS0VSTl9ERUJVRyAiJXM6IFR4IHF1ZXVlIHN0YXJ0IGVudHJ5ICVkICBkaXJ0eSBlbnRyeSAlZC5cbiIsCi0JCWRldi0+bmFtZSwgYXRvbWljX3JlYWQgKCZ0cC0+Y3VyX3R4KSwKLQkJYXRvbWljX3JlYWQgKCZ0cC0+ZGlydHlfdHgpKTsKKwluZXRkZXZfZGJnKGRldiwgIlR4IHF1ZXVlIHN0YXJ0IGVudHJ5ICVkIGRpcnR5IGVudHJ5ICVkXG4iLAorCQkgICBhdG9taWNfcmVhZCgmdHAtPmN1cl90eCksCisJCSAgIGF0b21pY19yZWFkKCZ0cC0+ZGlydHlfdHgpKTsKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX1RYX0RFU0M7IGkrKykKLQkJcHJpbnRrIChLRVJOX0RFQlVHICIlczogIFR4IGRlc2NyaXB0b3IgJWQgaXMgJTguOGx4LiVzXG4iLAotCQkJZGV2LT5uYW1lLCBpLCBORVREUlZfUjMyIChUeFN0YXR1czAgKyAoaSAqIDQpKSwKLQkJCWkgPT0gYXRvbWljX3JlYWQgKCZ0cC0+ZGlydHlfdHgpICUgTlVNX1RYX0RFU0MgPwotCQkJCSIgKHF1ZXVlIGhlYWQpIiA6ICIiKTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJUeCBkZXNjcmlwdG9yICVkIGlzICUwOGx4JXNcbiIsCisJCQkgICBpLCBORVREUlZfUjMyKFR4U3RhdHVzMCArIChpICogNCkpLAorCQkJICAgaSA9PSBhdG9taWNfcmVhZCgmdHAtPmRpcnR5X3R4KSAlIE5VTV9UWF9ERVNDID8KKwkJCSAgICIocXVldWUgaGVhZCkiIDogIiIpOwogCiAJLyogU3RvcCBhIHNoYXJlZCBpbnRlcnJ1cHQgZnJvbSBzY2F2ZW5naW5nIHdoaWxlIHdlIGFyZS4gKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSAoJnRwLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7CiAKLQluZXRkcnZfdHhfY2xlYXIgKGRldik7CisJbmV0ZHJ2X3R4X2NsZWFyKGRldik7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmdHAtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOwogCiAJLyogLi4uYW5kIGZpbmFsbHksIHJlc2V0IGV2ZXJ5dGhpbmcgKi8KLQluZXRkcnZfaHdfc3RhcnQgKGRldik7CisJbmV0ZHJ2X2h3X3N0YXJ0KGRldik7CiAKLQluZXRpZl93YWtlX3F1ZXVlIChkZXYpOworCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KIAogCiAKLXN0YXRpYyBpbnQgbmV0ZHJ2X3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG5ldGRydl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IG5ldGRydl9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKIAlpbnQgZW50cnk7CiAKIAkvKiBDYWxjdWxhdGUgdGhlIG5leHQgVHggZGVzY3JpcHRvciBlbnRyeS4gKi8KLQllbnRyeSA9IGF0b21pY19yZWFkICgmdHAtPmN1cl90eCkgJSBOVU1fVFhfREVTQzsKKwllbnRyeSA9IGF0b21pY19yZWFkKCZ0cC0+Y3VyX3R4KSAlIE5VTV9UWF9ERVNDOwogCi0JYXNzZXJ0ICh0cC0+dHhfaW5mb1tlbnRyeV0uc2tiID09IE5VTEwpOwotCWFzc2VydCAodHAtPnR4X2luZm9bZW50cnldLm1hcHBpbmcgPT0gMCk7CisJYXNzZXJ0KHRwLT50eF9pbmZvW2VudHJ5XS5za2IgPT0gTlVMTCk7CisJYXNzZXJ0KHRwLT50eF9pbmZvW2VudHJ5XS5tYXBwaW5nID09IDApOwogCiAJdHAtPnR4X2luZm9bZW50cnldLnNrYiA9IHNrYjsKIAkvKiB0cC0+dHhfaW5mb1tlbnRyeV0ubWFwcGluZyA9IDA7ICovCiAJc2tiX2NvcHlfZnJvbV9saW5lYXJfZGF0YShza2IsIHRwLT50eF9idWZbZW50cnldLCBza2ItPmxlbik7CiAKIAkvKiBOb3RlOiB0aGUgY2hpcCBkb2Vzbid0IGhhdmUgYXV0by1wYWQhICovCi0JTkVURFJWX1czMiAoVHhTdGF0dXMwICsgKGVudHJ5ICogc2l6ZW9mKHUzMikpLAotCQkgdHAtPnR4X2ZsYWcgfCAoc2tiLT5sZW4gPj0gRVRIX1pMRU4gPyBza2ItPmxlbiA6IEVUSF9aTEVOKSk7CisJTkVURFJWX1czMihUeFN0YXR1czAgKyAoZW50cnkgKiBzaXplb2YodTMyKSksCisJCSAgIHRwLT50eF9mbGFnIHwgKHNrYi0+bGVuID49IEVUSF9aTEVOID8gc2tiLT5sZW4gOiBFVEhfWkxFTikpOwogCiAJZGV2LT50cmFuc19zdGFydCA9IGppZmZpZXM7Ci0JYXRvbWljX2luYyAoJnRwLT5jdXJfdHgpOwotCWlmICgoYXRvbWljX3JlYWQgKCZ0cC0+Y3VyX3R4KSAtIGF0b21pY19yZWFkICgmdHAtPmRpcnR5X3R4KSkgPj0gTlVNX1RYX0RFU0MpCi0JCW5ldGlmX3N0b3BfcXVldWUgKGRldik7CisJYXRvbWljX2luYygmdHAtPmN1cl90eCk7CisJaWYgKChhdG9taWNfcmVhZCgmdHAtPmN1cl90eCkgLSBhdG9taWNfcmVhZCgmdHAtPmRpcnR5X3R4KSkgPj0gTlVNX1RYX0RFU0MpCisJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotCURQUklOVEsgKCIlczogUXVldWVkIFR4IHBhY2tldCBhdCAlcCBzaXplICV1IHRvIHNsb3QgJWQuXG4iLAotCQkgZGV2LT5uYW1lLCBza2ItPmRhdGEsIHNrYi0+bGVuLCBlbnRyeSk7CisJbmV0ZGV2X2RiZyhkZXYsICJRdWV1ZWQgVHggcGFja2V0IGF0ICVwIHNpemUgJXUgdG8gc2xvdCAlZFxuIiwKKwkJICAgc2tiLT5kYXRhLCBza2ItPmxlbiwgZW50cnkpOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAogCi1zdGF0aWMgdm9pZCBuZXRkcnZfdHhfaW50ZXJydXB0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCSAgc3RydWN0IG5ldGRydl9wcml2YXRlICp0cCwKLQkJCQkgIHZvaWQgKmlvYWRkcikKK3N0YXRpYyB2b2lkIG5ldGRydl90eF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgbmV0ZHJ2X3ByaXZhdGUgKnRwLAorCQkJCXZvaWQgKmlvYWRkcikKIHsKIAlpbnQgY3VyX3R4LCBkaXJ0eV90eCwgdHhfbGVmdDsKIAotCWFzc2VydCAoZGV2ICE9IE5VTEwpOwotCWFzc2VydCAodHAgIT0gTlVMTCk7Ci0JYXNzZXJ0IChpb2FkZHIgIT0gTlVMTCk7CisJYXNzZXJ0KGRldiAhPSBOVUxMKTsKKwlhc3NlcnQodHAgIT0gTlVMTCk7CisJYXNzZXJ0KGlvYWRkciAhPSBOVUxMKTsKIAotCWRpcnR5X3R4ID0gYXRvbWljX3JlYWQgKCZ0cC0+ZGlydHlfdHgpOworCWRpcnR5X3R4ID0gYXRvbWljX3JlYWQoJnRwLT5kaXJ0eV90eCk7CiAKLQljdXJfdHggPSBhdG9taWNfcmVhZCAoJnRwLT5jdXJfdHgpOworCWN1cl90eCA9IGF0b21pY19yZWFkKCZ0cC0+Y3VyX3R4KTsKIAl0eF9sZWZ0ID0gY3VyX3R4IC0gZGlydHlfdHg7CiAJd2hpbGUgKHR4X2xlZnQgPiAwKSB7CiAJCWludCBlbnRyeSA9IGRpcnR5X3R4ICUgTlVNX1RYX0RFU0M7CiAJCWludCB0eHN0YXR1czsKIAotCQl0eHN0YXR1cyA9IE5FVERSVl9SMzIgKFR4U3RhdHVzMCArIChlbnRyeSAqIHNpemVvZiAodTMyKSkpOworCQl0eHN0YXR1cyA9IE5FVERSVl9SMzIoVHhTdGF0dXMwICsgKGVudHJ5ICogc2l6ZW9mKHUzMikpKTsKIAogCQlpZiAoISh0eHN0YXR1cyAmIChUeFN0YXRPSyB8IFR4VW5kZXJydW4gfCBUeEFib3J0ZWQpKSkKIAkJCWJyZWFrOwkvKiBJdCBzdGlsbCBoYXNuJ3QgYmVlbiBUeGVkICovCkBAIC0xMzg2LDEyICsxMzkyLDEyIEBACiAJCS8qIE5vdGU6IFR4Q2Fycmllckxvc3QgaXMgYWx3YXlzIGFzc2VydGVkIGF0IDEwMG1icHMuICovCiAJCWlmICh0eHN0YXR1cyAmIChUeE91dE9mV2luZG93IHwgVHhBYm9ydGVkKSkgewogCQkJLyogVGhlcmUgd2FzIGFuIG1ham9yIGVycm9yLCBsb2cgaXQuICovCi0JCQlEUFJJTlRLICgiJXM6IFRyYW5zbWl0IGVycm9yLCBUeCBzdGF0dXMgJTguOHguXG4iLAotCQkJCSBkZXYtPm5hbWUsIHR4c3RhdHVzKTsKKwkJCW5ldGRldl9kYmcoZGV2LCAiVHJhbnNtaXQgZXJyb3IsIFR4IHN0YXR1cyAlIzA4eFxuIiwKKwkJCQkgICB0eHN0YXR1cyk7CiAJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJaWYgKHR4c3RhdHVzICYgVHhBYm9ydGVkKSB7CiAJCQkJZGV2LT5zdGF0cy50eF9hYm9ydGVkX2Vycm9ycysrOwotCQkJCU5FVERSVl9XMzIgKFR4Q29uZmlnLCBUeENsZWFyQWJ0IHwgKFRYX0RNQV9CVVJTVCA8PCBUeERNQVNoaWZ0KSk7CisJCQkJTkVURFJWX1czMihUeENvbmZpZywgVHhDbGVhckFidCB8IChUWF9ETUFfQlVSU1QgPDwgVHhETUFTaGlmdCkpOwogCQkJfQogCQkJaWYgKHR4c3RhdHVzICYgVHhDYXJyaWVyTG9zdCkKIAkJCQlkZXYtPnN0YXRzLnR4X2NhcnJpZXJfZXJyb3JzKys7CkBAIC0xNDE3LDQ4ICsxNDIzLDQ1IEBACiAJCQkJCSBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJCXRwLT50eF9pbmZvW2VudHJ5XS5tYXBwaW5nID0gMDsKIAkJfQotCQlkZXZfa2ZyZWVfc2tiX2lycSAodHAtPnR4X2luZm9bZW50cnldLnNrYik7CisJCWRldl9rZnJlZV9za2JfaXJxKHRwLT50eF9pbmZvW2VudHJ5XS5za2IpOwogCQl0cC0+dHhfaW5mb1tlbnRyeV0uc2tiID0gTlVMTDsKIAkJZGlydHlfdHgrKzsKIAkJaWYgKGRpcnR5X3R4IDwgMCkgeyAvKiBoYW5kbGUgc2lnbmVkIGludCBvdmVyZmxvdyAqLwotCQkJYXRvbWljX3N1YiAoY3VyX3R4LCAmdHAtPmN1cl90eCk7IC8qIFhYWCByYWN5PyAqLworCQkJYXRvbWljX3N1YihjdXJfdHgsICZ0cC0+Y3VyX3R4KTsgLyogWFhYIHJhY3k/ICovCiAJCQlkaXJ0eV90eCA9IGN1cl90eCAtIHR4X2xlZnQgKyAxOwogCQl9Ci0JCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkIChkZXYpKQotCQkJbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKKwkJaWYgKG5ldGlmX3F1ZXVlX3N0b3BwZWQoZGV2KSkKKwkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAotCQljdXJfdHggPSBhdG9taWNfcmVhZCAoJnRwLT5jdXJfdHgpOworCQljdXJfdHggPSBhdG9taWNfcmVhZCgmdHAtPmN1cl90eCk7CiAJCXR4X2xlZnQgPSBjdXJfdHggLSBkaXJ0eV90eDsKIAogCX0KIAogI2lmbmRlZiBORVREUlZfTkRFQlVHCi0JaWYgKGF0b21pY19yZWFkICgmdHAtPmN1cl90eCkgLSBkaXJ0eV90eCA+IE5VTV9UWF9ERVNDKSB7Ci0JCXByaW50ayAoS0VSTl9FUlIKLQkJICAiJXM6IE91dC1vZi1zeW5jIGRpcnR5IHBvaW50ZXIsICVkIHZzLiAlZC5cbiIsCi0JCSAgICAgZGV2LT5uYW1lLCBkaXJ0eV90eCwgYXRvbWljX3JlYWQgKCZ0cC0+Y3VyX3R4KSk7CisJaWYgKGF0b21pY19yZWFkKCZ0cC0+Y3VyX3R4KSAtIGRpcnR5X3R4ID4gTlVNX1RYX0RFU0MpIHsKKwkJbmV0ZGV2X2VycihkZXYsICJPdXQtb2Ytc3luYyBkaXJ0eSBwb2ludGVyLCAlZCB2cy4gJWRcbiIsCisJCQkgICBkaXJ0eV90eCwgYXRvbWljX3JlYWQoJnRwLT5jdXJfdHgpKTsKIAkJZGlydHlfdHggKz0gTlVNX1RYX0RFU0M7CiAJfQogI2VuZGlmIC8qIE5FVERSVl9OREVCVUcgKi8KIAotCWF0b21pY19zZXQgKCZ0cC0+ZGlydHlfdHgsIGRpcnR5X3R4KTsKKwlhdG9taWNfc2V0KCZ0cC0+ZGlydHlfdHgsIGRpcnR5X3R4KTsKIH0KIAogCiAvKiBUT0RPOiBjbGVhbiB0aGlzIHVwISAgUnggcmVzZXQgbmVlZCBub3QgYmUgdGhpcyBpbnRlbnNpdmUgKi8KLXN0YXRpYyB2b2lkIG5ldGRydl9yeF9lcnIgKHUzMiByeF9zdGF0dXMsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JCQkgICAgc3RydWN0IG5ldGRydl9wcml2YXRlICp0cCwgdm9pZCAqaW9hZGRyKQorc3RhdGljIHZvaWQgbmV0ZHJ2X3J4X2Vycih1MzIgcnhfc3RhdHVzLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgbmV0ZHJ2X3ByaXZhdGUgKnRwLCB2b2lkICppb2FkZHIpCiB7CiAJdTggdG1wODsKIAlpbnQgdG1wX3dvcmsgPSAxMDAwOwogCi0JRFBSSU5USyAoIiVzOiBFdGhlcm5ldCBmcmFtZSBoYWQgZXJyb3JzLCBzdGF0dXMgJTguOHguXG4iLAotCSAgICAgICAgIGRldi0+bmFtZSwgcnhfc3RhdHVzKTsKLQlpZiAocnhfc3RhdHVzICYgUnhUb29Mb25nKSB7Ci0JCURQUklOVEsgKCIlczogT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lLCBzdGF0dXMgJTQuNHghXG4iLAotCQkJIGRldi0+bmFtZSwgcnhfc3RhdHVzKTsKKwluZXRkZXZfZGJnKGRldiwgIkV0aGVybmV0IGZyYW1lIGhhZCBlcnJvcnMsIHN0YXR1cyAlMDh4XG4iLCByeF9zdGF0dXMpOworCWlmIChyeF9zdGF0dXMgJiBSeFRvb0xvbmcpCisJCW5ldGRldl9kYmcoZGV2LCAiT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lLCBzdGF0dXMgJTA0eCFcbiIsCisJCQkgICByeF9zdGF0dXMpOwogCQkvKiBBLkMuOiBUaGUgY2hpcCBoYW5ncyBoZXJlLiAqLwotCX0KIAlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCWlmIChyeF9zdGF0dXMgJiAoUnhCYWRTeW1ib2wgfCBSeEJhZEFsaWduKSkKIAkJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMrKzsKQEAgLTE0NjYsNTYgKzE0NjksNTUgQEAKIAkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJaWYgKHJ4X3N0YXR1cyAmIFJ4Q1JDRXJyKQogCQlkZXYtPnN0YXRzLnJ4X2NyY19lcnJvcnMrKzsKLQkvKiBSZXNldCB0aGUgcmVjZWl2ZXIsIGJhc2VkIG9uIFJlYWxUZWsgcmVjb21tZW5kYXRpb24uIChCdWc/KSAqLworCS8qIFJlc2V0IHRoZSByZWNlaXZlciwgYmFzZWQgb24gUmVhbFRlayByZWNvbW1lbmRhdGlvbi4oQnVnPykgKi8KIAl0cC0+Y3VyX3J4ID0gMDsKIAogCS8qIGRpc2FibGUgcmVjZWl2ZSAqLwotCXRtcDggPSBORVREUlZfUjggKENoaXBDbWQpICYgQ2hpcENtZENsZWFyOwotCU5FVERSVl9XOF9GIChDaGlwQ21kLCB0bXA4IHwgQ21kVHhFbmIpOworCXRtcDggPSBORVREUlZfUjgoQ2hpcENtZCkgJiBDaGlwQ21kQ2xlYXI7CisJTkVURFJWX1c4X0YoQ2hpcENtZCwgdG1wOCB8IENtZFR4RW5iKTsKIAogCS8qIEEuQy46IFJlc2V0IHRoZSBtdWx0aWNhc3QgbGlzdC4gKi8KLQluZXRkcnZfc2V0X3J4X21vZGUgKGRldik7CisJbmV0ZHJ2X3NldF9yeF9tb2RlKGRldik7CiAKIAkvKiBYWFggcG90ZW50aWFsbHkgdGVtcG9yYXJ5IGhhY2sgdG8KIAkgKiByZXN0YXJ0IGh1bmcgcmVjZWl2ZXIgKi8KIAl3aGlsZSAoLS10bXBfd29yayA+IDApIHsKLQkJdG1wOCA9IE5FVERSVl9SOCAoQ2hpcENtZCk7CisJCXRtcDggPSBORVREUlZfUjgoQ2hpcENtZCk7CiAJCWlmICgodG1wOCAmIENtZFJ4RW5iKSAmJiAodG1wOCAmIENtZFR4RW5iKSkKIAkJCWJyZWFrOwotCQlORVREUlZfVzhfRiAoQ2hpcENtZCwKLQkJCSAgKHRtcDggJiBDaGlwQ21kQ2xlYXIpIHwgQ21kUnhFbmIgfCBDbWRUeEVuYik7CisJCU5FVERSVl9XOF9GKENoaXBDbWQsCisJCQkgICAgKHRtcDggJiBDaGlwQ21kQ2xlYXIpIHwgQ21kUnhFbmIgfCBDbWRUeEVuYik7CiAJfQogCiAJLyogRy5TLjogUmUtZW5hYmxlIHJlY2VpdmVyICovCiAJLyogWFhYIHRlbXBvcmFyeSBoYWNrIHRvIHdvcmsgYXJvdW5kIHJlY2VpdmVyIGhhbmcgKi8KLQluZXRkcnZfc2V0X3J4X21vZGUgKGRldik7CisJbmV0ZHJ2X3NldF9yeF9tb2RlKGRldik7CiAKIAlpZiAodG1wX3dvcmsgPD0gMCkKLQkJcHJpbnRrIChLRVJOX1dBUk5JTkcgUEZYICJ0eC9yeCBlbmFibGUgd2FpdCB0b28gbG9uZ1xuIik7CisJCW5ldGRldl93YXJuKGRldiwgInR4L3J4IGVuYWJsZSB3YWl0IHRvbyBsb25nXG4iKTsKIH0KIAogCiAvKiBUaGUgZGF0YSBzaGVldCBkb2Vzbid0IGRlc2NyaWJlIHRoZSBSeCByaW5nIGF0IGFsbCwgc28gSSdtIGd1ZXNzaW5nIGF0IHRoZQogICAgZmllbGQgYWxpZ25tZW50cyBhbmQgc2VtYW50aWNzLiAqLwotc3RhdGljIHZvaWQgbmV0ZHJ2X3J4X2ludGVycnVwdCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgIHN0cnVjdCBuZXRkcnZfcHJpdmF0ZSAqdHAsIHZvaWQgKmlvYWRkcikKK3N0YXRpYyB2b2lkIG5ldGRydl9yeF9pbnRlcnJ1cHQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3QgbmV0ZHJ2X3ByaXZhdGUgKnRwLCB2b2lkICppb2FkZHIpCiB7CiAJdW5zaWduZWQgY2hhciAqcnhfcmluZzsKIAl1MTYgY3VyX3J4OwogCi0JYXNzZXJ0IChkZXYgIT0gTlVMTCk7Ci0JYXNzZXJ0ICh0cCAhPSBOVUxMKTsKLQlhc3NlcnQgKGlvYWRkciAhPSBOVUxMKTsKKwlhc3NlcnQoZGV2ICE9IE5VTEwpOworCWFzc2VydCh0cCAhPSBOVUxMKTsKKwlhc3NlcnQoaW9hZGRyICE9IE5VTEwpOwogCiAJcnhfcmluZyA9IHRwLT5yeF9yaW5nOwogCWN1cl9yeCA9IHRwLT5jdXJfcng7CiAKLQlEUFJJTlRLICgiJXM6IEluIG5ldGRydl9yeCgpLCBjdXJyZW50ICU0LjR4IEJ1ZkFkZHIgJTQuNHgsIgotCQkgIiBmcmVlIHRvICU0LjR4LCBDbWQgJTIuMnguXG4iLCBkZXYtPm5hbWUsIGN1cl9yeCwKLQkJIE5FVERSVl9SMTYgKFJ4QnVmQWRkciksCi0JCSBORVREUlZfUjE2IChSeEJ1ZlB0ciksIE5FVERSVl9SOCAoQ2hpcENtZCkpOworCW5ldGRldl9kYmcoZGV2LCAiSW4gbmV0ZHJ2X3J4KCksIGN1cnJlbnQgJTA0eCBCdWZBZGRyICUwNHgsIGZyZWUgdG8gJTA0eCwgQ21kICUwMnhcbiIsCisJCSAgIGN1cl9yeCwgTkVURFJWX1IxNihSeEJ1ZkFkZHIpLAorCQkgICBORVREUlZfUjE2KFJ4QnVmUHRyKSwgTkVURFJWX1I4KENoaXBDbWQpKTsKIAotCXdoaWxlICgoTkVURFJWX1I4IChDaGlwQ21kKSAmIFJ4QnVmRW1wdHkpID09IDApIHsKKwl3aGlsZSAoKE5FVERSVl9SOChDaGlwQ21kKSAmIFJ4QnVmRW1wdHkpID09IDApIHsKIAkJaW50IHJpbmdfb2Zmc2V0ID0gY3VyX3J4ICUgUlhfQlVGX0xFTjsKIAkJdTMyIHJ4X3N0YXR1czsKIAkJdW5zaWduZWQgaW50IHJ4X3NpemU7CkBAIC0xNTIzLDMyICsxNTI1LDI1IEBACiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKIAkJLyogcmVhZCBzaXplK3N0YXR1cyBvZiBuZXh0IGZyYW1lIGZyb20gRE1BIHJpbmcgYnVmZmVyICovCi0JCXJ4X3N0YXR1cyA9IGxlMzJfdG9fY3B1ICgqKHUzMiAqKSAocnhfcmluZyArIHJpbmdfb2Zmc2V0KSk7CisJCXJ4X3N0YXR1cyA9IGxlMzJfdG9fY3B1KCoodTMyICopKHJ4X3JpbmcgKyByaW5nX29mZnNldCkpOwogCQlyeF9zaXplID0gcnhfc3RhdHVzID4+IDE2OwogCQlwa3Rfc2l6ZSA9IHJ4X3NpemUgLSA0OwogCi0JCURQUklOVEsgKCIlczogIG5ldGRydl9yeCgpIHN0YXR1cyAlNC40eCwgc2l6ZSAlNC40eCwiCi0JCQkgIiBjdXIgJTQuNHguXG4iLCBkZXYtPm5hbWUsIHJ4X3N0YXR1cywKLQkJCSByeF9zaXplLCBjdXJfcngpOworCQluZXRkZXZfZGJnKGRldiwgIm5ldGRydl9yeCgpIHN0YXR1cyAlMDR4LCBzaXplICUwNHgsIGN1ciAlMDR4XG4iLAorCQkJICAgcnhfc3RhdHVzLCByeF9zaXplLCBjdXJfcngpOwogI2lmIGRlZmluZWQoTkVURFJWX0RFQlVHKSAmJiAoTkVURFJWX0RFQlVHID4gMikKLQkJewotCQkJaW50IGk7Ci0JCQlEUFJJTlRLICgiJXM6IEZyYW1lIGNvbnRlbnRzICIsIGRldi0+bmFtZSk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgNzA7IGkrKykKLQkJCQlwcmludGsgKCIgJTIuMngiLAotCQkJCQlyeF9yaW5nW3Jpbmdfb2Zmc2V0ICsgaV0pOwotCQkJcHJpbnRrICgiLlxuIik7Ci0JCX0KKwkJcHJpbnRfaGV4X2R1bXBfYnl0ZXMoIkZyYW1lIGNvbnRlbnRzOiAiLCBIRVhfRFVNUF9PRkZTRVQsCisJCQkJICAgICAmcnhfcmluZ1tyaW5nX29mZnNldF0sIDcwKTsKICNlbmRpZgogCiAJCS8qIElmIFJ4IGVyciBvciBpbnZhbGlkIHJ4X3NpemUvcnhfc3RhdHVzIHJlY2VpdmVkCi0JCSAqICh3aGljaCBoYXBwZW5zIGlmIHdlIGdldCBsb3N0IGluIHRoZSByaW5nKSwKKwkJICood2hpY2ggaGFwcGVucyBpZiB3ZSBnZXQgbG9zdCBpbiB0aGUgcmluZyksCiAJCSAqIFJ4IHByb2Nlc3MgZ2V0cyByZXNldCwgc28gd2UgYWJvcnQgYW55IGZ1cnRoZXIKIAkJICogUnggcHJvY2Vzc2luZy4KIAkJICovCiAJCWlmICgocnhfc2l6ZSA+IChNQVhfRVRIX0ZSQU1FX1NJWkUrNCkpIHx8CiAJCSAgICAoIShyeF9zdGF0dXMgJiBSeFN0YXR1c09LKSkpIHsKLQkJCW5ldGRydl9yeF9lcnIgKHJ4X3N0YXR1cywgZGV2LCB0cCwgaW9hZGRyKTsKKwkJCW5ldGRydl9yeF9lcnIocnhfc3RhdHVzLCBkZXYsIHRwLCBpb2FkZHIpOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTE1NjEsNzEgKzE1NTYsNjcgQEAKIAkJICogZHJvcCBwYWNrZXRzIGhlcmUgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgogCQkgKi8KIAotCQlza2IgPSBkZXZfYWxsb2Nfc2tiIChwa3Rfc2l6ZSArIDIpOworCQlza2IgPSBkZXZfYWxsb2Nfc2tiKHBrdF9zaXplICsgMik7CiAJCWlmIChza2IpIHsKLQkJCXNrYl9yZXNlcnZlIChza2IsIDIpOwkvKiAxNiBieXRlIGFsaWduIHRoZSBJUCBmaWVsZHMuICovCisJCQlza2JfcmVzZXJ2ZShza2IsIDIpOwkvKiAxNiBieXRlIGFsaWduIHRoZSBJUCBmaWVsZHMuICovCiAKLQkJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhIChza2IsICZyeF9yaW5nW3Jpbmdfb2Zmc2V0ICsgNF0sIHBrdF9zaXplKTsKLQkJCXNrYl9wdXQgKHNrYiwgcGt0X3NpemUpOworCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCAmcnhfcmluZ1tyaW5nX29mZnNldCArIDRdLCBwa3Rfc2l6ZSk7CisJCQlza2JfcHV0KHNrYiwgcGt0X3NpemUpOwogCi0JCQlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMgKHNrYiwgZGV2KTsKLQkJCW5ldGlmX3J4IChza2IpOworCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwkJCW5ldGlmX3J4KHNrYik7CiAJCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHBrdF9zaXplOwogCQkJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsgKEtFUk5fV0FSTklORwotCQkJCSIlczogTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldC5cbiIsCi0JCQkJZGV2LT5uYW1lKTsKKwkJCW5ldGRldl93YXJuKGRldiwgIk1lbW9yeSBzcXVlZXplLCBkcm9wcGluZyBwYWNrZXRcbiIpOwogCQkJZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCX0KIAogCQljdXJfcnggPSAoY3VyX3J4ICsgcnhfc2l6ZSArIDQgKyAzKSAmIH4zOwotCQlORVREUlZfVzE2X0YgKFJ4QnVmUHRyLCBjdXJfcnggLSAxNik7CisJCU5FVERSVl9XMTZfRihSeEJ1ZlB0ciwgY3VyX3J4IC0gMTYpOwogCX0KIAotCURQUklOVEsgKCIlczogRG9uZSBuZXRkcnZfcngoKSwgY3VycmVudCAlNC40eCBCdWZBZGRyICU0LjR4LCIKLQkJICIgZnJlZSB0byAlNC40eCwgQ21kICUyLjJ4LlxuIiwgZGV2LT5uYW1lLCBjdXJfcngsCi0JCSBORVREUlZfUjE2IChSeEJ1ZkFkZHIpLAotCQkgTkVURFJWX1IxNiAoUnhCdWZQdHIpLCBORVREUlZfUjggKENoaXBDbWQpKTsKKwluZXRkZXZfZGJnKGRldiwgIkRvbmUgbmV0ZHJ2X3J4KCksIGN1cnJlbnQgJTA0eCBCdWZBZGRyICUwNHgsIGZyZWUgdG8gJTA0eCwgQ21kICUwMnhcbiIsCisJCSAgIGN1cl9yeCwgTkVURFJWX1IxNihSeEJ1ZkFkZHIpLAorCQkgICBORVREUlZfUjE2KFJ4QnVmUHRyKSwgTkVURFJWX1I4KENoaXBDbWQpKTsKIAogCXRwLT5jdXJfcnggPSBjdXJfcng7CiB9CiAKIAotc3RhdGljIHZvaWQgbmV0ZHJ2X3dlaXJkX2ludGVycnVwdCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBuZXRkcnZfcHJpdmF0ZSAqdHAsCi0JCQkJICAgICB2b2lkICppb2FkZHIsCi0JCQkJICAgICBpbnQgc3RhdHVzLCBpbnQgbGlua19jaGFuZ2VkKQorc3RhdGljIHZvaWQgbmV0ZHJ2X3dlaXJkX2ludGVycnVwdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBuZXRkcnZfcHJpdmF0ZSAqdHAsCisJCQkJICAgdm9pZCAqaW9hZGRyLAorCQkJCSAgIGludCBzdGF0dXMsIGludCBsaW5rX2NoYW5nZWQpCiB7Ci0JcHJpbnRrIChLRVJOX0RFQlVHICIlczogQWJub3JtYWwgaW50ZXJydXB0LCBzdGF0dXMgJTguOHguXG4iLAotCQlkZXYtPm5hbWUsIHN0YXR1cyk7CisJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICJBYm5vcm1hbCBpbnRlcnJ1cHQsIHN0YXR1cyAlMDh4XG4iLAorCQkgICAgICBzdGF0dXMpOwogCi0JYXNzZXJ0IChkZXYgIT0gTlVMTCk7Ci0JYXNzZXJ0ICh0cCAhPSBOVUxMKTsKLQlhc3NlcnQgKGlvYWRkciAhPSBOVUxMKTsKKwlhc3NlcnQoZGV2ICE9IE5VTEwpOworCWFzc2VydCh0cCAhPSBOVUxMKTsKKwlhc3NlcnQoaW9hZGRyICE9IE5VTEwpOwogCiAJLyogVXBkYXRlIHRoZSBlcnJvciBjb3VudC4gKi8KLQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gTkVURFJWX1IzMiAoUnhNaXNzZWQpOwotCU5FVERSVl9XMzIgKFJ4TWlzc2VkLCAwKTsKKwlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gTkVURFJWX1IzMihSeE1pc3NlZCk7CisJTkVURFJWX1czMihSeE1pc3NlZCwgMCk7CiAKIAlpZiAoKHN0YXR1cyAmIFJ4VW5kZXJydW4pICYmIGxpbmtfY2hhbmdlZCAmJgogCSAgICAodHAtPmRydl9mbGFncyAmIEhBU19MTktfQ0hORykpIHsKIAkJLyogUmVhbGx5IGxpbmstY2hhbmdlIG9uIG5ldyBjaGlwcy4gKi8KLQkJaW50IGxwYXIgPSBORVREUlZfUjE2IChOV2F5TFBBUik7CisJCWludCBscGFyID0gTkVURFJWX1IxNihOV2F5TFBBUik7CiAJCWludCBkdXBsZXggPSAoKGxwYXIgJiAweDAxMDApIHx8IChscGFyICYgMHgwMUMwKSA9PSAweDAwNDAgfHwKLQkJCSAgICAgIHRwLT5kdXBsZXhfbG9jayk7CisJCQkgICAgIHRwLT5kdXBsZXhfbG9jayk7CiAJCWlmICh0cC0+ZnVsbF9kdXBsZXggIT0gZHVwbGV4KSB7CiAJCQl0cC0+ZnVsbF9kdXBsZXggPSBkdXBsZXg7Ci0JCQlORVREUlZfVzggKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKLQkJCU5FVERSVl9XOCAoQ29uZmlnMSwgdHAtPmZ1bGxfZHVwbGV4ID8gMHg2MCA6IDB4MjApOwotCQkJTkVURFJWX1c4IChDZmc5MzQ2LCBDZmc5MzQ2X0xvY2spOworCQkJTkVURFJWX1c4KENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKKwkJCU5FVERSVl9XOChDb25maWcxLCB0cC0+ZnVsbF9kdXBsZXggPyAweDYwIDogMHgyMCk7CisJCQlORVREUlZfVzgoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsKIAkJfQogCQlzdGF0dXMgJj0gflJ4VW5kZXJydW47CiAJfQogCiAJLyogWFhYIGFsb25nIHdpdGggbmV0ZHJ2X3J4X2VyciwgYXJlIHdlIGRvdWJsZS1jb3VudGluZyBlcnJvcnM/ICovCi0JaWYgKHN0YXR1cyAmCi0JICAgIChSeFVuZGVycnVuIHwgUnhPdmVyZmxvdyB8IFJ4RXJyIHwgUnhGSUZPT3ZlcikpCisJaWYgKHN0YXR1cyAmIChSeFVuZGVycnVuIHwgUnhPdmVyZmxvdyB8IFJ4RXJyIHwgUnhGSUZPT3ZlcikpCiAJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAKIAlpZiAoc3RhdHVzICYgKFBDU1RpbWVvdXQpKQpAQCAtMTYzNCwyMiArMTYyNSwyMSBAQAogCQlkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzKys7CiAJaWYgKHN0YXR1cyAmIFJ4T3ZlcmZsb3cpIHsKIAkJZGV2LT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOwotCQl0cC0+Y3VyX3J4ID0gTkVURFJWX1IxNiAoUnhCdWZBZGRyKSAlIFJYX0JVRl9MRU47Ci0JCU5FVERSVl9XMTZfRiAoUnhCdWZQdHIsIHRwLT5jdXJfcnggLSAxNik7CisJCXRwLT5jdXJfcnggPSBORVREUlZfUjE2KFJ4QnVmQWRkcikgJSBSWF9CVUZfTEVOOworCQlORVREUlZfVzE2X0YoUnhCdWZQdHIsIHRwLT5jdXJfcnggLSAxNik7CiAJfQogCWlmIChzdGF0dXMgJiBQQ0lFcnIpIHsKIAkJdTE2IHBjaV9jbWRfc3RhdHVzOwotCQlwY2lfcmVhZF9jb25maWdfd29yZCAodHAtPnBjaV9kZXYsIFBDSV9TVEFUVVMsICZwY2lfY21kX3N0YXR1cyk7CisJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHRwLT5wY2lfZGV2LCBQQ0lfU1RBVFVTLCAmcGNpX2NtZF9zdGF0dXMpOwogCi0JCXByaW50ayAoS0VSTl9FUlIgIiVzOiBQQ0kgQnVzIGVycm9yICU0LjR4LlxuIiwKLQkJCWRldi0+bmFtZSwgcGNpX2NtZF9zdGF0dXMpOworCQluZXRkZXZfZXJyKGRldiwgIlBDSSBCdXMgZXJyb3IgJTA0eFxuIiwgcGNpX2NtZF9zdGF0dXMpOwogCX0KIH0KIAogCiAvKiBUaGUgaW50ZXJydXB0IGhhbmRsZXIgZG9lcyBhbGwgb2YgdGhlIFJ4IHRocmVhZCB3b3JrIGFuZCBjbGVhbnMgdXAKICAgIGFmdGVyIHRoZSBUeCB0aHJlYWQuICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgbmV0ZHJ2X2ludGVycnVwdCAoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQorc3RhdGljIGlycXJldHVybl90IG5ldGRydl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGV2X2luc3RhbmNlOwogCXN0cnVjdCBuZXRkcnZfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMTY1OCwyMiArMTY0OCwyMSBAQAogCWludCBzdGF0dXMgPSAwLCBsaW5rX2NoYW5nZWQgPSAwOyAvKiBhdm9pZCBib2d1cyAidW5pbml0IiB3YXJuaW5nICovCiAJaW50IGhhbmRsZWQgPSAwOwogCi0Jc3Bpbl9sb2NrICgmdHAtPmxvY2spOworCXNwaW5fbG9jaygmdHAtPmxvY2spOwogCiAJZG8gewotCQlzdGF0dXMgPSBORVREUlZfUjE2IChJbnRyU3RhdHVzKTsKKwkJc3RhdHVzID0gTkVURFJWX1IxNihJbnRyU3RhdHVzKTsKIAotCQkvKiBoL3cgbm8gbG9uZ2VyIHByZXNlbnQgKGhvdHBsdWc/KSBvciBtYWpvciBlcnJvciwgYmFpbCAqLworCQkvKiBoL3cgbm8gbG9uZ2VyIHByZXNlbnQoaG90cGx1Zz8pIG9yIG1ham9yIGVycm9yLCBiYWlsICovCiAJCWlmIChzdGF0dXMgPT0gMHhGRkZGKQogCQkJYnJlYWs7CiAKIAkJaGFuZGxlZCA9IDE7CiAJCS8qIEFja25vd2xlZGdlIGFsbCBvZiB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc291cmNlcyBBU0FQICovCi0JCU5FVERSVl9XMTZfRiAoSW50clN0YXR1cywgc3RhdHVzKTsKKwkJTkVURFJWX1cxNl9GKEludHJTdGF0dXMsIHN0YXR1cyk7CiAKLQkJRFBSSU5USyAoIiVzOiBpbnRlcnJ1cHQgIHN0YXR1cz0lIzQuNHggbmV3IGludHN0YXQ9JSM0LjR4LlxuIiwKLQkJCQlkZXYtPm5hbWUsIHN0YXR1cywKLQkJCQlORVREUlZfUjE2IChJbnRyU3RhdHVzKSk7CisJCW5ldGRldl9kYmcoZGV2LCAiaW50ZXJydXB0ICBzdGF0dXM9JSMwNHggbmV3IGludHN0YXQ9JSMwNHhcbiIsCisJCQkgICBzdGF0dXMsIE5FVERSVl9SMTYoSW50clN0YXR1cykpOwogCiAJCWlmICgoc3RhdHVzICYKIAkJICAgICAoUENJRXJyIHwgUENTVGltZW91dCB8IFJ4VW5kZXJydW4gfCBSeE92ZXJmbG93IHwKQEAgLTE2ODIsNjkgKzE2NzEsNjcgQEAKIAogCQkvKiBDaGVjayB1bmNvbW1vbiBldmVudHMgd2l0aCBvbmUgdGVzdC4gKi8KIAkJaWYgKHN0YXR1cyAmIChQQ0lFcnIgfCBQQ1NUaW1lb3V0IHwgUnhVbmRlcnJ1biB8IFJ4T3ZlcmZsb3cgfAotCQkgIAkgICAgICBSeEZJRk9PdmVyIHwgVHhFcnIgfCBSeEVycikpCi0JCQluZXRkcnZfd2VpcmRfaW50ZXJydXB0IChkZXYsIHRwLCBpb2FkZHIsCi0JCQkJCQkgc3RhdHVzLCBsaW5rX2NoYW5nZWQpOworCQkJICAgICBSeEZJRk9PdmVyIHwgVHhFcnIgfCBSeEVycikpCisJCQluZXRkcnZfd2VpcmRfaW50ZXJydXB0KGRldiwgdHAsIGlvYWRkciwKKwkJCQkJICAgICAgIHN0YXR1cywgbGlua19jaGFuZ2VkKTsKIAogCQlpZiAoc3RhdHVzICYgKFJ4T0sgfCBSeFVuZGVycnVuIHwgUnhPdmVyZmxvdyB8IFJ4RklGT092ZXIpKQkvKiBSeCBpbnRlcnJ1cHQgKi8KLQkJCW5ldGRydl9yeF9pbnRlcnJ1cHQgKGRldiwgdHAsIGlvYWRkcik7CisJCQluZXRkcnZfcnhfaW50ZXJydXB0KGRldiwgdHAsIGlvYWRkcik7CiAKIAkJaWYgKHN0YXR1cyAmIChUeE9LIHwgVHhFcnIpKQotCQkJbmV0ZHJ2X3R4X2ludGVycnVwdCAoZGV2LCB0cCwgaW9hZGRyKTsKKwkJCW5ldGRydl90eF9pbnRlcnJ1cHQoZGV2LCB0cCwgaW9hZGRyKTsKIAogCQlib2d1c2NudC0tOwogCX0gd2hpbGUgKGJvZ3VzY250ID4gMCk7CiAKIAlpZiAoYm9ndXNjbnQgPD0gMCkgewotCQlwcmludGsgKEtFUk5fV0FSTklORwotCQkJIiVzOiBUb28gbXVjaCB3b3JrIGF0IGludGVycnVwdCwgIgotCQkJIkludHJTdGF0dXM9MHglNC40eC5cbiIsIGRldi0+bmFtZSwKLQkJCXN0YXR1cyk7CisJCW5ldGRldl93YXJuKGRldiwgIlRvbyBtdWNoIHdvcmsgYXQgaW50ZXJydXB0LCBJbnRyU3RhdHVzPSUjMDR4XG4iLAorCQkJICAgIHN0YXR1cyk7CiAKIAkJLyogQ2xlYXIgYWxsIGludGVycnVwdCBzb3VyY2VzLiAqLwotCQlORVREUlZfVzE2IChJbnRyU3RhdHVzLCAweGZmZmYpOworCQlORVREUlZfVzE2KEludHJTdGF0dXMsIDB4ZmZmZik7CiAJfQogCi0Jc3Bpbl91bmxvY2sgKCZ0cC0+bG9jayk7CisJc3Bpbl91bmxvY2soJnRwLT5sb2NrKTsKIAotCURQUklOVEsgKCIlczogZXhpdGluZyBpbnRlcnJ1cHQsIGludHJfc3RhdHVzPSUjNC40eC5cbiIsCi0JCSBkZXYtPm5hbWUsIE5FVERSVl9SMTYgKEludHJTdGF0dXMpKTsKKwluZXRkZXZfZGJnKGRldiwgImV4aXRpbmcgaW50ZXJydXB0LCBpbnRyX3N0YXR1cz0lIzA0eFxuIiwKKwkJICAgTkVURFJWX1IxNihJbnRyU3RhdHVzKSk7CiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CiB9CiAKIAotc3RhdGljIGludCBuZXRkcnZfY2xvc2UgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IG5ldGRydl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBuZXRkcnZfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCURQUklOVEsgKCJFTlRFUlxuIik7CisJRFBSSU5USygiRU5URVJcbiIpOwogCi0JbmV0aWZfc3RvcF9xdWV1ZSAoZGV2KTsKKwluZXRpZl9zdG9wX3F1ZXVlKGRldik7CiAKLQlEUFJJTlRLICgiJXM6IFNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCBzdGF0dXMgd2FzIDB4JTQuNHguXG4iLAotCQkJZGV2LT5uYW1lLCBORVREUlZfUjE2IChJbnRyU3RhdHVzKSk7CisJbmV0ZGV2X2RiZyhkZXYsICJTaHV0dGluZyBkb3duIGV0aGVyY2FyZCwgc3RhdHVzIHdhcyAlIzA0eFxuIiwKKwkJICAgTkVURFJWX1IxNihJbnRyU3RhdHVzKSk7CiAKLQlkZWxfdGltZXJfc3luYyAoJnRwLT50aW1lcik7CisJZGVsX3RpbWVyX3N5bmMoJnRwLT50aW1lcik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSAoJnRwLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBTdG9wIHRoZSBjaGlwJ3MgVHggYW5kIFJ4IERNQSBwcm9jZXNzZXMuICovCi0JTkVURFJWX1c4IChDaGlwQ21kLCAoTkVURFJWX1I4IChDaGlwQ21kKSAmIENoaXBDbWRDbGVhcikpOworCU5FVERSVl9XOChDaGlwQ21kLCAoTkVURFJWX1I4KENoaXBDbWQpICYgQ2hpcENtZENsZWFyKSk7CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgYnkgY2xlYXJpbmcgdGhlIGludGVycnVwdCBtYXNrLiAqLwotCU5FVERSVl9XMTYgKEludHJNYXNrLCAweDAwMDApOworCU5FVERSVl9XMTYoSW50ck1hc2ssIDB4MDAwMCk7CiAKIAkvKiBVcGRhdGUgdGhlIGVycm9yIGNvdW50cy4gKi8KLQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gTkVURFJWX1IzMiAoUnhNaXNzZWQpOwotCU5FVERSVl9XMzIgKFJ4TWlzc2VkLCAwKTsKKwlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gTkVURFJWX1IzMihSeE1pc3NlZCk7CisJTkVURFJWX1czMihSeE1pc3NlZCwgMCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmdHAtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOwogCi0JZnJlZV9pcnEgKGRldi0+aXJxLCBkZXYpOworCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCi0JbmV0ZHJ2X3R4X2NsZWFyIChkZXYpOworCW5ldGRydl90eF9jbGVhcihkZXYpOwogCiAJcGNpX2ZyZWVfY29uc2lzdGVudCh0cC0+cGNpX2RldiwgUlhfQlVGX1RPVF9MRU4sCiAJCQkgICAgdHAtPnJ4X3JpbmcsIHRwLT5yeF9yaW5nX2RtYSk7CkBAIC0xNzU0LDIzICsxNzQxLDIzIEBACiAJdHAtPnR4X2J1ZnMgPSBOVUxMOwogCiAJLyogR3JlZW4hIFB1dCB0aGUgY2hpcCBpbiBsb3ctcG93ZXIgbW9kZS4gKi8KLQlORVREUlZfVzggKENmZzkzNDYsIENmZzkzNDZfVW5sb2NrKTsKLQlORVREUlZfVzggKENvbmZpZzEsIDB4MDMpOwotCU5FVERSVl9XOCAoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsKKwlORVREUlZfVzgoQ2ZnOTM0NiwgQ2ZnOTM0Nl9VbmxvY2spOworCU5FVERSVl9XOChDb25maWcxLCAweDAzKTsKKwlORVREUlZfVzgoQ2ZnOTM0NiwgQ2ZnOTM0Nl9Mb2NrKTsKIAotCURQUklOVEsgKCJFWElUXG4iKTsKKwlEUFJJTlRLKCJFWElUXG4iKTsKIAlyZXR1cm4gMDsKIH0KIAogCi1zdGF0aWMgaW50IG5ldGRydl9pb2N0bCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKK3N0YXRpYyBpbnQgbmV0ZHJ2X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCiB7CiAJc3RydWN0IG5ldGRydl9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG1paV9pb2N0bF9kYXRhICpkYXRhID0gaWZfbWlpKHJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByYyA9IDA7CiAKLQlEUFJJTlRLICgiRU5URVJcbiIpOworCURQUklOVEsoIkVOVEVSXG4iKTsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTSU9DR01JSVBIWToJCS8qIEdldCBhZGRyZXNzIG9mIE1JSSBQSFkgaW4gdXNlLiAqLwpAQCAtMTc3OCwxNSArMTc2NSwxNSBAQAogCQkvKiBGYWxsIFRocm91Z2ggKi8KIAogCWNhc2UgU0lPQ0dNSUlSRUc6CQkvKiBSZWFkIE1JSSBQSFkgcmVnaXN0ZXIuICovCi0JCXNwaW5fbG9ja19pcnFzYXZlICgmdHAtPmxvY2ssIGZsYWdzKTsKLQkJZGF0YS0+dmFsX291dCA9IG1kaW9fcmVhZCAoZGV2LCBkYXRhLT5waHlfaWQgJiAweDFmLCBkYXRhLT5yZWdfbnVtICYgMHgxZik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZ0cC0+bG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPmxvY2ssIGZsYWdzKTsKKwkJZGF0YS0+dmFsX291dCA9IG1kaW9fcmVhZChkZXYsIGRhdGEtPnBoeV9pZCAmIDB4MWYsIGRhdGEtPnJlZ19udW0gJiAweDFmKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAKIAljYXNlIFNJT0NTTUlJUkVHOgkJLyogV3JpdGUgTUlJIFBIWSByZWdpc3Rlci4gKi8KLQkJc3Bpbl9sb2NrX2lycXNhdmUgKCZ0cC0+bG9jaywgZmxhZ3MpOwotCQltZGlvX3dyaXRlIChkZXYsIGRhdGEtPnBoeV9pZCAmIDB4MWYsIGRhdGEtPnJlZ19udW0gJiAweDFmLCBkYXRhLT52YWxfaW4pOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmdHAtPmxvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7CisJCW1kaW9fd3JpdGUoZGV2LCBkYXRhLT5waHlfaWQgJiAweDFmLCBkYXRhLT5yZWdfbnVtICYgMHgxZiwgZGF0YS0+dmFsX2luKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZsYWdzKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtMTc5NCw0MyArMTc4MSw0MyBAQAogCQlicmVhazsKIAl9CiAKLQlEUFJJTlRLICgiRVhJVCwgcmV0dXJuaW5nICVkXG4iLCByYyk7CisJRFBSSU5USygiRVhJVCwgcmV0dXJuaW5nICVkXG4iLCByYyk7CiAJcmV0dXJuIHJjOwogfQogCiAvKiBTZXQgb3IgY2xlYXIgdGhlIG11bHRpY2FzdCBmaWx0ZXIgZm9yIHRoaXMgYWRhcHRvci4KICAgIFRoaXMgcm91dGluZSBpcyBub3Qgc3RhdGUgc2Vuc2l0aXZlIGFuZCBuZWVkIG5vdCBiZSBTTVAgbG9ja2VkLiAqLwogCi1zdGF0aWMgdm9pZCBuZXRkcnZfc2V0X3J4X21vZGUgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBuZXRkcnZfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbmV0ZHJ2X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwogCXUzMiBtY19maWx0ZXJbMl07CS8qIE11bHRpY2FzdCBoYXNoIGZpbHRlciAqLwotCWludCBpLCByeF9tb2RlOworCWludCByeF9tb2RlOwogCXUzMiB0bXA7CiAKLQlEUFJJTlRLICgiRU5URVJcbiIpOworCURQUklOVEsoIkVOVEVSXG4iKTsKIAotCURQUklOVEsgKCIlczogICBuZXRkcnZfc2V0X3J4X21vZGUoJTQuNHgpIGRvbmUgLS0gUnggY29uZmlnICU4Ljh4LlxuIiwKLQkJCWRldi0+bmFtZSwgZGV2LT5mbGFncywgTkVURFJWX1IzMiAoUnhDb25maWcpKTsKKwluZXRkZXZfZGJnKGRldiwgIiVzKCUwNHgpIGRvbmUgLS0gUnggY29uZmlnICUwOGx4XG4iLAorCQkgICBfX2Z1bmNfXywgZGV2LT5mbGFncywgTkVURFJWX1IzMihSeENvbmZpZykpOwogCiAJLyogTm90ZTogZG8gbm90IHJlb3JkZXIsIEdDQyBpcyBjbGV2ZXIgYWJvdXQgY29tbW9uIHN0YXRlbWVudHMuICovCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQlyeF9tb2RlID0KLQkJICAgIEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE11bHRpY2FzdCB8IEFjY2VwdE15UGh5cyB8Ci0JCSAgICBBY2NlcHRBbGxQaHlzOworCQkJQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXVsdGljYXN0IHwgQWNjZXB0TXlQaHlzIHwKKwkJCUFjY2VwdEFsbFBoeXM7CiAJCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDB4ZmZmZmZmZmY7Ci0JfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpIHx8CisJfSBlbHNlIGlmICgobmV0ZGV2X21jX2NvdW50KGRldikgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSB8fAogCQkgICAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJLyogVG9vIG1hbnkgdG8gZmlsdGVyIHBlcmZlY3RseSAtLSBhY2NlcHQgYWxsIG11bHRpY2FzdHMuICovCiAJCXJ4X21vZGUgPSBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBBY2NlcHRNeVBoeXM7CiAJCW1jX2ZpbHRlclsxXSA9IG1jX2ZpbHRlclswXSA9IDB4ZmZmZmZmZmY7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CisKIAkJcnhfbW9kZSA9IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE11bHRpY2FzdCB8IEFjY2VwdE15UGh5czsKIAkJbWNfZmlsdGVyWzFdID0gbWNfZmlsdGVyWzBdID0gMDsKLQkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7Ci0JCSAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCWludCBiaXRfbnIgPSBldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpID4+IDI2OwogCiAJCQltY19maWx0ZXJbYml0X25yID4+IDVdIHw9IDEgPDwgKGJpdF9uciAmIDMxKTsKQEAgLTE4MzgsNjYgKzE4MjUsNjYgQEAKIAl9CiAKIAkvKiBpZiBjYWxsZWQgZnJvbSBpcnEgaGFuZGxlciwgbG9jayBhbHJlYWR5IGFjcXVpcmVkICovCi0JaWYgKCFpbl9pcnEgKCkpCi0JCXNwaW5fbG9ja19pcnEgKCZ0cC0+bG9jayk7CisJaWYgKCFpbl9pcnEoKSkKKwkJc3Bpbl9sb2NrX2lycSgmdHAtPmxvY2spOwogCiAJLyogV2UgY2FuIHNhZmVseSB1cGRhdGUgd2l0aG91dCBzdG9wcGluZyB0aGUgY2hpcC4gKi8KIAl0bXAgPSBuZXRkcnZfcnhfY29uZmlnIHwgcnhfbW9kZSB8Ci0JCShORVREUlZfUjMyIChSeENvbmZpZykgJiBydGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0XS5SeENvbmZpZ01hc2spOwotCU5FVERSVl9XMzJfRiAoUnhDb25maWcsIHRtcCk7Ci0JTkVURFJWX1czMl9GIChNQVIwICsgMCwgbWNfZmlsdGVyWzBdKTsKLQlORVREUlZfVzMyX0YgKE1BUjAgKyA0LCBtY19maWx0ZXJbMV0pOworCQkoTkVURFJWX1IzMihSeENvbmZpZykgJiBydGxfY2hpcF9pbmZvW3RwLT5jaGlwc2V0XS5SeENvbmZpZ01hc2spOworCU5FVERSVl9XMzJfRihSeENvbmZpZywgdG1wKTsKKwlORVREUlZfVzMyX0YoTUFSMCArIDAsIG1jX2ZpbHRlclswXSk7CisJTkVURFJWX1czMl9GKE1BUjAgKyA0LCBtY19maWx0ZXJbMV0pOwogCi0JaWYgKCFpbl9pcnEgKCkpCi0JCXNwaW5fdW5sb2NrX2lycSAoJnRwLT5sb2NrKTsKKwlpZiAoIWluX2lycSgpKQorCQlzcGluX3VubG9ja19pcnEoJnRwLT5sb2NrKTsKIAotCURQUklOVEsgKCJFWElUXG4iKTsKKwlEUFJJTlRLKCJFWElUXG4iKTsKIH0KIAogCiAjaWZkZWYgQ09ORklHX1BNCiAKLXN0YXRpYyBpbnQgbmV0ZHJ2X3N1c3BlbmQgKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCitzdGF0aWMgaW50IG5ldGRydl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YSAocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgbmV0ZHJ2X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIDA7Ci0JbmV0aWZfZGV2aWNlX2RldGFjaCAoZGV2KTsKKwluZXRpZl9kZXZpY2VfZGV0YWNoKGRldik7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSAoJnRwLT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMsIHN0b3AgVHggYW5kIFJ4LiAqLwotCU5FVERSVl9XMTYgKEludHJNYXNrLCAweDAwMDApOwotCU5FVERSVl9XOCAoQ2hpcENtZCwgKE5FVERSVl9SOCAoQ2hpcENtZCkgJiBDaGlwQ21kQ2xlYXIpKTsKKwlORVREUlZfVzE2KEludHJNYXNrLCAweDAwMDApOworCU5FVERSVl9XOChDaGlwQ21kLCAoTkVURFJWX1I4KENoaXBDbWQpICYgQ2hpcENtZENsZWFyKSk7CiAKIAkvKiBVcGRhdGUgdGhlIGVycm9yIGNvdW50cy4gKi8KLQlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gTkVURFJWX1IzMiAoUnhNaXNzZWQpOwotCU5FVERSVl9XMzIgKFJ4TWlzc2VkLCAwKTsKKwlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgKz0gTkVURFJWX1IzMihSeE1pc3NlZCk7CisJTkVURFJWX1czMihSeE1pc3NlZCwgMCk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmdHAtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOwogCi0JcGNpX3NhdmVfc3RhdGUgKHBkZXYpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUgKHBkZXYsIFBDSV9EM2hvdCk7CisJcGNpX3NhdmVfc3RhdGUocGRldik7CisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDNob3QpOwogCiAJcmV0dXJuIDA7CiB9CiAKIAotc3RhdGljIGludCBuZXRkcnZfcmVzdW1lIChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3N0YXRpYyBpbnQgbmV0ZHJ2X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhIChwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwogCS8qc3RydWN0IG5ldGRydl9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7Ki8KIAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlyZXR1cm4gMDsKLQlwY2lfc2V0X3Bvd2VyX3N0YXRlIChwZGV2LCBQQ0lfRDApOwotCXBjaV9yZXN0b3JlX3N0YXRlIChwZGV2KTsKLQluZXRpZl9kZXZpY2VfYXR0YWNoIChkZXYpOwotCW5ldGRydl9od19zdGFydCAoZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOworCW5ldGRydl9od19zdGFydChkZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xOTE3LDcgKzE5MDQsNyBAQAogfTsKIAogCi1zdGF0aWMgaW50IF9faW5pdCBuZXRkcnZfaW5pdF9tb2R1bGUgKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBuZXRkcnZfaW5pdF9tb2R1bGUodm9pZCkKIHsKIC8qIHdoZW4gYSBtb2R1bGUsIHRoaXMgaXMgcHJpbnRlZCB3aGV0aGVyIG9yIG5vdCBkZXZpY2VzIGFyZSBmb3VuZCBpbiBwcm9iZSAqLwogI2lmZGVmIE1PRFVMRQpAQCAtMTkyNyw5ICsxOTE0LDkgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCBfX2V4aXQgbmV0ZHJ2X2NsZWFudXBfbW9kdWxlICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IG5ldGRydl9jbGVhbnVwX21vZHVsZSh2b2lkKQogewotCXBjaV91bnJlZ2lzdGVyX2RyaXZlciAoJm5ldGRydl9wY2lfZHJpdmVyKTsKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJm5ldGRydl9wY2lfZHJpdmVyKTsKIH0KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1NzRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCmluZGV4IDk4OTM4ZWEuLjNkMWQzYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU3NF9jcy5jCkBAIC0xMTQ4LDcgKzExNDgsNyBAQAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCiAJCW91dHcoU2V0UnhGaWx0ZXIgfCBSeFN0YXRpb24gfCBSeE11bHRpY2FzdCB8IFJ4QnJvYWRjYXN0IHwgUnhQcm9tLAogCQkJIGlvYWRkciArIEVMM19DTUQpOwotCWVsc2UgaWYgKGRldi0+bWNfY291bnQgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKQorCWVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpCiAJCW91dHcoU2V0UnhGaWx0ZXJ8UnhTdGF0aW9ufFJ4TXVsdGljYXN0fFJ4QnJvYWRjYXN0LCBpb2FkZHIgKyBFTDNfQ01EKTsKIAllbHNlCiAJCW91dHcoU2V0UnhGaWx0ZXIgfCBSeFN0YXRpb24gfCBSeEJyb2FkY2FzdCwgaW9hZGRyICsgRUwzX0NNRCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS8zYzU4OV9jcy5jCmluZGV4IDMyMmUxMWQuLjA5MWUwYjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYworKysgYi9kcml2ZXJzL25ldC9wY21jaWEvM2M1ODlfY3MuYwpAQCAtODg2LDcgKzg4Niw3IEBACiAKICAgICBpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQogCW9wdHMgfD0gUnhNdWx0aWNhc3QgfCBSeFByb207Ci0gICAgZWxzZSBpZiAoZGV2LT5tY19jb3VudCB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpCisgICAgZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkKIAlvcHRzIHw9IFJ4TXVsdGljYXN0OwogICAgIG91dHcob3B0cywgaW9hZGRyICsgRUwzX0NNRCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvYXhuZXRfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCmluZGV4IGQ0MzFiNTkuLjA5MjkxZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9heG5ldF9jcy5jCkBAIC03NzksNiArNzc5LDcgQEAKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQ05ldCIsICJDTkYzMDEiLCAweGJjNDc3ZGRlLCAweDc4YzVmNDBiKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiY29yZWdhIEsuSy4iLCAiY29yZWdhIEZFdGhlciBQQ0MtVFhEIiwgMHg1MjYxNDQwZiwgMHg0MzY3NjhjNSksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoImNvcmVnYSBLLksuIiwgImNvcmVnYSBGRXRoZXJJSSBQQ0MtVFhEIiwgMHg1MjYxNDQwZiwgMHg3MzBkZjcyZSksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoImNvcmVnYSBLLksuIiwgImNvcmVnYSBGRXRoZXIgUENDLVRYTSIsIDB4NTI2MTQ0MGYsIDB4M2FiYmQwNjEpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJEeW5hbGluayIsICJMMTAwQzE2IiwgMHg1NTYzMmZkNSwgMHg2NmJjMmE5MCksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIklPIERBVEEiLCAiRVRYUENNIiwgMHg1NDdlNjZkYywgMHgyMzNhZGFjMiksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkxpbmtzeXMiLCAiRXRoZXJGYXN0IDEwLzEwMCBQQyBDYXJkIChQQ01QQzEwMCBWMykiLCAweDA3MzNjYzgxLCAweDIzMjAxOWE4KSwKQEAgLTEwNjUsMTQgKzEwNjYsMTEgQEAKIAkgICAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZWlfbG9jYWwtPnBhZ2VfbG9jaywgZmxhZ3MpOwogCW91dGJfcCgweDAwLCBlODM5MF9iYXNlICsgRU4wX0lNUik7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWlfbG9jYWwtPnBhZ2VfbG9jaywgZmxhZ3MpOwogCQogCS8qCiAJICoJU2xvdyBwaGFzZSB3aXRoIGxvY2sgaGVsZC4KIAkgKi8KIAkgCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmVpX2xvY2FsLT5wYWdlX2xvY2ssIGZsYWdzKTsKLQkKIAllaV9sb2NhbC0+aXJxbG9jayA9IDE7CiAKIAlzZW5kX2xlbmd0aCA9IG1heChsZW5ndGgsIEVUSF9aTEVOKTsKQEAgLTE2MjgsOCArMTYyNiw3IEBACiAJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJdTMyIGNyYzsKIAotCWZvciAoZG1pPWRldi0+bWNfbGlzdDsgZG1pOyBkbWk9ZG1pLT5uZXh0KSB7Ci0JCQorCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCWNyYyA9IGV0aGVyX2NyYyhFVEhfQUxFTiwgZG1pLT5kbWlfYWRkcik7CiAJCS8qIAogCQkgKiBUaGUgODM5MCB1c2VzIHRoZSA2IG1vc3Qgc2lnbmlmaWNhbnQgYml0cyBvZiB0aGUKQEAgLTE2NTUsNyArMTY1Miw3IEBACiAKIAlpZiAoIShkZXYtPmZsYWdzJihJRkZfUFJPTUlTQ3xJRkZfQUxMTVVMVEkpKSkgewogCQltZW1zZXQoZWlfbG9jYWwtPm1jZmlsdGVyLCAwLCA4KTsKLQkJaWYgKGRldi0+bWNfbGlzdCkKKwkJaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkKIAkJCW1ha2VfbWNfYml0cyhlaV9sb2NhbC0+bWNmaWx0ZXIsIGRldik7CiAJfSBlbHNlIHsKIAkJLyogc2V0IHRvIGFjY2VwdC1hbGwgKi8KQEAgLTE2NzEsNyArMTY2OCw3IEBACiAKICAgCWlmKGRldi0+ZmxhZ3MmSUZGX1BST01JU0MpCiAgIAkJb3V0Yl9wKEU4MzkwX1JYQ09ORklHIHwgMHg1OCwgZTgzOTBfYmFzZSArIEVOMF9SWENSKTsKLQllbHNlIGlmKGRldi0+ZmxhZ3MmSUZGX0FMTE1VTFRJIHx8IGRldi0+bWNfbGlzdCkKKwllbHNlIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8ICFuZXRkZXZfbWNfZW1wdHkoZGV2KSkKICAgCQlvdXRiX3AoRTgzOTBfUlhDT05GSUcgfCAweDQ4LCBlODM5MF9iYXNlICsgRU4wX1JYQ1IpOwogICAJZWxzZQogICAJCW91dGJfcChFODM5MF9SWENPTkZJRyB8IDB4NDAsIGU4MzkwX2Jhc2UgKyBFTjBfUlhDUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jIGIvZHJpdmVycy9uZXQvcGNtY2lhL2ZtdmoxOHhfY3MuYwppbmRleCA3YjE3NDA0Li5iOWRjODBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvZm12ajE4eF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9mbXZqMTh4X2NzLmMKQEAgLTExODcsMjIgKzExODcsMjAgQEAKICAgICBpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJbWVtc2V0KG1jX2ZpbHRlciwgMHhmZiwgc2l6ZW9mKG1jX2ZpbHRlcikpOwogCW91dGIoMywgaW9hZGRyICsgUlhfTU9ERSk7CS8qIEVuYWJsZSBwcm9taXNjdW91cyBtb2RlICovCi0gICAgfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gTUNfRklMVEVSQlJFQUsgfHwKKyAgICB9IGVsc2UgaWYgKG5ldGRldl9tY19jb3VudChkZXYpID4gTUNfRklMVEVSQlJFQUsgfHwKIAkgICAgICAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJLyogVG9vIG1hbnkgdG8gZmlsdGVyIHBlcmZlY3RseSAtLSBhY2NlcHQgYWxsIG11bHRpY2FzdHMuICovCiAJbWVtc2V0KG1jX2ZpbHRlciwgMHhmZiwgc2l6ZW9mKG1jX2ZpbHRlcikpOwogCW91dGIoMiwgaW9hZGRyICsgUlhfTU9ERSk7CS8qIFVzZSBub3JtYWwgbW9kZS4gKi8KLSAgICB9IGVsc2UgaWYgKGRldi0+bWNfY291bnQgPT0gMCkgeworICAgIH0gZWxzZSBpZiAobmV0ZGV2X21jX2VtcHR5KGRldikpIHsKIAltZW1zZXQobWNfZmlsdGVyLCAweDAwLCBzaXplb2YobWNfZmlsdGVyKSk7CiAJb3V0YigxLCBpb2FkZHIgKyBSWF9NT0RFKTsJLyogSWdub3JlIGFsbW9zdCBhbGwgbXVsdGljYXN0cy4gKi8KICAgICB9IGVsc2UgewogCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwogCiAJbWVtc2V0KG1jX2ZpbHRlciwgMCwgc2l6ZW9mKG1jX2ZpbHRlcikpOwotCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCSAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKLQkgICAgdW5zaWduZWQgaW50IGJpdCA9Ci0JICAgIAlldGhlcl9jcmNfbGUoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpID4+IDI2OworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CisJICAgIHVuc2lnbmVkIGludCBiaXQgPSBldGhlcl9jcmNfbGUoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpID4+IDI2OwogCSAgICBtY19maWx0ZXJbYml0ID4+IDNdIHw9ICgxIDw8IChiaXQgJiA3KSk7CiAJfQogCW91dGIoMiwgaW9hZGRyICsgUlhfTU9ERSk7CS8qIFVzZSBub3JtYWwgbW9kZS4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9ubWNsYW5fY3MuYwppbmRleCAxMmUzMjMzLi5jNzE3YjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY21jaWEvbm1jbGFuX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL25tY2xhbl9jcy5jCkBAIC0xNDc1LDE0ICsxNDc1LDEzIEBACiB7CiAgIG1hY2VfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogICBpbnQgYWRyW0VUSEVSX0FERFJfTEVOXSA9IHswfTsgLyogRXRoZXJuZXQgYWRkcmVzcyAqLwotICBpbnQgaTsKLSAgc3RydWN0IGRldl9tY19saXN0ICpkbWkgPSBkZXYtPm1jX2xpc3Q7CisgIHN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCiAjaWZkZWYgUENNQ0lBX0RFQlVHCiAgIHsKICAgICBzdGF0aWMgaW50IG9sZDsKLSAgICBpZiAoZGV2LT5tY19jb3VudCAhPSBvbGQpIHsKLSAgICAgIG9sZCA9IGRldi0+bWNfY291bnQ7CisgICAgaWYgKG5ldGRldl9tY19jb3VudChkZXYpICE9IG9sZCkgeworICAgICAgb2xkID0gbmV0ZGV2X21jX2NvdW50KGRldik7CiAgICAgICBwcl9kZWJ1ZygiJXM6IHNldHRpbmcgUnggbW9kZSB0byAlZCBhZGRyZXNzZXMuXG4iLAogCSAgICBkZXYtPm5hbWUsIG9sZCk7CiAgICAgfQpAQCAtMTQ5MCwxNSArMTQ4OSwxNCBAQAogI2VuZGlmCiAKICAgLyogU2V0IG11bHRpY2FzdF9udW1fYWRkcnMuICovCi0gIGxwLT5tdWx0aWNhc3RfbnVtX2FkZHJzID0gZGV2LT5tY19jb3VudDsKKyAgbHAtPm11bHRpY2FzdF9udW1fYWRkcnMgPSBuZXRkZXZfbWNfY291bnQoZGV2KTsKIAogICAvKiBTZXQgbXVsdGljYXN0X2xhZHJmLiAqLwogICBpZiAobnVtX2FkZHJzID4gMCkgewogICAgIC8qIENhbGN1bGF0ZSBtdWx0aWNhc3QgbG9naWNhbCBhZGRyZXNzIGZpbHRlciAqLwogICAgIG1lbXNldChscC0+bXVsdGljYXN0X2xhZHJmLCAwLCBNQUNFX0xBRFJGX0xFTik7Ci0gICAgZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgeworICAgIG5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAgICAgICBtZW1jcHkoYWRyLCBkbWktPmRtaV9hZGRyLCBFVEhFUl9BRERSX0xFTik7Ci0gICAgICBkbWkgPSBkbWktPm5leHQ7CiAgICAgICBCdWlsZExBRihscC0+bXVsdGljYXN0X2xhZHJmLCBhZHIpOwogICAgIH0KICAgfQpAQCAtMTUzNywxNSArMTUzNSwxNSBAQAogI2lmZGVmIFBDTUNJQV9ERUJVRwogICB7CiAgICAgc3RhdGljIGludCBvbGQ7Ci0gICAgaWYgKGRldi0+bWNfY291bnQgIT0gb2xkKSB7Ci0gICAgICBvbGQgPSBkZXYtPm1jX2NvdW50OworICAgIGlmIChuZXRkZXZfbWNfY291bnQoZGV2KSAhPSBvbGQpIHsKKyAgICAgIG9sZCA9IG5ldGRldl9tY19jb3VudChkZXYpOwogICAgICAgcHJfZGVidWcoIiVzOiBzZXR0aW5nIFJ4IG1vZGUgdG8gJWQgYWRkcmVzc2VzLlxuIiwKIAkgICAgZGV2LT5uYW1lLCBvbGQpOwogICAgIH0KICAgfQogI2VuZGlmCiAKLSAgbHAtPm11bHRpY2FzdF9udW1fYWRkcnMgPSBkZXYtPm1jX2NvdW50OworICBscC0+bXVsdGljYXN0X251bV9hZGRycyA9IG5ldGRldl9tY19jb3VudChkZXYpOwogICByZXN0b3JlX211bHRpY2FzdF9saXN0KGRldik7CiAKIH0gLyogc2V0X211bHRpY2FzdF9saXN0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wY21jaWEvc21jOTFjOTJfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCmluZGV4IGFhNTdjZmQuLjVhZGM2NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3BjbWNpYS9zbWM5MWM5Ml9jcy5jCkBAIC0xNTkzLDI3ICsxNTkzLDYgQEAKIAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSAgICBDYWxjdWxhdGUgdmFsdWVzIGZvciB0aGUgaGFyZHdhcmUgbXVsdGljYXN0IGZpbHRlciBoYXNoIHRhYmxlLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotc3RhdGljIHZvaWQgZmlsbF9tdWx0aWNhc3RfdGJsKGludCBjb3VudCwgc3RydWN0IGRldl9tY19saXN0ICphZGRycywKLQkJCSAgICAgICB1X2NoYXIgKm11bHRpY2FzdF90YWJsZSkKLXsKLSAgICBzdHJ1Y3QgZGV2X21jX2xpc3QJKm1jX2FkZHI7Ci0KLSAgICBmb3IgKG1jX2FkZHIgPSBhZGRyczsgIG1jX2FkZHIgJiYgY291bnQtLSA+IDA7ICBtY19hZGRyID0gbWNfYWRkci0+bmV4dCkgewotCXVfaW50IHBvc2l0aW9uID0gZXRoZXJfY3JjKDYsIG1jX2FkZHItPmRtaV9hZGRyKTsKLSNpZm5kZWYgZmluYWxfdmVyc2lvbgkJLyogVmVyaWZ5IG11bHRpY2FzdCBhZGRyZXNzLiAqLwotCWlmICgobWNfYWRkci0+ZG1pX2FkZHJbMF0gJiAxKSA9PSAwKQotCSAgICBjb250aW51ZTsKLSNlbmRpZgotCW11bHRpY2FzdF90YWJsZVtwb3NpdGlvbiA+PiAyOV0gfD0gMSA8PCAoKHBvc2l0aW9uID4+IDI2KSAmIDcpOwotICAgIH0KLX0KLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KICAgICBTZXQgdGhlIHJlY2VpdmUgbW9kZS4KIAogICAgIFRoaXMgcm91dGluZSBpcyB1c2VkIGJ5IGJvdGggdGhlIHByb3RvY29sIGxldmVsIHRvIG5vdGlmeSB1cyBvZgpAQCAtMTYzNiw5ICsxNjE1LDE3IEBACiAgICAgfSBlbHNlIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKQogCXJ4X2NmZ19zZXR0aW5nID0gUnhTdHJpcENSQyB8IFJ4RW5hYmxlIHwgUnhBbGxNdWx0aTsKICAgICBlbHNlIHsKLQlpZiAoZGV2LT5tY19jb3VudCkgIHsKLQkgICAgZmlsbF9tdWx0aWNhc3RfdGJsKGRldi0+bWNfY291bnQsIGRldi0+bWNfbGlzdCwKLQkJCSAgICAgICAodV9jaGFyICopbXVsdGljYXN0X3RhYmxlKTsKKwlpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CisJICAgIHN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfYWRkcjsKKworCSAgICBuZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19hZGRyLCBkZXYpIHsKKwkJdV9pbnQgcG9zaXRpb24gPSBldGhlcl9jcmMoNiwgbWNfYWRkci0+ZG1pX2FkZHIpOworI2lmbmRlZiBmaW5hbF92ZXJzaW9uCQkvKiBWZXJpZnkgbXVsdGljYXN0IGFkZHJlc3MuICovCisJCWlmICgobWNfYWRkci0+ZG1pX2FkZHJbMF0gJiAxKSA9PSAwKQorCQkgICAgY29udGludWU7CisjZW5kaWYKKwkJbXVsdGljYXN0X3RhYmxlW3Bvc2l0aW9uID4+IDI5XSB8PSAxIDw8ICgocG9zaXRpb24gPj4gMjYpICYgNyk7CisJICAgIH0KIAl9CiAJcnhfY2ZnX3NldHRpbmcgPSBSeFN0cmlwQ1JDIHwgUnhFbmFibGU7CiAgICAgfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYyBiL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKaW5kZXggNDY2ZmM3MjYuLjRkMTgwMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BjbWNpYS94aXJjMnBzX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvcGNtY2lhL3hpcmMycHNfY3MuYwpAQCAtMTM2NCw0NyArMTM2NCw2MyBAQAogICAgIHJldHVybiBORVRERVZfVFhfT0s7CiB9CiAKK3N0cnVjdCBzZXRfYWRkcmVzc19pbmZvIHsKKwlpbnQgcmVnX25yOworCWludCBwYWdlX25yOworCWludCBtb2hhd2s7CisJdW5zaWduZWQgaW50IGlvYWRkcjsKK307CisKK3N0YXRpYyB2b2lkIHNldF9hZGRyZXNzKHN0cnVjdCBzZXRfYWRkcmVzc19pbmZvICpzYV9pbmZvLCBjaGFyICphZGRyKQoreworCXVuc2lnbmVkIGludCBpb2FkZHIgPSBzYV9pbmZvLT5pb2FkZHI7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCWlmIChzYV9pbmZvLT5yZWdfbnIgPiAxNSkgeworCQkJc2FfaW5mby0+cmVnX25yID0gODsKKwkJCXNhX2luZm8tPnBhZ2VfbnIrKzsKKwkJCVNlbGVjdFBhZ2Uoc2FfaW5mby0+cGFnZV9ucik7CisJCX0KKwkJaWYgKHNhX2luZm8tPm1vaGF3aykKKwkJCVB1dEJ5dGUoc2FfaW5mby0+cmVnX25yKyssIGFkZHJbNSAtIGldKTsKKwkJZWxzZQorCQkJUHV0Qnl0ZShzYV9pbmZvLT5yZWdfbnIrKywgYWRkcltpXSk7CisJfQorfQorCiAvKioqKioqKioqKioqKioqKgogICogU2V0IGFsbCBhZGRyZXNzZXM6IFRoaXMgZmlyc3Qgb25lIGlzIHRoZSBpbmRpdmlkdWFsIGFkZHJlc3MsCiAgKiB0aGUgbmV4dCA5IGFkZHJlc3NlcyBhcmUgdGFrZW4gZnJvbSB0aGUgbXVsdGljYXN0IGxpc3QgYW5kCiAgKiB0aGUgcmVzdCBpcyBmaWxsZWQgd2l0aCB0aGUgaW5kaXZpZHVhbCBhZGRyZXNzLgogICovCi1zdGF0aWMgdm9pZAotc2V0X2FkZHJlc3NlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgc2V0X2FkZHJlc3NlcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgIHVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLSAgICBsb2NhbF9pbmZvX3QgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLSAgICBzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSA9IGRldi0+bWNfbGlzdDsKLSAgICB1bnNpZ25lZCBjaGFyICphZGRyOwotICAgIGludCBpLGosayxuOworCXVuc2lnbmVkIGludCBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwlsb2NhbF9pbmZvX3QgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKKwlzdHJ1Y3Qgc2V0X2FkZHJlc3NfaW5mbyBzYV9pbmZvOworCWludCBpOwogCi0gICAgU2VsZWN0UGFnZShrPTB4NTApOwotICAgIGZvciAoaT0wLGo9OCxuPTA7IDsgaSsrLCBqKyspIHsKLQlpZiAoaSA+IDUpIHsKLQkgICAgaWYgKCsrbiA+IDkpCi0JCWJyZWFrOwotCSAgICBpID0gMDsKLQkgICAgaWYgKG4gPiAxICYmIG4gPD0gZGV2LT5tY19jb3VudCAmJiBkbWkpIHsKLQkgICAJIGRtaSA9IGRtaS0+bmV4dDsKLQkgICAgfQorCS8qCisJICogU2V0dXAgdGhlIGluZm8gc3RydWN0dXJlIHNvIHRoYXQgYnkgZmlyc3Qgc2V0X2FkZHJlc3MgY2FsbCBpdCB3aWxsIGRvCisJICogU2VsZWN0UGFnZSB3aXRoIHRoZSByaWdodCBwYWdlIG51bWJlci4gSGVuY2UgdGhlc2Ugb25lcyBoZXJlLgorCSAqLworCXNhX2luZm8ucmVnX25yID0gMTUgKyAxOworCXNhX2luZm8ucGFnZV9uciA9IDB4NTAgLSAxOworCXNhX2luZm8ubW9oYXdrID0gbHAtPm1vaGF3azsKKwlzYV9pbmZvLmlvYWRkciA9IGlvYWRkcjsKKworCXNldF9hZGRyZXNzKCZzYV9pbmZvLCBkZXYtPmRldl9hZGRyKTsKKwlpID0gMDsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgeworCQlpZiAoaSsrID09IDkpCisJCQlicmVhazsKKwkJc2V0X2FkZHJlc3MoJnNhX2luZm8sIGRtaS0+ZG1pX2FkZHIpOwogCX0KLQlpZiAoaiA+IDE1KSB7Ci0JICAgIGogPSA4OwotCSAgICBrKys7Ci0JICAgIFNlbGVjdFBhZ2Uoayk7Ci0JfQotCi0JaWYgKG4gJiYgbiA8PSBkZXYtPm1jX2NvdW50ICYmIGRtaSkKLQkgICAgYWRkciA9IGRtaS0+ZG1pX2FkZHI7Ci0JZWxzZQotCSAgICBhZGRyID0gZGV2LT5kZXZfYWRkcjsKLQotCWlmIChscC0+bW9oYXdrKQotCSAgICBQdXRCeXRlKGosIGFkZHJbNS1pXSk7Ci0JZWxzZQotCSAgICBQdXRCeXRlKGosIGFkZHJbaV0pOwotICAgIH0KLSAgICBTZWxlY3RQYWdlKDApOworCXdoaWxlIChpKysgPCA5KQorCQlzZXRfYWRkcmVzcygmc2FfaW5mbywgZGV2LT5kZXZfYWRkcik7CisJU2VsZWN0UGFnZSgwKTsKIH0KIAogLyoqKioqKioqKioqKioqKioKQEAgLTE0MjQsOSArMTQ0MCw5IEBACiAKICAgICBpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7IC8qIHNub29wICovCiAJUHV0Qnl0ZShYSVJDUkVHNDJfU1dDMSwgdmFsdWUgfCAweDA2KTsgLyogc2V0IE1QRSBhbmQgUE1FICovCi0gICAgfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gOSB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKKyAgICB9IGVsc2UgaWYgKG5ldGRldl9tY19jb3VudChkZXYpID4gOSB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAlQdXRCeXRlKFhJUkNSRUc0Ml9TV0MxLCB2YWx1ZSB8IDB4MDIpOyAvKiBzZXQgTVBFICovCi0gICAgfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50KSB7CisgICAgfSBlbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKIAkvKiB0aGUgY2hpcCBjYW4gZmlsdGVyIDkgYWRkcmVzc2VzIHBlcmZlY3RseSAqLwogCVB1dEJ5dGUoWElSQ1JFRzQyX1NXQzEsIHZhbHVlIHwgMHgwMSk7CiAJU2VsZWN0UGFnZSgweDQwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BjbmV0MzIuYyBiL2RyaXZlcnMvbmV0L3BjbmV0MzIuYwppbmRleCBlMTU0Njc3Li4wODRkNzhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wY25ldDMyLmMKKysrIGIvZHJpdmVycy9uZXQvcGNuZXQzMi5jCkBAIC0yMSw2ICsyMSw4IEBACiAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2RlZmluZSBEUlZfTkFNRQkicGNuZXQzMiIKICNkZWZpbmUgRFJWX1ZFUlNJT04JIjEuMzUiCiAjZGVmaW5lIERSVl9SRUxEQVRFCSIyMS5BcHIuMjAwOCIKQEAgLTUwLDE2ICs1MiwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogLyoKICAqIFBDSSBkZXZpY2UgaWRlbnRpZmllcnMgZm9yICJuZXcgc3R5bGUiIExpbnV4IFBDSSBEZXZpY2UgRHJpdmVycwogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNuZXQzMl9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocGNuZXQzMl9wY2lfdGJsKSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTUQsIFBDSV9ERVZJQ0VfSURfQU1EX0xBTkNFX0hPTUUpLCB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfTEFOQ0UpLCB9LAogCkBAIC04Myw3ICs4NSw3IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHBjbmV0MzJfcG9ydGxpc3RbXSBfX2luaXRkYXRhID0KICAgICB7IDB4MzAwLCAweDMyMCwgMHgzNDAsIDB4MzYwLCAwIH07CiAKLXN0YXRpYyBpbnQgcGNuZXQzMl9kZWJ1ZyA9IDA7CitzdGF0aWMgaW50IHBjbmV0MzJfZGVidWc7CiBzdGF0aWMgaW50IHR4X3N0YXJ0ID0gMTsJLyogTWFwcGluZyAtLSAwOjIwLCAxOjY0LCAyOjEyOCwgMzp+MjIwIChkZXBlbmRzIG9uIGNoaXAgdmVycykgKi8KIHN0YXRpYyBpbnQgcGNuZXQzMnZsYjsJCS8qIGNoZWNrIGZvciBWTEIgY2FyZHMgPyAqLwogCkBAIC0zOTAsNyArMzkyLDcgQEAKIHN0YXRpYyB1MTYgcGNuZXQzMl9kd2lvX3JlYWRfY3NyKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGluZGV4KQogewogCW91dGwoaW5kZXgsIGFkZHIgKyBQQ05FVDMyX0RXSU9fUkFQKTsKLQlyZXR1cm4gKGlubChhZGRyICsgUENORVQzMl9EV0lPX1JEUCkgJiAweGZmZmYpOworCXJldHVybiBpbmwoYWRkciArIFBDTkVUMzJfRFdJT19SRFApICYgMHhmZmZmOwogfQogCiBzdGF0aWMgdm9pZCBwY25ldDMyX2R3aW9fd3JpdGVfY3NyKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IGluZGV4LCB1MTYgdmFsKQpAQCAtNDAyLDcgKzQwNCw3IEBACiBzdGF0aWMgdTE2IHBjbmV0MzJfZHdpb19yZWFkX2Jjcih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBpbmRleCkKIHsKIAlvdXRsKGluZGV4LCBhZGRyICsgUENORVQzMl9EV0lPX1JBUCk7Ci0JcmV0dXJuIChpbmwoYWRkciArIFBDTkVUMzJfRFdJT19CRFApICYgMHhmZmZmKTsKKwlyZXR1cm4gaW5sKGFkZHIgKyBQQ05FVDMyX0RXSU9fQkRQKSAmIDB4ZmZmZjsKIH0KIAogc3RhdGljIHZvaWQgcGNuZXQzMl9kd2lvX3dyaXRlX2Jjcih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBpbmRleCwgdTE2IHZhbCkKQEAgLTQxMyw3ICs0MTUsNyBAQAogCiBzdGF0aWMgdTE2IHBjbmV0MzJfZHdpb19yZWFkX3JhcCh1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JcmV0dXJuIChpbmwoYWRkciArIFBDTkVUMzJfRFdJT19SQVApICYgMHhmZmZmKTsKKwlyZXR1cm4gaW5sKGFkZHIgKyBQQ05FVDMyX0RXSU9fUkFQKSAmIDB4ZmZmZjsKIH0KIAogc3RhdGljIHZvaWQgcGNuZXQzMl9kd2lvX3dyaXRlX3JhcCh1bnNpZ25lZCBsb25nIGFkZHIsIHUxNiB2YWwpCkBAIC00ODcsMTAgKzQ4OSw3IEBACiAJCQkJCSAgICgxIDw8IHNpemUpLAogCQkJCQkgICAmbmV3X3JpbmdfZG1hX2FkZHIpOwogCWlmIChuZXdfdHhfcmluZyA9PSBOVUxMKSB7Ci0JCWlmIChuZXRpZl9tc2dfZHJ2KGxwKSkKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICIlczogQ29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCW5ldGlmX2VycihscCwgZHJ2LCBkZXYsICJDb25zaXN0ZW50IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCXJldHVybjsKIAl9CiAJbWVtc2V0KG5ld190eF9yaW5nLCAwLCBzaXplb2Yoc3RydWN0IHBjbmV0MzJfdHhfaGVhZCkgKiAoMSA8PCBzaXplKSk7CkBAIC00OTgsMTggKzQ5NywxNCBAQAogCW5ld19kbWFfYWRkcl9saXN0ID0ga2NhbGxvYygoMSA8PCBzaXplKSwgc2l6ZW9mKGRtYV9hZGRyX3QpLAogCQkJCUdGUF9BVE9NSUMpOwogCWlmICghbmV3X2RtYV9hZGRyX2xpc3QpIHsKLQkJaWYgKG5ldGlmX21zZ19kcnYobHApKQotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iLCBkZXYtPm5hbWUpOworCQluZXRpZl9lcnIobHAsIGRydiwgZGV2LCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBmcmVlX25ld190eF9yaW5nOwogCX0KIAogCW5ld19za2JfbGlzdCA9IGtjYWxsb2MoKDEgPDwgc2l6ZSksIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSwKIAkJCQlHRlBfQVRPTUlDKTsKIAlpZiAoIW5ld19za2JfbGlzdCkgewotCQlpZiAobmV0aWZfbXNnX2RydihscCkpCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIsIGRldi0+bmFtZSk7CisJCW5ldGlmX2VycihscCwgZHJ2LCBkZXYsICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlnb3RvIGZyZWVfbmV3X2xpc3RzOwogCX0KIApAQCAtNTI5LDE1ICs1MjQsMTQgQEAKIAlscC0+dHhfc2tidWZmID0gbmV3X3NrYl9saXN0OwogCXJldHVybjsKIAotICAgIGZyZWVfbmV3X2xpc3RzOgorZnJlZV9uZXdfbGlzdHM6CiAJa2ZyZWUobmV3X2RtYV9hZGRyX2xpc3QpOwotICAgIGZyZWVfbmV3X3R4X3Jpbmc6CitmcmVlX25ld190eF9yaW5nOgogCXBjaV9mcmVlX2NvbnNpc3RlbnQobHAtPnBjaV9kZXYsCiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBwY25ldDMyX3R4X2hlYWQpICoKIAkJCSAgICAoMSA8PCBzaXplKSwKIAkJCSAgICBuZXdfdHhfcmluZywKIAkJCSAgICBuZXdfcmluZ19kbWFfYWRkcik7Ci0JcmV0dXJuOwogfQogCiAvKgpAQCAtNTY1LDEwICs1NTksNyBAQAogCQkJCQkgICAoMSA8PCBzaXplKSwKIAkJCQkJICAgJm5ld19yaW5nX2RtYV9hZGRyKTsKIAlpZiAobmV3X3J4X3JpbmcgPT0gTlVMTCkgewotCQlpZiAobmV0aWZfbXNnX2RydihscCkpCi0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiJXM6IENvbnNpc3RlbnQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQluZXRpZl9lcnIobHAsIGRydiwgZGV2LCAiQ29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm47CiAJfQogCW1lbXNldChuZXdfcnhfcmluZywgMCwgc2l6ZW9mKHN0cnVjdCBwY25ldDMyX3J4X2hlYWQpICogKDEgPDwgc2l6ZSkpOwpAQCAtNTc2LDE4ICs1NjcsMTQgQEAKIAluZXdfZG1hX2FkZHJfbGlzdCA9IGtjYWxsb2MoKDEgPDwgc2l6ZSksIHNpemVvZihkbWFfYWRkcl90KSwKIAkJCQlHRlBfQVRPTUlDKTsKIAlpZiAoIW5ld19kbWFfYWRkcl9saXN0KSB7Ci0JCWlmIChuZXRpZl9tc2dfZHJ2KGxwKSkKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0aWZfZXJyKGxwLCBkcnYsIGRldiwgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCWdvdG8gZnJlZV9uZXdfcnhfcmluZzsKIAl9CiAKIAluZXdfc2tiX2xpc3QgPSBrY2FsbG9jKCgxIDw8IHNpemUpLCBzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKiksCiAJCQkJR0ZQX0FUT01JQyk7CiAJaWYgKCFuZXdfc2tiX2xpc3QpIHsKLQkJaWYgKG5ldGlmX21zZ19kcnYobHApKQotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iLCBkZXYtPm5hbWUpOworCQluZXRpZl9lcnIobHAsIGRydiwgZGV2LCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byBmcmVlX25ld19saXN0czsKIAl9CiAKQEAgLTU5OSwxNSArNTg2LDE0IEBACiAJCW5ld19za2JfbGlzdFtuZXddID0gbHAtPnJ4X3NrYnVmZltuZXddOwogCX0KIAkvKiBub3cgYWxsb2NhdGUgYW55IG5ldyBidWZmZXJzIG5lZWRlZCAqLwotCWZvciAoOyBuZXcgPCBzaXplOyBuZXcrKyApIHsKKwlmb3IgKDsgbmV3IDwgc2l6ZTsgbmV3KyspIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYnVmZjsKIAkJbmV3X3NrYl9saXN0W25ld10gPSBkZXZfYWxsb2Nfc2tiKFBLVF9CVUZfU0tCKTsKLQkJaWYgKCEocnhfc2tidWZmID0gbmV3X3NrYl9saXN0W25ld10pKSB7CisJCXJ4X3NrYnVmZiA9IG5ld19za2JfbGlzdFtuZXddOworCQlpZiAoIXJ4X3NrYnVmZikgewogCQkJLyoga2VlcCB0aGUgb3JpZ2luYWwgbGlzdHMgYW5kIGJ1ZmZlcnMgKi8KLQkJCWlmIChuZXRpZl9tc2dfZHJ2KGxwKSkKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkgICAgICAgIiVzOiBwY25ldDMyX3JlYWxsb2NfcnhfcmluZyBkZXZfYWxsb2Nfc2tiIGZhaWxlZC5cbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQluZXRpZl9lcnIobHAsIGRydiwgZGV2LCAiJXMgZGV2X2FsbG9jX3NrYiBmYWlsZWRcbiIsCisJCQkJICBfX2Z1bmNfXyk7CiAJCQlnb3RvIGZyZWVfYWxsX25ldzsKIAkJfQogCQlza2JfcmVzZXJ2ZShyeF9za2J1ZmYsIE5FVF9JUF9BTElHTik7CkBAIC02NDQsOCArNjMwLDggQEAKIAlscC0+cnhfc2tidWZmID0gbmV3X3NrYl9saXN0OwogCXJldHVybjsKIAotICAgIGZyZWVfYWxsX25ldzoKLQlmb3IgKDsgLS1uZXcgPj0gbHAtPnJ4X3Jpbmdfc2l6ZTsgKSB7CitmcmVlX2FsbF9uZXc6CisJd2hpbGUgKC0tbmV3ID49IGxwLT5yeF9yaW5nX3NpemUpIHsKIAkJaWYgKG5ld19za2JfbGlzdFtuZXddKSB7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKGxwLT5wY2lfZGV2LCBuZXdfZG1hX2FkZHJfbGlzdFtuZXddLAogCQkJCQkgUEtUX0JVRl9TSVpFLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwpAQCAtNjUzLDkgKzYzOSw5IEBACiAJCX0KIAl9CiAJa2ZyZWUobmV3X3NrYl9saXN0KTsKLSAgICBmcmVlX25ld19saXN0czoKK2ZyZWVfbmV3X2xpc3RzOgogCWtmcmVlKG5ld19kbWFfYWRkcl9saXN0KTsKLSAgICBmcmVlX25ld19yeF9yaW5nOgorZnJlZV9uZXdfcnhfcmluZzoKIAlwY2lfZnJlZV9jb25zaXN0ZW50KGxwLT5wY2lfZGV2LAogCQkJICAgIHNpemVvZihzdHJ1Y3QgcGNuZXQzMl9yeF9oZWFkKSAqCiAJCQkgICAgKDEgPDwgc2l6ZSksCkBAIC04MzgsMTYgKzgyNCwxNCBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChuZXRpZl9tc2dfZHJ2KGxwKSkKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIiVzOiBSaW5nIFBhcmFtIFNldHRpbmdzOiBSWDogJWQsIFRYOiAlZFxuIiwgZGV2LT5uYW1lLAotCQkgICAgICAgbHAtPnJ4X3Jpbmdfc2l6ZSwgbHAtPnR4X3Jpbmdfc2l6ZSk7CisJbmV0aWZfaW5mbyhscCwgZHJ2LCBkZXYsICJSaW5nIFBhcmFtIFNldHRpbmdzOiBSWDogJWQsIFRYOiAlZFxuIiwKKwkJICAgbHAtPnJ4X3Jpbmdfc2l6ZSwgbHAtPnR4X3Jpbmdfc2l6ZSk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcGNuZXQzMl9nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LAotCQkJCXU4ICogZGF0YSkKKwkJCQl1OCAqZGF0YSkKIHsKIAltZW1jcHkoZGF0YSwgcGNuZXQzMl9nc3RyaW5nc190ZXN0LCBzaXplb2YocGNuZXQzMl9nc3RyaW5nc190ZXN0KSk7CiB9CkBAIC04NzEsMTcgKzg1NSwxNSBAQAogCWlmICh0ZXN0LT5mbGFncyA9PSBFVEhfVEVTVF9GTF9PRkZMSU5FKSB7CiAJCXJjID0gcGNuZXQzMl9sb29wYmFja190ZXN0KGRldiwgZGF0YSk7CiAJCWlmIChyYykgewotCQkJaWYgKG5ldGlmX21zZ19odyhscCkpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBMb29wYmFjayB0ZXN0IGZhaWxlZC5cbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQluZXRpZl9wcmludGsobHAsIGh3LCBLRVJOX0RFQlVHLCBkZXYsCisJCQkJICAgICAiTG9vcGJhY2sgdGVzdCBmYWlsZWRcbiIpOwogCQkJdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwotCQl9IGVsc2UgaWYgKG5ldGlmX21zZ19odyhscCkpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IExvb3BiYWNrIHRlc3QgcGFzc2VkLlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOwotCX0gZWxzZSBpZiAobmV0aWZfbXNnX2h3KGxwKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJICAgICAgICIlczogTm8gdGVzdHMgdG8gcnVuIChzcGVjaWZ5ICdPZmZsaW5lJyBvbiBldGh0b29sKS4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJfSBlbHNlCisJCQluZXRpZl9wcmludGsobHAsIGh3LCBLRVJOX0RFQlVHLCBkZXYsCisJCQkJICAgICAiTG9vcGJhY2sgdGVzdCBwYXNzZWRcbiIpOworCX0gZWxzZQorCQluZXRpZl9wcmludGsobHAsIGh3LCBLRVJOX0RFQlVHLCBkZXYsCisJCQkgICAgICJObyB0ZXN0cyB0byBydW4gKHNwZWNpZnkgJ09mZmxpbmUnIG9uIGV0aHRvb2wpXG4iKTsKIH0JCQkJLyogZW5kIHBjbmV0MzJfZXRodG9vbF90ZXN0ICovCiAKIHN0YXRpYyBpbnQgcGNuZXQzMl9sb29wYmFja190ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVpbnQ2NF90ICogZGF0YTEpCkBAIC05MjYsNDAgKzkwOCwzOSBAQAogCS8qIEluaXRpYWxpemUgVHJhbnNtaXQgYnVmZmVycy4gKi8KIAlzaXplID0gZGF0YV9sZW4gKyAxNTsKIAlmb3IgKHggPSAwOyB4IDwgbnVtYnVmZnM7IHgrKykgewotCQlpZiAoIShza2IgPSBkZXZfYWxsb2Nfc2tiKHNpemUpKSkgewotCQkJaWYgKG5ldGlmX21zZ19odyhscCkpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkgICAgICAgIiVzOiBDYW5ub3QgYWxsb2NhdGUgc2tiIGF0IGxpbmU6ICVkIVxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBfX0xJTkVfXyk7CisJCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZSk7CisJCWlmICghc2tiKSB7CisJCQluZXRpZl9wcmludGsobHAsIGh3LCBLRVJOX0RFQlVHLCBkZXYsCisJCQkJICAgICAiQ2Fubm90IGFsbG9jYXRlIHNrYiBhdCBsaW5lOiAlZCFcbiIsCisJCQkJICAgICBfX0xJTkVfXyk7CiAJCQlnb3RvIGNsZWFuX3VwOwotCQl9IGVsc2UgewotCQkJcGFja2V0ID0gc2tiLT5kYXRhOwotCQkJc2tiX3B1dChza2IsIHNpemUpOwkvKiBjcmVhdGUgc3BhY2UgZm9yIGRhdGEgKi8KLQkJCWxwLT50eF9za2J1ZmZbeF0gPSBza2I7Ci0JCQlscC0+dHhfcmluZ1t4XS5sZW5ndGggPSBjcHVfdG9fbGUxNigtc2tiLT5sZW4pOwotCQkJbHAtPnR4X3JpbmdbeF0ubWlzYyA9IDA7Ci0KLQkJCS8qIHB1dCBEQSBhbmQgU0EgaW50byB0aGUgc2tiICovCi0JCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCQkJCSpwYWNrZXQrKyA9IGRldi0+ZGV2X2FkZHJbaV07Ci0JCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCQkJCSpwYWNrZXQrKyA9IGRldi0+ZGV2X2FkZHJbaV07Ci0JCQkvKiB0eXBlICovCi0JCQkqcGFja2V0KysgPSAweDA4OwotCQkJKnBhY2tldCsrID0gMHgwNjsKLQkJCS8qIHBhY2tldCBudW1iZXIgKi8KLQkJCSpwYWNrZXQrKyA9IHg7Ci0JCQkvKiBmaWxsIHBhY2tldCB3aXRoIGRhdGEgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBkYXRhX2xlbjsgaSsrKQotCQkJCSpwYWNrZXQrKyA9IGk7Ci0KLQkJCWxwLT50eF9kbWFfYWRkclt4XSA9Ci0JCQkgICAgcGNpX21hcF9zaW5nbGUobHAtPnBjaV9kZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCi0JCQkJCSAgIFBDSV9ETUFfVE9ERVZJQ0UpOwotCQkJbHAtPnR4X3JpbmdbeF0uYmFzZSA9IGNwdV90b19sZTMyKGxwLT50eF9kbWFfYWRkclt4XSk7Ci0JCQl3bWIoKTsJLyogTWFrZSBzdXJlIG93bmVyIGNoYW5nZXMgYWZ0ZXIgYWxsIG90aGVycyBhcmUgdmlzaWJsZSAqLwotCQkJbHAtPnR4X3JpbmdbeF0uc3RhdHVzID0gY3B1X3RvX2xlMTYoc3RhdHVzKTsKIAkJfQorCQlwYWNrZXQgPSBza2ItPmRhdGE7CisJCXNrYl9wdXQoc2tiLCBzaXplKTsJLyogY3JlYXRlIHNwYWNlIGZvciBkYXRhICovCisJCWxwLT50eF9za2J1ZmZbeF0gPSBza2I7CisJCWxwLT50eF9yaW5nW3hdLmxlbmd0aCA9IGNwdV90b19sZTE2KC1za2ItPmxlbik7CisJCWxwLT50eF9yaW5nW3hdLm1pc2MgPSAwOworCisJCS8qIHB1dCBEQSBhbmQgU0EgaW50byB0aGUgc2tiICovCisJCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCQkqcGFja2V0KysgPSBkZXYtPmRldl9hZGRyW2ldOworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQorCQkJKnBhY2tldCsrID0gZGV2LT5kZXZfYWRkcltpXTsKKwkJLyogdHlwZSAqLworCQkqcGFja2V0KysgPSAweDA4OworCQkqcGFja2V0KysgPSAweDA2OworCQkvKiBwYWNrZXQgbnVtYmVyICovCisJCSpwYWNrZXQrKyA9IHg7CisJCS8qIGZpbGwgcGFja2V0IHdpdGggZGF0YSAqLworCQlmb3IgKGkgPSAwOyBpIDwgZGF0YV9sZW47IGkrKykKKwkJCSpwYWNrZXQrKyA9IGk7CisKKwkJbHAtPnR4X2RtYV9hZGRyW3hdID0KKwkJCXBjaV9tYXBfc2luZ2xlKGxwLT5wY2lfZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLAorCQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJbHAtPnR4X3JpbmdbeF0uYmFzZSA9IGNwdV90b19sZTMyKGxwLT50eF9kbWFfYWRkclt4XSk7CisJCXdtYigpOwkvKiBNYWtlIHN1cmUgb3duZXIgY2hhbmdlcyBhZnRlciBhbGwgb3RoZXJzIGFyZSB2aXNpYmxlICovCisJCWxwLT50eF9yaW5nW3hdLnN0YXR1cyA9IGNwdV90b19sZTE2KHN0YXR1cyk7CiAJfQogCiAJeCA9IGEtPnJlYWRfYmNyKGlvYWRkciwgMzIpOwkvKiBzZXQgaW50ZXJuYWwgbG9vcGJhY2sgaW4gQkNSMzIgKi8KQEAgLTk4NCw5ICs5NjUsNyBAQAogCQkJdGlja3MrKzsKIAkJfQogCQlpZiAodGlja3MgPT0gMjAwKSB7Ci0JCQlpZiAobmV0aWZfbXNnX2h3KGxwKSkKLQkJCQlwcmludGsoIiVzOiBEZXNjICVkIGZhaWxlZCB0byByZXNldCFcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgeCk7CisJCQluZXRpZl9lcnIobHAsIGh3LCBkZXYsICJEZXNjICVkIGZhaWxlZCB0byByZXNldCFcbiIsIHgpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC05OTQsMTUgKzk3MywxNCBAQAogCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIENTUjAsIENTUjBfU1RPUCk7CS8qIFNldCBTVE9QIGJpdCAqLwogCXdtYigpOwogCWlmIChuZXRpZl9tc2dfaHcobHApICYmIG5ldGlmX21zZ19wa3RkYXRhKGxwKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYIGxvb3BiYWNrIHBhY2tldHM6XG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgIlJYIGxvb3BiYWNrIHBhY2tldHM6XG4iKTsKIAogCQlmb3IgKHggPSAwOyB4IDwgbnVtYnVmZnM7IHgrKykgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQYWNrZXQgJWQ6XG4iLCBkZXYtPm5hbWUsIHgpOworCQkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICJQYWNrZXQgJWQ6ICIsIHgpOwogCQkJc2tiID0gbHAtPnJ4X3NrYnVmZlt4XTsKLQkJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJCQlwcmludGsoIiUwMnggIiwgKihza2ItPmRhdGEgKyBpKSk7Ci0JCQl9Ci0JCQlwcmludGsoIlxuIik7CisJCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorCQkJCXByX2NvbnQoIiAlMDJ4IiwgKihza2ItPmRhdGEgKyBpKSk7CisJCQlwcl9jb250KCJcbiIpOwogCQl9CiAJfQogCkBAIC0xMDEzLDExICs5OTEsOSBAQAogCQlwYWNrZXQgPSBscC0+dHhfc2tidWZmW3hdLT5kYXRhOwogCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAJCQlpZiAoKihza2ItPmRhdGEgKyBpKSAhPSBwYWNrZXRbaV0pIHsKLQkJCQlpZiAobmV0aWZfbXNnX2h3KGxwKSkKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkJICAgICAgICIlczogRXJyb3IgaW4gY29tcGFyZSEgJTJ4IC0gJTAyeCAlMDJ4XG4iLAotCQkJCQkgICAgICAgZGV2LT5uYW1lLCBpLCAqKHNrYi0+ZGF0YSArIGkpLAotCQkJCQkgICAgICAgcGFja2V0W2ldKTsKKwkJCQluZXRpZl9wcmludGsobHAsIGh3LCBLRVJOX0RFQlVHLCBkZXYsCisJCQkJCSAgICAgIkVycm9yIGluIGNvbXBhcmUhICUyeCAtICUwMnggJTAyeFxuIiwKKwkJCQkJICAgICBpLCAqKHNrYi0+ZGF0YSArIGkpLCBwYWNrZXRbaV0pOwogCQkJCXJjID0gMTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTEwMjUsNyArMTAwMSw3IEBACiAJCXgrKzsKIAl9CiAKLSAgICAgIGNsZWFuX3VwOgorY2xlYW5fdXA6CiAJKmRhdGExID0gcmM7CiAJcGNuZXQzMl9wdXJnZV90eF9yaW5nKGRldik7CiAKQEAgLTEwNDQsNyArMTAyMCw3IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gKHJjKTsKKwlyZXR1cm4gcmM7CiB9CQkJCS8qIGVuZCBwY25ldDMyX2xvb3BiYWNrX3Rlc3QgICovCiAKIHN0YXRpYyB2b2lkIHBjbmV0MzJfbGVkX2JsaW5rX2NhbGxiYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0xMDU2LDkgKzEwMzIsOCBAQAogCWludCBpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gNDsgaSA8IDg7IGkrKykgeworCWZvciAoaSA9IDQ7IGkgPCA4OyBpKyspCiAJCWEtPndyaXRlX2Jjcihpb2FkZHIsIGksIGEtPnJlYWRfYmNyKGlvYWRkciwgaSkgXiAweDQwMDApOwotCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwogCiAJbW9kX3RpbWVyKCZscC0+YmxpbmtfdGltZXIsIFBDTkVUMzJfQkxJTktfVElNRU9VVCk7CkBAIC0xMDgwLDkgKzEwNTUsOCBAQAogCiAJLyogU2F2ZSB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgYmNycyAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwotCWZvciAoaSA9IDQ7IGkgPCA4OyBpKyspIHsKKwlmb3IgKGkgPSA0OyBpIDwgODsgaSsrKQogCQlyZWdzW2kgLSA0XSA9IGEtPnJlYWRfYmNyKGlvYWRkciwgaSk7Ci0JfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAKIAltb2RfdGltZXIoJmxwLT5ibGlua190aW1lciwgamlmZmllcyk7CkBAIC0xMDk3LDkgKzEwNzEsOCBAQAogCiAJLyogUmVzdG9yZSB0aGUgb3JpZ2luYWwgdmFsdWUgb2YgdGhlIGJjcnMgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbHAtPmxvY2ssIGZsYWdzKTsKLQlmb3IgKGkgPSA0OyBpIDwgODsgaSsrKSB7CisJZm9yIChpID0gNDsgaSA8IDg7IGkrKykKIAkJYS0+d3JpdGVfYmNyKGlvYWRkciwgaSwgcmVnc1tpIC0gNF0pOwotCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC0xMTM2LDEwICsxMTA5LDggQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCAqZmxhZ3MpOwogCQl0aWNrcysrOwogCQlpZiAodGlja3MgPiAyMDApIHsKLQkJCWlmIChuZXRpZl9tc2dfaHcobHApKQotCQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkJICAgICAgICIlczogRXJyb3IgZ2V0dGluZyBpbnRvIHN1c3BlbmQhXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJbmV0aWZfcHJpbnRrKGxwLCBodywgS0VSTl9ERUJVRywgZGV2LAorCQkJCSAgICAgIkVycm9yIGdldHRpbmcgaW50byBzdXNwZW5kIVxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KQEAgLTExODQsMTUgKzExNTUsMTMgQEAKIAogCS8qIERpc2NhcmQgb3ZlcnNpemUgZnJhbWVzLiAqLwogCWlmICh1bmxpa2VseShwa3RfbGVuID4gUEtUX0JVRl9TSVpFKSkgewotCQlpZiAobmV0aWZfbXNnX2RydihscCkpCi0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBJbXBvc3NpYmxlIHBhY2tldCBzaXplICVkIVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHBrdF9sZW4pOworCQluZXRpZl9lcnIobHAsIGRydiwgZGV2LCAiSW1wb3NzaWJsZSBwYWNrZXQgc2l6ZSAlZCFcbiIsCisJCQkgIHBrdF9sZW4pOwogCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlyZXR1cm47CiAJfQogCWlmIChwa3RfbGVuIDwgNjApIHsKLQkJaWYgKG5ldGlmX21zZ19yeF9lcnIobHApKQotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogUnVudCBwYWNrZXQhXG4iLCBkZXYtPm5hbWUpOworCQluZXRpZl9lcnIobHAsIHJ4X2VyciwgZGV2LCAiUnVudCBwYWNrZXQhXG4iKTsKIAkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJcmV0dXJuOwogCX0KQEAgLTEyMDAsNyArMTE2OSw4IEBACiAJaWYgKHBrdF9sZW4gPiByeF9jb3B5YnJlYWspIHsKIAkJc3RydWN0IHNrX2J1ZmYgKm5ld3NrYjsKIAotCQlpZiAoKG5ld3NrYiA9IGRldl9hbGxvY19za2IoUEtUX0JVRl9TS0IpKSkgeworCQluZXdza2IgPSBkZXZfYWxsb2Nfc2tiKFBLVF9CVUZfU0tCKTsKKwkJaWYgKG5ld3NrYikgewogCQkJc2tiX3Jlc2VydmUobmV3c2tiLCBORVRfSVBfQUxJR04pOwogCQkJc2tiID0gbHAtPnJ4X3NrYnVmZltlbnRyeV07CiAJCQlwY2lfdW5tYXBfc2luZ2xlKGxwLT5wY2lfZGV2LApAQCAtMTIxOCwxNSArMTE4OCwxMSBAQAogCQkJcnhfaW5fcGxhY2UgPSAxOwogCQl9IGVsc2UKIAkJCXNrYiA9IE5VTEw7Ci0JfSBlbHNlIHsKKwl9IGVsc2UKIAkJc2tiID0gZGV2X2FsbG9jX3NrYihwa3RfbGVuICsgTkVUX0lQX0FMSUdOKTsKLQl9CiAKIAlpZiAoc2tiID09IE5VTEwpIHsKLQkJaWYgKG5ldGlmX21zZ19kcnYobHApKQotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzOiBNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0LlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQluZXRpZl9lcnIobHAsIGRydiwgZGV2LCAiTWVtb3J5IHNxdWVlemUsIGRyb3BwaW5nIHBhY2tldFxuIik7CiAJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfQpAQCAtMTI5NywxMSArMTI2Myw5IEBACiAJCQkvKiBUaGVyZSB3YXMgYSBtYWpvciBlcnJvciwgbG9nIGl0LiAqLwogCQkJaW50IGVycl9zdGF0dXMgPSBsZTMyX3RvX2NwdShscC0+dHhfcmluZ1tlbnRyeV0ubWlzYyk7CiAJCQlkZXYtPnN0YXRzLnR4X2Vycm9ycysrOwotCQkJaWYgKG5ldGlmX21zZ190eF9lcnIobHApKQotCQkJCXByaW50ayhLRVJOX0VSUgotCQkJCSAgICAgICAiJXM6IFR4IGVycm9yIHN0YXR1cz0lMDR4IGVycl9zdGF0dXM9JTA4eFxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMsCi0JCQkJICAgICAgIGVycl9zdGF0dXMpOworCQkJbmV0aWZfZXJyKGxwLCB0eF9lcnIsIGRldiwKKwkJCQkgICJUeCBlcnJvciBzdGF0dXM9JTA0eCBlcnJfc3RhdHVzPSUwOHhcbiIsCisJCQkJICBzdGF0dXMsIGVycl9zdGF0dXMpOwogCQkJaWYgKGVycl9zdGF0dXMgJiAweDA0MDAwMDAwKQogCQkJCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMrKzsKIAkJCWlmIChlcnJfc3RhdHVzICYgMHgwODAwMDAwMCkKQEAgLTEzMTMsMTAgKzEyNzcsNyBAQAogCQkJCWRldi0+c3RhdHMudHhfZmlmb19lcnJvcnMrKzsKIAkJCQkvKiBBY2trISAgT24gRklGTyBlcnJvcnMgdGhlIFR4IHVuaXQgaXMgdHVybmVkIG9mZiEgKi8KIAkJCQkvKiBSZW1vdmUgdGhpcyB2ZXJib3NpdHkgbGF0ZXIhICovCi0JCQkJaWYgKG5ldGlmX21zZ190eF9lcnIobHApKQotCQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkJICAgICAgICIlczogVHggRklGTyBlcnJvciFcbiIsCi0JCQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJCW5ldGlmX2VycihscCwgdHhfZXJyLCBkZXYsICJUeCBGSUZPIGVycm9yIVxuIik7CiAJCQkJbXVzdF9yZXN0YXJ0ID0gMTsKIAkJCX0KICNlbHNlCkBAIC0xMzI1LDEwICsxMjg2LDcgQEAKIAkJCQlpZiAoIWxwLT5keHN1ZmxvKSB7CS8qIElmIGNvbnRyb2xsZXIgZG9lc24ndCByZWNvdmVyIC4uLiAqLwogCQkJCQkvKiBBY2trISAgT24gRklGTyBlcnJvcnMgdGhlIFR4IHVuaXQgaXMgdHVybmVkIG9mZiEgKi8KIAkJCQkJLyogUmVtb3ZlIHRoaXMgdmVyYm9zaXR5IGxhdGVyISAqLwotCQkJCQlpZiAobmV0aWZfbXNnX3R4X2VycihscCkpCi0JCQkJCQlwcmludGsoS0VSTl9FUlIKLQkJCQkJCSAgICAgICAiJXM6IFR4IEZJRk8gZXJyb3IhXG4iLAotCQkJCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQkJCW5ldGlmX2VycihscCwgdHhfZXJyLCBkZXYsICJUeCBGSUZPIGVycm9yIVxuIik7CiAJCQkJCW11c3RfcmVzdGFydCA9IDE7CiAJCQkJfQogCQkJfQpAQCAtMTM1NCwxMSArMTMxMiw4IEBACiAKIAlkZWx0YSA9IChscC0+Y3VyX3R4IC0gZGlydHlfdHgpICYgKGxwLT50eF9tb2RfbWFzayArIGxwLT50eF9yaW5nX3NpemUpOwogCWlmIChkZWx0YSA+IGxwLT50eF9yaW5nX3NpemUpIHsKLQkJaWYgKG5ldGlmX21zZ19kcnYobHApKQotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzOiBvdXQtb2Ytc3luYyBkaXJ0eSBwb2ludGVyLCAlZCB2cy4gJWQsIGZ1bGw9JWQuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSwgZGlydHlfdHgsIGxwLT5jdXJfdHgsCi0JCQkgICAgICAgbHAtPnR4X2Z1bGwpOworCQluZXRpZl9lcnIobHAsIGRydiwgZGV2LCAib3V0LW9mLXN5bmMgZGlydHkgcG9pbnRlciwgJWQgdnMuICVkLCBmdWxsPSVkXG4iLAorCQkJICBkaXJ0eV90eCwgbHAtPmN1cl90eCwgbHAtPnR4X2Z1bGwpOwogCQlkaXJ0eV90eCArPSBscC0+dHhfcmluZ19zaXplOwogCQlkZWx0YSAtPSBscC0+dHhfcmluZ19zaXplOwogCX0KQEAgLTE0MjEsNyArMTM3Niw3IEBACiAJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCWludCBqID0gbHAtPnBoeWNvdW50ICogUENORVQzMl9SRUdTX1BFUl9QSFk7CiAKLQlyZXR1cm4gKChQQ05FVDMyX05VTV9SRUdTICsgaikgKiBzaXplb2YodTE2KSk7CisJcmV0dXJuIChQQ05FVDMyX05VTV9SRUdTICsgaikgKiBzaXplb2YodTE2KTsKIH0KIAogc3RhdGljIHZvaWQgcGNuZXQzMl9nZXRfcmVncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9yZWdzICpyZWdzLApAQCAtMTQ0NSwyMSArMTQwMCwyMCBAQAogCQkqYnVmZisrID0gaW53KGlvYWRkciArIGkpOwogCiAJLyogcmVhZCBjb250cm9sIGFuZCBzdGF0dXMgcmVnaXN0ZXJzICovCi0JZm9yIChpID0gMDsgaSA8IDkwOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgOTA7IGkrKykKIAkJKmJ1ZmYrKyA9IGEtPnJlYWRfY3NyKGlvYWRkciwgaSk7Ci0JfQogCiAJKmJ1ZmYrKyA9IGEtPnJlYWRfY3NyKGlvYWRkciwgMTEyKTsKIAkqYnVmZisrID0gYS0+cmVhZF9jc3IoaW9hZGRyLCAxMTQpOwogCiAJLyogcmVhZCBidXMgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMzA7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCAzMDsgaSsrKQogCQkqYnVmZisrID0gYS0+cmVhZF9iY3IoaW9hZGRyLCBpKTsKLQl9CisKIAkqYnVmZisrID0gMDsJCS8qIHNraXAgYmNyMzAgc28gYXMgbm90IHRvIGhhbmcgNzlDOTc2ICovCi0JZm9yIChpID0gMzE7IGkgPCAzNjsgaSsrKSB7CisKKwlmb3IgKGkgPSAzMTsgaSA8IDM2OyBpKyspCiAJCSpidWZmKysgPSBhLT5yZWFkX2Jjcihpb2FkZHIsIGkpOwotCX0KIAogCS8qIHJlYWQgbWlpIHBoeSByZWdpc3RlcnMgKi8KIAlpZiAobHAtPm1paSkgewpAQCAtMTUzNSw4ICsxNDg5LDcgQEAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAoZXJyIDwgMCkgewogCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKLQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSAgICAgICAiZmFpbGVkIHRvIGVuYWJsZSBkZXZpY2UgLS0gZXJyPSVkXG4iLCBlcnIpOworCQkJcHJfZXJyKCJmYWlsZWQgdG8gZW5hYmxlIGRldmljZSAtLSBlcnI9JWRcbiIsIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwpAQCAtMTU0NCwyOSArMTQ5NywyNSBAQAogCWlvYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKIAlpZiAoIWlvYWRkcikgewogCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKLQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSAgICAgICAiY2FyZCBoYXMgbm8gUENJIElPIHJlc291cmNlcywgYWJvcnRpbmdcbiIpOworCQkJcHJfZXJyKCJjYXJkIGhhcyBubyBQQ0kgSU8gcmVzb3VyY2VzLCBhYm9ydGluZ1xuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmICghcGNpX2RtYV9zdXBwb3J0ZWQocGRldiwgUENORVQzMl9ETUFfTUFTSykpIHsKIAkJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpCi0JCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkgICAgICAgImFyY2hpdGVjdHVyZSBkb2VzIG5vdCBzdXBwb3J0IDMyYml0IFBDSSBidXNtYXN0ZXIgRE1BXG4iKTsKKwkJCXByX2VycigiYXJjaGl0ZWN0dXJlIGRvZXMgbm90IHN1cHBvcnQgMzJiaXQgUENJIGJ1c21hc3RlciBETUFcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JaWYgKHJlcXVlc3RfcmVnaW9uKGlvYWRkciwgUENORVQzMl9UT1RBTF9TSVpFLCAicGNuZXQzMl9wcm9iZV9wY2kiKSA9PQotCSAgICBOVUxMKSB7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbihpb2FkZHIsIFBDTkVUMzJfVE9UQUxfU0laRSwgInBjbmV0MzJfcHJvYmVfcGNpIikpIHsKIAkJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpCi0JCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkgICAgICAgImlvIGFkZHJlc3MgcmFuZ2UgYWxyZWFkeSBhbGxvY2F0ZWRcbiIpOworCQkJcHJfZXJyKCJpbyBhZGRyZXNzIHJhbmdlIGFscmVhZHkgYWxsb2NhdGVkXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKIAllcnIgPSBwY25ldDMyX3Byb2JlMShpb2FkZHIsIDEsIHBkZXYpOwotCWlmIChlcnIgPCAwKSB7CisJaWYgKGVyciA8IDApCiAJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLQl9CisKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNjE2LDcgKzE1NjUsNyBAQAogCQkJYSA9ICZwY25ldDMyX2R3aW87CiAJCX0gZWxzZSB7CiAJCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKLQkJCQlwcmludGsoS0VSTl9FUlIgUEZYICJObyBhY2Nlc3MgbWV0aG9kc1xuIik7CisJCQkJcHJfZXJyKCJObyBhY2Nlc3MgbWV0aG9kc1xuIik7CiAJCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAkJfQogCX0KQEAgLTE2MjQsMTEgKzE1NzMsMTAgQEAKIAljaGlwX3ZlcnNpb24gPQogCSAgICBhLT5yZWFkX2Nzcihpb2FkZHIsIDg4KSB8IChhLT5yZWFkX2Nzcihpb2FkZHIsIDg5KSA8PCAxNik7CiAJaWYgKChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKSAmJiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19IVykpCi0JCXByaW50ayhLRVJOX0lORk8gIiAgUENuZXQgY2hpcCB2ZXJzaW9uIGlzICUjeC5cbiIsCi0JCSAgICAgICBjaGlwX3ZlcnNpb24pOworCQlwcl9pbmZvKCIgIFBDbmV0IGNoaXAgdmVyc2lvbiBpcyAlI3hcbiIsIGNoaXBfdmVyc2lvbik7CiAJaWYgKChjaGlwX3ZlcnNpb24gJiAweGZmZikgIT0gMHgwMDMpIHsKIAkJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiVW5zdXBwb3J0ZWQgY2hpcCB2ZXJzaW9uLlxuIik7CisJCQlwcl9pbmZvKCJVbnN1cHBvcnRlZCBjaGlwIHZlcnNpb25cbiIpOwogCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKIAl9CiAKQEAgLTE2ODEsNyArMTYyOSw3IEBACiAJCWlmIChjYXJkc19mb3VuZCA8IE1BWF9VTklUUyAmJiBob21lcG5hW2NhcmRzX2ZvdW5kXSkKIAkJCW1lZGlhIHw9IDE7CS8qIHN3aXRjaCB0byBob21lIHdpcmluZyBtb2RlICovCiAJCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJtZWRpYSBzZXQgdG8gJXNNYml0IG1vZGUuXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJtZWRpYSBzZXQgdG8gJXNNYml0IG1vZGVcbiIsCiAJCQkgICAgICAgKG1lZGlhICYgMSkgPyAiMSIgOiAiMTAiKTsKIAkJYS0+d3JpdGVfYmNyKGlvYWRkciwgNDksIG1lZGlhKTsKIAkJYnJlYWs7CkBAIC0xNjk3LDkgKzE2NDUsOCBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKLQkJCXByaW50ayhLRVJOX0lORk8gUEZYCi0JCQkgICAgICAgIlBDbmV0IHZlcnNpb24gJSN4LCBubyBQQ25ldDMyIGNoaXAuXG4iLAotCQkJICAgICAgIGNoaXBfdmVyc2lvbik7CisJCQlwcl9pbmZvKCJQQ25ldCB2ZXJzaW9uICUjeCwgbm8gUENuZXQzMiBjaGlwXG4iLAorCQkJCWNoaXBfdmVyc2lvbik7CiAJCWdvdG8gZXJyX3JlbGVhc2VfcmVnaW9uOwogCX0KIApAQCAtMTcyMSw3ICsxNjY4LDcgQEAKIAlkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2YoKmxwKSk7CiAJaWYgKCFkZXYpIHsKIAkJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpCi0JCQlwcmludGsoS0VSTl9FUlIgUEZYICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iKTsKKwkJCXByX2VycigiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfcmVsZWFzZV9yZWdpb247CiAJfQpAQCAtMTczMCw3ICsxNjc3LDcgQEAKIAkJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAogCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXMgYXQgJSMzbHgsIiwgY2hpcG5hbWUsIGlvYWRkcik7CisJCXByX2luZm8oIiVzIGF0ICUjM2x4LCIsIGNoaXBuYW1lLCBpb2FkZHIpOwogCiAJLyogSW4gbW9zdCBjaGlwcywgYWZ0ZXIgYSBjaGlwIHJlc2V0LCB0aGUgZXRoZXJuZXQgYWRkcmVzcyBpcyByZWFkIGZyb20gdGhlCiAJICogc3RhdGlvbiBhZGRyZXNzIFBST00gYXQgdGhlIGJhc2UgYWRkcmVzcyBhbmQgcHJvZ3JhbW1lZCBpbnRvIHRoZQpAQCAtMTc1NSw5ICsxNzAyLDggQEAKIAkgICAgIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpIHsKIAkJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIocHJvbWFkZHIpKSB7CiAJCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkgewotCQkJCXByaW50aygiIHdhcm5pbmc6IENTUiBhZGRyZXNzIGludmFsaWQsXG4iKTsKLQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJICAgICAgICIgICAgdXNpbmcgaW5zdGVhZCBQUk9NIGFkZHJlc3Mgb2YiKTsKKwkJCQlwcl9jb250KCIgd2FybmluZzogQ1NSIGFkZHJlc3MgaW52YWxpZCxcbiIpOworCQkJCXByX2luZm8oIiAgICB1c2luZyBpbnN0ZWFkIFBST00gYWRkcmVzcyBvZiIpOwogCQkJfQogCQkJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIHByb21hZGRyLCA2KTsKIAkJfQpAQCAtMTc2OSw1NCArMTcxNSw1NCBAQAogCQltZW1zZXQoZGV2LT5kZXZfYWRkciwgMCwgRVRIX0FMRU4pOwogCiAJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpIHsKLQkJcHJpbnRrKCIgJXBNIiwgZGV2LT5kZXZfYWRkcik7CisJCXByX2NvbnQoIiAlcE0iLCBkZXYtPmRldl9hZGRyKTsKIAogCQkvKiBWZXJzaW9uIDB4MjYyMyBhbmQgMHgyNjI0ICovCiAJCWlmICgoKGNoaXBfdmVyc2lvbiArIDEpICYgMHhmZmZlKSA9PSAweDI2MjQpIHsKIAkJCWkgPSBhLT5yZWFkX2Nzcihpb2FkZHIsIDgwKSAmIDB4MEMwMDsJLyogQ2hlY2sgdHhfc3RhcnRfcHQgKi8KLQkJCXByaW50ayhLRVJOX0lORk8gIiAgICB0eF9zdGFydF9wdCgweCUwNHgpOiIsIGkpOworCQkJcHJfaW5mbygiICAgIHR4X3N0YXJ0X3B0KDB4JTA0eCk6IiwgaSk7CiAJCQlzd2l0Y2ggKGkgPj4gMTApIHsKIAkJCWNhc2UgMDoKLQkJCQlwcmludGsoS0VSTl9DT05UICIgIDIwIGJ5dGVzLCIpOworCQkJCXByX2NvbnQoIiAgMjAgYnl0ZXMsIik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDE6Ci0JCQkJcHJpbnRrKEtFUk5fQ09OVCAiICA2NCBieXRlcywiKTsKKwkJCQlwcl9jb250KCIgIDY0IGJ5dGVzLCIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSAyOgotCQkJCXByaW50ayhLRVJOX0NPTlQgIiAxMjggYnl0ZXMsIik7CisJCQkJcHJfY29udCgiIDEyOCBieXRlcywiKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgMzoKLQkJCQlwcmludGsoS0VSTl9DT05UICJ+MjIwIGJ5dGVzLCIpOworCQkJCXByX2NvbnQoIn4yMjAgYnl0ZXMsIik7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCQlpID0gYS0+cmVhZF9iY3IoaW9hZGRyLCAxOCk7CS8qIENoZWNrIEJ1cnN0L0J1cyBjb250cm9sICovCi0JCQlwcmludGsoS0VSTl9DT05UICIgQkNSMTgoJXgpOiIsIGkgJiAweGZmZmYpOworCQkJcHJfY29udCgiIEJDUjE4KCV4KToiLCBpICYgMHhmZmZmKTsKIAkJCWlmIChpICYgKDEgPDwgNSkpCi0JCQkJcHJpbnRrKEtFUk5fQ09OVCAiQnVyc3RXckVuICIpOworCQkJCXByX2NvbnQoIkJ1cnN0V3JFbiAiKTsKIAkJCWlmIChpICYgKDEgPDwgNikpCi0JCQkJcHJpbnRrKEtFUk5fQ09OVCAiQnVyc3RSZEVuICIpOworCQkJCXByX2NvbnQoIkJ1cnN0UmRFbiAiKTsKIAkJCWlmIChpICYgKDEgPDwgNykpCi0JCQkJcHJpbnRrKEtFUk5fQ09OVCAiRFdvcmRJTyAiKTsKKwkJCQlwcl9jb250KCJEV29yZElPICIpOwogCQkJaWYgKGkgJiAoMSA8PCAxMSkpCi0JCQkJcHJpbnRrKEtFUk5fQ09OVCAiTm9VRmxvdyAiKTsKKwkJCQlwcl9jb250KCJOb1VGbG93ICIpOwogCQkJaSA9IGEtPnJlYWRfYmNyKGlvYWRkciwgMjUpOwotCQkJcHJpbnRrKEtFUk5fSU5GTyAiICAgIFNSQU1TSVpFPTB4JTA0eCwiLCBpIDw8IDgpOworCQkJcHJfaW5mbygiICAgIFNSQU1TSVpFPTB4JTA0eCwiLCBpIDw8IDgpOwogCQkJaSA9IGEtPnJlYWRfYmNyKGlvYWRkciwgMjYpOwotCQkJcHJpbnRrKEtFUk5fQ09OVCAiIFNSQU1fQk5EPTB4JTA0eCwiLCBpIDw8IDgpOworCQkJcHJfY29udCgiIFNSQU1fQk5EPTB4JTA0eCwiLCBpIDw8IDgpOwogCQkJaSA9IGEtPnJlYWRfYmNyKGlvYWRkciwgMjcpOwogCQkJaWYgKGkgJiAoMSA8PCAxNCkpCi0JCQkJcHJpbnRrKEtFUk5fQ09OVCAiTG93TGF0UngiKTsKKwkJCQlwcl9jb250KCJMb3dMYXRSeCIpOwogCQl9CiAJfQogCiAJZGV2LT5iYXNlX2FkZHIgPSBpb2FkZHI7CiAJbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCS8qIHBjaV9hbGxvY19jb25zaXN0ZW50IHJldHVybnMgcGFnZS1hbGlnbmVkIG1lbW9yeSwgc28gd2UgZG8gbm90IGhhdmUgdG8gY2hlY2sgdGhlIGFsaWdubWVudCAqLwotCWlmICgobHAtPmluaXRfYmxvY2sgPQotCSAgICAgcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKCpscC0+aW5pdF9ibG9jayksICZscC0+aW5pdF9kbWFfYWRkcikpID09IE5VTEwpIHsKKwlscC0+aW5pdF9ibG9jayA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHNpemVvZigqbHAtPmluaXRfYmxvY2spLAorCQkJCQkgICAgICAmbHAtPmluaXRfZG1hX2FkZHIpOworCWlmICghbHAtPmluaXRfYmxvY2spIHsKIAkJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpCi0JCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkgICAgICAgIkNvbnNpc3RlbnQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIik7CisJCQlwcl9lcnIoIkNvbnNpc3RlbnQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBlcnJfZnJlZV9uZXRkZXY7CiAJfQpAQCAtMTg5MCw3ICsxODM2LDcgQEAKIAlpZiAocGRldikgewkJLyogdXNlIHRoZSBJUlEgcHJvdmlkZWQgYnkgUENJICovCiAJCWRldi0+aXJxID0gcGRldi0+aXJxOwogCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKLQkJCXByaW50aygiIGFzc2lnbmVkIElSUSAlZC5cbiIsIGRldi0+aXJxKTsKKwkJCXByX2NvbnQoIiBhc3NpZ25lZCBJUlEgJWRcbiIsIGRldi0+aXJxKTsKIAl9IGVsc2UgewogCQl1bnNpZ25lZCBsb25nIGlycV9tYXNrID0gcHJvYmVfaXJxX29uKCk7CiAKQEAgLTE5MDYsMTIgKzE4NTIsMTIgQEAKIAkJZGV2LT5pcnEgPSBwcm9iZV9pcnFfb2ZmKGlycV9tYXNrKTsKIAkJaWYgKCFkZXYtPmlycSkgewogCQkJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpCi0JCQkJcHJpbnRrKCIsIGZhaWxlZCB0byBkZXRlY3QgSVJRIGxpbmUuXG4iKTsKKwkJCQlwcl9jb250KCIsIGZhaWxlZCB0byBkZXRlY3QgSVJRIGxpbmVcbiIpOwogCQkJcmV0ID0gLUVOT0RFVjsKIAkJCWdvdG8gZXJyX2ZyZWVfcmluZzsKIAkJfQogCQlpZiAocGNuZXQzMl9kZWJ1ZyAmIE5FVElGX01TR19QUk9CRSkKLQkJCXByaW50aygiLCBwcm9iZWQgSVJRICVkLlxuIiwgZGV2LT5pcnEpOworCQkJcHJfY29udCgiLCBwcm9iZWQgSVJRICVkXG4iLCBkZXYtPmlycSk7CiAJfQogCiAJLyogU2V0IHRoZSBtaWkgcGh5X2lkIHNvIHRoYXQgd2UgY2FuIHF1ZXJ5IHRoZSBsaW5rIHN0YXRlICovCkBAIC0xOTM1LDE0ICsxODgxLDEyIEBACiAJCQlscC0+cGh5bWFzayB8PSAoMSA8PCBpKTsKIAkJCWxwLT5taWlfaWYucGh5X2lkID0gaTsKIAkJCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQotCQkJCXByaW50ayhLRVJOX0lORk8gUEZYCi0JCQkJICAgICAgICJGb3VuZCBQSFkgJTA0eDolMDR4IGF0IGFkZHJlc3MgJWQuXG4iLAotCQkJCSAgICAgICBpZDEsIGlkMiwgaSk7CisJCQkJcHJfaW5mbygiRm91bmQgUEhZICUwNHg6JTA0eCBhdCBhZGRyZXNzICVkXG4iLAorCQkJCQlpZDEsIGlkMiwgaSk7CiAJCX0KIAkJbHAtPmEud3JpdGVfYmNyKGlvYWRkciwgMzMsIChscC0+bWlpX2lmLnBoeV9pZCkgPDwgNSk7Ci0JCWlmIChscC0+cGh5Y291bnQgPiAxKSB7CisJCWlmIChscC0+cGh5Y291bnQgPiAxKQogCQkJbHAtPm9wdGlvbnMgfD0gUENORVQzMl9QT1JUX01JSTsKLQkJfQogCX0KIAogCWluaXRfdGltZXIoJmxwLT53YXRjaGRvZ190aW1lcik7CkBAIC0xOTY2LDcgKzE5MTAsNyBAQAogCX0KIAogCWlmIChwY25ldDMyX2RlYnVnICYgTkVUSUZfTVNHX1BST0JFKQotCQlwcmludGsoS0VSTl9JTkZPICIlczogcmVnaXN0ZXJlZCBhcyAlc1xuIiwgZGV2LT5uYW1lLCBscC0+bmFtZSk7CisJCXByX2luZm8oIiVzOiByZWdpc3RlcmVkIGFzICVzXG4iLCBkZXYtPm5hbWUsIGxwLT5uYW1lKTsKIAljYXJkc19mb3VuZCsrOwogCiAJLyogZW5hYmxlIExFRCB3cml0ZXMgKi8KQEAgLTE5OTUsMTAgKzE5MzksNyBAQAogCQkJCQkgICBscC0+dHhfcmluZ19zaXplLAogCQkJCQkgICAmbHAtPnR4X3JpbmdfZG1hX2FkZHIpOwogCWlmIChscC0+dHhfcmluZyA9PSBOVUxMKSB7Ci0JCWlmIChuZXRpZl9tc2dfZHJ2KGxwKSkKLQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSAgICAgICAiJXM6IENvbnNpc3RlbnQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIiwKLQkJCSAgICAgICBuYW1lKTsKKwkJbmV0aWZfZXJyKGxwLCBkcnYsIGRldiwgIkNvbnNpc3RlbnQgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0yMDA3LDQ2ICsxOTQ4LDM1IEBACiAJCQkJCSAgIGxwLT5yeF9yaW5nX3NpemUsCiAJCQkJCSAgICZscC0+cnhfcmluZ19kbWFfYWRkcik7CiAJaWYgKGxwLT5yeF9yaW5nID09IE5VTEwpIHsKLQkJaWYgKG5ldGlmX21zZ19kcnYobHApKQotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJICAgICAgICIlczogQ29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iLAotCQkJICAgICAgIG5hbWUpOworCQluZXRpZl9lcnIobHAsIGRydiwgZGV2LCAiQ29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlscC0+dHhfZG1hX2FkZHIgPSBrY2FsbG9jKGxwLT50eF9yaW5nX3NpemUsIHNpemVvZihkbWFfYWRkcl90KSwKIAkJCQkgIEdGUF9BVE9NSUMpOwogCWlmICghbHAtPnR4X2RtYV9hZGRyKSB7Ci0JCWlmIChuZXRpZl9tc2dfZHJ2KGxwKSkKLQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSAgICAgICAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIsIG5hbWUpOworCQluZXRpZl9lcnIobHAsIGRydiwgZGV2LCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJbHAtPnJ4X2RtYV9hZGRyID0ga2NhbGxvYyhscC0+cnhfcmluZ19zaXplLCBzaXplb2YoZG1hX2FkZHJfdCksCiAJCQkJICBHRlBfQVRPTUlDKTsKIAlpZiAoIWxwLT5yeF9kbWFfYWRkcikgewotCQlpZiAobmV0aWZfbXNnX2RydihscCkpCi0JCQlwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkgICAgICAgIiVzOiBNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuXG4iLCBuYW1lKTsKKwkJbmV0aWZfZXJyKGxwLCBkcnYsIGRldiwgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAogCWxwLT50eF9za2J1ZmYgPSBrY2FsbG9jKGxwLT50eF9yaW5nX3NpemUsIHNpemVvZihzdHJ1Y3Qgc2tfYnVmZiAqKSwKIAkJCQlHRlBfQVRPTUlDKTsKIAlpZiAoIWxwLT50eF9za2J1ZmYpIHsKLQkJaWYgKG5ldGlmX21zZ19kcnYobHApKQotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWAotCQkJICAgICAgICIlczogTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkLlxuIiwgbmFtZSk7CisJCW5ldGlmX2VycihscCwgZHJ2LCBkZXYsICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlscC0+cnhfc2tidWZmID0ga2NhbGxvYyhscC0+cnhfcmluZ19zaXplLCBzaXplb2Yoc3RydWN0IHNrX2J1ZmYgKiksCiAJCQkJR0ZQX0FUT01JQyk7CiAJaWYgKCFscC0+cnhfc2tidWZmKSB7Ci0JCWlmIChuZXRpZl9tc2dfZHJ2KGxwKSkKLQkJCXByaW50ayhLRVJOX0VSUiBQRlgKLQkJCSAgICAgICAiJXM6IE1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIsIG5hbWUpOworCQluZXRpZl9lcnIobHAsIGRydiwgZGV2LCAiTWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0yMTE1LDEyICsyMDQ1LDExIEBACiAJLyogc3dpdGNoIHBjbmV0MzIgdG8gMzJiaXQgbW9kZSAqLwogCWxwLT5hLndyaXRlX2Jjcihpb2FkZHIsIDIwLCAyKTsKIAotCWlmIChuZXRpZl9tc2dfaWZ1cChscCkpCi0JCXByaW50ayhLRVJOX0RFQlVHCi0JCSAgICAgICAiJXM6IHBjbmV0MzJfb3BlbigpIGlycSAlZCB0eC9yeCByaW5ncyAlI3gvJSN4IGluaXQgJSN4LlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZGV2LT5pcnEsICh1MzIpIChscC0+dHhfcmluZ19kbWFfYWRkciksCi0JCSAgICAgICAodTMyKSAobHAtPnJ4X3JpbmdfZG1hX2FkZHIpLAotCQkgICAgICAgKHUzMikgKGxwLT5pbml0X2RtYV9hZGRyKSk7CisJbmV0aWZfcHJpbnRrKGxwLCBpZnVwLCBLRVJOX0RFQlVHLCBkZXYsCisJCSAgICAgIiVzKCkgaXJxICVkIHR4L3J4IHJpbmdzICUjeC8lI3ggaW5pdCAlI3hcbiIsCisJCSAgICAgX19mdW5jX18sIGRldi0+aXJxLCAodTMyKSAobHAtPnR4X3JpbmdfZG1hX2FkZHIpLAorCQkgICAgICh1MzIpIChscC0+cnhfcmluZ19kbWFfYWRkciksCisJCSAgICAgKHUzMikgKGxwLT5pbml0X2RtYV9hZGRyKSk7CiAKIAkvKiBzZXQvcmVzZXQgYXV0b3NlbGVjdCBiaXQgKi8KIAl2YWwgPSBscC0+YS5yZWFkX2Jjcihpb2FkZHIsIDIpICYgfjI7CkBAIC0yMTU1LDEwICsyMDg0LDggQEAKIAkgICAgIHBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgPT0gUENJX1NVQkRFVklDRV9JRF9BVF8yNzAxRlgpKSB7CiAJCWlmIChscC0+b3B0aW9ucyAmIFBDTkVUMzJfUE9SVF9BU0VMKSB7CiAJCQlscC0+b3B0aW9ucyA9IFBDTkVUMzJfUE9SVF9GRCB8IFBDTkVUMzJfUE9SVF8xMDA7Ci0JCQlpZiAobmV0aWZfbXNnX2xpbmsobHApKQotCQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkJICAgICAgICIlczogU2V0dGluZyAxMDBNYi1GdWxsIER1cGxleC5cbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQluZXRpZl9wcmludGsobHAsIGxpbmssIEtFUk5fREVCVUcsIGRldiwKKwkJCQkgICAgICJTZXR0aW5nIDEwME1iLUZ1bGwgRHVwbGV4XG4iKTsKIAkJfQogCX0KIAlpZiAobHAtPnBoeWNvdW50IDwgMikgewpAQCAtMjI0Niw5ICsyMTczLDcgQEAKIAkJCX0KIAkJfQogCQlscC0+bWlpX2lmLnBoeV9pZCA9IGZpcnN0X3BoeTsKLQkJaWYgKG5ldGlmX21zZ19saW5rKGxwKSkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVc2luZyBQSFkgbnVtYmVyICVkLlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGZpcnN0X3BoeSk7CisJCW5ldGlmX2luZm8obHAsIGxpbmssIGRldiwgIlVzaW5nIFBIWSBudW1iZXIgJWRcbiIsIGZpcnN0X3BoeSk7CiAJfQogCiAjaWZkZWYgRE9fRFhTVUZMTwpAQCAtMjI5NSwxOCArMjIyMCwxNyBAQAogCSAqLwogCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIENTUjAsIENTUjBfTk9STUFMKTsKIAotCWlmIChuZXRpZl9tc2dfaWZ1cChscCkpCi0JCXByaW50ayhLRVJOX0RFQlVHCi0JCSAgICAgICAiJXM6IHBjbmV0MzIgb3BlbiBhZnRlciAlZCB0aWNrcywgaW5pdCBibG9jayAlI3ggY3NyMCAlNC40eC5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGksCi0JCSAgICAgICAodTMyKSAobHAtPmluaXRfZG1hX2FkZHIpLAotCQkgICAgICAgbHAtPmEucmVhZF9jc3IoaW9hZGRyLCBDU1IwKSk7CisJbmV0aWZfcHJpbnRrKGxwLCBpZnVwLCBLRVJOX0RFQlVHLCBkZXYsCisJCSAgICAgInBjbmV0MzIgb3BlbiBhZnRlciAlZCB0aWNrcywgaW5pdCBibG9jayAlI3ggY3NyMCAlNC40eFxuIiwKKwkJICAgICBpLAorCQkgICAgICh1MzIpIChscC0+aW5pdF9kbWFfYWRkciksCisJCSAgICAgbHAtPmEucmVhZF9jc3IoaW9hZGRyLCBDU1IwKSk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZscC0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CQkvKiBBbHdheXMgc3VjY2VlZCAqLwogCi0gICAgICBlcnJfZnJlZV9yaW5nOgorZXJyX2ZyZWVfcmluZzoKIAkvKiBmcmVlIGFueSBhbGxvY2F0ZWQgc2tidWZmcyAqLwogCXBjbmV0MzJfcHVyZ2VfcnhfcmluZyhkZXYpOwogCkBAIC0yMzE2LDcgKzIyNDAsNyBAQAogCSAqLwogCWxwLT5hLndyaXRlX2Jjcihpb2FkZHIsIDIwLCA0KTsKIAotICAgICAgZXJyX2ZyZWVfaXJxOgorZXJyX2ZyZWVfaXJxOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiAJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiAJcmV0dXJuIHJjOwpAQCAtMjM2NywxNCArMjI5MSwxMiBAQAogCWZvciAoaSA9IDA7IGkgPCBscC0+cnhfcmluZ19zaXplOyBpKyspIHsKIAkJc3RydWN0IHNrX2J1ZmYgKnJ4X3NrYnVmZiA9IGxwLT5yeF9za2J1ZmZbaV07CiAJCWlmIChyeF9za2J1ZmYgPT0gTlVMTCkgewotCQkJaWYgKCEKLQkJCSAgICAocnhfc2tidWZmID0gbHAtPnJ4X3NrYnVmZltpXSA9Ci0JCQkgICAgIGRldl9hbGxvY19za2IoUEtUX0JVRl9TS0IpKSkgewotCQkJCS8qIHRoZXJlIGlzIG5vdCBtdWNoLCB3ZSBjYW4gZG8gYXQgdGhpcyBwb2ludCAqLwotCQkJCWlmIChuZXRpZl9tc2dfZHJ2KGxwKSkKLQkJCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJCSAgICAgICAiJXM6IHBjbmV0MzJfaW5pdF9yaW5nIGRldl9hbGxvY19za2IgZmFpbGVkLlxuIiwKLQkJCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlscC0+cnhfc2tidWZmW2ldID0gZGV2X2FsbG9jX3NrYihQS1RfQlVGX1NLQik7CisJCQlyeF9za2J1ZmYgPSBscC0+cnhfc2tidWZmW2ldOworCQkJaWYgKCFyeF9za2J1ZmYpIHsKKwkJCQkvKiB0aGVyZSBpcyBub3QgbXVjaCB3ZSBjYW4gZG8gYXQgdGhpcyBwb2ludCAqLworCQkJCW5ldGlmX2VycihscCwgZHJ2LCBkZXYsICIlcyBkZXZfYWxsb2Nfc2tiIGZhaWxlZFxuIiwKKwkJCQkJICBfX2Z1bmNfXyk7CiAJCQkJcmV0dXJuIC0xOwogCQkJfQogCQkJc2tiX3Jlc2VydmUocnhfc2tidWZmLCBORVRfSVBfQUxJR04pOwpAQCAtMjQyNCwxMCArMjM0Niw5IEBACiAJCWlmIChscC0+YS5yZWFkX2Nzcihpb2FkZHIsIENTUjApICYgQ1NSMF9TVE9QKQogCQkJYnJlYWs7CiAKLQlpZiAoaSA+PSAxMDAgJiYgbmV0aWZfbXNnX2RydihscCkpCi0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIiVzOiBwY25ldDMyX3Jlc3RhcnQgdGltZWQgb3V0IHdhaXRpbmcgZm9yIHN0b3AuXG4iLAotCQkgICAgICAgZGV2LT5uYW1lKTsKKwlpZiAoaSA+PSAxMDApCisJCW5ldGlmX2VycihscCwgZHJ2LCBkZXYsICIlcyB0aW1lZCBvdXQgd2FpdGluZyBmb3Igc3RvcFxuIiwKKwkJCSAgX19mdW5jX18pOwogCiAJcGNuZXQzMl9wdXJnZV90eF9yaW5nKGRldik7CiAJaWYgKHBjbmV0MzJfaW5pdF9yaW5nKGRldikpCkBAIC0yNDUxLDggKzIzNzIsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZscC0+bG9jaywgZmxhZ3MpOwogCS8qIFRyYW5zbWl0dGVyIHRpbWVvdXQsIHNlcmlvdXMgcHJvYmxlbXMuICovCiAJaWYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfRFJWKQotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICIlczogdHJhbnNtaXQgdGltZWQgb3V0LCBzdGF0dXMgJTQuNHgsIHJlc2V0dGluZy5cbiIsCisJCXByX2VycigiJXM6IHRyYW5zbWl0IHRpbWVkIG91dCwgc3RhdHVzICU0LjR4LCByZXNldHRpbmdcbiIsCiAJCSAgICAgICBkZXYtPm5hbWUsIGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCkpOwogCWxwLT5hLndyaXRlX2Nzcihpb2FkZHIsIENTUjAsIENTUjBfU1RPUCk7CiAJZGV2LT5zdGF0cy50eF9lcnJvcnMrKzsKQEAgLTI0OTUsMTEgKzI0MTUsOSBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAobmV0aWZfbXNnX3R4X3F1ZXVlZChscCkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJICAgICAgICIlczogcGNuZXQzMl9zdGFydF94bWl0KCkgY2FsbGVkLCBjc3IwICU0LjR4LlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbHAtPmEucmVhZF9jc3IoaW9hZGRyLCBDU1IwKSk7Ci0JfQorCW5ldGlmX3ByaW50ayhscCwgdHhfcXVldWVkLCBLRVJOX0RFQlVHLCBkZXYsCisJCSAgICAgIiVzKCkgY2FsbGVkLCBjc3IwICU0LjR4XG4iLAorCQkgICAgIF9fZnVuY19fLCBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIENTUjApKTsKIAogCS8qIERlZmF1bHQgc3RhdHVzIC0tIHdpbGwgbm90IGVuYWJsZSBTdWNjZXNzZnVsLVR4RG9uZQogCSAqIGludGVycnVwdCB3aGVuIHRoYXQgb3B0aW9uIGlzIGF2YWlsYWJsZSB0byB1cy4KQEAgLTI1NTgsMTYgKzI0NzYsMTQgQEAKIAogCWNzcjAgPSBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIENTUjApOwogCXdoaWxlICgoY3NyMCAmIDB4OGYwMCkgJiYgLS1ib2d1c2NudCA+PSAwKSB7Ci0JCWlmIChjc3IwID09IDB4ZmZmZikgeworCQlpZiAoY3NyMCA9PSAweGZmZmYpCiAJCQlicmVhazsJLyogUENNQ0lBIHJlbW92ZSBoYXBwZW5lZCAqLwotCQl9CiAJCS8qIEFja25vd2xlZGdlIGFsbCBvZiB0aGUgY3VycmVudCBpbnRlcnJ1cHQgc291cmNlcyBBU0FQLiAqLwogCQlscC0+YS53cml0ZV9jc3IoaW9hZGRyLCBDU1IwLCBjc3IwICYgfjB4MDA0Zik7CiAKLQkJaWYgKG5ldGlmX21zZ19pbnRyKGxwKSkKLQkJCXByaW50ayhLRVJOX0RFQlVHCi0JCQkgICAgICAgIiVzOiBpbnRlcnJ1cHQgIGNzcjA9JSMyLjJ4IG5ldyBjc3I9JSMyLjJ4LlxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGNzcjAsIGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCkpOworCQluZXRpZl9wcmludGsobHAsIGludHIsIEtFUk5fREVCVUcsIGRldiwKKwkJCSAgICAgImludGVycnVwdCAgY3NyMD0lIzIuMnggbmV3IGNzcj0lIzIuMnhcbiIsCisJCQkgICAgIGNzcjAsIGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCkpOwogCiAJCS8qIExvZyBtaXNjIGVycm9ycy4gKi8KIAkJaWYgKGNzcjAgJiAweDQwMDApCkBAIC0yNTg3LDEwICsyNTAzLDggQEAKIAkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CS8qIE1pc3NlZCBhIFJ4IGZyYW1lLiAqLwogCQl9CiAJCWlmIChjc3IwICYgMHgwODAwKSB7Ci0JCQlpZiAobmV0aWZfbXNnX2RydihscCkpCi0JCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkJICAgICAgICIlczogQnVzIG1hc3RlciBhcmJpdHJhdGlvbiBmYWlsdXJlLCBzdGF0dXMgJTQuNHguXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIGNzcjApOworCQkJbmV0aWZfZXJyKGxwLCBkcnYsIGRldiwgIkJ1cyBtYXN0ZXIgYXJiaXRyYXRpb24gZmFpbHVyZSwgc3RhdHVzICU0LjR4XG4iLAorCQkJCSAgY3NyMCk7CiAJCQkvKiB1bmxpa2UgZm9yIHRoZSBsYW5jZSwgdGhlcmUgaXMgbm8gcmVzdGFydCBuZWVkZWQgKi8KIAkJfQogCQlpZiAobmFwaV9zY2hlZHVsZV9wcmVwKCZscC0+bmFwaSkpIHsKQEAgLTI2MDYsOSArMjUyMCw5IEBACiAJCWNzcjAgPSBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIENTUjApOwogCX0KIAotCWlmIChuZXRpZl9tc2dfaW50cihscCkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZXhpdGluZyBpbnRlcnJ1cHQsIGNzcjA9JSM0LjR4LlxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbHAtPmEucmVhZF9jc3IoaW9hZGRyLCBDU1IwKSk7CisJbmV0aWZfcHJpbnRrKGxwLCBpbnRyLCBLRVJOX0RFQlVHLCBkZXYsCisJCSAgICAgImV4aXRpbmcgaW50ZXJydXB0LCBjc3IwPSUjNC40eFxuIiwKKwkJICAgICBscC0+YS5yZWFkX2Nzcihpb2FkZHIsIENTUjApKTsKIAogCXNwaW5fdW5sb2NrKCZscC0+bG9jayk7CiAKQEAgLTI2MzAsMTAgKzI1NDQsOSBAQAogCiAJZGV2LT5zdGF0cy5yeF9taXNzZWRfZXJyb3JzID0gbHAtPmEucmVhZF9jc3IoaW9hZGRyLCAxMTIpOwogCi0JaWYgKG5ldGlmX21zZ19pZmRvd24obHApKQotCQlwcmludGsoS0VSTl9ERUJVRwotCQkgICAgICAgIiVzOiBTaHV0dGluZyBkb3duIGV0aGVyY2FyZCwgc3RhdHVzIHdhcyAlMi4yeC5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCkpOworCW5ldGlmX3ByaW50ayhscCwgaWZkb3duLCBLRVJOX0RFQlVHLCBkZXYsCisJCSAgICAgIlNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCBzdGF0dXMgd2FzICUyLjJ4XG4iLAorCQkgICAgIGxwLT5hLnJlYWRfY3NyKGlvYWRkciwgQ1NSMCkpOwogCiAJLyogV2Ugc3RvcCB0aGUgUENORVQzMiBoZXJlIC0tIGl0IG9jY2FzaW9uYWxseSBwb2xscyBtZW1vcnkgaWYgd2UgZG9uJ3QuICovCiAJbHAtPmEud3JpdGVfY3NyKGlvYWRkciwgQ1NSMCwgQ1NSMF9TVE9QKTsKQEAgLTI2NzcsNyArMjU5MCw3IEBACiAJc3RydWN0IHBjbmV0MzJfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvbGF0aWxlIHN0cnVjdCBwY25ldDMyX2luaXRfYmxvY2sgKmliID0gbHAtPmluaXRfYmxvY2s7CiAJdm9sYXRpbGUgX19sZTE2ICptY2FzdF90YWJsZSA9IChfX2xlMTYgKilpYi0+ZmlsdGVyOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gZGV2LT5iYXNlX2FkZHI7CiAJY2hhciAqYWRkcnM7CiAJaW50IGk7CkBAIC0yNjk4LDkgKzI2MTEsOCBAQAogCWliLT5maWx0ZXJbMV0gPSAwOwogCiAJLyogQWRkIGFkZHJlc3NlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyspIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogCQlhZGRycyA9IGRtaS0+ZG1pX2FkZHI7Ci0JCWRtaSA9IGRtaS0+bmV4dDsKIAogCQkvKiBtdWx0aWNhc3QgYWRkcmVzcz8gKi8KIAkJaWYgKCEoKmFkZHJzICYgMSkpCkBAIC0yNzMwLDkgKzI2NDIsNyBAQAogCWNzcjE1ID0gbHAtPmEucmVhZF9jc3IoaW9hZGRyLCBDU1IxNSk7CiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQkvKiBMb2cgYW55IG5ldCB0YXBzLiAqLwotCQlpZiAobmV0aWZfbXNnX2h3KGxwKSkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCW5ldGlmX2luZm8obHAsIGh3LCBkZXYsICJQcm9taXNjdW91cyBtb2RlIGVuYWJsZWRcbiIpOwogCQlscC0+aW5pdF9ibG9jay0+bW9kZSA9CiAJCSAgICBjcHVfdG9fbGUxNigweDgwMDAgfCAobHAtPm9wdGlvbnMgJiBQQ05FVDMyX1BPUlRfUE9SVFNFTCkgPDwKIAkJCQk3KTsKQEAgLTI4MTksMTAgKzI3MjksOCBAQAogCQkJbWlpLnBoeV9pZCA9IGk7CiAJCQlpZiAobWlpX2xpbmtfb2soJm1paSkpIHsKIAkJCQkvKiBmb3VuZCBQSFkgd2l0aCBhY3RpdmUgbGluayAqLwotCQkJCWlmIChuZXRpZl9tc2dfbGluayhscCkpCi0JCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkJICAgICAgICIlczogVXNpbmcgUEhZIG51bWJlciAlZC5cbiIsCi0JCQkJCSAgICAgICBkZXYtPm5hbWUsIGkpOworCQkJCW5ldGlmX2luZm8obHAsIGxpbmssIGRldiwgIlVzaW5nIFBIWSBudW1iZXIgJWRcbiIsCisJCQkJCSAgIGkpOwogCiAJCQkJLyogaXNvbGF0ZSBpbmFjdGl2ZSBwaHkgKi8KIAkJCQlibWNyID0KQEAgLTI4NjgsOCArMjc3Niw3IEBACiAJaWYgKCFjdXJyX2xpbmspIHsKIAkJaWYgKHByZXZfbGluayB8fCB2ZXJib3NlKSB7CiAJCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCQkJaWYgKG5ldGlmX21zZ19saW5rKGxwKSkKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayBkb3duXG4iLCBkZXYtPm5hbWUpOworCQkJbmV0aWZfaW5mbyhscCwgbGluaywgZGV2LCAibGluayBkb3duXG4iKTsKIAkJfQogCQlpZiAobHAtPnBoeWNvdW50ID4gMSkgewogCQkJY3Vycl9saW5rID0gcGNuZXQzMl9jaGVja19vdGhlcnBoeShkZXYpOwpAQCAtMjg4MSwxMiArMjc4OCwxMSBAQAogCQkJaWYgKG5ldGlmX21zZ19saW5rKGxwKSkgewogCQkJCXN0cnVjdCBldGh0b29sX2NtZCBlY21kOwogCQkJCW1paV9ldGh0b29sX2dzZXQoJmxwLT5taWlfaWYsICZlY21kKTsKLQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJICAgICAgICIlczogbGluayB1cCwgJXNNYnBzLCAlcy1kdXBsZXhcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwKLQkJCQkgICAgICAgKGVjbWQuc3BlZWQgPT0gU1BFRURfMTAwKSA/ICIxMDAiIDogIjEwIiwKLQkJCQkgICAgICAgKGVjbWQuZHVwbGV4ID09Ci0JCQkJCURVUExFWF9GVUxMKSA/ICJmdWxsIiA6ICJoYWxmIik7CisJCQkJbmV0ZGV2X2luZm8oZGV2LCAibGluayB1cCwgJXNNYnBzLCAlcy1kdXBsZXhcbiIsCisJCQkJCSAgICAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMDApCisJCQkJCSAgICA/ICIxMDAiIDogIjEwIiwKKwkJCQkJICAgIChlY21kLmR1cGxleCA9PSBEVVBMRVhfRlVMTCkKKwkJCQkJICAgID8gImZ1bGwiIDogImhhbGYiKTsKIAkJCX0KIAkJCWJjcjkgPSBscC0+YS5yZWFkX2JjcihkZXYtPmJhc2VfYWRkciwgOSk7CiAJCQlpZiAoKGJjcjkgJiAoMSA8PCAwKSkgIT0gbHAtPm1paV9pZi5mdWxsX2R1cGxleCkgewpAQCAtMjg5Nyw4ICsyODAzLDcgQEAKIAkJCQlscC0+YS53cml0ZV9iY3IoZGV2LT5iYXNlX2FkZHIsIDksIGJjcjkpOwogCQkJfQogCQl9IGVsc2UgewotCQkJaWYgKG5ldGlmX21zZ19saW5rKGxwKSkKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayB1cFxuIiwgZGV2LT5uYW1lKTsKKwkJCW5ldGlmX2luZm8obHAsIGxpbmssIGRldiwgImxpbmsgdXBcbiIpOwogCQl9CiAJfQogfQpAQCAtMzAxMCw3ICsyOTE1LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgcGNuZXQzMl9pbml0X21vZHVsZSh2b2lkKQogewotCXByaW50ayhLRVJOX0lORk8gIiVzIiwgdmVyc2lvbik7CisJcHJfaW5mbygiJXMiLCB2ZXJzaW9uKTsKIAogCXBjbmV0MzJfZGVidWcgPSBuZXRpZl9tc2dfaW5pdChkZWJ1ZywgUENORVQzMl9NU0dfREVGQVVMVCk7CiAKQEAgLTMwMjYsNyArMjkzMSw3IEBACiAJCXBjbmV0MzJfcHJvYmVfdmxidXMocGNuZXQzMl9wb3J0bGlzdCk7CiAKIAlpZiAoY2FyZHNfZm91bmQgJiYgKHBjbmV0MzJfZGVidWcgJiBORVRJRl9NU0dfUFJPQkUpKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJWQgY2FyZHNfZm91bmQuXG4iLCBjYXJkc19mb3VuZCk7CisJCXByX2luZm8oIiVkIGNhcmRzX2ZvdW5kXG4iLCBjYXJkc19mb3VuZCk7CiAKIAlyZXR1cm4gKHBjbmV0MzJfaGF2ZV9wY2kgKyBjYXJkc19mb3VuZCkgPyAwIDogLUVOT0RFVjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9icm9hZGNvbS5jIGIvZHJpdmVycy9uZXQvcGh5L2Jyb2FkY29tLmMKaW5kZXggMzNjNGIxMi4uZjQ4MmZjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L2Jyb2FkY29tLmMKKysrIGIvZHJpdmVycy9uZXQvcGh5L2Jyb2FkY29tLmMKQEAgLTE4LDkgKzE4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9waHkuaD4KICNpbmNsdWRlIDxsaW51eC9icmNtcGh5Lmg+CiAKLSNkZWZpbmUgUEhZX0lEX0JDTTUwNjEwCQkweDAxNDNiZDYwCi0jZGVmaW5lIFBIWV9JRF9CQ001MDYxME0JMHgwMTQzYmQ3MAotI2RlZmluZSBQSFlfSURfQkNNNTc3ODAJCTB4MDM2MjVkOTAKIAogI2RlZmluZSBCUkNNX1BIWV9NT0RFTChwaHlkZXYpIFwKIAkoKHBoeWRldiktPmRydi0+cGh5X2lkICYgKHBoeWRldiktPmRydi0+cGh5X2lkX21hc2spCkBAIC04MjMsNyArODIwLDcgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBiY21hYzEzMV9kcml2ZXIgPSB7Ci0JLnBoeV9pZAkJPSAweDAxNDNiYzcwLAorCS5waHlfaWQJCT0gUEhZX0lEX0JDTUFDMTMxLAogCS5waHlfaWRfbWFzawk9IDB4ZmZmZmZmZjAsCiAJLm5hbWUJCT0gIkJyb2FkY29tIEJDTUFDMTMxIiwKIAkuZmVhdHVyZXMJPSBQSFlfQkFTSUNfRkVBVFVSRVMgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYyBiL2RyaXZlcnMvbmV0L3BoeS9tYXJ2ZWxsLmMKaW5kZXggNmY2OWI5Yi4uNjVlZDM4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L21hcnZlbGwuYworKysgYi9kcml2ZXJzL25ldC9waHkvbWFydmVsbC5jCkBAIC02Myw2ICs2Myw3IEBACiAjZGVmaW5lIE1JSV9NMTExMV9IV0NGR19NT0RFX0NPUFBFUl9SR01JSQkweGIKICNkZWZpbmUgTUlJX00xMTExX0hXQ0ZHX01PREVfRklCRVJfUkdNSUkJMHgzCiAjZGVmaW5lIE1JSV9NMTExMV9IV0NGR19NT0RFX1NHTUlJX05PX0NMSwkweDQKKyNkZWZpbmUgTUlJX00xMTExX0hXQ0ZHX01PREVfQ09QUEVSX1JUQkkJMHg5CiAjZGVmaW5lIE1JSV9NMTExMV9IV0NGR19GSUJFUl9DT1BQRVJfQVVUTwkweDgwMDAKICNkZWZpbmUgTUlJX00xMTExX0hXQ0ZHX0ZJQkVSX0NPUFBFUl9SRVMJMHgyMDAwCiAKQEAgLTI2OSw2ICsyNzAsNDMgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCisJaWYgKHBoeWRldi0+aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9SVEJJKSB7CisJCXRlbXAgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9NMTExMV9QSFlfRVhUX0NSKTsKKwkJaWYgKHRlbXAgPCAwKQorCQkJcmV0dXJuIHRlbXA7CisJCXRlbXAgfD0gKE1JSV9NMTExMV9SWF9ERUxBWSB8IE1JSV9NMTExMV9UWF9ERUxBWSk7CisJCWVyciA9IHBoeV93cml0ZShwaHlkZXYsIE1JSV9NMTExMV9QSFlfRVhUX0NSLCB0ZW1wKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCisJCXRlbXAgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9NMTExMV9QSFlfRVhUX1NSKTsKKwkJaWYgKHRlbXAgPCAwKQorCQkJcmV0dXJuIHRlbXA7CisJCXRlbXAgJj0gfihNSUlfTTExMTFfSFdDRkdfTU9ERV9NQVNLIHwgTUlJX00xMTExX0hXQ0ZHX0ZJQkVSX0NPUFBFUl9SRVMpOworCQl0ZW1wIHw9IDB4NyB8IE1JSV9NMTExMV9IV0NGR19GSUJFUl9DT1BQRVJfQVVUTzsKKwkJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX00xMTExX1BIWV9FWFRfU1IsIHRlbXApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisKKwkJLyogc29mdCByZXNldCAqLworCQllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwkJZG8KKwkJCXRlbXAgPSBwaHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTsKKwkJd2hpbGUgKHRlbXAgJiBCTUNSX1JFU0VUKTsKKworCQl0ZW1wID0gcGh5X3JlYWQocGh5ZGV2LCBNSUlfTTExMTFfUEhZX0VYVF9TUik7CisJCWlmICh0ZW1wIDwgMCkKKwkJCXJldHVybiB0ZW1wOworCQl0ZW1wICY9IH4oTUlJX00xMTExX0hXQ0ZHX01PREVfTUFTSyB8IE1JSV9NMTExMV9IV0NGR19GSUJFUl9DT1BQRVJfUkVTKTsKKwkJdGVtcCB8PSBNSUlfTTExMTFfSFdDRkdfTU9ERV9DT1BQRVJfUlRCSSB8IE1JSV9NMTExMV9IV0NGR19GSUJFUl9DT1BQRVJfQVVUTzsKKwkJZXJyID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX00xMTExX1BIWV9FWFRfU1IsIHRlbXApOworCQlpZiAoZXJyIDwgMCkKKwkJCXJldHVybiBlcnI7CisJfQorCisKIAllcnIgPSBwaHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgQk1DUl9SRVNFVCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwppbmRleCBhZGJjMGZkLi5kYjE3OTQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKQEAgLTI3Nyw2ICsyNzcsMjIgQEAKIEVYUE9SVF9TWU1CT0wocGh5X2RldmljZV9yZWdpc3Rlcik7CiAKIC8qKgorICogcGh5X2ZpbmRfZmlyc3QgLSBmaW5kcyB0aGUgZmlyc3QgUEhZIGRldmljZSBvbiB0aGUgYnVzCisgKiBAYnVzOiB0aGUgdGFyZ2V0IE1JSSBidXMKKyAqLworc3RydWN0IHBoeV9kZXZpY2UgKnBoeV9maW5kX2ZpcnN0KHN0cnVjdCBtaWlfYnVzICpidXMpCit7CisJaW50IGFkZHI7CisKKwlmb3IgKGFkZHIgPSAwOyBhZGRyIDwgUEhZX01BWF9BRERSOyBhZGRyKyspIHsKKwkJaWYgKGJ1cy0+cGh5X21hcFthZGRyXSkKKwkJCXJldHVybiBidXMtPnBoeV9tYXBbYWRkcl07CisJfQorCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChwaHlfZmluZF9maXJzdCk7CisKKy8qKgogICogcGh5X3ByZXBhcmVfbGluayAtIHByZXBhcmVzIHRoZSBQSFkgbGF5ZXIgdG8gbW9uaXRvciBsaW5rIHN0YXR1cwogICogQHBoeWRldjogdGFyZ2V0IHBoeV9kZXZpY2Ugc3RydWN0CiAgKiBAaGFuZGxlcjogY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGxpbmsgc3RhdHVzIGNoYW5nZSBub3RpZmljYXRpb25zCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvc21zYy5jIGIvZHJpdmVycy9uZXQvcGh5L3Ntc2MuYwppbmRleCA1MTIzYmI5Li5lZDI2NDRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvc21zYy5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9zbXNjLmMKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2RlZmluZSBNSUlfTEFOODNDMTg1X0lTRiAyOSAvKiBJbnRlcnJ1cHQgU291cmNlIEZsYWdzICovCiAjZGVmaW5lIE1JSV9MQU44M0MxODVfSU0gIDMwIC8qIEludGVycnVwdCBNYXNrICovCisjZGVmaW5lIE1JSV9MQU44M0MxODVfQ1RSTF9TVEFUVVMgMTcgLyogTW9kZS9TdGF0dXMgUmVnaXN0ZXIgKi8KIAogI2RlZmluZSBNSUlfTEFOODNDMTg1X0lTRl9JTlQxICgxPDwxKSAvKiBBdXRvLU5lZ290aWF0aW9uIFBhZ2UgUmVjZWl2ZWQgKi8KICNkZWZpbmUgTUlJX0xBTjgzQzE4NV9JU0ZfSU5UMiAoMTw8MikgLyogUGFyYWxsZWwgRGV0ZWN0aW9uIEZhdWx0ICovCkBAIC0zNyw4ICszOCwxMCBAQAogI2RlZmluZSBNSUlfTEFOODNDMTg1X0lTRl9JTlRfQUxMICgweDBlKQogCiAjZGVmaW5lIE1JSV9MQU44M0MxODVfSVNGX0lOVF9QSFlMSUJfRVZFTlRTIFwKLQkoTUlJX0xBTjgzQzE4NV9JU0ZfSU5UNiB8IE1JSV9MQU44M0MxODVfSVNGX0lOVDQpCisJKE1JSV9MQU44M0MxODVfSVNGX0lOVDYgfCBNSUlfTEFOODNDMTg1X0lTRl9JTlQ0IHwgXAorCSBNSUlfTEFOODNDMTg1X0lTRl9JTlQ3KQogCisjZGVmaW5lIE1JSV9MQU44M0MxODVfRURQV1JET1dOCSgxIDw8IDEzKSAvKiBFRFBXUkRPV04gKi8KIAogc3RhdGljIGludCBzbXNjX3BoeV9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewpAQCAtNTksOSArNjIsMjMgQEAKIAogc3RhdGljIGludCBzbXNjX3BoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogeworCWludCByYyA9IHBoeV9yZWFkKHBoeWRldiwgTUlJX0xBTjgzQzE4NV9DVFJMX1NUQVRVUyk7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJLyogRW5hYmxlIGVuZXJneSBkZXRlY3QgbW9kZSBmb3IgdGhpcyBTTVNDIFRyYW5zY2VpdmVycyAqLworCXJjID0gcGh5X3dyaXRlKHBoeWRldiwgTUlJX0xBTjgzQzE4NV9DVFJMX1NUQVRVUywKKwkJICAgICAgIHJjIHwgTUlJX0xBTjgzQzE4NV9FRFBXUkRPV04pOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKwogCXJldHVybiBzbXNjX3BoeV9hY2tfaW50ZXJydXB0IChwaHlkZXYpOwogfQogCitzdGF0aWMgaW50IGxhbjkxMXhfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKK3sKKwlyZXR1cm4gc21zY19waHlfYWNrX2ludGVycnVwdChwaHlkZXYpOworfQogCiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbGFuODNjMTg1X2RyaXZlciA9IHsKIAkucGh5X2lkCQk9IDB4MDAwN2MwYTAsIC8qIE9VST0weDAwODAwZiwgTW9kZWwjPTB4MGEgKi8KQEAgLTE0Nyw3ICsxNjQsNyBAQAogCS8qIGJhc2ljIGZ1bmN0aW9ucyAqLwogCS5jb25maWdfYW5lZwk9IGdlbnBoeV9jb25maWdfYW5lZywKIAkucmVhZF9zdGF0dXMJPSBnZW5waHlfcmVhZF9zdGF0dXMsCi0JLmNvbmZpZ19pbml0CT0gc21zY19waHlfY29uZmlnX2luaXQsCisJLmNvbmZpZ19pbml0CT0gbGFuOTExeF9jb25maWdfaW5pdCwKIAogCS8qIElSUSByZWxhdGVkICovCiAJLmFja19pbnRlcnJ1cHQJPSBzbXNjX3BoeV9hY2tfaW50ZXJydXB0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3BwcF9nZW5lcmljLmMKaW5kZXggMjI4MmU3Mi4uNmQ2MTYwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcHBwX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL25ldC9wcHBfZ2VuZXJpYy5jCkBAIC0xNjcsNyArMTY3LDcgQEAKIAl1OAkJYXZhaWw7CQkvKiBmbGFnIHVzZWQgaW4gbXVsdGlsaW5rIHN0dWZmICovCiAJdTgJCWhhZF9mcmFnOwkvKiA+PSAxIGZyYWdtZW50cyBoYXZlIGJlZW4gc2VudCAqLwogCXUzMgkJbGFzdHNlcTsJLyogTVA6IGxhc3Qgc2VxdWVuY2UgIyByZWNlaXZlZCAqLwotCWludCAgICAgc3BlZWQ7CQkvKiBzcGVlZCBvZiB0aGUgY29ycmVzcG9uZGluZyBwcHAgY2hhbm5lbCovCisJaW50CQlzcGVlZDsJCS8qIHNwZWVkIG9mIHRoZSBjb3JyZXNwb25kaW5nIHBwcCBjaGFubmVsKi8KICNlbmRpZiAvKiBDT05GSUdfUFBQX01VTFRJTElOSyAqLwogfTsKIApAQCAtMTI5MywxMyArMTI5MywxMyBAQAogICovCiBzdGF0aWMgaW50IHBwcF9tcF9leHBsb2RlKHN0cnVjdCBwcHAgKnBwcCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlpbnQJbGVuLCB0b3RsZW47Ci0JaW50CWksIGJpdHMsIGhkcmxlbiwgbXR1OwotCWludAlmbGVuOwotCWludAluYXZhaWwsCW5mcmVlLCBuemVybzsKLQlpbnQJbmJpZ2dlcjsKLQlpbnQJdG90c3BlZWQ7Ci0JaW50CXRvdGZyZWU7CisJaW50IGxlbiwgdG90bGVuOworCWludCBpLCBiaXRzLCBoZHJsZW4sIG10dTsKKwlpbnQgZmxlbjsKKwlpbnQgbmF2YWlsLCBuZnJlZSwgbnplcm87CisJaW50IG5iaWdnZXI7CisJaW50IHRvdHNwZWVkOworCWludCB0b3RmcmVlOwogCXVuc2lnbmVkIGNoYXIgKnAsICpxOwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CiAJc3RydWN0IGNoYW5uZWwgKnBjaDsKQEAgLTEzMDcsMjEgKzEzMDcsMjEgQEAKIAlzdHJ1Y3QgcHBwX2NoYW5uZWwgKmNoYW47CiAKIAl0b3RzcGVlZCA9IDA7IC8qdG90YWwgYml0cmF0ZSBvZiB0aGUgYnVuZGxlKi8KLQluZnJlZSA9CTA7CS8qICMgY2hhbm5lbHMgd2hpY2gJaGF2ZSBubwlwYWNrZXQgYWxyZWFkeSBxdWV1ZWQgKi8KLQluYXZhaWwgPSAwOwkvKiB0b3RhbCAjIG9mIHVzYWJsZSBjaGFubmVscyAobm90IGRlcmVnaXN0ZXJlZCkgKi8KLQluemVybyA9CTA7IC8qIG51bWJlciBvZgljaGFubmVscyB3aXRoIHplcm8gc3BlZWQgYXNzb2NpYXRlZCovCi0JdG90ZnJlZQk9IDA7IC8qdG90YWwgIyBvZiBjaGFubmVscyBhdmFpbGFibGUgYW5kCisJbmZyZWUgPSAwOyAvKiAjIGNoYW5uZWxzIHdoaWNoIGhhdmUgbm8gcGFja2V0IGFscmVhZHkgcXVldWVkICovCisJbmF2YWlsID0gMDsgLyogdG90YWwgIyBvZiB1c2FibGUgY2hhbm5lbHMgKG5vdCBkZXJlZ2lzdGVyZWQpICovCisJbnplcm8gPSAwOyAvKiBudW1iZXIgb2YgY2hhbm5lbHMgd2l0aCB6ZXJvIHNwZWVkIGFzc29jaWF0ZWQqLworCXRvdGZyZWUgPSAwOyAvKnRvdGFsICMgb2YgY2hhbm5lbHMgYXZhaWxhYmxlIGFuZAogCQkJCSAgKmhhdmluZyBubyBxdWV1ZWQgcGFja2V0cyBiZWZvcmUKIAkJCQkgICpzdGFydGluZyB0aGUgZnJhZ21lbnRhdGlvbiovCiAKIAloZHJsZW4gPSAocHBwLT5mbGFncyAmIFNDX01QX1hTSE9SVFNFUSk/IE1QSERSTEVOX1NTTjogTVBIRFJMRU47Ci0JaSA9CTA7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwY2gsICZwcHAtPmNoYW5uZWxzLCBjbGlzdCkJeworCWkgPSAwOworCWxpc3RfZm9yX2VhY2hfZW50cnkocGNoLCAmcHBwLT5jaGFubmVscywgY2xpc3QpIHsKIAkJbmF2YWlsICs9IHBjaC0+YXZhaWwgPSAocGNoLT5jaGFuICE9IE5VTEwpOwogCQlwY2gtPnNwZWVkID0gcGNoLT5jaGFuLT5zcGVlZDsKLQkJaWYgKHBjaC0+YXZhaWwpCXsKKwkJaWYgKHBjaC0+YXZhaWwpIHsKIAkJCWlmIChza2JfcXVldWVfZW1wdHkoJnBjaC0+ZmlsZS54cSkgfHwKLQkJCQkhcGNoLT5oYWRfZnJhZykJeworCQkJCSFwY2gtPmhhZF9mcmFnKSB7CiAJCQkJCWlmIChwY2gtPnNwZWVkID09IDApCiAJCQkJCQluemVybysrOwogCQkJCQllbHNlCkBAIC0xMzMxLDYwICsxMzMxLDYwIEBACiAJCQkJCSsrbmZyZWU7CiAJCQkJCSsrdG90ZnJlZTsKIAkJCQl9Ci0JCQlpZiAoIXBjaC0+aGFkX2ZyYWcgJiYgaQk8IHBwcC0+bnhjaGFuKQotCQkJCXBwcC0+bnhjaGFuCT0gaTsKKwkJCWlmICghcGNoLT5oYWRfZnJhZyAmJiBpIDwgcHBwLT5ueGNoYW4pCisJCQkJcHBwLT5ueGNoYW4gPSBpOwogCQl9CiAJCSsraTsKIAl9CiAJLyoKLQkgKiBEb24ndCBzdGFydCBzZW5kaW5nIHRoaXMJcGFja2V0IHVubGVzcyBhdCBsZWFzdCBoYWxmCW9mCi0JICogdGhlIGNoYW5uZWxzCWFyZQlmcmVlLiAgVGhpcwlnaXZlcyBtdWNoIGJldHRlciBUQ1AKLQkgKiBwZXJmb3JtYW5jZSBpZiB3ZSBoYXZlIGEJbG90CW9mIGNoYW5uZWxzLgorCSAqIERvbid0IHN0YXJ0IHNlbmRpbmcgdGhpcyBwYWNrZXQgdW5sZXNzIGF0IGxlYXN0IGhhbGYgb2YKKwkgKiB0aGUgY2hhbm5lbHMgYXJlIGZyZWUuICBUaGlzIGdpdmVzIG11Y2ggYmV0dGVyIFRDUAorCSAqIHBlcmZvcm1hbmNlIGlmIHdlIGhhdmUgYSBsb3Qgb2YgY2hhbm5lbHMuCiAJICovCi0JaWYgKG5mcmVlID09IDAgfHwgbmZyZWUJPCBuYXZhaWwgLyAyKQotCQlyZXR1cm4gMDsgLyogY2FuJ3QgdGFrZSBub3csIGxlYXZlIGl0IGluIHhtaXRfcGVuZGluZwkqLworCWlmIChuZnJlZSA9PSAwIHx8IG5mcmVlIDwgbmF2YWlsIC8gMikKKwkJcmV0dXJuIDA7IC8qIGNhbid0IHRha2Ugbm93LCBsZWF2ZSBpdCBpbiB4bWl0X3BlbmRpbmcgKi8KIAogCS8qIERvIHByb3RvY29sIGZpZWxkIGNvbXByZXNzaW9uIChYWFggdGhpcyBzaG91bGQgYmUgb3B0aW9uYWwpICovCi0JcCA9CXNrYi0+ZGF0YTsKLQlsZW4JPSBza2ItPmxlbjsKKwlwID0gc2tiLT5kYXRhOworCWxlbiA9IHNrYi0+bGVuOwogCWlmICgqcCA9PSAwKSB7CiAJCSsrcDsKIAkJLS1sZW47CiAJfQogCiAJdG90bGVuID0gbGVuOwotCW5iaWdnZXIJPSBsZW4gJQluZnJlZTsKKwluYmlnZ2VyID0gbGVuICUgbmZyZWU7CiAKLQkvKiBza2lwCXRvIHRoZSBjaGFubmVsIGFmdGVyIHRoZSBvbmUgd2UJbGFzdCB1c2VkCi0JICAgYW5kIHN0YXJ0IGF0CXRoYXQgb25lICovCisJLyogc2tpcCB0byB0aGUgY2hhbm5lbCBhZnRlciB0aGUgb25lIHdlIGxhc3QgdXNlZAorCSAgIGFuZCBzdGFydCBhdCB0aGF0IG9uZSAqLwogCWxpc3QgPSAmcHBwLT5jaGFubmVsczsKLQlmb3IJKGkgPSAwOwlpIDwJcHBwLT5ueGNoYW47ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBwcHAtPm54Y2hhbjsgKytpKSB7CiAJCWxpc3QgPSBsaXN0LT5uZXh0OwotCQlpZiAobGlzdCA9PQkmcHBwLT5jaGFubmVscykJewotCQkJaSA9CTA7CisJCWlmIChsaXN0ID09ICZwcHAtPmNoYW5uZWxzKSB7CisJCQlpID0gMDsKIAkJCWJyZWFrOwogCQl9CiAJfQogCi0JLyogY3JlYXRlIGEJZnJhZ21lbnQgZm9yIGVhY2ggY2hhbm5lbCAqLworCS8qIGNyZWF0ZSBhIGZyYWdtZW50IGZvciBlYWNoIGNoYW5uZWwgKi8KIAliaXRzID0gQjsKLQl3aGlsZSAobGVuCT4gMCkgeworCXdoaWxlIChsZW4gPiAwKSB7CiAJCWxpc3QgPSBsaXN0LT5uZXh0OwotCQlpZiAobGlzdCA9PQkmcHBwLT5jaGFubmVscykJewotCQkJaSA9CTA7CisJCWlmIChsaXN0ID09ICZwcHAtPmNoYW5uZWxzKSB7CisJCQlpID0gMDsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCXBjaAk9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IGNoYW5uZWwsIGNsaXN0KTsKKwkJcGNoID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgY2hhbm5lbCwgY2xpc3QpOwogCQkrK2k7CiAJCWlmICghcGNoLT5hdmFpbCkKIAkJCWNvbnRpbnVlOwogCiAJCS8qCi0JCSAqIFNraXAJdGhpcyBjaGFubmVsIGlmCWl0IGhhcyBhIGZyYWdtZW50IHBlbmRpbmcgYWxyZWFkeSBhbmQKLQkJICogd2UgaGF2ZW4ndCBnaXZlbglhIGZyYWdtZW50IHRvIGFsbCBvZiB0aGUgZnJlZSBjaGFubmVscy4KKwkJICogU2tpcCB0aGlzIGNoYW5uZWwgaWYgaXQgaGFzIGEgZnJhZ21lbnQgcGVuZGluZyBhbHJlYWR5IGFuZAorCQkgKiB3ZSBoYXZlbid0IGdpdmVuIGEgZnJhZ21lbnQgdG8gYWxsIG9mIHRoZSBmcmVlIGNoYW5uZWxzLgogCQkgKi8KIAkJaWYgKHBjaC0+YXZhaWwgPT0gMSkgewotCQkJaWYgKG5mcmVlID4JMCkKKwkJCWlmIChuZnJlZSA+IDApCiAJCQkJY29udGludWU7CiAJCX0gZWxzZSB7CiAJCQlwY2gtPmF2YWlsID0gMTsKQEAgLTEzOTMsMzIgKzEzOTMsMzIgQEAKIAkJLyogY2hlY2sgdGhlIGNoYW5uZWwncyBtdHUgYW5kIHdoZXRoZXIgaXQgaXMgc3RpbGwgYXR0YWNoZWQuICovCiAJCXNwaW5fbG9ja19iaCgmcGNoLT5kb3dubCk7CiAJCWlmIChwY2gtPmNoYW4gPT0gTlVMTCkgewotCQkJLyogY2FuJ3QgdXNlIHRoaXMgY2hhbm5lbCwgaXQncwliZWluZyBkZXJlZ2lzdGVyZWQgKi8KKwkJCS8qIGNhbid0IHVzZSB0aGlzIGNoYW5uZWwsIGl0J3MgYmVpbmcgZGVyZWdpc3RlcmVkICovCiAJCQlpZiAocGNoLT5zcGVlZCA9PSAwKQogCQkJCW56ZXJvLS07CiAJCQllbHNlCi0JCQkJdG90c3BlZWQgLT0JcGNoLT5zcGVlZDsKKwkJCQl0b3RzcGVlZCAtPSBwY2gtPnNwZWVkOwogCiAJCQlzcGluX3VubG9ja19iaCgmcGNoLT5kb3dubCk7CiAJCQlwY2gtPmF2YWlsID0gMDsKIAkJCXRvdGxlbiA9IGxlbjsKIAkJCXRvdGZyZWUtLTsKIAkJCW5mcmVlLS07Ci0JCQlpZiAoLS1uYXZhaWwgPT0JMCkKKwkJCWlmICgtLW5hdmFpbCA9PSAwKQogCQkJCWJyZWFrOwogCQkJY29udGludWU7CiAJCX0KIAogCQkvKgogCQkqaWYgdGhlIGNoYW5uZWwgc3BlZWQgaXMgbm90IHNldCBkaXZpZGUKLQkJKnRoZSBwYWNrZXQJZXZlbmx5IGFtb25nIHRoZSBmcmVlIGNoYW5uZWxzOworCQkqdGhlIHBhY2tldCBldmVubHkgYW1vbmcgdGhlIGZyZWUgY2hhbm5lbHM7CiAJCSpvdGhlcndpc2UgZGl2aWRlIGl0IGFjY29yZGluZyB0byB0aGUgc3BlZWQKIAkJKm9mIHRoZSBjaGFubmVsIHdlIGFyZSBnb2luZyB0byB0cmFuc21pdCBvbgogCQkqLwogCQlmbGVuID0gbGVuOwogCQlpZiAobmZyZWUgPiAwKSB7CiAJCQlpZiAocGNoLT5zcGVlZCA9PSAwKSB7Ci0JCQkJZmxlbiA9IHRvdGxlbi9uZnJlZQk7CisJCQkJZmxlbiA9IHRvdGxlbi9uZnJlZTsKIAkJCQlpZiAobmJpZ2dlciA+IDApIHsKIAkJCQkJZmxlbisrOwogCQkJCQluYmlnZ2VyLS07CkBAIC0xNDM2LDggKzE0MzYsOCBAQAogCQl9CiAKIAkJLyoKLQkJICpjaGVjawlpZiB3ZSBhcmUgb24gdGhlIGxhc3QgY2hhbm5lbCBvcgotCQkgKndlIGV4Y2VkZWQgdGhlIGxlbmdodAlvZiB0aGUgZGF0YQl0bworCQkgKmNoZWNrIGlmIHdlIGFyZSBvbiB0aGUgbGFzdCBjaGFubmVsIG9yCisJCSAqd2UgZXhjZWRlZCB0aGUgbGVuZ2h0IG9mIHRoZSBkYXRhIHRvCiAJCSAqZnJhZ21lbnQKIAkJICovCiAJCWlmICgobmZyZWUgPD0gMCkgfHwgKGZsZW4gPiBsZW4pKQpAQCAtMTQ0OCwyOSArMTQ0OCwyOSBAQAogCQkgKmFib3ZlIGZvcm11bGEgd2lsbCBiZSBlcXVhbCBvciBsZXNzIHRoYW4gemVyby4KIAkJICpTa2lwIHRoZSBjaGFubmVsIGluIHRoaXMgY2FzZQogCQkgKi8KLQkJaWYgKGZsZW4gPD0JMCkgeworCQlpZiAoZmxlbiA8PSAwKSB7CiAJCQlwY2gtPmF2YWlsID0gMjsKIAkJCXNwaW5fdW5sb2NrX2JoKCZwY2gtPmRvd25sKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJbXR1CT0gcGNoLT5jaGFuLT5tdHUgLSBoZHJsZW47Ci0JCWlmIChtdHUJPCA0KQotCQkJbXR1CT0gNDsKKwkJbXR1ID0gcGNoLT5jaGFuLT5tdHUgLSBoZHJsZW47CisJCWlmIChtdHUgPCA0KQorCQkJbXR1ID0gNDsKIAkJaWYgKGZsZW4gPiBtdHUpCiAJCQlmbGVuID0gbXR1OwotCQlpZiAoZmxlbiA9PQlsZW4pCi0JCQliaXRzIHw9CUU7Ci0JCWZyYWcgPSBhbGxvY19za2IoZmxlbiArCWhkcmxlbiArIChmbGVuID09IDApLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGZsZW4gPT0gbGVuKQorCQkJYml0cyB8PSBFOworCQlmcmFnID0gYWxsb2Nfc2tiKGZsZW4gKyBoZHJsZW4gKyAoZmxlbiA9PSAwKSwgR0ZQX0FUT01JQyk7CiAJCWlmICghZnJhZykKIAkJCWdvdG8gbm9za2I7Ci0JCXEgPQlza2JfcHV0KGZyYWcsIGZsZW4gKyBoZHJsZW4pOworCQlxID0gc2tiX3B1dChmcmFnLCBmbGVuICsgaGRybGVuKTsKIAotCQkvKiBtYWtlCXRoZQlNUCBoZWFkZXIgKi8KKwkJLyogbWFrZSB0aGUgTVAgaGVhZGVyICovCiAJCXFbMF0gPSBQUFBfTVAgPj4gODsKIAkJcVsxXSA9IFBQUF9NUDsKIAkJaWYgKHBwcC0+ZmxhZ3MgJiBTQ19NUF9YU0hPUlRTRVEpIHsKLQkJCXFbMl0gPSBiaXRzCSsgKChwcHAtPm54c2VxID4+IDgpICYgMHhmKTsKKwkJCXFbMl0gPSBiaXRzICsgKChwcHAtPm54c2VxID4+IDgpICYgMHhmKTsKIAkJCXFbM10gPSBwcHAtPm54c2VxOwogCQl9IGVsc2UgewogCQkJcVsyXSA9IGJpdHM7CkBAIC0xNDgzLDI0ICsxNDgzLDI0IEBACiAKIAkJLyogdHJ5IHRvIHNlbmQgaXQgZG93biB0aGUgY2hhbm5lbCAqLwogCQljaGFuID0gcGNoLT5jaGFuOwotCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmcGNoLT5maWxlLnhxKQl8fAorCQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmcGNoLT5maWxlLnhxKSB8fAogCQkJIWNoYW4tPm9wcy0+c3RhcnRfeG1pdChjaGFuLCBmcmFnKSkKIAkJCXNrYl9xdWV1ZV90YWlsKCZwY2gtPmZpbGUueHEsIGZyYWcpOwotCQlwY2gtPmhhZF9mcmFnID0JMTsKKwkJcGNoLT5oYWRfZnJhZyA9IDE7CiAJCXAgKz0gZmxlbjsKLQkJbGVuCS09IGZsZW47CisJCWxlbiAtPSBmbGVuOwogCQkrK3BwcC0+bnhzZXE7CiAJCWJpdHMgPSAwOwogCQlzcGluX3VubG9ja19iaCgmcGNoLT5kb3dubCk7CiAJfQotCXBwcC0+bnhjaGFuCT0gaTsKKwlwcHAtPm54Y2hhbiA9IGk7CiAKIAlyZXR1cm4gMTsKIAogIG5vc2tiOgogCXNwaW5fdW5sb2NrX2JoKCZwY2gtPmRvd25sKTsKIAlpZiAocHBwLT5kZWJ1ZyAmIDEpCi0JCXByaW50ayhLRVJOX0VSUgkiUFBQOiBubyBtZW1vcnkJKGZyYWdtZW50KVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiUFBQOiBubyBtZW1vcnkgKGZyYWdtZW50KVxuIik7CiAJKytwcHAtPmRldi0+c3RhdHMudHhfZXJyb3JzOwogCSsrcHBwLT5ueHNlcTsKIAlyZXR1cm4gMTsJLyogYWJhbmRvbiB0aGUgZnJhbWUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuYyBiL2RyaXZlcnMvbmV0L3BzM19nZWxpY19uZXQuYwppbmRleCAwYzc2ODU5Li5hODQ5ZjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wczNfZ2VsaWNfbmV0LmMKKysrIGIvZHJpdmVycy9uZXQvcHMzX2dlbGljX25ldC5jCkBAIC01NjgsNyArNTY4LDcgQEAKIAkJCXN0YXR1cyk7CiAKIAlpZiAoKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8Ci0JICAgIChuZXRkZXYtPm1jX2NvdW50ID4gR0VMSUNfTkVUX01DX0NPVU5UX01BWCkpIHsKKwkgICAgKG5ldGRldl9tY19jb3VudChuZXRkZXYpID4gR0VMSUNfTkVUX01DX0NPVU5UX01BWCkpIHsKIAkJc3RhdHVzID0gbHYxX25ldF9hZGRfbXVsdGljYXN0X2FkZHJlc3MoYnVzX2lkKGNhcmQpLAogCQkJCQkJICAgICAgIGRldl9pZChjYXJkKSwKIAkJCQkJCSAgICAgICAwLCAxKTsKQEAgLTU4MCw3ICs1ODAsNyBAQAogCX0KIAogCS8qIHNldCBtdWx0aWNhc3QgYWRkcmVzc2VzICovCi0JZm9yIChtYyA9IG5ldGRldi0+bWNfbGlzdDsgbWM7IG1jID0gbWMtPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtYywgbmV0ZGV2KSB7CiAJCWFkZHIgPSAwOwogCQlwID0gbWMtPmRtaV9hZGRyOwogCQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcHMzX2dlbGljX3dpcmVsZXNzLmMgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfd2lyZWxlc3MuYwppbmRleCAyMjdiMTQxLi4yNjYzYjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wczNfZ2VsaWNfd2lyZWxlc3MuYworKysgYi9kcml2ZXJzL25ldC9wczNfZ2VsaWNfd2lyZWxlc3MuYwpAQCAtMTM4OSwxMTMgKzEzODksNiBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX0dFTElDX1dJUkVMRVNTX09MRF9QU0tfSU5URVJGQUNFCi0vKiBTSU9DSVdGSVJTVFBSSVYgKi8KLXN0YXRpYyBpbnQgaGV4MmJpbih1OCAqc3RyLCB1OCAqYmluLCB1bnNpZ25lZCBpbnQgbGVuKQotewotCXVuc2lnbmVkIGludCBpOwotCXN0YXRpYyB1bnNpZ25lZCBjaGFyICpoZXggPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7Ci0JdW5zaWduZWQgY2hhciAqcCwgKnE7Ci0JdTggdG1wOwotCi0JaWYgKGxlbiAhPSBXUEFfUFNLX0xFTiAqIDIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JZm9yIChpID0gMDsgaSA8IFdQQV9QU0tfTEVOICogMjsgaSArPSAyKSB7Ci0JCXAgPSBzdHJjaHIoaGV4LCB0b3VwcGVyKHN0cltpXSkpOwotCQlxID0gc3RyY2hyKGhleCwgdG91cHBlcihzdHJbaSArIDFdKSk7Ci0JCWlmICghcCB8fCAhcSkgewotCQkJcHJfaW5mbygiJXM6IHVuY29udmVydGlibGUgUFNLIGRpZ2l0PSVkXG4iLAotCQkJCV9fZnVuY19fLCBpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXRtcCA9ICgocCAtIGhleCkgPDwgNCkgKyAocSAtIGhleCk7Ci0JCSpiaW4rKyA9IHRtcDsKLQl9Ci0JcmV0dXJuIDA7Ci19OwotCi1zdGF0aWMgaW50IGdlbGljX3dsX3ByaXZfc2V0X3BzayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiwKLQkJCQkgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKLQkJCQkgdW5pb24gaXdyZXFfZGF0YSAqZGF0YSwgY2hhciAqZXh0cmEpCi17Ci0Jc3RydWN0IGdlbGljX3dsX2luZm8gKndsID0gcG9ydF93bChuZXRkZXZfcHJpdihuZXRfZGV2KSk7Ci0JdW5zaWduZWQgaW50IGxlbjsKLQl1bnNpZ25lZCBsb25nIGlycWZsYWc7Ci0JaW50IHJldCA9IDA7Ci0KLQlwcl9kZWJ1ZygiJXM6PC0gbGVuPSVkXG4iLCBfX2Z1bmNfXywgZGF0YS0+ZGF0YS5sZW5ndGgpOwotCWxlbiA9IGRhdGEtPmRhdGEubGVuZ3RoIC0gMTsKLQlpZiAobGVuIDw9IDIpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5sb2NrLCBpcnFmbGFnKTsKLQlpZiAoZXh0cmFbMF0gPT0gJyInICYmIGV4dHJhW2xlbiAtIDFdID09ICciJykgewotCQlwcl9kZWJ1ZygiJXM6IHBhc3NwaHJhc2UgbW9kZVxuIiwgX19mdW5jX18pOwotCQkvKiBwYXNzIHBocmFzZSAqLwotCQlpZiAoR0VMSUNfV0xfRVVSVVNfUFNLX01BWF9MRU4gPCAobGVuIC0gMikpIHsKLQkJCXByX2luZm8oIiVzOiBwYXNzcGhyYXNlIHRvbyBsb25nXG4iLCBfX2Z1bmNfXyk7Ci0JCQlyZXQgPSAtRTJCSUc7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQltZW1zZXQod2wtPnBzaywgMCwgc2l6ZW9mKHdsLT5wc2spKTsKLQkJd2wtPnBza19sZW4gPSBsZW4gLSAyOwotCQltZW1jcHkod2wtPnBzaywgJihleHRyYVsxXSksIHdsLT5wc2tfbGVuKTsKLQkJd2wtPnBza190eXBlID0gR0VMSUNfRVVSVVNfV1BBX1BTS19QQVNTUEhSQVNFOwotCX0gZWxzZSB7Ci0JCXJldCA9IGhleDJiaW4oZXh0cmEsIHdsLT5wc2ssIGxlbik7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKLQkJd2wtPnBza19sZW4gPSBXUEFfUFNLX0xFTjsKLQkJd2wtPnBza190eXBlID0gR0VMSUNfRVVSVVNfV1BBX1BTS19CSU47Ci0JfQotCXNldF9iaXQoR0VMSUNfV0xfU1RBVF9XUEFfUFNLX1NFVCwgJndsLT5zdGF0KTsKLW91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+bG9jaywgaXJxZmxhZyk7Ci0JcHJfZGVidWcoIiVzOi0+XG4iLCBfX2Z1bmNfXyk7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBnZWxpY193bF9wcml2X2dldF9wc2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYsCi0JCQkJIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCi0JCQkJIHVuaW9uIGl3cmVxX2RhdGEgKmRhdGEsIGNoYXIgKmV4dHJhKQotewotCXN0cnVjdCBnZWxpY193bF9pbmZvICp3bCA9IHBvcnRfd2wobmV0ZGV2X3ByaXYobmV0X2RldikpOwotCWNoYXIgKnA7Ci0JdW5zaWduZWQgbG9uZyBpcnFmbGFnOwotCXVuc2lnbmVkIGludCBpOwotCi0JcHJfZGVidWcoIiVzOjwtXG4iLCBfX2Z1bmNfXyk7Ci0JaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQlyZXR1cm4gLUVQRVJNOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5sb2NrLCBpcnFmbGFnKTsKLQlwID0gZXh0cmE7Ci0JaWYgKHRlc3RfYml0KEdFTElDX1dMX1NUQVRfV1BBX1BTS19TRVQsICZ3bC0+c3RhdCkpIHsKLQkJaWYgKHdsLT5wc2tfdHlwZSA9PSBHRUxJQ19FVVJVU19XUEFfUFNLX0JJTikgewotCQkJZm9yIChpID0gMDsgaSA8IHdsLT5wc2tfbGVuOyBpKyspIHsKLQkJCQlzcHJpbnRmKHAsICIlMDJ4dSIsIHdsLT5wc2tbaV0pOwotCQkJCXAgKz0gMjsKLQkJCX0KLQkJCSpwID0gJ1wwJzsKLQkJCWRhdGEtPmRhdGEubGVuZ3RoID0gd2wtPnBza19sZW4gKiAyOwotCQl9IGVsc2UgewotCQkJKnArKyA9ICciJzsKLQkJCW1lbWNweShwLCB3bC0+cHNrLCB3bC0+cHNrX2xlbik7Ci0JCQlwICs9IHdsLT5wc2tfbGVuOwotCQkJKnArKyA9ICciJzsKLQkJCSpwID0gJ1wwJzsKLQkJCWRhdGEtPmRhdGEubGVuZ3RoID0gd2wtPnBza19sZW4gKyAyOwotCQl9Ci0JfSBlbHNlCi0JCS8qIG5vIHBzayBzZXQgKi8KLQkJZGF0YS0+ZGF0YS5sZW5ndGggPSAwOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5sb2NrLCBpcnFmbGFnKTsKLQlwcl9kZWJ1ZygiJXM6LT4gJWRcbiIsIF9fZnVuY19fLCBkYXRhLT5kYXRhLmxlbmd0aCk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQogLyogU0lPQ0dJV05JQ0tOICovCiBzdGF0aWMgaW50IGdlbGljX3dsX2dldF9uaWNrKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LAogCQkJCSAgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKQEAgLTE1NzEsOCArMTQ2NCwxMCBAQAogCWluaXRfY29tcGxldGlvbigmd2wtPnNjYW5fZG9uZSk7CiAJLyoKIAkgKiBJZiB3ZSBoYXZlIGFscmVhZHkgYSBic3MgbGlzdCwgZG9uJ3QgdHJ5IHRvIGdldCBuZXcKKwkgKiB1bmxlc3Mgd2UgYXJlIGRvaW5nIGFuIEVTU0lEIHNjYW4KIAkgKi8KLQlpZiAoIWFsd2F5c19zY2FuICYmIHdsLT5zY2FuX3N0YXQgPT0gR0VMSUNfV0xfU0NBTl9TVEFUX0dPVF9MSVNUKSB7CisJaWYgKCghZXNzaWRfbGVuICYmICFhbHdheXNfc2NhbikKKwkgICAgJiYgd2wtPnNjYW5fc3RhdCA9PSBHRUxJQ19XTF9TQ0FOX1NUQVRfR09UX0xJU1QpIHsKIAkJcHJfZGVidWcoIiVzOiBhbHJlYWR5IGhhcyB0aGUgbGlzdFxuIiwgX19mdW5jX18pOwogCQljb21wbGV0ZSgmd2wtPnNjYW5fZG9uZSk7CiAJCWdvdG8gb3V0OwpAQCAtMTY3Myw3ICsxNTY4LDcgQEAKIAkJfQogCX0KIAotCS8qIHB1dCB0aGVtIGluIHRoZSBuZXd0b3JrX2xpc3QgKi8KKwkvKiBwdXQgdGhlbSBpbiB0aGUgbmV0d29ya19saXN0ICovCiAJZm9yIChpID0gMCwgc2Nhbl9pbmZvX3NpemUgPSAwLCBzY2FuX2luZm8gPSBidWY7CiAJICAgICBzY2FuX2luZm9fc2l6ZSA8IGRhdGFfbGVuOwogCSAgICAgaSsrLCBzY2FuX2luZm9fc2l6ZSArPSBiZTE2X3RvX2NwdShzY2FuX2luZm8tPnNpemUpLApAQCAtMjAwOSw3ICsxOTA0LDcgQEAKIAkvKiBQU0sgdHlwZSAqLwogCXdwYS0+cHNrX3R5cGUgPSBjcHVfdG9fYmUxNih3bC0+cHNrX3R5cGUpOwogI2lmZGVmIERFQlVHCi0JcHJfZGVidWcoIiVzOiBzZWM9JXMgcHNrdHlwZT0lc1xubiIsIF9fZnVuY19fLAorCXByX2RlYnVnKCIlczogc2VjPSVzIHBza3R5cGU9JXNcbiIsIF9fZnVuY19fLAogCQkgd3Bhc2Vjc3RyKHdwYS0+c2VjdXJpdHkpLAogCQkgKHdwYS0+cHNrX3R5cGUgPT0gR0VMSUNfRVVSVVNfV1BBX1BTS19CSU4pID8KIAkJICJCSU4iIDogInBhc3NwaHJhc2UiKTsKQEAgLTIwMTksOSArMTkxNCw5IEBACiAJICogdGhlIGRlYnVnIGxvZyBiZWNhdXNlIHRoaXMgZHVtcHMgeW91ciBwcmVjaW91cwogCSAqIHBhc3NwaHJhc2Uva2V5LgogCSAqLwotCXByX2RlYnVnKCIlczogcHNrPSVzXG4iLAorCXByX2RlYnVnKCIlczogcHNrPSVzXG4iLCBfX2Z1bmNfXywKIAkJICh3cGEtPnBza190eXBlID09IEdFTElDX0VVUlVTX1dQQV9QU0tfQklOKSA/Ci0JCSAoY2hhciAqKSJOL0EiIDogKGNoYXIgKil3cGEtPnBzayk7CisJCSAiTi9BIiA6IHdwYS0+cHNrKTsKICNlbmRpZgogI2VuZGlmCiAJLyogaXNzdWUgd3BhIHNldHVwICovCkBAIC0yNDA2LDQwICsyMzAxLDEwIEBACiAJSVdfSU9DVEwoU0lPQ0dJV05JQ0tOKQkJPSBnZWxpY193bF9nZXRfbmljaywKIH07CiAKLSNpZmRlZiBDT05GSUdfR0VMSUNfV0lSRUxFU1NfT0xEX1BTS19JTlRFUkZBQ0UKLXN0YXRpYyBzdHJ1Y3QgaXdfcHJpdl9hcmdzIGdlbGljX3dsX3ByaXZhdGVfYXJnc1tdID0KLXsKLQl7Ci0JCS5jbWQgPSBHRUxJQ19XTF9QUklWX1NFVF9QU0ssCi0JCS5zZXRfYXJncyA9IElXX1BSSVZfVFlQRV9DSEFSIHwKLQkJKEdFTElDX1dMX0VVUlVTX1BTS19NQVhfTEVOICsgMiksCi0JCS5uYW1lID0gInNldF9wc2siCi0JfSwKLQl7Ci0JCS5jbWQgPSBHRUxJQ19XTF9QUklWX0dFVF9QU0ssCi0JCS5nZXRfYXJncyA9IElXX1BSSVZfVFlQRV9DSEFSIHwKLQkJKEdFTElDX1dMX0VVUlVTX1BTS19NQVhfTEVOICsgMiksCi0JCS5uYW1lID0gImdldF9wc2siCi0JfQotfTsKLQotc3RhdGljIGNvbnN0IGl3X2hhbmRsZXIgZ2VsaWNfd2xfcHJpdmF0ZV9oYW5kbGVyW10gPQotewotCWdlbGljX3dsX3ByaXZfc2V0X3BzaywKLQlnZWxpY193bF9wcml2X2dldF9wc2ssCi19OwotI2VuZGlmCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgZ2VsaWNfd2xfd2V4dF9oYW5kbGVyX2RlZiA9IHsKIAkubnVtX3N0YW5kYXJkCQk9IEFSUkFZX1NJWkUoZ2VsaWNfd2xfd2V4dF9oYW5kbGVyKSwKIAkuc3RhbmRhcmQJCT0gZ2VsaWNfd2xfd2V4dF9oYW5kbGVyLAogCS5nZXRfd2lyZWxlc3Nfc3RhdHMJPSBnZWxpY193bF9nZXRfd2lyZWxlc3Nfc3RhdHMsCi0jaWZkZWYgQ09ORklHX0dFTElDX1dJUkVMRVNTX09MRF9QU0tfSU5URVJGQUNFCi0JLm51bV9wcml2YXRlCQk9IEFSUkFZX1NJWkUoZ2VsaWNfd2xfcHJpdmF0ZV9oYW5kbGVyKSwKLQkubnVtX3ByaXZhdGVfYXJncwk9IEFSUkFZX1NJWkUoZ2VsaWNfd2xfcHJpdmF0ZV9hcmdzKSwKLQkucHJpdmF0ZQkJPSBnZWxpY193bF9wcml2YXRlX2hhbmRsZXIsCi0JLnByaXZhdGVfYXJncwkJPSBnZWxpY193bF9wcml2YXRlX2FyZ3MsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZSAqIF9fZGV2aW5pdCBnZWxpY193bF9hbGxvYyhzdHJ1Y3QgZ2VsaWNfY2FyZCAqY2FyZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsYTN4eHguYyBiL2RyaXZlcnMvbmV0L3FsYTN4eHguYwppbmRleCBkZDM1MDY2Li40ZWYwYWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGEzeHh4LmMKKysrIGIvZHJpdmVycy9uZXQvcWxhM3h4eC5jCkBAIC02MSw3ICs2MSw3IEBACiBtb2R1bGVfcGFyYW0obXNpLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhtc2ksICJUdXJuIG9uIE1lc3NhZ2UgU2lnbmFsZWQgSW50ZXJydXB0cy4iKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHFsM3h4eF9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShxbDN4eHhfcGNpX3RibCkgPSB7CiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9RTE9HSUMsIFFMMzAyMl9ERVZJQ0VfSUQpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1FMT0dJQywgUUwzMDMyX0RFVklDRV9JRCl9LAogCS8qIHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KQEAgLTQwODcsNyArNDA4Nyw2IEBACiAJc3RydWN0IHFsM19hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAKIAl1bnJlZ2lzdGVyX25ldGRldihuZGV2KTsKLQlxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAKIAlxbF9kaXNhYmxlX2ludGVycnVwdHMocWRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsY25pYy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3FsY25pYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGJhODNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorIworIyBNYWtlZmlsZSBmb3IgUWxvZ2ljIDFHLzEwRyBFdGhlcm5ldCBEcml2ZXIgZm9yIENOQSBkZXZpY2VzCisjCisKK29iai0kKENPTkZJR19RTENOSUMpIDo9IHFsY25pYy5vCisKK3FsY25pYy15IDo9IHFsY25pY19ody5vIHFsY25pY19tYWluLm8gcWxjbmljX2luaXQubyBcCisJcWxjbmljX2V0aHRvb2wubyBxbGNuaWNfY3R4Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWMuaCBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDBhODUxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pYy5oCkBAIC0wLDAgKzEsMTEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIFFMb2dpYyBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorICoKKyAqLworCisjaWZuZGVmIF9RTENOSUNfSF8KKyNkZWZpbmUgX1FMQ05JQ19IXworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lwLmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorCisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L21paS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2luY2x1ZGUgInFsY25pY19oZHIuaCIKKworI2RlZmluZSBfUUxDTklDX0xJTlVYX01BSk9SIDUKKyNkZWZpbmUgX1FMQ05JQ19MSU5VWF9NSU5PUiAwCisjZGVmaW5lIF9RTENOSUNfTElOVVhfU1VCVkVSU0lPTiAwCisjZGVmaW5lIFFMQ05JQ19MSU5VWF9WRVJTSU9OSUQgICI1LjAuMCIKKworI2RlZmluZSBRTENOSUNfVkVSU0lPTl9DT0RFKGEsIGIsIGMpCSgoKGEpIDw8IDI0KSArICgoYikgPDwgMTYpICsgKGMpKQorI2RlZmluZSBfbWFqb3IodikJKCgodikgPj4gMjQpICYgMHhmZikKKyNkZWZpbmUgX21pbm9yKHYpCSgoKHYpID4+IDE2KSAmIDB4ZmYpCisjZGVmaW5lIF9idWlsZCh2KQkoKHYpICYgMHhmZmZmKQorCisvKiB2ZXJzaW9uIGluIGltYWdlIGhhcyB3ZWlyZCBlbmNvZGluZzoKKyAqICA3OjAgIC0gbWFqb3IKKyAqIDE1OjggIC0gbWlub3IKKyAqIDMxOjE2IC0gYnVpbGQgKGxpdHRsZSBlbmRpYW4pCisgKi8KKyNkZWZpbmUgUUxDTklDX0RFQ09ERV9WRVJTSU9OKHYpIFwKKwlRTENOSUNfVkVSU0lPTl9DT0RFKCgodikgJiAweGZmKSwgKCgodikgPj4gOCkgJiAweGZmKSwgKCh2KSA+PiAxNikpCisKKyNkZWZpbmUgUUxDTklDX05VTV9GTEFTSF9TRUNUT1JTICg2NCkKKyNkZWZpbmUgUUxDTklDX0ZMQVNIX1NFQ1RPUl9TSVpFICg2NCAqIDEwMjQpCisjZGVmaW5lIFFMQ05JQ19GTEFTSF9UT1RBTF9TSVpFICAoUUxDTklDX05VTV9GTEFTSF9TRUNUT1JTIFwKKwkJCQkJKiBRTENOSUNfRkxBU0hfU0VDVE9SX1NJWkUpCisKKyNkZWZpbmUgUkNWX0RFU0NfUklOR1NJWkUocmRzX3JpbmcpCVwKKwkoc2l6ZW9mKHN0cnVjdCByY3ZfZGVzYykgKiAocmRzX3JpbmcpLT5udW1fZGVzYykKKyNkZWZpbmUgUkNWX0JVRkZfUklOR1NJWkUocmRzX3JpbmcpCVwKKwkoc2l6ZW9mKHN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyKSAqIHJkc19yaW5nLT5udW1fZGVzYykKKyNkZWZpbmUgU1RBVFVTX0RFU0NfUklOR1NJWkUoc2RzX3JpbmcpCVwKKwkoc2l6ZW9mKHN0cnVjdCBzdGF0dXNfZGVzYykgKiAoc2RzX3JpbmcpLT5udW1fZGVzYykKKyNkZWZpbmUgVFhfQlVGRl9SSU5HU0laRSh0eF9yaW5nKQlcCisJKHNpemVvZihzdHJ1Y3QgcWxjbmljX2NtZF9idWZmZXIpICogdHhfcmluZy0+bnVtX2Rlc2MpCisjZGVmaW5lIFRYX0RFU0NfUklOR1NJWkUodHhfcmluZykJXAorCShzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSAqIHR4X3JpbmctPm51bV9kZXNjKQorCisjZGVmaW5lIFFMQ05JQ19QM1BfQTAJCTB4NTAKKworI2RlZmluZSBRTENOSUNfSVNfUkVWSVNJT05fUDNQKFJFVklTSU9OKSAgICAgKFJFVklTSU9OID49IFFMQ05JQ19QM1BfQTApCisKKyNkZWZpbmUgRklSU1RfUEFHRV9HUk9VUF9TVEFSVAkwCisjZGVmaW5lIEZJUlNUX1BBR0VfR1JPVVBfRU5ECTB4MTAwMDAwCisKKyNkZWZpbmUgUDNfTUFYX01UVSAgICAgICAgICAgICAgICAgICAgICg5NjAwKQorI2RlZmluZSBRTENOSUNfTUFYX0VUSEVSSERSICAgICAgICAgICAgICAgIDMyIC8qIFRoaXMgY29udGFpbnMgc29tZSBwYWRkaW5nICovCisKKyNkZWZpbmUgUUxDTklDX1AzX1JYX0JVRl9NQVhfTEVOICAgICAgICAgKFFMQ05JQ19NQVhfRVRIRVJIRFIgKyBFVEhfREFUQV9MRU4pCisjZGVmaW5lIFFMQ05JQ19QM19SWF9KVU1CT19CVUZfTUFYX0xFTiAgIChRTENOSUNfTUFYX0VUSEVSSERSICsgUDNfTUFYX01UVSkKKyNkZWZpbmUgUUxDTklDX0NUX0RFRkFVTFRfUlhfQlVGX0xFTgkyMDQ4CisjZGVmaW5lIFFMQ05JQ19MUk9fQlVGRkVSX0VYVFJBCQkyMDQ4CisKKyNkZWZpbmUgUUxDTklDX1JYX0xST19CVUZGRVJfTEVOR1RICQkoODA2MCkKKworLyogT3Bjb2RlcyB0byBiZSB1c2VkIHdpdGggdGhlIGNvbW1hbmRzICovCisjZGVmaW5lIFRYX0VUSEVSX1BLVAkweDAxCisjZGVmaW5lIFRYX1RDUF9QS1QJMHgwMgorI2RlZmluZSBUWF9VRFBfUEtUCTB4MDMKKyNkZWZpbmUgVFhfSVBfUEtUCTB4MDQKKyNkZWZpbmUgVFhfVENQX0xTTwkweDA1CisjZGVmaW5lIFRYX1RDUF9MU082CTB4MDYKKyNkZWZpbmUgVFhfSVBTRUMJMHgwNworI2RlZmluZSBUWF9JUFNFQ19DTUQJMHgwYQorI2RlZmluZSBUWF9UQ1BWNl9QS1QJMHgwYgorI2RlZmluZSBUWF9VRFBWNl9QS1QJMHgwYworCisvKiBUeCBkZWZpbmVzICovCisjZGVmaW5lIE1BWF9CVUZGRVJTX1BFUl9DTUQJMzIKKyNkZWZpbmUgVFhfU1RPUF9USFJFU0gJCSgoTUFYX1NLQl9GUkFHUyA+PiAyKSArIDQpCisjZGVmaW5lIFFMQ05JQ19NQVhfVFhfVElNRU9VVFMJMgorCisvKgorICogRm9sbG93aW5nIGFyZSB0aGUgc3RhdGVzIG9mIHRoZSBQaGFudG9tLiBQaGFudG9tIHdpbGwgc2V0IHRoZW0gYW5kCisgKiBIb3N0IHdpbGwgcmVhZCB0byBjaGVjayBpZiB0aGUgZmllbGRzIGFyZSBjb3JyZWN0LgorICovCisjZGVmaW5lIFBIQU5fSU5JVElBTElaRV9GQUlMRUQJCTB4ZmZmZgorI2RlZmluZSBQSEFOX0lOSVRJQUxJWkVfQ09NUExFVEUJMHhmZjAxCisKKy8qIEhvc3Qgd3JpdGVzIHRoZSBmb2xsb3dpbmcgdG8gbm90aWZ5IHRoYXQgaXQgaGFzIGRvbmUgdGhlIGluaXQtaGFuZHNoYWtlICovCisjZGVmaW5lIFBIQU5fSU5JVElBTElaRV9BQ0sJCTB4ZjAwZgorI2RlZmluZSBQSEFOX1BFR19SQ1ZfSU5JVElBTElaRUQJMHhmZjAxCisKKyNkZWZpbmUgTlVNX1JDVl9ERVNDX1JJTkdTCTMKKyNkZWZpbmUgTlVNX1NUU19ERVNDX1JJTkdTCTQKKworI2RlZmluZSBSQ1ZfUklOR19OT1JNQUwgMAorI2RlZmluZSBSQ1ZfUklOR19KVU1CTwkxCisjZGVmaW5lIFJDVl9SSU5HX0xSTwkyCisKKyNkZWZpbmUgTUlOX0NNRF9ERVNDUklQVE9SUwkJNjQKKyNkZWZpbmUgTUlOX1JDVl9ERVNDUklQVE9SUwkJNjQKKyNkZWZpbmUgTUlOX0pVTUJPX0RFU0NSSVBUT1JTCQkzMgorCisjZGVmaW5lIE1BWF9DTURfREVTQ1JJUFRPUlMJCTEwMjQKKyNkZWZpbmUgTUFYX1JDVl9ERVNDUklQVE9SU18xRwkJNDA5NgorI2RlZmluZSBNQVhfUkNWX0RFU0NSSVBUT1JTXzEwRyAJODE5MgorI2RlZmluZSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTXzFHCTUxMgorI2RlZmluZSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTXzEwRwkxMDI0CisjZGVmaW5lIE1BWF9MUk9fUkNWX0RFU0NSSVBUT1JTCQk4CisKKyNkZWZpbmUgREVGQVVMVF9SQ1ZfREVTQ1JJUFRPUlNfMUcJMjA0OAorI2RlZmluZSBERUZBVUxUX1JDVl9ERVNDUklQVE9SU18xMEcJNDA5NgorCisjZGVmaW5lIGdldF9uZXh0X2luZGV4KGluZGV4LCBsZW5ndGgpCVwKKwkoKChpbmRleCkgKyAxKSAmICgobGVuZ3RoKSAtIDEpKQorCisjZGVmaW5lIE1QT1JUX01VTFRJX0ZVTkNUSU9OX01PREUgMHgyMjIyCisKKy8qCisgKiBGb2xsb3dpbmcgZGF0YSBzdHJ1Y3R1cmVzIGRlc2NyaWJlIHRoZSBkZXNjcmlwdG9ycyB0aGF0IHdpbGwgYmUgdXNlZC4KKyAqIEFkZGVkIGZpbGVkcyBvZiB0Y3BIZHJTaXplIGFuZCBpcEhkclNpemUsIFRoZSBkcml2ZXIgbmVlZHMgdG8gZG8gaXQgb25seSB3aGVuCisgKiB3ZSBhcmUgZG9pbmcgTFNPIChhYm92ZSB0aGUgMTUwMCBzaXplIHBhY2tldCkgb25seS4KKyAqLworCisjZGVmaW5lIEZMQUdTX1ZMQU5fVEFHR0VECTB4MTAKKyNkZWZpbmUgRkxBR1NfVkxBTl9PT0IJCTB4NDAKKworI2RlZmluZSBxbGNuaWNfc2V0X3R4X3ZsYW5fdGNpKGNtZF9kZXNjLCB2KQlcCisJKGNtZF9kZXNjKS0+dmxhbl9UQ0kgPSBjcHVfdG9fbGUxNih2KTsKKyNkZWZpbmUgcWxjbmljX3NldF9jbWRfZGVzY19wb3J0KGNtZF9kZXNjLCB2YXIpCVwKKwkoKGNtZF9kZXNjKS0+cG9ydF9jdHhpZCB8PSAoKHZhcikgJiAweDBGKSkKKyNkZWZpbmUgcWxjbmljX3NldF9jbWRfZGVzY19jdHhpZChjbWRfZGVzYywgdmFyKQlcCisJKChjbWRfZGVzYyktPnBvcnRfY3R4aWQgfD0gKCh2YXIpIDw8IDQgJiAweEYwKSkKKworI2RlZmluZSBxbGNuaWNfc2V0X3R4X3BvcnQoX2Rlc2MsIF9wb3J0KSBcCisJKChfZGVzYyktPnBvcnRfY3R4aWQgPSAoKF9wb3J0KSAmIDB4ZikgfCAoKChfcG9ydCkgPDwgNCkgJiAweGYwKSkKKworI2RlZmluZSBxbGNuaWNfc2V0X3R4X2ZsYWdzX29wY29kZShfZGVzYywgX2ZsYWdzLCBfb3Bjb2RlKSBcCisJKChfZGVzYyktPmZsYWdzX29wY29kZSA9IFwKKwljcHVfdG9fbGUxNigoKF9mbGFncykgJiAweDdmKSB8ICgoKF9vcGNvZGUpICYgMHgzZikgPDwgNykpKQorCisjZGVmaW5lIHFsY25pY19zZXRfdHhfZnJhZ3NfbGVuKF9kZXNjLCBfZnJhZ3MsIF9sZW4pIFwKKwkoKF9kZXNjKS0+bmZyYWdzX19sZW5ndGggPSBcCisJY3B1X3RvX2xlMzIoKChfZnJhZ3MpICYgMHhmZikgfCAoKChfbGVuKSAmIDB4ZmZmZmZmKSA8PCA4KSkpCisKK3N0cnVjdCBjbWRfZGVzY190eXBlMCB7CisJdTggdGNwX2hkcl9vZmZzZXQ7CS8qIEZvciBMU08gb25seSAqLworCXU4IGlwX2hkcl9vZmZzZXQ7CS8qIEZvciBMU08gb25seSAqLworCV9fbGUxNiBmbGFnc19vcGNvZGU7CS8qIDE1OjEzIHVudXNlZCwgMTI6NyBvcGNvZGUsIDY6MCBmbGFncyAqLworCV9fbGUzMiBuZnJhZ3NfX2xlbmd0aDsJLyogMzE6OCB0b3RhbCBsZW4sIDc6MCBmcmFnIGNvdW50ICovCisKKwlfX2xlNjQgYWRkcl9idWZmZXIyOworCisJX19sZTE2IHJlZmVyZW5jZV9oYW5kbGU7CisJX19sZTE2IG1zczsKKwl1OCBwb3J0X2N0eGlkOwkJLyogNzo0IGN0eGlkIDM6MCBwb3J0ICovCisJdTggdG90YWxfaGRyX2xlbmd0aDsJLyogTFNPIG9ubHkgOiBNQUMrSVArVENQIEhkciBzaXplICovCisJX19sZTE2IGNvbm5faWQ7CQkvKiBJUFNlYyBvZmZvYWQgb25seSAqLworCisJX19sZTY0IGFkZHJfYnVmZmVyMzsKKwlfX2xlNjQgYWRkcl9idWZmZXIxOworCisJX19sZTE2IGJ1ZmZlcl9sZW5ndGhbNF07CisKKwlfX2xlNjQgYWRkcl9idWZmZXI0OworCisJX19sZTMyIHJlc2VydmVkMjsKKwlfX2xlMTYgcmVzZXJ2ZWQ7CisJX19sZTE2IHZsYW5fVENJOworCit9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDY0KSkpOworCisvKiBOb3RlOiBzaXplb2YocmN2X2Rlc2MpIHNob3VsZCBhbHdheXMgYmUgYSBtdXRsaXBsZSBvZiAyICovCitzdHJ1Y3QgcmN2X2Rlc2MgeworCV9fbGUxNiByZWZlcmVuY2VfaGFuZGxlOworCV9fbGUxNiByZXNlcnZlZDsKKwlfX2xlMzIgYnVmZmVyX2xlbmd0aDsJLyogYWxsb2NhdGVkIGJ1ZmZlciBsZW5ndGggKHVzdWFsbHkgMkspICovCisJX19sZTY0IGFkZHJfYnVmZmVyOworfTsKKworLyogb3Bjb2RlIGZpZWxkIGluIHN0YXR1c19kZXNjICovCisjZGVmaW5lIFFMQ05JQ19TWU5fT0ZGTE9BRAkweDAzCisjZGVmaW5lIFFMQ05JQ19SWFBLVF9ERVNDICAJMHgwNAorI2RlZmluZSBRTENOSUNfT0xEX1JYUEtUX0RFU0MJMHgzZgorI2RlZmluZSBRTENOSUNfUkVTUE9OU0VfREVTQwkweDA1CisjZGVmaW5lIFFMQ05JQ19MUk9fREVTQyAgCTB4MTIKKworLyogZm9yIHN0YXR1cyBmaWVsZCBpbiBzdGF0dXNfZGVzYyAqLworI2RlZmluZSBTVEFUVVNfQ0tTVU1fT0sJCSgyKQorCisvKiBvd25lciBiaXRzIG9mIHN0YXR1c19kZXNjICovCisjZGVmaW5lIFNUQVRVU19PV05FUl9IT1NUCSgweDFVTEwgPDwgNTYpCisjZGVmaW5lIFNUQVRVU19PV05FUl9QSEFOVE9NCSgweDJVTEwgPDwgNTYpCisKKy8qIFN0YXR1cyBkZXNjcmlwdG9yOgorICAgMC0zIHBvcnQsIDQtNyBzdGF0dXMsIDgtMTEgdHlwZSwgMTItMjcgdG90YWxfbGVuZ3RoCisgICAyOC00MyByZWZlcmVuY2VfaGFuZGxlLCA0NC00NyBwcm90b2NvbCwgNDgtNTIgcGt0X29mZnNldAorICAgNTMtNTUgZGVzY19jbnQsIDU2LTU3IG93bmVyLCA1OC02MyBvcGNvZGUKKyAqLworI2RlZmluZSBxbGNuaWNfZ2V0X3N0c19wb3J0KHN0c19kYXRhKQlcCisJKChzdHNfZGF0YSkgJiAweDBGKQorI2RlZmluZSBxbGNuaWNfZ2V0X3N0c19zdGF0dXMoc3RzX2RhdGEpCVwKKwkoKChzdHNfZGF0YSkgPj4gNCkgJiAweDBGKQorI2RlZmluZSBxbGNuaWNfZ2V0X3N0c190eXBlKHN0c19kYXRhKQlcCisJKCgoc3RzX2RhdGEpID4+IDgpICYgMHgwRikKKyNkZWZpbmUgcWxjbmljX2dldF9zdHNfdG90YWxsZW5ndGgoc3RzX2RhdGEpCVwKKwkoKChzdHNfZGF0YSkgPj4gMTIpICYgMHhGRkZGKQorI2RlZmluZSBxbGNuaWNfZ2V0X3N0c19yZWZoYW5kbGUoc3RzX2RhdGEpCVwKKwkoKChzdHNfZGF0YSkgPj4gMjgpICYgMHhGRkZGKQorI2RlZmluZSBxbGNuaWNfZ2V0X3N0c19wcm90KHN0c19kYXRhKQlcCisJKCgoc3RzX2RhdGEpID4+IDQ0KSAmIDB4MEYpCisjZGVmaW5lIHFsY25pY19nZXRfc3RzX3BrdF9vZmZzZXQoc3RzX2RhdGEpCVwKKwkoKChzdHNfZGF0YSkgPj4gNDgpICYgMHgxRikKKyNkZWZpbmUgcWxjbmljX2dldF9zdHNfZGVzY19jbnQoc3RzX2RhdGEpCVwKKwkoKChzdHNfZGF0YSkgPj4gNTMpICYgMHg3KQorI2RlZmluZSBxbGNuaWNfZ2V0X3N0c19vcGNvZGUoc3RzX2RhdGEpCVwKKwkoKChzdHNfZGF0YSkgPj4gNTgpICYgMHgwM0YpCisKKyNkZWZpbmUgcWxjbmljX2dldF9scm9fc3RzX3JlZmhhbmRsZShzdHNfZGF0YSkgCVwKKwkoKHN0c19kYXRhKSAmIDB4MEZGRkYpCisjZGVmaW5lIHFsY25pY19nZXRfbHJvX3N0c19sZW5ndGgoc3RzX2RhdGEpCVwKKwkoKChzdHNfZGF0YSkgPj4gMTYpICYgMHgwRkZGRikKKyNkZWZpbmUgcWxjbmljX2dldF9scm9fc3RzX2wyX2hkcl9vZmZzZXQoc3RzX2RhdGEpCVwKKwkoKChzdHNfZGF0YSkgPj4gMzIpICYgMHgwRkYpCisjZGVmaW5lIHFsY25pY19nZXRfbHJvX3N0c19sNF9oZHJfb2Zmc2V0KHN0c19kYXRhKQlcCisJKCgoc3RzX2RhdGEpID4+IDQwKSAmIDB4MEZGKQorI2RlZmluZSBxbGNuaWNfZ2V0X2xyb19zdHNfdGltZXN0YW1wKHN0c19kYXRhKQlcCisJKCgoc3RzX2RhdGEpID4+IDQ4KSAmIDB4MSkKKyNkZWZpbmUgcWxjbmljX2dldF9scm9fc3RzX3R5cGUoc3RzX2RhdGEpCVwKKwkoKChzdHNfZGF0YSkgPj4gNDkpICYgMHg3KQorI2RlZmluZSBxbGNuaWNfZ2V0X2xyb19zdHNfcHVzaF9mbGFnKHN0c19kYXRhKQkJXAorCSgoKHN0c19kYXRhKSA+PiA1MikgJiAweDEpCisjZGVmaW5lIHFsY25pY19nZXRfbHJvX3N0c19zZXFfbnVtYmVyKHN0c19kYXRhKQkJXAorCSgoc3RzX2RhdGEpICYgMHgwRkZGRkZGRkYpCisKKworc3RydWN0IHN0YXR1c19kZXNjIHsKKwlfX2xlNjQgc3RhdHVzX2Rlc2NfZGF0YVsyXTsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoMTYpKSk7CisKKy8qIFVOSUZJRUQgUk9NSU1BR0UgKi8KKyNkZWZpbmUgUUxDTklDX1VOSV9GV19NSU5fU0laRQkJMHhjODAwMAorI2RlZmluZSBRTENOSUNfVU5JX0RJUl9TRUNUX1BST0RVQ1RfVEJMCTB4MAorI2RlZmluZSBRTENOSUNfVU5JX0RJUl9TRUNUX0JPT1RMRAkweDYKKyNkZWZpbmUgUUxDTklDX1VOSV9ESVJfU0VDVF9GVwkJMHg3CisKKy8qT2Zmc2V0cyAqLworI2RlZmluZSBRTENOSUNfVU5JX0NISVBfUkVWX09GRgkJMTAKKyNkZWZpbmUgUUxDTklDX1VOSV9GTEFHU19PRkYJCTExCisjZGVmaW5lIFFMQ05JQ19VTklfQklPU19WRVJTSU9OX09GRiAJMTIKKyNkZWZpbmUgUUxDTklDX1VOSV9CT09UTERfSURYX09GRgkyNworI2RlZmluZSBRTENOSUNfVU5JX0ZJUk1XQVJFX0lEWF9PRkYgCTI5CisKK3N0cnVjdCB1bmlfdGFibGVfZGVzY3sKKwl1MzIJZmluZGV4OworCXUzMgludW1fZW50cmllczsKKwl1MzIJZW50cnlfc2l6ZTsKKwl1MzIJcmVzZXJ2ZWRbNV07Cit9OworCitzdHJ1Y3QgdW5pX2RhdGFfZGVzY3sKKwl1MzIJZmluZGV4OworCXUzMglzaXplOworCXUzMglyZXNlcnZlZFs1XTsKK307CisKKy8qIE1hZ2ljIG51bWJlciB0byBsZXQgdXNlciBrbm93IGZsYXNoIGlzIHByb2dyYW1tZWQgKi8KKyNkZWZpbmUJUUxDTklDX0JESU5GT19NQUdJQyAweDEyMzQ1Njc4CisKKyNkZWZpbmUgUUxDTklDX0JSRFRZUEVfUDNfUkVGX1FHCTB4MDAyMQorI2RlZmluZSBRTENOSUNfQlJEVFlQRV9QM19ITUVaCQkweDAwMjIKKyNkZWZpbmUgUUxDTklDX0JSRFRZUEVfUDNfMTBHX0NYNF9MUAkweDAwMjMKKyNkZWZpbmUgUUxDTklDX0JSRFRZUEVfUDNfNF9HQgkJMHgwMDI0CisjZGVmaW5lIFFMQ05JQ19CUkRUWVBFX1AzX0lNRVoJCTB4MDAyNQorI2RlZmluZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfU0ZQX1BMVVMJMHgwMDI2CisjZGVmaW5lIFFMQ05JQ19CUkRUWVBFX1AzXzEwMDAwX0JBU0VfVAkweDAwMjcKKyNkZWZpbmUgUUxDTklDX0JSRFRZUEVfUDNfWEdfTE9NCTB4MDAyOAorI2RlZmluZSBRTENOSUNfQlJEVFlQRV9QM180X0dCX01NCTB4MDAyOQorI2RlZmluZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfU0ZQX0NUCTB4MDAyYQorI2RlZmluZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfU0ZQX1FUCTB4MDAyYgorI2RlZmluZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfQ1g0CTB4MDAzMQorI2RlZmluZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfWEZQCTB4MDAzMgorI2RlZmluZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfVFAJMHgwMDgwCisKKy8qIEZsYXNoIG1lbW9yeSBtYXAgKi8KKyNkZWZpbmUgUUxDTklDX0JSRENGR19TVEFSVAkweDQwMDAJCS8qIGJvYXJkIGNvbmZpZyAqLworI2RlZmluZSBRTENOSUNfQk9PVExEX1NUQVJUCTB4MTAwMDAJCS8qIGJvb3RsZCAqLworI2RlZmluZSBRTENOSUNfSU1BR0VfU1RBUlQJMHg0MzAwMAkJLyogY29tcHJlc3NlZCBpbWFnZSAqLworI2RlZmluZSBRTENOSUNfVVNFUl9TVEFSVAkweDNFODAwMAkvKiBGaXJtYXJlIGluZm8gKi8KKworI2RlZmluZSBRTENOSUNfRldfVkVSU0lPTl9PRkZTRVQJKFFMQ05JQ19VU0VSX1NUQVJUKzB4NDA4KQorI2RlZmluZSBRTENOSUNfRldfU0laRV9PRkZTRVQJCShRTENOSUNfVVNFUl9TVEFSVCsweDQwYykKKyNkZWZpbmUgUUxDTklDX0ZXX1NFUklBTF9OVU1fT0ZGU0VUCShRTENOSUNfVVNFUl9TVEFSVCsweDgxYykKKyNkZWZpbmUgUUxDTklDX0JJT1NfVkVSU0lPTl9PRkZTRVQJKFFMQ05JQ19VU0VSX1NUQVJUKzB4ODNjKQorCisjZGVmaW5lIFFMQ05JQ19CUkRUWVBFX09GRlNFVAkJKFFMQ05JQ19CUkRDRkdfU1RBUlQrMHg4KQorI2RlZmluZSBRTENOSUNfRldfTUFHSUNfT0ZGU0VUCQkoUUxDTklDX0JSRENGR19TVEFSVCsweDEyOCkKKworI2RlZmluZSBRTENOSUNfRldfTUlOX1NJWkUJCSgweDNmZmZmZikKKyNkZWZpbmUgUUxDTklDX1VOSUZJRURfUk9NSU1BR0UgIAkwCisjZGVmaW5lIFFMQ05JQ19GTEFTSF9ST01JTUFHRQkJMQorI2RlZmluZSBRTENOSUNfVU5LTk9XTl9ST01JTUFHRQkJMHhmZgorCisjZGVmaW5lIFFMQ05JQ19VTklGSUVEX1JPTUlNQUdFX05BTUUJInBoYW5mdy5iaW4iCisjZGVmaW5lIFFMQ05JQ19GTEFTSF9ST01JTUFHRV9OQU1FCSJmbGFzaCIKKworZXh0ZXJuIGNoYXIgcWxjbmljX2RyaXZlcl9uYW1lW107CisKKy8qIE51bWJlciBvZiBzdGF0dXMgZGVzY3JpcHRvcnMgdG8gaGFuZGxlIHBlciBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTUFYX1NUQVRVU19IQU5ETEUJKDY0KQorCisvKgorICogcWxjbmljX3NrYl9mcmFne30gaXMgdG8gY29udGFpbiBtYXBwaW5nIGluZm8gZm9yIGVhY2ggU0cgbGlzdC4gVGhpcworICogaGFzIHRvIGJlIGZyZWVkIHdoZW4gRE1BIGlzIGNvbXBsZXRlLiBUaGlzIGlzIHBhcnQgb2YgcWxjbmljX3R4X2J1ZmZlcnt9LgorICovCitzdHJ1Y3QgcWxjbmljX3NrYl9mcmFnIHsKKwl1NjQgZG1hOworCXU2NCBsZW5ndGg7Cit9OworCitzdHJ1Y3QgcWxjbmljX3JlY3ZfY3JiIHsKKwl1MzIgY3JiX3Jjdl9wcm9kdWNlcltOVU1fUkNWX0RFU0NfUklOR1NdOworCXUzMiBjcmJfc3RzX2NvbnN1bWVyW05VTV9TVFNfREVTQ19SSU5HU107CisJdTMyIHN3X2ludF9tYXNrW05VTV9TVFNfREVTQ19SSU5HU107Cit9OworCisvKiAgICBGb2xsb3dpbmcgZGVmaW5lcyBhcmUgZm9yIHRoZSBzdGF0ZSBvZiB0aGUgYnVmZmVycyAgICAqLworI2RlZmluZQlRTENOSUNfQlVGRkVSX0ZSRUUJMAorI2RlZmluZQlRTENOSUNfQlVGRkVSX0JVU1kJMQorCisvKgorICogVGhlcmUgd2lsbCBiZSBvbmUgcWxjbmljX2J1ZmZlciBwZXIgc2tiIHBhY2tldC4gICAgVGhlc2Ugd2lsbCBiZQorICogdXNlZCB0byBzYXZlIHRoZSBkbWEgaW5mbyBmb3IgcGNpX3VubWFwX3BhZ2UoKQorICovCitzdHJ1Y3QgcWxjbmljX2NtZF9idWZmZXIgeworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHFsY25pY19za2JfZnJhZyBmcmFnX2FycmF5W01BWF9CVUZGRVJTX1BFUl9DTUQgKyAxXTsKKwl1MzIgZnJhZ19jb3VudDsKK307CisKKy8qIEluIHJ4X2J1ZmZlciwgd2UgZG8gbm90IG5lZWQgbXVsdGlwbGUgZnJhZ21lbnRzIGFzIGlzIGEgc2luZ2xlIGJ1ZmZlciAqLworc3RydWN0IHFsY25pY19yeF9idWZmZXIgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXU2NCBkbWE7CisJdTE2IHJlZl9oYW5kbGU7CisJdTE2IHN0YXRlOworfTsKKworLyogQm9hcmQgdHlwZXMgKi8KKyNkZWZpbmUJUUxDTklDX0dCRQkweDAxCisjZGVmaW5lCVFMQ05JQ19YR0JFCTB4MDIKKworLyoKKyAqIE9uZSBoYXJkd2FyZV9jb250ZXh0e30gcGVyIGFkYXB0ZXIKKyAqIGNvbnRhaW5zIGludGVycnVwdCBpbmZvIGFzIHdlbGwgc2hhcmVkIGhhcmR3YXJlIGluZm8uCisgKi8KK3N0cnVjdCBxbGNuaWNfaGFyZHdhcmVfY29udGV4dCB7CisJdm9pZCBfX2lvbWVtICpwY2lfYmFzZTA7CisJdm9pZCBfX2lvbWVtICpvY21fd2luX2NyYjsKKworCXVuc2lnbmVkIGxvbmcgcGNpX2xlbjA7CisKKwl1MzIgb2NtX3dpbjsKKwl1MzIgY3JiX3dpbjsKKworCXJ3bG9ja190IGNyYl9sb2NrOworCXN0cnVjdCBtdXRleCBtZW1fbG9jazsKKworCXU4IGN1dF90aHJvdWdoOworCXU4IHJldmlzaW9uX2lkOworCXU4IHBjaV9mdW5jOworCXU4IGxpbmt1cDsKKwl1MTYgcG9ydF90eXBlOworCXUxNiBib2FyZF90eXBlOworfTsKKworc3RydWN0IHFsY25pY19hZGFwdGVyX3N0YXRzIHsKKwl1NjQgIHhtaXRjYWxsZWQ7CisJdTY0ICB4bWl0ZmluaXNoZWQ7CisJdTY0ICByeGRyb3BwZWQ7CisJdTY0ICB0eGRyb3BwZWQ7CisJdTY0ICBjc3VtbWVkOworCXU2NCAgcnhfcGt0czsKKwl1NjQgIGxyb19wa3RzOworCXU2NCAgcnhieXRlczsKKwl1NjQgIHR4Ynl0ZXM7Cit9OworCisvKgorICogUmN2IERlc2NyaXB0b3IgQ29udGV4dC4gT25lIHN1Y2ggcGVyIFJjdiBEZXNjcmlwdG9yLiBUaGVyZSBtYXkKKyAqIGJlIG9uZSBSY3YgRGVzY3JpcHRvciBmb3Igbm9ybWFsIHBhY2tldHMsIG9uZSBmb3IganVtYm8gYW5kIG1heSBiZSBvdGhlcnMuCisgKi8KK3N0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyB7CisJdTMyIHByb2R1Y2VyOworCXUzMiBudW1fZGVzYzsKKwl1MzIgZG1hX3NpemU7CisJdTMyIHNrYl9zaXplOworCXUzMiBmbGFnczsKKwl2b2lkIF9faW9tZW0gKmNyYl9yY3ZfcHJvZHVjZXI7CisJc3RydWN0IHJjdl9kZXNjICpkZXNjX2hlYWQ7CisJc3RydWN0IHFsY25pY19yeF9idWZmZXIgKnJ4X2J1Zl9hcnI7CisJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3Q7CisJc3BpbmxvY2tfdCBsb2NrOworCWRtYV9hZGRyX3QgcGh5c19hZGRyOworfTsKKworc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nIHsKKwl1MzIgY29uc3VtZXI7CisJdTMyIG51bV9kZXNjOworCXZvaWQgX19pb21lbSAqY3JiX3N0c19jb25zdW1lcjsKKwl2b2lkIF9faW9tZW0gKmNyYl9pbnRyX21hc2s7CisKKwlzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKmRlc2NfaGVhZDsKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CisJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2xpc3RbTlVNX1JDVl9ERVNDX1JJTkdTXTsKKworCWludCBpcnE7CisKKwlkbWFfYWRkcl90IHBoeXNfYWRkcjsKKwljaGFyIG5hbWVbSUZOQU1TSVorNF07Cit9OworCitzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyB7CisJdTMyIHByb2R1Y2VyOworCV9fbGUzMiAqaHdfY29uc3VtZXI7CisJdTMyIHN3X2NvbnN1bWVyOworCXZvaWQgX19pb21lbSAqY3JiX2NtZF9wcm9kdWNlcjsKKwl1MzIgbnVtX2Rlc2M7CisKKwlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CisKKwlzdHJ1Y3QgcWxjbmljX2NtZF9idWZmZXIgKmNtZF9idWZfYXJyOworCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqZGVzY19oZWFkOworCWRtYV9hZGRyX3QgcGh5c19hZGRyOworCWRtYV9hZGRyX3QgaHdfY29uc19waHlzX2FkZHI7Cit9OworCisvKgorICogUmVjZWl2ZSBjb250ZXh0LiBUaGVyZSBpcyBvbmUgc3VjaCBzdHJ1Y3R1cmUgcGVyIGluc3RhbmNlIG9mIHRoZQorICogcmVjZWl2ZSBwcm9jZXNzaW5nLiBBbnkgc3RhdGUgaW5mb3JtYXRpb24gdGhhdCBpcyByZWxldmFudCB0bworICogdGhlIHJlY2VpdmUsIGFuZCBpcyBtdXN0IGJlIGluIHRoaXMgc3RydWN0dXJlLiBUaGUgZ2xvYmFsIGRhdGEgbWF5IGJlCisgKiBwcmVzZW50IGVsc2V3aGVyZS4KKyAqLworc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgeworCXUzMiBzdGF0ZTsKKwl1MTYgY29udGV4dF9pZDsKKwl1MTYgdmlydF9wb3J0OworCisJc3RydWN0IHFsY25pY19ob3N0X3Jkc19yaW5nICpyZHNfcmluZ3M7CisJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZ3M7Cit9OworCisvKiBIVyBjb250ZXh0IGNyZWF0aW9uICovCisKKyNkZWZpbmUgUUxDTklDX09TX0NSQl9SRVRSWV9DT1VOVAk0MDAwCisjZGVmaW5lIFFMQ05JQ19DRFJQX1NJR05BVFVSRV9NQUtFKHBjaWZuLCB2ZXJzaW9uKSBcCisJKCgocGNpZm4pICYgMHhmZikgfCAoKCh2ZXJzaW9uKSAmIDB4ZmYpIDw8IDgpIHwgKDB4Y2FmZSA8PCAxNikpCisKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0JJVAkJMHg4MDAwMDAwMAorCisvKgorICogQWxsIHJlc3BvbnNlcyBtdXN0IGhhdmUgdGhlIFFMQ05JQ19DRFJQX0NNRF9CSVQgY2xlYXJlZAorICogaW4gdGhlIGNyYiBRTENOSUNfQ0RSUF9DUkJfT0ZGU0VULgorICovCisjZGVmaW5lIFFMQ05JQ19DRFJQX0ZPUk1fUlNQKHJzcCkJKHJzcCkKKyNkZWZpbmUgUUxDTklDX0NEUlBfSVNfUlNQKHJzcCkJKCgocnNwKSAmIFFMQ05JQ19DRFJQX0NNRF9CSVQpID09IDApCisKKyNkZWZpbmUgUUxDTklDX0NEUlBfUlNQX09LCQkweDAwMDAwMDAxCisjZGVmaW5lIFFMQ05JQ19DRFJQX1JTUF9GQUlMCQkweDAwMDAwMDAyCisjZGVmaW5lIFFMQ05JQ19DRFJQX1JTUF9USU1FT1VUIAkweDAwMDAwMDAzCisKKy8qCisgKiBBbGwgY29tbWFuZHMgbXVzdCBoYXZlIHRoZSBRTENOSUNfQ0RSUF9DTURfQklUIHNldCBpbgorICogdGhlIGNyYiBRTENOSUNfQ0RSUF9DUkJfT0ZGU0VULgorICovCisjZGVmaW5lIFFMQ05JQ19DRFJQX0ZPUk1fQ01EKGNtZCkJKFFMQ05JQ19DRFJQX0NNRF9CSVQgfCAoY21kKSkKKyNkZWZpbmUgUUxDTklDX0NEUlBfSVNfQ01EKGNtZCkJKCgoY21kKSAmIFFMQ05JQ19DRFJQX0NNRF9CSVQpICE9IDApCisKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1NVQk1JVF9DQVBBQklMSVRJRVMgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1JFQURfTUFYX1JEU19QRVJfQ1RYICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1JFQURfTUFYX1NEU19QRVJfQ1RYICAgIDB4MDAwMDAwMDMKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1JFQURfTUFYX1JVTEVTX1BFUl9DVFggIDB4MDAwMDAwMDQKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1JFQURfTUFYX1JYX0NUWCAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1JFQURfTUFYX1RYX0NUWCAgICAgICAgIDB4MDAwMDAwMDYKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0NSRUFURV9SWF9DVFggICAgICAgICAgIDB4MDAwMDAwMDcKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0RFU1RST1lfUlhfQ1RYICAgICAgICAgIDB4MDAwMDAwMDgKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0NSRUFURV9UWF9DVFggICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0RFU1RST1lfVFhfQ1RYICAgICAgICAgIDB4MDAwMDAwMGEKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1NFVFVQX1NUQVRJU1RJQ1MgICAgICAgIDB4MDAwMDAwMGUKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0dFVF9TVEFUSVNUSUNTICAgICAgICAgIDB4MDAwMDAwMGYKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0RFTEVURV9TVEFUSVNUSUNTICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1NFVF9NVFUgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTIKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1JFQURfUEhZCQkweDAwMDAwMDEzCisjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9XUklURV9QSFkJCTB4MDAwMDAwMTQKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1JFQURfSFdfUkVHCQkweDAwMDAwMDE1CisjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9HRVRfRkxPV19DVEwJCTB4MDAwMDAwMTYKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX1NFVF9GTE9XX0NUTAkJMHgwMDAwMDAxNworI2RlZmluZSBRTENOSUNfQ0RSUF9DTURfUkVBRF9NQVhfTVRVCQkweDAwMDAwMDE4CisjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9SRUFEX01BWF9MUk8JCTB4MDAwMDAwMTkKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0NPTkZJR1VSRV9UT0UJCTB4MDAwMDAwMWEKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX0ZVTkNfQVRUUklCCQkweDAwMDAwMDFiCisjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9SRUFEX1BFWFFfUEFSQU1FVEVSUwkweDAwMDAwMDFjCisjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9HRVRfTElDX0NBUEFCSUxJVElFUwkweDAwMDAwMDFkCisjZGVmaW5lIFFMQ05JQ19DRFJQX0NNRF9SRUFEX01BWF9MUk9fUEVSX0JPQVJECTB4MDAwMDAwMWUKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ01EX01BWAkJCTB4MDAwMDAwMWYKKworI2RlZmluZSBRTENOSUNfUkNPREVfU1VDQ0VTUwkJMAorI2RlZmluZSBRTENOSUNfUkNPREVfVElNRU9VVAkJMTcKKyNkZWZpbmUgUUxDTklDX0RFU1RST1lfQ1RYX1JFU0VUCTAKKworLyoKKyAqIENhcGFiaWxpdGllcyBBbm5vdW5jZWQKKyAqLworI2RlZmluZSBRTENOSUNfQ0FQMF9MRUdBQ1lfQ09OVEVYVAkoMSkKKyNkZWZpbmUgUUxDTklDX0NBUDBfTEVHQUNZX01OCQkoMSA8PCAyKQorI2RlZmluZSBRTENOSUNfQ0FQMF9MU08gCQkoMSA8PCA2KQorI2RlZmluZSBRTENOSUNfQ0FQMF9KVU1CT19DT05USUdVT1VTCSgxIDw8IDcpCisjZGVmaW5lIFFMQ05JQ19DQVAwX0xST19DT05USUdVT1VTCSgxIDw8IDgpCisKKy8qCisgKiBDb250ZXh0IHN0YXRlCisgKi8KKyNkZWZpbmUgUUxDSEFMX1ZFUlNJT04JMQorCisjZGVmaW5lIFFMQ05JQ19IT1NUX0NUWF9TVEFURV9BQ1RJVkUJMgorCisvKgorICogUnggY29udGV4dAorICovCisKK3N0cnVjdCBxbGNuaWNfaG9zdHJxX3Nkc19yaW5nIHsKKwlfX2xlNjQgaG9zdF9waHlzX2FkZHI7CS8qIFJpbmcgYmFzZSBhZGRyICovCisJX19sZTMyIHJpbmdfc2l6ZTsJCS8qIFJpbmcgZW50cmllcyAqLworCV9fbGUxNiBtc2lfaW5kZXg7CisJX19sZTE2IHJzdmQ7CQkvKiBQYWRkaW5nICovCit9OworCitzdHJ1Y3QgcWxjbmljX2hvc3RycV9yZHNfcmluZyB7CisJX19sZTY0IGhvc3RfcGh5c19hZGRyOwkvKiBSaW5nIGJhc2UgYWRkciAqLworCV9fbGU2NCBidWZmX3NpemU7CQkvKiBQYWNrZXQgYnVmZmVyIHNpemUgKi8KKwlfX2xlMzIgcmluZ19zaXplOwkJLyogUmluZyBlbnRyaWVzICovCisJX19sZTMyIHJpbmdfa2luZDsJCS8qIENsYXNzIG9mIHJpbmcgKi8KK307CisKK3N0cnVjdCBxbGNuaWNfaG9zdHJxX3J4X2N0eCB7CisJX19sZTY0IGhvc3RfcnNwX2RtYV9hZGRyOwkvKiBSZXNwb25zZSBkbWEnZCBoZXJlICovCisJX19sZTMyIGNhcGFiaWxpdGllc1s0XTsJLyogRmxhZyBiaXQgdmVjdG9yICovCisJX19sZTMyIGhvc3RfaW50X2NyYl9tb2RlOwkvKiBJbnRlcnJ1cHQgY3JiIHVzYWdlICovCisJX19sZTMyIGhvc3RfcmRzX2NyYl9tb2RlOwkvKiBSRFMgY3JiIHVzYWdlICovCisJLyogVGhlc2UgcmluZyBvZmZzZXRzIGFyZSByZWxhdGl2ZSB0byBkYXRhWzBdIGJlbG93ICovCisJX19sZTMyIHJkc19yaW5nX29mZnNldDsJLyogT2Zmc2V0IHRvIFJEUyBjb25maWcgKi8KKwlfX2xlMzIgc2RzX3Jpbmdfb2Zmc2V0OwkvKiBPZmZzZXQgdG8gU0RTIGNvbmZpZyAqLworCV9fbGUxNiBudW1fcmRzX3JpbmdzOwkvKiBDb3VudCBvZiBSRFMgcmluZ3MgKi8KKwlfX2xlMTYgbnVtX3Nkc19yaW5nczsJLyogQ291bnQgb2YgU0RTIHJpbmdzICovCisJX19sZTE2IHJzdmQxOwkJLyogUGFkZGluZyAqLworCV9fbGUxNiByc3ZkMjsJCS8qIFBhZGRpbmcgKi8KKwl1OCAgcmVzZXJ2ZWRbMTI4XTsgCS8qIHJlc2VydmUgc3BhY2UgZm9yIGZ1dHVyZSBleHBhbnNpb24qLworCS8qIE1VU1QgQkUgNjQtYml0IGFsaWduZWQuCisJICAgVGhlIGZvbGxvd2luZyBpcyBwYWNrZWQ6CisJICAgLSBOIGhvc3RycV9yZHNfcmluZ3MKKwkgICAtIE4gaG9zdHJxX3Nkc19yaW5ncyAqLworCWNoYXIgZGF0YVswXTsKK307CisKK3N0cnVjdCBxbGNuaWNfY2FyZHJzcF9yZHNfcmluZ3sKKwlfX2xlMzIgaG9zdF9wcm9kdWNlcl9jcmI7CS8qIENyYiB0byB1c2UgKi8KKwlfX2xlMzIgcnN2ZDE7CQkvKiBQYWRkaW5nICovCit9OworCitzdHJ1Y3QgcWxjbmljX2NhcmRyc3Bfc2RzX3JpbmcgeworCV9fbGUzMiBob3N0X2NvbnN1bWVyX2NyYjsJLyogQ3JiIHRvIHVzZSAqLworCV9fbGUzMiBpbnRlcnJ1cHRfY3JiOwkvKiBDcmIgdG8gdXNlICovCit9OworCitzdHJ1Y3QgcWxjbmljX2NhcmRyc3BfcnhfY3R4IHsKKwkvKiBUaGVzZSByaW5nIG9mZnNldHMgYXJlIHJlbGF0aXZlIHRvIGRhdGFbMF0gYmVsb3cgKi8KKwlfX2xlMzIgcmRzX3Jpbmdfb2Zmc2V0OwkvKiBPZmZzZXQgdG8gUkRTIGNvbmZpZyAqLworCV9fbGUzMiBzZHNfcmluZ19vZmZzZXQ7CS8qIE9mZnNldCB0byBTRFMgY29uZmlnICovCisJX19sZTMyIGhvc3RfY3R4X3N0YXRlOwkvKiBTdGFydGluZyBTdGF0ZSAqLworCV9fbGUzMiBudW1fZm5fcGVyX3BvcnQ7CS8qIEhvdyBtYW55IFBDSSBmbiBzaGFyZSB0aGUgcG9ydCAqLworCV9fbGUxNiBudW1fcmRzX3JpbmdzOwkvKiBDb3VudCBvZiBSRFMgcmluZ3MgKi8KKwlfX2xlMTYgbnVtX3Nkc19yaW5nczsJLyogQ291bnQgb2YgU0RTIHJpbmdzICovCisJX19sZTE2IGNvbnRleHRfaWQ7CQkvKiBIYW5kbGUgZm9yIGNvbnRleHQgKi8KKwl1OCAgcGh5c19wb3J0OwkJLyogUGh5c2ljYWwgaWQgb2YgcG9ydCAqLworCXU4ICB2aXJ0X3BvcnQ7CQkvKiBWaXJ0dWFsL0xvZ2ljYWwgaWQgb2YgcG9ydCAqLworCXU4ICByZXNlcnZlZFsxMjhdOwkvKiBzYXZlIHNwYWNlIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisJLyogIE1VU1QgQkUgNjQtYml0IGFsaWduZWQuCisJICAgVGhlIGZvbGxvd2luZyBpcyBwYWNrZWQ6CisJICAgLSBOIGNhcmRyc3BfcmRzX3JpbmdzCisJICAgLSBOIGNhcmRyc19zZHNfcmluZ3MgKi8KKwljaGFyIGRhdGFbMF07Cit9OworCisjZGVmaW5lIFNJWkVPRl9IT1NUUlFfUlgoSE9TVFJRX1JYLCByZHNfcmluZ3MsIHNkc19yaW5ncykJXAorCShzaXplb2YoSE9TVFJRX1JYKSArIAkJCQkJXAorCShyZHNfcmluZ3MpKihzaXplb2Yoc3RydWN0IHFsY25pY19ob3N0cnFfcmRzX3JpbmcpKSArCQlcCisJKHNkc19yaW5ncykqKHNpemVvZihzdHJ1Y3QgcWxjbmljX2hvc3RycV9zZHNfcmluZykpKQorCisjZGVmaW5lIFNJWkVPRl9DQVJEUlNQX1JYKENBUkRSU1BfUlgsIHJkc19yaW5ncywgc2RzX3JpbmdzKSAJXAorCShzaXplb2YoQ0FSRFJTUF9SWCkgKyAJCQkJCVwKKwkocmRzX3JpbmdzKSooc2l6ZW9mKHN0cnVjdCBxbGNuaWNfY2FyZHJzcF9yZHNfcmluZykpICsgCQlcCisJKHNkc19yaW5ncykqKHNpemVvZihzdHJ1Y3QgcWxjbmljX2NhcmRyc3Bfc2RzX3JpbmcpKSkKKworLyoKKyAqIFR4IGNvbnRleHQKKyAqLworCitzdHJ1Y3QgcWxjbmljX2hvc3RycV9jZHNfcmluZyB7CisJX19sZTY0IGhvc3RfcGh5c19hZGRyOwkvKiBSaW5nIGJhc2UgYWRkciAqLworCV9fbGUzMiByaW5nX3NpemU7CQkvKiBSaW5nIGVudHJpZXMgKi8KKwlfX2xlMzIgcnN2ZDsJCS8qIFBhZGRpbmcgKi8KK307CisKK3N0cnVjdCBxbGNuaWNfaG9zdHJxX3R4X2N0eCB7CisJX19sZTY0IGhvc3RfcnNwX2RtYV9hZGRyOwkvKiBSZXNwb25zZSBkbWEnZCBoZXJlICovCisJX19sZTY0IGNtZF9jb25zX2RtYV9hZGRyOwkvKiAgKi8KKwlfX2xlNjQgZHVtbXlfZG1hX2FkZHI7CS8qICAqLworCV9fbGUzMiBjYXBhYmlsaXRpZXNbNF07CS8qIEZsYWcgYml0IHZlY3RvciAqLworCV9fbGUzMiBob3N0X2ludF9jcmJfbW9kZTsJLyogSW50ZXJydXB0IGNyYiB1c2FnZSAqLworCV9fbGUzMiByc3ZkMTsJCS8qIFBhZGRpbmcgKi8KKwlfX2xlMTYgcnN2ZDI7CQkvKiBQYWRkaW5nICovCisJX19sZTE2IGludGVycnVwdF9jdGw7CisJX19sZTE2IG1zaV9pbmRleDsKKwlfX2xlMTYgcnN2ZDM7CQkvKiBQYWRkaW5nICovCisJc3RydWN0IHFsY25pY19ob3N0cnFfY2RzX3JpbmcgY2RzX3Jpbmc7CS8qIERlc2Mgb2YgY2RzIHJpbmcgKi8KKwl1OCAgcmVzZXJ2ZWRbMTI4XTsJLyogZnV0dXJlIGV4cGFuc2lvbiAqLworfTsKKworc3RydWN0IHFsY25pY19jYXJkcnNwX2Nkc19yaW5nIHsKKwlfX2xlMzIgaG9zdF9wcm9kdWNlcl9jcmI7CS8qIENyYiB0byB1c2UgKi8KKwlfX2xlMzIgaW50ZXJydXB0X2NyYjsJLyogQ3JiIHRvIHVzZSAqLworfTsKKworc3RydWN0IHFsY25pY19jYXJkcnNwX3R4X2N0eCB7CisJX19sZTMyIGhvc3RfY3R4X3N0YXRlOwkvKiBTdGFydGluZyBzdGF0ZSAqLworCV9fbGUxNiBjb250ZXh0X2lkOwkJLyogSGFuZGxlIGZvciBjb250ZXh0ICovCisJdTggIHBoeXNfcG9ydDsJCS8qIFBoeXNpY2FsIGlkIG9mIHBvcnQgKi8KKwl1OCAgdmlydF9wb3J0OwkJLyogVmlydHVhbC9Mb2dpY2FsIGlkIG9mIHBvcnQgKi8KKwlzdHJ1Y3QgcWxjbmljX2NhcmRyc3BfY2RzX3JpbmcgY2RzX3Jpbmc7CS8qIENhcmQgY2RzIHNldHRpbmdzICovCisJdTggIHJlc2VydmVkWzEyOF07CS8qIGZ1dHVyZSBleHBhbnNpb24gKi8KK307CisKKyNkZWZpbmUgU0laRU9GX0hPU1RSUV9UWChIT1NUUlFfVFgpCShzaXplb2YoSE9TVFJRX1RYKSkKKyNkZWZpbmUgU0laRU9GX0NBUkRSU1BfVFgoQ0FSRFJTUF9UWCkJKHNpemVvZihDQVJEUlNQX1RYKSkKKworLyogQ1JCICovCisKKyNkZWZpbmUgUUxDTklDX0hPU1RfUkRTX0NSQl9NT0RFX1VOSVFVRQkwCisjZGVmaW5lIFFMQ05JQ19IT1NUX1JEU19DUkJfTU9ERV9TSEFSRUQJMQorI2RlZmluZSBRTENOSUNfSE9TVF9SRFNfQ1JCX01PREVfQ1VTVE9NCTIKKyNkZWZpbmUgUUxDTklDX0hPU1RfUkRTX0NSQl9NT0RFX01BWAkzCisKKyNkZWZpbmUgUUxDTklDX0hPU1RfSU5UX0NSQl9NT0RFX1VOSVFVRQkwCisjZGVmaW5lIFFMQ05JQ19IT1NUX0lOVF9DUkJfTU9ERV9TSEFSRUQJMQorI2RlZmluZSBRTENOSUNfSE9TVF9JTlRfQ1JCX01PREVfTk9SWAkyCisjZGVmaW5lIFFMQ05JQ19IT1NUX0lOVF9DUkJfTU9ERV9OT1RYCTMKKyNkZWZpbmUgUUxDTklDX0hPU1RfSU5UX0NSQl9NT0RFX05PUlhUWAk0CisKKworLyogTUFDICovCisKKyNkZWZpbmUgTUNfQ09VTlRfUDMJMzgKKworI2RlZmluZSBRTENOSUNfTUFDX05PT1AJMAorI2RlZmluZSBRTENOSUNfTUFDX0FERAkxCisjZGVmaW5lIFFMQ05JQ19NQUNfREVMCTIKKworc3RydWN0IHFsY25pY19tYWNfbGlzdF9zIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJdWludDhfdCBtYWNfYWRkcltFVEhfQUxFTisyXTsKK307CisKKy8qCisgKiBJbnRlcnJ1cHQgY29hbGVzY2luZyBkZWZhdWx0cy4gVGhlIGRlZmF1bHRzIGFyZSBmb3IgMTUwMCBNVFUuIEl0IGlzCisgKiBhZGp1c3RlZCBiYXNlZCBvbiBjb25maWd1cmVkIE1UVS4KKyAqLworI2RlZmluZSBRTENOSUNfREVGQVVMVF9JTlRSX0NPQUxFU0NFX1JYX1RJTUVfVVMJMworI2RlZmluZSBRTENOSUNfREVGQVVMVF9JTlRSX0NPQUxFU0NFX1JYX1BBQ0tFVFMJMjU2CisjZGVmaW5lIFFMQ05JQ19ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfVFhfUEFDS0VUUwk2NAorI2RlZmluZSBRTENOSUNfREVGQVVMVF9JTlRSX0NPQUxFU0NFX1RYX1RJTUVfVVMJNAorCisjZGVmaW5lIFFMQ05JQ19JTlRSX0RFRkFVTFQJCQkweDA0CisKK3VuaW9uIHFsY25pY19uaWNfaW50cl9jb2FsZXNjZV9kYXRhIHsKKwlzdHJ1Y3QgeworCQl1MTYJcnhfcGFja2V0czsKKwkJdTE2CXJ4X3RpbWVfdXM7CisJCXUxNgl0eF9wYWNrZXRzOworCQl1MTYJdHhfdGltZV91czsKKwl9IGRhdGE7CisJdTY0CQl3b3JkOworfTsKKworc3RydWN0IHFsY25pY19uaWNfaW50cl9jb2FsZXNjZSB7CisJdTE2CQlzdGF0c190aW1lX3VzOworCXUxNgkJcmF0ZV9zYW1wbGVfdGltZTsKKwl1MTYJCWZsYWdzOworCXUxNgkJcnN2ZF8xOworCXUzMgkJbG93X3RocmVzaG9sZDsKKwl1MzIJCWhpZ2hfdGhyZXNob2xkOworCXVuaW9uIHFsY25pY19uaWNfaW50cl9jb2FsZXNjZV9kYXRhCW5vcm1hbDsKKwl1bmlvbiBxbGNuaWNfbmljX2ludHJfY29hbGVzY2VfZGF0YQlsb3c7CisJdW5pb24gcWxjbmljX25pY19pbnRyX2NvYWxlc2NlX2RhdGEJaGlnaDsKKwl1bmlvbiBxbGNuaWNfbmljX2ludHJfY29hbGVzY2VfZGF0YQlpcnE7Cit9OworCisjZGVmaW5lIFFMQ05JQ19IT1NUX1JFUVVFU1QJMHgxMworI2RlZmluZSBRTENOSUNfUkVRVUVTVAkJMHgxNAorCisjZGVmaW5lIFFMQ05JQ19NQUNfRVZFTlQJMHgxCisKKyNkZWZpbmUgUUxDTklDX0lQX1VQCQkyCisjZGVmaW5lIFFMQ05JQ19JUF9ET1dOCQkzCisKKy8qCisgKiBEcml2ZXIgLS0+IEZpcm13YXJlCisgKi8KKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfU1RBUlQgCQkJMAorI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9DT05GSUdfUlNTCQkJMQorI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9DT05GSUdfUlNTX1RCTAkJMgorI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9DT05GSUdfSU5UUl9DT0FMRVNDRQkJMworI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9DT05GSUdfTEVECQkJNAorI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9DT05GSUdfUFJPTUlTQ1VPVVMJCTUKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX0wyX01BQyAJCTYKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfTFJPX1JFUVVFU1QJCQk3CisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0dFVF9TTk1QX1NUQVRTCQk4CisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX1BST1hZX1NUQVJUX1JFUVVFU1QJCTkKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfUFJPWFlfU1RPUF9SRVFVRVNUCQkxMAorI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9QUk9YWV9TRVRfTVRVIAkJMTEKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfUFJPWFlfU0VUX1ZQT1JUX01JU1NfTU9ERQkxMgorI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9HRVRfRklOR0VSX1BSSU5UX1JFUVVFU1QJMTMKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfSU5TVEFMTF9MSUNFTlNFX1JFUVVFU1QJMTQKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfR0VUX0xJQ0VOU0VfQ0FQQUJJTElUWV9SRVFVRVNUCTE1CisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0dFVF9ORVRfU1RBVFMgCQkxNgorI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9QUk9YWV9VUERBVEVfUDJWCQkxNworI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9DT05GSUdfSVBBRERSIAkJMTgKKyNkZWZpbmUgUUxDTklDX0gyQ19PUENPREVfQ09ORklHX0xPT1BCQUNLCQkxOQorI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9QUk9YWV9TVE9QX0RPTkUJCTIwCisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0dFVF9MSU5LRVZFTlQgCQkyMQorI2RlZmluZSBRTENOSUNfQzJDX09QQ09ERQkJCQkyMgorI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9DT05GSUdfQlJJREdJTkcJCTIzCisjZGVmaW5lIFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19IV19MUk8gCQkyNAorI2RlZmluZSBRTENOSUNfSDJDX09QQ09ERV9MQVNUCQkJCTI1CisvKgorICogRmlybXdhcmUgLS0+IERyaXZlcgorICovCisKKyNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfU1RBUlQgCQkJMTI4CisjZGVmaW5lIFFMQ05JQ19DMkhfT1BDT0RFX0NPTkZJR19SU1NfUkVTUE9OU0UJCTEyOQorI2RlZmluZSBRTENOSUNfQzJIX09QQ09ERV9DT05GSUdfUlNTX1RCTF9SRVNQT05TRQkxMzAKKyNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfQ09ORklHX01BQ19SRVNQT05TRQkJMTMxCisjZGVmaW5lIFFMQ05JQ19DMkhfT1BDT0RFX0NPTkZJR19QUk9NSVNDVU9VU19SRVNQT05TRQkxMzIKKyNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfQ09ORklHX0wyX01BQ19SRVNQT05TRQkxMzMKKyNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfTFJPX0RFTEVURV9SRVNQT05TRQkJMTM0CisjZGVmaW5lIFFMQ05JQ19DMkhfT1BDT0RFX0xST19BRERfRkFJTFVSRV9SRVNQT05TRQkxMzUKKyNkZWZpbmUgUUxDTklDX0MySF9PUENPREVfR0VUX1NOTVBfU1RBVFMJCTEzNgorI2RlZmluZSBRTENOSUNfQzJIX09QQ09ERV9HRVRfRklOR0VSX1BSSU5UX1JFUExZCTEzNworI2RlZmluZSBRTENOSUNfQzJIX09QQ09ERV9JTlNUQUxMX0xJQ0VOU0VfUkVQTFkgCTEzOAorI2RlZmluZSBRTENOSUNfQzJIX09QQ09ERV9HRVRfTElDRU5TRV9DQVBBQklMSVRJRVNfUkVQTFkgMTM5CisjZGVmaW5lIFFMQ05JQ19DMkhfT1BDT0RFX0dFVF9ORVRfU1RBVFNfUkVTUE9OU0UJMTQwCisjZGVmaW5lIFFMQ05JQ19DMkhfT1BDT0RFX0dFVF9MSU5LRVZFTlRfUkVTUE9OU0UJMTQxCisjZGVmaW5lIFFMQ05JQ19DMkhfT1BDT0RFX0xBU1QJCQkJMTQyCisKKyNkZWZpbmUgVlBPUlRfTUlTU19NT0RFX0RST1AJCTAgLyogZHJvcCBhbGwgdW5tYXRjaGVkICovCisjZGVmaW5lIFZQT1JUX01JU1NfTU9ERV9BQ0NFUFRfQUxMCTEgLyogYWNjZXB0IGFsbCBwYWNrZXRzICovCisjZGVmaW5lIFZQT1JUX01JU1NfTU9ERV9BQ0NFUFRfTVVMVEkJMiAvKiBhY2NlcHQgdW5tYXRjaGVkIG11bHRpY2FzdCAqLworCisjZGVmaW5lIFFMQ05JQ19MUk9fUkVRVUVTVF9DTEVBTlVQCTQKKworLyogQ2FwYWJpbGl0ZXMgcmVjZWl2ZWQgKi8KKyNkZWZpbmUgUUxDTklDX0ZXX0NBUEFCSUxJVFlfQkRHCQkoMSA8PCA4KQorI2RlZmluZSBRTENOSUNfRldfQ0FQQUJJTElUWV9GVkxBTlRYCQkoMSA8PCA5KQorI2RlZmluZSBRTENOSUNfRldfQ0FQQUJJTElUWV9IV19MUk8JCSgxIDw8IDEwKQorCisvKiBtb2R1bGUgdHlwZXMgKi8KKyNkZWZpbmUgTElOS0VWRU5UX01PRFVMRV9OT1RfUFJFU0VOVAkJCTEKKyNkZWZpbmUgTElOS0VWRU5UX01PRFVMRV9PUFRJQ0FMX1VOS05PV04JCTIKKyNkZWZpbmUgTElOS0VWRU5UX01PRFVMRV9PUFRJQ0FMX1NSTFIJCQkzCisjZGVmaW5lIExJTktFVkVOVF9NT0RVTEVfT1BUSUNBTF9MUk0JCQk0CisjZGVmaW5lIExJTktFVkVOVF9NT0RVTEVfT1BUSUNBTF9TRlBfMUcgCQk1CisjZGVmaW5lIExJTktFVkVOVF9NT0RVTEVfVFdJTkFYX1VOU1VQUE9SVEVEX0NBQkxFCTYKKyNkZWZpbmUgTElOS0VWRU5UX01PRFVMRV9UV0lOQVhfVU5TVVBQT1JURURfQ0FCTEVMRU4JNworI2RlZmluZSBMSU5LRVZFTlRfTU9EVUxFX1RXSU5BWCAJCQk4CisKKyNkZWZpbmUgTElOS1NQRUVEXzEwR0JQUwkxMDAwMAorI2RlZmluZSBMSU5LU1BFRURfMUdCUFMgCTEwMDAKKyNkZWZpbmUgTElOS1NQRUVEXzEwME1CUFMJMTAwCisjZGVmaW5lIExJTktTUEVFRF8xME1CUFMJMTAKKworI2RlZmluZSBMSU5LU1BFRURfRU5DT0RFRF8xME1CUFMJMAorI2RlZmluZSBMSU5LU1BFRURfRU5DT0RFRF8xMDBNQlBTCTEKKyNkZWZpbmUgTElOS1NQRUVEX0VOQ09ERURfMUdCUFMgCTIKKworI2RlZmluZSBMSU5LRVZFTlRfQVVUT05FR19ESVNBQkxFRAkwCisjZGVmaW5lIExJTktFVkVOVF9BVVRPTkVHX0VOQUJMRUQJMQorCisjZGVmaW5lIExJTktFVkVOVF9IQUxGX0RVUExFWAkJMAorI2RlZmluZSBMSU5LRVZFTlRfRlVMTF9EVVBMRVgJCTEKKworI2RlZmluZSBMSU5LRVZFTlRfTElOS1NQRUVEX01CUFMJMAorI2RlZmluZSBMSU5LRVZFTlRfTElOS1NQRUVEX0VOQ09ERUQJMQorCisjZGVmaW5lIEFVVE9fRldfUkVTRVRfRU5BQkxFRAkweDAxCisvKiBmaXJtd2FyZSByZXNwb25zZSBoZWFkZXI6CisgKgk2Mzo1OCAtIG1lc3NhZ2UgdHlwZQorICoJNTc6NTYgLSBvd25lcgorICoJNTU6NTMgLSBkZXNjIGNvdW50CisgKgk1Mjo0OCAtIHJlc2VydmVkCisgKgk0Nzo0MCAtIGNvbXBsZXRpb24gaWQKKyAqCTM5OjMyIC0gb3Bjb2RlCisgKgkzMToxNiAtIGVycm9yIGNvZGUKKyAqCTE1OjAwIC0gcmVzZXJ2ZWQKKyAqLworI2RlZmluZSBxbGNuaWNfZ2V0X25pY19tc2dfb3Bjb2RlKG1zZ19oZHIpCVwKKwkoKG1zZ19oZHIgPj4gMzIpICYgMHhGRikKKworc3RydWN0IHFsY25pY19md19tc2cgeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXU2NCBoZHI7CisJCQl1NjQgYm9keVs3XTsKKwkJfTsKKwkJdTY0IHdvcmRzWzhdOworCX07Cit9OworCitzdHJ1Y3QgcWxjbmljX25pY19yZXEgeworCV9fbGU2NCBxaGRyOworCV9fbGU2NCByZXFfaGRyOworCV9fbGU2NCB3b3Jkc1s2XTsKK307CisKK3N0cnVjdCBxbGNuaWNfbWFjX3JlcSB7CisJdTggb3A7CisJdTggdGFnOworCXU4IG1hY19hZGRyWzZdOworfTsKKworI2RlZmluZSBRTENOSUNfTVNJX0VOQUJMRUQJCTB4MDIKKyNkZWZpbmUgUUxDTklDX01TSVhfRU5BQkxFRAkJMHgwNAorI2RlZmluZSBRTENOSUNfTFJPX0VOQUJMRUQJCTB4MDgKKyNkZWZpbmUgUUxDTklDX0JSSURHRV9FTkFCTEVEICAgICAgIAkwWDEwCisjZGVmaW5lIFFMQ05JQ19ESUFHX0VOQUJMRUQJCTB4MjAKKyNkZWZpbmUgUUxDTklDX0lTX01TSV9GQU1JTFkoYWRhcHRlcikgXAorCSgoYWRhcHRlciktPmZsYWdzICYgKFFMQ05JQ19NU0lfRU5BQkxFRCB8IFFMQ05JQ19NU0lYX0VOQUJMRUQpKQorCisjZGVmaW5lIE1TSVhfRU5UUklFU19QRVJfQURBUFRFUglOVU1fU1RTX0RFU0NfUklOR1MKKyNkZWZpbmUgUUxDTklDX01TSVhfVEJMX1NQQUNFCQk4MTkyCisjZGVmaW5lIFFMQ05JQ19QQ0lfUkVHX01TSVhfVEJMIAkweDQ0CisKKyNkZWZpbmUgUUxDTklDX05FVERFVl9XRUlHSFQJMTI4CisjZGVmaW5lIFFMQ05JQ19BREFQVEVSX1VQX01BR0lDIDc3NworCisjZGVmaW5lIF9fUUxDTklDX0ZXX0FUVEFDSEVECQkwCisjZGVmaW5lIF9fUUxDTklDX0RFVl9VUCAJCTEKKyNkZWZpbmUgX19RTENOSUNfUkVTRVRUSU5HCQkyCisjZGVmaW5lIF9fUUxDTklDX1NUQVJUX0ZXIAkJNAorCisjZGVmaW5lIFFMQ05JQ19JTlRFUlJVUFRfVEVTVAkJMQorI2RlZmluZSBRTENOSUNfTE9PUEJBQ0tfVEVTVAkJMgorCitzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgeworCXN0cnVjdCBxbGNuaWNfaGFyZHdhcmVfY29udGV4dCBhaHc7CisKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBsaXN0X2hlYWQgbWFjX2xpc3Q7CisKKwlzcGlubG9ja190IHR4X2NsZWFuX2xvY2s7CisKKwl1MTYgbnVtX3R4ZDsKKwl1MTYgbnVtX3J4ZDsKKwl1MTYgbnVtX2p1bWJvX3J4ZDsKKwl1MTYgbnVtX2xyb19yeGQ7CisKKwl1OCBtYXhfcmRzX3JpbmdzOworCXU4IG1heF9zZHNfcmluZ3M7CisJdTggZHJpdmVyX21pc21hdGNoOworCXU4IG1zaXhfc3VwcG9ydGVkOworCXU4IHJ4X2NzdW07CisJdTggcGNpX3VzaW5nX2RhYzsKKwl1OCBwb3J0bnVtOworCXU4IHBoeXNpY2FsX3BvcnQ7CisKKwl1OCBtY19lbmFibGVkOworCXU4IG1heF9tY19jb3VudDsKKwl1OCByc3Nfc3VwcG9ydGVkOworCXU4IHJzcnZkMTsKKwl1OCBmd193YWl0X2NudDsKKwl1OCBmd19mYWlsX2NudDsKKwl1OCB0eF90aW1lb19jbnQ7CisJdTggbmVlZF9md19yZXNldDsKKworCXU4IGhhc19saW5rX2V2ZW50czsKKwl1OCBmd190eXBlOworCXUxNiB0eF9jb250ZXh0X2lkOworCXUxNiBtdHU7CisJdTE2IGlzX3VwOworCisJdTE2IGxpbmtfc3BlZWQ7CisJdTE2IGxpbmtfZHVwbGV4OworCXUxNiBsaW5rX2F1dG9uZWc7CisJdTE2IG1vZHVsZV90eXBlOworCisJdTMyIGNhcGFiaWxpdGllczsKKwl1MzIgZmxhZ3M7CisJdTMyIGlycTsKKwl1MzIgdGVtcDsKKworCXUzMiBpbnRfdmVjX2JpdDsKKwl1MzIgaGVhcnRiaXQ7CisKKwl1OCBkZXZfc3RhdGU7CisJdTggZGlhZ190ZXN0OworCXU4IGRpYWdfY250OworCXU4IHJzcmQxOworCXUxNiByc3JkMjsKKworCXU4IG1hY19hZGRyW0VUSF9BTEVOXTsKKworCXN0cnVjdCBxbGNuaWNfYWRhcHRlcl9zdGF0cyBzdGF0czsKKworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0IHJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfaG9zdF90eF9yaW5nICp0eF9yaW5nOworCisJdm9pZCBfX2lvbWVtCSp0Z3RfbWFza19yZWc7CisJdm9pZCBfX2lvbWVtCSp0Z3Rfc3RhdHVzX3JlZzsKKwl2b2lkIF9faW9tZW0JKmNyYl9pbnRfc3RhdGVfcmVnOworCXZvaWQgX19pb21lbQkqaXNyX2ludF92ZWM7CisKKwlzdHJ1Y3QgbXNpeF9lbnRyeSBtc2l4X2VudHJpZXNbTVNJWF9FTlRSSUVTX1BFUl9BREFQVEVSXTsKKworCXN0cnVjdCBkZWxheWVkX3dvcmsgZndfd29yazsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCAgdHhfdGltZW91dF90YXNrOworCisJc3RydWN0IHFsY25pY19uaWNfaW50cl9jb2FsZXNjZSBjb2FsOworCisJdW5zaWduZWQgbG9uZyBzdGF0ZTsKKwlfX2xlMzIgZmlsZV9wcmRfb2ZmOwkvKkZpbGUgZncgcHJvZHVjdCBvZmZzZXQqLworCXUzMiBmd192ZXJzaW9uOworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Cit9OworCitpbnQgcWxjbmljX2Z3X2NtZF9xdWVyeV9waHkoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgcmVnLCB1MzIgKnZhbCk7CitpbnQgcWxjbmljX2Z3X2NtZF9zZXRfcGh5KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIHJlZywgdTMyIHZhbCk7CisKK3UzMiBxbGNuaWNfaHdfcmVhZF93eF8yTShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHVsb25nIG9mZik7CitpbnQgcWxjbmljX2h3X3dyaXRlX3d4XzJNKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqLCB1bG9uZyBvZmYsIHUzMiBkYXRhKTsKK2ludCBxbGNuaWNfcGNpX21lbV93cml0ZV8yTShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKiwgdTY0IG9mZiwgdTY0IGRhdGEpOworaW50IHFsY25pY19wY2lfbWVtX3JlYWRfMk0oc3RydWN0IHFsY25pY19hZGFwdGVyICosIHU2NCBvZmYsIHU2NCAqZGF0YSk7CisKKyNkZWZpbmUgUUxDUkQzMihhZGFwdGVyLCBvZmYpIFwKKwkocWxjbmljX2h3X3JlYWRfd3hfMk0oYWRhcHRlciwgb2ZmKSkKKyNkZWZpbmUgUUxDV1IzMihhZGFwdGVyLCBvZmYsIHZhbCkgXAorCShxbGNuaWNfaHdfd3JpdGVfd3hfMk0oYWRhcHRlciwgb2ZmLCB2YWwpKQorCitpbnQgcWxjbmljX3BjaWVfc2VtX2xvY2soc3RydWN0IHFsY25pY19hZGFwdGVyICosIGludCwgdTMyKTsKK3ZvaWQgcWxjbmljX3BjaWVfc2VtX3VubG9jayhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKiwgaW50KTsKKworI2RlZmluZSBxbGNuaWNfcm9tX2xvY2soYSkJXAorCXFsY25pY19wY2llX3NlbV9sb2NrKChhKSwgMiwgUUxDTklDX1JPTV9MT0NLX0lEKQorI2RlZmluZSBxbGNuaWNfcm9tX3VubG9jayhhKQlcCisJcWxjbmljX3BjaWVfc2VtX3VubG9jaygoYSksIDIpCisjZGVmaW5lIHFsY25pY19waHlfbG9jayhhKQlcCisJcWxjbmljX3BjaWVfc2VtX2xvY2soKGEpLCAzLCBRTENOSUNfUEhZX0xPQ0tfSUQpCisjZGVmaW5lIHFsY25pY19waHlfdW5sb2NrKGEpCVwKKwlxbGNuaWNfcGNpZV9zZW1fdW5sb2NrKChhKSwgMykKKyNkZWZpbmUgcWxjbmljX2FwaV9sb2NrKGEpCVwKKwlxbGNuaWNfcGNpZV9zZW1fbG9jaygoYSksIDUsIDApCisjZGVmaW5lIHFsY25pY19hcGlfdW5sb2NrKGEpCVwKKwlxbGNuaWNfcGNpZV9zZW1fdW5sb2NrKChhKSwgNSkKKyNkZWZpbmUgcWxjbmljX3N3X2xvY2soYSkJXAorCXFsY25pY19wY2llX3NlbV9sb2NrKChhKSwgNiwgMCkKKyNkZWZpbmUgcWxjbmljX3N3X3VubG9jayhhKQlcCisJcWxjbmljX3BjaWVfc2VtX3VubG9jaygoYSksIDYpCisjZGVmaW5lIGNyYl93aW5fbG9jayhhKQlcCisJcWxjbmljX3BjaWVfc2VtX2xvY2soKGEpLCA3LCBRTENOSUNfQ1JCX1dJTl9MT0NLX0lEKQorI2RlZmluZSBjcmJfd2luX3VubG9jayhhKQlcCisJcWxjbmljX3BjaWVfc2VtX3VubG9jaygoYSksIDcpCisKK2ludCBxbGNuaWNfZ2V0X2JvYXJkX2luZm8oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKK2ludCBxbGNuaWNfd29sX3N1cHBvcnRlZChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IHFsY25pY19jb25maWdfbGVkKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIHN0YXRlLCB1MzIgcmF0ZSk7CisKKy8qIEZ1bmN0aW9ucyBmcm9tIHFsY25pY19pbml0LmMgKi8KK2ludCBxbGNuaWNfcGhhbnRvbV9pbml0KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgcWxjbmljX2xvYWRfZmlybXdhcmUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKK2ludCBxbGNuaWNfbmVlZF9md19yZXNldChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBxbGNuaWNfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBxbGNuaWNfcmVsZWFzZV9maXJtd2FyZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IHFsY25pY19waW5pdF9mcm9tX3JvbShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOworCitpbnQgcWxjbmljX3JvbV9mYXN0X3JlYWQoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwgaW50ICp2YWxwKTsKK2ludCBxbGNuaWNfcm9tX2Zhc3RfcmVhZF93b3JkcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLAorCQkJCXU4ICpieXRlcywgc2l6ZV90IHNpemUpOworaW50IHFsY25pY19hbGxvY19zd19yZXNvdXJjZXMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgcWxjbmljX2ZyZWVfc3dfcmVzb3VyY2VzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CisKK3ZvaWQgX19pb21lbSAqcWxjbmljX2dldF9pb2FkZHIoc3RydWN0IHFsY25pY19hZGFwdGVyICosIHUzMik7CisKK2ludCBxbGNuaWNfYWxsb2NfaHdfcmVzb3VyY2VzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIHFsY25pY19mcmVlX2h3X3Jlc291cmNlcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOworCit2b2lkIHFsY25pY19yZWxlYXNlX3J4X2J1ZmZlcnMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgcWxjbmljX3JlbGVhc2VfdHhfYnVmZmVycyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOworCitpbnQgcWxjbmljX2luaXRfZmlybXdhcmUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgcWxjbmljX3dhdGNoZG9nX3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgcWxjbmljX3Bvc3RfcnhfYnVmZmVycyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiByaW5naWQsCisJCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcpOworaW50IHFsY25pY19wcm9jZXNzX3Jjdl9yaW5nKHN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcsIGludCBtYXgpOwordm9pZCBxbGNuaWNfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwordm9pZCBxbGNuaWNfZnJlZV9tYWNfbGlzdChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IHFsY25pY19uaWNfc2V0X3Byb21pc2Moc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIpOworaW50IHFsY25pY19jb25maWdfaW50cl9jb2FsZXNjZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IHFsY25pY19jb25maWdfcnNzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IGVuYWJsZSk7CitpbnQgcWxjbmljX2NvbmZpZ19pcGFkZHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgaXAsIGludCBjbWQpOworaW50IHFsY25pY19saW5rZXZlbnRfcmVxdWVzdChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBlbmFibGUpOwordm9pZCBxbGNuaWNfYWR2ZXJ0X2xpbmtfY2hhbmdlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IGxpbmt1cCk7CisKK2ludCBxbGNuaWNfZndfY21kX3NldF9tdHUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBpbnQgbXR1KTsKK2ludCBxbGNuaWNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgbmV3X210dSk7CitpbnQgcWxjbmljX2NvbmZpZ19od19scm8oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBpbnQgZW5hYmxlKTsKK2ludCBxbGNuaWNfY29uZmlnX2JyaWRnZWRfbW9kZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBlbmFibGUpOworaW50IHFsY25pY19zZW5kX2xyb19jbGVhbnVwKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIHFsY25pY191cGRhdGVfY21kX3Byb2R1Y2VyKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwkJc3RydWN0IHFsY25pY19ob3N0X3R4X3JpbmcgKnR4X3JpbmcpOworaW50IHFsY25pY19nZXRfbWFjX2FkZHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1NjQgKm1hYyk7Cit2b2lkIHFsY25pY19jbGVhcl9pbGJfbW9kZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IHFsY25pY19zZXRfaWxiX21vZGUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKKworLyogRnVuY3Rpb25zIGZyb20gcWxjbmljX21haW4uYyAqLworaW50IHFsY25pY19yZXNldF9jb250ZXh0KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqKTsKK3UzMiBxbGNuaWNfaXNzdWVfY21kKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwl1MzIgcGNpX2ZuLCB1MzIgdmVyc2lvbiwgdTMyIGFyZzEsIHUzMiBhcmcyLCB1MzIgYXJnMywgdTMyIGNtZCk7Cit2b2lkIHFsY25pY19kaWFnX2ZyZWVfcmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBtYXhfc2RzX3JpbmdzKTsKK2ludCBxbGNuaWNfZGlhZ19hbGxvY19yZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHRlc3QpOworaW50IHFsY25pY19jaGVja19sb29wYmFja19idWZmKHVuc2lnbmVkIGNoYXIgKmRhdGEpOworbmV0ZGV2X3R4X3QgcWxjbmljX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7Cit2b2lkIHFsY25pY19wcm9jZXNzX3Jjdl9yaW5nX2RpYWcoc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZyk7CisKKy8qCisgKiBRTE9HSUMgQm9hcmQgaW5mb3JtYXRpb24KKyAqLworCisjZGVmaW5lIFFMQ05JQ19NQVhfQk9BUkRfTkFNRV9MRU4gMTAwCitzdHJ1Y3QgcWxjbmljX2JyZGluZm8geworCXVuc2lnbmVkIHNob3J0ICB2ZW5kb3I7CisJdW5zaWduZWQgc2hvcnQgIGRldmljZTsKKwl1bnNpZ25lZCBzaG9ydCAgc3ViX3ZlbmRvcjsKKwl1bnNpZ25lZCBzaG9ydCAgc3ViX2RldmljZTsKKwljaGFyIHNob3J0X25hbWVbUUxDTklDX01BWF9CT0FSRF9OQU1FX0xFTl07Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHFsY25pY19icmRpbmZvIHFsY25pY19ib2FyZHNbXSA9IHsKKwl7MHgxMDc3LCAweDgwMjAsIDB4MTA3NywgMHgyMDMsCisJCSI4MjAwIFNlcmllcyBTaW5nbGUgUG9ydCAxMEdiRSBDb252ZXJnZWQgTmV0d29yayBBZGFwdGVyIFwKKwkJKFRDUC9JUCBOZXR3b3JraW5nKSJ9LAorCXsweDEwNzcsIDB4ODAyMCwgMHgxMDc3LCAweDIwNywKKwkJIjgyMDAgU2VyaWVzIER1YWwgUG9ydCAxMEdiRSBDb252ZXJnZWQgTmV0d29yayBBZGFwdGVyIFwKKwkJKFRDUC9JUCBOZXR3b3JraW5nKSJ9LAorCXsweDEwNzcsIDB4ODAyMCwgMHgxMDc3LCAweDIwYiwKKwkJIjMyMDAgU2VyaWVzIER1YWwgUG9ydCAxMEdiIEludGVsbGlnZW50IEV0aGVybmV0IEFkYXB0ZXIifSwKKwl7MHgxMDc3LCAweDgwMjAsIDB4MTA3NywgMHgyMGMsCisJCSIzMjAwIFNlcmllcyBRdWFkIFBvcnQgMUdiIEludGVsbGlnZW50IEV0aGVybmV0IEFkYXB0ZXIifSwKKwl7MHgxMDc3LCAweDgwMjAsIDB4MTA3NywgMHgyMGYsCisJCSIzMjAwIFNlcmllcyBTaW5nbGUgUG9ydCAxMEdiIEludGVsbGlnZW50IEV0aGVybmV0IEFkYXB0ZXIifSwKKwl7MHgxMDc3LCAweDgwMjAsIDB4MCwgMHgwLCAiY0xPTTgyMTQgMS8xMEdiRSBDb250cm9sbGVyIn0sCit9OworCisjZGVmaW5lIE5VTV9TVVBQT1JURURfQk9BUkRTIEFSUkFZX1NJWkUocWxjbmljX2JvYXJkcykKKworc3RhdGljIGlubGluZSB1MzIgcWxjbmljX3R4X2F2YWlsKHN0cnVjdCBxbGNuaWNfaG9zdF90eF9yaW5nICp0eF9yaW5nKQoreworCXNtcF9tYigpOworCWlmICh0eF9yaW5nLT5wcm9kdWNlciA8IHR4X3JpbmctPnN3X2NvbnN1bWVyKQorCQlyZXR1cm4gdHhfcmluZy0+c3dfY29uc3VtZXIgLSB0eF9yaW5nLT5wcm9kdWNlcjsKKwllbHNlCisJCXJldHVybiB0eF9yaW5nLT5zd19jb25zdW1lciArIHR4X3JpbmctPm51bV9kZXNjIC0KKwkJCQl0eF9yaW5nLT5wcm9kdWNlcjsKK30KKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBxbGNuaWNfZXRodG9vbF9vcHM7CisKKyNlbmRpZgkJCQkvKiBfX1FMQ05JQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19jdHguYyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfY3R4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE2YTM5OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfY3R4LmMKQEAgLTAsMCArMSw1MzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSBRTG9naWMgQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgorICogaW4gdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKyAqCisgKi8KKworI2luY2x1ZGUgInFsY25pYy5oIgorCitzdGF0aWMgdTMyCitxbGNuaWNfcG9sbF9yc3Aoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiByc3A7CisJaW50IHRpbWVvdXQgPSAwOworCisJZG8geworCQkvKiBnaXZlIGF0bGVhc3QgMW1zIGZvciBmaXJtd2FyZSB0byByZXNwb25kICovCisJCW1zbGVlcCgxKTsKKworCQlpZiAoKyt0aW1lb3V0ID4gUUxDTklDX09TX0NSQl9SRVRSWV9DT1VOVCkKKwkJCXJldHVybiBRTENOSUNfQ0RSUF9SU1BfVElNRU9VVDsKKworCQlyc3AgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19DRFJQX0NSQl9PRkZTRVQpOworCX0gd2hpbGUgKCFRTENOSUNfQ0RSUF9JU19SU1AocnNwKSk7CisKKwlyZXR1cm4gcnNwOworfQorCit1MzIKK3FsY25pY19pc3N1ZV9jbWQoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCXUzMiBwY2lfZm4sIHUzMiB2ZXJzaW9uLCB1MzIgYXJnMSwgdTMyIGFyZzIsIHUzMiBhcmczLCB1MzIgY21kKQoreworCXUzMiByc3A7CisJdTMyIHNpZ25hdHVyZTsKKwl1MzIgcmNvZGUgPSBRTENOSUNfUkNPREVfU1VDQ0VTUzsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlzaWduYXR1cmUgPSBRTENOSUNfQ0RSUF9TSUdOQVRVUkVfTUFLRShwY2lfZm4sIHZlcnNpb24pOworCisJLyogQWNxdWlyZSBzZW1hcGhvcmUgYmVmb3JlIGFjY2Vzc2luZyBDUkIgKi8KKwlpZiAocWxjbmljX2FwaV9sb2NrKGFkYXB0ZXIpKQorCQlyZXR1cm4gUUxDTklDX1JDT0RFX1RJTUVPVVQ7CisKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19TSUdOX0NSQl9PRkZTRVQsIHNpZ25hdHVyZSk7CisJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfQVJHMV9DUkJfT0ZGU0VULCBhcmcxKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19BUkcyX0NSQl9PRkZTRVQsIGFyZzIpOworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0FSRzNfQ1JCX09GRlNFVCwgYXJnMyk7CisJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfQ0RSUF9DUkJfT0ZGU0VULCBRTENOSUNfQ0RSUF9GT1JNX0NNRChjbWQpKTsKKworCXJzcCA9IHFsY25pY19wb2xsX3JzcChhZGFwdGVyKTsKKworCWlmIChyc3AgPT0gUUxDTklDX0NEUlBfUlNQX1RJTUVPVVQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2FyZCByZXNwb25zZSB0aW1lb3V0LlxuIik7CisJCXJjb2RlID0gUUxDTklDX1JDT0RFX1RJTUVPVVQ7CisJfSBlbHNlIGlmIChyc3AgPT0gUUxDTklDX0NEUlBfUlNQX0ZBSUwpIHsKKwkJcmNvZGUgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19BUkcxX0NSQl9PRkZTRVQpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgY2FyZCByZXNwb25zZSBjb2RlOjB4JXhcbiIsCisJCQkJcmNvZGUpOworCX0KKworCS8qIFJlbGVhc2Ugc2VtYXBob3JlICovCisJcWxjbmljX2FwaV91bmxvY2soYWRhcHRlcik7CisKKwlyZXR1cm4gcmNvZGU7Cit9CisKK2ludAorcWxjbmljX2Z3X2NtZF9zZXRfbXR1KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IG10dSkKK3sKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisKKwlpZiAocmVjdl9jdHgtPnN0YXRlID09IFFMQ05JQ19IT1NUX0NUWF9TVEFURV9BQ1RJVkUpIHsKKwkJaWYgKHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKKwkJCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQkJUUxDSEFMX1ZFUlNJT04sCisJCQkJcmVjdl9jdHgtPmNvbnRleHRfaWQsCisJCQkJbXR1LAorCQkJCTAsCisJCQkJUUxDTklDX0NEUlBfQ01EX1NFVF9NVFUpKSB7CisKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIkZhaWxlZCB0byBzZXQgbXR1XG4iKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19md19jbWRfY3JlYXRlX3J4X2N0eChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdm9pZCAqYWRkcjsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RycV9yeF9jdHggKnBycTsKKwlzdHJ1Y3QgcWxjbmljX2NhcmRyc3BfcnhfY3R4ICpwcnNwOworCXN0cnVjdCBxbGNuaWNfaG9zdHJxX3Jkc19yaW5nICpwcnFfcmRzOworCXN0cnVjdCBxbGNuaWNfaG9zdHJxX3Nkc19yaW5nICpwcnFfc2RzOworCXN0cnVjdCBxbGNuaWNfY2FyZHJzcF9yZHNfcmluZyAqcHJzcF9yZHM7CisJc3RydWN0IHFsY25pY19jYXJkcnNwX3Nkc19yaW5nICpwcnNwX3NkczsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOworCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisKKwlkbWFfYWRkcl90IGhvc3RycV9waHlzX2FkZHIsIGNhcmRyc3BfcGh5c19hZGRyOworCXU2NCBwaHlzX2FkZHI7CisKKwlpbnQgaSwgbnJkc19yaW5ncywgbnNkc19yaW5nczsKKwlzaXplX3QgcnFfc2l6ZSwgcnNwX3NpemU7CisJdTMyIGNhcCwgcmVnLCB2YWw7CisJaW50IGVycjsKKworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKworCW5yZHNfcmluZ3MgPSBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOworCW5zZHNfcmluZ3MgPSBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOworCisJcnFfc2l6ZSA9CisJCVNJWkVPRl9IT1NUUlFfUlgoc3RydWN0IHFsY25pY19ob3N0cnFfcnhfY3R4LCBucmRzX3JpbmdzLAorCQkJCQkJbnNkc19yaW5ncyk7CisJcnNwX3NpemUgPQorCQlTSVpFT0ZfQ0FSRFJTUF9SWChzdHJ1Y3QgcWxjbmljX2NhcmRyc3BfcnhfY3R4LCBucmRzX3JpbmdzLAorCQkJCQkJbnNkc19yaW5ncyk7CisKKwlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQlycV9zaXplLCAmaG9zdHJxX3BoeXNfYWRkcik7CisJaWYgKGFkZHIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJcHJxID0gKHN0cnVjdCBxbGNuaWNfaG9zdHJxX3J4X2N0eCAqKWFkZHI7CisKKwlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCXJzcF9zaXplLCAmY2FyZHJzcF9waHlzX2FkZHIpOworCWlmIChhZGRyID09IE5VTEwpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV9ycTsKKwl9CisJcHJzcCA9IChzdHJ1Y3QgcWxjbmljX2NhcmRyc3BfcnhfY3R4ICopYWRkcjsKKworCXBycS0+aG9zdF9yc3BfZG1hX2FkZHIgPSBjcHVfdG9fbGU2NChjYXJkcnNwX3BoeXNfYWRkcik7CisKKwljYXAgPSAoUUxDTklDX0NBUDBfTEVHQUNZX0NPTlRFWFQgfCBRTENOSUNfQ0FQMF9MRUdBQ1lfTU4pOworCWNhcCB8PSAoUUxDTklDX0NBUDBfSlVNQk9fQ09OVElHVU9VUyB8IFFMQ05JQ19DQVAwX0xST19DT05USUdVT1VTKTsKKworCXBycS0+Y2FwYWJpbGl0aWVzWzBdID0gY3B1X3RvX2xlMzIoY2FwKTsKKwlwcnEtPmhvc3RfaW50X2NyYl9tb2RlID0KKwkJY3B1X3RvX2xlMzIoUUxDTklDX0hPU1RfSU5UX0NSQl9NT0RFX1NIQVJFRCk7CisJcHJxLT5ob3N0X3Jkc19jcmJfbW9kZSA9CisJCWNwdV90b19sZTMyKFFMQ05JQ19IT1NUX1JEU19DUkJfTU9ERV9VTklRVUUpOworCisJcHJxLT5udW1fcmRzX3JpbmdzID0gY3B1X3RvX2xlMTYobnJkc19yaW5ncyk7CisJcHJxLT5udW1fc2RzX3JpbmdzID0gY3B1X3RvX2xlMTYobnNkc19yaW5ncyk7CisJcHJxLT5yZHNfcmluZ19vZmZzZXQgPSBjcHVfdG9fbGUzMigwKTsKKworCXZhbCA9IGxlMzJfdG9fY3B1KHBycS0+cmRzX3Jpbmdfb2Zmc2V0KSArCisJCShzaXplb2Yoc3RydWN0IHFsY25pY19ob3N0cnFfcmRzX3JpbmcpICogbnJkc19yaW5ncyk7CisJcHJxLT5zZHNfcmluZ19vZmZzZXQgPSBjcHVfdG9fbGUzMih2YWwpOworCisJcHJxX3JkcyA9IChzdHJ1Y3QgcWxjbmljX2hvc3RycV9yZHNfcmluZyAqKShwcnEtPmRhdGEgKworCQkJbGUzMl90b19jcHUocHJxLT5yZHNfcmluZ19vZmZzZXQpKTsKKworCWZvciAoaSA9IDA7IGkgPCBucmRzX3JpbmdzOyBpKyspIHsKKworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW2ldOworCisJCXBycV9yZHNbaV0uaG9zdF9waHlzX2FkZHIgPSBjcHVfdG9fbGU2NChyZHNfcmluZy0+cGh5c19hZGRyKTsKKwkJcHJxX3Jkc1tpXS5yaW5nX3NpemUgPSBjcHVfdG9fbGUzMihyZHNfcmluZy0+bnVtX2Rlc2MpOworCQlwcnFfcmRzW2ldLnJpbmdfa2luZCA9IGNwdV90b19sZTMyKGkpOworCQlwcnFfcmRzW2ldLmJ1ZmZfc2l6ZSA9IGNwdV90b19sZTY0KHJkc19yaW5nLT5kbWFfc2l6ZSk7CisJfQorCisJcHJxX3NkcyA9IChzdHJ1Y3QgcWxjbmljX2hvc3RycV9zZHNfcmluZyAqKShwcnEtPmRhdGEgKworCQkJbGUzMl90b19jcHUocHJxLT5zZHNfcmluZ19vZmZzZXQpKTsKKworCWZvciAoaSA9IDA7IGkgPCBuc2RzX3JpbmdzOyBpKyspIHsKKworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW2ldOworCisJCXBycV9zZHNbaV0uaG9zdF9waHlzX2FkZHIgPSBjcHVfdG9fbGU2NChzZHNfcmluZy0+cGh5c19hZGRyKTsKKwkJcHJxX3Nkc1tpXS5yaW5nX3NpemUgPSBjcHVfdG9fbGUzMihzZHNfcmluZy0+bnVtX2Rlc2MpOworCQlwcnFfc2RzW2ldLm1zaV9pbmRleCA9IGNwdV90b19sZTE2KGkpOworCX0KKworCXBoeXNfYWRkciA9IGhvc3RycV9waHlzX2FkZHI7CisJZXJyID0gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAorCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJUUxDSEFMX1ZFUlNJT04sCisJCQkodTMyKShwaHlzX2FkZHIgPj4gMzIpLAorCQkJKHUzMikocGh5c19hZGRyICYgMHhmZmZmZmZmZiksCisJCQlycV9zaXplLAorCQkJUUxDTklDX0NEUlBfQ01EX0NSRUFURV9SWF9DVFgpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIkZhaWxlZCB0byBjcmVhdGUgcnggY3R4IGluIGZpcm13YXJlJWRcbiIsIGVycik7CisJCWdvdG8gb3V0X2ZyZWVfcnNwOworCX0KKworCisJcHJzcF9yZHMgPSAoKHN0cnVjdCBxbGNuaWNfY2FyZHJzcF9yZHNfcmluZyAqKQorCQkJICZwcnNwLT5kYXRhW2xlMzJfdG9fY3B1KHByc3AtPnJkc19yaW5nX29mZnNldCldKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShwcnNwLT5udW1fcmRzX3JpbmdzKTsgaSsrKSB7CisJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbaV07CisKKwkJcmVnID0gbGUzMl90b19jcHUocHJzcF9yZHNbaV0uaG9zdF9wcm9kdWNlcl9jcmIpOworCQlyZHNfcmluZy0+Y3JiX3Jjdl9wcm9kdWNlciA9IHFsY25pY19nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQkJUUxDTklDX1JFRyhyZWcgLSAweDIwMCkpOworCX0KKworCXByc3Bfc2RzID0gKChzdHJ1Y3QgcWxjbmljX2NhcmRyc3Bfc2RzX3JpbmcgKikKKwkJCSZwcnNwLT5kYXRhW2xlMzJfdG9fY3B1KHByc3AtPnNkc19yaW5nX29mZnNldCldKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdShwcnNwLT5udW1fc2RzX3JpbmdzKTsgaSsrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbaV07CisKKwkJcmVnID0gbGUzMl90b19jcHUocHJzcF9zZHNbaV0uaG9zdF9jb25zdW1lcl9jcmIpOworCQlzZHNfcmluZy0+Y3JiX3N0c19jb25zdW1lciA9IHFsY25pY19nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQkJUUxDTklDX1JFRyhyZWcgLSAweDIwMCkpOworCisJCXJlZyA9IGxlMzJfdG9fY3B1KHByc3Bfc2RzW2ldLmludGVycnVwdF9jcmIpOworCQlzZHNfcmluZy0+Y3JiX2ludHJfbWFzayA9IHFsY25pY19nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQkJUUxDTklDX1JFRyhyZWcgLSAweDIwMCkpOworCX0KKworCXJlY3ZfY3R4LT5zdGF0ZSA9IGxlMzJfdG9fY3B1KHByc3AtPmhvc3RfY3R4X3N0YXRlKTsKKwlyZWN2X2N0eC0+Y29udGV4dF9pZCA9IGxlMTZfdG9fY3B1KHByc3AtPmNvbnRleHRfaWQpOworCXJlY3ZfY3R4LT52aXJ0X3BvcnQgPSBwcnNwLT52aXJ0X3BvcnQ7CisKK291dF9mcmVlX3JzcDoKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHJzcF9zaXplLCBwcnNwLCBjYXJkcnNwX3BoeXNfYWRkcik7CitvdXRfZnJlZV9ycToKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHJxX3NpemUsIHBycSwgaG9zdHJxX3BoeXNfYWRkcik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19md19jbWRfZGVzdHJveV9yeF9jdHgoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKworCWlmIChxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCisJCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlRTENIQUxfVkVSU0lPTiwKKwkJCXJlY3ZfY3R4LT5jb250ZXh0X2lkLAorCQkJUUxDTklDX0RFU1RST1lfQ1RYX1JFU0VULAorCQkJMCwKKwkJCVFMQ05JQ19DRFJQX0NNRF9ERVNUUk9ZX1JYX0NUWCkpIHsKKworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIGRlc3Ryb3kgcnggY3R4IGluIGZpcm13YXJlXG4iKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19md19jbWRfY3JlYXRlX3R4X2N0eChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHFsY25pY19ob3N0cnFfdHhfY3R4CSpwcnE7CisJc3RydWN0IHFsY25pY19ob3N0cnFfY2RzX3JpbmcJKnBycV9jZHM7CisJc3RydWN0IHFsY25pY19jYXJkcnNwX3R4X2N0eAkqcHJzcDsKKwl2b2lkCSpycV9hZGRyLCAqcnNwX2FkZHI7CisJc2l6ZV90CXJxX3NpemUsIHJzcF9zaXplOworCXUzMgl0ZW1wOworCWludAllcnI7CisJdTY0CXBoeXNfYWRkcjsKKwlkbWFfYWRkcl90CXJxX3BoeXNfYWRkciwgcnNwX3BoeXNfYWRkcjsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyAqdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmc7CisKKwlycV9zaXplID0gU0laRU9GX0hPU1RSUV9UWChzdHJ1Y3QgcWxjbmljX2hvc3RycV90eF9jdHgpOworCXJxX2FkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQlycV9zaXplLCAmcnFfcGh5c19hZGRyKTsKKwlpZiAoIXJxX2FkZHIpCisJCXJldHVybiAtRU5PTUVNOworCisJcnNwX3NpemUgPSBTSVpFT0ZfQ0FSRFJTUF9UWChzdHJ1Y3QgcWxjbmljX2NhcmRyc3BfdHhfY3R4KTsKKwlyc3BfYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCXJzcF9zaXplLCAmcnNwX3BoeXNfYWRkcik7CisJaWYgKCFyc3BfYWRkcikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dF9mcmVlX3JxOworCX0KKworCW1lbXNldChycV9hZGRyLCAwLCBycV9zaXplKTsKKwlwcnEgPSAoc3RydWN0IHFsY25pY19ob3N0cnFfdHhfY3R4ICopcnFfYWRkcjsKKworCW1lbXNldChyc3BfYWRkciwgMCwgcnNwX3NpemUpOworCXByc3AgPSAoc3RydWN0IHFsY25pY19jYXJkcnNwX3R4X2N0eCAqKXJzcF9hZGRyOworCisJcHJxLT5ob3N0X3JzcF9kbWFfYWRkciA9IGNwdV90b19sZTY0KHJzcF9waHlzX2FkZHIpOworCisJdGVtcCA9IChRTENOSUNfQ0FQMF9MRUdBQ1lfQ09OVEVYVCB8IFFMQ05JQ19DQVAwX0xFR0FDWV9NTiB8CisJCQkJCVFMQ05JQ19DQVAwX0xTTyk7CisJcHJxLT5jYXBhYmlsaXRpZXNbMF0gPSBjcHVfdG9fbGUzMih0ZW1wKTsKKworCXBycS0+aG9zdF9pbnRfY3JiX21vZGUgPQorCQljcHVfdG9fbGUzMihRTENOSUNfSE9TVF9JTlRfQ1JCX01PREVfU0hBUkVEKTsKKworCXBycS0+aW50ZXJydXB0X2N0bCA9IDA7CisJcHJxLT5tc2lfaW5kZXggPSAwOworCXBycS0+Y21kX2NvbnNfZG1hX2FkZHIgPSBjcHVfdG9fbGU2NCh0eF9yaW5nLT5od19jb25zX3BoeXNfYWRkcik7CisKKwlwcnFfY2RzID0gJnBycS0+Y2RzX3Jpbmc7CisKKwlwcnFfY2RzLT5ob3N0X3BoeXNfYWRkciA9IGNwdV90b19sZTY0KHR4X3JpbmctPnBoeXNfYWRkcik7CisJcHJxX2Nkcy0+cmluZ19zaXplID0gY3B1X3RvX2xlMzIodHhfcmluZy0+bnVtX2Rlc2MpOworCisJcGh5c19hZGRyID0gcnFfcGh5c19hZGRyOworCWVyciA9IHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKKwkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKKwkJCVFMQ0hBTF9WRVJTSU9OLAorCQkJKHUzMikocGh5c19hZGRyID4+IDMyKSwKKwkJCSgodTMyKXBoeXNfYWRkciAmIDB4ZmZmZmZmZmYpLAorCQkJcnFfc2l6ZSwKKwkJCVFMQ05JQ19DRFJQX0NNRF9DUkVBVEVfVFhfQ1RYKTsKKworCWlmIChlcnIgPT0gUUxDTklDX1JDT0RFX1NVQ0NFU1MpIHsKKwkJdGVtcCA9IGxlMzJfdG9fY3B1KHByc3AtPmNkc19yaW5nLmhvc3RfcHJvZHVjZXJfY3JiKTsKKwkJdHhfcmluZy0+Y3JiX2NtZF9wcm9kdWNlciA9IHFsY25pY19nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQkJUUxDTklDX1JFRyh0ZW1wIC0gMHgyMDApKTsKKworCQlhZGFwdGVyLT50eF9jb250ZXh0X2lkID0KKwkJCWxlMTZfdG9fY3B1KHByc3AtPmNvbnRleHRfaWQpOworCX0gZWxzZSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJGYWlsZWQgdG8gY3JlYXRlIHR4IGN0eCBpbiBmaXJtd2FyZSVkXG4iLCBlcnIpOworCQllcnIgPSAtRUlPOworCX0KKworCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgcnNwX3NpemUsIHJzcF9hZGRyLCByc3BfcGh5c19hZGRyKTsKKworb3V0X2ZyZWVfcnE6CisJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBycV9zaXplLCBycV9hZGRyLCBycV9waHlzX2FkZHIpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19md19jbWRfZGVzdHJveV90eF9jdHgoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChxbGNuaWNfaXNzdWVfY21kKGFkYXB0ZXIsCisJCQlhZGFwdGVyLT5haHcucGNpX2Z1bmMsCisJCQlRTENIQUxfVkVSU0lPTiwKKwkJCWFkYXB0ZXItPnR4X2NvbnRleHRfaWQsCisJCQlRTENOSUNfREVTVFJPWV9DVFhfUkVTRVQsCisJCQkwLAorCQkJUUxDTklDX0NEUlBfQ01EX0RFU1RST1lfVFhfQ1RYKSkgeworCisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJGYWlsZWQgdG8gZGVzdHJveSB0eCBjdHggaW4gZmlybXdhcmVcbiIpOworCX0KK30KKworaW50CitxbGNuaWNfZndfY21kX3F1ZXJ5X3BoeShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHUzMiByZWcsIHUzMiAqdmFsKQoreworCisJaWYgKHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwKKwkJCWFkYXB0ZXItPmFody5wY2lfZnVuYywKKwkJCVFMQ0hBTF9WRVJTSU9OLAorCQkJcmVnLAorCQkJMCwKKwkJCTAsCisJCQlRTENOSUNfQ0RSUF9DTURfUkVBRF9QSFkpKSB7CisKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0FSRzFfQ1JCX09GRlNFVCk7Cit9CisKK2ludAorcWxjbmljX2Z3X2NtZF9zZXRfcGh5KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIHJlZywgdTMyIHZhbCkKK3sKKwlyZXR1cm4gcWxjbmljX2lzc3VlX2NtZChhZGFwdGVyLAorCQkJYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJUUxDSEFMX1ZFUlNJT04sCisJCQlyZWcsCisJCQl2YWwsCisJCQkwLAorCQkJUUxDTklDX0NEUlBfQ01EX1dSSVRFX1BIWSk7Cit9CisKK2ludCBxbGNuaWNfYWxsb2NfaHdfcmVzb3VyY2VzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl2b2lkICphZGRyOworCWludCBlcnI7CisJaW50IHJpbmc7CisJc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7CisJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyAqdHhfcmluZzsKKworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nOworCisJdHhfcmluZy0+aHdfY29uc3VtZXIgPSAoX19sZTMyICopcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgc2l6ZW9mKHUzMiksCisJCQkJCQkmdHhfcmluZy0+aHdfY29uc19waHlzX2FkZHIpOworCWlmICh0eF9yaW5nLT5od19jb25zdW1lciA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSB0eCBjb25zdW1lclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwkqKHR4X3JpbmctPmh3X2NvbnN1bWVyKSA9IDA7CisKKwkvKiBjbWQgZGVzYyByaW5nICovCisJYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIFRYX0RFU0NfUklOR1NJWkUodHhfcmluZyksCisJCQkmdHhfcmluZy0+cGh5c19hZGRyKTsKKworCWlmIChhZGRyID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHR4IGRlc2MgcmluZ1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXR4X3JpbmctPmRlc2NfaGVhZCA9IChzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKilhZGRyOworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCQlhZGRyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQlSQ1ZfREVTQ19SSU5HU0laRShyZHNfcmluZyksCisJCQkJJnJkc19yaW5nLT5waHlzX2FkZHIpOworCQlpZiAoYWRkciA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJImZhaWxlZCB0byBhbGxvY2F0ZSByZHMgcmluZyBbJWRdXG4iLCByaW5nKTsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9vdXRfZnJlZTsKKwkJfQorCQlyZHNfcmluZy0+ZGVzY19oZWFkID0gKHN0cnVjdCByY3ZfZGVzYyAqKWFkZHI7CisKKwl9CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CisKKwkJYWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJU1RBVFVTX0RFU0NfUklOR1NJWkUoc2RzX3JpbmcpLAorCQkJCSZzZHNfcmluZy0+cGh5c19hZGRyKTsKKwkJaWYgKGFkZHIgPT0gTlVMTCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJmYWlsZWQgdG8gYWxsb2NhdGUgc2RzIHJpbmcgWyVkXVxuIiwgcmluZyk7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnJfb3V0X2ZyZWU7CisJCX0KKwkJc2RzX3JpbmctPmRlc2NfaGVhZCA9IChzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKilhZGRyOworCX0KKworCisJZXJyID0gcWxjbmljX2Z3X2NtZF9jcmVhdGVfcnhfY3R4KGFkYXB0ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlOworCWVyciA9IHFsY25pY19md19jbWRfY3JlYXRlX3R4X2N0eChhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZnJlZTsKKworCXNldF9iaXQoX19RTENOSUNfRldfQVRUQUNIRUQsICZhZGFwdGVyLT5zdGF0ZSk7CisJcmV0dXJuIDA7CisKK2Vycl9vdXRfZnJlZToKKwlxbGNuaWNfZnJlZV9od19yZXNvdXJjZXMoYWRhcHRlcik7CisJcmV0dXJuIGVycjsKK30KKwordm9pZCBxbGNuaWNfZnJlZV9od19yZXNvdXJjZXMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eDsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOworCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisJc3RydWN0IHFsY25pY19ob3N0X3R4X3JpbmcgKnR4X3Jpbmc7CisJaW50IHJpbmc7CisKKworCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoX19RTENOSUNfRldfQVRUQUNIRUQsICZhZGFwdGVyLT5zdGF0ZSkpIHsKKwkJcWxjbmljX2Z3X2NtZF9kZXN0cm95X3J4X2N0eChhZGFwdGVyKTsKKwkJcWxjbmljX2Z3X2NtZF9kZXN0cm95X3R4X2N0eChhZGFwdGVyKTsKKworCQkvKiBBbGxvdyBkbWEgcXVldWVzIHRvIGRyYWluIGFmdGVyIGNvbnRleHQgcmVzZXQgKi8KKwkJbXNsZWVwKDIwKTsKKwl9CisKKwlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKworCXR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nOworCWlmICh0eF9yaW5nLT5od19jb25zdW1lciAhPSBOVUxMKSB7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQlzaXplb2YodTMyKSwKKwkJCQl0eF9yaW5nLT5od19jb25zdW1lciwKKwkJCQl0eF9yaW5nLT5od19jb25zX3BoeXNfYWRkcik7CisJCXR4X3JpbmctPmh3X2NvbnN1bWVyID0gTlVMTDsKKwl9CisKKwlpZiAodHhfcmluZy0+ZGVzY19oZWFkICE9IE5VTEwpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAorCQkJCVRYX0RFU0NfUklOR1NJWkUodHhfcmluZyksCisJCQkJdHhfcmluZy0+ZGVzY19oZWFkLCB0eF9yaW5nLT5waHlzX2FkZHIpOworCQl0eF9yaW5nLT5kZXNjX2hlYWQgPSBOVUxMOworCX0KKworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKKwkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKKworCQlpZiAocmRzX3JpbmctPmRlc2NfaGVhZCAhPSBOVUxMKSB7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJCVJDVl9ERVNDX1JJTkdTSVpFKHJkc19yaW5nKSwKKwkJCQkJcmRzX3JpbmctPmRlc2NfaGVhZCwKKwkJCQkJcmRzX3JpbmctPnBoeXNfYWRkcik7CisJCQlyZHNfcmluZy0+ZGVzY19oZWFkID0gTlVMTDsKKwkJfQorCX0KKworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKKworCQlpZiAoc2RzX3JpbmctPmRlc2NfaGVhZCAhPSBOVUxMKSB7CisJCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsCisJCQkJU1RBVFVTX0RFU0NfUklOR1NJWkUoc2RzX3JpbmcpLAorCQkJCXNkc19yaW5nLT5kZXNjX2hlYWQsCisJCQkJc2RzX3JpbmctPnBoeXNfYWRkcik7CisJCQlzZHNfcmluZy0+ZGVzY19oZWFkID0gTlVMTDsKKwkJfQorCX0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2V0aHRvb2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGE2ZWM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ldGh0b29sLmMKQEAgLTAsMCArMSwxMDE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IC0gUUxvZ2ljIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisKKyNpbmNsdWRlICJxbGNuaWMuaCIKKworc3RydWN0IHFsY25pY19zdGF0cyB7CisJY2hhciBzdGF0X3N0cmluZ1tFVEhfR1NUUklOR19MRU5dOworCWludCBzaXplb2Zfc3RhdDsKKwlpbnQgc3RhdF9vZmZzZXQ7Cit9OworCisjZGVmaW5lIFFMQ19TSVpFT0YobSkgRklFTERfU0laRU9GKHN0cnVjdCBxbGNuaWNfYWRhcHRlciwgbSkKKyNkZWZpbmUgUUxDX09GRihtKSBvZmZzZXRvZihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIsIG0pCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcWxjbmljX3N0YXRzIHFsY25pY19nc3RyaW5nc19zdGF0c1tdID0geworCXsieG1pdF9jYWxsZWQiLAorCQlRTENfU0laRU9GKHN0YXRzLnhtaXRjYWxsZWQpLCBRTENfT0ZGKHN0YXRzLnhtaXRjYWxsZWQpfSwKKwl7InhtaXRfZmluaXNoZWQiLAorCQlRTENfU0laRU9GKHN0YXRzLnhtaXRmaW5pc2hlZCksIFFMQ19PRkYoc3RhdHMueG1pdGZpbmlzaGVkKX0sCisJeyJyeF9kcm9wcGVkIiwKKwkJUUxDX1NJWkVPRihzdGF0cy5yeGRyb3BwZWQpLCBRTENfT0ZGKHN0YXRzLnJ4ZHJvcHBlZCl9LAorCXsidHhfZHJvcHBlZCIsCisJCVFMQ19TSVpFT0Yoc3RhdHMudHhkcm9wcGVkKSwgUUxDX09GRihzdGF0cy50eGRyb3BwZWQpfSwKKwl7ImNzdW1tZWQiLAorCQlRTENfU0laRU9GKHN0YXRzLmNzdW1tZWQpLCBRTENfT0ZGKHN0YXRzLmNzdW1tZWQpfSwKKwl7InJ4X3BrdHMiLAorCQlRTENfU0laRU9GKHN0YXRzLnJ4X3BrdHMpLCBRTENfT0ZGKHN0YXRzLnJ4X3BrdHMpfSwKKwl7Imxyb19wa3RzIiwKKwkJUUxDX1NJWkVPRihzdGF0cy5scm9fcGt0cyksIFFMQ19PRkYoc3RhdHMubHJvX3BrdHMpfSwKKwl7InJ4X2J5dGVzIiwKKwkJUUxDX1NJWkVPRihzdGF0cy5yeGJ5dGVzKSwgUUxDX09GRihzdGF0cy5yeGJ5dGVzKX0sCisJeyJ0eF9ieXRlcyIsCisJCVFMQ19TSVpFT0Yoc3RhdHMudHhieXRlcyksIFFMQ19PRkYoc3RhdHMudHhieXRlcyl9LAorfTsKKworI2RlZmluZSBRTENOSUNfU1RBVFNfTEVOCUFSUkFZX1NJWkUocWxjbmljX2dzdHJpbmdzX3N0YXRzKQorCitzdGF0aWMgY29uc3QgY2hhciBxbGNuaWNfZ3N0cmluZ3NfdGVzdFtdW0VUSF9HU1RSSU5HX0xFTl0gPSB7CisJIlJlZ2lzdGVyX1Rlc3Rfb25fb2ZmbGluZSIsCisJIkxpbmtfVGVzdF9vbl9vZmZsaW5lIiwKKwkiSW50ZXJydXB0X1Rlc3Rfb2ZmbGluZSIsCisJIkxvb3BiYWNrX1Rlc3Rfb2ZmbGluZSIKK307CisKKyNkZWZpbmUgUUxDTklDX1RFU1RfTEVOCUFSUkFZX1NJWkUocWxjbmljX2dzdHJpbmdzX3Rlc3QpCisKKyNkZWZpbmUgUUxDTklDX1JJTkdfUkVHU19DT1VOVAkyMAorI2RlZmluZSBRTENOSUNfUklOR19SRUdTX0xFTgkoUUxDTklDX1JJTkdfUkVHU19DT1VOVCAqIHNpemVvZih1MzIpKQorI2RlZmluZSBRTENOSUNfTUFYX0VFUFJPTV9MRU4gICAxMDI0CisKK3N0YXRpYyBjb25zdCB1MzIgZGlhZ19yZWdpc3RlcnNbXSA9IHsKKwlDUkJfQ01EUEVHX1NUQVRFLAorCUNSQl9SQ1ZQRUdfU1RBVEUsCisJQ1JCX1hHX1NUQVRFX1AzLAorCUNSQl9GV19DQVBBQklMSVRJRVNfMSwKKwlJU1JfSU5UX1NUQVRFX1JFRywKKwlRTENOSUNfQ1JCX0RFVl9SRUZfQ09VTlQsCisJUUxDTklDX0NSQl9ERVZfU1RBVEUsCisJUUxDTklDX0NSQl9EUlZfU1RBVEUsCisJUUxDTklDX0NSQl9EUlZfU0NSQVRDSCwKKwlRTENOSUNfQ1JCX0RFVl9QQVJUSVRJT05fSU5GTywKKwlRTENOSUNfQ1JCX0RSVl9JRENfVkVSLAorCVFMQ05JQ19QRUdfQUxJVkVfQ09VTlRFUiwKKwlRTENOSUNfUEVHX0hBTFRfU1RBVFVTMSwKKwlRTENOSUNfUEVHX0hBTFRfU1RBVFVTMiwKKwlRTENOSUNfQ1JCX1BFR19ORVRfMCsweDNjLAorCVFMQ05JQ19DUkJfUEVHX05FVF8xKzB4M2MsCisJUUxDTklDX0NSQl9QRUdfTkVUXzIrMHgzYywKKwlRTENOSUNfQ1JCX1BFR19ORVRfNCsweDNjLAorCS0xCit9OworCitzdGF0aWMgaW50IHFsY25pY19nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gc2l6ZW9mKGRpYWdfcmVnaXN0ZXJzKSArIFFMQ05JQ19SSU5HX1JFR1NfTEVOOworfQorCitzdGF0aWMgaW50IHFsY25pY19nZXRfZWVwcm9tX2xlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiBRTENOSUNfRkxBU0hfVE9UQUxfU0laRTsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICpkcnZpbmZvKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIGZ3X21ham9yLCBmd19taW5vciwgZndfYnVpbGQ7CisKKwlmd19tYWpvciA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0ZXX1ZFUlNJT05fTUFKT1IpOworCWZ3X21pbm9yID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfRldfVkVSU0lPTl9NSU5PUik7CisJZndfYnVpbGQgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19GV19WRVJTSU9OX1NVQik7CisJc3ByaW50ZihkcnZpbmZvLT5md192ZXJzaW9uLCAiJWQuJWQuJWQiLCBmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkKTsKKworCXN0cmxjcHkoZHJ2aW5mby0+YnVzX2luZm8sIHBjaV9uYW1lKGFkYXB0ZXItPnBkZXYpLCAzMik7CisJc3RybGNweShkcnZpbmZvLT5kcml2ZXIsIHFsY25pY19kcml2ZXJfbmFtZSwgMzIpOworCXN0cmxjcHkoZHJ2aW5mby0+dmVyc2lvbiwgUUxDTklDX0xJTlVYX1ZFUlNJT05JRCwgMzIpOworfQorCitzdGF0aWMgaW50CitxbGNuaWNfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2NtZCAqZWNtZCkKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCWludCBjaGVja19zZnBfbW9kdWxlID0gMDsKKwl1MTYgcGNpZm4gPSBhZGFwdGVyLT5haHcucGNpX2Z1bmM7CisKKwkvKiByZWFkIHdoaWNoIG1vZGUgKi8KKwlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBRTENOSUNfR0JFKSB7CisJCWVjbWQtPnN1cHBvcnRlZCA9IChTVVBQT1JURURfMTBiYXNlVF9IYWxmIHwKKwkJCQkgICBTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwKKwkJCQkgICBTVVBQT1JURURfMTAwYmFzZVRfSGFsZiB8CisJCQkJICAgU1VQUE9SVEVEXzEwMGJhc2VUX0Z1bGwgfAorCQkJCSAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZiB8CisJCQkJICAgU1VQUE9SVEVEXzEwMDBiYXNlVF9GdWxsKTsKKworCQllY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMGJhc2VUX0hhbGYgfAorCQkJCSAgICAgQURWRVJUSVNFRF8xMDBiYXNlVF9GdWxsIHwKKwkJCQkgICAgIEFEVkVSVElTRURfMTAwMGJhc2VUX0hhbGYgfAorCQkJCSAgICAgQURWRVJUSVNFRF8xMDAwYmFzZVRfRnVsbCk7CisKKwkJZWNtZC0+c3BlZWQgPSBhZGFwdGVyLT5saW5rX3NwZWVkOworCQllY21kLT5kdXBsZXggPSBhZGFwdGVyLT5saW5rX2R1cGxleDsKKwkJZWNtZC0+YXV0b25lZyA9IGFkYXB0ZXItPmxpbmtfYXV0b25lZzsKKworCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBRTENOSUNfWEdCRSkgeworCQl1MzIgdmFsOworCisJCXZhbCA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX1BPUlRfTU9ERV9BRERSKTsKKwkJaWYgKHZhbCA9PSBRTENOSUNfUE9SVF9NT0RFXzgwMl8zX0FQKSB7CisJCQllY21kLT5zdXBwb3J0ZWQgPSBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGw7CisJCQllY21kLT5hZHZlcnRpc2luZyA9IEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGw7CisJCX0gZWxzZSB7CisJCQllY21kLT5zdXBwb3J0ZWQgPSBTVVBQT1JURURfMTAwMDBiYXNlVF9GdWxsOworCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgPSBBRFZFUlRJU0VEXzEwMDAwYmFzZVRfRnVsbDsKKwkJfQorCisJCWlmIChuZXRpZl9ydW5uaW5nKGRldikgJiYgYWRhcHRlci0+aGFzX2xpbmtfZXZlbnRzKSB7CisJCQllY21kLT5zcGVlZCA9IGFkYXB0ZXItPmxpbmtfc3BlZWQ7CisJCQllY21kLT5hdXRvbmVnID0gYWRhcHRlci0+bGlua19hdXRvbmVnOworCQkJZWNtZC0+ZHVwbGV4ID0gYWRhcHRlci0+bGlua19kdXBsZXg7CisJCQlnb3RvIHNraXA7CisJCX0KKworCQl2YWwgPSBRTENSRDMyKGFkYXB0ZXIsIFAzX0xJTktfU1BFRURfUkVHKHBjaWZuKSk7CisJCWVjbWQtPnNwZWVkID0gUDNfTElOS19TUEVFRF9NSFogKgorCQkJUDNfTElOS19TUEVFRF9WQUwocGNpZm4sIHZhbCk7CisJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOworCQllY21kLT5hdXRvbmVnID0gQVVUT05FR19ESVNBQkxFOworCX0gZWxzZQorCQlyZXR1cm4gLUVJTzsKKworc2tpcDoKKwllY21kLT5waHlfYWRkcmVzcyA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7CisJZWNtZC0+dHJhbnNjZWl2ZXIgPSBYQ1ZSX0VYVEVSTkFMOworCisJc3dpdGNoIChhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSkgeworCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNfUkVGX1FHOgorCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNfNF9HQjoKKwljYXNlIFFMQ05JQ19CUkRUWVBFX1AzXzRfR0JfTU06CisKKwkJZWNtZC0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF9BdXRvbmVnOworCQllY21kLT5hZHZlcnRpc2luZyB8PSBBRFZFUlRJU0VEX0F1dG9uZWc7CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfQ1g0OgorCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNfMTBHX0NYNF9MUDoKKwljYXNlIFFMQ05JQ19CUkRUWVBFX1AzXzEwMDAwX0JBU0VfVDoKKwkJZWNtZC0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF9UUDsKKwkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9UUDsKKwkJZWNtZC0+cG9ydCA9IFBPUlRfVFA7CisJCWVjbWQtPmF1dG9uZWcgPSAgYWRhcHRlci0+bGlua19hdXRvbmVnOworCQlicmVhazsKKwljYXNlIFFMQ05JQ19CUkRUWVBFX1AzX0lNRVo6CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM19YR19MT006CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM19ITUVaOgorCQllY21kLT5zdXBwb3J0ZWQgfD0gU1VQUE9SVEVEX01JSTsKKwkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9NSUk7CisJCWVjbWQtPnBvcnQgPSBQT1JUX01JSTsKKwkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKKwkJYnJlYWs7CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfU0ZQX1BMVVM6CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfU0ZQX0NUOgorCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNfMTBHX1NGUF9RVDoKKwkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9UUDsKKwkJZWNtZC0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF9UUDsKKwkJY2hlY2tfc2ZwX21vZHVsZSA9IG5ldGlmX3J1bm5pbmcoZGV2KSAmJgorCQkJYWRhcHRlci0+aGFzX2xpbmtfZXZlbnRzOworCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNfMTBHX1hGUDoKKwkJZWNtZC0+c3VwcG9ydGVkIHw9IFNVUFBPUlRFRF9GSUJSRTsKKwkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0gQURWRVJUSVNFRF9GSUJSRTsKKwkJZWNtZC0+cG9ydCA9IFBPUlRfRklCUkU7CisJCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7CisJCWJyZWFrOworCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNfMTBHX1RQOgorCQlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBRTENOSUNfWEdCRSkgeworCQkJZWNtZC0+YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKKwkJCWVjbWQtPnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEX0ZJQlJFIHwgU1VQUE9SVEVEX1RQKTsKKwkJCWVjbWQtPmFkdmVydGlzaW5nIHw9CisJCQkJKEFEVkVSVElTRURfRklCUkUgfCBBRFZFUlRJU0VEX1RQKTsKKwkJCWVjbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCQkJY2hlY2tfc2ZwX21vZHVsZSA9IG5ldGlmX3J1bm5pbmcoZGV2KSAmJgorCQkJCWFkYXB0ZXItPmhhc19saW5rX2V2ZW50czsKKwkJfSBlbHNlIHsKKwkJCWVjbWQtPmF1dG9uZWcgPSBBVVRPTkVHX0VOQUJMRTsKKwkJCWVjbWQtPnN1cHBvcnRlZCB8PSAoU1VQUE9SVEVEX1RQIHwgU1VQUE9SVEVEX0F1dG9uZWcpOworCQkJZWNtZC0+YWR2ZXJ0aXNpbmcgfD0KKwkJCQkoQURWRVJUSVNFRF9UUCB8IEFEVkVSVElTRURfQXV0b25lZyk7CisJCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJVbnN1cHBvcnRlZCBib2FyZCBtb2RlbCAlZFxuIiwKKwkJCWFkYXB0ZXItPmFody5ib2FyZF90eXBlKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGNoZWNrX3NmcF9tb2R1bGUpIHsKKwkJc3dpdGNoIChhZGFwdGVyLT5tb2R1bGVfdHlwZSkgeworCQljYXNlIExJTktFVkVOVF9NT0RVTEVfT1BUSUNBTF9VTktOT1dOOgorCQljYXNlIExJTktFVkVOVF9NT0RVTEVfT1BUSUNBTF9TUkxSOgorCQljYXNlIExJTktFVkVOVF9NT0RVTEVfT1BUSUNBTF9MUk06CisJCWNhc2UgTElOS0VWRU5UX01PRFVMRV9PUFRJQ0FMX1NGUF8xRzoKKwkJCWVjbWQtPnBvcnQgPSBQT1JUX0ZJQlJFOworCQkJYnJlYWs7CisJCWNhc2UgTElOS0VWRU5UX01PRFVMRV9UV0lOQVhfVU5TVVBQT1JURURfQ0FCTEU6CisJCWNhc2UgTElOS0VWRU5UX01PRFVMRV9UV0lOQVhfVU5TVVBQT1JURURfQ0FCTEVMRU46CisJCWNhc2UgTElOS0VWRU5UX01PRFVMRV9UV0lOQVg6CisJCQllY21kLT5wb3J0ID0gUE9SVF9UUDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWNtZC0+cG9ydCA9IFBPUlRfT1RIRVI7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcWxjbmljX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlfX3UzMiBzdGF0dXM7CisKKwkvKiByZWFkIHdoaWNoIG1vZGUgKi8KKwlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBRTENOSUNfR0JFKSB7CisJCS8qIGF1dG9uZWdvdGlhdGlvbiAqLworCQlpZiAocWxjbmljX2Z3X2NtZF9zZXRfcGh5KGFkYXB0ZXIsCisJCQkgICAgICAgUUxDTklDX05JVV9HQl9NSUlfTUdNVF9BRERSX0FVVE9ORUcsCisJCQkgICAgICAgZWNtZC0+YXV0b25lZykgIT0gMCkKKwkJCXJldHVybiAtRUlPOworCQllbHNlCisJCQlhZGFwdGVyLT5saW5rX2F1dG9uZWcgPSBlY21kLT5hdXRvbmVnOworCisJCWlmIChxbGNuaWNfZndfY21kX3F1ZXJ5X3BoeShhZGFwdGVyLAorCQkJICAgICAgUUxDTklDX05JVV9HQl9NSUlfTUdNVF9BRERSX1BIWV9TVEFUVVMsCisJCQkgICAgICAmc3RhdHVzKSAhPSAwKQorCQkJcmV0dXJuIC1FSU87CisKKwkJc3dpdGNoIChlY21kLT5zcGVlZCkgeworCQljYXNlIFNQRUVEXzEwOgorCQkJcWxjbmljX3NldF9waHlfc3BlZWQoc3RhdHVzLCAwKTsKKwkJCWJyZWFrOworCQljYXNlIFNQRUVEXzEwMDoKKwkJCXFsY25pY19zZXRfcGh5X3NwZWVkKHN0YXR1cywgMSk7CisJCQlicmVhazsKKwkJY2FzZSBTUEVFRF8xMDAwOgorCQkJcWxjbmljX3NldF9waHlfc3BlZWQoc3RhdHVzLCAyKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGVjbWQtPmR1cGxleCA9PSBEVVBMRVhfSEFMRikKKwkJCXFsY25pY19jbGVhcl9waHlfZHVwbGV4KHN0YXR1cyk7CisJCWlmIChlY21kLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwpCisJCQlxbGNuaWNfc2V0X3BoeV9kdXBsZXgoc3RhdHVzKTsKKwkJaWYgKHFsY25pY19md19jbWRfc2V0X3BoeShhZGFwdGVyLAorCQkJICAgICAgIFFMQ05JQ19OSVVfR0JfTUlJX01HTVRfQUREUl9QSFlfU1RBVFVTLAorCQkJICAgICAgICooKGludCAqKSZzdGF0dXMpKSAhPSAwKQorCQkJcmV0dXJuIC1FSU87CisJCWVsc2UgeworCQkJYWRhcHRlci0+bGlua19zcGVlZCA9IGVjbWQtPnNwZWVkOworCQkJYWRhcHRlci0+bGlua19kdXBsZXggPSBlY21kLT5kdXBsZXg7CisJCX0KKwl9IGVsc2UKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAwOworCisJZGV2LT5uZXRkZXZfb3BzLT5uZG9fc3RvcChkZXYpOworCXJldHVybiBkZXYtPm5ldGRldl9vcHMtPm5kb19vcGVuKGRldik7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfZ2V0X3JlZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCXUzMiAqcmVnc19idWZmID0gcDsKKwlpbnQgcmluZywgaSA9IDA7CisKKwltZW1zZXQocCwgMCwgcWxjbmljX2dldF9yZWdzX2xlbihkZXYpKTsKKwlyZWdzLT52ZXJzaW9uID0gKDEgPDwgMjQpIHwgKGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCA8PCAxNikgfAorCSAgICAoYWRhcHRlci0+cGRldiktPmRldmljZTsKKworCWZvciAoaSA9IDA7IGRpYWdfcmVnaXN0ZXJzW2ldICE9IC0xOyBpKyspCisJCXJlZ3NfYnVmZltpXSA9IFFMQ1JEMzIoYWRhcHRlciwgZGlhZ19yZWdpc3RlcnNbaV0pOworCisJaWYgKGFkYXB0ZXItPmlzX3VwICE9IFFMQ05JQ19BREFQVEVSX1VQX01BR0lDKQorCQlyZXR1cm47CisKKwlyZWdzX2J1ZmZbaSsrXSA9IDB4RkZFRkNEQUI7IC8qIE1hcmtlciBidHcgcmVncyBhbmQgcmluZyBjb3VudCovCisKKwlyZWdzX2J1ZmZbaSsrXSA9IDE7IC8qIE5vLiBvZiB0eCByaW5nICovCisJcmVnc19idWZmW2krK10gPSBsZTMyX3RvX2NwdSgqKGFkYXB0ZXItPnR4X3JpbmctPmh3X2NvbnN1bWVyKSk7CisJcmVnc19idWZmW2krK10gPSByZWFkbChhZGFwdGVyLT50eF9yaW5nLT5jcmJfY21kX3Byb2R1Y2VyKTsKKworCXJlZ3NfYnVmZltpKytdID0gMjsgLyogTm8uIG9mIHJ4IHJpbmcgKi8KKwlyZWdzX2J1ZmZbaSsrXSA9IHJlYWRsKHJlY3ZfY3R4LT5yZHNfcmluZ3NbMF0uY3JiX3Jjdl9wcm9kdWNlcik7CisJcmVnc19idWZmW2krK10gPSByZWFkbChyZWN2X2N0eC0+cmRzX3JpbmdzWzFdLmNyYl9yY3ZfcHJvZHVjZXIpOworCisJcmVnc19idWZmW2krK10gPSBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICYocmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXSk7CisJCXJlZ3NfYnVmZltpKytdID0gcmVhZGwoc2RzX3JpbmctPmNyYl9zdHNfY29uc3VtZXIpOworCX0KK30KKworc3RhdGljIHUzMiBxbGNuaWNfdGVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgdmFsOworCisJdmFsID0gUUxDUkQzMihhZGFwdGVyLCBDUkJfWEdfU1RBVEVfUDMpOworCXZhbCA9IFhHX0xJTktfU1RBVEVfUDMoYWRhcHRlci0+YWh3LnBjaV9mdW5jLCB2YWwpOworCXJldHVybiAodmFsID09IFhHX0xJTktfVVBfUDMpID8gMCA6IDE7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2VlcHJvbSAqZWVwcm9tLAorCQkgICAgICB1OCAqYnl0ZXMpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgb2Zmc2V0OworCWludCByZXQ7CisKKwlpZiAoZWVwcm9tLT5sZW4gPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllZXByb20tPm1hZ2ljID0gKGFkYXB0ZXItPnBkZXYpLT52ZW5kb3IgfAorCQkJKChhZGFwdGVyLT5wZGV2KS0+ZGV2aWNlIDw8IDE2KTsKKwlvZmZzZXQgPSBlZXByb20tPm9mZnNldDsKKworCXJldCA9IHFsY25pY19yb21fZmFzdF9yZWFkX3dvcmRzKGFkYXB0ZXIsIG9mZnNldCwgYnl0ZXMsCisJCQkJCQllZXByb20tPmxlbik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZykKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJcmluZy0+cnhfcGVuZGluZyA9IGFkYXB0ZXItPm51bV9yeGQ7CisJcmluZy0+cnhfanVtYm9fcGVuZGluZyA9IGFkYXB0ZXItPm51bV9qdW1ib19yeGQ7CisJcmluZy0+cnhfanVtYm9fcGVuZGluZyArPSBhZGFwdGVyLT5udW1fbHJvX3J4ZDsKKwlyaW5nLT50eF9wZW5kaW5nID0gYWRhcHRlci0+bnVtX3R4ZDsKKworCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IFFMQ05JQ19HQkUpIHsKKwkJcmluZy0+cnhfbWF4X3BlbmRpbmcgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzFHOworCQlyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IE1BWF9KVU1CT19SQ1ZfREVTQ1JJUFRPUlNfMUc7CisJfSBlbHNlIHsKKwkJcmluZy0+cnhfbWF4X3BlbmRpbmcgPSBNQVhfUkNWX0RFU0NSSVBUT1JTXzEwRzsKKwkJcmluZy0+cnhfanVtYm9fbWF4X3BlbmRpbmcgPSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTXzEwRzsKKwl9CisKKwlyaW5nLT50eF9tYXhfcGVuZGluZyA9IE1BWF9DTURfREVTQ1JJUFRPUlM7CisKKwlyaW5nLT5yeF9taW5pX21heF9wZW5kaW5nID0gMDsKKwlyaW5nLT5yeF9taW5pX3BlbmRpbmcgPSAwOworfQorCitzdGF0aWMgdTMyCitxbGNuaWNfdmFsaWRhdGVfcmluZ3BhcmFtKHUzMiB2YWwsIHUzMiBtaW4sIHUzMiBtYXgsIGNoYXIgKnJfbmFtZSkKK3sKKwl1MzIgbnVtX2Rlc2M7CisJbnVtX2Rlc2MgPSBtYXgodmFsLCBtaW4pOworCW51bV9kZXNjID0gbWluKG51bV9kZXNjLCBtYXgpOworCW51bV9kZXNjID0gcm91bmR1cF9wb3dfb2ZfdHdvKG51bV9kZXNjKTsKKworCWlmICh2YWwgIT0gbnVtX2Rlc2MpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHNldHRpbmcgJXMgcmluZyBzaXplICVkIGluc3RlYWQgb2YgJWRcbiIsCisJCSAgICAgICBxbGNuaWNfZHJpdmVyX25hbWUsIHJfbmFtZSwgbnVtX2Rlc2MsIHZhbCk7CisJfQorCisJcmV0dXJuIG51bV9kZXNjOworfQorCitzdGF0aWMgaW50CitxbGNuaWNfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MTYgbWF4X3Jjdl9kZXNjID0gTUFYX1JDVl9ERVNDUklQVE9SU18xMEc7CisJdTE2IG1heF9qdW1ib19kZXNjID0gTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SU18xMEc7CisJdTE2IG51bV9yeGQsIG51bV9qdW1ib19yeGQsIG51bV90eGQ7CisKKworCWlmIChyaW5nLT5yeF9taW5pX3BlbmRpbmcpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IFFMQ05JQ19HQkUpIHsKKwkJbWF4X3Jjdl9kZXNjID0gTUFYX1JDVl9ERVNDUklQVE9SU18xRzsKKwkJbWF4X2p1bWJvX2Rlc2MgPSBNQVhfSlVNQk9fUkNWX0RFU0NSSVBUT1JTXzEwRzsKKwl9CisKKwludW1fcnhkID0gcWxjbmljX3ZhbGlkYXRlX3JpbmdwYXJhbShyaW5nLT5yeF9wZW5kaW5nLAorCQkJTUlOX1JDVl9ERVNDUklQVE9SUywgbWF4X3Jjdl9kZXNjLCAicngiKTsKKworCW51bV9qdW1ib19yeGQgPSBxbGNuaWNfdmFsaWRhdGVfcmluZ3BhcmFtKHJpbmctPnJ4X2p1bWJvX3BlbmRpbmcsCisJCQlNSU5fSlVNQk9fREVTQ1JJUFRPUlMsIG1heF9qdW1ib19kZXNjLCAicngganVtYm8iKTsKKworCW51bV90eGQgPSBxbGNuaWNfdmFsaWRhdGVfcmluZ3BhcmFtKHJpbmctPnR4X3BlbmRpbmcsCisJCQlNSU5fQ01EX0RFU0NSSVBUT1JTLCBNQVhfQ01EX0RFU0NSSVBUT1JTLCAidHgiKTsKKworCWlmIChudW1fcnhkID09IGFkYXB0ZXItPm51bV9yeGQgJiYgbnVtX3R4ZCA9PSBhZGFwdGVyLT5udW1fdHhkICYmCisJCQludW1fanVtYm9fcnhkID09IGFkYXB0ZXItPm51bV9qdW1ib19yeGQpCisJCXJldHVybiAwOworCisJYWRhcHRlci0+bnVtX3J4ZCA9IG51bV9yeGQ7CisJYWRhcHRlci0+bnVtX2p1bWJvX3J4ZCA9IG51bV9qdW1ib19yeGQ7CisJYWRhcHRlci0+bnVtX3R4ZCA9IG51bV90eGQ7CisKKwlyZXR1cm4gcWxjbmljX3Jlc2V0X2NvbnRleHQoYWRhcHRlcik7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7CisJX191MzIgdmFsOworCisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gUUxDTklDX0dCRSkgeworCQlpZiAoKHBvcnQgPCAwKSB8fCAocG9ydCA+IFFMQ05JQ19OSVVfTUFYX0dCRV9QT1JUUykpCisJCQlyZXR1cm47CisJCS8qIGdldCBmbG93IGNvbnRyb2wgc2V0dGluZ3MgKi8KKwkJdmFsID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfTklVX0dCX01BQ19DT05GSUdfMChwb3J0KSk7CisJCXBhdXNlLT5yeF9wYXVzZSA9IHFsY25pY19nYl9nZXRfcnhfZmxvd2N0bCh2YWwpOworCQl2YWwgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19OSVVfR0JfUEFVU0VfQ1RMKTsKKwkJc3dpdGNoIChwb3J0KSB7CisJCWNhc2UgMDoKKwkJCXBhdXNlLT50eF9wYXVzZSA9ICEocWxjbmljX2diX2dldF9nYjBfbWFzayh2YWwpKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlwYXVzZS0+dHhfcGF1c2UgPSAhKHFsY25pY19nYl9nZXRfZ2IxX21hc2sodmFsKSk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJcGF1c2UtPnR4X3BhdXNlID0gIShxbGNuaWNfZ2JfZ2V0X2diMl9tYXNrKHZhbCkpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJZGVmYXVsdDoKKwkJCXBhdXNlLT50eF9wYXVzZSA9ICEocWxjbmljX2diX2dldF9nYjNfbWFzayh2YWwpKTsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIGlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IFFMQ05JQ19YR0JFKSB7CisJCWlmICgocG9ydCA8IDApIHx8IChwb3J0ID4gUUxDTklDX05JVV9NQVhfWEdfUE9SVFMpKQorCQkJcmV0dXJuOworCQlwYXVzZS0+cnhfcGF1c2UgPSAxOworCQl2YWwgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19OSVVfWEdfUEFVU0VfQ1RMKTsKKwkJaWYgKHBvcnQgPT0gMCkKKwkJCXBhdXNlLT50eF9wYXVzZSA9ICEocWxjbmljX3hnX2dldF94ZzBfbWFzayh2YWwpKTsKKwkJZWxzZQorCQkJcGF1c2UtPnR4X3BhdXNlID0gIShxbGNuaWNfeGdfZ2V0X3hnMV9tYXNrKHZhbCkpOworCX0gZWxzZSB7CisJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiVW5rbm93biBib2FyZCB0eXBlOiAleFxuIiwKKwkJCQkJYWRhcHRlci0+YWh3LnBvcnRfdHlwZSk7CisJfQorfQorCitzdGF0aWMgaW50CitxbGNuaWNfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgcG9ydCA9IGFkYXB0ZXItPnBoeXNpY2FsX3BvcnQ7CisJX191MzIgdmFsOworCisJLyogcmVhZCBtb2RlICovCisJaWYgKGFkYXB0ZXItPmFody5wb3J0X3R5cGUgPT0gUUxDTklDX0dCRSkgeworCQlpZiAoKHBvcnQgPCAwKSB8fCAocG9ydCA+IFFMQ05JQ19OSVVfTUFYX0dCRV9QT1JUUykpCisJCQlyZXR1cm4gLUVJTzsKKwkJLyogc2V0IGZsb3cgY29udHJvbCAqLworCQl2YWwgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19OSVVfR0JfTUFDX0NPTkZJR18wKHBvcnQpKTsKKworCQlpZiAocGF1c2UtPnJ4X3BhdXNlKQorCQkJcWxjbmljX2diX3J4X2Zsb3djdGwodmFsKTsKKwkJZWxzZQorCQkJcWxjbmljX2diX3Vuc2V0X3J4X2Zsb3djdGwodmFsKTsKKworCQlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19OSVVfR0JfTUFDX0NPTkZJR18wKHBvcnQpLAorCQkJCXZhbCk7CisJCS8qIHNldCBhdXRvbmVnICovCisJCXZhbCA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX05JVV9HQl9QQVVTRV9DVEwpOworCQlzd2l0Y2ggKHBvcnQpIHsKKwkJY2FzZSAwOgorCQkJaWYgKHBhdXNlLT50eF9wYXVzZSkKKwkJCQlxbGNuaWNfZ2JfdW5zZXRfZ2IwX21hc2sodmFsKTsKKwkJCWVsc2UKKwkJCQlxbGNuaWNfZ2Jfc2V0X2diMF9tYXNrKHZhbCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJaWYgKHBhdXNlLT50eF9wYXVzZSkKKwkJCQlxbGNuaWNfZ2JfdW5zZXRfZ2IxX21hc2sodmFsKTsKKwkJCWVsc2UKKwkJCQlxbGNuaWNfZ2Jfc2V0X2diMV9tYXNrKHZhbCk7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJaWYgKHBhdXNlLT50eF9wYXVzZSkKKwkJCQlxbGNuaWNfZ2JfdW5zZXRfZ2IyX21hc2sodmFsKTsKKwkJCWVsc2UKKwkJCQlxbGNuaWNfZ2Jfc2V0X2diMl9tYXNrKHZhbCk7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQlkZWZhdWx0OgorCQkJaWYgKHBhdXNlLT50eF9wYXVzZSkKKwkJCQlxbGNuaWNfZ2JfdW5zZXRfZ2IzX21hc2sodmFsKTsKKwkJCWVsc2UKKwkJCQlxbGNuaWNfZ2Jfc2V0X2diM19tYXNrKHZhbCk7CisJCQlicmVhazsKKwkJfQorCQlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19OSVVfR0JfUEFVU0VfQ1RMLCB2YWwpOworCX0gZWxzZSBpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBRTENOSUNfWEdCRSkgeworCQlpZiAoKHBvcnQgPCAwKSB8fCAocG9ydCA+IFFMQ05JQ19OSVVfTUFYX1hHX1BPUlRTKSkKKwkJCXJldHVybiAtRUlPOworCQl2YWwgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19OSVVfWEdfUEFVU0VfQ1RMKTsKKwkJaWYgKHBvcnQgPT0gMCkgeworCQkJaWYgKHBhdXNlLT50eF9wYXVzZSkKKwkJCQlxbGNuaWNfeGdfdW5zZXRfeGcwX21hc2sodmFsKTsKKwkJCWVsc2UKKwkJCQlxbGNuaWNfeGdfc2V0X3hnMF9tYXNrKHZhbCk7CisJCX0gZWxzZSB7CisJCQlpZiAocGF1c2UtPnR4X3BhdXNlKQorCQkJCXFsY25pY194Z191bnNldF94ZzFfbWFzayh2YWwpOworCQkJZWxzZQorCQkJCXFsY25pY194Z19zZXRfeGcxX21hc2sodmFsKTsKKwkJfQorCQlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19OSVVfWEdfUEFVU0VfQ1RMLCB2YWwpOworCX0gZWxzZSB7CisJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiVW5rbm93biBib2FyZCB0eXBlOiAleFxuIiwKKwkJCQlhZGFwdGVyLT5haHcucG9ydF90eXBlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWxjbmljX3JlZ190ZXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwl1MzIgZGF0YV9yZWFkLCBkYXRhX3dyaXR0ZW47CisKKwlkYXRhX3JlYWQgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19QQ0lYX1BIX1JFRygwKSk7CisJaWYgKChkYXRhX3JlYWQgJiAweGZmZmYpICE9IGFkYXB0ZXItPnBkZXYtPnZlbmRvcikKKwkJcmV0dXJuIDE7CisKKwlkYXRhX3dyaXR0ZW4gPSAodTMyKTB4YTVhNWE1YTU7CisKKwlRTENXUjMyKGFkYXB0ZXIsIENSQl9TQ1JBVENIUEFEX1RFU1QsIGRhdGFfd3JpdHRlbik7CisJZGF0YV9yZWFkID0gUUxDUkQzMihhZGFwdGVyLCBDUkJfU0NSQVRDSFBBRF9URVNUKTsKKwlpZiAoZGF0YV93cml0dGVuICE9IGRhdGFfcmVhZCkKKwkJcmV0dXJuIDE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxbGNuaWNfZ2V0X3NzZXRfY291bnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHNzZXQpCit7CisJc3dpdGNoIChzc2V0KSB7CisJY2FzZSBFVEhfU1NfVEVTVDoKKwkJcmV0dXJuIFFMQ05JQ19URVNUX0xFTjsKKwljYXNlIEVUSF9TU19TVEFUUzoKKwkJcmV0dXJuIFFMQ05JQ19TVEFUU19MRU47CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KK30KKworI2RlZmluZSBRTENfSUxCX1BLVF9TSVpFIDY0CisKK3N0YXRpYyB2b2lkIHFsY25pY19jcmVhdGVfbG9vcGJhY2tfYnVmZih1bnNpZ25lZCBjaGFyICpkYXRhKQoreworCXVuc2lnbmVkIGNoYXIgcmFuZG9tX2RhdGFbXSA9IHsweGE4LCAweDA2LCAweDQ1LCAweDAwfTsKKwltZW1zZXQoZGF0YSwgMHg0ZSwgUUxDX0lMQl9QS1RfU0laRSk7CisJbWVtc2V0KGRhdGEsIDB4ZmYsIDEyKTsKKwltZW1jcHkoZGF0YSArIDEyLCByYW5kb21fZGF0YSwgc2l6ZW9mKHJhbmRvbV9kYXRhKSk7Cit9CisKK2ludCBxbGNuaWNfY2hlY2tfbG9vcGJhY2tfYnVmZih1bnNpZ25lZCBjaGFyICpkYXRhKQoreworCXVuc2lnbmVkIGNoYXIgYnVmZltRTENfSUxCX1BLVF9TSVpFXTsKKwlxbGNuaWNfY3JlYXRlX2xvb3BiYWNrX2J1ZmYoYnVmZik7CisJcmV0dXJuIG1lbWNtcChkYXRhLCBidWZmLCBRTENfSUxCX1BLVF9TSVpFKTsKK30KKworc3RhdGljIGludCBxbGNuaWNfZG9faWxiX3Rlc3Qoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbMF07CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCXNrYiA9IGRldl9hbGxvY19za2IoUUxDX0lMQl9QS1RfU0laRSk7CisJCXFsY25pY19jcmVhdGVfbG9vcGJhY2tfYnVmZihza2ItPmRhdGEpOworCQlza2JfcHV0KHNrYiwgUUxDX0lMQl9QS1RfU0laRSk7CisKKwkJYWRhcHRlci0+ZGlhZ19jbnQgPSAwOworCisJCXFsY25pY194bWl0X2ZyYW1lKHNrYiwgYWRhcHRlci0+bmV0ZGV2KTsKKworCQltc2xlZXAoNSk7CisKKwkJcWxjbmljX3Byb2Nlc3NfcmN2X3JpbmdfZGlhZyhzZHNfcmluZyk7CisKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJaWYgKCFhZGFwdGVyLT5kaWFnX2NudCkKKwkJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWxjbmljX2xvb3BiYWNrX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCBtYXhfc2RzX3JpbmdzID0gYWRhcHRlci0+bWF4X3Nkc19yaW5nczsKKwlpbnQgcmV0OworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm4gLUVJTzsKKworCXJldCA9IHFsY25pY19kaWFnX2FsbG9jX3JlcyhuZXRkZXYsIFFMQ05JQ19MT09QQkFDS19URVNUKTsKKwlpZiAocmV0KQorCQlnb3RvIGNsZWFyX2l0OworCisJcmV0ID0gcWxjbmljX3NldF9pbGJfbW9kZShhZGFwdGVyKTsKKwlpZiAocmV0KQorCQlnb3RvIGRvbmU7CisKKwlyZXQgPSBxbGNuaWNfZG9faWxiX3Rlc3QoYWRhcHRlcik7CisKKwlxbGNuaWNfY2xlYXJfaWxiX21vZGUoYWRhcHRlcik7CisKK2RvbmU6CisJcWxjbmljX2RpYWdfZnJlZV9yZXMobmV0ZGV2LCBtYXhfc2RzX3JpbmdzKTsKKworY2xlYXJfaXQ6CisJYWRhcHRlci0+bWF4X3Nkc19yaW5ncyA9IG1heF9zZHNfcmluZ3M7CisJY2xlYXJfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHFsY25pY19pcnFfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IG1heF9zZHNfcmluZ3MgPSBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOworCWludCByZXQ7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChfX1FMQ05JQ19SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSkpCisJCXJldHVybiAtRUlPOworCisJcmV0ID0gcWxjbmljX2RpYWdfYWxsb2NfcmVzKG5ldGRldiwgUUxDTklDX0lOVEVSUlVQVF9URVNUKTsKKwlpZiAocmV0KQorCQlnb3RvIGNsZWFyX2l0OworCisJYWRhcHRlci0+ZGlhZ19jbnQgPSAwOworCXJldCA9IHFsY25pY19pc3N1ZV9jbWQoYWRhcHRlciwgYWRhcHRlci0+YWh3LnBjaV9mdW5jLAorCQkJUUxDSEFMX1ZFUlNJT04sIGFkYXB0ZXItPnBvcnRudW0sIDAsIDAsIDB4MDAwMDAwMTEpOworCWlmIChyZXQpCisJCWdvdG8gZG9uZTsKKworCW1zbGVlcCgxMCk7CisKKwlyZXQgPSAhYWRhcHRlci0+ZGlhZ19jbnQ7CisKK2RvbmU6CisJcWxjbmljX2RpYWdfZnJlZV9yZXMobmV0ZGV2LCBtYXhfc2RzX3JpbmdzKTsKKworY2xlYXJfaXQ6CisJYWRhcHRlci0+bWF4X3Nkc19yaW5ncyA9IG1heF9zZHNfcmluZ3M7CisJY2xlYXJfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZAorcWxjbmljX2RpYWdfdGVzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF90ZXN0ICpldGhfdGVzdCwKKwkJICAgICB1NjQgKmRhdGEpCit7CisJbWVtc2V0KGRhdGEsIDAsIHNpemVvZih1NjQpICogUUxDTklDX1RFU1RfTEVOKTsKKworCWlmIChldGhfdGVzdC0+ZmxhZ3MgPT0gRVRIX1RFU1RfRkxfT0ZGTElORSkgeworCQlkYXRhWzJdID0gcWxjbmljX2lycV90ZXN0KGRldik7CisJCWlmIChkYXRhWzJdKQorCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKKworCQlkYXRhWzNdID0gcWxjbmljX2xvb3BiYWNrX3Rlc3QoZGV2KTsKKwkJaWYgKGRhdGFbM10pCisJCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOworCisJfQorCisJZGF0YVswXSA9IHFsY25pY19yZWdfdGVzdChkZXYpOworCWlmIChkYXRhWzBdKQorCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOworCisJLyogbGluayB0ZXN0ICovCisJZGF0YVsxXSA9ICh1NjQpIHFsY25pY190ZXN0X2xpbmsoZGV2KTsKKwlpZiAoZGF0YVsxXSkKKwkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZBSUxFRDsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19nZXRfc3RyaW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3RyaW5nc2V0LCB1OCAqIGRhdGEpCit7CisJaW50IGluZGV4OworCisJc3dpdGNoIChzdHJpbmdzZXQpIHsKKwljYXNlIEVUSF9TU19URVNUOgorCQltZW1jcHkoZGF0YSwgKnFsY25pY19nc3RyaW5nc190ZXN0LAorCQkgICAgICAgUUxDTklDX1RFU1RfTEVOICogRVRIX0dTVFJJTkdfTEVOKTsKKwkJYnJlYWs7CisJY2FzZSBFVEhfU1NfU1RBVFM6CisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IFFMQ05JQ19TVEFUU19MRU47IGluZGV4KyspIHsKKwkJCW1lbWNweShkYXRhICsgaW5kZXggKiBFVEhfR1NUUklOR19MRU4sCisJCQkgICAgICAgcWxjbmljX2dzdHJpbmdzX3N0YXRzW2luZGV4XS5zdGF0X3N0cmluZywKKwkJCSAgICAgICBFVEhfR1NUUklOR19MRU4pOworCQl9CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQKK3FsY25pY19nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqc3RhdHMsIHU2NCAqIGRhdGEpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlpbnQgaW5kZXg7CisKKwlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBRTENOSUNfU1RBVFNfTEVOOyBpbmRleCsrKSB7CisJCWNoYXIgKnAgPQorCQkgICAgKGNoYXIgKilhZGFwdGVyICsKKwkJICAgIHFsY25pY19nc3RyaW5nc19zdGF0c1tpbmRleF0uc3RhdF9vZmZzZXQ7CisJCWRhdGFbaW5kZXhdID0KKwkJICAgIChxbGNuaWNfZ3N0cmluZ3Nfc3RhdHNbaW5kZXhdLnNpemVvZl9zdGF0ID09CisJCSAgICAgc2l6ZW9mKHU2NCkpID8gKih1NjQgKilwOigqKHUzMiAqKXApOworCX0KK30KKworc3RhdGljIHUzMiBxbGNuaWNfZ2V0X3J4X2NzdW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCXJldHVybiBhZGFwdGVyLT5yeF9jc3VtOworfQorCitzdGF0aWMgaW50IHFsY25pY19zZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCWFkYXB0ZXItPnJ4X2NzdW0gPSAhIWRhdGE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgcWxjbmljX2dldF90c28oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gKGRldi0+ZmVhdHVyZXMgJiAoTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpKSAhPSAwOworfQorCitzdGF0aWMgaW50IHFsY25pY19zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkYXRhKQoreworCWlmIChkYXRhKQorCQlkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX1RTTyB8IE5FVElGX0ZfVFNPNik7CisJZWxzZQorCQlkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU08gfCBORVRJRl9GX1RTTzYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWxjbmljX2JsaW5rX2xlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdmFsKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJaW50IHJldDsKKworCXJldCA9IHFsY25pY19jb25maWdfbGVkKGFkYXB0ZXIsIDEsIDB4Zik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIHNldCBMRUQgYmxpbmsgc3RhdGUuXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwltc2xlZXBfaW50ZXJydXB0aWJsZSh2YWwgKiAxMDAwKTsKKworCXJldCA9IHFsY25pY19jb25maWdfbGVkKGFkYXB0ZXIsIDAsIDB4Zik7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIHJlc2V0IExFRCBibGluayBzdGF0ZS5cbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcWxjbmljX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHdvbF9jZmc7CisKKwl3b2wtPnN1cHBvcnRlZCA9IDA7CisJd29sLT53b2xvcHRzID0gMDsKKworCXdvbF9jZmcgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19XT0xfQ09ORklHX05WKTsKKwlpZiAod29sX2NmZyAmICgxVUwgPDwgYWRhcHRlci0+cG9ydG51bSkpCisJCXdvbC0+c3VwcG9ydGVkIHw9IFdBS0VfTUFHSUM7CisKKwl3b2xfY2ZnID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfV09MX0NPTkZJRyk7CisJaWYgKHdvbF9jZmcgJiAoMVVMIDw8IGFkYXB0ZXItPnBvcnRudW0pKQorCQl3b2wtPndvbG9wdHMgfD0gV0FLRV9NQUdJQzsKK30KKworc3RhdGljIGludAorcWxjbmljX3NldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CisJdTMyIHdvbF9jZmc7CisKKwlpZiAod29sLT53b2xvcHRzICYgfldBS0VfTUFHSUMpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXdvbF9jZmcgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19XT0xfQ09ORklHX05WKTsKKwlpZiAoISh3b2xfY2ZnICYgKDEgPDwgYWRhcHRlci0+cG9ydG51bSkpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwl3b2xfY2ZnID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfV09MX0NPTkZJRyk7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUFHSUMpCisJCXdvbF9jZmcgfD0gMVVMIDw8IGFkYXB0ZXItPnBvcnRudW07CisJZWxzZQorCQl3b2xfY2ZnICY9IH4oMVVMIDw8IGFkYXB0ZXItPnBvcnRudW0pOworCisJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfV09MX0NPTkZJRywgd29sX2NmZyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCB0aGUgY29hbGVzY2luZyBwYXJhbWV0ZXJzLiBDdXJyZW50bHkgb25seSBub3JtYWwgaXMgc3VwcG9ydGVkLgorICogSWYgcnhfY29hbGVzY2VfdXNlY3MgPT0gMCBvciByeF9tYXhfY29hbGVzY2VkX2ZyYW1lcyA9PSAwIHRoZW4gc2V0IHRoZQorICogZmlybXdhcmUgY29hbGVzY2luZyB0byBkZWZhdWx0LgorICovCitzdGF0aWMgaW50IHFsY25pY19zZXRfaW50cl9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmV0aGNvYWwpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmIChhZGFwdGVyLT5pc191cCAhPSBRTENOSUNfQURBUFRFUl9VUF9NQUdJQykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSogUmV0dXJuIEVycm9yIGlmIHVuc3VwcG9ydGVkIHZhbHVlcyBvcgorCSogdW5zdXBwb3J0ZWQgcGFyYW1ldGVycyBhcmUgc2V0LgorCSovCisJaWYgKGV0aGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzID4gMHhmZmZmIHx8CisJCWV0aGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzID4gMHhmZmZmIHx8CisJCWV0aGNvYWwtPnR4X2NvYWxlc2NlX3VzZWNzID4gMHhmZmZmIHx8CisJCWV0aGNvYWwtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzID4gMHhmZmZmIHx8CisJCWV0aGNvYWwtPnJ4X2NvYWxlc2NlX3VzZWNzX2lycSB8fAorCQlldGhjb2FsLT5yeF9tYXhfY29hbGVzY2VkX2ZyYW1lc19pcnEgfHwKKwkJZXRoY29hbC0+dHhfY29hbGVzY2VfdXNlY3NfaXJxIHx8CisJCWV0aGNvYWwtPnR4X21heF9jb2FsZXNjZWRfZnJhbWVzX2lycSB8fAorCQlldGhjb2FsLT5zdGF0c19ibG9ja19jb2FsZXNjZV91c2VjcyB8fAorCQlldGhjb2FsLT51c2VfYWRhcHRpdmVfcnhfY29hbGVzY2UgfHwKKwkJZXRoY29hbC0+dXNlX2FkYXB0aXZlX3R4X2NvYWxlc2NlIHx8CisJCWV0aGNvYWwtPnBrdF9yYXRlX2xvdyB8fAorCQlldGhjb2FsLT5yeF9jb2FsZXNjZV91c2Vjc19sb3cgfHwKKwkJZXRoY29hbC0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXNfbG93IHx8CisJCWV0aGNvYWwtPnR4X2NvYWxlc2NlX3VzZWNzX2xvdyB8fAorCQlldGhjb2FsLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19sb3cgfHwKKwkJZXRoY29hbC0+cGt0X3JhdGVfaGlnaCB8fAorCQlldGhjb2FsLT5yeF9jb2FsZXNjZV91c2Vjc19oaWdoIHx8CisJCWV0aGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzX2hpZ2ggfHwKKwkJZXRoY29hbC0+dHhfY29hbGVzY2VfdXNlY3NfaGlnaCB8fAorCQlldGhjb2FsLT50eF9tYXhfY29hbGVzY2VkX2ZyYW1lc19oaWdoKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghZXRoY29hbC0+cnhfY29hbGVzY2VfdXNlY3MgfHwKKwkJIWV0aGNvYWwtPnJ4X21heF9jb2FsZXNjZWRfZnJhbWVzKSB7CisJCWFkYXB0ZXItPmNvYWwuZmxhZ3MgPSBRTENOSUNfSU5UUl9ERUZBVUxUOworCQlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnJ4X3RpbWVfdXMgPQorCQkJUUxDTklDX0RFRkFVTFRfSU5UUl9DT0FMRVNDRV9SWF9USU1FX1VTOworCQlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnJ4X3BhY2tldHMgPQorCQkJUUxDTklDX0RFRkFVTFRfSU5UUl9DT0FMRVNDRV9SWF9QQUNLRVRTOworCX0gZWxzZSB7CisJCWFkYXB0ZXItPmNvYWwuZmxhZ3MgPSAwOworCQlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnJ4X3RpbWVfdXMgPQorCQlldGhjb2FsLT5yeF9jb2FsZXNjZV91c2VjczsKKwkJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS5yeF9wYWNrZXRzID0KKwkJZXRoY29hbC0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXM7CisJfQorCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEudHhfdGltZV91cyA9IGV0aGNvYWwtPnR4X2NvYWxlc2NlX3VzZWNzOworCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEudHhfcGFja2V0cyA9CisJZXRoY29hbC0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXM7CisKKwlxbGNuaWNfY29uZmlnX2ludHJfY29hbGVzY2UoYWRhcHRlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxbGNuaWNfZ2V0X2ludHJfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCXN0cnVjdCBldGh0b29sX2NvYWxlc2NlICpldGhjb2FsKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAoYWRhcHRlci0+aXNfdXAgIT0gUUxDTklDX0FEQVBURVJfVVBfTUFHSUMpCisJCXJldHVybiAtRUlOVkFMOworCisJZXRoY29hbC0+cnhfY29hbGVzY2VfdXNlY3MgPSBhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnJ4X3RpbWVfdXM7CisJZXRoY29hbC0+dHhfY29hbGVzY2VfdXNlY3MgPSBhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnR4X3RpbWVfdXM7CisJZXRoY29hbC0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPQorCQlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnJ4X3BhY2tldHM7CisJZXRoY29hbC0+dHhfbWF4X2NvYWxlc2NlZF9mcmFtZXMgPQorCQlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnR4X3BhY2tldHM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxbGNuaWNfc2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJaW50IGh3X2xybzsKKworCWlmICghKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIFFMQ05JQ19GV19DQVBBQklMSVRZX0hXX0xSTykpCisJCXJldHVybiAtRUlOVkFMOworCisJZXRodG9vbF9vcF9zZXRfZmxhZ3MobmV0ZGV2LCBkYXRhKTsKKworCWh3X2xybyA9IChkYXRhICYgRVRIX0ZMQUdfTFJPKSA/IFFMQ05JQ19MUk9fRU5BQkxFRCA6IDA7CisKKwlpZiAocWxjbmljX2NvbmZpZ19od19scm8oYWRhcHRlciwgaHdfbHJvKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoKGh3X2xybyA9PSAwKSAmJiBxbGNuaWNfc2VuZF9scm9fY2xlYW51cChhZGFwdGVyKSkKKwkJcmV0dXJuIC1FSU87CisKKworCXJldHVybiAwOworfQorCitjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcWxjbmljX2V0aHRvb2xfb3BzID0geworCS5nZXRfc2V0dGluZ3MgPSBxbGNuaWNfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0dGluZ3MgPSBxbGNuaWNfc2V0X3NldHRpbmdzLAorCS5nZXRfZHJ2aW5mbyA9IHFsY25pY19nZXRfZHJ2aW5mbywKKwkuZ2V0X3JlZ3NfbGVuID0gcWxjbmljX2dldF9yZWdzX2xlbiwKKwkuZ2V0X3JlZ3MgPSBxbGNuaWNfZ2V0X3JlZ3MsCisJLmdldF9saW5rID0gZXRodG9vbF9vcF9nZXRfbGluaywKKwkuZ2V0X2VlcHJvbV9sZW4gPSBxbGNuaWNfZ2V0X2VlcHJvbV9sZW4sCisJLmdldF9lZXByb20gPSBxbGNuaWNfZ2V0X2VlcHJvbSwKKwkuZ2V0X3JpbmdwYXJhbSA9IHFsY25pY19nZXRfcmluZ3BhcmFtLAorCS5zZXRfcmluZ3BhcmFtID0gcWxjbmljX3NldF9yaW5ncGFyYW0sCisJLmdldF9wYXVzZXBhcmFtID0gcWxjbmljX2dldF9wYXVzZXBhcmFtLAorCS5zZXRfcGF1c2VwYXJhbSA9IHFsY25pY19zZXRfcGF1c2VwYXJhbSwKKwkuc2V0X3R4X2NzdW0gPSBldGh0b29sX29wX3NldF90eF9jc3VtLAorCS5zZXRfc2cgPSBldGh0b29sX29wX3NldF9zZywKKwkuZ2V0X3RzbyA9IHFsY25pY19nZXRfdHNvLAorCS5zZXRfdHNvID0gcWxjbmljX3NldF90c28sCisJLmdldF93b2wgPSBxbGNuaWNfZ2V0X3dvbCwKKwkuc2V0X3dvbCA9IHFsY25pY19zZXRfd29sLAorCS5zZWxmX3Rlc3QgPSBxbGNuaWNfZGlhZ190ZXN0LAorCS5nZXRfc3RyaW5ncyA9IHFsY25pY19nZXRfc3RyaW5ncywKKwkuZ2V0X2V0aHRvb2xfc3RhdHMgPSBxbGNuaWNfZ2V0X2V0aHRvb2xfc3RhdHMsCisJLmdldF9zc2V0X2NvdW50ID0gcWxjbmljX2dldF9zc2V0X2NvdW50LAorCS5nZXRfcnhfY3N1bSA9IHFsY25pY19nZXRfcnhfY3N1bSwKKwkuc2V0X3J4X2NzdW0gPSBxbGNuaWNfc2V0X3J4X2NzdW0sCisJLmdldF9jb2FsZXNjZSA9IHFsY25pY19nZXRfaW50cl9jb2FsZXNjZSwKKwkuc2V0X2NvYWxlc2NlID0gcWxjbmljX3NldF9pbnRyX2NvYWxlc2NlLAorCS5nZXRfZmxhZ3MgPSBldGh0b29sX29wX2dldF9mbGFncywKKwkuc2V0X2ZsYWdzID0gcWxjbmljX3NldF9mbGFncywKKwkucGh5c19pZCA9IHFsY25pY19ibGlua19sZWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19oZHIuaCBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaGRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ2OWY4NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaGRyLmgKQEAgLTAsMCArMSw5MzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgLSBRTG9naWMgQ29ycG9yYXRpb24uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLAorICogTUEgIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbgorICogaW4gdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKyAqCisgKi8KKworI2lmbmRlZiBfX1FMQ05JQ19IRFJfSF8KKyNkZWZpbmUgX19RTENOSUNfSERSX0hfCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKgorICogVGhlIGJhc2ljIHVuaXQgb2YgYWNjZXNzIHdoZW4gcmVhZGluZy93cml0aW5nIGNvbnRyb2wgcmVnaXN0ZXJzLgorICovCisKK2VudW0geworCVFMQ05JQ19IV19IMF9DSF9IVUJfQURSID0gMHgwNSwKKwlRTENOSUNfSFdfSDFfQ0hfSFVCX0FEUiA9IDB4MEUsCisJUUxDTklDX0hXX0gyX0NIX0hVQl9BRFIgPSAweDAzLAorCVFMQ05JQ19IV19IM19DSF9IVUJfQURSID0gMHgwMSwKKwlRTENOSUNfSFdfSDRfQ0hfSFVCX0FEUiA9IDB4MDYsCisJUUxDTklDX0hXX0g1X0NIX0hVQl9BRFIgPSAweDA3LAorCVFMQ05JQ19IV19INl9DSF9IVUJfQURSID0gMHgwOAorfTsKKworLyogIEh1YiAwICovCitlbnVtIHsKKwlRTENOSUNfSFdfTU5fQ1JCX0FHVF9BRFIgPSAweDE1LAorCVFMQ05JQ19IV19NU19DUkJfQUdUX0FEUiA9IDB4MjUKK307CisKKy8qICBIdWIgMSAqLworZW51bSB7CisJUUxDTklDX0hXX1BTX0NSQl9BR1RfQURSID0gMHg3MywKKwlRTENOSUNfSFdfU1NfQ1JCX0FHVF9BRFIgPSAweDIwLAorCVFMQ05JQ19IV19SUE1YM19DUkJfQUdUX0FEUiA9IDB4MGIsCisJUUxDTklDX0hXX1FNU19DUkJfQUdUX0FEUiA9IDB4MDAsCisJUUxDTklDX0hXX1NRR1MwX0NSQl9BR1RfQURSID0gMHgwMSwKKwlRTENOSUNfSFdfU1FHUzFfQ1JCX0FHVF9BRFIgPSAweDAyLAorCVFMQ05JQ19IV19TUUdTMl9DUkJfQUdUX0FEUiA9IDB4MDMsCisJUUxDTklDX0hXX1NRR1MzX0NSQl9BR1RfQURSID0gMHgwNCwKKwlRTENOSUNfSFdfQzJDMF9DUkJfQUdUX0FEUiA9IDB4NTgsCisJUUxDTklDX0hXX0MyQzFfQ1JCX0FHVF9BRFIgPSAweDU5LAorCVFMQ05JQ19IV19DMkMyX0NSQl9BR1RfQURSID0gMHg1YSwKKwlRTENOSUNfSFdfUlBNWDJfQ1JCX0FHVF9BRFIgPSAweDBhLAorCVFMQ05JQ19IV19SUE1YNF9DUkJfQUdUX0FEUiA9IDB4MGMsCisJUUxDTklDX0hXX1JQTVg3X0NSQl9BR1RfQURSID0gMHgwZiwKKwlRTENOSUNfSFdfUlBNWDlfQ1JCX0FHVF9BRFIgPSAweDEyLAorCVFMQ05JQ19IV19TTUJfQ1JCX0FHVF9BRFIgPSAweDE4Cit9OworCisvKiAgSHViIDIgKi8KK2VudW0geworCVFMQ05JQ19IV19OSVVfQ1JCX0FHVF9BRFIgPSAweDMxLAorCVFMQ05JQ19IV19JMkMwX0NSQl9BR1RfQURSID0gMHgxOSwKKwlRTENOSUNfSFdfSTJDMV9DUkJfQUdUX0FEUiA9IDB4MjksCisKKwlRTENOSUNfSFdfU05fQ1JCX0FHVF9BRFIgPSAweDEwLAorCVFMQ05JQ19IV19JMlFfQ1JCX0FHVF9BRFIgPSAweDIwLAorCVFMQ05JQ19IV19MUENfQ1JCX0FHVF9BRFIgPSAweDIyLAorCVFMQ05JQ19IV19ST01VU0JfQ1JCX0FHVF9BRFIgPSAweDIxLAorCVFMQ05JQ19IV19RTV9DUkJfQUdUX0FEUiA9IDB4NjYsCisJUUxDTklDX0hXX1NRRzBfQ1JCX0FHVF9BRFIgPSAweDYwLAorCVFMQ05JQ19IV19TUUcxX0NSQl9BR1RfQURSID0gMHg2MSwKKwlRTENOSUNfSFdfU1FHMl9DUkJfQUdUX0FEUiA9IDB4NjIsCisJUUxDTklDX0hXX1NRRzNfQ1JCX0FHVF9BRFIgPSAweDYzLAorCVFMQ05JQ19IV19SUE1YMV9DUkJfQUdUX0FEUiA9IDB4MDksCisJUUxDTklDX0hXX1JQTVg1X0NSQl9BR1RfQURSID0gMHgwZCwKKwlRTENOSUNfSFdfUlBNWDZfQ1JCX0FHVF9BRFIgPSAweDBlLAorCVFMQ05JQ19IV19SUE1YOF9DUkJfQUdUX0FEUiA9IDB4MTEKK307CisKKy8qICBIdWIgMyAqLworZW51bSB7CisJUUxDTklDX0hXX1BIX0NSQl9BR1RfQURSID0gMHgxQSwKKwlRTENOSUNfSFdfU1JFX0NSQl9BR1RfQURSID0gMHg1MCwKKwlRTENOSUNfSFdfRUdfQ1JCX0FHVF9BRFIgPSAweDUxLAorCVFMQ05JQ19IV19SUE1YMF9DUkJfQUdUX0FEUiA9IDB4MDgKK307CisKKy8qICBIdWIgNCAqLworZW51bSB7CisJUUxDTklDX0hXX1BFR04wX0NSQl9BR1RfQURSID0gMHg0MCwKKwlRTENOSUNfSFdfUEVHTjFfQ1JCX0FHVF9BRFIsCisJUUxDTklDX0hXX1BFR04yX0NSQl9BR1RfQURSLAorCVFMQ05JQ19IV19QRUdOM19DUkJfQUdUX0FEUiwKKwlRTENOSUNfSFdfUEVHTklfQ1JCX0FHVF9BRFIsCisJUUxDTklDX0hXX1BFR05EX0NSQl9BR1RfQURSLAorCVFMQ05JQ19IV19QRUdOQ19DUkJfQUdUX0FEUiwKKwlRTENOSUNfSFdfUEVHUjBfQ1JCX0FHVF9BRFIsCisJUUxDTklDX0hXX1BFR1IxX0NSQl9BR1RfQURSLAorCVFMQ05JQ19IV19QRUdSMl9DUkJfQUdUX0FEUiwKKwlRTENOSUNfSFdfUEVHUjNfQ1JCX0FHVF9BRFIsCisJUUxDTklDX0hXX1BFR040X0NSQl9BR1RfQURSCit9OworCisvKiAgSHViIDUgKi8KK2VudW0geworCVFMQ05JQ19IV19QRUdTMF9DUkJfQUdUX0FEUiA9IDB4NDAsCisJUUxDTklDX0hXX1BFR1MxX0NSQl9BR1RfQURSLAorCVFMQ05JQ19IV19QRUdTMl9DUkJfQUdUX0FEUiwKKwlRTENOSUNfSFdfUEVHUzNfQ1JCX0FHVF9BRFIsCisJUUxDTklDX0hXX1BFR1NJX0NSQl9BR1RfQURSLAorCVFMQ05JQ19IV19QRUdTRF9DUkJfQUdUX0FEUiwKKwlRTENOSUNfSFdfUEVHU0NfQ1JCX0FHVF9BRFIKK307CisKKy8qICBIdWIgNiAqLworZW51bSB7CisJUUxDTklDX0hXX0NBUzBfQ1JCX0FHVF9BRFIgPSAweDQ2LAorCVFMQ05JQ19IV19DQVMxX0NSQl9BR1RfQURSID0gMHg0NywKKwlRTENOSUNfSFdfQ0FTMl9DUkJfQUdUX0FEUiA9IDB4NDgsCisJUUxDTklDX0hXX0NBUzNfQ1JCX0FHVF9BRFIgPSAweDQ5LAorCVFMQ05JQ19IV19OQ01fQ1JCX0FHVF9BRFIgPSAweDE2LAorCVFMQ05JQ19IV19UTVJfQ1JCX0FHVF9BRFIgPSAweDE3LAorCVFMQ05JQ19IV19YRE1BX0NSQl9BR1RfQURSID0gMHgwNSwKKwlRTENOSUNfSFdfT0NNMF9DUkJfQUdUX0FEUiA9IDB4MDYsCisJUUxDTklDX0hXX09DTTFfQ1JCX0FHVF9BRFIgPSAweDA3Cit9OworCisvKiAgRmxvYXRlcnMgLSBub24gZXhpc3RlbnQgbW9kdWxlcyAqLworI2RlZmluZSBRTENOSUNfSFdfRUZDX1JQTVgwX0NSQl9BR1RfQURSCTB4NjcKKworLyogIFRoaXMgZmllbGQgZGVmaW5lcyBQQ0kvWCBhZHIgWzI1OjIwXSBvZiBhZ2VudHMgb24gdGhlIENSQiAqLworZW51bSB7CisJUUxDTklDX0hXX1BYX01BUF9DUkJfUEggPSAwLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1BTLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX01OLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX01TLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1BHUjEsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfU1JFLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX05JVSwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9RTU4sCisJUUxDTklDX0hXX1BYX01BUF9DUkJfU1FOMCwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9TUU4xLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1NRTjIsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfU1FOMywKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9RTVMsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfU1FTMCwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9TUVMxLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1NRUzIsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfU1FTMywKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9QR04wLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1BHTjEsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUEdOMiwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9QR04zLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1BHTkQsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUEdOSSwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9QR1MwLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1BHUzEsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUEdTMiwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9QR1MzLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1BHU0QsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUEdTSSwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9TTiwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9QR1IyLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX0VHLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1BIMiwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9QUzIsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfQ0FNLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX0NBUzAsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfQ0FTMSwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9DQVMyLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX0MyQzAsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfQzJDMSwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9USU1SLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1BHUjMsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUlBNWDEsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUlBNWDIsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUlBNWDMsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUlBNWDQsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUlBNWDUsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUlBNWDYsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUlBNWDcsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfWERNQSwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9JMlEsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUk9NVVNCLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX0NBUzMsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUlBNWDAsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUlBNWDgsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUlBNWDksCisJUUxDTklDX0hXX1BYX01BUF9DUkJfT0NNMCwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9PQ00xLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1NNQiwKKwlRTENOSUNfSFdfUFhfTUFQX0NSQl9JMkMwLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX0kyQzEsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfTFBDLAorCVFMQ05JQ19IV19QWF9NQVBfQ1JCX1BHTkMsCisJUUxDTklDX0hXX1BYX01BUF9DUkJfUEdSMAorfTsKKworLyogIFRoaXMgZmllbGQgZGVmaW5lcyBDUkIgYWRyIFszMToyMF0gb2YgdGhlIGFnZW50cyAqLworCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfTU4JXAorCSgoUUxDTklDX0hXX0gwX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfTU5fQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEgJXAorCSgoUUxDTklDX0hXX0gwX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUEhfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfTVMJXAorCSgoUUxDTklDX0hXX0gwX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfTVNfQ1JCX0FHVF9BRFIpCisKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QUwlcCisJKChRTENOSUNfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19QU19DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9TUwlcCisJKChRTENOSUNfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19TU19DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YMwlcCisJKChRTENOSUNfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19SUE1YM19DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9RTVMJXAorCSgoUUxDTklDX0hXX0gxX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUU1TX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1NRUzAJXAorCSgoUUxDTklDX0hXX0gxX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfU1FHUzBfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfU1FTMQlcCisJKChRTENOSUNfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19TUUdTMV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9TUVMyCVwKKwkoKFFMQ05JQ19IV19IMV9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1NRR1MyX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1NRUzMJXAorCSgoUUxDTklDX0hXX0gxX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfU1FHUzNfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfQzJDMAlcCisJKChRTENOSUNfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19DMkMwX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX0MyQzEJXAorCSgoUUxDTklDX0hXX0gxX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfQzJDMV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YMglcCisJKChRTENOSUNfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19SUE1YMl9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YNAlcCisJKChRTENOSUNfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19SUE1YNF9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YNwlcCisJKChRTENOSUNfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19SUE1YN19DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YOQlcCisJKChRTENOSUNfSFdfSDFfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19SUE1YOV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9TTUIJXAorCSgoUUxDTklDX0hXX0gxX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfU01CX0NSQl9BR1RfQURSKQorCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfTklVCVwKKwkoKFFMQ05JQ19IV19IMl9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX05JVV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9JMkMwCVwKKwkoKFFMQ05JQ19IV19IMl9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX0kyQzBfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfSTJDMQlcCisJKChRTENOSUNfSFdfSDJfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19JMkMxX0NSQl9BR1RfQURSKQorCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfU1JFCVwKKwkoKFFMQ05JQ19IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1NSRV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9FRwlcCisJKChRTENOSUNfSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19FR19DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YMAlcCisJKChRTENOSUNfSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19SUE1YMF9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9RTU4JXAorCSgoUUxDTklDX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUU1fQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfU1FOMAlcCisJKChRTENOSUNfSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19TUUcwX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1NRTjEJXAorCSgoUUxDTklDX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfU1FHMV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9TUU4yCVwKKwkoKFFMQ05JQ19IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1NRRzJfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfU1FOMwlcCisJKChRTENOSUNfSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19TUUczX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVgxCVwKKwkoKFFMQ05JQ19IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1JQTVgxX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg1CVwKKwkoKFFMQ05JQ19IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1JQTVg1X0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg2CVwKKwkoKFFMQ05JQ19IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1JQTVg2X0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg4CVwKKwkoKFFMQ05JQ19IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1JQTVg4X0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX0NBUzAJXAorCSgoUUxDTklDX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfQ0FTMF9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9DQVMxCVwKKwkoKFFMQ05JQ19IV19IM19DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX0NBUzFfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfQ0FTMglcCisJKChRTENOSUNfSFdfSDNfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19DQVMyX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX0NBUzMJXAorCSgoUUxDTklDX0hXX0gzX0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfQ0FTM19DUkJfQUdUX0FEUikKKworI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHTkkJXAorCSgoUUxDTklDX0hXX0g0X0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUEVHTklfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdORAlcCisJKChRTENOSUNfSFdfSDRfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19QRUdORF9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR04wCVwKKwkoKFFMQ05JQ19IV19INF9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1BFR04wX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHTjEJXAorCSgoUUxDTklDX0hXX0g0X0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUEVHTjFfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdOMglcCisJKChRTENOSUNfSFdfSDRfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19QRUdOMl9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR04zCVwKKwkoKFFMQ05JQ19IV19INF9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1BFR04zX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHTjQJXAorCSgoUUxDTklDX0hXX0g0X0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUEVHTjRfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdOQwlcCisJKChRTENOSUNfSFdfSDRfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19QRUdOQ19DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1IwCVwKKwkoKFFMQ05JQ19IV19INF9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1BFR1IwX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHUjEJXAorCSgoUUxDTklDX0hXX0g0X0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUEVHUjFfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdSMglcCisJKChRTENOSUNfSFdfSDRfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19QRUdSMl9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1IzCVwKKwkoKFFMQ05JQ19IV19INF9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1BFR1IzX0NSQl9BR1RfQURSKQorCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdTSQlcCisJKChRTENOSUNfSFdfSDVfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19QRUdTSV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1NECVwKKwkoKFFMQ05JQ19IV19INV9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1BFR1NEX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHUzAJXAorCSgoUUxDTklDX0hXX0g1X0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUEVHUzBfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdTMQlcCisJKChRTENOSUNfSFdfSDVfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19QRUdTMV9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1MyCVwKKwkoKFFMQ05JQ19IV19INV9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1BFR1MyX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHUzMJXAorCSgoUUxDTklDX0hXX0g1X0NIX0hVQl9BRFIgPDwgNykgfCBRTENOSUNfSFdfUEVHUzNfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdTQwlcCisJKChRTENOSUNfSFdfSDVfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19QRUdTQ19DUkJfQUdUX0FEUikKKworI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX0NBTQlcCisJKChRTENOSUNfSFdfSDZfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19OQ01fQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfVElNUglcCisJKChRTENOSUNfSFdfSDZfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19UTVJfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfWERNQQlcCisJKChRTENOSUNfSFdfSDZfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19YRE1BX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1NOCVwKKwkoKFFMQ05JQ19IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1NOX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX0kyUQlcCisJKChRTENOSUNfSFdfSDZfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19JMlFfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUk9NVVNCCVwKKwkoKFFMQ05JQ19IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX1JPTVVTQl9DUkJfQUdUX0FEUikKKyNkZWZpbmUgUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9PQ00wCVwKKwkoKFFMQ05JQ19IV19INl9DSF9IVUJfQURSIDw8IDcpIHwgUUxDTklDX0hXX09DTTBfQ1JCX0FHVF9BRFIpCisjZGVmaW5lIFFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfT0NNMQlcCisJKChRTENOSUNfSFdfSDZfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19PQ00xX0NSQl9BR1RfQURSKQorI2RlZmluZSBRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX0xQQwlcCisJKChRTENOSUNfSFdfSDZfQ0hfSFVCX0FEUiA8PCA3KSB8IFFMQ05JQ19IV19MUENfQ1JCX0FHVF9BRFIpCisKKyNkZWZpbmUgUUxDTklDX1NSRV9NSVNDCQkoUUxDTklDX0NSQl9TUkUgKyAweDAwMDJjKQorCisjZGVmaW5lIFFMQ05JQ19JMlFfQ0xSX1BDSV9ISQkoUUxDTklDX0NSQl9JMlEgKyAweDAwMDM0KQorCisjZGVmaW5lIFJPTVVTQl9HTEIJCShRTENOSUNfQ1JCX1JPTVVTQiArIDB4MDAwMDApCisjZGVmaW5lIFJPTVVTQl9ST00JCShRTENOSUNfQ1JCX1JPTVVTQiArIDB4MTAwMDApCisKKyNkZWZpbmUgUUxDTklDX1JPTVVTQl9HTEJfU1RBVFVTCShST01VU0JfR0xCICsgMHgwMDA0KQorI2RlZmluZSBRTENOSUNfUk9NVVNCX0dMQl9TV19SRVNFVAkoUk9NVVNCX0dMQiArIDB4MDAwOCkKKyNkZWZpbmUgUUxDTklDX1JPTVVTQl9HTEJfUEFEX0dQSU9fSQkoUk9NVVNCX0dMQiArIDB4MDAwYykKKyNkZWZpbmUgUUxDTklDX1JPTVVTQl9HTEJfQ0FTX1JTVAkoUk9NVVNCX0dMQiArIDB4MDAzOCkKKyNkZWZpbmUgUUxDTklDX1JPTVVTQl9HTEJfVEVTVF9NVVhfU0VMCShST01VU0JfR0xCICsgMHgwMDQ0KQorI2RlZmluZSBRTENOSUNfUk9NVVNCX0dMQl9QRUdUVU5FX0RPTkUJKFJPTVVTQl9HTEIgKyAweDAwNWMpCisjZGVmaW5lIFFMQ05JQ19ST01VU0JfR0xCX0NISVBfQ0xLX0NUUkwJKFJPTVVTQl9HTEIgKyAweDAwQTgpCisKKyNkZWZpbmUgUUxDTklDX1JPTVVTQl9HUElPKG4pCQkoUk9NVVNCX0dMQiArIDB4NjAgKyAoNCAqIChuKSkpCisKKyNkZWZpbmUgUUxDTklDX1JPTVVTQl9ST01fSU5TVFJfT1BDT0RFCShST01VU0JfUk9NICsgMHgwMDA0KQorI2RlZmluZSBRTENOSUNfUk9NVVNCX1JPTV9BRERSRVNTCShST01VU0JfUk9NICsgMHgwMDA4KQorI2RlZmluZSBRTENOSUNfUk9NVVNCX1JPTV9XREFUQQkJKFJPTVVTQl9ST00gKyAweDAwMGMpCisjZGVmaW5lIFFMQ05JQ19ST01VU0JfUk9NX0FCWVRFX0NOVAkoUk9NVVNCX1JPTSArIDB4MDAxMCkKKyNkZWZpbmUgUUxDTklDX1JPTVVTQl9ST01fRFVNTVlfQllURV9DTlQgKFJPTVVTQl9ST00gKyAweDAwMTQpCisjZGVmaW5lIFFMQ05JQ19ST01VU0JfUk9NX1JEQVRBCQkoUk9NVVNCX1JPTSArIDB4MDAxOCkKKworLyogTG9jayBJRHMgZm9yIFJPTSBsb2NrICovCisjZGVmaW5lIFJPTV9MT0NLX0RSSVZFUgkweDBkNDE3MzQwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyoKKyogICAgRGVmaW5pdGlvbnMgc3BlY2lmaWMgdG8gTTI1UCBmbGFzaAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKi8KKworLyogYWxsIGFyZSAxTUIgd2luZG93cyAqLworCisjZGVmaW5lIFFMQ05JQ19QQ0lfQ1JCX1dJTkRPV1NJWkUJMHgwMDEwMDAwMAorI2RlZmluZSBRTENOSUNfUENJX0NSQl9XSU5ET1coQSkJXAorCShRTENOSUNfUENJX0NSQlNQQUNFICsgKEEpKlFMQ05JQ19QQ0lfQ1JCX1dJTkRPV1NJWkUpCisKKyNkZWZpbmUgUUxDTklDX0NSQl9OSVUJCVFMQ05JQ19QQ0lfQ1JCX1dJTkRPVyhRTENOSUNfSFdfUFhfTUFQX0NSQl9OSVUpCisjZGVmaW5lIFFMQ05JQ19DUkJfU1JFCQlRTENOSUNfUENJX0NSQl9XSU5ET1coUUxDTklDX0hXX1BYX01BUF9DUkJfU1JFKQorI2RlZmluZSBRTENOSUNfQ1JCX1JPTVVTQglcCisJUUxDTklDX1BDSV9DUkJfV0lORE9XKFFMQ05JQ19IV19QWF9NQVBfQ1JCX1JPTVVTQikKKyNkZWZpbmUgUUxDTklDX0NSQl9JMlEJCVFMQ05JQ19QQ0lfQ1JCX1dJTkRPVyhRTENOSUNfSFdfUFhfTUFQX0NSQl9JMlEpCisjZGVmaW5lIFFMQ05JQ19DUkJfSTJDMCAJUUxDTklDX1BDSV9DUkJfV0lORE9XKFFMQ05JQ19IV19QWF9NQVBfQ1JCX0kyQzApCisjZGVmaW5lIFFMQ05JQ19DUkJfU01CCQlRTENOSUNfUENJX0NSQl9XSU5ET1coUUxDTklDX0hXX1BYX01BUF9DUkJfU01CKQorI2RlZmluZSBRTENOSUNfQ1JCX01BWAkJUUxDTklDX1BDSV9DUkJfV0lORE9XKDY0KQorCisjZGVmaW5lIFFMQ05JQ19DUkJfUENJWF9IT1NUCVFMQ05JQ19QQ0lfQ1JCX1dJTkRPVyhRTENOSUNfSFdfUFhfTUFQX0NSQl9QSCkKKyNkZWZpbmUgUUxDTklDX0NSQl9QQ0lYX0hPU1QyCVFMQ05JQ19QQ0lfQ1JCX1dJTkRPVyhRTENOSUNfSFdfUFhfTUFQX0NSQl9QSDIpCisjZGVmaW5lIFFMQ05JQ19DUkJfUEVHX05FVF8wCVFMQ05JQ19QQ0lfQ1JCX1dJTkRPVyhRTENOSUNfSFdfUFhfTUFQX0NSQl9QR04wKQorI2RlZmluZSBRTENOSUNfQ1JCX1BFR19ORVRfMQlRTENOSUNfUENJX0NSQl9XSU5ET1coUUxDTklDX0hXX1BYX01BUF9DUkJfUEdOMSkKKyNkZWZpbmUgUUxDTklDX0NSQl9QRUdfTkVUXzIJUUxDTklDX1BDSV9DUkJfV0lORE9XKFFMQ05JQ19IV19QWF9NQVBfQ1JCX1BHTjIpCisjZGVmaW5lIFFMQ05JQ19DUkJfUEVHX05FVF8zCVFMQ05JQ19QQ0lfQ1JCX1dJTkRPVyhRTENOSUNfSFdfUFhfTUFQX0NSQl9QR04zKQorI2RlZmluZSBRTENOSUNfQ1JCX1BFR19ORVRfNAlRTENOSUNfUENJX0NSQl9XSU5ET1coUUxDTklDX0hXX1BYX01BUF9DUkJfU1FTMikKKyNkZWZpbmUgUUxDTklDX0NSQl9QRUdfTkVUX0QJUUxDTklDX1BDSV9DUkJfV0lORE9XKFFMQ05JQ19IV19QWF9NQVBfQ1JCX1BHTkQpCisjZGVmaW5lIFFMQ05JQ19DUkJfUEVHX05FVF9JCVFMQ05JQ19QQ0lfQ1JCX1dJTkRPVyhRTENOSUNfSFdfUFhfTUFQX0NSQl9QR05JKQorI2RlZmluZSBRTENOSUNfQ1JCX0REUl9ORVQJUUxDTklDX1BDSV9DUkJfV0lORE9XKFFMQ05JQ19IV19QWF9NQVBfQ1JCX01OKQorI2RlZmluZSBRTENOSUNfQ1JCX1FEUl9ORVQJUUxDTklDX1BDSV9DUkJfV0lORE9XKFFMQ05JQ19IV19QWF9NQVBfQ1JCX1NOKQorCisjZGVmaW5lIFFMQ05JQ19DUkJfUENJWF9NRAlRTENOSUNfUENJX0NSQl9XSU5ET1coUUxDTklDX0hXX1BYX01BUF9DUkJfUFMpCisjZGVmaW5lIFFMQ05JQ19DUkJfUENJRSAJUUxDTklDX0NSQl9QQ0lYX01ECisKKyNkZWZpbmUgSVNSX0lOVF9WRUNUT1IJCShRTENOSUNfUENJWF9QU19SRUcoUENJWF9JTlRfVkVDVE9SKSkKKyNkZWZpbmUgSVNSX0lOVF9NQVNLCQkoUUxDTklDX1BDSVhfUFNfUkVHKFBDSVhfSU5UX01BU0spKQorI2RlZmluZSBJU1JfSU5UX01BU0tfU0xPVwkoUUxDTklDX1BDSVhfUFNfUkVHKFBDSVhfSU5UX01BU0spKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9TVEFUVVMJKFFMQ05JQ19QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9TVEFUVVMpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9NQVNLCShRTENOSUNfUENJWF9QU19SRUcoUENJWF9UQVJHRVRfTUFTSykpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX1NUQVRVU19GMSAgIChRTENOSUNfUENJWF9QU19SRUcoUENJWF9UQVJHRVRfU1RBVFVTX0YxKSkKKyNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfTUFTS19GMSAgICAgKFFMQ05JQ19QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9NQVNLX0YxKSkKKyNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0YyICAgKFFMQ05JQ19QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9TVEFUVVNfRjIpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9NQVNLX0YyICAgICAoUUxDTklDX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX01BU0tfRjIpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjMgICAoUUxDTklDX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX1NUQVRVU19GMykpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX01BU0tfRjMgICAgIChRTENOSUNfUENJWF9QU19SRUcoUENJWF9UQVJHRVRfTUFTS19GMykpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX1NUQVRVU19GNCAgIChRTENOSUNfUENJWF9QU19SRUcoUENJWF9UQVJHRVRfU1RBVFVTX0Y0KSkKKyNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfTUFTS19GNCAgICAgKFFMQ05JQ19QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9NQVNLX0Y0KSkKKyNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0Y1ICAgKFFMQ05JQ19QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9TVEFUVVNfRjUpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9NQVNLX0Y1ICAgICAoUUxDTklDX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX01BU0tfRjUpKQorI2RlZmluZSBJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjYgICAoUUxDTklDX1BDSVhfUFNfUkVHKFBDSVhfVEFSR0VUX1NUQVRVU19GNikpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX01BU0tfRjYgICAgIChRTENOSUNfUENJWF9QU19SRUcoUENJWF9UQVJHRVRfTUFTS19GNikpCisjZGVmaW5lIElTUl9JTlRfVEFSR0VUX1NUQVRVU19GNyAgIChRTENOSUNfUENJWF9QU19SRUcoUENJWF9UQVJHRVRfU1RBVFVTX0Y3KSkKKyNkZWZpbmUgSVNSX0lOVF9UQVJHRVRfTUFTS19GNyAgICAgKFFMQ05JQ19QQ0lYX1BTX1JFRyhQQ0lYX1RBUkdFVF9NQVNLX0Y3KSkKKworI2RlZmluZSBRTENOSUNfUENJX01OXzJNCSgwKQorI2RlZmluZSBRTENOSUNfUENJX01TXzJNCSgweDgwMDAwKQorI2RlZmluZSBRTENOSUNfUENJX09DTTBfMk0JKDB4MDAwYzAwMDBVTCkKKyNkZWZpbmUgUUxDTklDX1BDSV9DUkJTUEFDRQkoMHgwNjAwMDAwMFVMKQorI2RlZmluZSBRTENOSUNfUENJXzJNQl9TSVpFCSgweDAwMjAwMDAwVUwpCisjZGVmaW5lIFFMQ05JQ19QQ0lfQ0FNUU1fMk1fQkFTRQkoMHgwMDBmZjgwMFVMKQorI2RlZmluZSBRTENOSUNfUENJX0NBTVFNXzJNX0VORCAJKDB4MDQ4MDA4MDBVTCkKKworI2RlZmluZSBRTENOSUNfQ1JCX0NBTQlRTENOSUNfUENJX0NSQl9XSU5ET1coUUxDTklDX0hXX1BYX01BUF9DUkJfQ0FNKQorCisjZGVmaW5lIFFMQ05JQ19BRERSX0REUl9ORVQJKDB4MDAwMDAwMDAwMDAwMDAwMFVMTCkKKyNkZWZpbmUgUUxDTklDX0FERFJfRERSX05FVF9NQVggKDB4MDAwMDAwMDAwZmZmZmZmZlVMTCkKKyNkZWZpbmUgUUxDTklDX0FERFJfT0NNMAkoMHgwMDAwMDAwMjAwMDAwMDAwVUxMKQorI2RlZmluZSBRTENOSUNfQUREUl9PQ00wX01BWAkoMHgwMDAwMDAwMjAwMGZmZmZmVUxMKQorI2RlZmluZSBRTENOSUNfQUREUl9PQ00xCSgweDAwMDAwMDAyMDA0MDAwMDBVTEwpCisjZGVmaW5lIFFMQ05JQ19BRERSX09DTTFfTUFYCSgweDAwMDAwMDAyMDA0ZmZmZmZVTEwpCisjZGVmaW5lIFFMQ05JQ19BRERSX1FEUl9ORVQJKDB4MDAwMDAwMDMwMDAwMDAwMFVMTCkKKyNkZWZpbmUgUUxDTklDX0FERFJfUURSX05FVF9NQVhfUDMgKDB4MDAwMDAwMDMwM2ZmZmZmZlVMTCkKKworLyoKKyAqICAgUmVnaXN0ZXIgb2Zmc2V0cyBmb3IgTU4KKyAqLworI2RlZmluZSBRTENOSUNfTUlVX0NPTlRST0wJKDB4MDAwKQorI2RlZmluZSBRTENOSUNfTUlVX01OX0NPTlRST0wJKFFMQ05JQ19DUkJfRERSX05FVCtRTENOSUNfTUlVX0NPTlRST0wpCisKKy8qIDIwMG1zIGRlbGF5IGluIGVhY2ggbG9vcCAqLworI2RlZmluZSBRTENOSUNfTklVX1BIWV9XQUlUTEVOCQkyMDAwMDAKKy8qIDEwIHNlY29uZHMgYmVmb3JlIHdlIGdpdmUgdXAgKi8KKyNkZWZpbmUgUUxDTklDX05JVV9QSFlfV0FJVE1BWAkJNTAKKyNkZWZpbmUgUUxDTklDX05JVV9NQVhfR0JFX1BPUlRTCTQKKyNkZWZpbmUgUUxDTklDX05JVV9NQVhfWEdfUE9SVFMJCTIKKworI2RlZmluZSBRTENOSUNfTklVX01PREUJCQkoUUxDTklDX0NSQl9OSVUgKyAweDAwMDAwKQorI2RlZmluZSBRTENOSUNfTklVX0dCX1BBVVNFX0NUTAkJKFFMQ05JQ19DUkJfTklVICsgMHgwMDMwYykKKyNkZWZpbmUgUUxDTklDX05JVV9YR19QQVVTRV9DVEwJCShRTENOSUNfQ1JCX05JVSArIDB4MDAwOTgpCisKKyNkZWZpbmUgUUxDTklDX05JVV9HQl9NQUNfQ09ORklHXzAoSSkJCVwKKwkJKFFMQ05JQ19DUkJfTklVICsgMHgzMDAwMCArIChJKSoweDEwMDAwKQorI2RlZmluZSBRTENOSUNfTklVX0dCX01BQ19DT05GSUdfMShJKQkJXAorCQkoUUxDTklDX0NSQl9OSVUgKyAweDMwMDA0ICsgKEkpKjB4MTAwMDApCisKKworI2RlZmluZSBURVNUX0FHVF9DVFJMCSgweDAwKQorCisjZGVmaW5lIFRBX0NUTF9TVEFSVAkxCisjZGVmaW5lIFRBX0NUTF9FTkFCTEUJMgorI2RlZmluZSBUQV9DVExfV1JJVEUJNAorI2RlZmluZSBUQV9DVExfQlVTWQk4CisKKy8qCisgKiAgIFJlZ2lzdGVyIG9mZnNldHMgZm9yIE1OCisgKi8KKyNkZWZpbmUgTUlVX1RFU1RfQUdUX0JBU0UJCSgweDkwKQorCisjZGVmaW5lIE1JVV9URVNUX0FHVF9BRERSX0xPCQkoMHgwNCkKKyNkZWZpbmUgTUlVX1RFU1RfQUdUX0FERFJfSEkJCSgweDA4KQorI2RlZmluZSBNSVVfVEVTVF9BR1RfV1JEQVRBX0xPCQkoMHgxMCkKKyNkZWZpbmUgTUlVX1RFU1RfQUdUX1dSREFUQV9ISQkJKDB4MTQpCisjZGVmaW5lIE1JVV9URVNUX0FHVF9XUkRBVEFfVVBQRVJfTE8JKDB4MjApCisjZGVmaW5lIE1JVV9URVNUX0FHVF9XUkRBVEFfVVBQRVJfSEkJKDB4MjQpCisjZGVmaW5lIE1JVV9URVNUX0FHVF9XUkRBVEEoaSkJCSgweDEwKygweDEwKigoaSk+PjEpKSsoNCooKGkpJjEpKSkKKyNkZWZpbmUgTUlVX1RFU1RfQUdUX1JEREFUQV9MTwkJKDB4MTgpCisjZGVmaW5lIE1JVV9URVNUX0FHVF9SRERBVEFfSEkJCSgweDFjKQorI2RlZmluZSBNSVVfVEVTVF9BR1RfUkREQVRBX1VQUEVSX0xPCSgweDI4KQorI2RlZmluZSBNSVVfVEVTVF9BR1RfUkREQVRBX1VQUEVSX0hJCSgweDJjKQorI2RlZmluZSBNSVVfVEVTVF9BR1RfUkREQVRBKGkpCQkoMHgxOCsoMHgxMCooKGkpPj4xKSkrKDQqKChpKSYxKSkpCisKKyNkZWZpbmUgTUlVX1RFU1RfQUdUX0FERFJfTUFTSwkJMHhmZmZmZmZmOAorI2RlZmluZSBNSVVfVEVTVF9BR1RfVVBQRVJfQUREUihvZmYpCSgwKQorCisvKgorICogICBSZWdpc3RlciBvZmZzZXRzIGZvciBNUworICovCisjZGVmaW5lIFNJVV9URVNUX0FHVF9CQVNFCQkoMHg2MCkKKworI2RlZmluZSBTSVVfVEVTVF9BR1RfQUREUl9MTwkJKDB4MDQpCisjZGVmaW5lIFNJVV9URVNUX0FHVF9BRERSX0hJCQkoMHgxOCkKKyNkZWZpbmUgU0lVX1RFU1RfQUdUX1dSREFUQV9MTwkJKDB4MDgpCisjZGVmaW5lIFNJVV9URVNUX0FHVF9XUkRBVEFfSEkJCSgweDBjKQorI2RlZmluZSBTSVVfVEVTVF9BR1RfV1JEQVRBKGkpCQkoMHgwOCsoNCooaSkpKQorI2RlZmluZSBTSVVfVEVTVF9BR1RfUkREQVRBX0xPCQkoMHgxMCkKKyNkZWZpbmUgU0lVX1RFU1RfQUdUX1JEREFUQV9ISQkJKDB4MTQpCisjZGVmaW5lIFNJVV9URVNUX0FHVF9SRERBVEEoaSkJCSgweDEwKyg0KihpKSkpCisKKyNkZWZpbmUgU0lVX1RFU1RfQUdUX0FERFJfTUFTSwkJMHgzZmZmZjgKKyNkZWZpbmUgU0lVX1RFU1RfQUdUX1VQUEVSX0FERFIob2ZmKQkoKG9mZik+PjIyKQorCisvKiBYRyBMaW5rIHN0YXR1cyAqLworI2RlZmluZSBYR19MSU5LX1VQCTB4MTAKKyNkZWZpbmUgWEdfTElOS19ET1dOCTB4MjAKKworI2RlZmluZSBYR19MSU5LX1VQX1AzCTB4MDEKKyNkZWZpbmUgWEdfTElOS19ET1dOX1AzCTB4MDIKKyNkZWZpbmUgWEdfTElOS19TVEFURV9QM19NQVNLIDB4ZgorI2RlZmluZSBYR19MSU5LX1NUQVRFX1AzKHBjaWZuLCB2YWwpIFwKKwkoKCh2YWwpID4+ICgocGNpZm4pICogNCkpICYgWEdfTElOS19TVEFURV9QM19NQVNLKQorCisjZGVmaW5lIFAzX0xJTktfU1BFRURfTUhaCTEwMAorI2RlZmluZSBQM19MSU5LX1NQRUVEX01BU0sJMHhmZgorI2RlZmluZSBQM19MSU5LX1NQRUVEX1JFRyhwY2lmbikJXAorCShDUkJfUEZfTElOS19TUEVFRF8xICsgKCgocGNpZm4pIC8gNCkgKiA0KSkKKyNkZWZpbmUgUDNfTElOS19TUEVFRF9WQUwocGNpZm4sIHJlZykJXAorCSgoKHJlZykgPj4gKDggKiAoKHBjaWZuKSAmIDB4MykpKSAmIFAzX0xJTktfU1BFRURfTUFTSykKKworI2RlZmluZSBRTENOSUNfQ0FNX1JBTV9CQVNFCShRTENOSUNfQ1JCX0NBTSArIDB4MDIwMDApCisjZGVmaW5lIFFMQ05JQ19DQU1fUkFNKHJlZykJKFFMQ05JQ19DQU1fUkFNX0JBU0UgKyAocmVnKSkKKyNkZWZpbmUgUUxDTklDX0ZXX1ZFUlNJT05fTUFKT1IgKFFMQ05JQ19DQU1fUkFNKDB4MTUwKSkKKyNkZWZpbmUgUUxDTklDX0ZXX1ZFUlNJT05fTUlOT1IgKFFMQ05JQ19DQU1fUkFNKDB4MTU0KSkKKyNkZWZpbmUgUUxDTklDX0ZXX1ZFUlNJT05fU1VCCShRTENOSUNfQ0FNX1JBTSgweDE1OCkpCisjZGVmaW5lIFFMQ05JQ19ST01fTE9DS19JRAkoUUxDTklDX0NBTV9SQU0oMHgxMDApKQorI2RlZmluZSBRTENOSUNfUEhZX0xPQ0tfSUQJKFFMQ05JQ19DQU1fUkFNKDB4MTIwKSkKKyNkZWZpbmUgUUxDTklDX0NSQl9XSU5fTE9DS19JRAkoUUxDTklDX0NBTV9SQU0oMHgxMjQpKQorCisjZGVmaW5lIE5JQ19DUkJfQkFTRQkJKFFMQ05JQ19DQU1fUkFNKDB4MjAwKSkKKyNkZWZpbmUgTklDX0NSQl9CQVNFXzIJCShRTENOSUNfQ0FNX1JBTSgweDcwMCkpCisjZGVmaW5lIFFMQ05JQ19SRUcoWCkJCShOSUNfQ1JCX0JBU0UrKFgpKQorI2RlZmluZSBRTENOSUNfUkVHXzIoWCkgCShOSUNfQ1JCX0JBU0VfMisoWCkpCisKKyNkZWZpbmUgUUxDTklDX0NEUlBfQ1JCX09GRlNFVAkJKFFMQ05JQ19SRUcoMHgxOCkpCisjZGVmaW5lIFFMQ05JQ19BUkcxX0NSQl9PRkZTRVQJCShRTENOSUNfUkVHKDB4MWMpKQorI2RlZmluZSBRTENOSUNfQVJHMl9DUkJfT0ZGU0VUCQkoUUxDTklDX1JFRygweDIwKSkKKyNkZWZpbmUgUUxDTklDX0FSRzNfQ1JCX09GRlNFVAkJKFFMQ05JQ19SRUcoMHgyNCkpCisjZGVmaW5lIFFMQ05JQ19TSUdOX0NSQl9PRkZTRVQJCShRTENOSUNfUkVHKDB4MjgpKQorCisjZGVmaW5lIENSQl9DTURQRUdfU1RBVEUJCShRTENOSUNfUkVHKDB4NTApKQorI2RlZmluZSBDUkJfUkNWUEVHX1NUQVRFCQkoUUxDTklDX1JFRygweDEzYykpCisKKyNkZWZpbmUgQ1JCX1hHX1NUQVRFX1AzIAkJKFFMQ05JQ19SRUcoMHg5OCkpCisjZGVmaW5lIENSQl9QRl9MSU5LX1NQRUVEXzEJCShRTENOSUNfUkVHKDB4ZTgpKQorI2RlZmluZSBDUkJfUEZfTElOS19TUEVFRF8yCQkoUUxDTklDX1JFRygweGVjKSkKKworI2RlZmluZSBDUkJfTVBPUlRfTU9ERQkJCShRTENOSUNfUkVHKDB4YzQpKQorI2RlZmluZSBDUkJfRE1BX1NISUZUCQkJKFFMQ05JQ19SRUcoMHhjYykpCisKKyNkZWZpbmUgQ1JCX1RFTVBfU1RBVEUJCQkoUUxDTklDX1JFRygweDFiNCkpCisKKyNkZWZpbmUgQ1JCX1YyUF8wCQkJKFFMQ05JQ19SRUcoMHgyOTApKQorI2RlZmluZSBDUkJfVjJQKHBvcnQpCQkJKENSQl9WMlBfMCsoKHBvcnQpKjQpKQorI2RlZmluZSBDUkJfRFJJVkVSX1ZFUlNJT04JCShRTENOSUNfUkVHKDB4MmEwKSkKKworI2RlZmluZSBDUkJfU1dfSU5UX01BU0tfMAkJKFFMQ05JQ19SRUcoMHgxZDgpKQorI2RlZmluZSBDUkJfU1dfSU5UX01BU0tfMQkJKFFMQ05JQ19SRUcoMHgxZTApKQorI2RlZmluZSBDUkJfU1dfSU5UX01BU0tfMgkJKFFMQ05JQ19SRUcoMHgxZTQpKQorI2RlZmluZSBDUkJfU1dfSU5UX01BU0tfMwkJKFFMQ05JQ19SRUcoMHgxZTgpKQorCisjZGVmaW5lIENSQl9GV19DQVBBQklMSVRJRVNfMQkJKFFMQ05JQ19DQU1fUkFNKDB4MTI4KSkKKyNkZWZpbmUgQ1JCX01BQ19CTE9DS19TVEFSVAkJKFFMQ05JQ19DQU1fUkFNKDB4MWMwKSkKKworLyoKKyAqIGNhcGFiaWxpdGllcyByZWdpc3RlciwgY2FuIGJlIHVzZWQgdG8gc2VsZWN0aXZlbHkgZW5hYmxlL2Rpc2FibGUgZmVhdHVyZXMKKyAqIGZvciBiYWNrd2FyZCBjb21wYWJpbGl0eQorICovCisjZGVmaW5lIENSQl9OSUNfQ0FQQUJJTElUSUVTX0hPU1QJUUxDTklDX1JFRygweDFhOCkKKyNkZWZpbmUgQ1JCX05JQ19DQVBBQklMSVRJRVNfRlcgCVFMQ05JQ19SRUcoMHgxZGMpCisjZGVmaW5lIENSQl9OSUNfTVNJX01PREVfSE9TVAkJUUxDTklDX1JFRygweDI3MCkKKyNkZWZpbmUgQ1JCX05JQ19NU0lfTU9ERV9GVwkgIAlRTENOSUNfUkVHKDB4Mjc0KQorCisjZGVmaW5lIElOVFJfU0NIRU1FX1BFUlBPUlQJICAgICAgCTB4MQorI2RlZmluZSBNU0lfTU9ERV9NVUxUSUZVTkMJICAgICAgCTB4MQorCisvKiB1c2VkIGZvciBldGh0b29sIHRlc3RzICovCisjZGVmaW5lIENSQl9TQ1JBVENIUEFEX1RFU1QJICAgIFFMQ05JQ19SRUcoMHgyODApCisKKy8qCisgKiBDcmJQb3J0UGhhbkNudHJIaS9MbyBpcyB1c2VkIHRvIHBhc3MgdGhlIGFkZHJlc3Mgb2YgSG9zdFBoYW50b21JbmRleCBhZGRyZXNzCisgKiB3aGljaCBjYW4gYmUgcmVhZCBieSB0aGUgUGhhbnRvbSBob3N0IHRvIGdldCBwcm9kdWNlci9jb25zdW1lciBpbmRleGVzIGZyb20KKyAqIFBoYW50b20vQ2FzcGVyLiBJZiBpdCBpcyBub3QgSE9TVF9TSEFSRURfTUVNT1JZLCB0aGVuIHRoZSBmb2xsb3dpbmcKKyAqIHJlZ2lzdGVycyB3aWxsIGJlIHVzZWQgZm9yIHRoZSBhZGRyZXNzZXMgb2YgdGhlIHJpbmcncyBzaGFyZWQgbWVtb3J5CisgKiBvbiB0aGUgUGhhbnRvbS4KKyAqLworCisjZGVmaW5lIHFsY25pY19nZXRfdGVtcF92YWwoeCkJCSgoeCkgPj4gMTYpCisjZGVmaW5lIHFsY25pY19nZXRfdGVtcF9zdGF0ZSh4KQkoKHgpICYgMHhmZmZmKQorI2RlZmluZSBxbGNuaWNfZW5jb2RlX3RlbXAodmFsLCBzdGF0ZSkJKCgodmFsKSA8PCAxNikgfCAoc3RhdGUpKQorCisvKgorICogVGVtcGVyYXR1cmUgY29udHJvbC4KKyAqLworZW51bSB7CisJUUxDTklDX1RFTVBfTk9STUFMID0gMHgxLAkvKiBOb3JtYWwgb3BlcmF0aW5nIHJhbmdlICovCisJUUxDTklDX1RFTVBfV0FSTiwJLyogU291bmQgYWxlcnQsIHRlbXBlcmF0dXJlIGdldHRpbmcgaGlnaCAqLworCVFMQ05JQ19URU1QX1BBTklDCS8qIEZhdGFsIGVycm9yLCBoYXJkd2FyZSBoYXMgc2h1dCBkb3duLiAqLworfTsKKworLyogTG9jayBJRHMgZm9yIFBIWSBsb2NrICovCisjZGVmaW5lIFBIWV9MT0NLX0RSSVZFUgkJMHg0NDUyNDk1NgorCisvKiBVc2VkIGZvciBQUyBQQ0kgTWVtb3J5IGFjY2VzcyAqLworI2RlZmluZSBQQ0lYX1BTX09QX0FERFJfTE8JKDB4MTAwMDApCisvKiAgIHZpYSBDUkIgIChQUyBzaWRlIG9ubHkpICAgICAqLworI2RlZmluZSBQQ0lYX1BTX09QX0FERFJfSEkJKDB4MTAwMDQpCisKKyNkZWZpbmUgUENJWF9JTlRfVkVDVE9SIAkoMHgxMDEwMCkKKyNkZWZpbmUgUENJWF9JTlRfTUFTSwkJKDB4MTAxMDQpCisKKyNkZWZpbmUgUENJWF9PQ01fV0lORE9XCQkoMHgxMDgwMCkKKyNkZWZpbmUgUENJWF9PQ01fV0lORE9XX1JFRyhmdW5jKQkoUENJWF9PQ01fV0lORE9XICsgMHgyMCAqIChmdW5jKSkKKworI2RlZmluZSBQQ0lYX1RBUkdFVF9TVEFUVVMJKDB4MTAxMTgpCisjZGVmaW5lIFBDSVhfVEFSR0VUX1NUQVRVU19GMQkoMHgxMDE2MCkKKyNkZWZpbmUgUENJWF9UQVJHRVRfU1RBVFVTX0YyCSgweDEwMTY0KQorI2RlZmluZSBQQ0lYX1RBUkdFVF9TVEFUVVNfRjMJKDB4MTAxNjgpCisjZGVmaW5lIFBDSVhfVEFSR0VUX1NUQVRVU19GNAkoMHgxMDM2MCkKKyNkZWZpbmUgUENJWF9UQVJHRVRfU1RBVFVTX0Y1CSgweDEwMzY0KQorI2RlZmluZSBQQ0lYX1RBUkdFVF9TVEFUVVNfRjYJKDB4MTAzNjgpCisjZGVmaW5lIFBDSVhfVEFSR0VUX1NUQVRVU19GNwkoMHgxMDM2YykKKworI2RlZmluZSBQQ0lYX1RBUkdFVF9NQVNLCSgweDEwMTI4KQorI2RlZmluZSBQQ0lYX1RBUkdFVF9NQVNLX0YxCSgweDEwMTcwKQorI2RlZmluZSBQQ0lYX1RBUkdFVF9NQVNLX0YyCSgweDEwMTc0KQorI2RlZmluZSBQQ0lYX1RBUkdFVF9NQVNLX0YzCSgweDEwMTc4KQorI2RlZmluZSBQQ0lYX1RBUkdFVF9NQVNLX0Y0CSgweDEwMzcwKQorI2RlZmluZSBQQ0lYX1RBUkdFVF9NQVNLX0Y1CSgweDEwMzc0KQorI2RlZmluZSBQQ0lYX1RBUkdFVF9NQVNLX0Y2CSgweDEwMzc4KQorI2RlZmluZSBQQ0lYX1RBUkdFVF9NQVNLX0Y3CSgweDEwMzdjKQorCisjZGVmaW5lIFBDSVhfTVNJX0YoaSkJCSgweDEzMDAwKygoaSkqNCkpCisKKyNkZWZpbmUgUUxDTklDX1BDSVhfUEhfUkVHKHJlZykJKFFMQ05JQ19DUkJfUENJRSArIChyZWcpKQorI2RlZmluZSBRTENOSUNfUENJWF9QU19SRUcocmVnKQkoUUxDTklDX0NSQl9QQ0lYX01EICsgKHJlZykpCisjZGVmaW5lIFFMQ05JQ19QQ0lFX1JFRyhyZWcpCShRTENOSUNfQ1JCX1BDSUUgKyAocmVnKSkKKworI2RlZmluZSBQQ0lFX1NFTTBfTE9DSwkJKDB4MWMwMDApCisjZGVmaW5lIFBDSUVfU0VNMF9VTkxPQ0sJKDB4MWMwMDQpCisjZGVmaW5lIFBDSUVfU0VNX0xPQ0soTikJKFBDSUVfU0VNMF9MT0NLICsgOCooTikpCisjZGVmaW5lIFBDSUVfU0VNX1VOTE9DSyhOKQkoUENJRV9TRU0wX1VOTE9DSyArIDgqKE4pKQorCisjZGVmaW5lIFBDSUVfU0VUVVBfRlVOQ1RJT04JKDB4MTIwNDApCisjZGVmaW5lIFBDSUVfU0VUVVBfRlVOQ1RJT04yCSgweDEyMDQ4KQorI2RlZmluZSBQQ0lFX01JU0NDRkdfUkMgICAgICAgICAoMHgxMjA2YykKKyNkZWZpbmUgUENJRV9UR1RfU1BMSVRfQ0hJQ0tFTgkoMHgxMjA4MCkKKyNkZWZpbmUgUENJRV9DSElDS0VOMwkJKDB4MTIwYzgpCisKKyNkZWZpbmUgSVNSX0lOVF9TVEFURV9SRUcgICAgICAgKFFMQ05JQ19QQ0lYX1BTX1JFRyhQQ0lFX01JU0NDRkdfUkMpKQorI2RlZmluZSBQQ0lFX01BWF9NQVNURVJfU1BMSVQJKDB4MTQwNDgpCisKKyNkZWZpbmUgUUxDTklDX1BPUlRfTU9ERV9OT05FCQkwCisjZGVmaW5lIFFMQ05JQ19QT1JUX01PREVfWEcJCTEKKyNkZWZpbmUgUUxDTklDX1BPUlRfTU9ERV9HQgkJMgorI2RlZmluZSBRTENOSUNfUE9SVF9NT0RFXzgwMl8zX0FQCTMKKyNkZWZpbmUgUUxDTklDX1BPUlRfTU9ERV9BVVRPX05FRwk0CisjZGVmaW5lIFFMQ05JQ19QT1JUX01PREVfQVVUT19ORUdfMUcJNQorI2RlZmluZSBRTENOSUNfUE9SVF9NT0RFX0FVVE9fTkVHX1hHCTYKKyNkZWZpbmUgUUxDTklDX1BPUlRfTU9ERV9BRERSCQkoUUxDTklDX0NBTV9SQU0oMHgyNCkpCisjZGVmaW5lIFFMQ05JQ19XT0xfUE9SVF9NT0RFCQkoUUxDTklDX0NBTV9SQU0oMHgxOTgpKQorCisjZGVmaW5lIFFMQ05JQ19XT0xfQ09ORklHX05WCQkoUUxDTklDX0NBTV9SQU0oMHgxODQpKQorI2RlZmluZSBRTENOSUNfV09MX0NPTkZJRwkJKFFMQ05JQ19DQU1fUkFNKDB4MTg4KSkKKworI2RlZmluZSBRTENOSUNfUEVHX1RVTkVfTU5fUFJFU0VOVAkweDEKKyNkZWZpbmUgUUxDTklDX1BFR19UVU5FX0NBUEFCSUxJVFkJKFFMQ05JQ19DQU1fUkFNKDB4MDJjKSkKKworI2RlZmluZSBRTENOSUNfRE1BX1dBVENIRE9HX0NUUkwJKFFMQ05JQ19DQU1fUkFNKDB4MTQpKQorI2RlZmluZSBRTENOSUNfUEVHX0FMSVZFX0NPVU5URVIJKFFMQ05JQ19DQU1fUkFNKDB4YjApKQorI2RlZmluZSBRTENOSUNfUEVHX0hBTFRfU1RBVFVTMSAJKFFMQ05JQ19DQU1fUkFNKDB4YTgpKQorI2RlZmluZSBRTENOSUNfUEVHX0hBTFRfU1RBVFVTMiAJKFFMQ05JQ19DQU1fUkFNKDB4YWMpKQorI2RlZmluZSBRTENOSUNfQ1JCX0RFVl9SRUZfQ09VTlQJKFFMQ05JQ19DQU1fUkFNKDB4MTM4KSkKKyNkZWZpbmUgUUxDTklDX0NSQl9ERVZfU1RBVEUJCShRTENOSUNfQ0FNX1JBTSgweDE0MCkpCisKKyNkZWZpbmUgUUxDTklDX0NSQl9EUlZfU1RBVEUgICAgICAgICAgICAgICAoUUxDTklDX0NBTV9SQU0oMHgxNDQpKQorI2RlZmluZSBRTENOSUNfQ1JCX0RSVl9TQ1JBVENIICAgICAgICAgICAgIChRTENOSUNfQ0FNX1JBTSgweDE0OCkpCisjZGVmaW5lIFFMQ05JQ19DUkJfREVWX1BBUlRJVElPTl9JTkZPICAgICAgKFFMQ05JQ19DQU1fUkFNKDB4MTRjKSkKKyNkZWZpbmUgUUxDTklDX0NSQl9EUlZfSURDX1ZFUiAgICAgICAgICAgICAoUUxDTklDX0NBTV9SQU0oMHgxNGMpKQorCisJCSAvKiBEZXZpY2UgU3RhdGUgKi8KKyNkZWZpbmUgUUxDTklDX0RFVl9DT0xEIAkJMQorI2RlZmluZSBRTENOSUNfREVWX0lOSVRBTElaSU5HCQkyCisjZGVmaW5lIFFMQ05JQ19ERVZfUkVBRFkJCTMKKyNkZWZpbmUgUUxDTklDX0RFVl9ORUVEX1JFU0VUCQk0CisjZGVmaW5lIFFMQ05JQ19ERVZfTkVFRF9RVUlTQ0VOVAk1CisjZGVmaW5lIFFMQ05JQ19ERVZfRkFJTEVECQk2CisKKyNkZWZpbmUgUUxDTklDX1JDT0RFX0RSSVZFUl9JTkZPCQkweDIwMDAwMDAwCisjZGVmaW5lIFFMQ05JQ19SQ09ERV9EUklWRVJfQ0FOX1JFTE9BRAkJMHg0MDAwMDAwMAorI2RlZmluZSBRTENOSUNfUkNPREVfRkFUQUxfRVJST1IJCTB4ODAwMDAwMDAKKyNkZWZpbmUgUUxDTklDX0ZXRVJST1JfUEVHTlVNKGNvZGUpCQkoKGNvZGUpICYgMHhmZikKKyNkZWZpbmUgUUxDTklDX0ZXRVJST1JfQ09ERShjb2RlKQkJKChjb2RlID4+IDgpICYgMHhmZmZmZikKKworI2RlZmluZSBGV19QT0xMX0RFTEFZCQkJKDIgKiBIWikKKyNkZWZpbmUgRldfRkFJTF9USFJFU0gJCQkzCisjZGVmaW5lIEZXX1BPTExfVEhSRVNICQkJMTAKKworI2RlZmluZQlJU1JfTVNJX0lOVF9UUklHR0VSKEZVTkMpIChRTENOSUNfUENJWF9QU19SRUcoUENJWF9NU0lfRihGVU5DKSkpCisjZGVmaW5lIElTUl9MRUdBQ1lfSU5UX1RSSUdHRVJFRChWQUwpCSgoKFZBTCkgJiAweDMwMCkgPT0gMHgyMDApCisKKy8qCisgKiBQQ0kgSW50ZXJydXB0IFZlY3RvciBWYWx1ZXMuCisgKi8KKyNkZWZpbmUJUENJWF9JTlRfVkVDVE9SX0JJVF9GMAkweDAwODAKKyNkZWZpbmUJUENJWF9JTlRfVkVDVE9SX0JJVF9GMQkweDAxMDAKKyNkZWZpbmUJUENJWF9JTlRfVkVDVE9SX0JJVF9GMgkweDAyMDAKKyNkZWZpbmUJUENJWF9JTlRfVkVDVE9SX0JJVF9GMwkweDA0MDAKKyNkZWZpbmUJUENJWF9JTlRfVkVDVE9SX0JJVF9GNAkweDA4MDAKKyNkZWZpbmUJUENJWF9JTlRfVkVDVE9SX0JJVF9GNQkweDEwMDAKKyNkZWZpbmUJUENJWF9JTlRfVkVDVE9SX0JJVF9GNgkweDIwMDAKKyNkZWZpbmUJUENJWF9JTlRfVkVDVE9SX0JJVF9GNwkweDQwMDAKKworc3RydWN0IHFsY25pY19sZWdhY3lfaW50cl9zZXQgeworCXUzMglpbnRfdmVjX2JpdDsKKwl1MzIJdGd0X3N0YXR1c19yZWc7CisJdTMyCXRndF9tYXNrX3JlZzsKKwl1MzIJcGNpX2ludF9yZWc7Cit9OworCisjZGVmaW5lCVFMQ05JQ19MRUdBQ1lfSU5UUl9DT05GSUcJCQkJCVwKK3sJCQkJCQkJCQlcCisJewkJCQkJCQkJXAorCQkuaW50X3ZlY19iaXQJPQlQQ0lYX0lOVF9WRUNUT1JfQklUX0YwLAkJXAorCQkudGd0X3N0YXR1c19yZWcJPQlJU1JfSU5UX1RBUkdFVF9TVEFUVVMsCQlcCisJCS50Z3RfbWFza19yZWcJPQlJU1JfSU5UX1RBUkdFVF9NQVNLLAkJXAorCQkucGNpX2ludF9yZWcJPQlJU1JfTVNJX0lOVF9UUklHR0VSKDApIH0sCVwKKwkJCQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCS5pbnRfdmVjX2JpdAk9CVBDSVhfSU5UX1ZFQ1RPUl9CSVRfRjEsCQlcCisJCS50Z3Rfc3RhdHVzX3JlZwk9CUlTUl9JTlRfVEFSR0VUX1NUQVRVU19GMSwJXAorCQkudGd0X21hc2tfcmVnCT0JSVNSX0lOVF9UQVJHRVRfTUFTS19GMSwJCVwKKwkJLnBjaV9pbnRfcmVnCT0JSVNSX01TSV9JTlRfVFJJR0dFUigxKSB9LAlcCisJCQkJCQkJCQlcCisJewkJCQkJCQkJXAorCQkuaW50X3ZlY19iaXQJPQlQQ0lYX0lOVF9WRUNUT1JfQklUX0YyLAkJXAorCQkudGd0X3N0YXR1c19yZWcJPQlJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjIsCVwKKwkJLnRndF9tYXNrX3JlZwk9CUlTUl9JTlRfVEFSR0VUX01BU0tfRjIsCQlcCisJCS5wY2lfaW50X3JlZwk9CUlTUl9NU0lfSU5UX1RSSUdHRVIoMikgfSwJXAorCQkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJLmludF92ZWNfYml0CT0JUENJWF9JTlRfVkVDVE9SX0JJVF9GMywJCVwKKwkJLnRndF9zdGF0dXNfcmVnCT0JSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0YzLAlcCisJCS50Z3RfbWFza19yZWcJPQlJU1JfSU5UX1RBUkdFVF9NQVNLX0YzLAkJXAorCQkucGNpX2ludF9yZWcJPQlJU1JfTVNJX0lOVF9UUklHR0VSKDMpIH0sCVwKKwkJCQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCS5pbnRfdmVjX2JpdAk9CVBDSVhfSU5UX1ZFQ1RPUl9CSVRfRjQsCQlcCisJCS50Z3Rfc3RhdHVzX3JlZwk9CUlTUl9JTlRfVEFSR0VUX1NUQVRVU19GNCwJXAorCQkudGd0X21hc2tfcmVnCT0JSVNSX0lOVF9UQVJHRVRfTUFTS19GNCwJCVwKKwkJLnBjaV9pbnRfcmVnCT0JSVNSX01TSV9JTlRfVFJJR0dFUig0KSB9LAlcCisJCQkJCQkJCQlcCisJewkJCQkJCQkJXAorCQkuaW50X3ZlY19iaXQJPQlQQ0lYX0lOVF9WRUNUT1JfQklUX0Y1LAkJXAorCQkudGd0X3N0YXR1c19yZWcJPQlJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjUsCVwKKwkJLnRndF9tYXNrX3JlZwk9CUlTUl9JTlRfVEFSR0VUX01BU0tfRjUsCQlcCisJCS5wY2lfaW50X3JlZwk9CUlTUl9NU0lfSU5UX1RSSUdHRVIoNSkgfSwJXAorCQkJCQkJCQkJXAorCXsJCQkJCQkJCVwKKwkJLmludF92ZWNfYml0CT0JUENJWF9JTlRfVkVDVE9SX0JJVF9GNiwJCVwKKwkJLnRndF9zdGF0dXNfcmVnCT0JSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0Y2LAlcCisJCS50Z3RfbWFza19yZWcJPQlJU1JfSU5UX1RBUkdFVF9NQVNLX0Y2LAkJXAorCQkucGNpX2ludF9yZWcJPQlJU1JfTVNJX0lOVF9UUklHR0VSKDYpIH0sCVwKKwkJCQkJCQkJCVwKKwl7CQkJCQkJCQlcCisJCS5pbnRfdmVjX2JpdAk9CVBDSVhfSU5UX1ZFQ1RPUl9CSVRfRjcsCQlcCisJCS50Z3Rfc3RhdHVzX3JlZwk9CUlTUl9JTlRfVEFSR0VUX1NUQVRVU19GNywJXAorCQkudGd0X21hc2tfcmVnCT0JSVNSX0lOVF9UQVJHRVRfTUFTS19GNywJCVwKKwkJLnBjaV9pbnRfcmVnCT0JSVNSX01TSV9JTlRfVFJJR0dFUig3KSB9LAlcCit9CisKKy8qIE5JVSBSRUdTICovCisKKyNkZWZpbmUgX3FsY25pY19jcmJfZ2V0X2JpdCh2YXIsIGJpdCkgICgodmFyID4+IGJpdCkgJiAweDEpCisKKy8qCisgKiBOSVUgR0IgTUFDIENvbmZpZyBSZWdpc3RlciAwIChhcHBsaWVzIHRvIEdCMCwgR0IxLCBHQjIsIEdCMykKKyAqCisgKglCaXQgMCA6IGVuYWJsZV90eCA9PiAxOmVuYWJsZSBmcmFtZSB4bWl0LCAwOmRpc2FibGUKKyAqCUJpdCAxIDogdHhfc3luY2VkID0+IFIvTzogeG1pdCBlbmFibGUgc3luY2hlZCB0byB4bWl0IHN0cmVhbQorICoJQml0IDIgOiBlbmFibGVfcnggPT4gMTplbmFibGUgZnJhbWUgcmVjdiwgMDpkaXNhYmxlCisgKglCaXQgMyA6IHJ4X3N5bmNlZCA9PiBSL086IHJlY3YgZW5hYmxlIHN5bmNoZWQgdG8gcmVjdiBzdHJlYW0KKyAqCUJpdCA0IDogdHhfZmxvd2N0bCA9PiAxOmVuYWJsZSBwYXVzZSBmcmFtZSBnZW5lcmF0aW9uLCAwOmRpc2FibGUKKyAqCUJpdCA1IDogcnhfZmxvd2N0bCA9PiAxOmFjdCBvbiByZWN2J2QgcGF1c2UgZnJhbWVzLCAwOmlnbm9yZQorICoJQml0IDggOiBsb29wYmFjayA9PiAxOmxvb3AgTUFDIHhtaXRzIHRvIE1BQyByZWN2cywgMDpub3JtYWwKKyAqCUJpdCAxNjogdHhfcmVzZXRfcGIgPT4gMTpyZXNldCBmcmFtZSB4bWl0IHByb3RvY29sIGJsaywgMDpuby1vcAorICoJQml0IDE3OiByeF9yZXNldF9wYiA9PiAxOnJlc2V0IGZyYW1lIHJlY3YgcHJvdG9jb2wgYmxrLCAwOm5vLW9wCisgKglCaXQgMTg6IHR4X3Jlc2V0X21hYyA9PiAxOnJlc2V0IGRhdGEvY3RsIG11bHRpcGxleGVyIGJsaywgMDpuby1vcAorICoJQml0IDE5OiByeF9yZXNldF9tYWMgPT4gMTpyZXNldCBjdGwgZnJhbWVzICYgdGltZXJzIGJsaywgMDpuby1vcAorICoJQml0IDMxOiBzb2Z0X3Jlc2V0ID0+IDE6cmVzZXQgdGhlIE1BQyBhbmQgdGhlIFNFUkRFUywgMDpuby1vcAorICovCisjZGVmaW5lIHFsY25pY19nYl9yeF9mbG93Y3RsKGNvbmZpZ193b3JkKQlcCisJKChjb25maWdfd29yZCkgfD0gMSA8PCA1KQorI2RlZmluZSBxbGNuaWNfZ2JfZ2V0X3J4X2Zsb3djdGwoY29uZmlnX3dvcmQpCVwKKwlfcWxjbmljX2NyYl9nZXRfYml0KChjb25maWdfd29yZCksIDUpCisjZGVmaW5lIHFsY25pY19nYl91bnNldF9yeF9mbG93Y3RsKGNvbmZpZ193b3JkKQlcCisJKChjb25maWdfd29yZCkgJj0gfigxIDw8IDUpKQorCisvKgorICogTklVIEdCIFBhdXNlIEN0bCBSZWdpc3RlcgorICovCisKKyNkZWZpbmUgcWxjbmljX2diX3NldF9nYjBfbWFzayhjb25maWdfd29yZCkgICAgXAorCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMCkKKyNkZWZpbmUgcWxjbmljX2diX3NldF9nYjFfbWFzayhjb25maWdfd29yZCkgICAgXAorCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMikKKyNkZWZpbmUgcWxjbmljX2diX3NldF9nYjJfbWFzayhjb25maWdfd29yZCkgICAgXAorCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgNCkKKyNkZWZpbmUgcWxjbmljX2diX3NldF9nYjNfbWFzayhjb25maWdfd29yZCkgICAgXAorCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgNikKKworI2RlZmluZSBxbGNuaWNfZ2JfZ2V0X2diMF9tYXNrKGNvbmZpZ193b3JkKSAgICBcCisJX3FsY25pY19jcmJfZ2V0X2JpdCgoY29uZmlnX3dvcmQpLCAwKQorI2RlZmluZSBxbGNuaWNfZ2JfZ2V0X2diMV9tYXNrKGNvbmZpZ193b3JkKSAgICBcCisJX3FsY25pY19jcmJfZ2V0X2JpdCgoY29uZmlnX3dvcmQpLCAyKQorI2RlZmluZSBxbGNuaWNfZ2JfZ2V0X2diMl9tYXNrKGNvbmZpZ193b3JkKSAgICBcCisJX3FsY25pY19jcmJfZ2V0X2JpdCgoY29uZmlnX3dvcmQpLCA0KQorI2RlZmluZSBxbGNuaWNfZ2JfZ2V0X2diM19tYXNrKGNvbmZpZ193b3JkKSAgICBcCisJX3FsY25pY19jcmJfZ2V0X2JpdCgoY29uZmlnX3dvcmQpLCA2KQorCisjZGVmaW5lIHFsY25pY19nYl91bnNldF9nYjBfbWFzayhjb25maWdfd29yZCkgIFwKKwkoKGNvbmZpZ193b3JkKSAmPSB+KDEgPDwgMCkpCisjZGVmaW5lIHFsY25pY19nYl91bnNldF9nYjFfbWFzayhjb25maWdfd29yZCkgIFwKKwkoKGNvbmZpZ193b3JkKSAmPSB+KDEgPDwgMikpCisjZGVmaW5lIHFsY25pY19nYl91bnNldF9nYjJfbWFzayhjb25maWdfd29yZCkgIFwKKwkoKGNvbmZpZ193b3JkKSAmPSB+KDEgPDwgNCkpCisjZGVmaW5lIHFsY25pY19nYl91bnNldF9nYjNfbWFzayhjb25maWdfd29yZCkgIFwKKwkoKGNvbmZpZ193b3JkKSAmPSB+KDEgPDwgNikpCisKKy8qCisgKiBOSVUgWEcgUGF1c2UgQ3RsIFJlZ2lzdGVyCisgKgorICogICAgICBCaXQgMCAgICAgICA6IHhnMF9tYXNrID0+IDE6ZGlzYWJsZSB0eCBwYXVzZSBmcmFtZXMKKyAqICAgICAgQml0IDEgICAgICAgOiB4ZzBfcmVxdWVzdCA9PiAxOnJlcXVlc3Qgc2luZ2xlIHBhdXNlIGZyYW1lCisgKiAgICAgIEJpdCAyICAgICAgIDogeGcwX29uX29mZiA9PiAxOnJlcXVlc3QgaXMgcGF1c2Ugb24sIDA6b2ZmCisgKiAgICAgIEJpdCAzICAgICAgIDogeGcxX21hc2sgPT4gMTpkaXNhYmxlIHR4IHBhdXNlIGZyYW1lcworICogICAgICBCaXQgNCAgICAgICA6IHhnMV9yZXF1ZXN0ID0+IDE6cmVxdWVzdCBzaW5nbGUgcGF1c2UgZnJhbWUKKyAqICAgICAgQml0IDUgICAgICAgOiB4ZzFfb25fb2ZmID0+IDE6cmVxdWVzdCBpcyBwYXVzZSBvbiwgMDpvZmYKKyAqLworCisjZGVmaW5lIHFsY25pY194Z19zZXRfeGcwX21hc2soY29uZmlnX3dvcmQpICAgIFwKKwkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDApCisjZGVmaW5lIHFsY25pY194Z19zZXRfeGcxX21hc2soY29uZmlnX3dvcmQpICAgIFwKKwkoKGNvbmZpZ193b3JkKSB8PSAxIDw8IDMpCisKKyNkZWZpbmUgcWxjbmljX3hnX2dldF94ZzBfbWFzayhjb25maWdfd29yZCkgICAgXAorCV9xbGNuaWNfY3JiX2dldF9iaXQoKGNvbmZpZ193b3JkKSwgMCkKKyNkZWZpbmUgcWxjbmljX3hnX2dldF94ZzFfbWFzayhjb25maWdfd29yZCkgICAgXAorCV9xbGNuaWNfY3JiX2dldF9iaXQoKGNvbmZpZ193b3JkKSwgMykKKworI2RlZmluZSBxbGNuaWNfeGdfdW5zZXRfeGcwX21hc2soY29uZmlnX3dvcmQpICBcCisJKChjb25maWdfd29yZCkgJj0gfigxIDw8IDApKQorI2RlZmluZSBxbGNuaWNfeGdfdW5zZXRfeGcxX21hc2soY29uZmlnX3dvcmQpICBcCisJKChjb25maWdfd29yZCkgJj0gfigxIDw8IDMpKQorCisvKgorICogTklVIFhHIFBhdXNlIEN0bCBSZWdpc3RlcgorICoKKyAqICAgICAgQml0IDAgICAgICAgOiB4ZzBfbWFzayA9PiAxOmRpc2FibGUgdHggcGF1c2UgZnJhbWVzCisgKiAgICAgIEJpdCAxICAgICAgIDogeGcwX3JlcXVlc3QgPT4gMTpyZXF1ZXN0IHNpbmdsZSBwYXVzZSBmcmFtZQorICogICAgICBCaXQgMiAgICAgICA6IHhnMF9vbl9vZmYgPT4gMTpyZXF1ZXN0IGlzIHBhdXNlIG9uLCAwOm9mZgorICogICAgICBCaXQgMyAgICAgICA6IHhnMV9tYXNrID0+IDE6ZGlzYWJsZSB0eCBwYXVzZSBmcmFtZXMKKyAqICAgICAgQml0IDQgICAgICAgOiB4ZzFfcmVxdWVzdCA9PiAxOnJlcXVlc3Qgc2luZ2xlIHBhdXNlIGZyYW1lCisgKiAgICAgIEJpdCA1ICAgICAgIDogeGcxX29uX29mZiA9PiAxOnJlcXVlc3QgaXMgcGF1c2Ugb24sIDA6b2ZmCisgKi8KKworLyoKKyAqIFBIWS1TcGVjaWZpYyBNSUkgY29udHJvbC9zdGF0dXMgcmVnaXN0ZXJzLgorICovCisjZGVmaW5lIFFMQ05JQ19OSVVfR0JfTUlJX01HTVRfQUREUl9BVVRPTkVHCQk0CisjZGVmaW5lIFFMQ05JQ19OSVVfR0JfTUlJX01HTVRfQUREUl9QSFlfU1RBVFVTCQkxNworCisvKgorICogUEhZLVNwZWNpZmljIFN0YXR1cyBSZWdpc3RlciAocmVnIDE3KS4KKyAqCisgKiBCaXQgMCAgICAgIDogamFiYmVyID0+IDE6amFiYmVyIGRldGVjdGVkLCAwOm5vdAorICogQml0IDEgICAgICA6IHBvbGFyaXR5ID0+IDE6cG9sYXJpdHkgcmV2ZXJzZWQsIDA6bm9ybWFsCisgKiBCaXQgMiAgICAgIDogcmVjdnBhdXNlID0+IDE6cmVjZWl2ZSBwYXVzZSBlbmFibGVkLCAwOmRpc2FibGVkCisgKiBCaXQgMyAgICAgIDogeG1pdHBhdXNlID0+IDE6dHJhbnNtaXQgcGF1c2UgZW5hYmxlZCwgMDpkaXNhYmxlZAorICogQml0IDQgICAgICA6IGVuZXJneWRldGVjdCA9PiAxOnNsZWVwLCAwOmFjdGl2ZQorICogQml0IDUgICAgICA6IGRvd25zaGlmdCA9PiAxOmRvd25zaGlmdCwgMDpubyBkb3duc2hpZnQKKyAqIEJpdCA2ICAgICAgOiBjcm9zc292ZXIgPT4gMTpNRElYIChjcm9zc292ZXIpLCAwOk1ESSAobm8gY3Jvc3NvdmVyKQorICogQml0cyA3LTkgICA6IGNhYmxlbGVuID0+IG5vdCB2YWxpZCBpbiAxME1iL3MgbW9kZQorICoJCQkwOjw1MG0sIDE6NTAtODBtLCAyOjgwLTExMG0sIDM6MTEwLTE0MG0sIDQ6PjE0MG0KKyAqIEJpdCAxMCAgICAgOiBsaW5rID0+IDE6bGluayB1cCwgMDpsaW5rIGRvd24KKyAqIEJpdCAxMSAgICAgOiByZXNvbHZlZCA9PiAxOnNwZWVkIGFuZCBkdXBsZXggcmVzb2x2ZWQsIDA6bm90IHlldAorICogQml0IDEyICAgICA6IHBhZ2VyY3ZkID0+IDE6cGFnZSByZWNlaXZlZCwgMDpwYWdlIG5vdCByZWNlaXZlZAorICogQml0IDEzICAgICA6IGR1cGxleCA9PiAxOmZ1bGwgZHVwbGV4LCAwOmhhbGYgZHVwbGV4CisgKiBCaXRzIDE0LTE1IDogc3BlZWQgPT4gMDoxME1iL3MsIDE6MTAwTWIvcywgMjoxMDAwTWIvcywgMzpyc3ZkCisgKi8KKworI2RlZmluZSBxbGNuaWNfZ2V0X3BoeV9zcGVlZChjb25maWdfd29yZCkgKCgoY29uZmlnX3dvcmQpID4+IDE0KSAmIDB4MDMpCisKKyNkZWZpbmUgcWxjbmljX3NldF9waHlfc3BlZWQoY29uZmlnX3dvcmQsIHZhbCkJXAorCQkoKGNvbmZpZ193b3JkKSB8PSAoKHZhbCAmIDB4MDMpIDw8IDE0KSkKKyNkZWZpbmUgcWxjbmljX3NldF9waHlfZHVwbGV4KGNvbmZpZ193b3JkKQlcCisJCSgoY29uZmlnX3dvcmQpIHw9IDEgPDwgMTMpCisjZGVmaW5lIHFsY25pY19jbGVhcl9waHlfZHVwbGV4KGNvbmZpZ193b3JkKQlcCisJCSgoY29uZmlnX3dvcmQpICY9IH4oMSA8PCAxMykpCisKKyNkZWZpbmUgcWxjbmljX2dldF9waHlfbGluayhjb25maWdfd29yZCkJXAorCQlfcWxjbmljX2NyYl9nZXRfYml0KGNvbmZpZ193b3JkLCAxMCkKKyNkZWZpbmUgcWxjbmljX2dldF9waHlfZHVwbGV4KGNvbmZpZ193b3JkKQlcCisJCV9xbGNuaWNfY3JiX2dldF9iaXQoY29uZmlnX3dvcmQsIDEzKQorCisjZGVmaW5lIFFMQ05JQ19OSVVfTk9OX1BST01JU0NfTU9ERQkwCisjZGVmaW5lIFFMQ05JQ19OSVVfUFJPTUlTQ19NT0RFCQkxCisjZGVmaW5lIFFMQ05JQ19OSVVfQUxMTVVMVElfTU9ERQkyCisKK3N0cnVjdCBjcmJfMTI4TV8yTV9zdWJfYmxvY2tfbWFwIHsKKwl1bnNpZ25lZCB2YWxpZDsKKwl1bnNpZ25lZCBzdGFydF8xMjhNOworCXVuc2lnbmVkIGVuZF8xMjhNOworCXVuc2lnbmVkIHN0YXJ0XzJNOworfTsKKworc3RydWN0IGNyYl8xMjhNXzJNX2Jsb2NrX21hcHsKKwlzdHJ1Y3QgY3JiXzEyOE1fMk1fc3ViX2Jsb2NrX21hcCBzdWJfYmxvY2tbMTZdOworfTsKKyNlbmRpZgkJCQkvKiBfX1FMQ05JQ19IRFJfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaHcuYyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfaHcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWE0ZDEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19ody5jCkBAIC0wLDAgKzEsMTI3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIFFMb2dpYyBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorICoKKyAqLworCisjaW5jbHVkZSAicWxjbmljLmgiCisKKyNpbmNsdWRlIDxuZXQvaXAuaD4KKworI2RlZmluZSBNQVNLKG4pICgoMVVMTDw8KG4pKS0xKQorI2RlZmluZSBPQ01fV0lOX1AzUChhZGRyKSAoYWRkciAmIDB4ZmZjMDAwMCkKKworI2RlZmluZSBHRVRfTUVNX09GRlNfMk0oYWRkcikgKGFkZHIgJiBNQVNLKDE4KSkKKworI2RlZmluZSBDUkJfQkxLKG9mZikJKChvZmYgPj4gMjApICYgMHgzZikKKyNkZWZpbmUgQ1JCX1NVQkJMSyhvZmYpCSgob2ZmID4+IDE2KSAmIDB4ZikKKyNkZWZpbmUgQ1JCX1dJTkRPV18yTQkoMHgxMzAwNjApCisjZGVmaW5lIENSQl9ISShvZmYpCSgoY3JiX2h1Yl9hZ3RbQ1JCX0JMSyhvZmYpXSA8PCAyMCkgfCAoKG9mZikgJiAweGYwMDAwKSkKKyNkZWZpbmUgQ1JCX0lORElSRUNUXzJNCSgweDFlMDAwMFVMKQorCisKKyNpZm5kZWYgcmVhZHEKK3N0YXRpYyBpbmxpbmUgdTY0IHJlYWRxKHZvaWQgX19pb21lbSAqYWRkcikKK3sKKwlyZXR1cm4gcmVhZGwoYWRkcikgfCAoKCh1NjQpIHJlYWRsKGFkZHIgKyA0KSkgPDwgMzJMTCk7Cit9CisjZW5kaWYKKworI2lmbmRlZiB3cml0ZXEKK3N0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZXEodTY0IHZhbCwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCXdyaXRlbCgoKHUzMikgKHZhbCkpLCAoYWRkcikpOworCXdyaXRlbCgoKHUzMikgKHZhbCA+PiAzMikpLCAoYWRkciArIDQpKTsKK30KKyNlbmRpZgorCisjZGVmaW5lIEFERFJfSU5fUkFOR0UoYWRkciwgbG93LCBoaWdoKQlcCisJKCgoYWRkcikgPCAoaGlnaCkpICYmICgoYWRkcikgPj0gKGxvdykpKQorCisjZGVmaW5lIFBDSV9PRkZTRVRfRklSU1RfUkFOR0UoYWRhcHRlciwgb2ZmKSAgICBcCisJKChhZGFwdGVyKS0+YWh3LnBjaV9iYXNlMCArIChvZmYpKQorCitzdGF0aWMgdm9pZCBfX2lvbWVtICpwY2lfYmFzZV9vZmZzZXQoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCQkJCQkgICAgdW5zaWduZWQgbG9uZyBvZmYpCit7CisJaWYgKEFERFJfSU5fUkFOR0Uob2ZmLCBGSVJTVF9QQUdFX0dST1VQX1NUQVJULCBGSVJTVF9QQUdFX0dST1VQX0VORCkpCisJCXJldHVybiBQQ0lfT0ZGU0VUX0ZJUlNUX1JBTkdFKGFkYXB0ZXIsIG9mZik7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBjcmJfMTI4TV8yTV9ibG9ja19tYXAKK2NyYl8xMjhNXzJNX21hcFs2NF0gX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgPSB7CisgICAge3t7MCwgMCwgICAgICAgICAwLCAgICAgICAgIDB9IH0gfSwJCS8qIDA6IFBDSSAqLworICAgIHt7ezEsIDB4MDEwMDAwMCwgMHgwMTAyMDAwLCAweDEyMDAwMH0sCS8qIDE6IFBDSUUgKi8KKwkgIHsxLCAweDAxMTAwMDAsIDB4MDEyMDAwMCwgMHgxMzAwMDB9LAorCSAgezEsIDB4MDEyMDAwMCwgMHgwMTIyMDAwLCAweDEyNDAwMH0sCisJICB7MSwgMHgwMTMwMDAwLCAweDAxMzIwMDAsIDB4MTI2MDAwfSwKKwkgIHsxLCAweDAxNDAwMDAsIDB4MDE0MjAwMCwgMHgxMjgwMDB9LAorCSAgezEsIDB4MDE1MDAwMCwgMHgwMTUyMDAwLCAweDEyYTAwMH0sCisJICB7MSwgMHgwMTYwMDAwLCAweDAxNzAwMDAsIDB4MTEwMDAwfSwKKwkgIHsxLCAweDAxNzAwMDAsIDB4MDE3MjAwMCwgMHgxMmUwMDB9LAorCSAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCSAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCSAgezEsIDB4MDFlMDAwMCwgMHgwMWUwODAwLCAweDEyMjAwMH0sCisJICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSB9IH0sCisJe3t7MSwgMHgwMjAwMDAwLCAweDAyMTAwMDAsIDB4MTgwMDAwfSB9IH0sLyogMjogTU4gKi8KKyAgICB7e3swLCAwLCAgICAgICAgIDAsICAgICAgICAgMH0gfSB9LAkgICAgLyogMzogKi8KKyAgICB7e3sxLCAweDA0MDAwMDAsIDB4MDQwMTAwMCwgMHgxNjkwMDB9IH0gfSwvKiA0OiBQMk5SMSAqLworICAgIHt7ezEsIDB4MDUwMDAwMCwgMHgwNTEwMDAwLCAweDE0MDAwMH0gfSB9LC8qIDU6IFNSRSAgICovCisgICAge3t7MSwgMHgwNjAwMDAwLCAweDA2MTAwMDAsIDB4MWMwMDAwfSB9IH0sLyogNjogTklVICAgKi8KKyAgICB7e3sxLCAweDA3MDAwMDAsIDB4MDcwNDAwMCwgMHgxYjgwMDB9IH0gfSwvKiA3OiBRTSAgICAqLworICAgIHt7ezEsIDB4MDgwMDAwMCwgMHgwODAyMDAwLCAweDE3MDAwMH0sICAvKiA4OiBTUU0wICAqLworICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHsxLCAweDA4ZjAwMDAsIDB4MDhmMjAwMCwgMHgxNzIwMDB9IH0gfSwKKyAgICB7e3sxLCAweDA5MDAwMDAsIDB4MDkwMjAwMCwgMHgxNzQwMDB9LAkvKiA5OiBTUU0xKi8KKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MSwgMHgwOWYwMDAwLCAweDA5ZjIwMDAsIDB4MTc2MDAwfSB9IH0sCisgICAge3t7MCwgMHgwYTAwMDAwLCAweDBhMDIwMDAsIDB4MTc4MDAwfSwJLyogMTA6IFNRTTIqLworICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHsxLCAweDBhZjAwMDAsIDB4MGFmMjAwMCwgMHgxN2EwMDB9IH0gfSwKKyAgICB7e3swLCAweDBiMDAwMDAsIDB4MGIwMjAwMCwgMHgxN2MwMDB9LAkvKiAxMTogU1FNMyovCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisgICAgICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKyAgICAgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorICAgICAgezEsIDB4MGJmMDAwMCwgMHgwYmYyMDAwLCAweDE3ZTAwMH0gfSB9LAorCXt7ezEsIDB4MGMwMDAwMCwgMHgwYzA0MDAwLCAweDFkNDAwMH0gfSB9LC8qIDEyOiBJMlEgKi8KKwl7e3sxLCAweDBkMDAwMDAsIDB4MGQwNDAwMCwgMHgxYTQwMDB9IH0gfSwvKiAxMzogVE1SICovCisJe3t7MSwgMHgwZTAwMDAwLCAweDBlMDQwMDAsIDB4MWEwMDAwfSB9IH0sLyogMTQ6IFJPTVVTQiAqLworCXt7ezEsIDB4MGYwMDAwMCwgMHgwZjAxMDAwLCAweDE2NDAwMH0gfSB9LC8qIDE1OiBQRUc0ICovCisJe3t7MCwgMHgxMDAwMDAwLCAweDEwMDQwMDAsIDB4MWE4MDAwfSB9IH0sLyogMTY6IFhETUEgKi8KKwl7e3sxLCAweDExMDAwMDAsIDB4MTEwMTAwMCwgMHgxNjAwMDB9IH0gfSwvKiAxNzogUEVHMCAqLworCXt7ezEsIDB4MTIwMDAwMCwgMHgxMjAxMDAwLCAweDE2MTAwMH0gfSB9LC8qIDE4OiBQRUcxICovCisJe3t7MSwgMHgxMzAwMDAwLCAweDEzMDEwMDAsIDB4MTYyMDAwfSB9IH0sLyogMTk6IFBFRzIgKi8KKwl7e3sxLCAweDE0MDAwMDAsIDB4MTQwMTAwMCwgMHgxNjMwMDB9IH0gfSwvKiAyMDogUEVHMyAqLworCXt7ezEsIDB4MTUwMDAwMCwgMHgxNTAxMDAwLCAweDE2NTAwMH0gfSB9LC8qIDIxOiBQMk5EICovCisJe3t7MSwgMHgxNjAwMDAwLCAweDE2MDEwMDAsIDB4MTY2MDAwfSB9IH0sLyogMjI6IFAyTkkgKi8KKwl7e3swLCAwLCAgICAgICAgIDAsICAgICAgICAgMH0gfSB9LAkvKiAyMzogKi8KKwl7e3swLCAwLCAgICAgICAgIDAsICAgICAgICAgMH0gfSB9LAkvKiAyNDogKi8KKwl7e3swLCAwLCAgICAgICAgIDAsICAgICAgICAgMH0gfSB9LAkvKiAyNTogKi8KKwl7e3swLCAwLCAgICAgICAgIDAsICAgICAgICAgMH0gfSB9LAkvKiAyNjogKi8KKwl7e3swLCAwLCAgICAgICAgIDAsICAgICAgICAgMH0gfSB9LAkvKiAyNzogKi8KKwl7e3swLCAwLCAgICAgICAgIDAsICAgICAgICAgMH0gfSB9LAkvKiAyODogKi8KKwl7e3sxLCAweDFkMDAwMDAsIDB4MWQxMDAwMCwgMHgxOTAwMDB9IH0gfSwvKiAyOTogTVMgKi8KKyAgICB7e3sxLCAweDFlMDAwMDAsIDB4MWUwMTAwMCwgMHgxNmEwMDB9IH0gfSwvKiAzMDogUDJOUjIgKi8KKyAgICB7e3sxLCAweDFmMDAwMDAsIDB4MWYxMDAwMCwgMHgxNTAwMDB9IH0gfSwvKiAzMTogRVBHICovCisJe3t7MH0gfSB9LAkJCQkvKiAzMjogUENJICovCisJe3t7MSwgMHgyMTAwMDAwLCAweDIxMDIwMDAsIDB4MTIwMDAwfSwJLyogMzM6IFBDSUUgKi8KKwkgIHsxLCAweDIxMTAwMDAsIDB4MjEyMDAwMCwgMHgxMzAwMDB9LAorCSAgezEsIDB4MjEyMDAwMCwgMHgyMTIyMDAwLCAweDEyNDAwMH0sCisJICB7MSwgMHgyMTMwMDAwLCAweDIxMzIwMDAsIDB4MTI2MDAwfSwKKwkgIHsxLCAweDIxNDAwMDAsIDB4MjE0MjAwMCwgMHgxMjgwMDB9LAorCSAgezEsIDB4MjE1MDAwMCwgMHgyMTUyMDAwLCAweDEyYTAwMH0sCisJICB7MSwgMHgyMTYwMDAwLCAweDIxNzAwMDAsIDB4MTEwMDAwfSwKKwkgIHsxLCAweDIxNzAwMDAsIDB4MjE3MjAwMCwgMHgxMmUwMDB9LAorCSAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCSAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSwKKwkgIHswLCAweDAwMDAwMDAsIDB4MDAwMDAwMCwgMHgwMDAwMDB9LAorCSAgezAsIDB4MDAwMDAwMCwgMHgwMDAwMDAwLCAweDAwMDAwMH0sCisJICB7MCwgMHgwMDAwMDAwLCAweDAwMDAwMDAsIDB4MDAwMDAwfSB9IH0sCisJe3t7MSwgMHgyMjAwMDAwLCAweDIyMDQwMDAsIDB4MWIwMDAwfSB9IH0sLyogMzQ6IENBTSAqLworCXt7ezB9IH0gfSwJCQkJLyogMzU6ICovCisJe3t7MH0gfSB9LAkJCQkvKiAzNjogKi8KKwl7e3swfSB9IH0sCQkJCS8qIDM3OiAqLworCXt7ezB9IH0gfSwJCQkJLyogMzg6ICovCisJe3t7MH0gfSB9LAkJCQkvKiAzOTogKi8KKwl7e3sxLCAweDI4MDAwMDAsIDB4MjgwNDAwMCwgMHgxYTQwMDB9IH0gfSwvKiA0MDogVE1SICovCisJe3t7MSwgMHgyOTAwMDAwLCAweDI5MDEwMDAsIDB4MTZiMDAwfSB9IH0sLyogNDE6IFAyTlIzICovCisJe3t7MSwgMHgyYTAwMDAwLCAweDJhMDA0MDAsIDB4MWFjNDAwfSB9IH0sLyogNDI6IFJQTVgxICovCisJe3t7MSwgMHgyYjAwMDAwLCAweDJiMDA0MDAsIDB4MWFjODAwfSB9IH0sLyogNDM6IFJQTVgyICovCisJe3t7MSwgMHgyYzAwMDAwLCAweDJjMDA0MDAsIDB4MWFjYzAwfSB9IH0sLyogNDQ6IFJQTVgzICovCisJe3t7MSwgMHgyZDAwMDAwLCAweDJkMDA0MDAsIDB4MWFkMDAwfSB9IH0sLyogNDU6IFJQTVg0ICovCisJe3t7MSwgMHgyZTAwMDAwLCAweDJlMDA0MDAsIDB4MWFkNDAwfSB9IH0sLyogNDY6IFJQTVg1ICovCisJe3t7MSwgMHgyZjAwMDAwLCAweDJmMDA0MDAsIDB4MWFkODAwfSB9IH0sLyogNDc6IFJQTVg2ICovCisJe3t7MSwgMHgzMDAwMDAwLCAweDMwMDA0MDAsIDB4MWFkYzAwfSB9IH0sLyogNDg6IFJQTVg3ICovCisJe3t7MCwgMHgzMTAwMDAwLCAweDMxMDQwMDAsIDB4MWE4MDAwfSB9IH0sLyogNDk6IFhETUEgKi8KKwl7e3sxLCAweDMyMDAwMDAsIDB4MzIwNDAwMCwgMHgxZDQwMDB9IH0gfSwvKiA1MDogSTJRICovCisJe3t7MSwgMHgzMzAwMDAwLCAweDMzMDQwMDAsIDB4MWEwMDAwfSB9IH0sLyogNTE6IFJPTVVTQiAqLworCXt7ezB9IH0gfSwJCQkJLyogNTI6ICovCisJe3t7MSwgMHgzNTAwMDAwLCAweDM1MDA0MDAsIDB4MWFjMDAwfSB9IH0sLyogNTM6IFJQTVgwICovCisJe3t7MSwgMHgzNjAwMDAwLCAweDM2MDA0MDAsIDB4MWFlMDAwfSB9IH0sLyogNTQ6IFJQTVg4ICovCisJe3t7MSwgMHgzNzAwMDAwLCAweDM3MDA0MDAsIDB4MWFlNDAwfSB9IH0sLyogNTU6IFJQTVg5ICovCisJe3t7MSwgMHgzODAwMDAwLCAweDM4MDQwMDAsIDB4MWQwMDAwfSB9IH0sLyogNTY6IE9DTTAgKi8KKwl7e3sxLCAweDM5MDAwMDAsIDB4MzkwNDAwMCwgMHgxYjQwMDB9IH0gfSwvKiA1NzogQ1JZUFRPICovCisJe3t7MSwgMHgzYTAwMDAwLCAweDNhMDQwMDAsIDB4MWQ4MDAwfSB9IH0sLyogNTg6IFNNQiAqLworCXt7ezB9IH0gfSwJCQkJLyogNTk6IEkyQzAgKi8KKwl7e3swfSB9IH0sCQkJCS8qIDYwOiBJMkMxICovCisJe3t7MSwgMHgzZDAwMDAwLCAweDNkMDQwMDAsIDB4MWQ4MDAwfSB9IH0sLyogNjE6IExQQyAqLworCXt7ezEsIDB4M2UwMDAwMCwgMHgzZTAxMDAwLCAweDE2NzAwMH0gfSB9LC8qIDYyOiBQMk5DICovCisJe3t7MSwgMHgzZjAwMDAwLCAweDNmMDEwMDAsIDB4MTY4MDAwfSB9IH0JLyogNjM6IFAyTlIwICovCit9OworCisvKgorICogdG9wIDEyIGJpdHMgb2YgY3JiIGludGVybmFsIGFkZHJlc3MgKGh1YiwgYWdlbnQpCisgKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjcmJfaHViX2FndFs2NF0gPSB7CisJMCwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BTLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfTU4sCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9NUywKKwkwLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfU1JFLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfTklVLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUU1OLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfU1FOMCwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1NRTjEsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9TUU4yLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfU1FOMywKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX0kyUSwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1RJTVIsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9ST01VU0IsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR040LAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfWERNQSwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHTjAsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR04xLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdOMiwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHTjMsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR05ELAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdOSSwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHUzAsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9QR1MxLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUEdTMiwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHUzMsCisJMCwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHU0ksCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9TTiwKKwkwLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfRUcsCisJMCwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BTLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfQ0FNLAorCTAsCisJMCwKKwkwLAorCTAsCisJMCwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1RJTVIsCisJMCwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVgxLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDIsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YMywKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg0LAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDUsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YNiwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg3LAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfWERNQSwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX0kyUSwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1JPTVVTQiwKKwkwLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfUlBNWDAsCisJUUxDTklDX0hXX0NSQl9IVUJfQUdUX0FEUl9SUE1YOCwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1JQTVg5LAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfT0NNMCwKKwkwLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfU01CLAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfSTJDMCwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX0kyQzEsCisJMCwKKwlRTENOSUNfSFdfQ1JCX0hVQl9BR1RfQURSX1BHTkMsCisJMCwKK307CisKKy8qICBQQ0kgV2luZG93aW5nIGZvciBERFIgcmVnaW9ucy4gICovCisKKyNkZWZpbmUgUUxDTklDX1BDSUVfU0VNX1RJTUVPVVQJMTAwMDAKKworaW50CitxbGNuaWNfcGNpZV9zZW1fbG9jayhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBzZW0sIHUzMiBpZF9yZWcpCit7CisJaW50IGRvbmUgPSAwLCB0aW1lb3V0ID0gMDsKKworCXdoaWxlICghZG9uZSkgeworCQlkb25lID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfUENJRV9SRUcoUENJRV9TRU1fTE9DSyhzZW0pKSk7CisJCWlmIChkb25lID09IDEpCisJCQlicmVhazsKKwkJaWYgKCsrdGltZW91dCA+PSBRTENOSUNfUENJRV9TRU1fVElNRU9VVCkKKwkJCXJldHVybiAtRUlPOworCQltc2xlZXAoMSk7CisJfQorCisJaWYgKGlkX3JlZykKKwkJUUxDV1IzMihhZGFwdGVyLCBpZF9yZWcsIGFkYXB0ZXItPnBvcnRudW0pOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK3FsY25pY19wY2llX3NlbV91bmxvY2soc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBpbnQgc2VtKQoreworCVFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX1BDSUVfUkVHKFBDSUVfU0VNX1VOTE9DSyhzZW0pKSk7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19zZW5kX2NtZF9kZXNjcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqY21kX2Rlc2NfYXJyLCBpbnQgbnJfZGVzYykKK3sKKwl1MzIgaSwgcHJvZHVjZXIsIGNvbnN1bWVyOworCXN0cnVjdCBxbGNuaWNfY21kX2J1ZmZlciAqcGJ1ZjsKKwlzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKmNtZF9kZXNjOworCXN0cnVjdCBxbGNuaWNfaG9zdF90eF9yaW5nICp0eF9yaW5nOworCisJaSA9IDA7CisKKwlpZiAoYWRhcHRlci0+aXNfdXAgIT0gUUxDTklDX0FEQVBURVJfVVBfTUFHSUMpCisJCXJldHVybiAtRUlPOworCisJdHhfcmluZyA9IGFkYXB0ZXItPnR4X3Jpbmc7CisJX19uZXRpZl90eF9sb2NrX2JoKHR4X3JpbmctPnR4cSk7CisKKwlwcm9kdWNlciA9IHR4X3JpbmctPnByb2R1Y2VyOworCWNvbnN1bWVyID0gdHhfcmluZy0+c3dfY29uc3VtZXI7CisKKwlpZiAobnJfZGVzYyA+PSBxbGNuaWNfdHhfYXZhaWwodHhfcmluZykpIHsKKwkJbmV0aWZfdHhfc3RvcF9xdWV1ZSh0eF9yaW5nLT50eHEpOworCQlfX25ldGlmX3R4X3VubG9ja19iaCh0eF9yaW5nLT50eHEpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCWRvIHsKKwkJY21kX2Rlc2MgPSAmY21kX2Rlc2NfYXJyW2ldOworCisJCXBidWYgPSAmdHhfcmluZy0+Y21kX2J1Zl9hcnJbcHJvZHVjZXJdOworCQlwYnVmLT5za2IgPSBOVUxMOworCQlwYnVmLT5mcmFnX2NvdW50ID0gMDsKKworCQltZW1jcHkoJnR4X3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl0sCisJCQkmY21kX2Rlc2NfYXJyW2ldLCBzaXplb2Yoc3RydWN0IGNtZF9kZXNjX3R5cGUwKSk7CisKKwkJcHJvZHVjZXIgPSBnZXRfbmV4dF9pbmRleChwcm9kdWNlciwgdHhfcmluZy0+bnVtX2Rlc2MpOworCQlpKys7CisKKwl9IHdoaWxlIChpICE9IG5yX2Rlc2MpOworCisJdHhfcmluZy0+cHJvZHVjZXIgPSBwcm9kdWNlcjsKKworCXFsY25pY191cGRhdGVfY21kX3Byb2R1Y2VyKGFkYXB0ZXIsIHR4X3JpbmcpOworCisJX19uZXRpZl90eF91bmxvY2tfYmgodHhfcmluZy0+dHhxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitxbGNuaWNfc3JlX21hY2FkZHJfY2hhbmdlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTggKmFkZHIsCisJCQkJdW5zaWduZWQgb3ApCit7CisJc3RydWN0IHFsY25pY19uaWNfcmVxIHJlcTsKKwlzdHJ1Y3QgcWxjbmljX21hY19yZXEgKm1hY19yZXE7CisJdTY0IHdvcmQ7CisKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHN0cnVjdCBxbGNuaWNfbmljX3JlcSkpOworCXJlcS5xaGRyID0gY3B1X3RvX2xlNjQoUUxDTklDX1JFUVVFU1QgPDwgMjMpOworCisJd29yZCA9IFFMQ05JQ19NQUNfRVZFTlQgfCAoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KTsKKwlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmQpOworCisJbWFjX3JlcSA9IChzdHJ1Y3QgcWxjbmljX21hY19yZXEgKikmcmVxLndvcmRzWzBdOworCW1hY19yZXEtPm9wID0gb3A7CisJbWVtY3B5KG1hY19yZXEtPm1hY19hZGRyLCBhZGRyLCA2KTsKKworCXJldHVybiBxbGNuaWNfc2VuZF9jbWRfZGVzY3MoYWRhcHRlciwgKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKSZyZXEsIDEpOworfQorCitzdGF0aWMgaW50IHFsY25pY19uaWNfYWRkX21hYyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXU4ICphZGRyLCBzdHJ1Y3QgbGlzdF9oZWFkICpkZWxfbGlzdCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBxbGNuaWNfbWFjX2xpc3RfcyAqY3VyOworCisJLyogbG9vayB1cCBpZiBhbHJlYWR5IGV4aXN0cyAqLworCWxpc3RfZm9yX2VhY2goaGVhZCwgZGVsX2xpc3QpIHsKKwkJY3VyID0gbGlzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgcWxjbmljX21hY19saXN0X3MsIGxpc3QpOworCisJCWlmIChtZW1jbXAoYWRkciwgY3VyLT5tYWNfYWRkciwgRVRIX0FMRU4pID09IDApIHsKKwkJCWxpc3RfbW92ZV90YWlsKGhlYWQsICZhZGFwdGVyLT5tYWNfbGlzdCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWN1ciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBxbGNuaWNfbWFjX2xpc3RfcyksIEdGUF9BVE9NSUMpOworCWlmIChjdXIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCSJmYWlsZWQgdG8gYWRkIG1hYyBhZGRyZXNzIGZpbHRlclxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwltZW1jcHkoY3VyLT5tYWNfYWRkciwgYWRkciwgRVRIX0FMRU4pOworCWxpc3RfYWRkX3RhaWwoJmN1ci0+bGlzdCwgJmFkYXB0ZXItPm1hY19saXN0KTsKKworCXJldHVybiBxbGNuaWNfc3JlX21hY2FkZHJfY2hhbmdlKGFkYXB0ZXIsCisJCQkJY3VyLT5tYWNfYWRkciwgUUxDTklDX01BQ19BREQpOworfQorCit2b2lkIHFsY25pY19zZXRfbXVsdGkoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfcHRyOworCXU4IGJjYXN0X2FkZHJbRVRIX0FMRU5dID0geyAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmIH07CisJdTMyIG1vZGUgPSBWUE9SVF9NSVNTX01PREVfRFJPUDsKKwlMSVNUX0hFQUQoZGVsX2xpc3QpOworCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IHFsY25pY19tYWNfbGlzdF9zICpjdXI7CisKKwlsaXN0X3NwbGljZV90YWlsX2luaXQoJmFkYXB0ZXItPm1hY19saXN0LCAmZGVsX2xpc3QpOworCisJcWxjbmljX25pY19hZGRfbWFjKGFkYXB0ZXIsIGFkYXB0ZXItPm1hY19hZGRyLCAmZGVsX2xpc3QpOworCXFsY25pY19uaWNfYWRkX21hYyhhZGFwdGVyLCBiY2FzdF9hZGRyLCAmZGVsX2xpc3QpOworCisJaWYgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQltb2RlID0gVlBPUlRfTUlTU19NT0RFX0FDQ0VQVF9BTEw7CisJCWdvdG8gc2VuZF9md19jbWQ7CisJfQorCisJaWYgKChuZXRkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAorCSAgICAobmV0ZGV2X21jX2NvdW50KG5ldGRldikgPiBhZGFwdGVyLT5tYXhfbWNfY291bnQpKSB7CisJCW1vZGUgPSBWUE9SVF9NSVNTX01PREVfQUNDRVBUX01VTFRJOworCQlnb3RvIHNlbmRfZndfY21kOworCX0KKworCWlmICghbmV0ZGV2X21jX2VtcHR5KG5ldGRldikpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfcHRyLCBuZXRkZXYpIHsKKwkJCXFsY25pY19uaWNfYWRkX21hYyhhZGFwdGVyLCBtY19wdHItPmRtaV9hZGRyLAorCQkJCQkJCSZkZWxfbGlzdCk7CisJCX0KKwl9CisKK3NlbmRfZndfY21kOgorCXFsY25pY19uaWNfc2V0X3Byb21pc2MoYWRhcHRlciwgbW9kZSk7CisJaGVhZCA9ICZkZWxfbGlzdDsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKKwkJY3VyID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgcWxjbmljX21hY19saXN0X3MsIGxpc3QpOworCisJCXFsY25pY19zcmVfbWFjYWRkcl9jaGFuZ2UoYWRhcHRlciwKKwkJCQljdXItPm1hY19hZGRyLCBRTENOSUNfTUFDX0RFTCk7CisJCWxpc3RfZGVsKCZjdXItPmxpc3QpOworCQlrZnJlZShjdXIpOworCX0KK30KKworaW50IHFsY25pY19uaWNfc2V0X3Byb21pc2Moc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgbW9kZSkKK3sKKwlzdHJ1Y3QgcWxjbmljX25pY19yZXEgcmVxOworCXU2NCB3b3JkOworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihzdHJ1Y3QgcWxjbmljX25pY19yZXEpKTsKKworCXJlcS5xaGRyID0gY3B1X3RvX2xlNjQoUUxDTklDX0hPU1RfUkVRVUVTVCA8PCAyMyk7CisKKwl3b3JkID0gUUxDTklDX0gyQ19PUENPREVfUFJPWFlfU0VUX1ZQT1JUX01JU1NfTU9ERSB8CisJCQkoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KTsKKwlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmQpOworCisJcmVxLndvcmRzWzBdID0gY3B1X3RvX2xlNjQobW9kZSk7CisKKwlyZXR1cm4gcWxjbmljX3NlbmRfY21kX2Rlc2NzKGFkYXB0ZXIsCisJCQkJKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKSZyZXEsIDEpOworfQorCit2b2lkIHFsY25pY19mcmVlX21hY19saXN0KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgcWxjbmljX21hY19saXN0X3MgKmN1cjsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmFkYXB0ZXItPm1hY19saXN0OworCisJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CisJCWN1ciA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IHFsY25pY19tYWNfbGlzdF9zLCBsaXN0KTsKKwkJcWxjbmljX3NyZV9tYWNhZGRyX2NoYW5nZShhZGFwdGVyLAorCQkJCWN1ci0+bWFjX2FkZHIsIFFMQ05JQ19NQUNfREVMKTsKKwkJbGlzdF9kZWwoJmN1ci0+bGlzdCk7CisJCWtmcmVlKGN1cik7CisJfQorfQorCisjZGVmaW5lCVFMQ05JQ19DT05GSUdfSU5UUl9DT0FMRVNDRQkzCisKKy8qCisgKiBTZW5kIHRoZSBpbnRlcnJ1cHQgY29hbGVzY2luZyBwYXJhbWV0ZXIgc2V0IGJ5IGV0aHRvb2wgdG8gdGhlIGNhcmQuCisgKi8KK2ludCBxbGNuaWNfY29uZmlnX2ludHJfY29hbGVzY2Uoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBxbGNuaWNfbmljX3JlcSByZXE7CisJdTY0IHdvcmRbNl07CisJaW50IHJ2LCBpOworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihzdHJ1Y3QgcWxjbmljX25pY19yZXEpKTsKKworCXJlcS5xaGRyID0gY3B1X3RvX2xlNjQoUUxDTklDX0hPU1RfUkVRVUVTVCA8PCAyMyk7CisKKwl3b3JkWzBdID0gUUxDTklDX0NPTkZJR19JTlRSX0NPQUxFU0NFIHwgKCh1NjQpYWRhcHRlci0+cG9ydG51bSA8PCAxNik7CisJcmVxLnJlcV9oZHIgPSBjcHVfdG9fbGU2NCh3b3JkWzBdKTsKKworCW1lbWNweSgmd29yZFswXSwgJmFkYXB0ZXItPmNvYWwsIHNpemVvZihhZGFwdGVyLT5jb2FsKSk7CisJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJcmVxLndvcmRzW2ldID0gY3B1X3RvX2xlNjQod29yZFtpXSk7CisKKwlydiA9IHFsY25pY19zZW5kX2NtZF9kZXNjcyhhZGFwdGVyLCAoc3RydWN0IGNtZF9kZXNjX3R5cGUwICopJnJlcSwgMSk7CisJaWYgKHJ2ICE9IDApCisJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJIkNvdWxkIG5vdCBzZW5kIGludGVycnVwdCBjb2FsZXNjaW5nIHBhcmFtZXRlcnNcbiIpOworCisJcmV0dXJuIHJ2OworfQorCitpbnQgcWxjbmljX2NvbmZpZ19od19scm8oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBxbGNuaWNfbmljX3JlcSByZXE7CisJdTY0IHdvcmQ7CisJaW50IHJ2OworCisJaWYgKChhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19MUk9fRU5BQkxFRCkgPT0gZW5hYmxlKQorCQlyZXR1cm4gMDsKKworCW1lbXNldCgmcmVxLCAwLCBzaXplb2Yoc3RydWN0IHFsY25pY19uaWNfcmVxKSk7CisKKwlyZXEucWhkciA9IGNwdV90b19sZTY0KFFMQ05JQ19IT1NUX1JFUVVFU1QgPDwgMjMpOworCisJd29yZCA9IFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19IV19MUk8gfCAoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KTsKKwlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmQpOworCisJcmVxLndvcmRzWzBdID0gY3B1X3RvX2xlNjQoZW5hYmxlKTsKKworCXJ2ID0gcWxjbmljX3NlbmRfY21kX2Rlc2NzKGFkYXB0ZXIsIChzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKikmcmVxLCAxKTsKKwlpZiAocnYgIT0gMCkKKwkJZGV2X2VycigmYWRhcHRlci0+bmV0ZGV2LT5kZXYsCisJCQkiQ291bGQgbm90IHNlbmQgY29uZmlndXJlIGh3IGxybyByZXF1ZXN0XG4iKTsKKworCWFkYXB0ZXItPmZsYWdzIF49IFFMQ05JQ19MUk9fRU5BQkxFRDsKKworCXJldHVybiBydjsKK30KKworaW50IHFsY25pY19jb25maWdfYnJpZGdlZF9tb2RlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgcWxjbmljX25pY19yZXEgcmVxOworCXU2NCB3b3JkOworCWludCBydjsKKworCWlmICghIShhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19CUklER0VfRU5BQkxFRCkgPT0gZW5hYmxlKQorCQlyZXR1cm4gMDsKKworCW1lbXNldCgmcmVxLCAwLCBzaXplb2Yoc3RydWN0IHFsY25pY19uaWNfcmVxKSk7CisKKwlyZXEucWhkciA9IGNwdV90b19sZTY0KFFMQ05JQ19IT1NUX1JFUVVFU1QgPDwgMjMpOworCisJd29yZCA9IFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19CUklER0lORyB8CisJCSgodTY0KWFkYXB0ZXItPnBvcnRudW0gPDwgMTYpOworCXJlcS5yZXFfaGRyID0gY3B1X3RvX2xlNjQod29yZCk7CisKKwlyZXEud29yZHNbMF0gPSBjcHVfdG9fbGU2NChlbmFibGUpOworCisJcnYgPSBxbGNuaWNfc2VuZF9jbWRfZGVzY3MoYWRhcHRlciwgKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKSZyZXEsIDEpOworCWlmIChydiAhPSAwKQorCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCSJDb3VsZCBub3Qgc2VuZCBjb25maWd1cmUgYnJpZGdlIG1vZGUgcmVxdWVzdFxuIik7CisKKwlhZGFwdGVyLT5mbGFncyBePSBRTENOSUNfQlJJREdFX0VOQUJMRUQ7CisKKwlyZXR1cm4gcnY7Cit9CisKKworI2RlZmluZSBSU1NfSEFTSFRZUEVfSVBfVENQCTB4MworCitpbnQgcWxjbmljX2NvbmZpZ19yc3Moc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBxbGNuaWNfbmljX3JlcSByZXE7CisJdTY0IHdvcmQ7CisJaW50IGksIHJ2OworCisJY29uc3QgdTY0IGtleVtdID0geyAweGJlYWMwMWZhNmE0MmI3M2JVTEwsIDB4ODAzMGYyMGM3N2NiMmRhM1VMTCwKKwkJCTB4YWU3YjMwYjRkMGNhMmJjYlVMTCwgMHg0M2EzOGZiMDQxNjcyNTNkVUxMLAorCQkJMHgyNTViMGVjMjZkNWE1NmRhVUxMIH07CisKKworCW1lbXNldCgmcmVxLCAwLCBzaXplb2Yoc3RydWN0IHFsY25pY19uaWNfcmVxKSk7CisJcmVxLnFoZHIgPSBjcHVfdG9fbGU2NChRTENOSUNfSE9TVF9SRVFVRVNUIDw8IDIzKTsKKworCXdvcmQgPSBRTENOSUNfSDJDX09QQ09ERV9DT05GSUdfUlNTIHwgKCh1NjQpYWRhcHRlci0+cG9ydG51bSA8PCAxNik7CisJcmVxLnJlcV9oZHIgPSBjcHVfdG9fbGU2NCh3b3JkKTsKKworCS8qCisJICogUlNTIHJlcXVlc3Q6CisJICogYml0cyAzLTA6IGhhc2hfbWV0aG9kCisJICogICAgICA1LTQ6IGhhc2hfdHlwZV9pcHY0CisJICoJNy02OiBoYXNoX3R5cGVfaXB2NgorCSAqCSAgODogZW5hYmxlCisJICogICAgICAgIDk6IHVzZSBpbmRpcmVjdGlvbiB0YWJsZQorCSAqICAgIDQ3LTEwOiByZXNlcnZlZAorCSAqICAgIDYzLTQ4OiBpbmRpcmVjdGlvbiB0YWJsZSBtYXNrCisJICovCisJd29yZCA9ICAoKHU2NCkoUlNTX0hBU0hUWVBFX0lQX1RDUCAmIDB4MykgPDwgNCkgfAorCQkoKHU2NCkoUlNTX0hBU0hUWVBFX0lQX1RDUCAmIDB4MykgPDwgNikgfAorCQkoKHU2NCkoZW5hYmxlICYgMHgxKSA8PCA4KSB8CisJCSgoMHg3VUxMKSA8PCA0OCk7CisJcmVxLndvcmRzWzBdID0gY3B1X3RvX2xlNjQod29yZCk7CisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykKKwkJcmVxLndvcmRzW2krMV0gPSBjcHVfdG9fbGU2NChrZXlbaV0pOworCisJcnYgPSBxbGNuaWNfc2VuZF9jbWRfZGVzY3MoYWRhcHRlciwgKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKSZyZXEsIDEpOworCWlmIChydiAhPSAwKQorCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwgImNvdWxkIG5vdCBjb25maWd1cmUgUlNTXG4iKTsKKworCXJldHVybiBydjsKK30KKworaW50IHFsY25pY19jb25maWdfaXBhZGRyKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIGlwLCBpbnQgY21kKQoreworCXN0cnVjdCBxbGNuaWNfbmljX3JlcSByZXE7CisJdTY0IHdvcmQ7CisJaW50IHJ2OworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihzdHJ1Y3QgcWxjbmljX25pY19yZXEpKTsKKwlyZXEucWhkciA9IGNwdV90b19sZTY0KFFMQ05JQ19IT1NUX1JFUVVFU1QgPDwgMjMpOworCisJd29yZCA9IFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19JUEFERFIgfCAoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KTsKKwlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmQpOworCisJcmVxLndvcmRzWzBdID0gY3B1X3RvX2xlNjQoY21kKTsKKwlyZXEud29yZHNbMV0gPSBjcHVfdG9fbGU2NChpcCk7CisKKwlydiA9IHFsY25pY19zZW5kX2NtZF9kZXNjcyhhZGFwdGVyLCAoc3RydWN0IGNtZF9kZXNjX3R5cGUwICopJnJlcSwgMSk7CisJaWYgKHJ2ICE9IDApCisJCWRldl9lcnIoJmFkYXB0ZXItPm5ldGRldi0+ZGV2LAorCQkJCSJjb3VsZCBub3Qgbm90aWZ5ICVzIElQIDB4JXggcmV1cWVzdFxuIiwKKwkJCQkoY21kID09IFFMQ05JQ19JUF9VUCkgPyAiQWRkIiA6ICJSZW1vdmUiLCBpcCk7CisKKwlyZXR1cm4gcnY7Cit9CisKK2ludCBxbGNuaWNfbGlua2V2ZW50X3JlcXVlc3Qoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBxbGNuaWNfbmljX3JlcSByZXE7CisJdTY0IHdvcmQ7CisJaW50IHJ2OworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihzdHJ1Y3QgcWxjbmljX25pY19yZXEpKTsKKwlyZXEucWhkciA9IGNwdV90b19sZTY0KFFMQ05JQ19IT1NUX1JFUVVFU1QgPDwgMjMpOworCisJd29yZCA9IFFMQ05JQ19IMkNfT1BDT0RFX0dFVF9MSU5LRVZFTlQgfCAoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KTsKKwlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmQpOworCXJlcS53b3Jkc1swXSA9IGNwdV90b19sZTY0KGVuYWJsZSB8IChlbmFibGUgPDwgOCkpOworCisJcnYgPSBxbGNuaWNfc2VuZF9jbWRfZGVzY3MoYWRhcHRlciwgKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKSZyZXEsIDEpOworCWlmIChydiAhPSAwKQorCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCQkiY291bGQgbm90IGNvbmZpZ3VyZSBsaW5rIG5vdGlmaWNhdGlvblxuIik7CisKKwlyZXR1cm4gcnY7Cit9CisKK2ludCBxbGNuaWNfc2VuZF9scm9fY2xlYW51cChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHFsY25pY19uaWNfcmVxIHJlcTsKKwl1NjQgd29yZDsKKwlpbnQgcnY7CisKKwltZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHN0cnVjdCBxbGNuaWNfbmljX3JlcSkpOworCXJlcS5xaGRyID0gY3B1X3RvX2xlNjQoUUxDTklDX0hPU1RfUkVRVUVTVCA8PCAyMyk7CisKKwl3b3JkID0gUUxDTklDX0gyQ19PUENPREVfTFJPX1JFUVVFU1QgfAorCQkoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KSB8CisJCSgodTY0KVFMQ05JQ19MUk9fUkVRVUVTVF9DTEVBTlVQIDw8IDU2KSA7CisKKwlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmQpOworCisJcnYgPSBxbGNuaWNfc2VuZF9jbWRfZGVzY3MoYWRhcHRlciwgKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKSZyZXEsIDEpOworCWlmIChydiAhPSAwKQorCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwKKwkJCQkgImNvdWxkIG5vdCBjbGVhbnVwIGxybyBmbG93c1xuIik7CisKKwlyZXR1cm4gcnY7Cit9CisKKy8qCisgKiBxbGNuaWNfY2hhbmdlX210dSAtIENoYW5nZSB0aGUgTWF4aW11bSBUcmFuc2ZlciBVbml0CisgKiBAcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIG9uIGZhaWx1cmUKKyAqLworCitpbnQgcWxjbmljX2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IG10dSkKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWludCByYyA9IDA7CisKKwlpZiAobXR1ID4gUDNfTUFYX01UVSkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5uZXRkZXYtPmRldiwgIm10dSA+ICVkIGJ5dGVzIHVuc3VwcG9ydGVkXG4iLAorCQkJCQkJUDNfTUFYX01UVSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJjID0gcWxjbmljX2Z3X2NtZF9zZXRfbXR1KGFkYXB0ZXIsIG10dSk7CisKKwlpZiAoIXJjKQorCQluZXRkZXYtPm10dSA9IG10dTsKKworCXJldHVybiByYzsKK30KKworaW50IHFsY25pY19nZXRfbWFjX2FkZHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1NjQgKm1hYykKK3sKKwl1MzIgY3JiYWRkciwgbWFjX2hpLCBtYWNfbG87CisJaW50IHBjaV9mdW5jID0gYWRhcHRlci0+YWh3LnBjaV9mdW5jOworCisJY3JiYWRkciA9IENSQl9NQUNfQkxPQ0tfU1RBUlQgKworCQkoNCAqICgocGNpX2Z1bmMvMikgKiAzKSkgKyAoNCAqIChwY2lfZnVuYyAmIDEpKTsKKworCW1hY19sbyA9IFFMQ1JEMzIoYWRhcHRlciwgY3JiYWRkcik7CisJbWFjX2hpID0gUUxDUkQzMihhZGFwdGVyLCBjcmJhZGRyKzQpOworCisJaWYgKHBjaV9mdW5jICYgMSkKKwkJKm1hYyA9IGxlNjRfdG9fY3B1KChtYWNfbG8gPj4gMTYpIHwgKCh1NjQpbWFjX2hpIDw8IDE2KSk7CisJZWxzZQorCQkqbWFjID0gbGU2NF90b19jcHUoKHU2NCltYWNfbG8gfCAoKHU2NCltYWNfaGkgPDwgMzIpKTsKKworCXJldHVybiAwOworfQorCisvKgorICogQ2hhbmdlcyB0aGUgQ1JCIHdpbmRvdyB0byB0aGUgc3BlY2lmaWVkIHdpbmRvdy4KKyAqLworIC8qIFJldHVybnMgPCAwIGlmIG9mZiBpcyBub3QgdmFsaWQsCisgKgkgMSBpZiB3aW5kb3cgYWNjZXNzIGlzIG5lZWRlZC4gJ29mZicgaXMgc2V0IHRvIG9mZnNldCBmcm9tCisgKgkgICBDUkIgc3BhY2UgaW4gMTI4TSBwY2kgbWFwCisgKgkgMCBpZiBubyB3aW5kb3cgYWNjZXNzIGlzIG5lZWRlZC4gJ29mZicgaXMgc2V0IHRvIDJNIGFkZHIKKyAqIEluOiAnb2ZmJyBpcyBvZmZzZXQgZnJvbSBiYXNlIGluIDEyOE0gcGNpIG1hcAorICovCitzdGF0aWMgaW50CitxbGNuaWNfcGNpX2dldF9jcmJfYWRkcl8yTShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXVsb25nIG9mZiwgdm9pZCBfX2lvbWVtICoqYWRkcikKK3sKKwljb25zdCBzdHJ1Y3QgY3JiXzEyOE1fMk1fc3ViX2Jsb2NrX21hcCAqbTsKKworCWlmICgob2ZmID49IFFMQ05JQ19DUkJfTUFYKSB8fCAob2ZmIDwgUUxDTklDX1BDSV9DUkJTUEFDRSkpCisJCXJldHVybiAtRUlOVkFMOworCisJb2ZmIC09IFFMQ05JQ19QQ0lfQ1JCU1BBQ0U7CisKKwkvKgorCSAqIFRyeSBkaXJlY3QgbWFwCisJICovCisJbSA9ICZjcmJfMTI4TV8yTV9tYXBbQ1JCX0JMSyhvZmYpXS5zdWJfYmxvY2tbQ1JCX1NVQkJMSyhvZmYpXTsKKworCWlmIChtLT52YWxpZCAmJiAobS0+c3RhcnRfMTI4TSA8PSBvZmYpICYmIChtLT5lbmRfMTI4TSA+IG9mZikpIHsKKwkJKmFkZHIgPSBhZGFwdGVyLT5haHcucGNpX2Jhc2UwICsgbS0+c3RhcnRfMk0gKworCQkJKG9mZiAtIG0tPnN0YXJ0XzEyOE0pOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKgorCSAqIE5vdCBpbiBkaXJlY3QgbWFwLCB1c2UgY3JiIHdpbmRvdworCSAqLworCSphZGRyID0gYWRhcHRlci0+YWh3LnBjaV9iYXNlMCArIENSQl9JTkRJUkVDVF8yTSArIChvZmYgJiBNQVNLKDE2KSk7CisJcmV0dXJuIDE7Cit9CisKKy8qCisgKiBJbjogJ29mZicgaXMgb2Zmc2V0IGZyb20gQ1JCIHNwYWNlIGluIDEyOE0gcGNpIG1hcAorICogT3V0OiAnb2ZmJyBpcyAyTSBwY2kgbWFwIGFkZHIKKyAqIHNpZGUgZWZmZWN0OiBsb2NrIGNyYiB3aW5kb3cKKyAqLworc3RhdGljIHZvaWQKK3FsY25pY19wY2lfc2V0X2NyYndpbmRvd18yTShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHVsb25nIG9mZikKK3sKKwl1MzIgd2luZG93OworCXZvaWQgX19pb21lbSAqYWRkciA9IGFkYXB0ZXItPmFody5wY2lfYmFzZTAgKyBDUkJfV0lORE9XXzJNOworCisJb2ZmIC09IFFMQ05JQ19QQ0lfQ1JCU1BBQ0U7CisKKwl3aW5kb3cgPSBDUkJfSEkob2ZmKTsKKworCWlmIChhZGFwdGVyLT5haHcuY3JiX3dpbiA9PSB3aW5kb3cpCisJCXJldHVybjsKKworCXdyaXRlbCh3aW5kb3csIGFkZHIpOworCWlmIChyZWFkbChhZGRyKSAhPSB3aW5kb3cpIHsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCWRldl93YXJuKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkJImZhaWxlZCB0byBzZXQgQ1JCIHdpbmRvdyB0byAlZCBvZmYgMHglbHhcbiIsCisJCQkJd2luZG93LCBvZmYpOworCX0KKwlhZGFwdGVyLT5haHcuY3JiX3dpbiA9IHdpbmRvdzsKK30KKworaW50CitxbGNuaWNfaHdfd3JpdGVfd3hfMk0oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1bG9uZyBvZmYsIHUzMiBkYXRhKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJ2OworCXZvaWQgX19pb21lbSAqYWRkciA9IE5VTEw7CisKKwlydiA9IHFsY25pY19wY2lfZ2V0X2NyYl9hZGRyXzJNKGFkYXB0ZXIsIG9mZiwgJmFkZHIpOworCisJaWYgKHJ2ID09IDApIHsKKwkJd3JpdGVsKGRhdGEsIGFkZHIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocnYgPiAwKSB7CisJCS8qIGluZGlyZWN0IGFjY2VzcyAqLworCQl3cml0ZV9sb2NrX2lycXNhdmUoJmFkYXB0ZXItPmFody5jcmJfbG9jaywgZmxhZ3MpOworCQljcmJfd2luX2xvY2soYWRhcHRlcik7CisJCXFsY25pY19wY2lfc2V0X2NyYndpbmRvd18yTShhZGFwdGVyLCBvZmYpOworCQl3cml0ZWwoZGF0YSwgYWRkcik7CisJCWNyYl93aW5fdW5sb2NrKGFkYXB0ZXIpOworCQl3cml0ZV91bmxvY2tfaXJxcmVzdG9yZSgmYWRhcHRlci0+YWh3LmNyYl9sb2NrLCBmbGFncyk7CisJCXJldHVybiAwOworCX0KKworCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSIlczogaW52YWxpZCBvZmZzZXQ6IDB4JTAxNmx4XG4iLCBfX2Z1bmNfXywgb2ZmKTsKKwlkdW1wX3N0YWNrKCk7CisJcmV0dXJuIC1FSU87Cit9CisKK3UzMgorcWxjbmljX2h3X3JlYWRfd3hfMk0oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1bG9uZyBvZmYpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcnY7CisJdTMyIGRhdGE7CisJdm9pZCBfX2lvbWVtICphZGRyID0gTlVMTDsKKworCXJ2ID0gcWxjbmljX3BjaV9nZXRfY3JiX2FkZHJfMk0oYWRhcHRlciwgb2ZmLCAmYWRkcik7CisKKwlpZiAocnYgPT0gMCkKKwkJcmV0dXJuIHJlYWRsKGFkZHIpOworCisJaWYgKHJ2ID4gMCkgeworCQkvKiBpbmRpcmVjdCBhY2Nlc3MgKi8KKwkJd3JpdGVfbG9ja19pcnFzYXZlKCZhZGFwdGVyLT5haHcuY3JiX2xvY2ssIGZsYWdzKTsKKwkJY3JiX3dpbl9sb2NrKGFkYXB0ZXIpOworCQlxbGNuaWNfcGNpX3NldF9jcmJ3aW5kb3dfMk0oYWRhcHRlciwgb2ZmKTsKKwkJZGF0YSA9IHJlYWRsKGFkZHIpOworCQljcmJfd2luX3VubG9jayhhZGFwdGVyKTsKKwkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmFkYXB0ZXItPmFody5jcmJfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gZGF0YTsKKwl9CisKKwlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiJXM6IGludmFsaWQgb2Zmc2V0OiAweCUwMTZseFxuIiwgX19mdW5jX18sIG9mZik7CisJZHVtcF9zdGFjaygpOworCXJldHVybiAtMTsKK30KKworCit2b2lkIF9faW9tZW0gKgorcWxjbmljX2dldF9pb2FkZHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1MzIgb2Zmc2V0KQoreworCXZvaWQgX19pb21lbSAqYWRkciA9IE5VTEw7CisKKwlXQVJOX09OKHFsY25pY19wY2lfZ2V0X2NyYl9hZGRyXzJNKGFkYXB0ZXIsIG9mZnNldCwgJmFkZHIpKTsKKworCXJldHVybiBhZGRyOworfQorCisKK3N0YXRpYyBpbnQKK3FsY25pY19wY2lfc2V0X3dpbmRvd18yTShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXU2NCBhZGRyLCB1MzIgKnN0YXJ0KQoreworCXUzMiB3aW5kb3c7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJaWYgKChhZGRyICYgMHgwMGZmODAwKSA9PSAweGZmODAwKSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiUU0gYWNjZXNzIG5vdCBoYW5kbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJd2luZG93ID0gT0NNX1dJTl9QM1AoYWRkcik7CisKKwl3cml0ZWwod2luZG93LCBhZGFwdGVyLT5haHcub2NtX3dpbl9jcmIpOworCS8qIHJlYWQgYmFjayB0byBmbHVzaCAqLworCXJlYWRsKGFkYXB0ZXItPmFody5vY21fd2luX2NyYik7CisKKwlhZGFwdGVyLT5haHcub2NtX3dpbiA9IHdpbmRvdzsKKwkqc3RhcnQgPSBRTENOSUNfUENJX09DTTBfMk0gKyBHRVRfTUVNX09GRlNfMk0oYWRkcik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19wY2lfbWVtX2FjY2Vzc19kaXJlY3Qoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCB1NjQgb2ZmLAorCQl1NjQgKmRhdGEsIGludCBvcCkKK3sKKwl2b2lkIF9faW9tZW0gKmFkZHIsICptZW1fcHRyID0gTlVMTDsKKwlyZXNvdXJjZV9zaXplX3QgbWVtX2Jhc2U7CisJaW50IHJldDsKKwl1MzIgc3RhcnQ7CisKKwltdXRleF9sb2NrKCZhZGFwdGVyLT5haHcubWVtX2xvY2spOworCisJcmV0ID0gcWxjbmljX3BjaV9zZXRfd2luZG93XzJNKGFkYXB0ZXIsIG9mZiwgJnN0YXJ0KTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gdW5sb2NrOworCisJYWRkciA9IHBjaV9iYXNlX29mZnNldChhZGFwdGVyLCBzdGFydCk7CisJaWYgKGFkZHIpCisJCWdvdG8gbm9yZW1hcDsKKworCW1lbV9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KGFkYXB0ZXItPnBkZXYsIDApICsgKHN0YXJ0ICYgUEFHRV9NQVNLKTsKKworCW1lbV9wdHIgPSBpb3JlbWFwKG1lbV9iYXNlLCBQQUdFX1NJWkUpOworCWlmIChtZW1fcHRyID09IE5VTEwpIHsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byB1bmxvY2s7CisJfQorCisJYWRkciA9IG1lbV9wdHIgKyAoc3RhcnQgJiAoUEFHRV9TSVpFIC0gMSkpOworCitub3JlbWFwOgorCWlmIChvcCA9PSAwKQkvKiByZWFkICovCisJCSpkYXRhID0gcmVhZHEoYWRkcik7CisJZWxzZQkJLyogd3JpdGUgKi8KKwkJd3JpdGVxKCpkYXRhLCBhZGRyKTsKKwordW5sb2NrOgorCW11dGV4X3VubG9jaygmYWRhcHRlci0+YWh3Lm1lbV9sb2NrKTsKKworCWlmIChtZW1fcHRyKQorCQlpb3VubWFwKG1lbV9wdHIpOworCXJldHVybiByZXQ7Cit9CisKKyNkZWZpbmUgTUFYX0NUTF9DSEVDSyAgIDEwMDAKKworaW50CitxbGNuaWNfcGNpX21lbV93cml0ZV8yTShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXU2NCBvZmYsIHU2NCBkYXRhKQoreworCWludCBpLCBqLCByZXQ7CisJdTMyIHRlbXAsIG9mZjg7CisJdTY0IHN0cmlkZTsKKwl2b2lkIF9faW9tZW0gKm1lbV9jcmI7CisKKwkvKiBPbmx5IDY0LWJpdCBhbGlnbmVkIGFjY2VzcyAqLworCWlmIChvZmYgJiA3KQorCQlyZXR1cm4gLUVJTzsKKworCS8qIFAzIG9ud2FyZCwgdGVzdCBhZ2VudCBiYXNlIGZvciBNSVUgYW5kIFNJVSBpcyBzYW1lICovCisJaWYgKEFERFJfSU5fUkFOR0Uob2ZmLCBRTENOSUNfQUREUl9RRFJfTkVULAorCQkJCVFMQ05JQ19BRERSX1FEUl9ORVRfTUFYX1AzKSkgeworCQltZW1fY3JiID0gcWxjbmljX2dldF9pb2FkZHIoYWRhcHRlciwKKwkJCQlRTENOSUNfQ1JCX1FEUl9ORVQrTUlVX1RFU1RfQUdUX0JBU0UpOworCQlnb3RvIGNvcnJlY3Q7CisJfQorCisJaWYgKEFERFJfSU5fUkFOR0Uob2ZmLCBRTENOSUNfQUREUl9ERFJfTkVULCBRTENOSUNfQUREUl9ERFJfTkVUX01BWCkpIHsKKwkJbWVtX2NyYiA9IHFsY25pY19nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQkJUUxDTklDX0NSQl9ERFJfTkVUK01JVV9URVNUX0FHVF9CQVNFKTsKKwkJZ290byBjb3JyZWN0OworCX0KKworCWlmIChBRERSX0lOX1JBTkdFKG9mZiwgUUxDTklDX0FERFJfT0NNMCwgUUxDTklDX0FERFJfT0NNMF9NQVgpKQorCQlyZXR1cm4gcWxjbmljX3BjaV9tZW1fYWNjZXNzX2RpcmVjdChhZGFwdGVyLCBvZmYsICZkYXRhLCAxKTsKKworCXJldHVybiAtRUlPOworCitjb3JyZWN0OgorCXN0cmlkZSA9IFFMQ05JQ19JU19SRVZJU0lPTl9QM1AoYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkKSA/IDE2IDogODsKKworCW9mZjggPSBvZmYgJiB+KHN0cmlkZS0xKTsKKworCW11dGV4X2xvY2soJmFkYXB0ZXItPmFody5tZW1fbG9jayk7CisKKwl3cml0ZWwob2ZmOCwgKG1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfQUREUl9MTykpOworCXdyaXRlbCgwLCAobWVtX2NyYiArIE1JVV9URVNUX0FHVF9BRERSX0hJKSk7CisKKwlpID0gMDsKKwlpZiAoc3RyaWRlID09IDE2KSB7CisJCXdyaXRlbChUQV9DVExfRU5BQkxFLCAobWVtX2NyYiArIFRFU1RfQUdUX0NUUkwpKTsKKwkJd3JpdGVsKChUQV9DVExfU1RBUlQgfCBUQV9DVExfRU5BQkxFKSwKKwkJCQkobWVtX2NyYiArIFRFU1RfQUdUX0NUUkwpKTsKKworCQlmb3IgKGogPSAwOyBqIDwgTUFYX0NUTF9DSEVDSzsgaisrKSB7CisJCQl0ZW1wID0gcmVhZGwobWVtX2NyYiArIFRFU1RfQUdUX0NUUkwpOworCQkJaWYgKCh0ZW1wICYgVEFfQ1RMX0JVU1kpID09IDApCisJCQkJYnJlYWs7CisJCX0KKworCQlpZiAoaiA+PSBNQVhfQ1RMX0NIRUNLKSB7CisJCQlyZXQgPSAtRUlPOworCQkJZ290byBkb25lOworCQl9CisKKwkJaSA9IChvZmYgJiAweGYpID8gMCA6IDI7CisJCXdyaXRlbChyZWFkbChtZW1fY3JiICsgTUlVX1RFU1RfQUdUX1JEREFUQShpKSksCisJCQkJbWVtX2NyYiArIE1JVV9URVNUX0FHVF9XUkRBVEEoaSkpOworCQl3cml0ZWwocmVhZGwobWVtX2NyYiArIE1JVV9URVNUX0FHVF9SRERBVEEoaSsxKSksCisJCQkJbWVtX2NyYiArIE1JVV9URVNUX0FHVF9XUkRBVEEoaSsxKSk7CisJCWkgPSAob2ZmICYgMHhmKSA/IDIgOiAwOworCX0KKworCXdyaXRlbChkYXRhICYgMHhmZmZmZmZmZiwKKwkJCW1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfV1JEQVRBKGkpKTsKKwl3cml0ZWwoKGRhdGEgPj4gMzIpICYgMHhmZmZmZmZmZiwKKwkJCW1lbV9jcmIgKyBNSVVfVEVTVF9BR1RfV1JEQVRBKGkrMSkpOworCisJd3JpdGVsKChUQV9DVExfRU5BQkxFIHwgVEFfQ1RMX1dSSVRFKSwgKG1lbV9jcmIgKyBURVNUX0FHVF9DVFJMKSk7CisJd3JpdGVsKChUQV9DVExfU1RBUlQgfCBUQV9DVExfRU5BQkxFIHwgVEFfQ1RMX1dSSVRFKSwKKwkJCShtZW1fY3JiICsgVEVTVF9BR1RfQ1RSTCkpOworCisJZm9yIChqID0gMDsgaiA8IE1BWF9DVExfQ0hFQ0s7IGorKykgeworCQl0ZW1wID0gcmVhZGwobWVtX2NyYiArIFRFU1RfQUdUX0NUUkwpOworCQlpZiAoKHRlbXAgJiBUQV9DVExfQlVTWSkgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCWlmIChqID49IE1BWF9DVExfQ0hFQ0spIHsKKwkJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkJImZhaWxlZCB0byB3cml0ZSB0aHJvdWdoIGFnZW50XG4iKTsKKwkJcmV0ID0gLUVJTzsKKwl9IGVsc2UKKwkJcmV0ID0gMDsKKworZG9uZToKKwltdXRleF91bmxvY2soJmFkYXB0ZXItPmFody5tZW1fbG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQKK3FsY25pY19wY2lfbWVtX3JlYWRfMk0oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCQl1NjQgb2ZmLCB1NjQgKmRhdGEpCit7CisJaW50IGosIHJldDsKKwl1MzIgdGVtcCwgb2ZmODsKKwl1NjQgdmFsLCBzdHJpZGU7CisJdm9pZCBfX2lvbWVtICptZW1fY3JiOworCisJLyogT25seSA2NC1iaXQgYWxpZ25lZCBhY2Nlc3MgKi8KKwlpZiAob2ZmICYgNykKKwkJcmV0dXJuIC1FSU87CisKKwkvKiBQMyBvbndhcmQsIHRlc3QgYWdlbnQgYmFzZSBmb3IgTUlVIGFuZCBTSVUgaXMgc2FtZSAqLworCWlmIChBRERSX0lOX1JBTkdFKG9mZiwgUUxDTklDX0FERFJfUURSX05FVCwKKwkJCQlRTENOSUNfQUREUl9RRFJfTkVUX01BWF9QMykpIHsKKwkJbWVtX2NyYiA9IHFsY25pY19nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCQkJUUxDTklDX0NSQl9RRFJfTkVUK01JVV9URVNUX0FHVF9CQVNFKTsKKwkJZ290byBjb3JyZWN0OworCX0KKworCWlmIChBRERSX0lOX1JBTkdFKG9mZiwgUUxDTklDX0FERFJfRERSX05FVCwgUUxDTklDX0FERFJfRERSX05FVF9NQVgpKSB7CisJCW1lbV9jcmIgPSBxbGNuaWNfZ2V0X2lvYWRkcihhZGFwdGVyLAorCQkJCVFMQ05JQ19DUkJfRERSX05FVCtNSVVfVEVTVF9BR1RfQkFTRSk7CisJCWdvdG8gY29ycmVjdDsKKwl9CisKKwlpZiAoQUREUl9JTl9SQU5HRShvZmYsIFFMQ05JQ19BRERSX09DTTAsIFFMQ05JQ19BRERSX09DTTBfTUFYKSkgeworCQlyZXR1cm4gcWxjbmljX3BjaV9tZW1fYWNjZXNzX2RpcmVjdChhZGFwdGVyLAorCQkJCW9mZiwgZGF0YSwgMCk7CisJfQorCisJcmV0dXJuIC1FSU87CisKK2NvcnJlY3Q6CisJc3RyaWRlID0gUUxDTklDX0lTX1JFVklTSU9OX1AzUChhZGFwdGVyLT5haHcucmV2aXNpb25faWQpID8gMTYgOiA4OworCisJb2ZmOCA9IG9mZiAmIH4oc3RyaWRlLTEpOworCisJbXV0ZXhfbG9jaygmYWRhcHRlci0+YWh3Lm1lbV9sb2NrKTsKKworCXdyaXRlbChvZmY4LCAobWVtX2NyYiArIE1JVV9URVNUX0FHVF9BRERSX0xPKSk7CisJd3JpdGVsKDAsIChtZW1fY3JiICsgTUlVX1RFU1RfQUdUX0FERFJfSEkpKTsKKwl3cml0ZWwoVEFfQ1RMX0VOQUJMRSwgKG1lbV9jcmIgKyBURVNUX0FHVF9DVFJMKSk7CisJd3JpdGVsKChUQV9DVExfU1RBUlQgfCBUQV9DVExfRU5BQkxFKSwgKG1lbV9jcmIgKyBURVNUX0FHVF9DVFJMKSk7CisKKwlmb3IgKGogPSAwOyBqIDwgTUFYX0NUTF9DSEVDSzsgaisrKSB7CisJCXRlbXAgPSByZWFkbChtZW1fY3JiICsgVEVTVF9BR1RfQ1RSTCk7CisJCWlmICgodGVtcCAmIFRBX0NUTF9CVVNZKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGogPj0gTUFYX0NUTF9DSEVDSykgeworCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQorCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCQkiZmFpbGVkIHRvIHJlYWQgdGhyb3VnaCBhZ2VudFxuIik7CisJCXJldCA9IC1FSU87CisJfSBlbHNlIHsKKwkJb2ZmOCA9IE1JVV9URVNUX0FHVF9SRERBVEFfTE87CisJCWlmICgoc3RyaWRlID09IDE2KSAmJiAob2ZmICYgMHhmKSkKKwkJCW9mZjggPSBNSVVfVEVTVF9BR1RfUkREQVRBX1VQUEVSX0xPOworCisJCXRlbXAgPSByZWFkbChtZW1fY3JiICsgb2ZmOCArIDQpOworCQl2YWwgPSAodTY0KXRlbXAgPDwgMzI7CisJCXZhbCB8PSByZWFkbChtZW1fY3JiICsgb2ZmOCk7CisJCSpkYXRhID0gdmFsOworCQlyZXQgPSAwOworCX0KKworCW11dGV4X3VubG9jaygmYWRhcHRlci0+YWh3Lm1lbV9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBxbGNuaWNfZ2V0X2JvYXJkX2luZm8oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBvZmZzZXQsIGJvYXJkX3R5cGUsIG1hZ2ljOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCW9mZnNldCA9IFFMQ05JQ19GV19NQUdJQ19PRkZTRVQ7CisJaWYgKHFsY25pY19yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIG9mZnNldCwgJm1hZ2ljKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAobWFnaWMgIT0gUUxDTklDX0JESU5GT19NQUdJQykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbnZhbGlkIGJvYXJkIGNvbmZpZywgbWFnaWM9JTA4eFxuIiwKKwkJCW1hZ2ljKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJb2Zmc2V0ID0gUUxDTklDX0JSRFRZUEVfT0ZGU0VUOworCWlmIChxbGNuaWNfcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBvZmZzZXQsICZib2FyZF90eXBlKSkKKwkJcmV0dXJuIC1FSU87CisKKwlhZGFwdGVyLT5haHcuYm9hcmRfdHlwZSA9IGJvYXJkX3R5cGU7CisKKwlpZiAoYm9hcmRfdHlwZSA9PSBRTENOSUNfQlJEVFlQRV9QM180X0dCX01NKSB7CisJCXUzMiBncGlvID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfUk9NVVNCX0dMQl9QQURfR1BJT19JKTsKKwkJaWYgKChncGlvICYgMHg4MDAwKSA9PSAwKQorCQkJYm9hcmRfdHlwZSA9IFFMQ05JQ19CUkRUWVBFX1AzXzEwR19UUDsKKwl9CisKKwlzd2l0Y2ggKGJvYXJkX3R5cGUpIHsKKwljYXNlIFFMQ05JQ19CUkRUWVBFX1AzX0hNRVo6CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM19YR19MT006CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfQ1g0OgorCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNfMTBHX0NYNF9MUDoKKwljYXNlIFFMQ05JQ19CUkRUWVBFX1AzX0lNRVo6CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfU0ZQX1BMVVM6CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM18xMEdfU0ZQX0NUOgorCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNfMTBHX1NGUF9RVDoKKwljYXNlIFFMQ05JQ19CUkRUWVBFX1AzXzEwR19YRlA6CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM18xMDAwMF9CQVNFX1Q6CisJCWFkYXB0ZXItPmFody5wb3J0X3R5cGUgPSBRTENOSUNfWEdCRTsKKwkJYnJlYWs7CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM19SRUZfUUc6CisJY2FzZSBRTENOSUNfQlJEVFlQRV9QM180X0dCOgorCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNfNF9HQl9NTToKKwkJYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9IFFMQ05JQ19HQkU7CisJCWJyZWFrOworCWNhc2UgUUxDTklDX0JSRFRZUEVfUDNfMTBHX1RQOgorCQlhZGFwdGVyLT5haHcucG9ydF90eXBlID0gKGFkYXB0ZXItPnBvcnRudW0gPCAyKSA/CisJCQlRTENOSUNfWEdCRSA6IFFMQ05JQ19HQkU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInVua25vd24gYm9hcmQgdHlwZSAleFxuIiwgYm9hcmRfdHlwZSk7CisJCWFkYXB0ZXItPmFody5wb3J0X3R5cGUgPSBRTENOSUNfWEdCRTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludAorcWxjbmljX3dvbF9zdXBwb3J0ZWQoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiB3b2xfY2ZnOworCisJd29sX2NmZyA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX1dPTF9DT05GSUdfTlYpOworCWlmICh3b2xfY2ZnICYgKDFVTCA8PCBhZGFwdGVyLT5wb3J0bnVtKSkgeworCQl3b2xfY2ZnID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfV09MX0NPTkZJRyk7CisJCWlmICh3b2xfY2ZnICYgKDEgPDwgYWRhcHRlci0+cG9ydG51bSkpCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50IHFsY25pY19jb25maWdfbGVkKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIHN0YXRlLCB1MzIgcmF0ZSkKK3sKKwlzdHJ1Y3QgcWxjbmljX25pY19yZXEgICByZXE7CisJaW50IHJ2OworCXU2NCB3b3JkOworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihzdHJ1Y3QgcWxjbmljX25pY19yZXEpKTsKKwlyZXEucWhkciA9IGNwdV90b19sZTY0KFFMQ05JQ19IT1NUX1JFUVVFU1QgPDwgMjMpOworCisJd29yZCA9IFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19MRUQgfCAoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KTsKKwlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmQpOworCisJcmVxLndvcmRzWzBdID0gY3B1X3RvX2xlNjQoKHU2NClyYXRlIDw8IDMyKTsKKwlyZXEud29yZHNbMV0gPSBjcHVfdG9fbGU2NChzdGF0ZSk7CisKKwlydiA9IHFsY25pY19zZW5kX2NtZF9kZXNjcyhhZGFwdGVyLCAoc3RydWN0IGNtZF9kZXNjX3R5cGUwICopJnJlcSwgMSk7CisJaWYgKHJ2KQorCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJMRUQgY29uZmlndXJhdGlvbiBmYWlsZWQuXG4iKTsKKworCXJldHVybiBydjsKK30KKworc3RhdGljIGludCBxbGNuaWNfc2V0X2Z3X2xvb3BiYWNrKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIGZsYWcpCit7CisJc3RydWN0IHFsY25pY19uaWNfcmVxCXJlcTsKKwlpbnQJCQlydjsKKwl1NjQJCQl3b3JkOworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihzdHJ1Y3QgcWxjbmljX25pY19yZXEpKTsKKwlyZXEucWhkciA9IGNwdV90b19sZTY0KFFMQ05JQ19IT1NUX1JFUVVFU1QgPDwgMjMpOworCisJd29yZCA9IFFMQ05JQ19IMkNfT1BDT0RFX0NPTkZJR19MT09QQkFDSyB8CisJCQkoKHU2NClhZGFwdGVyLT5wb3J0bnVtIDw8IDE2KTsKKwlyZXEucmVxX2hkciA9IGNwdV90b19sZTY0KHdvcmQpOworCXJlcS53b3Jkc1swXSA9IGNwdV90b19sZTY0KGZsYWcpOworCisJcnYgPSBxbGNuaWNfc2VuZF9jbWRfZGVzY3MoYWRhcHRlciwgKHN0cnVjdCBjbWRfZGVzY190eXBlMCAqKSZyZXEsIDEpOworCWlmIChydikKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJIiVzdGluZyBsb29wYmFjayBtb2RlIGZhaWxlZC5cbiIsCisJCQkJCWZsYWcgPyAiU2V0IiA6ICJSZXNldCIpOworCXJldHVybiBydjsKK30KKworaW50IHFsY25pY19zZXRfaWxiX21vZGUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChxbGNuaWNfc2V0X2Z3X2xvb3BiYWNrKGFkYXB0ZXIsIDEpKQorCQlyZXR1cm4gLUVJTzsKKworCWlmIChxbGNuaWNfbmljX3NldF9wcm9taXNjKGFkYXB0ZXIsCisJCQkJVlBPUlRfTUlTU19NT0RFX0FDQ0VQVF9BTEwpKSB7CisJCXFsY25pY19zZXRfZndfbG9vcGJhY2soYWRhcHRlciwgMCk7CisJCXJldHVybiAtRUlPOworCX0KKworCW1zbGVlcCgxMDAwKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBxbGNuaWNfY2xlYXJfaWxiX21vZGUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBtb2RlID0gVlBPUlRfTUlTU19NT0RFX0RST1A7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCXFsY25pY19zZXRfZndfbG9vcGJhY2soYWRhcHRlciwgMCk7CisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQorCQltb2RlID0gVlBPUlRfTUlTU19NT0RFX0FDQ0VQVF9BTEw7CisJZWxzZSBpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkKKwkJbW9kZSA9IFZQT1JUX01JU1NfTU9ERV9BQ0NFUFRfTVVMVEk7CisKKwlxbGNuaWNfbmljX3NldF9wcm9taXNjKGFkYXB0ZXIsIG1vZGUpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19pbml0LmMgYi9kcml2ZXJzL25ldC9xbGNuaWMvcWxjbmljX2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTAwYWI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19pbml0LmMKQEAgLTAsMCArMSwxNTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IC0gUUxvZ2ljIENvcnBvcmF0aW9uLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwKKyAqIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24KKyAqIGluIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgInFsY25pYy5oIgorCitzdHJ1Y3QgY3JiX2FkZHJfcGFpciB7CisJdTMyIGFkZHI7CisJdTMyIGRhdGE7Cit9OworCisjZGVmaW5lIFFMQ05JQ19NQVhfQ1JCX1hGT1JNIDYwCitzdGF0aWMgdW5zaWduZWQgaW50IGNyYl9hZGRyX3hmb3JtW1FMQ05JQ19NQVhfQ1JCX1hGT1JNXTsKKworI2RlZmluZSBjcmJfYWRkcl90cmFuc2Zvcm0obmFtZSkgXAorCShjcmJfYWRkcl94Zm9ybVtRTENOSUNfSFdfUFhfTUFQX0NSQl8jI25hbWVdID0gXAorCVFMQ05JQ19IV19DUkJfSFVCX0FHVF9BRFJfIyNuYW1lIDw8IDIwKQorCisjZGVmaW5lIFFMQ05JQ19BRERSX0VSUk9SICgweGZmZmZmZmZmKQorCitzdGF0aWMgdm9pZAorcWxjbmljX3Bvc3RfcnhfYnVmZmVyc19ub2RiKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwkJc3RydWN0IHFsY25pY19ob3N0X3Jkc19yaW5nICpyZHNfcmluZyk7CisKK3N0YXRpYyB2b2lkIGNyYl9hZGRyX3RyYW5zZm9ybV9zZXR1cCh2b2lkKQoreworCWNyYl9hZGRyX3RyYW5zZm9ybShYRE1BKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oVElNUik7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFNSRSk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFNRTjMpOworCWNyYl9hZGRyX3RyYW5zZm9ybShTUU4yKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oU1FOMSk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFNRTjApOworCWNyYl9hZGRyX3RyYW5zZm9ybShTUVMzKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oU1FTMik7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFNRUzEpOworCWNyYl9hZGRyX3RyYW5zZm9ybShTUVMwKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUlBNWDcpOworCWNyYl9hZGRyX3RyYW5zZm9ybShSUE1YNik7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFJQTVg1KTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUlBNWDQpOworCWNyYl9hZGRyX3RyYW5zZm9ybShSUE1YMyk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFJQTVgyKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUlBNWDEpOworCWNyYl9hZGRyX3RyYW5zZm9ybShSUE1YMCk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFJPTVVTQik7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFNOKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUU1OKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUU1TKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUEdOSSk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFBHTkQpOworCWNyYl9hZGRyX3RyYW5zZm9ybShQR04zKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUEdOMik7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFBHTjEpOworCWNyYl9hZGRyX3RyYW5zZm9ybShQR04wKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUEdTSSk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFBHU0QpOworCWNyYl9hZGRyX3RyYW5zZm9ybShQR1MzKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUEdTMik7CisJY3JiX2FkZHJfdHJhbnNmb3JtKFBHUzEpOworCWNyYl9hZGRyX3RyYW5zZm9ybShQR1MwKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oUFMpOworCWNyYl9hZGRyX3RyYW5zZm9ybShQSCk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKE5JVSk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKEkyUSk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKEVHKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oTU4pOworCWNyYl9hZGRyX3RyYW5zZm9ybShNUyk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKENBUzIpOworCWNyYl9hZGRyX3RyYW5zZm9ybShDQVMxKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oQ0FTMCk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKENBTSk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKEMyQzEpOworCWNyYl9hZGRyX3RyYW5zZm9ybShDMkMwKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oU01CKTsKKwljcmJfYWRkcl90cmFuc2Zvcm0oT0NNMCk7CisJY3JiX2FkZHJfdHJhbnNmb3JtKEkyQzApOworfQorCit2b2lkIHFsY25pY19yZWxlYXNlX3J4X2J1ZmZlcnMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eDsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOworCXN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICpyeF9idWY7CisJaW50IGksIHJpbmc7CisKKwlyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Jkc19yaW5nczsgcmluZysrKSB7CisJCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CisJCWZvciAoaSA9IDA7IGkgPCByZHNfcmluZy0+bnVtX2Rlc2M7ICsraSkgeworCQkJcnhfYnVmID0gJihyZHNfcmluZy0+cnhfYnVmX2FycltpXSk7CisJCQlpZiAocnhfYnVmLT5zdGF0ZSA9PSBRTENOSUNfQlVGRkVSX0ZSRUUpCisJCQkJY29udGludWU7CisJCQlwY2lfdW5tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsCisJCQkJCXJ4X2J1Zi0+ZG1hLAorCQkJCQlyZHNfcmluZy0+ZG1hX3NpemUsCisJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlpZiAocnhfYnVmLT5za2IgIT0gTlVMTCkKKwkJCQlkZXZfa2ZyZWVfc2tiX2FueShyeF9idWYtPnNrYik7CisJCX0KKwl9Cit9CisKK3ZvaWQgcWxjbmljX3JlbGVhc2VfdHhfYnVmZmVycyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHFsY25pY19jbWRfYnVmZmVyICpjbWRfYnVmOworCXN0cnVjdCBxbGNuaWNfc2tiX2ZyYWcgKmJ1ZmZyYWc7CisJaW50IGksIGo7CisJc3RydWN0IHFsY25pY19ob3N0X3R4X3JpbmcgKnR4X3JpbmcgPSBhZGFwdGVyLT50eF9yaW5nOworCisJY21kX2J1ZiA9IHR4X3JpbmctPmNtZF9idWZfYXJyOworCWZvciAoaSA9IDA7IGkgPCB0eF9yaW5nLT5udW1fZGVzYzsgaSsrKSB7CisJCWJ1ZmZyYWcgPSBjbWRfYnVmLT5mcmFnX2FycmF5OworCQlpZiAoYnVmZnJhZy0+ZG1hKSB7CisJCQlwY2lfdW5tYXBfc2luZ2xlKGFkYXB0ZXItPnBkZXYsIGJ1ZmZyYWctPmRtYSwKKwkJCQkJIGJ1ZmZyYWctPmxlbmd0aCwgUENJX0RNQV9UT0RFVklDRSk7CisJCQlidWZmcmFnLT5kbWEgPSAwVUxMOworCQl9CisJCWZvciAoaiA9IDA7IGogPCBjbWRfYnVmLT5mcmFnX2NvdW50OyBqKyspIHsKKwkJCWJ1ZmZyYWcrKzsKKwkJCWlmIChidWZmcmFnLT5kbWEpIHsKKwkJCQlwY2lfdW5tYXBfcGFnZShhZGFwdGVyLT5wZGV2LCBidWZmcmFnLT5kbWEsCisJCQkJCSAgICAgICBidWZmcmFnLT5sZW5ndGgsCisJCQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQlidWZmcmFnLT5kbWEgPSAwVUxMOworCQkJfQorCQl9CisJCWlmIChjbWRfYnVmLT5za2IpIHsKKwkJCWRldl9rZnJlZV9za2JfYW55KGNtZF9idWYtPnNrYik7CisJCQljbWRfYnVmLT5za2IgPSBOVUxMOworCQl9CisJCWNtZF9idWYrKzsKKwl9Cit9CisKK3ZvaWQgcWxjbmljX2ZyZWVfc3dfcmVzb3VyY2VzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHg7CisJc3RydWN0IHFsY25pY19ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfdHhfcmluZyAqdHhfcmluZzsKKwlpbnQgcmluZzsKKworCXJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCisJaWYgKHJlY3ZfY3R4LT5yZHNfcmluZ3MgPT0gTlVMTCkKKwkJZ290byBza2lwX3JkczsKKworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKKwkJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKKwkJdmZyZWUocmRzX3JpbmctPnJ4X2J1Zl9hcnIpOworCQlyZHNfcmluZy0+cnhfYnVmX2FyciA9IE5VTEw7CisJfQorCWtmcmVlKHJlY3ZfY3R4LT5yZHNfcmluZ3MpOworCitza2lwX3JkczoKKwlpZiAoYWRhcHRlci0+dHhfcmluZyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwl0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKKwl2ZnJlZSh0eF9yaW5nLT5jbWRfYnVmX2Fycik7CisJa2ZyZWUoYWRhcHRlci0+dHhfcmluZyk7Cit9CisKK2ludCBxbGNuaWNfYWxsb2Nfc3dfcmVzb3VyY2VzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHg7CisJc3RydWN0IHFsY25pY19ob3N0X3Jkc19yaW5nICpyZHNfcmluZzsKKwlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCXN0cnVjdCBxbGNuaWNfaG9zdF90eF9yaW5nICp0eF9yaW5nOworCXN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICpyeF9idWY7CisJaW50IHJpbmcsIGksIHNpemU7CisKKwlzdHJ1Y3QgcWxjbmljX2NtZF9idWZmZXIgKmNtZF9idWZfYXJyOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBxbGNuaWNfaG9zdF90eF9yaW5nKTsKKwl0eF9yaW5nID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAodHhfcmluZyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJm5ldGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHR4IHJpbmcgc3RydWN0XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWFkYXB0ZXItPnR4X3JpbmcgPSB0eF9yaW5nOworCisJdHhfcmluZy0+bnVtX2Rlc2MgPSBhZGFwdGVyLT5udW1fdHhkOworCXR4X3JpbmctPnR4cSA9IG5ldGRldl9nZXRfdHhfcXVldWUobmV0ZGV2LCAwKTsKKworCWNtZF9idWZfYXJyID0gdm1hbGxvYyhUWF9CVUZGX1JJTkdTSVpFKHR4X3JpbmcpKTsKKwlpZiAoY21kX2J1Zl9hcnIgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSBjbWQgYnVmZmVyIHJpbmdcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtc2V0KGNtZF9idWZfYXJyLCAwLCBUWF9CVUZGX1JJTkdTSVpFKHR4X3JpbmcpKTsKKwl0eF9yaW5nLT5jbWRfYnVmX2FyciA9IGNtZF9idWZfYXJyOworCisJcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisKKwlzaXplID0gYWRhcHRlci0+bWF4X3Jkc19yaW5ncyAqIHNpemVvZihzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcpOworCXJkc19yaW5nID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAocmRzX3JpbmcgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgImZhaWxlZCB0byBhbGxvY2F0ZSByZHMgcmluZyBzdHJ1Y3RcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcmVjdl9jdHgtPnJkc19yaW5ncyA9IHJkc19yaW5nOworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlyZHNfcmluZyA9ICZyZWN2X2N0eC0+cmRzX3JpbmdzW3JpbmddOworCQlzd2l0Y2ggKHJpbmcpIHsKKwkJY2FzZSBSQ1ZfUklOR19OT1JNQUw6CisJCQlyZHNfcmluZy0+bnVtX2Rlc2MgPSBhZGFwdGVyLT5udW1fcnhkOworCQkJaWYgKGFkYXB0ZXItPmFody5jdXRfdGhyb3VnaCkgeworCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSA9CisJCQkJCVFMQ05JQ19DVF9ERUZBVUxUX1JYX0JVRl9MRU47CisJCQkJcmRzX3JpbmctPnNrYl9zaXplID0KKwkJCQkJUUxDTklDX0NUX0RFRkFVTFRfUlhfQlVGX0xFTjsKKwkJCX0gZWxzZSB7CisJCQkJcmRzX3JpbmctPmRtYV9zaXplID0KKwkJCQkJUUxDTklDX1AzX1JYX0JVRl9NQVhfTEVOOworCQkJCXJkc19yaW5nLT5za2Jfc2l6ZSA9CisJCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSArIE5FVF9JUF9BTElHTjsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgUkNWX1JJTkdfSlVNQk86CisJCQlyZHNfcmluZy0+bnVtX2Rlc2MgPSBhZGFwdGVyLT5udW1fanVtYm9fcnhkOworCQkJcmRzX3JpbmctPmRtYV9zaXplID0KKwkJCQlRTENOSUNfUDNfUlhfSlVNQk9fQlVGX01BWF9MRU47CisKKwkJCWlmIChhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBRTENOSUNfRldfQ0FQQUJJTElUWV9IV19MUk8pCisJCQkJcmRzX3JpbmctPmRtYV9zaXplICs9IFFMQ05JQ19MUk9fQlVGRkVSX0VYVFJBOworCisJCQlyZHNfcmluZy0+c2tiX3NpemUgPQorCQkJCXJkc19yaW5nLT5kbWFfc2l6ZSArIE5FVF9JUF9BTElHTjsKKwkJCWJyZWFrOworCisJCWNhc2UgUkNWX1JJTkdfTFJPOgorCQkJcmRzX3JpbmctPm51bV9kZXNjID0gYWRhcHRlci0+bnVtX2xyb19yeGQ7CisJCQlyZHNfcmluZy0+ZG1hX3NpemUgPSBRTENOSUNfUlhfTFJPX0JVRkZFUl9MRU5HVEg7CisJCQlyZHNfcmluZy0+c2tiX3NpemUgPSByZHNfcmluZy0+ZG1hX3NpemUgKyBORVRfSVBfQUxJR047CisJCQlicmVhazsKKworCQl9CisJCXJkc19yaW5nLT5yeF9idWZfYXJyID0gKHN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICopCisJCQl2bWFsbG9jKFJDVl9CVUZGX1JJTkdTSVpFKHJkc19yaW5nKSk7CisJCWlmIChyZHNfcmluZy0+cnhfYnVmX2FyciA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSAiCisJCQkJInJ4IGJ1ZmZlciByaW5nICVkXG4iLCByaW5nKTsKKwkJCWdvdG8gZXJyX291dDsKKwkJfQorCQltZW1zZXQocmRzX3JpbmctPnJ4X2J1Zl9hcnIsIDAsIFJDVl9CVUZGX1JJTkdTSVpFKHJkc19yaW5nKSk7CisJCUlOSVRfTElTVF9IRUFEKCZyZHNfcmluZy0+ZnJlZV9saXN0KTsKKwkJLyoKKwkJICogTm93IGdvIHRocm91Z2ggYWxsIG9mIHRoZW0sIHNldCByZWZlcmVuY2UgaGFuZGxlcworCQkgKiBhbmQgcHV0IHRoZW0gaW4gdGhlIHF1ZXVlcy4KKwkJICovCisJCXJ4X2J1ZiA9IHJkc19yaW5nLT5yeF9idWZfYXJyOworCQlmb3IgKGkgPSAwOyBpIDwgcmRzX3JpbmctPm51bV9kZXNjOyBpKyspIHsKKwkJCWxpc3RfYWRkX3RhaWwoJnJ4X2J1Zi0+bGlzdCwKKwkJCQkJJnJkc19yaW5nLT5mcmVlX2xpc3QpOworCQkJcnhfYnVmLT5yZWZfaGFuZGxlID0gaTsKKwkJCXJ4X2J1Zi0+c3RhdGUgPSBRTENOSUNfQlVGRkVSX0ZSRUU7CisJCQlyeF9idWYrKzsKKwkJfQorCQlzcGluX2xvY2tfaW5pdCgmcmRzX3JpbmctPmxvY2spOworCX0KKworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKKwkJc2RzX3JpbmctPmlycSA9IGFkYXB0ZXItPm1zaXhfZW50cmllc1tyaW5nXS52ZWN0b3I7CisJCXNkc19yaW5nLT5hZGFwdGVyID0gYWRhcHRlcjsKKwkJc2RzX3JpbmctPm51bV9kZXNjID0gYWRhcHRlci0+bnVtX3J4ZDsKKworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1JDVl9ERVNDX1JJTkdTOyBpKyspCisJCQlJTklUX0xJU1RfSEVBRCgmc2RzX3JpbmctPmZyZWVfbGlzdFtpXSk7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9vdXQ6CisJcWxjbmljX2ZyZWVfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOworCXJldHVybiAtRU5PTUVNOworfQorCisvKgorICogVXRpbGl0eSB0byB0cmFuc2xhdGUgZnJvbSBpbnRlcm5hbCBQaGFudG9tIENSQiBhZGRyZXNzCisgKiB0byBleHRlcm5hbCBQQ0kgQ1JCIGFkZHJlc3MuCisgKi8KK3N0YXRpYyB1MzIgcWxjbmljX2RlY29kZV9jcmJfYWRkcih1MzIgYWRkcikKK3sKKwlpbnQgaTsKKwl1MzIgYmFzZV9hZGRyLCBvZmZzZXQsIHBjaV9iYXNlOworCisJY3JiX2FkZHJfdHJhbnNmb3JtX3NldHVwKCk7CisKKwlwY2lfYmFzZSA9IFFMQ05JQ19BRERSX0VSUk9SOworCWJhc2VfYWRkciA9IGFkZHIgJiAweGZmZjAwMDAwOworCW9mZnNldCA9IGFkZHIgJiAweDAwMGZmZmZmOworCisJZm9yIChpID0gMDsgaSA8IFFMQ05JQ19NQVhfQ1JCX1hGT1JNOyBpKyspIHsKKwkJaWYgKGNyYl9hZGRyX3hmb3JtW2ldID09IGJhc2VfYWRkcikgeworCQkJcGNpX2Jhc2UgPSBpIDw8IDIwOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHBjaV9iYXNlID09IFFMQ05JQ19BRERSX0VSUk9SKQorCQlyZXR1cm4gcGNpX2Jhc2U7CisJZWxzZQorCQlyZXR1cm4gcGNpX2Jhc2UgKyBvZmZzZXQ7Cit9CisKKyNkZWZpbmUgUUxDTklDX01BWF9ST01fV0FJVF9VU0VDCTEwMAorCitzdGF0aWMgaW50IHFsY25pY193YWl0X3JvbV9kb25lKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlsb25nIHRpbWVvdXQgPSAwOworCWxvbmcgZG9uZSA9IDA7CisKKwljb25kX3Jlc2NoZWQoKTsKKworCXdoaWxlIChkb25lID09IDApIHsKKwkJZG9uZSA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX1JPTVVTQl9HTEJfU1RBVFVTKTsKKwkJZG9uZSAmPSAyOworCQlpZiAoKyt0aW1lb3V0ID49IFFMQ05JQ19NQVhfUk9NX1dBSVRfVVNFQykgeworCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJCSJUaW1lb3V0IHJlYWNoZWQgIHdhaXRpbmcgZm9yIHJvbSBkb25lIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQl1ZGVsYXkoMSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRvX3JvbV9mYXN0X3JlYWQoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCQkJICAgIGludCBhZGRyLCBpbnQgKnZhbHApCit7CisJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfUk9NVVNCX1JPTV9BRERSRVNTLCBhZGRyKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19ST01VU0JfUk9NX0RVTU1ZX0JZVEVfQ05ULCAwKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19ST01VU0JfUk9NX0FCWVRFX0NOVCwgMyk7CisJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfUk9NVVNCX1JPTV9JTlNUUl9PUENPREUsIDB4Yik7CisJaWYgKHFsY25pY193YWl0X3JvbV9kb25lKGFkYXB0ZXIpKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwgIkVycm9yIHdhaXRpbmcgZm9yIHJvbSBkb25lXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCS8qIHJlc2V0IGFieXRlX2NudCBhbmQgZHVtbXlfYnl0ZV9jbnQgKi8KKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19ST01VU0JfUk9NX0FCWVRFX0NOVCwgMCk7CisJdWRlbGF5KDEwKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19ST01VU0JfUk9NX0RVTU1ZX0JZVEVfQ05ULCAwKTsKKworCSp2YWxwID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfUk9NVVNCX1JPTV9SREFUQSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG9fcm9tX2Zhc3RfcmVhZF93b3JkcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLAorCQkJCSAgdTggKmJ5dGVzLCBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgYWRkcmlkeDsKKwlpbnQgcmV0ID0gMDsKKworCWZvciAoYWRkcmlkeCA9IGFkZHI7IGFkZHJpZHggPCAoYWRkciArIHNpemUpOyBhZGRyaWR4ICs9IDQpIHsKKwkJaW50IHY7CisJCXJldCA9IGRvX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgYWRkcmlkeCwgJnYpOworCQlpZiAocmV0ICE9IDApCisJCQlicmVhazsKKwkJKihfX2xlMzIgKilieXRlcyA9IGNwdV90b19sZTMyKHYpOworCQlieXRlcyArPSA0OworCX0KKworCXJldHVybiByZXQ7Cit9CisKK2ludAorcWxjbmljX3JvbV9mYXN0X3JlYWRfd29yZHMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkciwKKwkJCQl1OCAqYnl0ZXMsIHNpemVfdCBzaXplKQoreworCWludCByZXQ7CisKKwlyZXQgPSBxbGNuaWNfcm9tX2xvY2soYWRhcHRlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBkb19yb21fZmFzdF9yZWFkX3dvcmRzKGFkYXB0ZXIsIGFkZHIsIGJ5dGVzLCBzaXplKTsKKworCXFsY25pY19yb21fdW5sb2NrKGFkYXB0ZXIpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBxbGNuaWNfcm9tX2Zhc3RfcmVhZChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyLCBpbnQgKnZhbHApCit7CisJaW50IHJldDsKKworCWlmIChxbGNuaWNfcm9tX2xvY2soYWRhcHRlcikgIT0gMCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXQgPSBkb19yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIGFkZHIsIHZhbHApOworCXFsY25pY19yb21fdW5sb2NrKGFkYXB0ZXIpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBxbGNuaWNfcGluaXRfZnJvbV9yb20oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBhZGRyLCB2YWw7CisJaW50IGksIG4sIGluaXRfZGVsYXk7CisJc3RydWN0IGNyYl9hZGRyX3BhaXIgKmJ1ZjsKKwl1bnNpZ25lZCBvZmZzZXQ7CisJdTMyIG9mZjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwkvKiByZXNldGFsbCAqLworCXFsY25pY19yb21fbG9jayhhZGFwdGVyKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19ST01VU0JfR0xCX1NXX1JFU0VULCAweGZmZmZmZmZmKTsKKwlxbGNuaWNfcm9tX3VubG9jayhhZGFwdGVyKTsKKworCWlmIChxbGNuaWNfcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCAwLCAmbikgIT0gMCB8fCAobiAhPSAweGNhZmVjYWZlKSB8fAorCQkJcWxjbmljX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgNCwgJm4pICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRVJST1IgUmVhZGluZyBjcmJfaW5pdCBhcmVhOiB2YWw6JXhcbiIsIG4pOworCQlyZXR1cm4gLUVJTzsKKwl9CisJb2Zmc2V0ID0gbiAmIDB4ZmZmZlU7CisJbiA9IChuID4+IDE2KSAmIDB4ZmZmZlU7CisKKwlpZiAobiA+PSAxMDI0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlFMT0dJQyBjYXJkIGZsYXNoIG5vdCBpbml0aWFsaXplZC5cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlidWYgPSBrY2FsbG9jKG4sIHNpemVvZihzdHJ1Y3QgY3JiX2FkZHJfcGFpciksIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gY2FsbG9jIG1lbW9yeSBmb3Igcm9tIHJlYWQuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlpZiAocWxjbmljX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgOCppICsgNCpvZmZzZXQsICZ2YWwpICE9IDAgfHwKKwkJcWxjbmljX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwgOCppICsgNCpvZmZzZXQgKyA0LCAmYWRkcikgIT0gMCkgeworCQkJa2ZyZWUoYnVmKTsKKwkJCXJldHVybiAtRUlPOworCQl9CisKKwkJYnVmW2ldLmFkZHIgPSBhZGRyOworCQlidWZbaV0uZGF0YSA9IHZhbDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisKKwkJb2ZmID0gcWxjbmljX2RlY29kZV9jcmJfYWRkcihidWZbaV0uYWRkcik7CisJCWlmIChvZmYgPT0gUUxDTklDX0FERFJfRVJST1IpIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNSQiBpbml0IHZhbHVlIG91dCBvZiByYW5nZSAleFxuIiwKKwkJCQkJYnVmW2ldLmFkZHIpOworCQkJY29udGludWU7CisJCX0KKwkJb2ZmICs9IFFMQ05JQ19QQ0lfQ1JCU1BBQ0U7CisKKwkJaWYgKG9mZiAmIDEpCisJCQljb250aW51ZTsKKworCQkvKiBza2lwcGluZyBjb2xkIHJlYm9vdCBNQUdJQyAqLworCQlpZiAob2ZmID09IFFMQ05JQ19DQU1fUkFNKDB4MWZjKSkKKwkJCWNvbnRpbnVlOworCQlpZiAob2ZmID09IChRTENOSUNfQ1JCX0kyQzAgKyAweDFjKSkKKwkJCWNvbnRpbnVlOworCQlpZiAob2ZmID09IChST01VU0JfR0xCICsgMHhiYykpIC8qIGRvIG5vdCByZXNldCBQQ0kgKi8KKwkJCWNvbnRpbnVlOworCQlpZiAob2ZmID09IChST01VU0JfR0xCICsgMHhhOCkpCisJCQljb250aW51ZTsKKwkJaWYgKG9mZiA9PSAoUk9NVVNCX0dMQiArIDB4YzgpKSAvKiBjb3JlIGNsb2NrICovCisJCQljb250aW51ZTsKKwkJaWYgKG9mZiA9PSAoUk9NVVNCX0dMQiArIDB4MjQpKSAvKiBNTiBjbG9jayAqLworCQkJY29udGludWU7CisJCWlmIChvZmYgPT0gKFJPTVVTQl9HTEIgKyAweDFjKSkgLyogTVMgY2xvY2sgKi8KKwkJCWNvbnRpbnVlOworCQlpZiAoKG9mZiAmIDB4MGZmMDAwMDApID09IFFMQ05JQ19DUkJfRERSX05FVCkKKwkJCWNvbnRpbnVlOworCQkvKiBza2lwIHRoZSBmdW5jdGlvbiBlbmFibGUgcmVnaXN0ZXIgKi8KKwkJaWYgKG9mZiA9PSBRTENOSUNfUENJRV9SRUcoUENJRV9TRVRVUF9GVU5DVElPTikpCisJCQljb250aW51ZTsKKwkJaWYgKG9mZiA9PSBRTENOSUNfUENJRV9SRUcoUENJRV9TRVRVUF9GVU5DVElPTjIpKQorCQkJY29udGludWU7CisJCWlmICgob2ZmICYgMHgwZmYwMDAwMCkgPT0gUUxDTklDX0NSQl9TTUIpCisJCQljb250aW51ZTsKKworCQlpbml0X2RlbGF5ID0gMTsKKwkJLyogQWZ0ZXIgd3JpdGluZyB0aGlzIHJlZ2lzdGVyLCBIVyBuZWVkcyB0aW1lIGZvciBDUkIgKi8KKwkJLyogdG8gcXVpZXQgZG93biAoZWxzZSBjcmJfd2luZG93IHJldHVybnMgMHhmZmZmZmZmZikgKi8KKwkJaWYgKG9mZiA9PSBRTENOSUNfUk9NVVNCX0dMQl9TV19SRVNFVCkKKwkJCWluaXRfZGVsYXkgPSAxMDAwOworCisJCVFMQ1dSMzIoYWRhcHRlciwgb2ZmLCBidWZbaV0uZGF0YSk7CisKKwkJbXNsZWVwKGluaXRfZGVsYXkpOworCX0KKwlrZnJlZShidWYpOworCisJLyogcDJkbiByZXBseUNvdW50ICovCisJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfQ1JCX1BFR19ORVRfRCArIDB4ZWMsIDB4MWUpOworCS8qIGRpc2FibGVfcGVnX2NhY2hlIDAgJiAxKi8KKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfUEVHX05FVF9EICsgMHg0YywgOCk7CisJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfQ1JCX1BFR19ORVRfSSArIDB4NGMsIDgpOworCisJLyogcGVnX2Nscl9hbGwgKi8KKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfUEVHX05FVF8wICsgMHg4LCAwKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfUEVHX05FVF8wICsgMHhjLCAwKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfUEVHX05FVF8xICsgMHg4LCAwKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfUEVHX05FVF8xICsgMHhjLCAwKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfUEVHX05FVF8yICsgMHg4LCAwKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfUEVHX05FVF8yICsgMHhjLCAwKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfUEVHX05FVF8zICsgMHg4LCAwKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfUEVHX05FVF8zICsgMHhjLCAwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcWxjbmljX2hhc19tbihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIGNhcGFiaWxpdHksIGZsYXNoZWRfdmVyOworCWNhcGFiaWxpdHkgPSAwOworCisJcWxjbmljX3JvbV9mYXN0X3JlYWQoYWRhcHRlciwKKwkJCVFMQ05JQ19GV19WRVJTSU9OX09GRlNFVCwgKGludCAqKSZmbGFzaGVkX3Zlcik7CisJZmxhc2hlZF92ZXIgPSBRTENOSUNfREVDT0RFX1ZFUlNJT04oZmxhc2hlZF92ZXIpOworCisJaWYgKGZsYXNoZWRfdmVyID49IFFMQ05JQ19WRVJTSU9OX0NPREUoNCwgMCwgMjIwKSkgeworCisJCWNhcGFiaWxpdHkgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19QRUdfVFVORV9DQVBBQklMSVRZKTsKKwkJaWYgKGNhcGFiaWxpdHkgJiBRTENOSUNfUEVHX1RVTkVfTU5fUFJFU0VOVCkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljCitzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKnFsY25pY19nZXRfdGFibGVfZGVzYyhjb25zdCB1OCAqdW5pcm9tLCBpbnQgc2VjdGlvbikKK3sKKwl1MzIgaTsKKwlzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKmRpcmVjdG9yeSA9IChzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKikgJnVuaXJvbVswXTsKKwlfX2xlMzIgZW50cmllcyA9IGNwdV90b19sZTMyKGRpcmVjdG9yeS0+bnVtX2VudHJpZXMpOworCisJZm9yIChpID0gMDsgaSA8IGVudHJpZXM7IGkrKykgeworCisJCV9fbGUzMiBvZmZzID0gY3B1X3RvX2xlMzIoZGlyZWN0b3J5LT5maW5kZXgpICsKKwkJCQkoaSAqIGNwdV90b19sZTMyKGRpcmVjdG9yeS0+ZW50cnlfc2l6ZSkpOworCQlfX2xlMzIgdGFiX3R5cGUgPSBjcHVfdG9fbGUzMigqKCh1MzIgKikmdW5pcm9tW29mZnNdICsgOCkpOworCisJCWlmICh0YWJfdHlwZSA9PSBzZWN0aW9uKQorCQkJcmV0dXJuIChzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKikgJnVuaXJvbVtvZmZzXTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludAorcWxjbmljX3NldF9wcm9kdWN0X29mZnMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCB1bmlfdGFibGVfZGVzYyAqcHRhYl9kZXNjcjsKKwljb25zdCB1OCAqdW5pcm9tID0gYWRhcHRlci0+ZnctPmRhdGE7CisJdTMyIGk7CisJX19sZTMyIGVudHJpZXM7CisJaW50IG1uX3ByZXNlbnQgPSBxbGNuaWNfaGFzX21uKGFkYXB0ZXIpOworCisJcHRhYl9kZXNjciA9IHFsY25pY19nZXRfdGFibGVfZGVzYyh1bmlyb20sCisJCQkJUUxDTklDX1VOSV9ESVJfU0VDVF9QUk9EVUNUX1RCTCk7CisJaWYgKHB0YWJfZGVzY3IgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJZW50cmllcyA9IGNwdV90b19sZTMyKHB0YWJfZGVzY3ItPm51bV9lbnRyaWVzKTsKK25vbW46CisJZm9yIChpID0gMDsgaSA8IGVudHJpZXM7IGkrKykgeworCisJCV9fbGUzMiBmbGFncywgZmlsZV9jaGlwcmV2LCBvZmZzOworCQl1OCBjaGlwcmV2ID0gYWRhcHRlci0+YWh3LnJldmlzaW9uX2lkOworCQl1MzIgZmxhZ2JpdDsKKworCQlvZmZzID0gY3B1X3RvX2xlMzIocHRhYl9kZXNjci0+ZmluZGV4KSArCisJCQkJKGkgKiBjcHVfdG9fbGUzMihwdGFiX2Rlc2NyLT5lbnRyeV9zaXplKSk7CisJCWZsYWdzID0gY3B1X3RvX2xlMzIoKigoaW50ICopJnVuaXJvbVtvZmZzXSArCisJCQkJCQlRTENOSUNfVU5JX0ZMQUdTX09GRikpOworCQlmaWxlX2NoaXByZXYgPSBjcHVfdG9fbGUzMigqKChpbnQgKikmdW5pcm9tW29mZnNdICsKKwkJCQkJCVFMQ05JQ19VTklfQ0hJUF9SRVZfT0ZGKSk7CisKKwkJZmxhZ2JpdCA9IG1uX3ByZXNlbnQgPyAxIDogMjsKKworCQlpZiAoKGNoaXByZXYgPT0gZmlsZV9jaGlwcmV2KSAmJgorCQkJCQkoKDFVTEwgPDwgZmxhZ2JpdCkgJiBmbGFncykpIHsKKwkJCWFkYXB0ZXItPmZpbGVfcHJkX29mZiA9IG9mZnM7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlpZiAobW5fcHJlc2VudCkgeworCQltbl9wcmVzZW50ID0gMDsKKwkJZ290byBub21uOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYworc3RydWN0IHVuaV9kYXRhX2Rlc2MgKnFsY25pY19nZXRfZGF0YV9kZXNjKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwkJCXUzMiBzZWN0aW9uLCB1MzIgaWR4X29mZnNldCkKK3sKKwljb25zdCB1OCAqdW5pcm9tID0gYWRhcHRlci0+ZnctPmRhdGE7CisJaW50IGlkeCA9IGNwdV90b19sZTMyKCooKGludCAqKSZ1bmlyb21bYWRhcHRlci0+ZmlsZV9wcmRfb2ZmXSArCisJCQkJCQkJCWlkeF9vZmZzZXQpKTsKKwlzdHJ1Y3QgdW5pX3RhYmxlX2Rlc2MgKnRhYl9kZXNjOworCV9fbGUzMiBvZmZzOworCisJdGFiX2Rlc2MgPSBxbGNuaWNfZ2V0X3RhYmxlX2Rlc2ModW5pcm9tLCBzZWN0aW9uKTsKKworCWlmICh0YWJfZGVzYyA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCW9mZnMgPSBjcHVfdG9fbGUzMih0YWJfZGVzYy0+ZmluZGV4KSArCisJCQkoY3B1X3RvX2xlMzIodGFiX2Rlc2MtPmVudHJ5X3NpemUpICogaWR4KTsKKworCXJldHVybiAoc3RydWN0IHVuaV9kYXRhX2Rlc2MgKikmdW5pcm9tW29mZnNdOworfQorCitzdGF0aWMgdTggKgorcWxjbmljX2dldF9ib290bGRfb2ZmcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIG9mZnMgPSBRTENOSUNfQk9PVExEX1NUQVJUOworCisJaWYgKGFkYXB0ZXItPmZ3X3R5cGUgPT0gUUxDTklDX1VOSUZJRURfUk9NSU1BR0UpCisJCW9mZnMgPSBjcHVfdG9fbGUzMigocWxjbmljX2dldF9kYXRhX2Rlc2MoYWRhcHRlciwKKwkJCQkJUUxDTklDX1VOSV9ESVJfU0VDVF9CT09UTEQsCisJCQkJCVFMQ05JQ19VTklfQk9PVExEX0lEWF9PRkYpKS0+ZmluZGV4KTsKKworCXJldHVybiAodTggKikmYWRhcHRlci0+ZnctPmRhdGFbb2Zmc107Cit9CisKK3N0YXRpYyB1OCAqCitxbGNuaWNfZ2V0X2Z3X29mZnMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBvZmZzID0gUUxDTklDX0lNQUdFX1NUQVJUOworCisJaWYgKGFkYXB0ZXItPmZ3X3R5cGUgPT0gUUxDTklDX1VOSUZJRURfUk9NSU1BR0UpCisJCW9mZnMgPSBjcHVfdG9fbGUzMigocWxjbmljX2dldF9kYXRhX2Rlc2MoYWRhcHRlciwKKwkJCQkJUUxDTklDX1VOSV9ESVJfU0VDVF9GVywKKwkJCQkJUUxDTklDX1VOSV9GSVJNV0FSRV9JRFhfT0ZGKSktPmZpbmRleCk7CisKKwlyZXR1cm4gKHU4ICopJmFkYXB0ZXItPmZ3LT5kYXRhW29mZnNdOworfQorCitzdGF0aWMgX19sZTMyCitxbGNuaWNfZ2V0X2Z3X3NpemUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5md190eXBlID09IFFMQ05JQ19VTklGSUVEX1JPTUlNQUdFKQorCQlyZXR1cm4gY3B1X3RvX2xlMzIoKHFsY25pY19nZXRfZGF0YV9kZXNjKGFkYXB0ZXIsCisJCQkJCVFMQ05JQ19VTklfRElSX1NFQ1RfRlcsCisJCQkJCVFMQ05JQ19VTklfRklSTVdBUkVfSURYX09GRikpLT5zaXplKTsKKwllbHNlCisJCXJldHVybiBjcHVfdG9fbGUzMigKKwkJCSoodTMyICopJmFkYXB0ZXItPmZ3LT5kYXRhW1FMQ05JQ19GV19TSVpFX09GRlNFVF0pOworfQorCitzdGF0aWMgX19sZTMyCitxbGNuaWNfZ2V0X2Z3X3ZlcnNpb24oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCB1bmlfZGF0YV9kZXNjICpmd19kYXRhX2Rlc2M7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IGFkYXB0ZXItPmZ3OworCV9fbGUzMiBtYWpvciwgbWlub3IsIHN1YjsKKwljb25zdCB1OCAqdmVyX3N0cjsKKwlpbnQgaSwgcmV0OworCisJaWYgKGFkYXB0ZXItPmZ3X3R5cGUgIT0gUUxDTklDX1VOSUZJRURfUk9NSU1BR0UpCisJCXJldHVybiBjcHVfdG9fbGUzMigqKHUzMiAqKSZmdy0+ZGF0YVtRTENOSUNfRldfVkVSU0lPTl9PRkZTRVRdKTsKKworCWZ3X2RhdGFfZGVzYyA9IHFsY25pY19nZXRfZGF0YV9kZXNjKGFkYXB0ZXIsIFFMQ05JQ19VTklfRElSX1NFQ1RfRlcsCisJCQlRTENOSUNfVU5JX0ZJUk1XQVJFX0lEWF9PRkYpOworCXZlcl9zdHIgPSBmdy0+ZGF0YSArIGNwdV90b19sZTMyKGZ3X2RhdGFfZGVzYy0+ZmluZGV4KSArCisJCWNwdV90b19sZTMyKGZ3X2RhdGFfZGVzYy0+c2l6ZSkgLSAxNzsKKworCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7CisJCWlmICghc3RybmNtcCgmdmVyX3N0cltpXSwgIlJFVj0iLCA0KSkgeworCQkJcmV0ID0gc3NjYW5mKCZ2ZXJfc3RyW2krNF0sICIldS4ldS4ldSAiLAorCQkJCQkmbWFqb3IsICZtaW5vciwgJnN1Yik7CisJCQlpZiAocmV0ICE9IDMpCisJCQkJcmV0dXJuIDA7CisJCQllbHNlCisJCQkJcmV0dXJuIG1ham9yICsgKG1pbm9yIDw8IDgpICsgKHN1YiA8PCAxNik7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIF9fbGUzMgorcWxjbmljX2dldF9iaW9zX3ZlcnNpb24oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncgPSBhZGFwdGVyLT5mdzsKKwlfX2xlMzIgYmlvc192ZXIsIHByZF9vZmYgPSBhZGFwdGVyLT5maWxlX3ByZF9vZmY7CisKKwlpZiAoYWRhcHRlci0+ZndfdHlwZSAhPSBRTENOSUNfVU5JRklFRF9ST01JTUFHRSkKKwkJcmV0dXJuIGNwdV90b19sZTMyKAorCQkJKih1MzIgKikmZnctPmRhdGFbUUxDTklDX0JJT1NfVkVSU0lPTl9PRkZTRVRdKTsKKworCWJpb3NfdmVyID0gY3B1X3RvX2xlMzIoKigodTMyICopICgmZnctPmRhdGFbcHJkX29mZl0pCisJCQkJKyBRTENOSUNfVU5JX0JJT1NfVkVSU0lPTl9PRkYpKTsKKworCXJldHVybiAoYmlvc192ZXIgPDwgMjQpICsgKChiaW9zX3ZlciA+PiA4KSAmIDB4ZmYwMCkgKyAoYmlvc192ZXIgPj4gMjQpOworfQorCitpbnQKK3FsY25pY19uZWVkX2Z3X3Jlc2V0KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgY291bnQsIG9sZF9jb3VudDsKKwl1MzIgdmFsLCB2ZXJzaW9uLCBtYWpvciwgbWlub3IsIGJ1aWxkOworCWludCBpLCB0aW1lb3V0OworCisJaWYgKGFkYXB0ZXItPm5lZWRfZndfcmVzZXQpCisJCXJldHVybiAxOworCisJLyogbGFzdCBhdHRlbXB0IGhhZCBmYWlsZWQgKi8KKwlpZiAoUUxDUkQzMihhZGFwdGVyLCBDUkJfQ01EUEVHX1NUQVRFKSA9PSBQSEFOX0lOSVRJQUxJWkVfRkFJTEVEKQorCQlyZXR1cm4gMTsKKworCW9sZF9jb3VudCA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX1BFR19BTElWRV9DT1VOVEVSKTsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisKKwkJdGltZW91dCA9IG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDIwMCk7CisJCWlmICh0aW1lb3V0KSB7CisJCQlRTENXUjMyKGFkYXB0ZXIsIENSQl9DTURQRUdfU1RBVEUsCisJCQkJCVBIQU5fSU5JVElBTElaRV9GQUlMRUQpOworCQkJcmV0dXJuIC1FSU5UUjsKKwkJfQorCisJCWNvdW50ID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfUEVHX0FMSVZFX0NPVU5URVIpOworCQlpZiAoY291bnQgIT0gb2xkX2NvdW50KQorCQkJYnJlYWs7CisJfQorCisJLyogZmlybXdhcmUgaXMgZGVhZCAqLworCWlmIChjb3VudCA9PSBvbGRfY291bnQpCisJCXJldHVybiAxOworCisJLyogY2hlY2sgaWYgd2UgaGF2ZSBnb3QgbmV3ZXIgb3IgZGlmZmVyZW50IGZpbGUgZmlybXdhcmUgKi8KKwlpZiAoYWRhcHRlci0+ZncpIHsKKworCQl2YWwgPSBxbGNuaWNfZ2V0X2Z3X3ZlcnNpb24oYWRhcHRlcik7CisKKwkJdmVyc2lvbiA9IFFMQ05JQ19ERUNPREVfVkVSU0lPTih2YWwpOworCisJCW1ham9yID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfRldfVkVSU0lPTl9NQUpPUik7CisJCW1pbm9yID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfRldfVkVSU0lPTl9NSU5PUik7CisJCWJ1aWxkID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfRldfVkVSU0lPTl9TVUIpOworCisJCWlmICh2ZXJzaW9uID4gUUxDTklDX1ZFUlNJT05fQ09ERShtYWpvciwgbWlub3IsIGJ1aWxkKSkKKwkJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqZndfbmFtZVtdID0geworCVFMQ05JQ19VTklGSUVEX1JPTUlNQUdFX05BTUUsCisJUUxDTklDX0ZMQVNIX1JPTUlNQUdFX05BTUUsCit9OworCitpbnQKK3FsY25pY19sb2FkX2Zpcm13YXJlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1NjQgKnB0cjY0OworCXUzMiBpLCBmbGFzaGFkZHIsIHNpemU7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IGFkYXB0ZXItPmZ3OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJsb2FkaW5nIGZpcm13YXJlIGZyb20gJXNcbiIsCisJCQlmd19uYW1lW2FkYXB0ZXItPmZ3X3R5cGVdKTsKKworCWlmIChmdykgeworCQlfX2xlNjQgZGF0YTsKKworCQlzaXplID0gKFFMQ05JQ19JTUFHRV9TVEFSVCAtIFFMQ05JQ19CT09UTERfU1RBUlQpIC8gODsKKworCQlwdHI2NCA9ICh1NjQgKilxbGNuaWNfZ2V0X2Jvb3RsZF9vZmZzKGFkYXB0ZXIpOworCQlmbGFzaGFkZHIgPSBRTENOSUNfQk9PVExEX1NUQVJUOworCisJCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJCWRhdGEgPSBjcHVfdG9fbGU2NChwdHI2NFtpXSk7CisKKwkJCWlmIChxbGNuaWNfcGNpX21lbV93cml0ZV8yTShhZGFwdGVyLCBmbGFzaGFkZHIsIGRhdGEpKQorCQkJCXJldHVybiAtRUlPOworCisJCQlmbGFzaGFkZHIgKz0gODsKKwkJfQorCisJCXNpemUgPSAoX19mb3JjZSB1MzIpcWxjbmljX2dldF9md19zaXplKGFkYXB0ZXIpIC8gODsKKworCQlwdHI2NCA9ICh1NjQgKilxbGNuaWNfZ2V0X2Z3X29mZnMoYWRhcHRlcik7CisJCWZsYXNoYWRkciA9IFFMQ05JQ19JTUFHRV9TVEFSVDsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCQlkYXRhID0gY3B1X3RvX2xlNjQocHRyNjRbaV0pOworCisJCQlpZiAocWxjbmljX3BjaV9tZW1fd3JpdGVfMk0oYWRhcHRlciwKKwkJCQkJCWZsYXNoYWRkciwgZGF0YSkpCisJCQkJcmV0dXJuIC1FSU87CisKKwkJCWZsYXNoYWRkciArPSA4OworCQl9CisJfSBlbHNlIHsKKwkJdTY0IGRhdGE7CisJCXUzMiBoaSwgbG87CisKKwkJc2l6ZSA9IChRTENOSUNfSU1BR0VfU1RBUlQgLSBRTENOSUNfQk9PVExEX1NUQVJUKSAvIDg7CisJCWZsYXNoYWRkciA9IFFMQ05JQ19CT09UTERfU1RBUlQ7CisKKwkJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgeworCQkJaWYgKHFsY25pY19yb21fZmFzdF9yZWFkKGFkYXB0ZXIsCisJCQkJCWZsYXNoYWRkciwgKGludCAqKSZsbykgIT0gMCkKKwkJCQlyZXR1cm4gLUVJTzsKKwkJCWlmIChxbGNuaWNfcm9tX2Zhc3RfcmVhZChhZGFwdGVyLAorCQkJCQlmbGFzaGFkZHIgKyA0LCAoaW50ICopJmhpKSAhPSAwKQorCQkJCXJldHVybiAtRUlPOworCisJCQlkYXRhID0gKCgodTY0KWhpIDw8IDMyKSB8IGxvKTsKKworCQkJaWYgKHFsY25pY19wY2lfbWVtX3dyaXRlXzJNKGFkYXB0ZXIsCisJCQkJCQlmbGFzaGFkZHIsIGRhdGEpKQorCQkJCXJldHVybiAtRUlPOworCisJCQlmbGFzaGFkZHIgKz0gODsKKwkJfQorCX0KKwltc2xlZXAoMSk7CisKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfUEVHX05FVF8wICsgMHgxOCwgMHgxMDIwKTsKKwlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19ST01VU0JfR0xCX1NXX1JFU0VULCAweDgwMDAxZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY192YWxpZGF0ZV9maXJtd2FyZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJX19sZTMyIHZhbDsKKwl1MzIgdmVyLCBtaW5fdmVyLCBiaW9zLCBtaW5fc2l6ZTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IGFkYXB0ZXItPmZ3OworCXU4IGZ3X3R5cGUgPSBhZGFwdGVyLT5md190eXBlOworCisJaWYgKGZ3X3R5cGUgPT0gUUxDTklDX1VOSUZJRURfUk9NSU1BR0UpIHsKKwkJaWYgKHFsY25pY19zZXRfcHJvZHVjdF9vZmZzKGFkYXB0ZXIpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJbWluX3NpemUgPSBRTENOSUNfVU5JX0ZXX01JTl9TSVpFOworCX0gZWxzZSB7CisJCXZhbCA9IGNwdV90b19sZTMyKCoodTMyICopJmZ3LT5kYXRhW1FMQ05JQ19GV19NQUdJQ19PRkZTRVRdKTsKKwkJaWYgKChfX2ZvcmNlIHUzMil2YWwgIT0gUUxDTklDX0JESU5GT19NQUdJQykKKwkJCXJldHVybiAtRUlOVkFMOworCisJCW1pbl9zaXplID0gUUxDTklDX0ZXX01JTl9TSVpFOworCX0KKworCWlmIChmdy0+c2l6ZSA8IG1pbl9zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXZhbCA9IHFsY25pY19nZXRfZndfdmVyc2lvbihhZGFwdGVyKTsKKworCW1pbl92ZXIgPSBRTENOSUNfVkVSU0lPTl9DT0RFKDQsIDAsIDIxNik7CisKKwl2ZXIgPSBRTENOSUNfREVDT0RFX1ZFUlNJT04odmFsKTsKKworCWlmICgoX21ham9yKHZlcikgPiBfUUxDTklDX0xJTlVYX01BSk9SKSB8fCAodmVyIDwgbWluX3ZlcikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSIlczogZmlybXdhcmUgdmVyc2lvbiAlZC4lZC4lZCB1bnN1cHBvcnRlZFxuIiwKKwkJZndfbmFtZVtmd190eXBlXSwgX21ham9yKHZlciksIF9taW5vcih2ZXIpLCBfYnVpbGQodmVyKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZhbCA9IHFsY25pY19nZXRfYmlvc192ZXJzaW9uKGFkYXB0ZXIpOworCXFsY25pY19yb21fZmFzdF9yZWFkKGFkYXB0ZXIsIFFMQ05JQ19CSU9TX1ZFUlNJT05fT0ZGU0VULCAoaW50ICopJmJpb3MpOworCWlmICgoX19mb3JjZSB1MzIpdmFsICE9IGJpb3MpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiJXM6IGZpcm13YXJlIGJpb3MgaXMgaW5jb21wYXRpYmxlXG4iLAorCQkJCWZ3X25hbWVbZndfdHlwZV0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBjaGVjayBpZiBmbGFzaGVkIGZpcm13YXJlIGlzIG5ld2VyICovCisJaWYgKHFsY25pY19yb21fZmFzdF9yZWFkKGFkYXB0ZXIsCisJCQlRTENOSUNfRldfVkVSU0lPTl9PRkZTRVQsIChpbnQgKikmdmFsKSkKKwkJcmV0dXJuIC1FSU87CisKKwl2YWwgPSBRTENOSUNfREVDT0RFX1ZFUlNJT04odmFsKTsKKwlpZiAodmFsID4gdmVyKSB7CisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlczogZmlybXdhcmUgaXMgb2xkZXIgdGhhbiBmbGFzaFxuIiwKKwkJCQlmd19uYW1lW2Z3X3R5cGVdKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfQ0FNX1JBTSgweDFmYyksIFFMQ05JQ19CRElORk9fTUFHSUMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcWxjbmljX2dldF9uZXh0X2Z3dHlwZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTggZndfdHlwZTsKKworCXN3aXRjaCAoYWRhcHRlci0+ZndfdHlwZSkgeworCWNhc2UgUUxDTklDX1VOS05PV05fUk9NSU1BR0U6CisJCWZ3X3R5cGUgPSBRTENOSUNfVU5JRklFRF9ST01JTUFHRTsKKwkJYnJlYWs7CisKKwljYXNlIFFMQ05JQ19VTklGSUVEX1JPTUlNQUdFOgorCWRlZmF1bHQ6CisJCWZ3X3R5cGUgPSBRTENOSUNfRkxBU0hfUk9NSU1BR0U7CisJCWJyZWFrOworCX0KKworCWFkYXB0ZXItPmZ3X3R5cGUgPSBmd190eXBlOworfQorCisKKwordm9pZCBxbGNuaWNfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCByYzsKKworCWFkYXB0ZXItPmZ3X3R5cGUgPSBRTENOSUNfVU5LTk9XTl9ST01JTUFHRTsKKworbmV4dDoKKwlxbGNuaWNfZ2V0X25leHRfZnd0eXBlKGFkYXB0ZXIpOworCisJaWYgKGFkYXB0ZXItPmZ3X3R5cGUgPT0gUUxDTklDX0ZMQVNIX1JPTUlNQUdFKSB7CisJCWFkYXB0ZXItPmZ3ID0gTlVMTDsKKwl9IGVsc2UgeworCQlyYyA9IHJlcXVlc3RfZmlybXdhcmUoJmFkYXB0ZXItPmZ3LAorCQkJCWZ3X25hbWVbYWRhcHRlci0+ZndfdHlwZV0sICZwZGV2LT5kZXYpOworCQlpZiAocmMgIT0gMCkKKwkJCWdvdG8gbmV4dDsKKworCQlyYyA9IHFsY25pY192YWxpZGF0ZV9maXJtd2FyZShhZGFwdGVyKTsKKwkJaWYgKHJjICE9IDApIHsKKwkJCXJlbGVhc2VfZmlybXdhcmUoYWRhcHRlci0+ZncpOworCQkJbXNsZWVwKDEpOworCQkJZ290byBuZXh0OworCQl9CisJfQorfQorCisKK3ZvaWQKK3FsY25pY19yZWxlYXNlX2Zpcm13YXJlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+ZncpCisJCXJlbGVhc2VfZmlybXdhcmUoYWRhcHRlci0+ZncpOworCWFkYXB0ZXItPmZ3ID0gTlVMTDsKK30KKworaW50IHFsY25pY19waGFudG9tX2luaXQoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiB2YWw7CisJaW50IHJldHJpZXMgPSA2MDsKKworCWRvIHsKKwkJdmFsID0gUUxDUkQzMihhZGFwdGVyLCBDUkJfQ01EUEVHX1NUQVRFKTsKKworCQlzd2l0Y2ggKHZhbCkgeworCQljYXNlIFBIQU5fSU5JVElBTElaRV9DT01QTEVURToKKwkJY2FzZSBQSEFOX0lOSVRJQUxJWkVfQUNLOgorCQkJcmV0dXJuIDA7CisJCWNhc2UgUEhBTl9JTklUSUFMSVpFX0ZBSUxFRDoKKwkJCWdvdG8gb3V0X2VycjsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJbXNsZWVwKDUwMCk7CisKKwl9IHdoaWxlICgtLXJldHJpZXMpOworCisJUUxDV1IzMihhZGFwdGVyLCBDUkJfQ01EUEVHX1NUQVRFLCBQSEFOX0lOSVRJQUxJWkVfRkFJTEVEKTsKKworb3V0X2VycjoKKwlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJmaXJtd2FyZSBpbml0IGZhaWxlZFxuIik7CisJcmV0dXJuIC1FSU87Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19yZWNlaXZlX3BlZ19yZWFkeShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHZhbDsKKwlpbnQgcmV0cmllcyA9IDIwMDA7CisKKwlkbyB7CisJCXZhbCA9IFFMQ1JEMzIoYWRhcHRlciwgQ1JCX1JDVlBFR19TVEFURSk7CisKKwkJaWYgKHZhbCA9PSBQSEFOX1BFR19SQ1ZfSU5JVElBTElaRUQpCisJCQlyZXR1cm4gMDsKKworCQltc2xlZXAoMTApOworCisJfSB3aGlsZSAoLS1yZXRyaWVzKTsKKworCWlmICghcmV0cmllcykgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJSZWNlaXZlIFBlZyBpbml0aWFsaXphdGlvbiBub3QgIgorCQkJICAgICAgImNvbXBsZXRlLCBzdGF0ZTogMHgleC5cbiIsIHZhbCk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCitpbnQgcWxjbmljX2luaXRfZmlybXdhcmUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBlcnI7CisKKwllcnIgPSBxbGNuaWNfcmVjZWl2ZV9wZWdfcmVhZHkoYWRhcHRlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCVFMQ1dSMzIoYWRhcHRlciwgQ1JCX05JQ19DQVBBQklMSVRJRVNfSE9TVCwgSU5UUl9TQ0hFTUVfUEVSUE9SVCk7CisJUUxDV1IzMihhZGFwdGVyLCBDUkJfTklDX01TSV9NT0RFX0hPU1QsIE1TSV9NT0RFX01VTFRJRlVOQyk7CisJUUxDV1IzMihhZGFwdGVyLCBDUkJfTVBPUlRfTU9ERSwgTVBPUlRfTVVMVElfRlVOQ1RJT05fTU9ERSk7CisJUUxDV1IzMihhZGFwdGVyLCBDUkJfQ01EUEVHX1NUQVRFLCBQSEFOX0lOSVRJQUxJWkVfQUNLKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfaGFuZGxlX2xpbmtldmVudChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJc3RydWN0IHFsY25pY19md19tc2cgKm1zZykKK3sKKwl1MzIgY2FibGVfT1VJOworCXUxNiBjYWJsZV9sZW47CisJdTE2IGxpbmtfc3BlZWQ7CisJdTggIGxpbmtfc3RhdHVzLCBtb2R1bGUsIGR1cGxleCwgYXV0b25lZzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCisJYWRhcHRlci0+aGFzX2xpbmtfZXZlbnRzID0gMTsKKworCWNhYmxlX09VSSA9IG1zZy0+Ym9keVsxXSAmIDB4ZmZmZmZmZmY7CisJY2FibGVfbGVuID0gKG1zZy0+Ym9keVsxXSA+PiAzMikgJiAweGZmZmY7CisJbGlua19zcGVlZCA9IChtc2ctPmJvZHlbMV0gPj4gNDgpICYgMHhmZmZmOworCisJbGlua19zdGF0dXMgPSBtc2ctPmJvZHlbMl0gJiAweGZmOworCWR1cGxleCA9IChtc2ctPmJvZHlbMl0gPj4gMTYpICYgMHhmZjsKKwlhdXRvbmVnID0gKG1zZy0+Ym9keVsyXSA+PiAyNCkgJiAweGZmOworCisJbW9kdWxlID0gKG1zZy0+Ym9keVsyXSA+PiA4KSAmIDB4ZmY7CisJaWYgKG1vZHVsZSA9PSBMSU5LRVZFTlRfTU9EVUxFX1RXSU5BWF9VTlNVUFBPUlRFRF9DQUJMRSkKKwkJZGV2X2luZm8oJm5ldGRldi0+ZGV2LCAidW5zdXBwb3J0ZWQgY2FibGU6IE9VSSAweCV4LCAiCisJCQkJImxlbmd0aCAlZFxuIiwgY2FibGVfT1VJLCBjYWJsZV9sZW4pOworCWVsc2UgaWYgKG1vZHVsZSA9PSBMSU5LRVZFTlRfTU9EVUxFX1RXSU5BWF9VTlNVUFBPUlRFRF9DQUJMRUxFTikKKwkJZGV2X2luZm8oJm5ldGRldi0+ZGV2LCAidW5zdXBwb3J0ZWQgY2FibGUgbGVuZ3RoICVkXG4iLAorCQkJCWNhYmxlX2xlbik7CisKKwlxbGNuaWNfYWR2ZXJ0X2xpbmtfY2hhbmdlKGFkYXB0ZXIsIGxpbmtfc3RhdHVzKTsKKworCWlmIChkdXBsZXggPT0gTElOS0VWRU5UX0ZVTExfRFVQTEVYKQorCQlhZGFwdGVyLT5saW5rX2R1cGxleCA9IERVUExFWF9GVUxMOworCWVsc2UKKwkJYWRhcHRlci0+bGlua19kdXBsZXggPSBEVVBMRVhfSEFMRjsKKworCWFkYXB0ZXItPm1vZHVsZV90eXBlID0gbW9kdWxlOworCWFkYXB0ZXItPmxpbmtfYXV0b25lZyA9IGF1dG9uZWc7CisJYWRhcHRlci0+bGlua19zcGVlZCA9IGxpbmtfc3BlZWQ7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfaGFuZGxlX2Z3X21lc3NhZ2UoaW50IGRlc2NfY250LCBpbnQgaW5kZXgsCisJCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcpCit7CisJc3RydWN0IHFsY25pY19md19tc2cgbXNnOworCXN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzYzsKKwlpbnQgaSA9IDAsIG9wY29kZTsKKworCXdoaWxlIChkZXNjX2NudCA+IDAgJiYgaSA8IDgpIHsKKwkJZGVzYyA9ICZzZHNfcmluZy0+ZGVzY19oZWFkW2luZGV4XTsKKwkJbXNnLndvcmRzW2krK10gPSBsZTY0X3RvX2NwdShkZXNjLT5zdGF0dXNfZGVzY19kYXRhWzBdKTsKKwkJbXNnLndvcmRzW2krK10gPSBsZTY0X3RvX2NwdShkZXNjLT5zdGF0dXNfZGVzY19kYXRhWzFdKTsKKworCQlpbmRleCA9IGdldF9uZXh0X2luZGV4KGluZGV4LCBzZHNfcmluZy0+bnVtX2Rlc2MpOworCQlkZXNjX2NudC0tOworCX0KKworCW9wY29kZSA9IHFsY25pY19nZXRfbmljX21zZ19vcGNvZGUobXNnLmJvZHlbMF0pOworCXN3aXRjaCAob3Bjb2RlKSB7CisJY2FzZSBRTENOSUNfQzJIX09QQ09ERV9HRVRfTElOS0VWRU5UX1JFU1BPTlNFOgorCQlxbGNuaWNfaGFuZGxlX2xpbmtldmVudChzZHNfcmluZy0+YWRhcHRlciwgJm1zZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGludAorcWxjbmljX2FsbG9jX3J4X3NrYihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3JpbmcsCisJCXN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICpidWZmZXIpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlkbWFfYWRkcl90IGRtYTsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlidWZmZXItPnNrYiA9IGRldl9hbGxvY19za2IocmRzX3JpbmctPnNrYl9zaXplKTsKKwlpZiAoIWJ1ZmZlci0+c2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNrYiA9IGJ1ZmZlci0+c2tiOworCisJaWYgKCFhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2gpCisJCXNrYl9yZXNlcnZlKHNrYiwgMik7CisKKwlkbWEgPSBwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsCisJCQlyZHNfcmluZy0+ZG1hX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisKKwlpZiAocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBkZXYsIGRtYSkpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJYnVmZmVyLT5za2IgPSBOVUxMOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlidWZmZXItPnNrYiA9IHNrYjsKKwlidWZmZXItPmRtYSA9IGRtYTsKKwlidWZmZXItPnN0YXRlID0gUUxDTklDX0JVRkZFUl9CVVNZOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqcWxjbmljX3Byb2Nlc3NfcnhidWYoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCQlzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nLCB1MTYgaW5kZXgsIHUxNiBja3N1bSkKK3sKKwlzdHJ1Y3QgcWxjbmljX3J4X2J1ZmZlciAqYnVmZmVyOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlidWZmZXIgPSAmcmRzX3JpbmctPnJ4X2J1Zl9hcnJbaW5kZXhdOworCisJcGNpX3VubWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LCBidWZmZXItPmRtYSwgcmRzX3JpbmctPmRtYV9zaXplLAorCQkJUENJX0RNQV9GUk9NREVWSUNFKTsKKworCXNrYiA9IGJ1ZmZlci0+c2tiOworCWlmICghc2tiKQorCQlnb3RvIG5vX3NrYjsKKworCWlmIChsaWtlbHkoYWRhcHRlci0+cnhfY3N1bSAmJiBja3N1bSA9PSBTVEFUVVNfQ0tTVU1fT0spKSB7CisJCWFkYXB0ZXItPnN0YXRzLmNzdW1tZWQrKzsKKwkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwl9IGVsc2UgeworCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJfQorCisJc2tiLT5kZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwlidWZmZXItPnNrYiA9IE5VTEw7Citub19za2I6CisJYnVmZmVyLT5zdGF0ZSA9IFFMQ05JQ19CVUZGRVJfRlJFRTsKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgc3RydWN0IHFsY25pY19yeF9idWZmZXIgKgorcWxjbmljX3Byb2Nlc3NfcmN2KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwkJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZywKKwkJaW50IHJpbmcsIHU2NCBzdHNfZGF0YTApCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisJc3RydWN0IHFsY25pY19yeF9idWZmZXIgKmJ1ZmZlcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBxbGNuaWNfaG9zdF9yZHNfcmluZyAqcmRzX3Jpbmc7CisJaW50IGluZGV4LCBsZW5ndGgsIGNrc3VtLCBwa3Rfb2Zmc2V0OworCisJaWYgKHVubGlrZWx5KHJpbmcgPj0gYWRhcHRlci0+bWF4X3Jkc19yaW5ncykpCisJCXJldHVybiBOVUxMOworCisJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKKworCWluZGV4ID0gcWxjbmljX2dldF9zdHNfcmVmaGFuZGxlKHN0c19kYXRhMCk7CisJaWYgKHVubGlrZWx5KGluZGV4ID49IHJkc19yaW5nLT5udW1fZGVzYykpCisJCXJldHVybiBOVUxMOworCisJYnVmZmVyID0gJnJkc19yaW5nLT5yeF9idWZfYXJyW2luZGV4XTsKKworCWxlbmd0aCA9IHFsY25pY19nZXRfc3RzX3RvdGFsbGVuZ3RoKHN0c19kYXRhMCk7CisJY2tzdW0gID0gcWxjbmljX2dldF9zdHNfc3RhdHVzKHN0c19kYXRhMCk7CisJcGt0X29mZnNldCA9IHFsY25pY19nZXRfc3RzX3BrdF9vZmZzZXQoc3RzX2RhdGEwKTsKKworCXNrYiA9IHFsY25pY19wcm9jZXNzX3J4YnVmKGFkYXB0ZXIsIHJkc19yaW5nLCBpbmRleCwgY2tzdW0pOworCWlmICghc2tiKQorCQlyZXR1cm4gYnVmZmVyOworCisJaWYgKGxlbmd0aCA+IHJkc19yaW5nLT5za2Jfc2l6ZSkKKwkJc2tiX3B1dChza2IsIHJkc19yaW5nLT5za2Jfc2l6ZSk7CisJZWxzZQorCQlza2JfcHV0KHNrYiwgbGVuZ3RoKTsKKworCWlmIChwa3Rfb2Zmc2V0KQorCQlza2JfcHVsbChza2IsIHBrdF9vZmZzZXQpOworCisJc2tiLT50cnVlc2l6ZSA9IHNrYi0+bGVuICsgc2l6ZW9mKHN0cnVjdCBza19idWZmKTsKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOworCisJbmFwaV9ncm9fcmVjZWl2ZSgmc2RzX3JpbmctPm5hcGksIHNrYik7CisKKwlhZGFwdGVyLT5zdGF0cy5yeF9wa3RzKys7CisJYWRhcHRlci0+c3RhdHMucnhieXRlcyArPSBsZW5ndGg7CisKKwlyZXR1cm4gYnVmZmVyOworfQorCisjZGVmaW5lIFFMQ19UQ1BfSERSX1NJWkUgICAgICAgICAgICAyMAorI2RlZmluZSBRTENfVENQX1RTX09QVElPTl9TSVpFICAgICAgMTIKKyNkZWZpbmUgUUxDX1RDUF9UU19IRFJfU0laRSAgICAgICAgIChRTENfVENQX0hEUl9TSVpFICsgUUxDX1RDUF9UU19PUFRJT05fU0laRSkKKworc3RhdGljIHN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICoKK3FsY25pY19wcm9jZXNzX2xybyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcsCisJCWludCByaW5nLCB1NjQgc3RzX2RhdGEwLCB1NjQgc3RzX2RhdGExKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICpidWZmZXI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOworCXN0cnVjdCBpcGhkciAqaXBoOworCXN0cnVjdCB0Y3BoZHIgKnRoOworCWJvb2wgcHVzaCwgdGltZXN0YW1wOworCWludCBsMl9oZHJfb2Zmc2V0LCBsNF9oZHJfb2Zmc2V0OworCWludCBpbmRleDsKKwl1MTYgbHJvX2xlbmd0aCwgbGVuZ3RoLCBkYXRhX29mZnNldDsKKwl1MzIgc2VxX251bWJlcjsKKworCWlmICh1bmxpa2VseShyaW5nID4gYWRhcHRlci0+bWF4X3Jkc19yaW5ncykpCisJCXJldHVybiBOVUxMOworCisJcmRzX3JpbmcgPSAmcmVjdl9jdHgtPnJkc19yaW5nc1tyaW5nXTsKKworCWluZGV4ID0gcWxjbmljX2dldF9scm9fc3RzX3JlZmhhbmRsZShzdHNfZGF0YTApOworCWlmICh1bmxpa2VseShpbmRleCA+IHJkc19yaW5nLT5udW1fZGVzYykpCisJCXJldHVybiBOVUxMOworCisJYnVmZmVyID0gJnJkc19yaW5nLT5yeF9idWZfYXJyW2luZGV4XTsKKworCXRpbWVzdGFtcCA9IHFsY25pY19nZXRfbHJvX3N0c190aW1lc3RhbXAoc3RzX2RhdGEwKTsKKwlscm9fbGVuZ3RoID0gcWxjbmljX2dldF9scm9fc3RzX2xlbmd0aChzdHNfZGF0YTApOworCWwyX2hkcl9vZmZzZXQgPSBxbGNuaWNfZ2V0X2xyb19zdHNfbDJfaGRyX29mZnNldChzdHNfZGF0YTApOworCWw0X2hkcl9vZmZzZXQgPSBxbGNuaWNfZ2V0X2xyb19zdHNfbDRfaGRyX29mZnNldChzdHNfZGF0YTApOworCXB1c2ggPSBxbGNuaWNfZ2V0X2xyb19zdHNfcHVzaF9mbGFnKHN0c19kYXRhMCk7CisJc2VxX251bWJlciA9IHFsY25pY19nZXRfbHJvX3N0c19zZXFfbnVtYmVyKHN0c19kYXRhMSk7CisKKwlza2IgPSBxbGNuaWNfcHJvY2Vzc19yeGJ1ZihhZGFwdGVyLCByZHNfcmluZywgaW5kZXgsIFNUQVRVU19DS1NVTV9PSyk7CisJaWYgKCFza2IpCisJCXJldHVybiBidWZmZXI7CisKKwlpZiAodGltZXN0YW1wKQorCQlkYXRhX29mZnNldCA9IGw0X2hkcl9vZmZzZXQgKyBRTENfVENQX1RTX0hEUl9TSVpFOworCWVsc2UKKwkJZGF0YV9vZmZzZXQgPSBsNF9oZHJfb2Zmc2V0ICsgUUxDX1RDUF9IRFJfU0laRTsKKworCXNrYl9wdXQoc2tiLCBscm9fbGVuZ3RoICsgZGF0YV9vZmZzZXQpOworCisJc2tiLT50cnVlc2l6ZSA9IHNrYi0+bGVuICsgc2l6ZW9mKHN0cnVjdCBza19idWZmKSArIHNrYl9oZWFkcm9vbShza2IpOworCisJc2tiX3B1bGwoc2tiLCBsMl9oZHJfb2Zmc2V0KTsKKwlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZXRkZXYpOworCisJaXBoID0gKHN0cnVjdCBpcGhkciAqKXNrYi0+ZGF0YTsKKwl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi0+ZGF0YSArIChpcGgtPmlobCA8PCAyKSk7CisKKwlsZW5ndGggPSAoaXBoLT5paGwgPDwgMikgKyAodGgtPmRvZmYgPDwgMikgKyBscm9fbGVuZ3RoOworCWlwaC0+dG90X2xlbiA9IGh0b25zKGxlbmd0aCk7CisJaXBoLT5jaGVjayA9IDA7CisJaXBoLT5jaGVjayA9IGlwX2Zhc3RfY3N1bSgodW5zaWduZWQgY2hhciAqKWlwaCwgaXBoLT5paGwpOworCXRoLT5wc2ggPSBwdXNoOworCXRoLT5zZXEgPSBodG9ubChzZXFfbnVtYmVyKTsKKworCWxlbmd0aCA9IHNrYi0+bGVuOworCisJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKworCWFkYXB0ZXItPnN0YXRzLmxyb19wa3RzKys7CisJYWRhcHRlci0+c3RhdHMucnhieXRlcyArPSBsZW5ndGg7CisKKwlyZXR1cm4gYnVmZmVyOworfQorCitpbnQKK3FsY25pY19wcm9jZXNzX3Jjdl9yaW5nKHN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcsIGludCBtYXgpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CisJc3RydWN0IGxpc3RfaGVhZCAqY3VyOworCXN0cnVjdCBzdGF0dXNfZGVzYyAqZGVzYzsKKwlzdHJ1Y3QgcWxjbmljX3J4X2J1ZmZlciAqcnhidWY7CisJdTY0IHN0c19kYXRhMCwgc3RzX2RhdGExOworCisJaW50IGNvdW50ID0gMDsKKwlpbnQgb3Bjb2RlLCByaW5nLCBkZXNjX2NudDsKKwl1MzIgY29uc3VtZXIgPSBzZHNfcmluZy0+Y29uc3VtZXI7CisKKwl3aGlsZSAoY291bnQgPCBtYXgpIHsKKwkJZGVzYyA9ICZzZHNfcmluZy0+ZGVzY19oZWFkW2NvbnN1bWVyXTsKKwkJc3RzX2RhdGEwID0gbGU2NF90b19jcHUoZGVzYy0+c3RhdHVzX2Rlc2NfZGF0YVswXSk7CisKKwkJaWYgKCEoc3RzX2RhdGEwICYgU1RBVFVTX09XTkVSX0hPU1QpKQorCQkJYnJlYWs7CisKKwkJZGVzY19jbnQgPSBxbGNuaWNfZ2V0X3N0c19kZXNjX2NudChzdHNfZGF0YTApOworCQlvcGNvZGUgPSBxbGNuaWNfZ2V0X3N0c19vcGNvZGUoc3RzX2RhdGEwKTsKKworCQlzd2l0Y2ggKG9wY29kZSkgeworCQljYXNlIFFMQ05JQ19SWFBLVF9ERVNDOgorCQljYXNlIFFMQ05JQ19PTERfUlhQS1RfREVTQzoKKwkJY2FzZSBRTENOSUNfU1lOX09GRkxPQUQ6CisJCQlyaW5nID0gcWxjbmljX2dldF9zdHNfdHlwZShzdHNfZGF0YTApOworCQkJcnhidWYgPSBxbGNuaWNfcHJvY2Vzc19yY3YoYWRhcHRlciwgc2RzX3JpbmcsCisJCQkJCXJpbmcsIHN0c19kYXRhMCk7CisJCQlicmVhazsKKwkJY2FzZSBRTENOSUNfTFJPX0RFU0M6CisJCQlyaW5nID0gcWxjbmljX2dldF9scm9fc3RzX3R5cGUoc3RzX2RhdGEwKTsKKwkJCXN0c19kYXRhMSA9IGxlNjRfdG9fY3B1KGRlc2MtPnN0YXR1c19kZXNjX2RhdGFbMV0pOworCQkJcnhidWYgPSBxbGNuaWNfcHJvY2Vzc19scm8oYWRhcHRlciwgc2RzX3JpbmcsCisJCQkJCXJpbmcsIHN0c19kYXRhMCwgc3RzX2RhdGExKTsKKwkJCWJyZWFrOworCQljYXNlIFFMQ05JQ19SRVNQT05TRV9ERVNDOgorCQkJcWxjbmljX2hhbmRsZV9md19tZXNzYWdlKGRlc2NfY250LCBjb25zdW1lciwgc2RzX3JpbmcpOworCQlkZWZhdWx0OgorCQkJZ290byBza2lwOworCQl9CisKKwkJV0FSTl9PTihkZXNjX2NudCA+IDEpOworCisJCWlmIChyeGJ1ZikKKwkJCWxpc3RfYWRkX3RhaWwoJnJ4YnVmLT5saXN0LCAmc2RzX3JpbmctPmZyZWVfbGlzdFtyaW5nXSk7CisKK3NraXA6CisJCWZvciAoOyBkZXNjX2NudCA+IDA7IGRlc2NfY250LS0pIHsKKwkJCWRlc2MgPSAmc2RzX3JpbmctPmRlc2NfaGVhZFtjb25zdW1lcl07CisJCQlkZXNjLT5zdGF0dXNfZGVzY19kYXRhWzBdID0KKwkJCQljcHVfdG9fbGU2NChTVEFUVVNfT1dORVJfUEhBTlRPTSk7CisJCQljb25zdW1lciA9IGdldF9uZXh0X2luZGV4KGNvbnN1bWVyLCBzZHNfcmluZy0+bnVtX2Rlc2MpOworCQl9CisJCWNvdW50Kys7CisJfQorCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9yZHNfcmluZ3M7IHJpbmcrKykgeworCQlzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nID0KKwkJCSZhZGFwdGVyLT5yZWN2X2N0eC5yZHNfcmluZ3NbcmluZ107CisKKwkJaWYgKCFsaXN0X2VtcHR5KCZzZHNfcmluZy0+ZnJlZV9saXN0W3JpbmddKSkgeworCQkJbGlzdF9mb3JfZWFjaChjdXIsICZzZHNfcmluZy0+ZnJlZV9saXN0W3JpbmddKSB7CisJCQkJcnhidWYgPSBsaXN0X2VudHJ5KGN1ciwKKwkJCQkJCXN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyLCBsaXN0KTsKKwkJCQlxbGNuaWNfYWxsb2Nfcnhfc2tiKGFkYXB0ZXIsIHJkc19yaW5nLCByeGJ1Zik7CisJCQl9CisJCQlzcGluX2xvY2soJnJkc19yaW5nLT5sb2NrKTsKKwkJCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmc2RzX3JpbmctPmZyZWVfbGlzdFtyaW5nXSwKKwkJCQkJCSZyZHNfcmluZy0+ZnJlZV9saXN0KTsKKwkJCXNwaW5fdW5sb2NrKCZyZHNfcmluZy0+bG9jayk7CisJCX0KKworCQlxbGNuaWNfcG9zdF9yeF9idWZmZXJzX25vZGIoYWRhcHRlciwgcmRzX3JpbmcpOworCX0KKworCWlmIChjb3VudCkgeworCQlzZHNfcmluZy0+Y29uc3VtZXIgPSBjb25zdW1lcjsKKwkJd3JpdGVsKGNvbnN1bWVyLCBzZHNfcmluZy0+Y3JiX3N0c19jb25zdW1lcik7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCit2b2lkCitxbGNuaWNfcG9zdF9yeF9idWZmZXJzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwgdTMyIHJpbmdpZCwKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nKQoreworCXN0cnVjdCByY3ZfZGVzYyAqcGRlc2M7CisJc3RydWN0IHFsY25pY19yeF9idWZmZXIgKmJ1ZmZlcjsKKwlpbnQgcHJvZHVjZXIsIGNvdW50ID0gMDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOworCisJcHJvZHVjZXIgPSByZHNfcmluZy0+cHJvZHVjZXI7CisKKwlzcGluX2xvY2soJnJkc19yaW5nLT5sb2NrKTsKKwloZWFkID0gJnJkc19yaW5nLT5mcmVlX2xpc3Q7CisJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CisKKwkJYnVmZmVyID0gbGlzdF9lbnRyeShoZWFkLT5uZXh0LCBzdHJ1Y3QgcWxjbmljX3J4X2J1ZmZlciwgbGlzdCk7CisKKwkJaWYgKCFidWZmZXItPnNrYikgeworCQkJaWYgKHFsY25pY19hbGxvY19yeF9za2IoYWRhcHRlciwgcmRzX3JpbmcsIGJ1ZmZlcikpCisJCQkJYnJlYWs7CisJCX0KKworCQljb3VudCsrOworCQlsaXN0X2RlbCgmYnVmZmVyLT5saXN0KTsKKworCQkvKiBtYWtlIGEgcmN2IGRlc2NyaXB0b3IgICovCisJCXBkZXNjID0gJnJkc19yaW5nLT5kZXNjX2hlYWRbcHJvZHVjZXJdOworCQlwZGVzYy0+YWRkcl9idWZmZXIgPSBjcHVfdG9fbGU2NChidWZmZXItPmRtYSk7CisJCXBkZXNjLT5yZWZlcmVuY2VfaGFuZGxlID0gY3B1X3RvX2xlMTYoYnVmZmVyLT5yZWZfaGFuZGxlKTsKKwkJcGRlc2MtPmJ1ZmZlcl9sZW5ndGggPSBjcHVfdG9fbGUzMihyZHNfcmluZy0+ZG1hX3NpemUpOworCisJCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIHJkc19yaW5nLT5udW1fZGVzYyk7CisJfQorCXNwaW5fdW5sb2NrKCZyZHNfcmluZy0+bG9jayk7CisKKwlpZiAoY291bnQpIHsKKwkJcmRzX3JpbmctPnByb2R1Y2VyID0gcHJvZHVjZXI7CisJCXdyaXRlbCgocHJvZHVjZXItMSkgJiAocmRzX3JpbmctPm51bV9kZXNjLTEpLAorCQkJCXJkc19yaW5nLT5jcmJfcmN2X3Byb2R1Y2VyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfcG9zdF9yeF9idWZmZXJzX25vZGIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCQlzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nKQoreworCXN0cnVjdCByY3ZfZGVzYyAqcGRlc2M7CisJc3RydWN0IHFsY25pY19yeF9idWZmZXIgKmJ1ZmZlcjsKKwlpbnQgcHJvZHVjZXIsIGNvdW50ID0gMDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOworCisJcHJvZHVjZXIgPSByZHNfcmluZy0+cHJvZHVjZXI7CisJaWYgKCFzcGluX3RyeWxvY2soJnJkc19yaW5nLT5sb2NrKSkKKwkJcmV0dXJuOworCisJaGVhZCA9ICZyZHNfcmluZy0+ZnJlZV9saXN0OworCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgeworCisJCWJ1ZmZlciA9IGxpc3RfZW50cnkoaGVhZC0+bmV4dCwgc3RydWN0IHFsY25pY19yeF9idWZmZXIsIGxpc3QpOworCisJCWlmICghYnVmZmVyLT5za2IpIHsKKwkJCWlmIChxbGNuaWNfYWxsb2Nfcnhfc2tiKGFkYXB0ZXIsIHJkc19yaW5nLCBidWZmZXIpKQorCQkJCWJyZWFrOworCQl9CisKKwkJY291bnQrKzsKKwkJbGlzdF9kZWwoJmJ1ZmZlci0+bGlzdCk7CisKKwkJLyogbWFrZSBhIHJjdiBkZXNjcmlwdG9yICAqLworCQlwZGVzYyA9ICZyZHNfcmluZy0+ZGVzY19oZWFkW3Byb2R1Y2VyXTsKKwkJcGRlc2MtPnJlZmVyZW5jZV9oYW5kbGUgPSBjcHVfdG9fbGUxNihidWZmZXItPnJlZl9oYW5kbGUpOworCQlwZGVzYy0+YnVmZmVyX2xlbmd0aCA9IGNwdV90b19sZTMyKHJkc19yaW5nLT5kbWFfc2l6ZSk7CisJCXBkZXNjLT5hZGRyX2J1ZmZlciA9IGNwdV90b19sZTY0KGJ1ZmZlci0+ZG1hKTsKKworCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCByZHNfcmluZy0+bnVtX2Rlc2MpOworCX0KKworCWlmIChjb3VudCkgeworCQlyZHNfcmluZy0+cHJvZHVjZXIgPSBwcm9kdWNlcjsKKwkJd3JpdGVsKChwcm9kdWNlciAtIDEpICYgKHJkc19yaW5nLT5udW1fZGVzYyAtIDEpLAorCQkJCXJkc19yaW5nLT5jcmJfcmN2X3Byb2R1Y2VyKTsKKwl9CisJc3Bpbl91bmxvY2soJnJkc19yaW5nLT5sb2NrKTsKK30KKworc3RhdGljIHN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICoKK3FsY25pY19wcm9jZXNzX3Jjdl9kaWFnKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwkJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZywKKwkJaW50IHJpbmcsIHU2NCBzdHNfZGF0YTApCit7CisJc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCXN0cnVjdCBxbGNuaWNfcnhfYnVmZmVyICpidWZmZXI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOworCWludCBpbmRleCwgbGVuZ3RoLCBja3N1bSwgcGt0X29mZnNldDsKKworCWlmICh1bmxpa2VseShyaW5nID49IGFkYXB0ZXItPm1heF9yZHNfcmluZ3MpKQorCQlyZXR1cm4gTlVMTDsKKworCXJkc19yaW5nID0gJnJlY3ZfY3R4LT5yZHNfcmluZ3NbcmluZ107CisKKwlpbmRleCA9IHFsY25pY19nZXRfc3RzX3JlZmhhbmRsZShzdHNfZGF0YTApOworCWlmICh1bmxpa2VseShpbmRleCA+PSByZHNfcmluZy0+bnVtX2Rlc2MpKQorCQlyZXR1cm4gTlVMTDsKKworCWJ1ZmZlciA9ICZyZHNfcmluZy0+cnhfYnVmX2FycltpbmRleF07CisKKwlsZW5ndGggPSBxbGNuaWNfZ2V0X3N0c190b3RhbGxlbmd0aChzdHNfZGF0YTApOworCWNrc3VtICA9IHFsY25pY19nZXRfc3RzX3N0YXR1cyhzdHNfZGF0YTApOworCXBrdF9vZmZzZXQgPSBxbGNuaWNfZ2V0X3N0c19wa3Rfb2Zmc2V0KHN0c19kYXRhMCk7CisKKwlza2IgPSBxbGNuaWNfcHJvY2Vzc19yeGJ1ZihhZGFwdGVyLCByZHNfcmluZywgaW5kZXgsIGNrc3VtKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIGJ1ZmZlcjsKKworCXNrYl9wdXQoc2tiLCByZHNfcmluZy0+c2tiX3NpemUpOworCisJaWYgKHBrdF9vZmZzZXQpCisJCXNrYl9wdWxsKHNrYiwgcGt0X29mZnNldCk7CisKKwlza2ItPnRydWVzaXplID0gc2tiLT5sZW4gKyBzaXplb2Yoc3RydWN0IHNrX2J1ZmYpOworCisJaWYgKCFxbGNuaWNfY2hlY2tfbG9vcGJhY2tfYnVmZihza2ItPmRhdGEpKQorCQlhZGFwdGVyLT5kaWFnX2NudCsrOworCisJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKworCXJldHVybiBidWZmZXI7Cit9CisKK3ZvaWQKK3FsY25pY19wcm9jZXNzX3Jjdl9yaW5nX2RpYWcoc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZykKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBzZHNfcmluZy0+YWRhcHRlcjsKKwlzdHJ1Y3Qgc3RhdHVzX2Rlc2MgKmRlc2M7CisJc3RydWN0IHFsY25pY19yeF9idWZmZXIgKnJ4YnVmOworCXU2NCBzdHNfZGF0YTA7CisKKwlpbnQgb3Bjb2RlLCByaW5nLCBkZXNjX2NudDsKKwl1MzIgY29uc3VtZXIgPSBzZHNfcmluZy0+Y29uc3VtZXI7CisKKwlkZXNjID0gJnNkc19yaW5nLT5kZXNjX2hlYWRbY29uc3VtZXJdOworCXN0c19kYXRhMCA9IGxlNjRfdG9fY3B1KGRlc2MtPnN0YXR1c19kZXNjX2RhdGFbMF0pOworCisJaWYgKCEoc3RzX2RhdGEwICYgU1RBVFVTX09XTkVSX0hPU1QpKQorCQlyZXR1cm47CisKKwlkZXNjX2NudCA9IHFsY25pY19nZXRfc3RzX2Rlc2NfY250KHN0c19kYXRhMCk7CisJb3Bjb2RlID0gcWxjbmljX2dldF9zdHNfb3Bjb2RlKHN0c19kYXRhMCk7CisKKwlyaW5nID0gcWxjbmljX2dldF9zdHNfdHlwZShzdHNfZGF0YTApOworCXJ4YnVmID0gcWxjbmljX3Byb2Nlc3NfcmN2X2RpYWcoYWRhcHRlciwgc2RzX3JpbmcsCisJCQkJCXJpbmcsIHN0c19kYXRhMCk7CisKKwlkZXNjLT5zdGF0dXNfZGVzY19kYXRhWzBdID0gY3B1X3RvX2xlNjQoU1RBVFVTX09XTkVSX1BIQU5UT00pOworCWNvbnN1bWVyID0gZ2V0X25leHRfaW5kZXgoY29uc3VtZXIsIHNkc19yaW5nLT5udW1fZGVzYyk7CisKKwlzZHNfcmluZy0+Y29uc3VtZXIgPSBjb25zdW1lcjsKKwl3cml0ZWwoY29uc3VtZXIsIHNkc19yaW5nLT5jcmJfc3RzX2NvbnN1bWVyKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvcWxjbmljL3FsY25pY19tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY1ZThlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3FsY25pYy9xbGNuaWNfbWFpbi5jCkBAIC0wLDAgKzEsMjcyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSAtIFFMb2dpYyBDb3Jwb3JhdGlvbi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAgMDIxMTEtMTMwNywgVVNBLgorICoKKyAqIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uCisgKiBpbiB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSAicWxjbmljLmgiCisKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxuZXQvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pcHY2Lmg+CisjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisKK01PRFVMRV9ERVNDUklQVElPTigiUUxvZ2ljIDEwIEdiRSBDb252ZXJnZWQgRXRoZXJuZXQgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihRTENOSUNfTElOVVhfVkVSU0lPTklEKTsKK01PRFVMRV9GSVJNV0FSRShRTENOSUNfVU5JRklFRF9ST01JTUFHRV9OQU1FKTsKKworY2hhciBxbGNuaWNfZHJpdmVyX25hbWVbXSA9ICJxbGNuaWMiOworc3RhdGljIGNvbnN0IGNoYXIgcWxjbmljX2RyaXZlcl9zdHJpbmdbXSA9ICJRTG9naWMgQ29udmVyZ2VkIEV0aGVybmV0IERyaXZlciB2IgorICAgIFFMQ05JQ19MSU5VWF9WRVJTSU9OSUQ7CisKK3N0YXRpYyBpbnQgcG9ydF9tb2RlID0gUUxDTklDX1BPUlRfTU9ERV9BVVRPX05FRzsKKworLyogRGVmYXVsdCB0byByZXN0cmljdGVkIDFHIGF1dG8tbmVnIG1vZGUgKi8KK3N0YXRpYyBpbnQgd29sX3BvcnRfbW9kZSA9IDU7CisKK3N0YXRpYyBpbnQgdXNlX21zaSA9IDE7Cittb2R1bGVfcGFyYW0odXNlX21zaSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0ModXNlX21zaSwgIk1TSSBpbnRlcnJ1cHQgKDA9ZGlzYWJsZWQsIDE9ZW5hYmxlZCIpOworCitzdGF0aWMgaW50IHVzZV9tc2lfeCA9IDE7Cittb2R1bGVfcGFyYW0odXNlX21zaV94LCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyh1c2VfbXNpX3gsICJNU0ktWCBpbnRlcnJ1cHQgKDA9ZGlzYWJsZWQsIDE9ZW5hYmxlZCIpOworCitzdGF0aWMgaW50IGF1dG9fZndfcmVzZXQgPSBBVVRPX0ZXX1JFU0VUX0VOQUJMRUQ7Cittb2R1bGVfcGFyYW0oYXV0b19md19yZXNldCwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYXV0b19md19yZXNldCwgIkF1dG8gZmlybXdhcmUgcmVzZXQgKDA9ZGlzYWJsZWQsIDE9ZW5hYmxlZCIpOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBxbGNuaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpOworc3RhdGljIHZvaWQgX19kZXZleGl0IHFsY25pY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOworc3RhdGljIGludCBxbGNuaWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKK3N0YXRpYyBpbnQgcWxjbmljX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOworc3RhdGljIHZvaWQgcWxjbmljX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitzdGF0aWMgdm9pZCBxbGNuaWNfdHhfdGltZW91dF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CitzdGF0aWMgdm9pZCBxbGNuaWNfYXR0YWNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyB2b2lkIHFsY25pY19md2luaXRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIHZvaWQgcWxjbmljX2Z3X3BvbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworc3RhdGljIHZvaWQgcWxjbmljX3NjaGVkdWxlX3dvcmsoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCQl3b3JrX2Z1bmNfdCBmdW5jLCBpbnQgZGVsYXkpOworc3RhdGljIHZvaWQgcWxjbmljX2NhbmNlbF9md193b3JrKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgaW50IHFsY25pY19wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCk7CisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKK3N0YXRpYyB2b2lkIHFsY25pY19wb2xsX2NvbnRyb2xsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CisjZW5kaWYKKworc3RhdGljIHZvaWQgcWxjbmljX2NyZWF0ZV9zeXNmc19lbnRyaWVzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBxbGNuaWNfcmVtb3ZlX3N5c2ZzX2VudHJpZXMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyB2b2lkIHFsY25pY19jcmVhdGVfZGlhZ19lbnRyaWVzKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcik7CitzdGF0aWMgdm9pZCBxbGNuaWNfcmVtb3ZlX2RpYWdfZW50cmllcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOworCitzdGF0aWMgdm9pZCBxbGNuaWNfY2xyX2FsbF9kcnZfc3RhdGUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKTsKK3N0YXRpYyBpbnQgcWxjbmljX2Nhbl9zdGFydF9maXJtd2FyZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpOworCitzdGF0aWMgaXJxcmV0dXJuX3QgcWxjbmljX3RtcF9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpOworc3RhdGljIGlycXJldHVybl90IHFsY25pY19pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpOworc3RhdGljIGlycXJldHVybl90IHFsY25pY19tc2lfaW50cihpbnQgaXJxLCB2b2lkICpkYXRhKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBxbGNuaWNfbXNpeF9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpOworCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnFsY25pY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CitzdGF0aWMgdm9pZCBxbGNuaWNfY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyk7CisKKy8qICBQQ0kgRGV2aWNlIElEIFRhYmxlICAqLworI2RlZmluZSBFTlRSWShkZXZpY2UpIFwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1FMT0dJQywgKGRldmljZSkpLCBcCisJLmNsYXNzID0gUENJX0NMQVNTX05FVFdPUktfRVRIRVJORVQgPDwgOCwgLmNsYXNzX21hc2sgPSB+MH0KKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19RTEU4MjRYICAweDgwMjAKKworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHFsY25pY19wY2lfdGJsKSA9IHsKKwlFTlRSWShQQ0lfREVWSUNFX0lEX1FMT0dJQ19RTEU4MjRYKSwKKwl7MCx9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcWxjbmljX3BjaV90YmwpOworCisKK3ZvaWQKK3FsY25pY191cGRhdGVfY21kX3Byb2R1Y2VyKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwkJc3RydWN0IHFsY25pY19ob3N0X3R4X3JpbmcgKnR4X3JpbmcpCit7CisJd3JpdGVsKHR4X3JpbmctPnByb2R1Y2VyLCB0eF9yaW5nLT5jcmJfY21kX3Byb2R1Y2VyKTsKKworCWlmIChxbGNuaWNfdHhfYXZhaWwodHhfcmluZykgPD0gVFhfU1RPUF9USFJFU0gpIHsKKwkJbmV0aWZfc3RvcF9xdWV1ZShhZGFwdGVyLT5uZXRkZXYpOworCQlzbXBfbWIoKTsKKwl9Cit9CisKK3N0YXRpYyBjb25zdCB1MzIgbXNpX3RndF9zdGF0dXNbOF0gPSB7CisJSVNSX0lOVF9UQVJHRVRfU1RBVFVTLCBJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjEsCisJSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0YyLCBJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjMsCisJSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0Y0LCBJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjUsCisJSVNSX0lOVF9UQVJHRVRfU1RBVFVTX0Y2LCBJU1JfSU5UX1RBUkdFVF9TVEFUVVNfRjcKK307CisKK3N0YXRpYyBjb25zdAorc3RydWN0IHFsY25pY19sZWdhY3lfaW50cl9zZXQgbGVnYWN5X2ludHJbXSA9IFFMQ05JQ19MRUdBQ1lfSU5UUl9DT05GSUc7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBxbGNuaWNfZGlzYWJsZV9pbnQoc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZykKK3sKKwl3cml0ZWwoMCwgc2RzX3JpbmctPmNyYl9pbnRyX21hc2spOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcWxjbmljX2VuYWJsZV9pbnQoc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZykKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBzZHNfcmluZy0+YWRhcHRlcjsKKworCXdyaXRlbCgweDEsIHNkc19yaW5nLT5jcmJfaW50cl9tYXNrKTsKKworCWlmICghUUxDTklDX0lTX01TSV9GQU1JTFkoYWRhcHRlcikpCisJCXdyaXRlbCgweGZiZmYsIGFkYXB0ZXItPnRndF9tYXNrX3JlZyk7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19hbGxvY19zZHNfcmluZ3Moc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4LCBpbnQgY291bnQpCit7CisJaW50IHNpemUgPSBzaXplb2Yoc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nKSAqIGNvdW50OworCisJcmVjdl9jdHgtPnNkc19yaW5ncyA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisKKwlyZXR1cm4gKHJlY3ZfY3R4LT5zZHNfcmluZ3MgPT0gTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfZnJlZV9zZHNfcmluZ3Moc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4KQoreworCWlmIChyZWN2X2N0eC0+c2RzX3JpbmdzICE9IE5VTEwpCisJCWtmcmVlKHJlY3ZfY3R4LT5zZHNfcmluZ3MpOworCisJcmVjdl9jdHgtPnNkc19yaW5ncyA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19uYXBpX2FkZChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJaW50IHJpbmc7CisJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisKKwlpZiAocWxjbmljX2FsbG9jX3Nkc19yaW5ncyhyZWN2X2N0eCwgYWRhcHRlci0+bWF4X3Nkc19yaW5ncykpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCQluZXRpZl9uYXBpX2FkZChuZXRkZXYsICZzZHNfcmluZy0+bmFwaSwKKwkJCQlxbGNuaWNfcG9sbCwgUUxDTklDX05FVERFVl9XRUlHSFQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcWxjbmljX25hcGlfZGVsKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcmluZzsKKwlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKKwkJbmV0aWZfbmFwaV9kZWwoJnNkc19yaW5nLT5uYXBpKTsKKwl9CisKKwlxbGNuaWNfZnJlZV9zZHNfcmluZ3MoJmFkYXB0ZXItPnJlY3ZfY3R4KTsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19uYXBpX2VuYWJsZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IHJpbmc7CisJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKKwlzdHJ1Y3QgcWxjbmljX3JlY3ZfY29udGV4dCAqcmVjdl9jdHggPSAmYWRhcHRlci0+cmVjdl9jdHg7CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CisJCW5hcGlfZW5hYmxlKCZzZHNfcmluZy0+bmFwaSk7CisJCXFsY25pY19lbmFibGVfaW50KHNkc19yaW5nKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfbmFwaV9kaXNhYmxlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcmluZzsKKwlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCXN0cnVjdCBxbGNuaWNfcmVjdl9jb250ZXh0ICpyZWN2X2N0eCA9ICZhZGFwdGVyLT5yZWN2X2N0eDsKKworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKKwkJc2RzX3JpbmcgPSAmcmVjdl9jdHgtPnNkc19yaW5nc1tyaW5nXTsKKwkJcWxjbmljX2Rpc2FibGVfaW50KHNkc19yaW5nKTsKKwkJbmFwaV9zeW5jaHJvbml6ZSgmc2RzX3JpbmctPm5hcGkpOworCQluYXBpX2Rpc2FibGUoJnNkc19yaW5nLT5uYXBpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFsY25pY19jbGVhcl9zdGF0cyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJbWVtc2V0KCZhZGFwdGVyLT5zdGF0cywgMCwgc2l6ZW9mKGFkYXB0ZXItPnN0YXRzKSk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IHFsY25pY19zZXRfZG1hX21hc2soc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwl1NjQgbWFzaywgY21hc2s7CisKKwlhZGFwdGVyLT5wY2lfdXNpbmdfZGFjID0gMDsKKworCW1hc2sgPSBETUFfQklUX01BU0soMzkpOworCWNtYXNrID0gbWFzazsKKworCWlmIChwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIG1hc2spID09IDAgJiYKKwkJCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBjbWFzaykgPT0gMCkgeworCQlhZGFwdGVyLT5wY2lfdXNpbmdfZGFjID0gMTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIC1FSU87Cit9CisKKy8qIFVwZGF0ZSBhZGRyZXNzYWJsZSByYW5nZSBpZiBmaXJtd2FyZSBzdXBwb3J0cyBpdCAqLworc3RhdGljIGludAorcWxjbmljX3VwZGF0ZV9kbWFfbWFzayhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGNoYW5nZSwgc2hpZnQsIGVycjsKKwl1NjQgbWFzaywgb2xkX21hc2ssIG9sZF9jbWFzazsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwljaGFuZ2UgPSAwOworCisJc2hpZnQgPSBRTENSRDMyKGFkYXB0ZXIsIENSQl9ETUFfU0hJRlQpOworCWlmIChzaGlmdCA+IDMyKQorCQlyZXR1cm4gMDsKKworCWlmIChzaGlmdCA+IDkpCisJCWNoYW5nZSA9IDE7CisKKwlpZiAoY2hhbmdlKSB7CisJCW9sZF9tYXNrID0gcGRldi0+ZG1hX21hc2s7CisJCW9sZF9jbWFzayA9IHBkZXYtPmRldi5jb2hlcmVudF9kbWFfbWFzazsKKworCQltYXNrID0gRE1BX0JJVF9NQVNLKDMyK3NoaWZ0KTsKKworCQllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIG1hc2spOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0OworCisJCWVyciA9IHBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBtYXNrKTsKKwkJaWYgKGVycikKKwkJCWdvdG8gZXJyX291dDsKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgInVzaW5nICVkLWJpdCBkbWEgbWFza1xuIiwgMzIrc2hpZnQpOworCX0KKworCXJldHVybiAwOworCitlcnJfb3V0OgorCXBjaV9zZXRfZG1hX21hc2socGRldiwgb2xkX21hc2spOworCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwZGV2LCBvbGRfY21hc2spOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIHFsY25pY19zZXRfcG9ydF9tb2RlKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgdmFsLCBkYXRhOworCisJdmFsID0gYWRhcHRlci0+YWh3LmJvYXJkX3R5cGU7CisJaWYgKCh2YWwgPT0gUUxDTklDX0JSRFRZUEVfUDNfSE1FWikgfHwKKwkJKHZhbCA9PSBRTENOSUNfQlJEVFlQRV9QM19YR19MT00pKSB7CisJCWlmIChwb3J0X21vZGUgPT0gUUxDTklDX1BPUlRfTU9ERV84MDJfM19BUCkgeworCQkJZGF0YSA9IFFMQ05JQ19QT1JUX01PREVfODAyXzNfQVA7CisJCQlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19QT1JUX01PREVfQUREUiwgZGF0YSk7CisJCX0gZWxzZSBpZiAocG9ydF9tb2RlID09IFFMQ05JQ19QT1JUX01PREVfWEcpIHsKKwkJCWRhdGEgPSBRTENOSUNfUE9SVF9NT0RFX1hHOworCQkJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfUE9SVF9NT0RFX0FERFIsIGRhdGEpOworCQl9IGVsc2UgaWYgKHBvcnRfbW9kZSA9PSBRTENOSUNfUE9SVF9NT0RFX0FVVE9fTkVHXzFHKSB7CisJCQlkYXRhID0gUUxDTklDX1BPUlRfTU9ERV9BVVRPX05FR18xRzsKKwkJCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX1BPUlRfTU9ERV9BRERSLCBkYXRhKTsKKwkJfSBlbHNlIGlmIChwb3J0X21vZGUgPT0gUUxDTklDX1BPUlRfTU9ERV9BVVRPX05FR19YRykgeworCQkJZGF0YSA9IFFMQ05JQ19QT1JUX01PREVfQVVUT19ORUdfWEc7CisJCQlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19QT1JUX01PREVfQUREUiwgZGF0YSk7CisJCX0gZWxzZSB7CisJCQlkYXRhID0gUUxDTklDX1BPUlRfTU9ERV9BVVRPX05FRzsKKwkJCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX1BPUlRfTU9ERV9BRERSLCBkYXRhKTsKKwkJfQorCisJCWlmICgod29sX3BvcnRfbW9kZSAhPSBRTENOSUNfUE9SVF9NT0RFXzgwMl8zX0FQKSAmJgorCQkJKHdvbF9wb3J0X21vZGUgIT0gUUxDTklDX1BPUlRfTU9ERV9YRykgJiYKKwkJCSh3b2xfcG9ydF9tb2RlICE9IFFMQ05JQ19QT1JUX01PREVfQVVUT19ORUdfMUcpICYmCisJCQkod29sX3BvcnRfbW9kZSAhPSBRTENOSUNfUE9SVF9NT0RFX0FVVE9fTkVHX1hHKSkgeworCQkJd29sX3BvcnRfbW9kZSA9IFFMQ05JQ19QT1JUX01PREVfQVVUT19ORUc7CisJCX0KKwkJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfV09MX1BPUlRfTU9ERSwgd29sX3BvcnRfbW9kZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBxbGNuaWNfc2V0X21zaXhfYml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgZW5hYmxlKQoreworCXUzMiBjb250cm9sOworCWludCBwb3M7CisKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfTVNJWCk7CisJaWYgKHBvcykgeworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgcG9zLCAmY29udHJvbCk7CisJCWlmIChlbmFibGUpCisJCQljb250cm9sIHw9IFBDSV9NU0lYX0ZMQUdTX0VOQUJMRTsKKwkJZWxzZQorCQkJY29udHJvbCA9IDA7CisJCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgcG9zLCBjb250cm9sKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFsY25pY19pbml0X21zaXhfZW50cmllcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBjb3VudCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKQorCQlhZGFwdGVyLT5tc2l4X2VudHJpZXNbaV0uZW50cnkgPSBpOworfQorCitzdGF0aWMgaW50CitxbGNuaWNfcmVhZF9tYWNfYWRkcihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciAqcDsKKwl1NjQgbWFjX2FkZHI7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisKKwlpZiAocWxjbmljX2dldF9tYWNfYWRkcihhZGFwdGVyLCAmbWFjX2FkZHIpICE9IDApCisJCXJldHVybiAtRUlPOworCisJcCA9ICh1bnNpZ25lZCBjaGFyICopJm1hY19hZGRyOworCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspCisJCW5ldGRldi0+ZGV2X2FkZHJbaV0gPSAqKHAgKyA1IC0gaSk7CisKKwltZW1jcHkobmV0ZGV2LT5wZXJtX2FkZHIsIG5ldGRldi0+ZGV2X2FkZHIsIG5ldGRldi0+YWRkcl9sZW4pOworCW1lbWNweShhZGFwdGVyLT5tYWNfYWRkciwgbmV0ZGV2LT5kZXZfYWRkciwgbmV0ZGV2LT5hZGRyX2xlbik7CisKKwkvKiBzZXQgc3RhdGlvbiBhZGRyZXNzICovCisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV0ZGV2LT5wZXJtX2FkZHIpKQorCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiQmFkIE1BQyBhZGRyZXNzICVwTS5cbiIsCisJCQkJCW5ldGRldi0+ZGV2X2FkZHIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWxjbmljX3NldF9tYWMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisKKwlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CisJCXFsY25pY19uYXBpX2Rpc2FibGUoYWRhcHRlcik7CisJfQorCisJbWVtY3B5KGFkYXB0ZXItPm1hY19hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVuKTsKKwltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CisJcWxjbmljX3NldF9tdWx0aShhZGFwdGVyLT5uZXRkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQluZXRpZl9kZXZpY2VfYXR0YWNoKG5ldGRldik7CisJCXFsY25pY19uYXBpX2VuYWJsZShhZGFwdGVyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcWxjbmljX25ldGRldl9vcHMgPSB7CisJLm5kb19vcGVuCSAgID0gcWxjbmljX29wZW4sCisJLm5kb19zdG9wCSAgID0gcWxjbmljX2Nsb3NlLAorCS5uZG9fc3RhcnRfeG1pdCAgICA9IHFsY25pY194bWl0X2ZyYW1lLAorCS5uZG9fZ2V0X3N0YXRzCSAgID0gcWxjbmljX2dldF9zdGF0cywKKwkubmRvX3ZhbGlkYXRlX2FkZHIgPSBldGhfdmFsaWRhdGVfYWRkciwKKwkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IHFsY25pY19zZXRfbXVsdGksCisJLm5kb19zZXRfbWFjX2FkZHJlc3MgICAgPSBxbGNuaWNfc2V0X21hYywKKwkubmRvX2NoYW5nZV9tdHUJICAgPSBxbGNuaWNfY2hhbmdlX210dSwKKwkubmRvX3R4X3RpbWVvdXQJICAgPSBxbGNuaWNfdHhfdGltZW91dCwKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorCS5uZG9fcG9sbF9jb250cm9sbGVyID0gcWxjbmljX3BvbGxfY29udHJvbGxlciwKKyNlbmRpZgorfTsKKworc3RhdGljIHZvaWQKK3FsY25pY19zZXR1cF9pbnRyKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwljb25zdCBzdHJ1Y3QgcWxjbmljX2xlZ2FjeV9pbnRyX3NldCAqbGVnYWN5X2ludHJwOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwlpbnQgZXJyLCBudW1fbXNpeDsKKworCWlmIChhZGFwdGVyLT5yc3Nfc3VwcG9ydGVkKSB7CisJCW51bV9tc2l4ID0gKG51bV9vbmxpbmVfY3B1cygpID49IE1TSVhfRU5UUklFU19QRVJfQURBUFRFUikgPworCQkJTVNJWF9FTlRSSUVTX1BFUl9BREFQVEVSIDogMjsKKwl9IGVsc2UKKwkJbnVtX21zaXggPSAxOworCisJYWRhcHRlci0+bWF4X3Nkc19yaW5ncyA9IDE7CisKKwlhZGFwdGVyLT5mbGFncyAmPSB+KFFMQ05JQ19NU0lfRU5BQkxFRCB8IFFMQ05JQ19NU0lYX0VOQUJMRUQpOworCisJbGVnYWN5X2ludHJwID0gJmxlZ2FjeV9pbnRyW2FkYXB0ZXItPmFody5wY2lfZnVuY107CisKKwlhZGFwdGVyLT5pbnRfdmVjX2JpdCA9IGxlZ2FjeV9pbnRycC0+aW50X3ZlY19iaXQ7CisJYWRhcHRlci0+dGd0X3N0YXR1c19yZWcgPSBxbGNuaWNfZ2V0X2lvYWRkcihhZGFwdGVyLAorCQkJbGVnYWN5X2ludHJwLT50Z3Rfc3RhdHVzX3JlZyk7CisJYWRhcHRlci0+dGd0X21hc2tfcmVnID0gcWxjbmljX2dldF9pb2FkZHIoYWRhcHRlciwKKwkJCWxlZ2FjeV9pbnRycC0+dGd0X21hc2tfcmVnKTsKKwlhZGFwdGVyLT5pc3JfaW50X3ZlYyA9IHFsY25pY19nZXRfaW9hZGRyKGFkYXB0ZXIsIElTUl9JTlRfVkVDVE9SKTsKKworCWFkYXB0ZXItPmNyYl9pbnRfc3RhdGVfcmVnID0gcWxjbmljX2dldF9pb2FkZHIoYWRhcHRlciwKKwkJCUlTUl9JTlRfU1RBVEVfUkVHKTsKKworCXFsY25pY19zZXRfbXNpeF9iaXQocGRldiwgMCk7CisKKwlpZiAoYWRhcHRlci0+bXNpeF9zdXBwb3J0ZWQpIHsKKworCQlxbGNuaWNfaW5pdF9tc2l4X2VudHJpZXMoYWRhcHRlciwgbnVtX21zaXgpOworCQllcnIgPSBwY2lfZW5hYmxlX21zaXgocGRldiwgYWRhcHRlci0+bXNpeF9lbnRyaWVzLCBudW1fbXNpeCk7CisJCWlmIChlcnIgPT0gMCkgeworCQkJYWRhcHRlci0+ZmxhZ3MgfD0gUUxDTklDX01TSVhfRU5BQkxFRDsKKwkJCXFsY25pY19zZXRfbXNpeF9iaXQocGRldiwgMSk7CisKKwkJCWlmIChhZGFwdGVyLT5yc3Nfc3VwcG9ydGVkKQorCQkJCWFkYXB0ZXItPm1heF9zZHNfcmluZ3MgPSBudW1fbXNpeDsKKworCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInVzaW5nIG1zaS14IGludGVycnVwdHNcbiIpOworCQkJcmV0dXJuOworCQl9CisKKwkJaWYgKGVyciA+IDApCisJCQlwY2lfZGlzYWJsZV9tc2l4KHBkZXYpOworCisJCS8qIGZhbGwgdGhyb3VnaCBmb3IgbXNpICovCisJfQorCisJaWYgKHVzZV9tc2kgJiYgIXBjaV9lbmFibGVfbXNpKHBkZXYpKSB7CisJCWFkYXB0ZXItPmZsYWdzIHw9IFFMQ05JQ19NU0lfRU5BQkxFRDsKKwkJYWRhcHRlci0+dGd0X3N0YXR1c19yZWcgPSBxbGNuaWNfZ2V0X2lvYWRkcihhZGFwdGVyLAorCQkJCW1zaV90Z3Rfc3RhdHVzW2FkYXB0ZXItPmFody5wY2lfZnVuY10pOworCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAidXNpbmcgbXNpIGludGVycnVwdHNcbiIpOworCQlhZGFwdGVyLT5tc2l4X2VudHJpZXNbMF0udmVjdG9yID0gcGRldi0+aXJxOworCQlyZXR1cm47CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgInVzaW5nIGxlZ2FjeSBpbnRlcnJ1cHRzXG4iKTsKKwlhZGFwdGVyLT5tc2l4X2VudHJpZXNbMF0udmVjdG9yID0gcGRldi0+aXJxOworfQorCitzdGF0aWMgdm9pZAorcWxjbmljX3RlYXJkb3duX2ludHIoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19NU0lYX0VOQUJMRUQpCisJCXBjaV9kaXNhYmxlX21zaXgoYWRhcHRlci0+cGRldik7CisJaWYgKGFkYXB0ZXItPmZsYWdzICYgUUxDTklDX01TSV9FTkFCTEVEKQorCQlwY2lfZGlzYWJsZV9tc2koYWRhcHRlci0+cGRldik7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfY2xlYW51cF9wY2lfbWFwKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+YWh3LnBjaV9iYXNlMCAhPSBOVUxMKQorCQlpb3VubWFwKGFkYXB0ZXItPmFody5wY2lfYmFzZTApOworfQorCitzdGF0aWMgaW50CitxbGNuaWNfc2V0dXBfcGNpX21hcChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdm9pZCBfX2lvbWVtICptZW1fcHRyMCA9IE5VTEw7CisJcmVzb3VyY2Vfc2l6ZV90IG1lbV9iYXNlOworCXVuc2lnbmVkIGxvbmcgbWVtX2xlbiwgcGNpX2xlbjAgPSAwOworCisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCBwY2lfZnVuYyA9IGFkYXB0ZXItPmFody5wY2lfZnVuYzsKKworCS8qCisJICogU2V0IHRoZSBDUkIgd2luZG93IHRvIGludmFsaWQuIElmIGFueSByZWdpc3RlciBpbiB3aW5kb3cgMCBpcworCSAqIGFjY2Vzc2VkIGl0IHNob3VsZCBzZXQgdGhlIHdpbmRvdyB0byAwIGFuZCB0aGVuIHJlc2V0IGl0IHRvIDEuCisJICovCisJYWRhcHRlci0+YWh3LmNyYl93aW4gPSAtMTsKKwlhZGFwdGVyLT5haHcub2NtX3dpbiA9IC0xOworCisJLyogcmVtYXAgcGh5cyBhZGRyZXNzICovCisJbWVtX2Jhc2UgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CS8qIDAgaXMgZm9yIEJBUiAwICovCisJbWVtX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CisKKwlpZiAobWVtX2xlbiA9PSBRTENOSUNfUENJXzJNQl9TSVpFKSB7CisKKwkJbWVtX3B0cjAgPSBwY2lfaW9yZW1hcF9iYXIocGRldiwgMCk7CisJCWlmIChtZW1fcHRyMCA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gbWFwIFBDSSBiYXIgMFxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlwY2lfbGVuMCA9IG1lbV9sZW47CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGV2X2luZm8oJnBkZXYtPmRldiwgIiVkTUIgbWVtb3J5IG1hcFxuIiwgKGludCkobWVtX2xlbj4+MjApKTsKKworCWFkYXB0ZXItPmFody5wY2lfYmFzZTAgPSBtZW1fcHRyMDsKKwlhZGFwdGVyLT5haHcucGNpX2xlbjAgPSBwY2lfbGVuMDsKKworCWFkYXB0ZXItPmFody5vY21fd2luX2NyYiA9IHFsY25pY19nZXRfaW9hZGRyKGFkYXB0ZXIsCisJCVFMQ05JQ19QQ0lYX1BTX1JFRyhQQ0lYX09DTV9XSU5ET1dfUkVHKHBjaV9mdW5jKSkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdldF9icmRfbmFtZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGNoYXIgKm5hbWUpCit7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCBpLCBmb3VuZCA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1NVUFBPUlRFRF9CT0FSRFM7ICsraSkgeworCQlpZiAocWxjbmljX2JvYXJkc1tpXS52ZW5kb3IgPT0gcGRldi0+dmVuZG9yICYmCisJCQlxbGNuaWNfYm9hcmRzW2ldLmRldmljZSA9PSBwZGV2LT5kZXZpY2UgJiYKKwkJCXFsY25pY19ib2FyZHNbaV0uc3ViX3ZlbmRvciA9PSBwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yICYmCisJCQlxbGNuaWNfYm9hcmRzW2ldLnN1Yl9kZXZpY2UgPT0gcGRldi0+c3Vic3lzdGVtX2RldmljZSkgeworCQkJCXN0cmNweShuYW1lLCBxbGNuaWNfYm9hcmRzW2ldLnNob3J0X25hbWUpOworCQkJCWZvdW5kID0gMTsKKwkJCQlicmVhazsKKwkJfQorCisJfQorCisJaWYgKCFmb3VuZCkKKwkJbmFtZSA9ICJVbmtub3duIjsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19jaGVja19vcHRpb25zKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZDsKKwljaGFyIGJyZF9uYW1lW1FMQ05JQ19NQVhfQk9BUkRfTkFNRV9MRU5dOworCWNoYXIgc2VyaWFsX251bVszMl07CisJaW50IGksIG9mZnNldCwgdmFsOworCWludCAqcHRyMzI7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMDsKKworCXB0cjMyID0gKGludCAqKSZzZXJpYWxfbnVtOworCW9mZnNldCA9IFFMQ05JQ19GV19TRVJJQUxfTlVNX09GRlNFVDsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWlmIChxbGNuaWNfcm9tX2Zhc3RfcmVhZChhZGFwdGVyLCBvZmZzZXQsICZ2YWwpID09IC0xKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlcnJvciByZWFkaW5nIGJvYXJkIGluZm9cbiIpOworCQkJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMTsKKwkJCXJldHVybjsKKwkJfQorCQlwdHIzMltpXSA9IGNwdV90b19sZTMyKHZhbCk7CisJCW9mZnNldCArPSBzaXplb2YodTMyKTsKKwl9CisKKwlmd19tYWpvciA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0ZXX1ZFUlNJT05fTUFKT1IpOworCWZ3X21pbm9yID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfRldfVkVSU0lPTl9NSU5PUik7CisJZndfYnVpbGQgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19GV19WRVJTSU9OX1NVQik7CisKKwlhZGFwdGVyLT5md192ZXJzaW9uID0gUUxDTklDX1ZFUlNJT05fQ09ERShmd19tYWpvciwgZndfbWlub3IsIGZ3X2J1aWxkKTsKKworCWlmIChhZGFwdGVyLT5wb3J0bnVtID09IDApIHsKKwkJZ2V0X2JyZF9uYW1lKGFkYXB0ZXIsIGJyZF9uYW1lKTsKKworCQlwcl9pbmZvKCIlczogJXMgQm9hcmQgQ2hpcCByZXYgMHgleFxuIiwKKwkJCQltb2R1bGVfbmFtZShUSElTX01PRFVMRSksCisJCQkJYnJkX25hbWUsIGFkYXB0ZXItPmFody5yZXZpc2lvbl9pZCk7CisJfQorCisJaWYgKGFkYXB0ZXItPmZ3X3ZlcnNpb24gPCBRTENOSUNfVkVSU0lPTl9DT0RFKDMsIDQsIDIxNikpIHsKKwkJYWRhcHRlci0+ZHJpdmVyX21pc21hdGNoID0gMTsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImZpcm13YXJlIHZlcnNpb24gJWQuJWQuJWQgdW5zdXBwb3J0ZWRcbiIsCisJCQkJZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCk7CisJCXJldHVybjsKKwl9CisKKwlpID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfU1JFX01JU0MpOworCWFkYXB0ZXItPmFody5jdXRfdGhyb3VnaCA9IChpICYgMHg4MDAwKSA/IDEgOiAwOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgImZpcm13YXJlIHYlZC4lZC4lZCBbJXNdXG4iLAorCQkJZndfbWFqb3IsIGZ3X21pbm9yLCBmd19idWlsZCwKKwkJCWFkYXB0ZXItPmFody5jdXRfdGhyb3VnaCA/ICJjdXQtdGhyb3VnaCIgOiAibGVnYWN5Iik7CisKKwlpZiAoYWRhcHRlci0+ZndfdmVyc2lvbiA+PSBRTENOSUNfVkVSU0lPTl9DT0RFKDQsIDAsIDIyMikpCisJCWFkYXB0ZXItPmNhcGFiaWxpdGllcyA9IFFMQ1JEMzIoYWRhcHRlciwgQ1JCX0ZXX0NBUEFCSUxJVElFU18xKTsKKworCWFkYXB0ZXItPmZsYWdzICY9IH5RTENOSUNfTFJPX0VOQUJMRUQ7CisKKwlpZiAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSA9PSBRTENOSUNfWEdCRSkgeworCQlhZGFwdGVyLT5udW1fcnhkID0gREVGQVVMVF9SQ1ZfREVTQ1JJUFRPUlNfMTBHOworCQlhZGFwdGVyLT5udW1fanVtYm9fcnhkID0gTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SU18xMEc7CisJfSBlbHNlIGlmIChhZGFwdGVyLT5haHcucG9ydF90eXBlID09IFFMQ05JQ19HQkUpIHsKKwkJYWRhcHRlci0+bnVtX3J4ZCA9IERFRkFVTFRfUkNWX0RFU0NSSVBUT1JTXzFHOworCQlhZGFwdGVyLT5udW1fanVtYm9fcnhkID0gTUFYX0pVTUJPX1JDVl9ERVNDUklQVE9SU18xRzsKKwl9CisKKwlhZGFwdGVyLT5tc2l4X3N1cHBvcnRlZCA9ICEhdXNlX21zaV94OworCWFkYXB0ZXItPnJzc19zdXBwb3J0ZWQgPSAhIXVzZV9tc2lfeDsKKworCWFkYXB0ZXItPm51bV90eGQgPSBNQVhfQ01EX0RFU0NSSVBUT1JTOworCisJYWRhcHRlci0+bnVtX2xyb19yeGQgPSAwOworCWFkYXB0ZXItPm1heF9yZHNfcmluZ3MgPSAyOworfQorCitzdGF0aWMgaW50CitxbGNuaWNfc3RhcnRfZmlybXdhcmUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWludCB2YWwsIGVyciwgZmlyc3RfYm9vdDsKKworCWVyciA9IHFsY25pY19zZXRfZG1hX21hc2soYWRhcHRlcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmICghcWxjbmljX2Nhbl9zdGFydF9maXJtd2FyZShhZGFwdGVyKSkKKwkJZ290byB3YWl0X2luaXQ7CisKKwlmaXJzdF9ib290ID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQ0FNX1JBTSgweDFmYykpOworCWlmIChmaXJzdF9ib290ID09IDB4NTU1NTU1NTUpCisJCS8qIFRoaXMgaXMgdGhlIGZpcnN0IGJvb3QgYWZ0ZXIgcG93ZXIgdXAgKi8KKwkJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfQ0FNX1JBTSgweDFmYyksIFFMQ05JQ19CRElORk9fTUFHSUMpOworCisJcWxjbmljX3JlcXVlc3RfZmlybXdhcmUoYWRhcHRlcik7CisKKwllcnIgPSBxbGNuaWNfbmVlZF9md19yZXNldChhZGFwdGVyKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfb3V0OworCWlmIChlcnIgPT0gMCkKKwkJZ290byB3YWl0X2luaXQ7CisKKwlpZiAoZmlyc3RfYm9vdCAhPSAweDU1NTU1NTU1KSB7CisJCVFMQ1dSMzIoYWRhcHRlciwgQ1JCX0NNRFBFR19TVEFURSwgMCk7CisJCXFsY25pY19waW5pdF9mcm9tX3JvbShhZGFwdGVyKTsKKwkJbXNsZWVwKDEpOworCX0KKworCVFMQ1dSMzIoYWRhcHRlciwgQ1JCX0RNQV9TSElGVCwgMHg1NTU1NTU1NSk7CisJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfUEVHX0hBTFRfU1RBVFVTMSwgMCk7CisJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfUEVHX0hBTFRfU1RBVFVTMiwgMCk7CisKKwlxbGNuaWNfc2V0X3BvcnRfbW9kZShhZGFwdGVyKTsKKworCWVyciA9IHFsY25pY19sb2FkX2Zpcm13YXJlKGFkYXB0ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKKworCXFsY25pY19yZWxlYXNlX2Zpcm13YXJlKGFkYXB0ZXIpOworCisJdmFsID0gKF9RTENOSUNfTElOVVhfTUFKT1IgPDwgMTYpCisJCXwgKChfUUxDTklDX0xJTlVYX01JTk9SIDw8IDgpKQorCQl8IChfUUxDTklDX0xJTlVYX1NVQlZFUlNJT04pOworCVFMQ1dSMzIoYWRhcHRlciwgQ1JCX0RSSVZFUl9WRVJTSU9OLCB2YWwpOworCit3YWl0X2luaXQ6CisJLyogSGFuZHNoYWtlIHdpdGggdGhlIGNhcmQgYmVmb3JlIHdlIHJlZ2lzdGVyIHRoZSBkZXZpY2VzLiAqLworCWVyciA9IHFsY25pY19waGFudG9tX2luaXQoYWRhcHRlcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OworCisJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RFVl9TVEFURSwgUUxDTklDX0RFVl9SRUFEWSk7CisKKwlxbGNuaWNfdXBkYXRlX2RtYV9tYXNrKGFkYXB0ZXIpOworCisJcWxjbmljX2NoZWNrX29wdGlvbnMoYWRhcHRlcik7CisKKwlhZGFwdGVyLT5uZWVkX2Z3X3Jlc2V0ID0gMDsKKworCS8qIGZhbGwgdGhyb3VnaCBhbmQgcmVsZWFzZSBmaXJtd2FyZSAqLworCitlcnJfb3V0OgorCXFsY25pY19yZWxlYXNlX2Zpcm13YXJlKGFkYXB0ZXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19yZXF1ZXN0X2lycShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaXJxX2hhbmRsZXJfdCBoYW5kbGVyOworCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3Jpbmc7CisJaW50IGVyciwgcmluZzsKKworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCisJaWYgKGFkYXB0ZXItPmRpYWdfdGVzdCA9PSBRTENOSUNfSU5URVJSVVBUX1RFU1QpIHsKKwkJaGFuZGxlciA9IHFsY25pY190bXBfaW50cjsKKwkJaWYgKCFRTENOSUNfSVNfTVNJX0ZBTUlMWShhZGFwdGVyKSkKKwkJCWZsYWdzIHw9IElSUUZfU0hBUkVEOworCisJfSBlbHNlIHsKKwkJaWYgKGFkYXB0ZXItPmZsYWdzICYgUUxDTklDX01TSVhfRU5BQkxFRCkKKwkJCWhhbmRsZXIgPSBxbGNuaWNfbXNpeF9pbnRyOworCQllbHNlIGlmIChhZGFwdGVyLT5mbGFncyAmIFFMQ05JQ19NU0lfRU5BQkxFRCkKKwkJCWhhbmRsZXIgPSBxbGNuaWNfbXNpX2ludHI7CisJCWVsc2UgeworCQkJZmxhZ3MgfD0gSVJRRl9TSEFSRUQ7CisJCQloYW5kbGVyID0gcWxjbmljX2ludHI7CisJCX0KKwl9CisJYWRhcHRlci0+aXJxID0gbmV0ZGV2LT5pcnE7CisKKwlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CisJCXNkc19yaW5nID0gJnJlY3ZfY3R4LT5zZHNfcmluZ3NbcmluZ107CisJCXNwcmludGYoc2RzX3JpbmctPm5hbWUsICIlc1slZF0iLCBuZXRkZXYtPm5hbWUsIHJpbmcpOworCQllcnIgPSByZXF1ZXN0X2lycShzZHNfcmluZy0+aXJxLCBoYW5kbGVyLAorCQkJCSAgZmxhZ3MsIHNkc19yaW5nLT5uYW1lLCBzZHNfcmluZyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcWxjbmljX2ZyZWVfaXJxKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgcmluZzsKKwlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nOworCisJc3RydWN0IHFsY25pY19yZWN2X2NvbnRleHQgKnJlY3ZfY3R4ID0gJmFkYXB0ZXItPnJlY3ZfY3R4OworCisJZm9yIChyaW5nID0gMDsgcmluZyA8IGFkYXB0ZXItPm1heF9zZHNfcmluZ3M7IHJpbmcrKykgeworCQlzZHNfcmluZyA9ICZyZWN2X2N0eC0+c2RzX3JpbmdzW3JpbmddOworCQlmcmVlX2lycShzZHNfcmluZy0+aXJxLCBzZHNfcmluZyk7CisJfQorfQorCitzdGF0aWMgdm9pZAorcWxjbmljX2luaXRfY29hbGVzY2VfZGVmYXVsdHMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWFkYXB0ZXItPmNvYWwuZmxhZ3MgPSBRTENOSUNfSU5UUl9ERUZBVUxUOworCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEucnhfdGltZV91cyA9CisJCVFMQ05JQ19ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfUlhfVElNRV9VUzsKKwlhZGFwdGVyLT5jb2FsLm5vcm1hbC5kYXRhLnJ4X3BhY2tldHMgPQorCQlRTENOSUNfREVGQVVMVF9JTlRSX0NPQUxFU0NFX1JYX1BBQ0tFVFM7CisJYWRhcHRlci0+Y29hbC5ub3JtYWwuZGF0YS50eF90aW1lX3VzID0KKwkJUUxDTklDX0RFRkFVTFRfSU5UUl9DT0FMRVNDRV9UWF9USU1FX1VTOworCWFkYXB0ZXItPmNvYWwubm9ybWFsLmRhdGEudHhfcGFja2V0cyA9CisJCVFMQ05JQ19ERUZBVUxUX0lOVFJfQ09BTEVTQ0VfVFhfUEFDS0VUUzsKK30KKworc3RhdGljIGludAorX19xbGNuaWNfdXAoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCWlmIChhZGFwdGVyLT5pc191cCAhPSBRTENOSUNfQURBUFRFUl9VUF9NQUdJQykKKwkJcmV0dXJuIC1FSU87CisKKwlxbGNuaWNfc2V0X211bHRpKG5ldGRldik7CisJcWxjbmljX2Z3X2NtZF9zZXRfbXR1KGFkYXB0ZXIsIG5ldGRldi0+bXR1KTsKKworCWFkYXB0ZXItPmFody5saW5rdXAgPSAwOworCisJaWYgKGFkYXB0ZXItPm1heF9zZHNfcmluZ3MgPiAxKQorCQlxbGNuaWNfY29uZmlnX3JzcyhhZGFwdGVyLCAxKTsKKworCXFsY25pY19jb25maWdfaW50cl9jb2FsZXNjZShhZGFwdGVyKTsKKworCWlmIChhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBRTENOSUNfRldfQ0FQQUJJTElUWV9IV19MUk8pCisJCXFsY25pY19jb25maWdfaHdfbHJvKGFkYXB0ZXIsIFFMQ05JQ19MUk9fRU5BQkxFRCk7CisKKwlxbGNuaWNfbmFwaV9lbmFibGUoYWRhcHRlcik7CisKKwlxbGNuaWNfbGlua2V2ZW50X3JlcXVlc3QoYWRhcHRlciwgMSk7CisKKwlzZXRfYml0KF9fUUxDTklDX0RFVl9VUCwgJmFkYXB0ZXItPnN0YXRlKTsKKwlyZXR1cm4gMDsKK30KKworLyogVXNhZ2U6IER1cmluZyByZXN1bWUgYW5kIGZpcm13YXJlIHJlY292ZXJ5IG1vZHVsZS4qLworCitzdGF0aWMgaW50CitxbGNuaWNfdXAoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCWludCBlcnIgPSAwOworCisJcnRubF9sb2NrKCk7CisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJZXJyID0gX19xbGNuaWNfdXAoYWRhcHRlciwgbmV0ZGV2KTsKKwlydG5sX3VubG9jaygpOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQKK19fcWxjbmljX2Rvd24oc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCWlmIChhZGFwdGVyLT5pc191cCAhPSBRTENOSUNfQURBUFRFUl9VUF9NQUdJQykKKwkJcmV0dXJuOworCisJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoX19RTENOSUNfREVWX1VQLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CisKKwlzbXBfbWIoKTsKKwlzcGluX2xvY2soJmFkYXB0ZXItPnR4X2NsZWFuX2xvY2spOworCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CisJbmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpOworCisJcWxjbmljX2ZyZWVfbWFjX2xpc3QoYWRhcHRlcik7CisKKwlxbGNuaWNfbmljX3NldF9wcm9taXNjKGFkYXB0ZXIsIFFMQ05JQ19OSVVfTk9OX1BST01JU0NfTU9ERSk7CisKKwlxbGNuaWNfbmFwaV9kaXNhYmxlKGFkYXB0ZXIpOworCisJcWxjbmljX3JlbGVhc2VfdHhfYnVmZmVycyhhZGFwdGVyKTsKKwlzcGluX3VubG9jaygmYWRhcHRlci0+dHhfY2xlYW5fbG9jayk7Cit9CisKKy8qIFVzYWdlOiBEdXJpbmcgc3VzcGVuZCBhbmQgZmlybXdhcmUgcmVjb3ZlcnkgbW9kdWxlICovCisKK3N0YXRpYyB2b2lkCitxbGNuaWNfZG93bihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJcnRubF9sb2NrKCk7CisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJX19xbGNuaWNfZG93bihhZGFwdGVyLCBuZXRkZXYpOworCXJ0bmxfdW5sb2NrKCk7CisKK30KKworc3RhdGljIGludAorcWxjbmljX2F0dGFjaChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJaW50IGVyciwgcmluZzsKKwlzdHJ1Y3QgcWxjbmljX2hvc3RfcmRzX3JpbmcgKnJkc19yaW5nOworCisJaWYgKGFkYXB0ZXItPmlzX3VwID09IFFMQ05JQ19BREFQVEVSX1VQX01BR0lDKQorCQlyZXR1cm4gMDsKKworCWVyciA9IHFsY25pY19pbml0X2Zpcm13YXJlKGFkYXB0ZXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBxbGNuaWNfbmFwaV9hZGQoYWRhcHRlciwgbmV0ZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gcWxjbmljX2FsbG9jX3N3X3Jlc291cmNlcyhhZGFwdGVyKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIkVycm9yIGluIHNldHRpbmcgc3cgcmVzb3VyY2VzXG4iKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwllcnIgPSBxbGNuaWNfYWxsb2NfaHdfcmVzb3VyY2VzKGFkYXB0ZXIpOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRXJyb3IgaW4gc2V0dGluZyBodyByZXNvdXJjZXNcbiIpOworCQlnb3RvIGVycl9vdXRfZnJlZV9zdzsKKwl9CisKKworCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfcmRzX3JpbmdzOyByaW5nKyspIHsKKwkJcmRzX3JpbmcgPSAmYWRhcHRlci0+cmVjdl9jdHgucmRzX3JpbmdzW3JpbmddOworCQlxbGNuaWNfcG9zdF9yeF9idWZmZXJzKGFkYXB0ZXIsIHJpbmcsIHJkc19yaW5nKTsKKwl9CisKKwllcnIgPSBxbGNuaWNfcmVxdWVzdF9pcnEoYWRhcHRlcik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gc2V0dXAgaW50ZXJydXB0XG4iKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfcnhidWY7CisJfQorCisJcWxjbmljX2luaXRfY29hbGVzY2VfZGVmYXVsdHMoYWRhcHRlcik7CisKKwlxbGNuaWNfY3JlYXRlX3N5c2ZzX2VudHJpZXMoYWRhcHRlcik7CisKKwlhZGFwdGVyLT5pc191cCA9IFFMQ05JQ19BREFQVEVSX1VQX01BR0lDOworCXJldHVybiAwOworCitlcnJfb3V0X2ZyZWVfcnhidWY6CisJcWxjbmljX3JlbGVhc2VfcnhfYnVmZmVycyhhZGFwdGVyKTsKKwlxbGNuaWNfZnJlZV9od19yZXNvdXJjZXMoYWRhcHRlcik7CitlcnJfb3V0X2ZyZWVfc3c6CisJcWxjbmljX2ZyZWVfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfZGV0YWNoKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpZiAoYWRhcHRlci0+aXNfdXAgIT0gUUxDTklDX0FEQVBURVJfVVBfTUFHSUMpCisJCXJldHVybjsKKworCXFsY25pY19yZW1vdmVfc3lzZnNfZW50cmllcyhhZGFwdGVyKTsKKworCXFsY25pY19mcmVlX2h3X3Jlc291cmNlcyhhZGFwdGVyKTsKKwlxbGNuaWNfcmVsZWFzZV9yeF9idWZmZXJzKGFkYXB0ZXIpOworCXFsY25pY19mcmVlX2lycShhZGFwdGVyKTsKKwlxbGNuaWNfbmFwaV9kZWwoYWRhcHRlcik7CisJcWxjbmljX2ZyZWVfc3dfcmVzb3VyY2VzKGFkYXB0ZXIpOworCisJYWRhcHRlci0+aXNfdXAgPSAwOworfQorCit2b2lkIHFsY25pY19kaWFnX2ZyZWVfcmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBtYXhfc2RzX3JpbmdzKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKKwlpbnQgcmluZzsKKworCWlmIChhZGFwdGVyLT5kaWFnX3Rlc3QgPT0gUUxDTklDX0lOVEVSUlVQVF9URVNUKSB7CisJCWZvciAocmluZyA9IDA7IHJpbmcgPCBhZGFwdGVyLT5tYXhfc2RzX3JpbmdzOyByaW5nKyspIHsKKwkJCXNkc19yaW5nID0gJmFkYXB0ZXItPnJlY3ZfY3R4LnNkc19yaW5nc1tyaW5nXTsKKwkJCXFsY25pY19kaXNhYmxlX2ludChzZHNfcmluZyk7CisJCX0KKwl9CisKKwlxbGNuaWNfZGV0YWNoKGFkYXB0ZXIpOworCisJYWRhcHRlci0+ZGlhZ190ZXN0ID0gMDsKKwlhZGFwdGVyLT5tYXhfc2RzX3JpbmdzID0gbWF4X3Nkc19yaW5nczsKKworCWlmIChxbGNuaWNfYXR0YWNoKGFkYXB0ZXIpKQorCQlyZXR1cm47CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlfX3FsY25pY191cChhZGFwdGVyLCBuZXRkZXYpOworCisJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOworfQorCitpbnQgcWxjbmljX2RpYWdfYWxsb2NfcmVzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCB0ZXN0KQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZzsKKwlpbnQgcmluZzsKKwlpbnQgcmV0OworCisJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJX19xbGNuaWNfZG93bihhZGFwdGVyLCBuZXRkZXYpOworCisJcWxjbmljX2RldGFjaChhZGFwdGVyKTsKKworCWFkYXB0ZXItPm1heF9zZHNfcmluZ3MgPSAxOworCWFkYXB0ZXItPmRpYWdfdGVzdCA9IHRlc3Q7CisKKwlyZXQgPSBxbGNuaWNfYXR0YWNoKGFkYXB0ZXIpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoYWRhcHRlci0+ZGlhZ190ZXN0ID09IFFMQ05JQ19JTlRFUlJVUFRfVEVTVCkgeworCQlmb3IgKHJpbmcgPSAwOyByaW5nIDwgYWRhcHRlci0+bWF4X3Nkc19yaW5nczsgcmluZysrKSB7CisJCQlzZHNfcmluZyA9ICZhZGFwdGVyLT5yZWN2X2N0eC5zZHNfcmluZ3NbcmluZ107CisJCQlxbGNuaWNfZW5hYmxlX2ludChzZHNfcmluZyk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworaW50CitxbGNuaWNfcmVzZXRfY29udGV4dChzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGVyciA9IDA7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChhZGFwdGVyLT5pc191cCA9PSBRTENOSUNfQURBUFRFUl9VUF9NQUdJQykgeworCisJCW5ldGlmX2RldmljZV9kZXRhY2gobmV0ZGV2KTsKKworCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQkJX19xbGNuaWNfZG93bihhZGFwdGVyLCBuZXRkZXYpOworCisJCXFsY25pY19kZXRhY2goYWRhcHRlcik7CisKKwkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQkJZXJyID0gcWxjbmljX2F0dGFjaChhZGFwdGVyKTsKKwkJCWlmICghZXJyKQorCQkJCWVyciA9IF9fcWxjbmljX3VwKGFkYXB0ZXIsIG5ldGRldik7CisKKwkJCWlmIChlcnIpCisJCQkJZ290byBkb25lOworCQl9CisKKwkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOworCX0KKworZG9uZToKKwljbGVhcl9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19zZXR1cF9uZXRkZXYoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLAorCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCWludCBlcnI7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJYWRhcHRlci0+cnhfY3N1bSA9IDE7CisJYWRhcHRlci0+bWNfZW5hYmxlZCA9IDA7CisJYWRhcHRlci0+bWF4X21jX2NvdW50ID0gMzg7CisKKwluZXRkZXYtPm5ldGRldl9vcHMJICAgPSAmcWxjbmljX25ldGRldl9vcHM7CisJbmV0ZGV2LT53YXRjaGRvZ190aW1lbyAgICAgPSAyKkhaOworCisJcWxjbmljX2NoYW5nZV9tdHUobmV0ZGV2LCBuZXRkZXYtPm10dSk7CisKKwlTRVRfRVRIVE9PTF9PUFMobmV0ZGV2LCAmcWxjbmljX2V0aHRvb2xfb3BzKTsKKworCW5ldGRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfU0cgfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1RTTyk7CisJbmV0ZGV2LT5mZWF0dXJlcyB8PSAoTkVUSUZfRl9HUk8pOworCW5ldGRldi0+dmxhbl9mZWF0dXJlcyB8PSAoTkVUSUZfRl9TRyB8IE5FVElGX0ZfSVBfQ1NVTSB8IE5FVElGX0ZfVFNPKTsKKworCW5ldGRldi0+ZmVhdHVyZXMgfD0gKE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9UU082KTsKKwluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gKE5FVElGX0ZfSVBWNl9DU1VNIHwgTkVUSUZfRl9UU082KTsKKworCWlmIChhZGFwdGVyLT5wY2lfdXNpbmdfZGFjKSB7CisJCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworCQluZXRkZXYtPnZsYW5fZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BOworCX0KKworCWlmIChhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBRTENOSUNfRldfQ0FQQUJJTElUWV9GVkxBTlRYKQorCQluZXRkZXYtPmZlYXR1cmVzIHw9IChORVRJRl9GX0hXX1ZMQU5fVFgpOworCisJaWYgKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIFFMQ05JQ19GV19DQVBBQklMSVRZX0hXX0xSTykKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0xSTzsKKworCW5ldGRldi0+aXJxID0gYWRhcHRlci0+bXNpeF9lbnRyaWVzWzBdLnZlY3RvcjsKKworCUlOSVRfV09SSygmYWRhcHRlci0+dHhfdGltZW91dF90YXNrLCBxbGNuaWNfdHhfdGltZW91dF90YXNrKTsKKworCWlmIChxbGNuaWNfcmVhZF9tYWNfYWRkcihhZGFwdGVyKSkKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWFkIG1hYyBhZGRyXG4iKTsKKworCW5ldGlmX2NhcnJpZXJfb2ZmKG5ldGRldik7CisJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCisJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgbmV0IGRldmljZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0CitxbGNuaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IE5VTEw7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gTlVMTDsKKwlpbnQgZXJyOworCWludCBwY2lfZnVuY19pZCA9IFBDSV9GVU5DKHBkZXYtPmRldmZuKTsKKwl1aW50OF90IHJldmlzaW9uX2lkOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmICghKHBjaV9yZXNvdXJjZV9mbGFncyhwZGV2LCAwKSAmIElPUkVTT1VSQ0VfTUVNKSkgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGVycl9vdXRfZGlzYWJsZV9wZGV2OworCX0KKworCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgcWxjbmljX2RyaXZlcl9uYW1lKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZGlzYWJsZV9wZGV2OworCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwluZXRkZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IHFsY25pY19hZGFwdGVyKSk7CisJaWYgKCFuZXRkZXYpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG5ldF9kZXZpY2VcbiIpOworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CisJfQorCisJU0VUX05FVERFVl9ERVYobmV0ZGV2LCAmcGRldi0+ZGV2KTsKKworCWFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWFkYXB0ZXItPm5ldGRldiAgPSBuZXRkZXY7CisJYWRhcHRlci0+cGRldiAgICA9IHBkZXY7CisJYWRhcHRlci0+YWh3LnBjaV9mdW5jICA9IHBjaV9mdW5jX2lkOworCisJcmV2aXNpb25faWQgPSBwZGV2LT5yZXZpc2lvbjsKKwlhZGFwdGVyLT5haHcucmV2aXNpb25faWQgPSByZXZpc2lvbl9pZDsKKworCXJ3bG9ja19pbml0KCZhZGFwdGVyLT5haHcuY3JiX2xvY2spOworCW11dGV4X2luaXQoJmFkYXB0ZXItPmFody5tZW1fbG9jayk7CisKKwlzcGluX2xvY2tfaW5pdCgmYWRhcHRlci0+dHhfY2xlYW5fbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJmFkYXB0ZXItPm1hY19saXN0KTsKKworCWVyciA9IHFsY25pY19zZXR1cF9wY2lfbWFwKGFkYXB0ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlX25ldGRldjsKKworCS8qIFRoaXMgd2lsbCBiZSByZXNldCBmb3IgbWV6eiBjYXJkcyAgKi8KKwlhZGFwdGVyLT5wb3J0bnVtID0gcGNpX2Z1bmNfaWQ7CisKKwllcnIgPSBxbGNuaWNfZ2V0X2JvYXJkX2luZm8oYWRhcHRlcik7CisJaWYgKGVycikgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJFcnJvciBnZXR0aW5nIGJvYXJkIGNvbmZpZyBpbmZvLlxuIik7CisJCWdvdG8gZXJyX291dF9pb3VubWFwOworCX0KKworCisJZXJyID0gcWxjbmljX3N0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9kZWNyX3JlZjsKKworCS8qCisJICogU2VlIGlmIHRoZSBmaXJtd2FyZSBnYXZlIHVzIGEgdmlydHVhbC1waHlzaWNhbCBwb3J0IG1hcHBpbmcuCisJICovCisJYWRhcHRlci0+cGh5c2ljYWxfcG9ydCA9IGFkYXB0ZXItPnBvcnRudW07CisKKwlxbGNuaWNfY2xlYXJfc3RhdHMoYWRhcHRlcik7CisKKwlxbGNuaWNfc2V0dXBfaW50cihhZGFwdGVyKTsKKworCWVyciA9IHFsY25pY19zZXR1cF9uZXRkZXYoYWRhcHRlciwgbmV0ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9vdXRfZGlzYWJsZV9tc2k7CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgYWRhcHRlcik7CisKKwlxbGNuaWNfc2NoZWR1bGVfd29yayhhZGFwdGVyLCBxbGNuaWNfZndfcG9sbF93b3JrLCBGV19QT0xMX0RFTEFZKTsKKworCXN3aXRjaCAoYWRhcHRlci0+YWh3LnBvcnRfdHlwZSkgeworCWNhc2UgUUxDTklDX0dCRToKKwkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIiVzOiBHYkUgcG9ydCBpbml0aWFsaXplZFxuIiwKKwkJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCQlicmVhazsKKwljYXNlIFFMQ05JQ19YR0JFOgorCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LCAiJXM6IFhHYkUgcG9ydCBpbml0aWFsaXplZFxuIiwKKwkJCQlhZGFwdGVyLT5uZXRkZXYtPm5hbWUpOworCQlicmVhazsKKwl9CisKKwlxbGNuaWNfY3JlYXRlX2RpYWdfZW50cmllcyhhZGFwdGVyKTsKKworCXJldHVybiAwOworCitlcnJfb3V0X2Rpc2FibGVfbXNpOgorCXFsY25pY190ZWFyZG93bl9pbnRyKGFkYXB0ZXIpOworCitlcnJfb3V0X2RlY3JfcmVmOgorCXFsY25pY19jbHJfYWxsX2Rydl9zdGF0ZShhZGFwdGVyKTsKKworZXJyX291dF9pb3VubWFwOgorCXFsY25pY19jbGVhbnVwX3BjaV9tYXAoYWRhcHRlcik7CisKK2Vycl9vdXRfZnJlZV9uZXRkZXY6CisJZnJlZV9uZXRkZXYobmV0ZGV2KTsKKworZXJyX291dF9mcmVlX3JlczoKKwlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOworCitlcnJfb3V0X2Rpc2FibGVfcGRldjoKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBxbGNuaWNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCisJYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAoYWRhcHRlciA9PSBOVUxMKQorCQlyZXR1cm47CisKKwluZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwlxbGNuaWNfY2FuY2VsX2Z3X3dvcmsoYWRhcHRlcik7CisKKwl1bnJlZ2lzdGVyX25ldGRldihuZXRkZXYpOworCisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+dHhfdGltZW91dF90YXNrKTsKKworCXFsY25pY19kZXRhY2goYWRhcHRlcik7CisKKwlxbGNuaWNfY2xyX2FsbF9kcnZfc3RhdGUoYWRhcHRlcik7CisKKwljbGVhcl9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOworCisJcWxjbmljX3RlYXJkb3duX2ludHIoYWRhcHRlcik7CisKKwlxbGNuaWNfcmVtb3ZlX2RpYWdfZW50cmllcyhhZGFwdGVyKTsKKworCXFsY25pY19jbGVhbnVwX3BjaV9tYXAoYWRhcHRlcik7CisKKwlxbGNuaWNfcmVsZWFzZV9maXJtd2FyZShhZGFwdGVyKTsKKworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWZyZWVfbmV0ZGV2KG5ldGRldik7Cit9CitzdGF0aWMgaW50IF9fcWxjbmljX3NodXRkb3duKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCByZXR2YWw7CisKKwluZXRpZl9kZXZpY2VfZGV0YWNoKG5ldGRldik7CisKKwlxbGNuaWNfY2FuY2VsX2Z3X3dvcmsoYWRhcHRlcik7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlxbGNuaWNfZG93bihhZGFwdGVyLCBuZXRkZXYpOworCisJY2FuY2VsX3dvcmtfc3luYygmYWRhcHRlci0+dHhfdGltZW91dF90YXNrKTsKKworCXFsY25pY19kZXRhY2goYWRhcHRlcik7CisKKwlxbGNuaWNfY2xyX2FsbF9kcnZfc3RhdGUoYWRhcHRlcik7CisKKwljbGVhcl9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpOworCisJcmV0dmFsID0gcGNpX3NhdmVfc3RhdGUocGRldik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKworCWlmIChxbGNuaWNfd29sX3N1cHBvcnRlZChhZGFwdGVyKSkgeworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzY29sZCwgMSk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNob3QsIDEpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBxbGNuaWNfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaWYgKF9fcWxjbmljX3NodXRkb3duKHBkZXYpKQorCQlyZXR1cm47CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQKK3FsY25pY19zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJaW50IHJldHZhbDsKKworCXJldHZhbCA9IF9fcWxjbmljX3NodXRkb3duKHBkZXYpOworCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcWxjbmljX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlpbnQgZXJyOworCisJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKKwlwY2lfc2V0X21hc3RlcihwZGV2KTsKKwlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKKworCWFkYXB0ZXItPmFody5jcmJfd2luID0gLTE7CisJYWRhcHRlci0+YWh3Lm9jbV93aW4gPSAtMTsKKworCWVyciA9IHFsY25pY19zdGFydF9maXJtd2FyZShhZGFwdGVyKTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBzdGFydCBmaXJtd2FyZVxuIik7CisJCXJldHVybiBlcnI7CisJfQorCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQllcnIgPSBxbGNuaWNfYXR0YWNoKGFkYXB0ZXIpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0OworCisJCWVyciA9IHFsY25pY191cChhZGFwdGVyLCBuZXRkZXYpOworCQlpZiAoZXJyKQorCQkJZ290byBlcnJfb3V0X2RldGFjaDsKKworCisJCXFsY25pY19jb25maWdfaW5kZXZfYWRkcihuZXRkZXYsIE5FVERFVl9VUCk7CisJfQorCisJbmV0aWZfZGV2aWNlX2F0dGFjaChuZXRkZXYpOworCXFsY25pY19zY2hlZHVsZV93b3JrKGFkYXB0ZXIsIHFsY25pY19md19wb2xsX3dvcmssIEZXX1BPTExfREVMQVkpOworCXJldHVybiAwOworCitlcnJfb3V0X2RldGFjaDoKKwlxbGNuaWNfZGV0YWNoKGFkYXB0ZXIpOworZXJyX291dDoKKwlxbGNuaWNfY2xyX2FsbF9kcnZfc3RhdGUoYWRhcHRlcik7CisJcmV0dXJuIGVycjsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IHFsY25pY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlpbnQgZXJyOworCisJaWYgKGFkYXB0ZXItPmRyaXZlcl9taXNtYXRjaCkKKwkJcmV0dXJuIC1FSU87CisKKwllcnIgPSBxbGNuaWNfYXR0YWNoKGFkYXB0ZXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwllcnIgPSBfX3FsY25pY191cChhZGFwdGVyLCBuZXRkZXYpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dDsKKworCW5ldGlmX3N0YXJ0X3F1ZXVlKG5ldGRldik7CisKKwlyZXR1cm4gMDsKKworZXJyX291dDoKKwlxbGNuaWNfZGV0YWNoKGFkYXB0ZXIpOworCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBxbGNuaWNfY2xvc2UgLSBEaXNhYmxlcyBhIG5ldHdvcmsgaW50ZXJmYWNlIGVudHJ5IHBvaW50CisgKi8KK3N0YXRpYyBpbnQgcWxjbmljX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCV9fcWxjbmljX2Rvd24oYWRhcHRlciwgbmV0ZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY190c29fY2hlY2soc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJc3RydWN0IHFsY25pY19ob3N0X3R4X3JpbmcgKnR4X3JpbmcsCisJCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqZmlyc3RfZGVzYywKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwl1OCBvcGNvZGUgPSBUWF9FVEhFUl9QS1Q7CisJX19iZTE2IHByb3RvY29sID0gc2tiLT5wcm90b2NvbDsKKwl1MTYgZmxhZ3MgPSAwLCB2aWQgPSAwOworCXUzMiBwcm9kdWNlcjsKKwlpbnQgY29waWVkLCBvZmZzZXQsIGNvcHlfbGVuLCBoZHJfbGVuID0gMCwgdHNvID0gMCwgdmxhbl9vb2IgPSAwOworCXN0cnVjdCBjbWRfZGVzY190eXBlMCAqaHdkZXNjOworCXN0cnVjdCB2bGFuX2V0aGhkciAqdmg7CisKKwlpZiAocHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfODAyMVEpKSB7CisKKwkJdmggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopc2tiLT5kYXRhOworCQlwcm90b2NvbCA9IHZoLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvOworCQlmbGFncyA9IEZMQUdTX1ZMQU5fVEFHR0VEOworCisJfSBlbHNlIGlmICh2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKKworCQlmbGFncyA9IEZMQUdTX1ZMQU5fT09COworCQl2aWQgPSB2bGFuX3R4X3RhZ19nZXQoc2tiKTsKKwkJcWxjbmljX3NldF90eF92bGFuX3RjaShmaXJzdF9kZXNjLCB2aWQpOworCQl2bGFuX29vYiA9IDE7CisJfQorCisJaWYgKChuZXRkZXYtPmZlYXR1cmVzICYgKE5FVElGX0ZfVFNPIHwgTkVUSUZfRl9UU082KSkgJiYKKwkJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPiAwKSB7CisKKwkJaGRyX2xlbiA9IHNrYl90cmFuc3BvcnRfb2Zmc2V0KHNrYikgKyB0Y3BfaGRybGVuKHNrYik7CisKKwkJZmlyc3RfZGVzYy0+bXNzID0gY3B1X3RvX2xlMTYoc2tiX3NoaW5mbyhza2IpLT5nc29fc2l6ZSk7CisJCWZpcnN0X2Rlc2MtPnRvdGFsX2hkcl9sZW5ndGggPSBoZHJfbGVuOworCQlpZiAodmxhbl9vb2IpIHsKKwkJCWZpcnN0X2Rlc2MtPnRvdGFsX2hkcl9sZW5ndGggKz0gVkxBTl9ITEVOOworCQkJZmlyc3RfZGVzYy0+dGNwX2hkcl9vZmZzZXQgPSBWTEFOX0hMRU47CisJCQlmaXJzdF9kZXNjLT5pcF9oZHJfb2Zmc2V0ID0gVkxBTl9ITEVOOworCQkJLyogT25seSBpbiBjYXNlIG9mIFRTTyBvbiB2bGFuIGRldmljZSAqLworCQkJZmxhZ3MgfD0gRkxBR1NfVkxBTl9UQUdHRUQ7CisJCX0KKworCQlvcGNvZGUgPSAocHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVBWNikpID8KKwkJCQlUWF9UQ1BfTFNPNiA6IFRYX1RDUF9MU087CisJCXRzbyA9IDE7CisKKwl9IGVsc2UgaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHsKKwkJdTggbDRwcm90bzsKKworCQlpZiAocHJvdG9jb2wgPT0gY3B1X3RvX2JlMTYoRVRIX1BfSVApKSB7CisJCQlsNHByb3RvID0gaXBfaGRyKHNrYiktPnByb3RvY29sOworCisJCQlpZiAobDRwcm90byA9PSBJUFBST1RPX1RDUCkKKwkJCQlvcGNvZGUgPSBUWF9UQ1BfUEtUOworCQkJZWxzZSBpZiAobDRwcm90byA9PSBJUFBST1RPX1VEUCkKKwkJCQlvcGNvZGUgPSBUWF9VRFBfUEtUOworCQl9IGVsc2UgaWYgKHByb3RvY29sID09IGNwdV90b19iZTE2KEVUSF9QX0lQVjYpKSB7CisJCQlsNHByb3RvID0gaXB2Nl9oZHIoc2tiKS0+bmV4dGhkcjsKKworCQkJaWYgKGw0cHJvdG8gPT0gSVBQUk9UT19UQ1ApCisJCQkJb3Bjb2RlID0gVFhfVENQVjZfUEtUOworCQkJZWxzZSBpZiAobDRwcm90byA9PSBJUFBST1RPX1VEUCkKKwkJCQlvcGNvZGUgPSBUWF9VRFBWNl9QS1Q7CisJCX0KKwl9CisKKwlmaXJzdF9kZXNjLT50Y3BfaGRyX29mZnNldCArPSBza2JfdHJhbnNwb3J0X29mZnNldChza2IpOworCWZpcnN0X2Rlc2MtPmlwX2hkcl9vZmZzZXQgKz0gc2tiX25ldHdvcmtfb2Zmc2V0KHNrYik7CisJcWxjbmljX3NldF90eF9mbGFnc19vcGNvZGUoZmlyc3RfZGVzYywgZmxhZ3MsIG9wY29kZSk7CisKKwlpZiAoIXRzbykKKwkJcmV0dXJuOworCisJLyogRm9yIExTTywgd2UgbmVlZCB0byBjb3B5IHRoZSBNQUMvSVAvVENQIGhlYWRlcnMgaW50bworCSAqIHRoZSBkZXNjcmlwdG9yIHJpbmcKKwkgKi8KKwlwcm9kdWNlciA9IHR4X3JpbmctPnByb2R1Y2VyOworCWNvcGllZCA9IDA7CisJb2Zmc2V0ID0gMjsKKworCWlmICh2bGFuX29vYikgeworCQkvKiBDcmVhdGUgYSBUU08gdmxhbiBoZWFkZXIgdGVtcGxhdGUgZm9yIGZpcm13YXJlICovCisKKwkJaHdkZXNjID0gJnR4X3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl07CisJCXR4X3JpbmctPmNtZF9idWZfYXJyW3Byb2R1Y2VyXS5za2IgPSBOVUxMOworCisJCWNvcHlfbGVuID0gbWluKChpbnQpc2l6ZW9mKHN0cnVjdCBjbWRfZGVzY190eXBlMCkgLSBvZmZzZXQsCisJCQkJaGRyX2xlbiArIFZMQU5fSExFTik7CisKKwkJdmggPSAoc3RydWN0IHZsYW5fZXRoaGRyICopKChjaGFyICopaHdkZXNjICsgMik7CisJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGEoc2tiLCB2aCwgMTIpOworCQl2aC0+aF92bGFuX3Byb3RvID0gaHRvbnMoRVRIX1BfODAyMVEpOworCQl2aC0+aF92bGFuX1RDSSA9IGh0b25zKHZpZCk7CisJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgMTIsCisJCQkJKGNoYXIgKil2aCArIDE2LCBjb3B5X2xlbiAtIDE2KTsKKworCQljb3BpZWQgPSBjb3B5X2xlbiAtIFZMQU5fSExFTjsKKwkJb2Zmc2V0ID0gMDsKKworCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCB0eF9yaW5nLT5udW1fZGVzYyk7CisJfQorCisJd2hpbGUgKGNvcGllZCA8IGhkcl9sZW4pIHsKKworCQljb3B5X2xlbiA9IG1pbigoaW50KXNpemVvZihzdHJ1Y3QgY21kX2Rlc2NfdHlwZTApIC0gb2Zmc2V0LAorCQkJCShoZHJfbGVuIC0gY29waWVkKSk7CisKKwkJaHdkZXNjID0gJnR4X3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl07CisJCXR4X3JpbmctPmNtZF9idWZfYXJyW3Byb2R1Y2VyXS5za2IgPSBOVUxMOworCisJCXNrYl9jb3B5X2Zyb21fbGluZWFyX2RhdGFfb2Zmc2V0KHNrYiwgY29waWVkLAorCQkJCSAoY2hhciAqKWh3ZGVzYyArIG9mZnNldCwgY29weV9sZW4pOworCisJCWNvcGllZCArPSBjb3B5X2xlbjsKKwkJb2Zmc2V0ID0gMDsKKworCQlwcm9kdWNlciA9IGdldF9uZXh0X2luZGV4KHByb2R1Y2VyLCB0eF9yaW5nLT5udW1fZGVzYyk7CisJfQorCisJdHhfcmluZy0+cHJvZHVjZXIgPSBwcm9kdWNlcjsKKwliYXJyaWVyKCk7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19tYXBfdHhfc2tiKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgcWxjbmljX2NtZF9idWZmZXIgKnBidWYpCit7CisJc3RydWN0IHFsY25pY19za2JfZnJhZyAqbmY7CisJc3RydWN0IHNrYl9mcmFnX3N0cnVjdCAqZnJhZzsKKwlpbnQgaSwgbnJfZnJhZ3M7CisJZG1hX2FkZHJfdCBtYXA7CisKKwlucl9mcmFncyA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJbmYgPSAmcGJ1Zi0+ZnJhZ19hcnJheVswXTsKKworCW1hcCA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwKKwkJCXNrYl9oZWFkbGVuKHNrYiksIFBDSV9ETUFfVE9ERVZJQ0UpOworCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocGRldiwgbWFwKSkKKwkJZ290byBvdXRfZXJyOworCisJbmYtPmRtYSA9IG1hcDsKKwluZi0+bGVuZ3RoID0gc2tiX2hlYWRsZW4oc2tiKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9mcmFnczsgaSsrKSB7CisJCWZyYWcgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKKwkJbmYgPSAmcGJ1Zi0+ZnJhZ19hcnJheVtpKzFdOworCisJCW1hcCA9IHBjaV9tYXBfcGFnZShwZGV2LCBmcmFnLT5wYWdlLCBmcmFnLT5wYWdlX29mZnNldCwKKwkJCQlmcmFnLT5zaXplLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwZGV2LCBtYXApKQorCQkJZ290byB1bndpbmQ7CisKKwkJbmYtPmRtYSA9IG1hcDsKKwkJbmYtPmxlbmd0aCA9IGZyYWctPnNpemU7CisJfQorCisJcmV0dXJuIDA7CisKK3Vud2luZDoKKwl3aGlsZSAoLS1pID49IDApIHsKKwkJbmYgPSAmcGJ1Zi0+ZnJhZ19hcnJheVtpKzFdOworCQlwY2lfdW5tYXBfcGFnZShwZGV2LCBuZi0+ZG1hLCBuZi0+bGVuZ3RoLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwl9CisKKwluZiA9ICZwYnVmLT5mcmFnX2FycmF5WzBdOworCXBjaV91bm1hcF9zaW5nbGUocGRldiwgbmYtPmRtYSwgc2tiX2hlYWRsZW4oc2tiKSwgUENJX0RNQV9UT0RFVklDRSk7CisKK291dF9lcnI6CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorcWxjbmljX2NsZWFyX2NtZGRlc2ModTY0ICpkZXNjKQoreworCWRlc2NbMF0gPSAwVUxMOworCWRlc2NbMl0gPSAwVUxMOworfQorCituZXRkZXZfdHhfdAorcWxjbmljX3htaXRfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBxbGNuaWNfaG9zdF90eF9yaW5nICp0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKKwlzdHJ1Y3QgcWxjbmljX2NtZF9idWZmZXIgKnBidWY7CisJc3RydWN0IHFsY25pY19za2JfZnJhZyAqYnVmZnJhZzsKKwlzdHJ1Y3QgY21kX2Rlc2NfdHlwZTAgKmh3ZGVzYywgKmZpcnN0X2Rlc2M7CisJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJaW50IGksIGs7CisKKwl1MzIgcHJvZHVjZXI7CisJaW50IGZyYWdfY291bnQsIG5vX29mX2Rlc2M7CisJdTMyIG51bV90eGQgPSB0eF9yaW5nLT5udW1fZGVzYzsKKworCWZyYWdfY291bnQgPSBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICsgMTsKKworCS8qIDQgZnJhZ21lbnRzIHBlciBjbWQgZGVzICovCisJbm9fb2ZfZGVzYyA9IChmcmFnX2NvdW50ICsgMykgPj4gMjsKKworCWlmICh1bmxpa2VseShub19vZl9kZXNjICsgMiA+IHFsY25pY190eF9hdmFpbCh0eF9yaW5nKSkpIHsKKwkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CisJfQorCisJcHJvZHVjZXIgPSB0eF9yaW5nLT5wcm9kdWNlcjsKKwlwYnVmID0gJnR4X3JpbmctPmNtZF9idWZfYXJyW3Byb2R1Y2VyXTsKKworCXBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJaWYgKHFsY25pY19tYXBfdHhfc2tiKHBkZXYsIHNrYiwgcGJ1ZikpCisJCWdvdG8gZHJvcF9wYWNrZXQ7CisKKwlwYnVmLT5za2IgPSBza2I7CisJcGJ1Zi0+ZnJhZ19jb3VudCA9IGZyYWdfY291bnQ7CisKKwlmaXJzdF9kZXNjID0gaHdkZXNjID0gJnR4X3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl07CisJcWxjbmljX2NsZWFyX2NtZGRlc2MoKHU2NCAqKWh3ZGVzYyk7CisKKwlxbGNuaWNfc2V0X3R4X2ZyYWdzX2xlbihmaXJzdF9kZXNjLCBmcmFnX2NvdW50LCBza2ItPmxlbik7CisJcWxjbmljX3NldF90eF9wb3J0KGZpcnN0X2Rlc2MsIGFkYXB0ZXItPnBvcnRudW0pOworCisJZm9yIChpID0gMDsgaSA8IGZyYWdfY291bnQ7IGkrKykgeworCisJCWsgPSBpICUgNDsKKworCQlpZiAoKGsgPT0gMCkgJiYgKGkgPiAwKSkgeworCQkJLyogbW92ZSB0byBuZXh0IGRlc2MuKi8KKwkJCXByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIG51bV90eGQpOworCQkJaHdkZXNjID0gJnR4X3JpbmctPmRlc2NfaGVhZFtwcm9kdWNlcl07CisJCQlxbGNuaWNfY2xlYXJfY21kZGVzYygodTY0ICopaHdkZXNjKTsKKwkJCXR4X3JpbmctPmNtZF9idWZfYXJyW3Byb2R1Y2VyXS5za2IgPSBOVUxMOworCQl9CisKKwkJYnVmZnJhZyA9ICZwYnVmLT5mcmFnX2FycmF5W2ldOworCisJCWh3ZGVzYy0+YnVmZmVyX2xlbmd0aFtrXSA9IGNwdV90b19sZTE2KGJ1ZmZyYWctPmxlbmd0aCk7CisJCXN3aXRjaCAoaykgeworCQljYXNlIDA6CisJCQlod2Rlc2MtPmFkZHJfYnVmZmVyMSA9IGNwdV90b19sZTY0KGJ1ZmZyYWctPmRtYSk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJaHdkZXNjLT5hZGRyX2J1ZmZlcjIgPSBjcHVfdG9fbGU2NChidWZmcmFnLT5kbWEpOworCQkJYnJlYWs7CisJCWNhc2UgMjoKKwkJCWh3ZGVzYy0+YWRkcl9idWZmZXIzID0gY3B1X3RvX2xlNjQoYnVmZnJhZy0+ZG1hKTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlod2Rlc2MtPmFkZHJfYnVmZmVyNCA9IGNwdV90b19sZTY0KGJ1ZmZyYWctPmRtYSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCXR4X3JpbmctPnByb2R1Y2VyID0gZ2V0X25leHRfaW5kZXgocHJvZHVjZXIsIG51bV90eGQpOworCisJcWxjbmljX3Rzb19jaGVjayhuZXRkZXYsIHR4X3JpbmcsIGZpcnN0X2Rlc2MsIHNrYik7CisKKwlxbGNuaWNfdXBkYXRlX2NtZF9wcm9kdWNlcihhZGFwdGVyLCB0eF9yaW5nKTsKKworCWFkYXB0ZXItPnN0YXRzLnR4Ynl0ZXMgKz0gc2tiLT5sZW47CisJYWRhcHRlci0+c3RhdHMueG1pdGNhbGxlZCsrOworCisJcmV0dXJuIE5FVERFVl9UWF9PSzsKKworZHJvcF9wYWNrZXQ6CisJYWRhcHRlci0+c3RhdHMudHhkcm9wcGVkKys7CisJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwlyZXR1cm4gTkVUREVWX1RYX09LOworfQorCitzdGF0aWMgaW50IHFsY25pY19jaGVja190ZW1wKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCXUzMiB0ZW1wLCB0ZW1wX3N0YXRlLCB0ZW1wX3ZhbDsKKwlpbnQgcnYgPSAwOworCisJdGVtcCA9IFFMQ1JEMzIoYWRhcHRlciwgQ1JCX1RFTVBfU1RBVEUpOworCisJdGVtcF9zdGF0ZSA9IHFsY25pY19nZXRfdGVtcF9zdGF0ZSh0ZW1wKTsKKwl0ZW1wX3ZhbCA9IHFsY25pY19nZXRfdGVtcF92YWwodGVtcCk7CisKKwlpZiAodGVtcF9zdGF0ZSA9PSBRTENOSUNfVEVNUF9QQU5JQykgeworCQlkZXZfZXJyKCZuZXRkZXYtPmRldiwKKwkJICAgICAgICJEZXZpY2UgdGVtcGVyYXR1cmUgJWQgZGVncmVlcyBDIGV4Y2VlZHMiCisJCSAgICAgICAiIG1heGltdW0gYWxsb3dlZC4gSGFyZHdhcmUgaGFzIGJlZW4gc2h1dCBkb3duLlxuIiwKKwkJICAgICAgIHRlbXBfdmFsKTsKKwkJcnYgPSAxOworCX0gZWxzZSBpZiAodGVtcF9zdGF0ZSA9PSBRTENOSUNfVEVNUF9XQVJOKSB7CisJCWlmIChhZGFwdGVyLT50ZW1wID09IFFMQ05JQ19URU1QX05PUk1BTCkgeworCQkJZGV2X2VycigmbmV0ZGV2LT5kZXYsCisJCQkgICAgICAgIkRldmljZSB0ZW1wZXJhdHVyZSAlZCBkZWdyZWVzIEMgIgorCQkJICAgICAgICJleGNlZWRzIG9wZXJhdGluZyByYW5nZS4iCisJCQkgICAgICAgIiBJbW1lZGlhdGUgYWN0aW9uIG5lZWRlZC5cbiIsCisJCQkgICAgICAgdGVtcF92YWwpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGFkYXB0ZXItPnRlbXAgPT0gUUxDTklDX1RFTVBfV0FSTikgeworCQkJZGV2X2luZm8oJm5ldGRldi0+ZGV2LAorCQkJICAgICAgICJEZXZpY2UgdGVtcGVyYXR1cmUgaXMgbm93ICVkIGRlZ3JlZXMgQyIKKwkJCSAgICAgICAiIGluIG5vcm1hbCByYW5nZS5cbiIsIHRlbXBfdmFsKTsKKwkJfQorCX0KKwlhZGFwdGVyLT50ZW1wID0gdGVtcF9zdGF0ZTsKKwlyZXR1cm4gcnY7Cit9CisKK3ZvaWQgcWxjbmljX2FkdmVydF9saW5rX2NoYW5nZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBsaW5rdXApCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKworCWlmIChhZGFwdGVyLT5haHcubGlua3VwICYmICFsaW5rdXApIHsKKwkJZGV2X2luZm8oJm5ldGRldi0+ZGV2LCAiTklDIExpbmsgaXMgZG93blxuIik7CisJCWFkYXB0ZXItPmFody5saW5rdXAgPSAwOworCQlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCQluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYpOworCQkJbmV0aWZfc3RvcF9xdWV1ZShuZXRkZXYpOworCQl9CisJfSBlbHNlIGlmICghYWRhcHRlci0+YWh3Lmxpbmt1cCAmJiBsaW5rdXApIHsKKwkJZGV2X2luZm8oJm5ldGRldi0+ZGV2LCAiTklDIExpbmsgaXMgdXBcbiIpOworCQlhZGFwdGVyLT5haHcubGlua3VwID0gMTsKKwkJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYpOworCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBxbGNuaWNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAodGVzdF9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CisKKwlkZXZfZXJyKCZuZXRkZXYtPmRldiwgInRyYW5zbWl0IHRpbWVvdXQsIHJlc2V0dGluZy5cbiIpOworCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnR4X3RpbWVvdXRfdGFzayk7Cit9CisKK3N0YXRpYyB2b2lkIHFsY25pY190eF90aW1lb3V0X3Rhc2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIsIHR4X3RpbWVvdXRfdGFzayk7CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkKKwkJcmV0dXJuOworCisJaWYgKHRlc3RfYW5kX3NldF9iaXQoX19RTENOSUNfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm47CisKKwlpZiAoKythZGFwdGVyLT50eF90aW1lb19jbnQgPj0gUUxDTklDX01BWF9UWF9USU1FT1VUUykKKwkJZ290byByZXF1ZXN0X3Jlc2V0OworCisJY2xlYXJfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwlpZiAoIXFsY25pY19yZXNldF9jb250ZXh0KGFkYXB0ZXIpKSB7CisJCWFkYXB0ZXItPm5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCQlyZXR1cm47CisKKwkJLyogY29udGV4dCByZXNldCBmYWlsZWQsIGZhbGwgdGhyb3VnaCBmb3IgZncgcmVzZXQgKi8KKwl9CisKK3JlcXVlc3RfcmVzZXQ6CisJYWRhcHRlci0+bmVlZF9md19yZXNldCA9IDE7CisJY2xlYXJfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpxbGNuaWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAmbmV0ZGV2LT5zdGF0czsKKworCW1lbXNldChzdGF0cywgMCwgc2l6ZW9mKCpzdGF0cykpOworCisJc3RhdHMtPnJ4X3BhY2tldHMgPSBhZGFwdGVyLT5zdGF0cy5yeF9wa3RzICsgYWRhcHRlci0+c3RhdHMubHJvX3BrdHM7CisJc3RhdHMtPnR4X3BhY2tldHMgPSBhZGFwdGVyLT5zdGF0cy54bWl0ZmluaXNoZWQ7CisJc3RhdHMtPnJ4X2J5dGVzID0gYWRhcHRlci0+c3RhdHMucnhieXRlczsKKwlzdGF0cy0+dHhfYnl0ZXMgPSBhZGFwdGVyLT5zdGF0cy50eGJ5dGVzOworCXN0YXRzLT5yeF9kcm9wcGVkID0gYWRhcHRlci0+c3RhdHMucnhkcm9wcGVkOworCXN0YXRzLT50eF9kcm9wcGVkID0gYWRhcHRlci0+c3RhdHMudHhkcm9wcGVkOworCisJcmV0dXJuIHN0YXRzOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcWxjbmljX2NsZWFyX2xlZ2FjeV9pbnRyKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgc3RhdHVzOworCisJc3RhdHVzID0gcmVhZGwoYWRhcHRlci0+aXNyX2ludF92ZWMpOworCisJaWYgKCEoc3RhdHVzICYgYWRhcHRlci0+aW50X3ZlY19iaXQpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwkvKiBjaGVjayBpbnRlcnJ1cHQgc3RhdGUgbWFjaGluZSwgdG8gYmUgc3VyZSAqLworCXN0YXR1cyA9IHJlYWRsKGFkYXB0ZXItPmNyYl9pbnRfc3RhdGVfcmVnKTsKKwlpZiAoIUlTUl9MRUdBQ1lfSU5UX1RSSUdHRVJFRChzdGF0dXMpKQorCQlyZXR1cm4gSVJRX05PTkU7CisKKwl3cml0ZWwoMHhmZmZmZmZmZiwgYWRhcHRlci0+dGd0X3N0YXR1c19yZWcpOworCS8qIHJlYWQgdHdpY2UgdG8gZW5zdXJlIHdyaXRlIGlzIGZsdXNoZWQgKi8KKwlyZWFkbChhZGFwdGVyLT5pc3JfaW50X3ZlYyk7CisJcmVhZGwoYWRhcHRlci0+aXNyX2ludF92ZWMpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcWxjbmljX3RtcF9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZyA9IGRhdGE7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CisKKwlpZiAoYWRhcHRlci0+ZmxhZ3MgJiBRTENOSUNfTVNJWF9FTkFCTEVEKQorCQlnb3RvIGRvbmU7CisJZWxzZSBpZiAoYWRhcHRlci0+ZmxhZ3MgJiBRTENOSUNfTVNJX0VOQUJMRUQpIHsKKwkJd3JpdGVsKDB4ZmZmZmZmZmYsIGFkYXB0ZXItPnRndF9zdGF0dXNfcmVnKTsKKwkJZ290byBkb25lOworCX0KKworCWlmIChxbGNuaWNfY2xlYXJfbGVnYWN5X2ludHIoYWRhcHRlcikgPT0gSVJRX05PTkUpCisJCXJldHVybiBJUlFfTk9ORTsKKworZG9uZToKKwlhZGFwdGVyLT5kaWFnX2NudCsrOworCXFsY25pY19lbmFibGVfaW50KHNkc19yaW5nKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBxbGNuaWNfaW50cihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcgPSBkYXRhOworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IHNkc19yaW5nLT5hZGFwdGVyOworCisJaWYgKHFsY25pY19jbGVhcl9sZWdhY3lfaW50cihhZGFwdGVyKSA9PSBJUlFfTk9ORSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJbmFwaV9zY2hlZHVsZSgmc2RzX3JpbmctPm5hcGkpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgcWxjbmljX21zaV9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nICpzZHNfcmluZyA9IGRhdGE7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gc2RzX3JpbmctPmFkYXB0ZXI7CisKKwkvKiBjbGVhciBpbnRlcnJ1cHQgKi8KKwl3cml0ZWwoMHhmZmZmZmZmZiwgYWRhcHRlci0+dGd0X3N0YXR1c19yZWcpOworCisJbmFwaV9zY2hlZHVsZSgmc2RzX3JpbmctPm5hcGkpOworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IHFsY25pY19tc2l4X2ludHIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcWxjbmljX2hvc3Rfc2RzX3JpbmcgKnNkc19yaW5nID0gZGF0YTsKKworCW5hcGlfc2NoZWR1bGUoJnNkc19yaW5nLT5uYXBpKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgcWxjbmljX3Byb2Nlc3NfY21kX3Jpbmcoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBzd19jb25zdW1lciwgaHdfY29uc3VtZXI7CisJaW50IGNvdW50ID0gMCwgaTsKKwlzdHJ1Y3QgcWxjbmljX2NtZF9idWZmZXIgKmJ1ZmZlcjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwlzdHJ1Y3QgcWxjbmljX3NrYl9mcmFnICpmcmFnOworCWludCBkb25lOworCXN0cnVjdCBxbGNuaWNfaG9zdF90eF9yaW5nICp0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKKworCWlmICghc3Bpbl90cnlsb2NrKCZhZGFwdGVyLT50eF9jbGVhbl9sb2NrKSkKKwkJcmV0dXJuIDE7CisKKwlzd19jb25zdW1lciA9IHR4X3JpbmctPnN3X2NvbnN1bWVyOworCWh3X2NvbnN1bWVyID0gbGUzMl90b19jcHUoKih0eF9yaW5nLT5od19jb25zdW1lcikpOworCisJd2hpbGUgKHN3X2NvbnN1bWVyICE9IGh3X2NvbnN1bWVyKSB7CisJCWJ1ZmZlciA9ICZ0eF9yaW5nLT5jbWRfYnVmX2Fycltzd19jb25zdW1lcl07CisJCWlmIChidWZmZXItPnNrYikgeworCQkJZnJhZyA9ICZidWZmZXItPmZyYWdfYXJyYXlbMF07CisJCQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGZyYWctPmRtYSwgZnJhZy0+bGVuZ3RoLAorCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJCQlmcmFnLT5kbWEgPSAwVUxMOworCQkJZm9yIChpID0gMTsgaSA8IGJ1ZmZlci0+ZnJhZ19jb3VudDsgaSsrKSB7CisJCQkJZnJhZysrOworCQkJCXBjaV91bm1hcF9wYWdlKHBkZXYsIGZyYWctPmRtYSwgZnJhZy0+bGVuZ3RoLAorCQkJCQkgICAgICAgUENJX0RNQV9UT0RFVklDRSk7CisJCQkJZnJhZy0+ZG1hID0gMFVMTDsKKwkJCX0KKworCQkJYWRhcHRlci0+c3RhdHMueG1pdGZpbmlzaGVkKys7CisJCQlkZXZfa2ZyZWVfc2tiX2FueShidWZmZXItPnNrYik7CisJCQlidWZmZXItPnNrYiA9IE5VTEw7CisJCX0KKworCQlzd19jb25zdW1lciA9IGdldF9uZXh0X2luZGV4KHN3X2NvbnN1bWVyLCB0eF9yaW5nLT5udW1fZGVzYyk7CisJCWlmICgrK2NvdW50ID49IE1BWF9TVEFUVVNfSEFORExFKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGNvdW50ICYmIG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQl0eF9yaW5nLT5zd19jb25zdW1lciA9IHN3X2NvbnN1bWVyOworCisJCXNtcF9tYigpOworCisJCWlmIChuZXRpZl9xdWV1ZV9zdG9wcGVkKG5ldGRldikgJiYgbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CisJCQlfX25ldGlmX3R4X2xvY2sodHhfcmluZy0+dHhxLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCQkJaWYgKHFsY25pY190eF9hdmFpbCh0eF9yaW5nKSA+IFRYX1NUT1BfVEhSRVNIKSB7CisJCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOworCQkJCWFkYXB0ZXItPnR4X3RpbWVvX2NudCA9IDA7CisJCQl9CisJCQlfX25ldGlmX3R4X3VubG9jayh0eF9yaW5nLT50eHEpOworCQl9CisJfQorCS8qCisJICogSWYgZXZlcnl0aGluZyBpcyBmcmVlZCB1cCB0byBjb25zdW1lciB0aGVuIGNoZWNrIGlmIHRoZSByaW5nIGlzIGZ1bGwKKwkgKiBJZiB0aGUgcmluZyBpcyBmdWxsIHRoZW4gY2hlY2sgaWYgbW9yZSBuZWVkcyB0byBiZSBmcmVlZCBhbmQKKwkgKiBzY2hlZHVsZSB0aGUgY2FsbCBiYWNrIGFnYWluLgorCSAqCisJICogVGhpcyBoYXBwZW5zIHdoZW4gdGhlcmUgYXJlIDIgQ1BVcy4gT25lIGNvdWxkIGJlIGZyZWVpbmcgYW5kIHRoZQorCSAqIG90aGVyIGZpbGxpbmcgaXQuIElmIHRoZSByaW5nIGlzIGZ1bGwgd2hlbiB3ZSBnZXQgb3V0IG9mIGhlcmUgYW5kCisJICogdGhlIGNhcmQgaGFzIGFscmVhZHkgaW50ZXJydXB0ZWQgdGhlIGhvc3QgdGhlbiB0aGUgaG9zdCBjYW4gbWlzcyB0aGUKKwkgKiBpbnRlcnJ1cHQuCisJICoKKwkgKiBUaGVyZSBpcyBzdGlsbCBhIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uIGFuZCB0aGUgaG9zdCBjb3VsZCBtaXNzIGFuCisJICogaW50ZXJydXB0LiBUaGUgY2FyZCBoYXMgdG8gdGFrZSBjYXJlIG9mIHRoaXMuCisJICovCisJaHdfY29uc3VtZXIgPSBsZTMyX3RvX2NwdSgqKHR4X3JpbmctPmh3X2NvbnN1bWVyKSk7CisJZG9uZSA9IChzd19jb25zdW1lciA9PSBod19jb25zdW1lcik7CisJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnR4X2NsZWFuX2xvY2spOworCisJcmV0dXJuIGRvbmU7Cit9CisKK3N0YXRpYyBpbnQgcWxjbmljX3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQoreworCXN0cnVjdCBxbGNuaWNfaG9zdF9zZHNfcmluZyAqc2RzX3JpbmcgPQorCQljb250YWluZXJfb2YobmFwaSwgc3RydWN0IHFsY25pY19ob3N0X3Nkc19yaW5nLCBuYXBpKTsKKworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IHNkc19yaW5nLT5hZGFwdGVyOworCisJaW50IHR4X2NvbXBsZXRlOworCWludCB3b3JrX2RvbmU7CisKKwl0eF9jb21wbGV0ZSA9IHFsY25pY19wcm9jZXNzX2NtZF9yaW5nKGFkYXB0ZXIpOworCisJd29ya19kb25lID0gcWxjbmljX3Byb2Nlc3NfcmN2X3Jpbmcoc2RzX3JpbmcsIGJ1ZGdldCk7CisKKwlpZiAoKHdvcmtfZG9uZSA8IGJ1ZGdldCkgJiYgdHhfY29tcGxldGUpIHsKKwkJbmFwaV9jb21wbGV0ZSgmc2RzX3JpbmctPm5hcGkpOworCQlpZiAodGVzdF9iaXQoX19RTENOSUNfREVWX1VQLCAmYWRhcHRlci0+c3RhdGUpKQorCQkJcWxjbmljX2VuYWJsZV9pbnQoc2RzX3JpbmcpOworCX0KKworCXJldHVybiB3b3JrX2RvbmU7Cit9CisKKyNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUgorc3RhdGljIHZvaWQgcWxjbmljX3BvbGxfY29udHJvbGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJZGlzYWJsZV9pcnEoYWRhcHRlci0+aXJxKTsKKwlxbGNuaWNfaW50cihhZGFwdGVyLT5pcnEsIGFkYXB0ZXIpOworCWVuYWJsZV9pcnEoYWRhcHRlci0+aXJxKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZAorcWxjbmljX3NldF9kcnZfc3RhdGUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyLCBpbnQgc3RhdGUpCit7CisJdTMyICB2YWw7CisKKwlXQVJOX09OKHN0YXRlICE9IFFMQ05JQ19ERVZfTkVFRF9SRVNFVCAmJgorCQkJc3RhdGUgIT0gUUxDTklDX0RFVl9ORUVEX1FVSVNDRU5UKTsKKworCWlmIChxbGNuaWNfYXBpX2xvY2soYWRhcHRlcikpCisJCXJldHVybiA7CisKKwl2YWwgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfRFJWX1NUQVRFKTsKKworCWlmIChzdGF0ZSA9PSBRTENOSUNfREVWX05FRURfUkVTRVQpCisJCXZhbCB8PSAoKHUzMikweDEgPDwgKGFkYXB0ZXItPnBvcnRudW0gKiA0KSk7CisJZWxzZSBpZiAoc3RhdGUgPT0gUUxDTklDX0RFVl9ORUVEX1FVSVNDRU5UKQorCQl2YWwgfD0gKCh1MzIpMHgxIDw8ICgoYWRhcHRlci0+cG9ydG51bSAqIDQpICsgMSkpOworCisJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RSVl9TVEFURSwgdmFsKTsKKworCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOworfQorCitzdGF0aWMgaW50CitxbGNuaWNfY2xyX2Rydl9zdGF0ZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyICB2YWw7CisKKwlpZiAocWxjbmljX2FwaV9sb2NrKGFkYXB0ZXIpKQorCQlyZXR1cm4gLUVCVVNZOworCisJdmFsID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RSVl9TVEFURSk7CisJdmFsICY9IH4oKHUzMikweDMgPDwgKGFkYXB0ZXItPnBvcnRudW0gKiA0KSk7CisJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RSVl9TVEFURSwgdmFsKTsKKworCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfY2xyX2FsbF9kcnZfc3RhdGUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiAgdmFsOworCisJaWYgKHFsY25pY19hcGlfbG9jayhhZGFwdGVyKSkKKwkJZ290byBlcnI7CisKKwl2YWwgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfREVWX1JFRl9DT1VOVCk7CisJdmFsICY9IH4oKHUzMikweDEgPDwgKGFkYXB0ZXItPnBvcnRudW0gKiA0KSk7CisJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RFVl9SRUZfQ09VTlQsIHZhbCk7CisKKwlpZiAoISh2YWwgJiAweDExMTExMTExKSkKKwkJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RFVl9TVEFURSwgUUxDTklDX0RFVl9DT0xEKTsKKworCXZhbCA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0NSQl9EUlZfU1RBVEUpOworCXZhbCAmPSB+KCh1MzIpMHgzIDw8IChhZGFwdGVyLT5wb3J0bnVtICogNCkpOworCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0NSQl9EUlZfU1RBVEUsIHZhbCk7CisKKwlxbGNuaWNfYXBpX3VubG9jayhhZGFwdGVyKTsKK2VycjoKKwlhZGFwdGVyLT5md19mYWlsX2NudCA9IDA7CisJY2xlYXJfYml0KF9fUUxDTklDX1NUQVJUX0ZXLCAmYWRhcHRlci0+c3RhdGUpOworCWNsZWFyX2JpdChfX1FMQ05JQ19SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19jaGVja19kcnZfc3RhdGUoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWludCBhY3QsIHN0YXRlOworCisJc3RhdGUgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfRFJWX1NUQVRFKTsKKwlhY3QgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfREVWX1JFRl9DT1VOVCk7CisKKwlpZiAoKChzdGF0ZSAmIDB4MTExMTExMTEpID09IChhY3QgJiAweDExMTExMTExKSkgfHwKKwkJCSgoYWN0ICYgMHgxMTExMTExMSkgPT0gKChzdGF0ZSA+PiAxKSAmIDB4MTExMTExMTEpKSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorcWxjbmljX2Nhbl9zdGFydF9maXJtd2FyZShzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTMyIHZhbCwgcHJldl9zdGF0ZTsKKwlpbnQgY250ID0gMDsKKwlpbnQgcG9ydG51bSA9IGFkYXB0ZXItPnBvcnRudW07CisKKwlpZiAocWxjbmljX2FwaV9sb2NrKGFkYXB0ZXIpKQorCQlyZXR1cm4gLTE7CisKKwl2YWwgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfREVWX1JFRl9DT1VOVCk7CisJaWYgKCEodmFsICYgKChpbnQpMHgxIDw8IChwb3J0bnVtICogNCkpKSkgeworCQl2YWwgfD0gKCh1MzIpMHgxIDw8IChwb3J0bnVtICogNCkpOworCQlRTENXUjMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfREVWX1JFRl9DT1VOVCwgdmFsKTsKKwl9IGVsc2UgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChfX1FMQ05JQ19TVEFSVF9GVywgJmFkYXB0ZXItPnN0YXRlKSkgeworCQlnb3RvIHN0YXJ0X2Z3OworCX0KKworCXByZXZfc3RhdGUgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfREVWX1NUQVRFKTsKKworCXN3aXRjaCAocHJldl9zdGF0ZSkgeworCWNhc2UgUUxDTklDX0RFVl9DT0xEOgorc3RhcnRfZnc6CisJCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0NSQl9ERVZfU1RBVEUsIFFMQ05JQ19ERVZfSU5JVEFMSVpJTkcpOworCQlxbGNuaWNfYXBpX3VubG9jayhhZGFwdGVyKTsKKwkJcmV0dXJuIDE7CisKKwljYXNlIFFMQ05JQ19ERVZfUkVBRFk6CisJCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOworCQlyZXR1cm4gMDsKKworCWNhc2UgUUxDTklDX0RFVl9ORUVEX1JFU0VUOgorCQl2YWwgPSBRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfRFJWX1NUQVRFKTsKKwkJdmFsIHw9ICgodTMyKTB4MSA8PCAocG9ydG51bSAqIDQpKTsKKwkJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RSVl9TVEFURSwgdmFsKTsKKwkJYnJlYWs7CisKKwljYXNlIFFMQ05JQ19ERVZfTkVFRF9RVUlTQ0VOVDoKKwkJdmFsID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RSVl9TVEFURSk7CisJCXZhbCB8PSAoKHUzMikweDEgPDwgKChwb3J0bnVtICogNCkgKyAxKSk7CisJCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0NSQl9EUlZfU1RBVEUsIHZhbCk7CisJCWJyZWFrOworCisJY2FzZSBRTENOSUNfREVWX0ZBSUxFRDoKKwkJcWxjbmljX2FwaV91bmxvY2soYWRhcHRlcik7CisJCXJldHVybiAtMTsKKwl9CisKKwlxbGNuaWNfYXBpX3VubG9jayhhZGFwdGVyKTsKKwltc2xlZXAoMTAwMCk7CisJd2hpbGUgKChRTENSRDMyKGFkYXB0ZXIsIFFMQ05JQ19DUkJfREVWX1NUQVRFKSAhPSBRTENOSUNfREVWX1JFQURZKSAmJgorCQkJKytjbnQgPCAyMCkKKwkJbXNsZWVwKDEwMDApOworCisJaWYgKGNudCA+PSAyMCkKKwkJcmV0dXJuIC0xOworCisJaWYgKHFsY25pY19hcGlfbG9jayhhZGFwdGVyKSkKKwkJcmV0dXJuIC0xOworCisJdmFsID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RSVl9TVEFURSk7CisJdmFsICY9IH4oKHUzMikweDMgPDwgKHBvcnRudW0gKiA0KSk7CisJUUxDV1IzMihhZGFwdGVyLCBRTENOSUNfQ1JCX0RSVl9TVEFURSwgdmFsKTsKKworCXFsY25pY19hcGlfdW5sb2NrKGFkYXB0ZXIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfZndpbml0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJc3RydWN0IHFsY25pY19hZGFwdGVyLCBmd193b3JrLndvcmspOworCWludCBkZXZfc3RhdGU7CisKKwlpZiAoKythZGFwdGVyLT5md193YWl0X2NudCA+IEZXX1BPTExfVEhSRVNIKQorCQlnb3RvIGVycl9yZXQ7CisKKwlpZiAodGVzdF9iaXQoX19RTENOSUNfU1RBUlRfRlcsICZhZGFwdGVyLT5zdGF0ZSkpIHsKKworCQlpZiAocWxjbmljX2NoZWNrX2Rydl9zdGF0ZShhZGFwdGVyKSkgeworCQkJcWxjbmljX3NjaGVkdWxlX3dvcmsoYWRhcHRlciwKKwkJCQkJcWxjbmljX2Z3aW5pdF93b3JrLCBGV19QT0xMX0RFTEFZKTsKKwkJCXJldHVybjsKKwkJfQorCisJCWlmICghcWxjbmljX3N0YXJ0X2Zpcm13YXJlKGFkYXB0ZXIpKSB7CisJCQlxbGNuaWNfc2NoZWR1bGVfd29yayhhZGFwdGVyLCBxbGNuaWNfYXR0YWNoX3dvcmssIDApOworCQkJcmV0dXJuOworCQl9CisKKwkJZ290byBlcnJfcmV0OworCX0KKworCWRldl9zdGF0ZSA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0NSQl9ERVZfU1RBVEUpOworCXN3aXRjaCAoZGV2X3N0YXRlKSB7CisJY2FzZSBRTENOSUNfREVWX1JFQURZOgorCQlpZiAoIXFsY25pY19zdGFydF9maXJtd2FyZShhZGFwdGVyKSkgeworCQkJcWxjbmljX3NjaGVkdWxlX3dvcmsoYWRhcHRlciwgcWxjbmljX2F0dGFjaF93b3JrLCAwKTsKKwkJCXJldHVybjsKKwkJfQorCWNhc2UgUUxDTklDX0RFVl9GQUlMRUQ6CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcWxjbmljX3NjaGVkdWxlX3dvcmsoYWRhcHRlciwKKwkJCXFsY25pY19md2luaXRfd29yaywgMiAqIEZXX1BPTExfREVMQVkpOworCQlyZXR1cm47CisJfQorCitlcnJfcmV0OgorCXFsY25pY19jbHJfYWxsX2Rydl9zdGF0ZShhZGFwdGVyKTsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19kZXRhY2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCisJCQlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIsIGZ3X3dvcmsud29yayk7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwl1MzIgc3RhdHVzOworCisJbmV0aWZfZGV2aWNlX2RldGFjaChuZXRkZXYpOworCisJcWxjbmljX2Rvd24oYWRhcHRlciwgbmV0ZGV2KTsKKworCXJ0bmxfbG9jaygpOworCXFsY25pY19kZXRhY2goYWRhcHRlcik7CisJcnRubF91bmxvY2soKTsKKworCXN0YXR1cyA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX1BFR19IQUxUX1NUQVRVUzEpOworCisJaWYgKHN0YXR1cyAmIFFMQ05JQ19SQ09ERV9GQVRBTF9FUlJPUikKKwkJZ290byBlcnJfcmV0OworCisJaWYgKGFkYXB0ZXItPnRlbXAgPT0gUUxDTklDX1RFTVBfUEFOSUMpCisJCWdvdG8gZXJyX3JldDsKKworCXFsY25pY19zZXRfZHJ2X3N0YXRlKGFkYXB0ZXIsIGFkYXB0ZXItPmRldl9zdGF0ZSk7CisKKwlhZGFwdGVyLT5md193YWl0X2NudCA9IDA7CisKKwlxbGNuaWNfc2NoZWR1bGVfd29yayhhZGFwdGVyLCBxbGNuaWNfZndpbml0X3dvcmssIEZXX1BPTExfREVMQVkpOworCisJcmV0dXJuOworCitlcnJfcmV0OgorCXFsY25pY19jbHJfYWxsX2Rydl9zdGF0ZShhZGFwdGVyKTsKKworfQorCitzdGF0aWMgdm9pZAorcWxjbmljX2Rldl9yZXF1ZXN0X3Jlc2V0KHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcikKK3sKKwl1MzIgc3RhdGU7CisKKwlpZiAocWxjbmljX2FwaV9sb2NrKGFkYXB0ZXIpKQorCQlyZXR1cm47CisKKwlzdGF0ZSA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0NSQl9ERVZfU1RBVEUpOworCisJaWYgKHN0YXRlICE9IFFMQ05JQ19ERVZfSU5JVEFMSVpJTkcgJiYgc3RhdGUgIT0gUUxDTklDX0RFVl9ORUVEX1JFU0VUKSB7CisJCVFMQ1dSMzIoYWRhcHRlciwgUUxDTklDX0NSQl9ERVZfU1RBVEUsIFFMQ05JQ19ERVZfTkVFRF9SRVNFVCk7CisJCXNldF9iaXQoX19RTENOSUNfU1RBUlRfRlcsICZhZGFwdGVyLT5zdGF0ZSk7CisJfQorCisJcWxjbmljX2FwaV91bmxvY2soYWRhcHRlcik7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfc2NoZWR1bGVfd29yayhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCXdvcmtfZnVuY190IGZ1bmMsIGludCBkZWxheSkKK3sKKwlJTklUX0RFTEFZRURfV09SSygmYWRhcHRlci0+Zndfd29yaywgZnVuYyk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZhZGFwdGVyLT5md193b3JrLCByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKGRlbGF5KSk7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfY2FuY2VsX2Z3X3dvcmsoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJbXNsZWVwKDEwKTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYWRhcHRlci0+Zndfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfYXR0YWNoX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IGNvbnRhaW5lcl9vZih3b3JrLAorCQkJCXN0cnVjdCBxbGNuaWNfYWRhcHRlciwgZndfd29yay53b3JrKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCBlcnI7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CisJCWVyciA9IHFsY25pY19hdHRhY2goYWRhcHRlcik7CisJCWlmIChlcnIpCisJCQlnb3RvIGRvbmU7CisKKwkJZXJyID0gcWxjbmljX3VwKGFkYXB0ZXIsIG5ldGRldik7CisJCWlmIChlcnIpIHsKKwkJCXFsY25pY19kZXRhY2goYWRhcHRlcik7CisJCQlnb3RvIGRvbmU7CisJCX0KKworCQlxbGNuaWNfY29uZmlnX2luZGV2X2FkZHIobmV0ZGV2LCBORVRERVZfVVApOworCX0KKworCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKKworZG9uZToKKwlhZGFwdGVyLT5md19mYWlsX2NudCA9IDA7CisJY2xlYXJfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKworCWlmICghcWxjbmljX2Nscl9kcnZfc3RhdGUoYWRhcHRlcikpCisJCXFsY25pY19zY2hlZHVsZV93b3JrKGFkYXB0ZXIsIHFsY25pY19md19wb2xsX3dvcmssCisJCQkJCQkJRldfUE9MTF9ERUxBWSk7Cit9CisKK3N0YXRpYyBpbnQKK3FsY25pY19jaGVja19oZWFsdGgoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXUzMiBzdGF0ZSA9IDAsIGhlYXJ0Yml0OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwlpZiAocWxjbmljX2NoZWNrX3RlbXAoYWRhcHRlcikpCisJCWdvdG8gZGV0YWNoOworCisJaWYgKGFkYXB0ZXItPm5lZWRfZndfcmVzZXQpIHsKKwkJcWxjbmljX2Rldl9yZXF1ZXN0X3Jlc2V0KGFkYXB0ZXIpOworCQlnb3RvIGRldGFjaDsKKwl9CisKKwlzdGF0ZSA9IFFMQ1JEMzIoYWRhcHRlciwgUUxDTklDX0NSQl9ERVZfU1RBVEUpOworCWlmIChzdGF0ZSA9PSBRTENOSUNfREVWX05FRURfUkVTRVQgfHwgc3RhdGUgPT0gUUxDTklDX0RFVl9ORUVEX1FVSVNDRU5UKQorCQlhZGFwdGVyLT5uZWVkX2Z3X3Jlc2V0ID0gMTsKKworCWhlYXJ0Yml0ID0gUUxDUkQzMihhZGFwdGVyLCBRTENOSUNfUEVHX0FMSVZFX0NPVU5URVIpOworCWlmIChoZWFydGJpdCAhPSBhZGFwdGVyLT5oZWFydGJpdCkgeworCQlhZGFwdGVyLT5oZWFydGJpdCA9IGhlYXJ0Yml0OworCQlhZGFwdGVyLT5md19mYWlsX2NudCA9IDA7CisJCWlmIChhZGFwdGVyLT5uZWVkX2Z3X3Jlc2V0KQorCQkJZ290byBkZXRhY2g7CisJCXJldHVybiAwOworCX0KKworCWlmICgrK2FkYXB0ZXItPmZ3X2ZhaWxfY250IDwgRldfRkFJTF9USFJFU0gpCisJCXJldHVybiAwOworCisJcWxjbmljX2Rldl9yZXF1ZXN0X3Jlc2V0KGFkYXB0ZXIpOworCisJY2xlYXJfYml0KF9fUUxDTklDX0ZXX0FUVEFDSEVELCAmYWRhcHRlci0+c3RhdGUpOworCisJZGV2X2luZm8oJm5ldGRldi0+ZGV2LCAiZmlybXdhcmUgaGFuZyBkZXRlY3RlZFxuIik7CisKK2RldGFjaDoKKwlhZGFwdGVyLT5kZXZfc3RhdGUgPSAoc3RhdGUgPT0gUUxDTklDX0RFVl9ORUVEX1FVSVNDRU5UKSA/IHN0YXRlIDoKKwkJUUxDTklDX0RFVl9ORUVEX1JFU0VUOworCisJaWYgKChhdXRvX2Z3X3Jlc2V0ID09IEFVVE9fRldfUkVTRVRfRU5BQkxFRCkgJiYKKwkJCSF0ZXN0X2FuZF9zZXRfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJcWxjbmljX3NjaGVkdWxlX3dvcmsoYWRhcHRlciwgcWxjbmljX2RldGFjaF93b3JrLCAwKTsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZAorcWxjbmljX2Z3X3BvbGxfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gY29udGFpbmVyX29mKHdvcmssCisJCQkJc3RydWN0IHFsY25pY19hZGFwdGVyLCBmd193b3JrLndvcmspOworCisJaWYgKHRlc3RfYml0KF9fUUxDTklDX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkKKwkJZ290byByZXNjaGVkdWxlOworCisKKwlpZiAocWxjbmljX2NoZWNrX2hlYWx0aChhZGFwdGVyKSkKKwkJcmV0dXJuOworCityZXNjaGVkdWxlOgorCXFsY25pY19zY2hlZHVsZV93b3JrKGFkYXB0ZXIsIHFsY25pY19md19wb2xsX3dvcmssIEZXX1BPTExfREVMQVkpOworfQorCitzdGF0aWMgc3NpemVfdAorcWxjbmljX3N0b3JlX2JyaWRnZWRfbW9kZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBuZXc7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlpZiAoIShhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBRTENOSUNfRldfQ0FQQUJJTElUWV9CREcpKQorCQlnb3RvIGVycl9vdXQ7CisKKwlpZiAoYWRhcHRlci0+aXNfdXAgIT0gUUxDTklDX0FEQVBURVJfVVBfTUFHSUMpCisJCWdvdG8gZXJyX291dDsKKworCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDIsICZuZXcpKQorCQlnb3RvIGVycl9vdXQ7CisKKwlpZiAoIXFsY25pY19jb25maWdfYnJpZGdlZF9tb2RlKGFkYXB0ZXIsICEhbmV3KSkKKwkJcmV0ID0gbGVuOworCitlcnJfb3V0OgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitxbGNuaWNfc2hvd19icmlkZ2VkX21vZGUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBicmlkZ2VkX21vZGUgPSAwOworCisJaWYgKGFkYXB0ZXItPmNhcGFiaWxpdGllcyAmIFFMQ05JQ19GV19DQVBBQklMSVRZX0JERykKKwkJYnJpZGdlZF9tb2RlID0gISEoYWRhcHRlci0+ZmxhZ3MgJiBRTENOSUNfQlJJREdFX0VOQUJMRUQpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGJyaWRnZWRfbW9kZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9icmlkZ2VkX21vZGUgPSB7CisgICAgICAgLmF0dHIgPSB7Lm5hbWUgPSAiYnJpZGdlZF9tb2RlIiwgLm1vZGUgPSAoU19JUlVHTyB8IFNfSVdVU1IpfSwKKyAgICAgICAuc2hvdyA9IHFsY25pY19zaG93X2JyaWRnZWRfbW9kZSwKKyAgICAgICAuc3RvcmUgPSBxbGNuaWNfc3RvcmVfYnJpZGdlZF9tb2RlLAorfTsKKworc3RhdGljIHNzaXplX3QKK3FsY25pY19zdG9yZV9kaWFnX21vZGUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGxvbmcgbmV3OworCisJaWYgKHN0cmljdF9zdHJ0b3VsKGJ1ZiwgMiwgJm5ldykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCEhbmV3ICE9ICEhKGFkYXB0ZXItPmZsYWdzICYgUUxDTklDX0RJQUdfRU5BQkxFRCkpCisJCWFkYXB0ZXItPmZsYWdzIF49IFFMQ05JQ19ESUFHX0VOQUJMRUQ7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdAorcWxjbmljX3Nob3dfZGlhZ19tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLAorCQkJISEoYWRhcHRlci0+ZmxhZ3MgJiBRTENOSUNfRElBR19FTkFCTEVEKSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl9kaWFnX21vZGUgPSB7CisJLmF0dHIgPSB7Lm5hbWUgPSAiZGlhZ19tb2RlIiwgLm1vZGUgPSAoU19JUlVHTyB8IFNfSVdVU1IpfSwKKwkuc2hvdyA9IHFsY25pY19zaG93X2RpYWdfbW9kZSwKKwkuc3RvcmUgPSBxbGNuaWNfc3RvcmVfZGlhZ19tb2RlLAorfTsKKworc3RhdGljIGludAorcWxjbmljX3N5c2ZzX3ZhbGlkYXRlX2NyYihzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCWxvZmZfdCBvZmZzZXQsIHNpemVfdCBzaXplKQoreworCWlmICghKGFkYXB0ZXItPmZsYWdzICYgUUxDTklDX0RJQUdfRU5BQkxFRCkpCisJCXJldHVybiAtRUlPOworCisJaWYgKChzaXplICE9IDQpIHx8IChvZmZzZXQgJiAweDMpKQorCQlyZXR1cm4gIC1FSU5WQUw7CisKKwlpZiAob2Zmc2V0IDwgUUxDTklDX1BDSV9DUkJTUEFDRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3QKK3FsY25pY19zeXNmc19yZWFkX2NyYihzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGJpbl9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZiwgbG9mZl90IG9mZnNldCwgc2l6ZV90IHNpemUpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXUzMiBkYXRhOworCWludCByZXQ7CisKKwlyZXQgPSBxbGNuaWNfc3lzZnNfdmFsaWRhdGVfY3JiKGFkYXB0ZXIsIG9mZnNldCwgc2l6ZSk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJZGF0YSA9IFFMQ1JEMzIoYWRhcHRlciwgb2Zmc2V0KTsKKwltZW1jcHkoYnVmLCAmZGF0YSwgc2l6ZSk7CisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitxbGNuaWNfc3lzZnNfd3JpdGVfY3JiKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmLCBsb2ZmX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdTMyIGRhdGE7CisJaW50IHJldDsKKworCXJldCA9IHFsY25pY19zeXNmc192YWxpZGF0ZV9jcmIoYWRhcHRlciwgb2Zmc2V0LCBzaXplKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwltZW1jcHkoJmRhdGEsIGJ1Ziwgc2l6ZSk7CisJUUxDV1IzMihhZGFwdGVyLCBvZmZzZXQsIGRhdGEpOworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgaW50CitxbGNuaWNfc3lzZnNfdmFsaWRhdGVfbWVtKHN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlciwKKwkJbG9mZl90IG9mZnNldCwgc2l6ZV90IHNpemUpCit7CisJaWYgKCEoYWRhcHRlci0+ZmxhZ3MgJiBRTENOSUNfRElBR19FTkFCTEVEKSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoKHNpemUgIT0gOCkgfHwgKG9mZnNldCAmIDB4NykpCisJCXJldHVybiAgLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdAorcWxjbmljX3N5c2ZzX3JlYWRfbWVtKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY2hhciAqYnVmLCBsb2ZmX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yoa29iaiwgc3RydWN0IGRldmljZSwga29iaik7CisJc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdTY0IGRhdGE7CisJaW50IHJldDsKKworCXJldCA9IHFsY25pY19zeXNmc192YWxpZGF0ZV9tZW0oYWRhcHRlciwgb2Zmc2V0LCBzaXplKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwlpZiAocWxjbmljX3BjaV9tZW1fcmVhZF8yTShhZGFwdGVyLCBvZmZzZXQsICZkYXRhKSkKKwkJcmV0dXJuIC1FSU87CisKKwltZW1jcHkoYnVmLCAmZGF0YSwgc2l6ZSk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworc3RhdGljIHNzaXplX3QKK3FsY25pY19zeXNmc193cml0ZV9tZW0oc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCBzaXplKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGNvbnRhaW5lcl9vZihrb2JqLCBzdHJ1Y3QgZGV2aWNlLCBrb2JqKTsKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1NjQgZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gcWxjbmljX3N5c2ZzX3ZhbGlkYXRlX21lbShhZGFwdGVyLCBvZmZzZXQsIHNpemUpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCW1lbWNweSgmZGF0YSwgYnVmLCBzaXplKTsKKworCWlmIChxbGNuaWNfcGNpX21lbV93cml0ZV8yTShhZGFwdGVyLCBvZmZzZXQsIGRhdGEpKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiBzaXplOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBiaW5fYXR0cl9jcmIgPSB7CisJLmF0dHIgPSB7Lm5hbWUgPSAiY3JiIiwgLm1vZGUgPSAoU19JUlVHTyB8IFNfSVdVU1IpfSwKKwkuc2l6ZSA9IDAsCisJLnJlYWQgPSBxbGNuaWNfc3lzZnNfcmVhZF9jcmIsCisJLndyaXRlID0gcWxjbmljX3N5c2ZzX3dyaXRlX2NyYiwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSBiaW5fYXR0cl9tZW0gPSB7CisJLmF0dHIgPSB7Lm5hbWUgPSAibWVtIiwgLm1vZGUgPSAoU19JUlVHTyB8IFNfSVdVU1IpfSwKKwkuc2l6ZSA9IDAsCisJLnJlYWQgPSBxbGNuaWNfc3lzZnNfcmVhZF9tZW0sCisJLndyaXRlID0gcWxjbmljX3N5c2ZzX3dyaXRlX21lbSwKK307CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfY3JlYXRlX3N5c2ZzX2VudHJpZXMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhZGFwdGVyLT5wZGV2LT5kZXY7CisKKwlpZiAoYWRhcHRlci0+Y2FwYWJpbGl0aWVzICYgUUxDTklDX0ZXX0NBUEFCSUxJVFlfQkRHKQorCQlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2JyaWRnZWRfbW9kZSkpCisJCQlkZXZfd2FybihkZXYsCisJCQkJImZhaWxlZCB0byBjcmVhdGUgYnJpZGdlZF9tb2RlIHN5c2ZzIGVudHJ5XG4iKTsKK30KKworc3RhdGljIHZvaWQKK3FsY25pY19yZW1vdmVfc3lzZnNfZW50cmllcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFkYXB0ZXItPnBkZXYtPmRldjsKKworCWlmIChhZGFwdGVyLT5jYXBhYmlsaXRpZXMgJiBRTENOSUNfRldfQ0FQQUJJTElUWV9CREcpCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9icmlkZ2VkX21vZGUpOworfQorCitzdGF0aWMgdm9pZAorcWxjbmljX2NyZWF0ZV9kaWFnX2VudHJpZXMoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZhZGFwdGVyLT5wZGV2LT5kZXY7CisKKwlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2RpYWdfbW9kZSkpCisJCWRldl9pbmZvKGRldiwgImZhaWxlZCB0byBjcmVhdGUgZGlhZ19tb2RlIHN5c2ZzIGVudHJ5XG4iKTsKKwlpZiAoZGV2aWNlX2NyZWF0ZV9iaW5fZmlsZShkZXYsICZiaW5fYXR0cl9jcmIpKQorCQlkZXZfaW5mbyhkZXYsICJmYWlsZWQgdG8gY3JlYXRlIGNyYiBzeXNmcyBlbnRyeVxuIik7CisJaWYgKGRldmljZV9jcmVhdGVfYmluX2ZpbGUoZGV2LCAmYmluX2F0dHJfbWVtKSkKKwkJZGV2X2luZm8oZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBtZW0gc3lzZnMgZW50cnlcbiIpOworfQorCisKK3N0YXRpYyB2b2lkCitxbGNuaWNfcmVtb3ZlX2RpYWdfZW50cmllcyhzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmFkYXB0ZXItPnBkZXYtPmRldjsKKworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9kaWFnX21vZGUpOworCWRldmljZV9yZW1vdmVfYmluX2ZpbGUoZGV2LCAmYmluX2F0dHJfY3JiKTsKKwlkZXZpY2VfcmVtb3ZlX2Jpbl9maWxlKGRldiwgJmJpbl9hdHRyX21lbSk7Cit9CisKKyNpZmRlZiBDT05GSUdfSU5FVAorCisjZGVmaW5lIGlzX3FsY25pY19uZXRkZXYoZGV2KSAoZGV2LT5uZXRkZXZfb3BzID09ICZxbGNuaWNfbmV0ZGV2X29wcykKKworc3RhdGljIGludAorcWxjbmljX2Rlc3RpcF9zdXBwb3J0ZWQoc3RydWN0IHFsY25pY19hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5haHcuY3V0X3Rocm91Z2gpCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkCitxbGNuaWNfY29uZmlnX2luZGV2X2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBldmVudCkKK3sKKwlzdHJ1Y3QgaW5fZGV2aWNlICppbmRldjsKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJaWYgKCFxbGNuaWNfZGVzdGlwX3N1cHBvcnRlZChhZGFwdGVyKSkKKwkJcmV0dXJuOworCisJaW5kZXYgPSBpbl9kZXZfZ2V0KGRldik7CisJaWYgKCFpbmRldikKKwkJcmV0dXJuOworCisJZm9yX2lmYShpbmRldikgeworCQlzd2l0Y2ggKGV2ZW50KSB7CisJCWNhc2UgTkVUREVWX1VQOgorCQkJcWxjbmljX2NvbmZpZ19pcGFkZHIoYWRhcHRlciwKKwkJCQkJaWZhLT5pZmFfYWRkcmVzcywgUUxDTklDX0lQX1VQKTsKKwkJCWJyZWFrOworCQljYXNlIE5FVERFVl9ET1dOOgorCQkJcWxjbmljX2NvbmZpZ19pcGFkZHIoYWRhcHRlciwKKwkJCQkJaWZhLT5pZmFfYWRkcmVzcywgUUxDTklDX0lQX0RPV04pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0gZW5kZm9yX2lmYShpbmRldik7CisKKwlpbl9kZXZfcHV0KGluZGV2KTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgcWxjbmljX25ldGRldl9ldmVudChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCisJCQkJIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgcWxjbmljX2FkYXB0ZXIgKmFkYXB0ZXI7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXB0cjsKKworcmVjaGVjazoKKwlpZiAoZGV2ID09IE5VTEwpCisJCWdvdG8gZG9uZTsKKworCWlmIChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfODAyXzFRX1ZMQU4pIHsKKwkJZGV2ID0gdmxhbl9kZXZfcmVhbF9kZXYoZGV2KTsKKwkJZ290byByZWNoZWNrOworCX0KKworCWlmICghaXNfcWxjbmljX25ldGRldihkZXYpKQorCQlnb3RvIGRvbmU7CisKKwlhZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICghYWRhcHRlcikKKwkJZ290byBkb25lOworCisJaWYgKGFkYXB0ZXItPmlzX3VwICE9IFFMQ05JQ19BREFQVEVSX1VQX01BR0lDKQorCQlnb3RvIGRvbmU7CisKKwlxbGNuaWNfY29uZmlnX2luZGV2X2FkZHIoZGV2LCBldmVudCk7Citkb25lOgorCXJldHVybiBOT1RJRllfRE9ORTsKK30KKworc3RhdGljIGludAorcWxjbmljX2luZXRhZGRyX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKKwkJdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRyKQoreworCXN0cnVjdCBxbGNuaWNfYWRhcHRlciAqYWRhcHRlcjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCisJc3RydWN0IGluX2lmYWRkciAqaWZhID0gKHN0cnVjdCBpbl9pZmFkZHIgKilwdHI7CisKKwlkZXYgPSBpZmEtPmlmYV9kZXYgPyBpZmEtPmlmYV9kZXYtPmRldiA6IE5VTEw7CisKK3JlY2hlY2s6CisJaWYgKGRldiA9PSBOVUxMIHx8ICFuZXRpZl9ydW5uaW5nKGRldikpCisJCWdvdG8gZG9uZTsKKworCWlmIChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfODAyXzFRX1ZMQU4pIHsKKwkJZGV2ID0gdmxhbl9kZXZfcmVhbF9kZXYoZGV2KTsKKwkJZ290byByZWNoZWNrOworCX0KKworCWlmICghaXNfcWxjbmljX25ldGRldihkZXYpKQorCQlnb3RvIGRvbmU7CisKKwlhZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWlmICghYWRhcHRlciB8fCAhcWxjbmljX2Rlc3RpcF9zdXBwb3J0ZWQoYWRhcHRlcikpCisJCWdvdG8gZG9uZTsKKworCWlmIChhZGFwdGVyLT5pc191cCAhPSBRTENOSUNfQURBUFRFUl9VUF9NQUdJQykKKwkJZ290byBkb25lOworCisJc3dpdGNoIChldmVudCkgeworCWNhc2UgTkVUREVWX1VQOgorCQlxbGNuaWNfY29uZmlnX2lwYWRkcihhZGFwdGVyLCBpZmEtPmlmYV9hZGRyZXNzLCBRTENOSUNfSVBfVVApOworCQlicmVhazsKKwljYXNlIE5FVERFVl9ET1dOOgorCQlxbGNuaWNfY29uZmlnX2lwYWRkcihhZGFwdGVyLCBpZmEtPmlmYV9hZGRyZXNzLCBRTENOSUNfSVBfRE9XTik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworZG9uZToKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJcWxjbmljX25ldGRldl9jYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHFsY25pY19uZXRkZXZfZXZlbnQsCit9OworCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHFsY25pY19pbmV0YWRkcl9jYiA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHFsY25pY19pbmV0YWRkcl9ldmVudCwKK307CisjZWxzZQorc3RhdGljIHZvaWQKK3FsY25pY19jb25maWdfaW5kZXZfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGV2ZW50KQoreyB9CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHFsY25pY19kcml2ZXIgPSB7CisJLm5hbWUgPSBxbGNuaWNfZHJpdmVyX25hbWUsCisJLmlkX3RhYmxlID0gcWxjbmljX3BjaV90YmwsCisJLnByb2JlID0gcWxjbmljX3Byb2JlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChxbGNuaWNfcmVtb3ZlKSwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IHFsY25pY19zdXNwZW5kLAorCS5yZXN1bWUgPSBxbGNuaWNfcmVzdW1lLAorI2VuZGlmCisJLnNodXRkb3duID0gcWxjbmljX3NodXRkb3duCit9OworCitzdGF0aWMgaW50IF9faW5pdCBxbGNuaWNfaW5pdF9tb2R1bGUodm9pZCkKK3sKKworCXByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBxbGNuaWNfZHJpdmVyX3N0cmluZyk7CisKKyNpZmRlZiBDT05GSUdfSU5FVAorCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmcWxjbmljX25ldGRldl9jYik7CisJcmVnaXN0ZXJfaW5ldGFkZHJfbm90aWZpZXIoJnFsY25pY19pbmV0YWRkcl9jYik7CisjZW5kaWYKKworCisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnFsY25pY19kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChxbGNuaWNfaW5pdF9tb2R1bGUpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgcWxjbmljX2V4aXRfbW9kdWxlKHZvaWQpCit7CisKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnFsY25pY19kcml2ZXIpOworCisjaWZkZWYgQ09ORklHX0lORVQKKwl1bnJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKCZxbGNuaWNfaW5ldGFkZHJfY2IpOworCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZxbGNuaWNfbmV0ZGV2X2NiKTsKKyNlbmRpZgorfQorCittb2R1bGVfZXhpdChxbGNuaWNfZXhpdF9tb2R1bGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlLmggYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaAppbmRleCA4NjJjMWFhLi44Yjc0MmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaAorKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2UuaApAQCAtMTksMTQgKzE5LDYgQEAKICNkZWZpbmUgRFJWX1ZFUlNJT04JInYxLjAwLjAwLjIzLjAwLjAwLTAxIgogCiAjZGVmaW5lIFBGWCAicWxnZTogIgotI2RlZmluZSBRUFJJTlRLKHFkZXYsIG5sZXZlbCwga2xldmVsLCBmbXQsIGFyZ3MuLi4pICAgICBcCi0gICAgICAgZG8geyAgICAgICBcCi0JaWYgKCEoKHFkZXYpLT5tc2dfZW5hYmxlICYgTkVUSUZfTVNHXyMjbmxldmVsKSkJCVwKLQkJOwkJCQkJCVwKLQllbHNlCQkJCQkJCVwKLQkJZGV2X3ByaW50ayhLRVJOXyMja2xldmVsLCAmKChxZGV2KS0+cGRldi0+ZGV2KSwJXAotCQkJICAgIiVzOiAiIGZtdCwgX19mdW5jX18sICMjYXJncyk7ICBcCi0gICAgICAgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBXUV9BRERSX0FMSUdOCTB4MwkvKiA0IGJ5dGUgYWxpZ25tZW50ICovCiAKQEAgLTU0LDEyICs0Niw4IEBACiAjZGVmaW5lIFJYX1JJTkdfU0hBRE9XX1NQQUNFCShzaXplb2YodTY0KSArIFwKIAkJTUFYX0RCX1BBR0VTX1BFUl9CUShOVU1fU01BTExfQlVGRkVSUykgKiBzaXplb2YodTY0KSArIFwKIAkJTUFYX0RCX1BBR0VTX1BFUl9CUShOVU1fTEFSR0VfQlVGRkVSUykgKiBzaXplb2YodTY0KSkKLSNkZWZpbmUgU01BTExfQlVGRkVSX1NJWkUgNTEyCi0jZGVmaW5lIFNNQUxMX0JVRl9NQVBfU0laRSAoU01BTExfQlVGRkVSX1NJWkUgLyAyKQogI2RlZmluZSBMQVJHRV9CVUZGRVJfTUFYX1NJWkUgODE5MgogI2RlZmluZSBMQVJHRV9CVUZGRVJfTUlOX1NJWkUgMjA0OAotI2RlZmluZSBNQVhfU1BMSVRfU0laRSAxMDIzCi0jZGVmaW5lIFFMR0VfU0JfUEFEIDMyCiAKICNkZWZpbmUgTUFYX0NRIDEyOAogI2RlZmluZSBERkxUX0NPQUxFU0NFX1dBSVQgMTAwCS8qIDEwMCB1c2VjIHdhaXQgZm9yIGNvYWxlc2NpbmcgKi8KQEAgLTc5LDE1ICs2Nyw0MyBAQAogI2RlZmluZSBUWF9ERVNDX1BFUl9PQUwgMAogI2VuZGlmCiAKKy8qIFdvcmQgc2hpZnRpbmcgZm9yIGNvbnZlcnRpbmcgNjQtYml0CisgKiBhZGRyZXNzIHRvIGEgc2VyaWVzIG9mIDE2LWJpdCB3b3Jkcy4KKyAqIFRoaXMgaXMgdXNlZCBmb3Igc29tZSBNUEkgZmlybXdhcmUKKyAqIG1haWxib3ggY29tbWFuZHMuCisgKi8KKyNkZWZpbmUgTFNXKHgpICAoKHUxNikoeCkpCisjZGVmaW5lIE1TVyh4KSAgKCh1MTYpKCh1MzIpKHgpID4+IDE2KSkKKyNkZWZpbmUgTFNEKHgpICAoKHUzMikoKHU2NCkoeCkpKQorI2RlZmluZSBNU0QoeCkgICgodTMyKSgoKCh1NjQpKHgpKSA+PiAzMikpKQorCiAvKiBNUEkgdGVzdCByZWdpc3RlciBkZWZpbml0aW9ucy4gVGhpcyByZWdpc3RlcgogICogaXMgdXNlZCBmb3IgZGV0ZXJtaW5pbmcgYWx0ZXJuYXRlIE5JQyBmdW5jdGlvbidzCiAgKiBQQ0ktPmZ1bmMgbnVtYmVyLgogICovCiBlbnVtIHsKIAlNUElfVEVTVF9GVU5DX1BPUlRfQ0ZHID0gMHgxMDAyLAotCU1QSV9URVNUX05JQzFfRlVOQ19TSElGVCA9IDEsCi0JTVBJX1RFU1RfTklDMl9GVU5DX1NISUZUID0gNSwKKwlNUElfVEVTVF9GVU5DX1BSQl9DVEwgPSAweDEwMGUsCisJCU1QSV9URVNUX0ZVTkNfUFJCX0VOID0gMHgxOGEyMDAwMCwKKwlNUElfVEVTVF9GVU5DX1JTVF9TVFMgPSAweDEwMGEsCisJCU1QSV9URVNUX0ZVTkNfUlNUX0ZSQyA9IDB4MDAwMDAwMDMsCiAJTVBJX1RFU1RfTklDX0ZVTkNfTUFTSyA9IDB4MDAwMDAwMDcsCisJTVBJX1RFU1RfTklDMV9GVU5DVElPTl9FTkFCTEUgPSAoMSA8PCAwKSwKKwlNUElfVEVTVF9OSUMxX0ZVTkNUSU9OX01BU0sgPSAweDAwMDAwMDBlLAorCU1QSV9URVNUX05JQzFfRlVOQ19TSElGVCA9IDEsCisJTVBJX1RFU1RfTklDMl9GVU5DVElPTl9FTkFCTEUgPSAoMSA8PCA0KSwKKwlNUElfVEVTVF9OSUMyX0ZVTkNUSU9OX01BU0sgPSAweDAwMDAwMGUwLAorCU1QSV9URVNUX05JQzJfRlVOQ19TSElGVCA9IDUsCisJTVBJX1RFU1RfRkMxX0ZVTkNUSU9OX0VOQUJMRSA9ICgxIDw8IDgpLAorCU1QSV9URVNUX0ZDMV9GVU5DVElPTl9NQVNLCT0gMHgwMDAwMGUwMCwKKwlNUElfVEVTVF9GQzFfRlVOQ1RJT05fU0hJRlQgPSA5LAorCU1QSV9URVNUX0ZDMl9GVU5DVElPTl9FTkFCTEUgPSAoMSA8PCAxMiksCisJTVBJX1RFU1RfRkMyX0ZVTkNUSU9OX01BU0sgPSAweDAwMDBlMDAwLAorCU1QSV9URVNUX0ZDMl9GVU5DVElPTl9TSElGVCA9IDEzLAorCisJTVBJX05JQ19SRUFEID0gMHgwMDAwMDAwMCwKKwlNUElfTklDX1JFR19CTE9DSyA9IDB4MDAwMjAwMDAsCisJTVBJX05JQ19GVU5DVElPTl9TSElGVCA9IDYsCiB9OwogCiAvKgpAQCAtNDY4LDcgKzQ4NCw3IEBACiAJTURJT19QT1JUID0gMHgwMDAwMDQ0MCwKIAlNRElPX1NUQVRVUyA9IDB4MDAwMDA0NTAsCiAKLQkvKiBYR01BQyBBVVggc3RhdGlzdGljcyAgcmVnaXN0ZXJzICovCisJWEdNQUNfUkVHSVNURVJfRU5EID0gMHgwMDAwMDc0MCwKIH07CiAKIC8qCkBAIC01MDksNiArNTI1LDcgQEAKIGVudW0gewogCU1BQ19BRERSX0lEWF9TSElGVCA9IDQsCiAJTUFDX0FERFJfVFlQRV9TSElGVCA9IDE2LAorCU1BQ19BRERSX1RZUEVfQ09VTlQgPSAxMCwKIAlNQUNfQUREUl9UWVBFX01BU0sgPSAweDAwMGYwMDAwLAogCU1BQ19BRERSX1RZUEVfQ0FNX01BQyA9IDB4MDAwMDAwMDAsCiAJTUFDX0FERFJfVFlQRV9NVUxUSV9NQUMgPSAweDAwMDEwMDAwLApAQCAtNTI2LDYgKzU0MywzMCBAQAogCU1BQ19BRERSX01SID0gKDEgPDwgMzApLAogCU1BQ19BRERSX01XID0gKDEgPDwgMzEpLAogCU1BWF9NVUxUSUNBU1RfRU5UUklFUyA9IDMyLAorCisJLyogRW50cnkgY291bnQgYW5kIHdvcmRzIHBlciBlbnRyeQorCSAqIGZvciBlYWNoIGFkZHJlc3MgdHlwZSBpbiB0aGUgZmlsdGVyLgorCSAqLworCU1BQ19BRERSX01BWF9DQU1fRU5UUklFUyA9IDUxMiwKKwlNQUNfQUREUl9NQVhfQ0FNX1dDT1VOVCA9IDMsCisJTUFDX0FERFJfTUFYX01VTFRJQ0FTVF9FTlRSSUVTID0gMzIsCisJTUFDX0FERFJfTUFYX01VTFRJQ0FTVF9XQ09VTlQgPSAyLAorCU1BQ19BRERSX01BWF9WTEFOX0VOVFJJRVMgPSA0MDk2LAorCU1BQ19BRERSX01BWF9WTEFOX1dDT1VOVCA9IDEsCisJTUFDX0FERFJfTUFYX01DQVNUX0ZMVFJfRU5UUklFUyA9IDQwOTYsCisJTUFDX0FERFJfTUFYX01DQVNUX0ZMVFJfV0NPVU5UID0gMSwKKwlNQUNfQUREUl9NQVhfRkNfTUFDX0VOVFJJRVMgPSA0LAorCU1BQ19BRERSX01BWF9GQ19NQUNfV0NPVU5UID0gMiwKKwlNQUNfQUREUl9NQVhfTUdNVF9NQUNfRU5UUklFUyA9IDgsCisJTUFDX0FERFJfTUFYX01HTVRfTUFDX1dDT1VOVCA9IDIsCisJTUFDX0FERFJfTUFYX01HTVRfVkxBTl9FTlRSSUVTID0gMTYsCisJTUFDX0FERFJfTUFYX01HTVRfVkxBTl9XQ09VTlQgPSAxLAorCU1BQ19BRERSX01BWF9NR01UX1Y0X0VOVFJJRVMgPSA0LAorCU1BQ19BRERSX01BWF9NR01UX1Y0X1dDT1VOVCA9IDEsCisJTUFDX0FERFJfTUFYX01HTVRfVjZfRU5UUklFUyA9IDQsCisJTUFDX0FERFJfTUFYX01HTVRfVjZfV0NPVU5UID0gNCwKKwlNQUNfQUREUl9NQVhfTUdNVF9UVV9EUF9FTlRSSUVTID0gNCwKKwlNQUNfQUREUl9NQVhfTUdNVF9UVV9EUF9XQ09VTlQgPSAxLAogfTsKIAogLyoKQEAgLTU5Niw2ICs2MzcsNyBAQAogZW51bSB7CiAJUlRfSURYX0lEWF9TSElGVCA9IDgsCiAJUlRfSURYX1RZUEVfTUFTSyA9IDB4MDAwZjAwMDAsCisJUlRfSURYX1RZUEVfU0hJRlQgPSAxNiwKIAlSVF9JRFhfVFlQRV9SVCA9IDB4MDAwMDAwMDAsCiAJUlRfSURYX1RZUEVfUlRfSU5WID0gMHgwMDAxMDAwMCwKIAlSVF9JRFhfVFlQRV9OSUNRID0gMHgwMDAyMDAwMCwKQEAgLTY2NCw3ICs3MDYsODkgQEAKIAlSVF9JRFhfVU5VU0VEMDEzID0gMTMsCiAJUlRfSURYX1VOVVNFRDAxNCA9IDE0LAogCVJUX0lEWF9QUk9NSVNDVU9VU19TTE9UID0gMTUsCi0JUlRfSURYX01BWF9TTE9UUyA9IDE2LAorCVJUX0lEWF9NQVhfUlRfU0xPVFMgPSA4LAorCVJUX0lEWF9NQVhfTklDX1NMT1RTID0gMTYsCit9OworCisvKgorICogU2VyZGVzIEFkZHJlc3MgUmVnaXN0ZXIgKFhHX1NFUkRFU19BRERSKSBiaXQgZGVmaW5pdGlvbnMuCisgKi8KK2VudW0geworCVhHX1NFUkRFU19BRERSX1JEWSA9ICgxIDw8IDMxKSwKKwlYR19TRVJERVNfQUREUl9SID0gKDEgPDwgMzApLAorCisJWEdfU0VSREVTX0FERFJfU1RTID0gMHgwMDAwMUUwNiwKKwlYR19TRVJERVNfQUREUl9YRkkxX1BXUl9VUCA9IDB4MDAwMDAwMDUsCisJWEdfU0VSREVTX0FERFJfWEZJMl9QV1JfVVAgPSAweDAwMDAwMDBhLAorCVhHX1NFUkRFU19BRERSX1hBVUlfUFdSX0RPV04gPSAweDAwMDAwMDAxLAorCisJLyogU2VyZGVzIGNvcmVkdW1wIGRlZmluaXRpb25zLiAqLworCVhHX1NFUkRFU19YQVVJX0FOX1NUQVJUID0gMHgwMDAwMDAwMCwKKwlYR19TRVJERVNfWEFVSV9BTl9FTkQgPSAweDAwMDAwMDM0LAorCVhHX1NFUkRFU19YQVVJX0hTU19QQ1NfU1RBUlQgPSAweDAwMDAwODAwLAorCVhHX1NFUkRFU19YQVVJX0hTU19QQ1NfRU5EID0gMHgwMDAwODgwLAorCVhHX1NFUkRFU19YRklfQU5fU1RBUlQgPSAweDAwMDAxMDAwLAorCVhHX1NFUkRFU19YRklfQU5fRU5EID0gMHgwMDAwMTAzNCwKKwlYR19TRVJERVNfWEZJX1RSQUlOX1NUQVJUID0gMHgxMDAwMTA1MCwKKwlYR19TRVJERVNfWEZJX1RSQUlOX0VORCA9IDB4MTAwMDEwN0MsCisJWEdfU0VSREVTX1hGSV9IU1NfUENTX1NUQVJUID0gMHgwMDAwMTgwMCwKKwlYR19TRVJERVNfWEZJX0hTU19QQ1NfRU5EID0gMHgwMDAwMTgzOCwKKwlYR19TRVJERVNfWEZJX0hTU19UWF9TVEFSVCA9IDB4MDAwMDFjMDAsCisJWEdfU0VSREVTX1hGSV9IU1NfVFhfRU5EID0gMHgwMDAwMWMxZiwKKwlYR19TRVJERVNfWEZJX0hTU19SWF9TVEFSVCA9IDB4MDAwMDFjNDAsCisJWEdfU0VSREVTX1hGSV9IU1NfUlhfRU5EID0gMHgwMDAwMWM1ZiwKKwlYR19TRVJERVNfWEZJX0hTU19QTExfU1RBUlQgPSAweDAwMDAxZTAwLAorCVhHX1NFUkRFU19YRklfSFNTX1BMTF9FTkQgPSAweDAwMDAxZTFmLAorfTsKKworLyoKKyAqICBOSUMgUHJvYmUgTXV4IEFkZHJlc3MgUmVnaXN0ZXIgKFBSQl9NWF9BRERSKSBiaXQgZGVmaW5pdGlvbnMuCisgKi8KK2VudW0geworCVBSQl9NWF9BRERSX0FSRSA9ICgxIDw8IDE2KSwKKwlQUkJfTVhfQUREUl9VUCA9ICgxIDw8IDE1KSwKKwlQUkJfTVhfQUREUl9TV1AgPSAoMSA8PCAxNCksCisKKwkvKiBNb2R1bGUgc2VsZWN0IHZhbHVlcy4gKi8KKwlQUkJfTVhfQUREUl9NQVhfTU9EUyA9IDIxLAorCVBSQl9NWF9BRERSX01PRF9TRUxfU0hJRlQgPSA5LAorCVBSQl9NWF9BRERSX01PRF9TRUxfVEJEID0gMCwKKwlQUkJfTVhfQUREUl9NT0RfU0VMX0lERTEgPSAxLAorCVBSQl9NWF9BRERSX01PRF9TRUxfSURFMiA9IDIsCisJUFJCX01YX0FERFJfTU9EX1NFTF9GUkIgPSAzLAorCVBSQl9NWF9BRERSX01PRF9TRUxfT0RFMSA9IDQsCisJUFJCX01YX0FERFJfTU9EX1NFTF9PREUyID0gNSwKKwlQUkJfTVhfQUREUl9NT0RfU0VMX0RBMSA9IDYsCisJUFJCX01YX0FERFJfTU9EX1NFTF9EQTIgPSA3LAorCVBSQl9NWF9BRERSX01PRF9TRUxfSU1QMSA9IDgsCisJUFJCX01YX0FERFJfTU9EX1NFTF9JTVAyID0gOSwKKwlQUkJfTVhfQUREUl9NT0RfU0VMX09NUDEgPSAxMCwKKwlQUkJfTVhfQUREUl9NT0RfU0VMX09NUDIgPSAxMSwKKwlQUkJfTVhfQUREUl9NT0RfU0VMX09SUzEgPSAxMiwKKwlQUkJfTVhfQUREUl9NT0RfU0VMX09SUzIgPSAxMywKKwlQUkJfTVhfQUREUl9NT0RfU0VMX1JFRyA9IDE0LAorCVBSQl9NWF9BRERSX01PRF9TRUxfTUFDMSA9IDE2LAorCVBSQl9NWF9BRERSX01PRF9TRUxfTUFDMiA9IDE3LAorCVBSQl9NWF9BRERSX01PRF9TRUxfVlFNMSA9IDE4LAorCVBSQl9NWF9BRERSX01PRF9TRUxfVlFNMiA9IDE5LAorCVBSQl9NWF9BRERSX01PRF9TRUxfTU9QID0gMjAsCisJLyogQml0IGZpZWxkcyBpbmRpY2F0aW5nIHdoaWNoIG1vZHVsZXMKKwkgKiBhcmUgdmFsaWQgZm9yIGVhY2ggY2xvY2sgZG9tYWluLgorCSAqLworCVBSQl9NWF9BRERSX1ZBTElEX1NZU19NT0QgPSAweDAwMGY3ZmY3LAorCVBSQl9NWF9BRERSX1ZBTElEX1BDSV9NT0QgPSAweDAwMDA0MGMxLAorCVBSQl9NWF9BRERSX1ZBTElEX1hHTV9NT0QgPSAweDAwMDM3MzA5LAorCVBSQl9NWF9BRERSX1ZBTElEX0ZDX01PRCA9IDB4MDAwMDMwMDEsCisJUFJCX01YX0FERFJfVkFMSURfVE9UQUwgPSAzNCwKKworCS8qIENsb2NrIGRvbWFpbiB2YWx1ZXMuICovCisJUFJCX01YX0FERFJfQ0xPQ0tfU0hJRlQgPSA2LAorCVBSQl9NWF9BRERSX1NZU19DTE9DSyA9IDAsCisJUFJCX01YX0FERFJfUENJX0NMT0NLID0gMiwKKwlQUkJfTVhfQUREUl9GQ19DTE9DSyA9IDUsCisJUFJCX01YX0FERFJfWEdNX0NMT0NLID0gNiwKKworCVBSQl9NWF9BRERSX01BWF9NVVggPSA2NCwKIH07CiAKIC8qCkBAIC03MzcsNiArODYxLDIxIEBACiAJUFJCX01YX0RBVEEgPSAweGZjLAkvKiBVc2Ugc2VtYXBob3JlICovCiB9OwogCisjaWZkZWYgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MKKyNkZWZpbmUgU01BTExfQlVGRkVSX1NJWkUgMjU2CisjZGVmaW5lIFNNQUxMX0JVRl9NQVBfU0laRSBTTUFMTF9CVUZGRVJfU0laRQorI2RlZmluZSBTUExUX1NFVFRJTkcgIEZTQ19EQlJTVF8xMDI0CisjZGVmaW5lIFNQTFRfTEVOIDAKKyNkZWZpbmUgUUxHRV9TQl9QQUQgMAorI2Vsc2UKKyNkZWZpbmUgU01BTExfQlVGRkVSX1NJWkUgNTEyCisjZGVmaW5lIFNNQUxMX0JVRl9NQVBfU0laRSAoU01BTExfQlVGRkVSX1NJWkUgLyAyKQorI2RlZmluZSBTUExUX1NFVFRJTkcgIEZTQ19TSAorI2RlZmluZSBTUExUX0xFTiAoU1BMVF9IRFJfRVAgfCBcCisJbWluKFNNQUxMX0JVRl9NQVBfU0laRSwgMTAyMykpCisjZGVmaW5lIFFMR0VfU0JfUEFEIDMyCisjZW5kaWYKKwogLyoKICAqIENBTSBvdXRwdXQgZm9ybWF0LgogICovCkBAIC0xNDIxLDcgKzE1NjAsNyBAQAogCXU2NCByeF9uaWNfZmlmb19kcm9wOwogfTsKIAotLyogQWRkcmVzcy9MZW5ndGggcGFpcnMgZm9yIHRoZSBjb3JlZHVtcC4gKi8KKy8qIEZpcm13YXJlIGNvcmVkdW1wIGludGVybmFsIHJlZ2lzdGVyIGFkZHJlc3MvbGVuZ3RoIHBhaXJzLiAqLwogZW51bSB7CiAJTVBJX0NPUkVfUkVHU19BRERSID0gMHgwMDAzMDAwMCwKIAlNUElfQ09SRV9SRUdTX0NOVCA9IDEyNywKQEAgLTE0NzYsNyArMTYxNSw3IEBACiAJdTgJZGVzY3JpcHRpb25bMTZdOwogfTsKIAotLyogUmVnIGR1bXAgc2VnbWVudCBudW1iZXJzLiAqLworLyogRmlybXdhcmUgY29yZWR1bXAgaGVhZGVyIHNlZ21lbnQgbnVtYmVycy4gKi8KIGVudW0gewogCUNPUkVfU0VHX05VTSA9IDEsCiAJVEVTVF9MT0dJQ19TRUdfTlVNID0gMiwKQEAgLTE1MjcsNiArMTY2Niw2NyBAQAogCiB9OwogCisvKiBUaGVyZSBhcmUgNjQgZ2VuZXJpYyBOSUMgcmVnaXN0ZXJzLiAqLworI2RlZmluZSBOSUNfUkVHU19EVU1QX1dPUkRfQ09VTlQJCTY0CisvKiBYR01BQyB3b3JkIGNvdW50LiAqLworI2RlZmluZSBYR01BQ19EVU1QX1dPUkRfQ09VTlQJCShYR01BQ19SRUdJU1RFUl9FTkQgLyA0KQorLyogV29yZCBjb3VudHMgZm9yIHRoZSBTRVJERVMgYmxvY2tzLiAqLworI2RlZmluZSBYR19TRVJERVNfWEFVSV9BTl9DT1VOVAkJMTQKKyNkZWZpbmUgWEdfU0VSREVTX1hBVUlfSFNTX1BDU19DT1VOVAkzMworI2RlZmluZSBYR19TRVJERVNfWEZJX0FOX0NPVU5UCQkxNAorI2RlZmluZSBYR19TRVJERVNfWEZJX1RSQUlOX0NPVU5UCQkxMgorI2RlZmluZSBYR19TRVJERVNfWEZJX0hTU19QQ1NfQ09VTlQJMTUKKyNkZWZpbmUgWEdfU0VSREVTX1hGSV9IU1NfVFhfQ09VTlQJCTMyCisjZGVmaW5lIFhHX1NFUkRFU19YRklfSFNTX1JYX0NPVU5UCQkzMgorI2RlZmluZSBYR19TRVJERVNfWEZJX0hTU19QTExfQ09VTlQJMzIKKworLyogVGhlcmUgYXJlIDIgQ05BIEVUUyBhbmQgOCBOSUMgRVRTIHJlZ2lzdGVycy4gKi8KKyNkZWZpbmUgRVRTX1JFR1NfRFVNUF9XT1JEX0NPVU5UCQkxMAorCisvKiBFYWNoIHByb2JlIG11eCBlbnRyeSBzdG9yZXMgdGhlIHByb2JlIHR5cGUgcGx1cyA2NCBlbnRyaWVzCisgKiB0aGF0IGFyZSBlYWNoIGVhY2ggNjQtYml0cyBpbiBsZW5ndGguIFRoZXJlIGFyZSBhIHRvdGFsIG9mCisgKiAzNCAoUFJCX01YX0FERFJfVkFMSURfVE9UQUwpIHZhbGlkIHByb2Jlcy4KKyAqLworI2RlZmluZSBQUkJfTVhfQUREUl9QUkJfV09SRF9DT1VOVAkJKDEgKyAoUFJCX01YX0FERFJfTUFYX01VWCAqIDIpKQorI2RlZmluZSBQUkJfTVhfRFVNUF9UT1RfQ09VTlQJCShQUkJfTVhfQUREUl9QUkJfV09SRF9DT1VOVCAqIFwKKwkJCQkJCQlQUkJfTVhfQUREUl9WQUxJRF9UT1RBTCkKKy8qIEVhY2ggcm91dGluZyBlbnRyeSBjb25zaXN0cyBvZiA0IDMyLWJpdCB3b3Jkcy4KKyAqIFRoZXkgYXJlIHJvdXRlIHR5cGUsIGluZGV4LCBpbmRleCB3b3JkLCBhbmQgcmVzdWx0LgorICogVGhlcmUgYXJlIDIgcm91dGUgYmxvY2tzIHdpdGggOCBlbnRyaWVzIGVhY2ggYW5kCisgKiAgMiBOSUMgYmxvY2tzIHdpdGggMTYgZW50cmllcyBlYWNoLgorICogVGhlIHRvdG9sIGVudHJpZXMgaXMgNDggd2l0aCA0IHdvcmRzIGVhY2guCisgKi8KKyNkZWZpbmUgUlRfSURYX0RVTVBfRU5UUklFUwkJCTQ4CisjZGVmaW5lIFJUX0lEWF9EVU1QX1dPUkRTX1BFUl9FTlRSWQk0CisjZGVmaW5lIFJUX0lEWF9EVU1QX1RPVF9XT1JEUwkJKFJUX0lEWF9EVU1QX0VOVFJJRVMgKiBcCisJCQkJCQlSVF9JRFhfRFVNUF9XT1JEU19QRVJfRU5UUlkpCisvKiBUaGVyZSBhcmUgMTAgYWRkcmVzcyBibG9ja3MgaW4gZmlsdGVyLCBlYWNoIHdpdGgKKyAqIGRpZmZlcmVudCBlbnRyeSBjb3VudHMgYW5kIGRpZmZlcmVudCB3b3JkLWNvdW50LXBlci1lbnRyeS4KKyAqLworI2RlZmluZSBNQUNfQUREUl9EVU1QX0VOVFJJRVMgXAorCSgoTUFDX0FERFJfTUFYX0NBTV9FTlRSSUVTICogTUFDX0FERFJfTUFYX0NBTV9XQ09VTlQpICsgXAorCShNQUNfQUREUl9NQVhfTVVMVElDQVNUX0VOVFJJRVMgKiBNQUNfQUREUl9NQVhfTVVMVElDQVNUX1dDT1VOVCkgKyBcCisJKE1BQ19BRERSX01BWF9WTEFOX0VOVFJJRVMgKiBNQUNfQUREUl9NQVhfVkxBTl9XQ09VTlQpICsgXAorCShNQUNfQUREUl9NQVhfTUNBU1RfRkxUUl9FTlRSSUVTICogTUFDX0FERFJfTUFYX01DQVNUX0ZMVFJfV0NPVU5UKSArIFwKKwkoTUFDX0FERFJfTUFYX0ZDX01BQ19FTlRSSUVTICogTUFDX0FERFJfTUFYX0ZDX01BQ19XQ09VTlQpICsgXAorCShNQUNfQUREUl9NQVhfTUdNVF9NQUNfRU5UUklFUyAqIE1BQ19BRERSX01BWF9NR01UX01BQ19XQ09VTlQpICsgXAorCShNQUNfQUREUl9NQVhfTUdNVF9WTEFOX0VOVFJJRVMgKiBNQUNfQUREUl9NQVhfTUdNVF9WTEFOX1dDT1VOVCkgKyBcCisJKE1BQ19BRERSX01BWF9NR01UX1Y0X0VOVFJJRVMgKiBNQUNfQUREUl9NQVhfTUdNVF9WNF9XQ09VTlQpICsgXAorCShNQUNfQUREUl9NQVhfTUdNVF9WNl9FTlRSSUVTICogTUFDX0FERFJfTUFYX01HTVRfVjZfV0NPVU5UKSArIFwKKwkoTUFDX0FERFJfTUFYX01HTVRfVFVfRFBfRU5UUklFUyAqIE1BQ19BRERSX01BWF9NR01UX1RVX0RQX1dDT1VOVCkpCisjZGVmaW5lIE1BQ19BRERSX0RVTVBfV09SRFNfUEVSX0VOVFJZCTIKKyNkZWZpbmUgTUFDX0FERFJfRFVNUF9UT1RfV09SRFMJCShNQUNfQUREUl9EVU1QX0VOVFJJRVMgKiBcCisJCQkJCQlNQUNfQUREUl9EVU1QX1dPUkRTX1BFUl9FTlRSWSkKKy8qIE1heGltdW0gb2YgNCBmdW5jdGlvbnMgd2hvc2Ugc2VtYXBob3JlIHJlZ2lzdGVyZXMgYXJlCisgKiBpbiB0aGUgY29yZWR1bXAuCisgKi8KKyNkZWZpbmUgTUFYX1NFTUFQSE9SRV9GVU5DVElPTlMJCTQKKy8qIERlZmluZXMgZm9yIGFjY2VzcyB0aGUgTVBJIHNoYWRvdyByZWdpc3RlcnMuICovCisjZGVmaW5lIFJJU0NfMTI0CQkweDAwMDMwMDdjCisjZGVmaW5lIFJJU0NfMTI3CQkweDAwMDMwMDdmCisjZGVmaW5lIFNIQURPV19PRkZTRVQJMHhiMDAwMDAwMAorI2RlZmluZSBTSEFET1dfUkVHX1NISUZUCTIwCisKIHN0cnVjdCBxbF9uaWNfbWlzYyB7CiAJdTMyIHJ4X3JpbmdfY291bnQ7CiAJdTMyIHR4X3JpbmdfY291bnQ7CkBAIC0xNTY4LDYgKzE3NjgsMTk5IEBACiAJdTMyIGV0c1s4KzJdOwogfTsKIAorc3RydWN0IHFsX21waV9jb3JlZHVtcCB7CisJLyogc2VnbWVudCAwICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9nbG9iYWxfaGVhZGVyIG1waV9nbG9iYWxfaGVhZGVyOworCisJLyogc2VnbWVudCAxICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBjb3JlX3JlZ3Nfc2VnX2hkcjsKKwl1MzIgbXBpX2NvcmVfcmVnc1tNUElfQ09SRV9SRUdTX0NOVF07CisJdTMyIG1waV9jb3JlX3NoX3JlZ3NbTVBJX0NPUkVfU0hfUkVHU19DTlRdOworCisJLyogc2VnbWVudCAyICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciB0ZXN0X2xvZ2ljX3JlZ3Nfc2VnX2hkcjsKKwl1MzIgdGVzdF9sb2dpY19yZWdzW1RFU1RfUkVHU19DTlRdOworCisJLyogc2VnbWVudCAzICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBybWlpX3JlZ3Nfc2VnX2hkcjsKKwl1MzIgcm1paV9yZWdzW1JNSUlfUkVHU19DTlRdOworCisJLyogc2VnbWVudCA0ICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBmY21hYzFfcmVnc19zZWdfaGRyOworCXUzMiBmY21hYzFfcmVnc1tGQ01BQ19SRUdTX0NOVF07CisKKwkvKiBzZWdtZW50IDUgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIGZjbWFjMl9yZWdzX3NlZ19oZHI7CisJdTMyIGZjbWFjMl9yZWdzW0ZDTUFDX1JFR1NfQ05UXTsKKworCS8qIHNlZ21lbnQgNiAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgZmMxX21ieF9yZWdzX3NlZ19oZHI7CisJdTMyIGZjMV9tYnhfcmVnc1tGQ19NQlhfUkVHU19DTlRdOworCisJLyogc2VnbWVudCA3ICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBpZGVfcmVnc19zZWdfaGRyOworCXUzMiBpZGVfcmVnc1tJREVfUkVHU19DTlRdOworCisJLyogc2VnbWVudCA4ICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBuaWMxX21ieF9yZWdzX3NlZ19oZHI7CisJdTMyIG5pYzFfbWJ4X3JlZ3NbTklDX01CWF9SRUdTX0NOVF07CisKKwkvKiBzZWdtZW50IDkgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHNtYnVzX3JlZ3Nfc2VnX2hkcjsKKwl1MzIgc21idXNfcmVnc1tTTUJVU19SRUdTX0NOVF07CisKKwkvKiBzZWdtZW50IDEwICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBmYzJfbWJ4X3JlZ3Nfc2VnX2hkcjsKKwl1MzIgZmMyX21ieF9yZWdzW0ZDX01CWF9SRUdTX0NOVF07CisKKwkvKiBzZWdtZW50IDExICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBuaWMyX21ieF9yZWdzX3NlZ19oZHI7CisJdTMyIG5pYzJfbWJ4X3JlZ3NbTklDX01CWF9SRUdTX0NOVF07CisKKwkvKiBzZWdtZW50IDEyICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBpMmNfcmVnc19zZWdfaGRyOworCXUzMiBpMmNfcmVnc1tJMkNfUkVHU19DTlRdOworCS8qIHNlZ21lbnQgMTMgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIG1lbWNfcmVnc19zZWdfaGRyOworCXUzMiBtZW1jX3JlZ3NbTUVNQ19SRUdTX0NOVF07CisKKwkvKiBzZWdtZW50IDE0ICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBwYnVzX3JlZ3Nfc2VnX2hkcjsKKwl1MzIgcGJ1c19yZWdzW1BCVVNfUkVHU19DTlRdOworCisJLyogc2VnbWVudCAxNSAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgbWRlX3JlZ3Nfc2VnX2hkcjsKKwl1MzIgbWRlX3JlZ3NbTURFX1JFR1NfQ05UXTsKKworCS8qIHNlZ21lbnQgMTYgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIG5pY19yZWdzX3NlZ19oZHI7CisJdTMyIG5pY19yZWdzW05JQ19SRUdTX0RVTVBfV09SRF9DT1VOVF07CisKKwkvKiBzZWdtZW50IDE3ICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBuaWMyX3JlZ3Nfc2VnX2hkcjsKKwl1MzIgbmljMl9yZWdzW05JQ19SRUdTX0RVTVBfV09SRF9DT1VOVF07CisKKwkvKiBzZWdtZW50IDE4ICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciB4Z21hYzFfc2VnX2hkcjsKKwl1MzIgeGdtYWMxW1hHTUFDX0RVTVBfV09SRF9DT1VOVF07CisKKwkvKiBzZWdtZW50IDE5ICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciB4Z21hYzJfc2VnX2hkcjsKKwl1MzIgeGdtYWMyW1hHTUFDX0RVTVBfV09SRF9DT1VOVF07CisKKwkvKiBzZWdtZW50IDIwICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBjb2RlX3JhbV9zZWdfaGRyOworCXUzMiBjb2RlX3JhbVtDT0RFX1JBTV9DTlRdOworCisJLyogc2VnbWVudCAyMSAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgbWVtY19yYW1fc2VnX2hkcjsKKwl1MzIgbWVtY19yYW1bTUVNQ19SQU1fQ05UXTsKKworCS8qIHNlZ21lbnQgMjIgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHhhdWlfYW5faGRyOworCXUzMiBzZXJkZXNfeGF1aV9hbltYR19TRVJERVNfWEFVSV9BTl9DT1VOVF07CisKKwkvKiBzZWdtZW50IDIzICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciB4YXVpX2hzc19wY3NfaGRyOworCXUzMiBzZXJkZXNfeGF1aV9oc3NfcGNzW1hHX1NFUkRFU19YQVVJX0hTU19QQ1NfQ09VTlRdOworCisJLyogc2VnbWVudCAyNCAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgeGZpX2FuX2hkcjsKKwl1MzIgc2VyZGVzX3hmaV9hbltYR19TRVJERVNfWEZJX0FOX0NPVU5UXTsKKworCS8qIHNlZ21lbnQgMjUgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHhmaV90cmFpbl9oZHI7CisJdTMyIHNlcmRlc194ZmlfdHJhaW5bWEdfU0VSREVTX1hGSV9UUkFJTl9DT1VOVF07CisKKwkvKiBzZWdtZW50IDI2ICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciB4ZmlfaHNzX3Bjc19oZHI7CisJdTMyIHNlcmRlc194ZmlfaHNzX3Bjc1tYR19TRVJERVNfWEZJX0hTU19QQ1NfQ09VTlRdOworCisJLyogc2VnbWVudCAyNyAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgeGZpX2hzc190eF9oZHI7CisJdTMyIHNlcmRlc194ZmlfaHNzX3R4W1hHX1NFUkRFU19YRklfSFNTX1RYX0NPVU5UXTsKKworCS8qIHNlZ21lbnQgMjggKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHhmaV9oc3NfcnhfaGRyOworCXUzMiBzZXJkZXNfeGZpX2hzc19yeFtYR19TRVJERVNfWEZJX0hTU19SWF9DT1VOVF07CisKKwkvKiBzZWdtZW50IDI5ICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciB4ZmlfaHNzX3BsbF9oZHI7CisJdTMyIHNlcmRlc194ZmlfaHNzX3BsbFtYR19TRVJERVNfWEZJX0hTU19QTExfQ09VTlRdOworCisJLyogc2VnbWVudCAzMCAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgbWlzY19uaWNfc2VnX2hkcjsKKwlzdHJ1Y3QgcWxfbmljX21pc2MgbWlzY19uaWNfaW5mbzsKKworCS8qIHNlZ21lbnQgMzEgKi8KKwkvKiBvbmUgaW50ZXJydXB0IHN0YXRlIGZvciBlYWNoIENRICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBpbnRyX3N0YXRlc19zZWdfaGRyOworCXUzMiBpbnRyX3N0YXRlc1tNQVhfUlhfUklOR1NdOworCisJLyogc2VnbWVudCAzMiAqLworCS8qIDMgY2FtIHdvcmRzIGVhY2ggZm9yIDE2IHVuaWNhc3QsCisJICogMiBjYW0gd29yZHMgZm9yIGVhY2ggb2YgMzIgbXVsdGljYXN0LgorCSAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgY2FtX2VudHJpZXNfc2VnX2hkcjsKKwl1MzIgY2FtX2VudHJpZXNbKDE2ICogMykgKyAoMzIgKiAzKV07CisKKwkvKiBzZWdtZW50IDMzICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciBuaWNfcm91dGluZ193b3Jkc19zZWdfaGRyOworCXUzMiBuaWNfcm91dGluZ193b3Jkc1sxNl07CisJLyogc2VnbWVudCAzNCAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgZXRzX3NlZ19oZHI7CisJdTMyIGV0c1tFVFNfUkVHU19EVU1QX1dPUkRfQ09VTlRdOworCisJLyogc2VnbWVudCAzNSAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgcHJvYmVfZHVtcF9zZWdfaGRyOworCXUzMiBwcm9iZV9kdW1wW1BSQl9NWF9EVU1QX1RPVF9DT1VOVF07CisKKwkvKiBzZWdtZW50IDM2ICovCisJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciByb3V0aW5nX3JlZ19zZWdfaGRyOworCXUzMiByb3V0aW5nX3JlZ3NbUlRfSURYX0RVTVBfVE9UX1dPUkRTXTsKKworCS8qIHNlZ21lbnQgMzcgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIG1hY19wcm90X3JlZ19zZWdfaGRyOworCXUzMiBtYWNfcHJvdF9yZWdzW01BQ19BRERSX0RVTVBfVE9UX1dPUkRTXTsKKworCS8qIHNlZ21lbnQgMzggKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHhhdWkyX2FuX2hkcjsKKwl1MzIgc2VyZGVzMl94YXVpX2FuW1hHX1NFUkRFU19YQVVJX0FOX0NPVU5UXTsKKworCS8qIHNlZ21lbnQgMzkgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHhhdWkyX2hzc19wY3NfaGRyOworCXUzMiBzZXJkZXMyX3hhdWlfaHNzX3Bjc1tYR19TRVJERVNfWEFVSV9IU1NfUENTX0NPVU5UXTsKKworCS8qIHNlZ21lbnQgNDAgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHhmaTJfYW5faGRyOworCXUzMiBzZXJkZXMyX3hmaV9hbltYR19TRVJERVNfWEZJX0FOX0NPVU5UXTsKKworCS8qIHNlZ21lbnQgNDEgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHhmaTJfdHJhaW5faGRyOworCXUzMiBzZXJkZXMyX3hmaV90cmFpbltYR19TRVJERVNfWEZJX1RSQUlOX0NPVU5UXTsKKworCS8qIHNlZ21lbnQgNDIgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHhmaTJfaHNzX3Bjc19oZHI7CisJdTMyIHNlcmRlczJfeGZpX2hzc19wY3NbWEdfU0VSREVTX1hGSV9IU1NfUENTX0NPVU5UXTsKKworCS8qIHNlZ21lbnQgNDMgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHhmaTJfaHNzX3R4X2hkcjsKKwl1MzIgc2VyZGVzMl94ZmlfaHNzX3R4W1hHX1NFUkRFU19YRklfSFNTX1RYX0NPVU5UXTsKKworCS8qIHNlZ21lbnQgNDQgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHhmaTJfaHNzX3J4X2hkcjsKKwl1MzIgc2VyZGVzMl94ZmlfaHNzX3J4W1hHX1NFUkRFU19YRklfSFNTX1JYX0NPVU5UXTsKKworCS8qIHNlZ21lbnQgNDUgKi8KKwlzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyIHhmaTJfaHNzX3BsbF9oZHI7CisJdTMyIHNlcmRlczJfeGZpX2hzc19wbGxbWEdfU0VSREVTX1hGSV9IU1NfUExMX0NPVU5UXTsKKworCS8qIHNlZ21lbnQgNTAgKi8KKwkvKiBzZW1hcGhvcmUgcmVnaXN0ZXIgZm9yIGFsbCA1IGZ1bmN0aW9ucyAqLworCXN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIgc2VtX3JlZ3Nfc2VnX2hkcjsKKwl1MzIgc2VtX3JlZ3NbTUFYX1NFTUFQSE9SRV9GVU5DVElPTlNdOworfTsKKwogLyoKICAqIGludHJfY29udGV4dCBzdHJ1Y3R1cmUgaXMgdXNlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24KICAqIHRvIGhvb2sgdGhlIGludGVycnVwdHMuICBJdCBpcyBhbHNvIHVzZWQgaW4gYSBzaW5nbGUKQEAgLTE2MDMsNiArMTk5Niw4IEBACiAJUUxfQ0FNX1JUX1NFVCA9IDgsCiAJUUxfU0VMRlRFU1QgPSA5LAogCVFMX0xCX0xJTktfVVAgPSAxMCwKKwlRTF9GUkNfQ09SRURVTVAgPSAxMSwKKwlRTF9FRUhfRkFUQUwgPSAxMiwKIH07CiAKIC8qIGxpbmtfc3RhdHVzIGJpdCBkZWZpbml0aW9ucyAqLwpAQCAtMTcyNCw2ICsyMTE5LDggQEAKIAl1MzIgcG9ydF9saW5rX3VwOwogCXUzMiBwb3J0X2luaXQ7CiAJdTMyIGxpbmtfc3RhdHVzOworCXN0cnVjdCBxbF9tcGlfY29yZWR1bXAgKm1waV9jb3JlZHVtcDsKKwl1MzIgY29yZV9pc19kdW1wZWQ7CiAJdTMyIGxpbmtfY29uZmlnOwogCXUzMiBsZWRfY29uZmlnOwogCXUzMiBtYXhfZnJhbWVfc2l6ZTsKQEAgLTE3MzYsMTAgKzIxMzMsMTQgQEAKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIG1waV93b3JrOwogCXN0cnVjdCBkZWxheWVkX3dvcmsgbXBpX3BvcnRfY2ZnX3dvcms7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBtcGlfaWRjX3dvcms7CisJc3RydWN0IGRlbGF5ZWRfd29yayBtcGlfY29yZV90b19sb2c7CiAJc3RydWN0IGNvbXBsZXRpb24gaWRlX2NvbXBsZXRpb247CiAJc3RydWN0IG5pY19vcGVyYXRpb25zICpuaWNfb3BzOwogCXUxNiBkZXZpY2VfaWQ7CisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAJYXRvbWljX3QgbGJfY291bnQ7CisJLyogS2VlcCBsb2NhbCBjb3B5IG9mIGN1cnJlbnQgbWFjIGFkZHJlc3MuICovCisJY2hhciBjdXJyZW50X21hY19hZGRyWzZdOwogfTsKIAogLyoKQEAgLTE4MDcsNiArMjIwOCw3IEBACiB2b2lkIHFsX3F1ZXVlX2Z3X2Vycm9yKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKIHZvaWQgcWxfbXBpX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgcWxfbXBpX3Jlc2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3ZvaWQgcWxfbXBpX2NvcmVfdG9fbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBpbnQgcWxfd2FpdF9yZWdfcmR5KHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgcmVnLCB1MzIgYml0LCB1MzIgZWJpdCk7CiB2b2lkIHFsX3F1ZXVlX2FzaWNfZXJyb3Ioc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpOwogdTMyIHFsX2VuYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIGludHIpOwpAQCAtMTgxNyw2ICsyMjE5LDE1IEBACiBpbnQgcWxfbWJfZ2V0X2Z3X3N0YXRlKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKIGludCBxbF9jYW1fcm91dGVfaW5pdGlhbGl6ZShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7CiBpbnQgcWxfcmVhZF9tcGlfcmVnKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgcmVnLCB1MzIgKmRhdGEpOworaW50IHFsX3dyaXRlX21waV9yZWcoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHUzMiByZWcsIHUzMiBkYXRhKTsKK2ludCBxbF91bnBhdXNlX21waV9yaXNjKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKK2ludCBxbF9wYXVzZV9tcGlfcmlzYyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7CitpbnQgcWxfaGFyZF9yZXNldF9tcGlfcmlzYyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7CitpbnQgcWxfZHVtcF9yaXNjX3JhbV9hcmVhKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB2b2lkICpidWYsCisJCXUzMiByYW1fYWRkciwgaW50IHdvcmRfY291bnQpOworaW50IHFsX2NvcmVfZHVtcChzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwKKwkJc3RydWN0IHFsX21waV9jb3JlZHVtcCAqbXBpX2NvcmVkdW1wKTsKK2ludCBxbF9tYl9zeXNfZXJyKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKIGludCBxbF9tYl9hYm91dF9mdyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7CiBpbnQgcWxfd29sKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KTsKIGludCBxbF9tYl93b2xfc2V0X21hZ2ljKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgZW5hYmxlX3dvbCk7CkBAIC0xODMzLDYgKzIyNDQsNyBAQAogCQkJc3RydWN0IHFsX3JlZ19kdW1wICptcGlfY29yZWR1bXApOwogbmV0ZGV2X3R4X3QgcWxfbGJfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7CiB2b2lkIHFsX2NoZWNrX2xiX2ZyYW1lKHN0cnVjdCBxbF9hZGFwdGVyICosIHN0cnVjdCBza19idWZmICopOworaW50IHFsX293bl9maXJtd2FyZShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldik7CiBpbnQgcWxfY2xlYW5fbGJfcnhfcmluZyhzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZywgaW50IGJ1ZGdldCk7CiAKICNpZiAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZGJnLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZGJnLmMKaW5kZXggOWY1OGM0Ny4uZmY4NTUwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2RiZy5jCisrKyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9kYmcuYwpAQCAtMSw1ICsxLDQwNSBAQAogI2luY2x1ZGUgInFsZ2UuaCIKIAorLyogUmVhZCBhIE5JQyByZWdpc3RlciBmcm9tIHRoZSBhbHRlcm5hdGUgZnVuY3Rpb24uICovCitzdGF0aWMgdTMyIHFsX3JlYWRfb3RoZXJfZnVuY19yZWcoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCisJCQkJCQl1MzIgcmVnKQoreworCXUzMiByZWdpc3Rlcl90b19yZWFkOworCXUzMiByZWdfdmFsOworCXVuc2lnbmVkIGludCBzdGF0dXMgPSAwOworCisJcmVnaXN0ZXJfdG9fcmVhZCA9IE1QSV9OSUNfUkVHX0JMT0NLCisJCQkJfCBNUElfTklDX1JFQUQKKwkJCQl8IChxZGV2LT5hbHRfZnVuYyA8PCBNUElfTklDX0ZVTkNUSU9OX1NISUZUKQorCQkJCXwgcmVnOworCXN0YXR1cyA9IHFsX3JlYWRfbXBpX3JlZyhxZGV2LCByZWdpc3Rlcl90b19yZWFkLCAmcmVnX3ZhbCk7CisJaWYgKHN0YXR1cyAhPSAwKQorCQlyZXR1cm4gMHhmZmZmZmZmZjsKKworCXJldHVybiByZWdfdmFsOworfQorCisvKiBXcml0ZSBhIE5JQyByZWdpc3RlciBmcm9tIHRoZSBhbHRlcm5hdGUgZnVuY3Rpb24uICovCitzdGF0aWMgaW50IHFsX3dyaXRlX290aGVyX2Z1bmNfcmVnKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LAorCQkJCQl1MzIgcmVnLCB1MzIgcmVnX3ZhbCkKK3sKKwl1MzIgcmVnaXN0ZXJfdG9fcmVhZDsKKwlpbnQgc3RhdHVzID0gMDsKKworCXJlZ2lzdGVyX3RvX3JlYWQgPSBNUElfTklDX1JFR19CTE9DSworCQkJCXwgTVBJX05JQ19SRUFECisJCQkJfCAocWRldi0+YWx0X2Z1bmMgPDwgTVBJX05JQ19GVU5DVElPTl9TSElGVCkKKwkJCQl8IHJlZzsKKwlzdGF0dXMgPSBxbF93cml0ZV9tcGlfcmVnKHFkZXYsIHJlZ2lzdGVyX3RvX3JlYWQsIHJlZ192YWwpOworCisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBxbF93YWl0X290aGVyX2Z1bmNfcmVnX3JkeShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywKKwkJCQkJdTMyIGJpdCwgdTMyIGVycl9iaXQpCit7CisJdTMyIHRlbXA7CisJaW50IGNvdW50ID0gMTA7CisKKwl3aGlsZSAoY291bnQpIHsKKwkJdGVtcCA9IHFsX3JlYWRfb3RoZXJfZnVuY19yZWcocWRldiwgcmVnKTsKKworCQkvKiBjaGVjayBmb3IgZXJyb3JzICovCisJCWlmICh0ZW1wICYgZXJyX2JpdCkKKwkJCXJldHVybiAtMTsKKwkJZWxzZSBpZiAodGVtcCAmIGJpdCkKKwkJCXJldHVybiAwOworCQltZGVsYXkoMTApOworCQljb3VudC0tOworCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbnQgcWxfcmVhZF9vdGhlcl9mdW5jX3NlcmRlc19yZWcoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHUzMiByZWcsCisJCQkJCQkJdTMyICpkYXRhKQoreworCWludCBzdGF0dXM7CisKKwkvKiB3YWl0IGZvciByZWcgdG8gY29tZSByZWFkeSAqLworCXN0YXR1cyA9IHFsX3dhaXRfb3RoZXJfZnVuY19yZWdfcmR5KHFkZXYsIFhHX1NFUkRFU19BRERSIC8gNCwKKwkJCQkJCVhHX1NFUkRFU19BRERSX1JEWSwgMCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBleGl0OworCisJLyogc2V0IHVwIGZvciByZWcgcmVhZCAqLworCXFsX3dyaXRlX290aGVyX2Z1bmNfcmVnKHFkZXYsIFhHX1NFUkRFU19BRERSLzQsIHJlZyB8IFBST0NfQUREUl9SKTsKKworCS8qIHdhaXQgZm9yIHJlZyB0byBjb21lIHJlYWR5ICovCisJc3RhdHVzID0gcWxfd2FpdF9vdGhlcl9mdW5jX3JlZ19yZHkocWRldiwgWEdfU0VSREVTX0FERFIgLyA0LAorCQkJCQkJWEdfU0VSREVTX0FERFJfUkRZLCAwKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBnZXQgdGhlIGRhdGEgKi8KKwkqZGF0YSA9IHFsX3JlYWRfb3RoZXJfZnVuY19yZWcocWRldiwgKFhHX1NFUkRFU19EQVRBIC8gNCkpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBSZWFkIG91dCB0aGUgU0VSREVTIHJlZ2lzdGVycyAqLworc3RhdGljIGludCBxbF9yZWFkX3NlcmRlc19yZWcoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHUzMiByZWcsIHUzMiAqIGRhdGEpCit7CisJaW50IHN0YXR1czsKKworCS8qIHdhaXQgZm9yIHJlZyB0byBjb21lIHJlYWR5ICovCisJc3RhdHVzID0gcWxfd2FpdF9yZWdfcmR5KHFkZXYsIFhHX1NFUkRFU19BRERSLCBYR19TRVJERVNfQUREUl9SRFksIDApOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXhpdDsKKworCS8qIHNldCB1cCBmb3IgcmVnIHJlYWQgKi8KKwlxbF93cml0ZTMyKHFkZXYsIFhHX1NFUkRFU19BRERSLCByZWcgfCBQUk9DX0FERFJfUik7CisKKwkvKiB3YWl0IGZvciByZWcgdG8gY29tZSByZWFkeSAqLworCXN0YXR1cyA9IHFsX3dhaXRfcmVnX3JkeShxZGV2LCBYR19TRVJERVNfQUREUiwgWEdfU0VSREVTX0FERFJfUkRZLCAwKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBnZXQgdGhlIGRhdGEgKi8KKwkqZGF0YSA9IHFsX3JlYWQzMihxZGV2LCBYR19TRVJERVNfREFUQSk7CitleGl0OgorCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIHFsX2dldF9ib3RoX3NlcmRlcyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIGFkZHIsCisJCQl1MzIgKmRpcmVjdF9wdHIsIHUzMiAqaW5kaXJlY3RfcHRyLAorCQkJdW5zaWduZWQgaW50IGRpcmVjdF92YWxpZCwgdW5zaWduZWQgaW50IGluZGlyZWN0X3ZhbGlkKQoreworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlzdGF0dXMgPSAxOworCWlmIChkaXJlY3RfdmFsaWQpCisJCXN0YXR1cyA9IHFsX3JlYWRfc2VyZGVzX3JlZyhxZGV2LCBhZGRyLCBkaXJlY3RfcHRyKTsKKwkvKiBEZWFkIGZpbGwgYW55IGZhaWx1cmVzIG9yIGludmFsaWRzLiAqLworCWlmIChzdGF0dXMpCisJCSpkaXJlY3RfcHRyID0gMHhERUFEQkVFRjsKKworCXN0YXR1cyA9IDE7CisJaWYgKGluZGlyZWN0X3ZhbGlkKQorCQlzdGF0dXMgPSBxbF9yZWFkX290aGVyX2Z1bmNfc2VyZGVzX3JlZygKKwkJCQkJCXFkZXYsIGFkZHIsIGluZGlyZWN0X3B0cik7CisJLyogRGVhZCBmaWxsIGFueSBmYWlsdXJlcyBvciBpbnZhbGlkcy4gKi8KKwlpZiAoc3RhdHVzKQorCQkqaW5kaXJlY3RfcHRyID0gMHhERUFEQkVFRjsKK30KKworc3RhdGljIGludCBxbF9nZXRfc2VyZGVzX3JlZ3Moc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCisJCQkJc3RydWN0IHFsX21waV9jb3JlZHVtcCAqbXBpX2NvcmVkdW1wKQoreworCWludCBzdGF0dXM7CisJdW5zaWduZWQgaW50IHhmaV9kaXJlY3RfdmFsaWQsIHhmaV9pbmRpcmVjdF92YWxpZCwgeGF1aV9kaXJlY3RfdmFsaWQ7CisJdW5zaWduZWQgaW50IHhhdWlfaW5kaXJlY3RfdmFsaWQsIGk7CisJdTMyICpkaXJlY3RfcHRyLCB0ZW1wOworCXUzMiAqaW5kaXJlY3RfcHRyOworCisJeGZpX2RpcmVjdF92YWxpZCA9IHhmaV9pbmRpcmVjdF92YWxpZCA9IDA7CisJeGF1aV9kaXJlY3RfdmFsaWQgPSB4YXVpX2luZGlyZWN0X3ZhbGlkID0gMTsKKworCS8qIFRoZSBYQVVJIG5lZWRzIHRvIGJlIHJlYWQgb3V0IHBlciBwb3J0ICovCisJaWYgKHFkZXYtPmZ1bmMgJiAxKSB7CisJCS8qIFdlIGFyZSBOSUMgMgkqLworCQlzdGF0dXMgPSBxbF9yZWFkX290aGVyX2Z1bmNfc2VyZGVzX3JlZyhxZGV2LAorCQkJCVhHX1NFUkRFU19YQVVJX0hTU19QQ1NfU1RBUlQsICZ0ZW1wKTsKKwkJaWYgKHN0YXR1cykKKwkJCXRlbXAgPSBYR19TRVJERVNfQUREUl9YQVVJX1BXUl9ET1dOOworCQlpZiAoKHRlbXAgJiBYR19TRVJERVNfQUREUl9YQVVJX1BXUl9ET1dOKSA9PQorCQkJCQlYR19TRVJERVNfQUREUl9YQVVJX1BXUl9ET1dOKQorCQkJeGF1aV9pbmRpcmVjdF92YWxpZCA9IDA7CisKKwkJc3RhdHVzID0gcWxfcmVhZF9zZXJkZXNfcmVnKHFkZXYsCisJCQkJWEdfU0VSREVTX1hBVUlfSFNTX1BDU19TVEFSVCwgJnRlbXApOworCQlpZiAoc3RhdHVzKQorCQkJdGVtcCA9IFhHX1NFUkRFU19BRERSX1hBVUlfUFdSX0RPV047CisKKwkJaWYgKCh0ZW1wICYgWEdfU0VSREVTX0FERFJfWEFVSV9QV1JfRE9XTikgPT0KKwkJCQkJWEdfU0VSREVTX0FERFJfWEFVSV9QV1JfRE9XTikKKwkJCXhhdWlfZGlyZWN0X3ZhbGlkID0gMDsKKwl9IGVsc2UgeworCQkvKiBXZSBhcmUgTklDIDEJKi8KKwkJc3RhdHVzID0gcWxfcmVhZF9vdGhlcl9mdW5jX3NlcmRlc19yZWcocWRldiwKKwkJCQlYR19TRVJERVNfWEFVSV9IU1NfUENTX1NUQVJULCAmdGVtcCk7CisJCWlmIChzdGF0dXMpCisJCQl0ZW1wID0gWEdfU0VSREVTX0FERFJfWEFVSV9QV1JfRE9XTjsKKwkJaWYgKCh0ZW1wICYgWEdfU0VSREVTX0FERFJfWEFVSV9QV1JfRE9XTikgPT0KKwkJCQkJWEdfU0VSREVTX0FERFJfWEFVSV9QV1JfRE9XTikKKwkJCXhhdWlfaW5kaXJlY3RfdmFsaWQgPSAwOworCisJCXN0YXR1cyA9IHFsX3JlYWRfc2VyZGVzX3JlZyhxZGV2LAorCQkJCVhHX1NFUkRFU19YQVVJX0hTU19QQ1NfU1RBUlQsICZ0ZW1wKTsKKwkJaWYgKHN0YXR1cykKKwkJCXRlbXAgPSBYR19TRVJERVNfQUREUl9YQVVJX1BXUl9ET1dOOworCQlpZiAoKHRlbXAgJiBYR19TRVJERVNfQUREUl9YQVVJX1BXUl9ET1dOKSA9PQorCQkJCQlYR19TRVJERVNfQUREUl9YQVVJX1BXUl9ET1dOKQorCQkJeGF1aV9kaXJlY3RfdmFsaWQgPSAwOworCX0KKworCS8qCisJICogWEZJIHJlZ2lzdGVyIGlzIHNoYXJlZCBzbyBvbmx5IG5lZWQgdG8gcmVhZCBvbmUKKwkgKiBmdW5jdGlvbnMgYW5kIHRoZW4gY2hlY2sgdGhlIGJpdHMuCisJICovCisJc3RhdHVzID0gcWxfcmVhZF9zZXJkZXNfcmVnKHFkZXYsIFhHX1NFUkRFU19BRERSX1NUUywgJnRlbXApOworCWlmIChzdGF0dXMpCisJCXRlbXAgPSAwOworCisJaWYgKCh0ZW1wICYgWEdfU0VSREVTX0FERFJfWEZJMV9QV1JfVVApID09CisJCQkJCVhHX1NFUkRFU19BRERSX1hGSTFfUFdSX1VQKSB7CisJCS8qIG5vdyBzZWUgaWYgaSdtIE5JQyAxIG9yIE5JQyAyICovCisJCWlmIChxZGV2LT5mdW5jICYgMSkKKwkJCS8qIEknbSBOSUMgMiwgc28gdGhlIGluZGlyZWN0IChOSUMxKSB4ZmkgaXMgdXAuICovCisJCQl4ZmlfaW5kaXJlY3RfdmFsaWQgPSAxOworCQllbHNlCisJCQl4ZmlfZGlyZWN0X3ZhbGlkID0gMTsKKwl9CisJaWYgKCh0ZW1wICYgWEdfU0VSREVTX0FERFJfWEZJMl9QV1JfVVApID09CisJCQkJCVhHX1NFUkRFU19BRERSX1hGSTJfUFdSX1VQKSB7CisJCS8qIG5vdyBzZWUgaWYgaSdtIE5JQyAxIG9yIE5JQyAyICovCisJCWlmIChxZGV2LT5mdW5jICYgMSkKKwkJCS8qIEknbSBOSUMgMiwgc28gdGhlIGluZGlyZWN0IChOSUMxKSB4ZmkgaXMgdXAuICovCisJCQl4ZmlfZGlyZWN0X3ZhbGlkID0gMTsKKwkJZWxzZQorCQkJeGZpX2luZGlyZWN0X3ZhbGlkID0gMTsKKwl9CisKKwkvKiBHZXQgWEFVSV9BTiByZWdpc3RlciBibG9jay4gKi8KKwlpZiAocWRldi0+ZnVuYyAmIDEpIHsKKwkJLyogRnVuY3Rpb24gMiBpcyBkaXJlY3QJKi8KKwkJZGlyZWN0X3B0ciA9IG1waV9jb3JlZHVtcC0+c2VyZGVzMl94YXVpX2FuOworCQlpbmRpcmVjdF9wdHIgPSBtcGlfY29yZWR1bXAtPnNlcmRlc194YXVpX2FuOworCX0gZWxzZSB7CisJCS8qIEZ1bmN0aW9uIDEgaXMgZGlyZWN0CSovCisJCWRpcmVjdF9wdHIgPSBtcGlfY29yZWR1bXAtPnNlcmRlc194YXVpX2FuOworCQlpbmRpcmVjdF9wdHIgPSBtcGlfY29yZWR1bXAtPnNlcmRlczJfeGF1aV9hbjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDw9IDB4MDAwMDAwMDM0OyBpICs9IDQsIGRpcmVjdF9wdHIrKywgaW5kaXJlY3RfcHRyKyspCisJCXFsX2dldF9ib3RoX3NlcmRlcyhxZGV2LCBpLCBkaXJlY3RfcHRyLCBpbmRpcmVjdF9wdHIsCisJCQkJCXhhdWlfZGlyZWN0X3ZhbGlkLCB4YXVpX2luZGlyZWN0X3ZhbGlkKTsKKworCS8qIEdldCBYQVVJX0hTU19QQ1MgcmVnaXN0ZXIgYmxvY2suICovCisJaWYgKHFkZXYtPmZ1bmMgJiAxKSB7CisJCWRpcmVjdF9wdHIgPQorCQkJbXBpX2NvcmVkdW1wLT5zZXJkZXMyX3hhdWlfaHNzX3BjczsKKwkJaW5kaXJlY3RfcHRyID0KKwkJCW1waV9jb3JlZHVtcC0+c2VyZGVzX3hhdWlfaHNzX3BjczsKKwl9IGVsc2UgeworCQlkaXJlY3RfcHRyID0KKwkJCW1waV9jb3JlZHVtcC0+c2VyZGVzX3hhdWlfaHNzX3BjczsKKwkJaW5kaXJlY3RfcHRyID0KKwkJCW1waV9jb3JlZHVtcC0+c2VyZGVzMl94YXVpX2hzc19wY3M7CisJfQorCisJZm9yIChpID0gMHg4MDA7IGkgPD0gMHg4ODA7IGkgKz0gNCwgZGlyZWN0X3B0cisrLCBpbmRpcmVjdF9wdHIrKykKKwkJcWxfZ2V0X2JvdGhfc2VyZGVzKHFkZXYsIGksIGRpcmVjdF9wdHIsIGluZGlyZWN0X3B0ciwKKwkJCQkJeGF1aV9kaXJlY3RfdmFsaWQsIHhhdWlfaW5kaXJlY3RfdmFsaWQpOworCisJLyogR2V0IFhBVUlfWEZJX0FOIHJlZ2lzdGVyIGJsb2NrLiAqLworCWlmIChxZGV2LT5mdW5jICYgMSkgeworCQlkaXJlY3RfcHRyID0gbXBpX2NvcmVkdW1wLT5zZXJkZXMyX3hmaV9hbjsKKwkJaW5kaXJlY3RfcHRyID0gbXBpX2NvcmVkdW1wLT5zZXJkZXNfeGZpX2FuOworCX0gZWxzZSB7CisJCWRpcmVjdF9wdHIgPSBtcGlfY29yZWR1bXAtPnNlcmRlc194ZmlfYW47CisJCWluZGlyZWN0X3B0ciA9IG1waV9jb3JlZHVtcC0+c2VyZGVzMl94ZmlfYW47CisJfQorCisJZm9yIChpID0gMHgxMDAwOyBpIDw9IDB4MTAzNDsgaSArPSA0LCBkaXJlY3RfcHRyKyssIGluZGlyZWN0X3B0cisrKQorCQlxbF9nZXRfYm90aF9zZXJkZXMocWRldiwgaSwgZGlyZWN0X3B0ciwgaW5kaXJlY3RfcHRyLAorCQkJCQl4ZmlfZGlyZWN0X3ZhbGlkLCB4ZmlfaW5kaXJlY3RfdmFsaWQpOworCisJLyogR2V0IFhBVUlfWEZJX1RSQUlOIHJlZ2lzdGVyIGJsb2NrLiAqLworCWlmIChxZGV2LT5mdW5jICYgMSkgeworCQlkaXJlY3RfcHRyID0gbXBpX2NvcmVkdW1wLT5zZXJkZXMyX3hmaV90cmFpbjsKKwkJaW5kaXJlY3RfcHRyID0KKwkJCW1waV9jb3JlZHVtcC0+c2VyZGVzX3hmaV90cmFpbjsKKwl9IGVsc2UgeworCQlkaXJlY3RfcHRyID0gbXBpX2NvcmVkdW1wLT5zZXJkZXNfeGZpX3RyYWluOworCQlpbmRpcmVjdF9wdHIgPQorCQkJbXBpX2NvcmVkdW1wLT5zZXJkZXMyX3hmaV90cmFpbjsKKwl9CisKKwlmb3IgKGkgPSAweDEwNTA7IGkgPD0gMHgxMDdjOyBpICs9IDQsIGRpcmVjdF9wdHIrKywgaW5kaXJlY3RfcHRyKyspCisJCXFsX2dldF9ib3RoX3NlcmRlcyhxZGV2LCBpLCBkaXJlY3RfcHRyLCBpbmRpcmVjdF9wdHIsCisJCQkJCXhmaV9kaXJlY3RfdmFsaWQsIHhmaV9pbmRpcmVjdF92YWxpZCk7CisKKwkvKiBHZXQgWEFVSV9YRklfSFNTX1BDUyByZWdpc3RlciBibG9jay4gKi8KKwlpZiAocWRldi0+ZnVuYyAmIDEpIHsKKwkJZGlyZWN0X3B0ciA9CisJCQltcGlfY29yZWR1bXAtPnNlcmRlczJfeGZpX2hzc19wY3M7CisJCWluZGlyZWN0X3B0ciA9CisJCQltcGlfY29yZWR1bXAtPnNlcmRlc194ZmlfaHNzX3BjczsKKwl9IGVsc2UgeworCQlkaXJlY3RfcHRyID0KKwkJCW1waV9jb3JlZHVtcC0+c2VyZGVzX3hmaV9oc3NfcGNzOworCQlpbmRpcmVjdF9wdHIgPQorCQkJbXBpX2NvcmVkdW1wLT5zZXJkZXMyX3hmaV9oc3NfcGNzOworCX0KKworCWZvciAoaSA9IDB4MTgwMDsgaSA8PSAweDE4Mzg7IGkgKz0gNCwgZGlyZWN0X3B0cisrLCBpbmRpcmVjdF9wdHIrKykKKwkJcWxfZ2V0X2JvdGhfc2VyZGVzKHFkZXYsIGksIGRpcmVjdF9wdHIsIGluZGlyZWN0X3B0ciwKKwkJCQkJeGZpX2RpcmVjdF92YWxpZCwgeGZpX2luZGlyZWN0X3ZhbGlkKTsKKworCS8qIEdldCBYQVVJX1hGSV9IU1NfVFggcmVnaXN0ZXIgYmxvY2suICovCisJaWYgKHFkZXYtPmZ1bmMgJiAxKSB7CisJCWRpcmVjdF9wdHIgPQorCQkJbXBpX2NvcmVkdW1wLT5zZXJkZXMyX3hmaV9oc3NfdHg7CisJCWluZGlyZWN0X3B0ciA9CisJCQltcGlfY29yZWR1bXAtPnNlcmRlc194ZmlfaHNzX3R4OworCX0gZWxzZSB7CisJCWRpcmVjdF9wdHIgPSBtcGlfY29yZWR1bXAtPnNlcmRlc194ZmlfaHNzX3R4OworCQlpbmRpcmVjdF9wdHIgPQorCQkJbXBpX2NvcmVkdW1wLT5zZXJkZXMyX3hmaV9oc3NfdHg7CisJfQorCWZvciAoaSA9IDB4MWMwMDsgaSA8PSAweDFjMWY7IGkrKywgZGlyZWN0X3B0cisrLCBpbmRpcmVjdF9wdHIrKykKKwkJcWxfZ2V0X2JvdGhfc2VyZGVzKHFkZXYsIGksIGRpcmVjdF9wdHIsIGluZGlyZWN0X3B0ciwKKwkJCQkJeGZpX2RpcmVjdF92YWxpZCwgeGZpX2luZGlyZWN0X3ZhbGlkKTsKKworCS8qIEdldCBYQVVJX1hGSV9IU1NfUlggcmVnaXN0ZXIgYmxvY2suICovCisJaWYgKHFkZXYtPmZ1bmMgJiAxKSB7CisJCWRpcmVjdF9wdHIgPQorCQkJbXBpX2NvcmVkdW1wLT5zZXJkZXMyX3hmaV9oc3Nfcng7CisJCWluZGlyZWN0X3B0ciA9CisJCQltcGlfY29yZWR1bXAtPnNlcmRlc194ZmlfaHNzX3J4OworCX0gZWxzZSB7CisJCWRpcmVjdF9wdHIgPSBtcGlfY29yZWR1bXAtPnNlcmRlc194ZmlfaHNzX3J4OworCQlpbmRpcmVjdF9wdHIgPQorCQkJbXBpX2NvcmVkdW1wLT5zZXJkZXMyX3hmaV9oc3Nfcng7CisJfQorCisJZm9yIChpID0gMHgxYzQwOyBpIDw9IDB4MWM1ZjsgaSsrLCBkaXJlY3RfcHRyKyssIGluZGlyZWN0X3B0cisrKQorCQlxbF9nZXRfYm90aF9zZXJkZXMocWRldiwgaSwgZGlyZWN0X3B0ciwgaW5kaXJlY3RfcHRyLAorCQkJCQl4ZmlfZGlyZWN0X3ZhbGlkLCB4ZmlfaW5kaXJlY3RfdmFsaWQpOworCisKKwkvKiBHZXQgWEFVSV9YRklfSFNTX1BMTCByZWdpc3RlciBibG9jay4gKi8KKwlpZiAocWRldi0+ZnVuYyAmIDEpIHsKKwkJZGlyZWN0X3B0ciA9CisJCQltcGlfY29yZWR1bXAtPnNlcmRlczJfeGZpX2hzc19wbGw7CisJCWluZGlyZWN0X3B0ciA9CisJCQltcGlfY29yZWR1bXAtPnNlcmRlc194ZmlfaHNzX3BsbDsKKwl9IGVsc2UgeworCQlkaXJlY3RfcHRyID0KKwkJCW1waV9jb3JlZHVtcC0+c2VyZGVzX3hmaV9oc3NfcGxsOworCQlpbmRpcmVjdF9wdHIgPQorCQkJbXBpX2NvcmVkdW1wLT5zZXJkZXMyX3hmaV9oc3NfcGxsOworCX0KKwlmb3IgKGkgPSAweDFlMDA7IGkgPD0gMHgxZTFmOyBpKyssIGRpcmVjdF9wdHIrKywgaW5kaXJlY3RfcHRyKyspCisJCXFsX2dldF9ib3RoX3NlcmRlcyhxZGV2LCBpLCBkaXJlY3RfcHRyLCBpbmRpcmVjdF9wdHIsCisJCQkJCXhmaV9kaXJlY3RfdmFsaWQsIHhmaV9pbmRpcmVjdF92YWxpZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcWxfcmVhZF9vdGhlcl9mdW5jX3hnbWFjX3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywKKwkJCQkJCQl1MzIgKmRhdGEpCit7CisJaW50IHN0YXR1cyA9IDA7CisKKwkvKiB3YWl0IGZvciByZWcgdG8gY29tZSByZWFkeSAqLworCXN0YXR1cyA9IHFsX3dhaXRfb3RoZXJfZnVuY19yZWdfcmR5KHFkZXYsIFhHTUFDX0FERFIgLyA0LAorCQkJCQkJWEdNQUNfQUREUl9SRFksIFhHTUFDX0FERFJfWE1FKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBzZXQgdXAgZm9yIHJlZyByZWFkICovCisJcWxfd3JpdGVfb3RoZXJfZnVuY19yZWcocWRldiwgWEdNQUNfQUREUiAvIDQsIHJlZyB8IFhHTUFDX0FERFJfUik7CisKKwkvKiB3YWl0IGZvciByZWcgdG8gY29tZSByZWFkeSAqLworCXN0YXR1cyA9IHFsX3dhaXRfb3RoZXJfZnVuY19yZWdfcmR5KHFkZXYsIFhHTUFDX0FERFIgLyA0LAorCQkJCQkJWEdNQUNfQUREUl9SRFksIFhHTUFDX0FERFJfWE1FKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGV4aXQ7CisKKwkvKiBnZXQgdGhlIGRhdGEgKi8KKwkqZGF0YSA9IHFsX3JlYWRfb3RoZXJfZnVuY19yZWcocWRldiwgWEdNQUNfREFUQSAvIDQpOworZXhpdDoKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBSZWFkIHRoZSA0MDAgeGdtYWMgY29udHJvbC9zdGF0aXN0aWNzIHJlZ2lzdGVycworICogc2tpcHBpbmcgdW51c2VkIGxvY2F0aW9ucy4KKyAqLworc3RhdGljIGludCBxbF9nZXRfeGdtYWNfcmVncyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyICogYnVmLAorCQkJCQl1bnNpZ25lZCBpbnQgb3RoZXJfZnVuY3Rpb24pCit7CisJaW50IHN0YXR1cyA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSBQQVVTRV9TUkNfTE87IGkgPCBYR01BQ19SRUdJU1RFUl9FTkQ7IGkgKz0gNCwgYnVmKyspIHsKKwkJLyogV2UncmUgcmVhZGluZyA0MDAgeGdtYWMgcmVnaXN0ZXJzLCBidXQgd2UgZmlsdGVyIG91dAorCQkgKiBzZXJ2ZXJhbCBsb2NhdGlvbnMgdGhhdCBhcmUgbm9uLXJlc3BvbnNpdmUgdG8gcmVhZHMuCisJCSAqLworCQlpZiAoKGkgPT0gMHgwMDAwMDExNCkgfHwKKwkJCShpID09IDB4MDAwMDAxMTgpIHx8CisJCQkoaSA9PSAweDAwMDAwMTNjKSB8fAorCQkJKGkgPT0gMHgwMDAwMDE0MCkgfHwKKwkJCShpID4gMHgwMDAwMDE1MCAmJiBpIDwgMHgwMDAwMDFmYykgfHwKKwkJCShpID4gMHgwMDAwMDI3OCAmJiBpIDwgMHgwMDAwMDJhMCkgfHwKKwkJCShpID4gMHgwMDAwMDJjMCAmJiBpIDwgMHgwMDAwMDJjZikgfHwKKwkJCShpID4gMHgwMDAwMDJkYyAmJiBpIDwgMHgwMDAwMDJmMCkgfHwKKwkJCShpID4gMHgwMDAwMDNjOCAmJiBpIDwgMHgwMDAwMDQwMCkgfHwKKwkJCShpID4gMHgwMDAwMDQwMCAmJiBpIDwgMHgwMDAwMDQxMCkgfHwKKwkJCShpID4gMHgwMDAwMDQxMCAmJiBpIDwgMHgwMDAwMDQyMCkgfHwKKwkJCShpID4gMHgwMDAwMDQyMCAmJiBpIDwgMHgwMDAwMDQzMCkgfHwKKwkJCShpID4gMHgwMDAwMDQzMCAmJiBpIDwgMHgwMDAwMDQ0MCkgfHwKKwkJCShpID4gMHgwMDAwMDQ0MCAmJiBpIDwgMHgwMDAwMDQ1MCkgfHwKKwkJCShpID4gMHgwMDAwMDQ1MCAmJiBpIDwgMHgwMDAwMDUwMCkgfHwKKwkJCShpID4gMHgwMDAwMDU0YyAmJiBpIDwgMHgwMDAwMDU2OCkgfHwKKwkJCShpID4gMHgwMDAwMDVjOCAmJiBpIDwgMHgwMDAwMDYwMCkpIHsKKwkJCWlmIChvdGhlcl9mdW5jdGlvbikKKwkJCQlzdGF0dXMgPQorCQkJCXFsX3JlYWRfb3RoZXJfZnVuY194Z21hY19yZWcocWRldiwgaSwgYnVmKTsKKwkJCWVsc2UKKwkJCQlzdGF0dXMgPSBxbF9yZWFkX3hnbWFjX3JlZyhxZGV2LCBpLCBidWYpOworCisJCQlpZiAoc3RhdHVzKQorCQkJCSpidWYgPSAweGRlYWRiZWVmOworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuIHN0YXR1czsKK30KIAogc3RhdGljIGludCBxbF9nZXRfZXRzX3JlZ3Moc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHUzMiAqIGJ1ZikKIHsKQEAgLTQzLDggKzQ0Myw4IEBACiAJCXN0YXR1cyA9IHFsX2dldF9tYWNfYWRkcl9yZWcocWRldiwKIAkJCQkJTUFDX0FERFJfVFlQRV9DQU1fTUFDLCBpLCB2YWx1ZSk7CiAJCWlmIChzdGF0dXMpIHsKLQkJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkJIkZhaWxlZCByZWFkIG9mIG1hYyBpbmRleCByZWdpc3Rlci5cbiIpOworCQkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCQkgICJGYWlsZWQgcmVhZCBvZiBtYWMgaW5kZXggcmVnaXN0ZXIuXG4iKTsKIAkJCWdvdG8gZXJyOwogCQl9CiAJCSpidWYrKyA9IHZhbHVlWzBdOwkvKiBsb3dlciBNQUMgYWRkcmVzcyAqLwpAQCAtNTUsOCArNDU1LDggQEAKIAkJc3RhdHVzID0gcWxfZ2V0X21hY19hZGRyX3JlZyhxZGV2LAogCQkJCQlNQUNfQUREUl9UWVBFX01VTFRJX01BQywgaSwgdmFsdWUpOwogCQlpZiAoc3RhdHVzKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJCSJGYWlsZWQgcmVhZCBvZiBtYWMgaW5kZXggcmVnaXN0ZXIuXG4iKTsKKwkJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkJICAiRmFpbGVkIHJlYWQgb2YgbWFjIGluZGV4IHJlZ2lzdGVyLlxuIik7CiAJCQlnb3RvIGVycjsKIAkJfQogCQkqYnVmKysgPSB2YWx1ZVswXTsJLyogbG93ZXIgTWNhc3QgYWRkcmVzcyAqLwpAQCAtNzksOCArNDc5LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogCQlzdGF0dXMgPSBxbF9nZXRfcm91dGluZ19yZWcocWRldiwgaSwgJnZhbHVlKTsKIAkJaWYgKHN0YXR1cykgewotCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCQkiRmFpbGVkIHJlYWQgb2Ygcm91dGluZyBpbmRleCByZWdpc3Rlci5cbiIpOworCQkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCQkgICJGYWlsZWQgcmVhZCBvZiByb3V0aW5nIGluZGV4IHJlZ2lzdGVyLlxuIik7CiAJCQlnb3RvIGVycjsKIAkJfSBlbHNlIHsKIAkJCSpidWYrKyA9IHZhbHVlOwpAQCAtOTEsNiArNDkxLDIyNiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKKy8qIFJlYWQgdGhlIE1QSSBQcm9jZXNzb3Igc2hhZG93IHJlZ2lzdGVycyAqLworc3RhdGljIGludCBxbF9nZXRfbXBpX3NoYWRvd19yZWdzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgKiBidWYpCit7CisJdTMyIGk7CisJaW50IHN0YXR1czsKKworCWZvciAoaSA9IDA7IGkgPCBNUElfQ09SRV9TSF9SRUdTX0NOVDsgaSsrLCBidWYrKykgeworCQlzdGF0dXMgPSBxbF93cml0ZV9tcGlfcmVnKHFkZXYsIFJJU0NfMTI0LAorCQkJCShTSEFET1dfT0ZGU0VUIHwgaSA8PCBTSEFET1dfUkVHX1NISUZUKSk7CisJCWlmIChzdGF0dXMpCisJCQlnb3RvIGVuZDsKKwkJc3RhdHVzID0gcWxfcmVhZF9tcGlfcmVnKHFkZXYsIFJJU0NfMTI3LCBidWYpOworCQlpZiAoc3RhdHVzKQorCQkJZ290byBlbmQ7CisJfQorZW5kOgorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFJlYWQgdGhlIE1QSSBQcm9jZXNzb3IgY29yZSByZWdpc3RlcnMgKi8KK3N0YXRpYyBpbnQgcWxfZ2V0X21waV9yZWdzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgKiBidWYsCisJCQkJdTMyIG9mZnNldCwgdTMyIGNvdW50KQoreworCWludCBpLCBzdGF0dXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBidWYrKykgeworCQlzdGF0dXMgPSBxbF9yZWFkX21waV9yZWcocWRldiwgb2Zmc2V0ICsgaSwgYnVmKTsKKwkJaWYgKHN0YXR1cykKKwkJCXJldHVybiBzdGF0dXM7CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIFJlYWQgdGhlIEFTSUMgcHJvYmUgZHVtcCAqLworc3RhdGljIHVuc2lnbmVkIGludCAqcWxfZ2V0X3Byb2JlKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgY2xvY2ssCisJCQkJCXUzMiB2YWxpZCwgdTMyICpidWYpCit7CisJdTMyIG1vZHVsZSwgbXV4X3NlbCwgcHJvYmUsIGxvX3ZhbCwgaGlfdmFsOworCisJZm9yIChtb2R1bGUgPSAwOyBtb2R1bGUgPCBQUkJfTVhfQUREUl9NQVhfTU9EUzsgbW9kdWxlKyspIHsKKwkJaWYgKCEoKHZhbGlkID4+IG1vZHVsZSkgJiAxKSkKKwkJCWNvbnRpbnVlOworCQlmb3IgKG11eF9zZWwgPSAwOyBtdXhfc2VsIDwgUFJCX01YX0FERFJfTUFYX01VWDsgbXV4X3NlbCsrKSB7CisJCQlwcm9iZSA9IGNsb2NrCisJCQkJfCBQUkJfTVhfQUREUl9BUkUKKwkJCQl8IG11eF9zZWwKKwkJCQl8IChtb2R1bGUgPDwgUFJCX01YX0FERFJfTU9EX1NFTF9TSElGVCk7CisJCQlxbF93cml0ZTMyKHFkZXYsIFBSQl9NWF9BRERSLCBwcm9iZSk7CisJCQlsb192YWwgPSBxbF9yZWFkMzIocWRldiwgUFJCX01YX0RBVEEpOworCQkJaWYgKG11eF9zZWwgPT0gMCkgeworCQkJCSpidWYgPSBwcm9iZTsKKwkJCQlidWYrKzsKKwkJCX0KKwkJCXByb2JlIHw9IFBSQl9NWF9BRERSX1VQOworCQkJcWxfd3JpdGUzMihxZGV2LCBQUkJfTVhfQUREUiwgcHJvYmUpOworCQkJaGlfdmFsID0gcWxfcmVhZDMyKHFkZXYsIFBSQl9NWF9EQVRBKTsKKwkJCSpidWYgPSBsb192YWw7CisJCQlidWYrKzsKKwkJCSpidWYgPSBoaV92YWw7CisJCQlidWYrKzsKKwkJfQorCX0KKwlyZXR1cm4gYnVmOworfQorCitzdGF0aWMgaW50IHFsX2dldF9wcm9iZV9kdW1wKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1bnNpZ25lZCBpbnQgKmJ1ZikKK3sKKwkvKiBGaXJzdCB3ZSBoYXZlIHRvIGVuYWJsZSB0aGUgcHJvYmUgbXV4ICovCisJcWxfd3JpdGVfbXBpX3JlZyhxZGV2LCBNUElfVEVTVF9GVU5DX1BSQl9DVEwsIE1QSV9URVNUX0ZVTkNfUFJCX0VOKTsKKwlidWYgPSBxbF9nZXRfcHJvYmUocWRldiwgUFJCX01YX0FERFJfU1lTX0NMT0NLLAorCQkJUFJCX01YX0FERFJfVkFMSURfU1lTX01PRCwgYnVmKTsKKwlidWYgPSBxbF9nZXRfcHJvYmUocWRldiwgUFJCX01YX0FERFJfUENJX0NMT0NLLAorCQkJUFJCX01YX0FERFJfVkFMSURfUENJX01PRCwgYnVmKTsKKwlidWYgPSBxbF9nZXRfcHJvYmUocWRldiwgUFJCX01YX0FERFJfWEdNX0NMT0NLLAorCQkJUFJCX01YX0FERFJfVkFMSURfWEdNX01PRCwgYnVmKTsKKwlidWYgPSBxbF9nZXRfcHJvYmUocWRldiwgUFJCX01YX0FERFJfRkNfQ0xPQ0ssCisJCQlQUkJfTVhfQUREUl9WQUxJRF9GQ19NT0QsIGJ1Zik7CisJcmV0dXJuIDA7CisKK30KKworLyogUmVhZCBvdXQgdGhlIHJvdXRpbmcgaW5kZXggcmVnaXN0ZXJzICovCitzdGF0aWMgaW50IHFsX2dldF9yb3V0aW5nX2luZGV4X3JlZ2lzdGVycyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyICpidWYpCit7CisJaW50IHN0YXR1czsKKwl1MzIgdHlwZSwgaW5kZXgsIGluZGV4X21heDsKKwl1MzIgcmVzdWx0X2luZGV4OworCXUzMiByZXN1bHRfZGF0YTsKKwl1MzIgdmFsOworCisJc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9SVF9JRFhfTUFTSyk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCWZvciAodHlwZSA9IDA7IHR5cGUgPCA0OyB0eXBlKyspIHsKKwkJaWYgKHR5cGUgPCAyKQorCQkJaW5kZXhfbWF4ID0gODsKKwkJZWxzZQorCQkJaW5kZXhfbWF4ID0gMTY7CisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IGluZGV4X21heDsgaW5kZXgrKykgeworCQkJdmFsID0gUlRfSURYX1JTCisJCQkJfCAodHlwZSA8PCBSVF9JRFhfVFlQRV9TSElGVCkKKwkJCQl8IChpbmRleCA8PCBSVF9JRFhfSURYX1NISUZUKTsKKwkJCXFsX3dyaXRlMzIocWRldiwgUlRfSURYLCB2YWwpOworCQkJcmVzdWx0X2luZGV4ID0gMDsKKwkJCXdoaWxlICgocmVzdWx0X2luZGV4ICYgUlRfSURYX01SKSA9PSAwKQorCQkJCXJlc3VsdF9pbmRleCA9IHFsX3JlYWQzMihxZGV2LCBSVF9JRFgpOworCQkJcmVzdWx0X2RhdGEgPSBxbF9yZWFkMzIocWRldiwgUlRfREFUQSk7CisJCQkqYnVmID0gdHlwZTsKKwkJCWJ1ZisrOworCQkJKmJ1ZiA9IGluZGV4OworCQkJYnVmKys7CisJCQkqYnVmID0gcmVzdWx0X2luZGV4OworCQkJYnVmKys7CisJCQkqYnVmID0gcmVzdWx0X2RhdGE7CisJCQlidWYrKzsKKwkJfQorCX0KKwlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9SVF9JRFhfTUFTSyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogUmVhZCBvdXQgdGhlIE1BQyBwcm90b2NvbCByZWdpc3RlcnMgKi8KK3N0YXRpYyB2b2lkIHFsX2dldF9tYWNfcHJvdG9jb2xfcmVnaXN0ZXJzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgKmJ1ZikKK3sKKwl1MzIgcmVzdWx0X2luZGV4LCByZXN1bHRfZGF0YTsKKwl1MzIgdHlwZTsKKwl1MzIgaW5kZXg7CisJdTMyIG9mZnNldDsKKwl1MzIgdmFsOworCXUzMiBpbml0aWFsX3ZhbCA9IE1BQ19BRERSX1JTOworCXUzMiBtYXhfaW5kZXg7CisJdTMyIG1heF9vZmZzZXQ7CisKKwlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgTUFDX0FERFJfVFlQRV9DT1VOVDsgdHlwZSsrKSB7CisJCXN3aXRjaCAodHlwZSkgeworCisJCWNhc2UgMDogLyogQ0FNICovCisJCQlpbml0aWFsX3ZhbCB8PSBNQUNfQUREUl9BRFI7CisJCQltYXhfaW5kZXggPSBNQUNfQUREUl9NQVhfQ0FNX0VOVFJJRVM7CisJCQltYXhfb2Zmc2V0ID0gTUFDX0FERFJfTUFYX0NBTV9XQ09VTlQ7CisJCQlicmVhazsKKwkJY2FzZSAxOiAvKiBNdWx0aWNhc3QgTUFDIEFkZHJlc3MgKi8KKwkJCW1heF9pbmRleCA9IE1BQ19BRERSX01BWF9DQU1fV0NPVU5UOworCQkJbWF4X29mZnNldCA9IE1BQ19BRERSX01BWF9DQU1fV0NPVU5UOworCQkJYnJlYWs7CisJCWNhc2UgMjogLyogVkxBTiBmaWx0ZXIgbWFzayAqLworCQljYXNlIDM6IC8qIE1DIGZpbHRlciBtYXNrICovCisJCQltYXhfaW5kZXggPSBNQUNfQUREUl9NQVhfQ0FNX1dDT1VOVDsKKwkJCW1heF9vZmZzZXQgPSBNQUNfQUREUl9NQVhfQ0FNX1dDT1VOVDsKKwkJCWJyZWFrOworCQljYXNlIDQ6IC8qIEZDIE1BQyBhZGRyZXNzZXMgKi8KKwkJCW1heF9pbmRleCA9IE1BQ19BRERSX01BWF9GQ19NQUNfRU5UUklFUzsKKwkJCW1heF9vZmZzZXQgPSBNQUNfQUREUl9NQVhfRkNfTUFDX1dDT1VOVDsKKwkJCWJyZWFrOworCQljYXNlIDU6IC8qIE1nbXQgTUFDIGFkZHJlc3NlcyAqLworCQkJbWF4X2luZGV4ID0gTUFDX0FERFJfTUFYX01HTVRfTUFDX0VOVFJJRVM7CisJCQltYXhfb2Zmc2V0ID0gTUFDX0FERFJfTUFYX01HTVRfTUFDX1dDT1VOVDsKKwkJCWJyZWFrOworCQljYXNlIDY6IC8qIE1nbXQgVkxBTiBhZGRyZXNzZXMgKi8KKwkJCW1heF9pbmRleCA9IE1BQ19BRERSX01BWF9NR01UX1ZMQU5fRU5UUklFUzsKKwkJCW1heF9vZmZzZXQgPSBNQUNfQUREUl9NQVhfTUdNVF9WTEFOX1dDT1VOVDsKKwkJCWJyZWFrOworCQljYXNlIDc6IC8qIE1nbXQgSVB2NCBhZGRyZXNzICovCisJCQltYXhfaW5kZXggPSBNQUNfQUREUl9NQVhfTUdNVF9WNF9FTlRSSUVTOworCQkJbWF4X29mZnNldCA9IE1BQ19BRERSX01BWF9NR01UX1Y0X1dDT1VOVDsKKwkJCWJyZWFrOworCQljYXNlIDg6IC8qIE1nbXQgSVB2NiBhZGRyZXNzICovCisJCQltYXhfaW5kZXggPSBNQUNfQUREUl9NQVhfTUdNVF9WNl9FTlRSSUVTOworCQkJbWF4X29mZnNldCA9IE1BQ19BRERSX01BWF9NR01UX1Y2X1dDT1VOVDsKKwkJCWJyZWFrOworCQljYXNlIDk6IC8qIE1nbXQgVENQL1VEUCBEZXN0IHBvcnQgKi8KKwkJCW1heF9pbmRleCA9IE1BQ19BRERSX01BWF9NR01UX1RVX0RQX0VOVFJJRVM7CisJCQltYXhfb2Zmc2V0ID0gTUFDX0FERFJfTUFYX01HTVRfVFVfRFBfV0NPVU5UOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIiQmFkIHR5cGUhISEgMHglMDh4XG4iLCB0eXBlKTsKKwkJCW1heF9pbmRleCA9IDA7CisJCQltYXhfb2Zmc2V0ID0gMDsKKwkJCWJyZWFrOworCQl9CisJCWZvciAoaW5kZXggPSAwOyBpbmRleCA8IG1heF9pbmRleDsgaW5kZXgrKykgeworCQkJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBtYXhfb2Zmc2V0OyBvZmZzZXQrKykgeworCQkJCXZhbCA9IGluaXRpYWxfdmFsCisJCQkJCXwgKHR5cGUgPDwgTUFDX0FERFJfVFlQRV9TSElGVCkKKwkJCQkJfCAoaW5kZXggPDwgTUFDX0FERFJfSURYX1NISUZUKQorCQkJCQl8IChvZmZzZXQpOworCQkJCXFsX3dyaXRlMzIocWRldiwgTUFDX0FERFJfSURYLCB2YWwpOworCQkJCXJlc3VsdF9pbmRleCA9IDA7CisJCQkJd2hpbGUgKChyZXN1bHRfaW5kZXggJiBNQUNfQUREUl9NUikgPT0gMCkgeworCQkJCQlyZXN1bHRfaW5kZXggPSBxbF9yZWFkMzIocWRldiwKKwkJCQkJCQkJTUFDX0FERFJfSURYKTsKKwkJCQl9CisJCQkJcmVzdWx0X2RhdGEgPSBxbF9yZWFkMzIocWRldiwgTUFDX0FERFJfREFUQSk7CisJCQkJKmJ1ZiA9IHJlc3VsdF9pbmRleDsKKwkJCQlidWYrKzsKKwkJCQkqYnVmID0gcmVzdWx0X2RhdGE7CisJCQkJYnVmKys7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIHFsX2dldF9zZW1fcmVnaXN0ZXJzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB1MzIgKmJ1ZikKK3sKKwl1MzIgZnVuY19udW0sIHJlZywgcmVnX3ZhbDsKKwlpbnQgc3RhdHVzOworCisJZm9yIChmdW5jX251bSA9IDA7IGZ1bmNfbnVtIDwgTUFYX1NFTUFQSE9SRV9GVU5DVElPTlMgOyBmdW5jX251bSsrKSB7CisJCXJlZyA9IE1QSV9OSUNfUkVHX0JMT0NLCisJCQl8IChmdW5jX251bSA8PCBNUElfTklDX0ZVTkNUSU9OX1NISUZUKQorCQkJfCAoU0VNIC8gNCk7CisJCXN0YXR1cyA9IHFsX3JlYWRfbXBpX3JlZyhxZGV2LCByZWcsICZyZWdfdmFsKTsKKwkJKmJ1ZiA9IHJlZ192YWw7CisJCS8qIGlmIHRoZSByZWFkIGZhaWxlZCB0aGVuIGRlYWQgZmlsbCB0aGUgZWxlbWVudC4gKi8KKwkJaWYgKCFzdGF0dXMpCisJCQkqYnVmID0gMHhkZWFkYmVlZjsKKwkJYnVmKys7CisJfQorfQorCiAvKiBDcmVhdGUgYSBjb3JlZHVtcCBzZWdtZW50IGhlYWRlciAqLwogc3RhdGljIHZvaWQgcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigKIAkJc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlciAqc2VnX2hkciwKQEAgLTEwMyw2ICs3MjMsNTI2IEBACiAJbWVtY3B5KHNlZ19oZHItPmRlc2NyaXB0aW9uLCBkZXNjLCAoc2l6ZW9mKHNlZ19oZHItPmRlc2NyaXB0aW9uKSkgLSAxKTsKIH0KIAorLyoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGEgY29yZWR1bXAgLyBwcm9iZWR1bXAKKyAqIGlzIHRvIGJlIGV4dHJhY3RlZCBmcm9tIHRoZSBIQkEuIEl0IGlzIGFzc3VtZWQgdGhlcmUgaXMgYQorICogcWRldiBzdHJ1Y3R1cmUgdGhhdCBjb250YWlucyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSByZWdpc3RlcgorICogc3BhY2UgZm9yIHRoaXMgZnVuY3Rpb24gYXMgd2VsbCBhcyBhIGNvcmVkdW1wIHN0cnVjdHVyZSB0aGF0CisgKiB3aWxsIGNvbnRhaW4gdGhlIGR1bXAuCisgKi8KK2ludCBxbF9jb3JlX2R1bXAoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsIHN0cnVjdCBxbF9tcGlfY29yZWR1bXAgKm1waV9jb3JlZHVtcCkKK3sKKwlpbnQgc3RhdHVzOworCWludCBpOworCisJaWYgKCFtcGlfY29yZWR1bXApIHsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIk5vIG1lbW9yeSBhdmFpbGFibGUuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogVHJ5IHRvIGdldCB0aGUgc3BpbmxvY2ssIGJ1dCBkb250IHdvcnJ5IGlmCisJICogaXQgaXNuJ3QgYXZhaWxhYmxlLiAgSWYgdGhlIGZpcm13YXJlIGRpZWQgaXQKKwkgKiBtaWdodCBiZSBob2xkaW5nIHRoZSBzZW0uCisJICovCisJcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9QUk9DX1JFR19NQVNLKTsKKworCXN0YXR1cyA9IHFsX3BhdXNlX21waV9yaXNjKHFkZXYpOworCWlmIChzdGF0dXMpIHsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkZhaWxlZCBSSVNDIHBhdXNlLiBTdGF0dXMgPSAweCUuMDh4XG4iLCBzdGF0dXMpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBJbnNlcnQgdGhlIGdsb2JhbCBoZWFkZXIgKi8KKwltZW1zZXQoJihtcGlfY29yZWR1bXAtPm1waV9nbG9iYWxfaGVhZGVyKSwgMCwKKwkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfZ2xvYmFsX2hlYWRlcikpOworCW1waV9jb3JlZHVtcC0+bXBpX2dsb2JhbF9oZWFkZXIuY29va2llID0gTVBJX0NPUkVEVU1QX0NPT0tJRTsKKwltcGlfY29yZWR1bXAtPm1waV9nbG9iYWxfaGVhZGVyLmhlYWRlclNpemUgPQorCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9nbG9iYWxfaGVhZGVyKTsKKwltcGlfY29yZWR1bXAtPm1waV9nbG9iYWxfaGVhZGVyLmltYWdlU2l6ZSA9CisJCXNpemVvZihzdHJ1Y3QgcWxfbXBpX2NvcmVkdW1wKTsKKwltZW1jcHkobXBpX2NvcmVkdW1wLT5tcGlfZ2xvYmFsX2hlYWRlci5pZFN0cmluZywgIk1QSSBDb3JlZHVtcCIsCisJCXNpemVvZihtcGlfY29yZWR1bXAtPm1waV9nbG9iYWxfaGVhZGVyLmlkU3RyaW5nKSk7CisKKwkvKiBHZXQgZ2VuZXJpYyBOSUMgcmVnIGR1bXAgKi8KKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPm5pY19yZWdzX3NlZ19oZHIsCisJCQlOSUMxX0NPTlRST0xfU0VHX05VTSwKKwkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKSArCisJCQlzaXplb2YobXBpX2NvcmVkdW1wLT5uaWNfcmVncyksICJOSUMxIFJlZ2lzdGVycyIpOworCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5uaWMyX3JlZ3Nfc2VnX2hkciwKKwkJCU5JQzJfQ09OVFJPTF9TRUdfTlVNLAorCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpICsKKwkJCXNpemVvZihtcGlfY29yZWR1bXAtPm5pYzJfcmVncyksICJOSUMyIFJlZ2lzdGVycyIpOworCisJLyogR2V0IFhHTWFjIHJlZ2lzdGVycy4gKFNlZ21lbnQgMTgsIFJldiBDLiBzdGVwIDIxKSAqLworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+eGdtYWMxX3NlZ19oZHIsCisJCQlOSUMxX1hHTUFDX1NFR19OVU0sCisJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikgKworCQkJc2l6ZW9mKG1waV9jb3JlZHVtcC0+eGdtYWMxKSwgIk5JQzEgWEdNYWMgUmVnaXN0ZXJzIik7CisKKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPnhnbWFjMl9zZWdfaGRyLAorCQkJTklDMl9YR01BQ19TRUdfTlVNLAorCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpICsKKwkJCXNpemVvZihtcGlfY29yZWR1bXAtPnhnbWFjMiksICJOSUMyIFhHTWFjIFJlZ2lzdGVycyIpOworCisJaWYgKHFkZXYtPmZ1bmMgJiAxKSB7CisJCS8qIE9kZCBtZWFucyBvdXIgZnVuY3Rpb24gaXMgTklDIDIgKi8KKwkJZm9yIChpID0gMDsgaSA8IE5JQ19SRUdTX0RVTVBfV09SRF9DT1VOVDsgaSsrKQorCQkJbXBpX2NvcmVkdW1wLT5uaWMyX3JlZ3NbaV0gPQorCQkJCQkgcWxfcmVhZDMyKHFkZXYsIGkgKiBzaXplb2YodTMyKSk7CisKKwkJZm9yIChpID0gMDsgaSA8IE5JQ19SRUdTX0RVTVBfV09SRF9DT1VOVDsgaSsrKQorCQkJbXBpX2NvcmVkdW1wLT5uaWNfcmVnc1tpXSA9CisJCQlxbF9yZWFkX290aGVyX2Z1bmNfcmVnKHFkZXYsIChpICogc2l6ZW9mKHUzMikpIC8gNCk7CisKKwkJcWxfZ2V0X3hnbWFjX3JlZ3MocWRldiwgJm1waV9jb3JlZHVtcC0+eGdtYWMyWzBdLCAwKTsKKwkJcWxfZ2V0X3hnbWFjX3JlZ3MocWRldiwgJm1waV9jb3JlZHVtcC0+eGdtYWMxWzBdLCAxKTsKKwl9IGVsc2UgeworCQkvKiBFdmVuIG1lYW5zIG91ciBmdW5jdGlvbiBpcyBOSUMgMSAqLworCQlmb3IgKGkgPSAwOyBpIDwgTklDX1JFR1NfRFVNUF9XT1JEX0NPVU5UOyBpKyspCisJCQltcGlfY29yZWR1bXAtPm5pY19yZWdzW2ldID0KKwkJCQkJcWxfcmVhZDMyKHFkZXYsIGkgKiBzaXplb2YodTMyKSk7CisJCWZvciAoaSA9IDA7IGkgPCBOSUNfUkVHU19EVU1QX1dPUkRfQ09VTlQ7IGkrKykKKwkJCW1waV9jb3JlZHVtcC0+bmljMl9yZWdzW2ldID0KKwkJCXFsX3JlYWRfb3RoZXJfZnVuY19yZWcocWRldiwgKGkgKiBzaXplb2YodTMyKSkgLyA0KTsKKworCQlxbF9nZXRfeGdtYWNfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT54Z21hYzFbMF0sIDApOworCQlxbF9nZXRfeGdtYWNfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT54Z21hYzJbMF0sIDEpOworCX0KKworCS8qIFJldiBDLiBTdGVwIDIwYSAqLworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+eGF1aV9hbl9oZHIsCisJCQlYQVVJX0FOX1NFR19OVU0sCisJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikgKworCQkJc2l6ZW9mKG1waV9jb3JlZHVtcC0+c2VyZGVzX3hhdWlfYW4pLAorCQkJIlhBVUkgQU4gUmVnaXN0ZXJzIik7CisKKwkvKiBSZXYgQy4gU3RlcCAyMGIgKi8KKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPnhhdWlfaHNzX3Bjc19oZHIsCisJCQlYQVVJX0hTU19QQ1NfU0VHX05VTSwKKwkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKSArCisJCQlzaXplb2YobXBpX2NvcmVkdW1wLT5zZXJkZXNfeGF1aV9oc3NfcGNzKSwKKwkJCSJYQVVJIEhTUyBQQ1MgUmVnaXN0ZXJzIik7CisKKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPnhmaV9hbl9oZHIsIFhGSV9BTl9TRUdfTlVNLAorCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpICsKKwkJCXNpemVvZihtcGlfY29yZWR1bXAtPnNlcmRlc194ZmlfYW4pLAorCQkJIlhGSSBBTiBSZWdpc3RlcnMiKTsKKworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+eGZpX3RyYWluX2hkciwKKwkJCVhGSV9UUkFJTl9TRUdfTlVNLAorCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpICsKKwkJCXNpemVvZihtcGlfY29yZWR1bXAtPnNlcmRlc194ZmlfdHJhaW4pLAorCQkJIlhGSSBUUkFJTiBSZWdpc3RlcnMiKTsKKworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+eGZpX2hzc19wY3NfaGRyLAorCQkJWEZJX0hTU19QQ1NfU0VHX05VTSwKKwkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKSArCisJCQlzaXplb2YobXBpX2NvcmVkdW1wLT5zZXJkZXNfeGZpX2hzc19wY3MpLAorCQkJIlhGSSBIU1MgUENTIFJlZ2lzdGVycyIpOworCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT54ZmlfaHNzX3R4X2hkciwKKwkJCVhGSV9IU1NfVFhfU0VHX05VTSwKKwkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKSArCisJCQlzaXplb2YobXBpX2NvcmVkdW1wLT5zZXJkZXNfeGZpX2hzc190eCksCisJCQkiWEZJIEhTUyBUWCBSZWdpc3RlcnMiKTsKKworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+eGZpX2hzc19yeF9oZHIsCisJCQlYRklfSFNTX1JYX1NFR19OVU0sCisJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikgKworCQkJc2l6ZW9mKG1waV9jb3JlZHVtcC0+c2VyZGVzX3hmaV9oc3NfcngpLAorCQkJIlhGSSBIU1MgUlggUmVnaXN0ZXJzIik7CisKKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPnhmaV9oc3NfcGxsX2hkciwKKwkJCVhGSV9IU1NfUExMX1NFR19OVU0sCisJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikgKworCQkJc2l6ZW9mKG1waV9jb3JlZHVtcC0+c2VyZGVzX3hmaV9oc3NfcGxsKSwKKwkJCSJYRkkgSFNTIFBMTCBSZWdpc3RlcnMiKTsKKworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+eGF1aTJfYW5faGRyLAorCQkJWEFVSTJfQU5fU0VHX05VTSwKKwkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKSArCisJCQlzaXplb2YobXBpX2NvcmVkdW1wLT5zZXJkZXMyX3hhdWlfYW4pLAorCQkJIlhBVUkyIEFOIFJlZ2lzdGVycyIpOworCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT54YXVpMl9oc3NfcGNzX2hkciwKKwkJCVhBVUkyX0hTU19QQ1NfU0VHX05VTSwKKwkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKSArCisJCQlzaXplb2YobXBpX2NvcmVkdW1wLT5zZXJkZXMyX3hhdWlfaHNzX3BjcyksCisJCQkiWEFVSTIgSFNTIFBDUyBSZWdpc3RlcnMiKTsKKworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+eGZpMl9hbl9oZHIsCisJCQlYRkkyX0FOX1NFR19OVU0sCisJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikgKworCQkJc2l6ZW9mKG1waV9jb3JlZHVtcC0+c2VyZGVzMl94ZmlfYW4pLAorCQkJIlhGSTIgQU4gUmVnaXN0ZXJzIik7CisKKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPnhmaTJfdHJhaW5faGRyLAorCQkJWEZJMl9UUkFJTl9TRUdfTlVNLAorCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpICsKKwkJCXNpemVvZihtcGlfY29yZWR1bXAtPnNlcmRlczJfeGZpX3RyYWluKSwKKwkJCSJYRkkyIFRSQUlOIFJlZ2lzdGVycyIpOworCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT54ZmkyX2hzc19wY3NfaGRyLAorCQkJWEZJMl9IU1NfUENTX1NFR19OVU0sCisJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikgKworCQkJc2l6ZW9mKG1waV9jb3JlZHVtcC0+c2VyZGVzMl94ZmlfaHNzX3BjcyksCisJCQkiWEZJMiBIU1MgUENTIFJlZ2lzdGVycyIpOworCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT54ZmkyX2hzc190eF9oZHIsCisJCQlYRkkyX0hTU19UWF9TRUdfTlVNLAorCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpICsKKwkJCXNpemVvZihtcGlfY29yZWR1bXAtPnNlcmRlczJfeGZpX2hzc190eCksCisJCQkiWEZJMiBIU1MgVFggUmVnaXN0ZXJzIik7CisKKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPnhmaTJfaHNzX3J4X2hkciwKKwkJCVhGSTJfSFNTX1JYX1NFR19OVU0sCisJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikgKworCQkJc2l6ZW9mKG1waV9jb3JlZHVtcC0+c2VyZGVzMl94ZmlfaHNzX3J4KSwKKwkJCSJYRkkyIEhTUyBSWCBSZWdpc3RlcnMiKTsKKworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+eGZpMl9oc3NfcGxsX2hkciwKKwkJCVhGSTJfSFNTX1BMTF9TRUdfTlVNLAorCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpICsKKwkJCXNpemVvZihtcGlfY29yZWR1bXAtPnNlcmRlczJfeGZpX2hzc19wbGwpLAorCQkJIlhGSTIgSFNTIFBMTCBSZWdpc3RlcnMiKTsKKworCXN0YXR1cyA9IHFsX2dldF9zZXJkZXNfcmVncyhxZGV2LCBtcGlfY29yZWR1bXApOworCWlmIChzdGF0dXMpIHsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkZhaWxlZCBEdW1wIG9mIFNlcmRlcyBSZWdpc3RlcnMuIFN0YXR1cyA9IDB4JS4wOHhcbiIsCisJCQkgIHN0YXR1cyk7CisJCWdvdG8gZXJyOworCX0KKworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+Y29yZV9yZWdzX3NlZ19oZHIsCisJCQkJQ09SRV9TRUdfTlVNLAorCQkJCXNpemVvZihtcGlfY29yZWR1bXAtPmNvcmVfcmVnc19zZWdfaGRyKSArCisJCQkJc2l6ZW9mKG1waV9jb3JlZHVtcC0+bXBpX2NvcmVfcmVncykgKworCQkJCXNpemVvZihtcGlfY29yZWR1bXAtPm1waV9jb3JlX3NoX3JlZ3MpLAorCQkJCSJDb3JlIFJlZ2lzdGVycyIpOworCisJLyogR2V0IHRoZSBNUEkgQ29yZSBSZWdpc3RlcnMgKi8KKwlzdGF0dXMgPSBxbF9nZXRfbXBpX3JlZ3MocWRldiwgJm1waV9jb3JlZHVtcC0+bXBpX2NvcmVfcmVnc1swXSwKKwkJCQkgTVBJX0NPUkVfUkVHU19BRERSLCBNUElfQ09SRV9SRUdTX0NOVCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnI7CisJLyogR2V0IHRoZSAxNiBNUEkgc2hhZG93IHJlZ2lzdGVycyAqLworCXN0YXR1cyA9IHFsX2dldF9tcGlfc2hhZG93X3JlZ3MocWRldiwKKwkJCQkJJm1waV9jb3JlZHVtcC0+bXBpX2NvcmVfc2hfcmVnc1swXSk7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnI7CisKKwkvKiBHZXQgdGhlIFRlc3QgTG9naWMgUmVnaXN0ZXJzICovCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT50ZXN0X2xvZ2ljX3JlZ3Nfc2VnX2hkciwKKwkJCQlURVNUX0xPR0lDX1NFR19OVU0sCisJCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpCisJCQkJKyBzaXplb2YobXBpX2NvcmVkdW1wLT50ZXN0X2xvZ2ljX3JlZ3MpLAorCQkJCSJUZXN0IExvZ2ljIFJlZ3MiKTsKKwlzdGF0dXMgPSBxbF9nZXRfbXBpX3JlZ3MocWRldiwgJm1waV9jb3JlZHVtcC0+dGVzdF9sb2dpY19yZWdzWzBdLAorCQkJCSBURVNUX1JFR1NfQUREUiwgVEVTVF9SRUdTX0NOVCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnI7CisKKwkvKiBHZXQgdGhlIFJNSUkgUmVnaXN0ZXJzICovCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5ybWlpX3JlZ3Nfc2VnX2hkciwKKwkJCQlSTUlJX1NFR19OVU0sCisJCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpCisJCQkJKyBzaXplb2YobXBpX2NvcmVkdW1wLT5ybWlpX3JlZ3MpLAorCQkJCSJSTUlJIFJlZ2lzdGVycyIpOworCXN0YXR1cyA9IHFsX2dldF9tcGlfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT5ybWlpX3JlZ3NbMF0sCisJCQkJIFJNSUlfUkVHU19BRERSLCBSTUlJX1JFR1NfQ05UKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVycjsKKworCS8qIEdldCB0aGUgRkNNQUMxIFJlZ2lzdGVycyAqLworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+ZmNtYWMxX3JlZ3Nfc2VnX2hkciwKKwkJCQlGQ01BQzFfU0VHX05VTSwKKwkJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikKKwkJCQkrIHNpemVvZihtcGlfY29yZWR1bXAtPmZjbWFjMV9yZWdzKSwKKwkJCQkiRkNNQUMxIFJlZ2lzdGVycyIpOworCXN0YXR1cyA9IHFsX2dldF9tcGlfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT5mY21hYzFfcmVnc1swXSwKKwkJCQkgRkNNQUMxX1JFR1NfQUREUiwgRkNNQUNfUkVHU19DTlQpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXJyOworCisJLyogR2V0IHRoZSBGQ01BQzIgUmVnaXN0ZXJzICovCisKKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPmZjbWFjMl9yZWdzX3NlZ19oZHIsCisJCQkJRkNNQUMyX1NFR19OVU0sCisJCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpCisJCQkJKyBzaXplb2YobXBpX2NvcmVkdW1wLT5mY21hYzJfcmVncyksCisJCQkJIkZDTUFDMiBSZWdpc3RlcnMiKTsKKworCXN0YXR1cyA9IHFsX2dldF9tcGlfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT5mY21hYzJfcmVnc1swXSwKKwkJCQkgRkNNQUMyX1JFR1NfQUREUiwgRkNNQUNfUkVHU19DTlQpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXJyOworCisJLyogR2V0IHRoZSBGQzEgTUJYIFJlZ2lzdGVycyAqLworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+ZmMxX21ieF9yZWdzX3NlZ19oZHIsCisJCQkJRkMxX01CT1hfU0VHX05VTSwKKwkJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikKKwkJCQkrIHNpemVvZihtcGlfY29yZWR1bXAtPmZjMV9tYnhfcmVncyksCisJCQkJIkZDMSBNQm94IFJlZ3MiKTsKKwlzdGF0dXMgPSBxbF9nZXRfbXBpX3JlZ3MocWRldiwgJm1waV9jb3JlZHVtcC0+ZmMxX21ieF9yZWdzWzBdLAorCQkJCSBGQzFfTUJYX1JFR1NfQUREUiwgRkNfTUJYX1JFR1NfQ05UKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVycjsKKworCS8qIEdldCB0aGUgSURFIFJlZ2lzdGVycyAqLworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+aWRlX3JlZ3Nfc2VnX2hkciwKKwkJCQlJREVfU0VHX05VTSwKKwkJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikKKwkJCQkrIHNpemVvZihtcGlfY29yZWR1bXAtPmlkZV9yZWdzKSwKKwkJCQkiSURFIFJlZ2lzdGVycyIpOworCXN0YXR1cyA9IHFsX2dldF9tcGlfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT5pZGVfcmVnc1swXSwKKwkJCQkgSURFX1JFR1NfQUREUiwgSURFX1JFR1NfQ05UKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVycjsKKworCS8qIEdldCB0aGUgTklDMSBNQlggUmVnaXN0ZXJzICovCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5uaWMxX21ieF9yZWdzX3NlZ19oZHIsCisJCQkJTklDMV9NQk9YX1NFR19OVU0sCisJCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpCisJCQkJKyBzaXplb2YobXBpX2NvcmVkdW1wLT5uaWMxX21ieF9yZWdzKSwKKwkJCQkiTklDMSBNQm94IFJlZ3MiKTsKKwlzdGF0dXMgPSBxbF9nZXRfbXBpX3JlZ3MocWRldiwgJm1waV9jb3JlZHVtcC0+bmljMV9tYnhfcmVnc1swXSwKKwkJCQkgTklDMV9NQlhfUkVHU19BRERSLCBOSUNfTUJYX1JFR1NfQ05UKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVycjsKKworCS8qIEdldCB0aGUgU01CdXMgUmVnaXN0ZXJzICovCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5zbWJ1c19yZWdzX3NlZ19oZHIsCisJCQkJU01CVVNfU0VHX05VTSwKKwkJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikKKwkJCQkrIHNpemVvZihtcGlfY29yZWR1bXAtPnNtYnVzX3JlZ3MpLAorCQkJCSJTTUJ1cyBSZWdpc3RlcnMiKTsKKwlzdGF0dXMgPSBxbF9nZXRfbXBpX3JlZ3MocWRldiwgJm1waV9jb3JlZHVtcC0+c21idXNfcmVnc1swXSwKKwkJCQkgU01CVVNfUkVHU19BRERSLCBTTUJVU19SRUdTX0NOVCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnI7CisKKwkvKiBHZXQgdGhlIEZDMiBNQlggUmVnaXN0ZXJzICovCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5mYzJfbWJ4X3JlZ3Nfc2VnX2hkciwKKwkJCQlGQzJfTUJPWF9TRUdfTlVNLAorCQkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKQorCQkJCSsgc2l6ZW9mKG1waV9jb3JlZHVtcC0+ZmMyX21ieF9yZWdzKSwKKwkJCQkiRkMyIE1Cb3ggUmVncyIpOworCXN0YXR1cyA9IHFsX2dldF9tcGlfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT5mYzJfbWJ4X3JlZ3NbMF0sCisJCQkJIEZDMl9NQlhfUkVHU19BRERSLCBGQ19NQlhfUkVHU19DTlQpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXJyOworCisJLyogR2V0IHRoZSBOSUMyIE1CWCBSZWdpc3RlcnMgKi8KKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPm5pYzJfbWJ4X3JlZ3Nfc2VnX2hkciwKKwkJCQlOSUMyX01CT1hfU0VHX05VTSwKKwkJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikKKwkJCQkrIHNpemVvZihtcGlfY29yZWR1bXAtPm5pYzJfbWJ4X3JlZ3MpLAorCQkJCSJOSUMyIE1Cb3ggUmVncyIpOworCXN0YXR1cyA9IHFsX2dldF9tcGlfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT5uaWMyX21ieF9yZWdzWzBdLAorCQkJCSBOSUMyX01CWF9SRUdTX0FERFIsIE5JQ19NQlhfUkVHU19DTlQpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXJyOworCisJLyogR2V0IHRoZSBJMkMgUmVnaXN0ZXJzICovCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5pMmNfcmVnc19zZWdfaGRyLAorCQkJCUkyQ19TRUdfTlVNLAorCQkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKQorCQkJCSsgc2l6ZW9mKG1waV9jb3JlZHVtcC0+aTJjX3JlZ3MpLAorCQkJCSJJMkMgUmVnaXN0ZXJzIik7CisJc3RhdHVzID0gcWxfZ2V0X21waV9yZWdzKHFkZXYsICZtcGlfY29yZWR1bXAtPmkyY19yZWdzWzBdLAorCQkJCSBJMkNfUkVHU19BRERSLCBJMkNfUkVHU19DTlQpOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXJyOworCisJLyogR2V0IHRoZSBNRU1DIFJlZ2lzdGVycyAqLworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+bWVtY19yZWdzX3NlZ19oZHIsCisJCQkJTUVNQ19TRUdfTlVNLAorCQkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKQorCQkJCSsgc2l6ZW9mKG1waV9jb3JlZHVtcC0+bWVtY19yZWdzKSwKKwkJCQkiTUVNQyBSZWdpc3RlcnMiKTsKKwlzdGF0dXMgPSBxbF9nZXRfbXBpX3JlZ3MocWRldiwgJm1waV9jb3JlZHVtcC0+bWVtY19yZWdzWzBdLAorCQkJCSBNRU1DX1JFR1NfQUREUiwgTUVNQ19SRUdTX0NOVCk7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnI7CisKKwkvKiBHZXQgdGhlIFBCdXMgUmVnaXN0ZXJzICovCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5wYnVzX3JlZ3Nfc2VnX2hkciwKKwkJCQlQQlVTX1NFR19OVU0sCisJCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpCisJCQkJKyBzaXplb2YobXBpX2NvcmVkdW1wLT5wYnVzX3JlZ3MpLAorCQkJCSJQQlVTIFJlZ2lzdGVycyIpOworCXN0YXR1cyA9IHFsX2dldF9tcGlfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT5wYnVzX3JlZ3NbMF0sCisJCQkJIFBCVVNfUkVHU19BRERSLCBQQlVTX1JFR1NfQ05UKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVycjsKKworCS8qIEdldCB0aGUgTURFIFJlZ2lzdGVycyAqLworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+bWRlX3JlZ3Nfc2VnX2hkciwKKwkJCQlNREVfU0VHX05VTSwKKwkJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikKKwkJCQkrIHNpemVvZihtcGlfY29yZWR1bXAtPm1kZV9yZWdzKSwKKwkJCQkiTURFIFJlZ2lzdGVycyIpOworCXN0YXR1cyA9IHFsX2dldF9tcGlfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT5tZGVfcmVnc1swXSwKKwkJCQkgTURFX1JFR1NfQUREUiwgTURFX1JFR1NfQ05UKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVycjsKKworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+bWlzY19uaWNfc2VnX2hkciwKKwkJCQlNSVNDX05JQ19JTkZPX1NFR19OVU0sCisJCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpCisJCQkJKyBzaXplb2YobXBpX2NvcmVkdW1wLT5taXNjX25pY19pbmZvKSwKKwkJCQkiTUlTQyBOSUMgSU5GTyIpOworCW1waV9jb3JlZHVtcC0+bWlzY19uaWNfaW5mby5yeF9yaW5nX2NvdW50ID0gcWRldi0+cnhfcmluZ19jb3VudDsKKwltcGlfY29yZWR1bXAtPm1pc2NfbmljX2luZm8udHhfcmluZ19jb3VudCA9IHFkZXYtPnR4X3JpbmdfY291bnQ7CisJbXBpX2NvcmVkdW1wLT5taXNjX25pY19pbmZvLmludHJfY291bnQgPSBxZGV2LT5pbnRyX2NvdW50OworCW1waV9jb3JlZHVtcC0+bWlzY19uaWNfaW5mby5mdW5jdGlvbiA9IHFkZXYtPmZ1bmM7CisKKwkvKiBTZWdtZW50IDMxICovCisJLyogR2V0IGluZGV4ZWQgcmVnaXN0ZXIgdmFsdWVzLiAqLworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+aW50cl9zdGF0ZXNfc2VnX2hkciwKKwkJCQlJTlRSX1NUQVRFU19TRUdfTlVNLAorCQkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKQorCQkJCSsgc2l6ZW9mKG1waV9jb3JlZHVtcC0+aW50cl9zdGF0ZXMpLAorCQkJCSJJTlRSIFN0YXRlcyIpOworCXFsX2dldF9pbnRyX3N0YXRlcyhxZGV2LCAmbXBpX2NvcmVkdW1wLT5pbnRyX3N0YXRlc1swXSk7CisKKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPmNhbV9lbnRyaWVzX3NlZ19oZHIsCisJCQkJQ0FNX0VOVFJJRVNfU0VHX05VTSwKKwkJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikKKwkJCQkrIHNpemVvZihtcGlfY29yZWR1bXAtPmNhbV9lbnRyaWVzKSwKKwkJCQkiQ0FNIEVudHJpZXMiKTsKKwlzdGF0dXMgPSBxbF9nZXRfY2FtX2VudHJpZXMocWRldiwgJm1waV9jb3JlZHVtcC0+Y2FtX2VudHJpZXNbMF0pOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXJyOworCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5uaWNfcm91dGluZ193b3Jkc19zZWdfaGRyLAorCQkJCVJPVVRJTkdfV09SRFNfU0VHX05VTSwKKwkJCQlzaXplb2Yoc3RydWN0IG1waV9jb3JlZHVtcF9zZWdtZW50X2hlYWRlcikKKwkJCQkrIHNpemVvZihtcGlfY29yZWR1bXAtPm5pY19yb3V0aW5nX3dvcmRzKSwKKwkJCQkiUm91dGluZyBXb3JkcyIpOworCXN0YXR1cyA9IHFsX2dldF9yb3V0aW5nX2VudHJpZXMocWRldiwKKwkJCSAmbXBpX2NvcmVkdW1wLT5uaWNfcm91dGluZ193b3Jkc1swXSk7CisJaWYgKHN0YXR1cykKKwkJZ290byBlcnI7CisKKwkvKiBTZWdtZW50IDM0IChSZXYgQy4gc3RlcCAyMykgKi8KKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPmV0c19zZWdfaGRyLAorCQkJCUVUU19TRUdfTlVNLAorCQkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKQorCQkJCSsgc2l6ZW9mKG1waV9jb3JlZHVtcC0+ZXRzKSwKKwkJCQkiRVRTIFJlZ2lzdGVycyIpOworCXN0YXR1cyA9IHFsX2dldF9ldHNfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT5ldHNbMF0pOworCWlmIChzdGF0dXMpCisJCWdvdG8gZXJyOworCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5wcm9iZV9kdW1wX3NlZ19oZHIsCisJCQkJUFJPQkVfRFVNUF9TRUdfTlVNLAorCQkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKQorCQkJCSsgc2l6ZW9mKG1waV9jb3JlZHVtcC0+cHJvYmVfZHVtcCksCisJCQkJIlByb2JlIER1bXAiKTsKKwlxbF9nZXRfcHJvYmVfZHVtcChxZGV2LCAmbXBpX2NvcmVkdW1wLT5wcm9iZV9kdW1wWzBdKTsKKworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+cm91dGluZ19yZWdfc2VnX2hkciwKKwkJCQlST1VUSU5HX0lOREVYX1NFR19OVU0sCisJCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpCisJCQkJKyBzaXplb2YobXBpX2NvcmVkdW1wLT5yb3V0aW5nX3JlZ3MpLAorCQkJCSJSb3V0aW5nIFJlZ3MiKTsKKwlzdGF0dXMgPSBxbF9nZXRfcm91dGluZ19pbmRleF9yZWdpc3RlcnMocWRldiwKKwkJCQkJJm1waV9jb3JlZHVtcC0+cm91dGluZ19yZWdzWzBdKTsKKwlpZiAoc3RhdHVzKQorCQlnb3RvIGVycjsKKworCXFsX2J1aWxkX2NvcmVkdW1wX3NlZ19oZWFkZXIoJm1waV9jb3JlZHVtcC0+bWFjX3Byb3RfcmVnX3NlZ19oZHIsCisJCQkJTUFDX1BST1RPQ09MX1NFR19OVU0sCisJCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpCisJCQkJKyBzaXplb2YobXBpX2NvcmVkdW1wLT5tYWNfcHJvdF9yZWdzKSwKKwkJCQkiTUFDIFByb3QgUmVncyIpOworCXFsX2dldF9tYWNfcHJvdG9jb2xfcmVnaXN0ZXJzKHFkZXYsICZtcGlfY29yZWR1bXAtPm1hY19wcm90X3JlZ3NbMF0pOworCisJLyogR2V0IHRoZSBzZW1hcGhvcmUgcmVnaXN0ZXJzIGZvciBhbGwgNSBmdW5jdGlvbnMgKi8KKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPnNlbV9yZWdzX3NlZ19oZHIsCisJCQlTRU1fUkVHU19TRUdfTlVNLAorCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpICsKKwkJCXNpemVvZihtcGlfY29yZWR1bXAtPnNlbV9yZWdzKSwJIlNlbSBSZWdpc3RlcnMiKTsKKworCXFsX2dldF9zZW1fcmVnaXN0ZXJzKHFkZXYsICZtcGlfY29yZWR1bXAtPnNlbV9yZWdzWzBdKTsKKworCS8qIFByZXZlbnQgdGhlIG1waSByZXN0YXJ0aW5nIHdoaWxlIHdlIGR1bXAgdGhlIG1lbW9yeS4qLworCXFsX3dyaXRlX21waV9yZWcocWRldiwgTVBJX1RFU1RfRlVOQ19SU1RfU1RTLCBNUElfVEVTVF9GVU5DX1JTVF9GUkMpOworCisJLyogY2xlYXIgdGhlIHBhdXNlICovCisJc3RhdHVzID0gcWxfdW5wYXVzZV9tcGlfcmlzYyhxZGV2KTsKKwlpZiAoc3RhdHVzKSB7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJGYWlsZWQgUklTQyB1bnBhdXNlLiBTdGF0dXMgPSAweCUuMDh4XG4iLCBzdGF0dXMpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBSZXNldCB0aGUgUklTQyBzbyB3ZSBjYW4gZHVtcCBSQU0gKi8KKwlzdGF0dXMgPSBxbF9oYXJkX3Jlc2V0X21waV9yaXNjKHFkZXYpOworCWlmIChzdGF0dXMpIHsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkZhaWxlZCBSSVNDIHJlc2V0LiBTdGF0dXMgPSAweCUuMDh4XG4iLCBzdGF0dXMpOworCQlnb3RvIGVycjsKKwl9CisKKwlxbF9idWlsZF9jb3JlZHVtcF9zZWdfaGVhZGVyKCZtcGlfY29yZWR1bXAtPmNvZGVfcmFtX3NlZ19oZHIsCisJCQkJV0NTX1JBTV9TRUdfTlVNLAorCQkJCXNpemVvZihzdHJ1Y3QgbXBpX2NvcmVkdW1wX3NlZ21lbnRfaGVhZGVyKQorCQkJCSsgc2l6ZW9mKG1waV9jb3JlZHVtcC0+Y29kZV9yYW0pLAorCQkJCSJXQ1MgUkFNIik7CisJc3RhdHVzID0gcWxfZHVtcF9yaXNjX3JhbV9hcmVhKHFkZXYsICZtcGlfY29yZWR1bXAtPmNvZGVfcmFtWzBdLAorCQkJCQlDT0RFX1JBTV9BRERSLCBDT0RFX1JBTV9DTlQpOworCWlmIChzdGF0dXMpIHsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkZhaWxlZCBEdW1wIG9mIENPREUgUkFNLiBTdGF0dXMgPSAweCUuMDh4XG4iLAorCQkJICBzdGF0dXMpOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBJbnNlcnQgdGhlIHNlZ21lbnQgaGVhZGVyICovCisJcWxfYnVpbGRfY29yZWR1bXBfc2VnX2hlYWRlcigmbXBpX2NvcmVkdW1wLT5tZW1jX3JhbV9zZWdfaGRyLAorCQkJCU1FTUNfUkFNX1NFR19OVU0sCisJCQkJc2l6ZW9mKHN0cnVjdCBtcGlfY29yZWR1bXBfc2VnbWVudF9oZWFkZXIpCisJCQkJKyBzaXplb2YobXBpX2NvcmVkdW1wLT5tZW1jX3JhbSksCisJCQkJIk1FTUMgUkFNIik7CisJc3RhdHVzID0gcWxfZHVtcF9yaXNjX3JhbV9hcmVhKHFkZXYsICZtcGlfY29yZWR1bXAtPm1lbWNfcmFtWzBdLAorCQkJCQlNRU1DX1JBTV9BRERSLCBNRU1DX1JBTV9DTlQpOworCWlmIChzdGF0dXMpIHsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkZhaWxlZCBEdW1wIG9mIE1FTUMgUkFNLiBTdGF0dXMgPSAweCUuMDh4XG4iLAorCQkJICBzdGF0dXMpOworCQlnb3RvIGVycjsKKwl9CitlcnI6CisJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fUFJPQ19SRUdfTUFTSyk7IC8qIGRvZXMgZmx1c2ggdG9vICovCisJcmV0dXJuIHN0YXR1czsKKworfQorCitzdGF0aWMgdm9pZCBxbF9nZXRfY29yZV9kdW1wKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCWlmICghcWxfb3duX2Zpcm13YXJlKHFkZXYpKSB7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsICJEb24ndCBvd24gZmlybXdhcmUhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghbmV0aWZfcnVubmluZyhxZGV2LT5uZGV2KSkgeworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCSAgIkZvcmNlIENvcmVkdW1wIGNhbiBvbmx5IGJlIGRvbmUgZnJvbSBpbnRlcmZhY2UgdGhhdCBpcyB1cC5cbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKHFsX21iX3N5c19lcnIocWRldikpIHsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkgICJGYWlsIGZvcmNlIGNvcmVkdW1wIHdpdGggcWxfbWJfc3lzX2VycigpLlxuIik7CisJCXJldHVybjsKKwl9Cit9CisKIHZvaWQgcWxfZ2VuX3JlZ19kdW1wKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LAogCQkJc3RydWN0IHFsX3JlZ19kdW1wICptcGlfY29yZWR1bXApCiB7CkBAIC0xNzgsNiArMTMxOCwzNyBAQAogCXN0YXR1cyA9IHFsX2dldF9ldHNfcmVncyhxZGV2LCAmbXBpX2NvcmVkdW1wLT5ldHNbMF0pOwogCWlmIChzdGF0dXMpCiAJCXJldHVybjsKKworCWlmICh0ZXN0X2JpdChRTF9GUkNfQ09SRURVTVAsICZxZGV2LT5mbGFncykpCisJCXFsX2dldF9jb3JlX2R1bXAocWRldik7Cit9CisKKy8qIENvcmVkdW1wIHRvIG1lc3NhZ2VzIGxvZyBmaWxlIHVzaW5nIHNlcGFyYXRlIHdvcmtlciB0aHJlYWQgKi8KK3ZvaWQgcWxfbXBpX2NvcmVfdG9fbG9nKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcWxfYWRhcHRlciwgbXBpX2NvcmVfdG9fbG9nLndvcmspOworCXUzMiAqdG1wLCBjb3VudDsKKwlpbnQgaTsKKworCWNvdW50ID0gc2l6ZW9mKHN0cnVjdCBxbF9tcGlfY29yZWR1bXApIC8gc2l6ZW9mKHUzMik7CisJdG1wID0gKHUzMiAqKXFkZXYtPm1waV9jb3JlZHVtcDsKKwluZXRpZl9wcmludGsocWRldiwgZHJ2LCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkgICAgICJDb3JlIGlzIGR1bXBpbmcgdG8gbG9nIGZpbGUhXG4iKTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSArPSA4KSB7CisJCXByaW50ayhLRVJOX0VSUiAiJS4wOHg6ICUuMDh4ICUuMDh4ICUuMDh4ICUuMDh4ICUuMDh4ICIKKwkJCSIlLjA4eCAlLjA4eCAlLjA4eCBcbiIsIGksCisJCQl0bXBbaSArIDBdLAorCQkJdG1wW2kgKyAxXSwKKwkJCXRtcFtpICsgMl0sCisJCQl0bXBbaSArIDNdLAorCQkJdG1wW2kgKyA0XSwKKwkJCXRtcFtpICsgNV0sCisJCQl0bXBbaSArIDZdLAorCQkJdG1wW2kgKyA3XSk7CisJCW1zbGVlcCg1KTsKKwl9CiB9CiAKICNpZmRlZiBRTF9SRUdfRFVNUApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9ldGh0b29sLmMKaW5kZXggMDU4ZmEwYS4uN2RiZmY4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcWxnZS9xbGdlX2V0aHRvb2wuYworKysgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfZXRodG9vbC5jCkBAIC02Nyw4ICs2Nyw4IEBACiAJCQlzdGF0dXMgPSBxbF93cml0ZV9jZmcocWRldiwgY3FpY2IsIHNpemVvZigqY3FpY2IpLAogCQkJCQkJQ0ZHX0xDUSwgcnhfcmluZy0+Y3FfaWQpOwogCQkJaWYgKHN0YXR1cykgewotCQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCQkiRmFpbGVkIHRvIGxvYWQgQ1FJQ0IuXG4iKTsKKwkJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkJICAiRmFpbGVkIHRvIGxvYWQgQ1FJQ0IuXG4iKTsKIAkJCQlnb3RvIGV4aXQ7CiAJCQl9CiAJCX0KQEAgLTg5LDggKzg5LDggQEAKIAkJCXN0YXR1cyA9IHFsX3dyaXRlX2NmZyhxZGV2LCBjcWljYiwgc2l6ZW9mKCpjcWljYiksCiAJCQkJCQlDRkdfTENRLCByeF9yaW5nLT5jcV9pZCk7CiAJCQlpZiAoc3RhdHVzKSB7Ci0JCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJCSJGYWlsZWQgdG8gbG9hZCBDUUlDQi5cbiIpOworCQkJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJCQkgICJGYWlsZWQgdG8gbG9hZCBDUUlDQi5cbiIpOwogCQkJCWdvdG8gZXhpdDsKIAkJCX0KIAkJfQpAQCAtMTA3LDggKzEwNyw4IEBACiAKIAlzcGluX2xvY2soJnFkZXYtPnN0YXRzX2xvY2spOwogCWlmIChxbF9zZW1fc3BpbmxvY2socWRldiwgcWRldi0+eGdfc2VtX21hc2spKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJCSJDb3VsZG4ndCBnZXQgeGdtYWMgc2VtLlxuIik7CisJCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJCSAgIkNvdWxkbid0IGdldCB4Z21hYyBzZW0uXG4iKTsKIAkJZ290byBxdWl0OwogCX0KIAkvKgpAQCAtMTE2LDggKzExNiw5IEBACiAJICovCiAJZm9yIChpID0gMHgyMDA7IGkgPCAweDI4MDsgaSArPSA4KSB7CiAJCWlmIChxbF9yZWFkX3hnbWFjX3JlZzY0KHFkZXYsIGksICZkYXRhKSkgewotCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCQkiRXJyb3IgcmVhZGluZyBzdGF0dXMgcmVnaXN0ZXIgMHglLjA0eC5cbiIsIGkpOworCQkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCQkgICJFcnJvciByZWFkaW5nIHN0YXR1cyByZWdpc3RlciAweCUuMDR4LlxuIiwKKwkJCQkgIGkpOwogCQkJZ290byBlbmQ7CiAJCX0gZWxzZQogCQkJKml0ZXIgPSBkYXRhOwpAQCAtMTI5LDggKzEzMCw5IEBACiAJICovCiAJZm9yIChpID0gMHgzMDA7IGkgPCAweDNkMDsgaSArPSA4KSB7CiAJCWlmIChxbF9yZWFkX3hnbWFjX3JlZzY0KHFkZXYsIGksICZkYXRhKSkgewotCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCQkiRXJyb3IgcmVhZGluZyBzdGF0dXMgcmVnaXN0ZXIgMHglLjA0eC5cbiIsIGkpOworCQkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCQkgICJFcnJvciByZWFkaW5nIHN0YXR1cyByZWdpc3RlciAweCUuMDR4LlxuIiwKKwkJCQkgIGkpOwogCQkJZ290byBlbmQ7CiAJCX0gZWxzZQogCQkJKml0ZXIgPSBkYXRhOwpAQCAtMTQyLDggKzE0NCw5IEBACiAJICovCiAJZm9yIChpID0gMHg1MDA7IGkgPCAweDU0MDsgaSArPSA4KSB7CiAJCWlmIChxbF9yZWFkX3hnbWFjX3JlZzY0KHFkZXYsIGksICZkYXRhKSkgewotCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCQkiRXJyb3IgcmVhZGluZyBzdGF0dXMgcmVnaXN0ZXIgMHglLjA0eC5cbiIsIGkpOworCQkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCQkgICJFcnJvciByZWFkaW5nIHN0YXR1cyByZWdpc3RlciAweCUuMDR4LlxuIiwKKwkJCQkgIGkpOwogCQkJZ290byBlbmQ7CiAJCX0gZWxzZQogCQkJKml0ZXIgPSBkYXRhOwpAQCAtMTU1LDggKzE1OCw5IEBACiAJICovCiAJZm9yIChpID0gMHg1Njg7IGkgPCAweDVhODsgaSArPSA4KSB7CiAJCWlmIChxbF9yZWFkX3hnbWFjX3JlZzY0KHFkZXYsIGksICZkYXRhKSkgewotCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCQkiRXJyb3IgcmVhZGluZyBzdGF0dXMgcmVnaXN0ZXIgMHglLjA0eC5cbiIsIGkpOworCQkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCQkgICJFcnJvciByZWFkaW5nIHN0YXR1cyByZWdpc3RlciAweCUuMDR4LlxuIiwKKwkJCQkgIGkpOwogCQkJZ290byBlbmQ7CiAJCX0gZWxzZQogCQkJKml0ZXIgPSBkYXRhOwpAQCAtMTY3LDggKzE3MSw4IEBACiAJICogR2V0IFJYIE5JQyBGSUZPIERST1Agc3RhdGlzdGljcy4KIAkgKi8KIAlpZiAocWxfcmVhZF94Z21hY19yZWc2NChxZGV2LCAweDViOCwgJmRhdGEpKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiRXJyb3IgcmVhZGluZyBzdGF0dXMgcmVnaXN0ZXIgMHglLjA0eC5cbiIsIGkpOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJICAiRXJyb3IgcmVhZGluZyBzdGF0dXMgcmVnaXN0ZXIgMHglLjA0eC5cbiIsIGkpOwogCQlnb3RvIGVuZDsKIAl9IGVsc2UKIAkJKml0ZXIgPSBkYXRhOwpAQCAtMzk2LDE0ICs0MDAsMTMgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcWRldi0+d29sID0gd29sLT53b2xvcHRzOwogCi0JUVBSSU5USyhxZGV2LCBEUlYsIElORk8sICJTZXQgd29sIG9wdGlvbiAweCV4IG9uICVzXG4iLAotCQkJIHFkZXYtPndvbCwgbmRldi0+bmFtZSk7CisJbmV0aWZfaW5mbyhxZGV2LCBkcnYsIHFkZXYtPm5kZXYsICJTZXQgd29sIG9wdGlvbiAweCV4XG4iLCBxZGV2LT53b2wpOwogCWlmICghcWRldi0+d29sKSB7CiAJCXUzMiB3b2wgPSAwOwogCQlzdGF0dXMgPSBxbF9tYl93b2xfbW9kZShxZGV2LCB3b2wpOwotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiV09MICVzICh3b2wgY29kZSAweCV4KSBvbiAlc1xuIiwKLQkJCShzdGF0dXMgPT0gMCkgPyAiY2xlYXJlZCBzdWNlc3NmdWxseSIgOiAiY2xlYXIgZmFpbGVkIiwKLQkJCXdvbCwgcWRldi0+bmRldi0+bmFtZSk7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsICJXT0wgJXMgKHdvbCBjb2RlIDB4JXgpXG4iLAorCQkJICBzdGF0dXMgPT0gMCA/ICJjbGVhcmVkIHN1Y2Nlc3NmdWxseSIgOiAiY2xlYXIgZmFpbGVkIiwKKwkJCSAgd29sKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTUwMCw3ICs1MDMsOCBAQAogCQkJcmV0dXJuIC1FUElQRTsKIAkJYXRvbWljX2luYygmcWRldi0+bGJfY291bnQpOwogCX0KLQorCS8qIEdpdmUgcXVldWUgdGltZSB0byBzZXR0bGUgYmVmb3JlIHRlc3RpbmcgcmVzdWx0cy4gKi8KKwltc2xlZXAoMik7CiAJcWxfY2xlYW5fbGJfcnhfcmluZygmcWRldi0+cnhfcmluZ1swXSwgMTI4KTsKIAlyZXR1cm4gYXRvbWljX3JlYWQoJnFkZXYtPmxiX2NvdW50KSA/IC1FSU8gOiAwOwogfQpAQCAtNTMzLDkgKzUzNywxMyBAQAogCQkJZGF0YVswXSA9IDA7CiAJCX0KIAkJY2xlYXJfYml0KFFMX1NFTEZURVNULCAmcWRldi0+ZmxhZ3MpOworCQkvKiBHaXZlIGxpbmsgdGltZSB0byBjb21lIHVwIGFmdGVyCisJCSAqIHBvcnQgY29uZmlndXJhdGlvbiBjaGFuZ2VzLgorCQkgKi8KKwkJbXNsZWVwX2ludGVycnVwdGlibGUoNCAqIDEwMDApOwogCX0gZWxzZSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiJXM6IGlzIGRvd24sIExvb3BiYWNrIHRlc3Qgd2lsbCBmYWlsLlxuIiwgbmRldi0+bmFtZSk7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJpcyBkb3duLCBMb29wYmFjayB0ZXN0IHdpbGwgZmFpbC5cbiIpOwogCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJTEVEOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMgYi9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbWFpbi5jCmluZGV4IDg5NGE3YzguLmZkMzRmMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21haW4uYwpAQCAtNzMsNyArNzMsMTkgQEAKIG1vZHVsZV9wYXJhbShxbGdlX2lycV90eXBlLCBpbnQsIE1TSVhfSVJRKTsKIE1PRFVMRV9QQVJNX0RFU0MocWxnZV9pcnFfdHlwZSwgIjAgPSBNU0ktWCwgMSA9IE1TSSwgMiA9IExlZ2FjeS4iKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHFsZ2VfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgaW50IHFsZ2VfbXBpX2NvcmVkdW1wOworbW9kdWxlX3BhcmFtKHFsZ2VfbXBpX2NvcmVkdW1wLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhxbGdlX21waV9jb3JlZHVtcCwKKwkJIk9wdGlvbiB0byBlbmFibGUgTVBJIGZpcm13YXJlIGR1bXAuICIKKwkJIkRlZmF1bHQgaXMgT0ZGIC0gRG8gTm90IGFsbG9jYXRlIG1lbW9yeS4gIik7CisKK3N0YXRpYyBpbnQgcWxnZV9mb3JjZV9jb3JlZHVtcDsKK21vZHVsZV9wYXJhbShxbGdlX2ZvcmNlX2NvcmVkdW1wLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhxbGdlX2ZvcmNlX2NvcmVkdW1wLAorCQkiT3B0aW9uIHRvIGFsbG93IGZvcmNlIG9mIGZpcm13YXJlIGNvcmUgZHVtcC4gIgorCQkiRGVmYXVsdCBpcyBPRkYgLSBEbyBub3QgYWxsb3cuIik7CisKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShxbGdlX3BjaV90YmwpID0gewogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfUUxPR0lDLCBRTEdFX0RFVklDRV9JRF84MDEyKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9RTE9HSUMsIFFMR0VfREVWSUNFX0lEXzgwMDApfSwKIAkvKiByZXF1aXJlZCBsYXN0IGVudHJ5ICovCkBAIC0xMTYsNyArMTI4LDcgQEAKIAkJc2VtX2JpdHMgPSBTRU1fU0VUIDw8IFNFTV9QUk9DX1JFR19TSElGVDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJUVBSSU5USyhxZGV2LCBQUk9CRSwgQUxFUlQsICJCYWQgU2VtYXBob3JlIG1hc2shLlxuIik7CisJCW5ldGlmX2FsZXJ0KHFkZXYsIHByb2JlLCBxZGV2LT5uZGV2LCAiYmFkIFNlbWFwaG9yZSBtYXNrIS5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE1NiwxNyArMTY4LDE3IEBACiAKIAkJLyogY2hlY2sgZm9yIGVycm9ycyAqLwogCQlpZiAodGVtcCAmIGVycl9iaXQpIHsKLQkJCVFQUklOVEsocWRldiwgUFJPQkUsIEFMRVJULAotCQkJCSJyZWdpc3RlciAweCUuMDh4IGFjY2VzcyBlcnJvciwgdmFsdWUgPSAweCUuMDh4IS5cbiIsCi0JCQkJcmVnLCB0ZW1wKTsKKwkJCW5ldGlmX2FsZXJ0KHFkZXYsIHByb2JlLCBxZGV2LT5uZGV2LAorCQkJCSAgICAicmVnaXN0ZXIgMHglLjA4eCBhY2Nlc3MgZXJyb3IsIHZhbHVlID0gMHglLjA4eCEuXG4iLAorCQkJCSAgICByZWcsIHRlbXApOwogCQkJcmV0dXJuIC1FSU87CiAJCX0gZWxzZSBpZiAodGVtcCAmIGJpdCkKIAkJCXJldHVybiAwOwogCQl1ZGVsYXkoVURFTEFZX0RFTEFZKTsKIAkJY291bnQtLTsKIAl9Ci0JUVBSSU5USyhxZGV2LCBQUk9CRSwgQUxFUlQsCi0JCSJUaW1lZCBvdXQgd2FpdGluZyBmb3IgcmVnICV4IHRvIGNvbWUgcmVhZHkuXG4iLCByZWcpOworCW5ldGlmX2FsZXJ0KHFkZXYsIHByb2JlLCBxZGV2LT5uZGV2LAorCQkgICAgIlRpbWVkIG91dCB3YWl0aW5nIGZvciByZWcgJXggdG8gY29tZSByZWFkeS5cbiIsIHJlZyk7CiAJcmV0dXJuIC1FVElNRURPVVQ7CiB9CiAKQEAgLTIwOSw3ICsyMjEsNyBAQAogCiAJbWFwID0gcGNpX21hcF9zaW5nbGUocWRldi0+cGRldiwgcHRyLCBzaXplLCBkaXJlY3Rpb24pOwogCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IocWRldi0+cGRldiwgbWFwKSkgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkNvdWxkbid0IG1hcCBETUEgYXJlYS5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwgIkNvdWxkbid0IG1hcCBETUEgYXJlYS5cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTIxOSw4ICsyMzEsOCBAQAogCiAJc3RhdHVzID0gcWxfd2FpdF9jZmcocWRldiwgYml0KTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJIlRpbWVkIG91dCB3YWl0aW5nIGZvciBDRkcgdG8gY29tZSByZWFkeS5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCSAgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBDRkcgdG8gY29tZSByZWFkeS5cbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCkBAIC0zMDEsOCArMzEzLDggQEAKIAljYXNlIE1BQ19BRERSX1RZUEVfVkxBTjoKIAljYXNlIE1BQ19BRERSX1RZUEVfTVVMVElfRkxUUjoKIAlkZWZhdWx0OgotCQlRUFJJTlRLKHFkZXYsIElGVVAsIENSSVQsCi0JCQkiQWRkcmVzcyB0eXBlICVkIG5vdCB5ZXQgc3VwcG9ydGVkLlxuIiwgdHlwZSk7CisJCW5ldGlmX2NyaXQocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCSAgICJBZGRyZXNzIHR5cGUgJWQgbm90IHlldCBzdXBwb3J0ZWQuXG4iLCB0eXBlKTsKIAkJc3RhdHVzID0gLUVQRVJNOwogCX0KIGV4aXQ6CkBAIC0zNTksMTIgKzM3MSwxMSBAQAogCQkJICAgIChhZGRyWzJdIDw8IDI0KSB8IChhZGRyWzNdIDw8IDE2KSB8IChhZGRyWzRdIDw8IDgpIHwKIAkJCSAgICAoYWRkcls1XSk7CiAKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCi0JCQkJIkFkZGluZyAlcyBhZGRyZXNzICVwTSIKLQkJCQkiIGF0IGluZGV4ICVkIGluIHRoZSBDQU0uXG4iLAotCQkJCSgodHlwZSA9PQotCQkJCSAgTUFDX0FERFJfVFlQRV9NVUxUSV9NQUMpID8gIk1VTFRJQ0FTVCIgOgotCQkJCSAiVU5JQ0FTVCIpLCBhZGRyLCBpbmRleCk7CisJCQluZXRpZl9wcmludGsocWRldiwgaWZ1cCwgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCQkgICAgICJBZGRpbmcgJXMgYWRkcmVzcyAlcE0gYXQgaW5kZXggJWQgaW4gdGhlIENBTS5cbiIsCisJCQkJICAgICB0eXBlID09IE1BQ19BRERSX1RZUEVfTVVMVElfTUFDID8KKwkJCQkgICAgICJNVUxUSUNBU1QiIDogIlVOSUNBU1QiLAorCQkJCSAgICAgYWRkciwgaW5kZXgpOwogCiAJCQlzdGF0dXMgPQogCQkJICAgIHFsX3dhaXRfcmVnX3JkeShxZGV2LApAQCAtNDE0LDkgKzQyNSwxMSBAQAogCQkJICogYWRkcmVzc2luZy4gSXQncyBlaXRoZXIgTUFDX0FERFJfRSBvbiBvciBvZmYuCiAJCQkgKiBUaGF0J3MgYml0LTI3IHdlJ3JlIHRhbGtpbmcgYWJvdXQuCiAJCQkgKi8KLQkJCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywgIiVzIFZMQU4gSUQgJWQgJXMgdGhlIENBTS5cbiIsCi0JCQkJKGVuYWJsZV9iaXQgPyAiQWRkaW5nIiA6ICJSZW1vdmluZyIpLAotCQkJCWluZGV4LCAoZW5hYmxlX2JpdCA/ICJ0byIgOiAiZnJvbSIpKTsKKwkJCW5ldGlmX2luZm8ocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICAiJXMgVkxBTiBJRCAlZCAlcyB0aGUgQ0FNLlxuIiwKKwkJCQkgICBlbmFibGVfYml0ID8gIkFkZGluZyIgOiAiUmVtb3ZpbmciLAorCQkJCSAgIGluZGV4LAorCQkJCSAgIGVuYWJsZV9iaXQgPyAidG8iIDogImZyb20iKTsKIAogCQkJc3RhdHVzID0KIAkJCSAgICBxbF93YWl0X3JlZ19yZHkocWRldiwKQEAgLTQzMSw4ICs0NDQsOCBAQAogCQl9CiAJY2FzZSBNQUNfQUREUl9UWVBFX01VTFRJX0ZMVFI6CiAJZGVmYXVsdDoKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBDUklULAotCQkJIkFkZHJlc3MgdHlwZSAlZCBub3QgeWV0IHN1cHBvcnRlZC5cbiIsIHR5cGUpOworCQluZXRpZl9jcml0KHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkgICAiQWRkcmVzcyB0eXBlICVkIG5vdCB5ZXQgc3VwcG9ydGVkLlxuIiwgdHlwZSk7CiAJCXN0YXR1cyA9IC1FUEVSTTsKIAl9CiBleGl0OgpAQCAtNDUwLDE3ICs0NjMsMTQgQEAKIAljaGFyICphZGRyOwogCiAJaWYgKHNldCkgewotCQlhZGRyID0gJnFkZXYtPm5kZXYtPmRldl9hZGRyWzBdOwotCQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLAotCQkJIlNldCBNYWMgYWRkciAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJCWFkZHJbMF0sIGFkZHJbMV0sIGFkZHJbMl0sIGFkZHJbM10sCi0JCQlhZGRyWzRdLCBhZGRyWzVdKTsKKwkJYWRkciA9ICZxZGV2LT5jdXJyZW50X21hY19hZGRyWzBdOworCQluZXRpZl9wcmludGsocWRldiwgaWZ1cCwgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCSAgICAgIlNldCBNYWMgYWRkciAlcE1cbiIsIGFkZHIpOwogCX0gZWxzZSB7CiAJCW1lbXNldCh6ZXJvX21hY19hZGRyLCAwLCBFVEhfQUxFTik7CiAJCWFkZHIgPSAmemVyb19tYWNfYWRkclswXTsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywKLQkJCQkiQ2xlYXJpbmcgTUFDIGFkZHJlc3Mgb24gJXNcbiIsCi0JCQkJcWRldi0+bmRldi0+bmFtZSk7CisJCW5ldGlmX3ByaW50ayhxZGV2LCBpZnVwLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJICAgICAiQ2xlYXJpbmcgTUFDIGFkZHJlc3NcbiIpOwogCX0KIAlzdGF0dXMgPSBxbF9zZW1fc3BpbmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwogCWlmIChzdGF0dXMpCkBAIC00NjksMjMgKzQ3OSwyMSBAQAogCQkJTUFDX0FERFJfVFlQRV9DQU1fTUFDLCBxZGV2LT5mdW5jICogTUFYX0NRKTsKIAlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIAlpZiAoc3RhdHVzKQotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBpbml0IG1hYyAiCi0JCQkiYWRkcmVzcy5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCSAgIkZhaWxlZCB0byBpbml0IG1hYyBhZGRyZXNzLlxuIik7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAogdm9pZCBxbF9saW5rX29uKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQogewotCVFQUklOVEsocWRldiwgTElOSywgRVJSLCAiJXM6IExpbmsgaXMgdXAuXG4iLAotCQkJCSBxZGV2LT5uZGV2LT5uYW1lKTsKKwluZXRpZl9lcnIocWRldiwgbGluaywgcWRldi0+bmRldiwgIkxpbmsgaXMgdXAuXG4iKTsKIAluZXRpZl9jYXJyaWVyX29uKHFkZXYtPm5kZXYpOwogCXFsX3NldF9tYWNfYWRkcihxZGV2LCAxKTsKIH0KIAogdm9pZCBxbF9saW5rX29mZihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldikKIHsKLQlRUFJJTlRLKHFkZXYsIExJTkssIEVSUiwgIiVzOiBMaW5rIGlzIGRvd24uXG4iLAotCQkJCSBxZGV2LT5uZGV2LT5uYW1lKTsKKwluZXRpZl9lcnIocWRldiwgbGluaywgcWRldi0+bmRldiwgIkxpbmsgaXMgZG93bi5cbiIpOwogCW5ldGlmX2NhcnJpZXJfb2ZmKHFkZXYtPm5kZXYpOwogCXFsX3NldF9tYWNfYWRkcihxZGV2LCAwKTsKIH0KQEAgLTUyMiwyNyArNTMwLDI3IEBACiAJaW50IHN0YXR1cyA9IC1FSU5WQUw7IC8qIFJldHVybiBlcnJvciBpZiBubyBtYXNrIG1hdGNoLiAqLwogCXUzMiB2YWx1ZSA9IDA7CiAKLQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLAotCQkiJXMgJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMlcyVzJXMgbWFzayAlcyB0aGUgcm91dGluZyByZWcuXG4iLAotCQkoZW5hYmxlID8gIkFkZGluZyIgOiAiUmVtb3ZpbmciKSwKLQkJKChpbmRleCA9PSBSVF9JRFhfQUxMX0VSUl9TTE9UKSA/ICJNQUMgRVJST1IvQUxMIEVSUk9SIiA6ICIiKSwKLQkJKChpbmRleCA9PSBSVF9JRFhfSVBfQ1NVTV9FUlJfU0xPVCkgPyAiSVAgQ1NVTSBFUlJPUiIgOiAiIiksCi0JCSgoaW5kZXggPT0KLQkJICBSVF9JRFhfVENQX1VEUF9DU1VNX0VSUl9TTE9UKSA/ICJUQ1AvVURQIENTVU0gRVJST1IiIDogIiIpLAotCQkoKGluZGV4ID09IFJUX0lEWF9CQ0FTVF9TTE9UKSA/ICJCUk9BRENBU1QiIDogIiIpLAotCQkoKGluZGV4ID09IFJUX0lEWF9NQ0FTVF9NQVRDSF9TTE9UKSA/ICJNVUxUSUNBU1QgTUFUQ0giIDogIiIpLAotCQkoKGluZGV4ID09IFJUX0lEWF9BTExNVUxUSV9TTE9UKSA/ICJBTEwgTVVMVElDQVNUIE1BVENIIiA6ICIiKSwKLQkJKChpbmRleCA9PSBSVF9JRFhfVU5VU0VENl9TTE9UKSA/ICJVTlVTRUQ2IiA6ICIiKSwKLQkJKChpbmRleCA9PSBSVF9JRFhfVU5VU0VEN19TTE9UKSA/ICJVTlVTRUQ3IiA6ICIiKSwKLQkJKChpbmRleCA9PSBSVF9JRFhfUlNTX01BVENIX1NMT1QpID8gIlJTUyBBTEwvSVBWNCBNQVRDSCIgOiAiIiksCi0JCSgoaW5kZXggPT0gUlRfSURYX1JTU19JUFY2X1NMT1QpID8gIlJTUyBJUFY2IiA6ICIiKSwKLQkJKChpbmRleCA9PSBSVF9JRFhfUlNTX1RDUDRfU0xPVCkgPyAiUlNTIFRDUDQiIDogIiIpLAotCQkoKGluZGV4ID09IFJUX0lEWF9SU1NfVENQNl9TTE9UKSA/ICJSU1MgVENQNiIgOiAiIiksCi0JCSgoaW5kZXggPT0gUlRfSURYX0NBTV9ISVRfU0xPVCkgPyAiQ0FNIEhJVCIgOiAiIiksCi0JCSgoaW5kZXggPT0gUlRfSURYX1VOVVNFRDAxMykgPyAiVU5VU0VEMTMiIDogIiIpLAotCQkoKGluZGV4ID09IFJUX0lEWF9VTlVTRUQwMTQpID8gIlVOVVNFRDE0IiA6ICIiKSwKLQkJKChpbmRleCA9PSBSVF9JRFhfUFJPTUlTQ1VPVVNfU0xPVCkgPyAiUFJPTUlTQ1VPVVMiIDogIiIpLAotCQkoZW5hYmxlID8gInRvIiA6ICJmcm9tIikpOworCW5ldGlmX3ByaW50ayhxZGV2LCBpZnVwLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkgICAgICIlcyAlcyBtYXNrICVzIHRoZSByb3V0aW5nIHJlZy5cbiIsCisJCSAgICAgZW5hYmxlID8gIkFkZGluZyIgOiAiUmVtb3ZpbmciLAorCQkgICAgIGluZGV4ID09IFJUX0lEWF9BTExfRVJSX1NMT1QgPyAiTUFDIEVSUk9SL0FMTCBFUlJPUiIgOgorCQkgICAgIGluZGV4ID09IFJUX0lEWF9JUF9DU1VNX0VSUl9TTE9UID8gIklQIENTVU0gRVJST1IiIDoKKwkJICAgICBpbmRleCA9PSBSVF9JRFhfVENQX1VEUF9DU1VNX0VSUl9TTE9UID8gIlRDUC9VRFAgQ1NVTSBFUlJPUiIgOgorCQkgICAgIGluZGV4ID09IFJUX0lEWF9CQ0FTVF9TTE9UID8gIkJST0FEQ0FTVCIgOgorCQkgICAgIGluZGV4ID09IFJUX0lEWF9NQ0FTVF9NQVRDSF9TTE9UID8gIk1VTFRJQ0FTVCBNQVRDSCIgOgorCQkgICAgIGluZGV4ID09IFJUX0lEWF9BTExNVUxUSV9TTE9UID8gIkFMTCBNVUxUSUNBU1QgTUFUQ0giIDoKKwkJICAgICBpbmRleCA9PSBSVF9JRFhfVU5VU0VENl9TTE9UID8gIlVOVVNFRDYiIDoKKwkJICAgICBpbmRleCA9PSBSVF9JRFhfVU5VU0VEN19TTE9UID8gIlVOVVNFRDciIDoKKwkJICAgICBpbmRleCA9PSBSVF9JRFhfUlNTX01BVENIX1NMT1QgPyAiUlNTIEFMTC9JUFY0IE1BVENIIiA6CisJCSAgICAgaW5kZXggPT0gUlRfSURYX1JTU19JUFY2X1NMT1QgPyAiUlNTIElQVjYiIDoKKwkJICAgICBpbmRleCA9PSBSVF9JRFhfUlNTX1RDUDRfU0xPVCA/ICJSU1MgVENQNCIgOgorCQkgICAgIGluZGV4ID09IFJUX0lEWF9SU1NfVENQNl9TTE9UID8gIlJTUyBUQ1A2IiA6CisJCSAgICAgaW5kZXggPT0gUlRfSURYX0NBTV9ISVRfU0xPVCA/ICJDQU0gSElUIiA6CisJCSAgICAgaW5kZXggPT0gUlRfSURYX1VOVVNFRDAxMyA/ICJVTlVTRUQxMyIgOgorCQkgICAgIGluZGV4ID09IFJUX0lEWF9VTlVTRUQwMTQgPyAiVU5VU0VEMTQiIDoKKwkJICAgICBpbmRleCA9PSBSVF9JRFhfUFJPTUlTQ1VPVVNfU0xPVCA/ICJQUk9NSVNDVU9VUyIgOgorCQkgICAgICIoQmFkIGluZGV4ICE9IFJUX0lEWCkiLAorCQkgICAgIGVuYWJsZSA/ICJ0byIgOiAiZnJvbSIpOwogCiAJc3dpdGNoIChtYXNrKSB7CiAJY2FzZSBSVF9JRFhfQ0FNX0hJVDoKQEAgLTYwMiw4ICs2MTAsOCBAQAogCQkJYnJlYWs7CiAJCX0KIAlkZWZhdWx0OgotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIk1hc2sgdHlwZSAlZCBub3QgeWV0IHN1cHBvcnRlZC5cbiIsCi0JCQltYXNrKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkgICJNYXNrIHR5cGUgJWQgbm90IHlldCBzdXBwb3J0ZWQuXG4iLCBtYXNrKTsKIAkJc3RhdHVzID0gLUVQRVJNOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtNzA5LDcgKzcxNyw3IEBACiAKIAlzdGF0dXMgPSBzdHJuY21wKChjaGFyICopJnFkZXYtPmZsYXNoLCBzdHIsIDQpOwogCWlmIChzdGF0dXMpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJJbnZhbGlkIGZsYXNoIHNpZ25hdHVyZS5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwgIkludmFsaWQgZmxhc2ggc2lnbmF0dXJlLlxuIik7CiAJCXJldHVybglzdGF0dXM7CiAJfQogCkBAIC03MTcsOCArNzI1LDggQEAKIAkJY3N1bSArPSBsZTE2X3RvX2NwdSgqZmxhc2grKyk7CiAKIAlpZiAoY3N1bSkKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkiSW52YWxpZCBmbGFzaCBjaGVja3N1bSwgY3N1bSA9IDB4JS4wNHguXG4iLCBjc3VtKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkgICJJbnZhbGlkIGZsYXNoIGNoZWNrc3VtLCBjc3VtID0gMHglLjA0eC5cbiIsIGNzdW0pOwogCiAJcmV0dXJuIGNzdW07CiB9CkBAIC03NzAsNyArNzc4LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrLCBwKyspIHsKIAkJc3RhdHVzID0gcWxfcmVhZF9mbGFzaF93b3JkKHFkZXYsIGkrb2Zmc2V0LCBwKTsKIAkJaWYgKHN0YXR1cykgewotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJFcnJvciByZWFkaW5nIGZsYXNoLlxuIik7CisJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICJFcnJvciByZWFkaW5nIGZsYXNoLlxuIik7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CkBAIC03NzksNyArNzg4LDcgQEAKIAkJCXNpemVvZihzdHJ1Y3QgZmxhc2hfcGFyYW1zXzgwMDApIC8gc2l6ZW9mKHUxNiksCiAJCQkiODAwMCIpOwogCWlmIChzdGF0dXMpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJJbnZhbGlkIGZsYXNoLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LCAiSW52YWxpZCBmbGFzaC5cbiIpOwogCQlzdGF0dXMgPSAtRUlOVkFMOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtNzk3LDcgKzgwNiw3IEBACiAJCQlxZGV2LT5uZGV2LT5hZGRyX2xlbik7CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobWFjX2FkZHIpKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiSW52YWxpZCBNQUMgYWRkcmVzcy5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwgIkludmFsaWQgTUFDIGFkZHJlc3MuXG4iKTsKIAkJc3RhdHVzID0gLUVJTlZBTDsKIAkJZ290byBleGl0OwogCX0KQEAgLTgzMSw3ICs4NDAsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyssIHArKykgewogCQlzdGF0dXMgPSBxbF9yZWFkX2ZsYXNoX3dvcmQocWRldiwgaStvZmZzZXQsIHApOwogCQlpZiAoc3RhdHVzKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkVycm9yIHJlYWRpbmcgZmxhc2guXG4iKTsKKwkJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJCSAgIkVycm9yIHJlYWRpbmcgZmxhc2guXG4iKTsKIAkJCWdvdG8gZXhpdDsKIAkJfQogCkBAIC04NDEsNyArODUxLDcgQEAKIAkJCXNpemVvZihzdHJ1Y3QgZmxhc2hfcGFyYW1zXzgwMTIpIC8gc2l6ZW9mKHUxNiksCiAJCQkiODAxMiIpOwogCWlmIChzdGF0dXMpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJJbnZhbGlkIGZsYXNoLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LCAiSW52YWxpZCBmbGFzaC5cbiIpOwogCQlzdGF0dXMgPSAtRUlOVkFMOwogCQlnb3RvIGV4aXQ7CiAJfQpAQCAtOTU5LDE3ICs5NjksMTcgQEAKIAkJLyogQW5vdGhlciBmdW5jdGlvbiBoYXMgdGhlIHNlbWFwaG9yZSwgc28KIAkJICogd2FpdCBmb3IgdGhlIHBvcnQgaW5pdCBiaXQgdG8gY29tZSByZWFkeS4KIAkJICovCi0JCVFQUklOVEsocWRldiwgTElOSywgSU5GTywKLQkJCSJBbm90aGVyIGZ1bmN0aW9uIGhhcyB0aGUgc2VtYXBob3JlLCBzbyB3YWl0IGZvciB0aGUgcG9ydCBpbml0IGJpdCB0byBjb21lIHJlYWR5LlxuIik7CisJCW5ldGlmX2luZm8ocWRldiwgbGluaywgcWRldi0+bmRldiwKKwkJCSAgICJBbm90aGVyIGZ1bmN0aW9uIGhhcyB0aGUgc2VtYXBob3JlLCBzbyB3YWl0IGZvciB0aGUgcG9ydCBpbml0IGJpdCB0byBjb21lIHJlYWR5LlxuIik7CiAJCXN0YXR1cyA9IHFsX3dhaXRfcmVnX3JkeShxZGV2LCBTVFMsIHFkZXYtPnBvcnRfaW5pdCwgMCk7CiAJCWlmIChzdGF0dXMpIHsKLQkJCVFQUklOVEsocWRldiwgTElOSywgQ1JJVCwKLQkJCQkiUG9ydCBpbml0aWFsaXplIHRpbWVkIG91dC5cbiIpOworCQkJbmV0aWZfY3JpdChxZGV2LCBsaW5rLCBxZGV2LT5uZGV2LAorCQkJCSAgICJQb3J0IGluaXRpYWxpemUgdGltZWQgb3V0LlxuIik7CiAJCX0KIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKLQlRUFJJTlRLKHFkZXYsIExJTkssIElORk8sICJHb3QgeGdtYWMgc2VtYXBob3JlIS5cbiIpOworCW5ldGlmX2luZm8ocWRldiwgbGluaywgcWRldi0+bmRldiwgIkdvdCB4Z21hYyBzZW1hcGhvcmUhLlxuIik7CiAJLyogU2V0IHRoZSBjb3JlIHJlc2V0LiAqLwogCXN0YXR1cyA9IHFsX3JlYWRfeGdtYWNfcmVnKHFkZXYsIEdMT0JBTF9DRkcsICZkYXRhKTsKIAlpZiAoc3RhdHVzKQpAQCAtMTA5OSw4ICsxMTA5LDggQEAKIAkJCQkJCUdGUF9BVE9NSUMsCiAJCQkJCQlxZGV2LT5sYnFfYnVmX29yZGVyKTsKIAkJaWYgKHVubGlrZWx5KCFyeF9yaW5nLT5wZ19jaHVuay5wYWdlKSkgewotCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCQkicGFnZSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOworCQkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCQkgICJwYWdlIGFsbG9jYXRpb24gZmFpbGVkLlxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQlyeF9yaW5nLT5wZ19jaHVuay5vZmZzZXQgPSAwOwpAQCAtMTExMCw4ICsxMTIwLDggQEAKIAkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihxZGV2LT5wZGV2LCBtYXApKSB7CiAJCQlfX2ZyZWVfcGFnZXMocnhfcmluZy0+cGdfY2h1bmsucGFnZSwKIAkJCQkJcWRldi0+bGJxX2J1Zl9vcmRlcik7Ci0JCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJCSJQQ0kgbWFwcGluZyBmYWlsZWQuXG4iKTsKKwkJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkJICAiUENJIG1hcHBpbmcgZmFpbGVkLlxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQlyeF9yaW5nLT5wZ19jaHVuay5tYXAgPSBtYXA7CkBAIC0xMTQ4LDE1ICsxMTU4LDE1IEBACiAKIAl3aGlsZSAocnhfcmluZy0+bGJxX2ZyZWVfY250ID4gMzIpIHsKIAkJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCQkibGJxOiB0cnkgY2xlYW5pbmcgY2xlYW5faWR4ID0gJWQuXG4iLAotCQkJCWNsZWFuX2lkeCk7CisJCQluZXRpZl9wcmludGsocWRldiwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCSAgICAgImxicTogdHJ5IGNsZWFuaW5nIGNsZWFuX2lkeCA9ICVkLlxuIiwKKwkJCQkgICAgIGNsZWFuX2lkeCk7CiAJCQlsYnFfZGVzYyA9ICZyeF9yaW5nLT5sYnFbY2xlYW5faWR4XTsKIAkJCWlmIChxbF9nZXRfbmV4dF9jaHVuayhxZGV2LCByeF9yaW5nLCBsYnFfZGVzYykpIHsKLQkJCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCQkJIkNvdWxkIG5vdCBnZXQgYSBwYWdlIGNodW5rLlxuIik7Ci0JCQkJCXJldHVybjsKLQkJCQl9CisJCQkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkJCSAgIkNvdWxkIG5vdCBnZXQgYSBwYWdlIGNodW5rLlxuIik7CisJCQkJcmV0dXJuOworCQkJfQogCiAJCQltYXAgPSBsYnFfZGVzYy0+cC5wZ19jaHVuay5tYXAgKwogCQkJCWxicV9kZXNjLT5wLnBnX2NodW5rLm9mZnNldDsKQEAgLTExODEsOSArMTE5MSw5IEBACiAJfQogCiAJaWYgKHN0YXJ0X2lkeCAhPSBjbGVhbl9pZHgpIHsKLQkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLAotCQkJImxicTogdXBkYXRpbmcgcHJvZCBpZHggPSAlZC5cbiIsCi0JCQlyeF9yaW5nLT5sYnFfcHJvZF9pZHgpOworCQluZXRpZl9wcmludGsocWRldiwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJICAgICAibGJxOiB1cGRhdGluZyBwcm9kIGlkeCA9ICVkLlxuIiwKKwkJCSAgICAgcnhfcmluZy0+bGJxX3Byb2RfaWR4KTsKIAkJcWxfd3JpdGVfZGJfcmVnKHJ4X3JpbmctPmxicV9wcm9kX2lkeCwKIAkJCQlyeF9yaW5nLT5sYnFfcHJvZF9pZHhfZGJfcmVnKTsKIAl9CkBAIC0xMjAxLDE5ICsxMjExLDIwIEBACiAJd2hpbGUgKHJ4X3JpbmctPnNicV9mcmVlX2NudCA+IDE2KSB7CiAJCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CiAJCQlzYnFfZGVzYyA9ICZyeF9yaW5nLT5zYnFbY2xlYW5faWR4XTsKLQkJCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCQkic2JxOiB0cnkgY2xlYW5pbmcgY2xlYW5faWR4ID0gJWQuXG4iLAotCQkJCWNsZWFuX2lkeCk7CisJCQluZXRpZl9wcmludGsocWRldiwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCSAgICAgInNicTogdHJ5IGNsZWFuaW5nIGNsZWFuX2lkeCA9ICVkLlxuIiwKKwkJCQkgICAgIGNsZWFuX2lkeCk7CiAJCQlpZiAoc2JxX2Rlc2MtPnAuc2tiID09IE5VTEwpIHsKLQkJCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkJCSJzYnE6IGdldHRpbmcgbmV3IHNrYiBmb3IgaW5kZXggJWQuXG4iLAotCQkJCQlzYnFfZGVzYy0+aW5kZXgpOworCQkJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsCisJCQkJCSAgICAgcWRldi0+bmRldiwKKwkJCQkJICAgICAic2JxOiBnZXR0aW5nIG5ldyBza2IgZm9yIGluZGV4ICVkLlxuIiwKKwkJCQkJICAgICBzYnFfZGVzYy0+aW5kZXgpOwogCQkJCXNicV9kZXNjLT5wLnNrYiA9CiAJCQkJICAgIG5ldGRldl9hbGxvY19za2IocWRldi0+bmRldiwKIAkJCQkJCSAgICAgU01BTExfQlVGRkVSX1NJWkUpOwogCQkJCWlmIChzYnFfZGVzYy0+cC5za2IgPT0gTlVMTCkgewotCQkJCQlRUFJJTlRLKHFkZXYsIFBST0JFLCBFUlIsCi0JCQkJCQkiQ291bGRuJ3QgZ2V0IGFuIHNrYi5cbiIpOworCQkJCQluZXRpZl9lcnIocWRldiwgcHJvYmUsIHFkZXYtPm5kZXYsCisJCQkJCQkgICJDb3VsZG4ndCBnZXQgYW4gc2tiLlxuIik7CiAJCQkJCXJ4X3JpbmctPnNicV9jbGVhbl9pZHggPSBjbGVhbl9pZHg7CiAJCQkJCXJldHVybjsKIAkJCQl9CkBAIC0xMjIzLDcgKzEyMzQsOCBAQAogCQkJCQkJICAgICByeF9yaW5nLT5zYnFfYnVmX3NpemUsCiAJCQkJCQkgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihxZGV2LT5wZGV2LCBtYXApKSB7Ci0JCQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiUENJIG1hcHBpbmcgZmFpbGVkLlxuIik7CisJCQkJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJCQkJICAiUENJIG1hcHBpbmcgZmFpbGVkLlxuIik7CiAJCQkJCXJ4X3JpbmctPnNicV9jbGVhbl9pZHggPSBjbGVhbl9pZHg7CiAJCQkJCWRldl9rZnJlZV9za2JfYW55KHNicV9kZXNjLT5wLnNrYik7CiAJCQkJCXNicV9kZXNjLT5wLnNrYiA9IE5VTEw7CkBAIC0xMjQ3LDkgKzEyNTksOSBAQAogCX0KIAogCWlmIChzdGFydF9pZHggIT0gY2xlYW5faWR4KSB7Ci0JCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCSJzYnE6IHVwZGF0aW5nIHByb2QgaWR4ID0gJWQuXG4iLAotCQkJcnhfcmluZy0+c2JxX3Byb2RfaWR4KTsKKwkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCSAgICAgInNicTogdXBkYXRpbmcgcHJvZCBpZHggPSAlZC5cbiIsCisJCQkgICAgIHJ4X3JpbmctPnNicV9wcm9kX2lkeCk7CiAJCXFsX3dyaXRlX2RiX3JlZyhyeF9yaW5nLT5zYnFfcHJvZF9pZHgsCiAJCQkJcnhfcmluZy0+c2JxX3Byb2RfaWR4X2RiX3JlZyk7CiAJfQpAQCAtMTI4MSw4ICsxMjkzLDkgQEAKIAkJCSAqIHRoZW4gaXRzIGFuIE9BTC4KIAkJCSAqLwogCQkJaWYgKGkgPT0gNykgewotCQkJCVFQUklOVEsocWRldiwgVFhfRE9ORSwgREVCVUcsCi0JCQkJCSJ1bm1hcHBpbmcgT0FMIGFyZWEuXG4iKTsKKwkJCQluZXRpZl9wcmludGsocWRldiwgdHhfZG9uZSwgS0VSTl9ERUJVRywKKwkJCQkJICAgICBxZGV2LT5uZGV2LAorCQkJCQkgICAgICJ1bm1hcHBpbmcgT0FMIGFyZWEuXG4iKTsKIAkJCX0KIAkJCXBjaV91bm1hcF9zaW5nbGUocWRldi0+cGRldiwKIAkJCQkJIHBjaV91bm1hcF9hZGRyKCZ0eF9yaW5nX2Rlc2MtPm1hcFtpXSwKQEAgLTEyOTEsOCArMTMwNCw4IEBACiAJCQkJCQkgICAgICAgbWFwbGVuKSwKIAkJCQkJIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQl9IGVsc2UgewotCQkJUVBSSU5USyhxZGV2LCBUWF9ET05FLCBERUJVRywgInVubWFwcGluZyBmcmFnICVkLlxuIiwKLQkJCQlpKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCB0eF9kb25lLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCSAgICAgInVubWFwcGluZyBmcmFnICVkLlxuIiwgaSk7CiAJCQlwY2lfdW5tYXBfcGFnZShxZGV2LT5wZGV2LAogCQkJCSAgICAgICBwY2lfdW5tYXBfYWRkcigmdHhfcmluZ19kZXNjLT5tYXBbaV0sCiAJCQkJCQkgICAgICBtYXBhZGRyKSwKQEAgLTEzMTcsNyArMTMzMCw4IEBACiAJaW50IGZyYWdfY250ID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKIAogCWlmIChmcmFnX2NudCkgewotCQlRUFJJTlRLKHFkZXYsIFRYX1FVRVVFRCwgREVCVUcsICJmcmFnX2NudCA9ICVkLlxuIiwgZnJhZ19jbnQpOworCQluZXRpZl9wcmludGsocWRldiwgdHhfcXVldWVkLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJICAgICAiZnJhZ19jbnQgPSAlZC5cbiIsIGZyYWdfY250KTsKIAl9CiAJLyoKIAkgKiBNYXAgdGhlIHNrYiBidWZmZXIgZmlyc3QuCkBAIC0xMzI2LDggKzEzNDAsOCBAQAogCiAJZXJyID0gcGNpX2RtYV9tYXBwaW5nX2Vycm9yKHFkZXYtPnBkZXYsIG1hcCk7CiAJaWYgKGVycikgewotCQlRUFJJTlRLKHFkZXYsIFRYX1FVRVVFRCwgRVJSLAotCQkJIlBDSSBtYXBwaW5nIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgZXJyKTsKKwkJbmV0aWZfZXJyKHFkZXYsIHR4X3F1ZXVlZCwgcWRldi0+bmRldiwKKwkJCSAgIlBDSSBtYXBwaW5nIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgZXJyKTsKIAogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQpAQCAtMTM3Myw5ICsxMzg3LDkgQEAKIAkJCQkJICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJCWVyciA9IHBjaV9kbWFfbWFwcGluZ19lcnJvcihxZGV2LT5wZGV2LCBtYXApOwogCQkJaWYgKGVycikgewotCQkJCVFQUklOVEsocWRldiwgVFhfUVVFVUVELCBFUlIsCi0JCQkJCSJQQ0kgbWFwcGluZyBvdXRib3VuZCBhZGRyZXNzIGxpc3Qgd2l0aCBlcnJvcjogJWRcbiIsCi0JCQkJCWVycik7CisJCQkJbmV0aWZfZXJyKHFkZXYsIHR4X3F1ZXVlZCwgcWRldi0+bmRldiwKKwkJCQkJICAiUENJIG1hcHBpbmcgb3V0Ym91bmQgYWRkcmVzcyBsaXN0IHdpdGggZXJyb3I6ICVkXG4iLAorCQkJCQkgIGVycik7CiAJCQkJZ290byBtYXBfZXJyb3I7CiAJCQl9CiAKQEAgLTE0MDMsOSArMTQxNyw5IEBACiAKIAkJZXJyID0gcGNpX2RtYV9tYXBwaW5nX2Vycm9yKHFkZXYtPnBkZXYsIG1hcCk7CiAJCWlmIChlcnIpIHsKLQkJCVFQUklOVEsocWRldiwgVFhfUVVFVUVELCBFUlIsCi0JCQkJIlBDSSBtYXBwaW5nIGZyYWdzIGZhaWxlZCB3aXRoIGVycm9yOiAlZC5cbiIsCi0JCQkJZXJyKTsKKwkJCW5ldGlmX2VycihxZGV2LCB0eF9xdWV1ZWQsIHFkZXYtPm5kZXYsCisJCQkJICAiUENJIG1hcHBpbmcgZnJhZ3MgZmFpbGVkIHdpdGggZXJyb3I6ICVkLlxuIiwKKwkJCQkgIGVycik7CiAJCQlnb3RvIG1hcF9lcnJvcjsKIAkJfQogCkBAIC0xNDMzLDYgKzE0NDcsMjYwIEBACiAJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogfQogCisvKiBQcm9jZXNzIGFuIGluYm91bmQgY29tcGxldGlvbiBmcm9tIGFuIHJ4IHJpbmcuICovCitzdGF0aWMgdm9pZCBxbF9wcm9jZXNzX21hY19yeF9ncm9fcGFnZShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwKKwkJCQkJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcsCisJCQkJCXN0cnVjdCBpYl9tYWNfaW9jYl9yc3AgKmliX21hY19yc3AsCisJCQkJCXUzMiBsZW5ndGgsCisJCQkJCXUxNiB2bGFuX2lkKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGJxX2Rlc2MgKmxicV9kZXNjID0gcWxfZ2V0X2N1cnJfbGNodW5rKHFkZXYsIHJ4X3JpbmcpOworCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKnJ4X2ZyYWc7CisJaW50IG5yX2ZyYWdzOworCXN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSA9ICZyeF9yaW5nLT5uYXBpOworCisJbmFwaS0+ZGV2ID0gcWRldi0+bmRldjsKKworCXNrYiA9IG5hcGlfZ2V0X2ZyYWdzKG5hcGkpOworCWlmICghc2tiKSB7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJDb3VsZG4ndCBnZXQgYW4gc2tiLCBleGl0aW5nLlxuIik7CisJCXJ4X3JpbmctPnJ4X2Ryb3BwZWQrKzsKKwkJcHV0X3BhZ2UobGJxX2Rlc2MtPnAucGdfY2h1bmsucGFnZSk7CisJCXJldHVybjsKKwl9CisJcHJlZmV0Y2gobGJxX2Rlc2MtPnAucGdfY2h1bmsudmEpOworCXJ4X2ZyYWcgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdzOworCW5yX2ZyYWdzID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwlyeF9mcmFnICs9IG5yX2ZyYWdzOworCXJ4X2ZyYWctPnBhZ2UgPSBsYnFfZGVzYy0+cC5wZ19jaHVuay5wYWdlOworCXJ4X2ZyYWctPnBhZ2Vfb2Zmc2V0ID0gbGJxX2Rlc2MtPnAucGdfY2h1bmsub2Zmc2V0OworCXJ4X2ZyYWctPnNpemUgPSBsZW5ndGg7CisKKwlza2ItPmxlbiArPSBsZW5ndGg7CisJc2tiLT5kYXRhX2xlbiArPSBsZW5ndGg7CisJc2tiLT50cnVlc2l6ZSArPSBsZW5ndGg7CisJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncysrOworCisJcnhfcmluZy0+cnhfcGFja2V0cysrOworCXJ4X3JpbmctPnJ4X2J5dGVzICs9IGxlbmd0aDsKKwlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByeF9yaW5nLT5jcV9pZCk7CisJaWYgKHFkZXYtPnZsZ3JwICYmICh2bGFuX2lkICE9IDB4ZmZmZikpCisJCXZsYW5fZ3JvX2ZyYWdzKCZyeF9yaW5nLT5uYXBpLCBxZGV2LT52bGdycCwgdmxhbl9pZCk7CisJZWxzZQorCQluYXBpX2dyb19mcmFncyhuYXBpKTsKK30KKworLyogUHJvY2VzcyBhbiBpbmJvdW5kIGNvbXBsZXRpb24gZnJvbSBhbiByeCByaW5nLiAqLworc3RhdGljIHZvaWQgcWxfcHJvY2Vzc19tYWNfcnhfcGFnZShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwKKwkJCQkJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcsCisJCQkJCXN0cnVjdCBpYl9tYWNfaW9jYl9yc3AgKmliX21hY19yc3AsCisJCQkJCXUzMiBsZW5ndGgsCisJCQkJCXUxNiB2bGFuX2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcWRldi0+bmRldjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwl2b2lkICphZGRyOworCXN0cnVjdCBicV9kZXNjICpsYnFfZGVzYyA9IHFsX2dldF9jdXJyX2xjaHVuayhxZGV2LCByeF9yaW5nKTsKKwlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGkgPSAmcnhfcmluZy0+bmFwaTsKKworCXNrYiA9IG5ldGRldl9hbGxvY19za2IobmRldiwgbGVuZ3RoKTsKKwlpZiAoIXNrYikgeworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJICAiQ291bGRuJ3QgZ2V0IGFuIHNrYiwgbmVlZCB0byB1bndpbmQhLlxuIik7CisJCXJ4X3JpbmctPnJ4X2Ryb3BwZWQrKzsKKwkJcHV0X3BhZ2UobGJxX2Rlc2MtPnAucGdfY2h1bmsucGFnZSk7CisJCXJldHVybjsKKwl9CisKKwlhZGRyID0gbGJxX2Rlc2MtPnAucGdfY2h1bmsudmE7CisJcHJlZmV0Y2goYWRkcik7CisKKworCS8qIEZyYW1lIGVycm9yLCBzbyBkcm9wIHRoZSBwYWNrZXQuICovCisJaWYgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9FUlJfTUFTSykgeworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJICAiUmVjZWl2ZSBlcnJvciwgZmxhZ3MyID0gMHgleFxuIiwgaWJfbWFjX3JzcC0+ZmxhZ3MyKTsKKwkJcnhfcmluZy0+cnhfZXJyb3JzKys7CisJCWdvdG8gZXJyX291dDsKKwl9CisKKwkvKiBUaGUgbWF4IGZyYW1lc2l6ZSBmaWx0ZXIgb24gdGhpcyBjaGlwIGlzIHNldCBoaWdoZXIgdGhhbgorCSAqIE1UVSBzaW5jZSBGQ29FIHVzZXMgMmsgZnJhbWVzLgorCSAqLworCWlmIChza2ItPmxlbiA+IG5kZXYtPm10dSArIEVUSF9ITEVOKSB7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJTZWdtZW50IHRvbyBzbWFsbCwgZHJvcHBpbmcuXG4iKTsKKwkJcnhfcmluZy0+cnhfZHJvcHBlZCsrOworCQlnb3RvIGVycl9vdXQ7CisJfQorCW1lbWNweShza2JfcHV0KHNrYiwgRVRIX0hMRU4pLCBhZGRyLCBFVEhfSExFTik7CisJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJICAgICAiJWQgYnl0ZXMgb2YgaGVhZGVycyBhbmQgZGF0YSBpbiBsYXJnZS4gQ2hhaW4gcGFnZSB0byBuZXcgc2tiIGFuZCBwdWxsIHRhaWwuXG4iLAorCQkgICAgIGxlbmd0aCk7CisJc2tiX2ZpbGxfcGFnZV9kZXNjKHNrYiwgMCwgbGJxX2Rlc2MtPnAucGdfY2h1bmsucGFnZSwKKwkJCQlsYnFfZGVzYy0+cC5wZ19jaHVuay5vZmZzZXQrRVRIX0hMRU4sCisJCQkJbGVuZ3RoLUVUSF9ITEVOKTsKKwlza2ItPmxlbiArPSBsZW5ndGgtRVRIX0hMRU47CisJc2tiLT5kYXRhX2xlbiArPSBsZW5ndGgtRVRIX0hMRU47CisJc2tiLT50cnVlc2l6ZSArPSBsZW5ndGgtRVRIX0hMRU47CisKKwlyeF9yaW5nLT5yeF9wYWNrZXRzKys7CisJcnhfcmluZy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmRldik7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCisJaWYgKHFkZXYtPnJ4X2NzdW0gJiYKKwkJIShpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfQ1NVTV9FUlJfTUFTSykpIHsKKwkJLyogVENQIGZyYW1lLiAqLworCQlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1QpIHsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiVENQIGNoZWNrc3VtIGRvbmUhXG4iKTsKKwkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCX0gZWxzZSBpZiAoKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9VKSAmJgorCQkJCShpYl9tYWNfcnNwLT5mbGFnczMgJiBJQl9NQUNfSU9DQl9SU1BfVjQpKSB7CisJCQkvKiBVbmZyYWdtZW50ZWQgaXB2NCBVRFAgZnJhbWUuICovCisJCQlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikgc2tiLT5kYXRhOworCQkJaWYgKCEoaXBoLT5mcmFnX29mZiAmCisJCQkJY3B1X3RvX2JlMTYoSVBfTUZ8SVBfT0ZGU0VUKSkpIHsKKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCQkJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsCisJCQkJCSAgICAgcWRldi0+bmRldiwKKwkJCQkJICAgICAiVENQIGNoZWNrc3VtIGRvbmUhXG4iKTsKKwkJCX0KKwkJfQorCX0KKworCXNrYl9yZWNvcmRfcnhfcXVldWUoc2tiLCByeF9yaW5nLT5jcV9pZCk7CisJaWYgKHNrYi0+aXBfc3VtbWVkID09IENIRUNLU1VNX1VOTkVDRVNTQVJZKSB7CisJCWlmIChxZGV2LT52bGdycCAmJiAodmxhbl9pZCAhPSAweGZmZmYpKQorCQkJdmxhbl9ncm9fcmVjZWl2ZShuYXBpLCBxZGV2LT52bGdycCwgdmxhbl9pZCwgc2tiKTsKKwkJZWxzZQorCQkJbmFwaV9ncm9fcmVjZWl2ZShuYXBpLCBza2IpOworCX0gZWxzZSB7CisJCWlmIChxZGV2LT52bGdycCAmJiAodmxhbl9pZCAhPSAweGZmZmYpKQorCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgcWRldi0+dmxncnAsIHZsYW5faWQpOworCQllbHNlCisJCQluZXRpZl9yZWNlaXZlX3NrYihza2IpOworCX0KKwlyZXR1cm47CitlcnJfb3V0OgorCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJcHV0X3BhZ2UobGJxX2Rlc2MtPnAucGdfY2h1bmsucGFnZSk7Cit9CisKKy8qIFByb2Nlc3MgYW4gaW5ib3VuZCBjb21wbGV0aW9uIGZyb20gYW4gcnggcmluZy4gKi8KK3N0YXRpYyB2b2lkIHFsX3Byb2Nlc3NfbWFjX3J4X3NrYihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwKKwkJCQkJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcsCisJCQkJCXN0cnVjdCBpYl9tYWNfaW9jYl9yc3AgKmliX21hY19yc3AsCisJCQkJCXUzMiBsZW5ndGgsCisJCQkJCXUxNiB2bGFuX2lkKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcWRldi0+bmRldjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbmV3X3NrYiA9IE5VTEw7CisJc3RydWN0IGJxX2Rlc2MgKnNicV9kZXNjID0gcWxfZ2V0X2N1cnJfc2J1ZihyeF9yaW5nKTsKKworCXNrYiA9IHNicV9kZXNjLT5wLnNrYjsKKwkvKiBBbGxvY2F0ZSBuZXdfc2tiIGFuZCBjb3B5ICovCisJbmV3X3NrYiA9IG5ldGRldl9hbGxvY19za2IocWRldi0+bmRldiwgbGVuZ3RoICsgTkVUX0lQX0FMSUdOKTsKKwlpZiAobmV3X3NrYiA9PSBOVUxMKSB7CisJCW5ldGlmX2VycihxZGV2LCBwcm9iZSwgcWRldi0+bmRldiwKKwkJCSAgIk5vIHNrYiBhdmFpbGFibGUsIGRyb3AgdGhlIHBhY2tldC5cbiIpOworCQlyeF9yaW5nLT5yeF9kcm9wcGVkKys7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUobmV3X3NrYiwgTkVUX0lQX0FMSUdOKTsKKwltZW1jcHkoc2tiX3B1dChuZXdfc2tiLCBsZW5ndGgpLCBza2ItPmRhdGEsIGxlbmd0aCk7CisJc2tiID0gbmV3X3NrYjsKKworCS8qIEZyYW1lIGVycm9yLCBzbyBkcm9wIHRoZSBwYWNrZXQuICovCisJaWYgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9FUlJfTUFTSykgeworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJICAiUmVjZWl2ZSBlcnJvciwgZmxhZ3MyID0gMHgleFxuIiwgaWJfbWFjX3JzcC0+ZmxhZ3MyKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcnhfcmluZy0+cnhfZXJyb3JzKys7CisJCXJldHVybjsKKwl9CisKKwkvKiBsb29wYmFjayBzZWxmIHRlc3QgZm9yIGV0aHRvb2wgKi8KKwlpZiAodGVzdF9iaXQoUUxfU0VMRlRFU1QsICZxZGV2LT5mbGFncykpIHsKKwkJcWxfY2hlY2tfbGJfZnJhbWUocWRldiwgc2tiKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcmV0dXJuOworCX0KKworCS8qIFRoZSBtYXggZnJhbWVzaXplIGZpbHRlciBvbiB0aGlzIGNoaXAgaXMgc2V0IGhpZ2hlciB0aGFuCisJICogTVRVIHNpbmNlIEZDb0UgdXNlcyAyayBmcmFtZXMuCisJICovCisJaWYgKHNrYi0+bGVuID4gbmRldi0+bXR1ICsgRVRIX0hMRU4pIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJcnhfcmluZy0+cnhfZHJvcHBlZCsrOworCQlyZXR1cm47CisJfQorCisJcHJlZmV0Y2goc2tiLT5kYXRhKTsKKwlza2ItPmRldiA9IG5kZXY7CisJaWYgKGliX21hY19yc3AtPmZsYWdzMSAmIElCX01BQ19JT0NCX1JTUF9NX01BU0spIHsKKwkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCSAgICAgIiVzIE11bHRpY2FzdC5cbiIsCisJCQkgICAgIChpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfSU9DQl9SU1BfTV9NQVNLKSA9PQorCQkJICAgICBJQl9NQUNfSU9DQl9SU1BfTV9IQVNIID8gIkhhc2giIDoKKwkJCSAgICAgKGliX21hY19yc3AtPmZsYWdzMSAmIElCX01BQ19JT0NCX1JTUF9NX01BU0spID09CisJCQkgICAgIElCX01BQ19JT0NCX1JTUF9NX1JFRyA/ICJSZWdpc3RlcmVkIiA6CisJCQkgICAgIChpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfSU9DQl9SU1BfTV9NQVNLKSA9PQorCQkJICAgICBJQl9NQUNfSU9DQl9SU1BfTV9QUk9NID8gIlByb21pc2N1b3VzIiA6ICIiKTsKKwl9CisJaWYgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9QKQorCQluZXRpZl9wcmludGsocWRldiwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJICAgICAiUHJvbWlzY3VvdXMgUGFja2V0LlxuIik7CisKKwlyeF9yaW5nLT5yeF9wYWNrZXRzKys7CisJcnhfcmluZy0+cnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmRldik7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOworCisJLyogSWYgcnggY2hlY2tzdW0gaXMgb24sIGFuZCB0aGVyZSBhcmUgbm8KKwkgKiBjc3VtIG9yIGZyYW1lIGVycm9ycy4KKwkgKi8KKwlpZiAocWRldi0+cnhfY3N1bSAmJgorCQkhKGliX21hY19yc3AtPmZsYWdzMSAmIElCX01BQ19DU1VNX0VSUl9NQVNLKSkgeworCQkvKiBUQ1AgZnJhbWUuICovCisJCWlmIChpYl9tYWNfcnNwLT5mbGFnczIgJiBJQl9NQUNfSU9DQl9SU1BfVCkgeworCQkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCQkgICAgICJUQ1AgY2hlY2tzdW0gZG9uZSFcbiIpOworCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJfSBlbHNlIGlmICgoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1UpICYmCisJCQkJKGliX21hY19yc3AtPmZsYWdzMyAmIElCX01BQ19JT0NCX1JTUF9WNCkpIHsKKwkJCS8qIFVuZnJhZ21lbnRlZCBpcHY0IFVEUCBmcmFtZS4gKi8KKwkJCXN0cnVjdCBpcGhkciAqaXBoID0gKHN0cnVjdCBpcGhkciAqKSBza2ItPmRhdGE7CisJCQlpZiAoIShpcGgtPmZyYWdfb2ZmICYKKwkJCQljcHVfdG9fYmUxNihJUF9NRnxJUF9PRkZTRVQpKSkgeworCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisJCQkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywKKwkJCQkJICAgICBxZGV2LT5uZGV2LAorCQkJCQkgICAgICJUQ1AgY2hlY2tzdW0gZG9uZSFcbiIpOworCQkJfQorCQl9CisJfQorCisJc2tiX3JlY29yZF9yeF9xdWV1ZShza2IsIHJ4X3JpbmctPmNxX2lkKTsKKwlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlkpIHsKKwkJaWYgKHFkZXYtPnZsZ3JwICYmICh2bGFuX2lkICE9IDB4ZmZmZikpCisJCQl2bGFuX2dyb19yZWNlaXZlKCZyeF9yaW5nLT5uYXBpLCBxZGV2LT52bGdycCwKKwkJCQkJCXZsYW5faWQsIHNrYik7CisJCWVsc2UKKwkJCW5hcGlfZ3JvX3JlY2VpdmUoJnJ4X3JpbmctPm5hcGksIHNrYik7CisJfSBlbHNlIHsKKwkJaWYgKHFkZXYtPnZsZ3JwICYmICh2bGFuX2lkICE9IDB4ZmZmZikpCisJCQl2bGFuX2h3YWNjZWxfcmVjZWl2ZV9za2Ioc2tiLCBxZGV2LT52bGdycCwgdmxhbl9pZCk7CisJCWVsc2UKKwkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisJfQorfQorCiBzdGF0aWMgdm9pZCBxbF9yZWFsaWduX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbGVuKQogewogCXZvaWQgKnRlbXBfYWRkciA9IHNrYi0+ZGF0YTsKQEAgLTE0NjcsNyArMTczNSw4IEBACiAJICovCiAJaWYgKGliX21hY19yc3AtPmZsYWdzNCAmIElCX01BQ19JT0NCX1JTUF9IViAmJgogCSAgICBpYl9tYWNfcnNwLT5mbGFnczQgJiBJQl9NQUNfSU9DQl9SU1BfSFMpIHsKLQkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLCAiSGVhZGVyIG9mICVkIGJ5dGVzIGluIHNtYWxsIGJ1ZmZlci5cbiIsIGhkcl9sZW4pOworCQluZXRpZl9wcmludGsocWRldiwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJICAgICAiSGVhZGVyIG9mICVkIGJ5dGVzIGluIHNtYWxsIGJ1ZmZlci5cbiIsIGhkcl9sZW4pOwogCQkvKgogCQkgKiBIZWFkZXJzIGZpdCBuaWNlbHkgaW50byBhIHNtYWxsIGJ1ZmZlci4KIAkJICovCkBAIC0xNDg2LDE1ICsxNzU1LDE2IEBACiAJICogSGFuZGxlIHRoZSBkYXRhIGJ1ZmZlcihzKS4KIAkgKi8KIAlpZiAodW5saWtlbHkoIWxlbmd0aCkpIHsJLyogSXMgdGhlcmUgZGF0YSB0b28/ICovCi0JCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCSJObyBEYXRhIGJ1ZmZlciBpbiB0aGlzIHBhY2tldC5cbiIpOworCQluZXRpZl9wcmludGsocWRldiwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJICAgICAiTm8gRGF0YSBidWZmZXIgaW4gdGhpcyBwYWNrZXQuXG4iKTsKIAkJcmV0dXJuIHNrYjsKIAl9CiAKIAlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MzICYgSUJfTUFDX0lPQ0JfUlNQX0RTKSB7CiAJCWlmIChpYl9tYWNfcnNwLT5mbGFnczQgJiBJQl9NQUNfSU9DQl9SU1BfSFMpIHsKLQkJCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCQkiSGVhZGVycyBpbiBzbWFsbCwgZGF0YSBvZiAlZCBieXRlcyBpbiBzbWFsbCwgY29tYmluZSB0aGVtLlxuIiwgbGVuZ3RoKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiSGVhZGVycyBpbiBzbWFsbCwgZGF0YSBvZiAlZCBieXRlcyBpbiBzbWFsbCwgY29tYmluZSB0aGVtLlxuIiwKKwkJCQkgICAgIGxlbmd0aCk7CiAJCQkvKgogCQkJICogRGF0YSBpcyBsZXNzIHRoYW4gc21hbGwgYnVmZmVyIHNpemUgc28gaXQncwogCQkJICogc3R1ZmZlZCBpbiBhIHNtYWxsIGJ1ZmZlci4KQEAgLTE1MjAsOCArMTc5MCw5IEBACiAJCQkJCQkJbWFwbGVuKSwKIAkJCQkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQl9IGVsc2UgewotCQkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLAotCQkJCSIlZCBieXRlcyBpbiBhIHNpbmdsZSBzbWFsbCBidWZmZXIuXG4iLCBsZW5ndGgpOworCQkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCQkgICAgICIlZCBieXRlcyBpbiBhIHNpbmdsZSBzbWFsbCBidWZmZXIuXG4iLAorCQkJCSAgICAgbGVuZ3RoKTsKIAkJCXNicV9kZXNjID0gcWxfZ2V0X2N1cnJfc2J1ZihyeF9yaW5nKTsKIAkJCXNrYiA9IHNicV9kZXNjLT5wLnNrYjsKIAkJCXFsX3JlYWxpZ25fc2tiKHNrYiwgbGVuZ3RoKTsKQEAgLTE1MzYsMTggKzE4MDcsMTggQEAKIAkJfQogCX0gZWxzZSBpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MzICYgSUJfTUFDX0lPQ0JfUlNQX0RMKSB7CiAJCWlmIChpYl9tYWNfcnNwLT5mbGFnczQgJiBJQl9NQUNfSU9DQl9SU1BfSFMpIHsKLQkJCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCQkiSGVhZGVyIGluIHNtYWxsLCAlZCBieXRlcyBpbiBsYXJnZS4gQ2hhaW4gbGFyZ2UgdG8gc21hbGwhXG4iLCBsZW5ndGgpOworCQkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCQkgICAgICJIZWFkZXIgaW4gc21hbGwsICVkIGJ5dGVzIGluIGxhcmdlLiBDaGFpbiBsYXJnZSB0byBzbWFsbCFcbiIsCisJCQkJICAgICBsZW5ndGgpOwogCQkJLyoKIAkJCSAqIFRoZSBkYXRhIGlzIGluIGEgc2luZ2xlIGxhcmdlIGJ1ZmZlci4gIFdlCiAJCQkgKiBjaGFpbiBpdCB0byB0aGUgaGVhZGVyIGJ1ZmZlcidzIHNrYiBhbmQgbGV0CiAJCQkgKiBpdCByaXAuCiAJCQkgKi8KIAkJCWxicV9kZXNjID0gcWxfZ2V0X2N1cnJfbGNodW5rKHFkZXYsIHJ4X3JpbmcpOwotCQkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLAotCQkJCSJDaGFpbmluZyBwYWdlIGF0IG9mZnNldCA9ICVkLCIKLQkJCQkiZm9yICVkIGJ5dGVzICB0byBza2IuXG4iLAotCQkJCWxicV9kZXNjLT5wLnBnX2NodW5rLm9mZnNldCwgbGVuZ3RoKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiQ2hhaW5pbmcgcGFnZSBhdCBvZmZzZXQgPSAlZCwgZm9yICVkIGJ5dGVzICB0byBza2IuXG4iLAorCQkJCSAgICAgbGJxX2Rlc2MtPnAucGdfY2h1bmsub2Zmc2V0LCBsZW5ndGgpOwogCQkJc2tiX2ZpbGxfcGFnZV9kZXNjKHNrYiwgMCwgbGJxX2Rlc2MtPnAucGdfY2h1bmsucGFnZSwKIAkJCQkJCWxicV9kZXNjLT5wLnBnX2NodW5rLm9mZnNldCwKIAkJCQkJCWxlbmd0aCk7CkBAIC0xNTYzLDggKzE4MzQsOCBAQAogCQkJbGJxX2Rlc2MgPSBxbF9nZXRfY3Vycl9sY2h1bmsocWRldiwgcnhfcmluZyk7CiAJCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiKHFkZXYtPm5kZXYsIGxlbmd0aCk7CiAJCQlpZiAoc2tiID09IE5VTEwpIHsKLQkJCQlRUFJJTlRLKHFkZXYsIFBST0JFLCBERUJVRywKLQkJCQkJIk5vIHNrYiBhdmFpbGFibGUsIGRyb3AgdGhlIHBhY2tldC5cbiIpOworCQkJCW5ldGlmX3ByaW50ayhxZGV2LCBwcm9iZSwgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCQkJICAgICAiTm8gc2tiIGF2YWlsYWJsZSwgZHJvcCB0aGUgcGFja2V0LlxuIik7CiAJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CiAJCQlwY2lfdW5tYXBfcGFnZShxZGV2LT5wZGV2LApAQCAtMTU3Myw4ICsxODQ0LDkgQEAKIAkJCQkgICAgICAgcGNpX3VubWFwX2xlbihsYnFfZGVzYywgbWFwbGVuKSwKIAkJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKLQkJCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCQkiJWQgYnl0ZXMgb2YgaGVhZGVycyBhbmQgZGF0YSBpbiBsYXJnZS4gQ2hhaW4gcGFnZSB0byBuZXcgc2tiIGFuZCBwdWxsIHRhaWwuXG4iLCBsZW5ndGgpOworCQkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCQkgICAgICIlZCBieXRlcyBvZiBoZWFkZXJzIGFuZCBkYXRhIGluIGxhcmdlLiBDaGFpbiBwYWdlIHRvIG5ldyBza2IgYW5kIHB1bGwgdGFpbC5cbiIsCisJCQkJICAgICBsZW5ndGgpOwogCQkJc2tiX2ZpbGxfcGFnZV9kZXNjKHNrYiwgMCwKIAkJCQkJCWxicV9kZXNjLT5wLnBnX2NodW5rLnBhZ2UsCiAJCQkJCQlsYnFfZGVzYy0+cC5wZ19jaHVuay5vZmZzZXQsCkBAIC0xNjE1LDggKzE4ODcsOSBAQAogCQkJICogYSBsb2NhbCBidWZmZXIgYW5kIHVzZSBpdCB0byBmaW5kIHRoZQogCQkJICogcGFnZXMgdG8gY2hhaW4uCiAJCQkgKi8KLQkJCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCQkiJWQgYnl0ZXMgb2YgaGVhZGVycyAmIGRhdGEgaW4gY2hhaW4gb2YgbGFyZ2UuXG4iLCBsZW5ndGgpOworCQkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCQkgICAgICIlZCBieXRlcyBvZiBoZWFkZXJzICYgZGF0YSBpbiBjaGFpbiBvZiBsYXJnZS5cbiIsCisJCQkJICAgICBsZW5ndGgpOwogCQkJc2tiID0gc2JxX2Rlc2MtPnAuc2tiOwogCQkJc2JxX2Rlc2MtPnAuc2tiID0gTlVMTDsKIAkJCXNrYl9yZXNlcnZlKHNrYiwgTkVUX0lQX0FMSUdOKTsKQEAgLTE2MjYsOSArMTg5OSw5IEBACiAJCQlzaXplID0gKGxlbmd0aCA8IHJ4X3JpbmctPmxicV9idWZfc2l6ZSkgPyBsZW5ndGggOgogCQkJCXJ4X3JpbmctPmxicV9idWZfc2l6ZTsKIAotCQkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLAotCQkJCSJBZGRpbmcgcGFnZSAlZCB0byBza2IgZm9yICVkIGJ5dGVzLlxuIiwKLQkJCQlpLCBzaXplKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiQWRkaW5nIHBhZ2UgJWQgdG8gc2tiIGZvciAlZCBieXRlcy5cbiIsCisJCQkJICAgICBpLCBzaXplKTsKIAkJCXNrYl9maWxsX3BhZ2VfZGVzYyhza2IsIGksCiAJCQkJCQlsYnFfZGVzYy0+cC5wZ19jaHVuay5wYWdlLAogCQkJCQkJbGJxX2Rlc2MtPnAucGdfY2h1bmsub2Zmc2V0LApAQCAtMTY0NiwyOSArMTkxOSwyOCBAQAogfQogCiAvKiBQcm9jZXNzIGFuIGluYm91bmQgY29tcGxldGlvbiBmcm9tIGFuIHJ4IHJpbmcuICovCi1zdGF0aWMgdm9pZCBxbF9wcm9jZXNzX21hY19yeF9pbnRyKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LAorc3RhdGljIHZvaWQgcWxfcHJvY2Vzc19tYWNfc3BsaXRfcnhfaW50cihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwKIAkJCQkgICBzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZywKLQkJCQkgICBzdHJ1Y3QgaWJfbWFjX2lvY2JfcnNwICppYl9tYWNfcnNwKQorCQkJCSAgIHN0cnVjdCBpYl9tYWNfaW9jYl9yc3AgKmliX21hY19yc3AsCisJCQkJICAgdTE2IHZsYW5faWQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBxZGV2LT5uZGV2OwogCXN0cnVjdCBza19idWZmICpza2IgPSBOVUxMOwotCXUxNiB2bGFuX2lkID0gKGxlMTZfdG9fY3B1KGliX21hY19yc3AtPnZsYW5faWQpICYKLQkJCUlCX01BQ19JT0NCX1JTUF9WTEFOX01BU0spCiAKIAlRTF9EVU1QX0lCX01BQ19SU1AoaWJfbWFjX3JzcCk7CiAKIAlza2IgPSBxbF9idWlsZF9yeF9za2IocWRldiwgcnhfcmluZywgaWJfbWFjX3JzcCk7CiAJaWYgKHVubGlrZWx5KCFza2IpKSB7Ci0JCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCSJObyBza2IgYXZhaWxhYmxlLCBkcm9wIHBhY2tldC5cbiIpOworCQluZXRpZl9wcmludGsocWRldiwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJICAgICAiTm8gc2tiIGF2YWlsYWJsZSwgZHJvcCBwYWNrZXQuXG4iKTsKIAkJcnhfcmluZy0+cnhfZHJvcHBlZCsrOwogCQlyZXR1cm47CiAJfQogCiAJLyogRnJhbWUgZXJyb3IsIHNvIGRyb3AgdGhlIHBhY2tldC4gKi8KIAlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX0VSUl9NQVNLKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJSZWNlaXZlIGVycm9yLCBmbGFnczIgPSAweCV4XG4iLAotCQkJCQlpYl9tYWNfcnNwLT5mbGFnczIpOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJICAiUmVjZWl2ZSBlcnJvciwgZmxhZ3MyID0gMHgleFxuIiwgaWJfbWFjX3JzcC0+ZmxhZ3MyKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcnhfcmluZy0+cnhfZXJyb3JzKys7CiAJCXJldHVybjsKQEAgLTE2OTMsMTcgKzE5NjUsMTggQEAKIAlwcmVmZXRjaChza2ItPmRhdGEpOwogCXNrYi0+ZGV2ID0gbmRldjsKIAlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MxICYgSUJfTUFDX0lPQ0JfUlNQX01fTUFTSykgewotCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsICIlcyVzJXMgTXVsdGljYXN0LlxuIiwKLQkJCShpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfSU9DQl9SU1BfTV9NQVNLKSA9PQotCQkJSUJfTUFDX0lPQ0JfUlNQX01fSEFTSCA/ICJIYXNoIiA6ICIiLAotCQkJKGliX21hY19yc3AtPmZsYWdzMSAmIElCX01BQ19JT0NCX1JTUF9NX01BU0spID09Ci0JCQlJQl9NQUNfSU9DQl9SU1BfTV9SRUcgPyAiUmVnaXN0ZXJlZCIgOiAiIiwKLQkJCShpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfSU9DQl9SU1BfTV9NQVNLKSA9PQotCQkJSUJfTUFDX0lPQ0JfUlNQX01fUFJPTSA/ICJQcm9taXNjdW91cyIgOiAiIik7CisJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsICIlcyBNdWx0aWNhc3QuXG4iLAorCQkJICAgICAoaWJfbWFjX3JzcC0+ZmxhZ3MxICYgSUJfTUFDX0lPQ0JfUlNQX01fTUFTSykgPT0KKwkJCSAgICAgSUJfTUFDX0lPQ0JfUlNQX01fSEFTSCA/ICJIYXNoIiA6CisJCQkgICAgIChpYl9tYWNfcnNwLT5mbGFnczEgJiBJQl9NQUNfSU9DQl9SU1BfTV9NQVNLKSA9PQorCQkJICAgICBJQl9NQUNfSU9DQl9SU1BfTV9SRUcgPyAiUmVnaXN0ZXJlZCIgOgorCQkJICAgICAoaWJfbWFjX3JzcC0+ZmxhZ3MxICYgSUJfTUFDX0lPQ0JfUlNQX01fTUFTSykgPT0KKwkJCSAgICAgSUJfTUFDX0lPQ0JfUlNQX01fUFJPTSA/ICJQcm9taXNjdW91cyIgOiAiIik7CiAJCXJ4X3JpbmctPnJ4X211bHRpY2FzdCsrOwogCX0KIAlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1ApIHsKLQkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLCAiUHJvbWlzY3VvdXMgUGFja2V0LlxuIik7CisJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkgICAgICJQcm9taXNjdW91cyBQYWNrZXQuXG4iKTsKIAl9CiAKIAlza2ItPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoc2tiLCBuZGV2KTsKQEAgLTE3MTYsOCArMTk4OSw4IEBACiAJCSEoaWJfbWFjX3JzcC0+ZmxhZ3MxICYgSUJfTUFDX0NTVU1fRVJSX01BU0spKSB7CiAJCS8qIFRDUCBmcmFtZS4gKi8KIAkJaWYgKGliX21hY19yc3AtPmZsYWdzMiAmIElCX01BQ19JT0NCX1JTUF9UKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkJCSJUQ1AgY2hlY2tzdW0gZG9uZSFcbiIpOworCQkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCQkgICAgICJUQ1AgY2hlY2tzdW0gZG9uZSFcbiIpOwogCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKIAkJfSBlbHNlIGlmICgoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1UpICYmCiAJCQkJKGliX21hY19yc3AtPmZsYWdzMyAmIElCX01BQ19JT0NCX1JTUF9WNCkpIHsKQEAgLTE3MjYsOCArMTk5OSw4IEBACiAJCQlpZiAoIShpcGgtPmZyYWdfb2ZmICYKIAkJCQljcHVfdG9fYmUxNihJUF9NRnxJUF9PRkZTRVQpKSkgewogCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7Ci0JCQkJUVBSSU5USyhxZGV2LCBSWF9TVEFUVVMsIERFQlVHLAotCQkJCQkJIlRDUCBjaGVja3N1bSBkb25lIVxuIik7CisJCQkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCQkJICAgICAiVENQIGNoZWNrc3VtIGRvbmUhXG4iKTsKIAkJCX0KIAkJfQogCX0KQEAgLTE3NTMsNiArMjAyNiw1NiBAQAogCX0KIH0KIAorLyogUHJvY2VzcyBhbiBpbmJvdW5kIGNvbXBsZXRpb24gZnJvbSBhbiByeCByaW5nLiAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgcWxfcHJvY2Vzc19tYWNfcnhfaW50cihzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwKKwkJCQkJc3RydWN0IHJ4X3JpbmcgKnJ4X3JpbmcsCisJCQkJCXN0cnVjdCBpYl9tYWNfaW9jYl9yc3AgKmliX21hY19yc3ApCit7CisJdTMyIGxlbmd0aCA9IGxlMzJfdG9fY3B1KGliX21hY19yc3AtPmRhdGFfbGVuKTsKKwl1MTYgdmxhbl9pZCA9IChpYl9tYWNfcnNwLT5mbGFnczIgJiBJQl9NQUNfSU9DQl9SU1BfVikgPworCQkJKChsZTE2X3RvX2NwdShpYl9tYWNfcnNwLT52bGFuX2lkKSAmCisJCQlJQl9NQUNfSU9DQl9SU1BfVkxBTl9NQVNLKSkgOiAweGZmZmY7CisKKwlRTF9EVU1QX0lCX01BQ19SU1AoaWJfbWFjX3JzcCk7CisKKwlpZiAoaWJfbWFjX3JzcC0+ZmxhZ3M0ICYgSUJfTUFDX0lPQ0JfUlNQX0hWKSB7CisJCS8qIFRoZSBkYXRhIGFuZCBoZWFkZXJzIGFyZSBzcGxpdCBpbnRvCisJCSAqIHNlcGFyYXRlIGJ1ZmZlcnMuCisJCSAqLworCQlxbF9wcm9jZXNzX21hY19zcGxpdF9yeF9pbnRyKHFkZXYsIHJ4X3JpbmcsIGliX21hY19yc3AsCisJCQkJCQl2bGFuX2lkKTsKKwl9IGVsc2UgaWYgKGliX21hY19yc3AtPmZsYWdzMyAmIElCX01BQ19JT0NCX1JTUF9EUykgeworCQkvKiBUaGUgZGF0YSBmaXQgaW4gYSBzaW5nbGUgc21hbGwgYnVmZmVyLgorCQkgKiBBbGxvY2F0ZSBhIG5ldyBza2IsIGNvcHkgdGhlIGRhdGEgYW5kCisJCSAqIHJldHVybiB0aGUgYnVmZmVyIHRvIHRoZSBmcmVlIHBvb2wuCisJCSAqLworCQlxbF9wcm9jZXNzX21hY19yeF9za2IocWRldiwgcnhfcmluZywgaWJfbWFjX3JzcCwKKwkJCQkJCWxlbmd0aCwgdmxhbl9pZCk7CisJfSBlbHNlIGlmICgoaWJfbWFjX3JzcC0+ZmxhZ3MzICYgSUJfTUFDX0lPQ0JfUlNQX0RMKSAmJgorCQkhKGliX21hY19yc3AtPmZsYWdzMSAmIElCX01BQ19DU1VNX0VSUl9NQVNLKSAmJgorCQkoaWJfbWFjX3JzcC0+ZmxhZ3MyICYgSUJfTUFDX0lPQ0JfUlNQX1QpKSB7CisJCS8qIFRDUCBwYWNrZXQgaW4gYSBwYWdlIGNodW5rIHRoYXQncyBiZWVuIGNoZWNrc3VtbWVkLgorCQkgKiBUYWNrIGl0IG9uIHRvIG91ciBHUk8gc2tiIGFuZCBsZXQgaXQgZ28uCisJCSAqLworCQlxbF9wcm9jZXNzX21hY19yeF9ncm9fcGFnZShxZGV2LCByeF9yaW5nLCBpYl9tYWNfcnNwLAorCQkJCQkJbGVuZ3RoLCB2bGFuX2lkKTsKKwl9IGVsc2UgaWYgKGliX21hY19yc3AtPmZsYWdzMyAmIElCX01BQ19JT0NCX1JTUF9ETCkgeworCQkvKiBOb24tVENQIHBhY2tldCBpbiBhIHBhZ2UgY2h1bmsuIEFsbG9jYXRlIGFuCisJCSAqIHNrYiwgdGFjayBpdCBvbiBmcmFncywgYW5kIHNlbmQgaXQgdXAuCisJCSAqLworCQlxbF9wcm9jZXNzX21hY19yeF9wYWdlKHFkZXYsIHJ4X3JpbmcsIGliX21hY19yc3AsCisJCQkJCQlsZW5ndGgsIHZsYW5faWQpOworCX0gZWxzZSB7CisJCS8qIE5vbi1UQ1AvVURQIGxhcmdlIGZyYW1lcyB0aGF0IHNwYW4gbXVsdGlwbGUgYnVmZmVycworCQkgKiBjYW4gYmUgcHJvY2Vzc2VkIGNvcnJyZWN0bHkgYnkgdGhlIHNwbGl0IGZyYW1lIGxvZ2ljLgorCQkgKi8KKwkJcWxfcHJvY2Vzc19tYWNfc3BsaXRfcnhfaW50cihxZGV2LCByeF9yaW5nLCBpYl9tYWNfcnNwLAorCQkJCQkJdmxhbl9pZCk7CisJfQorCisJcmV0dXJuICh1bnNpZ25lZCBsb25nKWxlbmd0aDsKK30KKwogLyogUHJvY2VzcyBhbiBvdXRib3VuZCBjb21wbGV0aW9uIGZyb20gYW4gcnggcmluZy4gKi8KIHN0YXRpYyB2b2lkIHFsX3Byb2Nlc3NfbWFjX3R4X2ludHIoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYsCiAJCQkJICAgc3RydWN0IG9iX21hY19pb2NiX3JzcCAqbWFjX3JzcCkKQEAgLTE3NzQsMjAgKzIwOTcsMjAgQEAKIAkJCQkJT0JfTUFDX0lPQ0JfUlNQX0wgfAogCQkJCQlPQl9NQUNfSU9DQl9SU1BfUCB8IE9CX01BQ19JT0NCX1JTUF9CKSkpIHsKIAkJaWYgKG1hY19yc3AtPmZsYWdzMSAmIE9CX01BQ19JT0NCX1JTUF9FKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIFRYX0RPTkUsIFdBUk5JTkcsCi0JCQkJIlRvdGFsIGRlc2NyaXB0b3IgbGVuZ3RoIGRpZCBub3QgbWF0Y2ggdHJhbnNmZXIgbGVuZ3RoLlxuIik7CisJCQluZXRpZl93YXJuKHFkZXYsIHR4X2RvbmUsIHFkZXYtPm5kZXYsCisJCQkJICAgIlRvdGFsIGRlc2NyaXB0b3IgbGVuZ3RoIGRpZCBub3QgbWF0Y2ggdHJhbnNmZXIgbGVuZ3RoLlxuIik7CiAJCX0KIAkJaWYgKG1hY19yc3AtPmZsYWdzMSAmIE9CX01BQ19JT0NCX1JTUF9TKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIFRYX0RPTkUsIFdBUk5JTkcsCi0JCQkJIkZyYW1lIHRvbyBzaG9ydCB0byBiZSBsZWdhbCwgbm90IHNlbnQuXG4iKTsKKwkJCW5ldGlmX3dhcm4ocWRldiwgdHhfZG9uZSwgcWRldi0+bmRldiwKKwkJCQkgICAiRnJhbWUgdG9vIHNob3J0IHRvIGJlIHZhbGlkLCBub3Qgc2VudC5cbiIpOwogCQl9CiAJCWlmIChtYWNfcnNwLT5mbGFnczEgJiBPQl9NQUNfSU9DQl9SU1BfTCkgewotCQkJUVBSSU5USyhxZGV2LCBUWF9ET05FLCBXQVJOSU5HLAotCQkJCSJGcmFtZSB0b28gbG9uZywgYnV0IHNlbnQgYW55d2F5LlxuIik7CisJCQluZXRpZl93YXJuKHFkZXYsIHR4X2RvbmUsIHFkZXYtPm5kZXYsCisJCQkJICAgIkZyYW1lIHRvbyBsb25nLCBidXQgc2VudCBhbnl3YXkuXG4iKTsKIAkJfQogCQlpZiAobWFjX3JzcC0+ZmxhZ3MxICYgT0JfTUFDX0lPQ0JfUlNQX0IpIHsKLQkJCVFQUklOVEsocWRldiwgVFhfRE9ORSwgV0FSTklORywKLQkJCQkiUENJIGJhY2twbGFuZSBlcnJvci4gRnJhbWUgbm90IHNlbnQuXG4iKTsKKwkJCW5ldGlmX3dhcm4ocWRldiwgdHhfZG9uZSwgcWRldi0+bmRldiwKKwkJCQkgICAiUENJIGJhY2twbGFuZSBlcnJvci4gRnJhbWUgbm90IHNlbnQuXG4iKTsKIAkJfQogCX0KIAlhdG9taWNfaW5jKCZ0eF9yaW5nLT50eF9jb3VudCk7CkBAIC0xODE3LDMzICsyMTQwLDM1IEBACiB7CiAJc3dpdGNoIChpYl9hZV9yc3AtPmV2ZW50KSB7CiAJY2FzZSBNR01UX0VSUl9FVkVOVDoKLQkJUVBSSU5USyhxZGV2LCBSWF9FUlIsIEVSUiwKLQkJCSJNYW5hZ2VtZW50IFByb2Nlc3NvciBGYXRhbCBFcnJvci5cbiIpOworCQluZXRpZl9lcnIocWRldiwgcnhfZXJyLCBxZGV2LT5uZGV2LAorCQkJICAiTWFuYWdlbWVudCBQcm9jZXNzb3IgRmF0YWwgRXJyb3IuXG4iKTsKIAkJcWxfcXVldWVfZndfZXJyb3IocWRldik7CiAJCXJldHVybjsKIAogCWNhc2UgQ0FNX0xPT0tVUF9FUlJfRVZFTlQ6Ci0JCVFQUklOVEsocWRldiwgTElOSywgRVJSLAotCQkJIk11bHRpcGxlIENBTSBoaXRzIGxvb2t1cCBvY2N1cnJlZC5cbiIpOwotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiVGhpcyBldmVudCBzaG91bGRuJ3Qgb2NjdXIuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGxpbmssIHFkZXYtPm5kZXYsCisJCQkgICJNdWx0aXBsZSBDQU0gaGl0cyBsb29rdXAgb2NjdXJyZWQuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIlRoaXMgZXZlbnQgc2hvdWxkbid0IG9jY3VyLlxuIik7CiAJCXFsX3F1ZXVlX2FzaWNfZXJyb3IocWRldik7CiAJCXJldHVybjsKIAogCWNhc2UgU09GVF9FQ0NfRVJST1JfRVZFTlQ6Ci0JCVFQUklOVEsocWRldiwgUlhfRVJSLCBFUlIsICJTb2Z0IEVDQyBlcnJvciBkZXRlY3RlZC5cbiIpOworCQluZXRpZl9lcnIocWRldiwgcnhfZXJyLCBxZGV2LT5uZGV2LAorCQkJICAiU29mdCBFQ0MgZXJyb3IgZGV0ZWN0ZWQuXG4iKTsKIAkJcWxfcXVldWVfYXNpY19lcnJvcihxZGV2KTsKIAkJYnJlYWs7CiAKIAljYXNlIFBDSV9FUlJfQU5PTl9CVUZfUkQ6Ci0JCVFQUklOVEsocWRldiwgUlhfRVJSLCBFUlIsCi0JCQkiUENJIGVycm9yIG9jY3VycmVkIHdoZW4gcmVhZGluZyBhbm9ueW1vdXMgYnVmZmVycyBmcm9tIHJ4X3JpbmcgJWQuXG4iLAotCQkJaWJfYWVfcnNwLT5xX2lkKTsKKwkJbmV0aWZfZXJyKHFkZXYsIHJ4X2VyciwgcWRldi0+bmRldiwKKwkJCSAgIlBDSSBlcnJvciBvY2N1cnJlZCB3aGVuIHJlYWRpbmcgYW5vbnltb3VzIGJ1ZmZlcnMgZnJvbSByeF9yaW5nICVkLlxuIiwKKwkJCSAgaWJfYWVfcnNwLT5xX2lkKTsKIAkJcWxfcXVldWVfYXNpY19lcnJvcihxZGV2KTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiVW5leHBlY3RlZCBldmVudCAlZC5cbiIsCi0JCQlpYl9hZV9yc3AtPmV2ZW50KTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIlVuZXhwZWN0ZWQgZXZlbnQgJWQuXG4iLAorCQkJICBpYl9hZV9yc3AtPmV2ZW50KTsKIAkJcWxfcXVldWVfYXNpY19lcnJvcihxZGV2KTsKIAkJYnJlYWs7CiAJfQpAQCAtMTg2MCw5ICsyMTg1LDkgQEAKIAkvKiBXaGlsZSB0aGVyZSBhcmUgZW50cmllcyBpbiB0aGUgY29tcGxldGlvbiBxdWV1ZS4gKi8KIAl3aGlsZSAocHJvZCAhPSByeF9yaW5nLT5jbnNtcl9pZHgpIHsKIAotCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkiY3FfaWQgPSAlZCwgcHJvZCA9ICVkLCBjbnNtciA9ICVkLlxuLiIsIHJ4X3JpbmctPmNxX2lkLAotCQkJcHJvZCwgcnhfcmluZy0+Y25zbXJfaWR4KTsKKwkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCSAgICAgImNxX2lkID0gJWQsIHByb2QgPSAlZCwgY25zbXIgPSAlZC5cbi4iLAorCQkJICAgICByeF9yaW5nLT5jcV9pZCwgcHJvZCwgcnhfcmluZy0+Y25zbXJfaWR4KTsKIAogCQluZXRfcnNwID0gKHN0cnVjdCBvYl9tYWNfaW9jYl9yc3AgKilyeF9yaW5nLT5jdXJyX2VudHJ5OwogCQlybWIoKTsKQEAgLTE4NzMsOSArMjE5OCw5IEBACiAJCQlxbF9wcm9jZXNzX21hY190eF9pbnRyKHFkZXYsIG5ldF9yc3ApOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkJIkhpdCBkZWZhdWx0IGNhc2UsIG5vdCBoYW5kbGVkISBkcm9wcGluZyB0aGUgcGFja2V0LCBvcGNvZGUgPSAleC5cbiIsCi0JCQkJbmV0X3JzcC0+b3Bjb2RlKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCByeF9zdGF0dXMsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiSGl0IGRlZmF1bHQgY2FzZSwgbm90IGhhbmRsZWQhIGRyb3BwaW5nIHRoZSBwYWNrZXQsIG9wY29kZSA9ICV4LlxuIiwKKwkJCQkgICAgIG5ldF9yc3AtPm9wY29kZSk7CiAJCX0KIAkJY291bnQrKzsKIAkJcWxfdXBkYXRlX2NxKHJ4X3JpbmcpOwpAQCAtMTkwNyw5ICsyMjMyLDkgQEAKIAkvKiBXaGlsZSB0aGVyZSBhcmUgZW50cmllcyBpbiB0aGUgY29tcGxldGlvbiBxdWV1ZS4gKi8KIAl3aGlsZSAocHJvZCAhPSByeF9yaW5nLT5jbnNtcl9pZHgpIHsKIAotCQlRUFJJTlRLKHFkZXYsIFJYX1NUQVRVUywgREVCVUcsCi0JCQkiY3FfaWQgPSAlZCwgcHJvZCA9ICVkLCBjbnNtciA9ICVkLlxuLiIsIHJ4X3JpbmctPmNxX2lkLAotCQkJcHJvZCwgcnhfcmluZy0+Y25zbXJfaWR4KTsKKwkJbmV0aWZfcHJpbnRrKHFkZXYsIHJ4X3N0YXR1cywgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCSAgICAgImNxX2lkID0gJWQsIHByb2QgPSAlZCwgY25zbXIgPSAlZC5cbi4iLAorCQkJICAgICByeF9yaW5nLT5jcV9pZCwgcHJvZCwgcnhfcmluZy0+Y25zbXJfaWR4KTsKIAogCQluZXRfcnNwID0gcnhfcmluZy0+Y3Vycl9lbnRyeTsKIAkJcm1iKCk7CkBAIC0xOTI1LDExICsyMjUwLDEwIEBACiAJCQkJCQluZXRfcnNwKTsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJewotCQkJCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywKLQkJCQkJIkhpdCBkZWZhdWx0IGNhc2UsIG5vdCBoYW5kbGVkISBkcm9wcGluZyB0aGUgcGFja2V0LCBvcGNvZGUgPSAleC5cbiIsCi0JCQkJCW5ldF9yc3AtPm9wY29kZSk7Ci0JCQl9CisJCQluZXRpZl9wcmludGsocWRldiwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCSAgICAgIkhpdCBkZWZhdWx0IGNhc2UsIG5vdCBoYW5kbGVkISBkcm9wcGluZyB0aGUgcGFja2V0LCBvcGNvZGUgPSAleC5cbiIsCisJCQkJICAgICBuZXRfcnNwLT5vcGNvZGUpOworCQkJYnJlYWs7CiAJCX0KIAkJY291bnQrKzsKIAkJcWxfdXBkYXRlX2NxKHJ4X3JpbmcpOwpAQCAtMTk1MCw4ICsyMjc0LDggQEAKIAlpbnQgaSwgd29ya19kb25lID0gMDsKIAlzdHJ1Y3QgaW50cl9jb250ZXh0ICpjdHggPSAmcWRldi0+aW50cl9jb250ZXh0W3J4X3JpbmctPmNxX2lkXTsKIAotCVFQUklOVEsocWRldiwgUlhfU1RBVFVTLCBERUJVRywgIkVudGVyLCBOQVBJIFBPTEwgY3FfaWQgPSAlZC5cbiIsCi0JCXJ4X3JpbmctPmNxX2lkKTsKKwluZXRpZl9wcmludGsocWRldiwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkgICAgICJFbnRlciwgTkFQSSBQT0xMIGNxX2lkID0gJWQuXG4iLCByeF9yaW5nLT5jcV9pZCk7CiAKIAkvKiBTZXJ2aWNlIHRoZSBUWCByaW5ncyBmaXJzdC4gIFRoZXkgc3RhcnQKIAkgKiByaWdodCBhZnRlciB0aGUgUlNTIHJpbmdzLiAqLwpAQCAtMTk2Myw5ICsyMjg3LDkgQEAKIAkJaWYgKChjdHgtPmlycV9tYXNrICYgKDEgPDwgdHJ4X3JpbmctPmNxX2lkKSkgJiYKIAkJCShxbF9yZWFkX3NoX3JlZyh0cnhfcmluZy0+cHJvZF9pZHhfc2hfcmVnKSAhPQogCQkJCQl0cnhfcmluZy0+Y25zbXJfaWR4KSkgewotCQkJUVBSSU5USyhxZGV2LCBJTlRSLCBERUJVRywKLQkJCQkiJXM6IFNlcnZpY2luZyBUWCBjb21wbGV0aW9uIHJpbmcgJWQuXG4iLAotCQkJCV9fZnVuY19fLCB0cnhfcmluZy0+Y3FfaWQpOworCQkJbmV0aWZfcHJpbnRrKHFkZXYsIGludHIsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiJXM6IFNlcnZpY2luZyBUWCBjb21wbGV0aW9uIHJpbmcgJWQuXG4iLAorCQkJCSAgICAgX19mdW5jX18sIHRyeF9yaW5nLT5jcV9pZCk7CiAJCQlxbF9jbGVhbl9vdXRib3VuZF9yeF9yaW5nKHRyeF9yaW5nKTsKIAkJfQogCX0KQEAgLTE5NzUsOSArMjI5OSw5IEBACiAJICovCiAJaWYgKHFsX3JlYWRfc2hfcmVnKHJ4X3JpbmctPnByb2RfaWR4X3NoX3JlZykgIT0KIAkJCQkJcnhfcmluZy0+Y25zbXJfaWR4KSB7Ci0JCVFQUklOVEsocWRldiwgSU5UUiwgREVCVUcsCi0JCQkiJXM6IFNlcnZpY2luZyBSWCBjb21wbGV0aW9uIHJpbmcgJWQuXG4iLAotCQkJX19mdW5jX18sIHJ4X3JpbmctPmNxX2lkKTsKKwkJbmV0aWZfcHJpbnRrKHFkZXYsIGludHIsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkgICAgICIlczogU2VydmljaW5nIFJYIGNvbXBsZXRpb24gcmluZyAlZC5cbiIsCisJCQkgICAgIF9fZnVuY19fLCByeF9yaW5nLT5jcV9pZCk7CiAJCXdvcmtfZG9uZSA9IHFsX2NsZWFuX2luYm91bmRfcnhfcmluZyhyeF9yaW5nLCBidWRnZXQpOwogCX0KIApAQCAtMTk5NCwxMiArMjMxOCwxMyBAQAogCiAJcWRldi0+dmxncnAgPSBncnA7CiAJaWYgKGdycCkgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLCAiVHVybmluZyBvbiBWTEFOIGluIE5JQ19SQ1ZfQ0ZHLlxuIik7CisJCW5ldGlmX3ByaW50ayhxZGV2LCBpZnVwLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJICAgICAiVHVybmluZyBvbiBWTEFOIGluIE5JQ19SQ1ZfQ0ZHLlxuIik7CiAJCXFsX3dyaXRlMzIocWRldiwgTklDX1JDVl9DRkcsIE5JQ19SQ1ZfQ0ZHX1ZMQU5fTUFTSyB8CiAJCQkgICBOSUNfUkNWX0NGR19WTEFOX01BVENIX0FORF9OT04pOwogCX0gZWxzZSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCi0JCQkiVHVybmluZyBvZmYgVkxBTiBpbiBOSUNfUkNWX0NGRy5cbiIpOworCQluZXRpZl9wcmludGsocWRldiwgaWZ1cCwgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCSAgICAgIlR1cm5pbmcgb2ZmIFZMQU4gaW4gTklDX1JDVl9DRkcuXG4iKTsKIAkJcWxfd3JpdGUzMihxZGV2LCBOSUNfUkNWX0NGRywgTklDX1JDVl9DRkdfVkxBTl9NQVNLKTsKIAl9CiB9CkBAIC0yMDE1LDcgKzIzNDAsOCBAQAogCQlyZXR1cm47CiAJaWYgKHFsX3NldF9tYWNfYWRkcl9yZWcKIAkgICAgKHFkZXYsICh1OCAqKSAmZW5hYmxlX2JpdCwgTUFDX0FERFJfVFlQRV9WTEFOLCB2aWQpKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGluaXQgdmxhbiBhZGRyZXNzLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJICAiRmFpbGVkIHRvIGluaXQgdmxhbiBhZGRyZXNzLlxuIik7CiAJfQogCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwogfQpAQCAtMjAzMiw3ICsyMzU4LDggQEAKIAogCWlmIChxbF9zZXRfbWFjX2FkZHJfcmVnCiAJICAgIChxZGV2LCAodTggKikgJmVuYWJsZV9iaXQsIE1BQ19BRERSX1RZUEVfVkxBTiwgdmlkKSkgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBjbGVhciB2bGFuIGFkZHJlc3MuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkgICJGYWlsZWQgdG8gY2xlYXIgdmxhbiBhZGRyZXNzLlxuIik7CiAJfQogCXFsX3NlbV91bmxvY2socWRldiwgU0VNX01BQ19BRERSX01BU0spOwogCkBAIC0yMDYxLDcgKzIzODgsOCBAQAogCiAJc3Bpbl9sb2NrKCZxZGV2LT5od19sb2NrKTsKIAlpZiAoYXRvbWljX3JlYWQoJnFkZXYtPmludHJfY29udGV4dFswXS5pcnFfY250KSkgewotCQlRUFJJTlRLKHFkZXYsIElOVFIsIERFQlVHLCAiU2hhcmVkIEludGVycnVwdCwgTm90IG91cnMhXG4iKTsKKwkJbmV0aWZfcHJpbnRrKHFkZXYsIGludHIsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkgICAgICJTaGFyZWQgSW50ZXJydXB0LCBOb3Qgb3VycyFcbiIpOwogCQlzcGluX3VubG9jaygmcWRldi0+aHdfbG9jayk7CiAJCXJldHVybiBJUlFfTk9ORTsKIAl9CkBAIC0yMDc0LDEwICsyNDAyLDExIEBACiAJICovCiAJaWYgKHZhciAmIFNUU19GRSkgewogCQlxbF9xdWV1ZV9hc2ljX2Vycm9yKHFkZXYpOwotCQlRUFJJTlRLKHFkZXYsIElOVFIsIEVSUiwgIkdvdCBmYXRhbCBlcnJvciwgU1RTID0gJXguXG4iLCB2YXIpOworCQluZXRpZl9lcnIocWRldiwgaW50ciwgcWRldi0+bmRldiwKKwkJCSAgIkdvdCBmYXRhbCBlcnJvciwgU1RTID0gJXguXG4iLCB2YXIpOwogCQl2YXIgPSBxbF9yZWFkMzIocWRldiwgRVJSX1NUUyk7Ci0JCVFQUklOVEsocWRldiwgSU5UUiwgRVJSLAotCQkJIlJlc2V0dGluZyBjaGlwLiBFcnJvciBTdGF0dXMgUmVnaXN0ZXIgPSAweCV4XG4iLCB2YXIpOworCQluZXRpZl9lcnIocWRldiwgaW50ciwgcWRldi0+bmRldiwKKwkJCSAgIlJlc2V0dGluZyBjaGlwLiBFcnJvciBTdGF0dXMgUmVnaXN0ZXIgPSAweCV4XG4iLCB2YXIpOwogCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CiAJfQogCkBAIC0yMDkwLDcgKzI0MTksOCBAQAogCQkgKiBXZSd2ZSBnb3QgYW4gYXN5bmMgZXZlbnQgb3IgbWFpbGJveCBjb21wbGV0aW9uLgogCQkgKiBIYW5kbGUgaXQgYW5kIGNsZWFyIHRoZSBzb3VyY2Ugb2YgdGhlIGludGVycnVwdC4KIAkJICovCi0JCVFQUklOVEsocWRldiwgSU5UUiwgRVJSLCAiR290IE1QSSBwcm9jZXNzb3IgaW50ZXJydXB0LlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpbnRyLCBxZGV2LT5uZGV2LAorCQkJICAiR290IE1QSSBwcm9jZXNzb3IgaW50ZXJydXB0LlxuIik7CiAJCXFsX2Rpc2FibGVfY29tcGxldGlvbl9pbnRlcnJ1cHQocWRldiwgaW50cl9jb250ZXh0LT5pbnRyKTsKIAkJcWxfd3JpdGUzMihxZGV2LCBJTlRSX01BU0ssIChJTlRSX01BU0tfUEkgPDwgMTYpKTsKIAkJcXVldWVfZGVsYXllZF93b3JrX29uKHNtcF9wcm9jZXNzb3JfaWQoKSwKQEAgLTIxMDUsOCArMjQzNSw4IEBACiAJICovCiAJdmFyID0gcWxfcmVhZDMyKHFkZXYsIElTUjEpOwogCWlmICh2YXIgJiBpbnRyX2NvbnRleHQtPmlycV9tYXNrKSB7Ci0JCVFQUklOVEsocWRldiwgSU5UUiwgSU5GTywKLQkJCSJXYWtpbmcgaGFuZGxlciBmb3IgcnhfcmluZ1swXS5cbiIpOworCQluZXRpZl9pbmZvKHFkZXYsIGludHIsIHFkZXYtPm5kZXYsCisJCQkgICAiV2FraW5nIGhhbmRsZXIgZm9yIHJ4X3JpbmdbMF0uXG4iKTsKIAkJcWxfZGlzYWJsZV9jb21wbGV0aW9uX2ludGVycnVwdChxZGV2LCBpbnRyX2NvbnRleHQtPmludHIpOwogCQluYXBpX3NjaGVkdWxlKCZyeF9yaW5nLT5uYXBpKTsKIAkJd29ya19kb25lKys7CkBAIC0yMjAzLDkgKzI1MzMsOSBAQAogCQlyZXR1cm4gTkVUREVWX1RYX09LOwogCiAJaWYgKHVubGlrZWx5KGF0b21pY19yZWFkKCZ0eF9yaW5nLT50eF9jb3VudCkgPCAyKSkgewotCQlRUFJJTlRLKHFkZXYsIFRYX1FVRVVFRCwgSU5GTywKLQkJCSIlczogc2h1dHRpbmcgZG93biB0eCBxdWV1ZSAlZCBkdSB0byBsYWNrIG9mIHJlc291cmNlcy5cbiIsCi0JCQlfX2Z1bmNfXywgdHhfcmluZ19pZHgpOworCQluZXRpZl9pbmZvKHFkZXYsIHR4X3F1ZXVlZCwgcWRldi0+bmRldiwKKwkJCSAgICIlczogc2h1dHRpbmcgZG93biB0eCBxdWV1ZSAlZCBkdSB0byBsYWNrIG9mIHJlc291cmNlcy5cbiIsCisJCQkgICBfX2Z1bmNfXywgdHhfcmluZ19pZHgpOwogCQluZXRpZl9zdG9wX3N1YnF1ZXVlKG5kZXYsIHR4X3JpbmctPndxX2lkKTsKIAkJYXRvbWljX2luYygmdHhfcmluZy0+cXVldWVfc3RvcHBlZCk7CiAJCXR4X3JpbmctPnR4X2Vycm9ycysrOwpAQCAtMjIyNiw4ICsyNTU2LDggQEAKIAltYWNfaW9jYl9wdHItPmZyYW1lX2xlbiA9IGNwdV90b19sZTE2KCh1MTYpIHNrYi0+bGVuKTsKIAogCWlmIChxZGV2LT52bGdycCAmJiB2bGFuX3R4X3RhZ19wcmVzZW50KHNrYikpIHsKLQkJUVBSSU5USyhxZGV2LCBUWF9RVUVVRUQsIERFQlVHLCAiQWRkaW5nIGEgdmxhbiB0YWcgJWQuXG4iLAotCQkJdmxhbl90eF90YWdfZ2V0KHNrYikpOworCQluZXRpZl9wcmludGsocWRldiwgdHhfcXVldWVkLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJICAgICAiQWRkaW5nIGEgdmxhbiB0YWcgJWQuXG4iLCB2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CiAJCW1hY19pb2NiX3B0ci0+ZmxhZ3MzIHw9IE9CX01BQ19JT0NCX1Y7CiAJCW1hY19pb2NiX3B0ci0+dmxhbl90Y2kgPSBjcHVfdG9fbGUxNih2bGFuX3R4X3RhZ19nZXQoc2tiKSk7CiAJfQpAQCAtMjI0MSw4ICsyNTcxLDggQEAKIAl9CiAJaWYgKHFsX21hcF9zZW5kKHFkZXYsIG1hY19pb2NiX3B0ciwgc2tiLCB0eF9yaW5nX2Rlc2MpICE9CiAJCQlORVRERVZfVFhfT0spIHsKLQkJUVBSSU5USyhxZGV2LCBUWF9RVUVVRUQsIEVSUiwKLQkJCQkiQ291bGQgbm90IG1hcCB0aGUgc2VnbWVudHMuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIHR4X3F1ZXVlZCwgcWRldi0+bmRldiwKKwkJCSAgIkNvdWxkIG5vdCBtYXAgdGhlIHNlZ21lbnRzLlxuIik7CiAJCXR4X3JpbmctPnR4X2Vycm9ycysrOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQpAQCAtMjI1Myw4ICsyNTgzLDkgQEAKIAl3bWIoKTsKIAogCXFsX3dyaXRlX2RiX3JlZyh0eF9yaW5nLT5wcm9kX2lkeCwgdHhfcmluZy0+cHJvZF9pZHhfZGJfcmVnKTsKLQlRUFJJTlRLKHFkZXYsIFRYX1FVRVVFRCwgREVCVUcsICJ0eCBxdWV1ZWQsIHNsb3QgJWQsIGxlbiAlZFxuIiwKLQkJdHhfcmluZy0+cHJvZF9pZHgsIHNrYi0+bGVuKTsKKwluZXRpZl9wcmludGsocWRldiwgdHhfcXVldWVkLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkgICAgICJ0eCBxdWV1ZWQsIHNsb3QgJWQsIGxlbiAlZFxuIiwKKwkJICAgICB0eF9yaW5nLT5wcm9kX2lkeCwgc2tiLT5sZW4pOwogCiAJYXRvbWljX2RlYygmdHhfcmluZy0+dHhfY291bnQpOwogCXJldHVybiBORVRERVZfVFhfT0s7CkBAIC0yMjg1LDggKzI2MTYsOCBAQAogCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChxZGV2LT5wZGV2LAogCQkJCSBQQUdFX1NJWkUsICZxZGV2LT5yeF9yaW5nX3NoYWRvd19yZWdfZG1hKTsKIAlpZiAocWRldi0+cnhfcmluZ19zaGFkb3dfcmVnX2FyZWEgPT0gTlVMTCkgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCSJBbGxvY2F0aW9uIG9mIFJYIHNoYWRvdyBzcGFjZSBmYWlsZWQuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkgICJBbGxvY2F0aW9uIG9mIFJYIHNoYWRvdyBzcGFjZSBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1lbXNldChxZGV2LT5yeF9yaW5nX3NoYWRvd19yZWdfYXJlYSwgMCwgUEFHRV9TSVpFKTsKQEAgLTIyOTQsOCArMjYyNSw4IEBACiAJICAgIHBjaV9hbGxvY19jb25zaXN0ZW50KHFkZXYtPnBkZXYsIFBBR0VfU0laRSwKIAkJCQkgJnFkZXYtPnR4X3Jpbmdfc2hhZG93X3JlZ19kbWEpOwogCWlmIChxZGV2LT50eF9yaW5nX3NoYWRvd19yZWdfYXJlYSA9PSBOVUxMKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJIkFsbG9jYXRpb24gb2YgVFggc2hhZG93IHNwYWNlIGZhaWxlZC5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCSAgIkFsbG9jYXRpb24gb2YgVFggc2hhZG93IHNwYWNlIGZhaWxlZC5cbiIpOwogCQlnb3RvIGVycl93cXBfc2hfYXJlYTsKIAl9CiAJbWVtc2V0KHFkZXYtPnR4X3Jpbmdfc2hhZG93X3JlZ19hcmVhLCAwLCBQQUdFX1NJWkUpOwpAQCAtMjM0OSw3ICsyNjgwLDcgQEAKIAogCWlmICgodHhfcmluZy0+d3FfYmFzZSA9PSBOVUxMKSB8fAogCSAgICB0eF9yaW5nLT53cV9iYXNlX2RtYSAmIFdRX0FERFJfQUxJR04pIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJ0eF9yaW5nIGFsbG9jIGZhaWxlZC5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwgInR4X3JpbmcgYWxsb2MgZmFpbGVkLlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAl0eF9yaW5nLT5xID0KQEAgLTI0MDAsNyArMjczMSw4IEBACiAJZm9yIChpID0gMDsgaSA8IHJ4X3JpbmctPnNicV9sZW47IGkrKykgewogCQlzYnFfZGVzYyA9ICZyeF9yaW5nLT5zYnFbaV07CiAJCWlmIChzYnFfZGVzYyA9PSBOVUxMKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgInNicV9kZXNjICVkIGlzIE5VTEwuXG4iLCBpKTsKKwkJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJCSAgInNicV9kZXNjICVkIGlzIE5VTEwuXG4iLCBpKTsKIAkJCXJldHVybjsKIAkJfQogCQlpZiAoc2JxX2Rlc2MtPnAuc2tiKSB7CkBAIC0yNTI3LDcgKzI4NTksNyBAQAogCQkJCSAmcnhfcmluZy0+Y3FfYmFzZV9kbWEpOwogCiAJaWYgKHJ4X3JpbmctPmNxX2Jhc2UgPT0gTlVMTCkgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgInJ4X3JpbmcgYWxsb2MgZmFpbGVkLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LCAicnhfcmluZyBhbGxvYyBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0yNTQwLDggKzI4NzIsOCBAQAogCQkJCQkgJnJ4X3JpbmctPnNicV9iYXNlX2RtYSk7CiAKIAkJaWYgKHJ4X3JpbmctPnNicV9iYXNlID09IE5VTEwpIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCSJTbWFsbCBidWZmZXIgcXVldWUgYWxsb2NhdGlvbiBmYWlsZWQuXG4iKTsKKwkJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJCSAgIlNtYWxsIGJ1ZmZlciBxdWV1ZSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOwogCQkJZ290byBlcnJfbWVtOwogCQl9CiAKQEAgLTI1NTIsOCArMjg4NCw4IEBACiAJCSAgICBrbWFsbG9jKHJ4X3JpbmctPnNicV9sZW4gKiBzaXplb2Yoc3RydWN0IGJxX2Rlc2MpLAogCQkJICAgIEdGUF9LRVJORUwpOwogCQlpZiAocnhfcmluZy0+c2JxID09IE5VTEwpIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCSJTbWFsbCBidWZmZXIgcXVldWUgY29udHJvbCBibG9jayBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOworCQkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkJICAiU21hbGwgYnVmZmVyIHF1ZXVlIGNvbnRyb2wgYmxvY2sgYWxsb2NhdGlvbiBmYWlsZWQuXG4iKTsKIAkJCWdvdG8gZXJyX21lbTsKIAkJfQogCkBAIC0yNTY5LDggKzI5MDEsOCBAQAogCQkJCQkgJnJ4X3JpbmctPmxicV9iYXNlX2RtYSk7CiAKIAkJaWYgKHJ4X3JpbmctPmxicV9iYXNlID09IE5VTEwpIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCSJMYXJnZSBidWZmZXIgcXVldWUgYWxsb2NhdGlvbiBmYWlsZWQuXG4iKTsKKwkJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJCSAgIkxhcmdlIGJ1ZmZlciBxdWV1ZSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOwogCQkJZ290byBlcnJfbWVtOwogCQl9CiAJCS8qCkBAIC0yNTgwLDggKzI5MTIsOCBAQAogCQkgICAga21hbGxvYyhyeF9yaW5nLT5sYnFfbGVuICogc2l6ZW9mKHN0cnVjdCBicV9kZXNjKSwKIAkJCSAgICBHRlBfS0VSTkVMKTsKIAkJaWYgKHJ4X3JpbmctPmxicSA9PSBOVUxMKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCQkiTGFyZ2UgYnVmZmVyIHF1ZXVlIGNvbnRyb2wgYmxvY2sgYWxsb2NhdGlvbiBmYWlsZWQuXG4iKTsKKwkJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJCSAgIkxhcmdlIGJ1ZmZlciBxdWV1ZSBjb250cm9sIGJsb2NrIGFsbG9jYXRpb24gZmFpbGVkLlxuIik7CiAJCQlnb3RvIGVycl9tZW07CiAJCX0KIApAQCAtMjYxMCwxMCArMjk0MiwxMCBAQAogCQlmb3IgKGkgPSAwOyBpIDwgdHhfcmluZy0+d3FfbGVuOyBpKyspIHsKIAkJCXR4X3JpbmdfZGVzYyA9ICZ0eF9yaW5nLT5xW2ldOwogCQkJaWYgKHR4X3JpbmdfZGVzYyAmJiB0eF9yaW5nX2Rlc2MtPnNrYikgewotCQkJCVFQUklOVEsocWRldiwgSUZET1dOLCBFUlIsCi0JCQkJIkZyZWVpbmcgbG9zdCBTS0IgJXAsIGZyb20gcXVldWUgJWQsIGluZGV4ICVkLlxuIiwKLQkJCQkJdHhfcmluZ19kZXNjLT5za2IsIGosCi0JCQkJCXR4X3JpbmdfZGVzYy0+aW5kZXgpOworCQkJCW5ldGlmX2VycihxZGV2LCBpZmRvd24sIHFkZXYtPm5kZXYsCisJCQkJCSAgIkZyZWVpbmcgbG9zdCBTS0IgJXAsIGZyb20gcXVldWUgJWQsIGluZGV4ICVkLlxuIiwKKwkJCQkJICB0eF9yaW5nX2Rlc2MtPnNrYiwgaiwKKwkJCQkJICB0eF9yaW5nX2Rlc2MtPmluZGV4KTsKIAkJCQlxbF91bm1hcF9zZW5kKHFkZXYsIHR4X3JpbmdfZGVzYywKIAkJCQkJICAgICAgdHhfcmluZ19kZXNjLT5tYXBfY250KTsKIAkJCQlkZXZfa2ZyZWVfc2tiKHR4X3JpbmdfZGVzYy0+c2tiKTsKQEAgLTI2NDQsMTYgKzI5NzYsMTYgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBxZGV2LT5yeF9yaW5nX2NvdW50OyBpKyspIHsKIAkJaWYgKHFsX2FsbG9jX3J4X3Jlc291cmNlcyhxZGV2LCAmcWRldi0+cnhfcmluZ1tpXSkgIT0gMCkgewotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJIlJYIHJlc291cmNlIGFsbG9jYXRpb24gZmFpbGVkLlxuIik7CisJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICJSWCByZXNvdXJjZSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOwogCQkJZ290byBlcnJfbWVtOwogCQl9CiAJfQogCS8qIEFsbG9jYXRlIHR4IHF1ZXVlIHJlc291cmNlcyAqLwogCWZvciAoaSA9IDA7IGkgPCBxZGV2LT50eF9yaW5nX2NvdW50OyBpKyspIHsKIAkJaWYgKHFsX2FsbG9jX3R4X3Jlc291cmNlcyhxZGV2LCAmcWRldi0+dHhfcmluZ1tpXSkgIT0gMCkgewotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJIlRYIHJlc291cmNlIGFsbG9jYXRpb24gZmFpbGVkLlxuIik7CisJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICJUWCByZXNvdXJjZSBhbGxvY2F0aW9uIGZhaWxlZC5cbiIpOwogCQkJZ290byBlcnJfbWVtOwogCQl9CiAJfQpAQCAtMjc4OCwxNCArMzEyMCwxNSBAQAogCQljcWljYi0+cGt0X2RlbGF5ID0gY3B1X3RvX2xlMTYocWRldi0+cnhfbWF4X2NvYWxlc2NlZF9mcmFtZXMpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLCAiSW52YWxpZCByeF9yaW5nLT50eXBlID0gJWQuXG4iLAotCQkJcnhfcmluZy0+dHlwZSk7CisJCW5ldGlmX3ByaW50ayhxZGV2LCBpZnVwLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJICAgICAiSW52YWxpZCByeF9yaW5nLT50eXBlID0gJWQuXG4iLCByeF9yaW5nLT50eXBlKTsKIAl9Ci0JUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywgIkluaXRpYWxpemluZyByeCB3b3JrIHF1ZXVlLlxuIik7CisJbmV0aWZfcHJpbnRrKHFkZXYsIGlmdXAsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCSAgICAgIkluaXRpYWxpemluZyByeCB3b3JrIHF1ZXVlLlxuIik7CiAJZXJyID0gcWxfd3JpdGVfY2ZnKHFkZXYsIGNxaWNiLCBzaXplb2Yoc3RydWN0IGNxaWNiKSwKIAkJCSAgIENGR19MQ1EsIHJ4X3JpbmctPmNxX2lkKTsKIAlpZiAoZXJyKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGxvYWQgQ1FJQ0IuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsICJGYWlsZWQgdG8gbG9hZCBDUUlDQi5cbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlyZXR1cm4gZXJyOwpAQCAtMjg0MSwxMCArMzE3NCwxMSBAQAogCWVyciA9IHFsX3dyaXRlX2NmZyhxZGV2LCB3cWljYiwgc2l6ZW9mKCp3cWljYiksIENGR19MUlEsCiAJCQkgICAodTE2KSB0eF9yaW5nLT53cV9pZCk7CiAJaWYgKGVycikgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBsb2FkIHR4X3JpbmcuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsICJGYWlsZWQgdG8gbG9hZCB0eF9yaW5nLlxuIik7CiAJCXJldHVybiBlcnI7CiAJfQotCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJTdWNjZXNzZnVsbHkgbG9hZGVkIFdRSUNCLlxuIik7CisJbmV0aWZfcHJpbnRrKHFkZXYsIGlmdXAsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCSAgICAgIlN1Y2Nlc3NmdWxseSBsb2FkZWQgV1FJQ0IuXG4iKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0yODk4LDE1ICszMjMyLDE1IEBACiAJCWlmIChlcnIgPCAwKSB7CiAJCQlrZnJlZShxZGV2LT5tc2lfeF9lbnRyeSk7CiAJCQlxZGV2LT5tc2lfeF9lbnRyeSA9IE5VTEw7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIFdBUk5JTkcsCi0JCQkJIk1TSS1YIEVuYWJsZSBmYWlsZWQsIHRyeWluZyBNU0kuXG4iKTsKKwkJCW5ldGlmX3dhcm4ocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICAiTVNJLVggRW5hYmxlIGZhaWxlZCwgdHJ5aW5nIE1TSS5cbiIpOwogCQkJcWRldi0+aW50cl9jb3VudCA9IDE7CiAJCQlxbGdlX2lycV90eXBlID0gTVNJX0lSUTsKIAkJfSBlbHNlIGlmIChlcnIgPT0gMCkgewogCQkJc2V0X2JpdChRTF9NU0lYX0VOQUJMRUQsICZxZGV2LT5mbGFncyk7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIElORk8sCi0JCQkJIk1TSS1YIEVuYWJsZWQsIGdvdCAlZCB2ZWN0b3JzLlxuIiwKLQkJCQlxZGV2LT5pbnRyX2NvdW50KTsKKwkJCW5ldGlmX2luZm8ocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICAiTVNJLVggRW5hYmxlZCwgZ290ICVkIHZlY3RvcnMuXG4iLAorCQkJCSAgIHFkZXYtPmludHJfY291bnQpOwogCQkJcmV0dXJuOwogCQl9CiAJfQpAQCAtMjkxNSwxMyArMzI0OSwxNCBAQAogCWlmIChxbGdlX2lycV90eXBlID09IE1TSV9JUlEpIHsKIAkJaWYgKCFwY2lfZW5hYmxlX21zaShxZGV2LT5wZGV2KSkgewogCQkJc2V0X2JpdChRTF9NU0lfRU5BQkxFRCwgJnFkZXYtPmZsYWdzKTsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgSU5GTywKLQkJCQkiUnVubmluZyB3aXRoIE1TSSBpbnRlcnJ1cHRzLlxuIik7CisJCQluZXRpZl9pbmZvKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkJICAgIlJ1bm5pbmcgd2l0aCBNU0kgaW50ZXJydXB0cy5cbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJfQogCXFsZ2VfaXJxX3R5cGUgPSBMRUdfSVJROwotCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJSdW5uaW5nIHdpdGggbGVnYWN5IGludGVycnVwdHMuXG4iKTsKKwluZXRpZl9wcmludGsocWRldiwgaWZ1cCwgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJICAgICAiUnVubmluZyB3aXRoIGxlZ2FjeSBpbnRlcnJ1cHRzLlxuIik7CiB9CiAKIC8qIEVhY2ggdmVjdG9yIHNlcnZpY2VzIDEgUlNTIHJpbmcgYW5kIGFuZCAxIG9yIG1vcmUKQEAgLTMwOTMsMTIgKzM0MjgsMTIgQEAKIAkJCWlmICh0ZXN0X2JpdChRTF9NU0lYX0VOQUJMRUQsICZxZGV2LT5mbGFncykpIHsKIAkJCQlmcmVlX2lycShxZGV2LT5tc2lfeF9lbnRyeVtpXS52ZWN0b3IsCiAJCQkJCSAmcWRldi0+cnhfcmluZ1tpXSk7Ci0JCQkJUVBSSU5USyhxZGV2LCBJRkRPV04sIERFQlVHLAotCQkJCQkiZnJlZWluZyBtc2l4IGludGVycnVwdCAlZC5cbiIsIGkpOworCQkJCW5ldGlmX3ByaW50ayhxZGV2LCBpZmRvd24sIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJCSAgICAgImZyZWVpbmcgbXNpeCBpbnRlcnJ1cHQgJWQuXG4iLCBpKTsKIAkJCX0gZWxzZSB7CiAJCQkJZnJlZV9pcnEocWRldi0+cGRldi0+aXJxLCAmcWRldi0+cnhfcmluZ1swXSk7Ci0JCQkJUVBSSU5USyhxZGV2LCBJRkRPV04sIERFQlVHLAotCQkJCQkiZnJlZWluZyBtc2kgaW50ZXJydXB0ICVkLlxuIiwgaSk7CisJCQkJbmV0aWZfcHJpbnRrKHFkZXYsIGlmZG93biwgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCQkJICAgICAiZnJlZWluZyBtc2kgaW50ZXJydXB0ICVkLlxuIiwgaSk7CiAJCQl9CiAJCX0KIAl9CkBAIC0zMTIzLDMyICszNDU4LDMzIEBACiAJCQkJCSAgICAgaW50cl9jb250ZXh0LT5uYW1lLAogCQkJCQkgICAgICZxZGV2LT5yeF9yaW5nW2ldKTsKIAkJCWlmIChzdGF0dXMpIHsKLQkJCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCQkJIkZhaWxlZCByZXF1ZXN0IGZvciBNU0lYIGludGVycnVwdCAlZC5cbiIsCi0JCQkJCWkpOworCQkJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJCQkgICJGYWlsZWQgcmVxdWVzdCBmb3IgTVNJWCBpbnRlcnJ1cHQgJWQuXG4iLAorCQkJCQkgIGkpOwogCQkJCWdvdG8gZXJyX2lycTsKIAkJCX0gZWxzZSB7Ci0JCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywKLQkJCQkJIkhvb2tlZCBpbnRyICVkLCBxdWV1ZSB0eXBlICVzJXMlcywgd2l0aCBuYW1lICVzLlxuIiwKLQkJCQkJaSwKLQkJCQkJcWRldi0+cnhfcmluZ1tpXS50eXBlID09Ci0JCQkJCURFRkFVTFRfUSA/ICJERUZBVUxUX1EiIDogIiIsCi0JCQkJCXFkZXYtPnJ4X3JpbmdbaV0udHlwZSA9PQotCQkJCQlUWF9RID8gIlRYX1EiIDogIiIsCi0JCQkJCXFkZXYtPnJ4X3JpbmdbaV0udHlwZSA9PQotCQkJCQlSWF9RID8gIlJYX1EiIDogIiIsIGludHJfY29udGV4dC0+bmFtZSk7CisJCQkJbmV0aWZfcHJpbnRrKHFkZXYsIGlmdXAsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJCSAgICAgIkhvb2tlZCBpbnRyICVkLCBxdWV1ZSB0eXBlICVzLCB3aXRoIG5hbWUgJXMuXG4iLAorCQkJCQkgICAgIGksCisJCQkJCSAgICAgcWRldi0+cnhfcmluZ1tpXS50eXBlID09IERFRkFVTFRfUSA/CisJCQkJCSAgICAgIkRFRkFVTFRfUSIgOgorCQkJCQkgICAgIHFkZXYtPnJ4X3JpbmdbaV0udHlwZSA9PSBUWF9RID8KKwkJCQkJICAgICAiVFhfUSIgOgorCQkJCQkgICAgIHFkZXYtPnJ4X3JpbmdbaV0udHlwZSA9PSBSWF9RID8KKwkJCQkJICAgICAiUlhfUSIgOiAiIiwKKwkJCQkJICAgICBpbnRyX2NvbnRleHQtPm5hbWUpOwogCQkJfQogCQl9IGVsc2UgewotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywKLQkJCQkidHJ5aW5nIG1zaSBvciBsZWdhY3kgaW50ZXJydXB0cy5cbiIpOwotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBERUJVRywKLQkJCQkiJXM6IGlycSA9ICVkLlxuIiwgX19mdW5jX18sIHBkZXYtPmlycSk7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLAotCQkJCSIlczogY29udGV4dC0+bmFtZSA9ICVzLlxuIiwgX19mdW5jX18sCi0JCQkgICAgICAgaW50cl9jb250ZXh0LT5uYW1lKTsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsCi0JCQkJIiVzOiBkZXZfaWQgPSAweCVwLlxuIiwgX19mdW5jX18sCi0JCQkgICAgICAgJnFkZXYtPnJ4X3JpbmdbMF0pOworCQkJbmV0aWZfcHJpbnRrKHFkZXYsIGlmdXAsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAidHJ5aW5nIG1zaSBvciBsZWdhY3kgaW50ZXJydXB0cy5cbiIpOworCQkJbmV0aWZfcHJpbnRrKHFkZXYsIGlmdXAsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiJXM6IGlycSA9ICVkLlxuIiwgX19mdW5jX18sIHBkZXYtPmlycSk7CisJCQluZXRpZl9wcmludGsocWRldiwgaWZ1cCwgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJCQkgICAgICIlczogY29udGV4dC0+bmFtZSA9ICVzLlxuIiwgX19mdW5jX18sCisJCQkJICAgICBpbnRyX2NvbnRleHQtPm5hbWUpOworCQkJbmV0aWZfcHJpbnRrKHFkZXYsIGlmdXAsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiJXM6IGRldl9pZCA9IDB4JXAuXG4iLCBfX2Z1bmNfXywKKwkJCQkgICAgICZxZGV2LT5yeF9yaW5nWzBdKTsKIAkJCXN0YXR1cyA9CiAJCQkgICAgcmVxdWVzdF9pcnEocGRldi0+aXJxLCBxbGdlX2lzciwKIAkJCQkJdGVzdF9iaXQoUUxfTVNJX0VOQUJMRUQsCkBAIC0zMTU4LDIwICszNDk0LDIwIEBACiAJCQlpZiAoc3RhdHVzKQogCQkJCWdvdG8gZXJyX2lycTsKIAotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJIkhvb2tlZCBpbnRyICVkLCBxdWV1ZSB0eXBlICVzJXMlcywgd2l0aCBuYW1lICVzLlxuIiwKLQkJCQlpLAotCQkJCXFkZXYtPnJ4X3JpbmdbMF0udHlwZSA9PQotCQkJCURFRkFVTFRfUSA/ICJERUZBVUxUX1EiIDogIiIsCi0JCQkJcWRldi0+cnhfcmluZ1swXS50eXBlID09IFRYX1EgPyAiVFhfUSIgOiAiIiwKLQkJCQlxZGV2LT5yeF9yaW5nWzBdLnR5cGUgPT0gUlhfUSA/ICJSWF9RIiA6ICIiLAotCQkJCWludHJfY29udGV4dC0+bmFtZSk7CisJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICJIb29rZWQgaW50ciAlZCwgcXVldWUgdHlwZSAlcywgd2l0aCBuYW1lICVzLlxuIiwKKwkJCQkgIGksCisJCQkJICBxZGV2LT5yeF9yaW5nWzBdLnR5cGUgPT0gREVGQVVMVF9RID8KKwkJCQkgICJERUZBVUxUX1EiIDoKKwkJCQkgIHFkZXYtPnJ4X3JpbmdbMF0udHlwZSA9PSBUWF9RID8gIlRYX1EiIDoKKwkJCQkgIHFkZXYtPnJ4X3JpbmdbMF0udHlwZSA9PSBSWF9RID8gIlJYX1EiIDogIiIsCisJCQkJICBpbnRyX2NvbnRleHQtPm5hbWUpOwogCQl9CiAJCWludHJfY29udGV4dC0+aG9va2VkID0gMTsKIAl9CiAJcmV0dXJuIHN0YXR1czsKIGVycl9pcnE6Ci0JUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gZ2V0IHRoZSBpbnRlcnJ1cHRzISEhL24iKTsKKwluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwgIkZhaWxlZCB0byBnZXQgdGhlIGludGVycnVwdHMhISEvbiIpOwogCXFsX2ZyZWVfaXJxKHFkZXYpOwogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0zMjA1LDE0ICszNTQxLDE1IEBACiAJbWVtY3B5KCh2b2lkICopJnJpY2ItPmlwdjZfaGFzaF9rZXlbMF0sIGluaXRfaGFzaF9zZWVkLCA0MCk7CiAJbWVtY3B5KCh2b2lkICopJnJpY2ItPmlwdjRfaGFzaF9rZXlbMF0sIGluaXRfaGFzaF9zZWVkLCAxNik7CiAKLQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLCAiSW5pdGlhbGl6aW5nIFJTUy5cbiIpOworCW5ldGlmX3ByaW50ayhxZGV2LCBpZnVwLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LCAiSW5pdGlhbGl6aW5nIFJTUy5cbiIpOwogCiAJc3RhdHVzID0gcWxfd3JpdGVfY2ZnKHFkZXYsIHJpY2IsIHNpemVvZigqcmljYiksIENGR19MUiwgMCk7CiAJaWYgKHN0YXR1cykgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBsb2FkIFJJQ0IuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsICJGYWlsZWQgdG8gbG9hZCBSSUNCLlxuIik7CiAJCXJldHVybiBzdGF0dXM7CiAJfQotCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJTdWNjZXNzZnVsbHkgbG9hZGVkIFJJQ0IuXG4iKTsKKwluZXRpZl9wcmludGsocWRldiwgaWZ1cCwgS0VSTl9ERUJVRywgcWRldi0+bmRldiwKKwkJICAgICAiU3VjY2Vzc2Z1bGx5IGxvYWRlZCBSSUNCLlxuIik7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMzIyNyw5ICszNTY0LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewogCQlzdGF0dXMgPSBxbF9zZXRfcm91dGluZ19yZWcocWRldiwgaSwgMCwgMCk7CiAJCWlmIChzdGF0dXMpIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCSJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHJlZ2lzdGVyIGZvciBDQU0gIgotCQkJCSJwYWNrZXRzLlxuIik7CisJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHJlZ2lzdGVyIGZvciBDQU0gcGFja2V0cy5cbiIpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0zMjUzLDE0ICszNTg5LDE0IEBACiAKIAlzdGF0dXMgPSBxbF9zZXRfcm91dGluZ19yZWcocWRldiwgUlRfSURYX0FMTF9FUlJfU0xPVCwgUlRfSURYX0VSUiwgMSk7CiAJaWYgKHN0YXR1cykgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCSJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHJlZ2lzdGVyIGZvciBlcnJvciBwYWNrZXRzLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJICAiRmFpbGVkIHRvIGluaXQgcm91dGluZyByZWdpc3RlciBmb3IgZXJyb3IgcGFja2V0cy5cbiIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCXN0YXR1cyA9IHFsX3NldF9yb3V0aW5nX3JlZyhxZGV2LCBSVF9JRFhfQkNBU1RfU0xPVCwgUlRfSURYX0JDQVNULCAxKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJIkZhaWxlZCB0byBpbml0IHJvdXRpbmcgcmVnaXN0ZXIgZm9yIGJyb2FkY2FzdCBwYWNrZXRzLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJICAiRmFpbGVkIHRvIGluaXQgcm91dGluZyByZWdpc3RlciBmb3IgYnJvYWRjYXN0IHBhY2tldHMuXG4iKTsKIAkJZ290byBleGl0OwogCX0KIAkvKiBJZiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgaW5ib3VuZCBxdWV1ZSwgdGhlbiB0dXJuIG9uIFJTUyBpbiB0aGUKQEAgLTMyNzAsOCArMzYwNiw4IEBACiAJCXN0YXR1cyA9IHFsX3NldF9yb3V0aW5nX3JlZyhxZGV2LCBSVF9JRFhfUlNTX01BVENIX1NMT1QsCiAJCQkJCVJUX0lEWF9SU1NfTUFUQ0gsIDEpOwogCQlpZiAoc3RhdHVzKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCQkiRmFpbGVkIHRvIGluaXQgcm91dGluZyByZWdpc3RlciBmb3IgTUFUQ0ggUlNTIHBhY2tldHMuXG4iKTsKKwkJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJCSAgIkZhaWxlZCB0byBpbml0IHJvdXRpbmcgcmVnaXN0ZXIgZm9yIE1BVENIIFJTUyBwYWNrZXRzLlxuIik7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CkBAIC0zMjc5LDggKzM2MTUsOCBAQAogCXN0YXR1cyA9IHFsX3NldF9yb3V0aW5nX3JlZyhxZGV2LCBSVF9JRFhfQ0FNX0hJVF9TTE9ULAogCQkJCSAgICBSVF9JRFhfQ0FNX0hJVCwgMSk7CiAJaWYgKHN0YXR1cykKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkiRmFpbGVkIHRvIGluaXQgcm91dGluZyByZWdpc3RlciBmb3IgQ0FNIHBhY2tldHMuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkgICJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHJlZ2lzdGVyIGZvciBDQU0gcGFja2V0cy5cbiIpOwogZXhpdDoKIAlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9SVF9JRFhfTUFTSyk7CiAJcmV0dXJuIHN0YXR1czsKQEAgLTMyOTgsMTMgKzM2MzQsMTMgQEAKIAlzZXQgJj0gcWRldi0+cG9ydF9saW5rX3VwOwogCXN0YXR1cyA9IHFsX3NldF9tYWNfYWRkcihxZGV2LCBzZXQpOwogCWlmIChzdGF0dXMpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJGYWlsZWQgdG8gaW5pdCBtYWMgYWRkcmVzcy5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwgIkZhaWxlZCB0byBpbml0IG1hYyBhZGRyZXNzLlxuIik7CiAJCXJldHVybiBzdGF0dXM7CiAJfQogCiAJc3RhdHVzID0gcWxfcm91dGVfaW5pdGlhbGl6ZShxZGV2KTsKIAlpZiAoc3RhdHVzKQotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBpbml0IHJvdXRpbmcgdGFibGUuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsICJGYWlsZWQgdG8gaW5pdCByb3V0aW5nIHRhYmxlLlxuIik7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMzMzMiwxNSArMzY2OCwxNSBAQAogCiAJLyogRW5hYmxlIHRoZSBmdW5jdGlvbiwgc2V0IHBhZ2VzaXplLCBlbmFibGUgZXJyb3IgY2hlY2tpbmcuICovCiAJdmFsdWUgPSBGU0NfRkUgfCBGU0NfRVBDX0lOQk9VTkQgfCBGU0NfRVBDX09VVEJPVU5EIHwKLQkgICAgRlNDX0VDIHwgRlNDX1ZNX1BBR0VfNEsgfCBGU0NfU0g7CisJICAgIEZTQ19FQyB8IEZTQ19WTV9QQUdFXzRLOworCXZhbHVlIHw9IFNQTFRfU0VUVElORzsKIAogCS8qIFNldC9jbGVhciBoZWFkZXIgc3BsaXR0aW5nLiAqLwogCW1hc2sgPSBGU0NfVk1fUEFHRVNJWkVfTUFTSyB8CiAJICAgIEZTQ19EQkxfTUFTSyB8IEZTQ19EQlJTVF9NQVNLIHwgKHZhbHVlIDw8IDE2KTsKIAlxbF93cml0ZTMyKHFkZXYsIEZTQywgbWFzayB8IHZhbHVlKTsKIAotCXFsX3dyaXRlMzIocWRldiwgU1BMVF9IRFIsIFNQTFRfSERSX0VQIHwKLQkJbWluKFNNQUxMX0JVRl9NQVBfU0laRSwgTUFYX1NQTElUX1NJWkUpKTsKKwlxbF93cml0ZTMyKHFkZXYsIFNQTFRfSERSLCBTUExUX0xFTik7CiAKIAkvKiBTZXQgUlggcGFja2V0IHJvdXRpbmcgdG8gdXNlIHBvcnQvcGNpIGZ1bmN0aW9uIG9uIHdoaWNoIHRoZQogCSAqIHBhY2tldCBhcnJpdmVkIG9uIGluIGFkZGl0aW9uIHRvIHVzdWFsIGZyYW1lIHJvdXRpbmcuCkBAIC0zMzY5LDggKzM3MDUsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBxZGV2LT5yeF9yaW5nX2NvdW50OyBpKyspIHsKIAkJc3RhdHVzID0gcWxfc3RhcnRfcnhfcmluZyhxZGV2LCAmcWRldi0+cnhfcmluZ1tpXSk7CiAJCWlmIChzdGF0dXMpIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCSJGYWlsZWQgdG8gc3RhcnQgcnggcmluZ1slZF0uXG4iLCBpKTsKKwkJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJCSAgIkZhaWxlZCB0byBzdGFydCByeCByaW5nWyVkXS5cbiIsIGkpOwogCQkJcmV0dXJuIHN0YXR1czsKIAkJfQogCX0KQEAgLTMzODEsNyArMzcxNyw3IEBACiAJaWYgKHFkZXYtPnJzc19yaW5nX2NvdW50ID4gMSkgewogCQlzdGF0dXMgPSBxbF9zdGFydF9yc3MocWRldik7CiAJCWlmIChzdGF0dXMpIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIHN0YXJ0IFJTUy5cbiIpOworCQkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsICJGYWlsZWQgdG8gc3RhcnQgUlNTLlxuIik7CiAJCQlyZXR1cm4gc3RhdHVzOwogCQl9CiAJfQpAQCAtMzM5MCw4ICszNzI2LDggQEAKIAlmb3IgKGkgPSAwOyBpIDwgcWRldi0+dHhfcmluZ19jb3VudDsgaSsrKSB7CiAJCXN0YXR1cyA9IHFsX3N0YXJ0X3R4X3JpbmcocWRldiwgJnFkZXYtPnR4X3JpbmdbaV0pOwogCQlpZiAoc3RhdHVzKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCQkiRmFpbGVkIHRvIHN0YXJ0IHR4IHJpbmdbJWRdLlxuIiwgaSk7CisJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICJGYWlsZWQgdG8gc3RhcnQgdHggcmluZ1slZF0uXG4iLCBpKTsKIAkJCXJldHVybiBzdGF0dXM7CiAJCX0KIAl9CkBAIC0zMzk5LDIwICszNzM1LDIwIEBACiAJLyogSW5pdGlhbGl6ZSB0aGUgcG9ydCBhbmQgc2V0IHRoZSBtYXggZnJhbWVzaXplLiAqLwogCXN0YXR1cyA9IHFkZXYtPm5pY19vcHMtPnBvcnRfaW5pdGlhbGl6ZShxZGV2KTsKIAlpZiAoc3RhdHVzKQotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkZhaWxlZCB0byBzdGFydCBwb3J0LlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LCAiRmFpbGVkIHRvIHN0YXJ0IHBvcnQuXG4iKTsKIAogCS8qIFNldCB1cCB0aGUgTUFDIGFkZHJlc3MgYW5kIGZyYW1lIHJvdXRpbmcgZmlsdGVyLiAqLwogCXN0YXR1cyA9IHFsX2NhbV9yb3V0ZV9pbml0aWFsaXplKHFkZXYpOwogCWlmIChzdGF0dXMpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJIkZhaWxlZCB0byBpbml0IENBTS9Sb3V0aW5nIHRhYmxlcy5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCSAgIkZhaWxlZCB0byBpbml0IENBTS9Sb3V0aW5nIHRhYmxlcy5cbiIpOwogCQlyZXR1cm4gc3RhdHVzOwogCX0KIAogCS8qIFN0YXJ0IE5BUEkgZm9yIHRoZSBSU1MgcXVldWVzLiAqLwogCWZvciAoaSA9IDA7IGkgPCBxZGV2LT5yc3NfcmluZ19jb3VudDsgaSsrKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgREVCVUcsICJFbmFibGluZyBOQVBJIGZvciByeF9yaW5nWyVkXS5cbiIsCi0JCQlpKTsKKwkJbmV0aWZfcHJpbnRrKHFkZXYsIGlmdXAsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkgICAgICJFbmFibGluZyBOQVBJIGZvciByeF9yaW5nWyVkXS5cbiIsIGkpOwogCQluYXBpX2VuYWJsZSgmcWRldi0+cnhfcmluZ1tpXS5uYXBpKTsKIAl9CiAKQEAgLTM0MjksNyArMzc2NSw3IEBACiAJLyogQ2xlYXIgYWxsIHRoZSBlbnRyaWVzIGluIHRoZSByb3V0aW5nIHRhYmxlLiAqLwogCXN0YXR1cyA9IHFsX2NsZWFyX3JvdXRpbmdfZW50cmllcyhxZGV2KTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLCAiRmFpbGVkIHRvIGNsZWFyIHJvdXRpbmcgYml0cy5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwgIkZhaWxlZCB0byBjbGVhciByb3V0aW5nIGJpdHMuXG4iKTsKIAkJcmV0dXJuIHN0YXR1czsKIAl9CiAKQEAgLTM0NTIsOCArMzc4OCw4IEBACiAJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZW5kX2ppZmZpZXMpKTsKIAogCWlmICh2YWx1ZSAmIFJTVF9GT19GUikgewotCQlRUFJJTlRLKHFkZXYsIElGRE9XTiwgRVJSLAotCQkJIkVUSU1FRE9VVCEhISBlcnJvcmVkIG91dCBvZiByZXNldHRpbmcgdGhlIGNoaXAhXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmZG93biwgcWRldi0+bmRldiwKKwkJCSAgIkVUSU1FRE9VVCEhISBlcnJvcmVkIG91dCBvZiByZXNldHRpbmcgdGhlIGNoaXAhXG4iKTsKIAkJc3RhdHVzID0gLUVUSU1FRE9VVDsKIAl9CiAKQEAgLTM0NjYsMTYgKzM4MDIsMTcgQEAKIHsKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IChzdHJ1Y3QgcWxfYWRhcHRlciAqKW5ldGRldl9wcml2KG5kZXYpOwogCi0JUVBSSU5USyhxZGV2LCBQUk9CRSwgSU5GTywKLQkJIkZ1bmN0aW9uICMlZCwgUG9ydCAlZCwgTklDIFJvbGwgJWQsIE5JQyBSZXYgPSAlZCwgIgotCQkiWEcgUm9sbCA9ICVkLCBYRyBSZXYgPSAlZC5cbiIsCi0JCXFkZXYtPmZ1bmMsCi0JCXFkZXYtPnBvcnQsCi0JCXFkZXYtPmNoaXBfcmV2X2lkICYgMHgwMDAwMDAwZiwKLQkJcWRldi0+Y2hpcF9yZXZfaWQgPj4gNCAmIDB4MDAwMDAwMGYsCi0JCXFkZXYtPmNoaXBfcmV2X2lkID4+IDggJiAweDAwMDAwMDBmLAotCQlxZGV2LT5jaGlwX3Jldl9pZCA+PiAxMiAmIDB4MDAwMDAwMGYpOwotCVFQUklOVEsocWRldiwgUFJPQkUsIElORk8sICJNQUMgYWRkcmVzcyAlcE1cbiIsIG5kZXYtPmRldl9hZGRyKTsKKwluZXRpZl9pbmZvKHFkZXYsIHByb2JlLCBxZGV2LT5uZGV2LAorCQkgICAiRnVuY3Rpb24gIyVkLCBQb3J0ICVkLCBOSUMgUm9sbCAlZCwgTklDIFJldiA9ICVkLCAiCisJCSAgICJYRyBSb2xsID0gJWQsIFhHIFJldiA9ICVkLlxuIiwKKwkJICAgcWRldi0+ZnVuYywKKwkJICAgcWRldi0+cG9ydCwKKwkJICAgcWRldi0+Y2hpcF9yZXZfaWQgJiAweDAwMDAwMDBmLAorCQkgICBxZGV2LT5jaGlwX3Jldl9pZCA+PiA0ICYgMHgwMDAwMDAwZiwKKwkJICAgcWRldi0+Y2hpcF9yZXZfaWQgPj4gOCAmIDB4MDAwMDAwMGYsCisJCSAgIHFkZXYtPmNoaXBfcmV2X2lkID4+IDEyICYgMHgwMDAwMDAwZik7CisJbmV0aWZfaW5mbyhxZGV2LCBwcm9iZSwgcWRldi0+bmRldiwKKwkJICAgIk1BQyBhZGRyZXNzICVwTVxuIiwgbmRldi0+ZGV2X2FkZHIpOwogfQogCiBpbnQgcWxfd29sKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQpAQCAtMzQ5MiwyMyArMzgyOSwyMyBAQAogCiAJaWYgKHFkZXYtPndvbCAmIChXQUtFX0FSUCB8IFdBS0VfTUFHSUNTRUNVUkUgfCBXQUtFX1BIWSB8IFdBS0VfVUNBU1QgfAogCQkJV0FLRV9NQ0FTVCB8IFdBS0VfQkNBU1QpKSB7Ci0JCVFQUklOVEsocWRldiwgSUZET1dOLCBFUlIsCi0JCQkiVW5zdXBwb3J0ZWQgV09MIHBhcmFtdGVyLiBxZGV2LT53b2wgPSAweCV4LlxuIiwKLQkJCXFkZXYtPndvbCk7CisJCW5ldGlmX2VycihxZGV2LCBpZmRvd24sIHFkZXYtPm5kZXYsCisJCQkgICJVbnN1cHBvcnRlZCBXT0wgcGFyYW10ZXIuIHFkZXYtPndvbCA9IDB4JXguXG4iLAorCQkJICBxZGV2LT53b2wpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAocWRldi0+d29sICYgV0FLRV9NQUdJQykgewogCQlzdGF0dXMgPSBxbF9tYl93b2xfc2V0X21hZ2ljKHFkZXYsIDEpOwogCQlpZiAoc3RhdHVzKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElGRE9XTiwgRVJSLAotCQkJCSJGYWlsZWQgdG8gc2V0IG1hZ2ljIHBhY2tldCBvbiAlcy5cbiIsCi0JCQkJcWRldi0+bmRldi0+bmFtZSk7CisJCQluZXRpZl9lcnIocWRldiwgaWZkb3duLCBxZGV2LT5uZGV2LAorCQkJCSAgIkZhaWxlZCB0byBzZXQgbWFnaWMgcGFja2V0IG9uICVzLlxuIiwKKwkJCQkgIHFkZXYtPm5kZXYtPm5hbWUpOwogCQkJcmV0dXJuIHN0YXR1czsKIAkJfSBlbHNlCi0JCQlRUFJJTlRLKHFkZXYsIERSViwgSU5GTywKLQkJCQkiRW5hYmxlZCBtYWdpYyBwYWNrZXQgc3VjY2Vzc2Z1bGx5IG9uICVzLlxuIiwKLQkJCQlxZGV2LT5uZGV2LT5uYW1lKTsKKwkJCW5ldGlmX2luZm8ocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJCSAgICJFbmFibGVkIG1hZ2ljIHBhY2tldCBzdWNjZXNzZnVsbHkgb24gJXMuXG4iLAorCQkJCSAgIHFkZXYtPm5kZXYtPm5hbWUpOwogCiAJCXdvbCB8PSBNQl9XT0xfTUFHSUNfUEtUOwogCX0KQEAgLTM1MTYsOSArMzg1MywxMCBAQAogCWlmIChxZGV2LT53b2wpIHsKIAkJd29sIHw9IE1CX1dPTF9NT0RFX09OOwogCQlzdGF0dXMgPSBxbF9tYl93b2xfbW9kZShxZGV2LCB3b2wpOwotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiV09MICVzICh3b2wgY29kZSAweCV4KSBvbiAlc1xuIiwKLQkJCShzdGF0dXMgPT0gMCkgPyAiU3VjZXNzZnVsbHkgc2V0IiA6ICJGYWlsZWQiLCB3b2wsCi0JCQlxZGV2LT5uZGV2LT5uYW1lKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIldPTCAlcyAod29sIGNvZGUgMHgleCkgb24gJXNcbiIsCisJCQkgIChzdGF0dXMgPT0gMCkgPyAiU3VjY2Vzc2Z1bGx5IHNldCIgOiAiRmFpbGVkIiwKKwkJCSAgd29sLCBxZGV2LT5uZGV2LT5uYW1lKTsKIAl9CiAKIAlyZXR1cm4gc3RhdHVzOwpAQCAtMzUzOCw2ICszODc2LDcgQEAKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9yZXNldF93b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV93b3JrKTsKIAljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9pZGNfd29yayk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfY29yZV90b19sb2cpOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+bXBpX3BvcnRfY2ZnX3dvcmspOwogCiAJZm9yIChpID0gMDsgaSA8IHFkZXYtPnJzc19yaW5nX2NvdW50OyBpKyspCkBAIC0zNTU4LDggKzM4OTcsOCBAQAogCiAJc3RhdHVzID0gcWxfYWRhcHRlcl9yZXNldChxZGV2KTsKIAlpZiAoc3RhdHVzKQotCQlRUFJJTlRLKHFkZXYsIElGRE9XTiwgRVJSLCAicmVzZXQoZnVuYyAjJWQpIEZBSUxFRCFcbiIsCi0JCQlxZGV2LT5mdW5jKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmZG93biwgcWRldi0+bmRldiwgInJlc2V0KGZ1bmMgIyVkKSBGQUlMRUQhXG4iLAorCQkJICBxZGV2LT5mdW5jKTsKIAlyZXR1cm4gc3RhdHVzOwogfQogCkBAIC0zNTY5LDcgKzM5MDgsNyBAQAogCiAJZXJyID0gcWxfYWRhcHRlcl9pbml0aWFsaXplKHFkZXYpOwogCWlmIChlcnIpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBJTkZPLCAiVW5hYmxlIHRvIGluaXRpYWxpemUgYWRhcHRlci5cbiIpOworCQluZXRpZl9pbmZvKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsICJVbmFibGUgdG8gaW5pdGlhbGl6ZSBhZGFwdGVyLlxuIik7CiAJCWdvdG8gZXJyX2luaXQ7CiAJfQogCXNldF9iaXQoUUxfQURBUFRFUl9VUCwgJnFkZXYtPmZsYWdzKTsKQEAgLTM2MDEsNyArMzk0MCw3IEBACiAJaW50IHN0YXR1cyA9IDA7CiAKIAlpZiAocWxfYWxsb2NfbWVtX3Jlc291cmNlcyhxZGV2KSkgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIlVuYWJsZSB0byAgYWxsb2NhdGUgbWVtb3J5LlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LCAiVW5hYmxlIHRvICBhbGxvY2F0ZSBtZW1vcnkuXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXN0YXR1cyA9IHFsX3JlcXVlc3RfaXJxKHFkZXYpOwpAQCAtMzYxMiw2ICszOTUxLDE2IEBACiB7CiAJc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAorCS8qIElmIHdlIGhpdCBwY2lfY2hhbm5lbF9pb19wZXJtX2ZhaWx1cmUKKwkgKiBmYWlsdXJlIGNvbmRpdGlvbiwgdGhlbiB3ZSBhbHJlYWR5CisJICogYnJvdWdodCB0aGUgYWRhcHRlciBkb3duLgorCSAqLworCWlmICh0ZXN0X2JpdChRTF9FRUhfRkFUQUwsICZxZGV2LT5mbGFncykpIHsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIkVFSCBmYXRhbCBkaWQgdW5sb2FkLlxuIik7CisJCWNsZWFyX2JpdChRTF9FRUhfRkFUQUwsICZxZGV2LT5mbGFncyk7CisJCXJldHVybiAwOworCX0KKwogCS8qCiAJICogV2FpdCBmb3IgZGV2aWNlIHRvIHJlY292ZXIgZnJvbSBhIHJlc2V0LgogCSAqIChSYXJlbHkgaGFwcGVucywgYnV0IHBvc3NpYmxlLikKQEAgLTM2ODEsOSArNDAzMCwxMCBAQAogCQkJcnhfcmluZy0+bGJxX3NpemUgPQogCQkJICAgIHJ4X3JpbmctPmxicV9sZW4gKiBzaXplb2YoX19sZTY0KTsKIAkJCXJ4X3JpbmctPmxicV9idWZfc2l6ZSA9ICh1MTYpbGJxX2J1Zl9sZW47Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIERFQlVHLAotCQkJCSJsYnFfYnVmX3NpemUgJWQsIG9yZGVyID0gJWRcbiIsCi0JCQkJcnhfcmluZy0+bGJxX2J1Zl9zaXplLCBxZGV2LT5sYnFfYnVmX29yZGVyKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCBpZnVwLCBLRVJOX0RFQlVHLCBxZGV2LT5uZGV2LAorCQkJCSAgICAgImxicV9idWZfc2l6ZSAlZCwgb3JkZXIgPSAlZFxuIiwKKwkJCQkgICAgIHJ4X3JpbmctPmxicV9idWZfc2l6ZSwKKwkJCQkgICAgIHFkZXYtPmxicV9idWZfb3JkZXIpOwogCQkJcnhfcmluZy0+c2JxX2xlbiA9IE5VTV9TTUFMTF9CVUZGRVJTOwogCQkJcnhfcmluZy0+c2JxX3NpemUgPQogCQkJICAgIHJ4X3JpbmctPnNicV9sZW4gKiBzaXplb2YoX19sZTY0KTsKQEAgLTM3NDcsMTQgKzQwOTcsMTQgQEAKIAlpZiAoIXRlc3RfYml0KFFMX0FEQVBURVJfVVAsICZxZGV2LT5mbGFncykpIHsKIAkJaW50IGkgPSAzOwogCQl3aGlsZSAoaS0tICYmICF0ZXN0X2JpdChRTF9BREFQVEVSX1VQLCAmcWRldi0+ZmxhZ3MpKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCQkgIldhaXRpbmcgZm9yIGFkYXB0ZXIgVVAuLi5cbiIpOworCQkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkJICAiV2FpdGluZyBmb3IgYWRhcHRlciBVUC4uLlxuIik7CiAJCQlzc2xlZXAoMSk7CiAJCX0KIAogCQlpZiAoIWkpIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgYWRhcHRlciBVUFxuIik7CisJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICJUaW1lZCBvdXQgd2FpdGluZyBmb3IgYWRhcHRlciBVUFxuIik7CiAJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJfQogCX0KQEAgLTM3ODAsOCArNDEzMCw4IEBACiAKIAlyZXR1cm4gc3RhdHVzOwogZXJyb3I6Ci0JUVBSSU5USyhxZGV2LCBJRlVQLCBBTEVSVCwKLQkJIkRyaXZlciB1cC9kb3duIGN5Y2xlIGZhaWxlZCwgY2xvc2luZyBkZXZpY2UuXG4iKTsKKwluZXRpZl9hbGVydChxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkgICAgIkRyaXZlciB1cC9kb3duIGN5Y2xlIGZhaWxlZCwgY2xvc2luZyBkZXZpY2UuXG4iKTsKIAlzZXRfYml0KFFMX0FEQVBURVJfVVAsICZxZGV2LT5mbGFncyk7CiAJZGV2X2Nsb3NlKHFkZXYtPm5kZXYpOwogCXJldHVybiBzdGF0dXM7CkBAIC0zNzkzLDI4ICs0MTQzLDI1IEBACiAJaW50IHN0YXR1czsKIAogCWlmIChuZGV2LT5tdHUgPT0gMTUwMCAmJiBuZXdfbXR1ID09IDkwMDApIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsICJDaGFuZ2luZyB0byBqdW1ibyBNVFUuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsICJDaGFuZ2luZyB0byBqdW1ibyBNVFUuXG4iKTsKIAl9IGVsc2UgaWYgKG5kZXYtPm10dSA9PSA5MDAwICYmIG5ld19tdHUgPT0gMTUwMCkgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkNoYW5naW5nIHRvIG5vcm1hbCBNVFUuXG4iKTsKLQl9IGVsc2UgaWYgKChuZGV2LT5tdHUgPT0gMTUwMCAmJiBuZXdfbXR1ID09IDE1MDApIHx8Ci0JCSAgIChuZGV2LT5tdHUgPT0gOTAwMCAmJiBuZXdfbXR1ID09IDkwMDApKSB7Ci0JCXJldHVybiAwOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwgIkNoYW5naW5nIHRvIG5vcm1hbCBNVFUuXG4iKTsKIAl9IGVsc2UKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlxdWV1ZV9kZWxheWVkX3dvcmsocWRldi0+d29ya3F1ZXVlLAogCQkJJnFkZXYtPm1waV9wb3J0X2NmZ193b3JrLCAzKkhaKTsKIAorCW5kZXYtPm10dSA9IG5ld19tdHU7CisKIAlpZiAoIW5ldGlmX3J1bm5pbmcocWRldi0+bmRldikpIHsKLQkJbmRldi0+bXR1ID0gbmV3X210dTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JbmRldi0+bXR1ID0gbmV3X210dTsKIAlzdGF0dXMgPSBxbF9jaGFuZ2VfcnhfYnVmZmVycyhxZGV2KTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJIkNoYW5naW5nIE1UVSBmYWlsZWQuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkgICJDaGFuZ2luZyBNVFUgZmFpbGVkLlxuIik7CiAJfQogCiAJcmV0dXJuIHN0YXR1czsKQEAgLTM4NzQsOCArNDIyMSw4IEBACiAJCWlmICghdGVzdF9iaXQoUUxfUFJPTUlTQ1VPVVMsICZxZGV2LT5mbGFncykpIHsKIAkJCWlmIChxbF9zZXRfcm91dGluZ19yZWcKIAkJCSAgICAocWRldiwgUlRfSURYX1BST01JU0NVT1VTX1NMT1QsIFJUX0lEWF9WQUxJRCwgMSkpIHsKLQkJCQlRUFJJTlRLKHFkZXYsIEhXLCBFUlIsCi0JCQkJCSJGYWlsZWQgdG8gc2V0IHByb21pc2NvdXMgbW9kZS5cbiIpOworCQkJCW5ldGlmX2VycihxZGV2LCBodywgcWRldi0+bmRldiwKKwkJCQkJICAiRmFpbGVkIHRvIHNldCBwcm9taXNjb3VzIG1vZGUuXG4iKTsKIAkJCX0gZWxzZSB7CiAJCQkJc2V0X2JpdChRTF9QUk9NSVNDVU9VUywgJnFkZXYtPmZsYWdzKTsKIAkJCX0KQEAgLTM4ODQsOCArNDIzMSw4IEBACiAJCWlmICh0ZXN0X2JpdChRTF9QUk9NSVNDVU9VUywgJnFkZXYtPmZsYWdzKSkgewogCQkJaWYgKHFsX3NldF9yb3V0aW5nX3JlZwogCQkJICAgIChxZGV2LCBSVF9JRFhfUFJPTUlTQ1VPVVNfU0xPVCwgUlRfSURYX1ZBTElELCAwKSkgewotCQkJCVFQUklOVEsocWRldiwgSFcsIEVSUiwKLQkJCQkJIkZhaWxlZCB0byBjbGVhciBwcm9taXNjb3VzIG1vZGUuXG4iKTsKKwkJCQluZXRpZl9lcnIocWRldiwgaHcsIHFkZXYtPm5kZXYsCisJCQkJCSAgIkZhaWxlZCB0byBjbGVhciBwcm9taXNjb3VzIG1vZGUuXG4iKTsKIAkJCX0gZWxzZSB7CiAJCQkJY2xlYXJfYml0KFFMX1BST01JU0NVT1VTLCAmcWRldi0+ZmxhZ3MpOwogCQkJfQpAQCAtMzg5NywxMiArNDI0NCwxMiBAQAogCSAqIHRyYW5zaXRpb24gaXMgdGFraW5nIHBsYWNlLgogCSAqLwogCWlmICgobmRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8Ci0JICAgIChuZGV2LT5tY19jb3VudCA+IE1BWF9NVUxUSUNBU1RfRU5UUklFUykpIHsKKwkgICAgKG5ldGRldl9tY19jb3VudChuZGV2KSA+IE1BWF9NVUxUSUNBU1RfRU5UUklFUykpIHsKIAkJaWYgKCF0ZXN0X2JpdChRTF9BTExNVUxUSSwgJnFkZXYtPmZsYWdzKSkgewogCQkJaWYgKHFsX3NldF9yb3V0aW5nX3JlZwogCQkJICAgIChxZGV2LCBSVF9JRFhfQUxMTVVMVElfU0xPVCwgUlRfSURYX01DQVNULCAxKSkgewotCQkJCVFQUklOVEsocWRldiwgSFcsIEVSUiwKLQkJCQkJIkZhaWxlZCB0byBzZXQgYWxsLW11bHRpIG1vZGUuXG4iKTsKKwkJCQluZXRpZl9lcnIocWRldiwgaHcsIHFkZXYtPm5kZXYsCisJCQkJCSAgIkZhaWxlZCB0byBzZXQgYWxsLW11bHRpIG1vZGUuXG4iKTsKIAkJCX0gZWxzZSB7CiAJCQkJc2V0X2JpdChRTF9BTExNVUxUSSwgJnFkZXYtPmZsYWdzKTsKIAkJCX0KQEAgLTM5MTEsMzIgKzQyNTgsMzQgQEAKIAkJaWYgKHRlc3RfYml0KFFMX0FMTE1VTFRJLCAmcWRldi0+ZmxhZ3MpKSB7CiAJCQlpZiAocWxfc2V0X3JvdXRpbmdfcmVnCiAJCQkgICAgKHFkZXYsIFJUX0lEWF9BTExNVUxUSV9TTE9ULCBSVF9JRFhfTUNBU1QsIDApKSB7Ci0JCQkJUVBSSU5USyhxZGV2LCBIVywgRVJSLAotCQkJCQkiRmFpbGVkIHRvIGNsZWFyIGFsbC1tdWx0aSBtb2RlLlxuIik7CisJCQkJbmV0aWZfZXJyKHFkZXYsIGh3LCBxZGV2LT5uZGV2LAorCQkJCQkgICJGYWlsZWQgdG8gY2xlYXIgYWxsLW11bHRpIG1vZGUuXG4iKTsKIAkJCX0gZWxzZSB7CiAJCQkJY2xlYXJfYml0KFFMX0FMTE1VTFRJLCAmcWRldi0+ZmxhZ3MpOwogCQkJfQogCQl9CiAJfQogCi0JaWYgKG5kZXYtPm1jX2NvdW50KSB7CisJaWYgKCFuZXRkZXZfbWNfZW1wdHkobmRldikpIHsKIAkJc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIAkJaWYgKHN0YXR1cykKIAkJCWdvdG8gZXhpdDsKLQkJZm9yIChpID0gMCwgbWNfcHRyID0gbmRldi0+bWNfbGlzdDsgbWNfcHRyOwotCQkgICAgIGkrKywgbWNfcHRyID0gbWNfcHRyLT5uZXh0KQorCQlpID0gMDsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfcHRyLCBuZGV2KSB7CiAJCQlpZiAocWxfc2V0X21hY19hZGRyX3JlZyhxZGV2LCAodTggKikgbWNfcHRyLT5kbWlfYWRkciwKIAkJCQkJCU1BQ19BRERSX1RZUEVfTVVMVElfTUFDLCBpKSkgewotCQkJCVFQUklOVEsocWRldiwgSFcsIEVSUiwKLQkJCQkJIkZhaWxlZCB0byBsb2FkbXVsdGljYXN0IGFkZHJlc3MuXG4iKTsKKwkJCQluZXRpZl9lcnIocWRldiwgaHcsIHFkZXYtPm5kZXYsCisJCQkJCSAgIkZhaWxlZCB0byBsb2FkbXVsdGljYXN0IGFkZHJlc3MuXG4iKTsKIAkJCQlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIAkJCQlnb3RvIGV4aXQ7CiAJCQl9CisJCQlpKys7CisJCX0KIAkJcWxfc2VtX3VubG9jayhxZGV2LCBTRU1fTUFDX0FERFJfTUFTSyk7CiAJCWlmIChxbF9zZXRfcm91dGluZ19yZWcKIAkJICAgIChxZGV2LCBSVF9JRFhfTUNBU1RfTUFUQ0hfU0xPVCwgUlRfSURYX01DQVNUX01BVENILCAxKSkgewotCQkJUVBSSU5USyhxZGV2LCBIVywgRVJSLAotCQkJCSJGYWlsZWQgdG8gc2V0IG11bHRpY2FzdCBtYXRjaCBtb2RlLlxuIik7CisJCQluZXRpZl9lcnIocWRldiwgaHcsIHFkZXYtPm5kZXYsCisJCQkJICAiRmFpbGVkIHRvIHNldCBtdWx0aWNhc3QgbWF0Y2ggbW9kZS5cbiIpOwogCQl9IGVsc2UgewogCQkJc2V0X2JpdChRTF9BTExNVUxUSSwgJnFkZXYtPmZsYWdzKTsKIAkJfQpAQCAtMzk1NCw2ICs0MzAzLDggQEAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAltZW1jcHkobmRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5kZXYtPmFkZHJfbGVuKTsKKwkvKiBVcGRhdGUgbG9jYWwgY29weSBvZiBjdXJyZW50IG1hYyBhZGRyZXNzLiAqLworCW1lbWNweShxZGV2LT5jdXJyZW50X21hY19hZGRyLCBuZGV2LT5kZXZfYWRkciwgbmRldi0+YWRkcl9sZW4pOwogCiAJc3RhdHVzID0gcWxfc2VtX3NwaW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIAlpZiAoc3RhdHVzKQpAQCAtMzk2MSw3ICs0MzEyLDcgQEAKIAlzdGF0dXMgPSBxbF9zZXRfbWFjX2FkZHJfcmVnKHFkZXYsICh1OCAqKSBuZGV2LT5kZXZfYWRkciwKIAkJCU1BQ19BRERSX1RZUEVfQ0FNX01BQywgcWRldi0+ZnVuYyAqIE1BWF9DUSk7CiAJaWYgKHN0YXR1cykKLQkJUVBSSU5USyhxZGV2LCBIVywgRVJSLCAiRmFpbGVkIHRvIGxvYWQgTUFDIGFkZHJlc3MuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGh3LCBxZGV2LT5uZGV2LCAiRmFpbGVkIHRvIGxvYWQgTUFDIGFkZHJlc3MuXG4iKTsKIAlxbF9zZW1fdW5sb2NrKHFkZXYsIFNFTV9NQUNfQUREUl9NQVNLKTsKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtMzk5NCw4ICs0MzQ1LDggQEAKIAlydG5sX3VubG9jaygpOwogCXJldHVybjsKIGVycm9yOgotCVFQUklOVEsocWRldiwgSUZVUCwgQUxFUlQsCi0JCSJEcml2ZXIgdXAvZG93biBjeWNsZSBmYWlsZWQsIGNsb3NpbmcgZGV2aWNlXG4iKTsKKwluZXRpZl9hbGVydChxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkgICAgIkRyaXZlciB1cC9kb3duIGN5Y2xlIGZhaWxlZCwgY2xvc2luZyBkZXZpY2VcbiIpOwogCiAJc2V0X2JpdChRTF9BREFQVEVSX1VQLCAmcWRldi0+ZmxhZ3MpOwogCWRldl9jbG9zZShxZGV2LT5uZGV2KTsKQEAgLTQwOTQsNiArNDQ0NSw3IEBACiAJCWlvdW5tYXAocWRldi0+cmVnX2Jhc2UpOwogCWlmIChxZGV2LT5kb29yYmVsbF9hcmVhKQogCQlpb3VubWFwKHFkZXYtPmRvb3JiZWxsX2FyZWEpOworCXZmcmVlKHFkZXYtPm1waV9jb3JlZHVtcCk7CiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiB9CkBAIC00MTc1LDYgKzQ1MjcsMTcgQEAKIAlzcGluX2xvY2tfaW5pdCgmcWRldi0+aHdfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnFkZXYtPnN0YXRzX2xvY2spOwogCisJaWYgKHFsZ2VfbXBpX2NvcmVkdW1wKSB7CisJCXFkZXYtPm1waV9jb3JlZHVtcCA9CisJCQl2bWFsbG9jKHNpemVvZihzdHJ1Y3QgcWxfbXBpX2NvcmVkdW1wKSk7CisJCWlmIChxZGV2LT5tcGlfY29yZWR1bXAgPT0gTlVMTCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ29yZWR1bXAgYWxsb2MgZmFpbGVkLlxuIik7CisJCQllcnIgPSAtRU5PTUVNOworCQkJZ290byBlcnJfb3V0MjsKKwkJfQorCQlpZiAocWxnZV9mb3JjZV9jb3JlZHVtcCkKKwkJCXNldF9iaXQoUUxfRlJDX0NPUkVEVU1QLCAmcWRldi0+ZmxhZ3MpOworCX0KIAkvKiBtYWtlIHN1cmUgdGhlIEVFUFJPTSBpcyBnb29kICovCiAJZXJyID0gcWRldi0+bmljX29wcy0+Z2V0X2ZsYXNoKHFkZXYpOwogCWlmIChlcnIpIHsKQEAgLTQxODMsNiArNDU0Niw4IEBACiAJfQogCiAJbWVtY3B5KG5kZXYtPnBlcm1fYWRkciwgbmRldi0+ZGV2X2FkZHIsIG5kZXYtPmFkZHJfbGVuKTsKKwkvKiBLZWVwIGxvY2FsIGNvcHkgb2YgY3VycmVudCBtYWMgYWRkcmVzcy4gKi8KKwltZW1jcHkocWRldi0+Y3VycmVudF9tYWNfYWRkciwgbmRldi0+ZGV2X2FkZHIsIG5kZXYtPmFkZHJfbGVuKTsKIAogCS8qIFNldCB1cCB0aGUgZGVmYXVsdCByaW5nIHNpemVzLiAqLwogCXFkZXYtPnR4X3Jpbmdfc2l6ZSA9IE5VTV9UWF9SSU5HX0VOVFJJRVM7CkBAIC00MjA0LDYgKzQ1NjksNyBAQAogCUlOSVRfREVMQVlFRF9XT1JLKCZxZGV2LT5tcGlfd29yaywgcWxfbXBpX3dvcmspOwogCUlOSVRfREVMQVlFRF9XT1JLKCZxZGV2LT5tcGlfcG9ydF9jZmdfd29yaywgcWxfbXBpX3BvcnRfY2ZnX3dvcmspOwogCUlOSVRfREVMQVlFRF9XT1JLKCZxZGV2LT5tcGlfaWRjX3dvcmssIHFsX21waV9pZGNfd29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJnFkZXYtPm1waV9jb3JlX3RvX2xvZywgcWxfbXBpX2NvcmVfdG9fbG9nKTsKIAlpbml0X2NvbXBsZXRpb24oJnFkZXYtPmlkZV9jb21wbGV0aW9uKTsKIAogCWlmICghY2FyZHNfZm91bmQpIHsKQEAgLTQyMzQsNiArNDYwMCwyMSBAQAogCS5uZG9fdmxhbl9yeF9raWxsX3ZpZAk9IHFsZ2Vfdmxhbl9yeF9raWxsX3ZpZCwKIH07CiAKK3N0YXRpYyB2b2lkIHFsX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IChzdHJ1Y3QgcWxfYWRhcHRlciAqKWRhdGE7CisJdTMyIHZhciA9IDA7CisKKwl2YXIgPSBxbF9yZWFkMzIocWRldiwgU1RTKTsKKwlpZiAocGNpX2NoYW5uZWxfb2ZmbGluZShxZGV2LT5wZGV2KSkgeworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwgIkVFSCBTVFMgPSAweCUuMDh4LlxuIiwgdmFyKTsKKwkJcmV0dXJuOworCX0KKworCXFkZXYtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKDUqSFopOworCWFkZF90aW1lcigmcWRldi0+dGltZXIpOworfQorCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBxbGdlX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfZW50cnkpCiB7CkBAIC00Mjg1LDYgKzQ2NjYsMTQgQEAKIAkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCQlyZXR1cm4gZXJyOwogCX0KKwkvKiBTdGFydCB1cCB0aGUgdGltZXIgdG8gdHJpZ2dlciBFRUggaWYKKwkgKiB0aGUgYnVzIGdvZXMgZGVhZAorCSAqLworCWluaXRfdGltZXJfZGVmZXJyYWJsZSgmcWRldi0+dGltZXIpOworCXFkZXYtPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylxZGV2OworCXFkZXYtPnRpbWVyLmZ1bmN0aW9uID0gcWxfdGltZXI7CisJcWRldi0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAoNSpIWik7CisJYWRkX3RpbWVyKCZxZGV2LT50aW1lcik7CiAJcWxfbGlua19vZmYocWRldik7CiAJcWxfZGlzcGxheV9kZXZfaW5mbyhuZGV2KTsKIAlhdG9taWNfc2V0KCZxZGV2LT5sYl9jb3VudCwgMCk7CkBAIC00MzA1LDYgKzQ2OTQsOCBAQAogc3RhdGljIHZvaWQgX19kZXZleGl0IHFsZ2VfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CisJZGVsX3RpbWVyX3N5bmMoJnFkZXYtPnRpbWVyKTsKIAl1bnJlZ2lzdGVyX25ldGRldihuZGV2KTsKIAlxbF9yZWxlYXNlX2FsbChwZGV2KTsKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CkBAIC00MzI3LDYgKzQ3MTgsNyBAQAogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+bXBpX3Jlc2V0X3dvcmspOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+bXBpX3dvcmspOwogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcWRldi0+bXBpX2lkY193b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnFkZXYtPm1waV9jb3JlX3RvX2xvZyk7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfcG9ydF9jZmdfd29yayk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcWRldi0+cnNzX3JpbmdfY291bnQ7IGkrKykKQEAgLTQzNDYsNiArNDczOCw3IEBACiAJCQkJCSAgICAgICBlbnVtIHBjaV9jaGFubmVsX3N0YXRlIHN0YXRlKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBxbF9hZGFwdGVyICpxZGV2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAKIAlzd2l0Y2ggKHN0YXRlKSB7CiAJY2FzZSBwY2lfY2hhbm5lbF9pb19ub3JtYWw6CkBAIC00MzU5LDYgKzQ3NTIsOCBAQAogCWNhc2UgcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlOgogCQlkZXZfZXJyKCZwZGV2LT5kZXYsCiAJCQkiJXM6IHBjaV9jaGFubmVsX2lvX3Blcm1fZmFpbHVyZS5cbiIsIF9fZnVuY19fKTsKKwkJcWxfZWVoX2Nsb3NlKG5kZXYpOworCQlzZXRfYml0KFFMX0VFSF9GQVRBTCwgJnFkZXYtPmZsYWdzKTsKIAkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CiAJfQogCkBAIC00MzgxLDExICs0Nzc2LDE4IEBACiAKIAlwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKLQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJICAiQ2Fubm90IHJlLWVuYWJsZSBQQ0kgZGV2aWNlIGFmdGVyIHJlc2V0LlxuIik7CiAJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOwogCX0KIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKKworCWlmIChxbF9hZGFwdGVyX3Jlc2V0KHFkZXYpKSB7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsICJyZXNldCBGQUlMRUQhXG4iKTsKKwkJc2V0X2JpdChRTF9FRUhfRkFUQUwsICZxZGV2LT5mbGFncyk7CisJCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNUOworCX0KKwogCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CiB9CiAKQEAgLTQzOTUsMTkgKzQ3OTcsMTkgQEAKIAlzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiA9IG5ldGRldl9wcml2KG5kZXYpOwogCWludCBlcnIgPSAwOwogCi0JaWYgKHFsX2FkYXB0ZXJfcmVzZXQocWRldikpCi0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJyZXNldCBGQUlMRUQhXG4iKTsKIAlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgewogCQllcnIgPSBxbGdlX29wZW4obmRldik7CiAJCWlmIChlcnIpIHsKLQkJCVFQUklOVEsocWRldiwgSUZVUCwgRVJSLAotCQkJCSJEZXZpY2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkIGFmdGVyIHJlc2V0LlxuIik7CisJCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCQkgICJEZXZpY2UgaW5pdGlhbGl6YXRpb24gZmFpbGVkIGFmdGVyIHJlc2V0LlxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAl9IGVsc2UgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCSJEZXZpY2Ugd2FzIG5vdCBydW5uaW5nIHByaW9yIHRvIEVFSC5cbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwKKwkJCSAgIkRldmljZSB3YXMgbm90IHJ1bm5pbmcgcHJpb3IgdG8gRUVILlxuIik7CiAJfQorCXFkZXYtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKDUqSFopOworCWFkZF90aW1lcigmcWRldi0+dGltZXIpOwogCW5ldGlmX2RldmljZV9hdHRhY2gobmRldik7CiB9CiAKQEAgLTQ0MjQsNiArNDgyNiw3IEBACiAJaW50IGVycjsKIAogCW5ldGlmX2RldmljZV9kZXRhY2gobmRldik7CisJZGVsX3RpbWVyX3N5bmMoJnFkZXYtPnRpbWVyKTsKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CiAJCWVyciA9IHFsX2FkYXB0ZXJfZG93bihxZGV2KTsKQEAgLTQ0NTQsNyArNDg1Nyw3IEBACiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CiAJZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiAJaWYgKGVycikgewotCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwgIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcbiIpOworCQluZXRpZl9lcnIocWRldiwgaWZ1cCwgcWRldi0+bmRldiwgIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSBmcm9tIHN1c3BlbmRcbiIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKQEAgLTQ0NjgsNiArNDg3MSw4IEBACiAJCQlyZXR1cm4gZXJyOwogCX0KIAorCXFkZXYtPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgKDUqSFopOworCWFkZF90aW1lcigmcWRldi0+dGltZXIpOwogCW5ldGlmX2RldmljZV9hdHRhY2gobmRldik7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYyBiL2RyaXZlcnMvbmV0L3FsZ2UvcWxnZV9tcGkuYwppbmRleCBlMmIyMjg2Li4zYzAwNDYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9xbGdlL3FsZ2VfbXBpLmMKKysrIGIvZHJpdmVycy9uZXQvcWxnZS9xbGdlX21waS5jCkBAIC0xLDUgKzEsNTQgQEAKICNpbmNsdWRlICJxbGdlLmgiCiAKK2ludCBxbF91bnBhdXNlX21waV9yaXNjKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCXUzMiB0bXA7CisKKwkvKiBVbi1wYXVzZSB0aGUgUklTQyAqLworCXRtcCA9IHFsX3JlYWQzMihxZGV2LCBDU1IpOworCWlmICghKHRtcCAmIENTUl9SUCkpCisJCXJldHVybiAtRUlPOworCisJcWxfd3JpdGUzMihxZGV2LCBDU1IsIENTUl9DTURfQ0xSX1BBVVNFKTsKKwlyZXR1cm4gMDsKK30KKworaW50IHFsX3BhdXNlX21waV9yaXNjKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCXUzMiB0bXA7CisJaW50IGNvdW50ID0gVURFTEFZX0NPVU5UOworCisJLyogUGF1c2UgdGhlIFJJU0MgKi8KKwlxbF93cml0ZTMyKHFkZXYsIENTUiwgQ1NSX0NNRF9TRVRfUEFVU0UpOworCWRvIHsKKwkJdG1wID0gcWxfcmVhZDMyKHFkZXYsIENTUik7CisJCWlmICh0bXAgJiBDU1JfUlApCisJCQlicmVhazsKKwkJbWRlbGF5KFVERUxBWV9ERUxBWSk7CisJCWNvdW50LS07CisJfSB3aGlsZSAoY291bnQpOworCXJldHVybiAoY291bnQgPT0gMCkgPyAtRVRJTUVET1VUIDogMDsKK30KKworaW50IHFsX2hhcmRfcmVzZXRfbXBpX3Jpc2Moc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJdTMyIHRtcDsKKwlpbnQgY291bnQgPSBVREVMQVlfQ09VTlQ7CisKKwkvKiBSZXNldCB0aGUgUklTQyAqLworCXFsX3dyaXRlMzIocWRldiwgQ1NSLCBDU1JfQ01EX1NFVF9SU1QpOworCWRvIHsKKwkJdG1wID0gcWxfcmVhZDMyKHFkZXYsIENTUik7CisJCWlmICh0bXAgJiBDU1JfUlIpIHsKKwkJCXFsX3dyaXRlMzIocWRldiwgQ1NSLCBDU1JfQ01EX0NMUl9SU1QpOworCQkJYnJlYWs7CisJCX0KKwkJbWRlbGF5KFVERUxBWV9ERUxBWSk7CisJCWNvdW50LS07CisJfSB3aGlsZSAoY291bnQpOworCXJldHVybiAoY291bnQgPT0gMCkgPyAtRVRJTUVET1VUIDogMDsKK30KKwogaW50IHFsX3JlYWRfbXBpX3JlZyhzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTMyIHJlZywgdTMyICpkYXRhKQogewogCWludCBzdGF0dXM7CkBAIC00NSw2ICs5NCwzNSBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKKy8qIERldGVybWluZSBpZiB3ZSBhcmUgaW4gY2hhcmdlIG9mIHRoZSBmaXJ3bWFyZS4gSWYKKyAqIHdlIGFyZSB0aGUgbG93ZXIgb2YgdGhlIDIgTklDIHBjaWUgZnVuY3Rpb25zLCBvciBpZgorICogd2UgYXJlIHRoZSBoaWdoZXIgZnVuY3Rpb24gYW5kIHRoZSBsb3dlciBmdW5jdGlvbgorICogaXMgbm90IGVuYWJsZWQuCisgKi8KK2ludCBxbF9vd25fZmlybXdhcmUoc3RydWN0IHFsX2FkYXB0ZXIgKnFkZXYpCit7CisJdTMyIHRlbXA7CisKKwkvKiBJZiB3ZSBhcmUgdGhlIGxvd2VyIG9mIHRoZSAyIE5JQyBmdW5jdGlvbnMKKwkgKiBvbiB0aGUgY2hpcCB0aGUgd2UgYXJlIHJlc3BvbnNpYmxlIGZvcgorCSAqIGNvcmUgZHVtcCBhbmQgZmlybXdhcmUgcmVzZXQgYWZ0ZXIgYW4gZXJyb3IuCisJICovCisJaWYgKHFkZXYtPmZ1bmMgPCBxZGV2LT5hbHRfZnVuYykKKwkJcmV0dXJuIDE7CisKKwkvKiBJZiB3ZSBhcmUgdGhlIGhpZ2hlciBvZiB0aGUgMiBOSUMgZnVuY3Rpb25zCisJICogb24gdGhlIGNoaXAgYW5kIHRoZSBsb3dlciBmdW5jdGlvbiBpcyBub3QKKwkgKiBlbmFibGVkLCB0aGVuIHdlIGFyZSByZXNwb25zaWJsZSBmb3IKKwkgKiBjb3JlIGR1bXAgYW5kIGZpcm13YXJlIHJlc2V0IGFmdGVyIGFuIGVycm9yLgorCSAqLworCXRlbXAgPSAgcWxfcmVhZDMyKHFkZXYsIFNUUyk7CisJaWYgKCEodGVtcCAmICgxIDw8ICg4ICsgcWRldi0+YWx0X2Z1bmMpKSkpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7CisKK30KKwogc3RhdGljIGludCBxbF9nZXRfbWJfc3RzKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCBzdHJ1Y3QgbWJveF9wYXJhbXMgKm1iY3ApCiB7CiAJaW50IGksIHN0YXR1czsKQEAgLTU3LDcgKzEzNSw3IEBACiAJCSAgICBxbF9yZWFkX21waV9yZWcocWRldiwgcWRldi0+bWFpbGJveF9vdXQgKyBpLAogCQkJCSAgICAgJm1iY3AtPm1ib3hfb3V0W2ldKTsKIAkJaWYgKHN0YXR1cykgewotCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkZhaWxlZCBtYWlsYm94IHJlYWQuXG4iKTsKKwkJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsICJGYWlsZWQgbWFpbGJveCByZWFkLlxuIik7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTEzMCw3ICsyMDgsNyBAQAogCWludCBzdGF0dXM7CiAJc3RydWN0IG1ib3hfcGFyYW1zICptYmNwID0gJnFkZXYtPmlkY19tYmM7CiAKLQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiRW50ZXIhXG4iKTsKKwluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LCAiRW50ZXIhXG4iKTsKIAkvKiBHZXQgdGhlIHN0YXR1cyBkYXRhIGFuZCBzdGFydCB1cCBhIHRocmVhZCB0bwogCSAqIGhhbmRsZSB0aGUgcmVxdWVzdC4KIAkgKi8KQEAgLTEzOCw4ICsyMTYsOCBAQAogCW1iY3AtPm91dF9jb3VudCA9IDQ7CiAJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiQ291bGQgbm90IHJlYWQgTVBJLCByZXNldHRpbmcgQVNJQyFcbiIpOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJICAiQ291bGQgbm90IHJlYWQgTVBJLCByZXNldHRpbmcgQVNJQyFcbiIpOwogCQlxbF9xdWV1ZV9hc2ljX2Vycm9yKHFkZXYpOwogCX0gZWxzZQl7CiAJCS8qIEJlZ2luIHBvbGxlZCBtb2RlIGVhcmx5IHNvCkBAIC0xNjIsOCArMjQwLDggQEAKIAltYmNwLT5vdXRfY291bnQgPSA0OwogCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CiAJaWYgKHN0YXR1cykgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJIkNvdWxkIG5vdCByZWFkIE1QSSwgcmVzZXR0aW5nIFJJU0MhXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkNvdWxkIG5vdCByZWFkIE1QSSwgcmVzZXR0aW5nIFJJU0MhXG4iKTsKIAkJcWxfcXVldWVfZndfZXJyb3IocWRldik7CiAJfSBlbHNlCiAJCS8qIFdha2UgdXAgdGhlIHNsZWVwaW5nIG1waV9pZGNfd29yayB0aHJlYWQgdGhhdCBpcwpAQCAtMTgxLDEzICsyNTksMTMgQEAKIAogCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CiAJaWYgKHN0YXR1cykgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJIiVzOiBDb3VsZCBub3QgZ2V0IG1haWxib3ggc3RhdHVzLlxuIiwgX19mdW5jX18pOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJICAiJXM6IENvdWxkIG5vdCBnZXQgbWFpbGJveCBzdGF0dXMuXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAKIAlxZGV2LT5saW5rX3N0YXR1cyA9IG1iY3AtPm1ib3hfb3V0WzFdOwotCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJMaW5rIFVwLlxuIik7CisJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIkxpbmsgVXAuXG4iKTsKIAogCS8qIElmIHdlJ3JlIGNvbWluZyBiYWNrIGZyb20gYW4gSURDIGV2ZW50CiAJICogdGhlbiBzZXQgdXAgdGhlIENBTSBhbmQgZnJhbWUgcm91dGluZy4KQEAgLTE5NSw4ICsyNzMsOCBAQAogCWlmICh0ZXN0X2JpdChRTF9DQU1fUlRfU0VULCAmcWRldi0+ZmxhZ3MpKSB7CiAJCXN0YXR1cyA9IHFsX2NhbV9yb3V0ZV9pbml0aWFsaXplKHFkZXYpOwogCQlpZiAoc3RhdHVzKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIElGVVAsIEVSUiwKLQkJCSJGYWlsZWQgdG8gaW5pdCBDQU0vUm91dGluZyB0YWJsZXMuXG4iKTsKKwkJCW5ldGlmX2VycihxZGV2LCBpZnVwLCBxZGV2LT5uZGV2LAorCQkJCSAgIkZhaWxlZCB0byBpbml0IENBTS9Sb3V0aW5nIHRhYmxlcy5cbiIpOwogCQkJcmV0dXJuOwogCQl9IGVsc2UKIAkJCWNsZWFyX2JpdChRTF9DQU1fUlRfU0VULCAmcWRldi0+ZmxhZ3MpOwpAQCAtMjA3LDcgKzI4NSw3IEBACiAJICogdG8gb3VyIGxpa2luZy4KIAkgKi8KIAlpZiAoIXRlc3RfYml0KFFMX1BPUlRfQ0ZHLCAmcWRldi0+ZmxhZ3MpKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJRdWV1ZSBQb3J0IENvbmZpZyBXb3JrZXIhXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIlF1ZXVlIFBvcnQgQ29uZmlnIFdvcmtlciFcbiIpOwogCQlzZXRfYml0KFFMX1BPUlRfQ0ZHLCAmcWRldi0+ZmxhZ3MpOwogCQkvKiBCZWdpbiBwb2xsZWQgbW9kZSBlYXJseSBzbwogCQkgKiB3ZSBkb24ndCBnZXQgYW5vdGhlciBpbnRlcnJ1cHQKQEAgLTIyOSw3ICszMDcsNyBAQAogCiAJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKIAlpZiAoc3RhdHVzKQotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiTGluayBkb3duIEFFTiBicm9rZW4hXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIkxpbmsgZG93biBBRU4gYnJva2VuIVxuIik7CiAKIAlxbF9saW5rX29mZihxZGV2KTsKIH0KQEAgLTI0Miw5ICszMjAsOSBAQAogCiAJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKIAlpZiAoc3RhdHVzKQotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiU0ZQIGluIEFFTiBicm9rZW4hXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIlNGUCBpbiBBRU4gYnJva2VuIVxuIik7CiAJZWxzZQotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiU0ZQIGluc2VydGlvbiBkZXRlY3RlZC5cbiIpOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LCAiU0ZQIGluc2VydGlvbiBkZXRlY3RlZC5cbiIpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTI1Nyw5ICszMzUsOSBAQAogCiAJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKIAlpZiAoc3RhdHVzKQotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiU0ZQIG91dCBBRU4gYnJva2VuIVxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsICJTRlAgb3V0IEFFTiBicm9rZW4hXG4iKTsKIAllbHNlCi0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJTRlAgcmVtb3ZhbCBkZXRlY3RlZC5cbiIpOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LCAiU0ZQIHJlbW92YWwgZGV0ZWN0ZWQuXG4iKTsKIAogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0yNzIsMTMgKzM1MCwxMyBAQAogCiAJc3RhdHVzID0gcWxfZ2V0X21iX3N0cyhxZGV2LCBtYmNwKTsKIAlpZiAoc3RhdHVzKQotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLCAiTG9zdCBBRU4gYnJva2VuIVxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsICJMb3N0IEFFTiBicm9rZW4hXG4iKTsKIAllbHNlIHsKIAkJaW50IGk7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsICJMb3N0IEFFTiBkZXRlY3RlZC5cbiIpOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LCAiTG9zdCBBRU4gZGV0ZWN0ZWQuXG4iKTsKIAkJZm9yIChpID0gMDsgaSA8IG1iY3AtPm91dF9jb3VudDsgaSsrKQotCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIm1ib3hfb3V0WyVkXSA9IDB4JS4wOHguXG4iLAotCQkJCQlpLCBtYmNwLT5tYm94X291dFtpXSk7CisJCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LCAibWJveF9vdXRbJWRdID0gMHglLjA4eC5cbiIsCisJCQkJICBpLCBtYmNwLT5tYm94X291dFtpXSk7CiAKIAl9CiAKQEAgLTI5MywxNSArMzcxLDE1IEBACiAKIAlzdGF0dXMgPSBxbF9nZXRfbWJfc3RzKHFkZXYsIG1iY3ApOwogCWlmIChzdGF0dXMpIHsKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkZpcm13YXJlIGRpZCBub3QgaW5pdGlhbGl6ZSFcbiIpOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LCAiRmlybXdhcmUgZGlkIG5vdCBpbml0aWFsaXplIVxuIik7CiAJfSBlbHNlIHsKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwgIkZpcm13YXJlIFJldmlzaW9uICA9IDB4JS4wOHguXG4iLAotCQkJbWJjcC0+bWJveF9vdXRbMV0pOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LCAiRmlybXdhcmUgUmV2aXNpb24gID0gMHglLjA4eC5cbiIsCisJCQkgIG1iY3AtPm1ib3hfb3V0WzFdKTsKIAkJcWRldi0+ZndfcmV2X2lkID0gbWJjcC0+bWJveF9vdXRbMV07CiAJCXN0YXR1cyA9IHFsX2NhbV9yb3V0ZV9pbml0aWFsaXplKHFkZXYpOwogCQlpZiAoc3RhdHVzKQotCQkJUVBSSU5USyhxZGV2LCBJRlVQLCBFUlIsCi0JCQkJIkZhaWxlZCB0byBpbml0IENBTS9Sb3V0aW5nIHRhYmxlcy5cbiIpOworCQkJbmV0aWZfZXJyKHFkZXYsIGlmdXAsIHFkZXYtPm5kZXYsCisJCQkJICAiRmFpbGVkIHRvIGluaXQgQ0FNL1JvdXRpbmcgdGFibGVzLlxuIik7CiAJfQogfQogCkBAIC0zMjAsOCArMzk4LDggQEAKIAltYmNwLT5vdXRfY291bnQgPSAxOwogCXN0YXR1cyA9IHFsX2dldF9tYl9zdHMocWRldiwgbWJjcCk7CiAJaWYgKHN0YXR1cykgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJIkNvdWxkIG5vdCByZWFkIE1QSSwgcmVzZXR0aW5nIEFTSUMhXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkNvdWxkIG5vdCByZWFkIE1QSSwgcmVzZXR0aW5nIEFTSUMhXG4iKTsKIAkJcWxfcXVldWVfYXNpY19lcnJvcihxZGV2KTsKIAkJZ290byBlbmQ7CiAJfQpAQCAtNDEwLDE1ICs0ODgsMTQgQEAKIAkJCW1iY3AtPm1ib3hfb3V0WzBdID0gTUJfQ01EX1NUU19FUlI7CiAJCQlyZXR1cm4gc3RhdHVzOwogCQl9Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiRmlybXdhcmUgaW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJGaXJtd2FyZSBpbml0aWFsaXphdGlvbiBmYWlsZWQuXG4iKTsKIAkJc3RhdHVzID0gLUVJTzsKIAkJcWxfcXVldWVfZndfZXJyb3IocWRldik7CiAJCWJyZWFrOwogCiAJY2FzZSBBRU5fU1lTX0VSUjoKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCSJTeXN0ZW0gRXJyb3IuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIlN5c3RlbSBFcnJvci5cbiIpOwogCQlxbF9xdWV1ZV9md19lcnJvcihxZGV2KTsKIAkJc3RhdHVzID0gLUVJTzsKIAkJYnJlYWs7CkBAIC00MzEsOCArNTA4LDggQEAKIAkJLyogTmVlZCB0byBzdXBwb3J0IEFFTiA4MTEwICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiVW5zdXBwb3J0ZWQgQUUgJS4wOHguXG4iLCBtYmNwLT5tYm94X291dFswXSk7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJVbnN1cHBvcnRlZCBBRSAlLjA4eC5cbiIsIG1iY3AtPm1ib3hfb3V0WzBdKTsKIAkJLyogQ2xlYXIgdGhlIE1QSSBmaXJtd2FyZSBzdGF0dXMuICovCiAJfQogZW5kOgpAQCAtNTA1LDggKzU4Miw4IEBACiAJCQlnb3RvIGRvbmU7CiAJfSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgY291bnQpKTsKIAotCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCSJUaW1lZCBvdXQgd2FpdGluZyBmb3IgbWFpbGJveCBjb21wbGV0ZS5cbiIpOworCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCSAgIlRpbWVkIG91dCB3YWl0aW5nIGZvciBtYWlsYm94IGNvbXBsZXRlLlxuIik7CiAJc3RhdHVzID0gLUVUSU1FRE9VVDsKIAlnb3RvIGVuZDsKIApAQCAtNTI5LDYgKzYwNiwyMiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKK2ludCBxbF9tYl9zeXNfZXJyKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2KQoreworCXN0cnVjdCBtYm94X3BhcmFtcyBtYmM7CisJc3RydWN0IG1ib3hfcGFyYW1zICptYmNwID0gJm1iYzsKKwlpbnQgc3RhdHVzOworCisJbWVtc2V0KG1iY3AsIDAsIHNpemVvZihzdHJ1Y3QgbWJveF9wYXJhbXMpKTsKKworCW1iY3AtPmluX2NvdW50ID0gMTsKKwltYmNwLT5vdXRfY291bnQgPSAwOworCisJbWJjcC0+bWJveF9pblswXSA9IE1CX0NNRF9NQUtFX1NZU19FUlI7CisKKwlzdGF0dXMgPSBxbF9tYWlsYm94X2NvbW1hbmQocWRldiwgbWJjcCk7CisJcmV0dXJuIHN0YXR1czsKK30KIAogLyogR2V0IE1QSSBmaXJtd2FyZSB2ZXJzaW9uLiBUaGlzIHdpbGwgYmUgdXNlZCBmb3IKICAqIGRyaXZlciBiYW5uZXIgYW5kIGZvciBldGh0b29sIGluZm8uCkBAIC01NTIsOCArNjQ1LDggQEAKIAkJcmV0dXJuIHN0YXR1czsKIAogCWlmIChtYmNwLT5tYm94X291dFswXSAhPSBNQl9DTURfU1RTX0dPT0QpIHsKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCSJGYWlsZWQgYWJvdXQgZmlybXdhcmUgY29tbWFuZFxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJGYWlsZWQgYWJvdXQgZmlybXdhcmUgY29tbWFuZFxuIik7CiAJCXN0YXR1cyA9IC1FSU87CiAJfQogCkBAIC01ODQsOCArNjc3LDggQEAKIAkJcmV0dXJuIHN0YXR1czsKIAogCWlmIChtYmNwLT5tYm94X291dFswXSAhPSBNQl9DTURfU1RTX0dPT0QpIHsKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCSJGYWlsZWQgR2V0IEZpcm13YXJlIFN0YXRlLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJGYWlsZWQgR2V0IEZpcm13YXJlIFN0YXRlLlxuIik7CiAJCXN0YXR1cyA9IC1FSU87CiAJfQogCkBAIC01OTQsOCArNjg3LDggQEAKIAkgKiBoYXBwZW4uCiAJICovCiAJaWYgKG1iY3AtPm1ib3hfb3V0WzFdICYgMSkgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJIkZpcm13YXJlIHdhaXRpbmcgZm9yIGluaXRpYWxpemF0aW9uLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJGaXJtd2FyZSB3YWl0aW5nIGZvciBpbml0aWFsaXphdGlvbi5cbiIpOwogCQlzdGF0dXMgPSAtRUlPOwogCX0KIApAQCAtNjI3LDggKzcyMCw3IEBACiAJCXJldHVybiBzdGF0dXM7CiAKIAlpZiAobWJjcC0+bWJveF9vdXRbMF0gIT0gTUJfQ01EX1NUU19HT09EKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiRmFpbGVkIElEQyBBQ0sgc2VuZC5cbiIpOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LCAiRmFpbGVkIElEQyBBQ0sgc2VuZC5cbiIpOwogCQlzdGF0dXMgPSAtRUlPOwogCX0KIAlyZXR1cm4gc3RhdHVzOwpAQCAtNjU5LDE2ICs3NTEsNzIgQEAKIAkJcmV0dXJuIHN0YXR1czsKIAogCWlmIChtYmNwLT5tYm94X291dFswXSA9PSBNQl9DTURfU1RTX0lOVFJNRFQpIHsKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCSJQb3J0IENvbmZpZyBzZW50LCB3YWl0IGZvciBJREMuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIlBvcnQgQ29uZmlnIHNlbnQsIHdhaXQgZm9yIElEQy5cbiIpOwogCX0gZWxzZQlpZiAobWJjcC0+bWJveF9vdXRbMF0gIT0gTUJfQ01EX1NUU19HT09EKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiRmFpbGVkIFNldCBQb3J0IENvbmZpZ3VyYXRpb24uXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkZhaWxlZCBTZXQgUG9ydCBDb25maWd1cmF0aW9uLlxuIik7CiAJCXN0YXR1cyA9IC1FSU87CiAJfQogCXJldHVybiBzdGF0dXM7CiB9CiAKK2ludCBxbF9tYl9kdW1wX3JhbShzdHJ1Y3QgcWxfYWRhcHRlciAqcWRldiwgdTY0IHJlcV9kbWEsIHUzMiBhZGRyLAorCXUzMiBzaXplKQoreworCWludCBzdGF0dXMgPSAwOworCXN0cnVjdCBtYm94X3BhcmFtcyBtYmM7CisJc3RydWN0IG1ib3hfcGFyYW1zICptYmNwID0gJm1iYzsKKworCW1lbXNldChtYmNwLCAwLCBzaXplb2Yoc3RydWN0IG1ib3hfcGFyYW1zKSk7CisKKwltYmNwLT5pbl9jb3VudCA9IDk7CisJbWJjcC0+b3V0X2NvdW50ID0gMTsKKworCW1iY3AtPm1ib3hfaW5bMF0gPSBNQl9DTURfRFVNUF9SSVNDX1JBTTsKKwltYmNwLT5tYm94X2luWzFdID0gTFNXKGFkZHIpOworCW1iY3AtPm1ib3hfaW5bMl0gPSBNU1cocmVxX2RtYSk7CisJbWJjcC0+bWJveF9pblszXSA9IExTVyhyZXFfZG1hKTsKKwltYmNwLT5tYm94X2luWzRdID0gTVNXKHNpemUpOworCW1iY3AtPm1ib3hfaW5bNV0gPSBMU1coc2l6ZSk7CisJbWJjcC0+bWJveF9pbls2XSA9IE1TVyhNU0QocmVxX2RtYSkpOworCW1iY3AtPm1ib3hfaW5bN10gPSBMU1coTVNEKHJlcV9kbWEpKTsKKwltYmNwLT5tYm94X2luWzhdID0gTVNXKGFkZHIpOworCisKKwlzdGF0dXMgPSBxbF9tYWlsYm94X2NvbW1hbmQocWRldiwgbWJjcCk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCWlmIChtYmNwLT5tYm94X291dFswXSAhPSBNQl9DTURfU1RTX0dPT0QpIHsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIkZhaWxlZCB0byBkdW1wIHJpc2MgUkFNLlxuIik7CisJCXN0YXR1cyA9IC1FSU87CisJfQorCXJldHVybiBzdGF0dXM7Cit9CisKKy8qIElzc3VlIGEgbWFpbGJveCBjb21tYW5kIHRvIGR1bXAgUklTQyBSQU0uICovCitpbnQgcWxfZHVtcF9yaXNjX3JhbV9hcmVhKHN0cnVjdCBxbF9hZGFwdGVyICpxZGV2LCB2b2lkICpidWYsCisJCXUzMiByYW1fYWRkciwgaW50IHdvcmRfY291bnQpCit7CisJaW50IHN0YXR1czsKKwljaGFyICpteV9idWY7CisJZG1hX2FkZHJfdCBidWZfZG1hOworCisJbXlfYnVmID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocWRldi0+cGRldiwgd29yZF9jb3VudCAqIHNpemVvZih1MzIpLAorCQkJCQkmYnVmX2RtYSk7CisJaWYgKCFteV9idWYpCisJCXJldHVybiAtRUlPOworCisJc3RhdHVzID0gcWxfbWJfZHVtcF9yYW0ocWRldiwgYnVmX2RtYSwgcmFtX2FkZHIsIHdvcmRfY291bnQpOworCWlmICghc3RhdHVzKQorCQltZW1jcHkoYnVmLCBteV9idWYsIHdvcmRfY291bnQgKiBzaXplb2YodTMyKSk7CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHFkZXYtPnBkZXYsIHdvcmRfY291bnQgKiBzaXplb2YodTMyKSwgbXlfYnVmLAorCQkJCWJ1Zl9kbWEpOworCXJldHVybiBzdGF0dXM7Cit9CisKIC8qIEdldCBsaW5rIHNldHRpbmdzIGFuZCBtYXhpbXVtIGZyYW1lIHNpemUgc2V0dGluZ3MKICAqIGZvciB0aGUgY3VycmVudCBwb3J0LgogICogTW9zdCBsaWtlbHkgd2lsbCBibG9jay4KQEAgLTY5MSwxMiArODM5LDEyIEBACiAJCXJldHVybiBzdGF0dXM7CiAKIAlpZiAobWJjcC0+bWJveF9vdXRbMF0gIT0gTUJfQ01EX1NUU19HT09EKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiRmFpbGVkIEdldCBQb3J0IENvbmZpZ3VyYXRpb24uXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkZhaWxlZCBHZXQgUG9ydCBDb25maWd1cmF0aW9uLlxuIik7CiAJCXN0YXR1cyA9IC1FSU87CiAJfSBlbHNlCXsKLQkJUVBSSU5USyhxZGV2LCBEUlYsIERFQlVHLAotCQkJIlBhc3NlZCBHZXQgUG9ydCBDb25maWd1cmF0aW9uLlxuIik7CisJCW5ldGlmX3ByaW50ayhxZGV2LCBkcnYsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkgICAgICJQYXNzZWQgR2V0IFBvcnQgQ29uZmlndXJhdGlvbi5cbiIpOwogCQlxZGV2LT5saW5rX2NvbmZpZyA9IG1iY3AtPm1ib3hfb3V0WzFdOwogCQlxZGV2LT5tYXhfZnJhbWVfc2l6ZSA9IG1iY3AtPm1ib3hfb3V0WzJdOwogCX0KQEAgLTcyMyw4ICs4NzEsNyBAQAogCQlyZXR1cm4gc3RhdHVzOwogCiAJaWYgKG1iY3AtPm1ib3hfb3V0WzBdICE9IE1CX0NNRF9TVFNfR09PRCkgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJIkZhaWxlZCB0byBzZXQgV09MIG1vZGUuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIkZhaWxlZCB0byBzZXQgV09MIG1vZGUuXG4iKTsKIAkJc3RhdHVzID0gLUVJTzsKIAl9CiAJcmV0dXJuIHN0YXR1czsKQEAgLTc2Niw4ICs5MTMsNyBAQAogCQlyZXR1cm4gc3RhdHVzOwogCiAJaWYgKG1iY3AtPm1ib3hfb3V0WzBdICE9IE1CX0NNRF9TVFNfR09PRCkgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJIkZhaWxlZCB0byBzZXQgV09MIG1vZGUuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIkZhaWxlZCB0byBzZXQgV09MIG1vZGUuXG4iKTsKIAkJc3RhdHVzID0gLUVJTzsKIAl9CiAJcmV0dXJuIHN0YXR1czsKQEAgLTc5Myw4ICs5MzksNyBAQAogCQkJd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZxZGV2LT5pZGVfY29tcGxldGlvbiwKIAkJCQkJCQl3YWl0X3RpbWUpOwogCQlpZiAoIXdhaXRfdGltZSkgewotCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCQkiSURDIFRpbWVvdXQuXG4iKTsKKwkJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsICJJREMgVGltZW91dC5cbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJLyogTm93IGV4YW1pbmUgdGhlIHJlc3BvbnNlIGZyb20gdGhlIElEQyBwcm9jZXNzLgpAQCAtODAyLDE4ICs5NDcsMTcgQEAKIAkJICogbW9yZSB3YWl0IHRpbWUuCiAJCSAqLwogCQlpZiAobWJjcC0+bWJveF9vdXRbMF0gPT0gQUVOX0lEQ19FWFQpIHsKLQkJCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkJIklEQyBUaW1lIEV4dGVuc2lvbiBmcm9tIGZ1bmN0aW9uLlxuIik7CisJCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJCSAgIklEQyBUaW1lIEV4dGVuc2lvbiBmcm9tIGZ1bmN0aW9uLlxuIik7CiAJCQl3YWl0X3RpbWUgKz0gKG1iY3AtPm1ib3hfb3V0WzFdID4+IDgpICYgMHgwMDAwMDAwZjsKIAkJfSBlbHNlIGlmIChtYmNwLT5tYm94X291dFswXSA9PSBBRU5fSURDX0NNUExUKSB7Ci0JCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJCSJJREMgU3VjY2Vzcy5cbiIpOworCQkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwgIklEQyBTdWNjZXNzLlxuIik7CiAJCQlzdGF0dXMgPSAwOwogCQkJYnJlYWs7CiAJCX0gZWxzZSB7Ci0JCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJCSJJREM6IEludmFsaWQgU3RhdGUgMHglLjA0eC5cbiIsCi0JCQkJbWJjcC0+bWJveF9vdXRbMF0pOworCQkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCQkgICJJREM6IEludmFsaWQgU3RhdGUgMHglLjA0eC5cbiIsCisJCQkJICBtYmNwLT5tYm94X291dFswXSk7CiAJCQlzdGF0dXMgPSAtRUlPOwogCQkJYnJlYWs7CiAJCX0KQEAgLTg0Miw4ICs5ODYsOCBAQAogCQlyZXR1cm4gc3RhdHVzOwogCiAJaWYgKG1iY3AtPm1ib3hfb3V0WzBdICE9IE1CX0NNRF9TVFNfR09PRCkgewotCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJIkZhaWxlZCB0byBzZXQgTEVEIENvbmZpZ3VyYXRpb24uXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkZhaWxlZCB0byBzZXQgTEVEIENvbmZpZ3VyYXRpb24uXG4iKTsKIAkJc3RhdHVzID0gLUVJTzsKIAl9CiAKQEAgLTg2OCw4ICsxMDEyLDggQEAKIAkJcmV0dXJuIHN0YXR1czsKIAogCWlmIChtYmNwLT5tYm94X291dFswXSAhPSBNQl9DTURfU1RTX0dPT0QpIHsKLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCSJGYWlsZWQgdG8gZ2V0IExFRCBDb25maWd1cmF0aW9uLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJGYWlsZWQgdG8gZ2V0IExFRCBDb25maWd1cmF0aW9uLlxuIik7CiAJCXN0YXR1cyA9IC1FSU87CiAJfSBlbHNlCiAJCXFkZXYtPmxlZF9jb25maWcgPSBtYmNwLT5tYm94X291dFsxXTsKQEAgLTg5OSwxNiArMTA0MywxNiBAQAogCQlyZXR1cm4gc3RhdHVzOwogCiAJaWYgKG1iY3AtPm1ib3hfb3V0WzBdID09IE1CX0NNRF9TVFNfSU5WTERfQ01EKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiQ29tbWFuZCBub3Qgc3VwcG9ydGVkIGJ5IGZpcm13YXJlLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJDb21tYW5kIG5vdCBzdXBwb3J0ZWQgYnkgZmlybXdhcmUuXG4iKTsKIAkJc3RhdHVzID0gLUVJTlZBTDsKIAl9IGVsc2UgaWYgKG1iY3AtPm1ib3hfb3V0WzBdID09IE1CX0NNRF9TVFNfRVJSKSB7CiAJCS8qIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIGZpcm13YXJlIGlzCiAJCSAqIGFscmVhZHkgaW4gdGhlIHN0YXRlIHdlIGFyZSB0cnlpbmcgdG8KIAkJICogY2hhbmdlIGl0IHRvLgogCQkgKi8KLQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCSJDb21tYW5kIHBhcmFtZXRlcnMgbWFrZSBubyBjaGFuZ2UuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkNvbW1hbmQgcGFyYW1ldGVycyBtYWtlIG5vIGNoYW5nZS5cbiIpOwogCX0KIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtOTM4LDEyICsxMDgyLDEyIEBACiAJfQogCiAJaWYgKG1iY3AtPm1ib3hfb3V0WzBdID09IE1CX0NNRF9TVFNfSU5WTERfQ01EKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiQ29tbWFuZCBub3Qgc3VwcG9ydGVkIGJ5IGZpcm13YXJlLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJDb21tYW5kIG5vdCBzdXBwb3J0ZWQgYnkgZmlybXdhcmUuXG4iKTsKIAkJc3RhdHVzID0gLUVJTlZBTDsKIAl9IGVsc2UgaWYgKG1iY3AtPm1ib3hfb3V0WzBdID09IE1CX0NNRF9TVFNfRVJSKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiRmFpbGVkIHRvIGdldCBNUEkgdHJhZmZpYyBjb250cm9sLlxuIik7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkgICJGYWlsZWQgdG8gZ2V0IE1QSSB0cmFmZmljIGNvbnRyb2wuXG4iKTsKIAkJc3RhdHVzID0gLUVJTzsKIAl9CiAJcmV0dXJuIHN0YXR1czsKQEAgLTk5OSw4ICsxMTQzLDggQEAKIAlzdGF0dXMgPSBxbF9tYl9nZXRfcG9ydF9jZmcocWRldik7CiAJcnRubF91bmxvY2soKTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiQnVnOiBGYWlsZWQgdG8gZ2V0IHBvcnQgY29uZmlnIGRhdGEuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkJ1ZzogRmFpbGVkIHRvIGdldCBwb3J0IGNvbmZpZyBkYXRhLlxuIik7CiAJCWdvdG8gZXJyOwogCX0KIApAQCAtMTAxMyw4ICsxMTU3LDggQEAKIAlxZGV2LT5tYXhfZnJhbWVfc2l6ZSA9IENGR19ERUZBVUxUX01BWF9GUkFNRV9TSVpFOwogCXN0YXR1cyA9IHFsX3NldF9wb3J0X2NmZyhxZGV2KTsKIAlpZiAoc3RhdHVzKSB7Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiQnVnOiBGYWlsZWQgdG8gc2V0IHBvcnQgY29uZmlnIGRhdGEuXG4iKTsKKwkJbmV0aWZfZXJyKHFkZXYsIGRydiwgcWRldi0+bmRldiwKKwkJCSAgIkJ1ZzogRmFpbGVkIHRvIHNldCBwb3J0IGNvbmZpZyBkYXRhLlxuIik7CiAJCWdvdG8gZXJyOwogCX0KIGVuZDoKQEAgLTEwNDYsOCArMTE5MCw4IEBACiAKIAlzd2l0Y2ggKGFlbikgewogCWRlZmF1bHQ6Ci0JCVFQUklOVEsocWRldiwgRFJWLCBFUlIsCi0JCQkiQnVnOiBVbmhhbmRsZWQgSURDIGFjdGlvbi5cbiIpOworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJICAiQnVnOiBVbmhhbmRsZWQgSURDIGFjdGlvbi5cbiIpOwogCQlicmVhazsKIAljYXNlIE1CX0NNRF9QT1JUX1JFU0VUOgogCWNhc2UgTUJfQ01EX1NUT1BfRlc6CkBAIC0xMDYyLDExICsxMjA2LDExIEBACiAJCWlmICh0aW1lb3V0KSB7CiAJCQlzdGF0dXMgPSBxbF9tYl9pZGNfYWNrKHFkZXYpOwogCQkJaWYgKHN0YXR1cykKLQkJCQlRUFJJTlRLKHFkZXYsIERSViwgRVJSLAotCQkJCQkiQnVnOiBObyBwZW5kaW5nIElEQyFcbiIpOworCQkJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsCisJCQkJCSAgIkJ1ZzogTm8gcGVuZGluZyBJREMhXG4iKTsKIAkJfSBlbHNlIHsKLQkJCVFQUklOVEsocWRldiwgRFJWLCBERUJVRywKLQkJCQkgICAgIklEQyBBQ0sgbm90IHJlcXVpcmVkXG4iKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCBkcnYsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiSURDIEFDSyBub3QgcmVxdWlyZWRcbiIpOwogCQkJc3RhdHVzID0gMDsgLyogc3VjY2VzcyAqLwogCQl9CiAJCWJyZWFrOwpAQCAtMTA5NSwxMSArMTIzOSwxMSBAQAogCQlpZiAodGltZW91dCkgewogCQkJc3RhdHVzID0gcWxfbWJfaWRjX2FjayhxZGV2KTsKIAkJCWlmIChzdGF0dXMpCi0JCQkJUVBSSU5USyhxZGV2LCBEUlYsIEVSUiwKLQkJCQkgICAgIkJ1ZzogTm8gcGVuZGluZyBJREMhXG4iKTsKKwkJCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LAorCQkJCQkgICJCdWc6IE5vIHBlbmRpbmcgSURDIVxuIik7CiAJCX0gZWxzZSB7Ci0JCQlRUFJJTlRLKHFkZXYsIERSViwgREVCVUcsCi0JCQkgICAgIklEQyBBQ0sgbm90IHJlcXVpcmVkXG4iKTsKKwkJCW5ldGlmX3ByaW50ayhxZGV2LCBkcnYsIEtFUk5fREVCVUcsIHFkZXYtPm5kZXYsCisJCQkJICAgICAiSURDIEFDSyBub3QgcmVxdWlyZWRcbiIpOwogCQkJc3RhdHVzID0gMDsgLyogc3VjY2VzcyAqLwogCQl9CiAJCWJyZWFrOwpAQCAtMTE0Myw1ICsxMjg3LDE5IEBACiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfd29yayk7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfcG9ydF9jZmdfd29yayk7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZxZGV2LT5tcGlfaWRjX3dvcmspOworCS8qIElmIHdlJ3JlIG5vdCB0aGUgZG9taW5hbnQgTklDIGZ1bmN0aW9uLAorCSAqIHRoZW4gdGhlcmUgaXMgbm90aGluZyB0byBkby4KKwkgKi8KKwlpZiAoIXFsX293bl9maXJtd2FyZShxZGV2KSkgeworCQluZXRpZl9lcnIocWRldiwgZHJ2LCBxZGV2LT5uZGV2LCAiRG9uJ3Qgb3duIGZpcm13YXJlIVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAoIXFsX2NvcmVfZHVtcChxZGV2LCBxZGV2LT5tcGlfY29yZWR1bXApKSB7CisJCW5ldGlmX2VycihxZGV2LCBkcnYsIHFkZXYtPm5kZXYsICJDb3JlIGlzIGR1bXBlZCFcbiIpOworCQlxZGV2LT5jb3JlX2lzX2R1bXBlZCA9IDE7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhxZGV2LT53b3JrcXVldWUsCisJCQkmcWRldi0+bXBpX2NvcmVfdG9fbG9nLCA1ICogSFopOworCX0KIAlxbF9zb2Z0X3Jlc2V0X21waV9yaXNjKHFkZXYpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjYwNDAuYyBiL2RyaXZlcnMvbmV0L3I2MDQwLmMKaW5kZXggZjAzZTJlNC4uMTVkNTM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjYwNDAuYworKysgYi9kcml2ZXJzL25ldC9yNjA0MC5jCkBAIC05MzgsNyArOTM4LDcgQEAKIAl1MTYgKmFkcnA7CiAJdTE2IHJlZzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCWludCBpOwogCiAJLyogTUFDIEFkZHJlc3MgKi8KQEAgLTk1OCwyNSArOTU4LDI0IEBACiAJfQogCS8qIFRvbyBtYW55IG11bHRpY2FzdCBhZGRyZXNzZXMKIAkgKiBhY2NlcHQgYWxsIHRyYWZmaWMgKi8KLQllbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IE1DQVNUX01BWCkgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKQorCWVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IE1DQVNUX01BWCkgfHwKKwkJIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkKIAkJcmVnIHw9IDB4MDAyMDsKIAogCWlvd3JpdGUxNihyZWcsIGlvYWRkcik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbHAtPmxvY2ssIGZsYWdzKTsKIAogCS8qIEJ1aWxkIHRoZSBoYXNoIHRhYmxlICovCi0JaWYgKGRldi0+bWNfY291bnQgPiBNQ0FTVF9NQVgpIHsKKwlpZiAobmV0ZGV2X21jX2NvdW50KGRldikgPiBNQ0FTVF9NQVgpIHsKIAkJdTE2IGhhc2hfdGFibGVbNF07CiAJCXUzMiBjcmM7CiAKIAkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKIAkJCWhhc2hfdGFibGVbaV0gPSAwOwogCi0JCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyspIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKIAkJCWNoYXIgKmFkZHJzID0gZG1pLT5kbWlfYWRkcjsKIAotCQkJZG1pID0gZG1pLT5uZXh0OwotCiAJCQlpZiAoISgqYWRkcnMgJiAxKSkKIAkJCQljb250aW51ZTsKIApAQCAtOTk0LDE3ICs5OTMsMTkgQEAKIAkJaW93cml0ZTE2KGhhc2hfdGFibGVbM10sIGlvYWRkciArIE1BUjMpOwogCX0KIAkvKiBNdWx0aWNhc3QgQWRkcmVzcyAxfjQgY2FzZSAqLwotCWZvciAoaSA9IDAsIGRtaTsgKGkgPCBkZXYtPm1jX2NvdW50KSAmJiAoaSA8IE1DQVNUX01BWCk7IGkrKykgewotCQlhZHJwID0gKHUxNiAqKWRtaS0+ZG1pX2FkZHI7Ci0JCWlvd3JpdGUxNihhZHJwWzBdLCBpb2FkZHIgKyBNSURfMUwgKyA4KmkpOwotCQlpb3dyaXRlMTYoYWRycFsxXSwgaW9hZGRyICsgTUlEXzFNICsgOCppKTsKLQkJaW93cml0ZTE2KGFkcnBbMl0sIGlvYWRkciArIE1JRF8xSCArIDgqaSk7Ci0JCWRtaSA9IGRtaS0+bmV4dDsKLQl9Ci0JZm9yIChpID0gZGV2LT5tY19jb3VudDsgaSA8IE1DQVNUX01BWDsgaSsrKSB7Ci0JCWlvd3JpdGUxNigweGZmZmYsIGlvYWRkciArIE1JRF8wTCArIDgqaSk7Ci0JCWlvd3JpdGUxNigweGZmZmYsIGlvYWRkciArIE1JRF8wTSArIDgqaSk7Ci0JCWlvd3JpdGUxNigweGZmZmYsIGlvYWRkciArIE1JRF8wSCArIDgqaSk7CisJaSA9IDA7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKKwkJaWYgKGkgPCBNQ0FTVF9NQVgpIHsKKwkJCWFkcnAgPSAodTE2ICopIGRtaS0+ZG1pX2FkZHI7CisJCQlpb3dyaXRlMTYoYWRycFswXSwgaW9hZGRyICsgTUlEXzFMICsgOCAqIGkpOworCQkJaW93cml0ZTE2KGFkcnBbMV0sIGlvYWRkciArIE1JRF8xTSArIDggKiBpKTsKKwkJCWlvd3JpdGUxNihhZHJwWzJdLCBpb2FkZHIgKyBNSURfMUggKyA4ICogaSk7CisJCX0gZWxzZSB7CisJCQlpb3dyaXRlMTYoMHhmZmZmLCBpb2FkZHIgKyBNSURfMEwgKyA4ICogaSk7CisJCQlpb3dyaXRlMTYoMHhmZmZmLCBpb2FkZHIgKyBNSURfME0gKyA4ICogaSk7CisJCQlpb3dyaXRlMTYoMHhmZmZmLCBpb2FkZHIgKyBNSURfMEggKyA4ICogaSk7CisJCX0KKwkJaSsrOwogCX0KIH0KIApAQCAtMTIyMiw3ICsxMjIzLDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcjYwNDBfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHI2MDQwX3BjaV90YmwpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JEQywgMHg2MDQwKSB9LAogCXsgMCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcjgxNjkuYyBiL2RyaXZlcnMvbmV0L3I4MTY5LmMKaW5kZXggNjBmOTZjNC4uZGZjMzU3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcjgxNjkuYworKysgYi9kcml2ZXJzL25ldC9yODE2OS5jCkBAIC0xNjgsNyArMTY4LDcgQEAKIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTY4KHN0cnVjdCBuZXRfZGV2aWNlICopOwogc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMDEoc3RydWN0IG5ldF9kZXZpY2UgKik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydGw4MTY5X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShydGw4MTY5X3BjaV90YmwpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssCTB4ODEyOSksIDAsIDAsIFJUTF9DRkdfMCB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssCTB4ODEzNiksIDAsIDAsIFJUTF9DRkdfMiB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssCTB4ODE2NyksIDAsIDAsIFJUTF9DRkdfMCB9LApAQCAtMTg3LDcgKzE4Nyw3IEBACiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcnRsODE2OV9wY2lfdGJsKTsKIAogc3RhdGljIGludCByeF9jb3B5YnJlYWsgPSAyMDA7Ci1zdGF0aWMgaW50IHVzZV9kYWM7CitzdGF0aWMgaW50IHVzZV9kYWMgPSAtMTsKIHN0YXRpYyBzdHJ1Y3QgewogCXUzMiBtc2dfZW5hYmxlOwogfSBkZWJ1ZyA9IHsgLTEgfTsKQEAgLTUxMSw3ICs1MTEsOCBAQAogbW9kdWxlX3BhcmFtKHJ4X2NvcHlicmVhaywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MocnhfY29weWJyZWFrLCAiQ29weSBicmVha3BvaW50IGZvciBjb3B5LW9ubHktdGlueS1mcmFtZXMiKTsKIG1vZHVsZV9wYXJhbSh1c2VfZGFjLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyh1c2VfZGFjLCAiRW5hYmxlIFBDSSBEQUMuIFVuc2FmZSBvbiAzMiBiaXQgUENJIHNsb3QuIik7CitNT0RVTEVfUEFSTV9ERVNDKHVzZV9kYWMsICJFbmFibGUgUENJIERBQy4gLTEgZGVmYXVsdHMgb24gZm9yIFBDSSBFeHByZXNzIG9ubHkuIgorIiBVbnNhZmUgb24gMzIgYml0IFBDSSBzbG90LiIpOwogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBkZWJ1Zy5tc2dfZW5hYmxlLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIHZlcmJvc2l0eSBsZXZlbCAoMD1ub25lLCAuLi4sIDE2PWFsbCkiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKQEAgLTc0NCwxMiArNzQ1LDEwIEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7CiAJaWYgKHRwLT5saW5rX29rKGlvYWRkcikpIHsKIAkJbmV0aWZfY2Fycmllcl9vbihkZXYpOwotCQlpZiAobmV0aWZfbXNnX2lmdXAodHApKQotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBsaW5rIHVwXG4iLCBkZXYtPm5hbWUpOworCQluZXRpZl9pbmZvKHRwLCBpZnVwLCBkZXYsICJsaW5rIHVwXG4iKTsKIAl9IGVsc2UgewotCQlpZiAobmV0aWZfbXNnX2lmZG93bih0cCkpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IGxpbmsgZG93blxuIiwgZGV2LT5uYW1lKTsKIAkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwkJbmV0aWZfaW5mbyh0cCwgaWZkb3duLCBkZXYsICJsaW5rIGRvd25cbiIpOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0cC0+bG9jaywgZmxhZ3MpOwogfQpAQCAtODYyLDExICs4NjEsOCBAQAogCX0gZWxzZSBpZiAoYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkKIAkJUlRMX1czMihUQklDU1IsIHJlZyB8IFRCSU53RW5hYmxlIHwgVEJJTndSZXN0YXJ0KTsKIAllbHNlIHsKLQkJaWYgKG5ldGlmX21zZ19saW5rKHRwKSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIKLQkJCSAgICAgICAiaW5jb3JyZWN0IHNwZWVkIHNldHRpbmcgcmVmdXNlZCBpbiBUQkkgbW9kZVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOwotCQl9CisJCW5ldGlmX3dhcm4odHAsIGxpbmssIGRldiwKKwkJCSAgICJpbmNvcnJlY3Qgc3BlZWQgc2V0dGluZyByZWZ1c2VkIGluIFRCSSBtb2RlXG4iKTsKIAkJcmV0ID0gLUVPUE5PVFNVUFA7CiAJfQogCkBAIC05MDEsOSArODk3LDkgQEAKIAkJICAgICh0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8xNSkgJiYKIAkJICAgICh0cC0+bWFjX3ZlcnNpb24gIT0gUlRMX0dJR0FfTUFDX1ZFUl8xNikpIHsKIAkJCWdpZ2FfY3RybCB8PSBBRFZFUlRJU0VfMTAwMEZVTEwgfCBBRFZFUlRJU0VfMTAwMEhBTEY7Ci0JCX0gZWxzZSBpZiAobmV0aWZfbXNnX2xpbmsodHApKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogUEhZIGRvZXMgbm90IHN1cHBvcnQgMTAwME1icHMuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCX0gZWxzZSB7CisJCQluZXRpZl9pbmZvKHRwLCBsaW5rLCBkZXYsCisJCQkJICAgIlBIWSBkb2VzIG5vdCBzdXBwb3J0IDEwMDBNYnBzXG4iKTsKIAkJfQogCiAJCWJtY3IgPSBCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQ7CkBAIC0yNzA1LDggKzI3MDEsNyBAQAogCWlmICh0cC0+bGlua19vayhpb2FkZHIpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQlpZiAobmV0aWZfbXNnX2xpbmsodHApKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogUEhZIHJlc2V0IHVudGlsIGxpbmsgdXBcbiIsIGRldi0+bmFtZSk7CisJbmV0aWZfd2Fybih0cCwgbGluaywgZGV2LCAiUEhZIHJlc2V0IHVudGlsIGxpbmsgdXBcbiIpOwogCiAJdHAtPnBoeV9yZXNldF9lbmFibGUoaW9hZGRyKTsKIApAQCAtMjc3Niw4ICsyNzcxLDcgQEAKIAkJCXJldHVybjsKIAkJbXNsZWVwKDEpOwogCX0KLQlpZiAobmV0aWZfbXNnX2xpbmsodHApKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQSFkgcmVzZXQgZmFpbGVkLlxuIiwgZGV2LT5uYW1lKTsKKwluZXRpZl9lcnIodHAsIGxpbmssIGRldiwgIlBIWSByZXNldCBmYWlsZWRcbiIpOwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcGh5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQpAQCAtMjgxMSw4ICsyODA1LDggQEAKIAkgKi8KIAlydGw4MTY5X3NldF9zcGVlZChkZXYsIEFVVE9ORUdfRU5BQkxFLCBTUEVFRF8xMDAwLCBEVVBMRVhfRlVMTCk7CiAKLQlpZiAoKFJUTF9SOChQSFlzdGF0dXMpICYgVEJJX0VuYWJsZSkgJiYgbmV0aWZfbXNnX2xpbmsodHApKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IFRCSSBhdXRvLW5lZ290aWF0aW5nXG4iLCBkZXYtPm5hbWUpOworCWlmIChSVExfUjgoUEhZc3RhdHVzKSAmIFRCSV9FbmFibGUpCisJCW5ldGlmX2luZm8odHAsIGxpbmssIGRldiwgIlRCSSBhdXRvLW5lZ290aWF0aW5nXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgcnRsX3Jhcl9zZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHU4ICphZGRyKQpAQCAtMjk4MCw2ICsyOTc0LDcgQEAKIAl2b2lkIF9faW9tZW0gKmlvYWRkcjsKIAl1bnNpZ25lZCBpbnQgaTsKIAlpbnQgcmM7CisJaW50IHRoaXNfdXNlX2RhYyA9IHVzZV9kYWM7CiAKIAlpZiAobmV0aWZfbXNnX2RydigmZGVidWcpKSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzIEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyICVzIGxvYWRlZFxuIiwKQEAgLTMwMTIsOCArMzAwNyw3IEBACiAJLyogZW5hYmxlIGRldmljZSAoaW5jbC4gUENJIFBNIHdha2V1cCBhbmQgaG90cGx1ZyBzZXR1cCkgKi8KIAlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChyYyA8IDApIHsKLQkJaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkpCi0JCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJlbmFibGUgZmFpbHVyZVxuIik7CisJCW5ldGlmX2Vycih0cCwgcHJvYmUsIGRldiwgImVuYWJsZSBmYWlsdXJlXG4iKTsKIAkJZ290byBlcnJfb3V0X2ZyZWVfZGV2XzE7CiAJfQogCkBAIC0zMDIzLDQ1ICszMDE3LDQ2IEBACiAKIAkvKiBtYWtlIHN1cmUgUENJIGJhc2UgYWRkciAxIGlzIE1NSU8gKi8KIAlpZiAoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgcmVnaW9uKSAmIElPUkVTT1VSQ0VfTUVNKSkgewotCQlpZiAobmV0aWZfbXNnX3Byb2JlKHRwKSkgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJCSJyZWdpb24gIyVkIG5vdCBhbiBNTUlPIHJlc291cmNlLCBhYm9ydGluZ1xuIiwKLQkJCQlyZWdpb24pOwotCQl9CisJCW5ldGlmX2Vycih0cCwgcHJvYmUsIGRldiwKKwkJCSAgInJlZ2lvbiAjJWQgbm90IGFuIE1NSU8gcmVzb3VyY2UsIGFib3J0aW5nXG4iLAorCQkJICByZWdpb24pOwogCQlyYyA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9td2lfMzsKIAl9CiAKIAkvKiBjaGVjayBmb3Igd2VpcmQvYnJva2VuIFBDSSByZWdpb24gcmVwb3J0aW5nICovCiAJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgcmVnaW9uKSA8IFI4MTY5X1JFR1NfU0laRSkgewotCQlpZiAobmV0aWZfbXNnX3Byb2JlKHRwKSkgewotCQkJZGV2X2VycigmcGRldi0+ZGV2LAotCQkJCSJJbnZhbGlkIFBDSSByZWdpb24gc2l6ZShzKSwgYWJvcnRpbmdcbiIpOwotCQl9CisJCW5ldGlmX2Vycih0cCwgcHJvYmUsIGRldiwKKwkJCSAgIkludmFsaWQgUENJIHJlZ2lvbiBzaXplKHMpLCBhYm9ydGluZ1xuIik7CiAJCXJjID0gLUVOT0RFVjsKIAkJZ290byBlcnJfb3V0X213aV8zOwogCX0KIAogCXJjID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBNT0RVTEVOQU1FKTsKIAlpZiAocmMgPCAwKSB7Ci0JCWlmIChuZXRpZl9tc2dfcHJvYmUodHApKQotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY291bGQgbm90IHJlcXVlc3QgcmVnaW9ucy5cbiIpOworCQluZXRpZl9lcnIodHAsIHByb2JlLCBkZXYsICJjb3VsZCBub3QgcmVxdWVzdCByZWdpb25zXG4iKTsKIAkJZ290byBlcnJfb3V0X213aV8zOwogCX0KIAogCXRwLT5jcF9jbWQgPSBQQ0lNdWxSVyB8IFJ4Q2hrU3VtOwogCisJdHAtPnBjaWVfY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJaWYgKCF0cC0+cGNpZV9jYXApCisJCW5ldGlmX2luZm8odHAsIHByb2JlLCBkZXYsICJubyBQQ0kgRXhwcmVzcyBjYXBhYmlsaXR5XG4iKTsKKworCWlmICh0aGlzX3VzZV9kYWMgPCAwKQorCQl0aGlzX3VzZV9kYWMgPSB0cC0+cGNpZV9jYXAgIT0gMDsKKwogCWlmICgoc2l6ZW9mKGRtYV9hZGRyX3QpID4gNCkgJiYKLQkgICAgIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkgJiYgdXNlX2RhYykgeworCSAgICB0aGlzX3VzZV9kYWMgJiYKKwkgICAgIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkpIHsKKwkJbmV0aWZfaW5mbyh0cCwgcHJvYmUsIGRldiwgInVzaW5nIDY0LWJpdCBETUFcbiIpOwogCQl0cC0+Y3BfY21kIHw9IFBDSURBQzsKIAkJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAJfSBlbHNlIHsKIAkJcmMgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOwogCQlpZiAocmMgPCAwKSB7Ci0JCQlpZiAobmV0aWZfbXNnX3Byb2JlKHRwKSkgewotCQkJCWRldl9lcnIoJnBkZXYtPmRldiwKLQkJCQkJIkRNQSBjb25maWd1cmF0aW9uIGZhaWxlZC5cbiIpOwotCQkJfQorCQkJbmV0aWZfZXJyKHRwLCBwcm9iZSwgZGV2LCAiRE1BIGNvbmZpZ3VyYXRpb24gZmFpbGVkXG4iKTsKIAkJCWdvdG8gZXJyX291dF9mcmVlX3Jlc180OwogCQl9CiAJfQpAQCAtMzA2OSwxNiArMzA2NCwxMSBAQAogCS8qIGlvcmVtYXAgTU1JTyByZWdpb24gKi8KIAlpb2FkZHIgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCByZWdpb24pLCBSODE2OV9SRUdTX1NJWkUpOwogCWlmICghaW9hZGRyKSB7Ci0JCWlmIChuZXRpZl9tc2dfcHJvYmUodHApKQotCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlbWFwIE1NSU8sIGFib3J0aW5nXG4iKTsKKwkJbmV0aWZfZXJyKHRwLCBwcm9iZSwgZGV2LCAiY2Fubm90IHJlbWFwIE1NSU8sIGFib3J0aW5nXG4iKTsKIAkJcmMgPSAtRUlPOwogCQlnb3RvIGVycl9vdXRfZnJlZV9yZXNfNDsKIAl9CiAKLQl0cC0+cGNpZV9jYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfRVhQKTsKLQlpZiAoIXRwLT5wY2llX2NhcCAmJiBuZXRpZl9tc2dfcHJvYmUodHApKQotCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAibm8gUENJIEV4cHJlc3MgY2FwYWJpbGl0eVxuIik7Ci0KIAlSVExfVzE2KEludHJNYXNrLCAweDAwMDApOwogCiAJLyogU29mdCByZXNldCB0aGUgY2hpcC4gKi8KQEAgLTMxMDAsMTAgKzMwOTAsOCBAQAogCiAJLyogVXNlIGFwcHJvcHJpYXRlIGRlZmF1bHQgaWYgdW5rbm93biAqLwogCWlmICh0cC0+bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX05PTkUpIHsKLQkJaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkpIHsKLQkJCWRldl9ub3RpY2UoJnBkZXYtPmRldiwKLQkJCQkgICAidW5rbm93biBNQUMsIHVzaW5nIGZhbWlseSBkZWZhdWx0XG4iKTsKLQkJfQorCQluZXRpZl9ub3RpY2UodHAsIHByb2JlLCBkZXYsCisJCQkgICAgICJ1bmtub3duIE1BQywgdXNpbmcgZmFtaWx5IGRlZmF1bHRcbiIpOwogCQl0cC0+bWFjX3ZlcnNpb24gPSBjZmctPmRlZmF1bHRfdmVyOwogCX0KIApAQCAtMzE4NSwxOSArMzE3MywxMCBAQAogCiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRldik7CiAKLQlpZiAobmV0aWZfbXNnX3Byb2JlKHRwKSkgewotCQl1MzIgeGlkID0gUlRMX1IzMihUeENvbmZpZykgJiAweDljZjBmOGZmOwotCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBhdCAweCVseCwgIgotCQkgICAgICAgIiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4OiUyLjJ4LCAiCi0JCSAgICAgICAiWElEICUwOHggSVJRICVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLAotCQkgICAgICAgcnRsX2NoaXBfaW5mb1t0cC0+Y2hpcHNldF0ubmFtZSwKLQkJICAgICAgIGRldi0+YmFzZV9hZGRyLAotCQkgICAgICAgZGV2LT5kZXZfYWRkclswXSwgZGV2LT5kZXZfYWRkclsxXSwKLQkJICAgICAgIGRldi0+ZGV2X2FkZHJbMl0sIGRldi0+ZGV2X2FkZHJbM10sCi0JCSAgICAgICBkZXYtPmRldl9hZGRyWzRdLCBkZXYtPmRldl9hZGRyWzVdLCB4aWQsIGRldi0+aXJxKTsKLQl9CisJbmV0aWZfaW5mbyh0cCwgcHJvYmUsIGRldiwgIiVzIGF0IDB4JWx4LCAlcE0sIFhJRCAlMDh4IElSUSAlZFxuIiwKKwkJICAgcnRsX2NoaXBfaW5mb1t0cC0+Y2hpcHNldF0ubmFtZSwKKwkJICAgZGV2LT5iYXNlX2FkZHIsIGRldi0+ZGV2X2FkZHIsCisJCSAgICh1MzIpKFJUTF9SMzIoVHhDb25maWcpICYgMHg5Y2YwZjhmZiksIGRldi0+aXJxKTsKIAogCXJ0bDgxNjlfaW5pdF9waHkoZGV2LCB0cCk7CiAKQEAgLTQxMzYsMTAgKzQxMTUsMTAgQEAKIAogCXJldCA9IHJ0bDgxNjlfb3BlbihkZXYpOwogCWlmICh1bmxpa2VseShyZXQgPCAwKSkgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpICYmIG5ldGlmX21zZ19kcnYodHApKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogcmVpbml0IGZhaWx1cmUgKHN0YXR1cyA9ICVkKS4iCi0JCQkgICAgICAgIiBSZXNjaGVkdWxpbmcuXG4iLCBkZXYtPm5hbWUsIHJldCk7Ci0JCX0KKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCW5ldGlmX2Vycih0cCwgZHJ2LCBkZXYsCisJCQkJICAicmVpbml0IGZhaWx1cmUgKHN0YXR1cyA9ICVkKS4gUmVzY2hlZHVsaW5nXG4iLAorCQkJCSAgcmV0KTsKIAkJcnRsODE2OV9zY2hlZHVsZV93b3JrKGRldiwgcnRsODE2OV9yZWluaXRfdGFzayk7CiAJfQogCkBAIC00MTY5LDEwICs0MTQ4LDggQEAKIAkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCQlydGw4MTY5X2NoZWNrX2xpbmtfc3RhdHVzKGRldiwgdHAsIHRwLT5tbWlvX2FkZHIpOwogCX0gZWxzZSB7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkgJiYgbmV0aWZfbXNnX2ludHIodHApKSB7Ci0JCQlwcmludGsoS0VSTl9FTUVSRyBQRlggIiVzOiBSeCBidWZmZXJzIHNob3J0YWdlXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCX0KKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCW5ldGlmX2VtZXJnKHRwLCBpbnRyLCBkZXYsICJSeCBidWZmZXJzIHNob3J0YWdlXG4iKTsKIAkJcnRsODE2OV9zY2hlZHVsZV93b3JrKGRldiwgcnRsODE2OV9yZXNldF90YXNrKTsKIAl9CiAKQEAgLTQyNjAsMTEgKzQyMzcsNyBAQAogCXUzMiBvcHRzMTsKIAogCWlmICh1bmxpa2VseShUWF9CVUZGU19BVkFJTCh0cCkgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKSkgewotCQlpZiAobmV0aWZfbXNnX2Rydih0cCkpIHsKLQkJCXByaW50ayhLRVJOX0VSUgotCQkJICAgICAgICIlczogQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJfQorCQluZXRpZl9lcnIodHAsIGRydiwgZGV2LCAiQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIpOwogCQlnb3RvIGVycl9zdG9wOwogCX0KIApAQCAtNDMyNiwxMSArNDI5OSw4IEBACiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsICZwY2lfY21kKTsKIAlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfU1RBVFVTLCAmcGNpX3N0YXR1cyk7CiAKLQlpZiAobmV0aWZfbXNnX2ludHIodHApKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIiVzOiBQQ0kgZXJyb3IgKGNtZCA9IDB4JTA0eCwgc3RhdHVzID0gMHglMDR4KS5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHBjaV9jbWQsIHBjaV9zdGF0dXMpOwotCX0KKwluZXRpZl9lcnIodHAsIGludHIsIGRldiwgIlBDSSBlcnJvciAoY21kID0gMHglMDR4LCBzdGF0dXMgPSAweCUwNHgpXG4iLAorCQkgIHBjaV9jbWQsIHBjaV9zdGF0dXMpOwogCiAJLyoKIAkgKiBUaGUgcmVjb3Zlcnkgc2VxdWVuY2UgYmVsb3cgYWRtaXRzIGEgdmVyeSBlbGFib3JhdGVkIGV4cGxhbmF0aW9uOgpAQCAtNDM1NCw4ICs0MzI0LDcgQEAKIAogCS8qIFRoZSBpbmZhbW91cyBEQUMgZipja3VwIG9ubHkgaGFwcGVucyBhdCBib290IHRpbWUgKi8KIAlpZiAoKHRwLT5jcF9jbWQgJiBQQ0lEQUMpICYmICF0cC0+ZGlydHlfcnggJiYgIXRwLT5jdXJfcngpIHsKLQkJaWYgKG5ldGlmX21zZ19pbnRyKHRwKSkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBkaXNhYmxpbmcgUENJIERBQy5cbiIsIGRldi0+bmFtZSk7CisJCW5ldGlmX2luZm8odHAsIGludHIsIGRldiwgImRpc2FibGluZyBQQ0kgREFDXG4iKTsKIAkJdHAtPmNwX2NtZCAmPSB+UENJREFDOwogCQlSVExfVzE2KENQbHVzQ21kLCB0cC0+Y3BfY21kKTsKIAkJZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZfRl9ISUdIRE1BOwpAQCAtNDQ4MiwxMSArNDQ1MSw4IEBACiAJCWlmIChzdGF0dXMgJiBEZXNjT3duKQogCQkJYnJlYWs7CiAJCWlmICh1bmxpa2VseShzdGF0dXMgJiBSeFJFUykpIHsKLQkJCWlmIChuZXRpZl9tc2dfcnhfZXJyKHRwKSkgewotCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkgICAgICAgIiVzOiBSeCBFUlJPUi4gc3RhdHVzID0gJTA4eFxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOwotCQkJfQorCQkJbmV0aWZfaW5mbyh0cCwgcnhfZXJyLCBkZXYsICJSeCBFUlJPUi4gc3RhdHVzID0gJTA4eFxuIiwKKwkJCQkgICBzdGF0dXMpOwogCQkJZGV2LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCWlmIChzdGF0dXMgJiAoUnhSV1QgfCBSeFJVTlQpKQogCQkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwpAQCAtNDU0OSw4ICs0NTE1LDggQEAKIAl0cC0+Y3VyX3J4ID0gY3VyX3J4OwogCiAJZGVsdGEgPSBydGw4MTY5X3J4X2ZpbGwodHAsIGRldiwgdHAtPmRpcnR5X3J4LCB0cC0+Y3VyX3J4KTsKLQlpZiAoIWRlbHRhICYmIGNvdW50ICYmIG5ldGlmX21zZ19pbnRyKHRwKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIFJ4IGJ1ZmZlciBhbGxvY2F0ZWRcbiIsIGRldi0+bmFtZSk7CisJaWYgKCFkZWx0YSAmJiBjb3VudCkKKwkJbmV0aWZfaW5mbyh0cCwgaW50ciwgZGV2LCAibm8gUnggYnVmZmVyIGFsbG9jYXRlZFxuIik7CiAJdHAtPmRpcnR5X3J4ICs9IGRlbHRhOwogCiAJLyoKQEAgLTQ1NjAsOCArNDUyNiw4IEBACiAJICogICBhZnRlciByZWZpbGwgPwogCSAqIC0gaG93IGRvIG90aGVycyBkcml2ZXIgaGFuZGxlIHRoaXMgY29uZGl0aW9uIChVaCBvaC4uLikuCiAJICovCi0JaWYgKCh0cC0+ZGlydHlfcnggKyBOVU1fUlhfREVTQyA9PSB0cC0+Y3VyX3J4KSAmJiBuZXRpZl9tc2dfaW50cih0cCkpCi0JCXByaW50ayhLRVJOX0VNRVJHICIlczogUnggYnVmZmVycyBleGhhdXN0ZWRcbiIsIGRldi0+bmFtZSk7CisJaWYgKHRwLT5kaXJ0eV9yeCArIE5VTV9SWF9ERVNDID09IHRwLT5jdXJfcngpCisJCW5ldGlmX2VtZXJnKHRwLCBpbnRyLCBkZXYsICJSeCBidWZmZXJzIGV4aGF1c3RlZFxuIik7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC00NjE2LDEwICs0NTgyLDkgQEAKIAogCQkJaWYgKGxpa2VseShuYXBpX3NjaGVkdWxlX3ByZXAoJnRwLT5uYXBpKSkpCiAJCQkJX19uYXBpX3NjaGVkdWxlKCZ0cC0+bmFwaSk7Ci0JCQllbHNlIGlmIChuZXRpZl9tc2dfaW50cih0cCkpIHsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogaW50ZXJydXB0ICUwNHggaW4gcG9sbFxuIiwKLQkJCQlkZXYtPm5hbWUsIHN0YXR1cyk7Ci0JCQl9CisJCQllbHNlCisJCQkJbmV0aWZfaW5mbyh0cCwgaW50ciwgZGV2LAorCQkJCQkgICAiaW50ZXJydXB0ICUwNHggaW4gcG9sbFxuIiwgc3RhdHVzKTsKIAkJfQogCiAJCS8qIFdlIG9ubHkgZ2V0IGEgbmV3IE1TSSBpbnRlcnJ1cHQgd2hlbiBhbGwgYWN0aXZlIGlycQpAQCAtNDc1NSwyNyArNDcyMCwyMiBAQAogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQkvKiBVbmNvbmRpdGlvbmFsbHkgbG9nIG5ldCB0YXBzLiAqLwotCQlpZiAobmV0aWZfbXNnX2xpbmsodHApKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiBQcm9taXNjdW91cyBtb2RlIGVuYWJsZWQuXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCX0KKwkJbmV0aWZfbm90aWNlKHRwLCBsaW5rLCBkZXYsICJQcm9taXNjdW91cyBtb2RlIGVuYWJsZWRcbiIpOwogCQlyeF9tb2RlID0KIAkJICAgIEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE11bHRpY2FzdCB8IEFjY2VwdE15UGh5cyB8CiAJCSAgICBBY2NlcHRBbGxQaHlzOwogCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAweGZmZmZmZmZmOwotCX0gZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSB8fAorCX0gZWxzZSBpZiAoKG5ldGRldl9tY19jb3VudChkZXYpID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKIAkJICAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCS8qIFRvbyBtYW55IHRvIGZpbHRlciBwZXJmZWN0bHkgLS0gYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCQlyeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXVsdGljYXN0IHwgQWNjZXB0TXlQaHlzOwogCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAweGZmZmZmZmZmOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwotCQl1bnNpZ25lZCBpbnQgaTsKIAogCQlyeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXlQaHlzOwogCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAwOwotCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKLQkJICAgICBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQkJaW50IGJpdF9uciA9IGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgPj4gMjY7CiAJCQltY19maWx0ZXJbYml0X25yID4+IDVdIHw9IDEgPDwgKGJpdF9uciAmIDMxKTsKIAkJCXJ4X21vZGUgfD0gQWNjZXB0TXVsdGljYXN0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcnJ1bm5lci5jIGIvZHJpdmVycy9uZXQvcnJ1bm5lci5jCmluZGV4IDFjMjU3MDkuLjI2NmJhZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3JydW5uZXIuYworKysgYi9kcml2ZXJzL25ldC9ycnVubmVyLmMKQEAgLTE2ODgsNyArMTY4OCw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnJfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHJyX3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9FU1NFTlRJQUwsIFBDSV9ERVZJQ0VfSURfRVNTRU5USUFMX1JPQURSVU5ORVIsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJeyAwLH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3MyaW8uYyBiL2RyaXZlcnMvbmV0L3MyaW8uYwppbmRleCAzYzQ4MzZkLi40M2JjNjZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zMmlvLmMKKysrIGIvZHJpdmVycy9uZXQvczJpby5jCkBAIC01MjMsNyArNTIzLDcgQEAKICAqIFMySU8gZGV2aWNlIHRhYmxlLgogICogVGhpcyB0YWJsZSBsaXN0cyBhbGwgdGhlIGRldmljZXMgdGhhdCB0aGlzIGRyaXZlciBzdXBwb3J0cy4KICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHMyaW9fdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzMmlvX3RibCkgPSB7CiAJe1BDSV9WRU5ET1JfSURfUzJJTywgUENJX0RFVklDRV9JRF9TMklPX1dJTiwKIAkgUENJX0FOWV9JRCwgUENJX0FOWV9JRH0sCiAJe1BDSV9WRU5ET1JfSURfUzJJTywgUENJX0RFVklDRV9JRF9TMklPX1VOSSwKQEAgLTUwNTUsOCArNTA1NSw4IEBACiAJfQogCiAJLyogIFVwZGF0ZSBpbmRpdmlkdWFsIE1fQ0FTVCBhZGRyZXNzIGxpc3QgKi8KLQlpZiAoKCFzcC0+bV9jYXN0X2ZsZykgJiYgZGV2LT5tY19jb3VudCkgewotCQlpZiAoZGV2LT5tY19jb3VudCA+CisJaWYgKCghc3AtPm1fY2FzdF9mbGcpICYmIG5ldGRldl9tY19jb3VudChkZXYpKSB7CisJCWlmIChuZXRkZXZfbWNfY291bnQoZGV2KSA+CiAJCSAgICAoY29uZmlnLT5tYXhfbWNfYWRkciAtIGNvbmZpZy0+bWF4X21hY19hZGRyKSkgewogCQkJREJHX1BSSU5UKEVSUl9EQkcsCiAJCQkJICAiJXM6IE5vIG1vcmUgUnggZmlsdGVycyBjYW4gYmUgYWRkZWQgLSAiCkBAIC01MDY2LDcgKzUwNjYsNyBAQAogCQl9CiAKIAkJcHJldl9jbnQgPSBzcC0+bWNfYWRkcl9jb3VudDsKLQkJc3AtPm1jX2FkZHJfY291bnQgPSBkZXYtPm1jX2NvdW50OworCQlzcC0+bWNfYWRkcl9jb3VudCA9IG5ldGRldl9tY19jb3VudChkZXYpOwogCiAJCS8qIENsZWFyIG91dCB0aGUgcHJldmlvdXMgbGlzdCBvZiBNYyBpbiB0aGUgSC9XLiAqLwogCQlmb3IgKGkgPSAwOyBpIDwgcHJldl9jbnQ7IGkrKykgewpAQCAtNTA5Miw4ICs1MDkyLDggQEAKIAkJfQogCiAJCS8qIENyZWF0ZSB0aGUgbmV3IFJ4IGZpbHRlciBsaXN0IGFuZCB1cGRhdGUgdGhlIHNhbWUgaW4gSC9XLiAqLwotCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IGkgPCBkZXYtPm1jX2NvdW50OwotCQkgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCWkgPSAwOworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQkJbWVtY3B5KHNwLT51c3JfYWRkcnNbaV0uYWRkciwgbWNsaXN0LT5kbWlfYWRkciwKIAkJCSAgICAgICBFVEhfQUxFTik7CiAJCQltYWNfYWRkciA9IDA7CkBAIC01MTIxLDYgKzUxMjEsNyBAQAogCQkJCQkgIGRldi0+bmFtZSk7CiAJCQkJcmV0dXJuOwogCQkJfQorCQkJaSsrOwogCQl9CiAJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jIGIvZHJpdmVycy9uZXQvc2IxMjUwLW1hYy5jCmluZGV4IDU2NGQ0ZDcuLjk5NDRlNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NiMTI1MC1tYWMuYworKysgYi9kcml2ZXJzL25ldC9zYjEyNTAtbWFjLmMKQEAgLTIxNjEsMTMgKzIxNjEsMTMgQEAKIAkgKiBYWFggaWYgdGhlIHRhYmxlIG92ZXJmbG93cyAqLwogCiAJaWR4ID0gMTsJCS8qIHNraXAgc3RhdGlvbiBhZGRyZXNzICovCi0JbWNsaXN0ID0gZGV2LT5tY19saXN0OwotCXdoaWxlIChtY2xpc3QgJiYgKGlkeCA8IE1BQ19BRERSX0NPVU5UKSkgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CisJCWlmIChpZHggPT0gTUFDX0FERFJfQ09VTlQpCisJCQlicmVhazsKIAkJcmVnID0gc2JtYWNfYWRkcjJyZWcobWNsaXN0LT5kbWlfYWRkcik7CiAJCXBvcnQgPSBzYy0+c2JtX2Jhc2UgKyBSX01BQ19BRERSX0JBU0UrKGlkeCAqIHNpemVvZih1aW50NjRfdCkpOwogCQlfX3Jhd193cml0ZXEocmVnLCBwb3J0KTsKIAkJaWR4Kys7Ci0JCW1jbGlzdCA9IG1jbGlzdC0+bmV4dDsKIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2M5MjAzMS5jIGIvZHJpdmVycy9uZXQvc2M5MjAzMS5jCmluZGV4IGUzNTA1MDMuLmQ4N2M0NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NjOTIwMzEuYworKysgYi9kcml2ZXJzL25ldC9zYzkyMDMxLmMKQEAgLTQyOSwxMyArNDI5LDEzIEBACiAJdTMyIG1hcjAgPSAwLCBtYXIxID0gMDsKIAogCWlmICgoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB8fAotCSAgICBkZXYtPm1jX2NvdW50ID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCB8fAorCSAgICBuZXRkZXZfbWNfY291bnQoZGV2KSA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQgfHwKIAkgICAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKQogCQltYXIwID0gbWFyMSA9IDB4ZmZmZmZmZmY7CiAJZWxzZSBpZiAoZGV2LT5mbGFncyAmIElGRl9NVUxUSUNBU1QpIHsKIAkJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0OwogCi0JCWZvciAobWNfbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNfbGlzdDsgbWNfbGlzdCA9IG1jX2xpc3QtPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfbGlzdCwgZGV2KSB7CiAJCQl1MzIgY3JjOwogCQkJdW5zaWduZWQgYml0ID0gMDsKIApAQCAtMTU4OSw3ICsxNTg5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNjOTIwMzFfcGNpX2RldmljZV9pZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc2M5MjAzMV9wY2lfZGV2aWNlX2lkX3RhYmxlKSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TSUxBTiwgMHgyMDMxKSB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NJTEFOLCAweDgxMzkpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTA4OCwgMHgyMDMxKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5jIGIvZHJpdmVycy9uZXQvc2ZjL2VmeC5jCmluZGV4IDQ2OTk3ZTEuLjg4ZjJmYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9lZnguYworKysgYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmMKQEAgLTE2MDIsMTEgKzE2MDIsMTAgQEAKIHN0YXRpYyB2b2lkIGVmeF9zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldF9kZXYpCiB7CiAJc3RydWN0IGVmeF9uaWMgKmVmeCA9IG5ldGRldl9wcml2KG5ldF9kZXYpOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdCA9IG5ldF9kZXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0OwogCXVuaW9uIGVmeF9tdWx0aWNhc3RfaGFzaCAqbWNfaGFzaCA9ICZlZngtPm11bHRpY2FzdF9oYXNoOwogCXUzMiBjcmM7CiAJaW50IGJpdDsKLQlpbnQgaTsKIAogCWVmeC0+cHJvbWlzY3VvdXMgPSAhIShuZXRfZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKTsKIApAQCAtMTYxNSwxMSArMTYxNCwxMCBAQAogCQltZW1zZXQobWNfaGFzaCwgMHhmZiwgc2l6ZW9mKCptY19oYXNoKSk7CiAJfSBlbHNlIHsKIAkJbWVtc2V0KG1jX2hhc2gsIDB4MDAsIHNpemVvZigqbWNfaGFzaCkpOwotCQlmb3IgKGkgPSAwOyBpIDwgbmV0X2Rldi0+bWNfY291bnQ7IGkrKykgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19saXN0LCBuZXRfZGV2KSB7CiAJCQljcmMgPSBldGhlcl9jcmNfbGUoRVRIX0FMRU4sIG1jX2xpc3QtPmRtaV9hZGRyKTsKIAkJCWJpdCA9IGNyYyAmIChFRlhfTUNBU1RfSEFTSF9FTlRSSUVTIC0gMSk7CiAJCQlzZXRfYml0X2xlKGJpdCwgbWNfaGFzaC0+Ynl0ZSk7Ci0JCQltY19saXN0ID0gbWNfbGlzdC0+bmV4dDsKIAkJfQogCiAJCS8qIEJyb2FkY2FzdCBwYWNrZXRzIGdvIHRocm91Z2ggdGhlIG11bHRpY2FzdCBoYXNoIGZpbHRlci4KQEAgLTE5NDAsNyArMTkzOCw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIFBDSSBkZXZpY2UgSUQgdGFibGUgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBlZnhfcGNpX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShlZnhfcGNpX3RhYmxlKSA9IHsKIAl7UENJX0RFVklDRShFRlhfVkVORElEX1NGQywgRkFMQ09OX0FfUF9ERVZJRCksCiAJIC5kcml2ZXJfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSAmZmFsY29uX2ExX25pY190eXBlfSwKIAl7UENJX0RFVklDRShFRlhfVkVORElEX1NGQywgRkFMQ09OX0JfUF9ERVZJRCksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZWZ4LmggYi9kcml2ZXJzL25ldC9zZmMvZWZ4LmgKaW5kZXggYTYxNWFjMC4uN2VmZjBhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL2VmeC5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9lZnguaApAQCAtNzksOCArNzksNiBAQAogCiAvKiBHbG9iYWwgKi8KIGV4dGVybiB2b2lkIGVmeF9zY2hlZHVsZV9yZXNldChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBlbnVtIHJlc2V0X3R5cGUgdHlwZSk7Ci1leHRlcm4gdm9pZCBlZnhfc3VzcGVuZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4KTsKLWV4dGVybiB2b2lkIGVmeF9yZXN1bWUoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiBleHRlcm4gdm9pZCBlZnhfaW5pdF9pcnFfbW9kZXJhdGlvbihzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBpbnQgdHhfdXNlY3MsCiAJCQkJICAgIGludCByeF91c2VjcywgYm9vbCByeF9hZGFwdGl2ZSk7CiBleHRlcm4gaW50IGVmeF9yZXF1ZXN0X3Bvd2VyKHN0cnVjdCBlZnhfbmljICplZngsIGludCBtdywgY29uc3QgY2hhciAqbmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvc2ZjL2V0aHRvb2wuYwppbmRleCA2YzBiYmVkLi5kOWY5YzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZXRodG9vbC5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9ldGh0b29sLmMKQEAgLTE5Niw3ICsxOTYsNyBAQAogCWVmeC0+cGh5X29wLT5nZXRfc2V0dGluZ3MoZWZ4LCBlY21kKTsKIAltdXRleF91bmxvY2soJmVmeC0+bWFjX2xvY2spOwogCi0JLyogRmFsY29uIEdNQUMgZG9lcyBub3Qgc3VwcG9ydCAxMDAwTWJwcyBIRCAqLworCS8qIEdNQUMgZG9lcyBub3Qgc3VwcG9ydCAxMDAwTWJwcyBIRCAqLwogCWVjbWQtPnN1cHBvcnRlZCAmPSB+U1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmOwogCS8qIEJvdGggTUFDcyBzdXBwb3J0IHBhdXNlIGZyYW1lcyAoYmlkaXJlY3Rpb25hbCBhbmQgcmVzcG9uZC1vbmx5KSAqLwogCWVjbWQtPnN1cHBvcnRlZCB8PSBTVVBQT1JURURfUGF1c2UgfCBTVVBQT1JURURfQXN5bV9QYXVzZTsKQEAgLTIxNiw3ICsyMTYsNyBAQAogCXN0cnVjdCBlZnhfbmljICplZnggPSBuZXRkZXZfcHJpdihuZXRfZGV2KTsKIAlpbnQgcmM7CiAKLQkvKiBGYWxjb24gR01BQyBkb2VzIG5vdCBzdXBwb3J0IDEwMDBNYnBzIEhEICovCisJLyogR01BQyBkb2VzIG5vdCBzdXBwb3J0IDEwMDBNYnBzIEhEICovCiAJaWYgKGVjbWQtPnNwZWVkID09IFNQRUVEXzEwMDAgJiYgZWNtZC0+ZHVwbGV4ICE9IERVUExFWF9GVUxMKSB7CiAJCUVGWF9MT0coZWZ4LCAicmVqZWN0aW5nIHVuc3VwcG9ydGVkIDEwMDBNYnBzIEhEIgogCQkJIiBzZXR0aW5nXG4iKTsKQEAgLTM0Miw4ICszNDIsOCBAQAogCXVuc2lnbmVkIGludCBuID0gMCwgaTsKIAllbnVtIGVmeF9sb29wYmFja19tb2RlIG1vZGU7CiAKLQllZnhfZmlsbF90ZXN0KG4rKywgc3RyaW5ncywgZGF0YSwgJnRlc3RzLT5tZGlvLAotCQkgICAgICAiY29yZSIsIDAsICJtZGlvIiwgTlVMTCk7CisJZWZ4X2ZpbGxfdGVzdChuKyssIHN0cmluZ3MsIGRhdGEsICZ0ZXN0cy0+cGh5X2FsaXZlLAorCQkgICAgICAicGh5IiwgMCwgImFsaXZlIiwgTlVMTCk7CiAJZWZ4X2ZpbGxfdGVzdChuKyssIHN0cmluZ3MsIGRhdGEsICZ0ZXN0cy0+bnZyYW0sCiAJCSAgICAgICJjb3JlIiwgMCwgIm52cmFtIiwgTlVMTCk7CiAJZWZ4X2ZpbGxfdGVzdChuKyssIHN0cmluZ3MsIGRhdGEsICZ0ZXN0cy0+aW50ZXJydXB0LApAQCAtMzc5LDcgKzM3OSw3IEBACiAJCQlpZiAobmFtZSA9PSBOVUxMKQogCQkJCWJyZWFrOwogCi0JCQllZnhfZmlsbF90ZXN0KG4rKywgc3RyaW5ncywgZGF0YSwgJnRlc3RzLT5waHlbaV0sCisJCQllZnhfZmlsbF90ZXN0KG4rKywgc3RyaW5ncywgZGF0YSwgJnRlc3RzLT5waHlfZXh0W2ldLAogCQkJCSAgICAgICJwaHkiLCAwLCBuYW1lLCBOVUxMKTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYyBiL2RyaXZlcnMvbmV0L3NmYy9mYWxjb24uYwppbmRleCA5ZDAwOWM0Li4xYjhkODM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvZmFsY29uLmMKKysrIGIvZHJpdmVycy9uZXQvc2ZjL2ZhbGNvbi5jCkBAIC05MDksNiArOTA5LDggQEAKIAkJZWZ4LT53YW50ZWRfZmMgPSBFRlhfRkNfUlggfCBFRlhfRkNfVFg7CiAJZWxzZQogCQllZngtPndhbnRlZF9mYyA9IEVGWF9GQ19SWDsKKwlpZiAoZWZ4LT5tZGlvLm1tZHMgJiBNRElPX0RFVlNfQU4pCisJCWVmeC0+d2FudGVkX2ZjIHw9IEVGWF9GQ19BVVRPOwogCiAJLyogQWxsb2NhdGUgYnVmZmVyIGZvciBzdGF0cyAqLwogCXJjID0gZWZ4X25pY19hbGxvY19idWZmZXIoZWZ4LCAmZWZ4LT5zdGF0c19idWZmZXIsCkBAIC0xMDA2LDcgKzEwMDgsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGVmeF9uaWNfcmVnaXN0ZXJfdGVzdCBmYWxjb25fYjBfcmVnaXN0ZXJfdGVzdHNbXSA9IHsKIAl7IEZSX0FaX0FEUl9SRUdJT04sCi0JICBFRlhfT1dPUkQzMigweDAwMDFGRkZGLCAweDAwMDFGRkZGLCAweDAwMDFGRkZGLCAweDAwMDFGRkZGKSB9LAorCSAgRUZYX09XT1JEMzIoMHgwMDAzRkZGRiwgMHgwMDAzRkZGRiwgMHgwMDAzRkZGRiwgMHgwMDAzRkZGRikgfSwKIAl7IEZSX0FaX1JYX0NGRywKIAkgIEVGWF9PV09SRDMyKDB4RkZGRkZGRkUsIDB4MDAwMTdGRkYsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDApIH0sCiAJeyBGUl9BWl9UWF9DRkcsCkBAIC0xNzI4LDcgKzE3MzAsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBSZXZpc2lvbi1kZXBlbmRlbnQgYXR0cmlidXRlcyB1c2VkIGJ5IGVmeC5jCisgKiBSZXZpc2lvbi1kZXBlbmRlbnQgYXR0cmlidXRlcyB1c2VkIGJ5IGVmeC5jIGFuZCBuaWMuYwogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbWNkaS5jIGIvZHJpdmVycy9uZXQvc2ZjL21jZGkuYwppbmRleCBmNjZiM2RhLi5jNDg2NjljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbWNkaS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9tY2RpLmMKQEAgLTg5NiwyOSArODk2LDczIEBACiAJcmV0dXJuIHJjOwogfQogCi1pbnQgZWZ4X21jZGlfaGFuZGxlX2Fzc2VydGlvbihzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQorc3RhdGljIGludCBlZnhfbWNkaV9udnJhbV90ZXN0KHN0cnVjdCBlZnhfbmljICplZngsIHVuc2lnbmVkIGludCB0eXBlKQogewotCXVuaW9uIHsKLQkJdTggYXNzZXJ0c1tNQ19DTURfR0VUX0FTU0VSVFNfSU5fTEVOXTsKLQkJdTggcmVib290W01DX0NNRF9SRUJPT1RfSU5fTEVOXTsKLQl9IGluYnVmOwotCXU4IGFzc2VydGlvbltNQ19DTURfR0VUX0FTU0VSVFNfT1VUX0xFTl07CisJdTggaW5idWZbTUNfQ01EX05WUkFNX1RFU1RfSU5fTEVOXTsKKwl1OCBvdXRidWZbTUNfQ01EX05WUkFNX1RFU1RfT1VUX0xFTl07CisJaW50IHJjOworCisJTUNESV9TRVRfRFdPUkQoaW5idWYsIE5WUkFNX1RFU1RfSU5fVFlQRSwgdHlwZSk7CisKKwlyYyA9IGVmeF9tY2RpX3JwYyhlZngsIE1DX0NNRF9OVlJBTV9URVNULCBpbmJ1Ziwgc2l6ZW9mKGluYnVmKSwKKwkJCSAgb3V0YnVmLCBzaXplb2Yob3V0YnVmKSwgTlVMTCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwlzd2l0Y2ggKE1DRElfRFdPUkQob3V0YnVmLCBOVlJBTV9URVNUX09VVF9SRVNVTFQpKSB7CisJY2FzZSBNQ19DTURfTlZSQU1fVEVTVF9QQVNTOgorCWNhc2UgTUNfQ01EX05WUkFNX1RFU1RfTk9UU1VQUDoKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU87CisJfQorfQorCitpbnQgZWZ4X21jZGlfbnZyYW1fdGVzdF9hbGwoc3RydWN0IGVmeF9uaWMgKmVmeCkKK3sKKwl1MzIgbnZyYW1fdHlwZXM7CisJdW5zaWduZWQgaW50IHR5cGU7CisJaW50IHJjOworCisJcmMgPSBlZnhfbWNkaV9udnJhbV90eXBlcyhlZngsICZudnJhbV90eXBlcyk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwl0eXBlID0gMDsKKwl3aGlsZSAobnZyYW1fdHlwZXMgIT0gMCkgeworCQlpZiAobnZyYW1fdHlwZXMgJiAxKSB7CisJCQlyYyA9IGVmeF9tY2RpX252cmFtX3Rlc3QoZWZ4LCB0eXBlKTsKKwkJCWlmIChyYykKKwkJCQlyZXR1cm4gcmM7CisJCX0KKwkJdHlwZSsrOworCQludnJhbV90eXBlcyA+Pj0gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlZnhfbWNkaV9yZWFkX2Fzc2VydGlvbihzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCXU4IGluYnVmW01DX0NNRF9HRVRfQVNTRVJUU19JTl9MRU5dOworCXU4IG91dGJ1ZltNQ19DTURfR0VUX0FTU0VSVFNfT1VUX0xFTl07CiAJdW5zaWduZWQgaW50IGZsYWdzLCBpbmRleCwgb2ZzdDsKIAljb25zdCBjaGFyICpyZWFzb247CiAJc2l6ZV90IG91dGxlbjsKIAlpbnQgcmV0cnk7CiAJaW50IHJjOwogCi0JLyogQ2hlY2sgaWYgdGhlIE1DIGlzIGluIHRoZSBhc3NlcnRpb24gaGFuZGxlciwgcmV0cnlpbmcgdHdpY2UuIE9uY2UKKwkvKiBBdHRlbXB0IHRvIHJlYWQgYW55IHN0b3JlZCBhc3NlcnRpb24gc3RhdGUgYmVmb3JlIHdlIHJlYm9vdAorCSAqIHRoZSBtY2Z3IG91dCBvZiB0aGUgYXNzZXJ0aW9uIGhhbmRsZXIuIFJldHJ5IHR3aWNlLCBvbmNlCiAJICogYmVjYXVzZSBhIGJvb3QtdGltZSBhc3NlcnRpb24gbWlnaHQgY2F1c2UgdGhpcyBjb21tYW5kIHRvIGZhaWwKIAkgKiB3aXRoIEVJTlRSLiBBbmQgb25jZSBhZ2FpbiBiZWNhdXNlIEdFVF9BU1NFUlRTIGNhbiByYWNlIHdpdGgKIAkgKiBNQ19DTURfUkVCT09UIHJ1bm5pbmcgb24gdGhlIG90aGVyIHBvcnQuICovCiAJcmV0cnkgPSAyOwogCWRvIHsKLQkJTUNESV9TRVRfRFdPUkQoaW5idWYuYXNzZXJ0cywgR0VUX0FTU0VSVFNfSU5fQ0xFQVIsIDApOworCQlNQ0RJX1NFVF9EV09SRChpbmJ1ZiwgR0VUX0FTU0VSVFNfSU5fQ0xFQVIsIDEpOwogCQlyYyA9IGVmeF9tY2RpX3JwYyhlZngsIE1DX0NNRF9HRVRfQVNTRVJUUywKLQkJCQkgIGluYnVmLmFzc2VydHMsIE1DX0NNRF9HRVRfQVNTRVJUU19JTl9MRU4sCi0JCQkJICBhc3NlcnRpb24sIHNpemVvZihhc3NlcnRpb24pLCAmb3V0bGVuKTsKKwkJCQkgIGluYnVmLCBNQ19DTURfR0VUX0FTU0VSVFNfSU5fTEVOLAorCQkJCSAgb3V0YnVmLCBzaXplb2Yob3V0YnVmKSwgJm91dGxlbik7CiAJfSB3aGlsZSAoKHJjID09IC1FSU5UUiB8fCByYyA9PSAtRUlPKSAmJiByZXRyeS0tID4gMCk7CiAKIAlpZiAocmMpCkBAIC05MjYsMjEgKzk3MCwxMSBAQAogCWlmIChvdXRsZW4gPCBNQ19DTURfR0VUX0FTU0VSVFNfT1VUX0xFTikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlmbGFncyA9IE1DRElfRFdPUkQoYXNzZXJ0aW9uLCBHRVRfQVNTRVJUU19PVVRfR0xPQkFMX0ZMQUdTKTsKKwkvKiBQcmludCBvdXQgYW55IHJlY29yZGVkIGFzc2VydGlvbiBzdGF0ZSAqLworCWZsYWdzID0gTUNESV9EV09SRChvdXRidWYsIEdFVF9BU1NFUlRTX09VVF9HTE9CQUxfRkxBR1MpOwogCWlmIChmbGFncyA9PSBNQ19DTURfR0VUX0FTU0VSVFNfRkxBR1NfTk9fRkFJTFMpCiAJCXJldHVybiAwOwogCi0JLyogUmVzZXQgdGhlIGhhcmR3YXJlIGF0b21pY2FsbHkgc3VjaCB0aGF0IG9ubHkgb25lIHBvcnQgd2l0aCBzdWNjZWVkLgotCSAqIFRoaXMgY29tbWFuZCB3aWxsIHN1Y2NlZWQgaWYgYSByZWJvb3QgaXMgbm8gbG9uZ2VyIHJlcXVpcmVkIChiZWNhdXNlCi0JICogdGhlIG90aGVyIHBvcnQgZGlkIGl0IGZpcnN0KSwgYnV0IGZhaWwgd2l0aCBFSU8gaWYgaXQgc3VjY2VlZHMuCi0JICovCi0JQlVJTERfQlVHX09OKE1DX0NNRF9SRUJPT1RfT1VUX0xFTiAhPSAwKTsKLQlNQ0RJX1NFVF9EV09SRChpbmJ1Zi5yZWJvb3QsIFJFQk9PVF9JTl9GTEFHUywKLQkJICAgICAgIE1DX0NNRF9SRUJPT1RfRkxBR1NfQUZURVJfQVNTRVJUSU9OKTsKLQllZnhfbWNkaV9ycGMoZWZ4LCBNQ19DTURfUkVCT09ULCBpbmJ1Zi5yZWJvb3QsIE1DX0NNRF9SRUJPT1RfSU5fTEVOLAotCQkgICAgIE5VTEwsIDAsIE5VTEwpOwotCi0JLyogUHJpbnQgb3V0IHRoZSBhc3NlcnRpb24gKi8KIAlyZWFzb24gPSAoZmxhZ3MgPT0gTUNfQ01EX0dFVF9BU1NFUlRTX0ZMQUdTX1NZU19GQUlMKQogCQk/ICJzeXN0ZW0tbGV2ZWwgYXNzZXJ0aW9uIgogCQk6IChmbGFncyA9PSBNQ19DTURfR0VUX0FTU0VSVFNfRkxBR1NfVEhSX0ZBSUwpCkBAIC05NDksMjAgKzk4Myw0NSBAQAogCQk/ICJ3YXRjaGRvZyByZXNldCIKIAkJOiAidW5rbm93biBhc3NlcnRpb24iOwogCUVGWF9FUlIoZWZ4LCAiTUNQVSAlcyBhdCBQQyA9IDB4JS44eCBpbiB0aHJlYWQgMHglLjh4XG4iLCByZWFzb24sCi0JCU1DRElfRFdPUkQoYXNzZXJ0aW9uLCBHRVRfQVNTRVJUU19PVVRfU0FWRURfUENfT0ZGUyksCi0JCU1DRElfRFdPUkQoYXNzZXJ0aW9uLCBHRVRfQVNTRVJUU19PVVRfVEhSRUFEX09GRlMpKTsKKwkJTUNESV9EV09SRChvdXRidWYsIEdFVF9BU1NFUlRTX09VVF9TQVZFRF9QQ19PRkZTKSwKKwkJTUNESV9EV09SRChvdXRidWYsIEdFVF9BU1NFUlRTX09VVF9USFJFQURfT0ZGUykpOwogCiAJLyogUHJpbnQgb3V0IHRoZSByZWdpc3RlcnMgKi8KIAlvZnN0ID0gTUNfQ01EX0dFVF9BU1NFUlRTX09VVF9HUF9SRUdTX09GRlNfT0ZTVDsKIAlmb3IgKGluZGV4ID0gMTsgaW5kZXggPCAzMjsgaW5kZXgrKykgewogCQlFRlhfRVJSKGVmeCwgIlIlLjJkICg/KTogMHglLjh4XG4iLCBpbmRleCwKLQkJCU1DRElfRFdPUkQyKGFzc2VydGlvbiwgb2ZzdCkpOworCQkJTUNESV9EV09SRDIob3V0YnVmLCBvZnN0KSk7CiAJCW9mc3QgKz0gc2l6ZW9mKGVmeF9kd29yZF90KTsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgZWZ4X21jZGlfZXhpdF9hc3NlcnRpb24oc3RydWN0IGVmeF9uaWMgKmVmeCkKK3sKKwl1OCBpbmJ1ZltNQ19DTURfUkVCT09UX0lOX0xFTl07CisKKwkvKiBBdG9taWNhbGx5IHJlYm9vdCB0aGUgbWNmdyBvdXQgb2YgdGhlIGFzc2VydGlvbiBoYW5kbGVyICovCisJQlVJTERfQlVHX09OKE1DX0NNRF9SRUJPT1RfT1VUX0xFTiAhPSAwKTsKKwlNQ0RJX1NFVF9EV09SRChpbmJ1ZiwgUkVCT09UX0lOX0ZMQUdTLAorCQkgICAgICAgTUNfQ01EX1JFQk9PVF9GTEFHU19BRlRFUl9BU1NFUlRJT04pOworCWVmeF9tY2RpX3JwYyhlZngsIE1DX0NNRF9SRUJPT1QsIGluYnVmLCBNQ19DTURfUkVCT09UX0lOX0xFTiwKKwkJICAgICBOVUxMLCAwLCBOVUxMKTsKK30KKworaW50IGVmeF9tY2RpX2hhbmRsZV9hc3NlcnRpb24oc3RydWN0IGVmeF9uaWMgKmVmeCkKK3sKKwlpbnQgcmM7CisKKwlyYyA9IGVmeF9tY2RpX3JlYWRfYXNzZXJ0aW9uKGVmeCk7CisJaWYgKHJjKQorCQlyZXR1cm4gcmM7CisKKwllZnhfbWNkaV9leGl0X2Fzc2VydGlvbihlZngpOworCisJcmV0dXJuIDA7Cit9CisKIHZvaWQgZWZ4X21jZGlfc2V0X2lkX2xlZChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBlbnVtIGVmeF9sZWRfbW9kZSBtb2RlKQogewogCXU4IGluYnVmW01DX0NNRF9TRVRfSURfTEVEX0lOX0xFTl07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbWNkaS5oIGIvZHJpdmVycy9uZXQvc2ZjL21jZGkuaAppbmRleCAxMGNlOThmLi5mMWY4OWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvbWNkaS5oCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9tY2RpLmgKQEAgLTExNiw2ICsxMTYsNyBAQAogCQkJCWxvZmZfdCBvZmZzZXQsIHNpemVfdCBsZW5ndGgpOwogZXh0ZXJuIGludCBlZnhfbWNkaV9udnJhbV91cGRhdGVfZmluaXNoKHN0cnVjdCBlZnhfbmljICplZngsCiAJCQkJCXVuc2lnbmVkIGludCB0eXBlKTsKK2V4dGVybiBpbnQgZWZ4X21jZGlfbnZyYW1fdGVzdF9hbGwoc3RydWN0IGVmeF9uaWMgKmVmeCk7CiBleHRlcm4gaW50IGVmeF9tY2RpX2hhbmRsZV9hc3NlcnRpb24oc3RydWN0IGVmeF9uaWMgKmVmeCk7CiBleHRlcm4gdm9pZCBlZnhfbWNkaV9zZXRfaWRfbGVkKHN0cnVjdCBlZnhfbmljICplZngsIGVudW0gZWZ4X2xlZF9tb2RlIG1vZGUpOwogZXh0ZXJuIGludCBlZnhfbWNkaV9yZXNldF9wb3J0KHN0cnVjdCBlZnhfbmljICplZngpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGNvbC5oIGIvZHJpdmVycy9uZXQvc2ZjL21jZGlfcGNvbC5oCmluZGV4IDczZTcxZjQuLmJkNTkzMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tY2RpX3Bjb2wuaAorKysgYi9kcml2ZXJzL25ldC9zZmMvbWNkaV9wY29sLmgKQEAgLTc4NiwxNiArNzg2LDE4IEBACiAjZGVmaW5lIE1DX0NNRF9HRVRfUEhZX0NGR19PVVRfRkxBR1NfT0ZTVCAwCiAjZGVmaW5lIE1DX0NNRF9HRVRfUEhZX0NGR19QUkVTRU5UX0xCTiAwCiAjZGVmaW5lIE1DX0NNRF9HRVRfUEhZX0NGR19QUkVTRU5UX1dJRFRIIDEKLSNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfQ0ZHX1NIT1JUQklTVF9MQk4gMQotI2RlZmluZSBNQ19DTURfR0VUX1BIWV9DRkdfU0hPUlRCSVNUX1dJRFRIIDEKLSNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfQ0ZHX0xPTkdCSVNUX0xCTiAyCi0jZGVmaW5lIE1DX0NNRF9HRVRfUEhZX0NGR19MT05HQklTVF9XSURUSCAxCisjZGVmaW5lIE1DX0NNRF9HRVRfUEhZX0NGR19CSVNUX0NBQkxFX1NIT1JUX0xCTiAxCisjZGVmaW5lIE1DX0NNRF9HRVRfUEhZX0NGR19CSVNUX0NBQkxFX1NIT1JUX1dJRFRIIDEKKyNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfQ0ZHX0JJU1RfQ0FCTEVfTE9OR19MQk4gMgorI2RlZmluZSBNQ19DTURfR0VUX1BIWV9DRkdfQklTVF9DQUJMRV9MT05HX1dJRFRIIDEKICNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfQ0ZHX0xPV1BPV0VSX0xCTiAzCiAjZGVmaW5lIE1DX0NNRF9HRVRfUEhZX0NGR19MT1dQT1dFUl9XSURUSCAxCiAjZGVmaW5lIE1DX0NNRF9HRVRfUEhZX0NGR19QT1dFUk9GRl9MQk4gNAogI2RlZmluZSBNQ19DTURfR0VUX1BIWV9DRkdfUE9XRVJPRkZfV0lEVEggMQogI2RlZmluZSBNQ19DTURfR0VUX1BIWV9DRkdfVFhESVNfTEJOIDUKICNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfQ0ZHX1RYRElTX1dJRFRIIDEKKyNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfQ0ZHX0JJU1RfTEJOIDYKKyNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfQ0ZHX0JJU1RfV0lEVEggMQogI2RlZmluZSBNQ19DTURfR0VUX1BIWV9DRkdfT1VUX1RZUEVfT0ZTVCA0CiAvKiBCaXRtYXNrIG9mIHN1cHBvcnRlZCBjYXBhYmlsaXRpZXMgKi8KICNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfQ0ZHX09VVF9TVVBQT1JURURfQ0FQX09GU1QgOApAQCAtODMyLDcgKzgzNCw3IEBACiAjZGVmaW5lIE1DX0NNRF9HRVRfUEhZX0NGR19PVVRfUkVWSVNJT05fT0ZTVCA1MgogI2RlZmluZSBNQ19DTURfR0VUX1BIWV9DRkdfT1VUX1JFVklTSU9OX0xFTiAyMAogCi0vKiBNQ19DTURfU1RBUlRfUEhZX0JJU1Q6CisvKiBNQ19DTURfU1RBUlRfQklTVDoKICAqIFN0YXJ0IGEgQklTVCB0ZXN0IG9uIHRoZSBQSFkuCiAgKgogICogTG9ja3MgcmVxdWlyZWQ6IFBIWV9MT0NLIGlmIGRvaW5nIGEgIFBIWSBCSVNUCkBAIC04NDAsMzQgKzg0Miw3MSBAQAogICovCiAjZGVmaW5lIE1DX0NNRF9TVEFSVF9CSVNUIDB4MjUKICNkZWZpbmUgTUNfQ01EX1NUQVJUX0JJU1RfSU5fTEVOIDQKLSNkZWZpbmUgTUNfQ01EX1NUQVJUX0JJU1RfVFlQRV9PRlNUIDAKKyNkZWZpbmUgTUNfQ01EX1NUQVJUX0JJU1RfSU5fVFlQRV9PRlNUIDAKKyNkZWZpbmUgTUNfQ01EX1NUQVJUX0JJU1RfT1VUX0xFTiAwCiAKLS8qIFJ1biB0aGUgUEhZJ3Mgc2hvcnQgQklTVCAqLwotI2RlZmluZSBNQ19DTURfUEhZX0JJU1RfU0hPUlQgIDEKLS8qIFJ1biB0aGUgUEhZJ3MgbG9uZyBCSVNUICovCi0jZGVmaW5lIE1DX0NNRF9QSFlfQklTVF9MT05HICAgMgorLyogUnVuIHRoZSBQSFkncyBzaG9ydCBjYWJsZSBCSVNUICovCisjZGVmaW5lIE1DX0NNRF9QSFlfQklTVF9DQUJMRV9TSE9SVCAgMQorLyogUnVuIHRoZSBQSFkncyBsb25nIGNhYmxlIEJJU1QgKi8KKyNkZWZpbmUgTUNfQ01EX1BIWV9CSVNUX0NBQkxFX0xPTkcgICAyCiAvKiBSdW4gQklTVCBvbiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIEJQWCBTZXJkZXMgKFhBVUkgb3IgWEZJKSAqLwogI2RlZmluZSBNQ19DTURfQlBYX1NFUkRFU19CSVNUIDMKKy8qIFJ1biB0aGUgTUMgbG9vcGJhY2sgdGVzdHMgKi8KKyNkZWZpbmUgTUNfQ01EX01DX0xPT1BCQUNLX0JJU1QgNAorLyogUnVuIHRoZSBQSFkncyBzdGFuZGFyZCBCSVNUICovCisjZGVmaW5lIE1DX0NNRF9QSFlfQklTVCA1CiAKIC8qIE1DX0NNRF9QT0xMX1BIWV9CSVNUOiAodmFyaWFkaWMgb3V0cHV0KQogICogUG9sbCBmb3IgQklTVCBjb21wbGV0aW9uCiAgKgotICogUmV0dXJucyBhIHNpbmdsZSBzdGF0dXMgY29kZSwgYW5kIGEgYmluYXJ5IGJsb2Igb2YgcGh5LXNwZWNpZmljCi0gKiBiaXN0IG91dHB1dC4gSWYgdGhlIGRyaXZlciBjYW4ndCBzdWNjZXNmdWxseSBwYXJzZSB0aGUgQklTVCBvdXRwdXQsCi0gKiBpdCBzaG91bGQgc3RpbGwgcmVzcGVjdCB0aGUgUGFzcy9GYWlsIGluIE9VVC5SRVNVTFQuCisgKiBSZXR1cm5zIGEgc2luZ2xlIHN0YXR1cyBjb2RlLCBhbmQgb3B0aW9uYWxseSBzb21lIFBIWSBzcGVjaWZpYworICogYmlzdCBvdXRwdXQuIFRoZSBkcml2ZXIgc2hvdWxkIG9ubHkgY29uc3VtZSB0aGUgQklTVCBvdXRwdXQKKyAqIGFmdGVyIHZhbGlkYXRpbmcgT1VUTEVOIGFuZCBQSFlfQ0ZHLlBIWV9UWVBFLgogICoKLSAqIExvY2tzIHJlcXVpcmVkOiBQSFlfTE9DSyAgaWYgZG9pbmcgYSAgUEhZIEJJU1QKKyAqIElmIGEgZHJpdmVyIGNhbid0IHN1Y2Nlc2Z1bGx5IHBhcnNlIHRoZSBCSVNUIG91dHB1dCwgaXQgc2hvdWxkCisgKiBzdGlsbCByZXNwZWN0IHRoZSBwYXNzL0ZhaWwgaW4gT1VULlJFU1VMVAorICoKKyAqIExvY2tzIHJlcXVpcmVkOiBQSFlfTE9DSyBpZiBkb2luZyBhICBQSFkgQklTVAogICogUmV0dXJuIGNvZGU6IDAsIEVBQ0NFUyAoaWYgUEhZX0xPQ0sgaXMgbm90IGhlbGQpCiAgKi8KICNkZWZpbmUgTUNfQ01EX1BPTExfQklTVCAweDI2CiAjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfSU5fTEVOIDAKICNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9PVVRfTEVOIFVOS05PV04KKyNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9PVVRfU0ZUOTAwMV9MRU4gNDAKKyNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9PVVRfTVJTRlBfTEVOIDgKICNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9PVVRfUkVTVUxUX09GU1QgMAogI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUX1JVTk5JTkcgMQogI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUX1BBU1NFRCAyCiAjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfRkFJTEVEIDMKICNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9USU1FT1VUIDQKKy8qIEdlbmVyaWM6ICovCiAjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfT1VUX1BSSVZBVEVfT0ZTVCA0CisvKiBTRlQ5MDAxLXNwZWNpZmljOiAqLworLyogKG9mZnNldCA0IHVudXNlZD8pICovCisjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfT1VUX1NGVDkwMDFfQ0FCTEVfTEVOR1RIX0FfT0ZTVCA4CisjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfT1VUX1NGVDkwMDFfQ0FCTEVfTEVOR1RIX0JfT0ZTVCAxMgorI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUX09VVF9TRlQ5MDAxX0NBQkxFX0xFTkdUSF9DX09GU1QgMTYKKyNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9PVVRfU0ZUOTAwMV9DQUJMRV9MRU5HVEhfRF9PRlNUIDIwCisjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfT1VUX1NGVDkwMDFfQ0FCTEVfU1RBVFVTX0FfT0ZTVCAyNAorI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUX09VVF9TRlQ5MDAxX0NBQkxFX1NUQVRVU19CX09GU1QgMjgKKyNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9PVVRfU0ZUOTAwMV9DQUJMRV9TVEFUVVNfQ19PRlNUIDMyCisjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfT1VUX1NGVDkwMDFfQ0FCTEVfU1RBVFVTX0RfT0ZTVCAzNgorI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUX1NGVDkwMDFfUEFJUl9PSyAxCisjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfU0ZUOTAwMV9QQUlSX09QRU4gMgorI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUX1NGVDkwMDFfSU5UUkFfUEFJUl9TSE9SVCAzCisjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfU0ZUOTAwMV9JTlRFUl9QQUlSX1NIT1JUIDQKKyNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9TRlQ5MDAxX1BBSVJfQlVTWSA5CisvKiBtcnNmcCAiUEhZIiBkcml2ZXI6ICovCisjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfT1VUX01SU0ZQX1RFU1RfT0ZTVCA0CisjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfTVJTRlBfVEVTVF9DT01QTEVURSAwCisjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfTVJTRlBfVEVTVF9CVVNfU1dJVENIX09GRl9JMkNfV1JJVEUgMQorI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUX01SU0ZQX1RFU1RfQlVTX1NXSVRDSF9PRkZfSTJDX05PX0FDQ0VTU19JT19FWFAgMgorI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUX01SU0ZQX1RFU1RfQlVTX1NXSVRDSF9PRkZfSTJDX05PX0FDQ0VTU19NT0RVTEUgMworI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUX01SU0ZQX1RFU1RfSU9fRVhQX0kyQ19DT05GSUdVUkUgNAorI2RlZmluZSBNQ19DTURfUE9MTF9CSVNUX01SU0ZQX1RFU1RfQlVTX1NXSVRDSF9JMkNfTk9fQ1JPU1NUQUxLIDUKKyNkZWZpbmUgTUNfQ01EX1BPTExfQklTVF9NUlNGUF9URVNUX01PRFVMRV9QUkVTRU5DRSA2CisjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfTVJTRlBfVEVTVF9NT0RVTEVfSURfSTJDX0FDQ0VTUyA3CisjZGVmaW5lIE1DX0NNRF9QT0xMX0JJU1RfTVJTRlBfVEVTVF9NT0RVTEVfSURfU0FORV9WQUxVRSA4CiAKIC8qIE1DX0NNRF9QSFlfU1BJOiAodmFyaWFkaWMgaW4sIHZhcmlhZGljIG91dCkKICAqIFJlYWQvV3JpdGUvRXJhc2UgdGhlIFBIWSBTUEkgZGV2aWNlCkBAIC0xMjA2LDYgKzEyNDUsMTMgQEAKICNkZWZpbmUgTUNfQ01EX1dPTF9GSUxURVJfU0VUX0lOX0JJVE1BUF9MQVlFUjRfT0ZTVAlcCiAJKE1DX0NNRF9XT0xfRklMVEVSX1NFVF9JTl9EQVRBX09GU1QgKyAxNzgpCiAKKyNkZWZpbmUgTUNfQ01EX1dPTF9GSUxURVJfU0VUX0lOX0xJTktfTUFTS19PRlNUCVwKKwlNQ19DTURfV09MX0ZJTFRFUl9TRVRfSU5fREFUQV9PRlNUCisjZGVmaW5lIE1DX0NNRF9XT0xfRklMVEVSX1NFVF9JTl9MSU5LX1VQX0xCTgkwCisjZGVmaW5lIE1DX0NNRF9XT0xfRklMVEVSX1NFVF9JTl9MSU5LX1VQX1dJRFRICTEKKyNkZWZpbmUgTUNfQ01EX1dPTF9GSUxURVJfU0VUX0lOX0xJTktfRE9XTl9MQk4JMQorI2RlZmluZSBNQ19DTURfV09MX0ZJTFRFUl9TRVRfSU5fTElOS19ET1dOX1dJRFRIIDEKKwogI2RlZmluZSBNQ19DTURfV09MX0ZJTFRFUl9TRVRfT1VUX0xFTiA0CiAjZGVmaW5lIE1DX0NNRF9XT0xfRklMVEVSX1NFVF9PVVRfRklMVEVSX0lEX09GU1QgMAogCkBAIC0xMjE2LDcgKzEyNjIsOCBAQAogI2RlZmluZSBNQ19DTURfV09MX1RZUEVfSVBWNF9TWU4gICAweDMKICNkZWZpbmUgTUNfQ01EX1dPTF9UWVBFX0lQVjZfU1lOICAgMHg0CiAjZGVmaW5lIE1DX0NNRF9XT0xfVFlQRV9CSVRNQVAgICAgIDB4NQotI2RlZmluZSBNQ19DTURfV09MX1RZUEVfTUFYICAgICAgICAweDYKKyNkZWZpbmUgTUNfQ01EX1dPTF9UWVBFX0xJTksgICAgICAgMHg2CisjZGVmaW5lIE1DX0NNRF9XT0xfVFlQRV9NQVggICAgICAgIDB4NwogCiAjZGVmaW5lIE1DX0NNRF9GSUxURVJfTU9ERV9TSU1QTEUgICAgIDB4MAogI2RlZmluZSBNQ19DTURfRklMVEVSX01PREVfU1RSVUNUVVJFRCAweGZmZmZmZmZmCkBAIC0xMzU3LDE0ICsxNDA0LDI0IEBACiAgKiBSZXR1cm5zOiAwLCBFSU5WQUwgKGJhZCB0eXBlL29mZnNldC9sZW5ndGgpLCBFQUNDRVMgKGlmIFBIWV9MT0NLIHJlcXVpcmVkIGFuZCBub3QgaGVsZCkKICAqLwogI2RlZmluZSBNQ19DTURfTlZSQU1fVVBEQVRFX0ZJTklTSCAweDNjCi0jZGVmaW5lIE1DX0NNRF9OVlJBTV9VUERBVEVfRklOSVNIX0lOX0xFTiA0CisjZGVmaW5lIE1DX0NNRF9OVlJBTV9VUERBVEVfRklOSVNIX0lOX0xFTiA4CiAjZGVmaW5lIE1DX0NNRF9OVlJBTV9VUERBVEVfRklOSVNIX0lOX1RZUEVfT0ZTVCAwCisjZGVmaW5lIE1DX0NNRF9OVlJBTV9VUERBVEVfRklOSVNIX0lOX1JFQk9PVF9PRlNUIDQKICNkZWZpbmUgTUNfQ01EX05WUkFNX1VQREFURV9GSU5JU0hfT1VUX0xFTiAwCiAKIC8qIE1DX0NNRF9SRUJPT1Q6Ci0gKiBSZWJvb3QgdGhlIE1DLiBUaGUgQUZURVJfQVNTRVJUSU9OIGZsYWcgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZAotICogd2hlbiB0aGUgZHJpdmVyIG5vdGljZXMgYW4gYXNzZXJ0aW9uIGZhaWx1cmUsIHRvIGFsbG93IHR3byBwb3J0cyB0bwotICogYm90aCByZWNvdmVyIChzZW1pLSlncmFjZWZ1bGx5LgorICogUmVib290IHRoZSBNQy4KKyAqCisgKiBUaGUgQUZURVJfQVNTRVJUSU9OIGZsYWcgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aGVuIHRoZSBkcml2ZXIgbm90aWNlcworICogYW4gYXNzZXJ0aW9uIGZhaWx1cmUgKGF0IHdoaWNoIHBvaW50IGl0IGlzIGV4cGVjdGVkIHRvIHBlcmZvcm0gYSBjb21wbGV0ZQorICogdGVhciBkb3duIGFuZCByZWluaXRpYWxpc2UpLCB0byBhbGxvdyBib3RoIHBvcnRzIHRvIHJlc2V0IHRoZSBNQyBvbmNlCisgKiBpbiBhbiBhdG9taWMgZmFzaGlvbi4KKyAqCisgKiBQcm9kdWN0aW9uIG1jIGZpcm13YXJlcyBhcmUgZ2VuZXJhbGx5IGNvbXBpbGVkIHdpdGggUkVCT09UX09OX0FTU0VSVD0xLAorICogd2hpY2ggbWVhbnMgdGhhdCB0aGV5IHdpbGwgYXV0b21hdGljYWxseSByZWJvb3Qgb3V0IG9mIHRoZSBhc3NlcnRpb24KKyAqIGhhbmRsZXIsIHNvIHRoaXMgaXMgaW4gcHJhY3Rpc2UgYW4gb3B0aW9uYWwgb3BlcmF0aW9uLiBJdCBpcyBzdGlsbAorICogcmVjb21tZW5kZWQgdGhhdCBkcml2ZXJzIGV4ZWN1dGUgdGhpcyB0byBzdXBwb3J0IGN1c3RvbSBmaXJtd2FyZXMKKyAqIHdpdGggUkVCT09UX09OX0FTU0VSVD0wLgogICoKICAqIExvY2tzIHJlcXVpcmVkOiBOT05FCiAgKiBSZXR1cm5zOiBOb3RoaW5nLiBZb3UgZ2V0IGJhY2sgYSByZXNwb25zZSB3aXRoIEVSUj0xLCBEQVRBTEVOPTAKQEAgLTE0NjksMTEgKzE1MjYsMTAgQEAKIAkoKF9vZnN0KSArIDYpCiAKIC8qIE1DX0NNRF9SRUFEX1NFTlNPUlMKLSAqIFJldHVybnMgdGhlIGN1cnJlbnQgKHZhbHVlLCBzdGF0ZSkgZm9yIGVhY2ggc2Vuc29yCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHJlYWRpbmcgZnJvbSBlYWNoIHNlbnNvcgogICoKLSAqIFJldHVybnMgdGhlIGN1cnJlbnQgKHZhbHVlLCBzdGF0ZSkgW2VhY2ggMTZiaXRdIG9mIGVhY2ggc2Vuc29yIHN1cHBvcnRlZCBieQotICogdGhpcyBib2FyZCwgYnkgRE1BJ2luZyBhIHNwYXJzZSBhcnJheSAoaW5kZXhlZCBieSB0aGUgc2Vuc29yIHR5cGUpIGludG8gaG9zdAotICogbWVtb3J5LgorICogUmV0dXJucyBhIHNwYXJzZSBhcnJheSBvZiBzZW5zb3IgcmVhZGluZ3MgKGluZGV4ZWQgYnkgdGhlIHNlbnNvcgorICogdHlwZSkgaW50byBob3N0IG1lbW9yeS4gIEVhY2ggYXJyYXkgZWxlbWVudCBpcyBhIGR3b3JkLgogICoKICAqIFRoZSBNQyB3aWxsIHNlbmQgYSBTRU5TT1JFVlQgZXZlbnQgZXZlcnkgdGltZSBhbnkgc2Vuc29yIGNoYW5nZXMgc3RhdGUuIFRoZQogICogZHJpdmVyIGlzIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGF0IGl0IGRvZXNuJ3QgbWlzcyBhbnkgZXZlbnRzLiBUaGUgYm9hcmQKQEAgLTE0ODYsNiArMTU0MiwxMiBAQAogI2RlZmluZSBNQ19DTURfUkVBRF9TRU5TT1JTX0lOX0RNQV9BRERSX0hJX09GU1QgNAogI2RlZmluZSBNQ19DTURfUkVBRF9TRU5TT1JTX09VVF9MRU4gMAogCisvKiBTZW5zb3IgcmVhZGluZyBmaWVsZHMgKi8KKyNkZWZpbmUgTUNfQ01EX1JFQURfU0VOU09SX1ZBTFVFX0xCTiAwCisjZGVmaW5lIE1DX0NNRF9SRUFEX1NFTlNPUl9WQUxVRV9XSURUSCAxNgorI2RlZmluZSBNQ19DTURfUkVBRF9TRU5TT1JfU1RBVEVfTEJOIDE2CisjZGVmaW5lIE1DX0NNRF9SRUFEX1NFTlNPUl9TVEFURV9XSURUSCA4CisKIAogLyogTUNfQ01EX0dFVF9QSFlfU1RBVEU6CiAgKiBSZXBvcnQgY3VycmVudCBzdGF0ZSBvZiBQSFkuICBBICJ6b21iaWUiIFBIWSBpcyBhIFBIWSB0aGF0IGhhcyBmYWlsZWQgdG8KQEAgLTE1NzcsNCArMTYzOSw5OCBAQAogI2RlZmluZSBNQ19DTURfTUFDX1JFU0VUX1JFU1RPUkVfSU5fTEVOIDAKICNkZWZpbmUgTUNfQ01EX01BQ19SRVNFVF9SRVNUT1JFX09VVF9MRU4gMAogCisKKy8qIE1DX0NNRF9URVNUX0FTU0VSVDoKKyAqIERlbGliZXJhdGVseSB0cmlnZ2VyIGFuIGFzc2VydC1kZXRvbmF0aW9uIGluIHRoZSBmaXJtd2FyZSBmb3IgdGVzdGluZworICogcHVycG9zZXMgKGkuZS4gdG8gYWxsb3cgdGVzdHMgdGhhdCB0aGUgZHJpdmVyIGNvcGVzIGdyYWNlZnVsbHkpLgorICoKKyAqIExvY2tzIHJlcXVpcmVkOiBOb25lCisgKiBSZXR1cm5zOiAwCisgKi8KKworI2RlZmluZSBNQ19DTURfVEVTVEFTU0VSVCAweDQ5CisjZGVmaW5lIE1DX0NNRF9URVNUQVNTRVJUX0lOX0xFTiAwCisjZGVmaW5lIE1DX0NNRF9URVNUQVNTRVJUX09VVF9MRU4gMAorCisvKiBNQ19DTURfV09SS0FST1VORCAweDRhCisgKgorICogRW5hYmxlL0Rpc2FibGUgYSBnaXZlbiB3b3JrYXJvdW5kLiBUaGUgbWNmdyB3aWxsIHJldHVybiBFSU5WQUwgaWYgaXQKKyAqIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgZ2l2ZW4gd29ya2Fyb3VuZCBudW1iZXIgLSB3aGljaCBzaG91bGQgbm90CisgKiBiZSB0cmVhdGVkIGFzIGEgaGFyZCBlcnJvciBieSBjbGllbnQgY29kZS4KKyAqCisgKiBUaGlzIG9wIGRvZXMgbm90IGltcGx5IGFueSBzZW1hbnRpY3MgYWJvdXQgZWFjaCB3b3JrYXJvdW5kLCB0aGF0J3MgYmV0d2VlbgorICogdGhlIGRyaXZlciBhbmQgdGhlIG1jZncgb24gYSBwZXItd29ya2Fyb3VuZCBiYXNpcy4KKyAqCisgKiBMb2NrcyByZXF1aXJlZDogTm9uZQorICogUmV0dXJuczogMCwgRUlOVkFMCisgKi8KKyNkZWZpbmUgTUNfQ01EX1dPUktBUk9VTkQgMHg0YQorI2RlZmluZSBNQ19DTURfV09SS0FST1VORF9JTl9MRU4gOAorI2RlZmluZSBNQ19DTURfV09SS0FST1VORF9JTl9UWVBFX09GU1QgMAorI2RlZmluZSBNQ19DTURfV09SS0FST1VORF9CVUcxNzIzMCAxCisjZGVmaW5lIE1DX0NNRF9XT1JLQVJPVU5EX0lOX0VOQUJMRURfT0ZTVCA0CisjZGVmaW5lIE1DX0NNRF9XT1JLQVJPVU5EX09VVF9MRU4gMAorCisvKiBNQ19DTURfR0VUX1BIWV9NRURJQV9JTkZPOgorICogUmVhZCBtZWRpYS1zcGVjaWZpYyBkYXRhIGZyb20gUEhZIChlLmcuIFNGUC9TRlArIG1vZHVsZSBJRCBpbmZvcm1hdGlvbiBmb3IKKyAqIFNGUCsgUEhZcykuCisgKgorICogVGhlICJtZWRpYSB0eXBlIiBjYW4gYmUgZm91bmQgdmlhIEdFVF9QSFlfQ0ZHIChHRVRfUEhZX0NGR19PVVRfTUVESUFfVFlQRSk7CisgKiB0aGUgdmFsaWQgInBhZ2UgbnVtYmVyIiBpbnB1dCB2YWx1ZXMsIGFuZCB0aGUgb3V0cHV0IGRhdGEsIGFyZSBpbnRlcnByZXRlZAorICogb24gYSBwZXItdHlwZSBiYXNpcy4KKyAqCisgKiBGb3IgU0ZQKzogUEFHRT0wIG9yIDEgcmV0dXJucyBhIDEyOC1ieXRlIGJsb2NrIHJlYWQgZnJvbSBtb2R1bGUgSTJDIGFkZHJlc3MKKyAqICAgICAgICAgICAweEEwIG9mZnNldCAwIG9yIDB4ODAuCisgKiBBbnl0aGluZyBlbHNlOiBjdXJyZW50bHkgdW5kZWZpbmVkLgorICoKKyAqIExvY2tzIHJlcXVpcmVkOiBOb25lCisgKiBSZXR1cm4gY29kZTogMAorICovCisjZGVmaW5lIE1DX0NNRF9HRVRfUEhZX01FRElBX0lORk8gMHg0YgorI2RlZmluZSBNQ19DTURfR0VUX1BIWV9NRURJQV9JTkZPX0lOX0xFTiA0CisjZGVmaW5lIE1DX0NNRF9HRVRfUEhZX01FRElBX0lORk9fSU5fUEFHRV9PRlNUIDAKKyNkZWZpbmUgTUNfQ01EX0dFVF9QSFlfTUVESUFfSU5GT19PVVRfTEVOKF9udW1fYnl0ZXMpICg0ICsgKF9udW1fYnl0ZXMpKQorI2RlZmluZSBNQ19DTURfR0VUX1BIWV9NRURJQV9JTkZPX09VVF9EQVRBTEVOX09GU1QgMAorI2RlZmluZSBNQ19DTURfR0VUX1BIWV9NRURJQV9JTkZPX09VVF9EQVRBX09GU1QgNAorCisvKiBNQ19DTURfTlZSQU1fVEVTVDoKKyAqIFRlc3QgYSBwYXJ0aWN1bGFyIE5WUkFNIHBhcnRpdGlvbiBmb3IgdmFsaWQgY29udGVudHMgKHdoZXJlICJ2YWxpZCIKKyAqIGRlcGVuZHMgb24gdGhlIHR5cGUgb2YgcGFydGl0aW9uKS4KKyAqCisgKiBMb2NrcyByZXF1aXJlZDogTm9uZQorICogUmV0dXJuIGNvZGU6IDAKKyAqLworI2RlZmluZSBNQ19DTURfTlZSQU1fVEVTVCAweDRjCisjZGVmaW5lIE1DX0NNRF9OVlJBTV9URVNUX0lOX0xFTiA0CisjZGVmaW5lIE1DX0NNRF9OVlJBTV9URVNUX0lOX1RZUEVfT0ZTVCAwCisjZGVmaW5lIE1DX0NNRF9OVlJBTV9URVNUX09VVF9MRU4gNAorI2RlZmluZSBNQ19DTURfTlZSQU1fVEVTVF9PVVRfUkVTVUxUX09GU1QgMAorI2RlZmluZSBNQ19DTURfTlZSQU1fVEVTVF9QQVNTIDAKKyNkZWZpbmUgTUNfQ01EX05WUkFNX1RFU1RfRkFJTCAxCisjZGVmaW5lIE1DX0NNRF9OVlJBTV9URVNUX05PVFNVUFAgMgorCisvKiBNQ19DTURfTVJTRlBfVFdFQUs6IChkZWJ1ZykKKyAqIFJlYWQgc3RhdHVzIGFuZC9vciBzZXQgcGFyYW1ldGVycyBmb3IgdGhlICJtcnNmcCIgZHJpdmVyIGluIG1yX3J1c3R5IGJ1aWxkcy4KKyAqIEkyQyBJL08gZXhwYW5kZXIgYml0cyBhcmUgYWx3YXlzIHJlYWQ7IGlmIGVxdWFsaXNlciBwYXJhbWV0ZXJzIGFyZSBzdXBwbGllZCwKKyAqIHRoZXkgYXJlIGNvbmZpZ3VyZWQgZmlyc3QuCisgKgorICogTG9ja3MgcmVxdWlyZWQ6IE5vbmUKKyAqIFJldHVybiBjb2RlOiAwLCBFSU5WQUwKKyAqLworI2RlZmluZSBNQ19DTURfTVJTRlBfVFdFQUsgMHg0ZAorI2RlZmluZSBNQ19DTURfTVJTRlBfVFdFQUtfSU5fTEVOX1JFQURfT05MWSAwCisjZGVmaW5lIE1DX0NNRF9NUlNGUF9UV0VBS19JTl9MRU5fRVFfQ09ORklHIDE2CisjZGVmaW5lIE1DX0NNRF9NUlNGUF9UV0VBS19JTl9UWEVRX0xFVkVMX09GU1QgMCAgICAvKiAwLTYgbG93LT5oaWdoIGRlLWVtcGguICovCisjZGVmaW5lIE1DX0NNRF9NUlNGUF9UV0VBS19JTl9UWEVRX0RUX0NGR19PRlNUIDQgICAvKiAwLTggbG93LT5oaWdoIHJlZi5WICovCisjZGVmaW5lIE1DX0NNRF9NUlNGUF9UV0VBS19JTl9SWEVRX0JPT1NUX09GU1QgOCAgICAvKiAwLTggbG93LT5oaWdoIGJvb3N0ICovCisjZGVmaW5lIE1DX0NNRF9NUlNGUF9UV0VBS19JTl9SWEVRX0RUX0NGR19PRlNUIDEyICAvKiAwLTggbG93LT5oaWdoIHJlZi5WICovCisjZGVmaW5lIE1DX0NNRF9NUlNGUF9UV0VBS19PVVRfTEVOIDEyCisjZGVmaW5lIE1DX0NNRF9NUlNGUF9UV0VBS19PVVRfSU9FWFBfSU5QVVRTX09GU1QgMCAgICAgLyogaW5wdXQgYml0cyAqLworI2RlZmluZSBNQ19DTURfTVJTRlBfVFdFQUtfT1VUX0lPRVhQX09VVFBVVFNfT0ZTVCA0ICAgIC8qIG91dHB1dCBiaXRzICovCisjZGVmaW5lIE1DX0NNRF9NUlNGUF9UV0VBS19PVVRfSU9FWFBfRElSRUNUSU9OX09GU1QgOCAgLyogZGlyczogMD1vdXQsIDE9aW4gKi8KKworLyogRG8gTk9UIGFkZCBuZXcgY29tbWFuZHMgYmV5b25kIDB4NGYgYXMgcGFydCBvZiAzLjAgOiAweDUwIC0gMHg3ZiB3aWxsIGJlCisgKiB1c2VkIGZvciBwb3N0LTMuMCBleHRlbnNpb25zLiBJZiB5b3UgcnVuIG91dCBvZiBzcGFjZSwgbG9vayBmb3IgZ2FwcyBvcgorICogY29tbWFuZHMgdGhhdCBhcmUgdW51c2VkIGluIHRoZSBleGlzdGluZyByYW5nZS4gKi8KKwogI2VuZGlmIC8qIE1DRElfUENPTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbWNkaV9waHkuYyBiL2RyaXZlcnMvbmV0L3NmYy9tY2RpX3BoeS5jCmluZGV4IGViNjk0YWYuLjM0YzIyZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tY2RpX3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9tY2RpX3BoeS5jCkBAIC0zODEsNiArMzgxLDE4IEBACiAJICogYnV0IGJ5IGNvbnZlbnRpb24gd2UgZG9uJ3QgKi8KIAllZngtPmxvb3BiYWNrX21vZGVzICY9IH4oMSA8PCBMT09QQkFDS19OT05FKTsKIAorCS8qIFNldCB0aGUgaW5pdGlhbCBsaW5rIG1vZGUgKi8KKwllZnhfbWNkaV9waHlfZGVjb2RlX2xpbmsoCisJCWVmeCwgJmVmeC0+bGlua19zdGF0ZSwKKwkJTUNESV9EV09SRChvdXRidWYsIEdFVF9MSU5LX09VVF9MSU5LX1NQRUVEKSwKKwkJTUNESV9EV09SRChvdXRidWYsIEdFVF9MSU5LX09VVF9GTEFHUyksCisJCU1DRElfRFdPUkQob3V0YnVmLCBHRVRfTElOS19PVVRfRkNOVEwpKTsKKworCS8qIERlZmF1bHQgdG8gQXV0b25lZ290aWF0ZWQgZmxvdyBjb250cm9sIGlmIHRoZSBQSFkgc3VwcG9ydHMgaXQgKi8KKwllZngtPndhbnRlZF9mYyA9IEVGWF9GQ19SWCB8IEVGWF9GQ19UWDsKKwlpZiAocGh5X2RhdGEtPnN1cHBvcnRlZF9jYXAgJiAoMSA8PCBNQ19DTURfUEhZX0NBUF9BTl9MQk4pKQorCQllZngtPndhbnRlZF9mYyB8PSBFRlhfRkNfQVVUTzsKKwogCXJldHVybiAwOwogCiBmYWlsOgpAQCAtNDM2LDcgKzQ0OCw3IEBACiAKIAkvKiBUaGUgbGluayBwYXJ0bmVyIGNhcGFiaWxpdGllcyBhcmUgb25seSByZWxldmVudCBpZiB0aGUKIAkgKiBsaW5rIHN1cHBvcnRzIGZsb3cgY29udHJvbCBhdXRvbmVnb3RpYXRpb24gKi8KLQlpZiAofnBoeV9jZmctPnN1cHBvcnRlZF9jYXAgJiAoMSA8PCBNQ19DTURfUEhZX0NBUF9BU1lNX0xCTikpCisJaWYgKH5waHlfY2ZnLT5zdXBwb3J0ZWRfY2FwICYgKDEgPDwgTUNfQ01EX1BIWV9DQVBfQU5fTEJOKSkKIAkJcmV0dXJuOwogCiAJLyogSWYgZmxvdyBjb250cm9sIGF1dG9uZWcgaXMgc3VwcG9ydGVkIGFuZCBlbmFibGVkLCB0aGVuIGZpbmUgKi8KQEAgLTU2MCw2ICs1NzIsMjcgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBlZnhfbWNkaV9waHlfdGVzdF9hbGl2ZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4KQoreworCXU4IG91dGJ1ZltNQ19DTURfR0VUX1BIWV9TVEFURV9PVVRfTEVOXTsKKwlzaXplX3Qgb3V0bGVuOworCWludCByYzsKKworCUJVSUxEX0JVR19PTihNQ19DTURfR0VUX1BIWV9TVEFURV9JTl9MRU4gIT0gMCk7CisKKwlyYyA9IGVmeF9tY2RpX3JwYyhlZngsIE1DX0NNRF9HRVRfUEhZX1NUQVRFLCBOVUxMLCAwLAorCQkJICBvdXRidWYsIHNpemVvZihvdXRidWYpLCAmb3V0bGVuKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCWlmIChvdXRsZW4gPCBNQ19DTURfR0VUX1BIWV9TVEFURV9PVVRfTEVOKQorCQlyZXR1cm4gLUVNU0dTSVpFOworCWlmIChNQ0RJX0RXT1JEKG91dGJ1ZiwgR0VUX1BIWV9TVEFURV9TVEFURSkgIT0gTUNfQ01EX1BIWV9TVEFURV9PSykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKwogc3RydWN0IGVmeF9waHlfb3BlcmF0aW9ucyBlZnhfbWNkaV9waHlfb3BzID0gewogCS5wcm9iZQkJPSBlZnhfbWNkaV9waHlfcHJvYmUsCiAJLmluaXQgCSAJPSBlZnhfcG9ydF9kdW1teV9vcF9pbnQsCkBAIC01NjksNiArNjAyLDcgQEAKIAkucmVtb3ZlCQk9IGVmeF9tY2RpX3BoeV9yZW1vdmUsCiAJLmdldF9zZXR0aW5ncwk9IGVmeF9tY2RpX3BoeV9nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwk9IGVmeF9tY2RpX3BoeV9zZXRfc2V0dGluZ3MsCisJLnRlc3RfYWxpdmUJPSBlZnhfbWNkaV9waHlfdGVzdF9hbGl2ZSwKIAkucnVuX3Rlc3RzCT0gTlVMTCwKIAkudGVzdF9uYW1lCT0gTlVMTCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbWRpb18xMGcuYyBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jCmluZGV4IDE1NzRlNTIuLjA1NDhmY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5jCkBAIC0zMzUsMyArMzM1LDI3IEBACiAJCW1paV9hZHZlcnRpc2VfZmxvd2N0cmwoZWZ4LT53YW50ZWRfZmMpLAogCQllZnhfbWRpb19yZWFkKGVmeCwgTURJT19NTURfQU4sIE1ESU9fQU5fTFBBKSk7CiB9CisKK2ludCBlZnhfbWRpb190ZXN0X2FsaXZlKHN0cnVjdCBlZnhfbmljICplZngpCit7CisJaW50IHJjOworCWludCBkZXZhZCA9IF9fZmZzKGVmeC0+bWRpby5tbWRzKTsKKwl1MTYgcGh5c2lkMSwgcGh5c2lkMjsKKworCW11dGV4X2xvY2soJmVmeC0+bWFjX2xvY2spOworCisJcGh5c2lkMSA9IGVmeF9tZGlvX3JlYWQoZWZ4LCBkZXZhZCwgTURJT19ERVZJRDEpOworCXBoeXNpZDIgPSBlZnhfbWRpb19yZWFkKGVmeCwgZGV2YWQsIE1ESU9fREVWSUQyKTsKKworCWlmICgocGh5c2lkMSA9PSAweDAwMDApIHx8IChwaHlzaWQxID09IDB4ZmZmZikgfHwKKwkgICAgKHBoeXNpZDIgPT0gMHgwMDAwKSB8fCAocGh5c2lkMiA9PSAweGZmZmYpKSB7CisJCUVGWF9FUlIoZWZ4LCAibm8gTURJTyBQSFkgcHJlc2VudCB3aXRoIElEICVkXG4iLAorCQkJZWZ4LT5tZGlvLnBydGFkKTsKKwkJcmMgPSAtRUlOVkFMOworCX0gZWxzZSB7CisJCXJjID0gZWZ4X21kaW9fY2hlY2tfbW1kcyhlZngsIGVmeC0+bWRpby5tbWRzLCAwKTsKKwl9CisKKwltdXRleF91bmxvY2soJmVmeC0+bWFjX2xvY2spOworCXJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9tZGlvXzEwZy5oIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmgKaW5kZXggZjZhYzk1MC4uZjg5ZTcxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL21kaW9fMTBnLmgKQEAgLTEwNiw0ICsxMDYsNyBAQAogCW1kaW9fc2V0X2ZsYWcoJmVmeC0+bWRpbywgZWZ4LT5tZGlvLnBydGFkLCBkZXZhZCwgYWRkciwgbWFzaywgc3RhdGUpOwogfQogCisvKiBMaXZlbmVzcyBzZWxmLXRlc3QgZm9yIE1ESU8gUEhZcyAqLworZXh0ZXJuIGludCBlZnhfbWRpb190ZXN0X2FsaXZlKHN0cnVjdCBlZnhfbmljICplZngpOworCiAjZW5kaWYgLyogRUZYX01ESU9fMTBHX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmggYi9kcml2ZXJzL25ldC9zZmMvbmV0X2RyaXZlci5oCmluZGV4IGQ1YWFiNWIuLmNiMDE4ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9uZXRfZHJpdmVyLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL25ldF9kcml2ZXIuaApAQCAtMTgsNyArMTgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L21kaW8uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CkBAIC0xMDEsOSArMTAwLDYgQEAKICAqIFNwZWNpYWwgYnVmZmVycyBhcmUgdXNlZCBmb3IgdGhlIGV2ZW50IHF1ZXVlcyBhbmQgdGhlIFRYIGFuZCBSWAogICogZGVzY3JpcHRvciBxdWV1ZXMgZm9yIGVhY2ggY2hhbm5lbC4gIFRoZXkgYXJlICpub3QqIHVzZWQgZm9yIHRoZQogICogYWN0dWFsIHRyYW5zbWl0IGFuZCByZWNlaXZlIGJ1ZmZlcnMuCi0gKgotICogTm90ZSB0aGF0IGZvciBGYWxjb24sIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHF1ZXVlcyBsaXZlIGluIGhvc3QgbWVtb3J5LgotICogQWxsb2NhdGlvbiBhbmQgZnJlZWluZyBwcm9jZWR1cmVzIG11c3QgdGFrZSB0aGlzIGludG8gYWNjb3VudC4KICAqLwogc3RydWN0IGVmeF9zcGVjaWFsX2J1ZmZlciB7CiAJdm9pZCAqYWRkcjsKQEAgLTMwMCw3ICsyOTYsNyBAQAogICogQGRtYV9hZGRyOiBETUEgYmFzZSBhZGRyZXNzIG9mIHRoZSBidWZmZXIKICAqIEBsZW46IEJ1ZmZlciBsZW5ndGgsIGluIGJ5dGVzCiAgKgotICogRmFsY29uIHVzZXMgdGhlc2UgYnVmZmVycyBmb3IgaXRzIGludGVycnVwdCBzdGF0dXMgcmVnaXN0ZXJzIGFuZAorICogVGhlIE5JQyB1c2VzIHRoZXNlIGJ1ZmZlcnMgZm9yIGl0cyBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVycyBhbmQKICAqIE1BQyBzdGF0cyBkdW1wcy4KICAqLwogc3RydWN0IGVmeF9idWZmZXIgewpAQCAtNTE2LDggKzUxMiw5IEBACiAgKiBAc2V0X3NldHRpbmdzOiBTZXQgZXRodG9vbCBzZXR0aW5ncy4gU2VyaWFsaXNlZCBieSB0aGUgbWFjX2xvY2suCiAgKiBAc2V0X25wYWdlX2FkdjogU2V0IGFiaWxpdGllcyBhZHZlcnRpc2VkIGluIChFeHRlbmRlZCkgTmV4dCBQYWdlCiAgKgkob25seSBuZWVkZWQgd2hlcmUgQU4gYml0IGlzIHNldCBpbiBtbWRzKQorICogQHRlc3RfYWxpdmU6IFRlc3QgdGhhdCBQSFkgaXMgJ2FsaXZlJyAob25saW5lKQogICogQHRlc3RfbmFtZTogR2V0IHRoZSBuYW1lIG9mIGEgUEhZLXNwZWNpZmljIHRlc3QvcmVzdWx0Ci0gKiBAcnVuX3Rlc3RzOiBSdW4gdGVzdHMgYW5kIHJlY29yZCByZXN1bHRzIGFzIGFwcHJvcHJpYXRlLgorICogQHJ1bl90ZXN0czogUnVuIHRlc3RzIGFuZCByZWNvcmQgcmVzdWx0cyBhcyBhcHByb3ByaWF0ZSAob2ZmbGluZSkuCiAgKglGbGFncyBhcmUgdGhlIGV0aHRvb2wgdGVzdHMgZmxhZ3MuCiAgKi8KIHN0cnVjdCBlZnhfcGh5X29wZXJhdGlvbnMgewpAQCAtNTMyLDYgKzUyOSw3IEBACiAJaW50ICgqc2V0X3NldHRpbmdzKSAoc3RydWN0IGVmeF9uaWMgKmVmeCwKIAkJCSAgICAgc3RydWN0IGV0aHRvb2xfY21kICplY21kKTsKIAl2b2lkICgqc2V0X25wYWdlX2FkdikgKHN0cnVjdCBlZnhfbmljICplZngsIHUzMik7CisJaW50ICgqdGVzdF9hbGl2ZSkgKHN0cnVjdCBlZnhfbmljICplZngpOwogCWNvbnN0IGNoYXIgKigqdGVzdF9uYW1lKSAoc3RydWN0IGVmeF9uaWMgKmVmeCwgdW5zaWduZWQgaW50IGluZGV4KTsKIAlpbnQgKCpydW5fdGVzdHMpIChzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBpbnQgKnJlc3VsdHMsIHVuc2lnbmVkIGZsYWdzKTsKIH07CkBAIC02NzIsNyArNjcwLDcgQEAKICAqIEBpcnFfc3RhdHVzOiBJbnRlcnJ1cHQgc3RhdHVzIGJ1ZmZlcgogICogQGxhc3RfaXJxX2NwdTogTGFzdCBDUFUgdG8gaGFuZGxlIGludGVycnVwdC4KICAqCVRoaXMgcmVnaXN0ZXIgaXMgd3JpdHRlbiB3aXRoIHRoZSBTTVAgcHJvY2Vzc29yIElEIHdoZW5ldmVyIGFuCi0gKglpbnRlcnJ1cHQgaXMgaGFuZGxlZC4gIEl0IGlzIHVzZWQgYnkgZmFsY29uX3Rlc3RfaW50ZXJydXB0KCkKKyAqCWludGVycnVwdCBpcyBoYW5kbGVkLiAgSXQgaXMgdXNlZCBieSBlZnhfbmljX3Rlc3RfaW50ZXJydXB0KCkKICAqCXRvIHZlcmlmeSB0aGF0IGFuIGludGVycnVwdCBoYXMgb2NjdXJyZWQuCiAgKiBAc3BpX2ZsYXNoOiBTUEkgZmxhc2ggZGV2aWNlCiAgKglUaGlzIGZpZWxkIHdpbGwgYmUgJU5VTEwgaWYgbm8gZmxhc2ggZGV2aWNlIGlzIHByZXNlbnQgKG9yIGZvciBTaWVuYSkuCkBAIC03MjEsOCArNzE5LDcgQEAKICAqIEBsb29wYmFja19tb2RlczogU3VwcG9ydGVkIGxvb3BiYWNrIG1vZGUgYml0bWFzawogICogQGxvb3BiYWNrX3NlbGZ0ZXN0OiBPZmZsaW5lIHNlbGYtdGVzdCBwcml2YXRlIHN0YXRlCiAgKgotICogVGhlIEBwcml2IGZpZWxkIG9mIHRoZSBjb3JyZXNwb25kaW5nICZzdHJ1Y3QgbmV0X2RldmljZSBwb2ludHMgdG8KLSAqIHRoaXMuCisgKiBUaGlzIGlzIHN0b3JlZCBpbiB0aGUgcHJpdmF0ZSBhcmVhIG9mIHRoZSAmc3RydWN0IG5ldF9kZXZpY2UuCiAgKi8KIHN0cnVjdCBlZnhfbmljIHsKIAljaGFyIG5hbWVbSUZOQU1TSVpdOwpAQCAtOTk1LDcgKzk5Miw3IEBACiAgKiB0aGF0IHRoZSBuZXQgZHJpdmVyIHdpbGwgcHJvZ3JhbSBpbnRvIHRoZSBNQUMgYXMgdGhlIG1heGltdW0gZnJhbWUKICAqIGxlbmd0aC4KICAqCi0gKiBUaGUgMTBHIE1BQyB1c2VkIGluIEZhbGNvbiByZXF1aXJlcyA4LWJ5dGUgYWxpZ25tZW50IG9uIHRoZSBmcmFtZQorICogVGhlIDEwRyBNQUMgcmVxdWlyZXMgOC1ieXRlIGFsaWdubWVudCBvbiB0aGUgZnJhbWUKICAqIGxlbmd0aCwgc28gd2Ugcm91bmQgdXAgdG8gdGhlIG5lYXJlc3QgOC4KICAqCiAgKiBSZS1jbG9ja2luZyBieSB0aGUgWEdYUyBvbiBSWCBjYW4gcmVkdWNlIGFuIElQRyB0byAzMiBiaXRzIChoYWxmIGFuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvbmljLmMgYi9kcml2ZXJzL25ldC9zZmMvbmljLmMKaW5kZXggZGI0NDIyNC4uYjA2ZjhlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL25pYy5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9uaWMuYwpAQCAtNjIzLDEwICs2MjMsNiBAQAogICoKICAqIFRoaXMgd3JpdGVzIHRoZSBFVlFfUlBUUl9SRUcgcmVnaXN0ZXIgZm9yIHRoZSBzcGVjaWZpZWQgY2hhbm5lbCdzCiAgKiBldmVudCBxdWV1ZS4KLSAqCi0gKiBOb3RlIHRoYXQgRVZRX1JQVFJfUkVHIGNvbnRhaW5zIHRoZSBpbmRleCBvZiB0aGUgImxhc3QgcmVhZCIgZXZlbnQsCi0gKiB3aGVyZWFzIGNoYW5uZWwtPmV2ZW50cV9yZWFkX3B0ciBjb250YWlucyB0aGUgaW5kZXggb2YgdGhlICJuZXh0IHRvCi0gKiByZWFkIiBldmVudC4KICAqLwogdm9pZCBlZnhfbmljX2V2ZW50cV9yZWFkX2FjayhzdHJ1Y3QgZWZ4X2NoYW5uZWwgKmNoYW5uZWwpCiB7CkBAIC0xMzg0LDYgKzEzODAsMTUgQEAKIAkJZWZ4LT5sYXN0X2lycV9jcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwogCQlFRlhfVFJBQ0UoZWZ4LCAiSVJRICVkIG9uIENQVSAlZCBzdGF0dXMgIiBFRlhfRFdPUkRfRk1UICJcbiIsCiAJCQkgIGlycSwgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgRUZYX0RXT1JEX1ZBTChyZWcpKTsKKwl9IGVsc2UgaWYgKEVGWF9XT1JLQVJPVU5EXzE1NzgzKGVmeCkpIHsKKwkJLyogV2UgY2FuJ3QgcmV0dXJuIElSUV9IQU5ETEVEIG1vcmUgdGhhbiBvbmNlIG9uIHNlZWluZyBJU1IwPTAKKwkJICogYmVjYXVzZSB0aGlzIG1pZ2h0IGJlIGEgc2hhcmVkIGludGVycnVwdCwgYnV0IHdlIGRvIG5lZWQgdG8KKwkJICogY2hlY2sgdGhlIGNoYW5uZWwgZXZlcnkgdGltZSBhbmQgcHJlZW1wdGl2ZWx5IHJlYXJtIGl0IGlmCisJCSAqIGl0J3MgaWRsZS4gKi8KKwkJZWZ4X2Zvcl9lYWNoX2NoYW5uZWwoY2hhbm5lbCwgZWZ4KSB7CisJCQlpZiAoIWNoYW5uZWwtPndvcmtfcGVuZGluZykKKwkJCQllZnhfbmljX2V2ZW50cV9yZWFkX2FjayhjaGFubmVsKTsKKwkJfQogCX0KIAogCXJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvcXQyMDJ4X3BoeS5jIGIvZHJpdmVycy9uZXQvc2ZjL3F0MjAyeF9waHkuYwppbmRleCA2N2VlYzdhLi4xYmVlNjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvcXQyMDJ4X3BoeS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9xdDIwMnhfcGh5LmMKQEAgLTQ0NSw0ICs0NDUsNSBAQAogCS5yZW1vdmUJICAJID0gcXQyMDJ4X3BoeV9yZW1vdmUsCiAJLmdldF9zZXR0aW5ncwkgPSBxdDIwMnhfcGh5X2dldF9zZXR0aW5ncywKIAkuc2V0X3NldHRpbmdzCSA9IGVmeF9tZGlvX3NldF9zZXR0aW5ncywKKwkudGVzdF9hbGl2ZQkgPSBlZnhfbWRpb190ZXN0X2FsaXZlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9yZWdzLmggYi9kcml2ZXJzL25ldC9zZmMvcmVncy5oCmluZGV4IDg5ZDYwNmYuLjE4YTNiZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9yZWdzLmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3JlZ3MuaApAQCAtOTUsNyArOTUsNyBAQAogI2RlZmluZQlGUkZfQUFfSU5UX0FDS19LRVJfRklFTERfTEJOIDAKICNkZWZpbmUJRlJGX0FBX0lOVF9BQ0tfS0VSX0ZJRUxEX1dJRFRIIDMyCiAKLS8qIElOVF9JU1IwX1JFRzogRnVuY3Rpb24gMCBJbnRlcnJ1cHQgQWNrbm93bGVnZSBTdGF0dXMgcmVnaXN0ZXIgKi8KKy8qIElOVF9JU1IwX1JFRzogRnVuY3Rpb24gMCBJbnRlcnJ1cHQgQWNrbm93bGVkZ2UgU3RhdHVzIHJlZ2lzdGVyICovCiAjZGVmaW5lCUZSX0JaX0lOVF9JU1IwIDB4MDAwMDAwOTAKICNkZWZpbmUJRlJGX0JaX0lOVF9JU1JfUkVHX0xCTiAwCiAjZGVmaW5lCUZSRl9CWl9JTlRfSVNSX1JFR19XSURUSCA2NApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3NlbGZ0ZXN0LmMgYi9kcml2ZXJzL25ldC9zZmMvc2VsZnRlc3QuYwppbmRleCAyNTBjODgyLi5jZjAxMzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zZmMvc2VsZnRlc3QuYworKysgYi9kcml2ZXJzL25ldC9zZmMvc2VsZnRlc3QuYwpAQCAtMjQsOSArMjQsNiBAQAogI2luY2x1ZGUgIm5pYy5oIgogI2luY2x1ZGUgInNlbGZ0ZXN0LmgiCiAjaW5jbHVkZSAid29ya2Fyb3VuZHMuaCIKLSNpbmNsdWRlICJzcGkuaCIKLSNpbmNsdWRlICJpby5oIgotI2luY2x1ZGUgIm1kaW9fMTBnLmgiCiAKIC8qCiAgKiBMb29wYmFjayB0ZXN0IHBhY2tldCBzdHJ1Y3R1cmUKQEAgLTc2LDQyICs3MywxNSBAQAogICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotc3RhdGljIGludCBlZnhfdGVzdF9tZGlvKHN0cnVjdCBlZnhfbmljICplZngsIHN0cnVjdCBlZnhfc2VsZl90ZXN0cyAqdGVzdHMpCitzdGF0aWMgaW50IGVmeF90ZXN0X3BoeV9hbGl2ZShzdHJ1Y3QgZWZ4X25pYyAqZWZ4LCBzdHJ1Y3QgZWZ4X3NlbGZfdGVzdHMgKnRlc3RzKQogewogCWludCByYyA9IDA7Ci0JaW50IGRldmFkOwotCXUxNiBwaHlzaWQxLCBwaHlzaWQyOwogCi0JaWYgKGVmeC0+bWRpby5tb2RlX3N1cHBvcnQgJiBNRElPX1NVUFBPUlRTX0M0NSkKLQkJZGV2YWQgPSBfX2ZmcyhlZngtPm1kaW8ubW1kcyk7Ci0JZWxzZSBpZiAoZWZ4LT5tZGlvLm1vZGVfc3VwcG9ydCAmIE1ESU9fU1VQUE9SVFNfQzIyKQotCQlkZXZhZCA9IE1ESU9fREVWQURfTk9ORTsKLQllbHNlCi0JCXJldHVybiAwOwotCi0JbXV0ZXhfbG9jaygmZWZ4LT5tYWNfbG9jayk7Ci0JdGVzdHMtPm1kaW8gPSAtMTsKLQotCXBoeXNpZDEgPSBlZnhfbWRpb19yZWFkKGVmeCwgZGV2YWQsIE1ESU9fREVWSUQxKTsKLQlwaHlzaWQyID0gZWZ4X21kaW9fcmVhZChlZngsIGRldmFkLCBNRElPX0RFVklEMik7Ci0KLQlpZiAoKHBoeXNpZDEgPT0gMHgwMDAwKSB8fCAocGh5c2lkMSA9PSAweGZmZmYpIHx8Ci0JICAgIChwaHlzaWQyID09IDB4MDAwMCkgfHwgKHBoeXNpZDIgPT0gMHhmZmZmKSkgewotCQlFRlhfRVJSKGVmeCwgIm5vIE1ESU8gUEhZIHByZXNlbnQgd2l0aCBJRCAlZFxuIiwKLQkJCWVmeC0+bWRpby5wcnRhZCk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7CisJaWYgKGVmeC0+cGh5X29wLT50ZXN0X2FsaXZlKSB7CisJCXJjID0gZWZ4LT5waHlfb3AtPnRlc3RfYWxpdmUoZWZ4KTsKKwkJdGVzdHMtPnBoeV9hbGl2ZSA9IHJjID8gLTEgOiAxOwogCX0KIAotCWlmIChFRlhfSVMxMEcoZWZ4KSkgewotCQlyYyA9IGVmeF9tZGlvX2NoZWNrX21tZHMoZWZ4LCBlZngtPm1kaW8ubW1kcywgMCk7Ci0JCWlmIChyYykKLQkJCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCW11dGV4X3VubG9jaygmZWZ4LT5tYWNfbG9jayk7Ci0JdGVzdHMtPm1kaW8gPSByYyA/IC0xIDogMTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTI1OCw3ICsyMjgsNyBAQAogCQlyZXR1cm4gMDsKIAogCW11dGV4X2xvY2soJmVmeC0+bWFjX2xvY2spOwotCXJjID0gZWZ4LT5waHlfb3AtPnJ1bl90ZXN0cyhlZngsIHRlc3RzLT5waHksIGZsYWdzKTsKKwlyYyA9IGVmeC0+cGh5X29wLT5ydW5fdGVzdHMoZWZ4LCB0ZXN0cy0+cGh5X2V4dCwgZmxhZ3MpOwogCW11dGV4X3VubG9jaygmZWZ4LT5tYWNfbG9jayk7CiAJcmV0dXJuIHJjOwogfQpAQCAtNjg0LDcgKzY1NCw3IEBACiAJLyogT25saW5lIChpLmUuIG5vbi1kaXNydXB0aXZlKSB0ZXN0aW5nCiAJICogVGhpcyBjaGVja3MgaW50ZXJydXB0IGdlbmVyYXRpb24sIGV2ZW50IGRlbGl2ZXJ5IGFuZCBQSFkgcHJlc2VuY2UuICovCiAKLQlyYyA9IGVmeF90ZXN0X21kaW8oZWZ4LCB0ZXN0cyk7CisJcmMgPSBlZnhfdGVzdF9waHlfYWxpdmUoZWZ4LCB0ZXN0cyk7CiAJaWYgKHJjICYmICFyY190ZXN0KQogCQlyY190ZXN0ID0gcmM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NmYy9zZWxmdGVzdC5oIGIvZHJpdmVycy9uZXQvc2ZjL3NlbGZ0ZXN0LmgKaW5kZXggZjZmZWVlMC4uNjQzYmVmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2ZjL3NlbGZ0ZXN0LmgKKysrIGIvZHJpdmVycy9uZXQvc2ZjL3NlbGZ0ZXN0LmgKQEAgLTMyLDcgKzMyLDcgQEAKICAqLwogc3RydWN0IGVmeF9zZWxmX3Rlc3RzIHsKIAkvKiBvbmxpbmUgdGVzdHMgKi8KLQlpbnQgbWRpbzsKKwlpbnQgcGh5X2FsaXZlOwogCWludCBudnJhbTsKIAlpbnQgaW50ZXJydXB0OwogCWludCBldmVudHFfZG1hW0VGWF9NQVhfQ0hBTk5FTFNdOwpAQCAtNDAsNyArNDAsNyBAQAogCWludCBldmVudHFfcG9sbFtFRlhfTUFYX0NIQU5ORUxTXTsKIAkvKiBvZmZsaW5lIHRlc3RzICovCiAJaW50IHJlZ2lzdGVyczsKLQlpbnQgcGh5W0VGWF9NQVhfUEhZX1RFU1RTXTsKKwlpbnQgcGh5X2V4dFtFRlhfTUFYX1BIWV9URVNUU107CiAJc3RydWN0IGVmeF9sb29wYmFja19zZWxmX3Rlc3RzIGxvb3BiYWNrW0xPT1BCQUNLX1RFU1RfTUFYICsgMV07CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zZmMvc2llbmEuYyBiL2RyaXZlcnMvbmV0L3NmYy9zaWVuYS5jCmluZGV4IGY4YzY3NzEuLjE2MTlmYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy9zaWVuYS5jCisrKyBiL2RyaXZlcnMvbmV0L3NmYy9zaWVuYS5jCkBAIC0xMDYsMTYgKzEwNiwxMSBAQAogCWVmeC0+bWRpby5tZGlvX3JlYWQgPSBzaWVuYV9tZGlvX3JlYWQ7CiAJZWZ4LT5tZGlvLm1kaW9fd3JpdGUgPSBzaWVuYV9tZGlvX3dyaXRlOwogCi0JLyogRmlsbCBvdXQgTURJTyBzdHJ1Y3R1cmUgYW5kIGxvb3BiYWNrIG1vZGVzICovCisJLyogRmlsbCBvdXQgTURJTyBzdHJ1Y3R1cmUsIGxvb3BiYWNrIG1vZGVzLCBhbmQgaW5pdGlhbCBsaW5rIHN0YXRlICovCiAJcmMgPSBlZngtPnBoeV9vcC0+cHJvYmUoZWZ4KTsKIAlpZiAocmMgIT0gMCkKIAkJcmV0dXJuIHJjOwogCi0JLyogSW5pdGlhbCBhc3N1bXB0aW9uICovCi0JZWZ4LT5saW5rX3N0YXRlLnNwZWVkID0gMTAwMDA7Ci0JZWZ4LT5saW5rX3N0YXRlLmZkID0gdHJ1ZTsKLQllZngtPndhbnRlZF9mYyA9IEVGWF9GQ19SWCB8IEVGWF9GQ19UWDsKLQogCS8qIEFsbG9jYXRlIGJ1ZmZlciBmb3Igc3RhdHMgKi8KIAlyYyA9IGVmeF9uaWNfYWxsb2NfYnVmZmVyKGVmeCwgJmVmeC0+c3RhdHNfYnVmZmVyLAogCQkJCSAgTUNfQ01EX01BQ19OU1RBVFMgKiBzaXplb2YodTY0KSk7CkBAIC0xMzksNyArMTM0LDcgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBlZnhfbmljX3JlZ2lzdGVyX3Rlc3Qgc2llbmFfcmVnaXN0ZXJfdGVzdHNbXSA9IHsKIAl7IEZSX0FaX0FEUl9SRUdJT04sCi0JICBFRlhfT1dPUkQzMigweDAwMDFGRkZGLCAweDAwMDFGRkZGLCAweDAwMDFGRkZGLCAweDAwMDFGRkZGKSB9LAorCSAgRUZYX09XT1JEMzIoMHgwMDAzRkZGRiwgMHgwMDAzRkZGRiwgMHgwMDAzRkZGRiwgMHgwMDAzRkZGRikgfSwKIAl7IEZSX0NaX1VTUl9FVl9DRkcsCiAJICBFRlhfT1dPUkQzMigweDAwMDEwM0ZGLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwKSB9LAogCXsgRlJfQVpfUlhfQ0ZHLApAQCAtMTgxLDYgKzE3NiwxMiBAQAogCiBzdGF0aWMgaW50IHNpZW5hX3Jlc2V0X2h3KHN0cnVjdCBlZnhfbmljICplZngsIGVudW0gcmVzZXRfdHlwZSBtZXRob2QpCiB7CisJaW50IHJjOworCisJLyogUmVjb3ZlciBmcm9tIGEgZmFpbGVkIGFzc2VydGlvbiBwcmUtcmVzZXQgKi8KKwlyYyA9IGVmeF9tY2RpX2hhbmRsZV9hc3NlcnRpb24oZWZ4KTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAogCWlmIChtZXRob2QgPT0gUkVTRVRfVFlQRV9XT1JMRCkKIAkJcmV0dXJuIGVmeF9tY2RpX3Jlc2V0X21jKGVmeCk7CkBAIC01ODIsNiArNTgzLDcgQEAKIAkuc2V0X3dvbCA9IHNpZW5hX3NldF93b2wsCiAJLnJlc3VtZV93b2wgPSBzaWVuYV9pbml0X3dvbCwKIAkudGVzdF9yZWdpc3RlcnMgPSBzaWVuYV90ZXN0X3JlZ2lzdGVycywKKwkudGVzdF9udnJhbSA9IGVmeF9tY2RpX252cmFtX3Rlc3RfYWxsLAogCS5kZWZhdWx0X21hY19vcHMgPSAmZWZ4X21jZGlfbWFjX29wZXJhdGlvbnMsCiAKIAkucmV2aXNpb24gPSBFRlhfUkVWX1NJRU5BX0EwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2ZjL3RlbnhwcmVzcy5jIGIvZHJpdmVycy9uZXQvc2ZjL3RlbnhwcmVzcy5jCmluZGV4IDMwMDljMjkuLjEwZGIwNzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NmYy90ZW54cHJlc3MuYworKysgYi9kcml2ZXJzL25ldC9zZmMvdGVueHByZXNzLmMKQEAgLTg0Miw2ICs4NDIsNyBAQAogCS5nZXRfc2V0dGluZ3MJICA9IHRlbnhwcmVzc19nZXRfc2V0dGluZ3MsCiAJLnNldF9zZXR0aW5ncwkgID0gdGVueHByZXNzX3NldF9zZXR0aW5ncywKIAkuc2V0X25wYWdlX2FkdiAgICA9IHNmeDcxMDFfc2V0X25wYWdlX2FkdiwKKwkudGVzdF9hbGl2ZQkgID0gZWZ4X21kaW9fdGVzdF9hbGl2ZSwKIAkudGVzdF9uYW1lCSAgPSBzZng3MTAxX3Rlc3RfbmFtZSwKIAkucnVuX3Rlc3RzCSAgPSBzZng3MTAxX3J1bl90ZXN0cywKIH07CkBAIC04NTYsNiArODU3LDcgQEAKIAkuZ2V0X3NldHRpbmdzCSAgPSB0ZW54cHJlc3NfZ2V0X3NldHRpbmdzLAogCS5zZXRfc2V0dGluZ3MJICA9IHRlbnhwcmVzc19zZXRfc2V0dGluZ3MsCiAJLnNldF9ucGFnZV9hZHYgICAgPSBzZnQ5MDAxX3NldF9ucGFnZV9hZHYsCisJLnRlc3RfYWxpdmUJICA9IGVmeF9tZGlvX3Rlc3RfYWxpdmUsCiAJLnRlc3RfbmFtZQkgID0gc2Z0OTAwMV90ZXN0X25hbWUsCiAJLnJ1bl90ZXN0cwkgID0gc2Z0OTAwMV9ydW5fdGVzdHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2dpc2VlcS5jIGIvZHJpdmVycy9uZXQvc2dpc2VlcS5jCmluZGV4IDZiMzY0YTYuLmVkOTk5ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NnaXNlZXEuYworKysgYi9kcml2ZXJzL25ldC9zZ2lzZWVxLmMKQEAgLTY2MCw3ICs2NjAsNyBAQAogCiAJaWYoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQogCQlzcC0+bW9kZSA9IFNFRVFfUkNNRF9SQU5ZOwotCWVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCBkZXYtPm1jX2NvdW50KQorCWVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCAhbmV0ZGV2X21jX2VtcHR5KGRldikpCiAJCXNwLT5tb2RlID0gU0VFUV9SQ01EX1JCTUNBU1Q7CiAJZWxzZQogCQlzcC0+bW9kZSA9IFNFRVFfUkNNRF9SQkNBU1Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaF9ldGguYyBiL2RyaXZlcnMvbmV0L3NoX2V0aC5jCmluZGV4IDc0MDJiODUuLjQyYTM1ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NoX2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3NoX2V0aC5jCkBAIC0xNDczLDEzICsxNDczLDkgQEAKIAlpZiAocmV0KQogCQlnb3RvIG91dF91bnJlZ2lzdGVyOwogCi0JLyogcHJpdG50IGRldmljZSBpbmZvbWF0aW9uICovCi0JcHJfaW5mbygiQmFzZSBhZGRyZXNzIGF0IDB4JXgsICIsCi0JICAgICAgICh1MzIpbmRldi0+YmFzZV9hZGRyKTsKLQotCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCi0JCXByaW50aygiJTAyWDoiLCBuZGV2LT5kZXZfYWRkcltpXSk7Ci0JcHJpbnRrKCIlMDJYLCBJUlEgJWQuXG4iLCBuZGV2LT5kZXZfYWRkcltpXSwgbmRldi0+aXJxKTsKKwkvKiBwcmludCBkZXZpY2UgaW5mb21hdGlvbiAqLworCXByX2luZm8oIkJhc2UgYWRkcmVzcyBhdCAweCV4LCAlcE0sIElSUSAlZC5cbiIsCisJICAgICAgICh1MzIpbmRldi0+YmFzZV9hZGRyLCBuZGV2LT5kZXZfYWRkciwgbmRldi0+aXJxKTsKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5kZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zaXMxOTAuYyBiL2RyaXZlcnMvbmV0L3NpczE5MC5jCmluZGV4IDMxMjMzYjQuLjc2MGQ5ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NpczE5MC5jCisrKyBiL2RyaXZlcnMvbmV0L3NpczE5MC5jCkBAIC0xNyw3ICsxNyw5IEBACiAKICAgIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoaXMgZGlzdHJpYnV0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgogCi0gKi8KKyovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CkBAIC0zMiwyNSArMzQsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2RlZmluZSBuZXRfZHJ2KHAsIGFyZy4uLikJaWYgKG5ldGlmX21zZ19kcnYocCkpIFwKLQkJCQkJcHJpbnRrKGFyZykKLSNkZWZpbmUgbmV0X3Byb2JlKHAsIGFyZy4uLikJaWYgKG5ldGlmX21zZ19wcm9iZShwKSkgXAotCQkJCQlwcmludGsoYXJnKQotI2RlZmluZSBuZXRfbGluayhwLCBhcmcuLi4pCWlmIChuZXRpZl9tc2dfbGluayhwKSkgXAotCQkJCQlwcmludGsoYXJnKQotI2RlZmluZSBuZXRfaW50cihwLCBhcmcuLi4pCWlmIChuZXRpZl9tc2dfaW50cihwKSkgXAotCQkJCQlwcmludGsoYXJnKQotI2RlZmluZSBuZXRfdHhfZXJyKHAsIGFyZy4uLikJaWYgKG5ldGlmX21zZ190eF9lcnIocCkpIFwKLQkJCQkJcHJpbnRrKGFyZykKLQogI2RlZmluZSBQSFlfTUFYX0FERFIJCTMyCiAjZGVmaW5lIFBIWV9JRF9BTlkJCTB4MWYKICNkZWZpbmUgTUlJX1JFR19BTlkJCTB4MWYKIAotI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjQiCiAjZGVmaW5lIERSVl9OQU1FCQkic2lzMTkwIgogI2RlZmluZSBTSVMxOTBfRFJJVkVSX05BTUUJRFJWX05BTUUgIiBHaWdhYml0IEV0aGVybmV0IGRyaXZlciAiIERSVl9WRVJTSU9OCi0jZGVmaW5lIFBGWCBEUlZfTkFNRSAiOiAiCiAKICNkZWZpbmUgc2lzMTkwX3J4X3NrYgkJCW5ldGlmX3J4CiAjZGVmaW5lIHNpczE5MF9yeF9xdW90YShjb3VudCwgcXVvdGEpCWNvdW50CkBAIC0yOTQsNiArMjg0LDEyIEBACiAJc3RydWN0IG1paV9pZl9pbmZvIG1paV9pZjsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZpcnN0X3BoeTsKIAl1MzIgZmVhdHVyZXM7CisJdTMyIG5lZ290aWF0ZWRfbHBhOworCWVudW0geworCQlMTktfT0ZGLAorCQlMTktfT04sCisJCUxOS19BVVRPTkVHLAorCX0gbGlua19zdGF0dXM7CiB9OwogCiBzdHJ1Y3Qgc2lzMTkwX3BoeSB7CkBAIC0zMzQsNyArMzMwLDcgQEAKIAl7ICJTaVMgMTkxIFBDSSBHaWdhYml0IEV0aGVybmV0IGFkYXB0ZXIiIH0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2lzMTkwX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzaXMxOTBfcGNpX3RibCkgPSB7CiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU0ksIDB4MDE5MCksIDAsIDAsIDAgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TSSwgMHgwMTkxKSwgMCwgMCwgMSB9LAogCXsgMCwgfSwKQEAgLTM4MSw3ICszNzcsNyBAQAogCX0KIAogCWlmIChpID4gOTkpCi0JCXByaW50ayhLRVJOX0VSUiBQRlggIlBIWSBjb21tYW5kIGZhaWxlZCAhXG4iKTsKKwkJcHJfZXJyKCJQSFkgY29tbWFuZCBmYWlsZWQgIVxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIG1kaW9fd3JpdGUodm9pZCBfX2lvbWVtICppb2FkZHIsIGludCBwaHlfaWQsIGludCByZWcsIGludCB2YWwpCkBAIC00OTMsMTggKzQ4OSwyNCBAQAogewogCXUzMiByeF9idWZfc3ogPSB0cC0+cnhfYnVmX3N6OwogCXN0cnVjdCBza19idWZmICpza2I7CisJZG1hX2FkZHJfdCBtYXBwaW5nOwogCiAJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYih0cC0+ZGV2LCByeF9idWZfc3opOwotCWlmIChsaWtlbHkoc2tiKSkgewotCQlkbWFfYWRkcl90IG1hcHBpbmc7Ci0KLQkJbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKHRwLT5wY2lfZGV2LCBza2ItPmRhdGEsIHRwLT5yeF9idWZfc3osCi0JCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlzaXMxOTBfbWFwX3RvX2FzaWMoZGVzYywgbWFwcGluZywgcnhfYnVmX3N6KTsKLQl9IGVsc2UKLQkJc2lzMTkwX21ha2VfdW51c2FibGVfYnlfYXNpYyhkZXNjKTsKKwlpZiAodW5saWtlbHkoIXNrYikpCisJCWdvdG8gc2tiX2FsbG9jX2ZhaWxlZDsKKwltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUodHAtPnBjaV9kZXYsIHNrYi0+ZGF0YSwgdHAtPnJ4X2J1Zl9zeiwKKwkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcih0cC0+cGNpX2RldiwgbWFwcGluZykpCisJCWdvdG8gb3V0OworCXNpczE5MF9tYXBfdG9fYXNpYyhkZXNjLCBtYXBwaW5nLCByeF9idWZfc3opOwogCiAJcmV0dXJuIHNrYjsKKworb3V0OgorCWRldl9rZnJlZV9za2JfYW55KHNrYik7Citza2JfYWxsb2NfZmFpbGVkOgorCXNpczE5MF9tYWtlX3VudXNhYmxlX2J5X2FzaWMoZGVzYyk7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB1MzIgc2lzMTkwX3J4X2ZpbGwoc3RydWN0IHNpczE5MF9wcml2YXRlICp0cCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTU4OSw4ICs1OTEsNyBAQAogCiAJCXN0YXR1cyA9IGxlMzJfdG9fY3B1KGRlc2MtPlBTaXplKTsKIAotCQkvLyBuZXRfaW50cih0cCwgS0VSTl9JTkZPICIlczogUnggUFNpemUgPSAlMDh4LlxuIiwgZGV2LT5uYW1lLAotCQkvLwkgc3RhdHVzKTsKKwkJLy9uZXRpZl9pbmZvKHRwLCBpbnRyLCBkZXYsICJSeCBQU2l6ZSA9ICUwOHhcbiIsIHN0YXR1cyk7CiAKIAkJaWYgKHNpczE5MF9yeF9wa3RfZXJyKHN0YXR1cywgc3RhdHMpIDwgMCkKIAkJCXNpczE5MF9naXZlX3RvX2FzaWMoZGVzYywgdHAtPnJ4X2J1Zl9zeik7CkBAIC02MDEsOSArNjAyLDggQEAKIAkJCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdHAtPnBjaV9kZXY7CiAKIAkJCWlmICh1bmxpa2VseShwa3Rfc2l6ZSA+IHRwLT5yeF9idWZfc3opKSB7Ci0JCQkJbmV0X2ludHIodHAsIEtFUk5fSU5GTwotCQkJCQkgIiVzOiAoZnJhZykgc3RhdHVzID0gJTA4eC5cbiIsCi0JCQkJCSBkZXYtPm5hbWUsIHN0YXR1cyk7CisJCQkJbmV0aWZfaW5mbyh0cCwgaW50ciwgZGV2LAorCQkJCQkgICAiKGZyYWcpIHN0YXR1cyA9ICUwOHhcbiIsIHN0YXR1cyk7CiAJCQkJc3RhdHMtPnJ4X2Ryb3BwZWQrKzsKIAkJCQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJCXNpczE5MF9naXZlX3RvX2FzaWMoZGVzYywgdHAtPnJ4X2J1Zl9zeik7CkBAIC02MzcsMTIgKzYzNywxMiBAQAogCXRwLT5jdXJfcnggPSBjdXJfcng7CiAKIAlkZWx0YSA9IHNpczE5MF9yeF9maWxsKHRwLCBkZXYsIHRwLT5kaXJ0eV9yeCwgdHAtPmN1cl9yeCk7Ci0JaWYgKCFkZWx0YSAmJiBjb3VudCAmJiBuZXRpZl9tc2dfaW50cih0cCkpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBubyBSeCBidWZmZXIgYWxsb2NhdGVkLlxuIiwgZGV2LT5uYW1lKTsKKwlpZiAoIWRlbHRhICYmIGNvdW50KQorCQluZXRpZl9pbmZvKHRwLCBpbnRyLCBkZXYsICJubyBSeCBidWZmZXIgYWxsb2NhdGVkXG4iKTsKIAl0cC0+ZGlydHlfcnggKz0gZGVsdGE7CiAKLQlpZiAoKCh0cC0+ZGlydHlfcnggKyBOVU1fUlhfREVTQykgPT0gdHAtPmN1cl9yeCkgJiYgbmV0aWZfbXNnX2ludHIodHApKQotCQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IFJ4IGJ1ZmZlcnMgZXhoYXVzdGVkLlxuIiwgZGV2LT5uYW1lKTsKKwlpZiAoKHRwLT5kaXJ0eV9yeCArIE5VTV9SWF9ERVNDKSA9PSB0cC0+Y3VyX3J4KQorCQluZXRpZl9lbWVyZyh0cCwgaW50ciwgZGV2LCAiUnggYnVmZmVycyBleGhhdXN0ZWRcbiIpOwogCiAJcmV0dXJuIGNvdW50OwogfQpAQCAtNzUxLDEwICs3NTEsMTEgQEAKIAogCVNJU19XMzIoSW50clN0YXR1cywgc3RhdHVzKTsKIAotCS8vIG5ldF9pbnRyKHRwLCBLRVJOX0lORk8gIiVzOiBzdGF0dXMgPSAlMDh4LlxuIiwgZGV2LT5uYW1lLCBzdGF0dXMpOworLy8JbmV0aWZfaW5mbyh0cCwgaW50ciwgZGV2LCAic3RhdHVzID0gJTA4eFxuIiwgc3RhdHVzKTsKIAogCWlmIChzdGF0dXMgJiBMaW5rQ2hhbmdlKSB7Ci0JCW5ldF9pbnRyKHRwLCBLRVJOX0lORk8gIiVzOiBsaW5rIGNoYW5nZS5cbiIsIGRldi0+bmFtZSk7CisJCW5ldGlmX2luZm8odHAsIGludHIsIGRldiwgImxpbmsgY2hhbmdlXG4iKTsKKwkJZGVsX3RpbWVyKCZ0cC0+dGltZXIpOwogCQlzY2hlZHVsZV93b3JrKCZ0cC0+cGh5X3Rhc2spOwogCX0KIApAQCAtODQxLDE5ICs4NDIsMTcgQEAKIAkJCUFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE11bHRpY2FzdCB8IEFjY2VwdE15UGh5cyB8CiAJCQlBY2NlcHRBbGxQaHlzOwogCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAweGZmZmZmZmZmOwotCX0gZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSB8fAorCX0gZWxzZSBpZiAoKG5ldGRldl9tY19jb3VudChkZXYpID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKIAkJICAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCS8qIFRvbyBtYW55IHRvIGZpbHRlciBwZXJmZWN0bHkgLS0gYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCQlyeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXVsdGljYXN0IHwgQWNjZXB0TXlQaHlzOwogCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAweGZmZmZmZmZmOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwotCQl1bnNpZ25lZCBpbnQgaTsKIAogCQlyeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXlQaHlzOwogCQltY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAwOwotCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKLQkJICAgICBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQkJaW50IGJpdF9uciA9CiAJCQkJZXRoZXJfY3JjKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSAmIDB4M2Y7CiAJCQltY19maWx0ZXJbYml0X25yID4+IDVdIHw9IDEgPDwgKGJpdF9uciAmIDMxKTsKQEAgLTkyOSwxMyArOTI4LDE1IEBACiAJaWYgKHZhbCAmIEJNQ1JfUkVTRVQpIHsKIAkJLy8gRklYTUU6IG5lZWRsZXNzbHkgaGlnaCA/ICAtLSBGUiAwMi8wNy8yMDA1CiAJCW1vZF90aW1lcigmdHAtPnRpbWVyLCBqaWZmaWVzICsgSFovMTApOwotCX0gZWxzZSBpZiAoIShtZGlvX3JlYWRfbGF0Y2hlZChpb2FkZHIsIHBoeV9pZCwgTUlJX0JNU1IpICYKLQkJICAgICBCTVNSX0FORUdDT01QTEVURSkpIHsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCXZhbCA9IG1kaW9fcmVhZF9sYXRjaGVkKGlvYWRkciwgcGh5X2lkLCBNSUlfQk1TUik7CisJaWYgKCEodmFsICYgQk1TUl9BTkVHQ09NUExFVEUpICYmIHRwLT5saW5rX3N0YXR1cyAhPSBMTktfQVVUT05FRykgewogCQluZXRpZl9jYXJyaWVyX29mZihkZXYpOwotCQluZXRfbGluayh0cCwgS0VSTl9XQVJOSU5HICIlczogYXV0by1uZWdvdGlhdGluZy4uLlxuIiwKLQkJCSBkZXYtPm5hbWUpOwotCQltb2RfdGltZXIoJnRwLT50aW1lciwgamlmZmllcyArIFNJUzE5MF9QSFlfVElNRU9VVCk7Ci0JfSBlbHNlIHsKKwkJbmV0aWZfd2Fybih0cCwgbGluaywgZGV2LCAiYXV0by1uZWdvdGlhdGluZy4uLlxuIik7CisJCXRwLT5saW5rX3N0YXR1cyA9IExOS19BVVRPTkVHOworCX0gZWxzZSBpZiAoKHZhbCAmIEJNU1JfTFNUQVRVUykgJiYgdHAtPmxpbmtfc3RhdHVzICE9IExOS19PTikgewogCQkvKiBSZWpvaWNlICEgKi8KIAkJc3RydWN0IHsKIAkJCWludCB2YWw7CkBAIC05NTksMTMgKzk2MCwxMyBAQAogCQl1MTYgYWR2LCBhdXRvZXhwLCBnaWdhZHYsIGdpZ3JlYzsKIAogCQl2YWwgPSBtZGlvX3JlYWQoaW9hZGRyLCBwaHlfaWQsIDB4MWYpOwotCQluZXRfbGluayh0cCwgS0VSTl9JTkZPICIlczogbWlpIGV4dCA9ICUwNHguXG4iLCBkZXYtPm5hbWUsIHZhbCk7CisJCW5ldGlmX2luZm8odHAsIGxpbmssIGRldiwgIm1paSBleHQgPSAlMDR4XG4iLCB2YWwpOwogCiAJCXZhbCA9IG1kaW9fcmVhZChpb2FkZHIsIHBoeV9pZCwgTUlJX0xQQSk7CiAJCWFkdiA9IG1kaW9fcmVhZChpb2FkZHIsIHBoeV9pZCwgTUlJX0FEVkVSVElTRSk7CiAJCWF1dG9leHAgPSBtZGlvX3JlYWQoaW9hZGRyLCBwaHlfaWQsIE1JSV9FWFBBTlNJT04pOwotCQluZXRfbGluayh0cCwgS0VSTl9JTkZPICIlczogbWlpIGxwYT0lMDR4IGFkdj0lMDR4IGV4cD0lMDR4LlxuIiwKLQkJCSBkZXYtPm5hbWUsIHZhbCwgYWR2LCBhdXRvZXhwKTsKKwkJbmV0aWZfaW5mbyh0cCwgbGluaywgZGV2LCAibWlpIGxwYT0lMDR4IGFkdj0lMDR4IGV4cD0lMDR4XG4iLAorCQkJICAgdmFsLCBhZHYsIGF1dG9leHApOwogCiAJCWlmICh2YWwgJiBMUEFfTlBBR0UgJiYgYXV0b2V4cCAmIEVYUEFOU0lPTl9OV0FZKSB7CiAJCQkvKiBjaGVjayBmb3IgZ2lnYWJpdCBzcGVlZCAqLwpAQCAtMTAwNCwxMCArMTAwNSwxNCBAQAogCQkJU0lTX1czMihSR0RlbGF5LCAweDA0NDApOwogCQl9CiAKLQkJbmV0X2xpbmsodHAsIEtFUk5fSU5GTyAiJXM6IGxpbmsgb24gJXMgbW9kZS5cbiIsIGRldi0+bmFtZSwKLQkJCSBwLT5tc2cpOworCQl0cC0+bmVnb3RpYXRlZF9scGEgPSBwLT52YWw7CisKKwkJbmV0aWZfaW5mbyh0cCwgbGluaywgZGV2LCAibGluayBvbiAlcyBtb2RlXG4iLCBwLT5tc2cpOwogCQluZXRpZl9jYXJyaWVyX29uKGRldik7Ci0JfQorCQl0cC0+bGlua19zdGF0dXMgPSBMTktfT047CisJfSBlbHNlIGlmICghKHZhbCAmIEJNU1JfTFNUQVRVUykgJiYgdHAtPmxpbmtfc3RhdHVzICE9IExOS19BVVRPTkVHKQorCQl0cC0+bGlua19zdGF0dXMgPSBMTktfT0ZGOworCW1vZF90aW1lcigmdHAtPnRpbWVyLCBqaWZmaWVzICsgU0lTMTkwX1BIWV9USU1FT1VUKTsKIAogb3V0X3VubG9jazoKIAlydG5sX3VubG9jaygpOwpAQCAtMTE5MSwxMyArMTE5NiwxNyBAQAogCiAJaWYgKHVubGlrZWx5KGxlMzJfdG9fY3B1KGRlc2MtPnN0YXR1cykgJiBPV05iaXQpKSB7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLQkJbmV0X3R4X2Vycih0cCwgS0VSTl9FUlIgUEZYCi0JCQkgICAiJXM6IEJVRyEgVHggUmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iLAotCQkJICAgZGV2LT5uYW1lKTsKKwkJbmV0aWZfZXJyKHRwLCB0eF9lcnIsIGRldiwKKwkJCSAgIkJVRyEgVHggUmluZyBmdWxsIHdoZW4gcXVldWUgYXdha2UhXG4iKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KIAogCW1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZSh0cC0+cGNpX2Rldiwgc2tiLT5kYXRhLCBsZW4sIFBDSV9ETUFfVE9ERVZJQ0UpOworCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3IodHAtPnBjaV9kZXYsIG1hcHBpbmcpKSB7CisJCW5ldGlmX2Vycih0cCwgdHhfZXJyLCBkZXYsCisJCQkJIlBDSSBtYXBwaW5nIGZhaWxlZCwgZHJvcHBpbmcgcGFja2V0Iik7CisJCXJldHVybiBORVRERVZfVFhfQlVTWTsKKwl9CiAKIAl0cC0+VHhfc2tidWZmW2VudHJ5XSA9IHNrYjsKIApAQCAtMTIxMSw2ICsxMjIwLDEyIEBACiAJd21iKCk7CiAKIAlkZXNjLT5zdGF0dXMgPSBjcHVfdG9fbGUzMihPV05iaXQgfCBJTlRiaXQgfCBERUZiaXQgfCBDUkNiaXQgfCBQQURiaXQpOworCWlmICh0cC0+bmVnb3RpYXRlZF9scGEgJiAoTFBBXzEwMDBIQUxGIHwgTFBBXzEwMEhBTEYgfCBMUEFfMTBIQUxGKSkgeworCQkvKiBIYWxmIER1cGxleCAqLworCQlkZXNjLT5zdGF0dXMgfD0gY3B1X3RvX2xlMzIoQ09MRU4gfCBDUlNFTiB8IEJLRkVOKTsKKwkJaWYgKHRwLT5uZWdvdGlhdGVkX2xwYSAmIChMUEFfMTAwMEhBTEYgfCBMUEFfMTAwMEZVTEwpKQorCQkJZGVzYy0+c3RhdHVzIHw9IGNwdV90b19sZTMyKEVYVEVOIHwgQlNURU4pOyAvKiBnaWdhYml0IEhEICovCisJfQogCiAJdHAtPmN1cl90eCsrOwogCkBAIC0xMjg3LDkgKzEzMDIsOSBAQAogCiAJaWYgKG1paV9pZi0+cGh5X2lkICE9IHBoeV9kZWZhdWx0LT5waHlfaWQpIHsKIAkJbWlpX2lmLT5waHlfaWQgPSBwaHlfZGVmYXVsdC0+cGh5X2lkOwotCQluZXRfcHJvYmUodHAsIEtFUk5fSU5GTwotCQkgICAgICAgIiVzOiBVc2luZyB0cmFuc2NlaXZlciBhdCBhZGRyZXNzICVkIGFzIGRlZmF1bHQuXG4iLAotCQkgICAgICAgcGNpX25hbWUodHAtPnBjaV9kZXYpLCBtaWlfaWYtPnBoeV9pZCk7CisJCWlmIChuZXRpZl9tc2dfcHJvYmUodHApKQorCQkJcHJfaW5mbygiJXM6IFVzaW5nIHRyYW5zY2VpdmVyIGF0IGFkZHJlc3MgJWQgYXMgZGVmYXVsdFxuIiwKKwkJCQlwY2lfbmFtZSh0cC0+cGNpX2RldiksIG1paV9pZi0+cGh5X2lkKTsKIAl9CiAKIAlzdGF0dXMgPSBtZGlvX3JlYWQoaW9hZGRyLCBtaWlfaWYtPnBoeV9pZCwgTUlJX0JNQ1IpOwpAQCAtMTMyNywxNCArMTM0MiwxNSBAQAogCQkJKChtaWlfc3RhdHVzICYgKEJNU1JfMTAwRlVMTCB8IEJNU1JfMTAwSEFMRikpID8KIAkJCQlMQU4gOiBIT01FKSA6IHAtPnR5cGU7CiAJCXRwLT5mZWF0dXJlcyB8PSBwLT5mZWF0dXJlOwotCQluZXRfcHJvYmUodHAsIEtFUk5fSU5GTyAiJXM6ICVzIHRyYW5zY2VpdmVyIGF0IGFkZHJlc3MgJWQuXG4iLAotCQkJcGNpX25hbWUodHAtPnBjaV9kZXYpLCBwLT5uYW1lLCBwaHlfaWQpOworCQlpZiAobmV0aWZfbXNnX3Byb2JlKHRwKSkKKwkJCXByX2luZm8oIiVzOiAlcyB0cmFuc2NlaXZlciBhdCBhZGRyZXNzICVkXG4iLAorCQkJCXBjaV9uYW1lKHRwLT5wY2lfZGV2KSwgcC0+bmFtZSwgcGh5X2lkKTsKIAl9IGVsc2UgewogCQlwaHktPnR5cGUgPSBVTktOT1dOOwotCQluZXRfcHJvYmUodHAsIEtFUk5fSU5GTwotCQkJIiVzOiB1bmtub3duIFBIWSAweCV4OjB4JXggdHJhbnNjZWl2ZXIgYXQgYWRkcmVzcyAlZFxuIiwKLQkJCXBjaV9uYW1lKHRwLT5wY2lfZGV2KSwKLQkJCXBoeS0+aWRbMF0sIChwaHktPmlkWzFdICYgMHhmZmYwKSwgcGh5X2lkKTsKKwkJaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkpCisJCQlwcl9pbmZvKCIlczogdW5rbm93biBQSFkgMHgleDoweCV4IHRyYW5zY2VpdmVyIGF0IGFkZHJlc3MgJWRcbiIsCisJCQkJcGNpX25hbWUodHAtPnBjaV9kZXYpLAorCQkJCXBoeS0+aWRbMF0sIChwaHktPmlkWzFdICYgMHhmZmYwKSwgcGh5X2lkKTsKIAl9CiB9CiAKQEAgLTEzOTgsOCArMTQxNCw5IEBACiAJfQogCiAJaWYgKGxpc3RfZW1wdHkoJnRwLT5maXJzdF9waHkpKSB7Ci0JCW5ldF9wcm9iZSh0cCwgS0VSTl9JTkZPICIlczogTm8gTUlJIHRyYW5zY2VpdmVycyBmb3VuZCFcbiIsCi0JCQkgIHBjaV9uYW1lKHRwLT5wY2lfZGV2KSk7CisJCWlmIChuZXRpZl9tc2dfcHJvYmUodHApKQorCQkJcHJfaW5mbygiJXM6IE5vIE1JSSB0cmFuc2NlaXZlcnMgZm91bmQhXG4iLAorCQkJCXBjaV9uYW1lKHRwLT5wY2lfZGV2KSk7CiAJCXJjID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTQ0NSw3ICsxNDYyLDggQEAKIAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqdHApKTsKIAlpZiAoIWRldikgewotCQluZXRfZHJ2KCZkZWJ1ZywgS0VSTl9FUlIgUEZYICJ1bmFibGUgdG8gYWxsb2MgbmV3IGV0aGVybmV0XG4iKTsKKwkJaWYgKG5ldGlmX21zZ19kcnYoJmRlYnVnKSkKKwkJCXByX2VycigidW5hYmxlIHRvIGFsbG9jIG5ldyBldGhlcm5ldFxuIik7CiAJCXJjID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0XzA7CiAJfQpAQCAtMTQ1OCwzNCArMTQ3NiwzOSBAQAogCiAJcmMgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmMgPCAwKSB7Ci0JCW5ldF9wcm9iZSh0cCwgS0VSTl9FUlIgIiVzOiBlbmFibGUgZmFpbHVyZVxuIiwgcGNpX25hbWUocGRldikpOworCQlpZiAobmV0aWZfbXNnX3Byb2JlKHRwKSkKKwkJCXByX2VycigiJXM6IGVuYWJsZSBmYWlsdXJlXG4iLCBwY2lfbmFtZShwZGV2KSk7CiAJCWdvdG8gZXJyX2ZyZWVfZGV2XzE7CiAJfQogCiAJcmMgPSAtRU5PREVWOwogCiAJaWYgKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDApICYgSU9SRVNPVVJDRV9NRU0pKSB7Ci0JCW5ldF9wcm9iZSh0cCwgS0VSTl9FUlIgIiVzOiByZWdpb24gIzAgaXMgbm8gTU1JTyByZXNvdXJjZS5cbiIsCi0JCQkgIHBjaV9uYW1lKHBkZXYpKTsKKwkJaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkpCisJCQlwcl9lcnIoIiVzOiByZWdpb24gIzAgaXMgbm8gTU1JTyByZXNvdXJjZVxuIiwKKwkJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CiAJCWdvdG8gZXJyX3BjaV9kaXNhYmxlXzI7CiAJfQogCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApIDwgU0lTMTkwX1JFR1NfU0laRSkgewotCQluZXRfcHJvYmUodHAsIEtFUk5fRVJSICIlczogaW52YWxpZCBQQ0kgcmVnaW9uIHNpemUocykuXG4iLAotCQkJICBwY2lfbmFtZShwZGV2KSk7CisJCWlmIChuZXRpZl9tc2dfcHJvYmUodHApKQorCQkJcHJfZXJyKCIlczogaW52YWxpZCBQQ0kgcmVnaW9uIHNpemUocylcbiIsCisJCQkgICAgICAgcGNpX25hbWUocGRldikpOwogCQlnb3RvIGVycl9wY2lfZGlzYWJsZV8yOwogCX0KIAogCXJjID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTkFNRSk7CiAJaWYgKHJjIDwgMCkgewotCQluZXRfcHJvYmUodHAsIEtFUk5fRVJSIFBGWCAiJXM6IGNvdWxkIG5vdCByZXF1ZXN0IHJlZ2lvbnMuXG4iLAotCQkJICBwY2lfbmFtZShwZGV2KSk7CisJCWlmIChuZXRpZl9tc2dfcHJvYmUodHApKQorCQkJcHJfZXJyKCIlczogY291bGQgbm90IHJlcXVlc3QgcmVnaW9uc1xuIiwKKwkJCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CiAJCWdvdG8gZXJyX3BjaV9kaXNhYmxlXzI7CiAJfQogCiAJcmMgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOwogCWlmIChyYyA8IDApIHsKLQkJbmV0X3Byb2JlKHRwLCBLRVJOX0VSUiAiJXM6IERNQSBjb25maWd1cmF0aW9uIGZhaWxlZC5cbiIsCi0JCQkgIHBjaV9uYW1lKHBkZXYpKTsKKwkJaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkpCisJCQlwcl9lcnIoIiVzOiBETUEgY29uZmlndXJhdGlvbiBmYWlsZWRcbiIsCisJCQkgICAgICAgcGNpX25hbWUocGRldikpOwogCQlnb3RvIGVycl9mcmVlX3Jlc18zOwogCX0KIApAQCAtMTQ5MywxNCArMTUxNiwxNiBAQAogCiAJaW9hZGRyID0gaW9yZW1hcChwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksIFNJUzE5MF9SRUdTX1NJWkUpOwogCWlmICghaW9hZGRyKSB7Ci0JCW5ldF9wcm9iZSh0cCwgS0VSTl9FUlIgIiVzOiBjYW5ub3QgcmVtYXAgTU1JTywgYWJvcnRpbmdcbiIsCi0JCQkgIHBjaV9uYW1lKHBkZXYpKTsKKwkJaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkpCisJCQlwcl9lcnIoIiVzOiBjYW5ub3QgcmVtYXAgTU1JTywgYWJvcnRpbmdcbiIsCisJCQkgICAgICAgcGNpX25hbWUocGRldikpOwogCQlyYyA9IC1FSU87CiAJCWdvdG8gZXJyX2ZyZWVfcmVzXzM7CiAJfQogCiAJdHAtPnBjaV9kZXYgPSBwZGV2OwogCXRwLT5tbWlvX2FkZHIgPSBpb2FkZHI7CisJdHAtPmxpbmtfc3RhdHVzID0gTE5LX09GRjsKIAogCXNpczE5MF9pcnFfbWFza19hbmRfYWNrKGlvYWRkcik7CiAKQEAgLTE1MzAsOSArMTU1NSw4IEBACiAJaWYgKHRtcDggJiBDbWRUeEVuYikKIAkJU0lTX1c4KFR4Q29udHJvbCwgdG1wOCAmIH5DbWRUeEVuYik7CiAKLQotCW5ldF90eF9lcnIodHAsIEtFUk5fSU5GTyAiJXM6IFRyYW5zbWl0IHRpbWVvdXQsIHN0YXR1cyAlMDh4ICUwOHguXG4iLAotCQkgICBkZXYtPm5hbWUsIFNJU19SMzIoVHhDb250cm9sKSwgU0lTX1IzMihUeFN0cykpOworCW5ldGlmX2luZm8odHAsIHR4X2VyciwgZGV2LCAiVHJhbnNtaXQgdGltZW91dCwgc3RhdHVzICUwOHggJTA4eFxuIiwKKwkJICAgU0lTX1IzMihUeENvbnRyb2wpLCBTSVNfUjMyKFR4U3RzKSk7CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgYnkgY2xlYXJpbmcgdGhlIGludGVycnVwdCBtYXNrLiAqLwogCVNJU19XMzIoSW50ck1hc2ssIDB4MDAwMCk7CkBAIC0xNTYxLDE1ICsxNTg1LDE2IEBACiAJdTE2IHNpZzsKIAlpbnQgaTsKIAotCW5ldF9wcm9iZSh0cCwgS0VSTl9JTkZPICIlczogUmVhZCBNQUMgYWRkcmVzcyBmcm9tIEVFUFJPTVxuIiwKLQkJICBwY2lfbmFtZShwZGV2KSk7CisJaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkpCisJCXByX2luZm8oIiVzOiBSZWFkIE1BQyBhZGRyZXNzIGZyb20gRUVQUk9NXG4iLCBwY2lfbmFtZShwZGV2KSk7CiAKIAkvKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgaXMgYSBzYW5lIEVFUFJPTSAqLwogCXNpZyA9ICh1MTYpIHNpczE5MF9yZWFkX2VlcHJvbShpb2FkZHIsIEVFUFJPTVNpZ25hdHVyZSk7CiAKIAlpZiAoKHNpZyA9PSAweGZmZmYpIHx8IChzaWcgPT0gMHgwMDAwKSkgewotCQluZXRfcHJvYmUodHAsIEtFUk5fSU5GTyAiJXM6IEVycm9yIEVFUFJPTSByZWFkICV4LlxuIiwKLQkJCSAgcGNpX25hbWUocGRldiksIHNpZyk7CisJCWlmIChuZXRpZl9tc2dfcHJvYmUodHApKQorCQkJcHJfaW5mbygiJXM6IEVycm9yIEVFUFJPTSByZWFkICV4XG4iLAorCQkJCXBjaV9uYW1lKHBkZXYpLCBzaWcpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTE2MDMsOCArMTYyOCw4IEBACiAJdTggcmVnLCB0bXA4OwogCXVuc2lnbmVkIGludCBpOwogCi0JbmV0X3Byb2JlKHRwLCBLRVJOX0lORk8gIiVzOiBSZWFkIE1BQyBhZGRyZXNzIGZyb20gQVBDLlxuIiwKLQkJICBwY2lfbmFtZShwZGV2KSk7CisJaWYgKG5ldGlmX21zZ19wcm9iZSh0cCkpCisJCXByX2luZm8oIiVzOiBSZWFkIE1BQyBhZGRyZXNzIGZyb20gQVBDXG4iLCBwY2lfbmFtZShwZGV2KSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpZHMpOyBpKyspIHsKIAkJaXNhX2JyaWRnZSA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfU0ksIGlkc1tpXSwgTlVMTCk7CkBAIC0xNjEzLDggKzE2MzgsOSBAQAogCX0KIAogCWlmICghaXNhX2JyaWRnZSkgewotCQluZXRfcHJvYmUodHAsIEtFUk5fSU5GTyAiJXM6IENhbiBub3QgZmluZCBJU0EgYnJpZGdlLlxuIiwKLQkJCSAgcGNpX25hbWUocGRldikpOworCQlpZiAobmV0aWZfbXNnX3Byb2JlKHRwKSkKKwkJCXByX2luZm8oIiVzOiBDYW4gbm90IGZpbmQgSVNBIGJyaWRnZVxuIiwKKwkJCQlwY2lfbmFtZShwZGV2KSk7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTY5NSw3ICsxNzIxLDcgQEAKIAlpbnQgcGh5X2lkID0gdHAtPm1paV9pZi5waHlfaWQ7CiAJaW50IHZhbDsKIAotCW5ldF9saW5rKHRwLCBLRVJOX0lORk8gIiVzOiBFbmFibGluZyBBdXRvLW5lZ290aWF0aW9uLlxuIiwgZGV2LT5uYW1lKTsKKwluZXRpZl9pbmZvKHRwLCBsaW5rLCBkZXYsICJFbmFibGluZyBBdXRvLW5lZ290aWF0aW9uXG4iKTsKIAogCXZhbCA9IG1kaW9fcmVhZChpb2FkZHIsIHBoeV9pZCwgTUlJX0FEVkVSVElTRSk7CiAKQEAgLTE4MjIsNyArMTg0OCw4IEBACiAJaW50IHJjOwogCiAJaWYgKCFwcmludGVkX3ZlcnNpb24pIHsKLQkJbmV0X2RydigmZGVidWcsIEtFUk5fSU5GTyBTSVMxOTBfRFJJVkVSX05BTUUgIiBsb2FkZWQuXG4iKTsKKwkJaWYgKG5ldGlmX21zZ19kcnYoJmRlYnVnKSkKKwkJCXByX2luZm8oU0lTMTkwX0RSSVZFUl9OQU1FICIgbG9hZGVkXG4iKTsKIAkJcHJpbnRlZF92ZXJzaW9uID0gMTsKIAl9CiAKQEAgLTE4NjIsMTIgKzE4ODksMTQgQEAKIAlpZiAocmMgPCAwKQogCQlnb3RvIGVycl9yZW1vdmVfbWlpOwogCi0JbmV0X3Byb2JlKHRwLCBLRVJOX0lORk8gIiVzOiAlcyBhdCAlcCAoSVJROiAlZCksICVwTVxuIiwKLQkJICBwY2lfbmFtZShwZGV2KSwgc2lzX2NoaXBfaW5mb1tlbnQtPmRyaXZlcl9kYXRhXS5uYW1lLAotCQkgIGlvYWRkciwgZGV2LT5pcnEsIGRldi0+ZGV2X2FkZHIpOwotCi0JbmV0X3Byb2JlKHRwLCBLRVJOX0lORk8gIiVzOiAlcyBtb2RlLlxuIiwgZGV2LT5uYW1lLAotCQkgICh0cC0+ZmVhdHVyZXMgJiBGX0hBU19SR01JSSkgPyAiUkdNSUkiIDogIkdNSUkiKTsKKwlpZiAobmV0aWZfbXNnX3Byb2JlKHRwKSkgeworCQluZXRkZXZfaW5mbyhkZXYsICIlczogJXMgYXQgJXAgKElSUTogJWQpLCAlcE1cbiIsCisJCQkgICAgcGNpX25hbWUocGRldiksCisJCQkgICAgc2lzX2NoaXBfaW5mb1tlbnQtPmRyaXZlcl9kYXRhXS5uYW1lLAorCQkJICAgIGlvYWRkciwgZGV2LT5pcnEsIGRldi0+ZGV2X2FkZHIpOworCQluZXRkZXZfaW5mbyhkZXYsICIlcyBtb2RlLlxuIiwKKwkJCSAgICAodHAtPmZlYXR1cmVzICYgRl9IQVNfUkdNSUkpID8gIlJHTUlJIiA6ICJHTUlJIik7CisJfQogCiAJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2lzOTAwLmMgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwppbmRleCA3MzYwZDRiLi5jYzBjNzMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zaXM5MDAuYworKysgYi9kcml2ZXJzL25ldC9zaXM5MDAuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJIlNpUyA5MDAgUENJIEZhc3QgRXRoZXJuZXQiLAogCSJTaVMgNzAxNiBQQ0kgRmFzdCBFdGhlcm5ldCIKIH07Ci1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2lzOTAwX3BjaV90YmwgW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc2lzOTAwX3BjaV90YmwpID0gewogCXtQQ0lfVkVORE9SX0lEX1NJLCBQQ0lfREVWSUNFX0lEX1NJXzkwMCwKIAkgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgU0lTXzkwMH0sCiAJe1BDSV9WRU5ET1JfSURfU0ksIFBDSV9ERVZJQ0VfSURfU0lfNzAxNiwKQEAgLTIyODgsNyArMjI4OCw3IEBACiAJCXJ4X21vZGUgPSBSRlByb21pc2N1b3VzOwogCQlmb3IgKGkgPSAwOyBpIDwgdGFibGVfZW50cmllczsgaSsrKQogCQkJbWNfZmlsdGVyW2ldID0gMHhmZmZmOwotCX0gZWxzZSBpZiAoKG5ldF9kZXYtPm1jX2NvdW50ID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKKwl9IGVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQobmV0X2RldikgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSB8fAogCQkgICAobmV0X2Rldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCS8qIHRvbyBtYW55IG11bHRpY2FzdCBhZGRyZXNzZXMgb3IgYWNjZXB0IGFsbCBtdWx0aWNhc3QgcGFja2V0ICovCiAJCXJ4X21vZGUgPSBSRkFBQiB8IFJGQUFNOwpAQCAtMjMwMCw5ICsyMzAwLDggQEAKIAkJICogcGFja2V0cyAqLwogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKIAkJcnhfbW9kZSA9IFJGQUFCOwotCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBuZXRfZGV2LT5tY19saXN0OwotCQkJbWNsaXN0ICYmIGkgPCBuZXRfZGV2LT5tY19jb3VudDsKLQkJCWkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBuZXRfZGV2KSB7CiAJCQl1bnNpZ25lZCBpbnQgYml0X25yID0KIAkJCQlzaXM5MDBfbWNhc3RfYml0bnIobWNsaXN0LT5kbWlfYWRkciwgc2lzX3ByaXYtPmNoaXBzZXRfcmV2KTsKIAkJCW1jX2ZpbHRlcltiaXRfbnIgPj4gNF0gfD0gKDEgPDwgKGJpdF9uciAmIDB4ZikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9lc3MuYyBiL2RyaXZlcnMvbmV0L3NrZnAvZXNzLmMKaW5kZXggYTg1ZWZjZi4uZTgzODdkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9lc3MuYworKysgYi9kcml2ZXJzL25ldC9za2ZwL2Vzcy5jCkBAIC01NTcsNyArNTU3LDcgQEAKIAogCS8qCiAJICogc2VuZCBuZXZlciBhbGxvY2F0aW9uIHJlcXVlc3Qgd2hlcmUgdGhlIHJlcXVlc3RlZCBwYXlsb2FkIGFuZAotCSAqIG92ZXJoZWFkIGlzIHplcm8gb3IgZGVhbGxvY2F0ZSBiYW5kd2lkaHQgd2hlbiBubyBiYW5kd2lkdGggaXMKKwkgKiBvdmVyaGVhZCBpcyB6ZXJvIG9yIGRlYWxsb2NhdGUgYmFuZHdpZHRoIHdoZW4gbm8gYmFuZHdpZHRoIGlzCiAJICogcGFyc2VkCiAJICovCiAJaWYgKCFzbWMtPm1pYi5mZGRpRVNTUGF5bG9hZCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYyBiL2RyaXZlcnMvbmV0L3NrZnAvc2tmZGRpLmMKaW5kZXggZGIyMTZhNy4uMTkyMWE1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tmcC9za2ZkZGkuYworKysgYi9kcml2ZXJzL25ldC9za2ZwL3NrZmRkaS5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIGV4dGVybiB2b2lkIG1hY19kcnZfY2xlYXJfcnhfcXVldWUoc3RydWN0IHNfc21jICpzbWMpOwogZXh0ZXJuIHZvaWQgZW5hYmxlX3R4X2lycShzdHJ1Y3Qgc19zbWMgKnNtYywgdV9zaG9ydCBxdWV1ZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBza2ZkZGlfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHNrZmRkaV9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfU0ssIFBDSV9ERVZJQ0VfSURfU0tfRlAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIH0sCiAJeyB9CQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CkBAIC00MzUsMTMgKzQzNSw3IEBACiAJCWdvdG8gZmFpbDsKIAl9CiAJcmVhZF9hZGRyZXNzKHNtYywgTlVMTCk7Ci0JcHJfZGVidWcoS0VSTl9JTkZPICJIVy1BZGRyOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKLQkgICAgICAgc21jLT5ody5mZGRpX2Nhbm9uX2FkZHIuYVswXSwKLQkgICAgICAgc21jLT5ody5mZGRpX2Nhbm9uX2FkZHIuYVsxXSwKLQkgICAgICAgc21jLT5ody5mZGRpX2Nhbm9uX2FkZHIuYVsyXSwKLQkgICAgICAgc21jLT5ody5mZGRpX2Nhbm9uX2FkZHIuYVszXSwKLQkgICAgICAgc21jLT5ody5mZGRpX2Nhbm9uX2FkZHIuYVs0XSwKLQkgICAgICAgc21jLT5ody5mZGRpX2Nhbm9uX2FkZHIuYVs1XSk7CisJcHJfZGVidWcoS0VSTl9JTkZPICJIVy1BZGRyOiAlcE1GXG4iLCBzbWMtPmh3LmZkZGlfY2Fub25fYWRkci5hKTsKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgc21jLT5ody5mZGRpX2Nhbm9uX2FkZHIuYSwgNik7CiAKIAlzbXRfcmVzZXRfZGVmYXVsdHMoc21jLCAwKTsKQEAgLTg1OCw4ICs4NTIsNyBAQAogc3RhdGljIHZvaWQgc2tmcF9jdGxfc2V0X211bHRpY2FzdF9saXN0X3dvX2xvY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3Qgc19zbWMgKnNtYyA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWk7CS8qIHB0ciB0byBtdWx0aWNhc3QgYWRkciBlbnRyeSAqLwotCWludCBpOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCiAJLyogRW5hYmxlIHByb21pc2N1b3VzIG1vZGUsIGlmIG5lY2Vzc2FyeSAqLwogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKQEAgLTg3OCwyOSArODcxLDE5IEBACiAJCWlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CiAJCQltYWNfZHJ2X3J4X21vZGUoc21jLCBSWF9FTkFCTEVfQUxMTVVMVEkpOwogCQkJcHJfZGVidWcoS0VSTl9JTkZPICJFTkFCTEUgQUxMIE1DIEFERFJFU1NFU1xuIik7Ci0JCX0gZWxzZSBpZiAoZGV2LT5tY19jb3VudCA+IDApIHsKLQkJCWlmIChkZXYtPm1jX2NvdW50IDw9IEZQTUFYX01VTFRJQ0FTVCkgeworCQl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgeworCQkJaWYgKG5ldGRldl9tY19jb3VudChkZXYpIDw9IEZQTUFYX01VTFRJQ0FTVCkgewogCQkJCS8qIHVzZSBleGFjdCBmaWx0ZXJpbmcgKi8KIAogCQkJCS8vIHBvaW50IHRvIGZpcnN0IG11bHRpY2FzdCBhZGRyCi0JCQkJZG1pID0gZGV2LT5tY19saXN0OwotCi0JCQkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgeworCQkJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCQkJCW1hY19hZGRfbXVsdGljYXN0KHNtYywgCiAJCQkJCQkJICAoc3RydWN0IGZkZGlfYWRkciAqKWRtaS0+ZG1pX2FkZHIsIAogCQkJCQkJCSAgMSk7CiAKLQkJCQkJcHJfZGVidWcoS0VSTl9JTkZPICJFTkFCTEUgTUMgQUREUkVTUzoiKTsKLQkJCQkJcHJfZGVidWcoIiAlMDJ4ICUwMnggJTAyeCAiLAotCQkJCQkgICAgICAgZG1pLT5kbWlfYWRkclswXSwKLQkJCQkJICAgICAgIGRtaS0+ZG1pX2FkZHJbMV0sCi0JCQkJCSAgICAgICBkbWktPmRtaV9hZGRyWzJdKTsKLQkJCQkJcHJfZGVidWcoIiUwMnggJTAyeCAlMDJ4XG4iLAotCQkJCQkgICAgICAgZG1pLT5kbWlfYWRkclszXSwKLQkJCQkJICAgICAgIGRtaS0+ZG1pX2FkZHJbNF0sCi0JCQkJCSAgICAgICBkbWktPmRtaV9hZGRyWzVdKTsKLQkJCQkJZG1pID0gZG1pLT5uZXh0OwotCQkJCX0JLy8gZm9yCisJCQkJCXByX2RlYnVnKEtFUk5fSU5GTyAiRU5BQkxFIE1DIEFERFJFU1M6ICVwTUZcbiIsCisJCQkJCQlkbWktPmRtaV9hZGRyKTsKKwkJCQl9CiAKIAkJCX0gZWxzZSB7CS8vIG1vcmUgTUMgYWRkcmVzc2VzIHRoYW4gSFcgc3VwcG9ydHMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tnZS5jIGIvZHJpdmVycy9uZXQvc2tnZS5jCmluZGV4IDM3OWEzZGMuLmQwMDU4ZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZ2UuYworKysgYi9kcml2ZXJzL25ldC9za2dlLmMKQEAgLTIzLDYgKzIzLDggQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2luLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC00Niw3ICs0OCw2IEBACiAKICNkZWZpbmUgRFJWX05BTUUJCSJza2dlIgogI2RlZmluZSBEUlZfVkVSU0lPTgkJIjEuMTMiCi0jZGVmaW5lIFBGWAkJCURSVl9OQU1FICIgIgogCiAjZGVmaW5lIERFRkFVTFRfVFhfUklOR19TSVpFCTEyOAogI2RlZmluZSBERUZBVUxUX1JYX1JJTkdfU0laRQk1MTIKQEAgLTcwLDE1ICs3MSwxNSBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwogCi1zdGF0aWMgY29uc3QgdTMyIGRlZmF1bHRfbXNnCi0JPSBORVRJRl9NU0dfRFJWfCBORVRJRl9NU0dfUFJPQkV8IE5FVElGX01TR19MSU5LCi0JICB8IE5FVElGX01TR19JRlVQfCBORVRJRl9NU0dfSUZET1dOOworc3RhdGljIGNvbnN0IHUzMiBkZWZhdWx0X21zZyA9IChORVRJRl9NU0dfRFJWIHwgTkVUSUZfTVNHX1BST0JFIHwKKwkJCQlORVRJRl9NU0dfTElOSyB8IE5FVElGX01TR19JRlVQIHwKKwkJCQlORVRJRl9NU0dfSUZET1dOKTsKIAogc3RhdGljIGludCBkZWJ1ZyA9IC0xOwkvKiBkZWZhdWx0cyBhYm92ZSAqLwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwPW5vbmUsLi4uLDE2PWFsbCkiKTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNrZ2VfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShza2dlX2lkX3RhYmxlKSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF8zQ09NLCBQQ0lfREVWSUNFX0lEXzNDT01fM0M5NDApIH0sCiAJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfM0NPTSwgUENJX0RFVklDRV9JRF8zQ09NXzNDOTQwQikgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNULCBQQ0lfREVWSUNFX0lEX1NZU0tPTk5FQ1RfR0UpIH0sCkBAIC0xODcsOCArMTg4LDggQEAKIAogCS8qIEZvcmNlIHRvIDEwLzEwMCBza2dlX3Jlc2V0IHdpbGwgcmUtZW5hYmxlIG9uIHJlc3VtZQkgKi8KIAlnbV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9NQVJWX0FVTkVfQURWLAotCQkgICAgIFBIWV9BTl8xMDBGVUxMIHwgUEhZX0FOXzEwMEhBTEYgfAotCQkgICAgIFBIWV9BTl8xMEZVTEwgfCBQSFlfQU5fMTBIQUxGfCBQSFlfQU5fQ1NNQSk7CisJCSAgICAgKFBIWV9BTl8xMDBGVUxMIHwgUEhZX0FOXzEwMEhBTEYgfAorCQkgICAgICBQSFlfQU5fMTBGVUxMIHwgUEhZX0FOXzEwSEFMRiB8IFBIWV9BTl9DU01BKSk7CiAJLyogbm8gMTAwMCBIRC9GRCAqLwogCWdtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX01BUlZfMTAwMFRfQ1RSTCwgMCk7CiAJZ21fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfTUFSVl9DVFJMLApAQCAtMjU3LDI1ICsyNTgsMjggQEAKIAl1MzIgc3VwcG9ydGVkOwogCiAJaWYgKGh3LT5jb3BwZXIpIHsKLQkJc3VwcG9ydGVkID0gU1VQUE9SVEVEXzEwYmFzZVRfSGFsZgotCQkJfCBTVVBQT1JURURfMTBiYXNlVF9GdWxsCi0JCQl8IFNVUFBPUlRFRF8xMDBiYXNlVF9IYWxmCi0JCQl8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsCi0JCQl8IFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZgotCQkJfCBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwKLQkJCXwgU1VQUE9SVEVEX0F1dG9uZWd8IFNVUFBPUlRFRF9UUDsKKwkJc3VwcG9ydGVkID0gKFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAorCQkJICAgICBTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwKKwkJCSAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAorCQkJICAgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCB8CisJCQkgICAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfSGFsZiB8CisJCQkgICAgIFNVUFBPUlRFRF8xMDAwYmFzZVRfRnVsbCB8CisJCQkgICAgIFNVUFBPUlRFRF9BdXRvbmVnIHwKKwkJCSAgICAgU1VQUE9SVEVEX1RQKTsKIAogCQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTKQotCQkJc3VwcG9ydGVkICY9IH4oU1VQUE9SVEVEXzEwYmFzZVRfSGFsZgotCQkJCQkgICAgIHwgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbAotCQkJCQkgICAgIHwgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYKLQkJCQkJICAgICB8IFNVUFBPUlRFRF8xMDBiYXNlVF9GdWxsKTsKKwkJCXN1cHBvcnRlZCAmPSB+KFNVUFBPUlRFRF8xMGJhc2VUX0hhbGYgfAorCQkJCSAgICAgICBTVVBQT1JURURfMTBiYXNlVF9GdWxsIHwKKwkJCQkgICAgICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAorCQkJCSAgICAgICBTVVBQT1JURURfMTAwYmFzZVRfRnVsbCk7CiAKIAkJZWxzZSBpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTikKIAkJCXN1cHBvcnRlZCAmPSB+U1VQUE9SVEVEXzEwMDBiYXNlVF9IYWxmOwogCX0gZWxzZQotCQlzdXBwb3J0ZWQgPSBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfCBTVVBQT1JURURfMTAwMGJhc2VUX0hhbGYKLQkJCXwgU1VQUE9SVEVEX0ZJQlJFIHwgU1VQUE9SVEVEX0F1dG9uZWc7CisJCXN1cHBvcnRlZCA9IChTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAorCQkJICAgICBTVVBQT1JURURfMTAwMGJhc2VUX0hhbGYgfAorCQkJICAgICBTVVBQT1JURURfRklCUkUgfAorCQkJICAgICBTVVBQT1JURURfQXV0b25lZyk7CiAKIAlyZXR1cm4gc3VwcG9ydGVkOwogfQpAQCAtMzY1LDcgKzM2OSw3IEBACiAJCX0KIAl9CiAKLQlyZXR1cm4gKDApOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBza2dlX2dldF9kcnZpbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC04MTIsNyArODE2LDcgQEAKIAl1MzIgcmVnMjsKIAogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChza2dlLT5ody0+cGRldiwgUENJX0RFVl9SRUcyLCAmcmVnMik7Ci0JcmV0dXJuIDEgPDwgKCAoKHJlZzIgJiBQQ0lfVlBEX1JPTV9TWikgPj4gMTQpICsgOCk7CisJcmV0dXJuIDEgPDwgKCgocmVnMiAmIFBDSV9WUERfUk9NX1NaKSA+PiAxNCkgKyA4KTsKIH0KIAogc3RhdGljIHUzMiBza2dlX3ZwZF9yZWFkKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgY2FwLCB1MTYgb2Zmc2V0KQpAQCAtMTA0Myw3ICsxMDQ3LDcgQEAKIAogCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CiAJCXNrZ2Vfcnhfc2V0dXAoc2tnZSwgZSwgc2tiLCBza2dlLT5yeF9idWZfc2l6ZSk7Ci0JfSB3aGlsZSAoIChlID0gZS0+bmV4dCkgIT0gcmluZy0+c3RhcnQpOworCX0gd2hpbGUgKChlID0gZS0+bmV4dCkgIT0gcmluZy0+c3RhcnQpOwogCiAJcmluZy0+dG9fY2xlYW4gPSByaW5nLT5zdGFydDsKIAlyZXR1cm4gMDsKQEAgLTEwNTEsNyArMTA1NSw3IEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICpza2dlX3BhdXNlKGVudW0gcGF1c2Vfc3RhdHVzIHN0YXR1cykKIHsKLQlzd2l0Y2goc3RhdHVzKSB7CisJc3dpdGNoIChzdGF0dXMpIHsKIAljYXNlIEZMT1dfU1RBVF9OT05FOgogCQlyZXR1cm4gIm5vbmUiOwogCWNhc2UgRkxPV19TVEFUX1JFTV9TRU5EOgpAQCAtMTA3NCwxMyArMTA3OCwxMSBAQAogCW5ldGlmX2NhcnJpZXJfb24oc2tnZS0+bmV0ZGV2KTsKIAluZXRpZl93YWtlX3F1ZXVlKHNrZ2UtPm5ldGRldik7CiAKLQlpZiAobmV0aWZfbXNnX2xpbmsoc2tnZSkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKLQkJICAgICAgICIlczogTGluayBpcyB1cCBhdCAlZCBNYnBzLCAlcyBkdXBsZXgsIGZsb3cgY29udHJvbCAlc1xuIiwKLQkJICAgICAgIHNrZ2UtPm5ldGRldi0+bmFtZSwgc2tnZS0+c3BlZWQsCi0JCSAgICAgICBza2dlLT5kdXBsZXggPT0gRFVQTEVYX0ZVTEwgPyAiZnVsbCIgOiAiaGFsZiIsCi0JCSAgICAgICBza2dlX3BhdXNlKHNrZ2UtPmZsb3dfc3RhdHVzKSk7Ci0JfQorCW5ldGlmX2luZm8oc2tnZSwgbGluaywgc2tnZS0+bmV0ZGV2LAorCQkgICAiTGluayBpcyB1cCBhdCAlZCBNYnBzLCAlcyBkdXBsZXgsIGZsb3cgY29udHJvbCAlc1xuIiwKKwkJICAgc2tnZS0+c3BlZWQsCisJCSAgIHNrZ2UtPmR1cGxleCA9PSBEVVBMRVhfRlVMTCA/ICJmdWxsIiA6ICJoYWxmIiwKKwkJICAgc2tnZV9wYXVzZShza2dlLT5mbG93X3N0YXR1cykpOwogfQogCiBzdGF0aWMgdm9pZCBza2dlX2xpbmtfZG93bihzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlKQpAQCAtMTA4OSw4ICsxMDkxLDcgQEAKIAluZXRpZl9jYXJyaWVyX29mZihza2dlLT5uZXRkZXYpOwogCW5ldGlmX3N0b3BfcXVldWUoc2tnZS0+bmV0ZGV2KTsKIAotCWlmIChuZXRpZl9tc2dfbGluayhza2dlKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBMaW5rIGlzIGRvd24uXG4iLCBza2dlLT5uZXRkZXYtPm5hbWUpOworCW5ldGlmX2luZm8oc2tnZSwgbGluaywgc2tnZS0+bmV0ZGV2LCAiTGluayBpcyBkb3duXG4iKTsKIH0KIAogCkBAIC0xMTMyLDggKzExMzMsNyBAQAogewogCXUxNiB2ID0gMDsKIAlpZiAoX194bV9waHlfcmVhZChodywgcG9ydCwgcmVnLCAmdikpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogcGh5IHJlYWQgdGltZWQgb3V0XG4iLAotCQkgICAgICAgaHctPmRldltwb3J0XS0+bmFtZSk7CisJCXByX3dhcm5pbmcoIiVzOiBwaHkgcmVhZCB0aW1lZCBvdXRcbiIsIGh3LT5kZXZbcG9ydF0tPm5hbWUpOwogCXJldHVybiB2OwogfQogCkBAIC0xMjU1LDggKzEyNTUsNyBAQAogCiAJCWxwYSA9IHhtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfWE1BQ19BVU5FX0xQKTsKIAkJaWYgKGxwYSAmIFBIWV9CX0FOX1JGKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgUEZYICIlczogcmVtb3RlIGZhdWx0XG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQluZXRkZXZfbm90aWNlKGRldiwgInJlbW90ZSBmYXVsdFxuIik7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtMTI3MSw4ICsxMjcwLDcgQEAKIAkJCXNrZ2UtPmR1cGxleCA9IERVUExFWF9IQUxGOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgUEZYICIlczogZHVwbGV4IG1pc21hdGNoXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQluZXRkZXZfbm90aWNlKGRldiwgImR1cGxleCBtaXNtYXRjaFxuIik7CiAJCQlyZXR1cm47CiAJCX0KIApAQCAtMTMyNyw3ICsxMzI1LDcgQEAKIAkvKiBPcHRpbWl6ZSBNRElPIHRyYW5zZmVyIGJ5IHN1cHByZXNzaW5nIHByZWFtYmxlLiAqLwogCXIgPSB4bV9yZWFkMTYoaHcsIHBvcnQsIFhNX01NVV9DTUQpOwogCXIgfD0gIFhNX01NVV9OT19QUkU7Ci0JeG1fd3JpdGUxNihodywgcG9ydCwgWE1fTU1VX0NNRCxyKTsKKwl4bV93cml0ZTE2KGh3LCBwb3J0LCBYTV9NTVVfQ01ELCByKTsKIAogCXN3aXRjaCAoaWQxKSB7CiAJY2FzZSBQSFlfQkNPTV9JRDFfQzA6CkBAIC0xNDY0LDggKzE0NjIsNyBAQAogCiAJCWxwYSA9IHhtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfWE1BQ19BVU5FX0xQKTsKIAkJaWYgKGxwYSAmIFBIWV9CX0FOX1JGKSB7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgUEZYICIlczogcmVtb3RlIGZhdWx0XG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQluZXRkZXZfbm90aWNlKGRldiwgInJlbW90ZSBmYXVsdFxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCkBAIC0xNDgwLDggKzE0NzcsNyBAQAogCQkJc2tnZS0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX05PVElDRSBQRlggIiVzOiBkdXBsZXggbWlzbWF0Y2hcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9ub3RpY2UoZGV2LCAiZHVwbGV4IG1pc21hdGNoXG4iKTsKIAkJCXJldHVybiAwOwogCQl9CiAKQEAgLTE1MTksNyArMTUxNSw3IEBACiB7CiAJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IChzdHJ1Y3Qgc2tnZV9wb3J0ICopIGFyZzsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tnZS0+bmV0ZGV2OwotIAlzdHJ1Y3Qgc2tnZV9odyAqaHcgPSBza2dlLT5odzsKKwlzdHJ1Y3Qgc2tnZV9odyAqaHcgPSBza2dlLT5odzsKIAlpbnQgcG9ydCA9IHNrZ2UtPnBvcnQ7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE1MzgsNyArMTUzNCw3IEBACiAJCQlnb3RvIGxpbmtfZG93bjsKIAl9CiAKLSAgICAgICAgLyogUmUtZW5hYmxlIGludGVycnVwdCB0byBkZXRlY3QgbGluayBkb3duICovCisJLyogUmUtZW5hYmxlIGludGVycnVwdCB0byBkZXRlY3QgbGluayBkb3duICovCiAJaWYgKHhtX2NoZWNrX2xpbmsoZGV2KSkgewogCQl1MTYgbXNrID0geG1fcmVhZDE2KGh3LCBwb3J0LCBYTV9JTVNLKTsKIAkJbXNrICY9IH5YTV9JU19JTlBfQVNTOwpAQCAtMTU2OSw3ICsxNTY1LDcgQEAKIAkJdWRlbGF5KDEpOwogCX0KIAotCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogZ2VuZXNpcyByZXNldCBmYWlsZWRcbiIsIGRldi0+bmFtZSk7CisJbmV0ZGV2X3dhcm4oZGV2LCAiZ2VuZXNpcyByZXNldCBmYWlsZWRcbiIpOwogCiAgcmVzZXRfb2s6CiAJLyogVW5yZXNldCB0aGUgWE1BQy4gKi8KQEAgLTE1OTUsNyArMTU5MSw3IEBACiAJfQogCiAKLQlzd2l0Y2goaHctPnBoeV90eXBlKSB7CisJc3dpdGNoIChody0+cGh5X3R5cGUpIHsKIAljYXNlIFNLX1BIWV9YTUFDOgogCQl4bV9waHlfaW5pdChza2dlKTsKIAkJYnJlYWs7CkBAIC0xNzAyLDcgKzE2OTgsNyBAQAogCiAJaWYgKGp1bWJvKSB7CiAJCS8qIEVuYWJsZSBmcmFtZSBmbHVzaGluZyBpZiBqdW1ibyBmcmFtZXMgdXNlZCAqLwotCQlza2dlX3dyaXRlMTYoaHcsIFNLX1JFRyhwb3J0LFJYX01GRl9DVFJMMSksIE1GRl9FTkFfRkxVU0gpOworCQlza2dlX3dyaXRlMTYoaHcsIFNLX1JFRyhwb3J0LCBSWF9NRkZfQ1RSTDEpLCBNRkZfRU5BX0ZMVVNIKTsKIAl9IGVsc2UgewogCQkvKiBlbmFibGUgdGltZW91dCB0aW1lcnMgaWYgbm9ybWFsIGZyYW1lcyAqLwogCQlza2dlX3dyaXRlMTYoaHcsIEIzX1BBX0NUUkwsCkBAIC0xNzE3LDcgKzE3MTMsNyBAQAogCXVuc2lnbmVkIHJldHJpZXMgPSAxMDAwOwogCXUxNiBjbWQ7CiAKLSAJLyogRGlzYWJsZSBUeCBhbmQgUnggKi8KKwkvKiBEaXNhYmxlIFR4IGFuZCBSeCAqLwogCWNtZCA9IHhtX3JlYWQxNihodywgcG9ydCwgWE1fTU1VX0NNRCk7CiAJY21kICY9IH4oWE1fTU1VX0VOQV9SWCB8IFhNX01NVV9FTkFfVFgpOwogCXhtX3dyaXRlMTYoaHcsIHBvcnQsIFhNX01NVV9DTUQsIGNtZCk7CkBAIC0xNzkyLDEyICsxNzg4LDExIEBACiAJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGRldik7CiAJdTE2IHN0YXR1cyA9IHhtX3JlYWQxNihodywgcG9ydCwgWE1fSVNSQyk7CiAKLQlpZiAobmV0aWZfbXNnX2ludHIoc2tnZSkpCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJXM6IG1hYyBpbnRlcnJ1cHQgc3RhdHVzIDB4JXhcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cyk7CisJbmV0aWZfcHJpbnRrKHNrZ2UsIGludHIsIEtFUk5fREVCVUcsIHNrZ2UtPm5ldGRldiwKKwkJICAgICAibWFjIGludGVycnVwdCBzdGF0dXMgMHgleFxuIiwgc3RhdHVzKTsKIAogCWlmIChody0+cGh5X3R5cGUgPT0gU0tfUEhZX1hNQUMgJiYgKHN0YXR1cyAmIFhNX0lTX0lOUF9BU1MpKSB7Ci0gIAkJeG1fbGlua19kb3duKGh3LCBwb3J0KTsKKwkJeG1fbGlua19kb3duKGh3LCBwb3J0KTsKIAkJbW9kX3RpbWVyKCZza2dlLT5saW5rX3RpbWVyLCBqaWZmaWVzICsgMSk7CiAJfQogCkBAIC0xODMxLDcgKzE4MjYsNyBAQAogCXhtX3dyaXRlMTYoaHcsIHBvcnQsIFhNX01NVV9DTUQsIGNtZCk7CiAKIAltb2RlID0geG1fcmVhZDMyKGh3LCBwb3J0LCBYTV9NT0RFKTsKLQlpZiAoc2tnZS0+Zmxvd19zdGF0dXM9PSBGTE9XX1NUQVRfU1lNTUVUUklDIHx8CisJaWYgKHNrZ2UtPmZsb3dfc3RhdHVzID09IEZMT1dfU1RBVF9TWU1NRVRSSUMgfHwKIAkgICAgc2tnZS0+Zmxvd19zdGF0dXMgPT0gRkxPV19TVEFUX0xPQ19TRU5EKSB7CiAJCS8qCiAJCSAqIENvbmZpZ3VyZSBQYXVzZSBGcmFtZSBHZW5lcmF0aW9uCkBAIC0xODk4LDEyICsxODkzLDExIEBACiAJdTE2IGlzcmM7CiAKIAlpc3JjID0geG1fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9CQ09NX0lOVF9TVEFUKTsKLQlpZiAobmV0aWZfbXNnX2ludHIoc2tnZSkpCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJXM6IHBoeSBpbnRlcnJ1cHQgc3RhdHVzIDB4JXhcbiIsCi0JCSAgICAgICBza2dlLT5uZXRkZXYtPm5hbWUsIGlzcmMpOworCW5ldGlmX3ByaW50ayhza2dlLCBpbnRyLCBLRVJOX0RFQlVHLCBza2dlLT5uZXRkZXYsCisJCSAgICAgInBoeSBpbnRlcnJ1cHQgc3RhdHVzIDB4JXhcbiIsIGlzcmMpOwogCiAJaWYgKGlzcmMgJiBQSFlfQl9JU19QU0UpCi0JCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiB1bmNvcnJlY3RhYmxlIHBhaXIgc3dhcCBlcnJvclxuIiwKKwkJcHJfZXJyKCIlczogdW5jb3JyZWN0YWJsZSBwYWlyIHN3YXAgZXJyb3JcbiIsCiAJCSAgICAgICBody0+ZGV2W3BvcnRdLT5uYW1lKTsKIAogCS8qIFdvcmthcm91bmQgQkNvbSBFcnJhdGE6CkBAIC0xOTM2LDggKzE5MzAsNyBAQAogCQkJcmV0dXJuIDA7CiAJfQogCi0JcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiBwaHkgd3JpdGUgdGltZW91dFxuIiwKLQkgICAgICAgaHctPmRldltwb3J0XS0+bmFtZSk7CisJcHJfd2FybmluZygiJXM6IHBoeSB3cml0ZSB0aW1lb3V0XG4iLCBody0+ZGV2W3BvcnRdLT5uYW1lKTsKIAlyZXR1cm4gLUVJTzsKIH0KIApAQCAtMTk2NSw4ICsxOTU4LDcgQEAKIHsKIAl1MTYgdiA9IDA7CiAJaWYgKF9fZ21fcGh5X3JlYWQoaHcsIHBvcnQsIHJlZywgJnYpKQotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IHBoeSByZWFkIHRpbWVvdXRcbiIsCi0JICAgICAgIGh3LT5kZXZbcG9ydF0tPm5hbWUpOworCQlwcl93YXJuaW5nKCIlczogcGh5IHJlYWQgdGltZW91dFxuIiwgaHctPmRldltwb3J0XS0+bmFtZSk7CiAJcmV0dXJuIHY7CiB9CiAKQEAgLTIyOTgsOSArMjI5MCw4IEBACiAJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGRldik7CiAJdTggc3RhdHVzID0gc2tnZV9yZWFkOChodywgU0tfUkVHKHBvcnQsIEdNQUNfSVJRX1NSQykpOwogCi0JaWYgKG5ldGlmX21zZ19pbnRyKHNrZ2UpKQotCQlwcmludGsoS0VSTl9ERUJVRyBQRlggIiVzOiBtYWMgaW50ZXJydXB0IHN0YXR1cyAweCV4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCW5ldGlmX3ByaW50ayhza2dlLCBpbnRyLCBLRVJOX0RFQlVHLCBza2dlLT5uZXRkZXYsCisJCSAgICAgIm1hYyBpbnRlcnJ1cHQgc3RhdHVzIDB4JXhcbiIsIHN0YXR1cyk7CiAKIAlpZiAoc3RhdHVzICYgR01fSVNfUlhfRkZfT1IpIHsKIAkJKytkZXYtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzOwpAQCAtMjM3OSw5ICsyMzcwLDggQEAKIAlpc3RhdHVzID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX0lOVF9TVEFUKTsKIAlwaHlzdGF0ID0gZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX1BIWV9TVEFUKTsKIAotCWlmIChuZXRpZl9tc2dfaW50cihza2dlKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICIlczogcGh5IGludGVycnVwdCBzdGF0dXMgMHgleCAweCV4XG4iLAotCQkgICAgICAgc2tnZS0+bmV0ZGV2LT5uYW1lLCBpc3RhdHVzLCBwaHlzdGF0KTsKKwluZXRpZl9wcmludGsoc2tnZSwgaW50ciwgS0VSTl9ERUJVRywgc2tnZS0+bmV0ZGV2LAorCQkgICAgICJwaHkgaW50ZXJydXB0IHN0YXR1cyAweCV4IDB4JXhcbiIsIGlzdGF0dXMsIHBoeXN0YXQpOwogCiAJaWYgKGlzdGF0dXMgJiBQSFlfTV9JU19BTl9DT01QTCkgewogCQlpZiAoZ21fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9NQVJWX0FVTkVfTFApCkBAIC0yNDQxLDggKzI0MzEsNyBAQAogCX0KIAlyZXR1cm47CiAgZmFpbGVkOgotCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBhdXRvbmVnb3RpYXRpb24gZmFpbGVkICglcylcbiIsCi0JICAgICAgIHNrZ2UtPm5ldGRldi0+bmFtZSwgcmVhc29uKTsKKwlwcl9lcnIoIiVzOiBhdXRvbmVnb3RpYXRpb24gZmFpbGVkICglcylcbiIsIHNrZ2UtPm5ldGRldi0+bmFtZSwgcmVhc29uKTsKIAogCS8qIFhYWCByZXN0YXJ0IGF1dG9uZWdvdGlhdGlvbj8gKi8KIH0KQEAgLTI0ODAsNyArMjQ2OSw3IEBACiAJaWYgKCFuZXRpZl9ydW5uaW5nKGRldikpCiAJCXJldHVybiAtRU5PREVWOwkvKiBQaHkgc3RpbGwgaW4gcmVzZXQgKi8KIAotCXN3aXRjaChjbWQpIHsKKwlzd2l0Y2ggKGNtZCkgewogCWNhc2UgU0lPQ0dNSUlQSFk6CiAJCWRhdGEtPnBoeV9pZCA9IGh3LT5waHlfYWRkcjsKIApAQCAtMjU3MSw4ICsyNTYwLDcgQEAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKG5ldGlmX21zZ19pZnVwKHNrZ2UpKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IGVuYWJsaW5nIGludGVyZmFjZVxuIiwgZGV2LT5uYW1lKTsKKwluZXRpZl9pbmZvKHNrZ2UsIGlmdXAsIHNrZ2UtPm5ldGRldiwgImVuYWJsaW5nIGludGVyZmFjZVxuIik7CiAKIAlpZiAoZGV2LT5tdHUgPiBSWF9CVUZfU0laRSkKIAkJc2tnZS0+cnhfYnVmX3NpemUgPSBkZXYtPm10dSArIEVUSF9ITEVOOwpAQCAtMjY3MCw4ICsyNjU4LDcgQEAKIAlpZiAoc2tnZS0+bWVtID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JaWYgKG5ldGlmX21zZ19pZmRvd24oc2tnZSkpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogZGlzYWJsaW5nIGludGVyZmFjZVxuIiwgZGV2LT5uYW1lKTsKKwluZXRpZl9pbmZvKHNrZ2UsIGlmZG93biwgc2tnZS0+bmV0ZGV2LCAiZGlzYWJsaW5nIGludGVyZmFjZVxuIik7CiAKIAluZXRpZl90eF9kaXNhYmxlKGRldik7CiAKQEAgLTI3ODEsNyArMjc2OCw3IEBACiAJCSAqIGRvZXMuICBMb29rcyBsaWtlIGhhcmR3YXJlIGlzIHdyb25nPwogCQkgKi8KIAkJaWYgKGlwaXBfaGRyKHNrYiktPnByb3RvY29sID09IElQUFJPVE9fVURQICYmCi0JICAgICAgICAgICAgaHctPmNoaXBfcmV2ID09IDAgJiYgaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTikKKwkJICAgIGh3LT5jaGlwX3JldiA9PSAwICYmIGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT04pCiAJCQljb250cm9sID0gQk1VX1RDUF9DSEVDSzsKIAkJZWxzZQogCQkJY29udHJvbCA9IEJNVV9VRFBfQ0hFQ0s7CkBAIC0yNzkzLDcgKzI3ODAsNyBAQAogCQljb250cm9sID0gQk1VX0NIRUNLOwogCiAJaWYgKCFza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKSAvKiBzaW5nbGUgYnVmZmVyIGkuZS4gbm8gZnJhZ21lbnRzICovCi0JCWNvbnRyb2wgfD0gQk1VX0VPRnwgQk1VX0lSUV9FT0Y7CisJCWNvbnRyb2wgfD0gQk1VX0VPRiB8IEJNVV9JUlFfRU9GOwogCWVsc2UgewogCQlzdHJ1Y3Qgc2tnZV90eF9kZXNjICp0ZiA9IHRkOwogCkBAIC0yODI1LDE1ICsyODEyLDE1IEBACiAKIAlza2dlX3dyaXRlOChodywgUV9BRERSKHR4cWFkZHJbc2tnZS0+cG9ydF0sIFFfQ1NSKSwgQ1NSX1NUQVJUKTsKIAotCWlmICh1bmxpa2VseShuZXRpZl9tc2dfdHhfcXVldWVkKHNrZ2UpKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB0eCBxdWV1ZWQsIHNsb3QgJXRkLCBsZW4gJWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGUgLSBza2dlLT50eF9yaW5nLnN0YXJ0LCBza2ItPmxlbik7CisJbmV0aWZfcHJpbnRrKHNrZ2UsIHR4X3F1ZXVlZCwgS0VSTl9ERUJVRywgc2tnZS0+bmV0ZGV2LAorCQkgICAgICJ0eCBxdWV1ZWQsIHNsb3QgJXRkLCBsZW4gJWRcbiIsCisJCSAgICAgZSAtIHNrZ2UtPnR4X3Jpbmcuc3RhcnQsIHNrYi0+bGVuKTsKIAogCXNrZ2UtPnR4X3JpbmcudG9fdXNlID0gZS0+bmV4dDsKIAlzbXBfd21iKCk7CiAKIAlpZiAoc2tnZV9hdmFpbCgmc2tnZS0+dHhfcmluZykgPD0gVFhfTE9XX1dBVEVSKSB7Ci0JCXByX2RlYnVnKCIlczogdHJhbnNtaXQgcXVldWUgZnVsbFxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2RiZyhkZXYsICJ0cmFuc21pdCBxdWV1ZSBmdWxsXG4iKTsKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCX0KIApAQCAtMjg1OCw5ICsyODQ1LDggQEAKIAkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKIAogCWlmIChjb250cm9sICYgQk1VX0VPRikgewotCQlpZiAodW5saWtlbHkobmV0aWZfbXNnX3R4X2RvbmUoc2tnZSkpKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICIlczogdHggZG9uZSBzbG90ICV0ZFxuIiwKLQkJCSAgICAgICBza2dlLT5uZXRkZXYtPm5hbWUsIGUgLSBza2dlLT50eF9yaW5nLnN0YXJ0KTsKKwkJbmV0aWZfcHJpbnRrKHNrZ2UsIHR4X2RvbmUsIEtFUk5fREVCVUcsIHNrZ2UtPm5ldGRldiwKKwkJCSAgICAgInR4IGRvbmUgc2xvdCAldGRcbiIsIGUgLSBza2dlLT50eF9yaW5nLnN0YXJ0KTsKIAogCQlkZXZfa2ZyZWVfc2tiKGUtPnNrYik7CiAJfQpAQCAtMjg4NSw4ICsyODcxLDcgQEAKIHsKIAlzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmIChuZXRpZl9tc2dfdGltZXIoc2tnZSkpCi0JCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJXM6IHR4IHRpbWVvdXRcbiIsIGRldi0+bmFtZSk7CisJbmV0aWZfcHJpbnRrKHNrZ2UsIHRpbWVyLCBLRVJOX0RFQlVHLCBza2dlLT5uZXRkZXYsICJ0eCB0aW1lb3V0XG4iKTsKIAogCXNrZ2Vfd3JpdGU4KHNrZ2UtPmh3LCBRX0FERFIodHhxYWRkcltza2dlLT5wb3J0XSwgUV9DU1IpLCBDU1JfU1RPUCk7CiAJc2tnZV90eF9jbGVhbihkZXYpOwpAQCAtMjkzMiw4ICsyOTE3LDcgQEAKIAlzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2tnZV9odyAqaHcgPSBza2dlLT5odzsKIAlpbnQgcG9ydCA9IHNrZ2UtPnBvcnQ7Ci0JaW50IGksIGNvdW50ID0gZGV2LT5tY19jb3VudDsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmxpc3QgPSBkZXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICpsaXN0OwogCXUzMiBtb2RlOwogCXU4IGZpbHRlcls4XTsKIApAQCAtMjk1Myw3ICsyOTM3LDcgQEAKIAkJICAgIHNrZ2UtPmZsb3dfc3RhdHVzID09IEZMT1dfU1RBVF9TWU1NRVRSSUMpCiAJCQlnZW5lc2lzX2FkZF9maWx0ZXIoZmlsdGVyLCBwYXVzZV9tY19hZGRyKTsKIAotCQlmb3IgKGkgPSAwOyBsaXN0ICYmIGkgPCBjb3VudDsgaSsrLCBsaXN0ID0gbGlzdC0+bmV4dCkKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobGlzdCwgZGV2KQogCQkJZ2VuZXNpc19hZGRfZmlsdGVyKGZpbHRlciwgbGlzdC0+ZG1pX2FkZHIpOwogCX0KIApAQCAtMjk3Miw3ICsyOTU2LDcgQEAKIAlzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2tnZV9odyAqaHcgPSBza2dlLT5odzsKIAlpbnQgcG9ydCA9IHNrZ2UtPnBvcnQ7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpsaXN0ID0gZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbGlzdDsKIAlpbnQgcnhfcGF1c2UgPSAoc2tnZS0+Zmxvd19zdGF0dXMgPT0gRkxPV19TVEFUX1JFTV9TRU5EIHx8CiAJCQlza2dlLT5mbG93X3N0YXR1cyA9PSBGTE9XX1NUQVRfU1lNTUVUUklDKTsKIAl1MTYgcmVnOwpAQCAtMjk4NywxNiArMjk3MSwxNSBAQAogCQlyZWcgJj0gfihHTV9SWENSX1VDRl9FTkEgfCBHTV9SWENSX01DRl9FTkEpOwogCWVsc2UgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCS8qIGFsbCBtdWx0aWNhc3QgKi8KIAkJbWVtc2V0KGZpbHRlciwgMHhmZiwgc2l6ZW9mKGZpbHRlcikpOwotCWVsc2UgaWYgKGRldi0+bWNfY291bnQgPT0gMCAmJiAhcnhfcGF1c2UpLyogbm8gbXVsdGljYXN0ICovCisJZWxzZSBpZiAobmV0ZGV2X21jX2VtcHR5KGRldikgJiYgIXJ4X3BhdXNlKS8qIG5vIG11bHRpY2FzdCAqLwogCQlyZWcgJj0gfkdNX1JYQ1JfTUNGX0VOQTsKIAllbHNlIHsKLQkJaW50IGk7CiAJCXJlZyB8PSBHTV9SWENSX01DRl9FTkE7CiAKIAkJaWYgKHJ4X3BhdXNlKQogCQkJeXVrb25fYWRkX2ZpbHRlcihmaWx0ZXIsIHBhdXNlX21jX2FkZHIpOwogCi0JCWZvciAoaSA9IDA7IGxpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgbGlzdCA9IGxpc3QtPm5leHQpCisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGxpc3QsIGRldikKIAkJCXl1a29uX2FkZF9maWx0ZXIoZmlsdGVyLCBsaXN0LT5kbWlfYWRkcik7CiAJfQogCkBAIC0zMDU0LDEwICszMDM3LDkgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXUxNiBsZW4gPSBjb250cm9sICYgQk1VX0JCQzsKIAotCWlmICh1bmxpa2VseShuZXRpZl9tc2dfcnhfc3RhdHVzKHNrZ2UpKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICIlczogcnggc2xvdCAldGQgc3RhdHVzIDB4JXggbGVuICVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBlIC0gc2tnZS0+cnhfcmluZy5zdGFydCwKLQkJICAgICAgIHN0YXR1cywgbGVuKTsKKwluZXRpZl9wcmludGsoc2tnZSwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLCBza2dlLT5uZXRkZXYsCisJCSAgICAgInJ4IHNsb3QgJXRkIHN0YXR1cyAweCV4IGxlbiAlZFxuIiwKKwkJICAgICBlIC0gc2tnZS0+cnhfcmluZy5zdGFydCwgc3RhdHVzLCBsZW4pOwogCiAJaWYgKGxlbiA+IHNrZ2UtPnJ4X2J1Zl9zaXplKQogCQlnb3RvIGVycm9yOwpAQCAtMzA5Niw3ICszMDc4LDcgQEAKIAkJCQkgcGNpX3VubWFwX2xlbihlLCBtYXBsZW4pLAogCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQlza2IgPSBlLT5za2I7Ci0gIAkJcHJlZmV0Y2goc2tiLT5kYXRhKTsKKwkJcHJlZmV0Y2goc2tiLT5kYXRhKTsKIAkJc2tnZV9yeF9zZXR1cChza2dlLCBlLCBuc2tiLCBza2dlLT5yeF9idWZfc2l6ZSk7CiAJfQogCkBAIC0zMTExLDEwICszMDkzLDkgQEAKIAlyZXR1cm4gc2tiOwogZXJyb3I6CiAKLQlpZiAobmV0aWZfbXNnX3J4X2Vycihza2dlKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICIlczogcnggZXJyLCBzbG90ICV0ZCBjb250cm9sIDB4JXggc3RhdHVzIDB4JXhcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGUgLSBza2dlLT5yeF9yaW5nLnN0YXJ0LAotCQkgICAgICAgY29udHJvbCwgc3RhdHVzKTsKKwluZXRpZl9wcmludGsoc2tnZSwgcnhfZXJyLCBLRVJOX0RFQlVHLCBza2dlLT5uZXRkZXYsCisJCSAgICAgInJ4IGVyciwgc2xvdCAldGQgY29udHJvbCAweCV4IHN0YXR1cyAweCV4XG4iLAorCQkgICAgIGUgLSBza2dlLT5yeF9yaW5nLnN0YXJ0LCBjb250cm9sLCBzdGF0dXMpOwogCiAJaWYgKHNrZ2UtPmh3LT5jaGlwX2lkID09IENISVBfSURfR0VORVNJUykgewogCQlpZiAoc3RhdHVzICYgKFhNUl9GU19SVU5UfFhNUl9GU19MTkdfRVJSKSkKQEAgLTM1NzQsOCArMzU1NSw3IEBACiAJCQlody0+cmFtX29mZnNldCA9IDB4ODAwMDA7CiAJCX0gZWxzZQogCQkJaHctPnJhbV9zaXplID0gdDggKiA1MTI7Ci0JfQotCWVsc2UgaWYgKHQ4ID09IDApCisJfSBlbHNlIGlmICh0OCA9PSAwKQogCQlody0+cmFtX3NpemUgPSAweDIwMDAwOwogCWVsc2UKIAkJaHctPnJhbV9zaXplID0gdDggKiA0MDk2OwpAQCAtMzcyOSw3ICszNzA5LDcgQEAKIAkJZ290byBkb25lOwogCiAJc2tnZSA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3dpdGNoKGV2ZW50KSB7CisJc3dpdGNoIChldmVudCkgewogCWNhc2UgTkVUREVWX0NIQU5HRU5BTUU6CiAJCWlmIChza2dlLT5kZWJ1Z2ZzKSB7CiAJCQlkID0gZGVidWdmc19yZW5hbWUoc2tnZV9kZWJ1Zywgc2tnZS0+ZGVidWdmcywKQEAgLTM3MzcsNyArMzcxNyw3IEBACiAJCQlpZiAoZCkKIAkJCQlza2dlLT5kZWJ1Z2ZzID0gZDsKIAkJCWVsc2UgewotCQkJCXByX2luZm8oUEZYICIlczogcmVuYW1lIGZhaWxlZFxuIiwgZGV2LT5uYW1lKTsKKwkJCQluZXRkZXZfaW5mbyhkZXYsICJyZW5hbWUgZmFpbGVkXG4iKTsKIAkJCQlkZWJ1Z2ZzX3JlbW92ZShza2dlLT5kZWJ1Z2ZzKTsKIAkJCX0KIAkJfQpAQCAtMzc1NSw4ICszNzM1LDcgQEAKIAkJCQkJc2tnZV9kZWJ1ZywgZGV2LAogCQkJCQkmc2tnZV9kZWJ1Z19mb3BzKTsKIAkJaWYgKCFkIHx8IElTX0VSUihkKSkKLQkJCXByX2luZm8oUEZYICIlczogZGVidWdmcyBjcmVhdGUgZmFpbGVkXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQluZXRkZXZfaW5mbyhkZXYsICJkZWJ1Z2ZzIGNyZWF0ZSBmYWlsZWRcbiIpOwogCQllbHNlCiAJCQlza2dlLT5kZWJ1Z2ZzID0gZDsKIAkJYnJlYWs7CkBAIC0zNzc3LDcgKzM3NTYsNyBAQAogCiAJZW50ID0gZGVidWdmc19jcmVhdGVfZGlyKCJza2dlIiwgTlVMTCk7CiAJaWYgKCFlbnQgfHwgSVNfRVJSKGVudCkpIHsKLQkJcHJfaW5mbyhQRlggImRlYnVnZnMgY3JlYXRlIGRpcmVjdG9yeSBmYWlsZWRcbiIpOworCQlwcl9pbmZvKCJkZWJ1Z2ZzIGNyZWF0ZSBkaXJlY3RvcnkgZmFpbGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzg4NSw5ICszODY0LDcgQEAKIHsKIAljb25zdCBzdHJ1Y3Qgc2tnZV9wb3J0ICpza2dlID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCWlmIChuZXRpZl9tc2dfcHJvYmUoc2tnZSkpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogYWRkciAlcE1cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIGRldi0+ZGV2X2FkZHIpOworCW5ldGlmX2luZm8oc2tnZSwgcHJvYmUsIHNrZ2UtPm5ldGRldiwgImFkZHIgJXBNXG4iLCBkZXYtPmRldl9hZGRyKTsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgc2tnZV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKQEAgLTM5MzcsNyArMzkxNCw3IEBACiAKIAllcnIgPSAtRU5PTUVNOwogCS8qIHNwYWNlIGZvciBza2dlQHBjaTowMDAwOjA0OjAwLjAgKi8KLQlodyA9IGt6YWxsb2Moc2l6ZW9mKCpodykgKyBzdHJsZW4oRFJWX05BTUUgIkBwY2k6IiApCisJaHcgPSBremFsbG9jKHNpemVvZigqaHcpICsgc3RybGVuKERSVl9OQU1FICJAcGNpOiIpCiAJCSAgICAgKyBzdHJsZW4ocGNpX25hbWUocGRldikpICsgMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFodykgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgYWxsb2NhdGUgaGFyZHdhcmUgc3RydWN0XG4iKTsKQEAgLTM5NjAsOSArMzkzNywxMCBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggRFJWX1ZFUlNJT04gIiBhZGRyIDB4JWxseCBpcnEgJWQgY2hpcCAlcyByZXYgJWRcbiIsCi0JICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLCBwZGV2LT5pcnEsCi0JICAgICAgIHNrZ2VfYm9hcmRfbmFtZShodyksIGh3LT5jaGlwX3Jldik7CisJcHJfaW5mbygiJXMgYWRkciAweCVsbHggaXJxICVkIGNoaXAgJXMgcmV2ICVkXG4iLAorCQlEUlZfVkVSU0lPTiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksIHBkZXYtPmlycSwKKwkJc2tnZV9ib2FyZF9uYW1lKGh3KSwgaHctPmNoaXBfcmV2KTsKIAogCWRldiA9IHNrZ2VfZGV2aW5pdChodywgMCwgdXNpbmdfZGFjKTsKIAlpZiAoIWRldikKQEAgLTQwMzIsNyArNDAxMCw4IEBACiAKIAlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwogCi0JaWYgKChkZXYxID0gaHctPmRldlsxXSkpCisJZGV2MSA9IGh3LT5kZXZbMV07CisJaWYgKGRldjEpCiAJCXVucmVnaXN0ZXJfbmV0ZGV2KGRldjEpOwogCWRldjAgPSBody0+ZGV2WzBdOwogCXVucmVnaXN0ZXJfbmV0ZGV2KGRldjApOwpAQCAtNDExOSw4ICs0MDk4LDcgQEAKIAkJCWVyciA9IHNrZ2VfdXAoZGV2KTsKIAogCQkJaWYgKGVycikgewotCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBjb3VsZCBub3QgdXA6ICVkXG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQkJbmV0ZGV2X2VycihkZXYsICJjb3VsZCBub3QgdXA6ICVkXG4iLCBlcnIpOwogCQkJCWRldl9jbG9zZShkZXYpOwogCQkJCWdvdG8gb3V0OwogCQkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5jIGIvZHJpdmVycy9uZXQvc2t5Mi5jCmluZGV4IDY3MjQ5YzMuLjY1M2JkZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuYworKysgYi9kcml2ZXJzL25ldC9za3kyLmMKQEAgLTIyLDYgKzIyLDggQEAKICAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC01MCw4ICs1Miw3IEBACiAjaW5jbHVkZSAic2t5Mi5oIgogCiAjZGVmaW5lIERSVl9OQU1FCQkic2t5MiIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjI2IgotI2RlZmluZSBQRlgJCQlEUlZfTkFNRSAiICIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JCSIxLjI3IgogCiAvKgogICogVGhlIFl1a29uIElJIGNoaXBzZXQgdGFrZXMgNjQgYml0IGNvbW1hbmQgYmxvY2tzIChjYWxsZWQgbGlzdCBlbGVtZW50cykKQEAgLTI1MSw2ICsyNTIsOCBAQAogCiAJCXNreTJfcGNpX3dyaXRlMzIoaHcsIFBDSV9DRkdfUkVHXzEsIDApOwogCisJCXNreTJfd3JpdGUxNihodywgQjBfQ1RTVCwgWTJfSFdfV09MX09OKTsKKwogCQkvKiBFbmFibGUgd29ya2Fyb3VuZCBmb3IgZGV2IDQuMTA3IG9uIFl1a29uLVVsdHJhICYgRXh0cmVtZSAqLwogCQlyZWcgPSBza3kyX3JlYWQzMihodywgQjJfR1BfSU8pOwogCQlyZWcgfD0gR0xCX0dQSU9fU1RBVF9SQUNFX0RJUzsKQEAgLTczMSw3ICs3MzQsNiBAQAogCXVuc2lnbmVkIHBvcnQgPSBza3kyLT5wb3J0OwogCWVudW0gZmxvd19jb250cm9sIHNhdmVfbW9kZTsKIAl1MTYgY3RybDsKLQl1MzIgcmVnMTsKIAogCS8qIEJyaW5nIGhhcmR3YXJlIG91dCBvZiByZXNldCAqLwogCXNreTJfd3JpdGUxNihodywgQjBfQ1RTVCwgQ1NfUlNUX0NMUik7CkBAIC03ODIsMTQgKzc4NCwxMSBAQAogCWN0cmwgfD0gV09MX0NUTF9ESVNfUE1FX09OX1BBVFRFUk58V09MX0NUTF9ESVNfUEFUVEVSTl9VTklUOwogCXNreTJfd3JpdGUxNihodywgV09MX1JFR1MocG9ydCwgV09MX0NUUkxfU1RBVCksIGN0cmwpOwogCi0JLyogVHVybiBvbiBsZWdhY3kgUENJLUV4cHJlc3MgUE1FIG1vZGUgKi8KLQlyZWcxID0gc2t5Ml9wY2lfcmVhZDMyKGh3LCBQQ0lfREVWX1JFRzEpOwotCXJlZzEgfD0gUENJX1kyX1BNRV9MRUdBQ1k7Ci0Jc2t5Ml9wY2lfd3JpdGUzMihodywgUENJX0RFVl9SRUcxLCByZWcxKTsKKwkvKiBEaXNhYmxlIFBpRyBmaXJtd2FyZSAqLworCXNreTJfd3JpdGUxNihodywgQjBfQ1RTVCwgWTJfSFdfV09MX09GRik7CiAKIAkvKiBibG9jayByZWNlaXZlciAqLwogCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgUlhfR01GX0NUUkxfVCksIEdNRl9SU1RfU0VUKTsKLQogfQogCiBzdGF0aWMgdm9pZCBza3kyX3NldF90eF9zdGZ3ZChzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQpCkBAIC04MDAsMjkgKzc5OSwxNSBAQAogCSAgICAgIGh3LT5jaGlwX3JldiAhPSBDSElQX1JFVl9ZVV9FWF9BMCkgfHwKIAkgICAgIGh3LT5jaGlwX2lkID49IENISVBfSURfWVVLT05fRkVfUCkgewogCQkvKiBZdWtvbi1FeHRyZW1lIEIwIGFuZCBmdXJ0aGVyIEV4dHJlbWUgZGV2aWNlcyAqLwotCQkvKiBlbmFibGUgU3RvcmUgJiBGb3J3YXJkIG1vZGUgZm9yIFRYICovCisJCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLCBUWF9TVEZXX0VOQSk7CisJfSBlbHNlIGlmIChkZXYtPm10dSA+IEVUSF9EQVRBX0xFTikgeworCQkvKiBzZXQgVHggR01BQyBGSUZPIEFsbW9zdCBFbXB0eSBUaHJlc2hvbGQgKi8KKwkJc2t5Ml93cml0ZTMyKGh3LCBTS19SRUcocG9ydCwgVFhfR01GX0FFX1RIUiksCisJCQkgICAgIChFQ1VfSlVNQk9fV00gPDwgMTYpIHwgRUNVX0FFX1RIUik7CiAKLQkJaWYgKGRldi0+bXR1IDw9IEVUSF9EQVRBX0xFTikKLQkJCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLAotCQkJCSAgICAgVFhfSlVNQk9fRElTIHwgVFhfU1RGV19FTkEpOwotCi0JCWVsc2UKLQkJCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLAotCQkJCSAgICAgVFhfSlVNQk9fRU5BfCBUWF9TVEZXX0VOQSk7Ci0JfSBlbHNlIHsKLQkJaWYgKGRldi0+bXR1IDw9IEVUSF9EQVRBX0xFTikKLQkJCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLCBUWF9TVEZXX0VOQSk7Ci0JCWVsc2UgewotCQkJLyogc2V0IFR4IEdNQUMgRklGTyBBbG1vc3QgRW1wdHkgVGhyZXNob2xkICovCi0JCQlza3kyX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBUWF9HTUZfQUVfVEhSKSwKLQkJCQkgICAgIChFQ1VfSlVNQk9fV00gPDwgMTYpIHwgRUNVX0FFX1RIUik7Ci0KLQkJCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLCBUWF9TVEZXX0RJUyk7Ci0KLQkJCS8qIENhbid0IGRvIG9mZmxvYWQgYmVjYXVzZSBvZiBsYWNrIG9mIHN0b3JlL2ZvcndhcmQgKi8KLQkJCWRldi0+ZmVhdHVyZXMgJj0gfihORVRJRl9GX1RTTyB8IE5FVElGX0ZfU0cgfCBORVRJRl9GX0FMTF9DU1VNKTsKLQkJfQotCX0KKwkJc2t5Ml93cml0ZTMyKGh3LCBTS19SRUcocG9ydCwgVFhfR01GX0NUUkxfVCksIFRYX1NURldfRElTKTsKKwl9IGVsc2UKKwkJc2t5Ml93cml0ZTMyKGh3LCBTS19SRUcocG9ydCwgVFhfR01GX0NUUkxfVCksIFRYX1NURldfRU5BKTsKIH0KIAogc3RhdGljIHZvaWQgc2t5Ml9tYWNfaW5pdChzdHJ1Y3Qgc2t5Ml9odyAqaHcsIHVuc2lnbmVkIHBvcnQpCkBAIC0xMDY1LDYgKzEwNTAsNDAgQEAKIAlyZXR1cm4gbGU7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBza3kyX2dldF9yeF90aHJlc2hvbGQoc3RydWN0IHNreTJfcG9ydCogc2t5MikKK3sKKwl1bnNpZ25lZCBzaXplOworCisJLyogU3BhY2UgbmVlZGVkIGZvciBmcmFtZSBkYXRhICsgaGVhZGVycyByb3VuZGVkIHVwICovCisJc2l6ZSA9IHJvdW5kdXAoc2t5Mi0+bmV0ZGV2LT5tdHUgKyBFVEhfSExFTiArIFZMQU5fSExFTiwgOCk7CisKKwkvKiBTdG9wcGluZyBwb2ludCBmb3IgaGFyZHdhcmUgdHJ1bmNhdGlvbiAqLworCXJldHVybiAoc2l6ZSAtIDgpIC8gc2l6ZW9mKHUzMik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBza3kyX2dldF9yeF9kYXRhX3NpemUoc3RydWN0IHNreTJfcG9ydCogc2t5MikKK3sKKwlzdHJ1Y3QgcnhfcmluZ19pbmZvICpyZTsKKwl1bnNpZ25lZCBzaXplOworCisJLyogU3BhY2UgbmVlZGVkIGZvciBmcmFtZSBkYXRhICsgaGVhZGVycyByb3VuZGVkIHVwICovCisJc2l6ZSA9IHJvdW5kdXAoc2t5Mi0+bmV0ZGV2LT5tdHUgKyBFVEhfSExFTiArIFZMQU5fSExFTiwgOCk7CisKKwlza3kyLT5yeF9uZnJhZ3MgPSBzaXplID4+IFBBR0VfU0hJRlQ7CisJQlVHX09OKHNreTItPnJ4X25mcmFncyA+IEFSUkFZX1NJWkUocmUtPmZyYWdfYWRkcikpOworCisJLyogQ29tcHV0ZSByZXNpZHVlIGFmdGVyIHBhZ2VzICovCisJc2l6ZSAtPSBza3kyLT5yeF9uZnJhZ3MgPDwgUEFHRV9TSElGVDsKKworCS8qIE9wdGltaXplIHRvIGhhbmRsZSBzbWFsbCBwYWNrZXRzIGFuZCBoZWFkZXJzICovCisJaWYgKHNpemUgPCBjb3B5YnJlYWspCisJCXNpemUgPSBjb3B5YnJlYWs7CisJaWYgKHNpemUgPCBFVEhfSExFTikKKwkJc2l6ZSA9IEVUSF9ITEVOOworCisJcmV0dXJuIHNpemU7Cit9CisKIC8qIEJ1aWxkIGRlc2NyaXB0aW9uIHRvIGhhcmR3YXJlIGZvciBvbmUgcmVjZWl2ZSBzZWdtZW50ICovCiBzdGF0aWMgdm9pZCBza3kyX3J4X2FkZChzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyLCAgdTggb3AsCiAJCQlkbWFfYWRkcl90IG1hcCwgdW5zaWduZWQgbGVuKQpAQCAtMTEwMywxOCArMTEyMiwzOSBAQAogCWludCBpOwogCiAJcmUtPmRhdGFfYWRkciA9IHBjaV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwgc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQlpZiAodW5saWtlbHkocGNpX2RtYV9tYXBwaW5nX2Vycm9yKHBkZXYsIHJlLT5kYXRhX2FkZHIpKSkKLQkJcmV0dXJuIC1FSU87CisJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwZGV2LCByZS0+ZGF0YV9hZGRyKSkKKwkJZ290byBtYXBwaW5nX2Vycm9yOwogCiAJcGNpX3VubWFwX2xlbl9zZXQocmUsIGRhdGFfc2l6ZSwgc2l6ZSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsgaSsrKQotCQlyZS0+ZnJhZ19hZGRyW2ldID0gcGNpX21hcF9wYWdlKHBkZXYsCi0JCQkJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2UsCi0JCQkJCQlza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnBhZ2Vfb2Zmc2V0LAotCQkJCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXS5zaXplLAorCWZvciAoaSA9IDA7IGkgPCBza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzOyBpKyspIHsKKwkJc2tiX2ZyYWdfdCAqZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOworCisJCXJlLT5mcmFnX2FkZHJbaV0gPSBwY2lfbWFwX3BhZ2UocGRldiwgZnJhZy0+cGFnZSwKKwkJCQkJCWZyYWctPnBhZ2Vfb2Zmc2V0LAorCQkJCQkJZnJhZy0+c2l6ZSwKIAkJCQkJCVBDSV9ETUFfRlJPTURFVklDRSk7CisKKwkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwZGV2LCByZS0+ZnJhZ19hZGRyW2ldKSkKKwkJCWdvdG8gbWFwX3BhZ2VfZXJyb3I7CisJfQogCXJldHVybiAwOworCittYXBfcGFnZV9lcnJvcjoKKwl3aGlsZSAoLS1pID49IDApIHsKKwkJcGNpX3VubWFwX3BhZ2UocGRldiwgcmUtPmZyYWdfYWRkcltpXSwKKwkJCSAgICAgICBza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldLnNpemUsCisJCQkgICAgICAgUENJX0RNQV9GUk9NREVWSUNFKTsKKwl9CisKKwlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIHJlLT5kYXRhX2FkZHIsIHBjaV91bm1hcF9sZW4ocmUsIGRhdGFfc2l6ZSksCisJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKworbWFwcGluZ19lcnJvcjoKKwlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiJXM6IHJ4IG1hcHBpbmcgZXJyb3JcbiIsCisJCQkgc2tiLT5kZXYtPm5hbWUpOworCXJldHVybiAtRUlPOwogfQogCiBzdGF0aWMgdm9pZCBza3kyX3J4X3VubWFwX3NrYihzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IHJ4X3JpbmdfaW5mbyAqcmUpCkBAIC0xMTczLDggKzEyMTMsNyBAQAogCQkgICAgPT0gc2t5Ml9yZWFkOChodywgUkJfQUREUihyeHEsIFFfUkwpKSkKIAkJCWdvdG8gc3RvcHBlZDsKIAotCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogcmVjZWl2ZXIgc3RvcCBmYWlsZWRcbiIsCi0JICAgICAgIHNreTItPm5ldGRldi0+bmFtZSk7CisJbmV0ZGV2X3dhcm4oc2t5Mi0+bmV0ZGV2LCAicmVjZWl2ZXIgc3RvcCBmYWlsZWRcbiIpOwogc3RvcHBlZDoKIAlza3kyX3dyaXRlMzIoaHcsIFFfQUREUihyeHEsIFFfQ1NSKSwgQk1VX1JTVF9TRVQgfCBCTVVfRklGT19SU1QpOwogCkBAIC0xMzI0LDggKzEzNjMsMzIgQEAKIAlza3kyX3B1dF9pZHgoc2t5Mi0+aHcsIHJ4cSwgc2t5Mi0+cnhfcHV0KTsKIH0KIAorc3RhdGljIGludCBza3kyX2FsbG9jX3J4X3NrYnMoc3RydWN0IHNreTJfcG9ydCAqc2t5MikKK3sKKwlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBza3kyLT5odzsKKwl1bnNpZ25lZCBpOworCisJc2t5Mi0+cnhfZGF0YV9zaXplID0gc2t5Ml9nZXRfcnhfZGF0YV9zaXplKHNreTIpOworCisJLyogRmlsbCBSeCByaW5nICovCisJZm9yIChpID0gMDsgaSA8IHNreTItPnJ4X3BlbmRpbmc7IGkrKykgeworCQlzdHJ1Y3QgcnhfcmluZ19pbmZvICpyZSA9IHNreTItPnJ4X3JpbmcgKyBpOworCisJCXJlLT5za2IgPSBza3kyX3J4X2FsbG9jKHNreTIpOworCQlpZiAoIXJlLT5za2IpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlpZiAoc2t5Ml9yeF9tYXBfc2tiKGh3LT5wZGV2LCByZSwgc2t5Mi0+cnhfZGF0YV9zaXplKSkgeworCQkJZGV2X2tmcmVlX3NrYihyZS0+c2tiKTsKKwkJCXJlLT5za2IgPSBOVUxMOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKIC8qCi0gKiBBbGxvY2F0ZSBhbmQgc2V0dXAgcmVjZWl2ZXIgYnVmZmVyIHBvb2wuCisgKiBTZXR1cCByZWNlaXZlciBidWZmZXIgcG9vbC4KICAqIE5vcm1hbCBjYXNlIHRoaXMgZW5kcyB1cCBjcmVhdGluZyBvbmUgbGlzdCBlbGVtZW50IGZvciBza2IKICAqIGluIHRoZSByZWNlaXZlIHJpbmcuIFdvcnN0IGNhc2UgaWYgdXNpbmcgbGFyZ2UgTVRVIGFuZCBlYWNoCiAgKiBhbGxvY2F0aW9uIGZhbGxzIG9uIGEgZGlmZmVyZW50IDY0IGJpdCByZWdpb24sIHRoYXQgcmVzdWx0cwpAQCAtMTMzMywxMiArMTM5NiwxMiBAQAogICogT25lIGVsZW1lbnQgaXMgdXNlZCBmb3IgY2hlY2tzdW0gZW5hYmxlL2Rpc2FibGUsIGFuZCBvbmUKICAqIGV4dHJhIHRvIGF2b2lkIHdyYXAuCiAgKi8KLXN0YXRpYyBpbnQgc2t5Ml9yeF9zdGFydChzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyKQorc3RhdGljIHZvaWQgc2t5Ml9yeF9zdGFydChzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyKQogewogCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OwogCXN0cnVjdCByeF9yaW5nX2luZm8gKnJlOwogCXVuc2lnbmVkIHJ4cSA9IHJ4cWFkZHJbc2t5Mi0+cG9ydF07Ci0JdW5zaWduZWQgaSwgc2l6ZSwgdGhyZXNoOworCXVuc2lnbmVkIGksIHRocmVzaDsKIAogCXNreTItPnJ4X3B1dCA9IHNreTItPnJ4X25leHQgPSAwOwogCXNreTJfcXNldChodywgcnhxKTsKQEAgLTEzNTksNDAgKzE0MjIsOSBAQAogCWlmICghKGh3LT5mbGFncyAmIFNLWTJfSFdfTkVXX0xFKSkKIAkJcnhfc2V0X2NoZWNrc3VtKHNreTIpOwogCi0JLyogU3BhY2UgbmVlZGVkIGZvciBmcmFtZSBkYXRhICsgaGVhZGVycyByb3VuZGVkIHVwICovCi0Jc2l6ZSA9IHJvdW5kdXAoc2t5Mi0+bmV0ZGV2LT5tdHUgKyBFVEhfSExFTiArIFZMQU5fSExFTiwgOCk7Ci0KLQkvKiBTdG9wcGluZyBwb2ludCBmb3IgaGFyZHdhcmUgdHJ1bmNhdGlvbiAqLwotCXRocmVzaCA9IChzaXplIC0gOCkgLyBzaXplb2YodTMyKTsKLQotCXNreTItPnJ4X25mcmFncyA9IHNpemUgPj4gUEFHRV9TSElGVDsKLQlCVUdfT04oc2t5Mi0+cnhfbmZyYWdzID4gQVJSQVlfU0laRShyZS0+ZnJhZ19hZGRyKSk7Ci0KLQkvKiBDb21wdXRlIHJlc2lkdWUgYWZ0ZXIgcGFnZXMgKi8KLQlzaXplIC09IHNreTItPnJ4X25mcmFncyA8PCBQQUdFX1NISUZUOwotCi0JLyogT3B0aW1pemUgdG8gaGFuZGxlIHNtYWxsIHBhY2tldHMgYW5kIGhlYWRlcnMgKi8KLQlpZiAoc2l6ZSA8IGNvcHlicmVhaykKLQkJc2l6ZSA9IGNvcHlicmVhazsKLQlpZiAoc2l6ZSA8IEVUSF9ITEVOKQotCQlzaXplID0gRVRIX0hMRU47Ci0KLQlza3kyLT5yeF9kYXRhX3NpemUgPSBzaXplOwotCi0JLyogRmlsbCBSeCByaW5nICovCisJLyogc3VibWl0IFJ4IHJpbmcgKi8KIAlmb3IgKGkgPSAwOyBpIDwgc2t5Mi0+cnhfcGVuZGluZzsgaSsrKSB7CiAJCXJlID0gc2t5Mi0+cnhfcmluZyArIGk7Ci0KLQkJcmUtPnNrYiA9IHNreTJfcnhfYWxsb2Moc2t5Mik7Ci0JCWlmICghcmUtPnNrYikKLQkJCWdvdG8gbm9tZW07Ci0KLQkJaWYgKHNreTJfcnhfbWFwX3NrYihody0+cGRldiwgcmUsIHNreTItPnJ4X2RhdGFfc2l6ZSkpIHsKLQkJCWRldl9rZnJlZV9za2IocmUtPnNrYik7Ci0JCQlyZS0+c2tiID0gTlVMTDsKLQkJCWdvdG8gbm9tZW07Ci0JCX0KLQogCQlza3kyX3J4X3N1Ym1pdChza3kyLCByZSk7CiAJfQogCkBAIC0xNDAyLDYgKzE0MzQsNyBAQAogCSAqIHRoZSByZWdpc3RlciBpcyBsaW1pdGVkIHRvIDkgYml0cywgc28gaWYgeW91IGRvIGZyYW1lcyA+IDIwNTIKIAkgKiB5b3UgYmV0dGVyIGdldCB0aGUgTVRVIHJpZ2h0IQogCSAqLworCXRocmVzaCA9IHNreTJfZ2V0X3J4X3RocmVzaG9sZChza3kyKTsKIAlpZiAodGhyZXNoID4gMHgxZmYpCiAJCXNreTJfd3JpdGUzMihodywgU0tfUkVHKHNreTItPnBvcnQsIFJYX0dNRl9DVFJMX1QpLCBSWF9UUlVOQ19PRkYpOwogCWVsc2UgewpAQCAtMTQzMywxMyArMTQ2Niw2IEBACiAJCXNreTJfd3JpdGUzMihodywgUV9BRERSKHR4cWFkZHJbc2t5Mi0+cG9ydF0sIFFfVEVTVCksCiAJCQkgICAgIFRCTVVfVEVTVF9IT01FX0FERF9GSVhfRU4gfCBUQk1VX1RFU1RfUk9VVElOR19BRERfRklYX0VOKTsKIAl9Ci0KLQotCi0JcmV0dXJuIDA7Ci1ub21lbToKLQlza3kyX3J4X2NsZWFuKHNreTIpOwotCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgaW50IHNreTJfYWxsb2NfYnVmZmVycyhzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyKQpAQCAtMTQ3MCw3ICsxNDk2LDcgQEAKIAlpZiAoIXNreTItPnJ4X3JpbmcpCiAJCWdvdG8gbm9tZW07CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc2t5Ml9hbGxvY19yeF9za2JzKHNreTIpOwogbm9tZW06CiAJcmV0dXJuIC1FTk9NRU07CiB9CkBAIC0xNDc5LDYgKzE1MDUsOCBAQAogewogCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OwogCisJc2t5Ml9yeF9jbGVhbihza3kyKTsKKwogCWlmIChza3kyLT5yeF9sZSkgewogCQlwY2lfZnJlZV9jb25zaXN0ZW50KGh3LT5wZGV2LCBSWF9MRV9CWVRFUywKIAkJCQkgICAgc2t5Mi0+cnhfbGUsIHNreTItPnJ4X2xlX21hcCk7CkBAIC0xNDk3LDE2ICsxNTI1LDE2IEBACiAJc2t5Mi0+cnhfcmluZyA9IE5VTEw7CiB9CiAKLS8qIEJyaW5nIHVwIG5ldHdvcmsgaW50ZXJmYWNlLiAqLwotc3RhdGljIGludCBza3kyX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBza3kyX2h3X3VwKHN0cnVjdCBza3kyX3BvcnQgKnNreTIpCiB7Ci0Jc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CiAJdW5zaWduZWQgcG9ydCA9IHNreTItPnBvcnQ7Ci0JdTMyIGltYXNrLCByYW1zaXplOwotCWludCBjYXAsIGVycjsKKwl1MzIgcmFtc2l6ZTsKKwlpbnQgY2FwOwogCXN0cnVjdCBuZXRfZGV2aWNlICpvdGhlcmRldiA9IGh3LT5kZXZbc2t5Mi0+cG9ydF4xXTsKIAorCXR4X2luaXQoc2t5Mik7CisKIAkvKgogIAkgKiBPbiBkdWFsIHBvcnQgUENJLVggY2FyZCwgdGhlcmUgaXMgYW4gcHJvYmxlbSB3aGVyZSBzdGF0dXMKIAkgKiBjYW4gYmUgcmVjZWl2ZWQgb3V0IG9mIG9yZGVyIGR1ZSB0byBzcGxpdCB0cmFuc2FjdGlvbnMKQEAgLTE1MTgsMTYgKzE1NDYsNyBAQAogCQljbWQgPSBza3kyX3BjaV9yZWFkMTYoaHcsIGNhcCArIFBDSV9YX0NNRCk7CiAgCQljbWQgJj0gflBDSV9YX0NNRF9NQVhfU1BMSVQ7CiAgCQlza3kyX3BjaV93cml0ZTE2KGh3LCBjYXAgKyBQQ0lfWF9DTUQsIGNtZCk7Ci0KLSAJfQotCi0JbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQotCWVyciA9IHNreTJfYWxsb2NfYnVmZmVycyhza3kyKTsKLQlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXQ7Ci0KLQl0eF9pbml0KHNreTIpOworCX0KIAogCXNreTJfbWFjX2luaXQoaHcsIHBvcnQpOwogCkBAIC0xNTM2LDcgKzE1NTUsNyBAQAogCWlmIChyYW1zaXplID4gMCkgewogCQl1MzIgcnhzcGFjZTsKIAotCQlwcl9kZWJ1ZyhQRlggIiVzOiByYW0gYnVmZmVyICVkS1xuIiwgZGV2LT5uYW1lLCByYW1zaXplKTsKKwkJbmV0ZGV2X2RiZyhza3kyLT5uZXRkZXYsICJyYW0gYnVmZmVyICVkS1xuIiwgcmFtc2l6ZSk7CiAJCWlmIChyYW1zaXplIDwgMTYpCiAJCQlyeHNwYWNlID0gcmFtc2l6ZSAvIDI7CiAJCWVsc2UKQEAgLTE1NjgsMTggKzE1ODcsMzMgQEAKIAlza3kyX3NldF92bGFuX21vZGUoaHcsIHBvcnQsIHNreTItPnZsZ3JwICE9IE5VTEwpOwogI2VuZGlmCiAKLQllcnIgPSBza3kyX3J4X3N0YXJ0KHNreTIpOworCXNreTJfcnhfc3RhcnQoc2t5Mik7Cit9CisKKy8qIEJyaW5nIHVwIG5ldHdvcmsgaW50ZXJmYWNlLiAqLworc3RhdGljIGludCBza3kyX3VwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CisJdW5zaWduZWQgcG9ydCA9IHNreTItPnBvcnQ7CisJdTMyIGltYXNrOworCWludCBlcnI7CisKKwluZXRpZl9jYXJyaWVyX29mZihkZXYpOworCisJZXJyID0gc2t5Ml9hbGxvY19idWZmZXJzKHNreTIpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dDsKIAorCXNreTJfaHdfdXAoc2t5Mik7CisKIAkvKiBFbmFibGUgaW50ZXJydXB0cyBmcm9tIHBoeS9tYWMgZm9yIHBvcnQgKi8KIAlpbWFzayA9IHNreTJfcmVhZDMyKGh3LCBCMF9JTVNLKTsKIAlpbWFzayB8PSBwb3J0aXJxX21za1twb3J0XTsKIAlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGltYXNrKTsKIAlza3kyX3JlYWQzMihodywgQjBfSU1TSyk7CiAKLQlpZiAobmV0aWZfbXNnX2lmdXAoc2t5MikpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogZW5hYmxpbmcgaW50ZXJmYWNlXG4iLCBkZXYtPm5hbWUpOworCW5ldGlmX2luZm8oc2t5MiwgaWZ1cCwgZGV2LCAiZW5hYmxpbmcgaW50ZXJmYWNlXG4iKTsKIAogCXJldHVybiAwOwogCkBAIC0xNjYyLDkgKzE2OTYsOCBAQAogCQlnb3RvIG1hcHBpbmdfZXJyb3I7CiAKIAlzbG90ID0gc2t5Mi0+dHhfcHJvZDsKLQlpZiAodW5saWtlbHkobmV0aWZfbXNnX3R4X3F1ZXVlZChza3kyKSkpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogdHggcXVldWVkLCBzbG90ICV1LCBsZW4gJWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHNsb3QsIHNrYi0+bGVuKTsKKwluZXRpZl9wcmludGsoc2t5MiwgdHhfcXVldWVkLCBLRVJOX0RFQlVHLCBkZXYsCisJCSAgICAgInR4IHF1ZXVlZCwgc2xvdCAldSwgbGVuICVkXG4iLCBzbG90LCBza2ItPmxlbik7CiAKIAkvKiBTZW5kIGhpZ2ggYml0cyBpZiBuZWVkZWQgKi8KIAl1cHBlciA9IHVwcGVyXzMyX2JpdHMobWFwcGluZyk7CkBAIC0xODI5LDkgKzE4NjIsOCBAQAogCQlza3kyX3R4X3VubWFwKHNreTItPmh3LT5wZGV2LCByZSk7CiAKIAkJaWYgKHNrYikgewotCQkJaWYgKHVubGlrZWx5KG5ldGlmX21zZ190eF9kb25lKHNreTIpKSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4IGRvbmUgJXVcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgaWR4KTsKKwkJCW5ldGlmX3ByaW50ayhza3kyLCB0eF9kb25lLCBLRVJOX0RFQlVHLCBkZXYsCisJCQkJICAgICAidHggZG9uZSAldVxuIiwgaWR4KTsKIAogCQkJZGV2LT5zdGF0cy50eF9wYWNrZXRzKys7CiAJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwpAQCAtMTg0NSwxMCArMTg3Nyw2IEBACiAKIAlza3kyLT50eF9jb25zID0gaWR4OwogCXNtcF9tYigpOwotCi0JLyogV2FrZSB1bmxlc3MgaXQncyBkZXRhY2hlZCwgYW5kIGNhbGxlZCBlLmcuIGZyb20gc2t5Ml9kb3duKCkgKi8KLQlpZiAodHhfYXZhaWwoc2t5MikgPiBNQVhfU0tCX1RYX0xFICsgNCAmJiBuZXRpZl9kZXZpY2VfcHJlc2VudChkZXYpKQotCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CiAKIHN0YXRpYyB2b2lkIHNreTJfdHhfcmVzZXQoc3RydWN0IHNreTJfaHcgKmh3LCB1bnNpZ25lZCBwb3J0KQpAQCAtMTg3MywyMSArMTkwMSwxMSBAQAogCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgVFhfR01GX0NUUkxfVCksIEdNRl9SU1RfU0VUKTsKIH0KIAotLyogTmV0d29yayBzaHV0ZG93biAqLwotc3RhdGljIGludCBza3kyX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHNreTJfaHdfZG93bihzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyKQogewotCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OwogCXVuc2lnbmVkIHBvcnQgPSBza3kyLT5wb3J0OwogCXUxNiBjdHJsOwotCXUzMiBpbWFzazsKLQotCS8qIE5ldmVyIHJlYWxseSBnb3Qgc3RhcnRlZCEgKi8KLQlpZiAoIXNreTItPnR4X2xlKQotCQlyZXR1cm4gMDsKLQotCWlmIChuZXRpZl9tc2dfaWZkb3duKHNreTIpKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IGRpc2FibGluZyBpbnRlcmZhY2VcbiIsIGRldi0+bmFtZSk7CiAKIAkvKiBGb3JjZSBmbG93IGNvbnRyb2wgb2ZmICovCiAJc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBHTUFDX0NUUkwpLCBHTUNfUEFVU0VfT0ZGKTsKQEAgLTE5MjAsMTUgKzE5MzgsNiBAQAogCiAJc2t5Ml9yeF9zdG9wKHNreTIpOwogCi0JLyogRGlzYWJsZSBwb3J0IElSUSAqLwotCWltYXNrID0gc2t5Ml9yZWFkMzIoaHcsIEIwX0lNU0spOwotCWltYXNrICY9IH5wb3J0aXJxX21za1twb3J0XTsKLQlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIGltYXNrKTsKLQlza3kyX3JlYWQzMihodywgQjBfSU1TSyk7Ci0KLQlzeW5jaHJvbml6ZV9pcnEoaHctPnBkZXYtPmlycSk7Ci0JbmFwaV9zeW5jaHJvbml6ZSgmaHctPm5hcGkpOwotCiAJc3Bpbl9sb2NrX2JoKCZza3kyLT5waHlfbG9jayk7CiAJc2t5Ml9waHlfcG93ZXJfZG93bihodywgcG9ydCk7CiAJc3Bpbl91bmxvY2tfYmgoJnNreTItPnBoeV9sb2NrKTsKQEAgLTE5MzcsOCArMTk0NiwyOSBAQAogCiAJLyogRnJlZSBhbnkgcGVuZGluZyBmcmFtZXMgc3R1Y2sgaW4gSFcgcXVldWUgKi8KIAlza3kyX3R4X2NvbXBsZXRlKHNreTIsIHNreTItPnR4X3Byb2QpOworfQogCi0Jc2t5Ml9yeF9jbGVhbihza3kyKTsKKy8qIE5ldHdvcmsgc2h1dGRvd24gKi8KK3N0YXRpYyBpbnQgc2t5Ml9kb3duKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNreTJfaHcgKmh3ID0gc2t5Mi0+aHc7CisKKwkvKiBOZXZlciByZWFsbHkgZ290IHN0YXJ0ZWQhICovCisJaWYgKCFza3kyLT50eF9sZSkKKwkJcmV0dXJuIDA7CisKKwluZXRpZl9pbmZvKHNreTIsIGlmZG93biwgZGV2LCAiZGlzYWJsaW5nIGludGVyZmFjZVxuIik7CisKKwkvKiBEaXNhYmxlIHBvcnQgSVJRICovCisJc2t5Ml93cml0ZTMyKGh3LCBCMF9JTVNLLAorCQkgICAgIHNreTJfcmVhZDMyKGh3LCBCMF9JTVNLKSAmIH5wb3J0aXJxX21za1tza3kyLT5wb3J0XSk7CisJc2t5Ml9yZWFkMzIoaHcsIEIwX0lNU0spOworCisJc3luY2hyb25pemVfaXJxKGh3LT5wZGV2LT5pcnEpOworCW5hcGlfc3luY2hyb25pemUoJmh3LT5uYXBpKTsKKworCXNreTJfaHdfZG93bihza3kyKTsKIAogCXNreTJfZnJlZV9idWZmZXJzKHNreTIpOwogCkBAIC0xOTk0LDEyICsyMDI0LDExIEBACiAJc2t5Ml93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBMTktfTEVEX1JFRyksCiAJCSAgICBMSU5LTEVEX09OIHwgTElOS0xFRF9CTElOS19PRkYgfCBMSU5LTEVEX0xJTktTWU5DX09GRik7CiAKLQlpZiAobmV0aWZfbXNnX2xpbmsoc2t5MikpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYCi0JCSAgICAgICAiJXM6IExpbmsgaXMgdXAgYXQgJWQgTWJwcywgJXMgZHVwbGV4LCBmbG93IGNvbnRyb2wgJXNcbiIsCi0JCSAgICAgICBza3kyLT5uZXRkZXYtPm5hbWUsIHNreTItPnNwZWVkLAotCQkgICAgICAgc2t5Mi0+ZHVwbGV4ID09IERVUExFWF9GVUxMID8gImZ1bGwiIDogImhhbGYiLAotCQkgICAgICAgZmNfbmFtZVtza3kyLT5mbG93X3N0YXR1c10pOworCW5ldGlmX2luZm8oc2t5MiwgbGluaywgc2t5Mi0+bmV0ZGV2LAorCQkgICAiTGluayBpcyB1cCBhdCAlZCBNYnBzLCAlcyBkdXBsZXgsIGZsb3cgY29udHJvbCAlc1xuIiwKKwkJICAgc2t5Mi0+c3BlZWQsCisJCSAgIHNreTItPmR1cGxleCA9PSBEVVBMRVhfRlVMTCA/ICJmdWxsIiA6ICJoYWxmIiwKKwkJICAgZmNfbmFtZVtza3kyLT5mbG93X3N0YXR1c10pOwogfQogCiBzdGF0aWMgdm9pZCBza3kyX2xpbmtfZG93bihzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyKQpAQCAtMjAxOSw4ICsyMDQ4LDcgQEAKIAkvKiBUdXJuIG9mZiBsaW5rIExFRCAqLwogCXNreTJfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgTE5LX0xFRF9SRUcpLCBMSU5LTEVEX09GRik7CiAKLQlpZiAobmV0aWZfbXNnX2xpbmsoc2t5MikpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogTGluayBpcyBkb3duLlxuIiwgc2t5Mi0+bmV0ZGV2LT5uYW1lKTsKKwluZXRpZl9pbmZvKHNreTIsIGxpbmssIHNreTItPm5ldGRldiwgIkxpbmsgaXMgZG93blxuIik7CiAKIAlza3kyX3BoeV9pbml0KGh3LCBwb3J0KTsKIH0KQEAgLTIwNDIsMTMgKzIwNzAsMTIgQEAKIAlhZHZlcnQgPSBnbV9waHlfcmVhZChodywgcG9ydCwgUEhZX01BUlZfQVVORV9BRFYpOwogCWxwYSA9IGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9BVU5FX0xQKTsKIAlpZiAobHBhICYgUEhZX01fQU5fUkYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IHJlbW90ZSBmYXVsdCIsIHNreTItPm5ldGRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoc2t5Mi0+bmV0ZGV2LCAicmVtb3RlIGZhdWx0XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCWlmICghKGF1eCAmIFBIWV9NX1BTX1NQRFVQX1JFUykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IHNwZWVkL2R1cGxleCBtaXNtYXRjaCIsCi0JCSAgICAgICBza3kyLT5uZXRkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKHNreTItPm5ldGRldiwgInNwZWVkL2R1cGxleCBtaXNtYXRjaFxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTIxMTAsOSArMjEzNyw4IEBACiAJaXN0YXR1cyA9IGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9JTlRfU1RBVCk7CiAJcGh5c3RhdCA9IGdtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfTUFSVl9QSFlfU1RBVCk7CiAKLQlpZiAobmV0aWZfbXNnX2ludHIoc2t5MikpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogcGh5IGludGVycnVwdCBzdGF0dXMgMHgleCAweCV4XG4iLAotCQkgICAgICAgc2t5Mi0+bmV0ZGV2LT5uYW1lLCBpc3RhdHVzLCBwaHlzdGF0KTsKKwluZXRpZl9pbmZvKHNreTIsIGludHIsIHNreTItPm5ldGRldiwgInBoeSBpbnRlcnJ1cHQgc3RhdHVzIDB4JXggMHgleFxuIiwKKwkJICAgaXN0YXR1cywgcGh5c3RhdCk7CiAKIAlpZiAoaXN0YXR1cyAmIFBIWV9NX0lTX0FOX0NPTVBMKSB7CiAJCWlmIChza3kyX2F1dG9uZWdfZG9uZShza3kyLCBwaHlzdGF0KSA9PSAwKQpAQCAtMjE2NiwxMyArMjE5MiwxMiBAQAogCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OwogCi0JaWYgKG5ldGlmX21zZ190aW1lcihza3kyKSkKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IHR4IHRpbWVvdXRcbiIsIGRldi0+bmFtZSk7CisJbmV0aWZfZXJyKHNreTIsIHRpbWVyLCBkZXYsICJ0eCB0aW1lb3V0XG4iKTsKIAotCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJXM6IHRyYW5zbWl0IHJpbmcgJXUgLi4gJXUgcmVwb3J0PSV1IGRvbmU9JXVcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgc2t5Mi0+dHhfY29ucywgc2t5Mi0+dHhfcHJvZCwKLQkgICAgICAgc2t5Ml9yZWFkMTYoaHcsIHNreTItPnBvcnQgPT0gMCA/IFNUQVRfVFhBMV9SSURYIDogU1RBVF9UWEEyX1JJRFgpLAotCSAgICAgICBza3kyX3JlYWQxNihodywgUV9BRERSKHR4cWFkZHJbc2t5Mi0+cG9ydF0sIFFfRE9ORSkpKTsKKwluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgInRyYW5zbWl0IHJpbmcgJXUgLi4gJXUgcmVwb3J0PSV1IGRvbmU9JXVcbiIsCisJCSAgICAgIHNreTItPnR4X2NvbnMsIHNreTItPnR4X3Byb2QsCisJCSAgICAgIHNreTJfcmVhZDE2KGh3LCBza3kyLT5wb3J0ID09IDAgPyBTVEFUX1RYQTFfUklEWCA6IFNUQVRfVFhBMl9SSURYKSwKKwkJICAgICAgc2t5Ml9yZWFkMTYoaHcsIFFfQUREUih0eHFhZGRyW3NreTItPnBvcnRdLCBRX0RPTkUpKSk7CiAKIAkvKiBjYW4ndCByZXN0YXJ0IHNhZmVseSB1bmRlciBzb2Z0aXJxICovCiAJc2NoZWR1bGVfd29yaygmaHctPnJlc3RhcnRfd29yayk7CkBAIC0yMTg3LDE0ICsyMjEyLDIwIEBACiAJdTE2IGN0bCwgbW9kZTsKIAl1MzIgaW1hc2s7CiAKKwkvKiBNVFUgc2l6ZSBvdXRzaWRlIHRoZSBzcGVjICovCiAJaWYgKG5ld19tdHUgPCBFVEhfWkxFTiB8fCBuZXdfbXR1ID4gRVRIX0pVTUJPX01UVSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBNVFUgPiAxNTAwIG9uIHl1a29uIEZFIGFuZCBGRSsgbm90IGFsbG93ZWQgKi8KIAlpZiAobmV3X210dSA+IEVUSF9EQVRBX0xFTiAmJgogCSAgICAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9GRSB8fAogCSAgICAgaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9GRV9QKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBUU08sIGV0YyBvbiBZdWtvbiBVbHRyYSBhbmQgTVRVID4gMTUwMCBub3Qgc3VwcG9ydGVkICovCisJaWYgKG5ld19tdHUgPiBFVEhfREFUQV9MRU4gJiYgaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9FQ19VKQorCQlkZXYtPmZlYXR1cmVzICY9IH4oTkVUSUZfRl9UU098TkVUSUZfRl9TR3xORVRJRl9GX0FMTF9DU1VNKTsKKwogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCWRldi0+bXR1ID0gbmV3X210dTsKIAkJcmV0dXJuIDA7CkBAIC0yMjI5LDcgKzIyNjAsMTEgQEAKIAogCXNreTJfd3JpdGU4KGh3LCBSQl9BRERSKHJ4cWFkZHJbcG9ydF0sIFJCX0NUUkwpLCBSQl9FTkFfT1BfTUQpOwogCi0JZXJyID0gc2t5Ml9yeF9zdGFydChza3kyKTsKKwllcnIgPSBza3kyX2FsbG9jX3J4X3NrYnMoc2t5Mik7CisJaWYgKCFlcnIpCisJCXNreTJfcnhfc3RhcnQoc2t5Mik7CisJZWxzZQorCQlza3kyX3J4X2NsZWFuKHNreTIpOwogCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgaW1hc2spOwogCiAJc2t5Ml9yZWFkMzIoaHcsIEIwX1kyX1NQX0xJU1IpOwpAQCAtMjMwNiwzMCArMjM0MSwzMiBAQAogCQkJCSAgIHN0cnVjdCByeF9yaW5nX2luZm8gKnJlLAogCQkJCSAgIHVuc2lnbmVkIGludCBsZW5ndGgpCiB7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYiwgKm5za2I7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcnhfcmluZ19pbmZvIG5yZTsKIAl1bnNpZ25lZCBoZHJfc3BhY2UgPSBza3kyLT5yeF9kYXRhX3NpemU7CiAKLQkvKiBEb24ndCBiZSB0cmlja3kgYWJvdXQgcmV1c2luZyBwYWdlcyAoeWV0KSAqLwotCW5za2IgPSBza3kyX3J4X2FsbG9jKHNreTIpOwotCWlmICh1bmxpa2VseSghbnNrYikpCi0JCXJldHVybiBOVUxMOworCW5yZS5za2IgPSBza3kyX3J4X2FsbG9jKHNreTIpOworCWlmICh1bmxpa2VseSghbnJlLnNrYikpCisJCWdvdG8gbm9idWY7CisKKwlpZiAoc2t5Ml9yeF9tYXBfc2tiKHNreTItPmh3LT5wZGV2LCAmbnJlLCBoZHJfc3BhY2UpKQorCQlnb3RvIG5vbWFwOwogCiAJc2tiID0gcmUtPnNrYjsKIAlza3kyX3J4X3VubWFwX3NrYihza3kyLT5ody0+cGRldiwgcmUpOwotCiAJcHJlZmV0Y2goc2tiLT5kYXRhKTsKLQlyZS0+c2tiID0gbnNrYjsKLQlpZiAoc2t5Ml9yeF9tYXBfc2tiKHNreTItPmh3LT5wZGV2LCByZSwgaGRyX3NwYWNlKSkgewotCQlkZXZfa2ZyZWVfc2tiKG5za2IpOwotCQlyZS0+c2tiID0gc2tiOwotCQlyZXR1cm4gTlVMTDsKLQl9CisJKnJlID0gbnJlOwogCiAJaWYgKHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpCiAJCXNrYl9wdXRfZnJhZ3Moc2tiLCBoZHJfc3BhY2UsIGxlbmd0aCk7CiAJZWxzZQogCQlza2JfcHV0KHNrYiwgbGVuZ3RoKTsKIAlyZXR1cm4gc2tiOworCitub21hcDoKKwlkZXZfa2ZyZWVfc2tiKG5yZS5za2IpOworbm9idWY6CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qCkBAIC0yMzUwLDkgKzIzODcsOSBAQAogCQljb3VudCAtPSBWTEFOX0hMRU47CiAjZW5kaWYKIAotCWlmICh1bmxpa2VseShuZXRpZl9tc2dfcnhfc3RhdHVzKHNreTIpKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICIlczogcnggc2xvdCAldSBzdGF0dXMgMHgleCBsZW4gJWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHNreTItPnJ4X25leHQsIHN0YXR1cywgbGVuZ3RoKTsKKwluZXRpZl9wcmludGsoc2t5Miwgcnhfc3RhdHVzLCBLRVJOX0RFQlVHLCBkZXYsCisJCSAgICAgInJ4IHNsb3QgJXUgc3RhdHVzIDB4JXggbGVuICVkXG4iLAorCQkgICAgIHNreTItPnJ4X25leHQsIHN0YXR1cywgbGVuZ3RoKTsKIAogCXNreTItPnJ4X25leHQgPSAoc2t5Mi0+cnhfbmV4dCArIDEpICUgc2t5Mi0+cnhfcGVuZGluZzsKIAlwcmVmZXRjaChza3kyLT5yeF9yaW5nICsgc2t5Mi0+cnhfbmV4dCk7CkBAIC0yMzgxLDYgKzI0MTgsOSBAQAogCQlza2IgPSByZWNlaXZlX2NvcHkoc2t5MiwgcmUsIGxlbmd0aCk7CiAJZWxzZQogCQlza2IgPSByZWNlaXZlX25ldyhza3kyLCByZSwgbGVuZ3RoKTsKKworCWRldi0+c3RhdHMucnhfZHJvcHBlZCArPSAoc2tiID09IE5VTEwpOworCiByZXN1Ym1pdDoKIAlza3kyX3J4X3N1Ym1pdChza3kyLCByZSk7CiAKQEAgLTIzOTAsOSArMjQzMCwxMCBAQAogCS8qIFRydW5jYXRpb24gb2Ygb3Zlcmxlbmd0aCBwYWNrZXRzCiAJICAgY2F1c2VzIFBIWSBsZW5ndGggdG8gbm90IG1hdGNoIE1BQyBsZW5ndGggKi8KIAkrK2Rldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9yczsKLQlpZiAobmV0aWZfbXNnX3J4X2Vycihza3kyKSAmJiBuZXRfcmF0ZWxpbWl0KCkpCi0JCXByX2luZm8oUEZYICIlczogcnggbGVuZ3RoIGVycm9yOiBzdGF0dXMgJSN4IGxlbmd0aCAlZFxuIiwKLQkJCWRldi0+bmFtZSwgc3RhdHVzLCBsZW5ndGgpOworCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCW5ldGlmX2luZm8oc2t5MiwgcnhfZXJyLCBkZXYsCisJCQkgICAicnggbGVuZ3RoIGVycm9yOiBzdGF0dXMgJSN4IGxlbmd0aCAlZFxuIiwKKwkJCSAgIHN0YXR1cywgbGVuZ3RoKTsKIAlnb3RvIHJlc3VibWl0OwogCiBlcnJvcjoKQEAgLTI0MDIsOSArMjQ0Myw5IEBACiAJCWdvdG8gcmVzdWJtaXQ7CiAJfQogCi0JaWYgKG5ldGlmX21zZ19yeF9lcnIoc2t5MikgJiYgbmV0X3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IHJ4IGVycm9yLCBzdGF0dXMgMHgleCBsZW5ndGggJWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHN0YXR1cywgbGVuZ3RoKTsKKwlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQluZXRpZl9pbmZvKHNreTIsIHJ4X2VyciwgZGV2LAorCQkJICAgInJ4IGVycm9yLCBzdGF0dXMgMHgleCBsZW5ndGggJWRcbiIsIHN0YXR1cywgbGVuZ3RoKTsKIAogCWlmIChzdGF0dXMgJiAoR01SX0ZTX0xPTkdfRVJSIHwgR01SX0ZTX1VOX1NJWkUpKQogCQlkZXYtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKQEAgLTI0MjEsOCArMjQ2MiwxMyBAQAogewogCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCXNreTJfdHhfY29tcGxldGUoc2t5MiwgbGFzdCk7CisKKwkJLyogV2FrZSB1bmxlc3MgaXQncyBkZXRhY2hlZCwgYW5kIGNhbGxlZCBlLmcuIGZyb20gc2t5Ml9kb3duKCkgKi8KKwkJaWYgKHR4X2F2YWlsKHNreTIpID4gTUFYX1NLQl9UWF9MRSArIDQpCisJCQluZXRpZl93YWtlX3F1ZXVlKGRldik7CisJfQogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgc2t5Ml9za2JfcngoY29uc3Qgc3RydWN0IHNreTJfcG9ydCAqc2t5MiwKQEAgLTI0NTgsNiArMjUwNCwzMiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgc2t5Ml9yeF9jaGVja3N1bShzdHJ1Y3Qgc2t5Ml9wb3J0ICpza3kyLCB1MzIgc3RhdHVzKQoreworCS8qIElmIHRoaXMgaGFwcGVucyB0aGVuIGRyaXZlciBhc3N1bWluZyB3cm9uZyBmb3JtYXQgZm9yIGNoaXAgdHlwZSAqLworCUJVR19PTihza3kyLT5ody0+ZmxhZ3MgJiBTS1kyX0hXX05FV19MRSk7CisKKwkvKiBCb3RoIGNoZWNrc3VtIGNvdW50ZXJzIGFyZSBwcm9ncmFtbWVkIHRvIHN0YXJ0IGF0CisJICogdGhlIHNhbWUgb2Zmc2V0LCBzbyB1bmxlc3MgdGhlcmUgaXMgYSBwcm9ibGVtIHRoZXkKKwkgKiBzaG91bGQgbWF0Y2guIFRoaXMgZmFpbHVyZSBpcyBhbiBlYXJseSBpbmRpY2F0aW9uIHRoYXQKKwkgKiBoYXJkd2FyZSByZWNlaXZlIGNoZWNrc3VtbWluZyB3b24ndCB3b3JrLgorCSAqLworCWlmIChsaWtlbHkoKHUxNikoc3RhdHVzID4+IDE2KSA9PSAodTE2KXN0YXR1cykpIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNreTItPnJ4X3Jpbmdbc2t5Mi0+cnhfbmV4dF0uc2tiOworCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX0NPTVBMRVRFOworCQlza2ItPmNzdW0gPSBsZTE2X3RvX2NwdShzdGF0dXMpOworCX0gZWxzZSB7CisJCWRldl9ub3RpY2UoJnNreTItPmh3LT5wZGV2LT5kZXYsCisJCQkgICAiJXM6IHJlY2VpdmUgY2hlY2tzdW0gcHJvYmxlbSAoc3RhdHVzID0gJSN4KVxuIiwKKwkJCSAgIHNreTItPm5ldGRldi0+bmFtZSwgc3RhdHVzKTsKKworCQkvKiBEaXNhYmxlIGNoZWNrc3VtIG9mZmxvYWQgKi8KKwkJc2t5Mi0+ZmxhZ3MgJj0gflNLWTJfRkxBR19SWF9DSEVDS1NVTTsKKwkJc2t5Ml93cml0ZTMyKHNreTItPmh3LCBRX0FERFIocnhxYWRkcltza3kyLT5wb3J0XSwgUV9DU1IpLAorCQkJICAgICBCTVVfRElTX1JYX0NIS1NVTSk7CisJfQorfQorCiAvKiBQcm9jZXNzIHN0YXR1cyByZXNwb25zZSByaW5nICovCiBzdGF0aWMgaW50IHNreTJfc3RhdHVzX2ludHIoc3RydWN0IHNreTJfaHcgKmh3LCBpbnQgdG9fZG8sIHUxNiBpZHgpCiB7CkBAIC0yNDkyLDExICsyNTY0LDEwIEBACiAJCWNhc2UgT1BfUlhTVEFUOgogCQkJdG90YWxfcGFja2V0c1twb3J0XSsrOwogCQkJdG90YWxfYnl0ZXNbcG9ydF0gKz0gbGVuZ3RoOworCiAJCQlza2IgPSBza3kyX3JlY2VpdmUoZGV2LCBsZW5ndGgsIHN0YXR1cyk7Ci0JCQlpZiAodW5saWtlbHkoIXNrYikpIHsKLQkJCQlkZXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKKwkJCWlmICghc2tiKQogCQkJCWJyZWFrOwotCQkJfQogCiAJCQkvKiBUaGlzIGNoaXAgcmVwb3J0cyBjaGVja3N1bSBzdGF0dXMgZGlmZmVyZW50bHkgKi8KIAkJCWlmIChody0+ZmxhZ3MgJiBTS1kyX0hXX05FV19MRSkgewpAQCAtMjUyNywzNyArMjU5OCw4IEBACiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KICNlbmRpZgogCQljYXNlIE9QX1JYQ0hLUzoKLQkJCWlmICghKHNreTItPmZsYWdzICYgU0tZMl9GTEFHX1JYX0NIRUNLU1VNKSkKLQkJCQlicmVhazsKLQotCQkJLyogSWYgdGhpcyBoYXBwZW5zIHRoZW4gZHJpdmVyIGFzc3VtaW5nIHdyb25nIGZvcm1hdCAqLwotCQkJaWYgKHVubGlrZWx5KGh3LT5mbGFncyAmIFNLWTJfSFdfTkVXX0xFKSkgewotCQkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJCXByaW50ayhLRVJOX05PVElDRSAiJXM6IHVuZXhwZWN0ZWQiCi0JCQkJCSAgICAgICAiIGNoZWNrc3VtIHN0YXR1c1xuIiwKLQkJCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCS8qIEJvdGggY2hlY2tzdW0gY291bnRlcnMgYXJlIHByb2dyYW1tZWQgdG8gc3RhcnQgYXQKLQkJCSAqIHRoZSBzYW1lIG9mZnNldCwgc28gdW5sZXNzIHRoZXJlIGlzIGEgcHJvYmxlbSB0aGV5Ci0JCQkgKiBzaG91bGQgbWF0Y2guIFRoaXMgZmFpbHVyZSBpcyBhbiBlYXJseSBpbmRpY2F0aW9uIHRoYXQKLQkJCSAqIGhhcmR3YXJlIHJlY2VpdmUgY2hlY2tzdW1taW5nIHdvbid0IHdvcmsuCi0JCQkgKi8KLQkJCWlmIChsaWtlbHkoc3RhdHVzID4+IDE2ID09IChzdGF0dXMgJiAweGZmZmYpKSkgewotCQkJCXNrYiA9IHNreTItPnJ4X3Jpbmdbc2t5Mi0+cnhfbmV4dF0uc2tiOwotCQkJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fQ09NUExFVEU7Ci0JCQkJc2tiLT5jc3VtID0gbGUxNl90b19jcHUoc3RhdHVzKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRrKEtFUk5fTk9USUNFIFBGWCAiJXM6IGhhcmR3YXJlIHJlY2VpdmUgIgotCQkJCSAgICAgICAiY2hlY2tzdW0gcHJvYmxlbSAoc3RhdHVzID0gJSN4KVxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOwotCQkJCXNreTItPmZsYWdzICY9IH5TS1kyX0ZMQUdfUlhfQ0hFQ0tTVU07Ci0KLQkJCQlza3kyX3dyaXRlMzIoc2t5Mi0+aHcsCi0JCQkJCSAgICAgUV9BRERSKHJ4cWFkZHJbcG9ydF0sIFFfQ1NSKSwKLQkJCQkJICAgICBCTVVfRElTX1JYX0NIS1NVTSk7Ci0JCQl9CisJCQlpZiAobGlrZWx5KHNreTItPmZsYWdzICYgU0tZMl9GTEFHX1JYX0NIRUNLU1VNKSkKKwkJCQlza3kyX3J4X2NoZWNrc3VtKHNreTIsIHN0YXR1cyk7CiAJCQlicmVhazsKIAogCQljYXNlIE9QX1RYSU5ERVhMRToKQEAgLTI1NzEsOCArMjYxMyw3IEBACiAKIAkJZGVmYXVsdDoKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKLQkJCQkgICAgICAgInVua25vd24gc3RhdHVzIG9wY29kZSAweCV4XG4iLCBvcGNvZGUpOworCQkJCXByX3dhcm5pbmcoInVua25vd24gc3RhdHVzIG9wY29kZSAweCV4XG4iLCBvcGNvZGUpOwogCQl9CiAJfSB3aGlsZSAoaHctPnN0X2lkeCAhPSBpZHgpOwogCkBAIC0yNTkxLDQxICsyNjMyLDM3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGh3LT5kZXZbcG9ydF07CiAKIAlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IGh3IGVycm9yIGludGVycnVwdCBzdGF0dXMgMHgleFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKKwkJbmV0ZGV2X2luZm8oZGV2LCAiaHcgZXJyb3IgaW50ZXJydXB0IHN0YXR1cyAweCV4XG4iLCBzdGF0dXMpOwogCiAJaWYgKHN0YXR1cyAmIFkyX0lTX1BBUl9SRDEpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiByYW0gZGF0YSByZWFkIHBhcml0eSBlcnJvclxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X2VycihkZXYsICJyYW0gZGF0YSByZWFkIHBhcml0eSBlcnJvclxuIik7CiAJCS8qIENsZWFyIElSUSAqLwogCQlza3kyX3dyaXRlMTYoaHcsIFJBTV9CVUZGRVIocG9ydCwgQjNfUklfQ1RSTCksIFJJX0NMUl9SRF9QRVJSKTsKIAl9CiAKIAlpZiAoc3RhdHVzICYgWTJfSVNfUEFSX1dSMSkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IHJhbSBkYXRhIHdyaXRlIHBhcml0eSBlcnJvclxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X2VycihkZXYsICJyYW0gZGF0YSB3cml0ZSBwYXJpdHkgZXJyb3JcbiIpOwogCiAJCXNreTJfd3JpdGUxNihodywgUkFNX0JVRkZFUihwb3J0LCBCM19SSV9DVFJMKSwgUklfQ0xSX1dSX1BFUlIpOwogCX0KIAogCWlmIChzdGF0dXMgJiBZMl9JU19QQVJfTUFDMSkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IE1BQyBwYXJpdHkgZXJyb3JcbiIsIGRldi0+bmFtZSk7CisJCQluZXRkZXZfZXJyKGRldiwgIk1BQyBwYXJpdHkgZXJyb3JcbiIpOwogCQlza3kyX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFRYX0dNRl9DVFJMX1QpLCBHTUZfQ0xJX1RYX1BFKTsKIAl9CiAKIAlpZiAoc3RhdHVzICYgWTJfSVNfUEFSX1JYMSkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IFJYIHBhcml0eSBlcnJvclxuIiwgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAiUlggcGFyaXR5IGVycm9yXG4iKTsKIAkJc2t5Ml93cml0ZTMyKGh3LCBRX0FERFIocnhxYWRkcltwb3J0XSwgUV9DU1IpLCBCTVVfQ0xSX0lSUV9QQVIpOwogCX0KIAogCWlmIChzdGF0dXMgJiBZMl9JU19UQ1BfVFhBMSkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IFRDUCBzZWdtZW50YXRpb24gZXJyb3JcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAiVENQIHNlZ21lbnRhdGlvbiBlcnJvclxuIik7CiAJCXNreTJfd3JpdGUzMihodywgUV9BRERSKHR4cWFkZHJbcG9ydF0sIFFfQ1NSKSwgQk1VX0NMUl9JUlFfVENQKTsKIAl9CiB9CkBAIC0yNjgzLDkgKzI3MjAsNyBAQAogCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXU4IHN0YXR1cyA9IHNreTJfcmVhZDgoaHcsIFNLX1JFRyhwb3J0LCBHTUFDX0lSUV9TUkMpKTsKIAotCWlmIChuZXRpZl9tc2dfaW50cihza3kyKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBtYWMgaW50ZXJydXB0IHN0YXR1cyAweCV4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCW5ldGlmX2luZm8oc2t5MiwgaW50ciwgZGV2LCAibWFjIGludGVycnVwdCBzdGF0dXMgMHgleFxuIiwgc3RhdHVzKTsKIAogCWlmIChzdGF0dXMgJiBHTV9JU19SWF9DT19PVikKIAkJZ21hX3JlYWQxNihodywgcG9ydCwgR01fUlhfSVJRX1NSQyk7CkBAIC0yNzEwLDggKzI3NDUsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBody0+ZGV2W3BvcnRdOwogCXUxNiBpZHggPSBza3kyX3JlYWQxNihodywgWTJfUUFERFIocSwgUFJFRl9VTklUX0dFVF9JRFgpKTsKIAotCWRldl9lcnIoJmh3LT5wZGV2LT5kZXYsIFBGWAotCQkiJXM6IGRlc2NyaXB0b3IgZXJyb3IgcT0lI3ggZ2V0PSV1IHB1dD0ldVxuIiwKKwlkZXZfZXJyKCZody0+cGRldi0+ZGV2LCAiJXM6IGRlc2NyaXB0b3IgZXJyb3IgcT0lI3ggZ2V0PSV1IHB1dD0ldVxuIiwKIAkJZGV2LT5uYW1lLCAodW5zaWduZWQpIHEsICh1bnNpZ25lZCkgaWR4LAogCQkodW5zaWduZWQpIHNreTJfcmVhZDE2KGh3LCBZMl9RQUREUihxLCBQUkVGX1VOSVRfUFVUX0lEWCkpKTsKIApAQCAtMjczNiw5ICsyNzcwLDEwIEBACiAJICAgICAvKiBDaGVjayBpZiB0aGUgUENJIFJYIGhhbmcgKi8KIAkgICAgIChmaWZvX3JwID09IHNreTItPmNoZWNrLmZpZm9fcnAgJiYKIAkgICAgICBmaWZvX2xldiAhPSAwICYmIGZpZm9fbGV2ID49IHNreTItPmNoZWNrLmZpZm9fbGV2KSkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICIlczogaHVuZyBtYWMgJWQ6JWQgZmlmbyAlZCAoJWQ6JWQpXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBtYWNfbGV2LCBtYWNfcnAsIGZpZm9fbGV2LCBmaWZvX3JwLAotCQkgICAgICAgc2t5Ml9yZWFkOChodywgUV9BRERSKHJ4cSwgUV9XUCkpKTsKKwkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsCisJCQkgICAgICAiaHVuZyBtYWMgJWQ6JWQgZmlmbyAlZCAoJWQ6JWQpXG4iLAorCQkJICAgICAgbWFjX2xldiwgbWFjX3JwLCBmaWZvX2xldiwKKwkJCSAgICAgIGZpZm9fcnAsIHNreTJfcmVhZDgoaHcsIFFfQUREUihyeHEsIFFfV1ApKSk7CiAJCXJldHVybiAxOwogCX0gZWxzZSB7CiAJCXNreTItPmNoZWNrLmxhc3QgPSBkZXYtPmxhc3Rfcng7CkBAIC0yNzY5LDggKzI4MDQsNyBAQAogCQkJLyogRm9yIGNoaXBzIHdpdGggUnggRklGTywgY2hlY2sgaWYgc3R1Y2sgKi8KIAkJCWlmICgoaHctPmZsYWdzICYgU0tZMl9IV19SQU1fQlVGRkVSKSAmJgogCQkJICAgICBza3kyX3J4X2h1bmcoZGV2KSkgewotCQkJCXByX2luZm8oUEZYICIlczogcmVjZWl2ZXIgaGFuZyBkZXRlY3RlZFxuIiwKLQkJCQkJZGV2LT5uYW1lKTsKKwkJCQluZXRkZXZfaW5mbyhkZXYsICJyZWNlaXZlciBoYW5nIGRldGVjdGVkXG4iKTsKIAkJCQlzY2hlZHVsZV93b3JrKCZody0+cmVzdGFydF93b3JrKTsKIAkJCQlyZXR1cm47CiAJCQl9CkBAIC0zMDEwLDExICszMDQ0LDIwIEBACiAJdTMyIGh3ZV9tYXNrID0gWTJfSFdFX0FMTF9NQVNLOwogCiAJLyogZGlzYWJsZSBBU0YgKi8KLQlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9FWCkgeworCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VYCisJICAgIHx8IGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fU1VQUikgeworCQlza3kyX3dyaXRlMzIoaHcsIENQVV9XRE9HLCAwKTsKIAkJc3RhdHVzID0gc2t5Ml9yZWFkMTYoaHcsIEhDVV9DQ1NSKTsKIAkJc3RhdHVzICY9IH4oSENVX0NDU1JfQUhCX1JTVCB8IEhDVV9DQ1NSX0NQVV9SU1RfTU9ERSB8CiAJCQkgICAgSENVX0NDU1JfVUNfU1RBVEVfTVNLKTsKKwkJLyoKKwkJICogQ1BVIGNsb2NrIGRpdmlkZXIgc2hvdWxkbid0IGJlIHVzZWQgYmVjYXVzZQorCQkgKiAtIEFTRiBmaXJtd2FyZSBtYXkgbWFsZnVuY3Rpb24KKwkJICogLSBZdWtvbi1TdXByZW1lOiBQYXJhbGxlbCBGTEFTSCBkb2Vzbid0IHN1cHBvcnQgZGl2aWRlZCBjbG9ja3MKKwkJICovCisJCXN0YXR1cyAmPSB+SENVX0NDU1JfQ1BVX0NMS19ESVZJREVfTVNLOwogCQlza3kyX3dyaXRlMTYoaHcsIEhDVV9DQ1NSLCBzdGF0dXMpOworCQlza3kyX3dyaXRlMzIoaHcsIENQVV9XRE9HLCAwKTsKIAl9IGVsc2UKIAkJc2t5Ml93cml0ZTgoaHcsIEIyOF9ZMl9BU0ZfU1RBVF9DTUQsIFkyX0FTRl9SRVNFVCk7CiAJc2t5Ml93cml0ZTE2KGh3LCBCMF9DVFNULCBZMl9BU0ZfRElTQUJMRSk7CkBAIC0zMDk3LDcgKzMxNDAsNyBAQAogCQkvKiBjaGVjayBpZiBQU012MiB3YXMgcnVubmluZyBiZWZvcmUgKi8KIAkJcmVnID0gc2t5Ml9wY2lfcmVhZDE2KGh3LCBQU01fQ09ORklHX1JFRzMpOwogCQlpZiAocmVnICYgUENJX0VYUF9MTktDVExfQVNQTUMpIHsKLQkJCWludCBjYXAgPSBwY2lfZmluZF9jYXBhYmlsaXR5KHBkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwkJCWNhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9FWFApOwogCQkJLyogcmVzdG9yZSB0aGUgUENJZSBMaW5rIENvbnRyb2wgcmVnaXN0ZXIgKi8KIAkJCXNreTJfcGNpX3dyaXRlMTYoaHcsIGNhcCArIFBDSV9FWFBfTE5LQ1RMLCByZWcpOwogCQl9CkBAIC0zMTg4LDcgKzMyMzEsOSBAQAogc3RhdGljIHZvaWQgc2t5Ml9kZXRhY2goc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CisJCW5ldGlmX3R4X2xvY2soZGV2KTsKIAkJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwkvKiBzdG9wIHR4cSAqLworCQluZXRpZl90eF91bmxvY2soZGV2KTsKIAkJc2t5Ml9kb3duKGRldik7CiAJfQogfQpAQCAtMzIwMSw4ICszMjQ2LDcgQEAKIAlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCWVyciA9IHNreTJfdXAoZGV2KTsKIAkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlggIiVzOiBjb3VsZCBub3QgcmVzdGFydCAlZFxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIGVycik7CisJCQluZXRkZXZfaW5mbyhkZXYsICJjb3VsZCBub3QgcmVzdGFydCAlZFxuIiwgZXJyKTsKIAkJCWRldl9jbG9zZShkZXYpOwogCQl9IGVsc2UgewogCQkJbmV0aWZfZGV2aWNlX2F0dGFjaChkZXYpOwpAQCAtMzIxNiwyMCArMzI2MCw0NiBAQAogc3RhdGljIHZvaWQgc2t5Ml9yZXN0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNreTJfaHcsIHJlc3RhcnRfd29yayk7CisJdTMyIGltYXNrOwogCWludCBpOwogCiAJcnRubF9sb2NrKCk7Ci0JZm9yIChpID0gMDsgaSA8IGh3LT5wb3J0czsgaSsrKQotCQlza3kyX2RldGFjaChody0+ZGV2W2ldKTsKIAogCW5hcGlfZGlzYWJsZSgmaHctPm5hcGkpOworCXN5bmNocm9uaXplX2lycShody0+cGRldi0+aXJxKTsKKwlpbWFzayA9IHNreTJfcmVhZDMyKGh3LCBCMF9JTVNLKTsKIAlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIDApOwotCXNreTJfcmVzZXQoaHcpOwotCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgWTJfSVNfQkFTRSk7Ci0JbmFwaV9lbmFibGUoJmh3LT5uYXBpKTsKIAotCWZvciAoaSA9IDA7IGkgPCBody0+cG9ydHM7IGkrKykKLQkJc2t5Ml9yZWF0dGFjaChody0+ZGV2W2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGh3LT5kZXZbaV07CisJCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQkJY29udGludWU7CisKKwkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKKwkJbmV0aWZfdHhfZGlzYWJsZShkZXYpOworCQlza3kyX2h3X2Rvd24oc2t5Mik7CisJfQorCisJc2t5Ml9yZXNldChodyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGh3LT5kZXZbaV07CisJCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOworCisJCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQkJY29udGludWU7CisKKwkJc2t5Ml9od191cChza3kyKTsKKwkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOworCX0KKworCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgaW1hc2spOworCXNreTJfcmVhZDMyKGh3LCBCMF9JTVNLKTsKKworCXNreTJfcmVhZDMyKGh3LCBCMF9ZMl9TUF9MSVNSKTsKKwluYXBpX2VuYWJsZSgmaHctPm5hcGkpOwogCiAJcnRubF91bmxvY2soKTsKIH0KQEAgLTMyMzksMjcgKzMzMDksNiBAQAogCXJldHVybiBza3kyX2lzX2NvcHBlcihodykgPyAoV0FLRV9QSFkgfCBXQUtFX01BR0lDKSA6IDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNreTJfaHdfc2V0X3dvbChzdHJ1Y3Qgc2t5Ml9odyAqaHcpCi17Ci0JaW50IHdvbCA9IDA7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKLQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGh3LT5kZXZbaV07Ci0JCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JCWlmIChza3kyLT53b2wpCi0JCQl3b2wgPSAxOwotCX0KLQotCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VDX1UgfHwKLQkgICAgaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9ZVUtPTl9FWCB8fAotCSAgICBody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0ZFX1ApCi0JCXNreTJfd3JpdGUzMihodywgQjBfQ1RTVCwgd29sID8gWTJfSFdfV09MX09OIDogWTJfSFdfV09MX09GRik7Ci0KLQlkZXZpY2Vfc2V0X3dha2V1cF9lbmFibGUoJmh3LT5wZGV2LT5kZXYsIHdvbCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHNreTJfZ2V0X3dvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF93b2xpbmZvICp3b2wpCiB7CiAJY29uc3Qgc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CkBAIC0zMjc4LDExICszMzI3LDYgQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJc2t5Mi0+d29sID0gd29sLT53b2xvcHRzOwotCi0Jc2t5Ml9od19zZXRfd29sKGh3KTsKLQotCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQotCQlza3kyX3dvbF9pbml0KHNreTIpOwogCXJldHVybiAwOwogfQogCkBAIC0zNTc3LDcgKzM2MjEsNyBAQAogCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBza3kyX2h3ICpodyA9IHNreTItPmh3OwogCXVuc2lnbmVkIHBvcnQgPSBza3kyLT5wb3J0OwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqbGlzdCA9IGRldi0+bWNfbGlzdDsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmxpc3Q7CiAJdTE2IHJlZzsKIAl1OCBmaWx0ZXJbOF07CiAJaW50IHJ4X3BhdXNlOwpAQCAtMzU5MywxNiArMzYzNywxNSBAQAogCQlyZWcgJj0gfihHTV9SWENSX1VDRl9FTkEgfCBHTV9SWENSX01DRl9FTkEpOwogCWVsc2UgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpCiAJCW1lbXNldChmaWx0ZXIsIDB4ZmYsIHNpemVvZihmaWx0ZXIpKTsKLQllbHNlIGlmIChkZXYtPm1jX2NvdW50ID09IDAgJiYgIXJ4X3BhdXNlKQorCWVsc2UgaWYgKG5ldGRldl9tY19lbXB0eShkZXYpICYmICFyeF9wYXVzZSkKIAkJcmVnICY9IH5HTV9SWENSX01DRl9FTkE7CiAJZWxzZSB7Ci0JCWludCBpOwogCQlyZWcgfD0gR01fUlhDUl9NQ0ZfRU5BOwogCiAJCWlmIChyeF9wYXVzZSkKIAkJCXNreTJfYWRkX2ZpbHRlcihmaWx0ZXIsIHBhdXNlX21jX2FkZHIpOwogCi0JCWZvciAoaSA9IDA7IGxpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgbGlzdCA9IGxpc3QtPm5leHQpCisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGxpc3QsIGRldikKIAkJCXNreTJfYWRkX2ZpbHRlcihmaWx0ZXIsIGxpc3QtPmRtaV9hZGRyKTsKIAl9CiAKQEAgLTM4NjQsNiArMzkwNyw1MCBAQAogCXJldHVybiAweDQwMDA7CiB9CiAKK3N0YXRpYyBpbnQgc2t5Ml9yZWdfYWNjZXNzX29rKHN0cnVjdCBza3kyX2h3ICpodywgdW5zaWduZWQgaW50IGIpCit7CisJLyogVGhpcyBjb21wbGljYXRlZCBzd2l0Y2ggc3RhdGVtZW50IGlzIHRvIG1ha2Ugc3VyZSBhbmQKKwkgKiBvbmx5IGFjY2VzcyByZWdpb25zIHRoYXQgYXJlIHVucmVzZXJ2ZWQuCisJICogU29tZSBibG9ja3MgYXJlIG9ubHkgdmFsaWQgb24gZHVhbCBwb3J0IGNhcmRzLgorCSAqLworCXN3aXRjaCAoYikgeworCS8qIHNlY29uZCBwb3J0ICovCisJY2FzZSA1OgkJLyogVHggQXJiaXRlciAyICovCisJY2FzZSA5OgkJLyogUlgyICovCisJY2FzZSAxNCAuLi4gMTU6CS8qIFRYMiAqLworCWNhc2UgMTc6IGNhc2UgMTk6IC8qIFJhbSBCdWZmZXIgMiAqLworCWNhc2UgMjIgLi4uIDIzOiAvKiBUeCBSYW0gQnVmZmVyIDIgKi8KKwljYXNlIDI1OgkvKiBSeCBNQUMgRmlmbyAxICovCisJY2FzZSAyNzoJLyogVHggTUFDIEZpZm8gMiAqLworCWNhc2UgMzE6CS8qIEdQSFkgMiAqLworCWNhc2UgNDAgLi4uIDQ3OiAvKiBQYXR0ZXJuIFJhbSAyICovCisJY2FzZSA1MjogY2FzZSA1NDogLyogVENQIFNlZ21lbnRhdGlvbiAyICovCisJY2FzZSAxMTIgLi4uIDExNjogLyogR01BQyAyICovCisJCXJldHVybiBody0+cG9ydHMgPiAxOworCisJY2FzZSAwOgkJLyogQ29udHJvbCAqLworCWNhc2UgMjoJCS8qIE1hYyBhZGRyZXNzICovCisJY2FzZSA0OgkJLyogVHggQXJiaXRlciAxICovCisJY2FzZSA3OgkJLyogUENJIGV4cHJlc3MgcmVnICovCisJY2FzZSA4OgkJLyogUlgxICovCisJY2FzZSAxMiAuLi4gMTM6IC8qIFRYMSAqLworCWNhc2UgMTY6IGNhc2UgMTg6LyogUnggUmFtIEJ1ZmZlciAxICovCisJY2FzZSAyMCAuLi4gMjE6IC8qIFR4IFJhbSBCdWZmZXIgMSAqLworCWNhc2UgMjQ6CS8qIFJ4IE1BQyBGaWZvIDEgKi8KKwljYXNlIDI2OgkvKiBUeCBNQUMgRmlmbyAxICovCisJY2FzZSAyOCAuLi4gMjk6IC8qIERlc2NyaXB0b3IgYW5kIHN0YXR1cyB1bml0ICovCisJY2FzZSAzMDoJLyogR1BIWSAxKi8KKwljYXNlIDMyIC4uLiAzOTogLyogUGF0dGVybiBSYW0gMSAqLworCWNhc2UgNDg6IGNhc2UgNTA6IC8qIFRDUCBTZWdtZW50YXRpb24gMSAqLworCWNhc2UgNTYgLi4uIDYwOgkvKiBQQ0kgc3BhY2UgKi8KKwljYXNlIDgwIC4uLiA4NDoJLyogR01BQyAxICovCisJCXJldHVybiAxOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCiAvKgogICogUmV0dXJucyBjb3B5IG9mIGNvbnRyb2wgcmVnaXN0ZXIgcmVnaW9uCiAgKiBOb3RlOiBldGh0b29sX2dldF9yZWdzIGFsd2F5cyBwcm92aWRlcyBmdWxsIHNpemUgKDE2aykgYnVmZmVyCkBAIC0zODc4LDU1ICszOTY1LDEzIEBACiAJcmVncy0+dmVyc2lvbiA9IDE7CiAKIAlmb3IgKGIgPSAwOyBiIDwgMTI4OyBiKyspIHsKLQkJLyogVGhpcyBjb21wbGljYXRlZCBzd2l0Y2ggc3RhdGVtZW50IGlzIHRvIG1ha2Ugc3VyZSBhbmQKLQkJICogb25seSBhY2Nlc3MgcmVnaW9ucyB0aGF0IGFyZSB1bnJlc2VydmVkLgotCQkgKiBTb21lIGJsb2NrcyBhcmUgb25seSB2YWxpZCBvbiBkdWFsIHBvcnQgY2FyZHMuCi0JCSAqIGFuZCBibG9jayAzIGhhcyBzb21lIHNwZWNpYWwgZGlhZ25vc3RpYyByZWdpc3RlcnMgdGhhdAotCQkgKiBhcmUgcG9pc29uLgotCQkgKi8KLQkJc3dpdGNoIChiKSB7Ci0JCWNhc2UgMzoKLQkJCS8qIHNraXAgZGlhZ25vc3RpYyByYW0gcmVnaW9uICovCisJCS8qIHNraXAgcG9pc29ub3VzIGRpYWdub3N0aWMgcmFtIHJlZ2lvbiBpbiBibG9jayAzICovCisJCWlmIChiID09IDMpCiAJCQltZW1jcHlfZnJvbWlvKHAgKyAweDEwLCBpbyArIDB4MTAsIDEyOCAtIDB4MTApOwotCQkJYnJlYWs7Ci0KLQkJLyogZHVhbCBwb3J0IGNhcmRzIG9ubHkgKi8KLQkJY2FzZSA1OgkJLyogVHggQXJiaXRlciAyICovCi0JCWNhc2UgOTogCS8qIFJYMiAqLwotCQljYXNlIDE0IC4uLiAxNToJLyogVFgyICovCi0JCWNhc2UgMTc6IGNhc2UgMTk6IC8qIFJhbSBCdWZmZXIgMiAqLwotCQljYXNlIDIyIC4uLiAyMzogLyogVHggUmFtIEJ1ZmZlciAyICovCi0JCWNhc2UgMjU6IAkvKiBSeCBNQUMgRmlmbyAxICovCi0JCWNhc2UgMjc6IAkvKiBUeCBNQUMgRmlmbyAyICovCi0JCWNhc2UgMzE6CS8qIEdQSFkgMiAqLwotCQljYXNlIDQwIC4uLiA0NzogLyogUGF0dGVybiBSYW0gMiAqLwotCQljYXNlIDUyOiBjYXNlIDU0OiAvKiBUQ1AgU2VnbWVudGF0aW9uIDIgKi8KLQkJY2FzZSAxMTIgLi4uIDExNjogLyogR01BQyAyICovCi0JCQlpZiAoc2t5Mi0+aHctPnBvcnRzID09IDEpCi0JCQkJZ290byByZXNlcnZlZDsKLQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCQljYXNlIDA6CQkvKiBDb250cm9sICovCi0JCWNhc2UgMjoJCS8qIE1hYyBhZGRyZXNzICovCi0JCWNhc2UgNDoJCS8qIFR4IEFyYml0ZXIgMSAqLwotCQljYXNlIDc6CQkvKiBQQ0kgZXhwcmVzcyByZWcgKi8KLQkJY2FzZSA4OgkJLyogUlgxICovCi0JCWNhc2UgMTIgLi4uIDEzOiAvKiBUWDEgKi8KLQkJY2FzZSAxNjogY2FzZSAxODovKiBSeCBSYW0gQnVmZmVyIDEgKi8KLQkJY2FzZSAyMCAuLi4gMjE6IC8qIFR4IFJhbSBCdWZmZXIgMSAqLwotCQljYXNlIDI0OiAJLyogUnggTUFDIEZpZm8gMSAqLwotCQljYXNlIDI2OiAJLyogVHggTUFDIEZpZm8gMSAqLwotCQljYXNlIDI4IC4uLiAyOTogLyogRGVzY3JpcHRvciBhbmQgc3RhdHVzIHVuaXQgKi8KLQkJY2FzZSAzMDoJLyogR1BIWSAxKi8KLQkJY2FzZSAzMiAuLi4gMzk6IC8qIFBhdHRlcm4gUmFtIDEgKi8KLQkJY2FzZSA0ODogY2FzZSA1MDogLyogVENQIFNlZ21lbnRhdGlvbiAxICovCi0JCWNhc2UgNTYgLi4uIDYwOgkvKiBQQ0kgc3BhY2UgKi8KLQkJY2FzZSA4MCAuLi4gODQ6CS8qIEdNQUMgMSAqLworCQllbHNlIGlmIChza3kyX3JlZ19hY2Nlc3Nfb2soc2t5Mi0+aHcsIGIpKQogCQkJbWVtY3B5X2Zyb21pbyhwLCBpbywgMTI4KTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotcmVzZXJ2ZWQ6CisJCWVsc2UKIAkJCW1lbXNldChwLCAwLCAxMjgpOwotCQl9CiAKIAkJcCArPSAxMjg7CiAJCWlvICs9IDEyODsKQEAgLTM5NzgsNyArNDAyMyw3IEBACiAJd2hpbGUgKCAoc2t5Ml9wY2lfcmVhZDE2KGh3LCBjYXAgKyBQQ0lfVlBEX0FERFIpICYgUENJX1ZQRF9BRERSX0YpID09IGJ1c3kpIHsKIAkJLyogQ2FuIHRha2UgdXAgdG8gMTAuNiBtcyBmb3Igd3JpdGUgKi8KIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc3RhcnQgKyBIWi80KSkgewotCQkJZGV2X2VycigmaHctPnBkZXYtPmRldiwgUEZYICJWUEQgY3ljbGUgdGltZWQgb3V0Iik7CisJCQlkZXZfZXJyKCZody0+cGRldi0+ZGV2LCAiVlBEIGN5Y2xlIHRpbWVkIG91dFxuIik7CiAJCQlyZXR1cm4gLUVUSU1FRE9VVDsKIAkJfQogCQltZGVsYXkoMSk7CkBAIC00MzEyLDggKzQzNTcsNyBAQAogCiAJY2FzZSBORVRERVZfR09JTkdfRE9XTjoKIAkJaWYgKHNreTItPmRlYnVnZnMpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHIFBGWCAiJXM6IHJlbW92ZSBkZWJ1Z2ZzXG4iLAotCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgInJlbW92ZSBkZWJ1Z2ZzXG4iKTsKIAkJCWRlYnVnZnNfcmVtb3ZlKHNreTItPmRlYnVnZnMpOwogCQkJc2t5Mi0+ZGVidWdmcyA9IE5VTEw7CiAJCX0KQEAgLTQ0NjYsOSArNDUxMCw3IEBACiB7CiAJY29uc3Qgc3RydWN0IHNreTJfcG9ydCAqc2t5MiA9IG5ldGRldl9wcml2KGRldik7CiAKLQlpZiAobmV0aWZfbXNnX3Byb2JlKHNreTIpKQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IGFkZHIgJXBNXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBkZXYtPmRldl9hZGRyKTsKKwluZXRpZl9pbmZvKHNreTIsIHByb2JlLCBkZXYsICJhZGRyICVwTVxuIiwgZGV2LT5kZXZfYWRkcik7CiB9CiAKIC8qIEhhbmRsZSBzb2Z0d2FyZSBpbnRlcnJ1cHQgdXNlZCBkdXJpbmcgTVNJIHRlc3QgKi8KQEAgLTQ3NzQsNyArNDgxNiw2IEBACiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogfQogCi0jaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHNreTJfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBza3kyX2h3ICpodyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKQEAgLTQ3OTksNiArNDg0MCw4IEBACiAJCXdvbCB8PSBza3kyLT53b2w7CiAJfQogCisJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZwZGV2LT5kZXYsIHdvbCAhPSAwKTsKKwogCXNreTJfd3JpdGUzMihodywgQjBfSU1TSywgMCk7CiAJbmFwaV9kaXNhYmxlKCZody0+bmFwaSk7CiAJc2t5Ml9wb3dlcl9hdXgoaHcpOwpAQCAtNDgxMSw2ICs0ODU0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBza3kyX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3Qgc2t5Ml9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CkBAIC00ODMwLDEwICs0ODc0LDExIEBACiAJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EMCwgMCk7CiAKIAkvKiBSZS1lbmFibGUgYWxsIGNsb2NrcyAqLwotCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0VYIHx8Ci0JICAgIGh3LT5jaGlwX2lkID09IENISVBfSURfWVVLT05fRUNfVSB8fAotCSAgICBody0+Y2hpcF9pZCA9PSBDSElQX0lEX1lVS09OX0ZFX1ApCi0JCXNreTJfcGNpX3dyaXRlMzIoaHcsIFBDSV9ERVZfUkVHMywgMCk7CisJZXJyID0gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBQQ0lfREVWX1JFRzMsIDApOworCWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiUENJIHdyaXRlIGNvbmZpZyBmYWlsZWRcbiIpOworCQlnb3RvIG91dDsKKwl9CiAKIAlza3kyX3Jlc2V0KGh3KTsKIAlza3kyX3dyaXRlMzIoaHcsIEIwX0lNU0ssIFkyX0lTX0JBU0UpOwpAQCAtNDg1OSwzNCArNDkwNCw3IEBACiAKIHN0YXRpYyB2b2lkIHNreTJfc2h1dGRvd24oc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IHNreTJfaHcgKmh3ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCWludCBpLCB3b2wgPSAwOwotCi0JaWYgKCFodykKLQkJcmV0dXJuOwotCi0JcnRubF9sb2NrKCk7Ci0JZGVsX3RpbWVyX3N5bmMoJmh3LT53YXRjaGRvZ190aW1lcik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgaHctPnBvcnRzOyBpKyspIHsKLQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGh3LT5kZXZbaV07Ci0JCXN0cnVjdCBza3kyX3BvcnQgKnNreTIgPSBuZXRkZXZfcHJpdihkZXYpOwotCi0JCWlmIChza3kyLT53b2wpIHsKLQkJCXdvbCA9IDE7Ci0JCQlza3kyX3dvbF9pbml0KHNreTIpOwotCQl9Ci0JfQotCi0JaWYgKHdvbCkKLQkJc2t5Ml9wb3dlcl9hdXgoaHcpOwotCXJ0bmxfdW5sb2NrKCk7Ci0KLQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCB3b2wpOwotCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCB3b2wpOwotCi0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QzaG90KTsKKwlza3kyX3N1c3BlbmQocGRldiwgUE1TR19TVVNQRU5EKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHNreTJfZHJpdmVyID0gewpAQCAtNDkwMyw3ICs0OTIxLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgc2t5Ml9pbml0X21vZHVsZSh2b2lkKQogewotCXByX2luZm8oUEZYICJkcml2ZXIgdmVyc2lvbiAiIERSVl9WRVJTSU9OICJcbiIpOworCXByX2luZm8oImRyaXZlciB2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIlxuIik7CiAKIAlza3kyX2RlYnVnX2luaXQoKTsKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmc2t5Ml9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2t5Mi5oIGIvZHJpdmVycy9uZXQvc2t5Mi5oCmluZGV4IDM2NWQ3OWMuLmE1ZTE4MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NreTIuaAorKysgYi9kcml2ZXJzL25ldC9za3kyLmgKQEAgLTE4OTUsMTQgKzE4OTUsMTQgQEAKIAogLyoJVFhfR01GX0NUUkxfVAkzMiBiaXQJVHggR01BQyBGSUZPIENvbnRyb2wvVGVzdCAqLwogZW51bSB7Ci0JVFhfU1RGV19ESVMJPSAxPDwzMSwvKiBEaXNhYmxlIFN0b3JlICYgRm9yd2FyZCAoWXVrb24tRUMgVWx0cmEpICovCi0JVFhfU1RGV19FTkEJPSAxPDwzMCwvKiBFbmFibGUgIFN0b3JlICYgRm9yd2FyZCAoWXVrb24tRUMgVWx0cmEpICovCisJVFhfU1RGV19ESVMJPSAxPDwzMSwvKiBEaXNhYmxlIFN0b3JlICYgRm9yd2FyZCAqLworCVRYX1NURldfRU5BCT0gMTw8MzAsLyogRW5hYmxlICBTdG9yZSAmIEZvcndhcmQgKi8KIAogCVRYX1ZMQU5fVEFHX09OCT0gMTw8MjUsLyogZW5hYmxlICBWTEFOIHRhZ2dpbmcgKi8KIAlUWF9WTEFOX1RBR19PRkYJPSAxPDwyNCwvKiBkaXNhYmxlIFZMQU4gdGFnZ2luZyAqLwogCi0JVFhfSlVNQk9fRU5BCT0gMTw8MjMsLyogUENJIEp1bWJvIE1vZGUgZW5hYmxlIChZdWtvbi1FQyBVbHRyYSkgKi8KLQlUWF9KVU1CT19ESVMJPSAxPDwyMiwvKiBQQ0kgSnVtYm8gTW9kZSBlbmFibGUgKFl1a29uLUVDIFVsdHJhKSAqLworCVRYX1BDSV9KVU1fRU5BICA9IDE8PDIzLC8qIFBDSSBKdW1ibyBNb2RlIGVuYWJsZSAqLworCVRYX1BDSV9KVU1fRElTICA9IDE8PDIyLC8qIFBDSSBKdW1ibyBNb2RlIGVuYWJsZSAqLwogCiAJR01GX1dTUF9UU1RfT04JPSAxPDwxOCwvKiBXcml0ZSBTaGFkb3cgUG9pbnRlciBUZXN0IE9uICovCiAJR01GX1dTUF9UU1RfT0ZGCT0gMTw8MTcsLyogV3JpdGUgU2hhZG93IFBvaW50ZXIgVGVzdCBPZmYgKi8KQEAgLTIxNTYsNyArMjE1Niw3IEBACiAJc3RydWN0IHNrX2J1ZmYJKnNrYjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogI2RlZmluZSBUWF9NQVBfU0lOR0xFICAgMHgwMDAxCi0jZGVmaW5lIFRYX01BUF9QQUdFICAgICAwMDAwMDIKKyNkZWZpbmUgVFhfTUFQX1BBR0UgICAgIDB4MDAwMgogCURFQ0xBUkVfUENJX1VOTUFQX0FERFIobWFwYWRkcik7CiAJREVDTEFSRV9QQ0lfVU5NQVBfTEVOKG1hcGxlbik7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTExeC5jIGIvZHJpdmVycy9uZXQvc21jOTExeC5jCmluZGV4IDQ0ZWJiYWEuLjk4NzFhMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NtYzkxMXguYworKysgYi9kcml2ZXJzL25ldC9zbWM5MTF4LmMKQEAgLTEzMjMsNyArMTMyMyw3IEBACiAJICogSSBkb24ndCBuZWVkIHRvIHplcm8gdGhlIG11bHRpY2FzdCB0YWJsZSwgYmVjYXVzZSB0aGUgZmxhZyBpcwogCSAqIGNoZWNrZWQgYmVmb3JlIHRoZSB0YWJsZSBpcwogCSAqLwotCWVsc2UgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgZGV2LT5tY19jb3VudCA+IDE2KSB7CisJZWxzZSBpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fCBuZXRkZXZfbWNfY291bnQoZGV2KSA+IDE2KSB7CiAJCURCRyhTTUNfREVCVUdfTUlTQywgIiVzOiBSQ1JfQUxNVUxcbiIsIGRldi0+bmFtZSk7CiAJCW1jciB8PSBNQUNfQ1JfTUNQQVNfOwogCX0KQEAgLTEzNDAsOCArMTM0MCw3IEBACiAJICogdGhlIG51bWJlciBvZiB0aGUgMzIgYml0IHJlZ2lzdGVyLCB3aGlsZSB0aGUgbG93IDUgYml0cyBhcmUgdGhlIGJpdAogCSAqIHdpdGhpbiB0aGF0IHJlZ2lzdGVyLgogCSAqLwotCWVsc2UgaWYgKGRldi0+bWNfY291bnQpICB7Ci0JCWludCBpOworCWVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmN1cl9hZGRyOwogCiAJCS8qIFNldCB0aGUgSGFzaCBwZXJmZWMgbW9kZSAqLwpAQCAtMTM1MCw4ICsxMzQ5LDcgQEAKIAkJLyogc3RhcnQgd2l0aCBhIHRhYmxlIG9mIGFsbCB6ZXJvczogcmVqZWN0IGFsbCAqLwogCQltZW1zZXQobXVsdGljYXN0X3RhYmxlLCAwLCBzaXplb2YobXVsdGljYXN0X3RhYmxlKSk7CiAKLQkJY3VyX2FkZHIgPSBkZXYtPm1jX2xpc3Q7Ci0JCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyssIGN1cl9hZGRyID0gY3VyX2FkZHItPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoY3VyX2FkZHIsIGRldikgewogCQkJdTMyIHBvc2l0aW9uOwogCiAJCQkvKiBkbyB3ZSBoYXZlIGEgcG9pbnRlciBoZXJlPyAqLwpAQCAtMjAxNywxMCArMjAxNSw4IEBACiAJCQkJCSJzZXQgdXNpbmcgaWZjb25maWdcbiIsIGRldi0+bmFtZSk7CiAJCX0gZWxzZSB7CiAJCQkvKiBQcmludCB0aGUgRXRoZXJuZXQgYWRkcmVzcyAqLwotCQkJcHJpbnRrKCIlczogRXRoZXJuZXQgYWRkcjogIiwgZGV2LT5uYW1lKTsKLQkJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCi0JCQkJcHJpbnRrKCIlMi4yeDoiLCBkZXYtPmRldl9hZGRyW2ldKTsKLQkJCXByaW50aygiJTIuMnhcbiIsIGRldi0+ZGV2X2FkZHJbNV0pOworCQkJcHJpbnRrKCIlczogRXRoZXJuZXQgYWRkcjogJXBNXG4iLAorCQkJCWRldi0+bmFtZSwgZGV2LT5kZXZfYWRkcik7CiAJCX0KIAogCQlpZiAobHAtPnBoeV90eXBlID09IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxMXguaCBiL2RyaXZlcnMvbmV0L3NtYzkxMXguaAppbmRleCAwNWFkYjZhLi4zMjY5MjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MTF4LmgKKysrIGIvZHJpdmVycy9uZXQvc21jOTExeC5oCkBAIC00MiwxMiArNDIsMTIgQEAKICAgI2RlZmluZSBTTUNfVVNFXzE2QklUCQkwCiAgICNkZWZpbmUgU01DX1VTRV8zMkJJVAkJMQogICAjZGVmaW5lIFNNQ19JUlFfU0VOU0UJCUlSUUZfVFJJR0dFUl9MT1cKLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCisjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogICAjZGVmaW5lIFNNQ19VU0VfMTZCSVQJCTAKICAgI2RlZmluZSBTTUNfVVNFXzMyQklUCQkxCiAgICNkZWZpbmUgU01DX0lSUV9TRU5TRQkJSVJRRl9UUklHR0VSX0xPVwogICAjZGVmaW5lIFNNQ19NRU1fUkVTRVJWRUQJMQotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjRYWCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDIpCiAgICNkZWZpbmUgU01DX1VTRV8xNkJJVAkJMAogICAjZGVmaW5lIFNNQ19VU0VfMzJCSVQJCTEKICAgI2RlZmluZSBTTUNfSVJRX1NFTlNFCQlJUlFGX1RSSUdHRVJfTE9XCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zbWM5MTk0LmMgYi9kcml2ZXJzL25ldC9zbWM5MTk0LmMKaW5kZXggODM3MWI4Mi4uZjlhOTYwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTE5NC5jCisrKyBiL2RyaXZlcnMvbmV0L3NtYzkxOTQuYwpAQCAtNDM0LDE4ICs0MzQsMTggQEAKICovCiAKIAotc3RhdGljIHZvaWQgc21jX3NldG11bHRpY2FzdCggaW50IGlvYWRkciwgaW50IGNvdW50LCBzdHJ1Y3QgZGV2X21jX2xpc3QgKiBhZGRycyApIHsKK3N0YXRpYyB2b2lkIHNtY19zZXRtdWx0aWNhc3QoaW50IGlvYWRkciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKIAlpbnQJCQlpOwogCXVuc2lnbmVkIGNoYXIJCW11bHRpY2FzdF90YWJsZVsgOCBdOwotCXN0cnVjdCBkZXZfbWNfbGlzdAkqIGN1cl9hZGRyOworCXN0cnVjdCBkZXZfbWNfbGlzdCAqY3VyX2FkZHI7CiAJLyogdGFibGUgZm9yIGZsaXBwaW5nIHRoZSBvcmRlciBvZiAzIGJpdHMgKi8KIAl1bnNpZ25lZCBjaGFyIGludmVydDNbXSA9IHsgMCwgNCwgMiwgNiwgMSwgNSwgMywgNyB9OwogCiAJLyogc3RhcnQgd2l0aCBhIHRhYmxlIG9mIGFsbCB6ZXJvczogcmVqZWN0IGFsbCAqLwogCW1lbXNldCggbXVsdGljYXN0X3RhYmxlLCAwLCBzaXplb2YoIG11bHRpY2FzdF90YWJsZSApICk7CiAKLQljdXJfYWRkciA9IGFkZHJzOwotCWZvciAoIGkgPSAwOyBpIDwgY291bnQgOyBpICsrLCBjdXJfYWRkciA9IGN1cl9hZGRyLT5uZXh0ICApIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihjdXJfYWRkciwgZGV2KSB7CiAJCWludCBwb3NpdGlvbjsKIAogCQkvKiBkbyB3ZSBoYXZlIGEgcG9pbnRlciBoZXJlPyAqLwpAQCAtMTU0Miw3ICsxNTQyLDcgQEAKIAkvKiBXZSBqdXN0IGdldCBhbGwgbXVsdGljYXN0IHBhY2tldHMgZXZlbiBpZiB3ZSBvbmx5IHdhbnQgdGhlbQogCSAuIGZyb20gb25lIHNvdXJjZS4gIFRoaXMgd2lsbCBiZSBjaGFuZ2VkIGF0IHNvbWUgZnV0dXJlCiAJIC4gcG9pbnQuICovCi0JZWxzZSBpZiAoZGV2LT5tY19jb3VudCApICB7CisJZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCS8qIHN1cHBvcnQgaGFyZHdhcmUgbXVsdGljYXN0aW5nICovCiAKIAkJLyogYmUgc3VyZSBJIGdldCByaWQgb2YgZmxhZ3MgSSBtaWdodCBoYXZlIHNldCAqLwpAQCAtMTU1MCw3ICsxNTUwLDcgQEAKIAkJCWlvYWRkciArIFJDUiApOwogCQkvKiBOT1RFOiB0aGlzIGhhcyB0byBzZXQgdGhlIGJhbmssIHNvIG1ha2Ugc3VyZSBpdCBpcyB0aGUKIAkJICAgbGFzdCB0aGluZyBjYWxsZWQuICBUaGUgYmFuayBpcyBzZXQgdG8gemVybyBhdCB0aGUgdG9wICovCi0JCXNtY19zZXRtdWx0aWNhc3QoIGlvYWRkciwgZGV2LT5tY19jb3VudCwgZGV2LT5tY19saXN0ICk7CisJCXNtY19zZXRtdWx0aWNhc3QoaW9hZGRyLCBkZXYpOwogCX0KIAllbHNlICB7CiAJCW91dHcoIGludyggaW9hZGRyICsgUkNSICkgJiB+KFJDUl9QUk9NSVNDIHwgUkNSX0FMTVVMKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3NtYzkxeC5jIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKaW5kZXggZWE0ZmFlNy4uZmMxYjVhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc21jOTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21jOTF4LmMKQEAgLTEzOTUsNyArMTM5NSw3IEBACiAJICogSSBkb24ndCBuZWVkIHRvIHplcm8gdGhlIG11bHRpY2FzdCB0YWJsZSwgYmVjYXVzZSB0aGUgZmxhZyBpcwogCSAqIGNoZWNrZWQgYmVmb3JlIHRoZSB0YWJsZSBpcwogCSAqLwotCWVsc2UgaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgZGV2LT5tY19jb3VudCA+IDE2KSB7CisJZWxzZSBpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fCBuZXRkZXZfbWNfY291bnQoZGV2KSA+IDE2KSB7CiAJCURCRygyLCAiJXM6IFJDUl9BTE1VTFxuIiwgZGV2LT5uYW1lKTsKIAkJbHAtPnJjcl9jdXJfbW9kZSB8PSBSQ1JfQUxNVUw7CiAJfQpAQCAtMTQxMiw4ICsxNDEyLDcgQEAKIAkgKiB0aGUgbnVtYmVyIG9mIHRoZSA4IGJpdCByZWdpc3Rlciwgd2hpbGUgdGhlIGxvdyAzIGJpdHMgYXJlIHRoZSBiaXQKIAkgKiB3aXRoaW4gdGhhdCByZWdpc3Rlci4KIAkgKi8KLQllbHNlIGlmIChkZXYtPm1jX2NvdW50KSAgewotCQlpbnQgaTsKKwllbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKIAkJc3RydWN0IGRldl9tY19saXN0ICpjdXJfYWRkcjsKIAogCQkvKiB0YWJsZSBmb3IgZmxpcHBpbmcgdGhlIG9yZGVyIG9mIDMgYml0cyAqLwpAQCAtMTQyMiwxMyArMTQyMSw5IEBACiAJCS8qIHN0YXJ0IHdpdGggYSB0YWJsZSBvZiBhbGwgemVyb3M6IHJlamVjdCBhbGwgKi8KIAkJbWVtc2V0KG11bHRpY2FzdF90YWJsZSwgMCwgc2l6ZW9mKG11bHRpY2FzdF90YWJsZSkpOwogCi0JCWN1cl9hZGRyID0gZGV2LT5tY19saXN0OwotCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrLCBjdXJfYWRkciA9IGN1cl9hZGRyLT5uZXh0KSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGN1cl9hZGRyLCBkZXYpIHsKIAkJCWludCBwb3NpdGlvbjsKIAotCQkJLyogZG8gd2UgaGF2ZSBhIHBvaW50ZXIgaGVyZT8gKi8KLQkJCWlmICghY3VyX2FkZHIpCi0JCQkJYnJlYWs7CiAJCQkvKiBtYWtlIHN1cmUgdGhpcyBpcyBhIG11bHRpY2FzdCBhZGRyZXNzIC0KIAkJICAgCSAgIHNob3VsZG4ndCB0aGlzIGJlIGEgZ2l2ZW4gaWYgd2UgaGF2ZSBpdCBoZXJlID8gKi8KIAkJCWlmICghKCpjdXJfYWRkci0+ZG1pX2FkZHIgJiAxKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMgYi9kcml2ZXJzL25ldC9zbXNjOTExeC5jCmluZGV4IDQ5NGNkOTEuLjRmZDFkOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Ntc2M5MTF4LmMKKysrIGIvZHJpdmVycy9uZXQvc21zYzkxMXguYwpAQCAtNzcwLDI5ICs3NzAsMjUgQEAKIHsKIAlzdHJ1Y3Qgc21zYzkxMXhfZGF0YSAqcGRhdGEgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSBOVUxMOwotCWludCBwaHlfYWRkcjsKKwlpbnQgcmV0OwogCiAJLyogZmluZCB0aGUgZmlyc3QgcGh5ICovCi0JZm9yIChwaHlfYWRkciA9IDA7IHBoeV9hZGRyIDwgUEhZX01BWF9BRERSOyBwaHlfYWRkcisrKSB7Ci0JCWlmIChwZGF0YS0+bWlpX2J1cy0+cGh5X21hcFtwaHlfYWRkcl0pIHsKLQkJCXBoeWRldiA9IHBkYXRhLT5taWlfYnVzLT5waHlfbWFwW3BoeV9hZGRyXTsKLQkJCVNNU0NfVFJBQ0UoUFJPQkUsICJQSFkgJWQ6IGFkZHIgJWQsIHBoeV9pZCAweCUwOFgiLAotCQkJCXBoeV9hZGRyLCBwaHlkZXYtPmFkZHIsIHBoeWRldi0+cGh5X2lkKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCisJcGh5ZGV2ID0gcGh5X2ZpbmRfZmlyc3QocGRhdGEtPm1paV9idXMpOwogCWlmICghcGh5ZGV2KSB7CiAJCXByX2VycigiJXM6IG5vIFBIWSBmb3VuZFxuIiwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JcGh5ZGV2ID0gcGh5X2Nvbm5lY3QoZGV2LCBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpLAotCQkmc21zYzkxMXhfcGh5X2FkanVzdF9saW5rLCAwLCBwZGF0YS0+Y29uZmlnLnBoeV9pbnRlcmZhY2UpOworCVNNU0NfVFJBQ0UoUFJPQkUsICJQSFkgJWQ6IGFkZHIgJWQsIHBoeV9pZCAweCUwOFgiLAorCQkJcGh5X2FkZHIsIHBoeWRldi0+YWRkciwgcGh5ZGV2LT5waHlfaWQpOwogCi0JaWYgKElTX0VSUihwaHlkZXYpKSB7CisJcmV0ID0gcGh5X2Nvbm5lY3RfZGlyZWN0KGRldiwgcGh5ZGV2LAorCQkJJnNtc2M5MTF4X3BoeV9hZGp1c3RfbGluaywgMCwKKwkJCXBkYXRhLT5jb25maWcucGh5X2ludGVyZmFjZSk7CisKKwlpZiAocmV0KSB7CiAJCXByX2VycigiJXM6IENvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXG4iLCBkZXYtPm5hbWUpOwotCQlyZXR1cm4gUFRSX0VSUihwaHlkZXYpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCXByX2luZm8oIiVzOiBhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gKG1paV9idXM6cGh5X2FkZHI9JXMsIGlycT0lZClcbiIsCkBAIC0xMzgzLDMzICsxMzc5LDI0IEBACiAJCXBkYXRhLT5jbGVhcl9iaXRzX21hc2sgPSAoTUFDX0NSX1BSTVNfIHwgTUFDX0NSX0hQRklMVF8pOwogCQlwZGF0YS0+aGFzaGhpID0gMDsKIAkJcGRhdGEtPmhhc2hsbyA9IDA7Ci0JfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gMCkgeworCX0gZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCS8qIEVuYWJsaW5nIHNwZWNpZmljIG11bHRpY2FzdCBhZGRyZXNzZXMgKi8KIAkJdW5zaWduZWQgaW50IGhhc2hfaGlnaCA9IDA7CiAJCXVuc2lnbmVkIGludCBoYXNoX2xvdyA9IDA7Ci0JCXVuc2lnbmVkIGludCBjb3VudCA9IDA7Ci0JCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdCA9IGRldi0+bWNfbGlzdDsKKwkJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0OwogCiAJCXBkYXRhLT5zZXRfYml0c19tYXNrID0gTUFDX0NSX0hQRklMVF87CiAJCXBkYXRhLT5jbGVhcl9iaXRzX21hc2sgPSAoTUFDX0NSX1BSTVNfIHwgTUFDX0NSX01DUEFTXyk7CiAKLQkJd2hpbGUgKG1jX2xpc3QpIHsKLQkJCWNvdW50Kys7Ci0JCQlpZiAoKG1jX2xpc3QtPmRtaV9hZGRybGVuKSA9PSBFVEhfQUxFTikgewotCQkJCXVuc2lnbmVkIGludCBiaXRudW0gPQotCQkJCSAgICBzbXNjOTExeF9oYXNoKG1jX2xpc3QtPmRtaV9hZGRyKTsKLQkJCQl1bnNpZ25lZCBpbnQgbWFzayA9IDB4MDEgPDwgKGJpdG51bSAmIDB4MUYpOwotCQkJCWlmIChiaXRudW0gJiAweDIwKQotCQkJCQloYXNoX2hpZ2ggfD0gbWFzazsKLQkJCQllbHNlCi0JCQkJCWhhc2hfbG93IHw9IG1hc2s7Ci0JCQl9IGVsc2UgewotCQkJCVNNU0NfV0FSTklORyhEUlYsICJkbWlfYWRkcmxlbiAhPSA2Iik7Ci0JCQl9Ci0JCQltY19saXN0ID0gbWNfbGlzdC0+bmV4dDsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfbGlzdCwgZGV2KSB7CisJCQl1bnNpZ25lZCBpbnQgYml0bnVtID0gc21zYzkxMXhfaGFzaChtY19saXN0LT5kbWlfYWRkcik7CisJCQl1bnNpZ25lZCBpbnQgbWFzayA9IDB4MDEgPDwgKGJpdG51bSAmIDB4MUYpOworCisJCQlpZiAoYml0bnVtICYgMHgyMCkKKwkJCQloYXNoX2hpZ2ggfD0gbWFzazsKKwkJCWVsc2UKKwkJCQloYXNoX2xvdyB8PSBtYXNrOwogCQl9Ci0JCWlmIChjb3VudCAhPSAodW5zaWduZWQgaW50KWRldi0+bWNfY291bnQpCi0JCQlTTVNDX1dBUk5JTkcoRFJWLCAibWNfY291bnQgIT0gZGV2LT5tY19jb3VudCIpOwogCiAJCXBkYXRhLT5oYXNoaGkgPSBoYXNoX2hpZ2g7CiAJCXBkYXRhLT5oYXNobG8gPSBoYXNoX2xvdzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMgYi9kcml2ZXJzL25ldC9zbXNjOTQyMC5jCmluZGV4IDEyZjBmNWQuLjM0ZmExMGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Ntc2M5NDIwLmMKKysrIGIvZHJpdmVycy9uZXQvc21zYzk0MjAuYwpAQCAtODAsNyArODAsNyBAQAogCWludCBsYXN0X2NhcnJpZXI7CiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc21zYzk0MjBfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzbXNjOTQyMF9pZF90YWJsZSkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEXzk0MjAsIFBDSV9ERVZJQ0VfSURfOTQyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7IDAsIH0KIH07CkBAIC0xMDYyLDEyICsxMDYyLDEyIEBACiAJCW1hY19jciAmPSAofk1BQ19DUl9QUk1TXyk7CiAJCW1hY19jciB8PSBNQUNfQ1JfTUNQQVNfOwogCQltYWNfY3IgJj0gKH5NQUNfQ1JfSFBGSUxUXyk7Ci0JfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gMCkgewotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3QgPSBkZXYtPm1jX2xpc3Q7CisJfSBlbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKKwkJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0OwogCQl1MzIgaGFzaF9sbyA9IDAsIGhhc2hfaGkgPSAwOwogCiAJCXNtc2NfZGJnKEhXLCAiTXVsdGljYXN0IGZpbHRlciBlbmFibGVkIik7Ci0JCXdoaWxlIChtY19saXN0KSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jX2xpc3QsIGRldikgewogCQkJdTMyIGJpdF9udW0gPSBzbXNjOTQyMF9oYXNoKG1jX2xpc3QtPmRtaV9hZGRyKTsKIAkJCXUzMiBtYXNrID0gMSA8PCAoYml0X251bSAmIDB4MUYpOwogCkBAIC0xMDc2LDcgKzEwNzYsNiBAQAogCQkJZWxzZQogCQkJCWhhc2hfbG8gfD0gbWFzazsKIAotCQkJbWNfbGlzdCA9IG1jX2xpc3QtPm5leHQ7CiAJCX0KIAkJc21zYzk0MjBfcmVnX3dyaXRlKHBkLCBIQVNISCwgaGFzaF9oaSk7CiAJCXNtc2M5NDIwX3JlZ193cml0ZShwZCwgSEFTSEwsIGhhc2hfbG8pOwpAQCAtMTM0OCw3ICsxMzQ3LDcgQEAKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAKLQkvKiBkaXNhYmxlLCBtYXNrIGFuZCBhY2tub3dsZWdlIGFsbCBpbnRlcnJ1cHRzICovCisJLyogZGlzYWJsZSwgbWFzayBhbmQgYWNrbm93bGVkZ2UgYWxsIGludGVycnVwdHMgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGQtPmludF9sb2NrLCBmbGFncyk7CiAJaW50X2NmZyA9IHNtc2M5NDIwX3JlZ19yZWFkKHBkLCBJTlRfQ0ZHKSAmICh+SU5UX0NGR19JUlFfRU5fKTsKIAlzbXNjOTQyMF9yZWdfd3JpdGUocGQsIElOVF9DRkcsIGludF9jZmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc29uaWMuYyBiL2RyaXZlcnMvbmV0L3NvbmljLmMKaW5kZXggOTU5OWNlNy4uMjg3YzI1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc29uaWMuYworKysgYi9kcml2ZXJzL25ldC9zb25pYy5jCkBAIC01MzEsNyArNTMxLDcgQEAKIHsKIAlzdHJ1Y3Qgc29uaWNfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl1bnNpZ25lZCBpbnQgcmNyOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCXVuc2lnbmVkIGNoYXIgKmFkZHI7CiAJaW50IGk7CiAKQEAgLTU0MSwxOSArNTQxLDIyIEBACiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewkvKiBzZXQgcHJvbWlzY3VvdXMgbW9kZSAqLwogCQlyY3IgfD0gU09OSUNfUkNSX1BSTzsKIAl9IGVsc2UgewotCQlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8IChkZXYtPm1jX2NvdW50ID4gMTUpKSB7CisJCWlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKKwkJICAgIChuZXRkZXZfbWNfY291bnQoZGV2KSA+IDE1KSkgewogCQkJcmNyIHw9IFNPTklDX1JDUl9BTUM7CiAJCX0gZWxzZSB7CiAJCQlpZiAoc29uaWNfZGVidWcgPiAyKQotCQkJCXByaW50aygic29uaWNfbXVsdGljYXN0X2xpc3Q6IG1jX2NvdW50ICVkXG4iLCBkZXYtPm1jX2NvdW50KTsKKwkJCQlwcmludGsoInNvbmljX211bHRpY2FzdF9saXN0OiBtY19jb3VudCAlZFxuIiwKKwkJCQkgICAgICAgbmV0ZGV2X21jX2NvdW50KGRldikpOwogCQkJc29uaWNfc2V0X2NhbV9lbmFibGUoZGV2LCAxKTsgIC8qIGFsd2F5cyBlbmFibGUgb3VyIG93biBhZGRyZXNzICovCi0JCQlmb3IgKGkgPSAxOyBpIDw9IGRldi0+bWNfY291bnQ7IGkrKykgeworCQkJaSA9IDE7CisJCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogCQkJCWFkZHIgPSBkbWktPmRtaV9hZGRyOwotCQkJCWRtaSA9IGRtaS0+bmV4dDsKIAkJCQlzb25pY19jZGFfcHV0KGRldiwgaSwgU09OSUNfQ0RfQ0FQMCwgYWRkclsxXSA8PCA4IHwgYWRkclswXSk7CiAJCQkJc29uaWNfY2RhX3B1dChkZXYsIGksIFNPTklDX0NEX0NBUDEsIGFkZHJbM10gPDwgOCB8IGFkZHJbMl0pOwogCQkJCXNvbmljX2NkYV9wdXQoZGV2LCBpLCBTT05JQ19DRF9DQVAyLCBhZGRyWzVdIDw8IDggfCBhZGRyWzRdKTsKIAkJCQlzb25pY19zZXRfY2FtX2VuYWJsZShkZXYsIHNvbmljX2dldF9jYW1fZW5hYmxlKGRldikgfCAoMSA8PCBpKSk7CisJCQkJaSsrOwogCQkJfQogCQkJU09OSUNfV1JJVEUoU09OSUNfQ0RDLCAxNik7CiAJCQkvKiBpc3N1ZSBMb2FkIENBTSBjb21tYW5kICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMgYi9kcml2ZXJzL25ldC9zcGlkZXJfbmV0LmMKaW5kZXggMjE4NTI0OC4uNWJhOWQ5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3BpZGVyX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3NwaWRlcl9uZXQuYwpAQCAtNzIsNyArNzIsNyBAQAogCiBjaGFyIHNwaWRlcl9uZXRfZHJpdmVyX25hbWVbXSA9ICJzcGlkZXJuZXQiOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3BpZGVyX25ldF9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc3BpZGVyX25ldF9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfVE9TSElCQV8yLCBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfU1BJREVSX05FVCwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDBVTCB9LAogCXsgMCwgfQpAQCAtNDc0LDcgKzQ3NCw3IEBACiAgKiBzcGlkZXJfbmV0X2VuYWJsZV9yeGNodGFpbHMgLSBzZXRzIFJYIGRtYWMgY2hhaW4gdGFpbCBhZGRyZXNzZXMKICAqIEBjYXJkOiBjYXJkIHN0cnVjdHVyZQogICoKLSAqIHNwaWRlcl9uZXRfZW5hYmxlX3J4Y2h0YWlscyBzZXRzIHRoZSBSWCBETUFDIGNoYWluIHRhaWwgYWRyZXNzZXMgaW4gdGhlCisgKiBzcGlkZXJfbmV0X2VuYWJsZV9yeGNodGFpbHMgc2V0cyB0aGUgUlggRE1BQyBjaGFpbiB0YWlsIGFkZHJlc3NlcyBpbiB0aGUKICAqIGNoaXAgYnkgd3JpdGluZyB0byB0aGUgYXBwcm9wcmlhdGUgcmVnaXN0ZXIuIERNQSBpcyBlbmFibGVkIGluCiAgKiBzcGlkZXJfbmV0X2VuYWJsZV9yeGRtYWMuCiAgKi8KQEAgLTY0Niw3ICs2NDYsNyBAQAogCWhhc2ggPSBzcGlkZXJfbmV0X2dldF9tdWx0aWNhc3RfaGFzaChuZXRkZXYsIG5ldGRldi0+YnJvYWRjYXN0KTsgKi8KIAlzZXRfYml0KDB4ZmQsIGJpdG1hc2spOwogCi0JZm9yIChtYyA9IG5ldGRldi0+bWNfbGlzdDsgbWM7IG1jID0gbWMtPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtYywgbmV0ZGV2KSB7CiAJCWhhc2ggPSBzcGlkZXJfbmV0X2dldF9tdWx0aWNhc3RfaGFzaChuZXRkZXYsIG1jLT5kbWlfYWRkcik7CiAJCXNldF9iaXQoaGFzaCwgYml0bWFzayk7CiAJfQpAQCAtMTgyMCw3ICsxODIwLDcgQEAKIAogCXNwaWRlcl9uZXRfd3JpdGVfcmVnKGNhcmQsIFNQSURFUl9ORVRfRUNNT0RFLCBTUElERVJfTkVUX0VDTU9ERV9WQUxVRSk7CiAKLQkvKiBzZXQgY2hhaW4gdGFpbCBhZHJlc3MgZm9yIFJYIGNoYWlucyBhbmQKKwkvKiBzZXQgY2hhaW4gdGFpbCBhZGRyZXNzIGZvciBSWCBjaGFpbnMgYW5kCiAJICogZW5hYmxlIERNQSAqLwogCXNwaWRlcl9uZXRfZW5hYmxlX3J4Y2h0YWlscyhjYXJkKTsKIAlzcGlkZXJfbmV0X2VuYWJsZV9yeGRtYWMoY2FyZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jIGIvZHJpdmVycy9uZXQvc3RhcmZpcmUuYwppbmRleCBmOTUyMTEzLi42ZGZhNjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdGFyZmlyZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N0YXJmaXJlLmMKQEAgLTMwMSw3ICszMDEsNyBAQAogCUNIXzY5MTUgPSAwLAogfTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN0YXJmaXJlX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzdGFyZmlyZV9wY2lfdGJsKSA9IHsKIAl7IDB4OTAwNCwgMHg2OTE1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSF82OTE1IH0sCiAJeyAwLCB9CiB9OwpAQCAtMTc5NiwyMiArMTc5NiwyMiBAQAogCiAJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewkvKiBTZXQgcHJvbWlzY3VvdXMuICovCiAJCXJ4X21vZGUgfD0gQWNjZXB0QWxsOwotCX0gZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSB8fAorCX0gZWxzZSBpZiAoKG5ldGRldl9tY19jb3VudChkZXYpID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKIAkJICAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCS8qIFRvbyBtYW55IHRvIG1hdGNoLCBvciBhY2NlcHQgYWxsIG11bHRpY2FzdHMuICovCiAJCXJ4X21vZGUgfD0gQWNjZXB0QnJvYWRjYXN0fEFjY2VwdEFsbE11bHRpY2FzdHxQZXJmZWN0RmlsdGVyOwotCX0gZWxzZSBpZiAoZGV2LT5tY19jb3VudCA8PSAxNCkgeworCX0gZWxzZSBpZiAobmV0ZGV2X21jX2NvdW50KGRldikgPD0gMTQpIHsKIAkJLyogVXNlIHRoZSAxNiBlbGVtZW50IHBlcmZlY3QgZmlsdGVyLCBza2lwIGZpcnN0IHR3byBlbnRyaWVzLiAqLwogCQl2b2lkIF9faW9tZW0gKmZpbHRlcl9hZGRyID0gaW9hZGRyICsgUGVyZkZpbHRlclRhYmxlICsgMiAqIDE2OwogCQlfX2JlMTYgKmVhZGRyczsKLQkJZm9yIChpID0gMiwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQgKyAyOwotCQkgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCQllYWRkcnMgPSAoX19iZTE2ICopbWNsaXN0LT5kbWlfYWRkcjsKIAkJCXdyaXRldyhiZTE2X3RvX2NwdShlYWRkcnNbMl0pLCBmaWx0ZXJfYWRkcik7IGZpbHRlcl9hZGRyICs9IDQ7CiAJCQl3cml0ZXcoYmUxNl90b19jcHUoZWFkZHJzWzFdKSwgZmlsdGVyX2FkZHIpOyBmaWx0ZXJfYWRkciArPSA0OwogCQkJd3JpdGV3KGJlMTZfdG9fY3B1KGVhZGRyc1swXSksIGZpbHRlcl9hZGRyKTsgZmlsdGVyX2FkZHIgKz0gODsKIAkJfQogCQllYWRkcnMgPSAoX19iZTE2ICopZGV2LT5kZXZfYWRkcjsKKwkJaSA9IG5ldGRldl9tY19jb3VudChkZXYpICsgMjsKIAkJd2hpbGUgKGkrKyA8IDE2KSB7CiAJCQl3cml0ZXcoYmUxNl90b19jcHUoZWFkZHJzWzBdKSwgZmlsdGVyX2FkZHIpOyBmaWx0ZXJfYWRkciArPSA0OwogCQkJd3JpdGV3KGJlMTZfdG9fY3B1KGVhZGRyc1sxXSksIGZpbHRlcl9hZGRyKTsgZmlsdGVyX2FkZHIgKz0gNDsKQEAgLTE4MjUsOCArMTgyNSw3IEBACiAJCV9fbGUxNiBtY19maWx0ZXJbMzJdIF9fYXR0cmlidXRlX18gKChhbGlnbmVkKHNpemVvZihsb25nKSkpKTsJLyogTXVsdGljYXN0IGhhc2ggZmlsdGVyICovCiAKIAkJbWVtc2V0KG1jX2ZpbHRlciwgMCwgc2l6ZW9mKG1jX2ZpbHRlcikpOwotCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKLQkJICAgICBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQkJLyogVGhlIGNoaXAgdXNlcyB0aGUgdXBwZXIgOSBDUkMgYml0cwogCQkJICAgYXMgaW5kZXggaW50byB0aGUgaGFzaCB0YWJsZSAqLwogCQkJaW50IGJpdF9uciA9IGV0aGVyX2NyY19sZShFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgPj4gMjM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9LY29uZmlnCmluZGV4IDM1ZWFhNTIuLmZiMjg3NjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0bW1hYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9LY29uZmlnCkBAIC00LDggKzQsOSBAQAogCXNlbGVjdCBQSFlMSUIKIAlkZXBlbmRzIG9uIE5FVERFVklDRVMgJiYgQ1BVX1NVQlRZUEVfU1Q0MAogCWhlbHAKLQkgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIFNUIE1BQyAxMC8xMDAvMTAwMCBvbi1jaGlwIEV0aGVybmV0Ci0JICBjb250cm9sbGVycy4gU1QgRXRoZXJuZXQgSVBzIGFyZSBidWlsdCBhcm91bmQgYSBTeW5vcHN5cyBJUCBDb3JlLgorCSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgRXRoZXJuZXQgSVBzIGFyZSBidWlsdCBhcm91bmQgYQorCSAgU3lub3BzeXMgSVAgQ29yZSBhbmQgZnVsbHkgdGVzdGVkIG9uIHRoZSBTVE1pY3JvZWxlY3Ryb25pY3MKKwkgIHBsYXRmb3Jtcy4KIAogaWYgU1RNTUFDX0VUSAogCkBAIC0zMiw3ICszMyw4IEBACiAJZGVmYXVsdCBuCiAJaGVscAogCSAgVXNlIGFuIGV4dGVybmFsIHRpbWVyIGZvciBtaXRpZ2F0aW5nIHRoZSBudW1iZXIgb2YgbmV0d29yawotCSAgaW50ZXJydXB0cy4KKwkgIGludGVycnVwdHMuIEN1cnJlbnRseSwgZm9yIFNIIGFyY2hpdGVjdHVyZXMsIGl0IGlzIHBvc3NpYmxlCisJICB0byB1c2UgdGhlIFRNVSBjaGFubmVsIDIgYW5kIHRoZSBTSC1SVEMgZGV2aWNlLgogCiBjaG9pY2UKICAgICAgICAgcHJvbXB0ICJTZWxlY3QgVGltZXIgZGV2aWNlIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL01ha2VmaWxlIGIvZHJpdmVycy9uZXQvc3RtbWFjL01ha2VmaWxlCmluZGV4IGIyZDdhNTUuLmM3NzZhZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N0bW1hYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvTWFrZWZpbGUKQEAgLTEsNCArMSw1IEBACiBvYmotJChDT05GSUdfU1RNTUFDX0VUSCkgKz0gc3RtbWFjLm8KIHN0bW1hYy0kKENPTkZJR19TVE1NQUNfVElNRVIpICs9IHN0bW1hY190aW1lci5vCi1zdG1tYWMtb2Jqczo9IHN0bW1hY19tYWluLm8gc3RtbWFjX2V0aHRvb2wubyBzdG1tYWNfbWRpby5vIFwKLQkJbWFjMTAwLm8gIGdtYWMubyAkKHN0bW1hYy15KQorc3RtbWFjLW9ianM6PSBzdG1tYWNfbWFpbi5vIHN0bW1hY19ldGh0b29sLm8gc3RtbWFjX21kaW8ubwlcCisJICAgICAgZHdtYWNfbGliLm8gZHdtYWMxMDAwX2NvcmUubyAgZHdtYWMxMDAwX2RtYS5vCVwKKwkgICAgICBkd21hYzEwMC5vICQoc3RtbWFjLXkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvY29tbW9uLmggYi9kcml2ZXJzL25ldC9zdG1tYWMvY29tbW9uLmgKaW5kZXggZTQ5ZTUxOC4uMmE1ODE3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9jb21tb24uaApAQCAtMjMsMTMyICsyMyw3IEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAjaW5jbHVkZSAiZGVzY3MuaCIKLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0vKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgIERNQSBDUlMgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyIE1hcHBpbmcKLSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNkZWZpbmUgRE1BX0JVU19NT0RFCQkweDAwMDAxMDAwCS8qIEJ1cyBNb2RlICovCi0jZGVmaW5lIERNQV9YTVRfUE9MTF9ERU1BTkQJMHgwMDAwMTAwNAkvKiBUcmFuc21pdCBQb2xsIERlbWFuZCAqLwotI2RlZmluZSBETUFfUkNWX1BPTExfREVNQU5ECTB4MDAwMDEwMDgJLyogUmVjZWl2ZWQgUG9sbCBEZW1hbmQgKi8KLSNkZWZpbmUgRE1BX1JDVl9CQVNFX0FERFIJMHgwMDAwMTAwYwkvKiBSZWNlaXZlIExpc3QgQmFzZSAqLwotI2RlZmluZSBETUFfVFhfQkFTRV9BRERSCTB4MDAwMDEwMTAJLyogVHJhbnNtaXQgTGlzdCBCYXNlICovCi0jZGVmaW5lIERNQV9TVEFUVVMJCTB4MDAwMDEwMTQJLyogU3RhdHVzIFJlZ2lzdGVyICovCi0jZGVmaW5lIERNQV9DT05UUk9MCQkweDAwMDAxMDE4CS8qIEN0cmwgKE9wZXJhdGlvbmFsIE1vZGUpICovCi0jZGVmaW5lIERNQV9JTlRSX0VOQQkJMHgwMDAwMTAxYwkvKiBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIERNQV9NSVNTRURfRlJBTUVfQ1RSCTB4MDAwMDEwMjAJLyogTWlzc2VkIEZyYW1lIENvdW50ZXIgKi8KLSNkZWZpbmUgRE1BX0NVUl9UWF9CVUZfQUREUgkweDAwMDAxMDUwCS8qIEN1cnJlbnQgSG9zdCBUeCBCdWZmZXIgKi8KLSNkZWZpbmUgRE1BX0NVUl9SWF9CVUZfQUREUgkweDAwMDAxMDU0CS8qIEN1cnJlbnQgSG9zdCBSeCBCdWZmZXIgKi8KLQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgIERNQSBDb250cm9sIHJlZ2lzdGVyIGRlZmluZXMKLSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2RlZmluZSBETUFfQ09OVFJPTF9TVAkJMHgwMDAwMjAwMAkvKiBTdGFydC9TdG9wIFRyYW5zbWlzc2lvbiAqLwotI2RlZmluZSBETUFfQ09OVFJPTF9TUgkJMHgwMDAwMDAwMgkvKiBTdGFydC9TdG9wIFJlY2VpdmUgKi8KLQotLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgIERNQSBJbnRlcnJ1cHQgRW5hYmxlIHJlZ2lzdGVyIGRlZmluZXMKLSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoqKiogTk9STUFMIElOVEVSUlVQVCAqKioqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfTklFIDB4MDAwMTAwMDAJLyogTm9ybWFsIFN1bW1hcnkgKi8KLSNkZWZpbmUgRE1BX0lOVFJfRU5BX1RJRSAweDAwMDAwMDAxCS8qIFRyYW5zbWl0IEludGVycnVwdCAqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfVFVFIDB4MDAwMDAwMDQJLyogVHJhbnNtaXQgQnVmZmVyIFVuYXZhaWxhYmxlICovCi0jZGVmaW5lIERNQV9JTlRSX0VOQV9SSUUgMHgwMDAwMDA0MAkvKiBSZWNlaXZlIEludGVycnVwdCAqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfRVJFIDB4MDAwMDQwMDAJLyogRWFybHkgUmVjZWl2ZSAqLwotCi0jZGVmaW5lIERNQV9JTlRSX05PUk1BTAkoRE1BX0lOVFJfRU5BX05JRSB8IERNQV9JTlRSX0VOQV9SSUUgfCBcCi0JCQlETUFfSU5UUl9FTkFfVElFKQotCi0vKioqKiBBQk5PUk1BTCBJTlRFUlJVUFQgKioqKi8KLSNkZWZpbmUgRE1BX0lOVFJfRU5BX0FJRSAweDAwMDA4MDAwCS8qIEFibm9ybWFsIFN1bW1hcnkgKi8KLSNkZWZpbmUgRE1BX0lOVFJfRU5BX0ZCRSAweDAwMDAyMDAwCS8qIEZhdGFsIEJ1cyBFcnJvciAqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfRVRFIDB4MDAwMDA0MDAJLyogRWFybHkgVHJhbnNtaXQgKi8KLSNkZWZpbmUgRE1BX0lOVFJfRU5BX1JXRSAweDAwMDAwMjAwCS8qIFJlY2VpdmUgV2F0Y2hkb2cgKi8KLSNkZWZpbmUgRE1BX0lOVFJfRU5BX1JTRSAweDAwMDAwMTAwCS8qIFJlY2VpdmUgU3RvcHBlZCAqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfUlVFIDB4MDAwMDAwODAJLyogUmVjZWl2ZSBCdWZmZXIgVW5hdmFpbGFibGUgKi8KLSNkZWZpbmUgRE1BX0lOVFJfRU5BX1VORSAweDAwMDAwMDIwCS8qIFR4IFVuZGVyZmxvdyAqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfT1ZFIDB4MDAwMDAwMTAJLyogUmVjZWl2ZSBPdmVyZmxvdyAqLwotI2RlZmluZSBETUFfSU5UUl9FTkFfVEpFIDB4MDAwMDAwMDgJLyogVHJhbnNtaXQgSmFiYmVyICovCi0jZGVmaW5lIERNQV9JTlRSX0VOQV9UU0UgMHgwMDAwMDAwMgkvKiBUcmFuc21pdCBTdG9wcGVkICovCi0KLSNkZWZpbmUgRE1BX0lOVFJfQUJOT1JNQUwJKERNQV9JTlRSX0VOQV9BSUUgfCBETUFfSU5UUl9FTkFfRkJFIHwgXAotCQkJCURNQV9JTlRSX0VOQV9VTkUpCi0KLS8qIERNQSBkZWZhdWx0IGludGVycnVwdCBtYXNrICovCi0jZGVmaW5lIERNQV9JTlRSX0RFRkFVTFRfTUFTSwkoRE1BX0lOVFJfTk9STUFMIHwgRE1BX0lOVFJfQUJOT1JNQUwpCi0KLS8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBETUEgU3RhdHVzIHJlZ2lzdGVyIGRlZmluZXMKLSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIERNQV9TVEFUVVNfR1BJCQkweDEwMDAwMDAwCS8qIFBNVCBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19HTUkJCTB4MDgwMDAwMDAJLyogTU1DIGludGVycnVwdCAqLwotI2RlZmluZSBETUFfU1RBVFVTX0dMSQkJMHgwNDAwMDAwMAkvKiBHTUFDIExpbmUgaW50ZXJmYWNlIGludC4gKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19HTUkJCTB4MDgwMDAwMDAKLSNkZWZpbmUgRE1BX1NUQVRVU19HTEkJCTB4MDQwMDAwMDAKLSNkZWZpbmUgRE1BX1NUQVRVU19FQl9NQVNLCTB4MDAzODAwMDAJLyogRXJyb3IgQml0cyBNYXNrICovCi0jZGVmaW5lIERNQV9TVEFUVVNfRUJfVFhfQUJPUlQJMHgwMDA4MDAwMAkvKiBFcnJvciBCaXRzIC0gVFggQWJvcnQgKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19FQl9SWF9BQk9SVAkweDAwMTAwMDAwCS8qIEVycm9yIEJpdHMgLSBSWCBBYm9ydCAqLwotI2RlZmluZSBETUFfU1RBVFVTX1RTX01BU0sJMHgwMDcwMDAwMAkvKiBUcmFuc21pdCBQcm9jZXNzIFN0YXRlICovCi0jZGVmaW5lIERNQV9TVEFUVVNfVFNfU0hJRlQJMjAKLSNkZWZpbmUgRE1BX1NUQVRVU19SU19NQVNLCTB4MDAwZTAwMDAJLyogUmVjZWl2ZSBQcm9jZXNzIFN0YXRlICovCi0jZGVmaW5lIERNQV9TVEFUVVNfUlNfU0hJRlQJMTcKLSNkZWZpbmUgRE1BX1NUQVRVU19OSVMJMHgwMDAxMDAwMAkvKiBOb3JtYWwgSW50ZXJydXB0IFN1bW1hcnkgKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19BSVMJMHgwMDAwODAwMAkvKiBBYm5vcm1hbCBJbnRlcnJ1cHQgU3VtbWFyeSAqLwotI2RlZmluZSBETUFfU1RBVFVTX0VSSQkweDAwMDA0MDAwCS8qIEVhcmx5IFJlY2VpdmUgSW50ZXJydXB0ICovCi0jZGVmaW5lIERNQV9TVEFUVVNfRkJJCTB4MDAwMDIwMDAJLyogRmF0YWwgQnVzIEVycm9yIEludGVycnVwdCAqLwotI2RlZmluZSBETUFfU1RBVFVTX0VUSQkweDAwMDAwNDAwCS8qIEVhcmx5IFRyYW5zbWl0IEludGVycnVwdCAqLwotI2RlZmluZSBETUFfU1RBVFVTX1JXVAkweDAwMDAwMjAwCS8qIFJlY2VpdmUgV2F0Y2hkb2cgVGltZW91dCAqLwotI2RlZmluZSBETUFfU1RBVFVTX1JQUwkweDAwMDAwMTAwCS8qIFJlY2VpdmUgUHJvY2VzcyBTdG9wcGVkICovCi0jZGVmaW5lIERNQV9TVEFUVVNfUlUJMHgwMDAwMDA4MAkvKiBSZWNlaXZlIEJ1ZmZlciBVbmF2YWlsYWJsZSAqLwotI2RlZmluZSBETUFfU1RBVFVTX1JJCTB4MDAwMDAwNDAJLyogUmVjZWl2ZSBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19VTkYJMHgwMDAwMDAyMAkvKiBUcmFuc21pdCBVbmRlcmZsb3cgKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19PVkYJMHgwMDAwMDAxMAkvKiBSZWNlaXZlIE92ZXJmbG93ICovCi0jZGVmaW5lIERNQV9TVEFUVVNfVEpUCTB4MDAwMDAwMDgJLyogVHJhbnNtaXQgSmFiYmVyIFRpbWVvdXQgKi8KLSNkZWZpbmUgRE1BX1NUQVRVU19UVQkweDAwMDAwMDA0CS8qIFRyYW5zbWl0IEJ1ZmZlciBVbmF2YWlsYWJsZSAqLwotI2RlZmluZSBETUFfU1RBVFVTX1RQUwkweDAwMDAwMDAyCS8qIFRyYW5zbWl0IFByb2Nlc3MgU3RvcHBlZCAqLwotI2RlZmluZSBETUFfU1RBVFVTX1RJCTB4MDAwMDAwMDEJLyogVHJhbnNtaXQgSW50ZXJydXB0ICovCi0KLS8qIE90aGVyIGRlZmluZXMgKi8KLSNkZWZpbmUgSEFTSF9UQUJMRV9TSVpFIDY0Ci0jZGVmaW5lIFBBVVNFX1RJTUUgMHgyMDAKLQotLyogRmxvdyBDb250cm9sIGRlZmluZXMgKi8KLSNkZWZpbmUgRkxPV19PRkYJMAotI2RlZmluZSBGTE9XX1JYCQkxCi0jZGVmaW5lIEZMT1dfVFgJCTIKLSNkZWZpbmUgRkxPV19BVVRPCShGTE9XX1RYIHwgRkxPV19SWCkKLQotLyogRE1BIFNUT1JFLUFORC1GT1JXQVJEIE9wZXJhdGlvbiBNb2RlICovCi0jZGVmaW5lIFNGX0RNQV9NT0RFIDEKLQotI2RlZmluZSBIV19DU1VNIDEKLSNkZWZpbmUgTk9fSFdfQ1NVTSAwCi0KLS8qIEdNQUMgVFggRklGTyBpcyA4SywgUnggRklGTyBpcyAxNksgKi8KLSNkZWZpbmUgQlVGX1NJWkVfMTZLaUIgMTYzODQKLSNkZWZpbmUgQlVGX1NJWkVfOEtpQiA4MTkyCi0jZGVmaW5lIEJVRl9TSVpFXzRLaUIgNDA5NgotI2RlZmluZSBCVUZfU0laRV8yS2lCIDIwNDgKLQotLyogUG93ZXIgRG93biBhbmQgV09MICovCi0jZGVmaW5lIFBNVF9OT1RfU1VQUE9SVEVEIDAKLSNkZWZpbmUgUE1UX1NVUFBPUlRFRCAxCi0KLS8qIENvbW1vbiBNQUMgZGVmaW5lcyAqLwotI2RlZmluZSBNQUNfQ1RSTF9SRUcJCTB4MDAwMDAwMDAJLyogTUFDIENvbnRyb2wgKi8KLSNkZWZpbmUgTUFDX0VOQUJMRV9UWAkJMHgwMDAwMDAwOAkvKiBUcmFuc21pdHRlciBFbmFibGUgKi8KLSNkZWZpbmUgTUFDX1JOQUJMRV9SWAkJMHgwMDAwMDAwNAkvKiBSZWNlaXZlciBFbmFibGUgKi8KLQotLyogTUFDIE1hbmFnZW1lbnQgQ291bnRlcnMgcmVnaXN0ZXIgKi8KLSNkZWZpbmUgTU1DX0NPTlRST0wJCTB4MDAwMDAxMDAJLyogTU1DIENvbnRyb2wgKi8KLSNkZWZpbmUgTU1DX0hJR0hfSU5UUgkJMHgwMDAwMDEwNAkvKiBNTUMgSGlnaCBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgTU1DX0xPV19JTlRSCQkweDAwMDAwMTA4CS8qIE1NQyBMb3cgSW50ZXJydXB0ICovCi0jZGVmaW5lIE1NQ19ISUdIX0lOVFJfTUFTSwkweDAwMDAwMTBjCS8qIE1NQyBIaWdoIEludGVycnVwdCBNYXNrICovCi0jZGVmaW5lIE1NQ19MT1dfSU5UUl9NQVNLCTB4MDAwMDAxMTAJLyogTU1DIExvdyBJbnRlcnJ1cHQgTWFzayAqLwotCi0jZGVmaW5lIE1NQ19DT05UUk9MX01BWF9GUk1fTUFTSwkweDAwMDNmZjgJLyogTWF4aW11bSBGcmFtZSBTaXplICovCi0jZGVmaW5lIE1NQ19DT05UUk9MX01BWF9GUk1fU0hJRlQJMwotI2RlZmluZSBNTUNfQ09OVFJPTF9NQVhfRlJBTUUJCTB4N0ZGCisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAKIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgewogCS8qIFRyYW5zbWl0IGVycm9ycyAqLwpAQCAtMTY5LDcgKzQ0LDcgQEAKIAl1bnNpZ25lZCBsb25nIHJ4X3Rvb2xvbmc7CiAJdW5zaWduZWQgbG9uZyByeF9jb2xsaXNpb247CiAJdW5zaWduZWQgbG9uZyByeF9jcmM7Ci0JdW5zaWduZWQgbG9uZyByeF9sZW5naHQ7CisJdW5zaWduZWQgbG9uZyByeF9sZW5ndGg7CiAJdW5zaWduZWQgbG9uZyByeF9taWk7CiAJdW5zaWduZWQgbG9uZyByeF9tdWx0aWNhc3Q7CiAJdW5zaWduZWQgbG9uZyByeF9nbWFjX292ZXJmbG93OwpAQCAtMTk4LDY2ICs3Myw2MiBAQAogCXVuc2lnbmVkIGxvbmcgbm9ybWFsX2lycV9uOwogfTsKIAotLyogR01BQyBjb3JlIGNhbiBjb21wdXRlIHRoZSBjaGVja3N1bXMgaW4gSFcuICovCi1lbnVtIHJ4X2ZyYW1lX3N0YXR1cyB7CisjZGVmaW5lIEhBU0hfVEFCTEVfU0laRSA2NAorI2RlZmluZSBQQVVTRV9USU1FIDB4MjAwCisKKy8qIEZsb3cgQ29udHJvbCBkZWZpbmVzICovCisjZGVmaW5lIEZMT1dfT0ZGCTAKKyNkZWZpbmUgRkxPV19SWAkJMQorI2RlZmluZSBGTE9XX1RYCQkyCisjZGVmaW5lIEZMT1dfQVVUTwkoRkxPV19UWCB8IEZMT1dfUlgpCisKKyNkZWZpbmUgU0ZfRE1BX01PREUgMSAvKiBETUEgU1RPUkUtQU5ELUZPUldBUkQgT3BlcmF0aW9uIE1vZGUgKi8KKworI2RlZmluZSBIV19DU1VNIDEKKyNkZWZpbmUgTk9fSFdfQ1NVTSAwCitlbnVtIHJ4X2ZyYW1lX3N0YXR1cyB7IC8qIElQQyBzdGF0dXMgKi8KIAlnb29kX2ZyYW1lID0gMCwKIAlkaXNjYXJkX2ZyYW1lID0gMSwKIAljc3VtX25vbmUgPSAyLAogfTsKIAotc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19zZXRfbWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHU4IGFkZHJbNl0sCi0JCQkgdW5zaWduZWQgaW50IGhpZ2gsIHVuc2lnbmVkIGludCBsb3cpCi17Ci0JdW5zaWduZWQgbG9uZyBkYXRhOworZW51bSB0eF9kbWFfaXJxX3N0YXR1cyB7CisJdHhfaGFyZF9lcnJvciA9IDEsCisJdHhfaGFyZF9lcnJvcl9idW1wX3RjID0gMiwKKwloYW5kbGVfdHhfcnggPSAzLAorfTsKIAotCWRhdGEgPSAoYWRkcls1XSA8PCA4KSB8IGFkZHJbNF07Ci0Jd3JpdGVsKGRhdGEsIGlvYWRkciArIGhpZ2gpOwotCWRhdGEgPSAoYWRkclszXSA8PCAyNCkgfCAoYWRkclsyXSA8PCAxNikgfCAoYWRkclsxXSA8PCA4KSB8IGFkZHJbMF07Ci0Jd3JpdGVsKGRhdGEsIGlvYWRkciArIGxvdyk7CisvKiBHTUFDIFRYIEZJRk8gaXMgOEssIFJ4IEZJRk8gaXMgMTZLICovCisjZGVmaW5lIEJVRl9TSVpFXzE2S2lCIDE2Mzg0CisjZGVmaW5lIEJVRl9TSVpFXzhLaUIgODE5MgorI2RlZmluZSBCVUZfU0laRV80S2lCIDQwOTYKKyNkZWZpbmUgQlVGX1NJWkVfMktpQiAyMDQ4CiAKLQlyZXR1cm47Ci19CisvKiBQb3dlciBEb3duIGFuZCBXT0wgKi8KKyNkZWZpbmUgUE1UX05PVF9TVVBQT1JURUQgMAorI2RlZmluZSBQTVRfU1VQUE9SVEVEIDEKIAotc3RhdGljIGlubGluZSB2b2lkIHN0bW1hY19nZXRfbWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsCi0JCQkJdW5zaWduZWQgY2hhciAqYWRkciwgdW5zaWduZWQgaW50IGhpZ2gsCi0JCQkJdW5zaWduZWQgaW50IGxvdykKLXsKLQl1bnNpZ25lZCBpbnQgaGlfYWRkciwgbG9fYWRkcjsKKy8qIENvbW1vbiBNQUMgZGVmaW5lcyAqLworI2RlZmluZSBNQUNfQ1RSTF9SRUcJCTB4MDAwMDAwMDAJLyogTUFDIENvbnRyb2wgKi8KKyNkZWZpbmUgTUFDX0VOQUJMRV9UWAkJMHgwMDAwMDAwOAkvKiBUcmFuc21pdHRlciBFbmFibGUgKi8KKyNkZWZpbmUgTUFDX1JOQUJMRV9SWAkJMHgwMDAwMDAwNAkvKiBSZWNlaXZlciBFbmFibGUgKi8KIAotCS8qIFJlYWQgdGhlIE1BQyBhZGRyZXNzIGZyb20gdGhlIGhhcmR3YXJlICovCi0JaGlfYWRkciA9IHJlYWRsKGlvYWRkciArIGhpZ2gpOwotCWxvX2FkZHIgPSByZWFkbChpb2FkZHIgKyBsb3cpOworLyogTUFDIE1hbmFnZW1lbnQgQ291bnRlcnMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgTU1DX0NPTlRST0wJCTB4MDAwMDAxMDAJLyogTU1DIENvbnRyb2wgKi8KKyNkZWZpbmUgTU1DX0hJR0hfSU5UUgkJMHgwMDAwMDEwNAkvKiBNTUMgSGlnaCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgTU1DX0xPV19JTlRSCQkweDAwMDAwMTA4CS8qIE1NQyBMb3cgSW50ZXJydXB0ICovCisjZGVmaW5lIE1NQ19ISUdIX0lOVFJfTUFTSwkweDAwMDAwMTBjCS8qIE1NQyBIaWdoIEludGVycnVwdCBNYXNrICovCisjZGVmaW5lIE1NQ19MT1dfSU5UUl9NQVNLCTB4MDAwMDAxMTAJLyogTU1DIExvdyBJbnRlcnJ1cHQgTWFzayAqLwogCi0JLyogRXh0cmFjdCB0aGUgTUFDIGFkZHJlc3MgZnJvbSB0aGUgaGlnaCBhbmQgbG93IHdvcmRzICovCi0JYWRkclswXSA9IGxvX2FkZHIgJiAweGZmOwotCWFkZHJbMV0gPSAobG9fYWRkciA+PiA4KSAmIDB4ZmY7Ci0JYWRkclsyXSA9IChsb19hZGRyID4+IDE2KSAmIDB4ZmY7Ci0JYWRkclszXSA9IChsb19hZGRyID4+IDI0KSAmIDB4ZmY7Ci0JYWRkcls0XSA9IGhpX2FkZHIgJiAweGZmOwotCWFkZHJbNV0gPSAoaGlfYWRkciA+PiA4KSAmIDB4ZmY7CisjZGVmaW5lIE1NQ19DT05UUk9MX01BWF9GUk1fTUFTSwkweDAwMDNmZjgJLyogTWF4aW11bSBGcmFtZSBTaXplICovCisjZGVmaW5lIE1NQ19DT05UUk9MX01BWF9GUk1fU0hJRlQJMworI2RlZmluZSBNTUNfQ09OVFJPTF9NQVhfRlJBTUUJCTB4N0ZGCiAKLQlyZXR1cm47Ci19Ci0KLXN0cnVjdCBzdG1tYWNfb3BzIHsKLQkvKiBNQUMgY29yZSBpbml0aWFsaXphdGlvbiAqLwotCXZvaWQgKCpjb3JlX2luaXQpICh1bnNpZ25lZCBsb25nIGlvYWRkcikgX19fX2NhY2hlbGluZV9hbGlnbmVkOwotCS8qIERNQSBjb3JlIGluaXRpYWxpemF0aW9uICovCi0JaW50ICgqZG1hX2luaXQpICh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHBibCwgdTMyIGRtYV90eCwgdTMyIGRtYV9yeCk7Ci0JLyogRHVtcCBNQUMgcmVnaXN0ZXJzICovCi0Jdm9pZCAoKmR1bXBfbWFjX3JlZ3MpICh1bnNpZ25lZCBsb25nIGlvYWRkcik7Ci0JLyogRHVtcCBETUEgcmVnaXN0ZXJzICovCi0Jdm9pZCAoKmR1bXBfZG1hX3JlZ3MpICh1bnNpZ25lZCBsb25nIGlvYWRkcik7Ci0JLyogU2V0IHR4L3J4IHRocmVzaG9sZCBpbiB0aGUgY3NyNiByZWdpc3RlcgotCSAqIEFuIGludmFsaWQgdmFsdWUgZW5hYmxlcyB0aGUgc3RvcmUtYW5kLWZvcndhcmQgbW9kZSAqLwotCXZvaWQgKCpkbWFfbW9kZSkgKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCBpbnQgdHhtb2RlLCBpbnQgcnhtb2RlKTsKLQkvKiBUbyB0cmFjayBleHRyYSBzdGF0aXN0aWMgKGlmIHN1cHBvcnRlZCkgKi8KLQl2b2lkICgqZG1hX2RpYWdub3N0aWNfZnIpICh2b2lkICpkYXRhLCBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKLQkvKiBSWCBkZXNjcmlwdG9yIHJpbmcgaW5pdGlhbGl6YXRpb24gKi8KK3N0cnVjdCBzdG1tYWNfZGVzY19vcHMgeworCS8qIERNQSBSWCBkZXNjcmlwdG9yIHJpbmcgaW5pdGlhbGl6YXRpb24gKi8KIAl2b2lkICgqaW5pdF9yeF9kZXNjKSAoc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBpbnQgcmluZ19zaXplLAotCQkJCWludCBkaXNhYmxlX3J4X2ljKTsKLQkvKiBUWCBkZXNjcmlwdG9yIHJpbmcgaW5pdGlhbGl6YXRpb24gKi8KKwkJCSAgICAgIGludCBkaXNhYmxlX3J4X2ljKTsKKwkvKiBETUEgVFggZGVzY3JpcHRvciByaW5nIGluaXRpYWxpemF0aW9uICovCiAJdm9pZCAoKmluaXRfdHhfZGVzYykgKHN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgaW50IHJpbmdfc2l6ZSk7CiAKIAkvKiBJbnZva2VkIGJ5IHRoZSB4bWl0IGZ1bmN0aW9uIHRvIHByZXBhcmUgdGhlIHR4IGRlc2NyaXB0b3IgKi8KQEAgLTI4MSw3ICsxNTIsNiBAQAogCS8qIEdldCB0aGUgYnVmZmVyIHNpemUgZnJvbSB0aGUgZGVzY3JpcHRvciAqLwogCWludCAoKmdldF90eF9sZW4pIChzdHJ1Y3QgZG1hX2Rlc2MgKnApOwogCS8qIEhhbmRsZSBleHRyYSBldmVudHMgb24gc3BlY2lmaWMgaW50ZXJydXB0cyBodyBkZXBlbmRlbnQgKi8KLQl2b2lkICgqaG9zdF9pcnFfc3RhdHVzKSAodW5zaWduZWQgbG9uZyBpb2FkZHIpOwogCWludCAoKmdldF9yeF9vd25lcikgKHN0cnVjdCBkbWFfZGVzYyAqcCk7CiAJdm9pZCAoKnNldF9yeF9vd25lcikgKHN0cnVjdCBkbWFfZGVzYyAqcCk7CiAJLyogR2V0IHRoZSByZWNlaXZlIGZyYW1lIHNpemUgKi8KQEAgLTI4OSw2ICsxNTksMzcgQEAKIAkvKiBSZXR1cm4gdGhlIHJlY2VwdGlvbiBzdGF0dXMgbG9va2luZyBhdCB0aGUgUkRFUzEgKi8KIAlpbnQgKCpyeF9zdGF0dXMpICh2b2lkICpkYXRhLCBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAogCQkJICBzdHJ1Y3QgZG1hX2Rlc2MgKnApOworfTsKKworc3RydWN0IHN0bW1hY19kbWFfb3BzIHsKKwkvKiBETUEgY29yZSBpbml0aWFsaXphdGlvbiAqLworCWludCAoKmluaXQpICh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHBibCwgdTMyIGRtYV90eCwgdTMyIGRtYV9yeCk7CisJLyogRHVtcCBETUEgcmVnaXN0ZXJzICovCisJdm9pZCAoKmR1bXBfcmVncykgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKKwkvKiBTZXQgdHgvcnggdGhyZXNob2xkIGluIHRoZSBjc3I2IHJlZ2lzdGVyCisJICogQW4gaW52YWxpZCB2YWx1ZSBlbmFibGVzIHRoZSBzdG9yZS1hbmQtZm9yd2FyZCBtb2RlICovCisJdm9pZCAoKmRtYV9tb2RlKSAodW5zaWduZWQgbG9uZyBpb2FkZHIsIGludCB0eG1vZGUsIGludCByeG1vZGUpOworCS8qIFRvIHRyYWNrIGV4dHJhIHN0YXRpc3RpYyAoaWYgc3VwcG9ydGVkKSAqLworCXZvaWQgKCpkbWFfZGlhZ25vc3RpY19mcikgKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCisJCQkJICAgdW5zaWduZWQgbG9uZyBpb2FkZHIpOworCXZvaWQgKCplbmFibGVfZG1hX3RyYW5zbWlzc2lvbikgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKKwl2b2lkICgqZW5hYmxlX2RtYV9pcnEpICh1bnNpZ25lZCBsb25nIGlvYWRkcik7CisJdm9pZCAoKmRpc2FibGVfZG1hX2lycSkgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKKwl2b2lkICgqc3RhcnRfdHgpICh1bnNpZ25lZCBsb25nIGlvYWRkcik7CisJdm9pZCAoKnN0b3BfdHgpICh1bnNpZ25lZCBsb25nIGlvYWRkcik7CisJdm9pZCAoKnN0YXJ0X3J4KSAodW5zaWduZWQgbG9uZyBpb2FkZHIpOworCXZvaWQgKCpzdG9wX3J4KSAodW5zaWduZWQgbG9uZyBpb2FkZHIpOworCWludCAoKmRtYV9pbnRlcnJ1cHQpICh1bnNpZ25lZCBsb25nIGlvYWRkciwKKwkJCSAgICAgIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngpOworfTsKKworc3RydWN0IHN0bW1hY19vcHMgeworCS8qIE1BQyBjb3JlIGluaXRpYWxpemF0aW9uICovCisJdm9pZCAoKmNvcmVfaW5pdCkgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisJLyogRHVtcCBNQUMgcmVnaXN0ZXJzICovCisJdm9pZCAoKmR1bXBfcmVncykgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKKwkvKiBIYW5kbGUgZXh0cmEgZXZlbnRzIG9uIHNwZWNpZmljIGludGVycnVwdHMgaHcgZGVwZW5kZW50ICovCisJdm9pZCAoKmhvc3RfaXJxX3N0YXR1cykgKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKIAkvKiBNdWx0aWNhc3QgZmlsdGVyIHNldHRpbmcgKi8KIAl2b2lkICgqc2V0X2ZpbHRlcikgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCS8qIEZsb3cgY29udHJvbCBzZXR0aW5nICovCkBAIC0yOTgsOSArMTk5LDkgQEAKIAl2b2lkICgqcG10KSAodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGxvbmcgbW9kZSk7CiAJLyogU2V0L0dldCBVbmljYXN0IE1BQyBhZGRyZXNzZXMgKi8KIAl2b2lkICgqc2V0X3VtYWNfYWRkcikgKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAotCQkJICAgICB1bnNpZ25lZCBpbnQgcmVnX24pOworCQkJICAgICAgIHVuc2lnbmVkIGludCByZWdfbik7CiAJdm9pZCAoKmdldF91bWFjX2FkZHIpICh1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgY2hhciAqYWRkciwKLQkJCSAgICAgdW5zaWduZWQgaW50IHJlZ19uKTsKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVnX24pOwogfTsKIAogc3RydWN0IG1hY19saW5rIHsKQEAgLTMxNCwxNyArMjE1LDE5IEBACiAJdW5zaWduZWQgaW50IGRhdGE7CS8qIE1JSSBEYXRhICovCiB9OwogCi1zdHJ1Y3QgaHdfY2FwIHsKLQl1bnNpZ25lZCBpbnQgdmVyc2lvbjsJLyogQ29yZSBWZXJzaW9uIHJlZ2lzdGVyIChHTUFDKSAqLwotCXVuc2lnbmVkIGludCBwbXQ7CS8qIFBvd2VyLURvd24gbW9kZSAoR01BQykgKi8KLQlzdHJ1Y3QgbWFjX2xpbmsgbGluazsKLQlzdHJ1Y3QgbWlpX3JlZ3MgbWlpOwotfTsKLQogc3RydWN0IG1hY19kZXZpY2VfaW5mbyB7Ci0Jc3RydWN0IGh3X2NhcCBodzsKLQlzdHJ1Y3Qgc3RtbWFjX29wcyAqb3BzOworCXN0cnVjdCBzdG1tYWNfb3BzCSptYWM7CisJc3RydWN0IHN0bW1hY19kZXNjX29wcwkqZGVzYzsKKwlzdHJ1Y3Qgc3RtbWFjX2RtYV9vcHMJKmRtYTsKKwl1bnNpZ25lZCBpbnQgcG10OwkvKiBzdXBwb3J0IFBvd2VyLURvd24gKi8KKwlzdHJ1Y3QgbWlpX3JlZ3MgbWlpOwkvKiBNSUkgcmVnaXN0ZXIgQWRkcmVzc2VzICovCisJc3RydWN0IG1hY19saW5rIGxpbms7CiB9OwogCi1zdHJ1Y3QgbWFjX2RldmljZV9pbmZvICpnbWFjX3NldHVwKHVuc2lnbmVkIGxvbmcgYWRkcik7Ci1zdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWMxMDBfc2V0dXAodW5zaWduZWQgbG9uZyBhZGRyKTsKK3N0cnVjdCBtYWNfZGV2aWNlX2luZm8gKmR3bWFjMTAwMF9zZXR1cCh1bnNpZ25lZCBsb25nIGFkZHIpOworc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqZHdtYWMxMDBfc2V0dXAodW5zaWduZWQgbG9uZyBhZGRyKTsKKworZXh0ZXJuIHZvaWQgc3RtbWFjX3NldF9tYWNfYWRkcih1bnNpZ25lZCBsb25nIGlvYWRkciwgdTggYWRkcls2XSwKKwkJCQl1bnNpZ25lZCBpbnQgaGlnaCwgdW5zaWduZWQgaW50IGxvdyk7CitleHRlcm4gdm9pZCBzdG1tYWNfZ2V0X21hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAorCQkJCXVuc2lnbmVkIGludCBoaWdoLCB1bnNpZ25lZCBpbnQgbG93KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9kZXNjcy5oIGIvZHJpdmVycy9uZXQvc3RtbWFjL2Rlc2NzLmgKaW5kZXggNmQyYTBiMi4uNjNhMDNlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL2Rlc2NzLmgKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2Rlc2NzLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBIZWFkZXIgRmlsZSB0byBkZXNjcmliZSB0aGUgRE1BIGRlc2NyaXB0b3JzCi0gIFVzZSBlbmhhbmNlZCBkZXNjcmlwdG9ycyBpbiBjYXNlIG9mIEdNQUMgQ29yZXMuCisgIEhlYWRlciBGaWxlIHRvIGRlc2NyaWJlIHRoZSBETUEgZGVzY3JpcHRvcnMuCisgIEVuaGFuY2VkIGRlc2NyaXB0b3JzIGhhdmUgYmVlbiBpbiBjYXNlIG9mIERXTUFDMTAwMCBDb3Jlcy4KIAogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWMxMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDNiMDM3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwLmMKQEAgLTAsMCArMSw1MzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIE1BQyAxMC8xMDAgb24tY2hpcCBFdGhlcm5ldCBjb250cm9sbGVyCisgIGN1cnJlbnRseSB0ZXN0ZWQgb24gYWxsIHRoZSBTVCBib2FyZHMgYmFzZWQgb24gU1RiNzEwOSBhbmQgc3R4NzIwMCBTb0NzLgorCisgIERXQyBFdGhlciBNQUMgMTAvMTAwIFVuaXZlcnNhbCB2ZXJzaW9uIDQuMCBoYXMgYmVlbiB1c2VkIGZvciBkZXZlbG9waW5nCisgIHRoaXMgY29kZS4KKworICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CisKKyNpbmNsdWRlICJjb21tb24uaCIKKyNpbmNsdWRlICJkd21hYzEwMC5oIgorI2luY2x1ZGUgImR3bWFjX2RtYS5oIgorCisjdW5kZWYgRFdNQUMxMDBfREVCVUcKKy8qI2RlZmluZSBEV01BQzEwMF9ERUJVRyovCisjaWZkZWYgRFdNQUMxMDBfREVCVUcKKyNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgIHByaW50ayhmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwX2NvcmVfaW5pdCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBNQUNfQ09OVFJPTCk7CisKKwl3cml0ZWwoKHZhbHVlIHwgTUFDX0NPUkVfSU5JVCksIGlvYWRkciArIE1BQ19DT05UUk9MKTsKKworI2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VECisJd3JpdGVsKEVUSF9QXzgwMjFRLCBpb2FkZHIgKyBNQUNfVkxBTjEpOworI2VuZGlmCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMF9kdW1wX21hY19yZWdzKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXByX2luZm8oIlx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorCQkiXHQgIERXTUFDIDEwMCBDU1IgKGJhc2UgYWRkciA9IDB4JTh4KVxuIgorCQkiXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iLAorCQkodW5zaWduZWQgaW50KWlvYWRkcik7CisJcHJfaW5mbygiXHRjb250cm9sIHJlZyAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsIE1BQ19DT05UUk9MLAorCQlyZWFkbChpb2FkZHIgKyBNQUNfQ09OVFJPTCkpOworCXByX2luZm8oIlx0YWRkciBISSAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiAiLCBNQUNfQUREUl9ISUdILAorCQlyZWFkbChpb2FkZHIgKyBNQUNfQUREUl9ISUdIKSk7CisJcHJfaW5mbygiXHRhZGRyIExPIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgTUFDX0FERFJfTE9XLAorCQlyZWFkbChpb2FkZHIgKyBNQUNfQUREUl9MT1cpKTsKKwlwcl9pbmZvKCJcdG11bHRpY2FzdCBoYXNoIEhJIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKKwkJTUFDX0hBU0hfSElHSCwgcmVhZGwoaW9hZGRyICsgTUFDX0hBU0hfSElHSCkpOworCXByX2luZm8oIlx0bXVsdGljYXN0IGhhc2ggTE8gKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCQlNQUNfSEFTSF9MT1csIHJlYWRsKGlvYWRkciArIE1BQ19IQVNIX0xPVykpOworCXByX2luZm8oIlx0ZmxvdyBjb250cm9sIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKKwkJTUFDX0ZMT1dfQ1RSTCwgcmVhZGwoaW9hZGRyICsgTUFDX0ZMT1dfQ1RSTCkpOworCXByX2luZm8oIlx0VkxBTjEgdGFnIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgTUFDX1ZMQU4xLAorCQlyZWFkbChpb2FkZHIgKyBNQUNfVkxBTjEpKTsKKwlwcl9pbmZvKCJcdFZMQU4yIHRhZyAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsIE1BQ19WTEFOMiwKKwkJcmVhZGwoaW9hZGRyICsgTUFDX1ZMQU4yKSk7CisJcHJfaW5mbygiXG5cdE1BQyBtYW5hZ2VtZW50IGNvdW50ZXIgcmVnaXN0ZXJzXG4iKTsKKwlwcl9pbmZvKCJcdCBNTUMgY3J0bCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJCU1NQ19DT05UUk9MLCByZWFkbChpb2FkZHIgKyBNTUNfQ09OVFJPTCkpOworCXByX2luZm8oIlx0IE1NQyBIaWdoIEludGVycnVwdCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJCU1NQ19ISUdIX0lOVFIsIHJlYWRsKGlvYWRkciArIE1NQ19ISUdIX0lOVFIpKTsKKwlwcl9pbmZvKCJcdCBNTUMgTG93IEludGVycnVwdCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCisJCU1NQ19MT1dfSU5UUiwgcmVhZGwoaW9hZGRyICsgTU1DX0xPV19JTlRSKSk7CisJcHJfaW5mbygiXHQgTU1DIEhpZ2ggSW50ZXJydXB0IE1hc2sgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCQlNTUNfSElHSF9JTlRSX01BU0ssIHJlYWRsKGlvYWRkciArIE1NQ19ISUdIX0lOVFJfTUFTSykpOworCXByX2luZm8oIlx0IE1NQyBMb3cgSW50ZXJydXB0IE1hc2sgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCQlNTUNfTE9XX0lOVFJfTUFTSywgcmVhZGwoaW9hZGRyICsgTU1DX0xPV19JTlRSX01BU0spKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgZHdtYWMxMDBfZG1hX2luaXQodW5zaWduZWQgbG9uZyBpb2FkZHIsIGludCBwYmwsIHUzMiBkbWFfdHgsCisJCQkgICB1MzIgZG1hX3J4KQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSk7CisJLyogRE1BIFNXIHJlc2V0ICovCisJdmFsdWUgfD0gRE1BX0JVU19NT0RFX1NGVF9SRVNFVDsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9CVVNfTU9ERSk7CisJZG8ge30gd2hpbGUgKChyZWFkbChpb2FkZHIgKyBETUFfQlVTX01PREUpICYgRE1BX0JVU19NT0RFX1NGVF9SRVNFVCkpOworCisJLyogRW5hYmxlIEFwcGxpY2F0aW9uIEFjY2VzcyBieSB3cml0aW5nIHRvIERNQSBDU1IwICovCisJd3JpdGVsKERNQV9CVVNfTU9ERV9ERUZBVUxUIHwgKHBibCA8PCBETUFfQlVTX01PREVfUEJMX1NISUZUKSwKKwkgICAgICAgaW9hZGRyICsgRE1BX0JVU19NT0RFKTsKKworCS8qIE1hc2sgaW50ZXJydXB0cyBieSB3cml0aW5nIHRvIENTUjcgKi8KKwl3cml0ZWwoRE1BX0lOVFJfREVGQVVMVF9NQVNLLCBpb2FkZHIgKyBETUFfSU5UUl9FTkEpOworCisJLyogVGhlIGJhc2UgYWRkcmVzcyBvZiB0aGUgUlgvVFggZGVzY3JpcHRvciBsaXN0cyBtdXN0IGJlIHdyaXR0ZW4gaW50bworCSAqIERNQSBDU1IzIGFuZCBDU1I0LCByZXNwZWN0aXZlbHkuICovCisJd3JpdGVsKGRtYV90eCwgaW9hZGRyICsgRE1BX1RYX0JBU0VfQUREUik7CisJd3JpdGVsKGRtYV9yeCwgaW9hZGRyICsgRE1BX1JDVl9CQVNFX0FERFIpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFN0b3JlIGFuZCBGb3J3YXJkIGNhcGFiaWxpdHkgaXMgbm90IHVzZWQgYXQgYWxsLi4KKyAqIFRoZSB0cmFuc21pdCB0aHJlc2hvbGQgY2FuIGJlIHByb2dyYW1tZWQgYnkKKyAqIHNldHRpbmcgdGhlIFRUQyBiaXRzIGluIHRoZSBETUEgY29udHJvbCByZWdpc3Rlci4qLworc3RhdGljIHZvaWQgZHdtYWMxMDBfZG1hX29wZXJhdGlvbl9tb2RlKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCBpbnQgdHhtb2RlLAorCQkJCSAgICAgIGludCByeG1vZGUpCit7CisJdTMyIGNzcjYgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisKKwlpZiAodHhtb2RlIDw9IDMyKQorCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ18zMjsKKwllbHNlIGlmICh0eG1vZGUgPD0gNjQpCisJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzY0OworCWVsc2UKKwkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTI4OworCisJd3JpdGVsKGNzcjYsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDBfZHVtcF9kbWFfcmVncyh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlpbnQgaTsKKworCURCRyhLRVJOX0RFQlVHICJEV01BQyAxMDAgRE1BIENTUiBcbiIpOworCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCisJCXByX2RlYnVnKCJcdCBDU1IlZCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsIGksCisJCSAgICAgICAoRE1BX0JVU19NT0RFICsgaSAqIDQpLAorCQkgICAgICAgcmVhZGwoaW9hZGRyICsgRE1BX0JVU19NT0RFICsgaSAqIDQpKTsKKwlEQkcoS0VSTl9ERUJVRyAiXHQgQ1NSMjAgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAorCSAgICBETUFfQ1VSX1RYX0JVRl9BRERSLCByZWFkbChpb2FkZHIgKyBETUFfQ1VSX1RYX0JVRl9BRERSKSk7CisJREJHKEtFUk5fREVCVUcgIlx0IENTUjIxIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKKwkgICAgRE1BX0NVUl9SWF9CVUZfQUREUiwgcmVhZGwoaW9hZGRyICsgRE1BX0NVUl9SWF9CVUZfQUREUikpOworCXJldHVybjsKK30KKworLyogRE1BIGNvbnRyb2xsZXIgaGFzIHR3byBjb3VudGVycyB0byB0cmFjayB0aGUgbnVtYmVyIG9mCisgKiB0aGUgcmVjZWl2ZSBtaXNzZWQgZnJhbWVzLiAqLworc3RhdGljIHZvaWQgZHdtYWMxMDBfZG1hX2RpYWdub3N0aWNfZnIodm9pZCAqZGF0YSwKKwkJCQkgICAgIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOworCXUzMiBjc3I4ID0gcmVhZGwoaW9hZGRyICsgRE1BX01JU1NFRF9GUkFNRV9DVFIpOworCisJaWYgKHVubGlrZWx5KGNzcjgpKSB7CisJCWlmIChjc3I4ICYgRE1BX01JU1NFRF9GUkFNRV9PVkUpIHsKKwkJCXN0YXRzLT5yeF9vdmVyX2Vycm9ycyArPSAweDgwMDsKKwkJCXgtPnJ4X292ZXJmbG93X2NudHIgKz0gMHg4MDA7CisJCX0gZWxzZSB7CisJCQl1bnNpZ25lZCBpbnQgb3ZlX2NudHI7CisJCQlvdmVfY250ciA9ICgoY3NyOCAmIERNQV9NSVNTRURfRlJBTUVfT1ZFX0NOVFIpID4+IDE3KTsKKwkJCXN0YXRzLT5yeF9vdmVyX2Vycm9ycyArPSBvdmVfY250cjsKKwkJCXgtPnJ4X292ZXJmbG93X2NudHIgKz0gb3ZlX2NudHI7CisJCX0KKworCQlpZiAoY3NyOCAmIERNQV9NSVNTRURfRlJBTUVfT1ZFX00pIHsKKwkJCXN0YXRzLT5yeF9taXNzZWRfZXJyb3JzICs9IDB4ZmZmZjsKKwkJCXgtPnJ4X21pc3NlZF9jbnRyICs9IDB4ZmZmZjsKKwkJfSBlbHNlIHsKKwkJCXVuc2lnbmVkIGludCBtaXNzX2YgPSAoY3NyOCAmIERNQV9NSVNTRURfRlJBTUVfTV9DTlRSKTsKKwkJCXN0YXRzLT5yeF9taXNzZWRfZXJyb3JzICs9IG1pc3NfZjsKKwkJCXgtPnJ4X21pc3NlZF9jbnRyICs9IG1pc3NfZjsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgZHdtYWMxMDBfZ2V0X3R4X2ZyYW1lX3N0YXR1cyh2b2lkICpkYXRhLAorCQkJCSAgICAgIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCisJCQkJICAgICAgc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOworCisJaWYgKHVubGlrZWx5KHAtPmRlczAxLnR4LmVycm9yX3N1bW1hcnkpKSB7CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC51bmRlcmZsb3dfZXJyb3IpKSB7CisJCQl4LT50eF91bmRlcmZsb3crKzsKKwkJCXN0YXRzLT50eF9maWZvX2Vycm9ycysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC5ub19jYXJyaWVyKSkgeworCQkJeC0+dHhfY2FycmllcisrOworCQkJc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnR4Lmxvc3NfY2FycmllcikpIHsKKwkJCXgtPnR4X2xvc3NjYXJyaWVyKys7CisJCQlzdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMrKzsKKwkJfQorCQlpZiAodW5saWtlbHkoKHAtPmRlczAxLnR4LmV4Y2Vzc2l2ZV9kZWZlcnJhbCkgfHwKKwkJCSAgICAgKHAtPmRlczAxLnR4LmV4Y2Vzc2l2ZV9jb2xsaXNpb25zKSB8fAorCQkJICAgICAocC0+ZGVzMDEudHgubGF0ZV9jb2xsaXNpb24pKSkKKwkJCXN0YXRzLT5jb2xsaXNpb25zICs9IHAtPmRlczAxLnR4LmNvbGxpc2lvbl9jb3VudDsKKwkJcmV0ID0gLTE7CisJfQorCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC5oZWFydGJlYXRfZmFpbCkpIHsKKwkJeC0+dHhfaGVhcnRiZWF0Kys7CisJCXN0YXRzLT50eF9oZWFydGJlYXRfZXJyb3JzKys7CisJCXJldCA9IC0xOworCX0KKwlpZiAodW5saWtlbHkocC0+ZGVzMDEudHguZGVmZXJyZWQpKQorCQl4LT50eF9kZWZlcnJlZCsrOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBkd21hYzEwMF9nZXRfdHhfbGVuKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlyZXR1cm4gcC0+ZGVzMDEudHguYnVmZmVyMV9zaXplOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIHZlcmlmaWVzIGlmIGVhY2ggaW5jb21pbmcgZnJhbWUgaGFzIHNvbWUgZXJyb3JzCisgKiBhbmQsIGlmIHJlcXVpcmVkLCB1cGRhdGVzIHRoZSBtdWx0aWNhc3Qgc3RhdGlzdGljcy4KKyAqIEluIGNhc2Ugb2Ygc3VjY2VzcywgaXQgcmV0dXJucyBjc3VtX25vbmUgYmVjYXN1ZSB0aGUgZGV2aWNlCisgKiBpcyBub3QgYWJsZSB0byBjb21wdXRlIHRoZSBjc3VtIGluIEhXLiAqLworc3RhdGljIGludCBkd21hYzEwMF9nZXRfcnhfZnJhbWVfc3RhdHVzKHZvaWQgKmRhdGEsCisJCQkJICAgICAgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKKwkJCQkgICAgICBzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJaW50IHJldCA9IGNzdW1fbm9uZTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOworCisJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4Lmxhc3RfZGVzY3JpcHRvciA9PSAwKSkgeworCQlwcl93YXJuaW5nKCJkd21hYzEwMCBFcnJvcjogT3ZlcnNpemVkIEV0aGVybmV0ICIKKwkJCSAgICJmcmFtZSBzcGFubmVkIG11bHRpcGxlIGJ1ZmZlcnNcbiIpOworCQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycysrOworCQlyZXR1cm4gZGlzY2FyZF9mcmFtZTsKKwl9CisKKwlpZiAodW5saWtlbHkocC0+ZGVzMDEucnguZXJyb3Jfc3VtbWFyeSkpIHsKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmRlc2NyaXB0b3JfZXJyb3IpKQorCQkJeC0+cnhfZGVzYysrOworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEucngucGFydGlhbF9mcmFtZV9lcnJvcikpCisJCQl4LT5yeF9wYXJ0aWFsKys7CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5ydW5fZnJhbWUpKQorCQkJeC0+cnhfcnVudCsrOworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEucnguZnJhbWVfdG9vX2xvbmcpKQorCQkJeC0+cnhfdG9vbG9uZysrOworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEucnguY29sbGlzaW9uKSkgeworCQkJeC0+cnhfY29sbGlzaW9uKys7CisJCQlzdGF0cy0+Y29sbGlzaW9ucysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5jcmNfZXJyb3IpKSB7CisJCQl4LT5yeF9jcmMrKzsKKwkJCXN0YXRzLT5yeF9jcmNfZXJyb3JzKys7CisJCX0KKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9CisJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmRyaWJibGluZykpCisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisKKwlpZiAodW5saWtlbHkocC0+ZGVzMDEucngubGVuZ3RoX2Vycm9yKSkgeworCQl4LT5yeF9sZW5ndGgrKzsKKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9CisJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4Lm1paV9lcnJvcikpIHsKKwkJeC0+cnhfbWlpKys7CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorCWlmIChwLT5kZXMwMS5yeC5tdWx0aWNhc3RfZnJhbWUpIHsKKwkJeC0+cnhfbXVsdGljYXN0Kys7CisJCXN0YXRzLT5tdWx0aWNhc3QrKzsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDBfaXJxX3N0YXR1cyh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwX3NldF91bWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCisJCQkgIHVuc2lnbmVkIGludCByZWdfbikKK3sKKwlzdG1tYWNfc2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgTUFDX0FERFJfSElHSCwgTUFDX0FERFJfTE9XKTsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDBfZ2V0X3VtYWNfYWRkcih1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgY2hhciAqYWRkciwKKwkJCSAgdW5zaWduZWQgaW50IHJlZ19uKQoreworCXN0bW1hY19nZXRfbWFjX2FkZHIoaW9hZGRyLCBhZGRyLCBNQUNfQUREUl9ISUdILCBNQUNfQUREUl9MT1cpOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMF9zZXRfZmlsdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBNQUNfQ09OVFJPTCk7CisKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCXZhbHVlIHw9IE1BQ19DT05UUk9MX1BSOworCQl2YWx1ZSAmPSB+KE1BQ19DT05UUk9MX1BNIHwgTUFDX0NPTlRST0xfSUYgfCBNQUNfQ09OVFJPTF9ITyB8CisJCQkgICBNQUNfQ09OVFJPTF9IUCk7CisJfSBlbHNlIGlmICgobmV0ZGV2X21jX2NvdW50KGRldikgPiBIQVNIX1RBQkxFX1NJWkUpCisJCSAgIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCQl2YWx1ZSB8PSBNQUNfQ09OVFJPTF9QTTsKKwkJdmFsdWUgJj0gfihNQUNfQ09OVFJPTF9QUiB8IE1BQ19DT05UUk9MX0lGIHwgTUFDX0NPTlRST0xfSE8pOworCQl3cml0ZWwoMHhmZmZmZmZmZiwgaW9hZGRyICsgTUFDX0hBU0hfSElHSCk7CisJCXdyaXRlbCgweGZmZmZmZmZmLCBpb2FkZHIgKyBNQUNfSEFTSF9MT1cpOworCX0gZWxzZSBpZiAobmV0ZGV2X21jX2VtcHR5KGRldikpIHsJLyogbm8gbXVsdGljYXN0ICovCisJCXZhbHVlICY9IH4oTUFDX0NPTlRST0xfUE0gfCBNQUNfQ09OVFJPTF9QUiB8IE1BQ19DT05UUk9MX0lGIHwKKwkJCSAgIE1BQ19DT05UUk9MX0hPIHwgTUFDX0NPTlRST0xfSFApOworCX0gZWxzZSB7CisJCXUzMiBtY19maWx0ZXJbMl07CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OworCisJCS8qIFBlcmZlY3QgZmlsdGVyIG1vZGUgZm9yIHBoeXNpY2FsIGFkZHJlc3MgYW5kIEhhc2gKKwkJICAgZmlsdGVyIGZvciBtdWx0aWNhc3QgKi8KKwkJdmFsdWUgfD0gTUFDX0NPTlRST0xfSFA7CisJCXZhbHVlICY9IH4oTUFDX0NPTlRST0xfUE0gfCBNQUNfQ09OVFJPTF9QUiB8CisJCQkgICBNQUNfQ09OVFJPTF9JRiB8IE1BQ19DT05UUk9MX0hPKTsKKworCQltZW1zZXQobWNfZmlsdGVyLCAwLCBzaXplb2YobWNfZmlsdGVyKSk7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CisJCQkvKiBUaGUgdXBwZXIgNiBiaXRzIG9mIHRoZSBjYWxjdWxhdGVkIENSQyBhcmUgdXNlZCB0bworCQkJICogaW5kZXggdGhlIGNvbnRlbnMgb2YgdGhlIGhhc2ggdGFibGUgKi8KKwkJCWludCBiaXRfbnIgPQorCQkJICAgIGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgPj4gMjY7CisJCQkvKiBUaGUgbW9zdCBzaWduaWZpY2FudCBiaXQgZGV0ZXJtaW5lcyB0aGUgcmVnaXN0ZXIgdG8KKwkJCSAqIHVzZSAoSC9MKSB3aGlsZSB0aGUgb3RoZXIgNSBiaXRzIGRldGVybWluZSB0aGUgYml0CisJCQkgKiB3aXRoaW4gdGhlIHJlZ2lzdGVyLiAqLworCQkJbWNfZmlsdGVyW2JpdF9uciA+PiA1XSB8PSAxIDw8IChiaXRfbnIgJiAzMSk7CisJCX0KKwkJd3JpdGVsKG1jX2ZpbHRlclswXSwgaW9hZGRyICsgTUFDX0hBU0hfTE9XKTsKKwkJd3JpdGVsKG1jX2ZpbHRlclsxXSwgaW9hZGRyICsgTUFDX0hBU0hfSElHSCk7CisJfQorCisJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBNQUNfQ09OVFJPTCk7CisKKwlEQkcoS0VSTl9JTkZPICIlczogQ1RSTCByZWc6IDB4JTA4eCBIYXNoIHJlZ3M6ICIKKwkgICAgIkhJIDB4JTA4eCwgTE8gMHglMDh4XG4iLAorCSAgICBfX2Z1bmNfXywgcmVhZGwoaW9hZGRyICsgTUFDX0NPTlRST0wpLAorCSAgICByZWFkbChpb2FkZHIgKyBNQUNfSEFTSF9ISUdIKSwgcmVhZGwoaW9hZGRyICsgTUFDX0hBU0hfTE9XKSk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMF9mbG93X2N0cmwodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGludCBkdXBsZXgsCisJCQkgICAgIHVuc2lnbmVkIGludCBmYywgdW5zaWduZWQgaW50IHBhdXNlX3RpbWUpCit7CisJdW5zaWduZWQgaW50IGZsb3cgPSBNQUNfRkxPV19DVFJMX0VOQUJMRTsKKworCWlmIChkdXBsZXgpCisJCWZsb3cgfD0gKHBhdXNlX3RpbWUgPDwgTUFDX0ZMT1dfQ1RSTF9QVF9TSElGVCk7CisJd3JpdGVsKGZsb3csIGlvYWRkciArIE1BQ19GTE9XX0NUUkwpOworCisJcmV0dXJuOworfQorCisvKiBObyBQTVQgbW9kdWxlIHN1cHBvcnRlZCBmb3IgdGhpcyBFdGhlcm5ldCBDb250cm9sbGVyLgorICogVGVzdGVkIG9uIFNUIHBsYXRmb3JtcyBvbmx5LgorICovCitzdGF0aWMgdm9pZCBkd21hYzEwMF9wbXQodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGxvbmcgbW9kZSkKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwX2luaXRfcnhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUsCisJCQkJaW50IGRpc2FibGVfcnhfaWMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHJpbmdfc2l6ZTsgaSsrKSB7CisJCXAtPmRlczAxLnJ4Lm93biA9IDE7CisJCXAtPmRlczAxLnJ4LmJ1ZmZlcjFfc2l6ZSA9IEJVRl9TSVpFXzJLaUIgLSAxOworCQlpZiAoaSA9PSByaW5nX3NpemUgLSAxKQorCQkJcC0+ZGVzMDEucnguZW5kX3JpbmcgPSAxOworCQlpZiAoZGlzYWJsZV9yeF9pYykKKwkJCXAtPmRlczAxLnJ4LmRpc2FibGVfaWMgPSAxOworCQlwKys7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDBfaW5pdF90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgaW50IHJpbmdfc2l6ZSkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgcmluZ19zaXplOyBpKyspIHsKKwkJcC0+ZGVzMDEudHgub3duID0gMDsKKwkJaWYgKGkgPT0gcmluZ19zaXplIC0gMSkKKwkJCXAtPmRlczAxLnR4LmVuZF9yaW5nID0gMTsKKwkJcCsrOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgZHdtYWMxMDBfZ2V0X3R4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlyZXR1cm4gcC0+ZGVzMDEudHgub3duOworfQorCitzdGF0aWMgaW50IGR3bWFjMTAwX2dldF9yeF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLnJ4Lm93bjsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDBfc2V0X3R4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlwLT5kZXMwMS50eC5vd24gPSAxOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMF9zZXRfcnhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXAtPmRlczAxLnJ4Lm93biA9IDE7Cit9CisKK3N0YXRpYyBpbnQgZHdtYWMxMDBfZ2V0X3R4X2xzKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlyZXR1cm4gcC0+ZGVzMDEudHgubGFzdF9zZWdtZW50OworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMF9yZWxlYXNlX3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwKQoreworCWludCB0ZXIgPSBwLT5kZXMwMS50eC5lbmRfcmluZzsKKworCS8qIGNsZWFuIGZpZWxkIHVzZWQgd2l0aGluIHRoZSB4bWl0ICovCisJcC0+ZGVzMDEudHguZmlyc3Rfc2VnbWVudCA9IDA7CisJcC0+ZGVzMDEudHgubGFzdF9zZWdtZW50ID0gMDsKKwlwLT5kZXMwMS50eC5idWZmZXIxX3NpemUgPSAwOworCisJLyogY2xlYW4gc3RhdHVzIHJlcG9ydGVkICovCisJcC0+ZGVzMDEudHguZXJyb3Jfc3VtbWFyeSA9IDA7CisJcC0+ZGVzMDEudHgudW5kZXJmbG93X2Vycm9yID0gMDsKKwlwLT5kZXMwMS50eC5ub19jYXJyaWVyID0gMDsKKwlwLT5kZXMwMS50eC5sb3NzX2NhcnJpZXIgPSAwOworCXAtPmRlczAxLnR4LmV4Y2Vzc2l2ZV9kZWZlcnJhbCA9IDA7CisJcC0+ZGVzMDEudHguZXhjZXNzaXZlX2NvbGxpc2lvbnMgPSAwOworCXAtPmRlczAxLnR4LmxhdGVfY29sbGlzaW9uID0gMDsKKwlwLT5kZXMwMS50eC5oZWFydGJlYXRfZmFpbCA9IDA7CisJcC0+ZGVzMDEudHguZGVmZXJyZWQgPSAwOworCisJLyogc2V0IHRlcm1pbmF0aW9uIGZpZWxkICovCisJcC0+ZGVzMDEudHguZW5kX3JpbmcgPSB0ZXI7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwX3ByZXBhcmVfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIGludCBpc19mcywgaW50IGxlbiwKKwkJCQkgICBpbnQgY3N1bV9mbGFnKQoreworCXAtPmRlczAxLnR4LmZpcnN0X3NlZ21lbnQgPSBpc19mczsKKwlwLT5kZXMwMS50eC5idWZmZXIxX3NpemUgPSBsZW47Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwX2NsZWFyX3R4X2ljKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlwLT5kZXMwMS50eC5pbnRlcnJ1cHQgPSAwOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMF9jbG9zZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlwLT5kZXMwMS50eC5sYXN0X3NlZ21lbnQgPSAxOworCXAtPmRlczAxLnR4LmludGVycnVwdCA9IDE7Cit9CisKK3N0YXRpYyBpbnQgZHdtYWMxMDBfZ2V0X3J4X2ZyYW1lX2xlbihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLnJ4LmZyYW1lX2xlbmd0aDsKK30KKworc3RydWN0IHN0bW1hY19vcHMgZHdtYWMxMDBfb3BzID0geworCS5jb3JlX2luaXQgPSBkd21hYzEwMF9jb3JlX2luaXQsCisJLmR1bXBfcmVncyA9IGR3bWFjMTAwX2R1bXBfbWFjX3JlZ3MsCisJLmhvc3RfaXJxX3N0YXR1cyA9IGR3bWFjMTAwX2lycV9zdGF0dXMsCisJLnNldF9maWx0ZXIgPSBkd21hYzEwMF9zZXRfZmlsdGVyLAorCS5mbG93X2N0cmwgPSBkd21hYzEwMF9mbG93X2N0cmwsCisJLnBtdCA9IGR3bWFjMTAwX3BtdCwKKwkuc2V0X3VtYWNfYWRkciA9IGR3bWFjMTAwX3NldF91bWFjX2FkZHIsCisJLmdldF91bWFjX2FkZHIgPSBkd21hYzEwMF9nZXRfdW1hY19hZGRyLAorfTsKKworc3RydWN0IHN0bW1hY19kbWFfb3BzIGR3bWFjMTAwX2RtYV9vcHMgPSB7CisJLmluaXQgPSBkd21hYzEwMF9kbWFfaW5pdCwKKwkuZHVtcF9yZWdzID0gZHdtYWMxMDBfZHVtcF9kbWFfcmVncywKKwkuZG1hX21vZGUgPSBkd21hYzEwMF9kbWFfb3BlcmF0aW9uX21vZGUsCisJLmRtYV9kaWFnbm9zdGljX2ZyID0gZHdtYWMxMDBfZG1hX2RpYWdub3N0aWNfZnIsCisJLmVuYWJsZV9kbWFfdHJhbnNtaXNzaW9uID0gZHdtYWNfZW5hYmxlX2RtYV90cmFuc21pc3Npb24sCisJLmVuYWJsZV9kbWFfaXJxID0gZHdtYWNfZW5hYmxlX2RtYV9pcnEsCisJLmRpc2FibGVfZG1hX2lycSA9IGR3bWFjX2Rpc2FibGVfZG1hX2lycSwKKwkuc3RhcnRfdHggPSBkd21hY19kbWFfc3RhcnRfdHgsCisJLnN0b3BfdHggPSBkd21hY19kbWFfc3RvcF90eCwKKwkuc3RhcnRfcnggPSBkd21hY19kbWFfc3RhcnRfcngsCisJLnN0b3BfcnggPSBkd21hY19kbWFfc3RvcF9yeCwKKwkuZG1hX2ludGVycnVwdCA9IGR3bWFjX2RtYV9pbnRlcnJ1cHQsCit9OworCitzdHJ1Y3Qgc3RtbWFjX2Rlc2Nfb3BzIGR3bWFjMTAwX2Rlc2Nfb3BzID0geworCS50eF9zdGF0dXMgPSBkd21hYzEwMF9nZXRfdHhfZnJhbWVfc3RhdHVzLAorCS5yeF9zdGF0dXMgPSBkd21hYzEwMF9nZXRfcnhfZnJhbWVfc3RhdHVzLAorCS5nZXRfdHhfbGVuID0gZHdtYWMxMDBfZ2V0X3R4X2xlbiwKKwkuaW5pdF9yeF9kZXNjID0gZHdtYWMxMDBfaW5pdF9yeF9kZXNjLAorCS5pbml0X3R4X2Rlc2MgPSBkd21hYzEwMF9pbml0X3R4X2Rlc2MsCisJLmdldF90eF9vd25lciA9IGR3bWFjMTAwX2dldF90eF9vd25lciwKKwkuZ2V0X3J4X293bmVyID0gZHdtYWMxMDBfZ2V0X3J4X293bmVyLAorCS5yZWxlYXNlX3R4X2Rlc2MgPSBkd21hYzEwMF9yZWxlYXNlX3R4X2Rlc2MsCisJLnByZXBhcmVfdHhfZGVzYyA9IGR3bWFjMTAwX3ByZXBhcmVfdHhfZGVzYywKKwkuY2xlYXJfdHhfaWMgPSBkd21hYzEwMF9jbGVhcl90eF9pYywKKwkuY2xvc2VfdHhfZGVzYyA9IGR3bWFjMTAwX2Nsb3NlX3R4X2Rlc2MsCisJLmdldF90eF9scyA9IGR3bWFjMTAwX2dldF90eF9scywKKwkuc2V0X3R4X293bmVyID0gZHdtYWMxMDBfc2V0X3R4X293bmVyLAorCS5zZXRfcnhfb3duZXIgPSBkd21hYzEwMF9zZXRfcnhfb3duZXIsCisJLmdldF9yeF9mcmFtZV9sZW4gPSBkd21hYzEwMF9nZXRfcnhfZnJhbWVfbGVuLAorfTsKKworc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqZHdtYWMxMDBfc2V0dXAodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjOworCisJbWFjID0ga3phbGxvYyhzaXplb2YoY29uc3Qgc3RydWN0IG1hY19kZXZpY2VfaW5mbyksIEdGUF9LRVJORUwpOworCisJcHJfaW5mbygiXHREV01BQzEwMFxuIik7CisKKwltYWMtPm1hYyA9ICZkd21hYzEwMF9vcHM7CisJbWFjLT5kZXNjID0gJmR3bWFjMTAwX2Rlc2Nfb3BzOworCW1hYy0+ZG1hID0gJmR3bWFjMTAwX2RtYV9vcHM7CisKKwltYWMtPnBtdCA9IFBNVF9OT1RfU1VQUE9SVEVEOworCW1hYy0+bGluay5wb3J0ID0gTUFDX0NPTlRST0xfUFM7CisJbWFjLT5saW5rLmR1cGxleCA9IE1BQ19DT05UUk9MX0Y7CisJbWFjLT5saW5rLnNwZWVkID0gMDsKKwltYWMtPm1paS5hZGRyID0gTUFDX01JSV9BRERSOworCW1hYy0+bWlpLmRhdGEgPSBNQUNfTUlJX0RBVEE7CisKKwlyZXR1cm4gbWFjOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL21hYzEwMC5oIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGRyaXZlcnMvbmV0L3N0bW1hYy9tYWMxMDAuaApyZW5hbWUgdG8gZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hYzEwMDAuaCBiL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hYzEwMDAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmRjYTBlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMC5oCkBAIC0wLDAgKzEsMjIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgImNvbW1vbi5oIgorCisjZGVmaW5lIEdNQUNfQ09OVFJPTAkJMHgwMDAwMDAwMAkvKiBDb25maWd1cmF0aW9uICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSCTB4MDAwMDAwMDQJLyogRnJhbWUgRmlsdGVyICovCisjZGVmaW5lIEdNQUNfSEFTSF9ISUdICQkweDAwMDAwMDA4CS8qIE11bHRpY2FzdCBIYXNoIFRhYmxlIEhpZ2ggKi8KKyNkZWZpbmUgR01BQ19IQVNIX0xPVwkJMHgwMDAwMDAwYwkvKiBNdWx0aWNhc3QgSGFzaCBUYWJsZSBMb3cgKi8KKyNkZWZpbmUgR01BQ19NSUlfQUREUgkJMHgwMDAwMDAxMAkvKiBNSUkgQWRkcmVzcyAqLworI2RlZmluZSBHTUFDX01JSV9EQVRBCQkweDAwMDAwMDE0CS8qIE1JSSBEYXRhICovCisjZGVmaW5lIEdNQUNfRkxPV19DVFJMCQkweDAwMDAwMDE4CS8qIEZsb3cgQ29udHJvbCAqLworI2RlZmluZSBHTUFDX1ZMQU5fVEFHCQkweDAwMDAwMDFjCS8qIFZMQU4gVGFnICovCisjZGVmaW5lIEdNQUNfVkVSU0lPTgkJMHgwMDAwMDAyMAkvKiBHTUFDIENPUkUgVmVyc2lvbiAqLworI2RlZmluZSBHTUFDX1dBS0VVUF9GSUxURVIJMHgwMDAwMDAyOAkvKiBXYWtlLXVwIEZyYW1lIEZpbHRlciAqLworCisjZGVmaW5lIEdNQUNfSU5UX1NUQVRVUwkJMHgwMDAwMDAzOAkvKiBpbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCitlbnVtIGR3bWFjMTAwMF9pcnFfc3RhdHVzIHsKKwl0aW1lX3N0YW1wX2lycSA9IDB4MDIwMCwKKwltbWNfcnhfY3N1bV9vZmZsb2FkX2lycSA9IDB4MDA4MCwKKwltbWNfdHhfaXJxID0gMHgwMDQwLAorCW1tY19yeF9pcnEgPSAweDAwMjAsCisJbW1jX2lycSA9IDB4MDAxMCwKKwlwbXRfaXJxID0gMHgwMDA4LAorCXBjc19hbmVfaXJxID0gMHgwMDA0LAorCXBjc19saW5rX2lycSA9IDB4MDAwMiwKKwlyZ21paV9pcnEgPSAweDAwMDEsCit9OworI2RlZmluZSBHTUFDX0lOVF9NQVNLCQkweDAwMDAwMDNjCS8qIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyICovCisKKy8qIFBNVCBDb250cm9sIGFuZCBTdGF0dXMgKi8KKyNkZWZpbmUgR01BQ19QTVQJCTB4MDAwMDAwMmMKK2VudW0gcG93ZXJfZXZlbnQgeworCXBvaW50ZXJfcmVzZXQgPSAweDgwMDAwMDAwLAorCWdsb2JhbF91bmljYXN0ID0gMHgwMDAwMDIwMCwKKwl3YWtlX3VwX3J4X2ZyYW1lID0gMHgwMDAwMDA0MCwKKwltYWdpY19mcmFtZSA9IDB4MDAwMDAwMjAsCisJd2FrZV91cF9mcmFtZV9lbiA9IDB4MDAwMDAwMDQsCisJbWFnaWNfcGt0X2VuID0gMHgwMDAwMDAwMiwKKwlwb3dlcl9kb3duID0gMHgwMDAwMDAwMSwKK307CisKKy8qIEdNQUMgSFcgQUREUiByZWdzICovCisjZGVmaW5lIEdNQUNfQUREUl9ISUdIKHJlZykJCSgweDAwMDAwMDQwKyhyZWcgKiA4KSkKKyNkZWZpbmUgR01BQ19BRERSX0xPVyhyZWcpCQkoMHgwMDAwMDA0NCsocmVnICogOCkpCisjZGVmaW5lIEdNQUNfTUFYX1VOSUNBU1RfQUREUkVTU0VTCTE2CisKKyNkZWZpbmUgR01BQ19BTl9DVFJMCTB4MDAwMDAwYzAJLyogQU4gY29udHJvbCAqLworI2RlZmluZSBHTUFDX0FOX1NUQVRVUwkweDAwMDAwMGM0CS8qIEFOIHN0YXR1cyAqLworI2RlZmluZSBHTUFDX0FORV9BRFYJMHgwMDAwMDBjOAkvKiBBdXRvLU5lZy4gQWR2ZXJ0aXNlbWVudCAqLworI2RlZmluZSBHTUFDX0FORV9MSU5LCTB4MDAwMDAwY2MJLyogQXV0by1OZWcuIGxpbmsgcGFydGVuZXIgYWJpbGl0eSAqLworI2RlZmluZSBHTUFDX0FORV9FWFAJMHgwMDAwMDBkMAkvKiBBTkUgZXhwYW5zaW9uICovCisjZGVmaW5lIEdNQUNfVEJJCTB4MDAwMDAwZDQJLyogVEJJIGV4dGVuZCBzdGF0dXMgKi8KKyNkZWZpbmUgR01BQ19HTUlJX1NUQVRVUyAweDAwMDAwMGQ4CS8qIFMvUi1HTUlJIHN0YXR1cyAqLworCisvKiBHTUFDIENvbmZpZ3VyYXRpb24gZGVmaW5lcyAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfVEMJMHgwMTAwMDAwMAkvKiBUcmFuc21pdCBDb25mLiBpbiBSR01JSS9TR01JSSAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfV0QJMHgwMDgwMDAwMAkvKiBEaXNhYmxlIFdhdGNoZG9nIG9uIHJlY2VpdmUgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0pECTB4MDA0MDAwMDAJLyogSmFiYmVyIGRpc2FibGUgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0JFCTB4MDAyMDAwMDAJLyogRnJhbWUgQnVyc3QgRW5hYmxlICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9KRQkweDAwMTAwMDAwCS8qIEp1bWJvIGZyYW1lICovCitlbnVtIGludGVyX2ZyYW1lX2dhcCB7CisJR01BQ19DT05UUk9MX0lGR184OCA9IDB4MDAwNDAwMDAsCisJR01BQ19DT05UUk9MX0lGR184MCA9IDB4MDAwMjAwMDAsCisJR01BQ19DT05UUk9MX0lGR180MCA9IDB4MDAwZTAwMDAsCit9OworI2RlZmluZSBHTUFDX0NPTlRST0xfRENSUwkweDAwMDEwMDAwIC8qIERpc2FibGUgY2FycmllciBzZW5zZSBkdXJpbmcgdHggKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX1BTCQkweDAwMDA4MDAwIC8qIFBvcnQgU2VsZWN0IDA6R01JIDE6TUlJICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9GRVMJMHgwMDAwNDAwMCAvKiBTcGVlZCAwOjEwIDE6MTAwICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9ETwkJMHgwMDAwMjAwMCAvKiBEaXNhYmxlIFJ4IE93biAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfTE0JCTB4MDAwMDEwMDAgLyogTG9vcC1iYWNrIG1vZGUgKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0RNCQkweDAwMDAwODAwIC8qIER1cGxleCBNb2RlICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9JUEMJMHgwMDAwMDQwMCAvKiBDaGVja3N1bSBPZmZsb2FkICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9EUgkJMHgwMDAwMDIwMCAvKiBEaXNhYmxlIFJldHJ5ICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9MVUQJMHgwMDAwMDEwMCAvKiBMaW5rIHVwL2Rvd24gKi8KKyNkZWZpbmUgR01BQ19DT05UUk9MX0FDUwkweDAwMDAwMDgwIC8qIEF1dG9tYXRpYyBQYWQgU3RyaXBwaW5nICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9EQwkJMHgwMDAwMDAxMCAvKiBEZWZlcnJhbCBDaGVjayAqLworI2RlZmluZSBHTUFDX0NPTlRST0xfVEUJCTB4MDAwMDAwMDggLyogVHJhbnNtaXR0ZXIgRW5hYmxlICovCisjZGVmaW5lIEdNQUNfQ09OVFJPTF9SRQkJMHgwMDAwMDAwNCAvKiBSZWNlaXZlciBFbmFibGUgKi8KKworI2RlZmluZSBHTUFDX0NPUkVfSU5JVCAoR01BQ19DT05UUk9MX0pEIHwgR01BQ19DT05UUk9MX1BTIHwgR01BQ19DT05UUk9MX0FDUyB8IFwKKwkJCUdNQUNfQ09OVFJPTF9JUEMgfCBHTUFDX0NPTlRST0xfSkUgfCBHTUFDX0NPTlRST0xfQkUpCisKKy8qIEdNQUMgRnJhbWUgRmlsdGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfUFIJMHgwMDAwMDAwMQkvKiBQcm9taXNjdW91cyBNb2RlICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX0hVQwkweDAwMDAwMDAyCS8qIEhhc2ggVW5pY2FzdCAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9ITUMJMHgwMDAwMDAwNAkvKiBIYXNoIE11bHRpY2FzdCAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9EQUlGCTB4MDAwMDAwMDgJLyogREEgSW52ZXJzZSBGaWx0ZXJpbmcgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfUE0JMHgwMDAwMDAxMAkvKiBQYXNzIGFsbCBtdWx0aWNhc3QgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfREJGCTB4MDAwMDAwMjAJLyogRGlzYWJsZSBCcm9hZGNhc3QgZnJhbWVzICovCisjZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX1NBSUYJMHgwMDAwMDEwMAkvKiBJbnZlcnNlIEZpbHRlcmluZyAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9TQUYJMHgwMDAwMDIwMAkvKiBTb3VyY2UgQWRkcmVzcyBGaWx0ZXIgKi8KKyNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfSFBGCTB4MDAwMDA0MDAJLyogSGFzaCBvciBwZXJmZWN0IEZpbHRlciAqLworI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9SQQkweDgwMDAwMDAwCS8qIFJlY2VpdmUgYWxsIG1vZGUgKi8KKy8qIEdNSUkgQUREUiAgZGVmaW5lcyAqLworI2RlZmluZSBHTUFDX01JSV9BRERSX1dSSVRFCTB4MDAwMDAwMDIJLyogTUlJIFdyaXRlICovCisjZGVmaW5lIEdNQUNfTUlJX0FERFJfQlVTWQkweDAwMDAwMDAxCS8qIE1JSSBCdXN5ICovCisvKiBHTUFDIEZMT1cgQ1RSTCBkZWZpbmVzICovCisjZGVmaW5lIEdNQUNfRkxPV19DVFJMX1BUX01BU0sJMHhmZmZmMDAwMAkvKiBQYXVzZSBUaW1lIE1hc2sgKi8KKyNkZWZpbmUgR01BQ19GTE9XX0NUUkxfUFRfU0hJRlQJMTYKKyNkZWZpbmUgR01BQ19GTE9XX0NUUkxfUkZFCTB4MDAwMDAwMDQJLyogUnggRmxvdyBDb250cm9sIEVuYWJsZSAqLworI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTF9URkUJMHgwMDAwMDAwMgkvKiBUeCBGbG93IENvbnRyb2wgRW5hYmxlICovCisjZGVmaW5lIEdNQUNfRkxPV19DVFJMX0ZDQl9CUEEJMHgwMDAwMDAwMQkvKiBGbG93IENvbnRyb2wgQnVzeSAuLi4gKi8KKworLyotLS0gRE1BIEJMT0NLIGRlZmluZXMgLS0tKi8KKy8qIERNQSBCdXMgTW9kZSByZWdpc3RlciBkZWZpbmVzICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9TRlRfUkVTRVQJMHgwMDAwMDAwMQkvKiBTb2Z0d2FyZSBSZXNldCAqLworI2RlZmluZSBETUFfQlVTX01PREVfREEJCTB4MDAwMDAwMDIJLyogQXJiaXRyYXRpb24gc2NoZW1lICovCisjZGVmaW5lIERNQV9CVVNfTU9ERV9EU0xfTUFTSwkweDAwMDAwMDdjCS8qIERlc2NyaXB0b3IgU2tpcCBMZW5ndGggKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX0RTTF9TSElGVAkyCS8qICAgKGluIERXT1JEUykgICAgICAqLworLyogUHJvZ3JhbW1hYmxlIGJ1cnN0IGxlbmd0aCAocGFzc2VkIHRob3J1Z2ggcGxhdGZvcm0pKi8KKyNkZWZpbmUgRE1BX0JVU19NT0RFX1BCTF9NQVNLCTB4MDAwMDNmMDAJLyogUHJvZ3JhbW1hYmxlIEJ1cnN0IExlbiAqLworI2RlZmluZSBETUFfQlVTX01PREVfUEJMX1NISUZUCTgKKworZW51bSByeF90eF9wcmlvcml0eV9yYXRpbyB7CisJZG91YmxlX3JhdGlvID0gMHgwMDAwNDAwMCwJLyoyOjEgKi8KKwl0cmlwbGVfcmF0aW8gPSAweDAwMDA4MDAwLAkvKjM6MSAqLworCXF1YWRydXBsZV9yYXRpbyA9IDB4MDAwMGMwMDAsCS8qNDoxICovCit9OworCisjZGVmaW5lIERNQV9CVVNfTU9ERV9GQgkJMHgwMDAxMDAwMAkvKiBGaXhlZCBidXJzdCAqLworI2RlZmluZSBETUFfQlVTX01PREVfUlBCTF9NQVNLCTB4MDAzZTAwMDAJLyogUngtUHJvZ3JhbW1hYmxlIEJ1cnN0IExlbiAqLworI2RlZmluZSBETUFfQlVTX01PREVfUlBCTF9TSElGVAkxNworI2RlZmluZSBETUFfQlVTX01PREVfVVNQCTB4MDA4MDAwMDAKKyNkZWZpbmUgRE1BX0JVU19NT0RFXzRQQkwJMHgwMTAwMDAwMAorI2RlZmluZSBETUFfQlVTX01PREVfQUFMCTB4MDIwMDAwMDAKKworLyogRE1BIENSUyBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgTWFwcGluZyAqLworI2RlZmluZSBETUFfSE9TVF9UWF9ERVNDCSAgMHgwMDAwMTA0OAkvKiBDdXJyZW50IEhvc3QgVHggZGVzY3JpcHRvciAqLworI2RlZmluZSBETUFfSE9TVF9SWF9ERVNDCSAgMHgwMDAwMTA0YwkvKiBDdXJyZW50IEhvc3QgUnggZGVzY3JpcHRvciAqLworLyogIERNQSBCdXMgTW9kZSByZWdpc3RlciBkZWZpbmVzICovCisjZGVmaW5lIERNQV9CVVNfUFJfUkFUSU9fTUFTSwkgIDB4MDAwMGMwMDAJLyogUngvVHggcHJpb3JpdHkgcmF0aW8gKi8KKyNkZWZpbmUgRE1BX0JVU19QUl9SQVRJT19TSElGVAkgIDE0CisjZGVmaW5lIERNQV9CVVNfRkIJICAJICAweDAwMDEwMDAwCS8qIEZpeGVkIEJ1cnN0ICovCisKKy8qIERNQSBvcGVyYXRpb24gbW9kZSBkZWZpbmVzIChzdGFydC9zdG9wIHR4L3J4IGFyZSBwbGFjZWQgaW4gY29tbW9uIGhlYWRlcikqLworI2RlZmluZSBETUFfQ09OVFJPTF9EVAkJMHgwNDAwMDAwMCAvKiBEaXNhYmxlIERyb3AgVENQL0lQIGNzdW0gZXJyb3IgKi8KKyNkZWZpbmUgRE1BX0NPTlRST0xfUlNGCQkweDAyMDAwMDAwIC8qIFJlY2VpdmUgU3RvcmUgYW5kIEZvcndhcmQgKi8KKyNkZWZpbmUgRE1BX0NPTlRST0xfREZGCQkweDAxMDAwMDAwIC8qIERpc2FhYmxlIGZsdXNoaW5nICovCisvKiBUaHJlc2hvbGQgZm9yIEFjdGl2YXRpbmcgdGhlIEZDICovCitlbnVtIHJmYSB7CisJYWN0X2Z1bGxfbWludXNfMSA9IDB4MDA4MDAwMDAsCisJYWN0X2Z1bGxfbWludXNfMiA9IDB4MDA4MDAyMDAsCisJYWN0X2Z1bGxfbWludXNfMyA9IDB4MDA4MDA0MDAsCisJYWN0X2Z1bGxfbWludXNfNCA9IDB4MDA4MDA2MDAsCit9OworLyogVGhyZXNob2xkIGZvciBEZWFjdGl2YXRpbmcgdGhlIEZDICovCitlbnVtIHJmZCB7CisJZGVhY19mdWxsX21pbnVzXzEgPSAweDAwNDAwMDAwLAorCWRlYWNfZnVsbF9taW51c18yID0gMHgwMDQwMDgwMCwKKwlkZWFjX2Z1bGxfbWludXNfMyA9IDB4MDA0MDEwMDAsCisJZGVhY19mdWxsX21pbnVzXzQgPSAweDAwNDAxODAwLAorfTsKKyNkZWZpbmUgRE1BX0NPTlRST0xfVFNGCQkweDAwMjAwMDAwIC8qIFRyYW5zbWl0ICBTdG9yZSBhbmQgRm9yd2FyZCAqLworI2RlZmluZSBETUFfQ09OVFJPTF9GVEYJCTB4MDAxMDAwMDAgLyogRmx1c2ggdHJhbnNtaXQgRklGTyAqLworCitlbnVtIHR0Y19jb250cm9sIHsKKwlETUFfQ09OVFJPTF9UVENfNjQgPSAweDAwMDAwMDAwLAorCURNQV9DT05UUk9MX1RUQ18xMjggPSAweDAwMDA0MDAwLAorCURNQV9DT05UUk9MX1RUQ18xOTIgPSAweDAwMDA4MDAwLAorCURNQV9DT05UUk9MX1RUQ18yNTYgPSAweDAwMDBjMDAwLAorCURNQV9DT05UUk9MX1RUQ180MCA9IDB4MDAwMTAwMDAsCisJRE1BX0NPTlRST0xfVFRDXzMyID0gMHgwMDAxNDAwMCwKKwlETUFfQ09OVFJPTF9UVENfMjQgPSAweDAwMDE4MDAwLAorCURNQV9DT05UUk9MX1RUQ18xNiA9IDB4MDAwMWMwMDAsCit9OworI2RlZmluZSBETUFfQ09OVFJPTF9UQ19UWF9NQVNLCTB4ZmZmZTNmZmYKKworI2RlZmluZSBETUFfQ09OVFJPTF9FRkMJCTB4MDAwMDAxMDAKKyNkZWZpbmUgRE1BX0NPTlRST0xfRkVGCQkweDAwMDAwMDgwCisjZGVmaW5lIERNQV9DT05UUk9MX0ZVRgkJMHgwMDAwMDA0MAorCitlbnVtIHJ0Y19jb250cm9sIHsKKwlETUFfQ09OVFJPTF9SVENfNjQgPSAweDAwMDAwMDAwLAorCURNQV9DT05UUk9MX1JUQ18zMiA9IDB4MDAwMDAwMDgsCisJRE1BX0NPTlRST0xfUlRDXzk2ID0gMHgwMDAwMDAxMCwKKwlETUFfQ09OVFJPTF9SVENfMTI4ID0gMHgwMDAwMDAxOCwKK307CisjZGVmaW5lIERNQV9DT05UUk9MX1RDX1JYX01BU0sJMHhmZmZmZmZlNworCisjZGVmaW5lIERNQV9DT05UUk9MX09TRgkweDAwMDAwMDA0CS8qIE9wZXJhdGUgb24gc2Vjb25kIGZyYW1lICovCisKKy8qIE1NQyByZWdpc3RlcnMgb2Zmc2V0ICovCisjZGVmaW5lIEdNQUNfTU1DX0NUUkwgICAgICAweDEwMAorI2RlZmluZSBHTUFDX01NQ19SWF9JTlRSICAgMHgxMDQKKyNkZWZpbmUgR01BQ19NTUNfVFhfSU5UUiAgIDB4MTA4CisjZGVmaW5lIEdNQUNfTU1DX1JYX0NTVU1fT0ZGTE9BRCAgIDB4MjA4CisKKyN1bmRlZiBEV01BQzEwMDBfREVCVUcKKy8qICNkZWZpbmUgRFdNQUMxMDAwX19ERUJVRyAqLworI3VuZGVmIEZSQU1FX0ZJTFRFUl9ERUJVRworLyogI2RlZmluZSBGUkFNRV9GSUxURVJfREVCVUcgKi8KKyNpZmRlZiBEV01BQzEwMDBfX0RFQlVHCisjZGVmaW5lIERCRyhmbXQsIGFyZ3MuLi4pICBwcmludGsoZm10LCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCitleHRlcm4gc3RydWN0IHN0bW1hY19kbWFfb3BzIGR3bWFjMTAwMF9kbWFfb3BzOworZXh0ZXJuIHN0cnVjdCBzdG1tYWNfZGVzY19vcHMgZHdtYWMxMDAwX2Rlc2Nfb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWMxMDAwX2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjUzOGFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMF9jb3JlLmMKQEAgLTAsMCArMSwyNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIFRoaXMgaXMgdGhlIGRyaXZlciBmb3IgdGhlIEdNQUMgb24tY2hpcCBFdGhlcm5ldCBjb250cm9sbGVyIGZvciBTVCBTb0NzLgorICBEV0MgRXRoZXIgTUFDIDEwLzEwMC8xMDAwIFVuaXZlcnNhbCB2ZXJzaW9uIDMuNDFhICBoYXMgYmVlbiB1c2VkIGZvcgorICBkZXZlbG9waW5nIHRoaXMgY29kZS4KKworICBUaGlzIG9ubHkgaW1wbGVtZW50cyB0aGUgbWFjIGNvcmUgZnVuY3Rpb25zIGZvciB0aGlzIGNoaXAuCisKKyAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgImR3bWFjMTAwMC5oIgorCitzdGF0aWMgdm9pZCBkd21hYzEwMDBfY29yZV9pbml0KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIEdNQUNfQ09OVFJPTCk7CisJdmFsdWUgfD0gR01BQ19DT1JFX0lOSVQ7CisJd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBHTUFDX0NPTlRST0wpOworCisJLyogU1RCdXMgQnJpZGdlIENvbmZpZ3VyYXRpb24gKi8KKwkvKndyaXRlbCgweGM1NjA4LCBpb2FkZHIgKyAweDAwMDA3MDAwKTsqLworCisJLyogRnJlZXplIE1NQyBjb3VudGVycyAqLworCXdyaXRlbCgweDgsIGlvYWRkciArIEdNQUNfTU1DX0NUUkwpOworCS8qIE1hc2sgR01BQyBpbnRlcnJ1cHRzICovCisJd3JpdGVsKDB4MjA3LCBpb2FkZHIgKyBHTUFDX0lOVF9NQVNLKTsKKworI2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VECisJLyogVGFnIGRldGVjdGlvbiB3aXRob3V0IGZpbHRlcmluZyAqLworCXdyaXRlbCgweDAsIGlvYWRkciArIEdNQUNfVkxBTl9UQUcpOworI2VuZGlmCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMDBfZHVtcF9yZWdzKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCWludCBpOworCXByX2luZm8oIlx0RFdNQUMxMDAwIHJlZ3MgKGJhc2UgYWRkciA9IDB4JTh4KVxuIiwgKHVuc2lnbmVkIGludClpb2FkZHIpOworCisJZm9yIChpID0gMDsgaSA8IDU1OyBpKyspIHsKKwkJaW50IG9mZnNldCA9IGkgKiA0OworCQlwcl9pbmZvKCJcdFJlZyBOby4gJWQgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBpLAorCQkJb2Zmc2V0LCByZWFkbChpb2FkZHIgKyBvZmZzZXQpKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMDBfc2V0X3VtYWNfYWRkcih1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgY2hhciAqYWRkciwKKwkJCQl1bnNpZ25lZCBpbnQgcmVnX24pCit7CisJc3RtbWFjX3NldF9tYWNfYWRkcihpb2FkZHIsIGFkZHIsIEdNQUNfQUREUl9ISUdIKHJlZ19uKSwKKwkJCQlHTUFDX0FERFJfTE9XKHJlZ19uKSk7Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwMF9nZXRfdW1hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAorCQkJCXVuc2lnbmVkIGludCByZWdfbikKK3sKKwlzdG1tYWNfZ2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgR01BQ19BRERSX0hJR0gocmVnX24pLAorCQkJCUdNQUNfQUREUl9MT1cocmVnX24pKTsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX3NldF9maWx0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOworCXVuc2lnbmVkIGludCB2YWx1ZSA9IDA7CisKKwlEQkcoS0VSTl9JTkZPICIlczogIyBtY2FzdHMgJWQsICMgdW5pY2FzdCAlZFxuIiwKKwkgICAgX19mdW5jX18sIG5ldGRldl9tY19jb3VudChkZXYpLCBuZXRkZXZfdWNfY291bnQoZGV2KSk7CisKKwlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQorCQl2YWx1ZSA9IEdNQUNfRlJBTUVfRklMVEVSX1BSOworCWVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IEhBU0hfVEFCTEVfU0laRSkKKwkJICAgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisJCXZhbHVlID0gR01BQ19GUkFNRV9GSUxURVJfUE07CS8qIHBhc3MgYWxsIG11bHRpICovCisJCXdyaXRlbCgweGZmZmZmZmZmLCBpb2FkZHIgKyBHTUFDX0hBU0hfSElHSCk7CisJCXdyaXRlbCgweGZmZmZmZmZmLCBpb2FkZHIgKyBHTUFDX0hBU0hfTE9XKTsKKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgeworCQl1MzIgbWNfZmlsdGVyWzJdOworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKKworCQkvKiBIYXNoIGZpbHRlciBmb3IgbXVsdGljYXN0ICovCisJCXZhbHVlID0gR01BQ19GUkFNRV9GSUxURVJfSE1DOworCisJCW1lbXNldChtY19maWx0ZXIsIDAsIHNpemVvZihtY19maWx0ZXIpKTsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKKwkJCS8qIFRoZSB1cHBlciA2IGJpdHMgb2YgdGhlIGNhbGN1bGF0ZWQgQ1JDIGFyZSB1c2VkIHRvCisJCQkgICBpbmRleCB0aGUgY29udGVucyBvZiB0aGUgaGFzaCB0YWJsZSAqLworCQkJaW50IGJpdF9uciA9CisJCQkgICAgYml0cmV2MzIofmNyYzMyX2xlKH4wLCBtY2xpc3QtPmRtaV9hZGRyLCA2KSkgPj4gMjY7CisJCQkvKiBUaGUgbW9zdCBzaWduaWZpY2FudCBiaXQgZGV0ZXJtaW5lcyB0aGUgcmVnaXN0ZXIgdG8KKwkJCSAqIHVzZSAoSC9MKSB3aGlsZSB0aGUgb3RoZXIgNSBiaXRzIGRldGVybWluZSB0aGUgYml0CisJCQkgKiB3aXRoaW4gdGhlIHJlZ2lzdGVyLiAqLworCQkJbWNfZmlsdGVyW2JpdF9uciA+PiA1XSB8PSAxIDw8IChiaXRfbnIgJiAzMSk7CisJCX0KKwkJd3JpdGVsKG1jX2ZpbHRlclswXSwgaW9hZGRyICsgR01BQ19IQVNIX0xPVyk7CisJCXdyaXRlbChtY19maWx0ZXJbMV0sIGlvYWRkciArIEdNQUNfSEFTSF9ISUdIKTsKKwl9CisKKwkvKiBIYW5kbGUgbXVsdGlwbGUgdW5pY2FzdCBhZGRyZXNzZXMgKHBlcmZlY3QgZmlsdGVyaW5nKSovCisJaWYgKG5ldGRldl91Y19jb3VudChkZXYpID4gR01BQ19NQVhfVU5JQ0FTVF9BRERSRVNTRVMpCisJCS8qIFN3aXRjaCB0byBwcm9taXNjdW91cyBtb2RlIGlzIG1vcmUgdGhhbiAxNiBhZGRycworCQkgICBhcmUgcmVxdWlyZWQgKi8KKwkJdmFsdWUgfD0gR01BQ19GUkFNRV9GSUxURVJfUFI7CisJZWxzZSB7CisJCWludCByZWcgPSAxOworCQlzdHJ1Y3QgbmV0ZGV2X2h3X2FkZHIgKmhhOworCisJCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBkZXYpIHsKKwkJCWR3bWFjMTAwMF9zZXRfdW1hY19hZGRyKGlvYWRkciwgaGEtPmFkZHIsIHJlZyk7CisJCQlyZWcrKzsKKwkJfQorCX0KKworI2lmZGVmIEZSQU1FX0ZJTFRFUl9ERUJVRworCS8qIEVuYWJsZSBSZWNlaXZlIGFsbCBtb2RlICh0byBkZWJ1ZyBmaWx0ZXJpbmdfZmFpbCBlcnJvcnMpICovCisJdmFsdWUgfD0gR01BQ19GUkFNRV9GSUxURVJfUkE7CisjZW5kaWYKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIEdNQUNfRlJBTUVfRklMVEVSKTsKKworCURCRyhLRVJOX0lORk8gIlx0RnJhbWUgRmlsdGVyIHJlZzogMHglMDh4XG5cdEhhc2ggcmVnczogIgorCSAgICAiSEkgMHglMDh4LCBMTyAweCUwOHhcbiIsIHJlYWRsKGlvYWRkciArIEdNQUNfRlJBTUVfRklMVEVSKSwKKwkgICAgcmVhZGwoaW9hZGRyICsgR01BQ19IQVNIX0hJR0gpLCByZWFkbChpb2FkZHIgKyBHTUFDX0hBU0hfTE9XKSk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwMF9mbG93X2N0cmwodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGludCBkdXBsZXgsCisJCQkgICB1bnNpZ25lZCBpbnQgZmMsIHVuc2lnbmVkIGludCBwYXVzZV90aW1lKQoreworCXVuc2lnbmVkIGludCBmbG93ID0gMDsKKworCURCRyhLRVJOX0RFQlVHICJHTUFDIEZsb3ctQ29udHJvbDpcbiIpOworCWlmIChmYyAmIEZMT1dfUlgpIHsKKwkJREJHKEtFUk5fREVCVUcgIlx0UmVjZWl2ZSBGbG93LUNvbnRyb2wgT05cbiIpOworCQlmbG93IHw9IEdNQUNfRkxPV19DVFJMX1JGRTsKKwl9CisJaWYgKGZjICYgRkxPV19UWCkgeworCQlEQkcoS0VSTl9ERUJVRyAiXHRUcmFuc21pdCBGbG93LUNvbnRyb2wgT05cbiIpOworCQlmbG93IHw9IEdNQUNfRkxPV19DVFJMX1RGRTsKKwl9CisKKwlpZiAoZHVwbGV4KSB7CisJCURCRyhLRVJOX0RFQlVHICJcdGR1cGxleCBtb2RlOiBwYXVzZSB0aW1lOiAlZFxuIiwgcGF1c2VfdGltZSk7CisJCWZsb3cgfD0gKHBhdXNlX3RpbWUgPDwgR01BQ19GTE9XX0NUUkxfUFRfU0hJRlQpOworCX0KKworCXdyaXRlbChmbG93LCBpb2FkZHIgKyBHTUFDX0ZMT1dfQ1RSTCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMDBfcG10KHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBsb25nIG1vZGUpCit7CisJdW5zaWduZWQgaW50IHBtdCA9IDA7CisKKwlpZiAobW9kZSA9PSBXQUtFX01BR0lDKSB7CisJCURCRyhLRVJOX0RFQlVHICJHTUFDOiBXT0wgTWFnaWMgZnJhbWVcbiIpOworCQlwbXQgfD0gcG93ZXJfZG93biB8IG1hZ2ljX3BrdF9lbjsKKwl9IGVsc2UgaWYgKG1vZGUgPT0gV0FLRV9VQ0FTVCkgeworCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogV09MIG9uIGdsb2JhbCB1bmljYXN0XG4iKTsKKwkJcG10IHw9IGdsb2JhbF91bmljYXN0OworCX0KKworCXdyaXRlbChwbXQsIGlvYWRkciArIEdNQUNfUE1UKTsKKwlyZXR1cm47Cit9CisKKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX2lycV9zdGF0dXModW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJdTMyIGludHJfc3RhdHVzID0gcmVhZGwoaW9hZGRyICsgR01BQ19JTlRfU1RBVFVTKTsKKworCS8qIE5vdCB1c2VkIGV2ZW50cyAoZS5nLiBNTUMgaW50ZXJydXB0cykgYXJlIG5vdCBoYW5kbGVkLiAqLworCWlmICgoaW50cl9zdGF0dXMgJiBtbWNfdHhfaXJxKSkKKwkJREJHKEtFUk5fREVCVUcgIkdNQUM6IE1NQyB0eCBpbnRlcnJ1cHQ6IDB4JTA4eFxuIiwKKwkJICAgIHJlYWRsKGlvYWRkciArIEdNQUNfTU1DX1RYX0lOVFIpKTsKKwlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBtbWNfcnhfaXJxKSkKKwkJREJHKEtFUk5fREVCVUcgIkdNQUM6IE1NQyByeCBpbnRlcnJ1cHQ6IDB4JTA4eFxuIiwKKwkJICAgIHJlYWRsKGlvYWRkciArIEdNQUNfTU1DX1JYX0lOVFIpKTsKKwlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBtbWNfcnhfY3N1bV9vZmZsb2FkX2lycSkpCisJCURCRyhLRVJOX0RFQlVHICJHTUFDOiBNTUMgcnggY3N1bSBvZmZsb2FkOiAweCUwOHhcbiIsCisJCSAgICByZWFkbChpb2FkZHIgKyBHTUFDX01NQ19SWF9DU1VNX09GRkxPQUQpKTsKKwlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBwbXRfaXJxKSkgeworCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogcmVjZWl2ZWQgTWFnaWMgZnJhbWVcbiIpOworCQkvKiBjbGVhciB0aGUgUE1UIGJpdHMgNSBhbmQgNiBieSByZWFkaW5nIHRoZSBQTVQKKwkJICogc3RhdHVzIHJlZ2lzdGVyLiAqLworCQlyZWFkbChpb2FkZHIgKyBHTUFDX1BNVCk7CisJfQorCisJcmV0dXJuOworfQorCitzdHJ1Y3Qgc3RtbWFjX29wcyBkd21hYzEwMDBfb3BzID0geworCS5jb3JlX2luaXQgPSBkd21hYzEwMDBfY29yZV9pbml0LAorCS5kdW1wX3JlZ3MgPSBkd21hYzEwMDBfZHVtcF9yZWdzLAorCS5ob3N0X2lycV9zdGF0dXMgPSBkd21hYzEwMDBfaXJxX3N0YXR1cywKKwkuc2V0X2ZpbHRlciA9IGR3bWFjMTAwMF9zZXRfZmlsdGVyLAorCS5mbG93X2N0cmwgPSBkd21hYzEwMDBfZmxvd19jdHJsLAorCS5wbXQgPSBkd21hYzEwMDBfcG10LAorCS5zZXRfdW1hY19hZGRyID0gZHdtYWMxMDAwX3NldF91bWFjX2FkZHIsCisJLmdldF91bWFjX2FkZHIgPSBkd21hYzEwMDBfZ2V0X3VtYWNfYWRkciwKK307CisKK3N0cnVjdCBtYWNfZGV2aWNlX2luZm8gKmR3bWFjMTAwMF9zZXR1cCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7CisJdTMyIHVpZCA9IHJlYWRsKGlvYWRkciArIEdNQUNfVkVSU0lPTik7CisKKwlwcl9pbmZvKCJcdERXTUFDMTAwMCAtIHVzZXIgSUQ6IDB4JXgsIFN5bm9wc3lzIElEOiAweCV4XG4iLAorCQkoKHVpZCAmIDB4MDAwMGZmMDApID4+IDgpLCAodWlkICYgMHgwMDAwMDBmZikpOworCisJbWFjID0ga3phbGxvYyhzaXplb2YoY29uc3Qgc3RydWN0IG1hY19kZXZpY2VfaW5mbyksIEdGUF9LRVJORUwpOworCisJbWFjLT5tYWMgPSAmZHdtYWMxMDAwX29wczsKKwltYWMtPmRlc2MgPSAmZHdtYWMxMDAwX2Rlc2Nfb3BzOworCW1hYy0+ZG1hID0gJmR3bWFjMTAwMF9kbWFfb3BzOworCisJbWFjLT5wbXQgPSBQTVRfU1VQUE9SVEVEOworCW1hYy0+bGluay5wb3J0ID0gR01BQ19DT05UUk9MX1BTOworCW1hYy0+bGluay5kdXBsZXggPSBHTUFDX0NPTlRST0xfRE07CisJbWFjLT5saW5rLnNwZWVkID0gR01BQ19DT05UUk9MX0ZFUzsKKwltYWMtPm1paS5hZGRyID0gR01BQ19NSUlfQUREUjsKKwltYWMtPm1paS5kYXRhID0gR01BQ19NSUlfREFUQTsKKworCXJldHVybiBtYWM7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWMxMDAwX2RtYS5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMF9kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWQ0MzZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjMTAwMF9kbWEuYwpAQCAtMCwwICsxLDQ3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgR01BQyBvbi1jaGlwIEV0aGVybmV0IGNvbnRyb2xsZXIgZm9yIFNUIFNvQ3MuCisgIERXQyBFdGhlciBNQUMgMTAvMTAwLzEwMDAgVW5pdmVyc2FsIHZlcnNpb24gMy40MWEgIGhhcyBiZWVuIHVzZWQgZm9yCisgIGRldmVsb3BpbmcgdGhpcyBjb2RlLgorCisgIFRoaXMgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlIGRtYSBhbmQgZGVzY3JpcHRvcnMuCisKKyAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJkd21hYzEwMDAuaCIKKyNpbmNsdWRlICJkd21hY19kbWEuaCIKKworc3RhdGljIGludCBkd21hYzEwMDBfZG1hX2luaXQodW5zaWduZWQgbG9uZyBpb2FkZHIsIGludCBwYmwsIHUzMiBkbWFfdHgsCisJCQkgICAgICB1MzIgZG1hX3J4KQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSk7CisJLyogRE1BIFNXIHJlc2V0ICovCisJdmFsdWUgfD0gRE1BX0JVU19NT0RFX1NGVF9SRVNFVDsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9CVVNfTU9ERSk7CisJZG8ge30gd2hpbGUgKChyZWFkbChpb2FkZHIgKyBETUFfQlVTX01PREUpICYgRE1BX0JVU19NT0RFX1NGVF9SRVNFVCkpOworCisJdmFsdWUgPSAvKiBETUFfQlVTX01PREVfRkIgfCAqLyBETUFfQlVTX01PREVfNFBCTCB8CisJICAgICgocGJsIDw8IERNQV9CVVNfTU9ERV9QQkxfU0hJRlQpIHwKKwkgICAgIChwYmwgPDwgRE1BX0JVU19NT0RFX1JQQkxfU0hJRlQpKTsKKworI2lmZGVmIENPTkZJR19TVE1NQUNfREEKKwl2YWx1ZSB8PSBETUFfQlVTX01PREVfREE7CS8qIFJ4IGhhcyBwcmlvcml0eSBvdmVyIHR4ICovCisjZW5kaWYKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9CVVNfTU9ERSk7CisKKwkvKiBNYXNrIGludGVycnVwdHMgYnkgd3JpdGluZyB0byBDU1I3ICovCisJd3JpdGVsKERNQV9JTlRSX0RFRkFVTFRfTUFTSywgaW9hZGRyICsgRE1BX0lOVFJfRU5BKTsKKworCS8qIFRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIFJYL1RYIGRlc2NyaXB0b3IgbGlzdHMgbXVzdCBiZSB3cml0dGVuIGludG8KKwkgKiBETUEgQ1NSMyBhbmQgQ1NSNCwgcmVzcGVjdGl2ZWx5LiAqLworCXdyaXRlbChkbWFfdHgsIGlvYWRkciArIERNQV9UWF9CQVNFX0FERFIpOworCXdyaXRlbChkbWFfcngsIGlvYWRkciArIERNQV9SQ1ZfQkFTRV9BRERSKTsKKworCXJldHVybiAwOworfQorCisvKiBUcmFuc21pdCBGSUZPIGZsdXNoIG9wZXJhdGlvbiAqLworc3RhdGljIHZvaWQgZHdtYWMxMDAwX2ZsdXNoX3R4X2ZpZm8odW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJdTMyIGNzcjYgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisJd3JpdGVsKChjc3I2IHwgRE1BX0NPTlRST0xfRlRGKSwgaW9hZGRyICsgRE1BX0NPTlRST0wpOworCisJZG8ge30gd2hpbGUgKChyZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCkgJiBETUFfQ09OVFJPTF9GVEYpKTsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX2RtYV9vcGVyYXRpb25fbW9kZSh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHR4bW9kZSwKKwkJCQkgICAgaW50IHJ4bW9kZSkKK3sKKwl1MzIgY3NyNiA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKKworCWlmICh0eG1vZGUgPT0gU0ZfRE1BX01PREUpIHsKKwkJREJHKEtFUk5fREVCVUcgIkdNQUM6IGVuYWJsaW5nIFRYIHN0b3JlIGFuZCBmb3J3YXJkIG1vZGVcbiIpOworCQkvKiBUcmFuc21pdCBDT0UgdHlwZSAyIGNhbm5vdCBiZSBkb25lIGluIGN1dC10aHJvdWdoIG1vZGUuICovCisJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFNGOworCQkvKiBPcGVyYXRpbmcgb24gc2Vjb25kIGZyYW1lIGluY3JlYXNlIHRoZSBwZXJmb3JtYW5jZQorCQkgKiBlc3BlY2lhbGx5IHdoZW4gdHJhbnNtaXQgc3RvcmUtYW5kLWZvcndhcmQgaXMgdXNlZC4qLworCQljc3I2IHw9IERNQV9DT05UUk9MX09TRjsKKwl9IGVsc2UgeworCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogZGlzYWJsaW5nIFRYIHN0b3JlIGFuZCBmb3J3YXJkIG1vZGUiCisJCQkgICAgICAiICh0aHJlc2hvbGQgPSAlZClcbiIsIHR4bW9kZSk7CisJCWNzcjYgJj0gfkRNQV9DT05UUk9MX1RTRjsKKwkJY3NyNiAmPSBETUFfQ09OVFJPTF9UQ19UWF9NQVNLOworCQkvKiBTZXQgdGhlIHRyYW5zbWl0IHRocmVzaG9sZCAqLworCQlpZiAodHhtb2RlIDw9IDMyKQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMzI7CisJCWVsc2UgaWYgKHR4bW9kZSA8PSA2NCkKKwkJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzY0OworCQllbHNlIGlmICh0eG1vZGUgPD0gMTI4KQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTI4OworCQllbHNlIGlmICh0eG1vZGUgPD0gMTkyKQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTkyOworCQllbHNlCisJCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ18yNTY7CisJfQorCisJaWYgKHJ4bW9kZSA9PSBTRl9ETUFfTU9ERSkgeworCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogZW5hYmxpbmcgUlggc3RvcmUgYW5kIGZvcndhcmQgbW9kZVxuIik7CisJCWNzcjYgfD0gRE1BX0NPTlRST0xfUlNGOworCX0gZWxzZSB7CisJCURCRyhLRVJOX0RFQlVHICJHTUFDOiBkaXNhYmxpbmcgUlggc3RvcmUgYW5kIGZvcndhcmQgbW9kZSIKKwkJCSAgICAgICIgKHRocmVzaG9sZCA9ICVkKVxuIiwgcnhtb2RlKTsKKwkJY3NyNiAmPSB+RE1BX0NPTlRST0xfUlNGOworCQljc3I2ICY9IERNQV9DT05UUk9MX1RDX1JYX01BU0s7CisJCWlmIChyeG1vZGUgPD0gMzIpCisJCQljc3I2IHw9IERNQV9DT05UUk9MX1JUQ18zMjsKKwkJZWxzZSBpZiAocnhtb2RlIDw9IDY0KQorCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9SVENfNjQ7CisJCWVsc2UgaWYgKHJ4bW9kZSA8PSA5NikKKwkJCWNzcjYgfD0gRE1BX0NPTlRST0xfUlRDXzk2OworCQllbHNlCisJCQljc3I2IHw9IERNQV9DT05UUk9MX1JUQ18xMjg7CisJfQorCisJd3JpdGVsKGNzcjYsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKwlyZXR1cm47Cit9CisKKy8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgLS0tIG5vIFJNT04gbW9kdWxlICovCitzdGF0aWMgdm9pZCBkd21hYzEwMDBfZG1hX2RpYWdub3N0aWNfZnIodm9pZCAqZGF0YSwKKwkJICBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LCB1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwMF9kdW1wX2RtYV9yZWdzKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCWludCBpOworCXByX2luZm8oIiBETUEgcmVnaXN0ZXJzXG4iKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjI7IGkrKykgeworCQlpZiAoKGkgPCA5KSB8fCAoaSA+IDE3KSkgeworCQkJaW50IG9mZnNldCA9IGkgKiA0OworCQkJcHJfZXJyKCJcdCBSZWcgTm8uICVkIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgaSwKKwkJCSAgICAgICAoRE1BX0JVU19NT0RFICsgb2Zmc2V0KSwKKwkJCSAgICAgICByZWFkbChpb2FkZHIgKyBETUFfQlVTX01PREUgKyBvZmZzZXQpKTsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgZHdtYWMxMDAwX2dldF90eF9mcmFtZV9zdGF0dXModm9pZCAqZGF0YSwKKwkJCQlzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAorCQkJCXN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJaW50IHJldCA9IDA7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopZGF0YTsKKworCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHguZXJyb3Jfc3VtbWFyeSkpIHsKKwkJREJHKEtFUk5fRVJSICJHTUFDIFRYIGVycm9yLi4uIDB4JTA4eFxuIiwgcC0+ZGVzMDEuZXR4KTsKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5qYWJiZXJfdGltZW91dCkpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRqYWJiZXJfdGltZW91dCBlcnJvclxuIik7CisJCQl4LT50eF9qYWJiZXIrKzsKKwkJfQorCisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHguZnJhbWVfZmx1c2hlZCkpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRmcmFtZV9mbHVzaGVkIGVycm9yXG4iKTsKKwkJCXgtPnR4X2ZyYW1lX2ZsdXNoZWQrKzsKKwkJCWR3bWFjMTAwMF9mbHVzaF90eF9maWZvKGlvYWRkcik7CisJCX0KKworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4Lmxvc3NfY2FycmllcikpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRsb3NzX2NhcnJpZXIgZXJyb3JcbiIpOworCQkJeC0+dHhfbG9zc2NhcnJpZXIrKzsKKwkJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgubm9fY2FycmllcikpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRub19jYXJyaWVyIGVycm9yXG4iKTsKKwkJCXgtPnR4X2NhcnJpZXIrKzsKKwkJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgubGF0ZV9jb2xsaXNpb24pKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0bGF0ZV9jb2xsaXNpb24gZXJyb3JcbiIpOworCQkJc3RhdHMtPmNvbGxpc2lvbnMgKz0gcC0+ZGVzMDEuZXR4LmNvbGxpc2lvbl9jb3VudDsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmV4Y2Vzc2l2ZV9jb2xsaXNpb25zKSkgeworCQkJREJHKEtFUk5fRVJSICJcdGV4Y2Vzc2l2ZV9jb2xsaXNpb25zXG4iKTsKKwkJCXN0YXRzLT5jb2xsaXNpb25zICs9IHAtPmRlczAxLmV0eC5jb2xsaXNpb25fY291bnQ7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5leGNlc3NpdmVfZGVmZXJyYWwpKSB7CisJCQlEQkcoS0VSTl9JTkZPICJcdGV4Y2Vzc2l2ZSB0eF9kZWZlcnJhbFxuIik7CisJCQl4LT50eF9kZWZlcnJlZCsrOworCQl9CisKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC51bmRlcmZsb3dfZXJyb3IpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0dW5kZXJmbG93IGVycm9yXG4iKTsKKwkJCWR3bWFjMTAwMF9mbHVzaF90eF9maWZvKGlvYWRkcik7CisJCQl4LT50eF91bmRlcmZsb3crKzsKKwkJfQorCisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHguaXBfaGVhZGVyX2Vycm9yKSkgeworCQkJREJHKEtFUk5fRVJSICJcdFRYIElQIGhlYWRlciBjc3VtIGVycm9yXG4iKTsKKwkJCXgtPnR4X2lwX2hlYWRlcl9lcnJvcisrOworCQl9CisKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5wYXlsb2FkX2Vycm9yKSkgeworCQkJREJHKEtFUk5fRVJSICJcdEFkZHIvUGF5bG9hZCBjc3VtIGVycm9yXG4iKTsKKwkJCXgtPnR4X3BheWxvYWRfZXJyb3IrKzsKKwkJCWR3bWFjMTAwMF9mbHVzaF90eF9maWZvKGlvYWRkcik7CisJCX0KKworCQlyZXQgPSAtMTsKKwl9CisKKwlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmRlZmVycmVkKSkgeworCQlEQkcoS0VSTl9JTkZPICJHTUFDIFRYIHN0YXR1czogdHggZGVmZXJyZWRcbiIpOworCQl4LT50eF9kZWZlcnJlZCsrOworCX0KKyNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAorCWlmIChwLT5kZXMwMS5ldHgudmxhbl9mcmFtZSkgeworCQlEQkcoS0VSTl9JTkZPICJHTUFDIFRYIHN0YXR1czogVkxBTiBmcmFtZVxuIik7CisJCXgtPnR4X3ZsYW4rKzsKKwl9CisjZW5kaWYKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZHdtYWMxMDAwX2dldF90eF9sZW4oc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS5ldHguYnVmZmVyMV9zaXplOworfQorCitzdGF0aWMgaW50IGR3bWFjMTAwMF9jb2VfcmRlczAoaW50IGlwY19lcnIsIGludCB0eXBlLCBpbnQgcGF5bG9hZF9lcnIpCit7CisJaW50IHJldCA9IGdvb2RfZnJhbWU7CisJdTMyIHN0YXR1cyA9ICh0eXBlIDw8IDIgfCBpcGNfZXJyIDw8IDEgfCBwYXlsb2FkX2VycikgJiAweDc7CisKKwkvKiBiaXRzIDUgNyAwIHwgRnJhbWUgc3RhdHVzCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgICAgMCAwIDAgfCBJRUVFIDgwMi4zIFR5cGUgZnJhbWUgKGxlbmd0aCA8IDE1MzYgb2N0ZWN0cykKKwkgKiAgICAgIDEgMCAwIHwgSVB2NC82IE5vIENTVU0gZXJyb3JTLgorCSAqICAgICAgMSAwIDEgfCBJUHY0LzYgQ1NVTSBQQVlMT0FEIGVycm9yCisJICogICAgICAxIDEgMCB8IElQdjQvNiBDU1VNIElQIEhSIGVycm9yCisJICogICAgICAxIDEgMSB8IElQdjQvNiBJUCBQQVlMT0FEIEFORCBIRUFERVIgZXJyb3JTCisJICogICAgICAwIDAgMSB8IElQdjQvNiB1bnN1cHBvcnRlZCBJUCBQQVlMT0FECisJICogICAgICAwIDEgMSB8IENPRSBieXBhc3NlZC4uIG5vIElQdjQvNiBmcmFtZQorCSAqICAgICAgMCAxIDAgfCBSZXNlcnZlZC4KKwkgKi8KKwlpZiAoc3RhdHVzID09IDB4MCkgeworCQlEQkcoS0VSTl9JTkZPICJSWCBEZXMwIHN0YXR1czogSUVFRSA4MDIuMyBUeXBlIGZyYW1lLlxuIik7CisJCXJldCA9IGdvb2RfZnJhbWU7CisJfSBlbHNlIGlmIChzdGF0dXMgPT0gMHg0KSB7CisJCURCRyhLRVJOX0lORk8gIlJYIERlczAgc3RhdHVzOiBJUHY0LzYgTm8gQ1NVTSBlcnJvclMuXG4iKTsKKwkJcmV0ID0gZ29vZF9mcmFtZTsKKwl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDUpIHsKKwkJREJHKEtFUk5fRVJSICJSWCBEZXMwIHN0YXR1czogSVB2NC82IFBheWxvYWQgRXJyb3IuXG4iKTsKKwkJcmV0ID0gY3N1bV9ub25lOworCX0gZWxzZSBpZiAoc3RhdHVzID09IDB4NikgeworCQlEQkcoS0VSTl9FUlIgIlJYIERlczAgc3RhdHVzOiBJUHY0LzYgSGVhZGVyIEVycm9yLlxuIik7CisJCXJldCA9IGNzdW1fbm9uZTsKKwl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDcpIHsKKwkJREJHKEtFUk5fRVJSCisJCSAgICAiUlggRGVzMCBzdGF0dXM6IElQdjQvNiBIZWFkZXIgYW5kIFBheWxvYWQgRXJyb3IuXG4iKTsKKwkJcmV0ID0gY3N1bV9ub25lOworCX0gZWxzZSBpZiAoc3RhdHVzID09IDB4MSkgeworCQlEQkcoS0VSTl9FUlIKKwkJICAgICJSWCBEZXMwIHN0YXR1czogSVB2NC82IHVuc3VwcG9ydGVkIElQIFBBWUxPQUQuXG4iKTsKKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDMpIHsKKwkJREJHKEtFUk5fRVJSICJSWCBEZXMwIHN0YXR1czogTm8gSVB2NCwgSVB2NiBmcmFtZS5cbiIpOworCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGR3bWFjMTAwMF9nZXRfcnhfZnJhbWVfc3RhdHVzKHZvaWQgKmRhdGEsCisJCQlzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LCBzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJaW50IHJldCA9IGdvb2RfZnJhbWU7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopZGF0YTsKKworCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguZXJyb3Jfc3VtbWFyeSkpIHsKKwkJREJHKEtFUk5fRVJSICJHTUFDIFJYIEVycm9yIFN1bW1hcnkuLi4gMHglMDh4XG4iLCBwLT5kZXMwMS5lcngpOworCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmRlc2NyaXB0b3JfZXJyb3IpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0ZGVzY3JpcHRvciBlcnJvclxuIik7CisJCQl4LT5yeF9kZXNjKys7CisJCQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycysrOworCQl9CisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcngub3ZlcmZsb3dfZXJyb3IpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0b3ZlcmZsb3cgZXJyb3JcbiIpOworCQkJeC0+cnhfZ21hY19vdmVyZmxvdysrOworCQl9CisKKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5pcGNfY3N1bV9lcnJvcikpCisJCQlEQkcoS0VSTl9FUlIgIlx0SVBDIENzdW0gRXJyb3IvR2lhbnQgZnJhbWVcbiIpOworCisJCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcngubGF0ZV9jb2xsaXNpb24pKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0bGF0ZV9jb2xsaXNpb24gZXJyb3JcbiIpOworCQkJc3RhdHMtPmNvbGxpc2lvbnMrKzsKKwkJCXN0YXRzLT5jb2xsaXNpb25zKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5yZWNlaXZlX3dhdGNoZG9nKSkgeworCQkJREJHKEtFUk5fRVJSICJcdHJlY2VpdmVfd2F0Y2hkb2cgZXJyb3JcbiIpOworCQkJeC0+cnhfd2F0Y2hkb2crKzsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmVycm9yX2dtaWkpKSB7CisJCQlEQkcoS0VSTl9FUlIgIlx0UmVjZWl2ZSBFcnJvclxuIik7CisJCQl4LT5yeF9taWkrKzsKKwkJfQorCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmNyY19lcnJvcikpIHsKKwkJCURCRyhLRVJOX0VSUiAiXHRDUkMgZXJyb3JcbiIpOworCQkJeC0+cnhfY3JjKys7CisJCQlzdGF0cy0+cnhfY3JjX2Vycm9ycysrOworCQl9CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorCisJLyogQWZ0ZXIgYSBwYXlsb2FkIGNzdW0gZXJyb3IsIHRoZSBFUyBiaXQgaXMgc2V0LgorCSAqIEl0IGRvZXNuJ3QgbWF0Y2ggd2l0aCB0aGUgaW5mb3JtYXRpb24gcmVwb3J0ZWQgaW50byB0aGUgZGF0YWJvb2suCisJICogQXQgYW55IHJhdGUsIHdlIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgQ1NVTSBodyBjb21wdXRhdGlvbiBpcyBvaworCSAqIGFuZCByZXBvcnQgdGhpcyBpbmZvIHRvIHRoZSB1cHBlciBsYXllcnMuICovCisJcmV0ID0gZHdtYWMxMDAwX2NvZV9yZGVzMChwLT5kZXMwMS5lcnguaXBjX2NzdW1fZXJyb3IsCisJCXAtPmRlczAxLmVyeC5mcmFtZV90eXBlLCBwLT5kZXMwMS5lcngucGF5bG9hZF9jc3VtX2Vycm9yKTsKKworCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguZHJpYmJsaW5nKSkgeworCQlEQkcoS0VSTl9FUlIgIkdNQUMgUlg6IGRyaWJibGluZyBlcnJvclxuIik7CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguc2FfZmlsdGVyX2ZhaWwpKSB7CisJCURCRyhLRVJOX0VSUiAiR01BQyBSWCA6IFNvdXJjZSBBZGRyZXNzIGZpbHRlciBmYWlsXG4iKTsKKwkJeC0+c2FfcnhfZmlsdGVyX2ZhaWwrKzsKKwkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKKwl9CisJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5kYV9maWx0ZXJfZmFpbCkpIHsKKwkJREJHKEtFUk5fRVJSICJHTUFDIFJYIDogRGVzdGluYXRpb24gQWRkcmVzcyBmaWx0ZXIgZmFpbFxuIik7CisJCXgtPmRhX3J4X2ZpbHRlcl9mYWlsKys7CisJCXJldCA9IGRpc2NhcmRfZnJhbWU7CisJfQorCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcngubGVuZ3RoX2Vycm9yKSkgeworCQlEQkcoS0VSTl9FUlIgIkdNQUMgUlg6IGxlbmd0aF9lcnJvciBlcnJvclxuIik7CisJCXgtPnJ4X2xlbmd0aCsrOworCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOworCX0KKyNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAorCWlmIChwLT5kZXMwMS5lcngudmxhbl90YWcpIHsKKwkJREJHKEtFUk5fSU5GTyAiR01BQyBSWDogVkxBTiBmcmFtZSB0YWdnZWRcbiIpOworCQl4LT5yeF92bGFuKys7CisJfQorI2VuZGlmCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX2luaXRfcnhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUsCisJCQkJaW50IGRpc2FibGVfcnhfaWMpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IHJpbmdfc2l6ZTsgaSsrKSB7CisJCXAtPmRlczAxLmVyeC5vd24gPSAxOworCQlwLT5kZXMwMS5lcnguYnVmZmVyMV9zaXplID0gQlVGX1NJWkVfOEtpQiAtIDE7CisJCS8qIFRvIHN1cHBvcnQganVtYm8gZnJhbWVzICovCisJCXAtPmRlczAxLmVyeC5idWZmZXIyX3NpemUgPSBCVUZfU0laRV84S2lCIC0gMTsKKwkJaWYgKGkgPT0gcmluZ19zaXplIC0gMSkKKwkJCXAtPmRlczAxLmVyeC5lbmRfcmluZyA9IDE7CisJCWlmIChkaXNhYmxlX3J4X2ljKQorCQkJcC0+ZGVzMDEuZXJ4LmRpc2FibGVfaWMgPSAxOworCQlwKys7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX2luaXRfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmluZ19zaXplOyBpKyspIHsKKwkJcC0+ZGVzMDEuZXR4Lm93biA9IDA7CisJCWlmIChpID09IHJpbmdfc2l6ZSAtIDEpCisJCQlwLT5kZXMwMS5ldHguZW5kX3JpbmcgPSAxOworCQlwKys7CisJfQorCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IGR3bWFjMTAwMF9nZXRfdHhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS5ldHgub3duOworfQorCitzdGF0aWMgaW50IGR3bWFjMTAwMF9nZXRfcnhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQoreworCXJldHVybiBwLT5kZXMwMS5lcngub3duOworfQorCitzdGF0aWMgdm9pZCBkd21hYzEwMDBfc2V0X3R4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlwLT5kZXMwMS5ldHgub3duID0gMTsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX3NldF9yeF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcC0+ZGVzMDEuZXJ4Lm93biA9IDE7Cit9CisKK3N0YXRpYyBpbnQgZHdtYWMxMDAwX2dldF90eF9scyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLmV0eC5sYXN0X3NlZ21lbnQ7Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwMF9yZWxlYXNlX3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwKQoreworCWludCB0ZXIgPSBwLT5kZXMwMS5ldHguZW5kX3Jpbmc7CisKKwltZW1zZXQocCwgMCwgc2l6ZW9mKHN0cnVjdCBkbWFfZGVzYykpOworCXAtPmRlczAxLmV0eC5lbmRfcmluZyA9IHRlcjsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgZHdtYWMxMDAwX3ByZXBhcmVfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIGludCBpc19mcywgaW50IGxlbiwKKwkJCQkgaW50IGNzdW1fZmxhZykKK3sKKwlwLT5kZXMwMS5ldHguZmlyc3Rfc2VnbWVudCA9IGlzX2ZzOworCWlmICh1bmxpa2VseShsZW4gPiBCVUZfU0laRV80S2lCKSkgeworCQlwLT5kZXMwMS5ldHguYnVmZmVyMV9zaXplID0gQlVGX1NJWkVfNEtpQjsKKwkJcC0+ZGVzMDEuZXR4LmJ1ZmZlcjJfc2l6ZSA9IGxlbiAtIEJVRl9TSVpFXzRLaUI7CisJfSBlbHNlIHsKKwkJcC0+ZGVzMDEuZXR4LmJ1ZmZlcjFfc2l6ZSA9IGxlbjsKKwl9CisJaWYgKGxpa2VseShjc3VtX2ZsYWcpKQorCQlwLT5kZXMwMS5ldHguY2hlY2tzdW1faW5zZXJ0aW9uID0gY2ljX2Z1bGw7Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwMF9jbGVhcl90eF9pYyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcC0+ZGVzMDEuZXR4LmludGVycnVwdCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGR3bWFjMTAwMF9jbG9zZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCkKK3sKKwlwLT5kZXMwMS5ldHgubGFzdF9zZWdtZW50ID0gMTsKKwlwLT5kZXMwMS5ldHguaW50ZXJydXB0ID0gMTsKK30KKworc3RhdGljIGludCBkd21hYzEwMDBfZ2V0X3J4X2ZyYW1lX2xlbihzdHJ1Y3QgZG1hX2Rlc2MgKnApCit7CisJcmV0dXJuIHAtPmRlczAxLmVyeC5mcmFtZV9sZW5ndGg7Cit9CisKK3N0cnVjdCBzdG1tYWNfZG1hX29wcyBkd21hYzEwMDBfZG1hX29wcyA9IHsKKwkuaW5pdCA9IGR3bWFjMTAwMF9kbWFfaW5pdCwKKwkuZHVtcF9yZWdzID0gZHdtYWMxMDAwX2R1bXBfZG1hX3JlZ3MsCisJLmRtYV9tb2RlID0gZHdtYWMxMDAwX2RtYV9vcGVyYXRpb25fbW9kZSwKKwkuZG1hX2RpYWdub3N0aWNfZnIgPSBkd21hYzEwMDBfZG1hX2RpYWdub3N0aWNfZnIsCisJLmVuYWJsZV9kbWFfdHJhbnNtaXNzaW9uID0gZHdtYWNfZW5hYmxlX2RtYV90cmFuc21pc3Npb24sCisJLmVuYWJsZV9kbWFfaXJxID0gZHdtYWNfZW5hYmxlX2RtYV9pcnEsCisJLmRpc2FibGVfZG1hX2lycSA9IGR3bWFjX2Rpc2FibGVfZG1hX2lycSwKKwkuc3RhcnRfdHggPSBkd21hY19kbWFfc3RhcnRfdHgsCisJLnN0b3BfdHggPSBkd21hY19kbWFfc3RvcF90eCwKKwkuc3RhcnRfcnggPSBkd21hY19kbWFfc3RhcnRfcngsCisJLnN0b3BfcnggPSBkd21hY19kbWFfc3RvcF9yeCwKKwkuZG1hX2ludGVycnVwdCA9IGR3bWFjX2RtYV9pbnRlcnJ1cHQsCit9OworCitzdHJ1Y3Qgc3RtbWFjX2Rlc2Nfb3BzIGR3bWFjMTAwMF9kZXNjX29wcyA9IHsKKwkudHhfc3RhdHVzID0gZHdtYWMxMDAwX2dldF90eF9mcmFtZV9zdGF0dXMsCisJLnJ4X3N0YXR1cyA9IGR3bWFjMTAwMF9nZXRfcnhfZnJhbWVfc3RhdHVzLAorCS5nZXRfdHhfbGVuID0gZHdtYWMxMDAwX2dldF90eF9sZW4sCisJLmluaXRfcnhfZGVzYyA9IGR3bWFjMTAwMF9pbml0X3J4X2Rlc2MsCisJLmluaXRfdHhfZGVzYyA9IGR3bWFjMTAwMF9pbml0X3R4X2Rlc2MsCisJLmdldF90eF9vd25lciA9IGR3bWFjMTAwMF9nZXRfdHhfb3duZXIsCisJLmdldF9yeF9vd25lciA9IGR3bWFjMTAwMF9nZXRfcnhfb3duZXIsCisJLnJlbGVhc2VfdHhfZGVzYyA9IGR3bWFjMTAwMF9yZWxlYXNlX3R4X2Rlc2MsCisJLnByZXBhcmVfdHhfZGVzYyA9IGR3bWFjMTAwMF9wcmVwYXJlX3R4X2Rlc2MsCisJLmNsZWFyX3R4X2ljID0gZHdtYWMxMDAwX2NsZWFyX3R4X2ljLAorCS5jbG9zZV90eF9kZXNjID0gZHdtYWMxMDAwX2Nsb3NlX3R4X2Rlc2MsCisJLmdldF90eF9scyA9IGR3bWFjMTAwMF9nZXRfdHhfbHMsCisJLnNldF90eF9vd25lciA9IGR3bWFjMTAwMF9zZXRfdHhfb3duZXIsCisJLnNldF9yeF9vd25lciA9IGR3bWFjMTAwMF9zZXRfcnhfb3duZXIsCisJLmdldF9yeF9mcmFtZV9sZW4gPSBkd21hYzEwMDBfZ2V0X3J4X2ZyYW1lX2xlbiwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWNfZG1hLmggYi9kcml2ZXJzL25ldC9zdG1tYWMvZHdtYWNfZG1hLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGU4NDhkOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hY19kbWEuaApAQCAtMCwwICsxLDEwNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgRFdNQUMgRE1BIEhlYWRlciBmaWxlLgorCisgIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBETUEgQ1JTIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciBNYXBwaW5nICovCisjZGVmaW5lIERNQV9CVVNfTU9ERQkJMHgwMDAwMTAwMAkvKiBCdXMgTW9kZSAqLworI2RlZmluZSBETUFfWE1UX1BPTExfREVNQU5ECTB4MDAwMDEwMDQJLyogVHJhbnNtaXQgUG9sbCBEZW1hbmQgKi8KKyNkZWZpbmUgRE1BX1JDVl9QT0xMX0RFTUFORAkweDAwMDAxMDA4CS8qIFJlY2VpdmVkIFBvbGwgRGVtYW5kICovCisjZGVmaW5lIERNQV9SQ1ZfQkFTRV9BRERSCTB4MDAwMDEwMGMJLyogUmVjZWl2ZSBMaXN0IEJhc2UgKi8KKyNkZWZpbmUgRE1BX1RYX0JBU0VfQUREUgkweDAwMDAxMDEwCS8qIFRyYW5zbWl0IExpc3QgQmFzZSAqLworI2RlZmluZSBETUFfU1RBVFVTCQkweDAwMDAxMDE0CS8qIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBETUFfQ09OVFJPTAkJMHgwMDAwMTAxOAkvKiBDdHJsIChPcGVyYXRpb25hbCBNb2RlKSAqLworI2RlZmluZSBETUFfSU5UUl9FTkEJCTB4MDAwMDEwMWMJLyogSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBETUFfTUlTU0VEX0ZSQU1FX0NUUgkweDAwMDAxMDIwCS8qIE1pc3NlZCBGcmFtZSBDb3VudGVyICovCisjZGVmaW5lIERNQV9DVVJfVFhfQlVGX0FERFIJMHgwMDAwMTA1MAkvKiBDdXJyZW50IEhvc3QgVHggQnVmZmVyICovCisjZGVmaW5lIERNQV9DVVJfUlhfQlVGX0FERFIJMHgwMDAwMTA1NAkvKiBDdXJyZW50IEhvc3QgUnggQnVmZmVyICovCisKKy8qIERNQSBDb250cm9sIHJlZ2lzdGVyIGRlZmluZXMgKi8KKyNkZWZpbmUgRE1BX0NPTlRST0xfU1QJCTB4MDAwMDIwMDAJLyogU3RhcnQvU3RvcCBUcmFuc21pc3Npb24gKi8KKyNkZWZpbmUgRE1BX0NPTlRST0xfU1IJCTB4MDAwMDAwMDIJLyogU3RhcnQvU3RvcCBSZWNlaXZlICovCisKKy8qIERNQSBOb3JtYWwgaW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9OSUUgMHgwMDAxMDAwMAkvKiBOb3JtYWwgU3VtbWFyeSAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfVElFIDB4MDAwMDAwMDEJLyogVHJhbnNtaXQgSW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9UVUUgMHgwMDAwMDAwNAkvKiBUcmFuc21pdCBCdWZmZXIgVW5hdmFpbGFibGUgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1JJRSAweDAwMDAwMDQwCS8qIFJlY2VpdmUgSW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9FUkUgMHgwMDAwNDAwMAkvKiBFYXJseSBSZWNlaXZlICovCisKKyNkZWZpbmUgRE1BX0lOVFJfTk9STUFMCShETUFfSU5UUl9FTkFfTklFIHwgRE1BX0lOVFJfRU5BX1JJRSB8IFwKKwkJCURNQV9JTlRSX0VOQV9USUUpCisKKy8qIERNQSBBYm5vcm1hbCBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX0FJRSAweDAwMDA4MDAwCS8qIEFibm9ybWFsIFN1bW1hcnkgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX0ZCRSAweDAwMDAyMDAwCS8qIEZhdGFsIEJ1cyBFcnJvciAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfRVRFIDB4MDAwMDA0MDAJLyogRWFybHkgVHJhbnNtaXQgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1JXRSAweDAwMDAwMjAwCS8qIFJlY2VpdmUgV2F0Y2hkb2cgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1JTRSAweDAwMDAwMTAwCS8qIFJlY2VpdmUgU3RvcHBlZCAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfUlVFIDB4MDAwMDAwODAJLyogUmVjZWl2ZSBCdWZmZXIgVW5hdmFpbGFibGUgKi8KKyNkZWZpbmUgRE1BX0lOVFJfRU5BX1VORSAweDAwMDAwMDIwCS8qIFR4IFVuZGVyZmxvdyAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfT1ZFIDB4MDAwMDAwMTAJLyogUmVjZWl2ZSBPdmVyZmxvdyAqLworI2RlZmluZSBETUFfSU5UUl9FTkFfVEpFIDB4MDAwMDAwMDgJLyogVHJhbnNtaXQgSmFiYmVyICovCisjZGVmaW5lIERNQV9JTlRSX0VOQV9UU0UgMHgwMDAwMDAwMgkvKiBUcmFuc21pdCBTdG9wcGVkICovCisKKyNkZWZpbmUgRE1BX0lOVFJfQUJOT1JNQUwJKERNQV9JTlRSX0VOQV9BSUUgfCBETUFfSU5UUl9FTkFfRkJFIHwgXAorCQkJCURNQV9JTlRSX0VOQV9VTkUpCisKKy8qIERNQSBkZWZhdWx0IGludGVycnVwdCBtYXNrICovCisjZGVmaW5lIERNQV9JTlRSX0RFRkFVTFRfTUFTSwkoRE1BX0lOVFJfTk9STUFMIHwgRE1BX0lOVFJfQUJOT1JNQUwpCisKKy8qIERNQSBTdGF0dXMgcmVnaXN0ZXIgZGVmaW5lcyAqLworI2RlZmluZSBETUFfU1RBVFVTX0dQSQkJMHgxMDAwMDAwMAkvKiBQTVQgaW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9TVEFUVVNfR01JCQkweDA4MDAwMDAwCS8qIE1NQyBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19HTEkJCTB4MDQwMDAwMDAJLyogR01BQyBMaW5lIGludGVyZmFjZSBpbnQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19HTUkJCTB4MDgwMDAwMDAKKyNkZWZpbmUgRE1BX1NUQVRVU19HTEkJCTB4MDQwMDAwMDAKKyNkZWZpbmUgRE1BX1NUQVRVU19FQl9NQVNLCTB4MDAzODAwMDAJLyogRXJyb3IgQml0cyBNYXNrICovCisjZGVmaW5lIERNQV9TVEFUVVNfRUJfVFhfQUJPUlQJMHgwMDA4MDAwMAkvKiBFcnJvciBCaXRzIC0gVFggQWJvcnQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19FQl9SWF9BQk9SVAkweDAwMTAwMDAwCS8qIEVycm9yIEJpdHMgLSBSWCBBYm9ydCAqLworI2RlZmluZSBETUFfU1RBVFVTX1RTX01BU0sJMHgwMDcwMDAwMAkvKiBUcmFuc21pdCBQcm9jZXNzIFN0YXRlICovCisjZGVmaW5lIERNQV9TVEFUVVNfVFNfU0hJRlQJMjAKKyNkZWZpbmUgRE1BX1NUQVRVU19SU19NQVNLCTB4MDAwZTAwMDAJLyogUmVjZWl2ZSBQcm9jZXNzIFN0YXRlICovCisjZGVmaW5lIERNQV9TVEFUVVNfUlNfU0hJRlQJMTcKKyNkZWZpbmUgRE1BX1NUQVRVU19OSVMJMHgwMDAxMDAwMAkvKiBOb3JtYWwgSW50ZXJydXB0IFN1bW1hcnkgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19BSVMJMHgwMDAwODAwMAkvKiBBYm5vcm1hbCBJbnRlcnJ1cHQgU3VtbWFyeSAqLworI2RlZmluZSBETUFfU1RBVFVTX0VSSQkweDAwMDA0MDAwCS8qIEVhcmx5IFJlY2VpdmUgSW50ZXJydXB0ICovCisjZGVmaW5lIERNQV9TVEFUVVNfRkJJCTB4MDAwMDIwMDAJLyogRmF0YWwgQnVzIEVycm9yIEludGVycnVwdCAqLworI2RlZmluZSBETUFfU1RBVFVTX0VUSQkweDAwMDAwNDAwCS8qIEVhcmx5IFRyYW5zbWl0IEludGVycnVwdCAqLworI2RlZmluZSBETUFfU1RBVFVTX1JXVAkweDAwMDAwMjAwCS8qIFJlY2VpdmUgV2F0Y2hkb2cgVGltZW91dCAqLworI2RlZmluZSBETUFfU1RBVFVTX1JQUwkweDAwMDAwMTAwCS8qIFJlY2VpdmUgUHJvY2VzcyBTdG9wcGVkICovCisjZGVmaW5lIERNQV9TVEFUVVNfUlUJMHgwMDAwMDA4MAkvKiBSZWNlaXZlIEJ1ZmZlciBVbmF2YWlsYWJsZSAqLworI2RlZmluZSBETUFfU1RBVFVTX1JJCTB4MDAwMDAwNDAJLyogUmVjZWl2ZSBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19VTkYJMHgwMDAwMDAyMAkvKiBUcmFuc21pdCBVbmRlcmZsb3cgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19PVkYJMHgwMDAwMDAxMAkvKiBSZWNlaXZlIE92ZXJmbG93ICovCisjZGVmaW5lIERNQV9TVEFUVVNfVEpUCTB4MDAwMDAwMDgJLyogVHJhbnNtaXQgSmFiYmVyIFRpbWVvdXQgKi8KKyNkZWZpbmUgRE1BX1NUQVRVU19UVQkweDAwMDAwMDA0CS8qIFRyYW5zbWl0IEJ1ZmZlciBVbmF2YWlsYWJsZSAqLworI2RlZmluZSBETUFfU1RBVFVTX1RQUwkweDAwMDAwMDAyCS8qIFRyYW5zbWl0IFByb2Nlc3MgU3RvcHBlZCAqLworI2RlZmluZSBETUFfU1RBVFVTX1RJCTB4MDAwMDAwMDEJLyogVHJhbnNtaXQgSW50ZXJydXB0ICovCisKK2V4dGVybiB2b2lkIGR3bWFjX2VuYWJsZV9kbWFfdHJhbnNtaXNzaW9uKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKK2V4dGVybiB2b2lkIGR3bWFjX2VuYWJsZV9kbWFfaXJxKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKK2V4dGVybiB2b2lkIGR3bWFjX2Rpc2FibGVfZG1hX2lycSh1bnNpZ25lZCBsb25nIGlvYWRkcik7CitleHRlcm4gdm9pZCBkd21hY19kbWFfc3RhcnRfdHgodW5zaWduZWQgbG9uZyBpb2FkZHIpOworZXh0ZXJuIHZvaWQgZHdtYWNfZG1hX3N0b3BfdHgodW5zaWduZWQgbG9uZyBpb2FkZHIpOworZXh0ZXJuIHZvaWQgZHdtYWNfZG1hX3N0YXJ0X3J4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKK2V4dGVybiB2b2lkIGR3bWFjX2RtYV9zdG9wX3J4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKK2V4dGVybiBpbnQgZHdtYWNfZG1hX2ludGVycnVwdCh1bnNpZ25lZCBsb25nIGlvYWRkciwKKwkJCQlzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hY19saWIuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9kd21hY19saWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGFkYjFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL2R3bWFjX2xpYi5jCkBAIC0wLDAgKzEsMjYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSAiY29tbW9uLmgiCisjaW5jbHVkZSAiZHdtYWNfZG1hLmgiCisKKyN1bmRlZiBEV01BQ19ETUFfREVCVUcKKyNpZmRlZiBEV01BQ19ETUFfREVCVUcKKyNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgIHByaW50ayhmbXQsICMjIGFyZ3MpCisjZWxzZQorI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSAgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qIENTUjEgZW5hYmxlcyB0aGUgdHJhbnNtaXQgRE1BIHRvIGNoZWNrIGZvciBuZXcgZGVzY3JpcHRvciAqLwordm9pZCBkd21hY19lbmFibGVfZG1hX3RyYW5zbWlzc2lvbih1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl3cml0ZWwoMSwgaW9hZGRyICsgRE1BX1hNVF9QT0xMX0RFTUFORCk7Cit9CisKK3ZvaWQgZHdtYWNfZW5hYmxlX2RtYV9pcnEodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJd3JpdGVsKERNQV9JTlRSX0RFRkFVTFRfTUFTSywgaW9hZGRyICsgRE1BX0lOVFJfRU5BKTsKK30KKwordm9pZCBkd21hY19kaXNhYmxlX2RtYV9pcnEodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJd3JpdGVsKDAsIGlvYWRkciArIERNQV9JTlRSX0VOQSk7Cit9CisKK3ZvaWQgZHdtYWNfZG1hX3N0YXJ0X3R4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKKwl2YWx1ZSB8PSBETUFfQ09OVFJPTF9TVDsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKwlyZXR1cm47Cit9CisKK3ZvaWQgZHdtYWNfZG1hX3N0b3BfdHgodW5zaWduZWQgbG9uZyBpb2FkZHIpCit7CisJdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgRE1BX0NPTlRST0wpOworCXZhbHVlICY9IH5ETUFfQ09OVFJPTF9TVDsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKwlyZXR1cm47Cit9CisKK3ZvaWQgZHdtYWNfZG1hX3N0YXJ0X3J4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQoreworCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKKwl2YWx1ZSB8PSBETUFfQ09OVFJPTF9TUjsKKwl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9DT05UUk9MKTsKKworCXJldHVybjsKK30KKwordm9pZCBkd21hY19kbWFfc3RvcF9yeCh1bnNpZ25lZCBsb25nIGlvYWRkcikKK3sKKwl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7CisJdmFsdWUgJj0gfkRNQV9DT05UUk9MX1NSOworCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgRE1BX0NPTlRST0wpOworCisJcmV0dXJuOworfQorCisjaWZkZWYgRFdNQUNfRE1BX0RFQlVHCitzdGF0aWMgdm9pZCBzaG93X3R4X3Byb2Nlc3Nfc3RhdGUodW5zaWduZWQgaW50IHN0YXR1cykKK3sKKwl1bnNpZ25lZCBpbnQgc3RhdGU7CisJc3RhdGUgPSAoc3RhdHVzICYgRE1BX1NUQVRVU19UU19NQVNLKSA+PiBETUFfU1RBVFVTX1RTX1NISUZUOworCisJc3dpdGNoIChzdGF0ZSkgeworCWNhc2UgMDoKKwkJcHJfaW5mbygiLSBUWCAoU3RvcHBlZCk6IFJlc2V0IG9yIFN0b3AgY29tbWFuZFxuIik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJcHJfaW5mbygiLSBUWCAoUnVubmluZyk6RmV0Y2hpbmcgdGhlIFR4IGRlc2NcbiIpOworCQlicmVhazsKKwljYXNlIDI6CisJCXByX2luZm8oIi0gVFggKFJ1bm5pbmcpOiBXYWl0aW5nIGZvciBlbmQgb2YgdHhcbiIpOworCQlicmVhazsKKwljYXNlIDM6CisJCXByX2luZm8oIi0gVFggKFJ1bm5pbmcpOiBSZWFkaW5nIHRoZSBkYXRhICIKKwkJICAgICAgICJhbmQgcXVldWluZyB0aGUgZGF0YSBpbnRvIHRoZSBUeCBidWZcbiIpOworCQlicmVhazsKKwljYXNlIDY6CisJCXByX2luZm8oIi0gVFggKFN1c3BlbmRlZCk6IFR4IEJ1ZmYgVW5kZXJmbG93ICIKKwkJICAgICAgICJvciBhbiB1bmF2YWlsYWJsZSBUcmFuc21pdCBkZXNjcmlwdG9yXG4iKTsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlwcl9pbmZvKCItIFRYIChSdW5uaW5nKTogQ2xvc2luZyBUeCBkZXNjcmlwdG9yXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgc2hvd19yeF9wcm9jZXNzX3N0YXRlKHVuc2lnbmVkIGludCBzdGF0dXMpCit7CisJdW5zaWduZWQgaW50IHN0YXRlOworCXN0YXRlID0gKHN0YXR1cyAmIERNQV9TVEFUVVNfUlNfTUFTSykgPj4gRE1BX1NUQVRVU19SU19TSElGVDsKKworCXN3aXRjaCAoc3RhdGUpIHsKKwljYXNlIDA6CisJCXByX2luZm8oIi0gUlggKFN0b3BwZWQpOiBSZXNldCBvciBTdG9wIGNvbW1hbmRcbiIpOworCQlicmVhazsKKwljYXNlIDE6CisJCXByX2luZm8oIi0gUlggKFJ1bm5pbmcpOiBGZXRjaGluZyB0aGUgUnggZGVzY1xuIik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6Q2hlY2tpbmcgZm9yIGVuZCBvZiBwa3RcbiIpOworCQlicmVhazsKKwljYXNlIDM6CisJCXByX2luZm8oIi0gUlggKFJ1bm5pbmcpOiBXYWl0aW5nIGZvciBSeCBwa3RcbiIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXByX2luZm8oIi0gUlggKFN1c3BlbmRlZCk6IFVuYXZhaWxhYmxlIFJ4IGJ1ZlxuIik7CisJCWJyZWFrOworCWNhc2UgNToKKwkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6IENsb3NpbmcgUnggZGVzY3JpcHRvclxuIik7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJcHJfaW5mbygiLSBSWChSdW5uaW5nKTogRmx1c2hpbmcgdGhlIGN1cnJlbnQgZnJhbWUiCisJCSAgICAgICAiIGZyb20gdGhlIFJ4IGJ1ZlxuIik7CisJCWJyZWFrOworCWNhc2UgNzoKKwkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6IFF1ZXVpbmcgdGhlIFJ4IGZyYW1lIgorCQkgICAgICAgIiBmcm9tIHRoZSBSeCBidWYgaW50byBtZW1vcnlcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuOworfQorI2VuZGlmCisKK2ludCBkd21hY19kbWFfaW50ZXJydXB0KHVuc2lnbmVkIGxvbmcgaW9hZGRyLAorCQkJc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCkKK3sKKwlpbnQgcmV0ID0gMDsKKwkvKiByZWFkIHRoZSBzdGF0dXMgcmVnaXN0ZXIgKENTUjUpICovCisJdTMyIGludHJfc3RhdHVzID0gcmVhZGwoaW9hZGRyICsgRE1BX1NUQVRVUyk7CisKKwlEQkcoSU5GTywgIiVzOiBbQ1NSNTogMHglMDh4XVxuIiwgX19mdW5jX18sIGludHJfc3RhdHVzKTsKKyNpZmRlZiBEV01BQ19ETUFfREVCVUcKKwkvKiBJdCBkaXNwbGF5cyB0aGUgRE1BIHByb2Nlc3Mgc3RhdGVzIChDU1I1IHJlZ2lzdGVyKSAqLworCXNob3dfdHhfcHJvY2Vzc19zdGF0ZShpbnRyX3N0YXR1cyk7CisJc2hvd19yeF9wcm9jZXNzX3N0YXRlKGludHJfc3RhdHVzKTsKKyNlbmRpZgorCS8qIEFCTk9STUFMIGludGVycnVwdHMgKi8KKwlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX0FJUykpIHsKKwkJREJHKElORk8sICJDU1I1WzE1XSBETUEgQUJOT1JNQUwgSVJROiAiKTsKKwkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19VTkYpKSB7CisJCQlEQkcoSU5GTywgInRyYW5zbWl0IHVuZGVyZmxvd1xuIik7CisJCQlyZXQgPSB0eF9oYXJkX2Vycm9yX2J1bXBfdGM7CisJCQl4LT50eF91bmRlZmxvd19pcnErKzsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1RKVCkpIHsKKwkJCURCRyhJTkZPLCAidHJhbnNtaXQgamFiYmVyXG4iKTsKKwkJCXgtPnR4X2phYmJlcl9pcnErKzsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX09WRikpIHsKKwkJCURCRyhJTkZPLCAicmVjdiBvdmVyZmxvd1xuIik7CisJCQl4LT5yeF9vdmVyZmxvd19pcnErKzsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1JVKSkgeworCQkJREJHKElORk8sICJyZWNlaXZlIGJ1ZmZlciB1bmF2YWlsYWJsZVxuIik7CisJCQl4LT5yeF9idWZfdW5hdl9pcnErKzsKKwkJfQorCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1JQUykpIHsKKwkJCURCRyhJTkZPLCAicmVjZWl2ZSBwcm9jZXNzIHN0b3BwZWRcbiIpOworCQkJeC0+cnhfcHJvY2Vzc19zdG9wcGVkX2lycSsrOworCQl9CisJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUldUKSkgeworCQkJREJHKElORk8sICJyZWNlaXZlIHdhdGNoZG9nXG4iKTsKKwkJCXgtPnJ4X3dhdGNoZG9nX2lycSsrOworCQl9CisJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfRVRJKSkgeworCQkJREJHKElORk8sICJ0cmFuc21pdCBlYXJseSBpbnRlcnJ1cHRcbiIpOworCQkJeC0+dHhfZWFybHlfaXJxKys7CisJCX0KKwkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19UUFMpKSB7CisJCQlEQkcoSU5GTywgInRyYW5zbWl0IHByb2Nlc3Mgc3RvcHBlZFxuIik7CisJCQl4LT50eF9wcm9jZXNzX3N0b3BwZWRfaXJxKys7CisJCQlyZXQgPSB0eF9oYXJkX2Vycm9yOworCQl9CisJCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfRkJJKSkgeworCQkJREJHKElORk8sICJmYXRhbCBidXMgZXJyb3JcbiIpOworCQkJeC0+ZmF0YWxfYnVzX2Vycm9yX2lycSsrOworCQkJcmV0ID0gdHhfaGFyZF9lcnJvcjsKKwkJfQorCX0KKwkvKiBUWC9SWCBOT1JNQUwgaW50ZXJydXB0cyAqLworCWlmIChpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfTklTKSB7CisJCXgtPm5vcm1hbF9pcnFfbisrOworCQlpZiAobGlrZWx5KChpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUkkpIHx8CisJCQkgKGludHJfc3RhdHVzICYgKERNQV9TVEFUVVNfVEkpKSkpCisJCQkJcmV0ID0gaGFuZGxlX3R4X3J4OworCX0KKwkvKiBPcHRpb25hbCBoYXJkd2FyZSBibG9ja3MsIGludGVycnVwdHMgc2hvdWxkIGJlIGRpc2FibGVkICovCisJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYKKwkJICAgICAoRE1BX1NUQVRVU19HUEkgfCBETUFfU1RBVFVTX0dNSSB8IERNQV9TVEFUVVNfR0xJKSkpCisJCXByX2luZm8oIiVzOiB1bmV4cGVjdGVkIHN0YXR1cyAlMDh4XG4iLCBfX2Z1bmNfXywgaW50cl9zdGF0dXMpOworCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgYnkgd3JpdGluZyBhIGxvZ2ljIDEgdG8gdGhlIENTUjVbMTUtMF0gKi8KKwl3cml0ZWwoKGludHJfc3RhdHVzICYgMHgxZmZmZiksIGlvYWRkciArIERNQV9TVEFUVVMpOworCisJREJHKElORk8sICJcblxuIik7CisJcmV0dXJuIHJldDsKK30KKworCit2b2lkIHN0bW1hY19zZXRfbWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHU4IGFkZHJbNl0sCisJCQkgdW5zaWduZWQgaW50IGhpZ2gsIHVuc2lnbmVkIGludCBsb3cpCit7CisJdW5zaWduZWQgbG9uZyBkYXRhOworCisJZGF0YSA9IChhZGRyWzVdIDw8IDgpIHwgYWRkcls0XTsKKwl3cml0ZWwoZGF0YSwgaW9hZGRyICsgaGlnaCk7CisJZGF0YSA9IChhZGRyWzNdIDw8IDI0KSB8IChhZGRyWzJdIDw8IDE2KSB8IChhZGRyWzFdIDw8IDgpIHwgYWRkclswXTsKKwl3cml0ZWwoZGF0YSwgaW9hZGRyICsgbG93KTsKKworCXJldHVybjsKK30KKwordm9pZCBzdG1tYWNfZ2V0X21hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAorCQkJIHVuc2lnbmVkIGludCBoaWdoLCB1bnNpZ25lZCBpbnQgbG93KQoreworCXVuc2lnbmVkIGludCBoaV9hZGRyLCBsb19hZGRyOworCisJLyogUmVhZCB0aGUgTUFDIGFkZHJlc3MgZnJvbSB0aGUgaGFyZHdhcmUgKi8KKwloaV9hZGRyID0gcmVhZGwoaW9hZGRyICsgaGlnaCk7CisJbG9fYWRkciA9IHJlYWRsKGlvYWRkciArIGxvdyk7CisKKwkvKiBFeHRyYWN0IHRoZSBNQUMgYWRkcmVzcyBmcm9tIHRoZSBoaWdoIGFuZCBsb3cgd29yZHMgKi8KKwlhZGRyWzBdID0gbG9fYWRkciAmIDB4ZmY7CisJYWRkclsxXSA9IChsb19hZGRyID4+IDgpICYgMHhmZjsKKwlhZGRyWzJdID0gKGxvX2FkZHIgPj4gMTYpICYgMHhmZjsKKwlhZGRyWzNdID0gKGxvX2FkZHIgPj4gMjQpICYgMHhmZjsKKwlhZGRyWzRdID0gaGlfYWRkciAmIDB4ZmY7CisJYWRkcls1XSA9IChoaV9hZGRyID4+IDgpICYgMHhmZjsKKworCXJldHVybjsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL2dtYWMuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9nbWFjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyNTg2ZWUuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL2dtYWMuYworKysgL2Rldi9udWxsCkBAIC0xLDY5MyArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBUaGlzIGlzIHRoZSBkcml2ZXIgZm9yIHRoZSBHTUFDIG9uLWNoaXAgRXRoZXJuZXQgY29udHJvbGxlciBmb3IgU1QgU29Dcy4KLSAgRFdDIEV0aGVyIE1BQyAxMC8xMDAvMTAwMCBVbml2ZXJzYWwgdmVyc2lvbiAzLjQxYSAgaGFzIGJlZW4gdXNlZCBmb3IKLSAgZGV2ZWxvcGluZyB0aGlzIGNvZGUuCi0KLSAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgIFNUTWljcm9lbGVjdHJvbmljcyBMdGQKLQotICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAotICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotCi0gIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCi0gIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKLSAgbW9yZSBkZXRhaWxzLgotCi0gIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCi0KLSAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KLSAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KLQotICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgotI2luY2x1ZGUgPGxpbnV4L21paS5oPgotI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgotCi0jaW5jbHVkZSAic3RtbWFjLmgiCi0jaW5jbHVkZSAiZ21hYy5oIgotCi0jdW5kZWYgR01BQ19ERUJVRwotLyojZGVmaW5lIEdNQUNfREVCVUcqLwotI3VuZGVmIEZSQU1FX0ZJTFRFUl9ERUJVRwotLyojZGVmaW5lIEZSQU1FX0ZJTFRFUl9ERUJVRyovCi0jaWZkZWYgR01BQ19ERUJVRwotI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSAgcHJpbnRrKGZtdCwgIyMgYXJncykKLSNlbHNlCi0jZGVmaW5lIERCRyhmbXQsIGFyZ3MuLi4pICBkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQotc3RhdGljIHZvaWQgZ21hY19kdW1wX3JlZ3ModW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JaW50IGk7Ci0JcHJfaW5mbygiXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCi0JICAgICAgICJcdCAgR01BQyByZWdpc3RlcnMgKGJhc2UgYWRkciA9IDB4JTh4KVxuIgotCSAgICAgICAiXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iLAotCSAgICAgICAodW5zaWduZWQgaW50KWlvYWRkcik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNTU7IGkrKykgewotCQlpbnQgb2Zmc2V0ID0gaSAqIDQ7Ci0JCXByX2luZm8oIlx0UmVnIE5vLiAlZCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsIGksCi0JCSAgICAgICBvZmZzZXQsIHJlYWRsKGlvYWRkciArIG9mZnNldCkpOwotCX0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbnQgZ21hY19kbWFfaW5pdCh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHBibCwgdTMyIGRtYV90eCwgdTMyIGRtYV9yeCkKLXsKLQl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBETUFfQlVTX01PREUpOwotCS8qIERNQSBTVyByZXNldCAqLwotCXZhbHVlIHw9IERNQV9CVVNfTU9ERV9TRlRfUkVTRVQ7Ci0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBETUFfQlVTX01PREUpOwotCWRvIHt9IHdoaWxlICgocmVhZGwoaW9hZGRyICsgRE1BX0JVU19NT0RFKSAmIERNQV9CVVNfTU9ERV9TRlRfUkVTRVQpKTsKLQotCXZhbHVlID0gLyogRE1BX0JVU19NT0RFX0ZCIHwgKi8gRE1BX0JVU19NT0RFXzRQQkwgfAotCSAgICAoKHBibCA8PCBETUFfQlVTX01PREVfUEJMX1NISUZUKSB8Ci0JICAgICAocGJsIDw8IERNQV9CVVNfTU9ERV9SUEJMX1NISUZUKSk7Ci0KLSNpZmRlZiBDT05GSUdfU1RNTUFDX0RBCi0JdmFsdWUgfD0gRE1BX0JVU19NT0RFX0RBOwkvKiBSeCBoYXMgcHJpb3JpdHkgb3ZlciB0eCAqLwotI2VuZGlmCi0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBETUFfQlVTX01PREUpOwotCi0JLyogTWFzayBpbnRlcnJ1cHRzIGJ5IHdyaXRpbmcgdG8gQ1NSNyAqLwotCXdyaXRlbChETUFfSU5UUl9ERUZBVUxUX01BU0ssIGlvYWRkciArIERNQV9JTlRSX0VOQSk7Ci0KLQkvKiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBSWC9UWCBkZXNjcmlwdG9yIGxpc3RzIG11c3QgYmUgd3JpdHRlbiBpbnRvCi0JICogRE1BIENTUjMgYW5kIENTUjQsIHJlc3BlY3RpdmVseS4gKi8KLQl3cml0ZWwoZG1hX3R4LCBpb2FkZHIgKyBETUFfVFhfQkFTRV9BRERSKTsKLQl3cml0ZWwoZG1hX3J4LCBpb2FkZHIgKyBETUFfUkNWX0JBU0VfQUREUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogVHJhbnNtaXQgRklGTyBmbHVzaCBvcGVyYXRpb24gKi8KLXN0YXRpYyB2b2lkIGdtYWNfZmx1c2hfdHhfZmlmbyh1bnNpZ25lZCBsb25nIGlvYWRkcikKLXsKLQl1MzIgY3NyNiA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKLQl3cml0ZWwoKGNzcjYgfCBETUFfQ09OVFJPTF9GVEYpLCBpb2FkZHIgKyBETUFfQ09OVFJPTCk7Ci0KLQlkbyB7fSB3aGlsZSAoKHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKSAmIERNQV9DT05UUk9MX0ZURikpOwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2RtYV9vcGVyYXRpb25fbW9kZSh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHR4bW9kZSwKLQkJCQkgICAgaW50IHJ4bW9kZSkKLXsKLQl1MzIgY3NyNiA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKLQotCWlmICh0eG1vZGUgPT0gU0ZfRE1BX01PREUpIHsKLQkJREJHKEtFUk5fREVCVUcgIkdNQUM6IGVuYWJsaW5nIFRYIHN0b3JlIGFuZCBmb3J3YXJkIG1vZGVcbiIpOwotCQkvKiBUcmFuc21pdCBDT0UgdHlwZSAyIGNhbm5vdCBiZSBkb25lIGluIGN1dC10aHJvdWdoIG1vZGUuICovCi0JCWNzcjYgfD0gRE1BX0NPTlRST0xfVFNGOwotCQkvKiBPcGVyYXRpbmcgb24gc2Vjb25kIGZyYW1lIGluY3JlYXNlIHRoZSBwZXJmb3JtYW5jZQotCQkgKiBlc3BlY2lhbGx5IHdoZW4gdHJhbnNtaXQgc3RvcmUtYW5kLWZvcndhcmQgaXMgdXNlZC4qLwotCQljc3I2IHw9IERNQV9DT05UUk9MX09TRjsKLQl9IGVsc2UgewotCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogZGlzYWJsaW5nIFRYIHN0b3JlIGFuZCBmb3J3YXJkIG1vZGUiCi0JCQkgICAgICAiICh0aHJlc2hvbGQgPSAlZClcbiIsIHR4bW9kZSk7Ci0JCWNzcjYgJj0gfkRNQV9DT05UUk9MX1RTRjsKLQkJY3NyNiAmPSBETUFfQ09OVFJPTF9UQ19UWF9NQVNLOwotCQkvKiBTZXQgdGhlIHRyYW5zbWl0IHRocmVzaG9sZCAqLwotCQlpZiAodHhtb2RlIDw9IDMyKQotCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMzI7Ci0JCWVsc2UgaWYgKHR4bW9kZSA8PSA2NCkKLQkJCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzY0OwotCQllbHNlIGlmICh0eG1vZGUgPD0gMTI4KQotCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTI4OwotCQllbHNlIGlmICh0eG1vZGUgPD0gMTkyKQotCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTkyOwotCQllbHNlCi0JCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ18yNTY7Ci0JfQotCi0JaWYgKHJ4bW9kZSA9PSBTRl9ETUFfTU9ERSkgewotCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogZW5hYmxpbmcgUlggc3RvcmUgYW5kIGZvcndhcmQgbW9kZVxuIik7Ci0JCWNzcjYgfD0gRE1BX0NPTlRST0xfUlNGOwotCX0gZWxzZSB7Ci0JCURCRyhLRVJOX0RFQlVHICJHTUFDOiBkaXNhYmxpbmcgUlggc3RvcmUgYW5kIGZvcndhcmQgbW9kZSIKLQkJCSAgICAgICIgKHRocmVzaG9sZCA9ICVkKVxuIiwgcnhtb2RlKTsKLQkJY3NyNiAmPSB+RE1BX0NPTlRST0xfUlNGOwotCQljc3I2ICY9IERNQV9DT05UUk9MX1RDX1JYX01BU0s7Ci0JCWlmIChyeG1vZGUgPD0gMzIpCi0JCQljc3I2IHw9IERNQV9DT05UUk9MX1JUQ18zMjsKLQkJZWxzZSBpZiAocnhtb2RlIDw9IDY0KQotCQkJY3NyNiB8PSBETUFfQ09OVFJPTF9SVENfNjQ7Ci0JCWVsc2UgaWYgKHJ4bW9kZSA8PSA5NikKLQkJCWNzcjYgfD0gRE1BX0NPTlRST0xfUlRDXzk2OwotCQllbHNlCi0JCQljc3I2IHw9IERNQV9DT05UUk9MX1JUQ18xMjg7Ci0JfQotCi0Jd3JpdGVsKGNzcjYsIGlvYWRkciArIERNQV9DT05UUk9MKTsKLQlyZXR1cm47Ci19Ci0KLS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgLS0tIG5vIFJNT04gbW9kdWxlICovCi1zdGF0aWMgdm9pZCBnbWFjX2RtYV9kaWFnbm9zdGljX2ZyKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCi0JCQkJICAgdW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2R1bXBfZG1hX3JlZ3ModW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JaW50IGk7Ci0JcHJfaW5mbygiIERNQSByZWdpc3RlcnNcbiIpOwotCWZvciAoaSA9IDA7IGkgPCAyMjsgaSsrKSB7Ci0JCWlmICgoaSA8IDkpIHx8IChpID4gMTcpKSB7Ci0JCQlpbnQgb2Zmc2V0ID0gaSAqIDQ7Ci0JCQlwcl9lcnIoIlx0IFJlZyBOby4gJWQgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBpLAotCQkJICAgICAgIChETUFfQlVTX01PREUgKyBvZmZzZXQpLAotCQkJICAgICAgIHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSArIG9mZnNldCkpOwotCQl9Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIGludCBnbWFjX2dldF90eF9mcmFtZV9zdGF0dXModm9pZCAqZGF0YSwgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKLQkJCQkgICAgc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBsb25nIGlvYWRkcikKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOwotCi0JaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5lcnJvcl9zdW1tYXJ5KSkgewotCQlEQkcoS0VSTl9FUlIgIkdNQUMgVFggZXJyb3IuLi4gMHglMDh4XG4iLCBwLT5kZXMwMS5ldHgpOwotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmphYmJlcl90aW1lb3V0KSkgewotCQkJREJHKEtFUk5fRVJSICJcdGphYmJlcl90aW1lb3V0IGVycm9yXG4iKTsKLQkJCXgtPnR4X2phYmJlcisrOwotCQl9Ci0KLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5mcmFtZV9mbHVzaGVkKSkgewotCQkJREJHKEtFUk5fRVJSICJcdGZyYW1lX2ZsdXNoZWQgZXJyb3JcbiIpOwotCQkJeC0+dHhfZnJhbWVfZmx1c2hlZCsrOwotCQkJZ21hY19mbHVzaF90eF9maWZvKGlvYWRkcik7Ci0JCX0KLQotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4Lmxvc3NfY2FycmllcikpIHsKLQkJCURCRyhLRVJOX0VSUiAiXHRsb3NzX2NhcnJpZXIgZXJyb3JcbiIpOwotCQkJeC0+dHhfbG9zc2NhcnJpZXIrKzsKLQkJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOwotCQl9Ci0JCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgubm9fY2FycmllcikpIHsKLQkJCURCRyhLRVJOX0VSUiAiXHRub19jYXJyaWVyIGVycm9yXG4iKTsKLQkJCXgtPnR4X2NhcnJpZXIrKzsKLQkJCXN0YXRzLT50eF9jYXJyaWVyX2Vycm9ycysrOwotCQl9Ci0JCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgubGF0ZV9jb2xsaXNpb24pKSB7Ci0JCQlEQkcoS0VSTl9FUlIgIlx0bGF0ZV9jb2xsaXNpb24gZXJyb3JcbiIpOwotCQkJc3RhdHMtPmNvbGxpc2lvbnMgKz0gcC0+ZGVzMDEuZXR4LmNvbGxpc2lvbl9jb3VudDsKLQkJfQotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmV4Y2Vzc2l2ZV9jb2xsaXNpb25zKSkgewotCQkJREJHKEtFUk5fRVJSICJcdGV4Y2Vzc2l2ZV9jb2xsaXNpb25zXG4iKTsKLQkJCXN0YXRzLT5jb2xsaXNpb25zICs9IHAtPmRlczAxLmV0eC5jb2xsaXNpb25fY291bnQ7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC5leGNlc3NpdmVfZGVmZXJyYWwpKSB7Ci0JCQlEQkcoS0VSTl9JTkZPICJcdGV4Y2Vzc2l2ZSB0eF9kZWZlcnJhbFxuIik7Ci0JCQl4LT50eF9kZWZlcnJlZCsrOwotCQl9Ci0KLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmV0eC51bmRlcmZsb3dfZXJyb3IpKSB7Ci0JCQlEQkcoS0VSTl9FUlIgIlx0dW5kZXJmbG93IGVycm9yXG4iKTsKLQkJCWdtYWNfZmx1c2hfdHhfZmlmbyhpb2FkZHIpOwotCQkJeC0+dHhfdW5kZXJmbG93Kys7Ci0JCX0KLQotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXR4LmlwX2hlYWRlcl9lcnJvcikpIHsKLQkJCURCRyhLRVJOX0VSUiAiXHRUWCBJUCBoZWFkZXIgY3N1bSBlcnJvclxuIik7Ci0JCQl4LT50eF9pcF9oZWFkZXJfZXJyb3IrKzsKLQkJfQotCi0JCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHgucGF5bG9hZF9lcnJvcikpIHsKLQkJCURCRyhLRVJOX0VSUiAiXHRBZGRyL1BheWxvYWQgY3N1bSBlcnJvclxuIik7Ci0JCQl4LT50eF9wYXlsb2FkX2Vycm9yKys7Ci0JCQlnbWFjX2ZsdXNoX3R4X2ZpZm8oaW9hZGRyKTsKLQkJfQotCi0JCXJldCA9IC0xOwotCX0KLQotCWlmICh1bmxpa2VseShwLT5kZXMwMS5ldHguZGVmZXJyZWQpKSB7Ci0JCURCRyhLRVJOX0lORk8gIkdNQUMgVFggc3RhdHVzOiB0eCBkZWZlcnJlZFxuIik7Ci0JCXgtPnR4X2RlZmVycmVkKys7Ci0JfQotI2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VECi0JaWYgKHAtPmRlczAxLmV0eC52bGFuX2ZyYW1lKSB7Ci0JCURCRyhLRVJOX0lORk8gIkdNQUMgVFggc3RhdHVzOiBWTEFOIGZyYW1lXG4iKTsKLQkJeC0+dHhfdmxhbisrOwotCX0KLSNlbmRpZgotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBnbWFjX2dldF90eF9sZW4oc3RydWN0IGRtYV9kZXNjICpwKQotewotCXJldHVybiBwLT5kZXMwMS5ldHguYnVmZmVyMV9zaXplOwotfQotCi1zdGF0aWMgaW50IGdtYWNfY29lX3JkZXMwKGludCBpcGNfZXJyLCBpbnQgdHlwZSwgaW50IHBheWxvYWRfZXJyKQotewotCWludCByZXQgPSBnb29kX2ZyYW1lOwotCXUzMiBzdGF0dXMgPSAodHlwZSA8PCAyIHwgaXBjX2VyciA8PCAxIHwgcGF5bG9hZF9lcnIpICYgMHg3OwotCi0JLyogYml0cyA1IDcgMCB8IEZyYW1lIHN0YXR1cwotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiAgICAgIDAgMCAwIHwgSUVFRSA4MDIuMyBUeXBlIGZyYW1lIChsZW5naHQgPCAxNTM2IG9jdGVjdHMpCi0JICogICAgICAxIDAgMCB8IElQdjQvNiBObyBDU1VNIGVycm9yUy4KLQkgKiAgICAgIDEgMCAxIHwgSVB2NC82IENTVU0gUEFZTE9BRCBlcnJvcgotCSAqICAgICAgMSAxIDAgfCBJUHY0LzYgQ1NVTSBJUCBIUiBlcnJvcgotCSAqICAgICAgMSAxIDEgfCBJUHY0LzYgSVAgUEFZTE9BRCBBTkQgSEVBREVSIGVycm9yUwotCSAqICAgICAgMCAwIDEgfCBJUHY0LzYgdW5zdXBwb3J0ZWQgSVAgUEFZTE9BRAotCSAqICAgICAgMCAxIDEgfCBDT0UgYnlwYXNzZWQuLiBubyBJUHY0LzYgZnJhbWUKLQkgKiAgICAgIDAgMSAwIHwgUmVzZXJ2ZWQuCi0JICovCi0JaWYgKHN0YXR1cyA9PSAweDApIHsKLQkJREJHKEtFUk5fSU5GTyAiUlggRGVzMCBzdGF0dXM6IElFRUUgODAyLjMgVHlwZSBmcmFtZS5cbiIpOwotCQlyZXQgPSBnb29kX2ZyYW1lOwotCX0gZWxzZSBpZiAoc3RhdHVzID09IDB4NCkgewotCQlEQkcoS0VSTl9JTkZPICJSWCBEZXMwIHN0YXR1czogSVB2NC82IE5vIENTVU0gZXJyb3JTLlxuIik7Ci0JCXJldCA9IGdvb2RfZnJhbWU7Ci0JfSBlbHNlIGlmIChzdGF0dXMgPT0gMHg1KSB7Ci0JCURCRyhLRVJOX0VSUiAiUlggRGVzMCBzdGF0dXM6IElQdjQvNiBQYXlsb2FkIEVycm9yLlxuIik7Ci0JCXJldCA9IGNzdW1fbm9uZTsKLQl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDYpIHsKLQkJREJHKEtFUk5fRVJSICJSWCBEZXMwIHN0YXR1czogSVB2NC82IEhlYWRlciBFcnJvci5cbiIpOwotCQlyZXQgPSBjc3VtX25vbmU7Ci0JfSBlbHNlIGlmIChzdGF0dXMgPT0gMHg3KSB7Ci0JCURCRyhLRVJOX0VSUgotCQkgICAgIlJYIERlczAgc3RhdHVzOiBJUHY0LzYgSGVhZGVyIGFuZCBQYXlsb2FkIEVycm9yLlxuIik7Ci0JCXJldCA9IGNzdW1fbm9uZTsKLQl9IGVsc2UgaWYgKHN0YXR1cyA9PSAweDEpIHsKLQkJREJHKEtFUk5fRVJSCi0JCSAgICAiUlggRGVzMCBzdGF0dXM6IElQdjQvNiB1bnN1cHBvcnRlZCBJUCBQQVlMT0FELlxuIik7Ci0JCXJldCA9IGRpc2NhcmRfZnJhbWU7Ci0JfSBlbHNlIGlmIChzdGF0dXMgPT0gMHgzKSB7Ci0JCURCRyhLRVJOX0VSUiAiUlggRGVzMCBzdGF0dXM6IE5vIElQdjQsIElQdjYgZnJhbWUuXG4iKTsKLQkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBnbWFjX2dldF9yeF9mcmFtZV9zdGF0dXModm9pZCAqZGF0YSwgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKLQkJCQkgICAgc3RydWN0IGRtYV9kZXNjICpwKQotewotCWludCByZXQgPSBnb29kX2ZyYW1lOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IChzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqKWRhdGE7Ci0KLQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmVycm9yX3N1bW1hcnkpKSB7Ci0JCURCRyhLRVJOX0VSUiAiR01BQyBSWCBFcnJvciBTdW1tYXJ5Li4uIDB4JTA4eFxuIiwgcC0+ZGVzMDEuZXJ4KTsKLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5kZXNjcmlwdG9yX2Vycm9yKSkgewotCQkJREJHKEtFUk5fRVJSICJcdGRlc2NyaXB0b3IgZXJyb3JcbiIpOwotCQkJeC0+cnhfZGVzYysrOwotCQkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJfQotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4Lm92ZXJmbG93X2Vycm9yKSkgewotCQkJREJHKEtFUk5fRVJSICJcdG92ZXJmbG93IGVycm9yXG4iKTsKLQkJCXgtPnJ4X2dtYWNfb3ZlcmZsb3crKzsKLQkJfQotCi0JCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcnguaXBjX2NzdW1fZXJyb3IpKQotCQkJREJHKEtFUk5fRVJSICJcdElQQyBDc3VtIEVycm9yL0dpYW50IGZyYW1lXG4iKTsKLQotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmxhdGVfY29sbGlzaW9uKSkgewotCQkJREJHKEtFUk5fRVJSICJcdGxhdGVfY29sbGlzaW9uIGVycm9yXG4iKTsKLQkJCXN0YXRzLT5jb2xsaXNpb25zKys7Ci0JCQlzdGF0cy0+Y29sbGlzaW9ucysrOwotCQl9Ci0JCWlmICh1bmxpa2VseShwLT5kZXMwMS5lcngucmVjZWl2ZV93YXRjaGRvZykpIHsKLQkJCURCRyhLRVJOX0VSUiAiXHRyZWNlaXZlX3dhdGNoZG9nIGVycm9yXG4iKTsKLQkJCXgtPnJ4X3dhdGNoZG9nKys7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5lcnJvcl9nbWlpKSkgewotCQkJREJHKEtFUk5fRVJSICJcdFJlY2VpdmUgRXJyb3JcbiIpOwotCQkJeC0+cnhfbWlpKys7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5jcmNfZXJyb3IpKSB7Ci0JCQlEQkcoS0VSTl9FUlIgIlx0Q1JDIGVycm9yXG4iKTsKLQkJCXgtPnJ4X2NyYysrOwotCQkJc3RhdHMtPnJ4X2NyY19lcnJvcnMrKzsKLQkJfQotCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOwotCX0KLQotCS8qIEFmdGVyIGEgcGF5bG9hZCBjc3VtIGVycm9yLCB0aGUgRVMgYml0IGlzIHNldC4KLQkgKiBJdCBkb2Vzbid0IG1hdGNoIHdpdGggdGhlIGluZm9ybWF0aW9uIHJlcG9ydGVkIGludG8gdGhlIGRhdGFib29rLgotCSAqIEF0IGFueSByYXRlLCB3ZSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIENTVU0gaHcgY29tcHV0YXRpb24gaXMgb2sKLQkgKiBhbmQgcmVwb3J0IHRoaXMgaW5mbyB0byB0aGUgdXBwZXIgbGF5ZXJzLiAqLwotCXJldCA9IGdtYWNfY29lX3JkZXMwKHAtPmRlczAxLmVyeC5pcGNfY3N1bV9lcnJvciwKLQkJcC0+ZGVzMDEuZXJ4LmZyYW1lX3R5cGUsIHAtPmRlczAxLmVyeC5wYXlsb2FkX2NzdW1fZXJyb3IpOwotCi0JaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5kcmliYmxpbmcpKSB7Ci0JCURCRyhLRVJOX0VSUiAiR01BQyBSWDogZHJpYmJsaW5nIGVycm9yXG4iKTsKLQkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKLQl9Ci0JaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5zYV9maWx0ZXJfZmFpbCkpIHsKLQkJREJHKEtFUk5fRVJSICJHTUFDIFJYIDogU291cmNlIEFkZHJlc3MgZmlsdGVyIGZhaWxcbiIpOwotCQl4LT5zYV9yeF9maWx0ZXJfZmFpbCsrOwotCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOwotCX0KLQlpZiAodW5saWtlbHkocC0+ZGVzMDEuZXJ4LmRhX2ZpbHRlcl9mYWlsKSkgewotCQlEQkcoS0VSTl9FUlIgIkdNQUMgUlggOiBEZXN0aW5hdGlvbiBBZGRyZXNzIGZpbHRlciBmYWlsXG4iKTsKLQkJeC0+ZGFfcnhfZmlsdGVyX2ZhaWwrKzsKLQkJcmV0ID0gZGlzY2FyZF9mcmFtZTsKLQl9Ci0JaWYgKHVubGlrZWx5KHAtPmRlczAxLmVyeC5sZW5ndGhfZXJyb3IpKSB7Ci0JCURCRyhLRVJOX0VSUiAiR01BQyBSWDogbGVuZ3RoX2Vycm9yIGVycm9yXG4iKTsKLQkJeC0+cnhfbGVuZ2h0Kys7Ci0JCXJldCA9IGRpc2NhcmRfZnJhbWU7Ci0JfQotI2lmZGVmIFNUTU1BQ19WTEFOX1RBR19VU0VECi0JaWYgKHAtPmRlczAxLmVyeC52bGFuX3RhZykgewotCQlEQkcoS0VSTl9JTkZPICJHTUFDIFJYOiBWTEFOIGZyYW1lIHRhZ2dlZFxuIik7Ci0JCXgtPnJ4X3ZsYW4rKzsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2lycV9zdGF0dXModW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JdTMyIGludHJfc3RhdHVzID0gcmVhZGwoaW9hZGRyICsgR01BQ19JTlRfU1RBVFVTKTsKLQotCS8qIE5vdCB1c2VkIGV2ZW50cyAoZS5nLiBNTUMgaW50ZXJydXB0cykgYXJlIG5vdCBoYW5kbGVkLiAqLwotCWlmICgoaW50cl9zdGF0dXMgJiBtbWNfdHhfaXJxKSkKLQkJREJHKEtFUk5fREVCVUcgIkdNQUM6IE1NQyB0eCBpbnRlcnJ1cHQ6IDB4JTA4eFxuIiwKLQkJICAgIHJlYWRsKGlvYWRkciArIEdNQUNfTU1DX1RYX0lOVFIpKTsKLQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBtbWNfcnhfaXJxKSkKLQkJREJHKEtFUk5fREVCVUcgIkdNQUM6IE1NQyByeCBpbnRlcnJ1cHQ6IDB4JTA4eFxuIiwKLQkJICAgIHJlYWRsKGlvYWRkciArIEdNQUNfTU1DX1JYX0lOVFIpKTsKLQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBtbWNfcnhfY3N1bV9vZmZsb2FkX2lycSkpCi0JCURCRyhLRVJOX0RFQlVHICJHTUFDOiBNTUMgcnggY3N1bSBvZmZsb2FkOiAweCUwOHhcbiIsCi0JCSAgICByZWFkbChpb2FkZHIgKyBHTUFDX01NQ19SWF9DU1VNX09GRkxPQUQpKTsKLQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBwbXRfaXJxKSkgewotCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogcmVjZWl2ZWQgTWFnaWMgZnJhbWVcbiIpOwotCQkvKiBjbGVhciB0aGUgUE1UIGJpdHMgNSBhbmQgNiBieSByZWFkaW5nIHRoZSBQTVQKLQkJICogc3RhdHVzIHJlZ2lzdGVyLiAqLwotCQlyZWFkbChpb2FkZHIgKyBHTUFDX1BNVCk7Ci0JfQotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2NvcmVfaW5pdCh1bnNpZ25lZCBsb25nIGlvYWRkcikKLXsKLQl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBHTUFDX0NPTlRST0wpOwotCXZhbHVlIHw9IEdNQUNfQ09SRV9JTklUOwotCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgR01BQ19DT05UUk9MKTsKLQotCS8qIFNUQnVzIEJyaWRnZSBDb25maWd1cmF0aW9uICovCi0JLyp3cml0ZWwoMHhjNTYwOCwgaW9hZGRyICsgMHgwMDAwNzAwMCk7Ki8KLQotCS8qIEZyZWV6ZSBNTUMgY291bnRlcnMgKi8KLQl3cml0ZWwoMHg4LCBpb2FkZHIgKyBHTUFDX01NQ19DVFJMKTsKLQkvKiBNYXNrIEdNQUMgaW50ZXJydXB0cyAqLwotCXdyaXRlbCgweDIwNywgaW9hZGRyICsgR01BQ19JTlRfTUFTSyk7Ci0KLSNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAotCS8qIFRhZyBkZXRlY3Rpb24gd2l0aG91dCBmaWx0ZXJpbmcgKi8KLQl3cml0ZWwoMHgwLCBpb2FkZHIgKyBHTUFDX1ZMQU5fVEFHKTsKLSNlbmRpZgotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19zZXRfdW1hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAotCQkJCXVuc2lnbmVkIGludCByZWdfbikKLXsKLQlzdG1tYWNfc2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgR01BQ19BRERSX0hJR0gocmVnX24pLAotCQkJCUdNQUNfQUREUl9MT1cocmVnX24pKTsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19nZXRfdW1hY19hZGRyKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBjaGFyICphZGRyLAotCQkJCXVuc2lnbmVkIGludCByZWdfbikKLXsKLQlzdG1tYWNfZ2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgR01BQ19BRERSX0hJR0gocmVnX24pLAotCQkJCUdNQUNfQUREUl9MT1cocmVnX24pKTsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19zZXRfZmlsdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0JdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKLQl1bnNpZ25lZCBpbnQgdmFsdWUgPSAwOwotCi0JREJHKEtFUk5fSU5GTyAiJXM6ICMgbWNhc3RzICVkLCAjIHVuaWNhc3QgJWRcbiIsCi0JICAgIF9fZnVuY19fLCBkZXYtPm1jX2NvdW50LCBkZXYtPnVjX2NvdW50KTsKLQotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpCi0JCXZhbHVlID0gR01BQ19GUkFNRV9GSUxURVJfUFI7Ci0JZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBIQVNIX1RBQkxFX1NJWkUpCi0JCSAgIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewotCQl2YWx1ZSA9IEdNQUNfRlJBTUVfRklMVEVSX1BNOwkvKiBwYXNzIGFsbCBtdWx0aSAqLwotCQl3cml0ZWwoMHhmZmZmZmZmZiwgaW9hZGRyICsgR01BQ19IQVNIX0hJR0gpOwotCQl3cml0ZWwoMHhmZmZmZmZmZiwgaW9hZGRyICsgR01BQ19IQVNIX0xPVyk7Ci0JfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gMCkgewotCQlpbnQgaTsKLQkJdTMyIG1jX2ZpbHRlclsyXTsKLQkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7Ci0KLQkJLyogSGFzaCBmaWx0ZXIgZm9yIG11bHRpY2FzdCAqLwotCQl2YWx1ZSA9IEdNQUNfRlJBTUVfRklMVEVSX0hNQzsKLQotCQltZW1zZXQobWNfZmlsdGVyLCAwLCBzaXplb2YobWNfZmlsdGVyKSk7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsKLQkJICAgICBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7Ci0JCQkvKiBUaGUgdXBwZXIgNiBiaXRzIG9mIHRoZSBjYWxjdWxhdGVkIENSQyBhcmUgdXNlZCB0bwotCQkJICAgaW5kZXggdGhlIGNvbnRlbnMgb2YgdGhlIGhhc2ggdGFibGUgKi8KLQkJCWludCBiaXRfbnIgPQotCQkJICAgIGJpdHJldjMyKH5jcmMzMl9sZSh+MCwgbWNsaXN0LT5kbWlfYWRkciwgNikpID4+IDI2OwotCQkJLyogVGhlIG1vc3Qgc2lnbmlmaWNhbnQgYml0IGRldGVybWluZXMgdGhlIHJlZ2lzdGVyIHRvCi0JCQkgKiB1c2UgKEgvTCkgd2hpbGUgdGhlIG90aGVyIDUgYml0cyBkZXRlcm1pbmUgdGhlIGJpdAotCQkJICogd2l0aGluIHRoZSByZWdpc3Rlci4gKi8KLQkJCW1jX2ZpbHRlcltiaXRfbnIgPj4gNV0gfD0gMSA8PCAoYml0X25yICYgMzEpOwotCQl9Ci0JCXdyaXRlbChtY19maWx0ZXJbMF0sIGlvYWRkciArIEdNQUNfSEFTSF9MT1cpOwotCQl3cml0ZWwobWNfZmlsdGVyWzFdLCBpb2FkZHIgKyBHTUFDX0hBU0hfSElHSCk7Ci0JfQotCi0JLyogSGFuZGxlIG11bHRpcGxlIHVuaWNhc3QgYWRkcmVzc2VzIChwZXJmZWN0IGZpbHRlcmluZykqLwotCWlmIChkZXYtPnVjX2NvdW50ID4gR01BQ19NQVhfVU5JQ0FTVF9BRERSRVNTRVMpCi0JCS8qIFN3aXRjaCB0byBwcm9taXNjdW91cyBtb2RlIGlzIG1vcmUgdGhhbiAxNiBhZGRycwotCQkgICBhcmUgcmVxdWlyZWQgKi8KLQkJdmFsdWUgfD0gR01BQ19GUkFNRV9GSUxURVJfUFI7Ci0JZWxzZSB7Ci0JCWludCBpOwotCQlzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqdWNfcHRyID0gZGV2LT51Y19saXN0OwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT51Y19jb3VudDsgaSsrKSB7Ci0JCQkJZ21hY19zZXRfdW1hY19hZGRyKGlvYWRkciwgdWNfcHRyLT5kYV9hZGRyLAotCQkJCQkJaSArIDEpOwotCi0JCQkJREJHKEtFUk5fSU5GTyAiXHQlZCAiCi0JCQkJIi0gVW5pY2FzdCBhZGRyICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDoiCi0JCQkJIiUwMnhcbiIsIGkgKyAxLAotCQkJCXVjX3B0ci0+ZGFfYWRkclswXSwgdWNfcHRyLT5kYV9hZGRyWzFdLAotCQkJCXVjX3B0ci0+ZGFfYWRkclsyXSwgdWNfcHRyLT5kYV9hZGRyWzNdLAotCQkJCXVjX3B0ci0+ZGFfYWRkcls0XSwgdWNfcHRyLT5kYV9hZGRyWzVdKTsKLQkJCQl1Y19wdHIgPSB1Y19wdHItPm5leHQ7Ci0JCX0KLQl9Ci0KLSNpZmRlZiBGUkFNRV9GSUxURVJfREVCVUcKLQkvKiBFbmFibGUgUmVjZWl2ZSBhbGwgbW9kZSAodG8gZGVidWcgZmlsdGVyaW5nX2ZhaWwgZXJyb3JzKSAqLwotCXZhbHVlIHw9IEdNQUNfRlJBTUVfRklMVEVSX1JBOwotI2VuZGlmCi0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBHTUFDX0ZSQU1FX0ZJTFRFUik7Ci0KLQlEQkcoS0VSTl9JTkZPICJcdEZyYW1lIEZpbHRlciByZWc6IDB4JTA4eFxuXHRIYXNoIHJlZ3M6ICIKLQkgICAgIkhJIDB4JTA4eCwgTE8gMHglMDh4XG4iLCByZWFkbChpb2FkZHIgKyBHTUFDX0ZSQU1FX0ZJTFRFUiksCi0JICAgIHJlYWRsKGlvYWRkciArIEdNQUNfSEFTSF9ISUdIKSwgcmVhZGwoaW9hZGRyICsgR01BQ19IQVNIX0xPVykpOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2Zsb3dfY3RybCh1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgaW50IGR1cGxleCwKLQkJCSAgIHVuc2lnbmVkIGludCBmYywgdW5zaWduZWQgaW50IHBhdXNlX3RpbWUpCi17Ci0JdW5zaWduZWQgaW50IGZsb3cgPSAwOwotCi0JREJHKEtFUk5fREVCVUcgIkdNQUMgRmxvdy1Db250cm9sOlxuIik7Ci0JaWYgKGZjICYgRkxPV19SWCkgewotCQlEQkcoS0VSTl9ERUJVRyAiXHRSZWNlaXZlIEZsb3ctQ29udHJvbCBPTlxuIik7Ci0JCWZsb3cgfD0gR01BQ19GTE9XX0NUUkxfUkZFOwotCX0KLQlpZiAoZmMgJiBGTE9XX1RYKSB7Ci0JCURCRyhLRVJOX0RFQlVHICJcdFRyYW5zbWl0IEZsb3ctQ29udHJvbCBPTlxuIik7Ci0JCWZsb3cgfD0gR01BQ19GTE9XX0NUUkxfVEZFOwotCX0KLQotCWlmIChkdXBsZXgpIHsKLQkJREJHKEtFUk5fREVCVUcgIlx0ZHVwbGV4IG1vZGU6IHBhdXNlIHRpbWU6ICVkXG4iLCBwYXVzZV90aW1lKTsKLQkJZmxvdyB8PSAocGF1c2VfdGltZSA8PCBHTUFDX0ZMT1dfQ1RSTF9QVF9TSElGVCk7Ci0JfQotCi0Jd3JpdGVsKGZsb3csIGlvYWRkciArIEdNQUNfRkxPV19DVFJMKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGdtYWNfcG10KHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBsb25nIG1vZGUpCi17Ci0JdW5zaWduZWQgaW50IHBtdCA9IDA7Ci0KLQlpZiAobW9kZSA9PSBXQUtFX01BR0lDKSB7Ci0JCURCRyhLRVJOX0RFQlVHICJHTUFDOiBXT0wgTWFnaWMgZnJhbWVcbiIpOwotCQlwbXQgfD0gcG93ZXJfZG93biB8IG1hZ2ljX3BrdF9lbjsKLQl9IGVsc2UgaWYgKG1vZGUgPT0gV0FLRV9VQ0FTVCkgewotCQlEQkcoS0VSTl9ERUJVRyAiR01BQzogV09MIG9uIGdsb2JhbCB1bmljYXN0XG4iKTsKLQkJcG10IHw9IGdsb2JhbF91bmljYXN0OwotCX0KLQotCXdyaXRlbChwbXQsIGlvYWRkciArIEdNQUNfUE1UKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGdtYWNfaW5pdF9yeF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCwgdW5zaWduZWQgaW50IHJpbmdfc2l6ZSwKLQkJCQlpbnQgZGlzYWJsZV9yeF9pYykKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgcmluZ19zaXplOyBpKyspIHsKLQkJcC0+ZGVzMDEuZXJ4Lm93biA9IDE7Ci0JCXAtPmRlczAxLmVyeC5idWZmZXIxX3NpemUgPSBCVUZfU0laRV84S2lCIC0gMTsKLQkJLyogVG8gc3VwcG9ydCBqdW1ibyBmcmFtZXMgKi8KLQkJcC0+ZGVzMDEuZXJ4LmJ1ZmZlcjJfc2l6ZSA9IEJVRl9TSVpFXzhLaUIgLSAxOwotCQlpZiAoaSA9PSByaW5nX3NpemUgLSAxKQotCQkJcC0+ZGVzMDEuZXJ4LmVuZF9yaW5nID0gMTsKLQkJaWYgKGRpc2FibGVfcnhfaWMpCi0JCQlwLT5kZXMwMS5lcnguZGlzYWJsZV9pYyA9IDE7Ci0JCXArKzsKLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2luaXRfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcmluZ19zaXplOyBpKyspIHsKLQkJcC0+ZGVzMDEuZXR4Lm93biA9IDA7Ci0JCWlmIChpID09IHJpbmdfc2l6ZSAtIDEpCi0JCQlwLT5kZXMwMS5ldHguZW5kX3JpbmcgPSAxOwotCQlwKys7Ci0JfQotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IGdtYWNfZ2V0X3R4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlyZXR1cm4gcC0+ZGVzMDEuZXR4Lm93bjsKLX0KLQotc3RhdGljIGludCBnbWFjX2dldF9yeF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JcmV0dXJuIHAtPmRlczAxLmVyeC5vd247Ci19Ci0KLXN0YXRpYyB2b2lkIGdtYWNfc2V0X3R4X293bmVyKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlwLT5kZXMwMS5ldHgub3duID0gMTsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19zZXRfcnhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQotewotCXAtPmRlczAxLmVyeC5vd24gPSAxOwotfQotCi1zdGF0aWMgaW50IGdtYWNfZ2V0X3R4X2xzKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlyZXR1cm4gcC0+ZGVzMDEuZXR4Lmxhc3Rfc2VnbWVudDsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19yZWxlYXNlX3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwKQotewotCWludCB0ZXIgPSBwLT5kZXMwMS5ldHguZW5kX3Jpbmc7Ci0KLQltZW1zZXQocCwgMCwgc2l6ZW9mKHN0cnVjdCBkbWFfZGVzYykpOwotCXAtPmRlczAxLmV0eC5lbmRfcmluZyA9IHRlcjsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19wcmVwYXJlX3R4X2Rlc2Moc3RydWN0IGRtYV9kZXNjICpwLCBpbnQgaXNfZnMsIGludCBsZW4sCi0JCQkJIGludCBjc3VtX2ZsYWcpCi17Ci0JcC0+ZGVzMDEuZXR4LmZpcnN0X3NlZ21lbnQgPSBpc19mczsKLQlpZiAodW5saWtlbHkobGVuID4gQlVGX1NJWkVfNEtpQikpIHsKLQkJcC0+ZGVzMDEuZXR4LmJ1ZmZlcjFfc2l6ZSA9IEJVRl9TSVpFXzRLaUI7Ci0JCXAtPmRlczAxLmV0eC5idWZmZXIyX3NpemUgPSBsZW4gLSBCVUZfU0laRV80S2lCOwotCX0gZWxzZSB7Ci0JCXAtPmRlczAxLmV0eC5idWZmZXIxX3NpemUgPSBsZW47Ci0JfQotCWlmIChsaWtlbHkoY3N1bV9mbGFnKSkKLQkJcC0+ZGVzMDEuZXR4LmNoZWNrc3VtX2luc2VydGlvbiA9IGNpY19mdWxsOwotfQotCi1zdGF0aWMgdm9pZCBnbWFjX2NsZWFyX3R4X2ljKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlwLT5kZXMwMS5ldHguaW50ZXJydXB0ID0gMDsKLX0KLQotc3RhdGljIHZvaWQgZ21hY19jbG9zZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlwLT5kZXMwMS5ldHgubGFzdF9zZWdtZW50ID0gMTsKLQlwLT5kZXMwMS5ldHguaW50ZXJydXB0ID0gMTsKLX0KLQotc3RhdGljIGludCBnbWFjX2dldF9yeF9mcmFtZV9sZW4oc3RydWN0IGRtYV9kZXNjICpwKQotewotCXJldHVybiBwLT5kZXMwMS5lcnguZnJhbWVfbGVuZ3RoOwotfQotCi1zdHJ1Y3Qgc3RtbWFjX29wcyBnbWFjX2RyaXZlciA9IHsKLQkuY29yZV9pbml0ID0gZ21hY19jb3JlX2luaXQsCi0JLmR1bXBfbWFjX3JlZ3MgPSBnbWFjX2R1bXBfcmVncywKLQkuZG1hX2luaXQgPSBnbWFjX2RtYV9pbml0LAotCS5kdW1wX2RtYV9yZWdzID0gZ21hY19kdW1wX2RtYV9yZWdzLAotCS5kbWFfbW9kZSA9IGdtYWNfZG1hX29wZXJhdGlvbl9tb2RlLAotCS5kbWFfZGlhZ25vc3RpY19mciA9IGdtYWNfZG1hX2RpYWdub3N0aWNfZnIsCi0JLnR4X3N0YXR1cyA9IGdtYWNfZ2V0X3R4X2ZyYW1lX3N0YXR1cywKLQkucnhfc3RhdHVzID0gZ21hY19nZXRfcnhfZnJhbWVfc3RhdHVzLAotCS5nZXRfdHhfbGVuID0gZ21hY19nZXRfdHhfbGVuLAotCS5zZXRfZmlsdGVyID0gZ21hY19zZXRfZmlsdGVyLAotCS5mbG93X2N0cmwgPSBnbWFjX2Zsb3dfY3RybCwKLQkucG10ID0gZ21hY19wbXQsCi0JLmluaXRfcnhfZGVzYyA9IGdtYWNfaW5pdF9yeF9kZXNjLAotCS5pbml0X3R4X2Rlc2MgPSBnbWFjX2luaXRfdHhfZGVzYywKLQkuZ2V0X3R4X293bmVyID0gZ21hY19nZXRfdHhfb3duZXIsCi0JLmdldF9yeF9vd25lciA9IGdtYWNfZ2V0X3J4X293bmVyLAotCS5yZWxlYXNlX3R4X2Rlc2MgPSBnbWFjX3JlbGVhc2VfdHhfZGVzYywKLQkucHJlcGFyZV90eF9kZXNjID0gZ21hY19wcmVwYXJlX3R4X2Rlc2MsCi0JLmNsZWFyX3R4X2ljID0gZ21hY19jbGVhcl90eF9pYywKLQkuY2xvc2VfdHhfZGVzYyA9IGdtYWNfY2xvc2VfdHhfZGVzYywKLQkuZ2V0X3R4X2xzID0gZ21hY19nZXRfdHhfbHMsCi0JLnNldF90eF9vd25lciA9IGdtYWNfc2V0X3R4X293bmVyLAotCS5zZXRfcnhfb3duZXIgPSBnbWFjX3NldF9yeF9vd25lciwKLQkuZ2V0X3J4X2ZyYW1lX2xlbiA9IGdtYWNfZ2V0X3J4X2ZyYW1lX2xlbiwKLQkuaG9zdF9pcnFfc3RhdHVzID0gZ21hY19pcnFfc3RhdHVzLAotCS5zZXRfdW1hY19hZGRyID0gZ21hY19zZXRfdW1hY19hZGRyLAotCS5nZXRfdW1hY19hZGRyID0gZ21hY19nZXRfdW1hY19hZGRyLAotfTsKLQotc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqZ21hY19zZXR1cCh1bnNpZ25lZCBsb25nIGlvYWRkcikKLXsKLQlzdHJ1Y3QgbWFjX2RldmljZV9pbmZvICptYWM7Ci0JdTMyIHVpZCA9IHJlYWRsKGlvYWRkciArIEdNQUNfVkVSU0lPTik7Ci0KLQlwcl9pbmZvKCJcdEdNQUMgLSB1c2VyIElEOiAweCV4LCBTeW5vcHN5cyBJRDogMHgleFxuIiwKLQkgICAgICAgKCh1aWQgJiAweDAwMDBmZjAwKSA+PiA4KSwgKHVpZCAmIDB4MDAwMDAwZmYpKTsKLQotCW1hYyA9IGt6YWxsb2Moc2l6ZW9mKGNvbnN0IHN0cnVjdCBtYWNfZGV2aWNlX2luZm8pLCBHRlBfS0VSTkVMKTsKLQotCW1hYy0+b3BzID0gJmdtYWNfZHJpdmVyOwotCW1hYy0+aHcucG10ID0gUE1UX1NVUFBPUlRFRDsKLQltYWMtPmh3LmxpbmsucG9ydCA9IEdNQUNfQ09OVFJPTF9QUzsKLQltYWMtPmh3LmxpbmsuZHVwbGV4ID0gR01BQ19DT05UUk9MX0RNOwotCW1hYy0+aHcubGluay5zcGVlZCA9IEdNQUNfQ09OVFJPTF9GRVM7Ci0JbWFjLT5ody5taWkuYWRkciA9IEdNQUNfTUlJX0FERFI7Ci0JbWFjLT5ody5taWkuZGF0YSA9IEdNQUNfTUlJX0RBVEE7Ci0KLQlyZXR1cm4gbWFjOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL2dtYWMuaCBiL2RyaXZlcnMvbmV0L3N0bW1hYy9nbWFjLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJlODJkNmMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL2dtYWMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIwNCArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOSAgU1RNaWNyb2VsZWN0cm9uaWNzIEx0ZAotCi0gIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCi0gIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAotICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICBtb3JlIGRldGFpbHMuCi0KLSAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAotICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLQotICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgotICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgotCi0gIEF1dGhvcjogR2l1c2VwcGUgQ2F2YWxsYXJvIDxwZXBwZS5jYXZhbGxhcm9Ac3QuY29tPgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBHTUFDX0NPTlRST0wJCTB4MDAwMDAwMDAJLyogQ29uZmlndXJhdGlvbiAqLwotI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUgkweDAwMDAwMDA0CS8qIEZyYW1lIEZpbHRlciAqLwotI2RlZmluZSBHTUFDX0hBU0hfSElHSAkJMHgwMDAwMDAwOAkvKiBNdWx0aWNhc3QgSGFzaCBUYWJsZSBIaWdoICovCi0jZGVmaW5lIEdNQUNfSEFTSF9MT1cJCTB4MDAwMDAwMGMJLyogTXVsdGljYXN0IEhhc2ggVGFibGUgTG93ICovCi0jZGVmaW5lIEdNQUNfTUlJX0FERFIJCTB4MDAwMDAwMTAJLyogTUlJIEFkZHJlc3MgKi8KLSNkZWZpbmUgR01BQ19NSUlfREFUQQkJMHgwMDAwMDAxNAkvKiBNSUkgRGF0YSAqLwotI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTAkJMHgwMDAwMDAxOAkvKiBGbG93IENvbnRyb2wgKi8KLSNkZWZpbmUgR01BQ19WTEFOX1RBRwkJMHgwMDAwMDAxYwkvKiBWTEFOIFRhZyAqLwotI2RlZmluZSBHTUFDX1ZFUlNJT04JCTB4MDAwMDAwMjAJLyogR01BQyBDT1JFIFZlcnNpb24gKi8KLSNkZWZpbmUgR01BQ19XQUtFVVBfRklMVEVSCTB4MDAwMDAwMjgJLyogV2FrZS11cCBGcmFtZSBGaWx0ZXIgKi8KLQotI2RlZmluZSBHTUFDX0lOVF9TVEFUVVMJCTB4MDAwMDAwMzgJLyogaW50ZXJydXB0IHN0YXR1cyByZWdpc3RlciAqLwotZW51bSBnbWFjX2lycV9zdGF0dXMgewotCXRpbWVfc3RhbXBfaXJxID0gMHgwMjAwLAotCW1tY19yeF9jc3VtX29mZmxvYWRfaXJxID0gMHgwMDgwLAotCW1tY190eF9pcnEgPSAweDAwNDAsCi0JbW1jX3J4X2lycSA9IDB4MDAyMCwKLQltbWNfaXJxID0gMHgwMDEwLAotCXBtdF9pcnEgPSAweDAwMDgsCi0JcGNzX2FuZV9pcnEgPSAweDAwMDQsCi0JcGNzX2xpbmtfaXJxID0gMHgwMDAyLAotCXJnbWlpX2lycSA9IDB4MDAwMSwKLX07Ci0jZGVmaW5lIEdNQUNfSU5UX01BU0sJCTB4MDAwMDAwM2MJLyogaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KLQotLyogUE1UIENvbnRyb2wgYW5kIFN0YXR1cyAqLwotI2RlZmluZSBHTUFDX1BNVAkJMHgwMDAwMDAyYwotZW51bSBwb3dlcl9ldmVudCB7Ci0JcG9pbnRlcl9yZXNldCA9IDB4ODAwMDAwMDAsCi0JZ2xvYmFsX3VuaWNhc3QgPSAweDAwMDAwMjAwLAotCXdha2VfdXBfcnhfZnJhbWUgPSAweDAwMDAwMDQwLAotCW1hZ2ljX2ZyYW1lID0gMHgwMDAwMDAyMCwKLQl3YWtlX3VwX2ZyYW1lX2VuID0gMHgwMDAwMDAwNCwKLQltYWdpY19wa3RfZW4gPSAweDAwMDAwMDAyLAotCXBvd2VyX2Rvd24gPSAweDAwMDAwMDAxLAotfTsKLQotLyogR01BQyBIVyBBRERSIHJlZ3MgKi8KLSNkZWZpbmUgR01BQ19BRERSX0hJR0gocmVnKQkJKDB4MDAwMDAwNDArKHJlZyAqIDgpKQotI2RlZmluZSBHTUFDX0FERFJfTE9XKHJlZykJCSgweDAwMDAwMDQ0KyhyZWcgKiA4KSkKLSNkZWZpbmUgR01BQ19NQVhfVU5JQ0FTVF9BRERSRVNTRVMJMTYKLQotI2RlZmluZSBHTUFDX0FOX0NUUkwJMHgwMDAwMDBjMAkvKiBBTiBjb250cm9sICovCi0jZGVmaW5lIEdNQUNfQU5fU1RBVFVTCTB4MDAwMDAwYzQJLyogQU4gc3RhdHVzICovCi0jZGVmaW5lIEdNQUNfQU5FX0FEVgkweDAwMDAwMGM4CS8qIEF1dG8tTmVnLiBBZHZlcnRpc2VtZW50ICovCi0jZGVmaW5lIEdNQUNfQU5FX0xJTksJMHgwMDAwMDBjYwkvKiBBdXRvLU5lZy4gbGluayBwYXJ0ZW5lciBhYmlsaXR5ICovCi0jZGVmaW5lIEdNQUNfQU5FX0VYUAkweDAwMDAwMGQwCS8qIEFORSBleHBhbnNpb24gKi8KLSNkZWZpbmUgR01BQ19UQkkJMHgwMDAwMDBkNAkvKiBUQkkgZXh0ZW5kIHN0YXR1cyAqLwotI2RlZmluZSBHTUFDX0dNSUlfU1RBVFVTIDB4MDAwMDAwZDgJLyogUy9SLUdNSUkgc3RhdHVzICovCi0KLS8qIEdNQUMgQ29uZmlndXJhdGlvbiBkZWZpbmVzICovCi0jZGVmaW5lIEdNQUNfQ09OVFJPTF9UQwkweDAxMDAwMDAwCS8qIFRyYW5zbWl0IENvbmYuIGluIFJHTUlJL1NHTUlJICovCi0jZGVmaW5lIEdNQUNfQ09OVFJPTF9XRAkweDAwODAwMDAwCS8qIERpc2FibGUgV2F0Y2hkb2cgb24gcmVjZWl2ZSAqLwotI2RlZmluZSBHTUFDX0NPTlRST0xfSkQJMHgwMDQwMDAwMAkvKiBKYWJiZXIgZGlzYWJsZSAqLwotI2RlZmluZSBHTUFDX0NPTlRST0xfQkUJMHgwMDIwMDAwMAkvKiBGcmFtZSBCdXJzdCBFbmFibGUgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0pFCTB4MDAxMDAwMDAJLyogSnVtYm8gZnJhbWUgKi8KLWVudW0gaW50ZXJfZnJhbWVfZ2FwIHsKLQlHTUFDX0NPTlRST0xfSUZHXzg4ID0gMHgwMDA0MDAwMCwKLQlHTUFDX0NPTlRST0xfSUZHXzgwID0gMHgwMDAyMDAwMCwKLQlHTUFDX0NPTlRST0xfSUZHXzQwID0gMHgwMDBlMDAwMCwKLX07Ci0jZGVmaW5lIEdNQUNfQ09OVFJPTF9EQ1JTCTB4MDAwMTAwMDAgLyogRGlzYWJsZSBjYXJyaWVyIHNlbnNlIGR1cmluZyB0eCAqLwotI2RlZmluZSBHTUFDX0NPTlRST0xfUFMJCTB4MDAwMDgwMDAgLyogUG9ydCBTZWxlY3QgMDpHTUkgMTpNSUkgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0ZFUwkweDAwMDA0MDAwIC8qIFNwZWVkIDA6MTAgMToxMDAgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0RPCQkweDAwMDAyMDAwIC8qIERpc2FibGUgUnggT3duICovCi0jZGVmaW5lIEdNQUNfQ09OVFJPTF9MTQkJMHgwMDAwMTAwMCAvKiBMb29wLWJhY2sgbW9kZSAqLwotI2RlZmluZSBHTUFDX0NPTlRST0xfRE0JCTB4MDAwMDA4MDAgLyogRHVwbGV4IE1vZGUgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0lQQwkweDAwMDAwNDAwIC8qIENoZWNrc3VtIE9mZmxvYWQgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0RSCQkweDAwMDAwMjAwIC8qIERpc2FibGUgUmV0cnkgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0xVRAkweDAwMDAwMTAwIC8qIExpbmsgdXAvZG93biAqLwotI2RlZmluZSBHTUFDX0NPTlRST0xfQUNTCTB4MDAwMDAwODAgLyogQXV0b21hdGljIFBhZCBTdHJpcHBpbmcgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX0RDCQkweDAwMDAwMDEwIC8qIERlZmVycmFsIENoZWNrICovCi0jZGVmaW5lIEdNQUNfQ09OVFJPTF9URQkJMHgwMDAwMDAwOCAvKiBUcmFuc21pdHRlciBFbmFibGUgKi8KLSNkZWZpbmUgR01BQ19DT05UUk9MX1JFCQkweDAwMDAwMDA0IC8qIFJlY2VpdmVyIEVuYWJsZSAqLwotCi0jZGVmaW5lIEdNQUNfQ09SRV9JTklUIChHTUFDX0NPTlRST0xfSkQgfCBHTUFDX0NPTlRST0xfUFMgfCBHTUFDX0NPTlRST0xfQUNTIHwgXAotCQkJR01BQ19DT05UUk9MX0lQQyB8IEdNQUNfQ09OVFJPTF9KRSB8IEdNQUNfQ09OVFJPTF9CRSkKLQotLyogR01BQyBGcmFtZSBGaWx0ZXIgZGVmaW5lcyAqLwotI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9QUgkweDAwMDAwMDAxCS8qIFByb21pc2N1b3VzIE1vZGUgKi8KLSNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfSFVDCTB4MDAwMDAwMDIJLyogSGFzaCBVbmljYXN0ICovCi0jZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX0hNQwkweDAwMDAwMDA0CS8qIEhhc2ggTXVsdGljYXN0ICovCi0jZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX0RBSUYJMHgwMDAwMDAwOAkvKiBEQSBJbnZlcnNlIEZpbHRlcmluZyAqLwotI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9QTQkweDAwMDAwMDEwCS8qIFBhc3MgYWxsIG11bHRpY2FzdCAqLwotI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9EQkYJMHgwMDAwMDAyMAkvKiBEaXNhYmxlIEJyb2FkY2FzdCBmcmFtZXMgKi8KLSNkZWZpbmUgR01BQ19GUkFNRV9GSUxURVJfU0FJRgkweDAwMDAwMTAwCS8qIEludmVyc2UgRmlsdGVyaW5nICovCi0jZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX1NBRgkweDAwMDAwMjAwCS8qIFNvdXJjZSBBZGRyZXNzIEZpbHRlciAqLwotI2RlZmluZSBHTUFDX0ZSQU1FX0ZJTFRFUl9IUEYJMHgwMDAwMDQwMAkvKiBIYXNoIG9yIHBlcmZlY3QgRmlsdGVyICovCi0jZGVmaW5lIEdNQUNfRlJBTUVfRklMVEVSX1JBCTB4ODAwMDAwMDAJLyogUmVjZWl2ZSBhbGwgbW9kZSAqLwotLyogR01JSSBBRERSICBkZWZpbmVzICovCi0jZGVmaW5lIEdNQUNfTUlJX0FERFJfV1JJVEUJMHgwMDAwMDAwMgkvKiBNSUkgV3JpdGUgKi8KLSNkZWZpbmUgR01BQ19NSUlfQUREUl9CVVNZCTB4MDAwMDAwMDEJLyogTUlJIEJ1c3kgKi8KLS8qIEdNQUMgRkxPVyBDVFJMIGRlZmluZXMgKi8KLSNkZWZpbmUgR01BQ19GTE9XX0NUUkxfUFRfTUFTSwkweGZmZmYwMDAwCS8qIFBhdXNlIFRpbWUgTWFzayAqLwotI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTF9QVF9TSElGVAkxNgotI2RlZmluZSBHTUFDX0ZMT1dfQ1RSTF9SRkUJMHgwMDAwMDAwNAkvKiBSeCBGbG93IENvbnRyb2wgRW5hYmxlICovCi0jZGVmaW5lIEdNQUNfRkxPV19DVFJMX1RGRQkweDAwMDAwMDAyCS8qIFR4IEZsb3cgQ29udHJvbCBFbmFibGUgKi8KLSNkZWZpbmUgR01BQ19GTE9XX0NUUkxfRkNCX0JQQQkweDAwMDAwMDAxCS8qIEZsb3cgQ29udHJvbCBCdXN5IC4uLiAqLwotCi0vKi0tLSBETUEgQkxPQ0sgZGVmaW5lcyAtLS0qLwotLyogRE1BIEJ1cyBNb2RlIHJlZ2lzdGVyIGRlZmluZXMgKi8KLSNkZWZpbmUgRE1BX0JVU19NT0RFX1NGVF9SRVNFVAkweDAwMDAwMDAxCS8qIFNvZnR3YXJlIFJlc2V0ICovCi0jZGVmaW5lIERNQV9CVVNfTU9ERV9EQQkJMHgwMDAwMDAwMgkvKiBBcmJpdHJhdGlvbiBzY2hlbWUgKi8KLSNkZWZpbmUgRE1BX0JVU19NT0RFX0RTTF9NQVNLCTB4MDAwMDAwN2MJLyogRGVzY3JpcHRvciBTa2lwIExlbmd0aCAqLwotI2RlZmluZSBETUFfQlVTX01PREVfRFNMX1NISUZUCTIJLyogICAoaW4gRFdPUkRTKSAgICAgICovCi0vKiBQcm9ncmFtbWFibGUgYnVyc3QgbGVuZ3RoIChwYXNzZWQgdGhvcnVnaCBwbGF0Zm9ybSkqLwotI2RlZmluZSBETUFfQlVTX01PREVfUEJMX01BU0sJMHgwMDAwM2YwMAkvKiBQcm9ncmFtbWFibGUgQnVyc3QgTGVuICovCi0jZGVmaW5lIERNQV9CVVNfTU9ERV9QQkxfU0hJRlQJOAotCi1lbnVtIHJ4X3R4X3ByaW9yaXR5X3JhdGlvIHsKLQlkb3VibGVfcmF0aW8gPSAweDAwMDA0MDAwLAkvKjI6MSAqLwotCXRyaXBsZV9yYXRpbyA9IDB4MDAwMDgwMDAsCS8qMzoxICovCi0JcXVhZHJ1cGxlX3JhdGlvID0gMHgwMDAwYzAwMCwJLyo0OjEgKi8KLX07Ci0KLSNkZWZpbmUgRE1BX0JVU19NT0RFX0ZCCQkweDAwMDEwMDAwCS8qIEZpeGVkIGJ1cnN0ICovCi0jZGVmaW5lIERNQV9CVVNfTU9ERV9SUEJMX01BU0sJMHgwMDNlMDAwMAkvKiBSeC1Qcm9ncmFtbWFibGUgQnVyc3QgTGVuICovCi0jZGVmaW5lIERNQV9CVVNfTU9ERV9SUEJMX1NISUZUCTE3Ci0jZGVmaW5lIERNQV9CVVNfTU9ERV9VU1AJMHgwMDgwMDAwMAotI2RlZmluZSBETUFfQlVTX01PREVfNFBCTAkweDAxMDAwMDAwCi0jZGVmaW5lIERNQV9CVVNfTU9ERV9BQUwJMHgwMjAwMDAwMAotCi0vKiBETUEgQ1JTIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciBNYXBwaW5nICovCi0jZGVmaW5lIERNQV9IT1NUX1RYX0RFU0MJICAweDAwMDAxMDQ4CS8qIEN1cnJlbnQgSG9zdCBUeCBkZXNjcmlwdG9yICovCi0jZGVmaW5lIERNQV9IT1NUX1JYX0RFU0MJICAweDAwMDAxMDRjCS8qIEN1cnJlbnQgSG9zdCBSeCBkZXNjcmlwdG9yICovCi0vKiAgRE1BIEJ1cyBNb2RlIHJlZ2lzdGVyIGRlZmluZXMgKi8KLSNkZWZpbmUgRE1BX0JVU19QUl9SQVRJT19NQVNLCSAgMHgwMDAwYzAwMAkvKiBSeC9UeCBwcmlvcml0eSByYXRpbyAqLwotI2RlZmluZSBETUFfQlVTX1BSX1JBVElPX1NISUZUCSAgMTQKLSNkZWZpbmUgRE1BX0JVU19GQgkgIAkgIDB4MDAwMTAwMDAJLyogRml4ZWQgQnVyc3QgKi8KLQotLyogRE1BIG9wZXJhdGlvbiBtb2RlIGRlZmluZXMgKHN0YXJ0L3N0b3AgdHgvcnggYXJlIHBsYWNlZCBpbiBjb21tb24gaGVhZGVyKSovCi0jZGVmaW5lIERNQV9DT05UUk9MX0RUCQkweDA0MDAwMDAwIC8qIERpc2FibGUgRHJvcCBUQ1AvSVAgY3N1bSBlcnJvciAqLwotI2RlZmluZSBETUFfQ09OVFJPTF9SU0YJCTB4MDIwMDAwMDAgLyogUmVjZWl2ZSBTdG9yZSBhbmQgRm9yd2FyZCAqLwotI2RlZmluZSBETUFfQ09OVFJPTF9ERkYJCTB4MDEwMDAwMDAgLyogRGlzYWFibGUgZmx1c2hpbmcgKi8KLS8qIFRocmVzaG9sZCBmb3IgQWN0aXZhdGluZyB0aGUgRkMgKi8KLWVudW0gcmZhIHsKLQlhY3RfZnVsbF9taW51c18xID0gMHgwMDgwMDAwMCwKLQlhY3RfZnVsbF9taW51c18yID0gMHgwMDgwMDIwMCwKLQlhY3RfZnVsbF9taW51c18zID0gMHgwMDgwMDQwMCwKLQlhY3RfZnVsbF9taW51c180ID0gMHgwMDgwMDYwMCwKLX07Ci0vKiBUaHJlc2hvbGQgZm9yIERlYWN0aXZhdGluZyB0aGUgRkMgKi8KLWVudW0gcmZkIHsKLQlkZWFjX2Z1bGxfbWludXNfMSA9IDB4MDA0MDAwMDAsCi0JZGVhY19mdWxsX21pbnVzXzIgPSAweDAwNDAwODAwLAotCWRlYWNfZnVsbF9taW51c18zID0gMHgwMDQwMTAwMCwKLQlkZWFjX2Z1bGxfbWludXNfNCA9IDB4MDA0MDE4MDAsCi19OwotI2RlZmluZSBETUFfQ09OVFJPTF9UU0YJCTB4MDAyMDAwMDAgLyogVHJhbnNtaXQgIFN0b3JlIGFuZCBGb3J3YXJkICovCi0jZGVmaW5lIERNQV9DT05UUk9MX0ZURgkJMHgwMDEwMDAwMCAvKiBGbHVzaCB0cmFuc21pdCBGSUZPICovCi0KLWVudW0gdHRjX2NvbnRyb2wgewotCURNQV9DT05UUk9MX1RUQ182NCA9IDB4MDAwMDAwMDAsCi0JRE1BX0NPTlRST0xfVFRDXzEyOCA9IDB4MDAwMDQwMDAsCi0JRE1BX0NPTlRST0xfVFRDXzE5MiA9IDB4MDAwMDgwMDAsCi0JRE1BX0NPTlRST0xfVFRDXzI1NiA9IDB4MDAwMGMwMDAsCi0JRE1BX0NPTlRST0xfVFRDXzQwID0gMHgwMDAxMDAwMCwKLQlETUFfQ09OVFJPTF9UVENfMzIgPSAweDAwMDE0MDAwLAotCURNQV9DT05UUk9MX1RUQ18yNCA9IDB4MDAwMTgwMDAsCi0JRE1BX0NPTlRST0xfVFRDXzE2ID0gMHgwMDAxYzAwMCwKLX07Ci0jZGVmaW5lIERNQV9DT05UUk9MX1RDX1RYX01BU0sJMHhmZmZlM2ZmZgotCi0jZGVmaW5lIERNQV9DT05UUk9MX0VGQwkJMHgwMDAwMDEwMAotI2RlZmluZSBETUFfQ09OVFJPTF9GRUYJCTB4MDAwMDAwODAKLSNkZWZpbmUgRE1BX0NPTlRST0xfRlVGCQkweDAwMDAwMDQwCi0KLWVudW0gcnRjX2NvbnRyb2wgewotCURNQV9DT05UUk9MX1JUQ182NCA9IDB4MDAwMDAwMDAsCi0JRE1BX0NPTlRST0xfUlRDXzMyID0gMHgwMDAwMDAwOCwKLQlETUFfQ09OVFJPTF9SVENfOTYgPSAweDAwMDAwMDEwLAotCURNQV9DT05UUk9MX1JUQ18xMjggPSAweDAwMDAwMDE4LAotfTsKLSNkZWZpbmUgRE1BX0NPTlRST0xfVENfUlhfTUFTSwkweGZmZmZmZmU3Ci0KLSNkZWZpbmUgRE1BX0NPTlRST0xfT1NGCTB4MDAwMDAwMDQJLyogT3BlcmF0ZSBvbiBzZWNvbmQgZnJhbWUgKi8KLQotLyogTU1DIHJlZ2lzdGVycyBvZmZzZXQgKi8KLSNkZWZpbmUgR01BQ19NTUNfQ1RSTCAgICAgIDB4MTAwCi0jZGVmaW5lIEdNQUNfTU1DX1JYX0lOVFIgICAweDEwNAotI2RlZmluZSBHTUFDX01NQ19UWF9JTlRSICAgMHgxMDgKLSNkZWZpbmUgR01BQ19NTUNfUlhfQ1NVTV9PRkZMT0FEICAgMHgyMDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9tYWMxMDAuYyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9tYWMxMDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjI1MTcxYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvbWFjMTAwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MTcgKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAgVGhpcyBpcyB0aGUgZHJpdmVyIGZvciB0aGUgTUFDIDEwLzEwMCBvbi1jaGlwIEV0aGVybmV0IGNvbnRyb2xsZXIKLSAgY3VycmVudGx5IHRlc3RlZCBvbiBhbGwgdGhlIFNUIGJvYXJkcyBiYXNlZCBvbiBTVGI3MTA5IGFuZCBzdHg3MjAwIFNvQ3MuCi0KLSAgRFdDIEV0aGVyIE1BQyAxMC8xMDAgVW5pdmVyc2FsIHZlcnNpb24gNC4wIGhhcyBiZWVuIHVzZWQgZm9yIGRldmVsb3BpbmcKLSAgdGhpcyBjb2RlLgotCi0gIENvcHlyaWdodCAoQykgMjAwNy0yMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCi0KLSAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKLSAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLQotICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCi0gIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCi0gIG1vcmUgZGV0YWlscy4KLQotICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCi0gIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgotCi0gIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCi0gIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCi0KLSAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+Ci0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KLSNpbmNsdWRlIDxsaW51eC9taWkuaD4KLSNpbmNsdWRlIDxsaW51eC9waHkuaD4KLQotI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgIm1hYzEwMC5oIgotCi0jdW5kZWYgTUFDMTAwX0RFQlVHCi0vKiNkZWZpbmUgTUFDMTAwX0RFQlVHKi8KLSNpZmRlZiBNQUMxMDBfREVCVUcKLSNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgIHByaW50ayhmbXQsICMjIGFyZ3MpCi0jZWxzZQotI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKSAgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIG1hYzEwMF9jb3JlX2luaXQodW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgTUFDX0NPTlRST0wpOwotCi0Jd3JpdGVsKCh2YWx1ZSB8IE1BQ19DT1JFX0lOSVQpLCBpb2FkZHIgKyBNQUNfQ09OVFJPTCk7Ci0KLSNpZmRlZiBTVE1NQUNfVkxBTl9UQUdfVVNFRAotCXdyaXRlbChFVEhfUF84MDIxUSwgaW9hZGRyICsgTUFDX1ZMQU4xKTsKLSNlbmRpZgotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX2R1bXBfbWFjX3JlZ3ModW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JcHJfaW5mbygiXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCi0JICAgICAgICJcdCAgTUFDMTAwIENTUiAoYmFzZSBhZGRyID0gMHglOHgpXG4iCi0JICAgICAgICJcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsCi0JICAgICAgICh1bnNpZ25lZCBpbnQpaW9hZGRyKTsKLQlwcl9pbmZvKCJcdGNvbnRyb2wgcmVnIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwgTUFDX0NPTlRST0wsCi0JICAgICAgIHJlYWRsKGlvYWRkciArIE1BQ19DT05UUk9MKSk7Ci0JcHJfaW5mbygiXHRhZGRyIEhJIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuICIsIE1BQ19BRERSX0hJR0gsCi0JICAgICAgIHJlYWRsKGlvYWRkciArIE1BQ19BRERSX0hJR0gpKTsKLQlwcl9pbmZvKCJcdGFkZHIgTE8gKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBNQUNfQUREUl9MT1csCi0JICAgICAgIHJlYWRsKGlvYWRkciArIE1BQ19BRERSX0xPVykpOwotCXByX2luZm8oIlx0bXVsdGljYXN0IGhhc2ggSEkgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAotCQkJTUFDX0hBU0hfSElHSCwgcmVhZGwoaW9hZGRyICsgTUFDX0hBU0hfSElHSCkpOwotCXByX2luZm8oIlx0bXVsdGljYXN0IGhhc2ggTE8gKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAotCQkJTUFDX0hBU0hfTE9XLCByZWFkbChpb2FkZHIgKyBNQUNfSEFTSF9MT1cpKTsKLQlwcl9pbmZvKCJcdGZsb3cgY29udHJvbCAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCi0JCU1BQ19GTE9XX0NUUkwsIHJlYWRsKGlvYWRkciArIE1BQ19GTE9XX0NUUkwpKTsKLQlwcl9pbmZvKCJcdFZMQU4xIHRhZyAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsIE1BQ19WTEFOMSwKLQkgICAgICAgcmVhZGwoaW9hZGRyICsgTUFDX1ZMQU4xKSk7Ci0JcHJfaW5mbygiXHRWTEFOMiB0YWcgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBNQUNfVkxBTjIsCi0JICAgICAgIHJlYWRsKGlvYWRkciArIE1BQ19WTEFOMikpOwotCXByX2luZm8oIlxuXHRNQUMgbWFuYWdlbWVudCBjb3VudGVyIHJlZ2lzdGVyc1xuIik7Ci0JcHJfaW5mbygiXHQgTU1DIGNydGwgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAotCSAgICAgICBNTUNfQ09OVFJPTCwgcmVhZGwoaW9hZGRyICsgTU1DX0NPTlRST0wpKTsKLQlwcl9pbmZvKCJcdCBNTUMgSGlnaCBJbnRlcnJ1cHQgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAotCSAgICAgICBNTUNfSElHSF9JTlRSLCByZWFkbChpb2FkZHIgKyBNTUNfSElHSF9JTlRSKSk7Ci0JcHJfaW5mbygiXHQgTU1DIExvdyBJbnRlcnJ1cHQgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLAotCSAgICAgICBNTUNfTE9XX0lOVFIsIHJlYWRsKGlvYWRkciArIE1NQ19MT1dfSU5UUikpOwotCXByX2luZm8oIlx0IE1NQyBIaWdoIEludGVycnVwdCBNYXNrIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKLQkgICAgICAgTU1DX0hJR0hfSU5UUl9NQVNLLCByZWFkbChpb2FkZHIgKyBNTUNfSElHSF9JTlRSX01BU0spKTsKLQlwcl9pbmZvKCJcdCBNTUMgTG93IEludGVycnVwdCBNYXNrIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKLQkgICAgICAgTU1DX0xPV19JTlRSX01BU0ssIHJlYWRsKGlvYWRkciArIE1NQ19MT1dfSU5UUl9NQVNLKSk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IG1hYzEwMF9kbWFfaW5pdCh1bnNpZ25lZCBsb25nIGlvYWRkciwgaW50IHBibCwgdTMyIGRtYV90eCwKLQkJCSAgIHUzMiBkbWFfcngpCi17Ci0JdTMyIHZhbHVlID0gcmVhZGwoaW9hZGRyICsgRE1BX0JVU19NT0RFKTsKLQkvKiBETUEgU1cgcmVzZXQgKi8KLQl2YWx1ZSB8PSBETUFfQlVTX01PREVfU0ZUX1JFU0VUOwotCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgRE1BX0JVU19NT0RFKTsKLQlkbyB7fSB3aGlsZSAoKHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSkgJiBETUFfQlVTX01PREVfU0ZUX1JFU0VUKSk7Ci0KLQkvKiBFbmFibGUgQXBwbGljYXRpb24gQWNjZXNzIGJ5IHdyaXRpbmcgdG8gRE1BIENTUjAgKi8KLQl3cml0ZWwoRE1BX0JVU19NT0RFX0RFRkFVTFQgfCAocGJsIDw8IERNQV9CVVNfTU9ERV9QQkxfU0hJRlQpLAotCSAgICAgICBpb2FkZHIgKyBETUFfQlVTX01PREUpOwotCi0JLyogTWFzayBpbnRlcnJ1cHRzIGJ5IHdyaXRpbmcgdG8gQ1NSNyAqLwotCXdyaXRlbChETUFfSU5UUl9ERUZBVUxUX01BU0ssIGlvYWRkciArIERNQV9JTlRSX0VOQSk7Ci0KLQkvKiBUaGUgYmFzZSBhZGRyZXNzIG9mIHRoZSBSWC9UWCBkZXNjcmlwdG9yIGxpc3RzIG11c3QgYmUgd3JpdHRlbiBpbnRvCi0JICogRE1BIENTUjMgYW5kIENTUjQsIHJlc3BlY3RpdmVseS4gKi8KLQl3cml0ZWwoZG1hX3R4LCBpb2FkZHIgKyBETUFfVFhfQkFTRV9BRERSKTsKLQl3cml0ZWwoZG1hX3J4LCBpb2FkZHIgKyBETUFfUkNWX0JBU0VfQUREUik7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogU3RvcmUgYW5kIEZvcndhcmQgY2FwYWJpbGl0eSBpcyBub3QgdXNlZCBhdCBhbGwuLgotICogVGhlIHRyYW5zbWl0IHRocmVzaG9sZCBjYW4gYmUgcHJvZ3JhbW1lZCBieQotICogc2V0dGluZyB0aGUgVFRDIGJpdHMgaW4gdGhlIERNQSBjb250cm9sIHJlZ2lzdGVyLiovCi1zdGF0aWMgdm9pZCBtYWMxMDBfZG1hX29wZXJhdGlvbl9tb2RlKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCBpbnQgdHhtb2RlLAotCQkJCSAgICAgIGludCByeG1vZGUpCi17Ci0JdTMyIGNzcjYgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7Ci0KLQlpZiAodHhtb2RlIDw9IDMyKQotCQljc3I2IHw9IERNQV9DT05UUk9MX1RUQ18zMjsKLQllbHNlIGlmICh0eG1vZGUgPD0gNjQpCi0JCWNzcjYgfD0gRE1BX0NPTlRST0xfVFRDXzY0OwotCWVsc2UKLQkJY3NyNiB8PSBETUFfQ09OVFJPTF9UVENfMTI4OwotCi0Jd3JpdGVsKGNzcjYsIGlvYWRkciArIERNQV9DT05UUk9MKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX2R1bXBfZG1hX3JlZ3ModW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0JaW50IGk7Ci0KLQlEQkcoS0VSTl9ERUJVRyAiTUFDMTAwIERNQSBDU1IgXG4iKTsKLQlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQotCQlwcl9kZWJ1ZygiXHQgQ1NSJWQgKG9mZnNldCAweCV4KTogMHglMDh4XG4iLCBpLAotCQkgICAgICAgKERNQV9CVVNfTU9ERSArIGkgKiA0KSwKLQkJICAgICAgIHJlYWRsKGlvYWRkciArIERNQV9CVVNfTU9ERSArIGkgKiA0KSk7Ci0JREJHKEtFUk5fREVCVUcgIlx0IENTUjIwIChvZmZzZXQgMHgleCk6IDB4JTA4eFxuIiwKLQkgICAgRE1BX0NVUl9UWF9CVUZfQUREUiwgcmVhZGwoaW9hZGRyICsgRE1BX0NVUl9UWF9CVUZfQUREUikpOwotCURCRyhLRVJOX0RFQlVHICJcdCBDU1IyMSAob2Zmc2V0IDB4JXgpOiAweCUwOHhcbiIsCi0JICAgIERNQV9DVVJfUlhfQlVGX0FERFIsIHJlYWRsKGlvYWRkciArIERNQV9DVVJfUlhfQlVGX0FERFIpKTsKLQlyZXR1cm47Ci19Ci0KLS8qIERNQSBjb250cm9sbGVyIGhhcyB0d28gY291bnRlcnMgdG8gdHJhY2sgdGhlIG51bWJlciBvZgotICAgdGhlIHJlY2VpdmUgbWlzc2VkIGZyYW1lcy4gKi8KLXN0YXRpYyB2b2lkIG1hYzEwMF9kbWFfZGlhZ25vc3RpY19mcih2b2lkICpkYXRhLCBzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzICp4LAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyBpb2FkZHIpCi17Ci0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICopZGF0YTsKLQl1MzIgY3NyOCA9IHJlYWRsKGlvYWRkciArIERNQV9NSVNTRURfRlJBTUVfQ1RSKTsKLQotCWlmICh1bmxpa2VseShjc3I4KSkgewotCQlpZiAoY3NyOCAmIERNQV9NSVNTRURfRlJBTUVfT1ZFKSB7Ci0JCQlzdGF0cy0+cnhfb3Zlcl9lcnJvcnMgKz0gMHg4MDA7Ci0JCQl4LT5yeF9vdmVyZmxvd19jbnRyICs9IDB4ODAwOwotCQl9IGVsc2UgewotCQkJdW5zaWduZWQgaW50IG92ZV9jbnRyOwotCQkJb3ZlX2NudHIgPSAoKGNzcjggJiBETUFfTUlTU0VEX0ZSQU1FX09WRV9DTlRSKSA+PiAxNyk7Ci0JCQlzdGF0cy0+cnhfb3Zlcl9lcnJvcnMgKz0gb3ZlX2NudHI7Ci0JCQl4LT5yeF9vdmVyZmxvd19jbnRyICs9IG92ZV9jbnRyOwotCQl9Ci0KLQkJaWYgKGNzcjggJiBETUFfTUlTU0VEX0ZSQU1FX09WRV9NKSB7Ci0JCQlzdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyArPSAweGZmZmY7Ci0JCQl4LT5yeF9taXNzZWRfY250ciArPSAweGZmZmY7Ci0JCX0gZWxzZSB7Ci0JCQl1bnNpZ25lZCBpbnQgbWlzc19mID0gKGNzcjggJiBETUFfTUlTU0VEX0ZSQU1FX01fQ05UUik7Ci0JCQlzdGF0cy0+cnhfbWlzc2VkX2Vycm9ycyArPSBtaXNzX2Y7Ci0JCQl4LT5yeF9taXNzZWRfY250ciArPSBtaXNzX2Y7Ci0JCX0KLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IG1hYzEwMF9nZXRfdHhfZnJhbWVfc3RhdHVzKHZvaWQgKmRhdGEsIHN0cnVjdCBzdG1tYWNfZXh0cmFfc3RhdHMgKngsCi0JCQkJICAgICAgc3RydWN0IGRtYV9kZXNjICpwLCB1bnNpZ25lZCBsb25nIGlvYWRkcikKLXsKLQlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOwotCi0JaWYgKHVubGlrZWx5KHAtPmRlczAxLnR4LmVycm9yX3N1bW1hcnkpKSB7Ci0JCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC51bmRlcmZsb3dfZXJyb3IpKSB7Ci0JCQl4LT50eF91bmRlcmZsb3crKzsKLQkJCXN0YXRzLT50eF9maWZvX2Vycm9ycysrOwotCQl9Ci0JCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC5ub19jYXJyaWVyKSkgewotCQkJeC0+dHhfY2FycmllcisrOwotCQkJc3RhdHMtPnR4X2NhcnJpZXJfZXJyb3JzKys7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnR4Lmxvc3NfY2FycmllcikpIHsKLQkJCXgtPnR4X2xvc3NjYXJyaWVyKys7Ci0JCQlzdGF0cy0+dHhfY2Fycmllcl9lcnJvcnMrKzsKLQkJfQotCQlpZiAodW5saWtlbHkoKHAtPmRlczAxLnR4LmV4Y2Vzc2l2ZV9kZWZlcnJhbCkgfHwKLQkJCSAgICAgKHAtPmRlczAxLnR4LmV4Y2Vzc2l2ZV9jb2xsaXNpb25zKSB8fAotCQkJICAgICAocC0+ZGVzMDEudHgubGF0ZV9jb2xsaXNpb24pKSkKLQkJCXN0YXRzLT5jb2xsaXNpb25zICs9IHAtPmRlczAxLnR4LmNvbGxpc2lvbl9jb3VudDsKLQkJcmV0ID0gLTE7Ci0JfQotCWlmICh1bmxpa2VseShwLT5kZXMwMS50eC5oZWFydGJlYXRfZmFpbCkpIHsKLQkJeC0+dHhfaGVhcnRiZWF0Kys7Ci0JCXN0YXRzLT50eF9oZWFydGJlYXRfZXJyb3JzKys7Ci0JCXJldCA9IC0xOwotCX0KLQlpZiAodW5saWtlbHkocC0+ZGVzMDEudHguZGVmZXJyZWQpKQotCQl4LT50eF9kZWZlcnJlZCsrOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBtYWMxMDBfZ2V0X3R4X2xlbihzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JcmV0dXJuIHAtPmRlczAxLnR4LmJ1ZmZlcjFfc2l6ZTsKLX0KLQotLyogVGhpcyBmdW5jdGlvbiB2ZXJpZmllcyBpZiBlYWNoIGluY29taW5nIGZyYW1lIGhhcyBzb21lIGVycm9ycwotICogYW5kLCBpZiByZXF1aXJlZCwgdXBkYXRlcyB0aGUgbXVsdGljYXN0IHN0YXRpc3RpY3MuCi0gKiBJbiBjYXNlIG9mIHN1Y2Nlc3MsIGl0IHJldHVybnMgY3N1bV9ub25lIGJlY2FzdWUgdGhlIGRldmljZQotICogaXMgbm90IGFibGUgdG8gY29tcHV0ZSB0aGUgY3N1bSBpbiBIVy4gKi8KLXN0YXRpYyBpbnQgbWFjMTAwX2dldF9yeF9mcmFtZV9zdGF0dXModm9pZCAqZGF0YSwgc3RydWN0IHN0bW1hY19leHRyYV9zdGF0cyAqeCwKLQkJCQkgICAgICBzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JaW50IHJldCA9IGNzdW1fbm9uZTsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkYXRhOwotCi0JaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4Lmxhc3RfZGVzY3JpcHRvciA9PSAwKSkgewotCQlwcl93YXJuaW5nKCJtYWMxMDAgRXJyb3I6IE92ZXJzaXplZCBFdGhlcm5ldCAiCi0JCQkgICAiZnJhbWUgc3Bhbm5lZCBtdWx0aXBsZSBidWZmZXJzXG4iKTsKLQkJc3RhdHMtPnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJcmV0dXJuIGRpc2NhcmRfZnJhbWU7Ci0JfQotCi0JaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmVycm9yX3N1bW1hcnkpKSB7Ci0JCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5kZXNjcmlwdG9yX2Vycm9yKSkKLQkJCXgtPnJ4X2Rlc2MrKzsKLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LnBhcnRpYWxfZnJhbWVfZXJyb3IpKQotCQkJeC0+cnhfcGFydGlhbCsrOwotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEucngucnVuX2ZyYW1lKSkKLQkJCXgtPnJ4X3J1bnQrKzsKLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmZyYW1lX3Rvb19sb25nKSkKLQkJCXgtPnJ4X3Rvb2xvbmcrKzsKLQkJaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4LmNvbGxpc2lvbikpIHsKLQkJCXgtPnJ4X2NvbGxpc2lvbisrOwotCQkJc3RhdHMtPmNvbGxpc2lvbnMrKzsKLQkJfQotCQlpZiAodW5saWtlbHkocC0+ZGVzMDEucnguY3JjX2Vycm9yKSkgewotCQkJeC0+cnhfY3JjKys7Ci0JCQlzdGF0cy0+cnhfY3JjX2Vycm9ycysrOwotCQl9Ci0JCXJldCA9IGRpc2NhcmRfZnJhbWU7Ci0JfQotCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5kcmliYmxpbmcpKQotCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOwotCi0JaWYgKHVubGlrZWx5KHAtPmRlczAxLnJ4Lmxlbmd0aF9lcnJvcikpIHsKLQkJeC0+cnhfbGVuZ2h0Kys7Ci0JCXJldCA9IGRpc2NhcmRfZnJhbWU7Ci0JfQotCWlmICh1bmxpa2VseShwLT5kZXMwMS5yeC5taWlfZXJyb3IpKSB7Ci0JCXgtPnJ4X21paSsrOwotCQlyZXQgPSBkaXNjYXJkX2ZyYW1lOwotCX0KLQlpZiAocC0+ZGVzMDEucngubXVsdGljYXN0X2ZyYW1lKSB7Ci0JCXgtPnJ4X211bHRpY2FzdCsrOwotCQlzdGF0cy0+bXVsdGljYXN0Kys7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIG1hYzEwMF9pcnFfc3RhdHVzKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQotewotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX3NldF91bWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCi0JCQkgIHVuc2lnbmVkIGludCByZWdfbikKLXsKLQlzdG1tYWNfc2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgTUFDX0FERFJfSElHSCwgTUFDX0FERFJfTE9XKTsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX2dldF91bWFjX2FkZHIodW5zaWduZWQgbG9uZyBpb2FkZHIsIHVuc2lnbmVkIGNoYXIgKmFkZHIsCi0JCQkgIHVuc2lnbmVkIGludCByZWdfbikKLXsKLQlzdG1tYWNfZ2V0X21hY19hZGRyKGlvYWRkciwgYWRkciwgTUFDX0FERFJfSElHSCwgTUFDX0FERFJfTE9XKTsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX3NldF9maWx0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKLXsKLQl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwotCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIE1BQ19DT05UUk9MKTsKLQotCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJdmFsdWUgfD0gTUFDX0NPTlRST0xfUFI7Ci0JCXZhbHVlICY9IH4oTUFDX0NPTlRST0xfUE0gfCBNQUNfQ09OVFJPTF9JRiB8IE1BQ19DT05UUk9MX0hPIHwKLQkJCSAgIE1BQ19DT05UUk9MX0hQKTsKLQl9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gSEFTSF9UQUJMRV9TSVpFKQotCQkgICB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKLQkJdmFsdWUgfD0gTUFDX0NPTlRST0xfUE07Ci0JCXZhbHVlICY9IH4oTUFDX0NPTlRST0xfUFIgfCBNQUNfQ09OVFJPTF9JRiB8IE1BQ19DT05UUk9MX0hPKTsKLQkJd3JpdGVsKDB4ZmZmZmZmZmYsIGlvYWRkciArIE1BQ19IQVNIX0hJR0gpOwotCQl3cml0ZWwoMHhmZmZmZmZmZiwgaW9hZGRyICsgTUFDX0hBU0hfTE9XKTsKLQl9IGVsc2UgaWYgKGRldi0+bWNfY291bnQgPT0gMCkgewkvKiBubyBtdWx0aWNhc3QgKi8KLQkJdmFsdWUgJj0gfihNQUNfQ09OVFJPTF9QTSB8IE1BQ19DT05UUk9MX1BSIHwgTUFDX0NPTlRST0xfSUYgfAotCQkJICAgTUFDX0NPTlRST0xfSE8gfCBNQUNfQ09OVFJPTF9IUCk7Ci0JfSBlbHNlIHsKLQkJaW50IGk7Ci0JCXUzMiBtY19maWx0ZXJbMl07Ci0JCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwotCi0JCS8qIFBlcmZlY3QgZmlsdGVyIG1vZGUgZm9yIHBoeXNpY2FsIGFkZHJlc3MgYW5kIEhhc2gKLQkJICAgZmlsdGVyIGZvciBtdWx0aWNhc3QgKi8KLQkJdmFsdWUgfD0gTUFDX0NPTlRST0xfSFA7Ci0JCXZhbHVlICY9IH4oTUFDX0NPTlRST0xfUE0gfCBNQUNfQ09OVFJPTF9QUiB8IE1BQ19DT05UUk9MX0lGCi0JCQkgICB8IE1BQ19DT05UUk9MX0hPKTsKLQotCQltZW1zZXQobWNfZmlsdGVyLCAwLCBzaXplb2YobWNfZmlsdGVyKSk7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsKLQkJICAgICBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7Ci0JCQkvKiBUaGUgdXBwZXIgNiBiaXRzIG9mIHRoZSBjYWxjdWxhdGVkIENSQyBhcmUgdXNlZCB0bwotCQkJICogaW5kZXggdGhlIGNvbnRlbnMgb2YgdGhlIGhhc2ggdGFibGUgKi8KLQkJCWludCBiaXRfbnIgPQotCQkJICAgIGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgPj4gMjY7Ci0JCQkvKiBUaGUgbW9zdCBzaWduaWZpY2FudCBiaXQgZGV0ZXJtaW5lcyB0aGUgcmVnaXN0ZXIgdG8KLQkJCSAqIHVzZSAoSC9MKSB3aGlsZSB0aGUgb3RoZXIgNSBiaXRzIGRldGVybWluZSB0aGUgYml0Ci0JCQkgKiB3aXRoaW4gdGhlIHJlZ2lzdGVyLiAqLwotCQkJbWNfZmlsdGVyW2JpdF9uciA+PiA1XSB8PSAxIDw8IChiaXRfbnIgJiAzMSk7Ci0JCX0KLQkJd3JpdGVsKG1jX2ZpbHRlclswXSwgaW9hZGRyICsgTUFDX0hBU0hfTE9XKTsKLQkJd3JpdGVsKG1jX2ZpbHRlclsxXSwgaW9hZGRyICsgTUFDX0hBU0hfSElHSCk7Ci0JfQotCi0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBNQUNfQ09OVFJPTCk7Ci0KLQlEQkcoS0VSTl9JTkZPICIlczogQ1RSTCByZWc6IDB4JTA4eCBIYXNoIHJlZ3M6ICIKLQkgICAgIkhJIDB4JTA4eCwgTE8gMHglMDh4XG4iLAotCSAgICBfX2Z1bmNfXywgcmVhZGwoaW9hZGRyICsgTUFDX0NPTlRST0wpLAotCSAgICByZWFkbChpb2FkZHIgKyBNQUNfSEFTSF9ISUdIKSwgcmVhZGwoaW9hZGRyICsgTUFDX0hBU0hfTE9XKSk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBtYWMxMDBfZmxvd19jdHJsKHVuc2lnbmVkIGxvbmcgaW9hZGRyLCB1bnNpZ25lZCBpbnQgZHVwbGV4LAotCQkJICAgICB1bnNpZ25lZCBpbnQgZmMsIHVuc2lnbmVkIGludCBwYXVzZV90aW1lKQotewotCXVuc2lnbmVkIGludCBmbG93ID0gTUFDX0ZMT1dfQ1RSTF9FTkFCTEU7Ci0KLQlpZiAoZHVwbGV4KQotCQlmbG93IHw9IChwYXVzZV90aW1lIDw8IE1BQ19GTE9XX0NUUkxfUFRfU0hJRlQpOwotCXdyaXRlbChmbG93LCBpb2FkZHIgKyBNQUNfRkxPV19DVFJMKTsKLQotCXJldHVybjsKLX0KLQotLyogTm8gUE1UIG1vZHVsZSBzdXBwb3J0ZWQgaW4gb3VyIFNvQyAgZm9yIHRoZSBFdGhlcm5ldCBDb250cm9sbGVyLiAqLwotc3RhdGljIHZvaWQgbWFjMTAwX3BtdCh1bnNpZ25lZCBsb25nIGlvYWRkciwgdW5zaWduZWQgbG9uZyBtb2RlKQotewotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX2luaXRfcnhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUsCi0JCQkJaW50IGRpc2FibGVfcnhfaWMpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IHJpbmdfc2l6ZTsgaSsrKSB7Ci0JCXAtPmRlczAxLnJ4Lm93biA9IDE7Ci0JCXAtPmRlczAxLnJ4LmJ1ZmZlcjFfc2l6ZSA9IEJVRl9TSVpFXzJLaUIgLSAxOwotCQlpZiAoaSA9PSByaW5nX3NpemUgLSAxKQotCQkJcC0+ZGVzMDEucnguZW5kX3JpbmcgPSAxOwotCQlpZiAoZGlzYWJsZV9yeF9pYykKLQkJCXAtPmRlczAxLnJ4LmRpc2FibGVfaWMgPSAxOwotCQlwKys7Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX2luaXRfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnAsIHVuc2lnbmVkIGludCByaW5nX3NpemUpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IHJpbmdfc2l6ZTsgaSsrKSB7Ci0JCXAtPmRlczAxLnR4Lm93biA9IDA7Ci0JCWlmIChpID09IHJpbmdfc2l6ZSAtIDEpCi0JCQlwLT5kZXMwMS50eC5lbmRfcmluZyA9IDE7Ci0JCXArKzsKLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50IG1hYzEwMF9nZXRfdHhfb3duZXIoc3RydWN0IGRtYV9kZXNjICpwKQotewotCXJldHVybiBwLT5kZXMwMS50eC5vd247Ci19Ci0KLXN0YXRpYyBpbnQgbWFjMTAwX2dldF9yeF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JcmV0dXJuIHAtPmRlczAxLnJ4Lm93bjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX3NldF90eF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JcC0+ZGVzMDEudHgub3duID0gMTsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX3NldF9yeF9vd25lcihzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JcC0+ZGVzMDEucngub3duID0gMTsKLX0KLQotc3RhdGljIGludCBtYWMxMDBfZ2V0X3R4X2xzKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlyZXR1cm4gcC0+ZGVzMDEudHgubGFzdF9zZWdtZW50OwotfQotCi1zdGF0aWMgdm9pZCBtYWMxMDBfcmVsZWFzZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlpbnQgdGVyID0gcC0+ZGVzMDEudHguZW5kX3Jpbmc7Ci0KLQkvKiBjbGVhbiBmaWVsZCB1c2VkIHdpdGhpbiB0aGUgeG1pdCAqLwotCXAtPmRlczAxLnR4LmZpcnN0X3NlZ21lbnQgPSAwOwotCXAtPmRlczAxLnR4Lmxhc3Rfc2VnbWVudCA9IDA7Ci0JcC0+ZGVzMDEudHguYnVmZmVyMV9zaXplID0gMDsKLQotCS8qIGNsZWFuIHN0YXR1cyByZXBvcnRlZCAqLwotCXAtPmRlczAxLnR4LmVycm9yX3N1bW1hcnkgPSAwOwotCXAtPmRlczAxLnR4LnVuZGVyZmxvd19lcnJvciA9IDA7Ci0JcC0+ZGVzMDEudHgubm9fY2FycmllciA9IDA7Ci0JcC0+ZGVzMDEudHgubG9zc19jYXJyaWVyID0gMDsKLQlwLT5kZXMwMS50eC5leGNlc3NpdmVfZGVmZXJyYWwgPSAwOwotCXAtPmRlczAxLnR4LmV4Y2Vzc2l2ZV9jb2xsaXNpb25zID0gMDsKLQlwLT5kZXMwMS50eC5sYXRlX2NvbGxpc2lvbiA9IDA7Ci0JcC0+ZGVzMDEudHguaGVhcnRiZWF0X2ZhaWwgPSAwOwotCXAtPmRlczAxLnR4LmRlZmVycmVkID0gMDsKLQotCS8qIHNldCB0ZXJtaW5hdGlvbiBmaWVsZCAqLwotCXAtPmRlczAxLnR4LmVuZF9yaW5nID0gdGVyOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBtYWMxMDBfcHJlcGFyZV90eF9kZXNjKHN0cnVjdCBkbWFfZGVzYyAqcCwgaW50IGlzX2ZzLCBpbnQgbGVuLAotCQkJCSAgIGludCBjc3VtX2ZsYWcpCi17Ci0JcC0+ZGVzMDEudHguZmlyc3Rfc2VnbWVudCA9IGlzX2ZzOwotCXAtPmRlczAxLnR4LmJ1ZmZlcjFfc2l6ZSA9IGxlbjsKLX0KLQotc3RhdGljIHZvaWQgbWFjMTAwX2NsZWFyX3R4X2ljKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlwLT5kZXMwMS50eC5pbnRlcnJ1cHQgPSAwOwotfQotCi1zdGF0aWMgdm9pZCBtYWMxMDBfY2xvc2VfdHhfZGVzYyhzdHJ1Y3QgZG1hX2Rlc2MgKnApCi17Ci0JcC0+ZGVzMDEudHgubGFzdF9zZWdtZW50ID0gMTsKLQlwLT5kZXMwMS50eC5pbnRlcnJ1cHQgPSAxOwotfQotCi1zdGF0aWMgaW50IG1hYzEwMF9nZXRfcnhfZnJhbWVfbGVuKHN0cnVjdCBkbWFfZGVzYyAqcCkKLXsKLQlyZXR1cm4gcC0+ZGVzMDEucnguZnJhbWVfbGVuZ3RoOwotfQotCi1zdHJ1Y3Qgc3RtbWFjX29wcyBtYWMxMDBfZHJpdmVyID0gewotCS5jb3JlX2luaXQgPSBtYWMxMDBfY29yZV9pbml0LAotCS5kdW1wX21hY19yZWdzID0gbWFjMTAwX2R1bXBfbWFjX3JlZ3MsCi0JLmRtYV9pbml0ID0gbWFjMTAwX2RtYV9pbml0LAotCS5kdW1wX2RtYV9yZWdzID0gbWFjMTAwX2R1bXBfZG1hX3JlZ3MsCi0JLmRtYV9tb2RlID0gbWFjMTAwX2RtYV9vcGVyYXRpb25fbW9kZSwKLQkuZG1hX2RpYWdub3N0aWNfZnIgPSBtYWMxMDBfZG1hX2RpYWdub3N0aWNfZnIsCi0JLnR4X3N0YXR1cyA9IG1hYzEwMF9nZXRfdHhfZnJhbWVfc3RhdHVzLAotCS5yeF9zdGF0dXMgPSBtYWMxMDBfZ2V0X3J4X2ZyYW1lX3N0YXR1cywKLQkuZ2V0X3R4X2xlbiA9IG1hYzEwMF9nZXRfdHhfbGVuLAotCS5zZXRfZmlsdGVyID0gbWFjMTAwX3NldF9maWx0ZXIsCi0JLmZsb3dfY3RybCA9IG1hYzEwMF9mbG93X2N0cmwsCi0JLnBtdCA9IG1hYzEwMF9wbXQsCi0JLmluaXRfcnhfZGVzYyA9IG1hYzEwMF9pbml0X3J4X2Rlc2MsCi0JLmluaXRfdHhfZGVzYyA9IG1hYzEwMF9pbml0X3R4X2Rlc2MsCi0JLmdldF90eF9vd25lciA9IG1hYzEwMF9nZXRfdHhfb3duZXIsCi0JLmdldF9yeF9vd25lciA9IG1hYzEwMF9nZXRfcnhfb3duZXIsCi0JLnJlbGVhc2VfdHhfZGVzYyA9IG1hYzEwMF9yZWxlYXNlX3R4X2Rlc2MsCi0JLnByZXBhcmVfdHhfZGVzYyA9IG1hYzEwMF9wcmVwYXJlX3R4X2Rlc2MsCi0JLmNsZWFyX3R4X2ljID0gbWFjMTAwX2NsZWFyX3R4X2ljLAotCS5jbG9zZV90eF9kZXNjID0gbWFjMTAwX2Nsb3NlX3R4X2Rlc2MsCi0JLmdldF90eF9scyA9IG1hYzEwMF9nZXRfdHhfbHMsCi0JLnNldF90eF9vd25lciA9IG1hYzEwMF9zZXRfdHhfb3duZXIsCi0JLnNldF9yeF9vd25lciA9IG1hYzEwMF9zZXRfcnhfb3duZXIsCi0JLmdldF9yeF9mcmFtZV9sZW4gPSBtYWMxMDBfZ2V0X3J4X2ZyYW1lX2xlbiwKLQkuaG9zdF9pcnFfc3RhdHVzID0gbWFjMTAwX2lycV9zdGF0dXMsCi0JLnNldF91bWFjX2FkZHIgPSBtYWMxMDBfc2V0X3VtYWNfYWRkciwKLQkuZ2V0X3VtYWNfYWRkciA9IG1hYzEwMF9nZXRfdW1hY19hZGRyLAotfTsKLQotc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjMTAwX3NldHVwKHVuc2lnbmVkIGxvbmcgaW9hZGRyKQotewotCXN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKm1hYzsKLQotCW1hYyA9IGt6YWxsb2Moc2l6ZW9mKGNvbnN0IHN0cnVjdCBtYWNfZGV2aWNlX2luZm8pLCBHRlBfS0VSTkVMKTsKLQotCXByX2luZm8oIlx0TUFDIDEwLzEwMFxuIik7Ci0KLQltYWMtPm9wcyA9ICZtYWMxMDBfZHJpdmVyOwotCW1hYy0+aHcucG10ID0gUE1UX05PVF9TVVBQT1JURUQ7Ci0JbWFjLT5ody5saW5rLnBvcnQgPSBNQUNfQ09OVFJPTF9QUzsKLQltYWMtPmh3LmxpbmsuZHVwbGV4ID0gTUFDX0NPTlRST0xfRjsKLQltYWMtPmh3Lmxpbmsuc3BlZWQgPSAwOwotCW1hYy0+aHcubWlpLmFkZHIgPSBNQUNfTUlJX0FERFI7Ci0JbWFjLT5ody5taWkuZGF0YSA9IE1BQ19NSUlfREFUQTsKLQotCXJldHVybiBtYWM7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjLmggYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjLmgKaW5kZXggNmQyZWFlMy4uYmEzNWU2OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hYy5oCisrKyBiL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWMuaApAQCAtMjAsNyArMjAsOCBAQAogICBBdXRob3I6IEdpdXNlcHBlIENhdmFsbGFybyA8cGVwcGUuY2F2YWxsYXJvQHN0LmNvbT4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSJPY3RfMDkiCisjZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiSmFuXzIwMTAiCisjaW5jbHVkZSA8bGludXgvc3RtbWFjLmg+CiAKICNpZiBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRKSB8fCBkZWZpbmVkKENPTkZJR19WTEFOXzgwMjFRX01PRFVMRSkKICNkZWZpbmUgU1RNTUFDX1ZMQU5fVEFHX1VTRUQKQEAgLTU3LDcgKzU4LDcgQEAKIAlpbnQgcnhfY3N1bTsKIAl1bnNpZ25lZCBpbnQgZG1hX2J1Zl9zejsKIAlzdHJ1Y3QgZGV2aWNlICpkZXZpY2U7Ci0Jc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqbWFjX3R5cGU7CisJc3RydWN0IG1hY19kZXZpY2VfaW5mbyAqaHc7CiAKIAlzdHJ1Y3Qgc3RtbWFjX2V4dHJhX3N0YXRzIHhzdGF0czsKIAlzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTsKQEAgLTY5LDYgKzcwLDcgQEAKIAlpbnQgcGh5X21hc2s7CiAJaW50ICgqcGh5X3Jlc2V0KSAodm9pZCAqcHJpdik7CiAJdm9pZCAoKmZpeF9tYWNfc3BlZWQpICh2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgc3BlZWQpOworCXZvaWQgKCpidXNfc2V0dXApKHVuc2lnbmVkIGxvbmcgaW9hZGRyKTsKIAl2b2lkICpic3BfcHJpdjsKIAogCWludCBwaHlfaXJxOwpAQCAtOTMsNiArOTUsMjggQEAKICNlbmRpZgogfTsKIAorI2lmZGVmIENPTkZJR19TVE1fRFJJVkVSUworI2luY2x1ZGUgPGxpbnV4L3N0bS9wYWQuaD4KK3N0YXRpYyBpbmxpbmUgaW50IHN0bW1hY19jbGFpbV9yZXNvdXJjZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBwbGF0X3N0bW1hY2VuZXRfZGF0YSAqcGxhdF9kYXQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKworCS8qIFBhZCByb3V0aW5nIHNldHVwICovCisJaWYgKElTX0VSUihkZXZtX3N0bV9wYWRfY2xhaW0oJnBkZXYtPmRldiwgcGxhdF9kYXQtPnBhZF9jb25maWcsCisJCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IEZhaWxlZCB0byByZXF1ZXN0IHBhZHMhXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9ERVY7CisJfQorCXJldHVybiByZXQ7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgc3RtbWFjX2NsYWltX3Jlc291cmNlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwogZXh0ZXJuIGludCBzdG1tYWNfbWRpb191bnJlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KTsKIGV4dGVybiBpbnQgc3RtbWFjX21kaW9fcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpOwogZXh0ZXJuIHZvaWQgc3RtbWFjX3NldF9ldGh0b29sX29wcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfZXRodG9vbC5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19ldGh0b29sLmMKaW5kZXggNjk0ZWJlNi4uYzAyMWVhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19ldGh0b29sLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9waHkuaD4KIAogI2luY2x1ZGUgInN0bW1hYy5oIgorI2luY2x1ZGUgImR3bWFjX2RtYS5oIgogCiAjZGVmaW5lIFJFR19TUEFDRV9TSVpFCTB4MTA1NAogI2RlZmluZSBNQUMxMDBfRVRIVE9PTF9OQU1FCSJzdF9tYWMxMDAiCkBAIC02MSw3ICs2Miw3IEBACiAJU1RNTUFDX1NUQVQocnhfdG9vbG9uZyksCiAJU1RNTUFDX1NUQVQocnhfY29sbGlzaW9uKSwKIAlTVE1NQUNfU1RBVChyeF9jcmMpLAotCVNUTU1BQ19TVEFUKHJ4X2xlbmdodCksCisJU1RNTUFDX1NUQVQocnhfbGVuZ3RoKSwKIAlTVE1NQUNfU1RBVChyeF9taWkpLAogCVNUTU1BQ19TVEFUKHJ4X211bHRpY2FzdCksCiAJU1RNTUFDX1NUQVQocnhfZ21hY19vdmVyZmxvdyksCkBAIC0yNjgsOCArMjY5LDggQEAKIAkJfQogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gbmV0ZGV2LT5iYXNlX2FkZHI7Ci0JCXByaXYtPm1hY190eXBlLT5vcHMtPmZsb3dfY3RybChpb2FkZHIsIHBoeS0+ZHVwbGV4LAotCQkJCQkgICAgICAgcHJpdi0+Zmxvd19jdHJsLCBwcml2LT5wYXVzZSk7CisJCXByaXYtPmh3LT5tYWMtPmZsb3dfY3RybChpb2FkZHIsIHBoeS0+ZHVwbGV4LAorCQkJCQkgcHJpdi0+Zmxvd19jdHJsLCBwcml2LT5wYXVzZSk7CiAJfQogCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKIAlyZXR1cm4gcmV0OwpAQCAtMjgzLDggKzI4NCw4IEBACiAJaW50IGk7CiAKIAkvKiBVcGRhdGUgSFcgc3RhdHMgaWYgc3VwcG9ydGVkICovCi0JcHJpdi0+bWFjX3R5cGUtPm9wcy0+ZG1hX2RpYWdub3N0aWNfZnIoJmRldi0+c3RhdHMsICZwcml2LT54c3RhdHMsCi0JCQkJCSAgICAgICBpb2FkZHIpOworCXByaXYtPmh3LT5kbWEtPmRtYV9kaWFnbm9zdGljX2ZyKCZkZXYtPnN0YXRzLCAodm9pZCAqKSAmcHJpdi0+eHN0YXRzLAorCQkJCQkgaW9hZGRyKTsKIAogCWZvciAoaSA9IDA7IGkgPCBTVE1NQUNfU1RBVFNfTEVOOyBpKyspIHsKIAkJY2hhciAqcCA9IChjaGFyICopcHJpdiArIHN0bW1hY19nc3RyaW5nc19zdGF0c1tpXS5zdGF0X29mZnNldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N0bW1hYy9zdG1tYWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKaW5kZXggNTA4ZmJhOC4uYTY3MzM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tYWluLmMKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgpAQCAtNDUsNyArNDQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0bS9zb2MuaD4KICNpbmNsdWRlICJzdG1tYWMuaCIKIAogI2RlZmluZSBTVE1NQUNfUkVTT1VSQ0VfTkFNRQkic3RtbWFjZXRoIgpAQCAtMjI2LDQxICsyMjQsMzggQEAKIAkJaWYgKHBoeWRldi0+ZHVwbGV4ICE9IHByaXYtPm9sZGR1cGxleCkgewogCQkJbmV3X3N0YXRlID0gMTsKIAkJCWlmICghKHBoeWRldi0+ZHVwbGV4KSkKLQkJCQljdHJsICY9IH5wcml2LT5tYWNfdHlwZS0+aHcubGluay5kdXBsZXg7CisJCQkJY3RybCAmPSB+cHJpdi0+aHctPmxpbmsuZHVwbGV4OwogCQkJZWxzZQotCQkJCWN0cmwgfD0gcHJpdi0+bWFjX3R5cGUtPmh3LmxpbmsuZHVwbGV4OworCQkJCWN0cmwgfD0gcHJpdi0+aHctPmxpbmsuZHVwbGV4OwogCQkJcHJpdi0+b2xkZHVwbGV4ID0gcGh5ZGV2LT5kdXBsZXg7CiAJCX0KIAkJLyogRmxvdyBDb250cm9sIG9wZXJhdGlvbiAqLwogCQlpZiAocGh5ZGV2LT5wYXVzZSkKLQkJCXByaXYtPm1hY190eXBlLT5vcHMtPmZsb3dfY3RybChpb2FkZHIsIHBoeWRldi0+ZHVwbGV4LAotCQkJCQkJICAgICAgIGZjLCBwYXVzZV90aW1lKTsKKwkJCXByaXYtPmh3LT5tYWMtPmZsb3dfY3RybChpb2FkZHIsIHBoeWRldi0+ZHVwbGV4LAorCQkJCQkJIGZjLCBwYXVzZV90aW1lKTsKIAogCQlpZiAocGh5ZGV2LT5zcGVlZCAhPSBwcml2LT5zcGVlZCkgewogCQkJbmV3X3N0YXRlID0gMTsKIAkJCXN3aXRjaCAocGh5ZGV2LT5zcGVlZCkgewogCQkJY2FzZSAxMDAwOgogCQkJCWlmIChsaWtlbHkocHJpdi0+aXNfZ21hYykpCi0JCQkJCWN0cmwgJj0gfnByaXYtPm1hY190eXBlLT5ody5saW5rLnBvcnQ7CisJCQkJCWN0cmwgJj0gfnByaXYtPmh3LT5saW5rLnBvcnQ7CiAJCQkJYnJlYWs7CiAJCQljYXNlIDEwMDoKIAkJCWNhc2UgMTA6CiAJCQkJaWYgKHByaXYtPmlzX2dtYWMpIHsKLQkJCQkJY3RybCB8PSBwcml2LT5tYWNfdHlwZS0+aHcubGluay5wb3J0OworCQkJCQljdHJsIHw9IHByaXYtPmh3LT5saW5rLnBvcnQ7CiAJCQkJCWlmIChwaHlkZXYtPnNwZWVkID09IFNQRUVEXzEwMCkgewotCQkJCQkJY3RybCB8PQotCQkJCQkJICAgIHByaXYtPm1hY190eXBlLT5ody5saW5rLgotCQkJCQkJICAgIHNwZWVkOworCQkJCQkJY3RybCB8PSBwcml2LT5ody0+bGluay5zcGVlZDsKIAkJCQkJfSBlbHNlIHsKLQkJCQkJCWN0cmwgJj0KLQkJCQkJCSAgICB+KHByaXYtPm1hY190eXBlLT5ody4KLQkJCQkJCSAgICAgIGxpbmsuc3BlZWQpOworCQkJCQkJY3RybCAmPSB+KHByaXYtPmh3LT5saW5rLnNwZWVkKTsKIAkJCQkJfQogCQkJCX0gZWxzZSB7Ci0JCQkJCWN0cmwgJj0gfnByaXYtPm1hY190eXBlLT5ody5saW5rLnBvcnQ7CisJCQkJCWN0cmwgJj0gfnByaXYtPmh3LT5saW5rLnBvcnQ7CiAJCQkJfQotCQkJCXByaXYtPmZpeF9tYWNfc3BlZWQocHJpdi0+YnNwX3ByaXYsCi0JCQkJCQkgICAgcGh5ZGV2LT5zcGVlZCk7CisJCQkJaWYgKGxpa2VseShwcml2LT5maXhfbWFjX3NwZWVkKSkKKwkJCQkJcHJpdi0+Zml4X21hY19zcGVlZChwcml2LT5ic3BfcHJpdiwKKwkJCQkJCQkgICAgcGh5ZGV2LT5zcGVlZCk7CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgogCQkJCWlmIChuZXRpZl9tc2dfbGluayhwcml2KSkKQEAgLTMwNSw4ICszMDAsOCBAQAogewogCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKLQljaGFyIHBoeV9pZFtCVVNfSURfU0laRV07CS8qIFBIWSB0byBjb25uZWN0ICovCi0JY2hhciBidXNfaWRbQlVTX0lEX1NJWkVdOworCWNoYXIgcGh5X2lkW01JSV9CVVNfSURfU0laRSArIDNdOworCWNoYXIgYnVzX2lkW01JSV9CVVNfSURfU0laRV07CiAKIAlwcml2LT5vbGRsaW5rID0gMDsKIAlwcml2LT5zcGVlZCA9IDA7CkBAIC0zMTgsNyArMzEzLDggQEAKIAl9CiAKIAlzbnByaW50ZihidXNfaWQsIE1JSV9CVVNfSURfU0laRSwgIiV4IiwgcHJpdi0+YnVzX2lkKTsKLQlzbnByaW50ZihwaHlfaWQsIEJVU19JRF9TSVpFLCBQSFlfSURfRk1ULCBidXNfaWQsIHByaXYtPnBoeV9hZGRyKTsKKwlzbnByaW50ZihwaHlfaWQsIE1JSV9CVVNfSURfU0laRSArIDMsIFBIWV9JRF9GTVQsIGJ1c19pZCwKKwkJIHByaXYtPnBoeV9hZGRyKTsKIAlwcl9kZWJ1Zygic3RtbWFjX2luaXRfcGh5OiAgdHJ5aW5nIHRvIGF0dGFjaCB0byAlc1xuIiwgcGh5X2lkKTsKIAogCXBoeWRldiA9IHBoeV9jb25uZWN0KGRldiwgcGh5X2lkLCAmc3RtbWFjX2FkanVzdF9saW5rLCAwLApAQCAtNTA4LDggKzUwNCw4IEBACiAJcHJpdi0+Y3VyX3R4ID0gMDsKIAogCS8qIENsZWFyIHRoZSBSeC9UeCBkZXNjcmlwdG9ycyAqLwotCXByaXYtPm1hY190eXBlLT5vcHMtPmluaXRfcnhfZGVzYyhwcml2LT5kbWFfcngsIHJ4c2l6ZSwgZGlzX2ljKTsKLQlwcml2LT5tYWNfdHlwZS0+b3BzLT5pbml0X3R4X2Rlc2MocHJpdi0+ZG1hX3R4LCB0eHNpemUpOworCXByaXYtPmh3LT5kZXNjLT5pbml0X3J4X2Rlc2MocHJpdi0+ZG1hX3J4LCByeHNpemUsIGRpc19pYyk7CisJcHJpdi0+aHctPmRlc2MtPmluaXRfdHhfZGVzYyhwcml2LT5kbWFfdHgsIHR4c2l6ZSk7CiAKIAlpZiAobmV0aWZfbXNnX2h3KHByaXYpKSB7CiAJCXByX2luZm8oIlJYIGRlc2NyaXB0b3IgcmluZzpcbiIpOwpAQCAtNTQ0LDggKzU0MCw4IEBACiAJCQlzdHJ1Y3QgZG1hX2Rlc2MgKnAgPSBwcml2LT5kbWFfdHggKyBpOwogCQkJaWYgKHAtPmRlczIpCiAJCQkJZG1hX3VubWFwX3NpbmdsZShwcml2LT5kZXZpY2UsIHAtPmRlczIsCi0JCQkJIHByaXYtPm1hY190eXBlLT5vcHMtPmdldF90eF9sZW4ocCksCi0JCQkJIERNQV9UT19ERVZJQ0UpOworCQkJCQkJIHByaXYtPmh3LT5kZXNjLT5nZXRfdHhfbGVuKHApLAorCQkJCQkJIERNQV9UT19ERVZJQ0UpOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkocHJpdi0+dHhfc2tidWZmW2ldKTsKIAkJCXByaXYtPnR4X3NrYnVmZltpXSA9IE5VTEw7CiAJCX0KQEAgLTU3NSw1MCArNTcxLDYgQEAKIH0KIAogLyoqCi0gKiBzdG1tYWNfZG1hX3N0YXJ0X3R4Ci0gKiBAaW9hZGRyOiBkZXZpY2UgSS9PIGFkZHJlc3MKLSAqIERlc2NyaXB0aW9uOiAgdGhpcyBmdW5jdGlvbiBzdGFydHMgdGhlIERNQSB0eCBwcm9jZXNzLgotICovCi1zdGF0aWMgdm9pZCBzdG1tYWNfZG1hX3N0YXJ0X3R4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQotewotCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKLQl2YWx1ZSB8PSBETUFfQ09OVFJPTF9TVDsKLQl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9DT05UUk9MKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHN0bW1hY19kbWFfc3RvcF90eCh1bnNpZ25lZCBsb25nIGlvYWRkcikKLXsKLQl1MzIgdmFsdWUgPSByZWFkbChpb2FkZHIgKyBETUFfQ09OVFJPTCk7Ci0JdmFsdWUgJj0gfkRNQV9DT05UUk9MX1NUOwotCXdyaXRlbCh2YWx1ZSwgaW9hZGRyICsgRE1BX0NPTlRST0wpOwotCXJldHVybjsKLX0KLQotLyoqCi0gKiBzdG1tYWNfZG1hX3N0YXJ0X3J4Ci0gKiBAaW9hZGRyOiBkZXZpY2UgSS9PIGFkZHJlc3MKLSAqIERlc2NyaXB0aW9uOiAgdGhpcyBmdW5jdGlvbiBzdGFydHMgdGhlIERNQSByeCBwcm9jZXNzLgotICovCi1zdGF0aWMgdm9pZCBzdG1tYWNfZG1hX3N0YXJ0X3J4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQotewotCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKLQl2YWx1ZSB8PSBETUFfQ09OVFJPTF9TUjsKLQl3cml0ZWwodmFsdWUsIGlvYWRkciArIERNQV9DT05UUk9MKTsKLQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgc3RtbWFjX2RtYV9zdG9wX3J4KHVuc2lnbmVkIGxvbmcgaW9hZGRyKQotewotCXUzMiB2YWx1ZSA9IHJlYWRsKGlvYWRkciArIERNQV9DT05UUk9MKTsKLQl2YWx1ZSAmPSB+RE1BX0NPTlRST0xfU1I7Ci0Jd3JpdGVsKHZhbHVlLCBpb2FkZHIgKyBETUFfQ09OVFJPTCk7Ci0KLQlyZXR1cm47Ci19Ci0KLS8qKgogICogIHN0bW1hY19kbWFfb3BlcmF0aW9uX21vZGUgLSBIVyBETUEgb3BlcmF0aW9uIG1vZGUKICAqICBAcHJpdiA6IHBvaW50ZXIgdG8gdGhlIHByaXZhdGUgZGV2aWNlIHN0cnVjdHVyZS4KICAqICBEZXNjcmlwdGlvbjogaXQgc2V0cyB0aGUgRE1BIG9wZXJhdGlvbiBtb2RlOiB0eC9yeCBETUEgdGhyZXNob2xkcwpAQCAtNjI5LDE4ICs1ODEsMTggQEAKIHsKIAlpZiAoIXByaXYtPmlzX2dtYWMpIHsKIAkJLyogTUFDIDEwLzEwMCAqLwotCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5kbWFfbW9kZShwcml2LT5kZXYtPmJhc2VfYWRkciwgdGMsIDApOworCQlwcml2LT5ody0+ZG1hLT5kbWFfbW9kZShwcml2LT5kZXYtPmJhc2VfYWRkciwgdGMsIDApOwogCQlwcml2LT50eF9jb2UgPSBOT19IV19DU1VNOwogCX0gZWxzZSB7CiAJCWlmICgocHJpdi0+ZGV2LT5tdHUgPD0gRVRIX0RBVEFfTEVOKSAmJiAodHhfY29lKSkgewotCQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+ZG1hX21vZGUocHJpdi0+ZGV2LT5iYXNlX2FkZHIsCi0JCQkJCQkgICAgICBTRl9ETUFfTU9ERSwgU0ZfRE1BX01PREUpOworCQkJcHJpdi0+aHctPmRtYS0+ZG1hX21vZGUocHJpdi0+ZGV2LT5iYXNlX2FkZHIsCisJCQkJCQlTRl9ETUFfTU9ERSwgU0ZfRE1BX01PREUpOwogCQkJdGMgPSBTRl9ETUFfTU9ERTsKIAkJCXByaXYtPnR4X2NvZSA9IEhXX0NTVU07CiAJCX0gZWxzZSB7CiAJCQkvKiBDaGVja3N1bSBjb21wdXRhdGlvbiBpcyBwZXJmb3JtZWQgaW4gc29mdHdhcmUuICovCi0JCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5kbWFfbW9kZShwcml2LT5kZXYtPmJhc2VfYWRkciwgdGMsCi0JCQkJCQkgICAgICBTRl9ETUFfTU9ERSk7CisJCQlwcml2LT5ody0+ZG1hLT5kbWFfbW9kZShwcml2LT5kZXYtPmJhc2VfYWRkciwgdGMsCisJCQkJCQlTRl9ETUFfTU9ERSk7CiAJCQlwcml2LT50eF9jb2UgPSBOT19IV19DU1VNOwogCQl9CiAJfQpAQCAtNjQ5LDg4ICs2MDEsNiBAQAogCXJldHVybjsKIH0KIAotI2lmZGVmIFNUTU1BQ19ERUJVRwotLyoqCi0gKiBzaG93X3R4X3Byb2Nlc3Nfc3RhdGUKLSAqIEBzdGF0dXM6IHR4IGRlc2NyaXB0b3Igc3RhdHVzIGZpZWxkCi0gKiBEZXNjcmlwdGlvbjogaXQgc2hvd3MgdGhlIFRyYW5zbWl0IFByb2Nlc3MgU3RhdGUgZm9yIENTUjVbMjI6MjBdCi0gKi8KLXN0YXRpYyB2b2lkIHNob3dfdHhfcHJvY2Vzc19zdGF0ZSh1bnNpZ25lZCBpbnQgc3RhdHVzKQotewotCXVuc2lnbmVkIGludCBzdGF0ZTsKLQlzdGF0ZSA9IChzdGF0dXMgJiBETUFfU1RBVFVTX1RTX01BU0spID4+IERNQV9TVEFUVVNfVFNfU0hJRlQ7Ci0KLQlzd2l0Y2ggKHN0YXRlKSB7Ci0JY2FzZSAwOgotCQlwcl9pbmZvKCItIFRYIChTdG9wcGVkKTogUmVzZXQgb3IgU3RvcCBjb21tYW5kXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSAxOgotCQlwcl9pbmZvKCItIFRYIChSdW5uaW5nKTpGZXRjaGluZyB0aGUgVHggZGVzY1xuIik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJcHJfaW5mbygiLSBUWCAoUnVubmluZyk6IFdhaXRpbmcgZm9yIGVuZCBvZiB0eFxuIik7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJcHJfaW5mbygiLSBUWCAoUnVubmluZyk6IFJlYWRpbmcgdGhlIGRhdGEgIgotCQkgICAgICAgImFuZCBxdWV1aW5nIHRoZSBkYXRhIGludG8gdGhlIFR4IGJ1ZlxuIik7Ci0JCWJyZWFrOwotCWNhc2UgNjoKLQkJcHJfaW5mbygiLSBUWCAoU3VzcGVuZGVkKTogVHggQnVmZiBVbmRlcmZsb3cgIgotCQkgICAgICAgIm9yIGFuIHVuYXZhaWxhYmxlIFRyYW5zbWl0IGRlc2NyaXB0b3JcbiIpOwotCQlicmVhazsKLQljYXNlIDc6Ci0JCXByX2luZm8oIi0gVFggKFJ1bm5pbmcpOiBDbG9zaW5nIFR4IGRlc2NyaXB0b3JcbiIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JcmV0dXJuOwotfQotCi0vKioKLSAqIHNob3dfcnhfcHJvY2Vzc19zdGF0ZQotICogQHN0YXR1czogcnggZGVzY3JpcHRvciBzdGF0dXMgZmllbGQKLSAqIERlc2NyaXB0aW9uOiBpdCBzaG93cyB0aGUgIFJlY2VpdmUgUHJvY2VzcyBTdGF0ZSBmb3IgQ1NSNVsxOToxN10KLSAqLwotc3RhdGljIHZvaWQgc2hvd19yeF9wcm9jZXNzX3N0YXRlKHVuc2lnbmVkIGludCBzdGF0dXMpCi17Ci0JdW5zaWduZWQgaW50IHN0YXRlOwotCXN0YXRlID0gKHN0YXR1cyAmIERNQV9TVEFUVVNfUlNfTUFTSykgPj4gRE1BX1NUQVRVU19SU19TSElGVDsKLQotCXN3aXRjaCAoc3RhdGUpIHsKLQljYXNlIDA6Ci0JCXByX2luZm8oIi0gUlggKFN0b3BwZWQpOiBSZXNldCBvciBTdG9wIGNvbW1hbmRcbiIpOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXByX2luZm8oIi0gUlggKFJ1bm5pbmcpOiBGZXRjaGluZyB0aGUgUnggZGVzY1xuIik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6Q2hlY2tpbmcgZm9yIGVuZCBvZiBwa3RcbiIpOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCXByX2luZm8oIi0gUlggKFJ1bm5pbmcpOiBXYWl0aW5nIGZvciBSeCBwa3RcbiIpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCXByX2luZm8oIi0gUlggKFN1c3BlbmRlZCk6IFVuYXZhaWxhYmxlIFJ4IGJ1ZlxuIik7Ci0JCWJyZWFrOwotCWNhc2UgNToKLQkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6IENsb3NpbmcgUnggZGVzY3JpcHRvclxuIik7Ci0JCWJyZWFrOwotCWNhc2UgNjoKLQkJcHJfaW5mbygiLSBSWChSdW5uaW5nKTogRmx1c2hpbmcgdGhlIGN1cnJlbnQgZnJhbWUiCi0JCSAgICAgICAiIGZyb20gdGhlIFJ4IGJ1ZlxuIik7Ci0JCWJyZWFrOwotCWNhc2UgNzoKLQkJcHJfaW5mbygiLSBSWCAoUnVubmluZyk6IFF1ZXVpbmcgdGhlIFJ4IGZyYW1lIgotCQkgICAgICAgIiBmcm9tIHRoZSBSeCBidWYgaW50byBtZW1vcnlcbiIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JcmV0dXJuOwotfQotI2VuZGlmCi0KIC8qKgogICogc3RtbWFjX3R4OgogICogQHByaXY6IHByaXZhdGUgZHJpdmVyIHN0cnVjdHVyZQpAQCAtNzQ4LDE2ICs2MTgsMTYgQEAKIAkJc3RydWN0IGRtYV9kZXNjICpwID0gcHJpdi0+ZG1hX3R4ICsgZW50cnk7CiAKIAkJLyogQ2hlY2sgaWYgdGhlIGRlc2NyaXB0b3IgaXMgb3duZWQgYnkgdGhlIERNQS4gKi8KLQkJaWYgKHByaXYtPm1hY190eXBlLT5vcHMtPmdldF90eF9vd25lcihwKSkKKwkJaWYgKHByaXYtPmh3LT5kZXNjLT5nZXRfdHhfb3duZXIocCkpCiAJCQlicmVhazsKIAogCQkvKiBWZXJpZnkgdHggZXJyb3IgYnkgbG9va2luZyBhdCB0aGUgbGFzdCBzZWdtZW50ICovCi0JCWxhc3QgPSBwcml2LT5tYWNfdHlwZS0+b3BzLT5nZXRfdHhfbHMocCk7CisJCWxhc3QgPSBwcml2LT5ody0+ZGVzYy0+Z2V0X3R4X2xzKHApOwogCQlpZiAobGlrZWx5KGxhc3QpKSB7CiAJCQlpbnQgdHhfZXJyb3IgPQotCQkJICAgIHByaXYtPm1hY190eXBlLT5vcHMtPnR4X3N0YXR1cygmcHJpdi0+ZGV2LT5zdGF0cywKLQkJCQkJCQkgICAmcHJpdi0+eHN0YXRzLAotCQkJCQkJCSAgIHAsIGlvYWRkcik7CisJCQkJcHJpdi0+aHctPmRlc2MtPnR4X3N0YXR1cygmcHJpdi0+ZGV2LT5zdGF0cywKKwkJCQkJCQkgICZwcml2LT54c3RhdHMsIHAsCisJCQkJCQkJICBpb2FkZHIpOwogCQkJaWYgKGxpa2VseSh0eF9lcnJvciA9PSAwKSkgewogCQkJCXByaXYtPmRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQkJCXByaXYtPnhzdGF0cy50eF9wa3RfbisrOwpAQCAtNzY5LDcgKzYzOSw3IEBACiAKIAkJaWYgKGxpa2VseShwLT5kZXMyKSkKIAkJCWRtYV91bm1hcF9zaW5nbGUocHJpdi0+ZGV2aWNlLCBwLT5kZXMyLAotCQkJCQkgcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3R4X2xlbihwKSwKKwkJCQkJIHByaXYtPmh3LT5kZXNjLT5nZXRfdHhfbGVuKHApLAogCQkJCQkgRE1BX1RPX0RFVklDRSk7CiAJCWlmICh1bmxpa2VseShwLT5kZXMzKSkKIAkJCXAtPmRlczMgPSAwOwpAQCAtNzkwLDcgKzY2MCw3IEBACiAJCQlwcml2LT50eF9za2J1ZmZbZW50cnldID0gTlVMTDsKIAkJfQogCi0JCXByaXYtPm1hY190eXBlLT5vcHMtPnJlbGVhc2VfdHhfZGVzYyhwKTsKKwkJcHJpdi0+aHctPmRlc2MtPnJlbGVhc2VfdHhfZGVzYyhwKTsKIAogCQllbnRyeSA9ICgrK3ByaXYtPmRpcnR5X3R4KSAlIHR4c2l6ZTsKIAl9CkBAIC04MTQsNyArNjg0LDcgQEAKIAkJcHJpdi0+dG0tPnRpbWVyX3N0YXJ0KHRtcmF0ZSk7CiAJZWxzZQogI2VuZGlmCi0Jd3JpdGVsKERNQV9JTlRSX0RFRkFVTFRfTUFTSywgcHJpdi0+ZGV2LT5iYXNlX2FkZHIgKyBETUFfSU5UUl9FTkEpOworCQlwcml2LT5ody0+ZG1hLT5lbmFibGVfZG1hX2lycShwcml2LT5kZXYtPmJhc2VfYWRkcik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzdG1tYWNfZGlzYWJsZV9pcnEoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQpAQCAtODI0LDcgKzY5NCw3IEBACiAJCXByaXYtPnRtLT50aW1lcl9zdG9wKCk7CiAJZWxzZQogI2VuZGlmCi0Jd3JpdGVsKDAsIHByaXYtPmRldi0+YmFzZV9hZGRyICsgRE1BX0lOVFJfRU5BKTsKKwkJcHJpdi0+aHctPmRtYS0+ZGlzYWJsZV9kbWFfaXJxKHByaXYtPmRldi0+YmFzZV9hZGRyKTsKIH0KIAogc3RhdGljIGludCBzdG1tYWNfaGFzX3dvcmsoc3RydWN0IHN0bW1hY19wcml2ICpwcml2KQpAQCAtODMyLDcgKzcwMiw3IEBACiAJdW5zaWduZWQgaW50IGhhc193b3JrID0gMDsKIAlpbnQgcnhyZXQsIHR4X3dvcmsgPSAwOwogCi0JcnhyZXQgPSBwcml2LT5tYWNfdHlwZS0+b3BzLT5nZXRfcnhfb3duZXIocHJpdi0+ZG1hX3J4ICsKKwlyeHJldCA9IHByaXYtPmh3LT5kZXNjLT5nZXRfcnhfb3duZXIocHJpdi0+ZG1hX3J4ICsKIAkJKHByaXYtPmN1cl9yeCAlIHByaXYtPmRtYV9yeF9zaXplKSk7CiAKIAlpZiAocHJpdi0+ZGlydHlfdHggIT0gcHJpdi0+Y3VyX3R4KQpAQCAtODgzLDEyICs3NTMsMTIgQEAKIHsKIAluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPmRldik7CiAKLQlzdG1tYWNfZG1hX3N0b3BfdHgocHJpdi0+ZGV2LT5iYXNlX2FkZHIpOworCXByaXYtPmh3LT5kbWEtPnN0b3BfdHgocHJpdi0+ZGV2LT5iYXNlX2FkZHIpOwogCWRtYV9mcmVlX3R4X3NrYnVmcyhwcml2KTsKLQlwcml2LT5tYWNfdHlwZS0+b3BzLT5pbml0X3R4X2Rlc2MocHJpdi0+ZG1hX3R4LCBwcml2LT5kbWFfdHhfc2l6ZSk7CisJcHJpdi0+aHctPmRlc2MtPmluaXRfdHhfZGVzYyhwcml2LT5kbWFfdHgsIHByaXYtPmRtYV90eF9zaXplKTsKIAlwcml2LT5kaXJ0eV90eCA9IDA7CiAJcHJpdi0+Y3VyX3R4ID0gMDsKLQlzdG1tYWNfZG1hX3N0YXJ0X3R4KHByaXYtPmRldi0+YmFzZV9hZGRyKTsKKwlwcml2LT5ody0+ZG1hLT5zdGFydF90eChwcml2LT5kZXYtPmJhc2VfYWRkcik7CiAKIAlwcml2LT5kZXYtPnN0YXRzLnR4X2Vycm9ycysrOwogCW5ldGlmX3dha2VfcXVldWUocHJpdi0+ZGV2KTsKQEAgLTg5Niw5NSArNzY2LDI3IEBACiAJcmV0dXJuOwogfQogCi0vKioKLSAqIHN0bW1hY19kbWFfaW50ZXJydXB0IC0gSW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBkcml2ZXIKLSAqIEBkZXY6IG5ldCBkZXZpY2Ugc3RydWN0dXJlCi0gKiBEZXNjcmlwdGlvbjogSW50ZXJydXB0IGhhbmRsZXIgZm9yIHRoZSBkcml2ZXIgKERNQSkuCi0gKi8KLXN0YXRpYyB2b2lkIHN0bW1hY19kbWFfaW50ZXJydXB0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCisKK3N0YXRpYyB2b2lkIHN0bW1hY19kbWFfaW50ZXJydXB0KHN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdikKIHsKLQl1bnNpZ25lZCBsb25nIGlvYWRkciA9IGRldi0+YmFzZV9hZGRyOwotCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KGRldik7Ci0JLyogcmVhZCB0aGUgc3RhdHVzIHJlZ2lzdGVyIChDU1I1KSAqLwotCXUzMiBpbnRyX3N0YXR1cyA9IHJlYWRsKGlvYWRkciArIERNQV9TVEFUVVMpOworCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gcHJpdi0+ZGV2LT5iYXNlX2FkZHI7CisJaW50IHN0YXR1czsKIAotCURCRyhpbnRyLCBJTkZPLCAiJXM6IFtDU1I1OiAweCUwOHhdXG4iLCBfX2Z1bmNfXywgaW50cl9zdGF0dXMpOworCXN0YXR1cyA9IHByaXYtPmh3LT5kbWEtPmRtYV9pbnRlcnJ1cHQocHJpdi0+ZGV2LT5iYXNlX2FkZHIsCisJCQkJCSAgICAgICZwcml2LT54c3RhdHMpOworCWlmIChsaWtlbHkoc3RhdHVzID09IGhhbmRsZV90eF9yeCkpCisJCV9zdG1tYWNfc2NoZWR1bGUocHJpdik7CiAKLSNpZmRlZiBTVE1NQUNfREVCVUcKLQkvKiBJdCBkaXNwbGF5cyB0aGUgRE1BIHRyYW5zbWl0IHByb2Nlc3Mgc3RhdGUgKENTUjUgcmVnaXN0ZXIpICovCi0JaWYgKG5ldGlmX21zZ190eF9kb25lKHByaXYpKQotCQlzaG93X3R4X3Byb2Nlc3Nfc3RhdGUoaW50cl9zdGF0dXMpOwotCWlmIChuZXRpZl9tc2dfcnhfc3RhdHVzKHByaXYpKQotCQlzaG93X3J4X3Byb2Nlc3Nfc3RhdGUoaW50cl9zdGF0dXMpOwotI2VuZGlmCi0JLyogQUJOT1JNQUwgaW50ZXJydXB0cyAqLwotCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfQUlTKSkgewotCQlEQkcoaW50ciwgSU5GTywgIkNTUjVbMTVdIERNQSBBQk5PUk1BTCBJUlE6ICIpOwotCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1VORikpIHsKLQkJCURCRyhpbnRyLCBJTkZPLCAidHJhbnNtaXQgdW5kZXJmbG93XG4iKTsKLQkJCWlmICh1bmxpa2VseSh0YyAhPSBTRl9ETUFfTU9ERSkgJiYgKHRjIDw9IDI1NikpIHsKLQkJCQkvKiBUcnkgdG8gYnVtcCB1cCB0aGUgdGhyZXNob2xkICovCi0JCQkJdGMgKz0gNjQ7Ci0JCQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+ZG1hX21vZGUoaW9hZGRyLCB0YywKLQkJCQkJICAgICAgU0ZfRE1BX01PREUpOwotCQkJCXByaXYtPnhzdGF0cy50aHJlc2hvbGQgPSB0YzsKLQkJCX0KLQkJCXN0bW1hY190eF9lcnIocHJpdik7Ci0JCQlwcml2LT54c3RhdHMudHhfdW5kZWZsb3dfaXJxKys7CisJZWxzZSBpZiAodW5saWtlbHkoc3RhdHVzID09IHR4X2hhcmRfZXJyb3JfYnVtcF90YykpIHsKKwkJLyogVHJ5IHRvIGJ1bXAgdXAgdGhlIGRtYSB0aHJlc2hvbGQgb24gdGhpcyBmYWlsdXJlICovCisJCWlmICh1bmxpa2VseSh0YyAhPSBTRl9ETUFfTU9ERSkgJiYgKHRjIDw9IDI1NikpIHsKKwkJCXRjICs9IDY0OworCQkJcHJpdi0+aHctPmRtYS0+ZG1hX21vZGUoaW9hZGRyLCB0YywgU0ZfRE1BX01PREUpOworCQkJcHJpdi0+eHN0YXRzLnRocmVzaG9sZCA9IHRjOwogCQl9Ci0JCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfVEpUKSkgewotCQkJREJHKGludHIsIElORk8sICJ0cmFuc21pdCBqYWJiZXJcbiIpOwotCQkJcHJpdi0+eHN0YXRzLnR4X2phYmJlcl9pcnErKzsKLQkJfQotCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX09WRikpIHsKLQkJCURCRyhpbnRyLCBJTkZPLCAicmVjdiBvdmVyZmxvd1xuIik7Ci0JCQlwcml2LT54c3RhdHMucnhfb3ZlcmZsb3dfaXJxKys7Ci0JCX0KLQkJaWYgKHVubGlrZWx5KGludHJfc3RhdHVzICYgRE1BX1NUQVRVU19SVSkpIHsKLQkJCURCRyhpbnRyLCBJTkZPLCAicmVjZWl2ZSBidWZmZXIgdW5hdmFpbGFibGVcbiIpOwotCQkJcHJpdi0+eHN0YXRzLnJ4X2J1Zl91bmF2X2lycSsrOwotCQl9Ci0JCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUlBTKSkgewotCQkJREJHKGludHIsIElORk8sICJyZWNlaXZlIHByb2Nlc3Mgc3RvcHBlZFxuIik7Ci0JCQlwcml2LT54c3RhdHMucnhfcHJvY2Vzc19zdG9wcGVkX2lycSsrOwotCQl9Ci0JCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfUldUKSkgewotCQkJREJHKGludHIsIElORk8sICJyZWNlaXZlIHdhdGNoZG9nXG4iKTsKLQkJCXByaXYtPnhzdGF0cy5yeF93YXRjaGRvZ19pcnErKzsKLQkJfQotCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX0VUSSkpIHsKLQkJCURCRyhpbnRyLCBJTkZPLCAidHJhbnNtaXQgZWFybHkgaW50ZXJydXB0XG4iKTsKLQkJCXByaXYtPnhzdGF0cy50eF9lYXJseV9pcnErKzsKLQkJfQotCQlpZiAodW5saWtlbHkoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1RQUykpIHsKLQkJCURCRyhpbnRyLCBJTkZPLCAidHJhbnNtaXQgcHJvY2VzcyBzdG9wcGVkXG4iKTsKLQkJCXByaXYtPnhzdGF0cy50eF9wcm9jZXNzX3N0b3BwZWRfaXJxKys7Ci0JCQlzdG1tYWNfdHhfZXJyKHByaXYpOwotCQl9Ci0JCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfRkJJKSkgewotCQkJREJHKGludHIsIElORk8sICJmYXRhbCBidXMgZXJyb3JcbiIpOwotCQkJcHJpdi0+eHN0YXRzLmZhdGFsX2J1c19lcnJvcl9pcnErKzsKLQkJCXN0bW1hY190eF9lcnIocHJpdik7Ci0JCX0KLQl9Ci0KLQkvKiBUWC9SWCBOT1JNQUwgaW50ZXJydXB0cyAqLwotCWlmIChpbnRyX3N0YXR1cyAmIERNQV9TVEFUVVNfTklTKSB7Ci0JCXByaXYtPnhzdGF0cy5ub3JtYWxfaXJxX24rKzsKLQkJaWYgKGxpa2VseSgoaW50cl9zdGF0dXMgJiBETUFfU1RBVFVTX1JJKSB8fAotCQkJIChpbnRyX3N0YXR1cyAmIChETUFfU1RBVFVTX1RJKSkpKQotCQkJCV9zdG1tYWNfc2NoZWR1bGUocHJpdik7Ci0JfQotCi0JLyogT3B0aW9uYWwgaGFyZHdhcmUgYmxvY2tzLCBpbnRlcnJ1cHRzIHNob3VsZCBiZSBkaXNhYmxlZCAqLwotCWlmICh1bmxpa2VseShpbnRyX3N0YXR1cyAmCi0JCSAgICAgKERNQV9TVEFUVVNfR1BJIHwgRE1BX1NUQVRVU19HTUkgfCBETUFfU1RBVFVTX0dMSSkpKQotCQlwcl9pbmZvKCIlczogdW5leHBlY3RlZCBzdGF0dXMgJTA4eFxuIiwgX19mdW5jX18sIGludHJfc3RhdHVzKTsKLQotCS8qIENsZWFyIHRoZSBpbnRlcnJ1cHQgYnkgd3JpdGluZyBhIGxvZ2ljIDEgdG8gdGhlIENTUjVbMTUtMF0gKi8KLQl3cml0ZWwoKGludHJfc3RhdHVzICYgMHgxZmZmZiksIGlvYWRkciArIERNQV9TVEFUVVMpOwotCi0JREJHKGludHIsIElORk8sICJcblxuIik7CisJCXN0bW1hY190eF9lcnIocHJpdik7CisJfSBlbHNlIGlmICh1bmxpa2VseShzdGF0dXMgPT0gdHhfaGFyZF9lcnJvcikpCisJCXN0bW1hY190eF9lcnIocHJpdik7CiAKIAlyZXR1cm47CiB9CkBAIC0xMDU4LDE3ICs4NjAsMjAgQEAKIAlpbml0X2RtYV9kZXNjX3JpbmdzKGRldik7CiAKIAkvKiBETUEgaW5pdGlhbGl6YXRpb24gYW5kIFNXIHJlc2V0ICovCi0JaWYgKHVubGlrZWx5KHByaXYtPm1hY190eXBlLT5vcHMtPmRtYV9pbml0KGlvYWRkciwKLQkJcHJpdi0+cGJsLCBwcml2LT5kbWFfdHhfcGh5LCBwcml2LT5kbWFfcnhfcGh5KSA8IDApKSB7CisJaWYgKHVubGlrZWx5KHByaXYtPmh3LT5kbWEtPmluaXQoaW9hZGRyLCBwcml2LT5wYmwsIHByaXYtPmRtYV90eF9waHksCisJCQkJCSBwcml2LT5kbWFfcnhfcGh5KSA8IDApKSB7CiAKIAkJcHJfZXJyKCIlczogRE1BIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJLyogQ29weSB0aGUgTUFDIGFkZHIgaW50byB0aGUgSFcgICovCi0JcHJpdi0+bWFjX3R5cGUtPm9wcy0+c2V0X3VtYWNfYWRkcihpb2FkZHIsIGRldi0+ZGV2X2FkZHIsIDApOworCXByaXYtPmh3LT5tYWMtPnNldF91bWFjX2FkZHIoaW9hZGRyLCBkZXYtPmRldl9hZGRyLCAwKTsKKwkvKiBJZiByZXF1aXJlZCwgcGVyZm9ybSBodyBzZXR1cCBvZiB0aGUgYnVzLiAqLworCWlmIChwcml2LT5idXNfc2V0dXApCisJCXByaXYtPmJ1c19zZXR1cChpb2FkZHIpOwogCS8qIEluaXRpYWxpemUgdGhlIE1BQyBDb3JlICovCi0JcHJpdi0+bWFjX3R5cGUtPm9wcy0+Y29yZV9pbml0KGlvYWRkcik7CisJcHJpdi0+aHctPm1hYy0+Y29yZV9pbml0KGlvYWRkcik7CiAKIAlwcml2LT5zaHV0ZG93biA9IDA7CiAKQEAgLTEwODksMTYgKzg5NCwxNiBAQAogCiAJLyogU3RhcnQgdGhlIGJhbGwgcm9sbGluZy4uLiAqLwogCURCRyhwcm9iZSwgREVCVUcsICIlczogRE1BIFJYL1RYIHByb2Nlc3NlcyBzdGFydGVkLi4uXG4iLCBkZXYtPm5hbWUpOwotCXN0bW1hY19kbWFfc3RhcnRfdHgoaW9hZGRyKTsKLQlzdG1tYWNfZG1hX3N0YXJ0X3J4KGlvYWRkcik7CisJcHJpdi0+aHctPmRtYS0+c3RhcnRfdHgoaW9hZGRyKTsKKwlwcml2LT5ody0+ZG1hLT5zdGFydF9yeChpb2FkZHIpOwogCiAjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgogCXByaXYtPnRtLT50aW1lcl9zdGFydCh0bXJhdGUpOwogI2VuZGlmCiAJLyogRHVtcCBETUEvTUFDIHJlZ2lzdGVycyAqLwogCWlmIChuZXRpZl9tc2dfaHcocHJpdikpIHsKLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+ZHVtcF9tYWNfcmVncyhpb2FkZHIpOwotCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5kdW1wX2RtYV9yZWdzKGlvYWRkcik7CisJCXByaXYtPmh3LT5tYWMtPmR1bXBfcmVncyhpb2FkZHIpOworCQlwcml2LT5ody0+ZG1hLT5kdW1wX3JlZ3MoaW9hZGRyKTsKIAl9CiAKIAlpZiAocHJpdi0+cGh5ZGV2KQpAQCAtMTE0Miw4ICs5NDcsOCBAQAogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCiAJLyogU3RvcCBUWC9SWCBETUEgYW5kIGNsZWFyIHRoZSBkZXNjcmlwdG9ycyAqLwotCXN0bW1hY19kbWFfc3RvcF90eChkZXYtPmJhc2VfYWRkcik7Ci0Jc3RtbWFjX2RtYV9zdG9wX3J4KGRldi0+YmFzZV9hZGRyKTsKKwlwcml2LT5ody0+ZG1hLT5zdG9wX3R4KGRldi0+YmFzZV9hZGRyKTsKKwlwcml2LT5ody0+ZG1hLT5zdG9wX3J4KGRldi0+YmFzZV9hZGRyKTsKIAogCS8qIFJlbGVhc2UgYW5kIGZyZWUgdGhlIFJ4L1R4IHJlc291cmNlcyAqLwogCWZyZWVfZG1hX2Rlc2NfcmVzb3VyY2VzKHByaXYpOwpAQCAtMTIxNCw4ICsxMDE5LDggQEAKIAkJZGVzYy0+ZGVzMiA9IGRtYV9tYXBfc2luZ2xlKHByaXYtPmRldmljZSwgc2tiLT5kYXRhLAogCQkJCQkgICAgQlVGX1NJWkVfOEtpQiwgRE1BX1RPX0RFVklDRSk7CiAJCWRlc2MtPmRlczMgPSBkZXNjLT5kZXMyICsgQlVGX1NJWkVfNEtpQjsKLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cHJlcGFyZV90eF9kZXNjKGRlc2MsIDEsIEJVRl9TSVpFXzhLaUIsCi0JCQkJCQkgICAgIGNzdW1faW5zZXJ0aW9uKTsKKwkJcHJpdi0+aHctPmRlc2MtPnByZXBhcmVfdHhfZGVzYyhkZXNjLCAxLCBCVUZfU0laRV84S2lCLAorCQkJCQkJY3N1bV9pbnNlcnRpb24pOwogCiAJCWVudHJ5ID0gKCsrcHJpdi0+Y3VyX3R4KSAlIHR4c2l6ZTsKIAkJZGVzYyA9IHByaXYtPmRtYV90eCArIGVudHJ5OwpAQCAtMTIyNCwxNiArMTAyOSwxNiBAQAogCQkJCQlza2ItPmRhdGEgKyBCVUZfU0laRV84S2lCLAogCQkJCQlidWYyX3NpemUsIERNQV9UT19ERVZJQ0UpOwogCQlkZXNjLT5kZXMzID0gZGVzYy0+ZGVzMiArIEJVRl9TSVpFXzRLaUI7Ci0JCXByaXYtPm1hY190eXBlLT5vcHMtPnByZXBhcmVfdHhfZGVzYyhkZXNjLCAwLAotCQkJCQkJICAgICBidWYyX3NpemUsIGNzdW1faW5zZXJ0aW9uKTsKLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+c2V0X3R4X293bmVyKGRlc2MpOworCQlwcml2LT5ody0+ZGVzYy0+cHJlcGFyZV90eF9kZXNjKGRlc2MsIDAsIGJ1ZjJfc2l6ZSwKKwkJCQkJCWNzdW1faW5zZXJ0aW9uKTsKKwkJcHJpdi0+aHctPmRlc2MtPnNldF90eF9vd25lcihkZXNjKTsKIAkJcHJpdi0+dHhfc2tidWZmW2VudHJ5XSA9IE5VTEw7CiAJfSBlbHNlIHsKIAkJZGVzYy0+ZGVzMiA9IGRtYV9tYXBfc2luZ2xlKHByaXYtPmRldmljZSwgc2tiLT5kYXRhLAogCQkJCQlub3BhZ2VkX2xlbiwgRE1BX1RPX0RFVklDRSk7CiAJCWRlc2MtPmRlczMgPSBkZXNjLT5kZXMyICsgQlVGX1NJWkVfNEtpQjsKLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cHJlcGFyZV90eF9kZXNjKGRlc2MsIDEsIG5vcGFnZWRfbGVuLAotCQkJCQkJICAgICBjc3VtX2luc2VydGlvbik7CisJCXByaXYtPmh3LT5kZXNjLT5wcmVwYXJlX3R4X2Rlc2MoZGVzYywgMSwgbm9wYWdlZF9sZW4sCisJCQkJCQljc3VtX2luc2VydGlvbik7CiAJfQogCXJldHVybiBlbnRyeTsKIH0KQEAgLTEzMDEsOCArMTEwNiw4IEBACiAJCXVuc2lnbmVkIGludCBub3BhZ2VkX2xlbiA9IHNrYl9oZWFkbGVuKHNrYik7CiAJCWRlc2MtPmRlczIgPSBkbWFfbWFwX3NpbmdsZShwcml2LT5kZXZpY2UsIHNrYi0+ZGF0YSwKIAkJCQkJbm9wYWdlZF9sZW4sIERNQV9UT19ERVZJQ0UpOwotCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5wcmVwYXJlX3R4X2Rlc2MoZGVzYywgMSwgbm9wYWdlZF9sZW4sCi0JCQkJCQkgICAgIGNzdW1faW5zZXJ0aW9uKTsKKwkJcHJpdi0+aHctPmRlc2MtPnByZXBhcmVfdHhfZGVzYyhkZXNjLCAxLCBub3BhZ2VkX2xlbiwKKwkJCQkJCWNzdW1faW5zZXJ0aW9uKTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgbmZyYWdzOyBpKyspIHsKQEAgLTEzMTcsMjEgKzExMjIsMjAgQEAKIAkJCQkJICBmcmFnLT5wYWdlX29mZnNldCwKIAkJCQkJICBsZW4sIERNQV9UT19ERVZJQ0UpOwogCQlwcml2LT50eF9za2J1ZmZbZW50cnldID0gTlVMTDsKLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cHJlcGFyZV90eF9kZXNjKGRlc2MsIDAsIGxlbiwKLQkJCQkJCSAgICAgY3N1bV9pbnNlcnRpb24pOwotCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5zZXRfdHhfb3duZXIoZGVzYyk7CisJCXByaXYtPmh3LT5kZXNjLT5wcmVwYXJlX3R4X2Rlc2MoZGVzYywgMCwgbGVuLCBjc3VtX2luc2VydGlvbik7CisJCXByaXYtPmh3LT5kZXNjLT5zZXRfdHhfb3duZXIoZGVzYyk7CiAJfQogCiAJLyogSW50ZXJydXB0IG9uIGNvbXBsZXRpdGlvbiBvbmx5IGZvciB0aGUgbGF0ZXN0IHNlZ21lbnQgKi8KLQlwcml2LT5tYWNfdHlwZS0+b3BzLT5jbG9zZV90eF9kZXNjKGRlc2MpOworCXByaXYtPmh3LT5kZXNjLT5jbG9zZV90eF9kZXNjKGRlc2MpOwogCiAjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgogCS8qIENsZWFuIElDIHdoaWxlIHVzaW5nIHRpbWVyICovCiAJaWYgKGxpa2VseShwcml2LT50bS0+ZW5hYmxlKSkKLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+Y2xlYXJfdHhfaWMoZGVzYyk7CisJCXByaXYtPmh3LT5kZXNjLT5jbGVhcl90eF9pYyhkZXNjKTsKICNlbmRpZgogCS8qIFRvIGF2b2lkIHJhaXNlIGNvbmRpdGlvbiAqLwotCXByaXYtPm1hY190eXBlLT5vcHMtPnNldF90eF9vd25lcihmaXJzdCk7CisJcHJpdi0+aHctPmRlc2MtPnNldF90eF9vd25lcihmaXJzdCk7CiAKIAlwcml2LT5jdXJfdHgrKzsKIApAQCAtMTM1Myw4ICsxMTU3LDcgQEAKIAogCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKLQkvKiBDU1IxIGVuYWJsZXMgdGhlIHRyYW5zbWl0IERNQSB0byBjaGVjayBmb3IgbmV3IGRlc2NyaXB0b3IgKi8KLQl3cml0ZWwoMSwgZGV2LT5iYXNlX2FkZHIgKyBETUFfWE1UX1BPTExfREVNQU5EKTsKKwlwcml2LT5ody0+ZG1hLT5lbmFibGVfZG1hX3RyYW5zbWlzc2lvbihkZXYtPmJhc2VfYWRkcik7CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQpAQCAtMTM5MSw3ICsxMTk0LDcgQEAKIAkJCX0KIAkJCVJYX0RCRyhLRVJOX0lORk8gIlx0cmVmaWxsIGVudHJ5ICMlZFxuIiwgZW50cnkpOwogCQl9Ci0JCXByaXYtPm1hY190eXBlLT5vcHMtPnNldF9yeF9vd25lcihwICsgZW50cnkpOworCQlwcml2LT5ody0+ZGVzYy0+c2V0X3J4X293bmVyKHAgKyBlbnRyeSk7CiAJfQogCXJldHVybjsKIH0KQEAgLTE0MTIsNyArMTIxNSw3IEBACiAJfQogI2VuZGlmCiAJY291bnQgPSAwOwotCXdoaWxlICghcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3J4X293bmVyKHApKSB7CisJd2hpbGUgKCFwcml2LT5ody0+ZGVzYy0+Z2V0X3J4X293bmVyKHApKSB7CiAJCWludCBzdGF0dXM7CiAKIAkJaWYgKGNvdW50ID49IGxpbWl0KQpAQCAtMTQyNSwxNSArMTIyOCwxNCBAQAogCQlwcmVmZXRjaChwX25leHQpOwogCiAJCS8qIHJlYWQgdGhlIHN0YXR1cyBvZiB0aGUgaW5jb21pbmcgZnJhbWUgKi8KLQkJc3RhdHVzID0gKHByaXYtPm1hY190eXBlLT5vcHMtPnJ4X3N0YXR1cygmcHJpdi0+ZGV2LT5zdGF0cywKLQkJCQkJCQkgJnByaXYtPnhzdGF0cywgcCkpOworCQlzdGF0dXMgPSAocHJpdi0+aHctPmRlc2MtPnJ4X3N0YXR1cygmcHJpdi0+ZGV2LT5zdGF0cywKKwkJCQkJCSAgICAmcHJpdi0+eHN0YXRzLCBwKSk7CiAJCWlmICh1bmxpa2VseShzdGF0dXMgPT0gZGlzY2FyZF9mcmFtZSkpCiAJCQlwcml2LT5kZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQllbHNlIHsKIAkJCXN0cnVjdCBza19idWZmICpza2I7CiAJCQkvKiBMZW5ndGggc2hvdWxkIG9taXQgdGhlIENSQyAqLwotCQkJaW50IGZyYW1lX2xlbiA9Ci0JCQkgICAgcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3J4X2ZyYW1lX2xlbihwKSAtIDQ7CisJCQlpbnQgZnJhbWVfbGVuID0gcHJpdi0+aHctPmRlc2MtPmdldF9yeF9mcmFtZV9sZW4ocCkgLSA0OwogCiAjaWZkZWYgU1RNTUFDX1JYX0RFQlVHCiAJCQlpZiAoZnJhbWVfbGVuID4gRVRIX0ZSQU1FX0xFTikKQEAgLTE1NjksNyArMTM3MSw3IEBACiAJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7Ci0JcHJpdi0+bWFjX3R5cGUtPm9wcy0+c2V0X2ZpbHRlcihkZXYpOworCXByaXYtPmh3LT5tYWMtPnNldF9maWx0ZXIoZGV2KTsKIAlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CiAJcmV0dXJuOwogfQpAQCAtMTYyMyw5ICsxNDI1LDEwIEBACiAJaWYgKHByaXYtPmlzX2dtYWMpIHsKIAkJdW5zaWduZWQgbG9uZyBpb2FkZHIgPSBkZXYtPmJhc2VfYWRkcjsKIAkJLyogVG8gaGFuZGxlIEdNQUMgb3duIGludGVycnVwdHMgKi8KLQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+aG9zdF9pcnFfc3RhdHVzKGlvYWRkcik7CisJCXByaXYtPmh3LT5tYWMtPmhvc3RfaXJxX3N0YXR1cyhpb2FkZHIpOwogCX0KLQlzdG1tYWNfZG1hX2ludGVycnVwdChkZXYpOworCisJc3RtbWFjX2RtYV9pbnRlcnJ1cHQocHJpdik7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0xNzQ0LDcgKzE1NDcsNyBAQAogCW5ldGlmX25hcGlfYWRkKGRldiwgJnByaXYtPm5hcGksIHN0bW1hY19wb2xsLCA2NCk7CiAKIAkvKiBHZXQgdGhlIE1BQyBhZGRyZXNzICovCi0JcHJpdi0+bWFjX3R5cGUtPm9wcy0+Z2V0X3VtYWNfYWRkcihkZXYtPmJhc2VfYWRkciwgZGV2LT5kZXZfYWRkciwgMCk7CisJcHJpdi0+aHctPm1hYy0+Z2V0X3VtYWNfYWRkcihkZXYtPmJhc2VfYWRkciwgZGV2LT5kZXZfYWRkciwgMCk7CiAKIAlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5kZXZfYWRkcikpCiAJCXByX3dhcm5pbmcoIlx0bm8gdmFsaWQgTUFDIGFkZHJlc3M7IgpAQCAtMTc3OSwxNiArMTU4MiwxNiBAQAogCXN0cnVjdCBtYWNfZGV2aWNlX2luZm8gKmRldmljZTsKIAogCWlmIChwcml2LT5pc19nbWFjKQotCQlkZXZpY2UgPSBnbWFjX3NldHVwKGlvYWRkcik7CisJCWRldmljZSA9IGR3bWFjMTAwMF9zZXR1cChpb2FkZHIpOwogCWVsc2UKLQkJZGV2aWNlID0gbWFjMTAwX3NldHVwKGlvYWRkcik7CisJCWRldmljZSA9IGR3bWFjMTAwX3NldHVwKGlvYWRkcik7CiAKIAlpZiAoIWRldmljZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwcml2LT5tYWNfdHlwZSA9IGRldmljZTsKKwlwcml2LT5odyA9IGRldmljZTsKIAotCXByaXYtPndvbGVuYWJsZWQgPSBwcml2LT5tYWNfdHlwZS0+aHcucG10OwkvKiBQTVQgc3VwcG9ydGVkICovCisJcHJpdi0+d29sZW5hYmxlZCA9IHByaXYtPmh3LT5wbXQ7CS8qIFBNVCBzdXBwb3J0ZWQgKi8KIAlpZiAocHJpdi0+d29sZW5hYmxlZCA9PSBQTVRfU1VQUE9SVEVEKQogCQlwcml2LT53b2xvcHRzID0gV0FLRV9NQUdJQzsJCS8qIE1hZ2ljIEZyYW1lICovCiAKQEAgLTE3OTcsOCArMTYwMCw3IEBACiAKIHN0YXRpYyBpbnQgc3RtbWFjcGh5X2R2cl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewotCXN0cnVjdCBwbGF0X3N0bW1hY3BoeV9kYXRhICpwbGF0X2RhdDsKLQlwbGF0X2RhdCA9IChzdHJ1Y3QgcGxhdF9zdG1tYWNwaHlfZGF0YSAqKSgocGRldi0+ZGV2KS5wbGF0Zm9ybV9kYXRhKTsKKwlzdHJ1Y3QgcGxhdF9zdG1tYWNwaHlfZGF0YSAqcGxhdF9kYXQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAogCXByX2RlYnVnKCJzdG1tYWNwaHlfZHZyX3Byb2JlOiBhZGRlZCBwaHkgZm9yIGJ1cyAlZFxuIiwKIAkgICAgICAgcGxhdF9kYXQtPmJ1c19pZCk7CkBAIC0xODMwLDkgKzE2MzIsNyBAQAogc3RhdGljIGludCBzdG1tYWNfYXNzb2NpYXRlX3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gKHN0cnVjdCBzdG1tYWNfcHJpdiAqKWRhdGE7Ci0Jc3RydWN0IHBsYXRfc3RtbWFjcGh5X2RhdGEgKnBsYXRfZGF0OwotCi0JcGxhdF9kYXQgPSAoc3RydWN0IHBsYXRfc3RtbWFjcGh5X2RhdGEgKikoZGV2LT5wbGF0Zm9ybV9kYXRhKTsKKwlzdHJ1Y3QgcGxhdF9zdG1tYWNwaHlfZGF0YSAqcGxhdF9kYXQgPSBkZXYtPnBsYXRmb3JtX2RhdGE7CiAKIAlEQkcocHJvYmUsIERFQlVHLCAiJXM6IGNoZWNraW5nIHBoeSBmb3IgYnVzICVkXG4iLCBfX2Z1bmNfXywKIAkJcGxhdF9kYXQtPmJ1c19pZCk7CkBAIC0xOTIyLDcgKzE3MjIsNyBAQAogCXByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlwcml2LT5kZXZpY2UgPSAmKHBkZXYtPmRldik7CiAJcHJpdi0+ZGV2ID0gbmRldjsKLQlwbGF0X2RhdCA9IChzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgKikoKHBkZXYtPmRldikucGxhdGZvcm1fZGF0YSk7CisJcGxhdF9kYXQgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlwcml2LT5idXNfaWQgPSBwbGF0X2RhdC0+YnVzX2lkOwogCXByaXYtPnBibCA9IHBsYXRfZGF0LT5wYmw7CS8qIFRMSSAqLwogCXByaXYtPmlzX2dtYWMgPSBwbGF0X2RhdC0+aGFzX2dtYWM7CS8qIEdNQUMgaXMgb24gYm9hcmQgKi8KQEAgLTE5MzIsNiArMTczMiwxMSBAQAogCS8qIFNldCB0aGUgSS9PIGJhc2UgYWRkciAqLwogCW5kZXYtPmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CiAKKwkvKiBWZXJpZnkgZW1iZWRkZWQgcmVzb3VyY2UgZm9yIHRoZSBwbGF0Zm9ybSAqLworCXJldCA9IHN0bW1hY19jbGFpbV9yZXNvdXJjZShwZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKIAkvKiBNQUMgSFcgcmV2aWNlIGRldGVjdGlvbiAqLwogCXJldCA9IHN0bW1hY19tYWNfZGV2aWNlX3NldHVwKG5kZXYpOwogCWlmIChyZXQgPCAwKQpAQCAtMTk1Miw2ICsxNzU3LDcgQEAKIAl9CiAKIAlwcml2LT5maXhfbWFjX3NwZWVkID0gcGxhdF9kYXQtPmZpeF9tYWNfc3BlZWQ7CisJcHJpdi0+YnVzX3NldHVwID0gcGxhdF9kYXQtPmJ1c19zZXR1cDsKIAlwcml2LT5ic3BfcHJpdiA9IHBsYXRfZGF0LT5ic3BfcHJpdjsKIAogCXByX2luZm8oIlx0JXMgLSAoZGV2LiBuYW1lOiAlcyAtIGlkOiAlZCwgSVJRICMlZFxuIgpAQCAtMTk4NiwxMiArMTc5MiwxMyBAQAogc3RhdGljIGludCBzdG1tYWNfZHZyX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHN0bW1hY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CiAKIAlwcl9pbmZvKCIlczpcblx0cmVtb3ZpbmcgZHJpdmVyIiwgX19mdW5jX18pOwogCi0Jc3RtbWFjX2RtYV9zdG9wX3J4KG5kZXYtPmJhc2VfYWRkcik7Ci0Jc3RtbWFjX2RtYV9zdG9wX3R4KG5kZXYtPmJhc2VfYWRkcik7CisJcHJpdi0+aHctPmRtYS0+c3RvcF9yeChuZGV2LT5iYXNlX2FkZHIpOworCXByaXYtPmh3LT5kbWEtPnN0b3BfdHgobmRldi0+YmFzZV9hZGRyKTsKIAogCXN0bW1hY19tYWNfZGlzYWJsZV9yeChuZGV2LT5iYXNlX2FkZHIpOwogCXN0bW1hY19tYWNfZGlzYWJsZV90eChuZGV2LT5iYXNlX2FkZHIpOwpAQCAtMjAzOCwyMSArMTg0NSwyMCBAQAogCQluYXBpX2Rpc2FibGUoJnByaXYtPm5hcGkpOwogCiAJCS8qIFN0b3AgVFgvUlggRE1BICovCi0JCXN0bW1hY19kbWFfc3RvcF90eChkZXYtPmJhc2VfYWRkcik7Ci0JCXN0bW1hY19kbWFfc3RvcF9yeChkZXYtPmJhc2VfYWRkcik7CisJCXByaXYtPmh3LT5kbWEtPnN0b3BfdHgoZGV2LT5iYXNlX2FkZHIpOworCQlwcml2LT5ody0+ZG1hLT5zdG9wX3J4KGRldi0+YmFzZV9hZGRyKTsKIAkJLyogQ2xlYXIgdGhlIFJ4L1R4IGRlc2NyaXB0b3JzICovCi0JCXByaXYtPm1hY190eXBlLT5vcHMtPmluaXRfcnhfZGVzYyhwcml2LT5kbWFfcngsCi0JCQkJCQkgIHByaXYtPmRtYV9yeF9zaXplLCBkaXNfaWMpOwotCQlwcml2LT5tYWNfdHlwZS0+b3BzLT5pbml0X3R4X2Rlc2MocHJpdi0+ZG1hX3R4LAotCQkJCQkJICBwcml2LT5kbWFfdHhfc2l6ZSk7CisJCXByaXYtPmh3LT5kZXNjLT5pbml0X3J4X2Rlc2MocHJpdi0+ZG1hX3J4LCBwcml2LT5kbWFfcnhfc2l6ZSwKKwkJCQkJICAgICBkaXNfaWMpOworCQlwcml2LT5ody0+ZGVzYy0+aW5pdF90eF9kZXNjKHByaXYtPmRtYV90eCwgcHJpdi0+ZG1hX3R4X3NpemUpOwogCiAJCXN0bW1hY19tYWNfZGlzYWJsZV90eChkZXYtPmJhc2VfYWRkcik7CiAKIAkJaWYgKGRldmljZV9tYXlfd2FrZXVwKCYocGRldi0+ZGV2KSkpIHsKIAkJCS8qIEVuYWJsZSBQb3dlciBkb3duIG1vZGUgYnkgcHJvZ3JhbW1pbmcgdGhlIFBNVCByZWdzICovCiAJCQlpZiAocHJpdi0+d29sZW5hYmxlZCA9PSBQTVRfU1VQUE9SVEVEKQotCQkJCXByaXYtPm1hY190eXBlLT5vcHMtPnBtdChkZXYtPmJhc2VfYWRkciwKLQkJCQkJCQkgcHJpdi0+d29sb3B0cyk7CisJCQkJcHJpdi0+aHctPm1hYy0+cG10KGRldi0+YmFzZV9hZGRyLAorCQkJCQkJICAgcHJpdi0+d29sb3B0cyk7CiAJCX0gZWxzZSB7CiAJCQlzdG1tYWNfbWFjX2Rpc2FibGVfcngoZGV2LT5iYXNlX2FkZHIpOwogCQl9CkBAIC0yMDkzLDE1ICsxODk5LDE1IEBACiAJICogZnJvbSBhbm90aGVyIGRldmljZXMgKGUuZy4gc2VyaWFsIGNvbnNvbGUpLiAqLwogCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmKHBkZXYtPmRldikpKQogCQlpZiAocHJpdi0+d29sZW5hYmxlZCA9PSBQTVRfU1VQUE9SVEVEKQotCQkJcHJpdi0+bWFjX3R5cGUtPm9wcy0+cG10KGRldi0+YmFzZV9hZGRyLCAwKTsKKwkJCXByaXYtPmh3LT5tYWMtPnBtdChkZXYtPmJhc2VfYWRkciwgMCk7CiAKIAluZXRpZl9kZXZpY2VfYXR0YWNoKGRldik7CiAKIAkvKiBFbmFibGUgdGhlIE1BQyBhbmQgRE1BICovCiAJc3RtbWFjX21hY19lbmFibGVfcngoaW9hZGRyKTsKIAlzdG1tYWNfbWFjX2VuYWJsZV90eChpb2FkZHIpOwotCXN0bW1hY19kbWFfc3RhcnRfdHgoaW9hZGRyKTsKLQlzdG1tYWNfZG1hX3N0YXJ0X3J4KGlvYWRkcik7CisJcHJpdi0+aHctPmRtYS0+c3RhcnRfdHgoaW9hZGRyKTsKKwlwcml2LT5ody0+ZG1hLT5zdGFydF9yeChpb2FkZHIpOwogCiAjaWZkZWYgQ09ORklHX1NUTU1BQ19USU1FUgogCXByaXYtPnRtLT50aW1lcl9zdGFydCh0bXJhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RtbWFjL3N0bW1hY19tZGlvLmMgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21kaW8uYwppbmRleCA4NDk4NTUyLi5mZmZlMWQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21kaW8uYworKysgYi9kcml2ZXJzL25ldC9zdG1tYWMvc3RtbWFjX21kaW8uYwpAQCAtMjQsNyArMjQsNiBAQAogICBNYWludGFpbmVyOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbWlpLmg+CiAjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAKQEAgLTQ4LDggKzQ3LDggQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGJ1cy0+cHJpdjsKIAlzdHJ1Y3Qgc3RtbWFjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAl1bnNpZ25lZCBsb25nIGlvYWRkciA9IG5kZXYtPmJhc2VfYWRkcjsKLQl1bnNpZ25lZCBpbnQgbWlpX2FkZHJlc3MgPSBwcml2LT5tYWNfdHlwZS0+aHcubWlpLmFkZHI7Ci0JdW5zaWduZWQgaW50IG1paV9kYXRhID0gcHJpdi0+bWFjX3R5cGUtPmh3Lm1paS5kYXRhOworCXVuc2lnbmVkIGludCBtaWlfYWRkcmVzcyA9IHByaXYtPmh3LT5taWkuYWRkcjsKKwl1bnNpZ25lZCBpbnQgbWlpX2RhdGEgPSBwcml2LT5ody0+bWlpLmRhdGE7CiAKIAlpbnQgZGF0YTsKIAl1MTYgcmVnVmFsdWUgPSAoKChwaHlhZGRyIDw8IDExKSAmICgweDAwMDBGODAwKSkgfApAQCAtODAsOCArNzksOCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gYnVzLT5wcml2OwogCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOwotCXVuc2lnbmVkIGludCBtaWlfYWRkcmVzcyA9IHByaXYtPm1hY190eXBlLT5ody5taWkuYWRkcjsKLQl1bnNpZ25lZCBpbnQgbWlpX2RhdGEgPSBwcml2LT5tYWNfdHlwZS0+aHcubWlpLmRhdGE7CisJdW5zaWduZWQgaW50IG1paV9hZGRyZXNzID0gcHJpdi0+aHctPm1paS5hZGRyOworCXVuc2lnbmVkIGludCBtaWlfZGF0YSA9IHByaXYtPmh3LT5taWkuZGF0YTsKIAogCXUxNiB2YWx1ZSA9CiAJICAgICgoKHBoeWFkZHIgPDwgMTEpICYgKDB4MDAwMEY4MDApKSB8ICgocGh5cmVnIDw8IDYpICYgKDB4MDAwMDA3QzApKSkKQEAgLTExMiw3ICsxMTEsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gYnVzLT5wcml2OwogCXN0cnVjdCBzdG1tYWNfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCXVuc2lnbmVkIGxvbmcgaW9hZGRyID0gbmRldi0+YmFzZV9hZGRyOwotCXVuc2lnbmVkIGludCBtaWlfYWRkcmVzcyA9IHByaXYtPm1hY190eXBlLT5ody5taWkuYWRkcjsKKwl1bnNpZ25lZCBpbnQgbWlpX2FkZHJlc3MgPSBwcml2LT5ody0+bWlpLmFkZHI7CiAKIAlpZiAocHJpdi0+cGh5X3Jlc2V0KSB7CiAJCXByX2RlYnVnKCJzdG1tYWNfbWRpb19yZXNldDogY2FsbGluZyBwaHlfcmVzZXRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuM184MjU4Ni5jIGIvZHJpdmVycy9uZXQvc3VuM184MjU4Ni5jCmluZGV4IGI0NDdhODcuLjJmNmE3NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bjNfODI1ODYuYworKysgYi9kcml2ZXJzL25ldC9zdW4zXzgyNTg2LmMKQEAgLTQxMyw4ICs0MTMsOCBAQAogCXZvbGF0aWxlIHN0cnVjdCBpYXNldHVwX2NtZF9zdHJ1Y3QgKmlhc19jbWQ7CiAJdm9sYXRpbGUgc3RydWN0IHRkcl9jbWRfc3RydWN0ICp0ZHJfY21kOwogCXZvbGF0aWxlIHN0cnVjdCBtY3NldHVwX2NtZF9zdHJ1Y3QgKm1jX2NtZDsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaT1kZXYtPm1jX2xpc3Q7Ci0JaW50IG51bV9hZGRycz1kZXYtPm1jX2NvdW50OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOworCWludCBudW1fYWRkcnM9bmV0ZGV2X21jX2NvdW50KGRldik7CiAKIAlwdHIgPSAodm9pZCAqKSAoKGNoYXIgKilwLT5zY2IgKyBzaXplb2Yoc3RydWN0IHNjYl9zdHJ1Y3QpKTsKIApAQCAtNTM2LDggKzUzNiwxMCBAQAogCQltY19jbWQtPmNtZF9saW5rID0gMHhmZmZmOwogCQltY19jbWQtPm1jX2NudCA9IHN3YWIxNihudW1fYWRkcnMgKiA2KTsKIAotCQlmb3IoaT0wO2k8bnVtX2FkZHJzO2krKyxkbWk9ZG1pLT5uZXh0KQotCQkJbWVtY3B5KChjaGFyICopIG1jX2NtZC0+bWNfbGlzdFtpXSwgZG1pLT5kbWlfYWRkciw2KTsKKwkJaSA9IDA7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KQorCQkJbWVtY3B5KChjaGFyICopIG1jX2NtZC0+bWNfbGlzdFtpKytdLAorCQkJICAgICAgIGRtaS0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKIAogCQlwLT5zY2ItPmNibF9vZmZzZXQgPSBtYWtlMTYobWNfY21kKTsKIAkJcC0+c2NiLT5jbWRfY3VjID0gQ1VDX1NUQVJUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuM2xhbmNlLmMgYi9kcml2ZXJzL25ldC9zdW4zbGFuY2UuYwppbmRleCAwY2E0MjQxLi45OTk5ODg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW4zbGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9zdW4zbGFuY2UuYwpAQCAtOTE3LDcgKzkxNyw3IEBACiAJCVJFR0EoIENTUjE1ICkgPSAweDgwMDA7IC8qIFNldCBwcm9taXNjdW91cyBtb2RlICovCiAJfSBlbHNlIHsKIAkJc2hvcnQgbXVsdGljYXN0X3RhYmxlWzRdOwotCQlpbnQgbnVtX2FkZHJzID0gZGV2LT5tY19jb3VudDsKKwkJaW50IG51bV9hZGRycyA9IG5ldGRldl9tY19jb3VudChkZXYpOwogCQlpbnQgaTsKIAkJLyogV2UgZG9uJ3QgdXNlIHRoZSBtdWx0aWNhc3QgdGFibGUsIGJ1dCByZWx5IG9uIHVwcGVyLWxheWVyCiAJCSAqIGZpbHRlcmluZy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bmJtYWMuYyBiL2RyaXZlcnMvbmV0L3N1bmJtYWMuYwppbmRleCAyNWU4MWViLi5hMGJkMzYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5ibWFjLmMKKysrIGIvZHJpdmVycy9uZXQvc3VuYm1hYy5jCkBAIC05OTksNyArOTk5LDcgQEAKIHsKIAlzdHJ1Y3QgYmlnbWFjICpicCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCBfX2lvbWVtICpicmVncyA9IGJwLT5icmVnczsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSA9IGRldi0+bWNfbGlzdDsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAljaGFyICphZGRyczsKIAlpbnQgaTsKIAl1MzIgdG1wLCBjcmM7CkBAIC0xMDEzLDcgKzEwMTMsNyBAQAogCXdoaWxlICgoc2J1c19yZWFkbChicmVncyArIEJNQUNfUlhDRkcpICYgQklHTUFDX1JYQ0ZHX0VOQUJMRSkgIT0gMCkKIAkJdWRlbGF5KDIwKTsKIAotCWlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgKGRldi0+bWNfY291bnQgPiA2NCkpIHsKKwlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8IChuZXRkZXZfbWNfY291bnQoZGV2KSA+IDY0KSkgewogCQlzYnVzX3dyaXRlbCgweGZmZmYsIGJyZWdzICsgQk1BQ19IVEFCTEUwKTsKIAkJc2J1c193cml0ZWwoMHhmZmZmLCBicmVncyArIEJNQUNfSFRBQkxFMSk7CiAJCXNidXNfd3JpdGVsKDB4ZmZmZiwgYnJlZ3MgKyBCTUFDX0hUQUJMRTIpOwpAQCAtMTAyOCw5ICsxMDI4LDggQEAKIAkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKIAkJCWhhc2hfdGFibGVbaV0gPSAwOwogCi0JCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyspIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKIAkJCWFkZHJzID0gZG1pLT5kbWlfYWRkcjsKLQkJCWRtaSA9IGRtaS0+bmV4dDsKIAogCQkJaWYgKCEoKmFkZHJzICYgMSkpCiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zdW5kYW5jZS5jIGIvZHJpdmVycy9uZXQvc3VuZGFuY2UuYwppbmRleCBkNThlMTg5Li5hODU1OTM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5kYW5jZS5jCisrKyBiL2RyaXZlcnMvbmV0L3N1bmRhbmNlLmMKQEAgLTIwNiw3ICsyMDYsNyBAQAogI2RlZmluZSBVU0VfSU9fT1BTIDEKICNlbmRpZgogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc3VuZGFuY2VfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHN1bmRhbmNlX3BjaV90YmwpID0gewogCXsgMHgxMTg2LCAweDEwMDIsIDB4MTE4NiwgMHgxMDAyLCAwLCAwLCAwIH0sCiAJeyAweDExODYsIDB4MTAwMiwgMHgxMTg2LCAweDEwMDMsIDAsIDAsIDEgfSwKIAl7IDB4MTE4NiwgMHgxMDAyLCAweDExODYsIDB4MTAxMiwgMCwgMCwgMiB9LApAQCAtMTUxNywxOSArMTUxNywxOCBAQAogCWlmIChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsJCQkvKiBTZXQgcHJvbWlzY3VvdXMuICovCiAJCW1lbXNldChtY19maWx0ZXIsIDB4ZmYsIHNpemVvZihtY19maWx0ZXIpKTsKIAkJcnhfbW9kZSA9IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE11bHRpY2FzdCB8IEFjY2VwdEFsbCB8IEFjY2VwdE15UGh5czsKLQl9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKKwl9IGVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpIHx8CiAJCSAgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkvKiBUb28gbWFueSB0byBtYXRjaCwgb3IgYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCQltZW1zZXQobWNfZmlsdGVyLCAweGZmLCBzaXplb2YobWNfZmlsdGVyKSk7CiAJCXJ4X21vZGUgPSBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBBY2NlcHRNeVBoeXM7Ci0JfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50KSB7CisJfSBlbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKIAkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CiAJCWludCBiaXQ7CiAJCWludCBpbmRleDsKIAkJaW50IGNyYzsKIAkJbWVtc2V0IChtY19maWx0ZXIsIDAsIHNpemVvZiAobWNfZmlsdGVyKSk7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCQljcmMgPSBldGhlcl9jcmNfbGUgKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKTsKIAkJCWZvciAoaW5kZXg9MCwgYml0PTA7IGJpdCA8IDY7IGJpdCsrLCBjcmMgPDw9IDEpCiAJCQkJaWYgKGNyYyAmIDB4ODAwMDAwMDApIGluZGV4IHw9IDEgPDwgYml0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuZ2VtLmMgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwppbmRleCBiNTcxYTFiLi43MDE5NmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5nZW0uYworKysgYi9kcml2ZXJzL25ldC9zdW5nZW0uYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAjZGVmaW5lIEdFTV9NT0RVTEVfTkFNRQkiZ2VtIgogI2RlZmluZSBQRlggR0VNX01PRFVMRV9OQU1FICI6ICIKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGdlbV9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoZ2VtX3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9TVU4sIFBDSV9ERVZJQ0VfSURfU1VOX0dFTSwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDBVTCB9LAogCkBAIC03ODIsNyArNzgyLDcgQEAKIAkJCWJyZWFrOwogCiAJCS8qIFdoZW4gd3JpdGluZyBiYWNrIFJYIGRlc2NyaXB0b3IsIEdFTSB3cml0ZXMgc3RhdHVzCi0JCSAqIHRoZW4gYnVmZmVyIGFkZHJlc3MsIHBvc3NpYmx5IGluIHNlcGVyYXRlIHRyYW5zYWN0aW9ucy4KKwkJICogdGhlbiBidWZmZXIgYWRkcmVzcywgcG9zc2libHkgaW4gc2VwYXJhdGUgdHJhbnNhY3Rpb25zLgogCQkgKiBJZiB3ZSBkb24ndCB3YWl0IGZvciB0aGUgY2hpcCB0byB3cml0ZSBib3RoLCB3ZSBjb3VsZAogCQkgKiBwb3N0IGEgbmV3IGJ1ZmZlciB0byB0aGlzIGRlc2NyaXB0b3IgdGhlbiBoYXZlIEdFTSBzcGFtCiAJCSAqIG9uIHRoZSBidWZmZXIgYWRkcmVzcy4gIFdlIHN5bmMgb24gdGhlIFJYIGNvbXBsZXRpb24KQEAgLTE4MzcsNyArMTgzNyw3IEBACiAJaW50IGk7CiAKIAlpZiAoKGdwLT5kZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAotCSAgICAoZ3AtPmRldi0+bWNfY291bnQgPiAyNTYpKSB7CisJICAgIChuZXRkZXZfbWNfY291bnQoZ3AtPmRldikgPiAyNTYpKSB7CiAJICAgIAlmb3IgKGk9MDsgaTwxNjsgaSsrKQogCQkJd3JpdGVsKDB4ZmZmZiwgZ3AtPnJlZ3MgKyBNQUNfSEFTSDAgKyAoaSA8PCAyKSk7CiAJCXJ4Y2ZnIHw9IE1BQ19SWENGR19IRkU7CkBAIC0xODQ2LDE3ICsxODQ2LDEzIEBACiAJfSBlbHNlIHsKIAkJdTE2IGhhc2hfdGFibGVbMTZdOwogCQl1MzIgY3JjOwotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSA9IGdwLT5kZXYtPm1jX2xpc3Q7CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCQlpbnQgaTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKLQkJCWhhc2hfdGFibGVbaV0gPSAwOwotCi0JCWZvciAoaSA9IDA7IGkgPCBncC0+ZGV2LT5tY19jb3VudDsgaSsrKSB7CisJCW1lbXNldChoYXNoX3RhYmxlLCAwLCBzaXplb2YoaGFzaF90YWJsZSkpOworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGdwLT5kZXYpIHsKIAkJCWNoYXIgKmFkZHJzID0gZG1pLT5kbWlfYWRkcjsKIAotCQkJZG1pID0gZG1pLT5uZXh0OwotCiAJCQlpZiAoISgqYWRkcnMgJiAxKSkKIAkJCQljb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VuaG1lLmMgYi9kcml2ZXJzL25ldC9zdW5obWUuYwppbmRleCA2NzYyZjFjLi5iMTdkYmIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW5obWUuYworKysgYi9kcml2ZXJzL25ldC9zdW5obWUuYwpAQCAtMTUxNiwyNCArMTUxNiwyMCBAQAogCiAJSE1EKCgiaHRhYmxlLCAiKSk7CiAJaWYgKChocC0+ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKLQkgICAgKGhwLT5kZXYtPm1jX2NvdW50ID4gNjQpKSB7CisJICAgIChuZXRkZXZfbWNfY291bnQoaHAtPmRldikgPiA2NCkpIHsKIAkJaG1lX3dyaXRlMzIoaHAsIGJyZWdzICsgQk1BQ19IVEFCTEUwLCAweGZmZmYpOwogCQlobWVfd3JpdGUzMihocCwgYnJlZ3MgKyBCTUFDX0hUQUJMRTEsIDB4ZmZmZik7CiAJCWhtZV93cml0ZTMyKGhwLCBicmVncyArIEJNQUNfSFRBQkxFMiwgMHhmZmZmKTsKIAkJaG1lX3dyaXRlMzIoaHAsIGJyZWdzICsgQk1BQ19IVEFCTEUzLCAweGZmZmYpOwogCX0gZWxzZSBpZiAoKGhwLT5kZXYtPmZsYWdzICYgSUZGX1BST01JU0MpID09IDApIHsKIAkJdTE2IGhhc2hfdGFibGVbNF07Ci0JCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gaHAtPmRldi0+bWNfbGlzdDsKKwkJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJCWNoYXIgKmFkZHJzOwotCQlpbnQgaTsKIAkJdTMyIGNyYzsKIAotCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQkJaGFzaF90YWJsZVtpXSA9IDA7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGhwLT5kZXYtPm1jX2NvdW50OyBpKyspIHsKKwkJbWVtc2V0KGhhc2hfdGFibGUsIDAsIHNpemVvZihoYXNoX3RhYmxlKSk7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgaHAtPmRldikgewogCQkJYWRkcnMgPSBkbWktPmRtaV9hZGRyOwotCQkJZG1pID0gZG1pLT5uZXh0OwogCiAJCQlpZiAoISgqYWRkcnMgJiAxKSkKIAkJCQljb250aW51ZTsKQEAgLTIzNjYsMTQgKzIzNjIsMTMgQEAKIHsKIAlzdHJ1Y3QgaGFwcHlfbWVhbCAqaHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXZvaWQgX19pb21lbSAqYnJlZ3MgPSBocC0+YmlnbWFjcmVnczsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSA9IGRldi0+bWNfbGlzdDsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKIAljaGFyICphZGRyczsKLQlpbnQgaTsKIAl1MzIgY3JjOwogCiAJc3Bpbl9sb2NrX2lycSgmaHAtPmhhcHB5X2xvY2spOwogCi0JaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCAoZGV2LT5tY19jb3VudCA+IDY0KSkgeworCWlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgKG5ldGRldl9tY19jb3VudChkZXYpID4gNjQpKSB7CiAJCWhtZV93cml0ZTMyKGhwLCBicmVncyArIEJNQUNfSFRBQkxFMCwgMHhmZmZmKTsKIAkJaG1lX3dyaXRlMzIoaHAsIGJyZWdzICsgQk1BQ19IVEFCTEUxLCAweGZmZmYpOwogCQlobWVfd3JpdGUzMihocCwgYnJlZ3MgKyBCTUFDX0hUQUJMRTIsIDB4ZmZmZik7CkBAIC0yMzg0LDEyICsyMzc5LDkgQEAKIAl9IGVsc2UgewogCQl1MTYgaGFzaF90YWJsZVs0XTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQotCQkJaGFzaF90YWJsZVtpXSA9IDA7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKykgeworCQltZW1zZXQoaGFzaF90YWJsZSwgMCwgc2l6ZW9mKGhhc2hfdGFibGUpKTsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKIAkJCWFkZHJzID0gZG1pLT5kbWlfYWRkcjsKLQkJCWRtaSA9IGRtaS0+bmV4dDsKIAogCQkJaWYgKCEoKmFkZHJzICYgMSkpCiAJCQkJY29udGludWU7CkBAIC0zMjExLDcgKzMyMDMsNyBAQAogCWRldl9zZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGhhcHB5bWVhbF9wY2lfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoaGFwcHltZWFsX3BjaV9pZHMpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NVTiwgUENJX0RFVklDRV9JRF9TVU5fSEFQUFlNRUFMKSB9LAogCXsgfQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3VubGFuY2UuYyBiL2RyaXZlcnMvbmV0L3N1bmxhbmNlLmMKaW5kZXggNjRlN2QwOC4uZDdjNzNmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3VubGFuY2UuYworKysgYi9kcml2ZXJzL25ldC9zdW5sYW5jZS5jCkBAIC0xMTcwLDkgKzExNzAsOCBAQAogc3RhdGljIHZvaWQgbGFuY2VfbG9hZF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgbGFuY2VfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCWNoYXIgKmFkZHJzOwotCWludCBpOwogCXUzMiBjcmM7CiAJdTMyIHZhbDsKIApAQCAtMTE5Niw5ICsxMTk1LDggQEAKIAkJcmV0dXJuOwogCiAJLyogQWRkIGFkZHJlc3NlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyspIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogCQlhZGRycyA9IGRtaS0+ZG1pX2FkZHI7Ci0JCWRtaSAgID0gZG1pLT5uZXh0OwogCiAJCS8qIG11bHRpY2FzdCBhZGRyZXNzPyAqLwogCQlpZiAoISgqYWRkcnMgJiAxKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bnFlLmMgYi9kcml2ZXJzL25ldC9zdW5xZS5jCmluZGV4IDQ1YzM4M2YuLmJlNjM3ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3N1bnFlLmMKKysrIGIvZHJpdmVycy9uZXQvc3VucWUuYwpAQCAtNjI3LDcgKzYyNyw3IEBACiBzdGF0aWMgdm9pZCBxZV9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHN1bnFlICpxZXAgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCXU4IG5ld19tY29uZmlnID0gcWVwLT5tY29uZmlnOwogCWNoYXIgKmFkZHJzOwogCWludCBpOwpAQCAtNjM2LDcgKzYzNiw3IEBACiAJLyogTG9jayBvdXQgb3RoZXJzLiAqLwogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAotCWlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgKGRldi0+bWNfY291bnQgPiA2NCkpIHsKKwlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8IChuZXRkZXZfbWNfY291bnQoZGV2KSA+IDY0KSkgewogCQlzYnVzX3dyaXRlYihNUkVHU19JQUNPTkZJR19BQ0hOR0UgfCBNUkVHU19JQUNPTkZJR19MQVJFU0VULAogCQkJICAgIHFlcC0+bXJlZ3MgKyBNUkVHU19JQUNPTkZJRyk7CiAJCXdoaWxlICgoc2J1c19yZWFkYihxZXAtPm1yZWdzICsgTVJFR1NfSUFDT05GSUcpICYgTVJFR1NfSUFDT05GSUdfQUNITkdFKSAhPSAwKQpAQCAtNjUwLDEyICs2NTAsOSBAQAogCQl1MTYgaGFzaF90YWJsZVs0XTsKIAkJdTggKmhieXRlcyA9ICh1bnNpZ25lZCBjaGFyICopICZoYXNoX3RhYmxlWzBdOwogCi0JCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCQloYXNoX3RhYmxlW2ldID0gMDsKLQotCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrKSB7CisJCW1lbXNldChoYXNoX3RhYmxlLCAwLCBzaXplb2YoaGFzaF90YWJsZSkpOworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogCQkJYWRkcnMgPSBkbWktPmRtaV9hZGRyOwotCQkJZG1pID0gZG1pLT5uZXh0OwogCiAJCQlpZiAoISgqYWRkcnMgJiAxKSkKIAkJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3N1bnZuZXQuYyBiL2RyaXZlcnMvbmV0L3N1bnZuZXQuYwppbmRleCBiYzc0ZGIwLi42YjFiN2NlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zdW52bmV0LmMKKysrIGIvZHJpdmVycy9uZXQvc3Vudm5ldC5jCkBAIC03NjUsNyArNzY1LDcgQEAKIHsKIAlzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqcDsKIAotCWZvciAocCA9IGRldi0+bWNfbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihwLCBkZXYpIHsKIAkJc3RydWN0IHZuZXRfbWNhc3RfZW50cnkgKm07CiAKIAkJbSA9IF9fdm5ldF9tY19maW5kKHZwLCBwLT5kbWlfYWRkcik7CkBAIC0xMDYyLDEwICsxMDYyLDcgQEAKIAkJZ290byBlcnJfb3V0X2ZyZWVfZGV2OwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiBTdW4gTERPTSB2bmV0ICIsIGRldi0+bmFtZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCQlwcmludGsoIiUyLjJ4JWMiLCBkZXYtPmRldl9hZGRyW2ldLCBpID09IDUgPyAnXG4nIDogJzonKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogU3VuIExET00gdm5ldCAlcE1cbiIsIGRldi0+bmFtZSwgZGV2LT5kZXZfYWRkcik7CiAKIAlsaXN0X2FkZCgmdnAtPmxpc3QsICZ2bmV0X2xpc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90YzM1ODE1LmMgYi9kcml2ZXJzL25ldC90YzM1ODE1LmMKaW5kZXggZDcxYzE5Ny4uNDliZDg0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGMzNTgxNS5jCisrKyBiL2RyaXZlcnMvbmV0L3RjMzU4MTUuYwpAQCAtNjUsNyArNjUsNyBAQAogCXsgIlRPU0hJQkEgVEMzNTgxNS9UWDQ5MzkiIH0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgdGMzNTgxNV9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodGMzNTgxNV9wY2lfdGJsKSA9IHsKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1RPU0hJQkFfMiwgUENJX0RFVklDRV9JRF9UT1NISUJBX1RDMzU4MTVDRiksIC5kcml2ZXJfZGF0YSA9IFRDMzU4MTVDRiB9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVE9TSElCQV8yLCBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfVEMzNTgxNV9OV1UpLCAuZHJpdmVyX2RhdGEgPSBUQzM1ODE1X05XVSB9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfVE9TSElCQV8yLCBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfVEMzNTgxNV9UWDQ5MzkpLCAuZHJpdmVyX2RhdGEgPSBUQzM1ODE1X1RYNDkzOSB9LApAQCAtNDAyLDYgKzQwMiw3IEBACiAJICogYnkgdGhpcyBsb2NrIGFzIHdlbGwuCiAJICovCiAJc3BpbmxvY2tfdCBsb2NrOworCXNwaW5sb2NrX3QgcnhfbG9jazsKIAogCXN0cnVjdCBtaWlfYnVzICptaWlfYnVzOwogCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlfZGV2OwpAQCAtODM1LDYgKzgzNiw3IEBACiAKIAlJTklUX1dPUksoJmxwLT5yZXN0YXJ0X3dvcmssIHRjMzU4MTVfcmVzdGFydF93b3JrKTsKIAlzcGluX2xvY2tfaW5pdCgmbHAtPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZscC0+cnhfbG9jayk7CiAJbHAtPnBjaV9kZXYgPSBwZGV2OwogCWxwLT5jaGlwdHlwZSA9IGVudC0+ZHJpdmVyX2RhdGE7CiAKQEAgLTExODYsNiArMTE4OCw3IEBACiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBCTUNSIHJlc2V0IGZhaWxlZC5cbiIsIGRldi0+bmFtZSk7CiAJfQogCisJc3Bpbl9sb2NrX2JoKCZscC0+cnhfbG9jayk7CiAJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOwogCXRjMzU4MTVfY2hpcF9yZXNldChkZXYpOwogCXRjMzU4MTVfY2xlYXJfcXVldWVzKGRldik7CkBAIC0xMTkzLDYgKzExOTYsNyBAQAogCS8qIFJlY29uZmlndXJlIENBTSBhZ2FpbiBzaW5jZSB0YzM1ODE1X2NoaXBfaW5pdCgpIGluaXRpYWxpemUgaXQuICovCiAJdGMzNTgxNV9zZXRfbXVsdGljYXN0X2xpc3QoZGV2KTsKIAlzcGluX3VubG9ja19pcnEoJmxwLT5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmbHAtPnJ4X2xvY2spOwogCiAJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogfQpAQCAtMTIxMSwxMSArMTIxNSwxNCBAQAogCXN0cnVjdCB0YzM1ODE1X2xvY2FsICpscCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHRjMzU4MTVfcmVncyBfX2lvbWVtICp0ciA9CiAJCShzdHJ1Y3QgdGMzNTgxNV9yZWdzIF9faW9tZW0gKilkZXYtPmJhc2VfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmxwLT5sb2NrLCBmbGFncyk7CiAJdGNfd3JpdGVsKDAsICZ0ci0+SW50X0VuKTsKIAl0Y193cml0ZWwodGNfcmVhZGwoJnRyLT5ETUFfQ3RsKSB8IERNQV9JbnRNYXNrLCAmdHItPkRNQV9DdGwpOwogCXNjaGVkdWxlX3dvcmsoJmxwLT5yZXN0YXJ0X3dvcmspOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxwLT5sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHRjMzU4MTVfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTQzNiw3ICsxNDQzLDkgQEAKIAlpZiAoc3RhdHVzICYgSW50X0ludE1hY1R4KSB7CiAJCS8qIFRyYW5zbWl0IGNvbXBsZXRlLiAqLwogCQlscC0+bHN0YXRzLnR4X2ludHMrKzsKKwkJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOwogCQl0YzM1ODE1X3R4ZG9uZShkZXYpOworCQlzcGluX3VubG9ja19pcnEoJmxwLT5sb2NrKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXQgPSAwOwogCX0KQEAgLTE2NDksNyArMTY1OCw3IEBACiAJaW50IHJlY2VpdmVkID0gMCwgaGFuZGxlZDsKIAl1MzIgc3RhdHVzOwogCi0Jc3Bpbl9sb2NrKCZscC0+bG9jayk7CisJc3Bpbl9sb2NrKCZscC0+cnhfbG9jayk7CiAJc3RhdHVzID0gdGNfcmVhZGwoJnRyLT5JbnRfU3JjKTsKIAlkbyB7CiAJCS8qIEJMRXgsIEZEQUV4IHdpbGwgYmUgY2xlYXJlZCBsYXRlciAqLwpAQCAtMTY2Nyw3ICsxNjc2LDcgQEAKIAkJfQogCQlzdGF0dXMgPSB0Y19yZWFkbCgmdHItPkludF9TcmMpOwogCX0gd2hpbGUgKHN0YXR1cyk7Ci0Jc3Bpbl91bmxvY2soJmxwLT5sb2NrKTsKKwlzcGluX3VubG9jaygmbHAtPnJ4X2xvY2spOwogCiAJaWYgKHJlY2VpdmVkIDwgYnVkZ2V0KSB7CiAJCW5hcGlfY29tcGxldGUobmFwaSk7CkBAIC0xOTQwLDIzICsxOTQ5LDIzIEBACiAJCS8qIEVuYWJsZSBwcm9taXNjdW91cyBtb2RlICovCiAJCXRjX3dyaXRlbChDQU1fQ29tcEVuIHwgQ0FNX0Jyb2FkQWNjIHwgQ0FNX0dyb3VwQWNjIHwgQ0FNX1N0YXRpb25BY2MsICZ0ci0+Q0FNX0N0bCk7CiAJfSBlbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKLQkJICBkZXYtPm1jX2NvdW50ID4gQ0FNX0VOVFJZX01BWCAtIDMpIHsKKwkJICBuZXRkZXZfbWNfY291bnQoZGV2KSA+IENBTV9FTlRSWV9NQVggLSAzKSB7CiAJCS8qIENBTSAwLCAxLCAyMCBhcmUgcmVzZXJ2ZWQuICovCiAJCS8qIERpc2FibGUgcHJvbWlzY3VvdXMgbW9kZSwgdXNlIG5vcm1hbCBtb2RlLiAqLwogCQl0Y193cml0ZWwoQ0FNX0NvbXBFbiB8IENBTV9Ccm9hZEFjYyB8IENBTV9Hcm91cEFjYywgJnRyLT5DQU1fQ3RsKTsKLQl9IGVsc2UgaWYgKGRldi0+bWNfY291bnQpIHsKLQkJc3RydWN0IGRldl9tY19saXN0ICpjdXJfYWRkciA9IGRldi0+bWNfbGlzdDsKKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgeworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmN1cl9hZGRyOwogCQlpbnQgaTsKIAkJaW50IGVuYV9iaXRzID0gQ0FNX0VuYV9CaXQoQ0FNX0VOVFJZX1NPVVJDRSk7CiAKIAkJdGNfd3JpdGVsKDAsICZ0ci0+Q0FNX0N0bCk7CiAJCS8qIFdhbGsgdGhlIGFkZHJlc3MgbGlzdCwgYW5kIGxvYWQgdGhlIGZpbHRlciAqLwotCQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrLCBjdXJfYWRkciA9IGN1cl9hZGRyLT5uZXh0KSB7Ci0JCQlpZiAoIWN1cl9hZGRyKQotCQkJCWJyZWFrOworCQlpID0gMDsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoY3VyX2FkZHIsIGRldikgewogCQkJLyogZW50cnkgMCwxIGlzIHJlc2VydmVkLiAqLwogCQkJdGMzNTgxNV9zZXRfY2FtX2VudHJ5KGRldiwgaSArIDIsIGN1cl9hZGRyLT5kbWlfYWRkcik7CiAJCQllbmFfYml0cyB8PSBDQU1fRW5hX0JpdChpICsgMik7CisJCQlpKys7CiAJCX0KIAkJdGNfd3JpdGVsKGVuYV9iaXRzLCAmdHItPkNBTV9FbmEpOwogCQl0Y193cml0ZWwoQ0FNX0NvbXBFbiB8IENBTV9Ccm9hZEFjYywgJnRyLT5DQU1fQ3RsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RlaHV0aS5jIGIvZHJpdmVycy9uZXQvdGVodXRpLmMKaW5kZXggODBiNDA0Zi4uZjU0OTMwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGVodXRpLmMKKysrIGIvZHJpdmVycy9uZXQvdGVodXRpLmMKQEAgLTYyLDkgKzYyLDExIEBACiAgKgogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2luY2x1ZGUgInRlaHV0aS5oIgogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19kZXZpbml0ZGF0YSBiZHhfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGJkeF9wY2lfdGJsKSA9IHsKIAl7MHgxRkM5LCAweDMwMDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LAogCXsweDFGQzksIDB4MzAxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJezB4MUZDOSwgMHgzMDE0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKQEAgLTEwNSwyNiArMTA3LDI0IEBACiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX0xJTktfU1RBVFVTX1JFRywgJnBjaV9saW5rX3N0YXR1cyk7CiAJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX0RFVl9DVFJMX1JFRywgJnBjaV9jdHJsKTsKIAotCXByaW50ayhLRVJOX0lORk8gInRlaHV0aTogJXMlc1xuIiwgQkRYX05JQ19OQU1FLAotCSAgICAgICBuaWMtPnBvcnRfbnVtID09IDEgPyAiIiA6ICIsIDItUG9ydCIpOwotCXByaW50ayhLRVJOX0lORk8KLQkgICAgICAgInRlaHV0aTogc3JvbSAweCV4IGZwZ2EgJWQgYnVpbGQgJXUgbGFuZSMgJWQiCi0JICAgICAgICIgbWF4X3BsIDB4JXggbXJycyAweCV4XG4iLAotCSAgICAgICByZWFkbChuaWMtPnJlZ3MgKyBTUk9NX1ZFUiksIHJlYWRsKG5pYy0+cmVncyArIEZQR0FfVkVSKSAmIDB4RkZGLAotCSAgICAgICByZWFkbChuaWMtPnJlZ3MgKyBGUEdBX1NFRUQpLAotCSAgICAgICBHRVRfTElOS19TVEFUVVNfTEFORVMocGNpX2xpbmtfc3RhdHVzKSwKLQkgICAgICAgR0VUX0RFVl9DVFJMX01BWFBMKHBjaV9jdHJsKSwgR0VUX0RFVl9DVFJMX01SUlMocGNpX2N0cmwpKTsKKwlwcl9pbmZvKCIlcyVzXG4iLCBCRFhfTklDX05BTUUsCisJCW5pYy0+cG9ydF9udW0gPT0gMSA/ICIiIDogIiwgMi1Qb3J0Iik7CisJcHJfaW5mbygic3JvbSAweCV4IGZwZ2EgJWQgYnVpbGQgJXUgbGFuZSMgJWQgbWF4X3BsIDB4JXggbXJycyAweCV4XG4iLAorCQlyZWFkbChuaWMtPnJlZ3MgKyBTUk9NX1ZFUiksIHJlYWRsKG5pYy0+cmVncyArIEZQR0FfVkVSKSAmIDB4RkZGLAorCQlyZWFkbChuaWMtPnJlZ3MgKyBGUEdBX1NFRUQpLAorCQlHRVRfTElOS19TVEFUVVNfTEFORVMocGNpX2xpbmtfc3RhdHVzKSwKKwkJR0VUX0RFVl9DVFJMX01BWFBMKHBjaV9jdHJsKSwgR0VUX0RFVl9DVFJMX01SUlMocGNpX2N0cmwpKTsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfZndfaWQoc3RydWN0IHBjaV9uaWMgKm5pYykKIHsKLQlwcmludGsoS0VSTl9JTkZPICJ0ZWh1dGk6IGZ3IDB4JXhcbiIsIHJlYWRsKG5pYy0+cmVncyArIEZXX1ZFUikpOworCXByX2luZm8oImZ3IDB4JXhcbiIsIHJlYWRsKG5pYy0+cmVncyArIEZXX1ZFUikpOwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9ldGhfaWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzLCBQb3J0ICVjXG4iLCBuZGV2LT5uYW1lLCBCRFhfTklDX05BTUUsCi0JICAgICAgIChuZGV2LT5pZl9wb3J0ID09IDApID8gJ0EnIDogJ0InKTsKKwluZXRkZXZfaW5mbyhuZGV2LCAiJXMsIFBvcnQgJWNcbiIsCisJCSAgICBCRFhfTklDX05BTUUsIChuZGV2LT5pZl9wb3J0ID09IDApID8gJ0EnIDogJ0InKTsKIAogfQogCkBAIC0xNjAsNyArMTYwLDcgQEAKIAlmLT52YSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBkZXYsCiAJCQkJICAgICBtZW1zeiArIEZJRk9fRVhUUkFfU1BBQ0UsICZmLT5kYSk7CiAJaWYgKCFmLT52YSkgewotCQlFUlIoInBjaV9hbGxvY19jb25zaXN0ZW50IGZhaWxlZFxuIik7CisJCXByX2VycigicGNpX2FsbG9jX2NvbnNpc3RlbnQgZmFpbGVkXG4iKTsKIAkJUkVUKC1FTk9NRU0pOwogCX0KIAlmLT5yZWdfQ0ZHMCA9IHJlZ19DRkcwOwpAQCAtMjA0LDEzICsyMDQsMTMgQEAKIAkJaWYgKG5ldGlmX2NhcnJpZXJfb2socHJpdi0+bmRldikpIHsKIAkJCW5ldGlmX3N0b3BfcXVldWUocHJpdi0+bmRldik7CiAJCQluZXRpZl9jYXJyaWVyX29mZihwcml2LT5uZGV2KTsKLQkJCUVSUigiJXM6IExpbmsgRG93blxuIiwgcHJpdi0+bmRldi0+bmFtZSk7CisJCQluZXRkZXZfZXJyKHByaXYtPm5kZXYsICJMaW5rIERvd25cbiIpOwogCQl9CiAJfSBlbHNlIHsKIAkJaWYgKCFuZXRpZl9jYXJyaWVyX29rKHByaXYtPm5kZXYpKSB7CiAJCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPm5kZXYpOwogCQkJbmV0aWZfY2Fycmllcl9vbihwcml2LT5uZGV2KTsKLQkJCUVSUigiJXM6IExpbmsgVXBcbiIsIHByaXYtPm5kZXYtPm5hbWUpOworCQkJbmV0ZGV2X2Vycihwcml2LT5uZGV2LCAiTGluayBVcFxuIik7CiAJCX0KIAl9CiB9CkBAIC0yMjYsMTAgKzIyNiwxMCBAQAogCQliZHhfbGlua19jaGFuZ2VkKHByaXYpOwogCiAJaWYgKGlzciAmIElSX1BDSUVfTElOSykKLQkJRVJSKCIlczogUENJLUUgTGluayBGYXVsdFxuIiwgcHJpdi0+bmRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIocHJpdi0+bmRldiwgIlBDSS1FIExpbmsgRmF1bHRcbiIpOwogCiAJaWYgKGlzciAmIElSX1BDSUVfVE9VVCkKLQkJRVJSKCIlczogUENJLUUgVGltZSBPdXRcbiIsIHByaXYtPm5kZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKHByaXYtPm5kZXYsICJQQ0ktRSBUaW1lIE91dFxuIik7CiAKIH0KIApAQCAtMzQ1LDcgKzM0NSw3IEBACiAJCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCiAJaWYgKHJjKSB7Ci0JCUVSUigiJXM6IGZpcm13YXJlIGxvYWRpbmcgZmFpbGVkXG4iLCBwcml2LT5uZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2Vycihwcml2LT5uZGV2LCAiZmlybXdhcmUgbG9hZGluZyBmYWlsZWRcbiIpOwogCQlpZiAocmMgPT0gLUVJTykKIAkJCURCRygiVlBDID0gMHgleCBWSUMgPSAweCV4IElOSVRfU1RBVFVTID0gMHgleCBpPSVkXG4iLAogCQkJICAgIFJFQURfUkVHKHByaXYsIHJlZ1ZQQyksCkBAIC00MTksOSArNDE5LDExIEBACiAJV1JJVEVfUkVHKHByaXYsIHJlZ0dNQUNfUlhGX0EsIEdNQUNfUlhfRklMVEVSX09TRU4gfAogCQkgIEdNQUNfUlhfRklMVEVSX0FNIHwgR01BQ19SWF9GSUxURVJfQUIpOwogCi0jZGVmaW5lIEJEWF9JUlFfVFlQRQkoKHByaXYtPm5pYy0+aXJxX3R5cGUgPT0gSVJRX01TSSk/MDpJUlFGX1NIQVJFRCkKLQlpZiAoKHJjID0gcmVxdWVzdF9pcnEocHJpdi0+cGRldi0+aXJxLCBiZHhfaXNyX25hcGksIEJEWF9JUlFfVFlQRSwKLQkJCSBuZGV2LT5uYW1lLCBuZGV2KSkpCisjZGVmaW5lIEJEWF9JUlFfVFlQRQkoKHByaXYtPm5pYy0+aXJxX3R5cGUgPT0gSVJRX01TSSkgPyAwIDogSVJRRl9TSEFSRUQpCisKKwlyYyA9IHJlcXVlc3RfaXJxKHByaXYtPnBkZXYtPmlycSwgYmR4X2lzcl9uYXBpLCBCRFhfSVJRX1RZUEUsCisJCQkgbmRldi0+bmFtZSwgbmRldik7CisJaWYgKHJjKQogCQlnb3RvIGVycl9pcnE7CiAJYmR4X2VuYWJsZV9pbnRlcnJ1cHRzKHByaXYpOwogCkBAIC00NjIsNyArNDY0LDcgQEAKIAkJCXJlYWRsKHJlZ3MgKyByZWdSWERfQ0ZHMF8wKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JRVJSKCJ0ZWh1dGk6IEhXIHJlc2V0IGZhaWxlZFxuIik7CisJcHJfZXJyKCJIVyByZXNldCBmYWlsZWRcbiIpOwogCXJldHVybiAxOwkJLyogZmFpbHVyZSAqLwogfQogCkBAIC00ODYsNyArNDg4LDcgQEAKIAkJCVJFQURfUkVHKHByaXYsIHJlZ1JYRF9DRkcwXzApOwogCQkJcmV0dXJuIDA7CiAJCX0KLQlFUlIoInRlaHV0aTogSFcgcmVzZXQgZmFpbGVkXG4iKTsKKwlwcl9lcnIoIkhXIHJlc2V0IGZhaWxlZFxuIik7CiAJcmV0dXJuIDE7CQkvKiBmYWlsdXJlICovCiB9CiAKQEAgLTUxMCw4ICs1MTIsNyBAQAogCQltZGVsYXkoMTApOwogCX0KIAlpZiAoaSA9PSA1MCkKLQkJRVJSKCIlczogU1cgcmVzZXQgdGltZW91dC4gY29udGludWluZyBhbnl3YXlcbiIsCi0JCSAgICBwcml2LT5uZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2Vycihwcml2LT5uZGV2LCAiU1cgcmVzZXQgdGltZW91dC4gY29udGludWluZyBhbnl3YXlcbiIpOwogCiAJLyogNi4gZGlzYWJsZSBpbnRycyAqLwogCVdSSVRFX1JFRyhwcml2LCByZWdSRElOVENNMCwgMCk7CkBAIC02MDQsMTggKzYwNSwxNSBAQAogCWlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKQogCQluZXRpZl9zdG9wX3F1ZXVlKHByaXYtPm5kZXYpOwogCi0JaWYgKChyYyA9IGJkeF90eF9pbml0KHByaXYpKSkKLQkJZ290byBlcnI7Ci0KLQlpZiAoKHJjID0gYmR4X3J4X2luaXQocHJpdikpKQotCQlnb3RvIGVycjsKLQotCWlmICgocmMgPSBiZHhfZndfbG9hZChwcml2KSkpCisJaWYgKChyYyA9IGJkeF90eF9pbml0KHByaXYpKSB8fAorCSAgICAocmMgPSBiZHhfcnhfaW5pdChwcml2KSkgfHwKKwkgICAgKHJjID0gYmR4X2Z3X2xvYWQocHJpdikpKQogCQlnb3RvIGVycjsKIAogCWJkeF9yeF9hbGxvY19za2JzKHByaXYsICZwcml2LT5yeGZfZmlmbzApOwogCi0JaWYgKChyYyA9IGJkeF9od19zdGFydChwcml2KSkpCisJcmMgPSBiZHhfaHdfc3RhcnQocHJpdik7CisJaWYgKHJjKQogCQlnb3RvIGVycjsKIAogCW5hcGlfZW5hYmxlKCZwcml2LT5uYXBpKTsKQEAgLTY0Nyw3ICs2NDUsNyBAQAogCWlmIChjbWQgIT0gU0lPQ0RFVlBSSVZBVEUpIHsKIAkJZXJyb3IgPSBjb3B5X2Zyb21fdXNlcihkYXRhLCBpZnItPmlmcl9kYXRhLCBzaXplb2YoZGF0YSkpOwogCQlpZiAoZXJyb3IpIHsKLQkJCUVSUigiY2FudCBjb3B5IGZyb20gdXNlclxuIik7CisJCQlwcl9lcnIoImNhbnQgY29weSBmcm9tIHVzZXJcbiIpOwogCQkJUkVUKGVycm9yKTsKIAkJfQogCQlEQkcoIiVkIDB4JXggMHgleFxuIiwgZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSk7CkBAIC03MDgsNyArNzA2LDcgQEAKIAlFTlRFUjsKIAlEQkcyKCJ2aWQ9JWQgdmFsdWU9JWRcbiIsIChpbnQpdmlkLCBlbmFibGUpOwogCWlmICh1bmxpa2VseSh2aWQgPj0gNDA5NikpIHsKLQkJRVJSKCJ0ZWh1dGk6IGludmFsaWQgVklEOiAldSAoPiA0MDk2KVxuIiwgdmlkKTsKKwkJcHJfZXJyKCJpbnZhbGlkIFZJRDogJXUgKD4gNDA5NilcbiIsIHZpZCk7CiAJCVJFVCgpOwogCX0KIAlyZWcgPSByZWdWTEFOXzAgKyAodmlkIC8gMzIpICogNDsKQEAgLTc3Niw4ICs3NzQsOCBAQAogCiAJLyogZW5mb3JjZSBtaW5pbXVtIGZyYW1lIHNpemUgKi8KIAlpZiAobmV3X210dSA8IEVUSF9aTEVOKSB7Ci0JCUVSUigiJXM6ICVzIG10dSAlZCBpcyBsZXNzIHRoZW4gbWluaW1hbCAlZFxuIiwKLQkJICAgIEJEWF9EUlZfTkFNRSwgbmRldi0+bmFtZSwgbmV3X210dSwgRVRIX1pMRU4pOworCQluZXRkZXZfZXJyKG5kZXYsICJtdHUgJWQgaXMgbGVzcyB0aGVuIG1pbmltYWwgJWRcbiIsCisJCQkgICBuZXdfbXR1LCBFVEhfWkxFTik7CiAJCVJFVCgtRUlOVkFMKTsKIAl9CiAKQEAgLTgwOCw3ICs4MDYsNyBAQAogCQkvKiBzZXQgSU1GIHRvIGFjY2VwdCBhbGwgbXVsdGljYXN0IGZybWFlcyAqLwogCQlmb3IgKGkgPSAwOyBpIDwgTUFDX01DU1RfSEFTSF9OVU07IGkrKykKIAkJCVdSSVRFX1JFRyhwcml2LCByZWdSWF9NQ1NUX0hBU0gwICsgaSAqIDQsIH4wKTsKLQl9IGVsc2UgaWYgKG5kZXYtPm1jX2NvdW50KSB7CisJfSBlbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KG5kZXYpKSB7CiAJCXU4IGhhc2g7CiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwogCQl1MzIgcmVnLCB2YWw7CkBAIC04MjYsMTAgKzgyNCw4IEBACiAJCS8qIFRCRDogc29ydCBhZGRyZXNlcyBhbmQgd3JpdGUgdGhlbSBpbiBhc2NlbmRpbmcgb3JkZXIKIAkJICogaW50byBSWF9NQUNfTUNTVCByZWdzLiB3ZSBza2lwIHRoaXMgcGhhc2Ugbm93IGFuZCBhY2NlcHQgQUxMCiAJCSAqIG11bHRpY2FzdCBmcmFtZXMgdGhyb3UgSU1GICovCi0JCW1jbGlzdCA9IG5kZXYtPm1jX2xpc3Q7Ci0KIAkJLyogYWNjZXB0IHRoZSByZXN0IG9mIGFkZHJlc3NlcyB0aHJvdSBJTUYgKi8KLQkJZm9yICg7IG1jbGlzdDsgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgbmRldikgewogCQkJaGFzaCA9IDA7CiAJCQlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKIAkJCQloYXNoIF49IG1jbGlzdC0+ZG1pX2FkZHJbaV07CkBAIC04NDAsNyArODM2LDcgQEAKIAkJfQogCiAJfSBlbHNlIHsKLQkJREJHKCJvbmx5IG93biBtYWMgJWRcbiIsIG5kZXYtPm1jX2NvdW50KTsKKwkJREJHKCJvbmx5IG93biBtYWMgJWRcbiIsIG5ldGRldl9tY19jb3VudChuZGV2KSk7CiAJCXJ4Zl92YWwgfD0gR01BQ19SWF9GSUxURVJfQUI7CiAJfQogCVdSSVRFX1JFRyhwcml2LCByZWdHTUFDX1JYRl9BLCByeGZfdmFsKTsKQEAgLTEwMjgsMTcgKzEwMjQsMTYgQEAKIAkJCSAgcmVnUlhGX0NGRzBfMCwgcmVnUlhGX0NGRzFfMCwKIAkJCSAgcmVnUlhGX1JQVFJfMCwgcmVnUlhGX1dQVFJfMCkpCiAJCWdvdG8gZXJyX21lbTsKLQlpZiAoIQotCSAgICAocHJpdi0+cnhkYiA9Ci0JICAgICBiZHhfcnhkYl9jcmVhdGUocHJpdi0+cnhmX2ZpZm8wLm0ubWVtc3ogLwotCQkJICAgICBzaXplb2Yoc3RydWN0IHJ4Zl9kZXNjKSkpKQorCXByaXYtPnJ4ZGIgPSBiZHhfcnhkYl9jcmVhdGUocHJpdi0+cnhmX2ZpZm8wLm0ubWVtc3ogLworCQkJCSAgICAgc2l6ZW9mKHN0cnVjdCByeGZfZGVzYykpOworCWlmICghcHJpdi0+cnhkYikKIAkJZ290byBlcnJfbWVtOwogCiAJcHJpdi0+cnhmX2ZpZm8wLm0ucGt0c3ogPSBwcml2LT5uZGV2LT5tdHUgKyBWTEFOX0VUSF9ITEVOOwogCXJldHVybiAwOwogCiBlcnJfbWVtOgotCUVSUigiJXM6ICVzOiBSeCBpbml0IGZhaWxlZFxuIiwgQkRYX0RSVl9OQU1FLCBwcml2LT5uZGV2LT5uYW1lKTsKKwluZXRkZXZfZXJyKHByaXYtPm5kZXYsICJSeCBpbml0IGZhaWxlZFxuIik7CiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKQEAgLTExMTUsOCArMTExMCw5IEBACiAJRU5URVI7CiAJZG5vID0gYmR4X3J4ZGJfYXZhaWxhYmxlKGRiKSAtIDE7CiAJd2hpbGUgKGRubyA+IDApIHsKLQkJaWYgKCEoc2tiID0gZGV2X2FsbG9jX3NrYihmLT5tLnBrdHN6ICsgTkVUX0lQX0FMSUdOKSkpIHsKLQkJCUVSUigiTk8gTUVNOiBkZXZfYWxsb2Nfc2tiIGZhaWxlZFxuIik7CisJCXNrYiA9IGRldl9hbGxvY19za2IoZi0+bS5wa3RzeiArIE5FVF9JUF9BTElHTik7CisJCWlmICghc2tiKSB7CisJCQlwcl9lcnIoIk5PIE1FTTogZGV2X2FsbG9jX3NrYiBmYWlsZWRcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJc2tiLT5kZXYgPSBwcml2LT5uZGV2OwpAQCAtMTMzNyw5ICsxMzMzLDcgQEAKIHN0YXRpYyB2b2lkIHByaW50X3J4ZGQoc3RydWN0IHJ4ZF9kZXNjICpyeGRkLCB1MzIgcnhkX3ZhbDEsIHUxNiBsZW4sCiAJCSAgICAgICB1MTYgcnhkX3ZsYW4pCiB7Ci0JREJHKCJFUlJPUjogcnhkZCBiYyAlZCByeGZxICVkIHRvICVkIHR5cGUgJWQgZXJyICVkIHJ4cCAlZCAiCi0JICAgICJwa3RfaWQgJWQgdnRhZyAlZCBsZW4gJWQgdmxhbl9pZCAlZCBjZmkgJWQgcHJpbyAlZCAiCi0JICAgICJ2YV9sbyAlZCB2YV9oaSAlZFxuIiwKKwlEQkcoIkVSUk9SOiByeGRkIGJjICVkIHJ4ZnEgJWQgdG8gJWQgdHlwZSAlZCBlcnIgJWQgcnhwICVkIHBrdF9pZCAlZCB2dGFnICVkIGxlbiAlZCB2bGFuX2lkICVkIGNmaSAlZCBwcmlvICVkIHZhX2xvICVkIHZhX2hpICVkXG4iLAogCSAgICBHRVRfUlhEX0JDKHJ4ZF92YWwxKSwgR0VUX1JYRF9SWEZRKHJ4ZF92YWwxKSwgR0VUX1JYRF9UTyhyeGRfdmFsMSksCiAJICAgIEdFVF9SWERfVFlQRShyeGRfdmFsMSksIEdFVF9SWERfRVJSKHJ4ZF92YWwxKSwKIAkgICAgR0VUX1JYRF9SWFAocnhkX3ZhbDEpLCBHRVRfUlhEX1BLVF9JRChyeGRfdmFsMSksCkBAIC0xNTkxLDcgKzE1ODUsNyBAQAogCXJldHVybiAwOwogCiBlcnJfbWVtOgotCUVSUigidGVodXRpOiAlczogVHggaW5pdCBmYWlsZWRcbiIsIHByaXYtPm5kZXYtPm5hbWUpOworCW5ldGRldl9lcnIocHJpdi0+bmRldiwgIlR4IGluaXQgZmFpbGVkXG4iKTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KIApAQCAtMTYwOSw3ICsxNjAzLDcgQEAKIAlmc2l6ZSA9IGYtPm0ucnB0ciAtIGYtPm0ud3B0cjsKIAlpZiAoZnNpemUgPD0gMCkKIAkJZnNpemUgPSBmLT5tLm1lbXN6ICsgZnNpemU7Ci0JcmV0dXJuIChmc2l6ZSk7CisJcmV0dXJuIGZzaXplOwogfQogCiAvKiBiZHhfdHhfdHJhbnNtaXQgLSBzZW5kIHBhY2tldCB0byBOSUMKQEAgLTE4NTcsNyArMTg1MSw3IEBACiAgKiBAZGF0YSAtIGRlc2MncyBkYXRhCiAgKiBAc2l6ZSAtIGRlc2MncyBzaXplCiAgKgotICogTk9URTogdGhpcyBmdW5jIGRvZXMgY2hlY2sgZm9yIGF2YWlsYWJsZSBzcGFjZSBhbmQsIGlmIG5lY2Nlc3NhcnksIHdhaXRzIGZvcgorICogTk9URTogdGhpcyBmdW5jIGRvZXMgY2hlY2sgZm9yIGF2YWlsYWJsZSBzcGFjZSBhbmQsIGlmIG5lY2Vzc2FyeSwgd2FpdHMgZm9yCiAgKiAgIE5JQyB0byByZWFkIGV4aXN0aW5nIGRhdGEgYmVmb3JlIHdyaXRpbmcgbmV3IG9uZS4KICAqLwogc3RhdGljIHZvaWQgYmR4X3R4X3B1c2hfZGVzY19zYWZlKHN0cnVjdCBiZHhfcHJpdiAqcHJpdiwgdm9pZCAqZGF0YSwgaW50IHNpemUpCkBAIC0xOTM3LDggKzE5MzEsOSBAQAogCQlSRVQoLUVOT01FTSk7CiAKICAgICAvKioqKioqKioqKioqKiogcGNpICoqKioqKioqKioqKioqKioqLwotCWlmICgoZXJyID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldikpKQkvKiBpdCB0cmlnZXJzIGludGVycnVwdCwgZHVubm8gd2h5LiAqLwotCQlnb3RvIGVycl9wY2k7CQkJLyogaXQncyBub3QgYSBwcm9ibGVtIHRob3VnaCAqLworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpCQkJLyogaXQgdHJpZ2dlcnMgaW50ZXJydXB0LCBkdW5ubyB3aHkuICovCisJCWdvdG8gZXJyX3BjaTsJCS8qIGl0J3Mgbm90IGEgcHJvYmxlbSB0aG91Z2ggKi8KIAogCWlmICghKGVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkpICYmCiAJICAgICEoZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpKSkgewpAQCAtMTk0NiwxNCArMTk0MSwxNCBAQAogCX0gZWxzZSB7CiAJCWlmICgoZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKSkgfHwKIAkJICAgIChlcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInRlaHV0aTogTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uIgotCQkJCQkiLCBhYm9ydGluZ1xuIik7CisJCQlwcl9lcnIoIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmdcbiIpOwogCQkJZ290byBlcnJfZG1hOwogCQl9CiAJCXBjaV91c2luZ19kYWMgPSAwOwogCX0KIAotCWlmICgoZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBCRFhfRFJWX05BTUUpKSkKKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIEJEWF9EUlZfTkFNRSk7CisJaWYgKGVycikKIAkJZ290byBlcnJfZG1hOwogCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CkBAIC0xOTYxLDI1ICsxOTU2LDI2IEBACiAJcGNpYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKIAlpZiAoIXBjaWFkZHIpIHsKIAkJZXJyID0gLUVJTzsKLQkJRVJSKCJ0ZWh1dGk6IG5vIE1NSU8gcmVzb3VyY2VcbiIpOworCQlwcl9lcnIoIm5vIE1NSU8gcmVzb3VyY2VcbiIpOwogCQlnb3RvIGVycl9vdXRfcmVzOwogCX0KLQlpZiAoKHJlZ2lvblNpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKSA8IEJEWF9SRUdTX1NJWkUpIHsKKwlyZWdpb25TaXplID0gcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKTsKKwlpZiAocmVnaW9uU2l6ZSA8IEJEWF9SRUdTX1NJWkUpIHsKIAkJZXJyID0gLUVJTzsKLQkJRVJSKCJ0ZWh1dGk6IE1NSU8gcmVzb3VyY2UgKCV4KSB0b28gc21hbGxcbiIsIHJlZ2lvblNpemUpOworCQlwcl9lcnIoIk1NSU8gcmVzb3VyY2UgKCV4KSB0b28gc21hbGxcbiIsIHJlZ2lvblNpemUpOwogCQlnb3RvIGVycl9vdXRfcmVzOwogCX0KIAogCW5pYy0+cmVncyA9IGlvcmVtYXAocGNpYWRkciwgcmVnaW9uU2l6ZSk7CiAJaWYgKCFuaWMtPnJlZ3MpIHsKIAkJZXJyID0gLUVJTzsKLQkJRVJSKCJ0ZWh1dGk6IGlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcHJfZXJyKCJpb3JlbWFwIGZhaWxlZFxuIik7CiAJCWdvdG8gZXJyX291dF9yZXM7CiAJfQogCiAJaWYgKHBkZXYtPmlycSA8IDIpIHsKIAkJZXJyID0gLUVJTzsKLQkJRVJSKCJ0ZWh1dGk6IGludmFsaWQgaXJxICglZClcbiIsIHBkZXYtPmlycSk7CisJCXByX2VycigiaW52YWxpZCBpcnEgKCVkKVxuIiwgcGRldi0+aXJxKTsKIAkJZ290byBlcnJfb3V0X2lvbWFwOwogCX0KIAlwY2lfc2V0X2RydmRhdGEocGRldiwgbmljKTsKQEAgLTE5OTYsOCArMTk5Miw5IEBACiAJbmljLT5pcnFfdHlwZSA9IElSUV9JTlRYOwogI2lmZGVmIEJEWF9NU0kKIAlpZiAoKHJlYWRsKG5pYy0+cmVncyArIEZQR0FfVkVSKSAmIDB4RkZGKSA+PSAzNzgpIHsKLQkJaWYgKChlcnIgPSBwY2lfZW5hYmxlX21zaShwZGV2KSkpCi0JCQlFUlIoIlRlaHV0aTogQ2FuJ3QgZW5lYmxlIG1zaS4gZXJyb3IgaXMgJWRcbiIsIGVycik7CisJCWVyciA9IHBjaV9lbmFibGVfbXNpKHBkZXYpOworCQlpZiAoZXJyKQorCQkJcHJfZXJyKCJDYW4ndCBlbmVibGUgbXNpLiBlcnJvciBpcyAlZFxuIiwgZXJyKTsKIAkJZWxzZQogCQkJbmljLT5pcnFfdHlwZSA9IElSUV9NU0k7CiAJfSBlbHNlCkBAIC0yMDA2LDkgKzIwMDMsMTAgQEAKIAogICAgIC8qKioqKioqKioqKioqKiBuZXRkZXYgKioqKioqKioqKioqKiovCiAJZm9yIChwb3J0ID0gMDsgcG9ydCA8IG5pYy0+cG9ydF9udW07IHBvcnQrKykgewotCQlpZiAoIShuZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBiZHhfcHJpdikpKSkgeworCQluZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBiZHhfcHJpdikpOworCQlpZiAoIW5kZXYpIHsKIAkJCWVyciA9IC1FTk9NRU07Ci0JCQlwcmludGsoS0VSTl9FUlIgInRlaHV0aTogYWxsb2NfZXRoZXJkZXYgZmFpbGVkXG4iKTsKKwkJCXByX2VycigiYWxsb2NfZXRoZXJkZXYgZmFpbGVkXG4iKTsKIAkJCWdvdG8gZXJyX291dF9pb21hcDsKIAkJfQogCkBAIC0yMDc1LDEyICsyMDczLDEzIEBACiAKIAkJLypiZHhfaHdfcmVzZXQocHJpdik7ICovCiAJCWlmIChiZHhfcmVhZF9tYWMocHJpdikpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAidGVodXRpOiBsb2FkIE1BQyBhZGRyZXNzIGZhaWxlZFxuIik7CisJCQlwcl9lcnIoImxvYWQgTUFDIGFkZHJlc3MgZmFpbGVkXG4iKTsKIAkJCWdvdG8gZXJyX291dF9pb21hcDsKIAkJfQogCQlTRVRfTkVUREVWX0RFVihuZGV2LCAmcGRldi0+ZGV2KTsKLQkJaWYgKChlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmRldikpKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgInRlaHV0aTogcmVnaXN0ZXJfbmV0ZGV2IGZhaWxlZFxuIik7CisJCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTsKKwkJaWYgKGVycikgeworCQkJcHJfZXJyKCJyZWdpc3Rlcl9uZXRkZXYgZmFpbGVkXG4iKTsKIAkJCWdvdG8gZXJyX291dF9mcmVlOwogCQl9CiAJCW5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpOwpAQCAtMjI5NCwxMyArMjI5MywxMyBAQAogLyogQ29udmVydCBSWCBmaWZvIHNpemUgdG8gbnVtYmVyIG9mIHBlbmRpbmcgcGFja2V0cyAqLwogc3RhdGljIGlubGluZSBpbnQgYmR4X3J4X2ZpZm9fc2l6ZV90b19wYWNrZXRzKGludCByeF9zaXplKQogewotCXJldHVybiAoKEZJRk9fU0laRSAqICgxIDw8IHJ4X3NpemUpKSAvIHNpemVvZihzdHJ1Y3QgcnhmX2Rlc2MpKTsKKwlyZXR1cm4gKEZJRk9fU0laRSAqICgxIDw8IHJ4X3NpemUpKSAvIHNpemVvZihzdHJ1Y3QgcnhmX2Rlc2MpOwogfQogCiAvKiBDb252ZXJ0IFRYIGZpZm8gc2l6ZSB0byBudW1iZXIgb2YgcGVuZGluZyBwYWNrZXRzICovCiBzdGF0aWMgaW5saW5lIGludCBiZHhfdHhfZmlmb19zaXplX3RvX3BhY2tldHMoaW50IHR4X3NpemUpCiB7Ci0JcmV0dXJuICgoRklGT19TSVpFICogKDEgPDwgdHhfc2l6ZSkpIC8gQkRYX1RYRl9ERVNDX1NaKTsKKwlyZXR1cm4gKEZJRk9fU0laRSAqICgxIDw8IHR4X3NpemUpKSAvIEJEWF9UWEZfREVTQ19TWjsKIH0KIAogLyoKQEAgLTIzOTIsMTAgKzIzOTEsMTAgQEAKIAljYXNlIEVUSF9TU19TVEFUUzoKIAkJQkRYX0FTU0VSVChBUlJBWV9TSVpFKGJkeF9zdGF0X25hbWVzKQogCQkJICAgIT0gc2l6ZW9mKHN0cnVjdCBiZHhfc3RhdHMpIC8gc2l6ZW9mKHU2NCkpOwotCQlyZXR1cm4gKChwcml2LT5zdGF0c19mbGFnKSA/IEFSUkFZX1NJWkUoYmR4X3N0YXRfbmFtZXMpCTogMCk7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAocHJpdi0+c3RhdHNfZmxhZykgPyBBUlJBWV9TSVpFKGJkeF9zdGF0X25hbWVzKQk6IDA7CiAJfQorCisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIC8qCkBAIC0yNDkzLDEwICsyNDkyLDggQEAKICAqLwogc3RhdGljIHZvaWQgX19pbml0IHByaW50X2RyaXZlcl9pZCh2b2lkKQogewotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcywgJXNcbiIsIEJEWF9EUlZfTkFNRSwgQkRYX0RSVl9ERVNDLAotCSAgICAgICBCRFhfRFJWX1ZFUlNJT04pOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiBPcHRpb25zOiBod19jc3VtICVzXG4iLCBCRFhfRFJWX05BTUUsCi0JICAgICAgIEJEWF9NU0lfU1RSSU5HKTsKKwlwcl9pbmZvKCIlcywgJXNcbiIsIEJEWF9EUlZfREVTQywgQkRYX0RSVl9WRVJTSU9OKTsKKwlwcl9pbmZvKCJPcHRpb25zOiBod19jc3VtICVzXG4iLCBCRFhfTVNJX1NUUklORyk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGJkeF9tb2R1bGVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGVodXRpLmggYi9kcml2ZXJzL25ldC90ZWh1dGkuaAppbmRleCAxMjQxNDE5Li5hMTlkY2Y4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZWh1dGkuaAorKysgYi9kcml2ZXJzL25ldC90ZWh1dGkuaApAQCAtNTI5LDI4ICs1MjksMzQgQEAKIAogLyogRGVidWdnaW5nIE1hY3JvcyAqLwogCi0jZGVmaW5lIEVSUihmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0VSUiBmbXQsICMjIGFyZ3MpCi0jZGVmaW5lIERCRzIoZm10LCBhcmdzLi4uKQlcCi0JcHJpbnRrKEtFUk5fRVJSICAiJXM6JS01ZDogIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXywgIyMgYXJncykKKyNkZWZpbmUgREJHMihmbXQsIGFyZ3MuLi4pCQkJCQlcCisJcHJfZXJyKCIlczolLTVkOiAiIGZtdCwgX19mdW5jX18sIF9fTElORV9fLCAjIyBhcmdzKQogCiAjZGVmaW5lIEJEWF9BU1NFUlQoeCkgQlVHX09OKHgpCiAKICNpZmRlZiBERUJVRwogCi0jZGVmaW5lIEVOVEVSICAgICAgICAgIGRvIHsgXAotCXByaW50ayhLRVJOX0VSUiAgIiVzOiUtNWQ6IEVOVEVSXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOyBcCisjZGVmaW5lIEVOVEVSCQkJCQkJXAorZG8gewkJCQkJCQlcCisJcHJfZXJyKCIlczolLTVkOiBFTlRFUlxuIiwgX19mdW5jX18sIF9fTElORV9fKTsgXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBSRVQoYXJncy4uLikgICBkbyB7IFwKLQlwcmludGsoS0VSTl9FUlIgICIlczolLTVkOiBSRVRVUk5cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7IFwKLXJldHVybiBhcmdzOyB9IHdoaWxlICgwKQorI2RlZmluZSBSRVQoYXJncy4uLikJCQkJCSBcCitkbyB7CQkJCQkJCSBcCisJcHJfZXJyKCIlczolLTVkOiBSRVRVUk5cbiIsIF9fZnVuY19fLCBfX0xJTkVfXyk7IFwKKwlyZXR1cm4gYXJnczsJCQkJCSBcCit9IHdoaWxlICgwKQogCi0jZGVmaW5lIERCRyhmbXQsIGFyZ3MuLi4pCVwKLQlwcmludGsoS0VSTl9FUlIgICIlczolLTVkOiAiIGZtdCwgX19mdW5jX18sIF9fTElORV9fLCAjIyBhcmdzKQorI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKQkJCQkJXAorCXByX2VycigiJXM6JS01ZDogIiBmbXQsIF9fZnVuY19fLCBfX0xJTkVfXywgIyMgYXJncykKICNlbHNlCi0jZGVmaW5lIEVOVEVSICAgICAgICAgZG8geyAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgRU5URVIgZG8geyAgfSB3aGlsZSAoMCkKICNkZWZpbmUgUkVUKGFyZ3MuLi4pICAgcmV0dXJuIGFyZ3MKLSNkZWZpbmUgREJHKGZtdCwgYXJncy4uLikgICBkbyB7ICB9IHdoaWxlICgwKQorI2RlZmluZSBEQkcoZm10LCBhcmdzLi4uKQkJCVwKK2RvIHsJCQkJCQlcCisJaWYgKDApCQkJCQlcCisJCXByX2VycihmbXQsICMjYXJncyk7CQlcCit9IHdoaWxlICgwKQogI2VuZGlmCiAKICNlbmRpZiAvKiBfQkRYX19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuYyBiL2RyaXZlcnMvbmV0L3RnMy5jCmluZGV4IDdmODJiMDIuLjBmYTc2ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC02Nyw5ICs2Nyw4IEBACiAjaW5jbHVkZSAidGczLmgiCiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkidGczIgotI2RlZmluZSBQRlggRFJWX01PRFVMRV9OQU1FCSI6ICIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjEwNiIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJKYW51YXJ5IDEyLCAyMDEwIgorI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04JIjMuMTA4IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkZlYnJ1YXJ5IDE3LCAyMDEwIgogCiAjZGVmaW5lIFRHM19ERUZfTUFDX01PREUJMAogI2RlZmluZSBURzNfREVGX1JYX01PREUJCTAKQEAgLTE1OCw3ICsxNTcsNyBAQAogI2RlZmluZSBGSVJNV0FSRV9URzNUU081CSJ0aWdvbi90ZzNfdHNvNS5iaW4iCiAKIHN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KLQlEUlZfTU9EVUxFX05BTUUgIi5jOnYiIERSVl9NT0RVTEVfVkVSU0lPTiAiICgiIERSVl9NT0RVTEVfUkVMREFURSAiKVxuIjsKKwlEUlZfTU9EVUxFX05BTUUgIi5jOnYiIERSVl9NT0RVTEVfVkVSU0lPTiAiICgiIERSVl9NT0RVTEVfUkVMREFURSAiKSI7CiAKIE1PRFVMRV9BVVRIT1IoIkRhdmlkIFMuIE1pbGxlciAoZGF2ZW1AcmVkaGF0LmNvbSkgYW5kIEplZmYgR2FyemlrIChqZ2FyemlrQHBvYm94LmNvbSkiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiQnJvYWRjb20gVGlnb24zIGV0aGVybmV0IGRyaXZlciIpOwpAQCAtMTc0LDcgKzE3Myw3IEBACiBtb2R1bGVfcGFyYW0odGczX2RlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyh0ZzNfZGVidWcsICJUaWdvbjMgYml0bWFwcGVkIGRlYnVnZ2luZyBtZXNzYWdlIGVuYWJsZSB2YWx1ZSIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdGczX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh0ZzNfcGNpX3RibCkgPSB7CiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwMCl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDEpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181NzAyKX0sCkBAIC0yNDQsNiArMjQzLDEyIEBACiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgVEczUENJX0RFVklDRV9USUdPTjNfNTcxNyl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3MTgpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBURzNQQ0lfREVWSUNFX1RJR09OM181NzI0KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgVEczUENJX0RFVklDRV9USUdPTjNfNTc3ODEpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc4NSl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NzYxKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgVEczUENJX0RFVklDRV9USUdPTjNfNTc3NjUpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc5MSl9LAorCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3Nzk1KX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNULCBQQ0lfREVWSUNFX0lEX1NZU0tPTk5FQ1RfOURYWCl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfU1lTS09OTkVDVCwgUENJX0RFVklDRV9JRF9TWVNLT05ORUNUXzlNWFgpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FMVElNQSwgUENJX0RFVklDRV9JRF9BTFRJTUFfQUMxMDAwKX0sCkBAIC02MzYsNyArNjQxLDYgQEAKIHN0YXRpYyB2b2lkIHRnM19lbmFibGVfaW50cyhzdHJ1Y3QgdGczICp0cCkKIHsKIAlpbnQgaTsKLQl1MzIgY29hbF9ub3cgPSAwOwogCiAJdHAtPmlycV9zeW5jID0gMDsKIAl3bWIoKTsKQEAgLTY0NCwxMyArNjQ4LDE0IEBACiAJdHczMihURzNQQ0lfTUlTQ19IT1NUX0NUUkwsCiAJICAgICAodHAtPm1pc2NfaG9zdF9jdHJsICYgfk1JU0NfSE9TVF9DVFJMX01BU0tfUENJX0lOVCkpOwogCisJdHAtPmNvYWxfbm93ID0gdHAtPmNvYWxlc2NlX21vZGUgfCBIT1NUQ0NfTU9ERV9FTkFCTEU7CiAJZm9yIChpID0gMDsgaSA8IHRwLT5pcnFfY250OyBpKyspIHsKIAkJc3RydWN0IHRnM19uYXBpICp0bmFwaSA9ICZ0cC0+bmFwaVtpXTsKIAkJdHczMl9tYWlsYm94X2YodG5hcGktPmludF9tYm94LCB0bmFwaS0+bGFzdF90YWcgPDwgMjQpOwogCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl8xU0hPVF9NU0kpCiAJCQl0dzMyX21haWxib3hfZih0bmFwaS0+aW50X21ib3gsIHRuYXBpLT5sYXN0X3RhZyA8PCAyNCk7CiAKLQkJY29hbF9ub3cgfD0gdG5hcGktPmNvYWxfbm93OworCQl0cC0+Y29hbF9ub3cgfD0gdG5hcGktPmNvYWxfbm93OwogCX0KIAogCS8qIEZvcmNlIGFuIGluaXRpYWwgaW50ZXJydXB0ICovCkBAIC02NTgsOCArNjYzLDkgQEAKIAkgICAgKHRwLT5uYXBpWzBdLmh3X3N0YXR1cy0+c3RhdHVzICYgU0RfU1RBVFVTX1VQREFURUQpKQogCQl0dzMyKEdSQ19MT0NBTF9DVFJMLCB0cC0+Z3JjX2xvY2FsX2N0cmwgfCBHUkNfTENMQ1RSTF9TRVRJTlQpOwogCWVsc2UKLQkJdHczMihIT1NUQ0NfTU9ERSwgdHAtPmNvYWxlc2NlX21vZGUgfAotCQkgICAgIEhPU1RDQ19NT0RFX0VOQUJMRSB8IGNvYWxfbm93KTsKKwkJdHczMihIT1NUQ0NfTU9ERSwgdHAtPmNvYWxfbm93KTsKKworCXRwLT5jb2FsX25vdyAmPSB+KHRwLT5uYXBpWzBdLmNvYWxfbm93IHwgdHAtPm5hcGlbMV0uY29hbF9ub3cpOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCB0ZzNfaGFzX3dvcmsoc3RydWN0IHRnM19uYXBpICp0bmFwaSkKQEAgLTk0OCwxNyArOTU0LDE3IEBACiAKIAlwaHlkZXYgPSB0cC0+bWRpb19idXMtPnBoeV9tYXBbVEczX1BIWV9NSUlfQUREUl07CiAJc3dpdGNoIChwaHlkZXYtPmRydi0+cGh5X2lkICYgcGh5ZGV2LT5kcnYtPnBoeV9pZF9tYXNrKSB7Ci0JY2FzZSBURzNfUEhZX0lEX0JDTTUwNjEwOgotCWNhc2UgVEczX1BIWV9JRF9CQ001MDYxME06CisJY2FzZSBQSFlfSURfQkNNNTA2MTA6CisJY2FzZSBQSFlfSURfQkNNNTA2MTBNOgogCQl2YWwgPSBNQUNfUEhZQ0ZHMl81MDYxMF9MRURfTU9ERVM7CiAJCWJyZWFrOwotCWNhc2UgVEczX1BIWV9JRF9CQ01BQzEzMToKKwljYXNlIFBIWV9JRF9CQ01BQzEzMToKIAkJdmFsID0gTUFDX1BIWUNGRzJfQUMxMzFfTEVEX01PREVTOwogCQlicmVhazsKLQljYXNlIFRHM19QSFlfSURfUlRMODIxMUM6CisJY2FzZSBQSFlfSURfUlRMODIxMUM6CiAJCXZhbCA9IE1BQ19QSFlDRkcyX1JUTDgyMTFDX0xFRF9NT0RFUzsKIAkJYnJlYWs7Ci0JY2FzZSBURzNfUEhZX0lEX1JUTDgyMDFFOgorCWNhc2UgUEhZX0lEX1JUTDgyMDFFOgogCQl2YWwgPSBNQUNfUEhZQ0ZHMl9SVEw4MjAxRV9MRURfTU9ERVM7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC05NzcsNyArOTgzLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfU1REX0lCTkRfRElTQUJMRSkpCisJaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9JTkJBTkRfRElTQUJMRSkpCiAJCXZhbCB8PSBNQUNfUEhZQ0ZHMl9FTU9ERV9NQVNLX01BU0sgfAogCQkgICAgICAgTUFDX1BIWUNGRzJfRk1PREVfTUFTS19NQVNLIHwKIAkJICAgICAgIE1BQ19QSFlDRkcyX0dNT0RFX01BU0tfTUFTSyB8CkBAIC05OTAsNyArOTk2LDcgQEAKIAl2YWwgPSB0cjMyKE1BQ19QSFlDRkcxKTsKIAl2YWwgJj0gfihNQUNfUEhZQ0ZHMV9SWENMS19UT19NQVNLIHwgTUFDX1BIWUNGRzFfVFhDTEtfVE9fTUFTSyB8CiAJCSBNQUNfUEhZQ0ZHMV9SR01JSV9FWFRfUlhfREVDIHwgTUFDX1BIWUNGRzFfUkdNSUlfU05EX1NUQVRfRU4pOwotCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfU1REX0lCTkRfRElTQUJMRSkpIHsKKwlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1JHTUlJX0lOQkFORF9ESVNBQkxFKSkgewogCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9FWFRfSUJORF9SWF9FTikKIAkJCXZhbCB8PSBNQUNfUEhZQ0ZHMV9SR01JSV9FWFRfUlhfREVDOwogCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9FWFRfSUJORF9UWF9FTikKQEAgLTEwMDgsNyArMTAxNCw3IEBACiAJCSBNQUNfUkdNSUlfTU9ERV9UWF9FTkFCTEUgfAogCQkgTUFDX1JHTUlJX01PREVfVFhfTE9XUFdSIHwKIAkJIE1BQ19SR01JSV9NT0RFX1RYX1JFU0VUKTsKLQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1JHTUlJX1NURF9JQk5EX0RJU0FCTEUpKSB7CisJaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9JTkJBTkRfRElTQUJMRSkpIHsKIAkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfRVhUX0lCTkRfUlhfRU4pCiAJCQl2YWwgfD0gTUFDX1JHTUlJX01PREVfUlhfSU5UX0IgfAogCQkJICAgICAgIE1BQ19SR01JSV9NT0RFX1JYX1FVQUxJVFkgfApAQCAtMTAyOCw2ICsxMDM0LDE3IEBACiAJdHczMl9mKE1BQ19NSV9NT0RFLCB0cC0+bWlfbW9kZSk7CiAJdWRlbGF5KDgwKTsKIAorCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19NRElPQlVTX0lOSVRFRCkgJiYKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUpCisJCXRnM19tZGlvX2NvbmZpZ181Nzg1KHRwKTsKK30KKworc3RhdGljIGludCB0ZzNfbWRpb19pbml0KHN0cnVjdCB0ZzMgKnRwKQoreworCWludCBpOworCXUzMiByZWc7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKKwogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykgewogCQl1MzIgZnVuY251bSwgaXNfc2VyZGVzOwogCkBAIC0xMDQ3LDE3ICsxMDY0LDYgQEAKIAl9IGVsc2UKIAkJdHAtPnBoeV9hZGRyID0gVEczX1BIWV9NSUlfQUREUjsKIAotCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19NRElPQlVTX0lOSVRFRCkgJiYKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUpCi0JCXRnM19tZGlvX2NvbmZpZ181Nzg1KHRwKTsKLX0KLQotc3RhdGljIGludCB0ZzNfbWRpb19pbml0KHN0cnVjdCB0ZzMgKnRwKQotewotCWludCBpOwotCXUzMiByZWc7Ci0Jc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldjsKLQogCXRnM19tZGlvX3N0YXJ0KHRwKTsKIAogCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX1BIWUxJQikgfHwKQEAgLTEwOTIsOCArMTA5OCw3IEBACiAKIAlpID0gbWRpb2J1c19yZWdpc3Rlcih0cC0+bWRpb19idXMpOwogCWlmIChpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBtZGlvYnVzX3JlZyBmYWlsZWQgKDB4JXgpXG4iLAotCQkJdHAtPmRldi0+bmFtZSwgaSk7CisJCW5ldGRldl93YXJuKHRwLT5kZXYsICJtZGlvYnVzX3JlZyBmYWlsZWQgKDB4JXgpXG4iLCBpKTsKIAkJbWRpb2J1c19mcmVlKHRwLT5tZGlvX2J1cyk7CiAJCXJldHVybiBpOwogCX0KQEAgLTExMDEsMzUgKzExMDYsMzUgQEAKIAlwaHlkZXYgPSB0cC0+bWRpb19idXMtPnBoeV9tYXBbVEczX1BIWV9NSUlfQUREUl07CiAKIAlpZiAoIXBoeWRldiB8fCAhcGh5ZGV2LT5kcnYpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vIFBIWSBkZXZpY2VzXG4iLCB0cC0+ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X3dhcm4odHAtPmRldiwgIk5vIFBIWSBkZXZpY2VzXG4iKTsKIAkJbWRpb2J1c191bnJlZ2lzdGVyKHRwLT5tZGlvX2J1cyk7CiAJCW1kaW9idXNfZnJlZSh0cC0+bWRpb19idXMpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlzd2l0Y2ggKHBoeWRldi0+ZHJ2LT5waHlfaWQgJiBwaHlkZXYtPmRydi0+cGh5X2lkX21hc2spIHsKLQljYXNlIFRHM19QSFlfSURfQkNNNTc3ODA6CisJY2FzZSBQSFlfSURfQkNNNTc3ODA6CiAJCXBoeWRldi0+aW50ZXJmYWNlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUk7CiAJCXBoeWRldi0+ZGV2X2ZsYWdzIHw9IFBIWV9CUkNNX0FVVE9fUFdSRFdOX0VOQUJMRTsKIAkJYnJlYWs7Ci0JY2FzZSBURzNfUEhZX0lEX0JDTTUwNjEwOgotCWNhc2UgVEczX1BIWV9JRF9CQ001MDYxME06CisJY2FzZSBQSFlfSURfQkNNNTA2MTA6CisJY2FzZSBQSFlfSURfQkNNNTA2MTBNOgogCQlwaHlkZXYtPmRldl9mbGFncyB8PSBQSFlfQlJDTV9DTEVBUl9SR01JSV9NT0RFIHwKIAkJCQkgICAgIFBIWV9CUkNNX1JYX1JFRkNMS19VTlVTRUQgfAogCQkJCSAgICAgUEhZX0JSQ01fRElTX1RYQ1JYQ19OT0VOUkdZIHwKIAkJCQkgICAgIFBIWV9CUkNNX0FVVE9fUFdSRFdOX0VOQUJMRTsKLQkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfU1REX0lCTkRfRElTQUJMRSkKKwkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfSU5CQU5EX0RJU0FCTEUpCiAJCQlwaHlkZXYtPmRldl9mbGFncyB8PSBQSFlfQlJDTV9TVERfSUJORF9ESVNBQkxFOwogCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19SR01JSV9FWFRfSUJORF9SWF9FTikKIAkJCXBoeWRldi0+ZGV2X2ZsYWdzIHw9IFBIWV9CUkNNX0VYVF9JQk5EX1JYX0VOQUJMRTsKIAkJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfUkdNSUlfRVhUX0lCTkRfVFhfRU4pCiAJCQlwaHlkZXYtPmRldl9mbGFncyB8PSBQSFlfQlJDTV9FWFRfSUJORF9UWF9FTkFCTEU7CiAJCS8qIGZhbGx0aHJ1ICovCi0JY2FzZSBURzNfUEhZX0lEX1JUTDgyMTFDOgorCWNhc2UgUEhZX0lEX1JUTDgyMTFDOgogCQlwaHlkZXYtPmludGVyZmFjZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9SR01JSTsKIAkJYnJlYWs7Ci0JY2FzZSBURzNfUEhZX0lEX1JUTDgyMDFFOgotCWNhc2UgVEczX1BIWV9JRF9CQ01BQzEzMToKKwljYXNlIFBIWV9JRF9SVEw4MjAxRToKKwljYXNlIFBIWV9JRF9CQ01BQzEzMToKIAkJcGh5ZGV2LT5pbnRlcmZhY2UgPSBQSFlfSU5URVJGQUNFX01PREVfTUlJOwogCQlwaHlkZXYtPmRldl9mbGFncyB8PSBQSFlfQlJDTV9BVVRPX1BXUkRXTl9FTkFCTEU7CiAJCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX1BIWV9JU19GRVQ7CkBAIC0xMjQ1LDI3ICsxMjUwLDIyIEBACiBzdGF0aWMgdm9pZCB0ZzNfbGlua19yZXBvcnQoc3RydWN0IHRnMyAqdHApCiB7CiAJaWYgKCFuZXRpZl9jYXJyaWVyX29rKHRwLT5kZXYpKSB7Ci0JCWlmIChuZXRpZl9tc2dfbGluayh0cCkpCi0JCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IExpbmsgaXMgZG93bi5cbiIsCi0JCQkgICAgICAgdHAtPmRldi0+bmFtZSk7CisJCW5ldGlmX2luZm8odHAsIGxpbmssIHRwLT5kZXYsICJMaW5rIGlzIGRvd25cbiIpOwogCQl0ZzNfdW1wX2xpbmtfcmVwb3J0KHRwKTsKIAl9IGVsc2UgaWYgKG5ldGlmX21zZ19saW5rKHRwKSkgewotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IExpbmsgaXMgdXAgYXQgJWQgTWJwcywgJXMgZHVwbGV4LlxuIiwKLQkJICAgICAgIHRwLT5kZXYtPm5hbWUsCi0JCSAgICAgICAodHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9zcGVlZCA9PSBTUEVFRF8xMDAwID8KLQkJCTEwMDAgOgotCQkJKHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfc3BlZWQgPT0gU1BFRURfMTAwID8KLQkJCSAxMDAgOiAxMCkpLAotCQkgICAgICAgKHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfZHVwbGV4ID09IERVUExFWF9GVUxMID8KLQkJCSJmdWxsIiA6ICJoYWxmIikpOworCQluZXRkZXZfaW5mbyh0cC0+ZGV2LCAiTGluayBpcyB1cCBhdCAlZCBNYnBzLCAlcyBkdXBsZXhcbiIsCisJCQkgICAgKHRwLT5saW5rX2NvbmZpZy5hY3RpdmVfc3BlZWQgPT0gU1BFRURfMTAwMCA/CisJCQkgICAgIDEwMDAgOgorCQkJICAgICAodHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9zcGVlZCA9PSBTUEVFRF8xMDAgPworCQkJICAgICAgMTAwIDogMTApKSwKKwkJCSAgICAodHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9kdXBsZXggPT0gRFVQTEVYX0ZVTEwgPworCQkJICAgICAiZnVsbCIgOiAiaGFsZiIpKTsKIAotCQlwcmludGsoS0VSTl9JTkZPIFBGWAotCQkgICAgICAgIiVzOiBGbG93IGNvbnRyb2wgaXMgJXMgZm9yIFRYIGFuZCAlcyBmb3IgUlguXG4iLAotCQkgICAgICAgdHAtPmRldi0+bmFtZSwKLQkJICAgICAgICh0cC0+bGlua19jb25maWcuYWN0aXZlX2Zsb3djdHJsICYgRkxPV19DVFJMX1RYKSA/Ci0JCSAgICAgICAib24iIDogIm9mZiIsCi0JCSAgICAgICAodHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9mbG93Y3RybCAmIEZMT1dfQ1RSTF9SWCkgPwotCQkgICAgICAgIm9uIiA6ICJvZmYiKTsKKwkJbmV0ZGV2X2luZm8odHAtPmRldiwgIkZsb3cgY29udHJvbCBpcyAlcyBmb3IgVFggYW5kICVzIGZvciBSWFxuIiwKKwkJCSAgICAodHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9mbG93Y3RybCAmIEZMT1dfQ1RSTF9UWCkgPworCQkJICAgICJvbiIgOiAib2ZmIiwKKwkJCSAgICAodHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9mbG93Y3RybCAmIEZMT1dfQ1RSTF9SWCkgPworCQkJICAgICJvbiIgOiAib2ZmIik7CiAJCXRnM191bXBfbGlua19yZXBvcnQodHApOwogCX0KIH0KQEAgLTE0NjQsNyArMTQ2NCw3IEBACiAJcGh5ZGV2ID0gcGh5X2Nvbm5lY3QodHAtPmRldiwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSwgdGczX2FkanVzdF9saW5rLAogCQkJICAgICBwaHlkZXYtPmRldl9mbGFncywgcGh5ZGV2LT5pbnRlcmZhY2UpOwogCWlmIChJU19FUlIocGh5ZGV2KSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDb3VsZCBub3QgYXR0YWNoIHRvIFBIWVxuIiwgdHAtPmRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIodHAtPmRldiwgIkNvdWxkIG5vdCBhdHRhY2ggdG8gUEhZXG4iKTsKIAkJcmV0dXJuIFBUUl9FUlIocGh5ZGV2KTsKIAl9CiAKQEAgLTE1NjQsNyArMTU2NCw5IEBACiB7CiAJdTMyIHJlZzsKIAotCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTcwNV9QTFVTKSkKKwlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykgfHwKKwkJKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3ICYmCisJICAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9NSUlfU0VSREVTKSkpCiAJCXJldHVybjsKIAogCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9JU19GRVQpIHsKQEAgLTE5MzksNiArMTk0MSwxMCBAQAogCQl9CiAJfQogCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3ICYmCisJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX01JSV9TRVJERVMpKQorCQlyZXR1cm4gMDsKKwogCXRnM19waHlfYXBwbHlfb3RwKHRwKTsKIAogCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9FTkFCTEVfQVBEKQpAQCAtMTk4Miw3ICsxOTg4LDcgQEAKIAl9CiAJLyogU2V0IEV4dGVuZGVkIHBhY2tldCBsZW5ndGggYml0IChiaXQgMTQpIG9uIGFsbCBjaGlwcyB0aGF0ICovCiAJLyogc3VwcG9ydCBqdW1ibyBmcmFtZXMgKi8KLQlpZiAoKHRwLT5waHlfaWQgJiBQSFlfSURfTUFTSykgPT0gUEhZX0lEX0JDTTU0MDEpIHsKKwlpZiAoKHRwLT5waHlfaWQgJiBURzNfUEhZX0lEX01BU0spID09IFRHM19QSFlfSURfQkNNNTQwMSkgewogCQkvKiBDYW5ub3QgZG8gcmVhZC1tb2RpZnktd3JpdGUgb24gNTQwMSAqLwogCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfQVVYX0NUUkwsIDB4NGMyMCk7CiAJfSBlbHNlIGlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfSlVNQk9fQ0FQQUJMRSkgewpAQCAtMjAxOSw3ICsyMDI1LDkgQEAKIHsKIAlzdHJ1Y3QgdGczICp0cF9wZWVyID0gdHA7CiAKLQlpZiAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfSVNfTklDKSA9PSAwKQorCS8qIFRoZSBHUElPcyBkbyBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgb24gNTc3NjUuICovCisJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0lTX05JQykgPT0gMCB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3NjUpCiAJCXJldHVybjsKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcwNCB8fApAQCAtMjEzMiw3ICsyMTQwLDcgQEAKIHsKIAlpZiAodHAtPmxlZF9jdHJsID09IExFRF9DVFJMX01PREVfUEhZXzIpCiAJCXJldHVybiAxOwotCWVsc2UgaWYgKCh0cC0+cGh5X2lkICYgUEhZX0lEX01BU0spID09IFBIWV9JRF9CQ001NDExKSB7CisJZWxzZSBpZiAoKHRwLT5waHlfaWQgJiBURzNfUEhZX0lEX01BU0spID09IFRHM19QSFlfSURfQkNNNTQxMSkgewogCQlpZiAoc3BlZWQgIT0gU1BFRURfMTApCiAJCQlyZXR1cm4gMTsKIAl9IGVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwKQpAQCAtMjQ4NSw4ICsyNDkzLDggQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogSW52YWxpZCBwb3dlciBzdGF0ZSAoRCVkKSByZXF1ZXN0ZWRcbiIsCi0JCQl0cC0+ZGV2LT5uYW1lLCBzdGF0ZSk7CisJCW5ldGRldl9lcnIodHAtPmRldiwgIkludmFsaWQgcG93ZXIgc3RhdGUgKEQlZCkgcmVxdWVzdGVkXG4iLAorCQkJICAgc3RhdGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTI1NDgsMTEgKzI1NTYsMTEgQEAKIAkJCXBoeV9zdGFydF9hbmVnKHBoeWRldik7CiAKIAkJCXBoeWlkID0gcGh5ZGV2LT5kcnYtPnBoeV9pZCAmIHBoeWRldi0+ZHJ2LT5waHlfaWRfbWFzazsKLQkJCWlmIChwaHlpZCAhPSBURzNfUEhZX0lEX0JDTUFDMTMxKSB7Ci0JCQkJcGh5aWQgJj0gVEczX1BIWV9PVUlfTUFTSzsKLQkJCQlpZiAocGh5aWQgPT0gVEczX1BIWV9PVUlfMSB8fAotCQkJCSAgICBwaHlpZCA9PSBURzNfUEhZX09VSV8yIHx8Ci0JCQkJICAgIHBoeWlkID09IFRHM19QSFlfT1VJXzMpCisJCQlpZiAocGh5aWQgIT0gUEhZX0lEX0JDTUFDMTMxKSB7CisJCQkJcGh5aWQgJj0gUEhZX0JDTV9PVUlfTUFTSzsKKwkJCQlpZiAocGh5aWQgPT0gUEhZX0JDTV9PVUlfMSB8fAorCQkJCSAgICBwaHlpZCA9PSBQSFlfQkNNX09VSV8yIHx8CisJCQkJICAgIHBoeWlkID09IFBIWV9CQ01fT1VJXzMpCiAJCQkJCWRvX2xvd19wb3dlciA9IHRydWU7CiAJCQl9CiAJCX0KQEAgLTMwNjIsNyArMzA3MCw3IEBACiAJaWYgKGZvcmNlX3Jlc2V0KQogCQl0ZzNfcGh5X3Jlc2V0KHRwKTsKIAotCWlmICgodHAtPnBoeV9pZCAmIFBIWV9JRF9NQVNLKSA9PSBQSFlfSURfQkNNNTQwMSkgeworCWlmICgodHAtPnBoeV9pZCAmIFRHM19QSFlfSURfTUFTSykgPT0gVEczX1BIWV9JRF9CQ001NDAxKSB7CiAJCXRnM19yZWFkcGh5KHRwLCBNSUlfQk1TUiwgJmJtc3IpOwogCQlpZiAodGczX3JlYWRwaHkodHAsIE1JSV9CTVNSLCAmYm1zcikgfHwKIAkJICAgICEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0lOSVRfQ09NUExFVEUpKQpAQCAtMzA4Myw3ICszMDkxLDggQEAKIAkJCQl9CiAJCQl9CiAKLQkJCWlmICgodHAtPnBoeV9pZCAmIFBIWV9JRF9SRVZfTUFTSykgPT0gUEhZX1JFVl9CQ001NDAxX0IwICYmCisJCQlpZiAoKHRwLT5waHlfaWQgJiBURzNfUEhZX0lEX1JFVl9NQVNLKSA9PQorCQkJICAgIFRHM19QSFlfUkVWX0JDTTU0MDFfQjAgJiYKIAkJCSAgICAhKGJtc3IgJiBCTVNSX0xTVEFUVVMpICYmCiAJCQkgICAgdHAtPmxpbmtfY29uZmlnLmFjdGl2ZV9zcGVlZCA9PSBTUEVFRF8xMDAwKSB7CiAJCQkJZXJyID0gdGczX3BoeV9yZXNldCh0cCk7CkBAIC0zMjM4LDcgKzMyNDcsNyBAQAogCS8qID8/PyBXaXRob3V0IHRoaXMgc2V0dGluZyBOZXRnZWFyIEdBMzAyVCBQSFkgZG9lcyBub3QKIAkgKiA/Pz8gc2VuZC9yZWNlaXZlIHBhY2tldHMuLi4KIAkgKi8KLQlpZiAoKHRwLT5waHlfaWQgJiBQSFlfSURfTUFTSykgPT0gUEhZX0lEX0JDTTU0MTEgJiYKKwlpZiAoKHRwLT5waHlfaWQgJiBURzNfUEhZX0lEX01BU0spID09IFRHM19QSFlfSURfQkNNNTQxMSAmJgogCSAgICB0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTcwMF9BTFRJTUEpIHsKIAkJdHAtPm1pX21vZGUgfD0gTUFDX01JX01PREVfQVVUT19QT0xMOwogCQl0dzMyX2YoTUFDX01JX01PREUsIHRwLT5taV9tb2RlKTsKQEAgLTM5NTMsNyArMzk2Miw3IEBACiAJdHczMl9mKE1BQ19NT0RFLCB0cC0+bWFjX21vZGUpOwogCXVkZWxheSg0MCk7CiAKLQlpZiAodHAtPnBoeV9pZCA9PSBQSFlfSURfQkNNODAwMikKKwlpZiAodHAtPnBoeV9pZCA9PSBURzNfUEhZX0lEX0JDTTgwMDIpCiAJCXRnM19pbml0X2JjbTgwMDIodHApOwogCiAJLyogRW5hYmxlIGxpbmsgY2hhbmdlIGV2ZW50IGV2ZW4gd2hlbiBzZXJkZXMgcG9sbGluZy4gICovCkBAIC00MzI2LDEwICs0MzM1LDggQEAKIAlCVUdfT04oKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19NQk9YX1dSSVRFX1JFT1JERVIpIHx8CiAJICAgICAgIHRwLT53cml0ZTMyX3R4X21ib3ggPT0gdGczX3dyaXRlX2luZGlyZWN0X21ib3gpOwogCi0JcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIiVzOiBUaGUgc3lzdGVtIG1heSBiZSByZS1vcmRlcmluZyBtZW1vcnktIgotCSAgICAgICAibWFwcGVkIEkvTyBjeWNsZXMgdG8gdGhlIG5ldHdvcmsgZGV2aWNlLCBhdHRlbXB0aW5nIHRvICIKLQkgICAgICAgInJlY292ZXIuIFBsZWFzZSByZXBvcnQgdGhlIHByb2JsZW0gdG8gdGhlIGRyaXZlciBtYWludGFpbmVyICIKLQkgICAgICAgImFuZCBpbmNsdWRlIHN5c3RlbSBjaGlwc2V0IGluZm9ybWF0aW9uLlxuIiwgdHAtPmRldi0+bmFtZSk7CisJbmV0ZGV2X3dhcm4odHAtPmRldiwgIlRoZSBzeXN0ZW0gbWF5IGJlIHJlLW9yZGVyaW5nIG1lbW9yeS1tYXBwZWQgSS9PIGN5Y2xlcyB0byB0aGUgbmV0d29yayBkZXZpY2UsIGF0dGVtcHRpbmcgdG8gcmVjb3ZlclxuIgorCQkgICAgIlBsZWFzZSByZXBvcnQgdGhlIHByb2JsZW0gdG8gdGhlIGRyaXZlciBtYWludGFpbmVyIGFuZCBpbmNsdWRlIHN5c3RlbSBjaGlwc2V0IGluZm9ybWF0aW9uLlxuIik7CiAKIAlzcGluX2xvY2soJnRwLT5sb2NrKTsKIAl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX1RYX1JFQ09WRVJZX1BFTkRJTkc7CkBAIC00NTM4LDYgKzQ1NDUsMTIgQEAKIAkJCSAgIHBjaV91bm1hcF9hZGRyKHNyY19tYXAsIG1hcHBpbmcpKTsKIAlkZXN0X2Rlc2MtPmFkZHJfaGkgPSBzcmNfZGVzYy0+YWRkcl9oaTsKIAlkZXN0X2Rlc2MtPmFkZHJfbG8gPSBzcmNfZGVzYy0+YWRkcl9sbzsKKworCS8qIEVuc3VyZSB0aGF0IHRoZSB1cGRhdGUgdG8gdGhlIHNrYiBoYXBwZW5zIGFmdGVyIHRoZSBwaHlzaWNhbAorCSAqIGFkZHJlc3NlcyBoYXZlIGJlZW4gdHJhbnNmZXJyZWQgdG8gdGhlIG5ldyBCRCBsb2NhdGlvbi4KKwkgKi8KKwlzbXBfd21iKCk7CisKIAlzcmNfbWFwLT5za2IgPSBOVUxMOwogfQogCkBAIC00NjM4LDExICs0NjUxLDE2IEBACiAJCQlpZiAoc2tiX3NpemUgPCAwKQogCQkJCWdvdG8gZHJvcF9pdDsKIAotCQkJcmktPnNrYiA9IE5VTEw7Ci0KIAkJCXBjaV91bm1hcF9zaW5nbGUodHAtPnBkZXYsIGRtYV9hZGRyLCBza2Jfc2l6ZSwKIAkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKKwkJCS8qIEVuc3VyZSB0aGF0IHRoZSB1cGRhdGUgdG8gdGhlIHNrYiBoYXBwZW5zCisJCQkgKiBhZnRlciB0aGUgdXNhZ2Ugb2YgdGhlIG9sZCBETUEgbWFwcGluZy4KKwkJCSAqLworCQkJc21wX3dtYigpOworCisJCQlyaS0+c2tiID0gTlVMTDsKKwogCQkJc2tiX3B1dChza2IsIGxlbik7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqY29weV9za2I7CkBAIC00NzE5LDcgKzQ3MzcsNyBAQAogCXR3MzJfcnhfbWJveCh0bmFwaS0+Y29uc21ib3gsIHN3X2lkeCk7CiAKIAkvKiBSZWZpbGwgUlggcmluZyhzKS4gKi8KLQlpZiAoISh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX0VOQUJMRV9SU1MpIHx8IHRuYXBpID09ICZ0cC0+bmFwaVsxXSkgeworCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX1JTUykpIHsKIAkJaWYgKHdvcmtfbWFzayAmIFJYRF9PUEFRVUVfUklOR19TVEQpIHsKIAkJCXRwci0+cnhfc3RkX3Byb2RfaWR4ID0gc3RkX3Byb2RfaWR4ICUgVEczX1JYX1JJTkdfU0laRTsKIAkJCXR3MzJfcnhfbWJveChURzNfUlhfU1REX1BST0RfSURYX1JFRywKQEAgLTQ3NDEsNyArNDc1OSw4IEBACiAJCXRwci0+cnhfc3RkX3Byb2RfaWR4ID0gc3RkX3Byb2RfaWR4ICUgVEczX1JYX1JJTkdfU0laRTsKIAkJdHByLT5yeF9qbWJfcHJvZF9pZHggPSBqbWJfcHJvZF9pZHggJSBURzNfUlhfSlVNQk9fUklOR19TSVpFOwogCi0JCW5hcGlfc2NoZWR1bGUoJnRwLT5uYXBpWzFdLm5hcGkpOworCQlpZiAodG5hcGkgIT0gJnRwLT5uYXBpWzFdKQorCQkJbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGlbMV0ubmFwaSk7CiAJfQogCiAJcmV0dXJuIHJlY2VpdmVkOwpAQCAtNDc3MywxMiArNDc5MiwxMiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgdGczX3J4X3Byb2RyaW5nX3hmZXIoc3RydWN0IHRnMyAqdHAsCi0JCQkJIHN0cnVjdCB0ZzNfcnhfcHJvZHJpbmdfc2V0ICpkcHIsCi0JCQkJIHN0cnVjdCB0ZzNfcnhfcHJvZHJpbmdfc2V0ICpzcHIpCitzdGF0aWMgaW50IHRnM19yeF9wcm9kcmluZ194ZmVyKHN0cnVjdCB0ZzMgKnRwLAorCQkJCXN0cnVjdCB0ZzNfcnhfcHJvZHJpbmdfc2V0ICpkcHIsCisJCQkJc3RydWN0IHRnM19yeF9wcm9kcmluZ19zZXQgKnNwcikKIHsKIAl1MzIgc2ksIGRpLCBjcHljbnQsIHNyY19wcm9kX2lkeDsKLQlpbnQgaTsKKwlpbnQgaSwgZXJyID0gMDsKIAogCXdoaWxlICgxKSB7CiAJCXNyY19wcm9kX2lkeCA9IHNwci0+cnhfc3RkX3Byb2RfaWR4OwpAQCAtNDgwMSw2ICs0ODIwLDIzIEBACiAJCXNpID0gc3ByLT5yeF9zdGRfY29uc19pZHg7CiAJCWRpID0gZHByLT5yeF9zdGRfcHJvZF9pZHg7CiAKKwkJZm9yIChpID0gZGk7IGkgPCBkaSArIGNweWNudDsgaSsrKSB7CisJCQlpZiAoZHByLT5yeF9zdGRfYnVmZmVyc1tpXS5za2IpIHsKKwkJCQljcHljbnQgPSBpIC0gZGk7CisJCQkJZXJyID0gLUVOT1NQQzsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmICghY3B5Y250KQorCQkJYnJlYWs7CisKKwkJLyogRW5zdXJlIHRoYXQgdXBkYXRlcyB0byB0aGUgcnhfc3RkX2J1ZmZlcnMgcmluZyBhbmQgdGhlCisJCSAqIHNoYWRvd2VkIGhhcmR3YXJlIHByb2R1Y2VyIHJpbmcgZnJvbSB0ZzNfcmVjeWNsZV9za2IoKSBhcmUKKwkJICogb3JkZXJlZCBjb3JyZWN0bHkgV1JUIHRoZSBza2IgY2hlY2sgYWJvdmUuCisJCSAqLworCQlzbXBfcm1iKCk7CisKIAkJbWVtY3B5KCZkcHItPnJ4X3N0ZF9idWZmZXJzW2RpXSwKIAkJICAgICAgICZzcHItPnJ4X3N0ZF9idWZmZXJzW3NpXSwKIAkJICAgICAgIGNweWNudCAqIHNpemVvZihzdHJ1Y3QgcmluZ19pbmZvKSk7CkBAIC00ODQxLDYgKzQ4NzcsMjMgQEAKIAkJc2kgPSBzcHItPnJ4X2ptYl9jb25zX2lkeDsKIAkJZGkgPSBkcHItPnJ4X2ptYl9wcm9kX2lkeDsKIAorCQlmb3IgKGkgPSBkaTsgaSA8IGRpICsgY3B5Y250OyBpKyspIHsKKwkJCWlmIChkcHItPnJ4X2ptYl9idWZmZXJzW2ldLnNrYikgeworCQkJCWNweWNudCA9IGkgLSBkaTsKKwkJCQllcnIgPSAtRU5PU1BDOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKCFjcHljbnQpCisJCQlicmVhazsKKworCQkvKiBFbnN1cmUgdGhhdCB1cGRhdGVzIHRvIHRoZSByeF9qbWJfYnVmZmVycyByaW5nIGFuZCB0aGUKKwkJICogc2hhZG93ZWQgaGFyZHdhcmUgcHJvZHVjZXIgcmluZyBmcm9tIHRnM19yZWN5Y2xlX3NrYigpIGFyZQorCQkgKiBvcmRlcmVkIGNvcnJlY3RseSBXUlQgdGhlIHNrYiBjaGVjayBhYm92ZS4KKwkJICovCisJCXNtcF9ybWIoKTsKKwogCQltZW1jcHkoJmRwci0+cnhfam1iX2J1ZmZlcnNbZGldLAogCQkgICAgICAgJnNwci0+cnhfam1iX2J1ZmZlcnNbc2ldLAogCQkgICAgICAgY3B5Y250ICogc2l6ZW9mKHN0cnVjdCByaW5nX2luZm8pKTsKQEAgLTQ4NTgsNiArNDkxMSw4IEBACiAJCWRwci0+cnhfam1iX3Byb2RfaWR4ID0gKGRwci0+cnhfam1iX3Byb2RfaWR4ICsgY3B5Y250KSAlCiAJCQkJICAgICAgIFRHM19SWF9KVU1CT19SSU5HX1NJWkU7CiAJfQorCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCB0ZzNfcG9sbF93b3JrKHN0cnVjdCB0ZzNfbmFwaSAqdG5hcGksIGludCB3b3JrX2RvbmUsIGludCBidWRnZXQpCkBAIC00ODc5LDI3ICs0OTM0LDI5IEBACiAJCXdvcmtfZG9uZSArPSB0ZzNfcngodG5hcGksIGJ1ZGdldCAtIHdvcmtfZG9uZSk7CiAKIAlpZiAoKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX1JTUykgJiYgdG5hcGkgPT0gJnRwLT5uYXBpWzFdKSB7Ci0JCWludCBpOwotCQl1MzIgc3RkX3Byb2RfaWR4ID0gdHAtPnByb2RyaW5nWzBdLnJ4X3N0ZF9wcm9kX2lkeDsKLQkJdTMyIGptYl9wcm9kX2lkeCA9IHRwLT5wcm9kcmluZ1swXS5yeF9qbWJfcHJvZF9pZHg7CisJCXN0cnVjdCB0ZzNfcnhfcHJvZHJpbmdfc2V0ICpkcHIgPSAmdHAtPnByb2RyaW5nWzBdOworCQlpbnQgaSwgZXJyID0gMDsKKwkJdTMyIHN0ZF9wcm9kX2lkeCA9IGRwci0+cnhfc3RkX3Byb2RfaWR4OworCQl1MzIgam1iX3Byb2RfaWR4ID0gZHByLT5yeF9qbWJfcHJvZF9pZHg7CiAKLQkJZm9yIChpID0gMjsgaSA8IHRwLT5pcnFfY250OyBpKyspCi0JCQl0ZzNfcnhfcHJvZHJpbmdfeGZlcih0cCwgdG5hcGktPnByb2RyaW5nLAotCQkJCQkgICAgIHRwLT5uYXBpW2ldLnByb2RyaW5nKTsKKwkJZm9yIChpID0gMTsgaSA8IHRwLT5pcnFfY250OyBpKyspCisJCQllcnIgfD0gdGczX3J4X3Byb2RyaW5nX3hmZXIodHAsIGRwciwKKwkJCQkJCSAgICB0cC0+bmFwaVtpXS5wcm9kcmluZyk7CiAKIAkJd21iKCk7CiAKLQkJaWYgKHN0ZF9wcm9kX2lkeCAhPSB0cC0+cHJvZHJpbmdbMF0ucnhfc3RkX3Byb2RfaWR4KSB7Ci0JCQl1MzIgbWJveCA9IFRHM19SWF9TVERfUFJPRF9JRFhfUkVHOwotCQkJdHczMl9yeF9tYm94KG1ib3gsIHRwLT5wcm9kcmluZ1swXS5yeF9zdGRfcHJvZF9pZHgpOwotCQl9CisJCWlmIChzdGRfcHJvZF9pZHggIT0gZHByLT5yeF9zdGRfcHJvZF9pZHgpCisJCQl0dzMyX3J4X21ib3goVEczX1JYX1NURF9QUk9EX0lEWF9SRUcsCisJCQkJICAgICBkcHItPnJ4X3N0ZF9wcm9kX2lkeCk7CiAKLQkJaWYgKGptYl9wcm9kX2lkeCAhPSB0cC0+cHJvZHJpbmdbMF0ucnhfam1iX3Byb2RfaWR4KSB7Ci0JCQl1MzIgbWJveCA9IFRHM19SWF9KTUJfUFJPRF9JRFhfUkVHOwotCQkJdHczMl9yeF9tYm94KG1ib3gsIHRwLT5wcm9kcmluZ1swXS5yeF9qbWJfcHJvZF9pZHgpOwotCQl9CisJCWlmIChqbWJfcHJvZF9pZHggIT0gZHByLT5yeF9qbWJfcHJvZF9pZHgpCisJCQl0dzMyX3J4X21ib3goVEczX1JYX0pNQl9QUk9EX0lEWF9SRUcsCisJCQkJICAgICBkcHItPnJ4X2ptYl9wcm9kX2lkeCk7CiAKIAkJbW1pb3diKCk7CisKKwkJaWYgKGVycikKKwkJCXR3MzJfZihIT1NUQ0NfTU9ERSwgdHAtPmNvYWxfbm93KTsKIAl9CiAKIAlyZXR1cm4gd29ya19kb25lOwpAQCAtNTIwMyw4ICs1MjYwLDcgQEAKIAogCWVyciA9IHRnM19pbml0X2h3KHRwLCByZXNldF9waHkpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiJXM6IEZhaWxlZCB0byByZS1pbml0aWFsaXplIGRldmljZSwgIgotCQkgICAgICAgImFib3J0aW5nLlxuIiwgdHAtPmRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIodHAtPmRldiwgIkZhaWxlZCB0byByZS1pbml0aWFsaXplIGRldmljZSwgYWJvcnRpbmdcbiIpOwogCQl0ZzNfaGFsdCh0cCwgUkVTRVRfS0lORF9TSFVURE9XTiwgMSk7CiAJCXRnM19mdWxsX3VubG9jayh0cCk7CiAJCWRlbF90aW1lcl9zeW5jKCZ0cC0+dGltZXIpOwpAQCAtNTI3NywxMCArNTMzMywxMCBAQAogCiBzdGF0aWMgdm9pZCB0ZzNfZHVtcF9zaG9ydF9zdGF0ZShzdHJ1Y3QgdGczICp0cCkKIHsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJERUJVRzogTUFDX1RYX1NUQVRVU1slMDh4XSBNQUNfUlhfU1RBVFVTWyUwOHhdXG4iLAotCSAgICAgICB0cjMyKE1BQ19UWF9TVEFUVVMpLCB0cjMyKE1BQ19SWF9TVEFUVVMpKTsKLQlwcmludGsoS0VSTl9FUlIgUEZYICJERUJVRzogUkRNQUNfU1RBVFVTWyUwOHhdIFdETUFDX1NUQVRVU1slMDh4XVxuIiwKLQkgICAgICAgdHIzMihSRE1BQ19TVEFUVVMpLCB0cjMyKFdETUFDX1NUQVRVUykpOworCW5ldGRldl9lcnIodHAtPmRldiwgIkRFQlVHOiBNQUNfVFhfU1RBVFVTWyUwOHhdIE1BQ19SWF9TVEFUVVNbJTA4eF1cbiIsCisJCSAgIHRyMzIoTUFDX1RYX1NUQVRVUyksIHRyMzIoTUFDX1JYX1NUQVRVUykpOworCW5ldGRldl9lcnIodHAtPmRldiwgIkRFQlVHOiBSRE1BQ19TVEFUVVNbJTA4eF0gV0RNQUNfU1RBVFVTWyUwOHhdXG4iLAorCQkgICB0cjMyKFJETUFDX1NUQVRVUyksIHRyMzIoV0RNQUNfU1RBVFVTKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRnM190eF90aW1lb3V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC01Mjg4LDggKzUzNDQsNyBAQAogCXN0cnVjdCB0ZzMgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAogCWlmIChuZXRpZl9tc2dfdHhfZXJyKHRwKSkgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogdHJhbnNtaXQgdGltZWQgb3V0LCByZXNldHRpbmdcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgInRyYW5zbWl0IHRpbWVkIG91dCwgcmVzZXR0aW5nXG4iKTsKIAkJdGczX2R1bXBfc2hvcnRfc3RhdGUodHApOwogCX0KIApAQCAtNTQ1Myw4ICs1NTA4LDcgQEAKIAkJCW5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTsKIAogCQkJLyogVGhpcyBpcyBhIGhhcmQgZXJyb3IsIGxvZyBpdC4gKi8KLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBCVUchIFR4IFJpbmcgZnVsbCB3aGVuICIKLQkJCSAgICAgICAicXVldWUgYXdha2UhXG4iLCBkZXYtPm5hbWUpOworCQkJbmV0ZGV2X2VycihkZXYsICJCVUchIFR4IFJpbmcgZnVsbCB3aGVuIHF1ZXVlIGF3YWtlIVxuIik7CiAJCX0KIAkJcmV0dXJuIE5FVERFVl9UWF9CVVNZOwogCX0KQEAgLTU2NTcsOCArNTcxMSw3IEBACiAJCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7CiAKIAkJCS8qIFRoaXMgaXMgYSBoYXJkIGVycm9yLCBsb2cgaXQuICovCi0JCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiAiCi0JCQkgICAgICAgInF1ZXVlIGF3YWtlIVxuIiwgZGV2LT5uYW1lKTsKKwkJCW5ldGRldl9lcnIoZGV2LCAiQlVHISBUeCBSaW5nIGZ1bGwgd2hlbiBxdWV1ZSBhd2FrZSFcbiIpOwogCQl9CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CkBAIC02MDA1LDExICs2MDU4LDggQEAKIAkvKiBOb3cgYWxsb2NhdGUgZnJlc2ggU0tCcyBmb3IgZWFjaCByeCByaW5nLiAqLwogCWZvciAoaSA9IDA7IGkgPCB0cC0+cnhfcGVuZGluZzsgaSsrKSB7CiAJCWlmICh0ZzNfYWxsb2Nfcnhfc2tiKHRwLCB0cHIsIFJYRF9PUEFRVUVfUklOR19TVEQsIGkpIDwgMCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKLQkJCSAgICAgICAiJXM6IFVzaW5nIGEgc21hbGxlciBSWCBzdGFuZGFyZCByaW5nLCAiCi0JCQkgICAgICAgIm9ubHkgJWQgb3V0IG9mICVkIGJ1ZmZlcnMgd2VyZSBhbGxvY2F0ZWQgIgotCQkJICAgICAgICJzdWNjZXNzZnVsbHkuXG4iLAotCQkJICAgICAgIHRwLT5kZXYtPm5hbWUsIGksIHRwLT5yeF9wZW5kaW5nKTsKKwkJCW5ldGRldl93YXJuKHRwLT5kZXYsICJVc2luZyBhIHNtYWxsZXIgUlggc3RhbmRhcmQgcmluZywgb25seSAlZCBvdXQgb2YgJWQgYnVmZmVycyB3ZXJlIGFsbG9jYXRlZCBzdWNjZXNzZnVsbHlcbiIsCisJCQkJICAgIGksIHRwLT5yeF9wZW5kaW5nKTsKIAkJCWlmIChpID09IDApCiAJCQkJZ290byBpbml0ZmFpbDsKIAkJCXRwLT5yeF9wZW5kaW5nID0gaTsKQEAgLTYwMjIsMzEgKzYwNzIsMjggQEAKIAogCW1lbXNldCh0cHItPnJ4X2ptYiwgMCwgVEczX1JYX0pVTUJPX1JJTkdfQllURVMpOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19KVU1CT19SSU5HX0VOQUJMRSkgewotCQlmb3IgKGkgPSAwOyBpIDwgVEczX1JYX0pVTUJPX1JJTkdfU0laRTsgaSsrKSB7Ci0JCQlzdHJ1Y3QgdGczX3J4X2J1ZmZlcl9kZXNjICpyeGQ7CisJaWYgKCEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0pVTUJPX1JJTkdfRU5BQkxFKSkKKwkJZ290byBkb25lOwogCi0JCQlyeGQgPSAmdHByLT5yeF9qbWJbaV0uc3RkOwotCQkJcnhkLT5pZHhfbGVuID0gVEczX1JYX0pNQl9ETUFfU1ogPDwgUlhEX0xFTl9TSElGVDsKLQkJCXJ4ZC0+dHlwZV9mbGFncyA9IChSWERfRkxBR19FTkQgPDwgUlhEX0ZMQUdTX1NISUZUKSB8Ci0JCQkJUlhEX0ZMQUdfSlVNQk87Ci0JCQlyeGQtPm9wYXF1ZSA9IChSWERfT1BBUVVFX1JJTkdfSlVNQk8gfAotCQkJICAgICAgIChpIDw8IFJYRF9PUEFRVUVfSU5ERVhfU0hJRlQpKTsKLQkJfQorCWZvciAoaSA9IDA7IGkgPCBURzNfUlhfSlVNQk9fUklOR19TSVpFOyBpKyspIHsKKwkJc3RydWN0IHRnM19yeF9idWZmZXJfZGVzYyAqcnhkOwogCi0JCWZvciAoaSA9IDA7IGkgPCB0cC0+cnhfanVtYm9fcGVuZGluZzsgaSsrKSB7Ci0JCQlpZiAodGczX2FsbG9jX3J4X3NrYih0cCwgdHByLCBSWERfT1BBUVVFX1JJTkdfSlVNQk8sCi0JCQkJCSAgICAgaSkgPCAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlgKLQkJCQkgICAgICAgIiVzOiBVc2luZyBhIHNtYWxsZXIgUlgganVtYm8gcmluZywgIgotCQkJCSAgICAgICAib25seSAlZCBvdXQgb2YgJWQgYnVmZmVycyB3ZXJlICIKLQkJCQkgICAgICAgImFsbG9jYXRlZCBzdWNjZXNzZnVsbHkuXG4iLAotCQkJCSAgICAgICB0cC0+ZGV2LT5uYW1lLCBpLCB0cC0+cnhfanVtYm9fcGVuZGluZyk7Ci0JCQkJaWYgKGkgPT0gMCkKLQkJCQkJZ290byBpbml0ZmFpbDsKLQkJCQl0cC0+cnhfanVtYm9fcGVuZGluZyA9IGk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCXJ4ZCA9ICZ0cHItPnJ4X2ptYltpXS5zdGQ7CisJCXJ4ZC0+aWR4X2xlbiA9IFRHM19SWF9KTUJfRE1BX1NaIDw8IFJYRF9MRU5fU0hJRlQ7CisJCXJ4ZC0+dHlwZV9mbGFncyA9IChSWERfRkxBR19FTkQgPDwgUlhEX0ZMQUdTX1NISUZUKSB8CisJCQkJICBSWERfRkxBR19KVU1CTzsKKwkJcnhkLT5vcGFxdWUgPSAoUlhEX09QQVFVRV9SSU5HX0pVTUJPIHwKKwkJICAgICAgIChpIDw8IFJYRF9PUEFRVUVfSU5ERVhfU0hJRlQpKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPnJ4X2p1bWJvX3BlbmRpbmc7IGkrKykgeworCQlpZiAodGczX2FsbG9jX3J4X3NrYih0cCwgdHByLCBSWERfT1BBUVVFX1JJTkdfSlVNQk8sIGkpIDwgMCkgeworCQkJbmV0ZGV2X3dhcm4odHAtPmRldiwgIlVzaW5nIGEgc21hbGxlciBSWCBqdW1ibyByaW5nLCBvbmx5ICVkIG91dCBvZiAlZCBidWZmZXJzIHdlcmUgYWxsb2NhdGVkIHN1Y2Nlc3NmdWxseVxuIiwKKwkJCQkgICAgaSwgdHAtPnJ4X2p1bWJvX3BlbmRpbmcpOworCQkJaWYgKGkgPT0gMCkKKwkJCQlnb3RvIGluaXRmYWlsOworCQkJdHAtPnJ4X2p1bWJvX3BlbmRpbmcgPSBpOworCQkJYnJlYWs7CiAJCX0KIAl9CiAKQEAgLTYxNTksOCArNjIwNiw3IEBACiAJCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQl9CiAKLQkJaWYgKHRwLT5pcnFfY250ID09IDEgfHwgaiAhPSB0cC0+aXJxX2NudCAtIDEpCi0JCQl0ZzNfcnhfcHJvZHJpbmdfZnJlZSh0cCwgJnRwLT5wcm9kcmluZ1tqXSk7CisJCXRnM19yeF9wcm9kcmluZ19mcmVlKHRwLCAmdHAtPnByb2RyaW5nW2pdKTsKIAl9CiB9CiAKQEAgLTYxOTYsOSArNjI0MiwxMCBAQAogCQlpZiAodG5hcGktPnJ4X3JjYikKIAkJCW1lbXNldCh0bmFwaS0+cnhfcmNiLCAwLCBURzNfUlhfUkNCX1JJTkdfQllURVModHApKTsKIAotCQlpZiAoKHRwLT5pcnFfY250ID09IDEgfHwgaSAhPSB0cC0+aXJxX2NudCAtIDEpICYmCi0JCQl0ZzNfcnhfcHJvZHJpbmdfYWxsb2ModHAsICZ0cC0+cHJvZHJpbmdbaV0pKQorCQlpZiAodGczX3J4X3Byb2RyaW5nX2FsbG9jKHRwLCAmdHAtPnByb2RyaW5nW2ldKSkgeworCQkJdGczX2ZyZWVfcmluZ3ModHApOwogCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTYyNDUsNyArNjI5Miw3IEBACiAJCXRwLT5od19zdGF0cyA9IE5VTEw7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8ICh0cC0+aXJxX2NudCA9PSAxID8gMSA6IHRwLT5pcnFfY250IC0gMSk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgdHAtPmlycV9jbnQ7IGkrKykKIAkJdGczX3J4X3Byb2RyaW5nX2ZpbmkodHAsICZ0cC0+cHJvZHJpbmdbaV0pOwogfQogCkBAIC02MjU3LDcgKzYzMDQsNyBAQAogewogCWludCBpOwogCi0JZm9yIChpID0gMDsgaSA8ICh0cC0+aXJxX2NudCA9PSAxID8gMSA6IHRwLT5pcnFfY250IC0gMSk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCB0cC0+aXJxX2NudDsgaSsrKSB7CiAJCWlmICh0ZzNfcnhfcHJvZHJpbmdfaW5pdCh0cCwgJnRwLT5wcm9kcmluZ1tpXSkpCiAJCQlnb3RvIGVycl9vdXQ7CiAJfQpAQCAtNjMyMiwxMCArNjM2OSw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JCWlmICh0cC0+aXJxX2NudCA9PSAxKQotCQkJdG5hcGktPnByb2RyaW5nID0gJnRwLT5wcm9kcmluZ1swXTsKLQkJZWxzZSBpZiAoaSkKLQkJCXRuYXBpLT5wcm9kcmluZyA9ICZ0cC0+cHJvZHJpbmdbaSAtIDFdOworCQl0bmFwaS0+cHJvZHJpbmcgPSAmdHAtPnByb2RyaW5nW2ldOwogCiAJCS8qCiAJCSAqIElmIG11bHRpdmVjdG9yIFJTUyBpcyBlbmFibGVkLCB2ZWN0b3IgMCBkb2VzIG5vdCBoYW5kbGUKQEAgLTYzODksOCArNjQzMyw3IEBACiAJfQogCiAJaWYgKGkgPT0gTUFYX1dBSVRfQ05UICYmICFzaWxlbnQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidGczX3N0b3BfYmxvY2sgdGltZWQgb3V0LCAiCi0JCSAgICAgICAib2ZzPSVseCBlbmFibGVfYml0PSV4XG4iLAorCQlwcl9lcnIoInRnM19zdG9wX2Jsb2NrIHRpbWVkIG91dCwgb2ZzPSVseCBlbmFibGVfYml0PSV4XG4iLAogCQkgICAgICAgb2ZzLCBlbmFibGVfYml0KTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtNjQzNyw5ICs2NDgwLDggQEAKIAkJCWJyZWFrOwogCX0KIAlpZiAoaSA+PSBNQVhfV0FJVF9DTlQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidGczX2Fib3J0X2h3IHRpbWVkIG91dCBmb3IgJXMsICIKLQkJICAgICAgICJUWF9NT0RFX0VOQUJMRSB3aWxsIG5vdCBjbGVhciBNQUNfVFhfTU9ERT0lMDh4XG4iLAotCQkgICAgICAgdHAtPmRldi0+bmFtZSwgdHIzMihNQUNfVFhfTU9ERSkpOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICIlcyB0aW1lZCBvdXQsIFRYX01PREVfRU5BQkxFIHdpbGwgbm90IGNsZWFyIE1BQ19UWF9NT0RFPSUwOHhcbiIsCisJCQkgICBfX2Z1bmNfXywgdHIzMihNQUNfVFhfTU9ERSkpOwogCQllcnIgfD0gLUVOT0RFVjsKIAl9CiAKQEAgLTY2NjAsOCArNjcwMiwxNCBAQAogCSAgICAhKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfTk9fRldBUkVfUkVQT1JURUQpKSB7CiAJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX05PX0ZXQVJFX1JFUE9SVEVEOwogCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogTm8gZmlybXdhcmUgcnVubmluZy5cbiIsCi0JCSAgICAgICB0cC0+ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2luZm8odHAtPmRldiwgIk5vIGZpcm13YXJlIHJ1bm5pbmdcbiIpOworCX0KKworCWlmICh0cC0+cGNpX2NoaXBfcmV2X2lkID09IENISVBSRVZfSURfNTc3NjVfQTApIHsKKwkJLyogVGhlIDU3NzY1IEEwIG5lZWRzIGEgbGl0dGxlIG1vcmUKKwkJICogdGltZSB0byBkbyBzb21lIGltcG9ydGFudCB3b3JrLgorCQkgKi8KKwkJbWRlbGF5KDEwKTsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTcwODIsMTAgKzcxMzAsOCBAQAogCX0KIAogCWlmIChpID49IDEwMDAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInRnM19yZXNldF9jcHUgdGltZWQgb3V0IGZvciAlcywgIgotCQkgICAgICAgImFuZCAlcyBDUFVcbiIsCi0JCSAgICAgICB0cC0+ZGV2LT5uYW1lLAotCQkgICAgICAgKG9mZnNldCA9PSBSWF9DUFVfQkFTRSA/ICJSWCIgOiAiVFgiKSk7CisJCW5ldGRldl9lcnIodHAtPmRldiwgIiVzIHRpbWVkIG91dCwgJXMgQ1BVXG4iLAorCQkJICAgX19mdW5jX18sIG9mZnNldCA9PSBSWF9DUFVfQkFTRSA/ICJSWCIgOiAiVFgiKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC03MTEwLDkgKzcxNTYsOCBAQAogCiAJaWYgKGNwdV9iYXNlID09IFRYX0NQVV9CQVNFICYmCiAJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidGczX2xvYWRfZmlybXdhcmVfY3B1OiBUcnlpbmcgdG8gbG9hZCAiCi0JCSAgICAgICAiVFggY3B1IGZpcm13YXJlIG9uICVzIHdoaWNoIGlzIDU3MDUuXG4iLAotCQkgICAgICAgdHAtPmRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIodHAtPmRldiwgIiVzOiBUcnlpbmcgdG8gbG9hZCBUWCBjcHUgZmlybXdhcmUgd2hpY2ggaXMgNTcwNVxuIiwKKwkJCSAgIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC03MTkxLDEwICs3MjM2LDggQEAKIAkJdWRlbGF5KDEwMDApOwogCX0KIAlpZiAoaSA+PSA1KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInRnM19sb2FkX2Zpcm13YXJlIGZhaWxzIGZvciAlcyAiCi0JCSAgICAgICAidG8gc2V0IFJYIENQVSBQQywgaXMgJTA4eCBzaG91bGQgYmUgJTA4eFxuIiwKLQkJICAgICAgIHRwLT5kZXYtPm5hbWUsIHRyMzIoUlhfQ1BVX0JBU0UgKyBDUFVfUEMpLAotCQkgICAgICAgaW5mby5md19iYXNlKTsKKwkJbmV0ZGV2X2Vycih0cC0+ZGV2LCAidGczX2xvYWRfZmlybXdhcmUgZmFpbHMgdG8gc2V0IFJYIENQVSBQQywgaXMgJTA4eCBzaG91bGQgYmUgJTA4eFxuIiwKKwkJCSAgIHRyMzIoUlhfQ1BVX0JBU0UgKyBDUFVfUEMpLCBpbmZvLmZ3X2Jhc2UpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJdHczMihSWF9DUFVfQkFTRSArIENQVV9TVEFURSwgMHhmZmZmZmZmZik7CkBAIC03MjU3LDEwICs3MzAwLDggQEAKIAkJdWRlbGF5KDEwMDApOwogCX0KIAlpZiAoaSA+PSA1KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggInRnM19sb2FkX3Rzb19maXJtd2FyZSBmYWlscyBmb3IgJXMgIgotCQkgICAgICAgInRvIHNldCBDUFUgUEMsIGlzICUwOHggc2hvdWxkIGJlICUwOHhcbiIsCi0JCSAgICAgICB0cC0+ZGV2LT5uYW1lLCB0cjMyKGNwdV9iYXNlICsgQ1BVX1BDKSwKLQkJICAgICAgIGluZm8uZndfYmFzZSk7CisJCW5ldGRldl9lcnIodHAtPmRldiwgIiVzIGZhaWxzIHRvIHNldCBDUFUgUEMsIGlzICUwOHggc2hvdWxkIGJlICUwOHhcbiIsCisJCQkgICBfX2Z1bmNfXywgdHIzMihjcHVfYmFzZSArIENQVV9QQyksIGluZm8uZndfYmFzZSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAl0dzMyKGNwdV9iYXNlICsgQ1BVX1NUQVRFLCAweGZmZmZmZmZmKTsKQEAgLTc0MzksMTAgKzc0ODAsMTMgQEAKIAkJZm9yIChpID0gMTsgaSA8IFRHM19JUlFfTUFYX1ZFQ1M7IGkrKykgewogCQkJdHAtPm5hcGlbaV0udHhfcHJvZCA9IDA7CiAJCQl0cC0+bmFwaVtpXS50eF9jb25zID0gMDsKLQkJCXR3MzJfbWFpbGJveCh0cC0+bmFwaVtpXS5wcm9kbWJveCwgMCk7CisJCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfVFNTKQorCQkJCXR3MzJfbWFpbGJveCh0cC0+bmFwaVtpXS5wcm9kbWJveCwgMCk7CiAJCQl0dzMyX3J4X21ib3godHAtPm5hcGlbaV0uY29uc21ib3gsIDApOwogCQkJdHczMl9tYWlsYm94X2YodHAtPm5hcGlbaV0uaW50X21ib3gsIDEpOwogCQl9CisJCWlmICghKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX1RTUykpCisJCQl0dzMyX21haWxib3godHAtPm5hcGlbMF0ucHJvZG1ib3gsIDApOwogCX0gZWxzZSB7CiAJCXRwLT5uYXBpWzBdLnR4X3Byb2QgPSAwOwogCQl0cC0+bmFwaVswXS50eF9jb25zID0gMDsKQEAgLTc1MjgsOCArNzU3Miw3IEBACiAJCXRnM19hYm9ydF9odyh0cCwgMSk7CiAJfQogCi0JaWYgKHJlc2V0X3BoeSAmJgotCSAgICAhKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfVVNFX1BIWUxJQikpCisJaWYgKHJlc2V0X3BoeSkKIAkJdGczX3BoeV9yZXNldCh0cCk7CiAKIAllcnIgPSB0ZzNfY2hpcF9yZXNldCh0cCk7CkBAIC03NTc0LDYgKzc2MTcsMjAgQEAKIAkJdHczMihURzNfUENJRV9MTktDVEwsIHZhbCB8IFRHM19QQ0lFX0xOS0NUTF9MMV9QTExfUERfRElTKTsKIAl9CiAKKwlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19MMVBMTFBEX0VOKSB7CisJCXUzMiBncmNfbW9kZSA9IHRyMzIoR1JDX01PREUpOworCisJCS8qIEFjY2VzcyB0aGUgbG93ZXIgMUsgb2YgUEwgUENJRSBibG9jayByZWdpc3RlcnMuICovCisJCXZhbCA9IGdyY19tb2RlICYgfkdSQ19NT0RFX1BDSUVfUE9SVF9NQVNLOworCQl0dzMyKEdSQ19NT0RFLCB2YWwgfCBHUkNfTU9ERV9QQ0lFX1BMX1NFTCk7CisKKwkJdmFsID0gdHIzMihURzNfUENJRV9UTERMUExfUE9SVCArIFRHM19QQ0lFX1BMX0xPX1BIWUNUTDEpOworCQl0dzMyKFRHM19QQ0lFX1RMRExQTF9QT1JUICsgVEczX1BDSUVfUExfTE9fUEhZQ1RMMSwKKwkJICAgICB2YWwgfCBURzNfUENJRV9QTF9MT19QSFlDVEwxX0wxUExMUERfRU4pOworCisJCXR3MzIoR1JDX01PREUsIGdyY19tb2RlKTsKKwl9CisKIAkvKiBUaGlzIHdvcmtzIGFyb3VuZCBhbiBpc3N1ZSB3aXRoIEF0aGxvbiBjaGlwc2V0cyBvbgogCSAqIEIzIHRpZ29uMyBzaWxpY29uLiAgVGhpcyBiaXQgaGFzIG5vIGVmZmVjdCBvbiBhbnkKIAkgKiBvdGhlciByZXZpc2lvbi4gIEJ1dCBkbyBub3Qgc2V0IHRoaXMgb24gUENJIEV4cHJlc3MKQEAgLTc3MDUsOCArNzc2Miw3IEBACiAJCXVkZWxheSgxMCk7CiAJfQogCWlmIChpID49IDIwMDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAidGczX3Jlc2V0X2h3IGNhbm5vdCBlbmFibGUgQlVGTUdSIGZvciAlcy5cbiIsCi0JCSAgICAgICB0cC0+ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2Vycih0cC0+ZGV2LCAiJXMgY2Fubm90IGVuYWJsZSBCVUZNR1JcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC03NzcyLDcgKzc4MjgsNyBAQAogCQkJdHczMihSQ1ZEQkRJX0pVTUJPX0JEICsgVEczX0JESU5GT19NQVhMRU5fRkxBR1MsCiAJCQkgICAgIChSWF9KVU1CT19NQVhfU0laRSA8PCBCRElORk9fRkxBR1NfTUFYTEVOX1NISUZUKSB8CiAJCQkgICAgIEJESU5GT19GTEFHU19VU0VfRVhUX1JFQ1YpOwotCQkJaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKQorCQkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81NzE3KQogCQkJCXR3MzIoUkNWREJESV9KVU1CT19CRCArIFRHM19CRElORk9fTklDX0FERFIsCiAJCQkJICAgICBOSUNfU1JBTV9SWF9KVU1CT19CVUZGRVJfREVTQyk7CiAJCX0gZWxzZSB7CkBAIC03ODM0LDYgKzc4OTAsOSBAQAogCQkgICAgICBSRE1BQ19NT0RFX0ZJRk9VUlVOX0VOQUIgfCBSRE1BQ19NT0RFX0ZJRk9PUkVBRF9FTkFCIHwKIAkJICAgICAgUkRNQUNfTU9ERV9MTkdSRUFEX0VOQUIpOwogCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzE3KQorCQlyZG1hY19tb2RlIHw9IFJETUFDX01PREVfTVVMVF9ETUFfUkRfRElTOworCiAJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg0IHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzg1IHx8CiAJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc4MCkKQEAgLTgxNDMsNyArODIwMiwxMSBAQAogCS8qIFByZXZlbnQgY2hpcCBmcm9tIGRyb3BwaW5nIGZyYW1lcyB3aGVuIGZsb3cgY29udHJvbAogCSAqIGlzIGVuYWJsZWQuCiAJICovCi0JdHczMl9mKE1BQ19MT1dfV01BUktfTUFYX1JYX0ZSQU1FLCAyKTsKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1KQorCQl2YWwgPSAxOworCWVsc2UKKwkJdmFsID0gMjsKKwl0dzMyX2YoTUFDX0xPV19XTUFSS19NQVhfUlhfRlJBTUUsIHZhbCk7CiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDQgJiYKIAkgICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUEhZX1NFUkRFUykpIHsKQEAgLTg1NjIsMTAgKzg2MjUsOCBAQAogCQlyZXR1cm4gZXJyOwogCiAJLyogTVNJIHRlc3QgZmFpbGVkLCBnbyBiYWNrIHRvIElOVHggbW9kZSAqLwotCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogTm8gaW50ZXJydXB0IHdhcyBnZW5lcmF0ZWQgdXNpbmcgTVNJLCAiCi0JICAgICAgICJzd2l0Y2hpbmcgdG8gSU5UeCBtb2RlLiBQbGVhc2UgcmVwb3J0IHRoaXMgZmFpbHVyZSB0byAiCi0JICAgICAgICJ0aGUgUENJIG1haW50YWluZXIgYW5kIGluY2x1ZGUgc3lzdGVtIGNoaXBzZXQgaW5mb3JtYXRpb24uXG4iLAotCQkgICAgICAgdHAtPmRldi0+bmFtZSk7CisJbmV0ZGV2X3dhcm4odHAtPmRldiwgIk5vIGludGVycnVwdCB3YXMgZ2VuZXJhdGVkIHVzaW5nIE1TSSwgc3dpdGNoaW5nIHRvIElOVHggbW9kZVxuIgorCQkgICAgIlBsZWFzZSByZXBvcnQgdGhpcyBmYWlsdXJlIHRvIHRoZSBQQ0kgbWFpbnRhaW5lciBhbmQgaW5jbHVkZSBzeXN0ZW0gY2hpcHNldCBpbmZvcm1hdGlvblxuIik7CiAKIAlmcmVlX2lycSh0cC0+bmFwaVswXS5pcnFfdmVjLCAmdHAtPm5hcGlbMF0pOwogCkBAIC04NTk4LDggKzg2NTksOCBAQAogCWNvbnN0IF9fYmUzMiAqZndfZGF0YTsKIAogCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZ0cC0+ZncsIHRwLT5md19uZWVkZWQsICZ0cC0+cGRldi0+ZGV2KSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBcIiVzXCJcbiIsCi0JCSAgICAgICB0cC0+ZGV2LT5uYW1lLCB0cC0+ZndfbmVlZGVkKTsKKwkJbmV0ZGV2X2Vycih0cC0+ZGV2LCAiRmFpbGVkIHRvIGxvYWQgZmlybXdhcmUgXCIlc1wiXG4iLAorCQkJICAgdHAtPmZ3X25lZWRlZCk7CiAJCXJldHVybiAtRU5PRU5UOwogCX0KIApAQCAtODYxMiw4ICs4NjczLDggQEAKIAogCXRwLT5md19sZW4gPSBiZTMyX3RvX2NwdShmd19kYXRhWzJdKTsJLyogaW5jbHVkZXMgYnNzICovCiAJaWYgKHRwLT5md19sZW4gPCAodHAtPmZ3LT5zaXplIC0gMTIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGJvZ3VzIGxlbmd0aCAlZCBpbiBcIiVzXCJcbiIsCi0JCSAgICAgICB0cC0+ZGV2LT5uYW1lLCB0cC0+ZndfbGVuLCB0cC0+ZndfbmVlZGVkKTsKKwkJbmV0ZGV2X2Vycih0cC0+ZGV2LCAiYm9ndXMgbGVuZ3RoICVkIGluIFwiJXNcIlxuIiwKKwkJCSAgIHRwLT5md19sZW4sIHRwLT5md19uZWVkZWQpOwogCQlyZWxlYXNlX2Zpcm13YXJlKHRwLT5mdyk7CiAJCXRwLT5mdyA9IE5VTEw7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtODY1MSw5ICs4NzEyLDggQEAKIAkJCXJldHVybiBmYWxzZTsKIAkJaWYgKHBjaV9lbmFibGVfbXNpeCh0cC0+cGRldiwgbXNpeF9lbnQsIHJjKSkKIAkJCXJldHVybiBmYWxzZTsKLQkJcHJpbnRrKEtFUk5fTk9USUNFCi0JCSAgICAgICAiJXM6IFJlcXVlc3RlZCAlZCBNU0ktWCB2ZWN0b3JzLCByZWNlaXZlZCAlZFxuIiwKLQkJICAgICAgIHRwLT5kZXYtPm5hbWUsIHRwLT5pcnFfY250LCByYyk7CisJCW5ldGRldl9ub3RpY2UodHAtPmRldiwgIlJlcXVlc3RlZCAlZCBNU0ktWCB2ZWN0b3JzLCByZWNlaXZlZCAlZFxuIiwKKwkJCSAgICAgIHRwLT5pcnFfY250LCByYyk7CiAJCXRwLT5pcnFfY250ID0gcmM7CiAJfQogCkBAIC04Njc4LDggKzg3MzgsNyBAQAogCQkvKiBBbGwgTVNJIHN1cHBvcnRpbmcgY2hpcHMgc2hvdWxkIHN1cHBvcnQgdGFnZ2VkCiAJCSAqIHN0YXR1cy4gIEFzc2VydCB0aGF0IHRoaXMgaXMgdGhlIGNhc2UuCiAJCSAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HIFBGWCAiJXM6IE1TSSB3aXRob3V0IFRBR0dFRD8gIgotCQkgICAgICAgIk5vdCB1c2luZyBNU0kuXG4iLCB0cC0+ZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X3dhcm4odHAtPmRldiwgIk1TSSB3aXRob3V0IFRBR0dFRD8gTm90IHVzaW5nIE1TSVxuIik7CiAJCWdvdG8gZGVmY2ZnOwogCX0KIApAQCAtODcyNCwxMiArODc4MywxMCBAQAogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9IGVsc2UgaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRTTyBjYXBhYmlsaXR5IGRpc2FibGVkLlxuIiwKLQkJCSAgICAgICB0cC0+ZGV2LT5uYW1lKTsKKwkJCW5ldGRldl93YXJuKHRwLT5kZXYsICJUU08gY2FwYWJpbGl0eSBkaXNhYmxlZFxuIik7CiAJCQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfVFNPX0NBUEFCTEU7CiAJCX0gZWxzZSBpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1RTT19DQVBBQkxFKSkgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogVFNPIGNhcGFiaWxpdHkgcmVzdG9yZWQuXG4iLAotCQkJICAgICAgIHRwLT5kZXYtPm5hbWUpOworCQkJbmV0ZGV2X25vdGljZSh0cC0+ZGV2LCAiVFNPIGNhcGFiaWxpdHkgcmVzdG9yZWRcbiIpOwogCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfVFNPX0NBUEFCTEU7CiAJCX0KIAl9CkBAIC05Mzk1LDIxICs5NDUyLDE4IEBACiAJfSBlbHNlIGlmIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB7CiAJCS8qIEFjY2VwdCBhbGwgbXVsdGljYXN0LiAqLwogCQl0ZzNfc2V0X211bHRpICh0cCwgMSk7Ci0JfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50IDwgMSkgeworCX0gZWxzZSBpZiAobmV0ZGV2X21jX2VtcHR5KGRldikpIHsKIAkJLyogUmVqZWN0IGFsbCBtdWx0aWNhc3QuICovCiAJCXRnM19zZXRfbXVsdGkgKHRwLCAwKTsKIAl9IGVsc2UgewogCQkvKiBBY2NlcHQgb25lIG9yIG1vcmUgbXVsdGljYXN0KHMpLiAqLwogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKLQkJdW5zaWduZWQgaW50IGk7CiAJCXUzMiBtY19maWx0ZXJbNF0gPSB7IDAsIH07CiAJCXUzMiByZWdpZHg7CiAJCXUzMiBiaXQ7CiAJCXUzMiBjcmM7CiAKLQkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7Ci0JCSAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKLQorCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQkJY3JjID0gY2FsY19jcmMgKG1jbGlzdC0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKIAkJCWJpdCA9IH5jcmMgJiAweDdmOwogCQkJcmVnaWR4ID0gKGJpdCAmIDB4NjApID4+IDU7CkBAIC0xMDAwMSw1NiArMTAwNTUsNjYgQEAKIAlpbnQgZXJyID0gMDsKIAogCWlmICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1VTRV9QSFlMSUIpIHsKLQkJaWYgKCEodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfQ09OTkVDVEVEKSkKLQkJCXJldHVybiAtRUFHQUlOOworCQl1MzIgbmV3YWR2OworCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OwogCi0JCWlmIChlcGF1c2UtPmF1dG9uZWcpIHsKLQkJCXUzMiBuZXdhZHY7Ci0JCQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2OworCQlwaHlkZXYgPSB0cC0+bWRpb19idXMtPnBoeV9tYXBbVEczX1BIWV9NSUlfQUREUl07CiAKLQkJCXBoeWRldiA9IHRwLT5tZGlvX2J1cy0+cGh5X21hcFtURzNfUEhZX01JSV9BRERSXTsKKwkJaWYgKCEocGh5ZGV2LT5zdXBwb3J0ZWQgJiBTVVBQT1JURURfUGF1c2UpIHx8CisJCSAgICAoIShwaHlkZXYtPnN1cHBvcnRlZCAmIFNVUFBPUlRFRF9Bc3ltX1BhdXNlKSAmJgorCQkgICAgICgoZXBhdXNlLT5yeF9wYXVzZSAmJiAhZXBhdXNlLT50eF9wYXVzZSkgfHwKKwkJICAgICAgKCFlcGF1c2UtPnJ4X3BhdXNlICYmIGVwYXVzZS0+dHhfcGF1c2UpKSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkJaWYgKGVwYXVzZS0+cnhfcGF1c2UpIHsKLQkJCQlpZiAoZXBhdXNlLT50eF9wYXVzZSkKLQkJCQkJbmV3YWR2ID0gQURWRVJUSVNFRF9QYXVzZTsKLQkJCQllbHNlCi0JCQkJCW5ld2FkdiA9IEFEVkVSVElTRURfUGF1c2UgfAotCQkJCQkJIEFEVkVSVElTRURfQXN5bV9QYXVzZTsKLQkJCX0gZWxzZSBpZiAoZXBhdXNlLT50eF9wYXVzZSkgewotCQkJCW5ld2FkdiA9IEFEVkVSVElTRURfQXN5bV9QYXVzZTsKLQkJCX0gZWxzZQotCQkJCW5ld2FkdiA9IDA7CisJCXRwLT5saW5rX2NvbmZpZy5mbG93Y3RybCA9IDA7CisJCWlmIChlcGF1c2UtPnJ4X3BhdXNlKSB7CisJCQl0cC0+bGlua19jb25maWcuZmxvd2N0cmwgfD0gRkxPV19DVFJMX1JYOwogCi0JCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfQ09OTkVDVEVEKSB7Ci0JCQkJdTMyIG9sZGFkdiA9IHBoeWRldi0+YWR2ZXJ0aXNpbmcgJgotCQkJCQkgICAgIChBRFZFUlRJU0VEX1BhdXNlIHwKLQkJCQkJICAgICAgQURWRVJUSVNFRF9Bc3ltX1BhdXNlKTsKLQkJCQlpZiAob2xkYWR2ICE9IG5ld2FkdikgewotCQkJCQlwaHlkZXYtPmFkdmVydGlzaW5nICY9Ci0JCQkJCQl+KEFEVkVSVElTRURfUGF1c2UgfAotCQkJCQkJICBBRFZFUlRJU0VEX0FzeW1fUGF1c2UpOwotCQkJCQlwaHlkZXYtPmFkdmVydGlzaW5nIHw9IG5ld2FkdjsKLQkJCQkJZXJyID0gcGh5X3N0YXJ0X2FuZWcocGh5ZGV2KTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXRwLT5saW5rX2NvbmZpZy5hZHZlcnRpc2luZyAmPQotCQkJCQkJfihBRFZFUlRJU0VEX1BhdXNlIHwKLQkJCQkJCSAgQURWRVJUSVNFRF9Bc3ltX1BhdXNlKTsKLQkJCQl0cC0+bGlua19jb25maWcuYWR2ZXJ0aXNpbmcgfD0gbmV3YWR2OwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKGVwYXVzZS0+cnhfcGF1c2UpCi0JCQkJdHAtPmxpbmtfY29uZmlnLmZsb3djdHJsIHw9IEZMT1dfQ1RSTF9SWDsKLQkJCWVsc2UKLQkJCQl0cC0+bGlua19jb25maWcuZmxvd2N0cmwgJj0gfkZMT1dfQ1RSTF9SWDsKLQotCQkJaWYgKGVwYXVzZS0+dHhfcGF1c2UpCisJCQlpZiAoZXBhdXNlLT50eF9wYXVzZSkgewogCQkJCXRwLT5saW5rX2NvbmZpZy5mbG93Y3RybCB8PSBGTE9XX0NUUkxfVFg7Ci0JCQllbHNlCi0JCQkJdHAtPmxpbmtfY29uZmlnLmZsb3djdHJsICY9IH5GTE9XX0NUUkxfVFg7CisJCQkJbmV3YWR2ID0gQURWRVJUSVNFRF9QYXVzZTsKKwkJCX0gZWxzZQorCQkJCW5ld2FkdiA9IEFEVkVSVElTRURfUGF1c2UgfAorCQkJCQkgQURWRVJUSVNFRF9Bc3ltX1BhdXNlOworCQl9IGVsc2UgaWYgKGVwYXVzZS0+dHhfcGF1c2UpIHsKKwkJCXRwLT5saW5rX2NvbmZpZy5mbG93Y3RybCB8PSBGTE9XX0NUUkxfVFg7CisJCQluZXdhZHYgPSBBRFZFUlRJU0VEX0FzeW1fUGF1c2U7CisJCX0gZWxzZQorCQkJbmV3YWR2ID0gMDsKIAotCQkJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKKwkJaWYgKGVwYXVzZS0+YXV0b25lZykKKwkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfUEFVU0VfQVVUT05FRzsKKwkJZWxzZQorCQkJdHAtPnRnM19mbGFncyAmPSB+VEczX0ZMQUdfUEFVU0VfQVVUT05FRzsKKworCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfQ09OTkVDVEVEKSB7CisJCQl1MzIgb2xkYWR2ID0gcGh5ZGV2LT5hZHZlcnRpc2luZyAmCisJCQkJICAgICAoQURWRVJUSVNFRF9QYXVzZSB8IEFEVkVSVElTRURfQXN5bV9QYXVzZSk7CisJCQlpZiAob2xkYWR2ICE9IG5ld2FkdikgeworCQkJCXBoeWRldi0+YWR2ZXJ0aXNpbmcgJj0KKwkJCQkJfihBRFZFUlRJU0VEX1BhdXNlIHwKKwkJCQkJICBBRFZFUlRJU0VEX0FzeW1fUGF1c2UpOworCQkJCXBoeWRldi0+YWR2ZXJ0aXNpbmcgfD0gbmV3YWR2OworCQkJCWlmIChwaHlkZXYtPmF1dG9uZWcpIHsKKwkJCQkJLyoKKwkJCQkJICogQWx3YXlzIHJlbmVnb3RpYXRlIHRoZSBsaW5rIHRvCisJCQkJCSAqIGluZm9ybSBvdXIgbGluayBwYXJ0bmVyIG9mIG91cgorCQkJCQkgKiBmbG93IGNvbnRyb2wgc2V0dGluZ3MsIGV2ZW4gaWYgdGhlCisJCQkJCSAqIGZsb3cgY29udHJvbCBpcyBmb3JjZWQuICBMZXQKKwkJCQkJICogdGczX2FkanVzdF9saW5rKCkgZG8gdGhlIGZpbmFsCisJCQkJCSAqIGZsb3cgY29udHJvbCBzZXR1cC4KKwkJCQkJICovCisJCQkJCXJldHVybiBwaHlfc3RhcnRfYW5lZyhwaHlkZXYpOworCQkJCX0KKwkJCX0KKworCQkJaWYgKCFlcGF1c2UtPmF1dG9uZWcpCiAJCQkJdGczX3NldHVwX2Zsb3dfY29udHJvbCh0cCwgMCwgMCk7CisJCX0gZWxzZSB7CisJCQl0cC0+bGlua19jb25maWcub3JpZ19hZHZlcnRpc2luZyAmPQorCQkJCQl+KEFEVkVSVElTRURfUGF1c2UgfAorCQkJCQkgIEFEVkVSVElTRURfQXN5bV9QYXVzZSk7CisJCQl0cC0+bGlua19jb25maWcub3JpZ19hZHZlcnRpc2luZyB8PSBuZXdhZHY7CiAJCX0KIAl9IGVsc2UgewogCQlpbnQgaXJxX3N5bmMgPSAwOwpAQCAtMTA1ODQsOCArMTA2NDgsNyBAQAogCiBvdXQ6CiAJaWYgKG5ldGlmX21zZ19odyh0cCkpCi0JCXByaW50ayhLRVJOX0VSUiBQRlggIlJlZ2lzdGVyIHRlc3QgZmFpbGVkIGF0IG9mZnNldCAleFxuIiwKLQkJICAgICAgIG9mZnNldCk7CisJCXByX2VycigiUmVnaXN0ZXIgdGVzdCBmYWlsZWQgYXQgb2Zmc2V0ICV4XG4iLCBvZmZzZXQpOwogCXR3MzIob2Zmc2V0LCBzYXZlX3ZhbCk7CiAJcmV0dXJuIC1FSU87CiB9CkBAIC0xMDY0MCwxMiArMTA3MDMsMjcgQEAKIAkJeyAweDAwMDA4MDAwLCAweDAxMDAwfSwKIAkJeyAweDAwMDEwMDAwLCAweDAxMDAwfSwKIAkJeyAweGZmZmZmZmZmLCAweDAwMDAwfQorCX0sIG1lbV90YmxfNTcxN1tdID0geworCQl7IDB4MDAwMDAyMDAsIDB4MDAwMDh9LAorCQl7IDB4MDAwMTAwMDAsIDB4MGEwMDB9LAorCQl7IDB4MDAwMjAwMDAsIDB4MTNjMDB9LAorCQl7IDB4ZmZmZmZmZmYsIDB4MDAwMDB9CisJfSwgbWVtX3RibF81Nzc2NVtdID0geworCQl7IDB4MDAwMDAyMDAsIDB4MDAwMDh9LAorCQl7IDB4MDAwMDQwMDAsIDB4MDA4MDB9LAorCQl7IDB4MDAwMDYwMDAsIDB4MDk4MDB9LAorCQl7IDB4MDAwMTAwMDAsIDB4MGEwMDB9LAorCQl7IDB4ZmZmZmZmZmYsIDB4MDAwMDB9CiAJfTsKIAlzdHJ1Y3QgbWVtX2VudHJ5ICptZW1fdGJsOwogCWludCBlcnIgPSAwOwogCWludCBpOwogCi0JaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTc1NV9QTFVTKQorCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTcxNykKKwkJbWVtX3RibCA9IG1lbV90YmxfNTcxNzsKKwllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3NjUpCisJCW1lbV90YmwgPSBtZW1fdGJsXzU3NzY1OworCWVsc2UgaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfNTc1NV9QTFVTKQogCQltZW1fdGJsID0gbWVtX3RibF81NzU1OwogCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KQogCQltZW1fdGJsID0gbWVtX3RibF81OTA2OwpAQCAtMTA2NzgsMTIgKzEwNzU2LDEyIEBACiAJc3RydWN0IHRnM19uYXBpICp0bmFwaSwgKnJuYXBpOwogCXN0cnVjdCB0ZzNfcnhfcHJvZHJpbmdfc2V0ICp0cHIgPSAmdHAtPnByb2RyaW5nWzBdOwogCisJdG5hcGkgPSAmdHAtPm5hcGlbMF07CisJcm5hcGkgPSAmdHAtPm5hcGlbMF07CiAJaWYgKHRwLT5pcnFfY250ID4gMSkgewotCQl0bmFwaSA9ICZ0cC0+bmFwaVsxXTsKIAkJcm5hcGkgPSAmdHAtPm5hcGlbMV07Ci0JfSBlbHNlIHsKLQkJdG5hcGkgPSAmdHAtPm5hcGlbMF07Ci0JCXJuYXBpID0gJnRwLT5uYXBpWzBdOworCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfVFNTKQorCQkJdG5hcGkgPSAmdHAtPm5hcGlbMV07CiAJfQogCWNvYWxfbm93ID0gdG5hcGktPmNvYWxfbm93IHwgcm5hcGktPmNvYWxfbm93OwogCkBAIC0xMDcyMCw4ICsxMDc5OCwxMiBAQAogCiAJCW1hY19tb2RlID0gdHAtPm1hY19tb2RlICYgfk1BQ19NT0RFX1BPUlRfTU9ERV9NQVNLOwogCQlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfSVNfRkVUKSB7Ci0JCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpCi0JCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0ZFVF9QVEVTVCwgMHgxODAwKTsKKwkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19GRVRfUFRFU1QsCisJCQkJICAgICBNSUlfVEczX0ZFVF9QVEVTVF9GUkNfVFhfTElOSyB8CisJCQkJICAgICBNSUlfVEczX0ZFVF9QVEVTVF9GUkNfVFhfTE9DSyk7CisJCQkvKiBUaGUgd3JpdGUgbmVlZHMgdG8gYmUgZmx1c2hlZCBmb3IgdGhlIEFDMTMxICovCisJCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODUpCisJCQkJdGczX3JlYWRwaHkodHAsIE1JSV9URzNfRkVUX1BURVNULCAmdmFsKTsKIAkJCW1hY19tb2RlIHw9IE1BQ19NT0RFX1BPUlRfTU9ERV9NSUk7CiAJCX0gZWxzZQogCQkJbWFjX21vZGUgfD0gTUFDX01PREVfUE9SVF9NT0RFX0dNSUk7CkBAIC0xMDczMyw5ICsxMDgxNSwxMCBAQAogCQkJdHczMl9mKE1BQ19SWF9NT0RFLCB0cC0+cnhfbW9kZSk7CiAJCX0KIAkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzAwKSB7Ci0JCQlpZiAoKHRwLT5waHlfaWQgJiBQSFlfSURfTUFTSykgPT0gUEhZX0lEX0JDTTU0MDEpCisJCQl1MzIgbWFza2VkX3BoeV9pZCA9IHRwLT5waHlfaWQgJiBURzNfUEhZX0lEX01BU0s7CisJCQlpZiAobWFza2VkX3BoeV9pZCA9PSBURzNfUEhZX0lEX0JDTTU0MDEpCiAJCQkJbWFjX21vZGUgJj0gfk1BQ19NT0RFX0xJTktfUE9MQVJJVFk7Ci0JCQllbHNlIGlmICgodHAtPnBoeV9pZCAmIFBIWV9JRF9NQVNLKSA9PSBQSFlfSURfQkNNNTQxMSkKKwkJCWVsc2UgaWYgKG1hc2tlZF9waHlfaWQgPT0gVEczX1BIWV9JRF9CQ001NDExKQogCQkJCW1hY19tb2RlIHw9IE1BQ19NT0RFX0xJTktfUE9MQVJJVFk7CiAJCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRVhUX0NUUkwsCiAJCQkJICAgICBNSUlfVEczX0VYVF9DVFJMX0xOSzNfTEVEX01PREUpOwpAQCAtMTE2OTIsOCArMTE3NzUsOCBAQAogCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHX05WUkFNOwogCiAJCWlmICh0ZzNfbnZyYW1fbG9jayh0cCkpIHsKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICIlczogQ2Fubm90IGdldCBudmFybSBsb2NrLCAiCi0JCQkgICAgICAgInRnM19udnJhbV9pbml0IGZhaWxlZC5cbiIsIHRwLT5kZXYtPm5hbWUpOworCQkJbmV0ZGV2X3dhcm4odHAtPmRldiwgIkNhbm5vdCBnZXQgbnZyYW0gbG9jaywgJXMgZmFpbGVkXG4iLAorCQkJCSAgICBfX2Z1bmNfXyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJdGczX2VuYWJsZV9udnJhbV9hY2Nlc3ModHApOwpAQCAtMTE5OTEsNDUgKzEyMDc0LDcxIEBACiAJdTMyIHBoeV9pZDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3Vic3lzX3RibF9lbnQgc3Vic3lzX2lkX3RvX3BoeV9pZFtdID0geworc3RhdGljIHN0cnVjdCBzdWJzeXNfdGJsX2VudCBzdWJzeXNfaWRfdG9fcGh5X2lkW10gX19kZXZpbml0ZGF0YSA9IHsKIAkvKiBCcm9hZGNvbSBib2FyZHMuICovCi0JeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDE2NDQsIFBIWV9JRF9CQ001NDAxIH0sIC8qIEJDTTk1NzAwQTYgKi8KLQl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4MDAwMSwgUEhZX0lEX0JDTTU3MDEgfSwgLyogQkNNOTU3MDFBNSAqLwotCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHgwMDAyLCBQSFlfSURfQkNNODAwMiB9LCAvKiBCQ005NTcwMFQ2ICovCi0JeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDAwMDMsIDAgfSwJCSAgICAvKiBCQ005NTcwMEE5ICovCi0JeyBQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCAweDAwMDUsIFBIWV9JRF9CQ001NzAxIH0sIC8qIEJDTTk1NzAxVDEgKi8KLQl7IFBDSV9WRU5ET1JfSURfQlJPQURDT00sIDB4MDAwNiwgUEhZX0lEX0JDTTU3MDEgfSwgLyogQkNNOTU3MDFUOCAqLwotCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHgwMDA3LCAwIH0sCQkgICAgLyogQkNNOTU3MDFBNyAqLwotCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHgwMDA4LCBQSFlfSURfQkNNNTcwMSB9LCAvKiBCQ005NTcwMUExMCAqLwotCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg4MDA4LCBQSFlfSURfQkNNNTcwMSB9LCAvKiBCQ005NTcwMUExMiAqLwotCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHgwMDA5LCBQSFlfSURfQkNNNTcwMyB9LCAvKiBCQ005NTcwM0F4MSAqLwotCXsgUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgMHg4MDA5LCBQSFlfSURfQkNNNTcwMyB9LCAvKiBCQ005NTcwM0F4MiAqLworCXsgVEczUENJX1NVQlZFTkRPUl9JRF9CUk9BRENPTSwKKwkgIFRHM1BDSV9TVUJERVZJQ0VfSURfQlJPQURDT01fOTU3MDBBNiwgVEczX1BIWV9JRF9CQ001NDAxIH0sCisJeyBURzNQQ0lfU1VCVkVORE9SX0lEX0JST0FEQ09NLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF9CUk9BRENPTV85NTcwMUE1LCBURzNfUEhZX0lEX0JDTTU3MDEgfSwKKwl7IFRHM1BDSV9TVUJWRU5ET1JfSURfQlJPQURDT00sCisJICBURzNQQ0lfU1VCREVWSUNFX0lEX0JST0FEQ09NXzk1NzAwVDYsIFRHM19QSFlfSURfQkNNODAwMiB9LAorCXsgVEczUENJX1NVQlZFTkRPUl9JRF9CUk9BRENPTSwKKwkgIFRHM1BDSV9TVUJERVZJQ0VfSURfQlJPQURDT01fOTU3MDBBOSwgMCB9LAorCXsgVEczUENJX1NVQlZFTkRPUl9JRF9CUk9BRENPTSwKKwkgIFRHM1BDSV9TVUJERVZJQ0VfSURfQlJPQURDT01fOTU3MDFUMSwgVEczX1BIWV9JRF9CQ001NzAxIH0sCisJeyBURzNQQ0lfU1VCVkVORE9SX0lEX0JST0FEQ09NLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF9CUk9BRENPTV85NTcwMVQ4LCBURzNfUEhZX0lEX0JDTTU3MDEgfSwKKwl7IFRHM1BDSV9TVUJWRU5ET1JfSURfQlJPQURDT00sCisJICBURzNQQ0lfU1VCREVWSUNFX0lEX0JST0FEQ09NXzk1NzAxQTcsIDAgfSwKKwl7IFRHM1BDSV9TVUJWRU5ET1JfSURfQlJPQURDT00sCisJICBURzNQQ0lfU1VCREVWSUNFX0lEX0JST0FEQ09NXzk1NzAxQTEwLCBURzNfUEhZX0lEX0JDTTU3MDEgfSwKKwl7IFRHM1BDSV9TVUJWRU5ET1JfSURfQlJPQURDT00sCisJICBURzNQQ0lfU1VCREVWSUNFX0lEX0JST0FEQ09NXzk1NzAxQTEyLCBURzNfUEhZX0lEX0JDTTU3MDEgfSwKKwl7IFRHM1BDSV9TVUJWRU5ET1JfSURfQlJPQURDT00sCisJICBURzNQQ0lfU1VCREVWSUNFX0lEX0JST0FEQ09NXzk1NzAzQVgxLCBURzNfUEhZX0lEX0JDTTU3MDMgfSwKKwl7IFRHM1BDSV9TVUJWRU5ET1JfSURfQlJPQURDT00sCisJICBURzNQQ0lfU1VCREVWSUNFX0lEX0JST0FEQ09NXzk1NzAzQVgyLCBURzNfUEhZX0lEX0JDTTU3MDMgfSwKIAogCS8qIDNjb20gYm9hcmRzLiAqLwotCXsgUENJX1ZFTkRPUl9JRF8zQ09NLCAweDEwMDAsIFBIWV9JRF9CQ001NDAxIH0sIC8qIDNDOTk2VCAqLwotCXsgUENJX1ZFTkRPUl9JRF8zQ09NLCAweDEwMDYsIFBIWV9JRF9CQ001NzAxIH0sIC8qIDNDOTk2QlQgKi8KLQl7IFBDSV9WRU5ET1JfSURfM0NPTSwgMHgxMDA0LCAwIH0sCQkvKiAzQzk5NlNYICovCi0JeyBQQ0lfVkVORE9SX0lEXzNDT00sIDB4MTAwNywgUEhZX0lEX0JDTTU3MDEgfSwgLyogM0MxMDAwVCAqLwotCXsgUENJX1ZFTkRPUl9JRF8zQ09NLCAweDEwMDgsIFBIWV9JRF9CQ001NzAxIH0sIC8qIDNDOTQwQlIwMSAqLworCXsgVEczUENJX1NVQlZFTkRPUl9JRF8zQ09NLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF8zQ09NXzNDOTk2VCwgVEczX1BIWV9JRF9CQ001NDAxIH0sCisJeyBURzNQQ0lfU1VCVkVORE9SX0lEXzNDT00sCisJICBURzNQQ0lfU1VCREVWSUNFX0lEXzNDT01fM0M5OTZCVCwgVEczX1BIWV9JRF9CQ001NzAxIH0sCisJeyBURzNQQ0lfU1VCVkVORE9SX0lEXzNDT00sCisJICBURzNQQ0lfU1VCREVWSUNFX0lEXzNDT01fM0M5OTZTWCwgMCB9LAorCXsgVEczUENJX1NVQlZFTkRPUl9JRF8zQ09NLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF8zQ09NXzNDMTAwMFQsIFRHM19QSFlfSURfQkNNNTcwMSB9LAorCXsgVEczUENJX1NVQlZFTkRPUl9JRF8zQ09NLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF8zQ09NXzNDOTQwQlIwMSwgVEczX1BIWV9JRF9CQ001NzAxIH0sCiAKIAkvKiBERUxMIGJvYXJkcy4gKi8KLQl7IFBDSV9WRU5ET1JfSURfREVMTCwgMHgwMGQxLCBQSFlfSURfQkNNNTQwMSB9LCAvKiBWSVBFUiAqLwotCXsgUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAxMDYsIFBIWV9JRF9CQ001NDAxIH0sIC8qIEpBR1VBUiAqLwotCXsgUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAxMDksIFBIWV9JRF9CQ001NDExIH0sIC8qIE1FUkxPVCAqLwotCXsgUENJX1ZFTkRPUl9JRF9ERUxMLCAweDAxMGEsIFBIWV9JRF9CQ001NDExIH0sIC8qIFNMSU1fTUVSTE9UICovCisJeyBURzNQQ0lfU1VCVkVORE9SX0lEX0RFTEwsCisJICBURzNQQ0lfU1VCREVWSUNFX0lEX0RFTExfVklQRVIsIFRHM19QSFlfSURfQkNNNTQwMSB9LAorCXsgVEczUENJX1NVQlZFTkRPUl9JRF9ERUxMLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF9ERUxMX0pBR1VBUiwgVEczX1BIWV9JRF9CQ001NDAxIH0sCisJeyBURzNQQ0lfU1VCVkVORE9SX0lEX0RFTEwsCisJICBURzNQQ0lfU1VCREVWSUNFX0lEX0RFTExfTUVSTE9ULCBURzNfUEhZX0lEX0JDTTU0MTEgfSwKKwl7IFRHM1BDSV9TVUJWRU5ET1JfSURfREVMTCwKKwkgIFRHM1BDSV9TVUJERVZJQ0VfSURfREVMTF9TTElNX01FUkxPVCwgVEczX1BIWV9JRF9CQ001NDExIH0sCiAKIAkvKiBDb21wYXEgYm9hcmRzLiAqLwotCXsgUENJX1ZFTkRPUl9JRF9DT01QQVEsIDB4MDA3YywgUEhZX0lEX0JDTTU3MDEgfSwgLyogQkFOU0hFRSAqLwotCXsgUENJX1ZFTkRPUl9JRF9DT01QQVEsIDB4MDA5YSwgUEhZX0lEX0JDTTU3MDEgfSwgLyogQkFOU0hFRV8yICovCi0JeyBQQ0lfVkVORE9SX0lEX0NPTVBBUSwgMHgwMDdkLCAwIH0sCQkgIC8qIENIQU5HRUxJTkcgKi8KLQl7IFBDSV9WRU5ET1JfSURfQ09NUEFRLCAweDAwODUsIFBIWV9JRF9CQ001NzAxIH0sIC8qIE5DNzc4MCAqLwotCXsgUENJX1ZFTkRPUl9JRF9DT01QQVEsIDB4MDA5OSwgUEhZX0lEX0JDTTU3MDEgfSwgLyogTkM3NzgwXzIgKi8KKwl7IFRHM1BDSV9TVUJWRU5ET1JfSURfQ09NUEFRLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF9DT01QQVFfQkFOU0hFRSwgVEczX1BIWV9JRF9CQ001NzAxIH0sCisJeyBURzNQQ0lfU1VCVkVORE9SX0lEX0NPTVBBUSwKKwkgIFRHM1BDSV9TVUJERVZJQ0VfSURfQ09NUEFRX0JBTlNIRUVfMiwgVEczX1BIWV9JRF9CQ001NzAxIH0sCisJeyBURzNQQ0lfU1VCVkVORE9SX0lEX0NPTVBBUSwKKwkgIFRHM1BDSV9TVUJERVZJQ0VfSURfQ09NUEFRX0NIQU5HRUxJTkcsIDAgfSwKKwl7IFRHM1BDSV9TVUJWRU5ET1JfSURfQ09NUEFRLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF9DT01QQVFfTkM3NzgwLCBURzNfUEhZX0lEX0JDTTU3MDEgfSwKKwl7IFRHM1BDSV9TVUJWRU5ET1JfSURfQ09NUEFRLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF9DT01QQVFfTkM3NzgwXzIsIFRHM19QSFlfSURfQkNNNTcwMSB9LAogCiAJLyogSUJNIGJvYXJkcy4gKi8KLQl7IFBDSV9WRU5ET1JfSURfSUJNLCAweDAyODEsIDAgfSAvKiBJQk0/Pz8gKi8KKwl7IFRHM1BDSV9TVUJWRU5ET1JfSURfSUJNLAorCSAgVEczUENJX1NVQkRFVklDRV9JRF9JQk1fNTcwM1NBWDIsIDAgfQogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc3Vic3lzX3RibF9lbnQgKmxvb2t1cF9ieV9zdWJzeXMoc3RydWN0IHRnMyAqdHApCitzdGF0aWMgc3RydWN0IHN1YnN5c190YmxfZW50ICogX19kZXZpbml0IHRnM19sb29rdXBfYnlfc3Vic3lzKHN0cnVjdCB0ZzMgKnRwKQogewogCWludCBpOwogCkBAIC0xMjA3MCw3ICsxMjE3OSw3IEBACiAJdmFsID0gdHIzMihNRU1BUkJfTU9ERSk7CiAJdHczMihNRU1BUkJfTU9ERSwgdmFsIHwgTUVNQVJCX01PREVfRU5BQkxFKTsKIAotCXRwLT5waHlfaWQgPSBQSFlfSURfSU5WQUxJRDsKKwl0cC0+cGh5X2lkID0gVEczX1BIWV9JRF9JTlZBTElEOwogCXRwLT5sZWRfY3RybCA9IExFRF9DVFJMX01PREVfUEhZXzE7CiAKIAkvKiBBc3N1bWUgYW4gb25ib2FyZCBkZXZpY2UgYW5kIFdPTCBjYXBhYmxlIGJ5IGRlZmF1bHQuICAqLwpAQCAtMTIyNDQsOCArMTIzNTMsOCBAQAogCQkJCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfQVNQTV9XT1JLQVJPVU5EOwogCQl9CiAKLQkJaWYgKGNmZzQgJiBOSUNfU1JBTV9SR01JSV9TVERfSUJORF9ESVNBQkxFKQotCQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfUkdNSUlfU1REX0lCTkRfRElTQUJMRTsKKwkJaWYgKGNmZzQgJiBOSUNfU1JBTV9SR01JSV9JTkJBTkRfRElTQUJMRSkKKwkJCXRwLT50ZzNfZmxhZ3MzIHw9IFRHM19GTEczX1JHTUlJX0lOQkFORF9ESVNBQkxFOwogCQlpZiAoY2ZnNCAmIE5JQ19TUkFNX1JHTUlJX0VYVF9JQk5EX1JYX0VOKQogCQkJdHAtPnRnM19mbGFnczMgfD0gVEczX0ZMRzNfUkdNSUlfRVhUX0lCTkRfUlhfRU47CiAJCWlmIChjZmc0ICYgTklDX1NSQU1fUkdNSUlfRVhUX0lCTkRfVFhfRU4pCkBAIC0xMjMyMSw3ICsxMjQzMCw3IEBACiAJZXJyID0gMDsKIAlpZiAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSB8fAogCSAgICAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19FTkFCTEVfQVBFKSkgewotCQlod19waHlfaWQgPSBod19waHlfaWRfbWFza2VkID0gUEhZX0lEX0lOVkFMSUQ7CisJCWh3X3BoeV9pZCA9IGh3X3BoeV9pZF9tYXNrZWQgPSBURzNfUEhZX0lEX0lOVkFMSUQ7CiAJfSBlbHNlIHsKIAkJLyogTm93IHJlYWQgdGhlIHBoeXNpY2FsIFBIWV9JRCBmcm9tIHRoZSBjaGlwIGFuZCB2ZXJpZnkKIAkJICogdGhhdCBpdCBpcyBzYW5lLiAgSWYgaXQgZG9lc24ndCBsb29rIGdvb2QsIHdlIGZhbGwgYmFjawpAQCAtMTIzMzUsMTcgKzEyNDQ0LDE3IEBACiAJCWh3X3BoeV9pZCB8PSAoaHdfcGh5X2lkXzIgJiAweGZjMDApIDw8IDE2OwogCQlod19waHlfaWQgfD0gKGh3X3BoeV9pZF8yICYgMHgwM2ZmKSA8PCAgMDsKIAotCQlod19waHlfaWRfbWFza2VkID0gaHdfcGh5X2lkICYgUEhZX0lEX01BU0s7CisJCWh3X3BoeV9pZF9tYXNrZWQgPSBod19waHlfaWQgJiBURzNfUEhZX0lEX01BU0s7CiAJfQogCi0JaWYgKCFlcnIgJiYgS05PV05fUEhZX0lEKGh3X3BoeV9pZF9tYXNrZWQpKSB7CisJaWYgKCFlcnIgJiYgVEczX0tOT1dOX1BIWV9JRChod19waHlfaWRfbWFza2VkKSkgewogCQl0cC0+cGh5X2lkID0gaHdfcGh5X2lkOwotCQlpZiAoaHdfcGh5X2lkX21hc2tlZCA9PSBQSFlfSURfQkNNODAwMikKKwkJaWYgKGh3X3BoeV9pZF9tYXNrZWQgPT0gVEczX1BIWV9JRF9CQ004MDAyKQogCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUEhZX1NFUkRFUzsKIAkJZWxzZQogCQkJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1BIWV9TRVJERVM7CiAJfSBlbHNlIHsKLQkJaWYgKHRwLT5waHlfaWQgIT0gUEhZX0lEX0lOVkFMSUQpIHsKKwkJaWYgKHRwLT5waHlfaWQgIT0gVEczX1BIWV9JRF9JTlZBTElEKSB7CiAJCQkvKiBEbyBub3RoaW5nLCBwaHkgSUQgYWxyZWFkeSBzZXQgdXAgaW4KIAkJCSAqIHRnM19nZXRfZWVwcm9tX2h3X2NmZygpLgogCQkJICovCkBAIC0xMjM1NSwxMyArMTI0NjQsMTMgQEAKIAkJCS8qIE5vIGVlcHJvbSBzaWduYXR1cmU/ICBUcnkgdGhlIGhhcmRjb2RlZAogCQkJICogc3Vic3lzIGRldmljZSB0YWJsZS4KIAkJCSAqLwotCQkJcCA9IGxvb2t1cF9ieV9zdWJzeXModHApOworCQkJcCA9IHRnM19sb29rdXBfYnlfc3Vic3lzKHRwKTsKIAkJCWlmICghcCkKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAogCQkJdHAtPnBoeV9pZCA9IHAtPnBoeV9pZDsKIAkJCWlmICghdHAtPnBoeV9pZCB8fAotCQkJICAgIHRwLT5waHlfaWQgPT0gUEhZX0lEX0JDTTgwMDIpCisJCQkgICAgdHAtPnBoeV9pZCA9PSBURzNfUEhZX0lEX0JDTTgwMDIpCiAJCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUEhZX1NFUkRFUzsKIAkJfQogCX0KQEAgLTEyNDEzLDEzICsxMjUyMiwxMSBAQAogCX0KIAogc2tpcF9waHlfcmVzZXQ6Ci0JaWYgKCh0cC0+cGh5X2lkICYgUEhZX0lEX01BU0spID09IFBIWV9JRF9CQ001NDAxKSB7CisJaWYgKCh0cC0+cGh5X2lkICYgVEczX1BIWV9JRF9NQVNLKSA9PSBURzNfUEhZX0lEX0JDTTU0MDEpIHsKIAkJZXJyID0gdGczX2luaXRfNTQwMXBoeV9kc3AodHApOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKLQl9CiAKLQlpZiAoIWVyciAmJiAoKHRwLT5waHlfaWQgJiBQSFlfSURfTUFTSykgPT0gUEhZX0lEX0JDTTU0MDEpKSB7CiAJCWVyciA9IHRnM19pbml0XzU0MDFwaHlfZHNwKHRwKTsKIAl9CiAKQEAgLTEyNDQwLDcgKzEyNTQ3LDggQEAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfcmVhZF9wYXJ0bm8oc3RydWN0IHRnMyAqdHApCiB7CiAJdW5zaWduZWQgY2hhciB2cGRfZGF0YVtURzNfTlZNX1ZQRF9MRU5dOyAgIC8qIGluIGxpdHRsZS1lbmRpYW4gZm9ybWF0ICovCi0JdW5zaWduZWQgaW50IGk7CisJdW5zaWduZWQgaW50IGJsb2NrX2VuZCwgcm9zaXplLCBsZW47CisJaW50IGkgPSAwOwogCXUzMiBtYWdpYzsKIAogCWlmICgodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19OT19OVlJBTSkgfHwKQEAgLTEyNDYyLDcgKzEyNTcwLDcgQEAKIAkJfQogCX0gZWxzZSB7CiAJCXNzaXplX3QgY250OwotCQl1bnNpZ25lZCBpbnQgcG9zID0gMCwgaSA9IDA7CisJCXVuc2lnbmVkIGludCBwb3MgPSAwOwogCiAJCWZvciAoOyBwb3MgPCBURzNfTlZNX1ZQRF9MRU4gJiYgaSA8IDM7IGkrKywgcG9zICs9IGNudCkgewogCQkJY250ID0gcGNpX3JlYWRfdnBkKHRwLT5wZGV2LCBwb3MsCkBAIC0xMjQ3Nyw1MSArMTI1ODUsMzMgQEAKIAkJCWdvdG8gb3V0X25vdF9mb3VuZDsKIAl9CiAKLQkvKiBOb3cgcGFyc2UgYW5kIGZpbmQgdGhlIHBhcnQgbnVtYmVyLiAqLwotCWZvciAoaSA9IDA7IGkgPCBURzNfTlZNX1ZQRF9MRU4gLSAyOyApIHsKLQkJdW5zaWduZWQgY2hhciB2YWwgPSB2cGRfZGF0YVtpXTsKLQkJdW5zaWduZWQgaW50IGJsb2NrX2VuZDsKLQotCQlpZiAodmFsID09IDB4ODIgfHwgdmFsID09IDB4OTEpIHsKLQkJCWkgPSAoaSArIDMgKwotCQkJICAgICAodnBkX2RhdGFbaSArIDFdICsKLQkJCSAgICAgICh2cGRfZGF0YVtpICsgMl0gPDwgOCkpKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHZhbCAhPSAweDkwKQotCQkJZ290byBvdXRfbm90X2ZvdW5kOwotCi0JCWJsb2NrX2VuZCA9IChpICsgMyArCi0JCQkgICAgICh2cGRfZGF0YVtpICsgMV0gKwotCQkJICAgICAgKHZwZF9kYXRhW2kgKyAyXSA8PCA4KSkpOwotCQlpICs9IDM7Ci0KLQkJaWYgKGJsb2NrX2VuZCA+IFRHM19OVk1fVlBEX0xFTikKLQkJCWdvdG8gb3V0X25vdF9mb3VuZDsKLQotCQl3aGlsZSAoaSA8IChibG9ja19lbmQgLSAyKSkgewotCQkJaWYgKHZwZF9kYXRhW2kgKyAwXSA9PSAnUCcgJiYKLQkJCSAgICB2cGRfZGF0YVtpICsgMV0gPT0gJ04nKSB7Ci0JCQkJaW50IHBhcnRub19sZW4gPSB2cGRfZGF0YVtpICsgMl07Ci0KLQkJCQlpICs9IDM7Ci0JCQkJaWYgKHBhcnRub19sZW4gPiBURzNfQlBOX1NJWkUgfHwKLQkJCQkgICAgKHBhcnRub19sZW4gKyBpKSA+IFRHM19OVk1fVlBEX0xFTikKLQkJCQkJZ290byBvdXRfbm90X2ZvdW5kOwotCi0JCQkJbWVtY3B5KHRwLT5ib2FyZF9wYXJ0X251bWJlciwKLQkJCQkgICAgICAgJnZwZF9kYXRhW2ldLCBwYXJ0bm9fbGVuKTsKLQotCQkJCS8qIFN1Y2Nlc3MuICovCi0JCQkJcmV0dXJuOwotCQkJfQotCQkJaSArPSAzICsgdnBkX2RhdGFbaSArIDJdOwotCQl9Ci0KLQkJLyogUGFydCBudW1iZXIgbm90IGZvdW5kLiAqLworCWkgPSBwY2lfdnBkX2ZpbmRfdGFnKHZwZF9kYXRhLCAwLCBURzNfTlZNX1ZQRF9MRU4sCisJCQkgICAgIFBDSV9WUERfTFJEVF9ST19EQVRBKTsKKwlpZiAoaSA8IDApCiAJCWdvdG8gb3V0X25vdF9mb3VuZDsKLQl9CisKKwlyb3NpemUgPSBwY2lfdnBkX2xyZHRfc2l6ZSgmdnBkX2RhdGFbaV0pOworCWJsb2NrX2VuZCA9IGkgKyBQQ0lfVlBEX0xSRFRfVEFHX1NJWkUgKyByb3NpemU7CisJaSArPSBQQ0lfVlBEX0xSRFRfVEFHX1NJWkU7CisKKwlpZiAoYmxvY2tfZW5kID4gVEczX05WTV9WUERfTEVOKQorCQlnb3RvIG91dF9ub3RfZm91bmQ7CisKKwlpID0gcGNpX3ZwZF9maW5kX2luZm9fa2V5d29yZCh2cGRfZGF0YSwgaSwgcm9zaXplLAorCQkJCSAgICAgIFBDSV9WUERfUk9fS0VZV09SRF9QQVJUTk8pOworCWlmIChpIDwgMCkKKwkJZ290byBvdXRfbm90X2ZvdW5kOworCisJbGVuID0gcGNpX3ZwZF9pbmZvX2ZpZWxkX3NpemUoJnZwZF9kYXRhW2ldKTsKKworCWkgKz0gUENJX1ZQRF9JTkZPX0ZMRF9IRFJfU0laRTsKKwlpZiAobGVuID4gVEczX0JQTl9TSVpFIHx8CisJICAgIChsZW4gKyBpKSA+IFRHM19OVk1fVlBEX0xFTikKKwkJZ290byBvdXRfbm90X2ZvdW5kOworCisJbWVtY3B5KHRwLT5ib2FyZF9wYXJ0X251bWJlciwgJnZwZF9kYXRhW2ldLCBsZW4pOworCisJcmV0dXJuOwogCiBvdXRfbm90X2ZvdW5kOgogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikKQEAgLTEyNTM4LDggKzEyNjI4LDI0IEBACiAJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzgwICYmCiAJCSB0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3Nzg4KQogCQlzdHJjcHkodHAtPmJvYXJkX3BhcnRfbnVtYmVyLCAiQkNNNTc3ODgiKTsKLQllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3NjUpCisJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1ICYmCisJCSB0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3NzYxKQorCQlzdHJjcHkodHAtPmJvYXJkX3BhcnRfbnVtYmVyLCAiQkNNNTc3NjEiKTsKKwllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3NjUgJiYKKwkJIHRwLT5wZGV2LT5kZXZpY2UgPT0gVEczUENJX0RFVklDRV9USUdPTjNfNTc3NjUpCiAJCXN0cmNweSh0cC0+Ym9hcmRfcGFydF9udW1iZXIsICJCQ001Nzc2NSIpOworCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc2NSAmJgorCQkgdHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc4MSkKKwkJc3RyY3B5KHRwLT5ib2FyZF9wYXJ0X251bWJlciwgIkJDTTU3NzgxIik7CisJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1ICYmCisJCSB0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3Nzg1KQorCQlzdHJjcHkodHAtPmJvYXJkX3BhcnRfbnVtYmVyLCAiQkNNNTc3ODUiKTsKKwllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3NjUgJiYKKwkJIHRwLT5wZGV2LT5kZXZpY2UgPT0gVEczUENJX0RFVklDRV9USUdPTjNfNTc3OTEpCisJCXN0cmNweSh0cC0+Ym9hcmRfcGFydF9udW1iZXIsICJCQ001Nzc5MSIpOworCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc2NSAmJgorCQkgdHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc5NSkKKwkJc3RyY3B5KHRwLT5ib2FyZF9wYXJ0X251bWJlciwgIkJDTTU3Nzk1Iik7CiAJZWxzZQogCQlzdHJjcHkodHAtPmJvYXJkX3BhcnRfbnVtYmVyLCAibm9uZSIpOwogfQpAQCAtMTI2NDIsNiArMTI3NDgsMTIgQEAKIAljYXNlIFRHM19FRVBST01fU0JfUkVWSVNJT05fMzoKIAkJb2Zmc2V0ID0gVEczX0VFUFJPTV9TQl9GMVIzX0VESF9PRkY7CiAJCWJyZWFrOworCWNhc2UgVEczX0VFUFJPTV9TQl9SRVZJU0lPTl80OgorCQlvZmZzZXQgPSBURzNfRUVQUk9NX1NCX0YxUjRfRURIX09GRjsKKwkJYnJlYWs7CisJY2FzZSBURzNfRUVQUk9NX1NCX1JFVklTSU9OXzU6CisJCW9mZnNldCA9IFRHM19FRVBST01fU0JfRjFSNV9FREhfT0ZGOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXR1cm47CiAJfQpAQCAtMTMxMDIsNiArMTMyMTQsOCBAQAogCQkJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81Nzc4MF9BMCB8fAogCQkJICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81Nzc4MF9BMSkKIAkJCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19DTEtSRVFfQlVHOworCQl9IGVsc2UgaWYgKHRwLT5wY2lfY2hpcF9yZXZfaWQgPT0gQ0hJUFJFVl9JRF81NzE3X0EwKSB7CisJCQl0cC0+dGczX2ZsYWdzMyB8PSBURzNfRkxHM19MMVBMTFBEX0VOOwogCQl9CiAJfSBlbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NSkgewogCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9QQ0lfRVhQUkVTUzsKQEAgLTEzMTA5LDggKzEzMjIzLDcgQEAKIAkJICAgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfNTc4MF9DTEFTUykpIHsKIAkJdHAtPnBjaXhfY2FwID0gcGNpX2ZpbmRfY2FwYWJpbGl0eSh0cC0+cGRldiwgUENJX0NBUF9JRF9QQ0lYKTsKIAkJaWYgKCF0cC0+cGNpeF9jYXApIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBmaW5kIFBDSS1YICIKLQkJCQkJICAgICJjYXBhYmlsaXR5LCBhYm9ydGluZy5cbiIpOworCQkJcHJfZXJyKCJDYW5ub3QgZmluZCBQQ0ktWCBjYXBhYmlsaXR5LCBhYm9ydGluZ1xuIik7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCkBAIC0xMzI5MCw3ICsxMzQwMyw4IEBACiAJCXRwLT5ncmNfbG9jYWxfY3RybCB8PSBHUkNfTENMQ1RSTF9HUElPX09FMzsKIAogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3ODApCisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81Nzc4MCB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc3NjUpCiAJCXRwLT5ncmNfbG9jYWxfY3RybCB8PSBHUkNfTENMQ1RSTF9HUElPX1VBUlRfU0VMOwogCiAJaWYgKHRwLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9USUdPTjNfNTc2MSB8fApAQCAtMTMzMDYsOCArMTM0MjAsNyBAQAogCS8qIEZvcmNlIHRoZSBjaGlwIGludG8gRDAuICovCiAJZXJyID0gdGczX3NldF9wb3dlcl9zdGF0ZSh0cCwgUENJX0QwKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIiglcykgdHJhbnNpdGlvbiB0byBEMCBmYWlsZWRcbiIsCi0JCSAgICAgICBwY2lfbmFtZSh0cC0+cGRldikpOworCQlwcl9lcnIoIiglcykgdHJhbnNpdGlvbiB0byBEMCBmYWlsZWRcbiIsIHBjaV9uYW1lKHRwLT5wZGV2KSk7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC0xMzQ3NCwxMiArMTM1ODcsMTQgQEAKIAkgICAgICB0cC0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTNGIHx8CiAJICAgICAgdHAtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg3RikpIHx8CiAJICAgIHRwLT5wZGV2LT5kZXZpY2UgPT0gVEczUENJX0RFVklDRV9USUdPTjNfNTc3OTAgfHwKKwkgICAgdHAtPnBkZXYtPmRldmljZSA9PSBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc5MSB8fAorCSAgICB0cC0+cGRldi0+ZGV2aWNlID09IFRHM1BDSV9ERVZJQ0VfVElHT04zXzU3Nzk1IHx8CiAJICAgICh0cC0+dGczX2ZsYWdzMyAmIFRHM19GTEczX1BIWV9JU19GRVQpKQogCQl0cC0+dGczX2ZsYWdzIHw9IFRHM19GTEFHXzEwXzEwMF9PTkxZOwogCiAJZXJyID0gdGczX3BoeV9wcm9iZSh0cCk7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICIoJXMpIHBoeSBwcm9iZSBmYWlsZWQsIGVyciAlZFxuIiwKKwkJcHJfZXJyKCIoJXMpIHBoeSBwcm9iZSBmYWlsZWQsIGVyciAlZFxuIiwKIAkJICAgICAgIHBjaV9uYW1lKHRwLT5wZGV2KSwgZXJyKTsKIAkJLyogLi4uIGJ1dCBkbyBub3QgcmV0dXJuIGltbWVkaWF0ZWx5IC4uLiAqLwogCQl0ZzNfbWRpb19maW5pKHRwKTsKQEAgLTEzOTg5LDcgKzE0MTA0LDggQEAKIAkJLyogU2VuZCB0aGUgYnVmZmVyIHRvIHRoZSBjaGlwLiAqLwogCQlyZXQgPSB0ZzNfZG9fdGVzdF9kbWEodHAsIGJ1ZiwgYnVmX2RtYSwgVEVTVF9CVUZGRVJfU0laRSwgMSk7CiAJCWlmIChyZXQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAidGczX3Rlc3RfZG1hKCkgV3JpdGUgdGhlIGJ1ZmZlciBmYWlsZWQgJWRcbiIsIHJldCk7CisJCQlwcl9lcnIoInRnM190ZXN0X2RtYSgpIFdyaXRlIHRoZSBidWZmZXIgZmFpbGVkICVkXG4iLAorCQkJICAgICAgIHJldCk7CiAJCQlicmVhazsKIAkJfQogCkBAIC0xMzk5OSw3ICsxNDExNSw4IEBACiAJCQl1MzIgdmFsOwogCQkJdGczX3JlYWRfbWVtKHRwLCAweDIxMDAgKyAoaSo0KSwgJnZhbCk7CiAJCQlpZiAobGUzMl90b19jcHUodmFsKSAhPSBwW2ldKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIgIHRnM190ZXN0X2RtYSgpICBDYXJkIGJ1ZmZlciBjb3JydXB0ZWQgb24gd3JpdGUhICglZCAhPSAlZClcbiIsIHZhbCwgaSk7CisJCQkJcHJfZXJyKCIgIHRnM190ZXN0X2RtYSgpICBDYXJkIGJ1ZmZlciBjb3JydXB0ZWQgb24gd3JpdGUhICglZCAhPSAlZClcbiIsCisJCQkJICAgICAgIHZhbCwgaSk7CiAJCQkJLyogcmV0ID0gLUVOT0RFViBoZXJlPyAqLwogCQkJfQogCQkJcFtpXSA9IDA7CkBAIC0xNDAwOCw3ICsxNDEyNSw4IEBACiAJCS8qIE5vdyByZWFkIGl0IGJhY2suICovCiAJCXJldCA9IHRnM19kb190ZXN0X2RtYSh0cCwgYnVmLCBidWZfZG1hLCBURVNUX0JVRkZFUl9TSVpFLCAwKTsKIAkJaWYgKHJldCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJ0ZzNfdGVzdF9kbWEoKSBSZWFkIHRoZSBidWZmZXIgZmFpbGVkICVkXG4iLCByZXQpOworCQkJcHJfZXJyKCJ0ZzNfdGVzdF9kbWEoKSBSZWFkIHRoZSBidWZmZXIgZmFpbGVkICVkXG4iLAorCQkJICAgICAgIHJldCk7CiAKIAkJCWJyZWFrOwogCQl9CkBAIC0xNDAyNSw3ICsxNDE0Myw4IEBACiAJCQkJdHczMihURzNQQ0lfRE1BX1JXX0NUUkwsIHRwLT5kbWFfcndjdHJsKTsKIAkJCQlicmVhazsKIAkJCX0gZWxzZSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICJ0ZzNfdGVzdF9kbWEoKSBidWZmZXIgY29ycnVwdGVkIG9uIHJlYWQgYmFjayEgKCVkICE9ICVkKVxuIiwgcFtpXSwgaSk7CisJCQkJcHJfZXJyKCJ0ZzNfdGVzdF9kbWEoKSBidWZmZXIgY29ycnVwdGVkIG9uIHJlYWQgYmFjayEgKCVkICE9ICVkKVxuIiwKKwkJCQkgICAgICAgcFtpXSwgaSk7CiAJCQkJcmV0ID0gLUVOT0RFVjsKIAkJCQlnb3RvIG91dDsKIAkJCX0KQEAgLTE0MDg2LDkgKzE0MjA1LDIyIEBACiAKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCB0ZzNfaW5pdF9idWZtZ3JfY29uZmlnKHN0cnVjdCB0ZzMgKnRwKQogewotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUyAmJgotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcxNyAmJgotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTc3NjUpIHsKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MTcgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3NzY1KSB7CisJCXRwLT5idWZtZ3JfY29uZmlnLm1idWZfcmVhZF9kbWFfbG93X3dhdGVyID0KKwkJCURFRkFVTFRfTUJfUkRNQV9MT1dfV0FURVJfNTcwNTsKKwkJdHAtPmJ1Zm1ncl9jb25maWcubWJ1Zl9tYWNfcnhfbG93X3dhdGVyID0KKwkJCURFRkFVTFRfTUJfTUFDUlhfTE9XX1dBVEVSXzU3NzY1OworCQl0cC0+YnVmbWdyX2NvbmZpZy5tYnVmX2hpZ2hfd2F0ZXIgPQorCQkJREVGQVVMVF9NQl9ISUdIX1dBVEVSXzU3NzY1OworCisJCXRwLT5idWZtZ3JfY29uZmlnLm1idWZfcmVhZF9kbWFfbG93X3dhdGVyX2p1bWJvID0KKwkJCURFRkFVTFRfTUJfUkRNQV9MT1dfV0FURVJfNTcwNTsKKwkJdHAtPmJ1Zm1ncl9jb25maWcubWJ1Zl9tYWNfcnhfbG93X3dhdGVyX2p1bWJvID0KKwkJCURFRkFVTFRfTUJfTUFDUlhfTE9XX1dBVEVSX0pVTUJPXzU3NzY1OworCQl0cC0+YnVmbWdyX2NvbmZpZy5tYnVmX2hpZ2hfd2F0ZXJfanVtYm8gPQorCQkJREVGQVVMVF9NQl9ISUdIX1dBVEVSX0pVTUJPXzU3NzY1OworCX0gZWxzZSBpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpIHsKIAkJdHAtPmJ1Zm1ncl9jb25maWcubWJ1Zl9yZWFkX2RtYV9sb3dfd2F0ZXIgPQogCQkJREVGQVVMVF9NQl9SRE1BX0xPV19XQVRFUl81NzA1OwogCQl0cC0+YnVmbWdyX2NvbmZpZy5tYnVmX21hY19yeF9sb3dfd2F0ZXIgPQpAQCAtMTQxMzAsMjYgKzE0MjYyLDI4IEBACiAKIHN0YXRpYyBjaGFyICogX19kZXZpbml0IHRnM19waHlfc3RyaW5nKHN0cnVjdCB0ZzMgKnRwKQogewotCXN3aXRjaCAodHAtPnBoeV9pZCAmIFBIWV9JRF9NQVNLKSB7Ci0JY2FzZSBQSFlfSURfQkNNNTQwMDoJcmV0dXJuICI1NDAwIjsKLQljYXNlIFBIWV9JRF9CQ001NDAxOglyZXR1cm4gIjU0MDEiOwotCWNhc2UgUEhZX0lEX0JDTTU0MTE6CXJldHVybiAiNTQxMSI7Ci0JY2FzZSBQSFlfSURfQkNNNTcwMToJcmV0dXJuICI1NzAxIjsKLQljYXNlIFBIWV9JRF9CQ001NzAzOglyZXR1cm4gIjU3MDMiOwotCWNhc2UgUEhZX0lEX0JDTTU3MDQ6CXJldHVybiAiNTcwNCI7Ci0JY2FzZSBQSFlfSURfQkNNNTcwNToJcmV0dXJuICI1NzA1IjsKLQljYXNlIFBIWV9JRF9CQ001NzUwOglyZXR1cm4gIjU3NTAiOwotCWNhc2UgUEhZX0lEX0JDTTU3NTI6CXJldHVybiAiNTc1MiI7Ci0JY2FzZSBQSFlfSURfQkNNNTcxNDoJcmV0dXJuICI1NzE0IjsKLQljYXNlIFBIWV9JRF9CQ001NzgwOglyZXR1cm4gIjU3ODAiOwotCWNhc2UgUEhZX0lEX0JDTTU3NTU6CXJldHVybiAiNTc1NSI7Ci0JY2FzZSBQSFlfSURfQkNNNTc4NzoJcmV0dXJuICI1Nzg3IjsKLQljYXNlIFBIWV9JRF9CQ001Nzg0OglyZXR1cm4gIjU3ODQiOwotCWNhc2UgUEhZX0lEX0JDTTU3NTY6CXJldHVybiAiNTcyMi81NzU2IjsKLQljYXNlIFBIWV9JRF9CQ001OTA2OglyZXR1cm4gIjU5MDYiOwotCWNhc2UgUEhZX0lEX0JDTTU3NjE6CXJldHVybiAiNTc2MSI7Ci0JY2FzZSBQSFlfSURfQkNNNTcxNzoJcmV0dXJuICI1NzE3IjsKLQljYXNlIFBIWV9JRF9CQ004MDAyOglyZXR1cm4gIjgwMDIvc2VyZGVzIjsKKwlzd2l0Y2ggKHRwLT5waHlfaWQgJiBURzNfUEhZX0lEX01BU0spIHsKKwljYXNlIFRHM19QSFlfSURfQkNNNTQwMDoJcmV0dXJuICI1NDAwIjsKKwljYXNlIFRHM19QSFlfSURfQkNNNTQwMToJcmV0dXJuICI1NDAxIjsKKwljYXNlIFRHM19QSFlfSURfQkNNNTQxMToJcmV0dXJuICI1NDExIjsKKwljYXNlIFRHM19QSFlfSURfQkNNNTcwMToJcmV0dXJuICI1NzAxIjsKKwljYXNlIFRHM19QSFlfSURfQkNNNTcwMzoJcmV0dXJuICI1NzAzIjsKKwljYXNlIFRHM19QSFlfSURfQkNNNTcwNDoJcmV0dXJuICI1NzA0IjsKKwljYXNlIFRHM19QSFlfSURfQkNNNTcwNToJcmV0dXJuICI1NzA1IjsKKwljYXNlIFRHM19QSFlfSURfQkNNNTc1MDoJcmV0dXJuICI1NzUwIjsKKwljYXNlIFRHM19QSFlfSURfQkNNNTc1MjoJcmV0dXJuICI1NzUyIjsKKwljYXNlIFRHM19QSFlfSURfQkNNNTcxNDoJcmV0dXJuICI1NzE0IjsKKwljYXNlIFRHM19QSFlfSURfQkNNNTc4MDoJcmV0dXJuICI1NzgwIjsKKwljYXNlIFRHM19QSFlfSURfQkNNNTc1NToJcmV0dXJuICI1NzU1IjsKKwljYXNlIFRHM19QSFlfSURfQkNNNTc4NzoJcmV0dXJuICI1Nzg3IjsKKwljYXNlIFRHM19QSFlfSURfQkNNNTc4NDoJcmV0dXJuICI1Nzg0IjsKKwljYXNlIFRHM19QSFlfSURfQkNNNTc1NjoJcmV0dXJuICI1NzIyLzU3NTYiOworCWNhc2UgVEczX1BIWV9JRF9CQ001OTA2OglyZXR1cm4gIjU5MDYiOworCWNhc2UgVEczX1BIWV9JRF9CQ001NzYxOglyZXR1cm4gIjU3NjEiOworCWNhc2UgVEczX1BIWV9JRF9CQ001NzE4QzoJcmV0dXJuICI1NzE4QyI7CisJY2FzZSBURzNfUEhZX0lEX0JDTTU3MThTOglyZXR1cm4gIjU3MThTIjsKKwljYXNlIFRHM19QSFlfSURfQkNNNTc3NjU6CXJldHVybiAiNTc3NjUiOworCWNhc2UgVEczX1BIWV9JRF9CQ004MDAyOglyZXR1cm4gIjgwMDIvc2VyZGVzIjsKIAljYXNlIDA6CQkJcmV0dXJuICJzZXJkZXMiOwogCWRlZmF1bHQ6CQlyZXR1cm4gInVua25vd24iOwogCX0KQEAgLTE0MjkxLDcgKzE0NDI1LDYgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHRnM19pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7Ci0Jc3RhdGljIGludCB0ZzNfdmVyc2lvbl9wcmludGVkID0gMDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCB0ZzMgKnRwOwogCWludCBpLCBlcnIsIHBtX2NhcDsKQEAgLTE0Mjk5LDIwICsxNDQzMiwxNyBAQAogCWNoYXIgc3RyWzQwXTsKIAl1NjQgZG1hX21hc2ssIHBlcnNpc3RfZG1hX21hc2s7CiAKLQlpZiAodGczX3ZlcnNpb25fcHJpbnRlZCsrID09IDApCi0JCXByaW50ayhLRVJOX0lORk8gIiVzIiwgdmVyc2lvbik7CisJcHJpbnRrX29uY2UoS0VSTl9JTkZPICIlc1xuIiwgdmVyc2lvbik7CiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBlbmFibGUgUENJIGRldmljZSwgIgotCQkgICAgICAgImFib3J0aW5nLlxuIik7CisJCXByX2VycigiQ2Fubm90IGVuYWJsZSBQQ0kgZGV2aWNlLCBhYm9ydGluZ1xuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCiAJZXJyID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTU9EVUxFX05BTUUpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IG9idGFpbiBQQ0kgcmVzb3VyY2VzLCAiCi0JCSAgICAgICAiYWJvcnRpbmcuXG4iKTsKKwkJcHJfZXJyKCJDYW5ub3Qgb2J0YWluIFBDSSByZXNvdXJjZXMsIGFib3J0aW5nXG4iKTsKIAkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGRldjsKIAl9CiAKQEAgLTE0MzIxLDE1ICsxNDQ1MSwxNCBAQAogCS8qIEZpbmQgcG93ZXItbWFuYWdlbWVudCBjYXBhYmlsaXR5LiAqLwogCXBtX2NhcCA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9QTSk7CiAJaWYgKHBtX2NhcCA9PSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBmaW5kIFBvd2VyTWFuYWdlbWVudCBjYXBhYmlsaXR5LCAiCi0JCSAgICAgICAiYWJvcnRpbmcuXG4iKTsKKwkJcHJfZXJyKCJDYW5ub3QgZmluZCBQb3dlck1hbmFnZW1lbnQgY2FwYWJpbGl0eSwgYWJvcnRpbmdcbiIpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGVycl9vdXRfZnJlZV9yZXM7CiAJfQogCiAJZGV2ID0gYWxsb2NfZXRoZXJkZXZfbXEoc2l6ZW9mKCp0cCksIFRHM19JUlFfTUFYX1ZFQ1MpOwogCWlmICghZGV2KSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkV0aGVyZGV2IGFsbG9jIGZhaWxlZCwgYWJvcnRpbmcuXG4iKTsKKwkJcHJfZXJyKCJFdGhlcmRldiBhbGxvYyBmYWlsZWQsIGFib3J0aW5nXG4iKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBlcnJfb3V0X2ZyZWVfcmVzOwogCX0KQEAgLTE0Mzc5LDggKzE0NTA4LDcgQEAKIAogCXRwLT5yZWdzID0gcGNpX2lvcmVtYXBfYmFyKHBkZXYsIEJBUl8wKTsKIAlpZiAoIXRwLT5yZWdzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBtYXAgZGV2aWNlIHJlZ2lzdGVycywgIgotCQkgICAgICAgImFib3J0aW5nLlxuIik7CisJCW5ldGRldl9lcnIoZGV2LCAiQ2Fubm90IG1hcCBkZXZpY2UgcmVnaXN0ZXJzLCBhYm9ydGluZ1xuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dF9mcmVlX2RldjsKIAl9CkBAIC0xNDM5Niw4ICsxNDUyNCw3IEBACiAKIAllcnIgPSB0ZzNfZ2V0X2ludmFyaWFudHModHApOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUHJvYmxlbSBmZXRjaGluZyBpbnZhcmlhbnRzIG9mIGNoaXAsICIKLQkJICAgICAgICJhYm9ydGluZy5cbiIpOworCQluZXRkZXZfZXJyKGRldiwgIlByb2JsZW0gZmV0Y2hpbmcgaW52YXJpYW50cyBvZiBjaGlwLCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gZXJyX291dF9pb3VubWFwOwogCX0KIApAQCAtMTQ0MzIsOCArMTQ1NTksNyBAQAogCQkJZXJyID0gcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsCiAJCQkJCQkJICBwZXJzaXN0X2RtYV9tYXNrKTsKIAkJCWlmIChlcnIgPCAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiVW5hYmxlIHRvIG9idGFpbiA2NCBiaXQgIgotCQkJCSAgICAgICAiRE1BIGZvciBjb25zaXN0ZW50IGFsbG9jYXRpb25zXG4iKTsKKwkJCQluZXRkZXZfZXJyKGRldiwgIlVuYWJsZSB0byBvYnRhaW4gNjQgYml0IERNQSBmb3IgY29uc2lzdGVudCBhbGxvY2F0aW9uc1xuIik7CiAJCQkJZ290byBlcnJfb3V0X2lvdW5tYXA7CiAJCQl9CiAJCX0KQEAgLTE0NDQxLDggKzE0NTY3LDcgQEAKIAlpZiAoZXJyIHx8IGRtYV9tYXNrID09IERNQV9CSVRfTUFTSygzMikpIHsKIAkJZXJyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKIAkJaWYgKGVycikgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCAiCi0JCQkgICAgICAgImFib3J0aW5nLlxuIik7CisJCQluZXRkZXZfZXJyKGRldiwgIk5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvbiwgYWJvcnRpbmdcbiIpOwogCQkJZ290byBlcnJfb3V0X2lvdW5tYXA7CiAJCX0KIAl9CkBAIC0xNDQ5MSwxNiArMTQ2MTYsMTQgQEAKIAogCWVyciA9IHRnM19nZXRfZGV2aWNlX2FkZHJlc3ModHApOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ291bGQgbm90IG9idGFpbiB2YWxpZCBldGhlcm5ldCBhZGRyZXNzLCAiCi0JCSAgICAgICAiYWJvcnRpbmcuXG4iKTsKKwkJbmV0ZGV2X2VycihkZXYsICJDb3VsZCBub3Qgb2J0YWluIHZhbGlkIGV0aGVybmV0IGFkZHJlc3MsIGFib3J0aW5nXG4iKTsKIAkJZ290byBlcnJfb3V0X2lvdW5tYXA7CiAJfQogCiAJaWYgKHRwLT50ZzNfZmxhZ3MzICYgVEczX0ZMRzNfRU5BQkxFX0FQRSkgewogCQl0cC0+YXBlcmVncyA9IHBjaV9pb3JlbWFwX2JhcihwZGV2LCBCQVJfMik7CiAJCWlmICghdHAtPmFwZXJlZ3MpIHsKLQkJCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBtYXAgQVBFIHJlZ2lzdGVycywgIgotCQkJICAgICAgICJhYm9ydGluZy5cbiIpOworCQkJbmV0ZGV2X2VycihkZXYsICJDYW5ub3QgbWFwIEFQRSByZWdpc3RlcnMsIGFib3J0aW5nXG4iKTsKIAkJCWVyciA9IC1FTk9NRU07CiAJCQlnb3RvIGVycl9vdXRfaW91bm1hcDsKIAkJfQpAQCAtMTQ1MjQsNyArMTQ2NDcsNyBAQAogCiAJZXJyID0gdGczX3Rlc3RfZG1hKHRwKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkRNQSBlbmdpbmUgdGVzdCBmYWlsZWQsIGFib3J0aW5nLlxuIik7CisJCW5ldGRldl9lcnIoZGV2LCAiRE1BIGVuZ2luZSB0ZXN0IGZhaWxlZCwgYWJvcnRpbmdcbiIpOwogCQlnb3RvIGVycl9vdXRfYXBldW5tYXA7CiAJfQogCkBAIC0xNDU4NSw0NSArMTQ3MDgsMzkgQEAKIAogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2Fubm90IHJlZ2lzdGVyIG5ldCBkZXZpY2UsICIKLQkJICAgICAgICJhYm9ydGluZy5cbiIpOworCQluZXRkZXZfZXJyKGRldiwgIkNhbm5vdCByZWdpc3RlciBuZXQgZGV2aWNlLCBhYm9ydGluZ1xuIik7CiAJCWdvdG8gZXJyX291dF9hcGV1bm1hcDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogVGlnb24zIFtwYXJ0bm8oJXMpIHJldiAlMDR4XSAoJXMpIE1BQyBhZGRyZXNzICVwTVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLAotCSAgICAgICB0cC0+Ym9hcmRfcGFydF9udW1iZXIsCi0JICAgICAgIHRwLT5wY2lfY2hpcF9yZXZfaWQsCi0JICAgICAgIHRnM19idXNfc3RyaW5nKHRwLCBzdHIpLAotCSAgICAgICBkZXYtPmRldl9hZGRyKTsKKwluZXRkZXZfaW5mbyhkZXYsICJUaWdvbjMgW3BhcnRubyglcykgcmV2ICUwNHhdICglcykgTUFDIGFkZHJlc3MgJXBNXG4iLAorCQkgICAgdHAtPmJvYXJkX3BhcnRfbnVtYmVyLAorCQkgICAgdHAtPnBjaV9jaGlwX3Jldl9pZCwKKwkJICAgIHRnM19idXNfc3RyaW5nKHRwLCBzdHIpLAorCQkgICAgZGV2LT5kZXZfYWRkcik7CiAKIAlpZiAodHAtPnRnM19mbGFnczMgJiBURzNfRkxHM19QSFlfQ09OTkVDVEVEKSB7CiAJCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXY7CiAJCXBoeWRldiA9IHRwLT5tZGlvX2J1cy0+cGh5X21hcFtURzNfUEhZX01JSV9BRERSXTsKLQkJcHJpbnRrKEtFUk5fSU5GTwotCQkgICAgICAgIiVzOiBhdHRhY2hlZCBQSFkgZHJpdmVyIFslc10gKG1paV9idXM6cGh5X2FkZHI9JXMpXG4iLAotCQkgICAgICAgdHAtPmRldi0+bmFtZSwgcGh5ZGV2LT5kcnYtPm5hbWUsCi0JCSAgICAgICBkZXZfbmFtZSgmcGh5ZGV2LT5kZXYpKTsKKwkJbmV0ZGV2X2luZm8oZGV2LCAiYXR0YWNoZWQgUEhZIGRyaXZlciBbJXNdIChtaWlfYnVzOnBoeV9hZGRyPSVzKVxuIiwKKwkJCSAgICBwaHlkZXYtPmRydi0+bmFtZSwgZGV2X25hbWUoJnBoeWRldi0+ZGV2KSk7CiAJfSBlbHNlCi0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICIlczogYXR0YWNoZWQgUEhZIGlzICVzICglcyBFdGhlcm5ldCkgKFdpcmVTcGVlZFslZF0pXG4iLAotCQkgICAgICAgdHAtPmRldi0+bmFtZSwgdGczX3BoeV9zdHJpbmcodHApLAotCQkgICAgICAgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfMTBfMTAwX09OTFkpID8gIjEwLzEwMEJhc2UtVFgiIDoKLQkJCSgodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9BTllfU0VSREVTKSA/ICIxMDAwQmFzZS1TWCIgOgotCQkJICIxMC8xMDAvMTAwMEJhc2UtVCIpKSwKLQkJICAgICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX05PX0VUSF9XSVJFX1NQRUVEKSA9PSAwKTsKKwkJbmV0ZGV2X2luZm8oZGV2LCAiYXR0YWNoZWQgUEhZIGlzICVzICglcyBFdGhlcm5ldCkgKFdpcmVTcGVlZFslZF0pXG4iLAorCQkJICAgIHRnM19waHlfc3RyaW5nKHRwKSwKKwkJCSAgICAoKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR18xMF8xMDBfT05MWSkgPyAiMTAvMTAwQmFzZS1UWCIgOgorCQkJICAgICAoKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfQU5ZX1NFUkRFUykgPyAiMTAwMEJhc2UtU1giIDoKKwkJCSAgICAgICIxMC8xMDAvMTAwMEJhc2UtVCIpKSwKKwkJCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9OT19FVEhfV0lSRV9TUEVFRCkgPT0gMCk7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogUlhjc3Vtc1slZF0gTGlua0NoZ1JFR1slZF0gTUlpcnFbJWRdIEFTRlslZF0gVFNPY2FwWyVkXVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLAotCSAgICAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1JYX0NIRUNLU1VNUykgIT0gMCwKLQkgICAgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19VU0VfTElOS0NIR19SRUcpICE9IDAsCi0JICAgICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVVNFX01JX0lOVEVSUlVQVCkgIT0gMCwKLQkgICAgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19FTkFCTEVfQVNGKSAhPSAwLAotCSAgICAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9UU09fQ0FQQUJMRSkgIT0gMCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGRtYV9yd2N0cmxbJTA4eF0gZG1hX21hc2tbJWQtYml0XVxuIiwKLQkgICAgICAgZGV2LT5uYW1lLCB0cC0+ZG1hX3J3Y3RybCwKLQkgICAgICAgKHBkZXYtPmRtYV9tYXNrID09IERNQV9CSVRfTUFTSygzMikpID8gMzIgOgotCSAgICAgICAgKCgodTY0KSBwZGV2LT5kbWFfbWFzayA9PSBETUFfQklUX01BU0soNDApKSA/IDQwIDogNjQpKTsKKwluZXRkZXZfaW5mbyhkZXYsICJSWGNzdW1zWyVkXSBMaW5rQ2hnUkVHWyVkXSBNSWlycVslZF0gQVNGWyVkXSBUU09jYXBbJWRdXG4iLAorCQkgICAgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR19SWF9DSEVDS1NVTVMpICE9IDAsCisJCSAgICAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1VTRV9MSU5LQ0hHX1JFRykgIT0gMCwKKwkJICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVVNFX01JX0lOVEVSUlVQVCkgIT0gMCwKKwkJICAgICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikgIT0gMCwKKwkJICAgICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1RTT19DQVBBQkxFKSAhPSAwKTsKKwluZXRkZXZfaW5mbyhkZXYsICJkbWFfcndjdHJsWyUwOHhdIGRtYV9tYXNrWyVkLWJpdF1cbiIsCisJCSAgICB0cC0+ZG1hX3J3Y3RybCwKKwkJICAgIHBkZXYtPmRtYV9tYXNrID09IERNQV9CSVRfTUFTSygzMikgPyAzMiA6CisJCSAgICAoKHU2NClwZGV2LT5kbWFfbWFzaykgPT0gRE1BX0JJVF9NQVNLKDQwKSA/IDQwIDogNjQpOwogCiAJcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RnMy5oIGIvZHJpdmVycy9uZXQvdGczLmgKaW5kZXggOGExNjc5MS4uNTc0YTFjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGczLmgKKysrIGIvZHJpdmVycy9uZXQvdGczLmgKQEAgLTU2LDcgKzU2LDM5IEBACiAjZGVmaW5lICBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc2NQkgMHgxNmI0CiAjZGVmaW5lICBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc5MQkgMHgxNmIyCiAjZGVmaW5lICBURzNQQ0lfREVWSUNFX1RJR09OM181Nzc5NQkgMHgxNmI2Ci0vKiAweDA0IC0tPiAweDY0IHVudXNlZCAqLworLyogMHgwNCAtLT4gMHgyYyB1bnVzZWQgKi8KKyNkZWZpbmUgVEczUENJX1NVQlZFTkRPUl9JRF9CUk9BRENPTQkJUENJX1ZFTkRPUl9JRF9CUk9BRENPTQorI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEX0JST0FEQ09NXzk1NzAwQTYJMHgxNjQ0CisjZGVmaW5lIFRHM1BDSV9TVUJERVZJQ0VfSURfQlJPQURDT01fOTU3MDFBNQkweDAwMDEKKyNkZWZpbmUgVEczUENJX1NVQkRFVklDRV9JRF9CUk9BRENPTV85NTcwMFQ2CTB4MDAwMgorI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEX0JST0FEQ09NXzk1NzAwQTkJMHgwMDAzCisjZGVmaW5lIFRHM1BDSV9TVUJERVZJQ0VfSURfQlJPQURDT01fOTU3MDFUMQkweDAwMDUKKyNkZWZpbmUgVEczUENJX1NVQkRFVklDRV9JRF9CUk9BRENPTV85NTcwMVQ4CTB4MDAwNgorI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEX0JST0FEQ09NXzk1NzAxQTcJMHgwMDA3CisjZGVmaW5lIFRHM1BDSV9TVUJERVZJQ0VfSURfQlJPQURDT01fOTU3MDFBMTAJMHgwMDA4CisjZGVmaW5lIFRHM1BDSV9TVUJERVZJQ0VfSURfQlJPQURDT01fOTU3MDFBMTIJMHg4MDA4CisjZGVmaW5lIFRHM1BDSV9TVUJERVZJQ0VfSURfQlJPQURDT01fOTU3MDNBWDEJMHgwMDA5CisjZGVmaW5lIFRHM1BDSV9TVUJERVZJQ0VfSURfQlJPQURDT01fOTU3MDNBWDIJMHg4MDA5CisjZGVmaW5lIFRHM1BDSV9TVUJWRU5ET1JfSURfM0NPTQkJUENJX1ZFTkRPUl9JRF8zQ09NCisjZGVmaW5lIFRHM1BDSV9TVUJERVZJQ0VfSURfM0NPTV8zQzk5NlQJCTB4MTAwMAorI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEXzNDT01fM0M5OTZCVAkweDEwMDYKKyNkZWZpbmUgVEczUENJX1NVQkRFVklDRV9JRF8zQ09NXzNDOTk2U1gJMHgxMDA0CisjZGVmaW5lIFRHM1BDSV9TVUJERVZJQ0VfSURfM0NPTV8zQzEwMDBUCTB4MTAwNworI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEXzNDT01fM0M5NDBCUjAxCTB4MTAwOAorI2RlZmluZSBURzNQQ0lfU1VCVkVORE9SX0lEX0RFTEwJCVBDSV9WRU5ET1JfSURfREVMTAorI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEX0RFTExfVklQRVIJCTB4MDBkMQorI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEX0RFTExfSkFHVUFSCQkweDAxMDYKKyNkZWZpbmUgVEczUENJX1NVQkRFVklDRV9JRF9ERUxMX01FUkxPVAkJMHgwMTA5CisjZGVmaW5lIFRHM1BDSV9TVUJERVZJQ0VfSURfREVMTF9TTElNX01FUkxPVAkweDAxMGEKKyNkZWZpbmUgVEczUENJX1NVQlZFTkRPUl9JRF9DT01QQVEJCVBDSV9WRU5ET1JfSURfQ09NUEFRCisjZGVmaW5lIFRHM1BDSV9TVUJERVZJQ0VfSURfQ09NUEFRX0JBTlNIRUUJMHgwMDdjCisjZGVmaW5lIFRHM1BDSV9TVUJERVZJQ0VfSURfQ09NUEFRX0JBTlNIRUVfMgkweDAwOWEKKyNkZWZpbmUgVEczUENJX1NVQkRFVklDRV9JRF9DT01QQVFfQ0hBTkdFTElORwkweDAwN2QKKyNkZWZpbmUgVEczUENJX1NVQkRFVklDRV9JRF9DT01QQVFfTkM3NzgwCTB4MDA4NQorI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEX0NPTVBBUV9OQzc3ODBfMgkweDAwOTkKKyNkZWZpbmUgVEczUENJX1NVQlZFTkRPUl9JRF9JQk0JCQlQQ0lfVkVORE9SX0lEX0lCTQorI2RlZmluZSBURzNQQ0lfU1VCREVWSUNFX0lEX0lCTV81NzAzU0FYMgkweDAyODEKKy8qIDB4MzAgLS0+IDB4NjQgdW51c2VkICovCiAjZGVmaW5lIFRHM1BDSV9NU0lfREFUQQkJCTB4MDAwMDAwNjQKIC8qIDB4NjYgLS0+IDB4NjggdW51c2VkICovCiAjZGVmaW5lIFRHM1BDSV9NSVNDX0hPU1RfQ1RSTAkJMHgwMDAwMDA2OApAQCAtMTEwLDYgKzE0Miw3IEBACiAjZGVmaW5lICBDSElQUkVWX0lEXzU3NzgwX0EwCQkgMHg1Nzc4MDAwMAogI2RlZmluZSAgQ0hJUFJFVl9JRF81Nzc4MF9BMQkJIDB4NTc3ODAwMDEKICNkZWZpbmUgIENISVBSRVZfSURfNTcxN19BMAkJIDB4MDU3MTcwMDAKKyNkZWZpbmUgIENISVBSRVZfSURfNTc3NjVfQTAJCSAweDU3Nzg1MDAwCiAjZGVmaW5lICBHRVRfQVNJQ19SRVYoQ0hJUF9SRVZfSUQpCSgoQ0hJUF9SRVZfSUQpID4+IDEyKQogI2RlZmluZSAgIEFTSUNfUkVWXzU3MDAJCQkgMHgwNwogI2RlZmluZSAgIEFTSUNfUkVWXzU3MDEJCQkgMHgwMApAQCAtMTIwNiwxNCArMTIzOSwxOCBAQAogI2RlZmluZSAgREVGQVVMVF9NQl9NQUNSWF9MT1dfV0FURVIJICAweDAwMDAwMDIwCiAjZGVmaW5lICBERUZBVUxUX01CX01BQ1JYX0xPV19XQVRFUl81NzA1ICAweDAwMDAwMDEwCiAjZGVmaW5lICBERUZBVUxUX01CX01BQ1JYX0xPV19XQVRFUl81OTA2ICAweDAwMDAwMDA0CisjZGVmaW5lICBERUZBVUxUX01CX01BQ1JYX0xPV19XQVRFUl81Nzc2NSAweDAwMDAwMDJhCiAjZGVmaW5lICBERUZBVUxUX01CX01BQ1JYX0xPV19XQVRFUl9KVU1CTyAweDAwMDAwMDk4CiAjZGVmaW5lICBERUZBVUxUX01CX01BQ1JYX0xPV19XQVRFUl9KVU1CT181NzgwIDB4MDAwMDAwNGIKKyNkZWZpbmUgIERFRkFVTFRfTUJfTUFDUlhfTE9XX1dBVEVSX0pVTUJPXzU3NzY1IDB4MDAwMDAwN2UKICNkZWZpbmUgQlVGTUdSX01CX0hJR0hfV0FURVIJCTB4MDAwMDQ0MTgKICNkZWZpbmUgIERFRkFVTFRfTUJfSElHSF9XQVRFUgkJIDB4MDAwMDAwNjAKICNkZWZpbmUgIERFRkFVTFRfTUJfSElHSF9XQVRFUl81NzA1CSAweDAwMDAwMDYwCiAjZGVmaW5lICBERUZBVUxUX01CX0hJR0hfV0FURVJfNTkwNgkgMHgwMDAwMDAxMAorI2RlZmluZSAgREVGQVVMVF9NQl9ISUdIX1dBVEVSXzU3NzY1CSAweDAwMDAwMGEwCiAjZGVmaW5lICBERUZBVUxUX01CX0hJR0hfV0FURVJfSlVNQk8JIDB4MDAwMDAxN2MKICNkZWZpbmUgIERFRkFVTFRfTUJfSElHSF9XQVRFUl9KVU1CT181NzgwIDB4MDAwMDAwOTYKKyNkZWZpbmUgIERFRkFVTFRfTUJfSElHSF9XQVRFUl9KVU1CT181Nzc2NSAweDAwMDAwMGVhCiAjZGVmaW5lIEJVRk1HUl9SWF9NQl9BTExPQ19SRVEJCTB4MDAwMDQ0MWMKICNkZWZpbmUgIEJVRk1HUl9NQl9BTExPQ19CSVQJCSAweDEwMDAwMDAwCiAjZGVmaW5lIEJVRk1HUl9SWF9NQl9BTExPQ19SRVNQCQkweDAwMDA0NDIwCkBAIC0xMjUzLDYgKzEyOTAsNyBAQAogI2RlZmluZSAgUkRNQUNfTU9ERV9NQlVGX1NCRF9DUlBUX0VOQUIJIDB4MDAwMDIwMDAKICNkZWZpbmUgIFJETUFDX01PREVfRklGT19TSVpFXzEyOAkgMHgwMDAyMDAwMAogI2RlZmluZSAgUkRNQUNfTU9ERV9GSUZPX0xPTkdfQlVSU1QJIDB4MDAwMzAwMDAKKyNkZWZpbmUgIFJETUFDX01PREVfTVVMVF9ETUFfUkRfRElTCSAweDAxMDAwMDAwCiAjZGVmaW5lICBSRE1BQ19NT0RFX0lQVjRfTFNPX0VOCQkgMHgwODAwMDAwMAogI2RlZmluZSAgUkRNQUNfTU9ERV9JUFY2X0xTT19FTgkJIDB4MTAwMDAwMDAKICNkZWZpbmUgUkRNQUNfU1RBVFVTCQkJMHgwMDAwNDgwNApAQCAtMTU0Myw2ICsxNTgxLDggQEAKICNkZWZpbmUgIEdSQ19NT0RFX0hPU1RfU0VOREJEUwkJMHgwMDAyMDAwMAogI2RlZmluZSAgR1JDX01PREVfTk9fVFhfUEhEUl9DU1VNCTB4MDAxMDAwMDAKICNkZWZpbmUgIEdSQ19NT0RFX05WUkFNX1dSX0VOQUJMRQkweDAwMjAwMDAwCisjZGVmaW5lICBHUkNfTU9ERV9QQ0lFX1RMX1NFTAkJMHgwMDAwMDAwMAorI2RlZmluZSAgR1JDX01PREVfUENJRV9QTF9TRUwJCTB4MDA0MDAwMDAKICNkZWZpbmUgIEdSQ19NT0RFX05PX1JYX1BIRFJfQ1NVTQkweDAwODAwMDAwCiAjZGVmaW5lICBHUkNfTU9ERV9JUlFfT05fVFhfQ1BVX0FUVE4JMHgwMTAwMDAwMAogI2RlZmluZSAgR1JDX01PREVfSVJRX09OX1JYX0NQVV9BVFROCTB4MDIwMDAwMDAKQEAgLTE1NTAsNyArMTU5MCwxMyBAQAogI2RlZmluZSAgR1JDX01PREVfSVJRX09OX0RNQV9BVFROCTB4MDgwMDAwMDAKICNkZWZpbmUgIEdSQ19NT0RFX0lSUV9PTl9GTE9XX0FUVE4JMHgxMDAwMDAwMAogI2RlZmluZSAgR1JDX01PREVfNFhfTklDX1NFTkRfUklOR1MJMHgyMDAwMDAwMAorI2RlZmluZSAgR1JDX01PREVfUENJRV9ETF9TRUwJCTB4MjAwMDAwMDAKICNkZWZpbmUgIEdSQ19NT0RFX01DQVNUX0ZSTV9FTkFCTEUJMHg0MDAwMDAwMAorI2RlZmluZSAgR1JDX01PREVfUENJRV9ISV8xS19FTgkJMHg4MDAwMDAwMAorI2RlZmluZSAgR1JDX01PREVfUENJRV9QT1JUX01BU0sJKEdSQ19NT0RFX1BDSUVfVExfU0VMIHwgXAorCQkJCQkgR1JDX01PREVfUENJRV9QTF9TRUwgfCBcCisJCQkJCSBHUkNfTU9ERV9QQ0lFX0RMX1NFTCB8IFwKKwkJCQkJIEdSQ19NT0RFX1BDSUVfSElfMUtfRU4pCiAjZGVmaW5lIEdSQ19NSVNDX0NGRwkJCTB4MDAwMDY4MDQKICNkZWZpbmUgIEdSQ19NSVNDX0NGR19DT1JFQ0xLX1JFU0VUCTB4MDAwMDAwMDEKICNkZWZpbmUgIEdSQ19NSVNDX0NGR19QUkVTQ0FMQVJfTUFTSwkweDAwMDAwMGZlCkBAIC0xODA0LDYgKzE4NTAsMTEgQEAKIC8qIDB4N2U3NCAtLT4gMHg4MDAwIHVudXNlZCAqLwogCiAKKy8qIEFsdGVybmF0ZSBQQ0lFIGRlZmluaXRpb25zICovCisjZGVmaW5lIFRHM19QQ0lFX1RMRExQTF9QT1JUCQkweDAwMDA3YzAwCisjZGVmaW5lIFRHM19QQ0lFX1BMX0xPX1BIWUNUTDEJCSAweDAwMDAwMDA0CisjZGVmaW5lIFRHM19QQ0lFX1BMX0xPX1BIWUNUTDFfTDFQTExQRF9FTgkgIDB4MDAwMDEwMDAKKwogLyogT1RQIGJpdCBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBURzNfT1RQX0FHQ1RHVF9NQVNLCQkweDAwMDAwMGUwCiAjZGVmaW5lIFRHM19PVFBfQUdDVEdUX1NISUZUCQkxCkBAIC0xODQ1LDYgKzE4OTYsOCBAQAogI2RlZmluZSBURzNfRUVQUk9NX1NCX1JFVklTSU9OXzAJMHgwMDAwMDAwMAogI2RlZmluZSBURzNfRUVQUk9NX1NCX1JFVklTSU9OXzIJMHgwMDAyMDAwMAogI2RlZmluZSBURzNfRUVQUk9NX1NCX1JFVklTSU9OXzMJMHgwMDAzMDAwMAorI2RlZmluZSBURzNfRUVQUk9NX1NCX1JFVklTSU9OXzQJMHgwMDA0MDAwMAorI2RlZmluZSBURzNfRUVQUk9NX1NCX1JFVklTSU9OXzUJMHgwMDA1MDAwMAogI2RlZmluZSBURzNfRUVQUk9NX01BR0lDX0hXCQkweGFiY2QKICNkZWZpbmUgVEczX0VFUFJPTV9NQUdJQ19IV19NU0sJCTB4ZmZmZgogCkBAIC0xODYyLDYgKzE5MTUsOCBAQAogI2RlZmluZSBURzNfRUVQUk9NX1NCX0YxUjJfRURIX09GRgkweDE0CiAjZGVmaW5lIFRHM19FRVBST01fU0JfRjFSMl9NQkFfT0ZGCTB4MTAKICNkZWZpbmUgVEczX0VFUFJPTV9TQl9GMVIzX0VESF9PRkYJMHgxOAorI2RlZmluZSBURzNfRUVQUk9NX1NCX0YxUjRfRURIX09GRgkweDFjCisjZGVmaW5lIFRHM19FRVBST01fU0JfRjFSNV9FREhfT0ZGCTB4MjAKICNkZWZpbmUgVEczX0VFUFJPTV9TQl9FREhfTUFKX01BU0sJMHgwMDAwMDcwMAogI2RlZmluZSBURzNfRUVQUk9NX1NCX0VESF9NQUpfU0hGVAk4CiAjZGVmaW5lIFRHM19FRVBST01fU0JfRURIX01JTl9NQVNLCTB4MDAwMDAwZmYKQEAgLTE5NTYsNyArMjAxMSw3IEBACiAKICNkZWZpbmUgTklDX1NSQU1fREFUQV9DRkdfNAkJMHgwMDAwMGQ2MAogI2RlZmluZSAgTklDX1NSQU1fR01JSV9NT0RFCQkgMHgwMDAwMDAwMgotI2RlZmluZSAgTklDX1NSQU1fUkdNSUlfU1REX0lCTkRfRElTQUJMRSAweDAwMDAwMDA0CisjZGVmaW5lICBOSUNfU1JBTV9SR01JSV9JTkJBTkRfRElTQUJMRQkgMHgwMDAwMDAwNAogI2RlZmluZSAgTklDX1NSQU1fUkdNSUlfRVhUX0lCTkRfUlhfRU4JIDB4MDAwMDAwMDgKICNkZWZpbmUgIE5JQ19TUkFNX1JHTUlJX0VYVF9JQk5EX1RYX0VOCSAweDAwMDAwMDEwCiAKQEAgLTIwOTMsNiArMjE0OCw5IEBACiAKIC8qIEZhc3QgRXRoZXJuZXQgVHJhbmNlaXZlciBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBNSUlfVEczX0ZFVF9QVEVTVAkJMHgxNworI2RlZmluZSAgTUlJX1RHM19GRVRfUFRFU1RfRlJDX1RYX0xJTksJMHgxMDAwCisjZGVmaW5lICBNSUlfVEczX0ZFVF9QVEVTVF9GUkNfVFhfTE9DSwkweDA4MDAKKwogI2RlZmluZSBNSUlfVEczX0ZFVF9URVNUCQkweDFmCiAjZGVmaW5lICBNSUlfVEczX0ZFVF9TSEFET1dfRU4JCTB4MDA4MAogCkBAIC0yNjgyLDYgKzI3NDAsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlCQkqZGV2OwogCXN0cnVjdCBwY2lfZGV2CQkJKnBkZXY7CiAKKwl1MzIJCQkJY29hbF9ub3c7CiAJdTMyCQkJCW1zZ19lbmFibGU7CiAKIAkvKiBiZWdpbiAidHggdGhyZWFkIiBjYWNoZWxpbmUgc2VjdGlvbiAqLwpAQCAtMjcwMCw3ICsyNzU5LDcgQEAKIAlzdHJ1Y3Qgdmxhbl9ncm91cAkJKnZsZ3JwOwogI2VuZGlmCiAKLQlzdHJ1Y3QgdGczX3J4X3Byb2RyaW5nX3NldAlwcm9kcmluZ1tURzNfSVJRX01BWF9WRUNTIC0gMV07CisJc3RydWN0IHRnM19yeF9wcm9kcmluZ19zZXQJcHJvZHJpbmdbVEczX0lSUV9NQVhfVkVDU107CiAKIAogCS8qIGJlZ2luICJldmVyeXRoaW5nIGVsc2UiIGNhY2hlbGluZShzKSBzZWN0aW9uICovCkBAIC0yNzk4LDcgKzI4NTcsNyBAQAogI2RlZmluZSBURzNfRkxHM19VU0VfUEhZTElCCQkweDAwMDAwMDEwCiAjZGVmaW5lIFRHM19GTEczX01ESU9CVVNfSU5JVEVECQkweDAwMDAwMDIwCiAjZGVmaW5lIFRHM19GTEczX1BIWV9DT05ORUNURUQJCTB4MDAwMDAwODAKLSNkZWZpbmUgVEczX0ZMRzNfUkdNSUlfU1REX0lCTkRfRElTQUJMRQkweDAwMDAwMTAwCisjZGVmaW5lIFRHM19GTEczX1JHTUlJX0lOQkFORF9ESVNBQkxFCTB4MDAwMDAxMDAKICNkZWZpbmUgVEczX0ZMRzNfUkdNSUlfRVhUX0lCTkRfUlhfRU4JMHgwMDAwMDIwMAogI2RlZmluZSBURzNfRkxHM19SR01JSV9FWFRfSUJORF9UWF9FTgkweDAwMDAwNDAwCiAjZGVmaW5lIFRHM19GTEczX0NMS1JFUV9CVUcJCTB4MDAwMDA4MDAKQEAgLTI4MTIsNiArMjg3MSw3IEBACiAjZGVmaW5lIFRHM19GTEczXzQwQklUX0RNQV9MSU1JVF9CVUcJMHgwMDEwMDAwMAogI2RlZmluZSBURzNfRkxHM19TSE9SVF9ETUFfQlVHCQkweDAwMjAwMDAwCiAjZGVmaW5lIFRHM19GTEczX1VTRV9KVU1CT19CREZMQUcJMHgwMDQwMDAwMAorI2RlZmluZSBURzNfRkxHM19MMVBMTFBEX0VOCQkweDAwODAwMDAwCiAKIAlzdHJ1Y3QgdGltZXJfbGlzdAkJdGltZXI7CiAJdTE2CQkJCXRpbWVyX2NvdW50ZXI7CkBAIC0yODYxLDQyICsyOTIxLDUwIEBACiAKIAkvKiBQSFkgaW5mbyAqLwogCXUzMgkJCQlwaHlfaWQ7Ci0jZGVmaW5lIFBIWV9JRF9NQVNLCQkJMHhmZmZmZmZmMAotI2RlZmluZSBQSFlfSURfQkNNNTQwMAkJCTB4NjAwMDgwNDAKLSNkZWZpbmUgUEhZX0lEX0JDTTU0MDEJCQkweDYwMDA4MDUwCi0jZGVmaW5lIFBIWV9JRF9CQ001NDExCQkJMHg2MDAwODA3MAotI2RlZmluZSBQSFlfSURfQkNNNTcwMQkJCTB4NjAwMDgxMTAKLSNkZWZpbmUgUEhZX0lEX0JDTTU3MDMJCQkweDYwMDA4MTYwCi0jZGVmaW5lIFBIWV9JRF9CQ001NzA0CQkJMHg2MDAwODE5MAotI2RlZmluZSBQSFlfSURfQkNNNTcwNQkJCTB4NjAwMDgxYTAKLSNkZWZpbmUgUEhZX0lEX0JDTTU3NTAJCQkweDYwMDA4MTgwCi0jZGVmaW5lIFBIWV9JRF9CQ001NzUyCQkJMHg2MDAwODEwMAotI2RlZmluZSBQSFlfSURfQkNNNTcxNAkJCTB4NjAwMDgzNDAKLSNkZWZpbmUgUEhZX0lEX0JDTTU3ODAJCQkweDYwMDA4MzUwCi0jZGVmaW5lIFBIWV9JRF9CQ001NzU1CQkJMHhiYzA1MGNjMAotI2RlZmluZSBQSFlfSURfQkNNNTc4NwkJCTB4YmMwNTBjZTAKLSNkZWZpbmUgUEhZX0lEX0JDTTU3NTYJCQkweGJjMDUwZWQwCi0jZGVmaW5lIFBIWV9JRF9CQ001Nzg0CQkJMHhiYzA1MGZhMAotI2RlZmluZSBQSFlfSURfQkNNNTc2MQkJCTB4YmMwNTBmZDAKLSNkZWZpbmUgUEhZX0lEX0JDTTU3MTcJCQkweDVjMGQ4YTAwCi0jZGVmaW5lIFBIWV9JRF9CQ001OTA2CQkJMHhkYzAwYWM0MAotI2RlZmluZSBQSFlfSURfQkNNODAwMgkJCTB4NjAwMTAxNDAKLSNkZWZpbmUgUEhZX0lEX0lOVkFMSUQJCQkweGZmZmZmZmZmCi0jZGVmaW5lIFBIWV9JRF9SRVZfTUFTSwkJCTB4MDAwMDAwMGYKLSNkZWZpbmUgUEhZX1JFVl9CQ001NDAxX0IwCQkweDEKLSNkZWZpbmUgUEhZX1JFVl9CQ001NDAxX0IyCQkweDMKLSNkZWZpbmUgUEhZX1JFVl9CQ001NDAxX0MwCQkweDYKLSNkZWZpbmUgUEhZX1JFVl9CQ001NDExX1gwCQkweDEgLyogRm91bmQgb24gTmV0Z2VhciBHQTMwMlQgKi8KLSNkZWZpbmUgVEczX1BIWV9JRF9CQ001MDYxMAkJMHgxNDNiZDYwCi0jZGVmaW5lIFRHM19QSFlfSURfQkNNNTA2MTBNCTB4MTQzYmQ3MAotI2RlZmluZSBURzNfUEhZX0lEX0JDTUFDMTMxCQkweDE0M2JjNzAKLSNkZWZpbmUgVEczX1BIWV9JRF9SVEw4MjExQwkJMHgwMDFjYzkxMAotI2RlZmluZSBURzNfUEhZX0lEX1JUTDgyMDFFCQkweDAwMDA4MjAwCi0jZGVmaW5lIFRHM19QSFlfSURfQkNNNTc3ODAJCTB4MDM2MjVkOTAKLSNkZWZpbmUgVEczX1BIWV9PVUlfTUFTSwkJMHhmZmZmZmMwMAotI2RlZmluZSBURzNfUEhZX09VSV8xCQkJMHgwMDIwNjAwMAotI2RlZmluZSBURzNfUEhZX09VSV8yCQkJMHgwMTQzYmMwMAotI2RlZmluZSBURzNfUEhZX09VSV8zCQkJMHgwMzYyNWMwMAorI2RlZmluZSBURzNfUEhZX0lEX01BU0sJCQkweGZmZmZmZmYwCisjZGVmaW5lIFRHM19QSFlfSURfQkNNNTQwMAkJMHg2MDAwODA0MAorI2RlZmluZSBURzNfUEhZX0lEX0JDTTU0MDEJCTB4NjAwMDgwNTAKKyNkZWZpbmUgVEczX1BIWV9JRF9CQ001NDExCQkweDYwMDA4MDcwCisjZGVmaW5lIFRHM19QSFlfSURfQkNNNTcwMQkJMHg2MDAwODExMAorI2RlZmluZSBURzNfUEhZX0lEX0JDTTU3MDMJCTB4NjAwMDgxNjAKKyNkZWZpbmUgVEczX1BIWV9JRF9CQ001NzA0CQkweDYwMDA4MTkwCisjZGVmaW5lIFRHM19QSFlfSURfQkNNNTcwNQkJMHg2MDAwODFhMAorI2RlZmluZSBURzNfUEhZX0lEX0JDTTU3NTAJCTB4NjAwMDgxODAKKyNkZWZpbmUgVEczX1BIWV9JRF9CQ001NzUyCQkweDYwMDA4MTAwCisjZGVmaW5lIFRHM19QSFlfSURfQkNNNTcxNAkJMHg2MDAwODM0MAorI2RlZmluZSBURzNfUEhZX0lEX0JDTTU3ODAJCTB4NjAwMDgzNTAKKyNkZWZpbmUgVEczX1BIWV9JRF9CQ001NzU1CQkweGJjMDUwY2MwCisjZGVmaW5lIFRHM19QSFlfSURfQkNNNTc4NwkJMHhiYzA1MGNlMAorI2RlZmluZSBURzNfUEhZX0lEX0JDTTU3NTYJCTB4YmMwNTBlZDAKKyNkZWZpbmUgVEczX1BIWV9JRF9CQ001Nzg0CQkweGJjMDUwZmEwCisjZGVmaW5lIFRHM19QSFlfSURfQkNNNTc2MQkJMHhiYzA1MGZkMAorI2RlZmluZSBURzNfUEhZX0lEX0JDTTU3MThDCQkweDVjMGQ4YTAwCisjZGVmaW5lIFRHM19QSFlfSURfQkNNNTcxOFMJCTB4YmMwNTBmZjAKKyNkZWZpbmUgVEczX1BIWV9JRF9CQ001Nzc2NQkJMHg1YzBkOGE0MAorI2RlZmluZSBURzNfUEhZX0lEX0JDTTU5MDYJCTB4ZGMwMGFjNDAKKyNkZWZpbmUgVEczX1BIWV9JRF9CQ004MDAyCQkweDYwMDEwMTQwCisjZGVmaW5lIFRHM19QSFlfSURfSU5WQUxJRAkJMHhmZmZmZmZmZgorCisjZGVmaW5lIFBIWV9JRF9SVEw4MjExQwkJCTB4MDAxY2M5MTAKKyNkZWZpbmUgUEhZX0lEX1JUTDgyMDFFCQkJMHgwMDAwODIwMAorCisjZGVmaW5lIFRHM19QSFlfSURfUkVWX01BU0sJCTB4MDAwMDAwMGYKKyNkZWZpbmUgVEczX1BIWV9SRVZfQkNNNTQwMV9CMAkJMHgxCisKKwkvKiBUaGlzIG1hY3JvIGFzc3VtZXMgdGhlIHBhc3NlZCBQSFkgSUQgaXMKKwkgKiBhbHJlYWR5IG1hc2tlZCB3aXRoIFRHM19QSFlfSURfTUFTSy4KKwkgKi8KKyNkZWZpbmUgVEczX0tOT1dOX1BIWV9JRChYKQkJXAorCSgoWCkgPT0gVEczX1BIWV9JRF9CQ001NDAwIHx8IChYKSA9PSBURzNfUEhZX0lEX0JDTTU0MDEgfHwgXAorCSAoWCkgPT0gVEczX1BIWV9JRF9CQ001NDExIHx8IChYKSA9PSBURzNfUEhZX0lEX0JDTTU3MDEgfHwgXAorCSAoWCkgPT0gVEczX1BIWV9JRF9CQ001NzAzIHx8IChYKSA9PSBURzNfUEhZX0lEX0JDTTU3MDQgfHwgXAorCSAoWCkgPT0gVEczX1BIWV9JRF9CQ001NzA1IHx8IChYKSA9PSBURzNfUEhZX0lEX0JDTTU3NTAgfHwgXAorCSAoWCkgPT0gVEczX1BIWV9JRF9CQ001NzUyIHx8IChYKSA9PSBURzNfUEhZX0lEX0JDTTU3MTQgfHwgXAorCSAoWCkgPT0gVEczX1BIWV9JRF9CQ001NzgwIHx8IChYKSA9PSBURzNfUEhZX0lEX0JDTTU3ODcgfHwgXAorCSAoWCkgPT0gVEczX1BIWV9JRF9CQ001NzU1IHx8IChYKSA9PSBURzNfUEhZX0lEX0JDTTU3NTYgfHwgXAorCSAoWCkgPT0gVEczX1BIWV9JRF9CQ001OTA2IHx8IChYKSA9PSBURzNfUEhZX0lEX0JDTTU3NjEgfHwgXAorCSAoWCkgPT0gVEczX1BIWV9JRF9CQ001NzE4QyB8fCAoWCkgPT0gVEczX1BIWV9JRF9CQ001NzE4UyB8fCBcCisJIChYKSA9PSBURzNfUEhZX0lEX0JDTTU3NzY1IHx8IChYKSA9PSBURzNfUEhZX0lEX0JDTTgwMDIpCiAKIAl1MzIJCQkJbGVkX2N0cmw7CiAJdTMyCQkJCXBoeV9vdHA7CkBAIC0yOTA5LDIwICsyOTc3LDYgQEAKIAl1MzIJCQkJcGNpX2Nsb2NrX2N0cmw7CiAJc3RydWN0IHBjaV9kZXYJCQkqcGRldl9wZWVyOwogCi0JLyogVGhpcyBtYWNybyBhc3N1bWVzIHRoZSBwYXNzZWQgUEhZIElEIGlzIGFscmVhZHkgbWFza2VkCi0JICogd2l0aCBQSFlfSURfTUFTSy4KLQkgKi8KLSNkZWZpbmUgS05PV05fUEhZX0lEKFgpCQlcCi0JKChYKSA9PSBQSFlfSURfQkNNNTQwMCB8fCAoWCkgPT0gUEhZX0lEX0JDTTU0MDEgfHwgXAotCSAoWCkgPT0gUEhZX0lEX0JDTTU0MTEgfHwgKFgpID09IFBIWV9JRF9CQ001NzAxIHx8IFwKLQkgKFgpID09IFBIWV9JRF9CQ001NzAzIHx8IChYKSA9PSBQSFlfSURfQkNNNTcwNCB8fCBcCi0JIChYKSA9PSBQSFlfSURfQkNNNTcwNSB8fCAoWCkgPT0gUEhZX0lEX0JDTTU3NTAgfHwgXAotCSAoWCkgPT0gUEhZX0lEX0JDTTU3NTIgfHwgKFgpID09IFBIWV9JRF9CQ001NzE0IHx8IFwKLQkgKFgpID09IFBIWV9JRF9CQ001NzgwIHx8IChYKSA9PSBQSFlfSURfQkNNNTc4NyB8fCBcCi0JIChYKSA9PSBQSFlfSURfQkNNNTc1NSB8fCAoWCkgPT0gUEhZX0lEX0JDTTU3NTYgfHwgXAotCSAoWCkgPT0gUEhZX0lEX0JDTTU5MDYgfHwgKFgpID09IFBIWV9JRF9CQ001NzYxIHx8IFwKLQkgKFgpID09IFBIWV9JRF9CQ001NzE3IHx8IChYKSA9PSBQSFlfSURfQkNNODAwMikKLQogCXN0cnVjdCB0ZzNfaHdfc3RhdHMJCSpod19zdGF0czsKIAlkbWFfYWRkcl90CQkJc3RhdHNfbWFwcGluZzsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QJCXJlc2V0X3Rhc2s7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90bGFuLmMgYi9kcml2ZXJzL25ldC90bGFuLmMKaW5kZXggZmFiYWVmZi4uMzkwNTQwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdGxhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3RsYW4uYwpAQCAtMjU0LDcgKzI1NCw3IEBACiAJeyAiQ29tcGFxIE5ldEZsZXgtMy9FIiwgVExBTl9BREFQVEVSX0FDVElWSVRZX0xFRCwgMHg4MyB9LCAvKiBFSVNBIGNhcmQgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB0bGFuX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh0bGFuX3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9DT01QQVEsIFBDSV9ERVZJQ0VfSURfQ09NUEFRX05FVEVMMTAsCiAJCVBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKIAl7IFBDSV9WRU5ET1JfSURfQ09NUEFRLCBQQ0lfREVWSUNFX0lEX0NPTVBBUV9ORVRFTDEwMCwKQEAgLTMzOCw3ICszMzgsNyBAQAogc3RhdGljIGludAlUTGFuX1BoeURwODM4NDBhQ2hlY2soIHN0cnVjdCBuZXRfZGV2aWNlICogKTsKICovCiAKLXN0YXRpYyBpbnQJVExhbl9NaWlSZWFkUmVnKCBzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MTYsIHUxNiwgdTE2ICogKTsKK3N0YXRpYyBib29sCVRMYW5fTWlpUmVhZFJlZyggc3RydWN0IG5ldF9kZXZpY2UgKiwgdTE2LCB1MTYsIHUxNiAqICk7CiBzdGF0aWMgdm9pZAlUTGFuX01paVNlbmREYXRhKCB1MTYsIHUzMiwgdW5zaWduZWQgKTsKIHN0YXRpYyB2b2lkCVRMYW5fTWlpU3luYyggdTE2ICk7CiBzdGF0aWMgdm9pZAlUTGFuX01paVdyaXRlUmVnKCBzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MTYsIHUxNiwgdTE2ICk7CkBAIC0xMzE0LDcgKzEzMTQsNyBAQAogCiBzdGF0aWMgdm9pZCBUTGFuX1NldE11bHRpY2FzdExpc3QoIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgKQogewotCXN0cnVjdCBkZXZfbWNfbGlzdAkqZG1pID0gZGV2LT5tY19saXN0OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCXUzMgkJCWhhc2gxID0gMDsKIAl1MzIJCQloYXNoMiA9IDA7CiAJaW50CQkJaTsKQEAgLTEzMzUsNyArMTMzNSw4IEBACiAJCQlUTGFuX0Rpb1dyaXRlMzIoIGRldi0+YmFzZV9hZGRyLCBUTEFOX0hBU0hfMSwgMHhGRkZGRkZGRiApOwogCQkJVExhbl9EaW9Xcml0ZTMyKCBkZXYtPmJhc2VfYWRkciwgVExBTl9IQVNIXzIsIDB4RkZGRkZGRkYgKTsKIAkJfSBlbHNlIHsKLQkJCWZvciAoIGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrICkgeworCQkJaSA9IDA7CisJCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogCQkJCWlmICggaSA8IDMgKSB7CiAJCQkJCVRMYW5fU2V0TWFjKCBkZXYsIGkgKyAxLAogCQkJCQkJICAgICAoY2hhciAqKSAmZG1pLT5kbWlfYWRkciApOwpAQCAtMTM0Niw3ICsxMzQ3LDcgQEAKIAkJCQkJZWxzZQogCQkJCQkJaGFzaDIgfD0gKCAxIDw8ICggb2Zmc2V0IC0gMzIgKSApOwogCQkJCX0KLQkJCQlkbWkgPSBkbWktPm5leHQ7CisJCQkJaSsrOwogCQkJfQogCQkJZm9yICggOyBpIDwgMzsgaSsrICkKIAkJCQlUTGFuX1NldE1hYyggZGV2LCBpICsgMSwgTlVMTCApOwpAQCAtMjIwNCw3ICsyMjA1LDcgQEAKIAl1MzIJCWRhdGE7CiAJdTgJCWRhdGE4OwogCi0JcHJpdi0+dGxhbkZ1bGxEdXBsZXggPSBGQUxTRTsKKwlwcml2LT50bGFuRnVsbER1cGxleCA9IGZhbHNlOwogCXByaXYtPnBoeU9ubGluZT0wOwogCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAKQEAgLTIyNTksNyArMjI2MCw3IEBACiAJCQlUTGFuX0Rpb1dyaXRlOCggZGV2LT5iYXNlX2FkZHIsIFRMQU5fQUNPTU1JVCwgMHgwYSApOwogCQl9IGVsc2UgaWYgKCBwcml2LT5kdXBsZXggPT0gVExBTl9EVVBMRVhfRlVMTCApIHsKIAkJCVRMYW5fRGlvV3JpdGU4KCBkZXYtPmJhc2VfYWRkciwgVExBTl9BQ09NTUlULCAweDAwICk7Ci0JCQlwcml2LT50bGFuRnVsbER1cGxleCA9IFRSVUU7CisJCQlwcml2LT50bGFuRnVsbER1cGxleCA9IHRydWU7CiAJCX0gZWxzZSB7CiAJCQlUTGFuX0Rpb1dyaXRlOCggZGV2LT5iYXNlX2FkZHIsIFRMQU5fQUNPTU1JVCwgMHgwOCApOwogCQl9CkBAIC0yNjUxLDE0ICsyNjUyLDE0IEBACiAJCQlUTGFuX01paVdyaXRlUmVnKCBkZXYsIHBoeSwgTUlJX0dFTl9DVEwsIDB4MDAwMCk7CiAJCX0gZWxzZSBpZiAoIHByaXYtPnNwZWVkID09IFRMQU5fU1BFRURfMTAgJiYKIAkJCSAgICBwcml2LT5kdXBsZXggPT0gVExBTl9EVVBMRVhfRlVMTCkgewotCQkJcHJpdi0+dGxhbkZ1bGxEdXBsZXggPSBUUlVFOworCQkJcHJpdi0+dGxhbkZ1bGxEdXBsZXggPSB0cnVlOwogCQkJVExhbl9NaWlXcml0ZVJlZyggZGV2LCBwaHksIE1JSV9HRU5fQ1RMLCAweDAxMDApOwogCQl9IGVsc2UgaWYgKCBwcml2LT5zcGVlZCA9PSBUTEFOX1NQRUVEXzEwMCAmJgogCQkJICAgIHByaXYtPmR1cGxleCA9PSBUTEFOX0RVUExFWF9IQUxGKSB7CiAJCQlUTGFuX01paVdyaXRlUmVnKCBkZXYsIHBoeSwgTUlJX0dFTl9DVEwsIDB4MjAwMCk7CiAJCX0gZWxzZSBpZiAoIHByaXYtPnNwZWVkID09IFRMQU5fU1BFRURfMTAwICYmCiAJCQkgICAgcHJpdi0+ZHVwbGV4ID09IFRMQU5fRFVQTEVYX0ZVTEwpIHsKLQkJCXByaXYtPnRsYW5GdWxsRHVwbGV4ID0gVFJVRTsKKwkJCXByaXYtPnRsYW5GdWxsRHVwbGV4ID0gdHJ1ZTsKIAkJCVRMYW5fTWlpV3JpdGVSZWcoIGRldiwgcGh5LCBNSUlfR0VOX0NUTCwgMHgyMTAwKTsKIAkJfSBlbHNlIHsKIApAQCAtMjY5NSw3ICsyNjk2LDcgQEAKICAgICAgICAgICAgICAgICAJdGN0bCAmPSB+VExBTl9UQ19BVUlTRUw7CiAJCQlpZiAoIHByaXYtPmR1cGxleCA9PSBUTEFOX0RVUExFWF9GVUxMICkgewogCQkJCWNvbnRyb2wgfD0gTUlJX0dDX0RVUExFWDsKLQkJCQlwcml2LT50bGFuRnVsbER1cGxleCA9IFRSVUU7CisJCQkJcHJpdi0+dGxhbkZ1bGxEdXBsZXggPSB0cnVlOwogCQkJfQogCQkJaWYgKCBwcml2LT5zcGVlZCA9PSBUTEFOX1NQRUVEXzEwMCApIHsKIAkJCQljb250cm9sIHw9IE1JSV9HQ19TUEVFRFNFTDsKQEAgLTI3NTAsOSArMjc1MSw5IEBACiAJVExhbl9NaWlSZWFkUmVnKCBkZXYsIHBoeSwgTUlJX0FOX0xQQSwgJmFuX2xwYSApOwogCW1vZGUgPSBhbl9hZHYgJiBhbl9scGEgJiAweDAzRTA7CiAJaWYgKCBtb2RlICYgMHgwMTAwICkgewotCQlwcml2LT50bGFuRnVsbER1cGxleCA9IFRSVUU7CisJCXByaXYtPnRsYW5GdWxsRHVwbGV4ID0gdHJ1ZTsKIAl9IGVsc2UgaWYgKCAhICggbW9kZSAmIDB4MDA4MCApICYmICggbW9kZSAmIDB4MDA0MCApICkgewotCQlwcml2LT50bGFuRnVsbER1cGxleCA9IFRSVUU7CisJCXByaXYtPnRsYW5GdWxsRHVwbGV4ID0gdHJ1ZTsKIAl9CiAKIAlpZiAoICggISAoIG1vZGUgJiAweDAxODAgKSApICYmCkBAIC0yODU1LDggKzI4NTYsOCBAQAogCSAqCVRMYW5fTWlpUmVhZFJlZwogCSAqCiAJICoJUmV0dXJuczoKLQkgKgkJMAlpZiBhY2sgcmVjZWl2ZWQgb2sKLQkgKgkJMQlvdGhlcndpc2UuCisJICoJCWZhbHNlCWlmIGFjayByZWNlaXZlZCBvaworCSAqCQl0cnVlCWlmIG5vIGFjayByZWNlaXZlZCBvciBvdGhlciBlcnJvcgogCSAqCiAJICoJUGFybXM6CiAJICoJCWRldgkJVGhlIGRldmljZSBzdHJ1Y3R1cmUgY29udGFpbmluZwpAQCAtMjg3NSwxNyArMjg3NiwxNyBAQAogCSAqCiAJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50IFRMYW5fTWlpUmVhZFJlZyggc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHBoeSwgdTE2IHJlZywgdTE2ICp2YWwgKQorc3RhdGljIGJvb2wgVExhbl9NaWlSZWFkUmVnKCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcGh5LCB1MTYgcmVnLCB1MTYgKnZhbCApCiB7CiAJdTgJbmFjazsKIAl1MTYJc2lvLCB0bXA7CiAgCXUzMglpOwotCWludAllcnI7CisJYm9vbAllcnI7CiAJaW50CW1pbnRlbjsKIAlUTGFuUHJpdmF0ZUluZm8gKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCi0JZXJyID0gRkFMU0U7CisJZXJyID0gZmFsc2U7CiAJb3V0dyhUTEFOX05FVF9TSU8sIGRldi0+YmFzZV9hZGRyICsgVExBTl9ESU9fQURSKTsKIAlzaW8gPSBkZXYtPmJhc2VfYWRkciArIFRMQU5fRElPX0RBVEEgKyBUTEFOX05FVF9TSU87CiAKQEAgLTI5MTgsNyArMjkxOSw3IEBACiAJCQlUTGFuX1NldEJpdChUTEFOX05FVF9TSU9fTUNMSywgc2lvKTsKIAkJfQogCQl0bXAgPSAweGZmZmY7Ci0JCWVyciA9IFRSVUU7CisJCWVyciA9IHRydWU7CiAJfSBlbHNlIHsJCQkJCS8qIEFDSywgc28gcmVhZCBkYXRhICovCiAJCWZvciAodG1wID0gMCwgaSA9IDB4ODAwMDsgaTsgaSA+Pj0gMSkgewogCQkJVExhbl9DbGVhckJpdChUTEFOX05FVF9TSU9fTUNMSywgc2lvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3RsYW4uaCBiL2RyaXZlcnMvbmV0L3RsYW4uaAppbmRleCA0YjgyZjI4Li5kMTNmZjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90bGFuLmgKKysrIGIvZHJpdmVycy9uZXQvdGxhbi5oCkBAIC0zMSw5ICszMSw2IEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBGQUxTRQkJCTAKLSNkZWZpbmUgVFJVRQkJCTEKLQogI2RlZmluZSBUTEFOX01JTl9GUkFNRV9TSVpFCTY0CiAjZGVmaW5lIFRMQU5fTUFYX0ZSQU1FX1NJWkUJMTYwMAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvM2MzNTkuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jCmluZGV4IGNmNTUyZDEuLjBmYjkzMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy8zYzM1OS5jCkBAIC0xMTcsNyArMTE3LDcgQEAKICAqCXdpbGwgYmUgc3R1Y2sgd2l0aCAxNTU1IGxpbmVzIG9mIGhleCAjJ3MgaW4gdGhlIGNvZGUuCiAgKi8KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHhsX3BjaV90YmxbXSA9CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoeGxfcGNpX3RibCkgPQogewogCXtQQ0lfVkVORE9SX0lEXzNDT00sUENJX0RFVklDRV9JRF8zQ09NXzNDMzU5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXsgfQkJCS8qIHRlcm1pbmF0ZSBsaXN0ICovCkBAIC0xMzkwLDEwICsxMzkwLDkgQEAKIHN0YXRpYyB2b2lkIHhsX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIAogewogCXN0cnVjdCB4bF9wcml2YXRlICp4bF9wcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaSA7IAorCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCXVuc2lnbmVkIGNoYXIgZGV2X21jX2FkZHJlc3NbNF0gOyAKIAl1MTYgb3B0aW9ucyA7IAotCWludCBpIDsgCiAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQogCQlvcHRpb25zID0gMHgwMDA0IDsgCkBAIC0xNDA4LDcgKzE0MDcsNyBAQAogCiAJZGV2X21jX2FkZHJlc3NbMF0gPSBkZXZfbWNfYWRkcmVzc1sxXSA9IGRldl9tY19hZGRyZXNzWzJdID0gZGV2X21jX2FkZHJlc3NbM10gPSAwIDsKIAotICAgICAgICBmb3IgKGk9MCxkbWk9ZGV2LT5tY19saXN0O2kgPCBkZXYtPm1jX2NvdW50OyBpKyssZG1pID0gZG1pLT5uZXh0KSB7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKICAgICAgICAgICAgICAgICBkZXZfbWNfYWRkcmVzc1swXSB8PSBkbWktPmRtaV9hZGRyWzJdIDsKICAgICAgICAgICAgICAgICBkZXZfbWNfYWRkcmVzc1sxXSB8PSBkbWktPmRtaV9hZGRyWzNdIDsKICAgICAgICAgICAgICAgICBkZXZfbWNfYWRkcmVzc1syXSB8PSBkbWktPmRtaV9hZGRyWzRdIDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9hYnlzcy5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMKaW5kZXggYjlkYjFiNS4uNTE1ZjEyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2FieXNzLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIAogI2RlZmluZSBBQllTU19JT19FWFRFTlQgNjQKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGFieXNzX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShhYnlzc19wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfTUFER0UsIFBDSV9ERVZJQ0VfSURfTUFER0VfTUsyLAogCSAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgUENJX0NMQVNTX05FVFdPUktfVE9LRU5fUklORyA8PCA4LCAweDAwZmZmZmZmLCB9LAogCXsgfQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvaWJtdHIuYyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jCmluZGV4IDY2MjcyZjIuLjFhMDk2NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9pYm10ci5jCkBAIC05OTUsMTMgKzk5NSwxMSBAQAogCS8qQk1TIGlmY29uZmlnIHRyIGRvd24gb3IgaG90IHVucGx1ZyBhIFBDTUNJQSBjYXJkID8/aG93bm93YnJvd25jb3cqLwogCWlmICgvKkJNU0hFTFBkZXYtPnN0YXJ0ID09IDAgfHwqLyB0aS0+b3Blbl9zdGF0dXMgIT0gT1BFTikgcmV0dXJuOwogCWFkZHJlc3NbMF0gPSBhZGRyZXNzWzFdID0gYWRkcmVzc1syXSA9IGFkZHJlc3NbM10gPSAwOwotCW1jbGlzdCA9IGRldi0+bWNfbGlzdDsKLQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5tY19jb3VudDsgaSsrKSB7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJYWRkcmVzc1swXSB8PSBtY2xpc3QtPmRtaV9hZGRyWzJdOwogCQlhZGRyZXNzWzFdIHw9IG1jbGlzdC0+ZG1pX2FkZHJbM107CiAJCWFkZHJlc3NbMl0gfD0gbWNsaXN0LT5kbWlfYWRkcls0XTsKIAkJYWRkcmVzc1szXSB8PSBtY2xpc3QtPmRtaV9hZGRyWzVdOwotCQltY2xpc3QgPSBtY2xpc3QtPm5leHQ7CiAJfQogCVNFVF9QQUdFKHRpLT5zcmJfcGFnZSk7CiAJZm9yIChpID0gMDsgaSA8IHNpemVvZihzdHJ1Y3Qgc3JiX3NldF9mdW5jdF9hZGRyKTsgaSsrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYwppbmRleCBkNmNjZDU5Li5kZDAyOGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYworKysgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gPSAiTGFuU3RyZWFtZXIuYyB2MC40LjAgMDMvMDgvMDEgLSBNaWtlIFN1bGxpdmFuXG4iCiAgICAgICAgICAgICAgICAgICAgICAgICAiICAgICAgICAgICAgICB2MC41LjMgMTEvMTMvMDIgLSBLZW50IFlvZGVyIjsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHN0cmVhbWVyX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShzdHJlYW1lcl9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfSUJNLCBQQ0lfREVWSUNFX0lEX0lCTV9UUiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCx9LAogCXt9CS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpAQCAtMTI2OCw3ICsxMjY4LDYgQEAKIAlfX3U4IG9wdGlvbnMgPSAwOwogCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCXVuc2lnbmVkIGNoYXIgZGV2X21jX2FkZHJlc3NbNV07Ci0JaW50IGk7CiAKIAl3cml0ZWwoc3RyZWFtZXJfcHJpdi0+c3JiLCBzdHJlYW1lcl9tbWlvICsgTEFQQSk7CiAJb3B0aW9ucyA9IHN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX2NvcHlfYWxsX29wdGlvbnM7CkBAIC0xMzAzLDggKzEzMDIsNyBAQAogCXdyaXRlbChzdHJlYW1lcl9wcml2LT5zcmIsc3RyZWFtZXJfbW1pbytMQVBBKTsKIAlkZXZfbWNfYWRkcmVzc1swXSA9IGRldl9tY19hZGRyZXNzWzFdID0gZGV2X21jX2FkZHJlc3NbMl0gPSBkZXZfbWNfYWRkcmVzc1szXSA9IDAgOyAKICAgCi0JZm9yIChpPTAsZG1pPWRldi0+bWNfbGlzdDtpIDwgZGV2LT5tY19jb3VudDsgaSsrLGRtaSA9IGRtaS0+bmV4dCkgCi0JeyAKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogICAgCSAgICAgICAgZGV2X21jX2FkZHJlc3NbMF0gfD0gZG1pLT5kbWlfYWRkclsyXSA7IAogCQlkZXZfbWNfYWRkcmVzc1sxXSB8PSBkbWktPmRtaV9hZGRyWzNdIDsgCiAJCWRldl9tY19hZGRyZXNzWzJdIHw9IGRtaS0+ZG1pX2FkZHJbNF0gOyAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvb2x5bXBpYy5jCmluZGV4IGRmMzIwMjUuLjNhMjVlMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9vbHltcGljLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL29seW1waWMuYwpAQCAtMTcyLDcgKzE3Miw3IEBACiBzdGF0aWMgaW50IG5ldHdvcmtfbW9uaXRvcltPTFlNUElDX01BWF9BREFQVEVSU10gPSB7MCx9OwogbW9kdWxlX3BhcmFtX2FycmF5KG5ldHdvcmtfbW9uaXRvciwgaW50LCBOVUxMLCAwKTsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG9seW1waWNfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG9seW1waWNfcGNpX3RibCkgPSB7CiAJe1BDSV9WRU5ET1JfSURfSUJNLFBDSV9ERVZJQ0VfSURfSUJNX1RSX1dBS0UsUENJX0FOWV9JRCxQQ0lfQU5ZX0lELH0sCiAJeyB9IAkvKiBUZXJtaW5hdGluZyBFbnRyeSAqLwogfTsKQEAgLTExMzksOSArMTEzOSw4IEBACiAgICAJdTggX19pb21lbSAqb2x5bXBpY19tbWlvID0gb2x5bXBpY19wcml2LT5vbHltcGljX21taW8gOyAKIAl1OCBvcHRpb25zID0gMDsgCiAJdTggX19pb21lbSAqc3JiOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pIDsgCisJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJdW5zaWduZWQgY2hhciBkZXZfbWNfYWRkcmVzc1s0XSA7IAotCWludCBpIDsgCiAKIAl3cml0ZWwob2x5bXBpY19wcml2LT5zcmIsb2x5bXBpY19tbWlvK0xBUEEpOwogCXNyYj1vbHltcGljX3ByaXYtPm9seW1waWNfbGFwICsgKG9seW1waWNfcHJpdi0+c3JiICYgKH4weGY4MDApKTsKQEAgLTExNzgsNyArMTE3Nyw3IEBACiAKIAlkZXZfbWNfYWRkcmVzc1swXSA9IGRldl9tY19hZGRyZXNzWzFdID0gZGV2X21jX2FkZHJlc3NbMl0gPSBkZXZfbWNfYWRkcmVzc1szXSA9IDAgOyAKIAotCWZvciAoaT0wLGRtaT1kZXYtPm1jX2xpc3Q7aSA8IGRldi0+bWNfY291bnQ7IGkrKyxkbWkgPSBkbWktPm5leHQpIHsgCisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpIHsKIAkJZGV2X21jX2FkZHJlc3NbMF0gfD0gZG1pLT5kbWlfYWRkclsyXSA7IAogCQlkZXZfbWNfYWRkcmVzc1sxXSB8PSBkbWktPmRtaV9hZGRyWzNdIDsgCiAJCWRldl9tY19hZGRyZXNzWzJdIHw9IGRtaS0+ZG1pX2FkZHJbNF0gOyAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXMzODB0ci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmMKaW5kZXggZTNjNDJmNS4uZWU3MWJjZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3RtczM4MHRyLmMKQEAgLTY5Myw3ICs2OTMsNyBAQAogICogTk9URTogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCB3aGVuZXZlciB0aGUgc3RhdHVzIG9mIGFueSBUUEwgbXVzdCBiZQogICogbW9kaWZpZWQgYnkgdGhlIGRyaXZlciwgYmVjYXVzZSB0aGUgY29tcGlsZXIgbWF5IG90aGVyd2lzZSBjaGFuZ2UgdGhlCiAgKiBvcmRlciBvZiBpbnN0cnVjdGlvbnMgc3VjaCB0aGF0IHdyaXRpbmcgdGhlIFRQTCBzdGF0dXMgbWF5IGJlIGV4ZWN1dGVkIGF0Ci0gKiBhbiB1bmRlc2lyZWFibGUgdGltZS4gV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQsIHRoZSBzdGF0dXMgaXMgYWx3YXlzCisgKiBhbiB1bmRlc2lyYWJsZSB0aW1lLiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCwgdGhlIHN0YXR1cyBpcyBhbHdheXMKICAqIHdyaXR0ZW4gd2hlbiB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkLgogICovCiBzdGF0aWMgdm9pZCB0bXMzODB0cl93cml0ZV90cGxfc3RhdHVzKFRQTCAqdHBsLCB1bnNpZ25lZCBpbnQgU3RhdHVzKQpAQCAtMTIxMiwxMCArMTIxMiw5IEBACiAJCX0KIAkJZWxzZQogCQl7Ci0JCQlpbnQgaTsKLQkJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0ID0gZGV2LT5tY19saXN0OwotCQkJZm9yIChpPTA7IGk8IGRldi0+bWNfY291bnQ7IGkrKykKLQkJCXsKKwkJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OworCisJCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQkJCSgoY2hhciAqKSgmdHAtPm9jcGwuRnVuY3RBZGRyKSlbMF0gfD0KIAkJCQkJbWNsaXN0LT5kbWlfYWRkclsyXTsKIAkJCQkoKGNoYXIgKikoJnRwLT5vY3BsLkZ1bmN0QWRkcikpWzFdIHw9CkBAIC0xMjI0LDcgKzEyMjMsNiBAQAogCQkJCQltY2xpc3QtPmRtaV9hZGRyWzRdOwogCQkJCSgoY2hhciAqKSgmdHAtPm9jcGwuRnVuY3RBZGRyKSlbM10gfD0KIAkJCQkJbWNsaXN0LT5kbWlfYWRkcls1XTsKLQkJCQltY2xpc3QgPSBtY2xpc3QtPm5leHQ7CiAJCQl9CiAJCX0KIAkJdG1zMzgwdHJfZXhlY19jbWQoZGV2LCBPQ19TRVRfRlVOQ1RfQUREUik7CkBAIC0yMjY2LDcgKzIyNjQsNyBAQAogICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgdXNlZCB3aGVuZXZlciB0aGUgc3RhdHVzIG9mIGFueSBSUEwgbXVzdCBiZQogICogbW9kaWZpZWQgYnkgdGhlIGRyaXZlciwgYmVjYXVzZSB0aGUgY29tcGlsZXIgbWF5IG90aGVyd2lzZSBjaGFuZ2UgdGhlCiAgKiBvcmRlciBvZiBpbnN0cnVjdGlvbnMgc3VjaCB0aGF0IHdyaXRpbmcgdGhlIFJQTCBzdGF0dXMgbWF5IGJlIGV4ZWN1dGVkCi0gKiBhdCBhbiB1bmRlc2lyZWFibGUgdGltZS4gV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQsIHRoZSBzdGF0dXMgaXMKKyAqIGF0IGFuIHVuZGVzaXJhYmxlIHRpbWUuIFdoZW4gdGhpcyBmdW5jdGlvbiBpcyB1c2VkLCB0aGUgc3RhdHVzIGlzCiAgKiBhbHdheXMgd3JpdHRlbiB3aGVuIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQuCiAgKi8KIHN0YXRpYyB2b2lkIHRtczM4MHRyX3dyaXRlX3JwbF9zdGF0dXMoUlBMICpycGwsIHVuc2lnbmVkIGludCBTdGF0dXMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zcGNpLmMgYi9kcml2ZXJzL25ldC90b2tlbnJpbmcvdG1zcGNpLmMKaW5kZXggZjkyZmU4Ni4uZDRjN2MwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL3Rtc3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy90bXNwY2kuYwpAQCAtNTcsNyArNTcsNyBAQAogCXsgezB4MDMsIDB4MDF9LCAiM0NvbSBUb2tlbiBMaW5rIFZlbG9jaXR5In0sCiB9OwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdG1zcGNpX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh0bXNwY2lfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX0NPTVBBUSwgUENJX0RFVklDRV9JRF9DT01QQVFfVE9LRU5SSU5HLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QsIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF9UUiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMSB9LAogCXsgUENJX1ZFTkRPUl9JRF9UQ09OUkFELCBQQ0lfREVWSUNFX0lEX1RDT05SQURfVE9LRU5SSU5HLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAyIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMgYi9kcml2ZXJzL25ldC90c2kxMDhfZXRoLmMKaW5kZXggYTY5YzRhNC4uNjQ3Y2RkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHNpMTA4X2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3RzaTEwOF9ldGguYwpAQCAtMTE4NCwyOSArMTE4NCwxOSBAQAogCiAJcnhjZmcgJj0gfihUU0kxMDhfRUNfUlhDRkdfVUZFIHwgVFNJMTA4X0VDX1JYQ0ZHX01GRSk7CiAKLQlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fCBkZXYtPm1jX2NvdW50KSB7CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgIW5ldGRldl9tY19lbXB0eShkZXYpKSB7CiAJCWludCBpOwotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jID0gZGV2LT5tY19saXN0OworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jOwogCQlyeGNmZyB8PSBUU0kxMDhfRUNfUlhDRkdfTUZFIHwgVFNJMTA4X0VDX1JYQ0ZHX01DX0hBU0g7CiAKIAkJbWVtc2V0KGRhdGEtPm1jX2hhc2gsIDAsIHNpemVvZihkYXRhLT5tY19oYXNoKSk7CiAKLQkJd2hpbGUgKG1jKSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jLCBkZXYpIHsKIAkJCXUzMiBoYXNoLCBjcmM7CiAKLQkJCWlmIChtYy0+ZG1pX2FkZHJsZW4gPT0gNikgewotCQkJCWNyYyA9IGV0aGVyX2NyYyg2LCBtYy0+ZG1pX2FkZHIpOwotCQkJCWhhc2ggPSBjcmMgPj4gMjM7Ci0KLQkJCQlfX3NldF9iaXQoaGFzaCwgJmRhdGEtPm1jX2hhc2hbMF0pOwotCQkJfSBlbHNlIHsKLQkJCQlwcmludGsoS0VSTl9FUlIKLQkJIiVzOiBnb3QgbXVsdGljYXN0IGFkZHJlc3Mgb2YgbGVuZ3RoICVkIGluc3RlYWQgb2YgNi5cbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwKLQkJCQkgICAgICAgbWMtPmRtaV9hZGRybGVuKTsKLQkJCX0KLQotCQkJbWMgPSBtYy0+bmV4dDsKKwkJCWNyYyA9IGV0aGVyX2NyYyg2LCBtYy0+ZG1pX2FkZHIpOworCQkJaGFzaCA9IGNyYyA+PiAyMzsKKwkJCV9fc2V0X2JpdChoYXNoLCAmZGF0YS0+bWNfaGFzaFswXSk7CiAJCX0KIAogCQlUU0lfV1JJVEUoVFNJMTA4X0VDX0hBU0hBRERSLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvMjExNDIuYyBiL2RyaXZlcnMvbmV0L3R1bGlwLzIxMTQyLmMKaW5kZXggOWY2NzQyZi4uMDA3ZDhlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHVsaXAvMjExNDIuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC8yMTE0Mi5jCkBAIC00Myw4ICs0Myw4IEBACiAJaWYgKChjc3IxNCAmIDB4ODApICYmIChjc3IxMiAmIDB4NzAwMCkgIT0gMHg1MDAwKQogCQljc3IxMiB8PSA2OwogCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0JCXByaW50ayhLRVJOX0lORk8iJXM6IDIxMTQzIG5lZ290aWF0aW9uIHN0YXR1cyAlOC44eCwgJXMuXG4iLAotCQkJICAgZGV2LT5uYW1lLCBjc3IxMiwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0pOworCQlkZXZfaW5mbygmZGV2LT5kZXYsICIyMTE0MyBuZWdvdGlhdGlvbiBzdGF0dXMgJTA4eCwgJXNcbiIsCisJCQkgY3NyMTIsIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdKTsKIAlpZiAodHVsaXBfbWVkaWFfY2FwW2Rldi0+aWZfcG9ydF0gJiBNZWRpYUlzTUlJKSB7CiAJCWlmICh0dWxpcF9jaGVja19kdXBsZXgoZGV2KSA8IDApIHsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CkBAIC01NiwyMyArNTYsMjYgQEAKIAl9IGVsc2UgaWYgKHRwLT5ud2F5c2V0KSB7CiAJCS8qIERvbid0IHNjcmV3IHVwIGEgbmVnb3RpYXRlZCBzZXNzaW9uISAqLwogCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJcHJpbnRrKEtFUk5fSU5GTyIlczogVXNpbmcgTldheS1zZXQgJXMgbWVkaWEsIGNzcjEyICU4Ljh4LlxuIiwKLQkJCQkgICBkZXYtPm5hbWUsIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLCBjc3IxMik7CisJCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkJICJVc2luZyBOV2F5LXNldCAlcyBtZWRpYSwgY3NyMTIgJTA4eFxuIiwKKwkJCQkgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sIGNzcjEyKTsKIAl9IGVsc2UgaWYgKHRwLT5tZWRpYWxvY2spIHsKIAkJCTsKIAl9IGVsc2UgaWYgKGRldi0+aWZfcG9ydCA9PSAzKSB7CiAJCWlmIChjc3IxMiAmIDIpIHsJLyogTm8gMTAwbWJwcyBsaW5rIGJlYXQsIHJldmVydCB0byAxMG1icHMuICovCiAJCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJCXByaW50ayhLRVJOX0lORk8iJXM6IE5vIDIxMTQzIDEwMGJhc2VUeCBsaW5rIGJlYXQsICU4Ljh4LCAiCi0JCQkJCSAgICJ0cnlpbmcgTldheS5cbiIsIGRldi0+bmFtZSwgY3NyMTIpOworCQkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkJICJObyAyMTE0MyAxMDBiYXNlVHggbGluayBiZWF0LCAlMDh4LCB0cnlpbmcgTldheVxuIiwKKwkJCQkJIGNzcjEyKTsKIAkJCXQyMTE0Ml9zdGFydF9ud2F5KGRldik7CiAJCQluZXh0X3RpY2sgPSAzKkhaOwogCQl9CiAJfSBlbHNlIGlmICgoY3NyMTIgJiAweDcwMDApICE9IDB4NTAwMCkgewogCQkvKiBOZWdvdGlhdGlvbiBmYWlsZWQuICBTZWFyY2ggbWVkaWEgdHlwZXMuICovCiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9JTkZPIiVzOiAyMTE0MyBuZWdvdGlhdGlvbiBmYWlsZWQsIHN0YXR1cyAlOC44eC5cbiIsCi0JCQkJICAgZGV2LT5uYW1lLCBjc3IxMik7CisJCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkJICIyMTE0MyBuZWdvdGlhdGlvbiBmYWlsZWQsIHN0YXR1cyAlMDh4XG4iLAorCQkJCSBjc3IxMik7CiAJCWlmICghKGNzcjEyICYgNCkpIHsJCS8qIDEwbWJwcyBsaW5rIGJlYXQgZ29vZC4gKi8KIAkJCW5ld19jc3I2ID0gMHg4MjQyMDAwMDsKIAkJCWRldi0+aWZfcG9ydCA9IDA7CkBAIC05MCw4ICs5Myw4IEBACiAJCQlpb3dyaXRlMzIoMSwgaW9hZGRyICsgQ1NSMTMpOwogCQl9CiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9JTkZPIiVzOiBUZXN0aW5nIG5ldyAyMTE0MyBtZWRpYSAlcy5cbiIsCi0JCQkJICAgZGV2LT5uYW1lLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSk7CisJCQlkZXZfaW5mbygmZGV2LT5kZXYsICJUZXN0aW5nIG5ldyAyMTE0MyBtZWRpYSAlc1xuIiwKKwkJCQkgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0pOwogCQlpZiAobmV3X2NzcjYgIT0gKHRwLT5jc3I2ICYgfjB4MDBENSkpIHsKIAkJCXRwLT5jc3I2ICY9IDB4MDBENTsKIAkJCXRwLT5jc3I2IHw9IG5ld19jc3I2OwpAQCAtMTE5LDggKzEyMiw4IEBACiAJdHAtPm53YXkgPSB0cC0+bWVkaWFzZW5zZSA9IDE7CiAJdHAtPm53YXlzZXQgPSB0cC0+bHBhciA9IDA7CiAJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZXN0YXJ0aW5nIDIxMTQzIGF1dG9uZWdvdGlhdGlvbiwgY3NyMTQ9JTguOHguXG4iLAotCQkJICAgZGV2LT5uYW1lLCBjc3IxNCk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVzdGFydGluZyAyMTE0MyBhdXRvbmVnb3RpYXRpb24sIGNzcjE0PSUwOHhcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGNzcjE0KTsKIAlpb3dyaXRlMzIoMHgwMDAxLCBpb2FkZHIgKyBDU1IxMyk7CiAJdWRlbGF5KDEwMCk7CiAJaW93cml0ZTMyKGNzcjE0LCBpb2FkZHIgKyBDU1IxNCk7CkBAIC0xNDcsOCArMTUwLDkgQEAKIAlpZiAoKGNzcjE0ICYgMHg4MCkgJiYgKGNzcjEyICYgMHg3MDAwKSAhPSAweDUwMDApCiAJCWNzcjEyIHw9IDY7CiAJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJcHJpbnRrKEtFUk5fSU5GTyIlczogMjExNDMgbGluayBzdGF0dXMgaW50ZXJydXB0ICU4Ljh4LCBDU1I1ICV4LCAiCi0JCQkgICAiJTguOHguXG4iLCBkZXYtPm5hbWUsIGNzcjEyLCBjc3I1LCBjc3IxNCk7CisJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCSAiMjExNDMgbGluayBzdGF0dXMgaW50ZXJydXB0ICUwOHgsIENTUjUgJXgsICUwOHhcbiIsCisJCQkgY3NyMTIsIGNzcjUsIGNzcjE0KTsKIAogCS8qIElmIE5XYXkgZmluaXNoZWQgYW5kIHdlIGhhdmUgYSBuZWdvdGlhdGVkIHBhcnRuZXIgY2FwYWJpbGl0eS4gKi8KIAlpZiAodHAtPm53YXkgICYmICAhdHAtPm53YXlzZXQgICYmICAoY3NyMTIgJiAweDcwMDApID09IDB4NTAwMCkgewpAQCAtMTcxLDE0ICsxNzUsMTUgQEAKIAogCQlpZiAodHVsaXBfZGVidWcgPiAxKSB7CiAJCQlpZiAodHAtPm53YXlzZXQpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN3aXRjaGluZyB0byAlcyBiYXNlZCBvbiBsaW5rICIKLQkJCQkJICAgIm5lZ290aWF0aW9uICU0LjR4ICYgJTQuNHggPSAlNC40eC5cbiIsCi0JCQkJCSAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sIHRwLT5zeW1fYWR2ZXJ0aXNlLAotCQkJCQkgICB0cC0+bHBhciwgbmVnb3RpYXRlZCk7CisJCQkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJCQkgIlN3aXRjaGluZyB0byAlcyBiYXNlZCBvbiBsaW5rIG5lZ290aWF0aW9uICUwNHggJiAlMDR4ID0gJTA0eFxuIiwKKwkJCQkJIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAorCQkJCQkgdHAtPnN5bV9hZHZlcnRpc2UsIHRwLT5scGFyLAorCQkJCQkgbmVnb3RpYXRlZCk7CiAJCQllbHNlCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEF1dG9uZWdvdGlhdGlvbiBmYWlsZWQsIHVzaW5nICVzLCIKLQkJCQkJICAgIiBsaW5rIGJlYXQgc3RhdHVzICU0LjR4LlxuIiwKLQkJCQkJICAgZGV2LT5uYW1lLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwgY3NyMTIpOworCQkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkJICJBdXRvbmVnb3RpYXRpb24gZmFpbGVkLCB1c2luZyAlcywgbGluayBiZWF0IHN0YXR1cyAlMDR4XG4iLAorCQkJCQkgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sIGNzcjEyKTsKIAkJfQogCiAJCWlmICh0cC0+bXRhYmxlKSB7CkBAIC0yMDEsMTQgKzIwNiwxNCBAQAogI2lmIDAJCQkJCQkJLyogUmVzdGFydCBzaG91bGRuJ3QgYmUgbmVlZGVkLiAqLwogCQlpb3dyaXRlMzIodHAtPmNzcjYgfCBSeE9uLCBpb2FkZHIgKyBDU1I2KTsKIAkJaWYgKHR1bGlwX2RlYnVnID4gMikKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIFJlc3RhcnRpbmcgVHggYW5kIFJ4LCBDU1I1IGlzICU4Ljh4LlxuIiwKLQkJCQkgICBkZXYtPm5hbWUsIGlvcmVhZDMyKGlvYWRkciArIENTUjUpKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIFJlc3RhcnRpbmcgVHggYW5kIFJ4LCBDU1I1IGlzICUwOHhcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSk7CiAjZW5kaWYKIAkJdHVsaXBfc3RhcnRfcnh0eCh0cCk7CiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICBTZXR0aW5nIENTUjYgJTguOHgvJXggQ1NSMTIgJTguOHguXG4iLAotCQkJCSAgIGRldi0+bmFtZSwgdHAtPmNzcjYsIGlvcmVhZDMyKGlvYWRkciArIENTUjYpLAotCQkJCSAgIGlvcmVhZDMyKGlvYWRkciArIENTUjEyKSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICBTZXR0aW5nIENTUjYgJTA4eC8leCBDU1IxMiAlMDh4XG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgdHAtPmNzcjYsIGlvcmVhZDMyKGlvYWRkciArIENTUjYpLAorCQkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIENTUjEyKSk7CiAJfSBlbHNlIGlmICgodHAtPm53YXlzZXQgICYmICAoY3NyNSAmIDB4MDgwMDAwMDApICYmCiAJCSAgICAoZGV2LT5pZl9wb3J0ID09IDMgIHx8ICBkZXYtPmlmX3BvcnQgPT0gNSkgJiYKIAkJICAgIChjc3IxMiAmIDIpID09IDIpIHx8CkBAIC0yMjAsOSArMjI1LDkgQEAKIAkJYWRkX3RpbWVyKCZ0cC0+dGltZXIpOwogCX0gZWxzZSBpZiAoZGV2LT5pZl9wb3J0ID09IDMgIHx8ICBkZXYtPmlmX3BvcnQgPT0gNSkgewogCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJcHJpbnRrKEtFUk5fSU5GTyIlczogMjExNDMgJXMgbGluayBiZWF0ICVzLlxuIiwKLQkJCQkgICBkZXYtPm5hbWUsIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAotCQkJCSAgIChjc3IxMiAmIDIpID8gImZhaWxlZCIgOiAiZ29vZCIpOworCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiMjExNDMgJXMgbGluayBiZWF0ICVzXG4iLAorCQkJCSBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwKKwkJCQkgKGNzcjEyICYgMikgPyAiZmFpbGVkIiA6ICJnb29kIik7CiAJCWlmICgoY3NyMTIgJiAyKSAgJiYgICEgdHAtPm1lZGlhbG9jaykgewogCQkJZGVsX3RpbWVyX3N5bmMoJnRwLT50aW1lcik7CiAJCQl0MjExNDJfc3RhcnRfbndheShkZXYpOwpAQCAtMjMyLDIxICsyMzcsMTggQEAKIAkJCWlvd3JpdGUzMihjc3IxNCAmIH4weDA4MCwgaW9hZGRyICsgQ1NSMTQpOwogCX0gZWxzZSBpZiAoZGV2LT5pZl9wb3J0ID09IDAgIHx8ICBkZXYtPmlmX3BvcnQgPT0gNCkgewogCQlpZiAoKGNzcjEyICYgNCkgPT0gMCkKLQkJCXByaW50ayhLRVJOX0lORk8iJXM6IDIxMTQzIDEwYmFzZVQgbGluayBiZWF0IGdvb2QuXG4iLAotCQkJCSAgIGRldi0+bmFtZSk7CisJCQlkZXZfaW5mbygmZGV2LT5kZXYsICIyMTE0MyAxMGJhc2VUIGxpbmsgYmVhdCBnb29kXG4iKTsKIAl9IGVsc2UgaWYgKCEoY3NyMTIgJiA0KSkgewkJLyogMTBtYnBzIGxpbmsgYmVhdCBnb29kLiAqLwogCQlpZiAodHVsaXBfZGVidWcpCi0JCQlwcmludGsoS0VSTl9JTkZPIiVzOiAyMTE0MyAxMG1icHMgc2Vuc2VkIG1lZGlhLlxuIiwKLQkJCQkgICBkZXYtPm5hbWUpOworCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiMjExNDMgMTBtYnBzIHNlbnNlZCBtZWRpYVxuIik7CiAJCWRldi0+aWZfcG9ydCA9IDA7CiAJfSBlbHNlIGlmICh0cC0+bndheXNldCkgewogCQlpZiAodHVsaXBfZGVidWcpCi0JCQlwcmludGsoS0VSTl9JTkZPIiVzOiAyMTE0MyB1c2luZyBOV2F5LXNldCAlcywgY3NyNiAlOC44eC5cbiIsCi0JCQkJICAgZGV2LT5uYW1lLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwgdHAtPmNzcjYpOworCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiMjExNDMgdXNpbmcgTldheS1zZXQgJXMsIGNzcjYgJTA4eFxuIiwKKwkJCQkgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sIHRwLT5jc3I2KTsKIAl9IGVsc2UgewkJLyogMTAwbWJwcyBsaW5rIGJlYXQgZ29vZC4gKi8KIAkJaWYgKHR1bGlwX2RlYnVnKQotCQkJcHJpbnRrKEtFUk5fSU5GTyIlczogMjExNDMgMTAwYmFzZVR4IHNlbnNlZCBtZWRpYS5cbiIsCi0JCQkJICAgZGV2LT5uYW1lKTsKKwkJCWRldl9pbmZvKCZkZXYtPmRldiwgIjIxMTQzIDEwMGJhc2VUeCBzZW5zZWQgbWVkaWFcbiIpOwogCQlkZXYtPmlmX3BvcnQgPSAzOwogCQl0cC0+Y3NyNiA9IDB4ODM4RTAwMDAgfCAodHAtPmNzcjYgJiAweDIwZmYpOwogCQlpb3dyaXRlMzIoMHgwMDAzRkY3RiwgaW9hZGRyICsgQ1NSMTQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZGUyMTA0eC5jCmluZGV4IGQ0MjU1ZDQuLmNiNDI5NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlMjEwNHguYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9kZTIxMDR4LmMKQEAgLTMzNyw3ICszMzcsNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBkZV9va190b19hZHZlcnRpc2UgKHN0cnVjdCBkZV9wcml2YXRlICpkZSwgdTMyIG5ld19tZWRpYSk7CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRlX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShkZV9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfREVDLCBQQ0lfREVWSUNFX0lEX0RFQ19UVUxJUCwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKIAl7IFBDSV9WRU5ET1JfSURfREVDLCBQQ0lfREVWSUNFX0lEX0RFQ19UVUxJUF9QTFVTLApAQCAtMzgyLDkgKzM4Miw5IEBACiAJCS8qIEluZ29yZSBlYXJsaWVyIGJ1ZmZlcnMuICovCiAJCWlmICgoc3RhdHVzICYgMHhmZmZmKSAhPSAweDdmZmYpIHsKIAkJCWlmIChuZXRpZl9tc2dfcnhfZXJyKGRlKSkKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lICIKLQkJCQkJICAgInNwYW5uZWQgbXVsdGlwbGUgYnVmZmVycywgc3RhdHVzICU4Ljh4IVxuIiwKLQkJCQkJICAgZGUtPmRldi0+bmFtZSwgc3RhdHVzKTsKKwkJCQlkZXZfd2FybigmZGUtPmRldi0+ZGV2LAorCQkJCQkgIk92ZXJzaXplZCBFdGhlcm5ldCBmcmFtZSBzcGFubmVkIG11bHRpcGxlIGJ1ZmZlcnMsIHN0YXR1cyAlMDh4IVxuIiwKKwkJCQkJIHN0YXR1cyk7CiAJCQlkZS0+bmV0X3N0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJfQogCX0gZWxzZSBpZiAoc3RhdHVzICYgUnhFcnJvcikgewpAQCAtNDg3LDcgKzQ4Nyw3IEBACiAJfQogCiAJaWYgKCFyeF93b3JrKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogcnggd29yayBsaW1pdCByZWFjaGVkXG4iLCBkZS0+ZGV2LT5uYW1lKTsKKwkJZGV2X3dhcm4oJmRlLT5kZXYtPmRldiwgInJ4IHdvcmsgbGltaXQgcmVhY2hlZFxuIik7CiAKIAlkZS0+cnhfdGFpbCA9IHJ4X3RhaWw7CiB9CkBAIC01MDQsNyArNTA0LDggQEAKIAogCWlmIChuZXRpZl9tc2dfaW50cihkZSkpCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogaW50ciwgc3RhdHVzICUwOHggbW9kZSAlMDh4IGRlc2MgJXUvJXUvJXVcbiIsCi0JCSAgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMsIGRyMzIoTWFjTW9kZSksIGRlLT5yeF90YWlsLCBkZS0+dHhfaGVhZCwgZGUtPnR4X3RhaWwpOworCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMsIGRyMzIoTWFjTW9kZSksCisJCSAgICAgICBkZS0+cnhfdGFpbCwgZGUtPnR4X2hlYWQsIGRlLT50eF90YWlsKTsKIAogCWR3MzIoTWFjU3RhdHVzLCBzdGF0dXMpOwogCkBAIC01MjksOCArNTMwLDkgQEAKIAogCQlwY2lfcmVhZF9jb25maWdfd29yZChkZS0+cGRldiwgUENJX1NUQVRVUywgJnBjaV9zdGF0dXMpOwogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGUtPnBkZXYsIFBDSV9TVEFUVVMsIHBjaV9zdGF0dXMpOwotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBQQ0kgYnVzIGVycm9yLCBzdGF0dXM9JTA4eCwgUENJIHN0YXR1cz0lMDR4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMsIHBjaV9zdGF0dXMpOworCQlkZXZfZXJyKCZkZS0+ZGV2LT5kZXYsCisJCQkiUENJIGJ1cyBlcnJvciwgc3RhdHVzPSUwOHgsIFBDSSBzdGF0dXM9JTA0eFxuIiwKKwkJCXN0YXR1cywgcGNpX3N0YXR1cyk7CiAJfQogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwpAQCAtNTgyLDcgKzU4NCw4IEBACiAJCQkJZGUtPm5ldF9zdGF0cy50eF9wYWNrZXRzKys7CiAJCQkJZGUtPm5ldF9zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAkJCQlpZiAobmV0aWZfbXNnX3R4X2RvbmUoZGUpKQotCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4IGRvbmUsIHNsb3QgJWRcbiIsIGRlLT5kZXYtPm5hbWUsIHR4X3RhaWwpOworCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR4IGRvbmUsIHNsb3QgJWRcbiIsCisJCQkJCSAgICAgICBkZS0+ZGV2LT5uYW1lLCB0eF90YWlsKTsKIAkJCX0KIAkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CiAJCX0KQEAgLTY3NCwxOSArNjc3LDE4IEBACiAJbWVtc2V0KGhhc2hfdGFibGUsIDAsIHNpemVvZihoYXNoX3RhYmxlKSk7CiAJc2V0X2JpdF9sZSgyNTUsIGhhc2hfdGFibGUpOyAJCQkvKiBCcm9hZGNhc3QgZW50cnkgKi8KIAkvKiBUaGlzIHNob3VsZCB3b3JrIG9uIGJpZy1lbmRpYW4gbWFjaGluZXMgYXMgd2VsbC4gKi8KLQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKLQkgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJaW50IGluZGV4ID0gZXRoZXJfY3JjX2xlKEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyKSAmIDB4MWZmOwogCiAJCXNldF9iaXRfbGUoaW5kZXgsIGhhc2hfdGFibGUpOwotCi0JCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7Ci0JCQkqc2V0dXBfZnJtKysgPSBoYXNoX3RhYmxlW2ldOwotCQkJKnNldHVwX2ZybSsrID0gaGFzaF90YWJsZVtpXTsKLQkJfQotCQlzZXR1cF9mcm0gPSAmZGUtPnNldHVwX2ZyYW1lWzEzKjZdOwogCX0KIAorCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisJCSpzZXR1cF9mcm0rKyA9IGhhc2hfdGFibGVbaV07CisJCSpzZXR1cF9mcm0rKyA9IGhhc2hfdGFibGVbaV07CisJfQorCXNldHVwX2ZybSA9ICZkZS0+c2V0dXBfZnJhbWVbMTMqNl07CisKIAkvKiBGaWxsIHRoZSBmaW5hbCBlbnRyeSB3aXRoIG91ciBwaHlzaWNhbCBhZGRyZXNzLiAqLwogCWVhZGRycyA9ICh1MTYgKilkZXYtPmRldl9hZGRyOwogCSpzZXR1cF9mcm0rKyA9IGVhZGRyc1swXTsgKnNldHVwX2ZybSsrID0gZWFkZHJzWzBdOwpAQCAtNjk4LDIwICs3MDAsMTggQEAKIHsKIAlzdHJ1Y3QgZGVfcHJpdmF0ZSAqZGUgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwotCWludCBpOwogCXUxNiAqZWFkZHJzOwogCiAJLyogV2UgaGF2ZSA8PSAxNCBhZGRyZXNzZXMgc28gd2UgY2FuIHVzZSB0aGUgd29uZGVyZnVsCiAJICAgMTYgYWRkcmVzcyBwZXJmZWN0IGZpbHRlcmluZyBvZiB0aGUgVHVsaXAuICovCi0JZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBpIDwgZGV2LT5tY19jb3VudDsKLQkgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJZWFkZHJzID0gKHUxNiAqKW1jbGlzdC0+ZG1pX2FkZHI7CiAJCSpzZXR1cF9mcm0rKyA9ICplYWRkcnM7ICpzZXR1cF9mcm0rKyA9ICplYWRkcnMrKzsKIAkJKnNldHVwX2ZybSsrID0gKmVhZGRyczsgKnNldHVwX2ZybSsrID0gKmVhZGRycysrOwogCQkqc2V0dXBfZnJtKysgPSAqZWFkZHJzOyAqc2V0dXBfZnJtKysgPSAqZWFkZHJzKys7CiAJfQogCS8qIEZpbGwgdGhlIHVudXNlZCBlbnRyaWVzIHdpdGggdGhlIGJyb2FkY2FzdCBhZGRyZXNzLiAqLwotCW1lbXNldChzZXR1cF9mcm0sIDB4ZmYsICgxNS1pKSoxMik7CisJbWVtc2V0KHNldHVwX2ZybSwgMHhmZiwgKDE1IC0gbmV0ZGV2X21jX2NvdW50KGRldikpICogMTIpOwogCXNldHVwX2ZybSA9ICZkZS0+c2V0dXBfZnJhbWVbMTUqNl07CiAKIAkvKiBGaWxsIHRoZSBmaW5hbCBlbnRyeSB3aXRoIG91ciBwaHlzaWNhbCBhZGRyZXNzLiAqLwpAQCAtNzM4LDcgKzczOCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICgoZGV2LT5tY19jb3VudCA+IDEwMDApIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCWlmICgobmV0ZGV2X21jX2NvdW50KGRldikgPiAxMDAwKSB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJLyogVG9vIG1hbnkgdG8gZmlsdGVyIHdlbGwgLS0gYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCQltYWNtb2RlIHw9IEFjY2VwdEFsbE11bHRpY2FzdDsKIAkJZ290byBvdXQ7CkBAIC03NDYsNyArNzQ2LDcgQEAKIAogCS8qIE5vdGUgdGhhdCBvbmx5IHRoZSBsb3ctYWRkcmVzcyBzaG9ydHdvcmQgb2Ygc2V0dXBfZnJhbWUgaXMgdmFsaWQhCiAJICAgVGhlIHZhbHVlcyBhcmUgZG91YmxlZCBmb3IgYmlnLWVuZGlhbiBhcmNoaXRlY3R1cmVzLiAqLwotCWlmIChkZXYtPm1jX2NvdW50ID4gMTQpCS8qIE11c3QgdXNlIGEgbXVsdGljYXN0IGhhc2ggdGFibGUuICovCisJaWYgKG5ldGRldl9tY19jb3VudChkZXYpID4gMTQpCS8qIE11c3QgdXNlIGEgbXVsdGljYXN0IGhhc2ggdGFibGUuICovCiAJCWJ1aWxkX3NldHVwX2ZyYW1lX2hhc2ggKGRlLT5zZXR1cF9mcmFtZSwgZGV2KTsKIAllbHNlCiAJCWJ1aWxkX3NldHVwX2ZyYW1lX3BlcmZlY3QgKGRlLT5zZXR1cF9mcmFtZSwgZGV2KTsKQEAgLTg3MCw3ICs4NzAsNyBAQAogCQl1ZGVsYXkoMTAwKTsKIAl9CiAKLQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogdGltZW91dCBleHBpcmVkIHN0b3BwaW5nIERNQVxuIiwgZGUtPmRldi0+bmFtZSk7CisJZGV2X3dhcm4oJmRlLT5kZXYtPmRldiwgInRpbWVvdXQgZXhwaXJlZCBzdG9wcGluZyBETUFcbiIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZGVfc3RhcnRfcnh0eCAoc3RydWN0IGRlX3ByaXZhdGUgKmRlKQpAQCAtOTA1LDggKzkwNSw4IEBACiAJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRlLT5kZXYpKSB7CiAJCW5ldGlmX2NhcnJpZXJfb24oZGUtPmRldik7CiAJCWlmIChuZXRpZl9tc2dfbGluayhkZSkpCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayB1cCwgbWVkaWEgJXNcbiIsCi0JCQkgICAgICAgZGUtPmRldi0+bmFtZSwgbWVkaWFfbmFtZVtkZS0+bWVkaWFfdHlwZV0pOworCQkJZGV2X2luZm8oJmRlLT5kZXYtPmRldiwgImxpbmsgdXAsIG1lZGlhICVzXG4iLAorCQkJCSBtZWRpYV9uYW1lW2RlLT5tZWRpYV90eXBlXSk7CiAJfQogfQogCkBAIC05MTUsNyArOTE1LDcgQEAKIAlpZiAobmV0aWZfY2Fycmllcl9vayhkZS0+ZGV2KSkgewogCQluZXRpZl9jYXJyaWVyX29mZihkZS0+ZGV2KTsKIAkJaWYgKG5ldGlmX21zZ19saW5rKGRlKSkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBsaW5rIGRvd25cbiIsIGRlLT5kZXYtPm5hbWUpOworCQkJZGV2X2luZm8oJmRlLT5kZXYtPmRldiwgImxpbmsgZG93blxuIik7CiAJfQogfQogCkBAIC05MjUsNyArOTI1LDggQEAKIAl1MzIgbWFjbW9kZSA9IGRyMzIoTWFjTW9kZSk7CiAKIAlpZiAoZGVfaXNfcnVubmluZyhkZSkpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjaGlwIGlzIHJ1bm5pbmcgd2hpbGUgY2hhbmdpbmcgbWVkaWEhXG4iLCBkZS0+ZGV2LT5uYW1lKTsKKwkJZGV2X3dhcm4oJmRlLT5kZXYtPmRldiwKKwkJCSAiY2hpcCBpcyBydW5uaW5nIHdoaWxlIGNoYW5naW5nIG1lZGlhIVxuIik7CiAKIAlpZiAoZGUtPmRlMjEwNDApCiAJCWR3MzIoQ1NSMTEsIEZVTExfRFVQTEVYX01BR0lDKTsKQEAgLTk0NSwxNSArOTQ2LDE1IEBACiAJCW1hY21vZGUgJj0gfkZ1bGxEdXBsZXg7CiAKIAlpZiAobmV0aWZfbXNnX2xpbmsoZGUpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJICAgICAgICIlczogc2V0IGxpbmsgJXNcbiIKLQkJICAgICAgICIlczogICAgbW9kZSAweCV4LCBzaWEgMHgleCwweCV4LDB4JXgsMHgleFxuIgotCQkgICAgICAgIiVzOiAgICBzZXQgbW9kZSAweCV4LCBzZXQgc2lhIDB4JXgsMHgleCwweCV4XG4iLAotCQkgICAgICAgZGUtPmRldi0+bmFtZSwgbWVkaWFfbmFtZVttZWRpYV0sCi0JCSAgICAgICBkZS0+ZGV2LT5uYW1lLCBkcjMyKE1hY01vZGUpLCBkcjMyKFNJQVN0YXR1cyksCi0JCSAgICAgICBkcjMyKENTUjEzKSwgZHIzMihDU1IxNCksIGRyMzIoQ1NSMTUpLAotCQkgICAgICAgZGUtPmRldi0+bmFtZSwgbWFjbW9kZSwgZGUtPm1lZGlhW21lZGlhXS5jc3IxMywKLQkJICAgICAgIGRlLT5tZWRpYVttZWRpYV0uY3NyMTQsIGRlLT5tZWRpYVttZWRpYV0uY3NyMTUpOworCQlkZXZfaW5mbygmZGUtPmRldi0+ZGV2LCAic2V0IGxpbmsgJXNcbiIsIG1lZGlhX25hbWVbbWVkaWFdKTsKKwkJZGV2X2luZm8oJmRlLT5kZXYtPmRldiwgIm1vZGUgMHgleCwgc2lhIDB4JXgsMHgleCwweCV4LDB4JXhcbiIsCisJCQkgZHIzMihNYWNNb2RlKSwgZHIzMihTSUFTdGF0dXMpLAorCQkJIGRyMzIoQ1NSMTMpLCBkcjMyKENTUjE0KSwgZHIzMihDU1IxNSkpOworCisJCWRldl9pbmZvKCZkZS0+ZGV2LT5kZXYsCisJCQkgInNldCBtb2RlIDB4JXgsIHNldCBzaWEgMHgleCwweCV4LDB4JXhcbiIsCisJCQkgbWFjbW9kZSwgZGUtPm1lZGlhW21lZGlhXS5jc3IxMywKKwkJCSBkZS0+bWVkaWFbbWVkaWFdLmNzcjE0LCBkZS0+bWVkaWFbbWVkaWFdLmNzcjE1KTsKIAl9CiAJaWYgKG1hY21vZGUgIT0gZHIzMihNYWNNb2RlKSkKIAkJZHczMihNYWNNb2RlLCBtYWNtb2RlKTsKQEAgLTk5Miw5ICs5OTMsOCBAQAogCQkJZGVfbGlua191cChkZSk7CiAJCWVsc2UKIAkJCWlmIChuZXRpZl9tc2dfdGltZXIoZGUpKQotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBsaW5rIG9rLCBzdGF0dXMgJXhcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgbWVkaWFfbmFtZVtkZS0+bWVkaWFfdHlwZV0sCi0JCQkJICAgICAgIHN0YXR1cyk7CisJCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiJXMgbGluayBvaywgc3RhdHVzICV4XG4iLAorCQkJCQkgbWVkaWFfbmFtZVtkZS0+bWVkaWFfdHlwZV0sIHN0YXR1cyk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEwMjIsOCArMTAyMiw4IEBACiAJYWRkX3RpbWVyKCZkZS0+bWVkaWFfdGltZXIpOwogCiAJaWYgKG5ldGlmX21zZ190aW1lcihkZSkpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBubyBsaW5rLCB0cnlpbmcgbWVkaWEgJXMsIHN0YXR1cyAleFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgbWVkaWFfbmFtZVtkZS0+bWVkaWFfdHlwZV0sIHN0YXR1cyk7CisJCWRldl9pbmZvKCZkZXYtPmRldiwgIm5vIGxpbmssIHRyeWluZyBtZWRpYSAlcywgc3RhdHVzICV4XG4iLAorCQkJIG1lZGlhX25hbWVbZGUtPm1lZGlhX3R5cGVdLCBzdGF0dXMpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlX29rX3RvX2FkdmVydGlzZSAoc3RydWN0IGRlX3ByaXZhdGUgKmRlLCB1MzIgbmV3X21lZGlhKQpAQCAtMTA3OSw5ICsxMDc5LDEwIEBACiAJCQlkZV9saW5rX3VwKGRlKTsKIAkJZWxzZQogCQkJaWYgKG5ldGlmX21zZ190aW1lcihkZSkpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIGxpbmsgb2ssIG1vZGUgJXggc3RhdHVzICV4XG4iLAotCQkJCSAgICAgICBkZXYtPm5hbWUsIG1lZGlhX25hbWVbZGUtPm1lZGlhX3R5cGVdLAotCQkJCSAgICAgICBkcjMyKE1hY01vZGUpLCBzdGF0dXMpOworCQkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkJICIlcyBsaW5rIG9rLCBtb2RlICV4IHN0YXR1cyAleFxuIiwKKwkJCQkJIG1lZGlhX25hbWVbZGUtPm1lZGlhX3R5cGVdLAorCQkJCQkgZHIzMihNYWNNb2RlKSwgc3RhdHVzKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTE1MCw4ICsxMTUxLDggQEAKIAlhZGRfdGltZXIoJmRlLT5tZWRpYV90aW1lcik7CiAKIAlpZiAobmV0aWZfbXNnX3RpbWVyKGRlKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IG5vIGxpbmssIHRyeWluZyBtZWRpYSAlcywgc3RhdHVzICV4XG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCBtZWRpYV9uYW1lW2RlLT5tZWRpYV90eXBlXSwgc3RhdHVzKTsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAibm8gbGluaywgdHJ5aW5nIG1lZGlhICVzLCBzdGF0dXMgJXhcbiIsCisJCQkgbWVkaWFfbmFtZVtkZS0+bWVkaWFfdHlwZV0sIHN0YXR1cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGRlX21lZGlhX2ludGVycnVwdCAoc3RydWN0IGRlX3ByaXZhdGUgKmRlLCB1MzIgc3RhdHVzKQpAQCAtMTM3OCw4ICsxMzc5LDcgQEAKIAogCXJjID0gZGVfYWxsb2NfcmluZ3MoZGUpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiByaW5nIGFsbG9jYXRpb24gZmFpbHVyZSwgZXJyPSVkXG4iLAotCQkgICAgICAgZGV2LT5uYW1lLCByYyk7CisJCWRldl9lcnIoJmRldi0+ZGV2LCAicmluZyBhbGxvY2F0aW9uIGZhaWx1cmUsIGVycj0lZFxuIiwgcmMpOwogCQlyZXR1cm4gcmM7CiAJfQogCkBAIC0xMzg3LDE1ICsxMzg3LDE0IEBACiAKIAlyYyA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCBkZV9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldik7CiAJaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IElSUSAlZCByZXF1ZXN0IGZhaWx1cmUsIGVycj0lZFxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZGV2LT5pcnEsIHJjKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJJUlEgJWQgcmVxdWVzdCBmYWlsdXJlLCBlcnI9JWRcbiIsCisJCQlkZXYtPmlycSwgcmMpOwogCQlnb3RvIGVycl9vdXRfZnJlZTsKIAl9CiAKIAlyYyA9IGRlX2luaXRfaHcoZGUpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBoL3cgaW5pdCBmYWlsdXJlLCBlcnI9JWRcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIHJjKTsKKwkJZGV2X2VycigmZGV2LT5kZXYsICJoL3cgaW5pdCBmYWlsdXJlLCBlcnI9JWRcbiIsIHJjKTsKIAkJZ290byBlcnJfb3V0X2ZyZWVfaXJxOwogCX0KIApAQCAtMTY2Niw4ICsxNjY1LDggQEAKIAlzdGF0dXMgPSBkcjMyKFNJQVN0YXR1cyk7CiAJZHczMihTSUFTdGF0dXMsIChzdGF0dXMgJiB+TldheVN0YXRlKSB8IE5XYXlSZXN0YXJ0KTsKIAlpZiAobmV0aWZfbXNnX2xpbmsoZGUpKQotCQlwcmludGsoS0VSTl9JTkZPICIlczogbGluayBud2F5IHJlc3RhcnQsIHN0YXR1cyAleCwleFxuIiwKLQkJICAgICAgIGRlLT5kZXYtPm5hbWUsIHN0YXR1cywgZHIzMihTSUFTdGF0dXMpKTsKKwkJZGV2X2luZm8oJmRlLT5kZXYtPmRldiwgImxpbmsgbndheSByZXN0YXJ0LCBzdGF0dXMgJXgsJXhcbiIsCisJCQkgc3RhdHVzLCBkcjMyKFNJQVN0YXR1cykpOwogCXJldHVybiAwOwogfQogCkBAIC0xNzExLDcgKzE3MTAsNyBAQAogCQlkZS0+ZGV2LT5kZXZfYWRkcltpXSA9IHZhbHVlOwogCQl1ZGVsYXkoMSk7CiAJCWlmIChib2d1c2NudCA8PSAwKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggInRpbWVvdXQgcmVhZGluZyAyMTA0MCBNQUMgYWRkcmVzcyBieXRlICV1XG4iLCBpKTsKKwkJCXByX3dhcm5pbmcoUEZYICJ0aW1lb3V0IHJlYWRpbmcgMjEwNDAgTUFDIGFkZHJlc3MgYnl0ZSAldVxuIiwgaSk7CiAJfQogfQogCkBAIC0xODMwLDkgKzE4MjksOCBAQAogCX0KIAogCWlmIChuZXRpZl9tc2dfcHJvYmUoZGUpKQotCQlwcmludGsoS0VSTl9JTkZPICJkZSVkOiBTUk9NIGxlYWYgb2Zmc2V0ICV1LCBkZWZhdWx0IG1lZGlhICVzXG4iLAotCQkgICAgICAgZGUtPmJvYXJkX2lkeCwgb2ZzLAotCQkgICAgICAgbWVkaWFfbmFtZVtkZS0+bWVkaWFfdHlwZV0pOworCQlwcl9pbmZvKCJkZSVkOiBTUk9NIGxlYWYgb2Zmc2V0ICV1LCBkZWZhdWx0IG1lZGlhICVzXG4iLAorCQkgICAgICAgZGUtPmJvYXJkX2lkeCwgb2ZzLCBtZWRpYV9uYW1lW2RlLT5tZWRpYV90eXBlXSk7CiAKIAkvKiBpbml0IFNJQSByZWdpc3RlciB2YWx1ZXMgdG8gZGVmYXVsdHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgREVfTUFYX01FRElBOyBpKyspIHsKQEAgLTE4NzksOSArMTg3Nyw5IEBACiAJCWRlLT5tZWRpYVtpZHhdLnR5cGUgPSBpZHg7CiAKIAkJaWYgKG5ldGlmX21zZ19wcm9iZShkZSkpCi0JCQlwcmludGsoS0VSTl9JTkZPICJkZSVkOiAgIG1lZGlhIGJsb2NrICMldTogJXMiLAotCQkJICAgICAgIGRlLT5ib2FyZF9pZHgsIGksCi0JCQkgICAgICAgbWVkaWFfbmFtZVtkZS0+bWVkaWFbaWR4XS50eXBlXSk7CisJCQlwcl9pbmZvKCJkZSVkOiAgIG1lZGlhIGJsb2NrICMldTogJXMiLAorCQkJCWRlLT5ib2FyZF9pZHgsIGksCisJCQkJbWVkaWFfbmFtZVtkZS0+bWVkaWFbaWR4XS50eXBlXSk7CiAKIAkJYnVmcCArPSBzaXplb2YgKGliLT5vcHRzKTsKIApAQCAtMTg5MywxMyArMTg5MSwxMyBAQAogCQkJCXNpemVvZihpYi0+Y3NyMTUpOwogCiAJCQlpZiAobmV0aWZfbXNnX3Byb2JlKGRlKSkKLQkJCQlwcmludGsoIiAoJXgsJXgsJXgpXG4iLAotCQkJCSAgICAgICBkZS0+bWVkaWFbaWR4XS5jc3IxMywKLQkJCQkgICAgICAgZGUtPm1lZGlhW2lkeF0uY3NyMTQsCi0JCQkJICAgICAgIGRlLT5tZWRpYVtpZHhdLmNzcjE1KTsKKwkJCQlwcl9jb250KCIgKCV4LCV4LCV4KVxuIiwKKwkJCQkJZGUtPm1lZGlhW2lkeF0uY3NyMTMsCisJCQkJCWRlLT5tZWRpYVtpZHhdLmNzcjE0LAorCQkJCQlkZS0+bWVkaWFbaWR4XS5jc3IxNSk7CiAKIAkJfSBlbHNlIGlmIChuZXRpZl9tc2dfcHJvYmUoZGUpKQotCQkJcHJpbnRrKCJcbiIpOworCQkJcHJfY29udCgiXG4iKTsKIAogCQlpZiAoYnVmcCA+ICgodm9pZCAqKSZlZV9kYXRhW0RFX0VFUFJPTV9TSVpFIC0gM10pKQogCQkJYnJlYWs7CkBAIC0yMDA1LDcgKzIwMDMsNyBAQAogCS8qIGNoZWNrIGZvciBpbnZhbGlkIElSUSB2YWx1ZSAqLwogCWlmIChwZGV2LT5pcnEgPCAyKSB7CiAJCXJjID0gLUVJTzsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiaW52YWxpZCBpcnEgKCVkKSBmb3IgcGNpIGRldiAlc1xuIiwKKwkJcHJfZXJyKFBGWCAiaW52YWxpZCBpcnEgKCVkKSBmb3IgcGNpIGRldiAlc1xuIiwKIAkJICAgICAgIHBkZXYtPmlycSwgcGNpX25hbWUocGRldikpOwogCQlnb3RvIGVycl9vdXRfcmVzOwogCX0KQEAgLTIwMTYsMTQgKzIwMTQsMTQgQEAKIAlwY2lhZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDEpOwogCWlmICghcGNpYWRkcikgewogCQlyYyA9IC1FSU87Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIm5vIE1NSU8gcmVzb3VyY2UgZm9yIHBjaSBkZXYgJXNcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCXByX2VycihQRlggIm5vIE1NSU8gcmVzb3VyY2UgZm9yIHBjaSBkZXYgJXNcbiIsIHBjaV9uYW1lKHBkZXYpKTsKIAkJZ290byBlcnJfb3V0X3JlczsKIAl9CiAJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMSkgPCBERV9SRUdTX1NJWkUpIHsKIAkJcmMgPSAtRUlPOwotCQlwcmludGsoS0VSTl9FUlIgUEZYICJNTUlPIHJlc291cmNlICglbGx4KSB0b28gc21hbGwgb24gcGNpIGRldiAlc1xuIiwKLQkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSwgcGNpX25hbWUocGRldikpOworCQlwcl9lcnIoUEZYICJNTUlPIHJlc291cmNlICglbGx4KSB0b28gc21hbGwgb24gcGNpIGRldiAlc1xuIiwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSwKKwkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKIAkJZ290byBlcnJfb3V0X3JlczsKIAl9CiAKQEAgLTIwMzEsOSArMjAyOSw5IEBACiAJcmVncyA9IGlvcmVtYXBfbm9jYWNoZShwY2lhZGRyLCBERV9SRUdTX1NJWkUpOwogCWlmICghcmVncykgewogCQlyYyA9IC1FSU87Ci0JCXByaW50ayhLRVJOX0VSUiBQRlggIkNhbm5vdCBtYXAgUENJIE1NSU8gKCVsbHhAJWx4KSBvbiBwY2kgZGV2ICVzXG4iLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDEpLAotCQkJcGNpYWRkciwgcGNpX25hbWUocGRldikpOworCQlwcl9lcnIoUEZYICJDYW5ub3QgbWFwIFBDSSBNTUlPICglbGx4QCVseCkgb24gcGNpIGRldiAlc1xuIiwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSwKKwkJICAgICAgIHBjaWFkZHIsIHBjaV9uYW1lKHBkZXYpKTsKIAkJZ290byBlcnJfb3V0X3JlczsKIAl9CiAJZGV2LT5iYXNlX2FkZHIgPSAodW5zaWduZWQgbG9uZykgcmVnczsKQEAgLTIwNDQsOCArMjA0Miw3IEBACiAJLyogbWFrZSBzdXJlIGhhcmR3YXJlIGlzIG5vdCBydW5uaW5nICovCiAJcmMgPSBkZV9yZXNldF9tYWMoZGUpOwogCWlmIChyYykgewotCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW5ub3QgcmVzZXQgTUFDLCBwY2kgZGV2ICVzXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQlwcl9lcnIoUEZYICJDYW5ub3QgcmVzZXQgTUFDLCBwY2kgZGV2ICVzXG4iLCBwY2lfbmFtZShwZGV2KSk7CiAJCWdvdG8gZXJyX291dF9pb21hcDsKIAl9CiAKQEAgLTIwNjUsMTIgKzIwNjIsMTEgQEAKIAkJZ290byBlcnJfb3V0X2lvbWFwOwogCiAJLyogcHJpbnQgaW5mbyBhYm91dCBib2FyZCBhbmQgaW50ZXJmYWNlIGp1c3QgcmVnaXN0ZXJlZCAqLwotCXByaW50ayAoS0VSTl9JTkZPICIlczogJXMgYXQgMHglbHgsICVwTSwgSVJRICVkXG4iLAotCQlkZXYtPm5hbWUsCi0JCWRlLT5kZTIxMDQwID8gIjIxMDQwIiA6ICIyMTA0MSIsCi0JCWRldi0+YmFzZV9hZGRyLAotCQlkZXYtPmRldl9hZGRyLAotCQlkZXYtPmlycSk7CisJZGV2X2luZm8oJmRldi0+ZGV2LCAiJXMgYXQgMHglbHgsICVwTSwgSVJRICVkXG4iLAorCQkgZGUtPmRlMjEwNDAgPyAiMjEwNDAiIDogIjIxMDQxIiwKKwkJIGRldi0+YmFzZV9hZGRyLAorCQkgZGV2LT5kZXZfYWRkciwKKwkJIGRldi0+aXJxKTsKIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCkBAIC0yMTU4LDggKzIxNTQsNyBAQAogCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQogCQlnb3RvIG91dF9hdHRhY2g7CiAJaWYgKChyZXR2YWwgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KSkpIHsKLQkJcHJpbnRrIChLRVJOX0VSUiAiJXM6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCBpbiByZXN1bWVcbiIsCi0JCQlkZXYtPm5hbWUpOworCQlkZXZfZXJyKCZkZXYtPmRldiwgInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCBpbiByZXN1bWVcbiIpOwogCQlnb3RvIG91dDsKIAl9CiAJZGVfaW5pdF9odyhkZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvZGU0eDUuYwppbmRleCBhODM0OWI3Li5jNGVjYjlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKQEAgLTE5NTEsOSArMTk1MSw5IEBACiBTZXRNdWx0aWNhc3RGaWx0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBzdHJ1Y3QgZGU0eDVfcHJpdmF0ZSAqbHAgPSBuZXRkZXZfcHJpdihkZXYpOwotICAgIHN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pPWRldi0+bWNfbGlzdDsKKyAgICBzdHJ1Y3QgZGV2X21jX2xpc3QgKmRtaTsKICAgICB1X2xvbmcgaW9iYXNlID0gZGV2LT5iYXNlX2FkZHI7Ci0gICAgaW50IGksIGosIGJpdCwgYnl0ZTsKKyAgICBpbnQgaSwgYml0LCBieXRlOwogICAgIHUxNiBoYXNoY29kZTsKICAgICB1MzIgb21yLCBjcmM7CiAgICAgY2hhciAqcGE7CkBAIC0xOTYzLDEyICsxOTYzLDExIEBACiAgICAgb21yICY9IH4oT01SX1BSIHwgT01SX1BNKTsKICAgICBwYSA9IGJ1aWxkX3NldHVwX2ZyYW1lKGRldiwgQUxMKTsgICAgICAgIC8qIEJ1aWxkIHRoZSBiYXNpYyBmcmFtZSAqLwogCi0gICAgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fCAoZGV2LT5tY19jb3VudCA+IDE0KSkgeworICAgIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgKG5ldGRldl9tY19jb3VudChkZXYpID4gMTQpKSB7CiAJb21yIHw9IE9NUl9QTTsgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhc3MgYWxsIG11bHRpY2FzdHMgKi8KICAgICB9IGVsc2UgaWYgKGxwLT5zZXR1cF9mID09IEhBU0hfUEVSRikgeyAgIC8qIEhhc2ggRmlsdGVyaW5nICovCi0JZm9yIChpPTA7aTxkZXYtPm1jX2NvdW50O2krKykgeyAgICAgIC8qIGZvciBlYWNoIGFkZHJlc3MgaW4gdGhlIGxpc3QgKi8KLQkgICAgYWRkcnM9ZG1pLT5kbWlfYWRkcjsKLQkgICAgZG1pPWRtaS0+bmV4dDsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgeworCSAgICBhZGRycyA9IGRtaS0+ZG1pX2FkZHI7CiAJICAgIGlmICgoKmFkZHJzICYgMHgwMSkgPT0gMSkgeyAgICAgIC8qIG11bHRpY2FzdCBhZGRyZXNzPyAqLwogCQljcmMgPSBldGhlcl9jcmNfbGUoRVRIX0FMRU4sIGFkZHJzKTsKIAkJaGFzaGNvZGUgPSBjcmMgJiBIQVNIX0JJVFM7ICAvKiBoYXNoY29kZSBpcyA5IExTYiBvZiBDUkMgKi8KQEAgLTE5ODQsOSArMTk4Myw4IEBACiAJICAgIH0KIAl9CiAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBQZXJmZWN0IGZpbHRlcmluZyAqLwotCWZvciAoaj0wOyBqPGRldi0+bWNfY291bnQ7IGorKykgewotCSAgICBhZGRycz1kbWktPmRtaV9hZGRyOwotCSAgICBkbWk9ZG1pLT5uZXh0OworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CisJICAgIGFkZHJzID0gZG1pLT5kbWlfYWRkcjsKIAkgICAgZm9yIChpPTA7IGk8RVRIX0FMRU47IGkrKykgewogCQkqKHBhICsgKGkmMSkpID0gKmFkZHJzKys7CiAJCWlmIChpICYgMHgwMSkgcGEgKz0gNDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RtZmUuYwppbmRleCA2ZjQ0ZWJmLi45NWIzOGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kbWZlLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvZG1mZS5jCkBAIC02MSw2ICs2MSw4IEBACiAgICAgVGVzdCBhbmQgbWFrZSBzdXJlIFBDSSBsYXRlbmN5IGlzIG5vdyBjb3JyZWN0IGZvciBhbGwgY2FzZXMuCiAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6ICIgZm10CisKICNkZWZpbmUgRFJWX05BTUUJImRtZmUiCiAjZGVmaW5lIERSVl9WRVJTSU9OCSIxLjM2LjQiCiAjZGVmaW5lIERSVl9SRUxEQVRFCSIyMDAyLTAxLTE3IgpAQCAtMTQ5LDE2ICsxNTEsMTcgQEAKICNkZWZpbmUgRE1GRV9UWF9USU1FT1VUICgoMypIWikvMikJLyogdHggcGFja2V0IHRpbWUtb3V0IHRpbWUgMS41IHMiICovCiAjZGVmaW5lIERNRkVfVFhfS0lDSyAJKEhaLzIpCS8qIHR4IHBhY2tldCBLaWNrLW91dCB0aW1lIDAuNSBzIiAqLwogCi0jZGVmaW5lIERNRkVfREJVRyhkYnVnX25vdywgbXNnLCB2YWx1ZSkgXAotCWRvIHsgXAotIAkJaWYgKGRtZmVfZGVidWcgfHwgKGRidWdfbm93KSkgXAotCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6ICVzICVseFxuIixcCi0gCQkJCShtc2cpLCAobG9uZykgKHZhbHVlKSk7IFwKKyNkZWZpbmUgRE1GRV9EQlVHKGRidWdfbm93LCBtc2csIHZhbHVlKQkJCVwKKwlkbyB7CQkJCQkJXAorCQlpZiAoZG1mZV9kZWJ1ZyB8fCAoZGJ1Z19ub3cpKQkJXAorCQkJcHJfZXJyKCIlcyAlbHhcbiIsCQlcCisJCQkgICAgICAgKG1zZyksIChsb25nKSAodmFsdWUpKTsJXAogCX0gd2hpbGUgKDApCiAKLSNkZWZpbmUgU0hPV19NRURJQV9UWVBFKG1vZGUpIFwKLQlwcmludGsgKEtFUk5fSU5GTyBEUlZfTkFNRSAiOiBDaGFuZ2UgU3BlZWQgdG8gJXNNaHogJXMgZHVwbGV4XG4iICwgXAotCQkobW9kZSAmIDEpID8gIjEwMCI6IjEwIiwgKG1vZGUgJiA0KSA/ICJmdWxsIjoiaGFsZiIpOworI2RlZmluZSBTSE9XX01FRElBX1RZUEUobW9kZSkJCQkJXAorCXByX2luZm8oIkNoYW5nZSBTcGVlZCB0byAlc01oeiAlcyBkdXBsZXhcbiIgLAlcCisJCShtb2RlICYgMSkgPyAiMTAwIjoiMTAiLAkJXAorCQkobW9kZSAmIDQpID8gImZ1bGwiOiJoYWxmIik7CiAKIAogLyogQ1I5IGRlZmluaXRpb246IFNST00vTUlJICovCkBAIC0zMjcsOCArMzMwLDggQEAKIHN0YXRpYyB2b2lkIGRtZmVfZGVzY3JpcHRvcl9pbml0KHN0cnVjdCBkbWZlX2JvYXJkX2luZm8gKiwgdW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgdm9pZCBhbGxvY2F0ZV9yeF9idWZmZXIoc3RydWN0IGRtZmVfYm9hcmRfaW5mbyAqKTsKIHN0YXRpYyB2b2lkIHVwZGF0ZV9jcjYodTMyLCB1bnNpZ25lZCBsb25nKTsKLXN0YXRpYyB2b2lkIHNlbmRfZmlsdGVyX2ZyYW1lKHN0cnVjdCBERVZJQ0UgKiAsaW50KTsKLXN0YXRpYyB2b2lkIGRtOTEzMl9pZF90YWJsZShzdHJ1Y3QgREVWSUNFICogLGludCk7CitzdGF0aWMgdm9pZCBzZW5kX2ZpbHRlcl9mcmFtZShzdHJ1Y3QgREVWSUNFICopOworc3RhdGljIHZvaWQgZG05MTMyX2lkX3RhYmxlKHN0cnVjdCBERVZJQ0UgKik7CiBzdGF0aWMgdTE2IHBoeV9yZWFkKHVuc2lnbmVkIGxvbmcsIHU4LCB1OCwgdTMyKTsKIHN0YXRpYyB2b2lkIHBoeV93cml0ZSh1bnNpZ25lZCBsb25nLCB1OCwgdTgsIHUxNiwgdTMyKTsKIHN0YXRpYyB2b2lkIHBoeV93cml0ZV8xYml0KHVuc2lnbmVkIGxvbmcsIHUzMik7CkBAIC0zOTEsOCArMzk0LDcgQEAKIAkJc3RydWN0IGRldmljZV9ub2RlICpkcCA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShwZGV2KTsKIAogCQlpZiAoZHAgJiYgb2ZfZ2V0X3Byb3BlcnR5KGRwLCAibG9jYWwtbWFjLWFkZHJlc3MiLCBOVUxMKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyBEUlZfTkFNRQotCQkJICAgICAgICI6IHNraXBwaW5nIG9uLWJvYXJkIERNOTEweCAodXNlIHR1bGlwKVxuIik7CisJCQlwcl9pbmZvKCJza2lwcGluZyBvbi1ib2FyZCBETTkxMHggKHVzZSB0dWxpcClcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CkBAIC00MDUsOCArNDA3LDcgQEAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCiAJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRQotCQkJIjogMzItYml0IFBDSSBETUEgbm90IGF2YWlsYWJsZS5cbiIpOworCQlwcl93YXJuaW5nKCIzMi1iaXQgUENJIERNQSBub3QgYXZhaWxhYmxlXG4iKTsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBlcnJfb3V0X2ZyZWU7CiAJfQpAQCAtNDE3LDEzICs0MTgsMTMgQEAKIAkJZ290byBlcnJfb3V0X2ZyZWU7CiAKIAlpZiAoIXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogSS9PIGJhc2UgaXMgemVyb1xuIik7CisJCXByX2VycigiSS9PIGJhc2UgaXMgemVyb1xuIik7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9kaXNhYmxlOwogCX0KIAogCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApIDwgKENIS19JT19TSVpFKHBkZXYpKSApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IEFsbG9jYXRlZCBJL08gc2l6ZSB0b28gc21hbGxcbiIpOworCQlwcl9lcnIoIkFsbG9jYXRlZCBJL08gc2l6ZSB0b28gc21hbGxcbiIpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGVycl9vdXRfZGlzYWJsZTsKIAl9CkBAIC00MzgsNyArNDM5LDcgQEAKICNlbmRpZgogCiAJaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJWX05BTUUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBGYWlsZWQgdG8gcmVxdWVzdCBQQ0kgcmVnaW9uc1xuIik7CisJCXByX2VycigiRmFpbGVkIHRvIHJlcXVlc3QgUENJIHJlZ2lvbnNcbiIpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGVycl9vdXRfZGlzYWJsZTsKIAl9CkBAIC00OTcsMTIgKzQ5OCw5IEBACiAJaWYgKGVycikKIAkJZ290byBlcnJfb3V0X2ZyZWVfYnVmOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERhdmljb20gRE0lMDRseCBhdCBwY2klcywgJXBNLCBpcnEgJWQuXG4iLAotCSAgICAgICBkZXYtPm5hbWUsCi0JICAgICAgIGVudC0+ZHJpdmVyX2RhdGEgPj4gMTYsCi0JICAgICAgIHBjaV9uYW1lKHBkZXYpLAotCSAgICAgICBkZXYtPmRldl9hZGRyLAotCSAgICAgICBkZXYtPmlycSk7CisJZGV2X2luZm8oJmRldi0+ZGV2LCAiRGF2aWNvbSBETSUwNGx4IGF0IHBjaSVzLCAlcE0sIGlycSAlZFxuIiwKKwkJIGVudC0+ZHJpdmVyX2RhdGEgPj4gMTYsCisJCSBwY2lfbmFtZShwZGV2KSwgZGV2LT5kZXZfYWRkciwgZGV2LT5pcnEpOwogCiAJcGNpX3NldF9tYXN0ZXIocGRldik7CiAKQEAgLTY2MCw5ICs2NTgsOSBAQAogCiAJLyogU2VuZCBzZXR1cCBmcmFtZSAqLwogCWlmIChkYi0+Y2hpcF9pZCA9PSBQQ0lfRE05MTMyX0lEKQotCQlkbTkxMzJfaWRfdGFibGUoZGV2LCBkZXYtPm1jX2NvdW50KTsJLyogRE05MTMyICovCisJCWRtOTEzMl9pZF90YWJsZShkZXYpOwkvKiBETTkxMzIgKi8KIAllbHNlCi0JCXNlbmRfZmlsdGVyX2ZyYW1lKGRldiwgZGV2LT5tY19jb3VudCk7CS8qIERNOTEwMi9ETTkxMDJBICovCisJCXNlbmRfZmlsdGVyX2ZyYW1lKGRldik7CS8qIERNOTEwMi9ETTkxMDJBICovCiAKIAkvKiBJbml0IENSNywgaW50ZXJydXB0IGFjdGl2ZSBiaXQgKi8KIAlkYi0+Y3I3X2RhdGEgPSBDUjdfREVGQVVMVDsKQEAgLTY5Niw3ICs2OTQsNyBAQAogCiAJLyogVG9vIGxhcmdlIHBhY2tldCBjaGVjayAqLwogCWlmIChza2ItPmxlbiA+IE1BWF9QQUNLRVRfU0laRSkgewotCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogYmlnIHBhY2tldCA9ICVkXG4iLCAodTE2KXNrYi0+bGVuKTsKKwkJcHJfZXJyKCJiaWcgcGFja2V0ID0gJWRcbiIsICh1MTYpc2tiLT5sZW4pOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQpAQCAtNzA2LDggKzcwNCw3IEBACiAJLyogTm8gVHggcmVzb3VyY2UgY2hlY2ssIGl0IG5ldmVyIGhhcHBlbiBucm9tYWxseSAqLwogCWlmIChkYi0+dHhfcXVldWVfY250ID49IFRYX0ZSRUVfREVTQ19DTlQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGItPmxvY2ssIGZsYWdzKTsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IE5vIFR4IHJlc291cmNlICVsZFxuIiwKLQkJICAgICAgIGRiLT50eF9xdWV1ZV9jbnQpOworCQlwcl9lcnIoIk5vIFR4IHJlc291cmNlICVsZFxuIiwgZGItPnR4X3F1ZXVlX2NudCk7CiAJCXJldHVybiBORVRERVZfVFhfQlVTWTsKIAl9CiAKQEAgLTc3OSwxMiArNzc2LDExIEBACiAKICNpZiAwCiAJLyogc2hvdyBzdGF0aXN0aWMgY291bnRlciAqLwotCXByaW50ayhEUlZfTkFNRSAiOiBGVTolbHggRUM6JWx4IExDOiVseCBOQzolbHgiCi0JCSIgTE9DOiVseCBUWEpUOiVseCBSRVNFVDolbHggUkNSODolbHggRkFMOiVseCBUVDolbHhcbiIsCi0JCWRiLT50eF9maWZvX3VuZGVycnVuLCBkYi0+dHhfZXhjZXNzaXZlX2NvbGxpc2lvbiwKLQkJZGItPnR4X2xhdGVfY29sbGlzaW9uLCBkYi0+dHhfbm9fY2FycmllciwgZGItPnR4X2xvc3NfY2FycmllciwKLQkJZGItPnR4X2phYmJlcl90aW1lb3V0LCBkYi0+cmVzZXRfY291bnQsIGRiLT5yZXNldF9jcjgsCi0JCWRiLT5yZXNldF9mYXRhbCwgZGItPnJlc2V0X1RYdGltZW91dCk7CisJcHJpbnRrKCJGVTolbHggRUM6JWx4IExDOiVseCBOQzolbHggTE9DOiVseCBUWEpUOiVseCBSRVNFVDolbHggUkNSODolbHggRkFMOiVseCBUVDolbHhcbiIsCisJICAgICAgIGRiLT50eF9maWZvX3VuZGVycnVuLCBkYi0+dHhfZXhjZXNzaXZlX2NvbGxpc2lvbiwKKwkgICAgICAgZGItPnR4X2xhdGVfY29sbGlzaW9uLCBkYi0+dHhfbm9fY2FycmllciwgZGItPnR4X2xvc3NfY2FycmllciwKKwkgICAgICAgZGItPnR4X2phYmJlcl90aW1lb3V0LCBkYi0+cmVzZXRfY291bnQsIGRiLT5yZXNldF9jcjgsCisJICAgICAgIGRiLT5yZXNldF9mYXRhbCwgZGItPnJlc2V0X1RYdGltZW91dCk7CiAjZW5kaWYKIAogCXJldHVybiAwOwpAQCAtODg1LDcgKzg4MSw3IEBACiAJdHhwdHIgPSBkYi0+dHhfcmVtb3ZlX3B0cjsKIAl3aGlsZShkYi0+dHhfcGFja2V0X2NudCkgewogCQl0ZGVzMCA9IGxlMzJfdG9fY3B1KHR4cHRyLT50ZGVzMCk7Ci0JCS8qIHByaW50ayhEUlZfTkFNRSAiOiB0ZGVzMD0leFxuIiwgdGRlczApOyAqLworCQlwcl9kZWJ1ZygidGRlczA9JXhcbiIsIHRkZXMwKTsKIAkJaWYgKHRkZXMwICYgMHg4MDAwMDAwMCkKIAkJCWJyZWFrOwogCkBAIC04OTUsNyArODkxLDcgQEAKIAogCQkvKiBUcmFuc21pdCBzdGF0aXN0aWMgY291bnRlciAqLwogCQlpZiAoIHRkZXMwICE9IDB4N2ZmZmZmZmYgKSB7Ci0JCQkvKiBwcmludGsoRFJWX05BTUUgIjogdGRlczA9JXhcbiIsIHRkZXMwKTsgKi8KKwkJCXByX2RlYnVnKCJ0ZGVzMD0leFxuIiwgdGRlczApOwogCQkJZGV2LT5zdGF0cy5jb2xsaXNpb25zICs9ICh0ZGVzMCA+PiAzKSAmIDB4ZjsKIAkJCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gbGUzMl90b19jcHUodHhwdHItPnRkZXMxKSAmIDB4N2ZmOwogCQkJaWYgKHRkZXMwICYgVERFUzBfRVJSX01BU0spIHsKQEAgLTk5Miw3ICs5ODgsNyBAQAogCQkJLyogZXJyb3Igc3VtbWFyeSBiaXQgY2hlY2sgKi8KIAkJCWlmIChyZGVzMCAmIDB4ODAwMCkgewogCQkJCS8qIFRoaXMgaXMgYSBlcnJvciBwYWNrZXQgKi8KLQkJCQkvL3ByaW50ayhEUlZfTkFNRSAiOiByZGVzMDogJWx4XG4iLCByZGVzMCk7CisJCQkJcHJfZGVidWcoInJkZXMwOiAleFxuIiwgcmRlczApOwogCQkJCWRldi0+c3RhdHMucnhfZXJyb3JzKys7CiAJCQkJaWYgKHJkZXMwICYgMSkKIAkJCQkJZGV2LT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwpAQCAtMTA1Niw2ICsxMDUyLDcgQEAKIHsKIAlzdHJ1Y3QgZG1mZV9ib2FyZF9pbmZvICpkYiA9IG5ldGRldl9wcml2KGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbWNfY291bnQgPSBuZXRkZXZfbWNfY291bnQoZGV2KTsKIAogCURNRkVfREJVRygwLCAiZG1mZV9zZXRfZmlsdGVyX21vZGUoKSIsIDApOwogCXNwaW5fbG9ja19pcnFzYXZlKCZkYi0+bG9jaywgZmxhZ3MpOwpAQCAtMTA2OCwxOSArMTA2NSwxOSBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgZGV2LT5tY19jb3VudCA+IERNRkVfTUFYX01VTFRJQ0FTVCkgewotCQlETUZFX0RCVUcoMCwgIlBhc3MgYWxsIG11bHRpY2FzdCBhZGRyZXNzIiwgZGV2LT5tY19jb3VudCk7CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgbWNfY291bnQgPiBETUZFX01BWF9NVUxUSUNBU1QpIHsKKwkJRE1GRV9EQlVHKDAsICJQYXNzIGFsbCBtdWx0aWNhc3QgYWRkcmVzcyIsIG1jX2NvdW50KTsKIAkJZGItPmNyNl9kYXRhICY9IH4oQ1I2X1BNIHwgQ1I2X1BCRik7CiAJCWRiLT5jcjZfZGF0YSB8PSBDUjZfUEFNOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCi0JRE1GRV9EQlVHKDAsICJTZXQgbXVsdGljYXN0IGFkZHJlc3MiLCBkZXYtPm1jX2NvdW50KTsKKwlETUZFX0RCVUcoMCwgIlNldCBtdWx0aWNhc3QgYWRkcmVzcyIsIG1jX2NvdW50KTsKIAlpZiAoZGItPmNoaXBfaWQgPT0gUENJX0RNOTEzMl9JRCkKLQkJZG05MTMyX2lkX3RhYmxlKGRldiwgZGV2LT5tY19jb3VudCk7CS8qIERNOTEzMiAqLworCQlkbTkxMzJfaWRfdGFibGUoZGV2KTsJLyogRE05MTMyICovCiAJZWxzZQotCQlzZW5kX2ZpbHRlcl9mcmFtZShkZXYsIGRldi0+bWNfY291bnQpOyAJLyogRE05MTAyL0RNOTEwMkEgKi8KKwkJc2VuZF9maWx0ZXJfZnJhbWUoZGV2KTsJLyogRE05MTAyL0RNOTEwMkEgKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOwogfQogCkBAIC0xMTkxLDggKzExODgsNyBAQAogCQlpZiAoIHRpbWVfYWZ0ZXIoamlmZmllcywgZGV2LT50cmFuc19zdGFydCArIERNRkVfVFhfVElNRU9VVCkgKSB7CiAJCQlkYi0+cmVzZXRfVFh0aW1lb3V0Kys7CiAJCQlkYi0+d2FpdF9yZXNldCA9IDE7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVHggdGltZW91dCAtIHJlc2V0dGluZ1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiVHggdGltZW91dCAtIHJlc2V0dGluZ1xuIik7CiAJCX0KIAl9CiAKQEAgLTE0NTYsNyArMTQ1Miw3IEBACiAgKglUaGlzIHNldHVwIGZyYW1lIGluaXRpbGl6ZSBETTkxMFggYWRkcmVzcyBmaWx0ZXIgbW9kZQogKi8KIAotc3RhdGljIHZvaWQgZG05MTMyX2lkX3RhYmxlKHN0cnVjdCBERVZJQ0UgKmRldiwgaW50IG1jX2NudCkKK3N0YXRpYyB2b2lkIGRtOTEzMl9pZF90YWJsZShzdHJ1Y3QgREVWSUNFICpkZXYpCiB7CiAJc3RydWN0IGRldl9tY19saXN0ICptY3B0cjsKIAl1MTYgKiBhZGRycHRyOwpAQCAtMTQ3NiwxNSArMTQ3MiwxNCBAQAogCWlvYWRkciArPSA0OwogCiAJLyogQ2xlYXIgSGFzaCBUYWJsZSAqLwotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JCWhhc2hfdGFibGVbaV0gPSAweDA7CisJbWVtc2V0KGhhc2hfdGFibGUsIDAsIHNpemVvZihoYXNoX3RhYmxlKSk7CiAKIAkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwogCWhhc2hfdGFibGVbM10gPSAweDgwMDA7CiAKIAkvKiB0aGUgbXVsdGljYXN0IGFkZHJlc3MgaW4gSGFzaCBUYWJsZSA6IDY0IGJpdHMgKi8KLQlmb3IgKG1jcHRyID0gZGV2LT5tY19saXN0LCBpID0gMDsgaSA8IG1jX2NudDsgaSsrLCBtY3B0ciA9IG1jcHRyLT5uZXh0KSB7Ci0JCWhhc2hfdmFsID0gY2FsX0NSQyggKGNoYXIgKikgbWNwdHItPmRtaV9hZGRyLCA2LCAwKSAmIDB4M2Y7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNwdHIsIGRldikgeworCQloYXNoX3ZhbCA9IGNhbF9DUkMoKGNoYXIgKikgbWNwdHItPmRtaV9hZGRyLCA2LCAwKSAmIDB4M2Y7CiAJCWhhc2hfdGFibGVbaGFzaF92YWwgLyAxNl0gfD0gKHUxNikgMSA8PCAoaGFzaF92YWwgJSAxNik7CiAJfQogCkBAIC0xNDk5LDcgKzE0OTQsNyBAQAogICoJVGhpcyBzZXR1cCBmcmFtZSBpbml0aWxpemUgRE05MTBYIGFkZHJlc3MgZmlsdGVyIG1vZGUKICAqLwogCi1zdGF0aWMgdm9pZCBzZW5kX2ZpbHRlcl9mcmFtZShzdHJ1Y3QgREVWSUNFICpkZXYsIGludCBtY19jbnQpCitzdGF0aWMgdm9pZCBzZW5kX2ZpbHRlcl9mcmFtZShzdHJ1Y3QgREVWSUNFICpkZXYpCiB7CiAJc3RydWN0IGRtZmVfYm9hcmRfaW5mbyAqZGIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNwdHI7CkBAIC0xNTI1LDE0ICsxNTIwLDE0IEBACiAJKnN1cHRyKysgPSAweGZmZmY7CiAKIAkvKiBmaXQgdGhlIG11bHRpY2FzdCBhZGRyZXNzICovCi0JZm9yIChtY3B0ciA9IGRldi0+bWNfbGlzdCwgaSA9IDA7IGkgPCBtY19jbnQ7IGkrKywgbWNwdHIgPSBtY3B0ci0+bmV4dCkgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jcHRyLCBkZXYpIHsKIAkJYWRkcnB0ciA9ICh1MTYgKikgbWNwdHItPmRtaV9hZGRyOwogCQkqc3VwdHIrKyA9IGFkZHJwdHJbMF07CiAJCSpzdXB0cisrID0gYWRkcnB0clsxXTsKIAkJKnN1cHRyKysgPSBhZGRycHRyWzJdOwogCX0KIAotCWZvciAoOyBpPDE0OyBpKyspIHsKKwlmb3IgKGkgPSBuZXRkZXZfbWNfY291bnQoZGV2KTsgaSA8IDE0OyBpKyspIHsKIAkJKnN1cHRyKysgPSAweGZmZmY7CiAJCSpzdXB0cisrID0gMHhmZmZmOwogCQkqc3VwdHIrKyA9IDB4ZmZmZjsKQEAgLTE2NDYsNyArMTY0MSw3IEBACiAJCWVsc2UgCQkJCS8qIERNOTEwMi9ETTkxMDJBICovCiAJCQlwaHlfbW9kZSA9IHBoeV9yZWFkKGRiLT5pb2FkZHIsCiAJCQkJICAgIGRiLT5waHlfYWRkciwgMTcsIGRiLT5jaGlwX2lkKSAmIDB4ZjAwMDsKLQkJLyogcHJpbnRrKERSVl9OQU1FICI6IFBoeV9tb2RlICV4ICIscGh5X21vZGUpOyAqLworCQlwcl9kZWJ1ZygiUGh5X21vZGUgJXhcbiIsIHBoeV9tb2RlKTsKIAkJc3dpdGNoIChwaHlfbW9kZSkgewogCQljYXNlIDB4MTAwMDogZGItPm9wX21vZGUgPSBETUZFXzEwTUhGOyBicmVhazsKIAkJY2FzZSAweDIwMDA6IGRiLT5vcF9tb2RlID0gRE1GRV8xME1GRDsgYnJlYWs7CkBAIC0yMDg5LDcgKzIwODQsNyBAQAogCiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRtZmVfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGRtZmVfcGNpX3RibCkgPSB7CiAJeyAweDEyODIsIDB4OTEzMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgUENJX0RNOTEzMl9JRCB9LAogCXsgMHgxMjgyLCAweDkxMDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFBDSV9ETTkxMDJfSUQgfSwKIAl7IDB4MTI4MiwgMHg5MTAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBQQ0lfRE05MTAwX0lEIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9lZXByb20uYyBiL2RyaXZlcnMvbmV0L3R1bGlwL2VlcHJvbS5jCmluZGV4IDg4OWY1N2EuLjkzZjRlODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3R1bGlwL2VlcHJvbS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2VlcHJvbS5jCkBAIC0xNjEsMTUgKzE2MSwxNSBAQAogCQlpZiAoZWVfZGF0YVswXSA9PSAweGZmKSB7CiAJCQlpZiAobGFzdF9tZWRpYXRhYmxlKSB7CiAJCQkJY29udHJvbGxlcl9pbmRleCsrOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAgQ29udHJvbGxlciAlZCBvZiBtdWx0aXBvcnQgYm9hcmQuXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIGNvbnRyb2xsZXJfaW5kZXgpOworCQkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkJICJDb250cm9sbGVyICVkIG9mIG11bHRpcG9ydCBib2FyZFxuIiwKKwkJCQkJIGNvbnRyb2xsZXJfaW5kZXgpOwogCQkJCXRwLT5tdGFibGUgPSBsYXN0X21lZGlhdGFibGU7CiAJCQkJZWVfZGF0YSA9IGxhc3RfZWVfZGF0YTsKIAkJCQlnb3RvIHN1YnNlcXVlbnRfYm9hcmQ7CiAJCQl9IGVsc2UKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogIE1pc3NpbmcgRUVQUk9NLCB0aGlzIGludGVyZmFjZSBtYXkgIgotCQkJCQkgICAibm90IHdvcmsgY29ycmVjdGx5IVxuIiwKLQkJCSAgIGRldi0+bmFtZSk7CisJCQkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJCQkgIk1pc3NpbmcgRUVQUk9NLCB0aGlzIGludGVyZmFjZSBtYXkgbm90IHdvcmsgY29ycmVjdGx5IVxuIik7CiAJCQlyZXR1cm47CiAJCX0KIAkgIC8qIERvIGEgZml4LXVwIGJhc2VkIG9uIHRoZSB2ZW5kb3IgaGFsZiBvZiB0aGUgc3RhdGlvbiBhZGRyZXNzIHByZWZpeC4gKi8KQEAgLTE4MSwxNiArMTgxLDE1IEBACiAJCQkgIGkrKzsJCQkvKiBBbiBBY2N0b24gRU4xMjA3LCBub3QgYW4gb3V0bGF3IE1heHRlY2guICovCiAJCSAgbWVtY3B5KGVlX2RhdGEgKyAyNiwgZWVwcm9tX2ZpeHVwc1tpXS5uZXd0YWJsZSwKIAkJCQkgc2l6ZW9mKGVlcHJvbV9maXh1cHNbaV0ubmV3dGFibGUpKTsKLQkJICBwcmludGsoS0VSTl9JTkZPICIlczogT2xkIGZvcm1hdCBFRVBST00gb24gJyVzJyBib2FyZC4gIFVzaW5nIgotCQkJCSAiIHN1YnN0aXR1dGUgbWVkaWEgY29udHJvbCBpbmZvLlxuIiwKLQkJCQkgZGV2LT5uYW1lLCBlZXByb21fZml4dXBzW2ldLm5hbWUpOworCQkgIGRldl9pbmZvKCZkZXYtPmRldiwKKwkJCSAgICJPbGQgZm9ybWF0IEVFUFJPTSBvbiAnJXMnIGJvYXJkLiAgVXNpbmcgc3Vic3RpdHV0ZSBtZWRpYSBjb250cm9sIGluZm9cbiIsCisJCQkgICBlZXByb21fZml4dXBzW2ldLm5hbWUpOwogCQkgIGJyZWFrOwogCQl9CiAJICB9CiAJICBpZiAoZWVwcm9tX2ZpeHVwc1tpXS5uYW1lID09IE5VTEwpIHsgLyogTm8gZml4dXAgZm91bmQuICovCi0JCSAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE9sZCBzdHlsZSBFRVBST00gd2l0aCBubyBtZWRpYSBzZWxlY3Rpb24gIgotCQkJCSAiaW5mb3JtYXRpb24uXG4iLAotCQkJICAgZGV2LT5uYW1lKTsKKwkJICBkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkgICAiT2xkIHN0eWxlIEVFUFJPTSB3aXRoIG5vIG1lZGlhIHNlbGVjdGlvbiBpbmZvcm1hdGlvblxuIik7CiAJCXJldHVybjsKIAkgIH0KIAl9CkBAIC0yMTgsNyArMjE3LDggQEAKIAkgICAgICAgIC8qIHRoZXJlIGlzIG5vIHBoeSBpbmZvcm1hdGlvbiwgZG9uJ3QgZXZlbiB0cnkgdG8gYnVpbGQgbXRhYmxlICovCiAJICAgICAgICBpZiAoY291bnQgPT0gMCkgewogCQkJaWYgKHR1bGlwX2RlYnVnID4gMCkKLQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbm8gcGh5IGluZm8sIGFib3J0aW5nIG10YWJsZSBidWlsZFxuIiwgZGV2LT5uYW1lKTsKKwkJCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkJCSAibm8gcGh5IGluZm8sIGFib3J0aW5nIG10YWJsZSBidWlsZFxuIik7CiAJCSAgICAgICAgcmV0dXJuOwogCQl9CiAKQEAgLTIzNCw4ICsyMzQsOCBAQAogCQltdGFibGUtPmhhc19ub25taWkgPSBtdGFibGUtPmhhc19taWkgPSBtdGFibGUtPmhhc19yZXNldCA9IDA7CiAJCW10YWJsZS0+Y3NyMTVkaXIgPSBtdGFibGUtPmNzcjE1dmFsID0gMDsKIAotCQlwcmludGsoS0VSTl9JTkZPICIlczogIEVFUFJPTSBkZWZhdWx0IG1lZGlhIHR5cGUgJXMuXG4iLCBkZXYtPm5hbWUsCi0JCQkgICBtZWRpYSAmIDB4MDgwMCA/ICJBdXRvc2Vuc2UiIDogbWVkaWFuYW1lW21lZGlhICYgTUVESUFfTUFTS10pOworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJFRVBST00gZGVmYXVsdCBtZWRpYSB0eXBlICVzXG4iLAorCQkJIG1lZGlhICYgMHgwODAwID8gIkF1dG9zZW5zZSIgOiBtZWRpYW5hbWVbbWVkaWEgJiBNRURJQV9NQVNLXSk7CiAJCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCQlzdHJ1Y3QgbWVkaWFsZWFmICpsZWFmID0gJm10YWJsZS0+bWxlYWZbaV07CiAKQEAgLTI5OCwxNiArMjk4LDE3IEBACiAJCQl9CiAJCQlpZiAodHVsaXBfZGVidWcgPiAxICAmJiAgbGVhZi0+bWVkaWEgPT0gMTEpIHsKIAkJCQl1bnNpZ25lZCBjaGFyICpicCA9IGxlYWYtPmxlYWZkYXRhOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiAgTUlJIGludGVyZmFjZSBQSFkgJWQsIHNldHVwL3Jlc2V0ICIKLQkJCQkJICAgInNlcXVlbmNlcyAlZC8lZCBsb25nLCBjYXBhYmlsaXRpZXMgJTIuMnggJTIuMnguXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIGJwWzBdLCBicFsxXSwgYnBbMiArIGJwWzFdKjJdLAotCQkJCQkgICBicFs1ICsgYnBbMiArIGJwWzFdKjJdKjJdLCBicFs0ICsgYnBbMiArIGJwWzFdKjJdKjJdKTsKKwkJCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkJCSAiTUlJIGludGVyZmFjZSBQSFkgJWQsIHNldHVwL3Jlc2V0IHNlcXVlbmNlcyAlZC8lZCBsb25nLCBjYXBhYmlsaXRpZXMgJTAyeCAlMDJ4XG4iLAorCQkJCQkgYnBbMF0sIGJwWzFdLCBicFsyICsgYnBbMV0qMl0sCisJCQkJCSBicFs1ICsgYnBbMiArIGJwWzFdKjJdKjJdLAorCQkJCQkgYnBbNCArIGJwWzIgKyBicFsxXSoyXSoyXSk7CiAJCQl9Ci0JCQlwcmludGsoS0VSTl9JTkZPICIlczogIEluZGV4ICMlZCAtIE1lZGlhICVzICgjJWQpIGRlc2NyaWJlZCAiCi0JCQkJICAgImJ5IGEgJXMgKCVkKSBibG9jay5cbiIsCi0JCQkJICAgZGV2LT5uYW1lLCBpLCBtZWRpYW5hbWVbbGVhZi0+bWVkaWEgJiAxNV0sIGxlYWYtPm1lZGlhLAotCQkJCSAgIGxlYWYtPnR5cGUgPCBBUlJBWV9TSVpFKGJsb2NrX25hbWUpID8gYmxvY2tfbmFtZVtsZWFmLT50eXBlXSA6ICI8dW5rbm93bj4iLAotCQkJCSAgIGxlYWYtPnR5cGUpOworCQkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJCSAiSW5kZXggIyVkIC0gTWVkaWEgJXMgKCMlZCkgZGVzY3JpYmVkIGJ5IGEgJXMgKCVkKSBibG9ja1xuIiwKKwkJCQkgaSwgbWVkaWFuYW1lW2xlYWYtPm1lZGlhICYgMTVdLCBsZWFmLT5tZWRpYSwKKwkJCQkgbGVhZi0+dHlwZSA8IEFSUkFZX1NJWkUoYmxvY2tfbmFtZSkgPyBibG9ja19uYW1lW2xlYWYtPnR5cGVdIDogIjx1bmtub3duPiIsCisJCQkJIGxlYWYtPnR5cGUpOwogCQl9CiAJCWlmIChuZXdfYWR2ZXJ0aXNlKQogCQkJdHAtPnN5bV9hZHZlcnRpc2UgPSBuZXdfYWR2ZXJ0aXNlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAvaW50ZXJydXB0LmMgYi9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYwppbmRleCAyZThlOGVlLi4xZmFmN2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC9pbnRlcnJ1cHQuYwpAQCAtMTI1LDEyICsxMjUsMTIgQEAKICNlbmRpZgogCiAJaWYgKHR1bGlwX2RlYnVnID4gNCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiBJbiB0dWxpcF9yeCgpLCBlbnRyeSAlZCAlOC44eC5cbiIsIGVudHJ5LAotCQkJICAgdHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIgSW4gdHVsaXBfcngoKSwgZW50cnkgJWQgJTA4eFxuIiwKKwkJICAgICAgIGVudHJ5LCB0cC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKTsKIAogICAgICAgIGRvIHsKIAkJaWYgKGlvcmVhZDMyKHRwLT5iYXNlX2FkZHIgKyBDU1I1KSA9PSAweGZmZmZmZmZmKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiIEluIHR1bGlwX3BvbGwoKSwgaGFyZHdhcmUgZGlzYXBwZWFyZWQuXG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIgSW4gdHVsaXBfcG9sbCgpLCBoYXJkd2FyZSBkaXNhcHBlYXJlZFxuIik7CiAJCQlicmVhazsKIAkJfQogICAgICAgICAgICAgICAgLyogQWNrbm93bGVkZ2UgY3VycmVudCBSWCBpbnRlcnJ1cHQgc291cmNlcy4gKi8KQEAgLTE0Niw3ICsxNDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0dWxpcF9kZWJ1ZyA+IDUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbiB0dWxpcF9yeCgpLCBlbnRyeSAlZCAlOC44eC5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbiB0dWxpcF9yeCgpLCBlbnRyeSAlZCAlMDh4XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIGVudHJ5LCBzdGF0dXMpOwogCiAJCSAgICAgICBpZiAoKyt3b3JrX2RvbmUgPj0gYnVkZ2V0KQpAQCAtMTc3LDE1ICsxNzcsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSW5nb3JlIGVhcmxpZXIgYnVmZmVycy4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoc3RhdHVzICYgMHhmZmZmKSAhPSAweDdmZmYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR1bGlwX2RlYnVnID4gMSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9XQVJOSU5HICIlczogT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwYW5uZWQgbXVsdGlwbGUgYnVmZmVycywgc3RhdHVzICU4Ljh4IVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl93YXJuKCZkZXYtPmRldiwKKwkJCQkJCQkJIk92ZXJzaXplZCBFdGhlcm5ldCBmcmFtZSBzcGFubmVkIG11bHRpcGxlIGJ1ZmZlcnMsIHN0YXR1cyAlMDh4IVxuIiwKKwkJCQkJCQkJc3RhdHVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAkJCSAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUaGVyZSB3YXMgYSBmYXRhbCBlcnJvci4gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0RFQlVHICIlczogUmVjZWl2ZSBlcnJvciwgUnggc3RhdHVzICU4Ljh4LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWNlaXZlIGVycm9yLCBSeCBzdGF0dXMgJTA4eFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgc3RhdHVzKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogZW5kIG9mIGEgcGFja2V0LiovCiAJCQkJICAgICAgIGlmIChwa3RfbGVuID4gMTUxOCB8fApAQCAtMjI2LDEyICsyMjYsMTEgQEAKICNpZm5kZWYgZmluYWxfdmVyc2lvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRwLT5yeF9idWZmZXJzW2VudHJ5XS5tYXBwaW5nICE9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGUzMl90b19jcHUodHAtPnJ4X3JpbmdbZW50cnldLmJ1ZmZlcjEpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiJXM6IEludGVybmFsIGZhdWx0OiBUaGUgc2tidWZmIGFkZHJlc3NlcyAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZG8gbm90IG1hdGNoIGluIHR1bGlwX3J4OiAlMDh4IHZzLiAlMDhsbHggJXAgLyAlcC5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZTMyX3RvX2NwdSh0cC0+cnhfcmluZ1tlbnRyeV0uYnVmZmVyMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXRwLT5yeF9idWZmZXJzW2VudHJ5XS5tYXBwaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tiLT5oZWFkLCB0ZW1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZGV2LT5kZXYsCisJCQkJCQkgICAgICAgIkludGVybmFsIGZhdWx0OiBUaGUgc2tidWZmIGFkZHJlc3NlcyBkbyBub3QgbWF0Y2ggaW4gdHVsaXBfcng6ICUwOHggdnMuICUwOGxseCAlcCAvICVwXG4iLAorCQkJCQkJICAgICAgIGxlMzJfdG9fY3B1KHRwLT5yeF9yaW5nW2VudHJ5XS5idWZmZXIxKSwKKwkJCQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXRwLT5yeF9idWZmZXJzW2VudHJ5XS5tYXBwaW5nLAorCQkJCQkJICAgICAgIHNrYi0+aGVhZCwgdGVtcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAjZW5kaWYKIApAQCAtMzY1LDE2ICszNjQsMTYgQEAKIAlpbnQgcmVjZWl2ZWQgPSAwOwogCiAJaWYgKHR1bGlwX2RlYnVnID4gNCkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiBJbiB0dWxpcF9yeCgpLCBlbnRyeSAlZCAlOC44eC5cbiIsIGVudHJ5LAotCQkJICAgdHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIgSW4gdHVsaXBfcngoKSwgZW50cnkgJWQgJTA4eFxuIiwKKwkJICAgICAgIGVudHJ5LCB0cC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKTsKIAkvKiBJZiB3ZSBvd24gdGhlIG5leHQgZW50cnksIGl0IGlzIGEgbmV3IHBhY2tldC4gU2VuZCBpdCB1cC4gKi8KIAl3aGlsZSAoICEgKHRwLT5yeF9yaW5nW2VudHJ5XS5zdGF0dXMgJiBjcHVfdG9fbGUzMihEZXNjT3duZWQpKSkgewogCQlzMzIgc3RhdHVzID0gbGUzMl90b19jcHUodHAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CiAJCXNob3J0IHBrdF9sZW47CiAKIAkJaWYgKHR1bGlwX2RlYnVnID4gNSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogSW4gdHVsaXBfcngoKSwgZW50cnkgJWQgJTguOHguXG4iLAotCQkJCSAgIGRldi0+bmFtZSwgZW50cnksIHN0YXR1cyk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEluIHR1bGlwX3J4KCksIGVudHJ5ICVkICUwOHhcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lLCBlbnRyeSwgc3RhdHVzKTsKIAkJaWYgKC0tcnhfd29ya19saW1pdCA8IDApCiAJCQlicmVhazsKIApAQCAtNDAyLDE2ICs0MDEsMTYgQEAKIAkJCQkvKiBJbmdvcmUgZWFybGllciBidWZmZXJzLiAqLwogCQkJCWlmICgoc3RhdHVzICYgMHhmZmZmKSAhPSAweDdmZmYpIHsKIAkJCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBPdmVyc2l6ZWQgRXRoZXJuZXQgZnJhbWUgIgotCQkJCQkJCSAgICJzcGFubmVkIG11bHRpcGxlIGJ1ZmZlcnMsIHN0YXR1cyAlOC44eCFcbiIsCi0JCQkJCQkJICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCQkJCQkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJCQkJCSAiT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lIHNwYW5uZWQgbXVsdGlwbGUgYnVmZmVycywgc3RhdHVzICUwOHghXG4iLAorCQkJCQkJCSBzdGF0dXMpOwogCQkJCQl0cC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJCX0KIAkJCX0gZWxzZSB7CiAJCQkJLyogVGhlcmUgd2FzIGEgZmF0YWwgZXJyb3IuICovCiAJCQkJaWYgKHR1bGlwX2RlYnVnID4gMikKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWNlaXZlIGVycm9yLCBSeCBzdGF0dXMgJTguOHguXG4iLAotCQkJCQkJICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlY2VpdmUgZXJyb3IsIFJ4IHN0YXR1cyAlMDh4XG4iLAorCQkJCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOwogCQkJCXRwLT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogZW5kIG9mIGEgcGFja2V0LiovCiAJCQkJaWYgKHBrdF9sZW4gPiAxNTE4IHx8CiAJCQkJICAgIChzdGF0dXMgJiBSeERlc2NSdW50KSkKQEAgLTQ1MCwxMiArNDQ5LDExIEBACiAjaWZuZGVmIGZpbmFsX3ZlcnNpb24KIAkJCQlpZiAodHAtPnJ4X2J1ZmZlcnNbZW50cnldLm1hcHBpbmcgIT0KIAkJCQkgICAgbGUzMl90b19jcHUodHAtPnJ4X3JpbmdbZW50cnldLmJ1ZmZlcjEpKSB7Ci0JCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IEludGVybmFsIGZhdWx0OiBUaGUgc2tidWZmIGFkZHJlc3NlcyAiCi0JCQkJCSAgICAgICAiZG8gbm90IG1hdGNoIGluIHR1bGlwX3J4OiAlMDh4IHZzLiAlTHggJXAgLyAlcC5cbiIsCi0JCQkJCSAgICAgICBkZXYtPm5hbWUsCi0JCQkJCSAgICAgICBsZTMyX3RvX2NwdSh0cC0+cnhfcmluZ1tlbnRyeV0uYnVmZmVyMSksCi0JCQkJCSAgICAgICAobG9uZyBsb25nKXRwLT5yeF9idWZmZXJzW2VudHJ5XS5tYXBwaW5nLAotCQkJCQkgICAgICAgc2tiLT5oZWFkLCB0ZW1wKTsKKwkJCQkJZGV2X2VycigmZGV2LT5kZXYsCisJCQkJCQkiSW50ZXJuYWwgZmF1bHQ6IFRoZSBza2J1ZmYgYWRkcmVzc2VzIGRvIG5vdCBtYXRjaCBpbiB0dWxpcF9yeDogJTA4eCB2cy4gJUx4ICVwIC8gJXBcbiIsCisJCQkJCQlsZTMyX3RvX2NwdSh0cC0+cnhfcmluZ1tlbnRyeV0uYnVmZmVyMSksCisJCQkJCQkobG9uZyBsb25nKXRwLT5yeF9idWZmZXJzW2VudHJ5XS5tYXBwaW5nLAorCQkJCQkJc2tiLT5oZWFkLCB0ZW1wKTsKIAkJCQl9CiAjZW5kaWYKIApAQCAtNTY5LDcgKzU2Nyw3IEBACiAjZW5kaWYgLyogIENPTkZJR19UVUxJUF9OQVBJICovCiAKIAkJaWYgKHR1bGlwX2RlYnVnID4gNCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogaW50ZXJydXB0ICBjc3I1PSUjOC44eCBuZXcgY3NyNT0lIzguOHguXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbnRlcnJ1cHQgIGNzcjU9JSM4Ljh4IG5ldyBjc3I1PSUjOC44eFxuIiwKIAkJCSAgICAgICBkZXYtPm5hbWUsIGNzcjUsIGlvcmVhZDMyKGlvYWRkciArIENTUjUpKTsKIAogCkBAIC02MDEsOCArNTk5LDggQEAKIAkJCQkJLyogVGhlcmUgd2FzIGFuIG1ham9yIGVycm9yLCBsb2cgaXQuICovCiAjaWZuZGVmIGZpbmFsX3ZlcnNpb24KIAkJCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJhbnNtaXQgZXJyb3IsIFR4IHN0YXR1cyAlOC44eC5cbiIsCi0JCQkJCQkJICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc21pdCBlcnJvciwgVHggc3RhdHVzICUwOHhcbiIsCisJCQkJCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOwogI2VuZGlmCiAJCQkJCXRwLT5zdGF0cy50eF9lcnJvcnMrKzsKIAkJCQkJaWYgKHN0YXR1cyAmIDB4NDEwNCkgdHAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CkBAIC02MzEsOCArNjI5LDkgQEAKIAogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCiAJCQlpZiAodHAtPmN1cl90eCAtIGRpcnR5X3R4ID4gVFhfUklOR19TSVpFKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogT3V0LW9mLXN5bmMgZGlydHkgcG9pbnRlciwgJWQgdnMuICVkLlxuIiwKLQkJCQkJICAgZGV2LT5uYW1lLCBkaXJ0eV90eCwgdHAtPmN1cl90eCk7CisJCQkJZGV2X2VycigmZGV2LT5kZXYsCisJCQkJCSJPdXQtb2Ytc3luYyBkaXJ0eSBwb2ludGVyLCAlZCB2cy4gJWRcbiIsCisJCQkJCWRpcnR5X3R4LCB0cC0+Y3VyX3R4KTsKIAkJCQlkaXJ0eV90eCArPSBUWF9SSU5HX1NJWkU7CiAJCQl9CiAjZW5kaWYKQEAgLTY0Myw5ICs2NDIsMTAgQEAKIAkJCXRwLT5kaXJ0eV90eCA9IGRpcnR5X3R4OwogCQkJaWYgKGNzcjUgJiBUeERpZWQpIHsKIAkJCQlpZiAodHVsaXBfZGVidWcgPiAyKQotCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVGhlIHRyYW5zbWl0dGVyIHN0b3BwZWQuIgotCQkJCQkJICAgIiAgQ1NSNSBpcyAleCwgQ1NSNiAleCwgbmV3IENTUjYgJXguXG4iLAotCQkJCQkJICAgZGV2LT5uYW1lLCBjc3I1LCBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSwgdHAtPmNzcjYpOworCQkJCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkJCQkgIlRoZSB0cmFuc21pdHRlciBzdG9wcGVkLiAgQ1NSNSBpcyAleCwgQ1NSNiAleCwgbmV3IENTUjYgJXhcbiIsCisJCQkJCQkgY3NyNSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNiksCisJCQkJCQkgdHAtPmNzcjYpOwogCQkJCXR1bGlwX3Jlc3RhcnRfcnh0eCh0cCk7CiAJCQl9CiAJCQlzcGluX3VubG9jaygmdHAtPmxvY2spOwpAQCAtNjk2LDggKzY5Niw5IEBACiAJCQkJICogdG8gdGhlIDIxMTQyLzMgZG9jcyB0aGF0IGlzKS4KIAkJCQkgKiAgIC0tIHJtawogCQkJCSAqLwotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6ICglbHUpIFN5c3RlbSBFcnJvciBvY2N1cnJlZCAoJWQpXG4iLAotCQkJCQlkZXYtPm5hbWUsIHRwLT5uaXIsIGVycm9yKTsKKwkJCQlkZXZfZXJyKCZkZXYtPmRldiwKKwkJCQkJIiglbHUpIFN5c3RlbSBFcnJvciBvY2N1cnJlZCAoJWQpXG4iLAorCQkJCQl0cC0+bmlyLCBlcnJvcik7CiAJCQl9CiAJCQkvKiBDbGVhciBhbGwgZXJyb3Igc291cmNlcywgaW5jbHVkZWQgdW5kb2N1bWVudGVkIG9uZXMhICovCiAJCQlpb3dyaXRlMzIoMHgwODAwZjdiYSwgaW9hZGRyICsgQ1NSNSk7CkBAIC03MDYsMTYgKzcwNywxNyBAQAogCQlpZiAoY3NyNSAmIFRpbWVySW50KSB7CiAKIAkJCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogUmUtZW5hYmxpbmcgaW50ZXJydXB0cywgJTguOHguXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIGNzcjUpOworCQkJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJCQkiUmUtZW5hYmxpbmcgaW50ZXJydXB0cywgJTA4eFxuIiwKKwkJCQkJY3NyNSk7CiAJCQlpb3dyaXRlMzIodHVsaXBfdGJsW3RwLT5jaGlwX2lkXS52YWxpZF9pbnRycywgaW9hZGRyICsgQ1NSNyk7CiAJCQl0cC0+dHRpbWVyID0gMDsKIAkJCW9pKys7CiAJCX0KIAkJaWYgKHR4ID4gbWF4dHggfHwgcnggPiBtYXhyeCB8fCBvaSA+IG1heG9pKSB7CiAJCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUb28gbXVjaCB3b3JrIGR1cmluZyBhbiBpbnRlcnJ1cHQsICIKLQkJCQkJICAgImNzcjU9MHglOC44eC4gKCVsdSkgKCVkLCVkLCVkKVxuIiwgZGV2LT5uYW1lLCBjc3I1LCB0cC0+bmlyLCB0eCwgcngsIG9pKTsKKwkJCQlkZXZfd2FybigmZGV2LT5kZXYsICJUb28gbXVjaCB3b3JrIGR1cmluZyBhbiBpbnRlcnJ1cHQsIGNzcjU9MHglMDh4LiAoJWx1KSAoJWQsJWQsJWQpXG4iLAorCQkJCQkgY3NyNSwgdHAtPm5pciwgdHgsIHJ4LCBvaSk7CiAKICAgICAgICAgICAgICAgICAgICAgICAgLyogQWNrbm93bGVkZ2UgYWxsIGludGVycnVwdCBzb3VyY2VzLiAqLwogICAgICAgICAgICAgICAgICAgICAgICAgaW93cml0ZTMyKDB4ODAwMWZmZmYsIGlvYWRkciArIENTUjUpOwpAQCAtNzY0LDE0ICs3NjYsMTggQEAKIAllbnRyeSA9IHRwLT5kaXJ0eV9yeCAlIFJYX1JJTkdfU0laRTsKIAlpZiAodHAtPnJ4X2J1ZmZlcnNbZW50cnldLnNrYiA9PSBOVUxMKSB7CiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaW4gcnggc3VzcGVuZCBtb2RlOiAoJWx1KSAodHAtPmN1cl9yeCA9ICV1LCB0dGltZXIgPSAlZCwgcnggPSAlZCkgZ28vc3RheSBpbiBzdXNwZW5kIG1vZGVcbiIsIGRldi0+bmFtZSwgdHAtPm5pciwgdHAtPmN1cl9yeCwgdHAtPnR0aW1lciwgcngpOworCQkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJCSAiaW4gcnggc3VzcGVuZCBtb2RlOiAoJWx1KSAodHAtPmN1cl9yeCA9ICV1LCB0dGltZXIgPSAlZCwgcnggPSAlZCkgZ28vc3RheSBpbiBzdXNwZW5kIG1vZGVcbiIsCisJCQkJIHRwLT5uaXIsIHRwLT5jdXJfcngsIHRwLT50dGltZXIsIHJ4KTsKIAkJaWYgKHRwLT5jaGlwX2lkID09IExDODJDMTY4KSB7CiAJCQlpb3dyaXRlMzIoMHgwMCwgaW9hZGRyICsgQ1NSNyk7CiAJCQltb2RfdGltZXIoJnRwLT50aW1lciwgUlVOX0FUKEhaLzUwKSk7CiAJCX0gZWxzZSB7CiAJCQlpZiAodHAtPnR0aW1lciA9PSAwIHx8IChpb3JlYWQzMihpb2FkZHIgKyBDU1IxMSkgJiAweGZmZmYpID09IDApIHsKIAkJCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaW4gcnggc3VzcGVuZCBtb2RlOiAoJWx1KSBzZXQgdGltZXJcbiIsIGRldi0+bmFtZSwgdHAtPm5pcik7CisJCQkJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCQkJCSAiaW4gcnggc3VzcGVuZCBtb2RlOiAoJWx1KSBzZXQgdGltZXJcbiIsCisJCQkJCQkgdHAtPm5pcik7CiAJCQkJaW93cml0ZTMyKHR1bGlwX3RibFt0cC0+Y2hpcF9pZF0udmFsaWRfaW50cnMgfCBUaW1lckludCwKIAkJCQkJaW9hZGRyICsgQ1NSNyk7CiAJCQkJaW93cml0ZTMyKFRpbWVySW50LCBpb2FkZHIgKyBDU1I1KTsKQEAgLTc4Nyw4ICs3OTMsOCBAQAogCX0KIAogCWlmICh0dWxpcF9kZWJ1ZyA+IDQpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZXhpdGluZyBpbnRlcnJ1cHQsIGNzcjU9JSM0LjR4LlxuIiwKLQkJCSAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSkpOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGV4aXRpbmcgaW50ZXJydXB0LCBjc3I1PSUjMDR4XG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9tZWRpYS5jIGIvZHJpdmVycy9uZXQvdHVsaXAvbWVkaWEuYwppbmRleCBkOGZkYTgzLi42OGIxNzBhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9tZWRpYS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL21lZGlhLmMKQEAgLTE4Miw5ICsxODIsOCBAQAogCQlzd2l0Y2ggKG1sZWFmLT50eXBlKSB7CiAJCWNhc2UgMDoJCQkJCS8qIDIxMTQwIG5vbi1NSUkgeGN2ci4gKi8KIAkJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBVc2luZyBhIDIxMTQwIG5vbi1NSUkgdHJhbnNjZWl2ZXIiCi0JCQkJCSAgICIgd2l0aCBjb250cm9sIHNldHRpbmcgJTIuMnguXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIHBbMV0pOworCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVXNpbmcgYSAyMTE0MCBub24tTUlJIHRyYW5zY2VpdmVyIHdpdGggY29udHJvbCBzZXR0aW5nICUwMnhcbiIsCisJCQkJICAgICAgIGRldi0+bmFtZSwgcFsxXSk7CiAJCQlkZXYtPmlmX3BvcnQgPSBwWzBdOwogCQkJaWYgKHN0YXJ0dXApCiAJCQkJaW93cml0ZTMyKG10YWJsZS0+Y3NyMTJkaXIgfCAweDEwMCwgaW9hZGRyICsgQ1NSMTIpOwpAQCAtMjA1LDE1ICsyMDQsMTUgQEAKIAkJCQlzdHJ1Y3QgbWVkaWFsZWFmICpybGVhZiA9ICZtdGFibGUtPm1sZWFmW210YWJsZS0+aGFzX3Jlc2V0XTsKIAkJCQl1bnNpZ25lZCBjaGFyICpyc3QgPSBybGVhZi0+bGVhZmRhdGE7CiAJCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZXNldHRpbmcgdGhlIHRyYW5zY2VpdmVyLlxuIiwKLQkJCQkJCSAgIGRldi0+bmFtZSk7CisJCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVzZXR0aW5nIHRoZSB0cmFuc2NlaXZlclxuIiwKKwkJCQkJICAgICAgIGRldi0+bmFtZSk7CiAJCQkJZm9yIChpID0gMDsgaSA8IHJzdFswXTsgaSsrKQogCQkJCQlpb3dyaXRlMzIoZ2V0X3UxNihyc3QgKyAxICsgKGk8PDEpKSA8PCAxNiwgaW9hZGRyICsgQ1NSMTUpOwogCQkJfQogCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IDIxMTQzIG5vbi1NSUkgJXMgdHJhbnNjZWl2ZXIgY29udHJvbCAiCi0JCQkJCSAgICIlNC40eC8lNC40eC5cbiIsCi0JCQkJCSAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sIHNldHVwWzBdLCBzZXR1cFsxXSk7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAyMTE0MyBub24tTUlJICVzIHRyYW5zY2VpdmVyIGNvbnRyb2wgJTA0eC8lMDR4XG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAorCQkJCSAgICAgICBzZXR1cFswXSwgc2V0dXBbMV0pOwogCQkJaWYgKHBbMF0gJiAweDQwKSB7CS8qIFNJQSAoQ1NSMTMtMTUpIHNldHVwIHZhbHVlcyBhcmUgcHJvdmlkZWQuICovCiAJCQkJY3NyMTN2YWwgPSBzZXR1cFswXTsKIAkJCQljc3IxNHZhbCA9IHNldHVwWzFdOwpAQCAtMjQwLDggKzIzOSw4IEBACiAJCQkJaWYgKHN0YXJ0dXApIGlvd3JpdGUzMihjc3IxM3ZhbCwgaW9hZGRyICsgQ1NSMTMpOwogCQkJfQogCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICBTZXR0aW5nIENTUjE1IHRvICU4Ljh4LyU4Ljh4LlxuIiwKLQkJCQkJICAgZGV2LT5uYW1lLCBjc3IxNWRpciwgY3NyMTV2YWwpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIFNldHRpbmcgQ1NSMTUgdG8gJTA4eC8lMDh4XG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsIGNzcjE1ZGlyLCBjc3IxNXZhbCk7CiAJCQlpZiAobWxlYWYtPnR5cGUgPT0gNCkKIAkJCQluZXdfY3NyNiA9IDB4ODIwMjAwMDAgfCAoKHNldHVwWzJdICYgMHg3MSkgPDwgMTgpOwogCQkJZWxzZQpAQCAtMzE3LDggKzMxNiw5IEBACiAJCQkJaWYgKHRwLT5taWlfYWR2ZXJ0aXNlID09IDApCiAJCQkJCXRwLT5taWlfYWR2ZXJ0aXNlID0gdHAtPmFkdmVydGlzaW5nW3BoeV9udW1dOwogCQkJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIEFkdmVydGlzaW5nICU0LjR4IG9uIE1JSSAlZC5cbiIsCi0JCQkJCSAgICAgICBkZXYtPm5hbWUsIHRwLT5taWlfYWR2ZXJ0aXNlLCB0cC0+cGh5c1twaHlfbnVtXSk7CisJCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIEFkdmVydGlzaW5nICUwNHggb24gTUlJICVkXG4iLAorCQkJCQkgICAgICAgZGV2LT5uYW1lLCB0cC0+bWlpX2FkdmVydGlzZSwKKwkJCQkJICAgICAgIHRwLT5waHlzW3BoeV9udW1dKTsKIAkJCQl0dWxpcF9tZGlvX3dyaXRlKGRldiwgdHAtPnBoeXNbcGh5X251bV0sIDQsIHRwLT5taWlfYWR2ZXJ0aXNlKTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMzM1LDggKzMzNSw4IEBACiAJCQkJc3RydWN0IG1lZGlhbGVhZiAqcmxlYWYgPSAmbXRhYmxlLT5tbGVhZlttdGFibGUtPmhhc19yZXNldF07CiAJCQkJdW5zaWduZWQgY2hhciAqcnN0ID0gcmxlYWYtPmxlYWZkYXRhOwogCQkJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVzZXR0aW5nIHRoZSB0cmFuc2NlaXZlci5cbiIsCi0JCQkJCQkgICBkZXYtPm5hbWUpOworCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlc2V0dGluZyB0aGUgdHJhbnNjZWl2ZXJcbiIsCisJCQkJCSAgICAgICBkZXYtPm5hbWUpOwogCQkJCWZvciAoaSA9IDA7IGkgPCByc3RbMF07IGkrKykKIAkJCQkJaW93cml0ZTMyKGdldF91MTYocnN0ICsgMSArIChpPDwxKSkgPDwgMTYsIGlvYWRkciArIENTUjE1KTsKIAkJCX0KQEAgLTM0NCwyMCArMzQ0LDIwIEBACiAJCQlicmVhazsKIAkJfQogCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAgSW52YWxpZCBtZWRpYSB0YWJsZSBzZWxlY3Rpb24gJWQuXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIG1sZWFmLT50eXBlKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIEludmFsaWQgbWVkaWEgdGFibGUgc2VsZWN0aW9uICVkXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgbWxlYWYtPnR5cGUpOwogCQkJbmV3X2NzcjYgPSAweDAyMEUwMDAwOwogCQl9CiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFVzaW5nIG1lZGlhIHR5cGUgJXMsIENTUjEyIGlzICUyLjJ4LlxuIiwKLQkJCQkgICBkZXYtPm5hbWUsIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBVc2luZyBtZWRpYSB0eXBlICVzLCBDU1IxMiBpcyAlMDJ4XG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sCiAJCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpICYgMHhmZik7CiAJfSBlbHNlIGlmICh0cC0+Y2hpcF9pZCA9PSBMQzgyQzE2OCkgewogCQlpZiAoc3RhcnR1cCAmJiAhIHRwLT5tZWRpYWxvY2spCiAJCQlkZXYtPmlmX3BvcnQgPSB0cC0+bWlpX2NudCA/IDExIDogMDsKIAkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUE5JQyBQSFkgc3RhdHVzIGlzICUzLjN4LCBtZWRpYSAlcy5cbiIsCi0JCQkJICAgZGV2LT5uYW1lLCBpb3JlYWQzMihpb2FkZHIgKyAweEI4KSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0pOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQTklDIFBIWSBzdGF0dXMgaXMgJTMuM3gsIG1lZGlhICVzXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgMHhCOCksIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdKTsKIAkJaWYgKHRwLT5taWlfY250KSB7CiAJCQluZXdfY3NyNiA9IDB4ODEwQzAwMDA7CiAJCQlpb3dyaXRlMzIoMHgwMDAxLCBpb2FkZHIgKyBDU1IxNSk7CkBAIC0zODgsMTAgKzM4OCw5IEBACiAJCX0gZWxzZQogCQkJbmV3X2NzcjYgPSAweDAzODYwMDAwOwogCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyBtZWRpYSBkZXNjcmlwdGlvbiB0YWJsZSwgYXNzdW1pbmcgIgotCQkJCSAgICIlcyB0cmFuc2NlaXZlciwgQ1NSMTIgJTIuMnguXG4iLAotCQkJCSAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sCi0JCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gbWVkaWEgZGVzY3JpcHRpb24gdGFibGUsIGFzc3VtaW5nICVzIHRyYW5zY2VpdmVyLCBDU1IxMiAlMDJ4XG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sCisJCQkgICAgICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKIAl9CiAKIAl0cC0+Y3NyNiA9IG5ld19jc3I2IHwgKHRwLT5jc3I2ICYgMHhmZGZmKSB8ICh0cC0+ZnVsbF9kdXBsZXggPyAweDAyMDAgOiAwKTsKQEAgLTQxNSwxNiArNDE0LDE3IEBACiAJYm1zciA9IHR1bGlwX21kaW9fcmVhZChkZXYsIHRwLT5waHlzWzBdLCBNSUlfQk1TUik7CiAJbHBhID0gdHVsaXBfbWRpb19yZWFkKGRldiwgdHAtPnBoeXNbMF0sIE1JSV9MUEEpOwogCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBNSUkgc3RhdHVzICU0LjR4LCBMaW5rIHBhcnRuZXIgcmVwb3J0ICIKLQkJCSAgICIlNC40eC5cbiIsIGRldi0+bmFtZSwgYm1zciwgbHBhKTsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAiTUlJIHN0YXR1cyAlMDR4LCBMaW5rIHBhcnRuZXIgcmVwb3J0ICUwNHhcbiIsCisJCQkgYm1zciwgbHBhKTsKIAlpZiAoYm1zciA9PSAweGZmZmYpCiAJCXJldHVybiAtMjsKIAlpZiAoKGJtc3IgJiBCTVNSX0xTVEFUVVMpID09IDApIHsKIAkJaW50IG5ld19ibXNyID0gdHVsaXBfbWRpb19yZWFkKGRldiwgdHAtPnBoeXNbMF0sIE1JSV9CTVNSKTsKIAkJaWYgKChuZXdfYm1zciAmIEJNU1JfTFNUQVRVUykgPT0gMCkgewogCQkJaWYgKHR1bGlwX2RlYnVnICA+IDEpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vIGxpbmsgYmVhdCBvbiB0aGUgTUlJIGludGVyZmFjZSwiCi0JCQkJCSAgICIgc3RhdHVzICU0LjR4LlxuIiwgZGV2LT5uYW1lLCBuZXdfYm1zcik7CisJCQkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJCQkgIk5vIGxpbmsgYmVhdCBvbiB0aGUgTUlJIGludGVyZmFjZSwgc3RhdHVzICUwNHhcbiIsCisJCQkJCSBuZXdfYm1zcik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9CkBAIC00NDMsMTAgKzQ0MywxMCBAQAogCQl0dWxpcF9yZXN0YXJ0X3J4dHgodHApOwogCiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDApCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogU2V0dGluZyAlcy1kdXBsZXggYmFzZWQgb24gTUlJIgotCQkJCSAgICIjJWQgbGluayBwYXJ0bmVyIGNhcGFiaWxpdHkgb2YgJTQuNHguXG4iLAotCQkJCSAgIGRldi0+bmFtZSwgdHAtPmZ1bGxfZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiLAotCQkJCSAgIHRwLT5waHlzWzBdLCBscGEpOworCQkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJCSAiU2V0dGluZyAlcy1kdXBsZXggYmFzZWQgb24gTUlJIyVkIGxpbmsgcGFydG5lciBjYXBhYmlsaXR5IG9mICUwNHhcbiIsCisJCQkJIHRwLT5mdWxsX2R1cGxleCA/ICJmdWxsIiA6ICJoYWxmIiwKKwkJCQkgdHAtPnBoeXNbMF0sIGxwYSk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtNTAxLDE1ICs1MDEsMTMgQEAKIAogCQl0cC0+cGh5c1twaHlfaWR4KytdID0gcGh5OwogCi0JCXByaW50ayAoS0VSTl9JTkZPICJ0dWxpcCVkOiAgTUlJIHRyYW5zY2VpdmVyICMlZCAiCi0JCQkiY29uZmlnICU0LjR4IHN0YXR1cyAlNC40eCBhZHZlcnRpc2luZyAlNC40eC5cbiIsCisJCXByX2luZm8oInR1bGlwJWQ6ICBNSUkgdHJhbnNjZWl2ZXIgIyVkIGNvbmZpZyAlMDR4IHN0YXR1cyAlMDR4IGFkdmVydGlzaW5nICUwNHhcbiIsCiAJCQlib2FyZF9pZHgsIHBoeSwgbWlpX3JlZzAsIG1paV9zdGF0dXMsIG1paV9hZHZlcnQpOwogCiAJCS8qIEZpeHVwIGZvciBETGluayB3aXRoIG1pc3dpcmVkIFBIWS4gKi8KIAkJaWYgKG1paV9hZHZlcnQgIT0gdG9fYWR2ZXJ0KSB7Ci0JCQlwcmludGsgKEtFUk5fREVCVUcgInR1bGlwJWQ6ICBBZHZlcnRpc2luZyAlNC40eCBvbiBQSFkgJWQsIgotCQkJCSIgcHJldmlvdXNseSBhZHZlcnRpc2luZyAlNC40eC5cbiIsCi0JCQkJYm9hcmRfaWR4LCB0b19hZHZlcnQsIHBoeSwgbWlpX2FkdmVydCk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAidHVsaXAlZDogIEFkdmVydGlzaW5nICUwNHggb24gUEhZICVkLCBwcmV2aW91c2x5IGFkdmVydGlzaW5nICUwNHhcbiIsCisJCQkgICAgICAgYm9hcmRfaWR4LCB0b19hZHZlcnQsIHBoeSwgbWlpX2FkdmVydCk7CiAJCQl0dWxpcF9tZGlvX3dyaXRlIChkZXYsIHBoeSwgNCwgdG9fYWR2ZXJ0KTsKIAkJfQogCkBAIC01NTQsNyArNTUyLDcgQEAKIAl9CiAJdHAtPm1paV9jbnQgPSBwaHlfaWR4OwogCWlmICh0cC0+bXRhYmxlICYmIHRwLT5tdGFibGUtPmhhc19taWkgJiYgcGh5X2lkeCA9PSAwKSB7Ci0JCXByaW50ayAoS0VSTl9JTkZPICJ0dWxpcCVkOiAqKipXQVJOSU5HKioqOiBObyBNSUkgdHJhbnNjZWl2ZXIgZm91bmQhXG4iLAorCQlwcl9pbmZvKCJ0dWxpcCVkOiAqKipXQVJOSU5HKioqOiBObyBNSUkgdHJhbnNjZWl2ZXIgZm91bmQhXG4iLAogCQkJYm9hcmRfaWR4KTsKIAkJdHAtPnBoeXNbMF0gPSAxOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3BuaWMuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3BuaWMuYwppbmRleCBkMzI1M2VkLi45NjZlZmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9wbmljLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvcG5pYy5jCkBAIC00MCw4ICs0MCw4IEBACiAJCQluZXdfY3NyNiB8PSAweDAwMDAwMjAwOwogCQl9CiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFBOSUMgYXV0b25lZ290aWF0ZWQgc3RhdHVzICU4Ljh4LCAlcy5cbiIsCi0JCQkJICAgZGV2LT5uYW1lLCBwaHlfcmVnLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFBOSUMgYXV0b25lZ290aWF0ZWQgc3RhdHVzICUwOHgsICVzXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgcGh5X3JlZywgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0pOwogCQlpZiAodHAtPmNzcjYgIT0gbmV3X2NzcjYpIHsKIAkJCXRwLT5jc3I2ID0gbmV3X2NzcjY7CiAJCQkvKiBSZXN0YXJ0IFR4ICovCkBAIC01OCw4ICs1OCw4IEBACiAJaW50IHBoeV9yZWcgPSBpb3JlYWQzMihpb2FkZHIgKyAweEI4KTsKIAogCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogUE5JQyBsaW5rIGNoYW5nZWQgc3RhdGUgJTguOHgsIENTUjUgJTguOHguXG4iLAotCQkJICAgZGV2LT5uYW1lLCBwaHlfcmVnLCBjc3I1KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQTklDIGxpbmsgY2hhbmdlZCBzdGF0ZSAlMDh4LCBDU1I1ICUwOHhcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIHBoeV9yZWcsIGNzcjUpOwogCWlmIChpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSAmIFRQTG5rRmFpbCkgewogCQlpb3dyaXRlMzIoKGlvcmVhZDMyKGlvYWRkciArIENTUjcpICYgflRQTG5rRmFpbCkgfCBUUExua1Bhc3MsIGlvYWRkciArIENTUjcpOwogCQkvKiBJZiB3ZSB1c2UgYW4gZXh0ZXJuYWwgTUlJLCB0aGVuIHdlIG11c3RuJ3QgdXNlIHRoZQpAQCAtMTE0LDkgKzExNCw4IEBACiAJCWludCBjc3I1ID0gaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSk7CiAKIAkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogUE5JQyB0aW1lciBQSFkgc3RhdHVzICU4Ljh4LCAlcyAiCi0JCQkJICAgIkNTUjUgJTguOHguXG4iLAotCQkJCSAgIGRldi0+bmFtZSwgcGh5X3JlZywgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sIGNzcjUpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBQTklDIHRpbWVyIFBIWSBzdGF0dXMgJTA4eCwgJXMgQ1NSNSAlMDh4XG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgcGh5X3JlZywgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sIGNzcjUpOwogCQlpZiAocGh5X3JlZyAmIDB4MDQwMDAwMDApIHsJLyogUmVtb3RlIGxpbmsgZmF1bHQgKi8KIAkJCWlvd3JpdGUzMigweDAyMDFGMDc4LCBpb2FkZHIgKyAweEI4KTsKIAkJCW5leHRfdGljayA9IDEqSFo7CkBAIC0xMjYsMTAgKzEyNSwxMSBAQAogCQkJbmV4dF90aWNrID0gNjAqSFo7CiAJCX0gZWxzZSBpZiAoY3NyNSAmIFRQTG5rRmFpbCkgeyAvKiAxMDBiYXNlVHggbGluayBiZWF0ICovCiAJCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogJXMgbGluayBiZWF0IGZhaWxlZCwgQ1NSMTIgJTQuNHgsICIKLQkJCQkJICAgIkNTUjUgJTguOHgsIFBIWSAlMy4zeC5cbiIsCi0JCQkJCSAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sIGNzcjEyLAotCQkJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I1KSwgaW9yZWFkMzIoaW9hZGRyICsgMHhCOCkpOworCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogJXMgbGluayBiZWF0IGZhaWxlZCwgQ1NSMTIgJTA0eCwgQ1NSNSAlMDh4LCBQSFkgJTAzeFxuIiwKKwkJCQkgICAgICAgZGV2LT5uYW1lLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwKKwkJCQkgICAgICAgY3NyMTIsCisJCQkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIENTUjUpLAorCQkJCSAgICAgICBpb3JlYWQzMihpb2FkZHIgKyAweEI4KSk7CiAJCQluZXh0X3RpY2sgPSAzKkhaOwogCQkJaWYgKHRwLT5tZWRpYWxvY2spIHsKIAkJCX0gZWxzZSBpZiAodHAtPm53YXlzZXQgICYmICAoZGV2LT5pZl9wb3J0ICYgMSkpIHsKQEAgLTE1MSwxMCArMTUxLDExIEBACiAJCQkJdHVsaXBfcmVzdGFydF9yeHR4KHRwKTsKIAkJCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAkJCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogQ2hhbmdpbmcgUE5JQyBjb25maWd1cmF0aW9uIHRvICVzICIKLQkJCQkJCSAgICIlcy1kdXBsZXgsIENTUjYgJTguOHguXG4iLAotCQkJCQkJICAgZGV2LT5uYW1lLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwKLQkJCQkJCSAgIHRwLT5mdWxsX2R1cGxleCA/ICJmdWxsIiA6ICJoYWxmIiwgbmV3X2NzcjYpOworCQkJCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkJCQkgIkNoYW5naW5nIFBOSUMgY29uZmlndXJhdGlvbiB0byAlcyAlcy1kdXBsZXgsIENTUjYgJTA4eFxuIiwKKwkJCQkJCSBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwKKwkJCQkJCSB0cC0+ZnVsbF9kdXBsZXggPyAiZnVsbCIgOiAiaGFsZiIsCisJCQkJCQkgbmV3X2NzcjYpOwogCQkJfQogCQl9CiAJfQpAQCAtMTYyLDcgKzE2Myw3IEBACiAJbW9kX3RpbWVyKCZ0cC0+dGltZXIsIFJVTl9BVChuZXh0X3RpY2spKTsKIAlpZighaW9yZWFkMzIoaW9hZGRyICsgQ1NSNykpIHsKIAkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzdyB0aW1lciB3YWtldXAuXG4iLCBkZXYtPm5hbWUpOworCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAic3cgdGltZXIgd2FrZXVwXG4iKTsKIAkJZGlzYWJsZV9pcnEoZGV2LT5pcnEpOwogCQl0dWxpcF9yZWZpbGxfcngoZGV2KTsKIAkJZW5hYmxlX2lycShkZXYtPmlycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC9wbmljMi5jIGIvZHJpdmVycy9uZXQvdHVsaXAvcG5pYzIuYwppbmRleCBkODQxODY5Li5iODE5NzY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9wbmljMi5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3BuaWMyLmMKQEAgLTg3LDggKzg3LDggQEAKIAlpbnQgbmV4dF90aWNrID0gNjAqSFo7CiAKIAlpZiAodHVsaXBfZGVidWcgPiAzKQotCQlwcmludGsoS0VSTl9JTkZPIiVzOiBQTklDMiBuZWdvdGlhdGlvbiBzdGF0dXMgJTguOHguXG4iLAotICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LCAiUE5JQzIgbmVnb3RpYXRpb24gc3RhdHVzICUwOHhcbiIsCisJCQkgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKIAogCWlmIChuZXh0X3RpY2spIHsKIAkJbW9kX3RpbWVyKCZ0cC0+dGltZXIsIFJVTl9BVChuZXh0X3RpY2spKTsKQEAgLTEyNSw4ICsxMjUsOCBAQAogICAgICAgICBjc3IxNCB8PSAweDAwMDAxMTg0OwogCiAJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZXN0YXJ0aW5nIFBOSUMyIGF1dG9uZWdvdGlhdGlvbiwgIgotICAgICAgICAgICAgICAgICAgICAgICJjc3IxND0lOC44eC5cbiIsIGRldi0+bmFtZSwgY3NyMTQpOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlc3RhcnRpbmcgUE5JQzIgYXV0b25lZ290aWF0aW9uLCBjc3IxND0lMDh4XG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBjc3IxNCk7CiAKICAgICAgICAgLyogdGVsbCBwbmljMl9sbmtfY2hhbmdlIHdlIGFyZSBkb2luZyBhbiBud2F5IG5lZ290aWF0aW9uICovCiAJZGV2LT5pZl9wb3J0ID0gMDsKQEAgLTEzNyw4ICsxMzcsOCBAQAogCiAJdHAtPmNzcjYgPSBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KTsKIAlpZiAodHVsaXBfZGVidWcgPiAxKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE9uIEVudHJ5IHRvIE53YXksICIKLSAgICAgICAgICAgICAgICAgICAgICAiY3NyNj0lOC44eC5cbiIsIGRldi0+bmFtZSwgdHAtPmNzcjYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE9uIEVudHJ5IHRvIE53YXksIGNzcjY9JTA4eFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgdHAtPmNzcjYpOwogCiAgICAgICAgIC8qIG1hc2sgb2ZmIGFueSBiaXRzIG5vdCB0byB0b3VjaAogICAgICAgICAgKiBjb21tZW50IGF0IHRvcCBvZiBmaWxlIGV4cGxhaW5zIG1hc2sgdmFsdWUKQEAgLTE4MSw5ICsxODEsOSBAQAogCWludCBjc3IxMiA9IGlvcmVhZDMyKGlvYWRkciArIENTUjEyKTsKIAogCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCXByaW50ayhLRVJOX0lORk8iJXM6IFBOSUMyIGxpbmsgc3RhdHVzIGludGVycnVwdCAlOC44eCwgIgotICAgICAgICAgICAgICAgICAgICAgICAiIENTUjUgJXgsICU4Ljh4LlxuIiwgZGV2LT5uYW1lLCBjc3IxMiwKLSAgICAgICAgICAgICAgICAgICAgICAgY3NyNSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTQpKTsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJICJQTklDMiBsaW5rIHN0YXR1cyBpbnRlcnJ1cHQgJTA4eCwgIENTUjUgJXgsICUwOHhcbiIsCisJCQkgY3NyMTIsIGNzcjUsIGlvcmVhZDMyKGlvYWRkciArIENTUjE0KSk7CiAKIAkvKiBJZiBOV2F5IGZpbmlzaGVkIGFuZCB3ZSBoYXZlIGEgbmVnb3RpYXRlZCBwYXJ0bmVyIGNhcGFiaWxpdHkuCiAgICAgICAgICAqIGNoZWNrIGJpdHMgMTQ6MTIgZm9yIGJpdCBwYXR0ZXJuIDEwMSAtIGFsbCBpcyBnb29kCkBAIC0yMTUsOSArMjE1LDkgQEAKIAkJCWVsc2UgaWYgKG5lZ290aWF0ZWQgJiAweDAwMjApCWRldi0+aWZfcG9ydCA9IDA7CiAJCQllbHNlIHsKIAkJCSAgICAgaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJICAgICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBmdW5ueSBhdXRvbmVnb3RpYXRlIHJlc3VsdCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNzcjEyICU4Ljh4IGFkdmVydGlzaW5nICU0LjR4XG4iLAotCQkJICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIGNzcjEyLCB0cC0+c3ltX2FkdmVydGlzZSk7CisJCQkJICAgICBkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkJCSAgICAgICJmdW5ueSBhdXRvbmVnb3RpYXRlIHJlc3VsdCBjc3IxMiAlMDh4IGFkdmVydGlzaW5nICUwNHhcbiIsCisJCQkJCSAgICAgIGNzcjEyLCB0cC0+c3ltX2FkdmVydGlzZSk7CiAJCQkgICAgIHRwLT5ud2F5c2V0ID0gMDsKIAkJCSAgICAgLyogc28gY2hlY2sgIGlmIDEwMGJhc2VUeCBsaW5rIHN0YXRlIGlzIG9rYXkgKi8KIAkJCSAgICAgaWYgKChjc3IxMiAmIDIpID09IDAgICYmICAodHAtPnN5bV9hZHZlcnRpc2UgJiAweDAxODApKQpAQCAtMjMxLDEwICsyMzEsMTEgQEAKIAogCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkgewogCQkJICAgICAgIGlmICh0cC0+bndheXNldCkKLQkJCSAgICAgICAgICAgICBwcmludGsoS0VSTl9JTkZPICIlczogU3dpdGNoaW5nIHRvICVzIGJhc2VkIG9uIGxpbmsgIgotCQkJCSAgICAibmVnb3RpYXRpb24gJTQuNHggJiAlNC40eCA9ICU0LjR4LlxuIiwKLQkJCQkgICAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnN5bV9hZHZlcnRpc2UsIHRwLT5scGFyLCBuZWdvdGlhdGVkKTsKKwkJCQkgICAgICAgZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJCQkJIlN3aXRjaGluZyB0byAlcyBiYXNlZCBvbiBsaW5rIG5lZ290aWF0aW9uICUwNHggJiAlMDR4ID0gJTA0eFxuIiwKKwkJCQkJCW1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAorCQkJCQkJdHAtPnN5bV9hZHZlcnRpc2UsIHRwLT5scGFyLAorCQkJCQkJbmVnb3RpYXRlZCk7CiAJCQl9CiAKICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlbWVtYmVyIHRvIHR1cm4gb2ZmIGJpdCA3IC0gYXV0b25lZ290aWF0ZQpAQCAtMjcwLDkgKzI3MSw5IEBACiAJCQlpb3dyaXRlMzIoMSwgaW9hZGRyICsgQ1NSMTMpOwogCiAJCQlpZiAodHVsaXBfZGVidWcgPiAyKQotCQkJICAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiJXM6ICBTZXR0aW5nIENTUjYgJTguOHgvJXggQ1NSMTIgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJTguOHguXG4iLCBkZXYtPm5hbWUsIHRwLT5jc3I2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKKwkJCSAgICAgICAgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZXR0aW5nIENTUjYgJTA4eC8leCBDU1IxMiAlMDh4XG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsIHRwLT5jc3I2LAorCQkJCSAgICAgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKIAogCQkJLyogbm93IHRoZSBmb2xsb3dpbmcgYWN0dWFsbHkgd3JpdGVzIG91dCB0aGUKIAkJCSAqIG5ldyBjc3I2IHZhbHVlcwpAQCAtMjgyLDkgKzI4Myw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAKIAkgICAgICAgIH0gZWxzZSB7Ci0JICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBBdXRvbmVnb3RpYXRpb24gZmFpbGVkLCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidXNpbmcgJXMsIGxpbmsgYmVhdCBzdGF0dXMgJTQuNHguXG4iLAotCQkJCSAgICAgZGV2LT5uYW1lLCBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwgY3NyMTIpOworCSAgICAgICAgICAgICAgICBkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkJICJBdXRvbmVnb3RpYXRpb24gZmFpbGVkLCB1c2luZyAlcywgbGluayBiZWF0IHN0YXR1cyAlMDR4XG4iLAorCQkJCSBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwgY3NyMTIpOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZW1lbWJlciB0byB0dXJuIG9mZiBiaXQgNyAtIGF1dG9uZWdvdGlhdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAqIGVuYWJsZSBzbyB3ZSBkb24ndCBmb3JnZXQKQEAgLTMzOSw5ICszNDAsOSBAQAogCSAgICAgICAgLyogd2UgYXJlIGF0IDEwMG1iIGFuZCBhIHBvdGVudGlhbCBsaW5rIGNoYW5nZSBvY2N1cnJlZCAqLwogCiAJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQlwcmludGsoS0VSTl9JTkZPIiVzOiBQTklDMiAlcyBsaW5rIGJlYXQgJXMuXG4iLAotCQkJCSAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sCi0JCQkJICAgKGNzcjEyICYgMikgPyAiZmFpbGVkIiA6ICJnb29kIik7CisJCQlkZXZfaW5mbygmZGV2LT5kZXYsICJQTklDMiAlcyBsaW5rIGJlYXQgJXNcbiIsCisJCQkJIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAorCQkJCSAoY3NyMTIgJiAyKSA/ICJmYWlsZWQiIDogImdvb2QiKTsKIAogICAgICAgICAgICAgICAgIC8qIGNoZWNrIDEwMCBsaW5rIGJlYXQgKi8KIApAQCAtMzY0LDkgKzM2NSw5IEBACiAJICAgICAgICAvKiB3ZSBhcmUgYXQgMTBtYiBhbmQgYSBwb3RlbnRpYWwgbGluayBjaGFuZ2Ugb2NjdXJyZWQgKi8KIAogCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJcHJpbnRrKEtFUk5fSU5GTyIlczogUE5JQzIgJXMgbGluayBiZWF0ICVzLlxuIiwKLQkJCQkgICBkZXYtPm5hbWUsIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAotCQkJCSAgIChjc3IxMiAmIDQpID8gImZhaWxlZCIgOiAiZ29vZCIpOworCQkJZGV2X2luZm8oJmRldi0+ZGV2LCAiUE5JQzIgJXMgbGluayBiZWF0ICVzXG4iLAorCQkJCSBtZWRpYW5hbWVbZGV2LT5pZl9wb3J0XSwKKwkJCQkgKGNzcjEyICYgNCkgPyAiZmFpbGVkIiA6ICJnb29kIik7CiAKIAogICAgICAgICAgICAgICAgIHRwLT5ud2F5ID0gMDsKQEAgLTM4NSw3ICszODYsNyBAQAogCiAKIAlpZiAodHVsaXBfZGVidWcgPiAxKQotCQlwcmludGsoS0VSTl9JTkZPIiVzOiBQTklDMiBMaW5rIENoYW5nZSBEZWZhdWx0P1xuIixkZXYtPm5hbWUpOworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJQTklDMiBMaW5rIENoYW5nZSBEZWZhdWx0P1xuIik7CiAKICAgICAgICAgLyogaWYgYWxsIGVsc2UgZmFpbHMgZGVmYXVsdCB0byB0cnlpbmcgMTBiYXNlVC1IRCAqLwogCWRldi0+aWZfcG9ydCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC90aW1lci5jIGIvZHJpdmVycy9uZXQvdHVsaXAvdGltZXIuYwppbmRleCBhMGUwODQyLi4zNmMyNzI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC90aW1lci5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3RpbWVyLmMKQEAgLTI4LDExICsyOCwxMSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAodHVsaXBfZGVidWcgPiAyKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogTWVkaWEgc2VsZWN0aW9uIHRpY2ssICVzLCBzdGF0dXMgJTguOHggbW9kZSIKLQkJCSAgICIgJTguOHggU0lBICU4Ljh4ICU4Ljh4ICU4Ljh4ICU4Ljh4LlxuIiwKLQkJCSAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0sIGlvcmVhZDMyKGlvYWRkciArIENTUjUpLAotCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNiksIGNzcjEyLCBpb3JlYWQzMihpb2FkZHIgKyBDU1IxMyksCi0JCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1IxNCksIGlvcmVhZDMyKGlvYWRkciArIENTUjE1KSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogTWVkaWEgc2VsZWN0aW9uIHRpY2ssICVzLCBzdGF0dXMgJTA4eCBtb2RlICUwOHggU0lBICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdLAorCQkgICAgICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSksIGlvcmVhZDMyKGlvYWRkciArIENTUjYpLAorCQkgICAgICAgY3NyMTIsIGlvcmVhZDMyKGlvYWRkciArIENTUjEzKSwKKwkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIENTUjE0KSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTUpKTsKIAl9CiAJc3dpdGNoICh0cC0+Y2hpcF9pZCkgewogCWNhc2UgREMyMTE0MDoKQEAgLTQ4LDkgKzQ4LDkgQEAKIAkJCSAgIEFzc3VtZSB0aGlzIGEgZ2VuZXJpYyBNSUkgb3IgU1lNIHRyYW5zY2VpdmVyLiAqLwogCQkJbmV4dF90aWNrID0gNjAqSFo7CiAJCQlpZiAodHVsaXBfZGVidWcgPiAyKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogbmV0d29yayBtZWRpYSBtb25pdG9yIENTUjYgJTguOHggIgotCQkJCQkgICAiQ1NSMTIgMHglMi4yeC5cbiIsCi0JCQkJCSAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNiksIGNzcjEyICYgMHhmZik7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBuZXR3b3JrIG1lZGlhIG1vbml0b3IgQ1NSNiAlMDh4IENTUjEyIDB4JTAyeFxuIiwKKwkJCQkgICAgICAgZGV2LT5uYW1lLAorCQkJCSAgICAgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSwgY3NyMTIgJiAweGZmKTsKIAkJCWJyZWFrOwogCQl9CiAJCW1sZWFmID0gJnRwLT5tdGFibGUtPm1sZWFmW3RwLT5jdXJfaW5kZXhdOwpAQCAtNjIsOSArNjIsOCBAQAogCQkJczggYml0bnVtID0gcFtvZmZzZXRdOwogCQkJaWYgKHBbb2Zmc2V0KzFdICYgMHg4MCkgewogCQkJCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCQkJCXByaW50ayhLRVJOX0RFQlVHIiVzOiBUcmFuc2NlaXZlciBtb25pdG9yIHRpY2sgIgotCQkJCQkJICAgIkNTUjEyPSUjMi4yeCwgbm8gbWVkaWEgc2Vuc2UuXG4iLAotCQkJCQkJICAgZGV2LT5uYW1lLCBjc3IxMik7CisJCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJhbnNjZWl2ZXIgbW9uaXRvciB0aWNrIENTUjEyPSUjMDJ4LCBubyBtZWRpYSBzZW5zZVxuIiwKKwkJCQkJICAgICAgIGRldi0+bmFtZSwgY3NyMTIpOwogCQkJCWlmIChtbGVhZi0+dHlwZSA9PSA0KSB7CiAJCQkJCWlmIChtbGVhZi0+bWVkaWEgPT0gMyAmJiAoY3NyMTIgJiAweDAyKSkKIAkJCQkJCWdvdG8gc2VsZWN0X25leHRfbWVkaWE7CkBAIC03MiwxNiArNzEsMTYgQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc2NlaXZlciBtb25pdG9yIHRpY2s6IENTUjEyPSUjMi4yeCIKLQkJCQkJICAgIiBiaXQgJWQgaXMgJWQsIGV4cGVjdGluZyAlZC5cbiIsCi0JCQkJCSAgIGRldi0+bmFtZSwgY3NyMTIsIChiaXRudW0gPj4gMSkgJiA3LAotCQkJCQkgICAoY3NyMTIgJiAoMSA8PCAoKGJpdG51bSA+PiAxKSAmIDcpKSkgIT0gMCwKLQkJCQkJICAgKGJpdG51bSA+PSAwKSk7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc2NlaXZlciBtb25pdG9yIHRpY2s6IENTUjEyPSUjMDJ4IGJpdCAlZCBpcyAlZCwgZXhwZWN0aW5nICVkXG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsIGNzcjEyLCAoYml0bnVtID4+IDEpICYgNywKKwkJCQkgICAgICAgKGNzcjEyICYgKDEgPDwgKChiaXRudW0gPj4gMSkgJiA3KSkpICE9IDAsCisJCQkJICAgICAgIChiaXRudW0gPj0gMCkpOwogCQkJLyogQ2hlY2sgdGhhdCB0aGUgc3BlY2lmaWVkIGJpdCBoYXMgdGhlIHByb3BlciB2YWx1ZS4gKi8KIAkJCWlmICgoYml0bnVtIDwgMCkgIT0KIAkJCQkoKGNzcjEyICYgKDEgPDwgKChiaXRudW0gPj4gMSkgJiA3KSkpICE9IDApKSB7CiAJCQkJaWYgKHR1bGlwX2RlYnVnID4gMikKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBMaW5rIGJlYXQgZGV0ZWN0ZWQgZm9yICVzLlxuIiwgZGV2LT5uYW1lLAorCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IExpbmsgYmVhdCBkZXRlY3RlZCBmb3IgJXNcbiIsCisJCQkJCSAgICAgICBkZXYtPm5hbWUsCiAJCQkJCSAgICAgICBtZWRpYW5hbWVbbWxlYWYtPm1lZGlhICYgTUVESUFfTUFTS10pOwogCQkJCWlmICgocFsyXSAmIDB4NjEpID09IDB4MDEpCS8qIEJvZ3VzIFpueXggYm9hcmQuICovCiAJCQkJCWdvdG8gYWN0dWFsbHlfbWlpOwpAQCAtMTAwLDkgKzk5LDkgQEAKIAkJCWlmICh0dWxpcF9tZWRpYV9jYXBbZGV2LT5pZl9wb3J0XSAmIE1lZGlhSXNGRCkKIAkJCQlnb3RvIHNlbGVjdF9uZXh0X21lZGlhOyAvKiBTa2lwIEZEIGVudHJpZXMuICovCiAJCQlpZiAodHVsaXBfZGVidWcgPiAxKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gbGluayBiZWF0IG9uIG1lZGlhICVzLCIKLQkJCQkgICAgICAgIiB0cnlpbmcgdHJhbnNjZWl2ZXIgdHlwZSAlcy5cbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW21sZWFmLT5tZWRpYSAmIE1FRElBX01BU0tdLAorCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gbGluayBiZWF0IG9uIG1lZGlhICVzLCB0cnlpbmcgdHJhbnNjZWl2ZXIgdHlwZSAlc1xuIiwKKwkJCQkgICAgICAgZGV2LT5uYW1lLAorCQkJCSAgICAgICBtZWRpYW5hbWVbbWxlYWYtPm1lZGlhICYgTUVESUFfTUFTS10sCiAJCQkJICAgICAgIG1lZGlhbmFtZVt0cC0+bXRhYmxlLT5tbGVhZlt0cC0+Y3VyX2luZGV4XS5tZWRpYV0pOwogCQkJdHVsaXBfc2VsZWN0X21lZGlhKGRldiwgMCk7CiAJCQkvKiBSZXN0YXJ0IHRoZSB0cmFuc21pdCBwcm9jZXNzLiAqLwpAQCAtMTUxLDggKzE1MCw4IEBACiAJaW50IG5leHRfdGljayA9IDYwKkhaOwogCiAJaWYgKHR1bGlwX2RlYnVnID4gMykgewotCQlwcmludGsoS0VSTl9JTkZPIiVzOiBNWElDIG5lZ290aWF0aW9uIHN0YXR1cyAlOC44eC5cbiIsIGRldi0+bmFtZSwKLQkJCSAgIGlvcmVhZDMyKGlvYWRkciArIENTUjEyKSk7CisJCWRldl9pbmZvKCZkZXYtPmRldiwgIk1YSUMgbmVnb3RpYXRpb24gc3RhdHVzICUwOHhcbiIsCisJCQkgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTIpKTsKIAl9CiAJaWYgKG5leHRfdGljaykgewogCQltb2RfdGltZXIoJnRwLT50aW1lciwgUlVOX0FUKG5leHRfdGljaykpOwpAQCAtMTY3LDExICsxNjYsMTAgQEAKIAlpbnQgbmV4dF90aWNrID0gNjAqSFo7CiAKIAlpZiAodHVsaXBfZGVidWcgPiAxKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IENvbWV0IGxpbmsgc3RhdHVzICU0LjR4IHBhcnRuZXIgY2FwYWJpbGl0eSAiCi0JCQkgICAiJTQuNHguXG4iLAotCQkJICAgZGV2LT5uYW1lLAotCQkJICAgdHVsaXBfbWRpb19yZWFkKGRldiwgdHAtPnBoeXNbMF0sIDEpLAotCQkJICAgdHVsaXBfbWRpb19yZWFkKGRldiwgdHAtPnBoeXNbMF0sIDUpKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDb21ldCBsaW5rIHN0YXR1cyAlMDR4IHBhcnRuZXIgY2FwYWJpbGl0eSAlMDR4XG4iLAorCQkgICAgICAgZGV2LT5uYW1lLAorCQkgICAgICAgdHVsaXBfbWRpb19yZWFkKGRldiwgdHAtPnBoeXNbMF0sIDEpLAorCQkgICAgICAgdHVsaXBfbWRpb19yZWFkKGRldiwgdHAtPnBoeXNbMF0sIDUpKTsKIAkvKiBtb2RfdGltZXIgc3luY2hyb25pemVzIHVzIHdpdGggcG90ZW50aWFsIGFkZF90aW1lciBjYWxscwogCSAqIGZyb20gaW50ZXJydXB0cy4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3R1bGlwX2NvcmUuYwppbmRleCAyMDY5NmI1Li43ZjU0NGVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC90dWxpcF9jb3JlLmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvdHVsaXBfY29yZS5jCkBAIC00MSw3ICs0MSw2IEBACiBzdGF0aWMgY2hhciB2ZXJzaW9uW10gX19kZXZpbml0ZGF0YSA9CiAJIkxpbnV4IFR1bGlwIGRyaXZlciB2ZXJzaW9uICIgRFJWX1ZFUlNJT04gIiAoIiBEUlZfUkVMREFURSAiKVxuIjsKIAotCiAvKiBBIGZldyB1c2VyLWNvbmZpZ3VyYWJsZSB2YWx1ZXMuICovCiAKIC8qIE1heGltdW0gZXZlbnRzIChSeCBwYWNrZXRzLCBldGMuKSB0byBoYW5kbGUgYXQgZWFjaCBpbnRlcnJ1cHQuICovCkBAIC0yMTEsNyArMjEwLDcgQEAKIH07CiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHR1bGlwX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh0dWxpcF9wY2lfdGJsKSA9IHsKIAl7IDB4MTAxMSwgMHgwMDA5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBEQzIxMTQwIH0sCiAJeyAweDEwMTEsIDB4MDAxOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgREMyMTE0MyB9LAogCXsgMHgxMUFELCAweDAwMDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIExDODJDMTY4IH0sCkBAIC0zMjYsNyArMzI1LDggQEAKIAl1ZGVsYXkoMTAwKTsKIAogCWlmICh0dWxpcF9kZWJ1ZyA+IDEpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogdHVsaXBfdXAoKSwgaXJxPT0lZC5cbiIsIGRldi0+bmFtZSwgZGV2LT5pcnEpOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHR1bGlwX3VwKCksIGlycT09JWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGRldi0+aXJxKTsKIAogCWlvd3JpdGUzMih0cC0+cnhfcmluZ19kbWEsIGlvYWRkciArIENTUjMpOwogCWlvd3JpdGUzMih0cC0+dHhfcmluZ19kbWEsIGlvYWRkciArIENTUjQpOwpAQCAtMzg3LDggKzM4Nyw5IEBACiAJCQkoZGV2LT5pZl9wb3J0ID09IDEyID8gMCA6IGRldi0+aWZfcG9ydCk7CiAJCWZvciAoaSA9IDA7IGkgPCB0cC0+bXRhYmxlLT5sZWFmY291bnQ7IGkrKykKIAkJCWlmICh0cC0+bXRhYmxlLT5tbGVhZltpXS5tZWRpYSA9PSBsb29raW5nX2ZvcikgewotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVc2luZyB1c2VyLXNwZWNpZmllZCBtZWRpYSAlcy5cbiIsCi0JCQkJCSAgIGRldi0+bmFtZSwgbWVkaWFuYW1lW2Rldi0+aWZfcG9ydF0pOworCQkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkJICJVc2luZyB1c2VyLXNwZWNpZmllZCBtZWRpYSAlc1xuIiwKKwkJCQkJIG1lZGlhbmFtZVtkZXYtPmlmX3BvcnRdKTsKIAkJCQlnb3RvIG1lZGlhX3BpY2tlZDsKIAkJCX0KIAl9CkBAIC0zOTYsOCArMzk3LDkgQEAKIAkJaW50IGxvb2tpbmdfZm9yID0gdHAtPm10YWJsZS0+ZGVmYXVsdG1lZGlhICYgTUVESUFfTUFTSzsKIAkJZm9yIChpID0gMDsgaSA8IHRwLT5tdGFibGUtPmxlYWZjb3VudDsgaSsrKQogCQkJaWYgKHRwLT5tdGFibGUtPm1sZWFmW2ldLm1lZGlhID09IGxvb2tpbmdfZm9yKSB7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFVzaW5nIEVFUFJPTS1zZXQgbWVkaWEgJXMuXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIG1lZGlhbmFtZVtsb29raW5nX2Zvcl0pOworCQkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkJICJVc2luZyBFRVBST00tc2V0IG1lZGlhICVzXG4iLAorCQkJCQkgbWVkaWFuYW1lW2xvb2tpbmdfZm9yXSk7CiAJCQkJZ290byBtZWRpYV9waWNrZWQ7CiAJCQl9CiAJfQpAQCAtNDI0LDkgKzQyNiwxMCBAQAogCQlpZiAodHAtPm1paV9jbnQpIHsKIAkJCXR1bGlwX3NlbGVjdF9tZWRpYShkZXYsIDEpOwogCQkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogVXNpbmcgTUlJIHRyYW5zY2VpdmVyICVkLCBzdGF0dXMgIgotCQkJCQkgICAiJTQuNHguXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIHRwLT5waHlzWzBdLCB0dWxpcF9tZGlvX3JlYWQoZGV2LCB0cC0+cGh5c1swXSwgMSkpOworCQkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkJICJVc2luZyBNSUkgdHJhbnNjZWl2ZXIgJWQsIHN0YXR1cyAlMDR4XG4iLAorCQkJCQkgdHAtPnBoeXNbMF0sCisJCQkJCSB0dWxpcF9tZGlvX3JlYWQoZGV2LCB0cC0+cGh5c1swXSwgMSkpOwogCQkJaW93cml0ZTMyKGNzcjZfbWFza19kZWZzdGF0ZSwgaW9hZGRyICsgQ1NSNik7CiAJCQl0cC0+Y3NyNiA9IGNzcjZfbWFza19oZGNhcDsKIAkJCWRldi0+aWZfcG9ydCA9IDExOwpAQCAtNDkwLDkgKzQ5MywxMCBAQAogCWlvd3JpdGUzMigwLCBpb2FkZHIgKyBDU1IyKTsJCS8qIFJ4IHBvbGwgZGVtYW5kICovCiAKIAlpZiAodHVsaXBfZGVidWcgPiAyKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogRG9uZSB0dWxpcF91cCgpLCBDU1IwICU4Ljh4LCBDU1I1ICU4Ljh4IENTUjYgJTguOHguXG4iLAotCQkJICAgZGV2LT5uYW1lLCBpb3JlYWQzMihpb2FkZHIgKyBDU1IwKSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSksCi0JCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogRG9uZSB0dWxpcF91cCgpLCBDU1IwICUwOHgsIENTUjUgJTA4eCBDU1I2ICUwOHhcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGlvcmVhZDMyKGlvYWRkciArIENTUjApLAorCQkgICAgICAgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSksCisJCSAgICAgICBpb3JlYWQzMihpb2FkZHIgKyBDU1I2KSk7CiAJfQogCiAJLyogU2V0IHRoZSB0aW1lciB0byBzd2l0Y2ggdG8gY2hlY2sgZm9yIGxpbmsgYmVhdCBhbmQgcGVyaGFwcyBzd2l0Y2gKQEAgLTU0MCwyNyArNTQ0LDMwIEBACiAJaWYgKHR1bGlwX21lZGlhX2NhcFtkZXYtPmlmX3BvcnRdICYgTWVkaWFJc01JSSkgewogCQkvKiBEbyBub3RoaW5nIC0tIHRoZSBtZWRpYSBtb25pdG9yIHNob3VsZCBoYW5kbGUgdGhpcy4gKi8KIAkJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBUcmFuc21pdCB0aW1lb3V0IHVzaW5nIE1JSSBkZXZpY2UuXG4iLAotCQkJCSAgIGRldi0+bmFtZSk7CisJCQlkZXZfd2FybigmZGV2LT5kZXYsCisJCQkJICJUcmFuc21pdCB0aW1lb3V0IHVzaW5nIE1JSSBkZXZpY2VcbiIpOwogCX0gZWxzZSBpZiAodHAtPmNoaXBfaWQgPT0gREMyMTE0MCB8fCB0cC0+Y2hpcF9pZCA9PSBEQzIxMTQyIHx8CiAJCSAgIHRwLT5jaGlwX2lkID09IE1YOTg3MTMgfHwgdHAtPmNoaXBfaWQgPT0gQ09NUEVYOTg4MSB8fAogCQkgICB0cC0+Y2hpcF9pZCA9PSBETTkxMFgpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IDIxMTQwIHRyYW5zbWl0IHRpbWVkIG91dCwgc3RhdHVzICU4Ljh4LCAiCi0JCQkgICAiU0lBICU4Ljh4ICU4Ljh4ICU4Ljh4ICU4Ljh4LCByZXNldHRpbmcuLi5cbiIsCi0JCQkgICBkZXYtPm5hbWUsIGlvcmVhZDMyKGlvYWRkciArIENTUjUpLCBpb3JlYWQzMihpb2FkZHIgKyBDU1IxMiksCi0JCQkgICBpb3JlYWQzMihpb2FkZHIgKyBDU1IxMyksIGlvcmVhZDMyKGlvYWRkciArIENTUjE0KSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTUpKTsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJICIyMTE0MCB0cmFuc21pdCB0aW1lZCBvdXQsIHN0YXR1cyAlMDh4LCBTSUEgJTA4eCAlMDh4ICUwOHggJTA4eCwgcmVzZXR0aW5nLi4uXG4iLAorCQkJIGlvcmVhZDMyKGlvYWRkciArIENTUjUpLCBpb3JlYWQzMihpb2FkZHIgKyBDU1IxMiksCisJCQkgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTMpLCBpb3JlYWQzMihpb2FkZHIgKyBDU1IxNCksCisJCQkgaW9yZWFkMzIoaW9hZGRyICsgQ1NSMTUpKTsKIAkJdHAtPnRpbWVvdXRfcmVjb3ZlcnkgPSAxOwogCQlzY2hlZHVsZV93b3JrKCZ0cC0+bWVkaWFfd29yayk7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9IGVsc2UgaWYgKHRwLT5jaGlwX2lkID09IFBOSUMyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBQTklDMiB0cmFuc21pdCB0aW1lZCBvdXQsIHN0YXR1cyAlOC44eCwgIgotCQkgICAgICAgIkNTUjYvNyAlOC44eCAvICU4Ljh4IENTUjEyICU4Ljh4LCByZXNldHRpbmcuLi5cbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsIChpbnQpaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSksIChpbnQpaW9yZWFkMzIoaW9hZGRyICsgQ1NSNiksCi0JCSAgICAgICAoaW50KWlvcmVhZDMyKGlvYWRkciArIENTUjcpLCAoaW50KWlvcmVhZDMyKGlvYWRkciArIENTUjEyKSk7CisJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCSAiUE5JQzIgdHJhbnNtaXQgdGltZWQgb3V0LCBzdGF0dXMgJTA4eCwgQ1NSNi83ICUwOHggLyAlMDh4IENTUjEyICUwOHgsIHJlc2V0dGluZy4uLlxuIiwKKwkJCSAoaW50KWlvcmVhZDMyKGlvYWRkciArIENTUjUpLAorCQkJIChpbnQpaW9yZWFkMzIoaW9hZGRyICsgQ1NSNiksCisJCQkgKGludClpb3JlYWQzMihpb2FkZHIgKyBDU1I3KSwKKwkJCSAoaW50KWlvcmVhZDMyKGlvYWRkciArIENTUjEyKSk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRyYW5zbWl0IHRpbWVkIG91dCwgc3RhdHVzICU4Ljh4LCBDU1IxMiAiCi0JCQkgICAiJTguOHgsIHJlc2V0dGluZy4uLlxuIiwKLQkJCSAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgQ1NSNSksIGlvcmVhZDMyKGlvYWRkciArIENTUjEyKSk7CisJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCSAiVHJhbnNtaXQgdGltZWQgb3V0LCBzdGF0dXMgJTA4eCwgQ1NSMTIgJTA4eCwgcmVzZXR0aW5nLi4uXG4iLAorCQkJIGlvcmVhZDMyKGlvYWRkciArIENTUjUpLCBpb3JlYWQzMihpb2FkZHIgKyBDU1IxMikpOwogCQlkZXYtPmlmX3BvcnQgPSAwOwogCX0KIApAQCAtNTcwLDI2ICs1NzcsMjYgQEAKIAkJZm9yIChpID0gMDsgaSA8IFJYX1JJTkdfU0laRTsgaSsrKSB7CiAJCQl1OCAqYnVmID0gKHU4ICopKHRwLT5yeF9yaW5nW2ldLmJ1ZmZlcjEpOwogCQkJaW50IGo7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJTJkOiAlOC44eCAlOC44eCAlOC44eCAlOC44eCAgIgotCQkJCSAgICIlMi4yeCAlMi4yeCAlMi4yeC5cbiIsCi0JCQkJICAgaSwgKHVuc2lnbmVkIGludCl0cC0+cnhfcmluZ1tpXS5zdGF0dXMsCi0JCQkJICAgKHVuc2lnbmVkIGludCl0cC0+cnhfcmluZ1tpXS5sZW5ndGgsCi0JCQkJICAgKHVuc2lnbmVkIGludCl0cC0+cnhfcmluZ1tpXS5idWZmZXIxLAotCQkJCSAgICh1bnNpZ25lZCBpbnQpdHAtPnJ4X3JpbmdbaV0uYnVmZmVyMiwKLQkJCQkgICBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgIiUyZDogJTA4eCAlMDh4ICUwOHggJTA4eCAgJTAyeCAlMDJ4ICUwMnhcbiIsCisJCQkgICAgICAgaSwKKwkJCSAgICAgICAodW5zaWduZWQgaW50KXRwLT5yeF9yaW5nW2ldLnN0YXR1cywKKwkJCSAgICAgICAodW5zaWduZWQgaW50KXRwLT5yeF9yaW5nW2ldLmxlbmd0aCwKKwkJCSAgICAgICAodW5zaWduZWQgaW50KXRwLT5yeF9yaW5nW2ldLmJ1ZmZlcjEsCisJCQkgICAgICAgKHVuc2lnbmVkIGludCl0cC0+cnhfcmluZ1tpXS5idWZmZXIyLAorCQkJICAgICAgIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0pOwogCQkJZm9yIChqID0gMDsgYnVmW2pdICE9IDB4ZWUgJiYgaiA8IDE2MDA7IGorKykKIAkJCQlpZiAoaiA8IDEwMCkKLQkJCQkJcHJpbnRrKEtFUk5fQ09OVCAiICUyLjJ4IiwgYnVmW2pdKTsKLQkJCXByaW50ayhLRVJOX0NPTlQgIiBqPSVkLlxuIiwgaik7CisJCQkJCXByX2NvbnQoIiAlMDJ4IiwgYnVmW2pdKTsKKwkJCXByX2NvbnQoIiBqPSVkXG4iLCBqKTsKIAkJfQotCQlwcmludGsoS0VSTl9ERUJVRyAiICBSeCByaW5nICU4Ljh4OiAiLCAoaW50KXRwLT5yeF9yaW5nKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgUnggcmluZyAlMDh4OiAiLCAoaW50KXRwLT5yeF9yaW5nKTsKIAkJZm9yIChpID0gMDsgaSA8IFJYX1JJTkdfU0laRTsgaSsrKQotCQkJcHJpbnRrKEtFUk5fQ09OVCAiICU4Ljh4IiwKLQkJCSAgICAgICAodW5zaWduZWQgaW50KXRwLT5yeF9yaW5nW2ldLnN0YXR1cyk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIgIFR4IHJpbmcgJTguOHg6ICIsIChpbnQpdHAtPnR4X3JpbmcpOworCQkJcHJfY29udCgiICUwOHgiLCAodW5zaWduZWQgaW50KXRwLT5yeF9yaW5nW2ldLnN0YXR1cyk7CisJCXByaW50ayhLRVJOX0RFQlVHICIgIFR4IHJpbmcgJTA4eDogIiwgKGludCl0cC0+dHhfcmluZyk7CiAJCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkU7IGkrKykKLQkJCXByaW50ayhLRVJOX0NPTlQgIiAlOC44eCIsICh1bnNpZ25lZCBpbnQpdHAtPnR4X3JpbmdbaV0uc3RhdHVzKTsKLQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwkJCXByX2NvbnQoIiAlMDh4IiwgKHVuc2lnbmVkIGludCl0cC0+dHhfcmluZ1tpXS5zdGF0dXMpOworCQlwcl9jb250KCJcbiIpOwogCX0KICNlbmRpZgogCkBAIC04MzIsOCArODM5LDkgQEAKIAl0dWxpcF9kb3duIChkZXYpOwogCiAJaWYgKHR1bGlwX2RlYnVnID4gMSkKLQkJcHJpbnRrIChLRVJOX0RFQlVHICIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQsIHN0YXR1cyB3YXMgJTIuMnguXG4iLAotCQkJZGV2LT5uYW1lLCBpb3JlYWQzMiAoaW9hZGRyICsgQ1NSNSkpOworCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZkZXYtPmRldiwKKwkJCSAgICJTaHV0dGluZyBkb3duIGV0aGVyY2FyZCwgc3RhdHVzIHdhcyAlMDJ4XG4iLAorCQkJICAgaW9yZWFkMzIgKGlvYWRkciArIENTUjUpKTsKIAogCWZyZWVfaXJxIChkZXYtPmlycSwgZGV2KTsKIApAQCAtOTg5LDEyICs5OTcsMTAgQEAKIAltZW1zZXQoaGFzaF90YWJsZSwgMCwgc2l6ZW9mKGhhc2hfdGFibGUpKTsKIAlzZXRfYml0X2xlKDI1NSwgaGFzaF90YWJsZSk7IAkJCS8qIEJyb2FkY2FzdCBlbnRyeSAqLwogCS8qIFRoaXMgc2hvdWxkIHdvcmsgb24gYmlnLWVuZGlhbiBtYWNoaW5lcyBhcyB3ZWxsLiAqLwotCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCSAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQlpbnQgaW5kZXggPSBldGhlcl9jcmNfbGUoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpICYgMHgxZmY7CiAKIAkJc2V0X2JpdF9sZShpbmRleCwgaGFzaF90YWJsZSk7Ci0KIAl9CiAJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKIAkJKnNldHVwX2ZybSsrID0gaGFzaF90YWJsZVtpXTsKQEAgLTEwMTMsMjAgKzEwMTksMTggQEAKIHsKIAlzdHJ1Y3QgdHVsaXBfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwotCWludCBpOwogCXUxNiAqZWFkZHJzOwogCiAJLyogV2UgaGF2ZSA8PSAxNCBhZGRyZXNzZXMgc28gd2UgY2FuIHVzZSB0aGUgd29uZGVyZnVsCiAJICAgMTYgYWRkcmVzcyBwZXJmZWN0IGZpbHRlcmluZyBvZiB0aGUgVHVsaXAuICovCi0JZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBpIDwgZGV2LT5tY19jb3VudDsKLQkgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJZWFkZHJzID0gKHUxNiAqKW1jbGlzdC0+ZG1pX2FkZHI7CiAJCSpzZXR1cF9mcm0rKyA9ICplYWRkcnM7ICpzZXR1cF9mcm0rKyA9ICplYWRkcnMrKzsKIAkJKnNldHVwX2ZybSsrID0gKmVhZGRyczsgKnNldHVwX2ZybSsrID0gKmVhZGRycysrOwogCQkqc2V0dXBfZnJtKysgPSAqZWFkZHJzOyAqc2V0dXBfZnJtKysgPSAqZWFkZHJzKys7CiAJfQogCS8qIEZpbGwgdGhlIHVudXNlZCBlbnRyaWVzIHdpdGggdGhlIGJyb2FkY2FzdCBhZGRyZXNzLiAqLwotCW1lbXNldChzZXR1cF9mcm0sIDB4ZmYsICgxNS1pKSoxMik7CisJbWVtc2V0KHNldHVwX2ZybSwgMHhmZiwgKDE1IC0gbmV0ZGV2X21jX2NvdW50KGRldikpICogMTIpOwogCXNldHVwX2ZybSA9ICZ0cC0+c2V0dXBfZnJhbWVbMTUqNl07CiAKIAkvKiBGaWxsIHRoZSBmaW5hbCBlbnRyeSB3aXRoIG91ciBwaHlzaWNhbCBhZGRyZXNzLiAqLwpAQCAtMTA0OSw3ICsxMDUzLDggQEAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CQkJLyogU2V0IHByb21pc2N1b3VzLiAqLwogCQl0cC0+Y3NyNiB8PSBBY2NlcHRBbGxNdWx0aWNhc3QgfCBBY2NlcHRBbGxQaHlzOwogCQljc3I2IHw9IEFjY2VwdEFsbE11bHRpY2FzdCB8IEFjY2VwdEFsbFBoeXM7Ci0JfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IDEwMDApICB8fCAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisJfSBlbHNlIGlmICgobmV0ZGV2X21jX2NvdW50KGRldikgPiAxMDAwKSB8fAorCQkgICAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJLyogVG9vIG1hbnkgdG8gZmlsdGVyIHdlbGwgLS0gYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCQl0cC0+Y3NyNiB8PSBBY2NlcHRBbGxNdWx0aWNhc3Q7CiAJCWNzcjYgfD0gQWNjZXB0QWxsTXVsdGljYXN0OwpAQCAtMTA1NywxNSArMTA2MiwxNCBAQAogCQkvKiBTb21lIHdvcmstYWxpa2VzIGhhdmUgb25seSBhIDY0LWVudHJ5IGhhc2ggZmlsdGVyIHRhYmxlLiAqLwogCQkvKiBTaG91bGQgdmVyaWZ5IGNvcnJlY3RuZXNzIG9uIGJpZy1lbmRpYW4vX19wb3dlcnBjX18gKi8KIAkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7Ci0JCWludCBpOwotCQlpZiAoZGV2LT5tY19jb3VudCA+IDY0KSB7CQkvKiBBcmJpdHJhcnkgbm9uLWVmZmVjdGl2ZSBsaW1pdC4gKi8KKwkJaWYgKG5ldGRldl9tY19jb3VudChkZXYpID4gNjQpIHsKKwkJCS8qIEFyYml0cmFyeSBub24tZWZmZWN0aXZlIGxpbWl0LiAqLwogCQkJdHAtPmNzcjYgfD0gQWNjZXB0QWxsTXVsdGljYXN0OwogCQkJY3NyNiB8PSBBY2NlcHRBbGxNdWx0aWNhc3Q7CiAJCX0gZWxzZSB7CiAJCQl1MzIgbWNfZmlsdGVyWzJdID0gezAsIDB9OwkJIC8qIE11bHRpY2FzdCBoYXNoIGZpbHRlciAqLwogCQkJaW50IGZpbHRlcmJpdDsKLQkJCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkJCSBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCQlpZiAodHAtPmZsYWdzICYgQ09NRVRfTUFDX0FERFIpCiAJCQkJCWZpbHRlcmJpdCA9IGV0aGVyX2NyY19sZShFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcik7CiAJCQkJZWxzZQpAQCAtMTA3MywxMCArMTA3NywxMCBAQAogCQkJCWZpbHRlcmJpdCAmPSAweDNmOwogCQkJCW1jX2ZpbHRlcltmaWx0ZXJiaXQgPj4gNV0gfD0gMSA8PCAoZmlsdGVyYml0ICYgMzEpOwogCQkJCWlmICh0dWxpcF9kZWJ1ZyA+IDIpCi0JCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBBZGRlZCBmaWx0ZXIgZm9yICVwTSIKLQkJCQkJICAgICAgICIgICU4Ljh4IGJpdCAlZC5cbiIsCi0JCQkJCSAgICAgICBkZXYtPm5hbWUsIG1jbGlzdC0+ZG1pX2FkZHIsCi0JCQkJCSAgICAgICBldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpLCBmaWx0ZXJiaXQpOworCQkJCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkJCQkgIkFkZGVkIGZpbHRlciBmb3IgJXBNICAlMDh4IGJpdCAlZFxuIiwKKwkJCQkJCSBtY2xpc3QtPmRtaV9hZGRyLAorCQkJCQkJIGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkciksIGZpbHRlcmJpdCk7CiAJCQl9CiAJCQlpZiAobWNfZmlsdGVyWzBdID09IHRwLT5tY19maWx0ZXJbMF0gICYmCiAJCQkJbWNfZmlsdGVyWzFdID09IHRwLT5tY19maWx0ZXJbMV0pCkBAIC0xMDk5LDcgKzExMDMsOCBAQAogCiAJCS8qIE5vdGUgdGhhdCBvbmx5IHRoZSBsb3ctYWRkcmVzcyBzaG9ydHdvcmQgb2Ygc2V0dXBfZnJhbWUgaXMgdmFsaWQhCiAJCSAgIFRoZSB2YWx1ZXMgYXJlIGRvdWJsZWQgZm9yIGJpZy1lbmRpYW4gYXJjaGl0ZWN0dXJlcy4gKi8KLQkJaWYgKGRldi0+bWNfY291bnQgPiAxNCkgeyAvKiBNdXN0IHVzZSBhIG11bHRpY2FzdCBoYXNoIHRhYmxlLiAqLworCQlpZiAobmV0ZGV2X21jX2NvdW50KGRldikgPiAxNCkgeworCQkJLyogTXVzdCB1c2UgYSBtdWx0aWNhc3QgaGFzaCB0YWJsZS4gKi8KIAkJCWJ1aWxkX3NldHVwX2ZyYW1lX2hhc2godHAtPnNldHVwX2ZyYW1lLCBkZXYpOwogCQkJdHhfZmxhZ3MgPSAweDA4NDAwMDAwIHwgMTkyOwogCQl9IGVsc2UgewpAQCAtMTI4OCw5ICsxMjkzLDggQEAKIAl1bnNpZ25lZCBpbnQgZm9yY2VfY3NyMCA9IDA7CiAKICNpZm5kZWYgTU9EVUxFCi0Jc3RhdGljIGludCBkaWRfdmVyc2lvbjsJCS8qIEFscmVhZHkgcHJpbnRlZCB2ZXJzaW9uIGluZm8uICovCi0JaWYgKHR1bGlwX2RlYnVnID4gMCAgJiYgIGRpZF92ZXJzaW9uKysgPT0gMCkKLQkJcHJpbnRrIChLRVJOX0lORk8gIiVzIiwgdmVyc2lvbik7CisJaWYgKHR1bGlwX2RlYnVnID4gMCkKKwkJcHJpbnRrX29uY2UoS0VSTl9JTkZPICIlcyIsIHZlcnNpb24pOwogI2VuZGlmCiAKIAlib2FyZF9pZHgrKzsKQEAgLTEzMDEsNyArMTMwNSw3IEBACiAJICovCiAKICAgICAgICAgaWYgKHBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9MTUMpIHsKLQkJcHJpbnRrIChLRVJOX0VSUiBQRlggInNraXBwaW5nIExNQyBjYXJkLlxuIik7CisJCXByX2VycihQRlggInNraXBwaW5nIExNQyBjYXJkXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC0xMzE3LDE1ICsxMzIxLDEzIEBACiAKIAkJaWYgKHBkZXYtPnZlbmRvciA9PSAweDEyODIgJiYgcGRldi0+ZGV2aWNlID09IDB4OTEwMCAmJgogCQkgICAgcGRldi0+cmV2aXNpb24gPCAweDMwKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPIFBGWAotCQkJICAgICAgICJza2lwcGluZyBlYXJseSBETTkxMDAgd2l0aCBDcmMgYnVnICh1c2UgZG1mZSlcbiIpOworCQkJcHJfaW5mbyhQRlggInNraXBwaW5nIGVhcmx5IERNOTEwMCB3aXRoIENyYyBidWcgKHVzZSBkbWZlKVxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCiAJCWRwID0gcGNpX2RldmljZV90b19PRl9ub2RlKHBkZXYpOwogCQlpZiAoIShkcCAmJiBvZl9nZXRfcHJvcGVydHkoZHAsICJsb2NhbC1tYWMtYWRkcmVzcyIsIE5VTEwpKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyBQRlgKLQkJCSAgICAgICAic2tpcHBpbmcgRE05MTB4IGV4cGFuc2lvbiBjYXJkICh1c2UgZG1mZSlcbiIpOworCQkJcHJfaW5mbyhQRlggInNraXBwaW5nIERNOTEweCBleHBhbnNpb24gY2FyZCAodXNlIGRtZmUpXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQpAQCAtMTM3Miw5ICsxMzc0LDggQEAKIAogCWkgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAoaSkgewotCQlwcmludGsgKEtFUk5fRVJSIFBGWAotCQkJIkNhbm5vdCBlbmFibGUgdHVsaXAgYm9hcmQgIyVkLCBhYm9ydGluZ1xuIiwKLQkJCWJvYXJkX2lkeCk7CisJCXByX2VycihQRlggIkNhbm5vdCBlbmFibGUgdHVsaXAgYm9hcmQgIyVkLCBhYm9ydGluZ1xuIiwKKwkJICAgICAgIGJvYXJkX2lkeCk7CiAJCXJldHVybiBpOwogCX0KIApAQCAtMTM4MywyMiArMTM4NCwyMiBAQAogCS8qIGFsbG9jX2V0aGVyZGV2IGVuc3VyZXMgYWxpZ25lZCBhbmQgemVyb2VkIHByaXZhdGUgc3RydWN0dXJlcyAqLwogCWRldiA9IGFsbG9jX2V0aGVyZGV2IChzaXplb2YgKCp0cCkpOwogCWlmICghZGV2KSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgUEZYICJldGhlciBkZXZpY2UgYWxsb2MgZmFpbGVkLCBhYm9ydGluZ1xuIik7CisJCXByX2VycihQRlggImV0aGVyIGRldmljZSBhbGxvYyBmYWlsZWQsIGFib3J0aW5nXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJU0VUX05FVERFVl9ERVYoZGV2LCAmcGRldi0+ZGV2KTsKIAlpZiAocGNpX3Jlc291cmNlX2xlbiAocGRldiwgMCkgPCB0dWxpcF90YmxbY2hpcF9pZHhdLmlvX3NpemUpIHsKLQkJcHJpbnRrIChLRVJOX0VSUiBQRlggIiVzOiBJL08gcmVnaW9uICgweCVsbHhAMHglbGx4KSB0b28gc21hbGwsICIKLQkJCSJhYm9ydGluZ1xuIiwgcGNpX25hbWUocGRldiksCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9sZW4gKHBkZXYsIDApLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQgKHBkZXYsIDApKTsKKwkJcHJfZXJyKFBGWCAiJXM6IEkvTyByZWdpb24gKDB4JWxseEAweCVsbHgpIHRvbyBzbWFsbCwgYWJvcnRpbmdcbiIsCisJCSAgICAgICBwY2lfbmFtZShwZGV2KSwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcGNpX3Jlc291cmNlX2xlbiAocGRldiwgMCksCisJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydCAocGRldiwgMCkpOwogCQlnb3RvIGVycl9vdXRfZnJlZV9uZXRkZXY7CiAJfQogCiAJLyogZ3JhYiBhbGwgcmVzb3VyY2VzIGZyb20gYm90aCBQSU8gYW5kIE1NSU8gcmVnaW9ucywgYXMgd2UKIAkgKiBkb24ndCB3YW50IGFueW9uZSBlbHNlIG1lc3NpbmcgYXJvdW5kIHdpdGggb3VyIGhhcmR3YXJlICovCi0JaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbnMgKHBkZXYsICJ0dWxpcCIpKQorCWlmIChwY2lfcmVxdWVzdF9yZWdpb25zIChwZGV2LCBEUlZfTkFNRSkpCiAJCWdvdG8gZXJyX291dF9mcmVlX25ldGRldjsKIAogCWlvYWRkciA9ICBwY2lfaW9tYXAocGRldiwgVFVMSVBfQkFSLCB0dWxpcF90YmxbY2hpcF9pZHhdLmlvX3NpemUpOwpAQCAtMTYxMSw4ICsxNjEyLDggQEAKIAlpZiAoZGV2LT5tZW1fc3RhcnQgJiBNRURJQV9NQVNLKQogCQl0cC0+ZGVmYXVsdF9wb3J0ID0gZGV2LT5tZW1fc3RhcnQgJiBNRURJQV9NQVNLOwogCWlmICh0cC0+ZGVmYXVsdF9wb3J0KSB7Ci0JCXByaW50ayhLRVJOX0lORk8gInR1bGlwJWQ6IFRyYW5zY2VpdmVyIHNlbGVjdGlvbiBmb3JjZWQgdG8gJXMuXG4iLAotCQkgICAgICAgYm9hcmRfaWR4LCBtZWRpYW5hbWVbdHAtPmRlZmF1bHRfcG9ydCAmIE1FRElBX01BU0tdKTsKKwkJcHJfaW5mbyhEUlZfTkFNRSAiJWQ6IFRyYW5zY2VpdmVyIHNlbGVjdGlvbiBmb3JjZWQgdG8gJXNcbiIsCisJCQlib2FyZF9pZHgsIG1lZGlhbmFtZVt0cC0+ZGVmYXVsdF9wb3J0ICYgTUVESUFfTUFTS10pOwogCQl0cC0+bWVkaWFsb2NrID0gMTsKIAkJaWYgKHR1bGlwX21lZGlhX2NhcFt0cC0+ZGVmYXVsdF9wb3J0XSAmIE1lZGlhQWx3YXlzRkQpCiAJCQl0cC0+ZnVsbF9kdXBsZXggPSAxOwpAQCAtMTYyNyw3ICsxNjI4LDcgQEAKIAl9CiAKIAlpZiAodHAtPmZsYWdzICYgSEFTX01FRElBX1RBQkxFKSB7Ci0JCXNwcmludGYoZGV2LT5uYW1lLCAidHVsaXAlZCIsIGJvYXJkX2lkeCk7CS8qIGhhY2sgKi8KKwkJc3ByaW50ZihkZXYtPm5hbWUsIERSVl9OQU1FICIlZCIsIGJvYXJkX2lkeCk7CS8qIGhhY2sgKi8KIAkJdHVsaXBfcGFyc2VfZWVwcm9tKGRldik7CiAJCXN0cmNweShkZXYtPm5hbWUsICJldGglZCIpOwkJCS8qIHVuLWhhY2sgKi8KIAl9CkBAIC0xNjYzLDIwICsxNjY0LDE4IEBACiAJaWYgKHJlZ2lzdGVyX25ldGRldihkZXYpKQogCQlnb3RvIGVycl9vdXRfZnJlZV9yaW5nOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIHJldiAlZCBhdCAiCi0jaWZkZWYgQ09ORklHX1RVTElQX01NSU8KLQkJIk1NSU8iCi0jZWxzZQotCQkiUG9ydCIKLSNlbmRpZgotCQkiICUjbGx4LCIsIGRldi0+bmFtZSwgY2hpcF9uYW1lLCBwZGV2LT5yZXZpc2lvbiwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIFRVTElQX0JBUikpOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCi0JaWYgKGVlcHJvbV9taXNzaW5nKQotCQlwcmludGsoIiBFRVBST00gbm90IHByZXNlbnQsIik7Ci0JcHJpbnRrKCIgJXBNIiwgZGV2LT5kZXZfYWRkcik7Ci0JcHJpbnRrKCIsIElSUSAlZC5cbiIsIGlycSk7CisJZGV2X2luZm8oJmRldi0+ZGV2LAorI2lmZGVmIENPTkZJR19UVUxJUF9NTUlPCisJCSAiJXMgcmV2ICVkIGF0IE1NSU8gJSNsbHgsJXMgJXBNLCBJUlEgJWRcbiIsCisjZWxzZQorCQkgIiVzIHJldiAlZCBhdCBQb3J0ICUjbGx4LCVzICVwTSwgSVJRICVkXG4iLAorI2VuZGlmCisJCSBjaGlwX25hbWUsIHBkZXYtPnJldmlzaW9uLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgVFVMSVBfQkFSKSwKKwkJIGVlcHJvbV9taXNzaW5nID8gIiBFRVBST00gbm90IHByZXNlbnQsIiA6ICIiLAorCQkgZGV2LT5kZXZfYWRkciwgaXJxKTsKIAogICAgICAgICBpZiAodHAtPmNoaXBfaWQgPT0gUE5JQzIpCiAJCXRwLT5saW5rX2NoYW5nZSA9IHBuaWMyX2xua19jaGFuZ2U7CkBAIC0xNzk5LDEyICsxNzk4LDEyIEBACiAJCXJldHVybiAwOwogCiAJaWYgKChyZXR2YWwgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KSkpIHsKLQkJcHJpbnRrIChLRVJOX0VSUiAidHVsaXA6IHBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCBpbiByZXN1bWVcbiIpOworCQlwcl9lcnIoUEZYICJwY2lfZW5hYmxlX2RldmljZSBmYWlsZWQgaW4gcmVzdW1lXG4iKTsKIAkJcmV0dXJuIHJldHZhbDsKIAl9CiAKIAlpZiAoKHJldHZhbCA9IHJlcXVlc3RfaXJxKGRldi0+aXJxLCB0dWxpcF9pbnRlcnJ1cHQsIElSUUZfU0hBUkVELCBkZXYtPm5hbWUsIGRldikpKSB7Ci0JCXByaW50ayAoS0VSTl9FUlIgInR1bGlwOiByZXF1ZXN0X2lycSBmYWlsZWQgaW4gcmVzdW1lXG4iKTsKKwkJcHJfZXJyKFBGWCAicmVxdWVzdF9pcnEgZmFpbGVkIGluIHJlc3VtZVxuIik7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCkBAIC0xODc0LDcgKzE4NzMsNyBAQAogc3RhdGljIGludCBfX2luaXQgdHVsaXBfaW5pdCAodm9pZCkKIHsKICNpZmRlZiBNT0RVTEUKLQlwcmludGsgKEtFUk5fSU5GTyAiJXMiLCB2ZXJzaW9uKTsKKwlwcl9pbmZvKCIlcyIsIHZlcnNpb24pOwogI2VuZGlmCiAKIAkvKiBjb3B5IG1vZHVsZSBwYXJtcyBpbnRvIGdsb2JhbHMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYyBiL2RyaXZlcnMvbmV0L3R1bGlwL3VsaTUyNnguYwppbmRleCBmYTAxOWNhLi4wYWIwNWFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC91bGk1MjZ4LmMKKysrIGIvZHJpdmVycy9uZXQvdHVsaXAvdWxpNTI2eC5jCkBAIC0xMiw2ICsxMiw4IEBACiAKICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2RlZmluZSBEUlZfTkFNRQkidWxpNTI2eCIKICNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuOS4zIgogI2RlZmluZSBEUlZfUkVMREFURQkiMjAwNS03LTI5IgpAQCAtODIsOSArODQsMTYgQEAKICNkZWZpbmUgVUxJNTI2WF9UWF9USU1FT1VUICgoMTYqSFopLzIpCS8qIHR4IHBhY2tldCB0aW1lLW91dCB0aW1lIDggcyIgKi8KICNkZWZpbmUgVUxJNTI2WF9UWF9LSUNLIAkoNCpIWi8yKQkvKiB0eCBwYWNrZXQgS2ljay1vdXQgdGltZSAyIHMiICovCiAKLSNkZWZpbmUgVUxJNTI2WF9EQlVHKGRidWdfbm93LCBtc2csIHZhbHVlKSBpZiAodWxpNTI2eF9kZWJ1ZyB8fCAoZGJ1Z19ub3cpKSBwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogJXMgJWx4XG4iLCAobXNnKSwgKGxvbmcpICh2YWx1ZSkpCisjZGVmaW5lIFVMSTUyNlhfREJVRyhkYnVnX25vdywgbXNnLCB2YWx1ZSkJCQlcCitkbyB7CQkJCQkJCQlcCisJaWYgKHVsaTUyNnhfZGVidWcgfHwgKGRidWdfbm93KSkJCQlcCisJCXByX2VycigiJXMgJWx4XG4iLCAobXNnKSwgKGxvbmcpICh2YWx1ZSkpOwlcCit9IHdoaWxlICgwKQogCi0jZGVmaW5lIFNIT1dfTUVESUFfVFlQRShtb2RlKSBwcmludGsoS0VSTl9FUlIgRFJWX05BTUUgIjogQ2hhbmdlIFNwZWVkIHRvICVzTWh6ICVzIGR1cGxleFxuIixtb2RlICYgMSA/IjEwMCI6IjEwIiwgbW9kZSAmIDQgPyAiZnVsbCI6ImhhbGYiKTsKKyNkZWZpbmUgU0hPV19NRURJQV9UWVBFKG1vZGUpCQkJCQlcCisJcHJfZXJyKCJDaGFuZ2UgU3BlZWQgdG8gJXNNaHogJXMgZHVwbGV4XG4iLAkJXAorCSAgICAgICBtb2RlICYgMSA/ICIxMDAiIDogIjEwIiwJCQkJXAorCSAgICAgICBtb2RlICYgNCA/ICJmdWxsIiA6ICJoYWxmIik7CiAKIAogLyogQ1I5IGRlZmluaXRpb246IFNST00vTUlJICovCkBAIC0yODQsNyArMjkzLDcgQEAKIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwogCiAJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZfTkFNRSAiOiAzMi1iaXQgUENJIERNQSBub3QgYXZhaWxhYmxlLlxuIik7CisJCXByX3dhcm5pbmcoIjMyLWJpdCBQQ0kgRE1BIG5vdCBhdmFpbGFibGVcbiIpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGVycl9vdXRfZnJlZTsKIAl9CkBAIC0yOTUsMTkgKzMwNCwxOSBAQAogCQlnb3RvIGVycl9vdXRfZnJlZTsKIAogCWlmICghcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBJL08gYmFzZSBpcyB6ZXJvXG4iKTsKKwkJcHJfZXJyKCJJL08gYmFzZSBpcyB6ZXJvXG4iKTsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBlcnJfb3V0X2Rpc2FibGU7CiAJfQogCiAJaWYgKHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkgPCAoVUxJNTI2WF9JT19TSVpFKSApIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IEFsbG9jYXRlZCBJL08gc2l6ZSB0b28gc21hbGxcbiIpOworCQlwcl9lcnIoIkFsbG9jYXRlZCBJL08gc2l6ZSB0b28gc21hbGxcbiIpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGVycl9vdXRfZGlzYWJsZTsKIAl9CiAKIAlpZiAocGNpX3JlcXVlc3RfcmVnaW9ucyhwZGV2LCBEUlZfTkFNRSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IEZhaWxlZCB0byByZXF1ZXN0IFBDSSByZWdpb25zXG4iKTsKKwkJcHJfZXJyKCJGYWlsZWQgdG8gcmVxdWVzdCBQQ0kgcmVnaW9uc1xuIik7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyX291dF9kaXNhYmxlOwogCX0KQEAgLTM4Miw5ICszOTEsOSBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyX291dF9yZXM7CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogVUxpIE0lMDRseCBhdCBwY2klcywgJXBNLCBpcnEgJWQuXG4iLAotCSAgICAgICBkZXYtPm5hbWUsZW50LT5kcml2ZXJfZGF0YSA+PiAxNixwY2lfbmFtZShwZGV2KSwKLQkgICAgICAgZGV2LT5kZXZfYWRkciwgZGV2LT5pcnEpOworCWRldl9pbmZvKCZkZXYtPmRldiwgIlVMaSBNJTA0bHggYXQgcGNpJXMsICVwTSwgaXJxICVkXG4iLAorCQkgZW50LT5kcml2ZXJfZGF0YSA+PiAxNiwgcGNpX25hbWUocGRldiksCisJCSBkZXYtPmRldl9hZGRyLCBkZXYtPmlycSk7CiAKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIApAQCAtNTE2LDcgKzUyNSw3IEBACiAJCX0KIAl9CiAJaWYocGh5X3RtcCA9PSAzMikKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2FuIG5vdCBmaW5kIHRoZSBwaHkgYWRkcmVzcyEhISIpOworCQlwcl93YXJuaW5nKCJDYW4gbm90IGZpbmQgdGhlIHBoeSBhZGRyZXNzISEhIik7CiAJLyogUGFyc2VyIFNST00gYW5kIG1lZGlhIG1vZGUgKi8KIAlkYi0+bWVkaWFfbW9kZSA9IHVsaTUyNnhfbWVkaWFfbW9kZTsKIApAQCAtNTQ4LDcgKzU1Nyw3IEBACiAJdXBkYXRlX2NyNihkYi0+Y3I2X2RhdGEsIGlvYWRkcik7CiAKIAkvKiBTZW5kIHNldHVwIGZyYW1lICovCi0Jc2VuZF9maWx0ZXJfZnJhbWUoZGV2LCBkZXYtPm1jX2NvdW50KTsJLyogTTUyNjEvTTUyNjMgKi8KKwlzZW5kX2ZpbHRlcl9mcmFtZShkZXYsIG5ldGRldl9tY19jb3VudChkZXYpKTsJLyogTTUyNjEvTTUyNjMgKi8KIAogCS8qIEluaXQgQ1I3LCBpbnRlcnJ1cHQgYWN0aXZlIGJpdCAqLwogCWRiLT5jcjdfZGF0YSA9IENSN19ERUZBVUxUOwpAQCAtNTgyLDcgKzU5MSw3IEBACiAKIAkvKiBUb28gbGFyZ2UgcGFja2V0IGNoZWNrICovCiAJaWYgKHNrYi0+bGVuID4gTUFYX1BBQ0tFVF9TSVpFKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRSAiOiBiaWcgcGFja2V0ID0gJWRcbiIsICh1MTYpc2tiLT5sZW4pOworCQlwcl9lcnIoImJpZyBwYWNrZXQgPSAlZFxuIiwgKHUxNilza2ItPmxlbik7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAl9CkBAIC01OTIsNyArNjAxLDcgQEAKIAkvKiBObyBUeCByZXNvdXJjZSBjaGVjaywgaXQgbmV2ZXIgaGFwcGVuIG5yb21hbGx5ICovCiAJaWYgKGRiLT50eF9wYWNrZXRfY250ID49IFRYX0ZSRUVfREVTQ19DTlQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGItPmxvY2ssIGZsYWdzKTsKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IE5vIFR4IHJlc291cmNlICVsZFxuIiwgZGItPnR4X3BhY2tldF9jbnQpOworCQlwcl9lcnIoIk5vIFR4IHJlc291cmNlICVsZFxuIiwgZGItPnR4X3BhY2tldF9jbnQpOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCkBAIC04OTcsMTYgKzkwNiwxOCBAQAogCQlyZXR1cm47CiAJfQogCi0JaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgZGV2LT5tY19jb3VudCA+IFVMSTUyNjFfTUFYX01VTFRJQ0FTVCkgewotCQlVTEk1MjZYX0RCVUcoMCwgIlBhc3MgYWxsIG11bHRpY2FzdCBhZGRyZXNzIiwgZGV2LT5tY19jb3VudCk7CisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwKKwkgICAgbmV0ZGV2X21jX2NvdW50KGRldikgPiBVTEk1MjYxX01BWF9NVUxUSUNBU1QpIHsKKwkJVUxJNTI2WF9EQlVHKDAsICJQYXNzIGFsbCBtdWx0aWNhc3QgYWRkcmVzcyIsCisJCQkgICAgIG5ldGRldl9tY19jb3VudChkZXYpKTsKIAkJZGItPmNyNl9kYXRhICY9IH4oQ1I2X1BNIHwgQ1I2X1BCRik7CiAJCWRiLT5jcjZfZGF0YSB8PSBDUjZfUEFNOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkYi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCi0JVUxJNTI2WF9EQlVHKDAsICJTZXQgbXVsdGljYXN0IGFkZHJlc3MiLCBkZXYtPm1jX2NvdW50KTsKLQlzZW5kX2ZpbHRlcl9mcmFtZShkZXYsIGRldi0+bWNfY291bnQpOyAJLyogTTUyNjEvTTUyNjMgKi8KKwlVTEk1MjZYX0RCVUcoMCwgIlNldCBtdWx0aWNhc3QgYWRkcmVzcyIsIG5ldGRldl9tY19jb3VudChkZXYpKTsKKwlzZW5kX2ZpbHRlcl9mcmFtZShkZXYsIG5ldGRldl9tY19jb3VudChkZXYpKTsgCS8qIE01MjYxL001MjYzICovCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGItPmxvY2ssIGZsYWdzKTsKIH0KIApAQCAtMTA1OCw3ICsxMDY5LDcgQEAKIAkJLyogTGluayBGYWlsZWQgKi8KIAkJVUxJNTI2WF9EQlVHKDAsICJMaW5rIEZhaWxlZCIsIHRtcF9jcjEyKTsKIAkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAidWxpNTI2eDogJXMgTklDIExpbmsgaXMgRG93blxuIixkZXYtPm5hbWUpOworCQlwcl9pbmZvKCIlcyBOSUMgTGluayBpcyBEb3duXG4iLGRldi0+bmFtZSk7CiAJCWRiLT5saW5rX2ZhaWxlZCA9IDE7CiAKIAkJLyogRm9yIEZvcmNlIDEwLzEwME0gSGFsZi9GdWxsIG1vZGU6IEVuYWJsZSBBdXRvLU5lZ28gbW9kZSAqLwpAQCAtMTA5MCwxMSArMTEwMSwxMSBAQAogCQkJCX0KIAkJCQlpZihkYi0+b3BfbW9kZT09VUxJNTI2WF8xME1GRCB8fCBkYi0+b3BfbW9kZT09VUxJNTI2WF8xMDBNRkQpCiAJCQkJewotCQkJCQlwcmludGsoS0VSTl9JTkZPICJ1bGk1MjZ4OiAlcyBOSUMgTGluayBpcyBVcCAlZCBNYnBzIEZ1bGwgZHVwbGV4XG4iLGRldi0+bmFtZSxUbXBTcGVlZCk7CisJCQkJCXByX2luZm8oIiVzIE5JQyBMaW5rIGlzIFVwICVkIE1icHMgRnVsbCBkdXBsZXhcbiIsZGV2LT5uYW1lLFRtcFNwZWVkKTsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAidWxpNTI2eDogJXMgTklDIExpbmsgaXMgVXAgJWQgTWJwcyBIYWxmIGR1cGxleFxuIixkZXYtPm5hbWUsVG1wU3BlZWQpOworCQkJCQlwcl9pbmZvKCIlcyBOSUMgTGluayBpcyBVcCAlZCBNYnBzIEhhbGYgZHVwbGV4XG4iLGRldi0+bmFtZSxUbXBTcGVlZCk7CiAJCQkJfQogCQkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAkJCX0KQEAgLTExMDQsNyArMTExNSw3IEBACiAJCXsKIAkJCWlmKGRiLT5pbml0PT0xKQogCQkJewotCQkJCXByaW50ayhLRVJOX0lORk8gInVsaTUyNng6ICVzIE5JQyBMaW5rIGlzIERvd25cbiIsZGV2LT5uYW1lKTsKKwkJCQlwcl9pbmZvKCIlcyBOSUMgTGluayBpcyBEb3duXG4iLGRldi0+bmFtZSk7CiAJCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKIAkJCX0KIAkJfQpAQCAtMTIzMCw4ICsxMjQxLDcgQEAKIAogCWVyciA9IHBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgUENJX0QwKTsKIAlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBDb3VsZCBub3QgcHV0IGRldmljZSBpbnRvIEQwXG4iLAotCQkJZGV2LT5uYW1lKTsKKwkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiQ291bGQgbm90IHB1dCBkZXZpY2UgaW50byBEMFxuIik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC0xNDA1LDE0ICsxNDE1LDE0IEBACiAJKnN1cHRyKysgPSAweGZmZmYgPDwgRkxUX1NISUZUOwogCiAJLyogZml0IHRoZSBtdWx0aWNhc3QgYWRkcmVzcyAqLwotCWZvciAobWNwdHIgPSBkZXYtPm1jX2xpc3QsIGkgPSAwOyBpIDwgbWNfY250OyBpKyssIG1jcHRyID0gbWNwdHItPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY3B0ciwgZGV2KSB7CiAJCWFkZHJwdHIgPSAodTE2ICopIG1jcHRyLT5kbWlfYWRkcjsKIAkJKnN1cHRyKysgPSBhZGRycHRyWzBdIDw8IEZMVF9TSElGVDsKIAkJKnN1cHRyKysgPSBhZGRycHRyWzFdIDw8IEZMVF9TSElGVDsKIAkJKnN1cHRyKysgPSBhZGRycHRyWzJdIDw8IEZMVF9TSElGVDsKIAl9CiAKLQlmb3IgKDsgaTwxNDsgaSsrKSB7CisJZm9yIChpID0gbmV0ZGV2X21jX2NvdW50KGRldik7IGkgPCAxNDsgaSsrKSB7CiAJCSpzdXB0cisrID0gMHhmZmZmIDw8IEZMVF9TSElGVDsKIAkJKnN1cHRyKysgPSAweGZmZmYgPDwgRkxUX1NISUZUOwogCQkqc3VwdHIrKyA9IDB4ZmZmZiA8PCBGTFRfU0hJRlQ7CkBAIC0xNDMyLDcgKzE0NDIsNyBAQAogCQl1cGRhdGVfY3I2KGRiLT5jcjZfZGF0YSwgZGV2LT5iYXNlX2FkZHIpOwogCQlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAl9IGVsc2UKLQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FICI6IE5vIFR4IHJlc291cmNlIC0gU2VuZF9maWx0ZXJfZnJhbWUhXG4iKTsKKwkJcHJfZXJyKCJObyBUeCByZXNvdXJjZSAtIFNlbmRfZmlsdGVyX2ZyYW1lIVxuIik7CiB9CiAKIApAQCAtMTc4Myw3ICsxNzkzLDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdWxpNTI2eF9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodWxpNTI2eF9wY2lfdGJsKSA9IHsKIAl7IDB4MTBCOSwgMHg1MjYxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBQQ0lfVUxJNTI2MV9JRCB9LAogCXsgMHgxMEI5LCAweDUyNjMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIFBDSV9VTEk1MjYzX0lEIH0sCiAJeyAwLCB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jIGIvZHJpdmVycy9uZXQvdHVsaXAvd2luYm9uZC04NDAuYwppbmRleCA4NjlhN2EwLi4zMDRmNDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC93aW5ib25kLTg0MC5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL3dpbmJvbmQtODQwLmMKQEAgLTIxOCw3ICsyMTgsNyBAQAogCUNhbkhhdmVNSUk9MSwgSGFzQnJva2VuVHg9MiwgQWx3YXlzRkRYPTQsIEZEWE9uTm9NSUk9OCwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB3ODQwX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRSh3ODQwX3BjaV90YmwpID0gewogCXsgMHgxMDUwLCAweDA4NDAsIFBDSV9BTllfSUQsIDB4ODE1MywgICAgIDAsIDAsIDAgfSwKIAl7IDB4MTA1MCwgMHgwODQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxIH0sCiAJeyAweDExZjYsIDB4MjAxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMiB9LApAQCAtMzc2LDggKzM3Niw4IEBACiAJaXJxID0gcGRldi0+aXJxOwogCiAJaWYgKHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV2luYm9uZC04NDA6IERldmljZSAlcyBkaXNhYmxlZCBkdWUgdG8gRE1BIGxpbWl0YXRpb25zLlxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJcHJfd2FybmluZygiV2luYm9uZC04NDA6IERldmljZSAlcyBkaXNhYmxlZCBkdWUgdG8gRE1BIGxpbWl0YXRpb25zXG4iLAorCQkJICAgcGNpX25hbWUocGRldikpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKCpucCkpOwpAQCAtNDIyLDggKzQyMiw5IEBACiAJCWlmIChvcHRpb24gJiAweDIwMCkKIAkJCW5wLT5taWlfaWYuZnVsbF9kdXBsZXggPSAxOwogCQlpZiAob3B0aW9uICYgMTUpCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogaWdub3JpbmcgdXNlciBzdXBwbGllZCBtZWRpYSB0eXBlICVkIiwKLQkJCQlkZXYtPm5hbWUsIG9wdGlvbiAmIDE1KTsKKwkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkgImlnbm9yaW5nIHVzZXIgc3VwcGxpZWQgbWVkaWEgdHlwZSAlZCIsCisJCQkJIG9wdGlvbiAmIDE1KTsKIAl9CiAJaWYgKGZpbmRfY250IDwgTUFYX1VOSVRTICAmJiAgZnVsbF9kdXBsZXhbZmluZF9jbnRdID4gMCkKIAkJbnAtPm1paV9pZi5mdWxsX2R1cGxleCA9IDE7CkBAIC00NDAsOSArNDQxLDggQEAKIAlpZiAoaSkKIAkJZ290byBlcnJfb3V0X2NsZWFyZGV2OwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIGF0ICVwLCAlcE0sIElSUSAlZC5cbiIsCi0JICAgICAgIGRldi0+bmFtZSwgcGNpX2lkX3RibFtjaGlwX2lkeF0ubmFtZSwgaW9hZGRyLAotCSAgICAgICBkZXYtPmRldl9hZGRyLCBpcnEpOworCWRldl9pbmZvKCZkZXYtPmRldiwgIiVzIGF0ICVwLCAlcE0sIElSUSAlZFxuIiwKKwkJIHBjaV9pZF90YmxbY2hpcF9pZHhdLm5hbWUsIGlvYWRkciwgZGV2LT5kZXZfYWRkciwgaXJxKTsKIAogCWlmIChucC0+ZHJ2X2ZsYWdzICYgQ2FuSGF2ZU1JSSkgewogCQlpbnQgcGh5LCBwaHlfaWR4ID0gMDsKQEAgLTQ1MywxNiArNDUzLDE3IEBACiAJCQkJbnAtPm1paV9pZi5hZHZlcnRpc2luZyA9IG1kaW9fcmVhZChkZXYsIHBoeSwgTUlJX0FEVkVSVElTRSk7CiAJCQkJbnAtPm1paSA9IChtZGlvX3JlYWQoZGV2LCBwaHksIE1JSV9QSFlTSUQxKSA8PCAxNikrCiAJCQkJCQltZGlvX3JlYWQoZGV2LCBwaHksIE1JSV9QSFlTSUQyKTsKLQkJCQlwcmludGsoS0VSTl9JTkZPICIlczogTUlJIFBIWSAlOC44eGggZm91bmQgYXQgYWRkcmVzcyAlZCwgc3RhdHVzICIKLQkJCQkJICAgIjB4JTQuNHggYWR2ZXJ0aXNpbmcgJTQuNHguXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIG5wLT5taWksIHBoeSwgbWlpX3N0YXR1cywgbnAtPm1paV9pZi5hZHZlcnRpc2luZyk7CisJCQkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJCQkgIk1JSSBQSFkgJTA4eGggZm91bmQgYXQgYWRkcmVzcyAlZCwgc3RhdHVzIDB4JTA0eCBhZHZlcnRpc2luZyAlMDR4XG4iLAorCQkJCQkgbnAtPm1paSwgcGh5LCBtaWlfc3RhdHVzLAorCQkJCQkgbnAtPm1paV9pZi5hZHZlcnRpc2luZyk7CiAJCQl9CiAJCX0KIAkJbnAtPm1paV9jbnQgPSBwaHlfaWR4OwogCQlucC0+bWlpX2lmLnBoeV9pZCA9IG5wLT5waHlzWzBdOwogCQlpZiAocGh5X2lkeCA9PSAwKSB7Ci0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE1JSSBQSFkgbm90IGZvdW5kIC0tIHRoaXMgZGV2aWNlIG1heSAiCi0JCQkJCSAgICJub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuXG4iLCBkZXYtPm5hbWUpOworCQkJZGV2X3dhcm4oJmRldi0+ZGV2LAorCQkJCSAiTUlJIFBIWSBub3QgZm91bmQgLS0gdGhpcyBkZXZpY2UgbWF5IG5vdCBvcGVyYXRlIGNvcnJlY3RseVxuIik7CiAJCX0KIAl9CiAKQEAgLTY0NCw4ICs2NDUsOCBAQAogCQlnb3RvIG91dF9lcnI7CiAKIAlpZiAoZGVidWcgPiAxKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHc4OWM4NDBfb3BlbigpIGlycSAlZC5cbiIsCi0JCQkgICBkZXYtPm5hbWUsIGRldi0+aXJxKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB3ODljODQwX29wZW4oKSBpcnEgJWRcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIGRldi0+aXJxKTsKIAogCWlmKChpPWFsbG9jX3JpbmdkZXNjKGRldikpKQogCQlnb3RvIG91dF9lcnI7CkBAIC02NTcsNyArNjU4LDcgQEAKIAogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiAJaWYgKGRlYnVnID4gMikKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBEb25lIG5ldGRldl9vcGVuKCkuXG4iLCBkZXYtPm5hbWUpOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IERvbmUgbmV0ZGV2X29wZW4oKVxuIiwgZGV2LT5uYW1lKTsKIAogCS8qIFNldCB0aGUgdGltZXIgdG8gY2hlY2sgZm9yIGxpbmsgYmVhdC4gKi8KIAlpbml0X3RpbWVyKCZucC0+dGltZXIpOwpAQCAtNjg4LDE2ICs2ODksMTggQEAKIAlpZiAoIShtaWlfcmVnICYgMHg0KSkgewogCQlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CiAJCQlpZiAoZGVidWcpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1JSSAjJWQgcmVwb3J0cyBubyBsaW5rLiBEaXNhYmxpbmcgd2F0Y2hkb2cuXG4iLAotCQkJCQlkZXYtPm5hbWUsIG5wLT5waHlzWzBdKTsKKwkJCQlkZXZfaW5mbygmZGV2LT5kZXYsCisJCQkJCSAiTUlJICMlZCByZXBvcnRzIG5vIGxpbmsuIERpc2FibGluZyB3YXRjaGRvZ1xuIiwKKwkJCQkJIG5wLT5waHlzWzBdKTsKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAJCX0KIAkJcmV0dXJuIG5wLT5jc3I2OwogCX0KIAlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSkgewogCQlpZiAoZGVidWcpCi0JCQlwcmludGsoS0VSTl9JTkZPICIlczogTUlJICMlZCBsaW5rIGlzIGJhY2suIEVuYWJsaW5nIHdhdGNoZG9nLlxuIiwKLQkJCQlkZXYtPm5hbWUsIG5wLT5waHlzWzBdKTsKKwkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkgIk1JSSAjJWQgbGluayBpcyBiYWNrLiBFbmFibGluZyB3YXRjaGRvZ1xuIiwKKwkJCQkgbnAtPnBoeXNbMF0pOwogCQluZXRpZl9jYXJyaWVyX29uKGRldik7CiAJfQogCkBAIC03MjksOSArNzMyLDEwIEBACiAJaWYgKGZhc3RldGgpCiAJCXJlc3VsdCB8PSAweDIwMDAwMDAwOwogCWlmIChyZXN1bHQgIT0gbnAtPmNzcjYgJiYgZGVidWcpCi0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBTZXR0aW5nICVkTUJpdC0lcy1kdXBsZXggYmFzZWQgb24gTUlJIyVkXG4iLAotCQkJCSBkZXYtPm5hbWUsIGZhc3RldGggPyAxMDAgOiAxMCwKLQkJCSAgIAlkdXBsZXggPyAiZnVsbCIgOiAiaGFsZiIsIG5wLT5waHlzWzBdKTsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJICJTZXR0aW5nICVkTUJpdC0lcy1kdXBsZXggYmFzZWQgb24gTUlJIyVkXG4iLAorCQkJIGZhc3RldGggPyAxMDAgOiAxMCwgZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiLAorCQkJIG5wLT5waHlzWzBdKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC03NjMsOCArNzY3LDggQEAKIAogCQlsaW1pdC0tOwogCQlpZighbGltaXQpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBjb3VsZG4ndCBzdG9wIHJ4dHgsIEludHJTdGF0dXMgJXhoLlxuIiwKLQkJCQkJZGV2LT5uYW1lLCBjc3I1KTsKKwkJCWRldl9pbmZvKCZkZXYtPmRldiwKKwkJCQkgImNvdWxkbid0IHN0b3Agcnh0eCwgSW50clN0YXR1cyAleGhcbiIsIGNzcjUpOwogCQkJYnJlYWs7CiAJCX0KIAkJdWRlbGF5KDEpOwpAQCAtNzgzLDEwICs3ODcsOSBAQAogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gbnAtPmJhc2VfYWRkcjsKIAogCWlmIChkZWJ1ZyA+IDIpCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogTWVkaWEgc2VsZWN0aW9uIHRpbWVyIHRpY2ssIHN0YXR1cyAlOC44eCAiCi0JCQkgICAiY29uZmlnICU4Ljh4LlxuIiwKLQkJCSAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgSW50clN0YXR1cyksCi0JCQkgICBpb3JlYWQzMihpb2FkZHIgKyBOZXR3b3JrQ29uZmlnKSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogTWVkaWEgc2VsZWN0aW9uIHRpbWVyIHRpY2ssIHN0YXR1cyAlMDh4IGNvbmZpZyAlMDh4XG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBpb3JlYWQzMihpb2FkZHIgKyBJbnRyU3RhdHVzKSwKKwkJICAgICAgIGlvcmVhZDMyKGlvYWRkciArIE5ldHdvcmtDb25maWcpKTsKIAlzcGluX2xvY2tfaXJxKCZucC0+bG9jayk7CiAJdXBkYXRlX2NzcjYoZGV2LCB1cGRhdGVfbGluayhkZXYpKTsKIAlzcGluX3VubG9ja19pcnEoJm5wLT5sb2NrKTsKQEAgLTg5OSw4ICs5MDIsOCBAQAogCS8qIFdoZW4gbm90IGEgbW9kdWxlIHdlIGNhbiB3b3JrIGFyb3VuZCBicm9rZW4gJzQ4NiBQQ0kgYm9hcmRzLiAqLwogCWlmIChib290X2NwdV9kYXRhLng4NiA8PSA0KSB7CiAJCWkgfD0gMHg0ODAwOwotCQlwcmludGsoS0VSTl9JTkZPICIlczogVGhpcyBpcyBhIDM4Ni80ODYgUENJIHN5c3RlbSwgc2V0dGluZyBjYWNoZSAiCi0JCQkgICAiYWxpZ25tZW50IHRvIDggbG9uZ3dvcmRzLlxuIiwgZGV2LT5uYW1lKTsKKwkJZGV2X2luZm8oJmRldi0+ZGV2LAorCQkJICJUaGlzIGlzIGEgMzg2LzQ4NiBQQ0kgc3lzdGVtLCBzZXR0aW5nIGNhY2hlIGFsaWdubWVudCB0byA4IGxvbmd3b3Jkc1xuIik7CiAJfSBlbHNlIHsKIAkJaSB8PSAweEUwMDA7CiAJfQpAQCAtOTMxLDIyICs5MzQsMjMgQEAKIAlzdHJ1Y3QgbmV0ZGV2X3ByaXZhdGUgKm5wID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IG5wLT5iYXNlX2FkZHI7CiAKLQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVHJhbnNtaXQgdGltZWQgb3V0LCBzdGF0dXMgJTguOHgsIgotCQkgICAiIHJlc2V0dGluZy4uLlxuIiwgZGV2LT5uYW1lLCBpb3JlYWQzMihpb2FkZHIgKyBJbnRyU3RhdHVzKSk7CisJZGV2X3dhcm4oJmRldi0+ZGV2LCAiVHJhbnNtaXQgdGltZWQgb3V0LCBzdGF0dXMgJTA4eCwgcmVzZXR0aW5nLi4uXG4iLAorCQkgaW9yZWFkMzIoaW9hZGRyICsgSW50clN0YXR1cykpOwogCiAJewogCQlpbnQgaTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiAgUnggcmluZyAlcDogIiwgbnAtPnJ4X3JpbmcpOwogCQlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspCi0JCQlwcmludGsoIiAlOC44eCIsICh1bnNpZ25lZCBpbnQpbnAtPnJ4X3JpbmdbaV0uc3RhdHVzKTsKLQkJcHJpbnRrKEtFUk5fREVCVUciICBUeCByaW5nICVwOiAiLCBucC0+dHhfcmluZyk7CisJCQlwcmludGsoS0VSTl9DT05UICIgJTA4eCIsICh1bnNpZ25lZCBpbnQpbnAtPnJ4X3JpbmdbaV0uc3RhdHVzKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgVHggcmluZyAlcDogIiwgbnAtPnR4X3JpbmcpOwogCQlmb3IgKGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKyspCi0JCQlwcmludGsoIiAlOC44eCIsIG5wLT50eF9yaW5nW2ldLnN0YXR1cyk7Ci0JCXByaW50aygiXG4iKTsKKwkJCXByaW50ayhLRVJOX0NPTlQgIiAlMDh4IiwgbnAtPnR4X3JpbmdbaV0uc3RhdHVzKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAl9Ci0JcHJpbnRrKEtFUk5fREVCVUcgIlR4IGN1ciAlZCBUeCBkaXJ0eSAlZCBUeCBGdWxsICVkLCBxIGJ5dGVzICVkLlxuIiwKLQkJCQlucC0+Y3VyX3R4LCBucC0+ZGlydHlfdHgsIG5wLT50eF9mdWxsLCBucC0+dHhfcV9ieXRlcyk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIlR4IERlc2NyaXB0b3IgYWRkciAleGguXG4iLGlvcmVhZDMyKGlvYWRkcisweDRDKSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlR4IGN1ciAlZCBUeCBkaXJ0eSAlZCBUeCBGdWxsICVkLCBxIGJ5dGVzICVkXG4iLAorCSAgICAgICBucC0+Y3VyX3R4LCBucC0+ZGlydHlfdHgsIG5wLT50eF9mdWxsLCBucC0+dHhfcV9ieXRlcyk7CisJcHJpbnRrKEtFUk5fREVCVUcgIlR4IERlc2NyaXB0b3IgYWRkciAleGhcbiIsIGlvcmVhZDMyKGlvYWRkcisweDRDKSk7CiAKIAlkaXNhYmxlX2lycShkZXYtPmlycSk7CiAJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwpAQCAtMTA1NSw4ICsxMDU5LDggQEAKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAogCWlmIChkZWJ1ZyA+IDQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc21pdCBmcmFtZSAjJWQgcXVldWVkIGluIHNsb3QgJWQuXG4iLAotCQkJICAgZGV2LT5uYW1lLCBucC0+Y3VyX3R4LCBlbnRyeSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJhbnNtaXQgZnJhbWUgIyVkIHF1ZXVlZCBpbiBzbG90ICVkXG4iLAorCQkgICAgICAgZGV2LT5uYW1lLCBucC0+Y3VyX3R4LCBlbnRyeSk7CiAJfQogCXJldHVybiBORVRERVZfVFhfT0s7CiB9CkBAIC0xMDczLDggKzEwNzcsOCBAQAogCQlpZiAodHhfc3RhdHVzICYgMHg4MDAwKSB7IAkvKiBUaGVyZSB3YXMgYW4gZXJyb3IsIGxvZyBpdC4gKi8KICNpZm5kZWYgZmluYWxfdmVyc2lvbgogCQkJaWYgKGRlYnVnID4gMSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyYW5zbWl0IGVycm9yLCBUeCBzdGF0dXMgJTguOHguXG4iLAotCQkJCQkgICBkZXYtPm5hbWUsIHR4X3N0YXR1cyk7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmFuc21pdCBlcnJvciwgVHggc3RhdHVzICUwOHhcbiIsCisJCQkJICAgICAgIGRldi0+bmFtZSwgdHhfc3RhdHVzKTsKICNlbmRpZgogCQkJbnAtPnN0YXRzLnR4X2Vycm9ycysrOwogCQkJaWYgKHR4X3N0YXR1cyAmIDB4MDEwNCkgbnAtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CkBAIC0xMDg2LDggKzEwOTAsOCBAQAogCQl9IGVsc2UgewogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCiAJCQlpZiAoZGVidWcgPiAzKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJhbnNtaXQgc2xvdCAlZCBvaywgVHggc3RhdHVzICU4Ljh4LlxuIiwKLQkJCQkJICAgZGV2LT5uYW1lLCBlbnRyeSwgdHhfc3RhdHVzKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRyYW5zbWl0IHNsb3QgJWQgb2ssIFR4IHN0YXR1cyAlMDh4XG4iLAorCQkJCSAgICAgICBkZXYtPm5hbWUsIGVudHJ5LCB0eF9zdGF0dXMpOwogI2VuZGlmCiAJCQlucC0+c3RhdHMudHhfYnl0ZXMgKz0gbnAtPnR4X3NrYnVmZltlbnRyeV0tPmxlbjsKIAkJCW5wLT5zdGF0cy5jb2xsaXNpb25zICs9ICh0eF9zdGF0dXMgPj4gMykgJiAxNTsKQEAgLTExMzAsOCArMTEzNCw4IEBACiAJCWlvd3JpdGUzMihpbnRyX3N0YXR1cyAmIDB4MDAxZmZmZiwgaW9hZGRyICsgSW50clN0YXR1cyk7CiAKIAkJaWYgKGRlYnVnID4gNCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogSW50ZXJydXB0LCBzdGF0dXMgJTQuNHguXG4iLAotCQkJCSAgIGRldi0+bmFtZSwgaW50cl9zdGF0dXMpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnRlcnJ1cHQsIHN0YXR1cyAlMDR4XG4iLAorCQkJICAgICAgIGRldi0+bmFtZSwgaW50cl9zdGF0dXMpOwogCiAJCWlmICgoaW50cl9zdGF0dXMgJiAoTm9ybWFsSW50cnxBYm5vcm1hbEludHIpKSA9PSAwKQogCQkJYnJlYWs7CkBAIC0xMTU2LDggKzExNjAsOSBAQAogCQkJbmV0ZGV2X2Vycm9yKGRldiwgaW50cl9zdGF0dXMpOwogCiAJCWlmICgtLXdvcmtfbGltaXQgPCAwKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVG9vIG11Y2ggd29yayBhdCBpbnRlcnJ1cHQsICIKLQkJCQkgICAic3RhdHVzPTB4JTQuNHguXG4iLCBkZXYtPm5hbWUsIGludHJfc3RhdHVzKTsKKwkJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCQkgIlRvbyBtdWNoIHdvcmsgYXQgaW50ZXJydXB0LCBzdGF0dXM9MHglMDR4XG4iLAorCQkJCSBpbnRyX3N0YXR1cyk7CiAJCQkvKiBTZXQgdGhlIHRpbWVyIHRvIHJlLWVuYWJsZSB0aGUgb3RoZXIgaW50ZXJydXB0cyBhZnRlcgogCQkJICAgMTAqODJ1c2VjIHRpY2tzLiAqLwogCQkJc3Bpbl9sb2NrKCZucC0+bG9jayk7CkBAIC0xMTcxLDggKzExNzYsOCBAQAogCX0gd2hpbGUgKDEpOwogCiAJaWYgKGRlYnVnID4gMykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBleGl0aW5nIGludGVycnVwdCwgc3RhdHVzPSUjNC40eC5cbiIsCi0JCQkgICBkZXYtPm5hbWUsIGlvcmVhZDMyKGlvYWRkciArIEludHJTdGF0dXMpKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBleGl0aW5nIGludGVycnVwdCwgc3RhdHVzPSUjNC40eFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgSW50clN0YXR1cykpOwogCXJldHVybiBJUlFfUkVUVkFMKGhhbmRsZWQpOwogfQogCkBAIC0xMTg1LDggKzExOTAsOCBAQAogCWludCB3b3JrX2xpbWl0ID0gbnAtPmRpcnR5X3J4ICsgUlhfUklOR19TSVpFIC0gbnAtPmN1cl9yeDsKIAogCWlmIChkZWJ1ZyA+IDQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiBJbiBuZXRkZXZfcngoKSwgZW50cnkgJWQgc3RhdHVzICU0LjR4LlxuIiwKLQkJCSAgIGVudHJ5LCBucC0+cnhfcmluZ1tlbnRyeV0uc3RhdHVzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiBJbiBuZXRkZXZfcngoKSwgZW50cnkgJWQgc3RhdHVzICUwNHhcbiIsCisJCSAgICAgICBlbnRyeSwgbnAtPnJ4X3JpbmdbZW50cnldLnN0YXR1cyk7CiAJfQogCiAJLyogSWYgRU9QIGlzIHNldCBvbiB0aGUgbmV4dCBlbnRyeSwgaXQncyBhIG5ldyBwYWNrZXQuIFNlbmQgaXQgdXAuICovCkBAIC0xMTk1LDI0ICsxMjAwLDI0IEBACiAJCXMzMiBzdGF0dXMgPSBkZXNjLT5zdGF0dXM7CiAKIAkJaWYgKGRlYnVnID4gNCkKLQkJCXByaW50ayhLRVJOX0RFQlVHICIgIG5ldGRldl9yeCgpIHN0YXR1cyB3YXMgJTguOHguXG4iLAotCQkJCSAgIHN0YXR1cyk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiICBuZXRkZXZfcngoKSBzdGF0dXMgd2FzICUwOHhcbiIsCisJCQkgICAgICAgc3RhdHVzKTsKIAkJaWYgKHN0YXR1cyA8IDApCiAJCQlicmVhazsKIAkJaWYgKChzdGF0dXMgJiAweDM4MDA4MzAwKSAhPSAweDAzMDApIHsKIAkJCWlmICgoc3RhdHVzICYgMHgzODAwMDMwMCkgIT0gMHgwMzAwKSB7CiAJCQkJLyogSW5nb3JlIGVhcmxpZXIgYnVmZmVycy4gKi8KIAkJCQlpZiAoKHN0YXR1cyAmIDB4ZmZmZikgIT0gMHg3ZmZmKSB7Ci0JCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBPdmVyc2l6ZWQgRXRoZXJuZXQgZnJhbWUgc3Bhbm5lZCAiCi0JCQkJCQkgICAibXVsdGlwbGUgYnVmZmVycywgZW50cnkgJSN4IHN0YXR1cyAlNC40eCFcbiIsCi0JCQkJCQkgICBkZXYtPm5hbWUsIG5wLT5jdXJfcngsIHN0YXR1cyk7CisJCQkJCWRldl93YXJuKCZkZXYtPmRldiwKKwkJCQkJCSAiT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lIHNwYW5uZWQgbXVsdGlwbGUgYnVmZmVycywgZW50cnkgJSN4IHN0YXR1cyAlMDR4IVxuIiwKKwkJCQkJCSBucC0+Y3VyX3J4LCBzdGF0dXMpOwogCQkJCQlucC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQkJCX0KIAkJCX0gZWxzZSBpZiAoc3RhdHVzICYgMHg4MDAwKSB7CiAJCQkJLyogVGhlcmUgd2FzIGEgZmF0YWwgZXJyb3IuICovCiAJCQkJaWYgKGRlYnVnID4gMikKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSZWNlaXZlIGVycm9yLCBSeCBzdGF0dXMgJTguOHguXG4iLAotCQkJCQkJICAgZGV2LT5uYW1lLCBzdGF0dXMpOworCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlY2VpdmUgZXJyb3IsIFJ4IHN0YXR1cyAlMDh4XG4iLAorCQkJCQkgICAgICAgZGV2LT5uYW1lLCBzdGF0dXMpOwogCQkJCW5wLT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogZW5kIG9mIGEgcGFja2V0LiovCiAJCQkJaWYgKHN0YXR1cyAmIDB4MDg5MCkgbnAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKIAkJCQlpZiAoc3RhdHVzICYgMHgwMDRDKSBucC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7CkBAIC0xMjI1LDggKzEyMzAsOCBAQAogCiAjaWZuZGVmIGZpbmFsX3ZlcnNpb24KIAkJCWlmIChkZWJ1ZyA+IDQpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgbmV0ZGV2X3J4KCkgbm9ybWFsIFJ4IHBrdCBsZW5ndGggJWQiCi0JCQkJCSAgICIgc3RhdHVzICV4LlxuIiwgcGt0X2xlbiwgc3RhdHVzKTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiICBuZXRkZXZfcngoKSBub3JtYWwgUnggcGt0IGxlbmd0aCAlZCBzdGF0dXMgJXhcbiIsCisJCQkJICAgICAgIHBrdF9sZW4sIHN0YXR1cyk7CiAjZW5kaWYKIAkJCS8qIENoZWNrIGlmIHRoZSBwYWNrZXQgaXMgbG9uZyBlbm91Z2ggdG8gYWNjZXB0IHdpdGhvdXQgY29weWluZwogCQkJICAgdG8gYSBtaW5pbWFsbHktc2l6ZWQgc2tidWZmLiAqLwpAQCAtMTI1MSwxMSArMTI1NiwxMCBAQAogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCQkJCS8qIFJlbW92ZSBhZnRlciB0ZXN0aW5nLiAqLwogCQkJLyogWW91IHdpbGwgd2FudCB0aGlzIGluZm8gZm9yIHRoZSBpbml0aWFsIGRlYnVnLiAqLwogCQkJaWYgKGRlYnVnID4gNSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiICBSeCBkYXRhICVwTSAlcE0iCi0JCQkJICAgICAgICIgJTIuMnglMi4yeCAlZC4lZC4lZC4lZC5cbiIsCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgUnggZGF0YSAlcE0gJXBNICUwMnglMDJ4ICVwSTRcbiIsCiAJCQkJICAgICAgICZza2ItPmRhdGFbMF0sICZza2ItPmRhdGFbNl0sCiAJCQkJICAgICAgIHNrYi0+ZGF0YVsxMl0sIHNrYi0+ZGF0YVsxM10sCi0JCQkJICAgICAgIHNrYi0+ZGF0YVsxNF0sIHNrYi0+ZGF0YVsxNV0sIHNrYi0+ZGF0YVsxNl0sIHNrYi0+ZGF0YVsxN10pOworCQkJCSAgICAgICAmc2tiLT5kYXRhWzE0XSk7CiAjZW5kaWYKIAkJCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7CiAJCQluZXRpZl9yeChza2IpOwpAQCAtMTI5Myw4ICsxMjk3LDggQEAKIAl2b2lkIF9faW9tZW0gKmlvYWRkciA9IG5wLT5iYXNlX2FkZHI7CiAKIAlpZiAoZGVidWcgPiAyKQotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFibm9ybWFsIGV2ZW50LCAlOC44eC5cbiIsCi0JCQkgICBkZXYtPm5hbWUsIGludHJfc3RhdHVzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBYm5vcm1hbCBldmVudCwgJTA4eFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgaW50cl9zdGF0dXMpOwogCWlmIChpbnRyX3N0YXR1cyA9PSAweGZmZmZmZmZmKQogCQlyZXR1cm47CiAJc3Bpbl9sb2NrKCZucC0+bG9jayk7CkBAIC0xMzE0LDggKzEzMTgsOCBAQAogCQkgCW5ldyA9IDEyNzsgLyogbG9hZCBmdWxsIHBhY2tldCBiZWZvcmUgc3RhcnRpbmcgKi8KIAkJbmV3ID0gKG5wLT5jc3I2ICYgfigweDdGIDw8IDE0KSkgfCAobmV3PDwxNCk7CiAjZW5kaWYKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUeCB1bmRlcmZsb3csIG5ldyBjc3I2ICU4Ljh4LlxuIiwKLQkJCSAgIGRldi0+bmFtZSwgbmV3KTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUeCB1bmRlcmZsb3csIG5ldyBjc3I2ICUwOHhcbiIsCisJCSAgICAgICBkZXYtPm5hbWUsIG5ldyk7CiAJCXVwZGF0ZV9jc3I2KGRldiwgbmV3KTsKIAl9CiAJaWYgKGludHJfc3RhdHVzICYgUnhEaWVkKSB7CQkvKiBNaXNzZWQgYSBSeCBmcmFtZS4gKi8KQEAgLTEzNTcsMTcgKzEzNjEsMTYgQEAKIAkJbWVtc2V0KG1jX2ZpbHRlciwgMHhmZiwgc2l6ZW9mKG1jX2ZpbHRlcikpOwogCQlyeF9tb2RlID0gUnhBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBSeEFjY2VwdEFsbFBoeXMKIAkJCXwgQWNjZXB0TXlQaHlzOwotCX0gZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBtdWx0aWNhc3RfZmlsdGVyX2xpbWl0KSB8fAorCX0gZWxzZSBpZiAoKG5ldGRldl9tY19jb3VudChkZXYpID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKIAkJICAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCS8qIFRvbyBtYW55IHRvIG1hdGNoLCBvciBhY2NlcHQgYWxsIG11bHRpY2FzdHMuICovCiAJCW1lbXNldChtY19maWx0ZXIsIDB4ZmYsIHNpemVvZihtY19maWx0ZXIpKTsKIAkJcnhfbW9kZSA9IFJ4QWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXVsdGljYXN0IHwgQWNjZXB0TXlQaHlzOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNsaXN0OwotCQlpbnQgaTsKKwogCQltZW1zZXQobWNfZmlsdGVyLCAwLCBzaXplb2YobWNfZmlsdGVyKSk7Ci0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkJIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KSB7CiAJCQlpbnQgZmlsdGVyYml0ID0gKGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgPj4gMjYpIF4gMHgzRjsKIAkJCWZpbHRlcmJpdCAmPSAweDNmOwogCQkJbWNfZmlsdGVyW2ZpbHRlcmJpdCA+PiA1XSB8PSAxIDw8IChmaWx0ZXJiaXQgJiAzMSk7CkBAIC0xNDg3LDExICsxNDkwLDEzIEBACiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCiAJaWYgKGRlYnVnID4gMSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCBzdGF0dXMgd2FzICU4Ljh4ICIKLQkJCSAgICJDb25maWcgJTguOHguXG4iLCBkZXYtPm5hbWUsIGlvcmVhZDMyKGlvYWRkciArIEludHJTdGF0dXMpLAotCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgTmV0d29ya0NvbmZpZykpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFF1ZXVlIHBvaW50ZXJzIHdlcmUgVHggJWQgLyAlZCwgIFJ4ICVkIC8gJWQuXG4iLAotCQkJICAgZGV2LT5uYW1lLCBucC0+Y3VyX3R4LCBucC0+ZGlydHlfdHgsIG5wLT5jdXJfcngsIG5wLT5kaXJ0eV9yeCk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQsIHN0YXR1cyB3YXMgJTA4eCBDb25maWcgJTA4eFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgSW50clN0YXR1cyksCisJCSAgICAgICBpb3JlYWQzMihpb2FkZHIgKyBOZXR3b3JrQ29uZmlnKSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogUXVldWUgcG9pbnRlcnMgd2VyZSBUeCAlZCAvICVkLCAgUnggJWQgLyAlZFxuIiwKKwkJICAgICAgIGRldi0+bmFtZSwKKwkJICAgICAgIG5wLT5jdXJfdHgsIG5wLT5kaXJ0eV90eCwKKwkJICAgICAgIG5wLT5jdXJfcngsIG5wLT5kaXJ0eV9yeCk7CiAJfQogCiAgCS8qIFN0b3AgdGhlIGNoaXAncyBUeCBhbmQgUnggcHJvY2Vzc2VzLiAqLwpAQCAtMTUxMiwxOCArMTUxNywxNiBAQAogCWlmIChkZWJ1ZyA+IDIpIHsKIAkJaW50IGk7CiAKLQkJcHJpbnRrKEtFUk5fREVCVUciICBUeCByaW5nIGF0ICU4Ljh4OlxuIiwKLQkJCSAgIChpbnQpbnAtPnR4X3JpbmcpOworCQlwcmludGsoS0VSTl9ERUJVRyIgIFR4IHJpbmcgYXQgJTA4eDpcbiIsIChpbnQpbnAtPnR4X3JpbmcpOwogCQlmb3IgKGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKyspCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiICMlZCBkZXNjLiAlNC40eCAlNC40eCAlOC44eC5cbiIsCi0JCQkJICAgaSwgbnAtPnR4X3JpbmdbaV0ubGVuZ3RoLAotCQkJCSAgIG5wLT50eF9yaW5nW2ldLnN0YXR1cywgbnAtPnR4X3JpbmdbaV0uYnVmZmVyMSk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIgIFJ4IHJpbmcgJTguOHg6XG4iLAotCQkJICAgKGludClucC0+cnhfcmluZyk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiICMlZCBkZXNjLiAlMDR4ICUwNHggJTA4eFxuIiwKKwkJCSAgICAgICBpLCBucC0+dHhfcmluZ1tpXS5sZW5ndGgsCisJCQkgICAgICAgbnAtPnR4X3JpbmdbaV0uc3RhdHVzLCBucC0+dHhfcmluZ1tpXS5idWZmZXIxKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAgUnggcmluZyAlMDh4OlxuIiwgKGludClucC0+cnhfcmluZyk7CiAJCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAjJWQgZGVzYy4gJTQuNHggJTQuNHggJTguOHhcbiIsCi0JCQkJICAgaSwgbnAtPnJ4X3JpbmdbaV0ubGVuZ3RoLAotCQkJCSAgIG5wLT5yeF9yaW5nW2ldLnN0YXR1cywgbnAtPnJ4X3JpbmdbaV0uYnVmZmVyMSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiICMlZCBkZXNjLiAlMDR4ICUwNHggJTA4eFxuIiwKKwkJCSAgICAgICBpLCBucC0+cnhfcmluZ1tpXS5sZW5ndGgsCisJCQkgICAgICAgbnAtPnJ4X3JpbmdbaV0uc3RhdHVzLCBucC0+cnhfcmluZ1tpXS5idWZmZXIxKTsKIAkJfQogCX0KICNlbmRpZiAvKiBfX2kzODZfXyBkZWJ1Z2dpbmcgb25seSAqLwpAQCAtMTYyMiw5ICsxNjI1LDggQEAKIAkJZ290byBvdXQ7IC8qIGRldmljZSBub3Qgc3VzcGVuZGVkICovCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkgewogCQlpZiAoKHJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSkgewotCQkJcHJpbnRrIChLRVJOX0VSUgotCQkJCSIlczogcGNpX2VuYWJsZV9kZXZpY2UgZmFpbGVkIGluIHJlc3VtZVxuIiwKLQkJCQlkZXYtPm5hbWUpOworCQkJZGV2X2VycigmZGV2LT5kZXYsCisJCQkJInBjaV9lbmFibGVfZGV2aWNlIGZhaWxlZCBpbiByZXN1bWVcbiIpOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJc3Bpbl9sb2NrX2lycSgmbnAtPmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVsaXAveGlyY29tX2NiLmMgYi9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYwppbmRleCA5OTI0YzRjLi5hY2ZlZWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYworKysgYi9kcml2ZXJzL25ldC90dWxpcC94aXJjb21fY2IuYwpAQCAtMTQsNiArMTQsOCBAQAogICogCSRJZDogeGlyY29tX2NiLmMsdiAxLjMzIDIwMDEvMDMvMTkgMTQ6MDI6MDcgYXJqYW52IEV4cCAkCiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC0xNDQsNyArMTQ2LDcgQEAKIAogCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB4aXJjb21fcGNpX3RhYmxlW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoeGlyY29tX3BjaV90YWJsZSkgPSB7CiAJezB4MTE1RCwgMHgwMDAzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCiAJezAsfSwKIH07CkBAIC0yMzQsNyArMjM2LDcgQEAKIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQgKHBkZXYsIFBDSV9TVEFUVVMsdG1wMTYpOwogCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksIDEyOCwgInhpcmNvbV9jYiIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAieGlyY29tX3Byb2JlOiBmYWlsZWQgdG8gYWxsb2NhdGUgaW8tcmVnaW9uXG4iKTsKKwkJcHJfZXJyKCIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGlvLXJlZ2lvblxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTI0NSw3ICsyNDcsNyBAQAogCSAqLwogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZihzdHJ1Y3QgeGlyY29tX3ByaXZhdGUpKTsKIAlpZiAoIWRldikgewotCQlwcmludGsoS0VSTl9FUlIgInhpcmNvbV9wcm9iZTogZmFpbGVkIHRvIGFsbG9jYXRlIGV0aGVyZGV2XG4iKTsKKwkJcHJfZXJyKCIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGV0aGVyZGV2XG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gZGV2aWNlX2ZhaWw7CiAJfQogCXByaXZhdGUgPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtMjUzLDEyICsyNTUsMTIgQEAKIAkvKiBBbGxvY2F0ZSB0aGUgc2VuZC9yZWNlaXZlIGJ1ZmZlcnMgKi8KIAlwcml2YXRlLT5yeF9idWZmZXIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LDgxOTIsJnByaXZhdGUtPnJ4X2RtYV9oYW5kbGUpOwogCWlmIChwcml2YXRlLT5yeF9idWZmZXIgPT0gTlVMTCkgewotIAkJcHJpbnRrKEtFUk5fRVJSICJ4aXJjb21fcHJvYmU6IG5vIG1lbW9yeSBmb3IgcnggYnVmZmVyIFxuIik7CisJCXByX2VycigiJXM6IG5vIG1lbW9yeSBmb3IgcnggYnVmZmVyXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gcnhfYnVmX2ZhaWw7CiAJfQogCXByaXZhdGUtPnR4X2J1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsODE5MiwmcHJpdmF0ZS0+dHhfZG1hX2hhbmRsZSk7CiAJaWYgKHByaXZhdGUtPnR4X2J1ZmZlciA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAieGlyY29tX3Byb2JlOiBubyBtZW1vcnkgZm9yIHR4IGJ1ZmZlciBcbiIpOworCQlwcl9lcnIoIiVzOiBubyBtZW1vcnkgZm9yIHR4IGJ1ZmZlclxuIiwgX19mdW5jX18pOwogCQlnb3RvIHR4X2J1Zl9mYWlsOwogCX0KIApAQCAtMjgxLDExICsyODMsMTIgQEAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgZGV2KTsKIAogCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2KSkgewotCQlwcmludGsoS0VSTl9FUlIgInhpcmNvbV9wcm9iZTogbmV0ZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWQuXG4iKTsKKwkJcHJfZXJyKCIlczogbmV0ZGV2aWNlIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJZ290byByZWdfZmFpbDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICIlczogWGlyY29tIGNhcmRidXMgcmV2aXNpb24gJWkgYXQgaXJxICVpIFxuIiwgZGV2LT5uYW1lLCBwZGV2LT5yZXZpc2lvbiwgcGRldi0+aXJxKTsKKwlkZXZfaW5mbygmZGV2LT5kZXYsICJYaXJjb20gY2FyZGJ1cyByZXZpc2lvbiAlaSBhdCBpcnEgJWlcbiIsCisJCSBwZGV2LT5yZXZpc2lvbiwgcGRldi0+aXJxKTsKIAkvKiBzdGFydCB0aGUgdHJhbnNtaXR0ZXIgdG8gZ2V0IGEgaGVhcnRiZWF0ICovCiAJLyogVE9ETzogc2VuZCAyIGR1bW15IHBhY2tldHMgaGVyZSAqLwogCXRyYW5zY2VpdmVyX3Zvb2Rvbyhwcml2YXRlKTsKQEAgLTM0Nyw4ICszNTAsMTAgQEAKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRfYmluYXJ5KHN0YXR1cyk7Ci0JcHJpbnRrKCJ0eCBzdGF0dXMgMHglMDh4IDB4JTA4eCBcbiIsY2FyZC0+dHhfYnVmZmVyWzBdLGNhcmQtPnR4X2J1ZmZlcls0XSk7Ci0JcHJpbnRrKCJyeCBzdGF0dXMgMHglMDh4IDB4JTA4eCBcbiIsY2FyZC0+cnhfYnVmZmVyWzBdLGNhcmQtPnJ4X2J1ZmZlcls0XSk7CisJcHJpbnRrKCJ0eCBzdGF0dXMgMHglMDh4IDB4JTA4eCBcbiIsCisJICAgICAgIGNhcmQtPnR4X2J1ZmZlclswXSwgY2FyZC0+dHhfYnVmZmVyWzRdKTsKKwlwcmludGsoInJ4IHN0YXR1cyAweCUwOHggMHglMDh4IFxuIiwKKwkgICAgICAgY2FyZC0+cnhfYnVmZmVyWzBdLCBjYXJkLT5yeF9idWZmZXJbNF0pOwogI2VuZGlmCiAJLyogSGFuZGxlIHNoYXJlZCBpcnEgYW5kIGhvdHBsdWcgKi8KIAlpZiAoc3RhdHVzID09IDAgfHwgc3RhdHVzID09IDB4ZmZmZmZmZmYpIHsKQEAgLTM1OCw5ICszNjMsOSBAQAogCiAJaWYgKGxpbmtfc3RhdHVzX2NoYW5nZWQoY2FyZCkpIHsKIAkJaW50IG5ld2xpbms7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJ4aXJjb21fY2I6IExpbmsgc3RhdHVzIGhhcyBjaGFuZ2VkIFxuIik7CisJCXByaW50ayhLRVJOX0RFQlVHICJ4aXJjb21fY2I6IExpbmsgc3RhdHVzIGhhcyBjaGFuZ2VkXG4iKTsKIAkJbmV3bGluayA9IGxpbmtfc3RhdHVzKGNhcmQpOwotCQlwcmludGsoS0VSTl9JTkZPICAieGlyY29tX2NiOiBMaW5rIGlzICVpIG1iaXQgXG4iLG5ld2xpbmspOworCQlkZXZfaW5mbygmZGV2LT5kZXYsICJMaW5rIGlzICVpIG1iaXRcbiIsIG5ld2xpbmspOwogCQlpZiAobmV3bGluaykKIAkJCW5ldGlmX2NhcnJpZXJfb24oZGV2KTsKIAkJZWxzZQpAQCAtNDU3LDcgKzQ2Miw4IEBACiAJc3RydWN0IHhpcmNvbV9wcml2YXRlICp4cCA9IG5ldGRldl9wcml2KGRldik7CiAJaW50IHJldHZhbDsKIAllbnRlcigieGlyY29tX29wZW4iKTsKLQlwcmludGsoS0VSTl9JTkZPICJ4aXJjb20gY2FyZGJ1cyBhZGFwdG9yIGZvdW5kLCByZWdpc3RlcmluZyBhcyAlcywgdXNpbmcgaXJxICVpIFxuIixkZXYtPm5hbWUsZGV2LT5pcnEpOworCXByX2luZm8oInhpcmNvbSBjYXJkYnVzIGFkYXB0b3IgZm91bmQsIHJlZ2lzdGVyaW5nIGFzICVzLCB1c2luZyBpcnEgJWkgXG4iLAorCQlkZXYtPm5hbWUsIGRldi0+aXJxKTsKIAlyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgeGlyY29tX2ludGVycnVwdCwgSVJRRl9TSEFSRUQsIGRldi0+bmFtZSwgZGV2KTsKIAlpZiAocmV0dmFsKSB7CiAJCWxlYXZlKCJ4aXJjb21fb3BlbiAtIE5vIElSUSIpOwpAQCAtNzcwLDcgKzc3Niw3IEBACiAJCXVkZWxheSg1MCk7CiAJCWNvdW50ZXItLTsKIAkJaWYgKGNvdW50ZXIgPD0gMCkKLQkJCXByaW50ayhLRVJOX0VSUiAieGlyY29tX2NiOiBSZWNlaXZlciBmYWlsZWQgdG8gZGVhY3RpdmF0ZVxuIik7CisJCQlwcl9lcnIoIlJlY2VpdmVyIGZhaWxlZCB0byBkZWFjdGl2YXRlXG4iKTsKIAl9CiAKIAkvKiBlbmFibGUgdGhlIHJlY2VpdmVyICovCkBAIC03ODcsNyArNzkzLDcgQEAKIAkJdWRlbGF5KDUwKTsKIAkJY291bnRlci0tOwogCQlpZiAoY291bnRlciA8PSAwKQotCQkJcHJpbnRrKEtFUk5fRVJSICJ4aXJjb21fY2I6IFJlY2VpdmVyIGZhaWxlZCB0byByZS1hY3RpdmF0ZVxuIik7CisJCQlwcl9lcnIoIlJlY2VpdmVyIGZhaWxlZCB0byByZS1hY3RpdmF0ZVxuIik7CiAJfQogCiAJbGVhdmUoImFjdGl2YXRlX3JlY2VpdmVyIik7CkBAIC04MTgsNyArODI0LDcgQEAKIAkJdWRlbGF5KDUwKTsKIAkJY291bnRlci0tOwogCQlpZiAoY291bnRlciA8PSAwKQotCQkJcHJpbnRrKEtFUk5fRVJSICJ4aXJjb21fY2I6IFJlY2VpdmVyIGZhaWxlZCB0byBkZWFjdGl2YXRlXG4iKTsKKwkJCXByX2VycigiUmVjZWl2ZXIgZmFpbGVkIHRvIGRlYWN0aXZhdGVcbiIpOwogCX0KIAogCkBAIC04NjEsNyArODY3LDcgQEAKIAkJdWRlbGF5KDUwKTsKIAkJY291bnRlci0tOwogCQlpZiAoY291bnRlciA8PSAwKQotCQkJcHJpbnRrKEtFUk5fRVJSICJ4aXJjb21fY2I6IFRyYW5zbWl0dGVyIGZhaWxlZCB0byBkZWFjdGl2YXRlXG4iKTsKKwkJCXByX2VycigiVHJhbnNtaXR0ZXIgZmFpbGVkIHRvIGRlYWN0aXZhdGVcbiIpOwogCX0KIAogCS8qIGVuYWJsZSB0aGUgdHJhbnNtaXR0ZXIgKi8KQEAgLTg3OCw3ICs4ODQsNyBAQAogCQl1ZGVsYXkoNTApOwogCQljb3VudGVyLS07CiAJCWlmIChjb3VudGVyIDw9IDApCi0JCQlwcmludGsoS0VSTl9FUlIgInhpcmNvbV9jYjogVHJhbnNtaXR0ZXIgZmFpbGVkIHRvIHJlLWFjdGl2YXRlXG4iKTsKKwkJCXByX2VycigiVHJhbnNtaXR0ZXIgZmFpbGVkIHRvIHJlLWFjdGl2YXRlXG4iKTsKIAl9CiAKIAlsZWF2ZSgiYWN0aXZhdGVfdHJhbnNtaXR0ZXIiKTsKQEAgLTkwOSw3ICs5MTUsNyBAQAogCQl1ZGVsYXkoNTApOwogCQljb3VudGVyLS07CiAJCWlmIChjb3VudGVyIDw9IDApCi0JCQlwcmludGsoS0VSTl9FUlIgInhpcmNvbV9jYjogVHJhbnNtaXR0ZXIgZmFpbGVkIHRvIGRlYWN0aXZhdGVcbiIpOworCQkJcHJfZXJyKCJUcmFuc21pdHRlciBmYWlsZWQgdG8gZGVhY3RpdmF0ZVxuIik7CiAJfQogCiAKQEAgLTExODQsNyArMTE5MCw3IEBACiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCiAJCQlpZiAocGt0X2xlbiA+IDE1MTgpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgInhpcmNvbV9jYjogUGFja2V0IGxlbmd0aCAlaSBpcyBib2d1cyBcbiIscGt0X2xlbik7CisJCQkJcHJfZXJyKCJQYWNrZXQgbGVuZ3RoICVpIGlzIGJvZ3VzXG4iLCBwa3RfbGVuKTsKIAkJCQlwa3RfbGVuID0gMTUxODsKIAkJCX0KIApAQCAtMTIyMiw3ICsxMjI4LDcgQEAKIAkJc3RhdHVzID0gbGUzMl90b19jcHUoY2FyZC0+dHhfYnVmZmVyWzQqZGVzY25yXSk7CiAjaWYgMAogCQlpZiAoc3RhdHVzICYgMHg4MDAwKSB7CS8qIE1ham9yIGVycm9yICovCi0JCQlwcmludGsoS0VSTl9FUlIgIk1ham9yIHRyYW5zbWl0IGVycm9yIHN0YXR1cyAleCBcbiIsIHN0YXR1cyk7CisJCQlwcl9lcnIoIk1ham9yIHRyYW5zbWl0IGVycm9yIHN0YXR1cyAleFxuIiwgc3RhdHVzKTsKIAkJCWNhcmQtPnR4X2J1ZmZlcls0KmRlc2Nucl0gPSAwOwogCQkJbmV0aWZfd2FrZV9xdWV1ZSAoZGV2KTsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uYwppbmRleCAyODM0YTAxLi45NmMzOWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dW4uYworKysgYi9kcml2ZXJzL25ldC90dW4uYwpAQCAtNjEsNiArNjEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvbnNwcm94eS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KICNpbmNsdWRlIDxuZXQvcnRuZXRsaW5rLmg+CkBAIC0xNDQsNiArMTQ1LDcgQEAKIAllcnIgPSAwOwogCXRmaWxlLT50dW4gPSB0dW47CiAJdHVuLT50ZmlsZSA9IHRmaWxlOworCXR1bi0+c29ja2V0LmZpbGUgPSBmaWxlOwogCWRldl9ob2xkKHR1bi0+ZGV2KTsKIAlzb2NrX2hvbGQodHVuLT5zb2NrZXQuc2spOwogCWF0b21pY19pbmMoJnRmaWxlLT5jb3VudCk7CkBAIC0xNTgsNiArMTYwLDcgQEAKIAkvKiBEZXRhY2ggZnJvbSBuZXQgZGV2aWNlICovCiAJbmV0aWZfdHhfbG9ja19iaCh0dW4tPmRldik7CiAJdHVuLT50ZmlsZSA9IE5VTEw7CisJdHVuLT5zb2NrZXQuZmlsZSA9IE5VTEw7CiAJbmV0aWZfdHhfdW5sb2NrX2JoKHR1bi0+ZGV2KTsKIAogCS8qIERyb3AgcmVhZCBxdWV1ZSAqLwpAQCAtMzY0LDYgKzM2NywxMCBAQAogCWlmICghY2hlY2tfZmlsdGVyKCZ0dW4tPnR4Zmx0LCBza2IpKQogCQlnb3RvIGRyb3A7CiAKKwlpZiAodHVuLT5zb2NrZXQuc2stPnNrX2ZpbHRlciAmJgorCSAgICBza19maWx0ZXIodHVuLT5zb2NrZXQuc2ssIHNrYikpCisJCWdvdG8gZHJvcDsKKwogCWlmIChza2JfcXVldWVfbGVuKCZ0dW4tPnNvY2tldC5zay0+c2tfcmVjZWl2ZV9xdWV1ZSkgPj0gZGV2LT50eF9xdWV1ZV9sZW4pIHsKIAkJaWYgKCEodHVuLT5mbGFncyAmIFRVTl9PTkVfUVVFVUUpKSB7CiAJCQkvKiBOb3JtYWwgcXVldWVpbmcgbW9kZS4gKi8KQEAgLTM4Nyw3ICszOTQsOCBAQAogCS8qIE5vdGlmeSBhbmQgd2FrZSB1cCByZWFkZXIgcHJvY2VzcyAqLwogCWlmICh0dW4tPmZsYWdzICYgVFVOX0ZBU1lOQykKIAkJa2lsbF9mYXN5bmMoJnR1bi0+ZmFzeW5jLCBTSUdJTywgUE9MTF9JTik7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dW4tPnNvY2tldC53YWl0KTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGVfcG9sbCgmdHVuLT5zb2NrZXQud2FpdCwgUE9MTElOIHwKKwkJCQkgICBQT0xMUkROT1JNIHwgUE9MTFJEQkFORCk7CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIAogZHJvcDoKQEAgLTc0Myw3ICs3NTEsNyBAQAogCWxlbiA9IG1pbl90KGludCwgc2tiLT5sZW4sIGxlbik7CiAKIAlza2JfY29weV9kYXRhZ3JhbV9jb25zdF9pb3ZlYyhza2IsIDAsIGl2LCB0b3RhbCwgbGVuKTsKLQl0b3RhbCArPSBsZW47CisJdG90YWwgKz0gc2tiLT5sZW47CiAKIAl0dW4tPmRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCXR1bi0+ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBsZW47CkBAIC03NTEsMzQgKzc1OSwyMyBAQAogCXJldHVybiB0b3RhbDsKIH0KIAotc3RhdGljIHNzaXplX3QgdHVuX2Nocl9haW9fcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaXYsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHBvcykKK3N0YXRpYyBzc2l6ZV90IHR1bl9kb19yZWFkKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sCisJCQkgICBzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaXYsCisJCQkgICBzc2l6ZV90IGxlbiwgaW50IG5vYmxvY2spCiB7Ci0Jc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwotCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IF9fdHVuX2dldCh0ZmlsZSk7CiAJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzc2l6ZV90IGxlbiwgcmV0ID0gMDsKLQotCWlmICghdHVuKQotCQlyZXR1cm4gLUVCQURGRDsKKwlzc2l6ZV90IHJldCA9IDA7CiAKIAlEQkcoS0VSTl9JTkZPICIlczogdHVuX2Nocl9yZWFkXG4iLCB0dW4tPmRldi0+bmFtZSk7CiAKLQlsZW4gPSBpb3ZfbGVuZ3RoKGl2LCBjb3VudCk7Ci0JaWYgKGxlbiA8IDApIHsKLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCiAJYWRkX3dhaXRfcXVldWUoJnR1bi0+c29ja2V0LndhaXQsICZ3YWl0KTsKIAl3aGlsZSAobGVuKSB7CiAJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwogCiAJCS8qIFJlYWQgZnJhbWVzIGZyb20gdGhlIHF1ZXVlICovCiAJCWlmICghKHNrYj1za2JfZGVxdWV1ZSgmdHVuLT5zb2NrZXQuc2stPnNrX3JlY2VpdmVfcXVldWUpKSkgewotCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQlpZiAobm9ibG9jaykgewogCQkJCXJldCA9IC1FQUdBSU47CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC04MDUsNiArODAyLDI3IEBACiAJY3VycmVudC0+c3RhdGUgPSBUQVNLX1JVTk5JTkc7CiAJcmVtb3ZlX3dhaXRfcXVldWUoJnR1bi0+c29ja2V0LndhaXQsICZ3YWl0KTsKIAorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHR1bl9jaHJfYWlvX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKml2LAorCQkJICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCBwb3MpCit7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOworCXN0cnVjdCB0dW5fZmlsZSAqdGZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IF9fdHVuX2dldCh0ZmlsZSk7CisJc3NpemVfdCBsZW4sIHJldDsKKworCWlmICghdHVuKQorCQlyZXR1cm4gLUVCQURGRDsKKwlsZW4gPSBpb3ZfbGVuZ3RoKGl2LCBjb3VudCk7CisJaWYgKGxlbiA8IDApIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gdHVuX2RvX3JlYWQodHVuLCBpb2NiLCBpdiwgbGVuLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7CisJcmV0ID0gbWluX3Qoc3NpemVfdCwgcmV0LCBsZW4pOwogb3V0OgogCXR1bl9wdXQodHVuKTsKIAlyZXR1cm4gcmV0OwpAQCAtODQ3LDcgKzg2NSw4IEBACiAJCXJldHVybjsKIAogCWlmIChzay0+c2tfc2xlZXAgJiYgd2FpdHF1ZXVlX2FjdGl2ZShzay0+c2tfc2xlZXApKQotCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luYyhzay0+c2tfc2xlZXApOworCQl3YWtlX3VwX2ludGVycnVwdGlibGVfc3luY19wb2xsKHNrLT5za19zbGVlcCwgUE9MTE9VVCB8CisJCQkJCQlQT0xMV1JOT1JNIHwgUE9MTFdSQkFORCk7CiAKIAl0dW4gPSB0dW5fc2soc2spLT50dW47CiAJa2lsbF9mYXN5bmMoJnR1bi0+ZmFzeW5jLCBTSUdJTywgUE9MTF9PVVQpOwpAQCAtODU4LDYgKzg3NywzNyBAQAogCWZyZWVfbmV0ZGV2KHR1bl9zayhzayktPnR1bi0+ZGV2KTsKIH0KIAorc3RhdGljIGludCB0dW5fc2VuZG1zZyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCisJCSAgICAgICBzdHJ1Y3QgbXNnaGRyICptLCBzaXplX3QgdG90YWxfbGVuKQoreworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBjb250YWluZXJfb2Yoc29jaywgc3RydWN0IHR1bl9zdHJ1Y3QsIHNvY2tldCk7CisJcmV0dXJuIHR1bl9nZXRfdXNlcih0dW4sIG0tPm1zZ19pb3YsIHRvdGFsX2xlbiwKKwkJCSAgICBtLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQpOworfQorCitzdGF0aWMgaW50IHR1bl9yZWN2bXNnKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IHNvY2tldCAqc29jaywKKwkJICAgICAgIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4sCisJCSAgICAgICBpbnQgZmxhZ3MpCit7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1biA9IGNvbnRhaW5lcl9vZihzb2NrLCBzdHJ1Y3QgdHVuX3N0cnVjdCwgc29ja2V0KTsKKwlpbnQgcmV0OworCWlmIChmbGFncyAmIH4oTVNHX0RPTlRXQUlUfE1TR19UUlVOQykpCisJCXJldHVybiAtRUlOVkFMOworCXJldCA9IHR1bl9kb19yZWFkKHR1biwgaW9jYiwgbS0+bXNnX2lvdiwgdG90YWxfbGVuLAorCQkJICBmbGFncyAmIE1TR19ET05UV0FJVCk7CisJaWYgKHJldCA+IHRvdGFsX2xlbikgeworCQltLT5tc2dfZmxhZ3MgfD0gTVNHX1RSVU5DOworCQlyZXQgPSBmbGFncyAmIE1TR19UUlVOQyA/IHJldCA6IHRvdGFsX2xlbjsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyogT3BzIHN0cnVjdHVyZSB0byBtaW1pYyByYXcgc29ja2V0cyB3aXRoIHR1biAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBwcm90b19vcHMgdHVuX3NvY2tldF9vcHMgPSB7CisJLnNlbmRtc2cgPSB0dW5fc2VuZG1zZywKKwkucmVjdm1zZyA9IHR1bl9yZWN2bXNnLAorfTsKKwogc3RhdGljIHN0cnVjdCBwcm90byB0dW5fcHJvdG8gPSB7CiAJLm5hbWUJCT0gInR1biIsCiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLApAQCAtOTg2LDYgKzEwMzYsNyBAQAogCQkJZ290byBlcnJfZnJlZV9kZXY7CiAKIAkJaW5pdF93YWl0cXVldWVfaGVhZCgmdHVuLT5zb2NrZXQud2FpdCk7CisJCXR1bi0+c29ja2V0Lm9wcyA9ICZ0dW5fc29ja2V0X29wczsKIAkJc29ja19pbml0X2RhdGEoJnR1bi0+c29ja2V0LCBzayk7CiAJCXNrLT5za193cml0ZV9zcGFjZSA9IHR1bl9zb2NrX3dyaXRlX3NwYWNlOwogCQlzay0+c2tfc25kYnVmID0gSU5UX01BWDsKQEAgLTExMTYsNiArMTE2Nyw3IEBACiAJc3RydWN0IHR1bl9maWxlICp0ZmlsZSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuOwogCXZvaWQgX191c2VyKiBhcmdwID0gKHZvaWQgX191c2VyKilhcmc7CisJc3RydWN0IHNvY2tfZnByb2cgZnByb2c7CiAJc3RydWN0IGlmcmVxIGlmcjsKIAlpbnQgc25kYnVmOwogCWludCByZXQ7CkBAIC0xMjYzLDYgKzEzMTUsMjYgQEAKIAkJdHVuLT5zb2NrZXQuc2stPnNrX3NuZGJ1ZiA9IHNuZGJ1ZjsKIAkJYnJlYWs7CiAKKwljYXNlIFRVTkFUVEFDSEZJTFRFUjoKKwkJLyogQ2FuIGJlIHNldCBvbmx5IGZvciBUQVBzICovCisJCXJldCA9IC1FSU5WQUw7CisJCWlmICgodHVuLT5mbGFncyAmIFRVTl9UWVBFX01BU0spICE9IFRVTl9UQVBfREVWKQorCQkJYnJlYWs7CisJCXJldCA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmZnByb2csIGFyZ3AsIHNpemVvZihmcHJvZykpKQorCQkJYnJlYWs7CisKKwkJcmV0ID0gc2tfYXR0YWNoX2ZpbHRlcigmZnByb2csIHR1bi0+c29ja2V0LnNrKTsKKwkJYnJlYWs7CisKKwljYXNlIFRVTkRFVEFDSEZJTFRFUjoKKwkJLyogQ2FuIGJlIHNldCBvbmx5IGZvciBUQVBzICovCisJCXJldCA9IC1FSU5WQUw7CisJCWlmICgodHVuLT5mbGFncyAmIFRVTl9UWVBFX01BU0spICE9IFRVTl9UQVBfREVWKQorCQkJYnJlYWs7CisJCXJldCA9IHNrX2RldGFjaF9maWx0ZXIodHVuLT5zb2NrZXQuc2spOworCQlicmVhazsKKwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CiAJCWJyZWFrOwpAQCAtMTM2NSw3ICsxNDM3LDcgQEAKIAogCQlfX3R1bl9kZXRhY2godHVuKTsKIAotCQkvKiBJZiBkZXNpcmVhYmxlLCB1bnJlZ2lzdGVyIHRoZSBuZXRkZXZpY2UuICovCisJCS8qIElmIGRlc2lyYWJsZSwgdW5yZWdpc3RlciB0aGUgbmV0ZGV2aWNlLiAqLwogCQlpZiAoISh0dW4tPmZsYWdzICYgVFVOX1BFUlNJU1QpKSB7CiAJCQlydG5sX2xvY2soKTsKIAkJCWlmIChkZXYtPnJlZ19zdGF0ZSA9PSBORVRSRUdfUkVHSVNURVJFRCkKQEAgLTE1MjUsNiArMTU5NywyMyBAQAogCXJ0bmxfbGlua191bnJlZ2lzdGVyKCZ0dW5fbGlua19vcHMpOwogfQogCisvKiBHZXQgYW4gdW5kZXJseWluZyBzb2NrZXQgb2JqZWN0IGZyb20gdHVuIGZpbGUuICBSZXR1cm5zIGVycm9yIHVubGVzcyBmaWxlIGlzCisgKiBhdHRhY2hlZCB0byBhIGRldmljZS4gIFRoZSByZXR1cm5lZCBvYmplY3Qgd29ya3MgbGlrZSBhIHBhY2tldCBzb2NrZXQsIGl0CisgKiBjYW4gYmUgdXNlZCBmb3Igc29ja19zZW5kbXNnL3NvY2tfcmVjdm1zZy4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yCisgKiBob2xkaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBmaWxlIGZvciBhcyBsb25nIGFzIHRoZSBzb2NrZXQgaXMgaW4gdXNlLiAqLworc3RydWN0IHNvY2tldCAqdHVuX2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IHR1bl9zdHJ1Y3QgKnR1bjsKKwlpZiAoZmlsZS0+Zl9vcCAhPSAmdHVuX2ZvcHMpCisJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOworCXR1biA9IHR1bl9nZXQoZmlsZSk7CisJaWYgKCF0dW4pCisJCXJldHVybiBFUlJfUFRSKC1FQkFERkQpOworCXR1bl9wdXQodHVuKTsKKwlyZXR1cm4gJnR1bi0+c29ja2V0OworfQorRVhQT1JUX1NZTUJPTF9HUEwodHVuX2dldF9zb2NrZXQpOworCiBtb2R1bGVfaW5pdCh0dW5faW5pdCk7CiBtb2R1bGVfZXhpdCh0dW5fY2xlYW51cCk7CiBNT0RVTEVfREVTQ1JJUFRJT04oRFJWX0RFU0NSSVBUSU9OKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwppbmRleCAzOWYxZmM2Li4yZmJmMTUyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdHlwaG9vbi5jCisrKyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwpAQCAtOTgsMTQgKzk4LDEwIEBACiAjZGVmaW5lIFRYX1RJTUVPVVQgICgyKkhaKQogCiAjZGVmaW5lIFBLVF9CVUZfU1oJCTE1MzYKLQotI2RlZmluZSBEUlZfTU9EVUxFX05BTUUJCSJ0eXBob29uIgotI2RlZmluZSBEUlZfTU9EVUxFX1ZFUlNJT04gCSIxLjUuOSIKLSNkZWZpbmUgRFJWX01PRFVMRV9SRUxEQVRFCSJNYXIgMiwgMjAwOSIKLSNkZWZpbmUgUEZYCQkJRFJWX01PRFVMRV9OQU1FICI6ICIKLSNkZWZpbmUgRVJSX1BGWAkJCUtFUk5fRVJSIFBGWAogI2RlZmluZSBGSVJNV0FSRV9OQU1FCQkiM2NvbS90eXBob29uLmJpbiIKIAorI2RlZmluZSBwcl9mbXQoZm10KQkJS0JVSUxEX01PRE5BTUUgIiAiIGZtdAorCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KQEAgLTEzMiwxNCArMTI4LDEyIEBACiAjaW5jbHVkZSA8bGludXgvaW42Lmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgorI2luY2x1ZGUgPGdlbmVyYXRlZC91dHNyZWxlYXNlLmg+CiAKICNpbmNsdWRlICJ0eXBob29uLmgiCiAKLXN0YXRpYyBjaGFyIHZlcnNpb25bXSBfX2RldmluaXRkYXRhID0KLSAgICAidHlwaG9vbi5jOiB2ZXJzaW9uICIgRFJWX01PRFVMRV9WRVJTSU9OICIgKCIgRFJWX01PRFVMRV9SRUxEQVRFICIpXG4iOwotCiBNT0RVTEVfQVVUSE9SKCJEYXZpZCBEaWxsb3cgPGRhdmVAdGhlZGlsbG93cy5vcmc+Iik7Ci1NT0RVTEVfVkVSU0lPTihEUlZfTU9EVUxFX1ZFUlNJT04pOworTU9EVUxFX1ZFUlNJT04oVVRTX1JFTEVBU0UpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0ZJUk1XQVJFKEZJUk1XQVJFX05BTUUpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCIzQ29tIFR5cGhvb24gRmFtaWx5ICgzQzk5MCwgM0NSOTkwLCBhbmQgdmFyaWFudHMpIik7CkBAIC0xNjEsOCArMTU1LDggQEAKICNlbmRpZgogCiBzdHJ1Y3QgdHlwaG9vbl9jYXJkX2luZm8gewotCWNoYXIgKm5hbWU7Ci0JaW50IGNhcGFiaWxpdGllczsKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IGludCBjYXBhYmlsaXRpZXM7CiB9OwogCiAjZGVmaW5lIFRZUEhPT05fQ1JZUFRPX05PTkUJCTB4MDAKQEAgLTIxNSw3ICsyMDksNyBAQAogICogYml0IDggaW5kaWNhdGVzIGlmIHRoaXMgaXMgYSAoMCkgY29wcGVyIG9yICgxKSBmaWJlciBjYXJkCiAgKiBiaXRzIDEyLTE2IGluZGljYXRlIGNhcmQgdHlwZTogKDApIGNsaWVudCBhbmQgKDEpIHNlcnZlcgogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdHlwaG9vbl9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodHlwaG9vbl9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfM0NPTSwgUENJX0RFVklDRV9JRF8zQ09NXzNDUjk5MCwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsVFlQSE9PTl9UWCB9LAogCXsgUENJX1ZFTkRPUl9JRF8zQ09NLCBQQ0lfREVWSUNFX0lEXzNDT01fM0NSOTkwX1RYXzk1LApAQCAtMjk5LDcgKzI5Myw2IEBACiAJc3RydWN0IGJhc2ljX3JpbmcJcmVzcFJpbmc7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJc3RhdHM7CiAJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMJc3RhdHNfc2F2ZWQ7Ci0JY29uc3QgY2hhciAqCQluYW1lOwogCXN0cnVjdCB0eXBob29uX3NoYXJlZCAqCXNoYXJlZDsKIAlkbWFfYWRkcl90CQlzaGFyZWRfZG1hOwogCV9fbGUxNgkJCXhjdnJfc2VsZWN0OwpAQCAtNTM0LDEzICs1MjcsMTMgQEAKIAkJfSBlbHNlIGlmKHJlc3AtPmNtZCA9PSBUWVBIT09OX0NNRF9IRUxMT19SRVNQKSB7CiAJCQl0eXBob29uX2hlbGxvKHRwKTsKIAkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGR1bXBpbmcgdW5leHBlY3RlZCByZXNwb25zZSAiCi0JCQkgICAgICAgIjB4JTA0eDolZDoweCUwMng6MHglMDR4OiUwOHg6JTA4eFxuIiwKLQkJCSAgICAgICB0cC0+bmFtZSwgbGUxNl90b19jcHUocmVzcC0+Y21kKSwKLQkJCSAgICAgICByZXNwLT5udW1EZXNjLCByZXNwLT5mbGFncywKLQkJCSAgICAgICBsZTE2X3RvX2NwdShyZXNwLT5wYXJtMSksCi0JCQkgICAgICAgbGUzMl90b19jcHUocmVzcC0+cGFybTIpLAotCQkJICAgICAgIGxlMzJfdG9fY3B1KHJlc3AtPnBhcm0zKSk7CisJCQluZXRkZXZfZXJyKHRwLT5kZXYsCisJCQkJICAgImR1bXBpbmcgdW5leHBlY3RlZCByZXNwb25zZSAweCUwNHg6JWQ6MHglMDJ4OjB4JTA0eDolMDh4OiUwOHhcbiIsCisJCQkJICAgbGUxNl90b19jcHUocmVzcC0+Y21kKSwKKwkJCQkgICByZXNwLT5udW1EZXNjLCByZXNwLT5mbGFncywKKwkJCQkgICBsZTE2X3RvX2NwdShyZXNwLT5wYXJtMSksCisJCQkJICAgbGUzMl90b19jcHUocmVzcC0+cGFybTIpLAorCQkJCSAgIGxlMzJfdG9fY3B1KHJlc3AtPnBhcm0zKSk7CiAJCX0KIAogY2xlYW51cDoKQEAgLTYwNiw5ICs1OTksOCBAQAogCWZyZWVSZXNwID0gdHlwaG9vbl9udW1fZnJlZV9yZXNwKHRwKTsKIAogCWlmKGZyZWVDbWQgPCBudW1fY21kIHx8IGZyZWVSZXNwIDwgbnVtX3Jlc3ApIHsKLQkJcHJpbnRrKCIlczogbm8gZGVzY3MgZm9yIGNtZCwgaGFkIChuZWVkZWQpICVkICglZCkgY21kLCAiCi0JCQkiJWQgKCVkKSByZXNwXG4iLCB0cC0+bmFtZSwgZnJlZUNtZCwgbnVtX2NtZCwKLQkJCWZyZWVSZXNwLCBudW1fcmVzcCk7CisJCW5ldGRldl9lcnIodHAtPmRldiwgIm5vIGRlc2NzIGZvciBjbWQsIGhhZCAobmVlZGVkKSAlZCAoJWQpIGNtZCwgJWQgKCVkKSByZXNwXG4iLAorCQkJICAgZnJlZUNtZCwgbnVtX2NtZCwgZnJlZVJlc3AsIG51bV9yZXNwKTsKIAkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtNzMzLDcgKzcyNSw3IEBACiAJCXNwaW5fdW5sb2NrX2JoKCZ0cC0+c3RhdGVfbG9jayk7CiAJCWVyciA9IHR5cGhvb25faXNzdWVfY29tbWFuZCh0cCwgMSwgJnhwX2NtZCwgMCwgTlVMTCk7CiAJCWlmKGVyciA8IDApCi0JCQlwcmludGsoIiVzOiB2bGFuIG9mZmxvYWQgZXJyb3IgJWRcbiIsIHRwLT5uYW1lLCAtZXJyKTsKKwkJCW5ldGRldl9lcnIodHAtPmRldiwgInZsYW4gb2ZmbG9hZCBlcnJvciAlZFxuIiwgLWVycik7CiAJCXNwaW5fbG9ja19iaCgmdHAtPnN0YXRlX2xvY2spOwogCX0KIApAQCAtOTI0LDE3ICs5MTYsMTUgQEAKIAlmaWx0ZXIgPSBUWVBIT09OX1JYX0ZJTFRFUl9ESVJFQ1RFRCB8IFRZUEhPT05fUlhfRklMVEVSX0JST0FEQ0FTVDsKIAlpZihkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJZmlsdGVyIHw9IFRZUEhPT05fUlhfRklMVEVSX1BST01JU0NPVVM7Ci0JfSBlbHNlIGlmKChkZXYtPm1jX2NvdW50ID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKKwl9IGVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpIHx8CiAJCSAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCS8qIFRvbyBtYW55IHRvIG1hdGNoLCBvciBhY2NlcHQgYWxsIG11bHRpY2FzdHMuICovCiAJCWZpbHRlciB8PSBUWVBIT09OX1JYX0ZJTFRFUl9BTExfTUNBU1Q7Ci0JfSBlbHNlIGlmKGRldi0+bWNfY291bnQpIHsKKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKLQkJaW50IGk7CiAKIAkJbWVtc2V0KG1jX2ZpbHRlciwgMCwgc2l6ZW9mKG1jX2ZpbHRlcikpOwotCQlmb3IoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OwotCQkgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCWludCBiaXQgPSBldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpICYgMHgzZjsKIAkJCW1jX2ZpbHRlcltiaXQgPj4gNV0gfD0gMSA8PCAoYml0ICYgMHgxZik7CiAJCX0KQEAgLTEwMjAsNyArMTAxMCw3IEBACiAJCXJldHVybiBzYXZlZDsKIAogCWlmKHR5cGhvb25fZG9fZ2V0X3N0YXRzKHRwKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgZ2V0dGluZyBzdGF0c1xuIiwgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJlcnJvciBnZXR0aW5nIHN0YXRzXG4iKTsKIAkJcmV0dXJuIHNhdmVkOwogCX0KIApAQCAtMTA2Miw4ICsxMDUyLDggQEAKIAkJfQogCX0KIAotCXN0cmNweShpbmZvLT5kcml2ZXIsIERSVl9NT0RVTEVfTkFNRSk7Ci0Jc3RyY3B5KGluZm8tPnZlcnNpb24sIERSVl9NT0RVTEVfVkVSU0lPTik7CisJc3RyY3B5KGluZm8tPmRyaXZlciwgS0JVSUxEX01PRE5BTUUpOworCXN0cmNweShpbmZvLT52ZXJzaW9uLCBVVFNfUkVMRUFTRSk7CiAJc3RyY3B5KGluZm8tPmJ1c19pbmZvLCBwY2lfbmFtZShwY2lfZGV2KSk7CiB9CiAKQEAgLTEzNjUsOCArMTM1NSw4IEBACiAKIAllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZ0eXBob29uX2Z3LCBGSVJNV0FSRV9OQU1FLCAmdHAtPnBkZXYtPmRldik7CiAJaWYgKGVycikgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBcIiVzXCJcbiIsCi0JCQkJdHAtPm5hbWUsIEZJUk1XQVJFX05BTUUpOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJGYWlsZWQgdG8gbG9hZCBmaXJtd2FyZSBcIiVzXCJcbiIsCisJCQkgICBGSVJNV0FSRV9OQU1FKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAKQEAgLTE0MDEsNyArMTM5MSw3IEBACiAJcmV0dXJuIDA7CiAKIGludmFsaWRfZnc6Ci0JcHJpbnRrKEtFUk5fRVJSICIlczogSW52YWxpZCBmaXJtd2FyZSBpbWFnZVxuIiwgdHAtPm5hbWUpOworCW5ldGRldl9lcnIodHAtPmRldiwgIkludmFsaWQgZmlybXdhcmUgaW1hZ2VcbiIpOwogCXJlbGVhc2VfZmlybXdhcmUodHlwaG9vbl9mdyk7CiAJdHlwaG9vbl9mdyA9IE5VTEw7CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNDM4LDcgKzE0MjgsNyBAQAogCWVyciA9IC1FTk9NRU07CiAJZHBhZ2UgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBQQUdFX1NJWkUsICZkcGFnZV9kbWEpOwogCWlmKCFkcGFnZSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBETUEgbWVtIGZvciBmaXJtd2FyZVxuIiwgdHAtPm5hbWUpOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJubyBETUEgbWVtIGZvciBmaXJtd2FyZVxuIik7CiAJCWdvdG8gZXJyX291dDsKIAl9CiAKQEAgLTE0NTEsNyArMTQ0MSw3IEBACiAKIAllcnIgPSAtRVRJTUVET1VUOwogCWlmKHR5cGhvb25fd2FpdF9zdGF0dXMoaW9hZGRyLCBUWVBIT09OX1NUQVRVU19XQUlUSU5HX0ZPUl9IT1NUKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FyZCByZWFkeSB0aW1lb3V0XG4iLCB0cC0+bmFtZSk7CisJCW5ldGRldl9lcnIodHAtPmRldiwgImNhcmQgcmVhZHkgdGltZW91dFxuIik7CiAJCWdvdG8gZXJyX291dF9pcnE7CiAJfQogCkBAIC0xNDkxLDggKzE0ODEsNyBAQAogCQkJaWYodHlwaG9vbl93YWl0X2ludGVycnVwdChpb2FkZHIpIDwgMCB8fAogCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgVFlQSE9PTl9SRUdfU1RBVFVTKSAhPQogCQkJICAgVFlQSE9PTl9TVEFUVVNfV0FJVElOR19GT1JfU0VHTUVOVCkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNlZ21lbnQgcmVhZHkgdGltZW91dFxuIiwKLQkJCQkgICAgICAgdHAtPm5hbWUpOworCQkJCW5ldGRldl9lcnIodHAtPmRldiwgInNlZ21lbnQgcmVhZHkgdGltZW91dFxuIik7CiAJCQkJZ290byBlcnJfb3V0X2lycTsKIAkJCX0KIApAQCAtMTUwMiw4ICsxNDkxLDggQEAKIAkJCSAqIHRoZSBjaGVja3N1bSwgd2UgY2FuIGRvIHRoaXMgb25jZSwgYXQgdGhlIGVuZC4KIAkJCSAqLwogCQkJY3N1bSA9IGNzdW1fZm9sZChjc3VtX3BhcnRpYWxfY29weV9ub2NoZWNrKGltYWdlX2RhdGEsCi0JCQkJCQkJCSAgZHBhZ2UsIGxlbiwKLQkJCQkJCQkJICAwKSk7CisJCQkJCQkJCSAgIGRwYWdlLCBsZW4sCisJCQkJCQkJCSAgIDApKTsKIAogCQkJaW93cml0ZTMyKGxlbiwgaW9hZGRyICsgVFlQSE9PTl9SRUdfQk9PVF9MRU5HVEgpOwogCQkJaW93cml0ZTMyKGxlMTZfdG9fY3B1KChfX2ZvcmNlIF9fbGUxNiljc3VtKSwKQEAgLTE1MTQsNyArMTUwMyw3IEBACiAJCQlpb3dyaXRlMzIoZHBhZ2VfZG1hLCBpb2FkZHIgKyBUWVBIT09OX1JFR19CT09UX0RBVEFfTE8pOwogCQkJdHlwaG9vbl9wb3N0X3BjaV93cml0ZXMoaW9hZGRyKTsKIAkJCWlvd3JpdGUzMihUWVBIT09OX0JPT1RDTURfU0VHX0FWQUlMQUJMRSwKLQkJCSAgICAgICBpb2FkZHIgKyBUWVBIT09OX1JFR19DT01NQU5EKTsKKwkJCQkJaW9hZGRyICsgVFlQSE9PTl9SRUdfQ09NTUFORCk7CiAKIAkJCWltYWdlX2RhdGEgKz0gbGVuOwogCQkJbG9hZF9hZGRyICs9IGxlbjsKQEAgLTE1MjUsMTUgKzE1MTQsMTUgQEAKIAlpZih0eXBob29uX3dhaXRfaW50ZXJydXB0KGlvYWRkcikgPCAwIHx8CiAJICAgaW9yZWFkMzIoaW9hZGRyICsgVFlQSE9PTl9SRUdfU1RBVFVTKSAhPQogCSAgIFRZUEhPT05fU1RBVFVTX1dBSVRJTkdfRk9SX1NFR01FTlQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogZmluYWwgc2VnbWVudCByZWFkeSB0aW1lb3V0XG4iLCB0cC0+bmFtZSk7CisJCW5ldGRldl9lcnIodHAtPmRldiwgImZpbmFsIHNlZ21lbnQgcmVhZHkgdGltZW91dFxuIik7CiAJCWdvdG8gZXJyX291dF9pcnE7CiAJfQogCiAJaW93cml0ZTMyKFRZUEhPT05fQk9PVENNRF9ETkxEX0NPTVBMRVRFLCBpb2FkZHIgKyBUWVBIT09OX1JFR19DT01NQU5EKTsKIAogCWlmKHR5cGhvb25fd2FpdF9zdGF0dXMoaW9hZGRyLCBUWVBIT09OX1NUQVRVU19XQUlUSU5HX0ZPUl9CT09UKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogYm9vdCByZWFkeSB0aW1lb3V0LCBzdGF0dXMgMHglMHhcbiIsCi0JCSAgICAgICB0cC0+bmFtZSwgaW9yZWFkMzIoaW9hZGRyICsgVFlQSE9PTl9SRUdfU1RBVFVTKSk7CisJCW5ldGRldl9lcnIodHAtPmRldiwgImJvb3QgcmVhZHkgdGltZW91dCwgc3RhdHVzIDB4JTB4XG4iLAorCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgVFlQSE9PTl9SRUdfU1RBVFVTKSk7CiAJCWdvdG8gZXJyX291dF9pcnE7CiAJfQogCkBAIC0xNTU1LDcgKzE1NDQsNyBAQAogCXZvaWQgX19pb21lbSAqaW9hZGRyID0gdHAtPmlvYWRkcjsKIAogCWlmKHR5cGhvb25fd2FpdF9zdGF0dXMoaW9hZGRyLCBpbml0aWFsX3N0YXR1cykgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGJvb3QgcmVhZHkgdGltZW91dFxuIiwgdHAtPm5hbWUpOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJib290IHJlYWR5IHRpbWVvdXRcbiIpOwogCQlnb3RvIG91dF90aW1lb3V0OwogCX0KIApAQCAtMTU2Niw4ICsxNTU1LDggQEAKIAkJCQlpb2FkZHIgKyBUWVBIT09OX1JFR19DT01NQU5EKTsKIAogCWlmKHR5cGhvb25fd2FpdF9zdGF0dXMoaW9hZGRyLCBUWVBIT09OX1NUQVRVU19SVU5OSU5HKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogYm9vdCBmaW5pc2ggdGltZW91dCAoc3RhdHVzIDB4JXgpXG4iLAotCQkgICAgICAgdHAtPm5hbWUsIGlvcmVhZDMyKGlvYWRkciArIFRZUEhPT05fUkVHX1NUQVRVUykpOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJib290IGZpbmlzaCB0aW1lb3V0IChzdGF0dXMgMHgleClcbiIsCisJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBUWVBIT09OX1JFR19TVEFUVVMpKTsKIAkJZ290byBvdXRfdGltZW91dDsKIAl9CiAKQEAgLTE4NjYsOCArMTg1NSw3IEBACiAJCXR5cGhvb25fcG9zdF9wY2lfd3JpdGVzKGlvYWRkcik7CiAJCV9fbmFwaV9zY2hlZHVsZSgmdHAtPm5hcGkpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yLCBwb2xsIGFscmVhZHkgc2NoZWR1bGVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgIkVycm9yLCBwb2xsIGFscmVhZHkgc2NoZWR1bGVkXG4iKTsKIAl9CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTkwMCwxNiArMTg4OCwxNSBAQAogCXhwX2NtZC5wYXJtMSA9IGV2ZW50czsKIAllcnIgPSB0eXBob29uX2lzc3VlX2NvbW1hbmQodHAsIDEsICZ4cF9jbWQsIDAsIE5VTEwpOwogCWlmKGVyciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdHlwaG9vbl9zbGVlcCgpOiB3YWtlIGV2ZW50cyBjbWQgZXJyICVkXG4iLAotCQkJCXRwLT5uYW1lLCBlcnIpOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJ0eXBob29uX3NsZWVwKCk6IHdha2UgZXZlbnRzIGNtZCBlcnIgJWRcbiIsCisJCQkgICBlcnIpOwogCQlyZXR1cm4gZXJyOwogCX0KIAogCUlOSVRfQ09NTUFORF9OT19SRVNQT05TRSgmeHBfY21kLCBUWVBIT09OX0NNRF9HT1RPX1NMRUVQKTsKIAllcnIgPSB0eXBob29uX2lzc3VlX2NvbW1hbmQodHAsIDEsICZ4cF9jbWQsIDAsIE5VTEwpOwogCWlmKGVyciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdHlwaG9vbl9zbGVlcCgpOiBzbGVlcCBjbWQgZXJyICVkXG4iLAotCQkJCXRwLT5uYW1lLCBlcnIpOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJ0eXBob29uX3NsZWVwKCk6IHNsZWVwIGNtZCBlcnIgJWRcbiIsIGVycik7CiAJCXJldHVybiBlcnI7CiAJfQogCkBAIC0xOTYwLDEyICsxOTQ3LDEyIEBACiAKIAllcnIgPSB0eXBob29uX2Rvd25sb2FkX2Zpcm13YXJlKHRwKTsKIAlpZihlcnIgPCAwKSB7Ci0JCXByaW50aygiJXM6IGNhbm5vdCBsb2FkIHJ1bnRpbWUgb24gM1hQXG4iLCB0cC0+bmFtZSk7CisJCW5ldGRldl9lcnIodHAtPmRldiwgImNhbm5vdCBsb2FkIHJ1bnRpbWUgb24gM1hQXG4iKTsKIAkJZ290byBlcnJvcl9vdXQ7CiAJfQogCiAJaWYodHlwaG9vbl9ib290XzNYUCh0cCwgVFlQSE9PTl9TVEFUVVNfV0FJVElOR19GT1JfQk9PVCkgPCAwKSB7Ci0JCXByaW50aygiJXM6IGNhbm5vdCBib290IDNYUFxuIiwgdHAtPm5hbWUpOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJjYW5ub3QgYm9vdCAzWFBcbiIpOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGVycm9yX291dDsKIAl9CkBAIC0yMDY5LDkgKzIwNTYsNyBAQAogCX0KIAogCWlmKGkgPT0gVFlQSE9PTl9XQUlUX1RJTUVPVVQpCi0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIiVzOiBoYWx0IHRpbWVkIG91dCB3YWl0aW5nIGZvciBUeCB0byBjb21wbGV0ZVxuIiwKLQkJICAgICAgIHRwLT5uYW1lKTsKKwkJbmV0ZGV2X2Vycih0cC0+ZGV2LCAiaGFsdCB0aW1lZCBvdXQgd2FpdGluZyBmb3IgVHggdG8gY29tcGxldGVcbiIpOwogCiAJSU5JVF9DT01NQU5EX05PX1JFU1BPTlNFKCZ4cF9jbWQsIFRZUEhPT05fQ01EX1RYX0RJU0FCTEUpOwogCXR5cGhvb25faXNzdWVfY29tbWFuZCh0cCwgMSwgJnhwX2NtZCwgMCwgTlVMTCk7CkBAIC0yMDg4LDExICsyMDczLDEwIEBACiAJdHlwaG9vbl9pc3N1ZV9jb21tYW5kKHRwLCAxLCAmeHBfY21kLCAwLCBOVUxMKTsKIAogCWlmKHR5cGhvb25fd2FpdF9zdGF0dXMoaW9hZGRyLCBUWVBIT09OX1NUQVRVU19IQUxURUQpIDwgMCkKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdGltZWQgb3V0IHdhaXRpbmcgZm9yIDNYUCB0byBoYWx0XG4iLAotCQkgICAgICAgdHAtPm5hbWUpOworCQluZXRkZXZfZXJyKHRwLT5kZXYsICJ0aW1lZCBvdXQgd2FpdGluZyBmb3IgM1hQIHRvIGhhbHRcbiIpOwogCiAJaWYodHlwaG9vbl9yZXNldChpb2FkZHIsIHdhaXRfdHlwZSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byByZXNldCAzWFBcbiIsIHRwLT5uYW1lKTsKKwkJbmV0ZGV2X2Vycih0cC0+ZGV2LCAidW5hYmxlIHRvIHJlc2V0IDNYUFxuIik7CiAJCXJldHVybiAtRVRJTUVET1VUOwogCX0KIApAQCAtMjExMSw5ICsyMDk1LDggQEAKIAlzdHJ1Y3QgdHlwaG9vbiAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYodHlwaG9vbl9yZXNldCh0cC0+aW9hZGRyLCBXYWl0Tm9TbGVlcCkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjb3VsZCBub3QgcmVzZXQgaW4gdHggdGltZW91dFxuIiwKLQkJCQkJZGV2LT5uYW1lKTsKLQkJZ290byB0cnVlbHlfZGVhZDsKKwkJbmV0ZGV2X3dhcm4oZGV2LCAiY291bGQgbm90IHJlc2V0IGluIHR4IHRpbWVvdXRcbiIpOworCQlnb3RvIHRydWx5X2RlYWQ7CiAJfQogCiAJLyogSWYgd2UgZXZlciBzdGFydCB1c2luZyB0aGUgSGkgcmluZywgaXQgd2lsbCBuZWVkIGNsZWFuaW5nIHRvbyAqLwpAQCAtMjEyMSwxNSArMjEwNCwxNCBAQAogCXR5cGhvb25fZnJlZV9yeF9yaW5ncyh0cCk7CiAKIAlpZih0eXBob29uX3N0YXJ0X3J1bnRpbWUodHApIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3Qgc3RhcnQgcnVudGltZSBpbiB0eCB0aW1lb3V0XG4iLAotCQkJCQlkZXYtPm5hbWUpOwotCQlnb3RvIHRydWVseV9kZWFkOworCQluZXRkZXZfZXJyKGRldiwgImNvdWxkIG5vdCBzdGFydCBydW50aW1lIGluIHR4IHRpbWVvdXRcbiIpOworCQlnb3RvIHRydWx5X2RlYWQ7CiAgICAgICAgIH0KIAogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAlyZXR1cm47CiAKLXRydWVseV9kZWFkOgordHJ1bHlfZGVhZDoKIAkvKiBSZXNldCB0aGUgaGFyZHdhcmUsIGFuZCB0dXJuIG9mZiBjYXJyaWVyIHRvIGF2b2lkIG1vcmUgdGltZW91dHMgKi8KIAl0eXBob29uX3Jlc2V0KHRwLT5pb2FkZHIsIE5vV2FpdCk7CiAJbmV0aWZfY2Fycmllcl9vZmYoZGV2KTsKQEAgLTIxNDcsNyArMjEyOSw3IEBACiAKIAllcnIgPSB0eXBob29uX3dha2V1cCh0cCwgV2FpdFNsZWVwKTsKIAlpZihlcnIgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IHVuYWJsZSB0byB3YWtldXAgZGV2aWNlXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgInVuYWJsZSB0byB3YWtldXAgZGV2aWNlXG4iKTsKIAkJZ290byBvdXRfc2xlZXA7CiAJfQogCkBAIC0yMTcyLDE0ICsyMTU0LDEzIEBACiAKIG91dF9zbGVlcDoKIAlpZih0eXBob29uX2Jvb3RfM1hQKHRwLCBUWVBIT09OX1NUQVRVU19XQUlUSU5HX0ZPUl9IT1NUKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIHJlYm9vdCBpbnRvIHNsZWVwIGltZ1xuIiwKLQkJCQlkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgInVuYWJsZSB0byByZWJvb3QgaW50byBzbGVlcCBpbWdcbiIpOwogCQl0eXBob29uX3Jlc2V0KHRwLT5pb2FkZHIsIE5vV2FpdCk7CiAJCWdvdG8gb3V0OwogCX0KIAogCWlmKHR5cGhvb25fc2xlZXAodHAsIFBDSV9EM2hvdCwgMCkgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gZ28gYmFjayB0byBzbGVlcFxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJ1bmFibGUgdG8gZ28gYmFjayB0byBzbGVlcFxuIik7CiAKIG91dDoKIAlyZXR1cm4gZXJyOwpAQCAtMjE5NCw3ICsyMTc1LDcgQEAKIAluYXBpX2Rpc2FibGUoJnRwLT5uYXBpKTsKIAogCWlmKHR5cGhvb25fc3RvcF9ydW50aW1lKHRwLCBXYWl0U2xlZXApIDwgMCkKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIHN0b3AgcnVudGltZVxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJ1bmFibGUgdG8gc3RvcCBydW50aW1lXG4iKTsKIAogCS8qIE1ha2Ugc3VyZSB0aGVyZSBpcyBubyBpcnEgaGFuZGxlciBydW5uaW5nIG9uIGEgZGlmZmVyZW50IENQVS4gKi8KIAlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKQEAgLTIyMDMsMTAgKzIxODQsMTAgQEAKIAl0eXBob29uX2luaXRfcmluZ3ModHApOwogCiAJaWYodHlwaG9vbl9ib290XzNYUCh0cCwgVFlQSE9PTl9TVEFUVVNfV0FJVElOR19GT1JfSE9TVCkgPCAwKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gYm9vdCBzbGVlcCBpbWFnZVxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJ1bmFibGUgdG8gYm9vdCBzbGVlcCBpbWFnZVxuIik7CiAKIAlpZih0eXBob29uX3NsZWVwKHRwLCBQQ0lfRDNob3QsIDApIDwgMCkKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIHB1dCBjYXJkIHRvIHNsZWVwXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgInVuYWJsZSB0byBwdXQgY2FyZCB0byBzbGVlcFxuIik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMjQsMTQgKzIyMDUsMTIgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZih0eXBob29uX3dha2V1cCh0cCwgV2FpdE5vU2xlZXApIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjcml0aWNhbDogY291bGQgbm90IHdha2UgdXAgaW4gcmVzdW1lXG4iLAotCQkJCWRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAiY3JpdGljYWw6IGNvdWxkIG5vdCB3YWtlIHVwIGluIHJlc3VtZVxuIik7CiAJCWdvdG8gcmVzZXQ7CiAJfQogCiAJaWYodHlwaG9vbl9zdGFydF9ydW50aW1lKHRwKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogY3JpdGljYWw6IGNvdWxkIG5vdCBzdGFydCBydW50aW1lIGluICIKLQkJCQkicmVzdW1lXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgImNyaXRpY2FsOiBjb3VsZCBub3Qgc3RhcnQgcnVudGltZSBpbiByZXN1bWVcbiIpOwogCQlnb3RvIHJlc2V0OwogCX0KIApAQCAtMjI1OCw4ICsyMjM3LDcgQEAKIAlzcGluX2xvY2tfYmgoJnRwLT5zdGF0ZV9sb2NrKTsKIAlpZih0cC0+dmxncnAgJiYgdHAtPndvbF9ldmVudHMgJiBUWVBIT09OX1dBS0VfTUFHSUNfUEtUKSB7CiAJCXNwaW5fdW5sb2NrX2JoKCZ0cC0+c3RhdGVfbG9jayk7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbm5vdCBkbyBXQUtFX01BR0lDIHdpdGggVkxBTlNcbiIsCi0JCQkJZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJjYW5ub3QgZG8gV0FLRV9NQUdJQyB3aXRoIFZMQU5TXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJnRwLT5zdGF0ZV9sb2NrKTsKQEAgLTIyNjcsNyArMjI0NSw3IEBACiAJbmV0aWZfZGV2aWNlX2RldGFjaChkZXYpOwogCiAJaWYodHlwaG9vbl9zdG9wX3J1bnRpbWUodHAsIFdhaXROb1NsZWVwKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIHN0b3AgcnVudGltZVxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJ1bmFibGUgdG8gc3RvcCBydW50aW1lXG4iKTsKIAkJZ290byBuZWVkX3Jlc3VtZTsKIAl9CiAKQEAgLTIyNzUsNyArMjI1Myw3IEBACiAJdHlwaG9vbl9pbml0X3JpbmdzKHRwKTsKIAogCWlmKHR5cGhvb25fYm9vdF8zWFAodHAsIFRZUEhPT05fU1RBVFVTX1dBSVRJTkdfRk9SX0hPU1QpIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gYm9vdCBzbGVlcCBpbWFnZVxuIiwgZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJ1bmFibGUgdG8gYm9vdCBzbGVlcCBpbWFnZVxuIik7CiAJCWdvdG8gbmVlZF9yZXN1bWU7CiAJfQogCkBAIC0yMjgzLDIxICsyMjYxLDE5IEBACiAJeHBfY21kLnBhcm0xID0gY3B1X3RvX2xlMTYobnRvaHMoKihfX2JlMTYgKikmZGV2LT5kZXZfYWRkclswXSkpOwogCXhwX2NtZC5wYXJtMiA9IGNwdV90b19sZTMyKG50b2hsKCooX19iZTMyICopJmRldi0+ZGV2X2FkZHJbMl0pKTsKIAlpZih0eXBob29uX2lzc3VlX2NvbW1hbmQodHAsIDEsICZ4cF9jbWQsIDAsIE5VTEwpIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gc2V0IG1hYyBhZGRyZXNzIGluIHN1c3BlbmRcbiIsCi0JCQkJZGV2LT5uYW1lKTsKKwkJbmV0ZGV2X2VycihkZXYsICJ1bmFibGUgdG8gc2V0IG1hYyBhZGRyZXNzIGluIHN1c3BlbmRcbiIpOwogCQlnb3RvIG5lZWRfcmVzdW1lOwogCX0KIAogCUlOSVRfQ09NTUFORF9OT19SRVNQT05TRSgmeHBfY21kLCBUWVBIT09OX0NNRF9TRVRfUlhfRklMVEVSKTsKIAl4cF9jbWQucGFybTEgPSBUWVBIT09OX1JYX0ZJTFRFUl9ESVJFQ1RFRCB8IFRZUEhPT05fUlhfRklMVEVSX0JST0FEQ0FTVDsKIAlpZih0eXBob29uX2lzc3VlX2NvbW1hbmQodHAsIDEsICZ4cF9jbWQsIDAsIE5VTEwpIDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiB1bmFibGUgdG8gc2V0IHJ4IGZpbHRlciBpbiBzdXNwZW5kXG4iLAotCQkJCWRldi0+bmFtZSk7CisJCW5ldGRldl9lcnIoZGV2LCAidW5hYmxlIHRvIHNldCByeCBmaWx0ZXIgaW4gc3VzcGVuZFxuIik7CiAJCWdvdG8gbmVlZF9yZXN1bWU7CiAJfQogCiAJaWYodHlwaG9vbl9zbGVlcCh0cCwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSksIHRwLT53b2xfZXZlbnRzKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogdW5hYmxlIHRvIHB1dCBjYXJkIHRvIHNsZWVwXG4iLCBkZXYtPm5hbWUpOworCQluZXRkZXZfZXJyKGRldiwgInVuYWJsZSB0byBwdXQgY2FyZCB0byBzbGVlcFxuIik7CiAJCWdvdG8gbmVlZF9yZXN1bWU7CiAJfQogCkBAIC0yMzUxLDcgKzIzMjcsNyBAQAogCiBvdXQ6CiAJaWYoIW1vZGUpCi0JCXByaW50ayhLRVJOX0lORk8gUEZYICJmYWxsaW5nIGJhY2sgdG8gcG9ydCBJT1xuIik7CisJCXByX2luZm8oIiVzOiBmYWxsaW5nIGJhY2sgdG8gcG9ydCBJT1xuIiwgcGNpX25hbWUocGRldikpOwogCXJldHVybiBtb2RlOwogfQogCkBAIC0yMzcxLDcgKzIzNDcsNiBAQAogc3RhdGljIGludCBfX2RldmluaXQKIHR5cGhvb25faW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiB7Ci0Jc3RhdGljIGludCBkaWRfdmVyc2lvbiA9IDA7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgdHlwaG9vbiAqdHA7CiAJaW50IGNhcmRfaWQgPSAoaW50KSBlbnQtPmRyaXZlcl9kYXRhOwpAQCAtMjM4MSwxNCArMjM1NiwxMSBAQAogCXN0cnVjdCBjbWRfZGVzYyB4cF9jbWQ7CiAJc3RydWN0IHJlc3BfZGVzYyB4cF9yZXNwWzNdOwogCWludCBlcnIgPSAwOwotCi0JaWYoIWRpZF92ZXJzaW9uKyspCi0JCXByaW50ayhLRVJOX0lORk8gIiVzIiwgdmVyc2lvbik7CisJY29uc3QgY2hhciAqZXJyX21zZzsKIAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqdHApKTsKIAlpZihkZXYgPT0gTlVMTCkgewotCQlwcmludGsoRVJSX1BGWCAiJXM6IHVuYWJsZSB0byBhbGxvYyBuZXcgbmV0IGRldmljZVxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyX21zZyA9ICJ1bmFibGUgdG8gYWxsb2MgbmV3IG5ldCBkZXZpY2UiOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX291dDsKIAl9CkBAIC0yMzk2LDU3ICsyMzY4LDQ4IEBACiAKIAllcnIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZihlcnIgPCAwKSB7Ci0JCXByaW50ayhFUlJfUEZYICIlczogdW5hYmxlIHRvIGVuYWJsZSBkZXZpY2VcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWVycl9tc2cgPSAidW5hYmxlIHRvIGVuYWJsZSBkZXZpY2UiOwogCQlnb3RvIGVycm9yX291dF9kZXY7CiAJfQogCiAJZXJyID0gcGNpX3NldF9td2kocGRldik7CiAJaWYoZXJyIDwgMCkgewotCQlwcmludGsoRVJSX1BGWCAiJXM6IHVuYWJsZSB0byBzZXQgTVdJXG4iLCBwY2lfbmFtZShwZGV2KSk7CisJCWVycl9tc2cgPSAidW5hYmxlIHRvIHNldCBNV0kiOwogCQlnb3RvIGVycm9yX291dF9kaXNhYmxlOwogCX0KIAogCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7CiAJaWYoZXJyIDwgMCkgewotCQlwcmludGsoRVJSX1BGWCAiJXM6IE5vIHVzYWJsZSBETUEgY29uZmlndXJhdGlvblxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyX21zZyA9ICJObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24iOwogCQlnb3RvIGVycm9yX291dF9td2k7CiAJfQogCiAJLyogc2FuaXR5IGNoZWNrcyBvbiBJTyBhbmQgTU1JTyBCQVJzCiAJICovCiAJaWYoIShwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgMCkgJiBJT1JFU09VUkNFX0lPKSkgewotCQlwcmludGsoRVJSX1BGWAotCQkgICAgICAgIiVzOiByZWdpb24gIzEgbm90IGEgUENJIElPIHJlc291cmNlLCBhYm9ydGluZ1xuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyX21zZyA9ICJyZWdpb24gIzEgbm90IGEgUENJIElPIHJlc291cmNlLCBhYm9ydGluZyI7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyb3Jfb3V0X213aTsKIAl9CiAJaWYocGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSA8IDEyOCkgewotCQlwcmludGsoRVJSX1BGWCAiJXM6IEludmFsaWQgUENJIElPIHJlZ2lvbiBzaXplLCBhYm9ydGluZ1xuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyX21zZyA9ICJJbnZhbGlkIFBDSSBJTyByZWdpb24gc2l6ZSwgYWJvcnRpbmciOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGVycm9yX291dF9td2k7CiAJfQogCWlmKCEocGNpX3Jlc291cmNlX2ZsYWdzKHBkZXYsIDEpICYgSU9SRVNPVVJDRV9NRU0pKSB7Ci0JCXByaW50ayhFUlJfUEZYCi0JCSAgICAgICAiJXM6IHJlZ2lvbiAjMSBub3QgYSBQQ0kgTU1JTyByZXNvdXJjZSwgYWJvcnRpbmdcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWVycl9tc2cgPSAicmVnaW9uICMxIG5vdCBhIFBDSSBNTUlPIHJlc291cmNlLCBhYm9ydGluZyI7CiAJCWVyciA9IC1FTk9ERVY7CiAJCWdvdG8gZXJyb3Jfb3V0X213aTsKIAl9CiAJaWYocGNpX3Jlc291cmNlX2xlbihwZGV2LCAxKSA8IDEyOCkgewotCQlwcmludGsoRVJSX1BGWCAiJXM6IEludmFsaWQgUENJIE1NSU8gcmVnaW9uIHNpemUsIGFib3J0aW5nXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQllcnJfbXNnID0gIkludmFsaWQgUENJIE1NSU8gcmVnaW9uIHNpemUsIGFib3J0aW5nIjsKIAkJZXJyID0gLUVOT0RFVjsKIAkJZ290byBlcnJvcl9vdXRfbXdpOwogCX0KIAotCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgInR5cGhvb24iKTsKKwllcnIgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBkZXYsIEtCVUlMRF9NT0ROQU1FKTsKIAlpZihlcnIgPCAwKSB7Ci0JCXByaW50ayhFUlJfUEZYICIlczogY291bGQgbm90IHJlcXVlc3QgcmVnaW9uc1xuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyX21zZyA9ICJjb3VsZCBub3QgcmVxdWVzdCByZWdpb25zIjsKIAkJZ290byBlcnJvcl9vdXRfbXdpOwogCX0KIApAQCAtMjQ1Nyw4ICsyNDIwLDcgQEAKIAogCWlvYWRkciA9IHBjaV9pb21hcChwZGV2LCB1c2VfbW1pbywgMTI4KTsKIAlpZiAoIWlvYWRkcikgewotCQlwcmludGsoRVJSX1BGWCAiJXM6IGNhbm5vdCByZW1hcCByZWdpc3RlcnMsIGFib3J0aW5nXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQllcnJfbXNnID0gImNhbm5vdCByZW1hcCByZWdpc3RlcnMsIGFib3J0aW5nIjsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBlcnJvcl9vdXRfcmVnaW9uczsKIAl9CkBAIC0yNDY4LDggKzI0MzAsNyBAQAogCXNoYXJlZCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHNpemVvZihzdHJ1Y3QgdHlwaG9vbl9zaGFyZWQpLAogCQkJCSAgICAgICZzaGFyZWRfZG1hKTsKIAlpZighc2hhcmVkKSB7Ci0JCXByaW50ayhFUlJfUEZYICIlczogY291bGQgbm90IGFsbG9jYXRlIERNQSBtZW1vcnlcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWVycl9tc2cgPSAiY291bGQgbm90IGFsbG9jYXRlIERNQSBtZW1vcnkiOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycm9yX291dF9yZW1hcDsKIAl9CkBAIC0yNDkyLDcgKzI0NTMsNyBAQAogCSAqIDUpIFB1dCB0aGUgY2FyZCB0byBzbGVlcC4KIAkgKi8KIAlpZiAodHlwaG9vbl9yZXNldChpb2FkZHIsIFdhaXRTbGVlcCkgPCAwKSB7Ci0JCXByaW50ayhFUlJfUEZYICIlczogY291bGQgbm90IHJlc2V0IDNYUFxuIiwgcGNpX25hbWUocGRldikpOworCQllcnJfbXNnID0gImNvdWxkIG5vdCByZXNldCAzWFAiOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGVycm9yX291dF9kbWE7CiAJfQpAQCAtMjUwNCwyNiArMjQ2NSwxOCBAQAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCXBjaV9zYXZlX3N0YXRlKHBkZXYpOwogCi0JLyogZGV2LT5uYW1lIGlzIG5vdCB2YWxpZCB1bnRpbCB3ZSByZWdpc3RlciwgYnV0IHdlIG5lZWQgdG8KLQkgKiB1c2Ugc29tZSBjb21tb24gcm91dGluZXMgdG8gaW5pdGlhbGl6ZSB0aGUgY2FyZC4gU28gdGhhdCB0aG9zZQotCSAqIHJvdXRpbmVzIHByaW50IHRoZSByaWdodCBuYW1lLCB3ZSBrZWVwIG91ciBvdW4gcG9pbnRlciB0byB0aGUgbmFtZQotCSAqLwotCXRwLT5uYW1lID0gcGNpX25hbWUocGRldik7Ci0KIAl0eXBob29uX2luaXRfaW50ZXJmYWNlKHRwKTsKIAl0eXBob29uX2luaXRfcmluZ3ModHApOwogCiAJaWYodHlwaG9vbl9ib290XzNYUCh0cCwgVFlQSE9PTl9TVEFUVVNfV0FJVElOR19GT1JfSE9TVCkgPCAwKSB7Ci0JCXByaW50ayhFUlJfUEZYICIlczogY2Fubm90IGJvb3QgM1hQIHNsZWVwIGltYWdlXG4iLAotCQkgICAgICAgcGNpX25hbWUocGRldikpOworCQllcnJfbXNnID0gImNhbm5vdCBib290IDNYUCBzbGVlcCBpbWFnZSI7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gZXJyb3Jfb3V0X3Jlc2V0OwogCX0KIAogCUlOSVRfQ09NTUFORF9XSVRIX1JFU1BPTlNFKCZ4cF9jbWQsIFRZUEhPT05fQ01EX1JFQURfTUFDX0FERFJFU1MpOwogCWlmKHR5cGhvb25faXNzdWVfY29tbWFuZCh0cCwgMSwgJnhwX2NtZCwgMSwgeHBfcmVzcCkgPCAwKSB7Ci0JCXByaW50ayhFUlJfUEZYICIlczogY2Fubm90IHJlYWQgTUFDIGFkZHJlc3NcbiIsCi0JCSAgICAgICBwY2lfbmFtZShwZGV2KSk7CisJCWVycl9tc2cgPSAiY2Fubm90IHJlYWQgTUFDIGFkZHJlc3MiOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGVycm9yX291dF9yZXNldDsKIAl9CkBAIC0yNTMyLDggKzI0ODUsNyBAQAogCSooX19iZTMyICopJmRldi0+ZGV2X2FkZHJbMl0gPSBodG9ubChsZTMyX3RvX2NwdSh4cF9yZXNwWzBdLnBhcm0yKSk7CiAKIAlpZighaXNfdmFsaWRfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyKSkgewotCQlwcmludGsoRVJSX1BGWCAiJXM6IENvdWxkIG5vdCBvYnRhaW4gdmFsaWQgZXRoZXJuZXQgYWRkcmVzcywgIgotCQkgICAgICAgImFib3J0aW5nXG4iLCBwY2lfbmFtZShwZGV2KSk7CisJCWVycl9tc2cgPSAiQ291bGQgbm90IG9idGFpbiB2YWxpZCBldGhlcm5ldCBhZGRyZXNzLCBhYm9ydGluZyI7CiAJCWdvdG8gZXJyb3Jfb3V0X3Jlc2V0OwogCX0KIApAQCAtMjU0Miw4ICsyNDk0LDcgQEAKIAkgKi8KIAlJTklUX0NPTU1BTkRfV0lUSF9SRVNQT05TRSgmeHBfY21kLCBUWVBIT09OX0NNRF9SRUFEX1ZFUlNJT05TKTsKIAlpZih0eXBob29uX2lzc3VlX2NvbW1hbmQodHAsIDEsICZ4cF9jbWQsIDMsIHhwX3Jlc3ApIDwgMCkgewotCQlwcmludGsoRVJSX1BGWCAiJXM6IENvdWxkIG5vdCBnZXQgU2xlZXAgSW1hZ2UgdmVyc2lvblxuIiwKLQkJCXBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyX21zZyA9ICJDb3VsZCBub3QgZ2V0IFNsZWVwIEltYWdlIHZlcnNpb24iOwogCQlnb3RvIGVycm9yX291dF9yZXNldDsKIAl9CiAKQEAgLTI1NjAsOCArMjUxMSw3IEBACiAJCXRwLT5jYXBhYmlsaXRpZXMgfD0gVFlQSE9PTl9XQUtFVVBfTkVFRFNfUkVTRVQ7CiAKIAlpZih0eXBob29uX3NsZWVwKHRwLCBQQ0lfRDNob3QsIDApIDwgMCkgewotCQlwcmludGsoRVJSX1BGWCAiJXM6IGNhbm5vdCBwdXQgYWRhcHRlciB0byBzbGVlcFxuIiwKLQkJICAgICAgIHBjaV9uYW1lKHBkZXYpKTsKKwkJZXJyX21zZyA9ICJjYW5ub3QgcHV0IGFkYXB0ZXIgdG8gc2xlZXAiOwogCQllcnIgPSAtRUlPOwogCQlnb3RvIGVycm9yX291dF9yZXNldDsKIAl9CkBAIC0yNTgwLDE5ICsyNTMwLDE4IEBACiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fUlg7CiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKIAotCWlmKHJlZ2lzdGVyX25ldGRldihkZXYpIDwgMCkKKwlpZihyZWdpc3Rlcl9uZXRkZXYoZGV2KSA8IDApIHsKKwkJZXJyX21zZyA9ICJ1bmFibGUgdG8gcmVnaXN0ZXIgbmV0ZGV2IjsKIAkJZ290byBlcnJvcl9vdXRfcmVzZXQ7Ci0KLQkvKiBmaXh1cCBvdXIgbG9jYWwgbmFtZSAqLwotCXRwLT5uYW1lID0gZGV2LT5uYW1lOworCX0KIAogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6ICVzIGF0ICVzIDB4JWxseCwgJXBNXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIHR5cGhvb25fY2FyZF9pbmZvW2NhcmRfaWRdLm5hbWUsCi0JICAgICAgIHVzZV9tbWlvID8gIk1NSU8iIDogIklPIiwKLQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgdXNlX21taW8pLAotCSAgICAgICBkZXYtPmRldl9hZGRyKTsKKwluZXRkZXZfaW5mbyhkZXYsICIlcyBhdCAlcyAweCVsbHgsICVwTVxuIiwKKwkJICAgIHR5cGhvb25fY2FyZF9pbmZvW2NhcmRfaWRdLm5hbWUsCisJCSAgICB1c2VfbW1pbyA/ICJNTUlPIiA6ICJJTyIsCisJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCB1c2VfbW1pbyksCisJCSAgICBkZXYtPmRldl9hZGRyKTsKIAogCS8qIHhwX3Jlc3Agc3RpbGwgY29udGFpbnMgdGhlIHJlc3BvbnNlIHRvIHRoZSBSRUFEX1ZFUlNJT05TIGNvbW1hbmQuCiAJICogRm9yIGRlYnVnZ2luZywgbGV0IHRoZSB1c2VyIGtub3cgd2hhdCB2ZXJzaW9uIGhlIGhhcy4KQEAgLTI2MDIsMjMgKzI1NTEsMjAgQEAKIAkJICogb2YgdmVyc2lvbiBpcyBNb250aC9EYXkgb2YgYnVpbGQuCiAJCSAqLwogCQl1MTYgbW9udGhkYXkgPSBsZTMyX3RvX2NwdSh4cF9yZXNwWzBdLnBhcm0yKSAmIDB4ZmZmZjsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFR5cGhvb24gMS4wIFNsZWVwIEltYWdlIGJ1aWx0ICIKLQkJCSIlMDJ1LyUwMnUvMjAwMFxuIiwgZGV2LT5uYW1lLCBtb250aGRheSA+PiA4LAotCQkJbW9udGhkYXkgJiAweGZmKTsKKwkJbmV0ZGV2X2luZm8oZGV2LCAiVHlwaG9vbiAxLjAgU2xlZXAgSW1hZ2UgYnVpbHQgJTAydS8lMDJ1LzIwMDBcbiIsCisJCQkgICAgbW9udGhkYXkgPj4gOCwgbW9udGhkYXkgJiAweGZmKTsKIAl9IGVsc2UgaWYoeHBfcmVzcFswXS5udW1EZXNjID09IDIpIHsKIAkJLyogVGhpcyBpcyB0aGUgVHlwaG9vbiAxLjErIHR5cGUgU2xlZXAgSW1hZ2UKIAkJICovCiAJCXUzMiBzbGVlcF92ZXIgPSBsZTMyX3RvX2NwdSh4cF9yZXNwWzBdLnBhcm0yKTsKIAkJdTggKnZlcl9zdHJpbmcgPSAodTggKikgJnhwX3Jlc3BbMV07CiAJCXZlcl9zdHJpbmdbMjVdID0gMDsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFR5cGhvb24gMS4xKyBTbGVlcCBJbWFnZSB2ZXJzaW9uICIKLQkJCSIlMDJ4LiUwM3guJTAzeCAlc1xuIiwgZGV2LT5uYW1lLCBzbGVlcF92ZXIgPj4gMjQsCi0JCQkoc2xlZXBfdmVyID4+IDEyKSAmIDB4ZmZmLCBzbGVlcF92ZXIgJiAweGZmZiwKLQkJCXZlcl9zdHJpbmcpOworCQluZXRkZXZfaW5mbyhkZXYsICJUeXBob29uIDEuMSsgU2xlZXAgSW1hZ2UgdmVyc2lvbiAlMDJ4LiUwM3guJTAzeCAlc1xuIiwKKwkJCSAgICBzbGVlcF92ZXIgPj4gMjQsIChzbGVlcF92ZXIgPj4gMTIpICYgMHhmZmYsCisJCQkgICAgc2xlZXBfdmVyICYgMHhmZmYsIHZlcl9zdHJpbmcpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVbmtub3duIFNsZWVwIEltYWdlIHZlcnNpb24gIgotCQkJIigldTolMDR4KVxuIiwgZGV2LT5uYW1lLCB4cF9yZXNwWzBdLm51bURlc2MsCi0JCQlsZTMyX3RvX2NwdSh4cF9yZXNwWzBdLnBhcm0yKSk7CisJCW5ldGRldl93YXJuKGRldiwgIlVua25vd24gU2xlZXAgSW1hZ2UgdmVyc2lvbiAoJXU6JTA0eClcbiIsCisJCQkgICAgeHBfcmVzcFswXS5udW1EZXNjLCBsZTMyX3RvX2NwdSh4cF9yZXNwWzBdLnBhcm0yKSk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0yNjQwLDYgKzI1ODYsNyBAQAogZXJyb3Jfb3V0X2RldjoKIAlmcmVlX25ldGRldihkZXYpOwogZXJyb3Jfb3V0OgorCXByX2VycigiJXM6ICVzXG4iLCBwY2lfbmFtZShwZGV2KSwgZXJyX21zZyk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjY2NCw3ICsyNjExLDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR5cGhvb25fZHJpdmVyID0gewotCS5uYW1lCQk9IERSVl9NT0RVTEVfTkFNRSwKKwkubmFtZQkJPSBLQlVJTERfTU9ETkFNRSwKIAkuaWRfdGFibGUJPSB0eXBob29uX3BjaV90YmwsCiAJLnByb2JlCQk9IHR5cGhvb25faW5pdF9vbmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcCh0eXBob29uX3JlbW92ZV9vbmUpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdWNjX2dldGguYyBiL2RyaXZlcnMvbmV0L3VjY19nZXRoLmMKaW5kZXggZWI4ZmU3ZS4uMWIwYWVmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdWNjX2dldGguYworKysgYi9kcml2ZXJzL25ldC91Y2NfZ2V0aC5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8YXNtL3FlLmg+CiAjaW5jbHVkZSA8YXNtL3VjYy5oPgogI2luY2x1ZGUgPGFzbS91Y2NfZmFzdC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CiAKICNpbmNsdWRlICJ1Y2NfZ2V0aC5oIgogI2luY2x1ZGUgImZzbF9wcV9tZGlvLmgiCkBAIC00MjksNyArNDMwLDcgQEAKIAkgICAgdWNjX2Zhc3RfZ2V0X3FlX2NyX3N1YmJsb2NrKHVnZXRoLT51Z19pbmZvLT51Zl9pbmZvLnVjY19udW0pOwogCiAJLyogRXRoZXJuZXQgZnJhbWVzIGFyZSBkZWZpbmVkIGluIExpdHRsZSBFbmRpYW4gbW9kZSwKLQl0aGVyZWZvciB0byBpbnNlcnQgKi8KKwl0aGVyZWZvcmUgdG8gaW5zZXJ0ICovCiAJLyogdGhlIGFkZHJlc3MgdG8gdGhlIGhhc2ggKEJpZyBFbmRpYW4gbW9kZSksIHdlIHJldmVyc2UgdGhlIGJ5dGVzLiovCiAKIAlzZXRfbWFjX2FkZHIoJnBfODJ4eF9hZGRyX2ZpbHQtPnRhZGRyLmgsIHBfZW5ldF9hZGRyKTsKQEAgLTEzMzQsNyArMTMzNSw3IEBACiAJc3RydWN0IHVjY19nZXRoIF9faW9tZW0gKnVnX3JlZ3M7CiAJc3RydWN0IHVjY19mYXN0IF9faW9tZW0gKnVmX3JlZ3M7CiAJaW50IHJldF92YWw7Ci0JdTMyIHVwc21yLCBtYWNjZmcyLCB0YmlCYXNlQWRkcmVzczsKKwl1MzIgdXBzbXIsIG1hY2NmZzI7CiAJdTE2IHZhbHVlOwogCiAJdWdldGhfdmRiZygiJXM6IElOIiwgX19mdW5jX18pOwpAQCAtMTM4OSwxNCArMTM5MCwyMCBAQAogCS8qIE5vdGUgdGhhdCB0aGlzIGRlcGVuZHMgb24gcHJvcGVyIHNldHRpbmcgaW4gdXRiaXBhciByZWdpc3Rlci4gKi8KIAlpZiAoKHVnZXRoLT5waHlfaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9UQkkpIHx8CiAJICAgICh1Z2V0aC0+cGh5X2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfUlRCSSkpIHsKLQkJdGJpQmFzZUFkZHJlc3MgPSBpbl9iZTMyKCZ1Z19yZWdzLT51dGJpcGFyKTsKLQkJdGJpQmFzZUFkZHJlc3MgJj0gVVRCSVBBUl9QSFlfQUREUkVTU19NQVNLOwotCQl0YmlCYXNlQWRkcmVzcyA+Pj0gVVRCSVBBUl9QSFlfQUREUkVTU19TSElGVDsKLQkJdmFsdWUgPSB1Z2V0aC0+cGh5ZGV2LT5idXMtPnJlYWQodWdldGgtPnBoeWRldi0+YnVzLAotCQkJCSh1OCkgdGJpQmFzZUFkZHJlc3MsIEVORVRfVEJJX01JSV9DUik7CisJCXN0cnVjdCB1Y2NfZ2V0aF9pbmZvICp1Z19pbmZvID0gdWdldGgtPnVnX2luZm87CisJCXN0cnVjdCBwaHlfZGV2aWNlICp0YmlwaHk7CisKKwkJaWYgKCF1Z19pbmZvLT50Ymlfbm9kZSkKKwkJCXVnZXRoX3dhcm4oIlRCSSBtb2RlIHJlcXVpcmVzIHRoYXQgdGhlIGRldmljZSAiCisJCQkJInRyZWUgc3BlY2lmeSBhIHRiaS1oYW5kbGVcbiIpOworCisJCXRiaXBoeSA9IG9mX3BoeV9maW5kX2RldmljZSh1Z19pbmZvLT50Ymlfbm9kZSk7CisJCWlmICghdGJpcGh5KQorCQkJdWdldGhfd2FybigiQ291bGQgbm90IGdldCBUQkkgZGV2aWNlXG4iKTsKKworCQl2YWx1ZSA9IHBoeV9yZWFkKHRiaXBoeSwgRU5FVF9UQklfTUlJX0NSKTsKIAkJdmFsdWUgJj0gfjB4MTAwMDsJLyogVHVybiBvZmYgYXV0b25lZ290aWF0aW9uICovCi0JCXVnZXRoLT5waHlkZXYtPmJ1cy0+d3JpdGUodWdldGgtPnBoeWRldi0+YnVzLAotCQkJCSh1OCkgdGJpQmFzZUFkZHJlc3MsIEVORVRfVEJJX01JSV9DUiwgdmFsdWUpOworCQlwaHlfd3JpdGUodGJpcGh5LCBFTkVUX1RCSV9NSUlfQ1IsIHZhbHVlKTsKIAl9CiAKIAlpbml0X2NoZWNrX2ZyYW1lX2xlbmd0aF9tb2RlKHVnX2luZm8tPmxlbmd0aENoZWNrUngsICZ1Z19yZWdzLT5tYWNjZmcyKTsKQEAgLTE5OTUsNyArMjAwMiw2IEBACiAJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAJc3RydWN0IHVjY19mYXN0IF9faW9tZW0gKnVmX3JlZ3M7CiAJc3RydWN0IHVjY19nZXRoXzgyeHhfYWRkcmVzc19maWx0ZXJpbmdfcHJhbSBfX2lvbWVtICpwXzgyeHhfYWRkcl9maWx0OwotCWludCBpOwogCiAJdWdldGggPSBuZXRkZXZfcHJpdihkZXYpOwogCkBAIC0yMDIyLDEwICsyMDI4LDcgQEAKIAkJCW91dF9iZTMyKCZwXzgyeHhfYWRkcl9maWx0LT5nYWRkcl9oLCAweDApOwogCQkJb3V0X2JlMzIoJnBfODJ4eF9hZGRyX2ZpbHQtPmdhZGRyX2wsIDB4MCk7CiAKLQkJCWRtaSA9IGRldi0+bWNfbGlzdDsKLQotCQkJZm9yIChpID0gMDsgaSA8IGRldi0+bWNfY291bnQ7IGkrKywgZG1pID0gZG1pLT5uZXh0KSB7Ci0KKwkJCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKGRtaSwgZGV2KSB7CiAJCQkJLyogT25seSBzdXBwb3J0IGdyb3VwIG11bHRpY2FzdCBmb3Igbm93LgogCQkJCSAqLwogCQkJCWlmICghKGRtaS0+ZG1pX2FkZHJbMF0gJiAxKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMgYi9kcml2ZXJzL25ldC91c2IvYXNpeC5jCmluZGV4IGE1MTYxODUuLjIwZTM0NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9hc2l4LmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL2FzaXguYwpAQCAtMTg0LDggKzE4NCw4IEBACiAJdm9pZCAqYnVmOwogCWludCBlcnIgPSAtRU5PTUVNOwogCi0JZGV2ZGJnKGRldiwiYXNpeF9yZWFkX2NtZCgpIGNtZD0weCUwMnggdmFsdWU9MHglMDR4IGluZGV4PTB4JTA0eCBzaXplPSVkIiwKLQkJY21kLCB2YWx1ZSwgaW5kZXgsIHNpemUpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJhc2l4X3JlYWRfY21kKCkgY21kPTB4JTAyeCB2YWx1ZT0weCUwNHggaW5kZXg9MHglMDR4IHNpemU9JWRcbiIsCisJCSAgIGNtZCwgdmFsdWUsIGluZGV4LCBzaXplKTsKIAogCWJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpCkBAIC0yMTcsOCArMjE3LDggQEAKIAl2b2lkICpidWYgPSBOVUxMOwogCWludCBlcnIgPSAtRU5PTUVNOwogCi0JZGV2ZGJnKGRldiwiYXNpeF93cml0ZV9jbWQoKSBjbWQ9MHglMDJ4IHZhbHVlPTB4JTA0eCBpbmRleD0weCUwNHggc2l6ZT0lZCIsCi0JCWNtZCwgdmFsdWUsIGluZGV4LCBzaXplKTsKKwluZXRkZXZfZGJnKGRldi0+bmV0LCAiYXNpeF93cml0ZV9jbWQoKSBjbWQ9MHglMDJ4IHZhbHVlPTB4JTA0eCBpbmRleD0weCUwNHggc2l6ZT0lZFxuIiwKKwkJICAgY21kLCB2YWx1ZSwgaW5kZXgsIHNpemUpOwogCiAJaWYgKGRhdGEpIHsKIAkJYnVmID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKQEAgLTI2NCwxNSArMjY0LDE1IEBACiAJaW50IHN0YXR1czsKIAlzdHJ1Y3QgdXJiICp1cmI7CiAKLQlkZXZkYmcoZGV2LCJhc2l4X3dyaXRlX2NtZF9hc3luYygpIGNtZD0weCUwMnggdmFsdWU9MHglMDR4IGluZGV4PTB4JTA0eCBzaXplPSVkIiwKLQkJY21kLCB2YWx1ZSwgaW5kZXgsIHNpemUpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJhc2l4X3dyaXRlX2NtZF9hc3luYygpIGNtZD0weCUwMnggdmFsdWU9MHglMDR4IGluZGV4PTB4JTA0eCBzaXplPSVkXG4iLAorCQkgICBjbWQsIHZhbHVlLCBpbmRleCwgc2l6ZSk7CiAJaWYgKCh1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSB7Ci0JCWRldmVycihkZXYsICJFcnJvciBhbGxvY2F0aW5nIFVSQiBpbiB3cml0ZV9jbWRfYXN5bmMhIik7CisJCW5ldGRldl9lcnIoZGV2LT5uZXQsICJFcnJvciBhbGxvY2F0aW5nIFVSQiBpbiB3cml0ZV9jbWRfYXN5bmMhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmICgocmVxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSB7Ci0JCWRldmVycihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBjb250cm9sIHJlcXVlc3QiKTsKKwkJbmV0ZGV2X2VycihkZXYtPm5ldCwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbnRyb2wgcmVxdWVzdFxuIik7CiAJCXVzYl9mcmVlX3VyYih1cmIpOwogCQlyZXR1cm47CiAJfQpAQCAtMjg5LDggKzI4OSw4IEBACiAJCQkgICAgIGFzaXhfYXN5bmNfY21kX2NhbGxiYWNrLCByZXEpOwogCiAJaWYoKHN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpIDwgMCkgewotCQlkZXZlcnIoZGV2LCAiRXJyb3Igc3VibWl0dGluZyB0aGUgY29udHJvbCBtZXNzYWdlOiBzdGF0dXM9JWQiLAotCQkJCXN0YXR1cyk7CisJCW5ldGRldl9lcnIoZGV2LT5uZXQsICJFcnJvciBzdWJtaXR0aW5nIHRoZSBjb250cm9sIG1lc3NhZ2U6IHN0YXR1cz0lZFxuIiwKKwkJCSAgIHN0YXR1cyk7CiAJCWtmcmVlKHJlcSk7CiAJCXVzYl9mcmVlX3VyYih1cmIpOwogCX0KQEAgLTMxNCw3ICszMTQsNyBAQAogCXdoaWxlIChza2ItPmxlbiA+IDApIHsKIAkJaWYgKChzaG9ydCkoaGVhZGVyICYgMHgwMDAwZmZmZikgIT0KIAkJICAgIH4oKHNob3J0KSgoaGVhZGVyICYgMHhmZmZmMDAwMCkgPj4gMTYpKSkgewotCQkJZGV2ZXJyKGRldiwiYXNpeF9yeF9maXh1cCgpIEJhZCBIZWFkZXIgTGVuZ3RoIik7CisJCQluZXRkZXZfZXJyKGRldi0+bmV0LCAiYXNpeF9yeF9maXh1cCgpIEJhZCBIZWFkZXIgTGVuZ3RoXG4iKTsKIAkJfQogCQkvKiBnZXQgdGhlIHBhY2tldCBsZW5ndGggKi8KIAkJc2l6ZSA9ICh1MTYpIChoZWFkZXIgJiAweDAwMDBmZmZmKTsKQEAgLTMyMiw3ICszMjIsOCBAQAogCQlpZiAoKHNrYi0+bGVuKSAtICgoc2l6ZSArIDEpICYgMHhmZmZlKSA9PSAwKQogCQkJcmV0dXJuIDI7CiAJCWlmIChzaXplID4gRVRIX0ZSQU1FX0xFTikgewotCQkJZGV2ZXJyKGRldiwiYXNpeF9yeF9maXh1cCgpIEJhZCBSWCBMZW5ndGggJWQiLCBzaXplKTsKKwkJCW5ldGRldl9lcnIoZGV2LT5uZXQsICJhc2l4X3J4X2ZpeHVwKCkgQmFkIFJYIExlbmd0aCAlZFxuIiwKKwkJCQkgICBzaXplKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWF4X3NrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwpAQCAtMzQ4LDcgKzM0OSw4IEBACiAJfQogCiAJaWYgKHNrYi0+bGVuIDwgMCkgewotCQlkZXZlcnIoZGV2LCJhc2l4X3J4X2ZpeHVwKCkgQmFkIFNLQiBMZW5ndGggJWQiLCBza2ItPmxlbik7CisJCW5ldGRldl9lcnIoZGV2LT5uZXQsICJhc2l4X3J4X2ZpeHVwKCkgQmFkIFNLQiBMZW5ndGggJWRcbiIsCisJCQkgICBza2ItPmxlbik7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gMTsKQEAgLTQwOSw3ICs0MTEsNyBAQAogCQkJdXNibmV0X2RlZmVyX2tldmVudCAoZGV2LCBFVkVOVF9MSU5LX1JFU0VUICk7CiAJCX0gZWxzZQogCQkJbmV0aWZfY2Fycmllcl9vZmYoZGV2LT5uZXQpOwotCQlkZXZkYmcoZGV2LCAiTGluayBTdGF0dXMgaXM6ICVkIiwgbGluayk7CisJCW5ldGRldl9kYmcoZGV2LT5uZXQsICJMaW5rIFN0YXR1cyBpczogJWRcbiIsIGxpbmspOwogCX0KIH0KIApAQCAtNDE4LDcgKzQyMCw3IEBACiAJaW50IHJldDsKIAlyZXQgPSBhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfU1dfTUlJLCAweDAwMDAsIDAsIDAsIE5VTEwpOwogCWlmIChyZXQgPCAwKQotCQlkZXZlcnIoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBzb2Z0d2FyZSBNSUkgYWNjZXNzIik7CisJCW5ldGRldl9lcnIoZGV2LT5uZXQsICJGYWlsZWQgdG8gZW5hYmxlIHNvZnR3YXJlIE1JSSBhY2Nlc3NcbiIpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTQyNyw3ICs0MjksNyBAQAogCWludCByZXQ7CiAJcmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU0VUX0hXX01JSSwgMHgwMDAwLCAwLCAwLCBOVUxMKTsKIAlpZiAocmV0IDwgMCkKLQkJZGV2ZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgaGFyZHdhcmUgTUlJIGFjY2VzcyIpOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAiRmFpbGVkIHRvIGVuYWJsZSBoYXJkd2FyZSBNSUkgYWNjZXNzXG4iKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC00MzYsMTMgKzQzOCwxNCBAQAogCXU4IGJ1ZlsyXTsKIAlpbnQgcmV0ID0gYXNpeF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX1BIWV9JRCwgMCwgMCwgMiwgYnVmKTsKIAotCWRldmRiZyhkZXYsICJhc2l4X2dldF9waHlfYWRkcigpIik7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImFzaXhfZ2V0X3BoeV9hZGRyKClcbiIpOwogCiAJaWYgKHJldCA8IDApIHsKLQkJZGV2ZXJyKGRldiwgIkVycm9yIHJlYWRpbmcgUEhZSUQgcmVnaXN0ZXI6ICUwMngiLCByZXQpOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAiRXJyb3IgcmVhZGluZyBQSFlJRCByZWdpc3RlcjogJTAyeFxuIiwgcmV0KTsKIAkJZ290byBvdXQ7CiAJfQotCWRldmRiZyhkZXYsICJhc2l4X2dldF9waHlfYWRkcigpIHJldHVybmluZyAweCUwNHgiLCAqKChfX2xlMTYgKilidWYpKTsKKwluZXRkZXZfZGJnKGRldi0+bmV0LCAiYXNpeF9nZXRfcGh5X2FkZHIoKSByZXR1cm5pbmcgMHglMDR4XG4iLAorCQkgICAqKChfX2xlMTYgKilidWYpKTsKIAlyZXQgPSBidWZbMV07CiAKIG91dDoKQEAgLTQ1NSw3ICs0NTgsNyBAQAogCiAgICAgICAgIHJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NXX1JFU0VULCBmbGFncywgMCwgMCwgTlVMTCk7CiAJaWYgKHJldCA8IDApCi0JCWRldmVycihkZXYsIkZhaWxlZCB0byBzZW5kIHNvZnR3YXJlIHJlc2V0OiAlMDJ4IiwgcmV0KTsKKwkJbmV0ZGV2X2VycihkZXYtPm5ldCwgIkZhaWxlZCB0byBzZW5kIHNvZnR3YXJlIHJlc2V0OiAlMDJ4XG4iLCByZXQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTQ2Niw3ICs0NjksNyBAQAogCWludCByZXQgPSBhc2l4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfUlhfQ1RMLCAwLCAwLCAyLCAmdik7CiAKIAlpZiAocmV0IDwgMCkgewotCQlkZXZlcnIoZGV2LCAiRXJyb3IgcmVhZGluZyBSWF9DVEwgcmVnaXN0ZXI6ICUwMngiLCByZXQpOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAiRXJyb3IgcmVhZGluZyBSWF9DVEwgcmVnaXN0ZXI6ICUwMnhcbiIsIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIAlyZXQgPSBsZTE2X3RvX2NwdSh2KTsKQEAgLTQ3OCwxMSArNDgxLDExIEBACiB7CiAJaW50IHJldDsKIAotCWRldmRiZyhkZXYsImFzaXhfd3JpdGVfcnhfY3RsKCkgLSBtb2RlID0gMHglMDR4IiwgbW9kZSk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImFzaXhfd3JpdGVfcnhfY3RsKCkgLSBtb2RlID0gMHglMDR4XG4iLCBtb2RlKTsKIAlyZXQgPSBhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9SWF9DVEwsIG1vZGUsIDAsIDAsIE5VTEwpOwogCWlmIChyZXQgPCAwKQotCQlkZXZlcnIoZGV2LCAiRmFpbGVkIHRvIHdyaXRlIFJYX0NUTCBtb2RlIHRvIDB4JTA0eDogJTAyeCIsCi0JCSAgICAgICBtb2RlLCByZXQpOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIFJYX0NUTCBtb2RlIHRvIDB4JTA0eDogJTAyeFxuIiwKKwkJCSAgIG1vZGUsIHJldCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtNDkzLDcgKzQ5Niw4IEBACiAJaW50IHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9NRURJVU1fU1RBVFVTLCAwLCAwLCAyLCAmdik7CiAKIAlpZiAocmV0IDwgMCkgewotCQlkZXZlcnIoZGV2LCAiRXJyb3IgcmVhZGluZyBNZWRpdW0gU3RhdHVzIHJlZ2lzdGVyOiAlMDJ4IiwgcmV0KTsKKwkJbmV0ZGV2X2VycihkZXYtPm5ldCwgIkVycm9yIHJlYWRpbmcgTWVkaXVtIFN0YXR1cyByZWdpc3RlcjogJTAyeFxuIiwKKwkJCSAgIHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIAlyZXQgPSBsZTE2X3RvX2NwdSh2KTsKQEAgLTUwNSwxMSArNTA5LDExIEBACiB7CiAJaW50IHJldDsKIAotCWRldmRiZyhkZXYsImFzaXhfd3JpdGVfbWVkaXVtX21vZGUoKSAtIG1vZGUgPSAweCUwNHgiLCBtb2RlKTsKKwluZXRkZXZfZGJnKGRldi0+bmV0LCAiYXNpeF93cml0ZV9tZWRpdW1fbW9kZSgpIC0gbW9kZSA9IDB4JTA0eFxuIiwgbW9kZSk7CiAJcmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTUVESVVNX01PREUsIG1vZGUsIDAsIDAsIE5VTEwpOwogCWlmIChyZXQgPCAwKQotCQlkZXZlcnIoZGV2LCAiRmFpbGVkIHRvIHdyaXRlIE1lZGl1bSBNb2RlIG1vZGUgdG8gMHglMDR4OiAlMDJ4IiwKLQkJCW1vZGUsIHJldCk7CisJCW5ldGRldl9lcnIoZGV2LT5uZXQsICJGYWlsZWQgdG8gd3JpdGUgTWVkaXVtIE1vZGUgbW9kZSB0byAweCUwNHg6ICUwMnhcbiIsCisJCQkgICBtb2RlLCByZXQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTUxOCwxMSArNTIyLDExIEBACiB7CiAJaW50IHJldDsKIAotCWRldmRiZyhkZXYsImFzaXhfd3JpdGVfZ3BpbygpIC0gdmFsdWUgPSAweCUwNHgiLCB2YWx1ZSk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImFzaXhfd3JpdGVfZ3BpbygpIC0gdmFsdWUgPSAweCUwNHhcbiIsIHZhbHVlKTsKIAlyZXQgPSBhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9HUElPUywgdmFsdWUsIDAsIDAsIE5VTEwpOwogCWlmIChyZXQgPCAwKQotCQlkZXZlcnIoZGV2LCAiRmFpbGVkIHRvIHdyaXRlIEdQSU8gdmFsdWUgMHglMDR4OiAlMDJ4IiwKLQkJCXZhbHVlLCByZXQpOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIEdQSU8gdmFsdWUgMHglMDR4OiAlMDJ4XG4iLAorCQkJICAgdmFsdWUsIHJldCk7CiAKIAlpZiAoc2xlZXApCiAJCW1zbGVlcChzbGVlcCk7CkBAIC01NDIsMjkgKzU0NiwyNyBAQAogCWlmIChuZXQtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJcnhfY3RsIHw9IEFYX1JYX0NUTF9QUk87CiAJfSBlbHNlIGlmIChuZXQtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8Ci0JCSAgIG5ldC0+bWNfY291bnQgPiBBWF9NQVhfTUNBU1QpIHsKKwkJICAgbmV0ZGV2X21jX2NvdW50KG5ldCkgPiBBWF9NQVhfTUNBU1QpIHsKIAkJcnhfY3RsIHw9IEFYX1JYX0NUTF9BTUFMTDsKLQl9IGVsc2UgaWYgKG5ldC0+bWNfY291bnQgPT0gMCkgeworCX0gZWxzZSBpZiAobmV0ZGV2X21jX2VtcHR5KG5ldCkpIHsKIAkJLyoganVzdCBicm9hZGNhc3QgYW5kIGRpcmVjdGVkICovCiAJfSBlbHNlIHsKIAkJLyogV2UgdXNlIHRoZSAyMCBieXRlIGRldi0+ZGF0YQogCQkgKiBmb3Igb3VyIDggYnl0ZSBmaWx0ZXIgYnVmZmVyCiAJCSAqIHRvIGF2b2lkIGFsbG9jYXRpbmcgbWVtb3J5IHRoYXQKIAkJICogaXMgdHJpY2t5IHRvIGZyZWUgbGF0ZXIgKi8KLQkJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0ID0gbmV0LT5tY19saXN0OworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3Q7CiAJCXUzMiBjcmNfYml0czsKLQkJaW50IGk7CiAKIAkJbWVtc2V0KGRhdGEtPm11bHRpX2ZpbHRlciwgMCwgQVhfTUNBU1RfRklMVEVSX1NJWkUpOwogCiAJCS8qIEJ1aWxkIHRoZSBtdWx0aWNhc3QgaGFzaCBmaWx0ZXIuICovCi0JCWZvciAoaSA9IDA7IGkgPCBuZXQtPm1jX2NvdW50OyBpKyspIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfbGlzdCwgbmV0KSB7CiAJCQljcmNfYml0cyA9CiAJCQkgICAgZXRoZXJfY3JjKEVUSF9BTEVOLAogCQkJCSAgICAgIG1jX2xpc3QtPmRtaV9hZGRyKSA+PiAyNjsKIAkJCWRhdGEtPm11bHRpX2ZpbHRlcltjcmNfYml0cyA+PiAzXSB8PQogCQkJICAgIDEgPDwgKGNyY19iaXRzICYgNyk7Ci0JCQltY19saXN0ID0gbWNfbGlzdC0+bmV4dDsKIAkJfQogCiAJCWFzaXhfd3JpdGVfY21kX2FzeW5jKGRldiwgQVhfQ01EX1dSSVRFX01VTFRJX0ZJTFRFUiwgMCwgMCwKQEAgLTU4OCw3ICs1OTAsOCBAQAogCWFzaXhfc2V0X2h3X21paShkZXYpOwogCW11dGV4X3VubG9jaygmZGV2LT5waHlfbXV0ZXgpOwogCi0JZGV2ZGJnKGRldiwgImFzaXhfbWRpb19yZWFkKCkgcGh5X2lkPTB4JTAyeCwgbG9jPTB4JTAyeCwgcmV0dXJucz0weCUwNHgiLCBwaHlfaWQsIGxvYywgbGUxNl90b19jcHUocmVzKSk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImFzaXhfbWRpb19yZWFkKCkgcGh5X2lkPTB4JTAyeCwgbG9jPTB4JTAyeCwgcmV0dXJucz0weCUwNHhcbiIsCisJCSAgIHBoeV9pZCwgbG9jLCBsZTE2X3RvX2NwdShyZXMpKTsKIAogCXJldHVybiBsZTE2X3RvX2NwdShyZXMpOwogfQpAQCAtNTk5LDcgKzYwMiw4IEBACiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlfX2xlMTYgcmVzID0gY3B1X3RvX2xlMTYodmFsKTsKIAotCWRldmRiZyhkZXYsICJhc2l4X21kaW9fd3JpdGUoKSBwaHlfaWQ9MHglMDJ4LCBsb2M9MHglMDJ4LCB2YWw9MHglMDR4IiwgcGh5X2lkLCBsb2MsIHZhbCk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImFzaXhfbWRpb193cml0ZSgpIHBoeV9pZD0weCUwMngsIGxvYz0weCUwMngsIHZhbD0weCUwNHhcbiIsCisJCSAgIHBoeV9pZCwgbG9jLCB2YWwpOwogCW11dGV4X2xvY2soJmRldi0+cGh5X211dGV4KTsKIAlhc2l4X3NldF9zd19taWkoZGV2KTsKIAlhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NSUlfUkVHLCBwaHlfaWQsIChfX3UxNilsb2MsIDIsICZyZXMpOwpAQCAtNzU0LDI5ICs3NTgsMjcgQEAKIAlpZiAobmV0LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCXJ4X2N0bCB8PSAweDAxOwogCX0gZWxzZSBpZiAobmV0LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fAotCQkgICBuZXQtPm1jX2NvdW50ID4gQVhfTUFYX01DQVNUKSB7CisJCSAgIG5ldGRldl9tY19jb3VudChuZXQpID4gQVhfTUFYX01DQVNUKSB7CiAJCXJ4X2N0bCB8PSAweDAyOwotCX0gZWxzZSBpZiAobmV0LT5tY19jb3VudCA9PSAwKSB7CisJfSBlbHNlIGlmIChuZXRkZXZfbWNfZW1wdHkobmV0KSkgewogCQkvKiBqdXN0IGJyb2FkY2FzdCBhbmQgZGlyZWN0ZWQgKi8KIAl9IGVsc2UgewogCQkvKiBXZSB1c2UgdGhlIDIwIGJ5dGUgZGV2LT5kYXRhCiAJCSAqIGZvciBvdXIgOCBieXRlIGZpbHRlciBidWZmZXIKIAkJICogdG8gYXZvaWQgYWxsb2NhdGluZyBtZW1vcnkgdGhhdAogCQkgKiBpcyB0cmlja3kgdG8gZnJlZSBsYXRlciAqLwotCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3QgPSBuZXQtPm1jX2xpc3Q7CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdDsKIAkJdTMyIGNyY19iaXRzOwotCQlpbnQgaTsKIAogCQltZW1zZXQoZGF0YS0+bXVsdGlfZmlsdGVyLCAwLCBBWF9NQ0FTVF9GSUxURVJfU0laRSk7CiAKIAkJLyogQnVpbGQgdGhlIG11bHRpY2FzdCBoYXNoIGZpbHRlci4gKi8KLQkJZm9yIChpID0gMDsgaSA8IG5ldC0+bWNfY291bnQ7IGkrKykgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19saXN0LCBuZXQpIHsKIAkJCWNyY19iaXRzID0KIAkJCSAgICBldGhlcl9jcmMoRVRIX0FMRU4sCiAJCQkJICAgICAgbWNfbGlzdC0+ZG1pX2FkZHIpID4+IDI2OwogCQkJZGF0YS0+bXVsdGlfZmlsdGVyW2NyY19iaXRzID4+IDNdIHw9CiAJCQkgICAgMSA8PCAoY3JjX2JpdHMgJiA3KTsKLQkJCW1jX2xpc3QgPSBtY19saXN0LT5uZXh0OwogCQl9CiAKIAkJYXNpeF93cml0ZV9jbWRfYXN5bmMoZGV2LCBBWF9DTURfV1JJVEVfTVVMVElfRklMVEVSLCAwLCAwLApAQCAtODAwLDcgKzgwMiw4IEBACiAJaWYgKGVjbWQuZHVwbGV4ICE9IERVUExFWF9GVUxMKQogCQltb2RlIHw9IH5BWDg4MTcyX01FRElVTV9GRDsKIAotCWRldmRiZyhkZXYsICJheDg4MTcyX2xpbmtfcmVzZXQoKSBzcGVlZDogJWQgZHVwbGV4OiAlZCBzZXR0aW5nIG1vZGUgdG8gMHglMDR4IiwgZWNtZC5zcGVlZCwgZWNtZC5kdXBsZXgsIG1vZGUpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJheDg4MTcyX2xpbmtfcmVzZXQoKSBzcGVlZDogJWQgZHVwbGV4OiAlZCBzZXR0aW5nIG1vZGUgdG8gMHglMDR4XG4iLAorCQkgICBlY21kLnNwZWVkLCBlY21kLmR1cGxleCwgbW9kZSk7CiAKIAlhc2l4X3dyaXRlX21lZGl1bV9tb2RlKGRldiwgbW9kZSk7CiAKQEAgLTkwMiw3ICs5MDUsOCBAQAogCWlmIChlY21kLmR1cGxleCAhPSBEVVBMRVhfRlVMTCkKIAkJbW9kZSAmPSB+QVhfTUVESVVNX0ZEOwogCi0JZGV2ZGJnKGRldiwgImF4ODg3NzJfbGlua19yZXNldCgpIHNwZWVkOiAlZCBkdXBsZXg6ICVkIHNldHRpbmcgbW9kZSB0byAweCUwNHgiLCBlY21kLnNwZWVkLCBlY21kLmR1cGxleCwgbW9kZSk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImF4ODg3NzJfbGlua19yZXNldCgpIHNwZWVkOiAlZCBkdXBsZXg6ICVkIHNldHRpbmcgbW9kZSB0byAweCUwNHhcbiIsCisJCSAgIGVjbWQuc3BlZWQsIGVjbWQuZHVwbGV4LCBtb2RlKTsKIAogCWFzaXhfd3JpdGVfbWVkaXVtX21vZGUoZGV2LCBtb2RlKTsKIApAQCAtMTA1OSwxMCArMTA2MywxMCBAQAogCXN0cnVjdCBhc2l4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGFzaXhfZGF0YSAqKSZkZXYtPmRhdGE7CiAJdTE2IHJlZzsKIAotCWRldmRiZyhkZXYsIm1hcnZlbGxfcGh5X2luaXQoKSIpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJtYXJ2ZWxsX3BoeV9pbml0KClcbiIpOwogCiAJcmVnID0gYXNpeF9tZGlvX3JlYWQoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX01BUlZFTExfU1RBVFVTKTsKLQlkZXZkYmcoZGV2LCJNSUlfTUFSVkVMTF9TVEFUVVMgPSAweCUwNHgiLCByZWcpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJNSUlfTUFSVkVMTF9TVEFUVVMgPSAweCUwNHhcbiIsIHJlZyk7CiAKIAlhc2l4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX01BUlZFTExfQ1RSTCwKIAkJCU1BUlZFTExfQ1RSTF9SWERFTEFZIHwgTUFSVkVMTF9DVFJMX1RYREVMQVkpOwpAQCAtMTA3MCw3ICsxMDc0LDcgQEAKIAlpZiAoZGF0YS0+bGVkbW9kZSkgewogCQlyZWcgPSBhc2l4X21kaW9fcmVhZChkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLAogCQkJTUlJX01BUlZFTExfTEVEX0NUUkwpOwotCQlkZXZkYmcoZGV2LCJNSUlfTUFSVkVMTF9MRURfQ1RSTCAoMSkgPSAweCUwNHgiLCByZWcpOworCQluZXRkZXZfZGJnKGRldi0+bmV0LCAiTUlJX01BUlZFTExfTEVEX0NUUkwgKDEpID0gMHglMDR4XG4iLCByZWcpOwogCiAJCXJlZyAmPSAweGY4ZmY7CiAJCXJlZyB8PSAoMSArIDB4MDEwMCk7CkBAIC0xMDc5LDcgKzEwODMsNyBAQAogCiAJCXJlZyA9IGFzaXhfbWRpb19yZWFkKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsCiAJCQlNSUlfTUFSVkVMTF9MRURfQ1RSTCk7Ci0JCWRldmRiZyhkZXYsIk1JSV9NQVJWRUxMX0xFRF9DVFJMICgyKSA9IDB4JTA0eCIsIHJlZyk7CisJCW5ldGRldl9kYmcoZGV2LT5uZXQsICJNSUlfTUFSVkVMTF9MRURfQ1RSTCAoMikgPSAweCUwNHhcbiIsIHJlZyk7CiAJCXJlZyAmPSAweGZjMGY7CiAJfQogCkBAIC0xMDkwLDcgKzEwOTQsNyBAQAogewogCXUxNiByZWcgPSBhc2l4X21kaW9fcmVhZChkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNQVJWRUxMX0xFRF9NQU5VQUwpOwogCi0JZGV2ZGJnKGRldiwgIm1hcnZlbGxfbGVkX3N0YXR1cygpIHJlYWQgMHglMDR4IiwgcmVnKTsKKwluZXRkZXZfZGJnKGRldi0+bmV0LCAibWFydmVsbF9sZWRfc3RhdHVzKCkgcmVhZCAweCUwNHhcbiIsIHJlZyk7CiAKIAkvKiBDbGVhciBvdXQgdGhlIGNlbnRlciBMRUQgYml0cyAtIDB4MDNGMCAqLwogCXJlZyAmPSAweGZjMGY7CkBAIC0xMTA2LDcgKzExMTAsNyBAQAogCQkJcmVnIHw9IDB4MDJmMDsKIAl9CiAKLQlkZXZkYmcoZGV2LCAibWFydmVsbF9sZWRfc3RhdHVzKCkgd3JpdGluZyAweCUwNHgiLCByZWcpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJtYXJ2ZWxsX2xlZF9zdGF0dXMoKSB3cml0aW5nIDB4JTA0eFxuIiwgcmVnKTsKIAlhc2l4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUFSVkVMTF9MRURfTUFOVUFMLCByZWcpOwogCiAJcmV0dXJuIDA7CkBAIC0xMTE4LDcgKzExMjIsNyBAQAogCXN0cnVjdCBldGh0b29sX2NtZCBlY21kOwogCXN0cnVjdCBhc2l4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGFzaXhfZGF0YSAqKSZkZXYtPmRhdGE7CiAKLQlkZXZkYmcoZGV2LCJheDg4MTc4X2xpbmtfcmVzZXQoKSIpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJheDg4MTc4X2xpbmtfcmVzZXQoKVxuIik7CiAKIAltaWlfY2hlY2tfbWVkaWEoJmRldi0+bWlpLCAxLCAxKTsKIAltaWlfZXRodG9vbF9nc2V0KCZkZXYtPm1paSwgJmVjbWQpOwpAQCAtMTEzOCw3ICsxMTQyLDggQEAKIAllbHNlCiAJCW1vZGUgJj0gfkFYX01FRElVTV9GRDsKIAotCWRldmRiZyhkZXYsICJheDg4MTc4X2xpbmtfcmVzZXQoKSBzcGVlZDogJWQgZHVwbGV4OiAlZCBzZXR0aW5nIG1vZGUgdG8gMHglMDR4IiwgZWNtZC5zcGVlZCwgZWNtZC5kdXBsZXgsIG1vZGUpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJheDg4MTc4X2xpbmtfcmVzZXQoKSBzcGVlZDogJWQgZHVwbGV4OiAlZCBzZXR0aW5nIG1vZGUgdG8gMHglMDR4XG4iLAorCQkgICBlY21kLnNwZWVkLCBlY21kLmR1cGxleCwgbW9kZSk7CiAKIAlhc2l4X3dyaXRlX21lZGl1bV9tb2RlKGRldiwgbW9kZSk7CiAKQEAgLTExODgsNyArMTE5Myw3IEBACiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQgbGxfbXR1ID0gbmV3X210dSArIG5ldC0+aGFyZF9oZWFkZXJfbGVuICsgNDsKIAotCWRldmRiZyhkZXYsICJheDg4MTc4X2NoYW5nZV9tdHUoKSBuZXdfbXR1PSVkIiwgbmV3X210dSk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImF4ODgxNzhfY2hhbmdlX210dSgpIG5ld19tdHU9JWRcbiIsIG5ld19tdHUpOwogCiAJaWYgKG5ld19tdHUgPD0gMCB8fCBsbF9tdHUgPiAxNjM4NCkKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jIGIvZHJpdmVycy9uZXQvdXNiL2NhdGMuYwppbmRleCAyMmI4N2U2Li45NmYxZWJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2F0Yy5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jYXRjLmMKQEAgLTYzMiw3ICs2MzIsNiBAQAogCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWM7CiAJdTggYnJvYWRjYXN0WzZdOwogCXU4IHJ4ID0gUnhFbmFibGUgfCBSeFBvbGFyaXR5IHwgUnhNdWx0aUNhc3Q7Ci0JaW50IGk7CiAKIAltZW1zZXQoYnJvYWRjYXN0LCAweGZmLCA2KTsKIAltZW1zZXQoY2F0Yy0+bXVsdGljYXN0LCAwLCA2NCk7CkBAIC02NDgsNyArNjQ3LDcgQEAKIAlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgewogCQltZW1zZXQoY2F0Yy0+bXVsdGljYXN0LCAweGZmLCA2NCk7CiAJfSBlbHNlIHsKLQkJZm9yIChpID0gMCwgbWMgPSBuZXRkZXYtPm1jX2xpc3Q7IG1jICYmIGkgPCBuZXRkZXYtPm1jX2NvdW50OyBpKyssIG1jID0gbWMtPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWMsIG5ldGRldikgewogCQkJdTMyIGNyYyA9IGV0aGVyX2NyY19sZSg2LCBtYy0+ZG1pX2FkZHIpOwogCQkJaWYgKCFjYXRjLT5pc19mNXUwMTEpIHsKIAkJCQljYXRjLT5tdWx0aWNhc3RbKGNyYyA+PiAzKSAmIDB4M2ZdIHw9IDEgPDwgKGNyYyAmIDcpOwpAQCAtODk3LDExICs4OTYsOSBAQAogCQlmNXUwMTFfcnhtb2RlKGNhdGMsIGNhdGMtPnJ4bW9kZSk7CiAJfQogCWRiZygiSW5pdCBkb25lLiIpOwotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBVU0IgRXRoZXJuZXQgYXQgdXNiLSVzLSVzLCAiLAorCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyBVU0IgRXRoZXJuZXQgYXQgdXNiLSVzLSVzLCAlcE0uXG4iLAogCSAgICAgICBuZXRkZXYtPm5hbWUsIChjYXRjLT5pc19mNXUwMTEpID8gIkJlbGtpbiBGNVUwMTEiIDogIkNBVEMgRUwxMjEwQSBOZXRNYXRlIiwKLQkgICAgICAgdXNiZGV2LT5idXMtPmJ1c19uYW1lLCB1c2JkZXYtPmRldnBhdGgpOwotCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHByaW50aygiJTIuMng6IiwgbmV0ZGV2LT5kZXZfYWRkcltpXSk7Ci0JcHJpbnRrKCIlMi4yeC5cbiIsIG5ldGRldi0+ZGV2X2FkZHJbaV0pOworCSAgICAgICB1c2JkZXYtPmJ1cy0+YnVzX25hbWUsIHVzYmRldi0+ZGV2cGF0aCwgbmV0ZGV2LT5kZXZfYWRkcik7CiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBjYXRjKTsKIAogCVNFVF9ORVRERVZfREVWKG5ldGRldiwgJmludGYtPmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvY2RjX2VlbS5jIGIvZHJpdmVycy9uZXQvdXNiL2NkY19lZW0uYwppbmRleCBjMzM3ZmZjLi5hNGE4NWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvY2RjX2VlbS5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9jZGNfZWVtLmMKQEAgLTczLDcgKzczLDcgQEAKIAkJdXNiX2ZyZWVfdXJiKHVyYik7CiBmYWlsOgogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCWRldndhcm4oZGV2LCAibGluayBjbWQgZmFpbHVyZVxuIik7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAibGluayBjbWQgZmFpbHVyZVxuIik7CiAJCXJldHVybjsKIAl9CiB9CkBAIC0yMTIsNyArMjEyLDggQEAKIAkJCSAqIGIxNToJCTEgKEVFTSBjb21tYW5kKQogCQkJICovCiAJCQlpZiAoaGVhZGVyICYgQklUKDE0KSkgewotCQkJCWRldmRiZyhkZXYsICJyZXNlcnZlZCBjb21tYW5kICUwNHhcbiIsIGhlYWRlcik7CisJCQkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgInJlc2VydmVkIGNvbW1hbmQgJTA0eFxuIiwKKwkJCQkJICAgaGVhZGVyKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIApAQCAtMjU1LDggKzI1Niw5IEBACiAJCQljYXNlIDE6CQkvKiBFY2hvIHJlc3BvbnNlICovCiAJCQljYXNlIDU6CQkvKiBUaWNrbGUgKi8KIAkJCWRlZmF1bHQ6CS8qIHJlc2VydmVkICovCi0JCQkJZGV2d2FybihkZXYsICJ1bmV4cGVjdGVkIGxpbmsgY29tbWFuZCAlZFxuIiwKLQkJCQkJCWJtRUVNQ21kKTsKKwkJCQluZXRkZXZfd2FybihkZXYtPm5ldCwKKwkJCQkJICAgICJ1bmV4cGVjdGVkIGxpbmsgY29tbWFuZCAlZFxuIiwKKwkJCQkJICAgIGJtRUVNQ21kKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jIGIvZHJpdmVycy9uZXQvdXNiL2NkY19ldGhlci5jCmluZGV4IDVmM2I5ZWEuLmM4Y2RiN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9jZGNfZXRoZXIuYworKysgYi9kcml2ZXJzL25ldC91c2IvY2RjX2V0aGVyLmMKQEAgLTMzOSwxMCArMzM5LDEwIEBACiAKIHN0YXRpYyB2b2lkIGR1bXBzcGVlZChzdHJ1Y3QgdXNibmV0ICpkZXYsIF9fbGUzMiAqc3BlZWRzKQogewotCWlmIChuZXRpZl9tc2dfdGltZXIoZGV2KSkKLQkJZGV2aW5mbyhkZXYsICJsaW5rIHNwZWVkczogJXUga2JwcyB1cCwgJXUga2JwcyBkb3duIiwKLQkJCV9fbGUzMl90b19jcHUoc3BlZWRzWzBdKSAvIDEwMDAsCi0JCV9fbGUzMl90b19jcHUoc3BlZWRzWzFdKSAvIDEwMDApOworCW5ldGlmX2luZm8oZGV2LCB0aW1lciwgZGV2LT5uZXQsCisJCSAgICJsaW5rIHNwZWVkczogJXUga2JwcyB1cCwgJXUga2JwcyBkb3duXG4iLAorCQkgICBfX2xlMzJfdG9fY3B1KHNwZWVkc1swXSkgLyAxMDAwLAorCQkgICBfX2xlMzJfdG9fY3B1KHNwZWVkc1sxXSkgLyAxMDAwKTsKIH0KIAogc3RhdGljIHZvaWQgY2RjX3N0YXR1cyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1cmIgKnVyYikKQEAgLTM2MSwxOCArMzYxLDE2IEBACiAJZXZlbnQgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAlzd2l0Y2ggKGV2ZW50LT5iTm90aWZpY2F0aW9uVHlwZSkgewogCWNhc2UgVVNCX0NEQ19OT1RJRllfTkVUV09SS19DT05ORUNUSU9OOgotCQlpZiAobmV0aWZfbXNnX3RpbWVyKGRldikpCi0JCQlkZXZkYmcoZGV2LCAiQ0RDOiBjYXJyaWVyICVzIiwKLQkJCQkJZXZlbnQtPndWYWx1ZSA/ICJvbiIgOiAib2ZmIik7CisJCW5ldGlmX2RiZyhkZXYsIHRpbWVyLCBkZXYtPm5ldCwgIkNEQzogY2FycmllciAlc1xuIiwKKwkJCSAgZXZlbnQtPndWYWx1ZSA/ICJvbiIgOiAib2ZmIik7CiAJCWlmIChldmVudC0+d1ZhbHVlKQogCQkJbmV0aWZfY2Fycmllcl9vbihkZXYtPm5ldCk7CiAJCWVsc2UKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldi0+bmV0KTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfQ0RDX05PVElGWV9TUEVFRF9DSEFOR0U6CS8qIHR4L3J4IHJhdGVzICovCi0JCWlmIChuZXRpZl9tc2dfdGltZXIoZGV2KSkKLQkJCWRldmRiZyhkZXYsICJDREM6IHNwZWVkIGNoYW5nZSAobGVuICVkKSIsCi0JCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCW5ldGlmX2RiZyhkZXYsIHRpbWVyLCBkZXYtPm5ldCwgIkNEQzogc3BlZWQgY2hhbmdlIChsZW4gJWQpXG4iLAorCQkJICB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoICE9IChzaXplb2YgKmV2ZW50ICsgOCkpCiAJCQlzZXRfYml0KEVWRU5UX1NUU19TUExJVCwgJmRldi0+ZmxhZ3MpOwogCQllbHNlCkBAIC0zODIsOCArMzgwLDggQEAKIAkgKiBidXQgdGhlcmUgYXJlIG5vIHN0YW5kYXJkIGZvcm1hdHMgZm9yIHRoZSByZXNwb25zZSBkYXRhLgogCSAqLwogCWRlZmF1bHQ6Ci0JCWRldmVycihkZXYsICJDREM6IHVuZXhwZWN0ZWQgbm90aWZpY2F0aW9uICUwMnghIiwKLQkJCQkgZXZlbnQtPmJOb3RpZmljYXRpb25UeXBlKTsKKwkJbmV0ZGV2X2VycihkZXYtPm5ldCwgIkNEQzogdW5leHBlY3RlZCBub3RpZmljYXRpb24gJTAyeCFcbiIsCisJCQkgICBldmVudC0+Yk5vdGlmaWNhdGlvblR5cGUpOwogCQlicmVhazsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMgYi9kcml2ZXJzL25ldC91c2IvZG05NjAxLmMKaW5kZXggM2Q0MDZmOS4uMjY5MzM5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2RtOTYwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9kbTk2MDEuYwpAQCAtNTgsNyArNTgsNyBAQAogCXZvaWQgKmJ1ZjsKIAlpbnQgZXJyID0gLUVOT01FTTsKIAotCWRldmRiZyhkZXYsICJkbV9yZWFkKCkgcmVnPTB4JTAyeCBsZW5ndGg9JWQiLCByZWcsIGxlbmd0aCk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImRtX3JlYWQoKSByZWc9MHglMDJ4IGxlbmd0aD0lZFxuIiwgcmVnLCBsZW5ndGgpOwogCiAJYnVmID0ga21hbGxvYyhsZW5ndGgsIEdGUF9LRVJORUwpOwogCWlmICghYnVmKQpAQCAtODksNyArODksNyBAQAogCXZvaWQgKmJ1ZiA9IE5VTEw7CiAJaW50IGVyciA9IC1FTk9NRU07CiAKLQlkZXZkYmcoZGV2LCAiZG1fd3JpdGUoKSByZWc9MHglMDJ4LCBsZW5ndGg9JWQiLCByZWcsIGxlbmd0aCk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImRtX3dyaXRlKCkgcmVnPTB4JTAyeCwgbGVuZ3RoPSVkXG4iLCByZWcsIGxlbmd0aCk7CiAKIAlpZiAoZGF0YSkgewogCQlidWYgPSBrbWFsbG9jKGxlbmd0aCwgR0ZQX0tFUk5FTCk7CkBAIC0xMTIsNyArMTEyLDggQEAKIAogc3RhdGljIGludCBkbV93cml0ZV9yZWcoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCByZWcsIHU4IHZhbHVlKQogewotCWRldmRiZyhkZXYsICJkbV93cml0ZV9yZWcoKSByZWc9MHglMDJ4LCB2YWx1ZT0weCUwMngiLCByZWcsIHZhbHVlKTsKKwluZXRkZXZfZGJnKGRldi0+bmV0LCAiZG1fd3JpdGVfcmVnKCkgcmVnPTB4JTAyeCwgdmFsdWU9MHglMDJ4XG4iLAorCQkgICByZWcsIHZhbHVlKTsKIAlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKIAkJCSAgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKIAkJCSAgICAgICBETV9XUklURV9SRUcsCkBAIC0xNDIsMTMgKzE0MywxMyBAQAogCiAJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXVyYikgewotCQlkZXZlcnIoZGV2LCAiRXJyb3IgYWxsb2NhdGluZyBVUkIgaW4gZG1fd3JpdGVfYXN5bmNfaGVscGVyISIpOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAiRXJyb3IgYWxsb2NhdGluZyBVUkIgaW4gZG1fd3JpdGVfYXN5bmNfaGVscGVyIVxuIik7CiAJCXJldHVybjsKIAl9CiAKIAlyZXEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0KSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFyZXEpIHsKLQkJZGV2ZXJyKGRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbnRyb2wgcmVxdWVzdCIpOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgY29udHJvbCByZXF1ZXN0XG4iKTsKIAkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJCXJldHVybjsKIAl9CkBAIC0xNjYsOCArMTY3LDggQEAKIAogCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHN0YXR1cyA8IDApIHsKLQkJZGV2ZXJyKGRldiwgIkVycm9yIHN1Ym1pdHRpbmcgdGhlIGNvbnRyb2wgbWVzc2FnZTogc3RhdHVzPSVkIiwKLQkJICAgICAgIHN0YXR1cyk7CisJCW5ldGRldl9lcnIoZGV2LT5uZXQsICJFcnJvciBzdWJtaXR0aW5nIHRoZSBjb250cm9sIG1lc3NhZ2U6IHN0YXR1cz0lZFxuIiwKKwkJCSAgIHN0YXR1cyk7CiAJCWtmcmVlKHJlcSk7CiAJCXVzYl9mcmVlX3VyYih1cmIpOwogCX0KQEAgLTE3NSwxNSArMTc2LDE1IEBACiAKIHN0YXRpYyB2b2lkIGRtX3dyaXRlX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggcmVnLCB1MTYgbGVuZ3RoLCB2b2lkICpkYXRhKQogewotCWRldmRiZyhkZXYsICJkbV93cml0ZV9hc3luYygpIHJlZz0weCUwMnggbGVuZ3RoPSVkIiwgcmVnLCBsZW5ndGgpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJkbV93cml0ZV9hc3luYygpIHJlZz0weCUwMnggbGVuZ3RoPSVkXG4iLCByZWcsIGxlbmd0aCk7CiAKIAlkbV93cml0ZV9hc3luY19oZWxwZXIoZGV2LCByZWcsIDAsIGxlbmd0aCwgZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRtX3dyaXRlX3JlZ19hc3luYyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IHJlZywgdTggdmFsdWUpCiB7Ci0JZGV2ZGJnKGRldiwgImRtX3dyaXRlX3JlZ19hc3luYygpIHJlZz0weCUwMnggdmFsdWU9MHglMDJ4IiwKLQkgICAgICAgcmVnLCB2YWx1ZSk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImRtX3dyaXRlX3JlZ19hc3luYygpIHJlZz0weCUwMnggdmFsdWU9MHglMDJ4XG4iLAorCQkgICByZWcsIHZhbHVlKTsKIAogCWRtX3dyaXRlX2FzeW5jX2hlbHBlcihkZXYsIHJlZywgdmFsdWUsIDAsIE5VTEwpOwogfQpAQCAtMjExLDcgKzIxMiw3IEBACiAJfQogCiAJaWYgKGkgPT0gRE1fVElNRU9VVCkgewotCQlkZXZlcnIoZGV2LCAiJXMgcmVhZCB0aW1lZCBvdXQhIiwgcGh5ID8gInBoeSIgOiAiZWVwcm9tIik7CisJCW5ldGRldl9lcnIoZGV2LT5uZXQsICIlcyByZWFkIHRpbWVkIG91dCFcbiIsIHBoeSA/ICJwaHkiIDogImVlcHJvbSIpOwogCQlyZXQgPSAtRUlPOwogCQlnb3RvIG91dDsKIAl9CkBAIC0yMTksOCArMjIwLDggQEAKIAlkbV93cml0ZV9yZWcoZGV2LCBETV9TSEFSRURfQ1RSTCwgMHgwKTsKIAlyZXQgPSBkbV9yZWFkKGRldiwgRE1fU0hBUkVEX0RBVEEsIDIsIHZhbHVlKTsKIAotCWRldmRiZyhkZXYsICJyZWFkIHNoYXJlZCAlZCAweCUwMnggcmV0dXJuZWQgMHglMDR4LCAlZCIsCi0JICAgICAgIHBoeSwgcmVnLCAqdmFsdWUsIHJldCk7CisJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgInJlYWQgc2hhcmVkICVkIDB4JTAyeCByZXR1cm5lZCAweCUwNHgsICVkXG4iLAorCQkgICBwaHksIHJlZywgKnZhbHVlLCByZXQpOwogCiAgb3V0OgogCW11dGV4X3VubG9jaygmZGV2LT5waHlfbXV0ZXgpOwpAQCAtMjU0LDcgKzI1NSw3IEBACiAJfQogCiAJaWYgKGkgPT0gRE1fVElNRU9VVCkgewotCQlkZXZlcnIoZGV2LCAiJXMgd3JpdGUgdGltZWQgb3V0ISIsIHBoeSA/ICJwaHkiIDogImVlcHJvbSIpOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAiJXMgd3JpdGUgdGltZWQgb3V0IVxuIiwgcGh5ID8gInBoeSIgOiAiZWVwcm9tIik7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTMwNCwxNSArMzA1LDE1IEBACiAJX19sZTE2IHJlczsKIAogCWlmIChwaHlfaWQpIHsKLQkJZGV2ZGJnKGRldiwgIk9ubHkgaW50ZXJuYWwgcGh5IHN1cHBvcnRlZCIpOworCQluZXRkZXZfZGJnKGRldi0+bmV0LCAiT25seSBpbnRlcm5hbCBwaHkgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCiAJZG1fcmVhZF9zaGFyZWRfd29yZChkZXYsIDEsIGxvYywgJnJlcyk7CiAKLQlkZXZkYmcoZGV2LAotCSAgICAgICAiZG05NjAxX21kaW9fcmVhZCgpIHBoeV9pZD0weCUwMngsIGxvYz0weCUwMngsIHJldHVybnM9MHglMDR4IiwKLQkgICAgICAgcGh5X2lkLCBsb2MsIGxlMTZfdG9fY3B1KHJlcykpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsCisJCSAgICJkbTk2MDFfbWRpb19yZWFkKCkgcGh5X2lkPTB4JTAyeCwgbG9jPTB4JTAyeCwgcmV0dXJucz0weCUwNHhcbiIsCisJCSAgIHBoeV9pZCwgbG9jLCBsZTE2X3RvX2NwdShyZXMpKTsKIAogCXJldHVybiBsZTE2X3RvX2NwdShyZXMpOwogfQpAQCAtMzI0LDEyICszMjUsMTIgQEAKIAlfX2xlMTYgcmVzID0gY3B1X3RvX2xlMTYodmFsKTsKIAogCWlmIChwaHlfaWQpIHsKLQkJZGV2ZGJnKGRldiwgIk9ubHkgaW50ZXJuYWwgcGh5IHN1cHBvcnRlZCIpOworCQluZXRkZXZfZGJnKGRldi0+bmV0LCAiT25seSBpbnRlcm5hbCBwaHkgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWRldmRiZyhkZXYsImRtOTYwMV9tZGlvX3dyaXRlKCkgcGh5X2lkPTB4JTAyeCwgbG9jPTB4JTAyeCwgdmFsPTB4JTA0eCIsCi0JICAgICAgIHBoeV9pZCwgbG9jLCB2YWwpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJkbTk2MDFfbWRpb193cml0ZSgpIHBoeV9pZD0weCUwMngsIGxvYz0weCUwMngsIHZhbD0weCUwNHhcbiIsCisJCSAgIHBoeV9pZCwgbG9jLCB2YWwpOwogCiAJZG1fd3JpdGVfc2hhcmVkX3dvcmQoZGV2LCAxLCBsb2MsIHJlcyk7CiB9CkBAIC0zODEsMTMgKzM4MiwxMyBAQAogCiAJaWYgKG5ldC0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQlyeF9jdGwgfD0gMHgwMjsKLQl9IGVsc2UgaWYgKG5ldC0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgbmV0LT5tY19jb3VudCA+IERNX01BWF9NQ0FTVCkgeworCX0gZWxzZSBpZiAobmV0LT5mbGFncyAmIElGRl9BTExNVUxUSSB8fAorCQkgICBuZXRkZXZfbWNfY291bnQobmV0KSA+IERNX01BWF9NQ0FTVCkgewogCQlyeF9jdGwgfD0gMHgwNDsKLQl9IGVsc2UgaWYgKG5ldC0+bWNfY291bnQpIHsKLQkJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0ID0gbmV0LT5tY19saXN0OwotCQlpbnQgaTsKKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkobmV0KSkgeworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3Q7CiAKLQkJZm9yIChpID0gMDsgaSA8IG5ldC0+bWNfY291bnQ7IGkrKywgbWNfbGlzdCA9IG1jX2xpc3QtPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfbGlzdCwgbmV0KSB7CiAJCQl1MzIgY3JjID0gZXRoZXJfY3JjKEVUSF9BTEVOLCBtY19saXN0LT5kbWlfYWRkcikgPj4gMjY7CiAJCQloYXNoZXNbY3JjID4+IDNdIHw9IDEgPDwgKGNyYyAmIDB4Nyk7CiAJCX0KQEAgLTU5Miw3ICs1OTMsNyBAQAogCQl9CiAJCWVsc2UKIAkJCW5ldGlmX2NhcnJpZXJfb2ZmKGRldi0+bmV0KTsKLQkJZGV2ZGJnKGRldiwgIkxpbmsgU3RhdHVzIGlzOiAlZCIsIGxpbmspOworCQluZXRkZXZfZGJnKGRldi0+bmV0LCAiTGluayBTdGF0dXMgaXM6ICVkXG4iLCBsaW5rKTsKIAl9CiB9CiAKQEAgLTYwMyw4ICs2MDQsOCBAQAogCW1paV9jaGVja19tZWRpYSgmZGV2LT5taWksIDEsIDEpOwogCW1paV9ldGh0b29sX2dzZXQoJmRldi0+bWlpLCAmZWNtZCk7CiAKLQlkZXZkYmcoZGV2LCAibGlua19yZXNldCgpIHNwZWVkOiAlZCBkdXBsZXg6ICVkIiwKLQkgICAgICAgZWNtZC5zcGVlZCwgZWNtZC5kdXBsZXgpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJsaW5rX3Jlc2V0KCkgc3BlZWQ6ICVkIGR1cGxleDogJWRcbiIsCisJCSAgIGVjbWQuc3BlZWQsIGVjbWQuZHVwbGV4KTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2ludDUxeDEuYyBiL2RyaXZlcnMvbmV0L3VzYi9pbnQ1MXgxLmMKaW5kZXggNTVjZjcwOC4uM2MyMjhkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2ludDUxeDEuYworKysgYi9kcml2ZXJzL25ldC91c2IvaW50NTF4MS5jCkBAIC01MSw3ICs1MSw3IEBACiAJaW50IGxlbjsKIAogCWlmICghKHBza2JfbWF5X3B1bGwoc2tiLCBJTlQ1MVgxX0hFQURFUl9TSVpFKSkpIHsKLQkJZGV2ZXJyKGRldiwgInVuZXhwZWN0ZWQgdGlueSByeCBmcmFtZSIpOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAidW5leHBlY3RlZCB0aW55IHJ4IGZyYW1lXG4iKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xMzgsMjUgKzEzOCwyNSBAQAogCWlmIChuZXRkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJLyogZG8gbm90IGV4cGVjdCB0byBzZWUgdHJhZmZpYyBvZiBvdGhlciBQTENzICovCiAJCWZpbHRlciB8PSBQQUNLRVRfVFlQRV9QUk9NSVNDVU9VUzsKLQkJZGV2aW5mbyhkZXYsICJwcm9taXNjdW91cyBtb2RlIGVuYWJsZWQiKTsKLQl9IGVsc2UgaWYgKG5ldGRldi0+bWNfY291bnQgfHwKKwkJbmV0ZGV2X2luZm8oZGV2LT5uZXQsICJwcm9taXNjdW91cyBtb2RlIGVuYWJsZWRcbiIpOworCX0gZWxzZSBpZiAoIW5ldGRldl9tY19lbXB0eShuZXRkZXYpIHx8CiAJCSAgKG5ldGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCWZpbHRlciB8PSBQQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUOwotCQlkZXZkYmcoZGV2LCAicmVjZWl2ZSBhbGwgbXVsdGljYXN0IGVuYWJsZWQiKTsKKwkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgInJlY2VpdmUgYWxsIG11bHRpY2FzdCBlbmFibGVkXG4iKTsKIAl9IGVsc2UgewogCQkvKiB+UFJPTUlTQ1VPVVMsIH5NVUxUSUNBU1QgKi8KLQkJZGV2ZGJnKGRldiwgInJlY2VpdmUgb3duIHBhY2tldHMgb25seSIpOworCQluZXRkZXZfZGJnKGRldi0+bmV0LCAicmVjZWl2ZSBvd24gcGFja2V0cyBvbmx5XG4iKTsKIAl9CiAKIAl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpOwogCWlmICghdXJiKSB7Ci0JCWRldndhcm4oZGV2LCAiRXJyb3IgYWxsb2NhdGluZyBVUkIiKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJFcnJvciBhbGxvY2F0aW5nIFVSQlxuIik7CiAJCXJldHVybjsKIAl9CiAKIAlyZXEgPSBrbWFsbG9jKHNpemVvZigqcmVxKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFyZXEpIHsKLQkJZGV2d2FybihkZXYsICJFcnJvciBhbGxvY2F0aW5nIGNvbnRyb2wgbXNnIik7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRXJyb3IgYWxsb2NhdGluZyBjb250cm9sIG1zZ1xuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTczLDcgKzE3Myw4IEBACiAKIAlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChzdGF0dXMgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRXJyb3Igc3VibWl0dGluZyBjb250cm9sIG1zZywgc3RzPSVkIiwgc3RhdHVzKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJFcnJvciBzdWJtaXR0aW5nIGNvbnRyb2wgbXNnLCBzdHM9JWRcbiIsCisJCQkgICAgc3RhdHVzKTsKIAkJZ290byBvdXQxOwogCX0KIAlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMgYi9kcml2ZXJzL25ldC91c2Iva2F3ZXRoLmMKaW5kZXggZjFkNjRlZi4uNTI2NzFlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2thd2V0aC5jCisrKyBiL2RyaXZlcnMvbmV0L3VzYi9rYXdldGguYwpAQCAtODgxLDcgKzg4MSw3IEBACiAJaWYgKG5ldC0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQlwYWNrZXRfZmlsdGVyX2JpdG1hcCB8PSBLQVdFVEhfUEFDS0VUX0ZJTFRFUl9QUk9NSVNDVU9VUzsKIAl9Ci0JZWxzZSBpZiAoKG5ldC0+bWNfY291bnQpIHx8IChuZXQtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCWVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkobmV0KSB8fCAobmV0LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJcGFja2V0X2ZpbHRlcl9iaXRtYXAgfD0gS0FXRVRIX1BBQ0tFVF9GSUxURVJfQUxMX01VTFRJQ0FTVDsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMgYi9kcml2ZXJzL25ldC91c2IvbWNzNzgzMC5jCmluZGV4IDg3Mzc0MzEuLjcwOTc4MjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9tY3M3ODMwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL21jczc4MzAuYwpAQCAtMSwxMyArMSwyNyBAQAogLyoKLSAqIE1vc0NoaXBzIE1DUzc4MzAgYmFzZWQgVVNCIDIuMCBFdGhlcm5ldCBEZXZpY2VzCisgKiBNT1NDSElQIE1DUzc4MzAgYmFzZWQgVVNCIDIuMCBFdGhlcm5ldCBEZXZpY2VzCiAgKgogICogYmFzZWQgb24gdXNibmV0LmMsIGFzaXguYyBhbmQgdGhlIHZlbmRvciBwcm92aWRlZCBtY3M3ODMwIGRyaXZlcgogICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBBbmRyZWFzIE1vaHIgPGFuZGlAbGlzYXMuZGU+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXJuZCBCZXJnbWFubiA8YXJuZEBhcm5kYi5kZT4KICAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IERhdmlkIEhvbGxpcyA8ZGhvbGxpc0BkYXZlaG9sbGlzLmNvbT4KICAqIENvcHlyaWdodCAoQykgMjAwNSBQaGlsIENoYW5nIDxwY2hhbmcyM0BzYmNnbG9iYWwubmV0PgogICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDMgVGlWbyBJbmMuCiAgKgorICogRGVmaW5pdGlvbnMgZ2F0aGVyZWQgZnJvbSBNT1NDSElQLCBEYXRhIFNoZWV0Xzc4MzBEQS5wZGYgKHRoYW5rcyEpLgorICoKKyAqIFRPRE86CisgKiAtIHN1cHBvcnQgSElGX1JFR19DT05GSUdfU0xFRVBNT0RFL0hJRl9SRUdfQ09ORklHX1RYRU5BQkxFICh2aWEgYXV0b3BtPykKKyAqIC0gaW1wbGVtZW50IGV0aHRvb2xfb3BzIGdldF9wYXVzZXBhcmFtL3NldF9wYXVzZXBhcmFtCisgKiAgIHZpYSBISUZfUkVHX1BBVVNFX1RIUkVTSE9MRCAoPj0gcmV2aXNpb24gQyBvbmx5ISkKKyAqIC0gaW1wbGVtZW50IGdldF9lZXByb20vW3NldF9lZXByb21dCisgKiAtIHN3aXRjaCBQSFkgb24vb2ZmIG9uIGlmdXAvaWZkb3duIChwZXJoYXBzIGluIHVzYm5ldC5jLCB2aWEgTUlJKQorICogLSBtY3M3ODMwX2dldF9yZWdzKCkgaGFuZGxpbmcgaXMgd2VpcmQ6IGZvciByZXYgMiB3ZSByZXR1cm4gMzIgcmVncywKKyAqICAgY2FuIGFjY2VzcyBvbmx5IH4gMjQsIHJlbWFpbmluZyB1c2VyIGJ1ZmZlciBpcyB1bmluaXRpYWxpemVkIGdhcmJhZ2UKKyAqIC0gYW55dGhpbmcgZWxzZT8KKyAqCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtNTUsNyArNjksNyBAQAogCQkJCSBBRFZFUlRJU0VfMTAwSEFMRiB8IEFEVkVSVElTRV8xMEZVTEwgfCBcCiAJCQkJIEFEVkVSVElTRV8xMEhBTEYgfCBBRFZFUlRJU0VfQ1NNQSkKIAotLyogSElGX1JFR19YWCBjb3Jlc3Nwb25kaW5nIGluZGV4IHZhbHVlICovCisvKiBISUZfUkVHX1hYIGNvcnJlc3BvbmRpbmcgaW5kZXggdmFsdWUgKi8KIGVudW0gewogCUhJRl9SRUdfTVVMVElDQVNUX0hBU0gJCQk9IDB4MDAsCiAJSElGX1JFR19QQUNLRVRfR0FQMQkJCT0gMHgwOCwKQEAgLTY5LDYgKzgzLDcgQEAKIAkgICBISUZfUkVHX1BIWV9DTUQyX1BFTkRfRkxBR19CSVQJPSAweDgwLAogCSAgIEhJRl9SRUdfUEhZX0NNRDJfUkVBRFlfRkxBR19CSVQJPSAweDQwLAogCUhJRl9SRUdfQ09ORklHCQkJCT0gMHgwZSwKKwkvKiBobW0sIHNwZWMgc2V6OiAiUi9XIiwgIkV4Y2VwdCBiaXQgMyIgKGxpa2VseSBUWEVOQUJMRSkuICovCiAJICAgSElGX1JFR19DT05GSUdfQ0ZHCQkJPSAweDgwLAogCSAgIEhJRl9SRUdfQ09ORklHX1NQRUVEMTAwCQk9IDB4NDAsCiAJICAgSElGX1JFR19DT05GSUdfRlVMTERVUExFWF9FTkFCTEUJPSAweDIwLApAQCAtNzYsMTMgKzkxLDI0IEBACiAJICAgSElGX1JFR19DT05GSUdfVFhFTkFCTEUJCT0gMHgwOCwKIAkgICBISUZfUkVHX0NPTkZJR19TTEVFUE1PREUJCT0gMHgwNCwKIAkgICBISUZfUkVHX0NPTkZJR19BTExNVUxUSUNBU1QJCT0gMHgwMiwKLQkgICBISUZfUkVHX0NPTkZJR19QUk9NSVNDSU9VUwkJPSAweDAxLAorCSAgIEhJRl9SRUdfQ09ORklHX1BST01JU0NVT1VTCQk9IDB4MDEsCiAJSElGX1JFR19FVEhFUk5FVF9BRERSCQkJPSAweDBmLAotCUhJRl9SRUdfMjIJCQkJPSAweDE1LAorCUhJRl9SRUdfRlJBTUVfRFJPUF9DT1VOVEVSCQk9IDB4MTUsIC8qIDAuLmZmOyByZXNldDogMCAqLwogCUhJRl9SRUdfUEFVU0VfVEhSRVNIT0xECQkJPSAweDE2LAogCSAgIEhJRl9SRUdfUEFVU0VfVEhSRVNIT0xEX0RFRkFVTFQJPSAwLAogfTsKIAorLyogVHJhaWxpbmcgc3RhdHVzIGJ5dGUgaW4gRXRoZXJuZXQgUnggZnJhbWUgKi8KK2VudW0geworCU1DUzc4MzBfUlhfU0hPUlRfRlJBTUUJCT0gMHgwMSwgLyogPCA2NCBieXRlcyAqLworCU1DUzc4MzBfUlhfTEVOR1RIX0VSUk9SCQk9IDB4MDIsIC8qIGZyYW1lbGVuICE9IEV0aGVybmV0IGxlbmd0aCBmaWVsZCAqLworCU1DUzc4MzBfUlhfQUxJR05NRU5UX0VSUk9SCT0gMHgwNCwgLyogbm9uLWV2ZW4gbnVtYmVyIG9mIG5pYmJsZXMgKi8KKwlNQ1M3ODMwX1JYX0NSQ19FUlJPUgkJPSAweDA4LAorCU1DUzc4MzBfUlhfTEFSR0VfRlJBTUUJCT0gMHgxMCwgLyogPiAxNTE4IGJ5dGVzICovCisJTUNTNzgzMF9SWF9GUkFNRV9DT1JSRUNUCT0gMHgyMCwgLyogZnJhbWUgaXMgY29ycmVjdCAqLworCS8qIFs3OjZdIHJlc2VydmVkICovCit9OworCiBzdHJ1Y3QgbWNzNzgzMF9kYXRhIHsKIAl1OCBtdWx0aV9maWx0ZXJbOF07CiAJdTggY29uZmlnOwpAQCAtMTA5LDcgKzEzNSw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtY3M3ODMwX3NldF9yZWcoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgaW5kZXgsIHUxNiBzaXplLCB2b2lkICpkYXRhKQorc3RhdGljIGludCBtY3M3ODMwX3NldF9yZWcoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgaW5kZXgsIHUxNiBzaXplLCBjb25zdCB2b2lkICpkYXRhKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICp4ZGV2ID0gZGV2LT51ZGV2OwogCWludCByZXQ7CkBAIC0xODMsMTYgKzIwOSw0NiBAQAogCXVzYl9mcmVlX3VyYih1cmIpOwogfQogCi1zdGF0aWMgaW50IG1jczc4MzBfZ2V0X2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2KQorc3RhdGljIGludCBtY3M3ODMwX2hpZl9nZXRfbWFjX2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyICphZGRyKQogewotCWludCByZXQ7Ci0JcmV0ID0gbWNzNzgzMF9nZXRfcmVnKGRldiwgSElGX1JFR19FVEhFUk5FVF9BRERSLCBFVEhfQUxFTiwKLQkJCQkgICBkZXYtPm5ldC0+ZGV2X2FkZHIpOworCWludCByZXQgPSBtY3M3ODMwX2dldF9yZWcoZGV2LCBISUZfUkVHX0VUSEVSTkVUX0FERFIsIEVUSF9BTEVOLCBhZGRyKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBtY3M3ODMwX2hpZl9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2LCB1bnNpZ25lZCBjaGFyICphZGRyKQoreworCWludCByZXQgPSBtY3M3ODMwX3NldF9yZWcoZGV2LCBISUZfUkVHX0VUSEVSTkVUX0FERFIsIEVUSF9BTEVOLCBhZGRyKTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1jczc4MzBfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IHA7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlyZXR1cm4gLUVCVVNZOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IG1jczc4MzBfaGlmX3NldF9tYWNfYWRkcmVzcyhkZXYsIGFkZHItPnNhX2RhdGEpOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBpdCB3b3JrZWQgLS0+IGFkb3B0IGl0IG9uIG5ldGRldiBzaWRlICovCisJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgbWNzNzgzMF9yZWFkX3BoeShzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGluZGV4KQogewogCWludCByZXQ7CkBAIC0zMDcsNyArMzYzLDcgQEAKIHsKIAl1OCBkdW1teVsyXTsKIAlpbnQgcmV0OwotCXJldCA9IG1jczc4MzBfZ2V0X3JlZyhkZXYsIEhJRl9SRUdfMjIsIDIsIGR1bW15KTsKKwlyZXQgPSBtY3M3ODMwX2dldF9yZWcoZGV2LCBISUZfUkVHX0ZSQU1FX0RST1BfQ09VTlRFUiwgMiwgZHVtbXkpOwogCWlmIChyZXQgPiAwKQogCQlyZXR1cm4gMjsgLyogUmV2IEMgb3IgbGF0ZXIgKi8KIAlyZXR1cm4gMTsgLyogZWFybGllciByZXZpc2lvbiAqLwpAQCAtMzMxLDMzICszODcsNiBAQAogCX0KIH0KIAotc3RhdGljIGludCBtY3M3ODMwX2luaXRfZGV2KHN0cnVjdCB1c2JuZXQgKmRldikKLXsKLQlpbnQgcmV0OwotCWludCByZXRyeTsKLQotCS8qIFJlYWQgTUFDIGFkZHJlc3MgZnJvbSBFRVBST00gKi8KLQlyZXQgPSAtRUlOVkFMOwotCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDUgJiYgcmV0OyByZXRyeSsrKQotCQlyZXQgPSBtY3M3ODMwX2dldF9hZGRyZXNzKGRldik7Ci0JaWYgKHJldCkgewotCQlkZXZfd2FybigmZGV2LT51ZGV2LT5kZXYsICJDYW5ub3QgcmVhZCBNQUMgYWRkcmVzc1xuIik7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIFNldCB1cCBQSFkgKi8KLQlyZXQgPSBtY3M3ODMwX3NldF9hdXRvbmVnKGRldiwgMCk7Ci0JaWYgKHJldCkgewotCQlkZXZfaW5mbygmZGV2LT51ZGV2LT5kZXYsICJDYW5ub3Qgc2V0IGF1dG9uZWdcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQltY3M3ODMwX3Jldl9DX2ZpeHVwKGRldik7Ci0JcmV0ID0gMDsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IG1jczc4MzBfbWRpb19yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsCiAJCQkgICAgIGludCBsb2NhdGlvbikKIHsKQEAgLTM3OCwxMSArNDA3LDMzIEBACiAJcmV0dXJuIGdlbmVyaWNfbWlpX2lvY3RsKCZkZXYtPm1paSwgaWZfbWlpKHJxKSwgY21kLCBOVUxMKTsKIH0KIAotLyogY3JlZGl0cyBnbyB0byBhc2l4X3NldF9tdWx0aWNhc3QgKi8KLXN0YXRpYyB2b2lkIG1jczc4MzBfc2V0X211bHRpY2FzdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbWNzNzgzMF9kYXRhICptY3M3ODMwX2dldF9kYXRhKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlyZXR1cm4gKHN0cnVjdCBtY3M3ODMwX2RhdGEgKikmZGV2LT5kYXRhOworfQorCitzdGF0aWMgdm9pZCBtY3M3ODMwX2hpZl91cGRhdGVfbXVsdGljYXN0X2hhc2goc3RydWN0IHVzYm5ldCAqZGV2KQoreworCXN0cnVjdCBtY3M3ODMwX2RhdGEgKmRhdGEgPSBtY3M3ODMwX2dldF9kYXRhKGRldik7CisJbWNzNzgzMF9zZXRfcmVnX2FzeW5jKGRldiwgSElGX1JFR19NVUxUSUNBU1RfSEFTSCwKKwkJCQlzaXplb2YgZGF0YS0+bXVsdGlfZmlsdGVyLAorCQkJCWRhdGEtPm11bHRpX2ZpbHRlcik7Cit9CisKK3N0YXRpYyB2b2lkIG1jczc4MzBfaGlmX3VwZGF0ZV9jb25maWcoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCS8qIGltcGxlbWVudGF0aW9uIHNwZWNpZmljIHRvIGRhdGEtPmNvbmZpZworICAgICAgICAgICAoYXJndW1lbnQgbmVlZHMgdG8gYmUgaGVhcC1iYXNlZCBhbnl3YXkgLSBVU0IgRE1BISkgKi8KKwlzdHJ1Y3QgbWNzNzgzMF9kYXRhICpkYXRhID0gbWNzNzgzMF9nZXRfZGF0YShkZXYpOworCW1jczc4MzBfc2V0X3JlZ19hc3luYyhkZXYsIEhJRl9SRUdfQ09ORklHLCAxLCAmZGF0YS0+Y29uZmlnKTsKK30KKworc3RhdGljIHZvaWQgbWNzNzgzMF9kYXRhX3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwotCXN0cnVjdCBtY3M3ODMwX2RhdGEgKmRhdGEgPSAoc3RydWN0IG1jczc4MzBfZGF0YSAqKSZkZXYtPmRhdGE7CisJc3RydWN0IG1jczc4MzBfZGF0YSAqZGF0YSA9IG1jczc4MzBfZ2V0X2RhdGEoZGV2KTsKKworCW1lbXNldChkYXRhLT5tdWx0aV9maWx0ZXIsIDAsIHNpemVvZiBkYXRhLT5tdWx0aV9maWx0ZXIpOwogCiAJZGF0YS0+Y29uZmlnID0gSElGX1JFR19DT05GSUdfVFhFTkFCTEU7CiAKQEAgLTM5MCwzNiArNDQxLDY0IEBACiAJZGF0YS0+Y29uZmlnIHw9IEhJRl9SRUdfQ09ORklHX0FMTE1VTFRJQ0FTVDsKIAogCWlmIChuZXQtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJZGF0YS0+Y29uZmlnIHw9IEhJRl9SRUdfQ09ORklHX1BST01JU0NJT1VTOworCQlkYXRhLT5jb25maWcgfD0gSElGX1JFR19DT05GSUdfUFJPTUlTQ1VPVVM7CiAJfSBlbHNlIGlmIChuZXQtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8Ci0JCSAgIG5ldC0+bWNfY291bnQgPiBNQ1M3ODMwX01BWF9NQ0FTVCkgeworCQkgICBuZXRkZXZfbWNfY291bnQobmV0KSA+IE1DUzc4MzBfTUFYX01DQVNUKSB7CiAJCWRhdGEtPmNvbmZpZyB8PSBISUZfUkVHX0NPTkZJR19BTExNVUxUSUNBU1Q7Ci0JfSBlbHNlIGlmIChuZXQtPm1jX2NvdW50ID09IDApIHsKKwl9IGVsc2UgaWYgKG5ldGRldl9tY19lbXB0eShuZXQpKSB7CiAJCS8qIGp1c3QgYnJvYWRjYXN0IGFuZCBkaXJlY3RlZCAqLwogCX0gZWxzZSB7CiAJCS8qIFdlIHVzZSB0aGUgMjAgYnl0ZSBkZXYtPmRhdGEKIAkJICogZm9yIG91ciA4IGJ5dGUgZmlsdGVyIGJ1ZmZlcgogCQkgKiB0byBhdm9pZCBhbGxvY2F0aW5nIG1lbW9yeSB0aGF0CiAJCSAqIGlzIHRyaWNreSB0byBmcmVlIGxhdGVyICovCi0JCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdCA9IG5ldC0+bWNfbGlzdDsKKwkJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0OwogCQl1MzIgY3JjX2JpdHM7Ci0JCWludCBpOwotCi0JCW1lbXNldChkYXRhLT5tdWx0aV9maWx0ZXIsIDAsIHNpemVvZiBkYXRhLT5tdWx0aV9maWx0ZXIpOwogCiAJCS8qIEJ1aWxkIHRoZSBtdWx0aWNhc3QgaGFzaCBmaWx0ZXIuICovCi0JCWZvciAoaSA9IDA7IGkgPCBuZXQtPm1jX2NvdW50OyBpKyspIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfbGlzdCwgbmV0KSB7CiAJCQljcmNfYml0cyA9IGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNfbGlzdC0+ZG1pX2FkZHIpID4+IDI2OwogCQkJZGF0YS0+bXVsdGlfZmlsdGVyW2NyY19iaXRzID4+IDNdIHw9IDEgPDwgKGNyY19iaXRzICYgNyk7Ci0JCQltY19saXN0ID0gbWNfbGlzdC0+bmV4dDsKIAkJfQorCX0KK30KIAotCQltY3M3ODMwX3NldF9yZWdfYXN5bmMoZGV2LCBISUZfUkVHX01VTFRJQ0FTVF9IQVNILAotCQkJCXNpemVvZiBkYXRhLT5tdWx0aV9maWx0ZXIsCi0JCQkJZGF0YS0+bXVsdGlfZmlsdGVyKTsKK3N0YXRpYyBpbnQgbWNzNzgzMF9hcHBseV9iYXNlX2NvbmZpZyhzdHJ1Y3QgdXNibmV0ICpkZXYpCit7CisJaW50IHJldDsKKworCS8qIHJlLWNvbmZpZ3VyZSBrbm93biBNQUMgKHN1c3BlbmQgY2FzZSBldGMuKSAqLworCXJldCA9IG1jczc4MzBfaGlmX3NldF9tYWNfYWRkcmVzcyhkZXYsIGRldi0+bmV0LT5kZXZfYWRkcik7CisJaWYgKHJldCkgeworCQlkZXZfaW5mbygmZGV2LT51ZGV2LT5kZXYsICJDYW5ub3Qgc2V0IE1BQyBhZGRyZXNzXG4iKTsKKwkJZ290byBvdXQ7CiAJfQogCi0JbWNzNzgzMF9zZXRfcmVnX2FzeW5jKGRldiwgSElGX1JFR19DT05GSUcsIDEsICZkYXRhLT5jb25maWcpOworCS8qIFNldCB1cCBQSFkgKi8KKwlyZXQgPSBtY3M3ODMwX3NldF9hdXRvbmVnKGRldiwgMCk7CisJaWYgKHJldCkgeworCQlkZXZfaW5mbygmZGV2LT51ZGV2LT5kZXYsICJDYW5ub3Qgc2V0IGF1dG9uZWdcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwltY3M3ODMwX2hpZl91cGRhdGVfbXVsdGljYXN0X2hhc2goZGV2KTsKKwltY3M3ODMwX2hpZl91cGRhdGVfY29uZmlnKGRldik7CisKKwltY3M3ODMwX3Jldl9DX2ZpeHVwKGRldik7CisJcmV0ID0gMDsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCisvKiBjcmVkaXRzIGdvIHRvIGFzaXhfc2V0X211bHRpY2FzdCAqLworc3RhdGljIHZvaWQgbWNzNzgzMF9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCW1jczc4MzBfZGF0YV9zZXRfbXVsdGljYXN0KG5ldCk7CisKKwltY3M3ODMwX2hpZl91cGRhdGVfbXVsdGljYXN0X2hhc2goZGV2KTsKKwltY3M3ODMwX2hpZl91cGRhdGVfY29uZmlnKGRldik7CiB9CiAKIHN0YXRpYyBpbnQgbWNzNzgzMF9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKQEAgLTQ2MywyOSArNTQyLDYgQEAKIAkubndheV9yZXNldAkJPSB1c2JuZXRfbndheV9yZXNldCwKIH07CiAKLXN0YXRpYyBpbnQgbWNzNzgzMF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdm9pZCAqcCkKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7Ci0Jc3RydWN0IHNvY2thZGRyICphZGRyID0gcDsKLQotCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIoYWRkci0+c2FfZGF0YSkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwotCi0JcmV0ID0gbWNzNzgzMF9zZXRfcmVnKGRldiwgSElGX1JFR19FVEhFUk5FVF9BRERSLCBFVEhfQUxFTiwKLQkJCW5ldGRldi0+ZGV2X2FkZHIpOwotCi0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBtY3M3ODMwX25ldGRldl9vcHMgPSB7CiAJLm5kb19vcGVuCQk9IHVzYm5ldF9vcGVuLAogCS5uZG9fc3RvcAkJPSB1c2JuZXRfc3RvcCwKQEAgLTQ5NSwyMSArNTUxLDMyIEBACiAJLm5kb192YWxpZGF0ZV9hZGRyCT0gZXRoX3ZhbGlkYXRlX2FkZHIsCiAJLm5kb19kb19pb2N0bCAJCT0gbWNzNzgzMF9pb2N0bCwKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IG1jczc4MzBfc2V0X211bHRpY2FzdCwKLQkubmRvX3NldF9tYWNfYWRkcmVzcwkgPSBtY3M3ODMwX3NldF9tYWNfYWRkcmVzcywKKwkubmRvX3NldF9tYWNfYWRkcmVzcwk9IG1jczc4MzBfc2V0X21hY19hZGRyZXNzLAogfTsKIAogc3RhdGljIGludCBtY3M3ODMwX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdWRldikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0gZGV2LT5uZXQ7CiAJaW50IHJldDsKKwlpbnQgcmV0cnk7CiAKLQlyZXQgPSBtY3M3ODMwX2luaXRfZGV2KGRldik7CisJLyogSW5pdGlhbCBzdGFydHVwOiBHYXRoZXIgTUFDIGFkZHJlc3Mgc2V0dGluZyBmcm9tIEVFUFJPTSAqLworCXJldCA9IC1FSU5WQUw7CisJZm9yIChyZXRyeSA9IDA7IHJldHJ5IDwgNSAmJiByZXQ7IHJldHJ5KyspCisJCXJldCA9IG1jczc4MzBfaGlmX2dldF9tYWNfYWRkcmVzcyhkZXYsIG5ldC0+ZGV2X2FkZHIpOworCWlmIChyZXQpIHsKKwkJZGV2X3dhcm4oJmRldi0+dWRldi0+ZGV2LCAiQ2Fubm90IHJlYWQgTUFDIGFkZHJlc3NcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwltY3M3ODMwX2RhdGFfc2V0X211bHRpY2FzdChuZXQpOworCisJcmV0ID0gbWNzNzgzMF9hcHBseV9iYXNlX2NvbmZpZyhkZXYpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCiAJbmV0LT5ldGh0b29sX29wcyA9ICZtY3M3ODMwX2V0aHRvb2xfb3BzOwogCW5ldC0+bmV0ZGV2X29wcyA9ICZtY3M3ODMwX25ldGRldl9vcHM7Ci0JbWNzNzgzMF9zZXRfbXVsdGljYXN0KG5ldCk7CiAKIAkvKiByZXNlcnZlIHNwYWNlIGZvciB0aGUgc3RhdHVzIGJ5dGUgb24gcnggKi8KIAlkZXYtPnJ4X3VyYl9zaXplID0gRVRIX0ZSQU1FX0xFTiArIDE7CkBAIC01MjYsNyArNTkzLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBUaGUgY2hpcCBhbHdheXMgYXBwZW5kcyBhIHN0YXR1cyBieXRlcyB0aGF0IHdlIG5lZWQgdG8gc3RyaXAgKi8KKy8qIFRoZSBjaGlwIGFsd2F5cyBhcHBlbmRzIGEgc3RhdHVzIGJ5dGUgdGhhdCB3ZSBuZWVkIHRvIHN0cmlwICovCiBzdGF0aWMgaW50IG1jczc4MzBfcnhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXU4IHN0YXR1czsKQEAgLTUzOSw5ICs2MDYsMjMgQEAKIAlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gMSk7CiAJc3RhdHVzID0gc2tiLT5kYXRhW3NrYi0+bGVuXTsKIAotCWlmIChzdGF0dXMgIT0gMHgyMCkKKwlpZiAoc3RhdHVzICE9IE1DUzc4MzBfUlhfRlJBTUVfQ09SUkVDVCkgewogCQlkZXZfZGJnKCZkZXYtPnVkZXYtPmRldiwgInJ4IGZpeHVwIHN0YXR1cyAleFxuIiwgc3RhdHVzKTsKIAorCQkvKiBobW0sIHBlcmhhcHMgdXNibmV0LmMgYWxyZWFkeSBzZWVzIGEgZ2xvYmFsbHkgdmlzaWJsZQorCQkgICBmcmFtZSBlcnJvciBhbmQgaW5jcmVtZW50cyByeF9lcnJvcnMgb24gaXRzIG93biBhbHJlYWR5PyAqLworCQlkZXYtPm5ldC0+c3RhdHMucnhfZXJyb3JzKys7CisKKwkJaWYgKHN0YXR1cyAmCShNQ1M3ODMwX1JYX1NIT1JUX0ZSQU1FCisJCQkJfE1DUzc4MzBfUlhfTEVOR1RIX0VSUk9SCisJCQkJfE1DUzc4MzBfUlhfTEFSR0VfRlJBTUUpKQorCQkJZGV2LT5uZXQtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKKwkJaWYgKHN0YXR1cyAmIE1DUzc4MzBfUlhfQUxJR05NRU5UX0VSUk9SKQorCQkJZGV2LT5uZXQtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOworCQlpZiAoc3RhdHVzICYgTUNTNzgzMF9SWF9DUkNfRVJST1IpCisJCQlkZXYtPm5ldC0+c3RhdHMucnhfY3JjX2Vycm9ycysrOworCX0KKwogCXJldHVybiBza2ItPmxlbiA+IDA7CiB9CiAKQEAgLTU4MCw2ICs2NjEsMjAgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgcHJvZHVjdHMpOwogCitzdGF0aWMgaW50IG1jczc4MzBfcmVzZXRfcmVzdW1lIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKyAJLyogWUVTLCB0aGlzIGZ1bmN0aW9uIGlzIHN1Y2Nlc3NmdWwgZW5vdWdoIHRoYXQgZXRodG9vbCAtZAorICAgICAgICAgICBkb2VzIHNob3cgc2FtZSBvdXRwdXQgcHJlLS9wb3N0LXN1c3BlbmQgKi8KKworCXN0cnVjdCB1c2JuZXQJCSpkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJbWNzNzgzMF9hcHBseV9iYXNlX2NvbmZpZyhkZXYpOworCisJdXNibmV0X3Jlc3VtZShpbnRmKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgbWNzNzgzMF9kcml2ZXIgPSB7CiAJLm5hbWUgPSBkcml2ZXJfbmFtZSwKIAkuaWRfdGFibGUgPSBwcm9kdWN0cywKQEAgLTU4Nyw2ICs2ODIsNyBAQAogCS5kaXNjb25uZWN0ID0gdXNibmV0X2Rpc2Nvbm5lY3QsCiAJLnN1c3BlbmQgPSB1c2JuZXRfc3VzcGVuZCwKIAkucmVzdW1lID0gdXNibmV0X3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0gbWNzNzgzMF9yZXNldF9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBtY3M3ODMwX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMgYi9kcml2ZXJzL25ldC91c2IvbmV0MTA4MC5jCmluZGV4IGFlYjFhYjAuLmJkY2FkNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9uZXQxMDgwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL25ldDEwODAuYwpAQCAtMjAzLDI1ICsyMDMsMjMgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIG5jX2R1bXBfdXNiY3RsKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IHVzYmN0bCkKIHsKLQlpZiAoIW5ldGlmX21zZ19saW5rKGRldikpCi0JCXJldHVybjsKLQlkZXZkYmcoZGV2LCAibmV0MTA4MCAlcy0lcyB1c2JjdGwgMHgleDolcyVzJXMlcyVzOyIKLQkJCSIgdGhpcyVzJXM7IgotCQkJIiBvdGhlciVzJXM7IHIvbyAweCV4IiwKLQkJZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPnVkZXYtPmRldnBhdGgsCi0JCXVzYmN0bCwKLQkJKHVzYmN0bCAmIFVTQkNUTF9FTkFCTEVfTEFORykgPyAiIGxhbmciIDogIiIsCi0JCSh1c2JjdGwgJiBVU0JDVExfRU5BQkxFX01GR1IpID8gIiBtZmdyIiA6ICIiLAotCQkodXNiY3RsICYgVVNCQ1RMX0VOQUJMRV9QUk9EKSA/ICIgcHJvZCIgOiAiIiwKLQkJKHVzYmN0bCAmIFVTQkNUTF9FTkFCTEVfU0VSSUFMKSA/ICIgc2VyaWFsIiA6ICIiLAotCQkodXNiY3RsICYgVVNCQ1RMX0VOQUJMRV9ERUZBVUxUUykgPyAiIGRlZmF1bHRzIiA6ICIiLAorCW5ldGlmX2RiZyhkZXYsIGxpbmssIGRldi0+bmV0LAorCQkgICJuZXQxMDgwICVzLSVzIHVzYmN0bCAweCV4OiVzJXMlcyVzJXM7IHRoaXMlcyVzOyBvdGhlciVzJXM7IHIvbyAweCV4XG4iLAorCQkgIGRldi0+dWRldi0+YnVzLT5idXNfbmFtZSwgZGV2LT51ZGV2LT5kZXZwYXRoLAorCQkgIHVzYmN0bCwKKwkJICAodXNiY3RsICYgVVNCQ1RMX0VOQUJMRV9MQU5HKSA/ICIgbGFuZyIgOiAiIiwKKwkJICAodXNiY3RsICYgVVNCQ1RMX0VOQUJMRV9NRkdSKSA/ICIgbWZnciIgOiAiIiwKKwkJICAodXNiY3RsICYgVVNCQ1RMX0VOQUJMRV9QUk9EKSA/ICIgcHJvZCIgOiAiIiwKKwkJICAodXNiY3RsICYgVVNCQ1RMX0VOQUJMRV9TRVJJQUwpID8gIiBzZXJpYWwiIDogIiIsCisJCSAgKHVzYmN0bCAmIFVTQkNUTF9FTkFCTEVfREVGQVVMVFMpID8gIiBkZWZhdWx0cyIgOiAiIiwKIAotCQkodXNiY3RsICYgVVNCQ1RMX0ZMVVNIX09USEVSKSA/ICIgRkxVU0giIDogIiIsCi0JCSh1c2JjdGwgJiBVU0JDVExfRElTQ09OTl9PVEhFUikgPyAiIERJUyIgOiAiIiwKLQkJKHVzYmN0bCAmIFVTQkNUTF9GTFVTSF9USElTKSA/ICIgRkxVU0giIDogIiIsCi0JCSh1c2JjdGwgJiBVU0JDVExfRElTQ09OTl9USElTKSA/ICIgRElTIiA6ICIiLAotCQl1c2JjdGwgJiB+VVNCQ1RMX1dSSVRBQkxFX01BU0sKLQkJKTsKKwkJICAodXNiY3RsICYgVVNCQ1RMX0ZMVVNIX1RISVMpID8gIiBGTFVTSCIgOiAiIiwKKwkJICAodXNiY3RsICYgVVNCQ1RMX0RJU0NPTk5fVEhJUykgPyAiIERJUyIgOiAiIiwKKworCQkgICh1c2JjdGwgJiBVU0JDVExfRkxVU0hfT1RIRVIpID8gIiBGTFVTSCIgOiAiIiwKKwkJICAodXNiY3RsICYgVVNCQ1RMX0RJU0NPTk5fT1RIRVIpID8gIiBESVMiIDogIiIsCisKKwkJICB1c2JjdGwgJiB+VVNCQ1RMX1dSSVRBQkxFX01BU0spOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjQ4LDMwICsyNDYsMjYgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIG5jX2R1bXBfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IHN0YXR1cykKIHsKLQlpZiAoIW5ldGlmX21zZ19saW5rKGRldikpCi0JCXJldHVybjsKLQlkZXZkYmcoZGV2LCAibmV0MTA4MCAlcy0lcyBzdGF0dXMgMHgleDoiCi0JCQkiIHRoaXMgKCVjKSBQS1Q9JWQlcyVzJXM7IgotCQkJIiBvdGhlciBQS1Q9JWQlcyVzJXM7IHVuc3BlYyAweCV4IiwKLQkJZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPnVkZXYtPmRldnBhdGgsCi0JCXN0YXR1cywKKwluZXRpZl9kYmcoZGV2LCBsaW5rLCBkZXYtPm5ldCwKKwkJICAibmV0MTA4MCAlcy0lcyBzdGF0dXMgMHgleDogdGhpcyAoJWMpIFBLVD0lZCVzJXMlczsgb3RoZXIgUEtUPSVkJXMlcyVzOyB1bnNwZWMgMHgleFxuIiwKKwkJICBkZXYtPnVkZXYtPmJ1cy0+YnVzX25hbWUsIGRldi0+dWRldi0+ZGV2cGF0aCwKKwkJICBzdGF0dXMsCiAKLQkJLy8gWFhYIHRoZSBwYWNrZXQgY291bnRzIGRvbid0IHNlZW0gcmlnaHQKLQkJLy8gKDEgYXQgcmVzZXQsIG5vdCAwKTsgbWF5YmUgVU5TUEVDIHRvbworCQkgIC8vIFhYWCB0aGUgcGFja2V0IGNvdW50cyBkb24ndCBzZWVtIHJpZ2h0CisJCSAgLy8gKDEgYXQgcmVzZXQsIG5vdCAwKTsgbWF5YmUgVU5TUEVDIHRvbwogCi0JCShzdGF0dXMgJiBTVEFUVVNfUE9SVF9BKSA/ICdBJyA6ICdCJywKLQkJU1RBVFVTX1BBQ0tFVFNfVEhJUyhzdGF0dXMpLAotCQkoc3RhdHVzICYgU1RBVFVTX0NPTk5fVEhJUykgPyAiIENPTiIgOiAiIiwKLQkJKHN0YXR1cyAmIFNUQVRVU19TVVNQRU5EX1RISVMpID8gIiBTVVMiIDogIiIsCi0JCShzdGF0dXMgJiBTVEFUVVNfTUFJTEJPWF9USElTKSA/ICIgTUJPWCIgOiAiIiwKKwkJICAoc3RhdHVzICYgU1RBVFVTX1BPUlRfQSkgPyAnQScgOiAnQicsCisJCSAgU1RBVFVTX1BBQ0tFVFNfVEhJUyhzdGF0dXMpLAorCQkgIChzdGF0dXMgJiBTVEFUVVNfQ09OTl9USElTKSA/ICIgQ09OIiA6ICIiLAorCQkgIChzdGF0dXMgJiBTVEFUVVNfU1VTUEVORF9USElTKSA/ICIgU1VTIiA6ICIiLAorCQkgIChzdGF0dXMgJiBTVEFUVVNfTUFJTEJPWF9USElTKSA/ICIgTUJPWCIgOiAiIiwKIAotCQlTVEFUVVNfUEFDS0VUU19PVEhFUihzdGF0dXMpLAotCQkoc3RhdHVzICYgU1RBVFVTX0NPTk5fT1RIRVIpID8gIiBDT04iIDogIiIsCi0JCShzdGF0dXMgJiBTVEFUVVNfU1VTUEVORF9PVEhFUikgPyAiIFNVUyIgOiAiIiwKLQkJKHN0YXR1cyAmIFNUQVRVU19NQUlMQk9YX09USEVSKSA/ICIgTUJPWCIgOiAiIiwKKwkJICBTVEFUVVNfUEFDS0VUU19PVEhFUihzdGF0dXMpLAorCQkgIChzdGF0dXMgJiBTVEFUVVNfQ09OTl9PVEhFUikgPyAiIENPTiIgOiAiIiwKKwkJICAoc3RhdHVzICYgU1RBVFVTX1NVU1BFTkRfT1RIRVIpID8gIiBTVVMiIDogIiIsCisJCSAgKHN0YXR1cyAmIFNUQVRVU19NQUlMQk9YX09USEVSKSA/ICIgTUJPWCIgOiAiIiwKIAotCQlzdGF0dXMgJiBTVEFUVVNfVU5TUEVDX01BU0sKLQkJKTsKKwkJICBzdGF0dXMgJiBTVEFUVVNfVU5TUEVDX01BU0spOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMjg2LDEwICsyODAsOSBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmNfZHVtcF90dGwoc3RydWN0IHVzYm5ldCAqZGV2LCB1MTYgdHRsKQogewotCWlmIChuZXRpZl9tc2dfbGluayhkZXYpKQotCQlkZXZkYmcoZGV2LCAibmV0MTA4MCAlcy0lcyB0dGwgMHgleCB0aGlzID0gJWQsIG90aGVyID0gJWQiLAotCQkJZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPnVkZXYtPmRldnBhdGgsCi0JCQl0dGwsIFRUTF9USElTKHR0bCksIFRUTF9PVEhFUih0dGwpKTsKKwluZXRpZl9kYmcoZGV2LCBsaW5rLCBkZXYtPm5ldCwgIm5ldDEwODAgJXMtJXMgdHRsIDB4JXggdGhpcyA9ICVkLCBvdGhlciA9ICVkXG4iLAorCQkgIGRldi0+dWRldi0+YnVzLT5idXNfbmFtZSwgZGV2LT51ZGV2LT5kZXZwYXRoLAorCQkgIHR0bCwgVFRMX1RISVModHRsKSwgVFRMX09USEVSKHR0bCkpOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMzM0LDExICszMjcsOSBAQAogCQkJTUtfVFRMKE5DX1JFQURfVFRMX01TLCBUVExfT1RIRVIodHRsKSkgKTsKIAlkYmcoIiVzOiBhc3NpZ25lZCBUVEwsICVkIG1zIiwgZGV2LT5uZXQtPm5hbWUsIE5DX1JFQURfVFRMX01TKTsKIAotCWlmIChuZXRpZl9tc2dfbGluayhkZXYpKQotCQlkZXZpbmZvKGRldiwgInBvcnQgJWMsIHBlZXIgJXNjb25uZWN0ZWQiLAotCQkJKHN0YXR1cyAmIFNUQVRVU19QT1JUX0EpID8gJ0EnIDogJ0InLAotCQkJKHN0YXR1cyAmIFNUQVRVU19DT05OX09USEVSKSA/ICIiIDogImRpcyIKLQkJCSk7CisJbmV0aWZfaW5mbyhkZXYsIGxpbmssIGRldi0+bmV0LCAicG9ydCAlYywgcGVlciAlc2Nvbm5lY3RlZFxuIiwKKwkJICAgKHN0YXR1cyAmIFNUQVRVU19QT1JUX0EpID8gJ0EnIDogJ0InLAorCQkgICAoc3RhdHVzICYgU1RBVFVTX0NPTk5fT1RIRVIpID8gIiIgOiAiZGlzIik7CiAJcmV0dmFsID0gMDsKIAogZG9uZToKQEAgLTQxNSw4ICs0MDYsOCBAQAogCQkJcmV0dXJuOwogCQl9CiAKLQkJaWYgKG5ldGlmX21zZ19yeF9lcnIoZGV2KSkKLQkJCWRldmRiZyhkZXYsICJmbHVzaCBuZXQxMDgwOyB0b28gbWFueSBmcmFtaW5nIGVycm9ycyIpOworCQluZXRpZl9kYmcoZGV2LCByeF9lcnIsIGRldi0+bmV0LAorCQkJICAiZmx1c2ggbmV0MTA4MDsgdG9vIG1hbnkgZnJhbWluZyBlcnJvcnNcbiIpOwogCQlkZXYtPmZyYW1lX2Vycm9ycyA9IDA7CiAJfQogfQpAQCAtNDg2LDggKzQ3Nyw4IEBACiAJCXJldHVybiAwOwogCX0KICNpZiAwCi0JZGV2ZGJnKGRldiwgImZyYW1lIDxyeCBoICVkIHAgJWQgaWQgJWQiLCBoZWFkZXItPmhkcl9sZW4sCi0JCWhlYWRlci0+cGFja2V0X2xlbiwgaGVhZGVyLT5wYWNrZXRfaWQpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJmcmFtZSA8cnggaCAlZCBwICVkIGlkICVkXG4iLCBoZWFkZXItPmhkcl9sZW4sCisJCSAgIGhlYWRlci0+cGFja2V0X2xlbiwgaGVhZGVyLT5wYWNrZXRfaWQpOwogI2VuZGlmCiAJZGV2LT5mcmFtZV9lcnJvcnMgPSAwOwogCXJldHVybiAxOwpAQCAtNTQ3LDkgKzUzOCw5IEBACiAJdHJhaWxlciA9IChzdHJ1Y3QgbmNfdHJhaWxlciAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mICp0cmFpbGVyKTsKIAlwdXRfdW5hbGlnbmVkKGhlYWRlci0+cGFja2V0X2lkLCAmdHJhaWxlci0+cGFja2V0X2lkKTsKICNpZiAwCi0JZGV2ZGJnKGRldiwgImZyYW1lID50eCBoICVkIHAgJWQgaWQgJWQiLAotCQloZWFkZXItPmhkcl9sZW4sIGhlYWRlci0+cGFja2V0X2xlbiwKLQkJaGVhZGVyLT5wYWNrZXRfaWQpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJmcmFtZSA+dHggaCAlZCBwICVkIGlkICVkXG4iLAorCQkgICBoZWFkZXItPmhkcl9sZW4sIGhlYWRlci0+cGFja2V0X2xlbiwKKwkJICAgaGVhZGVyLT5wYWNrZXRfaWQpOwogI2VuZGlmCiAJcmV0dXJuIHNrYjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMgYi9kcml2ZXJzL25ldC91c2IvcGVnYXN1cy5jCmluZGV4IGVkNGE1MDguLjQxODM4NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9wZWdhc3VzLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3BlZ2FzdXMuYwpAQCAtMTMyLDkgKzEzMiwxMCBAQAogCWNhc2UgLUVOT0VOVDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykgJiYgcHJpbnRrX3JhdGVsaW1pdCgpKQotCQkJZGV2X2RiZygmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiJXMsIHN0YXR1cyAlZFxuIiwKLQkJCQlfX2Z1bmNfXywgc3RhdHVzKTsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCW5ldGlmX2RiZyhwZWdhc3VzLCBkcnYsIHBlZ2FzdXMtPm5ldCwKKwkJCQkgICIlcywgc3RhdHVzICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKKwkJYnJlYWs7CiAJfQogCXBlZ2FzdXMtPmZsYWdzICY9IH5FVEhfUkVHU19DSEFOR0VEOwogCXdha2VfdXAoJnBlZ2FzdXMtPmN0cmxfd2FpdCk7CkBAIC0xNDksOSArMTUwLDggQEAKIAogCWJ1ZmZlciA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWZmZXIpIHsKLQkJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCi0JCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSBpbiAlc1xuIiwKLQkJCQkJX19mdW5jX18pOworCQluZXRpZl93YXJuKHBlZ2FzdXMsIGRydiwgcGVnYXN1cy0+bmV0LAorCQkJICAgIm91dCBvZiBtZW1vcnkgaW4gJXNcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWFkZF93YWl0X3F1ZXVlKCZwZWdhc3VzLT5jdHJsX3dhaXQsICZ3YWl0KTsKQEAgLTE4MSw5ICsxODEsOSBAQAogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwogCQlpZiAocmV0ID09IC1FTk9ERVYpCiAJCQluZXRpZl9kZXZpY2VfZGV0YWNoKHBlZ2FzdXMtPm5ldCk7Ci0JCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpICYmIHByaW50a19yYXRlbGltaXQoKSkKLQkJCWRldl9lcnIoJnBlZ2FzdXMtPmludGYtPmRldiwgIiVzLCBzdGF0dXMgJWRcbiIsCi0JCQkJCV9fZnVuY19fLCByZXQpOworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJbmV0aWZfZXJyKHBlZ2FzdXMsIGRydiwgcGVnYXN1cy0+bmV0LAorCQkJCSAgIiVzLCBzdGF0dXMgJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTIwNSw5ICsyMDUsOCBAQAogCiAJYnVmZmVyID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZmZlcikgewotCQlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKLQkJCWRldl93YXJuKCZwZWdhc3VzLT5pbnRmLT5kZXYsICJvdXQgb2YgbWVtb3J5IGluICVzXG4iLAotCQkJCQlfX2Z1bmNfXyk7CisJCW5ldGlmX3dhcm4ocGVnYXN1cywgZHJ2LCBwZWdhc3VzLT5uZXQsCisJCQkgICAib3V0IG9mIG1lbW9yeSBpbiAlc1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbWVtY3B5KGJ1ZmZlciwgZGF0YSwgc2l6ZSk7CkBAIC0yMzcsOSArMjM2LDggQEAKIAlpZiAoKHJldCA9IHVzYl9zdWJtaXRfdXJiKHBlZ2FzdXMtPmN0cmxfdXJiLCBHRlBfQVRPTUlDKSkpIHsKIAkJaWYgKHJldCA9PSAtRU5PREVWKQogCQkJbmV0aWZfZGV2aWNlX2RldGFjaChwZWdhc3VzLT5uZXQpOwotCQlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKLQkJCWRldl9lcnIoJnBlZ2FzdXMtPmludGYtPmRldiwgIiVzLCBzdGF0dXMgJWRcbiIsCi0JCQkJCV9fZnVuY19fLCByZXQpOworCQluZXRpZl9lcnIocGVnYXN1cywgZHJ2LCBwZWdhc3VzLT5uZXQsCisJCQkgICIlcywgc3RhdHVzICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0yNTksOSArMjU3LDggQEAKIAogCXRtcCA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF0bXApIHsKLQkJaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCi0JCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAib3V0IG9mIG1lbW9yeSBpbiAlc1xuIiwKLQkJCQkJX19mdW5jX18pOworCQluZXRpZl93YXJuKHBlZ2FzdXMsIGRydiwgcGVnYXN1cy0+bmV0LAorCQkJICAgIm91dCBvZiBtZW1vcnkgaW4gJXNcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCW1lbWNweSh0bXAsICZkYXRhLCAxKTsKQEAgLTI5MCw5ICsyODcsOSBAQAogCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIocGVnYXN1cy0+Y3RybF91cmIsIEdGUF9BVE9NSUMpKSkgewogCQlpZiAocmV0ID09IC1FTk9ERVYpCiAJCQluZXRpZl9kZXZpY2VfZGV0YWNoKHBlZ2FzdXMtPm5ldCk7Ci0JCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpICYmIHByaW50a19yYXRlbGltaXQoKSkKLQkJCWRldl9lcnIoJnBlZ2FzdXMtPmludGYtPmRldiwgIiVzLCBzdGF0dXMgJWRcbiIsCi0JCQkJCV9fZnVuY19fLCByZXQpOworCQlpZiAobmV0X3JhdGVsaW1pdCgpKQorCQkJbmV0aWZfZXJyKHBlZ2FzdXMsIGRydiwgcGVnYXN1cy0+bmV0LAorCQkJCSAgIiVzLCBzdGF0dXMgJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTMyMyw5ICszMjAsOCBAQAogCWlmICgocmV0ID0gdXNiX3N1Ym1pdF91cmIocGVnYXN1cy0+Y3RybF91cmIsIEdGUF9BVE9NSUMpKSkgewogCQlpZiAocmV0ID09IC1FTk9ERVYpCiAJCQluZXRpZl9kZXZpY2VfZGV0YWNoKHBlZ2FzdXMtPm5ldCk7Ci0JCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQotCQkJZGV2X2VycigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiJXMsIHN0YXR1cyAlZFxuIiwKLQkJCQkJX19mdW5jX18sIHJldCk7CisJCW5ldGlmX2VycihwZWdhc3VzLCBkcnYsIHBlZ2FzdXMtPm5ldCwKKwkJCSAgIiVzLCBzdGF0dXMgJWRcbiIsIF9fZnVuY19fLCByZXQpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0zNDksMTQgKzM0NSwxNiBAQAogCQlpZiAoZGF0YVswXSAmIFBIWV9ET05FKQogCQkJYnJlYWs7CiAJfQotCWlmIChpIDwgUkVHX1RJTUVPVVQpIHsKLQkJcmV0ID0gZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBQaHlEYXRhLCAyLCAmcmVnZGkpOwotCQkqcmVnZCA9IGxlMTZfdG9fY3B1KHJlZ2RpKTsKLQkJcmV0dXJuIHJldDsKLQl9CisKKwlpZiAoaSA+PSBSRUdfVElNRU9VVCkKKwkJZ290byBmYWlsOworCisJcmV0ID0gZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCBQaHlEYXRhLCAyLCAmcmVnZGkpOworCSpyZWdkID0gbGUxNl90b19jcHUocmVnZGkpOworCXJldHVybiByZXQ7CisKIGZhaWw6Ci0JaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCi0JCWRldl93YXJuKCZwZWdhc3VzLT5pbnRmLT5kZXYsICIlcyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwluZXRpZl93YXJuKHBlZ2FzdXMsIGRydiwgcGVnYXN1cy0+bmV0LCAiJXMgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzg4LDEyICszODYsMTQgQEAKIAkJaWYgKGRhdGFbMF0gJiBQSFlfRE9ORSkKIAkJCWJyZWFrOwogCX0KLQlpZiAoaSA8IFJFR19USU1FT1VUKQotCQlyZXR1cm4gcmV0OworCisJaWYgKGkgPj0gUkVHX1RJTUVPVVQpCisJCWdvdG8gZmFpbDsKKworCXJldHVybiByZXQ7CiAKIGZhaWw6Ci0JaWYgKG5ldGlmX21zZ19kcnYocGVnYXN1cykpCi0JCWRldl93YXJuKCZwZWdhc3VzLT5pbnRmLT5kZXYsICIlcyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwluZXRpZl93YXJuKHBlZ2FzdXMsIGRydiwgcGVnYXN1cy0+bmV0LCAiJXMgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIC1FVElNRURPVVQ7CiB9CiAKQEAgLTQyMiwxNSArNDIyLDE1IEBACiAJCWlmIChyZXQgPT0gLUVTSFVURE9XTikKIAkJCWdvdG8gZmFpbDsKIAl9Ci0JaWYgKGkgPCBSRUdfVElNRU9VVCkgewotCQlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEVwcm9tRGF0YSwgMiwgJnJldGRhdGFpKTsKLQkJKnJldGRhdGEgPSBsZTE2X3RvX2NwdShyZXRkYXRhaSk7Ci0JCXJldHVybiByZXQ7Ci0JfQorCWlmIChpID49IFJFR19USU1FT1VUKQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSBnZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEVwcm9tRGF0YSwgMiwgJnJldGRhdGFpKTsKKwkqcmV0ZGF0YSA9IGxlMTZfdG9fY3B1KHJldGRhdGFpKTsKKwlyZXR1cm4gcmV0OwogCiBmYWlsOgotCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQotCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiJXMgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJbmV0aWZfd2FybihwZWdhc3VzLCBkcnYsIHBlZ2FzdXMtPm5ldCwgIiVzIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCXJldHVybiAtRVRJTUVET1VUOwogfQogCkBAIC00NzUsMTEgKzQ3NSwxMyBAQAogCQkJYnJlYWs7CiAJfQogCWRpc2FibGVfZXByb21fd3JpdGUocGVnYXN1cyk7Ci0JaWYgKGkgPCBSRUdfVElNRU9VVCkKLQkJcmV0dXJuIHJldDsKKwlpZiAoaSA+PSBSRUdfVElNRU9VVCkKKwkJZ290byBmYWlsOworCisJcmV0dXJuIHJldDsKKwogZmFpbDoKLQlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKLQkJZGV2X3dhcm4oJnBlZ2FzdXMtPmludGYtPmRldiwgIiVzIGZhaWxlZFxuIiwgX19mdW5jX18pOworCW5ldGlmX3dhcm4ocGVnYXN1cywgZHJ2LCBwZWdhc3VzLT5uZXQsICIlcyBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gLUVUSU1FRE9VVDsKIH0KICNlbmRpZgkJCQkvKiBQRUdBU1VTX1dSSVRFX0VFUFJPTSAqLwpAQCAtNjQyLDI1ICs2NDQsMjAgQEAKIAljYXNlIDA6CiAJCWJyZWFrOwogCWNhc2UgLUVUSU1FOgotCQlpZiAobmV0aWZfbXNnX3J4X2VycihwZWdhc3VzKSkKLQkJCXByX2RlYnVnKCIlczogcmVzZXQgTUFDXG4iLCBuZXQtPm5hbWUpOworCQluZXRpZl9kYmcocGVnYXN1cywgcnhfZXJyLCBuZXQsICJyZXNldCBNQUNcbiIpOwogCQlwZWdhc3VzLT5mbGFncyAmPSB+UEVHQVNVU19SWF9CVVNZOwogCQlicmVhazsKIAljYXNlIC1FUElQRToJCS8qIHN0YWxsLCBvciBkaXNjb25uZWN0IGZyb20gVFQgKi8KIAkJLyogRklYTUUgc2NoZWR1bGUgd29yayB0byBjbGVhciB0aGUgaGFsdCAqLwotCQlpZiAobmV0aWZfbXNnX3J4X2VycihwZWdhc3VzKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBubyByeCBzdGFsbCByZWNvdmVyeVxuIiwKLQkJCQkJbmV0LT5uYW1lKTsKKwkJbmV0aWZfd2FybihwZWdhc3VzLCByeF9lcnIsIG5ldCwgIm5vIHJ4IHN0YWxsIHJlY292ZXJ5XG4iKTsKIAkJcmV0dXJuOwogCWNhc2UgLUVOT0VOVDoKIAljYXNlIC1FQ09OTlJFU0VUOgogCWNhc2UgLUVTSFVURE9XTjoKLQkJaWYgKG5ldGlmX21zZ19pZmRvd24ocGVnYXN1cykpCi0JCQlwcl9kZWJ1ZygiJXM6IHJ4IHVubGluaywgJWRcbiIsIG5ldC0+bmFtZSwgc3RhdHVzKTsKKwkJbmV0aWZfZGJnKHBlZ2FzdXMsIGlmZG93biwgbmV0LCAicnggdW5saW5rLCAlZFxuIiwgc3RhdHVzKTsKIAkJcmV0dXJuOwogCWRlZmF1bHQ6Ci0JCWlmIChuZXRpZl9tc2dfcnhfZXJyKHBlZ2FzdXMpKQotCQkJcHJfZGVidWcoIiVzOiBSWCBzdGF0dXMgJWRcbiIsIG5ldC0+bmFtZSwgc3RhdHVzKTsKKwkJbmV0aWZfZGJnKHBlZ2FzdXMsIHJ4X2VyciwgbmV0LCAiUlggc3RhdHVzICVkXG4iLCBzdGF0dXMpOwogCQlnb3RvIGdvb247CiAJfQogCkBAIC02NjksOSArNjY2LDggQEAKIAogCXJ4X3N0YXR1cyA9IGJ1Zltjb3VudCAtIDJdOwogCWlmIChyeF9zdGF0dXMgJiAweDFlKSB7Ci0JCWlmIChuZXRpZl9tc2dfcnhfZXJyKHBlZ2FzdXMpKQotCQkJcHJfZGVidWcoIiVzOiBSWCBwYWNrZXQgZXJyb3IgJXhcbiIsCi0JCQkJCW5ldC0+bmFtZSwgcnhfc3RhdHVzKTsKKwkJbmV0aWZfZGJnKHBlZ2FzdXMsIHJ4X2VyciwgbmV0LAorCQkJICAiUlggcGFja2V0IGVycm9yICV4XG4iLCByeF9zdGF0dXMpOwogCQlwZWdhc3VzLT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJaWYgKHJ4X3N0YXR1cyAmIDB4MDYpCS8vIGxvbmcgb3IgcnVudAogCQkJcGVnYXN1cy0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwpAQCAtNzU4LDkgKzc1NCw3IEBACiAJCXBlZ2FzdXMtPnJ4X3NrYiA9IHB1bGxfc2tiKHBlZ2FzdXMpOwogCX0KIAlpZiAocGVnYXN1cy0+cnhfc2tiID09IE5VTEwpIHsKLQkJaWYgKG5ldGlmX21zZ19yeF9lcnIocGVnYXN1cykpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbG93IG9uIG1lbW9yeVxuIiwKLQkJCQkJcGVnYXN1cy0+bmV0LT5uYW1lKTsKKwkJbmV0aWZfd2FybihwZWdhc3VzLCByeF9lcnIsIHBlZ2FzdXMtPm5ldCwgImxvdyBvbiBtZW1vcnlcbiIpOwogCQl0YXNrbGV0X3NjaGVkdWxlKCZwZWdhc3VzLT5yeF90bCk7CiAJCWdvdG8gZG9uZTsKIAl9CkBAIC04MDAsMTkgKzc5NCwxNSBAQAogCWNhc2UgLUVQSVBFOgogCQkvKiBGSVhNRSBzY2hlZHVsZV93b3JrKCkgdG8gY2xlYXIgdGhlIHR4IGhhbHQgKi8KIAkJbmV0aWZfc3RvcF9xdWV1ZShuZXQpOwotCQlpZiAobmV0aWZfbXNnX3R4X2VycihwZWdhc3VzKSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBubyB0eCBzdGFsbCByZWNvdmVyeVxuIiwKLQkJCQkJbmV0LT5uYW1lKTsKKwkJbmV0aWZfd2FybihwZWdhc3VzLCB0eF9lcnIsIG5ldCwgIm5vIHR4IHN0YWxsIHJlY292ZXJ5XG4iKTsKIAkJcmV0dXJuOwogCWNhc2UgLUVOT0VOVDoKIAljYXNlIC1FQ09OTlJFU0VUOgogCWNhc2UgLUVTSFVURE9XTjoKLQkJaWYgKG5ldGlmX21zZ19pZmRvd24ocGVnYXN1cykpCi0JCQlwcl9kZWJ1ZygiJXM6IHR4IHVubGluaywgJWRcbiIsIG5ldC0+bmFtZSwgc3RhdHVzKTsKKwkJbmV0aWZfZGJnKHBlZ2FzdXMsIGlmZG93biwgbmV0LCAidHggdW5saW5rLCAlZFxuIiwgc3RhdHVzKTsKIAkJcmV0dXJuOwogCWRlZmF1bHQ6Ci0JCWlmIChuZXRpZl9tc2dfdHhfZXJyKHBlZ2FzdXMpKQotCQkJcHJfaW5mbygiJXM6IFRYIHN0YXR1cyAlZFxuIiwgbmV0LT5uYW1lLCBzdGF0dXMpOworCQluZXRpZl9pbmZvKHBlZ2FzdXMsIHR4X2VyciwgbmV0LCAiVFggc3RhdHVzICVkXG4iLCBzdGF0dXMpOwogCQkvKiBGQUxMIFRIUk9VR0ggKi8KIAljYXNlIDA6CiAJCWJyZWFrOwpAQCAtODQzLDkgKzgzMyw3IEBACiAJCS8qIHNvbWUgUGVnYXN1cy1JIHByb2R1Y3RzIHJlcG9ydCBMT1RTIG9mIGRhdGEKIAkJICogdG9nZ2xlIGVycm9ycy4uLiBhdm9pZCBsb2cgc3BhbW1pbmcKIAkJICovCi0JCWlmIChuZXRpZl9tc2dfdGltZXIocGVnYXN1cykpCi0JCQlwcl9kZWJ1ZygiJXM6IGludHIgc3RhdHVzICVkXG4iLCBuZXQtPm5hbWUsCi0JCQkJCXN0YXR1cyk7CisJCW5ldGlmX2RiZyhwZWdhc3VzLCB0aW1lciwgbmV0LCAiaW50ciBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CiAJfQogCiAJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+PSA2KSB7CkBAIC04NzUsMTYgKzg2MywxNSBAQAogCXJlcyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlcyA9PSAtRU5PREVWKQogCQluZXRpZl9kZXZpY2VfZGV0YWNoKHBlZ2FzdXMtPm5ldCk7Ci0JaWYgKHJlcyAmJiBuZXRpZl9tc2dfdGltZXIocGVnYXN1cykpCi0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGNhbid0IHJlc3VibWl0IGludGVycnVwdCB1cmIsICVkXG4iLAotCQkJCW5ldC0+bmFtZSwgcmVzKTsKKwlpZiAocmVzKQorCQluZXRpZl9lcnIocGVnYXN1cywgdGltZXIsIG5ldCwKKwkJCSAgImNhbid0IHJlc3VibWl0IGludGVycnVwdCB1cmIsICVkXG4iLCByZXMpOwogfQogCiBzdGF0aWMgdm9pZCBwZWdhc3VzX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlwZWdhc3VzX3QgKnBlZ2FzdXMgPSBuZXRkZXZfcHJpdihuZXQpOwotCWlmIChuZXRpZl9tc2dfdGltZXIocGVnYXN1cykpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiB0eCB0aW1lb3V0XG4iLCBuZXQtPm5hbWUpOworCW5ldGlmX3dhcm4ocGVnYXN1cywgdGltZXIsIG5ldCwgInR4IHRpbWVvdXRcbiIpOwogCXVzYl91bmxpbmtfdXJiKHBlZ2FzdXMtPnR4X3VyYik7CiAJcGVnYXN1cy0+c3RhdHMudHhfZXJyb3JzKys7CiB9CkBAIC05MDYsOSArODkzLDcgQEAKIAkJCSAgcGVnYXN1cy0+dHhfYnVmZiwgY291bnQsCiAJCQkgIHdyaXRlX2J1bGtfY2FsbGJhY2ssIHBlZ2FzdXMpOwogCWlmICgocmVzID0gdXNiX3N1Ym1pdF91cmIocGVnYXN1cy0+dHhfdXJiLCBHRlBfQVRPTUlDKSkpIHsKLQkJaWYgKG5ldGlmX21zZ190eF9lcnIocGVnYXN1cykpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZmFpbCB0eCwgJWRcbiIsCi0JCQkJCW5ldC0+bmFtZSwgcmVzKTsKKwkJbmV0aWZfd2FybihwZWdhc3VzLCB0eF9lcnIsIG5ldCwgImZhaWwgdHgsICVkXG4iLCByZXMpOwogCQlzd2l0Y2ggKHJlcykgewogCQljYXNlIC1FUElQRToJCS8qIHN0YWxsLCBvciBkaXNjb25uZWN0IGZyb20gVFQgKi8KIAkJCS8qIGNsZWFudXAgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIHNjaGVkdWxlZCAqLwpAQCAtOTUyLDEwICs5MzcsOSBAQAogCWludGVydmFsID0gZGF0YSA+PiA4OwogCWlmIChwZWdhc3VzLT51c2ItPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdIKSB7CiAJCWlmIChpbnRlcnZhbCA8IDB4ODApIHsKLQkJCWlmIChuZXRpZl9tc2dfdGltZXIocGVnYXN1cykpCi0JCQkJZGV2X2luZm8oJnBlZ2FzdXMtPmludGYtPmRldiwgImludHIgaW50ZXJ2YWwgIgotCQkJCQkiY2hhbmdlZCBmcm9tICV1bXMgdG8gJXVtc1xuIiwKLQkJCQkJaW50ZXJ2YWwsIDB4ODApOworCQkJbmV0aWZfaW5mbyhwZWdhc3VzLCB0aW1lciwgcGVnYXN1cy0+bmV0LAorCQkJCSAgICJpbnRyIGludGVydmFsIGNoYW5nZWQgZnJvbSAldW1zIHRvICV1bXNcbiIsCisJCQkJICAgaW50ZXJ2YWwsIDB4ODApOwogCQkJaW50ZXJ2YWwgPSAweDgwOwogCQkJZGF0YSA9IChkYXRhICYgMHgwMEZGKSB8ICgodTE2KWludGVydmFsIDw8IDgpOwogI2lmZGVmIFBFR0FTVVNfV1JJVEVfRUVQUk9NCkBAIC0xMDQ2LDggKzEwMzAsNyBAQAogCWlmICgocmVzID0gdXNiX3N1Ym1pdF91cmIocGVnYXN1cy0+cnhfdXJiLCBHRlBfS0VSTkVMKSkpIHsKIAkJaWYgKHJlcyA9PSAtRU5PREVWKQogCQkJbmV0aWZfZGV2aWNlX2RldGFjaChwZWdhc3VzLT5uZXQpOwotCQlpZiAobmV0aWZfbXNnX2lmdXAocGVnYXN1cykpCi0JCQlwcl9kZWJ1ZygiJXM6IGZhaWxlZCByeF91cmIsICVkIiwgbmV0LT5uYW1lLCByZXMpOworCQluZXRpZl9kYmcocGVnYXN1cywgaWZ1cCwgbmV0LCAiZmFpbGVkIHJ4X3VyYiwgJWRcbiIsIHJlcyk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTEwNTgsMTUgKzEwNDEsMTMgQEAKIAlpZiAoKHJlcyA9IHVzYl9zdWJtaXRfdXJiKHBlZ2FzdXMtPmludHJfdXJiLCBHRlBfS0VSTkVMKSkpIHsKIAkJaWYgKHJlcyA9PSAtRU5PREVWKQogCQkJbmV0aWZfZGV2aWNlX2RldGFjaChwZWdhc3VzLT5uZXQpOwotCQlpZiAobmV0aWZfbXNnX2lmdXAocGVnYXN1cykpCi0JCQlwcl9kZWJ1ZygiJXM6IGZhaWxlZCBpbnRyX3VyYiwgJWRcbiIsIG5ldC0+bmFtZSwgcmVzKTsKKwkJbmV0aWZfZGJnKHBlZ2FzdXMsIGlmdXAsIG5ldCwgImZhaWxlZCBpbnRyX3VyYiwgJWRcbiIsIHJlcyk7CiAJCXVzYl9raWxsX3VyYihwZWdhc3VzLT5yeF91cmIpOwogCQlnb3RvIGV4aXQ7CiAJfQogCWlmICgocmVzID0gZW5hYmxlX25ldF90cmFmZmljKG5ldCwgcGVnYXN1cy0+dXNiKSkpIHsKLQkJaWYgKG5ldGlmX21zZ19pZnVwKHBlZ2FzdXMpKQotCQkJcHJfZGVidWcoIiVzOiBjYW4ndCBlbmFibGVfbmV0X3RyYWZmaWMoKSAtICVkXG4iLAotCQkJCQluZXQtPm5hbWUsIHJlcyk7CisJCW5ldGlmX2RiZyhwZWdhc3VzLCBpZnVwLCBuZXQsCisJCQkgICJjYW4ndCBlbmFibGVfbmV0X3RyYWZmaWMoKSAtICVkXG4iLCByZXMpOwogCQlyZXMgPSAtRUlPOwogCQl1c2Jfa2lsbF91cmIocGVnYXN1cy0+cnhfdXJiKTsKIAkJdXNiX2tpbGxfdXJiKHBlZ2FzdXMtPmludHJfdXJiKTsKQEAgLTEwNzUsOCArMTA1Niw3IEBACiAJfQogCXNldF9jYXJyaWVyKG5ldCk7CiAJbmV0aWZfc3RhcnRfcXVldWUobmV0KTsKLQlpZiAobmV0aWZfbXNnX2lmdXAocGVnYXN1cykpCi0JCXByX2RlYnVnKCIlczogb3BlblxuIiwgbmV0LT5uYW1lKTsKKwluZXRpZl9kYmcocGVnYXN1cywgaWZ1cCwgbmV0LCAib3BlblxuIik7CiAJcmVzID0gMDsKIGV4aXQ6CiAJcmV0dXJuIHJlczsKQEAgLTEyMzAsMTMgKzEyMTAsMTEgQEAKIAogCWlmIChuZXQtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKIAkJcGVnYXN1cy0+ZXRoX3JlZ3NbRXRoQ3RybDJdIHw9IFJYX1BST01JU0NVT1VTOwotCQlpZiAobmV0aWZfbXNnX2xpbmsocGVnYXN1cykpCi0JCQlwcl9pbmZvKCIlczogUHJvbWlzY3VvdXMgbW9kZSBlbmFibGVkLlxuIiwgbmV0LT5uYW1lKTsKLQl9IGVsc2UgaWYgKG5ldC0+bWNfY291bnQgfHwgKG5ldC0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisJCW5ldGlmX2luZm8ocGVnYXN1cywgbGluaywgbmV0LCAiUHJvbWlzY3VvdXMgbW9kZSBlbmFibGVkXG4iKTsKKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkobmV0KSB8fCAobmV0LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJcGVnYXN1cy0+ZXRoX3JlZ3NbRXRoQ3RybDBdIHw9IFJYX01VTFRJQ0FTVDsKIAkJcGVnYXN1cy0+ZXRoX3JlZ3NbRXRoQ3RybDJdICY9IH5SWF9QUk9NSVNDVU9VUzsKLQkJaWYgKG5ldGlmX21zZ19saW5rKHBlZ2FzdXMpKQotCQkJcHJfZGVidWcoIiVzOiBzZXQgYWxsbXVsdGlcbiIsIG5ldC0+bmFtZSk7CisJCW5ldGlmX2RiZyhwZWdhc3VzLCBsaW5rLCBuZXQsICJzZXQgYWxsbXVsdGlcbiIpOwogCX0gZWxzZSB7CiAJCXBlZ2FzdXMtPmV0aF9yZWdzW0V0aEN0cmwwXSAmPSB+UlhfTVVMVElDQVNUOwogCQlwZWdhc3VzLT5ldGhfcmVnc1tFdGhDdHJsMl0gJj0gflJYX1BST01JU0NVT1VTOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYyBiL2RyaXZlcnMvbmV0L3VzYi9ybmRpc19ob3N0LmMKaW5kZXggNDkwZmE4Zi4uNGNlMzMxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL3JuZGlzX2hvc3QuYworKysgYi9kcml2ZXJzL25ldC91c2Ivcm5kaXNfaG9zdC5jCkBAIC01Nyw4ICs1Nyw4IEBACiAgKi8KIHZvaWQgcm5kaXNfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKQogewotCWRldmRiZyhkZXYsICJybmRpcyBzdGF0dXMgdXJiLCBsZW4gJWQgc3RhdCAlZCIsCi0JCXVyYi0+YWN0dWFsX2xlbmd0aCwgdXJiLT5zdGF0dXMpOworCW5ldGRldl9kYmcoZGV2LT5uZXQsICJybmRpcyBzdGF0dXMgdXJiLCBsZW4gJWQgc3RhdCAlZFxuIiwKKwkJICAgdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnN0YXR1cyk7CiAJLy8gRklYTUUgZm9yIGtlZXBhbGl2ZXMsIHJlc3BvbmQgaW1tZWRpYXRlbHkgKGFzeW5jaHJvbm91c2x5KQogCS8vIGlmIG5vdCBhbiBSTkRJUyBzdGF0dXMsIGRvIGxpa2UgY2RjX3N0YXR1cyhkZXYsdXJiKSBkb2VzCiB9CkBAIC0zMzUsOCArMzM1LDggQEAKIAogCWRldi0+bWF4cGFja2V0ID0gdXNiX21heHBhY2tldChkZXYtPnVkZXYsIGRldi0+b3V0LCAxKTsKIAlpZiAoZGV2LT5tYXhwYWNrZXQgPT0gMCkgewotCQlpZiAobmV0aWZfbXNnX3Byb2JlKGRldikpCi0JCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJkZXYtPm1heHBhY2tldCBjYW4ndCBiZSAwXG4iKTsKKwkJbmV0aWZfZGJnKGRldiwgcHJvYmUsIGRldi0+bmV0LAorCQkJICAiZGV2LT5tYXhwYWNrZXQgY2FuJ3QgYmUgMFxuIik7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gZmFpbF9hbmRfcmVsZWFzZTsKIAl9CkBAIC0zOTQsMTcgKzM5NCwxNSBAQAogCX0KIAlpZiAoKGZsYWdzICYgRkxBR19STkRJU19QSFlNX1dJUkVMRVNTKSAmJgogCQkJKnBoeW0gIT0gUk5ESVNfUEhZU0lDQUxfTUVESVVNX1dJUkVMRVNTX0xBTikgewotCQlpZiAobmV0aWZfbXNnX3Byb2JlKGRldikpCi0JCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJkcml2ZXIgcmVxdWlyZXMgd2lyZWxlc3MgIgotCQkJCSJwaHlzaWNhbCBtZWRpdW0sIGJ1dCBkZXZpY2UgaXMgbm90LlxuIik7CisJCW5ldGlmX2RiZyhkZXYsIHByb2JlLCBkZXYtPm5ldCwKKwkJCSAgImRyaXZlciByZXF1aXJlcyB3aXJlbGVzcyBwaHlzaWNhbCBtZWRpdW0sIGJ1dCBkZXZpY2UgaXMgbm90XG4iKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBoYWx0X2ZhaWxfYW5kX3JlbGVhc2U7CiAJfQogCWlmICgoZmxhZ3MgJiBGTEFHX1JORElTX1BIWU1fTk9UX1dJUkVMRVNTKSAmJgogCQkJKnBoeW0gPT0gUk5ESVNfUEhZU0lDQUxfTUVESVVNX1dJUkVMRVNTX0xBTikgewotCQlpZiAobmV0aWZfbXNnX3Byb2JlKGRldikpCi0JCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJkcml2ZXIgcmVxdWlyZXMgbm9uLXdpcmVsZXNzICIKLQkJCQkicGh5c2ljYWwgbWVkaXVtLCBidXQgZGV2aWNlIGlzIHdpcmVsZXNzLlxuIik7CisJCW5ldGlmX2RiZyhkZXYsIHByb2JlLCBkZXYtPm5ldCwKKwkJCSAgImRyaXZlciByZXF1aXJlcyBub24td2lyZWxlc3MgcGh5c2ljYWwgbWVkaXVtLCBidXQgZGV2aWNlIGlzIHdpcmVsZXNzLlxuIik7CiAJCXJldHZhbCA9IC1FTk9ERVY7CiAJCWdvdG8gaGFsdF9mYWlsX2FuZF9yZWxlYXNlOwogCX0KQEAgLTQ5Nyw5ICs0OTUsOSBAQAogCQkJICAgICBza2ItPmxlbiA8IG1zZ19sZW4gfHwKIAkJCSAgICAgKGRhdGFfb2Zmc2V0ICsgZGF0YV9sZW4gKyA4KSA+IG1zZ19sZW4pKSB7CiAJCQlkZXYtPm5ldC0+c3RhdHMucnhfZnJhbWVfZXJyb3JzKys7Ci0JCQlkZXZkYmcoZGV2LCAiYmFkIHJuZGlzIG1lc3NhZ2UgJWQvJWQvJWQvJWQsIGxlbiAlZCIsCi0JCQkJbGUzMl90b19jcHUoaGRyLT5tc2dfdHlwZSksCi0JCQkJbXNnX2xlbiwgZGF0YV9vZmZzZXQsIGRhdGFfbGVuLCBza2ItPmxlbik7CisJCQluZXRkZXZfZGJnKGRldi0+bmV0LCAiYmFkIHJuZGlzIG1lc3NhZ2UgJWQvJWQvJWQvJWQsIGxlbiAlZFxuIiwKKwkJCQkgICBsZTMyX3RvX2NwdShoZHItPm1zZ190eXBlKSwKKwkJCQkgICBtc2dfbGVuLCBkYXRhX29mZnNldCwgZGF0YV9sZW4sIHNrYi0+bGVuKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCXNrYl9wdWxsKHNrYiwgOCArIGRhdGFfb2Zmc2V0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMgYi9kcml2ZXJzL25ldC91c2IvcnRsODE1MC5jCmluZGV4IGZkMTlkYjAuLmU4NWM4OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi9ydGw4MTUwLmMKKysrIGIvZHJpdmVycy9uZXQvdXNiL3J0bDgxNTAuYwpAQCAtMzEzLDIwICszMTMsMTcgQEAKIHsKIAlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOwogCXJ0bDgxNTBfdCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlpbnQgaTsKIAogCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCiAJCXJldHVybiAtRUJVU1k7CiAKIAltZW1jcHkobmV0ZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7Ci0JZGJnKCIlczogU2V0dGluZyBNQUMgYWRkcmVzcyB0byAiLCBuZXRkZXYtPm5hbWUpOwotCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCi0JCWRiZygiJTAyWDoiLCBuZXRkZXYtPmRldl9hZGRyW2ldKTsKLQlkYmcoIiUwMlhcbiIsIG5ldGRldi0+ZGV2X2FkZHJbaV0pOworCWRiZygiJXM6IFNldHRpbmcgTUFDIGFkZHJlc3MgdG8gJXBNXG4iLCBuZXRkZXYtPm5hbWUsIG5ldGRldi0+ZGV2X2FkZHIpOwogCS8qIFNldCB0aGUgSURSIHJlZ2lzdGVycy4gKi8KIAlzZXRfcmVnaXN0ZXJzKGRldiwgSURSLCBuZXRkZXYtPmFkZHJfbGVuLCBuZXRkZXYtPmRldl9hZGRyKTsKICNpZmRlZiBFRVBST01fV1JJVEUKIAl7CisJaW50IGk7CiAJdTggY3I7CiAJLyogR2V0IHRoZSBDUiBjb250ZW50cy4gKi8KIAlnZXRfcmVnaXN0ZXJzKGRldiwgQ1IsIDEsICZjcik7CkBAIC03MTQsNyArNzExLDcgQEAKIAlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CiAJCWRldi0+cnhfY3JlZyB8PSBjcHVfdG9fbGUxNigweDAwMDEpOwogCQlkZXZfaW5mbygmbmV0ZGV2LT5kZXYsICIlczogcHJvbWlzY3VvdXMgbW9kZVxuIiwgbmV0ZGV2LT5uYW1lKTsKLQl9IGVsc2UgaWYgKG5ldGRldi0+bWNfY291bnQgfHwKKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkobmV0ZGV2KSB8fAogCQkgICAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkJZGV2LT5yeF9jcmVnICY9IGNwdV90b19sZTE2KDB4ZmZmZSk7CiAJCWRldi0+cnhfY3JlZyB8PSBjcHVfdG9fbGUxNigweDAwMDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmMgYi9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYwppbmRleCAwYzNjNzM4Li5kZjkxNzlhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYworKysgYi9kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYwpAQCAtNzgsNyArNzgsNyBAQAogCQkwMCwgaW5kZXgsIGJ1ZiwgNCwgVVNCX0NUUkxfR0VUX1RJTUVPVVQpOwogCiAJaWYgKHVubGlrZWx5KHJldCA8IDApKQotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byByZWFkIHJlZ2lzdGVyIGluZGV4IDB4JTA4eCIsIGluZGV4KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJGYWlsZWQgdG8gcmVhZCByZWdpc3RlciBpbmRleCAweCUwOHhcbiIsIGluZGV4KTsKIAogCWxlMzJfdG9fY3B1cyhidWYpOwogCSpkYXRhID0gKmJ1ZjsKQEAgLTEwNiw3ICsxMDYsNyBAQAogCQkwMCwgaW5kZXgsIGJ1ZiwgNCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOwogCiAJaWYgKHVubGlrZWx5KHJldCA8IDApKQotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byB3cml0ZSByZWdpc3RlciBpbmRleCAweCUwOHgiLCBpbmRleCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIHJlZ2lzdGVyIGluZGV4IDB4JTA4eFxuIiwgaW5kZXgpOwogCiAJa2ZyZWUoYnVmKTsKIApAQCAtMTM4LDcgKzEzOCw3IEBACiAKIAkvKiBjb25maXJtIE1JSSBub3QgYnVzeSAqLwogCWlmIChzbXNjOTV4eF9waHlfd2FpdF9ub3RfYnVzeShkZXYpKSB7Ci0JCWRldndhcm4oZGV2LCAiTUlJIGlzIGJ1c3kgaW4gc21zYzk1eHhfbWRpb19yZWFkIik7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiTUlJIGlzIGJ1c3kgaW4gc21zYzk1eHhfbWRpb19yZWFkXG4iKTsKIAkJbXV0ZXhfdW5sb2NrKCZkZXYtPnBoeV9tdXRleCk7CiAJCXJldHVybiAtRUlPOwogCX0KQEAgLTE1MCw3ICsxNTAsNyBAQAogCXNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIE1JSV9BRERSLCBhZGRyKTsKIAogCWlmIChzbXNjOTV4eF9waHlfd2FpdF9ub3RfYnVzeShkZXYpKSB7Ci0JCWRldndhcm4oZGV2LCAiVGltZWQgb3V0IHJlYWRpbmcgTUlJIHJlZyAlMDJYIiwgaWR4KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJUaW1lZCBvdXQgcmVhZGluZyBNSUkgcmVnICUwMlhcbiIsIGlkeCk7CiAJCW11dGV4X3VubG9jaygmZGV2LT5waHlfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0xNzIsNyArMTcyLDcgQEAKIAogCS8qIGNvbmZpcm0gTUlJIG5vdCBidXN5ICovCiAJaWYgKHNtc2M5NXh4X3BoeV93YWl0X25vdF9idXN5KGRldikpIHsKLQkJZGV2d2FybihkZXYsICJNSUkgaXMgYnVzeSBpbiBzbXNjOTV4eF9tZGlvX3dyaXRlIik7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiTUlJIGlzIGJ1c3kgaW4gc21zYzk1eHhfbWRpb193cml0ZVxuIik7CiAJCW11dGV4X3VubG9jaygmZGV2LT5waHlfbXV0ZXgpOwogCQlyZXR1cm47CiAJfQpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJc21zYzk1eHhfd3JpdGVfcmVnKGRldiwgTUlJX0FERFIsIGFkZHIpOwogCiAJaWYgKHNtc2M5NXh4X3BoeV93YWl0X25vdF9idXN5KGRldikpCi0JCWRldndhcm4oZGV2LCAiVGltZWQgb3V0IHdyaXRpbmcgTUlJIHJlZyAlMDJYIiwgaWR4KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJUaW1lZCBvdXQgd3JpdGluZyBNSUkgcmVnICUwMlhcbiIsIGlkeCk7CiAKIAltdXRleF91bmxvY2soJmRldi0+cGh5X211dGV4KTsKIH0KQEAgLTIwNSw3ICsyMDUsNyBAQAogCX0gd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZpZXMsIHN0YXJ0X3RpbWUgKyBIWikpOwogCiAJaWYgKHZhbCAmIChFMlBfQ01EX1RJTUVPVVRfIHwgRTJQX0NNRF9CVVNZXykpIHsKLQkJZGV2d2FybihkZXYsICJFRVBST00gcmVhZCBvcGVyYXRpb24gdGltZW91dCIpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIkVFUFJPTSByZWFkIG9wZXJhdGlvbiB0aW1lb3V0XG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0yMjYsNyArMjI2LDcgQEAKIAkJdWRlbGF5KDQwKTsKIAl9IHdoaWxlICghdGltZV9hZnRlcihqaWZmaWVzLCBzdGFydF90aW1lICsgSFopKTsKIAotCWRldndhcm4oZGV2LCAiRUVQUk9NIGlzIGJ1c3kiKTsKKwluZXRkZXZfd2FybihkZXYtPm5ldCwgIkVFUFJPTSBpcyBidXN5XG4iKTsKIAlyZXR1cm4gLUVJTzsKIH0KIApAQCAtMzA4LDcgKzMwOCw3IEBACiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCiAJaWYgKHN0YXR1cyA8IDApCi0JCWRldndhcm4oZGV2LCAiYXN5bmMgY2FsbGJhY2sgZmFpbGVkIHdpdGggJWQiLCBzdGF0dXMpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgImFzeW5jIGNhbGxiYWNrIGZhaWxlZCB3aXRoICVkXG4iLCBzdGF0dXMpOwogCiAJa2ZyZWUodXNiX2NvbnRleHQpOwogCXVzYl9mcmVlX3VyYih1cmIpOwpAQCAtMzIzLDEzICszMjMsMTMgQEAKIAogCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CiAJaWYgKCF1cmIpIHsKLQkJZGV2d2FybihkZXYsICJFcnJvciBhbGxvY2F0aW5nIFVSQiIpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIkVycm9yIGFsbG9jYXRpbmcgVVJCXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJdXNiX2NvbnRleHQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX2NvbnRleHQpLCBHRlBfQVRPTUlDKTsKIAlpZiAodXNiX2NvbnRleHQgPT0gTlVMTCkgewotCQlkZXZ3YXJuKGRldiwgIkVycm9yIGFsbG9jYXRpbmcgY29udHJvbCBtc2ciKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJFcnJvciBhbGxvY2F0aW5nIGNvbnRyb2wgbXNnXG4iKTsKIAkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTM0OCw3ICszNDgsOCBAQAogCiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoc3RhdHVzIDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkVycm9yIHN1Ym1pdHRpbmcgY29udHJvbCBtc2csIHN0cz0lZCIsIHN0YXR1cyk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRXJyb3Igc3VibWl0dGluZyBjb250cm9sIG1zZywgc3RzPSVkXG4iLAorCQkJICAgIHN0YXR1cyk7CiAJCWtmcmVlKHVzYl9jb250ZXh0KTsKIAkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJfQpAQCAtMzc1LDQ2ICszNzYsMzIgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcGRhdGEtPm1hY19jcl9sb2NrLCBmbGFncyk7CiAKIAlpZiAoZGV2LT5uZXQtPmZsYWdzICYgSUZGX1BST01JU0MpIHsKLQkJaWYgKG5ldGlmX21zZ19kcnYoZGV2KSkKLQkJCWRldmRiZyhkZXYsICJwcm9taXNjdW91cyBtb2RlIGVuYWJsZWQiKTsKKwkJbmV0aWZfZGJnKGRldiwgZHJ2LCBkZXYtPm5ldCwgInByb21pc2N1b3VzIG1vZGUgZW5hYmxlZFxuIik7CiAJCXBkYXRhLT5tYWNfY3IgfD0gTUFDX0NSX1BSTVNfOwogCQlwZGF0YS0+bWFjX2NyICY9IH4oTUFDX0NSX01DUEFTXyB8IE1BQ19DUl9IUEZJTFRfKTsKIAl9IGVsc2UgaWYgKGRldi0+bmV0LT5mbGFncyAmIElGRl9BTExNVUxUSSkgewotCQlpZiAobmV0aWZfbXNnX2RydihkZXYpKQotCQkJZGV2ZGJnKGRldiwgInJlY2VpdmUgYWxsIG11bHRpY2FzdCBlbmFibGVkIik7CisJCW5ldGlmX2RiZyhkZXYsIGRydiwgZGV2LT5uZXQsICJyZWNlaXZlIGFsbCBtdWx0aWNhc3QgZW5hYmxlZFxuIik7CiAJCXBkYXRhLT5tYWNfY3IgfD0gTUFDX0NSX01DUEFTXzsKIAkJcGRhdGEtPm1hY19jciAmPSB+KE1BQ19DUl9QUk1TXyB8IE1BQ19DUl9IUEZJTFRfKTsKLQl9IGVsc2UgaWYgKGRldi0+bmV0LT5tY19jb3VudCA+IDApIHsKLQkJc3RydWN0IGRldl9tY19saXN0ICptY19saXN0ID0gZGV2LT5uZXQtPm1jX2xpc3Q7Ci0JCWludCBjb3VudCA9IDA7CisJfSBlbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldi0+bmV0KSkgeworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3Q7CiAKIAkJcGRhdGEtPm1hY19jciB8PSBNQUNfQ1JfSFBGSUxUXzsKIAkJcGRhdGEtPm1hY19jciAmPSB+KE1BQ19DUl9QUk1TXyB8IE1BQ19DUl9NQ1BBU18pOwogCi0JCXdoaWxlIChtY19saXN0KSB7Ci0JCQljb3VudCsrOwotCQkJaWYgKG1jX2xpc3QtPmRtaV9hZGRybGVuID09IEVUSF9BTEVOKSB7Ci0JCQkJdTMyIGJpdG51bSA9IHNtc2M5NXh4X2hhc2gobWNfbGlzdC0+ZG1pX2FkZHIpOwotCQkJCXUzMiBtYXNrID0gMHgwMSA8PCAoYml0bnVtICYgMHgxRik7Ci0JCQkJaWYgKGJpdG51bSAmIDB4MjApCi0JCQkJCWhhc2hfaGkgfD0gbWFzazsKLQkJCQllbHNlCi0JCQkJCWhhc2hfbG8gfD0gbWFzazsKLQkJCX0gZWxzZSB7Ci0JCQkJZGV2d2FybihkZXYsICJkbWlfYWRkcmxlbiAhPSA2Iik7Ci0JCQl9Ci0JCQltY19saXN0ID0gbWNfbGlzdC0+bmV4dDsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNfbGlzdCwgbmV0ZGV2KSB7CisJCQl1MzIgYml0bnVtID0gc21zYzk1eHhfaGFzaChtY19saXN0LT5kbWlfYWRkcik7CisJCQl1MzIgbWFzayA9IDB4MDEgPDwgKGJpdG51bSAmIDB4MUYpOworCQkJaWYgKGJpdG51bSAmIDB4MjApCisJCQkJaGFzaF9oaSB8PSBtYXNrOworCQkJZWxzZQorCQkJCWhhc2hfbG8gfD0gbWFzazsKIAkJfQogCi0JCWlmIChjb3VudCAhPSAoKHUzMilkZXYtPm5ldC0+bWNfY291bnQpKQotCQkJZGV2d2FybihkZXYsICJtY19jb3VudCAhPSBkZXYtPm1jX2NvdW50Iik7Ci0KLQkJaWYgKG5ldGlmX21zZ19kcnYoZGV2KSkKLQkJCWRldmRiZyhkZXYsICJIQVNISD0weCUwOFgsIEhBU0hMPTB4JTA4WCIsIGhhc2hfaGksCi0JCQkJaGFzaF9sbyk7CisJCW5ldGlmX2RiZyhkZXYsIGRydiwgZGV2LT5uZXQsICJIQVNISD0weCUwOFgsIEhBU0hMPTB4JTA4WFxuIiwKKwkJCQkgICBoYXNoX2hpLCBoYXNoX2xvKTsKIAl9IGVsc2UgewotCQlpZiAobmV0aWZfbXNnX2RydihkZXYpKQotCQkJZGV2ZGJnKGRldiwgInJlY2VpdmUgb3duIHBhY2tldHMgb25seSIpOworCQluZXRpZl9kYmcoZGV2LCBkcnYsIGRldi0+bmV0LCAicmVjZWl2ZSBvd24gcGFja2V0cyBvbmx5XG4iKTsKIAkJcGRhdGEtPm1hY19jciAmPQogCQkJfihNQUNfQ1JfUFJNU18gfCBNQUNfQ1JfTUNQQVNfIHwgTUFDX0NSX0hQRklMVF8pOwogCX0KQEAgLTQzNCw3ICs0MjEsNyBAQAogCiAJaW50IHJldCA9IHNtc2M5NXh4X3JlYWRfcmVnKGRldiwgQUZDX0NGRywgJmFmY19jZmcpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiZXJyb3IgcmVhZGluZyBBRkNfQ0ZHIik7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiZXJyb3IgcmVhZGluZyBBRkNfQ0ZHXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDUxLDEzICs0MzgsMTEgQEAKIAkJZWxzZQogCQkJYWZjX2NmZyAmPSB+MHhGOwogCi0JCWlmIChuZXRpZl9tc2dfbGluayhkZXYpKQotCQkJZGV2ZGJnKGRldiwgInJ4IHBhdXNlICVzLCB0eCBwYXVzZSAlcyIsCi0JCQkJKGNhcCAmIEZMT1dfQ1RSTF9SWCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpLAotCQkJCShjYXAgJiBGTE9XX0NUUkxfVFggPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSk7CisJCW5ldGlmX2RiZyhkZXYsIGxpbmssIGRldi0+bmV0LCAicnggcGF1c2UgJXMsIHR4IHBhdXNlICVzXG4iLAorCQkJCSAgIGNhcCAmIEZMT1dfQ1RSTF9SWCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIsCisJCQkJICAgY2FwICYgRkxPV19DVFJMX1RYID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CiAJfSBlbHNlIHsKLQkJaWYgKG5ldGlmX21zZ19saW5rKGRldikpCi0JCQlkZXZkYmcoZGV2LCAiaGFsZiBkdXBsZXgiKTsKKwkJbmV0aWZfZGJnKGRldiwgbGluaywgZGV2LT5uZXQsICJoYWxmIGR1cGxleFxuIik7CiAJCWZsb3cgPSAwOwogCQlhZmNfY2ZnIHw9IDB4RjsKIAl9CkBAIC00ODUsOSArNDcwLDggQEAKIAlsY2xhZHYgPSBzbXNjOTV4eF9tZGlvX3JlYWQoZGV2LT5uZXQsIG1paS0+cGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKIAlybXRhZHYgPSBzbXNjOTV4eF9tZGlvX3JlYWQoZGV2LT5uZXQsIG1paS0+cGh5X2lkLCBNSUlfTFBBKTsKIAotCWlmIChuZXRpZl9tc2dfbGluayhkZXYpKQotCQlkZXZkYmcoZGV2LCAic3BlZWQ6ICVkIGR1cGxleDogJWQgbGNsYWR2OiAlMDR4IHJtdGFkdjogJTA0eCIsCi0JCQllY21kLnNwZWVkLCBlY21kLmR1cGxleCwgbGNsYWR2LCBybXRhZHYpOworCW5ldGlmX2RiZyhkZXYsIGxpbmssIGRldi0+bmV0LCAic3BlZWQ6ICVkIGR1cGxleDogJWQgbGNsYWR2OiAlMDR4IHJtdGFkdjogJTA0eFxuIiwKKwkJICBlY21kLnNwZWVkLCBlY21kLmR1cGxleCwgbGNsYWR2LCBybXRhZHYpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnBkYXRhLT5tYWNfY3JfbG9jaywgZmxhZ3MpOwogCWlmIChlY21kLmR1cGxleCAhPSBEVVBMRVhfRlVMTCkgewpAQCAtNTExLDIwICs0OTUsMjEgQEAKIAl1MzIgaW50ZGF0YTsKIAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGggIT0gNCkgewotCQlkZXZ3YXJuKGRldiwgInVuZXhwZWN0ZWQgdXJiIGxlbmd0aCAlZCIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAidW5leHBlY3RlZCB1cmIgbGVuZ3RoICVkXG4iLAorCQkJICAgIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXJldHVybjsKIAl9CiAKIAltZW1jcHkoJmludGRhdGEsIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCA0KTsKIAlsZTMyX3RvX2NwdXMoJmludGRhdGEpOwogCi0JaWYgKG5ldGlmX21zZ19saW5rKGRldikpCi0JCWRldmRiZyhkZXYsICJpbnRkYXRhOiAweCUwOFgiLCBpbnRkYXRhKTsKKwluZXRpZl9kYmcoZGV2LCBsaW5rLCBkZXYtPm5ldCwgImludGRhdGE6IDB4JTA4WFxuIiwgaW50ZGF0YSk7CiAKIAlpZiAoaW50ZGF0YSAmIElOVF9FTlBfUEhZX0lOVF8pCiAJCXVzYm5ldF9kZWZlcl9rZXZlbnQoZGV2LCBFVkVOVF9MSU5LX1JFU0VUKTsKIAllbHNlCi0JCWRldndhcm4oZGV2LCAidW5leHBlY3RlZCBpbnRlcnJ1cHQsIGludGRhdGE9MHglMDhYIiwgaW50ZGF0YSk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAidW5leHBlY3RlZCBpbnRlcnJ1cHQsIGludGRhdGE9MHglMDhYXG4iLAorCQkJICAgIGludGRhdGEpOwogfQogCiAvKiBFbmFibGUgb3IgZGlzYWJsZSBUeCAmIFJ4IGNoZWNrc3VtIG9mZmxvYWQgZW5naW5lcyAqLwpAQCAtNTM0LDcgKzUxOSw3IEBACiAJdTMyIHJlYWRfYnVmOwogCWludCByZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIENPRV9DUiwgJnJlYWRfYnVmKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byByZWFkIENPRV9DUjogJWQiLCByZXQpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIkZhaWxlZCB0byByZWFkIENPRV9DUjogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC01NTAsMTIgKzUzNSwxMSBAQAogCiAJcmV0ID0gc21zYzk1eHhfd3JpdGVfcmVnKGRldiwgQ09FX0NSLCByZWFkX2J1Zik7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2d2FybihkZXYsICJGYWlsZWQgdG8gd3JpdGUgQ09FX0NSOiAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIENPRV9DUjogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKG5ldGlmX21zZ19odyhkZXYpKQotCQlkZXZkYmcoZGV2LCAiQ09FX0NSID0gMHglMDh4IiwgcmVhZF9idWYpOworCW5ldGlmX2RiZyhkZXYsIGh3LCBkZXYtPm5ldCwgIkNPRV9DUiA9IDB4JTA4eFxuIiwgcmVhZF9idWYpOwogCXJldHVybiAwOwogfQogCkBAIC01ODAsOCArNTY0LDggQEAKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAJaWYgKGVlLT5tYWdpYyAhPSBMQU45NVhYX0VFUFJPTV9NQUdJQykgewotCQlkZXZ3YXJuKGRldiwgIkVFUFJPTTogbWFnaWMgdmFsdWUgbWlzbWF0Y2gsIG1hZ2ljID0gMHgleCIsCi0JCQllZS0+bWFnaWMpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIkVFUFJPTTogbWFnaWMgdmFsdWUgbWlzbWF0Y2gsIG1hZ2ljID0gMHgleFxuIiwKKwkJCSAgICBlZS0+bWFnaWMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTY1OSwxNiArNjQzLDE0IEBACiAJCQlkZXYtPm5ldC0+ZGV2X2FkZHIpID09IDApIHsKIAkJaWYgKGlzX3ZhbGlkX2V0aGVyX2FkZHIoZGV2LT5uZXQtPmRldl9hZGRyKSkgewogCQkJLyogZWVwcm9tIHZhbHVlcyBhcmUgdmFsaWQgc28gdXNlIHRoZW0gKi8KLQkJCWlmIChuZXRpZl9tc2dfaWZ1cChkZXYpKQotCQkJCWRldmRiZyhkZXYsICJNQUMgYWRkcmVzcyByZWFkIGZyb20gRUVQUk9NIik7CisJCQluZXRpZl9kYmcoZGV2LCBpZnVwLCBkZXYtPm5ldCwgIk1BQyBhZGRyZXNzIHJlYWQgZnJvbSBFRVBST01cbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJfQogCiAJLyogbm8gZWVwcm9tLCBvciBlZXByb20gdmFsdWVzIGFyZSBpbnZhbGlkLiBnZW5lcmF0ZSByYW5kb20gTUFDICovCiAJcmFuZG9tX2V0aGVyX2FkZHIoZGV2LT5uZXQtPmRldl9hZGRyKTsKLQlpZiAobmV0aWZfbXNnX2lmdXAoZGV2KSkKLQkJZGV2ZGJnKGRldiwgIk1BQyBhZGRyZXNzIHNldCB0byByYW5kb21fZXRoZXJfYWRkciIpOworCW5ldGlmX2RiZyhkZXYsIGlmdXAsIGRldi0+bmV0LCAiTUFDIGFkZHJlc3Mgc2V0IHRvIHJhbmRvbV9ldGhlcl9hZGRyXG4iKTsKIH0KIAogc3RhdGljIGludCBzbXNjOTV4eF9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IHVzYm5ldCAqZGV2KQpAQCAtNjgwLDEzICs2NjIsMTMgQEAKIAogCXJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIEFERFJMLCBhZGRyX2xvKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byB3cml0ZSBBRERSTDogJWQiLCByZXQpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIkZhaWxlZCB0byB3cml0ZSBBRERSTDogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0ID0gc21zYzk1eHhfd3JpdGVfcmVnKGRldiwgQUREUkgsIGFkZHJfaGkpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHdyaXRlIEFERFJIOiAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIEFERFJIOiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTc0Nyw4ICs3MjksNyBAQAogCQlQSFlfSU5UX01BU0tfREVGQVVMVF8pOwogCW1paV9ud2F5X3Jlc3RhcnQoJmRldi0+bWlpKTsKIAotCWlmIChuZXRpZl9tc2dfaWZ1cChkZXYpKQotCQlkZXZkYmcoZGV2LCAicGh5IGluaXRpYWxpc2VkIHN1Y2Nlc3NmdWxseSIpOworCW5ldGlmX2RiZyhkZXYsIGlmdXAsIGRldi0+bmV0LCAicGh5IGluaXRpYWxpc2VkIHN1Y2Nlc3NmdWxseVxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1OSwxNCArNzQwLDEzIEBACiAJdTMyIHJlYWRfYnVmLCB3cml0ZV9idWYsIGJ1cnN0X2NhcDsKIAlpbnQgcmV0ID0gMCwgdGltZW91dDsKIAotCWlmIChuZXRpZl9tc2dfaWZ1cChkZXYpKQotCQlkZXZkYmcoZGV2LCAiZW50ZXJpbmcgc21zYzk1eHhfcmVzZXQiKTsKKwluZXRpZl9kYmcoZGV2LCBpZnVwLCBkZXYtPm5ldCwgImVudGVyaW5nIHNtc2M5NXh4X3Jlc2V0XG4iKTsKIAogCXdyaXRlX2J1ZiA9IEhXX0NGR19MUlNUXzsKIAlyZXQgPSBzbXNjOTV4eF93cml0ZV9yZWcoZGV2LCBIV19DRkcsIHdyaXRlX2J1Zik7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2d2FybihkZXYsICJGYWlsZWQgdG8gd3JpdGUgSFdfQ0ZHX0xSU1RfIGJpdCBpbiBIV19DRkcgIgotCQkJInJlZ2lzdGVyLCByZXQgPSAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIEhXX0NGR19MUlNUXyBiaXQgaW4gSFdfQ0ZHIHJlZ2lzdGVyLCByZXQgPSAlZFxuIiwKKwkJCSAgICByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtNzc0LDcgKzc1NCw3IEBACiAJZG8gewogCQlyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIEhXX0NGRywgJnJlYWRfYnVmKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHJlYWQgSFdfQ0ZHOiAlZCIsIHJldCk7CisJCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIkZhaWxlZCB0byByZWFkIEhXX0NGRzogJWRcbiIsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCW1zbGVlcCgxMCk7CkBAIC03ODIsMTQgKzc2MiwxNCBAQAogCX0gd2hpbGUgKChyZWFkX2J1ZiAmIEhXX0NGR19MUlNUXykgJiYgKHRpbWVvdXQgPCAxMDApKTsKIAogCWlmICh0aW1lb3V0ID49IDEwMCkgewotCQlkZXZ3YXJuKGRldiwgInRpbWVvdXQgd2FpdGluZyBmb3IgY29tcGxldGlvbiBvZiBMaXRlIFJlc2V0Iik7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAidGltZW91dCB3YWl0aW5nIGZvciBjb21wbGV0aW9uIG9mIExpdGUgUmVzZXRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXdyaXRlX2J1ZiA9IFBNX0NUTF9QSFlfUlNUXzsKIAlyZXQgPSBzbXNjOTV4eF93cml0ZV9yZWcoZGV2LCBQTV9DVFJMLCB3cml0ZV9idWYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHdyaXRlIFBNX0NUUkw6ICVkIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJGYWlsZWQgdG8gd3JpdGUgUE1fQ1RSTDogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC03OTcsNyArNzc3LDcgQEAKIAlkbyB7CiAJCXJldCA9IHNtc2M5NXh4X3JlYWRfcmVnKGRldiwgUE1fQ1RSTCwgJnJlYWRfYnVmKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHJlYWQgUE1fQ1RSTDogJWQiLCByZXQpOworCQkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJGYWlsZWQgdG8gcmVhZCBQTV9DVFJMOiAlZFxuIiwgcmV0KTsKIAkJCXJldHVybiByZXQ7CiAJCX0KIAkJbXNsZWVwKDEwKTsKQEAgLTgwNSw3ICs3ODUsNyBAQAogCX0gd2hpbGUgKChyZWFkX2J1ZiAmIFBNX0NUTF9QSFlfUlNUXykgJiYgKHRpbWVvdXQgPCAxMDApKTsKIAogCWlmICh0aW1lb3V0ID49IDEwMCkgewotCQlkZXZ3YXJuKGRldiwgInRpbWVvdXQgd2FpdGluZyBmb3IgUEhZIFJlc2V0Iik7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAidGltZW91dCB3YWl0aW5nIGZvciBQSFkgUmVzZXRcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtODE1LDM1ICs3OTUsMzUgQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChuZXRpZl9tc2dfaWZ1cChkZXYpKQotCQlkZXZkYmcoZGV2LCAiTUFDIEFkZHJlc3M6ICVwTSIsIGRldi0+bmV0LT5kZXZfYWRkcik7CisJbmV0aWZfZGJnKGRldiwgaWZ1cCwgZGV2LT5uZXQsCisJCSAgIk1BQyBBZGRyZXNzOiAlcE1cbiIsIGRldi0+bmV0LT5kZXZfYWRkcik7CiAKIAlyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIEhXX0NGRywgJnJlYWRfYnVmKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byByZWFkIEhXX0NGRzogJWQiLCByZXQpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIkZhaWxlZCB0byByZWFkIEhXX0NGRzogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCi0JaWYgKG5ldGlmX21zZ19pZnVwKGRldikpCi0JCWRldmRiZyhkZXYsICJSZWFkIFZhbHVlIGZyb20gSFdfQ0ZHIDogMHglMDh4IiwgcmVhZF9idWYpOworCW5ldGlmX2RiZyhkZXYsIGlmdXAsIGRldi0+bmV0LAorCQkgICJSZWFkIFZhbHVlIGZyb20gSFdfQ0ZHIDogMHglMDh4XG4iLCByZWFkX2J1Zik7CiAKIAlyZWFkX2J1ZiB8PSBIV19DRkdfQklSXzsKIAogCXJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIEhXX0NGRywgcmVhZF9idWYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHdyaXRlIEhXX0NGR19CSVJfIGJpdCBpbiBIV19DRkcgIgotCQkJInJlZ2lzdGVyLCByZXQgPSAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIEhXX0NGR19CSVJfIGJpdCBpbiBIV19DRkcgcmVnaXN0ZXIsIHJldCA9ICVkXG4iLAorCQkJICAgIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0ID0gc21zYzk1eHhfcmVhZF9yZWcoZGV2LCBIV19DRkcsICZyZWFkX2J1Zik7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2d2FybihkZXYsICJGYWlsZWQgdG8gcmVhZCBIV19DRkc6ICVkIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJGYWlsZWQgdG8gcmVhZCBIV19DRkc6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KLQlpZiAobmV0aWZfbXNnX2lmdXAoZGV2KSkKLQkJZGV2ZGJnKGRldiwgIlJlYWQgVmFsdWUgZnJvbSBIV19DRkcgYWZ0ZXIgd3JpdGluZyAiCi0JCQkiSFdfQ0ZHX0JJUl86IDB4JTA4eCIsIHJlYWRfYnVmKTsKKwluZXRpZl9kYmcoZGV2LCBpZnVwLCBkZXYtPm5ldCwKKwkJICAiUmVhZCBWYWx1ZSBmcm9tIEhXX0NGRyBhZnRlciB3cml0aW5nIEhXX0NGR19CSVJfOiAweCUwOHhcbiIsCisJCSAgcmVhZF9idWYpOwogCiAJaWYgKCF0dXJib19tb2RlKSB7CiAJCWJ1cnN0X2NhcCA9IDA7CkBAIC04NTYsNDcgKzgzNiw0NyBAQAogCQlkZXYtPnJ4X3VyYl9zaXplID0gREVGQVVMVF9GU19CVVJTVF9DQVBfU0laRTsKIAl9CiAKLQlpZiAobmV0aWZfbXNnX2lmdXAoZGV2KSkKLQkJZGV2ZGJnKGRldiwgInJ4X3VyYl9zaXplPSVsZCIsICh1bG9uZylkZXYtPnJ4X3VyYl9zaXplKTsKKwluZXRpZl9kYmcoZGV2LCBpZnVwLCBkZXYtPm5ldCwKKwkJICAicnhfdXJiX3NpemU9JWxkXG4iLCAodWxvbmcpZGV2LT5yeF91cmJfc2l6ZSk7CiAKIAlyZXQgPSBzbXNjOTV4eF93cml0ZV9yZWcoZGV2LCBCVVJTVF9DQVAsIGJ1cnN0X2NhcCk7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2d2FybihkZXYsICJGYWlsZWQgdG8gd3JpdGUgQlVSU1RfQ0FQOiAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIEJVUlNUX0NBUDogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJcmV0ID0gc21zYzk1eHhfcmVhZF9yZWcoZGV2LCBCVVJTVF9DQVAsICZyZWFkX2J1Zik7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2d2FybihkZXYsICJGYWlsZWQgdG8gcmVhZCBCVVJTVF9DQVA6ICVkIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJGYWlsZWQgdG8gcmVhZCBCVVJTVF9DQVA6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KLQlpZiAobmV0aWZfbXNnX2lmdXAoZGV2KSkKLQkJZGV2ZGJnKGRldiwgIlJlYWQgVmFsdWUgZnJvbSBCVVJTVF9DQVAgYWZ0ZXIgd3JpdGluZzogMHglMDh4IiwKLQkJCXJlYWRfYnVmKTsKKwluZXRpZl9kYmcoZGV2LCBpZnVwLCBkZXYtPm5ldCwKKwkJICAiUmVhZCBWYWx1ZSBmcm9tIEJVUlNUX0NBUCBhZnRlciB3cml0aW5nOiAweCUwOHhcbiIsCisJCSAgcmVhZF9idWYpOwogCiAJcmVhZF9idWYgPSBERUZBVUxUX0JVTEtfSU5fREVMQVk7CiAJcmV0ID0gc21zYzk1eHhfd3JpdGVfcmVnKGRldiwgQlVMS19JTl9ETFksIHJlYWRfYnVmKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgInJldCA9ICVkIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJyZXQgPSAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIEJVTEtfSU5fRExZLCAmcmVhZF9idWYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHJlYWQgQlVMS19JTl9ETFk6ICVkIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJGYWlsZWQgdG8gcmVhZCBCVUxLX0lOX0RMWTogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQotCWlmIChuZXRpZl9tc2dfaWZ1cChkZXYpKQotCQlkZXZkYmcoZGV2LCAiUmVhZCBWYWx1ZSBmcm9tIEJVTEtfSU5fRExZIGFmdGVyIHdyaXRpbmc6ICIKLQkJCSIweCUwOHgiLCByZWFkX2J1Zik7CisJbmV0aWZfZGJnKGRldiwgaWZ1cCwgZGV2LT5uZXQsCisJCSAgIlJlYWQgVmFsdWUgZnJvbSBCVUxLX0lOX0RMWSBhZnRlciB3cml0aW5nOiAweCUwOHhcbiIsCisJCSAgcmVhZF9idWYpOwogCiAJcmV0ID0gc21zYzk1eHhfcmVhZF9yZWcoZGV2LCBIV19DRkcsICZyZWFkX2J1Zik7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2d2FybihkZXYsICJGYWlsZWQgdG8gcmVhZCBIV19DRkc6ICVkIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJGYWlsZWQgdG8gcmVhZCBIV19DRkc6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KLQlpZiAobmV0aWZfbXNnX2lmdXAoZGV2KSkKLQkJZGV2ZGJnKGRldiwgIlJlYWQgVmFsdWUgZnJvbSBIV19DRkc6IDB4JTA4eCIsIHJlYWRfYnVmKTsKKwluZXRpZl9kYmcoZGV2LCBpZnVwLCBkZXYtPm5ldCwKKwkJICAiUmVhZCBWYWx1ZSBmcm9tIEhXX0NGRzogMHglMDh4XG4iLCByZWFkX2J1Zik7CiAKIAlpZiAodHVyYm9fbW9kZSkKIAkJcmVhZF9idWYgfD0gKEhXX0NGR19NRUZfIHwgSFdfQ0ZHX0JDRV8pOwpAQCAtOTA4LDQxICs4ODgsNDEgQEAKIAogCXJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIEhXX0NGRywgcmVhZF9idWYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHdyaXRlIEhXX0NGRyByZWdpc3RlciwgcmV0PSVkIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJGYWlsZWQgdG8gd3JpdGUgSFdfQ0ZHIHJlZ2lzdGVyLCByZXQ9JWRcbiIsCisJCQkgICAgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIEhXX0NGRywgJnJlYWRfYnVmKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byByZWFkIEhXX0NGRzogJWQiLCByZXQpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIkZhaWxlZCB0byByZWFkIEhXX0NGRzogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQotCWlmIChuZXRpZl9tc2dfaWZ1cChkZXYpKQotCQlkZXZkYmcoZGV2LCAiUmVhZCBWYWx1ZSBmcm9tIEhXX0NGRyBhZnRlciB3cml0aW5nOiAweCUwOHgiLAotCQkJcmVhZF9idWYpOworCW5ldGlmX2RiZyhkZXYsIGlmdXAsIGRldi0+bmV0LAorCQkgICJSZWFkIFZhbHVlIGZyb20gSFdfQ0ZHIGFmdGVyIHdyaXRpbmc6IDB4JTA4eFxuIiwgcmVhZF9idWYpOwogCiAJd3JpdGVfYnVmID0gMHhGRkZGRkZGRjsKIAlyZXQgPSBzbXNjOTV4eF93cml0ZV9yZWcoZGV2LCBJTlRfU1RTLCB3cml0ZV9idWYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHdyaXRlIElOVF9TVFMgcmVnaXN0ZXIsIHJldD0lZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIElOVF9TVFMgcmVnaXN0ZXIsIHJldD0lZFxuIiwKKwkJCSAgICByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXJldCA9IHNtc2M5NXh4X3JlYWRfcmVnKGRldiwgSURfUkVWLCAmcmVhZF9idWYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHJlYWQgSURfUkVWOiAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHJlYWQgSURfUkVWOiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JaWYgKG5ldGlmX21zZ19pZnVwKGRldikpCi0JCWRldmRiZyhkZXYsICJJRF9SRVYgPSAweCUwOHgiLCByZWFkX2J1Zik7CisJbmV0aWZfZGJnKGRldiwgaWZ1cCwgZGV2LT5uZXQsICJJRF9SRVYgPSAweCUwOHhcbiIsIHJlYWRfYnVmKTsKIAogCS8qIENvbmZpZ3VyZSBHUElPIHBpbnMgYXMgTEVEIG91dHB1dHMgKi8KIAl3cml0ZV9idWYgPSBMRURfR1BJT19DRkdfU1BEX0xFRCB8IExFRF9HUElPX0NGR19MTktfTEVEIHwKIAkJTEVEX0dQSU9fQ0ZHX0ZEWF9MRUQ7CiAJcmV0ID0gc21zYzk1eHhfd3JpdGVfcmVnKGRldiwgTEVEX0dQSU9fQ0ZHLCB3cml0ZV9idWYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHdyaXRlIExFRF9HUElPX0NGRyByZWdpc3RlciwgcmV0PSVkIiwKLQkJCXJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIExFRF9HUElPX0NGRyByZWdpc3RlciwgcmV0PSVkXG4iLAorCQkJICAgIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC05NTAsMjEgKzkzMCwyMSBAQAogCXdyaXRlX2J1ZiA9IDA7CiAJcmV0ID0gc21zYzk1eHhfd3JpdGVfcmVnKGRldiwgRkxPVywgd3JpdGVfYnVmKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byB3cml0ZSBGTE9XOiAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIEZMT1c6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXJlYWRfYnVmID0gQUZDX0NGR19ERUZBVUxUOwogCXJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIEFGQ19DRkcsIHJlYWRfYnVmKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byB3cml0ZSBBRkNfQ0ZHOiAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIEFGQ19DRkc6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCS8qIERvbid0IG5lZWQgbWFjX2NyX2xvY2sgZHVyaW5nIGluaXRpYWxpc2F0aW9uICovCiAJcmV0ID0gc21zYzk1eHhfcmVhZF9yZWcoZGV2LCBNQUNfQ1IsICZwZGF0YS0+bWFjX2NyKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byByZWFkIE1BQ19DUjogJWQiLCByZXQpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIkZhaWxlZCB0byByZWFkIE1BQ19DUjogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC05NzMsNyArOTUzLDcgQEAKIAl3cml0ZV9idWYgPSAodTMyKUVUSF9QXzgwMjFROwogCXJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIFZMQU4xLCB3cml0ZV9idWYpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4oZGV2LCAiRmFpbGVkIHRvIHdyaXRlIFZBTjE6ICVkIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJGYWlsZWQgdG8gd3JpdGUgVkFOMTogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC05ODEsNyArOTYxLDcgQEAKIAlldGh0b29sX29wX3NldF90eF9od19jc3VtKG5ldGRldiwgcGRhdGEtPnVzZV90eF9jc3VtKTsKIAlyZXQgPSBzbXNjOTV4eF9zZXRfY3N1bXMoZGV2KTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byBzZXQgY3N1bSBvZmZsb2FkOiAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHNldCBjc3VtIG9mZmxvYWQ6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtOTkyLDcgKzk3Miw3IEBACiAKIAlyZXQgPSBzbXNjOTV4eF9yZWFkX3JlZyhkZXYsIElOVF9FUF9DVEwsICZyZWFkX2J1Zik7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2d2FybihkZXYsICJGYWlsZWQgdG8gcmVhZCBJTlRfRVBfQ1RMOiAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHJlYWQgSU5UX0VQX0NUTDogJWRcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0xMDAxLDE1ICs5ODEsMTQgQEAKIAogCXJldCA9IHNtc2M5NXh4X3dyaXRlX3JlZyhkZXYsIElOVF9FUF9DVEwsIHJlYWRfYnVmKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZ3YXJuKGRldiwgIkZhaWxlZCB0byB3cml0ZSBJTlRfRVBfQ1RMOiAlZCIsIHJldCk7CisJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRmFpbGVkIHRvIHdyaXRlIElOVF9FUF9DVEw6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIAogCXNtc2M5NXh4X3N0YXJ0X3R4X3BhdGgoZGV2KTsKIAlzbXNjOTV4eF9zdGFydF9yeF9wYXRoKGRldik7CiAKLQlpZiAobmV0aWZfbXNnX2lmdXAoZGV2KSkKLQkJZGV2ZGJnKGRldiwgInNtc2M5NXh4X3Jlc2V0LCByZXR1cm4gMCIpOworCW5ldGlmX2RiZyhkZXYsIGlmdXAsIGRldi0+bmV0LCAic21zYzk1eHhfcmVzZXQsIHJldHVybiAwXG4iKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTAzNCw3ICsxMDEzLDcgQEAKIAogCXJldCA9IHVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldiwgaW50Zik7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2d2FybihkZXYsICJ1c2JuZXRfZ2V0X2VuZHBvaW50cyBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJ1c2JuZXRfZ2V0X2VuZHBvaW50cyBmYWlsZWQ6ICVkXG4iLCByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTA0Myw3ICsxMDIyLDcgQEAKIAogCXBkYXRhID0gKHN0cnVjdCBzbXNjOTV4eF9wcml2ICopKGRldi0+ZGF0YVswXSk7CiAJaWYgKCFwZGF0YSkgewotCQlkZXZ3YXJuKGRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBzdHJ1Y3Qgc21zYzk1eHhfcHJpdiIpOworCQluZXRkZXZfd2FybihkZXYtPm5ldCwgIlVuYWJsZSB0byBhbGxvY2F0ZSBzdHJ1Y3Qgc21zYzk1eHhfcHJpdlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIApAQCAtMTA2Niw4ICsxMDQ1LDcgQEAKIHsKIAlzdHJ1Y3Qgc21zYzk1eHhfcHJpdiAqcGRhdGEgPSAoc3RydWN0IHNtc2M5NXh4X3ByaXYgKikoZGV2LT5kYXRhWzBdKTsKIAlpZiAocGRhdGEpIHsKLQkJaWYgKG5ldGlmX21zZ19pZmRvd24oZGV2KSkKLQkJCWRldmRiZyhkZXYsICJmcmVlIHBkYXRhIik7CisJCW5ldGlmX2RiZyhkZXYsIGlmZG93biwgZGV2LT5uZXQsICJmcmVlIHBkYXRhXG4iKTsKIAkJa2ZyZWUocGRhdGEpOwogCQlwZGF0YSA9IE5VTEw7CiAJCWRldi0+ZGF0YVswXSA9IDA7CkBAIC0xMTAxLDggKzEwNzksOCBAQAogCQlhbGlnbl9jb3VudCA9ICg0IC0gKChzaXplICsgTkVUX0lQX0FMSUdOKSAlIDQpKSAlIDQ7CiAKIAkJaWYgKHVubGlrZWx5KGhlYWRlciAmIFJYX1NUU19FU18pKSB7Ci0JCQlpZiAobmV0aWZfbXNnX3J4X2VycihkZXYpKQotCQkJCWRldmRiZyhkZXYsICJFcnJvciBoZWFkZXI9MHglMDh4IiwgaGVhZGVyKTsKKwkJCW5ldGlmX2RiZyhkZXYsIHJ4X2VyciwgZGV2LT5uZXQsCisJCQkJICAiRXJyb3IgaGVhZGVyPTB4JTA4eFxuIiwgaGVhZGVyKTsKIAkJCWRldi0+bmV0LT5zdGF0cy5yeF9lcnJvcnMrKzsKIAkJCWRldi0+bmV0LT5zdGF0cy5yeF9kcm9wcGVkKys7CiAKQEAgLTExMTksOSArMTA5Nyw4IEBACiAJCX0gZWxzZSB7CiAJCQkvKiBFVEhfRlJBTUVfTEVOICsgNChDUkMpICsgMihDT0UpICsgNChWbGFuKSAqLwogCQkJaWYgKHVubGlrZWx5KHNpemUgPiAoRVRIX0ZSQU1FX0xFTiArIDEyKSkpIHsKLQkJCQlpZiAobmV0aWZfbXNnX3J4X2VycihkZXYpKQotCQkJCQlkZXZkYmcoZGV2LCAic2l6ZSBlcnIgaGVhZGVyPTB4JTA4eCIsCi0JCQkJCQloZWFkZXIpOworCQkJCW5ldGlmX2RiZyhkZXYsIHJ4X2VyciwgZGV2LT5uZXQsCisJCQkJCSAgInNpemUgZXJyIGhlYWRlcj0weCUwOHhcbiIsIGhlYWRlcik7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAKQEAgLTExMzcsNyArMTExNCw3IEBACiAKIAkJCWF4X3NrYiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwogCQkJaWYgKHVubGlrZWx5KCFheF9za2IpKSB7Ci0JCQkJZGV2d2FybihkZXYsICJFcnJvciBhbGxvY2F0aW5nIHNrYiIpOworCQkJCW5ldGRldl93YXJuKGRldi0+bmV0LCAiRXJyb3IgYWxsb2NhdGluZyBza2JcbiIpOwogCQkJCXJldHVybiAwOwogCQkJfQogCkBAIC0xMTYxLDcgKzExMzgsNyBAQAogCX0KIAogCWlmICh1bmxpa2VseShza2ItPmxlbiA8IDApKSB7Ci0JCWRldndhcm4oZGV2LCAiaW52YWxpZCByeCBsZW5ndGg8MCAlZCIsIHNrYi0+bGVuKTsKKwkJbmV0ZGV2X3dhcm4oZGV2LT5uZXQsICJpbnZhbGlkIHJ4IGxlbmd0aDwwICVkXG4iLCBza2ItPmxlbik7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jIGIvZHJpdmVycy9uZXQvdXNiL3VzYm5ldC5jCmluZGV4IDAzNWZhYjAuLjE3YjZhNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3VzYi91c2JuZXQuYworKysgYi9kcml2ZXJzL25ldC91c2IvdXNibmV0LmMKQEAgLTI0MiwxMyArMjQyLDEzIEBACiAJZGV2LT5uZXQtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAlkZXYtPm5ldC0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAKLQlpZiAobmV0aWZfbXNnX3J4X3N0YXR1cyAoZGV2KSkKLQkJZGV2ZGJnIChkZXYsICI8IHJ4LCBsZW4gJXp1LCB0eXBlIDB4JXgiLAotCQkJc2tiLT5sZW4gKyBzaXplb2YgKHN0cnVjdCBldGhoZHIpLCBza2ItPnByb3RvY29sKTsKKwluZXRpZl9kYmcoZGV2LCByeF9zdGF0dXMsIGRldi0+bmV0LCAiPCByeCwgbGVuICV6dSwgdHlwZSAweCV4XG4iLAorCQkgIHNrYi0+bGVuICsgc2l6ZW9mIChzdHJ1Y3QgZXRoaGRyKSwgc2tiLT5wcm90b2NvbCk7CiAJbWVtc2V0IChza2ItPmNiLCAwLCBzaXplb2YgKHN0cnVjdCBza2JfZGF0YSkpOwogCXN0YXR1cyA9IG5ldGlmX3J4IChza2IpOwotCWlmIChzdGF0dXMgIT0gTkVUX1JYX1NVQ0NFU1MgJiYgbmV0aWZfbXNnX3J4X2VyciAoZGV2KSkKLQkJZGV2ZGJnIChkZXYsICJuZXRpZl9yeCBzdGF0dXMgJWQiLCBzdGF0dXMpOworCWlmIChzdGF0dXMgIT0gTkVUX1JYX1NVQ0NFU1MpCisJCW5ldGlmX2RiZyhkZXYsIHJ4X2VyciwgZGV2LT5uZXQsCisJCQkgICJuZXRpZl9yeCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfc2tiX3JldHVybik7CiAKQEAgLTMxMyw5ICszMTMsOSBAQAogewogCXNldF9iaXQgKHdvcmssICZkZXYtPmZsYWdzKTsKIAlpZiAoIXNjaGVkdWxlX3dvcmsgKCZkZXYtPmtldmVudCkpCi0JCWRldmVyciAoZGV2LCAia2V2ZW50ICVkIG1heSBoYXZlIGJlZW4gZHJvcHBlZCIsIHdvcmspOworCQluZXRkZXZfZXJyKGRldi0+bmV0LCAia2V2ZW50ICVkIG1heSBoYXZlIGJlZW4gZHJvcHBlZFxuIiwgd29yayk7CiAJZWxzZQotCQlkZXZkYmcgKGRldiwgImtldmVudCAlZCBzY2hlZHVsZWQiLCB3b3JrKTsKKwkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImtldmVudCAlZCBzY2hlZHVsZWRcbiIsIHdvcmspOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X2RlZmVyX2tldmVudCk7CiAKQEAgLTMzMiw4ICszMzIsNyBAQAogCXNpemVfdAkJCXNpemUgPSBkZXYtPnJ4X3VyYl9zaXplOwogCiAJaWYgKChza2IgPSBhbGxvY19za2IgKHNpemUgKyBORVRfSVBfQUxJR04sIGZsYWdzKSkgPT0gTlVMTCkgewotCQlpZiAobmV0aWZfbXNnX3J4X2VyciAoZGV2KSkKLQkJCWRldmRiZyAoZGV2LCAibm8gcnggc2tiIik7CisJCW5ldGlmX2RiZyhkZXYsIHJ4X2VyciwgZGV2LT5uZXQsICJubyByeCBza2JcbiIpOwogCQl1c2JuZXRfZGVmZXJfa2V2ZW50IChkZXYsIEVWRU5UX1JYX01FTU9SWSk7CiAJCXVzYl9mcmVlX3VyYiAodXJiKTsKIAkJcmV0dXJuOwpAQCAtMzYzLDIxICszNjIsMTkgQEAKIAkJCXVzYm5ldF9kZWZlcl9rZXZlbnQgKGRldiwgRVZFTlRfUlhfTUVNT1JZKTsKIAkJCWJyZWFrOwogCQljYXNlIC1FTk9ERVY6Ci0JCQlpZiAobmV0aWZfbXNnX2lmZG93biAoZGV2KSkKLQkJCQlkZXZkYmcgKGRldiwgImRldmljZSBnb25lIik7CisJCQluZXRpZl9kYmcoZGV2LCBpZmRvd24sIGRldi0+bmV0LCAiZGV2aWNlIGdvbmVcbiIpOwogCQkJbmV0aWZfZGV2aWNlX2RldGFjaCAoZGV2LT5uZXQpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlpZiAobmV0aWZfbXNnX3J4X2VyciAoZGV2KSkKLQkJCQlkZXZkYmcgKGRldiwgInJ4IHN1Ym1pdCwgJWQiLCByZXR2YWwpOworCQkJbmV0aWZfZGJnKGRldiwgcnhfZXJyLCBkZXYtPm5ldCwKKwkJCQkgICJyeCBzdWJtaXQsICVkXG4iLCByZXR2YWwpOwogCQkJdGFza2xldF9zY2hlZHVsZSAoJmRldi0+YmgpOwogCQkJYnJlYWs7CiAJCWNhc2UgMDoKIAkJCV9fc2tiX3F1ZXVlX3RhaWwgKCZkZXYtPnJ4cSwgc2tiKTsKIAkJfQogCX0gZWxzZSB7Ci0JCWlmIChuZXRpZl9tc2dfaWZkb3duIChkZXYpKQotCQkJZGV2ZGJnIChkZXYsICJyeDogc3RvcHBlZCIpOworCQluZXRpZl9kYmcoZGV2LCBpZmRvd24sIGRldi0+bmV0LCAicng6IHN0b3BwZWRcbiIpOwogCQlyZXR2YWwgPSAtRU5PTElOSzsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmRldi0+cnhxLmxvY2ssIGxvY2tmbGFncyk7CkBAIC00MDAsOCArMzk3LDcgQEAKIAlpZiAoc2tiLT5sZW4pCiAJCXVzYm5ldF9za2JfcmV0dXJuIChkZXYsIHNrYik7CiAJZWxzZSB7Ci0JCWlmIChuZXRpZl9tc2dfcnhfZXJyIChkZXYpKQotCQkJZGV2ZGJnIChkZXYsICJkcm9wIik7CisJCW5ldGlmX2RiZyhkZXYsIHJ4X2VyciwgZGV2LT5uZXQsICJkcm9wXG4iKTsKIGVycm9yOgogCQlkZXYtPm5ldC0+c3RhdHMucnhfZXJyb3JzKys7CiAJCXNrYl9xdWV1ZV90YWlsICgmZGV2LT5kb25lLCBza2IpOwpAQCAtNDI4LDggKzQyNCw4IEBACiAJCQllbnRyeS0+c3RhdGUgPSByeF9jbGVhbnVwOwogCQkJZGV2LT5uZXQtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJZGV2LT5uZXQtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKLQkJCWlmIChuZXRpZl9tc2dfcnhfZXJyIChkZXYpKQotCQkJCWRldmRiZyAoZGV2LCAicnggbGVuZ3RoICVkIiwgc2tiLT5sZW4pOworCQkJbmV0aWZfZGJnKGRldiwgcnhfZXJyLCBkZXYtPm5ldCwKKwkJCQkgICJyeCBsZW5ndGggJWRcbiIsIHNrYi0+bGVuKTsKIAkJfQogCQlicmVhazsKIApAQCAtNDQ2LDggKzQ0Miw4IEBACiAJLyogc29mdHdhcmUtZHJpdmVuIGludGVyZmFjZSBzaHV0ZG93biAqLwogCWNhc2UgLUVDT05OUkVTRVQ6CQkvKiBhc3luYyB1bmxpbmsgKi8KIAljYXNlIC1FU0hVVERPV046CQkvKiBoYXJkd2FyZSBnb25lICovCi0JCWlmIChuZXRpZl9tc2dfaWZkb3duIChkZXYpKQotCQkJZGV2ZGJnIChkZXYsICJyeCBzaHV0ZG93biwgY29kZSAlZCIsIHVyYl9zdGF0dXMpOworCQluZXRpZl9kYmcoZGV2LCBpZmRvd24sIGRldi0+bmV0LAorCQkJICAicnggc2h1dGRvd24sIGNvZGUgJWRcbiIsIHVyYl9zdGF0dXMpOwogCQlnb3RvIGJsb2NrOwogCiAJLyogd2UgZ2V0IGNvbnRyb2xsZXIgaS9vIGZhdWx0cyBkdXJpbmcga2h1YmQgZGlzY29ubmVjdCgpIGRlbGF5cy4KQEAgLTQ2MCw4ICs0NTYsOCBAQAogCQlkZXYtPm5ldC0+c3RhdHMucnhfZXJyb3JzKys7CiAJCWlmICghdGltZXJfcGVuZGluZyAoJmRldi0+ZGVsYXkpKSB7CiAJCQltb2RfdGltZXIgKCZkZXYtPmRlbGF5LCBqaWZmaWVzICsgVEhST1RUTEVfSklGRklFUyk7Ci0JCQlpZiAobmV0aWZfbXNnX2xpbmsgKGRldikpCi0JCQkJZGV2ZGJnIChkZXYsICJyeCB0aHJvdHRsZSAlZCIsIHVyYl9zdGF0dXMpOworCQkJbmV0aWZfZGJnKGRldiwgbGluaywgZGV2LT5uZXQsCisJCQkJICAicnggdGhyb3R0bGUgJWRcbiIsIHVyYl9zdGF0dXMpOwogCQl9CiBibG9jazoKIAkJZW50cnktPnN0YXRlID0gcnhfY2xlYW51cDsKQEAgLTQ3Nyw4ICs0NzMsNyBAQAogCWRlZmF1bHQ6CiAJCWVudHJ5LT5zdGF0ZSA9IHJ4X2NsZWFudXA7CiAJCWRldi0+bmV0LT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJaWYgKG5ldGlmX21zZ19yeF9lcnIgKGRldikpCi0JCQlkZXZkYmcgKGRldiwgInJ4IHN0YXR1cyAlZCIsIHVyYl9zdGF0dXMpOworCQluZXRpZl9kYmcoZGV2LCByeF9lcnIsIGRldi0+bmV0LCAicnggc3RhdHVzICVkXG4iLCB1cmJfc3RhdHVzKTsKIAkJYnJlYWs7CiAJfQogCkBAIC00OTIsOCArNDg3LDcgQEAKIAkJfQogCQl1c2JfZnJlZV91cmIgKHVyYik7CiAJfQotCWlmIChuZXRpZl9tc2dfcnhfZXJyIChkZXYpKQotCQlkZXZkYmcgKGRldiwgIm5vIHJlYWQgcmVzdWJtaXR0ZWQiKTsKKwluZXRpZl9kYmcoZGV2LCByeF9lcnIsIGRldi0+bmV0LCAibm8gcmVhZCByZXN1Ym1pdHRlZFxuIik7CiB9CiAKIHN0YXRpYyB2b2lkIGludHJfY29tcGxldGUgKHN0cnVjdCB1cmIgKnVyYikKQEAgLTUxMCwxNSArNTA0LDE1IEBACiAJLyogc29mdHdhcmUtZHJpdmVuIGludGVyZmFjZSBzaHV0ZG93biAqLwogCWNhc2UgLUVOT0VOVDoJCS8qIHVyYiBraWxsZWQgKi8KIAljYXNlIC1FU0hVVERPV046CS8qIGhhcmR3YXJlIGdvbmUgKi8KLQkJaWYgKG5ldGlmX21zZ19pZmRvd24gKGRldikpCi0JCQlkZXZkYmcgKGRldiwgImludHIgc2h1dGRvd24sIGNvZGUgJWQiLCBzdGF0dXMpOworCQluZXRpZl9kYmcoZGV2LCBpZmRvd24sIGRldi0+bmV0LAorCQkJICAiaW50ciBzaHV0ZG93biwgY29kZSAlZFxuIiwgc3RhdHVzKTsKIAkJcmV0dXJuOwogCiAJLyogTk9URTogIG5vdCB0aHJvdHRsaW5nIGxpa2UgUlgvVFgsIHNpbmNlIHRoaXMgZW5kcG9pbnQKIAkgKiBhbHJlYWR5IHBvbGxzIGluZnJlcXVlbnRseQogCSAqLwogCWRlZmF1bHQ6Ci0JCWRldmRiZyAoZGV2LCAiaW50ciBzdGF0dXMgJWQiLCBzdGF0dXMpOworCQluZXRkZXZfZGJnKGRldi0+bmV0LCAiaW50ciBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CiAJCWJyZWFrOwogCX0KIApAQCAtNTI3LDggKzUyMSw5IEBACiAKIAltZW1zZXQodXJiLT50cmFuc2Zlcl9idWZmZXIsIDAsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCk7CiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHN0YXR1cyAhPSAwICYmIG5ldGlmX21zZ190aW1lciAoZGV2KSkKLQkJZGV2ZXJyKGRldiwgImludHIgcmVzdWJtaXQgLS0+ICVkIiwgc3RhdHVzKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCW5ldGlmX2VycihkZXYsIHRpbWVyLCBkZXYtPm5ldCwKKwkJCSAgImludHIgcmVzdWJtaXQgLS0+ICVkXG4iLCBzdGF0dXMpOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNTM2LDggKzUzMSw3IEBACiB7CiAJc2V0X2JpdChFVkVOVF9SWF9QQVVTRUQsICZkZXYtPmZsYWdzKTsKIAotCWlmIChuZXRpZl9tc2dfcnhfc3RhdHVzKGRldikpCi0JCWRldmRiZyhkZXYsICJwYXVzZWQgcnggcXVldWUgZW5hYmxlZCIpOworCW5ldGlmX2RiZyhkZXYsIHJ4X3N0YXR1cywgZGV2LT5uZXQsICJwYXVzZWQgcnggcXVldWUgZW5hYmxlZFxuIik7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfcGF1c2VfcngpOwogCkBAIC01NTUsOCArNTQ5LDggQEAKIAogCXRhc2tsZXRfc2NoZWR1bGUoJmRldi0+YmgpOwogCi0JaWYgKG5ldGlmX21zZ19yeF9zdGF0dXMoZGV2KSkKLQkJZGV2ZGJnKGRldiwgInBhdXNlZCByeCBxdWV1ZSBkaXNhYmxlZCwgJWQgc2ticyByZXF1ZXVlZCIsIG51bSk7CisJbmV0aWZfZGJnKGRldiwgcnhfc3RhdHVzLCBkZXYtPm5ldCwKKwkJICAicGF1c2VkIHJ4IHF1ZXVlIGRpc2FibGVkLCAlZCBza2JzIHJlcXVldWVkXG4iLCBudW0pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNibmV0X3Jlc3VtZV9yeCk7CiAKQEAgLTU4OSw3ICs1ODMsNyBAQAogCQkvLyB0aGVzZSAoYXN5bmMpIHVubGlua3MgY29tcGxldGUgaW1tZWRpYXRlbHkKIAkJcmV0dmFsID0gdXNiX3VubGlua191cmIgKHVyYik7CiAJCWlmIChyZXR2YWwgIT0gLUVJTlBST0dSRVNTICYmIHJldHZhbCAhPSAwKQotCQkJZGV2ZGJnIChkZXYsICJ1bmxpbmsgdXJiIGVyciwgJWQiLCByZXR2YWwpOworCQkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgInVubGluayB1cmIgZXJyLCAlZFxuIiwgcmV0dmFsKTsKIAkJZWxzZQogCQkJY291bnQrKzsKIAl9CkBAIC02MzEsOSArNjI1LDggQEAKIAkJJiYgIXNrYl9xdWV1ZV9lbXB0eSgmZGV2LT5kb25lKSkgewogCQkJc2NoZWR1bGVfdGltZW91dChVTkxJTktfVElNRU9VVF9NUyk7CiAJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCQlpZiAobmV0aWZfbXNnX2lmZG93bihkZXYpKQotCQkJCWRldmRiZyhkZXYsICJ3YWl0ZWQgZm9yICVkIHVyYiBjb21wbGV0aW9ucyIsCi0JCQkJCXRlbXApOworCQkJbmV0aWZfZGJnKGRldiwgaWZkb3duLCBkZXYtPm5ldCwKKwkJCQkgICJ3YWl0ZWQgZm9yICVkIHVyYiBjb21wbGV0aW9uc1xuIiwgdGVtcCk7CiAJfQogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAJZGV2LT53YWl0ID0gTlVMTDsKQEAgLTY0OCwyMiArNjQxLDIxIEBACiAKIAluZXRpZl9zdG9wX3F1ZXVlIChuZXQpOwogCi0JaWYgKG5ldGlmX21zZ19pZmRvd24gKGRldikpCi0JCWRldmluZm8gKGRldiwgInN0b3Agc3RhdHM6IHJ4L3R4ICVsZC8lbGQsIGVycnMgJWxkLyVsZCIsCi0JCQluZXQtPnN0YXRzLnJ4X3BhY2tldHMsIG5ldC0+c3RhdHMudHhfcGFja2V0cywKLQkJCW5ldC0+c3RhdHMucnhfZXJyb3JzLCBuZXQtPnN0YXRzLnR4X2Vycm9ycwotCQkJKTsKKwluZXRpZl9pbmZvKGRldiwgaWZkb3duLCBkZXYtPm5ldCwKKwkJICAgInN0b3Agc3RhdHM6IHJ4L3R4ICVsZC8lbGQsIGVycnMgJWxkLyVsZFxuIiwKKwkJICAgbmV0LT5zdGF0cy5yeF9wYWNrZXRzLCBuZXQtPnN0YXRzLnR4X3BhY2tldHMsCisJCSAgIG5ldC0+c3RhdHMucnhfZXJyb3JzLCBuZXQtPnN0YXRzLnR4X2Vycm9ycyk7CiAKIAkvKiBhbGxvdyBtaW5pZHJpdmVyIHRvIHN0b3AgY29ycmVjdGx5ICh3aXJlbGVzcyBkZXZpY2VzIHRvIHR1cm4gb2ZmCiAJICogcmFkaW8gZXRjKSAqLwogCWlmIChpbmZvLT5zdG9wKSB7CiAJCXJldHZhbCA9IGluZm8tPnN0b3AoZGV2KTsKLQkJaWYgKHJldHZhbCA8IDAgJiYgbmV0aWZfbXNnX2lmZG93bihkZXYpKQotCQkJZGV2aW5mbyhkZXYsCi0JCQkJInN0b3AgZmFpbCAoJWQpIHVzYm5ldCB1c2ItJXMtJXMsICVzIiwKLQkJCQlyZXR2YWwsCi0JCQkJZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPnVkZXYtPmRldnBhdGgsCi0JCQkJaW5mby0+ZGVzY3JpcHRpb24pOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCW5ldGlmX2luZm8oZGV2LCBpZmRvd24sIGRldi0+bmV0LAorCQkJCSAgICJzdG9wIGZhaWwgKCVkKSB1c2JuZXQgdXNiLSVzLSVzLCAlc1xuIiwKKwkJCQkgICByZXR2YWwsCisJCQkJICAgZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPnVkZXYtPmRldnBhdGgsCisJCQkJICAgaW5mby0+ZGVzY3JpcHRpb24pOwogCX0KIAogCWlmICghKGluZm8tPmZsYWdzICYgRkxBR19BVk9JRF9VTkxJTktfVVJCUykpCkBAIC03MDIsMzAgKzY5NCwyOSBAQAogCXN0cnVjdCBkcml2ZXJfaW5mbwkqaW5mbyA9IGRldi0+ZHJpdmVyX2luZm87CiAKIAlpZiAoKHJldHZhbCA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShkZXYtPmludGYpKSA8IDApIHsKLQkJaWYgKG5ldGlmX21zZ19pZnVwIChkZXYpKQotCQkJZGV2aW5mbyAoZGV2LAotCQkJCSJyZXN1bXB0aW9uIGZhaWwgKCVkKSB1c2JuZXQgdXNiLSVzLSVzLCAlcyIsCi0JCQkJcmV0dmFsLAotCQkJCWRldi0+dWRldi0+YnVzLT5idXNfbmFtZSwgZGV2LT51ZGV2LT5kZXZwYXRoLAotCQkJaW5mby0+ZGVzY3JpcHRpb24pOworCQluZXRpZl9pbmZvKGRldiwgaWZ1cCwgZGV2LT5uZXQsCisJCQkgICAicmVzdW1wdGlvbiBmYWlsICglZCkgdXNibmV0IHVzYi0lcy0lcywgJXNcbiIsCisJCQkgICByZXR2YWwsCisJCQkgICBkZXYtPnVkZXYtPmJ1cy0+YnVzX25hbWUsCisJCQkgICBkZXYtPnVkZXYtPmRldnBhdGgsCisJCQkgICBpbmZvLT5kZXNjcmlwdGlvbik7CiAJCWdvdG8gZG9uZV9ub3BtOwogCX0KIAogCS8vIHB1dCBpbnRvICJrbm93biBzYWZlIiBzdGF0ZQogCWlmIChpbmZvLT5yZXNldCAmJiAocmV0dmFsID0gaW5mby0+cmVzZXQgKGRldikpIDwgMCkgewotCQlpZiAobmV0aWZfbXNnX2lmdXAgKGRldikpCi0JCQlkZXZpbmZvIChkZXYsCi0JCQkJIm9wZW4gcmVzZXQgZmFpbCAoJWQpIHVzYm5ldCB1c2ItJXMtJXMsICVzIiwKLQkJCQlyZXR2YWwsCi0JCQkJZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLCBkZXYtPnVkZXYtPmRldnBhdGgsCi0JCQlpbmZvLT5kZXNjcmlwdGlvbik7CisJCW5ldGlmX2luZm8oZGV2LCBpZnVwLCBkZXYtPm5ldCwKKwkJCSAgICJvcGVuIHJlc2V0IGZhaWwgKCVkKSB1c2JuZXQgdXNiLSVzLSVzLCAlc1xuIiwKKwkJCSAgIHJldHZhbCwKKwkJCSAgIGRldi0+dWRldi0+YnVzLT5idXNfbmFtZSwKKwkJCSAgIGRldi0+dWRldi0+ZGV2cGF0aCwKKwkJCSAgIGluZm8tPmRlc2NyaXB0aW9uKTsKIAkJZ290byBkb25lOwogCX0KIAogCS8vIGluc2lzdCBwZWVyIGJlIGNvbm5lY3RlZAogCWlmIChpbmZvLT5jaGVja19jb25uZWN0ICYmIChyZXR2YWwgPSBpbmZvLT5jaGVja19jb25uZWN0IChkZXYpKSA8IDApIHsKLQkJaWYgKG5ldGlmX21zZ19pZnVwIChkZXYpKQotCQkJZGV2ZGJnIChkZXYsICJjYW4ndCBvcGVuOyAlZCIsIHJldHZhbCk7CisJCW5ldGlmX2RiZyhkZXYsIGlmdXAsIGRldi0+bmV0LCAiY2FuJ3Qgb3BlbjsgJWRcbiIsIHJldHZhbCk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKQEAgLTczMywzNCArNzI0LDIzIEBACiAJaWYgKGRldi0+aW50ZXJydXB0KSB7CiAJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiIChkZXYtPmludGVycnVwdCwgR0ZQX0tFUk5FTCk7CiAJCWlmIChyZXR2YWwgPCAwKSB7Ci0JCQlpZiAobmV0aWZfbXNnX2lmdXAgKGRldikpCi0JCQkJZGV2ZXJyIChkZXYsICJpbnRyIHN1Ym1pdCAlZCIsIHJldHZhbCk7CisJCQluZXRpZl9lcnIoZGV2LCBpZnVwLCBkZXYtPm5ldCwKKwkJCQkgICJpbnRyIHN1Ym1pdCAlZFxuIiwgcmV0dmFsKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCX0KIAogCW5ldGlmX3N0YXJ0X3F1ZXVlIChuZXQpOwotCWlmIChuZXRpZl9tc2dfaWZ1cCAoZGV2KSkgewotCQljaGFyCSpmcmFtaW5nOwotCi0JCWlmIChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfRlJBTUlOR19OQykKLQkJCWZyYW1pbmcgPSAiTmV0Q2hpcCI7Ci0JCWVsc2UgaWYgKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzICYgRkxBR19GUkFNSU5HX0dMKQotCQkJZnJhbWluZyA9ICJHZW5lU3lzIjsKLQkJZWxzZSBpZiAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfWikKLQkJCWZyYW1pbmcgPSAiWmF1cnVzIjsKLQkJZWxzZSBpZiAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfUk4pCi0JCQlmcmFtaW5nID0gIlJORElTIjsKLQkJZWxzZSBpZiAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfQVgpCi0JCQlmcmFtaW5nID0gIkFTSVgiOwotCQllbHNlCi0JCQlmcmFtaW5nID0gInNpbXBsZSI7Ci0KLQkJZGV2aW5mbyAoZGV2LCAib3BlbjogZW5hYmxlIHF1ZXVlaW5nICIKLQkJCQkiKHJ4ICVkLCB0eCAlZCkgbXR1ICVkICVzIGZyYW1pbmciLAotCQkJKGludClSWF9RTEVOIChkZXYpLCAoaW50KVRYX1FMRU4gKGRldiksIGRldi0+bmV0LT5tdHUsCi0JCQlmcmFtaW5nKTsKLQl9CisJbmV0aWZfaW5mbyhkZXYsIGlmdXAsIGRldi0+bmV0LAorCQkgICAib3BlbjogZW5hYmxlIHF1ZXVlaW5nIChyeCAlZCwgdHggJWQpIG10dSAlZCAlcyBmcmFtaW5nXG4iLAorCQkgICAoaW50KVJYX1FMRU4oZGV2KSwgKGludClUWF9RTEVOKGRldiksCisJCSAgIGRldi0+bmV0LT5tdHUsCisJCSAgIChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfRlJBTUlOR19OQykgPyAiTmV0Q2hpcCIgOgorCQkgICAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfR0wpID8gIkdlbmVTeXMiIDoKKwkJICAgKGRldi0+ZHJpdmVyX2luZm8tPmZsYWdzICYgRkxBR19GUkFNSU5HX1opID8gIlphdXJ1cyIgOgorCQkgICAoZGV2LT5kcml2ZXJfaW5mby0+ZmxhZ3MgJiBGTEFHX0ZSQU1JTkdfUk4pID8gIlJORElTIiA6CisJCSAgIChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfRlJBTUlOR19BWCkgPyAiQVNJWCIgOgorCQkgICAic2ltcGxlIik7CiAKIAkvLyBkZWxheSBwb3N0aW5nIHJlYWRzIHVudGlsIHdlJ3JlIGZ1bGx5IG9wZW4KIAl0YXNrbGV0X3NjaGVkdWxlICgmZGV2LT5iaCk7CkBAIC03NzEsNiArNzUxLDcgQEAKIAkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi0+aW50Zik7CiAJfQogCXJldHVybiByZXR2YWw7CisKIGRvbmU6CiAJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGRldi0+aW50Zik7CiBkb25lX25vcG06CkBAIC05MDgsOCArODg5LDggQEAKIAkJICAgIHN0YXR1cyAhPSAtRVNIVVRET1dOKSB7CiAJCQlpZiAobmV0aWZfbXNnX3R4X2VyciAoZGV2KSkKIGZhaWxfcGlwZToKLQkJCQlkZXZlcnIgKGRldiwgImNhbid0IGNsZWFyIHR4IGhhbHQsIHN0YXR1cyAlZCIsCi0JCQkJCXN0YXR1cyk7CisJCQkJbmV0ZGV2X2VycihkZXYtPm5ldCwgImNhbid0IGNsZWFyIHR4IGhhbHQsIHN0YXR1cyAlZFxuIiwKKwkJCQkJICAgc3RhdHVzKTsKIAkJfSBlbHNlIHsKIAkJCWNsZWFyX2JpdCAoRVZFTlRfVFhfSEFMVCwgJmRldi0+ZmxhZ3MpOwogCQkJaWYgKHN0YXR1cyAhPSAtRVNIVVRET1dOKQpAQCAtOTI4LDggKzkwOSw4IEBACiAJCSAgICBzdGF0dXMgIT0gLUVTSFVURE9XTikgewogCQkJaWYgKG5ldGlmX21zZ19yeF9lcnIgKGRldikpCiBmYWlsX2hhbHQ6Ci0JCQkJZGV2ZXJyIChkZXYsICJjYW4ndCBjbGVhciByeCBoYWx0LCBzdGF0dXMgJWQiLAotCQkJCQlzdGF0dXMpOworCQkJCW5ldGRldl9lcnIoZGV2LT5uZXQsICJjYW4ndCBjbGVhciByeCBoYWx0LCBzdGF0dXMgJWRcbiIsCisJCQkJCSAgIHN0YXR1cyk7CiAJCX0gZWxzZSB7CiAJCQljbGVhcl9iaXQgKEVWRU5UX1JYX0hBTFQsICZkZXYtPmZsYWdzKTsKIAkJCXRhc2tsZXRfc2NoZWR1bGUgKCZkZXYtPmJoKTsKQEAgLTk2NywxOCArOTQ4LDE4IEBACiAJCWlmKGluZm8tPmxpbmtfcmVzZXQgJiYgKHJldHZhbCA9IGluZm8tPmxpbmtfcmVzZXQoZGV2KSkgPCAwKSB7CiAJCQl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGV2LT5pbnRmKTsKIHNraXBfcmVzZXQ6Ci0JCQlkZXZpbmZvKGRldiwgImxpbmsgcmVzZXQgZmFpbGVkICglZCkgdXNibmV0IHVzYi0lcy0lcywgJXMiLAotCQkJCXJldHZhbCwKLQkJCQlkZXYtPnVkZXYtPmJ1cy0+YnVzX25hbWUsIGRldi0+dWRldi0+ZGV2cGF0aCwKLQkJCQlpbmZvLT5kZXNjcmlwdGlvbik7CisJCQluZXRkZXZfaW5mbyhkZXYtPm5ldCwgImxpbmsgcmVzZXQgZmFpbGVkICglZCkgdXNibmV0IHVzYi0lcy0lcywgJXNcbiIsCisJCQkJICAgIHJldHZhbCwKKwkJCQkgICAgZGV2LT51ZGV2LT5idXMtPmJ1c19uYW1lLAorCQkJCSAgICBkZXYtPnVkZXYtPmRldnBhdGgsCisJCQkJICAgIGluZm8tPmRlc2NyaXB0aW9uKTsKIAkJfSBlbHNlIHsKIAkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtPmludGYpOwogCQl9CiAJfQogCiAJaWYgKGRldi0+ZmxhZ3MpCi0JCWRldmRiZyAoZGV2LCAia2V2ZW50IGRvbmUsIGZsYWdzID0gMHglbHgiLAotCQkJZGV2LT5mbGFncyk7CisJCW5ldGRldl9kYmcoZGV2LT5uZXQsICJrZXZlbnQgZG9uZSwgZmxhZ3MgPSAweCVseFxuIiwgZGV2LT5mbGFncyk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xMDE0LDE1ICs5OTUsMTQgQEAKIAkJCWlmICghdGltZXJfcGVuZGluZyAoJmRldi0+ZGVsYXkpKSB7CiAJCQkJbW9kX3RpbWVyICgmZGV2LT5kZWxheSwKIAkJCQkJamlmZmllcyArIFRIUk9UVExFX0pJRkZJRVMpOwotCQkJCWlmIChuZXRpZl9tc2dfbGluayAoZGV2KSkKLQkJCQkJZGV2ZGJnIChkZXYsICJ0eCB0aHJvdHRsZSAlZCIsCi0JCQkJCQkJdXJiLT5zdGF0dXMpOworCQkJCW5ldGlmX2RiZyhkZXYsIGxpbmssIGRldi0+bmV0LAorCQkJCQkgICJ0eCB0aHJvdHRsZSAlZFxuIiwgdXJiLT5zdGF0dXMpOwogCQkJfQogCQkJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2LT5uZXQpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlpZiAobmV0aWZfbXNnX3R4X2VyciAoZGV2KSkKLQkJCQlkZXZkYmcgKGRldiwgInR4IGVyciAlZCIsIGVudHJ5LT51cmItPnN0YXR1cyk7CisJCQluZXRpZl9kYmcoZGV2LCB0eF9lcnIsIGRldi0+bmV0LAorCQkJCSAgInR4IGVyciAlZFxuIiwgZW50cnktPnVyYi0+c3RhdHVzKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtMTA2NCwxNiArMTA0NCwxNCBAQAogCWlmIChpbmZvLT50eF9maXh1cCkgewogCQlza2IgPSBpbmZvLT50eF9maXh1cCAoZGV2LCBza2IsIEdGUF9BVE9NSUMpOwogCQlpZiAoIXNrYikgewotCQkJaWYgKG5ldGlmX21zZ190eF9lcnIgKGRldikpCi0JCQkJZGV2ZGJnIChkZXYsICJjYW4ndCB0eF9maXh1cCBza2IiKTsKKwkJCW5ldGlmX2RiZyhkZXYsIHR4X2VyciwgZGV2LT5uZXQsICJjYW4ndCB0eF9maXh1cCBza2JcbiIpOwogCQkJZ290byBkcm9wOwogCQl9CiAJfQogCWxlbmd0aCA9IHNrYi0+bGVuOwogCiAJaWYgKCEodXJiID0gdXNiX2FsbG9jX3VyYiAoMCwgR0ZQX0FUT01JQykpKSB7Ci0JCWlmIChuZXRpZl9tc2dfdHhfZXJyIChkZXYpKQotCQkJZGV2ZGJnIChkZXYsICJubyB1cmIiKTsKKwkJbmV0aWZfZGJnKGRldiwgdHhfZXJyLCBkZXYtPm5ldCwgIm5vIHVyYlxuIik7CiAJCWdvdG8gZHJvcDsKIAl9CiAKQEAgLTExMTMsNyArMTA5MSw3IEBACiAJCS8qIG5vIHVzZSB0byBwcm9jZXNzIG1vcmUgcGFja2V0cyAqLwogCQluZXRpZl9zdG9wX3F1ZXVlKG5ldCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dHhxLmxvY2ssIGZsYWdzKTsKLQkJZGV2ZGJnKGRldiwgIkRlbGF5aW5nIHRyYW5zbWlzc2lvbiBmb3IgcmVzdW1wdGlvbiIpOworCQluZXRkZXZfZGJnKGRldi0+bmV0LCAiRGVsYXlpbmcgdHJhbnNtaXNzaW9uIGZvciByZXN1bXB0aW9uXG4iKTsKIAkJZ290byBkZWZlcnJlZDsKIAl9CiAjZW5kaWYKQEAgLTExMjYsOCArMTEwNCw4IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9hc3luYyhkZXYtPmludGYpOwotCQlpZiAobmV0aWZfbXNnX3R4X2VyciAoZGV2KSkKLQkJCWRldmRiZyAoZGV2LCAidHg6IHN1Ym1pdCB1cmIgZXJyICVkIiwgcmV0dmFsKTsKKwkJbmV0aWZfZGJnKGRldiwgdHhfZXJyLCBkZXYtPm5ldCwKKwkJCSAgInR4OiBzdWJtaXQgdXJiIGVyciAlZFxuIiwgcmV0dmFsKTsKIAkJYnJlYWs7CiAJY2FzZSAwOgogCQluZXQtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKQEAgLTExMzgsMTcgKzExMTYsMTUgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT50eHEubG9jaywgZmxhZ3MpOwogCiAJaWYgKHJldHZhbCkgewotCQlpZiAobmV0aWZfbXNnX3R4X2VyciAoZGV2KSkKLQkJCWRldmRiZyAoZGV2LCAiZHJvcCwgY29kZSAlZCIsIHJldHZhbCk7CisJCW5ldGlmX2RiZyhkZXYsIHR4X2VyciwgZGV2LT5uZXQsICJkcm9wLCBjb2RlICVkXG4iLCByZXR2YWwpOwogZHJvcDoKIAkJZGV2LT5uZXQtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKIAkJaWYgKHNrYikKIAkJCWRldl9rZnJlZV9za2JfYW55IChza2IpOwogCQl1c2JfZnJlZV91cmIgKHVyYik7Ci0JfSBlbHNlIGlmIChuZXRpZl9tc2dfdHhfcXVldWVkIChkZXYpKSB7Ci0JCWRldmRiZyAoZGV2LCAiPiB0eCwgbGVuICVkLCB0eXBlIDB4JXgiLAotCQkJbGVuZ3RoLCBza2ItPnByb3RvY29sKTsKLQl9CisJfSBlbHNlCisJCW5ldGlmX2RiZyhkZXYsIHR4X3F1ZXVlZCwgZGV2LT5uZXQsCisJCQkgICI+IHR4LCBsZW4gJWQsIHR5cGUgMHgleFxuIiwgbGVuZ3RoLCBza2ItPnByb3RvY29sKTsKICNpZmRlZiBDT05GSUdfUE0KIGRlZmVycmVkOgogI2VuZGlmCkBAIC0xMTc5LDcgKzExNTUsNyBAQAogCQkJZGV2X2tmcmVlX3NrYiAoc2tiKTsKIAkJCWNvbnRpbnVlOwogCQlkZWZhdWx0OgotCQkJZGV2ZGJnIChkZXYsICJib2d1cyBza2Igc3RhdGUgJWQiLCBlbnRyeS0+c3RhdGUpOworCQkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgImJvZ3VzIHNrYiBzdGF0ZSAlZFxuIiwgZW50cnktPnN0YXRlKTsKIAkJfQogCX0KIApAQCAtMTIwNyw5ICsxMTgzLDEwIEBACiAJCQkJaWYgKHVyYiAhPSBOVUxMKQogCQkJCQlyeF9zdWJtaXQgKGRldiwgdXJiLCBHRlBfQVRPTUlDKTsKIAkJCX0KLQkJCWlmICh0ZW1wICE9IGRldi0+cnhxLnFsZW4gJiYgbmV0aWZfbXNnX2xpbmsgKGRldikpCi0JCQkJZGV2ZGJnIChkZXYsICJyeHFsZW4gJWQgLS0+ICVkIiwKLQkJCQkJCXRlbXAsIGRldi0+cnhxLnFsZW4pOworCQkJaWYgKHRlbXAgIT0gZGV2LT5yeHEucWxlbikKKwkJCQluZXRpZl9kYmcoZGV2LCBsaW5rLCBkZXYtPm5ldCwKKwkJCQkJICAicnhxbGVuICVkIC0tPiAlZFxuIiwKKwkJCQkJICB0ZW1wLCBkZXYtPnJ4cS5xbGVuKTsKIAkJCWlmIChkZXYtPnJ4cS5xbGVuIDwgcWxlbikKIAkJCQl0YXNrbGV0X3NjaGVkdWxlICgmZGV2LT5iaCk7CiAJCX0KQEAgLTEyNDAsMTEgKzEyMTcsMTAgQEAKIAogCXhkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKIAotCWlmIChuZXRpZl9tc2dfcHJvYmUgKGRldikpCi0JCWRldmluZm8gKGRldiwgInVucmVnaXN0ZXIgJyVzJyB1c2ItJXMtJXMsICVzIiwKLQkJCWludGYtPmRldi5kcml2ZXItPm5hbWUsCi0JCQl4ZGV2LT5idXMtPmJ1c19uYW1lLCB4ZGV2LT5kZXZwYXRoLAotCQkJZGV2LT5kcml2ZXJfaW5mby0+ZGVzY3JpcHRpb24pOworCW5ldGlmX2luZm8oZGV2LCBwcm9iZSwgZGV2LT5uZXQsICJ1bnJlZ2lzdGVyICclcycgdXNiLSVzLSVzLCAlc1xuIiwKKwkJICAgaW50Zi0+ZGV2LmRyaXZlci0+bmFtZSwKKwkJICAgeGRldi0+YnVzLT5idXNfbmFtZSwgeGRldi0+ZGV2cGF0aCwKKwkJICAgZGV2LT5kcml2ZXJfaW5mby0+ZGVzY3JpcHRpb24pOwogCiAJbmV0ID0gZGV2LT5uZXQ7CiAJdW5yZWdpc3Rlcl9uZXRkZXYgKG5ldCk7CkBAIC0xNDA3LDEyICsxMzgzLDEyIEBACiAJc3RhdHVzID0gcmVnaXN0ZXJfbmV0ZGV2IChuZXQpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0MzsKLQlpZiAobmV0aWZfbXNnX3Byb2JlIChkZXYpKQotCQlkZXZpbmZvIChkZXYsICJyZWdpc3RlciAnJXMnIGF0IHVzYi0lcy0lcywgJXMsICVwTSIsCi0JCQl1ZGV2LT5kZXYuZHJpdmVyLT5uYW1lLAotCQkJeGRldi0+YnVzLT5idXNfbmFtZSwgeGRldi0+ZGV2cGF0aCwKLQkJCWRldi0+ZHJpdmVyX2luZm8tPmRlc2NyaXB0aW9uLAotCQkJbmV0LT5kZXZfYWRkcik7CisJbmV0aWZfaW5mbyhkZXYsIHByb2JlLCBkZXYtPm5ldCwKKwkJICAgInJlZ2lzdGVyICclcycgYXQgdXNiLSVzLSVzLCAlcywgJXBNXG4iLAorCQkgICB1ZGV2LT5kZXYuZHJpdmVyLT5uYW1lLAorCQkgICB4ZGV2LT5idXMtPmJ1c19uYW1lLCB4ZGV2LT5kZXZwYXRoLAorCQkgICBkZXYtPmRyaXZlcl9pbmZvLT5kZXNjcmlwdGlvbiwKKwkJICAgbmV0LT5kZXZfYWRkcik7CiAKIAkvLyBvaywgaXQncyByZWFkeSB0byBnby4KIAl1c2Jfc2V0X2ludGZkYXRhICh1ZGV2LCBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdmV0aC5jIGIvZHJpdmVycy9uZXQvdmV0aC5jCmluZGV4IDNhMTVkZTUuLmI1ODNkNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZldGguYworKysgYi9kcml2ZXJzL25ldC92ZXRoLmMKQEAgLTM0LDcgKzM0LDcgQEAKIAogc3RydWN0IHZldGhfcHJpdiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKnBlZXI7Ci0Jc3RydWN0IHZldGhfbmV0X3N0YXRzICpzdGF0czsKKwlzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgX19wZXJjcHUgKnN0YXRzOwogCXVuc2lnbmVkIGlwX3N1bW1lZDsKIH07CiAKQEAgLTI2Myw3ICsyNjMsNyBAQAogCiBzdGF0aWMgaW50IHZldGhfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdmV0aF9uZXRfc3RhdHMgKnN0YXRzOworCXN0cnVjdCB2ZXRoX25ldF9zdGF0cyBfX3BlcmNwdSAqc3RhdHM7CiAJc3RydWN0IHZldGhfcHJpdiAqcHJpdjsKIAogCXN0YXRzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCB2ZXRoX25ldF9zdGF0cyk7CkBAIC0zMzMsMTkgKzMzMywxNyBAQAogCXN0cnVjdCB2ZXRoX3ByaXYgKnByaXY7CiAJY2hhciBpZm5hbWVbSUZOQU1TSVpdOwogCXN0cnVjdCBubGF0dHIgKnBlZXJfdGJbSUZMQV9NQVggKyAxXSwgKip0YnA7CisJc3RydWN0IGlmaW5mb21zZyAqaWZtcDsKIAlzdHJ1Y3QgbmV0ICpuZXQ7CiAKIAkvKgogCSAqIGNyZWF0ZSBhbmQgcmVnaXN0ZXIgcGVlciBmaXJzdAotCSAqCi0JICogc3RydWN0IGlmaW5mb21zZyBpcyBhdCB0aGUgaGVhZCBvZiBWRVRIX0lORk9fUEVFUiwgYnV0IHdlCi0JICogc2tpcCBpdCBzaW5jZSBubyBpbmZvIGZyb20gaXQgaXMgdXNlZnVsIHlldAogCSAqLwotCiAJaWYgKGRhdGEgIT0gTlVMTCAmJiBkYXRhW1ZFVEhfSU5GT19QRUVSXSAhPSBOVUxMKSB7CiAJCXN0cnVjdCBubGF0dHIgKm5sYV9wZWVyOwogCiAJCW5sYV9wZWVyID0gZGF0YVtWRVRIX0lORk9fUEVFUl07CisJCWlmbXAgPSBubGFfZGF0YShubGFfcGVlcik7CiAJCWVyciA9IG5sYV9wYXJzZShwZWVyX3RiLCBJRkxBX01BWCwKIAkJCQlubGFfZGF0YShubGFfcGVlcikgKyBzaXplb2Yoc3RydWN0IGlmaW5mb21zZyksCiAJCQkJbmxhX2xlbihubGFfcGVlcikgLSBzaXplb2Yoc3RydWN0IGlmaW5mb21zZyksCkBAIC0zNTgsOCArMzU2LDEwIEBACiAJCQlyZXR1cm4gZXJyOwogCiAJCXRicCA9IHBlZXJfdGI7Ci0JfSBlbHNlCisJfSBlbHNlIHsKKwkJaWZtcCA9IE5VTEw7CiAJCXRicCA9IHRiOworCX0KIAogCWlmICh0YnBbSUZMQV9JRk5BTUVdKQogCQlubGFfc3RybGNweShpZm5hbWUsIHRicFtJRkxBX0lGTkFNRV0sIElGTkFNU0laKTsKQEAgLTM4Nyw2ICszODcsMTAgQEAKIAogCW5ldGlmX2NhcnJpZXJfb2ZmKHBlZXIpOwogCisJZXJyID0gcnRubF9jb25maWd1cmVfbGluayhwZWVyLCBpZm1wKTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBlcnJfY29uZmlndXJlX3BlZXI7CisKIAkvKgogCSAqIHJlZ2lzdGVyIGRldiBsYXN0CiAJICoKQEAgLTQyOCw2ICs0MzIsNyBAQAogZXJyX3JlZ2lzdGVyX2RldjoKIAkvKiBub3RoaW5nIHRvIGRvICovCiBlcnJfYWxsb2NfbmFtZToKK2Vycl9jb25maWd1cmVfcGVlcjoKIAl1bnJlZ2lzdGVyX25ldGRldmljZShwZWVyKTsKIAlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aWEtcmhpbmUuYyBiL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jCmluZGV4IDYxMWI4MDQuLjUwZjg4MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpYS1yaGluZS5jCkBAIC0yNjcsNyArMjY3LDcgQEAKIC8qIEJld2FyZSBvZiBQQ0kgcG9zdGVkIHdyaXRlcyAqLwogI2RlZmluZSBJT1NZTkMJZG8geyBpb3JlYWQ4KGlvYWRkciArIFN0YXRpb25BZGRyKTsgfSB3aGlsZSAoMCkKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJoaW5lX3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShyaGluZV9wY2lfdGJsKSA9IHsKIAl7IDB4MTEwNiwgMHgzMDQzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAkvKiBWVDg2QzEwMEEgKi8KIAl7IDB4MTEwNiwgMHgzMDY1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAkvKiBWVDYxMDIgKi8KIAl7IDB4MTEwNiwgMHgzMTA2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAkvKiA2MTA1eyxMLExPTX0gKi8KQEAgLTE2OTcsNyArMTY5Nyw3IEBACiAJCXJ4X21vZGUgPSAweDFDOwogCQlpb3dyaXRlMzIoMHhmZmZmZmZmZiwgaW9hZGRyICsgTXVsdGljYXN0RmlsdGVyMCk7CiAJCWlvd3JpdGUzMigweGZmZmZmZmZmLCBpb2FkZHIgKyBNdWx0aWNhc3RGaWx0ZXIxKTsKLQl9IGVsc2UgaWYgKChkZXYtPm1jX2NvdW50ID4gbXVsdGljYXN0X2ZpbHRlcl9saW1pdCkgfHwKKwl9IGVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpIHx8CiAJCSAgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkvKiBUb28gbWFueSB0byBtYXRjaCwgb3IgYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCQlpb3dyaXRlMzIoMHhmZmZmZmZmZiwgaW9hZGRyICsgTXVsdGljYXN0RmlsdGVyMCk7CkBAIC0xNzA1LDEwICsxNzA1LDkgQEAKIAkJcnhfbW9kZSA9IDB4MEM7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7Ci0JCWludCBpOworCiAJCW1lbXNldChtY19maWx0ZXIsIDAsIHNpemVvZihtY19maWx0ZXIpKTsKLQkJZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7Ci0JCSAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCWludCBiaXRfbnIgPSBldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpID4+IDI2OwogCiAJCQltY19maWx0ZXJbYml0X25yID4+IDVdIHw9IDEgPDwgKGJpdF9uciAmIDMxKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZpYS12ZWxvY2l0eS5jIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKaW5kZXggMzE3YWEzNC4uM2E0ODZmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKKysrIGIvZHJpdmVycy9uZXQvdmlhLXZlbG9jaXR5LmMKQEAgLTM2MSw3ICszNjEsNyBAQAogICoJRGVzY3JpYmUgdGhlIFBDSSBkZXZpY2UgaWRlbnRpZmllcnMgdGhhdCB3ZSBzdXBwb3J0IGluIHRoaXMKICAqCWRldmljZSBkcml2ZXIuIFVzZWQgZm9yIGhvdHBsdWcgYXV0b2xvYWRpbmcuCiAgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB2ZWxvY2l0eV9pZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodmVsb2NpdHlfaWRfdGFibGUpID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfNjEyWCkgfSwKIAl7IH0KIH07CkBAIC0xMTMyLDcgKzExMzIsNyBAQAogCQl3cml0ZWwoMHhmZmZmZmZmZiwgJnJlZ3MtPk1BUkNBTVswXSk7CiAJCXdyaXRlbCgweGZmZmZmZmZmLCAmcmVncy0+TUFSQ0FNWzRdKTsKIAkJcnhfbW9kZSA9IChSQ1JfQU0gfCBSQ1JfQUIgfCBSQ1JfUFJPTSk7Ci0JfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IHZwdHItPm11bHRpY2FzdF9saW1pdCkgfHwKKwl9IGVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IHZwdHItPm11bHRpY2FzdF9saW1pdCkgfHwKIAkJICAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAJCXdyaXRlbCgweGZmZmZmZmZmLCAmcmVncy0+TUFSQ0FNWzBdKTsKIAkJd3JpdGVsKDB4ZmZmZmZmZmYsICZyZWdzLT5NQVJDQU1bNF0pOwpAQCAtMTE0MSw5ICsxMTQxLDExIEBACiAJCWludCBvZmZzZXQgPSBNQ0FNX1NJWkUgLSB2cHRyLT5tdWx0aWNhc3RfbGltaXQ7CiAJCW1hY19nZXRfY2FtX21hc2socmVncywgdnB0ci0+bUNBTW1hc2spOwogCi0JCWZvciAoaSA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIGkgPCBkZXYtPm1jX2NvdW50OyBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQlpID0gMDsKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKIAkJCW1hY19zZXRfY2FtKHJlZ3MsIGkgKyBvZmZzZXQsIG1jbGlzdC0+ZG1pX2FkZHIpOwogCQkJdnB0ci0+bUNBTW1hc2tbKG9mZnNldCArIGkpIC8gOF0gfD0gMSA8PCAoKG9mZnNldCArIGkpICYgNyk7CisJCQlpKys7CiAJCX0KIAogCQltYWNfc2V0X2NhbV9tYXNrKHJlZ3MsIHZwdHItPm1DQU1tYXNrKTsKQEAgLTI2OTgsMTAgKzI3MDAsOCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSB2cHRyLT5kZXY7CiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogJXNcbiIsIGRldi0+bmFtZSwgZ2V0X2NoaXBfbmFtZSh2cHRyLT5jaGlwX2lkKSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEV0aGVybmV0IEFkZHJlc3M6ICUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYOiUyLjJYXG4iLAotCQlkZXYtPm5hbWUsCi0JCWRldi0+ZGV2X2FkZHJbMF0sIGRldi0+ZGV2X2FkZHJbMV0sIGRldi0+ZGV2X2FkZHJbMl0sCi0JCWRldi0+ZGV2X2FkZHJbM10sIGRldi0+ZGV2X2FkZHJbNF0sIGRldi0+ZGV2X2FkZHJbNV0pOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBFdGhlcm5ldCBBZGRyZXNzOiAlcE1cbiIsCisJCWRldi0+bmFtZSwgZGV2LT5kZXZfYWRkcik7CiB9CiAKIHN0YXRpYyB1MzIgdmVsb2NpdHlfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTI4MjUsNyArMjgyNSw3IEBACiAJbmV0aWZfbmFwaV9hZGQoZGV2LCAmdnB0ci0+bmFwaSwgdmVsb2NpdHlfcG9sbCwgVkVMT0NJVFlfTkFQSV9XRUlHSFQpOwogCiAJZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hXX1ZMQU5fVFggfCBORVRJRl9GX0hXX1ZMQU5fRklMVEVSIHwKLQkJTkVUSUZfRl9IV19WTEFOX1JYIHwgTkVUSUZfRl9JUF9DU1VNOworCQlORVRJRl9GX0hXX1ZMQU5fUlggfCBORVRJRl9GX0lQX0NTVU0gfCBORVRJRl9GX1NHOwogCiAJcmV0ID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKHJldCA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMgYi9kcml2ZXJzL25ldC92aXJ0aW9fbmV0LmMKaW5kZXggOWVhZDMwYi4uMjVkYzc3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdmlydGlvX25ldC5jCisrKyBiL2RyaXZlcnMvbmV0L3ZpcnRpb19uZXQuYwpAQCAtNTYsMTAgKzU2LDYgQEAKIAkvKiBIb3N0IHdpbGwgbWVyZ2UgcnggYnVmZmVycyBmb3IgYmlnIHBhY2tldHMgKHNoYWtlIGl0ISBzaGFrZSBpdCEpICovCiAJYm9vbCBtZXJnZWFibGVfcnhfYnVmczsKIAotCS8qIFJlY2VpdmUgJiBzZW5kIHF1ZXVlcy4gKi8KLQlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHJlY3Y7Ci0Jc3RydWN0IHNrX2J1ZmZfaGVhZCBzZW5kOwotCiAJLyogV29yayBzdHJ1Y3QgZm9yIHJlZmlsbGluZyBpZiB3ZSBydW4gbG93IG9uIG1lbW9yeS4gKi8KIAlzdHJ1Y3QgZGVsYXllZF93b3JrIHJlZmlsbDsKIApAQCAtNzUsMzQgKzcxLDQ0IEBACiAJdW5zaWduZWQgaW50IG51bV9zZzsKIH07CiAKK3N0cnVjdCBwYWRkZWRfdm5ldF9oZHIgeworCXN0cnVjdCB2aXJ0aW9fbmV0X2hkciBoZHI7CisJLyoKKwkgKiB2aXJ0aW9fbmV0X2hkciBzaG91bGQgYmUgaW4gYSBzZXBhcmF0ZWQgc2cgYnVmZmVyIGJlY2F1c2Ugb2YgYQorCSAqIFFFTVUgYnVnLCBhbmQgZGF0YSBzZyBidWZmZXIgc2hhcmVzIHNhbWUgcGFnZSB3aXRoIHRoaXMgaGVhZGVyIHNnLgorCSAqIFRoaXMgcGFkZGluZyBtYWtlcyBuZXh0IHNnIDE2IGJ5dGUgYWxpZ25lZCBhZnRlciB2aXJ0aW9fbmV0X2hkci4KKwkgKi8KKwljaGFyIHBhZGRpbmdbNl07Cit9OworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBza2Jfdm5ldF9oZHIgKnNrYl92bmV0X2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXJldHVybiAoc3RydWN0IHNrYl92bmV0X2hkciAqKXNrYi0+Y2I7CiB9CiAKLXN0YXRpYyB2b2lkIGdpdmVfYV9wYWdlKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKKy8qCisgKiBwcml2YXRlIGlzIHVzZWQgdG8gY2hhaW4gcGFnZXMgZm9yIGJpZyBwYWNrZXRzLCBwdXQgdGhlIHdob2xlCisgKiBtb3N0IHJlY2VudCB1c2VkIGxpc3QgaW4gdGhlIGJlZ2lubmluZyBmb3IgcmV1c2UKKyAqLworc3RhdGljIHZvaWQgZ2l2ZV9wYWdlcyhzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JcGFnZS0+cHJpdmF0ZSA9ICh1bnNpZ25lZCBsb25nKXZpLT5wYWdlczsKKwlzdHJ1Y3QgcGFnZSAqZW5kOworCisJLyogRmluZCBlbmQgb2YgbGlzdCwgc2V3IHdob2xlIHRoaW5nIGludG8gdmktPnBhZ2VzLiAqLworCWZvciAoZW5kID0gcGFnZTsgZW5kLT5wcml2YXRlOyBlbmQgPSAoc3RydWN0IHBhZ2UgKillbmQtPnByaXZhdGUpOworCWVuZC0+cHJpdmF0ZSA9ICh1bnNpZ25lZCBsb25nKXZpLT5wYWdlczsKIAl2aS0+cGFnZXMgPSBwYWdlOwogfQogCi1zdGF0aWMgdm9pZCB0cmltX3BhZ2VzKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQotewotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7IGkrKykKLQkJZ2l2ZV9hX3BhZ2UodmksIHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0ucGFnZSk7Ci0Jc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyA9IDA7Ci0Jc2tiLT5kYXRhX2xlbiA9IDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X2FfcGFnZShzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IHBhZ2UgKnAgPSB2aS0+cGFnZXM7CiAKLQlpZiAocCkKKwlpZiAocCkgewogCQl2aS0+cGFnZXMgPSAoc3RydWN0IHBhZ2UgKilwLT5wcml2YXRlOwotCWVsc2UKKwkJLyogY2xlYXIgcHJpdmF0ZSBoZXJlLCBpdCBpcyB1c2VkIHRvIGNoYWluIHBhZ2VzICovCisJCXAtPnByaXZhdGUgPSAwOworCX0gZWxzZQogCQlwID0gYWxsb2NfcGFnZShnZnBfbWFzayk7CiAJcmV0dXJuIHA7CiB9CkBAIC0xMTgsOTkgKzEyNCwxNDIgQEAKIAluZXRpZl93YWtlX3F1ZXVlKHZpLT5kZXYpOwogfQogCi1zdGF0aWMgdm9pZCByZWNlaXZlX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJdW5zaWduZWQgbGVuKQorc3RhdGljIHZvaWQgc2V0X3NrYl9mcmFnKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCAqbGVuKQoreworCWludCBpID0gc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFnczsKKwlza2JfZnJhZ190ICpmOworCisJZiA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ldOworCWYtPnNpemUgPSBtaW4oKHVuc2lnbmVkKVBBR0VfU0laRSAtIG9mZnNldCwgKmxlbik7CisJZi0+cGFnZV9vZmZzZXQgPSBvZmZzZXQ7CisJZi0+cGFnZSA9IHBhZ2U7CisKKwlza2ItPmRhdGFfbGVuICs9IGYtPnNpemU7CisJc2tiLT5sZW4gKz0gZi0+c2l6ZTsKKwlza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzKys7CisJKmxlbiAtPSBmLT5zaXplOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKnBhZ2VfdG9fc2tiKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLAorCQkJCSAgIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IHNrYl92bmV0X2hkciAqaGRyOworCXVuc2lnbmVkIGludCBjb3B5LCBoZHJfbGVuLCBvZmZzZXQ7CisJY2hhciAqcDsKKworCXAgPSBwYWdlX2FkZHJlc3MocGFnZSk7CisKKwkvKiBjb3B5IHNtYWxsIHBhY2tldCBzbyB3ZSBjYW4gcmV1c2UgdGhlc2UgcGFnZXMgZm9yIHNtYWxsIGRhdGEgKi8KKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKHZpLT5kZXYsIEdPT0RfQ09QWV9MRU4pOworCWlmICh1bmxpa2VseSghc2tiKSkKKwkJcmV0dXJuIE5VTEw7CisKKwloZHIgPSBza2Jfdm5ldF9oZHIoc2tiKTsKKworCWlmICh2aS0+bWVyZ2VhYmxlX3J4X2J1ZnMpIHsKKwkJaGRyX2xlbiA9IHNpemVvZiBoZHItPm1oZHI7CisJCW9mZnNldCA9IGhkcl9sZW47CisJfSBlbHNlIHsKKwkJaGRyX2xlbiA9IHNpemVvZiBoZHItPmhkcjsKKwkJb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBwYWRkZWRfdm5ldF9oZHIpOworCX0KKworCW1lbWNweShoZHIsIHAsIGhkcl9sZW4pOworCisJbGVuIC09IGhkcl9sZW47CisJcCArPSBvZmZzZXQ7CisKKwljb3B5ID0gbGVuOworCWlmIChjb3B5ID4gc2tiX3RhaWxyb29tKHNrYikpCisJCWNvcHkgPSBza2JfdGFpbHJvb20oc2tiKTsKKwltZW1jcHkoc2tiX3B1dChza2IsIGNvcHkpLCBwLCBjb3B5KTsKKworCWxlbiAtPSBjb3B5OworCW9mZnNldCArPSBjb3B5OworCisJd2hpbGUgKGxlbikgeworCQlzZXRfc2tiX2ZyYWcoc2tiLCBwYWdlLCBvZmZzZXQsICZsZW4pOworCQlwYWdlID0gKHN0cnVjdCBwYWdlICopcGFnZS0+cHJpdmF0ZTsKKwkJb2Zmc2V0ID0gMDsKKwl9CisKKwlpZiAocGFnZSkKKwkJZ2l2ZV9wYWdlcyh2aSwgcGFnZSk7CisKKwlyZXR1cm4gc2tiOworfQorCitzdGF0aWMgaW50IHJlY2VpdmVfbWVyZ2VhYmxlKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBza2Jfdm5ldF9oZHIgKmhkciA9IHNrYl92bmV0X2hkcihza2IpOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBudW1fYnVmLCBpLCBsZW47CisKKwludW1fYnVmID0gaGRyLT5taGRyLm51bV9idWZmZXJzOworCXdoaWxlICgtLW51bV9idWYpIHsKKwkJaSA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7CisJCWlmIChpID49IE1BWF9TS0JfRlJBR1MpIHsKKwkJCXByX2RlYnVnKCIlczogcGFja2V0IHRvbyBsb25nXG4iLCBza2ItPmRldi0+bmFtZSk7CisJCQlza2ItPmRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlwYWdlID0gdmktPnJ2cS0+dnFfb3BzLT5nZXRfYnVmKHZpLT5ydnEsICZsZW4pOworCQlpZiAoIXBhZ2UpIHsKKwkJCXByX2RlYnVnKCIlczogcnggZXJyb3I6ICVkIGJ1ZmZlcnMgbWlzc2luZ1xuIiwKKwkJCQkgc2tiLT5kZXYtPm5hbWUsIGhkci0+bWhkci5udW1fYnVmZmVycyk7CisJCQlza2ItPmRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKGxlbiA+IFBBR0VfU0laRSkKKwkJCWxlbiA9IFBBR0VfU0laRTsKKworCQlzZXRfc2tiX2ZyYWcoc2tiLCBwYWdlLCAwLCAmbGVuKTsKKworCQktLXZpLT5udW07CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCByZWNlaXZlX2J1ZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBza2Jfdm5ldF9oZHIgKmhkciA9IHNrYl92bmV0X2hkcihza2IpOwotCWludCBlcnI7Ci0JaW50IGk7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3Qgc2tiX3ZuZXRfaGRyICpoZHI7CiAKIAlpZiAodW5saWtlbHkobGVuIDwgc2l6ZW9mKHN0cnVjdCB2aXJ0aW9fbmV0X2hkcikgKyBFVEhfSExFTikpIHsKIAkJcHJfZGVidWcoIiVzOiBzaG9ydCBwYWNrZXQgJWlcbiIsIGRldi0+bmFtZSwgbGVuKTsKIAkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCWdvdG8gZHJvcDsKKwkJaWYgKHZpLT5tZXJnZWFibGVfcnhfYnVmcyB8fCB2aS0+YmlnX3BhY2tldHMpCisJCQlnaXZlX3BhZ2VzKHZpLCBidWYpOworCQllbHNlCisJCQlkZXZfa2ZyZWVfc2tiKGJ1Zik7CisJCXJldHVybjsKIAl9CiAKLQlpZiAodmktPm1lcmdlYWJsZV9yeF9idWZzKSB7Ci0JCXVuc2lnbmVkIGludCBjb3B5OwotCQljaGFyICpwID0gcGFnZV9hZGRyZXNzKHNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0ucGFnZSk7Ci0KLQkJaWYgKGxlbiA+IFBBR0VfU0laRSkKLQkJCWxlbiA9IFBBR0VfU0laRTsKLQkJbGVuIC09IHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHJfbXJnX3J4YnVmKTsKLQotCQltZW1jcHkoJmhkci0+bWhkciwgcCwgc2l6ZW9mKGhkci0+bWhkcikpOwotCQlwICs9IHNpemVvZihoZHItPm1oZHIpOwotCi0JCWNvcHkgPSBsZW47Ci0JCWlmIChjb3B5ID4gc2tiX3RhaWxyb29tKHNrYikpCi0JCQljb3B5ID0gc2tiX3RhaWxyb29tKHNrYik7Ci0KLQkJbWVtY3B5KHNrYl9wdXQoc2tiLCBjb3B5KSwgcCwgY29weSk7Ci0KLQkJbGVuIC09IGNvcHk7Ci0KLQkJaWYgKCFsZW4pIHsKLQkJCWdpdmVfYV9wYWdlKHZpLCBza2Jfc2hpbmZvKHNrYiktPmZyYWdzWzBdLnBhZ2UpOwotCQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncy0tOwotCQl9IGVsc2UgewotCQkJc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXS5wYWdlX29mZnNldCArPQotCQkJCXNpemVvZihoZHItPm1oZHIpICsgY29weTsKLQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbMF0uc2l6ZSA9IGxlbjsKLQkJCXNrYi0+ZGF0YV9sZW4gKz0gbGVuOwotCQkJc2tiLT5sZW4gKz0gbGVuOwotCQl9Ci0KLQkJd2hpbGUgKC0taGRyLT5taGRyLm51bV9idWZmZXJzKSB7Ci0JCQlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKLQotCQkJaSA9IHNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3M7Ci0JCQlpZiAoaSA+PSBNQVhfU0tCX0ZSQUdTKSB7Ci0JCQkJcHJfZGVidWcoIiVzOiBwYWNrZXQgdG9vIGxvbmcgJWRcbiIsIGRldi0+bmFtZSwKLQkJCQkJIGxlbik7Ci0JCQkJZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7Ci0JCQkJZ290byBkcm9wOwotCQkJfQotCi0JCQluc2tiID0gdmktPnJ2cS0+dnFfb3BzLT5nZXRfYnVmKHZpLT5ydnEsICZsZW4pOwotCQkJaWYgKCFuc2tiKSB7Ci0JCQkJcHJfZGVidWcoIiVzOiByeCBlcnJvcjogJWQgYnVmZmVycyBtaXNzaW5nXG4iLAotCQkJCQkgZGV2LT5uYW1lLCBoZHItPm1oZHIubnVtX2J1ZmZlcnMpOwotCQkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwotCQkJCWdvdG8gZHJvcDsKLQkJCX0KLQotCQkJX19za2JfdW5saW5rKG5za2IsICZ2aS0+cmVjdik7Ci0JCQl2aS0+bnVtLS07Ci0KLQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0gPSBza2Jfc2hpbmZvKG5za2IpLT5mcmFnc1swXTsKLQkJCXNrYl9zaGluZm8obnNrYiktPm5yX2ZyYWdzID0gMDsKLQkJCWtmcmVlX3NrYihuc2tiKTsKLQotCQkJaWYgKGxlbiA+IFBBR0VfU0laRSkKLQkJCQlsZW4gPSBQQUdFX1NJWkU7Ci0KLQkJCXNrYl9zaGluZm8oc2tiKS0+ZnJhZ3NbaV0uc2l6ZSA9IGxlbjsKLQkJCXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MrKzsKLQkJCXNrYi0+ZGF0YV9sZW4gKz0gbGVuOwotCQkJc2tiLT5sZW4gKz0gbGVuOwotCQl9CisJaWYgKCF2aS0+bWVyZ2VhYmxlX3J4X2J1ZnMgJiYgIXZpLT5iaWdfcGFja2V0cykgeworCQlza2IgPSBidWY7CisJCWxlbiAtPSBzaXplb2Yoc3RydWN0IHZpcnRpb19uZXRfaGRyKTsKKwkJc2tiX3RyaW0oc2tiLCBsZW4pOwogCX0gZWxzZSB7Ci0JCWxlbiAtPSBzaXplb2YoaGRyLT5oZHIpOwotCi0JCWlmIChsZW4gPD0gTUFYX1BBQ0tFVF9MRU4pCi0JCQl0cmltX3BhZ2VzKHZpLCBza2IpOwotCi0JCWVyciA9IHBza2JfdHJpbShza2IsIGxlbik7Ci0JCWlmIChlcnIpIHsKLQkJCXByX2RlYnVnKCIlczogcHNrYl90cmltIGZhaWxlZCAlaSAlZFxuIiwgZGV2LT5uYW1lLAotCQkJCSBsZW4sIGVycik7CisJCXBhZ2UgPSBidWY7CisJCXNrYiA9IHBhZ2VfdG9fc2tiKHZpLCBwYWdlLCBsZW4pOworCQlpZiAodW5saWtlbHkoIXNrYikpIHsKIAkJCWRldi0+c3RhdHMucnhfZHJvcHBlZCsrOwotCQkJZ290byBkcm9wOworCQkJZ2l2ZV9wYWdlcyh2aSwgcGFnZSk7CisJCQlyZXR1cm47CiAJCX0KKwkJaWYgKHZpLT5tZXJnZWFibGVfcnhfYnVmcykKKwkJCWlmIChyZWNlaXZlX21lcmdlYWJsZSh2aSwgc2tiKSkgeworCQkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCQlyZXR1cm47CisJCQl9CiAJfQogCisJaGRyID0gc2tiX3ZuZXRfaGRyKHNrYik7CiAJc2tiLT50cnVlc2l6ZSArPSBza2ItPmRhdGFfbGVuOwogCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CiAJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CkBAIC0yNjcsMTEwICszMTYsMTE5IEBACiAKIGZyYW1lX2VycjoKIAlkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwotZHJvcDoKIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiB9CiAKLXN0YXRpYyBib29sIHRyeV9maWxsX3JlY3ZfbWF4YnVmcyhzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgZ2ZwX3QgZ2ZwKQorc3RhdGljIGludCBhZGRfcmVjdmJ1Zl9zbWFsbChzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgZ2ZwX3QgZ2ZwKQogewogCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0IHNnWzIrTUFYX1NLQl9GUkFHU107Ci0JaW50IG51bSwgZXJyLCBpOwotCWJvb2wgb29tID0gZmFsc2U7CisJc3RydWN0IHNrYl92bmV0X2hkciAqaGRyOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1syXTsKKwlpbnQgZXJyOwogCi0Jc2dfaW5pdF90YWJsZShzZywgMitNQVhfU0tCX0ZSQUdTKTsKLQlkbyB7Ci0JCXN0cnVjdCBza2Jfdm5ldF9oZHIgKmhkcjsKKwlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKHZpLT5kZXYsIE1BWF9QQUNLRVRfTEVOKTsKKwlpZiAodW5saWtlbHkoIXNrYikpCisJCXJldHVybiAtRU5PTUVNOwogCi0JCXNrYiA9IG5ldGRldl9hbGxvY19za2JfaXBfYWxpZ24odmktPmRldiwgTUFYX1BBQ0tFVF9MRU4pOwotCQlpZiAodW5saWtlbHkoIXNrYikpIHsKLQkJCW9vbSA9IHRydWU7Ci0JCQlicmVhazsKKwlza2JfcHV0KHNrYiwgTUFYX1BBQ0tFVF9MRU4pOworCisJaGRyID0gc2tiX3ZuZXRfaGRyKHNrYik7CisJc2dfc2V0X2J1ZihzZywgJmhkci0+aGRyLCBzaXplb2YgaGRyLT5oZHIpOworCisJc2tiX3RvX3NndmVjKHNrYiwgc2cgKyAxLCAwLCBza2ItPmxlbik7CisKKwllcnIgPSB2aS0+cnZxLT52cV9vcHMtPmFkZF9idWYodmktPnJ2cSwgc2csIDAsIDIsIHNrYik7CisJaWYgKGVyciA8IDApCisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYWRkX3JlY3ZidWZfYmlnKHN0cnVjdCB2aXJ0bmV0X2luZm8gKnZpLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHNjYXR0ZXJsaXN0IHNnW01BWF9TS0JfRlJBR1MgKyAyXTsKKwlzdHJ1Y3QgcGFnZSAqZmlyc3QsICpsaXN0ID0gTlVMTDsKKwljaGFyICpwOworCWludCBpLCBlcnIsIG9mZnNldDsKKworCS8qIHBhZ2UgaW4gc2dbTUFYX1NLQl9GUkFHUyArIDFdIGlzIGxpc3QgdGFpbCAqLworCWZvciAoaSA9IE1BWF9TS0JfRlJBR1MgKyAxOyBpID4gMTsgLS1pKSB7CisJCWZpcnN0ID0gZ2V0X2FfcGFnZSh2aSwgZ2ZwKTsKKwkJaWYgKCFmaXJzdCkgeworCQkJaWYgKGxpc3QpCisJCQkJZ2l2ZV9wYWdlcyh2aSwgbGlzdCk7CisJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQorCQlzZ19zZXRfYnVmKCZzZ1tpXSwgcGFnZV9hZGRyZXNzKGZpcnN0KSwgUEFHRV9TSVpFKTsKIAotCQlza2JfcHV0KHNrYiwgTUFYX1BBQ0tFVF9MRU4pOworCQkvKiBjaGFpbiBuZXcgcGFnZSBpbiBsaXN0IGhlYWQgdG8gbWF0Y2ggc2cgKi8KKwkJZmlyc3QtPnByaXZhdGUgPSAodW5zaWduZWQgbG9uZylsaXN0OworCQlsaXN0ID0gZmlyc3Q7CisJfQogCi0JCWhkciA9IHNrYl92bmV0X2hkcihza2IpOwotCQlzZ19zZXRfYnVmKHNnLCAmaGRyLT5oZHIsIHNpemVvZihoZHItPmhkcikpOworCWZpcnN0ID0gZ2V0X2FfcGFnZSh2aSwgZ2ZwKTsKKwlpZiAoIWZpcnN0KSB7CisJCWdpdmVfcGFnZXModmksIGxpc3QpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcCA9IHBhZ2VfYWRkcmVzcyhmaXJzdCk7CiAKLQkJaWYgKHZpLT5iaWdfcGFja2V0cykgewotCQkJZm9yIChpID0gMDsgaSA8IE1BWF9TS0JfRlJBR1M7IGkrKykgewotCQkJCXNrYl9mcmFnX3QgKmYgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1tpXTsKLQkJCQlmLT5wYWdlID0gZ2V0X2FfcGFnZSh2aSwgZ2ZwKTsKLQkJCQlpZiAoIWYtPnBhZ2UpCi0JCQkJCWJyZWFrOworCS8qIHNnWzBdLCBzZ1sxXSBzaGFyZSB0aGUgc2FtZSBwYWdlICovCisJLyogYSBzZXBhcmF0ZWQgc2dbMF0gZm9yICB2aXJ0aW9fbmV0X2hkciBvbmx5IGR1cmluZyB0byBRRU1VIGJ1ZyovCisJc2dfc2V0X2J1Zigmc2dbMF0sIHAsIHNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHIpKTsKIAotCQkJCWYtPnBhZ2Vfb2Zmc2V0ID0gMDsKLQkJCQlmLT5zaXplID0gUEFHRV9TSVpFOworCS8qIHNnWzFdIGZvciBkYXRhIHBhY2tldCwgZnJvbSBvZmZzZXQgKi8KKwlvZmZzZXQgPSBzaXplb2Yoc3RydWN0IHBhZGRlZF92bmV0X2hkcik7CisJc2dfc2V0X2J1Zigmc2dbMV0sIHAgKyBvZmZzZXQsIFBBR0VfU0laRSAtIG9mZnNldCk7CiAKLQkJCQlza2ItPmRhdGFfbGVuICs9IFBBR0VfU0laRTsKLQkJCQlza2ItPmxlbiArPSBQQUdFX1NJWkU7CisJLyogY2hhaW4gZmlyc3QgaW4gbGlzdCBoZWFkICovCisJZmlyc3QtPnByaXZhdGUgPSAodW5zaWduZWQgbG9uZylsaXN0OworCWVyciA9IHZpLT5ydnEtPnZxX29wcy0+YWRkX2J1Zih2aS0+cnZxLCBzZywgMCwgTUFYX1NLQl9GUkFHUyArIDIsCisJCQkJICAgICAgIGZpcnN0KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ2l2ZV9wYWdlcyh2aSwgZmlyc3QpOwogCi0JCQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncysrOwotCQkJfQotCQl9CisJcmV0dXJuIGVycjsKK30KIAotCQludW0gPSBza2JfdG9fc2d2ZWMoc2tiLCBzZysxLCAwLCBza2ItPmxlbikgKyAxOwotCQlza2JfcXVldWVfaGVhZCgmdmktPnJlY3YsIHNrYik7CitzdGF0aWMgaW50IGFkZF9yZWN2YnVmX21lcmdlYWJsZShzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKKwlpbnQgZXJyOwogCi0JCWVyciA9IHZpLT5ydnEtPnZxX29wcy0+YWRkX2J1Zih2aS0+cnZxLCBzZywgMCwgbnVtLCBza2IpOwotCQlpZiAoZXJyIDwgMCkgewotCQkJc2tiX3VubGluayhza2IsICZ2aS0+cmVjdik7Ci0JCQl0cmltX3BhZ2VzKHZpLCBza2IpOwotCQkJa2ZyZWVfc2tiKHNrYik7Ci0JCQlicmVhazsKLQkJfQotCQl2aS0+bnVtKys7Ci0JfSB3aGlsZSAoZXJyID49IG51bSk7Ci0JaWYgKHVubGlrZWx5KHZpLT5udW0gPiB2aS0+bWF4KSkKLQkJdmktPm1heCA9IHZpLT5udW07Ci0JdmktPnJ2cS0+dnFfb3BzLT5raWNrKHZpLT5ydnEpOwotCXJldHVybiAhb29tOworCXBhZ2UgPSBnZXRfYV9wYWdlKHZpLCBnZnApOworCWlmICghcGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzZ19pbml0X29uZSgmc2csIHBhZ2VfYWRkcmVzcyhwYWdlKSwgUEFHRV9TSVpFKTsKKworCWVyciA9IHZpLT5ydnEtPnZxX29wcy0+YWRkX2J1Zih2aS0+cnZxLCAmc2csIDAsIDEsIHBhZ2UpOworCWlmIChlcnIgPCAwKQorCQlnaXZlX3BhZ2VzKHZpLCBwYWdlKTsKKworCXJldHVybiBlcnI7CiB9CiAKIC8qIFJldHVybnMgZmFsc2UgaWYgd2UgY291bGRuJ3QgZmlsbCBlbnRpcmVseSAoT09NKS4gKi8KIHN0YXRpYyBib29sIHRyeV9maWxsX3JlY3Yoc3RydWN0IHZpcnRuZXRfaW5mbyAqdmksIGdmcF90IGdmcCkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXN0cnVjdCBzY2F0dGVybGlzdCBzZ1sxXTsKIAlpbnQgZXJyOwogCWJvb2wgb29tID0gZmFsc2U7CiAKLQlpZiAoIXZpLT5tZXJnZWFibGVfcnhfYnVmcykKLQkJcmV0dXJuIHRyeV9maWxsX3JlY3ZfbWF4YnVmcyh2aSwgZ2ZwKTsKLQogCWRvIHsKLQkJc2tiX2ZyYWdfdCAqZjsKKwkJaWYgKHZpLT5tZXJnZWFibGVfcnhfYnVmcykKKwkJCWVyciA9IGFkZF9yZWN2YnVmX21lcmdlYWJsZSh2aSwgZ2ZwKTsKKwkJZWxzZSBpZiAodmktPmJpZ19wYWNrZXRzKQorCQkJZXJyID0gYWRkX3JlY3ZidWZfYmlnKHZpLCBnZnApOworCQllbHNlCisJCQllcnIgPSBhZGRfcmVjdmJ1Zl9zbWFsbCh2aSwgZ2ZwKTsKIAotCQlza2IgPSBuZXRkZXZfYWxsb2Nfc2tiX2lwX2FsaWduKHZpLT5kZXYsIEdPT0RfQ09QWV9MRU4pOwotCQlpZiAodW5saWtlbHkoIXNrYikpIHsKLQkJCW9vbSA9IHRydWU7Ci0JCQlicmVhazsKLQkJfQotCi0JCWYgPSAmc2tiX3NoaW5mbyhza2IpLT5mcmFnc1swXTsKLQkJZi0+cGFnZSA9IGdldF9hX3BhZ2UodmksIGdmcCk7Ci0JCWlmICghZi0+cGFnZSkgewotCQkJb29tID0gdHJ1ZTsKLQkJCWtmcmVlX3NrYihza2IpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlmLT5wYWdlX29mZnNldCA9IDA7Ci0JCWYtPnNpemUgPSBQQUdFX1NJWkU7Ci0KLQkJc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncysrOwotCi0JCXNnX2luaXRfb25lKHNnLCBwYWdlX2FkZHJlc3MoZi0+cGFnZSksIFBBR0VfU0laRSk7Ci0JCXNrYl9xdWV1ZV9oZWFkKCZ2aS0+cmVjdiwgc2tiKTsKLQotCQllcnIgPSB2aS0+cnZxLT52cV9vcHMtPmFkZF9idWYodmktPnJ2cSwgc2csIDAsIDEsIHNrYik7CiAJCWlmIChlcnIgPCAwKSB7Ci0JCQlza2JfdW5saW5rKHNrYiwgJnZpLT5yZWN2KTsKLQkJCWtmcmVlX3NrYihza2IpOworCQkJb29tID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQl9Ci0JCXZpLT5udW0rKzsKKwkJKyt2aS0+bnVtOwogCX0gd2hpbGUgKGVyciA+IDApOwogCWlmICh1bmxpa2VseSh2aS0+bnVtID4gdmktPm1heCkpCiAJCXZpLT5tYXggPSB2aS0+bnVtOwpAQCAtNDA3LDE1ICs0NjUsMTQgQEAKIHN0YXRpYyBpbnQgdmlydG5ldF9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldCkKIHsKIAlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IGNvbnRhaW5lcl9vZihuYXBpLCBzdHJ1Y3QgdmlydG5ldF9pbmZvLCBuYXBpKTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gTlVMTDsKKwl2b2lkICpidWY7CiAJdW5zaWduZWQgaW50IGxlbiwgcmVjZWl2ZWQgPSAwOwogCiBhZ2FpbjoKIAl3aGlsZSAocmVjZWl2ZWQgPCBidWRnZXQgJiYKLQkgICAgICAgKHNrYiA9IHZpLT5ydnEtPnZxX29wcy0+Z2V0X2J1Zih2aS0+cnZxLCAmbGVuKSkgIT0gTlVMTCkgewotCQlfX3NrYl91bmxpbmsoc2tiLCAmdmktPnJlY3YpOwotCQlyZWNlaXZlX3NrYih2aS0+ZGV2LCBza2IsIGxlbik7Ci0JCXZpLT5udW0tLTsKKwkgICAgICAgKGJ1ZiA9IHZpLT5ydnEtPnZxX29wcy0+Z2V0X2J1Zih2aS0+cnZxLCAmbGVuKSkgIT0gTlVMTCkgeworCQlyZWNlaXZlX2J1Zih2aS0+ZGV2LCBidWYsIGxlbik7CisJCS0tdmktPm51bTsKIAkJcmVjZWl2ZWQrKzsKIAl9CiAKQEAgLTQ0NSw3ICs1MDIsNiBAQAogCiAJd2hpbGUgKChza2IgPSB2aS0+c3ZxLT52cV9vcHMtPmdldF9idWYodmktPnN2cSwgJmxlbikpICE9IE5VTEwpIHsKIAkJcHJfZGVidWcoIlNlbnQgc2tiICVwXG4iLCBza2IpOwotCQlfX3NrYl91bmxpbmsoc2tiLCAmdmktPnNlbmQpOwogCQl2aS0+ZGV2LT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsKIAkJdmktPmRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCQl0b3Rfc2dzICs9IHNrYl92bmV0X2hkcihza2IpLT5udW1fc2c7CkBAIC00OTUsOSArNTUxLDkgQEAKIAogCS8qIEVuY29kZSBtZXRhZGF0YSBoZWFkZXIgYXQgZnJvbnQuICovCiAJaWYgKHZpLT5tZXJnZWFibGVfcnhfYnVmcykKLQkJc2dfc2V0X2J1ZihzZywgJmhkci0+bWhkciwgc2l6ZW9mKGhkci0+bWhkcikpOworCQlzZ19zZXRfYnVmKHNnLCAmaGRyLT5taGRyLCBzaXplb2YgaGRyLT5taGRyKTsKIAllbHNlCi0JCXNnX3NldF9idWYoc2csICZoZHItPmhkciwgc2l6ZW9mKGhkci0+aGRyKSk7CisJCXNnX3NldF9idWYoc2csICZoZHItPmhkciwgc2l6ZW9mIGhkci0+aGRyKTsKIAogCWhkci0+bnVtX3NnID0gc2tiX3RvX3NndmVjKHNrYiwgc2crMSwgMCwgc2tiLT5sZW4pICsgMTsKIAlyZXR1cm4gdmktPnN2cS0+dnFfb3BzLT5hZGRfYnVmKHZpLT5zdnEsIHNnLCBoZHItPm51bV9zZywgMCwgc2tiKTsKQEAgLTUyOCwxNSArNTg0LDYgQEAKIAl9CiAJdmktPnN2cS0+dnFfb3BzLT5raWNrKHZpLT5zdnEpOwogCi0JLyoKLQkgKiBQdXQgbmV3IG9uZSBpbiBzZW5kIHF1ZXVlLiAgWW91J2QgZXhwZWN0IHdlJ2QgbmVlZCB0aGlzIGJlZm9yZQotCSAqIHhtaXRfc2tiIGNhbGxzIGFkZF9idWYoKSwgc2luY2UgdGhlIGNhbGxiYWNrIGNhbiBiZSB0cmlnZ2VyZWQKLQkgKiBpbW1lZGlhdGVseSBhZnRlciB0aGF0LiAgQnV0IHNpbmNlIHRoZSBjYWxsYmFjayBqdXN0IHRyaWdnZXJzCi0JICogYW5vdGhlciBjYWxsIGJhY2sgaGVyZSwgbm9ybWFsIG5ldHdvcmsgeG1pdCBsb2NraW5nIHByZXZlbnRzIHRoZQotCSAqIHJhY2UuCi0JICovCi0JX19za2JfcXVldWVfaGVhZCgmdmktPnNlbmQsIHNrYik7Ci0KIAkvKiBEb24ndCB3YWl0IHVwIGZvciB0cmFuc21pdHRlZCBza2JzIHRvIGJlIGZyZWVkLiAqLwogCXNrYl9vcnBoYW4oc2tiKTsKIAluZl9yZXNldChza2IpOwpAQCAtNjc0LDYgKzcyMSw4IEBACiAJc3RydWN0IHZpcnRpb19uZXRfY3RybF9tYWMgKm1hY19kYXRhOwogCXN0cnVjdCBkZXZfYWRkcl9saXN0ICphZGRyOwogCXN0cnVjdCBuZXRkZXZfaHdfYWRkciAqaGE7CisJaW50IHVjX2NvdW50OworCWludCBtY19jb3VudDsKIAl2b2lkICpidWY7CiAJaW50IGk7CiAKQEAgLTcwMCw5ICs3NDksMTIgQEAKIAkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiRmFpbGVkIHRvICVzYWJsZSBhbGxtdWx0aSBtb2RlLlxuIiwKIAkJCSBhbGxtdWx0aSA/ICJlbiIgOiAiZGlzIik7CiAKKwl1Y19jb3VudCA9IG5ldGRldl91Y19jb3VudChkZXYpOworCW1jX2NvdW50ID0gbmV0ZGV2X21jX2NvdW50KGRldik7CiAJLyogTUFDIGZpbHRlciAtIHVzZSBvbmUgYnVmZmVyIGZvciBib3RoIGxpc3RzICovCi0JbWFjX2RhdGEgPSBidWYgPSBremFsbG9jKCgoZGV2LT51Yy5jb3VudCArIGRldi0+bWNfY291bnQpICogRVRIX0FMRU4pICsKLQkJCQkgKDIgKiBzaXplb2YobWFjX2RhdGEtPmVudHJpZXMpKSwgR0ZQX0FUT01JQyk7CisJYnVmID0ga3phbGxvYygoKHVjX2NvdW50ICsgbWNfY291bnQpICogRVRIX0FMRU4pICsKKwkJICAgICAgKDIgKiBzaXplb2YobWFjX2RhdGEtPmVudHJpZXMpKSwgR0ZQX0FUT01JQyk7CisJbWFjX2RhdGEgPSBidWY7CiAJaWYgKCFidWYpIHsKIAkJZGV2X3dhcm4oJmRldi0+ZGV2LCAiTm8gbWVtb3J5IGZvciBNQUMgYWRkcmVzcyBidWZmZXJcbiIpOwogCQlyZXR1cm47CkBAIC03MTEsMjQgKzc2MywyNCBAQAogCXNnX2luaXRfdGFibGUoc2csIDIpOwogCiAJLyogU3RvcmUgdGhlIHVuaWNhc3QgbGlzdCBhbmQgY291bnQgaW4gdGhlIGZyb250IG9mIHRoZSBidWZmZXIgKi8KLQltYWNfZGF0YS0+ZW50cmllcyA9IGRldi0+dWMuY291bnQ7CisJbWFjX2RhdGEtPmVudHJpZXMgPSB1Y19jb3VudDsKIAlpID0gMDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGhhLCAmZGV2LT51Yy5saXN0LCBsaXN0KQorCW5ldGRldl9mb3JfZWFjaF91Y19hZGRyKGhhLCBkZXYpCiAJCW1lbWNweSgmbWFjX2RhdGEtPm1hY3NbaSsrXVswXSwgaGEtPmFkZHIsIEVUSF9BTEVOKTsKIAogCXNnX3NldF9idWYoJnNnWzBdLCBtYWNfZGF0YSwKLQkJICAgc2l6ZW9mKG1hY19kYXRhLT5lbnRyaWVzKSArIChkZXYtPnVjLmNvdW50ICogRVRIX0FMRU4pKTsKKwkJICAgc2l6ZW9mKG1hY19kYXRhLT5lbnRyaWVzKSArICh1Y19jb3VudCAqIEVUSF9BTEVOKSk7CiAKIAkvKiBtdWx0aWNhc3QgbGlzdCBhbmQgY291bnQgZmlsbCB0aGUgZW5kICovCi0JbWFjX2RhdGEgPSAodm9pZCAqKSZtYWNfZGF0YS0+bWFjc1tkZXYtPnVjLmNvdW50XVswXTsKKwltYWNfZGF0YSA9ICh2b2lkICopJm1hY19kYXRhLT5tYWNzW3VjX2NvdW50XVswXTsKIAotCW1hY19kYXRhLT5lbnRyaWVzID0gZGV2LT5tY19jb3VudDsKLQlhZGRyID0gZGV2LT5tY19saXN0OwotCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50OyBpKyssIGFkZHIgPSBhZGRyLT5uZXh0KQotCQltZW1jcHkoJm1hY19kYXRhLT5tYWNzW2ldWzBdLCBhZGRyLT5kYV9hZGRyLCBFVEhfQUxFTik7CisJbWFjX2RhdGEtPmVudHJpZXMgPSBtY19jb3VudDsKKwlpID0gMDsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihhZGRyLCBkZXYpCisJCW1lbWNweSgmbWFjX2RhdGEtPm1hY3NbaSsrXVswXSwgYWRkci0+ZGFfYWRkciwgRVRIX0FMRU4pOwogCiAJc2dfc2V0X2J1Zigmc2dbMV0sIG1hY19kYXRhLAotCQkgICBzaXplb2YobWFjX2RhdGEtPmVudHJpZXMpICsgKGRldi0+bWNfY291bnQgKiBFVEhfQUxFTikpOworCQkgICBzaXplb2YobWFjX2RhdGEtPmVudHJpZXMpICsgKG1jX2NvdW50ICogRVRIX0FMRU4pKTsKIAogCWlmICghdmlydG5ldF9zZW5kX2NvbW1hbmQodmksIFZJUlRJT19ORVRfQ1RSTF9NQUMsCiAJCQkJICBWSVJUSU9fTkVUX0NUUkxfTUFDX1RBQkxFX1NFVCwKQEAgLTkxNSwxMCArOTY3LDYgQEAKIAkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9IV19WTEFOX0ZJTFRFUjsKIAl9CiAKLQkvKiBJbml0aWFsaXplIG91ciBlbXB0eSByZWNlaXZlIGFuZCBzZW5kIHF1ZXVlcy4gKi8KLQlza2JfcXVldWVfaGVhZF9pbml0KCZ2aS0+cmVjdik7Ci0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdmktPnNlbmQpOwotCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7CiAJaWYgKGVycikgewogCQlwcl9kZWJ1ZygidmlydGlvX25ldDogcmVnaXN0ZXJpbmcgZGV2aWNlIGZhaWxlZFxuIik7CkBAIC05NTEsMjYgKzk5OSw0MiBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB2b2lkIGZyZWVfdW51c2VkX2J1ZnMoc3RydWN0IHZpcnRuZXRfaW5mbyAqdmkpCit7CisJdm9pZCAqYnVmOworCXdoaWxlICgxKSB7CisJCWJ1ZiA9IHZpLT5zdnEtPnZxX29wcy0+ZGV0YWNoX3VudXNlZF9idWYodmktPnN2cSk7CisJCWlmICghYnVmKQorCQkJYnJlYWs7CisJCWRldl9rZnJlZV9za2IoYnVmKTsKKwl9CisJd2hpbGUgKDEpIHsKKwkJYnVmID0gdmktPnJ2cS0+dnFfb3BzLT5kZXRhY2hfdW51c2VkX2J1Zih2aS0+cnZxKTsKKwkJaWYgKCFidWYpCisJCQlicmVhazsKKwkJaWYgKHZpLT5tZXJnZWFibGVfcnhfYnVmcyB8fCB2aS0+YmlnX3BhY2tldHMpCisJCQlnaXZlX3BhZ2VzKHZpLCBidWYpOworCQllbHNlCisJCQlkZXZfa2ZyZWVfc2tiKGJ1Zik7CisJCS0tdmktPm51bTsKKwl9CisJQlVHX09OKHZpLT5udW0gIT0gMCk7Cit9CisKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCB2aXJ0bmV0X3JlbW92ZShzdHJ1Y3QgdmlydGlvX2RldmljZSAqdmRldikKIHsKIAlzdHJ1Y3QgdmlydG5ldF9pbmZvICp2aSA9IHZkZXYtPnByaXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAogCS8qIFN0b3AgYWxsIHRoZSB2aXJ0cXVldWVzLiAqLwogCXZkZXYtPmNvbmZpZy0+cmVzZXQodmRldik7CiAKLQkvKiBGcmVlIG91ciBza2JzIGluIHNlbmQgYW5kIHJlY3YgcXVldWVzLCBpZiBhbnkuICovCi0Jd2hpbGUgKChza2IgPSBfX3NrYl9kZXF1ZXVlKCZ2aS0+cmVjdikpICE9IE5VTEwpIHsKLQkJa2ZyZWVfc2tiKHNrYik7Ci0JCXZpLT5udW0tLTsKLQl9Ci0JX19za2JfcXVldWVfcHVyZ2UoJnZpLT5zZW5kKTsKLQotCUJVR19PTih2aS0+bnVtICE9IDApOwogCiAJdW5yZWdpc3Rlcl9uZXRkZXYodmktPmRldik7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ2aS0+cmVmaWxsKTsKIAorCS8qIEZyZWUgdW51c2VkIGJ1ZmZlcnMgaW4gYm90aCBzZW5kIGFuZCByZWN2LCBpZiBhbnkuICovCisJZnJlZV91bnVzZWRfYnVmcyh2aSk7CisKIAl2ZGV2LT5jb25maWctPmRlbF92cXModmktPnZkZXYpOwogCiAJd2hpbGUgKHZpLT5wYWdlcykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYyBiL2RyaXZlcnMvbmV0L3ZteG5ldDMvdm14bmV0M19kcnYuYwppbmRleCA5Y2M0MzgyLi5jZmYzNDg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC92bXhuZXQzL3ZteG5ldDNfZHJ2LmMKKysrIGIvZHJpdmVycy9uZXQvdm14bmV0My92bXhuZXQzX2Rydi5jCkBAIC0zNSw3ICszNSw3IEBACiAgKiBQQ0kgRGV2aWNlIElEIFRhYmxlCiAgKiBMYXN0IGVudHJ5IG11c3QgYmUgYWxsIDBzCiAgKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCB2bXhuZXQzX3BjaWlkX3RhYmxlW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodm14bmV0M19wY2lpZF90YWJsZSkgPSB7CiAJe1BDSV9WREVWSUNFKFZNV0FSRSwgUENJX0RFVklDRV9JRF9WTVdBUkVfVk1YTkVUMyl9LAogCXswfQogfTsKQEAgLTE2NjgsMjIgKzE2NjgsMTkgQEAKIHZteG5ldDNfY29weV9tYyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXU4ICpidWYgPSBOVUxMOwotCXUzMiBzeiA9IG5ldGRldi0+bWNfY291bnQgKiBFVEhfQUxFTjsKKwl1MzIgc3ogPSBuZXRkZXZfbWNfY291bnQobmV0ZGV2KSAqIEVUSF9BTEVOOwogCiAJLyogc3RydWN0IFZteG5ldDNfUnhGaWx0ZXJDb25mLm1mVGFibGVMZW4gaXMgdTE2LiAqLwogCWlmIChzeiA8PSAweGZmZmYpIHsKIAkJLyogV2UgbWF5IGJlIGNhbGxlZCB3aXRoIEJIIGRpc2FibGVkICovCiAJCWJ1ZiA9IGttYWxsb2Moc3osIEdGUF9BVE9NSUMpOwogCQlpZiAoYnVmKSB7Ci0JCQlpbnQgaTsKLQkJCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWMgPSBuZXRkZXYtPm1jX2xpc3Q7CisJCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jOworCQkJaW50IGkgPSAwOwogCi0JCQlmb3IgKGkgPSAwOyBpIDwgbmV0ZGV2LT5tY19jb3VudDsgaSsrKSB7Ci0JCQkJQlVHX09OKCFtYyk7Ci0JCQkJbWVtY3B5KGJ1ZiArIGkgKiBFVEhfQUxFTiwgbWMtPmRtaV9hZGRyLAorCQkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWMsIG5ldGRldikKKwkJCQltZW1jcHkoYnVmICsgaSsrICogRVRIX0FMRU4sIG1jLT5kbWlfYWRkciwKIAkJCQkgICAgICAgRVRIX0FMRU4pOwotCQkJCW1jID0gbWMtPm5leHQ7Ci0JCQl9CiAJCX0KIAl9CiAJcmV0dXJuIGJ1ZjsKQEAgLTE3MDgsMTIgKzE3MDUsMTIgQEAKIAlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkKIAkJbmV3X21vZGUgfD0gVk1YTkVUM19SWE1fQUxMX01VTFRJOwogCWVsc2UKLQkJaWYgKG5ldGRldi0+bWNfY291bnQgPiAwKSB7CisJCWlmICghbmV0ZGV2X21jX2VtcHR5KG5ldGRldikpIHsKIAkJCW5ld190YWJsZSA9IHZteG5ldDNfY29weV9tYyhuZXRkZXYpOwogCQkJaWYgKG5ld190YWJsZSkgewogCQkJCW5ld19tb2RlIHw9IFZNWE5FVDNfUlhNX01DQVNUOwogCQkJCXJ4Q29uZi0+bWZUYWJsZUxlbiA9IGNwdV90b19sZTE2KAotCQkJCQkJbmV0ZGV2LT5tY19jb3VudCAqIEVUSF9BTEVOKTsKKwkJCQkJbmV0ZGV2X21jX2NvdW50KG5ldGRldikgKiBFVEhfQUxFTik7CiAJCQkJcnhDb25mLT5tZlRhYmxlUEEgPSBjcHVfdG9fbGU2NCh2aXJ0X3RvX3BoeXMoCiAJCQkJCQkgICAgbmV3X3RhYmxlKSk7CiAJCQl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYyBiL2RyaXZlcnMvbmV0L3Z4Z2UvdnhnZS1tYWluLmMKaW5kZXggYjk2ODVlOC4uNDZhN2M5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdnhnZS92eGdlLW1haW4uYworKysgYi9kcml2ZXJzL25ldC92eGdlL3Z4Z2UtbWFpbi5jCkBAIC01NCw3ICs1NCw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIk5ldGVyaW9uJ3MgWDMxMDAgU2VyaWVzIDEwR2JFIFBDSWUgSS9PIgogCSJWaXJ0dWFsaXplZCBTZXJ2ZXIgQWRhcHRlciIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdnhnZV9pZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUodnhnZV9pZF90YWJsZSkgPSB7CiAJe1BDSV9WRU5ET1JfSURfUzJJTywgUENJX0RFVklDRV9JRF9USVRBTl9XSU4sIFBDSV9BTllfSUQsCiAJUENJX0FOWV9JRH0sCiAJe1BDSV9WRU5ET1JfSURfUzJJTywgUENJX0RFVklDRV9JRF9USVRBTl9VTkksIFBDSV9BTllfSUQsCkBAIC0xMTc4LDExICsxMTc4LDExIEBACiAKIAltZW1zZXQoJm1hY19pbmZvLCAwLCBzaXplb2Yoc3RydWN0IG1hY0luZm8pKTsKIAkvKiBVcGRhdGUgaW5kaXZpZHVhbCBNX0NBU1QgYWRkcmVzcyBsaXN0ICovCi0JaWYgKCghdmRldi0+YWxsX211bHRpX2ZsZykgJiYgZGV2LT5tY19jb3VudCkgeworCWlmICgoIXZkZXYtPmFsbF9tdWx0aV9mbGcpICYmIG5ldGRldl9tY19jb3VudChkZXYpKSB7CiAKIAkJbWNhc3RfY250ID0gdmRldi0+dnBhdGhzWzBdLm1jYXN0X2FkZHJfY250OwogCQlsaXN0X2hlYWQgPSAmdmRldi0+dnBhdGhzWzBdLm1hY19hZGRyX2xpc3Q7Ci0JCWlmICgoZGV2LT5tY19jb3VudCArCisJCWlmICgobmV0ZGV2X21jX2NvdW50KGRldikgKwogCQkJKHZkZXYtPnZwYXRoc1swXS5tYWNfYWRkcl9jbnQgLSBtY2FzdF9jbnQpKSA+CiAJCQkJdmRldi0+dnBhdGhzWzBdLm1heF9tYWNfYWRkcl9jbnQpCiAJCQlnb3RvIF9zZXRfYWxsX21jYXN0OwpAQCAtMTIxNyw5ICsxMjE3LDcgQEAKIAkJfQogCiAJCS8qIEFkZCBuZXcgb25lcyAqLwotCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IGkgPCBkZXYtPm1jX2NvdW50OwotCQkJaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKLQorCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQkJbWVtY3B5KG1hY19pbmZvLm1hY2FkZHIsIG1jbGlzdC0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKIAkJCWZvciAodnBhdGhfaWR4ID0gMDsgdnBhdGhfaWR4IDwgdmRldi0+bm9fb2ZfdnBhdGg7CiAJCQkJCXZwYXRoX2lkeCsrKSB7CkBAIC00Mjk3LDEwICs0Mjk1LDggQEAKIAl2eGdlX2RlYnVnX2luaXQoVlhHRV9UUkFDRSwgIiVzOiBOZXRlcmlvbiAlcyBTZXJ2ZXIgQWRhcHRlciIsCiAJCXZkZXYtPm5kZXYtPm5hbWUsIGxsX2NvbmZpZy5kZXZpY2VfaHdfaW5mby5wcm9kdWN0X2Rlc2MpOwogCi0JdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsCi0JCSIlczogTUFDIEFERFI6ICUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWDolMDJYIiwKLQkJdmRldi0+bmRldi0+bmFtZSwgbWFjYWRkclswXSwgbWFjYWRkclsxXSwgbWFjYWRkclsyXSwKLQkJbWFjYWRkclszXSwgbWFjYWRkcls0XSwgbWFjYWRkcls1XSk7CisJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsICIlczogTUFDIEFERFI6ICVwTSIsCisJCXZkZXYtPm5kZXYtPm5hbWUsIG1hY2FkZHIpOwogCiAJdnhnZV9kZWJ1Z19pbml0KFZYR0VfVFJBQ0UsICIlczogTGluayBXaWR0aCB4JWQiLAogCQl2ZGV2LT5uZGV2LT5uYW1lLCB2eGdlX2h3X2RldmljZV9saW5rX3dpZHRoX2dldChobGRldikpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYyBiL2RyaXZlcnMvbmV0L3dhbi9jb3NhLmMKaW5kZXggYjM2YmY5Ni4uZjBiZDcwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2Nvc2EuYworKysgYi9kcml2ZXJzL25ldC93YW4vY29zYS5jCkBAIC04MTEsNyArODExLDcgQEAKIAljb3NhX2VuYWJsZV9yeChjaGFuKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY29zYS0+bG9jaywgZmxhZ3MpOwogCWFkZF93YWl0X3F1ZXVlKCZjaGFuLT5yeHdhaXRxLCAmd2FpdCk7Ci0Jd2hpbGUoIWNoYW4tPnJ4X3N0YXR1cykgeworCXdoaWxlICghY2hhbi0+cnhfc3RhdHVzKSB7CiAJCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb3NhLT5sb2NrLCBmbGFncyk7CiAJCXNjaGVkdWxlKCk7CkBAIC04OTYsNyArODk2LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjb3NhLT5sb2NrLCBmbGFncyk7CiAJYWRkX3dhaXRfcXVldWUoJmNoYW4tPnR4d2FpdHEsICZ3YWl0KTsKLQl3aGlsZSghY2hhbi0+dHhfc3RhdHVzKSB7CisJd2hpbGUgKCFjaGFuLT50eF9zdGF0dXMpIHsKIAkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvc2EtPmxvY2ssIGZsYWdzKTsKIAkJc2NoZWR1bGUoKTsKQEAgLTExNTMsNyArMTE1Myw3IEBACiAJc3RydWN0IGNoYW5uZWxfZGF0YSAqY2hhbm5lbCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7Ci0Jc3dpdGNoKGNtZCkgeworCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBDT1NBSU9SU0VUOgkvKiBSZXNldCB0aGUgZGV2aWNlICovCiAJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKIAkJCXJldHVybiAtRUFDQ0VTOwpAQCAtMTcwNCw3ICsxNzA0LDcgQEAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvc2EtPmxvY2ssIGZsYWdzKTsKIAkJCXJldHVybjsKIAkJfQotCQl3aGlsZSgxKSB7CisJCXdoaWxlICgxKSB7CiAJCQljb3NhLT50eGNoYW4rKzsKIAkJCWkrKzsKIAkJCWlmIChjb3NhLT50eGNoYW4gPj0gY29zYS0+bmNoYW5uZWxzKQpAQCAtMjAxMCw3ICsyMDEwLDcgQEAKIHN0YXRpYyB2b2lkIGRlYnVnX3N0YXR1c19pbihzdHJ1Y3QgY29zYV9kYXRhICpjb3NhLCBpbnQgc3RhdHVzKQogewogCWNoYXIgKnM7Ci0Jc3dpdGNoKHN0YXR1cyAmIFNSX0NNRF9GUk9NX1NSUF9NQVNLKSB7CisJc3dpdGNoIChzdGF0dXMgJiBTUl9DTURfRlJPTV9TUlBfTUFTSykgewogCWNhc2UgU1JfVVBfUkVRVUVTVDoKIAkJcyA9ICJSWF9SRVEiOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9kc2NjNC5jIGIvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKaW5kZXggM2Y3NTlkYS4uZjg4YzA3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2RzY2M0LmMKQEAgLTIwNTAsNyArMjA1MCw3IEBACiBfX3NldHVwKCJkc2NjNC5zZXR1cD0iLCBkc2NjNF9zZXR1cCk7CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGRzY2M0X3BjaV90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShkc2NjNF9wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfU0lFTUVOUywgUENJX0RFVklDRV9JRF9TSUVNRU5TX0RTQ0M0LAogCSAgICAgICAgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgfSwKIAl7IDAsfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYyBiL2RyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMKaW5kZXggOWJjMmUzNi4uNDBkNzI0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYworKysgYi9kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jCkBAIC01MjgsNyArNTI4LDcgQEAKIC8qCiAgKiAgICAgIFBDSSBJRCBsb29rdXAgdGFibGUKICAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGZzdF9wY2lfZGV2X2lkW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShmc3RfcGNpX2Rldl9pZCkgPSB7CiAJe1BDSV9WRU5ET1JfSURfRkFSU0lURSwgUENJX0RFVklDRV9JRF9GQVJTSVRFX1QyUCwgUENJX0FOWV9JRCwgCiAJIFBDSV9BTllfSUQsIDAsIDAsIEZTVF9UWVBFX1QyUH0sCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY19jaXNjby5jCmluZGV4IGYxYmZmOTguLjFjZWNjZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfY2lzY28uYwpAQCAtMTQxLDcgKzE0MSw3IEBACiAJICAgIGRhdGEtPmFkZHJlc3MgIT0gQ0lTQ09fVU5JQ0FTVCkKIAkJcmV0dXJuIGNwdV90b19iZTE2KEVUSF9QX0hETEMpOwogCi0Jc3dpdGNoKGRhdGEtPnByb3RvY29sKSB7CisJc3dpdGNoIChkYXRhLT5wcm90b2NvbCkgewogCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVApOgogCWNhc2UgY3B1X3RvX2JlMTYoRVRIX1BfSVBYKToKIAljYXNlIGNwdV90b19iZTE2KEVUSF9QX0lQVjYpOgpAQCAtMTkwLDcgKzE5MCw3IEBACiAJCWNpc2NvX2RhdGEgPSAoc3RydWN0IGNpc2NvX3BhY2tldCopKHNrYi0+ZGF0YSArIHNpemVvZgogCQkJCQkJICAgIChzdHJ1Y3QgaGRsY19oZWFkZXIpKTsKIAotCQlzd2l0Y2gobnRvaGwgKGNpc2NvX2RhdGEtPnR5cGUpKSB7CisJCXN3aXRjaCAobnRvaGwgKGNpc2NvX2RhdGEtPnR5cGUpKSB7CiAJCWNhc2UgQ0lTQ09fQUREUl9SRVE6IC8qIFN0b2xlbiBmcm9tIHN5bmNwcHAuYyA6LSkgKi8KIAkJCWluX2RldiA9IGRldi0+aXBfcHRyOwogCQkJYWRkciA9IDA7CkBAIC0yNDUsOCArMjQ1LDggQEAKIAogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKLQkJfSAvKiBzd2l0Y2goa2VlcGFsaXZlIHR5cGUpICovCi0JfSAvKiBzd2l0Y2gocHJvdG9jb2wpICovCisJCX0gLyogc3dpdGNoIChrZWVwYWxpdmUgdHlwZSkgKi8KKwl9IC8qIHN3aXRjaCAocHJvdG9jb2wpICovCiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJXhcbiIsIGRldi0+bmFtZSwKIAkgICAgICAgbnRvaHMoZGF0YS0+cHJvdG9jb2wpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3gyNS5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfeDI1LmMKaW5kZXggYWE5MjQ4Zi4uNmUxY2EyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfeDI1LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfeDI1LmMKQEAgLTIwMiwxMCArMjAyLDEwIEBACiAJCXJldHVybiAwOyAvKiByZXR1cm4gcHJvdG9jb2wgb25seSwgbm8gc2V0dGFibGUgcGFyYW1ldGVycyAqLwogCiAJY2FzZSBJRl9QUk9UT19YMjU6Ci0JCWlmKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCiAJCQlyZXR1cm4gLUVQRVJNOwogCi0JCWlmKGRldi0+ZmxhZ3MgJiBJRkZfVVApCisJCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKQogCQkJcmV0dXJuIC1FQlVTWTsKIAogCQlyZXN1bHQ9aGRsYy0+YXR0YWNoKGRldiwgRU5DT0RJTkdfTlJaLFBBUklUWV9DUkMxNl9QUjFfQ0NJVFQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2FuL2xtYy9sbWNfbWFpbi5jCmluZGV4IDRiNmYyN2UuLmIyNzg1MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9sbWMvbG1jX21haW4uYworKysgYi9kcml2ZXJzL25ldC93YW4vbG1jL2xtY19tYWluLmMKQEAgLTc3LDcgKzc3LDcgQEAKIAogc3RhdGljIGludCBMTUNfUEtUX0JVRl9TWiA9IDE1NDI7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBsbWNfcGNpX3RibFtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGxtY19wY2lfdGJsKSA9IHsKIAl7IFBDSV9WRU5ET1JfSURfREVDLCBQQ0lfREVWSUNFX0lEX0RFQ19UVUxJUF9GQVNULAogCSAgUENJX1ZFTkRPUl9JRF9MTUMsIFBDSV9BTllfSUQgfSwKIAl7IFBDSV9WRU5ET1JfSURfREVDLCBQQ0lfREVWSUNFX0lEX0RFQ19UVUxJUF9GQVNULApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3BjMzAwX2Rydi5jIGIvZHJpdmVycy9uZXQvd2FuL3BjMzAwX2Rydi5jCmluZGV4IGFlYzRkMzkuLmY0ZjFjMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF9kcnYuYworKysgYi9kcml2ZXJzL25ldC93YW4vcGMzMDBfZHJ2LmMKQEAgLTI1MSw3ICsyNTEsNyBAQAogI3VuZGVmCVBDMzAwX0RFQlVHX1JYCiAjdW5kZWYJUEMzMDBfREVCVUdfT1RIRVIKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNwY19wY2lfZGV2X2lkW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShjcGNfcGNpX2Rldl9pZCkgPSB7CiAJLyogUEMzMDAvUlNWIG9yIFBDMzAwL1gyMSwgMiBjaGFuICovCiAJezB4MTIwZSwgMHgzMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB4MzAwfSwKIAkvKiBQQzMwMC9SU1Ygb3IgUEMzMDAvWDIxLCAxIGNoYW4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jIGIvZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmMKaW5kZXggNjBlY2U1NC4uYzdhYjNiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmMKQEAgLTQ4MSw3ICs0ODEsNyBAQAogCiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjMzAwX3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHBjMzAwX3BjaV90YmwpID0gewogCXsgUENJX1ZFTkRPUl9JRF9DWUNMQURFUywgUENJX0RFVklDRV9JRF9QQzMwMF9SWF8xLCBQQ0lfQU5ZX0lELAogCSAgUENJX0FOWV9JRCwgMCwgMCwgMCB9LAogCXsgUENJX1ZFTkRPUl9JRF9DWUNMQURFUywgUENJX0RFVklDRV9JRF9QQzMwMF9SWF8yLCBQQ0lfQU5ZX0lELApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jIGIvZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jCmluZGV4IGYxMzQwZmEuLmUyY2ZmNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYworKysgYi9kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMKQEAgLTQxNyw3ICs0MTcsNyBAQAogCiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaTIwMF9wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwY2kyMDBfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1BMWCwgUENJX0RFVklDRV9JRF9QTFhfOTA1MCwgUENJX1ZFTkRPUl9JRF9QTFgsCiAJICBQQ0lfREVWSUNFX0lEX1BMWF9QQ0kyMDBTWU4sIDAsIDAsIDAgfSwKIAl7IDAsIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi93YW54bC5jIGIvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMKaW5kZXggZGFlZThhMC4uNTQxYzcwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMKQEAgLTgxNCw3ICs4MTQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgd2FueGxfcGNpX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUod2FueGxfcGNpX3RibCkgPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1NCRSwgUENJX0RFVklDRV9JRF9TQkVfV0FOWEwxMDAsIFBDSV9BTllfSUQsCiAJICBQQ0lfQU5ZX0lELCAwLCAwLCAwIH0sCiAJeyBQQ0lfVkVORE9SX0lEX1NCRSwgUENJX0RFVklDRV9JRF9TQkVfV0FOWEwyMDAsIFBDSV9BTllfSUQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZHJpdmVyLmMKaW5kZXggOTZhNjE1Zi4uNmNlYWQzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9kcml2ZXIuYwpAQCAtMzAxLDI0ICszMDEsMTUgQEAKIAkvKiBFeHRyYWN0IE1BQyBhZGRyZXNzcyAqLwogCWRkaSA9ICh2b2lkICopIHNrYi0+ZGF0YTsKIAlCVUlMRF9CVUdfT04oRVRIX0FMRU4gIT0gc2l6ZW9mKGRkaS0+bWFjX2FkZHJlc3MpKTsKLQlkX3ByaW50ZigyLCBkZXYsICJHRVQgREVWSUNFIElORk86IG1hYyBhZGRyICIKLQkJICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJIGRkaS0+bWFjX2FkZHJlc3NbMF0sIGRkaS0+bWFjX2FkZHJlc3NbMV0sCi0JCSBkZGktPm1hY19hZGRyZXNzWzJdLCBkZGktPm1hY19hZGRyZXNzWzNdLAotCQkgZGRpLT5tYWNfYWRkcmVzc1s0XSwgZGRpLT5tYWNfYWRkcmVzc1s1XSk7CisJZF9wcmludGYoMiwgZGV2LCAiR0VUIERFVklDRSBJTkZPOiBtYWMgYWRkciAlcE1cbiIsCisJCSBkZGktPm1hY19hZGRyZXNzKTsKIAlpZiAoIW1lbWNtcChuZXRfZGV2LT5wZXJtX2FkZHIsIGRkaS0+bWFjX2FkZHJlc3MsCiAJCSAgIHNpemVvZihkZGktPm1hY19hZGRyZXNzKSkpCiAJCWdvdG8gb2s7CiAJZGV2X3dhcm4oZGV2LCAid2FybmluZzogZGV2aWNlIHJlcG9ydHMgYSBkaWZmZXJlbnQgTUFDIGFkZHJlc3MgIgogCQkgInRvIHRoYXQgb2YgYm9vdCBtb2RlJ3NcbiIpOwotCWRldl93YXJuKGRldiwgImRldmljZSByZXBvcnRzICAgICAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLQkJIGRkaS0+bWFjX2FkZHJlc3NbMF0sIGRkaS0+bWFjX2FkZHJlc3NbMV0sCi0JCSBkZGktPm1hY19hZGRyZXNzWzJdLCBkZGktPm1hY19hZGRyZXNzWzNdLAotCQkgZGRpLT5tYWNfYWRkcmVzc1s0XSwgZGRpLT5tYWNfYWRkcmVzc1s1XSk7Ci0JZGV2X3dhcm4oZGV2LCAiYm9vdCBtb2RlIHJlcG9ydGVkICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAotCQkgbmV0X2Rldi0+cGVybV9hZGRyWzBdLCBuZXRfZGV2LT5wZXJtX2FkZHJbMV0sCi0JCSBuZXRfZGV2LT5wZXJtX2FkZHJbMl0sIG5ldF9kZXYtPnBlcm1fYWRkclszXSwKLQkJIG5ldF9kZXYtPnBlcm1fYWRkcls0XSwgbmV0X2Rldi0+cGVybV9hZGRyWzVdKTsKKwlkZXZfd2FybihkZXYsICJkZXZpY2UgcmVwb3J0cyAgICAgJXBNXG4iLCBkZGktPm1hY19hZGRyZXNzKTsKKwlkZXZfd2FybihkZXYsICJib290IG1vZGUgcmVwb3J0ZWQgJXBNXG4iLCBuZXRfZGV2LT5wZXJtX2FkZHIpOwogCWlmICghbWVtY21wKHplcm9tYWMsIGRkaS0+bWFjX2FkZHJlc3MsIHNpemVvZih6ZXJvbWFjKSkpCiAJCWRldl9lcnIoZGV2LCAiZGV2aWNlIHJlcG9ydHMgYW4gaW52YWxpZCBNQUMgYWRkcmVzcywgIgogCQkJIm5vdCB1cGRhdGluZ1xuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vZncuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jCmluZGV4IDY0Y2RmZWIuLjI1YzI0ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9mdy5jCkBAIC02MTIsNyArNjEyLDcgQEAKIAkJZ290byBlcnJvcl93YWl0X2Zvcl9hY2s7CiAJfQogCXJ4X2J5dGVzID0gcmVzdWx0OwotCS8qIHZlcmlmeSB0aGUgYWNrIGFuZCByZWFkIG1vcmUgaWYgbmVjY2Vzc2FyeSBbcmVzdWx0IGlzIHRoZQorCS8qIHZlcmlmeSB0aGUgYWNrIGFuZCByZWFkIG1vcmUgaWYgbmVjZXNzYXJ5IFtyZXN1bHQgaXMgdGhlCiAJICogZmluYWwgYW1vdW50IG9mIGJ5dGVzIHdlIGdldCBpbiB0aGUgYWNrXSAgKi8KIAlyZXN1bHQgPSBfX2kyNDAwbV9ibV9hY2tfdmVyaWZ5KGkyNDAwbSwgb3Bjb2RlLCBhY2ssIGFja19zaXplLCBmbGFncyk7CiAJaWYgKHJlc3VsdCA8IDApCkBAIC0xMDQxLDIxICsxMDQxLDE0IEBACiAJCWRldl9lcnIoZGV2LCAiQk06IHJlYWQgbWFjIGFkZHIgZmFpbGVkOiAlZFxuIiwgcmVzdWx0KTsKIAkJZ290byBlcnJvcl9yZWFkX21hYzsKIAl9Ci0JZF9wcmludGYoMiwgZGV2LAotCQkgIm1hYyBhZGRyIGlzICUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAotCQkgYWNrX2J1Zi5hY2tfcGxbMF0sIGFja19idWYuYWNrX3BsWzFdLAotCQkgYWNrX2J1Zi5hY2tfcGxbMl0sIGFja19idWYuYWNrX3BsWzNdLAotCQkgYWNrX2J1Zi5hY2tfcGxbNF0sIGFja19idWYuYWNrX3BsWzVdKTsKKwlkX3ByaW50ZigyLCBkZXYsICJtYWMgYWRkciBpcyAlcE1cbiIsIGFja19idWYuYWNrX3BsKTsKIAlpZiAoaTI0MDBtLT5idXNfYm1fbWFjX2FkZHJfaW1wYWlyZWQgPT0gMSkgewogCQlhY2tfYnVmLmFja19wbFswXSA9IDB4MDA7CiAJCWFja19idWYuYWNrX3BsWzFdID0gMHgxNjsKIAkJYWNrX2J1Zi5hY2tfcGxbMl0gPSAweGQzOwogCQlnZXRfcmFuZG9tX2J5dGVzKCZhY2tfYnVmLmFja19wbFszXSwgMyk7CiAJCWRldl9lcnIoZGV2LCAiQk0gaXMgTUFDIGFkZHIgaW1wYWlyZWQsIGZha2luZyBNQUMgYWRkciB0byAiCi0JCQkibWFjIGFkZHIgaXMgJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCi0JCQlhY2tfYnVmLmFja19wbFswXSwgYWNrX2J1Zi5hY2tfcGxbMV0sCi0JCQlhY2tfYnVmLmFja19wbFsyXSwgYWNrX2J1Zi5hY2tfcGxbM10sCi0JCQlhY2tfYnVmLmFja19wbFs0XSwgYWNrX2J1Zi5hY2tfcGxbNV0pOworCQkJIm1hYyBhZGRyIGlzICVwTVxuIiwgYWNrX2J1Zi5hY2tfcGwpOwogCQlyZXN1bHQgPSAwOwogCX0KIAluZXRfZGV2LT5hZGRyX2xlbiA9IEVUSF9BTEVOOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2kyNDAwbS5oIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL2kyNDAwbS5oCmluZGV4IDA0ZGY5YmIuLjgyMGIxMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9pMjQwMG0uaAorKysgYi9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vaTI0MDBtLmgKQEAgLTYyNyw3ICs2MjcsNyBAQAogICogQEkyNDAwTV9CUklfTk9fUkVCT09UOiBEbyBub3QgcmVib290IHRoZSBkZXZpY2UgYW5kIHByb2NlZWQKICAqICAgICBkaXJlY3RseSB0byB3YWl0IGZvciBhIHJlYm9vdCBiYXJrZXIgZnJvbSB0aGUgZGV2aWNlLgogICogQEkyNDAwTV9CUklfTUFDX1JFSU5JVDogV2UgbmVlZCB0byByZWluaXRpYWxpemUgdGhlIGJvb3QKLSAqICAgICByb20gYWZ0ZXIgcmVhZGluZyB0aGUgTUFDIGFkcmVzcy4gVGhpcyBpcyBxdWl0ZSBhIGRpcnR5IGhhY2ssCisgKiAgICAgcm9tIGFmdGVyIHJlYWRpbmcgdGhlIE1BQyBhZGRyZXNzLiBUaGlzIGlzIHF1aXRlIGEgZGlydHkgaGFjaywKICAqICAgICBpZiB5b3UgYXNrIG1lIC0tIHRoZSBkZXZpY2UgcmVxdWlyZXMgdGhlIGJvb3Ryb20gdG8gYmUKICAqICAgICBpbnRpYWxpemVkIGFmdGVyIHJlYWRpbmcgdGhlIE1BQyBhZGRyZXNzLgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc2Rpby5jIGIvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3NkaW8uYwppbmRleCA3NmE1MGFjLi4xNGY4NzZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aW1heC9pMjQwMG0vc2Rpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS9zZGlvLmMKQEAgLTMwNCw3ICszMDQsNyBAQAogICoKICAqIFRoZSBkZXZpY2Ugd2lsbCBiZSBmdWxseSByZXNldCBpbnRlcm5hbGx5LCBidXQgd29uJ3QgYmUKICAqIGRpc2Nvbm5lY3RlZCBmcm9tIHRoZSBidXMgKHNvIG5vIHJlZW51bWVyYXRpb24gd2lsbAotICogaGFwcGVuKS4gRmlybXdhcmUgdXBsb2FkIHdpbGwgYmUgbmVjY2Vzc2FyeS4KKyAqIGhhcHBlbikuIEZpcm13YXJlIHVwbG9hZCB3aWxsIGJlIG5lY2Vzc2FyeS4KICAqCiAgKiBUaGUgZGV2aWNlIHdpbGwgc2VuZCBhIHJlYm9vdCBiYXJrZXIgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIGRyaXZlcgogICogdG8gcmVpbml0aWFsaXplIHRoZSBzdGF0ZSB2aWEgX19pMjQwMG1fZGV2X3Jlc2V0X2hhbmRsZS4KQEAgLTMxNCw3ICszMTQsNyBAQAogICoKICAqIFRoZSBkZXZpY2Ugd2lsbCBiZSBmdWxseSByZXNldCBpbnRlcm5hbGx5LCBkaXNjb25uZWN0ZWQgZnJvbSB0aGUKICAqIGJ1cyBhbiBhIHJlZW51bWVyYXRpb24gd2lsbCBoYXBwZW4uIEZpcm13YXJlIHVwbG9hZCB3aWxsIGJlCi0gKiBuZWNjZXNzYXJ5LiBUaHVzLCB3ZSBkb24ndCBkbyBhbnkgbG9ja2luZyBvciBzdHJ1Y3QKKyAqIG5lY2Vzc2FyeS4gVGh1cywgd2UgZG9uJ3QgZG8gYW55IGxvY2tpbmcgb3Igc3RydWN0CiAgKiByZWluaXRpYWxpemF0aW9uLCBhcyB3ZSBhcmUgZ29pbmcgdG8gYmUgZnVsbHkgZGlzY29ubmVjdGVkIGFuZAogICogcmVlbnVtZXJhdGVkLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2IuYyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2IuYwppbmRleCA5OGY0ZjhjNS4uOTlmMDRjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2ltYXgvaTI0MDBtL3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpbWF4L2kyNDAwbS91c2IuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAgKgogICogVGhlIGRldmljZSB3aWxsIGJlIGZ1bGx5IHJlc2V0IGludGVybmFsbHksIGJ1dCB3b24ndCBiZQogICogZGlzY29ubmVjdGVkIGZyb20gdGhlIFVTQiBidXMgKHNvIG5vIHJlZW51bWVyYXRpb24gd2lsbAotICogaGFwcGVuKS4gRmlybXdhcmUgdXBsb2FkIHdpbGwgYmUgbmVjY2Vzc2FyeS4KKyAqIGhhcHBlbikuIEZpcm13YXJlIHVwbG9hZCB3aWxsIGJlIG5lY2Vzc2FyeS4KICAqCiAgKiBUaGUgZGV2aWNlIHdpbGwgc2VuZCBhIHJlYm9vdCBiYXJrZXIgaW4gdGhlIG5vdGlmaWNhdGlvbiBlbmRwb2ludAogICogdGhhdCB3aWxsIHRyaWdnZXIgdGhlIGRyaXZlciB0byByZWluaXRpYWxpemUgdGhlIHN0YXRlCkBAIC0yNTcsNyArMjU3LDcgQEAKICAqCiAgKiBUaGUgZGV2aWNlIHdpbGwgYmUgZnVsbHkgcmVzZXQgaW50ZXJuYWxseSwgZGlzY29ubmVjdGVkIGZyb20gdGhlCiAgKiBVU0IgYnVzIGFuIGEgcmVlbnVtZXJhdGlvbiB3aWxsIGhhcHBlbi4gRmlybXdhcmUgdXBsb2FkIHdpbGwgYmUKLSAqIG5lY2Nlc3NhcnkuIFRodXMsIHdlIGRvbid0IGRvIGFueSBsb2NraW5nIG9yIHN0cnVjdAorICogbmVjZXNzYXJ5LiBUaHVzLCB3ZSBkb24ndCBkbyBhbnkgbG9ja2luZyBvciBzdHJ1Y3QKICAqIHJlaW5pdGlhbGl6YXRpb24sIGFzIHdlIGFyZSBnb2luZyB0byBiZSBmdWxseSBkaXNjb25uZWN0ZWQgYW5kCiAgKiByZWVudW1lcmF0ZWQuCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL0tjb25maWcKaW5kZXggNTZkZDY2NS4uNTg4OTQzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9LY29uZmlnCkBAIC0xMTIsNiArMTEyLDcgQEAKIAlkZXBlbmRzIG9uIFBDTUNJQSAmJiAoQlJPS0VOIHx8ICFNMzJSKQogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgV0VYVF9TUFkKKwlzZWxlY3QgV0VYVF9QUklWCiAJc2VsZWN0IENSWVBUTwogCXNlbGVjdCBDUllQVE9fQUVTCiAJLS0taGVscC0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5jCmluZGV4IDM5NDEwMDEuLjU0NzkxMmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hZG04MjExLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWRtODIxMS5jCkBAIC0zOSw3ICszOSw3IEBACiBtb2R1bGVfcGFyYW0odHhfcmluZ19zaXplLCB1aW50LCAwKTsKIG1vZHVsZV9wYXJhbShyeF9yaW5nX3NpemUsIHVpbnQsIDApOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgYWRtODIxMV9wY2lfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGFkbTgyMTFfcGNpX2lkX3RhYmxlKSA9IHsKIAkvKiBBRE10ZWsgQURNODIxMSAqLwogCXsgUENJX0RFVklDRSgweDEwQjcsIDB4NjAwMCkgfSwgLyogM0NvbSAzQ1JTSFBXNzk2ICovCiAJeyBQQ0lfREVWSUNFKDB4MTIwMCwgMHg4MjAxKSB9LCAvKiA/ICovCkBAIC0zMDIsMTggKzMwMiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWRtODIxMV9nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKQotewotCXN0cnVjdCBhZG04MjExX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7Ci0KLQlzdGF0c1swXS5sZW4gPSBwcml2LT5jdXJfdHggLSBwcml2LT5kaXJ0eV90eDsKLQlzdGF0c1swXS5saW1pdCA9IHByaXYtPnR4X3Jpbmdfc2l6ZSAtIDI7Ci0Jc3RhdHNbMF0uY291bnQgPSBwcml2LT5kaXJ0eV90eDsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBhZG04MjExX2ludGVycnVwdF90Y2koc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQogewogCXN0cnVjdCBhZG04MjExX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CkBAIC0xNDAwLDE1ICsxMzg4LDE1IEBACiB9CiAKIHN0YXRpYyBpbnQgYWRtODIxMV9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IGFkbTgyMTFfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAlpZiAocHJpdi0+bW9kZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJcHJpdi0+bW9kZSA9IGNvbmYtPnR5cGU7CisJCXByaXYtPm1vZGUgPSB2aWYtPnR5cGU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTE0MTYsOCArMTQwNCw4IEBACiAKIAlBRE04MjExX0lETEUoKTsKIAotCUFETTgyMTFfQ1NSX1dSSVRFKFBBUjAsIGxlMzJfdG9fY3B1KCooX19sZTMyICopY29uZi0+bWFjX2FkZHIpKTsKLQlBRE04MjExX0NTUl9XUklURShQQVIxLCBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKShjb25mLT5tYWNfYWRkciArIDQpKSk7CisJQURNODIxMV9DU1JfV1JJVEUoUEFSMCwgbGUzMl90b19jcHUoKihfX2xlMzIgKil2aWYtPmFkZHIpKTsKKwlBRE04MjExX0NTUl9XUklURShQQVIxLCBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSh2aWYtPmFkZHIgKyA0KSkpOwogCiAJYWRtODIxMV91cGRhdGVfbW9kZShkZXYpOwogCkBAIC0xNDI3LDcgKzE0MTUsNyBAQAogfQogCiBzdGF0aWMgdm9pZCBhZG04MjExX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBhZG04MjExX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAJcHJpdi0+bW9kZSA9IE5MODAyMTFfSUZUWVBFX01PTklUT1I7CkBAIC0xNzczLDcgKzE3NjEsNiBAQAogCS5wcmVwYXJlX211bHRpY2FzdAk9IGFkbTgyMTFfcHJlcGFyZV9tdWx0aWNhc3QsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSBhZG04MjExX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmdldF9zdGF0cwkJPSBhZG04MjExX2dldF9zdGF0cywKLQkuZ2V0X3R4X3N0YXRzCQk9IGFkbTgyMTFfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmCQk9IGFkbTgyMTFfZ2V0X3RzZnQKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwppbmRleCA0MzMxZDY3Li42OThkNTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCkBAIC01MSwxMyArNTEsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9mcmVlemVyLmg+CiAKICNpbmNsdWRlIDxsaW51eC9pZWVlODAyMTEuaD4KKyNpbmNsdWRlIDxuZXQvaXdfaGFuZGxlci5oPgogCiAjaW5jbHVkZSAiYWlyby5oIgogCiAjZGVmaW5lIERSVl9OQU1FICJhaXJvIgogCiAjaWZkZWYgQ09ORklHX1BDSQotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNhcmRfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY2FyZF9pZHMpID0gewogCXsgMHgxNGI5LCAxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAogCXsgMHgxNGI5LCAweDQ1MDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQgfSwKIAl7IDB4MTRiOSwgMHg0ODAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LApAQCAtMjMxMCw3ICsyMzExLDcgQEAKIAkJCWFpcm9fc2V0X3Byb21pc2MoYWkpOwogCX0KIAotCWlmICgoZGV2LT5mbGFncyZJRkZfQUxMTVVMVEkpfHxkZXYtPm1jX2NvdW50PjApIHsKKwlpZiAoKGRldi0+ZmxhZ3MmSUZGX0FMTE1VTFRJKSB8fCAhbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKIAkJLyogVHVybiBvbiBtdWx0aWNhc3QuICAoU2hvdWxkIGJlIGFscmVhZHkgc2V0dXAuLi4pICovCiAJfQogfQpAQCAtNTI1NCwxMSArNTI1NSw3IEBACiAJV2VwS2V5UmlkIHdrcjsKIAlpbnQgcmM7CiAKLQlpZiAoa2V5bGVuID09IDApIHsKLQkJYWlyb19wcmludF9lcnIoYWktPmRldi0+bmFtZSwgIiVzOiBrZXkgbGVuZ3RoIHRvIHNldCB3YXMgemVybyIsCi0JCQkgICAgICAgX19mdW5jX18pOwotCQlyZXR1cm4gLTE7Ci0JfQorCVdBUk5fT04oa2V5bGVuID09IDApOwogCiAJbWVtc2V0KCZ3a3IsIDAsIHNpemVvZih3a3IpKTsKIAl3a3IubGVuID0gY3B1X3RvX2xlMTYoc2l6ZW9mKHdrcikpOwpAQCAtNjQwNSwxMSArNjQwMiw3IEBACiAJCWlmIChkd3JxLT5sZW5ndGggPiBNSU5fS0VZX1NJWkUpCiAJCQlrZXkubGVuID0gTUFYX0tFWV9TSVpFOwogCQllbHNlCi0JCQlpZiAoZHdycS0+bGVuZ3RoID4gMCkKLQkJCQlrZXkubGVuID0gTUlOX0tFWV9TSVpFOwotCQkJZWxzZQotCQkJCS8qIERpc2FibGUgdGhlIGtleSAqLwotCQkJCWtleS5sZW4gPSAwOworCQkJa2V5LmxlbiA9IE1JTl9LRVlfU0laRTsKIAkJLyogQ2hlY2sgaWYgdGhlIGtleSBpcyBub3QgbWFya2VkIGFzIGludmFsaWQgKi8KIAkJaWYoIShkd3JxLT5mbGFncyAmIElXX0VOQ09ERV9OT0tFWSkpIHsKIAkJCS8qIENsZWFudXAgKi8KQEAgLTY1OTAsMTIgKzY1ODMsMjIgQEAKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCS8qIFNlbmQgdGhlIGtleSB0byB0aGUgY2FyZCAqLwotCQlyYyA9IHNldF93ZXBfa2V5KGxvY2FsLCBpZHgsIGtleS5rZXksIGtleS5sZW4sIHBlcm0sIDEpOwotCQlpZiAocmMgPCAwKSB7Ci0JCQlhaXJvX3ByaW50X2Vycihsb2NhbC0+ZGV2LT5uYW1lLCAiZmFpbGVkIHRvIHNldCBXRVAga2V5IgotCQkJICAgICAgICAgICAgICAgIiBhdCBpbmRleCAlZDogJWQuIiwgaWR4LCByYyk7Ci0JCQlyZXR1cm4gcmM7CisJCWlmIChrZXkubGVuID09IDApIHsKKwkJCXJjID0gc2V0X3dlcF90eF9pZHgobG9jYWwsIGlkeCwgcGVybSwgMSk7CisJCQlpZiAocmMgPCAwKSB7CisJCQkJYWlyb19wcmludF9lcnIobG9jYWwtPmRldi0+bmFtZSwKKwkJCQkJICAgICAgICJmYWlsZWQgdG8gc2V0IFdFUCB0cmFuc21pdCBpbmRleCB0byAlZDogJWQuIiwKKwkJCQkJICAgICAgIGlkeCwgcmMpOworCQkJCXJldHVybiByYzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJjID0gc2V0X3dlcF9rZXkobG9jYWwsIGlkeCwga2V5LmtleSwga2V5LmxlbiwgcGVybSwgMSk7CisJCQlpZiAocmMgPCAwKSB7CisJCQkJYWlyb19wcmludF9lcnIobG9jYWwtPmRldi0+bmFtZSwKKwkJCQkJICAgICAgICJmYWlsZWQgdG8gc2V0IFdFUCBrZXkgYXQgaW5kZXggJWQ6ICVkLiIsCisJCQkJCSAgICAgICBpZHgsIHJjKTsKKwkJCQlyZXR1cm4gcmM7CisJCQl9CiAJCX0KIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0NzZjNTB4LXVzYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXQ3NmM1MHgtdXNiLmMKaW5kZXggMjUxNzM2NC4uMGZiNDE5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXQ3NmM1MHgtdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXQ3NmM1MHgtdXNiLmMKQEAgLTE3ODksNyArMTc4OSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgYXQ3Nl9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBhdDc2X3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlpbnQgcmV0ID0gMDsKQEAgLTE3OTgsNyArMTc5OCw3IEBACiAKIAltdXRleF9sb2NrKCZwcml2LT5tdHgpOwogCi0Jc3dpdGNoIChjb25mLT50eXBlKSB7CisJc3dpdGNoICh2aWYtPnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCXByaXYtPml3X21vZGUgPSBJV19NT0RFX0lORlJBOwogCQlicmVhazsKQEAgLTE4MTQsNyArMTgxNCw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGF0NzZfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlhdDc2X2RiZyhEQkdfTUFDODAyMTEsICIlcygpIiwgX19mdW5jX18pOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9hcjkxNzAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvYXI5MTcwLmgKaW5kZXggOWY5NDU5OC4uOGM4Y2U2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9hcjkxNzAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2FyOTE3MC5oCkBAIC0xMDksNyArMTA5LDYgQEAKIAlib29sIGhhc19wbGNwOwogfTsKIAotI2RlZmluZSBBUjkxNzBfTlVNX01BWF9CQV9SRVRSWQk1CiAjZGVmaW5lIEFSOTE3MF9OVU1fVElECTE2CiAjZGVmaW5lIFdNRV9CQV9CTVBfU0laRSAgICAgICAgIDY0CiAjZGVmaW5lIEFSOTE3MF9OVU1fTUFYX0FHR19MRU4JKDIgKiBXTUVfQkFfQk1QX1NJWkUpCkBAIC0xNDMsNyArMTQyLDEyIEBACiAJdTE2IHRpZDsKIAllbnVtIGFyOTE3MF90aWRfc3RhdGUgc3RhdGU7CiAJYm9vbCBhY3RpdmU7Ci0JdTggcmV0cnk7Cit9OworCitzdHJ1Y3QgYXI5MTcwX3R4X3F1ZXVlX3N0YXRzIHsKKwl1bnNpZ25lZCBpbnQgbGVuOworCXVuc2lnbmVkIGludCBsaW1pdDsKKwl1bnNpZ25lZCBpbnQgY291bnQ7CiB9OwogCiAjZGVmaW5lIEFSOTE3MF9RVUVVRV9USU1FT1VUCQk2NApAQCAtMTU0LDYgKzE1OCw4IEBACiAKICNkZWZpbmUgQVI5MTcwX05VTV9UWF9TVEFUVVMJCTEyOAogI2RlZmluZSBBUjkxNzBfTlVNX1RYX0FHR19NQVgJCTMwCisjZGVmaW5lIEFSOTE3MF9OVU1fVFhfTElNSVRfSEFSRCAgICAgICBBUjkxNzBfVFhRX0RFUFRICisjZGVmaW5lIEFSOTE3MF9OVU1fVFhfTElNSVRfU09GVCAgICAgICAoQVI5MTcwX1RYUV9ERVBUSCAtIDEwKQogCiBzdHJ1Y3QgYXI5MTcwIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKQEAgLTIxMSw3ICsyMTcsNyBAQAogCiAJLyogcW9zIHF1ZXVlIHNldHRpbmdzICovCiAJc3BpbmxvY2tfdCB0eF9zdGF0c19sb2NrOwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgdHhfc3RhdHNbNV07CisJc3RydWN0IGFyOTE3MF90eF9xdWV1ZV9zdGF0cyB0eF9zdGF0c1s1XTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyBlZGNmWzVdOwogCiAJc3BpbmxvY2tfdCBjbWRsb2NrOwpAQCAtMjQ4LDEzICsyNTQsOCBAQAogCXVuc2lnbmVkIGludCBhbXBkdV9tYXhfbGVuOwogfTsKIAotI2RlZmluZSBBUjkxNzBfVFhfRkxBR19XQUlUX0ZPUl9BQ0sJQklUKDApCi0jZGVmaW5lIEFSOTE3MF9UWF9GTEFHX05PX0FDSwkJQklUKDEpCi0jZGVmaW5lIEFSOTE3MF9UWF9GTEFHX0JMT0NLX0FDSwlCSVQoMikKLQogc3RydWN0IGFyOTE3MF90eF9pbmZvIHsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JdW5zaWduZWQgaW50IGZsYWdzOwogfTsKIAogI2RlZmluZSBJU19TVEFSVEVEKGEpCQkoKChzdHJ1Y3QgYXI5MTcwICopYSktPnN0YXRlID49IEFSOTE3MF9TVEFSVEVEKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9ody5oCmluZGV4IDcwMWRkYjcuLjBhMWQ0YzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL2h3LmgKQEAgLTI3Niw2ICsyNzYsNyBAQAogI2RlZmluZSBBUjkxNzBfVFhfTUFDX1JBVEVfUFJPQkUJCTB4ODAwMAogCiAvKiBlaXRoZXItb3IgKi8KKyNkZWZpbmUgQVI5MTcwX1RYX1BIWV9NT0RfTUFTSwkJCTB4MDAwMDAwMDMKICNkZWZpbmUgQVI5MTcwX1RYX1BIWV9NT0RfQ0NLCQkJMHgwMDAwMDAwMAogI2RlZmluZSBBUjkxNzBfVFhfUEhZX01PRF9PRkRNCQkJMHgwMDAwMDAwMQogI2RlZmluZSBBUjkxNzBfVFhfUEhZX01PRF9IVAkJCTB4MDAwMDAwMDIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21hYy5jCmluZGV4IGRkYzhjMDkuLjg1N2U4NjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbWFjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC9tYWMuYwpAQCAtMTE3LDcgKzExNyw3IEBACiAJYXI5MTcwX3JlZ3dyaXRlKEFSOTE3MF9NQUNfUkVHX0FDMV9BQzBfVFhPUCwKIAkJCWFyLT5lZGNmWzBdLnR4b3AgfCBhci0+ZWRjZlsxXS50eG9wIDw8IDE2KTsKIAlhcjkxNzBfcmVnd3JpdGUoQVI5MTcwX01BQ19SRUdfQUMzX0FDMl9UWE9QLAotCQkJYXItPmVkY2ZbMV0udHhvcCB8IGFyLT5lZGNmWzNdLnR4b3AgPDwgMTYpOworCQkJYXItPmVkY2ZbMl0udHhvcCB8IGFyLT5lZGNmWzNdLnR4b3AgPDwgMTYpOwogCiAJYXI5MTcwX3JlZ3dyaXRlX2ZpbmlzaCgpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbWFpbi5jCmluZGV4IGY5ZDZkYjguLjA4ZGM0MmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvbWFpbi5jCkBAIC0xOTQsMTIgKzE5NCwxNSBAQAogCXJldHVybiBhcjkxNzBfZ2V0X3NlcV9oKCh2b2lkICopIHR4Yy0+ZnJhbWVfZGF0YSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTE2IGFyOTE3MF9nZXRfdGlkX2goc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcikKK3sKKwlyZXR1cm4gKGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpKVswXSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOworfQorCiBzdGF0aWMgaW5saW5lIHUxNiBhcjkxNzBfZ2V0X3RpZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBhcjkxNzBfdHhfY29udHJvbCAqdHhjID0gKHZvaWQgKikgc2tiLT5kYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKSB0eGMtPmZyYW1lX2RhdGE7Ci0KLQlyZXR1cm4gKGllZWU4MDIxMV9nZXRfcW9zX2N0bChoZHIpKVswXSAmIElFRUU4MDIxMV9RT1NfQ1RMX1RJRF9NQVNLOworCXJldHVybiBhcjkxNzBfZ2V0X3RpZF9oKChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSB0eGMtPmZyYW1lX2RhdGEpOwogfQogCiAjZGVmaW5lIEdFVF9ORVhUX1NFUShzZXEpCSgoc2VxICsgMSkgJiAweDBmZmYpCkBAIC0yMTMsMTAgKzIxNiwxMCBAQAogCXN0cnVjdCBhcjkxNzBfdHhfaW5mbyAqYXJpbmZvID0gKHZvaWQgKikgdHhpbmZvLT5yYXRlX2RyaXZlcl9kYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAodm9pZCAqKSB0eGMtPmZyYW1lX2RhdGE7CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ID0+IEZSQU1FIFtza2I6JXAsIHE6JWQsIERBOlslcE1dIGZsYWdzOiV4IHM6JWQgIgorCXByaW50ayhLRVJOX0RFQlVHICIlczogPT4gRlJBTUUgW3NrYjolcCwgcTolZCwgREE6WyVwTV0gczolZCAiCiAJCQkgICJtYWNfY3RybDolMDR4LCBwaHlfY3RybDolMDh4LCB0aW1lb3V0OlslZCBtc11dXG4iLAogCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBza2IsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpLAotCSAgICAgICBpZWVlODAyMTFfZ2V0X0RBKGhkciksIGFyaW5mby0+ZmxhZ3MsIGFyOTE3MF9nZXRfc2VxX2goaGRyKSwKKwkgICAgICAgaWVlZTgwMjExX2dldF9EQShoZHIpLCBhcjkxNzBfZ2V0X3NlcV9oKGhkciksCiAJICAgICAgIGxlMTZfdG9fY3B1KHR4Yy0+bWFjX2NvbnRyb2wpLCBsZTMyX3RvX2NwdSh0eGMtPnBoeV9jb250cm9sKSwKIAkgICAgICAgamlmZmllc190b19tc2VjcyhhcmluZm8tPnRpbWVvdXQgLSBqaWZmaWVzKSk7CiB9CkBAIC0zOTEsNyArMzk0LDcgQEAKIAkJaWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGFyLT5odywgc2tiKTsKIAl9CiAKLQlmb3JfZWFjaF9iaXQoaSwgJnF1ZXVlX2JpdG1hcCwgQklUU19QRVJfQllURSkgeworCWZvcl9lYWNoX3NldF9iaXQoaSwgJnF1ZXVlX2JpdG1hcCwgQklUU19QRVJfQllURSkgewogI2lmZGVmIEFSOTE3MF9RVUVVRV9TVE9QX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogd2FrZSBxdWV1ZSAlZFxuIiwKIAkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSksIGkpOwpAQCAtNDMwLDcgKzQzMyw3IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CiAJYXItPnR4X3N0YXRzW3F1ZXVlXS5sZW4tLTsKIAotCWlmIChza2JfcXVldWVfZW1wdHkoJmFyLT50eF9wZW5kaW5nW3F1ZXVlXSkpIHsKKwlpZiAoYXItPnR4X3N0YXRzW3F1ZXVlXS5sZW4gPCBBUjkxNzBfTlVNX1RYX0xJTUlUX1NPRlQpIHsKICNpZmRlZiBBUjkxNzBfUVVFVUVfU1RPUF9ERUJVRwogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHdha2UgcXVldWUgJWRcbiIsCiAJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBxdWV1ZSk7CkBAIC00NDAsMjIgKzQ0MywxNyBAQAogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOwogCi0JaWYgKGFyaW5mby0+ZmxhZ3MgJiBBUjkxNzBfVFhfRkxBR19CTE9DS19BQ0spIHsKLQkJYXI5MTcwX3R4X2FtcGR1X2NhbGxiYWNrKGFyLCBza2IpOwotCX0gZWxzZSBpZiAoYXJpbmZvLT5mbGFncyAmIEFSOTE3MF9UWF9GTEFHX1dBSVRfRk9SX0FDSykgewotCQlhcmluZm8tPnRpbWVvdXQgPSBqaWZmaWVzICsKLQkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoQVI5MTcwX1RYX1RJTUVPVVQpOwotCi0JCXNrYl9xdWV1ZV90YWlsKCZhci0+dHhfc3RhdHVzW3F1ZXVlXSwgc2tiKTsKLQl9IGVsc2UgaWYgKGFyaW5mby0+ZmxhZ3MgJiBBUjkxNzBfVFhfRkxBR19OT19BQ0spIHsKKwlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgewogCQlhcjkxNzBfdHhfc3RhdHVzKGFyLCBza2IsIEFSOTE3MF9UWF9TVEFUVVNfRkFJTEVEKTsKIAl9IGVsc2UgewotI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVuc3VwcG9ydGVkIGZyYW1lIGZsYWdzIVxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoYXItPmh3LT53aXBoeSkpOwotCQlhcjkxNzBfcHJpbnRfdHhoZWFkZXIoYXIsIHNrYik7Ci0jZW5kaWYgLyogQVI5MTcwX1FVRVVFX0RFQlVHICovCi0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKKwkJCWFyOTE3MF90eF9hbXBkdV9jYWxsYmFjayhhciwgc2tiKTsKKwkJfSBlbHNlIHsKKwkJCWFyaW5mby0+dGltZW91dCA9IGppZmZpZXMgKworCQkJCSAgbXNlY3NfdG9famlmZmllcyhBUjkxNzBfVFhfVElNRU9VVCk7CisKKwkJCXNrYl9xdWV1ZV90YWlsKCZhci0+dHhfc3RhdHVzW3F1ZXVlXSwgc2tiKTsKKwkJfQogCX0KIAogCWlmICghYXItPnR4X3N0YXRzW3F1ZXVlXS5sZW4gJiYKQEAgLTE0MDcsMTcgKzE0MDUsNiBAQAogCiAJaWYgKCEoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgJiYKIAkgICAgIChpc192YWxpZF9ldGhlcl9hZGRyKGllZWU4MDIxMV9nZXRfREEoaGRyKSkpKSB7Ci0JCWlmIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfQU1QRFUpIHsKLQkJCWlmICh1bmxpa2VseSghaW5mby0+Y29udHJvbC5zdGEpKQotCQkJCWdvdG8gZXJyX291dDsKLQotCQkJdHhjLT5tYWNfY29udHJvbCB8PSBjcHVfdG9fbGUxNihBUjkxNzBfVFhfTUFDX0FHR1IpOwotCQkJYXJpbmZvLT5mbGFncyA9IEFSOTE3MF9UWF9GTEFHX0JMT0NLX0FDSzsKLQotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQl0eGMtPm1hY19jb250cm9sIHw9IGNwdV90b19sZTE2KEFSOTE3MF9UWF9NQUNfUkFURV9QUk9CRSk7CiAJCS8qCiAJCSAqIFdBUk5JTkc6CiAJCSAqIFB1dHRpbmcgdGhlIFFvUyBxdWV1ZSBiaXRzIGludG8gYW4gdW5leHBsb3JlZCB0ZXJyaXRvcnkgaXMKQEAgLTE0MzEsMTIgKzE0MTgsMTcgQEAKIAogCQl0eGMtPnBoeV9jb250cm9sIHw9CiAJCQljcHVfdG9fbGUzMihxdWV1ZSA8PCBBUjkxNzBfVFhfUEhZX1FPU19TSElGVCk7Ci0JCWFyaW5mby0+ZmxhZ3MgPSBBUjkxNzBfVFhfRkxBR19XQUlUX0ZPUl9BQ0s7Ci0JfSBlbHNlIHsKLQkJYXJpbmZvLT5mbGFncyA9IEFSOTE3MF9UWF9GTEFHX05PX0FDSzsKKworCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKSB7CisJCQlpZiAodW5saWtlbHkoIWluZm8tPmNvbnRyb2wuc3RhKSkKKwkJCQlnb3RvIGVycl9vdXQ7CisKKwkJCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19BR0dSKTsKKwkJfSBlbHNlIHsKKwkJCXR4Yy0+bWFjX2NvbnRyb2wgfD0gY3B1X3RvX2xlMTYoQVI5MTcwX1RYX01BQ19SQVRFX1BST0JFKTsKKwkJfQogCX0KIAotb3V0OgogCXJldHVybiAwOwogCiBlcnJfb3V0OgpAQCAtMTY3MSw4ICsxNjYzLDcgQEAKIAkJICogdGVsbCB0aGUgRlcvSFcgdGhhdCB0aGlzIGlzIHRoZSBsYXN0IGZyYW1lLAogCQkgKiB0aGF0IHdheSBpdCB3aWxsIHdhaXQgZm9yIHRoZSBpbW1lZGlhdGUgYmxvY2sgYWNrLgogCQkgKi8KLQkJaWYgKGxpa2VseShza2JfcGVla190YWlsKCZhZ2cpKSkKLQkJCWFyOTE3MF90eF9pbmRpY2F0ZV9pbW1iYShhciwgc2tiX3BlZWtfdGFpbCgmYWdnKSk7CisJCWFyOTE3MF90eF9pbmRpY2F0ZV9pbW1iYShhciwgc2tiX3BlZWtfdGFpbCgmYWdnKSk7CiAKICNpZmRlZiBBUjkxNzBfVFhBR0dfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBnZW5lcmF0ZWQgQS1NUERVIGxvb2tzIGxpa2UgdGhpczpcbiIsCkBAIC0xNzE2LDYgKzE3MDcsMjEgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBfX0FSOTE3MF9OVU1fVFhROyBpKyspIHsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7CisJCWZyYW1lcyA9IG1pbihhci0+dHhfc3RhdHNbaV0ubGltaXQgLSBhci0+dHhfc3RhdHNbaV0ubGVuLAorCQkJICAgICBza2JfcXVldWVfbGVuKCZhci0+dHhfcGVuZGluZ1tpXSkpOworCisJCWlmIChyZW1haW5pbmdfc3BhY2UgPCBmcmFtZXMpIHsKKyNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKKwkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdHggcXVvdGEgcmVhY2hlZCBxdWV1ZTolZCwgIgorCQkJICAgICAgICJyZW1haW5pbmcgc2xvdHM6JWQsIG5lZWRlZDolZFxuIiwKKwkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBpLCByZW1haW5pbmdfc3BhY2UsCisJCQkgICAgICAgZnJhbWVzKTsKKyNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KKwkJCWZyYW1lcyA9IHJlbWFpbmluZ19zcGFjZTsKKwkJfQorCisJCWFyLT50eF9zdGF0c1tpXS5sZW4gKz0gZnJhbWVzOworCQlhci0+dHhfc3RhdHNbaV0uY291bnQgKz0gZnJhbWVzOwogCQlpZiAoYXItPnR4X3N0YXRzW2ldLmxlbiA+PSBhci0+dHhfc3RhdHNbaV0ubGltaXQpIHsKICNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogcXVldWUgJWQgZnVsbFxuIiwKQEAgLTE3MzMsMjUgKzE3MzksOCBAQAogCQkJX19hcjkxNzBfZHVtcF90eHN0YXRzKGFyKTsKICNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfU1RPUF9ERUJVRyAqLwogCQkJaWVlZTgwMjExX3N0b3BfcXVldWUoYXItPmh3LCBpKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFyLT50eF9zdGF0c19sb2NrLCBmbGFncyk7Ci0JCQljb250aW51ZTsKIAkJfQogCi0JCWZyYW1lcyA9IG1pbihhci0+dHhfc3RhdHNbaV0ubGltaXQgLSBhci0+dHhfc3RhdHNbaV0ubGVuLAotCQkJICAgICBza2JfcXVldWVfbGVuKCZhci0+dHhfcGVuZGluZ1tpXSkpOwotCi0JCWlmIChyZW1haW5pbmdfc3BhY2UgPCBmcmFtZXMpIHsKLSNpZmRlZiBBUjkxNzBfUVVFVUVfREVCVUcKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdHggcXVvdGEgcmVhY2hlZCBxdWV1ZTolZCwgIgotCQkJICAgICAgICJyZW1haW5pbmcgc2xvdHM6JWQsIG5lZWRlZDolZFxuIiwKLQkJCSAgICAgICB3aXBoeV9uYW1lKGFyLT5ody0+d2lwaHkpLCBpLCByZW1haW5pbmdfc3BhY2UsCi0JCQkgICAgICAgZnJhbWVzKTsKLSNlbmRpZiAvKiBBUjkxNzBfUVVFVUVfREVCVUcgKi8KLQkJCWZyYW1lcyA9IHJlbWFpbmluZ19zcGFjZTsKLQkJfQotCi0JCWFyLT50eF9zdGF0c1tpXS5sZW4gKz0gZnJhbWVzOwotCQlhci0+dHhfc3RhdHNbaV0uY291bnQgKz0gZnJhbWVzOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhci0+dHhfc3RhdHNfbG9jaywgZmxhZ3MpOwogCiAJCWlmICghZnJhbWVzKQpAQCAtMTc3Myw3ICsxNzYyLDcgQEAKIAkJCWFyaW5mby0+dGltZW91dCA9IGppZmZpZXMgKwogCQkJCQkgIG1zZWNzX3RvX2ppZmZpZXMoQVI5MTcwX1RYX1RJTUVPVVQpOwogCi0JCQlpZiAoYXJpbmZvLT5mbGFncyA9PSBBUjkxNzBfVFhfRkxBR19CTE9DS19BQ0spCisJCQlpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKQogCQkJCWF0b21pY19pbmMoJmFyLT50eF9hbXBkdV9wZW5kaW5nKTsKIAogI2lmZGVmIEFSOTE3MF9RVUVVRV9ERUJVRwpAQCAtMTc4NCw3ICsxNzczLDcgQEAKIAogCQkJZXJyID0gYXItPnR4KGFyLCBza2IpOwogCQkJaWYgKHVubGlrZWx5KGVycikpIHsKLQkJCQlpZiAoYXJpbmZvLT5mbGFncyA9PSBBUjkxNzBfVFhfRkxBR19CTE9DS19BQ0spCisJCQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKIAkJCQkJYXRvbWljX2RlYygmYXItPnR4X2FtcGR1X3BlbmRpbmcpOwogCiAJCQkJZnJhbWVzX2ZhaWxlZCsrOwpAQCAtMTk1MCw3ICsxOTM5LDcgQEAKIH0KIAogc3RhdGljIGludCBhcjkxNzBfb3BfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7CiAJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9ICZhci0+Y29tbW9uOwpAQCAtMTk2Myw4ICsxOTUyLDggQEAKIAkJZ290byB1bmxvY2s7CiAJfQogCi0JYXItPnZpZiA9IGNvbmYtPnZpZjsKLQltZW1jcHkoY29tbW9uLT5tYWNhZGRyLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCWFyLT52aWYgPSB2aWY7CisJbWVtY3B5KGNvbW1vbi0+bWFjYWRkciwgdmlmLT5hZGRyLCBFVEhfQUxFTik7CiAKIAlpZiAobW9kcGFyYW1fbm9od2NyeXB0IHx8IChhci0+dmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKSB7CiAJCWFyLT5yeF9zb2Z0d2FyZV9kZWNyeXB0aW9uID0gdHJ1ZTsKQEAgLTE5ODQsNyArMTk3Myw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIGFyOTE3MF9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OwogCkBAIC0yMzQwLDU1ICsyMzI5LDU1IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgYXI5MTcwX3N0YV9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJICAgICAgZW51bSBzdGFfbm90aWZ5X2NtZCBjbWQsCi0JCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQorc3RhdGljIGludCBhcjkxNzBfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKIAlzdHJ1Y3QgYXI5MTcwICphciA9IGh3LT5wcml2OwogCXN0cnVjdCBhcjkxNzBfc3RhX2luZm8gKnN0YV9pbmZvID0gKHZvaWQgKikgc3RhLT5kcnZfcHJpdjsKIAl1bnNpZ25lZCBpbnQgaTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTVEFfTk9USUZZX0FERDoKLQkJbWVtc2V0KHN0YV9pbmZvLCAwLCBzaXplb2YoKnN0YV9pbmZvKSk7CisJbWVtc2V0KHN0YV9pbmZvLCAwLCBzaXplb2YoKnN0YV9pbmZvKSk7CiAKLQkJaWYgKCFzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCi0JCQlicmVhazsKKwlpZiAoIXN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkKKwkJcmV0dXJuIDA7CiAKLQkJaWYgKHN0YS0+aHRfY2FwLmFtcGR1X2RlbnNpdHkgPiBhci0+Z2xvYmFsX2FtcGR1X2RlbnNpdHkpCi0JCQlhci0+Z2xvYmFsX2FtcGR1X2RlbnNpdHkgPSBzdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5OworCWlmIChzdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5ID4gYXItPmdsb2JhbF9hbXBkdV9kZW5zaXR5KQorCQlhci0+Z2xvYmFsX2FtcGR1X2RlbnNpdHkgPSBzdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5OwogCi0JCWlmIChzdGEtPmh0X2NhcC5hbXBkdV9mYWN0b3IgPCBhci0+Z2xvYmFsX2FtcGR1X2ZhY3RvcikKLQkJCWFyLT5nbG9iYWxfYW1wZHVfZmFjdG9yID0gc3RhLT5odF9jYXAuYW1wZHVfZmFjdG9yOworCWlmIChzdGEtPmh0X2NhcC5hbXBkdV9mYWN0b3IgPCBhci0+Z2xvYmFsX2FtcGR1X2ZhY3RvcikKKwkJYXItPmdsb2JhbF9hbXBkdV9mYWN0b3IgPSBzdGEtPmh0X2NhcC5hbXBkdV9mYWN0b3I7CiAKLQkJZm9yIChpID0gMDsgaSA8IEFSOTE3MF9OVU1fVElEOyBpKyspIHsKLQkJCXN0YV9pbmZvLT5hZ2dbaV0uc3RhdGUgPSBBUjkxNzBfVElEX1NUQVRFX1NIVVRET1dOOwotCQkJc3RhX2luZm8tPmFnZ1tpXS5hY3RpdmUgPSBmYWxzZTsKLQkJCXN0YV9pbmZvLT5hZ2dbaV0uc3NuID0gMDsKLQkJCXN0YV9pbmZvLT5hZ2dbaV0ucmV0cnkgPSAwOwotCQkJc3RhX2luZm8tPmFnZ1tpXS50aWQgPSBpOwotCQkJSU5JVF9MSVNUX0hFQUQoJnN0YV9pbmZvLT5hZ2dbaV0ubGlzdCk7Ci0JCQlza2JfcXVldWVfaGVhZF9pbml0KCZzdGFfaW5mby0+YWdnW2ldLnF1ZXVlKTsKLQkJfQotCi0JCXN0YV9pbmZvLT5hbXBkdV9tYXhfbGVuID0gMSA8PCAoMyArIHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3Rvcik7Ci0JCWJyZWFrOwotCi0JY2FzZSBTVEFfTk9USUZZX1JFTU9WRToKLQkJaWYgKCFzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCi0JCQlicmVhazsKLQotCQlmb3IgKGkgPSAwOyBpIDwgQVI5MTcwX05VTV9USUQ7IGkrKykgewotCQkJc3RhX2luZm8tPmFnZ1tpXS5zdGF0ZSA9IEFSOTE3MF9USURfU1RBVEVfSU5WQUxJRDsKLQkJCXNrYl9xdWV1ZV9wdXJnZSgmc3RhX2luZm8tPmFnZ1tpXS5xdWV1ZSk7Ci0JCX0KLQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWJyZWFrOworCWZvciAoaSA9IDA7IGkgPCBBUjkxNzBfTlVNX1RJRDsgaSsrKSB7CisJCXN0YV9pbmZvLT5hZ2dbaV0uc3RhdGUgPSBBUjkxNzBfVElEX1NUQVRFX1NIVVRET1dOOworCQlzdGFfaW5mby0+YWdnW2ldLmFjdGl2ZSA9IGZhbHNlOworCQlzdGFfaW5mby0+YWdnW2ldLnNzbiA9IDA7CisJCXN0YV9pbmZvLT5hZ2dbaV0udGlkID0gaTsKKwkJSU5JVF9MSVNUX0hFQUQoJnN0YV9pbmZvLT5hZ2dbaV0ubGlzdCk7CisJCXNrYl9xdWV1ZV9oZWFkX2luaXQoJnN0YV9pbmZvLT5hZ2dbaV0ucXVldWUpOwogCX0KKworCXN0YV9pbmZvLT5hbXBkdV9tYXhfbGVuID0gMSA8PCAoMyArIHN0YS0+aHRfY2FwLmFtcGR1X2ZhY3Rvcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhcjkxNzBfc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3sKKwlzdHJ1Y3QgYXI5MTcwX3N0YV9pbmZvICpzdGFfaW5mbyA9ICh2b2lkICopIHN0YS0+ZHJ2X3ByaXY7CisJdW5zaWduZWQgaW50IGk7CisKKwlpZiAoIXN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZCkKKwkJcmV0dXJuIDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVI5MTcwX05VTV9USUQ7IGkrKykgeworCQlzdGFfaW5mby0+YWdnW2ldLnN0YXRlID0gQVI5MTcwX1RJRF9TVEFURV9JTlZBTElEOworCQlza2JfcXVldWVfcHVyZ2UoJnN0YV9pbmZvLT5hZ2dbaV0ucXVldWUpOworCX0KKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFyOTE3MF9nZXRfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCkBAIC0yNDA4LDE4ICsyMzk3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhcjkxNzBfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnR4X3N0YXRzKQotewotCXN0cnVjdCBhcjkxNzAgKmFyID0gaHctPnByaXY7Ci0KLQlzcGluX2xvY2tfYmgoJmFyLT50eF9zdGF0c19sb2NrKTsKLQltZW1jcHkodHhfc3RhdHMsIGFyLT50eF9zdGF0cywgc2l6ZW9mKHR4X3N0YXRzWzBdKSAqIGh3LT5xdWV1ZXMpOwotCXNwaW5fdW5sb2NrX2JoKCZhci0+dHhfc3RhdHNfbG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBhcjkxNzBfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAogCQkJICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW0pCiB7CkBAIC0yNTE5LDkgKzI0OTYsOSBAQAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gYXI5MTcwX29wX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmdldF90c2YJCT0gYXI5MTcwX29wX2dldF90c2YsCiAJLnNldF9rZXkJCT0gYXI5MTcwX3NldF9rZXksCi0JLnN0YV9ub3RpZnkJCT0gYXI5MTcwX3N0YV9ub3RpZnksCisJLnN0YV9hZGQJCT0gYXI5MTcwX3N0YV9hZGQsCisJLnN0YV9yZW1vdmUJCT0gYXI5MTcwX3N0YV9yZW1vdmUsCiAJLmdldF9zdGF0cwkJPSBhcjkxNzBfZ2V0X3N0YXRzLAotCS5nZXRfdHhfc3RhdHMJCT0gYXI5MTcwX2dldF90eF9zdGF0cywKIAkuYW1wZHVfYWN0aW9uCQk9IGFyOTE3MF9hbXBkdV9hY3Rpb24sCiB9OwogCkBAIC0yNTM1LDcgKzI1MTIsNyBAQAogCS8qCiAJICogdGhpcyBidWZmZXIgaXMgdXNlZCBmb3Igcnggc3RyZWFtIHJlY29uc3RydWN0aW9uLgogCSAqIFVuZGVyIGhlYXZ5IGxvYWQgdGhpcyBkZXZpY2UgKG9yIHRoZSB0cmFuc3BvcnQgbGF5ZXI/KQotCSAqIHRlbmRzIHRvIHNwbGl0IHRoZSBzdHJlYW1zIGludG8gc2VwZXJhdGUgcnggZGVzY3JpcHRvcnMuCisJICogdGVuZHMgdG8gc3BsaXQgdGhlIHN0cmVhbXMgaW50byBzZXBhcmF0ZSByeCBkZXNjcmlwdG9ycy4KIAkgKi8KIAogCXNrYiA9IF9fZGV2X2FsbG9jX3NrYihBUjkxNzBfTUFYX1JYX0JVRkZFUl9TSVpFLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXI5MTcwL3VzYi5jCmluZGV4IGUwNzk5ZDkuLjBmMzYxMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hcjkxNzAvdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2FyOTE3MC91c2IuYwpAQCAtODQsNiArODQsOCBAQAogCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAyMykgfSwKIAkvKiBaLUNvbSBVQjgyIEFCRyAqLwogCXsgVVNCX0RFVklDRSgweDBjZGUsIDB4MDAyNikgfSwKKwkvKiBTcGhhaXJvbiBIb21lbGluayAxMjAyICovCisJeyBVU0JfREVWSUNFKDB4MGNkZSwgMHgwMDI3KSB9LAogCS8qIEFyY2FkeWFuIFdONzUxMiAqLwogCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4ZjUyMikgfSwKIAkvKiBQbGFuZXggR1dVUzMwMCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aC5oCmluZGV4IDllMDU2NDguLjcxZmM5NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoLmgKQEAgLTc0LDcgKzc0LDYgQEAKIAogc3RydWN0IGF0aF9idXNfb3BzIHsKIAl2b2lkCQkoKnJlYWRfY2FjaGVzaXplKShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCBpbnQgKmNzeik7Ci0Jdm9pZAkJKCpjbGVhbnVwKShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uKTsKIAlib29sCQkoKmVlcHJvbV9yZWFkKShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCB1MzIgb2ZmLCB1MTYgKmRhdGEpOwogCXZvaWQJCSgqYnRfY29leF9wcmVwKShzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uKTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYXRoNWsuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdGg1ay5oCmluZGV4IDZhMmE5NjcuLmFjNjdmMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdGg1ay5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9hdGg1ay5oCkBAIC01MzUsMTMgKzUzNSwxMiBAQAogCXUzMgl0cWlfY2JyX3BlcmlvZDsgLyogQ29uc3RhbnQgYml0IHJhdGUgcGVyaW9kICovCiAJdTMyCXRxaV9jYnJfb3ZlcmZsb3dfbGltaXQ7CiAJdTMyCXRxaV9idXJzdF90aW1lOwotCXUzMgl0cWlfcmVhZHlfdGltZTsgLyogTm90IHVzZWQgKi8KKwl1MzIJdHFpX3JlYWR5X3RpbWU7IC8qIFRpbWUgcXVldWUgd2FpdHMgYWZ0ZXIgYW4gZXZlbnQgKi8KIH07CiAKIC8qCiAgKiBUcmFuc21pdCBwYWNrZXQgdHlwZXMuCiAgKiB1c2VkIG9uIHR4IGNvbnRyb2wgZGVzY3JpcHRvcgotICogVE9ETzogVXNlIHRoZW0gaW5zaWRlIGJhc2UuYyBjb3JlY3RseQogICovCiBlbnVtIGF0aDVrX3BrdF90eXBlIHsKIAlBUjVLX1BLVF9UWVBFX05PUk1BTAkJPSAwLApAQCAtMTA2Myw2ICsxMDYyLDcgQEAKIAl1MzIJCQlhaF9jd19taW47CiAJdTMyCQkJYWhfY3dfbWF4OwogCXUzMgkJCWFoX2xpbWl0X3R4X3JldHJpZXM7CisJdTgJCQlhaF9jb3ZlcmFnZV9jbGFzczsKIAogCS8qIEFudGVubmEgQ29udHJvbCAqLwogCXUzMgkJCWFoX2FudF9jdGxbQVI1S19FRVBST01fTl9NT0RFU11bQVI1S19BTlRfTUFYXTsKQEAgLTEyMDAsNiArMTIwMCw3IEBACiAKIC8qIFByb3RvY29sIENvbnRyb2wgVW5pdCBGdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQgYXRoNWtfaHdfc2V0X29wbW9kZShzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKK2V4dGVybiB2b2lkIGF0aDVrX2h3X3NldF9jb3ZlcmFnZV9jbGFzcyhzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1OCBjb3ZlcmFnZV9jbGFzcyk7CiAvKiBCU1NJRCBGdW5jdGlvbnMgKi8KIGV4dGVybiBpbnQgYXRoNWtfaHdfc2V0X2xsYWRkcihzdHJ1Y3QgYXRoNWtfaHcgKmFoLCBjb25zdCB1OCAqbWFjKTsKIGV4dGVybiB2b2lkIGF0aDVrX2h3X3NldF9hc3NvY2lkKHN0cnVjdCBhdGg1a19odyAqYWgpOwpAQCAtMTIzMSw2ICsxMjMyLDEwIEBACiBleHRlcm4gdW5zaWduZWQgaW50IGF0aDVrX2h3X2dldF9hY2tfdGltZW91dChzdHJ1Y3QgYXRoNWtfaHcgKmFoKTsKIGV4dGVybiBpbnQgYXRoNWtfaHdfc2V0X2N0c190aW1lb3V0KHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCB0aW1lb3V0KTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgYXRoNWtfaHdfZ2V0X2N0c190aW1lb3V0KHN0cnVjdCBhdGg1a19odyAqYWgpOworLyogQ2xvY2sgcmF0ZSByZWxhdGVkIGZ1bmN0aW9ucyAqLwordW5zaWduZWQgaW50IGF0aDVrX2h3X2h0b2Nsb2NrKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCB1c2VjKTsKK3Vuc2lnbmVkIGludCBhdGg1a19od19jbG9ja3RvaChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgY2xvY2spOwordW5zaWduZWQgaW50IGF0aDVrX2h3X2dldF9jbG9ja3JhdGUoc3RydWN0IGF0aDVrX2h3ICphaCk7CiAvKiBLZXkgdGFibGUgKFdFUCkgZnVuY3Rpb25zICovCiBleHRlcm4gaW50IGF0aDVrX2h3X3Jlc2V0X2tleShzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1MTYgZW50cnkpOwogZXh0ZXJuIGludCBhdGg1a19od19pc19rZXlfdmFsaWQoc3RydWN0IGF0aDVrX2h3ICphaCwgdTE2IGVudHJ5KTsKQEAgLTEzMTAsMjQgKzEzMTUsNiBAQAogICogRnVuY3Rpb25zIHVzZWQgaW50ZXJuYWx5CiAgKi8KIAotLyoKLSAqIFRyYW5zbGF0ZSB1c2VjIHRvIGh3IGNsb2NrIHVuaXRzCi0gKiBUT0RPOiBIYWxmL3F1YXJ0ZXIgcmF0ZQotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBhdGg1a19od19odG9jbG9jayh1bnNpZ25lZCBpbnQgdXNlYywgYm9vbCB0dXJibykKLXsKLQlyZXR1cm4gdHVyYm8gPyAodXNlYyAqIDgwKSA6ICh1c2VjICogNDApOwotfQotCi0vKgotICogVHJhbnNsYXRlIGh3IGNsb2NrIHVuaXRzIHRvIHVzZWMKLSAqIFRPRE86IEhhbGYvcXVhcnRlciByYXRlCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGF0aDVrX2h3X2Nsb2NrdG9oKHVuc2lnbmVkIGludCBjbG9jaywgYm9vbCB0dXJibykKLXsKLQlyZXR1cm4gdHVyYm8gPyAoY2xvY2sgLyA4MCkgOiAoY2xvY2sgLyA0MCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGF0aF9jb21tb24gKmF0aDVrX2h3X2NvbW1vbihzdHJ1Y3QgYXRoNWtfaHcgKmFoKQogewogICAgICAgICByZXR1cm4gJmFoLT5jb21tb247CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuYwppbmRleCBlNjNiN2M0Li44ZGNlMDA3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmMKQEAgLTgzLDcgKzgzLDcgQEAKIAogCiAvKiBLbm93biBQQ0kgaWRzICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgYXRoNWtfcGNpX2lkX3RhYmxlW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoYXRoNWtfcGNpX2lkX3RhYmxlKSA9IHsKIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDIwNykgfSwgLyogNTIxMCBlYXJseSAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDA3KSB9LCAvKiA1MjEwICovCiAJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCAweDAwMTEpIH0sIC8qIDUzMTEgLSB0aGlzIGlzIG9uIEFIQiBidXMgISovCkBAIC0yMjUsOSArMjI1LDkgQEAKIHN0YXRpYyBpbnQgYXRoNWtfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogc3RhdGljIHZvaWQgYXRoNWtfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBzdGF0aWMgaW50IGF0aDVrX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKTsKKwkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CiBzdGF0aWMgdm9pZCBhdGg1a19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZik7CisJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwogc3RhdGljIGludCBhdGg1a19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKTsKIHN0YXRpYyB1NjQgYXRoNWtfcHJlcGFyZV9tdWx0aWNhc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgaW50IG1jX2NvdW50LCBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCk7CkBAIC0yNDEsOCArMjQxLDYgQEAKIAkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KTsKIHN0YXRpYyBpbnQgYXRoNWtfZ2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQlzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpOwotc3RhdGljIGludCBhdGg1a19nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKTsKIHN0YXRpYyB1NjQgYXRoNWtfZ2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBzdGF0aWMgdm9pZCBhdGg1a19zZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1NjQgdHNmKTsKIHN0YXRpYyB2b2lkIGF0aDVrX3Jlc2V0X3RzZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CkBAIC0yNTQsNiArMjUyLDggQEAKIAkJdTMyIGNoYW5nZXMpOwogc3RhdGljIHZvaWQgYXRoNWtfc3dfc2Nhbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBzdGF0aWMgdm9pZCBhdGg1a19zd19zY2FuX2NvbXBsZXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKK3N0YXRpYyB2b2lkIGF0aDVrX3NldF9jb3ZlcmFnZV9jbGFzcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJdTggY292ZXJhZ2VfY2xhc3MpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgYXRoNWtfaHdfb3BzID0gewogCS50eCAJCT0gYXRoNWtfdHgsCkBAIC0yNjcsMTMgKzI2NywxMyBAQAogCS5zZXRfa2V5IAk9IGF0aDVrX3NldF9rZXksCiAJLmdldF9zdGF0cyAJPSBhdGg1a19nZXRfc3RhdHMsCiAJLmNvbmZfdHggCT0gTlVMTCwKLQkuZ2V0X3R4X3N0YXRzIAk9IGF0aDVrX2dldF90eF9zdGF0cywKIAkuZ2V0X3RzZiAJPSBhdGg1a19nZXRfdHNmLAogCS5zZXRfdHNmIAk9IGF0aDVrX3NldF90c2YsCiAJLnJlc2V0X3RzZiAJPSBhdGg1a19yZXNldF90c2YsCiAJLmJzc19pbmZvX2NoYW5nZWQgPSBhdGg1a19ic3NfaW5mb19jaGFuZ2VkLAogCS5zd19zY2FuX3N0YXJ0CT0gYXRoNWtfc3dfc2Nhbl9zdGFydCwKIAkuc3dfc2Nhbl9jb21wbGV0ZSA9IGF0aDVrX3N3X3NjYW5fY29tcGxldGUsCisJLnNldF9jb3ZlcmFnZV9jbGFzcyA9IGF0aDVrX3NldF9jb3ZlcmFnZV9jbGFzcywKIH07CiAKIC8qCkBAIC0xMjQ2LDYgKzEyNDYsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGVudW0gYXRoNWtfcGt0X3R5cGUgZ2V0X2h3X3BhY2tldF90eXBlKHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcjsKKwllbnVtIGF0aDVrX3BrdF90eXBlIGh0eXBlOworCV9fbGUxNiBmYzsKKworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKKwlmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKworCWlmIChpZWVlODAyMTFfaXNfYmVhY29uKGZjKSkKKwkJaHR5cGUgPSBBUjVLX1BLVF9UWVBFX0JFQUNPTjsKKwllbHNlIGlmIChpZWVlODAyMTFfaXNfcHJvYmVfcmVzcChmYykpCisJCWh0eXBlID0gQVI1S19QS1RfVFlQRV9QUk9CRV9SRVNQOworCWVsc2UgaWYgKGllZWU4MDIxMV9pc19hdGltKGZjKSkKKwkJaHR5cGUgPSBBUjVLX1BLVF9UWVBFX0FUSU07CisJZWxzZSBpZiAoaWVlZTgwMjExX2lzX3BzcG9sbChmYykpCisJCWh0eXBlID0gQVI1S19QS1RfVFlQRV9QU1BPTEw7CisJZWxzZQorCQlodHlwZSA9IEFSNUtfUEtUX1RZUEVfTk9STUFMOworCisJcmV0dXJuIGh0eXBlOworfQorCiBzdGF0aWMgaW50CiBhdGg1a190eGJ1Zl9zZXR1cChzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoNWtfYnVmICpiZiwKIAkJICBzdHJ1Y3QgYXRoNWtfdHhxICp0eHEpCkBAIC0xMzAwLDcgKzEzMjMsOCBAQAogCQkJc2MtPnZpZiwgcGt0bGVuLCBpbmZvKSk7CiAJfQogCXJldCA9IGFoLT5haF9zZXR1cF90eF9kZXNjKGFoLCBkcywgcGt0bGVuLAotCQlpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihza2IpLCBBUjVLX1BLVF9UWVBFX05PUk1BTCwKKwkJaWVlZTgwMjExX2dldF9oZHJsZW5fZnJvbV9za2Ioc2tiKSwKKwkJZ2V0X2h3X3BhY2tldF90eXBlKHNrYiksCiAJCShzYy0+cG93ZXJfbGV2ZWwgKiAyKSwKIAkJaHdfcmF0ZSwKIAkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5jb3VudCwga2V5aWR4LCBhaC0+YWhfdHhfYW50LCBmbGFncywKQEAgLTEzMjksNyArMTM1Myw2IEBACiAKIAlzcGluX2xvY2tfYmgoJnR4cS0+bG9jayk7CiAJbGlzdF9hZGRfdGFpbCgmYmYtPmxpc3QsICZ0eHEtPnEpOwotCXNjLT50eF9zdGF0c1t0eHEtPnFudW1dLmxlbisrOwogCWlmICh0eHEtPmxpbmsgPT0gTlVMTCkgLyogaXMgdGhpcyBmaXJzdCBwYWNrZXQ/ICovCiAJCWF0aDVrX2h3X3NldF90eGRwKGFoLCB0eHEtPnFudW0sIGJmLT5kYWRkcik7CiAJZWxzZSAvKiBubywgc28gb25seSBsaW5rIGl0ICovCkBAIC0xNTEzLDcgKzE1MzYsOCBAQAogCiAJcmV0ID0gYXRoNWtfaHdfZ2V0X3R4X3F1ZXVlcHJvcHMoYWgsIHNjLT5iaGFscSwgJnFpKTsKIAlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCQlnb3RvIGVycjsKKwogCWlmIChzYy0+b3Btb2RlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CiAJCXNjLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkgewogCQkvKgpAQCAtMTU0MCwxMCArMTU2NCwyNSBAQAogCWlmIChyZXQpIHsKIAkJQVRINUtfRVJSKHNjLCAiJXM6IHVuYWJsZSB0byB1cGRhdGUgcGFyYW1ldGVycyBmb3IgYmVhY29uICIKIAkJCSJoYXJkd2FyZSBxdWV1ZSFcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuIHJldDsKKwkJZ290byBlcnI7CiAJfQorCXJldCA9IGF0aDVrX2h3X3Jlc2V0X3R4X3F1ZXVlKGFoLCBzYy0+YmhhbHEpOyAvKiBwdXNoIHRvIGgvdyAqLworCWlmIChyZXQpCisJCWdvdG8gZXJyOwogCi0JcmV0dXJuIGF0aDVrX2h3X3Jlc2V0X3R4X3F1ZXVlKGFoLCBzYy0+YmhhbHEpOyAvKiBwdXNoIHRvIGgvdyAqLzsKKwkvKiByZWNvbmZpZ3VyZSBjYWJxIHdpdGggcmVhZHkgdGltZSB0byA4MCUgb2YgYmVhY29uX2ludGVydmFsICovCisJcmV0ID0gYXRoNWtfaHdfZ2V0X3R4X3F1ZXVlcHJvcHMoYWgsIEFSNUtfVFhfUVVFVUVfSURfQ0FCLCAmcWkpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcWkudHFpX3JlYWR5X3RpbWUgPSAoc2MtPmJpbnR2YWwgKiA4MCkgLyAxMDA7CisJcmV0ID0gYXRoNWtfaHdfc2V0X3R4X3F1ZXVlcHJvcHMoYWgsIEFSNUtfVFhfUVVFVUVfSURfQ0FCLCAmcWkpOworCWlmIChyZXQpCisJCWdvdG8gZXJyOworCisJcmV0ID0gYXRoNWtfaHdfcmVzZXRfdHhfcXVldWUoYWgsIEFSNUtfVFhfUVVFVUVfSURfQ0FCKTsKK2VycjoKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZApAQCAtMTU2Miw3ICsxNjAxLDYgQEAKIAkJYXRoNWtfdHhidWZfZnJlZShzYywgYmYpOwogCiAJCXNwaW5fbG9ja19iaCgmc2MtPnR4YnVmbG9jayk7Ci0JCXNjLT50eF9zdGF0c1t0eHEtPnFudW1dLmxlbi0tOwogCQlsaXN0X21vdmVfdGFpbCgmYmYtPmxpc3QsICZzYy0+dHhidWYpOwogCQlzYy0+dHhidWZfbGVuKys7CiAJCXNwaW5fdW5sb2NrX2JoKCZzYy0+dHhidWZsb2NrKTsKQEAgLTE5OTIsMTAgKzIwMzAsOCBAQAogCQl9CiAKIAkJaWVlZTgwMjExX3R4X3N0YXR1cyhzYy0+aHcsIHNrYik7Ci0JCXNjLT50eF9zdGF0c1t0eHEtPnFudW1dLmNvdW50Kys7CiAKIAkJc3Bpbl9sb2NrKCZzYy0+dHhidWZsb2NrKTsKLQkJc2MtPnR4X3N0YXRzW3R4cS0+cW51bV0ubGVuLS07CiAJCWxpc3RfbW92ZV90YWlsKCZiZi0+bGlzdCwgJnNjLT50eGJ1Zik7CiAJCXNjLT50eGJ1Zl9sZW4rKzsKIAkJc3Bpbl91bmxvY2soJnNjLT50eGJ1ZmxvY2spOwpAQCAtMjc3Myw3ICsyODA5LDcgQEAKIH0KIAogc3RhdGljIGludCBhdGg1a19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgYXRoNWtfc29mdGMgKnNjID0gaHctPnByaXY7CiAJaW50IHJldDsKQEAgLTI3ODQsMjIgKzI4MjAsMjIgQEAKIAkJZ290byBlbmQ7CiAJfQogCi0Jc2MtPnZpZiA9IGNvbmYtPnZpZjsKKwlzYy0+dmlmID0gdmlmOwogCi0Jc3dpdGNoIChjb25mLT50eXBlKSB7CisJc3dpdGNoICh2aWYtPnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKIAljYXNlIE5MODAyMTFfSUZUWVBFX01PTklUT1I6Ci0JCXNjLT5vcG1vZGUgPSBjb25mLT50eXBlOworCQlzYy0+b3Btb2RlID0gdmlmLT50eXBlOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBlbmQ7CiAJfQogCi0JYXRoNWtfaHdfc2V0X2xsYWRkcihzYy0+YWgsIGNvbmYtPm1hY19hZGRyKTsKKwlhdGg1a19od19zZXRfbGxhZGRyKHNjLT5haCwgdmlmLT5hZGRyKTsKIAlhdGg1a19tb2RlX3NldHVwKHNjKTsKIAogCXJldCA9IDA7CkBAIC0yODEwLDEzICsyODQ2LDEzIEBACiAKIHN0YXRpYyB2b2lkCiBhdGg1a19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKIAl1OCBtYWNbRVRIX0FMRU5dID0ge307CiAKIAltdXRleF9sb2NrKCZzYy0+bG9jayk7Ci0JaWYgKHNjLT52aWYgIT0gY29uZi0+dmlmKQorCWlmIChzYy0+dmlmICE9IHZpZikKIAkJZ290byBlbmQ7CiAKIAlhdGg1a19od19zZXRfbGxhZGRyKHNjLT5haCwgbWFjKTsKQEAgLTMwOTcsMTcgKzMxMzMsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1hdGg1a19nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKQotewotCXN0cnVjdCBhdGg1a19zb2Z0YyAqc2MgPSBody0+cHJpdjsKLQotCW1lbWNweShzdGF0cywgJnNjLT50eF9zdGF0cywgc2l6ZW9mKHNjLT50eF9zdGF0cykpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB1NjQKIGF0aDVrX2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CkBAIC0zMjYyLDMgKzMyODcsMjIgQEAKIAlhdGg1a19od19zZXRfbGVkc3RhdGUoc2MtPmFoLCBzYy0+YXNzb2MgPwogCQlBUjVLX0xFRF9BU1NPQyA6IEFSNUtfTEVEX0lOSVQpOwogfQorCisvKioKKyAqIGF0aDVrX3NldF9jb3ZlcmFnZV9jbGFzcyAtIFNldCBJRUVFIDgwMi4xMSBjb3ZlcmFnZSBjbGFzcworICoKKyAqIEBodzogc3RydWN0IGllZWU4MDIxMV9odyBwb2ludGVyCisgKiBAY292ZXJhZ2VfY2xhc3M6IElFRUUgODAyLjExIGNvdmVyYWdlIGNsYXNzIG51bWJlcgorICoKKyAqIE1hYzgwMjExIGNhbGxiYWNrLiBTZXRzIHNsb3QgdGltZSwgQUNLIHRpbWVvdXQgYW5kIENUUyB0aW1lb3V0IGZvciBnaXZlbgorICogY292ZXJhZ2UgY2xhc3MuIFRoZSB2YWx1ZXMgYXJlIHBlcnNpc3RlbnQsIHRoZXkgYXJlIHJlc3RvcmVkIGFmdGVyIGRldmljZQorICogcmVzZXQuCisgKi8KK3N0YXRpYyB2b2lkIGF0aDVrX3NldF9jb3ZlcmFnZV9jbGFzcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggY292ZXJhZ2VfY2xhc3MpCit7CisJc3RydWN0IGF0aDVrX3NvZnRjICpzYyA9IGh3LT5wcml2OworCisJbXV0ZXhfbG9jaygmc2MtPmxvY2spOworCWF0aDVrX2h3X3NldF9jb3ZlcmFnZV9jbGFzcyhzYy0+YWgsIGNvdmVyYWdlX2NsYXNzKTsKKwltdXRleF91bmxvY2soJnNjLT5sb2NrKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvYmFzZS5oCmluZGV4IDk1MmIzYTIuLjdlMWE4OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9iYXNlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2Jhc2UuaApAQCAtMTE3LDcgKzExNyw2IEBACiAJc3RydWN0IHBjaV9kZXYJCSpwZGV2OwkJLyogZm9yIGRtYSBtYXBwaW5nICovCiAJdm9pZCBfX2lvbWVtCQkqaW9iYXNlOwkvKiBhZGRyZXNzIG9mIHRoZSBkZXZpY2UgKi8KIAlzdHJ1Y3QgbXV0ZXgJCWxvY2s7CQkvKiBkZXYtbGV2ZWwgbG9jayAqLwotCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgdHhfc3RhdHNbQVI1S19OVU1fVFhfUVVFVUVTXTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyBsbF9zdGF0czsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3CSpodzsJCS8qIElFRUUgODAyLjExIGNvbW1vbiAqLwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgc2JhbmRzW0lFRUU4MDIxMV9OVU1fQkFORFNdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2xlZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL2xlZC5jCmluZGV4IDYwZjU0NzUuLjY3YWE1MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9sZWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvbGVkLmMKQEAgLTc3LDYgKzc3LDggQEAKIAl7IEFUSF9TREVWSUNFKFBDSV9WRU5ET1JfSURfSFAsIDB4MDEzN2EpLCBBVEhfTEVEKDMsIDEpIH0sCiAJLyogSFAgQ29tcGFxIEM3MDAgKG5pdHJvdXNucmdAZ21haWwuY29tKSAqLwogCXsgQVRIX1NERVZJQ0UoUENJX1ZFTkRPUl9JRF9IUCwgMHgwMTM3YiksIEFUSF9MRUQoMywgMSkgfSwKKwkvKiBMaXRlT24gQVI1QlhCNjMgKG1hZ29vekBzYWx1Zy5pdCkgKi8KKwl7IEFUSF9TREVWSUNFKFBDSV9WRU5ET1JfSURfQVRIRVJPUywgMHgzMDY3KSwgQVRIX0xFRCgzLCAwKSB9LAogCS8qIElCTS1zcGVjaWZpYyBBUjUyMTIgKGFsbCBvdGhlcnMpICovCiAJeyBQQ0lfVkRFVklDRShBVEhFUk9TLCBQQ0lfREVWSUNFX0lEX0FUSEVST1NfQVI1MjEyX0lCTSksIEFUSF9MRUQoMCwgMCkgfSwKIAkvKiBEZWxsIFZvc3RybyBBODYwIChzaGFoYXJAc2hhaGFyLW9yLmNvLmlsKSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3BjdS5jCmluZGV4IDY0ZmMxZWIuLmFlZmU4NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9wY3UuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcGN1LmMKQEAgLTE4Nyw4ICsxODcsOCBAQAogewogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CiAKLQlyZXR1cm4gYXRoNWtfaHdfY2xvY2t0b2goQVI1S19SRUdfTVMoYXRoNWtfaHdfcmVnX3JlYWQoYWgsCi0JCQlBUjVLX1RJTUVfT1VUKSwgQVI1S19USU1FX09VVF9BQ0spLCBhaC0+YWhfdHVyYm8pOworCXJldHVybiBhdGg1a19od19jbG9ja3RvaChhaCwgQVI1S19SRUdfTVMoYXRoNWtfaHdfcmVnX3JlYWQoYWgsCisJCQlBUjVLX1RJTUVfT1VUKSwgQVI1S19USU1FX09VVF9BQ0spKTsKIH0KIAogLyoqCkBAIC0yMDAsMTIgKzIwMCwxMiBAQAogaW50IGF0aDVrX2h3X3NldF9hY2tfdGltZW91dChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgdGltZW91dCkKIHsKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCWlmIChhdGg1a19od19jbG9ja3RvaChBUjVLX1JFR19NUygweGZmZmZmZmZmLCBBUjVLX1RJTUVfT1VUX0FDSyksCi0JCQlhaC0+YWhfdHVyYm8pIDw9IHRpbWVvdXQpCisJaWYgKGF0aDVrX2h3X2Nsb2NrdG9oKGFoLCBBUjVLX1JFR19NUygweGZmZmZmZmZmLCBBUjVLX1RJTUVfT1VUX0FDSykpCisJCQk8PSB0aW1lb3V0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfVElNRV9PVVQsIEFSNUtfVElNRV9PVVRfQUNLLAotCQlhdGg1a19od19odG9jbG9jayh0aW1lb3V0LCBhaC0+YWhfdHVyYm8pKTsKKwkJYXRoNWtfaHdfaHRvY2xvY2soYWgsIHRpbWVvdXQpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjE4LDggKzIxOCw4IEBACiB1bnNpZ25lZCBpbnQgYXRoNWtfaHdfZ2V0X2N0c190aW1lb3V0KHN0cnVjdCBhdGg1a19odyAqYWgpCiB7CiAJQVRINUtfVFJBQ0UoYWgtPmFoX3NjKTsKLQlyZXR1cm4gYXRoNWtfaHdfY2xvY2t0b2goQVI1S19SRUdfTVMoYXRoNWtfaHdfcmVnX3JlYWQoYWgsCi0JCQlBUjVLX1RJTUVfT1VUKSwgQVI1S19USU1FX09VVF9DVFMpLCBhaC0+YWhfdHVyYm8pOworCXJldHVybiBhdGg1a19od19jbG9ja3RvaChhaCwgQVI1S19SRUdfTVMoYXRoNWtfaHdfcmVnX3JlYWQoYWgsCisJCQlBUjVLX1RJTUVfT1VUKSwgQVI1S19USU1FX09VVF9DVFMpKTsKIH0KIAogLyoqCkBAIC0yMzEsMTcgKzIzMSw5NyBAQAogaW50IGF0aDVrX2h3X3NldF9jdHNfdGltZW91dChzdHJ1Y3QgYXRoNWtfaHcgKmFoLCB1bnNpZ25lZCBpbnQgdGltZW91dCkKIHsKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCWlmIChhdGg1a19od19jbG9ja3RvaChBUjVLX1JFR19NUygweGZmZmZmZmZmLCBBUjVLX1RJTUVfT1VUX0NUUyksCi0JCQlhaC0+YWhfdHVyYm8pIDw9IHRpbWVvdXQpCisJaWYgKGF0aDVrX2h3X2Nsb2NrdG9oKGFoLCBBUjVLX1JFR19NUygweGZmZmZmZmZmLCBBUjVLX1RJTUVfT1VUX0NUUykpCisJCQk8PSB0aW1lb3V0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCUFSNUtfUkVHX1dSSVRFX0JJVFMoYWgsIEFSNUtfVElNRV9PVVQsIEFSNUtfVElNRV9PVVRfQ1RTLAotCQkJYXRoNWtfaHdfaHRvY2xvY2sodGltZW91dCwgYWgtPmFoX3R1cmJvKSk7CisJCQlhdGg1a19od19odG9jbG9jayhhaCwgdGltZW91dCkpOwogCiAJcmV0dXJuIDA7CiB9CiAKIC8qKgorICogYXRoNWtfaHdfaHRvY2xvY2sgLSBUcmFuc2xhdGUgdXNlYyB0byBodyBjbG9jayB1bml0cworICoKKyAqIEBhaDogVGhlICZzdHJ1Y3QgYXRoNWtfaHcKKyAqIEB1c2VjOiB2YWx1ZSBpbiBtaWNyb3NlY29uZHMKKyAqLwordW5zaWduZWQgaW50IGF0aDVrX2h3X2h0b2Nsb2NrKHN0cnVjdCBhdGg1a19odyAqYWgsIHVuc2lnbmVkIGludCB1c2VjKQoreworCXJldHVybiB1c2VjICogYXRoNWtfaHdfZ2V0X2Nsb2NrcmF0ZShhaCk7Cit9CisKKy8qKgorICogYXRoNWtfaHdfY2xvY2t0b2ggLSBUcmFuc2xhdGUgaHcgY2xvY2sgdW5pdHMgdG8gdXNlYworICogQGNsb2NrOiB2YWx1ZSBpbiBodyBjbG9jayB1bml0cworICovCit1bnNpZ25lZCBpbnQgYXRoNWtfaHdfY2xvY2t0b2goc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IGNsb2NrKQoreworCXJldHVybiBjbG9jayAvIGF0aDVrX2h3X2dldF9jbG9ja3JhdGUoYWgpOworfQorCisvKioKKyAqIGF0aDVrX2h3X2dldF9jbG9ja3JhdGUgLSBHZXQgdGhlIGNsb2NrIHJhdGUgZm9yIGN1cnJlbnQgbW9kZQorICoKKyAqIEBhaDogVGhlICZzdHJ1Y3QgYXRoNWtfaHcKKyAqLwordW5zaWduZWQgaW50IGF0aDVrX2h3X2dldF9jbG9ja3JhdGUoc3RydWN0IGF0aDVrX2h3ICphaCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwgPSBhaC0+YWhfY3VycmVudF9jaGFubmVsOworCWludCBjbG9jazsKKworCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfNUdIWikKKwkJY2xvY2sgPSA0MDsgLyogODAyLjExYSAqLworCWVsc2UgaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9DQ0spCisJCWNsb2NrID0gMjI7IC8qIDgwMi4xMWIgKi8KKwllbHNlCisJCWNsb2NrID0gNDQ7IC8qIDgwMi4xMWcgKi8KKworCS8qIENsb2NrIHJhdGUgaW4gdHVyYm8gbW9kZXMgaXMgdHdpY2UgdGhlIG5vcm1hbCByYXRlICovCisJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9UVVJCTykKKwkJY2xvY2sgKj0gMjsKKworCXJldHVybiBjbG9jazsKK30KKworLyoqCisgKiBhdGg1a19od19nZXRfZGVmYXVsdF9zbG90dGltZSAtIEdldCB0aGUgZGVmYXVsdCBzbG90IHRpbWUgZm9yIGN1cnJlbnQgbW9kZQorICoKKyAqIEBhaDogVGhlICZzdHJ1Y3QgYXRoNWtfaHcKKyAqLwordW5zaWduZWQgaW50IGF0aDVrX2h3X2dldF9kZWZhdWx0X3Nsb3R0aW1lKHN0cnVjdCBhdGg1a19odyAqYWgpCit7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gYWgtPmFoX2N1cnJlbnRfY2hhbm5lbDsKKworCWlmIChjaGFubmVsLT5od192YWx1ZSAmIENIQU5ORUxfVFVSQk8pCisJCXJldHVybiA2OyAvKiBib3RoIHR1cmJvIG1vZGVzICovCisKKwlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX0NDSykKKwkJcmV0dXJuIDIwOyAvKiA4MDIuMTFiICovCisKKwlyZXR1cm4gOTsgLyogODAyLjExIGEvZyAqLworfQorCisvKioKKyAqIGF0aDVrX2h3X2dldF9kZWZhdWx0X3NpZnMgLSBHZXQgdGhlIGRlZmF1bHQgU0lGUyBmb3IgY3VycmVudCBtb2RlCisgKgorICogQGFoOiBUaGUgJnN0cnVjdCBhdGg1a19odworICovCit1bnNpZ25lZCBpbnQgYXRoNWtfaHdfZ2V0X2RlZmF1bHRfc2lmcyhzdHJ1Y3QgYXRoNWtfaHcgKmFoKQoreworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCA9IGFoLT5haF9jdXJyZW50X2NoYW5uZWw7CisKKwlpZiAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX1RVUkJPKQorCQlyZXR1cm4gODsgLyogYm90aCB0dXJibyBtb2RlcyAqLworCisJaWYgKGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF81R0haKQorCQlyZXR1cm4gMTY7IC8qIDgwMi4xMWEgKi8KKworCXJldHVybiAxMDsgLyogODAyLjExIGIvZyAqLworfQorCisvKioKICAqIGF0aDVrX2h3X3NldF9sbGFkZHIgLSBTZXQgc3RhdGlvbiBpZAogICoKICAqIEBhaDogVGhlICZzdHJ1Y3QgYXRoNWtfaHcKQEAgLTEwNTAsMyArMTEzMCwyNCBAQAogCXJldHVybiAwOwogfQogCisvKioKKyAqIGF0aDVrX2h3X3NldF9jb3ZlcmFnZV9jbGFzcyAtIFNldCBJRUVFIDgwMi4xMSBjb3ZlcmFnZSBjbGFzcworICoKKyAqIEBhaDogVGhlICZzdHJ1Y3QgYXRoNWtfaHcKKyAqIEBjb3ZlcmFnZV9jbGFzczogSUVFRSA4MDIuMTEgY292ZXJhZ2UgY2xhc3MgbnVtYmVyCisgKgorICogU2V0cyBzbG90IHRpbWUsIEFDSyB0aW1lb3V0IGFuZCBDVFMgdGltZW91dCBmb3IgZ2l2ZW4gY292ZXJhZ2UgY2xhc3MuCisgKi8KK3ZvaWQgYXRoNWtfaHdfc2V0X2NvdmVyYWdlX2NsYXNzKHN0cnVjdCBhdGg1a19odyAqYWgsIHU4IGNvdmVyYWdlX2NsYXNzKQoreworCS8qIEFzIGRlZmluZWQgYnkgSUVFRSA4MDIuMTEtMjAwNyAxNy4zLjguNiAqLworCWludCBzbG90X3RpbWUgPSBhdGg1a19od19nZXRfZGVmYXVsdF9zbG90dGltZShhaCkgKyAzICogY292ZXJhZ2VfY2xhc3M7CisJaW50IGFja190aW1lb3V0ID0gYXRoNWtfaHdfZ2V0X2RlZmF1bHRfc2lmcyhhaCkgKyBzbG90X3RpbWU7CisJaW50IGN0c190aW1lb3V0ID0gYWNrX3RpbWVvdXQ7CisKKwlhdGg1a19od19zZXRfc2xvdF90aW1lKGFoLCBzbG90X3RpbWUpOworCWF0aDVrX2h3X3NldF9hY2tfdGltZW91dChhaCwgYWNrX3RpbWVvdXQpOworCWF0aDVrX2h3X3NldF9jdHNfdGltZW91dChhaCwgY3RzX3RpbWVvdXQpOworCisJYWgtPmFoX2NvdmVyYWdlX2NsYXNzID0gY292ZXJhZ2VfY2xhc3M7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcWN1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcWN1LmMKaW5kZXggZWVlYmI5YS4uOTEyMmE4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3FjdS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg1ay9xY3UuYwpAQCAtNDA4LDEyICs0MDgsMTMgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgQVI1S19UWF9RVUVVRV9DQUI6CisJCQkvKiBYWFg6IHVzZSBCQ05fU0VOVF9HVCwgaWYgd2UgY2FuIGZpZ3VyZSBvdXQgaG93ICovCiAJCQlBUjVLX1JFR19FTkFCTEVfQklUUyhhaCwgQVI1S19RVUVVRV9NSVNDKHF1ZXVlKSwKLQkJCQlBUjVLX1FDVV9NSVNDX0ZSU0hFRF9CQ05fU0VOVF9HVCB8CisJCQkJQVI1S19RQ1VfTUlTQ19GUlNIRURfREJBX0dUIHwKIAkJCQlBUjVLX1FDVV9NSVNDX0NCUkVYUF9ESVMgfAogCQkJCUFSNUtfUUNVX01JU0NfQ0JSRVhQX0JDTl9ESVMpOwogCi0JCQlhdGg1a19od19yZWdfd3JpdGUoYWgsICgoQVI1S19UVU5FX0JFQUNPTl9JTlRFUlZBTCAtCisJCQlhdGg1a19od19yZWdfd3JpdGUoYWgsICgodHEtPnRxaV9yZWFkeV90aW1lIC0KIAkJCQkoQVI1S19UVU5FX1NXX0JFQUNPTl9SRVNQIC0KIAkJCQlBUjVLX1RVTkVfRE1BX0JFQUNPTl9SRVNQKSAtCiAJCQkJQVI1S19UVU5FX0FERElUSU9OQUxfU1dCQV9CQUNLT0ZGKSAqIDEwMjQpIHwKQEAgLTUyMCwxMiArNTIxLDE2IEBACiAgKi8KIHVuc2lnbmVkIGludCBhdGg1a19od19nZXRfc2xvdF90aW1lKHN0cnVjdCBhdGg1a19odyAqYWgpCiB7CisJdW5zaWduZWQgaW50IHNsb3RfdGltZV9jbG9jazsKKwogCUFUSDVLX1RSQUNFKGFoLT5haF9zYyk7CisKIAlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApCi0JCXJldHVybiBhdGg1a19od19jbG9ja3RvaChhdGg1a19od19yZWdfcmVhZChhaCwKLQkJCQlBUjVLX1NMT1RfVElNRSkgJiAweGZmZmYsIGFoLT5haF90dXJibyk7CisJCXNsb3RfdGltZV9jbG9jayA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX1NMT1RfVElNRSk7CiAJZWxzZQotCQlyZXR1cm4gYXRoNWtfaHdfcmVnX3JlYWQoYWgsIEFSNUtfRENVX0dCTF9JRlNfU0xPVCkgJiAweGZmZmY7CisJCXNsb3RfdGltZV9jbG9jayA9IGF0aDVrX2h3X3JlZ19yZWFkKGFoLCBBUjVLX0RDVV9HQkxfSUZTX1NMT1QpOworCisJcmV0dXJuIGF0aDVrX2h3X2Nsb2NrdG9oKGFoLCBzbG90X3RpbWVfY2xvY2sgJiAweGZmZmYpOwogfQogCiAvKgpAQCAtNTMzLDE1ICs1MzgsMTcgQEAKICAqLwogaW50IGF0aDVrX2h3X3NldF9zbG90X3RpbWUoc3RydWN0IGF0aDVrX2h3ICphaCwgdW5zaWduZWQgaW50IHNsb3RfdGltZSkKIHsKKwl1MzIgc2xvdF90aW1lX2Nsb2NrID0gYXRoNWtfaHdfaHRvY2xvY2soYWgsIHNsb3RfdGltZSk7CisKIAlBVEg1S19UUkFDRShhaC0+YWhfc2MpOwotCWlmIChzbG90X3RpbWUgPCBBUjVLX1NMT1RfVElNRV85IHx8IHNsb3RfdGltZSA+IEFSNUtfU0xPVF9USU1FX01BWCkKKworCWlmIChzbG90X3RpbWUgPCA2IHx8IHNsb3RfdGltZV9jbG9jayA+IEFSNUtfU0xPVF9USU1FX01BWCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTApCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgYXRoNWtfaHdfaHRvY2xvY2soc2xvdF90aW1lLAotCQkJCWFoLT5haF90dXJibyksIEFSNUtfU0xPVF9USU1FKTsKKwkJYXRoNWtfaHdfcmVnX3dyaXRlKGFoLCBzbG90X3RpbWVfY2xvY2ssIEFSNUtfU0xPVF9USU1FKTsKIAllbHNlCi0JCWF0aDVrX2h3X3JlZ193cml0ZShhaCwgc2xvdF90aW1lLCBBUjVLX0RDVV9HQkxfSUZTX1NMT1QpOworCQlhdGg1a19od19yZWdfd3JpdGUoYWgsIHNsb3RfdGltZV9jbG9jaywgQVI1S19EQ1VfR0JMX0lGU19TTE9UKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDVrL3Jlc2V0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYwppbmRleCA2Mjk1NGZjLi5hMzVhN2RiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoNWsvcmVzZXQuYwpAQCAtNjAsMTIgKzYwLDExIEBACiAJCSEoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX09GRE0pKTsKIAogCS8qIEdldCBjb2VmZmljaWVudAotCSAqIEFMR086IGNvZWYgPSAoNSAqIGNsb2NrICogY2Fycmllcl9mcmVxKSAvIDIpCisJICogQUxHTzogY29lZiA9ICg1ICogY2xvY2sgLyBjYXJyaWVyX2ZyZXEpIC8gMgogCSAqIHdlIHNjYWxlIGNvZWYgYnkgc2hpZnRpbmcgY2xvY2sgdmFsdWUgYnkgMjQgZm9yCiAJICogYmV0dGVyIHByZWNpc2lvbiBzaW5jZSB3ZSB1c2UgaW50ZWdlcnMgKi8KIAkvKiBUT0RPOiBIYWxmL3F1YXJ0ZXIgcmF0ZSAqLwotCWNsb2NrID0gIGF0aDVrX2h3X2h0b2Nsb2NrKDEsIGNoYW5uZWwtPmh3X3ZhbHVlICYgQ0hBTk5FTF9UVVJCTyk7Ci0KKwljbG9jayA9ICAoY2hhbm5lbC0+aHdfdmFsdWUgJiBDSEFOTkVMX1RVUkJPKSA/IDgwIDogNDA7CiAJY29lZl9zY2FsZWQgPSAoKDUgKiAoY2xvY2sgPDwgMjQpKSAvIDIpIC8gY2hhbm5lbC0+Y2VudGVyX2ZyZXE7CiAKIAkvKiBHZXQgZXhwb25lbnQKQEAgLTEzMTcsNiArMTMxNiwxMCBAQAogCS8qIFJlc3RvcmUgYW50ZW5uYSBtb2RlICovCiAJYXRoNWtfaHdfc2V0X2FudGVubmFfbW9kZShhaCwgYWgtPmFoX2FudF9tb2RlKTsKIAorCS8qIFJlc3RvcmUgc2xvdCB0aW1lIGFuZCBBQ0sgdGltZW91dHMgKi8KKwlpZiAoYWgtPmFoX2NvdmVyYWdlX2NsYXNzID4gMCkKKwkJYXRoNWtfaHdfc2V0X2NvdmVyYWdlX2NsYXNzKGFoLCBhaC0+YWhfY292ZXJhZ2VfY2xhc3MpOworCiAJLyoKIAkgKiBDb25maWd1cmUgUUNVcy9EQ1VzCiAJICovCkBAIC0xMzcxLDggKzEzNzQsOSBAQAogCSAqIFNldCBjbG9ja3MgdG8gMzJLSHogb3BlcmF0aW9uIGFuZCB1c2UgYW4KIAkgKiBleHRlcm5hbCAzMktIeiBjcnlzdGFsIHdoZW4gc2xlZXBpbmcgaWYgb25lCiAJICogZXhpc3RzICovCi0JaWYgKGFoLT5haF92ZXJzaW9uID09IEFSNUtfQVI1MjEyKQotCQkJYXRoNWtfaHdfc2V0X3NsZWVwX2Nsb2NrKGFoLCB0cnVlKTsKKwlpZiAoYWgtPmFoX3ZlcnNpb24gPT0gQVI1S19BUjUyMTIgJiYKKwkgICAgYWgtPmFoX29wX21vZGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApCisJCWF0aDVrX2h3X3NldF9zbGVlcF9jbG9jayhhaCwgdHJ1ZSk7CiAKIAkvKgogCSAqIERpc2FibGUgYmVhY29ucyBhbmQgcmVzZXQgdGhlIHJlZ2lzdGVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvTWFrZWZpbGUKaW5kZXggNDk4NWIyYi4uNmI1MGQ1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9NYWtlZmlsZQpAQCAtMSw0ICsxLDYgQEAKIGF0aDlrLXkgKz0JYmVhY29uLm8gXAorCQlncGlvLm8gXAorCQlpbml0Lm8gXAogCQltYWluLm8gXAogCQlyZWN2Lm8gXAogCQl4bWl0Lm8gXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FoYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2FoYi5jCmluZGV4IDMyOWU2YmMuLmNhNDk5NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9haGIuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYWhiLmMKQEAgLTI3LDEyICsyNyw2IEBACiAJKmNzeiA9IEwxX0NBQ0hFX0JZVEVTID4+IDI7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aF9haGJfY2xlYW51cChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uKQotewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKiljb21tb24tPnByaXY7Ci0JaW91bm1hcChzYy0+bWVtKTsKLX0KLQogc3RhdGljIGJvb2wgYXRoX2FoYl9lZXByb21fcmVhZChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCiB7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKWNvbW1vbi0+cHJpdjsKQEAgLTU0LDggKzQ4LDYgQEAKIAogc3RhdGljIHN0cnVjdCBhdGhfYnVzX29wcyBhdGhfYWhiX2J1c19vcHMgID0gewogCS5yZWFkX2NhY2hlc2l6ZSA9IGF0aF9haGJfcmVhZF9jYWNoZXNpemUsCi0JLmNsZWFudXAgPSBhdGhfYWhiX2NsZWFudXAsCi0KIAkuZWVwcm9tX3JlYWQgPSBhdGhfYWhiX2VlcHJvbV9yZWFkLAogfTsKIApAQCAtMTIxLDE2ICsxMTMsMTkgQEAKIAlzYy0+bWVtID0gbWVtOwogCXNjLT5pcnEgPSBpcnE7CiAKLQlyZXQgPSBhdGhfaW5pdF9kZXZpY2UoQVI1NDE2X0FSOTEwMF9ERVZJRCwgc2MsIDB4MCwgJmF0aF9haGJfYnVzX29wcyk7Ci0JaWYgKHJldCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGlhbGl6ZSBkZXZpY2VcbiIpOwotCQlnb3RvIGVycl9mcmVlX2h3OwotCX0KKwkvKiBXaWxsIGJlIGNsZWFyZWQgaW4gYXRoOWtfc3RhcnQoKSAqLworCXNjLT5zY19mbGFncyB8PSBTQ19PUF9JTlZBTElEOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBhdGhfaXNyLCBJUlFGX1NIQVJFRCwgImF0aDlrIiwgc2MpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVxdWVzdF9pcnEgZmFpbGVkXG4iKTsKLQkJZ290byBlcnJfZGV0YWNoOworCQlnb3RvIGVycl9mcmVlX2h3OworCX0KKworCXJldCA9IGF0aDlrX2luaXRfZGV2aWNlKEFSNTQxNl9BUjkxMDBfREVWSUQsIHNjLCAweDAsICZhdGhfYWhiX2J1c19vcHMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfaXJxOwogCX0KIAogCWFoID0gc2MtPnNjX2FoOwpAQCAtMTQzLDggKzEzOCw4IEBACiAKIAlyZXR1cm4gMDsKIAotIGVycl9kZXRhY2g6Ci0JYXRoX2RldGFjaChzYyk7CisgZXJyX2lycToKKwlmcmVlX2lycShpcnEsIHNjKTsKICBlcnJfZnJlZV9odzoKIAlpZWVlODAyMTFfZnJlZV9odyhodyk7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CkBAIC0xNjEsOCArMTU2LDEyIEBACiAJaWYgKGh3KSB7CiAJCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAkJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBhcGh5LT5zYzsKKwkJdm9pZCBfX2lvbWVtICptZW0gPSBzYy0+bWVtOwogCi0JCWF0aF9jbGVhbnVwKHNjKTsKKwkJYXRoOWtfZGVpbml0X2RldmljZShzYyk7CisJCWZyZWVfaXJxKHNjLT5pcnEsIHNjKTsKKwkJaWVlZTgwMjExX2ZyZWVfaHcoc2MtPmh3KTsKKwkJaW91bm1hcChtZW0pOwogCQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9hdGg5ay5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKaW5kZXggMTU5N2E0Mi4uODNjN2VhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2F0aDlrLmgKQEAgLTI2Nyw2ICsyNjcsNyBAQAogCQkgICAgICAgdTE2IHRpZCwgdTE2ICpzc24pOwogdm9pZCBhdGhfdHhfYWdncl9zdG9wKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKIHZvaWQgYXRoX3R4X2FnZ3JfcmVzdW1lKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkKTsKK3ZvaWQgYXRoOWtfZW5hYmxlX3BzKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKIAogLyoqKioqKioqLwogLyogVklGcyAqLwpAQCAtMzQxLDYgKzM0MiwxMiBAQAogI2RlZmluZSBBVEhfTE9OR19DQUxJTlRFUlZBTCAgICAgIDMwMDAwICAgLyogMzAgc2Vjb25kcyAqLwogI2RlZmluZSBBVEhfUkVTVEFSVF9DQUxJTlRFUlZBTCAgIDEyMDAwMDAgLyogMjAgbWludXRlcyAqLwogCit2b2lkIGF0aF9hbmlfY2FsaWJyYXRlKHVuc2lnbmVkIGxvbmcgZGF0YSk7CisKKy8qKioqKioqKioqLworLyogQlRDT0VYICovCisvKioqKioqKioqKi8KKwogLyogRGVmaW5lcyB0aGUgQlQgQVJfQlRfQ09FWF9XR0hUIHVzZWQgKi8KIGVudW0gYXRoX3N0b21wX3R5cGUgewogCUFUSF9CVENPRVhfTk9fU1RPTVAsCkBAIC0zNTgsOSArMzY1LDE0IEBACiAJaW50IGJ0X3N0b21wX3R5cGU7IC8qIFR5cGVzIG9mIEJUIHN0b21waW5nICovCiAJdTMyIGJ0Y29leF9ub19zdG9tcDsgLyogaW4gdXNlYyAqLwogCXUzMiBidGNvZXhfcGVyaW9kOyAvKiBpbiB1c2VjICovCisJdTMyIGJ0c2Nhbl9ub19zdG9tcDsgLyogaW4gdXNlYyAqLwogCXN0cnVjdCBhdGhfZ2VuX3RpbWVyICpub19zdG9tcF90aW1lcjsgLyogVGltZXIgZm9yIG5vIEJUIHN0b21waW5nICovCiB9OwogCitpbnQgYXRoX2luaXRfYnRjb2V4X3RpbWVyKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3ZvaWQgYXRoOWtfYnRjb2V4X3RpbWVyX3Jlc3VtZShzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aDlrX2J0Y29leF90aW1lcl9wYXVzZShzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CisKIC8qKioqKioqKioqKioqKioqKioqKi8KIC8qICAgTEVEIENvbnRyb2wgICAgKi8KIC8qKioqKioqKioqKioqKioqKioqKi8KQEAgLTM4NSw2ICszOTcsOSBAQAogCWJvb2wgcmVnaXN0ZXJlZDsKIH07CiAKK3ZvaWQgYXRoX2luaXRfbGVkcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Cit2b2lkIGF0aF9kZWluaXRfbGVkcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CisKIC8qKioqKioqKioqKioqKioqKioqKi8KIC8qIE1haW4gZHJpdmVyIGNvcmUgKi8KIC8qKioqKioqKioqKioqKioqKioqKi8KQEAgLTQwMywyNiArNDE4LDI5IEBACiAjZGVmaW5lIEFUSF9UWFBPV0VSX01BWCAgICAgICAgIDEwMCAgICAgLyogLjUgZEJtIHVuaXRzICovCiAjZGVmaW5lIEFUSF9SQVRFX0RVTU1ZX01BUktFUiAgIDAKIAotI2RlZmluZSBTQ19PUF9JTlZBTElEICAgICAgICAgICBCSVQoMCkKLSNkZWZpbmUgU0NfT1BfQkVBQ09OUyAgICAgICAgICAgQklUKDEpCi0jZGVmaW5lIFNDX09QX1JYQUdHUiAgICAgICAgICAgIEJJVCgyKQotI2RlZmluZSBTQ19PUF9UWEFHR1IgICAgICAgICAgICBCSVQoMykKLSNkZWZpbmUgU0NfT1BfRlVMTF9SRVNFVCAgICAgICAgQklUKDQpCi0jZGVmaW5lIFNDX09QX1BSRUFNQkxFX1NIT1JUICAgIEJJVCg1KQotI2RlZmluZSBTQ19PUF9QUk9URUNUX0VOQUJMRSAgICBCSVQoNikKLSNkZWZpbmUgU0NfT1BfUlhGTFVTSCAgICAgICAgICAgQklUKDcpCi0jZGVmaW5lIFNDX09QX0xFRF9BU1NPQ0lBVEVEICAgIEJJVCg4KQotI2RlZmluZSBTQ19PUF9XQUlUX0ZPUl9CRUFDT04gICBCSVQoMTIpCi0jZGVmaW5lIFNDX09QX0xFRF9PTiAgICAgICAgICAgIEJJVCgxMykKLSNkZWZpbmUgU0NfT1BfU0NBTk5JTkcgICAgICAgICAgQklUKDE0KQotI2RlZmluZSBTQ19PUF9UU0ZfUkVTRVQgICAgICAgICBCSVQoMTUpCi0jZGVmaW5lIFNDX09QX1dBSVRfRk9SX0NBQiAgICAgIEJJVCgxNikKLSNkZWZpbmUgU0NfT1BfV0FJVF9GT1JfUFNQT0xMX0RBVEEgQklUKDE3KQotI2RlZmluZSBTQ19PUF9XQUlUX0ZPUl9UWF9BQ0sgICBCSVQoMTgpCi0jZGVmaW5lIFNDX09QX0JFQUNPTl9TWU5DICAgICAgIEJJVCgxOSkKLSNkZWZpbmUgU0NfT1BfQlRfUFJJT1JJVFlfREVURUNURUQgQklUKDIxKQotI2RlZmluZSBTQ19PUF9OVUxMRlVOQ19DT01QTEVURUQgQklUKDIyKQotI2RlZmluZSBTQ19PUF9QU19FTkFCTEVECUJJVCgyMykKKyNkZWZpbmUgU0NfT1BfSU5WQUxJRCAgICAgICAgICAgICAgICBCSVQoMCkKKyNkZWZpbmUgU0NfT1BfQkVBQ09OUyAgICAgICAgICAgICAgICBCSVQoMSkKKyNkZWZpbmUgU0NfT1BfUlhBR0dSICAgICAgICAgICAgICAgICBCSVQoMikKKyNkZWZpbmUgU0NfT1BfVFhBR0dSICAgICAgICAgICAgICAgICBCSVQoMykKKyNkZWZpbmUgU0NfT1BfRlVMTF9SRVNFVCAgICAgICAgICAgICBCSVQoNCkKKyNkZWZpbmUgU0NfT1BfUFJFQU1CTEVfU0hPUlQgICAgICAgICBCSVQoNSkKKyNkZWZpbmUgU0NfT1BfUFJPVEVDVF9FTkFCTEUgICAgICAgICBCSVQoNikKKyNkZWZpbmUgU0NfT1BfUlhGTFVTSCAgICAgICAgICAgICAgICBCSVQoNykKKyNkZWZpbmUgU0NfT1BfTEVEX0FTU09DSUFURUQgICAgICAgICBCSVQoOCkKKyNkZWZpbmUgU0NfT1BfTEVEX09OICAgICAgICAgICAgICAgICBCSVQoOSkKKyNkZWZpbmUgU0NfT1BfU0NBTk5JTkcgICAgICAgICAgICAgICBCSVQoMTApCisjZGVmaW5lIFNDX09QX1RTRl9SRVNFVCAgICAgICAgICAgICAgQklUKDExKQorI2RlZmluZSBTQ19PUF9CVF9QUklPUklUWV9ERVRFQ1RFRCAgIEJJVCgxMikKKyNkZWZpbmUgU0NfT1BfQlRfU0NBTgkJICAgICBCSVQoMTMpCisKKy8qIFBvd2Vyc2F2ZSBmbGFncyAqLworI2RlZmluZSBQU19XQUlUX0ZPUl9CRUFDT04gICAgICAgIEJJVCgwKQorI2RlZmluZSBQU19XQUlUX0ZPUl9DQUIgICAgICAgICAgIEJJVCgxKQorI2RlZmluZSBQU19XQUlUX0ZPUl9QU1BPTExfREFUQSAgIEJJVCgyKQorI2RlZmluZSBQU19XQUlUX0ZPUl9UWF9BQ0sgICAgICAgIEJJVCgzKQorI2RlZmluZSBQU19CRUFDT05fU1lOQyAgICAgICAgICAgIEJJVCg0KQorI2RlZmluZSBQU19OVUxMRlVOQ19DT01QTEVURUQgICAgIEJJVCg1KQorI2RlZmluZSBQU19FTkFCTEVEICAgICAgICAgICAgICAgIEJJVCg2KQogCiBzdHJ1Y3QgYXRoX3dpcGh5Owogc3RydWN0IGF0aF9yYXRlX3RhYmxlOwpAQCAtNDUzLDE2ICs0NzEsMTcgQEAKIAlpbnQgaXJxOwogCXNwaW5sb2NrX3Qgc2NfcmVzZXRsb2NrOwogCXNwaW5sb2NrX3Qgc2Nfc2VyaWFsX3J3OwotCXNwaW5sb2NrX3QgYW5pX2xvY2s7CiAJc3BpbmxvY2tfdCBzY19wbV9sb2NrOwogCXN0cnVjdCBtdXRleCBtdXRleDsKIAogCXUzMiBpbnRyc3RhdHVzOwogCXUzMiBzY19mbGFnczsgLyogU0NfT1BfKiAqLworCXUxNiBwc19mbGFnczsgLyogUFNfKiAqLwogCXUxNiBjdXJ0eHBvdzsKIAl1OCBuYmNudmlmczsKIAl1MTYgbnZpZnM7CiAJYm9vbCBwc19lbmFibGVkOworCWJvb2wgcHNfaWRsZTsKIAl1bnNpZ25lZCBsb25nIHBzX3VzZWNvdW50OwogCWVudW0gYXRoOWtfaW50IGltYXNrOwogCkBAIC01MDksNiArNTI4LDcgQEAKIAlpbnQgY2hhbl9pc19odDsKIH07CiAKK3ZvaWQgYXRoOWtfdGFza2xldCh1bnNpZ25lZCBsb25nIGRhdGEpOwogaW50IGF0aF9yZXNldChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgYm9vbCByZXRyeV90eCk7CiBpbnQgYXRoX2dldF9oYWxfcW51bSh1MTYgcXVldWUsIHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKIGludCBhdGhfZ2V0X21hYzgwMjExX3FudW0odTMyIHF1ZXVlLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CkBAIC01MTksMjEgKzUzOSwxNiBAQAogCWNvbW1vbi0+YnVzX29wcy0+cmVhZF9jYWNoZXNpemUoY29tbW9uLCBjc3opOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRoX2J1c19jbGVhbnVwKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24pCi17Ci0JY29tbW9uLT5idXNfb3BzLT5jbGVhbnVwKGNvbW1vbik7Ci19Ci0KIGV4dGVybiBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg5a19vcHM7CitleHRlcm4gaW50IG1vZHBhcmFtX25vaHdjcnlwdDsKIAogaXJxcmV0dXJuX3QgYXRoX2lzcihpbnQgaXJxLCB2b2lkICpkZXYpOwotdm9pZCBhdGhfY2xlYW51cChzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7Ci1pbnQgYXRoX2luaXRfZGV2aWNlKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHUxNiBzdWJzeXNpZCwKK2ludCBhdGg5a19pbml0X2RldmljZSh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYgc3Vic3lzaWQsCiAJCSAgICBjb25zdCBzdHJ1Y3QgYXRoX2J1c19vcHMgKmJ1c19vcHMpOwotdm9pZCBhdGhfZGV0YWNoKHN0cnVjdCBhdGhfc29mdGMgKnNjKTsKK3ZvaWQgYXRoOWtfZGVpbml0X2RldmljZShzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CiBjb25zdCBjaGFyICphdGhfbWFjX2JiX25hbWUodTMyIG1hY19iYl92ZXJzaW9uKTsKIGNvbnN0IGNoYXIgKmF0aF9yZl9uYW1lKHUxNiByZl92ZXJzaW9uKTsKLXZvaWQgYXRoX3NldF9od19jYXBhYihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCBhdGg5a19zZXRfaHdfY2FwYWIoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIHZvaWQgYXRoOWtfdXBkYXRlX2ljaGFubmVsKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgIHN0cnVjdCBhdGg5a19jaGFubmVsICppY2hhbik7CiB2b2lkIGF0aF91cGRhdGVfY2hhaW5tYXNrKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgaXNfaHQpOwpAQCAtNTQyLDYgKzU1Nyw3IEBACiAKIHZvaWQgYXRoX3JhZGlvX2VuYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBhdGhfcmFkaW9fZGlzYWJsZShzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworYm9vbCBhdGg5a19zZXRwb3dlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgZW51bSBhdGg5a19wb3dlcl9tb2RlIG1vZGUpOwogCiAjaWZkZWYgQ09ORklHX1BDSQogaW50IGF0aF9wY2lfaW5pdCh2b2lkKTsKQEAgLTU4Myw0ICs1OTksOCBAQAogdm9pZCBhdGhfbWFjODAyMTFfc3RhcnRfcXVldWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHUxNiBza2JfcXVldWUpOwogCiBpbnQgYXRoX3R4X2dldF9xbnVtKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcXR5cGUsIGludCBoYWx0eXBlKTsKKwordm9pZCBhdGhfc3RhcnRfcmZraWxsX3BvbGwoc3RydWN0IGF0aF9zb2Z0YyAqc2MpOworZXh0ZXJuIHZvaWQgYXRoOWtfcmZraWxsX3BvbGxfc3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOworCiAjZW5kaWYgLyogQVRIOUtfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2JlYWNvbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2JlYWNvbi5jCmluZGV4IDE2NjBlZjEuLmI0YTMxYTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9iZWFjb24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYmVhY29uLmMKQEAgLTYyLDcgKzYyLDcgQEAKICAqICBCZWFjb25zIGFyZSBhbHdheXMgc2VudCBvdXQgYXQgdGhlIGxvd2VzdCByYXRlLCBhbmQgYXJlIG5vdCByZXRyaWVkLgogKi8KIHN0YXRpYyB2b2lkIGF0aF9iZWFjb25fc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfdmlmICphdnAsCi0JCQkgICAgIHN0cnVjdCBhdGhfYnVmICpiZikKKwkJCSAgICAgc3RydWN0IGF0aF9idWYgKmJmLCBpbnQgcmF0ZWlkeCkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYmYtPmJmX21wZHU7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CkBAIC05Niw5ICs5Niw5IEBACiAJZHMtPmRzX2RhdGEgPSBiZi0+YmZfYnVmX2FkZHI7CiAKIAlzYmFuZCA9ICZzYy0+c2JhbmRzW2NvbW1vbi0+aHctPmNvbmYuY2hhbm5lbC0+YmFuZF07Ci0JcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1swXS5od192YWx1ZTsKKwlyYXRlID0gc2JhbmQtPmJpdHJhdGVzW3JhdGVpZHhdLmh3X3ZhbHVlOwogCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9QUkVBTUJMRV9TSE9SVCkKLQkJcmF0ZSB8PSBzYmFuZC0+Yml0cmF0ZXNbMF0uaHdfdmFsdWVfc2hvcnQ7CisJCXJhdGUgfD0gc2JhbmQtPmJpdHJhdGVzW3JhdGVpZHhdLmh3X3ZhbHVlX3Nob3J0OwogCiAJYXRoOWtfaHdfc2V0MTFuX3R4ZGVzYyhhaCwgZHMsIHNrYi0+bGVuICsgRkNTX0xFTiwKIAkJCSAgICAgICBBVEg5S19QS1RfVFlQRV9CRUFDT04sCkBAIC0yMDYsNyArMjA2LDcgQEAKIAkJfQogCX0KIAotCWF0aF9iZWFjb25fc2V0dXAoc2MsIGF2cCwgYmYpOworCWF0aF9iZWFjb25fc2V0dXAoc2MsIGF2cCwgYmYsIGluZm8tPmNvbnRyb2wucmF0ZXNbMF0uaWR4KTsKIAogCXdoaWxlIChza2IpIHsKIAkJYXRoX3R4X2NhYnEoaHcsIHNrYik7CkBAIC0yMzcsNyArMjM3LDcgQEAKIAliZiA9IGF2cC0+YXZfYmNidWY7CiAJc2tiID0gYmYtPmJmX21wZHU7CiAKLQlhdGhfYmVhY29uX3NldHVwKHNjLCBhdnAsIGJmKTsKKwlhdGhfYmVhY29uX3NldHVwKHNjLCBhdnAsIGJmLCAwKTsKIAogCS8qIE5COiBjYWxsZXIgaXMga25vd24gdG8gaGF2ZSBhbHJlYWR5IHN0b3BwZWQgdHggZG1hICovCiAJYXRoOWtfaHdfcHV0dHhidWYoYWgsIHNjLT5iZWFjb24uYmVhY29ucSwgYmYtPmJmX2RhZGRyKTsKQEAgLTQ4MCw3ICs0ODAsOCBAQAogCQlzYy0+YmVhY29uLnVwZGF0ZXNsb3QgPSBDT01NSVQ7IC8qIGNvbW1pdCBuZXh0IGJlYWNvbiAqLwogCQlzYy0+YmVhY29uLnNsb3R1cGRhdGUgPSBzbG90OwogCX0gZWxzZSBpZiAoc2MtPmJlYWNvbi51cGRhdGVzbG90ID09IENPTU1JVCAmJiBzYy0+YmVhY29uLnNsb3R1cGRhdGUgPT0gc2xvdCkgewotCQlhdGg5a19od19zZXRzbG90dGltZShzYy0+c2NfYWgsIHNjLT5iZWFjb24uc2xvdHRpbWUpOworCQlhaC0+c2xvdHRpbWUgPSBzYy0+YmVhY29uLnNsb3R0aW1lOworCQlhdGg5a19od19pbml0X2dsb2JhbF9zZXR0aW5ncyhhaCk7CiAJCXNjLT5iZWFjb24udXBkYXRlc2xvdCA9IE9LOwogCX0KIAlpZiAoYmZhZGRyICE9IDApIHsKQEAgLTUyNSwxNiArNTI2LDEzIEBACiB7CiAJdTMyIG5leHR0YnR0LCBpbnR2YWw7CiAKLQkvKiBDb25maWd1cmUgdGhlIHRpbWVycyBvbmx5IHdoZW4gdGhlIFRTRiBoYXMgdG8gYmUgcmVzZXQgKi8KLQotCWlmICghKHNjLT5zY19mbGFncyAmIFNDX09QX1RTRl9SRVNFVCkpCi0JCXJldHVybjsKLQogCS8qIE5COiB0aGUgYmVhY29uIGludGVydmFsIGlzIGtlcHQgaW50ZXJuYWxseSBpbiBUVSdzICovCiAJaW50dmFsID0gY29uZi0+YmVhY29uX2ludGVydmFsICYgQVRIOUtfQkVBQ09OX1BFUklPRDsKIAlpbnR2YWwgLz0gQVRIX0JDQlVGOyAgICAvKiBmb3Igc3RhZ2dlcmVkIGJlYWNvbnMgKi8KIAluZXh0dGJ0dCA9IGludHZhbDsKLQlpbnR2YWwgfD0gQVRIOUtfQkVBQ09OX1JFU0VUX1RTRjsKKworCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9UU0ZfUkVTRVQpCisJCWludHZhbCB8PSBBVEg5S19CRUFDT05fUkVTRVRfVFNGOwogCiAJLyoKIAkgKiBJbiBBUCBtb2RlIHdlIGVuYWJsZSB0aGUgYmVhY29uIHRpbWVycyBhbmQgU1dCQSBpbnRlcnJ1cHRzIHRvCkBAIC01NzYsNiArNTc0LDEzIEBACiAJdTY0IHRzZjsKIAlpbnQgbnVtX2JlYWNvbnMsIG9mZnNldCwgZHRpbV9kZWNfY291bnQsIGNmcF9kZWNfY291bnQ7CiAKKwkvKiBObyBuZWVkIHRvIGNvbmZpZ3VyZSBiZWFjb24gaWYgd2UgYXJlIG5vdCBhc3NvY2lhdGVkICovCisJaWYgKCFjb21tb24tPmN1cmFpZCkgeworCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0JFQUNPTiwKKwkJCSAiU1RBIGlzIG5vdCB5ZXQgYXNzb2NpYXRlZC4uc2tpcHBpbmcgYmVhY29uIGNvbmZpZ1xuIik7CisJCXJldHVybjsKKwl9CisKIAltZW1zZXQoJmJzLCAwLCBzaXplb2YoYnMpKTsKIAlpbnR2YWwgPSBjb25mLT5iZWFjb25faW50ZXJ2YWwgJiBBVEg5S19CRUFDT05fUEVSSU9EOwogCkBAIC03MzgsNyArNzQzLDYgQEAKIAllbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZTsKIAogCS8qIFNldHVwIHRoZSBiZWFjb24gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovCi0KIAlpZiAodmlmKSB7CiAJCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mID0gJnZpZi0+YnNzX2NvbmY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9idGNvZXguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9idGNvZXguaAppbmRleCAxYmEzMWE3Li4xZWU1YTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvYnRjb2V4LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2J0Y29leC5oCkBAIC0yNSwxMCArMjUsMTIgQEAKIAogI2RlZmluZSBBVEhfQlRDT0VYX0RFRl9CVF9QRVJJT0QgIDQ1CiAjZGVmaW5lIEFUSF9CVENPRVhfREVGX0RVVFlfQ1lDTEUgNTUKKyNkZWZpbmUgQVRIX0JUQ09FWF9CVFNDQU5fRFVUWV9DWUNMRSA5MAogI2RlZmluZSBBVEhfQlRDT0VYX0JNSVNTX1RIUkVTSCAgIDUwCiAKICNkZWZpbmUgQVRIX0JUX1BSSU9SSVRZX1RJTUVfVEhSRVNIT0xEIDEwMDAgLyogbXMgKi8KICNkZWZpbmUgQVRIX0JUX0NOVF9USFJFU0hPTEQJICAgICAgIDMKKyNkZWZpbmUgQVRIX0JUX0NOVF9TQ0FOX1RIUkVTSE9MRCAgICAgIDE1CiAKIGVudW0gYXRoX2J0Y29leF9zY2hlbWUgewogCUFUSF9CVENPRVhfQ0ZHX05PTkUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jCmluZGV4IGI2NmY3MmQuLjQyZDJhNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5jCkBAIC03NSwxNyArNzUsMjQgQEAKIAogI2VuZGlmCiAKKyNkZWZpbmUgRE1BX0JVRl9MRU4gMTAyNAorCiBzdGF0aWMgc3NpemVfdCByZWFkX2ZpbGVfZG1hKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCWNoYXIgYnVmWzEwMjRdOworCWNoYXIgKmJ1ZjsKKwlpbnQgcmV0dmFsOwogCXVuc2lnbmVkIGludCBsZW4gPSAwOwogCXUzMiB2YWxbQVRIOUtfTlVNX0RNQV9ERUJVR19SRUdTXTsKIAlpbnQgaSwgcWN1T2Zmc2V0ID0gMCwgZGN1T2Zmc2V0ID0gMDsKIAl1MzIgKnFjdUJhc2UgPSAmdmFsWzBdLCAqZGN1QmFzZSA9ICZ2YWxbNF07CiAKKwlidWYgPSBrbWFsbG9jKERNQV9CVUZfTEVOLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIDA7CisKIAlhdGg5a19wc193YWtldXAoc2MpOwogCiAJUkVHX1dSSVRFX0QoYWgsIEFSX01BQ01JU0MsCkBAIC05MywyMCArMTAwLDIwIEBACiAJCSAgIChBUl9NQUNNSVNDX01JU0NfT0JTX0JVU18xIDw8CiAJCSAgICBBUl9NQUNNSVNDX01JU0NfT0JTX0JVU19NU0JfUykpKTsKIAotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIERNQV9CVUZfTEVOIC0gbGVuLAogCQkJIlJhdyBETUEgRGVidWcgdmFsdWVzOlxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX0RNQV9ERUJVR19SRUdTOyBpKyspIHsKIAkJaWYgKGkgJSA0ID09IDApCi0JCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwgIlxuIik7CisJCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBETUFfQlVGX0xFTiAtIGxlbiwgIlxuIik7CiAKIAkJdmFsW2ldID0gUkVHX1JFQURfRChhaCwgQVJfRE1BREJHXzAgKyAoaSAqIHNpemVvZih1MzIpKSk7Ci0JCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLCAiJWQ6ICUwOHggIiwKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgRE1BX0JVRl9MRU4gLSBsZW4sICIlZDogJTA4eCAiLAogCQkJCWksIHZhbFtpXSk7CiAJfQogCi0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sICJcblxuIik7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgRE1BX0JVRl9MRU4gLSBsZW4sICJcblxuIik7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgRE1BX0JVRl9MRU4gLSBsZW4sCiAJCQkiTnVtIFFDVTogY2hhaW5fc3QgZnNwX29rIGZzcF9zdCBEQ1U6IGNoYWluX3N0XG4iKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fUVVFVUVTOyBpKyssIHFjdU9mZnNldCArPSA0LCBkY3VPZmZzZXQgKz0gNSkgewpAQCAtMTIwLDcgKzEyNyw3IEBACiAJCQlkY3VCYXNlKys7CiAJCX0KIAotCQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwkJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgRE1BX0JVRl9MRU4gLSBsZW4sCiAJCQkiJTJkICAgICAgICAgICUyeCAgICAgICUxeCAgICAgJTJ4ICAgICAgICAgICAlMnhcbiIsCiAJCQlpLCAoKnFjdUJhc2UgJiAoMHg3IDw8IHFjdU9mZnNldCkpID4+IHFjdU9mZnNldCwKIAkJCSgqcWN1QmFzZSAmICgweDggPDwgcWN1T2Zmc2V0KSkgPj4gKHFjdU9mZnNldCArIDMpLApAQCAtMTI4LDM1ICsxMzUsMzcgQEAKIAkJCSgqZGN1QmFzZSAmICgweDFmIDw8IGRjdU9mZnNldCkpID4+IGRjdU9mZnNldCk7CiAJfQogCi0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sICJcbiIpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIERNQV9CVUZfTEVOIC0gbGVuLCAiXG4iKTsKIAotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIERNQV9CVUZfTEVOIC0gbGVuLAogCQkicWN1X3N0aXRjaCBzdGF0ZTogICAlMnggICAgcWN1X2ZldGNoIHN0YXRlOiAgICAgICAgJTJ4XG4iLAogCQkodmFsWzNdICYgMHgwMDNjMDAwMCkgPj4gMTgsICh2YWxbM10gJiAweDAzYzAwMDAwKSA+PiAyMik7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgRE1BX0JVRl9MRU4gLSBsZW4sCiAJCSJxY3VfY29tcGxldGUgc3RhdGU6ICUyeCAgICBkY3VfY29tcGxldGUgc3RhdGU6ICAgICAlMnhcbiIsCiAJCSh2YWxbM10gJiAweDFjMDAwMDAwKSA+PiAyNiwgKHZhbFs2XSAmIDB4MykpOwotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIERNQV9CVUZfTEVOIC0gbGVuLAogCQkiZGN1X2FyYiBzdGF0ZTogICAgICAlMnggICAgZGN1X2ZwIHN0YXRlOiAgICAgICAgICAgJTJ4XG4iLAogCQkodmFsWzVdICYgMHgwNjAwMDAwMCkgPj4gMjUsICh2YWxbNV0gJiAweDM4MDAwMDAwKSA+PiAyNyk7Ci0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgRE1BX0JVRl9MRU4gLSBsZW4sCiAJCSJjaGFuX2lkbGVfZHVyOiAgICAgJTNkICAgIGNoYW5faWRsZV9kdXJfdmFsaWQ6ICAgICAlMWRcbiIsCiAJCSh2YWxbNl0gJiAweDAwMDAwM2ZjKSA+PiAyLCAodmFsWzZdICYgMHgwMDAwMDQwMCkgPj4gMTApOwotCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemVvZihidWYpIC0gbGVuLAorCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIERNQV9CVUZfTEVOIC0gbGVuLAogCQkidHhmaWZvX3ZhbGlkXzA6ICAgICAgJTFkICAgIHR4Zmlmb192YWxpZF8xOiAgICAgICAgICAlMWRcbiIsCiAJCSh2YWxbNl0gJiAweDAwMDAwODAwKSA+PiAxMSwgKHZhbFs2XSAmIDB4MDAwMDEwMDApID4+IDEyKTsKLQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBETUFfQlVGX0xFTiAtIGxlbiwKIAkJInR4Zmlmb19kY3VfbnVtXzA6ICAgJTJkICAgIHR4Zmlmb19kY3VfbnVtXzE6ICAgICAgICUyZFxuIiwKIAkJKHZhbFs2XSAmIDB4MDAwMWUwMDApID4+IDEzLCAodmFsWzZdICYgMHgwMDFlMDAwMCkgPj4gMTcpOwogCi0JbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZW9mKGJ1ZikgLSBsZW4sICJwY3Ugb2JzZXJ2ZTogMHgleCBcbiIsCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgRE1BX0JVRl9MRU4gLSBsZW4sICJwY3Ugb2JzZXJ2ZTogMHgleCBcbiIsCiAJCQlSRUdfUkVBRF9EKGFoLCBBUl9PQlNfQlVTXzEpKTsKLQlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBzaXplb2YoYnVmKSAtIGxlbiwKKwlsZW4gKz0gc25wcmludGYoYnVmICsgbGVuLCBETUFfQlVGX0xFTiAtIGxlbiwKIAkJCSJBUl9DUjogMHgleCBcbiIsIFJFR19SRUFEX0QoYWgsIEFSX0NSKSk7CiAKIAlhdGg5a19wc19yZXN0b3JlKHNjKTsKIAotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKKwlyZXR2YWwgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKKwlrZnJlZShidWYpOworCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZvcHNfZG1hID0gewpAQCAtMjg5LDIzICsyOTgsNDkgQEAKIAlpZiAoc2MtPmN1cl9yYXRlX3RhYmxlID09IE5VTEwpCiAJCXJldHVybiAwOwogCi0JbWF4ID0gODAgKyBzYy0+Y3VyX3JhdGVfdGFibGUtPnJhdGVfY250ICogNjQ7CisJbWF4ID0gODAgKyBzYy0+Y3VyX3JhdGVfdGFibGUtPnJhdGVfY250ICogMTAyNDsKIAlidWYgPSBrbWFsbG9jKG1heCArIDEsIEdGUF9LRVJORUwpOwogCWlmIChidWYgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAJYnVmW21heF0gPSAwOwogCi0JbGVuICs9IHNwcmludGYoYnVmLCAiJTVzICUxNXMgJThzICU5cyAlM3NcblxuIiwgIlJhdGUiLCAiU3VjY2VzcyIsCi0JCSAgICAgICAiUmV0cmllcyIsICJYUmV0cmllcyIsICJQRVIiKTsKKwlsZW4gKz0gc3ByaW50ZihidWYsICIlNnMgJTZzICU2cyAiCisJCSAgICAgICAiJTEwcyAlMTBzICUxMHMgJTEwc1xuIiwKKwkJICAgICAgICJIVCIsICJNQ1MiLCAiUmF0ZSIsCisJCSAgICAgICAiU3VjY2VzcyIsICJSZXRyaWVzIiwgIlhSZXRyaWVzIiwgIlBFUiIpOwogCiAJZm9yIChpID0gMDsgaSA8IHNjLT5jdXJfcmF0ZV90YWJsZS0+cmF0ZV9jbnQ7IGkrKykgewogCQl1MzIgcmF0ZWticHMgPSBzYy0+Y3VyX3JhdGVfdGFibGUtPmluZm9baV0ucmF0ZWticHM7CiAJCXN0cnVjdCBhdGhfcmNfc3RhdHMgKnN0YXRzID0gJnNjLT5kZWJ1Zy5zdGF0cy5yY3N0YXRzW2ldOworCQljaGFyIG1jc1s1XTsKKwkJY2hhciBodG1vZGVbNV07CisJCWludCB1c2VkX21jcyA9IDAsIHVzZWRfaHRtb2RlID0gMDsKKworCQlpZiAoV0xBTl9SQ19QSFlfSFQoc2MtPmN1cl9yYXRlX3RhYmxlLT5pbmZvW2ldLnBoeSkpIHsKKwkJCXVzZWRfbWNzID0gc25wcmludGYobWNzLCA1LCAiJWQiLAorCQkJCXNjLT5jdXJfcmF0ZV90YWJsZS0+aW5mb1tpXS5yYXRlY29kZSk7CisKKwkJCWlmIChXTEFOX1JDX1BIWV80MChzYy0+Y3VyX3JhdGVfdGFibGUtPmluZm9baV0ucGh5KSkKKwkJCQl1c2VkX2h0bW9kZSA9IHNucHJpbnRmKGh0bW9kZSwgNSwgIkhUNDAiKTsKKwkJCWVsc2UgaWYgKFdMQU5fUkNfUEhZXzIwKHNjLT5jdXJfcmF0ZV90YWJsZS0+aW5mb1tpXS5waHkpKQorCQkJCXVzZWRfaHRtb2RlID0gc25wcmludGYoaHRtb2RlLCA1LCAiSFQyMCIpOworCQkJZWxzZQorCQkJCXVzZWRfaHRtb2RlID0gc25wcmludGYoaHRtb2RlLCA1LCAiPz8/PyIpOworCQl9CisKKwkJbWNzW3VzZWRfbWNzXSA9ICdcMCc7CisJCWh0bW9kZVt1c2VkX2h0bW9kZV0gPSAnXDAnOwogCiAJCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIG1heCAtIGxlbiwKLQkJCSIlM3UuJWQ6ICU4dSAlOHUgJTh1ICU4dVxuIiwgcmF0ZWticHMgLyAxMDAwLAotCQkJKHJhdGVrYnBzICUgMTAwMCkgLyAxMDAsIHN0YXRzLT5zdWNjZXNzLAotCQkJc3RhdHMtPnJldHJpZXMsIHN0YXRzLT54cmV0cmllcywKKwkJCSIlNnMgJTZzICUzdS4lZDogIgorCQkJIiUxMHUgJTEwdSAlMTB1ICUxMHVcbiIsCisJCQlodG1vZGUsCisJCQltY3MsCisJCQlyYXRla2JwcyAvIDEwMDAsCisJCQkocmF0ZWticHMgJSAxMDAwKSAvIDEwMCwKKwkJCXN0YXRzLT5zdWNjZXNzLAorCQkJc3RhdHMtPnJldHJpZXMsCisJCQlzdGF0cy0+eHJldHJpZXMsCiAJCQlzdGF0cy0+cGVyKTsKIAl9CiAKQEAgLTU1NCw2ICs1ODksMTE2IEBACiAJLm93bmVyID0gVEhJU19NT0RVTEUKIH07CiAKK3N0YXRpYyBzc2l6ZV90IHJlYWRfZmlsZV9yZWN2KHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKyNkZWZpbmUgUEhZX0VSUihzLCBwKSBcCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwgIiUxOHMgOiAlMTB1XG4iLCBzLCBcCisJCQlzYy0+ZGVidWcuc3RhdHMucnhzdGF0cy5waHlfZXJyX3N0YXRzW3BdKTsKKworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgKmJ1ZjsKKwl1bnNpZ25lZCBpbnQgbGVuID0gMCwgc2l6ZSA9IDExNTI7CisJc3NpemVfdCByZXR2YWwgPSAwOworCisJYnVmID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpCisJCXJldHVybiAwOworCisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMThzIDogJTEwdVxuIiwgIkNSQyBFUlIiLAorCQkJc2MtPmRlYnVnLnN0YXRzLnJ4c3RhdHMuY3JjX2Vycik7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMThzIDogJTEwdVxuIiwgIkRFQ1JZUFQgQ1JDIEVSUiIsCisJCQlzYy0+ZGVidWcuc3RhdHMucnhzdGF0cy5kZWNyeXB0X2NyY19lcnIpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTE4cyA6ICUxMHVcbiIsICJQSFkgRVJSIiwKKwkJCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLnBoeV9lcnIpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTE4cyA6ICUxMHVcbiIsICJNSUMgRVJSIiwKKwkJCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLm1pY19lcnIpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTE4cyA6ICUxMHVcbiIsICJQUkUtREVMSU0gQ1JDIEVSUiIsCisJCQlzYy0+ZGVidWcuc3RhdHMucnhzdGF0cy5wcmVfZGVsaW1fY3JjX2Vycik7CisJbGVuICs9IHNucHJpbnRmKGJ1ZiArIGxlbiwgc2l6ZSAtIGxlbiwKKwkJCSIlMThzIDogJTEwdVxuIiwgIlBPU1QtREVMSU0gQ1JDIEVSUiIsCisJCQlzYy0+ZGVidWcuc3RhdHMucnhzdGF0cy5wb3N0X2RlbGltX2NyY19lcnIpOworCWxlbiArPSBzbnByaW50ZihidWYgKyBsZW4sIHNpemUgLSBsZW4sCisJCQkiJTE4cyA6ICUxMHVcbiIsICJERUNSWVBUIEJVU1kgRVJSIiwKKwkJCXNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLmRlY3J5cHRfYnVzeV9lcnIpOworCisJUEhZX0VSUigiVU5ERVJSVU4iLCBBVEg5S19QSFlFUlJfVU5ERVJSVU4pOworCVBIWV9FUlIoIlRJTUlORyIsIEFUSDlLX1BIWUVSUl9USU1JTkcpOworCVBIWV9FUlIoIlBBUklUWSIsIEFUSDlLX1BIWUVSUl9QQVJJVFkpOworCVBIWV9FUlIoIlJBVEUiLCBBVEg5S19QSFlFUlJfUkFURSk7CisJUEhZX0VSUigiTEVOR1RIIiwgQVRIOUtfUEhZRVJSX0xFTkdUSCk7CisJUEhZX0VSUigiUkFEQVIiLCBBVEg5S19QSFlFUlJfUkFEQVIpOworCVBIWV9FUlIoIlNFUlZJQ0UiLCBBVEg5S19QSFlFUlJfU0VSVklDRSk7CisJUEhZX0VSUigiVE9SIiwgQVRIOUtfUEhZRVJSX1RPUik7CisJUEhZX0VSUigiT0ZETS1USU1JTkciLCBBVEg5S19QSFlFUlJfT0ZETV9USU1JTkcpOworCVBIWV9FUlIoIk9GRE0tU0lHTkFMLVBBUklUWSIsIEFUSDlLX1BIWUVSUl9PRkRNX1NJR05BTF9QQVJJVFkpOworCVBIWV9FUlIoIk9GRE0tUkFURSIsIEFUSDlLX1BIWUVSUl9PRkRNX1JBVEVfSUxMRUdBTCk7CisJUEhZX0VSUigiT0ZETS1MRU5HVEgiLCBBVEg5S19QSFlFUlJfT0ZETV9MRU5HVEhfSUxMRUdBTCk7CisJUEhZX0VSUigiT0ZETS1QT1dFUi1EUk9QIiwgQVRIOUtfUEhZRVJSX09GRE1fUE9XRVJfRFJPUCk7CisJUEhZX0VSUigiT0ZETS1TRVJWSUNFIiwgQVRIOUtfUEhZRVJSX09GRE1fU0VSVklDRSk7CisJUEhZX0VSUigiT0ZETS1SRVNUQVJUIiwgQVRIOUtfUEhZRVJSX09GRE1fUkVTVEFSVCk7CisJUEhZX0VSUigiRkFMU0UtUkFEQVItRVhUIiwgQVRIOUtfUEhZRVJSX0ZBTFNFX1JBREFSX0VYVCk7CisJUEhZX0VSUigiQ0NLLVRJTUlORyIsIEFUSDlLX1BIWUVSUl9DQ0tfVElNSU5HKTsKKwlQSFlfRVJSKCJDQ0stSEVBREVSLUNSQyIsIEFUSDlLX1BIWUVSUl9DQ0tfSEVBREVSX0NSQyk7CisJUEhZX0VSUigiQ0NLLVJBVEUiLCBBVEg5S19QSFlFUlJfQ0NLX1JBVEVfSUxMRUdBTCk7CisJUEhZX0VSUigiQ0NLLVNFUlZJQ0UiLCBBVEg5S19QSFlFUlJfQ0NLX1NFUlZJQ0UpOworCVBIWV9FUlIoIkNDSy1SRVNUQVJUIiwgQVRIOUtfUEhZRVJSX0NDS19SRVNUQVJUKTsKKwlQSFlfRVJSKCJDQ0stTEVOR1RIIiwgQVRIOUtfUEhZRVJSX0NDS19MRU5HVEhfSUxMRUdBTCk7CisJUEhZX0VSUigiQ0NLLVBPV0VSLURST1AiLCBBVEg5S19QSFlFUlJfQ0NLX1BPV0VSX0RST1ApOworCVBIWV9FUlIoIkhULUNSQyIsIEFUSDlLX1BIWUVSUl9IVF9DUkNfRVJST1IpOworCVBIWV9FUlIoIkhULUxFTkdUSCIsIEFUSDlLX1BIWUVSUl9IVF9MRU5HVEhfSUxMRUdBTCk7CisJUEhZX0VSUigiSFQtUkFURSIsIEFUSDlLX1BIWUVSUl9IVF9SQVRFX0lMTEVHQUwpOworCisJcmV0dmFsID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIGxlbik7CisJa2ZyZWUoYnVmKTsKKworCXJldHVybiByZXR2YWw7CisKKyN1bmRlZiBQSFlfRVJSCit9CisKK3ZvaWQgYXRoX2RlYnVnX3N0YXRfcngoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZikKK3sKKyNkZWZpbmUgUlhfU1RBVF9JTkMoYykgc2MtPmRlYnVnLnN0YXRzLnJ4c3RhdHMuYysrCisjZGVmaW5lIFJYX1BIWV9FUlJfSU5DKGMpIHNjLT5kZWJ1Zy5zdGF0cy5yeHN0YXRzLnBoeV9lcnJfc3RhdHNbY10rKworCisJc3RydWN0IGF0aF9kZXNjICpkcyA9IGJmLT5iZl9kZXNjOworCXUzMiBwaHllcnI7CisKKwlpZiAoZHMtPmRzX3J4c3RhdC5yc19zdGF0dXMgJiBBVEg5S19SWEVSUl9DUkMpCisJCVJYX1NUQVRfSU5DKGNyY19lcnIpOworCWlmIChkcy0+ZHNfcnhzdGF0LnJzX3N0YXR1cyAmIEFUSDlLX1JYRVJSX0RFQ1JZUFQpCisJCVJYX1NUQVRfSU5DKGRlY3J5cHRfY3JjX2Vycik7CisJaWYgKGRzLT5kc19yeHN0YXQucnNfc3RhdHVzICYgQVRIOUtfUlhFUlJfTUlDKQorCQlSWF9TVEFUX0lOQyhtaWNfZXJyKTsKKwlpZiAoZHMtPmRzX3J4c3RhdC5yc19zdGF0dXMgJiBBVEg5S19SWF9ERUxJTV9DUkNfUFJFKQorCQlSWF9TVEFUX0lOQyhwcmVfZGVsaW1fY3JjX2Vycik7CisJaWYgKGRzLT5kc19yeHN0YXQucnNfc3RhdHVzICYgQVRIOUtfUlhfREVMSU1fQ1JDX1BPU1QpCisJCVJYX1NUQVRfSU5DKHBvc3RfZGVsaW1fY3JjX2Vycik7CisJaWYgKGRzLT5kc19yeHN0YXQucnNfc3RhdHVzICYgQVRIOUtfUlhfREVDUllQVF9CVVNZKQorCQlSWF9TVEFUX0lOQyhkZWNyeXB0X2J1c3lfZXJyKTsKKworCWlmIChkcy0+ZHNfcnhzdGF0LnJzX3N0YXR1cyAmIEFUSDlLX1JYRVJSX1BIWSkgeworCQlSWF9TVEFUX0lOQyhwaHlfZXJyKTsKKwkJcGh5ZXJyID0gZHMtPmRzX3J4c3RhdC5yc19waHllcnIgJiAweDI0OworCQlSWF9QSFlfRVJSX0lOQyhwaHllcnIpOworCX0KKworI3VuZGVmIFJYX1NUQVRfSU5DCisjdW5kZWYgUlhfUEhZX0VSUl9JTkMKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wc19yZWN2ID0geworCS5yZWFkID0gcmVhZF9maWxlX3JlY3YsCisJLm9wZW4gPSBhdGg5a19kZWJ1Z2ZzX29wZW4sCisJLm93bmVyID0gVEhJU19NT0RVTEUKK307CisKIGludCBhdGg5a19pbml0X2RlYnVnKHN0cnVjdCBhdGhfaHcgKmFoKQogewogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwpAQCAtNjA2LDYgKzc1MSwxMyBAQAogCWlmICghc2MtPmRlYnVnLmRlYnVnZnNfeG1pdCkKIAkJZ290byBlcnI7CiAKKwlzYy0+ZGVidWcuZGVidWdmc19yZWN2ID0gZGVidWdmc19jcmVhdGVfZmlsZSgicmVjdiIsCisJCQkJCQkgICAgIFNfSVJVU1IsCisJCQkJCQkgICAgIHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3BoeSwKKwkJCQkJCSAgICAgc2MsICZmb3BzX3JlY3YpOworCWlmICghc2MtPmRlYnVnLmRlYnVnZnNfcmVjdikKKwkJZ290byBlcnI7CisKIAlyZXR1cm4gMDsKIGVycjoKIAlhdGg5a19leGl0X2RlYnVnKGFoKTsKQEAgLTYxNyw2ICs3NjksNyBAQAogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgY29tbW9uLT5wcml2OwogCisJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfcmVjdik7CiAJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfeG1pdCk7CiAJZGVidWdmc19yZW1vdmUoc2MtPmRlYnVnLmRlYnVnZnNfd2lwaHkpOwogCWRlYnVnZnNfcmVtb3ZlKHNjLT5kZWJ1Zy5kZWJ1Z2ZzX3Jjc3RhdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZGVidWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5oCmluZGV4IDUzNjY2M2UuLjg2NzgwZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9kZWJ1Zy5oCkBAIC0xMTYsMTAgKzExNiwzNSBAQAogCXUzMiBkZWxpbV91bmRlcnJ1bjsKIH07CiAKKy8qKgorICogc3RydWN0IGF0aF9yeF9zdGF0cyAtIFJYIFN0YXRpc3RpY3MKKyAqIEBjcmNfZXJyOiBOby4gb2YgZnJhbWVzIHdpdGggaW5jb3JyZWN0IENSQyB2YWx1ZQorICogQGRlY3J5cHRfY3JjX2VycjogTm8uIG9mIGZyYW1lcyB3aG9zZSBDUkMgY2hlY2sgZmFpbGVkIGFmdGVyCisJZGVjcnlwdGlvbiBwcm9jZXNzIGNvbXBsZXRlZAorICogQHBoeV9lcnI6IE5vLiBvZiBmcmFtZXMgd2hvc2UgcmVjZXB0aW9uIGZhaWxlZCBiZWNhdXNlIHRoZSBQSFkKKwllbmNvdW50ZXJlZCBhbiBlcnJvcgorICogQG1pY19lcnI6IE5vLiBvZiBmcmFtZXMgd2l0aCBpbmNvcnJlY3QgVEtJUCBNSUMgdmVyaWZpY2F0aW9uIGZhaWx1cmUKKyAqIEBwcmVfZGVsaW1fY3JjX2VycjogUHJlLUZyYW1lIGRlbGltaXRlciBDUkMgZXJyb3IgZGV0ZWN0aW9ucworICogQHBvc3RfZGVsaW1fY3JjX2VycjogUG9zdC1GcmFtZSBkZWxpbWl0ZXIgQ1JDIGVycm9yIGRldGVjdGlvbnMKKyAqIEBkZWNyeXB0X2J1c3lfZXJyOiBEZWNyeXB0aW9uIGludGVycnVwdGlvbnMgY291bnRlcgorICogQHBoeV9lcnJfc3RhdHM6IEluZGl2aWR1YWwgUEhZIGVycm9yIHN0YXRpc3RpY3MKKyAqLworc3RydWN0IGF0aF9yeF9zdGF0cyB7CisJdTMyIGNyY19lcnI7CisJdTMyIGRlY3J5cHRfY3JjX2VycjsKKwl1MzIgcGh5X2VycjsKKwl1MzIgbWljX2VycjsKKwl1MzIgcHJlX2RlbGltX2NyY19lcnI7CisJdTMyIHBvc3RfZGVsaW1fY3JjX2VycjsKKwl1MzIgZGVjcnlwdF9idXN5X2VycjsKKwl1MzIgcGh5X2Vycl9zdGF0c1tBVEg5S19QSFlFUlJfTUFYXTsKK307CisKIHN0cnVjdCBhdGhfc3RhdHMgewogCXN0cnVjdCBhdGhfaW50ZXJydXB0X3N0YXRzIGlzdGF0czsKIAlzdHJ1Y3QgYXRoX3JjX3N0YXRzIHJjc3RhdHNbUkFURV9UQUJMRV9TSVpFXTsKIAlzdHJ1Y3QgYXRoX3R4X3N0YXRzIHR4c3RhdHNbQVRIOUtfTlVNX1RYX1FVRVVFU107CisJc3RydWN0IGF0aF9yeF9zdGF0cyByeHN0YXRzOwogfTsKIAogc3RydWN0IGF0aDlrX2RlYnVnIHsKQEAgLTEzMCw2ICsxNTUsNyBAQAogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcmNzdGF0OwogCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfd2lwaHk7CiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc194bWl0OworCXN0cnVjdCBkZW50cnkgKmRlYnVnZnNfcmVjdjsKIAlzdHJ1Y3QgYXRoX3N0YXRzIHN0YXRzOwogfTsKIApAQCAtMTQyLDYgKzE2OCw3IEBACiB2b2lkIGF0aF9kZWJ1Z19zdGF0X3JjKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgZmluYWxfcmF0ZSk7CiB2b2lkIGF0aF9kZWJ1Z19zdGF0X3R4KHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX3R4cSAqdHhxLAogCQkgICAgICAgc3RydWN0IGF0aF9idWYgKmJmKTsKK3ZvaWQgYXRoX2RlYnVnX3N0YXRfcngoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfYnVmICpiZik7CiB2b2lkIGF0aF9kZWJ1Z19zdGF0X3JldHJpZXMoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGludCByaXgsCiAJCQkgICAgaW50IHhyZXRyaWVzLCBpbnQgcmV0cmllcywgdTggcGVyKTsKIApAQCAtMTgxLDYgKzIwOCwxMSBAQAogewogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgYXRoX2RlYnVnX3N0YXRfcngoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJICAgICBzdHJ1Y3QgYXRoX2J1ZiAqYmYpCit7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhdGhfZGVidWdfc3RhdF9yZXRyaWVzKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBpbnQgcml4LAogCQkJCQkgIGludCB4cmV0cmllcywgaW50IHJldHJpZXMsIHU4IHBlcikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ncGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYWI4YmUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvZ3Bpby5jCkBAIC0wLDAgKzEsNDQyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMDkgQXRoZXJvcyBDb21tdW5pY2F0aW9ucyBJbmMuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgImF0aDlrLmgiCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCSBMRUQgZnVuY3Rpb25zCQkqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBhdGhfbGVkX2JsaW5rX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhdGhfc29mdGMsCisJCQkJCSAgICBhdGhfbGVkX2JsaW5rX3dvcmsud29yayk7CisKKwlpZiAoIShzYy0+c2NfZmxhZ3MgJiBTQ19PUF9MRURfQVNTT0NJQVRFRCkpCisJCXJldHVybjsKKworCWlmICgoc2MtPmxlZF9vbl9kdXJhdGlvbiA9PSBBVEhfTEVEX09OX0RVUkFUSU9OX0lETEUpIHx8CisJICAgIChzYy0+bGVkX29mZl9kdXJhdGlvbiA9PSBBVEhfTEVEX09GRl9EVVJBVElPTl9JRExFKSkKKwkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBzYy0+c2NfYWgtPmxlZF9waW4sIDApOworCWVsc2UKKwkJYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBzYy0+c2NfYWgtPmxlZF9waW4sCisJCQkJICAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfTEVEX09OKSA/IDEgOiAwKTsKKworCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LAorCQkJCSAgICAgJnNjLT5hdGhfbGVkX2JsaW5rX3dvcmssCisJCQkJICAgICAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfTEVEX09OKSA/CisJCQkJCW1zZWNzX3RvX2ppZmZpZXMoc2MtPmxlZF9vZmZfZHVyYXRpb24pIDoKKwkJCQkJbXNlY3NfdG9famlmZmllcyhzYy0+bGVkX29uX2R1cmF0aW9uKSk7CisKKwlzYy0+bGVkX29uX2R1cmF0aW9uID0gc2MtPmxlZF9vbl9jbnQgPworCQkJbWF4KChBVEhfTEVEX09OX0RVUkFUSU9OX0lETEUgLSBzYy0+bGVkX29uX2NudCksIDI1KSA6CisJCQlBVEhfTEVEX09OX0RVUkFUSU9OX0lETEU7CisJc2MtPmxlZF9vZmZfZHVyYXRpb24gPSBzYy0+bGVkX29mZl9jbnQgPworCQkJbWF4KChBVEhfTEVEX09GRl9EVVJBVElPTl9JRExFIC0gc2MtPmxlZF9vZmZfY250KSwgMTApIDoKKwkJCUFUSF9MRURfT0ZGX0RVUkFUSU9OX0lETEU7CisJc2MtPmxlZF9vbl9jbnQgPSBzYy0+bGVkX29mZl9jbnQgPSAwOworCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9MRURfT04pCisJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfTEVEX09OOworCWVsc2UKKwkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0xFRF9PTjsKK30KKworc3RhdGljIHZvaWQgYXRoX2xlZF9icmlnaHRuZXNzKHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJICAgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3QgYXRoX2xlZCAqbGVkID0gY29udGFpbmVyX29mKGxlZF9jZGV2LCBzdHJ1Y3QgYXRoX2xlZCwgbGVkX2NkZXYpOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gbGVkLT5zYzsKKworCXN3aXRjaCAoYnJpZ2h0bmVzcykgeworCWNhc2UgTEVEX09GRjoKKwkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9BU1NPQyB8fAorCQkgICAgbGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKSB7CisJCQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwKKwkJCQkobGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKSk7CisJCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0xFRF9BU1NPQ0lBVEVEOworCQkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9SQURJTykKKwkJCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0xFRF9PTjsKKwkJfSBlbHNlIHsKKwkJCXNjLT5sZWRfb2ZmX2NudCsrOworCQl9CisJCWJyZWFrOworCWNhc2UgTEVEX0ZVTEw6CisJCWlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfQVNTT0MpIHsKKwkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9MRURfQVNTT0NJQVRFRDsKKwkJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoc2MtPmh3LAorCQkJCQkJICAgICAmc2MtPmF0aF9sZWRfYmxpbmtfd29yaywgMCk7CisJCX0gZWxzZSBpZiAobGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKSB7CisJCQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwgMCk7CisJCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfTEVEX09OOworCQl9IGVsc2UgeworCQkJc2MtPmxlZF9vbl9jbnQrKzsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXRoX3JlZ2lzdGVyX2xlZChzdHJ1Y3QgYXRoX3NvZnRjICpzYywgc3RydWN0IGF0aF9sZWQgKmxlZCwKKwkJCSAgICBjaGFyICp0cmlnZ2VyKQoreworCWludCByZXQ7CisKKwlsZWQtPnNjID0gc2M7CisJbGVkLT5sZWRfY2Rldi5uYW1lID0gbGVkLT5uYW1lOworCWxlZC0+bGVkX2NkZXYuZGVmYXVsdF90cmlnZ2VyID0gdHJpZ2dlcjsKKwlsZWQtPmxlZF9jZGV2LmJyaWdodG5lc3Nfc2V0ID0gYXRoX2xlZF9icmlnaHRuZXNzOworCisJcmV0ID0gbGVkX2NsYXNzZGV2X3JlZ2lzdGVyKHdpcGh5X2RldihzYy0+aHctPndpcGh5KSwgJmxlZC0+bGVkX2NkZXYpOworCWlmIChyZXQpCisJCWF0aF9wcmludChhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwgQVRIX0RCR19GQVRBTCwKKwkJCSAgIkZhaWxlZCB0byByZWdpc3RlciBsZWQ6JXMiLCBsZWQtPm5hbWUpOworCWVsc2UKKwkJbGVkLT5yZWdpc3RlcmVkID0gMTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBhdGhfdW5yZWdpc3Rlcl9sZWQoc3RydWN0IGF0aF9sZWQgKmxlZCkKK3sKKwlpZiAobGVkLT5yZWdpc3RlcmVkKSB7CisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZsZWQtPmxlZF9jZGV2KTsKKwkJbGVkLT5yZWdpc3RlcmVkID0gMDsKKwl9Cit9CisKK3ZvaWQgYXRoX2RlaW5pdF9sZWRzKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWF0aF91bnJlZ2lzdGVyX2xlZCgmc2MtPmFzc29jX2xlZCk7CisJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9MRURfQVNTT0NJQVRFRDsKKwlhdGhfdW5yZWdpc3Rlcl9sZWQoJnNjLT50eF9sZWQpOworCWF0aF91bnJlZ2lzdGVyX2xlZCgmc2MtPnJ4X2xlZCk7CisJYXRoX3VucmVnaXN0ZXJfbGVkKCZzYy0+cmFkaW9fbGVkKTsKKwlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwgMSk7Cit9CisKK3ZvaWQgYXRoX2luaXRfbGVkcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwljaGFyICp0cmlnZ2VyOworCWludCByZXQ7CisKKwlpZiAoQVJfU1JFVl85Mjg3KHNjLT5zY19haCkpCisJCXNjLT5zY19haC0+bGVkX3BpbiA9IEFUSF9MRURfUElOXzkyODc7CisJZWxzZQorCQlzYy0+c2NfYWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl9ERUY7CisKKwkvKiBDb25maWd1cmUgZ3BpbyAxIGZvciBvdXRwdXQgKi8KKwlhdGg5a19od19jZmdfb3V0cHV0KHNjLT5zY19haCwgc2MtPnNjX2FoLT5sZWRfcGluLAorCQkJICAgIEFSX0dQSU9fT1VUUFVUX01VWF9BU19PVVRQVVQpOworCS8qIExFRCBvZmYsIGFjdGl2ZSBsb3cgKi8KKwlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwgMSk7CisKKwlJTklUX0RFTEFZRURfV09SSygmc2MtPmF0aF9sZWRfYmxpbmtfd29yaywgYXRoX2xlZF9ibGlua193b3JrKTsKKworCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3JhZGlvX2xlZF9uYW1lKHNjLT5odyk7CisJc25wcmludGYoc2MtPnJhZGlvX2xlZC5uYW1lLCBzaXplb2Yoc2MtPnJhZGlvX2xlZC5uYW1lKSwKKwkJImF0aDlrLSVzOjpyYWRpbyIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOworCXJldCA9IGF0aF9yZWdpc3Rlcl9sZWQoc2MsICZzYy0+cmFkaW9fbGVkLCB0cmlnZ2VyKTsKKwlzYy0+cmFkaW9fbGVkLmxlZF90eXBlID0gQVRIX0xFRF9SQURJTzsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9hc3NvY19sZWRfbmFtZShzYy0+aHcpOworCXNucHJpbnRmKHNjLT5hc3NvY19sZWQubmFtZSwgc2l6ZW9mKHNjLT5hc3NvY19sZWQubmFtZSksCisJCSJhdGg5ay0lczo6YXNzb2MiLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKKwlyZXQgPSBhdGhfcmVnaXN0ZXJfbGVkKHNjLCAmc2MtPmFzc29jX2xlZCwgdHJpZ2dlcik7CisJc2MtPmFzc29jX2xlZC5sZWRfdHlwZSA9IEFUSF9MRURfQVNTT0M7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfdHhfbGVkX25hbWUoc2MtPmh3KTsKKwlzbnByaW50ZihzYy0+dHhfbGVkLm5hbWUsIHNpemVvZihzYy0+dHhfbGVkLm5hbWUpLAorCQkiYXRoOWstJXM6OnR4Iiwgd2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSk7CisJcmV0ID0gYXRoX3JlZ2lzdGVyX2xlZChzYywgJnNjLT50eF9sZWQsIHRyaWdnZXIpOworCXNjLT50eF9sZWQubGVkX3R5cGUgPSBBVEhfTEVEX1RYOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKworCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3J4X2xlZF9uYW1lKHNjLT5odyk7CisJc25wcmludGYoc2MtPnJ4X2xlZC5uYW1lLCBzaXplb2Yoc2MtPnJ4X2xlZC5uYW1lKSwKKwkJImF0aDlrLSVzOjpyeCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOworCXJldCA9IGF0aF9yZWdpc3Rlcl9sZWQoc2MsICZzYy0+cnhfbGVkLCB0cmlnZ2VyKTsKKwlzYy0+cnhfbGVkLmxlZF90eXBlID0gQVRIX0xFRF9SWDsKKwlpZiAocmV0KQorCQlnb3RvIGZhaWw7CisKKwlyZXR1cm47CisKK2ZhaWw6CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZzYy0+YXRoX2xlZF9ibGlua193b3JrKTsKKwlhdGhfZGVpbml0X2xlZHMoc2MpOworfQorCisvKioqKioqKioqKioqKioqKioqKi8KKy8qCVJma2lsbAkgICAqLworLyoqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBib29sIGF0aF9pc19yZmtpbGxfc2V0KHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCisJcmV0dXJuIGF0aDlrX2h3X2dwaW9fZ2V0KGFoLCBhaC0+cmZraWxsX2dwaW8pID09CisJCQkJICBhaC0+cmZraWxsX3BvbGFyaXR5OworfQorCit2b2lkIGF0aDlrX3Jma2lsbF9wb2xsX3N0YXRlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCWJvb2wgYmxvY2tlZCA9ICEhYXRoX2lzX3Jma2lsbF9zZXQoc2MpOworCisJd2lwaHlfcmZraWxsX3NldF9od19zdGF0ZShody0+d2lwaHksIGJsb2NrZWQpOworfQorCit2b2lkIGF0aF9zdGFydF9yZmtpbGxfcG9sbChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKworCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQorCQl3aXBoeV9yZmtpbGxfc3RhcnRfcG9sbGluZyhzYy0+aHctPndpcGh5KTsKK30KKworLyoqKioqKioqKioqKioqKioqKi8KKy8qICAgICBCVENPRVggICAgICovCisvKioqKioqKioqKioqKioqKioqLworCisvKgorICogRGV0ZWN0cyBpZiB0aGVyZSBpcyBhbnkgcHJpb3JpdHkgYnQgdHJhZmZpYworICovCitzdGF0aWMgdm9pZCBhdGhfZGV0ZWN0X2J0X3ByaW9yaXR5KHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCXN0cnVjdCBhdGhfYnRjb2V4ICpidGNvZXggPSAmc2MtPmJ0Y29leDsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKworCWlmIChhdGg5a19od19ncGlvX2dldChzYy0+c2NfYWgsIGFoLT5idGNvZXhfaHcuYnRwcmlvcml0eV9ncGlvKSkKKwkJYnRjb2V4LT5idF9wcmlvcml0eV9jbnQrKzsKKworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGJ0Y29leC0+YnRfcHJpb3JpdHlfdGltZSArCisJCQltc2Vjc190b19qaWZmaWVzKEFUSF9CVF9QUklPUklUWV9USU1FX1RIUkVTSE9MRCkpKSB7CisJCXNjLT5zY19mbGFncyAmPSB+KFNDX09QX0JUX1BSSU9SSVRZX0RFVEVDVEVEIHwgU0NfT1BfQlRfU0NBTik7CisJCS8qIERldGVjdCBpZiBjb2xvY2F0ZWQgYnQgc3RhcnRlZCBzY2FubmluZyAqLworCQlpZiAoYnRjb2V4LT5idF9wcmlvcml0eV9jbnQgPj0gQVRIX0JUX0NOVF9TQ0FOX1RIUkVTSE9MRCkgeworCQkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLCBBVEhfREJHX0JUQ09FWCwKKwkJCQkgICJCVCBzY2FuIGRldGVjdGVkIik7CisJCQlzYy0+c2NfZmxhZ3MgfD0gKFNDX09QX0JUX1NDQU4gfAorCQkJCQkgU0NfT1BfQlRfUFJJT1JJVFlfREVURUNURUQpOworCQl9IGVsc2UgaWYgKGJ0Y29leC0+YnRfcHJpb3JpdHlfY250ID49IEFUSF9CVF9DTlRfVEhSRVNIT0xEKSB7CisJCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCksIEFUSF9EQkdfQlRDT0VYLAorCQkJCSAgIkJUIHByaW9yaXR5IHRyYWZmaWMgZGV0ZWN0ZWQiKTsKKwkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9CVF9QUklPUklUWV9ERVRFQ1RFRDsKKwkJfQorCisJCWJ0Y29leC0+YnRfcHJpb3JpdHlfY250ID0gMDsKKwkJYnRjb2V4LT5idF9wcmlvcml0eV90aW1lID0gamlmZmllczsKKwl9Cit9CisKKy8qCisgKiBDb25maWd1cmVzIGFwcHJvcHJpYXRlIHdlaWdodCBiYXNlZCBvbiBzdG9tcCB0eXBlLgorICovCitzdGF0aWMgdm9pZCBhdGg5a19idGNvZXhfYnRfc3RvbXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsCisJCQkJICBlbnVtIGF0aF9zdG9tcF90eXBlIHN0b21wX3R5cGUpCit7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CisKKwlzd2l0Y2ggKHN0b21wX3R5cGUpIHsKKwljYXNlIEFUSF9CVENPRVhfU1RPTVBfQUxMOgorCQlhdGg5a19od19idGNvZXhfc2V0X3dlaWdodChhaCwgQVJfQlRfQ09FWF9XR0hULAorCQkJCQkgICBBUl9TVE9NUF9BTExfV0xBTl9XR0hUKTsKKwkJYnJlYWs7CisJY2FzZSBBVEhfQlRDT0VYX1NUT01QX0xPVzoKKwkJYXRoOWtfaHdfYnRjb2V4X3NldF93ZWlnaHQoYWgsIEFSX0JUX0NPRVhfV0dIVCwKKwkJCQkJICAgQVJfU1RPTVBfTE9XX1dMQU5fV0dIVCk7CisJCWJyZWFrOworCWNhc2UgQVRIX0JUQ09FWF9TVE9NUF9OT05FOgorCQlhdGg5a19od19idGNvZXhfc2V0X3dlaWdodChhaCwgQVJfQlRfQ09FWF9XR0hULAorCQkJCQkgICBBUl9TVE9NUF9OT05FX1dMQU5fV0dIVCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0JUQ09FWCwKKwkJCSAgIkludmFsaWQgU3RvbXB0eXBlXG4iKTsKKwkJYnJlYWs7CisJfQorCisJYXRoOWtfaHdfYnRjb2V4X2VuYWJsZShhaCk7Cit9CisKK3N0YXRpYyB2b2lkIGF0aDlrX2dlbl90aW1lcl9zdGFydChzdHJ1Y3QgYXRoX2h3ICphaCwKKwkJCQkgIHN0cnVjdCBhdGhfZ2VuX3RpbWVyICp0aW1lciwKKwkJCQkgIHUzMiB0aW1lcl9uZXh0LAorCQkJCSAgdTMyIHRpbWVyX3BlcmlvZCkKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IChzdHJ1Y3QgYXRoX3NvZnRjICopIGNvbW1vbi0+cHJpdjsKKworCWF0aDlrX2h3X2dlbl90aW1lcl9zdGFydChhaCwgdGltZXIsIHRpbWVyX25leHQsIHRpbWVyX3BlcmlvZCk7CisKKwlpZiAoKHNjLT5pbWFzayAmIEFUSDlLX0lOVF9HRU5USU1FUikgPT0gMCkgeworCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgMCk7CisJCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfR0VOVElNRVI7CisJCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+aW1hc2spOworCX0KK30KKworc3RhdGljIHZvaWQgYXRoOWtfZ2VuX3RpbWVyX3N0b3Aoc3RydWN0IGF0aF9odyAqYWgsIHN0cnVjdCBhdGhfZ2VuX3RpbWVyICp0aW1lcikKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IChzdHJ1Y3QgYXRoX3NvZnRjICopIGNvbW1vbi0+cHJpdjsKKwlzdHJ1Y3QgYXRoX2dlbl90aW1lcl90YWJsZSAqdGltZXJfdGFibGUgPSAmYWgtPmh3X2dlbl90aW1lcnM7CisKKwlhdGg5a19od19nZW5fdGltZXJfc3RvcChhaCwgdGltZXIpOworCisJLyogaWYgbm8gdGltZXIgaXMgZW5hYmxlZCwgdHVybiBvZmYgaW50ZXJydXB0IG1hc2sgKi8KKwlpZiAodGltZXJfdGFibGUtPnRpbWVyX21hc2sudmFsID09IDApIHsKKwkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIDApOworCQlzYy0+aW1hc2sgJj0gfkFUSDlLX0lOVF9HRU5USU1FUjsKKwkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIHNjLT5pbWFzayk7CisJfQorfQorCisvKgorICogVGhpcyBpcyB0aGUgbWFzdGVyIGJ0IGNvZXggdGltZXIgd2hpY2ggcnVucyBmb3IgZXZlcnkKKyAqIDQ1bXMsIGJ0IHRyYWZmaWMgd2lsbCBiZSBnaXZlbiBwcmlvcml0eSBkdXJpbmcgNTUlIG9mIHRoaXMKKyAqIHBlcmlvZCB3aGlsZSB3bGFuIGdldHMgcmVtYWluaW5nIDQ1JQorICovCitzdGF0aWMgdm9pZCBhdGhfYnRjb2V4X3BlcmlvZF90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKSBkYXRhOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCXN0cnVjdCBhdGhfYnRjb2V4ICpidGNvZXggPSAmc2MtPmJ0Y29leDsKKwl1MzIgdGltZXJfcGVyaW9kOworCWJvb2wgaXNfYnRzY2FuOworCisJYXRoX2RldGVjdF9idF9wcmlvcml0eShzYyk7CisKKwlpc19idHNjYW4gPSBzYy0+c2NfZmxhZ3MgJiBTQ19PUF9CVF9TQ0FOOworCisJc3Bpbl9sb2NrX2JoKCZidGNvZXgtPmJ0Y29leF9sb2NrKTsKKworCWF0aDlrX2J0Y29leF9idF9zdG9tcChzYywgaXNfYnRzY2FuID8gQVRIX0JUQ09FWF9TVE9NUF9BTEwgOgorCQkJICAgICAgYnRjb2V4LT5idF9zdG9tcF90eXBlKTsKKworCXNwaW5fdW5sb2NrX2JoKCZidGNvZXgtPmJ0Y29leF9sb2NrKTsKKworCWlmIChidGNvZXgtPmJ0Y29leF9wZXJpb2QgIT0gYnRjb2V4LT5idGNvZXhfbm9fc3RvbXApIHsKKwkJaWYgKGJ0Y29leC0+aHdfdGltZXJfZW5hYmxlZCkKKwkJCWF0aDlrX2dlbl90aW1lcl9zdG9wKGFoLCBidGNvZXgtPm5vX3N0b21wX3RpbWVyKTsKKworCQl0aW1lcl9wZXJpb2QgPSBpc19idHNjYW4gPyBidGNvZXgtPmJ0c2Nhbl9ub19zdG9tcCA6CisJCQkJCSAgIGJ0Y29leC0+YnRjb2V4X25vX3N0b21wOworCQlhdGg5a19nZW5fdGltZXJfc3RhcnQoYWgsCisJCQkJICAgICAgYnRjb2V4LT5ub19zdG9tcF90aW1lciwKKwkJCQkgICAgICAoYXRoOWtfaHdfZ2V0dHNmMzIoYWgpICsKKwkJCQkgICAgICAgdGltZXJfcGVyaW9kKSwgdGltZXJfcGVyaW9kICogMTApOworCQlidGNvZXgtPmh3X3RpbWVyX2VuYWJsZWQgPSB0cnVlOworCX0KKworCW1vZF90aW1lcigmYnRjb2V4LT5wZXJpb2RfdGltZXIsIGppZmZpZXMgKworCQkJCSAgbXNlY3NfdG9famlmZmllcyhBVEhfQlRDT0VYX0RFRl9CVF9QRVJJT0QpKTsKK30KKworLyoKKyAqIEdlbmVyaWMgdHNmIGJhc2VkIGh3IHRpbWVyIHdoaWNoIGNvbmZpZ3VyZXMgd2VpZ2h0CisgKiByZWdpc3RlcnMgdG8gdGltZSBzbGljZSBiZXR3ZWVuIHdsYW4gYW5kIGJ0IHRyYWZmaWMKKyAqLworc3RhdGljIHZvaWQgYXRoX2J0Y29leF9ub19zdG9tcF90aW1lcih2b2lkICphcmcpCit7CisJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKWFyZzsKKwlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKKwlzdHJ1Y3QgYXRoX2J0Y29leCAqYnRjb2V4ID0gJnNjLT5idGNvZXg7CisJYm9vbCBpc19idHNjYW4gPSBzYy0+c2NfZmxhZ3MgJiBTQ19PUF9CVF9TQ0FOOworCisJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfQlRDT0VYLAorCQkgICJubyBzdG9tcCB0aW1lciBydW5uaW5nIFxuIik7CisKKwlzcGluX2xvY2tfYmgoJmJ0Y29leC0+YnRjb2V4X2xvY2spOworCisJaWYgKGJ0Y29leC0+YnRfc3RvbXBfdHlwZSA9PSBBVEhfQlRDT0VYX1NUT01QX0xPVyB8fCBpc19idHNjYW4pCisJCWF0aDlrX2J0Y29leF9idF9zdG9tcChzYywgQVRIX0JUQ09FWF9TVE9NUF9OT05FKTsKKwkgZWxzZSBpZiAoYnRjb2V4LT5idF9zdG9tcF90eXBlID09IEFUSF9CVENPRVhfU1RPTVBfQUxMKQorCQlhdGg5a19idGNvZXhfYnRfc3RvbXAoc2MsIEFUSF9CVENPRVhfU1RPTVBfTE9XKTsKKworCXNwaW5fdW5sb2NrX2JoKCZidGNvZXgtPmJ0Y29leF9sb2NrKTsKK30KKworaW50IGF0aF9pbml0X2J0Y29leF90aW1lcihzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgYXRoX2J0Y29leCAqYnRjb2V4ID0gJnNjLT5idGNvZXg7CisKKwlidGNvZXgtPmJ0Y29leF9wZXJpb2QgPSBBVEhfQlRDT0VYX0RFRl9CVF9QRVJJT0QgKiAxMDAwOworCWJ0Y29leC0+YnRjb2V4X25vX3N0b21wID0gKDEwMCAtIEFUSF9CVENPRVhfREVGX0RVVFlfQ1lDTEUpICoKKwkJYnRjb2V4LT5idGNvZXhfcGVyaW9kIC8gMTAwOworCWJ0Y29leC0+YnRzY2FuX25vX3N0b21wID0gKDEwMCAtIEFUSF9CVENPRVhfQlRTQ0FOX0RVVFlfQ1lDTEUpICoKKwkJCQkgICBidGNvZXgtPmJ0Y29leF9wZXJpb2QgLyAxMDA7CisKKwlzZXR1cF90aW1lcigmYnRjb2V4LT5wZXJpb2RfdGltZXIsIGF0aF9idGNvZXhfcGVyaW9kX3RpbWVyLAorCQkJKHVuc2lnbmVkIGxvbmcpIHNjKTsKKworCXNwaW5fbG9ja19pbml0KCZidGNvZXgtPmJ0Y29leF9sb2NrKTsKKworCWJ0Y29leC0+bm9fc3RvbXBfdGltZXIgPSBhdGhfZ2VuX3RpbWVyX2FsbG9jKHNjLT5zY19haCwKKwkJCWF0aF9idGNvZXhfbm9fc3RvbXBfdGltZXIsCisJCQlhdGhfYnRjb2V4X25vX3N0b21wX3RpbWVyLAorCQkJKHZvaWQgKikgc2MsIEFSX0ZJUlNUX05EUF9USU1FUik7CisKKwlpZiAoIWJ0Y29leC0+bm9fc3RvbXBfdGltZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAoUmUpc3RhcnQgYnRjb2V4IHRpbWVycworICovCit2b2lkIGF0aDlrX2J0Y29leF90aW1lcl9yZXN1bWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJc3RydWN0IGF0aF9idGNvZXggKmJ0Y29leCA9ICZzYy0+YnRjb2V4OworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCisJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfQlRDT0VYLAorCQkgICJTdGFydGluZyBidGNvZXggdGltZXJzIik7CisKKwkvKiBtYWtlIHN1cmUgZHV0eSBjeWNsZSB0aW1lciBpcyBhbHNvIHN0b3BwZWQgd2hlbiByZXN1bWluZyAqLworCWlmIChidGNvZXgtPmh3X3RpbWVyX2VuYWJsZWQpCisJCWF0aDlrX2dlbl90aW1lcl9zdG9wKHNjLT5zY19haCwgYnRjb2V4LT5ub19zdG9tcF90aW1lcik7CisKKwlidGNvZXgtPmJ0X3ByaW9yaXR5X2NudCA9IDA7CisJYnRjb2V4LT5idF9wcmlvcml0eV90aW1lID0gamlmZmllczsKKwlzYy0+c2NfZmxhZ3MgJj0gfihTQ19PUF9CVF9QUklPUklUWV9ERVRFQ1RFRCB8IFNDX09QX0JUX1NDQU4pOworCisJbW9kX3RpbWVyKCZidGNvZXgtPnBlcmlvZF90aW1lciwgamlmZmllcyk7Cit9CisKKworLyoKKyAqIFBhdXNlIGJ0Y29leCB0aW1lciBhbmQgYnQgZHV0eSBjeWNsZSB0aW1lcgorICovCit2b2lkIGF0aDlrX2J0Y29leF90aW1lcl9wYXVzZShzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgYXRoX2J0Y29leCAqYnRjb2V4ID0gJnNjLT5idGNvZXg7CisJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CisKKwlkZWxfdGltZXJfc3luYygmYnRjb2V4LT5wZXJpb2RfdGltZXIpOworCisJaWYgKGJ0Y29leC0+aHdfdGltZXJfZW5hYmxlZCkKKwkJYXRoOWtfZ2VuX3RpbWVyX3N0b3AoYWgsIGJ0Y29leC0+bm9fc3RvbXBfdGltZXIpOworCisJYnRjb2V4LT5od190aW1lcl9lbmFibGVkID0gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jCmluZGV4IGFlMzcxNDQuLjJlNzY3Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9ody5jCkBAIC01MiwyOCArNTIsNiBAQAogLyogSGVscGVyIEZ1bmN0aW9ucyAqLwogLyoqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgdTMyIGF0aDlrX2h3X21hY191c2VjKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgY2xrcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmYXRoOWtfaHdfY29tbW9uKGFoKS0+aHctPmNvbmY7Ci0KLQlpZiAoIWFoLT5jdXJjaGFuKSAvKiBzaG91bGQgcmVhbGx5IGNoZWNrIGZvciBDQ0sgaW5zdGVhZCAqLwotCQlyZXR1cm4gY2xrcyAvIEFUSDlLX0NMT0NLX1JBVEVfQ0NLOwotCWlmIChjb25mLT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCi0JCXJldHVybiBjbGtzIC8gQVRIOUtfQ0xPQ0tfUkFURV8yR0haX09GRE07Ci0KLQlyZXR1cm4gY2xrcyAvIEFUSDlLX0NMT0NLX1JBVEVfNUdIWl9PRkRNOwotfQotCi1zdGF0aWMgdTMyIGF0aDlrX2h3X21hY190b191c2VjKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgY2xrcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmYXRoOWtfaHdfY29tbW9uKGFoKS0+aHctPmNvbmY7Ci0KLQlpZiAoY29uZl9pc19odDQwKGNvbmYpKQotCQlyZXR1cm4gYXRoOWtfaHdfbWFjX3VzZWMoYWgsIGNsa3MpIC8gMjsKLQllbHNlCi0JCXJldHVybiBhdGg5a19od19tYWNfdXNlYyhhaCwgY2xrcyk7Ci19Ci0KIHN0YXRpYyB1MzIgYXRoOWtfaHdfbWFjX2Nsa3Moc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1c2VjcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYgPSAmYXRoOWtfaHdfY29tbW9uKGFoKS0+aHctPmNvbmY7CkBAIC0zNDMsMzAgKzMyMSw2IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBjb25zdCBjaGFyICphdGg5a19od19kZXZuYW1lKHUxNiBkZXZpZCkKLXsKLQlzd2l0Y2ggKGRldmlkKSB7Ci0JY2FzZSBBUjU0MTZfREVWSURfUENJOgotCQlyZXR1cm4gIkF0aGVyb3MgNTQxNiI7Ci0JY2FzZSBBUjU0MTZfREVWSURfUENJRToKLQkJcmV0dXJuICJBdGhlcm9zIDU0MTgiOwotCWNhc2UgQVI5MTYwX0RFVklEX1BDSToKLQkJcmV0dXJuICJBdGhlcm9zIDkxNjAiOwotCWNhc2UgQVI1NDE2X0FSOTEwMF9ERVZJRDoKLQkJcmV0dXJuICJBdGhlcm9zIDkxMDAiOwotCWNhc2UgQVI5MjgwX0RFVklEX1BDSToKLQljYXNlIEFSOTI4MF9ERVZJRF9QQ0lFOgotCQlyZXR1cm4gIkF0aGVyb3MgOTI4MCI7Ci0JY2FzZSBBUjkyODVfREVWSURfUENJRToKLQkJcmV0dXJuICJBdGhlcm9zIDkyODUiOwotCWNhc2UgQVI1NDE2X0RFVklEX0FSOTI4N19QQ0k6Ci0JY2FzZSBBUjU0MTZfREVWSURfQVI5Mjg3X1BDSUU6Ci0JCXJldHVybiAiQXRoZXJvcyA5Mjg3IjsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogc3RhdGljIHZvaWQgYXRoOWtfaHdfaW5pdF9jb25maWcoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJaW50IGk7CkBAIC0zODAsNyArMzM0LDYgQEAKIAlhaC0+Y29uZmlnLnBjaWVfY2xvY2tfcmVxID0gMDsKIAlhaC0+Y29uZmlnLnBjaWVfd2FlbiA9IDA7CiAJYWgtPmNvbmZpZy5hbmFsb2dfc2hpZnRyZWcgPSAxOwotCWFoLT5jb25maWcuaHRfZW5hYmxlID0gMTsKIAlhaC0+Y29uZmlnLm9mZG1fdHJpZ19sb3cgPSAyMDA7CiAJYWgtPmNvbmZpZy5vZmRtX3RyaWdfaGlnaCA9IDUwMDsKIAlhaC0+Y29uZmlnLmNja190cmlnX2hpZ2ggPSAyMDA7CkBAIC0zOTIsNyArMzQ1LDEyIEBACiAJCWFoLT5jb25maWcuc3B1cmNoYW5zW2ldWzFdID0gQVJfTk9fU1BVUjsKIAl9CiAKLQlhaC0+Y29uZmlnLmludHJfbWl0aWdhdGlvbiA9IHRydWU7CisJaWYgKGFoLT5od192ZXJzaW9uLmRldmlkICE9IEFSMjQyN19ERVZJRF9QQ0lFKQorCQlhaC0+Y29uZmlnLmh0X2VuYWJsZSA9IDE7CisJZWxzZQorCQlhaC0+Y29uZmlnLmh0X2VuYWJsZSA9IDA7CisKKwlhaC0+Y29uZmlnLnJ4X2ludHJfbWl0aWdhdGlvbiA9IHRydWU7CiAKIAkvKgogCSAqIFdlIG5lZWQgdGhpcyBmb3IgUENJIGRldmljZXMgb25seSAoQ2FyZGJ1cywgUENJLCBtaW5pUENJKQpAQCAtNDM3LDggKzM5NSw2IEBACiAJYWgtPmJlYWNvbl9pbnRlcnZhbCA9IDEwMDsKIAlhaC0+ZW5hYmxlXzMya0h6X2Nsb2NrID0gRE9OVF9VU0VfMzJLSFo7CiAJYWgtPnNsb3R0aW1lID0gKHUzMikgLTE7Ci0JYWgtPmFja3RpbWVvdXQgPSAodTMyKSAtMTsKLQlhaC0+Y3RzdGltZW91dCA9ICh1MzIpIC0xOwogCWFoLT5nbG9iYWx0eHRpbWVvdXQgPSAodTMyKSAtMTsKIAlhaC0+cG93ZXJfbW9kZSA9IEFUSDlLX1BNX1VOREVGSU5FRDsKIH0KQEAgLTU5MCw2ICs1NDYsNyBAQAogCWNhc2UgQVI1NDE2X0RFVklEX0FSOTI4N19QQ0k6CiAJY2FzZSBBUjU0MTZfREVWSURfQVI5Mjg3X1BDSUU6CiAJY2FzZSBBUjkyNzFfVVNCOgorCWNhc2UgQVIyNDI3X0RFVklEX1BDSUU6CiAJCXJldHVybiB0cnVlOwogCWRlZmF1bHQ6CiAJCWJyZWFrOwpAQCAtMTE4Myw3ICsxMTQwLDcgQEAKIAkJQVJfSU1SX1JYT1JOIHwKIAkJQVJfSU1SX0JDTk1JU0M7CiAKLQlpZiAoYWgtPmNvbmZpZy5pbnRyX21pdGlnYXRpb24pCisJaWYgKGFoLT5jb25maWcucnhfaW50cl9taXRpZ2F0aW9uKQogCQlhaC0+bWFza19yZWcgfD0gQVJfSU1SX1JYSU5UTSB8IEFSX0lNUl9SWE1JTlRSOwogCWVsc2UKIAkJYWgtPm1hc2tfcmVnIHw9IEFSX0lNUl9SWE9LOwpAQCAtMTIwMywzNCArMTE2MCwyNSBAQAogCX0KIH0KIAotc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2Fja190aW1lb3V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdXMpCitzdGF0aWMgdm9pZCBhdGg5a19od19zZXRzbG90dGltZShzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHVzKQogewotCWlmICh1cyA+IGF0aDlrX2h3X21hY190b191c2VjKGFoLCBNUygweGZmZmZmZmZmLCBBUl9USU1FX09VVF9BQ0spKSkgewotCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19SRVNFVCwKLQkJCSAgImJhZCBhY2sgdGltZW91dCAldVxuIiwgdXMpOwotCQlhaC0+YWNrdGltZW91dCA9ICh1MzIpIC0xOwotCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfVElNRV9PVVQsCi0JCQkgICAgICBBUl9USU1FX09VVF9BQ0ssIGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cykpOwotCQlhaC0+YWNrdGltZW91dCA9IHVzOwotCQlyZXR1cm4gdHJ1ZTsKLQl9CisJdTMyIHZhbCA9IGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cyk7CisJdmFsID0gbWluKHZhbCwgKHUzMikgMHhGRkZGKTsKKwlSRUdfV1JJVEUoYWgsIEFSX0RfR0JMX0lGU19TTE9ULCB2YWwpOwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19od19zZXRfY3RzX3RpbWVvdXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1cykKK3N0YXRpYyB2b2lkIGF0aDlrX2h3X3NldF9hY2tfdGltZW91dChzdHJ1Y3QgYXRoX2h3ICphaCwgdTMyIHVzKQogewotCWlmICh1cyA+IGF0aDlrX2h3X21hY190b191c2VjKGFoLCBNUygweGZmZmZmZmZmLCBBUl9USU1FX09VVF9DVFMpKSkgewotCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19SRVNFVCwKLQkJCSAgImJhZCBjdHMgdGltZW91dCAldVxuIiwgdXMpOwotCQlhaC0+Y3RzdGltZW91dCA9ICh1MzIpIC0xOwotCQlyZXR1cm4gZmFsc2U7Ci0JfSBlbHNlIHsKLQkJUkVHX1JNV19GSUVMRChhaCwgQVJfVElNRV9PVVQsCi0JCQkgICAgICBBUl9USU1FX09VVF9DVFMsIGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cykpOwotCQlhaC0+Y3RzdGltZW91dCA9IHVzOwotCQlyZXR1cm4gdHJ1ZTsKLQl9CisJdTMyIHZhbCA9IGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cyk7CisJdmFsID0gbWluKHZhbCwgKHUzMikgTVMoMHhGRkZGRkZGRiwgQVJfVElNRV9PVVRfQUNLKSk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfVElNRV9PVVQsIEFSX1RJTUVfT1VUX0FDSywgdmFsKTsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfaHdfc2V0X2N0c190aW1lb3V0KHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdXMpCit7CisJdTMyIHZhbCA9IGF0aDlrX2h3X21hY190b19jbGtzKGFoLCB1cyk7CisJdmFsID0gbWluKHZhbCwgKHUzMikgTVMoMHhGRkZGRkZGRiwgQVJfVElNRV9PVVRfQ1RTKSk7CisJUkVHX1JNV19GSUVMRChhaCwgQVJfVElNRV9PVVQsIEFSX1RJTUVfT1VUX0NUUywgdmFsKTsKIH0KIAogc3RhdGljIGJvb2wgYXRoOWtfaHdfc2V0X2dsb2JhbF90eHRpbWVvdXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB0dSkKQEAgLTEyNDcsMzEgKzExOTUsNDggQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX2h3X2luaXRfdXNlcl9zZXR0aW5ncyhzdHJ1Y3QgYXRoX2h3ICphaCkKK3ZvaWQgYXRoOWtfaHdfaW5pdF9nbG9iYWxfc2V0dGluZ3Moc3RydWN0IGF0aF9odyAqYWgpCiB7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmF0aDlrX2h3X2NvbW1vbihhaCktPmh3LT5jb25mOworCWludCBhY2t0aW1lb3V0OworCWludCBzbG90dGltZTsKKwlpbnQgc2lmc3RpbWU7CisKIAlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19SRVNFVCwgImFoLT5taXNjX21vZGUgMHgleFxuIiwKIAkJICBhaC0+bWlzY19tb2RlKTsKIAogCWlmIChhaC0+bWlzY19tb2RlICE9IDApCiAJCVJFR19XUklURShhaCwgQVJfUENVX01JU0MsCiAJCQkgIFJFR19SRUFEKGFoLCBBUl9QQ1VfTUlTQykgfCBhaC0+bWlzY19tb2RlKTsKLQlpZiAoYWgtPnNsb3R0aW1lICE9ICh1MzIpIC0xKQotCQlhdGg5a19od19zZXRzbG90dGltZShhaCwgYWgtPnNsb3R0aW1lKTsKLQlpZiAoYWgtPmFja3RpbWVvdXQgIT0gKHUzMikgLTEpCi0JCWF0aDlrX2h3X3NldF9hY2tfdGltZW91dChhaCwgYWgtPmFja3RpbWVvdXQpOwotCWlmIChhaC0+Y3RzdGltZW91dCAhPSAodTMyKSAtMSkKLQkJYXRoOWtfaHdfc2V0X2N0c190aW1lb3V0KGFoLCBhaC0+Y3RzdGltZW91dCk7CisKKwlpZiAoY29uZi0+Y2hhbm5lbCAmJiBjb25mLT5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCXNpZnN0aW1lID0gMTY7CisJZWxzZQorCQlzaWZzdGltZSA9IDEwOworCisJLyogQXMgZGVmaW5lZCBieSBJRUVFIDgwMi4xMS0yMDA3IDE3LjMuOC42ICovCisJc2xvdHRpbWUgPSBhaC0+c2xvdHRpbWUgKyAzICogYWgtPmNvdmVyYWdlX2NsYXNzOworCWFja3RpbWVvdXQgPSBzbG90dGltZSArIHNpZnN0aW1lOworCisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciBlYXJseSBBQ0sgdGltZW91dHMsIGFkZCBhbiBvZmZzZXQgdG8gbWF0Y2ggdGhlCisJICogaW5pdHZhbCdzIDY0dXMgYWNrIHRpbWVvdXQgdmFsdWUuCisJICogVGhpcyB3YXMgaW5pdGlhbGx5IG9ubHkgbWVhbnQgdG8gd29yayBhcm91bmQgYW4gaXNzdWUgd2l0aCBkZWxheWVkCisJICogQkEgZnJhbWVzIGluIHNvbWUgaW1wbGVtZW50YXRpb25zLCBidXQgaXQgaGFzIGJlZW4gZm91bmQgdG8gZml4IEFDSworCSAqIHRpbWVvdXQgaXNzdWVzIGluIG90aGVyIGNhc2VzIGFzIHdlbGwuCisJICovCisJaWYgKGNvbmYtPmNoYW5uZWwgJiYgY29uZi0+Y2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQlhY2t0aW1lb3V0ICs9IDY0IC0gc2lmc3RpbWUgLSBhaC0+c2xvdHRpbWU7CisKKwlhdGg5a19od19zZXRzbG90dGltZShhaCwgc2xvdHRpbWUpOworCWF0aDlrX2h3X3NldF9hY2tfdGltZW91dChhaCwgYWNrdGltZW91dCk7CisJYXRoOWtfaHdfc2V0X2N0c190aW1lb3V0KGFoLCBhY2t0aW1lb3V0KTsKIAlpZiAoYWgtPmdsb2JhbHR4dGltZW91dCAhPSAodTMyKSAtMSkKIAkJYXRoOWtfaHdfc2V0X2dsb2JhbF90eHRpbWVvdXQoYWgsIGFoLT5nbG9iYWx0eHRpbWVvdXQpOwogfQorRVhQT1JUX1NZTUJPTChhdGg5a19od19pbml0X2dsb2JhbF9zZXR0aW5ncyk7CiAKLWNvbnN0IGNoYXIgKmF0aDlrX2h3X3Byb2JlKHUxNiB2ZW5kb3JpZCwgdTE2IGRldmlkKQotewotCXJldHVybiB2ZW5kb3JpZCA9PSBBVEhFUk9TX1ZFTkRPUl9JRCA/Ci0JCWF0aDlrX2h3X2Rldm5hbWUoZGV2aWQpIDogTlVMTDsKLX0KLQotdm9pZCBhdGg5a19od19kZXRhY2goc3RydWN0IGF0aF9odyAqYWgpCit2b2lkIGF0aDlrX2h3X2RlaW5pdChzdHJ1Y3QgYXRoX2h3ICphaCkKIHsKIAlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKIApAQCAtMTI4OSw3ICsxMjU0LDcgQEAKIAlrZnJlZShhaCk7CiAJYWggPSBOVUxMOwogfQotRVhQT1JUX1NZTUJPTChhdGg5a19od19kZXRhY2gpOworRVhQT1JUX1NZTUJPTChhdGg5a19od19kZWluaXQpOwogCiAvKioqKioqKi8KIC8qIElOSSAqLwpAQCAtMTM0NSw2ICsxMzEwLDE2IEBACiAJICogTmVjZXNzYXJ5IHRvIGF2b2lkIGlzc3VlcyBvbiBBUjU0MTYgMi4wCiAJICovCiAJUkVHX1dSSVRFKGFoLCAweDk4MDAgKyAoNjUxIDw8IDIpLCAweDExKTsKKworCS8qCisJICogRGlzYWJsZSBSSUZTIHNlYXJjaCBvbiBzb21lIGNoaXBzIHRvIGF2b2lkIGJhc2ViYW5kCisJICogaGFuZyBpc3N1ZXMuCisJICovCisJaWYgKEFSX1NSRVZfOTEwMChhaCkgfHwgQVJfU1JFVl85MTYwKGFoKSkgeworCQl2YWwgPSBSRUdfUkVBRChhaCwgQVJfUEhZX0hFQVZZX0NMSVBfRkFDVE9SX1JJRlMpOworCQl2YWwgJj0gfkFSX1BIWV9SSUZTX0lOSVRfREVMQVk7CisJCVJFR19XUklURShhaCwgQVJfUEhZX0hFQVZZX0NMSVBfRkFDVE9SX1JJRlMsIHZhbCk7CisJfQogfQogCiBzdGF0aWMgdTMyIGF0aDlrX2h3X2RlZl9pbmlfZml4dXAoc3RydWN0IGF0aF9odyAqYWgsCkBAIC0yMDkwLDcgKzIwNjUsNyBAQAogCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQogCQlhdGg5a19lbmFibGVfcmZraWxsKGFoKTsKIAotCWF0aDlrX2h3X2luaXRfdXNlcl9zZXR0aW5ncyhhaCk7CisJYXRoOWtfaHdfaW5pdF9nbG9iYWxfc2V0dGluZ3MoYWgpOwogCiAJaWYgKEFSX1NSRVZfOTI4N18xMl9PUl9MQVRFUihhaCkpIHsKIAkJUkVHX1dSSVRFKGFoLCBBUl9EX0dCTF9JRlNfU0lGUywKQEAgLTIxMjAsNyArMjA5NSw3IEBACiAKIAlSRUdfV1JJVEUoYWgsIEFSX09CUywgOCk7CiAKLQlpZiAoYWgtPmNvbmZpZy5pbnRyX21pdGlnYXRpb24pIHsKKwlpZiAoYWgtPmNvbmZpZy5yeF9pbnRyX21pdGlnYXRpb24pIHsKIAkJUkVHX1JNV19GSUVMRChhaCwgQVJfUklNVCwgQVJfUklNVF9MQVNULCA1MDApOwogCQlSRUdfUk1XX0ZJRUxEKGFoLCBBUl9SSU1ULCBBUl9SSU1UX0ZJUlNULCAyMDAwKTsKIAl9CkBAIC0yNzgwLDcgKzI3NTUsNyBAQAogCiAJCSptYXNrZWQgPSBpc3IgJiBBVEg5S19JTlRfQ09NTU9OOwogCi0JCWlmIChhaC0+Y29uZmlnLmludHJfbWl0aWdhdGlvbikgeworCQlpZiAoYWgtPmNvbmZpZy5yeF9pbnRyX21pdGlnYXRpb24pIHsKIAkJCWlmIChpc3IgJiAoQVJfSVNSX1JYTUlOVFIgfCBBUl9JU1JfUlhJTlRNKSkKIAkJCQkqbWFza2VkIHw9IEFUSDlLX0lOVF9SWDsKIAkJfQpAQCAtMjkxMyw3ICsyODg4LDcgQEAKIAl9CiAJaWYgKGludHMgJiBBVEg5S19JTlRfUlgpIHsKIAkJbWFzayB8PSBBUl9JTVJfUlhFUlI7Ci0JCWlmIChhaC0+Y29uZmlnLmludHJfbWl0aWdhdGlvbikKKwkJaWYgKGFoLT5jb25maWcucnhfaW50cl9taXRpZ2F0aW9uKQogCQkJbWFzayB8PSBBUl9JTVJfUlhNSU5UUiB8IEFSX0lNUl9SWElOVE07CiAJCWVsc2UKIAkJCW1hc2sgfD0gQVJfSU1SX1JYT0sgfCBBUl9JTVJfUlhERVNDOwpAQCAtMzY4NywyMSArMzY2Miw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGF0aDlrX2h3X2V4dGVuZF90c2YpOwogCi1ib29sIGF0aDlrX2h3X3NldHNsb3R0aW1lKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgdXMpCi17Ci0JaWYgKHVzIDwgQVRIOUtfU0xPVF9USU1FXzkgfHwgdXMgPiBhdGg5a19od19tYWNfdG9fdXNlYyhhaCwgMHhmZmZmKSkgewotCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19SRVNFVCwKLQkJCSAgImJhZCBzbG90IHRpbWUgJXVcbiIsIHVzKTsKLQkJYWgtPnNsb3R0aW1lID0gKHUzMikgLTE7Ci0JCXJldHVybiBmYWxzZTsKLQl9IGVsc2UgewotCQlSRUdfV1JJVEUoYWgsIEFSX0RfR0JMX0lGU19TTE9ULCBhdGg5a19od19tYWNfdG9fY2xrcyhhaCwgdXMpKTsKLQkJYWgtPnNsb3R0aW1lID0gdXM7Ci0JCXJldHVybiB0cnVlOwotCX0KLX0KLUVYUE9SVF9TWU1CT0woYXRoOWtfaHdfc2V0c2xvdHRpbWUpOwotCiB2b2lkIGF0aDlrX2h3X3NldDExbm1hYzIwNDAoc3RydWN0IGF0aF9odyAqYWgpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmF0aDlrX2h3X2NvbW1vbihhaCktPmh3LT5jb25mOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2h3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaAppbmRleCBlMmIwYzczLi5kYmJmN2NhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaHcuaApAQCAtNDAsNiArNDAsNyBAQAogI2RlZmluZSBBUjkyODBfREVWSURfUENJCTB4MDAyOQogI2RlZmluZSBBUjkyODBfREVWSURfUENJRQkweDAwMmEKICNkZWZpbmUgQVI5Mjg1X0RFVklEX1BDSUUJMHgwMDJiCisjZGVmaW5lIEFSMjQyN19ERVZJRF9QQ0lFCTB4MDAyYwogCiAjZGVmaW5lIEFSNTQxNl9BUjkxMDBfREVWSUQJMHgwMDBiCiAKQEAgLTIxMiw3ICsyMTMsNyBAQAogCXUzMiBjY2tfdHJpZ19sb3c7CiAJdTMyIGVuYWJsZV9hbmk7CiAJaW50IHNlcmlhbGl6ZV9yZWdtb2RlOwotCWJvb2wgaW50cl9taXRpZ2F0aW9uOworCWJvb2wgcnhfaW50cl9taXRpZ2F0aW9uOwogI2RlZmluZSBTUFVSX0RJU0FCTEUgICAgICAgIAkwCiAjZGVmaW5lIFNQVVJfRU5BQkxFX0lPQ1RMICAgCTEKICNkZWZpbmUgU1BVUl9FTkFCTEVfRUVQUk9NICAJMgpAQCAtNTUxLDEwICs1NTIsOSBAQAogCXUzMiAqYmFuazZUZW1wOwogCiAJaW50MTZfdCB0eHBvd2VyX2luZGV4b2Zmc2V0OworCWludCBjb3ZlcmFnZV9jbGFzczsKIAl1MzIgYmVhY29uX2ludGVydmFsOwogCXUzMiBzbG90dGltZTsKLQl1MzIgYWNrdGltZW91dDsKLQl1MzIgY3RzdGltZW91dDsKIAl1MzIgZ2xvYmFsdHh0aW1lb3V0OwogCiAJLyogQU5JICovCkBAIC02MTYsNyArNjE2LDcgQEAKIAogLyogSW5pdGlhbGl6YXRpb24sIERldGFjaCwgUmVzZXQgKi8KIGNvbnN0IGNoYXIgKmF0aDlrX2h3X3Byb2JlKHUxNiB2ZW5kb3JpZCwgdTE2IGRldmlkKTsKLXZvaWQgYXRoOWtfaHdfZGV0YWNoKHN0cnVjdCBhdGhfaHcgKmFoKTsKK3ZvaWQgYXRoOWtfaHdfZGVpbml0KHN0cnVjdCBhdGhfaHcgKmFoKTsKIGludCBhdGg5a19od19pbml0KHN0cnVjdCBhdGhfaHcgKmFoKTsKIGludCBhdGg5a19od19yZXNldChzdHJ1Y3QgYXRoX2h3ICphaCwgc3RydWN0IGF0aDlrX2NoYW5uZWwgKmNoYW4sCiAJCSAgIGJvb2wgYkNoYW5uZWxDaGFuZ2UpOwpAQCAtNjY4LDcgKzY2OCw3IEBACiB2b2lkIGF0aDlrX2h3X3Jlc2V0X3RzZihzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X3NldF90c2ZhZGp1c3Qoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBzZXR0aW5nKTsKIHU2NCBhdGg5a19od19leHRlbmRfdHNmKHN0cnVjdCBhdGhfaHcgKmFoLCB1MzIgcnN0YW1wKTsKLWJvb2wgYXRoOWtfaHdfc2V0c2xvdHRpbWUoc3RydWN0IGF0aF9odyAqYWgsIHUzMiB1cyk7Cit2b2lkIGF0aDlrX2h3X2luaXRfZ2xvYmFsX3NldHRpbmdzKHN0cnVjdCBhdGhfaHcgKmFoKTsKIHZvaWQgYXRoOWtfaHdfc2V0MTFubWFjMjA0MChzdHJ1Y3QgYXRoX2h3ICphaCk7CiB2b2lkIGF0aDlrX2h3X2JlYWNvbmluaXQoc3RydWN0IGF0aF9odyAqYWgsIHUzMiBuZXh0X2JlYWNvbiwgdTMyIGJlYWNvbl9wZXJpb2QpOwogdm9pZCBhdGg5a19od19zZXRfc3RhX2JlYWNvbl90aW1lcnMoc3RydWN0IGF0aF9odyAqYWgsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvaW5pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjNjMmY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL2luaXQuYwpAQCAtMCwwICsxLDg2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDA5IEF0aGVyb3MgQ29tbXVuaWNhdGlvbnMgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJhdGg5ay5oIgorCitzdGF0aWMgY2hhciAqZGV2X2luZm8gPSAiYXRoOWsiOworCitNT0RVTEVfQVVUSE9SKCJBdGhlcm9zIENvbW11bmljYXRpb25zIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlN1cHBvcnQgZm9yIEF0aGVyb3MgODAyLjExbiB3aXJlbGVzcyBMQU4gY2FyZHMuIik7CitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiQXRoZXJvcyA4MDIuMTFuIFdMQU4gY2FyZHMiKTsKK01PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBhdGg5a19kZWJ1ZyA9IEFUSF9EQkdfREVGQVVMVDsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYXRoOWtfZGVidWcsIHVpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnZ2luZyBtYXNrIik7CisKK2ludCBtb2RwYXJhbV9ub2h3Y3J5cHQ7Cittb2R1bGVfcGFyYW1fbmFtZWQobm9od2NyeXB0LCBtb2RwYXJhbV9ub2h3Y3J5cHQsIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKG5vaHdjcnlwdCwgIkRpc2FibGUgaGFyZHdhcmUgZW5jcnlwdGlvbiIpOworCisvKiBXZSB1c2UgdGhlIGh3X3ZhbHVlIGFzIGFuIGluZGV4IGludG8gb3VyIHByaXZhdGUgY2hhbm5lbCBzdHJ1Y3R1cmUgKi8KKworI2RlZmluZSBDSEFOMkcoX2ZyZXEsIF9pZHgpICB7IFwKKwkuY2VudGVyX2ZyZXEgPSAoX2ZyZXEpLCBcCisJLmh3X3ZhbHVlID0gKF9pZHgpLCBcCisJLm1heF9wb3dlciA9IDIwLCBcCit9CisKKyNkZWZpbmUgQ0hBTjVHKF9mcmVxLCBfaWR4KSB7IFwKKwkuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFosIFwKKwkuY2VudGVyX2ZyZXEgPSAoX2ZyZXEpLCBcCisJLmh3X3ZhbHVlID0gKF9pZHgpLCBcCisJLm1heF9wb3dlciA9IDIwLCBcCit9CisKKy8qIFNvbWUgMiBHSHogcmFkaW9zIGFyZSBhY3R1YWxseSB0dW5hYmxlIG9uIDIzMTItMjczMgorICogb24gNSBNSHogc3RlcHMsIHdlIHN1cHBvcnQgdGhlIGNoYW5uZWxzIHdoaWNoIHdlIGtub3cKKyAqIHdlIGhhdmUgY2FsaWJyYXRpb24gZGF0YSBmb3IgYWxsIGNhcmRzIHRob3VnaCB0byBtYWtlCisgKiB0aGlzIHN0YXRpYyAqLworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBhdGg5a18yZ2h6X2NoYW50YWJsZVtdID0geworCUNIQU4yRygyNDEyLCAwKSwgLyogQ2hhbm5lbCAxICovCisJQ0hBTjJHKDI0MTcsIDEpLCAvKiBDaGFubmVsIDIgKi8KKwlDSEFOMkcoMjQyMiwgMiksIC8qIENoYW5uZWwgMyAqLworCUNIQU4yRygyNDI3LCAzKSwgLyogQ2hhbm5lbCA0ICovCisJQ0hBTjJHKDI0MzIsIDQpLCAvKiBDaGFubmVsIDUgKi8KKwlDSEFOMkcoMjQzNywgNSksIC8qIENoYW5uZWwgNiAqLworCUNIQU4yRygyNDQyLCA2KSwgLyogQ2hhbm5lbCA3ICovCisJQ0hBTjJHKDI0NDcsIDcpLCAvKiBDaGFubmVsIDggKi8KKwlDSEFOMkcoMjQ1MiwgOCksIC8qIENoYW5uZWwgOSAqLworCUNIQU4yRygyNDU3LCA5KSwgLyogQ2hhbm5lbCAxMCAqLworCUNIQU4yRygyNDYyLCAxMCksIC8qIENoYW5uZWwgMTEgKi8KKwlDSEFOMkcoMjQ2NywgMTEpLCAvKiBDaGFubmVsIDEyICovCisJQ0hBTjJHKDI0NzIsIDEyKSwgLyogQ2hhbm5lbCAxMyAqLworCUNIQU4yRygyNDg0LCAxMyksIC8qIENoYW5uZWwgMTQgKi8KK307CisKKy8qIFNvbWUgNSBHSHogcmFkaW9zIGFyZSBhY3R1YWxseSB0dW5hYmxlIG9uIFhYWFgtWVlZWQorICogb24gNSBNSHogc3RlcHMsIHdlIHN1cHBvcnQgdGhlIGNoYW5uZWxzIHdoaWNoIHdlIGtub3cKKyAqIHdlIGhhdmUgY2FsaWJyYXRpb24gZGF0YSBmb3IgYWxsIGNhcmRzIHRob3VnaCB0byBtYWtlCisgKiB0aGlzIHN0YXRpYyAqLworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBhdGg5a181Z2h6X2NoYW50YWJsZVtdID0geworCS8qIF9XZV8gY2FsbCB0aGlzIFVOSUkgMSAqLworCUNIQU41Ryg1MTgwLCAxNCksIC8qIENoYW5uZWwgMzYgKi8KKwlDSEFONUcoNTIwMCwgMTUpLCAvKiBDaGFubmVsIDQwICovCisJQ0hBTjVHKDUyMjAsIDE2KSwgLyogQ2hhbm5lbCA0NCAqLworCUNIQU41Ryg1MjQwLCAxNyksIC8qIENoYW5uZWwgNDggKi8KKwkvKiBfV2VfIGNhbGwgdGhpcyBVTklJIDIgKi8KKwlDSEFONUcoNTI2MCwgMTgpLCAvKiBDaGFubmVsIDUyICovCisJQ0hBTjVHKDUyODAsIDE5KSwgLyogQ2hhbm5lbCA1NiAqLworCUNIQU41Ryg1MzAwLCAyMCksIC8qIENoYW5uZWwgNjAgKi8KKwlDSEFONUcoNTMyMCwgMjEpLCAvKiBDaGFubmVsIDY0ICovCisJLyogX1dlXyBjYWxsIHRoaXMgIk1pZGRsZSBiYW5kIiAqLworCUNIQU41Ryg1NTAwLCAyMiksIC8qIENoYW5uZWwgMTAwICovCisJQ0hBTjVHKDU1MjAsIDIzKSwgLyogQ2hhbm5lbCAxMDQgKi8KKwlDSEFONUcoNTU0MCwgMjQpLCAvKiBDaGFubmVsIDEwOCAqLworCUNIQU41Ryg1NTYwLCAyNSksIC8qIENoYW5uZWwgMTEyICovCisJQ0hBTjVHKDU1ODAsIDI2KSwgLyogQ2hhbm5lbCAxMTYgKi8KKwlDSEFONUcoNTYwMCwgMjcpLCAvKiBDaGFubmVsIDEyMCAqLworCUNIQU41Ryg1NjIwLCAyOCksIC8qIENoYW5uZWwgMTI0ICovCisJQ0hBTjVHKDU2NDAsIDI5KSwgLyogQ2hhbm5lbCAxMjggKi8KKwlDSEFONUcoNTY2MCwgMzApLCAvKiBDaGFubmVsIDEzMiAqLworCUNIQU41Ryg1NjgwLCAzMSksIC8qIENoYW5uZWwgMTM2ICovCisJQ0hBTjVHKDU3MDAsIDMyKSwgLyogQ2hhbm5lbCAxNDAgKi8KKwkvKiBfV2VfIGNhbGwgdGhpcyBVTklJIDMgKi8KKwlDSEFONUcoNTc0NSwgMzMpLCAvKiBDaGFubmVsIDE0OSAqLworCUNIQU41Ryg1NzY1LCAzNCksIC8qIENoYW5uZWwgMTUzICovCisJQ0hBTjVHKDU3ODUsIDM1KSwgLyogQ2hhbm5lbCAxNTcgKi8KKwlDSEFONUcoNTgwNSwgMzYpLCAvKiBDaGFubmVsIDE2MSAqLworCUNIQU41Ryg1ODI1LCAzNyksIC8qIENoYW5uZWwgMTY1ICovCit9OworCisvKiBBdGhlcm9zIGhhcmR3YXJlIHJhdGUgY29kZSBhZGRpdGlvbiBmb3Igc2hvcnQgcHJlbWJsZSAqLworI2RlZmluZSBTSFBDSEVDSyhfX2h3X3JhdGUsIF9fZmxhZ3MpIFwKKwkoKF9fZmxhZ3MgJiBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSkgPyAoX19od19yYXRlIHwgMHgwNCApIDogMCkKKworI2RlZmluZSBSQVRFKF9iaXRyYXRlLCBfaHdfcmF0ZSwgX2ZsYWdzKSB7ICAgICAgICAgICAgICBcCisJLmJpdHJhdGUgICAgICAgID0gKF9iaXRyYXRlKSwgICAgICAgICAgICAgICAgICAgXAorCS5mbGFncyAgICAgICAgICA9IChfZmxhZ3MpLCAgICAgICAgICAgICAgICAgICAgIFwKKwkuaHdfdmFsdWUgICAgICAgPSAoX2h3X3JhdGUpLCAgICAgICAgICAgICAgICAgICBcCisJLmh3X3ZhbHVlX3Nob3J0ID0gKFNIUENIRUNLKF9od19yYXRlLCBfZmxhZ3MpKSAgXAorfQorCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9yYXRlIGF0aDlrX2xlZ2FjeV9yYXRlc1tdID0geworCVJBVEUoMTAsIDB4MWIsIDApLAorCVJBVEUoMjAsIDB4MWEsIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwKKwlSQVRFKDU1LCAweDE5LCBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksCisJUkFURSgxMTAsIDB4MTgsIElFRUU4MDIxMV9SQVRFX1NIT1JUX1BSRUFNQkxFKSwKKwlSQVRFKDYwLCAweDBiLCAwKSwKKwlSQVRFKDkwLCAweDBmLCAwKSwKKwlSQVRFKDEyMCwgMHgwYSwgMCksCisJUkFURSgxODAsIDB4MGUsIDApLAorCVJBVEUoMjQwLCAweDA5LCAwKSwKKwlSQVRFKDM2MCwgMHgwZCwgMCksCisJUkFURSg0ODAsIDB4MDgsIDApLAorCVJBVEUoNTQwLCAweDBjLCAwKSwKK307CisKK3N0YXRpYyB2b2lkIGF0aDlrX2RlaW5pdF9zb2Z0YyhzdHJ1Y3QgYXRoX3NvZnRjICpzYyk7CisKKy8qCisgKiBSZWFkIGFuZCB3cml0ZSwgdGhleSBib3RoIHNoYXJlIHRoZSBzYW1lIGxvY2suIFdlIGRvIHRoaXMgdG8gc2VyaWFsaXplCisgKiByZWFkcyBhbmQgd3JpdGVzIG9uIEF0aGVyb3MgODAyLjExbiBQQ0kgZGV2aWNlcyBvbmx5LiBUaGlzIGlzIHJlcXVpcmVkCisgKiBhcyB0aGUgRklGTyBvbiB0aGVzZSBkZXZpY2VzIGNhbiBvbmx5IGFjY2VwdCBzYW5lbHkgMiByZXF1ZXN0cy4KKyAqLworCitzdGF0aWMgdm9pZCBhdGg5a19pb3dyaXRlMzIodm9pZCAqaHdfcHJpdiwgdTMyIHZhbCwgdTMyIHJlZ19vZmZzZXQpCit7CisJc3RydWN0IGF0aF9odyAqYWggPSAoc3RydWN0IGF0aF9odyAqKSBod19wcml2OworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgY29tbW9uLT5wcml2OworCisJaWYgKGFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPT0gU0VSX1JFR19NT0RFX09OKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZzYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7CisJCWlvd3JpdGUzMih2YWwsIHNjLT5tZW0gKyByZWdfb2Zmc2V0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPnNjX3NlcmlhbF9ydywgZmxhZ3MpOworCX0gZWxzZQorCQlpb3dyaXRlMzIodmFsLCBzYy0+bWVtICsgcmVnX29mZnNldCk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgYXRoOWtfaW9yZWFkMzIodm9pZCAqaHdfcHJpdiwgdTMyIHJlZ19vZmZzZXQpCit7CisJc3RydWN0IGF0aF9odyAqYWggPSAoc3RydWN0IGF0aF9odyAqKSBod19wcml2OworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgY29tbW9uLT5wcml2OworCXUzMiB2YWw7CisKKwlpZiAoYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9PSBTRVJfUkVHX01PREVfT04pIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5zY19zZXJpYWxfcncsIGZsYWdzKTsKKwkJdmFsID0gaW9yZWFkMzIoc2MtPm1lbSArIHJlZ19vZmZzZXQpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7CisJfSBlbHNlCisJCXZhbCA9IGlvcmVhZDMyKHNjLT5tZW0gKyByZWdfb2Zmc2V0KTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0aF9vcHMgYXRoOWtfY29tbW9uX29wcyA9IHsKKwkucmVhZCA9IGF0aDlrX2lvcmVhZDMyLAorCS53cml0ZSA9IGF0aDlrX2lvd3JpdGUzMiwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICBJbml0aWFsaXphdGlvbiAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgc2V0dXBfaHRfY2FwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfaW5mbykKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCk7CisJdTggdHhfc3RyZWFtcywgcnhfc3RyZWFtczsKKworCWh0X2luZm8tPmh0X3N1cHBvcnRlZCA9IHRydWU7CisJaHRfaW5mby0+Y2FwID0gSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAgfAorCQkgICAgICAgSUVFRTgwMjExX0hUX0NBUF9TTV9QUyB8CisJCSAgICAgICBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCB8CisJCSAgICAgICBJRUVFODAyMTFfSFRfQ0FQX0RTU1NDQ0s0MDsKKworCWh0X2luZm8tPmFtcGR1X2ZhY3RvciA9IElFRUU4MDIxMV9IVF9NQVhfQU1QRFVfNjRLOworCWh0X2luZm8tPmFtcGR1X2RlbnNpdHkgPSBJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzg7CisKKwkvKiBzZXQgdXAgc3VwcG9ydGVkIG1jcyBzZXQgKi8KKwltZW1zZXQoJmh0X2luZm8tPm1jcywgMCwgc2l6ZW9mKGh0X2luZm8tPm1jcykpOworCXR4X3N0cmVhbXMgPSAhKGNvbW1vbi0+dHhfY2hhaW5tYXNrICYgKGNvbW1vbi0+dHhfY2hhaW5tYXNrIC0gMSkpID8KKwkJICAgICAxIDogMjsKKwlyeF9zdHJlYW1zID0gIShjb21tb24tPnJ4X2NoYWlubWFzayAmIChjb21tb24tPnJ4X2NoYWlubWFzayAtIDEpKSA/CisJCSAgICAgMSA6IDI7CisKKwlpZiAodHhfc3RyZWFtcyAhPSByeF9zdHJlYW1zKSB7CisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAorCQkJICAiVFggc3RyZWFtcyAlZCwgUlggc3RyZWFtczogJWRcbiIsCisJCQkgIHR4X3N0cmVhbXMsIHJ4X3N0cmVhbXMpOworCQlodF9pbmZvLT5tY3MudHhfcGFyYW1zIHw9IElFRUU4MDIxMV9IVF9NQ1NfVFhfUlhfRElGRjsKKwkJaHRfaW5mby0+bWNzLnR4X3BhcmFtcyB8PSAoKHR4X3N0cmVhbXMgLSAxKSA8PAorCQkJCUlFRUU4MDIxMV9IVF9NQ1NfVFhfTUFYX1NUUkVBTVNfU0hJRlQpOworCX0KKworCWh0X2luZm8tPm1jcy5yeF9tYXNrWzBdID0gMHhmZjsKKwlpZiAocnhfc3RyZWFtcyA+PSAyKQorCQlodF9pbmZvLT5tY3MucnhfbWFza1sxXSA9IDB4ZmY7CisKKwlodF9pbmZvLT5tY3MudHhfcGFyYW1zIHw9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRDsKK30KKworc3RhdGljIGludCBhdGg5a19yZWdfbm90aWZpZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSAgICAgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3aXBoeV90b19pZWVlODAyMTFfaHcod2lwaHkpOworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVnID0gYXRoOWtfaHdfcmVndWxhdG9yeShzYy0+c2NfYWgpOworCisJcmV0dXJuIGF0aF9yZWdfbm90aWZpZXJfYXBwbHkod2lwaHksIHJlcXVlc3QsIHJlZyk7Cit9CisKKy8qCisgKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIGJvdGggdGhlIERNQSBkZXNjcmlwdG9yIHN0cnVjdHVyZSwgYW5kIHRoZQorICogIGJ1ZmZlcnMgaXQgY29udGFpbnMuICBUaGVzZSBhcmUgdXNlZCB0byBjb250YWluIHRoZSBkZXNjcmlwdG9ycyB1c2VkCisgKiAgYnkgdGhlIHN5c3RlbS4KKyovCitpbnQgYXRoX2Rlc2NkbWFfc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfZGVzY2RtYSAqZGQsCisJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICAgIGludCBuYnVmLCBpbnQgbmRlc2MpCit7CisjZGVmaW5lCURTMlBIWVMoX2RkLCBfZHMpCQkJCQkJXAorCSgoX2RkKS0+ZGRfZGVzY19wYWRkciArICgoY2FkZHJfdCkoX2RzKSAtIChjYWRkcl90KShfZGQpLT5kZF9kZXNjKSkKKyNkZWZpbmUgQVRIX0RFU0NfNEtCX0JPVU5EX0NIRUNLKF9kYWRkcikgKCgoKF9kYWRkcikgJiAweEZGRikgPiAweEY3RikgPyAxIDogMCkKKyNkZWZpbmUgQVRIX0RFU0NfNEtCX0JPVU5EX05VTV9TS0lQUEVEKF9sZW4pICgoX2xlbikgLyA0MDk2KQorCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKKwlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOworCXN0cnVjdCBhdGhfYnVmICpiZjsKKwlpbnQgaSwgYnNpemUsIGVycm9yOworCisJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICIlcyBETUE6ICV1IGJ1ZmZlcnMgJXUgZGVzYy9idWZcbiIsCisJCSAgbmFtZSwgbmJ1ZiwgbmRlc2MpOworCisJSU5JVF9MSVNUX0hFQUQoaGVhZCk7CisJLyogYXRoX2Rlc2MgbXVzdCBiZSBhIG11bHRpcGxlIG9mIERXT1JEcyAqLworCWlmICgoc2l6ZW9mKHN0cnVjdCBhdGhfZGVzYykgJSA0KSAhPSAwKSB7CisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCisJCQkgICJhdGhfZGVzYyBub3QgRFdPUkQgYWxpZ25lZFxuIik7CisJCUJVR19PTigoc2l6ZW9mKHN0cnVjdCBhdGhfZGVzYykgJSA0KSAhPSAwKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJZGQtPmRkX2Rlc2NfbGVuID0gc2l6ZW9mKHN0cnVjdCBhdGhfZGVzYykgKiBuYnVmICogbmRlc2M7CisKKwkvKgorCSAqIE5lZWQgYWRkaXRpb25hbCBETUEgbWVtb3J5IGJlY2F1c2Ugd2UgY2FuJ3QgdXNlCisJICogZGVzY3JpcHRvcnMgdGhhdCBjcm9zcyB0aGUgNEsgcGFnZSBib3VuZGFyeS4gQXNzdW1lCisJICogb25lIHNraXBwZWQgZGVzY3JpcHRvciBwZXIgNEsgcGFnZS4KKwkgKi8KKwlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKKwkJdTMyIG5kZXNjX3NraXBwZWQgPQorCQkJQVRIX0RFU0NfNEtCX0JPVU5EX05VTV9TS0lQUEVEKGRkLT5kZF9kZXNjX2xlbik7CisJCXUzMiBkbWFfbGVuOworCisJCXdoaWxlIChuZGVzY19za2lwcGVkKSB7CisJCQlkbWFfbGVuID0gbmRlc2Nfc2tpcHBlZCAqIHNpemVvZihzdHJ1Y3QgYXRoX2Rlc2MpOworCQkJZGQtPmRkX2Rlc2NfbGVuICs9IGRtYV9sZW47CisKKwkJCW5kZXNjX3NraXBwZWQgPSBBVEhfREVTQ180S0JfQk9VTkRfTlVNX1NLSVBQRUQoZG1hX2xlbik7CisJCX07CisJfQorCisJLyogYWxsb2NhdGUgZGVzY3JpcHRvcnMgKi8KKwlkZC0+ZGRfZGVzYyA9IGRtYV9hbGxvY19jb2hlcmVudChzYy0+ZGV2LCBkZC0+ZGRfZGVzY19sZW4sCisJCQkJCSAmZGQtPmRkX2Rlc2NfcGFkZHIsIEdGUF9LRVJORUwpOworCWlmIChkZC0+ZGRfZGVzYyA9PSBOVUxMKSB7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwlkcyA9IGRkLT5kZF9kZXNjOworCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiJXMgRE1BIG1hcDogJXAgKCV1KSAtPiAlbGx4ICgldSlcbiIsCisJCSAgbmFtZSwgZHMsICh1MzIpIGRkLT5kZF9kZXNjX2xlbiwKKwkJICBpdG82NChkZC0+ZGRfZGVzY19wYWRkciksIC8qWFhYKi8odTMyKSBkZC0+ZGRfZGVzY19sZW4pOworCisJLyogYWxsb2NhdGUgYnVmZmVycyAqLworCWJzaXplID0gc2l6ZW9mKHN0cnVjdCBhdGhfYnVmKSAqIG5idWY7CisJYmYgPSBremFsbG9jKGJzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoYmYgPT0gTlVMTCkgeworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDI7CisJfQorCWRkLT5kZF9idWZwdHIgPSBiZjsKKworCWZvciAoaSA9IDA7IGkgPCBuYnVmOyBpKyssIGJmKyssIGRzICs9IG5kZXNjKSB7CisJCWJmLT5iZl9kZXNjID0gZHM7CisJCWJmLT5iZl9kYWRkciA9IERTMlBIWVMoZGQsIGRzKTsKKworCQlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmCisJCSAgICAgIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKKwkJCS8qCisJCQkgKiBTa2lwIGRlc2NyaXB0b3IgYWRkcmVzc2VzIHdoaWNoIGNhbiBjYXVzZSA0S0IKKwkJCSAqIGJvdW5kYXJ5IGNyb3NzaW5nIChhZGRyICsgbGVuZ3RoKSB3aXRoIGEgMzIgZHdvcmQKKwkJCSAqIGRlc2NyaXB0b3IgZmV0Y2guCisJCQkgKi8KKwkJCXdoaWxlIChBVEhfREVTQ180S0JfQk9VTkRfQ0hFQ0soYmYtPmJmX2RhZGRyKSkgeworCQkJCUJVR19PTigoY2FkZHJfdCkgYmYtPmJmX2Rlc2MgPj0KKwkJCQkgICAgICAgKChjYWRkcl90KSBkZC0+ZGRfZGVzYyArCisJCQkJCWRkLT5kZF9kZXNjX2xlbikpOworCisJCQkJZHMgKz0gbmRlc2M7CisJCQkJYmYtPmJmX2Rlc2MgPSBkczsKKwkJCQliZi0+YmZfZGFkZHIgPSBEUzJQSFlTKGRkLCBkcyk7CisJCQl9CisJCX0KKwkJbGlzdF9hZGRfdGFpbCgmYmYtPmxpc3QsIGhlYWQpOworCX0KKwlyZXR1cm4gMDsKK2ZhaWwyOgorCWRtYV9mcmVlX2NvaGVyZW50KHNjLT5kZXYsIGRkLT5kZF9kZXNjX2xlbiwgZGQtPmRkX2Rlc2MsCisJCQkgIGRkLT5kZF9kZXNjX3BhZGRyKTsKK2ZhaWw6CisJbWVtc2V0KGRkLCAwLCBzaXplb2YoKmRkKSk7CisJcmV0dXJuIGVycm9yOworI3VuZGVmIEFUSF9ERVNDXzRLQl9CT1VORF9DSEVDSworI3VuZGVmIEFUSF9ERVNDXzRLQl9CT1VORF9OVU1fU0tJUFBFRAorI3VuZGVmIERTMlBIWVMKK30KKworc3RhdGljIHZvaWQgYXRoOWtfaW5pdF9jcnlwdG8oc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpOworCWludCBpID0gMDsKKworCS8qIEdldCB0aGUgaGFyZHdhcmUga2V5IGNhY2hlIHNpemUuICovCisJY29tbW9uLT5rZXltYXggPSBzYy0+c2NfYWgtPmNhcHMua2V5Y2FjaGVfc2l6ZTsKKwlpZiAoY29tbW9uLT5rZXltYXggPiBBVEhfS0VZTUFYKSB7CisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQU5ZLAorCQkJICAiV2FybmluZywgdXNpbmcgb25seSAldSBlbnRyaWVzIGluICV1IGtleSBjYWNoZVxuIiwKKwkJCSAgQVRIX0tFWU1BWCwgY29tbW9uLT5rZXltYXgpOworCQljb21tb24tPmtleW1heCA9IEFUSF9LRVlNQVg7CisJfQorCisJLyoKKwkgKiBSZXNldCB0aGUga2V5IGNhY2hlIHNpbmNlIHNvbWUgcGFydHMgZG8gbm90CisJICogcmVzZXQgdGhlIGNvbnRlbnRzIG9uIGluaXRpYWwgcG93ZXIgdXAuCisJICovCisJZm9yIChpID0gMDsgaSA8IGNvbW1vbi0+a2V5bWF4OyBpKyspCisJCWF0aDlrX2h3X2tleXJlc2V0KHNjLT5zY19haCwgKHUxNikgaSk7CisKKwlpZiAoYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShzYy0+c2NfYWgsIEFUSDlLX0NBUF9DSVBIRVIsCisJCQkJICAgQVRIOUtfQ0lQSEVSX1RLSVAsIE5VTEwpKSB7CisJCS8qCisJCSAqIFdoZXRoZXIgd2Ugc2hvdWxkIGVuYWJsZSBoL3cgVEtJUCBNSUMuCisJCSAqIFhYWDogaWYgd2UgZG9uJ3Qgc3VwcG9ydCBXTUUgVEtJUCBNSUMsIHRoZW4gd2Ugd291bGRuJ3QKKwkJICogcmVwb3J0IFdNTSBjYXBhYmxlLCBzbyBpdCdzIGFsd2F5cyBzYWZlIHRvIHR1cm4gb24KKwkJICogVEtJUCBNSUMgaW4gdGhpcyBjYXNlLgorCQkgKi8KKwkJYXRoOWtfaHdfc2V0Y2FwYWJpbGl0eShzYy0+c2NfYWgsIEFUSDlLX0NBUF9US0lQX01JQywgMCwgMSwgTlVMTCk7CisJfQorCisJLyoKKwkgKiBDaGVjayB3aGV0aGVyIHRoZSBzZXBhcmF0ZSBrZXkgY2FjaGUgZW50cmllcworCSAqIGFyZSByZXF1aXJlZCB0byBoYW5kbGUgYm90aCB0eCtyeCBNSUMga2V5cy4KKwkgKiBXaXRoIHNwbGl0IG1pYyBrZXlzIHRoZSBudW1iZXIgb2Ygc3RhdGlvbnMgaXMgbGltaXRlZAorCSAqIHRvIDI3IG90aGVyd2lzZSA1OS4KKwkgKi8KKwlpZiAoYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShzYy0+c2NfYWgsIEFUSDlLX0NBUF9DSVBIRVIsCisJCQkJICAgQVRIOUtfQ0lQSEVSX1RLSVAsIE5VTEwpCisJICAgICYmIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoc2MtPnNjX2FoLCBBVEg5S19DQVBfQ0lQSEVSLAorCQkJCSAgICAgIEFUSDlLX0NJUEhFUl9NSUMsIE5VTEwpCisJICAgICYmIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoc2MtPnNjX2FoLCBBVEg5S19DQVBfVEtJUF9TUExJVCwKKwkJCQkgICAgICAwLCBOVUxMKSkKKwkJY29tbW9uLT5zcGxpdG1pYyA9IDE7CisKKwkvKiB0dXJuIG9uIG1jYXN0IGtleSBzZWFyY2ggaWYgcG9zc2libGUgKi8KKwlpZiAoIWF0aDlrX2h3X2dldGNhcGFiaWxpdHkoc2MtPnNjX2FoLCBBVEg5S19DQVBfTUNBU1RfS0VZU1JDSCwgMCwgTlVMTCkpCisJCSh2b2lkKWF0aDlrX2h3X3NldGNhcGFiaWxpdHkoc2MtPnNjX2FoLCBBVEg5S19DQVBfTUNBU1RfS0VZU1JDSCwKKwkJCQkJICAgICAxLCAxLCBOVUxMKTsKKworfQorCitzdGF0aWMgaW50IGF0aDlrX2luaXRfYnRjb2V4KHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCWludCByLCBxbnVtOworCisJc3dpdGNoIChzYy0+c2NfYWgtPmJ0Y29leF9ody5zY2hlbWUpIHsKKwljYXNlIEFUSF9CVENPRVhfQ0ZHX05PTkU6CisJCWJyZWFrOworCWNhc2UgQVRIX0JUQ09FWF9DRkdfMldJUkU6CisJCWF0aDlrX2h3X2J0Y29leF9pbml0XzJ3aXJlKHNjLT5zY19haCk7CisJCWJyZWFrOworCWNhc2UgQVRIX0JUQ09FWF9DRkdfM1dJUkU6CisJCWF0aDlrX2h3X2J0Y29leF9pbml0XzN3aXJlKHNjLT5zY19haCk7CisJCXIgPSBhdGhfaW5pdF9idGNvZXhfdGltZXIoc2MpOworCQlpZiAocikKKwkJCXJldHVybiAtMTsKKwkJcW51bSA9IGF0aF90eF9nZXRfcW51bShzYywgQVRIOUtfVFhfUVVFVUVfREFUQSwgQVRIOUtfV01FX0FDX0JFKTsKKwkJYXRoOWtfaHdfaW5pdF9idGNvZXhfaHcoc2MtPnNjX2FoLCBxbnVtKTsKKwkJc2MtPmJ0Y29leC5idF9zdG9tcF90eXBlID0gQVRIX0JUQ09FWF9TVE9NUF9MT1c7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT04oMSk7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF0aDlrX2luaXRfcXVldWVzKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKKwlpbnQgaSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYy0+dHguaHdxX21hcCk7IGkrKykKKwkJc2MtPnR4Lmh3cV9tYXBbaV0gPSAtMTsKKworCXNjLT5iZWFjb24uYmVhY29ucSA9IGF0aDlrX2h3X2JlYWNvbnFfc2V0dXAoc2MtPnNjX2FoKTsKKwlpZiAoc2MtPmJlYWNvbi5iZWFjb25xID09IC0xKSB7CisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCisJCQkgICJVbmFibGUgdG8gc2V0dXAgYSBiZWFjb24geG1pdCBxdWV1ZVxuIik7CisJCWdvdG8gZXJyOworCX0KKworCXNjLT5iZWFjb24uY2FicSA9IGF0aF90eHFfc2V0dXAoc2MsIEFUSDlLX1RYX1FVRVVFX0NBQiwgMCk7CisJaWYgKHNjLT5iZWFjb24uY2FicSA9PSBOVUxMKSB7CisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCisJCQkgICJVbmFibGUgdG8gc2V0dXAgQ0FCIHhtaXQgcXVldWVcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlzYy0+Y29uZmlnLmNhYnFSZWFkeXRpbWUgPSBBVEhfQ0FCUV9SRUFEWV9USU1FOworCWF0aF9jYWJxX3VwZGF0ZShzYyk7CisKKwlpZiAoIWF0aF90eF9zZXR1cChzYywgQVRIOUtfV01FX0FDX0JLKSkgeworCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAorCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIEJLIHRyYWZmaWNcbiIpOworCQlnb3RvIGVycjsKKwl9CisKKwlpZiAoIWF0aF90eF9zZXR1cChzYywgQVRIOUtfV01FX0FDX0JFKSkgeworCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAorCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIEJFIHRyYWZmaWNcbiIpOworCQlnb3RvIGVycjsKKwl9CisJaWYgKCFhdGhfdHhfc2V0dXAoc2MsIEFUSDlLX1dNRV9BQ19WSSkpIHsKKwkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKKwkJCSAgIlVuYWJsZSB0byBzZXR1cCB4bWl0IHF1ZXVlIGZvciBWSSB0cmFmZmljXG4iKTsKKwkJZ290byBlcnI7CisJfQorCWlmICghYXRoX3R4X3NldHVwKHNjLCBBVEg5S19XTUVfQUNfVk8pKSB7CisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCisJCQkgICJVbmFibGUgdG8gc2V0dXAgeG1pdCBxdWV1ZSBmb3IgVk8gdHJhZmZpY1xuIik7CisJCWdvdG8gZXJyOworCX0KKworCXJldHVybiAwOworCitlcnI6CisJZm9yIChpID0gMDsgaSA8IEFUSDlLX05VTV9UWF9RVUVVRVM7IGkrKykKKwkJaWYgKEFUSF9UWFFfU0VUVVAoc2MsIGkpKQorCQkJYXRoX3R4X2NsZWFudXBxKHNjLCAmc2MtPnR4LnR4cVtpXSk7CisKKwlyZXR1cm4gLUVJTzsKK30KKworc3RhdGljIHZvaWQgYXRoOWtfaW5pdF9jaGFubmVsc19yYXRlcyhzdHJ1Y3QgYXRoX3NvZnRjICpzYykKK3sKKwlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUcsIHNjLT5zY19haC0+Y2Fwcy53aXJlbGVzc19tb2RlcykpIHsKKwkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5jaGFubmVscyA9IGF0aDlrXzJnaHpfY2hhbnRhYmxlOworCQlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOworCQlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLm5fY2hhbm5lbHMgPQorCQkJQVJSQVlfU0laRShhdGg5a18yZ2h6X2NoYW50YWJsZSk7CisJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0uYml0cmF0ZXMgPSBhdGg5a19sZWdhY3lfcmF0ZXM7CisJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0ubl9iaXRyYXRlcyA9CisJCQlBUlJBWV9TSVpFKGF0aDlrX2xlZ2FjeV9yYXRlcyk7CisJfQorCisJaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFBLCBzYy0+c2NfYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKSB7CisJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uY2hhbm5lbHMgPSBhdGg5a181Z2h6X2NoYW50YWJsZTsKKwkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWjsKKwkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5uX2NoYW5uZWxzID0KKwkJCUFSUkFZX1NJWkUoYXRoOWtfNWdoel9jaGFudGFibGUpOworCQlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLmJpdHJhdGVzID0KKwkJCWF0aDlrX2xlZ2FjeV9yYXRlcyArIDQ7CisJCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9iaXRyYXRlcyA9CisJCQlBUlJBWV9TSVpFKGF0aDlrX2xlZ2FjeV9yYXRlcykgLSA0OworCX0KK30KKworc3RhdGljIHZvaWQgYXRoOWtfaW5pdF9taXNjKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKKwlpbnQgaSA9IDA7CisKKwljb21tb24tPmFuaS5ub2lzZV9mbG9vciA9IEFUSF9ERUZBVUxUX05PSVNFX0ZMT09SOworCXNldHVwX3RpbWVyKCZjb21tb24tPmFuaS50aW1lciwgYXRoX2FuaV9jYWxpYnJhdGUsICh1bnNpZ25lZCBsb25nKXNjKTsKKworCXNjLT5jb25maWcudHhwb3dsaW1pdCA9IEFUSF9UWFBPV0VSX01BWDsKKworCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgeworCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfVFhBR0dSOworCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfUlhBR0dSOworCX0KKworCWNvbW1vbi0+dHhfY2hhaW5tYXNrID0gc2MtPnNjX2FoLT5jYXBzLnR4X2NoYWlubWFzazsKKwljb21tb24tPnJ4X2NoYWlubWFzayA9IHNjLT5zY19haC0+Y2Fwcy5yeF9jaGFpbm1hc2s7CisKKwlhdGg5a19od19zZXRjYXBhYmlsaXR5KHNjLT5zY19haCwgQVRIOUtfQ0FQX0RJVkVSU0lUWSwgMSwgdHJ1ZSwgTlVMTCk7CisJc2MtPnJ4LmRlZmFudCA9IGF0aDlrX2h3X2dldGRlZmFudGVubmEoc2MtPnNjX2FoKTsKKworCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9CU1NJRE1BU0spCisJCW1lbWNweShjb21tb24tPmJzc2lkbWFzaywgYXRoX2JjYXN0X21hYywgRVRIX0FMRU4pOworCisJc2MtPmJlYWNvbi5zbG90dGltZSA9IEFUSDlLX1NMT1RfVElNRV85OworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2MtPmJlYWNvbi5ic2xvdCk7IGkrKykgeworCQlzYy0+YmVhY29uLmJzbG90W2ldID0gTlVMTDsKKwkJc2MtPmJlYWNvbi5ic2xvdF9hcGh5W2ldID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYXRoOWtfaW5pdF9zb2Z0Yyh1MTYgZGV2aWQsIHN0cnVjdCBhdGhfc29mdGMgKnNjLCB1MTYgc3Vic3lzaWQsCisJCQkgICAgY29uc3Qgc3RydWN0IGF0aF9idXNfb3BzICpidXNfb3BzKQoreworCXN0cnVjdCBhdGhfaHcgKmFoID0gTlVMTDsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uOworCWludCByZXQgPSAwLCBpOworCWludCBjc3ogPSAwOworCisJYWggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXRoX2h3KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhaCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlhaC0+aHdfdmVyc2lvbi5kZXZpZCA9IGRldmlkOworCWFoLT5od192ZXJzaW9uLnN1YnN5c2lkID0gc3Vic3lzaWQ7CisJc2MtPnNjX2FoID0gYWg7CisKKwljb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOworCWNvbW1vbi0+b3BzID0gJmF0aDlrX2NvbW1vbl9vcHM7CisJY29tbW9uLT5idXNfb3BzID0gYnVzX29wczsKKwljb21tb24tPmFoID0gYWg7CisJY29tbW9uLT5odyA9IHNjLT5odzsKKwljb21tb24tPnByaXYgPSBzYzsKKwljb21tb24tPmRlYnVnX21hc2sgPSBhdGg5a19kZWJ1ZzsKKworCXNwaW5fbG9ja19pbml0KCZzYy0+d2lwaHlfbG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnNjLT5zY19yZXNldGxvY2spOworCXNwaW5fbG9ja19pbml0KCZzYy0+c2Nfc2VyaWFsX3J3KTsKKwlzcGluX2xvY2tfaW5pdCgmc2MtPnNjX3BtX2xvY2spOworCW11dGV4X2luaXQoJnNjLT5tdXRleCk7CisJdGFza2xldF9pbml0KCZzYy0+aW50cl90cSwgYXRoOWtfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpc2MpOworCXRhc2tsZXRfaW5pdCgmc2MtPmJjb25fdGFza2xldCwgYXRoX2JlYWNvbl90YXNrbGV0LAorCQkgICAgICh1bnNpZ25lZCBsb25nKXNjKTsKKworCS8qCisJICogQ2FjaGUgbGluZSBzaXplIGlzIHVzZWQgdG8gc2l6ZSBhbmQgYWxpZ24gdmFyaW91cworCSAqIHN0cnVjdHVyZXMgdXNlZCB0byBjb21tdW5pY2F0ZSB3aXRoIHRoZSBoYXJkd2FyZS4KKwkgKi8KKwlhdGhfcmVhZF9jYWNoZXNpemUoY29tbW9uLCAmY3N6KTsKKwljb21tb24tPmNhY2hlbHN6ID0gY3N6IDw8IDI7IC8qIGNvbnZlcnQgdG8gYnl0ZXMgKi8KKworCXJldCA9IGF0aDlrX2h3X2luaXQoYWgpOworCWlmIChyZXQpIHsKKwkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKKwkJCSAgIlVuYWJsZSB0byBpbml0aWFsaXplIGhhcmR3YXJlOyAiCisJCQkgICJpbml0aWFsaXphdGlvbiBzdGF0dXM6ICVkXG4iLCByZXQpOworCQlnb3RvIGVycl9odzsKKwl9CisKKwlyZXQgPSBhdGg5a19pbml0X2RlYnVnKGFoKTsKKwlpZiAocmV0KSB7CisJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCisJCQkgICJVbmFibGUgdG8gY3JlYXRlIGRlYnVnZnMgZmlsZXNcbiIpOworCQlnb3RvIGVycl9kZWJ1ZzsKKwl9CisKKwlyZXQgPSBhdGg5a19pbml0X3F1ZXVlcyhzYyk7CisJaWYgKHJldCkKKwkJZ290byBlcnJfcXVldWVzOworCisJcmV0ID0gIGF0aDlrX2luaXRfYnRjb2V4KHNjKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9idGNvZXg7CisKKwlhdGg5a19pbml0X2NyeXB0byhzYyk7CisJYXRoOWtfaW5pdF9jaGFubmVsc19yYXRlcyhzYyk7CisJYXRoOWtfaW5pdF9taXNjKHNjKTsKKworCXJldHVybiAwOworCitlcnJfYnRjb2V4OgorCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fVFhfUVVFVUVTOyBpKyspCisJCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkKKwkJCWF0aF90eF9jbGVhbnVwcShzYywgJnNjLT50eC50eHFbaV0pOworZXJyX3F1ZXVlczoKKwlhdGg5a19leGl0X2RlYnVnKGFoKTsKK2Vycl9kZWJ1ZzoKKwlhdGg5a19od19kZWluaXQoYWgpOworZXJyX2h3OgorCXRhc2tsZXRfa2lsbCgmc2MtPmludHJfdHEpOworCXRhc2tsZXRfa2lsbCgmc2MtPmJjb25fdGFza2xldCk7CisKKwlrZnJlZShhaCk7CisJc2MtPnNjX2FoID0gTlVMTDsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgYXRoOWtfc2V0X2h3X2NhcGFiKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCk7CisKKwlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKKwkJSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8CisJCUlFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKKwkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKKwkJSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIHwKKwkJSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQgfAorCQlJRUVFODAyMTFfSFdfUkVQT1JUU19UWF9BQ0tfU1RBVFVTOworCisJaWYgKHNjLT5zY19haC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0hUKQorCQkgaHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTjsKKworCWlmIChBUl9TUkVWXzkxNjBfMTBfT1JfTEFURVIoc2MtPnNjX2FoKSB8fCBtb2RwYXJhbV9ub2h3Y3J5cHQpCisJCWh3LT5mbGFncyB8PSBJRUVFODAyMTFfSFdfTUZQX0NBUEFCTEU7CisKKwlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9CisJCUJJVChOTDgwMjExX0lGVFlQRV9BUCkgfAorCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfAorCQlCSVQoTkw4MDIxMV9JRlRZUEVfQURIT0MpIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpOworCisJaHctPndpcGh5LT5mbGFncyAmPSB+V0lQSFlfRkxBR19QU19PTl9CWV9ERUZBVUxUOworCisJaHctPnF1ZXVlcyA9IDQ7CisJaHctPm1heF9yYXRlcyA9IDQ7CisJaHctPmNoYW5uZWxfY2hhbmdlX3RpbWUgPSA1MDAwOworCWh3LT5tYXhfbGlzdGVuX2ludGVydmFsID0gMTA7CisJaHctPm1heF9yYXRlX3RyaWVzID0gMTA7CisJaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGF0aF9ub2RlKTsKKwlody0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRoX3ZpZik7CisKKwlody0+cmF0ZV9jb250cm9sX2FsZ29yaXRobSA9ICJhdGg5a19yYXRlX2NvbnRyb2wiOworCisJaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFHLCBzYy0+c2NfYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKQorCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0KKwkJCSZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOworCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkKKwkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9CisJCQkmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKKworCWlmIChzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgeworCQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUcsIHNjLT5zY19haC0+Y2Fwcy53aXJlbGVzc19tb2RlcykpCisJCQlzZXR1cF9odF9jYXAoc2MsICZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmh0X2NhcCk7CisJCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkKKwkJCXNldHVwX2h0X2NhcChzYywgJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uaHRfY2FwKTsKKwl9CisKKwlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihodywgY29tbW9uLT5tYWNhZGRyKTsKK30KKworaW50IGF0aDlrX2luaXRfZGV2aWNlKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHUxNiBzdWJzeXNpZCwKKwkJICAgIGNvbnN0IHN0cnVjdCBhdGhfYnVzX29wcyAqYnVzX29wcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKKwlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uOworCXN0cnVjdCBhdGhfaHcgKmFoOworCWludCBlcnJvciA9IDA7CisJc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWc7CisKKwkvKiBCcmluZyB1cCBkZXZpY2UgKi8KKwllcnJvciA9IGF0aDlrX2luaXRfc29mdGMoZGV2aWQsIHNjLCBzdWJzeXNpZCwgYnVzX29wcyk7CisJaWYgKGVycm9yICE9IDApCisJCWdvdG8gZXJyb3JfaW5pdDsKKworCWFoID0gc2MtPnNjX2FoOworCWNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7CisJYXRoOWtfc2V0X2h3X2NhcGFiKHNjLCBodyk7CisKKwkvKiBJbml0aWFsaXplIHJlZ3VsYXRvcnkgKi8KKwllcnJvciA9IGF0aF9yZWdkX2luaXQoJmNvbW1vbi0+cmVndWxhdG9yeSwgc2MtPmh3LT53aXBoeSwKKwkJCSAgICAgIGF0aDlrX3JlZ19ub3RpZmllcik7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycm9yX3JlZ2Q7CisKKwlyZWcgPSAmY29tbW9uLT5yZWd1bGF0b3J5OworCisJLyogU2V0dXAgVFggRE1BICovCisJZXJyb3IgPSBhdGhfdHhfaW5pdChzYywgQVRIX1RYQlVGKTsKKwlpZiAoZXJyb3IgIT0gMCkKKwkJZ290byBlcnJvcl90eDsKKworCS8qIFNldHVwIFJYIERNQSAqLworCWVycm9yID0gYXRoX3J4X2luaXQoc2MsIEFUSF9SWEJVRik7CisJaWYgKGVycm9yICE9IDApCisJCWdvdG8gZXJyb3Jfcng7CisKKwkvKiBSZWdpc3RlciB3aXRoIG1hYzgwMjExICovCisJZXJyb3IgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoaHcpOworCWlmIChlcnJvcikKKwkJZ290byBlcnJvcl9yZWdpc3RlcjsKKworCS8qIEhhbmRsZSB3b3JsZCByZWd1bGF0b3J5ICovCisJaWYgKCFhdGhfaXNfd29ybGRfcmVnZChyZWcpKSB7CisJCWVycm9yID0gcmVndWxhdG9yeV9oaW50KGh3LT53aXBoeSwgcmVnLT5hbHBoYTIpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGVycm9yX3dvcmxkOworCX0KKworCUlOSVRfV09SSygmc2MtPmNoYW5fd29yaywgYXRoOWtfd2lwaHlfY2hhbl93b3JrKTsKKwlJTklUX0RFTEFZRURfV09SSygmc2MtPndpcGh5X3dvcmssIGF0aDlrX3dpcGh5X3dvcmspOworCXNjLT53aXBoeV9zY2hlZHVsZXJfaW50ID0gbXNlY3NfdG9famlmZmllcyg1MDApOworCisJYXRoX2luaXRfbGVkcyhzYyk7CisJYXRoX3N0YXJ0X3Jma2lsbF9wb2xsKHNjKTsKKworCXJldHVybiAwOworCitlcnJvcl93b3JsZDoKKwlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhodyk7CitlcnJvcl9yZWdpc3RlcjoKKwlhdGhfcnhfY2xlYW51cChzYyk7CitlcnJvcl9yeDoKKwlhdGhfdHhfY2xlYW51cChzYyk7CitlcnJvcl90eDoKKwkvKiBOb3RoaW5nICovCitlcnJvcl9yZWdkOgorCWF0aDlrX2RlaW5pdF9zb2Z0YyhzYyk7CitlcnJvcl9pbml0OgorCXJldHVybiBlcnJvcjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgIERlLUluaXRpYWxpemF0aW9uICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBhdGg5a19kZWluaXRfc29mdGMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCit7CisJaW50IGkgPSAwOworCisgICAgICAgIGlmICgoc2MtPmJ0Y29leC5ub19zdG9tcF90aW1lcikgJiYKKwkgICAgc2MtPnNjX2FoLT5idGNvZXhfaHcuc2NoZW1lID09IEFUSF9CVENPRVhfQ0ZHXzNXSVJFKQorCQlhdGhfZ2VuX3RpbWVyX2ZyZWUoc2MtPnNjX2FoLCBzYy0+YnRjb2V4Lm5vX3N0b21wX3RpbWVyKTsKKworCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fVFhfUVVFVUVTOyBpKyspCisJCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkKKwkJCWF0aF90eF9jbGVhbnVwcShzYywgJnNjLT50eC50eHFbaV0pOworCisJYXRoOWtfZXhpdF9kZWJ1ZyhzYy0+c2NfYWgpOworCWF0aDlrX2h3X2RlaW5pdChzYy0+c2NfYWgpOworCisJdGFza2xldF9raWxsKCZzYy0+aW50cl90cSk7CisJdGFza2xldF9raWxsKCZzYy0+YmNvbl90YXNrbGV0KTsKK30KKwordm9pZCBhdGg5a19kZWluaXRfZGV2aWNlKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OworCWludCBpID0gMDsKKworCWF0aDlrX3BzX3dha2V1cChzYyk7CisKKwl3aXBoeV9yZmtpbGxfc3RvcF9wb2xsaW5nKHNjLT5ody0+d2lwaHkpOworCWF0aF9kZWluaXRfbGVkcyhzYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2MtPm51bV9zZWNfd2lwaHk7IGkrKykgeworCQlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gc2MtPnNlY193aXBoeVtpXTsKKwkJaWYgKGFwaHkgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlzYy0+c2VjX3dpcGh5W2ldID0gTlVMTDsKKwkJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoYXBoeS0+aHcpOworCQlpZWVlODAyMTFfZnJlZV9odyhhcGh5LT5odyk7CisJfQorCWtmcmVlKHNjLT5zZWNfd2lwaHkpOworCisJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoaHcpOworCWF0aF9yeF9jbGVhbnVwKHNjKTsKKwlhdGhfdHhfY2xlYW51cChzYyk7CisJYXRoOWtfZGVpbml0X3NvZnRjKHNjKTsKK30KKwordm9pZCBhdGhfZGVzY2RtYV9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAorCQkJIHN0cnVjdCBhdGhfZGVzY2RtYSAqZGQsCisJCQkgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKK3sKKwlkbWFfZnJlZV9jb2hlcmVudChzYy0+ZGV2LCBkZC0+ZGRfZGVzY19sZW4sIGRkLT5kZF9kZXNjLAorCQkJICBkZC0+ZGRfZGVzY19wYWRkcik7CisKKwlJTklUX0xJU1RfSEVBRChoZWFkKTsKKwlrZnJlZShkZC0+ZGRfYnVmcHRyKTsKKwltZW1zZXQoZGQsIDAsIHNpemVvZigqZGQpKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICBNb2R1bGUgSG9va3MgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IF9faW5pdCBhdGg5a19pbml0KHZvaWQpCit7CisJaW50IGVycm9yOworCisJLyogUmVnaXN0ZXIgcmF0ZSBjb250cm9sIGFsZ29yaXRobSAqLworCWVycm9yID0gYXRoX3JhdGVfY29udHJvbF9yZWdpc3RlcigpOworCWlmIChlcnJvciAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImF0aDlrOiBVbmFibGUgdG8gcmVnaXN0ZXIgcmF0ZSBjb250cm9sICIKKwkJCSJhbGdvcml0aG06ICVkXG4iLAorCQkJZXJyb3IpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCisJZXJyb3IgPSBhdGg5a19kZWJ1Z19jcmVhdGVfcm9vdCgpOworCWlmIChlcnJvcikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJCSJhdGg5azogVW5hYmxlIHRvIGNyZWF0ZSBkZWJ1Z2ZzIHJvb3Q6ICVkXG4iLAorCQkJZXJyb3IpOworCQlnb3RvIGVycl9yYXRlX3VucmVnaXN0ZXI7CisJfQorCisJZXJyb3IgPSBhdGhfcGNpX2luaXQoKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJImF0aDlrOiBObyBQQ0kgZGV2aWNlcyBmb3VuZCwgZHJpdmVyIG5vdCBpbnN0YWxsZWQuXG4iKTsKKwkJZXJyb3IgPSAtRU5PREVWOworCQlnb3RvIGVycl9yZW1vdmVfcm9vdDsKKwl9CisKKwllcnJvciA9IGF0aF9haGJfaW5pdCgpOworCWlmIChlcnJvciA8IDApIHsKKwkJZXJyb3IgPSAtRU5PREVWOworCQlnb3RvIGVycl9wY2lfZXhpdDsKKwl9CisKKwlyZXR1cm4gMDsKKworIGVycl9wY2lfZXhpdDoKKwlhdGhfcGNpX2V4aXQoKTsKKworIGVycl9yZW1vdmVfcm9vdDoKKwlhdGg5a19kZWJ1Z19yZW1vdmVfcm9vdCgpOworIGVycl9yYXRlX3VucmVnaXN0ZXI6CisJYXRoX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKCk7CisgZXJyX291dDoKKwlyZXR1cm4gZXJyb3I7Cit9Cittb2R1bGVfaW5pdChhdGg5a19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGF0aDlrX2V4aXQodm9pZCkKK3sKKwlhdGhfYWhiX2V4aXQoKTsKKwlhdGhfcGNpX2V4aXQoKTsKKwlhdGg5a19kZWJ1Z19yZW1vdmVfcm9vdCgpOworCWF0aF9yYXRlX2NvbnRyb2xfdW5yZWdpc3RlcigpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBEcml2ZXIgdW5sb2FkZWRcbiIsIGRldl9pbmZvKTsKK30KK21vZHVsZV9leGl0KGF0aDlrX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21hYy5oCmluZGV4IGUxODU0NzkuLjI5ODUxZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFjLmgKQEAgLTE2Nyw2ICsxNjcsNDAgQEAKICNkZWZpbmUgQVRIOUtfUlhLRVlJWF9JTlZBTElECSgodTgpLTEpCiAjZGVmaW5lIEFUSDlLX1RYS0VZSVhfSU5WQUxJRAkoKHUzMiktMSkKIAorZW51bSBhdGg5a19waHllcnIgeworCUFUSDlLX1BIWUVSUl9VTkRFUlJVTiAgICAgICAgICAgICA9IDAsICAvKiBUcmFuc21pdCB1bmRlcnJ1biAqLworCUFUSDlLX1BIWUVSUl9USU1JTkcgICAgICAgICAgICAgICA9IDEsICAvKiBUaW1pbmcgZXJyb3IgKi8KKwlBVEg5S19QSFlFUlJfUEFSSVRZICAgICAgICAgICAgICAgPSAyLCAgLyogSWxsZWdhbCBwYXJpdHkgKi8KKwlBVEg5S19QSFlFUlJfUkFURSAgICAgICAgICAgICAgICAgPSAzLCAgLyogSWxsZWdhbCByYXRlICovCisJQVRIOUtfUEhZRVJSX0xFTkdUSCAgICAgICAgICAgICAgID0gNCwgIC8qIElsbGVnYWwgbGVuZ3RoICovCisJQVRIOUtfUEhZRVJSX1JBREFSICAgICAgICAgICAgICAgID0gNSwgIC8qIFJhZGFyIGRldGVjdCAqLworCUFUSDlLX1BIWUVSUl9TRVJWSUNFICAgICAgICAgICAgICA9IDYsICAvKiBJbGxlZ2FsIHNlcnZpY2UgKi8KKwlBVEg5S19QSFlFUlJfVE9SICAgICAgICAgICAgICAgICAgPSA3LCAgLyogVHJhbnNtaXQgb3ZlcnJpZGUgcmVjZWl2ZSAqLworCisJQVRIOUtfUEhZRVJSX09GRE1fVElNSU5HICAgICAgICAgID0gMTcsCisJQVRIOUtfUEhZRVJSX09GRE1fU0lHTkFMX1BBUklUWSAgID0gMTgsCisJQVRIOUtfUEhZRVJSX09GRE1fUkFURV9JTExFR0FMICAgID0gMTksCisJQVRIOUtfUEhZRVJSX09GRE1fTEVOR1RIX0lMTEVHQUwgID0gMjAsCisJQVRIOUtfUEhZRVJSX09GRE1fUE9XRVJfRFJPUCAgICAgID0gMjEsCisJQVRIOUtfUEhZRVJSX09GRE1fU0VSVklDRSAgICAgICAgID0gMjIsCisJQVRIOUtfUEhZRVJSX09GRE1fUkVTVEFSVCAgICAgICAgID0gMjMsCisJQVRIOUtfUEhZRVJSX0ZBTFNFX1JBREFSX0VYVCAgICAgID0gMjQsCisKKwlBVEg5S19QSFlFUlJfQ0NLX1RJTUlORyAgICAgICAgICAgPSAyNSwKKwlBVEg5S19QSFlFUlJfQ0NLX0hFQURFUl9DUkMgICAgICAgPSAyNiwKKwlBVEg5S19QSFlFUlJfQ0NLX1JBVEVfSUxMRUdBTCAgICAgPSAyNywKKwlBVEg5S19QSFlFUlJfQ0NLX1NFUlZJQ0UgICAgICAgICAgPSAzMCwKKwlBVEg5S19QSFlFUlJfQ0NLX1JFU1RBUlQgICAgICAgICAgPSAzMSwKKwlBVEg5S19QSFlFUlJfQ0NLX0xFTkdUSF9JTExFR0FMICAgPSAzMiwKKwlBVEg5S19QSFlFUlJfQ0NLX1BPV0VSX0RST1AgICAgICAgPSAzMywKKworCUFUSDlLX1BIWUVSUl9IVF9DUkNfRVJST1IgICAgICAgICA9IDM0LAorCUFUSDlLX1BIWUVSUl9IVF9MRU5HVEhfSUxMRUdBTCAgICA9IDM1LAorCUFUSDlLX1BIWUVSUl9IVF9SQVRFX0lMTEVHQUwgICAgICA9IDM2LAorCisJQVRIOUtfUEhZRVJSX01BWCAgICAgICAgICAgICAgICAgID0gMzcsCit9OworCiBzdHJ1Y3QgYXRoX2Rlc2MgewogCXUzMiBkc19saW5rOwogCXUzMiBkc19kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9tYWluLmMKaW5kZXggNjQzYmVhMy4uNjdjYTRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvbWFpbi5jCkBAIC0xOCwxMTggKzE4LDYgQEAKICNpbmNsdWRlICJhdGg5ay5oIgogI2luY2x1ZGUgImJ0Y29leC5oIgogCi1zdGF0aWMgY2hhciAqZGV2X2luZm8gPSAiYXRoOWsiOwotCi1NT0RVTEVfQVVUSE9SKCJBdGhlcm9zIENvbW11bmljYXRpb25zIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlN1cHBvcnQgZm9yIEF0aGVyb3MgODAyLjExbiB3aXJlbGVzcyBMQU4gY2FyZHMuIik7Ci1NT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiQXRoZXJvcyA4MDIuMTFuIFdMQU4gY2FyZHMiKTsKLU1PRFVMRV9MSUNFTlNFKCJEdWFsIEJTRC9HUEwiKTsKLQotc3RhdGljIGludCBtb2RwYXJhbV9ub2h3Y3J5cHQ7Ci1tb2R1bGVfcGFyYW1fbmFtZWQobm9od2NyeXB0LCBtb2RwYXJhbV9ub2h3Y3J5cHQsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5vaHdjcnlwdCwgIkRpc2FibGUgaGFyZHdhcmUgZW5jcnlwdGlvbiIpOwotCi1zdGF0aWMgdW5zaWduZWQgaW50IGF0aDlrX2RlYnVnID0gQVRIX0RCR19ERUZBVUxUOwotbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLCBhdGg5a19kZWJ1ZywgdWludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWdnaW5nIG1hc2siKTsKLQotLyogV2UgdXNlIHRoZSBod192YWx1ZSBhcyBhbiBpbmRleCBpbnRvIG91ciBwcml2YXRlIGNoYW5uZWwgc3RydWN0dXJlICovCi0KLSNkZWZpbmUgQ0hBTjJHKF9mcmVxLCBfaWR4KSAgeyBcCi0JLmNlbnRlcl9mcmVxID0gKF9mcmVxKSwgXAotCS5od192YWx1ZSA9IChfaWR4KSwgXAotCS5tYXhfcG93ZXIgPSAyMCwgXAotfQotCi0jZGVmaW5lIENIQU41RyhfZnJlcSwgX2lkeCkgeyBcCi0JLmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haLCBcCi0JLmNlbnRlcl9mcmVxID0gKF9mcmVxKSwgXAotCS5od192YWx1ZSA9IChfaWR4KSwgXAotCS5tYXhfcG93ZXIgPSAyMCwgXAotfQotCi0vKiBTb21lIDIgR0h6IHJhZGlvcyBhcmUgYWN0dWFsbHkgdHVuYWJsZSBvbiAyMzEyLTI3MzIKLSAqIG9uIDUgTUh6IHN0ZXBzLCB3ZSBzdXBwb3J0IHRoZSBjaGFubmVscyB3aGljaCB3ZSBrbm93Ci0gKiB3ZSBoYXZlIGNhbGlicmF0aW9uIGRhdGEgZm9yIGFsbCBjYXJkcyB0aG91Z2ggdG8gbWFrZQotICogdGhpcyBzdGF0aWMgKi8KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYXRoOWtfMmdoel9jaGFudGFibGVbXSA9IHsKLQlDSEFOMkcoMjQxMiwgMCksIC8qIENoYW5uZWwgMSAqLwotCUNIQU4yRygyNDE3LCAxKSwgLyogQ2hhbm5lbCAyICovCi0JQ0hBTjJHKDI0MjIsIDIpLCAvKiBDaGFubmVsIDMgKi8KLQlDSEFOMkcoMjQyNywgMyksIC8qIENoYW5uZWwgNCAqLwotCUNIQU4yRygyNDMyLCA0KSwgLyogQ2hhbm5lbCA1ICovCi0JQ0hBTjJHKDI0MzcsIDUpLCAvKiBDaGFubmVsIDYgKi8KLQlDSEFOMkcoMjQ0MiwgNiksIC8qIENoYW5uZWwgNyAqLwotCUNIQU4yRygyNDQ3LCA3KSwgLyogQ2hhbm5lbCA4ICovCi0JQ0hBTjJHKDI0NTIsIDgpLCAvKiBDaGFubmVsIDkgKi8KLQlDSEFOMkcoMjQ1NywgOSksIC8qIENoYW5uZWwgMTAgKi8KLQlDSEFOMkcoMjQ2MiwgMTApLCAvKiBDaGFubmVsIDExICovCi0JQ0hBTjJHKDI0NjcsIDExKSwgLyogQ2hhbm5lbCAxMiAqLwotCUNIQU4yRygyNDcyLCAxMiksIC8qIENoYW5uZWwgMTMgKi8KLQlDSEFOMkcoMjQ4NCwgMTMpLCAvKiBDaGFubmVsIDE0ICovCi19OwotCi0vKiBTb21lIDUgR0h6IHJhZGlvcyBhcmUgYWN0dWFsbHkgdHVuYWJsZSBvbiBYWFhYLVlZWVkKLSAqIG9uIDUgTUh6IHN0ZXBzLCB3ZSBzdXBwb3J0IHRoZSBjaGFubmVscyB3aGljaCB3ZSBrbm93Ci0gKiB3ZSBoYXZlIGNhbGlicmF0aW9uIGRhdGEgZm9yIGFsbCBjYXJkcyB0aG91Z2ggdG8gbWFrZQotICogdGhpcyBzdGF0aWMgKi8KLXN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgYXRoOWtfNWdoel9jaGFudGFibGVbXSA9IHsKLQkvKiBfV2VfIGNhbGwgdGhpcyBVTklJIDEgKi8KLQlDSEFONUcoNTE4MCwgMTQpLCAvKiBDaGFubmVsIDM2ICovCi0JQ0hBTjVHKDUyMDAsIDE1KSwgLyogQ2hhbm5lbCA0MCAqLwotCUNIQU41Ryg1MjIwLCAxNiksIC8qIENoYW5uZWwgNDQgKi8KLQlDSEFONUcoNTI0MCwgMTcpLCAvKiBDaGFubmVsIDQ4ICovCi0JLyogX1dlXyBjYWxsIHRoaXMgVU5JSSAyICovCi0JQ0hBTjVHKDUyNjAsIDE4KSwgLyogQ2hhbm5lbCA1MiAqLwotCUNIQU41Ryg1MjgwLCAxOSksIC8qIENoYW5uZWwgNTYgKi8KLQlDSEFONUcoNTMwMCwgMjApLCAvKiBDaGFubmVsIDYwICovCi0JQ0hBTjVHKDUzMjAsIDIxKSwgLyogQ2hhbm5lbCA2NCAqLwotCS8qIF9XZV8gY2FsbCB0aGlzICJNaWRkbGUgYmFuZCIgKi8KLQlDSEFONUcoNTUwMCwgMjIpLCAvKiBDaGFubmVsIDEwMCAqLwotCUNIQU41Ryg1NTIwLCAyMyksIC8qIENoYW5uZWwgMTA0ICovCi0JQ0hBTjVHKDU1NDAsIDI0KSwgLyogQ2hhbm5lbCAxMDggKi8KLQlDSEFONUcoNTU2MCwgMjUpLCAvKiBDaGFubmVsIDExMiAqLwotCUNIQU41Ryg1NTgwLCAyNiksIC8qIENoYW5uZWwgMTE2ICovCi0JQ0hBTjVHKDU2MDAsIDI3KSwgLyogQ2hhbm5lbCAxMjAgKi8KLQlDSEFONUcoNTYyMCwgMjgpLCAvKiBDaGFubmVsIDEyNCAqLwotCUNIQU41Ryg1NjQwLCAyOSksIC8qIENoYW5uZWwgMTI4ICovCi0JQ0hBTjVHKDU2NjAsIDMwKSwgLyogQ2hhbm5lbCAxMzIgKi8KLQlDSEFONUcoNTY4MCwgMzEpLCAvKiBDaGFubmVsIDEzNiAqLwotCUNIQU41Ryg1NzAwLCAzMiksIC8qIENoYW5uZWwgMTQwICovCi0JLyogX1dlXyBjYWxsIHRoaXMgVU5JSSAzICovCi0JQ0hBTjVHKDU3NDUsIDMzKSwgLyogQ2hhbm5lbCAxNDkgKi8KLQlDSEFONUcoNTc2NSwgMzQpLCAvKiBDaGFubmVsIDE1MyAqLwotCUNIQU41Ryg1Nzg1LCAzNSksIC8qIENoYW5uZWwgMTU3ICovCi0JQ0hBTjVHKDU4MDUsIDM2KSwgLyogQ2hhbm5lbCAxNjEgKi8KLQlDSEFONUcoNTgyNSwgMzcpLCAvKiBDaGFubmVsIDE2NSAqLwotfTsKLQotLyogQXRoZXJvcyBoYXJkd2FyZSByYXRlIGNvZGUgYWRkaXRpb24gZm9yIHNob3J0IHByZW1ibGUgKi8KLSNkZWZpbmUgU0hQQ0hFQ0soX19od19yYXRlLCBfX2ZsYWdzKSBcCi0JKChfX2ZsYWdzICYgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpID8gKF9faHdfcmF0ZSB8IDB4MDQgKSA6IDApCi0KLSNkZWZpbmUgUkFURShfYml0cmF0ZSwgX2h3X3JhdGUsIF9mbGFncykgeyAgICAgICAgICAgICAgXAotCS5iaXRyYXRlICAgICAgICA9IChfYml0cmF0ZSksICAgICAgICAgICAgICAgICAgIFwKLQkuZmxhZ3MgICAgICAgICAgPSAoX2ZsYWdzKSwgICAgICAgICAgICAgICAgICAgICBcCi0JLmh3X3ZhbHVlICAgICAgID0gKF9od19yYXRlKSwgICAgICAgICAgICAgICAgICAgXAotCS5od192YWx1ZV9zaG9ydCA9IChTSFBDSEVDSyhfaHdfcmF0ZSwgX2ZsYWdzKSkgIFwKLX0KLQotc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSBhdGg5a19sZWdhY3lfcmF0ZXNbXSA9IHsKLQlSQVRFKDEwLCAweDFiLCAwKSwKLQlSQVRFKDIwLCAweDFhLCBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksCi0JUkFURSg1NSwgMHgxOSwgSUVFRTgwMjExX1JBVEVfU0hPUlRfUFJFQU1CTEUpLAotCVJBVEUoMTEwLCAweDE4LCBJRUVFODAyMTFfUkFURV9TSE9SVF9QUkVBTUJMRSksCi0JUkFURSg2MCwgMHgwYiwgMCksCi0JUkFURSg5MCwgMHgwZiwgMCksCi0JUkFURSgxMjAsIDB4MGEsIDApLAotCVJBVEUoMTgwLCAweDBlLCAwKSwKLQlSQVRFKDI0MCwgMHgwOSwgMCksCi0JUkFURSgzNjAsIDB4MGQsIDApLAotCVJBVEUoNDgwLCAweDA4LCAwKSwKLQlSQVRFKDU0MCwgMHgwYywgMCksCi19OwotCiBzdGF0aWMgdm9pZCBhdGhfY2FjaGVfY29uZl9yYXRlKHN0cnVjdCBhdGhfc29mdGMgKnNjLAogCQkJCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZikKIHsKQEAgLTIyMSw3ICsxMDksNyBAQAogCXJldHVybiBjaGFubmVsOwogfQogCi1zdGF0aWMgYm9vbCBhdGg5a19zZXRwb3dlcihzdHJ1Y3QgYXRoX3NvZnRjICpzYywgZW51bSBhdGg5a19wb3dlcl9tb2RlIG1vZGUpCitib29sIGF0aDlrX3NldHBvd2VyKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBlbnVtIGF0aDlrX3Bvd2VyX21vZGUgbW9kZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWJvb2wgcmV0OwpAQCAtMjU1LDExICsxNDMsMTMgQEAKIAlpZiAoLS1zYy0+cHNfdXNlY291bnQgIT0gMCkKIAkJZ290byB1bmxvY2s7CiAKLQlpZiAoc2MtPnBzX2VuYWJsZWQgJiYKLQkgICAgIShzYy0+c2NfZmxhZ3MgJiAoU0NfT1BfV0FJVF9GT1JfQkVBQ09OIHwKLQkJCSAgICAgIFNDX09QX1dBSVRfRk9SX0NBQiB8Ci0JCQkgICAgICBTQ19PUF9XQUlUX0ZPUl9QU1BPTExfREFUQSB8Ci0JCQkgICAgICBTQ19PUF9XQUlUX0ZPUl9UWF9BQ0spKSkKKwlpZiAoc2MtPnBzX2lkbGUpCisJCWF0aDlrX2h3X3NldHBvd2VyKHNjLT5zY19haCwgQVRIOUtfUE1fRlVMTF9TTEVFUCk7CisJZWxzZSBpZiAoc2MtPnBzX2VuYWJsZWQgJiYKKwkJICEoc2MtPnBzX2ZsYWdzICYgKFBTX1dBSVRfRk9SX0JFQUNPTiB8CisJCQkgICAgICBQU19XQUlUX0ZPUl9DQUIgfAorCQkJICAgICAgUFNfV0FJVF9GT1JfUFNQT0xMX0RBVEEgfAorCQkJICAgICAgUFNfV0FJVF9GT1JfVFhfQUNLKSkpCiAJCWF0aDlrX2h3X3NldHBvd2VyKHNjLT5zY19haCwgQVRIOUtfUE1fTkVUV09SS19TTEVFUCk7CiAKICB1bmxvY2s6CkBAIC0zMTYsNyArMjA2LDcgQEAKIAlyID0gYXRoOWtfaHdfcmVzZXQoYWgsIGhjaGFuLCBmYXN0Y2MpOwogCWlmIChyKSB7CiAJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAoJXUgTWh6KSAiCisJCQkgICJVbmFibGUgdG8gcmVzZXQgY2hhbm5lbCAoJXUgTUh6KSwgIgogCQkJICAicmVzZXQgc3RhdHVzICVkXG4iLAogCQkJICBjaGFubmVsLT5jZW50ZXJfZnJlcSwgcik7CiAJCXNwaW5fdW5sb2NrX2JoKCZzYy0+c2NfcmVzZXRsb2NrKTsKQEAgLTM0OSw3ICsyMzksNyBAQAogICogIFdoZW4gdGhlIHRhc2sgaXMgY29tcGxldGUsIGl0IHJlc2NoZWR1bGVzIGl0c2VsZiBkZXBlbmRpbmcgb24gdGhlCiAgKiAgYXBwcm9wcmlhdGUgaW50ZXJ2YWwgdGhhdCB3YXMgY2FsY3VsYXRlZC4KICAqLwotc3RhdGljIHZvaWQgYXRoX2FuaV9jYWxpYnJhdGUodW5zaWduZWQgbG9uZyBkYXRhKQordm9pZCBhdGhfYW5pX2NhbGlicmF0ZSh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKWRhdGE7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CkBAIC0zNjMsMTQgKzI1Myw2IEBACiAJc2hvcnRfY2FsX2ludGVydmFsID0gKGFoLT5vcG1vZGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApID8KIAkJQVRIX0FQX1NIT1JUX0NBTElOVEVSVkFMIDogQVRIX1NUQV9TSE9SVF9DQUxJTlRFUlZBTDsKIAotCS8qCi0JKiBkb24ndCBjYWxpYnJhdGUgd2hlbiB3ZSdyZSBzY2FubmluZy4KLQkqIHdlIGFyZSBtb3N0IGxpa2VseSBub3Qgb24gb3VyIGhvbWUgY2hhbm5lbC4KLQkqLwotCXNwaW5fbG9jaygmc2MtPmFuaV9sb2NrKTsKLQlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfU0NBTk5JTkcpCi0JCWdvdG8gc2V0X3RpbWVyOwotCiAJLyogT25seSBjYWxpYnJhdGUgaWYgYXdha2UgKi8KIAlpZiAoc2MtPnNjX2FoLT5wb3dlcl9tb2RlICE9IEFUSDlLX1BNX0FXQUtFKQogCQlnb3RvIHNldF90aW1lcjsKQEAgLTQzNyw3ICszMTksNiBAQAogCWF0aDlrX3BzX3Jlc3RvcmUoc2MpOwogCiBzZXRfdGltZXI6Ci0Jc3Bpbl91bmxvY2soJnNjLT5hbmlfbG9jayk7CiAJLyoKIAkqIFNldCB0aW1lciBpbnRlcnZhbCBiYXNlZCBvbiBwcmV2aW91cyByZXN1bHRzLgogCSogVGhlIGludGVydmFsIG11c3QgYmUgdGhlIHNob3J0ZXN0IG5lY2Vzc2FyeSB0byBzYXRpc2Z5IEFOSSwKQEAgLTUxMyw3ICszOTQsNyBAQAogCQlhdGhfdHhfbm9kZV9jbGVhbnVwKHNjLCBhbik7CiB9CiAKLXN0YXRpYyB2b2lkIGF0aDlrX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQordm9pZCBhdGg5a190YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IChzdHJ1Y3QgYXRoX3NvZnRjICopZGF0YTsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKQEAgLTU0NSw3ICs0MjYsNyBAQAogCQkgKi8KIAkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19QUywKIAkJCSAgIlRTRk9PUiAtIFN5bmMgd2l0aCBuZXh0IEJlYWNvblxuIik7Ci0JCXNjLT5zY19mbGFncyB8PSBTQ19PUF9XQUlUX0ZPUl9CRUFDT04gfCBTQ19PUF9CRUFDT05fU1lOQzsKKwkJc2MtPnBzX2ZsYWdzIHw9IFBTX1dBSVRfRk9SX0JFQUNPTiB8IFBTX0JFQUNPTl9TWU5DOwogCX0KIAogCWlmIChhaC0+YnRjb2V4X2h3LnNjaGVtZSA9PSBBVEhfQlRDT0VYX0NGR18zV0lSRSkKQEAgLTY0Niw3ICs1MjcsNyBAQAogCQkJICogcmVjZWl2ZSBmcmFtZXMgKi8KIAkJCWF0aDlrX3NldHBvd2VyKHNjLCBBVEg5S19QTV9BV0FLRSk7CiAJCQlhdGg5a19od19zZXRyeGFib3J0KHNjLT5zY19haCwgMCk7Ci0JCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfV0FJVF9GT1JfQkVBQ09OOworCQkJc2MtPnBzX2ZsYWdzIHw9IFBTX1dBSVRfRk9SX0JFQUNPTjsKIAkJfQogCiBjaGlwX3Jlc2V0OgpAQCAtOTI4LDQ5ICs4MDksMTIgQEAKIAogCWNsZWFyX2JpdChrZXktPmh3X2tleV9pZHggKyA2NCwgY29tbW9uLT5rZXltYXApOwogCWlmIChjb21tb24tPnNwbGl0bWljKSB7CisJCWF0aDlrX2h3X2tleXJlc2V0KGFoLCBrZXktPmh3X2tleV9pZHggKyAzMik7CiAJCWNsZWFyX2JpdChrZXktPmh3X2tleV9pZHggKyAzMiwgY29tbW9uLT5rZXltYXApOwogCQljbGVhcl9iaXQoa2V5LT5od19rZXlfaWR4ICsgNjQgKyAzMiwgY29tbW9uLT5rZXltYXApOwogCX0KIH0KIAotc3RhdGljIHZvaWQgc2V0dXBfaHRfY2FwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqaHRfaW5mbykKLXsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCk7Ci0JdTggdHhfc3RyZWFtcywgcnhfc3RyZWFtczsKLQotCWh0X2luZm8tPmh0X3N1cHBvcnRlZCA9IHRydWU7Ci0JaHRfaW5mby0+Y2FwID0gSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAgfAotCQkgICAgICAgSUVFRTgwMjExX0hUX0NBUF9TTV9QUyB8Ci0JCSAgICAgICBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MCB8Ci0JCSAgICAgICBJRUVFODAyMTFfSFRfQ0FQX0RTU1NDQ0s0MDsKLQotCWh0X2luZm8tPmFtcGR1X2ZhY3RvciA9IElFRUU4MDIxMV9IVF9NQVhfQU1QRFVfNjRLOwotCWh0X2luZm8tPmFtcGR1X2RlbnNpdHkgPSBJRUVFODAyMTFfSFRfTVBEVV9ERU5TSVRZXzg7Ci0KLQkvKiBzZXQgdXAgc3VwcG9ydGVkIG1jcyBzZXQgKi8KLQltZW1zZXQoJmh0X2luZm8tPm1jcywgMCwgc2l6ZW9mKGh0X2luZm8tPm1jcykpOwotCXR4X3N0cmVhbXMgPSAhKGNvbW1vbi0+dHhfY2hhaW5tYXNrICYgKGNvbW1vbi0+dHhfY2hhaW5tYXNrIC0gMSkpID8KLQkJICAgICAxIDogMjsKLQlyeF9zdHJlYW1zID0gIShjb21tb24tPnJ4X2NoYWlubWFzayAmIChjb21tb24tPnJ4X2NoYWlubWFzayAtIDEpKSA/Ci0JCSAgICAgMSA6IDI7Ci0KLQlpZiAodHhfc3RyZWFtcyAhPSByeF9zdHJlYW1zKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLAotCQkJICAiVFggc3RyZWFtcyAlZCwgUlggc3RyZWFtczogJWRcbiIsCi0JCQkgIHR4X3N0cmVhbXMsIHJ4X3N0cmVhbXMpOwotCQlodF9pbmZvLT5tY3MudHhfcGFyYW1zIHw9IElFRUU4MDIxMV9IVF9NQ1NfVFhfUlhfRElGRjsKLQkJaHRfaW5mby0+bWNzLnR4X3BhcmFtcyB8PSAoKHR4X3N0cmVhbXMgLSAxKSA8PAotCQkJCUlFRUU4MDIxMV9IVF9NQ1NfVFhfTUFYX1NUUkVBTVNfU0hJRlQpOwotCX0KLQotCWh0X2luZm8tPm1jcy5yeF9tYXNrWzBdID0gMHhmZjsKLQlpZiAocnhfc3RyZWFtcyA+PSAyKQotCQlodF9pbmZvLT5tY3MucnhfbWFza1sxXSA9IDB4ZmY7Ci0KLQlodF9pbmZvLT5tY3MudHhfcGFyYW1zIHw9IElFRUU4MDIxMV9IVF9NQ1NfVFhfREVGSU5FRDsKLX0KLQogc3RhdGljIHZvaWQgYXRoOWtfYnNzX2Fzc29jX2luZm8oc3RydWN0IGF0aF9zb2Z0YyAqc2MsCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mKQpAQCAtOTkyLDcgKzgzNiw3IEBACiAJCSAqIG9uIHRoZSByZWNlaXB0IG9mIHRoZSBmaXJzdCBCZWFjb24gZnJhbWUgKGkuZS4sCiAJCSAqIGFmdGVyIHRpbWUgc3luYyB3aXRoIHRoZSBBUCkuCiAJCSAqLwotCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfQkVBQ09OX1NZTkM7CisJCXNjLT5wc19mbGFncyB8PSBQU19CRUFDT05fU1lOQzsKIAogCQkvKiBDb25maWd1cmUgdGhlIGJlYWNvbiAqLwogCQlhdGhfYmVhY29uX2NvbmZpZyhzYywgdmlmKTsKQEAgLTEwMDksMTc0ICs4NTMsNiBAQAogCX0KIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyoJIExFRCBmdW5jdGlvbnMJCSovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0YXRpYyB2b2lkIGF0aF9sZWRfYmxpbmtfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGF0aF9zb2Z0YywKLQkJCQkJICAgIGF0aF9sZWRfYmxpbmtfd29yay53b3JrKTsKLQotCWlmICghKHNjLT5zY19mbGFncyAmIFNDX09QX0xFRF9BU1NPQ0lBVEVEKSkKLQkJcmV0dXJuOwotCi0JaWYgKChzYy0+bGVkX29uX2R1cmF0aW9uID09IEFUSF9MRURfT05fRFVSQVRJT05fSURMRSkgfHwKLQkgICAgKHNjLT5sZWRfb2ZmX2R1cmF0aW9uID09IEFUSF9MRURfT0ZGX0RVUkFUSU9OX0lETEUpKQotCQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwgMCk7Ci0JZWxzZQotCQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwKLQkJCQkgIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9MRURfT04pID8gMSA6IDApOwotCi0JaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHcsCi0JCQkJICAgICAmc2MtPmF0aF9sZWRfYmxpbmtfd29yaywKLQkJCQkgICAgIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9MRURfT04pID8KLQkJCQkJbXNlY3NfdG9famlmZmllcyhzYy0+bGVkX29mZl9kdXJhdGlvbikgOgotCQkJCQltc2Vjc190b19qaWZmaWVzKHNjLT5sZWRfb25fZHVyYXRpb24pKTsKLQotCXNjLT5sZWRfb25fZHVyYXRpb24gPSBzYy0+bGVkX29uX2NudCA/Ci0JCQltYXgoKEFUSF9MRURfT05fRFVSQVRJT05fSURMRSAtIHNjLT5sZWRfb25fY250KSwgMjUpIDoKLQkJCUFUSF9MRURfT05fRFVSQVRJT05fSURMRTsKLQlzYy0+bGVkX29mZl9kdXJhdGlvbiA9IHNjLT5sZWRfb2ZmX2NudCA/Ci0JCQltYXgoKEFUSF9MRURfT0ZGX0RVUkFUSU9OX0lETEUgLSBzYy0+bGVkX29mZl9jbnQpLCAxMCkgOgotCQkJQVRIX0xFRF9PRkZfRFVSQVRJT05fSURMRTsKLQlzYy0+bGVkX29uX2NudCA9IHNjLT5sZWRfb2ZmX2NudCA9IDA7Ci0JaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0xFRF9PTikKLQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9MRURfT047Ci0JZWxzZQotCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfTEVEX09OOwotfQotCi1zdGF0aWMgdm9pZCBhdGhfbGVkX2JyaWdodG5lc3Moc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCi0JCQkgICAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyBicmlnaHRuZXNzKQotewotCXN0cnVjdCBhdGhfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBhdGhfbGVkLCBsZWRfY2Rldik7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSBsZWQtPnNjOwotCi0Jc3dpdGNoIChicmlnaHRuZXNzKSB7Ci0JY2FzZSBMRURfT0ZGOgotCQlpZiAobGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX0FTU09DIHx8Ci0JCSAgICBsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pIHsKLQkJCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgc2MtPnNjX2FoLT5sZWRfcGluLAotCQkJCShsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pKTsKLQkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfTEVEX0FTU09DSUFURUQ7Ci0JCQlpZiAobGVkLT5sZWRfdHlwZSA9PSBBVEhfTEVEX1JBRElPKQotCQkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfTEVEX09OOwotCQl9IGVsc2UgewotCQkJc2MtPmxlZF9vZmZfY250Kys7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBMRURfRlVMTDoKLQkJaWYgKGxlZC0+bGVkX3R5cGUgPT0gQVRIX0xFRF9BU1NPQykgewotCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX0xFRF9BU1NPQ0lBVEVEOwotCQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yayhzYy0+aHcsCi0JCQkJCQkgICAgICZzYy0+YXRoX2xlZF9ibGlua193b3JrLCAwKTsKLQkJfSBlbHNlIGlmIChsZWQtPmxlZF90eXBlID09IEFUSF9MRURfUkFESU8pIHsKLQkJCWF0aDlrX2h3X3NldF9ncGlvKHNjLT5zY19haCwgc2MtPnNjX2FoLT5sZWRfcGluLCAwKTsKLQkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9MRURfT047Ci0JCX0gZWxzZSB7Ci0JCQlzYy0+bGVkX29uX2NudCsrOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIGludCBhdGhfcmVnaXN0ZXJfbGVkKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgYXRoX2xlZCAqbGVkLAotCQkJICAgIGNoYXIgKnRyaWdnZXIpCi17Ci0JaW50IHJldDsKLQotCWxlZC0+c2MgPSBzYzsKLQlsZWQtPmxlZF9jZGV2Lm5hbWUgPSBsZWQtPm5hbWU7Ci0JbGVkLT5sZWRfY2Rldi5kZWZhdWx0X3RyaWdnZXIgPSB0cmlnZ2VyOwotCWxlZC0+bGVkX2NkZXYuYnJpZ2h0bmVzc19zZXQgPSBhdGhfbGVkX2JyaWdodG5lc3M7Ci0KLQlyZXQgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIod2lwaHlfZGV2KHNjLT5ody0+d2lwaHkpLCAmbGVkLT5sZWRfY2Rldik7Ci0JaWYgKHJldCkKLQkJYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihzYy0+c2NfYWgpLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiRmFpbGVkIHRvIHJlZ2lzdGVyIGxlZDolcyIsIGxlZC0+bmFtZSk7Ci0JZWxzZQotCQlsZWQtPnJlZ2lzdGVyZWQgPSAxOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF91bnJlZ2lzdGVyX2xlZChzdHJ1Y3QgYXRoX2xlZCAqbGVkKQotewotCWlmIChsZWQtPnJlZ2lzdGVyZWQpIHsKLQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmxlZC0+bGVkX2NkZXYpOwotCQlsZWQtPnJlZ2lzdGVyZWQgPSAwOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYXRoX2RlaW5pdF9sZWRzKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCWF0aF91bnJlZ2lzdGVyX2xlZCgmc2MtPmFzc29jX2xlZCk7Ci0Jc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9MRURfQVNTT0NJQVRFRDsKLQlhdGhfdW5yZWdpc3Rlcl9sZWQoJnNjLT50eF9sZWQpOwotCWF0aF91bnJlZ2lzdGVyX2xlZCgmc2MtPnJ4X2xlZCk7Ci0JYXRoX3VucmVnaXN0ZXJfbGVkKCZzYy0+cmFkaW9fbGVkKTsKLQlhdGg5a19od19zZXRfZ3BpbyhzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwgMSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF9pbml0X2xlZHMoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCi17Ci0JY2hhciAqdHJpZ2dlcjsKLQlpbnQgcmV0OwotCi0JaWYgKEFSX1NSRVZfOTI4NyhzYy0+c2NfYWgpKQotCQlzYy0+c2NfYWgtPmxlZF9waW4gPSBBVEhfTEVEX1BJTl85Mjg3OwotCWVsc2UKLQkJc2MtPnNjX2FoLT5sZWRfcGluID0gQVRIX0xFRF9QSU5fREVGOwotCi0JLyogQ29uZmlndXJlIGdwaW8gMSBmb3Igb3V0cHV0ICovCi0JYXRoOWtfaHdfY2ZnX291dHB1dChzYy0+c2NfYWgsIHNjLT5zY19haC0+bGVkX3BpbiwKLQkJCSAgICBBUl9HUElPX09VVFBVVF9NVVhfQVNfT1VUUFVUKTsKLQkvKiBMRUQgb2ZmLCBhY3RpdmUgbG93ICovCi0JYXRoOWtfaHdfc2V0X2dwaW8oc2MtPnNjX2FoLCBzYy0+c2NfYWgtPmxlZF9waW4sIDEpOwotCi0JSU5JVF9ERUxBWUVEX1dPUksoJnNjLT5hdGhfbGVkX2JsaW5rX3dvcmssIGF0aF9sZWRfYmxpbmtfd29yayk7Ci0KLQl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9yYWRpb19sZWRfbmFtZShzYy0+aHcpOwotCXNucHJpbnRmKHNjLT5yYWRpb19sZWQubmFtZSwgc2l6ZW9mKHNjLT5yYWRpb19sZWQubmFtZSksCi0JCSJhdGg5ay0lczo6cmFkaW8iLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKLQlyZXQgPSBhdGhfcmVnaXN0ZXJfbGVkKHNjLCAmc2MtPnJhZGlvX2xlZCwgdHJpZ2dlcik7Ci0Jc2MtPnJhZGlvX2xlZC5sZWRfdHlwZSA9IEFUSF9MRURfUkFESU87Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsOwotCi0JdHJpZ2dlciA9IGllZWU4MDIxMV9nZXRfYXNzb2NfbGVkX25hbWUoc2MtPmh3KTsKLQlzbnByaW50ZihzYy0+YXNzb2NfbGVkLm5hbWUsIHNpemVvZihzYy0+YXNzb2NfbGVkLm5hbWUpLAotCQkiYXRoOWstJXM6OmFzc29jIiwgd2lwaHlfbmFtZShzYy0+aHctPndpcGh5KSk7Ci0JcmV0ID0gYXRoX3JlZ2lzdGVyX2xlZChzYywgJnNjLT5hc3NvY19sZWQsIHRyaWdnZXIpOwotCXNjLT5hc3NvY19sZWQubGVkX3R5cGUgPSBBVEhfTEVEX0FTU09DOwotCWlmIChyZXQpCi0JCWdvdG8gZmFpbDsKLQotCXRyaWdnZXIgPSBpZWVlODAyMTFfZ2V0X3R4X2xlZF9uYW1lKHNjLT5odyk7Ci0Jc25wcmludGYoc2MtPnR4X2xlZC5uYW1lLCBzaXplb2Yoc2MtPnR4X2xlZC5uYW1lKSwKLQkJImF0aDlrLSVzOjp0eCIsIHdpcGh5X25hbWUoc2MtPmh3LT53aXBoeSkpOwotCXJldCA9IGF0aF9yZWdpc3Rlcl9sZWQoc2MsICZzYy0+dHhfbGVkLCB0cmlnZ2VyKTsKLQlzYy0+dHhfbGVkLmxlZF90eXBlID0gQVRIX0xFRF9UWDsKLQlpZiAocmV0KQotCQlnb3RvIGZhaWw7Ci0KLQl0cmlnZ2VyID0gaWVlZTgwMjExX2dldF9yeF9sZWRfbmFtZShzYy0+aHcpOwotCXNucHJpbnRmKHNjLT5yeF9sZWQubmFtZSwgc2l6ZW9mKHNjLT5yeF9sZWQubmFtZSksCi0JCSJhdGg5ay0lczo6cngiLCB3aXBoeV9uYW1lKHNjLT5ody0+d2lwaHkpKTsKLQlyZXQgPSBhdGhfcmVnaXN0ZXJfbGVkKHNjLCAmc2MtPnJ4X2xlZCwgdHJpZ2dlcik7Ci0Jc2MtPnJ4X2xlZC5sZWRfdHlwZSA9IEFUSF9MRURfUlg7Ci0JaWYgKHJldCkKLQkJZ290byBmYWlsOwotCi0JcmV0dXJuOwotCi1mYWlsOgotCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPmF0aF9sZWRfYmxpbmtfd29yayk7Ci0JYXRoX2RlaW5pdF9sZWRzKHNjKTsKLX0KLQogdm9pZCBhdGhfcmFkaW9fZW5hYmxlKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKQEAgLTExOTQsNyArODcwLDcgQEAKIAlyID0gYXRoOWtfaHdfcmVzZXQoYWgsIGFoLT5jdXJjaGFuLCBmYWxzZSk7CiAJaWYgKHIpIHsKIAkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVuYWJsZSB0byByZXNldCBjaGFubmVsICV1ICgldU1oeikgIiwKKwkJCSAgIlVuYWJsZSB0byByZXNldCBjaGFubmVsICgldSBNSHopLCAiCiAJCQkgICJyZXNldCBzdGF0dXMgJWRcbiIsCiAJCQkgIGNoYW5uZWwtPmNlbnRlcl9mcmVxLCByKTsKIAl9CkBAIC0xMjQ5LDcgKzkyNSw3IEBACiAJciA9IGF0aDlrX2h3X3Jlc2V0KGFoLCBhaC0+Y3VyY2hhbiwgZmFsc2UpOwogCWlmIChyKSB7CiAJCWF0aF9wcmludChhdGg5a19od19jb21tb24oc2MtPnNjX2FoKSwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVuYWJsZSB0byByZXNldCBjaGFubmVsICV1ICgldU1oeikgIgorCQkJICAiVW5hYmxlIHRvIHJlc2V0IGNoYW5uZWwgKCV1IE1IeiksICIKIAkJCSAgInJlc2V0IHN0YXR1cyAlZFxuIiwKIAkJCSAgY2hhbm5lbC0+Y2VudGVyX2ZyZXEsIHIpOwogCX0KQEAgLTEyNjEsNzExICs5MzcsNiBAQAogCWF0aDlrX3NldHBvd2VyKHNjLCBBVEg5S19QTV9GVUxMX1NMRUVQKTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKiovCi0vKglSZmtpbGwJICAgKi8KLS8qKioqKioqKioqKioqKioqKioqLwotCi1zdGF0aWMgYm9vbCBhdGhfaXNfcmZraWxsX3NldChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLQlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKLQotCXJldHVybiBhdGg5a19od19ncGlvX2dldChhaCwgYWgtPnJma2lsbF9ncGlvKSA9PQotCQkJCSAgYWgtPnJma2lsbF9wb2xhcml0eTsKLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfcmZraWxsX3BvbGxfc3RhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCi17Ci0Jc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7Ci0JYm9vbCBibG9ja2VkID0gISFhdGhfaXNfcmZraWxsX3NldChzYyk7Ci0KLQl3aXBoeV9yZmtpbGxfc2V0X2h3X3N0YXRlKGh3LT53aXBoeSwgYmxvY2tlZCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF9zdGFydF9yZmtpbGxfcG9sbChzdHJ1Y3QgYXRoX3NvZnRjICpzYykKLXsKLQlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKLQotCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX1JGU0lMRU5UKQotCQl3aXBoeV9yZmtpbGxfc3RhcnRfcG9sbGluZyhzYy0+aHctPndpcGh5KTsKLX0KLQotc3RhdGljIHZvaWQgYXRoOWtfdW5pbml0X2h3KHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCi0JQlVHX09OKCFhaCk7Ci0KLQlhdGg5a19leGl0X2RlYnVnKGFoKTsKLQlhdGg5a19od19kZXRhY2goYWgpOwotCXNjLT5zY19haCA9IE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aF9jbGVhbl9jb3JlKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3ID0gc2MtPmh3OwotCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCWludCBpID0gMDsKLQotCWF0aDlrX3BzX3dha2V1cChzYyk7Ci0KLQlkZXZfZGJnKHNjLT5kZXYsICJEZXRhY2ggQVRIIGh3XG4iKTsKLQotCWF0aF9kZWluaXRfbGVkcyhzYyk7Ci0Jd2lwaHlfcmZraWxsX3N0b3BfcG9sbGluZyhzYy0+aHctPndpcGh5KTsKLQotCWZvciAoaSA9IDA7IGkgPCBzYy0+bnVtX3NlY193aXBoeTsgaSsrKSB7Ci0JCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBzYy0+c2VjX3dpcGh5W2ldOwotCQlpZiAoYXBoeSA9PSBOVUxMKQotCQkJY29udGludWU7Ci0JCXNjLT5zZWNfd2lwaHlbaV0gPSBOVUxMOwotCQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyhhcGh5LT5odyk7Ci0JCWllZWU4MDIxMV9mcmVlX2h3KGFwaHktPmh3KTsKLQl9Ci0JaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoaHcpOwotCWF0aF9yeF9jbGVhbnVwKHNjKTsKLQlhdGhfdHhfY2xlYW51cChzYyk7Ci0KLQl0YXNrbGV0X2tpbGwoJnNjLT5pbnRyX3RxKTsKLQl0YXNrbGV0X2tpbGwoJnNjLT5iY29uX3Rhc2tsZXQpOwotCi0JaWYgKCEoc2MtPnNjX2ZsYWdzICYgU0NfT1BfSU5WQUxJRCkpCi0JCWF0aDlrX3NldHBvd2VyKHNjLCBBVEg5S19QTV9BV0FLRSk7Ci0KLQkvKiBjbGVhbnVwIHR4IHF1ZXVlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBBVEg5S19OVU1fVFhfUVVFVUVTOyBpKyspCi0JCWlmIChBVEhfVFhRX1NFVFVQKHNjLCBpKSkKLQkJCWF0aF90eF9jbGVhbnVwcShzYywgJnNjLT50eC50eHFbaV0pOwotCi0JaWYgKChzYy0+YnRjb2V4Lm5vX3N0b21wX3RpbWVyKSAmJgotCSAgICBhaC0+YnRjb2V4X2h3LnNjaGVtZSA9PSBBVEhfQlRDT0VYX0NGR18zV0lSRSkKLQkJYXRoX2dlbl90aW1lcl9mcmVlKGFoLCBzYy0+YnRjb2V4Lm5vX3N0b21wX3RpbWVyKTsKLX0KLQotdm9pZCBhdGhfZGV0YWNoKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCWF0aF9jbGVhbl9jb3JlKHNjKTsKLQlhdGg5a191bmluaXRfaHcoc2MpOwotfQotCi12b2lkIGF0aF9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCi0JYXRoX2NsZWFuX2NvcmUoc2MpOwotCWZyZWVfaXJxKHNjLT5pcnEsIHNjKTsKLQlhdGhfYnVzX2NsZWFudXAoY29tbW9uKTsKLQlrZnJlZShzYy0+c2VjX3dpcGh5KTsKLQlpZWVlODAyMTFfZnJlZV9odyhzYy0+aHcpOwotCi0JYXRoOWtfdW5pbml0X2h3KHNjKTsKLX0KLQotc3RhdGljIGludCBhdGg5a19yZWdfbm90aWZpZXIoc3RydWN0IHdpcGh5ICp3aXBoeSwKLQkJCSAgICAgIHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QgKnJlcXVlc3QpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSB3aXBoeV90b19pZWVlODAyMTFfaHcod2lwaHkpOwotCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwotCXN0cnVjdCBhdGhfcmVndWxhdG9yeSAqcmVnID0gYXRoOWtfaHdfcmVndWxhdG9yeShzYy0+c2NfYWgpOwotCi0JcmV0dXJuIGF0aF9yZWdfbm90aWZpZXJfYXBwbHkod2lwaHksIHJlcXVlc3QsIHJlZyk7Ci19Ci0KLS8qCi0gKiBEZXRlY3RzIGlmIHRoZXJlIGlzIGFueSBwcmlvcml0eSBidCB0cmFmZmljCi0gKi8KLXN0YXRpYyB2b2lkIGF0aF9kZXRlY3RfYnRfcHJpb3JpdHkoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCi17Ci0Jc3RydWN0IGF0aF9idGNvZXggKmJ0Y29leCA9ICZzYy0+YnRjb2V4OwotCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCi0JaWYgKGF0aDlrX2h3X2dwaW9fZ2V0KHNjLT5zY19haCwgYWgtPmJ0Y29leF9ody5idHByaW9yaXR5X2dwaW8pKQotCQlidGNvZXgtPmJ0X3ByaW9yaXR5X2NudCsrOwotCi0JaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgYnRjb2V4LT5idF9wcmlvcml0eV90aW1lICsKLQkJCW1zZWNzX3RvX2ppZmZpZXMoQVRIX0JUX1BSSU9SSVRZX1RJTUVfVEhSRVNIT0xEKSkpIHsKLQkJaWYgKGJ0Y29leC0+YnRfcHJpb3JpdHlfY250ID49IEFUSF9CVF9DTlRfVEhSRVNIT0xEKSB7Ci0JCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKHNjLT5zY19haCksIEFUSF9EQkdfQlRDT0VYLAotCQkJCSAgIkJUIHByaW9yaXR5IHRyYWZmaWMgZGV0ZWN0ZWQiKTsKLQkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9CVF9QUklPUklUWV9ERVRFQ1RFRDsKLQkJfSBlbHNlIHsKLQkJCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfQlRfUFJJT1JJVFlfREVURUNURUQ7Ci0JCX0KLQotCQlidGNvZXgtPmJ0X3ByaW9yaXR5X2NudCA9IDA7Ci0JCWJ0Y29leC0+YnRfcHJpb3JpdHlfdGltZSA9IGppZmZpZXM7Ci0JfQotfQotCi0vKgotICogQ29uZmlndXJlcyBhcHByb3ByaWF0ZSB3ZWlnaHQgYmFzZWQgb24gc3RvbXAgdHlwZS4KLSAqLwotc3RhdGljIHZvaWQgYXRoOWtfYnRjb2V4X2J0X3N0b21wKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJCSAgZW51bSBhdGhfc3RvbXBfdHlwZSBzdG9tcF90eXBlKQotewotCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCi0Jc3dpdGNoIChzdG9tcF90eXBlKSB7Ci0JY2FzZSBBVEhfQlRDT0VYX1NUT01QX0FMTDoKLQkJYXRoOWtfaHdfYnRjb2V4X3NldF93ZWlnaHQoYWgsIEFSX0JUX0NPRVhfV0dIVCwKLQkJCQkJICAgQVJfU1RPTVBfQUxMX1dMQU5fV0dIVCk7Ci0JCWJyZWFrOwotCWNhc2UgQVRIX0JUQ09FWF9TVE9NUF9MT1c6Ci0JCWF0aDlrX2h3X2J0Y29leF9zZXRfd2VpZ2h0KGFoLCBBUl9CVF9DT0VYX1dHSFQsCi0JCQkJCSAgIEFSX1NUT01QX0xPV19XTEFOX1dHSFQpOwotCQlicmVhazsKLQljYXNlIEFUSF9CVENPRVhfU1RPTVBfTk9ORToKLQkJYXRoOWtfaHdfYnRjb2V4X3NldF93ZWlnaHQoYWgsIEFSX0JUX0NPRVhfV0dIVCwKLQkJCQkJICAgQVJfU1RPTVBfTk9ORV9XTEFOX1dHSFQpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlhdGhfcHJpbnQoYXRoOWtfaHdfY29tbW9uKGFoKSwgQVRIX0RCR19CVENPRVgsCi0JCQkgICJJbnZhbGlkIFN0b21wdHlwZVxuIik7Ci0JCWJyZWFrOwotCX0KLQotCWF0aDlrX2h3X2J0Y29leF9lbmFibGUoYWgpOwotfQotCi1zdGF0aWMgdm9pZCBhdGg5a19nZW5fdGltZXJfc3RhcnQoc3RydWN0IGF0aF9odyAqYWgsCi0JCQkJICBzdHJ1Y3QgYXRoX2dlbl90aW1lciAqdGltZXIsCi0JCQkJICB1MzIgdGltZXJfbmV4dCwKLQkJCQkgIHUzMiB0aW1lcl9wZXJpb2QpCi17Ci0Jc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKSBjb21tb24tPnByaXY7Ci0KLQlhdGg5a19od19nZW5fdGltZXJfc3RhcnQoYWgsIHRpbWVyLCB0aW1lcl9uZXh0LCB0aW1lcl9wZXJpb2QpOwotCi0JaWYgKChzYy0+aW1hc2sgJiBBVEg5S19JTlRfR0VOVElNRVIpID09IDApIHsKLQkJYXRoOWtfaHdfc2V0X2ludGVycnVwdHMoYWgsIDApOwotCQlzYy0+aW1hc2sgfD0gQVRIOUtfSU5UX0dFTlRJTUVSOwotCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhhaCwgc2MtPmltYXNrKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIGF0aDlrX2dlbl90aW1lcl9zdG9wKHN0cnVjdCBhdGhfaHcgKmFoLCBzdHJ1Y3QgYXRoX2dlbl90aW1lciAqdGltZXIpCi17Ci0Jc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKSBjb21tb24tPnByaXY7Ci0Jc3RydWN0IGF0aF9nZW5fdGltZXJfdGFibGUgKnRpbWVyX3RhYmxlID0gJmFoLT5od19nZW5fdGltZXJzOwotCi0JYXRoOWtfaHdfZ2VuX3RpbWVyX3N0b3AoYWgsIHRpbWVyKTsKLQotCS8qIGlmIG5vIHRpbWVyIGlzIGVuYWJsZWQsIHR1cm4gb2ZmIGludGVycnVwdCBtYXNrICovCi0JaWYgKHRpbWVyX3RhYmxlLT50aW1lcl9tYXNrLnZhbCA9PSAwKSB7Ci0JCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKLQkJc2MtPmltYXNrICY9IH5BVEg5S19JTlRfR0VOVElNRVI7Ci0JCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCBzYy0+aW1hc2spOwotCX0KLX0KLQotLyoKLSAqIFRoaXMgaXMgdGhlIG1hc3RlciBidCBjb2V4IHRpbWVyIHdoaWNoIHJ1bnMgZm9yIGV2ZXJ5Ci0gKiA0NW1zLCBidCB0cmFmZmljIHdpbGwgYmUgZ2l2ZW4gcHJpb3JpdHkgZHVyaW5nIDU1JSBvZiB0aGlzCi0gKiBwZXJpb2Qgd2hpbGUgd2xhbiBnZXRzIHJlbWFpbmluZyA0NSUKLSAqLwotc3RhdGljIHZvaWQgYXRoX2J0Y29leF9wZXJpb2RfdGltZXIodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgZGF0YTsKLQlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKLQlzdHJ1Y3QgYXRoX2J0Y29leCAqYnRjb2V4ID0gJnNjLT5idGNvZXg7Ci0KLQlhdGhfZGV0ZWN0X2J0X3ByaW9yaXR5KHNjKTsKLQotCXNwaW5fbG9ja19iaCgmYnRjb2V4LT5idGNvZXhfbG9jayk7Ci0KLQlhdGg5a19idGNvZXhfYnRfc3RvbXAoc2MsIGJ0Y29leC0+YnRfc3RvbXBfdHlwZSk7Ci0KLQlzcGluX3VubG9ja19iaCgmYnRjb2V4LT5idGNvZXhfbG9jayk7Ci0KLQlpZiAoYnRjb2V4LT5idGNvZXhfcGVyaW9kICE9IGJ0Y29leC0+YnRjb2V4X25vX3N0b21wKSB7Ci0JCWlmIChidGNvZXgtPmh3X3RpbWVyX2VuYWJsZWQpCi0JCQlhdGg5a19nZW5fdGltZXJfc3RvcChhaCwgYnRjb2V4LT5ub19zdG9tcF90aW1lcik7Ci0KLQkJYXRoOWtfZ2VuX3RpbWVyX3N0YXJ0KGFoLAotCQkJCSAgICAgIGJ0Y29leC0+bm9fc3RvbXBfdGltZXIsCi0JCQkJICAgICAgKGF0aDlrX2h3X2dldHRzZjMyKGFoKSArCi0JCQkJICAgICAgIGJ0Y29leC0+YnRjb2V4X25vX3N0b21wKSwKLQkJCQkgICAgICAgYnRjb2V4LT5idGNvZXhfbm9fc3RvbXAgKiAxMCk7Ci0JCWJ0Y29leC0+aHdfdGltZXJfZW5hYmxlZCA9IHRydWU7Ci0JfQotCi0JbW9kX3RpbWVyKCZidGNvZXgtPnBlcmlvZF90aW1lciwgamlmZmllcyArCi0JCQkJICBtc2Vjc190b19qaWZmaWVzKEFUSF9CVENPRVhfREVGX0JUX1BFUklPRCkpOwotfQotCi0vKgotICogR2VuZXJpYyB0c2YgYmFzZWQgaHcgdGltZXIgd2hpY2ggY29uZmlndXJlcyB3ZWlnaHQKLSAqIHJlZ2lzdGVycyB0byB0aW1lIHNsaWNlIGJldHdlZW4gd2xhbiBhbmQgYnQgdHJhZmZpYwotICovCi1zdGF0aWMgdm9pZCBhdGhfYnRjb2V4X25vX3N0b21wX3RpbWVyKHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IChzdHJ1Y3QgYXRoX3NvZnRjICopYXJnOwotCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCXN0cnVjdCBhdGhfYnRjb2V4ICpidGNvZXggPSAmc2MtPmJ0Y29leDsKLQotCWF0aF9wcmludChhdGg5a19od19jb21tb24oYWgpLCBBVEhfREJHX0JUQ09FWCwKLQkJICAibm8gc3RvbXAgdGltZXIgcnVubmluZyBcbiIpOwotCi0Jc3Bpbl9sb2NrX2JoKCZidGNvZXgtPmJ0Y29leF9sb2NrKTsKLQotCWlmIChidGNvZXgtPmJ0X3N0b21wX3R5cGUgPT0gQVRIX0JUQ09FWF9TVE9NUF9MT1cpCi0JCWF0aDlrX2J0Y29leF9idF9zdG9tcChzYywgQVRIX0JUQ09FWF9TVE9NUF9OT05FKTsKLQkgZWxzZSBpZiAoYnRjb2V4LT5idF9zdG9tcF90eXBlID09IEFUSF9CVENPRVhfU1RPTVBfQUxMKQotCQlhdGg5a19idGNvZXhfYnRfc3RvbXAoc2MsIEFUSF9CVENPRVhfU1RPTVBfTE9XKTsKLQotCXNwaW5fdW5sb2NrX2JoKCZidGNvZXgtPmJ0Y29leF9sb2NrKTsKLX0KLQotc3RhdGljIGludCBhdGhfaW5pdF9idGNvZXhfdGltZXIoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCi17Ci0Jc3RydWN0IGF0aF9idGNvZXggKmJ0Y29leCA9ICZzYy0+YnRjb2V4OwotCi0JYnRjb2V4LT5idGNvZXhfcGVyaW9kID0gQVRIX0JUQ09FWF9ERUZfQlRfUEVSSU9EICogMTAwMDsKLQlidGNvZXgtPmJ0Y29leF9ub19zdG9tcCA9ICgxMDAgLSBBVEhfQlRDT0VYX0RFRl9EVVRZX0NZQ0xFKSAqCi0JCWJ0Y29leC0+YnRjb2V4X3BlcmlvZCAvIDEwMDsKLQotCXNldHVwX3RpbWVyKCZidGNvZXgtPnBlcmlvZF90aW1lciwgYXRoX2J0Y29leF9wZXJpb2RfdGltZXIsCi0JCQkodW5zaWduZWQgbG9uZykgc2MpOwotCi0Jc3Bpbl9sb2NrX2luaXQoJmJ0Y29leC0+YnRjb2V4X2xvY2spOwotCi0JYnRjb2V4LT5ub19zdG9tcF90aW1lciA9IGF0aF9nZW5fdGltZXJfYWxsb2Moc2MtPnNjX2FoLAotCQkJYXRoX2J0Y29leF9ub19zdG9tcF90aW1lciwKLQkJCWF0aF9idGNvZXhfbm9fc3RvbXBfdGltZXIsCi0JCQkodm9pZCAqKSBzYywgQVJfRklSU1RfTkRQX1RJTUVSKTsKLQotCWlmICghYnRjb2V4LT5ub19zdG9tcF90aW1lcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFJlYWQgYW5kIHdyaXRlLCB0aGV5IGJvdGggc2hhcmUgdGhlIHNhbWUgbG9jay4gV2UgZG8gdGhpcyB0byBzZXJpYWxpemUKLSAqIHJlYWRzIGFuZCB3cml0ZXMgb24gQXRoZXJvcyA4MDIuMTFuIFBDSSBkZXZpY2VzIG9ubHkuIFRoaXMgaXMgcmVxdWlyZWQKLSAqIGFzIHRoZSBGSUZPIG9uIHRoZXNlIGRldmljZXMgY2FuIG9ubHkgYWNjZXB0IHNhbmVseSAyIHJlcXVlc3RzLiBBZnRlcgotICogdGhhdCB0aGUgZGV2aWNlIGdvZXMgYmFuYW5hcy4gU2VyaWFsaXppbmcgdGhlIHJlYWRzL3dyaXRlcyBwcmV2ZW50cyB0aGlzCi0gKiBmcm9tIGhhcHBlbmluZy4KLSAqLwotCi1zdGF0aWMgdm9pZCBhdGg5a19pb3dyaXRlMzIodm9pZCAqaHdfcHJpdiwgdTMyIHZhbCwgdTMyIHJlZ19vZmZzZXQpCi17Ci0Jc3RydWN0IGF0aF9odyAqYWggPSAoc3RydWN0IGF0aF9odyAqKSBod19wcml2OwotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgY29tbW9uLT5wcml2OwotCi0JaWYgKGFoLT5jb25maWcuc2VyaWFsaXplX3JlZ21vZGUgPT0gU0VSX1JFR19NT0RFX09OKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZzYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7Ci0JCWlvd3JpdGUzMih2YWwsIHNjLT5tZW0gKyByZWdfb2Zmc2V0KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2MtPnNjX3NlcmlhbF9ydywgZmxhZ3MpOwotCX0gZWxzZQotCQlpb3dyaXRlMzIodmFsLCBzYy0+bWVtICsgcmVnX29mZnNldCk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXRoOWtfaW9yZWFkMzIodm9pZCAqaHdfcHJpdiwgdTMyIHJlZ19vZmZzZXQpCi17Ci0Jc3RydWN0IGF0aF9odyAqYWggPSAoc3RydWN0IGF0aF9odyAqKSBod19wcml2OwotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwotCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gKHN0cnVjdCBhdGhfc29mdGMgKikgY29tbW9uLT5wcml2OwotCXUzMiB2YWw7Ci0KLQlpZiAoYWgtPmNvbmZpZy5zZXJpYWxpemVfcmVnbW9kZSA9PSBTRVJfUkVHX01PREVfT04pIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNjLT5zY19zZXJpYWxfcncsIGZsYWdzKTsKLQkJdmFsID0gaW9yZWFkMzIoc2MtPm1lbSArIHJlZ19vZmZzZXQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzYy0+c2Nfc2VyaWFsX3J3LCBmbGFncyk7Ci0JfSBlbHNlCi0JCXZhbCA9IGlvcmVhZDMyKHNjLT5tZW0gKyByZWdfb2Zmc2V0KTsKLQlyZXR1cm4gdmFsOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGF0aF9vcHMgYXRoOWtfY29tbW9uX29wcyA9IHsKLQkucmVhZCA9IGF0aDlrX2lvcmVhZDMyLAotCS53cml0ZSA9IGF0aDlrX2lvd3JpdGUzMiwKLX07Ci0KLS8qCi0gKiBJbml0aWFsaXplIGFuZCBmaWxsIGF0aF9zb2Z0YywgYXRoX3NvZmN0IGlzIHRoZQotICogIlNvZnR3YXJlIENhcnJpZXIiIHN0cnVjdC4gSGlzdG9yaWNhbGx5IGl0IGhhcyBleGlzdGVkCi0gKiB0byBhbGxvdyB0aGUgc2VwYXJhdGlvbiBiZXR3ZWVuIGhhcmR3YXJlIHNwZWNpZmljCi0gKiB2YXJpYWJsZXMgKG5vdyBpbiBhdGhfaHcpIGFuZCBkcml2ZXIgc3BlY2lmaWMgdmFyaWFibGVzLgotICovCi1zdGF0aWMgaW50IGF0aF9pbml0X3NvZnRjKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHUxNiBzdWJzeXNpZCwKLQkJCSAgY29uc3Qgc3RydWN0IGF0aF9idXNfb3BzICpidXNfb3BzKQotewotCXN0cnVjdCBhdGhfaHcgKmFoID0gTlVMTDsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uOwotCWludCByID0gMCwgaTsKLQlpbnQgY3N6ID0gMDsKLQlpbnQgcW51bTsKLQotCS8qIFhYWDogaGFyZHdhcmUgd2lsbCBub3QgYmUgcmVhZHkgdW50aWwgYXRoX29wZW4oKSBiZWluZyBjYWxsZWQgKi8KLQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfSU5WQUxJRDsKLQotCXNwaW5fbG9ja19pbml0KCZzYy0+d2lwaHlfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJnNjLT5zY19yZXNldGxvY2spOwotCXNwaW5fbG9ja19pbml0KCZzYy0+c2Nfc2VyaWFsX3J3KTsKLQlzcGluX2xvY2tfaW5pdCgmc2MtPmFuaV9sb2NrKTsKLQlzcGluX2xvY2tfaW5pdCgmc2MtPnNjX3BtX2xvY2spOwotCW11dGV4X2luaXQoJnNjLT5tdXRleCk7Ci0JdGFza2xldF9pbml0KCZzYy0+aW50cl90cSwgYXRoOWtfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpc2MpOwotCXRhc2tsZXRfaW5pdCgmc2MtPmJjb25fdGFza2xldCwgYXRoX2JlYWNvbl90YXNrbGV0LAotCQkgICAgICh1bnNpZ25lZCBsb25nKXNjKTsKLQotCWFoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGF0aF9odyksIEdGUF9LRVJORUwpOwotCWlmICghYWgpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JYWgtPmh3X3ZlcnNpb24uZGV2aWQgPSBkZXZpZDsKLQlhaC0+aHdfdmVyc2lvbi5zdWJzeXNpZCA9IHN1YnN5c2lkOwotCXNjLT5zY19haCA9IGFoOwotCi0JY29tbW9uID0gYXRoOWtfaHdfY29tbW9uKGFoKTsKLQljb21tb24tPm9wcyA9ICZhdGg5a19jb21tb25fb3BzOwotCWNvbW1vbi0+YnVzX29wcyA9IGJ1c19vcHM7Ci0JY29tbW9uLT5haCA9IGFoOwotCWNvbW1vbi0+aHcgPSBzYy0+aHc7Ci0JY29tbW9uLT5wcml2ID0gc2M7Ci0JY29tbW9uLT5kZWJ1Z19tYXNrID0gYXRoOWtfZGVidWc7Ci0KLQkvKgotCSAqIENhY2hlIGxpbmUgc2l6ZSBpcyB1c2VkIHRvIHNpemUgYW5kIGFsaWduIHZhcmlvdXMKLQkgKiBzdHJ1Y3R1cmVzIHVzZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUuCi0JICovCi0JYXRoX3JlYWRfY2FjaGVzaXplKGNvbW1vbiwgJmNzeik7Ci0JLyogWFhYIGFzc2VydCBjc3ogaXMgbm9uLXplcm8gKi8KLQljb21tb24tPmNhY2hlbHN6ID0gY3N6IDw8IDI7CS8qIGNvbnZlcnQgdG8gYnl0ZXMgKi8KLQotCXIgPSBhdGg5a19od19pbml0KGFoKTsKLQlpZiAocikgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIGluaXRpYWxpemUgaGFyZHdhcmU7ICIKLQkJCSAgImluaXRpYWxpemF0aW9uIHN0YXR1czogJWRcbiIsIHIpOwotCQlnb3RvIGJhZF9mcmVlX2h3OwotCX0KLQotCWlmIChhdGg5a19pbml0X2RlYnVnKGFoKSA8IDApIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVuYWJsZSB0byBjcmVhdGUgZGVidWdmcyBmaWxlc1xuIik7Ci0JCWdvdG8gYmFkX2ZyZWVfaHc7Ci0JfQotCi0JLyogR2V0IHRoZSBoYXJkd2FyZSBrZXkgY2FjaGUgc2l6ZS4gKi8KLQljb21tb24tPmtleW1heCA9IGFoLT5jYXBzLmtleWNhY2hlX3NpemU7Ci0JaWYgKGNvbW1vbi0+a2V5bWF4ID4gQVRIX0tFWU1BWCkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0FOWSwKLQkJCSAgIldhcm5pbmcsIHVzaW5nIG9ubHkgJXUgZW50cmllcyBpbiAldSBrZXkgY2FjaGVcbiIsCi0JCQkgIEFUSF9LRVlNQVgsIGNvbW1vbi0+a2V5bWF4KTsKLQkJY29tbW9uLT5rZXltYXggPSBBVEhfS0VZTUFYOwotCX0KLQotCS8qCi0JICogUmVzZXQgdGhlIGtleSBjYWNoZSBzaW5jZSBzb21lIHBhcnRzIGRvIG5vdAotCSAqIHJlc2V0IHRoZSBjb250ZW50cyBvbiBpbml0aWFsIHBvd2VyIHVwLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBjb21tb24tPmtleW1heDsgaSsrKQotCQlhdGg5a19od19rZXlyZXNldChhaCwgKHUxNikgaSk7Ci0KLQkvKiBkZWZhdWx0IHRvIE1PTklUT1IgbW9kZSAqLwotCXNjLT5zY19haC0+b3Btb2RlID0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjsKLQotCS8qCi0JICogQWxsb2NhdGUgaGFyZHdhcmUgdHJhbnNtaXQgcXVldWVzOiBvbmUgcXVldWUgZm9yCi0JICogYmVhY29uIGZyYW1lcyBhbmQgb25lIGRhdGEgcXVldWUgZm9yIGVhY2ggUW9TCi0JICogcHJpb3JpdHkuICBOb3RlIHRoYXQgdGhlIGhhbCBoYW5kbGVzIHJlc2V0aW5nCi0JICogdGhlc2UgcXVldWVzIGF0IHRoZSBuZWVkZWQgdGltZS4KLQkgKi8KLQlzYy0+YmVhY29uLmJlYWNvbnEgPSBhdGg5a19od19iZWFjb25xX3NldHVwKGFoKTsKLQlpZiAoc2MtPmJlYWNvbi5iZWFjb25xID09IC0xKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmFibGUgdG8gc2V0dXAgYSBiZWFjb24geG1pdCBxdWV1ZVxuIik7Ci0JCXIgPSAtRUlPOwotCQlnb3RvIGJhZDI7Ci0JfQotCXNjLT5iZWFjb24uY2FicSA9IGF0aF90eHFfc2V0dXAoc2MsIEFUSDlLX1RYX1FVRVVFX0NBQiwgMCk7Ci0JaWYgKHNjLT5iZWFjb24uY2FicSA9PSBOVUxMKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJVbmFibGUgdG8gc2V0dXAgQ0FCIHhtaXQgcXVldWVcbiIpOwotCQlyID0gLUVJTzsKLQkJZ290byBiYWQyOwotCX0KLQotCXNjLT5jb25maWcuY2FicVJlYWR5dGltZSA9IEFUSF9DQUJRX1JFQURZX1RJTUU7Ci0JYXRoX2NhYnFfdXBkYXRlKHNjKTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNjLT50eC5od3FfbWFwKTsgaSsrKQotCQlzYy0+dHguaHdxX21hcFtpXSA9IC0xOwotCi0JLyogU2V0dXAgZGF0YSBxdWV1ZXMgKi8KLQkvKiBOQjogZW5zdXJlIEJLIHF1ZXVlIGlzIHRoZSBsb3dlc3QgcHJpb3JpdHkgaC93IHF1ZXVlICovCi0JaWYgKCFhdGhfdHhfc2V0dXAoc2MsIEFUSDlLX1dNRV9BQ19CSykpIHsKLQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19GQVRBTCwKLQkJCSAgIlVuYWJsZSB0byBzZXR1cCB4bWl0IHF1ZXVlIGZvciBCSyB0cmFmZmljXG4iKTsKLQkJciA9IC1FSU87Ci0JCWdvdG8gYmFkMjsKLQl9Ci0KLQlpZiAoIWF0aF90eF9zZXR1cChzYywgQVRIOUtfV01FX0FDX0JFKSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIEJFIHRyYWZmaWNcbiIpOwotCQlyID0gLUVJTzsKLQkJZ290byBiYWQyOwotCX0KLQlpZiAoIWF0aF90eF9zZXR1cChzYywgQVRIOUtfV01FX0FDX1ZJKSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIFZJIHRyYWZmaWNcbiIpOwotCQlyID0gLUVJTzsKLQkJZ290byBiYWQyOwotCX0KLQlpZiAoIWF0aF90eF9zZXR1cChzYywgQVRIOUtfV01FX0FDX1ZPKSkgewotCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0ZBVEFMLAotCQkJICAiVW5hYmxlIHRvIHNldHVwIHhtaXQgcXVldWUgZm9yIFZPIHRyYWZmaWNcbiIpOwotCQlyID0gLUVJTzsKLQkJZ290byBiYWQyOwotCX0KLQotCS8qIEluaXRpYWxpemVzIHRoZSBub2lzZSBmbG9vciB0byBhIHJlYXNvbmFibGUgZGVmYXVsdCB2YWx1ZS4KLQkgKiBMYXRlciBvbiB0aGlzIHdpbGwgYmUgdXBkYXRlZCBkdXJpbmcgQU5JIHByb2Nlc3NpbmcuICovCi0KLQljb21tb24tPmFuaS5ub2lzZV9mbG9vciA9IEFUSF9ERUZBVUxUX05PSVNFX0ZMT09SOwotCXNldHVwX3RpbWVyKCZjb21tb24tPmFuaS50aW1lciwgYXRoX2FuaV9jYWxpYnJhdGUsICh1bnNpZ25lZCBsb25nKXNjKTsKLQotCWlmIChhdGg5a19od19nZXRjYXBhYmlsaXR5KGFoLCBBVEg5S19DQVBfQ0lQSEVSLAotCQkJCSAgIEFUSDlLX0NJUEhFUl9US0lQLCBOVUxMKSkgewotCQkvKgotCQkgKiBXaGV0aGVyIHdlIHNob3VsZCBlbmFibGUgaC93IFRLSVAgTUlDLgotCQkgKiBYWFg6IGlmIHdlIGRvbid0IHN1cHBvcnQgV01FIFRLSVAgTUlDLCB0aGVuIHdlIHdvdWxkbid0Ci0JCSAqIHJlcG9ydCBXTU0gY2FwYWJsZSwgc28gaXQncyBhbHdheXMgc2FmZSB0byB0dXJuIG9uCi0JCSAqIFRLSVAgTUlDIGluIHRoaXMgY2FzZS4KLQkJICovCi0JCWF0aDlrX2h3X3NldGNhcGFiaWxpdHkoc2MtPnNjX2FoLCBBVEg5S19DQVBfVEtJUF9NSUMsCi0JCQkJICAgICAgIDAsIDEsIE5VTEwpOwotCX0KLQotCS8qCi0JICogQ2hlY2sgd2hldGhlciB0aGUgc2VwYXJhdGUga2V5IGNhY2hlIGVudHJpZXMKLQkgKiBhcmUgcmVxdWlyZWQgdG8gaGFuZGxlIGJvdGggdHgrcnggTUlDIGtleXMuCi0JICogV2l0aCBzcGxpdCBtaWMga2V5cyB0aGUgbnVtYmVyIG9mIHN0YXRpb25zIGlzIGxpbWl0ZWQKLQkgKiB0byAyNyBvdGhlcndpc2UgNTkuCi0JICovCi0JaWYgKGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoYWgsIEFUSDlLX0NBUF9DSVBIRVIsCi0JCQkJICAgQVRIOUtfQ0lQSEVSX1RLSVAsIE5VTEwpCi0JICAgICYmIGF0aDlrX2h3X2dldGNhcGFiaWxpdHkoYWgsIEFUSDlLX0NBUF9DSVBIRVIsCi0JCQkJICAgICAgQVRIOUtfQ0lQSEVSX01JQywgTlVMTCkKLQkgICAgJiYgYXRoOWtfaHdfZ2V0Y2FwYWJpbGl0eShhaCwgQVRIOUtfQ0FQX1RLSVBfU1BMSVQsCi0JCQkJICAgICAgMCwgTlVMTCkpCi0JCWNvbW1vbi0+c3BsaXRtaWMgPSAxOwotCi0JLyogdHVybiBvbiBtY2FzdCBrZXkgc2VhcmNoIGlmIHBvc3NpYmxlICovCi0JaWYgKCFhdGg5a19od19nZXRjYXBhYmlsaXR5KGFoLCBBVEg5S19DQVBfTUNBU1RfS0VZU1JDSCwgMCwgTlVMTCkpCi0JCSh2b2lkKWF0aDlrX2h3X3NldGNhcGFiaWxpdHkoYWgsIEFUSDlLX0NBUF9NQ0FTVF9LRVlTUkNILCAxLAotCQkJCQkgICAgIDEsIE5VTEwpOwotCi0Jc2MtPmNvbmZpZy50eHBvd2xpbWl0ID0gQVRIX1RYUE9XRVJfTUFYOwotCi0JLyogMTFuIENhcGFiaWxpdGllcyAqLwotCWlmIChhaC0+Y2Fwcy5od19jYXBzICYgQVRIOUtfSFdfQ0FQX0hUKSB7Ci0JCXNjLT5zY19mbGFncyB8PSBTQ19PUF9UWEFHR1I7Ci0JCXNjLT5zY19mbGFncyB8PSBTQ19PUF9SWEFHR1I7Ci0JfQotCi0JY29tbW9uLT50eF9jaGFpbm1hc2sgPSBhaC0+Y2Fwcy50eF9jaGFpbm1hc2s7Ci0JY29tbW9uLT5yeF9jaGFpbm1hc2sgPSBhaC0+Y2Fwcy5yeF9jaGFpbm1hc2s7Ci0KLQlhdGg5a19od19zZXRjYXBhYmlsaXR5KGFoLCBBVEg5S19DQVBfRElWRVJTSVRZLCAxLCB0cnVlLCBOVUxMKTsKLQlzYy0+cnguZGVmYW50ID0gYXRoOWtfaHdfZ2V0ZGVmYW50ZW5uYShhaCk7Ci0KLQlpZiAoYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9CU1NJRE1BU0spCi0JCW1lbWNweShjb21tb24tPmJzc2lkbWFzaywgYXRoX2JjYXN0X21hYywgRVRIX0FMRU4pOwotCi0Jc2MtPmJlYWNvbi5zbG90dGltZSA9IEFUSDlLX1NMT1RfVElNRV85OwkvKiBkZWZhdWx0IHRvIHNob3J0IHNsb3QgdGltZSAqLwotCi0JLyogaW5pdGlhbGl6ZSBiZWFjb24gc2xvdHMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYy0+YmVhY29uLmJzbG90KTsgaSsrKSB7Ci0JCXNjLT5iZWFjb24uYnNsb3RbaV0gPSBOVUxMOwotCQlzYy0+YmVhY29uLmJzbG90X2FwaHlbaV0gPSBOVUxMOwotCX0KLQotCS8qIHNldHVwIGNoYW5uZWxzIGFuZCByYXRlcyAqLwotCi0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFHLCBzYy0+c2NfYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKSB7Ci0JCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0uY2hhbm5lbHMgPSBhdGg5a18yZ2h6X2NoYW50YWJsZTsKLQkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXS5uX2NoYW5uZWxzID0KLQkJCUFSUkFZX1NJWkUoYXRoOWtfMmdoel9jaGFudGFibGUpOwotCQlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmJpdHJhdGVzID0gYXRoOWtfbGVnYWN5X3JhdGVzOwotCQlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLm5fYml0cmF0ZXMgPQotCQkJQVJSQVlfU0laRShhdGg5a19sZWdhY3lfcmF0ZXMpOwotCX0KLQotCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkgewotCQlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLmNoYW5uZWxzID0gYXRoOWtfNWdoel9jaGFudGFibGU7Ci0JCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uYmFuZCA9IElFRUU4MDIxMV9CQU5EXzVHSFo7Ci0JCXNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0ubl9jaGFubmVscyA9Ci0JCQlBUlJBWV9TSVpFKGF0aDlrXzVnaHpfY2hhbnRhYmxlKTsKLQkJc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXS5iaXRyYXRlcyA9Ci0JCQlhdGg5a19sZWdhY3lfcmF0ZXMgKyA0OwotCQlzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzVHSFpdLm5fYml0cmF0ZXMgPQotCQkJQVJSQVlfU0laRShhdGg5a19sZWdhY3lfcmF0ZXMpIC0gNDsKLQl9Ci0KLQlzd2l0Y2ggKGFoLT5idGNvZXhfaHcuc2NoZW1lKSB7Ci0JY2FzZSBBVEhfQlRDT0VYX0NGR19OT05FOgotCQlicmVhazsKLQljYXNlIEFUSF9CVENPRVhfQ0ZHXzJXSVJFOgotCQlhdGg5a19od19idGNvZXhfaW5pdF8yd2lyZShhaCk7Ci0JCWJyZWFrOwotCWNhc2UgQVRIX0JUQ09FWF9DRkdfM1dJUkU6Ci0JCWF0aDlrX2h3X2J0Y29leF9pbml0XzN3aXJlKGFoKTsKLQkJciA9IGF0aF9pbml0X2J0Y29leF90aW1lcihzYyk7Ci0JCWlmIChyKQotCQkJZ290byBiYWQyOwotCQlxbnVtID0gYXRoX3R4X2dldF9xbnVtKHNjLCBBVEg5S19UWF9RVUVVRV9EQVRBLCBBVEg5S19XTUVfQUNfQkUpOwotCQlhdGg5a19od19pbml0X2J0Y29leF9odyhhaCwgcW51bSk7Ci0JCXNjLT5idGNvZXguYnRfc3RvbXBfdHlwZSA9IEFUSF9CVENPRVhfU1RPTVBfTE9XOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlXQVJOX09OKDEpOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gMDsKLWJhZDI6Ci0JLyogY2xlYW51cCB0eCBxdWV1ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKQotCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkpCi0JCQlhdGhfdHhfY2xlYW51cHEoc2MsICZzYy0+dHgudHhxW2ldKTsKLQotYmFkX2ZyZWVfaHc6Ci0JYXRoOWtfdW5pbml0X2h3KHNjKTsKLQlyZXR1cm4gcjsKLX0KLQotdm9pZCBhdGhfc2V0X2h3X2NhcGFiKHN0cnVjdCBhdGhfc29mdGMgKnNjLCBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKLXsKLQlody0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfUlhfSU5DTFVERVNfRkNTIHwKLQkJSUVFRTgwMjExX0hXX0hPU1RfQlJPQURDQVNUX1BTX0JVRkZFUklORyB8Ci0JCUlFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwKLQkJSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OIHwKLQkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKLQkJSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIHwKLQkJSUVFRTgwMjExX0hXX1NQRUNUUlVNX01HTVQ7Ci0KLQlpZiAoQVJfU1JFVl85MTYwXzEwX09SX0xBVEVSKHNjLT5zY19haCkgfHwgbW9kcGFyYW1fbm9od2NyeXB0KQotCQlody0+ZmxhZ3MgfD0gSUVFRTgwMjExX0hXX01GUF9DQVBBQkxFOwotCi0JaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQotCQlCSVQoTkw4MDIxMV9JRlRZUEVfQVApIHwKLQkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKLQkJQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKSB8Ci0JCUJJVChOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKTsKLQotCWh3LT53aXBoeS0+ZmxhZ3MgJj0gfldJUEhZX0ZMQUdfUFNfT05fQllfREVGQVVMVDsKLQotCWh3LT5xdWV1ZXMgPSA0OwotCWh3LT5tYXhfcmF0ZXMgPSA0OwotCWh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gNTAwMDsKLQlody0+bWF4X2xpc3Rlbl9pbnRlcnZhbCA9IDEwOwotCS8qIEhhcmR3YXJlIHN1cHBvcnRzIDEwIGJ1dCB3ZSB1c2UgNCAqLwotCWh3LT5tYXhfcmF0ZV90cmllcyA9IDQ7Ci0JaHctPnN0YV9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGF0aF9ub2RlKTsKLQlody0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRoX3ZpZik7Ci0KLQlody0+cmF0ZV9jb250cm9sX2FsZ29yaXRobSA9ICJhdGg5a19yYXRlX2NvbnRyb2wiOwotCi0JaWYgKHRlc3RfYml0KEFUSDlLX01PREVfMTFHLCBzYy0+c2NfYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKQotCQlody0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0KLQkJCSZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOwotCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgc2MtPnNjX2FoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkKLQkJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9Ci0JCQkmc2MtPnNiYW5kc1tJRUVFODAyMTFfQkFORF81R0haXTsKLX0KLQotLyogRGV2aWNlIGRyaXZlciBjb3JlIGluaXRpYWxpemF0aW9uICovCi1pbnQgYXRoX2luaXRfZGV2aWNlKHUxNiBkZXZpZCwgc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHUxNiBzdWJzeXNpZCwKLQkJICAgIGNvbnN0IHN0cnVjdCBhdGhfYnVzX29wcyAqYnVzX29wcykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHNjLT5odzsKLQlzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uOwotCXN0cnVjdCBhdGhfaHcgKmFoOwotCWludCBlcnJvciA9IDAsIGk7Ci0Jc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWc7Ci0KLQlkZXZfZGJnKHNjLT5kZXYsICJBdHRhY2ggQVRIIGh3XG4iKTsKLQotCWVycm9yID0gYXRoX2luaXRfc29mdGMoZGV2aWQsIHNjLCBzdWJzeXNpZCwgYnVzX29wcyk7Ci0JaWYgKGVycm9yICE9IDApCi0JCXJldHVybiBlcnJvcjsKLQotCWFoID0gc2MtPnNjX2FoOwotCWNvbW1vbiA9IGF0aDlrX2h3X2NvbW1vbihhaCk7Ci0KLQkvKiBnZXQgbWFjIGFkZHJlc3MgZnJvbSBoYXJkd2FyZSBhbmQgc2V0IGluIG1hYzgwMjExICovCi0KLQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihodywgY29tbW9uLT5tYWNhZGRyKTsKLQotCWF0aF9zZXRfaHdfY2FwYWIoc2MsIGh3KTsKLQotCWVycm9yID0gYXRoX3JlZ2RfaW5pdCgmY29tbW9uLT5yZWd1bGF0b3J5LCBzYy0+aHctPndpcGh5LAotCQkJICAgICAgYXRoOWtfcmVnX25vdGlmaWVyKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCXJlZyA9ICZjb21tb24tPnJlZ3VsYXRvcnk7Ci0KLQlpZiAoYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9IVCkgewotCQlpZiAodGVzdF9iaXQoQVRIOUtfTU9ERV8xMUcsIGFoLT5jYXBzLndpcmVsZXNzX21vZGVzKSkKLQkJCXNldHVwX2h0X2NhcChzYywKLQkJCQkgICAgICZzYy0+c2JhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdLmh0X2NhcCk7Ci0JCWlmICh0ZXN0X2JpdChBVEg5S19NT0RFXzExQSwgYWgtPmNhcHMud2lyZWxlc3NfbW9kZXMpKQotCQkJc2V0dXBfaHRfY2FwKHNjLAotCQkJCSAgICAgJnNjLT5zYmFuZHNbSUVFRTgwMjExX0JBTkRfNUdIWl0uaHRfY2FwKTsKLQl9Ci0KLQkvKiBpbml0aWFsaXplIHR4L3J4IGVuZ2luZSAqLwotCWVycm9yID0gYXRoX3R4X2luaXQoc2MsIEFUSF9UWEJVRik7Ci0JaWYgKGVycm9yICE9IDApCi0JCWdvdG8gZXJyb3JfYXR0YWNoOwotCi0JZXJyb3IgPSBhdGhfcnhfaW5pdChzYywgQVRIX1JYQlVGKTsKLQlpZiAoZXJyb3IgIT0gMCkKLQkJZ290byBlcnJvcl9hdHRhY2g7Ci0KLQlJTklUX1dPUksoJnNjLT5jaGFuX3dvcmssIGF0aDlrX3dpcGh5X2NoYW5fd29yayk7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJnNjLT53aXBoeV93b3JrLCBhdGg5a193aXBoeV93b3JrKTsKLQlzYy0+d2lwaHlfc2NoZWR1bGVyX2ludCA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKLQotCWVycm9yID0gaWVlZTgwMjExX3JlZ2lzdGVyX2h3KGh3KTsKLQotCWlmICghYXRoX2lzX3dvcmxkX3JlZ2QocmVnKSkgewotCQllcnJvciA9IHJlZ3VsYXRvcnlfaGludChody0+d2lwaHksIHJlZy0+YWxwaGEyKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBlcnJvcl9hdHRhY2g7Ci0JfQotCi0JLyogSW5pdGlhbGl6ZSBMRUQgY29udHJvbCAqLwotCWF0aF9pbml0X2xlZHMoc2MpOwotCi0JYXRoX3N0YXJ0X3Jma2lsbF9wb2xsKHNjKTsKLQotCXJldHVybiAwOwotCi1lcnJvcl9hdHRhY2g6Ci0JLyogY2xlYW51cCB0eCBxdWV1ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVRIOUtfTlVNX1RYX1FVRVVFUzsgaSsrKQotCQlpZiAoQVRIX1RYUV9TRVRVUChzYywgaSkpCi0JCQlhdGhfdHhfY2xlYW51cHEoc2MsICZzYy0+dHgudHhxW2ldKTsKLQotCWF0aDlrX3VuaW5pdF9odyhzYyk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KIGludCBhdGhfcmVzZXQoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIGJvb2wgcmV0cnlfdHgpCiB7CiAJc3RydWN0IGF0aF9odyAqYWggPSBzYy0+c2NfYWg7CkBAIC0xOTc2LDYgKzk0Nyw4IEBACiAJLyogU3RvcCBBTkkgKi8KIAlkZWxfdGltZXJfc3luYygmY29tbW9uLT5hbmkudGltZXIpOwogCisJaWVlZTgwMjExX3N0b3BfcXVldWVzKGh3KTsKKwogCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKGFoLCAwKTsKIAlhdGhfZHJhaW5fYWxsX3R4cShzYywgcmV0cnlfdHgpOwogCWF0aF9zdG9wcmVjdihzYyk7CkBAIC0yMDE3LDEzMSArOTkwLDE0IEBACiAJCX0KIAl9CiAKKwlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoaHcpOworCiAJLyogU3RhcnQgQU5JICovCiAJYXRoX3N0YXJ0X2FuaShjb21tb24pOwogCiAJcmV0dXJuIHI7CiB9CiAKLS8qCi0gKiAgVGhpcyBmdW5jdGlvbiB3aWxsIGFsbG9jYXRlIGJvdGggdGhlIERNQSBkZXNjcmlwdG9yIHN0cnVjdHVyZSwgYW5kIHRoZQotICogIGJ1ZmZlcnMgaXQgY29udGFpbnMuICBUaGVzZSBhcmUgdXNlZCB0byBjb250YWluIHRoZSBkZXNjcmlwdG9ycyB1c2VkCi0gKiAgYnkgdGhlIHN5c3RlbS4KLSovCi1pbnQgYXRoX2Rlc2NkbWFfc2V0dXAoc3RydWN0IGF0aF9zb2Z0YyAqc2MsIHN0cnVjdCBhdGhfZGVzY2RtYSAqZGQsCi0JCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCSAgICAgIGludCBuYnVmLCBpbnQgbmRlc2MpCi17Ci0jZGVmaW5lCURTMlBIWVMoX2RkLCBfZHMpCQkJCQkJXAotCSgoX2RkKS0+ZGRfZGVzY19wYWRkciArICgoY2FkZHJfdCkoX2RzKSAtIChjYWRkcl90KShfZGQpLT5kZF9kZXNjKSkKLSNkZWZpbmUgQVRIX0RFU0NfNEtCX0JPVU5EX0NIRUNLKF9kYWRkcikgKCgoKF9kYWRkcikgJiAweEZGRikgPiAweEY3RikgPyAxIDogMCkKLSNkZWZpbmUgQVRIX0RFU0NfNEtCX0JPVU5EX05VTV9TS0lQUEVEKF9sZW4pICgoX2xlbikgLyA0MDk2KQotCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKLQlzdHJ1Y3QgYXRoX2Rlc2MgKmRzOwotCXN0cnVjdCBhdGhfYnVmICpiZjsKLQlpbnQgaSwgYnNpemUsIGVycm9yOwotCi0JYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsICIlcyBETUE6ICV1IGJ1ZmZlcnMgJXUgZGVzYy9idWZcbiIsCi0JCSAgbmFtZSwgbmJ1ZiwgbmRlc2MpOwotCi0JSU5JVF9MSVNUX0hFQUQoaGVhZCk7Ci0JLyogYXRoX2Rlc2MgbXVzdCBiZSBhIG11bHRpcGxlIG9mIERXT1JEcyAqLwotCWlmICgoc2l6ZW9mKHN0cnVjdCBhdGhfZGVzYykgJSA0KSAhPSAwKSB7Ci0JCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkgICJhdGhfZGVzYyBub3QgRFdPUkQgYWxpZ25lZFxuIik7Ci0JCUJVR19PTigoc2l6ZW9mKHN0cnVjdCBhdGhfZGVzYykgJSA0KSAhPSAwKTsKLQkJZXJyb3IgPSAtRU5PTUVNOwotCQlnb3RvIGZhaWw7Ci0JfQotCi0JZGQtPmRkX2Rlc2NfbGVuID0gc2l6ZW9mKHN0cnVjdCBhdGhfZGVzYykgKiBuYnVmICogbmRlc2M7Ci0KLQkvKgotCSAqIE5lZWQgYWRkaXRpb25hbCBETUEgbWVtb3J5IGJlY2F1c2Ugd2UgY2FuJ3QgdXNlCi0JICogZGVzY3JpcHRvcnMgdGhhdCBjcm9zcyB0aGUgNEsgcGFnZSBib3VuZGFyeS4gQXNzdW1lCi0JICogb25lIHNraXBwZWQgZGVzY3JpcHRvciBwZXIgNEsgcGFnZS4KLQkgKi8KLQlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKLQkJdTMyIG5kZXNjX3NraXBwZWQgPQotCQkJQVRIX0RFU0NfNEtCX0JPVU5EX05VTV9TS0lQUEVEKGRkLT5kZF9kZXNjX2xlbik7Ci0JCXUzMiBkbWFfbGVuOwotCi0JCXdoaWxlIChuZGVzY19za2lwcGVkKSB7Ci0JCQlkbWFfbGVuID0gbmRlc2Nfc2tpcHBlZCAqIHNpemVvZihzdHJ1Y3QgYXRoX2Rlc2MpOwotCQkJZGQtPmRkX2Rlc2NfbGVuICs9IGRtYV9sZW47Ci0KLQkJCW5kZXNjX3NraXBwZWQgPSBBVEhfREVTQ180S0JfQk9VTkRfTlVNX1NLSVBQRUQoZG1hX2xlbik7Ci0JCX07Ci0JfQotCi0JLyogYWxsb2NhdGUgZGVzY3JpcHRvcnMgKi8KLQlkZC0+ZGRfZGVzYyA9IGRtYV9hbGxvY19jb2hlcmVudChzYy0+ZGV2LCBkZC0+ZGRfZGVzY19sZW4sCi0JCQkJCSAmZGQtPmRkX2Rlc2NfcGFkZHIsIEdGUF9LRVJORUwpOwotCWlmIChkZC0+ZGRfZGVzYyA9PSBOVUxMKSB7Ci0JCWVycm9yID0gLUVOT01FTTsKLQkJZ290byBmYWlsOwotCX0KLQlkcyA9IGRkLT5kZF9kZXNjOwotCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfQ09ORklHLCAiJXMgRE1BIG1hcDogJXAgKCV1KSAtPiAlbGx4ICgldSlcbiIsCi0JCSAgbmFtZSwgZHMsICh1MzIpIGRkLT5kZF9kZXNjX2xlbiwKLQkJICBpdG82NChkZC0+ZGRfZGVzY19wYWRkciksIC8qWFhYKi8odTMyKSBkZC0+ZGRfZGVzY19sZW4pOwotCi0JLyogYWxsb2NhdGUgYnVmZmVycyAqLwotCWJzaXplID0gc2l6ZW9mKHN0cnVjdCBhdGhfYnVmKSAqIG5idWY7Ci0JYmYgPSBremFsbG9jKGJzaXplLCBHRlBfS0VSTkVMKTsKLQlpZiAoYmYgPT0gTlVMTCkgewotCQllcnJvciA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbDI7Ci0JfQotCWRkLT5kZF9idWZwdHIgPSBiZjsKLQotCWZvciAoaSA9IDA7IGkgPCBuYnVmOyBpKyssIGJmKyssIGRzICs9IG5kZXNjKSB7Ci0JCWJmLT5iZl9kZXNjID0gZHM7Ci0JCWJmLT5iZl9kYWRkciA9IERTMlBIWVMoZGQsIGRzKTsKLQotCQlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmCi0JCSAgICAgIEFUSDlLX0hXX0NBUF80S0JfU1BMSVRUUkFOUykpIHsKLQkJCS8qCi0JCQkgKiBTa2lwIGRlc2NyaXB0b3IgYWRkcmVzc2VzIHdoaWNoIGNhbiBjYXVzZSA0S0IKLQkJCSAqIGJvdW5kYXJ5IGNyb3NzaW5nIChhZGRyICsgbGVuZ3RoKSB3aXRoIGEgMzIgZHdvcmQKLQkJCSAqIGRlc2NyaXB0b3IgZmV0Y2guCi0JCQkgKi8KLQkJCXdoaWxlIChBVEhfREVTQ180S0JfQk9VTkRfQ0hFQ0soYmYtPmJmX2RhZGRyKSkgewotCQkJCUJVR19PTigoY2FkZHJfdCkgYmYtPmJmX2Rlc2MgPj0KLQkJCQkgICAgICAgKChjYWRkcl90KSBkZC0+ZGRfZGVzYyArCi0JCQkJCWRkLT5kZF9kZXNjX2xlbikpOwotCi0JCQkJZHMgKz0gbmRlc2M7Ci0JCQkJYmYtPmJmX2Rlc2MgPSBkczsKLQkJCQliZi0+YmZfZGFkZHIgPSBEUzJQSFlTKGRkLCBkcyk7Ci0JCQl9Ci0JCX0KLQkJbGlzdF9hZGRfdGFpbCgmYmYtPmxpc3QsIGhlYWQpOwotCX0KLQlyZXR1cm4gMDsKLWZhaWwyOgotCWRtYV9mcmVlX2NvaGVyZW50KHNjLT5kZXYsIGRkLT5kZF9kZXNjX2xlbiwgZGQtPmRkX2Rlc2MsCi0JCQkgIGRkLT5kZF9kZXNjX3BhZGRyKTsKLWZhaWw6Ci0JbWVtc2V0KGRkLCAwLCBzaXplb2YoKmRkKSk7Ci0JcmV0dXJuIGVycm9yOwotI3VuZGVmIEFUSF9ERVNDXzRLQl9CT1VORF9DSEVDSwotI3VuZGVmIEFUSF9ERVNDXzRLQl9CT1VORF9OVU1fU0tJUFBFRAotI3VuZGVmIERTMlBIWVMKLX0KLQotdm9pZCBhdGhfZGVzY2RtYV9jbGVhbnVwKHN0cnVjdCBhdGhfc29mdGMgKnNjLAotCQkJIHN0cnVjdCBhdGhfZGVzY2RtYSAqZGQsCi0JCQkgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKLXsKLQlkbWFfZnJlZV9jb2hlcmVudChzYy0+ZGV2LCBkZC0+ZGRfZGVzY19sZW4sIGRkLT5kZF9kZXNjLAotCQkJICBkZC0+ZGRfZGVzY19wYWRkcik7Ci0KLQlJTklUX0xJU1RfSEVBRChoZWFkKTsKLQlrZnJlZShkZC0+ZGRfYnVmcHRyKTsKLQltZW1zZXQoZGQsIDAsIHNpemVvZigqZGQpKTsKLX0KLQogaW50IGF0aF9nZXRfaGFsX3FudW0odTE2IHF1ZXVlLCBzdHJ1Y3QgYXRoX3NvZnRjICpzYykKIHsKIAlpbnQgcW51bTsKQEAgLTIyMjAsMjggKzEwNzYsNiBAQAogLyogbWFjODAyMTEgY2FsbGJhY2tzICovCiAvKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyoKLSAqIChSZSlzdGFydCBidGNvZXggdGltZXJzCi0gKi8KLXN0YXRpYyB2b2lkIGF0aDlrX2J0Y29leF90aW1lcl9yZXN1bWUoc3RydWN0IGF0aF9zb2Z0YyAqc2MpCi17Ci0Jc3RydWN0IGF0aF9idGNvZXggKmJ0Y29leCA9ICZzYy0+YnRjb2V4OwotCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwotCi0JYXRoX3ByaW50KGF0aDlrX2h3X2NvbW1vbihhaCksIEFUSF9EQkdfQlRDT0VYLAotCQkgICJTdGFydGluZyBidGNvZXggdGltZXJzIik7Ci0KLQkvKiBtYWtlIHN1cmUgZHV0eSBjeWNsZSB0aW1lciBpcyBhbHNvIHN0b3BwZWQgd2hlbiByZXN1bWluZyAqLwotCWlmIChidGNvZXgtPmh3X3RpbWVyX2VuYWJsZWQpCi0JCWF0aDlrX2dlbl90aW1lcl9zdG9wKHNjLT5zY19haCwgYnRjb2V4LT5ub19zdG9tcF90aW1lcik7Ci0KLQlidGNvZXgtPmJ0X3ByaW9yaXR5X2NudCA9IDA7Ci0JYnRjb2V4LT5idF9wcmlvcml0eV90aW1lID0gamlmZmllczsKLQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0JUX1BSSU9SSVRZX0RFVEVDVEVEOwotCi0JbW9kX3RpbWVyKCZidGNvZXgtPnBlcmlvZF90aW1lciwgamlmZmllcyk7Ci19Ci0KIHN0YXRpYyBpbnQgYXRoOWtfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwpAQCAtMjQxMSwxMSArMTI0NSwxMSBAQAogCQlpZiAoaWVlZTgwMjExX2lzX3BzcG9sbChoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1BTLAogCQkJCSAgIlNlbmRpbmcgUFMtUG9sbCB0byBwaWNrIGEgYnVmZmVyZWQgZnJhbWVcbiIpOwotCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX1dBSVRfRk9SX1BTUE9MTF9EQVRBOworCQkJc2MtPnBzX2ZsYWdzIHw9IFBTX1dBSVRfRk9SX1BTUE9MTF9EQVRBOwogCQl9IGVsc2UgewogCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19QUywKIAkJCQkgICJXYWtlIHVwIHRvIGNvbXBsZXRlIFRYXG4iKTsKLQkJCXNjLT5zY19mbGFncyB8PSBTQ19PUF9XQUlUX0ZPUl9UWF9BQ0s7CisJCQlzYy0+cHNfZmxhZ3MgfD0gUFNfV0FJVF9GT1JfVFhfQUNLOwogCQl9CiAJCS8qCiAJCSAqIFRoZSBhY3R1YWwgcmVzdG9yZSBvcGVyYXRpb24gd2lsbCBoYXBwZW4gb25seSBhZnRlcgpAQCAtMjQ2OCwyMiArMTMwMiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBQYXVzZSBidGNvZXggdGltZXIgYW5kIGJ0IGR1dHkgY3ljbGUgdGltZXIKLSAqLwotc3RhdGljIHZvaWQgYXRoOWtfYnRjb2V4X3RpbWVyX3BhdXNlKHN0cnVjdCBhdGhfc29mdGMgKnNjKQotewotCXN0cnVjdCBhdGhfYnRjb2V4ICpidGNvZXggPSAmc2MtPmJ0Y29leDsKLQlzdHJ1Y3QgYXRoX2h3ICphaCA9IHNjLT5zY19haDsKLQotCWRlbF90aW1lcl9zeW5jKCZidGNvZXgtPnBlcmlvZF90aW1lcik7Ci0KLQlpZiAoYnRjb2V4LT5od190aW1lcl9lbmFibGVkKQotCQlhdGg5a19nZW5fdGltZXJfc3RvcChhaCwgYnRjb2V4LT5ub19zdG9tcF90aW1lcik7Ci0KLQlidGNvZXgtPmh3X3RpbWVyX2VuYWJsZWQgPSBmYWxzZTsKLX0KLQogc3RhdGljIHZvaWQgYXRoOWtfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3QgYXRoX3dpcGh5ICphcGh5ID0gaHctPnByaXY7CkBAIC0yNTUwLDEyICsxMzY4LDEyIEBACiB9CiAKIHN0YXRpYyBpbnQgYXRoOWtfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKLQlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKiljb25mLT52aWYtPmRydl9wcml2OworCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAJZW51bSBubDgwMjExX2lmdHlwZSBpY19vcG1vZGUgPSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRDsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMjU2Nyw3ICsxMzg1LDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jc3dpdGNoIChjb25mLT50eXBlKSB7CisJc3dpdGNoICh2aWYtPnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CiAJCWljX29wbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CiAJCWJyZWFrOwpAQCAtMjU3OCwxMSArMTM5NiwxMSBAQAogCQkJcmV0ID0gLUVOT0JVRlM7CiAJCQlnb3RvIG91dDsKIAkJfQotCQlpY19vcG1vZGUgPSBjb25mLT50eXBlOworCQlpY19vcG1vZGUgPSB2aWYtPnR5cGU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfRkFUQUwsCi0JCQkiSW50ZXJmYWNlIHR5cGUgJWQgbm90IHlldCBzdXBwb3J0ZWRcbiIsIGNvbmYtPnR5cGUpOworCQkJIkludGVyZmFjZSB0eXBlICVkIG5vdCB5ZXQgc3VwcG9ydGVkXG4iLCB2aWYtPnR5cGUpOwogCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjYxNCwxOCArMTQzMiwxOCBAQAogCSAqIEVuYWJsZSBNSUIgaW50ZXJydXB0cyB3aGVuIHRoZXJlIGFyZSBoYXJkd2FyZSBwaHkgY291bnRlcnMuCiAJICogTm90ZSB3ZSBvbmx5IGRvIHRoaXMgKGF0IHRoZSBtb21lbnQpIGZvciBzdGF0aW9uIG1vZGUuCiAJICovCi0JaWYgKChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8Ci0JICAgIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKSB8fAotCSAgICAoY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSkgeworCWlmICgodmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHx8CisJICAgICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpIHx8CisJICAgICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkpIHsKIAkJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9NSUI7CiAJCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfVFNGT09SOwogCX0KIAogCWF0aDlrX2h3X3NldF9pbnRlcnJ1cHRzKHNjLT5zY19haCwgc2MtPmltYXNrKTsKIAotCWlmIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQICAgIHx8Ci0JICAgIGNvbmYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKLQkgICAgY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQorCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgICAgfHwKKwkgICAgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8CisJICAgIHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKQogCQlhdGhfc3RhcnRfYW5pKGNvbW1vbik7CiAKIG91dDoKQEAgLTI2MzQsMTIgKzE0NTIsMTIgQEAKIH0KIAogc3RhdGljIHZvaWQgYXRoOWtfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKLQlzdHJ1Y3QgYXRoX3ZpZiAqYXZwID0gKHZvaWQgKiljb25mLT52aWYtPmRydl9wcml2OworCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CiAJaW50IGk7CiAKIAlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgIkRldGFjaCBJbnRlcmZhY2VcbiIpOwpAQCAtMjY2Miw3ICsxNDgwLDcgQEAKIAlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX0JFQUNPTlM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYy0+YmVhY29uLmJzbG90KTsgaSsrKSB7Ci0JCWlmIChzYy0+YmVhY29uLmJzbG90W2ldID09IGNvbmYtPnZpZikgeworCQlpZiAoc2MtPmJlYWNvbi5ic2xvdFtpXSA9PSB2aWYpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogdmlmIGhhZCBhbGxvY2F0ZWQgYmVhY29uICIKIAkJCSAgICAgICAic2xvdFxuIiwgX19mdW5jX18pOwogCQkJc2MtPmJlYWNvbi5ic2xvdFtpXSA9IE5VTEw7CkBAIC0yNjc1LDYgKzE0OTMsMTkgQEAKIAltdXRleF91bmxvY2soJnNjLT5tdXRleCk7CiB9CiAKK3ZvaWQgYXRoOWtfZW5hYmxlX3BzKHN0cnVjdCBhdGhfc29mdGMgKnNjKQoreworCXNjLT5wc19lbmFibGVkID0gdHJ1ZTsKKwlpZiAoIShzYy0+c2NfYWgtPmNhcHMuaHdfY2FwcyAmIEFUSDlLX0hXX0NBUF9BVVRPU0xFRVApKSB7CisJCWlmICgoc2MtPmltYXNrICYgQVRIOUtfSU5UX1RJTV9USU1FUikgPT0gMCkgeworCQkJc2MtPmltYXNrIHw9IEFUSDlLX0lOVF9USU1fVElNRVI7CisJCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsCisJCQkJCXNjLT5pbWFzayk7CisJCX0KKwl9CisJYXRoOWtfaHdfc2V0cnhhYm9ydChzYy0+c2NfYWgsIDEpOworfQorCiBzdGF0aWMgaW50IGF0aDlrX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCiB7CiAJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwpAQCAtMjcxMyw2ICsxNTQ0LDcgQEAKIAkJc3Bpbl91bmxvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKIAogCQlpZiAoZW5hYmxlX3JhZGlvKSB7CisJCQlzYy0+cHNfaWRsZSA9IGZhbHNlOwogCQkJYXRoX3JhZGlvX2VuYWJsZShzYywgaHcpOwogCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCiAJCQkJICAibm90LWlkbGU6IGVuYWJsaW5nIHJhZGlvXG4iKTsKQEAgLTI3MjcsMzYgKzE1NTksMjcgQEAKIAkgKi8KIAlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUykgewogCQlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgewotCQkJc2MtPnNjX2ZsYWdzIHw9IFNDX09QX1BTX0VOQUJMRUQ7Ci0JCQlpZiAoIShhaC0+Y2Fwcy5od19jYXBzICYKLQkJCSAgICAgIEFUSDlLX0hXX0NBUF9BVVRPU0xFRVApKSB7Ci0JCQkJaWYgKChzYy0+aW1hc2sgJiBBVEg5S19JTlRfVElNX1RJTUVSKSA9PSAwKSB7Ci0JCQkJCXNjLT5pbWFzayB8PSBBVEg5S19JTlRfVElNX1RJTUVSOwotCQkJCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsCi0JCQkJCQkJc2MtPmltYXNrKTsKLQkJCQl9Ci0JCQl9CisJCQlzYy0+cHNfZmxhZ3MgfD0gUFNfRU5BQkxFRDsKIAkJCS8qCiAJCQkgKiBBdCB0aGlzIHBvaW50IHdlIGtub3cgaGFyZHdhcmUgaGFzIHJlY2VpdmVkIGFuIEFDSwogCQkJICogb2YgYSBwcmV2aW91c2x5IHNlbnQgbnVsbCBkYXRhIGZyYW1lLgogCQkJICovCi0JCQlpZiAoKHNjLT5zY19mbGFncyAmIFNDX09QX05VTExGVU5DX0NPTVBMRVRFRCkpIHsKLQkJCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX05VTExGVU5DX0NPTVBMRVRFRDsKLQkJCQlzYy0+cHNfZW5hYmxlZCA9IHRydWU7Ci0JCQkJYXRoOWtfaHdfc2V0cnhhYm9ydChzYy0+c2NfYWgsIDEpOworCQkJaWYgKChzYy0+cHNfZmxhZ3MgJiBQU19OVUxMRlVOQ19DT01QTEVURUQpKSB7CisJCQkJc2MtPnBzX2ZsYWdzICY9IH5QU19OVUxMRlVOQ19DT01QTEVURUQ7CisJCQkJYXRoOWtfZW5hYmxlX3BzKHNjKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAkJfSBlbHNlIHsKIAkJCXNjLT5wc19lbmFibGVkID0gZmFsc2U7Ci0JCQlzYy0+c2NfZmxhZ3MgJj0gfihTQ19PUF9QU19FTkFCTEVEIHwKLQkJCQkJICBTQ19PUF9OVUxMRlVOQ19DT01QTEVURUQpOworCQkJc2MtPnBzX2ZsYWdzICY9IH4oUFNfRU5BQkxFRCB8CisJCQkJCSAgUFNfTlVMTEZVTkNfQ09NUExFVEVEKTsKIAkJCWF0aDlrX3NldHBvd2VyKHNjLCBBVEg5S19QTV9BV0FLRSk7CiAJCQlpZiAoIShhaC0+Y2Fwcy5od19jYXBzICYKIAkJCSAgICAgIEFUSDlLX0hXX0NBUF9BVVRPU0xFRVApKSB7CiAJCQkJYXRoOWtfaHdfc2V0cnhhYm9ydChzYy0+c2NfYWgsIDApOwotCQkJCXNjLT5zY19mbGFncyAmPSB+KFNDX09QX1dBSVRfRk9SX0JFQUNPTiB8Ci0JCQkJCQkgIFNDX09QX1dBSVRfRk9SX0NBQiB8Ci0JCQkJCQkgIFNDX09QX1dBSVRfRk9SX1BTUE9MTF9EQVRBIHwKLQkJCQkJCSAgU0NfT1BfV0FJVF9GT1JfVFhfQUNLKTsKKwkJCQlzYy0+cHNfZmxhZ3MgJj0gfihQU19XQUlUX0ZPUl9CRUFDT04gfAorCQkJCQkJICBQU19XQUlUX0ZPUl9DQUIgfAorCQkJCQkJICBQU19XQUlUX0ZPUl9QU1BPTExfREFUQSB8CisJCQkJCQkgIFBTX1dBSVRfRk9SX1RYX0FDSyk7CiAJCQkJaWYgKHNjLT5pbWFzayAmIEFUSDlLX0lOVF9USU1fVElNRVIpIHsKIAkJCQkJc2MtPmltYXNrICY9IH5BVEg5S19JTlRfVElNX1RJTUVSOwogCQkJCQlhdGg5a19od19zZXRfaW50ZXJydXB0cyhzYy0+c2NfYWgsCkBAIC0yNzY2LDYgKzE1ODksMTQgQEAKIAkJfQogCX0KIAorCWlmIChjaGFuZ2VkICYgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX01PTklUT1IpIHsKKwkJaWYgKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfTU9OSVRPUikgeworCQkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19DT05GSUcsCisJCQkJICAiSFcgb3Btb2RlIHNldCB0byBNb25pdG9yIG1vZGVcbiIpOworCQkJc2MtPnNjX2FoLT5vcG1vZGUgPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOworCQl9CisJfQorCiAJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkgewogCQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmN1cmNoYW4gPSBody0+Y29uZi5jaGFubmVsOwogCQlpbnQgcG9zID0gY3VyY2hhbi0+aHdfdmFsdWU7CkBAIC0yODAxLDggKzE2MzIsMTAgQEAKIAl9CiAKIHNraXBfY2hhbl9jaGFuZ2U6Ci0JaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIpCisJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUE9XRVIpIHsKIAkJc2MtPmNvbmZpZy50eHBvd2xpbWl0ID0gMiAqIGNvbmYtPnBvd2VyX2xldmVsOworCQlhdGhfdXBkYXRlX3R4cG93KHNjKTsKKwl9CiAKIAlzcGluX2xvY2tfYmgoJnNjLT53aXBoeV9sb2NrKTsKIAlkaXNhYmxlX3JhZGlvID0gYXRoOWtfYWxsX3dpcGh5c19pZGxlKHNjKTsKQEAgLTI4MTAsNiArMTY0Myw3IEBACiAKIAlpZiAoZGlzYWJsZV9yYWRpbykgewogCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX0NPTkZJRywgImlkbGU6IGRpc2FibGluZyByYWRpb1xuIik7CisJCXNjLT5wc19pZGxlID0gdHJ1ZTsKIAkJYXRoX3JhZGlvX2Rpc2FibGUoc2MsIGh3KTsKIAl9CiAKQEAgLTI4NTAsMjQgKzE2ODQsMjggQEAKIAkJICAiU2V0IEhXIFJYIGZpbHRlcjogMHgleFxuIiwgcmZpbHQpOwogfQogCi1zdGF0aWMgdm9pZCBhdGg5a19zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJICAgICBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCwKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3N0YXRpYyBpbnQgYXRoOWtfc3RhX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCiB7CiAJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgU1RBX05PVElGWV9BREQ6Ci0JCWF0aF9ub2RlX2F0dGFjaChzYywgc3RhKTsKLQkJYnJlYWs7Ci0JY2FzZSBTVEFfTk9USUZZX1JFTU9WRToKLQkJYXRoX25vZGVfZGV0YWNoKHNjLCBzdGEpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9CisJYXRoX25vZGVfYXR0YWNoKHNjLCBzdGEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXRoOWtfc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OworCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisKKwlhdGhfbm9kZV9kZXRhY2goc2MsIHN0YSk7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBhdGg5a19jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MTYgcXVldWUsCkBAIC0yOTY2LDYgKzE4MDQsNyBAQAogCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOwogCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oYWgpOwogCXN0cnVjdCBhdGhfdmlmICphdnAgPSAodm9pZCAqKXZpZi0+ZHJ2X3ByaXY7CisJaW50IHNsb3R0aW1lOwogCWludCBlcnJvcjsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CkBAIC0zMDAxLDYgKzE4NDAsMjUgQEAKIAkJCWF0aF9iZWFjb25fY29uZmlnKHNjLCB2aWYpOwogCX0KIAorCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfRVJQX1NMT1QpIHsKKwkJaWYgKGJzc19jb25mLT51c2Vfc2hvcnRfc2xvdCkKKwkJCXNsb3R0aW1lID0gOTsKKwkJZWxzZQorCQkJc2xvdHRpbWUgPSAyMDsKKwkJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCkgeworCQkJLyoKKwkJCSAqIERlZmVyIHVwZGF0ZSwgc28gdGhhdCBjb25uZWN0ZWQgc3RhdGlvbnMgY2FuIGFkanVzdAorCQkJICogdGhlaXIgc2V0dGluZ3MgYXQgdGhlIHNhbWUgdGltZS4KKwkJCSAqIFNlZSBiZWFjb24uYyBmb3IgbW9yZSBkZXRhaWxzCisJCQkgKi8KKwkJCXNjLT5iZWFjb24uc2xvdHRpbWUgPSBzbG90dGltZTsKKwkJCXNjLT5iZWFjb24udXBkYXRlc2xvdCA9IFVQREFURTsKKwkJfSBlbHNlIHsKKwkJCWFoLT5zbG90dGltZSA9IHNsb3R0aW1lOworCQkJYXRoOWtfaHdfaW5pdF9nbG9iYWxfc2V0dGluZ3MoYWgpOworCQl9CisJfQorCiAJLyogRGlzYWJsZSB0cmFuc21pc3Npb24gb2YgYmVhY29ucyAqLwogCWlmICgoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKSAmJiAhYnNzX2NvbmYtPmVuYWJsZV9iZWFjb24pCiAJCWF0aDlrX2h3X3N0b3B0eGRtYShzYy0+c2NfYWgsIHNjLT5iZWFjb24uYmVhY29ucSk7CkBAIC0zMTMzLDYgKzE5OTEsNyBAQAogewogCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7CiAJaWYgKGF0aDlrX3dpcGh5X3NjYW5uaW5nKHNjKSkgewpAQCAtMzE0OCwxMCArMjAwNyw5IEBACiAKIAlhcGh5LT5zdGF0ZSA9IEFUSF9XSVBIWV9TQ0FOOwogCWF0aDlrX3dpcGh5X3BhdXNlX2FsbF9mb3JjZWQoc2MsIGFwaHkpOwotCi0Jc3Bpbl9sb2NrX2JoKCZzYy0+YW5pX2xvY2spOwogCXNjLT5zY19mbGFncyB8PSBTQ19PUF9TQ0FOTklORzsKLQlzcGluX3VubG9ja19iaCgmc2MtPmFuaV9sb2NrKTsKKwlkZWxfdGltZXJfc3luYygmY29tbW9uLT5hbmkudGltZXIpOworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmc2MtPnR4X2NvbXBsZXRlX3dvcmspOwogCW11dGV4X3VubG9jaygmc2MtPm11dGV4KTsKIH0KIApAQCAtMzE1OSwxNyArMjAxNywzMCBAQAogewogCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKIAlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfY29tbW9uICpjb21tb24gPSBhdGg5a19od19jb21tb24oc2MtPnNjX2FoKTsKIAogCW11dGV4X2xvY2soJnNjLT5tdXRleCk7Ci0Jc3Bpbl9sb2NrX2JoKCZzYy0+YW5pX2xvY2spOwogCWFwaHktPnN0YXRlID0gQVRIX1dJUEhZX0FDVElWRTsKIAlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX1NDQU5OSU5HOwogCXNjLT5zY19mbGFncyB8PSBTQ19PUF9GVUxMX1JFU0VUOwotCXNwaW5fdW5sb2NrX2JoKCZzYy0+YW5pX2xvY2spOworCWF0aF9zdGFydF9hbmkoY29tbW9uKTsKKwlpZWVlODAyMTFfcXVldWVfZGVsYXllZF93b3JrKHNjLT5odywgJnNjLT50eF9jb21wbGV0ZV93b3JrLCAwKTsKIAlhdGhfYmVhY29uX2NvbmZpZyhzYywgTlVMTCk7CiAJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOwogfQogCitzdGF0aWMgdm9pZCBhdGg5a19zZXRfY292ZXJhZ2VfY2xhc3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGNvdmVyYWdlX2NsYXNzKQoreworCXN0cnVjdCBhdGhfd2lwaHkgKmFwaHkgPSBody0+cHJpdjsKKwlzdHJ1Y3QgYXRoX3NvZnRjICpzYyA9IGFwaHktPnNjOworCXN0cnVjdCBhdGhfaHcgKmFoID0gc2MtPnNjX2FoOworCisJbXV0ZXhfbG9jaygmc2MtPm11dGV4KTsKKwlhaC0+Y292ZXJhZ2VfY2xhc3MgPSBjb3ZlcmFnZV9jbGFzczsKKwlhdGg5a19od19pbml0X2dsb2JhbF9zZXR0aW5ncyhhaCk7CisJbXV0ZXhfdW5sb2NrKCZzYy0+bXV0ZXgpOworfQorCiBzdHJ1Y3QgaWVlZTgwMjExX29wcyBhdGg5a19vcHMgPSB7CiAJLnR4IAkJICAgID0gYXRoOWtfdHgsCiAJLnN0YXJ0IAkJICAgID0gYXRoOWtfc3RhcnQsCkBAIC0zMTc4LDcgKzIwNDksOCBAQAogCS5yZW1vdmVfaW50ZXJmYWNlICAgPSBhdGg5a19yZW1vdmVfaW50ZXJmYWNlLAogCS5jb25maWcgCSAgICA9IGF0aDlrX2NvbmZpZywKIAkuY29uZmlndXJlX2ZpbHRlciAgID0gYXRoOWtfY29uZmlndXJlX2ZpbHRlciwKLQkuc3RhX25vdGlmeSAgICAgICAgID0gYXRoOWtfc3RhX25vdGlmeSwKKwkuc3RhX2FkZAkgICAgPSBhdGg5a19zdGFfYWRkLAorCS5zdGFfcmVtb3ZlCSAgICA9IGF0aDlrX3N0YV9yZW1vdmUsCiAJLmNvbmZfdHggCSAgICA9IGF0aDlrX2NvbmZfdHgsCiAJLmJzc19pbmZvX2NoYW5nZWQgICA9IGF0aDlrX2Jzc19pbmZvX2NoYW5nZWQsCiAJLnNldF9rZXkgICAgICAgICAgICA9IGF0aDlrX3NldF9rZXksCkBAIC0zMTg5LDY0ICsyMDYxLDUgQEAKIAkuc3dfc2Nhbl9zdGFydCAgICAgID0gYXRoOWtfc3dfc2Nhbl9zdGFydCwKIAkuc3dfc2Nhbl9jb21wbGV0ZSAgID0gYXRoOWtfc3dfc2Nhbl9jb21wbGV0ZSwKIAkucmZraWxsX3BvbGwgICAgICAgID0gYXRoOWtfcmZraWxsX3BvbGxfc3RhdGUsCisJLnNldF9jb3ZlcmFnZV9jbGFzcyA9IGF0aDlrX3NldF9jb3ZlcmFnZV9jbGFzcywKIH07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGF0aDlrX2luaXQodm9pZCkKLXsKLQlpbnQgZXJyb3I7Ci0KLQkvKiBSZWdpc3RlciByYXRlIGNvbnRyb2wgYWxnb3JpdGhtICovCi0JZXJyb3IgPSBhdGhfcmF0ZV9jb250cm9sX3JlZ2lzdGVyKCk7Ci0JaWYgKGVycm9yICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiYXRoOWs6IFVuYWJsZSB0byByZWdpc3RlciByYXRlIGNvbnRyb2wgIgotCQkJImFsZ29yaXRobTogJWRcbiIsCi0JCQllcnJvcik7Ci0JCWdvdG8gZXJyX291dDsKLQl9Ci0KLQllcnJvciA9IGF0aDlrX2RlYnVnX2NyZWF0ZV9yb290KCk7Ci0JaWYgKGVycm9yKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkJImF0aDlrOiBVbmFibGUgdG8gY3JlYXRlIGRlYnVnZnMgcm9vdDogJWRcbiIsCi0JCQllcnJvcik7Ci0JCWdvdG8gZXJyX3JhdGVfdW5yZWdpc3RlcjsKLQl9Ci0KLQllcnJvciA9IGF0aF9wY2lfaW5pdCgpOwotCWlmIChlcnJvciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiYXRoOWs6IE5vIFBDSSBkZXZpY2VzIGZvdW5kLCBkcml2ZXIgbm90IGluc3RhbGxlZC5cbiIpOwotCQllcnJvciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyX3JlbW92ZV9yb290OwotCX0KLQotCWVycm9yID0gYXRoX2FoYl9pbml0KCk7Ci0JaWYgKGVycm9yIDwgMCkgewotCQllcnJvciA9IC1FTk9ERVY7Ci0JCWdvdG8gZXJyX3BjaV9leGl0OwotCX0KLQotCXJldHVybiAwOwotCi0gZXJyX3BjaV9leGl0OgotCWF0aF9wY2lfZXhpdCgpOwotCi0gZXJyX3JlbW92ZV9yb290OgotCWF0aDlrX2RlYnVnX3JlbW92ZV9yb290KCk7Ci0gZXJyX3JhdGVfdW5yZWdpc3RlcjoKLQlhdGhfcmF0ZV9jb250cm9sX3VucmVnaXN0ZXIoKTsKLSBlcnJfb3V0OgotCXJldHVybiBlcnJvcjsKLX0KLW1vZHVsZV9pbml0KGF0aDlrX2luaXQpOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYXRoOWtfZXhpdCh2b2lkKQotewotCWF0aF9haGJfZXhpdCgpOwotCWF0aF9wY2lfZXhpdCgpOwotCWF0aDlrX2RlYnVnX3JlbW92ZV9yb290KCk7Ci0JYXRoX3JhdGVfY29udHJvbF91bnJlZ2lzdGVyKCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERyaXZlciB1bmxvYWRlZFxuIiwgZGV2X2luZm8pOwotfQotbW9kdWxlX2V4aXQoYXRoOWtfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGNpLmMKaW5kZXggZjdhZjVlYS4uOTQ0MWM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9wY2kuYwpAQCAtMTgsMTMgKzE4LDE0IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSAiYXRoOWsuaCIKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGF0aF9wY2lfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGF0aF9wY2lfaWRfdGFibGUpID0gewogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDIzKSB9LCAvKiBQQ0kgICAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI0KSB9LCAvKiBQQ0ktRSAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI3KSB9LCAvKiBQQ0kgICAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDI5KSB9LCAvKiBQQ0kgICAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDJBKSB9LCAvKiBQQ0ktRSAqLwogCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDJCKSB9LCAvKiBQQ0ktRSAqLworCXsgUENJX1ZERVZJQ0UoQVRIRVJPUywgMHgwMDJDKSB9LCAvKiBQQ0ktRSA4MDIuMTFuIGJvbmRlZCBvdXQgKi8KIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyRCkgfSwgLyogUENJICAgKi8KIAl7IFBDSV9WREVWSUNFKEFUSEVST1MsIDB4MDAyRSkgfSwgLyogUENJLUUgKi8KIAl7IDAgfQpAQCAtNDksMTYgKzUwLDYgQEAKIAkJKmNzeiA9IERFRkFVTFRfQ0FDSEVMSU5FID4+IDI7ICAgLyogVXNlIHRoZSBkZWZhdWx0IHNpemUgKi8KIH0KIAotc3RhdGljIHZvaWQgYXRoX3BjaV9jbGVhbnVwKHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24pCi17Ci0Jc3RydWN0IGF0aF9zb2Z0YyAqc2MgPSAoc3RydWN0IGF0aF9zb2Z0YyAqKSBjb21tb24tPnByaXY7Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KHNjLT5kZXYpOwotCi0JcGNpX2lvdW5tYXAocGRldiwgc2MtPm1lbSk7Ci0JcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwotCXBjaV9yZWxlYXNlX3JlZ2lvbihwZGV2LCAwKTsKLX0KLQogc3RhdGljIGJvb2wgYXRoX3BjaV9lZXByb21fcmVhZChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLCB1MzIgb2ZmLCB1MTYgKmRhdGEpCiB7CiAJc3RydWN0IGF0aF9odyAqYWggPSAoc3RydWN0IGF0aF9odyAqKSBjb21tb24tPmFoOwpAQCAtOTgsNyArODksNiBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGF0aF9idXNfb3BzIGF0aF9wY2lfYnVzX29wcyA9IHsKIAkucmVhZF9jYWNoZXNpemUgPSBhdGhfcGNpX3JlYWRfY2FjaGVzaXplLAotCS5jbGVhbnVwID0gYXRoX3BjaV9jbGVhbnVwLAogCS5lZXByb21fcmVhZCA9IGF0aF9wY2lfZWVwcm9tX3JlYWQsCiAJLmJ0X2NvZXhfcHJlcCA9IGF0aF9wY2lfYnRfY29leF9wcmVwLAogfTsKQEAgLTExMywyNSArMTAzLDIyIEBACiAJdTE2IHN1YnN5c2lkOwogCXUzMiB2YWw7CiAJaW50IHJldCA9IDA7Ci0Jc3RydWN0IGF0aF9odyAqYWg7CiAJY2hhciBod19uYW1lWzY0XTsKIAogCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKIAkJcmV0dXJuIC1FSU87CiAKIAlyZXQgPSAgcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKLQogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhdGg5azogMzItYml0IERNQSBub3QgYXZhaWxhYmxlXG4iKTsKLQkJZ290byBiYWQ7CisJCWdvdG8gZXJyX2RtYTsKIAl9CiAKIAlyZXQgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7Ci0KIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXRoOWs6IDMyLWJpdCBETUEgY29uc2lzdGVudCAiCiAJCQkiRE1BIGVuYWJsZSBmYWlsZWRcbiIpOwotCQlnb3RvIGJhZDsKKwkJZ290byBlcnJfZG1hOwogCX0KIAogCS8qCkBAIC0xNzEsMjIgKzE1OCwyMiBAQAogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiUENJIG1lbW9yeSByZWdpb24gcmVzZXJ2ZSBlcnJvclxuIik7CiAJCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gYmFkOworCQlnb3RvIGVycl9yZWdpb247CiAJfQogCiAJbWVtID0gcGNpX2lvbWFwKHBkZXYsIDAsIDApOwogCWlmICghbWVtKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUENJIG1lbW9yeSBtYXAgZXJyb3JcbiIpIDsKIAkJcmV0ID0gLUVJTzsKLQkJZ290byBiYWQxOworCQlnb3RvIGVycl9pb21hcDsKIAl9CiAKIAlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2Yoc3RydWN0IGF0aF93aXBoeSkgKwogCQkJCXNpemVvZihzdHJ1Y3QgYXRoX3NvZnRjKSwgJmF0aDlrX29wcyk7CiAJaWYgKCFodykgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW1vcnkgZm9yIGllZWU4MDIxMV9od1xuIik7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIG1lbW9yeSBmb3IgaWVlZTgwMjExX2h3XG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBiYWQyOworCQlnb3RvIGVycl9hbGxvY19odzsKIAl9CiAKIAlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7CkBAIC0yMDEsMjUgKzE4OCwyNSBAQAogCXNjLT5kZXYgPSAmcGRldi0+ZGV2OwogCXNjLT5tZW0gPSBtZW07CiAKLQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfU1VCU1lTVEVNX0lELCAmc3Vic3lzaWQpOwotCXJldCA9IGF0aF9pbml0X2RldmljZShpZC0+ZGV2aWNlLCBzYywgc3Vic3lzaWQsICZhdGhfcGNpX2J1c19vcHMpOwotCWlmIChyZXQpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgZGV2aWNlXG4iKTsKLQkJZ290byBiYWQzOwotCX0KLQotCS8qIHNldHVwIGludGVycnVwdCBzZXJ2aWNlIHJvdXRpbmUgKi8KKwkvKiBXaWxsIGJlIGNsZWFyZWQgaW4gYXRoOWtfc3RhcnQoKSAqLworCXNjLT5zY19mbGFncyB8PSBTQ19PUF9JTlZBTElEOwogCiAJcmV0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBhdGhfaXNyLCBJUlFGX1NIQVJFRCwgImF0aDlrIiwgc2MpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVxdWVzdF9pcnEgZmFpbGVkXG4iKTsKLQkJZ290byBiYWQ0OworCQlnb3RvIGVycl9pcnE7CiAJfQogCiAJc2MtPmlycSA9IHBkZXYtPmlycTsKIAotCWFoID0gc2MtPnNjX2FoOwotCWF0aDlrX2h3X25hbWUoYWgsIGh3X25hbWUsIHNpemVvZihod19uYW1lKSk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX1NVQlNZU1RFTV9JRCwgJnN1YnN5c2lkKTsKKwlyZXQgPSBhdGg5a19pbml0X2RldmljZShpZC0+ZGV2aWNlLCBzYywgc3Vic3lzaWQsICZhdGhfcGNpX2J1c19vcHMpOworCWlmIChyZXQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJfaW5pdDsKKwl9CisKKwlhdGg5a19od19uYW1lKHNjLT5zY19haCwgaHdfbmFtZSwgc2l6ZW9mKGh3X25hbWUpKTsKIAlwcmludGsoS0VSTl9JTkZPCiAJICAgICAgICIlczogJXMgbWVtPTB4JWx4LCBpcnE9JWRcbiIsCiAJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwKQEAgLTIyNywxNSArMjE0LDE4IEBACiAJICAgICAgICh1bnNpZ25lZCBsb25nKW1lbSwgcGRldi0+aXJxKTsKIAogCXJldHVybiAwOwotYmFkNDoKLQlhdGhfZGV0YWNoKHNjKTsKLWJhZDM6CisKK2Vycl9pbml0OgorCWZyZWVfaXJxKHNjLT5pcnEsIHNjKTsKK2Vycl9pcnE6CiAJaWVlZTgwMjExX2ZyZWVfaHcoaHcpOwotYmFkMjoKK2Vycl9hbGxvY19odzoKIAlwY2lfaW91bm1hcChwZGV2LCBtZW0pOwotYmFkMToKK2Vycl9pb21hcDoKIAlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7Ci1iYWQ6CitlcnJfcmVnaW9uOgorCS8qIE5vdGhpbmcgKi8KK2Vycl9kbWE6CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yNDUsOCArMjM1LDE1IEBACiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IGF0aF93aXBoeSAqYXBoeSA9IGh3LT5wcml2OwogCXN0cnVjdCBhdGhfc29mdGMgKnNjID0gYXBoeS0+c2M7CisJdm9pZCBfX2lvbWVtICptZW0gPSBzYy0+bWVtOwogCi0JYXRoX2NsZWFudXAoc2MpOworCWF0aDlrX2RlaW5pdF9kZXZpY2Uoc2MpOworCWZyZWVfaXJxKHNjLT5pcnEsIHNjKTsKKwlpZWVlODAyMTFfZnJlZV9odyhzYy0+aHcpOworCisJcGNpX2lvdW5tYXAocGRldiwgbWVtKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIDApOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGh5LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcGh5LmgKaW5kZXggMzFkZTI3ZC4uMDk5OWE0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3BoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9waHkuaApAQCAtMzg0LDYgKzM4NCw5IEBACiAKICNkZWZpbmUgQVJfUEhZX0hFQVZZX0NMSVBfRU5BQkxFICAgICAgICAgMHg5OUUwCiAKKyNkZWZpbmUgQVJfUEhZX0hFQVZZX0NMSVBfRkFDVE9SX1JJRlMgICAgMHg5OUVDCisjZGVmaW5lIEFSX1BIWV9SSUZTX0lOSVRfREVMQVkgICAgICAgICAweDAzZmYwMDAwCisKICNkZWZpbmUgQVJfUEhZX01fU0xFRVAgICAgICAweDk5ZjAKICNkZWZpbmUgQVJfUEhZX1JFRkNMS0RMWSAgICAweDk5ZjQKICNkZWZpbmUgQVJfUEhZX1JFRkNMS1BEICAgICAweDk5ZjgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMKaW5kZXggNzBmZGI5ZC4uYWMzNGEwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmMKQEAgLTY2OCw3ICs2NjgsNyBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSAqcmF0ZXMgPSB0eF9pbmZvLT5jb250cm9sLnJhdGVzOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7CiAJX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOwotCXU4IHRyeV9wZXJfcmF0ZSwgaSA9IDAsIHJpeCwgbnJpeDsKKwl1OCB0cnlfcGVyX3JhdGUsIGkgPSAwLCByaXg7CiAJaW50IGlzX3Byb2JlID0gMDsKIAogCWlmIChyYXRlX2NvbnRyb2xfc2VuZF9sb3coc3RhLCBwcml2X3N0YSwgdHhyYykpCkBAIC02NzgsNDggKzY3OCw0NyBAQAogCSAqIEZvciBNdWx0aSBSYXRlIFJldHJ5IHdlIHVzZSBhIGRpZmZlcmVudCBudW1iZXIgb2YKIAkgKiByZXRyeSBhdHRlbXB0IGNvdW50cy4gVGhpcyBlbmRzIHVwIGxvb2tpbmcgbGlrZSB0aGlzOgogCSAqCi0JICogTVJSWzBdID0gMgotCSAqIE1SUlsxXSA9IDIKLQkgKiBNUlJbMl0gPSAyCi0JICogTVJSWzNdID0gNAorCSAqIE1SUlswXSA9IDQKKwkgKiBNUlJbMV0gPSA0CisJICogTVJSWzJdID0gNAorCSAqIE1SUlszXSA9IDgKIAkgKgogCSAqLwotCXRyeV9wZXJfcmF0ZSA9IHNjLT5ody0+bWF4X3JhdGVfdHJpZXM7CisJdHJ5X3Blcl9yYXRlID0gNDsKIAogCXJhdGVfdGFibGUgPSBzYy0+Y3VyX3JhdGVfdGFibGU7CiAJcml4ID0gYXRoX3JjX2dldF9oaWdoZXN0X3JpeChzYywgYXRoX3JjX3ByaXYsIHJhdGVfdGFibGUsICZpc19wcm9iZSk7Ci0JbnJpeCA9IHJpeDsKIAogCWlmIChpc19wcm9iZSkgewogCQkvKiBzZXQgb25lIHRyeSBmb3IgcHJvYmUgcmF0ZXMuIEZvciB0aGUKIAkJICogcHJvYmVzIGRvbid0IGVuYWJsZSBydHMgKi8KIAkJYXRoX3JjX3JhdGVfc2V0X3NlcmllcyhyYXRlX3RhYmxlLCAmcmF0ZXNbaSsrXSwgdHhyYywKLQkJCQkgICAgICAgMSwgbnJpeCwgMCk7CisJCQkJICAgICAgIDEsIHJpeCwgMCk7CiAKIAkJLyogR2V0IHRoZSBuZXh0IHRyaWVkL2FsbG93ZWQgcmF0ZS4gTm8gUlRTIGZvciB0aGUgbmV4dCBzZXJpZXMKIAkJICogYWZ0ZXIgdGhlIHByb2JlIHJhdGUKIAkJICovCi0JCWF0aF9yY19nZXRfbG93ZXJfcml4KHJhdGVfdGFibGUsIGF0aF9yY19wcml2LCByaXgsICZucml4KTsKKwkJYXRoX3JjX2dldF9sb3dlcl9yaXgocmF0ZV90YWJsZSwgYXRoX3JjX3ByaXYsIHJpeCwgJnJpeCk7CiAJCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwgJnJhdGVzW2krK10sIHR4cmMsCi0JCQkJICAgICAgIHRyeV9wZXJfcmF0ZSwgbnJpeCwgMCk7CisJCQkJICAgICAgIHRyeV9wZXJfcmF0ZSwgcml4LCAwKTsKIAogCQl0eF9pbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRTsKIAl9IGVsc2UgewogCQkvKiBTZXQgdGhlIGNob29zZW4gcmF0ZS4gTm8gUlRTIGZvciBmaXJzdCBzZXJpZXMgZW50cnkuICovCiAJCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwgJnJhdGVzW2krK10sIHR4cmMsCi0JCQkJICAgICAgIHRyeV9wZXJfcmF0ZSwgbnJpeCwgMCk7CisJCQkJICAgICAgIHRyeV9wZXJfcmF0ZSwgcml4LCAwKTsKIAl9CiAKIAkvKiBGaWxsIGluIHRoZSBvdGhlciByYXRlcyBmb3IgbXVsdGlyYXRlIHJldHJ5ICovCiAJZm9yICggOyBpIDwgNDsgaSsrKSB7CiAJCS8qIFVzZSB0d2ljZSB0aGUgbnVtYmVyIG9mIHRyaWVzIGZvciB0aGUgbGFzdCBNUlIgc2VnbWVudC4gKi8KIAkJaWYgKGkgKyAxID09IDQpCi0JCQl0cnlfcGVyX3JhdGUgPSA0OworCQkJdHJ5X3Blcl9yYXRlID0gODsKIAotCQlhdGhfcmNfZ2V0X2xvd2VyX3JpeChyYXRlX3RhYmxlLCBhdGhfcmNfcHJpdiwgcml4LCAmbnJpeCk7CisJCWF0aF9yY19nZXRfbG93ZXJfcml4KHJhdGVfdGFibGUsIGF0aF9yY19wcml2LCByaXgsICZyaXgpOwogCQkvKiBBbGwgb3RoZXIgcmF0ZXMgaW4gdGhlIHNlcmllcyBoYXZlIFJUUyBlbmFibGVkICovCiAJCWF0aF9yY19yYXRlX3NldF9zZXJpZXMocmF0ZV90YWJsZSwgJnJhdGVzW2ldLCB0eHJjLAotCQkJCSAgICAgICB0cnlfcGVyX3JhdGUsIG5yaXgsIDEpOworCQkJCSAgICAgICB0cnlfcGVyX3JhdGUsIHJpeCwgMSk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmgKaW5kZXggOWViOTZmNS4uNGY2ZDZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JjLmgKQEAgLTU3LDYgKzU3LDEwIEBACiAJCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfNDBfRFMpCVwKIAkJCQl8fCAoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF8yMF9EU19IR0kpCVwKIAkJCQl8fCAoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF80MF9EU19IR0kpKQorI2RlZmluZSBXTEFOX1JDX1BIWV8yMChfcGh5KSAgICgoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF8yMF9TUykJCVwKKwkJCQl8fCAoX3BoeSA9PSBXTEFOX1JDX1BIWV9IVF8yMF9EUykJXAorCQkJCXx8IChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzIwX1NTX0hHSSkJXAorCQkJCXx8IChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzIwX0RTX0hHSSkpCiAjZGVmaW5lIFdMQU5fUkNfUEhZXzQwKF9waHkpICAgKChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzQwX1NTKQkJXAogCQkJCXx8IChfcGh5ID09IFdMQU5fUkNfUEhZX0hUXzQwX0RTKQlcCiAJCQkJfHwgKF9waHkgPT0gV0xBTl9SQ19QSFlfSFRfNDBfU1NfSEdJKQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlY3YuYwppbmRleCA0NzczNjVlLi4xY2E0MmU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVjdi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWN2LmMKQEAgLTM2NCwxMCArMzY0LDEwIEBACiAJaWYgKG1lbWNtcChjb21tb24tPmN1cmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pICE9IDApCiAJCXJldHVybjsgLyogbm90IGZyb20gb3VyIGN1cnJlbnQgQVAgKi8KIAotCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfV0FJVF9GT1JfQkVBQ09OOworCXNjLT5wc19mbGFncyAmPSB+UFNfV0FJVF9GT1JfQkVBQ09OOwogCi0JaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX0JFQUNPTl9TWU5DKSB7Ci0JCXNjLT5zY19mbGFncyAmPSB+U0NfT1BfQkVBQ09OX1NZTkM7CisJaWYgKHNjLT5wc19mbGFncyAmIFBTX0JFQUNPTl9TWU5DKSB7CisJCXNjLT5wc19mbGFncyAmPSB+UFNfQkVBQ09OX1NZTkM7CiAJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUFMsCiAJCQkgICJSZWNvbmZpZ3VyZSBCZWFjb24gdGltZXJzIGJhc2VkIG9uICIKIAkJCSAgInRpbWVzdGFtcCBmcm9tIHRoZSBBUFxuIik7CkBAIC0zODQsMTcgKzM4NCwxNyBAQAogCQkgKi8KIAkJYXRoX3ByaW50KGNvbW1vbiwgQVRIX0RCR19QUywgIlJlY2VpdmVkIERUSU0gYmVhY29uIGluZGljYXRpbmcgIgogCQkJICAiYnVmZmVyZWQgYnJvYWRjYXN0L211bHRpY2FzdCBmcmFtZShzKVxuIik7Ci0JCXNjLT5zY19mbGFncyB8PSBTQ19PUF9XQUlUX0ZPUl9DQUIgfCBTQ19PUF9XQUlUX0ZPUl9CRUFDT047CisJCXNjLT5wc19mbGFncyB8PSBQU19XQUlUX0ZPUl9DQUIgfCBQU19XQUlUX0ZPUl9CRUFDT047CiAJCXJldHVybjsKIAl9CiAKLQlpZiAoc2MtPnNjX2ZsYWdzICYgU0NfT1BfV0FJVF9GT1JfQ0FCKSB7CisJaWYgKHNjLT5wc19mbGFncyAmIFBTX1dBSVRfRk9SX0NBQikgewogCQkvKgogCQkgKiBUaGlzIGNhbiBoYXBwZW4gaWYgYSBicm9hZGNhc3QgZnJhbWUgaXMgZHJvcHBlZCBvciB0aGUgQVAKIAkJICogZmFpbHMgdG8gc2VuZCBhIGZyYW1lIGluZGljYXRpbmcgdGhhdCBhbGwgQ0FCIGZyYW1lcyBoYXZlCiAJCSAqIGJlZW4gZGVsaXZlcmVkLgogCQkgKi8KLQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9XQUlUX0ZPUl9DQUI7CisJCXNjLT5wc19mbGFncyAmPSB+UFNfV0FJVF9GT1JfQ0FCOwogCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1BTLAogCQkJICAiUFMgd2FpdCBmb3IgQ0FCIGZyYW1lcyB0aW1lZCBvdXRcbiIpOwogCX0KQEAgLTQwOCwxMCArNDA4LDEwIEBACiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCiAJLyogUHJvY2VzcyBCZWFjb24gYW5kIENBQiByZWNlaXZlIGluIFBTIHN0YXRlICovCi0JaWYgKChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9XQUlUX0ZPUl9CRUFDT04pICYmCisJaWYgKChzYy0+cHNfZmxhZ3MgJiBQU19XQUlUX0ZPUl9CRUFDT04pICYmCiAJICAgIGllZWU4MDIxMV9pc19iZWFjb24oaGRyLT5mcmFtZV9jb250cm9sKSkKIAkJYXRoX3J4X3BzX2JlYWNvbihzYywgc2tiKTsKLQllbHNlIGlmICgoc2MtPnNjX2ZsYWdzICYgU0NfT1BfV0FJVF9GT1JfQ0FCKSAmJgorCWVsc2UgaWYgKChzYy0+cHNfZmxhZ3MgJiBQU19XQUlUX0ZPUl9DQUIpICYmCiAJCSAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSB8fAogCQkgIGllZWU4MDIxMV9pc19hY3Rpb24oaGRyLT5mcmFtZV9jb250cm9sKSkgJiYKIAkJIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmCkBAIC00MjAsMjAgKzQyMCwyMCBAQAogCQkgKiBObyBtb3JlIGJyb2FkY2FzdC9tdWx0aWNhc3QgZnJhbWVzIHRvIGJlIHJlY2VpdmVkIGF0IHRoaXMKIAkJICogcG9pbnQuCiAJCSAqLwotCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX1dBSVRfRk9SX0NBQjsKKwkJc2MtPnBzX2ZsYWdzICY9IH5QU19XQUlUX0ZPUl9DQUI7CiAJCWF0aF9wcmludChjb21tb24sIEFUSF9EQkdfUFMsCiAJCQkgICJBbGwgUFMgQ0FCIGZyYW1lcyByZWNlaXZlZCwgYmFjayB0byBzbGVlcFxuIik7Ci0JfSBlbHNlIGlmICgoc2MtPnNjX2ZsYWdzICYgU0NfT1BfV0FJVF9GT1JfUFNQT0xMX0RBVEEpICYmCisJfSBlbHNlIGlmICgoc2MtPnBzX2ZsYWdzICYgUFNfV0FJVF9GT1JfUFNQT0xMX0RBVEEpICYmCiAJCSAgICFpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSAmJgogCQkgICAhaWVlZTgwMjExX2hhc19tb3JlZnJhZ3MoaGRyLT5mcmFtZV9jb250cm9sKSkgewotCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX1dBSVRfRk9SX1BTUE9MTF9EQVRBOworCQlzYy0+cHNfZmxhZ3MgJj0gflBTX1dBSVRfRk9SX1BTUE9MTF9EQVRBOwogCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1BTLAogCQkJICAiR29pbmcgYmFjayB0byBzbGVlcCBhZnRlciBoYXZpbmcgcmVjZWl2ZWQgIgotCQkJICAiUFMtUG9sbCBkYXRhICgweCV4KVxuIiwKLQkJCXNjLT5zY19mbGFncyAmIChTQ19PUF9XQUlUX0ZPUl9CRUFDT04gfAotCQkJCQlTQ19PUF9XQUlUX0ZPUl9DQUIgfAotCQkJCQlTQ19PUF9XQUlUX0ZPUl9QU1BPTExfREFUQSB8Ci0JCQkJCVNDX09QX1dBSVRfRk9SX1RYX0FDSykpOworCQkJICAiUFMtUG9sbCBkYXRhICgweCVseClcbiIsCisJCQlzYy0+cHNfZmxhZ3MgJiAoUFNfV0FJVF9GT1JfQkVBQ09OIHwKKwkJCQkJUFNfV0FJVF9GT1JfQ0FCIHwKKwkJCQkJUFNfV0FJVF9GT1JfUFNQT0xMX0RBVEEgfAorCQkJCQlQU19XQUlUX0ZPUl9UWF9BQ0spKTsKIAl9CiB9CiAKQEAgLTU3MSw2ICs1NzEsOCBAQAogCQlodyA9IGF0aF9nZXRfdmlydF9odyhzYywgaGRyKTsKIAkJcnhfc3RhdHMgPSAmZHMtPmRzX3J4c3RhdDsKIAorCQlhdGhfZGVidWdfc3RhdF9yeChzYywgYmYpOworCiAJCS8qCiAJCSAqIElmIHdlJ3JlIGFza2VkIHRvIGZsdXNoIHJlY2VpdmUgcXVldWUsIGRpcmVjdGx5CiAJCSAqIGNoYWluIGl0IGJhY2sgYXQgdGhlIHF1ZXVlIHdpdGhvdXQgcHJvY2Vzc2luZyBpdC4KQEAgLTYzMSw5ICs2MzMsOSBAQAogCQkJc2MtPnJ4LnJ4b3RoZXJhbnQgPSAwOwogCQl9CiAKLQkJaWYgKHVubGlrZWx5KHNjLT5zY19mbGFncyAmIChTQ19PUF9XQUlUX0ZPUl9CRUFDT04gfAotCQkJCQkgICAgIFNDX09QX1dBSVRfRk9SX0NBQiB8Ci0JCQkJCSAgICAgU0NfT1BfV0FJVF9GT1JfUFNQT0xMX0RBVEEpKSkKKwkJaWYgKHVubGlrZWx5KHNjLT5wc19mbGFncyAmIChQU19XQUlUX0ZPUl9CRUFDT04gfAorCQkJCQkgICAgIFBTX1dBSVRfRk9SX0NBQiB8CisJCQkJCSAgICAgUFNfV0FJVF9GT1JfUFNQT0xMX0RBVEEpKSkKIAkJCWF0aF9yeF9wcyhzYywgc2tiKTsKIAogCQlhdGhfcnhfc2VuZF90b19tYWM4MDIxMShodywgc2MsIHNrYiwgcnhzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay9yZWcuaAppbmRleCA4ZTY1M2ZiLi43MmNmYThlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvcmVnLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3JlZy5oCkBAIC0xNTQ3LDkgKzE1NDcsOSBAQAogCiAjZGVmaW5lIEFSX0JUX0NPRVhfV0VJR0hUICAgICAgICAgIDB4ODE3NAogI2RlZmluZSBBUl9CVF9DT0VYX1dHSFQJCSAgIDB4ZmY1NQotI2RlZmluZSBBUl9TVE9NUF9BTExfV0xBTl9XR0hUCSAgIDB4ZmZjYwotI2RlZmluZSBBUl9TVE9NUF9MT1dfV0xBTl9XR0hUCSAgIDB4YWFhOAotI2RlZmluZSBBUl9TVE9NUF9OT05FX1dMQU5fV0dIVAkgICAweGFhMDAKKyNkZWZpbmUgQVJfU1RPTVBfQUxMX1dMQU5fV0dIVAkgICAweGZjZmMKKyNkZWZpbmUgQVJfU1RPTVBfTE9XX1dMQU5fV0dIVAkgICAweGE4YTgKKyNkZWZpbmUgQVJfU1RPTVBfTk9ORV9XTEFOX1dHSFQJICAgMHgwMDAwCiAjZGVmaW5lIEFSX0JUQ09FWF9CVF9XR0hUICAgICAgICAgIDB4MDAwMGZmZmYKICNkZWZpbmUgQVJfQlRDT0VYX0JUX1dHSFRfUyAgICAgICAgMAogI2RlZmluZSBBUl9CVENPRVhfV0xfV0dIVCAgICAgICAgICAweGZmZmYwMDAwCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvdmlydHVhbC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3ZpcnR1YWwuYwppbmRleCBjZDI2Y2FhLi5hNDNmYmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsvdmlydHVhbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay92aXJ0dWFsLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogCiAJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIoaHcsIGFkZHIpOwogCi0JYXRoX3NldF9od19jYXBhYihzYywgaHcpOworCWF0aDlrX3NldF9od19jYXBhYihzYywgaHcpOwogCiAJZXJyb3IgPSBpZWVlODAyMTFfcmVnaXN0ZXJfaHcoaHcpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2F0aDlrL3htaXQuYwppbmRleCAyOWJmMzM2Li40NzI5NGY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoOWsveG1pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9hdGg5ay94bWl0LmMKQEAgLTE0OTgsMjYgKzE0OTgsNiBAQAogCWlmIChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9QUkVBTUJMRV9TSE9SVCkKIAkJY3RzcmF0ZSB8PSByYXRlLT5od192YWx1ZV9zaG9ydDsKIAotCS8qCi0JICogQVRIOUtfVFhERVNDX1JUU0VOQSBhbmQgQVRIOUtfVFhERVNDX0NUU0VOQSBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgotCSAqIENoZWNrIHRoZSBmaXJzdCByYXRlIGluIHRoZSBzZXJpZXMgdG8gZGVjaWRlIHdoZXRoZXIgUlRTL0NUUwotCSAqIG9yIENUUy10by1zZWxmIGhhcyB0byBiZSB1c2VkLgotCSAqLwotCWlmIChyYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1QpCi0JCWZsYWdzID0gQVRIOUtfVFhERVNDX0NUU0VOQTsKLQllbHNlIGlmIChyYXRlc1swXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykKLQkJZmxhZ3MgPSBBVEg5S19UWERFU0NfUlRTRU5BOwotCi0JLyogRklYTUU6IEhhbmRsZSBhZ2dyZWdhdGlvbiBwcm90ZWN0aW9uICovCi0JaWYgKHNjLT5jb25maWcuYXRoX2FnZ3JfcHJvdCAmJgotCSAgICAoIWJmX2lzYWdncihiZikgfHwgKGJmX2lzYWdncihiZikgJiYgYmYtPmJmX2FsIDwgODE5MikpKSB7Ci0JCWZsYWdzID0gQVRIOUtfVFhERVNDX1JUU0VOQTsKLQl9Ci0KLQkvKiBGb3IgQVI1NDE2IC0gUlRTIGNhbm5vdCBiZSBmb2xsb3dlZCBieSBhIGZyYW1lIGxhcmdlciB0aGFuIDhLICovCi0JaWYgKGJmX2lzYWdncihiZikgJiYgKGJmLT5iZl9hbCA+IHNjLT5zY19haC0+Y2Fwcy5ydHNfYWdncl9saW1pdCkpCi0JCWZsYWdzICY9IH4oQVRIOUtfVFhERVNDX1JUU0VOQSk7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCWJvb2wgaXNfNDAsIGlzX3NnaSwgaXNfc3A7CiAJCWludCBwaHk7CkBAIC0xNTI5LDggKzE1MDksMTUgQEAKIAkJc2VyaWVzW2ldLlRyaWVzID0gcmF0ZXNbaV0uY291bnQ7CiAJCXNlcmllc1tpXS5DaFNlbCA9IGNvbW1vbi0+dHhfY2hhaW5tYXNrOwogCi0JCWlmIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykKKwkJaWYgKChzYy0+Y29uZmlnLmF0aF9hZ2dyX3Byb3QgJiYgYmZfaXNhZ2dyKGJmKSkgfHwKKwkJICAgIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfUlRTX0NUUykpIHsKIAkJCXNlcmllc1tpXS5SYXRlRmxhZ3MgfD0gQVRIOUtfUkFURVNFUklFU19SVFNfQ1RTOworCQkJZmxhZ3MgfD0gQVRIOUtfVFhERVNDX1JUU0VOQTsKKwkJfSBlbHNlIGlmIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ19VU0VfQ1RTX1BST1RFQ1QpIHsKKwkJCXNlcmllc1tpXS5SYXRlRmxhZ3MgfD0gQVRIOUtfUkFURVNFUklFU19SVFNfQ1RTOworCQkJZmxhZ3MgfD0gQVRIOUtfVFhERVNDX0NUU0VOQTsKKwkJfQorCiAJCWlmIChyYXRlc1tpXS5mbGFncyAmIElFRUU4MDIxMV9UWF9SQ180MF9NSFpfV0lEVEgpCiAJCQlzZXJpZXNbaV0uUmF0ZUZsYWdzIHw9IEFUSDlLX1JBVEVTRVJJRVNfMjA0MDsKIAkJaWYgKHJhdGVzW2ldLmZsYWdzICYgSUVFRTgwMjExX1RYX1JDX1NIT1JUX0dJKQpAQCAtMTU2OCw2ICsxNTU1LDE0IEBACiAJCQlwaHksIHJhdGUtPmJpdHJhdGUgKiAxMDAsIGJmLT5iZl9mcm1sZW4sIHJpeCwgaXNfc3ApOwogCX0KIAorCS8qIEZvciBBUjU0MTYgLSBSVFMgY2Fubm90IGJlIGZvbGxvd2VkIGJ5IGEgZnJhbWUgbGFyZ2VyIHRoYW4gOEsgKi8KKwlpZiAoYmZfaXNhZ2dyKGJmKSAmJiAoYmYtPmJmX2FsID4gc2MtPnNjX2FoLT5jYXBzLnJ0c19hZ2dyX2xpbWl0KSkKKwkJZmxhZ3MgJj0gfkFUSDlLX1RYREVTQ19SVFNFTkE7CisKKwkvKiBBVEg5S19UWERFU0NfUlRTRU5BIGFuZCBBVEg5S19UWERFU0NfQ1RTRU5BIGFyZSBtdXR1YWxseSBleGNsdXNpdmUuICovCisJaWYgKGZsYWdzICYgQVRIOUtfVFhERVNDX1JUU0VOQSkKKwkJZmxhZ3MgJj0gfkFUSDlLX1RYREVTQ19DVFNFTkE7CisKIAkvKiBzZXQgZHVyX3VwZGF0ZV9lbiBmb3IgbC1zaWcgY29tcHV0YXRpb24gZXhjZXB0IGZvciBQUy1Qb2xsIGZyYW1lcyAqLwogCWF0aDlrX2h3X3NldDExbl9yYXRlc2NlbmFyaW8oc2MtPnNjX2FoLCBiZi0+YmZfZGVzYywKIAkJCQkgICAgIGJmLT5iZl9sYXN0YmYtPmJmX2Rlc2MsCkBAIC0xNjQ4LDcgKzE2NDMsNyBAQAogCS8qIHRhZyBpZiB0aGlzIGlzIGEgbnVsbGZ1bmMgZnJhbWUgdG8gZW5hYmxlIFBTIHdoZW4gQVAgYWNrcyBpdCAqLwogCWlmIChpZWVlODAyMTFfaXNfbnVsbGZ1bmMoZmMpICYmIGllZWU4MDIxMV9oYXNfcG0oZmMpKSB7CiAJCWJmLT5iZl9pc251bGxmdW5jID0gdHJ1ZTsKLQkJc2MtPnNjX2ZsYWdzICY9IH5TQ19PUF9OVUxMRlVOQ19DT01QTEVURUQ7CisJCXNjLT5wc19mbGFncyAmPSB+UFNfTlVMTEZVTkNfQ09NUExFVEVEOwogCX0gZWxzZQogCQliZi0+YmZfaXNudWxsZnVuYyA9IGZhbHNlOwogCkBAIC0xODU4LDE1ICsxODUzLDE1IEBACiAJCXNrYl9wdWxsKHNrYiwgcGFkc2l6ZSk7CiAJfQogCi0JaWYgKHNjLT5zY19mbGFncyAmIFNDX09QX1dBSVRfRk9SX1RYX0FDSykgewotCQlzYy0+c2NfZmxhZ3MgJj0gflNDX09QX1dBSVRfRk9SX1RYX0FDSzsKKwlpZiAoc2MtPnBzX2ZsYWdzICYgUFNfV0FJVF9GT1JfVFhfQUNLKSB7CisJCXNjLT5wc19mbGFncyAmPSB+UFNfV0FJVF9GT1JfVFhfQUNLOwogCQlhdGhfcHJpbnQoY29tbW9uLCBBVEhfREJHX1BTLAogCQkJICAiR29pbmcgYmFjayB0byBzbGVlcCBhZnRlciBoYXZpbmcgIgotCQkJICAicmVjZWl2ZWQgVFggc3RhdHVzICgweCV4KVxuIiwKLQkJCXNjLT5zY19mbGFncyAmIChTQ19PUF9XQUlUX0ZPUl9CRUFDT04gfAotCQkJCQlTQ19PUF9XQUlUX0ZPUl9DQUIgfAotCQkJCQlTQ19PUF9XQUlUX0ZPUl9QU1BPTExfREFUQSB8Ci0JCQkJCVNDX09QX1dBSVRfRk9SX1RYX0FDSykpOworCQkJICAicmVjZWl2ZWQgVFggc3RhdHVzICgweCVseClcbiIsCisJCQlzYy0+cHNfZmxhZ3MgJiAoUFNfV0FJVF9GT1JfQkVBQ09OIHwKKwkJCQkJUFNfV0FJVF9GT1JfQ0FCIHwKKwkJCQkJUFNfV0FJVF9GT1JfUFNQT0xMX0RBVEEgfAorCQkJCQlQU19XQUlUX0ZPUl9UWF9BQ0spKTsKIAl9CiAKIAlpZiAodW5saWtlbHkodHhfaW5mby0+cGFkWzBdICYgQVRIX1RYX0lORk9fRlJBTUVfVFlQRV9JTlRFUk5BTCkpCkBAIC0yMDUzLDExICsyMDQ4LDEwIEBACiAJCSAqLwogCQlpZiAoYmYtPmJmX2lzbnVsbGZ1bmMgJiYKIAkJICAgIChkcy0+ZHNfdHhzdGF0LnRzX3N0YXR1cyAmIEFUSDlLX1RYX0FDS0VEKSkgewotCQkJaWYgKChzYy0+c2NfZmxhZ3MgJiBTQ19PUF9QU19FTkFCTEVEKSkgewotCQkJCXNjLT5wc19lbmFibGVkID0gdHJ1ZTsKLQkJCQlhdGg5a19od19zZXRyeGFib3J0KHNjLT5zY19haCwgMSk7Ci0JCQl9IGVsc2UKLQkJCQlzYy0+c2NfZmxhZ3MgfD0gU0NfT1BfTlVMTEZVTkNfQ09NUExFVEVEOworCQkJaWYgKChzYy0+cHNfZmxhZ3MgJiBQU19FTkFCTEVEKSkKKwkJCQlhdGg5a19lbmFibGVfcHMoc2MpOworCQkJZWxzZQorCQkJCXNjLT5wc19mbGFncyB8PSBQU19OVUxMRlVOQ19DT01QTEVURUQ7CiAJCX0KIAogCQkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL2RlYnVnLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvZGVidWcuaAppbmRleCBkNmI2ODVhLi44MjYzNjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvZGVidWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvZGVidWcuaApAQCAtNjUsMTEgKzY1LDExIEBACiAjZGVmaW5lIEFUSF9EQkdfREVGQVVMVCAoQVRIX0RCR19GQVRBTCkKIAogI2lmZGVmIENPTkZJR19BVEhfREVCVUcKLXZvaWQgYXRoX3ByaW50KHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sIGludCBkYmdfbWFzaywgY29uc3QgY2hhciAqZm10LCAuLi4pOwordm9pZCBhdGhfcHJpbnQoc3RydWN0IGF0aF9jb21tb24gKmNvbW1vbiwgaW50IGRiZ19tYXNrLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CiAjZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGF0aF9wcmludChzdHJ1Y3QgYXRoX2NvbW1vbiAqY29tbW9uLAotCQkJICAgICBpbnQgZGJnX21hc2ssCi0JCQkgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorc3RhdGljIGlubGluZSB2b2lkIF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKQorYXRoX3ByaW50KHN0cnVjdCBhdGhfY29tbW9uICpjb21tb24sIGludCBkYmdfbWFzaywgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiB9CiAjZW5kaWYgLyogQ09ORklHX0FUSF9ERUJVRyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2QuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC9yZWdkLmMKaW5kZXggMDM5YWM0OS4uMDRhYmQxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRoL3JlZ2QuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvcmVnZC5jCkBAIC0xMTAsOCArMTEwLDkgQEAKIAogc3RhdGljIGlubGluZSBib29sIGlzX3d3cl9za3UodTE2IHJlZ2QpCiB7Ci0JcmV0dXJuICgocmVnZCAmIFdPUkxEX1NLVV9NQVNLKSA9PSBXT1JMRF9TS1VfUFJFRklYKSB8fAotCQkocmVnZCA9PSBXT1JMRCk7CisJcmV0dXJuICgocmVnZCAmIENPVU5UUllfRVJEX0ZMQUcpICE9IENPVU5UUllfRVJEX0ZMQUcpICYmCisJCSgoKHJlZ2QgJiBXT1JMRF9TS1VfTUFTSykgPT0gV09STERfU0tVX1BSRUZJWCkgfHwKKwkJKHJlZ2QgPT0gV09STEQpKTsKIH0KIAogc3RhdGljIHUxNiBhdGhfcmVnZF9nZXRfZWVwcm9tUkQoc3RydWN0IGF0aF9yZWd1bGF0b3J5ICpyZWcpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbF9wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX3BjaS5jCmluZGV4IDkyZjg3ZmIuLjlhYjExOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsX3BjaS5jCkBAIC0zMSw3ICszMSw3IEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgiQXRtZWwgYXQ3NmM1MDYgUENJIHdpcmVsZXNzIGNhcmRzIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjYXJkX2lkc1tdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGNhcmRfaWRzKSA9IHsKIAl7IDB4MTExNCwgMHgwNTA2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCiAJeyAwLCB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL0tjb25maWcgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZwppbmRleCA2NGMxMmUxLi4wYTAwZDQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvS2NvbmZpZwpAQCAtNzgsMTEgKzc4LDExIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLSMgRGF0YSB0cmFuc2ZlcnMgdG8gdGhlIGRldmljZSB2aWEgUElPCi0jIFRoaXMgaXMgb25seSBuZWVkZWQgb24gUENNQ0lBIGFuZCBTRElPIGRldmljZXMuIEFsbCBvdGhlcnMgY2FuIGRvIERNQSBwcm9wZXJseS4KKyNEYXRhIHRyYW5zZmVycyB0byB0aGUgZGV2aWNlIHZpYSBQSU8uIFdlIHdhbnQgaXQgYXMgYSBmYWxsYmFjayBldmVuCisjIGlmIHdlIGNhbiBkbyBETUEuCiBjb25maWcgQjQzX1BJTwogCWJvb2wKLQlkZXBlbmRzIG9uIEI0MyAmJiAoQjQzX1NESU8gfHwgQjQzX1BDTUNJQSB8fCBCNDNfRk9SQ0VfUElPKQorCWRlcGVuZHMgb24gQjQzCiAJc2VsZWN0IFNTQl9CTE9DS0lPCiAJZGVmYXVsdCB5CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9NYWtlZmlsZQppbmRleCA4NDc3MmEyLi41ZTgzYjZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL01ha2VmaWxlCkBAIC0xMiw3ICsxMiw3IEBACiBiNDMteQkJCQkrPSBsby5vCiBiNDMteQkJCQkrPSB3YS5vCiBiNDMteQkJCQkrPSBkbWEubwotYjQzLSQoQ09ORklHX0I0M19QSU8pCQkrPSBwaW8ubworYjQzLXkJCQkJKz0gcGlvLm8KIGI0My15CQkJCSs9IHJma2lsbC5vCiBiNDMtJChDT05GSUdfQjQzX0xFRFMpCQkrPSBsZWRzLm8KIGI0My0kKENPTkZJR19CNDNfUENNQ0lBKQkrPSBwY21jaWEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2I0My5oCmluZGV4IGM0ODRjYzIuLmI4ODA3ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9iNDMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvYjQzLmgKQEAgLTI1NCw2ICsyNTQsMTQgQEAKICNkZWZpbmUgQjQzX1NITV9TSF9NQVhCRlJBTUVTCQkweDAwODAJLyogTWF4aW11bSBudW1iZXIgb2YgZnJhbWVzIGluIGEgYnVyc3QgKi8KICNkZWZpbmUgQjQzX1NITV9TSF9TUFVXS1VQCQkweDAwOTQJLyogcHJlLXdha2V1cCBmb3Igc3ludGggUFUgaW4gdXMgKi8KICNkZWZpbmUgQjQzX1NITV9TSF9QUkVUQlRUCQkweDAwOTYJLyogcHJlLVRCVFQgaW4gdXMgKi8KKy8qIFNITV9TSEFSRUQgdHggaXEgd29ya2Fyb3VuZHMgKi8KKyNkZWZpbmUgQjQzX1NITV9TSF9OUEhZX1RYSVFXMAkJMHgwNzAwCisjZGVmaW5lIEI0M19TSE1fU0hfTlBIWV9UWElRVzEJCTB4MDcwMgorI2RlZmluZSBCNDNfU0hNX1NIX05QSFlfVFhJUVcyCQkweDA3MDQKKyNkZWZpbmUgQjQzX1NITV9TSF9OUEhZX1RYSVFXMwkJMHgwNzA2CisvKiBTSE1fU0hBUkVEIHR4IHB3ciBjdHJsICovCisjZGVmaW5lIEI0M19TSE1fU0hfTlBIWV9UWFBXUl9JTkRYMAkweDA3MDgKKyNkZWZpbmUgQjQzX1NITV9TSF9OUEhZX1RYUFdSX0lORFgxCTB4MDcwRQogCiAvKiBTSE1fU0NSQVRDSCBvZmZzZXRzICovCiAjZGVmaW5lIEI0M19TSE1fU0NfTUlOQ09OVAkJMHgwMDAzCS8qIE1pbmltdW0gY29udGVudGlvbiB3aW5kb3cgKi8KQEAgLTY5NCw2ICs3MDIsNyBAQAogCWJvb2wgcmFkaW9faHdfZW5hYmxlOwkvKiBzYXZlZCBzdGF0ZSBvZiByYWRpbyBoYXJkd2FyZSBlbmFibGVkIHN0YXRlICovCiAJYm9vbCBxb3NfZW5hYmxlZDsJCS8qIFRSVUUsIGlmIFFvUyBpcyB1c2VkLiAqLwogCWJvb2wgaHdjcnlwdG9fZW5hYmxlZDsJCS8qIFRSVUUsIGlmIEhXIGNyeXB0byBhY2NlbGVyYXRpb24gaXMgZW5hYmxlZC4gKi8KKwlib29sIHVzZV9waW87CQkJLyogVFJVRSBpZiBuZXh0IGluaXQgc2hvdWxkIHVzZSBQSU8gKi8KIAogCS8qIFBIWS9SYWRpbyBkZXZpY2UuICovCiAJc3RydWN0IGI0M19waHkgcGh5OwpAQCAtODIyLDExICs4MzEsOSBAQAogCS8qIFRoZSBkZXZpY2UgTEVEcy4gKi8KIAlzdHJ1Y3QgYjQzX2xlZHMgbGVkczsKIAotI2lmZGVmIENPTkZJR19CNDNfUElPCiAJLyogS21hbGxvYydlZCBzY3JhdGNoIHNwYWNlIGZvciBQSU8gVFgvUlguIFByb3RlY3RlZCBieSB3bC0+bXV0ZXguICovCiAJdTggcGlvX3NjcmF0Y2hzcGFjZVsxMTBdIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDgpKSk7CiAJdTggcGlvX3RhaWxzcGFjZVs0XSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyg4KSkpOwotI2VuZGlmIC8qIENPTkZJR19CNDNfUElPICovCiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBiNDNfd2wgKmh3X3RvX2I0M193bChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKQEAgLTg3NywyMCArODg0LDE1IEBACiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBiNDNfdXNpbmdfcGlvX3RyYW5zZmVycyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCiB7Ci0jaWZkZWYgQ09ORklHX0I0M19QSU8KIAlyZXR1cm4gZGV2LT5fX3VzaW5nX3Bpb190cmFuc2ZlcnM7Ci0jZWxzZQotCXJldHVybiAwOwotI2VuZGlmCiB9CiAKICNpZmRlZiBDT05GSUdfQjQzX0ZPUkNFX1BJTwotIyBkZWZpbmUgQjQzX0ZPUkNFX1BJTwkxCisjIGRlZmluZSBCNDNfUElPX0RFRkFVTFQgMQogI2Vsc2UKLSMgZGVmaW5lIEI0M19GT1JDRV9QSU8JMAorIyBkZWZpbmUgQjQzX1BJT19ERUZBVUxUIDAKICNlbmRpZgogCi0KIC8qIE1lc3NhZ2UgcHJpbnRpbmcgKi8KIHZvaWQgYjQzaW5mbyhzdHJ1Y3QgYjQzX3dsICp3bCwgY29uc3QgY2hhciAqZm10LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdChwcmludGYsIDIsIDMpKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmMKaW5kZXggODhkMWZkMC4uYmU3YWJmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuYwpAQCAtMTM2OSw3ICsxMzY5LDYgQEAKIAkJYjQzZXJyKGRldi0+d2wsICJETUEgdHggbWFwcGluZyBmYWlsdXJlXG4iKTsKIAkJZ290byBvdXQ7CiAJfQotCXJpbmctPm5yX3R4X3BhY2tldHMrKzsKIAlpZiAoKGZyZWVfc2xvdHMocmluZykgPCBUWF9TTE9UU19QRVJfRlJBTUUpIHx8CiAJICAgIHNob3VsZF9pbmplY3Rfb3ZlcmZsb3cocmluZykpIHsKIAkJLyogVGhpcyBUWCByaW5nIGlzIGZ1bGwuICovCkBAIC0xNTAwLDIyICsxNDk5LDYgQEAKIAl9CiB9CiAKLXZvaWQgYjQzX2RtYV9nZXRfdHhfc3RhdHMoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKLXsKLQljb25zdCBpbnQgbnJfcXVldWVzID0gZGV2LT53bC0+aHctPnF1ZXVlczsKLQlzdHJ1Y3QgYjQzX2RtYXJpbmcgKnJpbmc7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcXVldWVzOyBpKyspIHsKLQkJcmluZyA9IHNlbGVjdF9yaW5nX2J5X3ByaW9yaXR5KGRldiwgaSk7Ci0KLQkJc3RhdHNbaV0ubGVuID0gcmluZy0+dXNlZF9zbG90cyAvIFRYX1NMT1RTX1BFUl9GUkFNRTsKLQkJc3RhdHNbaV0ubGltaXQgPSByaW5nLT5ucl9zbG90cyAvIFRYX1NMT1RTX1BFUl9GUkFNRTsKLQkJc3RhdHNbaV0uY291bnQgPSByaW5nLT5ucl90eF9wYWNrZXRzOwotCX0KLX0KLQogc3RhdGljIHZvaWQgZG1hX3J4KHN0cnVjdCBiNDNfZG1hcmluZyAqcmluZywgaW50ICpzbG90KQogewogCWNvbnN0IHN0cnVjdCBiNDNfZG1hX29wcyAqb3BzID0gcmluZy0+b3BzOwpAQCAtMTY1Myw3ICsxNjM2LDYgQEAKIAliNDNfcG93ZXJfc2F2aW5nX2N0bF9iaXRzKGRldiwgMCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfQjQzX1BJTwogc3RhdGljIHZvaWQgZGlyZWN0X2ZpZm9fcngoc3RydWN0IGI0M193bGRldiAqZGV2LCBlbnVtIGI0M19kbWF0eXBlIHR5cGUsCiAJCQkgICB1MTYgbW1pb19iYXNlLCBib29sIGVuYWJsZSkKIHsKQEAgLTE2ODcsNCArMTY2OSwzIEBACiAJbW1pb19iYXNlID0gYjQzX2RtYWNvbnRyb2xsZXJfYmFzZSh0eXBlLCBlbmdpbmVfaW5kZXgpOwogCWRpcmVjdF9maWZvX3J4KGRldiwgdHlwZSwgbW1pb19iYXNlLCBlbmFibGUpOwogfQotI2VuZGlmIC8qIENPTkZJR19CNDNfUElPICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvZG1hLmgKaW5kZXggZjdhYjM3Yy4uZGM5MTk0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL2RtYS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9kbWEuaApAQCAtMjI4LDggKzIyOCw2IEBACiAJaW50IHVzZWRfc2xvdHM7CiAJLyogQ3VycmVudGx5IHVzZWQgc2xvdCBpbiB0aGUgcmluZy4gKi8KIAlpbnQgY3VycmVudF9zbG90OwotCS8qIFRvdGFsIG51bWJlciBvZiBwYWNrZXRzIHNlbnQuIFN0YXRpc3RpY3Mgb25seS4gKi8KLQl1bnNpZ25lZCBpbnQgbnJfdHhfcGFja2V0czsKIAkvKiBGcmFtZW9mZnNldCBpbiBvY3RldHMuICovCiAJdTMyIGZyYW1lb2Zmc2V0OwogCS8qIERlc2NyaXB0b3IgYnVmZmVyIHNpemUuICovCkBAIC0yNzgsOSArMjc2LDYgQEAKIHZvaWQgYjQzX2RtYV90eF9zdXNwZW5kKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CiB2b2lkIGI0M19kbWFfdHhfcmVzdW1lKHN0cnVjdCBiNDNfd2xkZXYgKmRldik7CiAKLXZvaWQgYjQzX2RtYV9nZXRfdHhfc3RhdHMoc3RydWN0IGI0M193bGRldiAqZGV2LAotCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cyk7Ci0KIGludCBiNDNfZG1hX3R4KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKIAkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIGI0M19kbWFfaGFuZGxlX3R4c3RhdHVzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCmluZGV4IDQ5MGZiNDVkLi4xNTIxYjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9tYWluLmMKQEAgLTY3LDcgKzY3LDEyIEBACiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIE1PRFVMRV9GSVJNV0FSRShCNDNfU1VQUE9SVEVEX0ZJUk1XQVJFX0lEKTsKLQorTU9EVUxFX0ZJUk1XQVJFKCJiNDMvdWNvZGUxMS5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJiNDMvdWNvZGUxMy5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJiNDMvdWNvZGUxNC5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJiNDMvdWNvZGUxNS5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJiNDMvdWNvZGU1LmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoImI0My91Y29kZTkuZnciKTsKIAogc3RhdGljIGludCBtb2RwYXJhbV9iYWRfZnJhbWVzX3ByZWVtcHQ7CiBtb2R1bGVfcGFyYW1fbmFtZWQoYmFkX2ZyYW1lc19wcmVlbXB0LCBtb2RwYXJhbV9iYWRfZnJhbWVzX3ByZWVtcHQsIGludCwgMDQ0NCk7CkBAIC0xMDIsNiArMTA3LDkgQEAKIG1vZHVsZV9wYXJhbV9uYW1lZCh2ZXJib3NlLCBiNDNfbW9kcGFyYW1fdmVyYm9zZSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModmVyYm9zZSwgIkxvZyBtZXNzYWdlIHZlcmJvc2l0eTogMD1lcnJvciwgMT13YXJuLCAyPWluZm8oZGVmYXVsdCksIDM9ZGVidWciKTsKIAoraW50IGI0M19tb2RwYXJhbV9waW8gPSBCNDNfUElPX0RFRkFVTFQ7Cittb2R1bGVfcGFyYW1fbmFtZWQocGlvLCBiNDNfbW9kcGFyYW1fcGlvLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhwaW8sICJVc2UgUElPIGFjY2Vzc2VzIGJ5IGRlZmF1bHQ6IDA9RE1BLCAxPVBJTyIpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNzYl9kZXZpY2VfaWQgYjQzX3NzYl90YmxbXSA9IHsKIAlTU0JfREVWSUNFKFNTQl9WRU5ET1JfQlJPQURDT00sIFNTQl9ERVZfODAyMTEsIDUpLApAQCAtMTEwLDYgKzExOCw3IEBACiAJU1NCX0RFVklDRShTU0JfVkVORE9SX0JST0FEQ09NLCBTU0JfREVWXzgwMjExLCA5KSwKIAlTU0JfREVWSUNFKFNTQl9WRU5ET1JfQlJPQURDT00sIFNTQl9ERVZfODAyMTEsIDEwKSwKIAlTU0JfREVWSUNFKFNTQl9WRU5ET1JfQlJPQURDT00sIFNTQl9ERVZfODAyMTEsIDExKSwKKwlTU0JfREVWSUNFKFNTQl9WRU5ET1JfQlJPQURDT00sIFNTQl9ERVZfODAyMTEsIDEyKSwKIAlTU0JfREVWSUNFKFNTQl9WRU5ET1JfQlJPQURDT00sIFNTQl9ERVZfODAyMTEsIDEzKSwKIAlTU0JfREVWSUNFKFNTQl9WRU5ET1JfQlJPQURDT00sIFNTQl9ERVZfODAyMTEsIDE1KSwKIAlTU0JfREVWSUNFKFNTQl9WRU5ET1JfQlJPQURDT00sIFNTQl9ERVZfODAyMTEsIDE2KSwKQEAgLTg0Miw4ICs4NTEsMTAgQEAKIH0KIAogc3RhdGljIHZvaWQgYjQzX29wX3VwZGF0ZV90a2lwX2tleShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCXN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsIGNvbnN0IHU4ICphZGRyLAotCQkJdTMyIGl2MzIsIHUxNiAqcGhhc2Uxa2V5KQorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAorCQkJCSAgIHUzMiBpdjMyLCB1MTYgKnBoYXNlMWtleSkKIHsKIAlzdHJ1Y3QgYjQzX3dsICp3bCA9IGh3X3RvX2I0M193bChodyk7CiAJc3RydWN0IGI0M193bGRldiAqZGV2OwpAQCAtODUyLDE5ICs4NjMsMTkgQEAKIAlpZiAoQjQzX1dBUk5fT04oIW1vZHBhcmFtX2h3dGtpcCkpCiAJCXJldHVybjsKIAotCW11dGV4X2xvY2soJndsLT5tdXRleCk7Ci0KKwkvKiBUaGlzIGlzIG9ubHkgY2FsbGVkIGZyb20gdGhlIFJYIHBhdGggdGhyb3VnaCBtYWM4MDIxMSwgd2hlcmUKKwkgKiBvdXIgbXV0ZXggaXMgYWxyZWFkeSBsb2NrZWQuICovCisJQjQzX1dBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmd2wtPm11dGV4KSk7CiAJZGV2ID0gd2wtPmN1cnJlbnRfZGV2OwotCWlmICghZGV2IHx8IGI0M19zdGF0dXMoZGV2KSA8IEI0M19TVEFUX0lOSVRJQUxJWkVEKQotCQlnb3RvIG91dF91bmxvY2s7CisJQjQzX1dBUk5fT04oIWRldiB8fCBiNDNfc3RhdHVzKGRldikgPCBCNDNfU1RBVF9JTklUSUFMSVpFRCk7CiAKIAlrZXltYWNfd3JpdGUoZGV2LCBpbmRleCwgTlVMTCk7CS8qIEZpcnN0IHplcm8gb3V0IG1hYyB0byBhdm9pZCByYWNlICovCiAKIAlyeF90a2lwX3BoYXNlMV93cml0ZShkZXYsIGluZGV4LCBpdjMyLCBwaGFzZTFrZXkpOwotCWtleW1hY193cml0ZShkZXYsIGluZGV4LCBhZGRyKTsKLQotb3V0X3VubG9jazoKLQltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisJLyogb25seSBwYWlyd2lzZSBUS0lQIGtleXMgYXJlIHN1cHBvcnRlZCByaWdodCBub3cgKi8KKwlpZiAoV0FSTl9PTighc3RhKSkKKwkJcmV0dXJuOworCWtleW1hY193cml0ZShkZXYsIGluZGV4LCBzdGEtPmFkZHIpOwogfQogCiBzdGF0aWMgdm9pZCBkb19rZXlfd3JpdGUoc3RydWN0IGI0M193bGRldiAqZGV2LApAQCAtMTc5Myw4ICsxODA0LDkgQEAKIAkJCSAgICAgICBkbWFfcmVhc29uWzRdLCBkbWFfcmVhc29uWzVdKTsKIAkJCWI0M2VycihkZXYtPndsLCAiVGhpcyBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydCBETUEgIgogCQkJICAgICAgICJvbiB5b3VyIHN5c3RlbS4gUGxlYXNlIHVzZSBQSU8gaW5zdGVhZC5cbiIpOwotCQkJYjQzZXJyKGRldi0+d2wsICJDT05GSUdfQjQzX0ZPUkNFX1BJTyBtdXN0IGJlIHNldCBpbiAiCi0JCQkgICAgICAgInlvdXIga2VybmVsIGNvbmZpZ3VyYXRpb24uXG4iKTsKKwkJCS8qIEZhbGwgYmFjayB0byBQSU8gdHJhbnNmZXJzIGlmIHdlIGdldCBmYXRhbCBETUEgZXJyb3JzISAqLworCQkJZGV2LT51c2VfcGlvID0gMTsKKwkJCWI0M19jb250cm9sbGVyX3Jlc3RhcnQoZGV2LCAiRE1BIGVycm9yIik7CiAJCQlyZXR1cm47CiAJCX0KIAkJaWYgKG1lcmdlZF9kbWFfcmVhc29uICYgQjQzX0RNQUlSUV9OT05GQVRBTE1BU0spIHsKQEAgLTMzNDUsMjcgKzMzNTcsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgYjQzX29wX2dldF90eF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKLXsKLQlzdHJ1Y3QgYjQzX3dsICp3bCA9IGh3X3RvX2I0M193bChodyk7Ci0Jc3RydWN0IGI0M193bGRldiAqZGV2OwotCWludCBlcnIgPSAtRU5PREVWOwotCi0JbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQlkZXYgPSB3bC0+Y3VycmVudF9kZXY7Ci0JaWYgKGRldiAmJiBiNDNfc3RhdHVzKGRldikgPj0gQjQzX1NUQVRfU1RBUlRFRCkgewotCQlpZiAoYjQzX3VzaW5nX3Bpb190cmFuc2ZlcnMoZGV2KSkKLQkJCWI0M19waW9fZ2V0X3R4X3N0YXRzKGRldiwgc3RhdHMpOwotCQllbHNlCi0JCQliNDNfZG1hX2dldF90eF9zdGF0cyhkZXYsIHN0YXRzKTsKLQkJZXJyID0gMDsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwotCi0JcmV0dXJuIGVycjsKLX0KLQogc3RhdGljIGludCBiNDNfb3BfZ2V0X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKIHsKQEAgLTM1NjksNiArMzU2MCwxMiBAQAogCWRldiA9IHdsLT5jdXJyZW50X2RldjsKIAlwaHkgPSAmZGV2LT5waHk7CiAKKwlpZiAoY29uZl9pc19odChjb25mKSkKKwkJcGh5LT5pc180MG1oeiA9CisJCQkoY29uZl9pc19odDQwX21pbnVzKGNvbmYpIHx8IGNvbmZfaXNfaHQ0MF9wbHVzKGNvbmYpKTsKKwllbHNlCisJCXBoeS0+aXNfNDBtaHogPSBmYWxzZTsKKwogCWI0M19tYWNfc3VzcGVuZChkZXYpOwogCiAJaWYgKGNoYW5nZWQgJiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUkVUUllfTElNSVRTKQpAQCAtMzk3MCw2ICszOTY3LDcgQEAKIAl9CiAKIAkvKiBXZSBhcmUgcmVhZHkgdG8gcnVuLiAqLworCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhkZXYtPndsLT5odyk7CiAJYjQzX3NldF9zdGF0dXMoZGV2LCBCNDNfU1RBVF9TVEFSVEVEKTsKIAogCS8qIFN0YXJ0IGRhdGEgZmxvdyAoVFgvUlgpLiAqLwpAQCAtNDM2MCw3ICs0MzU4LDcgQEAKIAogCWlmICgoZGV2LT5kZXYtPmJ1cy0+YnVzdHlwZSA9PSBTU0JfQlVTVFlQRV9QQ01DSUEpIHx8CiAJICAgIChkZXYtPmRldi0+YnVzLT5idXN0eXBlID09IFNTQl9CVVNUWVBFX1NESU8pIHx8Ci0JICAgIEI0M19GT1JDRV9QSU8pIHsKKwkgICAgZGV2LT51c2VfcGlvKSB7CiAJCWRldi0+X191c2luZ19waW9fdHJhbnNmZXJzID0gMTsKIAkJZXJyID0gYjQzX3Bpb19pbml0KGRldik7CiAJfSBlbHNlIHsKQEAgLTQzNzksOCArNDM3Nyw2IEBACiAKIAlpZWVlODAyMTFfd2FrZV9xdWV1ZXMoZGV2LT53bC0+aHcpOwogCi0JaWVlZTgwMjExX3dha2VfcXVldWVzKGRldi0+d2wtPmh3KTsKLQogCWI0M19zZXRfc3RhdHVzKGRldiwgQjQzX1NUQVRfSU5JVElBTElaRUQpOwogCiBvdXQ6CkBAIC00Mzk1LDcgKzQzOTEsNyBAQAogfQogCiBzdGF0aWMgaW50IGI0M19vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwogCXN0cnVjdCBiNDNfd2xkZXYgKmRldjsKQEAgLTQ0MDMsMjQgKzQzOTksMjQgQEAKIAogCS8qIFRPRE86IGFsbG93IFdEUy9BUCBkZXZpY2VzIHRvIGNvZXhpc3QgKi8KIAotCWlmIChjb25mLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCi0JICAgIGNvbmYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCAmJgotCSAgICBjb25mLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKLQkgICAgY29uZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9XRFMgJiYKLQkgICAgY29uZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BREhPQykKKwlpZiAodmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCisJICAgIHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UICYmCisJICAgIHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCisJICAgIHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9XRFMgJiYKKwkgICAgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwogCWlmICh3bC0+b3BlcmF0aW5nKQogCQlnb3RvIG91dF9tdXRleF91bmxvY2s7CiAKLQliNDNkYmcod2wsICJBZGRpbmcgSW50ZXJmYWNlIHR5cGUgJWRcbiIsIGNvbmYtPnR5cGUpOworCWI0M2RiZyh3bCwgIkFkZGluZyBJbnRlcmZhY2UgdHlwZSAlZFxuIiwgdmlmLT50eXBlKTsKIAogCWRldiA9IHdsLT5jdXJyZW50X2RldjsKIAl3bC0+b3BlcmF0aW5nID0gMTsKLQl3bC0+dmlmID0gY29uZi0+dmlmOwotCXdsLT5pZl90eXBlID0gY29uZi0+dHlwZTsKLQltZW1jcHkod2wtPm1hY19hZGRyLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCXdsLT52aWYgPSB2aWY7CisJd2wtPmlmX3R5cGUgPSB2aWYtPnR5cGU7CisJbWVtY3B5KHdsLT5tYWNfYWRkciwgdmlmLT5hZGRyLCBFVEhfQUxFTik7CiAKIAliNDNfYWRqdXN0X29wbW9kZShkZXYpOwogCWI0M19zZXRfcHJldGJ0dChkZXYpOwpAQCAtNDQzNSwxNyArNDQzMSwxNyBAQAogfQogCiBzdGF0aWMgdm9pZCBiNDNfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IGI0M193bCAqd2wgPSBod190b19iNDNfd2woaHcpOwogCXN0cnVjdCBiNDNfd2xkZXYgKmRldiA9IHdsLT5jdXJyZW50X2RldjsKIAotCWI0M2RiZyh3bCwgIlJlbW92aW5nIEludGVyZmFjZSB0eXBlICVkXG4iLCBjb25mLT50eXBlKTsKKwliNDNkYmcod2wsICJSZW1vdmluZyBJbnRlcmZhY2UgdHlwZSAlZFxuIiwgdmlmLT50eXBlKTsKIAogCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAKIAlCNDNfV0FSTl9PTighd2wtPm9wZXJhdGluZyk7Ci0JQjQzX1dBUk5fT04od2wtPnZpZiAhPSBjb25mLT52aWYpOworCUI0M19XQVJOX09OKHdsLT52aWYgIT0gdmlmKTsKIAl3bC0+dmlmID0gTlVMTDsKIAogCXdsLT5vcGVyYXRpbmcgPSAwOwpAQCAtNDU4Niw3ICs0NTgyLDYgQEAKIAkuc2V0X2tleQkJPSBiNDNfb3Bfc2V0X2tleSwKIAkudXBkYXRlX3RraXBfa2V5CT0gYjQzX29wX3VwZGF0ZV90a2lwX2tleSwKIAkuZ2V0X3N0YXRzCQk9IGI0M19vcF9nZXRfc3RhdHMsCi0JLmdldF90eF9zdGF0cwkJPSBiNDNfb3BfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmCQk9IGI0M19vcF9nZXRfdHNmLAogCS5zZXRfdHNmCQk9IGI0M19vcF9zZXRfdHNmLAogCS5zdGFydAkJCT0gYjQzX29wX3N0YXJ0LApAQCAtNDgzMCw2ICs0ODI1LDcgQEAKIAlpZiAoIXdsZGV2KQogCQlnb3RvIG91dDsKIAorCXdsZGV2LT51c2VfcGlvID0gYjQzX21vZHBhcmFtX3BpbzsKIAl3bGRldi0+ZGV2ID0gZGV2OwogCXdsZGV2LT53bCA9IHdsOwogCWI0M19zZXRfc3RhdHVzKHdsZGV2LCBCNDNfU1RBVF9VTklOSVQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfY29tbW9uLmMKaW5kZXggNzViMjZlMS4uOGY3ZDdlZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2NvbW1vbi5jCkBAIC00MjEsMyArNDIxLDQ4IEBACiB7CiAJYjQzX3dyaXRlMTYoZGV2LCBCNDNfTU1JT19QSFkwLCBvbiA/IDAgOiAweEY0KTsKIH0KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvQ29yZGljICovCitzdHJ1Y3QgYjQzX2MzMiBiNDNfY29yZGljKGludCB0aGV0YSkKK3sKKwl1MzIgYXJjdGdbXSA9IHsgMjk0OTEyMCwgMTc0MDk2NywgOTE5ODc5LCA0NjY5NDUsIDIzNDM3OSwgMTE3MzA0LAorCQkgICAgICA1ODY2NiwgMjkzMzUsIDE0NjY4LCA3MzM0LCAzNjY3LCAxODMzLCA5MTcsIDQ1OCwKKwkJICAgICAgMjI5LCAxMTUsIDU3LCAyOSwgfTsKKwl1OCBpOworCXMzMiB0bXA7CisJczggc2lnbnggPSAxOworCXUzMiBhbmdsZSA9IDA7CisJc3RydWN0IGI0M19jMzIgcmV0ID0geyAuaSA9IDM5Nzk3LCAucSA9IDAsIH07CisKKwl3aGlsZSAodGhldGEgPiAoMTgwIDw8IDE2KSkKKwkJdGhldGEgLT0gKDM2MCA8PCAxNik7CisJd2hpbGUgKHRoZXRhIDwgLSgxODAgPDwgMTYpKQorCQl0aGV0YSArPSAoMzYwIDw8IDE2KTsKKworCWlmICh0aGV0YSA+ICg5MCA8PCAxNikpIHsKKwkJdGhldGEgLT0gKDE4MCA8PCAxNik7CisJCXNpZ254ID0gLTE7CisJfSBlbHNlIGlmICh0aGV0YSA8IC0oOTAgPDwgMTYpKSB7CisJCXRoZXRhICs9ICgxODAgPDwgMTYpOworCQlzaWdueCA9IC0xOworCX0KKworCWZvciAoaSA9IDA7IGkgPD0gMTc7IGkrKykgeworCQlpZiAodGhldGEgPiBhbmdsZSkgeworCQkJdG1wID0gcmV0LmkgLSAocmV0LnEgPj4gaSk7CisJCQlyZXQucSArPSByZXQuaSA+PiBpOworCQkJcmV0LmkgPSB0bXA7CisJCQlhbmdsZSArPSBhcmN0Z1tpXTsKKwkJfSBlbHNlIHsKKwkJCXRtcCA9IHJldC5pICsgKHJldC5xID4+IGkpOworCQkJcmV0LnEgLT0gcmV0LmkgPj4gaTsKKwkJCXJldC5pID0gdG1wOworCQkJYW5nbGUgLT0gYXJjdGdbaV07CisJCX0KKwl9CisKKwlyZXQuaSAqPSBzaWdueDsKKwlyZXQucSAqPSBzaWdueDsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9jb21tb24uaAppbmRleCA5ZWRkNGU4Li5iZDQ4MGI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfY29tbW9uLmgKQEAgLTUsNiArNSwxMiBAQAogCiBzdHJ1Y3QgYjQzX3dsZGV2OwogCisvKiBDb21wbGV4IG51bWJlciB1c2luZyAyIDMyLWJpdCBzaWduZWQgaW50ZWdlcnMgKi8KK3N0cnVjdCBiNDNfYzMyIHsgczMyIGksIHE7IH07CisKKyNkZWZpbmUgQ09SRElDX0NPTlZFUlQodmFsdWUpCSgoKHZhbHVlKSA+PSAwKSA/IFwKKwkJCQkgKCgoKHZhbHVlKSA+PiAxNSkgKyAxKSA+PiAxKSA6IFwKKwkJCQkgLSgoKCgtKHZhbHVlKSkgPj4gMTUpICsgMSkgPj4gMSkpCiAKIC8qIFBIWSByZWdpc3RlciByb3V0aW5nIGJpdHMgKi8KICNkZWZpbmUgQjQzX1BIWVJPVVRFCQkJMHgwQzAwIC8qIFBIWSByZWdpc3RlciByb3V0aW5nIGJpdHMgbWFzayAqLwpAQCAtMjEyLDYgKzIxOCw5IEBACiAJYm9vbCBzdXBwb3J0c18yZ2h6OwogCWJvb2wgc3VwcG9ydHNfNWdoejsKIAorCS8qIEhUIGluZm8gKi8KKwlib29sIGlzXzQwbWh6OworCiAJLyogR01PREUgYml0IGVuYWJsZWQ/ICovCiAJYm9vbCBnbW9kZTsKIApAQCAtNDE4LDUgKzQyNyw2IEBACiAgKi8KIHZvaWQgYjQzX3BoeW9wX3N3aXRjaF9hbmFsb2dfZ2VuZXJpYyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGJvb2wgb24pOwogCitzdHJ1Y3QgYjQzX2MzMiBiNDNfY29yZGljKGludCB0aGV0YSk7CiAKICNlbmRpZiAvKiBMSU5VWF9CNDNfUEhZX0NPTU1PTl9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9scC5jCmluZGV4IDNlMDQ2ZWMuLjE4NTIxOWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbHAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X2xwLmMKQEAgLTgwLDYgKzgwLDcgQEAKIAlkZXYtPnBoeS5scCA9IE5VTEw7CiB9CiAKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL0xQL1JlYWRCYW5kU3JvbSAqLwogc3RhdGljIHZvaWQgbHBwaHlfcmVhZF9iYW5kX3Nwcm9tKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKIHsKIAlzdHJ1Y3QgYjQzX3BoeV9scCAqbHBwaHkgPSBkZXYtPnBoeS5scDsKQEAgLTEwMSw2ICsxMDIsMTIgQEAKIAkJbWF4cHdyID0gYnVzLT5zcHJvbS5tYXhwd3JfYmc7CiAJCWxwcGh5LT5tYXhfdHhfcHdyX21lZF9iYW5kID0gbWF4cHdyOwogCQljY2twbyA9IGJ1cy0+c3Byb20uY2NrMmdwbzsKKwkJLyoKKwkJICogV2UgZG9uJ3QgcmVhZCBTUFJPTSdzIG9wbyBhcyBzcGVjcyBzYXkuIE9uIHJldjggU1BST01zCisJCSAqIG9wbyA9PSBvZmRtMmdwbyBhbmQgd2UgZG9uJ3Qga25vdyBhbnkgU1NCIHdpdGggTFAtUEhZCisJCSAqIGFuZCBTUFJPTSByZXYgYmVsb3cgOC4KKwkJICovCisJCUI0M19XQVJOX09OKGJ1cy0+c3Byb20ucmV2aXNpb24gPCA4KTsKIAkJb2ZkbXBvID0gYnVzLT5zcHJvbS5vZmRtMmdwbzsKIAkJaWYgKGNja3BvKSB7CiAJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CkBAIC0xNzAzLDE5ICsxNzEwLDYgQEAKIAkuYzAgPSAwLAogfTsKIAotc3RhdGljIHU4IGxwcGh5X25iaXRzKHMzMiB2YWwpCi17Ci0JdTMyIHRtcCA9IGFicyh2YWwpOwotCXU4IG5iaXRzID0gMDsKLQotCXdoaWxlICh0bXAgIT0gMCkgewotCQluYml0cysrOwotCQl0bXAgPj49IDE7Ci0JfQotCi0JcmV0dXJuIG5iaXRzOwotfQotCiBzdGF0aWMgaW50IGxwcGh5X2NhbGNfcnhfaXFfY29tcChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiBzYW1wbGVzKQogewogCXN0cnVjdCBscHBoeV9pcV9lc3QgaXFfZXN0OwpAQCAtMTc0Miw4ICsxNzM2LDggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcHJvZF9tc2IgPSBscHBoeV9uYml0cyhwcm9kKTsKLQlxX21zYiA9IGxwcGh5X25iaXRzKHFwd3IpOworCXByb2RfbXNiID0gZmxzKGFicyhwcm9kKSk7CisJcV9tc2IgPSBmbHMoYWJzKHFwd3IpKTsKIAl0bXAxID0gcHJvZF9tc2IgLSAyMDsKIAogCWlmICh0bXAxID49IDApIHsKQEAgLTE3NzMsNDcgKzE3NjcsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qIENvbXBsZXggbnVtYmVyIHVzaW5nIDIgMzItYml0IHNpZ25lZCBpbnRlZ2VycyAqLwotdHlwZWRlZiBzdHJ1Y3Qge3MzMiBpLCBxO30gbHBwaHlfYzMyOwotCi1zdGF0aWMgbHBwaHlfYzMyIGxwcGh5X2NvcmRpYyhpbnQgdGhldGEpCi17Ci0JdTMyIGFyY3RnW10gPSB7IDI5NDkxMjAsIDE3NDA5NjcsIDkxOTg3OSwgNDY2OTQ1LCAyMzQzNzksIDExNzMwNCwKLQkJICAgICAgNTg2NjYsIDI5MzM1LCAxNDY2OCwgNzMzNCwgMzY2NywgMTgzMywgOTE3LCA0NTgsCi0JCSAgICAgIDIyOSwgMTE1LCA1NywgMjksIH07Ci0JaW50IGksIHRtcCwgc2lnbnggPSAxLCBhbmdsZSA9IDA7Ci0JbHBwaHlfYzMyIHJldCA9IHsgLmkgPSAzOTc5NywgLnEgPSAwLCB9OwotCi0JdGhldGEgPSBjbGFtcF90KGludCwgdGhldGEsIC0xODAsIDE4MCk7Ci0KLQlpZiAodGhldGEgPiA5MCkgewotCQl0aGV0YSAtPSAxODA7Ci0JCXNpZ254ID0gLTE7Ci0JfSBlbHNlIGlmICh0aGV0YSA8IC05MCkgewotCQl0aGV0YSArPSAxODA7Ci0JCXNpZ254ID0gLTE7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8PSAxNzsgaSsrKSB7Ci0JCWlmICh0aGV0YSA+IGFuZ2xlKSB7Ci0JCQl0bXAgPSByZXQuaSAtIChyZXQucSA+PiBpKTsKLQkJCXJldC5xICs9IHJldC5pID4+IGk7Ci0JCQlyZXQuaSA9IHRtcDsKLQkJCWFuZ2xlICs9IGFyY3RnW2ldOwotCQl9IGVsc2UgewotCQkJdG1wID0gcmV0LmkgKyAocmV0LnEgPj4gaSk7Ci0JCQlyZXQucSAtPSByZXQuaSA+PiBpOwotCQkJcmV0LmkgPSB0bXA7Ci0JCQlhbmdsZSAtPSBhcmN0Z1tpXTsKLQkJfQotCX0KLQotCXJldC5pICo9IHNpZ254OwotCXJldC5xICo9IHNpZ254OwotCi0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIHZvaWQgbHBwaHlfcnVuX3NhbXBsZXMoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgc2FtcGxlcywgdTE2IGxvb3BzLAogCQkJICAgICAgdTE2IHdhaXQpCiB7CkBAIC0xODMxLDggKzE3ODQsOSBAQAogewogCXN0cnVjdCBiNDNfcGh5X2xwICpscHBoeSA9IGRldi0+cGh5LmxwOwogCXUxNiBidWZbNjRdOwotCWludCBpLCBzYW1wbGVzID0gMCwgYW5nbGUgPSAwLCByb3RhdGlvbiA9ICg5ICogZnJlcSkgLyA1MDA7Ci0JbHBwaHlfYzMyIHNhbXBsZTsKKwlpbnQgaSwgc2FtcGxlcyA9IDAsIGFuZ2xlID0gMDsKKwlpbnQgcm90YXRpb24gPSAoKCgzNiAqIGZyZXEpIC8gMjApIDw8IDE2KSAvIDEwMDsKKwlzdHJ1Y3QgYjQzX2MzMiBzYW1wbGU7CiAKIAlscHBoeS0+dHhfdG9uZV9mcmVxID0gZnJlcTsKIApAQCAtMTg0OCwxMCArMTgwMiwxMCBAQAogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBzYW1wbGVzOyBpKyspIHsKLQkJc2FtcGxlID0gbHBwaHlfY29yZGljKGFuZ2xlKTsKKwkJc2FtcGxlID0gYjQzX2NvcmRpYyhhbmdsZSk7CiAJCWFuZ2xlICs9IHJvdGF0aW9uOwotCQlidWZbaV0gPSAoKHNhbXBsZS5pICogbWF4KSAmIDB4RkYpIDw8IDg7Ci0JCWJ1ZltpXSB8PSAoc2FtcGxlLnEgKiBtYXgpICYgMHhGRjsKKwkJYnVmW2ldID0gQ09SRElDX0NPTlZFUlQoKHNhbXBsZS5pICogbWF4KSAmIDB4RkYpIDw8IDg7CisJCWJ1ZltpXSB8PSBDT1JESUNfQ09OVkVSVCgoc2FtcGxlLnEgKiBtYXgpICYgMHhGRik7CiAJfQogCiAJYjQzX2xwdGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTFBUQUIxNig1LCAwKSwgc2FtcGxlcywgYnVmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmMKaW5kZXggOTkyMzE4YS4uNzk1YmIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3BoeV9uLmMKQEAgLTI4LDcgKzI4LDUwIEBACiAjaW5jbHVkZSAiYjQzLmgiCiAjaW5jbHVkZSAicGh5X24uaCIKICNpbmNsdWRlICJ0YWJsZXNfbnBoeS5oIgorI2luY2x1ZGUgIm1haW4uaCIKIAorc3RydWN0IG5waHlfdHhnYWlucyB7CisJdTE2IHR4Z21bMl07CisJdTE2IHBnYVsyXTsKKwl1MTYgcGFkWzJdOworCXUxNiBpcGFbMl07Cit9OworCitzdHJ1Y3QgbnBoeV9pcWNhbF9wYXJhbXMgeworCXUxNiB0eGdtOworCXUxNiBwZ2E7CisJdTE2IHBhZDsKKwl1MTYgaXBhOworCXUxNiBjYWxfZ2FpbjsKKwl1MTYgbmNvcnJbNV07Cit9OworCitzdHJ1Y3QgbnBoeV9pcV9lc3QgeworCXMzMiBpcTBfcHJvZDsKKwl1MzIgaTBfcHdyOworCXUzMiBxMF9wd3I7CisJczMyIGlxMV9wcm9kOworCXUzMiBpMV9wd3I7CisJdTMyIHExX3B3cjsKK307CisKK2VudW0gYjQzX25waHlfcmZfc2VxdWVuY2UgeworCUI0M19SRlNFUV9SWDJUWCwKKwlCNDNfUkZTRVFfVFgyUlgsCisJQjQzX1JGU0VRX1JFU0VUMlJYLAorCUI0M19SRlNFUV9VUERBVEVfR0FJTkgsCisJQjQzX1JGU0VRX1VQREFURV9HQUlOTCwKKwlCNDNfUkZTRVFfVVBEQVRFX0dBSU5VLAorfTsKKworc3RhdGljIHZvaWQgYjQzX25waHlfc2V0X3JmX3NlcXVlbmNlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTggY21kLAorCQkJCQl1OCAqZXZlbnRzLCB1OCAqZGVsYXlzLCB1OCBsZW5ndGgpOworc3RhdGljIHZvaWQgYjQzX25waHlfZm9yY2VfcmZfc2VxdWVuY2Uoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCSAgICAgICBlbnVtIGI0M19ucGh5X3JmX3NlcXVlbmNlIHNlcSk7CitzdGF0aWMgdm9pZCBiNDNfbnBoeV9yZl9jb250cm9sX292ZXJyaWRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2IGZpZWxkLAorCQkJCQkJdTE2IHZhbHVlLCB1OCBjb3JlLCBib29sIG9mZik7CitzdGF0aWMgdm9pZCBiNDNfbnBoeV9yZl9jb250cm9sX2ludGNfb3ZlcnJpZGUoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBmaWVsZCwKKwkJCQkJCXUxNiB2YWx1ZSwgdTggY29yZSk7CiAKIHZvaWQgYjQzX25waHlfc2V0X3J4YW50ZW5uYShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGludCBhbnRlbm5hKQogey8vVE9ETwpAQCAtMTk3LDE3MyArMjQwLDEwMjAgQEAKIAkJICAgICB+QjQzX05QSFlfUkZDVExfQ01EX0VOKTsKIH0KIAotI2RlZmluZSBudGFiX3VwbG9hZChkZXYsIG9mZnNldCwgZGF0YSkgZG8geyBcCi0JCXVuc2lnbmVkIGludCBpOwkJCQkJCVwKLQkJZm9yIChpID0gMDsgaSA8IChvZmZzZXQjI19TSVpFKTsgaSsrKQkJCVwKLQkJCWI0M19udGFiX3dyaXRlKGRldiwgKG9mZnNldCkgKyBpLCAoZGF0YSlbaV0pOwlcCi0JfSB3aGlsZSAoMCkKLQotLyogVXBsb2FkIHRoZSBOLVBIWSB0YWJsZXMuICovCisvKgorICogVXBsb2FkIHRoZSBOLVBIWSB0YWJsZXMuCisgKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL0luaXRUYWJsZXMKKyAqLwogc3RhdGljIHZvaWQgYjQzX25waHlfdGFibGVzX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQogewotCS8qIFN0YXRpYyB0YWJsZXMgKi8KLQludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0ZSQU1FU1RSVUNULCBiNDNfbnRhYl9mcmFtZXN0cnVjdCk7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9GUkFNRUxULCBiNDNfbnRhYl9mcmFtZWxvb2t1cCk7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9UTUFQLCBiNDNfbnRhYl90bWFwKTsKLQludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX1REVFJOLCBiNDNfbnRhYl90ZHRybik7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9JTlRMRVZFTCwgYjQzX250YWJfaW50bGV2ZWwpOwotCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfUElMT1QsIGI0M19udGFiX3BpbG90KTsKLQludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX1BJTE9UTFQsIGI0M19udGFiX3BpbG90bHQpOwotCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfVERJMjBBMCwgYjQzX250YWJfdGRpMjBhMCk7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9UREkyMEExLCBiNDNfbnRhYl90ZGkyMGExKTsKLQludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX1RESTQwQTAsIGI0M19udGFiX3RkaTQwYTApOwotCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfVERJNDBBMSwgYjQzX250YWJfdGRpNDBhMSk7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9CREksIGI0M19udGFiX2JkaSk7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DSEFORVNULCBiNDNfbnRhYl9jaGFubmVsZXN0KTsKLQludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX01DUywgYjQzX250YWJfbWNzKTsKLQotCS8qIFZvbGF0aWxlIHRhYmxlcyAqLwotCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfTk9JU0VWQVIxMCwgYjQzX250YWJfbm9pc2V2YXIxMCk7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9OT0lTRVZBUjExLCBiNDNfbnRhYl9ub2lzZXZhcjExKTsKLQludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0MwX0VTVFBMVCwgYjQzX250YWJfZXN0aW1hdGVwb3dlcmx0MCk7Ci0JbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMV9FU1RQTFQsIGI0M19udGFiX2VzdGltYXRlcG93ZXJsdDEpOwotCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfQzBfQURKUExULCBiNDNfbnRhYl9hZGp1c3Rwb3dlcjApOwotCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfQzFfQURKUExULCBiNDNfbnRhYl9hZGp1c3Rwb3dlcjEpOwotCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfQzBfR0FJTkNUTCwgYjQzX250YWJfZ2FpbmN0bDApOwotCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfQzFfR0FJTkNUTCwgYjQzX250YWJfZ2FpbmN0bDEpOwotCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfQzBfSVFMVCwgYjQzX250YWJfaXFsdDApOwotCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfQzFfSVFMVCwgYjQzX250YWJfaXFsdDEpOwotCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfQzBfTE9GRUVEVEgsIGI0M19udGFiX2xvZnRsdDApOwotCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfQzFfTE9GRUVEVEgsIGI0M19udGFiX2xvZnRsdDEpOworCWlmIChkZXYtPnBoeS5yZXYgPCAzKQorCQliNDNfbnBoeV9yZXYwXzFfMl90YWJsZXNfaW5pdChkZXYpOworCWVsc2UKKwkJYjQzX25waHlfcmV2M3BsdXNfdGFibGVzX2luaXQoZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgYjQzX25waHlfd29ya2Fyb3VuZHMoc3RydWN0IGI0M193bGRldiAqZGV2KQorLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9QQSUyMG92ZXJyaWRlICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9wYV9vdmVycmlkZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGJvb2wgZW5hYmxlKQogewotCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7Ci0JdW5zaWduZWQgaW50IGk7CisJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IGRldi0+cGh5Lm47CisJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kOworCXUxNiB0bXA7CiAKLQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0lRRkxJUCwKLQkJICAgIEI0M19OUEhZX0lRRkxJUF9BREMxIHwgQjQzX05QSFlfSVFGTElQX0FEQzIpOwotCWlmICgxIC8qIEZJWE1FIGJhbmQgaXMgMi40R0h6ICovKSB7Ci0JCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfQ0xBU1NDVEwsCi0JCQkgICAgQjQzX05QSFlfQ0xBU1NDVExfQ0NLRU4pOworCWlmICghZW5hYmxlKSB7CisJCW5waHktPnJmY3RybF9pbnRjMV9zYXZlID0gYjQzX3BoeV9yZWFkKGRldiwKKwkJCQkJCSAgICAgICBCNDNfTlBIWV9SRkNUTF9JTlRDMSk7CisJCW5waHktPnJmY3RybF9pbnRjMl9zYXZlID0gYjQzX3BoeV9yZWFkKGRldiwKKwkJCQkJCSAgICAgICBCNDNfTlBIWV9SRkNUTF9JTlRDMik7CisJCWJhbmQgPSBiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpOworCQlpZiAoZGV2LT5waHkucmV2ID49IDMpIHsKKwkJCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCQkJdG1wID0gMHg2MDA7CisJCQllbHNlCisJCQkJdG1wID0gMHg0ODA7CisJCX0gZWxzZSB7CisJCQlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQkJCXRtcCA9IDB4MTgwOworCQkJZWxzZQorCQkJCXRtcCA9IDB4MTIwOworCQl9CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9JTlRDMSwgdG1wKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEMyLCB0bXApOwogCX0gZWxzZSB7Ci0JCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX0NMQVNTQ1RMLAotCQkJICAgICB+QjQzX05QSFlfQ0xBU1NDVExfQ0NLRU4pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzEsCisJCQkJbnBoeS0+cmZjdHJsX2ludGMxX3NhdmUpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzIsCisJCQkJbnBoeS0+cmZjdHJsX2ludGMyX3NhdmUpOwogCX0KLQliNDNfcmFkaW9fc2V0KGRldiwgQjIwNTVfQzFfVFhfUkZfU1BBUkUsIDB4OCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RYRlJBTUVERUxBWSwgOCk7Ci0KLQkvKiBGaXh1cCBzb21lIHRhYmxlcyAqLwotCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNig4LCAweDAwKSwgMHhBKTsKLQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCMTYoOCwgMHgxMCksIDB4QSk7Ci0JYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjE2KDgsIDB4MDIpLCAweENEQUEpOwotCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNig4LCAweDEyKSwgMHhDREFBKTsKLQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCMTYoOCwgMHgwOCksIDApOwotCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNig4LCAweDE4KSwgMCk7Ci0JYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjE2KDgsIDB4MDcpLCAweDdBQUIpOwotCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNig4LCAweDE3KSwgMHg3QUFCKTsKLQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCMTYoOCwgMHgwNiksIDB4ODAwKTsKLQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCMTYoOCwgMHgxNiksIDB4ODAwKTsKLQotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9MVVRfVFJTV19MTzEsIDB4MkQ4KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfTFVUX1RSU1dfVVAxLCAweDMwMSk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0xVVF9UUlNXX0xPMiwgMHgyRDgpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9MVVRfVFJTV19VUDIsIDB4MzAxKTsKLQotCS8vVE9ETyBzZXQgUkYgc2VxdWVuY2UKLQotCS8qIFNldCBuYXJyb3diYW5kIGNsaXAgdGhyZXNob2xkICovCi0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0MxX05CQ0xJUFRIUkVTLCA2Nik7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0MyX05CQ0xJUFRIUkVTLCA2Nik7Ci0KLQkvKiBTZXQgd2lkZWJhbmQgY2xpcCAyIHRocmVzaG9sZCAqLwotCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0MxX0NMSVBXQlRIUkVTLAotCQkJfkI0M19OUEhZX0MxX0NMSVBXQlRIUkVTX0NMSVAyLAotCQkJMjEgPDwgQjQzX05QSFlfQzFfQ0xJUFdCVEhSRVNfQ0xJUDJfU0hJRlQpOwotCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0MyX0NMSVBXQlRIUkVTLAotCQkJfkI0M19OUEhZX0MyX0NMSVBXQlRIUkVTX0NMSVAyLAotCQkJMjEgPDwgQjQzX05QSFlfQzJfQ0xJUFdCVEhSRVNfQ0xJUDJfU0hJRlQpOwotCi0JLyogU2V0IENsaXAgMiBkZXRlY3QgKi8KLQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0MxX0NHQUlOSSwKLQkJICAgIEI0M19OUEhZX0MxX0NHQUlOSV9DTDJERVRFQ1QpOwotCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfQzJfQ0dBSU5JLAotCQkgICAgQjQzX05QSFlfQzJfQ0dBSU5JX0NMMkRFVEVDVCk7Ci0KLQlpZiAoMCAvKkZJWE1FKi8pIHsKLQkJLyogU2V0IGR3ZWxsIGxlbmd0aHMgKi8KLQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0NMSVAxX05CRFdFTExfTEVOLCA0Myk7Ci0JCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9DTElQMl9OQkRXRUxMX0xFTiwgNDMpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVzFDTElQMV9EV0VMTF9MRU4sIDkpOwotCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVzFDTElQMl9EV0VMTF9MRU4sIDkpOwotCi0JCS8qIFNldCBnYWluIGJhY2tvZmYgKi8KLQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQzFfQ0dBSU5JLAotCQkJCX5CNDNfTlBIWV9DMV9DR0FJTklfR0FJTkJLT0ZGLAotCQkJCTEgPDwgQjQzX05QSFlfQzFfQ0dBSU5JX0dBSU5CS09GRl9TSElGVCk7Ci0JCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0MyX0NHQUlOSSwKLQkJCQl+QjQzX05QSFlfQzJfQ0dBSU5JX0dBSU5CS09GRiwKLQkJCQkxIDw8IEI0M19OUEhZX0MyX0NHQUlOSV9HQUlOQktPRkZfU0hJRlQpOwotCi0JCS8qIFNldCBIUFZHQTIgaW5kZXggKi8KLQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQzFfSU5JVEdBSU4sCi0JCQkJfkI0M19OUEhZX0MxX0lOSVRHQUlOX0hQVkdBMiwKLQkJCQk2IDw8IEI0M19OUEhZX0MxX0lOSVRHQUlOX0hQVkdBMl9TSElGVCk7Ci0JCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0MyX0lOSVRHQUlOLAotCQkJCX5CNDNfTlBIWV9DMl9JTklUR0FJTl9IUFZHQTIsCi0JCQkJNiA8PCBCNDNfTlBIWV9DMl9JTklUR0FJTl9IUFZHQTJfU0hJRlQpOwotCi0JCS8vRklYTUUgdmVyaWZ5IHRoYXQgdGhlIHNwZWNzIHJlYWxseSBtZWFuIHRvIHVzZSBhdXRvaW5jIGhlcmUuCi0JCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCMTYoNywgMHgxMDYpICsgaSwgMHg2NzMpOwotCX0KLQotCS8qIFNldCBtaW5pbXVtIGdhaW4gdmFsdWUgKi8KLQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9DMV9NSU5NQVhfR0FJTiwKLQkJCX5CNDNfTlBIWV9DMV9NSU5HQUlOLAotCQkJMjMgPDwgQjQzX05QSFlfQzFfTUlOR0FJTl9TSElGVCk7Ci0JYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQzJfTUlOTUFYX0dBSU4sCi0JCQl+QjQzX05QSFlfQzJfTUlOR0FJTiwKLQkJCTIzIDw8IEI0M19OUEhZX0MyX01JTkdBSU5fU0hJRlQpOwotCi0JaWYgKHBoeS0+cmV2IDwgMikgewotCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9TQ1JBTV9TSUdDVEwsCi0JCQkgICAgIH5CNDNfTlBIWV9TQ1JBTV9TSUdDVExfU0NNKTsKLQl9Ci0KLQkvKiBTZXQgcGhhc2UgdHJhY2sgYWxwaGEgYW5kIGJldGEgKi8KLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUEhBU0VUUl9BMCwgMHgxMjUpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9QSEFTRVRSX0ExLCAweDFCMyk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1BIQVNFVFJfQTIsIDB4MTA1KTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUEhBU0VUUl9CMCwgMHgxNkUpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9QSEFTRVRSX0IxLCAweENEKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUEhBU0VUUl9CMiwgMHgyMCk7CiB9CiAKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vVHhMcEZidyAqLworc3RhdGljIHZvaWQgYjQzX25waHlfdHhfbHBfZmJ3KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9uICpucGh5ID0gZGV2LT5waHkubjsKKwl1MTYgdG1wOworCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCA9IGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCk7CisJYm9vbCBpcGEgPSAobnBoeS0+aXBhMmdfb24gJiYgYmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB8fAorCQkJKG5waHktPmlwYTVnX29uICYmIGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWik7CisKKwlpZiAoZGV2LT5waHkucmV2ID49IDMpIHsKKwkJaWYgKGlwYSkgeworCQkJdG1wID0gNDsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UWEZfNDBDT19CMzJTMiwKKwkJCSAgICAgICgoKCgodG1wIDw8IDMpIHwgdG1wKSA8PCAzKSB8IHRtcCkgPDwgMykgfCB0bXApOworCQl9CisKKwkJdG1wID0gMTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RYRl80MENPX0IxUzIsCisJCQkgICAgICAoKCgoKHRtcCA8PCAzKSB8IHRtcCkgPDwgMykgfCB0bXApIDw8IDMpIHwgdG1wKTsKKwl9Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vQm1hY1BoeUNsa0ZnYyAqLworc3RhdGljIHZvaWQgYjQzX25waHlfYm1hY19jbG9ja19mZ2Moc3RydWN0IGI0M193bGRldiAqZGV2LCBib29sIGZvcmNlKQoreworCXUzMiB0bXNsb3c7CisKKwlpZiAoZGV2LT5waHkudHlwZSAhPSBCNDNfUEhZVFlQRV9OKQorCQlyZXR1cm47CisKKwl0bXNsb3cgPSBzc2JfcmVhZDMyKGRldi0+ZGV2LCBTU0JfVE1TTE9XKTsKKwlpZiAoZm9yY2UpCisJCXRtc2xvdyB8PSBTU0JfVE1TTE9XX0ZHQzsKKwllbHNlCisJCXRtc2xvdyAmPSB+U1NCX1RNU0xPV19GR0M7CisJc3NiX3dyaXRlMzIoZGV2LT5kZXYsIFNTQl9UTVNMT1csIHRtc2xvdyk7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vQ0NBICovCiBzdGF0aWMgdm9pZCBiNDNfbnBoeV9yZXNldF9jY2Eoc3RydWN0IGI0M193bGRldiAqZGV2KQogewogCXUxNiBiYmNmZzsKIAotCXNzYl93cml0ZTMyKGRldi0+ZGV2LCBTU0JfVE1TTE9XLAotCQkgICAgc3NiX3JlYWQzMihkZXYtPmRldiwgU1NCX1RNU0xPVykgfCBTU0JfVE1TTE9XX0ZHQyk7CisJYjQzX25waHlfYm1hY19jbG9ja19mZ2MoZGV2LCAxKTsKIAliYmNmZyA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0JCQ0ZHKTsKLQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0JCQ0ZHLCBCNDNfTlBIWV9CQkNGR19SU1RDQ0EpOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9CQkNGRywKLQkJICAgICAgYmJjZmcgJiB+QjQzX05QSFlfQkJDRkdfUlNUQ0NBKTsKLQlzc2Jfd3JpdGUzMihkZXYtPmRldiwgU1NCX1RNU0xPVywKLQkJICAgIHNzYl9yZWFkMzIoZGV2LT5kZXYsIFNTQl9UTVNMT1cpICYgflNTQl9UTVNMT1dfRkdDKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQkJDRkcsIGJiY2ZnIHwgQjQzX05QSFlfQkJDRkdfUlNUQ0NBKTsKKwl1ZGVsYXkoMSk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0JCQ0ZHLCBiYmNmZyAmIH5CNDNfTlBIWV9CQkNGR19SU1RDQ0EpOworCWI0M19ucGh5X2JtYWNfY2xvY2tfZmdjKGRldiwgMCk7CisJYjQzX25waHlfZm9yY2VfcmZfc2VxdWVuY2UoZGV2LCBCNDNfUkZTRVFfUkVTRVQyUlgpOwogfQogCi1lbnVtIGI0M19ucGh5X3JmX3NlcXVlbmNlIHsKLQlCNDNfUkZTRVFfUlgyVFgsCi0JQjQzX1JGU0VRX1RYMlJYLAotCUI0M19SRlNFUV9SRVNFVDJSWCwKLQlCNDNfUkZTRVFfVVBEQVRFX0dBSU5ILAotCUI0M19SRlNFUV9VUERBVEVfR0FJTkwsCi0JQjQzX1JGU0VRX1VQREFURV9HQUlOVSwKLX07CisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL01JTU9Db25maWcgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3VwZGF0ZV9taW1vX2NvbmZpZyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHMzMiBwcmVhbWJsZSkKK3sKKwl1MTYgbWltb2NmZyA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX01JTU9DRkcpOwogCisJbWltb2NmZyB8PSBCNDNfTlBIWV9NSU1PQ0ZHX0FVVE87CisJaWYgKHByZWFtYmxlID09IDEpCisJCW1pbW9jZmcgfD0gQjQzX05QSFlfTUlNT0NGR19HRk1JWDsKKwllbHNlCisJCW1pbW9jZmcgJj0gfkI0M19OUEhZX01JTU9DRkdfR0ZNSVg7CisKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfTUlNT0NGRywgbWltb2NmZyk7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vQ2hhaW5zICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV91cGRhdGVfdHhyeF9jaGFpbihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IGRldi0+cGh5Lm47CisKKwlib29sIG92ZXJyaWRlID0gZmFsc2U7CisJdTE2IGNoYWluID0gMHgzMzsKKworCWlmIChucGh5LT50eHJ4X2NoYWluID09IDApIHsKKwkJY2hhaW4gPSAweDExOworCQlvdmVycmlkZSA9IHRydWU7CisJfSBlbHNlIGlmIChucGh5LT50eHJ4X2NoYWluID09IDEpIHsKKwkJY2hhaW4gPSAweDIyOworCQlvdmVycmlkZSA9IHRydWU7CisJfQorCisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfUkZTRVFDQSwKKwkJCX4oQjQzX05QSFlfUkZTRVFDQV9UWEVOIHwgQjQzX05QSFlfUkZTRVFDQV9SWEVOKSwKKwkJCWNoYWluKTsKKworCWlmIChvdmVycmlkZSkKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9SRlNFUU1PREUsCisJCQkJQjQzX05QSFlfUkZTRVFNT0RFX0NBT1ZFUik7CisJZWxzZQorCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9SRlNFUU1PREUsCisJCQkJfkI0M19OUEhZX1JGU0VRTU9ERV9DQU9WRVIpOworfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1J4SXFFc3QgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3J4X2lxX2VzdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHN0cnVjdCBucGh5X2lxX2VzdCAqZXN0LAorCQkJCXUxNiBzYW1wcywgdTggdGltZSwgYm9vbCB3YWl0KQoreworCWludCBpOworCXUxNiB0bXA7CisKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfSVFFU1RfU0FNQ05ULCBzYW1wcyk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfSVFFU1RfV1QsIH5CNDNfTlBIWV9JUUVTVF9XVF9WQUwsIHRpbWUpOworCWlmICh3YWl0KQorCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0lRRVNUX0NNRCwgQjQzX05QSFlfSVFFU1RfQ01EX01PREUpOworCWVsc2UKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfSVFFU1RfQ01ELCB+QjQzX05QSFlfSVFFU1RfQ01EX01PREUpOworCisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9JUUVTVF9DTUQsIEI0M19OUEhZX0lRRVNUX0NNRF9TVEFSVCk7CisKKwlmb3IgKGkgPSAxMDAwOyBpOyBpLS0pIHsKKwkJdG1wID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfSVFFU1RfQ01EKTsKKwkJaWYgKCEodG1wICYgQjQzX05QSFlfSVFFU1RfQ01EX1NUQVJUKSkgeworCQkJZXN0LT5pMF9wd3IgPSAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfSVFFU1RfSVBBQ0NfSEkwKSA8PCAxNikgfAorCQkJCQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9JUUVTVF9JUEFDQ19MTzApOworCQkJZXN0LT5xMF9wd3IgPSAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfSVFFU1RfUVBBQ0NfSEkwKSA8PCAxNikgfAorCQkJCQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9JUUVTVF9RUEFDQ19MTzApOworCQkJZXN0LT5pcTBfcHJvZCA9IChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9JUUVTVF9JUUFDQ19ISTApIDw8IDE2KSB8CisJCQkJCWI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0lRRVNUX0lRQUNDX0xPMCk7CisKKwkJCWVzdC0+aTFfcHdyID0gKGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0lRRVNUX0lQQUNDX0hJMSkgPDwgMTYpIHwKKwkJCQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfSVFFU1RfSVBBQ0NfTE8xKTsKKwkJCWVzdC0+cTFfcHdyID0gKGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0lRRVNUX1FQQUNDX0hJMSkgPDwgMTYpIHwKKwkJCQkJYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfSVFFU1RfUVBBQ0NfTE8xKTsKKwkJCWVzdC0+aXExX3Byb2QgPSAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfSVFFU1RfSVFBQ0NfSEkxKSA8PCAxNikgfAorCQkJCQliNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9JUUVTVF9JUUFDQ19MTzEpOworCQkJcmV0dXJuOworCQl9CisJCXVkZWxheSgxMCk7CisJfQorCW1lbXNldChlc3QsIDAsIHNpemVvZigqZXN0KSk7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vUnhJcUNvZWZmcyAqLworc3RhdGljIHZvaWQgYjQzX25waHlfcnhfaXFfY29lZmZzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgYm9vbCB3cml0ZSwKKwkJCQkJc3RydWN0IGI0M19waHlfbl9pcV9jb21wICpwY29tcCkKK3sKKwlpZiAod3JpdGUpIHsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0MxX1JYSVFfQ09NUEEwLCBwY29tcC0+YTApOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQzFfUlhJUV9DT01QQjAsIHBjb21wLT5iMCk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9DMl9SWElRX0NPTVBBMSwgcGNvbXAtPmExKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0MyX1JYSVFfQ09NUEIxLCBwY29tcC0+YjEpOworCX0gZWxzZSB7CisJCXBjb21wLT5hMCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0MxX1JYSVFfQ09NUEEwKTsKKwkJcGNvbXAtPmIwID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQzFfUlhJUV9DT01QQjApOworCQlwY29tcC0+YTEgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9DMl9SWElRX0NPTVBBMSk7CisJCXBjb21wLT5iMSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0MyX1JYSVFfQ09NUEIxKTsKKwl9Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vUnhDYWxQaHlDbGVhbnVwICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9yeF9jYWxfcGh5X2NsZWFudXAoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBjb3JlKQoreworCXUxNiAqcmVncyA9IGRldi0+cGh5Lm4tPnR4X3J4X2NhbF9waHlfc2F2ZXJlZ3M7CisKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZTRVFDQSwgcmVnc1swXSk7CisJaWYgKGNvcmUgPT0gMCkgeworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQUZFQ1RMX0MxLCByZWdzWzFdKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSMSwgcmVnc1syXSk7CisJfSBlbHNlIHsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0FGRUNUTF9DMiwgcmVnc1sxXSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUiwgcmVnc1syXSk7CisJfQorCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9JTlRDMSwgcmVnc1szXSk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEMyLCByZWdzWzRdKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfUlNTSU8xLCByZWdzWzVdKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfUlNTSU8yLCByZWdzWzZdKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVFhGXzQwQ09fQjFTMSwgcmVnc1s3XSk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX09WRVIsIHJlZ3NbOF0pOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9QQVBEX0VOMCwgcmVnc1s5XSk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1BBUERfRU4xLCByZWdzWzEwXSk7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vUnhDYWxQaHlTZXR1cCAqLworc3RhdGljIHZvaWQgYjQzX25waHlfcnhfY2FsX3BoeV9zZXR1cChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IGNvcmUpCit7CisJdTggcnh2YWwsIHR4dmFsOworCXUxNiAqcmVncyA9IGRldi0+cGh5Lm4tPnR4X3J4X2NhbF9waHlfc2F2ZXJlZ3M7CisKKwlyZWdzWzBdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUkZTRVFDQSk7CisJaWYgKGNvcmUgPT0gMCkgeworCQlyZWdzWzFdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQUZFQ1RMX0MxKTsKKwkJcmVnc1syXSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSMSk7CisJfSBlbHNlIHsKKwkJcmVnc1sxXSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0FGRUNUTF9DMik7CisJCXJlZ3NbMl0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUik7CisJfQorCXJlZ3NbM10gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9SRkNUTF9JTlRDMSk7CisJcmVnc1s0XSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEMyKTsKKwlyZWdzWzVdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUkZDVExfUlNTSU8xKTsKKwlyZWdzWzZdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUkZDVExfUlNTSU8yKTsKKwlyZWdzWzddID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfVFhGXzQwQ09fQjFTMSk7CisJcmVnc1s4XSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1JGQ1RMX09WRVIpOworCXJlZ3NbOV0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9QQVBEX0VOMCk7CisJcmVnc1sxMF0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9QQVBEX0VOMSk7CisKKwliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9QQVBEX0VOMCwgfjB4MDAwMSk7CisJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfUEFQRF9FTjEsIH4weDAwMDEpOworCisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfUkZTRVFDQSwgKHUxNil+QjQzX05QSFlfUkZTRVFDQV9SWERJUywKKwkJCSgoMSAtIGNvcmUpIDw8IEI0M19OUEhZX1JGU0VRQ0FfUlhESVNfU0hJRlQpKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRlNFUUNBLCB+QjQzX05QSFlfUkZTRVFDQV9UWEVOLAorCQkJKCgxIC0gY29yZSkgPDwgQjQzX05QSFlfUkZTRVFDQV9UWEVOX1NISUZUKSk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfUkZTRVFDQSwgfkI0M19OUEhZX1JGU0VRQ0FfUlhFTiwKKwkJCShjb3JlIDw8IEI0M19OUEhZX1JGU0VRQ0FfUlhFTl9TSElGVCkpOworCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX1JGU0VRQ0EsIH5CNDNfTlBIWV9SRlNFUUNBX1RYRElTLAorCQkJKGNvcmUgPDwgQjQzX05QSFlfUkZTRVFDQV9UWERJU19TSElGVCkpOworCisJaWYgKGNvcmUgPT0gMCkgeworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9BRkVDVExfQzEsIH4weDAwMDcpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSMSwgMHgwMDA3KTsKKwl9IGVsc2UgeworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9BRkVDVExfQzIsIH4weDAwMDcpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSLCAweDAwMDcpOworCX0KKworCWI0M19ucGh5X3JmX2NvbnRyb2xfaW50Y19vdmVycmlkZShkZXYsIDIsIDAsIDMpOworCWI0M19ucGh5X3JmX2NvbnRyb2xfb3ZlcnJpZGUoZGV2LCA4LCAwLCAzLCBmYWxzZSk7CisJYjQzX25waHlfZm9yY2VfcmZfc2VxdWVuY2UoZGV2LCBCNDNfUkZTRVFfUlgyVFgpOworCisJaWYgKGNvcmUgPT0gMCkgeworCQlyeHZhbCA9IDE7CisJCXR4dmFsID0gODsKKwl9IGVsc2UgeworCQlyeHZhbCA9IDQ7CisJCXR4dmFsID0gMjsKKwl9CisJYjQzX25waHlfcmZfY29udHJvbF9pbnRjX292ZXJyaWRlKGRldiwgMSwgcnh2YWwsIChjb3JlICsgMSkpOworCWI0M19ucGh5X3JmX2NvbnRyb2xfaW50Y19vdmVycmlkZShkZXYsIDEsIHR4dmFsLCAoMiAtIGNvcmUpKTsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9DYWxjUnhJcUNvbXAgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X2NhbGNfcnhfaXFfY29tcChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IG1hc2spCit7CisJaW50IGk7CisJczMyIGlxOworCXUzMiBpaTsKKwl1MzIgcXE7CisJaW50IGlxX25iaXRzLCBxcV9uYml0czsKKwlpbnQgYXJzaCwgYnJzaDsKKwl1MTYgdG1wLCBhLCBiOworCisJc3RydWN0IG5waHlfaXFfZXN0IGVzdDsKKwlzdHJ1Y3QgYjQzX3BoeV9uX2lxX2NvbXAgb2xkOworCXN0cnVjdCBiNDNfcGh5X25faXFfY29tcCBuZXcgPSB7IH07CisJYm9vbCBlcnJvciA9IGZhbHNlOworCisJaWYgKG1hc2sgPT0gMCkKKwkJcmV0dXJuOworCisJYjQzX25waHlfcnhfaXFfY29lZmZzKGRldiwgZmFsc2UsICZvbGQpOworCWI0M19ucGh5X3J4X2lxX2NvZWZmcyhkZXYsIHRydWUsICZuZXcpOworCWI0M19ucGh5X3J4X2lxX2VzdChkZXYsICZlc3QsIDB4NDAwMCwgMzIsIGZhbHNlKTsKKwluZXcgPSBvbGQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWlmIChpID09IDAgJiYgKG1hc2sgJiAxKSkgeworCQkJaXEgPSBlc3QuaXEwX3Byb2Q7CisJCQlpaSA9IGVzdC5pMF9wd3I7CisJCQlxcSA9IGVzdC5xMF9wd3I7CisJCX0gZWxzZSBpZiAoaSA9PSAxICYmIChtYXNrICYgMikpIHsKKwkJCWlxID0gZXN0LmlxMV9wcm9kOworCQkJaWkgPSBlc3QuaTFfcHdyOworCQkJcXEgPSBlc3QucTFfcHdyOworCQl9IGVsc2UgeworCQkJQjQzX1dBUk5fT04oMSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChpaSArIHFxIDwgMikgeworCQkJZXJyb3IgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKworCQlpcV9uYml0cyA9IGZscyhhYnMoaXEpKTsKKwkJcXFfbmJpdHMgPSBmbHMocXEpOworCisJCWFyc2ggPSBpcV9uYml0cyAtIDIwOworCQlpZiAoYXJzaCA+PSAwKSB7CisJCQlhID0gLSgoaXEgPDwgKDMwIC0gaXFfbmJpdHMpKSArIChpaSA+PiAoMSArIGFyc2gpKSk7CisJCQl0bXAgPSBpaSA+PiBhcnNoOworCQl9IGVsc2UgeworCQkJYSA9IC0oKGlxIDw8ICgzMCAtIGlxX25iaXRzKSkgKyAoaWkgPDwgKC0xIC0gYXJzaCkpKTsKKwkJCXRtcCA9IGlpIDw8IC1hcnNoOworCQl9CisJCWlmICh0bXAgPT0gMCkgeworCQkJZXJyb3IgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwkJYSAvPSB0bXA7CisKKwkJYnJzaCA9IHFxX25iaXRzIC0gMTE7CisJCWlmIChicnNoID49IDApIHsKKwkJCWIgPSAocXEgPDwgKDMxIC0gcXFfbmJpdHMpKTsKKwkJCXRtcCA9IGlpID4+IGJyc2g7CisJCX0gZWxzZSB7CisJCQliID0gKHFxIDw8ICgzMSAtIHFxX25iaXRzKSk7CisJCQl0bXAgPSBpaSA8PCAtYnJzaDsKKwkJfQorCQlpZiAodG1wID09IDApIHsKKwkJCWVycm9yID0gdHJ1ZTsKKwkJCWJyZWFrOworCQl9CisJCWIgPSBpbnRfc3FydChiIC8gdG1wIC0gYSAqIGEpIC0gKDEgPDwgMTApOworCisJCWlmIChpID09IDAgJiYgKG1hc2sgJiAweDEpKSB7CisJCQlpZiAoZGV2LT5waHkucmV2ID49IDMpIHsKKwkJCQluZXcuYTAgPSBhICYgMHgzRkY7CisJCQkJbmV3LmIwID0gYiAmIDB4M0ZGOworCQkJfSBlbHNlIHsKKwkJCQluZXcuYTAgPSBiICYgMHgzRkY7CisJCQkJbmV3LmIwID0gYSAmIDB4M0ZGOworCQkJfQorCQl9IGVsc2UgaWYgKGkgPT0gMSAmJiAobWFzayAmIDB4MikpIHsKKwkJCWlmIChkZXYtPnBoeS5yZXYgPj0gMykgeworCQkJCW5ldy5hMSA9IGEgJiAweDNGRjsKKwkJCQluZXcuYjEgPSBiICYgMHgzRkY7CisJCQl9IGVsc2UgeworCQkJCW5ldy5hMSA9IGIgJiAweDNGRjsKKwkJCQluZXcuYjEgPSBhICYgMHgzRkY7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoZXJyb3IpCisJCW5ldyA9IG9sZDsKKworCWI0M19ucGh5X3J4X2lxX2NvZWZmcyhkZXYsIHRydWUsICZuZXcpOworfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1R4SXFXYXIgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3R4X2lxX3dvcmthcm91bmQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXUxNiBhcnJheVs0XTsKKwlpbnQgaTsKKworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9BRERSLCAweDNDNTApOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWFycmF5W2ldID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPKTsKKworCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCBCNDNfU0hNX1NIX05QSFlfVFhJUVcwLCBhcnJheVswXSk7CisJYjQzX3NobV93cml0ZTE2KGRldiwgQjQzX1NITV9TSEFSRUQsIEI0M19TSE1fU0hfTlBIWV9UWElRVzEsIGFycmF5WzFdKTsKKwliNDNfc2htX3dyaXRlMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwgQjQzX1NITV9TSF9OUEhZX1RYSVFXMiwgYXJyYXlbMl0pOworCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELCBCNDNfU0hNX1NIX05QSFlfVFhJUVczLCBhcnJheVszXSk7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vY2xpcC1kZXRlY3Rpb24gKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3dyaXRlX2NsaXBfZGV0ZWN0aW9uKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTE2ICpjbGlwX3N0KQoreworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9DMV9DTElQMVRIUkVTLCBjbGlwX3N0WzBdKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQzJfQ0xJUDFUSFJFUywgY2xpcF9zdFsxXSk7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vY2xpcC1kZXRlY3Rpb24gKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3JlYWRfY2xpcF9kZXRlY3Rpb24oc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgKmNsaXBfc3QpCit7CisJY2xpcF9zdFswXSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0MxX0NMSVAxVEhSRVMpOworCWNsaXBfc3RbMV0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9DMl9DTElQMVRIUkVTKTsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9jbGFzc2lmaWVyICovCitzdGF0aWMgdTE2IGI0M19ucGh5X2NsYXNzaWZpZXIoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgbWFzaywgdTE2IHZhbCkKK3sKKwl1MTYgdG1wOworCisJaWYgKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA9PSAxNikKKwkJYjQzX21hY19zdXNwZW5kKGRldik7CisKKwl0bXAgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9DTEFTU0NUTCk7CisJdG1wICY9IChCNDNfTlBIWV9DTEFTU0NUTF9DQ0tFTiB8IEI0M19OUEhZX0NMQVNTQ1RMX09GRE1FTiB8CisJCUI0M19OUEhZX0NMQVNTQ1RMX1dBSVRFREVOKTsKKwl0bXAgJj0gfm1hc2s7CisJdG1wIHw9ICh2YWwgJiBtYXNrKTsKKwliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9DTEFTU0NUTCwgMHhGRkY4LCB0bXApOworCisJaWYgKGRldi0+ZGV2LT5pZC5yZXZpc2lvbiA9PSAxNikKKwkJYjQzX21hY19lbmFibGUoZGV2KTsKKworCXJldHVybiB0bXA7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vY2FycmllcnNlYXJjaCAqLworc3RhdGljIHZvaWQgYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7CisJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IHBoeS0+bjsKKworCWlmIChlbmFibGUpIHsKKwkJdTE2IGNsaXBbXSA9IHsgMHhGRkZGLCAweEZGRkYgfTsKKwkJaWYgKG5waHktPmRlYWZfY291bnQrKyA9PSAwKSB7CisJCQlucGh5LT5jbGFzc2lmaWVyX3N0YXRlID0gYjQzX25waHlfY2xhc3NpZmllcihkZXYsIDAsIDApOworCQkJYjQzX25waHlfY2xhc3NpZmllcihkZXYsIDB4NywgMCk7CisJCQliNDNfbnBoeV9yZWFkX2NsaXBfZGV0ZWN0aW9uKGRldiwgbnBoeS0+Y2xpcF9zdGF0ZSk7CisJCQliNDNfbnBoeV93cml0ZV9jbGlwX2RldGVjdGlvbihkZXYsIGNsaXApOworCQl9CisJCWI0M19ucGh5X3Jlc2V0X2NjYShkZXYpOworCX0gZWxzZSB7CisJCWlmICgtLW5waHktPmRlYWZfY291bnQgPT0gMCkgeworCQkJYjQzX25waHlfY2xhc3NpZmllcihkZXYsIDB4NywgbnBoeS0+Y2xhc3NpZmllcl9zdGF0ZSk7CisJCQliNDNfbnBoeV93cml0ZV9jbGlwX2RldGVjdGlvbihkZXYsIG5waHktPmNsaXBfc3RhdGUpOworCQl9CisJfQorfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL3N0b3AtcGxheWJhY2sgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3N0b3BfcGxheWJhY2soc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X24gKm5waHkgPSBkZXYtPnBoeS5uOworCXUxNiB0bXA7CisKKwlpZiAobnBoeS0+aGFuZ19hdm9pZCkKKwkJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIDEpOworCisJdG1wID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfU0FNUF9TVEFUKTsKKwlpZiAodG1wICYgMHgxKQorCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX1NBTVBfQ01ELCBCNDNfTlBIWV9TQU1QX0NNRF9TVE9QKTsKKwllbHNlIGlmICh0bXAgJiAweDIpCisJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX0lRTE9DQUxfQ01ER0NUTCwgKHUxNil+MHg4MDAwKTsKKworCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX1NBTVBfQ01ELCB+MHgwMDA0KTsKKworCWlmIChucGh5LT5iYl9tdWx0X3NhdmUgJiAweDgwMDAwMDAwKSB7CisJCXRtcCA9IG5waHktPmJiX211bHRfc2F2ZSAmIDB4RkZGRjsKKwkJYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjE2KDE1LCA4NyksIHRtcCk7CisJCW5waHktPmJiX211bHRfc2F2ZSA9IDA7CisJfQorCisJaWYgKG5waHktPmhhbmdfYXZvaWQpCisJCWI0M19ucGh5X3N0YXlfaW5fY2Fycmllcl9zZWFyY2goZGV2LCAwKTsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9TcHVyV2FyICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9zcHVyX3dvcmthcm91bmQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X24gKm5waHkgPSBkZXYtPnBoeS5uOworCisJdW5zaWduZWQgaW50IGNoYW5uZWw7CisJaW50IHRvbmVbMl0gPSB7IDU3LCA1OCB9OworCXUzMiBub2lzZVsyXSA9IHsgMHgzRkYsIDB4M0ZGIH07CisKKwlCNDNfV0FSTl9PTihkZXYtPnBoeS5yZXYgPCAzKTsKKworCWlmIChucGh5LT5oYW5nX2F2b2lkKQorCQliNDNfbnBoeV9zdGF5X2luX2NhcnJpZXJfc2VhcmNoKGRldiwgMSk7CisKKwkvKiBGSVhNRTogY2hhbm5lbCA9IHJhZGlvX2NoYW5zcGVjICovCisKKwlpZiAobnBoeS0+Z2JhbmRfc3B1cndhcl9lbikgeworCQkvKiBUT0RPOiBOIFBIWSBBZGp1c3QgQW5hbG9nIFBmYncgKDcpICovCisJCWlmIChjaGFubmVsID09IDExICYmIGRldi0+cGh5LmlzXzQwbWh6KQorCQkJOyAvKiBUT0RPOiBOIFBIWSBBZGp1c3QgTWluIE5vaXNlIFZhcigyLCB0b25lLCBub2lzZSkqLworCQllbHNlCisJCQk7IC8qIFRPRE86IE4gUEhZIEFkanVzdCBNaW4gTm9pc2UgVmFyKDAsIE5VTEwsIE5VTEwpKi8KKwkJLyogVE9ETzogTiBQSFkgQWRqdXN0IENSUyBNaW4gUG93ZXIgKDB4MUUpICovCisJfQorCisJaWYgKG5waHktPmFiYW5kX3NwdXJ3YXJfZW4pIHsKKwkJaWYgKGNoYW5uZWwgPT0gNTQpIHsKKwkJCXRvbmVbMF0gPSAweDIwOworCQkJbm9pc2VbMF0gPSAweDI1RjsKKwkJfSBlbHNlIGlmIChjaGFubmVsID09IDM4IHx8IGNoYW5uZWwgPT0gMTAyIHx8IGNoYW5uZWwgPT0gMTE4KSB7CisJCQlpZiAoMCAvKiBGSVhNRSAqLykgeworCQkJCXRvbmVbMF0gPSAweDIwOworCQkJCW5vaXNlWzBdID0gMHgyMUY7CisJCQl9IGVsc2UgeworCQkJCXRvbmVbMF0gPSAwOworCQkJCW5vaXNlWzBdID0gMDsKKwkJCX0KKwkJfSBlbHNlIGlmIChjaGFubmVsID09IDEzNCkgeworCQkJdG9uZVswXSA9IDB4MjA7CisJCQlub2lzZVswXSA9IDB4MjFGOworCQl9IGVsc2UgaWYgKGNoYW5uZWwgPT0gMTUxKSB7CisJCQl0b25lWzBdID0gMHgxMDsKKwkJCW5vaXNlWzBdID0gMHgyM0Y7CisJCX0gZWxzZSBpZiAoY2hhbm5lbCA9PSAxNTMgfHwgY2hhbm5lbCA9PSAxNjEpIHsKKwkJCXRvbmVbMF0gPSAweDMwOworCQkJbm9pc2VbMF0gPSAweDIzRjsKKwkJfSBlbHNlIHsKKwkJCXRvbmVbMF0gPSAwOworCQkJbm9pc2VbMF0gPSAwOworCQl9CisKKwkJaWYgKCF0b25lWzBdICYmICFub2lzZVswXSkKKwkJCTsgLyogVE9ETzogTiBQSFkgQWRqdXN0IE1pbiBOb2lzZSBWYXIoMSwgdG9uZSwgbm9pc2UpKi8KKwkJZWxzZQorCQkJOyAvKiBUT0RPOiBOIFBIWSBBZGp1c3QgTWluIE5vaXNlIFZhcigwLCBOVUxMLCBOVUxMKSovCisJfQorCisJaWYgKG5waHktPmhhbmdfYXZvaWQpCisJCWI0M19ucGh5X3N0YXlfaW5fY2Fycmllcl9zZWFyY2goZGV2LCAwKTsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9Xb3JrYXJvdW5kc0dhaW5DdHJsICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9nYWluX2NydGxfd29ya2Fyb3VuZHMoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X24gKm5waHkgPSBkZXYtPnBoeS5uOworCXU4IGksIGo7CisJdTggY29kZTsKKworCS8qIFRPRE86IGZvciBQSFkgPj0gMworCXM4ICpsbmExX2dhaW4sICpsbmEyX2dhaW47CisJdTggKmdhaW5fZGIsICpnYWluX2JpdHM7CisJdTE2ICpyZnNlcV9pbml0OworCXU4IGxwZl9nYWluWzZdID0geyAweDAwLCAweDA2LCAweDBDLCAweDEyLCAweDEyLCAweDEyIH07CisJdTggbHBmX2JpdHNbNl0gPSB7IDAsIDEsIDIsIDMsIDMsIDMgfTsKKwkqLworCisJdTggcmZzZXFfZXZlbnRzWzNdID0geyA2LCA4LCA3IH07CisJdTggcmZzZXFfZGVsYXlzWzNdID0geyAxMCwgMzAsIDEgfTsKKworCWlmIChkZXYtPnBoeS5yZXYgPj0gMykgeworCQkvKiBUT0RPICovCisJfSBlbHNlIHsKKwkJLyogU2V0IENsaXAgMiBkZXRlY3QgKi8KKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9DMV9DR0FJTkksCisJCQkJQjQzX05QSFlfQzFfQ0dBSU5JX0NMMkRFVEVDVCk7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfQzJfQ0dBSU5JLAorCQkJCUI0M19OUEhZX0MyX0NHQUlOSV9DTDJERVRFQ1QpOworCisJCS8qIFNldCBuYXJyb3diYW5kIGNsaXAgdGhyZXNob2xkICovCisJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfQzFfTkJDTElQVEhSRVMsIDB4ODQpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0MyX05CQ0xJUFRIUkVTLCAweDg0KTsKKworCQlpZiAoIWRldi0+cGh5LmlzXzQwbWh6KSB7CisJCQkvKiBTZXQgZHdlbGwgbGVuZ3RocyAqLworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9DTElQMV9OQkRXRUxMX0xFTiwgMHgwMDJCKTsKKwkJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfQ0xJUDJfTkJEV0VMTF9MRU4sIDB4MDAyQik7CisJCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX1cxQ0xJUDFfRFdFTExfTEVOLCAweDAwMDkpOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9XMUNMSVAyX0RXRUxMX0xFTiwgMHgwMDA5KTsKKwkJfQorCisJCS8qIFNldCB3aWRlYmFuZCBjbGlwIDIgdGhyZXNob2xkICovCisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0MxX0NMSVBXQlRIUkVTLAorCQkJCX5CNDNfTlBIWV9DMV9DTElQV0JUSFJFU19DTElQMiwKKwkJCQkyMSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0MyX0NMSVBXQlRIUkVTLAorCQkJCX5CNDNfTlBIWV9DMl9DTElQV0JUSFJFU19DTElQMiwKKwkJCQkyMSk7CisKKwkJaWYgKCFkZXYtPnBoeS5pc180MG1oeikgeworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQzFfQ0dBSU5JLAorCQkJCX5CNDNfTlBIWV9DMV9DR0FJTklfR0FJTkJLT0ZGLCAweDEpOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQzJfQ0dBSU5JLAorCQkJCX5CNDNfTlBIWV9DMl9DR0FJTklfR0FJTkJLT0ZGLCAweDEpOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQzFfQ0NLX0NHQUlOSSwKKwkJCQl+QjQzX05QSFlfQzFfQ0NLX0NHQUlOSV9HQUlOQktPRkYsIDB4MSk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9DMl9DQ0tfQ0dBSU5JLAorCQkJCX5CNDNfTlBIWV9DMl9DQ0tfQ0dBSU5JX0dBSU5CS09GRiwgMHgxKTsKKwkJfQorCisJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfQ0NLX1NISUZUQl9SRUYsIDB4ODA5Qyk7CisKKwkJaWYgKG5waHktPmdhaW5fYm9vc3QpIHsKKwkJCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFogJiYKKwkJCSAgICBkZXYtPnBoeS5pc180MG1oeikKKwkJCQljb2RlID0gNDsKKwkJCWVsc2UKKwkJCQljb2RlID0gNTsKKwkJfSBlbHNlIHsKKwkJCWNvZGUgPSBkZXYtPnBoeS5pc180MG1oeiA/IDYgOiA3OworCQl9CisKKwkJLyogU2V0IEhQVkdBMiBpbmRleCAqLworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9DMV9JTklUR0FJTiwKKwkJCQl+QjQzX05QSFlfQzFfSU5JVEdBSU5fSFBWR0EyLAorCQkJCWNvZGUgPDwgQjQzX05QSFlfQzFfSU5JVEdBSU5fSFBWR0EyX1NISUZUKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQzJfSU5JVEdBSU4sCisJCQkJfkI0M19OUEhZX0MyX0lOSVRHQUlOX0hQVkdBMiwKKwkJCQljb2RlIDw8IEI0M19OUEhZX0MyX0lOSVRHQUlOX0hQVkdBMl9TSElGVCk7CisKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIDB4MUQwNik7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sCisJCQkJCShjb2RlIDw8IDggfCAweDdDKSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sCisJCQkJCShjb2RlIDw8IDggfCAweDdDKSk7CisKKwkJLyogVE9ETzogYjQzX25waHlfYWRqdXN0X2xuYV9nYWluX3RhYmxlKGRldik7ICovCisKKwkJaWYgKG5waHktPmVsbmFfZ2Fpbl9jb25maWcpIHsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9BRERSLCAweDA4MDgpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywgMHgwKTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sIDB4MSk7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLCAweDEpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywgMHgxKTsKKworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIDB4MEMwOCk7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLCAweDApOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywgMHgxKTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sIDB4MSk7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLCAweDEpOworCisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgMHgxRDA2KTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sCisJCQkJCShjb2RlIDw8IDggfCAweDc0KSk7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLAorCQkJCQkoY29kZSA8PCA4IHwgMHg3NCkpOworCQl9CisKKwkJaWYgKGRldi0+cGh5LnJldiA9PSAyKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsCisJCQkJCQkoMHgwNDAwICogaSkgKyAweDAwMjApOworCQkJCWZvciAoaiA9IDA7IGogPCAyMTsgaisrKQorCQkJCQliNDNfcGh5X3dyaXRlKGRldiwKKwkJCQkJCUI0M19OUEhZX1RBQkxFX0RBVEFMTywgMyAqIGopOworCQkJfQorCisJCQliNDNfbnBoeV9zZXRfcmZfc2VxdWVuY2UoZGV2LCA1LAorCQkJCQlyZnNlcV9ldmVudHMsIHJmc2VxX2RlbGF5cywgMyk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9PVkVSX0RHQUlOMSwKKwkJCQkodTE2KX5CNDNfTlBIWV9PVkVSX0RHQUlOX0NDS0RHRUNWLAorCQkJCTB4NUEgPDwgQjQzX05QSFlfT1ZFUl9ER0FJTl9DQ0tER0VDVl9TSElGVCk7CisKKwkJCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX1BIWV9OKDB4QzVEKSwKKwkJCQkJCTB4RkY4MCwgNCk7CisJCX0KKwl9Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vV29ya2Fyb3VuZHMgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3dvcmthcm91bmRzKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3Qgc3NiX2J1cyAqYnVzID0gZGV2LT5kZXYtPmJ1czsKKwlzdHJ1Y3QgYjQzX3BoeSAqcGh5ID0gJmRldi0+cGh5OworCXN0cnVjdCBiNDNfcGh5X24gKm5waHkgPSBwaHktPm47CisKKwl1OCBldmVudHMxWzddID0geyAweDAsIDB4MSwgMHgyLCAweDgsIDB4NCwgMHg1LCAweDMgfTsKKwl1OCBkZWxheXMxWzddID0geyAweDgsIDB4NiwgMHg2LCAweDIsIDB4NCwgMHgzQywgMHgxIH07CisKKwl1OCBldmVudHMyWzddID0geyAweDAsIDB4MywgMHg1LCAweDQsIDB4MiwgMHgxLCAweDggfTsKKwl1OCBkZWxheXMyWzddID0geyAweDgsIDB4NiwgMHgyLCAweDQsIDB4NCwgMHg2LCAweDEgfTsKKworCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCWI0M19ucGh5X2NsYXNzaWZpZXIoZGV2LCAxLCAwKTsKKwllbHNlCisJCWI0M19ucGh5X2NsYXNzaWZpZXIoZGV2LCAxLCAxKTsKKworCWlmIChucGh5LT5oYW5nX2F2b2lkKQorCQliNDNfbnBoeV9zdGF5X2luX2NhcnJpZXJfc2VhcmNoKGRldiwgMSk7CisKKwliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0lRRkxJUCwKKwkJICAgIEI0M19OUEhZX0lRRkxJUF9BREMxIHwgQjQzX05QSFlfSVFGTElQX0FEQzIpOworCisJaWYgKGRldi0+cGh5LnJldiA+PSAzKSB7CisJCS8qIFRPRE8gKi8KKwl9IGVsc2UgeworCQlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF81R0haICYmCisJCSAgICBucGh5LT5iYW5kNWdfcHdyZ2FpbikgeworCQkJYjQzX3JhZGlvX21hc2soZGV2LCBCMjA1NV9DMV9UWF9SRl9TUEFSRSwgfjB4OCk7CisJCQliNDNfcmFkaW9fbWFzayhkZXYsIEIyMDU1X0MyX1RYX1JGX1NQQVJFLCB+MHg4KTsKKwkJfSBlbHNlIHsKKwkJCWI0M19yYWRpb19zZXQoZGV2LCBCMjA1NV9DMV9UWF9SRl9TUEFSRSwgMHg4KTsKKwkJCWI0M19yYWRpb19zZXQoZGV2LCBCMjA1NV9DMl9UWF9SRl9TUEFSRSwgMHg4KTsKKwkJfQorCisJCS8qIFRPRE86IGNvbnZlcnQgdG8gYjQzX250YWJfd3JpdGU/ICovCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9BRERSLCAweDIwMDApOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLCAweDAwMEEpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgMHgyMDEwKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywgMHgwMDBBKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIDB4MjAwMik7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sIDB4Q0RBQSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9BRERSLCAweDIwMTIpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLCAweENEQUEpOworCisJCWlmIChkZXYtPnBoeS5yZXYgPCAyKSB7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgMHgyMDA4KTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sIDB4MDAwMCk7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgMHgyMDE4KTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sIDB4MDAwMCk7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgMHgyMDA3KTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sIDB4N0FBQik7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgMHgyMDE3KTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sIDB4N0FBQik7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgMHgyMDA2KTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sIDB4MDgwMCk7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgMHgyMDE2KTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sIDB4MDgwMCk7CisJCX0KKworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfTFVUX1RSU1dfTE8xLCAweDJEOCk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9MVVRfVFJTV19VUDEsIDB4MzAxKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0xVVF9UUlNXX0xPMiwgMHgyRDgpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfTFVUX1RSU1dfVVAyLCAweDMwMSk7CisKKwkJaWYgKGJ1cy0+c3Byb20uYm9hcmRmbGFnczJfbG8gJiAweDEwMCAmJgorCQkgICAgYnVzLT5ib2FyZGluZm8udHlwZSA9PSAweDhCKSB7CisJCQlkZWxheXMxWzBdID0gMHgxOworCQkJZGVsYXlzMVs1XSA9IDB4MTQ7CisJCX0KKwkJYjQzX25waHlfc2V0X3JmX3NlcXVlbmNlKGRldiwgMCwgZXZlbnRzMSwgZGVsYXlzMSwgNyk7CisJCWI0M19ucGh5X3NldF9yZl9zZXF1ZW5jZShkZXYsIDEsIGV2ZW50czIsIGRlbGF5czIsIDcpOworCisJCWI0M19ucGh5X2dhaW5fY3J0bF93b3JrYXJvdW5kcyhkZXYpOworCisJCWlmIChkZXYtPnBoeS5yZXYgPCAyKSB7CisJCQlpZiAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUlhDVEwpICYgMHgyKQorCQkJCTsgLypUT0RPOiBiNDNfbWhmKGRldiwgMiwgMHgwMDEwLCAweDAwMTAsIDMpOyovCisJCX0gZWxzZSBpZiAoZGV2LT5waHkucmV2ID09IDIpIHsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9DUlNDSEVDSzIsIDApOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0NSU0NIRUNLMywgMCk7CisJCX0KKworCQlpZiAoZGV2LT5waHkucmV2IDwgMikKKwkJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX1NDUkFNX1NJR0NUTCwKKwkJCQkJfkI0M19OUEhZX1NDUkFNX1NJR0NUTF9TQ00pOworCisJCS8qIFNldCBwaGFzZSB0cmFjayBhbHBoYSBhbmQgYmV0YSAqLworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUEhBU0VUUl9BMCwgMHgxMjUpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUEhBU0VUUl9BMSwgMHgxQjMpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUEhBU0VUUl9BMiwgMHgxMDUpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUEhBU0VUUl9CMCwgMHgxNkUpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUEhBU0VUUl9CMSwgMHhDRCk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9QSEFTRVRSX0IyLCAweDIwKTsKKworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9QSUxfRFcxLAorCQkJCSh1MTYpfkI0M19OUEhZX1BJTF9EV182NFFBTSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UWEZfMjBDT19TMkIxLCAweEI1KTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RYRl8yMENPX1MyQjIsIDB4QTQpOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVFhGXzIwQ09fUzJCMywgMHgwMCk7CisKKwkJaWYgKGRldi0+cGh5LnJldiA9PSAyKQorCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9GSU5FUlgyX0NHQywKKwkJCQkJQjQzX05QSFlfRklORVJYMl9DR0NfREVDR0MpOworCX0KKworCWlmIChucGh5LT5oYW5nX2F2b2lkKQorCQliNDNfbnBoeV9zdGF5X2luX2NhcnJpZXJfc2VhcmNoKGRldiwgMCk7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vTG9hZFNhbXBsZVRhYmxlICovCitzdGF0aWMgaW50IGI0M19ucGh5X2xvYWRfc2FtcGxlcyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCisJCQkJCXN0cnVjdCBiNDNfYzMyICpzYW1wbGVzLCB1MTYgbGVuKSB7CisJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IGRldi0+cGh5Lm47CisJdTE2IGk7CisJdTMyICpkYXRhOworCisJZGF0YSA9IGt6YWxsb2MobGVuICogc2l6ZW9mKHUzMiksIEdGUF9LRVJORUwpOworCWlmICghZGF0YSkgeworCQliNDNlcnIoZGV2LT53bCwgImFsbG9jYXRpb24gZm9yIHNhbXBsZXMgbG9hZGluZyBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJaWYgKG5waHktPmhhbmdfYXZvaWQpCisJCWI0M19ucGh5X3N0YXlfaW5fY2Fycmllcl9zZWFyY2goZGV2LCAxKTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgeworCQlkYXRhW2ldID0gKHNhbXBsZXNbaV0uaSAmIDB4M0ZGIDw8IDEwKTsKKwkJZGF0YVtpXSB8PSBzYW1wbGVzW2ldLnEgJiAweDNGRjsKKwl9CisJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMzIoMTcsIDApLCBsZW4sIGRhdGEpOworCisJa2ZyZWUoZGF0YSk7CisJaWYgKG5waHktPmhhbmdfYXZvaWQpCisJCWI0M19ucGh5X3N0YXlfaW5fY2Fycmllcl9zZWFyY2goZGV2LCAwKTsKKwlyZXR1cm4gMDsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9HZW5Mb2FkU2FtcGxlcyAqLworc3RhdGljIHUxNiBiNDNfbnBoeV9nZW5fbG9hZF9zYW1wbGVzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIGZyZXEsIHUxNiBtYXgsCisJCQkJCWJvb2wgdGVzdCkKK3sKKwlpbnQgaTsKKwl1MTYgYncsIGxlbiwgcm90LCBhbmdsZTsKKwlzdHJ1Y3QgYjQzX2MzMiAqc2FtcGxlczsKKworCisJYncgPSAoZGV2LT5waHkuaXNfNDBtaHopID8gNDAgOiAyMDsKKwlsZW4gPSBidyA8PCAzOworCisJaWYgKHRlc3QpIHsKKwkJaWYgKGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0JCQ0ZHKSAmIEI0M19OUEhZX0JCQ0ZHX1JTVFJYKQorCQkJYncgPSA4MjsKKwkJZWxzZQorCQkJYncgPSA4MDsKKworCQlpZiAoZGV2LT5waHkuaXNfNDBtaHopCisJCQlidyA8PD0gMTsKKworCQlsZW4gPSBidyA8PCAxOworCX0KKworCXNhbXBsZXMgPSBremFsbG9jKGxlbiAqIHNpemVvZihzdHJ1Y3QgYjQzX2MzMiksIEdGUF9LRVJORUwpOworCWlmICghc2FtcGxlcykgeworCQliNDNlcnIoZGV2LT53bCwgImFsbG9jYXRpb24gZm9yIHNhbXBsZXMgZ2VuZXJhdGlvbiBmYWlsZWRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJcm90ID0gKCgoZnJlcSAqIDM2KSAvIGJ3KSA8PCAxNikgLyAxMDA7CisJYW5nbGUgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXNhbXBsZXNbaV0gPSBiNDNfY29yZGljKGFuZ2xlKTsKKwkJYW5nbGUgKz0gcm90OworCQlzYW1wbGVzW2ldLnEgPSBDT1JESUNfQ09OVkVSVChzYW1wbGVzW2ldLnEgKiBtYXgpOworCQlzYW1wbGVzW2ldLmkgPSBDT1JESUNfQ09OVkVSVChzYW1wbGVzW2ldLmkgKiBtYXgpOworCX0KKworCWkgPSBiNDNfbnBoeV9sb2FkX3NhbXBsZXMoZGV2LCBzYW1wbGVzLCBsZW4pOworCWtmcmVlKHNhbXBsZXMpOworCXJldHVybiAoaSA8IDApID8gMCA6IGxlbjsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9SdW5TYW1wbGVzICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9ydW5fc2FtcGxlcyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiBzYW1wcywgdTE2IGxvb3BzLAorCQkJCQl1MTYgd2FpdCwgYm9vbCBpcW1vZGUsIGJvb2wgZGFjX3Rlc3QpCit7CisJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IGRldi0+cGh5Lm47CisJaW50IGk7CisJdTE2IHNlcV9tb2RlOworCXUzMiB0bXA7CisKKwlpZiAobnBoeS0+aGFuZ19hdm9pZCkKKwkJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIHRydWUpOworCisJaWYgKChucGh5LT5iYl9tdWx0X3NhdmUgJiAweDgwMDAwMDAwKSA9PSAwKSB7CisJCXRtcCA9IGI0M19udGFiX3JlYWQoZGV2LCBCNDNfTlRBQjE2KDE1LCA4NykpOworCQlucGh5LT5iYl9tdWx0X3NhdmUgPSAodG1wICYgMHhGRkZGKSB8IDB4ODAwMDAwMDA7CisJfQorCisJaWYgKCFkZXYtPnBoeS5pc180MG1oeikKKwkJdG1wID0gMHg2NDY0OworCWVsc2UKKwkJdG1wID0gMHg0NzQ3OworCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNigxNSwgODcpLCB0bXApOworCisJaWYgKG5waHktPmhhbmdfYXZvaWQpCisJCWI0M19ucGh5X3N0YXlfaW5fY2Fycmllcl9zZWFyY2goZGV2LCBmYWxzZSk7CisKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfU0FNUF9ERVBDTlQsIChzYW1wcyAtIDEpKTsKKworCWlmIChsb29wcyAhPSAweEZGRkYpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9TQU1QX0xPT1BDTlQsIChsb29wcyAtIDEpKTsKKwllbHNlCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9TQU1QX0xPT1BDTlQsIGxvb3BzKTsKKworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9TQU1QX1dBSVRDTlQsIHdhaXQpOworCisJc2VxX21vZGUgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9SRlNFUU1PREUpOworCisJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9SRlNFUU1PREUsIEI0M19OUEhZX1JGU0VRTU9ERV9DQU9WRVIpOworCWlmIChpcW1vZGUpIHsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfSVFMT0NBTF9DTURHQ1RMLCAweDdGRkYpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0lRTE9DQUxfQ01ER0NUTCwgMHg4MDAwKTsKKwl9IGVsc2UgeworCQlpZiAoZGFjX3Rlc3QpCisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfU0FNUF9DTUQsIDUpOworCQllbHNlCisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfU0FNUF9DTUQsIDEpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyBpKyspIHsKKwkJaWYgKGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1JGU0VRU1QpICYgMSkgeworCQkJaSA9IDA7CisJCQlicmVhazsKKwkJfQorCQl1ZGVsYXkoMTApOworCX0KKwlpZiAoaSkKKwkJYjQzZXJyKGRldi0+d2wsICJydW4gc2FtcGxlcyB0aW1lb3V0XG4iKTsKKworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRlNFUU1PREUsIHNlcV9tb2RlKTsKK30KKworLyoKKyAqIFRyYW5zbWl0cyBhIGtub3duIHZhbHVlIGZvciBMTyBjYWxpYnJhdGlvbgorICogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9UWFRvbmUKKyAqLworc3RhdGljIGludCBiNDNfbnBoeV90eF90b25lKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIGZyZXEsIHUxNiBtYXhfdmFsLAorCQkJCWJvb2wgaXFtb2RlLCBib29sIGRhY190ZXN0KQoreworCXUxNiBzYW1wID0gYjQzX25waHlfZ2VuX2xvYWRfc2FtcGxlcyhkZXYsIGZyZXEsIG1heF92YWwsIGRhY190ZXN0KTsKKwlpZiAoc2FtcCA9PSAwKQorCQlyZXR1cm4gLTE7CisJYjQzX25waHlfcnVuX3NhbXBsZXMoZGV2LCBzYW1wLCAweEZGRkYsIDAsIGlxbW9kZSwgZGFjX3Rlc3QpOworCXJldHVybiAwOworfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1R4UHdyQ3RybENvZWZTZXR1cCAqLworc3RhdGljIHZvaWQgYjQzX25waHlfdHhfcHdyX2N0cmxfY29lZl9zZXR1cChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IGRldi0+cGh5Lm47CisJaW50IGksIGo7CisJdTMyIHRtcDsKKwl1MzIgY3VyX3JlYWwsIGN1cl9pbWFnLCByZWFsX3BhcnQsIGltYWdfcGFydDsKKworCXUxNiBidWZmZXJbN107CisKKwlpZiAobnBoeS0+aGFuZ19hdm9pZCkKKwkJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIHRydWUpOworCisJYjQzX250YWJfcmVhZF9idWxrKGRldiwgQjQzX05UQUIxNigxNSwgODApLCA3LCBidWZmZXIpOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQl0bXAgPSAoKGJ1ZmZlcltpICogMl0gJiAweDNGRikgPDwgMTApIHwKKwkJCShidWZmZXJbaSAqIDIgKyAxXSAmIDB4M0ZGKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsCisJCQkJKCgoaSArIDI2KSA8PCAxMCkgfCAzMjApKTsKKwkJZm9yIChqID0gMDsgaiA8IDEyODsgaisrKSB7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUhJLAorCQkJCQkoKHRtcCA+PiAxNikgJiAweEZGRkYpKTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sCisJCQkJCSh0bXAgJiAweEZGRkYpKTsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJdG1wID0gYnVmZmVyWzUgKyBpXTsKKwkJcmVhbF9wYXJ0ID0gKHRtcCA+PiA4KSAmIDB4RkY7CisJCWltYWdfcGFydCA9ICh0bXAgJiAweEZGKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsCisJCQkJKCgoaSArIDI2KSA8PCAxMCkgfCA0NDgpKTsKKworCQlpZiAoZGV2LT5waHkucmV2ID49IDMpIHsKKwkJCWN1cl9yZWFsID0gcmVhbF9wYXJ0OworCQkJY3VyX2ltYWcgPSBpbWFnX3BhcnQ7CisJCQl0bXAgPSAoKGN1cl9yZWFsICYgMHhGRikgPDwgOCkgfCAoY3VyX2ltYWcgJiAweEZGKTsKKwkJfQorCisJCWZvciAoaiA9IDA7IGogPCAxMjg7IGorKykgeworCQkJaWYgKGRldi0+cGh5LnJldiA8IDMpIHsKKwkJCQljdXJfcmVhbCA9IChyZWFsX3BhcnQgKiBsb3NjYWxlW2pdICsgMTI4KSA+PiA4OworCQkJCWN1cl9pbWFnID0gKGltYWdfcGFydCAqIGxvc2NhbGVbal0gKyAxMjgpID4+IDg7CisJCQkJdG1wID0gKChjdXJfcmVhbCAmIDB4RkYpIDw8IDgpIHwKKwkJCQkJKGN1cl9pbWFnICYgMHhGRik7CisJCQl9CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUhJLAorCQkJCQkoKHRtcCA+PiAxNikgJiAweEZGRkYpKTsKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8sCisJCQkJCSh0bXAgJiAweEZGRkYpKTsKKwkJfQorCX0KKworCWlmIChkZXYtPnBoeS5yZXYgPj0gMykgeworCQliNDNfc2htX3dyaXRlMTYoZGV2LCBCNDNfU0hNX1NIQVJFRCwKKwkJCQlCNDNfU0hNX1NIX05QSFlfVFhQV1JfSU5EWDAsIDB4RkZGRik7CisJCWI0M19zaG1fd3JpdGUxNihkZXYsIEI0M19TSE1fU0hBUkVELAorCQkJCUI0M19TSE1fU0hfTlBIWV9UWFBXUl9JTkRYMSwgMHhGRkZGKTsKKwl9CisKKwlpZiAobnBoeS0+aGFuZ19hdm9pZCkKKwkJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIGZhbHNlKTsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9TZXRSZlNlcSAqLworc3RhdGljIHZvaWQgYjQzX25waHlfc2V0X3JmX3NlcXVlbmNlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTggY21kLAorCQkJCQl1OCAqZXZlbnRzLCB1OCAqZGVsYXlzLCB1OCBsZW5ndGgpCit7CisJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IGRldi0+cGh5Lm47CisJdTggaTsKKwl1OCBlbmQgPSAoZGV2LT5waHkucmV2ID49IDMpID8gMHgxRiA6IDB4MEY7CisJdTE2IG9mZnNldDEgPSBjbWQgPDwgNDsKKwl1MTYgb2Zmc2V0MiA9IG9mZnNldDEgKyAweDgwOworCisJaWYgKG5waHktPmhhbmdfYXZvaWQpCisJCWI0M19ucGh5X3N0YXlfaW5fY2Fycmllcl9zZWFyY2goZGV2LCB0cnVlKTsKKworCWI0M19udGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTlRBQjgoNywgb2Zmc2V0MSksIGxlbmd0aCwgZXZlbnRzKTsKKwliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUI4KDcsIG9mZnNldDIpLCBsZW5ndGgsIGRlbGF5cyk7CisKKwlmb3IgKGkgPSBsZW5ndGg7IGkgPCAxNjsgaSsrKSB7CisJCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUI4KDcsIG9mZnNldDEgKyBpKSwgZW5kKTsKKwkJYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjgoNywgb2Zmc2V0MiArIGkpLCAxKTsKKwl9CisKKwlpZiAobnBoeS0+aGFuZ19hdm9pZCkKKwkJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIGZhbHNlKTsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9Gb3JjZVJGU2VxICovCiBzdGF0aWMgdm9pZCBiNDNfbnBoeV9mb3JjZV9yZl9zZXF1ZW5jZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkJICAgICAgIGVudW0gYjQzX25waHlfcmZfc2VxdWVuY2Ugc2VxKQogewpAQCAtMzc2LDYgKzEyNjYsNyBAQAogCQlbQjQzX1JGU0VRX1VQREFURV9HQUlOVV0JPSBCNDNfTlBIWV9SRlNFUVRSX1VQR1UsCiAJfTsKIAlpbnQgaTsKKwl1MTYgc2VxX21vZGUgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9SRlNFUU1PREUpOwogCiAJQjQzX1dBUk5fT04oc2VxID49IEFSUkFZX1NJWkUodHJpZ2dlcikpOwogCkBAIC0zODksOCArMTI4MCwxODEgQEAKIAl9CiAJYjQzZXJyKGRldi0+d2wsICJSRiBzZXF1ZW5jZSBzdGF0dXMgdGltZW91dFxuIik7CiBvazoKLQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9SRlNFUU1PREUsCi0JCSAgICAgfihCNDNfTlBIWV9SRlNFUU1PREVfQ0FPVkVSIHwgQjQzX05QSFlfUkZTRVFNT0RFX1RST1ZFUikpOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRlNFUU1PREUsIHNlcV9tb2RlKTsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9SRkN0cmxPdmVycmlkZSAqLworc3RhdGljIHZvaWQgYjQzX25waHlfcmZfY29udHJvbF9vdmVycmlkZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUxNiBmaWVsZCwKKwkJCQkJCXUxNiB2YWx1ZSwgdTggY29yZSwgYm9vbCBvZmYpCit7CisJaW50IGk7CisJdTggaW5kZXggPSBmbHMoZmllbGQpOworCXU4IGFkZHIsIGVuX2FkZHIsIHZhbF9hZGRyOworCS8qIHdlIGV4cGVjdCBvbmx5IG9uZSBiaXQgc2V0ICovCisJQjQzX1dBUk5fT04oZmllbGQgJiAofigxIDw8IChpbmRleCAtIDEpKSkpOworCisJaWYgKGRldi0+cGh5LnJldiA+PSAzKSB7CisJCWNvbnN0IHN0cnVjdCBucGh5X3JmX2NvbnRyb2xfb3ZlcnJpZGVfcmV2MyAqcmZfY3RybDsKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJaWYgKGluZGV4ID09IDAgfHwgaW5kZXggPT0gMTYpIHsKKwkJCQliNDNlcnIoZGV2LT53bCwKKwkJCQkJIlVuc3VwcG9ydGVkIFJGIEN0cmwgT3ZlcnJpZGUgY2FsbFxuIik7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlyZl9jdHJsID0gJnRibF9yZl9jb250cm9sX292ZXJyaWRlX3JldjNbaW5kZXggLSAxXTsKKwkJCWVuX2FkZHIgPSBCNDNfUEhZX04oKGkgPT0gMCkgPworCQkJCXJmX2N0cmwtPmVuX2FkZHIwIDogcmZfY3RybC0+ZW5fYWRkcjEpOworCQkJdmFsX2FkZHIgPSBCNDNfUEhZX04oKGkgPT0gMCkgPworCQkJCXJmX2N0cmwtPnZhbF9hZGRyMCA6IHJmX2N0cmwtPnZhbF9hZGRyMSk7CisKKwkJCWlmIChvZmYpIHsKKwkJCQliNDNfcGh5X21hc2soZGV2LCBlbl9hZGRyLCB+KGZpZWxkKSk7CisJCQkJYjQzX3BoeV9tYXNrKGRldiwgdmFsX2FkZHIsCisJCQkJCQl+KHJmX2N0cmwtPnZhbF9tYXNrKSk7CisJCQl9IGVsc2UgeworCQkJCWlmIChjb3JlID09IDAgfHwgKCgxIDw8IGNvcmUpICYgaSkgIT0gMCkgeworCQkJCQliNDNfcGh5X3NldChkZXYsIGVuX2FkZHIsIGZpZWxkKTsKKwkJCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgdmFsX2FkZHIsCisJCQkJCQl+KHJmX2N0cmwtPnZhbF9tYXNrKSwKKwkJCQkJCSh2YWx1ZSA8PCByZl9jdHJsLT52YWxfc2hpZnQpKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQljb25zdCBzdHJ1Y3QgbnBoeV9yZl9jb250cm9sX292ZXJyaWRlX3JldjIgKnJmX2N0cmw7CisJCWlmIChvZmYpIHsKKwkJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX1JGQ1RMX09WRVIsIH4oZmllbGQpKTsKKwkJCXZhbHVlID0gMDsKKwkJfSBlbHNlIHsKKwkJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfUkZDVExfT1ZFUiwgZmllbGQpOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQkJaWYgKGluZGV4IDw9IDEgfHwgaW5kZXggPT0gMTYpIHsKKwkJCQliNDNlcnIoZGV2LT53bCwKKwkJCQkJIlVuc3VwcG9ydGVkIFJGIEN0cmwgT3ZlcnJpZGUgY2FsbFxuIik7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlpZiAoaW5kZXggPT0gMiB8fCBpbmRleCA9PSAxMCB8fAorCQkJICAgIChpbmRleCA+PSAxMyAmJiBpbmRleCA8PSAxNSkpIHsKKwkJCQljb3JlID0gMTsKKwkJCX0KKworCQkJcmZfY3RybCA9ICZ0YmxfcmZfY29udHJvbF9vdmVycmlkZV9yZXYyW2luZGV4IC0gMl07CisJCQlhZGRyID0gQjQzX1BIWV9OKChpID09IDApID8KKwkJCQlyZl9jdHJsLT5hZGRyMCA6IHJmX2N0cmwtPmFkZHIxKTsKKworCQkJaWYgKChjb3JlICYgKDEgPDwgaSkpICE9IDApCisJCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgYWRkciwgfihyZl9jdHJsLT5ibWFzayksCisJCQkJCQkodmFsdWUgPDwgcmZfY3RybC0+c2hpZnQpKTsKKworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9SRkNUTF9PVkVSLCAweDEpOworCQkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9SRkNUTF9DTUQsCisJCQkJCUI0M19OUEhZX1JGQ1RMX0NNRF9TVEFSVCk7CisJCQl1ZGVsYXkoMSk7CisJCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9SRkNUTF9PVkVSLCAweEZGRkUpOworCQl9CisJfQorfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1JGQ3RybEludGNPdmVycmlkZSAqLworc3RhdGljIHZvaWQgYjQzX25waHlfcmZfY29udHJvbF9pbnRjX292ZXJyaWRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTggZmllbGQsCisJCQkJCQl1MTYgdmFsdWUsIHU4IGNvcmUpCit7CisJdTggaSwgajsKKwl1MTYgcmVnLCB0bXAsIHZhbDsKKworCUI0M19XQVJOX09OKGRldi0+cGh5LnJldiA8IDMpOworCUI0M19XQVJOX09OKGZpZWxkID4gNCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWlmICgoY29yZSA9PSAxICYmIGkgPT0gMSkgfHwgKGNvcmUgPT0gMiAmJiAhaSkpCisJCQljb250aW51ZTsKKworCQlyZWcgPSAoaSA9PSAwKSA/CisJCQlCNDNfTlBIWV9SRkNUTF9JTlRDMSA6IEI0M19OUEhZX1JGQ1RMX0lOVEMyOworCQliNDNfcGh5X21hc2soZGV2LCByZWcsIDB4RkJGRik7CisKKwkJc3dpdGNoIChmaWVsZCkgeworCQljYXNlIDA6CisJCQliNDNfcGh5X3dyaXRlKGRldiwgcmVnLCAwKTsKKwkJCWI0M19ucGh5X2ZvcmNlX3JmX3NlcXVlbmNlKGRldiwgQjQzX1JGU0VRX1JFU0VUMlJYKTsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlpZiAoIWkpIHsKKwkJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRkNUTF9JTlRDMSwKKwkJCQkJCTB4RkMzRiwgKHZhbHVlIDw8IDYpKTsKKwkJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9UWEZfNDBDT19CMVMxLAorCQkJCQkJMHhGRkZFLCAxKTsKKwkJCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX1JGQ1RMX0NNRCwKKwkJCQkJCUI0M19OUEhZX1JGQ1RMX0NNRF9TVEFSVCk7CisJCQkJZm9yIChqID0gMDsgaiA8IDEwMDsgaisrKSB7CisJCQkJCWlmIChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9SRkNUTF9DTUQpICYgQjQzX05QSFlfUkZDVExfQ01EX1NUQVJUKSB7CisJCQkJCQlqID0gMDsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCXVkZWxheSgxMCk7CisJCQkJfQorCQkJCWlmIChqKQorCQkJCQliNDNlcnIoZGV2LT53bCwKKwkJCQkJCSJpbnRjIG92ZXJyaWRlIHRpbWVvdXRcbiIpOworCQkJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX1RYRl80MENPX0IxUzEsCisJCQkJCQkweEZGRkUpOworCQkJfSBlbHNlIHsKKwkJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRkNUTF9JTlRDMiwKKwkJCQkJCTB4RkMzRiwgKHZhbHVlIDw8IDYpKTsKKwkJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRkNUTF9PVkVSLAorCQkJCQkJMHhGRkZFLCAxKTsKKwkJCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX1JGQ1RMX0NNRCwKKwkJCQkJCUI0M19OUEhZX1JGQ1RMX0NNRF9SWFRYKTsKKwkJCQlmb3IgKGogPSAwOyBqIDwgMTAwOyBqKyspIHsKKwkJCQkJaWYgKGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1JGQ1RMX0NNRCkgJiBCNDNfTlBIWV9SRkNUTF9DTURfUlhUWCkgeworCQkJCQkJaiA9IDA7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQl1ZGVsYXkoMTApOworCQkJCX0KKwkJCQlpZiAoaikKKwkJCQkJYjQzZXJyKGRldi0+d2wsCisJCQkJCQkiaW50YyBvdmVycmlkZSB0aW1lb3V0XG4iKTsKKwkJCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9SRkNUTF9PVkVSLAorCQkJCQkJMHhGRkZFKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF81R0haKSB7CisJCQkJdG1wID0gMHgwMDIwOworCQkJCXZhbCA9IHZhbHVlIDw8IDU7CisJCQl9IGVsc2UgeworCQkJCXRtcCA9IDB4MDAxMDsKKwkJCQl2YWwgPSB2YWx1ZSA8PCA0OworCQkJfQorCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgcmVnLCB+dG1wLCB2YWwpOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKKwkJCQl0bXAgPSAweDAwMDE7CisJCQkJdmFsID0gdmFsdWU7CisJCQl9IGVsc2UgeworCQkJCXRtcCA9IDB4MDAwNDsKKwkJCQl2YWwgPSB2YWx1ZSA8PCAyOworCQkJfQorCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgcmVnLCB+dG1wLCB2YWwpOworCQkJYnJlYWs7CisJCWNhc2UgNDoKKwkJCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzVHSFopIHsKKwkJCQl0bXAgPSAweDAwMDI7CisJCQkJdmFsID0gdmFsdWUgPDwgMTsKKwkJCX0gZWxzZSB7CisJCQkJdG1wID0gMHgwMDA4OworCQkJCXZhbCA9IHZhbHVlIDw8IDM7CisJCQl9CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCByZWcsIH50bXAsIHZhbCk7CisJCQlicmVhazsKKwkJfQorCX0KIH0KIAogc3RhdGljIHZvaWQgYjQzX25waHlfYnBoeV9pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKQEAgLTQxMSw4MSArMTQ3NSwxNjgwIEBACiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19QSFlfTl9CTU9ERSgweDM4KSwgMHg2NjgpOwogfQogCi0vKiBSU1NJIENhbGlicmF0aW9uICovCi1zdGF0aWMgdm9pZCBiNDNfbnBoeV9yc3NpX2NhbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IHR5cGUpCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1NjYWxlT2Zmc2V0UnNzaSAqLworc3RhdGljIHZvaWQgYjQzX25waHlfc2NhbGVfb2Zmc2V0X3Jzc2koc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgc2NhbGUsCisJCQkJICAgICAgIHM4IG9mZnNldCwgdTggY29yZSwgdTggcmFpbCwgdTggdHlwZSkKIHsKLQkvL1RPRE8KKwl1MTYgdG1wOworCWJvb2wgY29yZTFvcjUgPSAoY29yZSA9PSAxKSB8fCAoY29yZSA9PSA1KTsKKwlib29sIGNvcmUyb3I1ID0gKGNvcmUgPT0gMikgfHwgKGNvcmUgPT0gNSk7CisKKwlvZmZzZXQgPSBjbGFtcF92YWwob2Zmc2V0LCAtMzIsIDMxKTsKKwl0bXAgPSAoKHNjYWxlICYgMHgzRikgPDwgOCkgfCAob2Zmc2V0ICYgMHgzRik7CisKKwlpZiAoY29yZTFvcjUgJiYgKHJhaWwgPT0gMCkgJiYgKHR5cGUgPT0gMikpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMElfUlNTSV9aLCB0bXApOworCWlmIChjb3JlMW9yNSAmJiAocmFpbCA9PSAxKSAmJiAodHlwZSA9PSAyKSkKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18wUV9SU1NJX1osIHRtcCk7CisJaWYgKGNvcmUyb3I1ICYmIChyYWlsID09IDApICYmICh0eXBlID09IDIpKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzFJX1JTU0lfWiwgdG1wKTsKKwlpZiAoY29yZTJvcjUgJiYgKHJhaWwgPT0gMSkgJiYgKHR5cGUgPT0gMikpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMVFfUlNTSV9aLCB0bXApOworCWlmIChjb3JlMW9yNSAmJiAocmFpbCA9PSAwKSAmJiAodHlwZSA9PSAwKSkKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18wSV9SU1NJX1gsIHRtcCk7CisJaWYgKGNvcmUxb3I1ICYmIChyYWlsID09IDEpICYmICh0eXBlID09IDApKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzBRX1JTU0lfWCwgdG1wKTsKKwlpZiAoY29yZTJvcjUgJiYgKHJhaWwgPT0gMCkgJiYgKHR5cGUgPT0gMCkpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMUlfUlNTSV9YLCB0bXApOworCWlmIChjb3JlMm9yNSAmJiAocmFpbCA9PSAxKSAmJiAodHlwZSA9PSAwKSkKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18xUV9SU1NJX1gsIHRtcCk7CisJaWYgKGNvcmUxb3I1ICYmIChyYWlsID09IDApICYmICh0eXBlID09IDEpKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzBJX1JTU0lfWSwgdG1wKTsKKwlpZiAoY29yZTFvcjUgJiYgKHJhaWwgPT0gMSkgJiYgKHR5cGUgPT0gMSkpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMFFfUlNTSV9ZLCB0bXApOworCWlmIChjb3JlMm9yNSAmJiAocmFpbCA9PSAwKSAmJiAodHlwZSA9PSAxKSkKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18xSV9SU1NJX1ksIHRtcCk7CisJaWYgKGNvcmUyb3I1ICYmIChyYWlsID09IDEpICYmICh0eXBlID09IDEpKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzFRX1JTU0lfWSwgdG1wKTsKKwlpZiAoY29yZTFvcjUgJiYgKHJhaWwgPT0gMCkgJiYgKHR5cGUgPT0gNikpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMElfVEJELCB0bXApOworCWlmIChjb3JlMW9yNSAmJiAocmFpbCA9PSAxKSAmJiAodHlwZSA9PSA2KSkKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18wUV9UQkQsIHRtcCk7CisJaWYgKGNvcmUyb3I1ICYmIChyYWlsID09IDApICYmICh0eXBlID09IDYpKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzFJX1RCRCwgdG1wKTsKKwlpZiAoY29yZTJvcjUgJiYgKHJhaWwgPT0gMSkgJiYgKHR5cGUgPT0gNikpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMVFfVEJELCB0bXApOworCWlmIChjb3JlMW9yNSAmJiAocmFpbCA9PSAwKSAmJiAodHlwZSA9PSAzKSkKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18wSV9QV1JERVQsIHRtcCk7CisJaWYgKGNvcmUxb3I1ICYmIChyYWlsID09IDEpICYmICh0eXBlID09IDMpKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzBRX1BXUkRFVCwgdG1wKTsKKwlpZiAoY29yZTJvcjUgJiYgKHJhaWwgPT0gMCkgJiYgKHR5cGUgPT0gMykpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMUlfUFdSREVULCB0bXApOworCWlmIChjb3JlMm9yNSAmJiAocmFpbCA9PSAxKSAmJiAodHlwZSA9PSAzKSkKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18xUV9QV1JERVQsIHRtcCk7CisJaWYgKGNvcmUxb3I1ICYmICh0eXBlID09IDQpKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzBJX1RTU0ksIHRtcCk7CisJaWYgKGNvcmUyb3I1ICYmICh0eXBlID09IDQpKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzFJX1RTU0ksIHRtcCk7CisJaWYgKGNvcmUxb3I1ICYmICh0eXBlID09IDUpKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzBRX1RTU0ksIHRtcCk7CisJaWYgKGNvcmUyb3I1ICYmICh0eXBlID09IDUpKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzFRX1RTU0ksIHRtcCk7CiB9CiAKLWludCBiNDNfcGh5X2luaXRuKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3N0YXRpYyB2b2lkIGI0M19ucGh5X3JldjJfcnNzaV9zZWxlY3Qoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBjb2RlLCB1OCB0eXBlKQogewotCXN0cnVjdCBiNDNfcGh5ICpwaHkgPSAmZGV2LT5waHk7CisJdTE2IHZhbDsKKworCWlmICh0eXBlIDwgMykKKwkJdmFsID0gMDsKKwllbHNlIGlmICh0eXBlID09IDYpCisJCXZhbCA9IDE7CisJZWxzZSBpZiAodHlwZSA9PSAzKQorCQl2YWwgPSAyOworCWVsc2UKKwkJdmFsID0gMzsKKworCXZhbCA9ICh2YWwgPDwgMTIpIHwgKHZhbCA8PCAxNCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQUZFQ1RMX0MxLCAweDBGRkYsIHZhbCk7CisJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQUZFQ1RMX0MyLCAweDBGRkYsIHZhbCk7CisKKwlpZiAodHlwZSA8IDMpIHsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfUkZDVExfUlNTSU8xLCAweEZGQ0YsCisJCQkJKHR5cGUgKyAxKSA8PCA0KTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfUkZDVExfUlNTSU8yLCAweEZGQ0YsCisJCQkJKHR5cGUgKyAxKSA8PCA0KTsKKwl9CisKKwkvKiBUT0RPIHVzZSBzb21lIGRlZmluaXRpb25zICovCisJaWYgKGNvZGUgPT0gMCkgeworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUiwgMHhDRkZGLCAwKTsKKwkJaWYgKHR5cGUgPCAzKSB7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRkNUTF9DTUQsIDB4RkVDNywgMCk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRkNUTF9PVkVSLCAweEVGREMsIDApOworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfUkZDVExfQ01ELCAweEZGRkUsIDApOworCQkJdWRlbGF5KDIwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX1JGQ1RMX09WRVIsIDB4RkZGRSwgMCk7CisJCX0KKwl9IGVsc2UgeworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUiwgMHhDRkZGLAorCQkJCTB4MzAwMCk7CisJCWlmICh0eXBlIDwgMykgeworCQkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfUkZDVExfQ01ELAorCQkJCQkweEZFQzcsIDB4MDE4MCk7CisJCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRkNUTF9PVkVSLAorCQkJCQkweEVGREMsIChjb2RlIDw8IDEgfCAweDEwMjEpKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX1JGQ1RMX0NNRCwgMHhGRkZFLCAweDEpOworCQkJdWRlbGF5KDIwKTsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX1JGQ1RMX09WRVIsIDB4RkZGRSwgMCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGI0M19ucGh5X3JldjNfcnNzaV9zZWxlY3Qoc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCBjb2RlLCB1OCB0eXBlKQoreworCXN0cnVjdCBiNDNfcGh5X24gKm5waHkgPSBkZXYtPnBoeS5uOworCXU4IGk7CisJdTE2IHJlZywgdmFsOworCisJaWYgKGNvZGUgPT0gMCkgeworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUjEsIDB4RkRGRik7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSLCAweEZERkYpOworCQliNDNfcGh5X21hc2soZGV2LCBCNDNfTlBIWV9BRkVDVExfQzEsIDB4RkNGRik7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX0FGRUNUTF9DMiwgMHhGQ0ZGKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfVFhGXzQwQ09fQjFTMCwgMHhGRkRGKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfVFhGXzQwQ09fQjMyUzEsIDB4RkZERik7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX1JGQ1RMX0xVVF9UUlNXX1VQMSwgMHhGRkMzKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfUkZDVExfTFVUX1RSU1dfVVAyLCAweEZGQzMpOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJCWlmICgoY29kZSA9PSAxICYmIGkgPT0gMSkgfHwgKGNvZGUgPT0gMiAmJiAhaSkpCisJCQkJY29udGludWU7CisKKwkJCXJlZyA9IChpID09IDApID8KKwkJCQlCNDNfTlBIWV9BRkVDVExfT1ZFUjEgOiBCNDNfTlBIWV9BRkVDVExfT1ZFUjsKKwkJCWI0M19waHlfbWFza3NldChkZXYsIHJlZywgMHhGREZGLCAweDAyMDApOworCisJCQlpZiAodHlwZSA8IDMpIHsKKwkJCQlyZWcgPSAoaSA9PSAwKSA/CisJCQkJCUI0M19OUEhZX0FGRUNUTF9DMSA6CisJCQkJCUI0M19OUEhZX0FGRUNUTF9DMjsKKwkJCQliNDNfcGh5X21hc2tzZXQoZGV2LCByZWcsIDB4RkNGRiwgMCk7CisKKwkJCQlyZWcgPSAoaSA9PSAwKSA/CisJCQkJCUI0M19OUEhZX1JGQ1RMX0xVVF9UUlNXX1VQMSA6CisJCQkJCUI0M19OUEhZX1JGQ1RMX0xVVF9UUlNXX1VQMjsKKwkJCQliNDNfcGh5X21hc2tzZXQoZGV2LCByZWcsIDB4RkZDMywgMCk7CisKKwkJCQlpZiAodHlwZSA9PSAwKQorCQkJCQl2YWwgPSAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF81R0haKSA/IDQgOiA4OworCQkJCWVsc2UgaWYgKHR5cGUgPT0gMSkKKwkJCQkJdmFsID0gMTY7CisJCQkJZWxzZQorCQkJCQl2YWwgPSAzMjsKKwkJCQliNDNfcGh5X3NldChkZXYsIHJlZywgdmFsKTsKKworCQkJCXJlZyA9IChpID09IDApID8KKwkJCQkJQjQzX05QSFlfVFhGXzQwQ09fQjFTMCA6CisJCQkJCUI0M19OUEhZX1RYRl80MENPX0IzMlMxOworCQkJCWI0M19waHlfc2V0KGRldiwgcmVnLCAweDAwMjApOworCQkJfSBlbHNlIHsKKwkJCQlpZiAodHlwZSA9PSA2KQorCQkJCQl2YWwgPSAweDAxMDA7CisJCQkJZWxzZSBpZiAodHlwZSA9PSAzKQorCQkJCQl2YWwgPSAweDAyMDA7CisJCQkJZWxzZQorCQkJCQl2YWwgPSAweDAzMDA7CisKKwkJCQlyZWcgPSAoaSA9PSAwKSA/CisJCQkJCUI0M19OUEhZX0FGRUNUTF9DMSA6CisJCQkJCUI0M19OUEhZX0FGRUNUTF9DMjsKKworCQkJCWI0M19waHlfbWFza3NldChkZXYsIHJlZywgMHhGQ0ZGLCB2YWwpOworCQkJCWI0M19waHlfbWFza3NldChkZXYsIHJlZywgMHhGM0ZGLCB2YWwgPDwgMik7CisKKwkJCQlpZiAodHlwZSAhPSAzICYmIHR5cGUgIT0gNikgeworCQkJCQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQgPQorCQkJCQkJYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKTsKKworCQkJCQlpZiAoKG5waHktPmlwYTJnX29uICYmCisJCQkJCQliYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHx8CisJCQkJCQkobnBoeS0+aXBhNWdfb24gJiYKKwkJCQkJCWJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikpCisJCQkJCQl2YWwgPSAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSA/IDB4QyA6IDB4RTsKKwkJCQkJZWxzZQorCQkJCQkJdmFsID0gMHgxMTsKKwkJCQkJcmVnID0gKGkgPT0gMCkgPyAweDIwMDAgOiAweDMwMDA7CisJCQkJCXJlZyB8PSBCMjA1NV9QQUREUlY7CisJCQkJCWI0M19yYWRpb193cml0ZTE2KGRldiwgcmVnLCB2YWwpOworCisJCQkJCXJlZyA9IChpID09IDApID8KKwkJCQkJCUI0M19OUEhZX0FGRUNUTF9PVkVSMSA6CisJCQkJCQlCNDNfTlBIWV9BRkVDVExfT1ZFUjsKKwkJCQkJYjQzX3BoeV9zZXQoZGV2LCByZWcsIDB4MDIwMCk7CisJCQkJfQorCQkJfQorCQl9CisJfQorfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1JTU0lTZWwgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3Jzc2lfc2VsZWN0KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTggY29kZSwgdTggdHlwZSkKK3sKKwlpZiAoZGV2LT5waHkucmV2ID49IDMpCisJCWI0M19ucGh5X3JldjNfcnNzaV9zZWxlY3QoZGV2LCBjb2RlLCB0eXBlKTsKKwllbHNlCisJCWI0M19ucGh5X3JldjJfcnNzaV9zZWxlY3QoZGV2LCBjb2RlLCB0eXBlKTsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9TZXRSc3NpMjA1NVZjbSAqLworc3RhdGljIHZvaWQgYjQzX25waHlfc2V0X3Jzc2lfMjA1NV92Y20oc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCB0eXBlLCB1OCAqYnVmKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJaWYgKHR5cGUgPT0gMikgeworCQkJaWYgKGkgPT0gMCkgeworCQkJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgQjIwNTVfQzFfQjBOQl9SU1NJVkNNLAorCQkJCQkJICAweEZDLCBidWZbMF0pOworCQkJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgQjIwNTVfQzFfUlhfQkJfUlNTSUNUTDUsCisJCQkJCQkgIDB4RkMsIGJ1ZlsxXSk7CisJCQl9IGVsc2UgeworCQkJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgQjIwNTVfQzJfQjBOQl9SU1NJVkNNLAorCQkJCQkJICAweEZDLCBidWZbMiAqIGldKTsKKwkJCQliNDNfcmFkaW9fbWFza3NldChkZXYsIEIyMDU1X0MyX1JYX0JCX1JTU0lDVEw1LAorCQkJCQkJICAweEZDLCBidWZbMiAqIGkgKyAxXSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoaSA9PSAwKQorCQkJCWI0M19yYWRpb19tYXNrc2V0KGRldiwgQjIwNTVfQzFfUlhfQkJfUlNTSUNUTDUsCisJCQkJCQkgIDB4RjMsIGJ1ZlswXSA8PCAyKTsKKwkJCWVsc2UKKwkJCQliNDNfcmFkaW9fbWFza3NldChkZXYsIEIyMDU1X0MyX1JYX0JCX1JTU0lDVEw1LAorCQkJCQkJICAweEYzLCBidWZbMiAqIGkgKyAxXSA8PCAyKTsKKwkJfQorCX0KK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9Qb2xsUnNzaSAqLworc3RhdGljIGludCBiNDNfbnBoeV9wb2xsX3Jzc2koc3RydWN0IGI0M193bGRldiAqZGV2LCB1OCB0eXBlLCBzMzIgKmJ1ZiwKKwkJCQl1OCBuc2FtcCkKK3sKKwlpbnQgaTsKKwlpbnQgb3V0OworCXUxNiBzYXZlX3JlZ3NfcGh5WzldOworCXUxNiBzWzJdOworCisJaWYgKGRldi0+cGh5LnJldiA+PSAzKSB7CisJCXNhdmVfcmVnc19waHlbMF0gPSBiNDNfcGh5X3JlYWQoZGV2LAorCQkJCQkJQjQzX05QSFlfUkZDVExfTFVUX1RSU1dfVVAxKTsKKwkJc2F2ZV9yZWdzX3BoeVsxXSA9IGI0M19waHlfcmVhZChkZXYsCisJCQkJCQlCNDNfTlBIWV9SRkNUTF9MVVRfVFJTV19VUDIpOworCQlzYXZlX3JlZ3NfcGh5WzJdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQUZFQ1RMX0MxKTsKKwkJc2F2ZV9yZWdzX3BoeVszXSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0FGRUNUTF9DMik7CisJCXNhdmVfcmVnc19waHlbNF0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUjEpOworCQlzYXZlX3JlZ3NfcGh5WzVdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIpOworCQlzYXZlX3JlZ3NfcGh5WzZdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfVFhGXzQwQ09fQjFTMCk7CisJCXNhdmVfcmVnc19waHlbN10gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9UWEZfNDBDT19CMzJTMSk7CisJfQorCisJYjQzX25waHlfcnNzaV9zZWxlY3QoZGV2LCA1LCB0eXBlKTsKKworCWlmIChkZXYtPnBoeS5yZXYgPCAyKSB7CisJCXNhdmVfcmVnc19waHlbOF0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9HUElPX1NFTCk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9HUElPX1NFTCwgNSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJYnVmW2ldID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBuc2FtcDsgaSsrKSB7CisJCWlmIChkZXYtPnBoeS5yZXYgPCAyKSB7CisJCQlzWzBdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfR1BJT19MT09VVCk7CisJCQlzWzFdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfR1BJT19ISU9VVCk7CisJCX0gZWxzZSB7CisJCQlzWzBdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUlNTSTEpOworCQkJc1sxXSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1JTU0kyKTsKKwkJfQorCisJCWJ1ZlswXSArPSAoKHM4KSgoc1swXSAmIDB4M0YpIDw8IDIpKSA+PiAyOworCQlidWZbMV0gKz0gKChzOCkoKChzWzBdID4+IDgpICYgMHgzRikgPDwgMikpID4+IDI7CisJCWJ1ZlsyXSArPSAoKHM4KSgoc1sxXSAmIDB4M0YpIDw8IDIpKSA+PiAyOworCQlidWZbM10gKz0gKChzOCkoKChzWzFdID4+IDgpICYgMHgzRikgPDwgMikpID4+IDI7CisJfQorCW91dCA9IChidWZbMF0gJiAweEZGKSA8PCAyNCB8IChidWZbMV0gJiAweEZGKSA8PCAxNiB8CisJCShidWZbMl0gJiAweEZGKSA8PCA4IHwgKGJ1ZlszXSAmIDB4RkYpOworCisJaWYgKGRldi0+cGh5LnJldiA8IDIpCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9HUElPX1NFTCwgc2F2ZV9yZWdzX3BoeVs4XSk7CisKKwlpZiAoZGV2LT5waHkucmV2ID49IDMpIHsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0xVVF9UUlNXX1VQMSwKKwkJCQlzYXZlX3JlZ3NfcGh5WzBdKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0xVVF9UUlNXX1VQMiwKKwkJCQlzYXZlX3JlZ3NfcGh5WzFdKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0FGRUNUTF9DMSwgc2F2ZV9yZWdzX3BoeVsyXSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9BRkVDVExfQzIsIHNhdmVfcmVnc19waHlbM10pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIxLCBzYXZlX3JlZ3NfcGh5WzRdKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSLCBzYXZlX3JlZ3NfcGh5WzVdKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RYRl80MENPX0IxUzAsIHNhdmVfcmVnc19waHlbNl0pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVFhGXzQwQ09fQjMyUzEsIHNhdmVfcmVnc19waHlbN10pOworCX0KKworCXJldHVybiBvdXQ7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vUlNTSUNhbCAqLworc3RhdGljIHZvaWQgYjQzX25waHlfcmV2Ml9yc3NpX2NhbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHU4IHR5cGUpCit7CisJaW50IGksIGo7CisJdTggc3RhdGVbNF07CisJdTggY29kZSwgdmFsOworCXUxNiBjbGFzcywgb3ZlcnJpZGU7CisJdTggcmVnc19zYXZlX3JhZGlvWzJdOworCXUxNiByZWdzX3NhdmVfcGh5WzJdOworCXM4IG9mZnNldFs0XTsKKworCXUxNiBjbGlwX3N0YXRlWzJdOworCXUxNiBjbGlwX29mZlsyXSA9IHsgMHhGRkZGLCAweEZGRkYgfTsKKwlzMzIgcmVzdWx0c19taW5bNF0gPSB7IH07CisJdTggdmNtX2ZpbmFsWzRdID0geyB9OworCXMzMiByZXN1bHRzWzRdWzRdID0geyB9OworCXMzMiBtaW5pcVs0XVsyXSA9IHsgfTsKKworCWlmICh0eXBlID09IDIpIHsKKwkJY29kZSA9IDA7CisJCXZhbCA9IDY7CisJfSBlbHNlIGlmICh0eXBlIDwgMikgeworCQljb2RlID0gMjU7CisJCXZhbCA9IDQ7CisJfSBlbHNlIHsKKwkJQjQzX1dBUk5fT04oMSk7CisJCXJldHVybjsKKwl9CisKKwljbGFzcyA9IGI0M19ucGh5X2NsYXNzaWZpZXIoZGV2LCAwLCAwKTsKKwliNDNfbnBoeV9jbGFzc2lmaWVyKGRldiwgNywgNCk7CisJYjQzX25waHlfcmVhZF9jbGlwX2RldGVjdGlvbihkZXYsIGNsaXBfc3RhdGUpOworCWI0M19ucGh5X3dyaXRlX2NsaXBfZGV0ZWN0aW9uKGRldiwgY2xpcF9vZmYpOworCisJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKKwkJb3ZlcnJpZGUgPSAweDE0MDsKKwllbHNlCisJCW92ZXJyaWRlID0gMHgxMTA7CisKKwlyZWdzX3NhdmVfcGh5WzBdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzEpOworCXJlZ3Nfc2F2ZV9yYWRpb1swXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCBCMjA1NV9DMV9QRF9SWFRYKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzEsIG92ZXJyaWRlKTsKKwliNDNfcmFkaW9fd3JpdGUxNihkZXYsIEIyMDU1X0MxX1BEX1JYVFgsIHZhbCk7CisKKwlyZWdzX3NhdmVfcGh5WzFdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzIpOworCXJlZ3Nfc2F2ZV9yYWRpb1sxXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCBCMjA1NV9DMl9QRF9SWFRYKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzIsIG92ZXJyaWRlKTsKKwliNDNfcmFkaW9fd3JpdGUxNihkZXYsIEIyMDU1X0MyX1BEX1JYVFgsIHZhbCk7CisKKwlzdGF0ZVswXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCBCMjA1NV9DMV9QRF9SU1NJTUlTQykgJiAweDA3OworCXN0YXRlWzFdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIEIyMDU1X0MyX1BEX1JTU0lNSVNDKSAmIDB4MDc7CisJYjQzX3JhZGlvX21hc2soZGV2LCBCMjA1NV9DMV9QRF9SU1NJTUlTQywgMHhGOCk7CisJYjQzX3JhZGlvX21hc2soZGV2LCBCMjA1NV9DMl9QRF9SU1NJTUlTQywgMHhGOCk7CisJc3RhdGVbMl0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgQjIwNTVfQzFfU1BfUlNTSSkgJiAweDA3OworCXN0YXRlWzNdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIEIyMDU1X0MyX1NQX1JTU0kpICYgMHgwNzsKKworCWI0M19ucGh5X3Jzc2lfc2VsZWN0KGRldiwgNSwgdHlwZSk7CisJYjQzX25waHlfc2NhbGVfb2Zmc2V0X3Jzc2koZGV2LCAwLCAwLCA1LCAwLCB0eXBlKTsKKwliNDNfbnBoeV9zY2FsZV9vZmZzZXRfcnNzaShkZXYsIDAsIDAsIDUsIDEsIHR5cGUpOworCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQl1OCB0bXBbNF07CisJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspCisJCQl0bXBbal0gPSBpOworCQlpZiAodHlwZSAhPSAxKQorCQkJYjQzX25waHlfc2V0X3Jzc2lfMjA1NV92Y20oZGV2LCB0eXBlLCB0bXApOworCQliNDNfbnBoeV9wb2xsX3Jzc2koZGV2LCB0eXBlLCByZXN1bHRzW2ldLCA4KTsKKwkJaWYgKHR5cGUgPCAyKQorCQkJZm9yIChqID0gMDsgaiA8IDI7IGorKykKKwkJCQltaW5pcVtpXVtqXSA9IG1pbihyZXN1bHRzW2ldWzIgKiBqXSwKKwkJCQkJCXJlc3VsdHNbaV1bMiAqIGogKyAxXSk7CisJfQorCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlzMzIgbWluZCA9IDQwOworCQl1OCBtaW52Y20gPSAwOworCQlzMzIgbWlucG9sbCA9IDI0OTsKKwkJczMyIGN1cnI7CisJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKKwkJCWlmICh0eXBlID09IDIpCisJCQkJY3VyciA9IGFicyhyZXN1bHRzW2pdW2ldKTsKKwkJCWVsc2UKKwkJCQljdXJyID0gYWJzKG1pbmlxW2pdW2kgLyAyXSAtIGNvZGUgKiA4KTsKKworCQkJaWYgKGN1cnIgPCBtaW5kKSB7CisJCQkJbWluZCA9IGN1cnI7CisJCQkJbWludmNtID0gajsKKwkJCX0KKworCQkJaWYgKHJlc3VsdHNbal1baV0gPCBtaW5wb2xsKQorCQkJCW1pbnBvbGwgPSByZXN1bHRzW2pdW2ldOworCQl9CisJCXJlc3VsdHNfbWluW2ldID0gbWlucG9sbDsKKwkJdmNtX2ZpbmFsW2ldID0gbWludmNtOworCX0KKworCWlmICh0eXBlICE9IDEpCisJCWI0M19ucGh5X3NldF9yc3NpXzIwNTVfdmNtKGRldiwgdHlwZSwgdmNtX2ZpbmFsKTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJb2Zmc2V0W2ldID0gKGNvZGUgKiA4KSAtIHJlc3VsdHNbdmNtX2ZpbmFsW2ldXVtpXTsKKworCQlpZiAob2Zmc2V0W2ldIDwgMCkKKwkJCW9mZnNldFtpXSA9IC0oKGFicyhvZmZzZXRbaV0pICsgNCkgLyA4KTsKKwkJZWxzZQorCQkJb2Zmc2V0W2ldID0gKG9mZnNldFtpXSArIDQpIC8gODsKKworCQlpZiAocmVzdWx0c19taW5baV0gPT0gMjQ4KQorCQkJb2Zmc2V0W2ldID0gY29kZSAtIDMyOworCisJCWlmIChpICUgMiA9PSAwKQorCQkJYjQzX25waHlfc2NhbGVfb2Zmc2V0X3Jzc2koZGV2LCAwLCBvZmZzZXRbaV0sIDEsIDAsCisJCQkJCQkJdHlwZSk7CisJCWVsc2UKKwkJCWI0M19ucGh5X3NjYWxlX29mZnNldF9yc3NpKGRldiwgMCwgb2Zmc2V0W2ldLCAyLCAxLAorCQkJCQkJCXR5cGUpOworCX0KKworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgQjIwNTVfQzFfUERfUlNTSU1JU0MsIDB4RjgsIHN0YXRlWzBdKTsKKwliNDNfcmFkaW9fbWFza3NldChkZXYsIEIyMDU1X0MxX1BEX1JTU0lNSVNDLCAweEY4LCBzdGF0ZVsxXSk7CisKKwlzd2l0Y2ggKHN0YXRlWzJdKSB7CisJY2FzZSAxOgorCQliNDNfbnBoeV9yc3NpX3NlbGVjdChkZXYsIDEsIDIpOworCQlicmVhazsKKwljYXNlIDQ6CisJCWI0M19ucGh5X3Jzc2lfc2VsZWN0KGRldiwgMSwgMCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJYjQzX25waHlfcnNzaV9zZWxlY3QoZGV2LCAxLCAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYjQzX25waHlfcnNzaV9zZWxlY3QoZGV2LCAxLCAxKTsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChzdGF0ZVszXSkgeworCWNhc2UgMToKKwkJYjQzX25waHlfcnNzaV9zZWxlY3QoZGV2LCAyLCAyKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQliNDNfbnBoeV9yc3NpX3NlbGVjdChkZXYsIDIsIDApOworCQlicmVhazsKKwlkZWZhdWx0OgorCQliNDNfbnBoeV9yc3NpX3NlbGVjdChkZXYsIDIsIDEpOworCQlicmVhazsKKwl9CisKKwliNDNfbnBoeV9yc3NpX3NlbGVjdChkZXYsIDAsIHR5cGUpOworCisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEMxLCByZWdzX3NhdmVfcGh5WzBdKTsKKwliNDNfcmFkaW9fd3JpdGUxNihkZXYsIEIyMDU1X0MxX1BEX1JYVFgsIHJlZ3Nfc2F2ZV9yYWRpb1swXSk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEMyLCByZWdzX3NhdmVfcGh5WzFdKTsKKwliNDNfcmFkaW9fd3JpdGUxNihkZXYsIEIyMDU1X0MyX1BEX1JYVFgsIHJlZ3Nfc2F2ZV9yYWRpb1sxXSk7CisKKwliNDNfbnBoeV9jbGFzc2lmaWVyKGRldiwgNywgY2xhc3MpOworCWI0M19ucGh5X3dyaXRlX2NsaXBfZGV0ZWN0aW9uKGRldiwgY2xpcF9zdGF0ZSk7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vUlNTSUNhbFJldjMgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3JldjNfcnNzaV9jYWwoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCS8qIFRPRE8gKi8KK30KKworLyoKKyAqIFJTU0kgQ2FsaWJyYXRpb24KKyAqIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vUlNTSUNhbAorICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9yc3NpX2NhbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJaWYgKGRldi0+cGh5LnJldiA+PSAzKSB7CisJCWI0M19ucGh5X3JldjNfcnNzaV9jYWwoZGV2KTsKKwl9IGVsc2UgeworCQliNDNfbnBoeV9yZXYyX3Jzc2lfY2FsKGRldiwgMik7CisJCWI0M19ucGh5X3JldjJfcnNzaV9jYWwoZGV2LCAwKTsKKwkJYjQzX25waHlfcmV2Ml9yc3NpX2NhbChkZXYsIDEpOworCX0KK30KKworLyoKKyAqIFJlc3RvcmUgUlNTSSBDYWxpYnJhdGlvbgorICogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9SZXN0b3JlUnNzaUNhbAorICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9yZXN0b3JlX3Jzc2lfY2FsKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9uICpucGh5ID0gZGV2LT5waHkubjsKKworCXUxNiAqcnNzaWNhbF9yYWRpb19yZWdzID0gTlVMTDsKKwl1MTYgKnJzc2ljYWxfcGh5X3JlZ3MgPSBOVUxMOworCisJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQlpZiAoIW5waHktPnJzc2ljYWxfY2hhbnNwZWNfMkcpCisJCQlyZXR1cm47CisJCXJzc2ljYWxfcmFkaW9fcmVncyA9IG5waHktPnJzc2ljYWxfY2FjaGUucnNzaWNhbF9yYWRpb19yZWdzXzJHOworCQlyc3NpY2FsX3BoeV9yZWdzID0gbnBoeS0+cnNzaWNhbF9jYWNoZS5yc3NpY2FsX3BoeV9yZWdzXzJHOworCX0gZWxzZSB7CisJCWlmICghbnBoeS0+cnNzaWNhbF9jaGFuc3BlY181RykKKwkJCXJldHVybjsKKwkJcnNzaWNhbF9yYWRpb19yZWdzID0gbnBoeS0+cnNzaWNhbF9jYWNoZS5yc3NpY2FsX3JhZGlvX3JlZ3NfNUc7CisJCXJzc2ljYWxfcGh5X3JlZ3MgPSBucGh5LT5yc3NpY2FsX2NhY2hlLnJzc2ljYWxfcGh5X3JlZ3NfNUc7CisJfQorCisJLyogVE9ETyB1c2Ugc29tZSBkZWZpbml0aW9ucyAqLworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHg2MDJCLCAweEUzLCByc3NpY2FsX3JhZGlvX3JlZ3NbMF0pOworCWI0M19yYWRpb19tYXNrc2V0KGRldiwgMHg3MDJCLCAweEUzLCByc3NpY2FsX3JhZGlvX3JlZ3NbMV0pOworCisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18wSV9SU1NJX1osIHJzc2ljYWxfcGh5X3JlZ3NbMF0pOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMFFfUlNTSV9aLCByc3NpY2FsX3BoeV9yZWdzWzFdKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzFJX1JTU0lfWiwgcnNzaWNhbF9waHlfcmVnc1syXSk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18xUV9SU1NJX1osIHJzc2ljYWxfcGh5X3JlZ3NbM10pOworCisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18wSV9SU1NJX1gsIHJzc2ljYWxfcGh5X3JlZ3NbNF0pOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMFFfUlNTSV9YLCByc3NpY2FsX3BoeV9yZWdzWzVdKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzFJX1JTU0lfWCwgcnNzaWNhbF9waHlfcmVnc1s2XSk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18xUV9SU1NJX1gsIHJzc2ljYWxfcGh5X3JlZ3NbN10pOworCisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JTU0lNQ18wSV9SU1NJX1ksIHJzc2ljYWxfcGh5X3JlZ3NbOF0pOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMFFfUlNTSV9ZLCByc3NpY2FsX3BoeV9yZWdzWzldKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUlNTSU1DXzFJX1JTU0lfWSwgcnNzaWNhbF9waHlfcmVnc1sxMF0pOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SU1NJTUNfMVFfUlNTSV9ZLCByc3NpY2FsX3BoeV9yZWdzWzExXSk7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vR2V0SXBhR2FpblRibCAqLworc3RhdGljIGNvbnN0IHUzMiAqYjQzX25waHlfZ2V0X2lwYV9nYWluX3RhYmxlKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCWlmIChkZXYtPnBoeS5yZXYgPj0gNikgeworCQkJLyogVE9ETyBJZiB0aGUgY2hpcCBpcyA0NzE2MgorCQkJCXJldHVybiB0eHB3cmN0cmxfdHhfZ2Fpbl9pcGFfcmV2NSAqLworCQkJcmV0dXJuIHR4cHdyY3RybF90eF9nYWluX2lwYV9yZXY2OworCQl9IGVsc2UgaWYgKGRldi0+cGh5LnJldiA+PSA1KSB7CisJCQlyZXR1cm4gdHhwd3JjdHJsX3R4X2dhaW5faXBhX3JldjU7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gdHhwd3JjdHJsX3R4X2dhaW5faXBhOworCQl9CisJfSBlbHNlIHsKKwkJcmV0dXJuIHR4cHdyY3RybF90eF9nYWluX2lwYV81ZzsKKwl9Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vVHhDYWxSYWRpb1NldHVwICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV90eF9jYWxfcmFkaW9fc2V0dXAoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X24gKm5waHkgPSBkZXYtPnBoeS5uOworCXUxNiAqc2F2ZSA9IG5waHktPnR4X3J4X2NhbF9yYWRpb19zYXZlcmVnczsKKwl1MTYgdG1wOworCXU4IG9mZnNldCwgaTsKKworCWlmIChkZXYtPnBoeS5yZXYgPj0gMykgeworCSAgICBmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCXRtcCA9IChpID09IDApID8gMHgyMDAwIDogMHgzMDAwOworCQlvZmZzZXQgPSBpICogMTE7CisKKwkJc2F2ZVtvZmZzZXQgKyAwXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCBCMjA1NV9DQUxfUlZBUkNUTCk7CisJCXNhdmVbb2Zmc2V0ICsgMV0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgQjIwNTVfQ0FMX0xQT0NUTCk7CisJCXNhdmVbb2Zmc2V0ICsgMl0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgQjIwNTVfQ0FMX1RTKTsKKwkJc2F2ZVtvZmZzZXQgKyAzXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCBCMjA1NV9DQUxfUkNDQUxSVFMpOworCQlzYXZlW29mZnNldCArIDRdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIEIyMDU1X0NBTF9SQ0FMUlRTKTsKKwkJc2F2ZVtvZmZzZXQgKyA1XSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCBCMjA1NV9QQUREUlYpOworCQlzYXZlW29mZnNldCArIDZdID0gYjQzX3JhZGlvX3JlYWQxNihkZXYsIEIyMDU1X1hPQ1RMMSk7CisJCXNhdmVbb2Zmc2V0ICsgN10gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgQjIwNTVfWE9DVEwyKTsKKwkJc2F2ZVtvZmZzZXQgKyA4XSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCBCMjA1NV9YT1JFR1VMKTsKKwkJc2F2ZVtvZmZzZXQgKyA5XSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCBCMjA1NV9YT01JU0MpOworCQlzYXZlW29mZnNldCArIDEwXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCBCMjA1NV9QTExfTEZDMSk7CisKKwkJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgeworCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCB0bXAgfCBCMjA1NV9DQUxfUlZBUkNUTCwgMHgwQSk7CisJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X0NBTF9MUE9DVEwsIDB4NDApOworCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCB0bXAgfCBCMjA1NV9DQUxfVFMsIDB4NTUpOworCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCB0bXAgfCBCMjA1NV9DQUxfUkNDQUxSVFMsIDApOworCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCB0bXAgfCBCMjA1NV9DQUxfUkNBTFJUUywgMCk7CisJCQlpZiAobnBoeS0+aXBhNWdfb24pIHsKKwkJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X1BBRERSViwgNCk7CisJCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCB0bXAgfCBCMjA1NV9YT0NUTDEsIDEpOworCQkJfSBlbHNlIHsKKwkJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X1BBRERSViwgMCk7CisJCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCB0bXAgfCBCMjA1NV9YT0NUTDEsIDB4MkYpOworCQkJfQorCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCB0bXAgfCBCMjA1NV9YT0NUTDIsIDApOworCQl9IGVsc2UgeworCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCB0bXAgfCBCMjA1NV9DQUxfUlZBUkNUTCwgMHgwNik7CisJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X0NBTF9MUE9DVEwsIDB4NDApOworCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCB0bXAgfCBCMjA1NV9DQUxfVFMsIDB4NTUpOworCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCB0bXAgfCBCMjA1NV9DQUxfUkNDQUxSVFMsIDApOworCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCB0bXAgfCBCMjA1NV9DQUxfUkNBTFJUUywgMCk7CisJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X1hPQ1RMMSwgMCk7CisJCQlpZiAobnBoeS0+aXBhMmdfb24pIHsKKwkJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X1BBRERSViwgNik7CisJCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCB0bXAgfCBCMjA1NV9YT0NUTDIsCisJCQkJCShkZXYtPnBoeS5yZXYgPCA1KSA/IDB4MTEgOiAweDAxKTsKKwkJCX0gZWxzZSB7CisJCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCB0bXAgfCBCMjA1NV9QQUREUlYsIDApOworCQkJCWI0M19yYWRpb193cml0ZTE2KGRldiwgdG1wIHwgQjIwNTVfWE9DVEwyLCAwKTsKKwkJCX0KKwkJfQorCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X1hPUkVHVUwsIDApOworCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIHRtcCB8IEIyMDU1X1hPTUlTQywgMCk7CisJCWI0M19yYWRpb193cml0ZTE2KGRldiwgdG1wIHwgQjIwNTVfUExMX0xGQzEsIDApOworCSAgICB9CisJfSBlbHNlIHsKKwkJc2F2ZVswXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCBCMjA1NV9DMV9UWF9SRl9JUUNBTDEpOworCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIEIyMDU1X0MxX1RYX1JGX0lRQ0FMMSwgMHgyOSk7CisKKwkJc2F2ZVsxXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCBCMjA1NV9DMV9UWF9SRl9JUUNBTDIpOworCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIEIyMDU1X0MxX1RYX1JGX0lRQ0FMMiwgMHg1NCk7CisKKwkJc2F2ZVsyXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCBCMjA1NV9DMl9UWF9SRl9JUUNBTDEpOworCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIEIyMDU1X0MyX1RYX1JGX0lRQ0FMMSwgMHgyOSk7CisKKwkJc2F2ZVszXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCBCMjA1NV9DMl9UWF9SRl9JUUNBTDIpOworCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIEIyMDU1X0MyX1RYX1JGX0lRQ0FMMiwgMHg1NCk7CisKKwkJc2F2ZVszXSA9IGI0M19yYWRpb19yZWFkMTYoZGV2LCBCMjA1NV9DMV9QV1JERVRfUlhUWCk7CisJCXNhdmVbNF0gPSBiNDNfcmFkaW9fcmVhZDE2KGRldiwgQjIwNTVfQzJfUFdSREVUX1JYVFgpOworCisJCWlmICghKGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0JBTkRDVEwpICYKKwkJICAgIEI0M19OUEhZX0JBTkRDVExfNUdIWikpIHsKKwkJCWI0M19yYWRpb193cml0ZTE2KGRldiwgQjIwNTVfQzFfUFdSREVUX1JYVFgsIDB4MDQpOworCQkJYjQzX3JhZGlvX3dyaXRlMTYoZGV2LCBCMjA1NV9DMl9QV1JERVRfUlhUWCwgMHgwNCk7CisJCX0gZWxzZSB7CisJCQliNDNfcmFkaW9fd3JpdGUxNihkZXYsIEIyMDU1X0MxX1BXUkRFVF9SWFRYLCAweDIwKTsKKwkJCWI0M19yYWRpb193cml0ZTE2KGRldiwgQjIwNTVfQzJfUFdSREVUX1JYVFgsIDB4MjApOworCQl9CisKKwkJaWYgKGRldi0+cGh5LnJldiA8IDIpIHsKKwkJCWI0M19yYWRpb19zZXQoZGV2LCBCMjA1NV9DMV9UWF9CQl9NWEdNLCAweDIwKTsKKwkJCWI0M19yYWRpb19zZXQoZGV2LCBCMjA1NV9DMl9UWF9CQl9NWEdNLCAweDIwKTsKKwkJfSBlbHNlIHsKKwkJCWI0M19yYWRpb19tYXNrKGRldiwgQjIwNTVfQzFfVFhfQkJfTVhHTSwgfjB4MjApOworCQkJYjQzX3JhZGlvX21hc2soZGV2LCBCMjA1NV9DMl9UWF9CQl9NWEdNLCB+MHgyMCk7CisJCX0KKwl9Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vSXFDYWxHYWluUGFyYW1zICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9pcV9jYWxfZ2Fpbl9wYXJhbXMoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgY29yZSwKKwkJCQkJc3RydWN0IG5waHlfdHhnYWlucyB0YXJnZXQsCisJCQkJCXN0cnVjdCBucGh5X2lxY2FsX3BhcmFtcyAqcGFyYW1zKQoreworCWludCBpLCBqLCBpbmR4OworCXUxNiBnYWluOworCisJaWYgKGRldi0+cGh5LnJldiA+PSAzKSB7CisJCXBhcmFtcy0+dHhnbSA9IHRhcmdldC50eGdtW2NvcmVdOworCQlwYXJhbXMtPnBnYSA9IHRhcmdldC5wZ2FbY29yZV07CisJCXBhcmFtcy0+cGFkID0gdGFyZ2V0LnBhZFtjb3JlXTsKKwkJcGFyYW1zLT5pcGEgPSB0YXJnZXQuaXBhW2NvcmVdOworCQlwYXJhbXMtPmNhbF9nYWluID0gKHBhcmFtcy0+dHhnbSA8PCAxMikgfCAocGFyYW1zLT5wZ2EgPDwgOCkgfAorCQkJCQkocGFyYW1zLT5wYWQgPDwgNCkgfCAocGFyYW1zLT5pcGEpOworCQlmb3IgKGogPSAwOyBqIDwgNTsgaisrKQorCQkJcGFyYW1zLT5uY29ycltqXSA9IDB4Nzk7CisJfSBlbHNlIHsKKwkJZ2FpbiA9ICh0YXJnZXQucGFkW2NvcmVdKSB8ICh0YXJnZXQucGdhW2NvcmVdIDw8IDQpIHwKKwkJCSh0YXJnZXQudHhnbVtjb3JlXSA8PCA4KTsKKworCQlpbmR4ID0gKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgPworCQkJMSA6IDA7CisJCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspCisJCQlpZiAodGJsX2lxY2FsX2dhaW5wYXJhbXNbaW5keF1baV1bMF0gPT0gZ2FpbikKKwkJCQlicmVhazsKKwkJaSA9IG1pbihpLCA4KTsKKworCQlwYXJhbXMtPnR4Z20gPSB0YmxfaXFjYWxfZ2FpbnBhcmFtc1tpbmR4XVtpXVsxXTsKKwkJcGFyYW1zLT5wZ2EgPSB0YmxfaXFjYWxfZ2FpbnBhcmFtc1tpbmR4XVtpXVsyXTsKKwkJcGFyYW1zLT5wYWQgPSB0YmxfaXFjYWxfZ2FpbnBhcmFtc1tpbmR4XVtpXVszXTsKKwkJcGFyYW1zLT5jYWxfZ2FpbiA9IChwYXJhbXMtPnR4Z20gPDwgNykgfCAocGFyYW1zLT5wZ2EgPDwgNCkgfAorCQkJCQkocGFyYW1zLT5wYWQgPDwgMik7CisJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspCisJCQlwYXJhbXMtPm5jb3JyW2pdID0gdGJsX2lxY2FsX2dhaW5wYXJhbXNbaW5keF1baV1bNCArIGpdOworCX0KK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9VcGRhdGVUeENhbExhZGRlciAqLworc3RhdGljIHZvaWQgYjQzX25waHlfdXBkYXRlX3R4X2NhbF9sYWRkZXIoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MTYgY29yZSkKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9uICpucGh5ID0gZGV2LT5waHkubjsKKwlpbnQgaTsKKwl1MTYgc2NhbGUsIGVudHJ5OworCisJdTE2IHRtcCA9IG5waHktPnR4Y2FsX2JibXVsdDsKKwlpZiAoY29yZSA9PSAwKQorCQl0bXAgPj49IDg7CisJdG1wICY9IDB4ZmY7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTg7IGkrKykgeworCQlzY2FsZSA9IChsYWRkZXJfbG9baV0ucGVyY2VudCAqIHRtcCkgLyAxMDA7CisJCWVudHJ5ID0gKChzY2FsZSAmIDB4RkYpIDw8IDgpIHwgbGFkZGVyX2xvW2ldLmdfZW52OworCQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCMTYoMTUsIGkpLCBlbnRyeSk7CisKKwkJc2NhbGUgPSAobGFkZGVyX2lxW2ldLnBlcmNlbnQgKiB0bXApIC8gMTAwOworCQllbnRyeSA9ICgoc2NhbGUgJiAweEZGKSA8PCA4KSB8IGxhZGRlcl9pcVtpXS5nX2VudjsKKwkJYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjE2KDE1LCBpICsgMzIpLCBlbnRyeSk7CisJfQorfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL0V4dFBhU2V0VHhEaWdpRmlsdHMgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X2V4dF9wYV9zZXRfdHhfZGlnX2ZpbHRlcnMoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCAxNTsgaSsrKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9OKDB4MkM1ICsgaSksCisJCQkJdGJsX3R4X2ZpbHRlcl9jb2VmX3JldjRbMl1baV0pOworfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL0lwYVNldFR4RGlnaUZpbHRzICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9pbnRfcGFfc2V0X3R4X2RpZ19maWx0ZXJzKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlpbnQgaSwgajsKKwkvKiBCNDNfTlBIWV9UWEZfMjBDT19TMEExLCBCNDNfTlBIWV9UWEZfNDBDT19TMEExLCB1bmtub3duICovCisJdTE2IG9mZnNldFtdID0geyAweDE4NiwgMHgxOTUsIDB4MkM1IH07CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgMTU7IGorKykKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX04ob2Zmc2V0W2ldICsgaiksCisJCQkJCXRibF90eF9maWx0ZXJfY29lZl9yZXY0W2ldW2pdKTsKKworCWlmIChkZXYtPnBoeS5pc180MG1oeikgeworCQlmb3IgKGogPSAwOyBqIDwgMTU7IGorKykKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX04ob2Zmc2V0WzBdICsgaiksCisJCQkJCXRibF90eF9maWx0ZXJfY29lZl9yZXY0WzNdW2pdKTsKKwl9IGVsc2UgaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgeworCQlmb3IgKGogPSAwOyBqIDwgMTU7IGorKykKKwkJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfUEhZX04ob2Zmc2V0WzBdICsgaiksCisJCQkJCXRibF90eF9maWx0ZXJfY29lZl9yZXY0WzVdW2pdKTsKKwl9CisKKwlpZiAoZGV2LT5waHkuY2hhbm5lbCA9PSAxNCkKKwkJZm9yIChqID0gMDsgaiA8IDE1OyBqKyspCisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX1BIWV9OKG9mZnNldFswXSArIGopLAorCQkJCQl0YmxfdHhfZmlsdGVyX2NvZWZfcmV2NFs2XVtqXSk7Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vR2V0VHhHYWluICovCitzdGF0aWMgc3RydWN0IG5waHlfdHhnYWlucyBiNDNfbnBoeV9nZXRfdHhfZ2FpbnMoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCXN0cnVjdCBiNDNfcGh5X24gKm5waHkgPSBkZXYtPnBoeS5uOworCisJdTE2IGN1cnJfZ2FpblsyXTsKKwlzdHJ1Y3QgbnBoeV90eGdhaW5zIHRhcmdldDsKKwljb25zdCB1MzIgKnRhYmxlID0gTlVMTDsKKworCWlmIChucGh5LT50eHB3cmN0cmwgPT0gMCkgeworCQlpbnQgaTsKKworCQlpZiAobnBoeS0+aGFuZ19hdm9pZCkKKwkJCWI0M19ucGh5X3N0YXlfaW5fY2Fycmllcl9zZWFyY2goZGV2LCB0cnVlKTsKKwkJYjQzX250YWJfcmVhZF9idWxrKGRldiwgQjQzX05UQUIxNig3LCAweDExMCksIDIsIGN1cnJfZ2Fpbik7CisJCWlmIChucGh5LT5oYW5nX2F2b2lkKQorCQkJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIGZhbHNlKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMjsgKytpKSB7CisJCQlpZiAoZGV2LT5waHkucmV2ID49IDMpIHsKKwkJCQl0YXJnZXQuaXBhW2ldID0gY3Vycl9nYWluW2ldICYgMHgwMDBGOworCQkJCXRhcmdldC5wYWRbaV0gPSAoY3Vycl9nYWluW2ldICYgMHgwMEYwKSA+PiA0OworCQkJCXRhcmdldC5wZ2FbaV0gPSAoY3Vycl9nYWluW2ldICYgMHgwRjAwKSA+PiA4OworCQkJCXRhcmdldC50eGdtW2ldID0gKGN1cnJfZ2FpbltpXSAmIDB4NzAwMCkgPj4gMTI7CisJCQl9IGVsc2UgeworCQkJCXRhcmdldC5pcGFbaV0gPSBjdXJyX2dhaW5baV0gJiAweDAwMDM7CisJCQkJdGFyZ2V0LnBhZFtpXSA9IChjdXJyX2dhaW5baV0gJiAweDAwMEMpID4+IDI7CisJCQkJdGFyZ2V0LnBnYVtpXSA9IChjdXJyX2dhaW5baV0gJiAweDAwNzApID4+IDQ7CisJCQkJdGFyZ2V0LnR4Z21baV0gPSAoY3Vycl9nYWluW2ldICYgMHgwMzgwKSA+PiA3OworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaW50IGk7CisJCXUxNiBpbmRleFsyXTsKKwkJaW5kZXhbMF0gPSAoYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQzFfVFhQQ1RMX1NUQVQpICYKKwkJCUI0M19OUEhZX1RYUENUTF9TVEFUX0JJRFgpID4+CisJCQlCNDNfTlBIWV9UWFBDVExfU1RBVF9CSURYX1NISUZUOworCQlpbmRleFsxXSA9IChiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9DMl9UWFBDVExfU1RBVCkgJgorCQkJQjQzX05QSFlfVFhQQ1RMX1NUQVRfQklEWCkgPj4KKwkJCUI0M19OUEhZX1RYUENUTF9TVEFUX0JJRFhfU0hJRlQ7CisKKwkJZm9yIChpID0gMDsgaSA8IDI7ICsraSkgeworCQkJaWYgKGRldi0+cGh5LnJldiA+PSAzKSB7CisJCQkJZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kID0KKwkJCQkJYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKTsKKworCQkJCWlmICgobnBoeS0+aXBhMmdfb24gJiYKKwkJCQkgICAgIGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgfHwKKwkJCQkgICAgKG5waHktPmlwYTVnX29uICYmCisJCQkJICAgICBiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopKSB7CisJCQkJCXRhYmxlID0gYjQzX25waHlfZ2V0X2lwYV9nYWluX3RhYmxlKGRldik7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgeworCQkJCQkJaWYgKGRldi0+cGh5LnJldiA9PSAzKQorCQkJCQkJCXRhYmxlID0gYjQzX250YWJfdHhfZ2Fpbl9yZXYzXzVnaHo7CisJCQkJCQllbHNlIGlmIChkZXYtPnBoeS5yZXYgPT0gNCkKKwkJCQkJCQl0YWJsZSA9IGI0M19udGFiX3R4X2dhaW5fcmV2NF81Z2h6OworCQkJCQkJZWxzZQorCQkJCQkJCXRhYmxlID0gYjQzX250YWJfdHhfZ2Fpbl9yZXY1cGx1c181Z2h6OworCQkJCQl9IGVsc2UgeworCQkJCQkJdGFibGUgPSBiNDNfbnRhYl90eF9nYWluX3JldjNwbHVzXzJnaHo7CisJCQkJCX0KKwkJCQl9CisKKwkJCQl0YXJnZXQuaXBhW2ldID0gKHRhYmxlW2luZGV4W2ldXSA+PiAxNikgJiAweEY7CisJCQkJdGFyZ2V0LnBhZFtpXSA9ICh0YWJsZVtpbmRleFtpXV0gPj4gMjApICYgMHhGOworCQkJCXRhcmdldC5wZ2FbaV0gPSAodGFibGVbaW5kZXhbaV1dID4+IDI0KSAmIDB4RjsKKwkJCQl0YXJnZXQudHhnbVtpXSA9ICh0YWJsZVtpbmRleFtpXV0gPj4gMjgpICYgMHhGOworCQkJfSBlbHNlIHsKKwkJCQl0YWJsZSA9IGI0M19udGFiX3R4X2dhaW5fcmV2MF8xXzI7CisKKwkJCQl0YXJnZXQuaXBhW2ldID0gKHRhYmxlW2luZGV4W2ldXSA+PiAxNikgJiAweDM7CisJCQkJdGFyZ2V0LnBhZFtpXSA9ICh0YWJsZVtpbmRleFtpXV0gPj4gMTgpICYgMHgzOworCQkJCXRhcmdldC5wZ2FbaV0gPSAodGFibGVbaW5kZXhbaV1dID4+IDIwKSAmIDB4NzsKKwkJCQl0YXJnZXQudHhnbVtpXSA9ICh0YWJsZVtpbmRleFtpXV0gPj4gMjMpICYgMHg3OworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIHRhcmdldDsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9UeENhbFBoeUNsZWFudXAgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3R4X2NhbF9waHlfY2xlYW51cChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJdTE2ICpyZWdzID0gZGV2LT5waHkubi0+dHhfcnhfY2FsX3BoeV9zYXZlcmVnczsKKworCWlmIChkZXYtPnBoeS5yZXYgPj0gMykgeworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQUZFQ1RMX0MxLCByZWdzWzBdKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0FGRUNUTF9DMiwgcmVnc1sxXSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUjEsIHJlZ3NbMl0pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIsIHJlZ3NbM10pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQkJDRkcsIHJlZ3NbNF0pOworCQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCMTYoOCwgMyksIHJlZ3NbNV0pOworCQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCMTYoOCwgMTkpLCByZWdzWzZdKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEMxLCByZWdzWzddKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEMyLCByZWdzWzhdKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1BBUERfRU4wLCByZWdzWzldKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1BBUERfRU4xLCByZWdzWzEwXSk7CisJCWI0M19ucGh5X3Jlc2V0X2NjYShkZXYpOworCX0gZWxzZSB7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0FGRUNUTF9DMSwgMHgwRkZGLCByZWdzWzBdKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfQUZFQ1RMX0MyLCAweDBGRkYsIHJlZ3NbMV0pOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIsIHJlZ3NbMl0pOworCQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCMTYoOCwgMiksIHJlZ3NbM10pOworCQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCMTYoOCwgMTgpLCByZWdzWzRdKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEMxLCByZWdzWzVdKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEMyLCByZWdzWzZdKTsKKwl9Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vVHhDYWxQaHlTZXR1cCAqLworc3RhdGljIHZvaWQgYjQzX25waHlfdHhfY2FsX3BoeV9zZXR1cChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJdTE2ICpyZWdzID0gZGV2LT5waHkubi0+dHhfcnhfY2FsX3BoeV9zYXZlcmVnczsKIAl1MTYgdG1wOwogCi0JLy9UT0RPOiBTcGVjdHJhbCBtYW5hZ2VtZW50CisJcmVnc1swXSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0FGRUNUTF9DMSk7CisJcmVnc1sxXSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0FGRUNUTF9DMik7CisJaWYgKGRldi0+cGh5LnJldiA+PSAzKSB7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0FGRUNUTF9DMSwgMHhGMEZGLCAweDBBMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9BRkVDVExfQzIsIDB4RjBGRiwgMHgwQTAwKTsKKworCQl0bXAgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9BRkVDVExfT1ZFUjEpOworCQlyZWdzWzJdID0gdG1wOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIxLCB0bXAgfCAweDA2MDApOworCisJCXRtcCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSKTsKKwkJcmVnc1szXSA9IHRtcDsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSLCB0bXAgfCAweDA2MDApOworCisJCXJlZ3NbNF0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9CQkNGRyk7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX0JCQ0ZHLCAodTE2KX5CNDNfTlBIWV9CQkNGR19SU1RSWCk7CisKKwkJdG1wID0gYjQzX250YWJfcmVhZChkZXYsIEI0M19OVEFCMTYoOCwgMykpOworCQlyZWdzWzVdID0gdG1wOworCQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCMTYoOCwgMyksIDApOworCisJCXRtcCA9IGI0M19udGFiX3JlYWQoZGV2LCBCNDNfTlRBQjE2KDgsIDE5KSk7CisJCXJlZ3NbNl0gPSB0bXA7CisJCWI0M19udGFiX3dyaXRlKGRldiwgQjQzX05UQUIxNig4LCAxOSksIDApOworCQlyZWdzWzddID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzEpOworCQlyZWdzWzhdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzIpOworCisJCWI0M19ucGh5X3JmX2NvbnRyb2xfaW50Y19vdmVycmlkZShkZXYsIDIsIDEsIDMpOworCQliNDNfbnBoeV9yZl9jb250cm9sX2ludGNfb3ZlcnJpZGUoZGV2LCAxLCAyLCAxKTsKKwkJYjQzX25waHlfcmZfY29udHJvbF9pbnRjX292ZXJyaWRlKGRldiwgMSwgOCwgMik7CisKKwkJcmVnc1s5XSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1BBUERfRU4wKTsKKwkJcmVnc1sxMF0gPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9QQVBEX0VOMSk7CisJCWI0M19waHlfbWFzayhkZXYsIEI0M19OUEhZX1BBUERfRU4wLCB+MHgwMDAxKTsKKwkJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfUEFQRF9FTjEsIH4weDAwMDEpOworCX0gZWxzZSB7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0FGRUNUTF9DMSwgMHgwRkZGLCAweEEwMDApOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9BRkVDVExfQzIsIDB4MEZGRiwgMHhBMDAwKTsKKwkJdG1wID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIpOworCQlyZWdzWzJdID0gdG1wOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIsIHRtcCB8IDB4MzAwMCk7CisJCXRtcCA9IGI0M19udGFiX3JlYWQoZGV2LCBCNDNfTlRBQjE2KDgsIDIpKTsKKwkJcmVnc1szXSA9IHRtcDsKKwkJdG1wIHw9IDB4MjAwMDsKKwkJYjQzX250YWJfd3JpdGUoZGV2LCBCNDNfTlRBQjE2KDgsIDIpLCB0bXApOworCQl0bXAgPSBiNDNfbnRhYl9yZWFkKGRldiwgQjQzX05UQUIxNig4LCAxOCkpOworCQlyZWdzWzRdID0gdG1wOworCQl0bXAgfD0gMHgyMDAwOworCQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCMTYoOCwgMTgpLCB0bXApOworCQlyZWdzWzVdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzEpOworCQlyZWdzWzZdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzIpOworCQlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQkJdG1wID0gMHgwMTgwOworCQllbHNlCisJCQl0bXAgPSAweDAxMjA7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9JTlRDMSwgdG1wKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEMyLCB0bXApOworCX0KK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9TYXZlQ2FsICovCitzdGF0aWMgdm9pZCBiNDNfbnBoeV9zYXZlX2NhbChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IGRldi0+cGh5Lm47CisKKwlzdHJ1Y3QgYjQzX3BoeV9uX2lxX2NvbXAgKnJ4Y2FsX2NvZWZmcyA9IE5VTEw7CisJdTE2ICp0eGNhbF9yYWRpb19yZWdzID0gTlVMTDsKKwl1OCAqaXFjYWxfY2hhbnNwZWM7CisJdTE2ICp0YWJsZSA9IE5VTEw7CisKKwlpZiAobnBoeS0+aGFuZ19hdm9pZCkKKwkJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIDEpOworCisJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQlyeGNhbF9jb2VmZnMgPSAmbnBoeS0+Y2FsX2NhY2hlLnJ4Y2FsX2NvZWZmc18yRzsKKwkJdHhjYWxfcmFkaW9fcmVncyA9IG5waHktPmNhbF9jYWNoZS50eGNhbF9yYWRpb19yZWdzXzJHOworCQlpcWNhbF9jaGFuc3BlYyA9ICZucGh5LT5pcWNhbF9jaGFuc3BlY18yRzsKKwkJdGFibGUgPSBucGh5LT5jYWxfY2FjaGUudHhjYWxfY29lZmZzXzJHOworCX0gZWxzZSB7CisJCXJ4Y2FsX2NvZWZmcyA9ICZucGh5LT5jYWxfY2FjaGUucnhjYWxfY29lZmZzXzVHOworCQl0eGNhbF9yYWRpb19yZWdzID0gbnBoeS0+Y2FsX2NhY2hlLnR4Y2FsX3JhZGlvX3JlZ3NfNUc7CisJCWlxY2FsX2NoYW5zcGVjID0gJm5waHktPmlxY2FsX2NoYW5zcGVjXzVHOworCQl0YWJsZSA9IG5waHktPmNhbF9jYWNoZS50eGNhbF9jb2VmZnNfNUc7CisJfQorCisJYjQzX25waHlfcnhfaXFfY29lZmZzKGRldiwgZmFsc2UsIHJ4Y2FsX2NvZWZmcyk7CisJLyogVE9ETyB1c2Ugc29tZSBkZWZpbml0aW9ucyAqLworCWlmIChkZXYtPnBoeS5yZXYgPj0gMykgeworCQl0eGNhbF9yYWRpb19yZWdzWzBdID0gYjQzX3JhZGlvX3JlYWQoZGV2LCAweDIwMjEpOworCQl0eGNhbF9yYWRpb19yZWdzWzFdID0gYjQzX3JhZGlvX3JlYWQoZGV2LCAweDIwMjIpOworCQl0eGNhbF9yYWRpb19yZWdzWzJdID0gYjQzX3JhZGlvX3JlYWQoZGV2LCAweDMwMjEpOworCQl0eGNhbF9yYWRpb19yZWdzWzNdID0gYjQzX3JhZGlvX3JlYWQoZGV2LCAweDMwMjIpOworCQl0eGNhbF9yYWRpb19yZWdzWzRdID0gYjQzX3JhZGlvX3JlYWQoZGV2LCAweDIwMjMpOworCQl0eGNhbF9yYWRpb19yZWdzWzVdID0gYjQzX3JhZGlvX3JlYWQoZGV2LCAweDIwMjQpOworCQl0eGNhbF9yYWRpb19yZWdzWzZdID0gYjQzX3JhZGlvX3JlYWQoZGV2LCAweDMwMjMpOworCQl0eGNhbF9yYWRpb19yZWdzWzddID0gYjQzX3JhZGlvX3JlYWQoZGV2LCAweDMwMjQpOworCX0gZWxzZSB7CisJCXR4Y2FsX3JhZGlvX3JlZ3NbMF0gPSBiNDNfcmFkaW9fcmVhZChkZXYsIDB4OEIpOworCQl0eGNhbF9yYWRpb19yZWdzWzFdID0gYjQzX3JhZGlvX3JlYWQoZGV2LCAweEJBKTsKKwkJdHhjYWxfcmFkaW9fcmVnc1syXSA9IGI0M19yYWRpb19yZWFkKGRldiwgMHg4RCk7CisJCXR4Y2FsX3JhZGlvX3JlZ3NbM10gPSBiNDNfcmFkaW9fcmVhZChkZXYsIDB4QkMpOworCX0KKwkqaXFjYWxfY2hhbnNwZWMgPSBucGh5LT5yYWRpb19jaGFuc3BlYzsKKwliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIxNigxNSwgODApLCA4LCB0YWJsZSk7CisKKwlpZiAobnBoeS0+aGFuZ19hdm9pZCkKKwkJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIDApOworfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL1Jlc3RvcmVDYWwgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3Jlc3RvcmVfY2FsKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKK3sKKwlzdHJ1Y3QgYjQzX3BoeV9uICpucGh5ID0gZGV2LT5waHkubjsKKworCXUxNiBjb2VmWzRdOworCXUxNiAqbG9mdCA9IE5VTEw7CisJdTE2ICp0YWJsZSA9IE5VTEw7CisKKwlpbnQgaTsKKwl1MTYgKnR4Y2FsX3JhZGlvX3JlZ3MgPSBOVUxMOworCXN0cnVjdCBiNDNfcGh5X25faXFfY29tcCAqcnhjYWxfY29lZmZzID0gTlVMTDsKKworCWlmIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKKwkJaWYgKG5waHktPmlxY2FsX2NoYW5zcGVjXzJHID09IDApCisJCQlyZXR1cm47CisJCXRhYmxlID0gbnBoeS0+Y2FsX2NhY2hlLnR4Y2FsX2NvZWZmc18yRzsKKwkJbG9mdCA9ICZucGh5LT5jYWxfY2FjaGUudHhjYWxfY29lZmZzXzJHWzVdOworCX0gZWxzZSB7CisJCWlmIChucGh5LT5pcWNhbF9jaGFuc3BlY181RyA9PSAwKQorCQkJcmV0dXJuOworCQl0YWJsZSA9IG5waHktPmNhbF9jYWNoZS50eGNhbF9jb2VmZnNfNUc7CisJCWxvZnQgPSAmbnBoeS0+Y2FsX2NhY2hlLnR4Y2FsX2NvZWZmc181R1s1XTsKKwl9CisKKwliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIxNigxNSwgODApLCA0LCB0YWJsZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCWlmIChkZXYtPnBoeS5yZXYgPj0gMykKKwkJCXRhYmxlW2ldID0gY29lZltpXTsKKwkJZWxzZQorCQkJY29lZltpXSA9IDA7CisJfQorCisJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMTYoMTUsIDg4KSwgNCwgY29lZik7CisJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMTYoMTUsIDg1KSwgMiwgbG9mdCk7CisJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMTYoMTUsIDkzKSwgMiwgbG9mdCk7CisKKwlpZiAoZGV2LT5waHkucmV2IDwgMikKKwkJYjQzX25waHlfdHhfaXFfd29ya2Fyb3VuZChkZXYpOworCisJaWYgKGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCkgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQl0eGNhbF9yYWRpb19yZWdzID0gbnBoeS0+Y2FsX2NhY2hlLnR4Y2FsX3JhZGlvX3JlZ3NfMkc7CisJCXJ4Y2FsX2NvZWZmcyA9ICZucGh5LT5jYWxfY2FjaGUucnhjYWxfY29lZmZzXzJHOworCX0gZWxzZSB7CisJCXR4Y2FsX3JhZGlvX3JlZ3MgPSBucGh5LT5jYWxfY2FjaGUudHhjYWxfcmFkaW9fcmVnc181RzsKKwkJcnhjYWxfY29lZmZzID0gJm5waHktPmNhbF9jYWNoZS5yeGNhbF9jb2VmZnNfNUc7CisJfQorCisJLyogVE9ETyB1c2Ugc29tZSBkZWZpbml0aW9ucyAqLworCWlmIChkZXYtPnBoeS5yZXYgPj0gMykgeworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCAweDIwMjEsIHR4Y2FsX3JhZGlvX3JlZ3NbMF0pOworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCAweDIwMjIsIHR4Y2FsX3JhZGlvX3JlZ3NbMV0pOworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCAweDMwMjEsIHR4Y2FsX3JhZGlvX3JlZ3NbMl0pOworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCAweDMwMjIsIHR4Y2FsX3JhZGlvX3JlZ3NbM10pOworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCAweDIwMjMsIHR4Y2FsX3JhZGlvX3JlZ3NbNF0pOworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCAweDIwMjQsIHR4Y2FsX3JhZGlvX3JlZ3NbNV0pOworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCAweDMwMjMsIHR4Y2FsX3JhZGlvX3JlZ3NbNl0pOworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCAweDMwMjQsIHR4Y2FsX3JhZGlvX3JlZ3NbN10pOworCX0gZWxzZSB7CisJCWI0M19yYWRpb193cml0ZShkZXYsIDB4OEIsIHR4Y2FsX3JhZGlvX3JlZ3NbMF0pOworCQliNDNfcmFkaW9fd3JpdGUoZGV2LCAweEJBLCB0eGNhbF9yYWRpb19yZWdzWzFdKTsKKwkJYjQzX3JhZGlvX3dyaXRlKGRldiwgMHg4RCwgdHhjYWxfcmFkaW9fcmVnc1syXSk7CisJCWI0M19yYWRpb193cml0ZShkZXYsIDB4QkMsIHR4Y2FsX3JhZGlvX3JlZ3NbM10pOworCX0KKwliNDNfbnBoeV9yeF9pcV9jb2VmZnMoZGV2LCB0cnVlLCByeGNhbF9jb2VmZnMpOworfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL0NhbFR4SXFsbyAqLworc3RhdGljIGludCBiNDNfbnBoeV9jYWxfdHhfaXFfbG8oc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJCXN0cnVjdCBucGh5X3R4Z2FpbnMgdGFyZ2V0LAorCQkJCWJvb2wgZnVsbCwgYm9vbCBtcGhhc2UpCit7CisJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IGRldi0+cGh5Lm47CisJaW50IGk7CisJaW50IGVycm9yID0gMDsKKwlpbnQgZnJlcTsKKwlib29sIGF2b2lkID0gZmFsc2U7CisJdTggbGVuZ3RoOworCXUxNiB0bXAsIGNvcmUsIHR5cGUsIGNvdW50LCBtYXgsIG51bWIsIGxhc3QsIGNtZDsKKwljb25zdCB1MTYgKnRhYmxlOworCWJvb2wgcGh5Nm9yNXg7CisKKwl1MTYgYnVmZmVyWzExXTsKKwl1MTYgZGlxX3N0YXJ0ID0gMDsKKwl1MTYgc2F2ZVsyXTsKKwl1MTYgZ2FpblsyXTsKKwlzdHJ1Y3QgbnBoeV9pcWNhbF9wYXJhbXMgcGFyYW1zWzJdOworCWJvb2wgdXBkYXRlZFsyXSA9IHsgfTsKKworCWI0M19ucGh5X3N0YXlfaW5fY2Fycmllcl9zZWFyY2goZGV2LCB0cnVlKTsKKworCWlmIChkZXYtPnBoeS5yZXYgPj0gNCkgeworCQlhdm9pZCA9IG5waHktPmhhbmdfYXZvaWQ7CisJCW5waHktPmhhbmdfYXZvaWQgPSAwOworCX0KKworCWI0M19udGFiX3JlYWRfYnVsayhkZXYsIEI0M19OVEFCMTYoNywgMHgxMTApLCAyLCBzYXZlKTsKKworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJYjQzX25waHlfaXFfY2FsX2dhaW5fcGFyYW1zKGRldiwgaSwgdGFyZ2V0LCAmcGFyYW1zW2ldKTsKKwkJZ2FpbltpXSA9IHBhcmFtc1tpXS5jYWxfZ2FpbjsKKwl9CisKKwliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIxNig3LCAweDExMCksIDIsIGdhaW4pOworCisJYjQzX25waHlfdHhfY2FsX3JhZGlvX3NldHVwKGRldik7CisJYjQzX25waHlfdHhfY2FsX3BoeV9zZXR1cChkZXYpOworCisJcGh5Nm9yNXggPSBkZXYtPnBoeS5yZXYgPj0gNiB8fAorCQkoZGV2LT5waHkucmV2ID09IDUgJiYgbnBoeS0+aXBhMmdfb24gJiYKKwkJYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKTsKKwlpZiAocGh5Nm9yNXgpIHsKKwkJaWYgKGRldi0+cGh5LmlzXzQwbWh6KSB7CisJCQliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIxNigxNSwgMCksIDE4LAorCQkJCQl0YmxfdHhfaXFsb19jYWxfbG9mdF9sYWRkZXJfNDApOworCQkJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMTYoMTUsIDMyKSwgMTgsCisJCQkJCXRibF90eF9pcWxvX2NhbF9pcWltYl9sYWRkZXJfNDApOworCQl9IGVsc2UgeworCQkJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMTYoMTUsIDApLCAxOCwKKwkJCQkJdGJsX3R4X2lxbG9fY2FsX2xvZnRfbGFkZGVyXzIwKTsKKwkJCWI0M19udGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTlRBQjE2KDE1LCAzMiksIDE4LAorCQkJCQl0YmxfdHhfaXFsb19jYWxfaXFpbWJfbGFkZGVyXzIwKTsKKwkJfQorCX0KKworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9JUUxPQ0FMX0NNREdDVEwsIDB4OEFBOSk7CisKKwlpZiAoIWRldi0+cGh5LmlzXzQwbWh6KQorCQlmcmVxID0gMjUwMDsKKwllbHNlCisJCWZyZXEgPSA1MDAwOworCisJaWYgKG5waHktPm1waGFzZV9jYWxfcGhhc2VfaWQgPiAyKQorCQliNDNfbnBoeV9ydW5fc2FtcGxlcyhkZXYsIChkZXYtPnBoeS5pc180MG1oeiA/IDQwIDogMjApICogOCwKKwkJCQkJMHhGRkZGLCAwLCB0cnVlLCBmYWxzZSk7CisJZWxzZQorCQllcnJvciA9IGI0M19ucGh5X3R4X3RvbmUoZGV2LCBmcmVxLCAyNTAsIHRydWUsIGZhbHNlKTsKKworCWlmIChlcnJvciA9PSAwKSB7CisJCWlmIChucGh5LT5tcGhhc2VfY2FsX3BoYXNlX2lkID4gMikgeworCQkJdGFibGUgPSBucGh5LT5tcGhhc2VfdHhjYWxfYmVzdGNvZWZmczsKKwkJCWxlbmd0aCA9IDExOworCQkJaWYgKGRldi0+cGh5LnJldiA8IDMpCisJCQkJbGVuZ3RoIC09IDI7CisJCX0gZWxzZSB7CisJCQlpZiAoIWZ1bGwgJiYgbnBoeS0+dHhpcWxvY2FsX2NvZWZmc3ZhbGlkKSB7CisJCQkJdGFibGUgPSBucGh5LT50eGlxbG9jYWxfYmVzdGM7CisJCQkJbGVuZ3RoID0gMTE7CisJCQkJaWYgKGRldi0+cGh5LnJldiA8IDMpCisJCQkJCWxlbmd0aCAtPSAyOworCQkJfSBlbHNlIHsKKwkJCQlmdWxsID0gdHJ1ZTsKKwkJCQlpZiAoZGV2LT5waHkucmV2ID49IDMpIHsKKwkJCQkJdGFibGUgPSB0YmxfdHhfaXFsb19jYWxfc3RhcnRjb2Vmc19ucGh5cmV2MzsKKwkJCQkJbGVuZ3RoID0gQjQzX05UQUJfVFhfSVFMT19DQUxfU1RBUlRDT0VGU19SRVYzOworCQkJCX0gZWxzZSB7CisJCQkJCXRhYmxlID0gdGJsX3R4X2lxbG9fY2FsX3N0YXJ0Y29lZnM7CisJCQkJCWxlbmd0aCA9IEI0M19OVEFCX1RYX0lRTE9fQ0FMX1NUQVJUQ09FRlM7CisJCQkJfQorCQkJfQorCQl9CisKKwkJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMTYoMTUsIDY0KSwgbGVuZ3RoLCB0YWJsZSk7CisKKwkJaWYgKGZ1bGwpIHsKKwkJCWlmIChkZXYtPnBoeS5yZXYgPj0gMykKKwkJCQltYXggPSBCNDNfTlRBQl9UWF9JUUxPX0NBTF9DTURTX0ZVTExDQUxfUkVWMzsKKwkJCWVsc2UKKwkJCQltYXggPSBCNDNfTlRBQl9UWF9JUUxPX0NBTF9DTURTX0ZVTExDQUw7CisJCX0gZWxzZSB7CisJCQlpZiAoZGV2LT5waHkucmV2ID49IDMpCisJCQkJbWF4ID0gQjQzX05UQUJfVFhfSVFMT19DQUxfQ01EU19SRUNBTF9SRVYzOworCQkJZWxzZQorCQkJCW1heCA9IEI0M19OVEFCX1RYX0lRTE9fQ0FMX0NNRFNfUkVDQUw7CisJCX0KKworCQlpZiAobXBoYXNlKSB7CisJCQljb3VudCA9IG5waHktPm1waGFzZV90eGNhbF9jbWRpZHg7CisJCQludW1iID0gbWluKG1heCwKKwkJCQkodTE2KShjb3VudCArIG5waHktPm1waGFzZV90eGNhbF9udW1jbWRzKSk7CisJCX0gZWxzZSB7CisJCQljb3VudCA9IDA7CisJCQludW1iID0gbWF4OworCQl9CisKKwkJZm9yICg7IGNvdW50IDwgbnVtYjsgY291bnQrKykgeworCQkJaWYgKGZ1bGwpIHsKKwkJCQlpZiAoZGV2LT5waHkucmV2ID49IDMpCisJCQkJCWNtZCA9IHRibF90eF9pcWxvX2NhbF9jbWRzX2Z1bGxjYWxfbnBoeXJldjNbY291bnRdOworCQkJCWVsc2UKKwkJCQkJY21kID0gdGJsX3R4X2lxbG9fY2FsX2NtZHNfZnVsbGNhbFtjb3VudF07CisJCQl9IGVsc2UgeworCQkJCWlmIChkZXYtPnBoeS5yZXYgPj0gMykKKwkJCQkJY21kID0gdGJsX3R4X2lxbG9fY2FsX2NtZHNfcmVjYWxfbnBoeXJldjNbY291bnRdOworCQkJCWVsc2UKKwkJCQkJY21kID0gdGJsX3R4X2lxbG9fY2FsX2NtZHNfcmVjYWxbY291bnRdOworCQkJfQorCisJCQljb3JlID0gKGNtZCAmIDB4MzAwMCkgPj4gMTI7CisJCQl0eXBlID0gKGNtZCAmIDB4MEYwMCkgPj4gODsKKworCQkJaWYgKHBoeTZvcjV4ICYmIHVwZGF0ZWRbY29yZV0gPT0gMCkgeworCQkJCWI0M19ucGh5X3VwZGF0ZV90eF9jYWxfbGFkZGVyKGRldiwgY29yZSk7CisJCQkJdXBkYXRlZFtjb3JlXSA9IDE7CisJCQl9CisKKwkJCXRtcCA9IChwYXJhbXNbY29yZV0ubmNvcnJbdHlwZV0gPDwgOCkgfCAweDY2OworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0lRTE9DQUxfQ01ETk5VTSwgdG1wKTsKKworCQkJaWYgKHR5cGUgPT0gMSB8fCB0eXBlID09IDMgfHwgdHlwZSA9PSA0KSB7CisJCQkJYnVmZmVyWzBdID0gYjQzX250YWJfcmVhZChkZXYsCisJCQkJCQlCNDNfTlRBQjE2KDE1LCA2OSArIGNvcmUpKTsKKwkJCQlkaXFfc3RhcnQgPSBidWZmZXJbMF07CisJCQkJYnVmZmVyWzBdID0gMDsKKwkJCQliNDNfbnRhYl93cml0ZShkZXYsIEI0M19OVEFCMTYoMTUsIDY5ICsgY29yZSksCisJCQkJCQkwKTsKKwkJCX0KKworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0lRTE9DQUxfQ01ELCBjbWQpOworCQkJZm9yIChpID0gMDsgaSA8IDIwMDA7IGkrKykgeworCQkJCXRtcCA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX0lRTE9DQUxfQ01EKTsKKwkJCQlpZiAodG1wICYgMHhDMDAwKQorCQkJCQlicmVhazsKKwkJCQl1ZGVsYXkoMTApOworCQkJfQorCisJCQliNDNfbnRhYl9yZWFkX2J1bGsoZGV2LCBCNDNfTlRBQjE2KDE1LCA5NiksIGxlbmd0aCwKKwkJCQkJCWJ1ZmZlcik7CisJCQliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIxNigxNSwgNjQpLCBsZW5ndGgsCisJCQkJCQlidWZmZXIpOworCisJCQlpZiAodHlwZSA9PSAxIHx8IHR5cGUgPT0gMyB8fCB0eXBlID09IDQpCisJCQkJYnVmZmVyWzBdID0gZGlxX3N0YXJ0OworCQl9CisKKwkJaWYgKG1waGFzZSkKKwkJCW5waHktPm1waGFzZV90eGNhbF9jbWRpZHggPSAobnVtYiA+PSBtYXgpID8gMCA6IG51bWI7CisKKwkJbGFzdCA9IChkZXYtPnBoeS5yZXYgPCAzKSA/IDYgOiA3OworCisJCWlmICghbXBoYXNlIHx8IG5waHktPm1waGFzZV9jYWxfcGhhc2VfaWQgPT0gbGFzdCkgeworCQkJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMTYoMTUsIDk2KSwgNCwgYnVmZmVyKTsKKwkJCWI0M19udGFiX3JlYWRfYnVsayhkZXYsIEI0M19OVEFCMTYoMTUsIDgwKSwgNCwgYnVmZmVyKTsKKwkJCWlmIChkZXYtPnBoeS5yZXYgPCAzKSB7CisJCQkJYnVmZmVyWzBdID0gMDsKKwkJCQlidWZmZXJbMV0gPSAwOworCQkJCWJ1ZmZlclsyXSA9IDA7CisJCQkJYnVmZmVyWzNdID0gMDsKKwkJCX0KKwkJCWI0M19udGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTlRBQjE2KDE1LCA4OCksIDQsCisJCQkJCQlidWZmZXIpOworCQkJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMTYoMTUsIDEwMSksIDIsCisJCQkJCQlidWZmZXIpOworCQkJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMTYoMTUsIDg1KSwgMiwKKwkJCQkJCWJ1ZmZlcik7CisJCQliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIxNigxNSwgOTMpLCAyLAorCQkJCQkJYnVmZmVyKTsKKwkJCWxlbmd0aCA9IDExOworCQkJaWYgKGRldi0+cGh5LnJldiA8IDMpCisJCQkJbGVuZ3RoIC09IDI7CisJCQliNDNfbnRhYl9yZWFkX2J1bGsoZGV2LCBCNDNfTlRBQjE2KDE1LCA5NiksIGxlbmd0aCwKKwkJCQkJCW5waHktPnR4aXFsb2NhbF9iZXN0Yyk7CisJCQlucGh5LT50eGlxbG9jYWxfY29lZmZzdmFsaWQgPSB0cnVlOworCQkJLyogVE9ETzogU2V0IG5waHktPnR4aXFsb2NhbF9jaGFuc3BlYyB0bworCQkJCXRoZSBjdXJyZW50IGNoYW5uZWwgKi8KKwkJfSBlbHNlIHsKKwkJCWxlbmd0aCA9IDExOworCQkJaWYgKGRldi0+cGh5LnJldiA8IDMpCisJCQkJbGVuZ3RoIC09IDI7CisJCQliNDNfbnRhYl9yZWFkX2J1bGsoZGV2LCBCNDNfTlRBQjE2KDE1LCA5NiksIGxlbmd0aCwKKwkJCQkJCW5waHktPm1waGFzZV90eGNhbF9iZXN0Y29lZmZzKTsKKwkJfQorCisJCWI0M19ucGh5X3N0b3BfcGxheWJhY2soZGV2KTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0lRTE9DQUxfQ01ER0NUTCwgMCk7CisJfQorCisJYjQzX25waHlfdHhfY2FsX3BoeV9jbGVhbnVwKGRldik7CisJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMTYoNywgMHgxMTApLCAyLCBzYXZlKTsKKworCWlmIChkZXYtPnBoeS5yZXYgPCAyICYmICghbXBoYXNlIHx8IG5waHktPm1waGFzZV9jYWxfcGhhc2VfaWQgPT0gbGFzdCkpCisJCWI0M19ucGh5X3R4X2lxX3dvcmthcm91bmQoZGV2KTsKKworCWlmIChkZXYtPnBoeS5yZXYgPj0gNCkKKwkJbnBoeS0+aGFuZ19hdm9pZCA9IGF2b2lkOworCisJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIGZhbHNlKTsKKworCXJldHVybiBlcnJvcjsKK30KKworLyogaHR0cDovL2JjbS12NC5zaXBzb2x1dGlvbnMubmV0LzgwMi4xMS9QSFkvTi9SZWFwcGx5VHhDYWxDb2VmZnMgKi8KK3N0YXRpYyB2b2lkIGI0M19ucGh5X3JlYXBwbHlfdHhfY2FsX2NvZWZmcyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IGRldi0+cGh5Lm47CisJdTggaTsKKwl1MTYgYnVmZmVyWzddOworCWJvb2wgZXF1YWwgPSB0cnVlOworCisJaWYgKCFucGh5LT50eGlxbG9jYWxfY29lZmZzdmFsaWQgfHwgMSAvKiBGSVhNRSAqLykKKwkJcmV0dXJuOworCisJYjQzX250YWJfcmVhZF9idWxrKGRldiwgQjQzX05UQUIxNigxNSwgODApLCA3LCBidWZmZXIpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJaWYgKGJ1ZmZlcltpXSAhPSBucGh5LT50eGlxbG9jYWxfYmVzdGNbaV0pIHsKKwkJCWVxdWFsID0gZmFsc2U7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICghZXF1YWwpIHsKKwkJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMTYoMTUsIDgwKSwgNCwKKwkJCQkJbnBoeS0+dHhpcWxvY2FsX2Jlc3RjKTsKKwkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJCWJ1ZmZlcltpXSA9IDA7CisJCWI0M19udGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTlRBQjE2KDE1LCA4OCksIDQsCisJCQkJCWJ1ZmZlcik7CisJCWI0M19udGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTlRBQjE2KDE1LCA4NSksIDIsCisJCQkJCSZucGh5LT50eGlxbG9jYWxfYmVzdGNbNV0pOworCQliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIxNigxNSwgOTMpLCAyLAorCQkJCQkmbnBoeS0+dHhpcWxvY2FsX2Jlc3RjWzVdKTsKKwl9Cit9CisKKy8qIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL04vQ2FsUnhJcVJldjIgKi8KK3N0YXRpYyBpbnQgYjQzX25waHlfcmV2Ml9jYWxfcnhfaXEoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJc3RydWN0IG5waHlfdHhnYWlucyB0YXJnZXQsIHU4IHR5cGUsIGJvb2wgZGVidWcpCit7CisJc3RydWN0IGI0M19waHlfbiAqbnBoeSA9IGRldi0+cGh5Lm47CisJaW50IGksIGosIGluZGV4OworCXU4IHJmY3RsWzJdOworCXU4IGFmZWN0bF9jb3JlOworCXUxNiB0bXBbNl07CisJdTE2IGN1cl9ocGYxLCBjdXJfaHBmMiwgY3VyX2xuYTsKKwl1MzIgcmVhbCwgaW1hZzsKKwllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CisKKwl1OCB1c2U7CisJdTE2IGN1cl9ocGY7CisJdTE2IGxuYVszXSA9IHsgMywgMywgMSB9OworCXUxNiBocGYxWzNdID0geyA3LCAyLCAwIH07CisJdTE2IGhwZjJbM10gPSB7IDIsIDAsIDAgfTsKKwl1MzIgcG93ZXJbM10gPSB7IH07CisJdTE2IGdhaW5fc2F2ZVsyXTsKKwl1MTYgY2FsX2dhaW5bMl07CisJc3RydWN0IG5waHlfaXFjYWxfcGFyYW1zIGNhbF9wYXJhbXNbMl07CisJc3RydWN0IG5waHlfaXFfZXN0IGVzdDsKKwlpbnQgcmV0ID0gMDsKKwlib29sIHBsYXl0b25lID0gdHJ1ZTsKKwlpbnQgZGVzaXJlZCA9IDEzOworCisJYjQzX25waHlfc3RheV9pbl9jYXJyaWVyX3NlYXJjaChkZXYsIDEpOworCisJaWYgKGRldi0+cGh5LnJldiA8IDIpCisJCWI0M19ucGh5X3JlYXBwbHlfdHhfY2FsX2NvZWZmcyhkZXYpOworCWI0M19udGFiX3JlYWRfYnVsayhkZXYsIEI0M19OVEFCMTYoNywgMHgxMTApLCAyLCBnYWluX3NhdmUpOworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJYjQzX25waHlfaXFfY2FsX2dhaW5fcGFyYW1zKGRldiwgaSwgdGFyZ2V0LCAmY2FsX3BhcmFtc1tpXSk7CisJCWNhbF9nYWluW2ldID0gY2FsX3BhcmFtc1tpXS5jYWxfZ2FpbjsKKwl9CisJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMTYoNywgMHgxMTApLCAyLCBjYWxfZ2Fpbik7CisKKwlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCWlmIChpID09IDApIHsKKwkJCXJmY3RsWzBdID0gQjQzX05QSFlfUkZDVExfSU5UQzE7CisJCQlyZmN0bFsxXSA9IEI0M19OUEhZX1JGQ1RMX0lOVEMyOworCQkJYWZlY3RsX2NvcmUgPSBCNDNfTlBIWV9BRkVDVExfQzE7CisJCX0gZWxzZSB7CisJCQlyZmN0bFswXSA9IEI0M19OUEhZX1JGQ1RMX0lOVEMyOworCQkJcmZjdGxbMV0gPSBCNDNfTlBIWV9SRkNUTF9JTlRDMTsKKwkJCWFmZWN0bF9jb3JlID0gQjQzX05QSFlfQUZFQ1RMX0MyOworCQl9CisKKwkJdG1wWzFdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfUkZTRVFDQSk7CisJCXRtcFsyXSA9IGI0M19waHlfcmVhZChkZXYsIGFmZWN0bF9jb3JlKTsKKwkJdG1wWzNdID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIpOworCQl0bXBbNF0gPSBiNDNfcGh5X3JlYWQoZGV2LCByZmN0bFswXSk7CisJCXRtcFs1XSA9IGI0M19waHlfcmVhZChkZXYsIHJmY3RsWzFdKTsKKworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRlNFUUNBLAorCQkJCSh1MTYpfkI0M19OUEhZX1JGU0VRQ0FfUlhESVMsCisJCQkJKCgxIC0gaSkgPDwgQjQzX05QSFlfUkZTRVFDQV9SWERJU19TSElGVCkpOworCQliNDNfcGh5X21hc2tzZXQoZGV2LCBCNDNfTlBIWV9SRlNFUUNBLCB+QjQzX05QSFlfUkZTRVFDQV9UWEVOLAorCQkJCSgxIC0gaSkpOworCQliNDNfcGh5X3NldChkZXYsIGFmZWN0bF9jb3JlLCAweDAwMDYpOworCQliNDNfcGh5X3NldChkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSLCAweDAwMDYpOworCisJCWJhbmQgPSBiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpOworCisJCWlmIChucGh5LT5yeGNhbHBhcmFtcyAmIDB4RkYwMDAwMDApIHsKKwkJCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCQkJYjQzX3BoeV93cml0ZShkZXYsIHJmY3RsWzBdLCAweDE0MCk7CisJCQllbHNlCisJCQkJYjQzX3BoeV93cml0ZShkZXYsIHJmY3RsWzBdLCAweDExMCk7CisJCX0gZWxzZSB7CisJCQlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQkJCWI0M19waHlfd3JpdGUoZGV2LCByZmN0bFswXSwgMHgxODApOworCQkJZWxzZQorCQkJCWI0M19waHlfd3JpdGUoZGV2LCByZmN0bFswXSwgMHgxMjApOworCQl9CisKKwkJaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKKwkJCWI0M19waHlfd3JpdGUoZGV2LCByZmN0bFsxXSwgMHgxNDgpOworCQllbHNlCisJCQliNDNfcGh5X3dyaXRlKGRldiwgcmZjdGxbMV0sIDB4MTE0KTsKKworCQlpZiAobnBoeS0+cnhjYWxwYXJhbXMgJiAweDEwMDAwKSB7CisJCQliNDNfcmFkaW9fbWFza3NldChkZXYsIEIyMDU1X0MxX0dFTlNQQVJFMiwgMHhGQywKKwkJCQkJKGkgKyAxKSk7CisJCQliNDNfcmFkaW9fbWFza3NldChkZXYsIEIyMDU1X0MyX0dFTlNQQVJFMiwgMHhGQywKKwkJCQkJKDIgLSBpKSk7CisJCX0KKworCQlmb3IgKGogPSAwOyBpIDwgNDsgaisrKSB7CisJCQlpZiAoaiA8IDMpIHsKKwkJCQljdXJfbG5hID0gbG5hW2pdOworCQkJCWN1cl9ocGYxID0gaHBmMVtqXTsKKwkJCQljdXJfaHBmMiA9IGhwZjJbal07CisJCQl9IGVsc2UgeworCQkJCWlmIChwb3dlclsxXSA+IDEwMDAwKSB7CisJCQkJCXVzZSA9IDE7CisJCQkJCWN1cl9ocGYgPSBjdXJfaHBmMTsKKwkJCQkJaW5kZXggPSAyOworCQkJCX0gZWxzZSB7CisJCQkJCWlmIChwb3dlclswXSA+IDEwMDAwKSB7CisJCQkJCQl1c2UgPSAxOworCQkJCQkJY3VyX2hwZiA9IGN1cl9ocGYxOworCQkJCQkJaW5kZXggPSAxOworCQkJCQl9IGVsc2UgeworCQkJCQkJaW5kZXggPSAwOworCQkJCQkJdXNlID0gMjsKKwkJCQkJCWN1cl9ocGYgPSBjdXJfaHBmMjsKKwkJCQkJfQorCQkJCX0KKwkJCQljdXJfbG5hID0gbG5hW2luZGV4XTsKKwkJCQljdXJfaHBmMSA9IGhwZjFbaW5kZXhdOworCQkJCWN1cl9ocGYyID0gaHBmMltpbmRleF07CisJCQkJY3VyX2hwZiArPSBkZXNpcmVkIC0gaHdlaWdodDMyKHBvd2VyW2luZGV4XSk7CisJCQkJY3VyX2hwZiA9IGNsYW1wX3ZhbChjdXJfaHBmLCAwLCAxMCk7CisJCQkJaWYgKHVzZSA9PSAxKQorCQkJCQljdXJfaHBmMSA9IGN1cl9ocGY7CisJCQkJZWxzZQorCQkJCQljdXJfaHBmMiA9IGN1cl9ocGY7CisJCQl9CisKKwkJCXRtcFswXSA9ICgoY3VyX2hwZjIgPDwgOCkgfCAoY3VyX2hwZjEgPDwgNCkgfAorCQkJCQkoY3VyX2xuYSA8PCAyKSk7CisJCQliNDNfbnBoeV9yZl9jb250cm9sX292ZXJyaWRlKGRldiwgMHg0MDAsIHRtcFswXSwgMywKKwkJCQkJCQkJCWZhbHNlKTsKKwkJCWI0M19ucGh5X2ZvcmNlX3JmX3NlcXVlbmNlKGRldiwgQjQzX1JGU0VRX1JFU0VUMlJYKTsKKwkJCWI0M19ucGh5X3N0b3BfcGxheWJhY2soZGV2KTsKKworCQkJaWYgKHBsYXl0b25lKSB7CisJCQkJcmV0ID0gYjQzX25waHlfdHhfdG9uZShkZXYsIDQwMDAsCisJCQkJCQkobnBoeS0+cnhjYWxwYXJhbXMgJiAweEZGRkYpLAorCQkJCQkJZmFsc2UsIGZhbHNlKTsKKwkJCQlwbGF5dG9uZSA9IGZhbHNlOworCQkJfSBlbHNlIHsKKwkJCQliNDNfbnBoeV9ydW5fc2FtcGxlcyhkZXYsIDE2MCwgMHhGRkZGLCAwLAorCQkJCQkJCWZhbHNlLCBmYWxzZSk7CisJCQl9CisKKwkJCWlmIChyZXQgPT0gMCkgeworCQkJCWlmIChqIDwgMykgeworCQkJCQliNDNfbnBoeV9yeF9pcV9lc3QoZGV2LCAmZXN0LCAxMDI0LCAzMiwKKwkJCQkJCQkJCWZhbHNlKTsKKwkJCQkJaWYgKGkgPT0gMCkgeworCQkJCQkJcmVhbCA9IGVzdC5pMF9wd3I7CisJCQkJCQlpbWFnID0gZXN0LnEwX3B3cjsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXJlYWwgPSBlc3QuaTFfcHdyOworCQkJCQkJaW1hZyA9IGVzdC5xMV9wd3I7CisJCQkJCX0KKwkJCQkJcG93ZXJbaV0gPSAoKHJlYWwgKyBpbWFnKSAvIDEwMjQpICsgMTsKKwkJCQl9IGVsc2UgeworCQkJCQliNDNfbnBoeV9jYWxjX3J4X2lxX2NvbXAoZGV2LCAxIDw8IGkpOworCQkJCX0KKwkJCQliNDNfbnBoeV9zdG9wX3BsYXliYWNrKGRldik7CisJCQl9CisKKwkJCWlmIChyZXQgIT0gMCkKKwkJCQlicmVhazsKKwkJfQorCisJCWI0M19yYWRpb19tYXNrKGRldiwgQjIwNTVfQzFfR0VOU1BBUkUyLCAweEZDKTsKKwkJYjQzX3JhZGlvX21hc2soZGV2LCBCMjA1NV9DMl9HRU5TUEFSRTIsIDB4RkMpOworCQliNDNfcGh5X3dyaXRlKGRldiwgcmZjdGxbMV0sIHRtcFs1XSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCByZmN0bFswXSwgdG1wWzRdKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0FGRUNUTF9PVkVSLCB0bXBbM10pOworCQliNDNfcGh5X3dyaXRlKGRldiwgYWZlY3RsX2NvcmUsIHRtcFsyXSk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRlNFUUNBLCB0bXBbMV0pOworCisJCWlmIChyZXQgIT0gMCkKKwkJCWJyZWFrOworCX0KKworCWI0M19ucGh5X3JmX2NvbnRyb2xfb3ZlcnJpZGUoZGV2LCAweDQwMCwgMCwgMywgdHJ1ZSk7CisJYjQzX25waHlfZm9yY2VfcmZfc2VxdWVuY2UoZGV2LCBCNDNfUkZTRVFfUkVTRVQyUlgpOworCWI0M19udGFiX3dyaXRlX2J1bGsoZGV2LCBCNDNfTlRBQjE2KDcsIDB4MTEwKSwgMiwgZ2Fpbl9zYXZlKTsKKworCWI0M19ucGh5X3N0YXlfaW5fY2Fycmllcl9zZWFyY2goZGV2LCAwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYjQzX25waHlfcmV2M19jYWxfcnhfaXEoc3RydWN0IGI0M193bGRldiAqZGV2LAorCQkJc3RydWN0IG5waHlfdHhnYWlucyB0YXJnZXQsIHU4IHR5cGUsIGJvb2wgZGVidWcpCit7CisJcmV0dXJuIC0xOworfQorCisvKiBodHRwOi8vYmNtLXY0LnNpcHNvbHV0aW9ucy5uZXQvODAyLjExL1BIWS9OL0NhbFJ4SXEgKi8KK3N0YXRpYyBpbnQgYjQzX25waHlfY2FsX3J4X2lxKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKKwkJCXN0cnVjdCBucGh5X3R4Z2FpbnMgdGFyZ2V0LCB1OCB0eXBlLCBib29sIGRlYnVnKQoreworCWlmIChkZXYtPnBoeS5yZXYgPj0gMykKKwkJcmV0dXJuIGI0M19ucGh5X3JldjNfY2FsX3J4X2lxKGRldiwgdGFyZ2V0LCB0eXBlLCBkZWJ1Zyk7CisJZWxzZQorCQlyZXR1cm4gYjQzX25waHlfcmV2Ml9jYWxfcnhfaXEoZGV2LCB0YXJnZXQsIHR5cGUsIGRlYnVnKTsKK30KKworLyoKKyAqIEluaXQgTi1QSFkKKyAqIGh0dHA6Ly9iY20tdjQuc2lwc29sdXRpb25zLm5ldC84MDIuMTEvUEhZL0luaXQvTgorICovCitpbnQgYjQzX3BoeV9pbml0bihzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJc3RydWN0IHNzYl9idXMgKmJ1cyA9IGRldi0+ZGV2LT5idXM7CisJc3RydWN0IGI0M19waHkgKnBoeSA9ICZkZXYtPnBoeTsKKwlzdHJ1Y3QgYjQzX3BoeV9uICpucGh5ID0gcGh5LT5uOworCXU4IHR4X3B3cl9zdGF0ZTsKKwlzdHJ1Y3QgbnBoeV90eGdhaW5zIHRhcmdldDsKKwl1MTYgdG1wOworCWVudW0gaWVlZTgwMjExX2JhbmQgdG1wMjsKKwlib29sIGRvX3Jzc2lfY2FsOworCisJdTE2IGNsaXBbMl07CisJYm9vbCBkb19jYWwgPSBmYWxzZTsKKworCWlmICgoZGV2LT5waHkucmV2ID49IDMpICYmCisJICAgKGJ1cy0+c3Byb20uYm9hcmRmbGFnc19sbyAmIEI0M19CRkxfRVhUTE5BKSAmJgorCSAgIChiNDNfY3VycmVudF9iYW5kKGRldi0+d2wpID09IElFRUU4MDIxMV9CQU5EXzJHSFopKSB7CisJCWNoaXBjb19zZXQzMigmZGV2LT5kZXYtPmJ1cy0+Y2hpcGNvLCBTU0JfQ0hJUENPX0NISVBDVEwsIDB4NDApOworCX0KKwlucGh5LT5kZWFmX2NvdW50ID0gMDsKIAliNDNfbnBoeV90YWJsZXNfaW5pdChkZXYpOworCW5waHktPmNyc21pbnB3cl9hZGp1c3RlZCA9IGZhbHNlOworCW5waHktPm5vaXNldmFyc19hZGp1c3RlZCA9IGZhbHNlOwogCiAJLyogQ2xlYXIgYWxsIG92ZXJyaWRlcyAqLwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9PVkVSLCAwKTsKKwlpZiAoZGV2LT5waHkucmV2ID49IDMpIHsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RYRl80MENPX0IxUzEsIDApOworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfT1ZFUiwgMCk7CisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UWEZfNDBDT19CMVMwLCAwKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RYRl80MENPX0IzMlMxLCAwKTsKKwl9IGVsc2UgeworCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfT1ZFUiwgMCk7CisJfQogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9JTlRDMSwgMCk7CiAJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEMyLCAwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfUkZDVExfSU5UQzMsIDApOwotCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9SRkNUTF9JTlRDNCwgMCk7CisJaWYgKGRldi0+cGh5LnJldiA8IDYpIHsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEMzLCAwKTsKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1JGQ1RMX0lOVEM0LCAwKTsKKwl9CiAJYjQzX3BoeV9tYXNrKGRldiwgQjQzX05QSFlfUkZTRVFNT0RFLAogCQkgICAgIH4oQjQzX05QSFlfUkZTRVFNT0RFX0NBT1ZFUiB8CiAJCSAgICAgICBCNDNfTlBIWV9SRlNFUU1PREVfVFJPVkVSKSk7CisJaWYgKGRldi0+cGh5LnJldiA+PSAzKQorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIxLCAwKTsKIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQUZFQ1RMX09WRVIsIDApOwogCi0JdG1wID0gKHBoeS0+cmV2IDwgMikgPyA2NCA6IDU5OwotCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0JQSFlfQ1RMMywKLQkJCX5CNDNfTlBIWV9CUEhZX0NUTDNfU0NBTEUsCi0JCQl0bXAgPDwgQjQzX05QSFlfQlBIWV9DVEwzX1NDQUxFX1NISUZUKTsKLQorCWlmIChkZXYtPnBoeS5yZXYgPD0gMikgeworCQl0bXAgPSAoZGV2LT5waHkucmV2ID09IDIpID8gMHgzQiA6IDB4NDA7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0JQSFlfQ1RMMywKKwkJCQl+QjQzX05QSFlfQlBIWV9DVEwzX1NDQUxFLAorCQkJCXRtcCA8PCBCNDNfTlBIWV9CUEhZX0NUTDNfU0NBTEVfU0hJRlQpOworCX0KIAliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQUZFU0VRX1RYMlJYX1BVRF8yME0sIDB4MjApOwogCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9BRkVTRVFfVFgyUlhfUFVEXzQwTSwgMHgyMCk7CiAKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVFhSRUFMRkQsIDE4NCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX01JTU9fQ1JTVFhFWFQsIDIwMCk7Ci0JYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1BMT0FEX0NTRU5TRV9FWFRMRU4sIDgwKTsKLQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQzJfQkNMSVBCS09GRiwgNTExKTsKKwlpZiAoYnVzLT5zcHJvbS5ib2FyZGZsYWdzMl9sbyAmIDB4MTAwIHx8CisJICAgIChidXMtPmJvYXJkaW5mby52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BUFBMRSAmJgorCSAgICAgYnVzLT5ib2FyZGluZm8udHlwZSA9PSAweDhCKSkKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RYUkVBTEZELCAweEEwKTsKKwllbHNlCisJCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UWFJFQUxGRCwgMHhCOCk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX01JTU9fQ1JTVFhFWFQsIDB4QzgpOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9QTE9BRF9DU0VOU0VfRVhUTEVOLCAweDUwKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVFhSSUZTX0ZSREVMLCAweDMwKTsKIAotCS8vVE9ETyBNSU1PLUNvbmZpZwotCS8vVE9ETyBVcGRhdGUgVFgvUlggY2hhaW4KKwliNDNfbnBoeV91cGRhdGVfbWltb19jb25maWcoZGV2LCBucGh5LT5wcmVhbWJsZV9vdmVycmlkZSk7CisJYjQzX25waHlfdXBkYXRlX3R4cnhfY2hhaW4oZGV2KTsKIAogCWlmIChwaHktPnJldiA8IDIpIHsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0RVUDQwX0dGQkwsIDB4QUE4KTsKIAkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX0RVUDQwX0JMLCAweDlBNCk7CiAJfQotCWI0M19ucGh5X3dvcmthcm91bmRzKGRldik7Ci0JYjQzX25waHlfcmVzZXRfY2NhKGRldik7CiAKLQlzc2Jfd3JpdGUzMihkZXYtPmRldiwgU1NCX1RNU0xPVywKLQkJICAgIHNzYl9yZWFkMzIoZGV2LT5kZXYsIFNTQl9UTVNMT1cpIHwgQjQzX1RNU0xPV19NQUNQSFlDTEtFTik7CisJdG1wMiA9IGI0M19jdXJyZW50X2JhbmQoZGV2LT53bCk7CisJaWYgKChucGh5LT5pcGEyZ19vbiAmJiB0bXAyID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHx8CisJICAgIChucGh5LT5pcGE1Z19vbiAmJiB0bXAyID09IElFRUU4MDIxMV9CQU5EXzVHSFopKSB7CisJCWI0M19waHlfc2V0KGRldiwgQjQzX05QSFlfUEFQRF9FTjAsIDB4MSk7CisJCWI0M19waHlfbWFza3NldChkZXYsIEI0M19OUEhZX0VQU19UQUJMRV9BREowLCAweDAwN0YsCisJCQkJbnBoeS0+cGFwZF9lcHNpbG9uX29mZnNldFswXSA8PCA3KTsKKwkJYjQzX3BoeV9zZXQoZGV2LCBCNDNfTlBIWV9QQVBEX0VOMSwgMHgxKTsKKwkJYjQzX3BoeV9tYXNrc2V0KGRldiwgQjQzX05QSFlfRVBTX1RBQkxFX0FESjEsIDB4MDA3RiwKKwkJCQlucGh5LT5wYXBkX2Vwc2lsb25fb2Zmc2V0WzFdIDw8IDcpOworCQliNDNfbnBoeV9pbnRfcGFfc2V0X3R4X2RpZ19maWx0ZXJzKGRldik7CisJfSBlbHNlIGlmIChwaHktPnJldiA+PSA1KSB7CisJCWI0M19ucGh5X2V4dF9wYV9zZXRfdHhfZGlnX2ZpbHRlcnMoZGV2KTsKKwl9CisKKwliNDNfbnBoeV93b3JrYXJvdW5kcyhkZXYpOworCisJLyogUmVzZXQgQ0NBLCBpbiBpbml0IGNvZGUgaXQgZGlmZmVycyBhIGxpdHRsZSBmcm9tIHN0YW5kYXJkIHdheSAqLworCWI0M19ucGh5X2JtYWNfY2xvY2tfZmdjKGRldiwgMSk7CisJdG1wID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQkJDRkcpOworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9CQkNGRywgdG1wIHwgQjQzX05QSFlfQkJDRkdfUlNUQ0NBKTsKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfQkJDRkcsIHRtcCAmIH5CNDNfTlBIWV9CQkNGR19SU1RDQ0EpOworCWI0M19ucGh5X2JtYWNfY2xvY2tfZmdjKGRldiwgMCk7CisKKwkvKiBUT0RPIE4gUEhZIE1BQyBQSFkgQ2xvY2sgU2V0IHdpdGggYXJndW1lbnQgMSAqLworCisJYjQzX25waHlfcGFfb3ZlcnJpZGUoZGV2LCBmYWxzZSk7CiAJYjQzX25waHlfZm9yY2VfcmZfc2VxdWVuY2UoZGV2LCBCNDNfUkZTRVFfUlgyVFgpOwogCWI0M19ucGh5X2ZvcmNlX3JmX3NlcXVlbmNlKGRldiwgQjQzX1JGU0VRX1JFU0VUMlJYKTsKKwliNDNfbnBoeV9wYV9vdmVycmlkZShkZXYsIHRydWUpOwogCi0JYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfQ0xBU1NDVEwpOyAvKiBkdW1teSByZWFkICovCi0JLy9UT0RPIHJlYWQgY29yZTEvMiBjbGlwMSB0aHJlcyByZWdzCisJYjQzX25waHlfY2xhc3NpZmllcihkZXYsIDAsIDApOworCWI0M19ucGh5X3JlYWRfY2xpcF9kZXRlY3Rpb24oZGV2LCBjbGlwKTsKKwl0eF9wd3Jfc3RhdGUgPSBucGh5LT50eHB3cmN0cmw7CisJLyogVE9ETyBOIFBIWSBUWCBwb3dlciBjb250cm9sIHdpdGggYXJndW1lbnQgMAorCQkodHVybmluZyBvZmYgcG93ZXIgY29udHJvbCkgKi8KKwkvKiBUT0RPIEZpeCB0aGUgVFggUG93ZXIgU2V0dGluZ3MgKi8KKwkvKiBUT0RPIE4gUEhZIFRYIFBvd2VyIENvbnRyb2wgSWRsZSBUU1NJICovCisJLyogVE9ETyBOIFBIWSBUWCBQb3dlciBDb250cm9sIFNldHVwICovCiAKLQlpZiAoMSAvKiBGSVhNRSBCYW5kIGlzIDIuNEdIeiAqLykKLQkJYjQzX25waHlfYnBoeV9pbml0KGRldik7Ci0JLy9UT0RPIGRpc2FibGUgVFggcG93ZXIgY29udHJvbAotCS8vVE9ETyBGaXggdGhlIFRYIHBvd2VyIHNldHRpbmdzCi0JLy9UT0RPIEluaXQgcGVyaW9kaWMgY2FsaWJyYXRpb24gd2l0aCByZWFzb24gMwotCWI0M19ucGh5X3Jzc2lfY2FsKGRldiwgMik7Ci0JYjQzX25waHlfcnNzaV9jYWwoZGV2LCAwKTsKLQliNDNfbnBoeV9yc3NpX2NhbChkZXYsIDEpOwotCS8vVE9ETyBnZXQgVFggZ2FpbgotCS8vVE9ETyBpbml0IHN1cGVyc3dpdGNoCi0JLy9UT0RPIGNhbGlicmF0ZSBMTwotCS8vVE9ETyBpZGxlIFRTU0kgVFggcGN0bAotCS8vVE9ETyBUWCBwb3dlciBjb250cm9sIHBvd2VyIHNldHVwCi0JLy9UT0RPIHRhYmxlIHdyaXRlcwotCS8vVE9ETyBUWCBwb3dlciBjb250cm9sIGNvZWZmaWNpZW50cwotCS8vVE9ETyBlbmFibGUgVFggcG93ZXIgY29udHJvbAotCS8vVE9ETyBjb250cm9sIGFudGVubmEgc2VsZWN0aW9uCi0JLy9UT0RPIGluaXQgcmFkYXIgZGV0ZWN0aW9uCi0JLy9UT0RPIHJlc2V0IGNoYW5uZWwgaWYgY2hhbmdlZAorCWlmIChwaHktPnJldiA+PSAzKSB7CisJCS8qIFRPRE8gKi8KKwl9IGVsc2UgeworCQliNDNfbnRhYl93cml0ZV9idWxrKGRldiwgQjQzX05UQUIzMigyNiwgMTkyKSwgMTI4LAorCQkJCQliNDNfbnRhYl90eF9nYWluX3JldjBfMV8yKTsKKwkJYjQzX250YWJfd3JpdGVfYnVsayhkZXYsIEI0M19OVEFCMzIoMjcsIDE5MiksIDEyOCwKKwkJCQkJYjQzX250YWJfdHhfZ2Fpbl9yZXYwXzFfMik7CisJfQorCisJaWYgKG5waHktPnBoeXJ4Y2hhaW4gIT0gMykKKwkJOy8qIFRPRE8gTiBQSFkgUlggQ29yZSBTZXQgU3RhdGUgd2l0aCBwaHlyeGNoYWluIGFzIGFyZ3VtZW50ICovCisJaWYgKG5waHktPm1waGFzZV9jYWxfcGhhc2VfaWQgPiAwKQorCQk7LyogVE9ETyBQSFkgUGVyaW9kaWMgQ2FsaWJyYXRpb24gTXVsdGktUGhhc2UgUmVzdGFydCAqLworCisJZG9fcnNzaV9jYWwgPSBmYWxzZTsKKwlpZiAocGh5LT5yZXYgPj0gMykgeworCQlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQkJZG9fcnNzaV9jYWwgPSAobnBoeS0+cnNzaWNhbF9jaGFuc3BlY18yRyA9PSAwKTsKKwkJZWxzZQorCQkJZG9fcnNzaV9jYWwgPSAobnBoeS0+cnNzaWNhbF9jaGFuc3BlY181RyA9PSAwKTsKKworCQlpZiAoZG9fcnNzaV9jYWwpCisJCQliNDNfbnBoeV9yc3NpX2NhbChkZXYpOworCQllbHNlCisJCQliNDNfbnBoeV9yZXN0b3JlX3Jzc2lfY2FsKGRldik7CisJfSBlbHNlIHsKKwkJYjQzX25waHlfcnNzaV9jYWwoZGV2KTsKKwl9CisKKwlpZiAoISgobnBoeS0+bWVhc3VyZV9ob2xkICYgMHg2KSAhPSAwKSkgeworCQlpZiAoYjQzX2N1cnJlbnRfYmFuZChkZXYtPndsKSA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQkJZG9fY2FsID0gKG5waHktPmlxY2FsX2NoYW5zcGVjXzJHID09IDApOworCQllbHNlCisJCQlkb19jYWwgPSAobnBoeS0+aXFjYWxfY2hhbnNwZWNfNUcgPT0gMCk7CisKKwkJaWYgKG5waHktPm11dGUpCisJCQlkb19jYWwgPSBmYWxzZTsKKworCQlpZiAoZG9fY2FsKSB7CisJCQl0YXJnZXQgPSBiNDNfbnBoeV9nZXRfdHhfZ2FpbnMoZGV2KTsKKworCQkJaWYgKG5waHktPmFudHNlbF90eXBlID09IDIpCisJCQkJOy8qVE9ETyBOUEhZIFN1cGVyc3dpdGNoIEluaXQgd2l0aCBhcmd1bWVudCAxKi8KKwkJCWlmIChucGh5LT5wZXJpY2FsICE9IDIpIHsKKwkJCQliNDNfbnBoeV9yc3NpX2NhbChkZXYpOworCQkJCWlmIChwaHktPnJldiA+PSAzKSB7CisJCQkJCW5waHktPmNhbF9vcmlnX3B3cl9pZHhbMF0gPQorCQkJCQkgICAgbnBoeS0+dHhwd3JpbmRleFswXS5pbmRleF9pbnRlcm5hbDsKKwkJCQkJbnBoeS0+Y2FsX29yaWdfcHdyX2lkeFsxXSA9CisJCQkJCSAgICBucGh5LT50eHB3cmluZGV4WzFdLmluZGV4X2ludGVybmFsOworCQkJCQkvKiBUT0RPIE4gUEhZIFByZSBDYWxpYnJhdGUgVFggR2FpbiAqLworCQkJCQl0YXJnZXQgPSBiNDNfbnBoeV9nZXRfdHhfZ2FpbnMoZGV2KTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIWI0M19ucGh5X2NhbF90eF9pcV9sbyhkZXYsIHRhcmdldCwgdHJ1ZSwgZmFsc2UpKSB7CisJCWlmIChiNDNfbnBoeV9jYWxfcnhfaXEoZGV2LCB0YXJnZXQsIDIsIDApID09IDApCisJCQliNDNfbnBoeV9zYXZlX2NhbChkZXYpOworCQllbHNlIGlmIChucGh5LT5tcGhhc2VfY2FsX3BoYXNlX2lkID09IDApCisJCQk7LyogTiBQSFkgUGVyaW9kaWMgQ2FsaWJyYXRpb24gd2l0aCBhcmd1bWVudCAzICovCisJfSBlbHNlIHsKKwkJYjQzX25waHlfcmVzdG9yZV9jYWwoZGV2KTsKKwl9CisKKwliNDNfbnBoeV90eF9wd3JfY3RybF9jb2VmX3NldHVwKGRldik7CisJLyogVE9ETyBOIFBIWSBUWCBQb3dlciBDb250cm9sIEVuYWJsZSB3aXRoIGFyZ3VtZW50IHR4X3B3cl9zdGF0ZSAqLworCWI0M19waHlfd3JpdGUoZGV2LCBCNDNfTlBIWV9UWE1BQ0lGX0hPTERPRkYsIDB4MDAxNSk7CisJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RYTUFDREVMQVksIDB4MDMyMCk7CisJaWYgKHBoeS0+cmV2ID49IDMgJiYgcGh5LT5yZXYgPD0gNikKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1BMT0FEX0NTRU5TRV9FWFRMRU4sIDB4MDAxNCk7CisJYjQzX25waHlfdHhfbHBfZmJ3KGRldik7CisJaWYgKHBoeS0+cmV2ID49IDMpCisJCWI0M19ucGh5X3NwdXJfd29ya2Fyb3VuZChkZXYpOwogCiAJYjQzZXJyKGRldi0+d2wsICJJRUVFIDgwMi4xMW4gZGV2aWNlcyBhcmUgbm90IHN1cHBvcnRlZCwgeWV0LlxuIik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGh5X24uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbi5oCmluZGV4IDE3NDlhZWYuLjQwM2FhZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waHlfbi5oCkBAIC0yMzEsNiArMjMxLDcgQEAKICNkZWZpbmUgQjQzX05QSFlfQzJfVFhJUV9DT01QX09GRgkJQjQzX1BIWV9OKDB4MDg4KSAvKiBDb3JlIDIgVFggSS9RIGNvbXAgb2Zmc2V0ICovCiAjZGVmaW5lIEI0M19OUEhZX0MxX1RYQ1RMCQkJQjQzX1BIWV9OKDB4MDhCKSAvKiBDb3JlIDEgVFggY29udHJvbCAqLwogI2RlZmluZSBCNDNfTlBIWV9DMl9UWENUTAkJCUI0M19QSFlfTigweDA4QykgLyogQ29yZSAyIFRYIGNvbnRyb2wgKi8KKyNkZWZpbmUgQjQzX05QSFlfQUZFQ1RMX09WRVIxCQkJQjQzX1BIWV9OKDB4MDhGKSAvKiBBRkUgY29udHJvbCBvdmVycmlkZSAxICovCiAjZGVmaW5lIEI0M19OUEhZX1NDUkFNX1NJR0NUTAkJCUI0M19QSFlfTigweDA5MCkgLyogU2NyYW0gc2lnbmFsIGNvbnRyb2wgKi8KICNkZWZpbmUgIEI0M19OUEhZX1NDUkFNX1NJR0NUTF9JTklUU1QJCTB4MDA3RiAvKiBJbml0aWFsIHN0YXRlIHZhbHVlICovCiAjZGVmaW5lICBCNDNfTlBIWV9TQ1JBTV9TSUdDVExfSU5JVFNUX1NISUZUCTAKQEAgLTcwNSw2ICs3MDYsMTAgQEAKICNkZWZpbmUgQjQzX05QSFlfVFhQQ1RMX0lOSVQJCQlCNDNfUEhZX04oMHgyMjIpIC8qIFRYIHBvd2VyIGNvbnRyb2xsIGluaXQgKi8KICNkZWZpbmUgIEI0M19OUEhZX1RYUENUTF9JTklUX1BJRFhJMQkJMHgwMEZGIC8qIFBvd2VyIGluZGV4IGluaXQgMSAqLwogI2RlZmluZSAgQjQzX05QSFlfVFhQQ1RMX0lOSVRfUElEWEkxX1NISUZUCTAKKyNkZWZpbmUgQjQzX05QSFlfUEFQRF9FTjAJCQlCNDNfUEhZX04oMHgyOTcpIC8qIFBBUEQgRW5hYmxlMCBUQkQgKi8KKyNkZWZpbmUgQjQzX05QSFlfRVBTX1RBQkxFX0FESjAJCQlCNDNfUEhZX04oMHgyOTgpIC8qIEVQUyBUYWJsZSBBZGowIFRCRCAqLworI2RlZmluZSBCNDNfTlBIWV9QQVBEX0VOMQkJCUI0M19QSFlfTigweDI5QikgLyogUEFQRCBFbmFibGUxIFRCRCAqLworI2RlZmluZSBCNDNfTlBIWV9FUFNfVEFCTEVfQURKMQkJCUI0M19QSFlfTigweDI5QykgLyogRVBTIFRhYmxlIEFkajEgVEJEICovCiAKIAogCkBAIC05MTksOCArOTI0LDk5IEBACiAKIHN0cnVjdCBiNDNfd2xkZXY7CiAKK3N0cnVjdCBiNDNfcGh5X25faXFfY29tcCB7CisJczE2IGEwOworCXMxNiBiMDsKKwlzMTYgYTE7CisJczE2IGIxOworfTsKKworc3RydWN0IGI0M19waHlfbl9yc3NpY2FsX2NhY2hlIHsKKwl1MTYgcnNzaWNhbF9yYWRpb19yZWdzXzJHWzJdOworCXUxNiByc3NpY2FsX3BoeV9yZWdzXzJHWzEyXTsKKworCXUxNiByc3NpY2FsX3JhZGlvX3JlZ3NfNUdbMl07CisJdTE2IHJzc2ljYWxfcGh5X3JlZ3NfNUdbMTJdOworfTsKKworc3RydWN0IGI0M19waHlfbl9jYWxfY2FjaGUgeworCXUxNiB0eGNhbF9yYWRpb19yZWdzXzJHWzhdOworCXUxNiB0eGNhbF9jb2VmZnNfMkdbOF07CisJc3RydWN0IGI0M19waHlfbl9pcV9jb21wIHJ4Y2FsX2NvZWZmc18yRzsKKworCXUxNiB0eGNhbF9yYWRpb19yZWdzXzVHWzhdOworCXUxNiB0eGNhbF9jb2VmZnNfNUdbOF07CisJc3RydWN0IGI0M19waHlfbl9pcV9jb21wIHJ4Y2FsX2NvZWZmc181RzsKK307CisKK3N0cnVjdCBiNDNfcGh5X25fdHhwd3JpbmRleCB7CisJczggaW5kZXg7CisJczggaW5kZXhfaW50ZXJuYWw7CisJczggaW5kZXhfaW50ZXJuYWxfc2F2ZTsKKwl1MTYgQWZlY3RybE92ZXJyaWRlOworCXUxNiBBZmVDdHJsRGFjR2FpbjsKKwl1MTYgcmFkX2dhaW47CisJdTggYmJtdWx0OworCXUxNiBpcWNvbXBfYTsKKwl1MTYgaXFjb21wX2I7CisJdTE2IGxvY29tcDsKK307CisKIHN0cnVjdCBiNDNfcGh5X24gewotCS8vVE9ETyBsb3RzIG9mIG1pc3Npbmcgc3R1ZmYKKwl1OCBhbnRzZWxfdHlwZTsKKwl1OCBjYWxfb3JpZ19wd3JfaWR4WzJdOworCXU4IG1lYXN1cmVfaG9sZDsKKwl1OCBwaHlyeGNoYWluOworCXU4IHBlcmljYWw7CisJdTMyIGRlYWZfY291bnQ7CisJdTMyIHJ4Y2FscGFyYW1zOworCWJvb2wgaGFuZ19hdm9pZDsKKwlib29sIG11dGU7CisJdTE2IHBhcGRfZXBzaWxvbl9vZmZzZXRbMl07CisJczMyIHByZWFtYmxlX292ZXJyaWRlOworCXUzMiBiYl9tdWx0X3NhdmU7CisJdTE2IHJhZGlvX2NoYW5zcGVjOworCisJYm9vbCBnYWluX2Jvb3N0OworCWJvb2wgZWxuYV9nYWluX2NvbmZpZzsKKwlib29sIGJhbmQ1Z19wd3JnYWluOworCisJdTggbXBoYXNlX2NhbF9waGFzZV9pZDsKKwl1MTYgbXBoYXNlX3R4Y2FsX2NtZGlkeDsKKwl1MTYgbXBoYXNlX3R4Y2FsX251bWNtZHM7CisJdTE2IG1waGFzZV90eGNhbF9iZXN0Y29lZmZzWzExXTsKKworCXU4IHR4cHdyY3RybDsKKwl1MTYgdHhjYWxfYmJtdWx0OworCXUxNiB0eGlxbG9jYWxfYmVzdGNbMTFdOworCWJvb2wgdHhpcWxvY2FsX2NvZWZmc3ZhbGlkOworCXN0cnVjdCBiNDNfcGh5X25fdHhwd3JpbmRleCB0eHB3cmluZGV4WzJdOworCisJdTggdHhyeF9jaGFpbjsKKwl1MTYgdHhfcnhfY2FsX3BoeV9zYXZlcmVnc1sxMV07CisJdTE2IHR4X3J4X2NhbF9yYWRpb19zYXZlcmVnc1syMl07CisKKwl1MTYgcmZjdHJsX2ludGMxX3NhdmU7CisJdTE2IHJmY3RybF9pbnRjMl9zYXZlOworCisJdTE2IGNsYXNzaWZpZXJfc3RhdGU7CisJdTE2IGNsaXBfc3RhdGVbMl07CisKKwlib29sIGFiYW5kX3NwdXJ3YXJfZW47CisJYm9vbCBnYmFuZF9zcHVyd2FyX2VuOworCisJYm9vbCBpcGEyZ19vbjsKKwl1OCBpcWNhbF9jaGFuc3BlY18yRzsKKwl1OCByc3NpY2FsX2NoYW5zcGVjXzJHOworCisJYm9vbCBpcGE1Z19vbjsKKwl1OCBpcWNhbF9jaGFuc3BlY181RzsKKwl1OCByc3NpY2FsX2NoYW5zcGVjXzVHOworCisJc3RydWN0IGI0M19waHlfbl9yc3NpY2FsX2NhY2hlIHJzc2ljYWxfY2FjaGU7CisJc3RydWN0IGI0M19waHlfbl9jYWxfY2FjaGUgY2FsX2NhY2hlOworCWJvb2wgY3JzbWlucHdyX2FkanVzdGVkOworCWJvb2wgbm9pc2V2YXJzX2FkanVzdGVkOwogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmMKaW5kZXggYzAxYjhlMC4uYTYwNjJjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3Bpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uYwpAQCAtNTU5LDcgKzU1OSw2IEBACiAJCWI0M2VycihkZXYtPndsLCAiUElPIHRyYW5zbWlzc2lvbiBmYWlsdXJlXG4iKTsKIAkJZ290byBvdXQ7CiAJfQotCXEtPm5yX3R4X3BhY2tldHMrKzsKIAogCUI0M19XQVJOX09OKHEtPmJ1ZmZlcl91c2VkID4gcS0+YnVmZmVyX3NpemUpOwogCWlmICgoKHEtPmJ1ZmZlcl9zaXplIC0gcS0+YnVmZmVyX3VzZWQpIDwgcm91bmR1cCgyICsgMiArIDYsIDQpKSB8fApAQCAtNjA1LDIyICs2MDQsNiBAQAogCX0KIH0KIAotdm9pZCBiNDNfcGlvX2dldF90eF9zdGF0cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkgIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKQotewotCWNvbnN0IGludCBucl9xdWV1ZXMgPSBkZXYtPndsLT5ody0+cXVldWVzOwotCXN0cnVjdCBiNDNfcGlvX3R4cXVldWUgKnE7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcXVldWVzOyBpKyspIHsKLQkJcSA9IHNlbGVjdF9xdWV1ZV9ieV9wcmlvcml0eShkZXYsIGkpOwotCi0JCXN0YXRzW2ldLmxlbiA9IEI0M19QSU9fTUFYX05SX1RYUEFDS0VUUyAtIHEtPmZyZWVfcGFja2V0X3Nsb3RzOwotCQlzdGF0c1tpXS5saW1pdCA9IEI0M19QSU9fTUFYX05SX1RYUEFDS0VUUzsKLQkJc3RhdHNbaV0uY291bnQgPSBxLT5ucl90eF9wYWNrZXRzOwotCX0KLX0KLQogLyogUmV0dXJucyB3aGV0aGVyIHdlIHNob3VsZCBmZXRjaCBhbm90aGVyIGZyYW1lLiAqLwogc3RhdGljIGJvb2wgcGlvX3J4X2ZyYW1lKHN0cnVjdCBiNDNfcGlvX3J4cXVldWUgKnEpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmgKaW5kZXggN2RkNjQ5YzkuLjFlNTE2MTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My9waW8uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvcGlvLmgKQEAgLTU1LDggKzU1LDYgQEAKICNkZWZpbmUgQjQzX1BJT19NQVhfTlJfVFhQQUNLRVRTCTMyCiAKIAotI2lmZGVmIENPTkZJR19CNDNfUElPCi0KIHN0cnVjdCBiNDNfcGlvX3R4cGFja2V0IHsKIAkvKiBQb2ludGVyIHRvIHRoZSBUWCBxdWV1ZSB3ZSBiZWxvbmcgdG8uICovCiAJc3RydWN0IGI0M19waW9fdHhxdWV1ZSAqcXVldWU7CkBAIC05Miw5ICs5MCw2IEBACiAJc3RydWN0IGI0M19waW9fdHhwYWNrZXQgcGFja2V0c1tCNDNfUElPX01BWF9OUl9UWFBBQ0tFVFNdOwogCXN0cnVjdCBsaXN0X2hlYWQgcGFja2V0c19saXN0OwogCi0JLyogVG90YWwgbnVtYmVyIG9mIHRyYW5zbWl0dGVkIHBhY2tldHMuICovCi0JdW5zaWduZWQgaW50IG5yX3R4X3BhY2tldHM7Ci0KIAkvKiBTaG9ydGN1dCB0byB0aGUgODAyLjExIGNvcmUgcmV2aXNpb24uIFRoaXMgaXMgdG8KIAkgKiBhdm9pZCBob3JyaWJsZSBwb2ludGVyIGRlcmVmZXJlbmNpbmcgaW4gdGhlIGZhc3RwYXRocy4gKi8KIAl1OCByZXY7CkBAIC0xNjIsNDkgKzE1Nyw5IEBACiBpbnQgYjQzX3Bpb190eChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBiNDNfcGlvX2hhbmRsZV90eHN0YXR1cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCBiNDNfdHhzdGF0dXMgKnN0YXR1cyk7Ci12b2lkIGI0M19waW9fZ2V0X3R4X3N0YXRzKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCSAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpOwogdm9pZCBiNDNfcGlvX3J4KHN0cnVjdCBiNDNfcGlvX3J4cXVldWUgKnEpOwogCiB2b2lkIGI0M19waW9fdHhfc3VzcGVuZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogdm9pZCBiNDNfcGlvX3R4X3Jlc3VtZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogCi0KLSNlbHNlIC8qIENPTkZJR19CNDNfUElPICovCi0KLQotc3RhdGljIGlubGluZSBpbnQgYjQzX3Bpb19pbml0KHN0cnVjdCBiNDNfd2xkZXYgKmRldikKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiNDNfcGlvX2ZyZWUoc3RydWN0IGI0M193bGRldiAqZGV2KQotewotfQotc3RhdGljIGlubGluZSB2b2lkIGI0M19waW9fc3RvcChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCi17Ci19Ci1zdGF0aWMgaW5saW5lIGludCBiNDNfcGlvX3R4KHN0cnVjdCBiNDNfd2xkZXYgKmRldiwKLQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKLXsKLQlyZXR1cm4gMDsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiNDNfcGlvX2hhbmRsZV90eHN0YXR1cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkJCSAgIGNvbnN0IHN0cnVjdCBiNDNfdHhzdGF0dXMgKnN0YXR1cykKLXsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiNDNfcGlvX2dldF90eF9zdGF0cyhzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKQotewotfQotc3RhdGljIGlubGluZSB2b2lkIGI0M19waW9fcngoc3RydWN0IGI0M19waW9fcnhxdWV1ZSAqcSkKLXsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBiNDNfcGlvX3R4X3N1c3BlbmQoc3RydWN0IGI0M193bGRldiAqZGV2KQotewotfQotc3RhdGljIGlubGluZSB2b2lkIGI0M19waW9fdHhfcmVzdW1lKHN0cnVjdCBiNDNfd2xkZXYgKmRldikKLXsKLX0KLQotI2VuZGlmIC8qIENPTkZJR19CNDNfUElPICovCiAjZW5kaWYgLyogQjQzX1BJT19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzL3RhYmxlc19ucGh5LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvdGFibGVzX25waHkuYwppbmRleCA0ZTIzMzYzLi5hMDBkNTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvdGFibGVzX25waHkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvdGFibGVzX25waHkuYwpAQCAtMTMzNiw3ICsxMzM2LDcgQEAKIH0KIAogCi1jb25zdCB1OCBiNDNfbnRhYl9hZGp1c3Rwb3dlcjBbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBiNDNfbnRhYl9hZGp1c3Rwb3dlcjBbXSA9IHsKIAkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAxLCAweDAxLCAweDAxLAogCTB4MDIsIDB4MDIsIDB4MDIsIDB4MDIsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsCiAJMHgwNCwgMHgwNCwgMHgwNCwgMHgwNCwgMHgwNSwgMHgwNSwgMHgwNSwgMHgwNSwKQEAgLTEzNTUsNyArMTM1NSw3IEBACiAJMHgxRSwgMHgxRSwgMHgxRSwgMHgxRSwgMHgxRiwgMHgxRiwgMHgxRiwgMHgxRiwKIH07CiAKLWNvbnN0IHU4IGI0M19udGFiX2FkanVzdHBvd2VyMVtdID0geworc3RhdGljIGNvbnN0IHU4IGI0M19udGFiX2FkanVzdHBvd2VyMVtdID0gewogCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDEsIDB4MDEsIDB4MDEsCiAJMHgwMiwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMywgMHgwMywgMHgwMywgMHgwMywKIAkweDA0LCAweDA0LCAweDA0LCAweDA0LCAweDA1LCAweDA1LCAweDA1LCAweDA1LApAQCAtMTM3NCwxMSArMTM3NCwxMSBAQAogCTB4MUUsIDB4MUUsIDB4MUUsIDB4MUUsIDB4MUYsIDB4MUYsIDB4MUYsIDB4MUYsCiB9OwogCi1jb25zdCB1MTYgYjQzX250YWJfYmRpW10gPSB7CitzdGF0aWMgY29uc3QgdTE2IGI0M19udGFiX2JkaVtdID0gewogCTB4MDA3MCwgMHgwMTI2LCAweDAxMkMsIDB4MDI0NiwgMHgwNDhELCAweDA0RDIsCiB9OwogCi1jb25zdCB1MzIgYjQzX250YWJfY2hhbm5lbGVzdFtdID0geworc3RhdGljIGNvbnN0IHUzMiBiNDNfbnRhYl9jaGFubmVsZXN0W10gPSB7CiAJMHg0NDQ0NDQ0NCwgMHg0NDQ0NDQ0NCwgMHg0NDQ0NDQ0NCwgMHg0NDQ0NDQ0NCwKIAkweDQ0NDQ0NDQ0LCAweDQ0NDQ0NDQ0LCAweDQ0NDQ0NDQ0LCAweDQ0NDQ0NDQ0LAogCTB4MTAxMDEwMTAsIDB4MTAxMDEwMTAsIDB4MTAxMDEwMTAsIDB4MTAxMDEwMTAsCkBAIC0xNDA1LDcgKzE0MDUsNyBAQAogCTB4MTAxMDEwMTAsIDB4MTAxMDEwMTAsIDB4MTAxMDEwMTAsIDB4MTAxMDEwMTAsCiB9OwogCi1jb25zdCB1OCBiNDNfbnRhYl9lc3RpbWF0ZXBvd2VybHQwW10gPSB7CitzdGF0aWMgY29uc3QgdTggYjQzX250YWJfZXN0aW1hdGVwb3dlcmx0MFtdID0gewogCTB4NTAsIDB4NEYsIDB4NEUsIDB4NEQsIDB4NEMsIDB4NEIsIDB4NEEsIDB4NDksCiAJMHg0OCwgMHg0NywgMHg0NiwgMHg0NSwgMHg0NCwgMHg0MywgMHg0MiwgMHg0MSwKIAkweDQwLCAweDNGLCAweDNFLCAweDNELCAweDNDLCAweDNCLCAweDNBLCAweDM5LApAQCAtMTQxNiw3ICsxNDE2LDcgQEAKIAkweDE4LCAweDE3LCAweDE2LCAweDE1LCAweDE0LCAweDEzLCAweDEyLCAweDExLAogfTsKIAotY29uc3QgdTggYjQzX250YWJfZXN0aW1hdGVwb3dlcmx0MVtdID0geworc3RhdGljIGNvbnN0IHU4IGI0M19udGFiX2VzdGltYXRlcG93ZXJsdDFbXSA9IHsKIAkweDUwLCAweDRGLCAweDRFLCAweDRELCAweDRDLCAweDRCLCAweDRBLCAweDQ5LAogCTB4NDgsIDB4NDcsIDB4NDYsIDB4NDUsIDB4NDQsIDB4NDMsIDB4NDIsIDB4NDEsCiAJMHg0MCwgMHgzRiwgMHgzRSwgMHgzRCwgMHgzQywgMHgzQiwgMHgzQSwgMHgzOSwKQEAgLTE0MjcsMTQgKzE0MjcsMTQgQEAKIAkweDE4LCAweDE3LCAweDE2LCAweDE1LCAweDE0LCAweDEzLCAweDEyLCAweDExLAogfTsKIAotY29uc3QgdTggYjQzX250YWJfZnJhbWVsb29rdXBbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCBiNDNfbnRhYl9mcmFtZWxvb2t1cFtdID0gewogCTB4MDIsIDB4MDQsIDB4MTQsIDB4MTQsIDB4MDMsIDB4MDUsIDB4MTYsIDB4MTYsCiAJMHgwQSwgMHgwQywgMHgxQywgMHgxQywgMHgwQiwgMHgwRCwgMHgxRSwgMHgxRSwKIAkweDA2LCAweDA4LCAweDE4LCAweDE4LCAweDA3LCAweDA5LCAweDFBLCAweDFBLAogCTB4MEUsIDB4MTAsIDB4MjAsIDB4MjgsIDB4MEYsIDB4MTEsIDB4MjIsIDB4MkEsCiB9OwogCi1jb25zdCB1MzIgYjQzX250YWJfZnJhbWVzdHJ1Y3RbXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYjQzX250YWJfZnJhbWVzdHJ1Y3RbXSA9IHsKIAkweDA4MDA0QTA0LCAweDAwMTAwMDAwLCAweDAxMDAwQTA1LCAweDAwMTAwMDIwLAogCTB4MDk4MDQ1MDYsIDB4MDAxMDAwMzAsIDB4MDk4MDQ1MDcsIDB4MDAxMDAwMzAsCiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKQEAgLTE2NDUsNyArMTY0NSw3IEBACiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKIH07CiAKLWNvbnN0IHUzMiBiNDNfbnRhYl9nYWluY3RsMFtdID0geworc3RhdGljIGNvbnN0IHUzMiBiNDNfbnRhYl9nYWluY3RsMFtdID0gewogCTB4MDA3RjAwM0YsIDB4MDA3RTAxM0YsIDB4MDA3RDAyM0UsIDB4MDA3QzAzM0UsCiAJMHgwMDdCMDQzRCwgMHgwMDdBMDUzRCwgMHgwMDc5MDYzQywgMHgwMDc4MDczQywKIAkweDAwNzcwODNCLCAweDAwNzYwOTNCLCAweDAwNzUwQTNBLCAweDAwNzQwQjNBLApAQCAtMTY4MCw3ICsxNjgwLDcgQEAKIAkweDAwMDMwQzAxLCAweDAwMDIwRDAxLCAweDAwMDEwRTAwLCAweDAwMDAwRjAwLAogfTsKIAotY29uc3QgdTMyIGI0M19udGFiX2dhaW5jdGwxW10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGI0M19udGFiX2dhaW5jdGwxW10gPSB7CiAJMHgwMDdGMDAzRiwgMHgwMDdFMDEzRiwgMHgwMDdEMDIzRSwgMHgwMDdDMDMzRSwKIAkweDAwN0IwNDNELCAweDAwN0EwNTNELCAweDAwNzkwNjNDLCAweDAwNzgwNzNDLAogCTB4MDA3NzA4M0IsIDB4MDA3NjA5M0IsIDB4MDA3NTBBM0EsIDB4MDA3NDBCM0EsCkBAIC0xNzE1LDEyICsxNzE1LDEyIEBACiAJMHgwMDAzMEMwMSwgMHgwMDAyMEQwMSwgMHgwMDAxMEUwMCwgMHgwMDAwMEYwMCwKIH07CiAKLWNvbnN0IHUzMiBiNDNfbnRhYl9pbnRsZXZlbFtdID0geworc3RhdGljIGNvbnN0IHUzMiBiNDNfbnRhYl9pbnRsZXZlbFtdID0gewogCTB4MDA4MDIwNzAsIDB4MDY3MTE4OEQsIDB4MEE2MDE5MkMsIDB4MEEzMDBFNDYsCiAJMHgwMEMxMTg4RCwgMHgwODAwMjREMiwgMHgwMDAwMDA3MCwKIH07CiAKLWNvbnN0IHUzMiBiNDNfbnRhYl9pcWx0MFtdID0geworc3RhdGljIGNvbnN0IHUzMiBiNDNfbnRhYl9pcWx0MFtdID0gewogCTB4MDAwMDAwN0YsIDB4MDAwMDAwN0YsIDB4MDAwMDAwN0YsIDB4MDAwMDAwN0YsCiAJMHgwMDAwMDA3RiwgMHgwMDAwMDA3RiwgMHgwMDAwMDA3RiwgMHgwMDAwMDA3RiwKIAkweDAwMDAwMDdGLCAweDAwMDAwMDdGLCAweDAwMDAwMDdGLCAweDAwMDAwMDdGLApAQCAtMTc1NSw3ICsxNzU1LDcgQEAKIAkweDAwMDAwMDdGLCAweDAwMDAwMDdGLCAweDAwMDAwMDdGLCAweDAwMDAwMDdGLAogfTsKIAotY29uc3QgdTMyIGI0M19udGFiX2lxbHQxW10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGI0M19udGFiX2lxbHQxW10gPSB7CiAJMHgwMDAwMDA3RiwgMHgwMDAwMDA3RiwgMHgwMDAwMDA3RiwgMHgwMDAwMDA3RiwKIAkweDAwMDAwMDdGLCAweDAwMDAwMDdGLCAweDAwMDAwMDdGLCAweDAwMDAwMDdGLAogCTB4MDAwMDAwN0YsIDB4MDAwMDAwN0YsIDB4MDAwMDAwN0YsIDB4MDAwMDAwN0YsCkBAIC0xNzkwLDcgKzE3OTAsNyBAQAogCTB4MDAwMDAwN0YsIDB4MDAwMDAwN0YsIDB4MDAwMDAwN0YsIDB4MDAwMDAwN0YsCiB9OwogCi1jb25zdCB1MTYgYjQzX250YWJfbG9mdGx0MFtdID0geworc3RhdGljIGNvbnN0IHUxNiBiNDNfbnRhYl9sb2Z0bHQwW10gPSB7CiAJMHgwMDAwLCAweDAxMDEsIDB4MDAwMiwgMHgwMTAzLCAweDAwMDAsIDB4MDEwMSwKIAkweDAwMDIsIDB4MDEwMywgMHgwMDAwLCAweDAxMDEsIDB4MDAwMiwgMHgwMTAzLAogCTB4MDAwMCwgMHgwMTAxLCAweDAwMDIsIDB4MDEwMywgMHgwMDAwLCAweDAxMDEsCkBAIC0xODE1LDcgKzE4MTUsNyBAQAogCTB4MDAwMiwgMHgwMTAzLAogfTsKIAotY29uc3QgdTE2IGI0M19udGFiX2xvZnRsdDFbXSA9IHsKK3N0YXRpYyBjb25zdCB1MTYgYjQzX250YWJfbG9mdGx0MVtdID0gewogCTB4MDAwMCwgMHgwMTAxLCAweDAwMDIsIDB4MDEwMywgMHgwMDAwLCAweDAxMDEsCiAJMHgwMDAyLCAweDAxMDMsIDB4MDAwMCwgMHgwMTAxLCAweDAwMDIsIDB4MDEwMywKIAkweDAwMDAsIDB4MDEwMSwgMHgwMDAyLCAweDAxMDMsIDB4MDAwMCwgMHgwMTAxLApAQCAtMTg0MCw3ICsxODQwLDcgQEAKIAkweDAwMDIsIDB4MDEwMywKIH07CiAKLWNvbnN0IHU4IGI0M19udGFiX21jc1tdID0geworc3RhdGljIGNvbnN0IHU4IGI0M19udGFiX21jc1tdID0gewogCTB4MDAsIDB4MDgsIDB4MEEsIDB4MTAsIDB4MTIsIDB4MTksIDB4MUEsIDB4MUMsCiAJMHg0MCwgMHg0OCwgMHg0QSwgMHg1MCwgMHg1MiwgMHg1OSwgMHg1QSwgMHg1QywKIAkweDgwLCAweDg4LCAweDhBLCAweDkwLCAweDkyLCAweDk5LCAweDlBLCAweDlDLApAQCAtMTg1OSw3ICsxODU5LDcgQEAKIAkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAogfTsKIAotY29uc3QgdTMyIGI0M19udGFiX25vaXNldmFyMTBbXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYjQzX250YWJfbm9pc2V2YXIxMFtdID0gewogCTB4MDIwQzAyMEMsIDB4MDAwMDAxNEQsIDB4MDIwQzAyMEMsIDB4MDAwMDAxNEQsCiAJMHgwMjBDMDIwQywgMHgwMDAwMDE0RCwgMHgwMjBDMDIwQywgMHgwMDAwMDE0RCwKIAkweDAyMEMwMjBDLCAweDAwMDAwMTRELCAweDAyMEMwMjBDLCAweDAwMDAwMTRELApAQCAtMTkyNiw3ICsxOTI2LDcgQEAKIAkweDAyMEMwMjBDLCAweDAwMDAwMTRELCAweDAyMEMwMjBDLCAweDAwMDAwMTRELAogfTsKIAotY29uc3QgdTMyIGI0M19udGFiX25vaXNldmFyMTFbXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYjQzX250YWJfbm9pc2V2YXIxMVtdID0gewogCTB4MDIwQzAyMEMsIDB4MDAwMDAxNEQsIDB4MDIwQzAyMEMsIDB4MDAwMDAxNEQsCiAJMHgwMjBDMDIwQywgMHgwMDAwMDE0RCwgMHgwMjBDMDIwQywgMHgwMDAwMDE0RCwKIAkweDAyMEMwMjBDLCAweDAwMDAwMTRELCAweDAyMEMwMjBDLCAweDAwMDAwMTRELApAQCAtMTk5Myw3ICsxOTkzLDcgQEAKIAkweDAyMEMwMjBDLCAweDAwMDAwMTRELCAweDAyMEMwMjBDLCAweDAwMDAwMTRELAogfTsKIAotY29uc3QgdTE2IGI0M19udGFiX3BpbG90W10gPSB7CitzdGF0aWMgY29uc3QgdTE2IGI0M19udGFiX3BpbG90W10gPSB7CiAJMHhGRjA4LCAweEZGMDgsIDB4RkYwOCwgMHhGRjA4LCAweEZGMDgsIDB4RkYwOCwKIAkweEZGMDgsIDB4RkYwOCwgMHg4MEQ1LCAweDgwRDUsIDB4ODBENSwgMHg4MEQ1LAogCTB4ODBENSwgMHg4MEQ1LCAweDgwRDUsIDB4ODBENSwgMHhGRjBBLCAweEZGODIsCkBAIC0yMDExLDEyICsyMDExLDEyIEBACiAJMHhGMEEwLCAweEYwMjgsIDB4RkZGRiwgMHhGRkZGLAogfTsKIAotY29uc3QgdTMyIGI0M19udGFiX3BpbG90bHRbXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYjQzX250YWJfcGlsb3RsdFtdID0gewogCTB4NzY1NDAxMjMsIDB4NjI0MDczNTEsIDB4NzY1NDMyMDEsIDB4NzY1NDAyMTMsCiAJMHg3NjU0MDEyMywgMHg3NjQzMDUyMSwKIH07CiAKLWNvbnN0IHUzMiBiNDNfbnRhYl90ZGkyMGEwW10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGI0M19udGFiX3RkaTIwYTBbXSA9IHsKIAkweDAwMDkxMjI2LCAweDAwMEExNDI5LCAweDAwMEI1NkFELCAweDAwMEM1OEIwLAogCTB4MDAwRDVBQjMsIDB4MDAwRTlDQjYsIDB4MDAwRjlFQkEsIDB4MDAwMEMxM0QsCiAJMHgwMDAyMDMwMSwgMHgwMDAzMDUwNCwgMHgwMDA0MDcwOCwgMHgwMDA1MDkwQiwKQEAgLTIwMzMsNyArMjAzMyw3IEBACiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKIH07CiAKLWNvbnN0IHUzMiBiNDNfbnRhYl90ZGkyMGExW10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGI0M19udGFiX3RkaTIwYTFbXSA9IHsKIAkweDAwMDE0QjI2LCAweDAwMDI4RDI5LCAweDAwMDM5M0FELCAweDAwMDQ5NjMwLAogCTB4MDAwNUQ4MzMsIDB4MDAwNkRBMzYsIDB4MDAwOTlDM0EsIDB4MDAwQTlFM0QsCiAJMHgwMDBCQzA4MSwgMHgwMDBDQzI4NCwgMHgwMDBEQzQ4OCwgMHgwMDBGMDY4QiwKQEAgLTIwNTAsNyArMjA1MCw3IEBACiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKIH07CiAKLWNvbnN0IHUzMiBiNDNfbnRhYl90ZGk0MGEwW10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGI0M19udGFiX3RkaTQwYTBbXSA9IHsKIAkweDAwMTFBMzQ2LCAweDAwMTM2Q0NGLCAweDAwMTRGNUQ5LCAweDAwMTY0MUUyLAogCTB4MDAxN0NCNkIsIDB4MDAxOTU0NzUsIDB4MDAxQjIzODMsIDB4MDAxQ0FEMEMsCiAJMHgwMDFFNzYxNiwgMHgwMDAwODIxRiwgMHgwMDAyMEJBOCwgMHgwMDAzRDRCMiwKQEAgLTIwODEsNyArMjA4MSw3IEBACiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKIH07CiAKLWNvbnN0IHUzMiBiNDNfbnRhYl90ZGk0MGExW10gPSB7CitzdGF0aWMgY29uc3QgdTMyIGI0M19udGFiX3RkaTQwYTFbXSA9IHsKIAkweDAwMUVEQjM2LCAweDAwMDEyOUNBLCAweDAwMDJCMzUzLCAweDAwMDQ3Q0RELAogCTB4MDAwNUM4RTYsIDB4MDAwNzkxRUYsIDB4MDAwOTFCRjksIDB4MDAwQUFBMDcsCiAJMHgwMDBDMzM5MSwgMHgwMDBERkQxQSwgMHgwMDEyMDkyMywgMHgwMDEzRDIyRCwKQEAgLTIxMTIsNyArMjExMiw3IEBACiAJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwKIH07CiAKLWNvbnN0IHUzMiBiNDNfbnRhYl90ZHRybltdID0geworc3RhdGljIGNvbnN0IHUzMiBiNDNfbnRhYl90ZHRybltdID0gewogCTB4MDYxQzA2MUMsIDB4MDA1MEVFNjgsIDB4RjU5MkZFMzYsIDB4RkU1MjEyRjYsCiAJMHgwMDAwMEMzOCwgMHhGRTUyMTJGNiwgMHhGNTkyRkUzNiwgMHgwMDUwRUU2OCwKIAkweDA2MUMwNjFDLCAweEVFNjgwMDUwLCAweEZFMzZGNTkyLCAweDEyRjZGRTUyLApAQCAtMjI5MSw3ICsyMjkxLDcgQEAKIAkweEZBNThGQzAwLCAweDBCNjRGQzdFLCAweDA4MDBGN0I2LCAweDAwRjAwNkJFLAogfTsKIAotY29uc3QgdTMyIGI0M19udGFiX3RtYXBbXSA9IHsKK3N0YXRpYyBjb25zdCB1MzIgYjQzX250YWJfdG1hcFtdID0gewogCTB4OEE4OEFBODAsIDB4OEFBQUFBOEEsIDB4OEE4QThBQTgsIDB4MDAwMDA4ODgsCiAJMHg4ODAwMDAwMCwgMHg4QThBODhBQSwgMHg4QUE4ODg4OCwgMHg4ODg4QThBOCwKIAkweEYxMTExMTEwLCAweDExMTExMTExLCAweDExRjExMTExLCAweDAwMDAwMTExLApAQCAtMjQwNiw2ICsyNDA2LDU0NCBAQAogCTB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsCiB9OwogCitjb25zdCB1MzIgYjQzX250YWJfdHhfZ2Fpbl9yZXYwXzFfMltdID0geworCTB4MDNjYzJiNDQsIDB4MDNjYzJiNDIsIDB4MDNjYzJhNDQsIDB4MDNjYzJhNDIsCisJMHgwM2NjMjk0NCwgMHgwM2M4MmI0NCwgMHgwM2M4MmI0MiwgMHgwM2M4MmE0NCwKKwkweDAzYzgyYTQyLCAweDAzYzgyOTQ0LCAweDAzYzgyOTQyLCAweDAzYzgyODQ0LAorCTB4MDNjODI4NDIsIDB4MDNjNDJiNDQsIDB4MDNjNDJiNDIsIDB4MDNjNDJhNDQsCisJMHgwM2M0MmE0MiwgMHgwM2M0Mjk0NCwgMHgwM2M0Mjk0MiwgMHgwM2M0Mjg0NCwKKwkweDAzYzQyODQyLCAweDAzYzQyNzQ0LCAweDAzYzQyNzQyLCAweDAzYzQyNjQ0LAorCTB4MDNjNDI2NDIsIDB4MDNjNDI1NDQsIDB4MDNjNDI1NDIsIDB4MDNjNDI0NDQsCisJMHgwM2M0MjQ0MiwgMHgwM2MwMmI0NCwgMHgwM2MwMmI0MiwgMHgwM2MwMmE0NCwKKwkweDAzYzAyYTQyLCAweDAzYzAyOTQ0LCAweDAzYzAyOTQyLCAweDAzYzAyODQ0LAorCTB4MDNjMDI4NDIsIDB4MDNjMDI3NDQsIDB4MDNjMDI3NDIsIDB4MDNiMDJiNDQsCisJMHgwM2IwMmI0MiwgMHgwM2IwMmE0NCwgMHgwM2IwMmE0MiwgMHgwM2IwMjk0NCwKKwkweDAzYjAyOTQyLCAweDAzYjAyODQ0LCAweDAzYjAyODQyLCAweDAzYjAyNzQ0LAorCTB4MDNiMDI3NDIsIDB4MDNiMDI2NDQsIDB4MDNiMDI2NDIsIDB4MDNiMDI1NDQsCisJMHgwM2IwMjU0MiwgMHgwM2EwMmI0NCwgMHgwM2EwMmI0MiwgMHgwM2EwMmE0NCwKKwkweDAzYTAyYTQyLCAweDAzYTAyOTQ0LCAweDAzYTAyOTQyLCAweDAzYTAyODQ0LAorCTB4MDNhMDI4NDIsIDB4MDNhMDI3NDQsIDB4MDNhMDI3NDIsIDB4MDM5MDJiNDQsCisJMHgwMzkwMmI0MiwgMHgwMzkwMmE0NCwgMHgwMzkwMmE0MiwgMHgwMzkwMjk0NCwKKwkweDAzOTAyOTQyLCAweDAzOTAyODQ0LCAweDAzOTAyODQyLCAweDAzOTAyNzQ0LAorCTB4MDM5MDI3NDIsIDB4MDM5MDI2NDQsIDB4MDM5MDI2NDIsIDB4MDM5MDI1NDQsCisJMHgwMzkwMjU0MiwgMHgwMzgwMmI0NCwgMHgwMzgwMmI0MiwgMHgwMzgwMmE0NCwKKwkweDAzODAyYTQyLCAweDAzODAyOTQ0LCAweDAzODAyOTQyLCAweDAzODAyODQ0LAorCTB4MDM4MDI4NDIsIDB4MDM4MDI3NDQsIDB4MDM4MDI3NDIsIDB4MDM4MDI2NDQsCisJMHgwMzgwMjY0MiwgMHgwMzgwMjU0NCwgMHgwMzgwMjU0MiwgMHgwMzgwMjQ0NCwKKwkweDAzODAyNDQyLCAweDAzODAyMzQ0LCAweDAzODAyMzQyLCAweDAzODAyMjQ0LAorCTB4MDM4MDIyNDIsIDB4MDM4MDIxNDQsIDB4MDM4MDIxNDIsIDB4MDM4MDIwNDQsCisJMHgwMzgwMjA0MiwgMHgwMzgwMWY0NCwgMHgwMzgwMWY0MiwgMHgwMzgwMWU0NCwKKwkweDAzODAxZTQyLCAweDAzODAxZDQ0LCAweDAzODAxZDQyLCAweDAzODAxYzQ0LAorCTB4MDM4MDFjNDIsIDB4MDM4MDFiNDQsIDB4MDM4MDFiNDIsIDB4MDM4MDFhNDQsCisJMHgwMzgwMWE0MiwgMHgwMzgwMTk0NCwgMHgwMzgwMTk0MiwgMHgwMzgwMTg0NCwKKwkweDAzODAxODQyLCAweDAzODAxNzQ0LCAweDAzODAxNzQyLCAweDAzODAxNjQ0LAorCTB4MDM4MDE2NDIsIDB4MDM4MDE1NDQsIDB4MDM4MDE1NDIsIDB4MDM4MDE0NDQsCisJMHgwMzgwMTQ0MiwgMHgwMzgwMTM0NCwgMHgwMzgwMTM0MiwgMHgwMDAwMmIwMCwKK307CisKK2NvbnN0IHUzMiBiNDNfbnRhYl90eF9nYWluX3JldjNwbHVzXzJnaHpbXSA9IHsKKwkweDFmNDEwMDQ0LCAweDFmNDEwMDQyLCAweDFmNDEwMDQwLCAweDFmNDEwMDNlLAorCTB4MWY0MTAwM2MsIDB4MWY0MTAwM2IsIDB4MWY0MTAwMzksIDB4MWY0MTAwMzcsCisJMHgxZTQxMDA0NCwgMHgxZTQxMDA0MiwgMHgxZTQxMDA0MCwgMHgxZTQxMDAzZSwKKwkweDFlNDEwMDNjLCAweDFlNDEwMDNiLCAweDFlNDEwMDM5LCAweDFlNDEwMDM3LAorCTB4MWQ0MTAwNDQsIDB4MWQ0MTAwNDIsIDB4MWQ0MTAwNDAsIDB4MWQ0MTAwM2UsCisJMHgxZDQxMDAzYywgMHgxZDQxMDAzYiwgMHgxZDQxMDAzOSwgMHgxZDQxMDAzNywKKwkweDFjNDEwMDQ0LCAweDFjNDEwMDQyLCAweDFjNDEwMDQwLCAweDFjNDEwMDNlLAorCTB4MWM0MTAwM2MsIDB4MWM0MTAwM2IsIDB4MWM0MTAwMzksIDB4MWM0MTAwMzcsCisJMHgxYjQxMDA0NCwgMHgxYjQxMDA0MiwgMHgxYjQxMDA0MCwgMHgxYjQxMDAzZSwKKwkweDFiNDEwMDNjLCAweDFiNDEwMDNiLCAweDFiNDEwMDM5LCAweDFiNDEwMDM3LAorCTB4MWE0MTAwNDQsIDB4MWE0MTAwNDIsIDB4MWE0MTAwNDAsIDB4MWE0MTAwM2UsCisJMHgxYTQxMDAzYywgMHgxYTQxMDAzYiwgMHgxYTQxMDAzOSwgMHgxYTQxMDAzNywKKwkweDE5NDEwMDQ0LCAweDE5NDEwMDQyLCAweDE5NDEwMDQwLCAweDE5NDEwMDNlLAorCTB4MTk0MTAwM2MsIDB4MTk0MTAwM2IsIDB4MTk0MTAwMzksIDB4MTk0MTAwMzcsCisJMHgxODQxMDA0NCwgMHgxODQxMDA0MiwgMHgxODQxMDA0MCwgMHgxODQxMDAzZSwKKwkweDE4NDEwMDNjLCAweDE4NDEwMDNiLCAweDE4NDEwMDM5LCAweDE4NDEwMDM3LAorCTB4MTc0MTAwNDQsIDB4MTc0MTAwNDIsIDB4MTc0MTAwNDAsIDB4MTc0MTAwM2UsCisJMHgxNzQxMDAzYywgMHgxNzQxMDAzYiwgMHgxNzQxMDAzOSwgMHgxNzQxMDAzNywKKwkweDE2NDEwMDQ0LCAweDE2NDEwMDQyLCAweDE2NDEwMDQwLCAweDE2NDEwMDNlLAorCTB4MTY0MTAwM2MsIDB4MTY0MTAwM2IsIDB4MTY0MTAwMzksIDB4MTY0MTAwMzcsCisJMHgxNTQxMDA0NCwgMHgxNTQxMDA0MiwgMHgxNTQxMDA0MCwgMHgxNTQxMDAzZSwKKwkweDE1NDEwMDNjLCAweDE1NDEwMDNiLCAweDE1NDEwMDM5LCAweDE1NDEwMDM3LAorCTB4MTQ0MTAwNDQsIDB4MTQ0MTAwNDIsIDB4MTQ0MTAwNDAsIDB4MTQ0MTAwM2UsCisJMHgxNDQxMDAzYywgMHgxNDQxMDAzYiwgMHgxNDQxMDAzOSwgMHgxNDQxMDAzNywKKwkweDEzNDEwMDQ0LCAweDEzNDEwMDQyLCAweDEzNDEwMDQwLCAweDEzNDEwMDNlLAorCTB4MTM0MTAwM2MsIDB4MTM0MTAwM2IsIDB4MTM0MTAwMzksIDB4MTM0MTAwMzcsCisJMHgxMjQxMDA0NCwgMHgxMjQxMDA0MiwgMHgxMjQxMDA0MCwgMHgxMjQxMDAzZSwKKwkweDEyNDEwMDNjLCAweDEyNDEwMDNiLCAweDEyNDEwMDM5LCAweDEyNDEwMDM3LAorCTB4MTE0MTAwNDQsIDB4MTE0MTAwNDIsIDB4MTE0MTAwNDAsIDB4MTE0MTAwM2UsCisJMHgxMTQxMDAzYywgMHgxMTQxMDAzYiwgMHgxMTQxMDAzOSwgMHgxMTQxMDAzNywKKwkweDEwNDEwMDQ0LCAweDEwNDEwMDQyLCAweDEwNDEwMDQwLCAweDEwNDEwMDNlLAorCTB4MTA0MTAwM2MsIDB4MTA0MTAwM2IsIDB4MTA0MTAwMzksIDB4MTA0MTAwMzcsCit9OworCitjb25zdCB1MzIgYjQzX250YWJfdHhfZ2Fpbl9yZXYzXzVnaHpbXSA9IHsKKwkweGNmZjcwMDQ0LCAweGNmZjcwMDQyLCAweGNmZjcwMDQwLCAweGNmZjcwMDNlLAorCTB4Y2ZmNzAwM2MsIDB4Y2ZmNzAwM2IsIDB4Y2ZmNzAwMzksIDB4Y2ZmNzAwMzcsCisJMHhjZWY3MDA0NCwgMHhjZWY3MDA0MiwgMHhjZWY3MDA0MCwgMHhjZWY3MDAzZSwKKwkweGNlZjcwMDNjLCAweGNlZjcwMDNiLCAweGNlZjcwMDM5LCAweGNlZjcwMDM3LAorCTB4Y2RmNzAwNDQsIDB4Y2RmNzAwNDIsIDB4Y2RmNzAwNDAsIDB4Y2RmNzAwM2UsCisJMHhjZGY3MDAzYywgMHhjZGY3MDAzYiwgMHhjZGY3MDAzOSwgMHhjZGY3MDAzNywKKwkweGNjZjcwMDQ0LCAweGNjZjcwMDQyLCAweGNjZjcwMDQwLCAweGNjZjcwMDNlLAorCTB4Y2NmNzAwM2MsIDB4Y2NmNzAwM2IsIDB4Y2NmNzAwMzksIDB4Y2NmNzAwMzcsCisJMHhjYmY3MDA0NCwgMHhjYmY3MDA0MiwgMHhjYmY3MDA0MCwgMHhjYmY3MDAzZSwKKwkweGNiZjcwMDNjLCAweGNiZjcwMDNiLCAweGNiZjcwMDM5LCAweGNiZjcwMDM3LAorCTB4Y2FmNzAwNDQsIDB4Y2FmNzAwNDIsIDB4Y2FmNzAwNDAsIDB4Y2FmNzAwM2UsCisJMHhjYWY3MDAzYywgMHhjYWY3MDAzYiwgMHhjYWY3MDAzOSwgMHhjYWY3MDAzNywKKwkweGM5ZjcwMDQ0LCAweGM5ZjcwMDQyLCAweGM5ZjcwMDQwLCAweGM5ZjcwMDNlLAorCTB4YzlmNzAwM2MsIDB4YzlmNzAwM2IsIDB4YzlmNzAwMzksIDB4YzlmNzAwMzcsCisJMHhjOGY3MDA0NCwgMHhjOGY3MDA0MiwgMHhjOGY3MDA0MCwgMHhjOGY3MDAzZSwKKwkweGM4ZjcwMDNjLCAweGM4ZjcwMDNiLCAweGM4ZjcwMDM5LCAweGM4ZjcwMDM3LAorCTB4YzdmNzAwNDQsIDB4YzdmNzAwNDIsIDB4YzdmNzAwNDAsIDB4YzdmNzAwM2UsCisJMHhjN2Y3MDAzYywgMHhjN2Y3MDAzYiwgMHhjN2Y3MDAzOSwgMHhjN2Y3MDAzNywKKwkweGM2ZjcwMDQ0LCAweGM2ZjcwMDQyLCAweGM2ZjcwMDQwLCAweGM2ZjcwMDNlLAorCTB4YzZmNzAwM2MsIDB4YzZmNzAwM2IsIDB4YzZmNzAwMzksIDB4YzZmNzAwMzcsCisJMHhjNWY3MDA0NCwgMHhjNWY3MDA0MiwgMHhjNWY3MDA0MCwgMHhjNWY3MDAzZSwKKwkweGM1ZjcwMDNjLCAweGM1ZjcwMDNiLCAweGM1ZjcwMDM5LCAweGM1ZjcwMDM3LAorCTB4YzRmNzAwNDQsIDB4YzRmNzAwNDIsIDB4YzRmNzAwNDAsIDB4YzRmNzAwM2UsCisJMHhjNGY3MDAzYywgMHhjNGY3MDAzYiwgMHhjNGY3MDAzOSwgMHhjNGY3MDAzNywKKwkweGMzZjcwMDQ0LCAweGMzZjcwMDQyLCAweGMzZjcwMDQwLCAweGMzZjcwMDNlLAorCTB4YzNmNzAwM2MsIDB4YzNmNzAwM2IsIDB4YzNmNzAwMzksIDB4YzNmNzAwMzcsCisJMHhjMmY3MDA0NCwgMHhjMmY3MDA0MiwgMHhjMmY3MDA0MCwgMHhjMmY3MDAzZSwKKwkweGMyZjcwMDNjLCAweGMyZjcwMDNiLCAweGMyZjcwMDM5LCAweGMyZjcwMDM3LAorCTB4YzFmNzAwNDQsIDB4YzFmNzAwNDIsIDB4YzFmNzAwNDAsIDB4YzFmNzAwM2UsCisJMHhjMWY3MDAzYywgMHhjMWY3MDAzYiwgMHhjMWY3MDAzOSwgMHhjMWY3MDAzNywKKwkweGMwZjcwMDQ0LCAweGMwZjcwMDQyLCAweGMwZjcwMDQwLCAweGMwZjcwMDNlLAorCTB4YzBmNzAwM2MsIDB4YzBmNzAwM2IsIDB4YzBmNzAwMzksIDB4YzBmNzAwMzcsCit9OworCitjb25zdCB1MzIgYjQzX250YWJfdHhfZ2Fpbl9yZXY0XzVnaHpbXSA9IHsKKwkweDJmZjIwMDQ0LCAweDJmZjIwMDQyLCAweDJmZjIwMDQwLCAweDJmZjIwMDNlLAorCTB4MmZmMjAwM2MsIDB4MmZmMjAwM2IsIDB4MmZmMjAwMzksIDB4MmZmMjAwMzcsCisJMHgyZWYyMDA0NCwgMHgyZWYyMDA0MiwgMHgyZWYyMDA0MCwgMHgyZWYyMDAzZSwKKwkweDJlZjIwMDNjLCAweDJlZjIwMDNiLCAweDJlZjIwMDM5LCAweDJlZjIwMDM3LAorCTB4MmRmMjAwNDQsIDB4MmRmMjAwNDIsIDB4MmRmMjAwNDAsIDB4MmRmMjAwM2UsCisJMHgyZGYyMDAzYywgMHgyZGYyMDAzYiwgMHgyZGYyMDAzOSwgMHgyZGYyMDAzNywKKwkweDJjZjIwMDQ0LCAweDJjZjIwMDQyLCAweDJjZjIwMDQwLCAweDJjZjIwMDNlLAorCTB4MmNmMjAwM2MsIDB4MmNmMjAwM2IsIDB4MmNmMjAwMzksIDB4MmNmMjAwMzcsCisJMHgyYmYyMDA0NCwgMHgyYmYyMDA0MiwgMHgyYmYyMDA0MCwgMHgyYmYyMDAzZSwKKwkweDJiZjIwMDNjLCAweDJiZjIwMDNiLCAweDJiZjIwMDM5LCAweDJiZjIwMDM3LAorCTB4MmFmMjAwNDQsIDB4MmFmMjAwNDIsIDB4MmFmMjAwNDAsIDB4MmFmMjAwM2UsCisJMHgyYWYyMDAzYywgMHgyYWYyMDAzYiwgMHgyYWYyMDAzOSwgMHgyYWYyMDAzNywKKwkweDI5ZjIwMDQ0LCAweDI5ZjIwMDQyLCAweDI5ZjIwMDQwLCAweDI5ZjIwMDNlLAorCTB4MjlmMjAwM2MsIDB4MjlmMjAwM2IsIDB4MjlmMjAwMzksIDB4MjlmMjAwMzcsCisJMHgyOGYyMDA0NCwgMHgyOGYyMDA0MiwgMHgyOGYyMDA0MCwgMHgyOGYyMDAzZSwKKwkweDI4ZjIwMDNjLCAweDI4ZjIwMDNiLCAweDI4ZjIwMDM5LCAweDI4ZjIwMDM3LAorCTB4MjdmMjAwNDQsIDB4MjdmMjAwNDIsIDB4MjdmMjAwNDAsIDB4MjdmMjAwM2UsCisJMHgyN2YyMDAzYywgMHgyN2YyMDAzYiwgMHgyN2YyMDAzOSwgMHgyN2YyMDAzNywKKwkweDI2ZjIwMDQ0LCAweDI2ZjIwMDQyLCAweDI2ZjIwMDQwLCAweDI2ZjIwMDNlLAorCTB4MjZmMjAwM2MsIDB4MjZmMjAwM2IsIDB4MjZmMjAwMzksIDB4MjZmMjAwMzcsCisJMHgyNWYyMDA0NCwgMHgyNWYyMDA0MiwgMHgyNWYyMDA0MCwgMHgyNWYyMDAzZSwKKwkweDI1ZjIwMDNjLCAweDI1ZjIwMDNiLCAweDI1ZjIwMDM5LCAweDI1ZjIwMDM3LAorCTB4MjRmMjAwNDQsIDB4MjRmMjAwNDIsIDB4MjRmMjAwNDAsIDB4MjRmMjAwM2UsCisJMHgyNGYyMDAzYywgMHgyNGYyMDAzYiwgMHgyNGYyMDAzOSwgMHgyNGYyMDAzOCwKKwkweDIzZjIwMDQxLCAweDIzZjIwMDQwLCAweDIzZjIwMDNmLCAweDIzZjIwMDNlLAorCTB4MjNmMjAwM2MsIDB4MjNmMjAwM2IsIDB4MjNmMjAwMzksIDB4MjNmMjAwMzcsCisJMHgyMmYyMDA0NCwgMHgyMmYyMDA0MiwgMHgyMmYyMDA0MCwgMHgyMmYyMDAzZSwKKwkweDIyZjIwMDNjLCAweDIyZjIwMDNiLCAweDIyZjIwMDM5LCAweDIyZjIwMDM3LAorCTB4MjFmMjAwNDQsIDB4MjFmMjAwNDIsIDB4MjFmMjAwNDAsIDB4MjFmMjAwM2UsCisJMHgyMWYyMDAzYywgMHgyMWYyMDAzYiwgMHgyMWYyMDAzOSwgMHgyMWYyMDAzNywKKwkweDIwZDIwMDQzLCAweDIwZDIwMDQxLCAweDIwZDIwMDNlLCAweDIwZDIwMDNjLAorCTB4MjBkMjAwM2EsIDB4MjBkMjAwMzgsIDB4MjBkMjAwMzYsIDB4MjBkMjAwMzQsCit9OworCitjb25zdCB1MzIgYjQzX250YWJfdHhfZ2Fpbl9yZXY1cGx1c181Z2h6W10gPSB7CisJMHgwZjYyMDA0YSwgMHgwZjYyMDA0OCwgMHgwZjYyMDA0NiwgMHgwZjYyMDA0NCwKKwkweDBmNjIwMDQyLCAweDBmNjIwMDQwLCAweDBmNjIwMDNlLCAweDBmNjIwMDNjLAorCTB4MGU2MjAwNDQsIDB4MGU2MjAwNDIsIDB4MGU2MjAwNDAsIDB4MGU2MjAwM2UsCisJMHgwZTYyMDAzYywgMHgwZTYyMDAzZCwgMHgwZTYyMDAzYiwgMHgwZTYyMDAzYSwKKwkweDBkNjIwMDQzLCAweDBkNjIwMDQxLCAweDBkNjIwMDQwLCAweDBkNjIwMDNlLAorCTB4MGQ2MjAwM2QsIDB4MGQ2MjAwM2MsIDB4MGQ2MjAwM2IsIDB4MGQ2MjAwM2EsCisJMHgwYzYyMDA0MSwgMHgwYzYyMDA0MCwgMHgwYzYyMDAzZiwgMHgwYzYyMDAzZSwKKwkweDBjNjIwMDNjLCAweDBjNjIwMDNiLCAweDBjNjIwMDM5LCAweDBjNjIwMDM3LAorCTB4MGI2MjAwNDYsIDB4MGI2MjAwNDQsIDB4MGI2MjAwNDIsIDB4MGI2MjAwNDAsCisJMHgwYjYyMDAzZSwgMHgwYjYyMDAzYywgMHgwYjYyMDAzYiwgMHgwYjYyMDAzYSwKKwkweDBhNjIwMDQxLCAweDBhNjIwMDQwLCAweDBhNjIwMDNlLCAweDBhNjIwMDNjLAorCTB4MGE2MjAwM2IsIDB4MGE2MjAwM2EsIDB4MGE2MjAwMzksIDB4MGE2MjAwMzgsCisJMHgwOTYyMDAzZSwgMHgwOTYyMDAzZCwgMHgwOTYyMDAzYywgMHgwOTYyMDAzYiwKKwkweDA5NjIwMDM5LCAweDA5NjIwMDM3LCAweDA5NjIwMDM1LCAweDA5NjIwMDMzLAorCTB4MDg2MjAwNDQsIDB4MDg2MjAwNDIsIDB4MDg2MjAwNDAsIDB4MDg2MjAwM2UsCisJMHgwODYyMDAzYywgMHgwODYyMDAzYiwgMHgwODYyMDAzYSwgMHgwODYyMDAzOSwKKwkweDA3NjIwMDQzLCAweDA3NjIwMDQyLCAweDA3NjIwMDQwLCAweDA3NjIwMDNmLAorCTB4MDc2MjAwM2QsIDB4MDc2MjAwM2IsIDB4MDc2MjAwM2EsIDB4MDc2MjAwMzksCisJMHgwNjYyMDAzZSwgMHgwNjYyMDAzZCwgMHgwNjYyMDAzYywgMHgwNjYyMDAzYiwKKwkweDA2NjIwMDM5LCAweDA2NjIwMDM3LCAweDA2NjIwMDM1LCAweDA2NjIwMDMzLAorCTB4MDU2MjAwNDYsIDB4MDU2MjAwNDQsIDB4MDU2MjAwNDIsIDB4MDU2MjAwNDAsCisJMHgwNTYyMDAzZSwgMHgwNTYyMDAzYywgMHgwNTYyMDAzYiwgMHgwNTYyMDAzOSwKKwkweDA0NjIwMDQ0LCAweDA0NjIwMDQyLCAweDA0NjIwMDQwLCAweDA0NjIwMDNlLAorCTB4MDQ2MjAwM2MsIDB4MDQ2MjAwM2IsIDB4MDQ2MjAwMzksIDB4MDQ2MjAwMzgsCisJMHgwMzYyMDAzYywgMHgwMzYyMDAzYiwgMHgwMzYyMDAzYSwgMHgwMzYyMDAzOSwKKwkweDAzNjIwMDM4LCAweDAzNjIwMDM3LCAweDAzNjIwMDM1LCAweDAzNjIwMDMzLAorCTB4MDI2MjAwNGMsIDB4MDI2MjAwNGEsIDB4MDI2MjAwNDgsIDB4MDI2MjAwNDcsCisJMHgwMjYyMDA0NiwgMHgwMjYyMDA0NCwgMHgwMjYyMDA0MywgMHgwMjYyMDA0MiwKKwkweDAxNjIwMDRhLCAweDAxNjIwMDQ4LCAweDAxNjIwMDQ2LCAweDAxNjIwMDQ0LAorCTB4MDE2MjAwNDMsIDB4MDE2MjAwNDIsIDB4MDE2MjAwNDEsIDB4MDE2MjAwNDAsCisJMHgwMDYyMDA0MiwgMHgwMDYyMDA0MCwgMHgwMDYyMDAzZSwgMHgwMDYyMDAzYywKKwkweDAwNjIwMDNiLCAweDAwNjIwMDM5LCAweDAwNjIwMDM3LCAweDAwNjIwMDM1LAorfTsKKworY29uc3QgdTMyIHR4cHdyY3RybF90eF9nYWluX2lwYVtdID0geworCTB4NWZmNzAwMmQsIDB4NWZmNzAwMmIsIDB4NWZmNzAwMmEsIDB4NWZmNzAwMjksCisJMHg1ZmY3MDAyOCwgMHg1ZmY3MDAyNywgMHg1ZmY3MDAyNiwgMHg1ZmY3MDAyNSwKKwkweDVlZjcwMDJkLCAweDVlZjcwMDJiLCAweDVlZjcwMDJhLCAweDVlZjcwMDI5LAorCTB4NWVmNzAwMjgsIDB4NWVmNzAwMjcsIDB4NWVmNzAwMjYsIDB4NWVmNzAwMjUsCisJMHg1ZGY3MDAyZCwgMHg1ZGY3MDAyYiwgMHg1ZGY3MDAyYSwgMHg1ZGY3MDAyOSwKKwkweDVkZjcwMDI4LCAweDVkZjcwMDI3LCAweDVkZjcwMDI2LCAweDVkZjcwMDI1LAorCTB4NWNmNzAwMmQsIDB4NWNmNzAwMmIsIDB4NWNmNzAwMmEsIDB4NWNmNzAwMjksCisJMHg1Y2Y3MDAyOCwgMHg1Y2Y3MDAyNywgMHg1Y2Y3MDAyNiwgMHg1Y2Y3MDAyNSwKKwkweDViZjcwMDJkLCAweDViZjcwMDJiLCAweDViZjcwMDJhLCAweDViZjcwMDI5LAorCTB4NWJmNzAwMjgsIDB4NWJmNzAwMjcsIDB4NWJmNzAwMjYsIDB4NWJmNzAwMjUsCisJMHg1YWY3MDAyZCwgMHg1YWY3MDAyYiwgMHg1YWY3MDAyYSwgMHg1YWY3MDAyOSwKKwkweDVhZjcwMDI4LCAweDVhZjcwMDI3LCAweDVhZjcwMDI2LCAweDVhZjcwMDI1LAorCTB4NTlmNzAwMmQsIDB4NTlmNzAwMmIsIDB4NTlmNzAwMmEsIDB4NTlmNzAwMjksCisJMHg1OWY3MDAyOCwgMHg1OWY3MDAyNywgMHg1OWY3MDAyNiwgMHg1OWY3MDAyNSwKKwkweDU4ZjcwMDJkLCAweDU4ZjcwMDJiLCAweDU4ZjcwMDJhLCAweDU4ZjcwMDI5LAorCTB4NThmNzAwMjgsIDB4NThmNzAwMjcsIDB4NThmNzAwMjYsIDB4NThmNzAwMjUsCisJMHg1N2Y3MDAyZCwgMHg1N2Y3MDAyYiwgMHg1N2Y3MDAyYSwgMHg1N2Y3MDAyOSwKKwkweDU3ZjcwMDI4LCAweDU3ZjcwMDI3LCAweDU3ZjcwMDI2LCAweDU3ZjcwMDI1LAorCTB4NTZmNzAwMmQsIDB4NTZmNzAwMmIsIDB4NTZmNzAwMmEsIDB4NTZmNzAwMjksCisJMHg1NmY3MDAyOCwgMHg1NmY3MDAyNywgMHg1NmY3MDAyNiwgMHg1NmY3MDAyNSwKKwkweDU1ZjcwMDJkLCAweDU1ZjcwMDJiLCAweDU1ZjcwMDJhLCAweDU1ZjcwMDI5LAorCTB4NTVmNzAwMjgsIDB4NTVmNzAwMjcsIDB4NTVmNzAwMjYsIDB4NTVmNzAwMjUsCisJMHg1NGY3MDAyZCwgMHg1NGY3MDAyYiwgMHg1NGY3MDAyYSwgMHg1NGY3MDAyOSwKKwkweDU0ZjcwMDI4LCAweDU0ZjcwMDI3LCAweDU0ZjcwMDI2LCAweDU0ZjcwMDI1LAorCTB4NTNmNzAwMmQsIDB4NTNmNzAwMmIsIDB4NTNmNzAwMmEsIDB4NTNmNzAwMjksCisJMHg1M2Y3MDAyOCwgMHg1M2Y3MDAyNywgMHg1M2Y3MDAyNiwgMHg1M2Y3MDAyNSwKKwkweDUyZjcwMDJkLCAweDUyZjcwMDJiLCAweDUyZjcwMDJhLCAweDUyZjcwMDI5LAorCTB4NTJmNzAwMjgsIDB4NTJmNzAwMjcsIDB4NTJmNzAwMjYsIDB4NTJmNzAwMjUsCisJMHg1MWY3MDAyZCwgMHg1MWY3MDAyYiwgMHg1MWY3MDAyYSwgMHg1MWY3MDAyOSwKKwkweDUxZjcwMDI4LCAweDUxZjcwMDI3LCAweDUxZjcwMDI2LCAweDUxZjcwMDI1LAorCTB4NTBmNzAwMmQsIDB4NTBmNzAwMmIsIDB4NTBmNzAwMmEsIDB4NTBmNzAwMjksCisJMHg1MGY3MDAyOCwgMHg1MGY3MDAyNywgMHg1MGY3MDAyNiwgMHg1MGY3MDAyNSwKK307CisKK2NvbnN0IHUzMiB0eHB3cmN0cmxfdHhfZ2Fpbl9pcGFfcmV2NVtdID0geworCTB4MWZmNzAwMmQsIDB4MWZmNzAwMmIsIDB4MWZmNzAwMmEsIDB4MWZmNzAwMjksCisJMHgxZmY3MDAyOCwgMHgxZmY3MDAyNywgMHgxZmY3MDAyNiwgMHgxZmY3MDAyNSwKKwkweDFlZjcwMDJkLCAweDFlZjcwMDJiLCAweDFlZjcwMDJhLCAweDFlZjcwMDI5LAorCTB4MWVmNzAwMjgsIDB4MWVmNzAwMjcsIDB4MWVmNzAwMjYsIDB4MWVmNzAwMjUsCisJMHgxZGY3MDAyZCwgMHgxZGY3MDAyYiwgMHgxZGY3MDAyYSwgMHgxZGY3MDAyOSwKKwkweDFkZjcwMDI4LCAweDFkZjcwMDI3LCAweDFkZjcwMDI2LCAweDFkZjcwMDI1LAorCTB4MWNmNzAwMmQsIDB4MWNmNzAwMmIsIDB4MWNmNzAwMmEsIDB4MWNmNzAwMjksCisJMHgxY2Y3MDAyOCwgMHgxY2Y3MDAyNywgMHgxY2Y3MDAyNiwgMHgxY2Y3MDAyNSwKKwkweDFiZjcwMDJkLCAweDFiZjcwMDJiLCAweDFiZjcwMDJhLCAweDFiZjcwMDI5LAorCTB4MWJmNzAwMjgsIDB4MWJmNzAwMjcsIDB4MWJmNzAwMjYsIDB4MWJmNzAwMjUsCisJMHgxYWY3MDAyZCwgMHgxYWY3MDAyYiwgMHgxYWY3MDAyYSwgMHgxYWY3MDAyOSwKKwkweDFhZjcwMDI4LCAweDFhZjcwMDI3LCAweDFhZjcwMDI2LCAweDFhZjcwMDI1LAorCTB4MTlmNzAwMmQsIDB4MTlmNzAwMmIsIDB4MTlmNzAwMmEsIDB4MTlmNzAwMjksCisJMHgxOWY3MDAyOCwgMHgxOWY3MDAyNywgMHgxOWY3MDAyNiwgMHgxOWY3MDAyNSwKKwkweDE4ZjcwMDJkLCAweDE4ZjcwMDJiLCAweDE4ZjcwMDJhLCAweDE4ZjcwMDI5LAorCTB4MThmNzAwMjgsIDB4MThmNzAwMjcsIDB4MThmNzAwMjYsIDB4MThmNzAwMjUsCisJMHgxN2Y3MDAyZCwgMHgxN2Y3MDAyYiwgMHgxN2Y3MDAyYSwgMHgxN2Y3MDAyOSwKKwkweDE3ZjcwMDI4LCAweDE3ZjcwMDI3LCAweDE3ZjcwMDI2LCAweDE3ZjcwMDI1LAorCTB4MTZmNzAwMmQsIDB4MTZmNzAwMmIsIDB4MTZmNzAwMmEsIDB4MTZmNzAwMjksCisJMHgxNmY3MDAyOCwgMHgxNmY3MDAyNywgMHgxNmY3MDAyNiwgMHgxNmY3MDAyNSwKKwkweDE1ZjcwMDJkLCAweDE1ZjcwMDJiLCAweDE1ZjcwMDJhLCAweDE1ZjcwMDI5LAorCTB4MTVmNzAwMjgsIDB4MTVmNzAwMjcsIDB4MTVmNzAwMjYsIDB4MTVmNzAwMjUsCisJMHgxNGY3MDAyZCwgMHgxNGY3MDAyYiwgMHgxNGY3MDAyYSwgMHgxNGY3MDAyOSwKKwkweDE0ZjcwMDI4LCAweDE0ZjcwMDI3LCAweDE0ZjcwMDI2LCAweDE0ZjcwMDI1LAorCTB4MTNmNzAwMmQsIDB4MTNmNzAwMmIsIDB4MTNmNzAwMmEsIDB4MTNmNzAwMjksCisJMHgxM2Y3MDAyOCwgMHgxM2Y3MDAyNywgMHgxM2Y3MDAyNiwgMHgxM2Y3MDAyNSwKKwkweDEyZjcwMDJkLCAweDEyZjcwMDJiLCAweDEyZjcwMDJhLCAweDEyZjcwMDI5LAorCTB4MTJmNzAwMjgsIDB4MTJmNzAwMjcsIDB4MTJmNzAwMjYsIDB4MTJmNzAwMjUsCisJMHgxMWY3MDAyZCwgMHgxMWY3MDAyYiwgMHgxMWY3MDAyYSwgMHgxMWY3MDAyOSwKKwkweDExZjcwMDI4LCAweDExZjcwMDI3LCAweDExZjcwMDI2LCAweDExZjcwMDI1LAorCTB4MTBmNzAwMmQsIDB4MTBmNzAwMmIsIDB4MTBmNzAwMmEsIDB4MTBmNzAwMjksCisJMHgxMGY3MDAyOCwgMHgxMGY3MDAyNywgMHgxMGY3MDAyNiwgMHgxMGY3MDAyNSwKK307CisKK2NvbnN0IHUzMiB0eHB3cmN0cmxfdHhfZ2Fpbl9pcGFfcmV2NltdID0geworCTB4MGZmNzAwMmQsIDB4MGZmNzAwMmIsIDB4MGZmNzAwMmEsIDB4MGZmNzAwMjksCisJMHgwZmY3MDAyOCwgMHgwZmY3MDAyNywgMHgwZmY3MDAyNiwgMHgwZmY3MDAyNSwKKwkweDBlZjcwMDJkLCAweDBlZjcwMDJiLCAweDBlZjcwMDJhLCAweDBlZjcwMDI5LAorCTB4MGVmNzAwMjgsIDB4MGVmNzAwMjcsIDB4MGVmNzAwMjYsIDB4MGVmNzAwMjUsCisJMHgwZGY3MDAyZCwgMHgwZGY3MDAyYiwgMHgwZGY3MDAyYSwgMHgwZGY3MDAyOSwKKwkweDBkZjcwMDI4LCAweDBkZjcwMDI3LCAweDBkZjcwMDI2LCAweDBkZjcwMDI1LAorCTB4MGNmNzAwMmQsIDB4MGNmNzAwMmIsIDB4MGNmNzAwMmEsIDB4MGNmNzAwMjksCisJMHgwY2Y3MDAyOCwgMHgwY2Y3MDAyNywgMHgwY2Y3MDAyNiwgMHgwY2Y3MDAyNSwKKwkweDBiZjcwMDJkLCAweDBiZjcwMDJiLCAweDBiZjcwMDJhLCAweDBiZjcwMDI5LAorCTB4MGJmNzAwMjgsIDB4MGJmNzAwMjcsIDB4MGJmNzAwMjYsIDB4MGJmNzAwMjUsCisJMHgwYWY3MDAyZCwgMHgwYWY3MDAyYiwgMHgwYWY3MDAyYSwgMHgwYWY3MDAyOSwKKwkweDBhZjcwMDI4LCAweDBhZjcwMDI3LCAweDBhZjcwMDI2LCAweDBhZjcwMDI1LAorCTB4MDlmNzAwMmQsIDB4MDlmNzAwMmIsIDB4MDlmNzAwMmEsIDB4MDlmNzAwMjksCisJMHgwOWY3MDAyOCwgMHgwOWY3MDAyNywgMHgwOWY3MDAyNiwgMHgwOWY3MDAyNSwKKwkweDA4ZjcwMDJkLCAweDA4ZjcwMDJiLCAweDA4ZjcwMDJhLCAweDA4ZjcwMDI5LAorCTB4MDhmNzAwMjgsIDB4MDhmNzAwMjcsIDB4MDhmNzAwMjYsIDB4MDhmNzAwMjUsCisJMHgwN2Y3MDAyZCwgMHgwN2Y3MDAyYiwgMHgwN2Y3MDAyYSwgMHgwN2Y3MDAyOSwKKwkweDA3ZjcwMDI4LCAweDA3ZjcwMDI3LCAweDA3ZjcwMDI2LCAweDA3ZjcwMDI1LAorCTB4MDZmNzAwMmQsIDB4MDZmNzAwMmIsIDB4MDZmNzAwMmEsIDB4MDZmNzAwMjksCisJMHgwNmY3MDAyOCwgMHgwNmY3MDAyNywgMHgwNmY3MDAyNiwgMHgwNmY3MDAyNSwKKwkweDA1ZjcwMDJkLCAweDA1ZjcwMDJiLCAweDA1ZjcwMDJhLCAweDA1ZjcwMDI5LAorCTB4MDVmNzAwMjgsIDB4MDVmNzAwMjcsIDB4MDVmNzAwMjYsIDB4MDVmNzAwMjUsCisJMHgwNGY3MDAyZCwgMHgwNGY3MDAyYiwgMHgwNGY3MDAyYSwgMHgwNGY3MDAyOSwKKwkweDA0ZjcwMDI4LCAweDA0ZjcwMDI3LCAweDA0ZjcwMDI2LCAweDA0ZjcwMDI1LAorCTB4MDNmNzAwMmQsIDB4MDNmNzAwMmIsIDB4MDNmNzAwMmEsIDB4MDNmNzAwMjksCisJMHgwM2Y3MDAyOCwgMHgwM2Y3MDAyNywgMHgwM2Y3MDAyNiwgMHgwM2Y3MDAyNSwKKwkweDAyZjcwMDJkLCAweDAyZjcwMDJiLCAweDAyZjcwMDJhLCAweDAyZjcwMDI5LAorCTB4MDJmNzAwMjgsIDB4MDJmNzAwMjcsIDB4MDJmNzAwMjYsIDB4MDJmNzAwMjUsCisJMHgwMWY3MDAyZCwgMHgwMWY3MDAyYiwgMHgwMWY3MDAyYSwgMHgwMWY3MDAyOSwKKwkweDAxZjcwMDI4LCAweDAxZjcwMDI3LCAweDAxZjcwMDI2LCAweDAxZjcwMDI1LAorCTB4MDBmNzAwMmQsIDB4MDBmNzAwMmIsIDB4MDBmNzAwMmEsIDB4MDBmNzAwMjksCisJMHgwMGY3MDAyOCwgMHgwMGY3MDAyNywgMHgwMGY3MDAyNiwgMHgwMGY3MDAyNSwKK307CisKK2NvbnN0IHUzMiB0eHB3cmN0cmxfdHhfZ2Fpbl9pcGFfNWdbXSA9IHsKKwkweDdmZjcwMDM1LCAweDdmZjcwMDMzLCAweDdmZjcwMDMyLCAweDdmZjcwMDMxLAorCTB4N2ZmNzAwMmYsIDB4N2ZmNzAwMmUsIDB4N2ZmNzAwMmQsIDB4N2ZmNzAwMmIsCisJMHg3ZmY3MDAyYSwgMHg3ZmY3MDAyOSwgMHg3ZmY3MDAyOCwgMHg3ZmY3MDAyNywKKwkweDdmZjcwMDI2LCAweDdmZjcwMDI0LCAweDdmZjcwMDIzLCAweDdmZjcwMDIyLAorCTB4N2VmNzAwMjgsIDB4N2VmNzAwMjcsIDB4N2VmNzAwMjYsIDB4N2VmNzAwMjUsCisJMHg3ZWY3MDAyNCwgMHg3ZWY3MDAyMywgMHg3ZGY3MDAyOCwgMHg3ZGY3MDAyNywKKwkweDdkZjcwMDI2LCAweDdkZjcwMDI1LCAweDdkZjcwMDI0LCAweDdkZjcwMDIzLAorCTB4N2RmNzAwMjIsIDB4N2NmNzAwMjksIDB4N2NmNzAwMjgsIDB4N2NmNzAwMjcsCisJMHg3Y2Y3MDAyNiwgMHg3Y2Y3MDAyNSwgMHg3Y2Y3MDAyMywgMHg3Y2Y3MDAyMiwKKwkweDdiZjcwMDI5LCAweDdiZjcwMDI4LCAweDdiZjcwMDI2LCAweDdiZjcwMDI1LAorCTB4N2JmNzAwMjQsIDB4N2JmNzAwMjMsIDB4N2JmNzAwMjIsIDB4N2JmNzAwMjEsCisJMHg3YWY3MDAyOSwgMHg3YWY3MDAyOCwgMHg3YWY3MDAyNywgMHg3YWY3MDAyNiwKKwkweDdhZjcwMDI1LCAweDdhZjcwMDI0LCAweDdhZjcwMDIzLCAweDdhZjcwMDIyLAorCTB4NzlmNzAwMjksIDB4NzlmNzAwMjgsIDB4NzlmNzAwMjcsIDB4NzlmNzAwMjYsCisJMHg3OWY3MDAyNSwgMHg3OWY3MDAyNCwgMHg3OWY3MDAyMywgMHg3OWY3MDAyMiwKKwkweDc4ZjcwMDI5LCAweDc4ZjcwMDI4LCAweDc4ZjcwMDI3LCAweDc4ZjcwMDI2LAorCTB4NzhmNzAwMjUsIDB4NzhmNzAwMjQsIDB4NzhmNzAwMjMsIDB4NzhmNzAwMjIsCisJMHg3N2Y3MDAyOSwgMHg3N2Y3MDAyOCwgMHg3N2Y3MDAyNywgMHg3N2Y3MDAyNiwKKwkweDc3ZjcwMDI1LCAweDc3ZjcwMDI0LCAweDc3ZjcwMDIzLCAweDc3ZjcwMDIyLAorCTB4NzZmNzAwMjksIDB4NzZmNzAwMjgsIDB4NzZmNzAwMjcsIDB4NzZmNzAwMjYsCisJMHg3NmY3MDAyNCwgMHg3NmY3MDAyMywgMHg3NmY3MDAyMiwgMHg3NmY3MDAyMSwKKwkweDc1ZjcwMDI5LCAweDc1ZjcwMDI4LCAweDc1ZjcwMDI3LCAweDc1ZjcwMDI2LAorCTB4NzVmNzAwMjUsIDB4NzVmNzAwMjQsIDB4NzVmNzAwMjMsIDB4NzRmNzAwMjksCisJMHg3NGY3MDAyOCwgMHg3NGY3MDAyNiwgMHg3NGY3MDAyNSwgMHg3NGY3MDAyNCwKKwkweDc0ZjcwMDIzLCAweDc0ZjcwMDIyLCAweDczZjcwMDI5LCAweDczZjcwMDI3LAorCTB4NzNmNzAwMjYsIDB4NzNmNzAwMjUsIDB4NzNmNzAwMjQsIDB4NzNmNzAwMjMsCisJMHg3M2Y3MDAyMiwgMHg3MmY3MDAyOCwgMHg3MmY3MDAyNywgMHg3MmY3MDAyNiwKKwkweDcyZjcwMDI1LCAweDcyZjcwMDI0LCAweDcyZjcwMDIzLCAweDcyZjcwMDIyLAorCTB4NzFmNzAwMjgsIDB4NzFmNzAwMjcsIDB4NzFmNzAwMjYsIDB4NzFmNzAwMjUsCisJMHg3MWY3MDAyNCwgMHg3MWY3MDAyMywgMHg3MGY3MDAyOCwgMHg3MGY3MDAyNywKKwkweDcwZjcwMDI2LCAweDcwZjcwMDI0LCAweDcwZjcwMDIzLCAweDcwZjcwMDIyLAorCTB4NzBmNzAwMjEsIDB4NzBmNzAwMjAsIDB4NzBmNzAwMjAsIDB4NzBmNzAwMWYsCit9OworCitjb25zdCB1MTYgdGJsX2lxY2FsX2dhaW5wYXJhbXNbMl1bOV1bOF0gPSB7CisJeworCQl7IDB4MDAwLCAwLCAwLCAyLCAweDY5LCAweDY5LCAweDY5LCAweDY5IH0sCisJCXsgMHg3MDAsIDcsIDAsIDAsIDB4NjksIDB4NjksIDB4NjksIDB4NjkgfSwKKwkJeyAweDcxMCwgNywgMSwgMCwgMHg2OCwgMHg2OCwgMHg2OCwgMHg2OCB9LAorCQl7IDB4NzIwLCA3LCAyLCAwLCAweDY3LCAweDY3LCAweDY3LCAweDY3IH0sCisJCXsgMHg3MzAsIDcsIDMsIDAsIDB4NjYsIDB4NjYsIDB4NjYsIDB4NjYgfSwKKwkJeyAweDc0MCwgNywgNCwgMCwgMHg2NSwgMHg2NSwgMHg2NSwgMHg2NSB9LAorCQl7IDB4NzQxLCA3LCA0LCAxLCAweDY1LCAweDY1LCAweDY1LCAweDY1IH0sCisJCXsgMHg3NDIsIDcsIDQsIDIsIDB4NjUsIDB4NjUsIDB4NjUsIDB4NjUgfSwKKwkJeyAweDc0MywgNywgNCwgMywgMHg2NSwgMHg2NSwgMHg2NSwgMHg2NSB9CisJfSwKKwl7CisJCXsgMHgwMDAsIDcsIDAsIDAsIDB4NzksIDB4NzksIDB4NzksIDB4NzkgfSwKKwkJeyAweDcwMCwgNywgMCwgMCwgMHg3OSwgMHg3OSwgMHg3OSwgMHg3OSB9LAorCQl7IDB4NzEwLCA3LCAxLCAwLCAweDc5LCAweDc5LCAweDc5LCAweDc5IH0sCisJCXsgMHg3MjAsIDcsIDIsIDAsIDB4NzgsIDB4NzgsIDB4NzgsIDB4NzggfSwKKwkJeyAweDczMCwgNywgMywgMCwgMHg3OCwgMHg3OCwgMHg3OCwgMHg3OCB9LAorCQl7IDB4NzQwLCA3LCA0LCAwLCAweDc4LCAweDc4LCAweDc4LCAweDc4IH0sCisJCXsgMHg3NDEsIDcsIDQsIDEsIDB4NzgsIDB4NzgsIDB4NzgsIDB4NzggfSwKKwkJeyAweDc0MiwgNywgNCwgMiwgMHg3OCwgMHg3OCwgMHg3OCwgMHg3OCB9LAorCQl7IDB4NzQzLCA3LCA0LCAzLCAweDc4LCAweDc4LCAweDc4LCAweDc4IH0KKwl9Cit9OworCitjb25zdCBzdHJ1Y3QgbnBoeV90eGlxY2FsX2xhZGRlciBsYWRkZXJfbG9bXSA9IHsKKwl7IDMsIDAgfSwKKwl7IDQsIDAgfSwKKwl7IDYsIDAgfSwKKwl7IDksIDAgfSwKKwl7IDEzLCAwIH0sCisJeyAxOCwgMCB9LAorCXsgMjUsIDAgfSwKKwl7IDI1LCAxIH0sCisJeyAyNSwgMiB9LAorCXsgMjUsIDMgfSwKKwl7IDI1LCA0IH0sCisJeyAyNSwgNSB9LAorCXsgMjUsIDYgfSwKKwl7IDI1LCA3IH0sCisJeyAzNSwgNyB9LAorCXsgNTAsIDcgfSwKKwl7IDcxLCA3IH0sCisJeyAxMDAsIDcgfQorfTsKKworY29uc3Qgc3RydWN0IG5waHlfdHhpcWNhbF9sYWRkZXIgbGFkZGVyX2lxW10gPSB7CisJeyAzLCAwIH0sCisJeyA0LCAwIH0sCisJeyA2LCAwIH0sCisJeyA5LCAwIH0sCisJeyAxMywgMCB9LAorCXsgMTgsIDAgfSwKKwl7IDI1LCAwIH0sCisJeyAzNSwgMCB9LAorCXsgNTAsIDAgfSwKKwl7IDcxLCAwIH0sCisJeyAxMDAsIDAgfSwKKwl7IDEwMCwgMSB9LAorCXsgMTAwLCAyIH0sCisJeyAxMDAsIDMgfSwKKwl7IDEwMCwgNCB9LAorCXsgMTAwLCA1IH0sCisJeyAxMDAsIDYgfSwKKwl7IDEwMCwgNyB9Cit9OworCitjb25zdCB1MTYgbG9zY2FsZVtdID0geworCTI1NiwgMjU2LCAyNzEsIDI3MSwKKwkyODcsIDI1NiwgMjU2LCAyNzEsCisJMjcxLCAyODcsIDI4NywgMzA0LAorCTMwNCwgMjU2LCAyNTYsIDI3MSwKKwkyNzEsIDI4NywgMjg3LCAzMDQsCisJMzA0LCAzMjIsIDMyMiwgMzQxLAorCTM0MSwgMzYyLCAzNjIsIDM4MywKKwkzODMsIDI1NiwgMjU2LCAyNzEsCisJMjcxLCAyODcsIDI4NywgMzA0LAorCTMwNCwgMzIyLCAzMjIsIDI1NiwKKwkyNTYsIDI3MSwgMjcxLCAyODcsCisJMjg3LCAzMDQsIDMwNCwgMzIyLAorCTMyMiwgMzQxLCAzNDEsIDM2MiwKKwkzNjIsIDI1NiwgMjU2LCAyNzEsCisJMjcxLCAyODcsIDI4NywgMzA0LAorCTMwNCwgMzIyLCAzMjIsIDI1NiwKKwkyNTYsIDI3MSwgMjcxLCAyODcsCisJMjg3LCAzMDQsIDMwNCwgMzIyLAorCTMyMiwgMzQxLCAzNDEsIDM2MiwKKwkzNjIsIDI1NiwgMjU2LCAyNzEsCisJMjcxLCAyODcsIDI4NywgMzA0LAorCTMwNCwgMzIyLCAzMjIsIDM0MSwKKwkzNDEsIDM2MiwgMzYyLCAzODMsCisJMzgzLCA0MDYsIDQwNiwgNDMwLAorCTQzMCwgNDU1LCA0NTUsIDQ4MiwKKwk0ODIsIDUxMSwgNTExLCA1NDEsCisJNTQxLCA1NzMsIDU3MywgNjA3LAorCTYwNywgNjQzLCA2NDMsIDY4MSwKKwk2ODEsIDcyMiwgNzIyLCA3NjQsCisJNzY0LCA4MTAsIDgxMCwgODU4LAorCTg1OCwgOTA4LCA5MDgsIDk2MiwKKwk5NjIsIDEwMTksIDEwMTksIDI1NgorfTsKKworY29uc3QgdTE2IHRibF90eF9pcWxvX2NhbF9sb2Z0X2xhZGRlcl80MFtdID0geworCTB4MDIwMCwgMHgwMzAwLCAweDA0MDAsIDB4MDcwMCwKKwkweDA5MDAsIDB4MGMwMCwgMHgxMjAwLCAweDEyMDEsCisJMHgxMjAyLCAweDEyMDMsIDB4MTIwNCwgMHgxMjA1LAorCTB4MTIwNiwgMHgxMjA3LCAweDE5MDcsIDB4MjMwNywKKwkweDMyMDcsIDB4NDcwNworfTsKKworY29uc3QgdTE2IHRibF90eF9pcWxvX2NhbF9sb2Z0X2xhZGRlcl8yMFtdID0geworCTB4MDMwMCwgMHgwNTAwLCAweDA3MDAsIDB4MDkwMCwKKwkweDBkMDAsIDB4MTEwMCwgMHgxOTAwLCAweDE5MDEsCisJMHgxOTAyLCAweDE5MDMsIDB4MTkwNCwgMHgxOTA1LAorCTB4MTkwNiwgMHgxOTA3LCAweDI0MDcsIDB4MzIwNywKKwkweDQ2MDcsIDB4NjQwNworfTsKKworY29uc3QgdTE2IHRibF90eF9pcWxvX2NhbF9pcWltYl9sYWRkZXJfNDBbXSA9IHsKKwkweDAxMDAsIDB4MDIwMCwgMHgwNDAwLCAweDA3MDAsCisJMHgwOTAwLCAweDBjMDAsIDB4MTIwMCwgMHgxOTAwLAorCTB4MjMwMCwgMHgzMjAwLCAweDQ3MDAsIDB4NDcwMSwKKwkweDQ3MDIsIDB4NDcwMywgMHg0NzA0LCAweDQ3MDUsCisJMHg0NzA2LCAweDQ3MDcKK307CisKK2NvbnN0IHUxNiB0YmxfdHhfaXFsb19jYWxfaXFpbWJfbGFkZGVyXzIwW10gPSB7CisJMHgwMjAwLCAweDAzMDAsIDB4MDYwMCwgMHgwOTAwLAorCTB4MGQwMCwgMHgxMTAwLCAweDE5MDAsIDB4MjQwMCwKKwkweDMyMDAsIDB4NDYwMCwgMHg2NDAwLCAweDY0MDEsCisJMHg2NDAyLCAweDY0MDMsIDB4NjQwNCwgMHg2NDA1LAorCTB4NjQwNiwgMHg2NDA3Cit9OworCitjb25zdCB1MTYgdGJsX3R4X2lxbG9fY2FsX3N0YXJ0Y29lZnNfbnBoeXJldjNbQjQzX05UQUJfVFhfSVFMT19DQUxfU1RBUlRDT0VGU19SRVYzXSA9IHsgfTsKKworY29uc3QgdTE2IHRibF90eF9pcWxvX2NhbF9zdGFydGNvZWZzW0I0M19OVEFCX1RYX0lRTE9fQ0FMX1NUQVJUQ09FRlNdID0geyB9OworCitjb25zdCB1MTYgdGJsX3R4X2lxbG9fY2FsX2NtZHNfcmVjYWxfbnBoeXJldjNbXSA9IHsKKwkweDg0MjMsIDB4ODMyMywgMHg4MDczLCAweDgyNTYsCisJMHg4MDQ1LCAweDgyMjMsIDB4OTQyMywgMHg5MzIzLAorCTB4OTA3MywgMHg5MjU2LCAweDkwNDUsIDB4OTIyMworfTsKKworY29uc3QgdTE2IHRibF90eF9pcWxvX2NhbF9jbWRzX3JlY2FsW10gPSB7CisJMHg4MTAxLCAweDgyNTMsIDB4ODA1MywgMHg4MjM0LAorCTB4ODAzNCwgMHg5MTAxLCAweDkyNTMsIDB4OTA1MywKKwkweDkyMzQsIDB4OTAzNAorfTsKKworY29uc3QgdTE2IHRibF90eF9pcWxvX2NhbF9jbWRzX2Z1bGxjYWxbXSA9IHsKKwkweDgxMjMsIDB4ODI2NCwgMHg4MDg2LCAweDgyNDUsCisJMHg4MDU2LCAweDkxMjMsIDB4OTI2NCwgMHg5MDg2LAorCTB4OTI0NSwgMHg5MDU2Cit9OworCitjb25zdCB1MTYgdGJsX3R4X2lxbG9fY2FsX2NtZHNfZnVsbGNhbF9ucGh5cmV2M1tdID0geworCTB4ODQzNCwgMHg4MzM0LCAweDgwODQsIDB4ODI2NywKKwkweDgwNTYsIDB4ODIzNCwgMHg5NDM0LCAweDkzMzQsCisJMHg5MDg0LCAweDkyNjcsIDB4OTA1NiwgMHg5MjM0Cit9OworCitjb25zdCBzMTYgdGJsX3R4X2ZpbHRlcl9jb2VmX3JldjRbN11bMTVdID0geworCXsgIC0zNzcsICAgMTM3LCAgLTQwNywgICAyMDgsIC0xNTI3LAorCSAgICA5NTYsICAgIDkzLCAgIDE4NiwgICAgOTMsICAgMjMwLAorCSAgICAtNDQsICAgMjMwLCAgICAyMCwgIC0xOTEsICAgMjAxIH0sCisJeyAgIC03NywgICAgMjAsICAgLTk4LCAgICA0OSwgICAtOTMsCisJICAgICA2MCwgICAgNTYsICAgMTExLCAgICA1NiwgICAgMjYsCisJICAgICAtNSwgICAgMjYsICAgIDM0LCAgIC0zMiwgICAgMzQgfSwKKwl7ICAtMzYwLCAgIDE2NCwgIC0zNzYsICAgMTY0LCAtMTUzMywKKwkgICAgNTc2LCAgIDMwOCwgIC0zMTQsICAgMzA4LCAgIDEyMSwKKwkgICAgLTczLCAgIDEyMSwgICAgOTEsICAgMTI0LCAgICA5MSB9LAorCXsgIC0yOTUsICAgMjAwLCAgLTM2MywgICAxNDIsIC0xMzkxLAorCSAgICA4MjYsICAgMTUxLCAgIDMwMSwgICAxNTEsICAgMTUxLAorCSAgICAzMDEsICAgMTUxLCAgIDYwMiwgIC03NTIsICAgNjAyIH0sCisJeyAgIC05MiwgICAgNTgsICAgLTk2LCAgICA0OSwgIC0xMDQsCisJICAgICA0NCwgICAgMTcsICAgIDM1LCAgICAxNywgICAgMTIsCisJICAgICAyNSwgICAgMTIsICAgIDEzLCAgICAyNywgICAgMTMgfSwKKwl7ICAtMzc1LCAgIDEzNiwgIC0zOTksICAgMjA5LCAtMTQ3OSwKKwkgICAgOTQ5LCAgIDEzMCwgICAyNjAsICAgMTMwLCAgIDIzMCwKKwkgICAgLTQ0LCAgIDIzMCwgICAyMDEsICAtMTkxLCAgIDIwMSB9LAorCXsgMHhlZDksICAweGM4LCAweGU5NSwgIDB4OGUsIDB4YTkxLAorCSAgMHgzM2EsICAweDk3LCAweDEyZCwgIDB4OTcsICAweDk3LAorCSAgMHgxMmQsICAweDk3LCAweDI1YSwgMHhkMTAsIDB4MjVhIH0KK307CisKKy8qIGFkZHIwLCAgYWRkcjEsICBibWFzaywgIHNoaWZ0ICovCitjb25zdCBzdHJ1Y3QgbnBoeV9yZl9jb250cm9sX292ZXJyaWRlX3JldjIgdGJsX3JmX2NvbnRyb2xfb3ZlcnJpZGVfcmV2MltdID0geworCXsgMHg3OCwgMHg3OCwgMHgwMDM4LCAgMyB9LCAvKiBmb3IgZmllbGQgPT0gMHgwMDAyIChmbHMgPT0gMikgKi8KKwl7IDB4N0EsIDB4N0QsIDB4MDAwMSwgIDAgfSwgLyogZm9yIGZpZWxkID09IDB4MDAwNCAoZmxzID09IDMpICovCisJeyAweDdBLCAweDdELCAweDAwMDIsICAxIH0sIC8qIGZvciBmaWVsZCA9PSAweDAwMDggKGZscyA9PSA0KSAqLworCXsgMHg3QSwgMHg3RCwgMHgwMDA0LCAgMiB9LCAvKiBmb3IgZmllbGQgPT0gMHgwMDEwIChmbHMgPT0gNSkgKi8KKwl7IDB4N0EsIDB4N0QsIDB4MDAzMCwgIDQgfSwgLyogZm9yIGZpZWxkID09IDB4MDAyMCAoZmxzID09IDYpICovCisJeyAweDdBLCAweDdELCAweDAwQzAsICA2IH0sIC8qIGZvciBmaWVsZCA9PSAweDAwNDAgKGZscyA9PSA3KSAqLworCXsgMHg3QSwgMHg3RCwgMHgwMTAwLCAgOCB9LCAvKiBmb3IgZmllbGQgPT0gMHgwMDgwIChmbHMgPT0gOCkgKi8KKwl7IDB4N0EsIDB4N0QsIDB4MDIwMCwgIDkgfSwgLyogZm9yIGZpZWxkID09IDB4MDEwMCAoZmxzID09IDkpICovCisJeyAweDc4LCAweDc4LCAweDAwMDQsICAyIH0sIC8qIGZvciBmaWVsZCA9PSAweDAyMDAgKGZscyA9PSAxMCkgKi8KKwl7IDB4N0IsIDB4N0UsIDB4MDFGRiwgIDAgfSwgLyogZm9yIGZpZWxkID09IDB4MDQwMCAoZmxzID09IDExKSAqLworCXsgMHg3QywgMHg3RiwgMHgwMUZGLCAgMCB9LCAvKiBmb3IgZmllbGQgPT0gMHgwODAwIChmbHMgPT0gMTIpICovCisJeyAweDc4LCAweDc4LCAweDAxMDAsICA4IH0sIC8qIGZvciBmaWVsZCA9PSAweDEwMDAgKGZscyA9PSAxMykgKi8KKwl7IDB4NzgsIDB4NzgsIDB4MDIwMCwgIDkgfSwgLyogZm9yIGZpZWxkID09IDB4MjAwMCAoZmxzID09IDE0KSAqLworCXsgMHg3OCwgMHg3OCwgMHhGMDAwLCAxMiB9ICAvKiBmb3IgZmllbGQgPT0gMHg0MDAwIChmbHMgPT0gMTUpICovCit9OworCisvKiB2YWxfbWFzaywgdmFsX3NoaWZ0LCBlbl9hZGRyMCwgdmFsX2FkZHIwLCBlbl9hZGRyMSwgdmFsX2FkZHIxICovCitjb25zdCBzdHJ1Y3QgbnBoeV9yZl9jb250cm9sX292ZXJyaWRlX3JldjMgdGJsX3JmX2NvbnRyb2xfb3ZlcnJpZGVfcmV2M1tdID0geworCXsgMHg4MDAwLCAxNSwgMHhFNSwgMHhGOSwgMHhFNiwgMHhGQiB9LCAvKiBmaWVsZCA9PSAweDAwMDEgKGZscyAxKSAqLworCXsgMHgwMDAxLCAgMCwgMHhFNywgMHg3QSwgMHhFQywgMHg3RCB9LCAvKiBmaWVsZCA9PSAweDAwMDIgKGZscyAyKSAqLworCXsgMHgwMDAyLCAgMSwgMHhFNywgMHg3QSwgMHhFQywgMHg3RCB9LCAvKiBmaWVsZCA9PSAweDAwMDQgKGZscyAzKSAqLworCXsgMHgwMDA0LCAgMiwgMHhFNywgMHg3QSwgMHhFQywgMHg3RCB9LCAvKiBmaWVsZCA9PSAweDAwMDggKGZscyA0KSAqLworCXsgMHgwMDE2LCAgNCwgMHhFNywgMHg3QSwgMHhFQywgMHg3RCB9LCAvKiBmaWVsZCA9PSAweDAwMTAgKGZscyA1KSAqLworCXsgMHgwMDIwLCAgNSwgMHhFNywgMHg3QSwgMHhFQywgMHg3RCB9LCAvKiBmaWVsZCA9PSAweDAwMjAgKGZscyA2KSAqLworCXsgMHgwMDQwLCAgNiwgMHhFNywgMHg3QSwgMHhFQywgMHg3RCB9LCAvKiBmaWVsZCA9PSAweDAwNDAgKGZscyA3KSAqLworCXsgMHgwMDgwLCAgNiwgMHhFNywgMHg3QSwgMHhFQywgMHg3RCB9LCAvKiBmaWVsZCA9PSAweDAwODAgKGZscyA4KSAqLworCXsgMHgwMTAwLCAgNywgMHhFNywgMHg3QSwgMHhFQywgMHg3RCB9LCAvKiBmaWVsZCA9PSAweDAxMDAgKGZscyA5KSAqLworCXsgMHgwMDA3LCAgMCwgMHhFNywgMHhGOCwgMHhFQywgMHhGQSB9LCAvKiBmaWVsZCA9PSAweDAyMDAgKGZscyAxMCkgKi8KKwl7IDB4MDA3MCwgIDQsIDB4RTcsIDB4RjgsIDB4RUMsIDB4RkEgfSwgLyogZmllbGQgPT0gMHgwNDAwIChmbHMgMTEpICovCisJeyAweEUwMDAsIDEzLCAweEU3LCAweDdBLCAweEVDLCAweDdEIH0sIC8qIGZpZWxkID09IDB4MDgwMCAoZmxzIDEyKSAqLworCXsgMHhGRkZGLCAgMCwgMHhFNywgMHg3QiwgMHhFQywgMHg3RSB9LCAvKiBmaWVsZCA9PSAweDEwMDAgKGZscyAxMykgKi8KKwl7IDB4RkZGRiwgIDAsIDB4RTcsIDB4N0MsIDB4RUMsIDB4N0YgfSwgLyogZmllbGQgPT0gMHgyMDAwIChmbHMgMTQpICovCisJeyAweDAwQzAsICA2LCAweEU3LCAweEY5LCAweEVDLCAweEZCIH0gIC8qIGZpZWxkID09IDB4NDAwMCAoZmxzIDE1KSAqLworfTsKKwogc3RhdGljIGlubGluZSB2b2lkIGFzc2VydF9udGFiX2FycmF5X3NpemVzKHZvaWQpCiB7CiAjdW5kZWYgY2hlY2sKQEAgLTI0NDIsNiArMjk4MCw3MiBAQAogI3VuZGVmIGNoZWNrCiB9CiAKK3UzMiBiNDNfbnRhYl9yZWFkKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIG9mZnNldCkKK3sKKwl1MzIgdHlwZSwgdmFsdWU7CisKKwl0eXBlID0gb2Zmc2V0ICYgQjQzX05UQUJfVFlQRU1BU0s7CisJb2Zmc2V0ICY9IH5CNDNfTlRBQl9UWVBFTUFTSzsKKwlCNDNfV0FSTl9PTihvZmZzZXQgPiAweEZGRkYpOworCisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBCNDNfTlRBQl84QklUOgorCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgb2Zmc2V0KTsKKwkJdmFsdWUgPSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8pICYgMHhGRjsKKwkJYnJlYWs7CisJY2FzZSBCNDNfTlRBQl8xNkJJVDoKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIG9mZnNldCk7CisJCXZhbHVlID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPKTsKKwkJYnJlYWs7CisJY2FzZSBCNDNfTlRBQl8zMkJJVDoKKwkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0FERFIsIG9mZnNldCk7CisJCXZhbHVlID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUhJKTsKKwkJdmFsdWUgPDw9IDE2OworCQl2YWx1ZSB8PSBiNDNfcGh5X3JlYWQoZGV2LCBCNDNfTlBIWV9UQUJMRV9EQVRBTE8pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCNDNfV0FSTl9PTigxKTsKKwkJdmFsdWUgPSAwOworCX0KKworCXJldHVybiB2YWx1ZTsKK30KKwordm9pZCBiNDNfbnRhYl9yZWFkX2J1bGsoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgb2Zmc2V0LAorCQkJIHVuc2lnbmVkIGludCBucl9lbGVtZW50cywgdm9pZCAqX2RhdGEpCit7CisJdTMyIHR5cGU7CisJdTggKmRhdGEgPSBfZGF0YTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXR5cGUgPSBvZmZzZXQgJiBCNDNfTlRBQl9UWVBFTUFTSzsKKwlvZmZzZXQgJj0gfkI0M19OVEFCX1RZUEVNQVNLOworCUI0M19XQVJOX09OKG9mZnNldCA+IDB4RkZGRik7CisKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgb2Zmc2V0KTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9lbGVtZW50czsgaSsrKSB7CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIEI0M19OVEFCXzhCSVQ6CisJCQkqZGF0YSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTykgJiAweEZGOworCQkJZGF0YSsrOworCQkJYnJlYWs7CisJCWNhc2UgQjQzX05UQUJfMTZCSVQ6CisJCQkqKCh1MTYgKilkYXRhKSA9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTyk7CisJCQlkYXRhICs9IDI7CisJCQlicmVhazsKKwkJY2FzZSBCNDNfTlRBQl8zMkJJVDoKKwkJCSooKHUzMiAqKWRhdGEpID0gYjQzX3BoeV9yZWFkKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUhJKTsKKwkJCSooKHUzMiAqKWRhdGEpIDw8PSAxNjsKKwkJCSooKHUzMiAqKWRhdGEpIHw9IGI0M19waHlfcmVhZChkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTyk7CisJCQlkYXRhICs9IDQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCUI0M19XQVJOX09OKDEpOworCQl9CisJfQorfQorCiB2b2lkIGI0M19udGFiX3dyaXRlKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIG9mZnNldCwgdTMyIHZhbHVlKQogewogCXUzMiB0eXBlOwpAQCAtMjQ3NCwzICszMDc4LDkxIEBACiAJLyogU29tZSBjb21waWxldGltZSBhc3NlcnRpb25zLi4uICovCiAJYXNzZXJ0X250YWJfYXJyYXlfc2l6ZXMoKTsKIH0KKwordm9pZCBiNDNfbnRhYl93cml0ZV9idWxrKHN0cnVjdCBiNDNfd2xkZXYgKmRldiwgdTMyIG9mZnNldCwKKwkJCSAgdW5zaWduZWQgaW50IG5yX2VsZW1lbnRzLCBjb25zdCB2b2lkICpfZGF0YSkKK3sKKwl1MzIgdHlwZSwgdmFsdWU7CisJY29uc3QgdTggKmRhdGEgPSBfZGF0YTsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXR5cGUgPSBvZmZzZXQgJiBCNDNfTlRBQl9UWVBFTUFTSzsKKwlvZmZzZXQgJj0gfkI0M19OVEFCX1RZUEVNQVNLOworCUI0M19XQVJOX09OKG9mZnNldCA+IDB4RkZGRik7CisKKwliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfQUREUiwgb2Zmc2V0KTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9lbGVtZW50czsgaSsrKSB7CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIEI0M19OVEFCXzhCSVQ6CisJCQl2YWx1ZSA9ICpkYXRhOworCQkJZGF0YSsrOworCQkJQjQzX1dBUk5fT04odmFsdWUgJiB+MHhGRik7CisJCQliNDNfcGh5X3dyaXRlKGRldiwgQjQzX05QSFlfVEFCTEVfREFUQUxPLCB2YWx1ZSk7CisJCQlicmVhazsKKwkJY2FzZSBCNDNfTlRBQl8xNkJJVDoKKwkJCXZhbHVlID0gKigodTE2ICopZGF0YSk7CisJCQlkYXRhICs9IDI7CisJCQlCNDNfV0FSTl9PTih2YWx1ZSAmIH4weEZGRkYpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywgdmFsdWUpOworCQkJYnJlYWs7CisJCWNhc2UgQjQzX05UQUJfMzJCSVQ6CisJCQl2YWx1ZSA9ICooKHUzMiAqKWRhdGEpOworCQkJZGF0YSArPSA0OworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFISSwgdmFsdWUgPj4gMTYpOworCQkJYjQzX3BoeV93cml0ZShkZXYsIEI0M19OUEhZX1RBQkxFX0RBVEFMTywKKwkJCQkJdmFsdWUgJiAweEZGRkYpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlCNDNfV0FSTl9PTigxKTsKKwkJfQorCX0KK30KKworI2RlZmluZSBudGFiX3VwbG9hZChkZXYsIG9mZnNldCwgZGF0YSkgZG8geyBcCisJCXVuc2lnbmVkIGludCBpOwkJCQkJCVwKKwkJZm9yIChpID0gMDsgaSA8IChvZmZzZXQjI19TSVpFKTsgaSsrKQkJCVwKKwkJCWI0M19udGFiX3dyaXRlKGRldiwgKG9mZnNldCkgKyBpLCAoZGF0YSlbaV0pOwlcCisJfSB3aGlsZSAoMCkKKwordm9pZCBiNDNfbnBoeV9yZXYwXzFfMl90YWJsZXNfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpCit7CisJLyogU3RhdGljIHRhYmxlcyAqLworCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfRlJBTUVTVFJVQ1QsIGI0M19udGFiX2ZyYW1lc3RydWN0KTsKKwludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0ZSQU1FTFQsIGI0M19udGFiX2ZyYW1lbG9va3VwKTsKKwludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX1RNQVAsIGI0M19udGFiX3RtYXApOworCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfVERUUk4sIGI0M19udGFiX3RkdHJuKTsKKwludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0lOVExFVkVMLCBiNDNfbnRhYl9pbnRsZXZlbCk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9QSUxPVCwgYjQzX250YWJfcGlsb3QpOworCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfUElMT1RMVCwgYjQzX250YWJfcGlsb3RsdCk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9UREkyMEEwLCBiNDNfbnRhYl90ZGkyMGEwKTsKKwludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX1RESTIwQTEsIGI0M19udGFiX3RkaTIwYTEpOworCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfVERJNDBBMCwgYjQzX250YWJfdGRpNDBhMCk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9UREk0MEExLCBiNDNfbnRhYl90ZGk0MGExKTsKKwludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0JESSwgYjQzX250YWJfYmRpKTsKKwludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0NIQU5FU1QsIGI0M19udGFiX2NoYW5uZWxlc3QpOworCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfTUNTLCBiNDNfbnRhYl9tY3MpOworCisJLyogVm9sYXRpbGUgdGFibGVzICovCisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9OT0lTRVZBUjEwLCBiNDNfbnRhYl9ub2lzZXZhcjEwKTsKKwludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX05PSVNFVkFSMTEsIGI0M19udGFiX25vaXNldmFyMTEpOworCW50YWJfdXBsb2FkKGRldiwgQjQzX05UQUJfQzBfRVNUUExULCBiNDNfbnRhYl9lc3RpbWF0ZXBvd2VybHQwKTsKKwludGFiX3VwbG9hZChkZXYsIEI0M19OVEFCX0MxX0VTVFBMVCwgYjQzX250YWJfZXN0aW1hdGVwb3dlcmx0MSk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMF9BREpQTFQsIGI0M19udGFiX2FkanVzdHBvd2VyMCk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMV9BREpQTFQsIGI0M19udGFiX2FkanVzdHBvd2VyMSk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMF9HQUlOQ1RMLCBiNDNfbnRhYl9nYWluY3RsMCk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMV9HQUlOQ1RMLCBiNDNfbnRhYl9nYWluY3RsMSk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMF9JUUxULCBiNDNfbnRhYl9pcWx0MCk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMV9JUUxULCBiNDNfbnRhYl9pcWx0MSk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMF9MT0ZFRURUSCwgYjQzX250YWJfbG9mdGx0MCk7CisJbnRhYl91cGxvYWQoZGV2LCBCNDNfTlRBQl9DMV9MT0ZFRURUSCwgYjQzX250YWJfbG9mdGx0MSk7Cit9CisKK3ZvaWQgYjQzX25waHlfcmV2M3BsdXNfdGFibGVzX2luaXQoc3RydWN0IGI0M193bGRldiAqZGV2KQoreworCS8qIFN0YXRpYyB0YWJsZXMgKi8KKwkvKiBUT0RPICovCisKKwkvKiBWb2xhdGlsZSB0YWJsZXMgKi8KKwkvKiBUT0RPICovCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDMvdGFibGVzX25waHkuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbnBoeS5oCmluZGV4IDRkNDk4YjAuLjljMWM2ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbnBoeS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0My90YWJsZXNfbnBoeS5oCkBAIC00Niw2ICs0NiwyNyBAQAogCiBzdHJ1Y3QgYjQzX3dsZGV2OwogCitzdHJ1Y3QgbnBoeV90eGlxY2FsX2xhZGRlciB7CisJdTggcGVyY2VudDsKKwl1OCBnX2VudjsKK307CisKK3N0cnVjdCBucGh5X3JmX2NvbnRyb2xfb3ZlcnJpZGVfcmV2MiB7CisJdTggYWRkcjA7CisJdTggYWRkcjE7CisJdTE2IGJtYXNrOworCXU4IHNoaWZ0OworfTsKKworc3RydWN0IG5waHlfcmZfY29udHJvbF9vdmVycmlkZV9yZXYzIHsKKwl1MTYgdmFsX21hc2s7CisJdTggdmFsX3NoaWZ0OworCXU4IGVuX2FkZHIwOworCXU4IHZhbF9hZGRyMDsKKwl1OCBlbl9hZGRyMTsKKwl1OCB2YWxfYWRkcjE7Cit9OworCiAvKiBVcGxvYWQgdGhlIGRlZmF1bHQgcmVnaXN0ZXIgdmFsdWUgdGFibGUuCiAgKiBJZiAiZ2h6NSIgaXMgdHJ1ZSwgd2UgdXBsb2FkIHRoZSA1R2h6IHRhYmxlLiBPdGhlcndpc2UgdGhlIDIuNEdoegogICogdGFibGUgaXMgdXBsb2FkZWQuIElmICJpZ25vcmVfdXBsb2FkZmxhZyIgaXMgdHJ1ZSwgd2UgdXBsb2FkIGFueSB2YWx1ZQpAQCAtMTI2LDM0ICsxNDcsNTcgQEAKICNkZWZpbmUgQjQzX05UQUJfQzFfTE9GRUVEVEgJCUI0M19OVEFCMTYoMHgxQiwgMHgxQzApIC8qIExvY2FsIE9zY2lsbGF0b3IgRmVlZCBUaHJvdWdoIExvb2t1cCBUYWJsZSBDb3JlIDEgKi8KICNkZWZpbmUgQjQzX05UQUJfQzFfTE9GRUVEVEhfU0laRQkxMjgKIAorI2RlZmluZSBCNDNfTlRBQl9UWF9JUUxPX0NBTF9MT0ZUX0xBRERFUl80MF9TSVpFCTE4CisjZGVmaW5lIEI0M19OVEFCX1RYX0lRTE9fQ0FMX0xPRlRfTEFEREVSXzIwX1NJWkUJMTgKKyNkZWZpbmUgQjQzX05UQUJfVFhfSVFMT19DQUxfSVFJTUJfTEFEREVSXzQwX1NJWkUJMTgKKyNkZWZpbmUgQjQzX05UQUJfVFhfSVFMT19DQUxfSVFJTUJfTEFEREVSXzIwX1NJWkUJMTgKKyNkZWZpbmUgQjQzX05UQUJfVFhfSVFMT19DQUxfU1RBUlRDT0VGU19SRVYzCQkxMQorI2RlZmluZSBCNDNfTlRBQl9UWF9JUUxPX0NBTF9TVEFSVENPRUZTCQkJOQorI2RlZmluZSBCNDNfTlRBQl9UWF9JUUxPX0NBTF9DTURTX1JFQ0FMX1JFVjMJCTEyCisjZGVmaW5lIEI0M19OVEFCX1RYX0lRTE9fQ0FMX0NNRFNfUkVDQUwJCQkxMAorI2RlZmluZSBCNDNfTlRBQl9UWF9JUUxPX0NBTF9DTURTX0ZVTExDQUwJCTEwCisjZGVmaW5lIEI0M19OVEFCX1RYX0lRTE9fQ0FMX0NNRFNfRlVMTENBTF9SRVYzCQkxMgorCit1MzIgYjQzX250YWJfcmVhZChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBvZmZzZXQpOwordm9pZCBiNDNfbnRhYl9yZWFkX2J1bGsoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgb2Zmc2V0LAorCQkJIHVuc2lnbmVkIGludCBucl9lbGVtZW50cywgdm9pZCAqX2RhdGEpOwogdm9pZCBiNDNfbnRhYl93cml0ZShzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYsIHUzMiBvZmZzZXQsIHUzMiB2YWx1ZSk7Cit2b2lkIGI0M19udGFiX3dyaXRlX2J1bGsoc3RydWN0IGI0M193bGRldiAqZGV2LCB1MzIgb2Zmc2V0LAorCQkJICB1bnNpZ25lZCBpbnQgbnJfZWxlbWVudHMsIGNvbnN0IHZvaWQgKl9kYXRhKTsKIAotZXh0ZXJuIGNvbnN0IHU4IGI0M19udGFiX2FkanVzdHBvd2VyMFtdOwotZXh0ZXJuIGNvbnN0IHU4IGI0M19udGFiX2FkanVzdHBvd2VyMVtdOwotZXh0ZXJuIGNvbnN0IHUxNiBiNDNfbnRhYl9iZGlbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfY2hhbm5lbGVzdFtdOwotZXh0ZXJuIGNvbnN0IHU4IGI0M19udGFiX2VzdGltYXRlcG93ZXJsdDBbXTsKLWV4dGVybiBjb25zdCB1OCBiNDNfbnRhYl9lc3RpbWF0ZXBvd2VybHQxW107Ci1leHRlcm4gY29uc3QgdTggYjQzX250YWJfZnJhbWVsb29rdXBbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfZnJhbWVzdHJ1Y3RbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfZ2FpbmN0bDBbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfZ2FpbmN0bDFbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfaW50bGV2ZWxbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfaXFsdDBbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfaXFsdDFbXTsKLWV4dGVybiBjb25zdCB1MTYgYjQzX250YWJfbG9mdGx0MFtdOwotZXh0ZXJuIGNvbnN0IHUxNiBiNDNfbnRhYl9sb2Z0bHQxW107Ci1leHRlcm4gY29uc3QgdTggYjQzX250YWJfbWNzW107Ci1leHRlcm4gY29uc3QgdTMyIGI0M19udGFiX25vaXNldmFyMTBbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfbm9pc2V2YXIxMVtdOwotZXh0ZXJuIGNvbnN0IHUxNiBiNDNfbnRhYl9waWxvdFtdOwotZXh0ZXJuIGNvbnN0IHUzMiBiNDNfbnRhYl9waWxvdGx0W107Ci1leHRlcm4gY29uc3QgdTMyIGI0M19udGFiX3RkaTIwYTBbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfdGRpMjBhMVtdOwotZXh0ZXJuIGNvbnN0IHUzMiBiNDNfbnRhYl90ZGk0MGEwW107Ci1leHRlcm4gY29uc3QgdTMyIGI0M19udGFiX3RkaTQwYTFbXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfdGR0cm5bXTsKLWV4dGVybiBjb25zdCB1MzIgYjQzX250YWJfdG1hcFtdOwordm9pZCBiNDNfbnBoeV9yZXYwXzFfMl90YWJsZXNfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwordm9pZCBiNDNfbnBoeV9yZXYzcGx1c190YWJsZXNfaW5pdChzdHJ1Y3QgYjQzX3dsZGV2ICpkZXYpOwogCitleHRlcm4gY29uc3QgdTMyIGI0M19udGFiX3R4X2dhaW5fcmV2MF8xXzJbXTsKK2V4dGVybiBjb25zdCB1MzIgYjQzX250YWJfdHhfZ2Fpbl9yZXYzcGx1c18yZ2h6W107CitleHRlcm4gY29uc3QgdTMyIGI0M19udGFiX3R4X2dhaW5fcmV2M181Z2h6W107CitleHRlcm4gY29uc3QgdTMyIGI0M19udGFiX3R4X2dhaW5fcmV2NF81Z2h6W107CitleHRlcm4gY29uc3QgdTMyIGI0M19udGFiX3R4X2dhaW5fcmV2NXBsdXNfNWdoeltdOworCitleHRlcm4gY29uc3QgdTMyIHR4cHdyY3RybF90eF9nYWluX2lwYVtdOworZXh0ZXJuIGNvbnN0IHUzMiB0eHB3cmN0cmxfdHhfZ2Fpbl9pcGFfcmV2NVtdOworZXh0ZXJuIGNvbnN0IHUzMiB0eHB3cmN0cmxfdHhfZ2Fpbl9pcGFfcmV2NltdOworZXh0ZXJuIGNvbnN0IHUzMiB0eHB3cmN0cmxfdHhfZ2Fpbl9pcGFfNWdbXTsKK2V4dGVybiBjb25zdCB1MTYgdGJsX2lxY2FsX2dhaW5wYXJhbXNbMl1bOV1bOF07CitleHRlcm4gY29uc3Qgc3RydWN0IG5waHlfdHhpcWNhbF9sYWRkZXIgbGFkZGVyX2xvW107CitleHRlcm4gY29uc3Qgc3RydWN0IG5waHlfdHhpcWNhbF9sYWRkZXIgbGFkZGVyX2lxW107CitleHRlcm4gY29uc3QgdTE2IGxvc2NhbGVbXTsKKworZXh0ZXJuIGNvbnN0IHUxNiB0YmxfdHhfaXFsb19jYWxfbG9mdF9sYWRkZXJfNDBbXTsKK2V4dGVybiBjb25zdCB1MTYgdGJsX3R4X2lxbG9fY2FsX2xvZnRfbGFkZGVyXzIwW107CitleHRlcm4gY29uc3QgdTE2IHRibF90eF9pcWxvX2NhbF9pcWltYl9sYWRkZXJfNDBbXTsKK2V4dGVybiBjb25zdCB1MTYgdGJsX3R4X2lxbG9fY2FsX2lxaW1iX2xhZGRlcl8yMFtdOworZXh0ZXJuIGNvbnN0IHUxNiB0YmxfdHhfaXFsb19jYWxfc3RhcnRjb2Vmc19ucGh5cmV2M1tdOworZXh0ZXJuIGNvbnN0IHUxNiB0YmxfdHhfaXFsb19jYWxfc3RhcnRjb2Vmc1tdOworZXh0ZXJuIGNvbnN0IHUxNiB0YmxfdHhfaXFsb19jYWxfY21kc19yZWNhbF9ucGh5cmV2M1tdOworZXh0ZXJuIGNvbnN0IHUxNiB0YmxfdHhfaXFsb19jYWxfY21kc19yZWNhbFtdOworZXh0ZXJuIGNvbnN0IHUxNiB0YmxfdHhfaXFsb19jYWxfY21kc19mdWxsY2FsW107CitleHRlcm4gY29uc3QgdTE2IHRibF90eF9pcWxvX2NhbF9jbWRzX2Z1bGxjYWxfbnBoeXJldjNbXTsKK2V4dGVybiBjb25zdCBzMTYgdGJsX3R4X2ZpbHRlcl9jb2VmX3JldjRbN11bMTVdOworCitleHRlcm4gY29uc3Qgc3RydWN0IG5waHlfcmZfY29udHJvbF9vdmVycmlkZV9yZXYyCisJdGJsX3JmX2NvbnRyb2xfb3ZlcnJpZGVfcmV2MltdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBucGh5X3JmX2NvbnRyb2xfb3ZlcnJpZGVfcmV2MworCXRibF9yZl9jb250cm9sX292ZXJyaWRlX3JldjNbXTsKIAogI2VuZGlmIC8qIEI0M19UQUJMRVNfTlBIWV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2RtYS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2RtYS5jCmluZGV4IDBhODZiZGYuLjhiOTM4N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9kbWEuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvZG1hLmMKQEAgLTE0MTEsNyArMTQxMSw2IEBACiAJCWI0M2xlZ2FjeWVycihkZXYtPndsLCAiRE1BIHR4IG1hcHBpbmcgZmFpbHVyZVxuIik7CiAJCWdvdG8gb3V0X3VubG9jazsKIAl9Ci0JcmluZy0+bnJfdHhfcGFja2V0cysrOwogCWlmICgoZnJlZV9zbG90cyhyaW5nKSA8IFNMT1RTX1BFUl9QQUNLRVQpIHx8CiAJICAgIHNob3VsZF9pbmplY3Rfb3ZlcmZsb3cocmluZykpIHsKIAkJLyogVGhpcyBUWCByaW5nIGlzIGZ1bGwuICovCkBAIC0xNTI3LDI1ICsxNTI2LDYgQEAKIAlzcGluX3VubG9jaygmcmluZy0+bG9jayk7CiB9CiAKLXZvaWQgYjQzbGVnYWN5X2RtYV9nZXRfdHhfc3RhdHMoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCi17Ci0JY29uc3QgaW50IG5yX3F1ZXVlcyA9IGRldi0+d2wtPmh3LT5xdWV1ZXM7Ci0Jc3RydWN0IGI0M2xlZ2FjeV9kbWFyaW5nICpyaW5nOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcXVldWVzOyBpKyspIHsKLQkJcmluZyA9IHByaW9yaXR5X3RvX3R4cmluZyhkZXYsIGkpOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZyaW5nLT5sb2NrLCBmbGFncyk7Ci0JCXN0YXRzW2ldLmxlbiA9IHJpbmctPnVzZWRfc2xvdHMgLyBTTE9UU19QRVJfUEFDS0VUOwotCQlzdGF0c1tpXS5saW1pdCA9IHJpbmctPm5yX3Nsb3RzIC8gU0xPVFNfUEVSX1BBQ0tFVDsKLQkJc3RhdHNbaV0uY291bnQgPSByaW5nLT5ucl90eF9wYWNrZXRzOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZyaW5nLT5sb2NrLCBmbGFncyk7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBkbWFfcngoc3RydWN0IGI0M2xlZ2FjeV9kbWFyaW5nICpyaW5nLAogCQkgICBpbnQgKnNsb3QpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvZG1hLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvZG1hLmgKaW5kZXggMmYxODYwMC4uZjk2ODEwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2RtYS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9kbWEuaApAQCAtMjQzLDggKzI0Myw2IEBACiAJaW50IHVzZWRfc2xvdHM7CiAJLyogQ3VycmVudGx5IHVzZWQgc2xvdCBpbiB0aGUgcmluZy4gKi8KIAlpbnQgY3VycmVudF9zbG90OwotCS8qIFRvdGFsIG51bWJlciBvZiBwYWNrZXRzIHNlbnQuIFN0YXRpc3RpY3Mgb25seS4gKi8KLQl1bnNpZ25lZCBpbnQgbnJfdHhfcGFja2V0czsKIAkvKiBGcmFtZW9mZnNldCBpbiBvY3RldHMuICovCiAJdTMyIGZyYW1lb2Zmc2V0OwogCS8qIERlc2NyaXB0b3IgYnVmZmVyIHNpemUuICovCkBAIC0yOTIsOSArMjkwLDYgQEAKIHZvaWQgYjQzbGVnYWN5X2RtYV90eF9zdXNwZW5kKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldik7CiB2b2lkIGI0M2xlZ2FjeV9kbWFfdHhfcmVzdW1lKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldik7CiAKLXZvaWQgYjQzbGVnYWN5X2RtYV9nZXRfdHhfc3RhdHMoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKTsKLQogaW50IGI0M2xlZ2FjeV9kbWFfdHgoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LAogCQkgICAgIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBiNDNsZWdhY3lfZG1hX2hhbmRsZV90eHN0YXR1cyhzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYsCkBAIC0zMTUsMTEgKzMxMCw2IEBACiB7CiB9CiBzdGF0aWMgaW5saW5lCi12b2lkIGI0M2xlZ2FjeV9kbWFfZ2V0X3R4X3N0YXRzKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKLXsKLX0KLXN0YXRpYyBpbmxpbmUKIGludCBiNDNsZWdhY3lfZG1hX3R4KHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKIAkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2xlZHMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9sZWRzLmgKaW5kZXggODIxNjdhOS4uOWZmNjc1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L2xlZHMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbGVkcy5oCkBAIC00NSw3ICs0NSw3IEBACiB2b2lkIGI0M2xlZ2FjeV9sZWRzX2luaXQoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2KTsKIHZvaWQgYjQzbGVnYWN5X2xlZHNfZXhpdChzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYpOwogCi0jZWxzZSAvKiBDT05GSUdfQjQzRUdBQ1lfTEVEUyAqLworI2Vsc2UgLyogQ09ORklHX0I0M0xFR0FDWV9MRURTICovCiAvKiBMRUQgc3VwcG9ydCBkaXNhYmxlZCAqLwogCiBzdHJ1Y3QgYjQzbGVnYWN5X2xlZCB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L21haW4uYwppbmRleCA0YTkwNWI2Li4xZDA3MGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9tYWluLmMKQEAgLTYxLDYgKzYxLDggQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogTU9EVUxFX0ZJUk1XQVJFKEI0M2xlZ2FjeV9TVVBQT1JURURfRklSTVdBUkVfSUQpOworTU9EVUxFX0ZJUk1XQVJFKCJiNDNsZWdhY3kvdWNvZGUyLmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoImI0M2xlZ2FjeS91Y29kZTQuZnciKTsKIAogI2lmIGRlZmluZWQoQ09ORklHX0I0M0xFR0FDWV9ETUEpICYmIGRlZmluZWQoQ09ORklHX0I0M0xFR0FDWV9QSU8pCiBzdGF0aWMgaW50IG1vZHBhcmFtX3BpbzsKQEAgLTI0NDQsMjkgKzI0NDYsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGI0M2xlZ2FjeV9vcF9nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKLXsKLQlzdHJ1Y3QgYjQzbGVnYWN5X3dsICp3bCA9IGh3X3RvX2I0M2xlZ2FjeV93bChodyk7Ci0Jc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2ID0gd2wtPmN1cnJlbnRfZGV2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVyciA9IC1FTk9ERVY7Ci0KLQlpZiAoIWRldikKLQkJZ290byBvdXQ7Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwotCWlmIChsaWtlbHkoYjQzbGVnYWN5X3N0YXR1cyhkZXYpID49IEI0M2xlZ2FjeV9TVEFUX1NUQVJURUQpKSB7Ci0JCWlmIChiNDNsZWdhY3lfdXNpbmdfcGlvKGRldikpCi0JCQliNDNsZWdhY3lfcGlvX2dldF90eF9zdGF0cyhkZXYsIHN0YXRzKTsKLQkJZWxzZQotCQkJYjQzbGVnYWN5X2RtYV9nZXRfdHhfc3RhdHMoZGV2LCBzdGF0cyk7Ci0JCWVyciA9IDA7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJndsLT5pcnFfbG9jaywgZmxhZ3MpOwotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KIHN0YXRpYyBpbnQgYjQzbGVnYWN5X29wX2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKIHsKQEAgLTI5MjEsNiArMjkwMCw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAkvKiBXZSBhcmUgcmVhZHkgdG8gcnVuLiAqLworCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhkZXYtPndsLT5odyk7CiAJYjQzbGVnYWN5X3NldF9zdGF0dXMoZGV2LCBCNDNsZWdhY3lfU1RBVF9TVEFSVEVEKTsKIAogCS8qIFN0YXJ0IGRhdGEgZmxvdyAoVFgvUlgpICovCkBAIC0zMzQxLDYgKzMzMjEsNyBAQAogCWI0M2xlZ2FjeV9zZWN1cml0eV9pbml0KGRldik7CiAJYjQzbGVnYWN5X3JuZ19pbml0KHdsKTsKIAorCWllZWU4MDIxMV93YWtlX3F1ZXVlcyhkZXYtPndsLT5odyk7CiAJYjQzbGVnYWN5X3NldF9zdGF0dXMoZGV2LCBCNDNsZWdhY3lfU1RBVF9JTklUSUFMSVpFRCk7CiAKIAliNDNsZWdhY3lfbGVkc19pbml0KGRldik7CkBAIC0zMzYxLDcgKzMzNDIsNyBAQAogfQogCiBzdGF0aWMgaW50IGI0M2xlZ2FjeV9vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IGI0M2xlZ2FjeV93bCAqd2wgPSBod190b19iNDNsZWdhY3lfd2woaHcpOwogCXN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldjsKQEAgLTMzNzAsMjMgKzMzNTEsMjMgQEAKIAogCS8qIFRPRE86IGFsbG93IFdEUy9BUCBkZXZpY2VzIHRvIGNvZXhpc3QgKi8KIAotCWlmIChjb25mLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQICYmCi0JICAgIGNvbmYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCSAgICBjb25mLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1dEUyAmJgotCSAgICBjb25mLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FESE9DKQorCWlmICh2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYKKwkgICAgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkgICAgdmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1dEUyAmJgorCSAgICB2aWYtPnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAJaWYgKHdsLT5vcGVyYXRpbmcpCiAJCWdvdG8gb3V0X211dGV4X3VubG9jazsKIAotCWI0M2xlZ2FjeWRiZyh3bCwgIkFkZGluZyBJbnRlcmZhY2UgdHlwZSAlZFxuIiwgY29uZi0+dHlwZSk7CisJYjQzbGVnYWN5ZGJnKHdsLCAiQWRkaW5nIEludGVyZmFjZSB0eXBlICVkXG4iLCB2aWYtPnR5cGUpOwogCiAJZGV2ID0gd2wtPmN1cnJlbnRfZGV2OwogCXdsLT5vcGVyYXRpbmcgPSAxOwotCXdsLT52aWYgPSBjb25mLT52aWY7Ci0Jd2wtPmlmX3R5cGUgPSBjb25mLT50eXBlOwotCW1lbWNweSh3bC0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJd2wtPnZpZiA9IHZpZjsKKwl3bC0+aWZfdHlwZSA9IHZpZi0+dHlwZTsKKwltZW1jcHkod2wtPm1hY19hZGRyLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+aXJxX2xvY2ssIGZsYWdzKTsKIAliNDNsZWdhY3lfYWRqdXN0X29wbW9kZShkZXYpOwpAQCAtMzQwMywxOCArMzM4NCwxOCBAQAogfQogCiBzdGF0aWMgdm9pZCBiNDNsZWdhY3lfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBiNDNsZWdhY3lfd2wgKndsID0gaHdfdG9fYjQzbGVnYWN5X3dsKGh3KTsKIAlzdHJ1Y3QgYjQzbGVnYWN5X3dsZGV2ICpkZXYgPSB3bC0+Y3VycmVudF9kZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWI0M2xlZ2FjeWRiZyh3bCwgIlJlbW92aW5nIEludGVyZmFjZSB0eXBlICVkXG4iLCBjb25mLT50eXBlKTsKKwliNDNsZWdhY3lkYmcod2wsICJSZW1vdmluZyBJbnRlcmZhY2UgdHlwZSAlZFxuIiwgdmlmLT50eXBlKTsKIAogCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAKIAlCNDNsZWdhY3lfV0FSTl9PTighd2wtPm9wZXJhdGluZyk7Ci0JQjQzbGVnYWN5X1dBUk5fT04od2wtPnZpZiAhPSBjb25mLT52aWYpOworCUI0M2xlZ2FjeV9XQVJOX09OKHdsLT52aWYgIT0gdmlmKTsKIAl3bC0+dmlmID0gTlVMTDsKIAogCXdsLT5vcGVyYXRpbmcgPSAwOwpAQCAtMzUwOSw3ICszNDkwLDYgQEAKIAkuYnNzX2luZm9fY2hhbmdlZAk9IGI0M2xlZ2FjeV9vcF9ic3NfaW5mb19jaGFuZ2VkLAogCS5jb25maWd1cmVfZmlsdGVyCT0gYjQzbGVnYWN5X29wX2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmdldF9zdGF0cwkJPSBiNDNsZWdhY3lfb3BfZ2V0X3N0YXRzLAotCS5nZXRfdHhfc3RhdHMJCT0gYjQzbGVnYWN5X29wX2dldF90eF9zdGF0cywKIAkuc3RhcnQJCQk9IGI0M2xlZ2FjeV9vcF9zdGFydCwKIAkuc3RvcAkJCT0gYjQzbGVnYWN5X29wX3N0b3AsCiAJLnNldF90aW0JCT0gYjQzbGVnYWN5X29wX2JlYWNvbl9zZXRfdGltLApAQCAtMzk2MCw3ICszOTQwLDcgQEAKIAogc3RhdGljIHZvaWQgYjQzbGVnYWN5X3ByaW50X2RyaXZlcmluZm8odm9pZCkKIHsKLQljb25zdCBjaGFyICpmZWF0X3BjaSA9ICIiLCAqZmVhdF9sZWRzID0gIiIsICpmZWF0X3Jma2lsbCA9ICIiLAorCWNvbnN0IGNoYXIgKmZlYXRfcGNpID0gIiIsICpmZWF0X2xlZHMgPSAiIiwKIAkJICAgKmZlYXRfcGlvID0gIiIsICpmZWF0X2RtYSA9ICIiOwogCiAjaWZkZWYgQ09ORklHX0I0M0xFR0FDWV9QQ0lfQVVUT1NFTEVDVApAQCAtMzk2OSw5ICszOTQ5LDYgQEAKICNpZmRlZiBDT05GSUdfQjQzTEVHQUNZX0xFRFMKIAlmZWF0X2xlZHMgPSAiTCI7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQjQzTEVHQUNZX1JGS0lMTAotCWZlYXRfcmZraWxsID0gIlIiOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0I0M0xFR0FDWV9QSU8KIAlmZWF0X3BpbyA9ICJJIjsKICNlbmRpZgpAQCAtMzk3OSw5ICszOTU2LDkgQEAKIAlmZWF0X2RtYSA9ICJEIjsKICNlbmRpZgogCXByaW50ayhLRVJOX0lORk8gIkJyb2FkY29tIDQzeHgtbGVnYWN5IGRyaXZlciBsb2FkZWQgIgotCSAgICAgICAiWyBGZWF0dXJlczogJXMlcyVzJXMlcywgRmlybXdhcmUtSUQ6ICIKKwkgICAgICAgIlsgRmVhdHVyZXM6ICVzJXMlcyVzLCBGaXJtd2FyZS1JRDogIgogCSAgICAgICBCNDNsZWdhY3lfU1VQUE9SVEVEX0ZJUk1XQVJFX0lEICIgXVxuIiwKLQkgICAgICAgZmVhdF9wY2ksIGZlYXRfbGVkcywgZmVhdF9yZmtpbGwsIGZlYXRfcGlvLCBmZWF0X2RtYSk7CisJICAgICAgIGZlYXRfcGNpLCBmZWF0X2xlZHMsIGZlYXRfcGlvLCBmZWF0X2RtYSk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGI0M2xlZ2FjeV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGlvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGlvLmMKaW5kZXggNTE4NjZjOS4uMDE3YzBlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3Bpby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9waW8uYwpAQCAtNDc3LDcgKzQ3Nyw2IEBACiAKIAlsaXN0X21vdmVfdGFpbCgmcGFja2V0LT5saXN0LCAmcXVldWUtPnR4cXVldWUpOwogCXF1ZXVlLT5ucl90eGZyZWUtLTsKLQlxdWV1ZS0+bnJfdHhfcGFja2V0cysrOwogCUI0M2xlZ2FjeV9XQVJOX09OKHF1ZXVlLT5ucl90eGZyZWUgPj0gQjQzbGVnYWN5X1BJT19NQVhUWFBBQ0tFVFMpOwogCiAJdGFza2xldF9zY2hlZHVsZSgmcXVldWUtPnR4dGFzayk7CkBAIC01NDYsMTggKzU0NSw2IEBACiAJCXRhc2tsZXRfc2NoZWR1bGUoJnF1ZXVlLT50eHRhc2spOwogfQogCi12b2lkIGI0M2xlZ2FjeV9waW9fZ2V0X3R4X3N0YXRzKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKLXsKLQlzdHJ1Y3QgYjQzbGVnYWN5X3BpbyAqcGlvID0gJmRldi0+cGlvOwotCXN0cnVjdCBiNDNsZWdhY3lfcGlvcXVldWUgKnF1ZXVlOwotCi0JcXVldWUgPSBwaW8tPnF1ZXVlMTsKLQlzdGF0c1swXS5sZW4gPSBCNDNsZWdhY3lfUElPX01BWFRYUEFDS0VUUyAtIHF1ZXVlLT5ucl90eGZyZWU7Ci0Jc3RhdHNbMF0ubGltaXQgPSBCNDNsZWdhY3lfUElPX01BWFRYUEFDS0VUUzsKLQlzdGF0c1swXS5jb3VudCA9IHF1ZXVlLT5ucl90eF9wYWNrZXRzOwotfQotCiBzdGF0aWMgdm9pZCBwaW9fcnhfZXJyb3Ioc3RydWN0IGI0M2xlZ2FjeV9waW9xdWV1ZSAqcXVldWUsCiAJCQkgaW50IGNsZWFyX2J1ZmZlcnMsCiAJCQkgY29uc3QgY2hhciAqZXJyb3IpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGlvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iNDNsZWdhY3kvcGlvLmgKaW5kZXggNDY0ZmVjMC4uOGU2NzczZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYjQzbGVnYWN5L3Bpby5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2I0M2xlZ2FjeS9waW8uaApAQCAtNzQsMTAgKzc0LDYgQEAKIAkgKiBwb3N0ZWQgdG8gdGhlIGRldmljZS4gV2UgYXJlIHdhaXRpbmcgZm9yIHRoZSB0eHN0YXR1cy4KIAkgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHR4cnVubmluZzsKLQkvKiBUb3RhbCBudW1iZXIgb3IgcGFja2V0cyBzZW50LgotCSAqIChUaGlzIGNvdW50ZXIgY2FuIG9idmlvdXNseSB3cmFwKS4KLQkgKi8KLQl1bnNpZ25lZCBpbnQgbnJfdHhfcGFja2V0czsKIAlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdHh0YXNrOwogCXN0cnVjdCBiNDNsZWdhY3lfcGlvX3R4cGFja2V0CiAJCQkgdHhfcGFja2V0c19jYWNoZVtCNDNsZWdhY3lfUElPX01BWFRYUEFDS0VUU107CkBAIC0xMDYsOCArMTAyLDYgQEAKIAkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIGI0M2xlZ2FjeV9waW9faGFuZGxlX3R4c3RhdHVzKHN0cnVjdCBiNDNsZWdhY3lfd2xkZXYgKmRldiwKIAkJCQkgY29uc3Qgc3RydWN0IGI0M2xlZ2FjeV90eHN0YXR1cyAqc3RhdHVzKTsKLXZvaWQgYjQzbGVnYWN5X3Bpb19nZXRfdHhfc3RhdHMoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpOwogdm9pZCBiNDNsZWdhY3lfcGlvX3J4KHN0cnVjdCBiNDNsZWdhY3lfcGlvcXVldWUgKnF1ZXVlKTsKIAogLyogU3VzcGVuZCBUWCBxdWV1ZSBpbiBoYXJkd2FyZS4gKi8KQEAgLTE0MCwxMSArMTM0LDYgQEAKIHsKIH0KIHN0YXRpYyBpbmxpbmUKLXZvaWQgYjQzbGVnYWN5X3Bpb19nZXRfdHhfc3RhdHMoc3RydWN0IGI0M2xlZ2FjeV93bGRldiAqZGV2LAotCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCi17Ci19Ci1zdGF0aWMgaW5saW5lCiB2b2lkIGI0M2xlZ2FjeV9waW9fcngoc3RydWN0IGI0M2xlZ2FjeV9waW9xdWV1ZSAqcXVldWUpCiB7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2NzLmMKaW5kZXggYzk2NDBhMy4uZDE5NzQ4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfY3MuYwpAQCAtNzk0LDEzICs3OTQsNiBAQAogCVBDTUNJQV9NRkNfREVWSUNFX1BST0RfSUQxMigwLCAiU2FuRGlzayIsICJDb25uZWN0UGx1cyIsCiAJCQkJICAgIDB4N2E5NTRiZDksIDB4NzRiZTAwYzYpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygKLQkJIkludGVyc2lsIiwgIlBSSVNNIDJfNSBQQ01DSUEgQURBUFRFUiIsCSJJU0wzNzMwMFAiLAotCQkweDRiODAxYTE3LCAweDYzNDVhMGJmLCAweGM5MDQ5YTM5KSwKLQkvKiBELUxpbmsgRFdMLTY1MCBSZXYuIFAxOyBtYW5maWQgMHgwMDBiLCAweDcxMTAgKi8KLQlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoCi0JCSJELUxpbmsiLCAiRFdMLTY1MCBXaXJlbGVzcyBQQyBDYXJkIFJldlAiLCAiSVNMMzcxMDFQLTEwIiwKLQkJMHgxYTQyNGExYywgMHg2ZWE1NzYzMiwgMHhkZDk3YTI2YiksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKAogCQkiQWRkdHJvbiIsICJBV1AtMTAwIFdpcmVsZXNzIFBDTUNJQSIsICJWZXJzaW9uIDAxLjAyIiwKIAkJMHhlNmVjNTJjZSwgMHgwODY0OWFmMiwgMHg0Yjc0YmFhMCksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKApAQCAtODM0LDE0ICs4MjcsMTIgQEAKIAkJIlZlci4gMS4wMCIsCiAJCTB4NWNkMDE3MDUsIDB4NDI3MTY2MGYsIDB4OWQwOGVlMTIpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygKLQkJImNvcmVnYSIsICJXTCBQQ0NMLTExIiwgIklTTDM3MzAwUCIsCi0JCTB4YTIxNTAxYSwgMHg1OTg2ODkyNiwgMHhjOTA0OWEzOSksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKAotCQkiVGhlIExpbmtzeXMgR3JvdXAsIEluYy4iLCAiV2lyZWxlc3MgTmV0d29yayBDRiBDYXJkIiwgIklTTDM3MzAwUCIsCi0JCTB4YTVmNDcyYzIsIDB4OWMwNTU5OGQsIDB4YzkwNDlhMzkpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygKIAkJIldpcmVsZXNzIExBTiIgLCAiMTFNYnBzIFBDIENhcmQiLCAiVmVyc2lvbiAwMS4wMiIsCiAJCTB4NGI4ODcwZmYsIDB4NzBlOTQ2ZDEsIDB4NGI3NGJhYTApLAorCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDMoIkhGQTM4NjMiLCAweDM1NWNiMDkyKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQzKCJJU0wzNzEwMFAiLCAweDYzMGQ1MmIyKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQzKCJJU0wzNzEwMVAtMTAiLCAweGRkOTdhMjZiKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQzKCJJU0wzNzMwMFAiLCAweGM5MDQ5YTM5KSwKIAlQQ01DSUFfREVWSUNFX05VTEwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjbWNpYSwgaG9zdGFwX2NzX2lkcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2h3LmMKaW5kZXggZmY5YjVjOC4uZDcwNzMyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9ody5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaHcuYwpAQCAtMjYxOCw2ICsyNjE4LDE1IEBACiAJaW50IGV2ZW50cyA9IDA7CiAJdTE2IGV2OwogCisJLyogRGV0ZWN0IGVhcmx5IGludGVycnVwdCBiZWZvcmUgZHJpdmVyIGlzIGZ1bGx5IGNvbmZpZ3VlZCAqLworCWlmICghZGV2LT5iYXNlX2FkZHIpIHsKKwkJaWYgKG5ldF9yYXRlbGltaXQoKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnRlcnJ1cHQsIGJ1dCBkZXYgbm90IGNvbmZpZ3VyZWRcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJfQorCQlyZXR1cm4gSVJRX0hBTkRMRUQ7CisJfQorCiAJaWZhY2UgPSBuZXRkZXZfcHJpdihkZXYpOwogCWxvY2FsID0gaWZhY2UtPmxvY2FsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wY2kuYwppbmRleCA4ZmRkNDFmLi40ZDk3YWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGNpLmMKQEAgLTM5LDcgKzM5LDcgQEAKIC8qIEZJWDogZG8gd2UgbmVlZCBtYi93bWIvcm1iIHdpdGggbWVtb3J5IG9wZXJhdGlvbnM/ICovCiAKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHByaXNtMl9wY2lfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHByaXNtMl9wY2lfaWRfdGFibGUpID0gewogCS8qIEludGVyc2lsIFByaXNtMyBJU0wzODcyIDExTWIvcyBXTEFOIENvbnRyb2xsZXIgKi8KIAl7IDB4MTI2MCwgMHgzODcyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lEIH0sCiAJLyogSW50ZXJzaWwgUHJpc20yLjUgSVNMMzg3NCAxMU1iL3MgV0xBTiBDb250cm9sbGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BseC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9wbHguYwppbmRleCAwZTVkNTEwLi5mYzA0Y2NkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX3BseC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfcGx4LmMKQEAgLTYwLDcgKzYwLDcgQEAKIAogI2RlZmluZSBQTFhERVYodmVuZG9yLGRldixzdHIpIHsgdmVuZG9yLCBkZXYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQgfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcHJpc20yX3BseF9pZF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocHJpc20yX3BseF9pZF90YWJsZSkgPSB7CiAJUExYREVWKDB4MTBiNywgMHg3NzcwLCAiM0NvbSBBaXJDb25uZWN0IFBDSSA3NzdBIiksCiAJUExYREVWKDB4MTExYSwgMHgxMDIzLCAiU2llbWVucyBTcGVlZFN0cmVhbSBTUzEwMjMiKSwKIAlQTFhERVYoMHgxMjZjLCAweDgwMzAsICJOb3J0ZWwgZW1vYmlsaXR5IiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyeDAwL2lwdzIxMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCmluZGV4IDU2YWZjZjAuLjliNzJjNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjEwMC5jCkBAIC02NTg1LDcgKzY1ODUsNyBAQAogCiAjZGVmaW5lIElQVzIxMDBfREVWX0lEKHgpIHsgUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMDQzLCAweDgwODYsIHggfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXB3MjEwMF9wY2lfaWRfdGFibGVbXSBfX2RldmluaXRkYXRhID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKGlwdzIxMDBfcGNpX2lkX3RhYmxlKSA9IHsKIAlJUFcyMTAwX0RFVl9JRCgweDI1MjApLAkvKiBJTiAyMTAwQSBtUENJIDNBICovCiAJSVBXMjEwMF9ERVZfSUQoMHgyNTIxKSwJLyogSU4gMjEwMEEgbVBDSSAzQiAqLwogCUlQVzIxMDBfREVWX0lEKDB4MjUyNCksCS8qIElOIDIxMDBBIG1QQ0kgM0IgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzJ4MDAvaXB3MjIwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKaW5kZXggMDlkZGQzZS4uNjNjMmE3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MngwMC9pcHcyMjAwLmMKQEAgLTExNTI0LDcgKzExNTI0LDcgQEAKIH0KIAogLyogUENJIGRyaXZlciBzdHVmZiAqLwotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNhcmRfaWRzW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY2FyZF9pZHMpID0gewogCXtQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwNDMsIDB4ODA4NiwgMHgyNzAxLCAwLCAwLCAwfSwKIAl7UENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxMDQzLCAweDgwODYsIDB4MjcwMiwgMCwgMCwgMH0sCiAJe1BDSV9WRU5ET1JfSURfSU5URUwsIDB4MTA0MywgMHg4MDg2LCAweDI3MTEsIDAsIDAsIDB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9LY29uZmlnCmluZGV4IGIxNmIwNmMuLmRjOGVkMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL0tjb25maWcKQEAgLTEsMTQgKzEsOCBAQAogY29uZmlnIElXTFdJRkkKIAl0cmlzdGF0ZSAiSW50ZWwgV2lyZWxlc3MgV2lmaSIKLQlkZXBlbmRzIG9uIFBDSSAmJiBNQUM4MDIxMSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIFBDSSAmJiBNQUM4MDIxMQogCXNlbGVjdCBGV19MT0FERVIKIAotY29uZmlnIElXTFdJRklfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKLQlib29sICJFbmFibGUgU3BlY3RydW0gTWVhc3VyZW1lbnQgaW4gaXdsYWduIGRyaXZlciIKLQlkZXBlbmRzIG9uIElXTFdJRkkKLQktLS1oZWxwLS0tCi0JICBUaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBzcGVjdHJ1bSBtZWFzdXJlbWVudCBmb3IgdGhlIGl3bGFnbiBkcml2ZXIuCi0KIGNvbmZpZyBJV0xXSUZJX0RFQlVHCiAJYm9vbCAiRW5hYmxlIGZ1bGwgZGVidWdnaW5nIG91dHB1dCBpbiBpd2xhZ24gYW5kIGl3bDM5NDUgZHJpdmVycyIKIAlkZXBlbmRzIG9uIElXTFdJRkkKQEAgLTEyMCw5ICsxMTQsMyBAQAogCSAgaW5zZXJ0ZWQgaW4gYW5kIHJlbW92ZWQgZnJvbSB0aGUgcnVubmluZyBrZXJuZWwgd2hlbmV2ZXIgeW91IHdhbnQpLAogCSAgc2F5IE0gaGVyZSBhbmQgcmVhZCA8ZmlsZTpEb2N1bWVudGF0aW9uL2tidWlsZC9tb2R1bGVzLnR4dD4uICBUaGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpd2wzOTQ1LgotCi1jb25maWcgSVdMMzk0NV9TUEVDVFJVTV9NRUFTVVJFTUVOVAotCWJvb2wgIkVuYWJsZSBTcGVjdHJ1bSBNZWFzdXJlbWVudCBpbiBpd2wzOTQ1IGRyaXZlciIKLQlkZXBlbmRzIG9uIElXTDM5NDUKLQktLS1oZWxwLS0tCi0JICBUaGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBzcGVjdHJ1bSBtZWFzdXJlbWVudCBmb3IgdGhlIGl3bDM5NDUgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvTWFrZWZpbGUKaW5kZXggN2Y4MjA0NC4uNGUzNzhmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL01ha2VmaWxlCkBAIC0zLDcgKzMsNiBAQAogaXdsY29yZS1vYmpzIAkJKz0gaXdsLXJ4Lm8gaXdsLXR4Lm8gaXdsLXN0YS5vIGl3bC1jYWxpYi5vCiBpd2xjb3JlLW9ianMgCQkrPSBpd2wtc2Nhbi5vIGl3bC1sZWQubwogaXdsY29yZS0kKENPTkZJR19JV0xXSUZJX0RFQlVHRlMpICs9IGl3bC1kZWJ1Z2ZzLm8KLWl3bGNvcmUtJChDT05GSUdfSVdMV0lGSV9TUEVDVFJVTV9NRUFTVVJFTUVOVCkgKz0gaXdsLXNwZWN0cnVtLm8KIGl3bGNvcmUtJChDT05GSUdfSVdMV0lGSV9ERVZJQ0VfVFJBQ0lORykgKz0gaXdsLWRldnRyYWNlLm8KIAogQ0ZMQUdTX2l3bC1kZXZ0cmFjZS5vIDo9IC1JJChzcmMpCkBAIC0yMCwzICsxOSw1IEBACiAjIDM5NDUKIG9iai0kKENPTkZJR19JV0wzOTQ1KQkrPSBpd2wzOTQ1Lm8KIGl3bDM5NDUtb2JqcwkJOj0gaXdsMzk0NS1iYXNlLm8gaXdsLTM5NDUubyBpd2wtMzk0NS1ycy5vIGl3bC0zOTQ1LWxlZC5vCisKK2NjZmxhZ3MteSArPSAtRF9fQ0hFQ0tfRU5ESUFOX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTEwMDAuYwppbmRleCA4NDE0MTc4Li4zYmYyZTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0xMDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMTAwMC5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA4LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC04OSw4ICs4OSw3OCBAQAogCQkJCX5BUE1HX1NWUl9WT0xUQUdFX0NPTkZJR19CSVRfTVNLKTsKIH0KIAorc3RhdGljIHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfcmFuZ2VzIGl3bDEwMDBfc2Vuc2l0aXZpdHkgPSB7CisJLm1pbl9ucmdfY2NrID0gOTUsCisJLm1heF9ucmdfY2NrID0gMCwgLyogbm90IHVzZWQsIHNldCB0byAwICovCisJLmF1dG9fY29ycl9taW5fb2ZkbSA9IDkwLAorCS5hdXRvX2NvcnJfbWluX29mZG1fbXJjID0gMTcwLAorCS5hdXRvX2NvcnJfbWluX29mZG1feDEgPSAxMjAsCisJLmF1dG9fY29ycl9taW5fb2ZkbV9tcmNfeDEgPSAyNDAsCisKKwkuYXV0b19jb3JyX21heF9vZmRtID0gMTIwLAorCS5hdXRvX2NvcnJfbWF4X29mZG1fbXJjID0gMjEwLAorCS5hdXRvX2NvcnJfbWF4X29mZG1feDEgPSAxNTUsCisJLmF1dG9fY29ycl9tYXhfb2ZkbV9tcmNfeDEgPSAyOTAsCisKKwkuYXV0b19jb3JyX21pbl9jY2sgPSAxMjUsCisJLmF1dG9fY29ycl9tYXhfY2NrID0gMjAwLAorCS5hdXRvX2NvcnJfbWluX2Nja19tcmMgPSAxNzAsCisJLmF1dG9fY29ycl9tYXhfY2NrX21yYyA9IDQwMCwKKwkubnJnX3RoX2NjayA9IDk1LAorCS5ucmdfdGhfb2ZkbSA9IDk1LAorCisJLmJhcmtlcl9jb3JyX3RoX21pbiA9IDE5MCwKKwkuYmFya2VyX2NvcnJfdGhfbWluX21yYyA9IDM5MCwKKwkubnJnX3RoX2NjYSA9IDYyLAorfTsKKworc3RhdGljIGludCBpd2wxMDAwX2h3X3NldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWlmIChwcml2LT5jZmctPm1vZF9wYXJhbXMtPm51bV9vZl9xdWV1ZXMgPj0gSVdMX01JTl9OVU1fUVVFVUVTICYmCisJICAgIHByaXYtPmNmZy0+bW9kX3BhcmFtcy0+bnVtX29mX3F1ZXVlcyA8PSBJV0w1MF9OVU1fUVVFVUVTKQorCQlwcml2LT5jZmctPm51bV9vZl9xdWV1ZXMgPQorCQkJcHJpdi0+Y2ZnLT5tb2RfcGFyYW1zLT5udW1fb2ZfcXVldWVzOworCisJcHJpdi0+aHdfcGFyYW1zLm1heF90eHFfbnVtID0gcHJpdi0+Y2ZnLT5udW1fb2ZfcXVldWVzOworCXByaXYtPmh3X3BhcmFtcy5kbWFfY2hubF9udW0gPSBGSDUwX1RDU1JfQ0hOTF9OVU07CisJcHJpdi0+aHdfcGFyYW1zLnNjZF9iY190YmxzX3NpemUgPQorCQkJcHJpdi0+Y2ZnLT5udW1fb2ZfcXVldWVzICoKKwkJCXNpemVvZihzdHJ1Y3QgaXdsNTAwMF9zY2RfYmNfdGJsKTsKKwlwcml2LT5od19wYXJhbXMudGZkX3NpemUgPSBzaXplb2Yoc3RydWN0IGl3bF90ZmQpOworCXByaXYtPmh3X3BhcmFtcy5tYXhfc3RhdGlvbnMgPSBJV0w1MDAwX1NUQVRJT05fQ09VTlQ7CisJcHJpdi0+aHdfcGFyYW1zLmJjYXN0X3N0YV9pZCA9IElXTDUwMDBfQlJPQURDQVNUX0lEOworCisJcHJpdi0+aHdfcGFyYW1zLm1heF9kYXRhX3NpemUgPSBJV0w1MF9SVENfREFUQV9TSVpFOworCXByaXYtPmh3X3BhcmFtcy5tYXhfaW5zdF9zaXplID0gSVdMNTBfUlRDX0lOU1RfU0laRTsKKworCXByaXYtPmh3X3BhcmFtcy5tYXhfYnNtX3NpemUgPSAwOworCXByaXYtPmh3X3BhcmFtcy5odDQwX2NoYW5uZWwgPSAgQklUKElFRUU4MDIxMV9CQU5EXzJHSFopIHwKKwkJCQkJQklUKElFRUU4MDIxMV9CQU5EXzVHSFopOworCXByaXYtPmh3X3BhcmFtcy5yeF93cnRfcHRyX3JlZyA9IEZIX1JTQ1NSX0NITkwwX1dQVFI7CisKKwlwcml2LT5od19wYXJhbXMudHhfY2hhaW5zX251bSA9IG51bV9vZl9hbnQocHJpdi0+Y2ZnLT52YWxpZF90eF9hbnQpOworCXByaXYtPmh3X3BhcmFtcy5yeF9jaGFpbnNfbnVtID0gbnVtX29mX2FudChwcml2LT5jZmctPnZhbGlkX3J4X2FudCk7CisJcHJpdi0+aHdfcGFyYW1zLnZhbGlkX3R4X2FudCA9IHByaXYtPmNmZy0+dmFsaWRfdHhfYW50OworCXByaXYtPmh3X3BhcmFtcy52YWxpZF9yeF9hbnQgPSBwcml2LT5jZmctPnZhbGlkX3J4X2FudDsKKworCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT50ZW1wX29wcy5zZXRfY3Rfa2lsbCkKKwkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+dGVtcF9vcHMuc2V0X2N0X2tpbGwocHJpdik7CisKKwkvKiBTZXQgaW5pdGlhbCBzZW5zaXRpdml0eSBwYXJhbWV0ZXJzICovCisJLyogU2V0IGluaXRpYWwgY2FsaWJyYXRpb24gc2V0ICovCisJcHJpdi0+aHdfcGFyYW1zLnNlbnMgPSAmaXdsMTAwMF9zZW5zaXRpdml0eTsKKwlwcml2LT5od19wYXJhbXMuY2FsaWJfaW5pdF9jZmcgPQorCQkJQklUKElXTF9DQUxJQl9YVEFMKQkJfAorCQkJQklUKElXTF9DQUxJQl9MTykJCXwKKwkJCUJJVChJV0xfQ0FMSUJfVFhfSVEpIAkJfAorCQkJQklUKElXTF9DQUxJQl9UWF9JUV9QRVJEKQl8CisJCQlCSVQoSVdMX0NBTElCX0JBU0VfQkFORCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2wxMDAwX2xpYiA9IHsKLQkuc2V0X2h3X3BhcmFtcyA9IGl3bDUwMDBfaHdfc2V0X2h3X3BhcmFtcywKKwkuc2V0X2h3X3BhcmFtcyA9IGl3bDEwMDBfaHdfc2V0X2h3X3BhcmFtcywKIAkudHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgPSBpd2w1MDAwX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsLAogCS50eHFfaW52YWxfYnl0ZV9jbnRfdGJsID0gaXdsNTAwMF90eHFfaW52YWxfYnl0ZV9jbnRfdGJsLAogCS50eHFfc2V0X3NjaGVkID0gaXdsNTAwMF90eHFfc2V0X3NjaGVkLApAQCAtMTA1LDYgKzE3NSw4IEBACiAJLmxvYWRfdWNvZGUgPSBpd2w1MDAwX2xvYWRfdWNvZGUsCiAJLmR1bXBfbmljX2V2ZW50X2xvZyA9IGl3bF9kdW1wX25pY19ldmVudF9sb2csCiAJLmR1bXBfbmljX2Vycm9yX2xvZyA9IGl3bF9kdW1wX25pY19lcnJvcl9sb2csCisJLmR1bXBfY3NyID0gaXdsX2R1bXBfY3NyLAorCS5kdW1wX2ZoID0gaXdsX2R1bXBfZmgsCiAJLmluaXRfYWxpdmVfc3RhcnQgPSBpd2w1MDAwX2luaXRfYWxpdmVfc3RhcnQsCiAJLmFsaXZlX25vdGlmeSA9IGl3bDUwMDBfYWxpdmVfbm90aWZ5LAogCS5zZW5kX3R4X3Bvd2VyID0gaXdsNTAwMF9zZW5kX3R4X3Bvd2VyLApAQCAtMTM4LDkgKzIxMCwxMCBAQAogCQkudGVtcGVyYXR1cmUgPSBpd2w1MDAwX3RlbXBlcmF0dXJlLAogCQkuc2V0X2N0X2tpbGwgPSBpd2wxMDAwX3NldF9jdF90aHJlc2hvbGQsCiAJIH0sCisJLmFkZF9iY2FzdF9zdGF0aW9uID0gaXdsX2FkZF9iY2FzdF9zdGF0aW9uLAogfTsKIAotc3RhdGljIHN0cnVjdCBpd2xfb3BzIGl3bDEwMDBfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDEwMDBfb3BzID0gewogCS51Y29kZSA9ICZpd2w1MDAwX3Vjb2RlLAogCS5saWIgPSAmaXdsMTAwMF9saWIsCiAJLmhjbWQgPSAmaXdsNTAwMF9oY21kLApAQCAtMTczLDcgKzI0Niw4IEBACiAJLnVzZV9ydHNfZm9yX2h0ID0gdHJ1ZSwgLyogdXNlIHJ0cy9jdHMgcHJvdGVjdGlvbiAqLwogCS5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyA9IElXTF9DQUxfTlVNX0JFQUNPTlMsCiAJLnN1cHBvcnRfY3Rfa2lsbF9leGl0ID0gdHJ1ZSwKLQkuc21fcHNfbW9kZSA9IFdMQU5fSFRfQ0FQX1NNX1BTX0RJU0FCTEVELAorCS5wbGNwX2RlbHRhX3RocmVzaG9sZCA9IElXTF9NQVhfUExDUF9FUlJfRVhUX0xPTkdfVEhSRVNIT0xEX0RFRiwKKwkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxMDAwLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsMTAwMF9iZ19jZmcgPSB7CkBAIC0yMDAsNiArMjc0LDggQEAKIAkubGVkX2NvbXBlbnNhdGlvbiA9IDUxLAogCS5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyA9IElXTF9DQUxfTlVNX0JFQUNPTlMsCiAJLnN1cHBvcnRfY3Rfa2lsbF9leGl0ID0gdHJ1ZSwKKwkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX0VYVF9MT05HX1RIUkVTSE9MRF9ERUYsCisJLmNoYWluX25vaXNlX3NjYWxlID0gMTAwMCwKIH07CiAKIE1PRFVMRV9GSVJNV0FSRShJV0wxMDAwX01PRFVMRV9GSVJNV0FSRShJV0wxMDAwX1VDT0RFX0FQSV9NQVgpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtZmguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtZmguaAppbmRleCAwOGNlMjU5Li4wNDJmNmJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWZoLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1maC5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ody5oCmluZGV4IDZmZDEwZDQuLjNhODc2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWh3LmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuYwppbmRleCBhODcxZDA5Li5hYmUyYjczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtbGVkLmgKaW5kZXggNWExMDMzYy4uY2U5OTBhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1sZWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LWxlZC5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUtcnMuYwppbmRleCBkNGI0OTg4Li40NzkwOWY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LXJzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS1ycy5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuYwppbmRleCAyMzQ4OTFkLi4zMDNjYzgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTQ1LDggKzQ1LDggQEAKICNpbmNsdWRlICJpd2wtc3RhLmgiCiAjaW5jbHVkZSAiaXdsLTM5NDUuaCIKICNpbmNsdWRlICJpd2wtZWVwcm9tLmgiCi0jaW5jbHVkZSAiaXdsLWhlbHBlcnMuaCIKICNpbmNsdWRlICJpd2wtY29yZS5oIgorI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCiAjaW5jbHVkZSAiaXdsLWxlZC5oIgogI2luY2x1ZGUgIml3bC0zOTQ1LWxlZC5oIgogCkBAIC0xOTUxLDExICsxOTUxLDcgQEAKIAl9CiAKIAkvKiBBZGQgdGhlIGJyb2FkY2FzdCBhZGRyZXNzIHNvIHdlIGNhbiBzZW5kIGJyb2FkY2FzdCBmcmFtZXMgKi8KLQlpZiAoaXdsX2FkZF9zdGF0aW9uKHByaXYsIGl3bF9iY2FzdF9hZGRyLCBmYWxzZSwgQ01EX1NZTkMsIE5VTEwpID09Ci0JICAgIElXTF9JTlZBTElEX1NUQVRJT04pIHsKLQkJSVdMX0VSUihwcml2LCAiRXJyb3IgYWRkaW5nIEJST0FEQ0FTVCBhZGRyZXNzIGZvciB0cmFuc21pdC5cbiIpOwotCQlyZXR1cm4gLUVJTzsKLQl9CisJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+YWRkX2JjYXN0X3N0YXRpb24ocHJpdik7CiAKIAkvKiBJZiB3ZSBoYXZlIHNldCB0aGUgQVNTT0NfTVNLIGFuZCB3ZSBhcmUgaW4gQlNTIG1vZGUgdGhlbgogCSAqIGFkZCB0aGUgSVdMX0FQX0lEIHRvIHRoZSBzdGF0aW9uIHJhdGUgdGFibGUgKi8KQEAgLTI0NzQsMTEgKzI0NzAsOSBAQAogCW1lbXNldCgodm9pZCAqKSZwcml2LT5od19wYXJhbXMsIDAsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaXdsX2h3X3BhcmFtcykpOwogCi0JcHJpdi0+c2hhcmVkX3ZpcnQgPQotCSAgICBwY2lfYWxsb2NfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LAotCQkJCSBzaXplb2Yoc3RydWN0IGl3bDM5NDVfc2hhcmVkKSwKLQkJCQkgJnByaXYtPnNoYXJlZF9waHlzKTsKLQorCXByaXYtPnNoYXJlZF92aXJ0ID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwcml2LT5wY2lfZGV2LT5kZXYsCisJCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfc2hhcmVkKSwKKwkJCQkJICAgICAgICZwcml2LT5zaGFyZWRfcGh5cywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwcml2LT5zaGFyZWRfdmlydCkgewogCQlJV0xfRVJSKHByaXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgcGNpIG1lbW9yeVxuIik7CiAJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwpAQCAtMjc5Niw2ICsyNzkwLDcgQEAKIAkucG9zdF9hc3NvY2lhdGUgPSBpd2wzOTQ1X3Bvc3RfYXNzb2NpYXRlLAogCS5pc3IgPSBpd2xfaXNyX2xlZ2FjeSwKIAkuY29uZmlnX2FwID0gaXdsMzk0NV9jb25maWdfYXAsCisJLmFkZF9iY2FzdF9zdGF0aW9uID0gaXdsMzk0NV9hZGRfYmNhc3Rfc3RhdGlvbiwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXdsX2hjbWRfdXRpbHNfb3BzIGl3bDM5NDVfaGNtZF91dGlscyA9IHsKQEAgLTI4MDQsNyArMjc5OSw3IEBACiAJLnJ0c190eF9jbWRfZmxhZyA9IGl3bGNvcmVfcnRzX3R4X2NtZF9mbGFnLAogfTsKIAotc3RhdGljIHN0cnVjdCBpd2xfb3BzIGl3bDM5NDVfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BzIGl3bDM5NDVfb3BzID0gewogCS51Y29kZSA9ICZpd2wzOTQ1X3Vjb2RlLAogCS5saWIgPSAmaXdsMzk0NV9saWIsCiAJLmhjbWQgPSAmaXdsMzk0NV9oY21kLApAQCAtMjgzMCw2ICsyODI1LDcgQEAKIAkuaHRfZ3JlZW5maWVsZF9zdXBwb3J0ID0gZmFsc2UsCiAJLmxlZF9jb21wZW5zYXRpb24gPSA2NCwKIAkuYnJva2VuX3Bvd2Vyc2F2ZSA9IHRydWUsCisJLnBsY3BfZGVsdGFfdGhyZXNob2xkID0gSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfREVGLAogfTsKIAogc3RhdGljIHN0cnVjdCBpd2xfY2ZnIGl3bDM5NDVfYWJnX2NmZyA9IHsKQEAgLTI4NDcsOSArMjg0MywxMCBAQAogCS5odF9ncmVlbmZpZWxkX3N1cHBvcnQgPSBmYWxzZSwKIAkubGVkX2NvbXBlbnNhdGlvbiA9IDY0LAogCS5icm9rZW5fcG93ZXJzYXZlID0gdHJ1ZSwKKwkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9ERUYsCiB9OwogCi1zdHJ1Y3QgcGNpX2RldmljZV9pZCBpd2wzOTQ1X2h3X2NhcmRfaWRzW10gPSB7CitERUZJTkVfUENJX0RFVklDRV9UQUJMRShpd2wzOTQ1X2h3X2NhcmRfaWRzKSA9IHsKIAl7SVdMX1BDSV9ERVZJQ0UoMHg0MjIyLCAweDEwMDUsIGl3bDM5NDVfYmdfY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4NDIyMiwgMHgxMDM0LCBpd2wzOTQ1X2JnX2NmZyl9LAogCXtJV0xfUENJX0RFVklDRSgweDQyMjIsIDB4MTA0NCwgaXdsMzk0NV9iZ19jZmcpfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTM5NDUuaAppbmRleCA1MzFmYTEyLi40NTJkZmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC0zOTQ1LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtMzk0NS5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlIDxuZXQvaWVlZTgwMjExX3JhZGlvdGFwLmg+CiAKIC8qIEhhcmR3YXJlIHNwZWNpZmljIGZpbGUgZGVmaW5lcyB0aGUgUENJIElEcyB0YWJsZSBmb3IgdGhhdCBoYXJkd2FyZSBtb2R1bGUgKi8KLWV4dGVybiBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpd2wzOTQ1X2h3X2NhcmRfaWRzW107CitleHRlcm4gY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgaXdsMzk0NV9od19jYXJkX2lkc1tdOwogCiAjaW5jbHVkZSAiaXdsLWNzci5oIgogI2luY2x1ZGUgIml3bC1wcnBoLmgiCkBAIC0xNzEsMjQgKzE3MSw2IEBACiAKICNkZWZpbmUgU0NBTl9JTlRFUlZBTCAxMDAKIAotI2RlZmluZSBTVEFUVVNfSENNRF9BQ1RJVkUJMAkvKiBob3N0IGNvbW1hbmQgaW4gcHJvZ3Jlc3MgKi8KLSNkZWZpbmUgU1RBVFVTX0hDTURfU1lOQ19BQ1RJVkUJMQkvKiBzeW5jIGhvc3QgY29tbWFuZCBpbiBwcm9ncmVzcyAqLwotI2RlZmluZSBTVEFUVVNfSU5UX0VOQUJMRUQJMgotI2RlZmluZSBTVEFUVVNfUkZfS0lMTF9IVwkzCi0jZGVmaW5lIFNUQVRVU19JTklUCQk1Ci0jZGVmaW5lIFNUQVRVU19BTElWRQkJNgotI2RlZmluZSBTVEFUVVNfUkVBRFkJCTcKLSNkZWZpbmUgU1RBVFVTX1RFTVBFUkFUVVJFCTgKLSNkZWZpbmUgU1RBVFVTX0dFT19DT05GSUdVUkVECTkKLSNkZWZpbmUgU1RBVFVTX0VYSVRfUEVORElORwkxMAotI2RlZmluZSBTVEFUVVNfU1RBVElTVElDUwkxMgotI2RlZmluZSBTVEFUVVNfU0NBTk5JTkcJCTEzCi0jZGVmaW5lIFNUQVRVU19TQ0FOX0FCT1JUSU5HCTE0Ci0jZGVmaW5lIFNUQVRVU19TQ0FOX0hXCQkxNQotI2RlZmluZSBTVEFUVVNfUE9XRVJfUE1JCTE2Ci0jZGVmaW5lIFNUQVRVU19GV19FUlJPUgkJMTcKLSNkZWZpbmUgU1RBVFVTX0NPTkZfUEVORElORwkxOAotCiAjZGVmaW5lIE1BWF9USURfQ09VTlQgICAgICAgIDkKIAogI2RlZmluZSBJV0xfSU5WQUxJRF9SQVRFICAgICAweEZGCkBAIC0yMjYsNyArMjA4LDggQEAKIGV4dGVybiB2b2lkIGl3bDM5NDVfcnhfcXVldWVfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBpd2wzOTQ1X2ZpbGxfYmVhY29uX2ZyYW1lKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkcixpbnQgbGVmdCk7Ci1leHRlcm4gdm9pZCBpd2wzOTQ1X2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGJvb2wgZnVsbF9sb2cpOworZXh0ZXJuIGludCBpd2wzOTQ1X2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGJvb2wgZnVsbF9sb2csCisJCQkJICAgICAgIGNoYXIgKipidWYsIGJvb2wgZGlzcGxheSk7CiBleHRlcm4gdm9pZCBpd2wzOTQ1X2R1bXBfbmljX2Vycm9yX2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ody5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS1ody5oCmluZGV4IGM2MDYzNjYuLjY3ZWY1NjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUtaHcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LWh3LmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC00OTY1LmMKaW5kZXggMzE0NjI4MS4uMWJkMmNkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNDk2NS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTQ5NjUuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC01ODEsNiArNTgxLDEzIEBACiAKIAlpd2w0OTY1X3NldF93cl9wdHJzKHByaXYsIElXTF9DTURfUVVFVUVfTlVNLCAwKTsKIAorCS8qIG1ha2Ugc3VyZSBhbGwgcXVldWUgYXJlIG5vdCBzdG9wcGVkICovCisJbWVtc2V0KCZwcml2LT5xdWV1ZV9zdG9wcGVkWzBdLCAwLCBzaXplb2YocHJpdi0+cXVldWVfc3RvcHBlZCkpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWF0b21pY19zZXQoJnByaXYtPnF1ZXVlX3N0b3BfY291bnRbaV0sIDApOworCisJLyogcmVzZXQgdG8gMCB0byBlbmFibGUgYWxsIHRoZSBxdWV1ZSBmaXJzdCAqLworCXByaXYtPnR4cV9jdHhfYWN0aXZlX21zayA9IDA7CiAJLyogTWFwIGVhY2ggVHgvY21kIHF1ZXVlIHRvIGl0cyBjb3JyZXNwb25kaW5nIGZpZm8gKi8KIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZWZhdWx0X3F1ZXVlX3RvX3R4X2ZpZm8pOyBpKyspIHsKIAkJaW50IGFjID0gZGVmYXVsdF9xdWV1ZV90b190eF9maWZvW2ldOwpAQCAtMjIwNiw5ICsyMjEzLDEwIEBACiAJCS50ZW1wZXJhdHVyZSA9IGl3bDQ5NjVfdGVtcGVyYXR1cmVfY2FsaWIsCiAJCS5zZXRfY3Rfa2lsbCA9IGl3bDQ5NjVfc2V0X2N0X3RocmVzaG9sZCwKIAl9LAorCS5hZGRfYmNhc3Rfc3RhdGlvbiA9IGl3bF9hZGRfYmNhc3Rfc3RhdGlvbiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsX29wcyBpd2w0OTY1X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wcyBpd2w0OTY1X29wcyA9IHsKIAkudWNvZGUgPSAmaXdsNDk2NV91Y29kZSwKIAkubGliID0gJml3bDQ5NjVfbGliLAogCS5oY21kID0gJml3bDQ5NjVfaGNtZCwKQEAgLTIyMzksNyArMjI0Nyw3IEBACiAJLmJyb2tlbl9wb3dlcnNhdmUgPSB0cnVlLAogCS5sZWRfY29tcGVuc2F0aW9uID0gNjEsCiAJLmNoYWluX25vaXNlX251bV9iZWFjb25zID0gSVdMNDk2NV9DQUxfTlVNX0JFQUNPTlMsCi0JLnNtX3BzX21vZGUgPSBXTEFOX0hUX0NBUF9TTV9QU19ESVNBQkxFRCwKKwkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9ERUYsCiB9OwogCiAvKiBNb2R1bGUgZmlybXdhcmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAtaHcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAtaHcuaAppbmRleCBiYzA1NmU5Li43MTRlMDMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLWh3LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC1ody5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNTAwMC5jCmluZGV4IGNmZmFhZTcuLmU0NzZhY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTUwMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC01MDAwLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMTc5LDE0ICsxNzksMjQgQEAKIAkJCWRhdGEtPmRlbHRhX2dhaW5fY29kZVtpXSA9IDA7CiAJCQljb250aW51ZTsKIAkJfQotCQlkZWx0YV9nID0gKDEwMDAgKiAoKHMzMilhdmVyYWdlX25vaXNlW2RlZmF1bHRfY2hhaW5dIC0KKworCQlkZWx0YV9nID0gKHByaXYtPmNmZy0+Y2hhaW5fbm9pc2Vfc2NhbGUgKgorCQkJKChzMzIpYXZlcmFnZV9ub2lzZVtkZWZhdWx0X2NoYWluXSAtCiAJCQkoczMyKWF2ZXJhZ2Vfbm9pc2VbaV0pKSAvIDE1MDA7CisKIAkJLyogYm91bmQgZ2FpbiBieSAyIGJpdHMgdmFsdWUgbWF4LCAzcmQgYml0IGlzIHNpZ24gKi8KIAkJZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlW2ldID0KIAkJCW1pbihhYnMoZGVsdGFfZyksIChsb25nKSBDSEFJTl9OT0lTRV9NQVhfREVMVEFfR0FJTl9DT0RFKTsKIAogCQlpZiAoZGVsdGFfZyA8IDApCi0JCQkvKiBzZXQgbmVnYXRpdmUgc2lnbiAqLworCQkJLyoKKwkJCSAqIHNldCBuZWdhdGl2ZSBzaWduIC4uLgorCQkJICogbm90ZSB0byBJbnRlbCBkZXZlbG9wZXJzOiAgVGhpcyBpcyB1Q29kZSBBUEkgZm9ybWF0LAorCQkJICogICBub3QgdGhlIGZvcm1hdCBvZiBhbnkgaW50ZXJuYWwgZGV2aWNlIHJlZ2lzdGVycy4KKwkJCSAqICAgRG8gbm90IGNoYW5nZSB0aGlzIGZvcm1hdCBmb3IgZS5nLiA2MDUwIG9yIHNpbWlsYXIKKwkJCSAqICAgZGV2aWNlcy4gIENoYW5nZSBmb3JtYXQgb25seSBpZiBtb3JlIHJlc29sdXRpb24KKwkJCSAqICAgKGkuZS4gbW9yZSB0aGFuIDIgYml0cyBtYWduaXR1ZGUpIGlzIG5lZWRlZC4KKwkJCSAqLwogCQkJZGF0YS0+ZGVsdGFfZ2Fpbl9jb2RlW2ldIHw9ICgxIDw8IDIpOwogCX0KIApAQCAtMjYzLDggKzI3Myw4IEBACiAKIAkuYXV0b19jb3JyX21heF9vZmRtID0gMTIwLAogCS5hdXRvX2NvcnJfbWF4X29mZG1fbXJjID0gMjEwLAotCS5hdXRvX2NvcnJfbWF4X29mZG1feDEgPSAxNTUsCi0JLmF1dG9fY29ycl9tYXhfb2ZkbV9tcmNfeDEgPSAyOTAsCisJLmF1dG9fY29ycl9tYXhfb2ZkbV94MSA9IDEyMCwKKwkuYXV0b19jb3JyX21heF9vZmRtX21yY194MSA9IDI0MCwKIAogCS5hdXRvX2NvcnJfbWluX2NjayA9IDEyNSwKIAkuYXV0b19jb3JyX21heF9jY2sgPSAyMDAsCkBAIC00MTIsMTIgKzQyMiwxNCBAQAogLyoKICAqIHVjb2RlCiAgKi8KLXN0YXRpYyBpbnQgaXdsNTAwMF9sb2FkX3NlY3Rpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJCXN0cnVjdCBmd19kZXNjICppbWFnZSwKLQkJCQl1MzIgZHN0X2FkZHIpCitzdGF0aWMgaW50IGl3bDUwMDBfbG9hZF9zZWN0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQlzdHJ1Y3QgZndfZGVzYyAqaW1hZ2UsIHUzMiBkc3RfYWRkcikKIHsKIAlkbWFfYWRkcl90IHBoeV9hZGRyID0gaW1hZ2UtPnBfYWRkcjsKIAl1MzIgYnl0ZV9jbnQgPSBpbWFnZS0+bGVuOworCWludCByZXQ7CisKKwlwcml2LT51Y29kZV93cml0ZV9jb21wbGV0ZSA9IDA7CiAKIAlpd2xfd3JpdGVfZGlyZWN0MzIocHJpdiwKIAkJRkhfVENTUl9DSE5MX1RYX0NPTkZJR19SRUcoRkhfU1JWQ19DSE5MKSwKQEAgLTQ0Nyw2ICs0NTksMjAgQEAKIAkJRkhfVENTUl9UWF9DT05GSUdfUkVHX1ZBTF9ETUFfQ1JFRElUX0RJU0FCTEUJfAogCQlGSF9UQ1NSX1RYX0NPTkZJR19SRUdfVkFMX0NJUlFfSE9TVF9FTkRURkQpOwogCisJSVdMX0RFQlVHX0lORk8ocHJpdiwgIiVzIHVDb2RlIHNlY3Rpb24gYmVpbmcgbG9hZGVkLi4uXG4iLCBuYW1lKTsKKwlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwcml2LT53YWl0X2NvbW1hbmRfcXVldWUsCisJCQkJCXByaXYtPnVjb2RlX3dyaXRlX2NvbXBsZXRlLCA1ICogSFopOworCWlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKSB7CisJCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBsb2FkIHRoZSAlcyB1Q29kZSBzZWN0aW9uIGR1ZSAiCisJCQkidG8gaW50ZXJydXB0XG4iLCBuYW1lKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJaWYgKCFyZXQpIHsKKwkJSVdMX0VSUihwcml2LCAiQ291bGQgbm90IGxvYWQgdGhlICVzIHVDb2RlIHNlY3Rpb25cbiIsCisJCQluYW1lKTsKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ1Niw0OCArNDgyLDEzIEBACiB7CiAJaW50IHJldCA9IDA7CiAKLQlyZXQgPSBpd2w1MDAwX2xvYWRfc2VjdGlvbihwcml2LCBpbnN0X2ltYWdlLAorCXJldCA9IGl3bDUwMDBfbG9hZF9zZWN0aW9uKHByaXYsICJJTlNUIiwgaW5zdF9pbWFnZSwKIAkJCQkgICBJV0w1MF9SVENfSU5TVF9MT1dFUl9CT1VORCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCUlXTF9ERUJVR19JTkZPKHByaXYsICJJTlNUIHVDb2RlIHNlY3Rpb24gYmVpbmcgbG9hZGVkLi4uXG4iKTsKLQlyZXQgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChwcml2LT53YWl0X2NvbW1hbmRfcXVldWUsCi0JCQkJCXByaXYtPnVjb2RlX3dyaXRlX2NvbXBsZXRlLCA1ICogSFopOwotCWlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKSB7Ci0JCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBsb2FkIHRoZSBJTlNUIHVDb2RlIHNlY3Rpb24gZHVlICIKLQkJCSJ0byBpbnRlcnJ1cHRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0KLQlpZiAoIXJldCkgewotCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3QgbG9hZCB0aGUgSU5TVCB1Q29kZSBzZWN0aW9uXG4iKTsKLQkJcmV0dXJuIC1FVElNRURPVVQ7Ci0JfQotCi0JcHJpdi0+dWNvZGVfd3JpdGVfY29tcGxldGUgPSAwOwotCi0JcmV0ID0gaXdsNTAwMF9sb2FkX3NlY3Rpb24oCi0JCXByaXYsIGRhdGFfaW1hZ2UsIElXTDUwX1JUQ19EQVRBX0xPV0VSX0JPVU5EKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JSVdMX0RFQlVHX0lORk8ocHJpdiwgIkRBVEEgdUNvZGUgc2VjdGlvbiBiZWluZyBsb2FkZWQuLi5cbiIpOwotCi0JcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQocHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlLAotCQkJCXByaXYtPnVjb2RlX3dyaXRlX2NvbXBsZXRlLCA1ICogSFopOwotCWlmIChyZXQgPT0gLUVSRVNUQVJUU1lTKSB7Ci0JCUlXTF9FUlIocHJpdiwgIkNvdWxkIG5vdCBsb2FkIHRoZSBJTlNUIHVDb2RlIHNlY3Rpb24gZHVlICIKLQkJCSJ0byBpbnRlcnJ1cHRcbiIpOwotCQlyZXR1cm4gcmV0OwotCX0gZWxzZSBpZiAoIXJldCkgewotCQlJV0xfRVJSKHByaXYsICJDb3VsZCBub3QgbG9hZCB0aGUgREFUQSB1Q29kZSBzZWN0aW9uXG4iKTsKLQkJcmV0dXJuIC1FVElNRURPVVQ7Ci0JfSBlbHNlCi0JCXJldCA9IDA7Ci0KLQlwcml2LT51Y29kZV93cml0ZV9jb21wbGV0ZSA9IDA7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBpd2w1MDAwX2xvYWRfc2VjdGlvbihwcml2LCAiREFUQSIsIGRhdGFfaW1hZ2UsCisJCQkJICAgIElXTDUwX1JUQ19EQVRBX0xPV0VSX0JPVU5EKTsKIH0KIAogaW50IGl3bDUwMDBfbG9hZF91Y29kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCkBAIC02NTcsNiArNjQ4LDEzIEBACiAKIAlpd2w1MDAwX3NldF93cl9wdHJzKHByaXYsIElXTF9DTURfUVVFVUVfTlVNLCAwKTsKIAorCS8qIG1ha2Ugc3VyZSBhbGwgcXVldWUgYXJlIG5vdCBzdG9wcGVkICovCisJbWVtc2V0KCZwcml2LT5xdWV1ZV9zdG9wcGVkWzBdLCAwLCBzaXplb2YocHJpdi0+cXVldWVfc3RvcHBlZCkpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWF0b21pY19zZXQoJnByaXYtPnF1ZXVlX3N0b3BfY291bnRbaV0sIDApOworCisJLyogcmVzZXQgdG8gMCB0byBlbmFibGUgYWxsIHRoZSBxdWV1ZSBmaXJzdCAqLworCXByaXYtPnR4cV9jdHhfYWN0aXZlX21zayA9IDA7CiAJLyogbWFwIHFvcyBxdWV1ZXMgdG8gZmlmb3Mgb25lLXRvLW9uZSAqLwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGl3bDUwMDBfZGVmYXVsdF9xdWV1ZV90b190eF9maWZvKTsgaSsrKSB7CiAJCWludCBhYyA9IGl3bDUwMDBfZGVmYXVsdF9xdWV1ZV90b190eF9maWZvW2ldOwpAQCAtNzgxLDcgKzc3OSw3IEBACiAKIAlzY2RfYmNfdGJsW3R4cV9pZF0udGZkX29mZnNldFt3cml0ZV9wdHJdID0gYmNfZW50OwogCi0JaWYgKHR4cS0+cS53cml0ZV9wdHIgPCBURkRfUVVFVUVfU0laRV9CQ19EVVApCisJaWYgKHdyaXRlX3B0ciA8IFRGRF9RVUVVRV9TSVpFX0JDX0RVUCkKIAkJc2NkX2JjX3RibFt0eHFfaWRdLgogCQkJdGZkX29mZnNldFtURkRfUVVFVUVfU0laRV9NQVggKyB3cml0ZV9wdHJdID0gYmNfZW50OwogfQpAQCAtODAwLDEyICs3OTgsMTIgQEAKIAlpZiAodHhxX2lkICE9IElXTF9DTURfUVVFVUVfTlVNKQogCQlzdGFfaWQgPSB0eHEtPmNtZFtyZWFkX3B0cl0tPmNtZC50eC5zdGFfaWQ7CiAKLQliY19lbnQgPSAgY3B1X3RvX2xlMTYoMSB8IChzdGFfaWQgPDwgMTIpKTsKKwliY19lbnQgPSBjcHVfdG9fbGUxNigxIHwgKHN0YV9pZCA8PCAxMikpOwogCXNjZF9iY190YmxbdHhxX2lkXS50ZmRfb2Zmc2V0W3JlYWRfcHRyXSA9IGJjX2VudDsKIAotCWlmICh0eHEtPnEud3JpdGVfcHRyIDwgVEZEX1FVRVVFX1NJWkVfQkNfRFVQKQorCWlmIChyZWFkX3B0ciA8IFRGRF9RVUVVRV9TSVpFX0JDX0RVUCkKIAkJc2NkX2JjX3RibFt0eHFfaWRdLgotCQkJdGZkX29mZnNldFtURkRfUVVFVUVfU0laRV9NQVggKyByZWFkX3B0cl0gPSAgYmNfZW50OworCQkJdGZkX29mZnNldFtURkRfUVVFVUVfU0laRV9NQVggKyByZWFkX3B0cl0gPSBiY19lbnQ7CiB9CiAKIHN0YXRpYyBpbnQgaXdsNTAwMF90eF9xdWV1ZV9zZXRfcTJyYXRpZChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiByYV90aWQsCkBAIC0xNDY0LDYgKzE0NjIsOCBAQAogCS5pc192YWxpZF9ydGNfZGF0YV9hZGRyID0gaXdsNTAwMF9od192YWxpZF9ydGNfZGF0YV9hZGRyLAogCS5kdW1wX25pY19ldmVudF9sb2cgPSBpd2xfZHVtcF9uaWNfZXZlbnRfbG9nLAogCS5kdW1wX25pY19lcnJvcl9sb2cgPSBpd2xfZHVtcF9uaWNfZXJyb3JfbG9nLAorCS5kdW1wX2NzciA9IGl3bF9kdW1wX2NzciwKKwkuZHVtcF9maCA9IGl3bF9kdW1wX2ZoLAogCS5sb2FkX3Vjb2RlID0gaXdsNTAwMF9sb2FkX3Vjb2RlLAogCS5pbml0X2FsaXZlX3N0YXJ0ID0gaXdsNTAwMF9pbml0X2FsaXZlX3N0YXJ0LAogCS5hbGl2ZV9ub3RpZnkgPSBpd2w1MDAwX2FsaXZlX25vdGlmeSwKQEAgLTE0OTksNiArMTQ5OSw3IEBACiAJCS50ZW1wZXJhdHVyZSA9IGl3bDUwMDBfdGVtcGVyYXR1cmUsCiAJCS5zZXRfY3Rfa2lsbCA9IGl3bDUwMDBfc2V0X2N0X3RocmVzaG9sZCwKIAkgfSwKKwkuYWRkX2JjYXN0X3N0YXRpb24gPSBpd2xfYWRkX2JjYXN0X3N0YXRpb24sCiB9OwogCiBzdGF0aWMgc3RydWN0IGl3bF9saWJfb3BzIGl3bDUxNTBfbGliID0gewpAQCAtMTUxNiw2ICsxNTE3LDcgQEAKIAkuaXNfdmFsaWRfcnRjX2RhdGFfYWRkciA9IGl3bDUwMDBfaHdfdmFsaWRfcnRjX2RhdGFfYWRkciwKIAkuZHVtcF9uaWNfZXZlbnRfbG9nID0gaXdsX2R1bXBfbmljX2V2ZW50X2xvZywKIAkuZHVtcF9uaWNfZXJyb3JfbG9nID0gaXdsX2R1bXBfbmljX2Vycm9yX2xvZywKKwkuZHVtcF9jc3IgPSBpd2xfZHVtcF9jc3IsCiAJLmxvYWRfdWNvZGUgPSBpd2w1MDAwX2xvYWRfdWNvZGUsCiAJLmluaXRfYWxpdmVfc3RhcnQgPSBpd2w1MDAwX2luaXRfYWxpdmVfc3RhcnQsCiAJLmFsaXZlX25vdGlmeSA9IGl3bDUwMDBfYWxpdmVfbm90aWZ5LApAQCAtMTU1MSw5ICsxNTUzLDEwIEBACiAJCS50ZW1wZXJhdHVyZSA9IGl3bDUxNTBfdGVtcGVyYXR1cmUsCiAJCS5zZXRfY3Rfa2lsbCA9IGl3bDUxNTBfc2V0X2N0X3RocmVzaG9sZCwKIAkgfSwKKwkuYWRkX2JjYXN0X3N0YXRpb24gPSBpd2xfYWRkX2JjYXN0X3N0YXRpb24sCiB9OwogCi1zdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNTAwMF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcHMgaXdsNTAwMF9vcHMgPSB7CiAJLnVjb2RlID0gJml3bDUwMDBfdWNvZGUsCiAJLmxpYiA9ICZpd2w1MDAwX2xpYiwKIAkuaGNtZCA9ICZpd2w1MDAwX2hjbWQsCkBAIC0xNTYxLDcgKzE1NjQsNyBAQAogCS5sZWQgPSAmaXdsYWduX2xlZF9vcHMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNTE1MF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcHMgaXdsNTE1MF9vcHMgPSB7CiAJLnVjb2RlID0gJml3bDUwMDBfdWNvZGUsCiAJLmxpYiA9ICZpd2w1MTUwX2xpYiwKIAkuaGNtZCA9ICZpd2w1MDAwX2hjbWQsCkBAIC0xNTk4LDcgKzE2MDEsOCBAQAogCS5sZWRfY29tcGVuc2F0aW9uID0gNTEsCiAJLnVzZV9ydHNfZm9yX2h0ID0gdHJ1ZSwgLyogdXNlIHJ0cy9jdHMgcHJvdGVjdGlvbiAqLwogCS5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyA9IElXTF9DQUxfTlVNX0JFQUNPTlMsCi0JLnNtX3BzX21vZGUgPSBXTEFOX0hUX0NBUF9TTV9QU19ESVNBQkxFRCwKKwkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX0xPTkdfVEhSRVNIT0xEX0RFRiwKKwkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxMDAwLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNTEwMF9iZ25fY2ZnID0gewpAQCAtMTYyMyw2ICsxNjI3LDggQEAKIAkubGVkX2NvbXBlbnNhdGlvbiA9IDUxLAogCS51c2VfcnRzX2Zvcl9odCA9IHRydWUsIC8qIHVzZSBydHMvY3RzIHByb3RlY3Rpb24gKi8KIAkuY2hhaW5fbm9pc2VfbnVtX2JlYWNvbnMgPSBJV0xfQ0FMX05VTV9CRUFDT05TLAorCS5wbGNwX2RlbHRhX3RocmVzaG9sZCA9IElXTF9NQVhfUExDUF9FUlJfTE9OR19USFJFU0hPTERfREVGLAorCS5jaGFpbl9ub2lzZV9zY2FsZSA9IDEwMDAsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2FiZ19jZmcgPSB7CkBAIC0xNjQ1LDYgKzE2NTEsOCBAQAogCS51c2VfYnNtID0gZmFsc2UsCiAJLmxlZF9jb21wZW5zYXRpb24gPSA1MSwKIAkuY2hhaW5fbm9pc2VfbnVtX2JlYWNvbnMgPSBJV0xfQ0FMX05VTV9CRUFDT05TLAorCS5wbGNwX2RlbHRhX3RocmVzaG9sZCA9IElXTF9NQVhfUExDUF9FUlJfTE9OR19USFJFU0hPTERfREVGLAorCS5jaGFpbl9ub2lzZV9zY2FsZSA9IDEwMDAsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTAwX2Fnbl9jZmcgPSB7CkBAIC0xNjY5LDcgKzE2NzcsOCBAQAogCS5sZWRfY29tcGVuc2F0aW9uID0gNTEsCiAJLnVzZV9ydHNfZm9yX2h0ID0gdHJ1ZSwgLyogdXNlIHJ0cy9jdHMgcHJvdGVjdGlvbiAqLwogCS5jaGFpbl9ub2lzZV9udW1fYmVhY29ucyA9IElXTF9DQUxfTlVNX0JFQUNPTlMsCi0JLnNtX3BzX21vZGUgPSBXTEFOX0hUX0NBUF9TTV9QU19ESVNBQkxFRCwKKwkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX0xPTkdfVEhSRVNIT0xEX0RFRiwKKwkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxMDAwLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNTM1MF9hZ25fY2ZnID0gewpAQCAtMTY5NCw3ICsxNzAzLDggQEAKIAkubGVkX2NvbXBlbnNhdGlvbiA9IDUxLAogCS51c2VfcnRzX2Zvcl9odCA9IHRydWUsIC8qIHVzZSBydHMvY3RzIHByb3RlY3Rpb24gKi8KIAkuY2hhaW5fbm9pc2VfbnVtX2JlYWNvbnMgPSBJV0xfQ0FMX05VTV9CRUFDT05TLAotCS5zbV9wc19tb2RlID0gV0xBTl9IVF9DQVBfU01fUFNfRElTQUJMRUQsCisJLnBsY3BfZGVsdGFfdGhyZXNob2xkID0gSVdMX01BWF9QTENQX0VSUl9MT05HX1RIUkVTSE9MRF9ERUYsCisJLmNoYWluX25vaXNlX3NjYWxlID0gMTAwMCwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDUxNTBfYWduX2NmZyA9IHsKQEAgLTE3MTksNyArMTcyOSw4IEBACiAJLmxlZF9jb21wZW5zYXRpb24gPSA1MSwKIAkudXNlX3J0c19mb3JfaHQgPSB0cnVlLCAvKiB1c2UgcnRzL2N0cyBwcm90ZWN0aW9uICovCiAJLmNoYWluX25vaXNlX251bV9iZWFjb25zID0gSVdMX0NBTF9OVU1fQkVBQ09OUywKLQkuc21fcHNfbW9kZSA9IFdMQU5fSFRfQ0FQX1NNX1BTX0RJU0FCTEVELAorCS5wbGNwX2RlbHRhX3RocmVzaG9sZCA9IElXTF9NQVhfUExDUF9FUlJfTE9OR19USFJFU0hPTERfREVGLAorCS5jaGFpbl9ub2lzZV9zY2FsZSA9IDEwMDAsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w1MTUwX2FiZ19jZmcgPSB7CkBAIC0xNzQyLDYgKzE3NTMsOCBAQAogCS51c2VfYnNtID0gZmFsc2UsCiAJLmxlZF9jb21wZW5zYXRpb24gPSA1MSwKIAkuY2hhaW5fbm9pc2VfbnVtX2JlYWNvbnMgPSBJV0xfQ0FMX05VTV9CRUFDT05TLAorCS5wbGNwX2RlbHRhX3RocmVzaG9sZCA9IElXTF9NQVhfUExDUF9FUlJfTE9OR19USFJFU0hPTERfREVGLAorCS5jaGFpbl9ub2lzZV9zY2FsZSA9IDEwMDAsCiB9OwogCiBNT0RVTEVfRklSTVdBUkUoSVdMNTAwMF9NT0RVTEVfRklSTVdBUkUoSVdMNTAwMF9VQ09ERV9BUElfTUFYKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLWh3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLWh3LmgKaW5kZXggOTAxODU3Ny4uZGRiYTM5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC1ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAtaHcuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLTYwMDAuYwppbmRleCA3NGU1NzEwLi5jNDg0NGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC02MDAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtNjAwMC5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDA4LTIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwOCAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC03MCw2ICs3MCwxNCBAQAogCXByaXYtPmh3X3BhcmFtcy5jdF9raWxsX2V4aXRfdGhyZXNob2xkID0gQ1RfS0lMTF9FWElUX1RIUkVTSE9MRDsKIH0KIAorLyogSW5kaWNhdGUgY2FsaWJyYXRpb24gdmVyc2lvbiB0byB1Q29kZS4gKi8KK3N0YXRpYyB2b2lkIGl3bDYwNTBfc2V0X2NhbGliX3ZlcnNpb24oc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5lZXByb21fb3BzLmNhbGliX3ZlcnNpb24ocHJpdikgPj0gNikKKwkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dQX0RSSVZFUl9SRUcsCisJCQkJQ1NSX0dQX0RSSVZFUl9SRUdfQklUX0NBTElCX1ZFUlNJT042KTsKK30KKwogLyogTklDIGNvbmZpZ3VyYXRpb24gZm9yIDYwMDAgc2VyaWVzICovCiBzdGF0aWMgdm9pZCBpd2w2MDAwX25pY19jb25maWcoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewpAQCAtOTYsNiArMTA0LDggQEAKIAkJCSAgICAgQ1NSX0dQX0RSSVZFUl9SRUdfQklUX1JBRElPX1NLVV8yeDJfSVBBKTsKIAl9CiAJLyogZWxzZSBkbyBub3RoaW5nLCB1Q29kZSBjb25maWd1cmVkICovCisJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPnRlbXBfb3BzLnNldF9jYWxpYl92ZXJzaW9uKQorCQlwcml2LT5jZmctPm9wcy0+bGliLT50ZW1wX29wcy5zZXRfY2FsaWJfdmVyc2lvbihwcml2KTsKIH0KIAogc3RhdGljIHN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfcmFuZ2VzIGl3bDYwMDBfc2Vuc2l0aXZpdHkgPSB7CkBAIC0xMDgsNyArMTE4LDcgQEAKIAogCS5hdXRvX2NvcnJfbWF4X29mZG0gPSAxNDUsCiAJLmF1dG9fY29ycl9tYXhfb2ZkbV9tcmMgPSAyMzIsCi0JLmF1dG9fY29ycl9tYXhfb2ZkbV94MSA9IDE0NSwKKwkuYXV0b19jb3JyX21heF9vZmRtX3gxID0gMTEwLAogCS5hdXRvX2NvcnJfbWF4X29mZG1fbXJjX3gxID0gMjMyLAogCiAJLmF1dG9fY29ycl9taW5fY2NrID0gMTI1LApAQCAtMTU4LDExICsxNjgsMjUgQEAKIAkvKiBTZXQgaW5pdGlhbCBzZW5zaXRpdml0eSBwYXJhbWV0ZXJzICovCiAJLyogU2V0IGluaXRpYWwgY2FsaWJyYXRpb24gc2V0ICovCiAJcHJpdi0+aHdfcGFyYW1zLnNlbnMgPSAmaXdsNjAwMF9zZW5zaXRpdml0eTsKLQlwcml2LT5od19wYXJhbXMuY2FsaWJfaW5pdF9jZmcgPQorCXN3aXRjaCAocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgeworCWNhc2UgQ1NSX0hXX1JFVl9UWVBFXzZ4NTA6CisJCXByaXYtPmh3X3BhcmFtcy5jYWxpYl9pbml0X2NmZyA9CisJCQlCSVQoSVdMX0NBTElCX1hUQUwpCQl8CisJCQlCSVQoSVdMX0NBTElCX0RDKQkJfAorCQkJQklUKElXTF9DQUxJQl9MTykJCXwKKwkJCUJJVChJV0xfQ0FMSUJfVFhfSVEpIAkJfAorCQkJQklUKElXTF9DQUxJQl9CQVNFX0JBTkQpOworCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaXYtPmh3X3BhcmFtcy5jYWxpYl9pbml0X2NmZyA9CiAJCQlCSVQoSVdMX0NBTElCX1hUQUwpCQl8CiAJCQlCSVQoSVdMX0NBTElCX0xPKQkJfAogCQkJQklUKElXTF9DQUxJQl9UWF9JUSkgCQl8CiAJCQlCSVQoSVdMX0NBTElCX0JBU0VfQkFORCk7CisJCWJyZWFrOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0yMTUsNiArMjM5LDggQEAKIAkubG9hZF91Y29kZSA9IGl3bDUwMDBfbG9hZF91Y29kZSwKIAkuZHVtcF9uaWNfZXZlbnRfbG9nID0gaXdsX2R1bXBfbmljX2V2ZW50X2xvZywKIAkuZHVtcF9uaWNfZXJyb3JfbG9nID0gaXdsX2R1bXBfbmljX2Vycm9yX2xvZywKKwkuZHVtcF9jc3IgPSBpd2xfZHVtcF9jc3IsCisJLmR1bXBfZmggPSBpd2xfZHVtcF9maCwKIAkuaW5pdF9hbGl2ZV9zdGFydCA9IGl3bDUwMDBfaW5pdF9hbGl2ZV9zdGFydCwKIAkuYWxpdmVfbm90aWZ5ID0gaXdsNTAwMF9hbGl2ZV9ub3RpZnksCiAJLnNlbmRfdHhfcG93ZXIgPSBpd2w1MDAwX3NlbmRfdHhfcG93ZXIsCkBAIC0yNTAsOSArMjc2LDEwIEBACiAJCS50ZW1wZXJhdHVyZSA9IGl3bDUwMDBfdGVtcGVyYXR1cmUsCiAJCS5zZXRfY3Rfa2lsbCA9IGl3bDYwMDBfc2V0X2N0X3RocmVzaG9sZCwKIAkgfSwKKwkuYWRkX2JjYXN0X3N0YXRpb24gPSBpd2xfYWRkX2JjYXN0X3N0YXRpb24sCiB9OwogCi1zdGF0aWMgc3RydWN0IGl3bF9vcHMgaXdsNjAwMF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcHMgaXdsNjAwMF9vcHMgPSB7CiAJLnVjb2RlID0gJml3bDUwMDBfdWNvZGUsCiAJLmxpYiA9ICZpd2w2MDAwX2xpYiwKIAkuaGNtZCA9ICZpd2w1MDAwX2hjbWQsCkBAIC0yNjAsMTggKzI4Nyw2OCBAQAogCS5sZWQgPSAmaXdsYWduX2xlZF9vcHMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGl3bF9oY21kX3V0aWxzX29wcyBpd2w2MDUwX2hjbWRfdXRpbHMgPSB7Ci0JLmdldF9oY21kX3NpemUgPSBpd2w1MDAwX2dldF9oY21kX3NpemUsCi0JLmJ1aWxkX2FkZHN0YV9oY21kID0gaXdsNTAwMF9idWlsZF9hZGRzdGFfaGNtZCwKLQkucnRzX3R4X2NtZF9mbGFnID0gaXdsNTAwMF9ydHNfdHhfY21kX2ZsYWcsCi0JLmNhbGNfcnNzaSA9IGl3bDUwMDBfY2FsY19yc3NpLAorc3RhdGljIHN0cnVjdCBpd2xfbGliX29wcyBpd2w2MDUwX2xpYiA9IHsKKwkuc2V0X2h3X3BhcmFtcyA9IGl3bDYwMDBfaHdfc2V0X2h3X3BhcmFtcywKKwkudHhxX3VwZGF0ZV9ieXRlX2NudF90YmwgPSBpd2w1MDAwX3R4cV91cGRhdGVfYnl0ZV9jbnRfdGJsLAorCS50eHFfaW52YWxfYnl0ZV9jbnRfdGJsID0gaXdsNTAwMF90eHFfaW52YWxfYnl0ZV9jbnRfdGJsLAorCS50eHFfc2V0X3NjaGVkID0gaXdsNTAwMF90eHFfc2V0X3NjaGVkLAorCS50eHFfYWdnX2VuYWJsZSA9IGl3bDUwMDBfdHhxX2FnZ19lbmFibGUsCisJLnR4cV9hZ2dfZGlzYWJsZSA9IGl3bDUwMDBfdHhxX2FnZ19kaXNhYmxlLAorCS50eHFfYXR0YWNoX2J1Zl90b190ZmQgPSBpd2xfaHdfdHhxX2F0dGFjaF9idWZfdG9fdGZkLAorCS50eHFfZnJlZV90ZmQgPSBpd2xfaHdfdHhxX2ZyZWVfdGZkLAorCS50eHFfaW5pdCA9IGl3bF9od190eF9xdWV1ZV9pbml0LAorCS5yeF9oYW5kbGVyX3NldHVwID0gaXdsNTAwMF9yeF9oYW5kbGVyX3NldHVwLAorCS5zZXR1cF9kZWZlcnJlZF93b3JrID0gaXdsNTAwMF9zZXR1cF9kZWZlcnJlZF93b3JrLAorCS5pc192YWxpZF9ydGNfZGF0YV9hZGRyID0gaXdsNTAwMF9od192YWxpZF9ydGNfZGF0YV9hZGRyLAorCS5sb2FkX3Vjb2RlID0gaXdsNTAwMF9sb2FkX3Vjb2RlLAorCS5kdW1wX25pY19ldmVudF9sb2cgPSBpd2xfZHVtcF9uaWNfZXZlbnRfbG9nLAorCS5kdW1wX25pY19lcnJvcl9sb2cgPSBpd2xfZHVtcF9uaWNfZXJyb3JfbG9nLAorCS5kdW1wX2NzciA9IGl3bF9kdW1wX2NzciwKKwkuZHVtcF9maCA9IGl3bF9kdW1wX2ZoLAorCS5pbml0X2FsaXZlX3N0YXJ0ID0gaXdsNTAwMF9pbml0X2FsaXZlX3N0YXJ0LAorCS5hbGl2ZV9ub3RpZnkgPSBpd2w1MDAwX2FsaXZlX25vdGlmeSwKKwkuc2VuZF90eF9wb3dlciA9IGl3bDUwMDBfc2VuZF90eF9wb3dlciwKKwkudXBkYXRlX2NoYWluX2ZsYWdzID0gaXdsX3VwZGF0ZV9jaGFpbl9mbGFncywKKwkuc2V0X2NoYW5uZWxfc3dpdGNoID0gaXdsNjAwMF9od19jaGFubmVsX3N3aXRjaCwKKwkuYXBtX29wcyA9IHsKKwkJLmluaXQgPSBpd2xfYXBtX2luaXQsCisJCS5zdG9wID0gaXdsX2FwbV9zdG9wLAorCQkuY29uZmlnID0gaXdsNjAwMF9uaWNfY29uZmlnLAorCQkuc2V0X3B3cl9zcmMgPSBpd2xfc2V0X3B3cl9zcmMsCisJfSwKKwkuZWVwcm9tX29wcyA9IHsKKwkJLnJlZ3VsYXRvcnlfYmFuZHMgPSB7CisJCQlFRVBST01fNTAwMF9SRUdfQkFORF8xX0NIQU5ORUxTLAorCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfMl9DSEFOTkVMUywKKwkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzNfQ0hBTk5FTFMsCisJCQlFRVBST01fNTAwMF9SRUdfQkFORF80X0NIQU5ORUxTLAorCQkJRUVQUk9NXzUwMDBfUkVHX0JBTkRfNV9DSEFOTkVMUywKKwkJCUVFUFJPTV81MDAwX1JFR19CQU5EXzI0X0hUNDBfQ0hBTk5FTFMsCisJCQlFRVBST01fNTAwMF9SRUdfQkFORF81Ml9IVDQwX0NIQU5ORUxTCisJCX0sCisJCS52ZXJpZnlfc2lnbmF0dXJlICA9IGl3bGNvcmVfZWVwcm9tX3ZlcmlmeV9zaWduYXR1cmUsCisJCS5hY3F1aXJlX3NlbWFwaG9yZSA9IGl3bGNvcmVfZWVwcm9tX2FjcXVpcmVfc2VtYXBob3JlLAorCQkucmVsZWFzZV9zZW1hcGhvcmUgPSBpd2xjb3JlX2VlcHJvbV9yZWxlYXNlX3NlbWFwaG9yZSwKKwkJLmNhbGliX3ZlcnNpb24JPSBpd2w1MDAwX2VlcHJvbV9jYWxpYl92ZXJzaW9uLAorCQkucXVlcnlfYWRkciA9IGl3bDUwMDBfZWVwcm9tX3F1ZXJ5X2FkZHIsCisJCS51cGRhdGVfZW5oYW5jZWRfdHhwb3dlciA9IGl3bGNvcmVfZWVwcm9tX2VuaGFuY2VkX3R4cG93ZXIsCisJfSwKKwkucG9zdF9hc3NvY2lhdGUgPSBpd2xfcG9zdF9hc3NvY2lhdGUsCisJLmlzciA9IGl3bF9pc3JfaWN0LAorCS5jb25maWdfYXAgPSBpd2xfY29uZmlnX2FwLAorCS50ZW1wX29wcyA9IHsKKwkJLnRlbXBlcmF0dXJlID0gaXdsNTAwMF90ZW1wZXJhdHVyZSwKKwkJLnNldF9jdF9raWxsID0gaXdsNjAwMF9zZXRfY3RfdGhyZXNob2xkLAorCQkuc2V0X2NhbGliX3ZlcnNpb24gPSBpd2w2MDUwX3NldF9jYWxpYl92ZXJzaW9uLAorCSB9LAorCS5hZGRfYmNhc3Rfc3RhdGlvbiA9IGl3bF9hZGRfYmNhc3Rfc3RhdGlvbiwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaXdsX29wcyBpd2w2MDUwX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wcyBpd2w2MDUwX29wcyA9IHsKIAkudWNvZGUgPSAmaXdsNTAwMF91Y29kZSwKLQkubGliID0gJml3bDYwMDBfbGliLAorCS5saWIgPSAmaXdsNjA1MF9saWIsCiAJLmhjbWQgPSAmaXdsNTAwMF9oY21kLAotCS51dGlscyA9ICZpd2w2MDUwX2hjbWRfdXRpbHMsCisJLnV0aWxzID0gJml3bDUwMDBfaGNtZF91dGlscywKIAkubGVkID0gJml3bGFnbl9sZWRfb3BzLAogfTsKIApAQCAtMzA2LDcgKzM4Myw4IEBACiAJLnN1cHBvcnRzX2lkbGUgPSB0cnVlLAogCS5hZHZfdGhlcm1hbF90aHJvdHRsZSA9IHRydWUsCiAJLnN1cHBvcnRfY3Rfa2lsbF9leGl0ID0gdHJ1ZSwKLQkuc21fcHNfbW9kZSA9IFdMQU5fSFRfQ0FQX1NNX1BTX0RJU0FCTEVELAorCS5wbGNwX2RlbHRhX3RocmVzaG9sZCA9IElXTF9NQVhfUExDUF9FUlJfVEhSRVNIT0xEX0RFRiwKKwkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxMDAwLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNjAwMGlfMmFiZ19jZmcgPSB7CkBAIC0zMzYsNiArNDE0LDggQEAKIAkuc3VwcG9ydHNfaWRsZSA9IHRydWUsCiAJLmFkdl90aGVybWFsX3Rocm90dGxlID0gdHJ1ZSwKIAkuc3VwcG9ydF9jdF9raWxsX2V4aXQgPSB0cnVlLAorCS5wbGNwX2RlbHRhX3RocmVzaG9sZCA9IElXTF9NQVhfUExDUF9FUlJfVEhSRVNIT0xEX0RFRiwKKwkuY2hhaW5fbm9pc2Vfc2NhbGUgPSAxMDAwLAogfTsKIAogc3RydWN0IGl3bF9jZmcgaXdsNjAwMGlfMmJnX2NmZyA9IHsKQEAgLTM2NSw2ICs0NDUsOCBAQAogCS5zdXBwb3J0c19pZGxlID0gdHJ1ZSwKIAkuYWR2X3RoZXJtYWxfdGhyb3R0bGUgPSB0cnVlLAogCS5zdXBwb3J0X2N0X2tpbGxfZXhpdCA9IHRydWUsCisJLnBsY3BfZGVsdGFfdGhyZXNob2xkID0gSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfREVGLAorCS5jaGFpbl9ub2lzZV9zY2FsZSA9IDEwMDAsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwXzJhZ25fY2ZnID0gewpAQCAtMzk1LDcgKzQ3Nyw4IEBACiAJLnN1cHBvcnRzX2lkbGUgPSB0cnVlLAogCS5hZHZfdGhlcm1hbF90aHJvdHRsZSA9IHRydWUsCiAJLnN1cHBvcnRfY3Rfa2lsbF9leGl0ID0gdHJ1ZSwKLQkuc21fcHNfbW9kZSA9IFdMQU5fSFRfQ0FQX1NNX1BTX0RZTkFNSUMsCisJLnBsY3BfZGVsdGFfdGhyZXNob2xkID0gSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfREVGLAorCS5jaGFpbl9ub2lzZV9zY2FsZSA9IDE1MDAsCiB9OwogCiBzdHJ1Y3QgaXdsX2NmZyBpd2w2MDUwXzJhYmdfY2ZnID0gewpAQCAtNDI1LDYgKzUwOCw4IEBACiAJLnN1cHBvcnRzX2lkbGUgPSB0cnVlLAogCS5hZHZfdGhlcm1hbF90aHJvdHRsZSA9IHRydWUsCiAJLnN1cHBvcnRfY3Rfa2lsbF9leGl0ID0gdHJ1ZSwKKwkucGxjcF9kZWx0YV90aHJlc2hvbGQgPSBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9ERUYsCisJLmNoYWluX25vaXNlX3NjYWxlID0gMTUwMCwKIH07CiAKIHN0cnVjdCBpd2xfY2ZnIGl3bDYwMDBfM2Fnbl9jZmcgPSB7CkBAIC00NTUsNyArNTQwLDggQEAKIAkuc3VwcG9ydHNfaWRsZSA9IHRydWUsCiAJLmFkdl90aGVybWFsX3Rocm90dGxlID0gdHJ1ZSwKIAkuc3VwcG9ydF9jdF9raWxsX2V4aXQgPSB0cnVlLAotCS5zbV9wc19tb2RlID0gV0xBTl9IVF9DQVBfU01fUFNfRElTQUJMRUQsCisJLnBsY3BfZGVsdGFfdGhyZXNob2xkID0gSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfREVGLAorCS5jaGFpbl9ub2lzZV9zY2FsZSA9IDEwMDAsCiB9OwogCiBNT0RVTEVfRklSTVdBUkUoSVdMNjAwMF9NT0RVTEVfRklSTVdBUkUoSVdMNjAwMF9VQ09ERV9BUElfTUFYKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGVkLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGVkLmMKaW5kZXggM2JjY2JhMi4uMWEyNDk0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLWxlZC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1sZWQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGVkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGVkLmgKaW5kZXggYWI1NWY5Mi4uYTU5NGU0ZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1sZWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tbGVkLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYwppbmRleCBiOTNlNDkxLi44YmY3YzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1hZ24tcnMuYwpAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0yOTgsMTAgKzI5OCwyMyBAQAogCQkJCSAgICAgIHN0cnVjdCBpd2xfbHFfc3RhICpscV9kYXRhLCB1OCB0aWQsCiAJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKKwlpbnQgcmV0OworCiAJaWYgKHJzX3RsX2dldF9sb2FkKGxxX2RhdGEsIHRpZCkgPiBJV0xfQUdHX0xPQURfVEhSRVNIT0xEKSB7CiAJCUlXTF9ERUJVR19IVChwcml2LCAiU3RhcnRpbmcgVHggYWdnOiBTVEE6ICVwTSB0aWQ6ICVkXG4iLAogCQkJCXN0YS0+YWRkciwgdGlkKTsKLQkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX3Nlc3Npb24oc3RhLCB0aWQpOworCQlyZXQgPSBpZWVlODAyMTFfc3RhcnRfdHhfYmFfc2Vzc2lvbihzdGEsIHRpZCk7CisJCWlmIChyZXQgPT0gLUVBR0FJTikgeworCQkJLyoKKwkJCSAqIGRyaXZlciBhbmQgbWFjODAyMTEgaXMgb3V0IG9mIHN5bmMKKwkJCSAqIHRoaXMgbWlnaHQgYmUgY2F1c2UgYnkgcmVsb2FkaW5nIGZpcm13YXJlCisJCQkgKiBzdG9wIHRoZSB0eCBiYSBzZXNzaW9uIGhlcmUKKwkJCSAqLworCQkJSVdMX0RFQlVHX0hUKHByaXYsICJGYWlsIHN0YXJ0IFR4IGFnZyBvbiB0aWQ6ICVkXG4iLAorCQkJCXRpZCk7CisJCQlyZXQgPSBpZWVlODAyMTFfc3RvcF90eF9iYV9zZXNzaW9uKHN0YSwgdGlkLAorCQkJCQkJV0xBTl9CQUNLX0lOSVRJQVRPUik7CisJCX0KIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi1ycy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmgKaW5kZXggYWZmYzBjNS4uZTcxOTIzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLXJzLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMTkxLDcgKzE5MSw3IEBACiAJSVdMX1JBVEVfMk1fTUFTSykKIAogI2RlZmluZSBJV0xfQ0NLX1JBVEVTX01BU0sgICAgICAgICAgXAotICAgICAgIChJV0xfQkFTSUNfUkFURVNfTUFTSyAgICAgIHwgXAorICAgICAgIChJV0xfQ0NLX0JBU0lDX1JBVEVTX01BU0sgIHwgXAogCUlXTF9SQVRFXzVNX01BU0sgICAgICAgICAgfCBcCiAJSVdMX1JBVEVfMTFNX01BU0spCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWFnbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKaW5kZXggMWM5ODY2ZC4uNmFlYjgyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtYWduLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTczLDEzICs3Myw3IEBACiAjZGVmaW5lIFZECiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19JV0xXSUZJX1NQRUNUUlVNX01FQVNVUkVNRU5UCi0jZGVmaW5lIFZTICJzIgotI2Vsc2UKLSNkZWZpbmUgVlMKLSNlbmRpZgotCi0jZGVmaW5lIERSVl9WRVJTSU9OICAgICBJV0xXSUZJX1ZFUlNJT04gVkQgVlMKKyNkZWZpbmUgRFJWX1ZFUlNJT04gICAgIElXTFdJRklfVkVSU0lPTiBWRAogCiAKIE1PRFVMRV9ERVNDUklQVElPTihEUlZfREVTQ1JJUFRJT04pOwpAQCAtMjAzLDcgKzE5Nyw4IEBACiAJcHJpdi0+c3RhcnRfY2FsaWIgPSAwOwogCiAJLyogQWRkIHRoZSBicm9hZGNhc3QgYWRkcmVzcyBzbyB3ZSBjYW4gc2VuZCBicm9hZGNhc3QgZnJhbWVzICovCi0JaXdsX2FkZF9iY2FzdF9zdGF0aW9uKHByaXYpOworCXByaXYtPmNmZy0+b3BzLT5saWItPmFkZF9iY2FzdF9zdGF0aW9uKHByaXYpOworCiAKIAkvKiBJZiB3ZSBoYXZlIHNldCB0aGUgQVNTT0NfTVNLIGFuZCB3ZSBhcmUgaW4gQlNTIG1vZGUgdGhlbgogCSAqIGFkZCB0aGUgSVdMX0FQX0lEIHRvIHRoZSBzdGF0aW9uIHJhdGUgdGFibGUgKi8KQEAgLTY1Nyw2ICs2NTIsMTMxIEBACiAJaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYsIENNRF9BU1lOQywgZmFsc2UpOwogfQogCisKK3N0YXRpYyB2b2lkIGl3bF9wcmludF9jb250X2V2ZW50X3RyYWNlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIGJhc2UsCisJCQkJCXUzMiBzdGFydF9pZHgsIHUzMiBudW1fZXZlbnRzLAorCQkJCQl1MzIgbW9kZSkKK3sKKwl1MzIgaTsKKwl1MzIgcHRyOyAgICAgICAgLyogU1JBTSBieXRlIGFkZHJlc3Mgb2YgbG9nIGRhdGEgKi8KKwl1MzIgZXYsIHRpbWUsIGRhdGE7IC8qIGV2ZW50IGxvZyBkYXRhICovCisJdW5zaWduZWQgbG9uZyByZWdfZmxhZ3M7CisKKwlpZiAobW9kZSA9PSAwKQorCQlwdHIgPSBiYXNlICsgKDQgKiBzaXplb2YodTMyKSkgKyAoc3RhcnRfaWR4ICogMiAqIHNpemVvZih1MzIpKTsKKwllbHNlCisJCXB0ciA9IGJhc2UgKyAoNCAqIHNpemVvZih1MzIpKSArIChzdGFydF9pZHggKiAzICogc2l6ZW9mKHUzMikpOworCisJLyogTWFrZSBzdXJlIGRldmljZSBpcyBwb3dlcmVkIHVwIGZvciBTUkFNIHJlYWRzICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOworCWlmIChpd2xfZ3JhYl9uaWNfYWNjZXNzKHByaXYpKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOworCQlyZXR1cm47CisJfQorCisJLyogU2V0IHN0YXJ0aW5nIGFkZHJlc3M7IHJlYWRzIHdpbGwgYXV0by1pbmNyZW1lbnQgKi8KKwlfaXdsX3dyaXRlX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkFERFIsIHB0cik7CisJcm1iKCk7CisKKwkvKgorCSAqICJ0aW1lIiBpcyBhY3R1YWxseSAiZGF0YSIgZm9yIG1vZGUgMCAobm8gdGltZXN0YW1wKS4KKwkgKiBwbGFjZSBldmVudCBpZCAjIGF0IGZhciByaWdodCBmb3IgZWFzaWVyIHZpc3VhbCBwYXJzaW5nLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fZXZlbnRzOyBpKyspIHsKKwkJZXYgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKKwkJdGltZSA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOworCQlpZiAobW9kZSA9PSAwKSB7CisJCQl0cmFjZV9pd2x3aWZpX2Rldl91Y29kZV9jb250X2V2ZW50KHByaXYsCisJCQkJCQkJMCwgdGltZSwgZXYpOworCQl9IGVsc2UgeworCQkJZGF0YSA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOworCQkJdHJhY2VfaXdsd2lmaV9kZXZfdWNvZGVfY29udF9ldmVudChwcml2LAorCQkJCQkJdGltZSwgZGF0YSwgZXYpOworCQl9CisJfQorCS8qIEFsbG93IGRldmljZSB0byBwb3dlciBkb3duICovCisJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgaXdsX2NvbnRpbnVvdXNfZXZlbnRfdHJhY2Uoc3RydWN0IGl3bF9wcml2ICpwcml2KQoreworCXUzMiBjYXBhY2l0eTsgICAvKiBldmVudCBsb2cgY2FwYWNpdHkgaW4gIyBlbnRyaWVzICovCisJdTMyIGJhc2U7ICAgICAgIC8qIFNSQU0gYnl0ZSBhZGRyZXNzIG9mIGV2ZW50IGxvZyBoZWFkZXIgKi8KKwl1MzIgbW9kZTsgICAgICAgLyogMCAtIG5vIHRpbWVzdGFtcCwgMSAtIHRpbWVzdGFtcCByZWNvcmRlZCAqLworCXUzMiBudW1fd3JhcHM7ICAvKiAjIHRpbWVzIHVDb2RlIHdyYXBwZWQgdG8gdG9wIG9mIGxvZyAqLworCXUzMiBuZXh0X2VudHJ5OyAvKiBpbmRleCBvZiBuZXh0IGVudHJ5IHRvIGJlIHdyaXR0ZW4gYnkgdUNvZGUgKi8KKworCWlmIChwcml2LT51Y29kZV90eXBlID09IFVDT0RFX0lOSVQpCisJCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlX2luaXQuZXJyb3JfZXZlbnRfdGFibGVfcHRyKTsKKwllbHNlCisJCWJhc2UgPSBsZTMyX3RvX2NwdShwcml2LT5jYXJkX2FsaXZlLmxvZ19ldmVudF90YWJsZV9wdHIpOworCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5pc192YWxpZF9ydGNfZGF0YV9hZGRyKGJhc2UpKSB7CisJCWNhcGFjaXR5ID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSk7CisJCW51bV93cmFwcyA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIGJhc2UgKyAoMiAqIHNpemVvZih1MzIpKSk7CisJCW1vZGUgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBiYXNlICsgKDEgKiBzaXplb2YodTMyKSkpOworCQluZXh0X2VudHJ5ID0gaXdsX3JlYWRfdGFyZ19tZW0ocHJpdiwgYmFzZSArICgzICogc2l6ZW9mKHUzMikpKTsKKwl9IGVsc2UKKwkJcmV0dXJuOworCisJaWYgKG51bV93cmFwcyA9PSBwcml2LT5ldmVudF9sb2cubnVtX3dyYXBzKSB7CisJCWl3bF9wcmludF9jb250X2V2ZW50X3RyYWNlKHByaXYsCisJCQkJICAgICAgIGJhc2UsIHByaXYtPmV2ZW50X2xvZy5uZXh0X2VudHJ5LAorCQkJCSAgICAgICBuZXh0X2VudHJ5IC0gcHJpdi0+ZXZlbnRfbG9nLm5leHRfZW50cnksCisJCQkJICAgICAgIG1vZGUpOworCQlwcml2LT5ldmVudF9sb2cubm9uX3dyYXBzX2NvdW50Kys7CisJfSBlbHNlIHsKKwkJaWYgKChudW1fd3JhcHMgLSBwcml2LT5ldmVudF9sb2cubnVtX3dyYXBzKSA+IDEpCisJCQlwcml2LT5ldmVudF9sb2cud3JhcHNfbW9yZV9jb3VudCsrOworCQllbHNlCisJCQlwcml2LT5ldmVudF9sb2cud3JhcHNfb25jZV9jb3VudCsrOworCQl0cmFjZV9pd2x3aWZpX2Rldl91Y29kZV93cmFwX2V2ZW50KHByaXYsCisJCQkJbnVtX3dyYXBzIC0gcHJpdi0+ZXZlbnRfbG9nLm51bV93cmFwcywKKwkJCQluZXh0X2VudHJ5LCBwcml2LT5ldmVudF9sb2cubmV4dF9lbnRyeSk7CisJCWlmIChuZXh0X2VudHJ5IDwgcHJpdi0+ZXZlbnRfbG9nLm5leHRfZW50cnkpIHsKKwkJCWl3bF9wcmludF9jb250X2V2ZW50X3RyYWNlKHByaXYsIGJhc2UsCisJCQkgICAgICAgcHJpdi0+ZXZlbnRfbG9nLm5leHRfZW50cnksCisJCQkgICAgICAgY2FwYWNpdHkgLSBwcml2LT5ldmVudF9sb2cubmV4dF9lbnRyeSwKKwkJCSAgICAgICBtb2RlKTsKKworCQkJaXdsX3ByaW50X2NvbnRfZXZlbnRfdHJhY2UocHJpdiwgYmFzZSwgMCwKKwkJCQluZXh0X2VudHJ5LCBtb2RlKTsKKwkJfSBlbHNlIHsKKwkJCWl3bF9wcmludF9jb250X2V2ZW50X3RyYWNlKHByaXYsIGJhc2UsCisJCQkgICAgICAgbmV4dF9lbnRyeSwgY2FwYWNpdHkgLSBuZXh0X2VudHJ5LAorCQkJICAgICAgIG1vZGUpOworCisJCQlpd2xfcHJpbnRfY29udF9ldmVudF90cmFjZShwcml2LCBiYXNlLCAwLAorCQkJCW5leHRfZW50cnksIG1vZGUpOworCQl9CisJfQorCXByaXYtPmV2ZW50X2xvZy5udW1fd3JhcHMgPSBudW1fd3JhcHM7CisJcHJpdi0+ZXZlbnRfbG9nLm5leHRfZW50cnkgPSBuZXh0X2VudHJ5OworfQorCisvKioKKyAqIGl3bF9iZ191Y29kZV90cmFjZSAtIFRpbWVyIGNhbGxiYWNrIHRvIGxvZyB1Y29kZSBldmVudAorICoKKyAqIFRoZSB0aW1lciBpcyBjb250aW51YWxseSBzZXQgdG8gZXhlY3V0ZSBldmVyeQorICogVUNPREVfVFJBQ0VfUEVSSU9EIG1pbGxpc2Vjb25kcyBhZnRlciB0aGUgbGFzdCB0aW1lciBleHBpcmVkCisgKiB0aGlzIGZ1bmN0aW9uIGlzIHRvIHBlcmZvcm0gY29udGludW91cyB1Q29kZSBldmVudCBsb2dnaW5nIG9wZXJhdGlvbgorICogaWYgZW5hYmxlZAorICovCitzdGF0aWMgdm9pZCBpd2xfYmdfdWNvZGVfdHJhY2UodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilkYXRhOworCisJaWYgKHRlc3RfYml0KFNUQVRVU19FWElUX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpKQorCQlyZXR1cm47CisKKwlpZiAocHJpdi0+ZXZlbnRfbG9nLnVjb2RlX3RyYWNlKSB7CisJCWl3bF9jb250aW51b3VzX2V2ZW50X3RyYWNlKHByaXYpOworCQkvKiBSZXNjaGVkdWxlIHRoZSB0aW1lciB0byBvY2N1ciBpbiBVQ09ERV9UUkFDRV9QRVJJT0QgKi8KKwkJbW9kX3RpbWVyKCZwcml2LT51Y29kZV90cmFjZSwKKwkJCSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhVQ09ERV9UUkFDRV9QRVJJT0QpKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkIGl3bF9yeF9iZWFjb25fbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCXN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKQogewpAQCAtNjg5LDEyICs4MDksMTQgQEAKIAl1MzIgZmxhZ3MgPSBsZTMyX3RvX2NwdShwa3QtPnUuY2FyZF9zdGF0ZV9ub3RpZi5mbGFncyk7CiAJdW5zaWduZWQgbG9uZyBzdGF0dXMgPSBwcml2LT5zdGF0dXM7CiAKLQlJV0xfREVCVUdfUkZfS0lMTChwcml2LCAiQ2FyZCBzdGF0ZSByZWNlaXZlZDogSFc6JXMgU1c6JXNcbiIsCisJSVdMX0RFQlVHX1JGX0tJTEwocHJpdiwgIkNhcmQgc3RhdGUgcmVjZWl2ZWQ6IEhXOiVzIFNXOiVzIENUOiVzXG4iLAogCQkJICAoZmxhZ3MgJiBIV19DQVJEX0RJU0FCTEVEKSA/ICJLaWxsIiA6ICJPbiIsCi0JCQkgIChmbGFncyAmIFNXX0NBUkRfRElTQUJMRUQpID8gIktpbGwiIDogIk9uIik7CisJCQkgIChmbGFncyAmIFNXX0NBUkRfRElTQUJMRUQpID8gIktpbGwiIDogIk9uIiwKKwkJCSAgKGZsYWdzICYgQ1RfQ0FSRF9ESVNBQkxFRCkgPworCQkJICAiUmVhY2hlZCIgOiAiTm90IHJlYWNoZWQiKTsKIAogCWlmIChmbGFncyAmIChTV19DQVJEX0RJU0FCTEVEIHwgSFdfQ0FSRF9ESVNBQkxFRCB8Ci0JCSAgICAgUkZfQ0FSRF9ESVNBQkxFRCkpIHsKKwkJICAgICBDVF9DQVJEX0RJU0FCTEVEKSkgewogCiAJCWl3bF93cml0ZTMyKHByaXYsIENTUl9VQ09ERV9EUlZfR1AxX1NFVCwKIAkJCSAgICBDU1JfVUNPREVfRFJWX0dQMV9CSVRfQ01EX0JMT0NLRUQpOwpAQCAtNzA4LDEwICs4MzAsMTAgQEAKIAkJCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUJYX0MsCiAJCQkJCUhCVVNfVEFSR19NQlhfQ19SRUdfQklUX0NNRF9CTE9DS0VEKTsKIAkJfQotCQlpZiAoZmxhZ3MgJiBSRl9DQVJEX0RJU0FCTEVEKQorCQlpZiAoZmxhZ3MgJiBDVF9DQVJEX0RJU0FCTEVEKQogCQkJaXdsX3R0X2VudGVyX2N0X2tpbGwocHJpdik7CiAJfQotCWlmICghKGZsYWdzICYgUkZfQ0FSRF9ESVNBQkxFRCkpCisJaWYgKCEoZmxhZ3MgJiBDVF9DQVJEX0RJU0FCTEVEKSkKIAkJaXdsX3R0X2V4aXRfY3Rfa2lsbChwcml2KTsKIAogCWlmIChmbGFncyAmIEhXX0NBUkRfRElTQUJMRUQpCkBAIC03NjEsNiArODgzLDggQEAKIAlwcml2LT5yeF9oYW5kbGVyc1tSRVBMWV9BTElWRV0gPSBpd2xfcnhfcmVwbHlfYWxpdmU7CiAJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfRVJST1JdID0gaXdsX3J4X3JlcGx5X2Vycm9yOwogCXByaXYtPnJ4X2hhbmRsZXJzW0NIQU5ORUxfU1dJVENIX05PVElGSUNBVElPTl0gPSBpd2xfcnhfY3NhOworCXByaXYtPnJ4X2hhbmRsZXJzW1NQRUNUUlVNX01FQVNVUkVfTk9USUZJQ0FUSU9OXSA9CisJCQlpd2xfcnhfc3BlY3RydW1fbWVhc3VyZV9ub3RpZjsKIAlwcml2LT5yeF9oYW5kbGVyc1tQTV9TTEVFUF9OT1RJRklDQVRJT05dID0gaXdsX3J4X3BtX3NsZWVwX25vdGlmOwogCXByaXYtPnJ4X2hhbmRsZXJzW1BNX0RFQlVHX1NUQVRJU1RJQ19OT1RJRklDXSA9CiAJICAgIGl3bF9yeF9wbV9kZWJ1Z19zdGF0aXN0aWNzX25vdGlmOwpAQCAtNzc0LDcgKzg5OCw2IEBACiAJcHJpdi0+cnhfaGFuZGxlcnNbUkVQTFlfU1RBVElTVElDU19DTURdID0gaXdsX3JlcGx5X3N0YXRpc3RpY3M7CiAJcHJpdi0+cnhfaGFuZGxlcnNbU1RBVElTVElDU19OT1RJRklDQVRJT05dID0gaXdsX3J4X3N0YXRpc3RpY3M7CiAKLQlpd2xfc2V0dXBfc3BlY3RydW1faGFuZGxlcnMocHJpdik7CiAJaXdsX3NldHVwX3J4X3NjYW5faGFuZGxlcnMocHJpdik7CiAKIAkvKiBzdGF0dXMgY2hhbmdlIGhhbmRsZXIgKi8KQEAgLTE2MzQsNyArMTc1Nyw3IEBACiAJIkRFQlVHXzEiLAogCSJERUJVR18yIiwKIAkiREVCVUdfMyIsCi0JIlVOS05PV04iCisJIkFEVkFOQ0VEIFNZU0FTU0VSVCIKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpkZXNjX2xvb2t1cChpbnQgaSkKQEAgLTE3MDUsOCArMTgyOCw5IEBACiAgKiBpd2xfcHJpbnRfZXZlbnRfbG9nIC0gRHVtcCBlcnJvciBldmVudCBsb2cgdG8gc3lzbG9nCiAgKgogICovCi1zdGF0aWMgdm9pZCBpd2xfcHJpbnRfZXZlbnRfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgdTMyIHN0YXJ0X2lkeCwKLQkJCQl1MzIgbnVtX2V2ZW50cywgdTMyIG1vZGUpCitzdGF0aWMgaW50IGl3bF9wcmludF9ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgc3RhcnRfaWR4LAorCQkJICAgICAgIHUzMiBudW1fZXZlbnRzLCB1MzIgbW9kZSwKKwkJCSAgICAgICBpbnQgcG9zLCBjaGFyICoqYnVmLCBzaXplX3QgYnVmc3opCiB7CiAJdTMyIGk7CiAJdTMyIGJhc2U7ICAgICAgIC8qIFNSQU0gYnl0ZSBhZGRyZXNzIG9mIGV2ZW50IGxvZyBoZWFkZXIgKi8KQEAgLTE3MTYsNyArMTg0MCw3IEBACiAJdW5zaWduZWQgbG9uZyByZWdfZmxhZ3M7CiAKIAlpZiAobnVtX2V2ZW50cyA9PSAwKQotCQlyZXR1cm47CisJCXJldHVybiBwb3M7CiAJaWYgKHByaXYtPnVjb2RlX3R5cGUgPT0gVUNPREVfSU5JVCkKIAkJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmVfaW5pdC5sb2dfZXZlbnRfdGFibGVfcHRyKTsKIAllbHNlCkBAIC0xNzQ0LDI3ICsxODY4LDQ0IEBACiAJCXRpbWUgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKIAkJaWYgKG1vZGUgPT0gMCkgewogCQkJLyogZGF0YSwgZXYgKi8KLQkJCXRyYWNlX2l3bHdpZmlfZGV2X3Vjb2RlX2V2ZW50KHByaXYsIDAsIHRpbWUsIGV2KTsKLQkJCUlXTF9FUlIocHJpdiwgIkVWVF9MT0c6MHglMDh4OiUwNHVcbiIsIHRpbWUsIGV2KTsKKwkJCWlmIChidWZzeikgeworCQkJCXBvcyArPSBzY25wcmludGYoKmJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJCQkiRVZUX0xPRzoweCUwOHg6JTA0dVxuIiwKKwkJCQkJCXRpbWUsIGV2KTsKKwkJCX0gZWxzZSB7CisJCQkJdHJhY2VfaXdsd2lmaV9kZXZfdWNvZGVfZXZlbnQocHJpdiwgMCwKKwkJCQkJdGltZSwgZXYpOworCQkJCUlXTF9FUlIocHJpdiwgIkVWVF9MT0c6MHglMDh4OiUwNHVcbiIsCisJCQkJCXRpbWUsIGV2KTsKKwkJCX0KIAkJfSBlbHNlIHsKIAkJCWRhdGEgPSBfaXdsX3JlYWRfZGlyZWN0MzIocHJpdiwgSEJVU19UQVJHX01FTV9SREFUKTsKLQkJCUlXTF9FUlIocHJpdiwgIkVWVF9MT0dUOiUwMTB1OjB4JTA4eDolMDR1XG4iLAorCQkJaWYgKGJ1ZnN6KSB7CisJCQkJcG9zICs9IHNjbnByaW50ZigqYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJCSJFVlRfTE9HVDolMDEwdToweCUwOHg6JTA0dVxuIiwKKwkJCQkJCSB0aW1lLCBkYXRhLCBldik7CisJCQl9IGVsc2UgeworCQkJCUlXTF9FUlIocHJpdiwgIkVWVF9MT0dUOiUwMTB1OjB4JTA4eDolMDR1XG4iLAogCQkJCQl0aW1lLCBkYXRhLCBldik7Ci0JCQl0cmFjZV9pd2x3aWZpX2Rldl91Y29kZV9ldmVudChwcml2LCB0aW1lLCBkYXRhLCBldik7CisJCQkJdHJhY2VfaXdsd2lmaV9kZXZfdWNvZGVfZXZlbnQocHJpdiwgdGltZSwKKwkJCQkJZGF0YSwgZXYpOworCQkJfQogCQl9CiAJfQogCiAJLyogQWxsb3cgZGV2aWNlIHRvIHBvd2VyIGRvd24gKi8KIAlpd2xfcmVsZWFzZV9uaWNfYWNjZXNzKHByaXYpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJlZ19sb2NrLCByZWdfZmxhZ3MpOworCXJldHVybiBwb3M7CiB9CiAKIC8qKgogICogaXdsX3ByaW50X2xhc3RfZXZlbnRfbG9ncyAtIER1bXAgdGhlIG5ld2VzdCAjIG9mIGV2ZW50IGxvZyB0byBzeXNsb2cKICAqLwotc3RhdGljIHZvaWQgaXdsX3ByaW50X2xhc3RfZXZlbnRfbG9ncyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBjYXBhY2l0eSwKLQkJCQkgICAgICB1MzIgbnVtX3dyYXBzLCB1MzIgbmV4dF9lbnRyeSwKLQkJCQkgICAgICB1MzIgc2l6ZSwgdTMyIG1vZGUpCitzdGF0aWMgaW50IGl3bF9wcmludF9sYXN0X2V2ZW50X2xvZ3Moc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgY2FwYWNpdHksCisJCQkJICAgIHUzMiBudW1fd3JhcHMsIHUzMiBuZXh0X2VudHJ5LAorCQkJCSAgICB1MzIgc2l6ZSwgdTMyIG1vZGUsCisJCQkJICAgIGludCBwb3MsIGNoYXIgKipidWYsIHNpemVfdCBidWZzeikKIHsKIAkvKgogCSAqIGRpc3BsYXkgdGhlIG5ld2VzdCBERUZBVUxUX0xPR19FTlRSSUVTIGVudHJpZXMKQEAgLTE3NzIsMjEgKzE5MTMsMjYgQEAKIAkgKi8KIAlpZiAobnVtX3dyYXBzKSB7CiAJCWlmIChuZXh0X2VudHJ5IDwgc2l6ZSkgewotCQkJaXdsX3ByaW50X2V2ZW50X2xvZyhwcml2LAotCQkJCQljYXBhY2l0eSAtIChzaXplIC0gbmV4dF9lbnRyeSksCi0JCQkJCXNpemUgLSBuZXh0X2VudHJ5LCBtb2RlKTsKLQkJCWl3bF9wcmludF9ldmVudF9sb2cocHJpdiwgMCwKLQkJCQkgICAgbmV4dF9lbnRyeSwgbW9kZSk7CisJCQlwb3MgPSBpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsCisJCQkJCQljYXBhY2l0eSAtIChzaXplIC0gbmV4dF9lbnRyeSksCisJCQkJCQlzaXplIC0gbmV4dF9lbnRyeSwgbW9kZSwKKwkJCQkJCXBvcywgYnVmLCBidWZzeik7CisJCQlwb3MgPSBpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsCisJCQkJCQkgIG5leHRfZW50cnksIG1vZGUsCisJCQkJCQkgIHBvcywgYnVmLCBidWZzeik7CiAJCX0gZWxzZQotCQkJaXdsX3ByaW50X2V2ZW50X2xvZyhwcml2LCBuZXh0X2VudHJ5IC0gc2l6ZSwKLQkJCQkgICAgc2l6ZSwgbW9kZSk7CisJCQlwb3MgPSBpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIG5leHRfZW50cnkgLSBzaXplLAorCQkJCQkJICBzaXplLCBtb2RlLCBwb3MsIGJ1ZiwgYnVmc3opOwogCX0gZWxzZSB7Ci0JCWlmIChuZXh0X2VudHJ5IDwgc2l6ZSkKLQkJCWl3bF9wcmludF9ldmVudF9sb2cocHJpdiwgMCwgbmV4dF9lbnRyeSwgbW9kZSk7Ci0JCWVsc2UKLQkJCWl3bF9wcmludF9ldmVudF9sb2cocHJpdiwgbmV4dF9lbnRyeSAtIHNpemUsCi0JCQkJCSAgICBzaXplLCBtb2RlKTsKKwkJaWYgKG5leHRfZW50cnkgPCBzaXplKSB7CisJCQlwb3MgPSBpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsIG5leHRfZW50cnksCisJCQkJCQkgIG1vZGUsIHBvcywgYnVmLCBidWZzeik7CisJCX0gZWxzZSB7CisJCQlwb3MgPSBpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIG5leHRfZW50cnkgLSBzaXplLAorCQkJCQkJICBzaXplLCBtb2RlLCBwb3MsIGJ1ZiwgYnVmc3opOworCQl9CiAJfQorCXJldHVybiBwb3M7CiB9CiAKIC8qIEZvciBzYW5pdHkgY2hlY2sgb25seS4gIEFjdHVhbCBzaXplIGlzIGRldGVybWluZWQgYnkgdUNvZGUsIHR5cC4gNTEyICovCkBAIC0xNzk0LDcgKzE5NDAsOCBAQAogCiAjZGVmaW5lIERFRkFVTFRfRFVNUF9FVkVOVF9MT0dfRU5UUklFUyAoMjApCiAKLXZvaWQgaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGJvb2wgZnVsbF9sb2cpCitpbnQgaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGJvb2wgZnVsbF9sb2csCisJCQkgICAgY2hhciAqKmJ1ZiwgYm9vbCBkaXNwbGF5KQogewogCXUzMiBiYXNlOyAgICAgICAvKiBTUkFNIGJ5dGUgYWRkcmVzcyBvZiBldmVudCBsb2cgaGVhZGVyICovCiAJdTMyIGNhcGFjaXR5OyAgIC8qIGV2ZW50IGxvZyBjYXBhY2l0eSBpbiAjIGVudHJpZXMgKi8KQEAgLTE4MDIsNiArMTk0OSw4IEBACiAJdTMyIG51bV93cmFwczsgIC8qICMgdGltZXMgdUNvZGUgd3JhcHBlZCB0byB0b3Agb2YgbG9nICovCiAJdTMyIG5leHRfZW50cnk7IC8qIGluZGV4IG9mIG5leHQgZW50cnkgdG8gYmUgd3JpdHRlbiBieSB1Q29kZSAqLwogCXUzMiBzaXplOyAgICAgICAvKiAjIGVudHJpZXMgdGhhdCB3ZSdsbCBwcmludCAqLworCWludCBwb3MgPSAwOworCXNpemVfdCBidWZzeiA9IDA7CiAKIAlpZiAocHJpdi0+dWNvZGVfdHlwZSA9PSBVQ09ERV9JTklUKQogCQliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZV9pbml0LmxvZ19ldmVudF90YWJsZV9wdHIpOwpAQCAtMTgxMiw3ICsxOTYxLDcgQEAKIAkJSVdMX0VSUihwcml2LAogCQkJIkludmFsaWQgZXZlbnQgbG9nIHBvaW50ZXIgMHglMDhYIGZvciAlcyB1Q29kZVxuIiwKIAkJCWJhc2UsIChwcml2LT51Y29kZV90eXBlID09IFVDT0RFX0lOSVQpID8gIkluaXQiIDogIlJUIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogZXZlbnQgbG9nIGhlYWRlciAqLwpAQCAtMTgzOCw3ICsxOTg3LDcgQEAKIAkvKiBiYWlsIG91dCBpZiBub3RoaW5nIGluIGxvZyAqLwogCWlmIChzaXplID09IDApIHsKIAkJSVdMX0VSUihwcml2LCAiU3RhcnQgSVdMIEV2ZW50IExvZyBEdW1wOiBub3RoaW5nIGluIGxvZ1xuIik7Ci0JCXJldHVybjsKKwkJcmV0dXJuIHBvczsKIAl9CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwpAQCAtMTg1Myw2ICsyMDAyLDE1IEBACiAJCXNpemUpOwogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlpZiAoZGlzcGxheSkgeworCQlpZiAoZnVsbF9sb2cpCisJCQlidWZzeiA9IGNhcGFjaXR5ICogNDg7CisJCWVsc2UKKwkJCWJ1ZnN6ID0gc2l6ZSAqIDQ4OworCQkqYnVmID0ga21hbGxvYyhidWZzeiwgR0ZQX0tFUk5FTCk7CisJCWlmICghKmJ1ZikKKwkJCXJldHVybiAtRU5PTUVNOworCX0KIAlpZiAoKGl3bF9nZXRfZGVidWdfbGV2ZWwocHJpdikgJiBJV0xfRExfRldfRVJST1JTKSB8fCBmdWxsX2xvZykgewogCQkvKgogCQkgKiBpZiB1Q29kZSBoYXMgd3JhcHBlZCBiYWNrIHRvIHRvcCBvZiBsb2csCkBAIC0xODYwLDE3ICsyMDE4LDIyIEBACiAJCSAqIGkuZSB0aGUgbmV4dCBvbmUgdGhhdCB1Q29kZSB3b3VsZCBmaWxsLgogCQkgKi8KIAkJaWYgKG51bV93cmFwcykKLQkJCWl3bF9wcmludF9ldmVudF9sb2cocHJpdiwgbmV4dF9lbnRyeSwKLQkJCQkJICAgIGNhcGFjaXR5IC0gbmV4dF9lbnRyeSwgbW9kZSk7CisJCQlwb3MgPSBpd2xfcHJpbnRfZXZlbnRfbG9nKHByaXYsIG5leHRfZW50cnksCisJCQkJCQljYXBhY2l0eSAtIG5leHRfZW50cnksIG1vZGUsCisJCQkJCQlwb3MsIGJ1ZiwgYnVmc3opOwogCQkvKiAodGhlbi9lbHNlKSBzdGFydCBhdCB0b3Agb2YgbG9nICovCi0JCWl3bF9wcmludF9ldmVudF9sb2cocHJpdiwgMCwgbmV4dF9lbnRyeSwgbW9kZSk7CisJCXBvcyA9IGl3bF9wcmludF9ldmVudF9sb2cocHJpdiwgMCwKKwkJCQkJICBuZXh0X2VudHJ5LCBtb2RlLCBwb3MsIGJ1ZiwgYnVmc3opOwogCX0gZWxzZQotCQlpd2xfcHJpbnRfbGFzdF9ldmVudF9sb2dzKHByaXYsIGNhcGFjaXR5LCBudW1fd3JhcHMsCi0JCQkJCW5leHRfZW50cnksIHNpemUsIG1vZGUpOworCQlwb3MgPSBpd2xfcHJpbnRfbGFzdF9ldmVudF9sb2dzKHByaXYsIGNhcGFjaXR5LCBudW1fd3JhcHMsCisJCQkJCQluZXh0X2VudHJ5LCBzaXplLCBtb2RlLAorCQkJCQkJcG9zLCBidWYsIGJ1ZnN6KTsKICNlbHNlCi0JaXdsX3ByaW50X2xhc3RfZXZlbnRfbG9ncyhwcml2LCBjYXBhY2l0eSwgbnVtX3dyYXBzLAotCQkJCW5leHRfZW50cnksIHNpemUsIG1vZGUpOworCXBvcyA9IGl3bF9wcmludF9sYXN0X2V2ZW50X2xvZ3MocHJpdiwgY2FwYWNpdHksIG51bV93cmFwcywKKwkJCQkJbmV4dF9lbnRyeSwgc2l6ZSwgbW9kZSwKKwkJCQkJcG9zLCBidWYsIGJ1ZnN6KTsKICNlbmRpZgorCXJldHVybiBwb3M7CiB9CiAKIC8qKgpAQCAtMjI3NiwxOCArMjQzOSw2IEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBpd2xfYmdfdXAoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIHVwKTsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCV9faXdsX3VwKHByaXYpOwotCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotfQotCiBzdGF0aWMgdm9pZCBpd2xfYmdfcmVzdGFydChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKmRhdGEpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGRhdGEsIHN0cnVjdCBpd2xfcHJpdiwgcmVzdGFydCk7CkBAIC0yMzA0LDcgKzI0NTUsMTMgQEAKIAkJaWVlZTgwMjExX3Jlc3RhcnRfaHcocHJpdi0+aHcpOwogCX0gZWxzZSB7CiAJCWl3bF9kb3duKHByaXYpOwotCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnVwKTsKKworCQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCQlyZXR1cm47CisKKwkJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCQlfX2l3bF91cChwcml2KTsKKwkJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAJfQogfQogCkBAIC0yNDQwLDcgKzI1OTcsNyBAQAogICogTm90IGEgbWFjODAyMTEgZW50cnkgcG9pbnQgZnVuY3Rpb24sIGJ1dCBpdCBmaXRzIGluIHdpdGggYWxsIHRoZQogICogb3RoZXIgbWFjODAyMTEgZnVuY3Rpb25zIGdyb3VwZWQgaGVyZS4KICAqLwotc3RhdGljIGludCBpd2xfc2V0dXBfbWFjKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3N0YXRpYyBpbnQgaXdsX21hY19zZXR1cF9yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IHByaXYtPmh3OwpAQCAtMjQ1Niw2ICsyNjEzLDEwIEBACiAJCWh3LT5mbGFncyB8PSBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMgfAogCQkJICAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUzsKIAorCWlmIChwcml2LT5jZmctPnNrdSAmIElXTF9TS1VfTikKKwkJaHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1NNUFMgfAorCQkJICAgICBJRUVFODAyMTFfSFdfU1VQUE9SVFNfU1RBVElDX1NNUFM7CisKIAlody0+c3RhX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXdsX3N0YXRpb25fcHJpdik7CiAJaHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPQogCQlCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgfApAQCAtMjQ3MCw3ICsyNjMxLDcgQEAKIAkgKi8KIAlody0+d2lwaHktPmZsYWdzICY9IH5XSVBIWV9GTEFHX1BTX09OX0JZX0RFRkFVTFQ7CiAKLQlody0+d2lwaHktPm1heF9zY2FuX3NzaWRzID0gUFJPQkVfT1BUSU9OX01BWDsKKwlody0+d2lwaHktPm1heF9zY2FuX3NzaWRzID0gUFJPQkVfT1BUSU9OX01BWCArIDE7CiAJLyogd2UgY3JlYXRlIHRoZSA4MDIuMTEgaGVhZGVyIGFuZCBhIHplcm8tbGVuZ3RoIFNTSUQgZWxlbWVudCAqLwogCWh3LT53aXBoeS0+bWF4X3NjYW5faWVfbGVuID0gSVdMX01BWF9QUk9CRV9SRVFVRVNUIC0gMjQgLSAyOwogCkBAIC0yNjY4LDE0ICsyODI5LDE4IEBACiB9CiAKIHN0YXRpYyB2b2lkIGl3bF9tYWNfdXBkYXRlX3RraXBfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5Y29uZiwgY29uc3QgdTggKmFkZHIsCi0JCQl1MzIgaXYzMiwgdTE2ICpwaGFzZTFrZXkpCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleWNvbmYsCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkJICAgIHUzMiBpdjMyLCB1MTYgKnBoYXNlMWtleSkKIHsKIAogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwogCi0JaXdsX3VwZGF0ZV90a2lwX2tleShwcml2LCBrZXljb25mLCBhZGRyLCBpdjMyLCBwaGFzZTFrZXkpOworCWl3bF91cGRhdGVfdGtpcF9rZXkocHJpdiwga2V5Y29uZiwKKwkJCSAgICBzdGEgPyBzdGEtPmFkZHIgOiBpd2xfYmNhc3RfYWRkciwKKwkJCSAgICBpdjMyLCBwaGFzZTFrZXkpOwogCiAJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7CiB9CkBAIC0yNzg0LDYgKzI5NDksOSBAQAogCQkJcmV0dXJuIDA7CiAJCWVsc2UKIAkJCXJldHVybiByZXQ7CisJY2FzZSBJRUVFODAyMTFfQU1QRFVfVFhfT1BFUkFUSU9OQUw6CisJCS8qIGRvIG5vdGhpbmcgKi8KKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCWRlZmF1bHQ6CiAJCUlXTF9ERUJVR19IVChwcml2LCAidW5rbm93blxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMjgzMyw2ICszMDAxLDggQEAKIAkJYnJlYWs7CiAJY2FzZSBTVEFfTk9USUZZX0FXQUtFOgogCQlXQVJOX09OKCFzdGFfcHJpdi0+Y2xpZW50KTsKKwkJaWYgKCFzdGFfcHJpdi0+YXNsZWVwKQorCQkJYnJlYWs7CiAJCXN0YV9wcml2LT5hc2xlZXAgPSBmYWxzZTsKIAkJc3RhX2lkID0gaXdsX2ZpbmRfc3RhdGlvbihwcml2LCBzdGEtPmFkZHIpOwogCQlpZiAoc3RhX2lkICE9IElXTF9JTlZBTElEX1NUQVRJT04pCkBAIC0zMTA5LDcgKzMyNzksNiBAQAogCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcHJpdi0+d2FpdF9jb21tYW5kX3F1ZXVlKTsKIAotCUlOSVRfV09SSygmcHJpdi0+dXAsIGl3bF9iZ191cCk7CiAJSU5JVF9XT1JLKCZwcml2LT5yZXN0YXJ0LCBpd2xfYmdfcmVzdGFydCk7CiAJSU5JVF9XT1JLKCZwcml2LT5yeF9yZXBsZW5pc2gsIGl3bF9iZ19yeF9yZXBsZW5pc2gpOwogCUlOSVRfV09SSygmcHJpdi0+YmVhY29uX3VwZGF0ZSwgaXdsX2JnX2JlYWNvbl91cGRhdGUpOwpAQCAtMzEyNiw2ICszMjk1LDEwIEBACiAJcHJpdi0+c3RhdGlzdGljc19wZXJpb2RpYy5kYXRhID0gKHVuc2lnbmVkIGxvbmcpcHJpdjsKIAlwcml2LT5zdGF0aXN0aWNzX3BlcmlvZGljLmZ1bmN0aW9uID0gaXdsX2JnX3N0YXRpc3RpY3NfcGVyaW9kaWM7CiAKKwlpbml0X3RpbWVyKCZwcml2LT51Y29kZV90cmFjZSk7CisJcHJpdi0+dWNvZGVfdHJhY2UuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXByaXY7CisJcHJpdi0+dWNvZGVfdHJhY2UuZnVuY3Rpb24gPSBpd2xfYmdfdWNvZGVfdHJhY2U7CisKIAlpZiAoIXByaXYtPmNmZy0+dXNlX2lzcl9sZWdhY3kpCiAJCXRhc2tsZXRfaW5pdCgmcHJpdi0+aXJxX3Rhc2tsZXQsICh2b2lkICgqKSh1bnNpZ25lZCBsb25nKSkKIAkJCWl3bF9pcnFfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpcHJpdik7CkBAIC0zMTQ0LDYgKzMzMTcsNyBAQAogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPmFsaXZlX3N0YXJ0KTsKIAljYW5jZWxfd29ya19zeW5jKCZwcml2LT5iZWFjb25fdXBkYXRlKTsKIAlkZWxfdGltZXJfc3luYygmcHJpdi0+c3RhdGlzdGljc19wZXJpb2RpYyk7CisJZGVsX3RpbWVyX3N5bmMoJnByaXYtPnVjb2RlX3RyYWNlKTsKIH0KIAogc3RhdGljIHZvaWQgaXdsX2luaXRfaHdfcmF0ZXMoc3RydWN0IGl3bF9wcml2ICpwcml2LApAQCAtMzE3OSw2ICszMzUzLDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmcHJpdi0+ZnJlZV9mcmFtZXMpOwogCiAJbXV0ZXhfaW5pdCgmcHJpdi0+bXV0ZXgpOworCW11dGV4X2luaXQoJnByaXYtPnN5bmNfY21kX211dGV4KTsKIAogCS8qIENsZWFyIHRoZSBkcml2ZXIncyAobm90IGRldmljZSdzKSBzdGF0aW9uIHRhYmxlICovCiAJaXdsX2NsZWFyX3N0YXRpb25zX3RhYmxlKHByaXYpOwpAQCAtMzE4OCw2ICszMzYzLDE0IEBACiAJcHJpdi0+YmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CiAKIAlwcml2LT5pd19tb2RlID0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTjsKKwlwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zbXBzID0gSUVFRTgwMjExX1NNUFNfU1RBVElDOworCXByaXYtPm1pc3NlZF9iZWFjb25fdGhyZXNob2xkID0gSVdMX01JU1NFRF9CRUFDT05fVEhSRVNIT0xEX0RFRjsKKworCS8qIGluaXRpYWxpemUgZm9yY2UgcmVzZXQgKi8KKwlwcml2LT5mb3JjZV9yZXNldFtJV0xfUkZfUkVTRVRdLnJlc2V0X2R1cmF0aW9uID0KKwkJSVdMX0RFTEFZX05FWFRfRk9SQ0VfUkZfUkVTRVQ7CisJcHJpdi0+Zm9yY2VfcmVzZXRbSVdMX0ZXX1JFU0VUXS5yZXNldF9kdXJhdGlvbiA9CisJCUlXTF9ERUxBWV9ORVhUX0ZPUkNFX0ZXX1JFTE9BRDsKIAogCS8qIENob29zZSB3aGljaCByZWNlaXZlcnMvYW50ZW5uYXMgdG8gdXNlICovCiAJaWYgKHByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbikKQEAgLTMyNjQsNyArMzQ0Nyw2IEBACiAJLnNldF9rZXkgPSBpd2xfbWFjX3NldF9rZXksCiAJLnVwZGF0ZV90a2lwX2tleSA9IGl3bF9tYWNfdXBkYXRlX3RraXBfa2V5LAogCS5nZXRfc3RhdHMgPSBpd2xfbWFjX2dldF9zdGF0cywKLQkuZ2V0X3R4X3N0YXRzID0gaXdsX21hY19nZXRfdHhfc3RhdHMsCiAJLmNvbmZfdHggPSBpd2xfbWFjX2NvbmZfdHgsCiAJLnJlc2V0X3RzZiA9IGl3bF9tYWNfcmVzZXRfdHNmLAogCS5ic3NfaW5mb19jaGFuZ2VkID0gaXdsX2Jzc19pbmZvX2NoYW5nZWQsCkBAIC0zMzY1LDYgKzM1NDcsMTQgQEAKIAkgKi8KIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+cmVnX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKworCS8qCisJICogc3RvcCBhbmQgcmVzZXQgdGhlIG9uLWJvYXJkIHByb2Nlc3NvciBqdXN0IGluIGNhc2UgaXQgaXMgaW4gYQorCSAqIHN0cmFuZ2Ugc3RhdGUgLi4uIGxpa2UgYmVpbmcgbGVmdCBzdHJhbmRlZCBieSBhIHByaW1hcnkga2VybmVsCisJICogYW5kIHRoaXMgaXMgbm93IHRoZSBrZHVtcCBrZXJuZWwgdHJ5aW5nIHRvIHN0YXJ0IHVwCisJICovCisJaXdsX3dyaXRlMzIocHJpdiwgQ1NSX1JFU0VULCBDU1JfUkVTRVRfUkVHX0ZMQUdfTkVWT19SRVNFVCk7CisKIAlpd2xfaHdfZGV0ZWN0KHByaXYpOwogCUlXTF9JTkZPKHByaXYsICJEZXRlY3RlZCBJbnRlbCBXaXJlbGVzcyBXaUZpIExpbmsgJXMgUkVWPTB4JVhcbiIsCiAJCXByaXYtPmNmZy0+bmFtZSwgcHJpdi0+aHdfcmV2KTsKQEAgLTM0MzksOSArMzYyOSw5IEBACiAJaXdsX3NldHVwX2RlZmVycmVkX3dvcmsocHJpdik7CiAJaXdsX3NldHVwX3J4X2hhbmRsZXJzKHByaXYpOwogCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLQkgKiA4LiBTZXR1cCBhbmQgcmVnaXN0ZXIgbWFjODAyMTEKLQkgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJICogOC4gRW5hYmxlIGludGVycnVwdHMgYW5kIHJlYWQgUkZLSUxMIHN0YXRlCisJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCS8qIGVuYWJsZSBpbnRlcnJ1cHRzIGlmIG5lZWRlZDogaHcgYnVnIHcvYSAqLwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKHByaXYtPnBjaV9kZXYsIFBDSV9DT01NQU5ELCAmcGNpX2NtZCk7CkBAIC0zNDUyLDE0ICszNjQyLDYgQEAKIAogCWl3bF9lbmFibGVfaW50ZXJydXB0cyhwcml2KTsKIAotCWVyciA9IGl3bF9zZXR1cF9tYWMocHJpdik7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfcmVtb3ZlX3N5c2ZzOwotCi0JZXJyID0gaXdsX2RiZ2ZzX3JlZ2lzdGVyKHByaXYsIERSVl9OQU1FKTsKLQlpZiAoZXJyKQotCQlJV0xfRVJSKHByaXYsICJmYWlsZWQgdG8gY3JlYXRlIGRlYnVnZnMgZmlsZXMuIElnbm9yaW5nIGVycm9yOiAlZFxuIiwgZXJyKTsKLQogCS8qIElmIHBsYXRmb3JtJ3MgUkZfS0lMTCBzd2l0Y2ggaXMgTk9UIHNldCB0byBLSUxMICovCiAJaWYgKGl3bF9yZWFkMzIocHJpdiwgQ1NSX0dQX0NOVFJMKSAmIENTUl9HUF9DTlRSTF9SRUdfRkxBR19IV19SRl9LSUxMX1NXKQogCQljbGVhcl9iaXQoU1RBVFVTX1JGX0tJTExfSFcsICZwcml2LT5zdGF0dXMpOwpAQCAtMzQ3MSw2ICszNjUzLDE4IEBACiAKIAlpd2xfcG93ZXJfaW5pdGlhbGl6ZShwcml2KTsKIAlpd2xfdHRfaW5pdGlhbGl6ZShwcml2KTsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqIDkuIFNldHVwIGFuZCByZWdpc3RlciB3aXRoIG1hYzgwMjExIGFuZCBkZWJ1Z2ZzCisJICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWVyciA9IGl3bF9tYWNfc2V0dXBfcmVnaXN0ZXIocHJpdik7CisJaWYgKGVycikKKwkJZ290byBvdXRfcmVtb3ZlX3N5c2ZzOworCisJZXJyID0gaXdsX2RiZ2ZzX3JlZ2lzdGVyKHByaXYsIERSVl9OQU1FKTsKKwlpZiAoZXJyKQorCQlJV0xfRVJSKHByaXYsICJmYWlsZWQgdG8gY3JlYXRlIGRlYnVnZnMgZmlsZXMuIElnbm9yaW5nIGVycm9yOiAlZFxuIiwgZXJyKTsKKwogCXJldHVybiAwOwogCiAgb3V0X3JlbW92ZV9zeXNmczoKQEAgLTM1ODksNyArMzc4Myw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIEhhcmR3YXJlIHNwZWNpZmljIGZpbGUgZGVmaW5lcyB0aGUgUENJIElEcyB0YWJsZSBmb3IgdGhhdCBoYXJkd2FyZSBtb2R1bGUgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpd2xfaHdfY2FyZF9pZHNbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShpd2xfaHdfY2FyZF9pZHMpID0gewogI2lmZGVmIENPTkZJR19JV0w0OTY1CiAJe0lXTF9QQ0lfREVWSUNFKDB4NDIyOSwgUENJX0FOWV9JRCwgaXdsNDk2NV9hZ25fY2ZnKX0sCiAJe0lXTF9QQ0lfREVWSUNFKDB4NDIzMCwgUENJX0FOWV9JRCwgaXdsNDk2NV9hZ25fY2ZnKX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuYwppbmRleCA5NWE1N2IzLi44NDU4MzFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmMKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC00MTQsNyArNDE0LDYgQEAKIC8qIFByZXBhcmUgYSBTRU5TSVRJVklUWV9DTUQsIHNlbmQgdG8gdUNvZGUgaWYgdmFsdWVzIGhhdmUgY2hhbmdlZCAqLwogc3RhdGljIGludCBpd2xfc2Vuc2l0aXZpdHlfd3JpdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCWludCByZXQgPSAwOwogCXN0cnVjdCBpd2xfc2Vuc2l0aXZpdHlfY21kIGNtZCA7CiAJc3RydWN0IGl3bF9zZW5zaXRpdml0eV9kYXRhICpkYXRhID0gTlVMTDsKIAlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZF9vdXQgPSB7CkBAIC00NzcsMTEgKzQ3Niw3IEBACiAJbWVtY3B5KCYocHJpdi0+c2Vuc2l0aXZpdHlfdGJsWzBdKSwgJihjbWQudGFibGVbMF0pLAogCSAgICAgICBzaXplb2YodTE2KSpIRF9UQUJMRV9TSVpFKTsKIAotCXJldCA9IGl3bF9zZW5kX2NtZChwcml2LCAmY21kX291dCk7Ci0JaWYgKHJldCkKLQkJSVdMX0VSUihwcml2LCAiU0VOU0lUSVZJVFlfQ01EIGZhaWxlZFxuIik7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBpd2xfc2VuZF9jbWQocHJpdiwgJmNtZF9vdXQpOwogfQogCiB2b2lkIGl3bF9pbml0X3NlbnNpdGl2aXR5KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jYWxpYi5oCmluZGV4IGI2Y2VmOTguLjJiN2IxZGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNhbGliLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY2FsaWIuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb21tYW5kcy5oCmluZGV4IGU5MTUwNzUuLjYzODNkOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvbW1hbmRzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29tbWFuZHMuaApAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTEyMCw3ICsxMjAsNiBAQAogCUNBTElCUkFUSU9OX0NPTVBMRVRFX05PVElGSUNBVElPTiA9IDB4NjcsCiAKIAkvKiA4MDIuMTFoIHJlbGF0ZWQgKi8KLQlSQURBUl9OT1RJRklDQVRJT04gPSAweDcwLAkvKiBub3QgdXNlZCAqLwogCVJFUExZX1FVSUVUX0NNRCA9IDB4NzEsCQkvKiBub3QgdXNlZCAqLwogCVJFUExZX0NIQU5ORUxfU1dJVENIID0gMHg3MiwKIAlDSEFOTkVMX1NXSVRDSF9OT1RJRklDQVRJT04gPSAweDczLApAQCAtMjI0OCwxMCArMjI0NywyMiBAQAogCV9fbGUzMiByZXNlcnZlZDI7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorLyoKKyAqIEJUIGNvbmZpZ3VyYXRpb24gZW5hYmxlIGZsYWdzOgorICogICBiaXQgMCAtIDE6IEJUIGNoYW5uZWwgYW5ub3VuY2VtZW50IGVuYWJsZWQKKyAqICAgICAgICAgICAwOiBkaXNhYmxlCisgKiAgIGJpdCAxIC0gMTogcHJpb3JpdHkgb2YgQlQgZGV2aWNlIGVuYWJsZWQKKyAqICAgICAgICAgICAwOiBkaXNhYmxlCisgKiAgIGJpdCAyIC0gMTogQlQgMiB3aXJlIHN1cHBvcnQgZW5hYmxlZAorICogICAgICAgICAgIDA6IGRpc2FibGUKKyAqLwogI2RlZmluZSBCVF9DT0VYX0RJU0FCTEUgKDB4MCkKLSNkZWZpbmUgQlRfQ09FWF9NT0RFXzJXICgweDEpCi0jZGVmaW5lIEJUX0NPRVhfTU9ERV8zVyAoMHgyKQotI2RlZmluZSBCVF9DT0VYX01PREVfNFcgKDB4MykKKyNkZWZpbmUgQlRfRU5BQkxFX0NIQU5ORUxfQU5OT1VOQ0UgQklUKDApCisjZGVmaW5lIEJUX0VOQUJMRV9QUklPUklUWQkgICBCSVQoMSkKKyNkZWZpbmUgQlRfRU5BQkxFXzJfV0lSRQkgICBCSVQoMikKKworI2RlZmluZSBCVF9DT0VYX0RJU0FCTEUgKDB4MCkKKyNkZWZpbmUgQlRfQ09FWF9FTkFCTEUgIChCVF9FTkFCTEVfQ0hBTk5FTF9BTk5PVU5DRSB8IEJUX0VOQUJMRV9QUklPUklUWSkKIAogI2RlZmluZSBCVF9MRUFEX1RJTUVfTUlOICgweDApCiAjZGVmaW5lIEJUX0xFQURfVElNRV9ERUYgKDB4MUUpCkBAIC0yNTEwLDcgKzI1MjEsNyBAQAogCiAjZGVmaW5lIEhXX0NBUkRfRElTQUJMRUQgICAweDAxCiAjZGVmaW5lIFNXX0NBUkRfRElTQUJMRUQgICAweDAyCi0jZGVmaW5lIFJGX0NBUkRfRElTQUJMRUQgICAweDA0CisjZGVmaW5lIENUX0NBUkRfRElTQUJMRUQgICAweDA0CiAjZGVmaW5lIFJYT05fQ0FSRF9ESVNBQkxFRCAweDEwCiAKIHN0cnVjdCBpd2xfY3Rfa2lsbF9jb25maWcgewpAQCAtMjYxMiw2ICsyNjIzLDcgQEAKICNkZWZpbmUgVFhfQ01EX0xJRkVfVElNRV9JTkZJTklURQljcHVfdG9fbGUzMigweEZGRkZGRkZGKQogI2RlZmluZSBJV0xfR09PRF9DUkNfVEgJCQljcHVfdG9fbGUxNigxKQogI2RlZmluZSBJV0xfTUFYX1NDQU5fU0laRSAxMDI0CisjZGVmaW5lIElXTF9NQVhfQ01EX1NJWkUgNDA5NgogI2RlZmluZSBJV0xfTUFYX1BST0JFX1JFUVVFU1QJCTIwMAogCiAvKgpAQCAtMjk4NCw3ICsyOTk2LDcgQEAKIAlfX2xlMzIgYWdnX2NyYzMyX2dvb2Q7CiAJX19sZTMyIGFnZ19tcGR1X2NudDsKIAlfX2xlMzIgYWdnX2NudDsKLQlfX2xlMzIgcmVzZXJ2ZWQyOworCV9fbGUzMiB1bnN1cHBvcnRfbWNzOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNkZWZpbmUgSU5URVJGRVJFTkNFX0RBVEFfQVZBSUxBQkxFICAgICAgY3B1X3RvX2xlMzIoMSkKQEAgLTMwODcsOCArMzA5OSw4IEBACiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbCB7Ci0JX19sZTMyIHRlbXBlcmF0dXJlOwotCV9fbGUzMiB0ZW1wZXJhdHVyZV9tOworCV9fbGUzMiB0ZW1wZXJhdHVyZTsgICAvKiByYWRpbyB0ZW1wZXJhdHVyZSAqLworCV9fbGUzMiB0ZW1wZXJhdHVyZV9tOyAvKiBmb3IgNTAwMCBhbmQgdXAsIHRoaXMgaXMgcmFkaW8gdm9sdGFnZSAqLwogCXN0cnVjdCBzdGF0aXN0aWNzX2RiZyBkYmc7CiAJX19sZTMyIHNsZWVwX3RpbWU7CiAJX19sZTMyIHNsb3RzX291dDsKQEAgLTMwOTYsNyArMzEwOCwxMiBAQAogCV9fbGUzMiB0dGxfdGltZXN0YW1wOwogCXN0cnVjdCBzdGF0aXN0aWNzX2RpdiBkaXY7CiAJX19sZTMyIHJ4X2VuYWJsZV9jb3VudGVyOwotCV9fbGUzMiByZXNlcnZlZDE7CisJLyoKKwkgKiBudW1fb2Zfc29zX3N0YXRlczoKKwkgKiAgY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB3ZSBoYXZlIHRvIHJlLXR1bmUKKwkgKiAgaW4gb3JkZXIgdG8gZ2V0IG91dCBvZiBiYWQgUEhZIHN0YXR1cworCSAqLworCV9fbGUzMiBudW1fb2Zfc29zX3N0YXRlczsKIAlfX2xlMzIgcmVzZXJ2ZWQyOwogCV9fbGUzMiByZXNlcnZlZDM7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKQEAgLTMxNjEsMTMgKzMxNzgsMzAgQEAKIAogLyoKICAqIE1JU1NFRF9CRUFDT05TX05PVElGSUNBVElPTiA9IDB4YTIgKG5vdGlmaWNhdGlvbiBvbmx5LCBub3QgYSBjb21tYW5kKQorICoKKyAqIHVDb2RlIHNlbmQgTUlTU0VEX0JFQUNPTlNfTk9USUZJQ0FUSU9OIHRvIGRyaXZlciB3aGVuIGRldGVjdCBiZWFjb24gbWlzc2VkCisgKiBpbiByZWdhcmRsZXNzIG9mIGhvdyBtYW55IG1pc3NlZCBiZWFjb25zLCB3aGljaCBtZWFuIHdoZW4gZHJpdmVyIHJlY2VpdmUgdGhlCisgKiBub3RpZmljYXRpb24sIGluc2lkZSB0aGUgY29tbWFuZCwgaXQgY2FuIGZpbmQgYWxsIHRoZSBiZWFjb25zIGluZm9ybWF0aW9uCisgKiB3aGljaCBpbmNsdWRlIG51bWJlciBvZiB0b3RhbCBtaXNzZWQgYmVhY29ucywgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIG1pc3NlZAorICogYmVhY29ucywgbnVtYmVyIG9mIGJlYWNvbnMgcmVjZWl2ZWQgYW5kIG51bWJlciBvZiBiZWFjb25zIGV4cGVjdGVkIHRvCisgKiByZWNlaXZlLgorICoKKyAqIElmIHVDb2RlIGRldGVjdGVkIGNvbnNlY3V0aXZlX21pc3NlZF9iZWFjb25zID4gNSwgaXQgd2lsbCByZXNldCB0aGUgcmFkaW8KKyAqIGluIG9yZGVyIHRvIGJyaW5nIHRoZSByYWRpby9QSFkgYmFjayB0byB3b3JraW5nIHN0YXRlOyB3aGljaCBoYXMgbm8gcmVsYXRpb24KKyAqIHRvIHdoZW4gZHJpdmVyIHdpbGwgcGVyZm9ybSBzZW5zaXRpdml0eSBjYWxpYnJhdGlvbi4KKyAqCisgKiBEcml2ZXIgc2hvdWxkIHNldCBpdCBvd24gbWlzc2VkX2JlYWNvbl90aHJlc2hvbGQgdG8gZGVjaWRlIHdoZW4gdG8gcGVyZm9ybQorICogc2Vuc2l0aXZpdHkgY2FsaWJyYXRpb24gYmFzZWQgb24gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIG1pc3NlZCBiZWFjb25zIGluCisgKiBvcmRlciB0byBpbXByb3ZlIG92ZXJhbGwgcGVyZm9ybWFuY2UsIGVzcGVjaWFsbHkgaW4gbm9pc3kgZW52aXJvbm1lbnQuCisgKgogICovCi0vKiBpZiB1Y29kZSBtaXNzZWQgQ09OU0VDVVRJVkVfTUlTU0VEX0JDT05TX1RIIGJlYWNvbnMgaW4gYSByb3csCi0gKiB0aGVuIHRoaXMgbm90aWZpY2F0aW9uIHdpbGwgYmUgc2VudC4gKi8KLSNkZWZpbmUgQ09OU0VDVVRJVkVfTUlTU0VEX0JDT05TX1RIIDIwCisKKyNkZWZpbmUgSVdMX01JU1NFRF9CRUFDT05fVEhSRVNIT0xEX01JTgkoMSkKKyNkZWZpbmUgSVdMX01JU1NFRF9CRUFDT05fVEhSRVNIT0xEX0RFRgkoNSkKKyNkZWZpbmUgSVdMX01JU1NFRF9CRUFDT05fVEhSRVNIT0xEX01BWAlJV0xfTUlTU0VEX0JFQUNPTl9USFJFU0hPTERfREVGCiAKIHN0cnVjdCBpd2xfbWlzc2VkX2JlYWNvbl9ub3RpZiB7Ci0JX19sZTMyIGNvbnNlcXV0aXZlX21pc3NlZF9iZWFjb25zOworCV9fbGUzMiBjb25zZWN1dGl2ZV9taXNzZWRfYmVhY29uczsKIAlfX2xlMzIgdG90YWxfbWlzc2VkX2JlY29uczsKIAlfX2xlMzIgbnVtX2V4cGVjdGVkX2JlYWNvbnM7CiAJX19sZTMyIG51bV9yZWN2ZF9iZWFjb25zOwpAQCAtMzQzNywxMSArMzQ3MSw3IEBACiAJSVdMX1BIWV9DQUxJQlJBVEVfRElGRl9HQUlOX0NNRAkJPSA3LAogCUlXTF9QSFlfQ0FMSUJSQVRFX0RDX0NNRAkJPSA4LAogCUlXTF9QSFlfQ0FMSUJSQVRFX0xPX0NNRAkJPSA5LAotCUlXTF9QSFlfQ0FMSUJSQVRFX1JYX0JCX0NNRAkJPSAxMCwKIAlJV0xfUEhZX0NBTElCUkFURV9UWF9JUV9DTUQJCT0gMTEsCi0JSVdMX1BIWV9DQUxJQlJBVEVfUlhfSVFfQ01ECQk9IDEyLAotCUlXTF9QSFlfQ0FMSUJSQVRJT05fTk9JU0VfQ01ECQk9IDEzLAotCUlXTF9QSFlfQ0FMSUJSQVRFX0FHQ19UQUJMRV9DTUQJCT0gMTQsCiAJSVdMX1BIWV9DQUxJQlJBVEVfQ1JZU1RBTF9GUlFfQ01ECT0gMTUsCiAJSVdMX1BIWV9DQUxJQlJBVEVfQkFTRV9CQU5EX0NNRAkJPSAxNiwKIAlJV0xfUEhZX0NBTElCUkFURV9UWF9JUV9QRVJEX0NNRAk9IDE3LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5jCmluZGV4IGYzNmY4MDQuLjExMjE0OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTQ3LDYgKzQ3LDI2IEBACiBNT0RVTEVfQVVUSE9SKERSVl9DT1BZUklHSFQgIiAiIERSVl9BVVRIT1IpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCisvKgorICogc2V0IGJ0X2NvZXhfYWN0aXZlIHRvIHRydWUsIHVDb2RlIHdpbGwgZG8ga2lsbC9kZWZlcgorICogZXZlcnkgdGltZSB0aGUgcHJpb3JpdHkgbGluZSBpcyBhc3NlcnRlZCAoQlQgaXMgc2VuZGluZyBzaWduYWxzIG9uIHRoZQorICogcHJpb3JpdHkgbGluZSBpbiB0aGUgUENJeCkuCisgKiBzZXQgYnRfY29leF9hY3RpdmUgdG8gZmFsc2UsIHVDb2RlIHdpbGwgaWdub3JlIHRoZSBCVCBhY3Rpdml0eSBhbmQKKyAqIHBlcmZvcm0gdGhlIG5vcm1hbCBvcGVyYXRpb24KKyAqCisgKiBVc2VyIG1pZ2h0IGV4cGVyaWVuY2UgdHJhbnNtaXQgaXNzdWUgb24gc29tZSBwbGF0Zm9ybSBkdWUgdG8gV2lGaS9CVAorICogY28tZXhpc3QgcHJvYmxlbS4gVGhlIHBvc3NpYmxlIGJlaGF2aW9ycyBhcmU6CisgKiAgIEFibGUgdG8gc2NhbiBhbmQgZmluZGluZyBhbGwgdGhlIGF2YWlsYWJsZSBBUAorICogICBOb3QgYWJsZSB0byBhc3NvY2lhdGUgd2l0aCBhbnkgQVAKKyAqIE9uIHRob3NlIHBsYXRmb3JtcywgV2lGaSBjb21tdW5pY2F0aW9uIGNhbiBiZSByZXN0b3JlZCBieSBzZXQKKyAqICJidF9jb2V4X2FjdGl2ZSIgbW9kdWxlIHBhcmFtZXRlciB0byAiZmFsc2UiCisgKgorICogZGVmYXVsdDogYnRfY29leF9hY3RpdmUgPSB0cnVlIChCVF9DT0VYX0VOQUJMRSkKKyAqLworc3RhdGljIGJvb2wgYnRfY29leF9hY3RpdmUgPSB0cnVlOworbW9kdWxlX3BhcmFtKGJ0X2NvZXhfYWN0aXZlLCBib29sLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoYnRfY29leF9hY3RpdmUsICJlbmFibGUgd2lmaS9ibHVldG9vdGggY28tZXhpc3RcbiIpOworCiBzdGF0aWMgc3RydWN0IGl3bF93aW1heF9jb2V4X2V2ZW50X2VudHJ5IGN1X3ByaW9yaXRpZXNbQ09FWF9OVU1fT0ZfRVZFTlRTXSA9IHsKIAl7Q09FWF9DVV9VTkFTU09DX0lETEVfUlAsIENPRVhfQ1VfVU5BU1NPQ19JRExFX1dQLAogCSAwLCBDT0VYX1VOQVNTT0NfSURMRV9GTEFHU30sCkBAIC0yNTcsOCArMjc3LDggQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCXByaXYtPmNmZy0+b3BzLT5saWItPmFwbV9vcHMuaW5pdChwcml2KTsKIAotCS8qIFNldCBpbnRlcnJ1cHQgY29hbGVzY2luZyB0aW1lciB0byA1MTIgdXNlY3MgKi8KLQlpd2xfd3JpdGU4KHByaXYsIENTUl9JTlRfQ09BTEVTQ0lORywgNTEyIC8gMzIpOworCS8qIFNldCBpbnRlcnJ1cHQgY29hbGVzY2luZyBjYWxpYnJhdGlvbiB0aW1lciB0byBkZWZhdWx0ICg1MTIgdXNlY3MpICovCisJaXdsX3dyaXRlOChwcml2LCBDU1JfSU5UX0NPQUxFU0NJTkcsIElXTF9IT1NUX0lOVF9DQUxJQl9USU1FT1VUX0RFRik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTQ1MCw4ICs0NzAsNiBAQAogCWlmIChwcml2LT5jZmctPmh0X2dyZWVuZmllbGRfc3VwcG9ydCkKIAkJaHRfaW5mby0+Y2FwIHw9IElFRUU4MDIxMV9IVF9DQVBfR1JOX0ZMRDsKIAlodF9pbmZvLT5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9TR0lfMjA7Ci0JaHRfaW5mby0+Y2FwIHw9IChJRUVFODAyMTFfSFRfQ0FQX1NNX1BTICYKLQkJCSAgICAgKHByaXYtPmNmZy0+c21fcHNfbW9kZSA8PCAyKSk7CiAJbWF4X2JpdF9yYXRlID0gTUFYX0JJVF9SQVRFXzIwX01IWjsKIAlpZiAocHJpdi0+aHdfcGFyYW1zLmh0NDBfY2hhbm5lbCAmIEJJVChiYW5kKSkgewogCQlodF9pbmZvLT5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7CkBAIC02MzYsNyArNjU0LDcgQEAKIAogc3RhdGljIGJvb2wgaXNfc2luZ2xlX3J4X3N0cmVhbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7Ci0JcmV0dXJuICFwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5pc19odCB8fAorCXJldHVybiBwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zbXBzID09IElFRUU4MDIxMV9TTVBTX1NUQVRJQyB8fAogCSAgICAgICBwcml2LT5jdXJyZW50X2h0X2NvbmZpZy5zaW5nbGVfY2hhaW5fc3VmZmljaWVudDsKIH0KIApAQCAtMTAwMywyOCArMTAyMSwxOCBAQAogICovCiBzdGF0aWMgaW50IGl3bF9nZXRfaWRsZV9yeF9jaGFpbl9jb3VudChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCBhY3RpdmVfY250KQogewotCWludCBpZGxlX2NudCA9IGFjdGl2ZV9jbnQ7Ci0JYm9vbCBpc19jYW0gPSAhdGVzdF9iaXQoU1RBVFVTX1BPV0VSX1BNSSwgJnByaXYtPnN0YXR1cyk7Ci0KLQkvKiAjIFJ4IGNoYWlucyB3aGVuIGlkbGluZyBhbmQgbWF5YmUgdHJ5aW5nIHRvIHNhdmUgcG93ZXIgKi8KLQlzd2l0Y2ggKHByaXYtPmNmZy0+c21fcHNfbW9kZSkgewotCWNhc2UgV0xBTl9IVF9DQVBfU01fUFNfU1RBVElDOgotCQlpZGxlX2NudCA9IChpc19jYW0pID8gYWN0aXZlX2NudCA6IElXTF9OVU1fSURMRV9DSEFJTlNfU0lOR0xFOwotCQlicmVhazsKLQljYXNlIFdMQU5fSFRfQ0FQX1NNX1BTX0RZTkFNSUM6Ci0JCWlkbGVfY250ID0gKGlzX2NhbSkgPyBJV0xfTlVNX0lETEVfQ0hBSU5TX0RVQUwgOgotCQkJSVdMX05VTV9JRExFX0NIQUlOU19TSU5HTEU7Ci0JCWJyZWFrOwotCWNhc2UgV0xBTl9IVF9DQVBfU01fUFNfRElTQUJMRUQ6Ci0JCWJyZWFrOwotCWNhc2UgV0xBTl9IVF9DQVBfU01fUFNfSU5WQUxJRDoKKwkvKiAjIFJ4IGNoYWlucyB3aGVuIGlkbGluZywgZGVwZW5kaW5nIG9uIFNNUFMgbW9kZSAqLworCXN3aXRjaCAocHJpdi0+Y3VycmVudF9odF9jb25maWcuc21wcykgeworCWNhc2UgSUVFRTgwMjExX1NNUFNfU1RBVElDOgorCWNhc2UgSUVFRTgwMjExX1NNUFNfRFlOQU1JQzoKKwkJcmV0dXJuIElXTF9OVU1fSURMRV9DSEFJTlNfU0lOR0xFOworCWNhc2UgSUVFRTgwMjExX1NNUFNfT0ZGOgorCQlyZXR1cm4gYWN0aXZlX2NudDsKIAlkZWZhdWx0OgotCQlJV0xfRVJSKHByaXYsICJpbnZhbGlkIHNtX3BzIG1vZGUgJXVcbiIsCi0JCQlwcml2LT5jZmctPnNtX3BzX21vZGUpOwotCQlXQVJOX09OKDEpOwotCQlicmVhazsKKwkJV0FSTigxLCAiaW52YWxpZCBTTVBTIG1vZGUgJWQiLAorCQkgICAgIHByaXYtPmN1cnJlbnRfaHRfY29uZmlnLnNtcHMpOworCQlyZXR1cm4gYWN0aXZlX2NudDsKIAl9Ci0JcmV0dXJuIGlkbGVfY250OwogfQogCiAvKiB1cCB0byA0IGNoYWlucyAqLwpAQCAtMTM2Myw3ICsxMzcxLDExIEBACiAJY2xlYXJfYml0KFNUQVRVU19IQ01EX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7CiAKIAlwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX25pY19lcnJvcl9sb2cocHJpdik7Ci0JcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9uaWNfZXZlbnRfbG9nKHByaXYsIGZhbHNlKTsKKwlpZiAocHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9jc3IpCisJCXByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfY3NyKHByaXYpOworCWlmIChwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX2ZoKQorCQlwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX2ZoKHByaXYsIE5VTEwsIGZhbHNlKTsKKwlwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX25pY19ldmVudF9sb2cocHJpdiwgZmFsc2UsIE5VTEwsIGZhbHNlKTsKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogCWlmIChpd2xfZ2V0X2RlYnVnX2xldmVsKHByaXYpICYgSVdMX0RMX0ZXX0VSUk9SUykKIAkJaXdsX3ByaW50X3J4X2NvbmZpZ19jbWQocHJpdik7CkBAIC0xNjU4LDkgKzE2NzAsOSBAQAogdm9pZCBpd2xfZnJlZV9pc3JfaWN0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlpZiAocHJpdi0+aWN0X3RibF92aXIpIHsKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LCAoc2l6ZW9mKHUzMikgKiBJQ1RfQ09VTlQpICsKLQkJCQkJUEFHRV9TSVpFLCBwcml2LT5pY3RfdGJsX3ZpciwKLQkJCQkJcHJpdi0+aWN0X3RibF9kbWEpOworCQlkbWFfZnJlZV9jb2hlcmVudCgmcHJpdi0+cGNpX2Rldi0+ZGV2LAorCQkJCSAgKHNpemVvZih1MzIpICogSUNUX0NPVU5UKSArIFBBR0VfU0laRSwKKwkJCQkgIHByaXYtPmljdF90YmxfdmlyLCBwcml2LT5pY3RfdGJsX2RtYSk7CiAJCXByaXYtPmljdF90YmxfdmlyID0gTlVMTDsKIAl9CiB9CkBAIC0xNjc2LDkgKzE2ODgsOSBAQAogCWlmIChwcml2LT5jZmctPnVzZV9pc3JfbGVnYWN5KQogCQlyZXR1cm4gMDsKIAkvKiBhbGxvY2F0ZSBzaHJhcmVkIGRhdGEgdGFibGUgKi8KLQlwcml2LT5pY3RfdGJsX3ZpciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsIChzaXplb2YodTMyKSAqCi0JCQkJCQkgIElDVF9DT1VOVCkgKyBQQUdFX1NJWkUsCi0JCQkJCQkgICZwcml2LT5pY3RfdGJsX2RtYSk7CisJcHJpdi0+aWN0X3RibF92aXIgPSBkbWFfYWxsb2NfY29oZXJlbnQoJnByaXYtPnBjaV9kZXYtPmRldiwKKwkJCQkJKHNpemVvZih1MzIpICogSUNUX0NPVU5UKSArIFBBR0VfU0laRSwKKwkJCQkJJnByaXYtPmljdF90YmxfZG1hLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXByaXYtPmljdF90YmxfdmlyKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTgxMyw2ICsxODI1LDE2IEBACiAJaWYgKHZhbCA9PSAweGZmZmZmZmZmKQogCQl2YWwgPSAwOwogCisJLyoKKwkgKiB0aGlzIGlzIGEgdy9hIGZvciBhIGgvdyBidWcuIHRoZSBoL3cgYnVnIG1heSBjYXVzZSB0aGUgUnggYml0CisJICogKGJpdCAxNSBiZWZvcmUgc2hpZnRpbmcgaXQgdG8gMzEpIHRvIGNsZWFyIHdoZW4gdXNpbmcgaW50ZXJydXB0CisJICogY29hbGVzY2luZy4gZm9ydHVuYXRlbHksIGJpdHMgMTggYW5kIDE5IHN0YXkgc2V0IHdoZW4gdGhpcyBoYXBwZW5zCisJICogc28gd2UgdXNlIHRoZW0gdG8gZGVjaWRlIG9uIHRoZSByZWFsIHN0YXRlIG9mIHRoZSBSeCBiaXQuCisJICogSW4gb3JkZXIgd29yZHMsIGJpdCAxNSBpcyBzZXQgaWYgYml0IDE4IG9yIGJpdCAxOSBhcmUgc2V0LgorCSAqLworCWlmICh2YWwgJiAweEMwMDAwKQorCQl2YWwgfD0gMHg4MDAwOworCiAJaW50YSA9ICgweGZmICYgdmFsKSB8ICgoMHhmZjAwICYgdmFsKSA8PCAxNik7CiAJSVdMX0RFQlVHX0lTUihwcml2LCAiSVNSIGludGEgMHglMDh4LCBlbmFibGVkIDB4JTA4eCBpY3QgMHglMDh4XG4iLAogCQkJaW50YSwgaW50YV9tYXNrLCB2YWwpOwpAQCAtMTk3NSwxMyArMTk5NywyMCBAQAogaW50IGl3bF9zZW5kX2J0X2NvbmZpZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bF9idF9jbWQgYnRfY21kID0gewotCQkuZmxhZ3MgPSBCVF9DT0VYX01PREVfNFcsCiAJCS5sZWFkX3RpbWUgPSBCVF9MRUFEX1RJTUVfREVGLAogCQkubWF4X2tpbGwgPSBCVF9NQVhfS0lMTF9ERUYsCiAJCS5raWxsX2Fja19tYXNrID0gMCwKIAkJLmtpbGxfY3RzX21hc2sgPSAwLAogCX07CiAKKwlpZiAoIWJ0X2NvZXhfYWN0aXZlKQorCQlidF9jbWQuZmxhZ3MgPSBCVF9DT0VYX0RJU0FCTEU7CisJZWxzZQorCQlidF9jbWQuZmxhZ3MgPSBCVF9DT0VYX0VOQUJMRTsKKworCUlXTF9ERUJVR19JTkZPKHByaXYsICJCVCBjb2V4ICVzXG4iLAorCQkoYnRfY21kLmZsYWdzID09IEJUX0NPRVhfRElTQUJMRSkgPyAiZGlzYWJsZSIgOiAiYWN0aXZlIik7CisKIAlyZXR1cm4gaXdsX3NlbmRfY21kX3BkdShwcml2LCBSRVBMWV9CVF9DT05GSUcsCiAJCQkJc2l6ZW9mKHN0cnVjdCBpd2xfYnRfY21kKSwgJmJ0X2NtZCk7CiB9CkBAIC0yNTk5LDQ0ICsyNjI4LDQzIEBACiBFWFBPUlRfU1lNQk9MKGl3bF9zZXRfbW9kZSk7CiAKIGludCBpd2xfbWFjX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVyciA9IDA7CiAKLQlJV0xfREVCVUdfTUFDODAyMTEocHJpdiwgImVudGVyOiB0eXBlICVkXG4iLCBjb25mLT50eXBlKTsKLQotCWlmIChwcml2LT52aWYpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHZpZiAhPSBOVUxMXG4iKTsKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JcHJpdi0+dmlmID0gY29uZi0+dmlmOwotCXByaXYtPml3X21vZGUgPSBjb25mLT50eXBlOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXI6IHR5cGUgJWRcbiIsIHZpZi0+dHlwZSk7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7CiAKLQlpZiAoY29uZi0+bWFjX2FkZHIpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJTZXQgJXBNXG4iLCBjb25mLT5tYWNfYWRkcik7Ci0JCW1lbWNweShwcml2LT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKwlpZiAocHJpdi0+dmlmKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSB2aWYgIT0gTlVMTFxuIik7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoaXdsX3NldF9tb2RlKHByaXYsIGNvbmYtPnR5cGUpID09IC1FQUdBSU4pCisJcHJpdi0+dmlmID0gdmlmOworCXByaXYtPml3X21vZGUgPSB2aWYtPnR5cGU7CisKKwlpZiAodmlmLT5hZGRyKSB7CisJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiU2V0ICVwTVxuIiwgdmlmLT5hZGRyKTsKKwkJbWVtY3B5KHByaXYtPm1hY19hZGRyLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsKKwl9CisKKwlpZiAoaXdsX3NldF9tb2RlKHByaXYsIHZpZi0+dHlwZSkgPT0gLUVBR0FJTikKIAkJLyogd2UgYXJlIG5vdCByZWFkeSwgd2lsbCBydW4gYWdhaW4gd2hlbiByZWFkeSAqLwogCQlzZXRfYml0KFNUQVRVU19NT0RFX1BFTkRJTkcsICZwcml2LT5zdGF0dXMpOwogCisgb3V0OgogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCiAJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGVycjsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX21hY19hZGRfaW50ZXJmYWNlKTsKIAogdm9pZCBpd2xfbWFjX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gaHctPnByaXY7CiAKQEAgLTI2NDksNyArMjY3Nyw3IEBACiAJCXByaXYtPnN0YWdpbmdfcnhvbi5maWx0ZXJfZmxhZ3MgJj0gflJYT05fRklMVEVSX0FTU09DX01TSzsKIAkJaXdsY29yZV9jb21taXRfcnhvbihwcml2KTsKIAl9Ci0JaWYgKHByaXYtPnZpZiA9PSBjb25mLT52aWYpIHsKKwlpZiAocHJpdi0+dmlmID09IHZpZikgewogCQlwcml2LT52aWYgPSBOVUxMOwogCQltZW1zZXQocHJpdi0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKIAl9CkBAIC0yNjg5LDYgKzI3MTcsMjEgQEAKIAkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIHNjYW5uaW5nXG4iKTsKIAl9CiAKKwlpZiAoY2hhbmdlZCAmIChJRUVFODAyMTFfQ09ORl9DSEFOR0VfU01QUyB8CisJCSAgICAgICBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCkpIHsKKwkJLyogbWFjODAyMTEgdXNlcyBzdGF0aWMgZm9yIG5vbi1IVCB3aGljaCBpcyB3aGF0IHdlIHdhbnQgKi8KKwkJcHJpdi0+Y3VycmVudF9odF9jb25maWcuc21wcyA9IGNvbmYtPnNtcHNfbW9kZTsKKworCQkvKgorCQkgKiBSZWNhbGN1bGF0ZSBjaGFpbiBjb3VudHMuCisJCSAqCisJCSAqIElmIG1vbml0b3IgbW9kZSBpcyBlbmFibGVkIHRoZW4gbWFjODAyMTEgd2lsbAorCQkgKiBzZXQgdXAgdGhlIFNNIFBTIG1vZGUgdG8gT0ZGIGlmIGFuIEhUIGNoYW5uZWwgaXMKKwkJICogY29uZmlndXJlZC4KKwkJICovCisJCWlmIChwcml2LT5jZmctPm9wcy0+aGNtZC0+c2V0X3J4b25fY2hhaW4pCisJCQlwcml2LT5jZmctPm9wcy0+aGNtZC0+c2V0X3J4b25fY2hhaW4ocHJpdik7CisJfQogCiAJLyogZHVyaW5nIHNjYW5uaW5nIG1hYzgwMjExIHdpbGwgZGVsYXkgY2hhbm5lbCBzZXR0aW5nIHVudGlsCiAJICogc2NhbiBmaW5pc2ggd2l0aCBjaGFuZ2VkID0gMApAQCAtMjc4NiwxMCArMjgyOSw2IEBACiAJCWl3bF9zZXRfdHhfcG93ZXIocHJpdiwgY29uZi0+cG93ZXJfbGV2ZWwsIGZhbHNlKTsKIAl9CiAKLQkvKiBjYWxsIHRvIGVuc3VyZSB0aGF0IDQ5NjUgcnhfY2hhaW4gaXMgc2V0IHByb3Blcmx5IGluIG1vbml0b3IgbW9kZSAqLwotCWlmIChwcml2LT5jZmctPm9wcy0+aGNtZC0+c2V0X3J4b25fY2hhaW4pCi0JCXByaXYtPmNmZy0+b3BzLT5oY21kLT5zZXRfcnhvbl9jaGFpbihwcml2KTsKLQogCWlmICghaXdsX2lzX3JlYWR5KHByaXYpKSB7CiAJCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAibGVhdmUgLSBub3QgcmVhZHlcbiIpOwogCQlnb3RvIG91dDsKQEAgLTI4MTIsNDIgKzI4NTEsNiBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfbWFjX2NvbmZpZyk7CiAKLWludCBpd2xfbWFjX2dldF90eF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKLXsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlpbnQgaSwgYXZhaWw7Ci0Jc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxOwotCXN0cnVjdCBpd2xfcXVldWUgKnE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCUlXTF9ERUJVR19NQUM4MDIxMShwcml2LCAiZW50ZXJcbiIpOwotCi0JaWYgKCFpd2xfaXNfcmVhZHlfcmYocHJpdikpIHsKLQkJSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZSAtIFJGIG5vdCByZWFkeVxuIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQUNfTlVNOyBpKyspIHsKLQkJdHhxID0gJnByaXYtPnR4cVtpXTsKLQkJcSA9ICZ0eHEtPnE7Ci0JCWF2YWlsID0gaXdsX3F1ZXVlX3NwYWNlKHEpOwotCi0JCXN0YXRzW2ldLmxlbiA9IHEtPm5fd2luZG93IC0gYXZhaWw7Ci0JCXN0YXRzW2ldLmxpbWl0ID0gcS0+bl93aW5kb3cgLSBxLT5oaWdoX21hcms7Ci0JCXN0YXRzW2ldLmNvdW50ID0gcS0+bl93aW5kb3c7Ci0KLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCi0JSVdMX0RFQlVHX01BQzgwMjExKHByaXYsICJsZWF2ZVxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLUVYUE9SVF9TWU1CT0woaXdsX21hY19nZXRfdHhfc3RhdHMpOwotCiB2b2lkIGl3bF9tYWNfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwpAQCAtMzE5Nyw2ICszMjAwLDIwNyBAQAogRVhQT1JUX1NZTUJPTChpd2xfdXBkYXRlX3N0YXRzKTsKICNlbmRpZgogCitjb25zdCBzdGF0aWMgY2hhciAqZ2V0X2Nzcl9zdHJpbmcoaW50IGNtZCkKK3sKKwlzd2l0Y2ggKGNtZCkgeworCQlJV0xfQ01EKENTUl9IV19JRl9DT05GSUdfUkVHKTsKKwkJSVdMX0NNRChDU1JfSU5UX0NPQUxFU0NJTkcpOworCQlJV0xfQ01EKENTUl9JTlQpOworCQlJV0xfQ01EKENTUl9JTlRfTUFTSyk7CisJCUlXTF9DTUQoQ1NSX0ZIX0lOVF9TVEFUVVMpOworCQlJV0xfQ01EKENTUl9HUElPX0lOKTsKKwkJSVdMX0NNRChDU1JfUkVTRVQpOworCQlJV0xfQ01EKENTUl9HUF9DTlRSTCk7CisJCUlXTF9DTUQoQ1NSX0hXX1JFVik7CisJCUlXTF9DTUQoQ1NSX0VFUFJPTV9SRUcpOworCQlJV0xfQ01EKENTUl9FRVBST01fR1ApOworCQlJV0xfQ01EKENTUl9PVFBfR1BfUkVHKTsKKwkJSVdMX0NNRChDU1JfR0lPX1JFRyk7CisJCUlXTF9DTUQoQ1NSX0dQX1VDT0RFX1JFRyk7CisJCUlXTF9DTUQoQ1NSX0dQX0RSSVZFUl9SRUcpOworCQlJV0xfQ01EKENTUl9VQ09ERV9EUlZfR1AxKTsKKwkJSVdMX0NNRChDU1JfVUNPREVfRFJWX0dQMik7CisJCUlXTF9DTUQoQ1NSX0xFRF9SRUcpOworCQlJV0xfQ01EKENTUl9EUkFNX0lOVF9UQkxfUkVHKTsKKwkJSVdMX0NNRChDU1JfR0lPX0NISUNLRU5fQklUUyk7CisJCUlXTF9DTUQoQ1NSX0FOQV9QTExfQ0ZHKTsKKwkJSVdMX0NNRChDU1JfSFdfUkVWX1dBX1JFRyk7CisJCUlXTF9DTUQoQ1NSX0RCR19IUEVUX01FTV9SRUcpOworCWRlZmF1bHQ6CisJCXJldHVybiAiVU5LTk9XTiI7CisKKwl9Cit9CisKK3ZvaWQgaXdsX2R1bXBfY3NyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpbnQgaTsKKwl1MzIgY3NyX3RibFtdID0geworCQlDU1JfSFdfSUZfQ09ORklHX1JFRywKKwkJQ1NSX0lOVF9DT0FMRVNDSU5HLAorCQlDU1JfSU5ULAorCQlDU1JfSU5UX01BU0ssCisJCUNTUl9GSF9JTlRfU1RBVFVTLAorCQlDU1JfR1BJT19JTiwKKwkJQ1NSX1JFU0VULAorCQlDU1JfR1BfQ05UUkwsCisJCUNTUl9IV19SRVYsCisJCUNTUl9FRVBST01fUkVHLAorCQlDU1JfRUVQUk9NX0dQLAorCQlDU1JfT1RQX0dQX1JFRywKKwkJQ1NSX0dJT19SRUcsCisJCUNTUl9HUF9VQ09ERV9SRUcsCisJCUNTUl9HUF9EUklWRVJfUkVHLAorCQlDU1JfVUNPREVfRFJWX0dQMSwKKwkJQ1NSX1VDT0RFX0RSVl9HUDIsCisJCUNTUl9MRURfUkVHLAorCQlDU1JfRFJBTV9JTlRfVEJMX1JFRywKKwkJQ1NSX0dJT19DSElDS0VOX0JJVFMsCisJCUNTUl9BTkFfUExMX0NGRywKKwkJQ1NSX0hXX1JFVl9XQV9SRUcsCisJCUNTUl9EQkdfSFBFVF9NRU1fUkVHCisJfTsKKwlJV0xfRVJSKHByaXYsICJDU1IgdmFsdWVzOlxuIik7CisJSVdMX0VSUihwcml2LCAiKDJuZCBieXRlIG9mIENTUl9JTlRfQ09BTEVTQ0lORyBpcyAiCisJCSJDU1JfSU5UX1BFUklPRElDX1JFRylcbiIpOworCWZvciAoaSA9IDA7IGkgPCAgQVJSQVlfU0laRShjc3JfdGJsKTsgaSsrKSB7CisJCUlXTF9FUlIocHJpdiwgIiAgJTI1czogMFglMDh4XG4iLAorCQkJZ2V0X2Nzcl9zdHJpbmcoY3NyX3RibFtpXSksCisJCQlpd2xfcmVhZDMyKHByaXYsIGNzcl90YmxbaV0pKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9kdW1wX2Nzcik7CisKK2NvbnN0IHN0YXRpYyBjaGFyICpnZXRfZmhfc3RyaW5nKGludCBjbWQpCit7CisJc3dpdGNoIChjbWQpIHsKKwkJSVdMX0NNRChGSF9SU0NTUl9DSE5MMF9TVFRTX1dQVFJfUkVHKTsKKwkJSVdMX0NNRChGSF9SU0NTUl9DSE5MMF9SQkRDQl9CQVNFX1JFRyk7CisJCUlXTF9DTUQoRkhfUlNDU1JfQ0hOTDBfV1BUUik7CisJCUlXTF9DTUQoRkhfTUVNX1JDU1JfQ0hOTDBfQ09ORklHX1JFRyk7CisJCUlXTF9DTUQoRkhfTUVNX1JTU1JfU0hBUkVEX0NUUkxfUkVHKTsKKwkJSVdMX0NNRChGSF9NRU1fUlNTUl9SWF9TVEFUVVNfUkVHKTsKKwkJSVdMX0NNRChGSF9NRU1fUlNTUl9SWF9FTkFCTEVfRVJSX0lSUTJEUlYpOworCQlJV0xfQ01EKEZIX1RTU1JfVFhfU1RBVFVTX1JFRyk7CisJCUlXTF9DTUQoRkhfVFNTUl9UWF9FUlJPUl9SRUcpOworCWRlZmF1bHQ6CisJCXJldHVybiAiVU5LTk9XTiI7CisKKwl9Cit9CisKK2ludCBpd2xfZHVtcF9maChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNoYXIgKipidWYsIGJvb2wgZGlzcGxheSkKK3sKKwlpbnQgaTsKKyNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCWludCBwb3MgPSAwOworCXNpemVfdCBidWZzeiA9IDA7CisjZW5kaWYKKwl1MzIgZmhfdGJsW10gPSB7CisJCUZIX1JTQ1NSX0NITkwwX1NUVFNfV1BUUl9SRUcsCisJCUZIX1JTQ1NSX0NITkwwX1JCRENCX0JBU0VfUkVHLAorCQlGSF9SU0NTUl9DSE5MMF9XUFRSLAorCQlGSF9NRU1fUkNTUl9DSE5MMF9DT05GSUdfUkVHLAorCQlGSF9NRU1fUlNTUl9TSEFSRURfQ1RSTF9SRUcsCisJCUZIX01FTV9SU1NSX1JYX1NUQVRVU19SRUcsCisJCUZIX01FTV9SU1NSX1JYX0VOQUJMRV9FUlJfSVJRMkRSViwKKwkJRkhfVFNTUl9UWF9TVEFUVVNfUkVHLAorCQlGSF9UU1NSX1RYX0VSUk9SX1JFRworCX07CisjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKKwlpZiAoZGlzcGxheSkgeworCQlidWZzeiA9IEFSUkFZX1NJWkUoZmhfdGJsKSAqIDQ4ICsgNDA7CisJCSpidWYgPSBrbWFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwkJaWYgKCEqYnVmKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXBvcyArPSBzY25wcmludGYoKmJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJIkZIIHJlZ2lzdGVyIHZhbHVlczpcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmaF90YmwpOyBpKyspIHsKKwkJCXBvcyArPSBzY25wcmludGYoKmJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJIiAgJTM0czogMFglMDh4XG4iLAorCQkJCWdldF9maF9zdHJpbmcoZmhfdGJsW2ldKSwKKwkJCQlpd2xfcmVhZF9kaXJlY3QzMihwcml2LCBmaF90YmxbaV0pKTsKKwkJfQorCQlyZXR1cm4gcG9zOworCX0KKyNlbmRpZgorCUlXTF9FUlIocHJpdiwgIkZIIHJlZ2lzdGVyIHZhbHVlczpcbiIpOworCWZvciAoaSA9IDA7IGkgPCAgQVJSQVlfU0laRShmaF90YmwpOyBpKyspIHsKKwkJSVdMX0VSUihwcml2LCAiICAlMzRzOiAwWCUwOHhcbiIsCisJCQlnZXRfZmhfc3RyaW5nKGZoX3RibFtpXSksCisJCQlpd2xfcmVhZF9kaXJlY3QzMihwcml2LCBmaF90YmxbaV0pKTsKKwl9CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9kdW1wX2ZoKTsKKworc3RhdGljIHZvaWQgaXdsX2ZvcmNlX3JmX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCXJldHVybjsKKworCWlmICghaXdsX2lzX2Fzc29jaWF0ZWQocHJpdikpIHsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgImZvcmNlIHJlc2V0IHJlamVjdGVkOiBub3QgYXNzb2NpYXRlZFxuIik7CisJCXJldHVybjsKKwl9CisJLyoKKwkgKiBUaGVyZSBpcyBubyBlYXN5IGFuZCBiZXR0ZXIgd2F5IHRvIGZvcmNlIHJlc2V0IHRoZSByYWRpbywKKwkgKiB0aGUgb25seSBrbm93biBtZXRob2QgaXMgc3dpdGNoaW5nIGNoYW5uZWwgd2hpY2ggd2lsbCBmb3JjZSB0bworCSAqIHJlc2V0IGFuZCB0dW5lIHRoZSByYWRpby4KKwkgKiBVc2UgaW50ZXJuYWwgc2hvcnQgc2NhbiAoc2luZ2xlIGNoYW5uZWwpIG9wZXJhdGlvbiB0byBzaG91bGQKKwkgKiBhY2hpZXZlIHRoaXMgb2JqZWN0aXZlLgorCSAqIERyaXZlciBzaG91bGQgcmVzZXQgdGhlIHJhZGlvIHdoZW4gbnVtYmVyIG9mIGNvbnNlY3V0aXZlIG1pc3NlZAorCSAqIGJlYWNvbiwgb3IgYW55IG90aGVyIHVDb2RlIGVycm9yIGNvbmRpdGlvbiBkZXRlY3RlZC4KKwkgKi8KKwlJV0xfREVCVUdfSU5GTyhwcml2LCAicGVyZm9ybSByYWRpbyByZXNldC5cbiIpOworCWl3bF9pbnRlcm5hbF9zaG9ydF9od19zY2FuKHByaXYpOworCXJldHVybjsKK30KKworCitpbnQgaXdsX2ZvcmNlX3Jlc2V0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IG1vZGUpCit7CisJc3RydWN0IGl3bF9mb3JjZV9yZXNldCAqZm9yY2VfcmVzZXQ7CisKKwlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG1vZGUgPj0gSVdMX01BWF9GT1JDRV9SRVNFVCkgeworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiaW52YWxpZCByZXNldCByZXF1ZXN0LlxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlmb3JjZV9yZXNldCA9ICZwcml2LT5mb3JjZV9yZXNldFttb2RlXTsKKwlmb3JjZV9yZXNldC0+cmVzZXRfcmVxdWVzdF9jb3VudCsrOworCWlmIChmb3JjZV9yZXNldC0+bGFzdF9mb3JjZV9yZXNldF9qaWZmaWVzICYmCisJICAgIHRpbWVfYWZ0ZXIoZm9yY2VfcmVzZXQtPmxhc3RfZm9yY2VfcmVzZXRfamlmZmllcyArCisJICAgIGZvcmNlX3Jlc2V0LT5yZXNldF9kdXJhdGlvbiwgamlmZmllcykpIHsKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgImZvcmNlIHJlc2V0IHJlamVjdGVkXG4iKTsKKwkJZm9yY2VfcmVzZXQtPnJlc2V0X3JlamVjdF9jb3VudCsrOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisJZm9yY2VfcmVzZXQtPnJlc2V0X3N1Y2Nlc3NfY291bnQrKzsKKwlmb3JjZV9yZXNldC0+bGFzdF9mb3JjZV9yZXNldF9qaWZmaWVzID0gamlmZmllczsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAicGVyZm9ybSBmb3JjZSByZXNldCAoJWQpXG4iLCBtb2RlKTsKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIElXTF9SRl9SRVNFVDoKKwkJaXdsX2ZvcmNlX3JmX3Jlc2V0KHByaXYpOworCQlicmVhazsKKwljYXNlIElXTF9GV19SRVNFVDoKKwkJSVdMX0VSUihwcml2LCAiT24gZGVtYW5kIGZpcm13YXJlIHJlbG9hZFxuIik7CisJCS8qIFNldCB0aGUgRlcgZXJyb3IgZmxhZyAtLSBjbGVhcmVkIG9uIGl3bF9kb3duICovCisJCXNldF9iaXQoU1RBVFVTX0ZXX0VSUk9SLCAmcHJpdi0+c3RhdHVzKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOworCQkvKgorCQkgKiBLZWVwIHRoZSByZXN0YXJ0IHByb2Nlc3MgZnJvbSB0cnlpbmcgdG8gc2VuZCBob3N0CisJCSAqIGNvbW1hbmRzIGJ5IGNsZWFyaW5nIHRoZSBJTklUIHN0YXR1cyBiaXQKKwkJICovCisJCWNsZWFyX2JpdChTVEFUVVNfUkVBRFksICZwcml2LT5zdGF0dXMpOworCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnJlc3RhcnQpOworCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CisKICNpZmRlZiBDT05GSUdfUE0KIAogaW50IGl3bF9wY2lfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY29yZS5oCmluZGV4IGI2OWU5NzIuLjRlZjc3MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNvcmUuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1jb3JlLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC02Myw4ICs2Myw2IEBACiAjaWZuZGVmIF9faXdsX2NvcmVfaF9fCiAjZGVmaW5lIF9faXdsX2NvcmVfaF9fCiAKLSNpbmNsdWRlIDxnZW5lcmF0ZWQvdXRzcmVsZWFzZS5oPgotCiAvKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBmb3J3YXJkIGRlY2xhcmF0aW9ucyAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtNzIsOCArNzAsOCBAQAogc3RydWN0IGl3bF9jbWQ7CiAKIAotI2RlZmluZSBJV0xXSUZJX1ZFUlNJT04gVVRTX1JFTEVBU0UgIi1rIgotI2RlZmluZSBEUlZfQ09QWVJJR0hUCSJDb3B5cmlnaHQoYykgMjAwMy0yMDA5IEludGVsIENvcnBvcmF0aW9uIgorI2RlZmluZSBJV0xXSUZJX1ZFUlNJT04gImluLXRyZWU6IgorI2RlZmluZSBEUlZfQ09QWVJJR0hUCSJDb3B5cmlnaHQoYykgMjAwMy0yMDEwIEludGVsIENvcnBvcmF0aW9uIgogI2RlZmluZSBEUlZfQVVUSE9SICAgICAiPGlsd0BsaW51eC5pbnRlbC5jb20+IgogCiAjZGVmaW5lIElXTF9QQ0lfREVWSUNFKGRldiwgc3ViZGV2LCBjZmcpIFwKQEAgLTExOSw2ICsxMTcsNyBAQAogc3RydWN0IGl3bF90ZW1wX29wcyB7CiAJdm9pZCAoKnRlbXBlcmF0dXJlKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogCXZvaWQgKCpzZXRfY3Rfa2lsbCkoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwl2b2lkICgqc2V0X2NhbGliX3ZlcnNpb24pKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB9OwogCiBzdHJ1Y3QgaXdsX3Vjb2RlX29wcyB7CkBAIC0xNjksOCArMTY4LDExIEBACiAJaW50ICgqaXNfdmFsaWRfcnRjX2RhdGFfYWRkcikodTMyIGFkZHIpOwogCS8qIDFzdCB1Y29kZSBsb2FkICovCiAJaW50ICgqbG9hZF91Y29kZSkoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLQl2b2lkICgqZHVtcF9uaWNfZXZlbnRfbG9nKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGJvb2wgZnVsbF9sb2cpOworCWludCAoKmR1bXBfbmljX2V2ZW50X2xvZykoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCSAgYm9vbCBmdWxsX2xvZywgY2hhciAqKmJ1ZiwgYm9vbCBkaXNwbGF5KTsKIAl2b2lkICgqZHVtcF9uaWNfZXJyb3JfbG9nKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOworCXZvaWQgKCpkdW1wX2Nzcikoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKwlpbnQgKCpkdW1wX2ZoKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNoYXIgKipidWYsIGJvb2wgZGlzcGxheSk7CiAJaW50ICgqc2V0X2NoYW5uZWxfc3dpdGNoKShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUxNiBjaGFubmVsKTsKIAkvKiBwb3dlciBtYW5hZ2VtZW50ICovCiAJc3RydWN0IGl3bF9hcG1fb3BzIGFwbV9vcHM7CkBAIC0xODcsNiArMTg5LDggQEAKIAogCS8qIHRlbXBlcmF0dXJlICovCiAJc3RydWN0IGl3bF90ZW1wX29wcyB0ZW1wX29wczsKKwkvKiBzdGF0aW9uIG1hbmFnZW1lbnQgKi8KKwl2b2lkICgqYWRkX2JjYXN0X3N0YXRpb24pKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiB9OwogCiBzdHJ1Y3QgaXdsX2xlZF9vcHMgewpAQCAtMjMwLDggKzIzNCw5IEBACiAgKiBAY2hhaW5fbm9pc2VfbnVtX2JlYWNvbnM6IG51bWJlciBvZiBiZWFjb25zIHVzZWQgdG8gY29tcHV0ZSBjaGFpbiBub2lzZQogICogQGFkdl90aGVybWFsX3Rocm90dGxlOiBzdXBwb3J0IGFkdmFuY2UgdGhlcm1hbCB0aHJvdHRsZQogICogQHN1cHBvcnRfY3Rfa2lsbF9leGl0OiBzdXBwb3J0IGN0IGtpbGwgZXhpdCBjb25kaXRpb24KLSAqIEBzbV9wc19tb2RlOiBzcGF0aWFsIG11bHRpcGxleGluZyBwb3dlciBzYXZlIG1vZGUKICAqIEBzdXBwb3J0X3dpbWF4X2NvZXhpc3Q6IHN1cHBvcnQgd2ltYXgvd2lmaSBjby1leGlzdAorICogQHBsY3BfZGVsdGFfdGhyZXNob2xkOiBwbGNwIGVycm9yIHJhdGUgdGhyZXNob2xkIHVzZWQgdG8gdHJpZ2dlcgorICoJcmFkaW8gdHVuaW5nIHdoZW4gdGhlcmUgaXMgYSBoaWdoIHJlY2VpdmluZyBwbGNwIGVycm9yIHJhdGUKICAqCiAgKiBXZSBlbmFibGUgdGhlIGRyaXZlciB0byBiZSBiYWNrd2FyZCBjb21wYXRpYmxlIHdydCBBUEkgdmVyc2lvbi4gVGhlCiAgKiBkcml2ZXIgc3BlY2lmaWVzIHdoaWNoIEFQSXMgaXQgc3VwcG9ydHMgKHdpdGggQHVjb2RlX2FwaV9tYXggYmVpbmcgdGhlCkBAIC0yODcsOCArMjkyLDkgQEAKIAljb25zdCBib29sIHN1cHBvcnRzX2lkbGU7CiAJYm9vbCBhZHZfdGhlcm1hbF90aHJvdHRsZTsKIAlib29sIHN1cHBvcnRfY3Rfa2lsbF9leGl0OwotCXU4IHNtX3BzX21vZGU7CiAJY29uc3QgYm9vbCBzdXBwb3J0X3dpbWF4X2NvZXhpc3Q7CisJdTggcGxjcF9kZWx0YV90aHJlc2hvbGQ7CisJczMyIGNoYWluX25vaXNlX3NjYWxlOwogfTsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzMyLDEzICszMzgsMTEgQEAKIGludCBpd2xfY29tbWl0X3J4b24oc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfc2V0X21vZGUoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbW9kZSk7CiBpbnQgaXdsX21hY19hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZik7CisJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwogdm9pZCBpd2xfbWFjX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKTsKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwogaW50IGl3bF9tYWNfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2hhbmdlZCk7CiB2b2lkIGl3bF9jb25maWdfYXAoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKLWludCBpd2xfbWFjX2dldF90eF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cyk7CiB2b2lkIGl3bF9tYWNfcmVzZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIGludCBpd2xfYWxsb2NfdHhxX21lbShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogdm9pZCBpd2xfZnJlZV90eHFfbWVtKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CkBAIC00MTEsMTMgKzQxNSwxMyBAQAogdm9pZCBpd2xfY21kX3F1ZXVlX2ZyZWUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfcnhfcXVldWVfYWxsb2Moc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX3J4X2hhbmRsZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotaW50IGl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKK3ZvaWQgaXdsX3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJCSAgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcSk7CiB2b2lkIGl3bF9yeF9xdWV1ZV9yZXNldChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfcXVldWUgKnJ4cSk7CiB2b2lkIGl3bF9yeF9yZXBsZW5pc2goc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIHZvaWQgaXdsX3J4X3JlcGxlbmlzaF9ub3coc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfcnhfaW5pdChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfcXVldWUgKnJ4cSk7Ci1pbnQgaXdsX3J4X3F1ZXVlX3Jlc3RvY2soc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK3ZvaWQgaXdsX3J4X3F1ZXVlX3Jlc3RvY2soc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfcnhfcXVldWVfc3BhY2UoY29uc3Qgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcSk7CiB2b2lkIGl3bF9yeF9hbGxvY2F0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGdmcF90IHByaW9yaXR5KTsKIHZvaWQgaXdsX3R4X2NtZF9jb21wbGV0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKQEAgLTQyNSw2ICs0MjksOCBAQAogLyogSGFuZGxlcnMgKi8KIHZvaWQgaXdsX3J4X21pc3NlZF9iZWFjb25fbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICAgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKK3ZvaWQgaXdsX3J4X3NwZWN0cnVtX21lYXN1cmVfbm90aWYoc3RydWN0IGl3bF9wcml2ICpwcml2LAorCQkJCQkgIHN0cnVjdCBpd2xfcnhfbWVtX2J1ZmZlciAqcnhiKTsKIHZvaWQgaXdsX3J4X3N0YXRpc3RpY3Moc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICAgc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGIpOwogdm9pZCBpd2xfcmVwbHlfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCkBAIC00NDUsOSArNDUxLDkgQEAKIHZvaWQgaXdsX2h3X3R4cV9jdHhfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwogaW50IGl3bF9od190eF9xdWV1ZV9pbml0KHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEpOwotaW50IGl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSk7CiB2b2lkIGl3bF9mcmVlX3RmZHNfaW5fcXVldWUoc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgIGludCBzdGFfaWQsIGludCB0aWQsIGludCBmcmVlZCk7Cit2b2lkIGl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSk7CiBpbnQgaXdsX3R4X3F1ZXVlX2luaXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBzdHJ1Y3QgaXdsX3R4X3F1ZXVlICp0eHEsCiAJCSAgICAgIGludCBzbG90c19udW0sIHUzMiB0eHFfaWQpOwogdm9pZCBpd2xfdHhfcXVldWVfZnJlZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGludCB0eHFfaWQpOwpAQCAtNDk3LDYgKzUwMyw4IEBACiBpbnQgaXdsX3NjYW5fY2FuY2VsKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3NjYW5fY2FuY2VsX3RpbWVvdXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIG1zKTsKIGludCBpd2xfbWFjX2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSk7CitpbnQgaXdsX2ludGVybmFsX3Nob3J0X2h3X3NjYW4oc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfZm9yY2VfcmVzZXQoc3RydWN0IGl3bF9wcml2ICpwcml2LCBpbnQgbW9kZSk7CiB1MTYgaXdsX2ZpbGxfcHJvYmVfcmVxKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGllZWU4MDIxMV9tZ210ICpmcmFtZSwKIAkJICAgICAgIGNvbnN0IHU4ICppZSwgaW50IGllX2xlbiwgaW50IGxlZnQpOwogdm9pZCBpd2xfc2V0dXBfcnhfc2Nhbl9oYW5kbGVycyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwpAQCAtNTI3LDE0ICs1MzUsNiBAQAogaW50IGl3bF9jYWxpYl9zZXQoc3RydWN0IGl3bF9jYWxpYl9yZXN1bHQgKnJlcywgY29uc3QgdTggKmJ1ZiwgaW50IGxlbik7CiB2b2lkIGl3bF9jYWxpYl9mcmVlX3Jlc3VsdHMoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFNwZWN0cnVtIE1lYXN1cmVlbXRucyBpbiAgaXdsLXNwZWN0cnVtLmMKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0jaWZkZWYgQ09ORklHX0lXTFdJRklfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKLXZvaWQgaXdsX3NldHVwX3NwZWN0cnVtX2hhbmRsZXJzKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIGl3bF9zZXR1cF9zcGVjdHJ1bV9oYW5kbGVycyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpIHt9Ci0jZW5kaWYKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogICBTIGUgbiBkIGkgbiBnICAgICBIIG8gcyB0ICAgICBDIG8gbSBtIGEgbiBkIHMgICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC01ODMsNyArNTgzLDEwIEBACiAqICBFcnJvciBIYW5kbGluZyBEZWJ1Z2dpbmcKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHZvaWQgaXdsX2R1bXBfbmljX2Vycm9yX2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotdm9pZCBpd2xfZHVtcF9uaWNfZXZlbnRfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgYm9vbCBmdWxsX2xvZyk7CitpbnQgaXdsX2R1bXBfbmljX2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCisJCQkgICBib29sIGZ1bGxfbG9nLCBjaGFyICoqYnVmLCBib29sIGRpc3BsYXkpOwordm9pZCBpd2xfZHVtcF9jc3Ioc3RydWN0IGl3bF9wcml2ICpwcml2KTsKK2ludCBpd2xfZHVtcF9maChzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNoYXIgKipidWYsIGJvb2wgZGlzcGxheSk7CiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIHZvaWQgaXdsX3ByaW50X3J4X2NvbmZpZ19jbWQoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKICNlbHNlCkBAIC02MDMsNyArNjA2LDcgQEAKIC8qKioqKioqKioqKioqKiogRFJJVkVSIFNUQVRVUyBGVU5DVElPTlMgICAqKioqKi8KIAogI2RlZmluZSBTVEFUVVNfSENNRF9BQ1RJVkUJMAkvKiBob3N0IGNvbW1hbmQgaW4gcHJvZ3Jlc3MgKi8KLSNkZWZpbmUgU1RBVFVTX0hDTURfU1lOQ19BQ1RJVkUJMQkvKiBzeW5jIGhvc3QgY29tbWFuZCBpbiBwcm9ncmVzcyAqLworLyogMSBpcyB1bnVzZWQgKHVzZWQgdG8gYmUgU1RBVFVTX0hDTURfU1lOQ19BQ1RJVkUpICovCiAjZGVmaW5lIFNUQVRVU19JTlRfRU5BQkxFRAkyCiAjZGVmaW5lIFNUQVRVU19SRl9LSUxMX0hXCTMKICNkZWZpbmUgU1RBVFVTX0NUX0tJTEwJCTQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWNzci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmgKaW5kZXggMWVjOGNiNC4uODA4YjcxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtY3NyLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zNjksNyArMzY5LDcgQEAKICNkZWZpbmUgQ1NSX0dQX0RSSVZFUl9SRUdfQklUX1JBRElPX1NLVV8zeDNfSFlCCSAgICAoMHgwMDAwMDAwMCkKICNkZWZpbmUgQ1NSX0dQX0RSSVZFUl9SRUdfQklUX1JBRElPX1NLVV8yeDJfSFlCCSAgICAoMHgwMDAwMDAwMSkKICNkZWZpbmUgQ1NSX0dQX0RSSVZFUl9SRUdfQklUX1JBRElPX1NLVV8yeDJfSVBBCSAgICAoMHgwMDAwMDAwMikKLQorI2RlZmluZSBDU1JfR1BfRFJJVkVSX1JFR19CSVRfQ0FMSUJfVkVSU0lPTjYJKDB4MDAwMDAwMDQpCiAKIC8qIEdJTyBDaGlja2VuIEJpdHMgKFBDSSBFeHByZXNzIGJ1cyBsaW5rIHBvd2VyIG1hbmFnZW1lbnQpICovCiAjZGVmaW5lIENTUl9HSU9fQ0hJQ0tFTl9CSVRTX1JFR19CSVRfTDFBX05PX0wwU19SWCAgKDB4MDA4MDAwMDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWcuaAppbmRleCBkNjEyOTNhLi4xYzdiNTNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Zy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QuCiAgKgpAQCAtNjcsNTcgKzY3LDYgQEAKIAkJCSAgICAgICBEVU1QX1BSRUZJWF9PRkZTRVQsIDE2LCAxLCBwLCBsZW4sIDEpOwlcCiB9IHdoaWxlICgwKQogCi0jaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUdGUwotc3RydWN0IGl3bF9kZWJ1Z2ZzIHsKLQljb25zdCBjaGFyICpuYW1lOwotCXN0cnVjdCBkZW50cnkgKmRpcl9kcnY7Ci0Jc3RydWN0IGRlbnRyeSAqZGlyX2RhdGE7Ci0Jc3RydWN0IGRlbnRyeSAqZGlyX2RlYnVnOwotCXN0cnVjdCBkZW50cnkgKmRpcl9yZjsKLQlzdHJ1Y3QgZGlyX2RhdGFfZmlsZXMgewotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3NyYW07Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfbnZtOwotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3N0YXRpb25zOwotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2xvZ19ldmVudDsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV9jaGFubmVsczsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV9zdGF0dXM7Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfaW50ZXJydXB0OwotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3FvczsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV90aGVybWFsX3Rocm90dGxpbmc7Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfbGVkOwotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2Rpc2FibGVfaHQ0MDsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV9zbGVlcF9sZXZlbF9vdmVycmlkZTsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV9jdXJyZW50X3NsZWVwX2NvbW1hbmQ7Ci0JfSBkYmdmc19kYXRhX2ZpbGVzOwotCXN0cnVjdCBkaXJfcmZfZmlsZXMgewotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX2Rpc2FibGVfc2Vuc2l0aXZpdHk7Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfZGlzYWJsZV9jaGFpbl9ub2lzZTsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV9kaXNhYmxlX3R4X3Bvd2VyOwotCX0gZGJnZnNfcmZfZmlsZXM7Ci0Jc3RydWN0IGRpcl9kZWJ1Z19maWxlcyB7Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfcnhfc3RhdGlzdGljczsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV90eF9zdGF0aXN0aWNzOwotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3RyYWZmaWNfbG9nOwotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3J4X3F1ZXVlOwotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3R4X3F1ZXVlOwotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3Vjb2RlX3J4X3N0YXRzOwotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3Vjb2RlX3R4X3N0YXRzOwotCQlzdHJ1Y3QgZGVudHJ5ICpmaWxlX3Vjb2RlX2dlbmVyYWxfc3RhdHM7Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfc2Vuc2l0aXZpdHk7Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfY2hhaW5fbm9pc2U7Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfdHhfcG93ZXI7Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfcG93ZXJfc2F2ZV9zdGF0dXM7Ci0JCXN0cnVjdCBkZW50cnkgKmZpbGVfY2xlYXJfdWNvZGVfc3RhdGlzdGljczsKLQkJc3RydWN0IGRlbnRyeSAqZmlsZV9jbGVhcl90cmFmZmljX3N0YXRpc3RpY3M7Ci0JfSBkYmdmc19kZWJ1Z19maWxlczsKLQl1MzIgc3JhbV9vZmZzZXQ7Ci0JdTMyIHNyYW1fbGVuOwotfTsKLQotaW50IGl3bF9kYmdmc19yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGNvbnN0IGNoYXIgKm5hbWUpOwotdm9pZCBpd2xfZGJnZnNfdW5yZWdpc3RlcihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwotI2VuZGlmCi0KICNlbHNlCiAjZGVmaW5lIElXTF9ERUJVRyhfX3ByaXYsIGxldmVsLCBmbXQsIGFyZ3MuLi4pCiAjZGVmaW5lIElXTF9ERUJVR19MSU1JVChfX3ByaXYsIGxldmVsLCBmbXQsIGFyZ3MuLi4pCkBAIC0xMjYsOSArNzUsMTAgQEAKIHt9CiAjZW5kaWYJCQkJLyogQ09ORklHX0lXTFdJRklfREVCVUcgKi8KIAotCi0KLSNpZm5kZWYgQ09ORklHX0lXTFdJRklfREVCVUdGUworI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHRlMKK2ludCBpd2xfZGJnZnNfcmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgaXdsX2RiZ2ZzX3VucmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKKyNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBpd2xfZGJnZnNfcmVnaXN0ZXIoc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCBjaGFyICpuYW1lKQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGVidWdmcy5jCmluZGV4IDIxZTBmNjYuLjdiZjQ0ZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZWJ1Z2ZzLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTQxLDQzICs0MSwyOCBAQAogI2luY2x1ZGUgIml3bC1jYWxpYi5oIgogCiAvKiBjcmVhdGUgYW5kIHJlbW92ZSBvZiBmaWxlcyAqLwotI2RlZmluZSBERUJVR0ZTX0FERF9ESVIobmFtZSwgcGFyZW50KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCWRiZ2ZzLT5kaXJfIyNuYW1lID0gZGVidWdmc19jcmVhdGVfZGlyKCNuYW1lLCBwYXJlbnQpOyAgICAgICAgICBcCi0JaWYgKCEoZGJnZnMtPmRpcl8jI25hbWUpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJZ290byBlcnI7IAkJCQkJCVwKKyNkZWZpbmUgREVCVUdGU19BRERfRklMRShuYW1lLCBwYXJlbnQsIG1vZGUpIGRvIHsJCQlcCisJaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCNuYW1lLCBtb2RlLCBwYXJlbnQsIHByaXYsCQlcCisJCQkJICZpd2xfZGJnZnNfIyNuYW1lIyNfb3BzKSkJCVwKKwkJZ290byBlcnI7CQkJCQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBERUJVR0ZTX0FERF9GSUxFKG5hbWUsIHBhcmVudCwgbW9kZSkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgXAotCWRiZ2ZzLT5kYmdmc18jI3BhcmVudCMjX2ZpbGVzLmZpbGVfIyNuYW1lID0gICAgICAgICAgICAgICAgICAgICBcCi0JZGVidWdmc19jcmVhdGVfZmlsZSgjbmFtZSwgbW9kZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCQlkYmdmcy0+ZGlyXyMjcGFyZW50LCBwcml2LCAgICAgICAgICAgICAgXAotCQkJCSZpd2xfZGJnZnNfIyNuYW1lIyNfb3BzKTsgICAgICAgICAgICAgICBcCi0JaWYgKCEoZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUpKSAgICAgICAgICAgICAgIFwKLQkJZ290byBlcnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERFQlVHRlNfQUREX0JPT0wobmFtZSwgcGFyZW50LCBwdHIpIGRvIHsJCQlcCisJc3RydWN0IGRlbnRyeSAqX190bXA7CQkJCQkJXAorCV9fdG1wID0gZGVidWdmc19jcmVhdGVfYm9vbCgjbmFtZSwgU19JV1VTUiB8IFNfSVJVU1IsCQlcCisJCQkJICAgIHBhcmVudCwgcHRyKTsJCQlcCisJaWYgKElTX0VSUihfX3RtcCkgfHwgIV9fdG1wKQkJCQkJXAorCQlnb3RvIGVycjsJCQkJCQlcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIERFQlVHRlNfQUREX0JPT0wobmFtZSwgcGFyZW50LCBwdHIpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICBcCi0JZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUgPSAgICAgICAgICAgICAgICAgICAgIFwKLQlkZWJ1Z2ZzX2NyZWF0ZV9ib29sKCNuYW1lLCBTX0lXVVNSIHwgU19JUlVTUiwgICAgICAgICAgICAgICAgICAgXAotCQkJICAgIGRiZ2ZzLT5kaXJfIyNwYXJlbnQsIHB0cik7ICAgICAgICAgICAgICAgICAgXAotCWlmIChJU19FUlIoZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUpCQlcCi0JCQl8fCAhZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUpCVwKLQkJZ290byBlcnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIERFQlVHRlNfQUREX1gzMihuYW1lLCBwYXJlbnQsIHB0cikgZG8gewkJCQlcCisJc3RydWN0IGRlbnRyeSAqX190bXA7CQkJCQkJXAorCV9fdG1wID0gZGVidWdmc19jcmVhdGVfeDMyKCNuYW1lLCBTX0lXVVNSIHwgU19JUlVTUiwJCVwKKwkJCQkgICBwYXJlbnQsIHB0cik7CQkJXAorCWlmIChJU19FUlIoX190bXApIHx8ICFfX3RtcCkJCQkJCVwKKwkJZ290byBlcnI7CQkJCQkJXAogfSB3aGlsZSAoMCkKIAotI2RlZmluZSBERUJVR0ZTX0FERF9YMzIobmFtZSwgcGFyZW50LCBwdHIpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICBcCi0JZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUgPSAgICAgICAgICAgICAgICAgICAgIFwKLQlkZWJ1Z2ZzX2NyZWF0ZV94MzIoI25hbWUsIFNfSVJVU1IsIGRiZ2ZzLT5kaXJfIyNwYXJlbnQsIHB0cik7ICAgXAotCWlmIChJU19FUlIoZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUpCQlcCi0JCQl8fCAhZGJnZnMtPmRiZ2ZzXyMjcGFyZW50IyNfZmlsZXMuZmlsZV8jI25hbWUpCVwKLQkJZ290byBlcnI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIERFQlVHRlNfUkVNT1ZFKG5hbWUpICBkbyB7ICAgICAgICAgICAgICBcCi0JZGVidWdmc19yZW1vdmUobmFtZSk7ICAgICAgICAgICAgICAgICAgIFwKLQluYW1lID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotfSB3aGlsZSAoMCk7Ci0KIC8qIGZpbGUgb3BlcmF0aW9uICovCiAjZGVmaW5lIERFQlVHRlNfUkVBRF9GVU5DKG5hbWUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiBzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfIyNuYW1lIyNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgICAgICAgICAgICAgICBcCkBAIC0xMjUsNyArMTEwLDcgQEAKIAkJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CiAKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAljaGFyICpidWY7CiAJaW50IHBvcyA9IDA7CiAKQEAgLTE4NCw3ICsxNjksNyBAQAogCQkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpIHsKIAotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWNoYXIgKmJ1ZjsKIAlpbnQgcG9zID0gMDsKIAlpbnQgY250OwpAQCAtMjMyLDI4ICsyMTcsMjggQEAKIAlzc2l6ZV90IHJldDsKIAlpbnQgaTsKIAlpbnQgcG9zID0gMDsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzaXplX3QgYnVmc3o7CiAKIAkvKiBkZWZhdWx0IGlzIHRvIGR1bXAgdGhlIGVudGlyZSBkYXRhIHNlZ21lbnQgKi8KLQlpZiAoIXByaXYtPmRiZ2ZzLT5zcmFtX29mZnNldCAmJiAhcHJpdi0+ZGJnZnMtPnNyYW1fbGVuKSB7Ci0JCXByaXYtPmRiZ2ZzLT5zcmFtX29mZnNldCA9IDB4ODAwMDAwOworCWlmICghcHJpdi0+ZGJnZnNfc3JhbV9vZmZzZXQgJiYgIXByaXYtPmRiZ2ZzX3NyYW1fbGVuKSB7CisJCXByaXYtPmRiZ2ZzX3NyYW1fb2Zmc2V0ID0gMHg4MDAwMDA7CiAJCWlmIChwcml2LT51Y29kZV90eXBlID09IFVDT0RFX0lOSVQpCi0JCQlwcml2LT5kYmdmcy0+c3JhbV9sZW4gPSBwcml2LT51Y29kZV9pbml0X2RhdGEubGVuOworCQkJcHJpdi0+ZGJnZnNfc3JhbV9sZW4gPSBwcml2LT51Y29kZV9pbml0X2RhdGEubGVuOwogCQllbHNlCi0JCQlwcml2LT5kYmdmcy0+c3JhbV9sZW4gPSBwcml2LT51Y29kZV9kYXRhLmxlbjsKKwkJCXByaXYtPmRiZ2ZzX3NyYW1fbGVuID0gcHJpdi0+dWNvZGVfZGF0YS5sZW47CiAJfQotCWJ1ZnN6ID0gIDMwICsgcHJpdi0+ZGJnZnMtPnNyYW1fbGVuICogc2l6ZW9mKGNoYXIpICogMTA7CisJYnVmc3ogPSAgMzAgKyBwcml2LT5kYmdmc19zcmFtX2xlbiAqIHNpemVvZihjaGFyKSAqIDEwOwogCWJ1ZiA9IGttYWxsb2MoYnVmc3osIEdGUF9LRVJORUwpOwogCWlmICghYnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIAlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJzcmFtX2xlbjogMHgleFxuIiwKLQkJCXByaXYtPmRiZ2ZzLT5zcmFtX2xlbik7CisJCQlwcml2LT5kYmdmc19zcmFtX2xlbik7CiAJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAic3JhbV9vZmZzZXQ6IDB4JXhcbiIsCi0JCQlwcml2LT5kYmdmcy0+c3JhbV9vZmZzZXQpOwotCWZvciAoaSA9IHByaXYtPmRiZ2ZzLT5zcmFtX2xlbjsgaSA+IDA7IGkgLT0gNCkgewotCQl2YWwgPSBpd2xfcmVhZF90YXJnX21lbShwcml2LCBwcml2LT5kYmdmcy0+c3JhbV9vZmZzZXQgKyBcCi0JCQkJCXByaXYtPmRiZ2ZzLT5zcmFtX2xlbiAtIGkpOworCQkJcHJpdi0+ZGJnZnNfc3JhbV9vZmZzZXQpOworCWZvciAoaSA9IHByaXYtPmRiZ2ZzX3NyYW1fbGVuOyBpID4gMDsgaSAtPSA0KSB7CisJCXZhbCA9IGl3bF9yZWFkX3RhcmdfbWVtKHByaXYsIHByaXYtPmRiZ2ZzX3NyYW1fb2Zmc2V0ICsgXAorCQkJCQlwcml2LT5kYmdmc19zcmFtX2xlbiAtIGkpOwogCQlpZiAoaSA8IDQpIHsKIAkJCXN3aXRjaCAoaSkgewogCQkJY2FzZSAxOgpAQCAtMjkzLDExICsyNzgsMTEgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAoc3NjYW5mKGJ1ZiwgIiV4LCV4IiwgJm9mZnNldCwgJmxlbikgPT0gMikgewotCQlwcml2LT5kYmdmcy0+c3JhbV9vZmZzZXQgPSBvZmZzZXQ7Ci0JCXByaXYtPmRiZ2ZzLT5zcmFtX2xlbiA9IGxlbjsKKwkJcHJpdi0+ZGJnZnNfc3JhbV9vZmZzZXQgPSBvZmZzZXQ7CisJCXByaXYtPmRiZ2ZzX3NyYW1fbGVuID0gbGVuOwogCX0gZWxzZSB7Ci0JCXByaXYtPmRiZ2ZzLT5zcmFtX29mZnNldCA9IDA7Ci0JCXByaXYtPmRiZ2ZzLT5zcmFtX2xlbiA9IDA7CisJCXByaXYtPmRiZ2ZzX3NyYW1fb2Zmc2V0ID0gMDsKKwkJcHJpdi0+ZGJnZnNfc3JhbV9sZW4gPSAwOwogCX0KIAogCXJldHVybiBjb3VudDsKQEAgLTMwNiw3ICsyOTEsNyBAQAogc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3N0YXRpb25zX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGl3bF9zdGF0aW9uX2VudHJ5ICpzdGF0aW9uOwogCWludCBtYXhfc3RhID0gcHJpdi0+aHdfcGFyYW1zLm1heF9zdGF0aW9uczsKIAljaGFyICpidWY7CkBAIC0zNzYsNyArMzYxLDcgQEAKIAkJCQkgICAgICAgbG9mZl90ICpwcG9zKQogewogCXNzaXplX3QgcmV0OwotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWludCBwb3MgPSAwLCBvZnMgPSAwLCBidWZfc2l6ZSA9IDA7CiAJY29uc3QgdTggKnB0cjsKIAljaGFyICpidWY7CkBAIC00MjAsNiArNDA1LDI0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX2xvZ19ldmVudF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgKmJ1ZjsKKwlpbnQgcG9zID0gMDsKKwlzc2l6ZV90IHJldCA9IC1FTk9NRU07CisKKwlyZXQgPSBwb3MgPSBwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX25pY19ldmVudF9sb2coCisJCQkJCXByaXYsIHRydWUsICZidWYsIHRydWUpOworCWlmIChidWYpIHsKKwkJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsIGNvdW50LCBwcG9zLCBidWYsIHBvcyk7CisJCWtmcmVlKGJ1Zik7CisJfQorCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19sb2dfZXZlbnRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCkBAIC00MzYsNyArNDM5LDggQEAKIAlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJmV2ZW50X2xvZ19mbGFnKSAhPSAxKQogCQlyZXR1cm4gLUVGQVVMVDsKIAlpZiAoZXZlbnRfbG9nX2ZsYWcgPT0gMSkKLQkJcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9uaWNfZXZlbnRfbG9nKHByaXYsIHRydWUpOworCQlwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX25pY19ldmVudF9sb2cocHJpdiwgdHJ1ZSwKKwkJCQkJCQlOVUxMLCBmYWxzZSk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC00NDYsNyArNDUwLDcgQEAKIHN0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19jaGFubmVsc19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbHMgPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnN1cHBfYmFuZCA9IE5VTEw7CiAJaW50IHBvcyA9IDAsIGksIGJ1ZnN6ID0gUEFHRV9TSVpFOwpAQCAtNTE5LDE1ICs1MjMsMTMgQEAKIAkJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CiAKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAljaGFyIGJ1Zls1MTJdOwogCWludCBwb3MgPSAwOwogCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOwogCiAJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU1RBVFVTX0hDTURfQUNUSVZFOlx0ICVkXG4iLAogCQl0ZXN0X2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfSENNRF9TWU5DX0FDVElWRTogJWRcbiIsCi0JCXRlc3RfYml0KFNUQVRVU19IQ01EX1NZTkNfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKSk7CiAJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU1RBVFVTX0lOVF9FTkFCTEVEOlx0ICVkXG4iLAogCQl0ZXN0X2JpdChTVEFUVVNfSU5UX0VOQUJMRUQsICZwcml2LT5zdGF0dXMpKTsKIAlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTVEFUVVNfUkZfS0lMTF9IVzpcdCAlZFxuIiwKQEAgLTU2Nyw3ICs1NjksNyBAQAogCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CiAKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgcG9zID0gMDsKIAlpbnQgY250ID0gMDsKIAljaGFyICpidWY7CkBAIC02NTQsNyArNjU2LDcgQEAKIHN0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19xb3NfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgcG9zID0gMCwgaTsKIAljaGFyIGJ1ZlsyNTZdOwogCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOwpAQCAtNjc3LDcgKzY3OSw3IEBACiBzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfbGVkX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWludCBwb3MgPSAwOwogCWNoYXIgYnVmWzI1Nl07CiAJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7CkBAIC03MDMsNyArNzA1LDcgQEAKIAkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGl3bF90dF9tZ210ICp0dCA9ICZwcml2LT50aGVybWFsX3Rocm90dGxlOwogCXN0cnVjdCBpd2xfdHRfcmVzdHJpY3Rpb24gKnJlc3RyaWN0aW9uOwogCWNoYXIgYnVmWzEwMF07CkBAIC03NjMsNyArNzY1LDcgQEAKIAkJCQkJIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWNoYXIgYnVmWzEwMF07CiAJaW50IHBvcyA9IDA7CiAJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7CkBAIC04MTEsNyArODEzLDkgQEAKIAogCXByaXYtPnBvd2VyX2RhdGEuZGVidWdfc2xlZXBfbGV2ZWxfb3ZlcnJpZGUgPSB2YWx1ZTsKIAorCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKIAlpd2xfcG93ZXJfdXBkYXRlX21vZGUocHJpdiwgdHJ1ZSk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC04MjAsNyArODI0LDcgQEAKIAkJCQkJCSAgIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWNoYXIgYnVmWzEwXTsKIAlpbnQgcG9zLCB2YWx1ZTsKIAljb25zdCBzaXplX3QgYnVmc3ogPSBzaXplb2YoYnVmKTsKQEAgLTgzOCw3ICs4NDIsNyBAQAogCQkJCQkJICAgIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkJCSAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAljaGFyIGJ1ZlsyMDBdOwogCWludCBwb3MgPSAwLCBpOwogCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOwpAQCAtODU5LDcgKzg2Myw3IEBACiB9CiAKIERFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyhzcmFtKTsKLURFQlVHRlNfV1JJVEVfRklMRV9PUFMobG9nX2V2ZW50KTsKK0RFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyhsb2dfZXZlbnQpOwogREVCVUdGU19SRUFEX0ZJTEVfT1BTKG52bSk7CiBERUJVR0ZTX1JFQURfRklMRV9PUFMoc3RhdGlvbnMpOwogREVCVUdGU19SRUFEX0ZJTEVfT1BTKGNoYW5uZWxzKTsKQEAgLTk3Niw3ICs5ODAsNyBAQAogCQkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpIHsKIAotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cTsKIAlzdHJ1Y3QgaXdsX3F1ZXVlICpxOwogCWNoYXIgKmJ1ZjsKQEAgLTEwMjIsNyArMTAyNiw3IEBACiAJCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgewogCi0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKIAljaGFyIGJ1ZlsyNTZdOwogCWludCBwb3MgPSAwOwpAQCAtMTA2MywzNiArMTA2NywzMyBAQAogCXJldHVybiBwOwogfQogCitzdGF0aWMgY29uc3QgY2hhciB1Y29kZV9zdGF0c19oZWFkZXJbXSA9CisJIiUtMzJzICAgICBjdXJyZW50ICBhY3VtdWxhdGl2ZSAgICAgICBkZWx0YSAgICAgICAgIG1heFxuIjsKK3N0YXRpYyBjb25zdCBjaGFyIHVjb2RlX3N0YXRzX3Nob3J0X2Zvcm1hdFtdID0KKwkiICAlLTMwcyAlMTB1XG4iOworc3RhdGljIGNvbnN0IGNoYXIgdWNvZGVfc3RhdHNfZm9ybWF0W10gPQorCSIgICUtMzBzICUxMHUgICUxMHUgICUxMHUgICUxMHVcbiI7CiAKIHN0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc191Y29kZV9yeF9zdGF0c19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWludCBwb3MgPSAwOwogCWNoYXIgKmJ1ZjsKLQlpbnQgYnVmc3ogPSBzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5KSAqIDIwICsKLQkJc2l6ZW9mKHN0cnVjdCBzdGF0aXN0aWNzX3J4X25vbl9waHkpICogMjAgKwotCQlzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfcnhfaHRfcGh5KSAqIDIwICsgNDAwOworCWludCBidWZzeiA9IHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkpICogNDAgKworCQlzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3Nfcnhfbm9uX3BoeSkgKiA0MCArCisJCXNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19yeF9odF9waHkpICogNDAgKyA0MDA7CiAJc3NpemVfdCByZXQ7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfcnhfcGh5ICpvZmRtLCAqYWNjdW1fb2ZkbTsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgKmNjaywgKmFjY3VtX2NjazsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9waHkgKm9mZG0sICphY2N1bV9vZmRtLCAqZGVsdGFfb2ZkbSwgKm1heF9vZmRtOworCXN0cnVjdCBzdGF0aXN0aWNzX3J4X3BoeSAqY2NrLCAqYWNjdW1fY2NrLCAqZGVsdGFfY2NrLCAqbWF4X2NjazsKIAlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9ub25fcGh5ICpnZW5lcmFsLCAqYWNjdW1fZ2VuZXJhbDsKLQlzdHJ1Y3Qgc3RhdGlzdGljc19yeF9odF9waHkgKmh0LCAqYWNjdW1faHQ7CisJc3RydWN0IHN0YXRpc3RpY3Nfcnhfbm9uX3BoeSAqZGVsdGFfZ2VuZXJhbCwgKm1heF9nZW5lcmFsOworCXN0cnVjdCBzdGF0aXN0aWNzX3J4X2h0X3BoeSAqaHQsICphY2N1bV9odCwgKmRlbHRhX2h0LCAqbWF4X2h0OwogCiAJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXJldHVybiAtRUFHQUlOOwogCi0JLyogbWFrZSByZXF1ZXN0IHRvIHVDb2RlIHRvIHJldHJpZXZlIHN0YXRpc3RpY3MgaW5mb3JtYXRpb24gKi8KLQltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JcmV0ID0gaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYsIENNRF9TWU5DLCBmYWxzZSk7Ci0JbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7Ci0KLQlpZiAocmV0KSB7Ci0JCUlXTF9FUlIocHJpdiwKLQkJCSJFcnJvciBzZW5kaW5nIHN0YXRpc3RpY3MgcmVxdWVzdDogJXpkXG4iLCByZXQpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9CiAJYnVmID0ga3phbGxvYyhidWZzeiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpIHsKIAkJSVdMX0VSUihwcml2LCAiQ2FuIG5vdCBhbGxvY2F0ZSBCdWZmZXJcbiIpOwpAQCAtMTExMSwyNjQgKzExMTIsNDAxIEBACiAJYWNjdW1fY2NrID0gJnByaXYtPmFjY3VtX3N0YXRpc3RpY3MucnguY2NrOwogCWFjY3VtX2dlbmVyYWwgPSAmcHJpdi0+YWNjdW1fc3RhdGlzdGljcy5yeC5nZW5lcmFsOwogCWFjY3VtX2h0ID0gJnByaXYtPmFjY3VtX3N0YXRpc3RpY3Mucngub2ZkbV9odDsKKwlkZWx0YV9vZmRtID0gJnByaXYtPmRlbHRhX3N0YXRpc3RpY3Mucngub2ZkbTsKKwlkZWx0YV9jY2sgPSAmcHJpdi0+ZGVsdGFfc3RhdGlzdGljcy5yeC5jY2s7CisJZGVsdGFfZ2VuZXJhbCA9ICZwcml2LT5kZWx0YV9zdGF0aXN0aWNzLnJ4LmdlbmVyYWw7CisJZGVsdGFfaHQgPSAmcHJpdi0+ZGVsdGFfc3RhdGlzdGljcy5yeC5vZmRtX2h0OworCW1heF9vZmRtID0gJnByaXYtPm1heF9kZWx0YS5yeC5vZmRtOworCW1heF9jY2sgPSAmcHJpdi0+bWF4X2RlbHRhLnJ4LmNjazsKKwltYXhfZ2VuZXJhbCA9ICZwcml2LT5tYXhfZGVsdGEucnguZ2VuZXJhbDsKKwltYXhfaHQgPSAmcHJpdi0+bWF4X2RlbHRhLnJ4Lm9mZG1faHQ7CisKIAlwb3MgKz0gaXdsX2RiZ2ZzX3N0YXRpc3RpY3NfZmxhZyhwcml2LCBidWYsIGJ1ZnN6KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTdGF0aXN0aWNzX1J4IC0gT0ZETTpcbiIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSJcdFx0XHRjdXJyZW50XHRcdFx0YWNjdW11bGF0aXZlXG4iKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJpbmFfY250Olx0XHQldVx0XHRcdCV1XG4iLAotCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmluYV9jbnQpLCBhY2N1bV9vZmRtLT5pbmFfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJmaW5hX2NudDpcdFx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdShvZmRtLT5maW5hX2NudCksIGFjY3VtX29mZG0tPmZpbmFfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJwbGNwX2VycjpcdFx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdShvZmRtLT5wbGNwX2VyciksIGFjY3VtX29mZG0tPnBsY3BfZXJyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJjcmMzMl9lcnI6XHRcdCV1XHRcdFx0JXVcbiIsCi0JCQkgbGUzMl90b19jcHUob2ZkbS0+Y3JjMzJfZXJyKSwgYWNjdW1fb2ZkbS0+Y3JjMzJfZXJyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgIm92ZXJydW5fZXJyOlx0XHQldVx0XHRcdCV1XG4iLAorCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfaGVhZGVyLAorCQkJICJTdGF0aXN0aWNzX1J4IC0gT0ZETToiKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiaW5hX2NudDoiLCBsZTMyX3RvX2NwdShvZmRtLT5pbmFfY250KSwKKwkJCSBhY2N1bV9vZmRtLT5pbmFfY250LAorCQkJIGRlbHRhX29mZG0tPmluYV9jbnQsIG1heF9vZmRtLT5pbmFfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiZmluYV9jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdShvZmRtLT5maW5hX2NudCksIGFjY3VtX29mZG0tPmZpbmFfY250LAorCQkJIGRlbHRhX29mZG0tPmZpbmFfY250LCBtYXhfb2ZkbS0+ZmluYV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJwbGNwX2VycjoiLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnBsY3BfZXJyKSwgYWNjdW1fb2ZkbS0+cGxjcF9lcnIsCisJCQkgZGVsdGFfb2ZkbS0+cGxjcF9lcnIsIG1heF9vZmRtLT5wbGNwX2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImNyYzMyX2VycjoiLAorCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmNyYzMyX2VyciksIGFjY3VtX29mZG0tPmNyYzMyX2VyciwKKwkJCSBkZWx0YV9vZmRtLT5jcmMzMl9lcnIsIG1heF9vZmRtLT5jcmMzMl9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJvdmVycnVuX2VycjoiLAogCQkJIGxlMzJfdG9fY3B1KG9mZG0tPm92ZXJydW5fZXJyKSwKLQkJCSBhY2N1bV9vZmRtLT5vdmVycnVuX2Vycik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJlYXJseV9vdmVycnVuX2VycjpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fb2ZkbS0+b3ZlcnJ1bl9lcnIsCisJCQkgZGVsdGFfb2ZkbS0+b3ZlcnJ1bl9lcnIsIG1heF9vZmRtLT5vdmVycnVuX2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImVhcmx5X292ZXJydW5fZXJyOiIsCiAJCQkgbGUzMl90b19jcHUob2ZkbS0+ZWFybHlfb3ZlcnJ1bl9lcnIpLAotCQkJIGFjY3VtX29mZG0tPmVhcmx5X292ZXJydW5fZXJyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJjcmMzMl9nb29kOlx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX29mZG0tPmVhcmx5X292ZXJydW5fZXJyLAorCQkJIGRlbHRhX29mZG0tPmVhcmx5X292ZXJydW5fZXJyLAorCQkJIG1heF9vZmRtLT5lYXJseV9vdmVycnVuX2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImNyYzMyX2dvb2Q6IiwKIAkJCSBsZTMyX3RvX2NwdShvZmRtLT5jcmMzMl9nb29kKSwKLQkJCSBhY2N1bV9vZmRtLT5jcmMzMl9nb29kKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImZhbHNlX2FsYXJtX2NudDpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fb2ZkbS0+Y3JjMzJfZ29vZCwKKwkJCSBkZWx0YV9vZmRtLT5jcmMzMl9nb29kLCBtYXhfb2ZkbS0+Y3JjMzJfZ29vZCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImZhbHNlX2FsYXJtX2NudDoiLAogCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmZhbHNlX2FsYXJtX2NudCksCi0JCQkgYWNjdW1fb2ZkbS0+ZmFsc2VfYWxhcm1fY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImZpbmFfc3luY19lcnJfY250Olx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9vZmRtLT5mYWxzZV9hbGFybV9jbnQsCisJCQkgZGVsdGFfb2ZkbS0+ZmFsc2VfYWxhcm1fY250LAorCQkJIG1heF9vZmRtLT5mYWxzZV9hbGFybV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJmaW5hX3N5bmNfZXJyX2NudDoiLAogCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmZpbmFfc3luY19lcnJfY250KSwKLQkJCSBhY2N1bV9vZmRtLT5maW5hX3N5bmNfZXJyX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJzZmRfdGltZW91dDpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9vZmRtLT5maW5hX3N5bmNfZXJyX2NudCwKKwkJCSBkZWx0YV9vZmRtLT5maW5hX3N5bmNfZXJyX2NudCwKKwkJCSBtYXhfb2ZkbS0+ZmluYV9zeW5jX2Vycl9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJzZmRfdGltZW91dDoiLAogCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnNmZF90aW1lb3V0KSwKLQkJCSBhY2N1bV9vZmRtLT5zZmRfdGltZW91dCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJmaW5hX3RpbWVvdXQ6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fb2ZkbS0+c2ZkX3RpbWVvdXQsCisJCQkgZGVsdGFfb2ZkbS0+c2ZkX3RpbWVvdXQsCisJCQkgbWF4X29mZG0tPnNmZF90aW1lb3V0KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiZmluYV90aW1lb3V0OiIsCiAJCQkgbGUzMl90b19jcHUob2ZkbS0+ZmluYV90aW1lb3V0KSwKLQkJCSBhY2N1bV9vZmRtLT5maW5hX3RpbWVvdXQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAidW5yZXNwb25kZWRfcnRzOlx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9vZmRtLT5maW5hX3RpbWVvdXQsCisJCQkgZGVsdGFfb2ZkbS0+ZmluYV90aW1lb3V0LAorCQkJIG1heF9vZmRtLT5maW5hX3RpbWVvdXQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJ1bnJlc3BvbmRlZF9ydHM6IiwKIAkJCSBsZTMyX3RvX2NwdShvZmRtLT51bnJlc3BvbmRlZF9ydHMpLAotCQkJIGFjY3VtX29mZG0tPnVucmVzcG9uZGVkX3J0cyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJInJ4ZV9mcmFtZV9sbXRfb3ZydW46XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX29mZG0tPnVucmVzcG9uZGVkX3J0cywKKwkJCSBkZWx0YV9vZmRtLT51bnJlc3BvbmRlZF9ydHMsCisJCQkgbWF4X29mZG0tPnVucmVzcG9uZGVkX3J0cyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkicnhlX2ZyYW1lX2xtdF9vdnJ1bjoiLAogCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuKSwKLQkJCSBhY2N1bV9vZmRtLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1bik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJzZW50X2Fja19jbnQ6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fb2ZkbS0+cnhlX2ZyYW1lX2xpbWl0X292ZXJydW4sCisJCQkgZGVsdGFfb2ZkbS0+cnhlX2ZyYW1lX2xpbWl0X292ZXJydW4sCisJCQkgbWF4X29mZG0tPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAic2VudF9hY2tfY250OiIsCiAJCQkgbGUzMl90b19jcHUob2ZkbS0+c2VudF9hY2tfY250KSwKLQkJCSBhY2N1bV9vZmRtLT5zZW50X2Fja19jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAic2VudF9jdHNfY250Olx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX29mZG0tPnNlbnRfYWNrX2NudCwKKwkJCSBkZWx0YV9vZmRtLT5zZW50X2Fja19jbnQsCisJCQkgbWF4X29mZG0tPnNlbnRfYWNrX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgInNlbnRfY3RzX2NudDoiLAogCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnNlbnRfY3RzX2NudCksCi0JCQkgYWNjdW1fb2ZkbS0+c2VudF9jdHNfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgInNlbnRfYmFfcnNwX2NudDpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fb2ZkbS0+c2VudF9jdHNfY250LAorCQkJIGRlbHRhX29mZG0tPnNlbnRfY3RzX2NudCwgbWF4X29mZG0tPnNlbnRfY3RzX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgInNlbnRfYmFfcnNwX2NudDoiLAogCQkJIGxlMzJfdG9fY3B1KG9mZG0tPnNlbnRfYmFfcnNwX2NudCksCi0JCQkgYWNjdW1fb2ZkbS0+c2VudF9iYV9yc3BfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImRzcF9zZWxmX2tpbGw6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fb2ZkbS0+c2VudF9iYV9yc3BfY250LAorCQkJIGRlbHRhX29mZG0tPnNlbnRfYmFfcnNwX2NudCwKKwkJCSBtYXhfb2ZkbS0+c2VudF9iYV9yc3BfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiZHNwX3NlbGZfa2lsbDoiLAogCQkJIGxlMzJfdG9fY3B1KG9mZG0tPmRzcF9zZWxmX2tpbGwpLAotCQkJIGFjY3VtX29mZG0tPmRzcF9zZWxmX2tpbGwpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAibWhfZm9ybWF0X2VycjpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9vZmRtLT5kc3Bfc2VsZl9raWxsLAorCQkJIGRlbHRhX29mZG0tPmRzcF9zZWxmX2tpbGwsCisJCQkgbWF4X29mZG0tPmRzcF9zZWxmX2tpbGwpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJtaF9mb3JtYXRfZXJyOiIsCiAJCQkgbGUzMl90b19jcHUob2ZkbS0+bWhfZm9ybWF0X2VyciksCi0JCQkgYWNjdW1fb2ZkbS0+bWhfZm9ybWF0X2Vycik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJyZV9hY3FfbWFpbl9yc3NpX3N1bTpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fb2ZkbS0+bWhfZm9ybWF0X2VyciwKKwkJCSBkZWx0YV9vZmRtLT5taF9mb3JtYXRfZXJyLAorCQkJIG1heF9vZmRtLT5taF9mb3JtYXRfZXJyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAicmVfYWNxX21haW5fcnNzaV9zdW06IiwKIAkJCSBsZTMyX3RvX2NwdShvZmRtLT5yZV9hY3FfbWFpbl9yc3NpX3N1bSksCi0JCQkgYWNjdW1fb2ZkbS0+cmVfYWNxX21haW5fcnNzaV9zdW0pOworCQkJIGFjY3VtX29mZG0tPnJlX2FjcV9tYWluX3Jzc2lfc3VtLAorCQkJIGRlbHRhX29mZG0tPnJlX2FjcV9tYWluX3Jzc2lfc3VtLAorCQkJbWF4X29mZG0tPnJlX2FjcV9tYWluX3Jzc2lfc3VtKTsKIAotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlN0YXRpc3RpY3NfUnggLSBDQ0s6XG4iKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkiXHRcdFx0Y3VycmVudFx0XHRcdGFjY3VtdWxhdGl2ZVxuIik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiaW5hX2NudDpcdFx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdShjY2stPmluYV9jbnQpLCBhY2N1bV9jY2stPmluYV9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImZpbmFfY250Olx0XHQldVx0XHRcdCV1XG4iLAotCQkJIGxlMzJfdG9fY3B1KGNjay0+ZmluYV9jbnQpLCBhY2N1bV9jY2stPmZpbmFfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJwbGNwX2VycjpcdFx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdShjY2stPnBsY3BfZXJyKSwgYWNjdW1fY2NrLT5wbGNwX2Vycik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiY3JjMzJfZXJyOlx0XHQldVx0XHRcdCV1XG4iLAotCQkJIGxlMzJfdG9fY3B1KGNjay0+Y3JjMzJfZXJyKSwgYWNjdW1fY2NrLT5jcmMzMl9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAib3ZlcnJ1bl9lcnI6XHRcdCV1XHRcdFx0JXVcbiIsCisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19oZWFkZXIsCisJCQkgIlN0YXRpc3RpY3NfUnggLSBDQ0s6Iik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImluYV9jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPmluYV9jbnQpLCBhY2N1bV9jY2stPmluYV9jbnQsCisJCQkgZGVsdGFfY2NrLT5pbmFfY250LCBtYXhfY2NrLT5pbmFfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiZmluYV9jbnQ6IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPmZpbmFfY250KSwgYWNjdW1fY2NrLT5maW5hX2NudCwKKwkJCSBkZWx0YV9jY2stPmZpbmFfY250LCBtYXhfY2NrLT5maW5hX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgInBsY3BfZXJyOiIsCisJCQkgbGUzMl90b19jcHUoY2NrLT5wbGNwX2VyciksIGFjY3VtX2Njay0+cGxjcF9lcnIsCisJCQkgZGVsdGFfY2NrLT5wbGNwX2VyciwgbWF4X2Njay0+cGxjcF9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJjcmMzMl9lcnI6IiwKKwkJCSBsZTMyX3RvX2NwdShjY2stPmNyYzMyX2VyciksIGFjY3VtX2Njay0+Y3JjMzJfZXJyLAorCQkJIGRlbHRhX2Njay0+Y3JjMzJfZXJyLCBtYXhfY2NrLT5jcmMzMl9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJvdmVycnVuX2VycjoiLAogCQkJIGxlMzJfdG9fY3B1KGNjay0+b3ZlcnJ1bl9lcnIpLAotCQkJIGFjY3VtX2Njay0+b3ZlcnJ1bl9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiZWFybHlfb3ZlcnJ1bl9lcnI6XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2Njay0+b3ZlcnJ1bl9lcnIsCisJCQkgZGVsdGFfY2NrLT5vdmVycnVuX2VyciwgbWF4X2Njay0+b3ZlcnJ1bl9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJlYXJseV9vdmVycnVuX2VycjoiLAogCQkJIGxlMzJfdG9fY3B1KGNjay0+ZWFybHlfb3ZlcnJ1bl9lcnIpLAotCQkJIGFjY3VtX2Njay0+ZWFybHlfb3ZlcnJ1bl9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImNyYzMyX2dvb2Q6XHRcdCV1XHRcdFx0JXVcbiIsCi0JCQkgbGUzMl90b19jcHUoY2NrLT5jcmMzMl9nb29kKSwgYWNjdW1fY2NrLT5jcmMzMl9nb29kKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImZhbHNlX2FsYXJtX2NudDpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fY2NrLT5lYXJseV9vdmVycnVuX2VyciwKKwkJCSBkZWx0YV9jY2stPmVhcmx5X292ZXJydW5fZXJyLAorCQkJIG1heF9jY2stPmVhcmx5X292ZXJydW5fZXJyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiY3JjMzJfZ29vZDoiLAorCQkJIGxlMzJfdG9fY3B1KGNjay0+Y3JjMzJfZ29vZCksIGFjY3VtX2Njay0+Y3JjMzJfZ29vZCwKKwkJCSBkZWx0YV9jY2stPmNyYzMyX2dvb2QsCisJCQkgbWF4X2Njay0+Y3JjMzJfZ29vZCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImZhbHNlX2FsYXJtX2NudDoiLAogCQkJIGxlMzJfdG9fY3B1KGNjay0+ZmFsc2VfYWxhcm1fY250KSwKLQkJCSBhY2N1bV9jY2stPmZhbHNlX2FsYXJtX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJmaW5hX3N5bmNfZXJyX2NudDpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fY2NrLT5mYWxzZV9hbGFybV9jbnQsCisJCQkgZGVsdGFfY2NrLT5mYWxzZV9hbGFybV9jbnQsIG1heF9jY2stPmZhbHNlX2FsYXJtX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImZpbmFfc3luY19lcnJfY250OiIsCiAJCQkgbGUzMl90b19jcHUoY2NrLT5maW5hX3N5bmNfZXJyX2NudCksCi0JCQkgYWNjdW1fY2NrLT5maW5hX3N5bmNfZXJyX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJzZmRfdGltZW91dDpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9jY2stPmZpbmFfc3luY19lcnJfY250LAorCQkJIGRlbHRhX2Njay0+ZmluYV9zeW5jX2Vycl9jbnQsCisJCQkgbWF4X2Njay0+ZmluYV9zeW5jX2Vycl9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJzZmRfdGltZW91dDoiLAogCQkJIGxlMzJfdG9fY3B1KGNjay0+c2ZkX3RpbWVvdXQpLAotCQkJIGFjY3VtX2Njay0+c2ZkX3RpbWVvdXQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiZmluYV90aW1lb3V0Olx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2Njay0+c2ZkX3RpbWVvdXQsCisJCQkgZGVsdGFfY2NrLT5zZmRfdGltZW91dCwgbWF4X2Njay0+c2ZkX3RpbWVvdXQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJmaW5hX3RpbWVvdXQ6IiwKIAkJCSBsZTMyX3RvX2NwdShjY2stPmZpbmFfdGltZW91dCksCi0JCQkgYWNjdW1fY2NrLT5maW5hX3RpbWVvdXQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAidW5yZXNwb25kZWRfcnRzOlx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9jY2stPmZpbmFfdGltZW91dCwKKwkJCSBkZWx0YV9jY2stPmZpbmFfdGltZW91dCwgbWF4X2Njay0+ZmluYV90aW1lb3V0KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAidW5yZXNwb25kZWRfcnRzOiIsCiAJCQkgbGUzMl90b19jcHUoY2NrLT51bnJlc3BvbmRlZF9ydHMpLAotCQkJIGFjY3VtX2Njay0+dW5yZXNwb25kZWRfcnRzKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkicnhlX2ZyYW1lX2xtdF9vdnJ1bjpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fY2NrLT51bnJlc3BvbmRlZF9ydHMsCisJCQkgZGVsdGFfY2NrLT51bnJlc3BvbmRlZF9ydHMsCisJCQkgbWF4X2Njay0+dW5yZXNwb25kZWRfcnRzKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSJyeGVfZnJhbWVfbG10X292cnVuOiIsCiAJCQkgbGUzMl90b19jcHUoY2NrLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1biksCi0JCQkgYWNjdW1fY2NrLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1bik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJzZW50X2Fja19jbnQ6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fY2NrLT5yeGVfZnJhbWVfbGltaXRfb3ZlcnJ1biwKKwkJCSBkZWx0YV9jY2stPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuLAorCQkJIG1heF9jY2stPnJ4ZV9mcmFtZV9saW1pdF9vdmVycnVuKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAic2VudF9hY2tfY250OiIsCiAJCQkgbGUzMl90b19jcHUoY2NrLT5zZW50X2Fja19jbnQpLAotCQkJIGFjY3VtX2Njay0+c2VudF9hY2tfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgInNlbnRfY3RzX2NudDpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9jY2stPnNlbnRfYWNrX2NudCwKKwkJCSBkZWx0YV9jY2stPnNlbnRfYWNrX2NudCwKKwkJCSBtYXhfY2NrLT5zZW50X2Fja19jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJzZW50X2N0c19jbnQ6IiwKIAkJCSBsZTMyX3RvX2NwdShjY2stPnNlbnRfY3RzX2NudCksCi0JCQkgYWNjdW1fY2NrLT5zZW50X2N0c19jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAic2VudF9iYV9yc3BfY250Olx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9jY2stPnNlbnRfY3RzX2NudCwKKwkJCSBkZWx0YV9jY2stPnNlbnRfY3RzX2NudCwKKwkJCSBtYXhfY2NrLT5zZW50X2N0c19jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJzZW50X2JhX3JzcF9jbnQ6IiwKIAkJCSBsZTMyX3RvX2NwdShjY2stPnNlbnRfYmFfcnNwX2NudCksCi0JCQkgYWNjdW1fY2NrLT5zZW50X2JhX3JzcF9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiZHNwX3NlbGZfa2lsbDpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9jY2stPnNlbnRfYmFfcnNwX2NudCwKKwkJCSBkZWx0YV9jY2stPnNlbnRfYmFfcnNwX2NudCwKKwkJCSBtYXhfY2NrLT5zZW50X2JhX3JzcF9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJkc3Bfc2VsZl9raWxsOiIsCiAJCQkgbGUzMl90b19jcHUoY2NrLT5kc3Bfc2VsZl9raWxsKSwKLQkJCSBhY2N1bV9jY2stPmRzcF9zZWxmX2tpbGwpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAibWhfZm9ybWF0X2VycjpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9jY2stPmRzcF9zZWxmX2tpbGwsCisJCQkgZGVsdGFfY2NrLT5kc3Bfc2VsZl9raWxsLAorCQkJIG1heF9jY2stPmRzcF9zZWxmX2tpbGwpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJtaF9mb3JtYXRfZXJyOiIsCiAJCQkgbGUzMl90b19jcHUoY2NrLT5taF9mb3JtYXRfZXJyKSwKLQkJCSBhY2N1bV9jY2stPm1oX2Zvcm1hdF9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAicmVfYWNxX21haW5fcnNzaV9zdW06XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2Njay0+bWhfZm9ybWF0X2VyciwKKwkJCSBkZWx0YV9jY2stPm1oX2Zvcm1hdF9lcnIsIG1heF9jY2stPm1oX2Zvcm1hdF9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJyZV9hY3FfbWFpbl9yc3NpX3N1bToiLAogCQkJIGxlMzJfdG9fY3B1KGNjay0+cmVfYWNxX21haW5fcnNzaV9zdW0pLAotCQkJIGFjY3VtX2Njay0+cmVfYWNxX21haW5fcnNzaV9zdW0pOworCQkJIGFjY3VtX2Njay0+cmVfYWNxX21haW5fcnNzaV9zdW0sCisJCQkgZGVsdGFfY2NrLT5yZV9hY3FfbWFpbl9yc3NpX3N1bSwKKwkJCSBtYXhfY2NrLT5yZV9hY3FfbWFpbl9yc3NpX3N1bSk7CiAKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJTdGF0aXN0aWNzX1J4IC0gR0VORVJBTDpcbiIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSJcdFx0XHRjdXJyZW50XHRcdFx0YWNjdW11bGF0aXZlXG4iKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJib2d1c19jdHM6XHRcdCV1XHRcdFx0JXVcbiIsCisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19oZWFkZXIsCisJCQkiU3RhdGlzdGljc19SeCAtIEdFTkVSQUw6Iik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImJvZ3VzX2N0czoiLAogCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJvZ3VzX2N0cyksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+Ym9ndXNfY3RzKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJib2d1c19hY2s6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fZ2VuZXJhbC0+Ym9ndXNfY3RzLAorCQkJIGRlbHRhX2dlbmVyYWwtPmJvZ3VzX2N0cywgbWF4X2dlbmVyYWwtPmJvZ3VzX2N0cyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImJvZ3VzX2FjazoiLAogCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJvZ3VzX2FjayksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+Ym9ndXNfYWNrKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgIm5vbl9ic3NpZF9mcmFtZXM6XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2dlbmVyYWwtPmJvZ3VzX2FjaywKKwkJCSBkZWx0YV9nZW5lcmFsLT5ib2d1c19hY2ssIG1heF9nZW5lcmFsLT5ib2d1c19hY2spOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJub25fYnNzaWRfZnJhbWVzOiIsCiAJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+bm9uX2Jzc2lkX2ZyYW1lcyksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+bm9uX2Jzc2lkX2ZyYW1lcyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJmaWx0ZXJlZF9mcmFtZXM6XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2dlbmVyYWwtPm5vbl9ic3NpZF9mcmFtZXMsCisJCQkgZGVsdGFfZ2VuZXJhbC0+bm9uX2Jzc2lkX2ZyYW1lcywKKwkJCSBtYXhfZ2VuZXJhbC0+bm9uX2Jzc2lkX2ZyYW1lcyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImZpbHRlcmVkX2ZyYW1lczoiLAogCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmZpbHRlcmVkX2ZyYW1lcyksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+ZmlsdGVyZWRfZnJhbWVzKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgIm5vbl9jaGFubmVsX2JlYWNvbnM6XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2dlbmVyYWwtPmZpbHRlcmVkX2ZyYW1lcywKKwkJCSBkZWx0YV9nZW5lcmFsLT5maWx0ZXJlZF9mcmFtZXMsCisJCQkgbWF4X2dlbmVyYWwtPmZpbHRlcmVkX2ZyYW1lcyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgIm5vbl9jaGFubmVsX2JlYWNvbnM6IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5ub25fY2hhbm5lbF9iZWFjb25zKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5ub25fY2hhbm5lbF9iZWFjb25zKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImNoYW5uZWxfYmVhY29uczpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fZ2VuZXJhbC0+bm9uX2NoYW5uZWxfYmVhY29ucywKKwkJCSBkZWx0YV9nZW5lcmFsLT5ub25fY2hhbm5lbF9iZWFjb25zLAorCQkJIG1heF9nZW5lcmFsLT5ub25fY2hhbm5lbF9iZWFjb25zKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiY2hhbm5lbF9iZWFjb25zOiIsCiAJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+Y2hhbm5lbF9iZWFjb25zKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5jaGFubmVsX2JlYWNvbnMpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAibnVtX21pc3NlZF9iY29uOlx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9nZW5lcmFsLT5jaGFubmVsX2JlYWNvbnMsCisJCQkgZGVsdGFfZ2VuZXJhbC0+Y2hhbm5lbF9iZWFjb25zLAorCQkJIG1heF9nZW5lcmFsLT5jaGFubmVsX2JlYWNvbnMpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJudW1fbWlzc2VkX2Jjb246IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5udW1fbWlzc2VkX2Jjb24pLAotCQkJIGFjY3VtX2dlbmVyYWwtPm51bV9taXNzZWRfYmNvbik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJImFkY19yeF9zYXR1cmF0aW9uX3RpbWU6XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2dlbmVyYWwtPm51bV9taXNzZWRfYmNvbiwKKwkJCSBkZWx0YV9nZW5lcmFsLT5udW1fbWlzc2VkX2Jjb24sCisJCQkgbWF4X2dlbmVyYWwtPm51bV9taXNzZWRfYmNvbik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkiYWRjX3J4X3NhdHVyYXRpb25fdGltZToiLAogCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmFkY19yeF9zYXR1cmF0aW9uX3RpbWUpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmFkY19yeF9zYXR1cmF0aW9uX3RpbWUpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSJpbmFfZGV0ZWN0X3NlYXJjaF90bTpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fZ2VuZXJhbC0+YWRjX3J4X3NhdHVyYXRpb25fdGltZSwKKwkJCSBkZWx0YV9nZW5lcmFsLT5hZGNfcnhfc2F0dXJhdGlvbl90aW1lLAorCQkJIG1heF9nZW5lcmFsLT5hZGNfcnhfc2F0dXJhdGlvbl90aW1lKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSJpbmFfZGV0ZWN0X3NlYXJjaF90bToiLAogCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmluYV9kZXRlY3Rpb25fc2VhcmNoX3RpbWUpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmluYV9kZXRlY3Rpb25fc2VhcmNoX3RpbWUpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiYmVhY29uX3NpbGVuY2VfcnNzaV9hOlx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9nZW5lcmFsLT5pbmFfZGV0ZWN0aW9uX3NlYXJjaF90aW1lLAorCQkJIGRlbHRhX2dlbmVyYWwtPmluYV9kZXRlY3Rpb25fc2VhcmNoX3RpbWUsCisJCQkgbWF4X2dlbmVyYWwtPmluYV9kZXRlY3Rpb25fc2VhcmNoX3RpbWUpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJiZWFjb25fc2lsZW5jZV9yc3NpX2E6IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2EpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJiZWFjb25fc2lsZW5jZV9yc3NpX2I6XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYSwKKwkJCSBkZWx0YV9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2EsCisJCQkgbWF4X2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImJlYWNvbl9zaWxlbmNlX3Jzc2lfYjoiLAogCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYiksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9iKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImJlYWNvbl9zaWxlbmNlX3Jzc2lfYzpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9iLAorCQkJIGRlbHRhX2dlbmVyYWwtPmJlYWNvbl9zaWxlbmNlX3Jzc2lfYiwKKwkJCSBtYXhfZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiYmVhY29uX3NpbGVuY2VfcnNzaV9jOiIsCiAJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9jKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2MpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSJpbnRlcmZlcmVuY2VfZGF0YV9mbGFnOlx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2MsCisJCQkgZGVsdGFfZ2VuZXJhbC0+YmVhY29uX3NpbGVuY2VfcnNzaV9jLAorCQkJIG1heF9nZW5lcmFsLT5iZWFjb25fc2lsZW5jZV9yc3NpX2MpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJImludGVyZmVyZW5jZV9kYXRhX2ZsYWc6IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5pbnRlcmZlcmVuY2VfZGF0YV9mbGFnKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5pbnRlcmZlcmVuY2VfZGF0YV9mbGFnKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImNoYW5uZWxfbG9hZDpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9nZW5lcmFsLT5pbnRlcmZlcmVuY2VfZGF0YV9mbGFnLAorCQkJIGRlbHRhX2dlbmVyYWwtPmludGVyZmVyZW5jZV9kYXRhX2ZsYWcsCisJCQkgbWF4X2dlbmVyYWwtPmludGVyZmVyZW5jZV9kYXRhX2ZsYWcpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJjaGFubmVsX2xvYWQ6IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5jaGFubmVsX2xvYWQpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmNoYW5uZWxfbG9hZCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJkc3BfZmFsc2VfYWxhcm1zOlx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9nZW5lcmFsLT5jaGFubmVsX2xvYWQsCisJCQkgZGVsdGFfZ2VuZXJhbC0+Y2hhbm5lbF9sb2FkLAorCQkJIG1heF9nZW5lcmFsLT5jaGFubmVsX2xvYWQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJkc3BfZmFsc2VfYWxhcm1zOiIsCiAJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+ZHNwX2ZhbHNlX2FsYXJtcyksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+ZHNwX2ZhbHNlX2FsYXJtcyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJiZWFjb25fcnNzaV9hOlx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2dlbmVyYWwtPmRzcF9mYWxzZV9hbGFybXMsCisJCQkgZGVsdGFfZ2VuZXJhbC0+ZHNwX2ZhbHNlX2FsYXJtcywKKwkJCSBtYXhfZ2VuZXJhbC0+ZHNwX2ZhbHNlX2FsYXJtcyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImJlYWNvbl9yc3NpX2E6IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fcnNzaV9hKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fcnNzaV9hKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImJlYWNvbl9yc3NpX2I6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYSwKKwkJCSBkZWx0YV9nZW5lcmFsLT5iZWFjb25fcnNzaV9hLAorCQkJIG1heF9nZW5lcmFsLT5iZWFjb25fcnNzaV9hKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiYmVhY29uX3Jzc2lfYjoiLAogCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9yc3NpX2IpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9yc3NpX2IpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiYmVhY29uX3Jzc2lfYzpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fcnNzaV9iLAorCQkJIGRlbHRhX2dlbmVyYWwtPmJlYWNvbl9yc3NpX2IsCisJCQkgbWF4X2dlbmVyYWwtPmJlYWNvbl9yc3NpX2IpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJiZWFjb25fcnNzaV9jOiIsCiAJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYyksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJiZWFjb25fZW5lcmd5X2E6XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9yc3NpX2MsCisJCQkgZGVsdGFfZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYywKKwkJCSBtYXhfZ2VuZXJhbC0+YmVhY29uX3Jzc2lfYyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImJlYWNvbl9lbmVyZ3lfYToiLAogCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYSksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9hKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImJlYWNvbl9lbmVyZ3lfYjpcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9hLAorCQkJIGRlbHRhX2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYSwKKwkJCSBtYXhfZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9hKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiYmVhY29uX2VuZXJneV9iOiIsCiAJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9iKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fZW5lcmd5X2IpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiYmVhY29uX2VuZXJneV9jOlx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9nZW5lcmFsLT5iZWFjb25fZW5lcmd5X2IsCisJCQkgZGVsdGFfZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9iLAorCQkJIG1heF9nZW5lcmFsLT5iZWFjb25fZW5lcmd5X2IpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJiZWFjb25fZW5lcmd5X2M6IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5iZWFjb25fZW5lcmd5X2MpLAotCQkJIGFjY3VtX2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYyk7CisJCQkgYWNjdW1fZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9jLAorCQkJIGRlbHRhX2dlbmVyYWwtPmJlYWNvbl9lbmVyZ3lfYywKKwkJCSBtYXhfZ2VuZXJhbC0+YmVhY29uX2VuZXJneV9jKTsKIAogCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlN0YXRpc3RpY3NfUnggLSBPRkRNX0hUOlxuIik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIlx0XHRcdGN1cnJlbnRcdFx0XHRhY2N1bXVsYXRpdmVcbiIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInBsY3BfZXJyOlx0XHQldVx0XHRcdCV1XG4iLAotCQkJIGxlMzJfdG9fY3B1KGh0LT5wbGNwX2VyciksIGFjY3VtX2h0LT5wbGNwX2Vycik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJvdmVycnVuX2VycjpcdFx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdShodC0+b3ZlcnJ1bl9lcnIpLCBhY2N1bV9odC0+b3ZlcnJ1bl9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiZWFybHlfb3ZlcnJ1bl9lcnI6XHQldVx0XHRcdCV1XG4iLAorCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfaGVhZGVyLAorCQkJIlN0YXRpc3RpY3NfUnggLSBPRkRNX0hUOiIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJwbGNwX2VycjoiLAorCQkJIGxlMzJfdG9fY3B1KGh0LT5wbGNwX2VyciksIGFjY3VtX2h0LT5wbGNwX2VyciwKKwkJCSBkZWx0YV9odC0+cGxjcF9lcnIsIG1heF9odC0+cGxjcF9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJvdmVycnVuX2VycjoiLAorCQkJIGxlMzJfdG9fY3B1KGh0LT5vdmVycnVuX2VyciksIGFjY3VtX2h0LT5vdmVycnVuX2VyciwKKwkJCSBkZWx0YV9odC0+b3ZlcnJ1bl9lcnIsIG1heF9odC0+b3ZlcnJ1bl9lcnIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJlYXJseV9vdmVycnVuX2VycjoiLAogCQkJIGxlMzJfdG9fY3B1KGh0LT5lYXJseV9vdmVycnVuX2VyciksCi0JCQkgYWNjdW1faHQtPmVhcmx5X292ZXJydW5fZXJyKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJjcmMzMl9nb29kOlx0XHQldVx0XHRcdCV1XG4iLAotCQkJIGxlMzJfdG9fY3B1KGh0LT5jcmMzMl9nb29kKSwgYWNjdW1faHQtPmNyYzMyX2dvb2QpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgImNyYzMyX2VycjpcdFx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdShodC0+Y3JjMzJfZXJyKSwgYWNjdW1faHQtPmNyYzMyX2Vycik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJtaF9mb3JtYXRfZXJyOlx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2h0LT5lYXJseV9vdmVycnVuX2VyciwKKwkJCSBkZWx0YV9odC0+ZWFybHlfb3ZlcnJ1bl9lcnIsCisJCQkgbWF4X2h0LT5lYXJseV9vdmVycnVuX2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImNyYzMyX2dvb2Q6IiwKKwkJCSBsZTMyX3RvX2NwdShodC0+Y3JjMzJfZ29vZCksIGFjY3VtX2h0LT5jcmMzMl9nb29kLAorCQkJIGRlbHRhX2h0LT5jcmMzMl9nb29kLCBtYXhfaHQtPmNyYzMyX2dvb2QpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJjcmMzMl9lcnI6IiwKKwkJCSBsZTMyX3RvX2NwdShodC0+Y3JjMzJfZXJyKSwgYWNjdW1faHQtPmNyYzMyX2VyciwKKwkJCSBkZWx0YV9odC0+Y3JjMzJfZXJyLCBtYXhfaHQtPmNyYzMyX2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgIm1oX2Zvcm1hdF9lcnI6IiwKIAkJCSBsZTMyX3RvX2NwdShodC0+bWhfZm9ybWF0X2VyciksCi0JCQkgYWNjdW1faHQtPm1oX2Zvcm1hdF9lcnIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiYWdnX2NyYzMyX2dvb2Q6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1faHQtPm1oX2Zvcm1hdF9lcnIsCisJCQkgZGVsdGFfaHQtPm1oX2Zvcm1hdF9lcnIsIG1heF9odC0+bWhfZm9ybWF0X2Vycik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImFnZ19jcmMzMl9nb29kOiIsCiAJCQkgbGUzMl90b19jcHUoaHQtPmFnZ19jcmMzMl9nb29kKSwKLQkJCSBhY2N1bV9odC0+YWdnX2NyYzMyX2dvb2QpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiYWdnX21wZHVfY250Olx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX2h0LT5hZ2dfY3JjMzJfZ29vZCwKKwkJCSBkZWx0YV9odC0+YWdnX2NyYzMyX2dvb2QsIG1heF9odC0+YWdnX2NyYzMyX2dvb2QpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJhZ2dfbXBkdV9jbnQ6IiwKIAkJCSBsZTMyX3RvX2NwdShodC0+YWdnX21wZHVfY250KSwKLQkJCSBhY2N1bV9odC0+YWdnX21wZHVfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICJhZ2dfY250Olx0XHQldVx0XHRcdCV1XG4iLAotCQkJIGxlMzJfdG9fY3B1KGh0LT5hZ2dfY250KSwgYWNjdW1faHQtPmFnZ19jbnQpOworCQkJIGFjY3VtX2h0LT5hZ2dfbXBkdV9jbnQsCisJCQkgZGVsdGFfaHQtPmFnZ19tcGR1X2NudCwgbWF4X2h0LT5hZ2dfbXBkdV9jbnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJhZ2dfY250OiIsCisJCQkgbGUzMl90b19jcHUoaHQtPmFnZ19jbnQpLCBhY2N1bV9odC0+YWdnX2NudCwKKwkJCSBkZWx0YV9odC0+YWdnX2NudCwgbWF4X2h0LT5hZ2dfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAidW5zdXBwb3J0X21jczoiLAorCQkJIGxlMzJfdG9fY3B1KGh0LT51bnN1cHBvcnRfbWNzKSwKKwkJCSBhY2N1bV9odC0+dW5zdXBwb3J0X21jcywKKwkJCSBkZWx0YV9odC0+dW5zdXBwb3J0X21jcywgbWF4X2h0LT51bnN1cHBvcnRfbWNzKTsKIAogCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOwogCWtmcmVlKGJ1Zik7CkBAIC0xMzc5LDI2ICsxNTE3LDE2IEBACiAJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaW50IHBvcyA9IDA7CiAJY2hhciAqYnVmOwotCWludCBidWZzeiA9IChzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfdHgpICogMjQpICsgMjUwOworCWludCBidWZzeiA9IChzaXplb2Yoc3RydWN0IHN0YXRpc3RpY3NfdHgpICogNDgpICsgMjUwOwogCXNzaXplX3QgcmV0OwotCXN0cnVjdCBzdGF0aXN0aWNzX3R4ICp0eCwgKmFjY3VtX3R4OworCXN0cnVjdCBzdGF0aXN0aWNzX3R4ICp0eCwgKmFjY3VtX3R4LCAqZGVsdGFfdHgsICptYXhfdHg7CiAKIAlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQkvKiBtYWtlIHJlcXVlc3QgdG8gdUNvZGUgdG8gcmV0cmlldmUgc3RhdGlzdGljcyBpbmZvcm1hdGlvbiAqLwotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlyZXQgPSBpd2xfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QocHJpdiwgQ01EX1NZTkMsIGZhbHNlKTsKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQotCWlmIChyZXQpIHsKLQkJSVdMX0VSUihwcml2LAotCQkJIkVycm9yIHNlbmRpbmcgc3RhdGlzdGljcyByZXF1ZXN0OiAlemRcbiIsIHJldCk7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KIAlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewogCQlJV0xfRVJSKHByaXYsICJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7CkBAIC0xNDExLDEwNiArMTUzOSwxNDggQEAKIAkgKi8KIAl0eCA9ICZwcml2LT5zdGF0aXN0aWNzLnR4OwogCWFjY3VtX3R4ID0gJnByaXYtPmFjY3VtX3N0YXRpc3RpY3MudHg7CisJZGVsdGFfdHggPSAmcHJpdi0+ZGVsdGFfc3RhdGlzdGljcy50eDsKKwltYXhfdHggPSAmcHJpdi0+bWF4X2RlbHRhLnR4OwogCXBvcyArPSBpd2xfZGJnZnNfc3RhdGlzdGljc19mbGFnKHByaXYsIGJ1ZiwgYnVmc3opOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIlN0YXRpc3RpY3NfVHg6XG4iKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkiXHRcdFx0Y3VycmVudFx0XHRcdGFjY3VtdWxhdGl2ZVxuIik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAicHJlYW1ibGU6XHRcdFx0JXVcdFx0XHQldVxuIiwKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICB1Y29kZV9zdGF0c19oZWFkZXIsCisJCQkiU3RhdGlzdGljc19UeDoiKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAicHJlYW1ibGU6IiwKIAkJCSBsZTMyX3RvX2NwdSh0eC0+cHJlYW1ibGVfY250KSwKLQkJCSBhY2N1bV90eC0+cHJlYW1ibGVfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgInJ4X2RldGVjdGVkX2NudDpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV90eC0+cHJlYW1ibGVfY250LAorCQkJIGRlbHRhX3R4LT5wcmVhbWJsZV9jbnQsIG1heF90eC0+cHJlYW1ibGVfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAicnhfZGV0ZWN0ZWRfY250OiIsCiAJCQkgbGUzMl90b19jcHUodHgtPnJ4X2RldGVjdGVkX2NudCksCi0JCQkgYWNjdW1fdHgtPnJ4X2RldGVjdGVkX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJidF9wcmlvX2RlZmVyX2NudDpcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV90eC0+cnhfZGV0ZWN0ZWRfY250LAorCQkJIGRlbHRhX3R4LT5yeF9kZXRlY3RlZF9jbnQsIG1heF90eC0+cnhfZGV0ZWN0ZWRfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiYnRfcHJpb19kZWZlcl9jbnQ6IiwKIAkJCSBsZTMyX3RvX2NwdSh0eC0+YnRfcHJpb19kZWZlcl9jbnQpLAotCQkJIGFjY3VtX3R4LT5idF9wcmlvX2RlZmVyX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJidF9wcmlvX2tpbGxfY250Olx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX3R4LT5idF9wcmlvX2RlZmVyX2NudCwKKwkJCSBkZWx0YV90eC0+YnRfcHJpb19kZWZlcl9jbnQsCisJCQkgbWF4X3R4LT5idF9wcmlvX2RlZmVyX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImJ0X3ByaW9fa2lsbF9jbnQ6IiwKIAkJCSBsZTMyX3RvX2NwdSh0eC0+YnRfcHJpb19raWxsX2NudCksCi0JCQkgYWNjdW1fdHgtPmJ0X3ByaW9fa2lsbF9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiZmV3X2J5dGVzX2NudDpcdFx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX3R4LT5idF9wcmlvX2tpbGxfY250LAorCQkJIGRlbHRhX3R4LT5idF9wcmlvX2tpbGxfY250LAorCQkJIG1heF90eC0+YnRfcHJpb19raWxsX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImZld19ieXRlc19jbnQ6IiwKIAkJCSBsZTMyX3RvX2NwdSh0eC0+ZmV3X2J5dGVzX2NudCksCi0JCQkgYWNjdW1fdHgtPmZld19ieXRlc19jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiY3RzX3RpbWVvdXQ6XHRcdFx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdSh0eC0+Y3RzX3RpbWVvdXQpLCBhY2N1bV90eC0+Y3RzX3RpbWVvdXQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiYWNrX3RpbWVvdXQ6XHRcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV90eC0+ZmV3X2J5dGVzX2NudCwKKwkJCSBkZWx0YV90eC0+ZmV3X2J5dGVzX2NudCwgbWF4X3R4LT5mZXdfYnl0ZXNfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiY3RzX3RpbWVvdXQ6IiwKKwkJCSBsZTMyX3RvX2NwdSh0eC0+Y3RzX3RpbWVvdXQpLCBhY2N1bV90eC0+Y3RzX3RpbWVvdXQsCisJCQkgZGVsdGFfdHgtPmN0c190aW1lb3V0LCBtYXhfdHgtPmN0c190aW1lb3V0KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiYWNrX3RpbWVvdXQ6IiwKIAkJCSBsZTMyX3RvX2NwdSh0eC0+YWNrX3RpbWVvdXQpLAotCQkJIGFjY3VtX3R4LT5hY2tfdGltZW91dCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJleHBlY3RlZF9hY2tfY250Olx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX3R4LT5hY2tfdGltZW91dCwKKwkJCSBkZWx0YV90eC0+YWNrX3RpbWVvdXQsIG1heF90eC0+YWNrX3RpbWVvdXQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJleHBlY3RlZF9hY2tfY250OiIsCiAJCQkgbGUzMl90b19jcHUodHgtPmV4cGVjdGVkX2Fja19jbnQpLAotCQkJIGFjY3VtX3R4LT5leHBlY3RlZF9hY2tfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImFjdHVhbF9hY2tfY250Olx0XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fdHgtPmV4cGVjdGVkX2Fja19jbnQsCisJCQkgZGVsdGFfdHgtPmV4cGVjdGVkX2Fja19jbnQsCisJCQkgbWF4X3R4LT5leHBlY3RlZF9hY2tfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiYWN0dWFsX2Fja19jbnQ6IiwKIAkJCSBsZTMyX3RvX2NwdSh0eC0+YWN0dWFsX2Fja19jbnQpLAotCQkJIGFjY3VtX3R4LT5hY3R1YWxfYWNrX2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJkdW1wX21zZHVfY250Olx0XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fdHgtPmFjdHVhbF9hY2tfY250LAorCQkJIGRlbHRhX3R4LT5hY3R1YWxfYWNrX2NudCwKKwkJCSBtYXhfdHgtPmFjdHVhbF9hY2tfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiZHVtcF9tc2R1X2NudDoiLAogCQkJIGxlMzJfdG9fY3B1KHR4LT5kdW1wX21zZHVfY250KSwKLQkJCSBhY2N1bV90eC0+ZHVtcF9tc2R1X2NudCk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJhYm9ydF9ueHRfZnJhbWVfbWlzbWF0Y2g6IgotCQkJICJcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fdHgtPmR1bXBfbXNkdV9jbnQsCisJCQkgZGVsdGFfdHgtPmR1bXBfbXNkdV9jbnQsCisJCQkgbWF4X3R4LT5kdW1wX21zZHVfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiYWJvcnRfbnh0X2ZyYW1lX21pc21hdGNoOiIsCiAJCQkgbGUzMl90b19jcHUodHgtPmJ1cnN0X2Fib3J0X25leHRfZnJhbWVfbWlzbWF0Y2hfY250KSwKLQkJCSBhY2N1bV90eC0+YnVyc3RfYWJvcnRfbmV4dF9mcmFtZV9taXNtYXRjaF9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiYWJvcnRfbWlzc2luZ19ueHRfZnJhbWU6IgotCQkJICJcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fdHgtPmJ1cnN0X2Fib3J0X25leHRfZnJhbWVfbWlzbWF0Y2hfY250LAorCQkJIGRlbHRhX3R4LT5idXJzdF9hYm9ydF9uZXh0X2ZyYW1lX21pc21hdGNoX2NudCwKKwkJCSBtYXhfdHgtPmJ1cnN0X2Fib3J0X25leHRfZnJhbWVfbWlzbWF0Y2hfY250KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiYWJvcnRfbWlzc2luZ19ueHRfZnJhbWU6IiwKIAkJCSBsZTMyX3RvX2NwdSh0eC0+YnVyc3RfYWJvcnRfbWlzc2luZ19uZXh0X2ZyYW1lX2NudCksCi0JCQkgYWNjdW1fdHgtPmJ1cnN0X2Fib3J0X21pc3NpbmdfbmV4dF9mcmFtZV9jbnQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiY3RzX3RpbWVvdXRfY29sbGlzaW9uOlx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX3R4LT5idXJzdF9hYm9ydF9taXNzaW5nX25leHRfZnJhbWVfY250LAorCQkJIGRlbHRhX3R4LT5idXJzdF9hYm9ydF9taXNzaW5nX25leHRfZnJhbWVfY250LAorCQkJIG1heF90eC0+YnVyc3RfYWJvcnRfbWlzc2luZ19uZXh0X2ZyYW1lX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImN0c190aW1lb3V0X2NvbGxpc2lvbjoiLAogCQkJIGxlMzJfdG9fY3B1KHR4LT5jdHNfdGltZW91dF9jb2xsaXNpb24pLAotCQkJIGFjY3VtX3R4LT5jdHNfdGltZW91dF9jb2xsaXNpb24pOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSJhY2tfYmFfdGltZW91dF9jb2xsaXNpb246XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX3R4LT5jdHNfdGltZW91dF9jb2xsaXNpb24sCisJCQkgZGVsdGFfdHgtPmN0c190aW1lb3V0X2NvbGxpc2lvbiwKKwkJCSBtYXhfdHgtPmN0c190aW1lb3V0X2NvbGxpc2lvbik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkiYWNrX2JhX3RpbWVvdXRfY29sbGlzaW9uOiIsCiAJCQkgbGUzMl90b19jcHUodHgtPmFja19vcl9iYV90aW1lb3V0X2NvbGxpc2lvbiksCi0JCQkgYWNjdW1fdHgtPmFja19vcl9iYV90aW1lb3V0X2NvbGxpc2lvbik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJhZ2cgYmFfdGltZW91dDpcdFx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX3R4LT5hY2tfb3JfYmFfdGltZW91dF9jb2xsaXNpb24sCisJCQkgZGVsdGFfdHgtPmFja19vcl9iYV90aW1lb3V0X2NvbGxpc2lvbiwKKwkJCSBtYXhfdHgtPmFja19vcl9iYV90aW1lb3V0X2NvbGxpc2lvbik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImFnZyBiYV90aW1lb3V0OiIsCiAJCQkgbGUzMl90b19jcHUodHgtPmFnZy5iYV90aW1lb3V0KSwKLQkJCSBhY2N1bV90eC0+YWdnLmJhX3RpbWVvdXQpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSJhZ2cgYmFfcmVzY2hlZF9mcmFtZXM6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fdHgtPmFnZy5iYV90aW1lb3V0LAorCQkJIGRlbHRhX3R4LT5hZ2cuYmFfdGltZW91dCwKKwkJCSBtYXhfdHgtPmFnZy5iYV90aW1lb3V0KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSJhZ2cgYmFfcmVzY2hlZF9mcmFtZXM6IiwKIAkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLmJhX3Jlc2NoZWR1bGVfZnJhbWVzKSwKLQkJCSBhY2N1bV90eC0+YWdnLmJhX3Jlc2NoZWR1bGVfZnJhbWVzKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkiYWdnIHNjZF9xdWVyeV9hZ2dfZnJhbWU6XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX3R4LT5hZ2cuYmFfcmVzY2hlZHVsZV9mcmFtZXMsCisJCQkgZGVsdGFfdHgtPmFnZy5iYV9yZXNjaGVkdWxlX2ZyYW1lcywKKwkJCSBtYXhfdHgtPmFnZy5iYV9yZXNjaGVkdWxlX2ZyYW1lcyk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkiYWdnIHNjZF9xdWVyeV9hZ2dfZnJhbWU6IiwKIAkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLnNjZF9xdWVyeV9hZ2dfZnJhbWVfY250KSwKLQkJCSBhY2N1bV90eC0+YWdnLnNjZF9xdWVyeV9hZ2dfZnJhbWVfY250KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImFnZyBzY2RfcXVlcnlfbm9fYWdnOlx0XHQldVx0XHRcdCV1XG4iLAorCQkJIGFjY3VtX3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZ19mcmFtZV9jbnQsCisJCQkgZGVsdGFfdHgtPmFnZy5zY2RfcXVlcnlfYWdnX2ZyYW1lX2NudCwKKwkJCSBtYXhfdHgtPmFnZy5zY2RfcXVlcnlfYWdnX2ZyYW1lX2NudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImFnZyBzY2RfcXVlcnlfbm9fYWdnOiIsCiAJCQkgbGUzMl90b19jcHUodHgtPmFnZy5zY2RfcXVlcnlfbm9fYWdnKSwKLQkJCSBhY2N1bV90eC0+YWdnLnNjZF9xdWVyeV9ub19hZ2cpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiYWdnIHNjZF9xdWVyeV9hZ2c6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fdHgtPmFnZy5zY2RfcXVlcnlfbm9fYWdnLAorCQkJIGRlbHRhX3R4LT5hZ2cuc2NkX3F1ZXJ5X25vX2FnZywKKwkJCSBtYXhfdHgtPmFnZy5zY2RfcXVlcnlfbm9fYWdnKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiYWdnIHNjZF9xdWVyeV9hZ2c6IiwKIAkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLnNjZF9xdWVyeV9hZ2cpLAotCQkJIGFjY3VtX3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZyk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJImFnZyBzY2RfcXVlcnlfbWlzbWF0Y2g6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fdHgtPmFnZy5zY2RfcXVlcnlfYWdnLAorCQkJIGRlbHRhX3R4LT5hZ2cuc2NkX3F1ZXJ5X2FnZywKKwkJCSBtYXhfdHgtPmFnZy5zY2RfcXVlcnlfYWdnKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSJhZ2cgc2NkX3F1ZXJ5X21pc21hdGNoOiIsCiAJCQkgbGUzMl90b19jcHUodHgtPmFnZy5zY2RfcXVlcnlfbWlzbWF0Y2gpLAotCQkJIGFjY3VtX3R4LT5hZ2cuc2NkX3F1ZXJ5X21pc21hdGNoKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImFnZyBmcmFtZV9ub3RfcmVhZHk6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fdHgtPmFnZy5zY2RfcXVlcnlfbWlzbWF0Y2gsCisJCQkgZGVsdGFfdHgtPmFnZy5zY2RfcXVlcnlfbWlzbWF0Y2gsCisJCQkgbWF4X3R4LT5hZ2cuc2NkX3F1ZXJ5X21pc21hdGNoKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiYWdnIGZyYW1lX25vdF9yZWFkeToiLAogCQkJIGxlMzJfdG9fY3B1KHR4LT5hZ2cuZnJhbWVfbm90X3JlYWR5KSwKLQkJCSBhY2N1bV90eC0+YWdnLmZyYW1lX25vdF9yZWFkeSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJhZ2cgdW5kZXJydW46XHRcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV90eC0+YWdnLmZyYW1lX25vdF9yZWFkeSwKKwkJCSBkZWx0YV90eC0+YWdnLmZyYW1lX25vdF9yZWFkeSwKKwkJCSBtYXhfdHgtPmFnZy5mcmFtZV9ub3RfcmVhZHkpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJhZ2cgdW5kZXJydW46IiwKIAkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLnVuZGVycnVuKSwKLQkJCSBhY2N1bV90eC0+YWdnLnVuZGVycnVuKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgImFnZyBidF9wcmlvX2tpbGw6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fdHgtPmFnZy51bmRlcnJ1biwKKwkJCSBkZWx0YV90eC0+YWdnLnVuZGVycnVuLCBtYXhfdHgtPmFnZy51bmRlcnJ1bik7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgImFnZyBidF9wcmlvX2tpbGw6IiwKIAkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLmJ0X3ByaW9fa2lsbCksCi0JCQkgYWNjdW1fdHgtPmFnZy5idF9wcmlvX2tpbGwpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiYWdnIHJ4X2JhX3JzcF9jbnQ6XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fdHgtPmFnZy5idF9wcmlvX2tpbGwsCisJCQkgZGVsdGFfdHgtPmFnZy5idF9wcmlvX2tpbGwsCisJCQkgbWF4X3R4LT5hZ2cuYnRfcHJpb19raWxsKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiYWdnIHJ4X2JhX3JzcF9jbnQ6IiwKIAkJCSBsZTMyX3RvX2NwdSh0eC0+YWdnLnJ4X2JhX3JzcF9jbnQpLAotCQkJIGFjY3VtX3R4LT5hZ2cucnhfYmFfcnNwX2NudCk7CisJCQkgYWNjdW1fdHgtPmFnZy5yeF9iYV9yc3BfY250LAorCQkJIGRlbHRhX3R4LT5hZ2cucnhfYmFfcnNwX2NudCwKKwkJCSBtYXhfdHgtPmFnZy5yeF9iYV9yc3BfY250KTsKIAogCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOwogCWtmcmVlKGJ1Zik7CkBAIC0xNTIxLDI4ICsxNjkxLDE5IEBACiAJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJaW50IHBvcyA9IDA7CiAJY2hhciAqYnVmOwotCWludCBidWZzeiA9IHNpemVvZihzdHJ1Y3Qgc3RhdGlzdGljc19nZW5lcmFsKSAqIDQgKyAyNTA7CisJaW50IGJ1ZnN6ID0gc2l6ZW9mKHN0cnVjdCBzdGF0aXN0aWNzX2dlbmVyYWwpICogMTAgKyAzMDA7CiAJc3NpemVfdCByZXQ7CiAJc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbCAqZ2VuZXJhbCwgKmFjY3VtX2dlbmVyYWw7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfZGJnICpkYmcsICphY2N1bV9kYmc7Ci0Jc3RydWN0IHN0YXRpc3RpY3NfZGl2ICpkaXYsICphY2N1bV9kaXY7CisJc3RydWN0IHN0YXRpc3RpY3NfZ2VuZXJhbCAqZGVsdGFfZ2VuZXJhbCwgKm1heF9nZW5lcmFsOworCXN0cnVjdCBzdGF0aXN0aWNzX2RiZyAqZGJnLCAqYWNjdW1fZGJnLCAqZGVsdGFfZGJnLCAqbWF4X2RiZzsKKwlzdHJ1Y3Qgc3RhdGlzdGljc19kaXYgKmRpdiwgKmFjY3VtX2RpdiwgKmRlbHRhX2RpdiwgKm1heF9kaXY7CiAKIAlpZiAoIWl3bF9pc19hbGl2ZShwcml2KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQkvKiBtYWtlIHJlcXVlc3QgdG8gdUNvZGUgdG8gcmV0cmlldmUgc3RhdGlzdGljcyBpbmZvcm1hdGlvbiAqLwotCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQlyZXQgPSBpd2xfc2VuZF9zdGF0aXN0aWNzX3JlcXVlc3QocHJpdiwgQ01EX1NZTkMsIGZhbHNlKTsKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLQotCWlmIChyZXQpIHsKLQkJSVdMX0VSUihwcml2LAotCQkJIkVycm9yIHNlbmRpbmcgc3RhdGlzdGljcyByZXF1ZXN0OiAlemRcbiIsIHJldCk7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KIAlidWYgPSBremFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewogCQlJV0xfRVJSKHByaXYsICJDYW4gbm90IGFsbG9jYXRlIEJ1ZmZlclxuIik7CkBAIC0xNTU3LDUyICsxNzE4LDc4IEBACiAJZGJnID0gJnByaXYtPnN0YXRpc3RpY3MuZ2VuZXJhbC5kYmc7CiAJZGl2ID0gJnByaXYtPnN0YXRpc3RpY3MuZ2VuZXJhbC5kaXY7CiAJYWNjdW1fZ2VuZXJhbCA9ICZwcml2LT5hY2N1bV9zdGF0aXN0aWNzLmdlbmVyYWw7CisJZGVsdGFfZ2VuZXJhbCA9ICZwcml2LT5kZWx0YV9zdGF0aXN0aWNzLmdlbmVyYWw7CisJbWF4X2dlbmVyYWwgPSAmcHJpdi0+bWF4X2RlbHRhLmdlbmVyYWw7CiAJYWNjdW1fZGJnID0gJnByaXYtPmFjY3VtX3N0YXRpc3RpY3MuZ2VuZXJhbC5kYmc7CisJZGVsdGFfZGJnID0gJnByaXYtPmRlbHRhX3N0YXRpc3RpY3MuZ2VuZXJhbC5kYmc7CisJbWF4X2RiZyA9ICZwcml2LT5tYXhfZGVsdGEuZ2VuZXJhbC5kYmc7CiAJYWNjdW1fZGl2ID0gJnByaXYtPmFjY3VtX3N0YXRpc3RpY3MuZ2VuZXJhbC5kaXY7CisJZGVsdGFfZGl2ID0gJnByaXYtPmRlbHRhX3N0YXRpc3RpY3MuZ2VuZXJhbC5kaXY7CisJbWF4X2RpdiA9ICZwcml2LT5tYXhfZGVsdGEuZ2VuZXJhbC5kaXY7CiAJcG9zICs9IGl3bF9kYmdmc19zdGF0aXN0aWNzX2ZsYWcocHJpdiwgYnVmLCBidWZzeik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAiU3RhdGlzdGljc19HZW5lcmFsOlxuIik7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJIlx0XHRcdGN1cnJlbnRcdFx0XHRhY2N1bXVsYXRpdmVcbiIpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInRlbXBlcmF0dXJlOlx0XHRcdCV1XG4iLAorCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfaGVhZGVyLAorCQkJIlN0YXRpc3RpY3NfR2VuZXJhbDoiKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX3Nob3J0X2Zvcm1hdCwKKwkJCSAidGVtcGVyYXR1cmU6IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT50ZW1wZXJhdHVyZSkpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInRlbXBlcmF0dXJlX206XHRcdFx0JXVcbiIsCisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19zaG9ydF9mb3JtYXQsCisJCQkgInRlbXBlcmF0dXJlX206IiwKIAkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT50ZW1wZXJhdHVyZV9tKSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJidXJzdF9jaGVjazpcdFx0XHQldVx0XHRcdCV1XG4iLAorCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJidXJzdF9jaGVjazoiLAogCQkJIGxlMzJfdG9fY3B1KGRiZy0+YnVyc3RfY2hlY2spLAotCQkJIGFjY3VtX2RiZy0+YnVyc3RfY2hlY2spOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiYnVyc3RfY291bnQ6XHRcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9kYmctPmJ1cnN0X2NoZWNrLAorCQkJIGRlbHRhX2RiZy0+YnVyc3RfY2hlY2ssIG1heF9kYmctPmJ1cnN0X2NoZWNrKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiYnVyc3RfY291bnQ6IiwKIAkJCSBsZTMyX3RvX2NwdShkYmctPmJ1cnN0X2NvdW50KSwKLQkJCSBhY2N1bV9kYmctPmJ1cnN0X2NvdW50KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgInNsZWVwX3RpbWU6XHRcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9kYmctPmJ1cnN0X2NvdW50LAorCQkJIGRlbHRhX2RiZy0+YnVyc3RfY291bnQsIG1heF9kYmctPmJ1cnN0X2NvdW50KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAic2xlZXBfdGltZToiLAogCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnNsZWVwX3RpbWUpLAotCQkJIGFjY3VtX2dlbmVyYWwtPnNsZWVwX3RpbWUpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAic2xvdHNfb3V0Olx0XHRcdCV1XHRcdFx0JXVcbiIsCisJCQkgYWNjdW1fZ2VuZXJhbC0+c2xlZXBfdGltZSwKKwkJCSBkZWx0YV9nZW5lcmFsLT5zbGVlcF90aW1lLCBtYXhfZ2VuZXJhbC0+c2xlZXBfdGltZSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgInNsb3RzX291dDoiLAogCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnNsb3RzX291dCksCi0JCQkgYWNjdW1fZ2VuZXJhbC0+c2xvdHNfb3V0KTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgInNsb3RzX2lkbGU6XHRcdFx0JXVcdFx0XHQldVxuIiwKKwkJCSBhY2N1bV9nZW5lcmFsLT5zbG90c19vdXQsCisJCQkgZGVsdGFfZ2VuZXJhbC0+c2xvdHNfb3V0LCBtYXhfZ2VuZXJhbC0+c2xvdHNfb3V0KTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAic2xvdHNfaWRsZToiLAogCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnNsb3RzX2lkbGUpLAotCQkJIGFjY3VtX2dlbmVyYWwtPnNsb3RzX2lkbGUpOworCQkJIGFjY3VtX2dlbmVyYWwtPnNsb3RzX2lkbGUsCisJCQkgZGVsdGFfZ2VuZXJhbC0+c2xvdHNfaWRsZSwgbWF4X2dlbmVyYWwtPnNsb3RzX2lkbGUpOwogCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInR0bF90aW1lc3RhbXA6XHRcdFx0JXVcbiIsCiAJCQkgbGUzMl90b19jcHUoZ2VuZXJhbC0+dHRsX3RpbWVzdGFtcCkpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInR4X29uX2E6XHRcdFx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdShkaXYtPnR4X29uX2EpLCBhY2N1bV9kaXYtPnR4X29uX2EpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgInR4X29uX2I6XHRcdFx0JXVcdFx0XHQldVxuIiwKLQkJCSBsZTMyX3RvX2NwdShkaXYtPnR4X29uX2IpLCBhY2N1bV9kaXYtPnR4X29uX2IpOwotCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKLQkJCSAiZXhlY190aW1lOlx0XHRcdCV1XHRcdFx0JXVcbiIsCi0JCQkgbGUzMl90b19jcHUoZGl2LT5leGVjX3RpbWUpLCBhY2N1bV9kaXYtPmV4ZWNfdGltZSk7Ci0JcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAotCQkJICJwcm9iZV90aW1lOlx0XHRcdCV1XHRcdFx0JXVcbiIsCi0JCQkgbGUzMl90b19jcHUoZGl2LT5wcm9iZV90aW1lKSwgYWNjdW1fZGl2LT5wcm9iZV90aW1lKTsKLQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCi0JCQkgInJ4X2VuYWJsZV9jb3VudGVyOlx0XHQldVx0XHRcdCV1XG4iLAorCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJ0eF9vbl9hOiIsCisJCQkgbGUzMl90b19jcHUoZGl2LT50eF9vbl9hKSwgYWNjdW1fZGl2LT50eF9vbl9hLAorCQkJIGRlbHRhX2Rpdi0+dHhfb25fYSwgbWF4X2Rpdi0+dHhfb25fYSk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCB1Y29kZV9zdGF0c19mb3JtYXQsCisJCQkgInR4X29uX2I6IiwKKwkJCSBsZTMyX3RvX2NwdShkaXYtPnR4X29uX2IpLCBhY2N1bV9kaXYtPnR4X29uX2IsCisJCQkgZGVsdGFfZGl2LT50eF9vbl9iLCBtYXhfZGl2LT50eF9vbl9iKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAiZXhlY190aW1lOiIsCisJCQkgbGUzMl90b19jcHUoZGl2LT5leGVjX3RpbWUpLCBhY2N1bV9kaXYtPmV4ZWNfdGltZSwKKwkJCSBkZWx0YV9kaXYtPmV4ZWNfdGltZSwgbWF4X2Rpdi0+ZXhlY190aW1lKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAicHJvYmVfdGltZToiLAorCQkJIGxlMzJfdG9fY3B1KGRpdi0+cHJvYmVfdGltZSksIGFjY3VtX2Rpdi0+cHJvYmVfdGltZSwKKwkJCSBkZWx0YV9kaXYtPnByb2JlX3RpbWUsIG1heF9kaXYtPnByb2JlX3RpbWUpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgdWNvZGVfc3RhdHNfZm9ybWF0LAorCQkJICJyeF9lbmFibGVfY291bnRlcjoiLAogCQkJIGxlMzJfdG9fY3B1KGdlbmVyYWwtPnJ4X2VuYWJsZV9jb3VudGVyKSwKLQkJCSBhY2N1bV9nZW5lcmFsLT5yeF9lbmFibGVfY291bnRlcik7CisJCQkgYWNjdW1fZ2VuZXJhbC0+cnhfZW5hYmxlX2NvdW50ZXIsCisJCQkgZGVsdGFfZ2VuZXJhbC0+cnhfZW5hYmxlX2NvdW50ZXIsCisJCQkgbWF4X2dlbmVyYWwtPnJ4X2VuYWJsZV9jb3VudGVyKTsKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsIHVjb2RlX3N0YXRzX2Zvcm1hdCwKKwkJCSAibnVtX29mX3Nvc19zdGF0ZXM6IiwKKwkJCSBsZTMyX3RvX2NwdShnZW5lcmFsLT5udW1fb2Zfc29zX3N0YXRlcyksCisJCQkgYWNjdW1fZ2VuZXJhbC0+bnVtX29mX3Nvc19zdGF0ZXMsCisJCQkgZGVsdGFfZ2VuZXJhbC0+bnVtX29mX3Nvc19zdGF0ZXMsCisJCQkgbWF4X2dlbmVyYWwtPm51bV9vZl9zb3Nfc3RhdGVzKTsKIAlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKIAlrZnJlZShidWYpOwogCXJldHVybiByZXQ7CkBAIC0xNjEyLDcgKzE3OTksNyBAQAogCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CiAKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgcG9zID0gMDsKIAlpbnQgY250ID0gMDsKIAljaGFyICpidWY7CkBAIC0xNjkzLDcgKzE4ODAsNyBAQAogCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CiAKLQlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgcG9zID0gMDsKIAlpbnQgY250ID0gMDsKIAljaGFyICpidWY7CkBAIC0xNzUxLDI2ICsxOTM4LDE1IEBACiAJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKIAkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpIHsKIAotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgaXdsX3ByaXYgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWNoYXIgYnVmWzEyOF07CiAJaW50IHBvcyA9IDA7Ci0Jc3NpemVfdCByZXQ7CiAJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7CiAJc3RydWN0IHN0YXRpc3RpY3NfdHggKnR4OwogCiAJaWYgKCFpd2xfaXNfYWxpdmUocHJpdikpCiAJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIk4vQVxuIik7CiAJZWxzZSB7Ci0JCS8qIG1ha2UgcmVxdWVzdCB0byB1Q29kZSB0byByZXRyaWV2ZSBzdGF0aXN0aWNzIGluZm9ybWF0aW9uICovCi0JCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQkJcmV0ID0gaXdsX3NlbmRfc3RhdGlzdGljc19yZXF1ZXN0KHByaXYsIENNRF9TWU5DLCBmYWxzZSk7Ci0JCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwotCi0JCWlmIChyZXQpIHsKLQkJCUlXTF9FUlIocHJpdiwgIkVycm9yIHNlbmRpbmcgc3RhdGlzdGljcyByZXF1ZXN0OiAlemRcbiIsCi0JCQkJcmV0KTsKLQkJCXJldHVybiAtRUFHQUlOOwotCQl9CiAJCXR4ID0gJnByaXYtPnN0YXRpc3RpY3MudHg7CiAJCWlmICh0eC0+dHhfcG93ZXIuYW50X2EgfHwKIAkJICAgIHR4LT50eF9wb3dlci5hbnRfYiB8fApAQCAtMTgwMiw3ICsxOTc4LDcgQEAKIAkJCQkJCSAgICBjaGFyIF9fdXNlciAqdXNlcl9idWYsCiAJCQkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJY2hhciBidWZbNjBdOwogCWludCBwb3MgPSAwOwogCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOwpAQCAtMTg0NSw2ICsyMDIxLDI2MiBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX2Nzcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJIGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls4XTsKKwlpbnQgYnVmX3NpemU7CisJaW50IGNzcjsKKworCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwlidWZfc2l6ZSA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAgMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGJ1Zl9zaXplKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHNzY2FuZihidWYsICIlZCIsICZjc3IpICE9IDEpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfY3NyKQorCQlwcml2LT5jZmctPm9wcy0+bGliLT5kdW1wX2Nzcihwcml2KTsKKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX3Vjb2RlX3RyYWNpbmdfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgeworCisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcG9zID0gMDsKKwljaGFyIGJ1ZlsxMjhdOworCWNvbnN0IHNpemVfdCBidWZzeiA9IHNpemVvZihidWYpOworCXNzaXplX3QgcmV0OworCisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAidWNvZGUgdHJhY2UgdGltZXIgaXMgJXNcbiIsCisJCQlwcml2LT5ldmVudF9sb2cudWNvZGVfdHJhY2UgPyAiT24iIDogIk9mZiIpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIm5vbl93cmFwc19jb3VudDpcdFx0ICV1XG4iLAorCQkJcHJpdi0+ZXZlbnRfbG9nLm5vbl93cmFwc19jb3VudCk7CisJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLCAid3JhcHNfb25jZV9jb3VudDpcdFx0ICV1XG4iLAorCQkJcHJpdi0+ZXZlbnRfbG9nLndyYXBzX29uY2VfY291bnQpOworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIndyYXBzX21vcmVfY291bnQ6XHRcdCAldVxuIiwKKwkJCXByaXYtPmV2ZW50X2xvZy53cmFwc19tb3JlX2NvdW50KTsKKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc191Y29kZV90cmFjaW5nX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzhdOworCWludCBidWZfc2l6ZTsKKwlpbnQgdHJhY2U7CisKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJYnVmX3NpemUgPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBidWZfc2l6ZSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmdHJhY2UpICE9IDEpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHRyYWNlKSB7CisJCXByaXYtPmV2ZW50X2xvZy51Y29kZV90cmFjZSA9IHRydWU7CisJCS8qIHNjaGVkdWxlIHRoZSB1Y29kZSB0aW1lciB0byBvY2N1ciBpbiBVQ09ERV9UUkFDRV9QRVJJT0QgKi8KKwkJbW9kX3RpbWVyKCZwcml2LT51Y29kZV90cmFjZSwKKwkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFVDT0RFX1RSQUNFX1BFUklPRCkpOworCX0gZWxzZSB7CisJCXByaXYtPmV2ZW50X2xvZy51Y29kZV90cmFjZSA9IGZhbHNlOworCQlkZWxfdGltZXJfc3luYygmcHJpdi0+dWNvZGVfdHJhY2UpOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QgaXdsX2RiZ2ZzX2ZoX3JlZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gKHN0cnVjdCBpd2xfcHJpdiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyICpidWY7CisJaW50IHBvcyA9IDA7CisJc3NpemVfdCByZXQgPSAtRUZBVUxUOworCisJaWYgKHByaXYtPmNmZy0+b3BzLT5saWItPmR1bXBfZmgpIHsKKwkJcmV0ID0gcG9zID0gcHJpdi0+Y2ZnLT5vcHMtPmxpYi0+ZHVtcF9maChwcml2LCAmYnVmLCB0cnVlKTsKKwkJaWYgKGJ1ZikgeworCQkJcmV0ID0gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcl9idWYsCisJCQkJCQkgICAgICBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCQkJa2ZyZWUoYnVmKTsKKwkJfQorCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19taXNzZWRfYmVhY29uX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCWNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpIHsKKworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlpbnQgcG9zID0gMDsKKwljaGFyIGJ1ZlsxMl07CisJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7CisJc3NpemVfdCByZXQ7CisKKwlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsICIlZFxuIiwKKwkJCXByaXYtPm1pc3NlZF9iZWFjb25fdGhyZXNob2xkKTsKKworCXJldCA9IHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19taXNzZWRfYmVhY29uX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzhdOworCWludCBidWZfc2l6ZTsKKwlpbnQgbWlzc2VkOworCisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworCWJ1Zl9zaXplID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtICAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgYnVmX3NpemUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJm1pc3NlZCkgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAobWlzc2VkIDwgSVdMX01JU1NFRF9CRUFDT05fVEhSRVNIT0xEX01JTiB8fAorCSAgICBtaXNzZWQgPiBJV0xfTUlTU0VEX0JFQUNPTl9USFJFU0hPTERfTUFYKQorCQlwcml2LT5taXNzZWRfYmVhY29uX3RocmVzaG9sZCA9CisJCQlJV0xfTUlTU0VEX0JFQUNPTl9USFJFU0hPTERfREVGOworCWVsc2UKKwkJcHJpdi0+bWlzc2VkX2JlYWNvbl90aHJlc2hvbGQgPSBtaXNzZWQ7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGl3bF9kYmdmc19pbnRlcm5hbF9zY2FuX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzhdOworCWludCBidWZfc2l6ZTsKKwlpbnQgc2NhbjsKKworCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwlidWZfc2l6ZSA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAgMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGJ1Zl9zaXplKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHNzY2FuZihidWYsICIlZCIsICZzY2FuKSAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWl3bF9pbnRlcm5hbF9zaG9ydF9od19zY2FuKHByaXYpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfcGxjcF9kZWx0YV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQljaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKSB7CisKKwlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSAoc3RydWN0IGl3bF9wcml2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCBwb3MgPSAwOworCWNoYXIgYnVmWzEyXTsKKwljb25zdCBzaXplX3QgYnVmc3ogPSBzaXplb2YoYnVmKTsKKwlzc2l6ZV90IHJldDsKKworCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywgIiV1XG4iLAorCQkJcHJpdi0+Y2ZnLT5wbGNwX2RlbHRhX3RocmVzaG9sZCk7CisKKwlyZXQgPSBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcG9zKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfcGxjcF9kZWx0YV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgeworCisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzhdOworCWludCBidWZfc2l6ZTsKKwlpbnQgcGxjcDsKKworCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKwlidWZfc2l6ZSA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAgMSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgdXNlcl9idWYsIGJ1Zl9zaXplKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKHNzY2FuZihidWYsICIlZCIsICZwbGNwKSAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoKHBsY3AgPD0gSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfTUlOKSB8fAorCQkocGxjcCA+IElXTF9NQVhfUExDUF9FUlJfVEhSRVNIT0xEX01BWCkpCisJCXByaXYtPmNmZy0+cGxjcF9kZWx0YV90aHJlc2hvbGQgPQorCQkJSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfREVGOworCWVsc2UKKwkJcHJpdi0+Y2ZnLT5wbGNwX2RlbHRhX3RocmVzaG9sZCA9IHBsY3A7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfZm9yY2VfcmVzZXRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkJY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykgeworCisJc3RydWN0IGl3bF9wcml2ICpwcml2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWludCBpLCBwb3MgPSAwOworCWNoYXIgYnVmWzMwMF07CisJY29uc3Qgc2l6ZV90IGJ1ZnN6ID0gc2l6ZW9mKGJ1Zik7CisJc3RydWN0IGl3bF9mb3JjZV9yZXNldCAqZm9yY2VfcmVzZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgSVdMX01BWF9GT1JDRV9SRVNFVDsgaSsrKSB7CisJCWZvcmNlX3Jlc2V0ID0gJnByaXYtPmZvcmNlX3Jlc2V0W2ldOworCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJIkZvcmNlIHJlc2V0IG1ldGhvZCAlZFxuIiwgaSk7CisJCXBvcyArPSBzY25wcmludGYoYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkiXHRudW1iZXIgb2YgcmVzZXQgcmVxdWVzdDogJWRcbiIsCisJCQkJZm9yY2VfcmVzZXQtPnJlc2V0X3JlcXVlc3RfY291bnQpOworCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJIlx0bnVtYmVyIG9mIHJlc2V0IHJlcXVlc3Qgc3VjY2VzczogJWRcbiIsCisJCQkJZm9yY2VfcmVzZXQtPnJlc2V0X3N1Y2Nlc3NfY291bnQpOworCQlwb3MgKz0gc2NucHJpbnRmKGJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJIlx0bnVtYmVyIG9mIHJlc2V0IHJlcXVlc3QgcmVqZWN0OiAlZFxuIiwKKwkJCQlmb3JjZV9yZXNldC0+cmVzZXRfcmVqZWN0X2NvdW50KTsKKwkJcG9zICs9IHNjbnByaW50ZihidWYgKyBwb3MsIGJ1ZnN6IC0gcG9zLAorCQkJCSJcdHJlc2V0IGR1cmF0aW9uOiAlbHVcbiIsCisJCQkJZm9yY2VfcmVzZXQtPnJlc2V0X2R1cmF0aW9uKTsKKwl9CisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBwb3MpOworfQorCitzdGF0aWMgc3NpemVfdCBpd2xfZGJnZnNfZm9yY2VfcmVzZXRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJCWNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpIHsKKworCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwljaGFyIGJ1Zls4XTsKKwlpbnQgYnVmX3NpemU7CisJaW50IHJlc2V0LCByZXQ7CisKKwltZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7CisJYnVmX3NpemUgPSBtaW4oY291bnQsIHNpemVvZihidWYpIC0gIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBidWZfc2l6ZSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmcmVzZXQpICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCXN3aXRjaCAocmVzZXQpIHsKKwljYXNlIElXTF9SRl9SRVNFVDoKKwljYXNlIElXTF9GV19SRVNFVDoKKwkJcmV0ID0gaXdsX2ZvcmNlX3Jlc2V0KHByaXYsIHJlc2V0KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiByZXQgPyByZXQgOiBjb3VudDsKK30KKwogREVCVUdGU19SRUFEX0ZJTEVfT1BTKHJ4X3N0YXRpc3RpY3MpOwogREVCVUdGU19SRUFEX0ZJTEVfT1BTKHR4X3N0YXRpc3RpY3MpOwogREVCVUdGU19SRUFEX1dSSVRFX0ZJTEVfT1BTKHRyYWZmaWNfbG9nKTsKQEAgLTE4NTksNiArMjI5MSwxMyBAQAogREVCVUdGU19SRUFEX0ZJTEVfT1BTKHBvd2VyX3NhdmVfc3RhdHVzKTsKIERFQlVHRlNfV1JJVEVfRklMRV9PUFMoY2xlYXJfdWNvZGVfc3RhdGlzdGljcyk7CiBERUJVR0ZTX1dSSVRFX0ZJTEVfT1BTKGNsZWFyX3RyYWZmaWNfc3RhdGlzdGljcyk7CitERUJVR0ZTX1dSSVRFX0ZJTEVfT1BTKGNzcik7CitERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFModWNvZGVfdHJhY2luZyk7CitERUJVR0ZTX1JFQURfRklMRV9PUFMoZmhfcmVnKTsKK0RFQlVHRlNfUkVBRF9XUklURV9GSUxFX09QUyhtaXNzZWRfYmVhY29uKTsKK0RFQlVHRlNfV1JJVEVfRklMRV9PUFMoaW50ZXJuYWxfc2Nhbik7CitERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFMocGxjcF9kZWx0YSk7CitERUJVR0ZTX1JFQURfV1JJVEVfRklMRV9PUFMoZm9yY2VfcmVzZXQpOwogCiAvKgogICogQ3JlYXRlIHRoZSBkZWJ1Z2ZzIGZpbGVzIGFuZCBkaXJlY3RvcmllcwpAQCAtMTg2Niw2OSArMjMwNSw3NCBAQAogICovCiBpbnQgaXdsX2RiZ2ZzX3JlZ2lzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgaXdsX2RlYnVnZnMgKmRiZ2ZzOwogCXN0cnVjdCBkZW50cnkgKnBoeWQgPSBwcml2LT5ody0+d2lwaHktPmRlYnVnZnNkaXI7Ci0JaW50IHJldCA9IDA7CisJc3RydWN0IGRlbnRyeSAqZGlyX2RydiwgKmRpcl9kYXRhLCAqZGlyX3JmLCAqZGlyX2RlYnVnOwogCi0JZGJnZnMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXdsX2RlYnVnZnMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRiZ2ZzKSB7Ci0JCXJldCA9IC1FTk9NRU07CisJZGlyX2RydiA9IGRlYnVnZnNfY3JlYXRlX2RpcihuYW1lLCBwaHlkKTsKKwlpZiAoIWRpcl9kcnYpCisJCXJldHVybiAtRU5PTUVNOworCisJcHJpdi0+ZGVidWdmc19kaXIgPSBkaXJfZHJ2OworCisJZGlyX2RhdGEgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImRhdGEiLCBkaXJfZHJ2KTsKKwlpZiAoIWRpcl9kYXRhKQogCQlnb3RvIGVycjsKLQl9Ci0KLQlwcml2LT5kYmdmcyA9IGRiZ2ZzOwotCWRiZ2ZzLT5uYW1lID0gbmFtZTsKLQlkYmdmcy0+ZGlyX2RydiA9IGRlYnVnZnNfY3JlYXRlX2RpcihuYW1lLCBwaHlkKTsKLQlpZiAoIWRiZ2ZzLT5kaXJfZHJ2IHx8IElTX0VSUihkYmdmcy0+ZGlyX2RydikpIHsKLQkJcmV0ID0gLUVOT0VOVDsKKwlkaXJfcmYgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInJmIiwgZGlyX2Rydik7CisJaWYgKCFkaXJfcmYpCiAJCWdvdG8gZXJyOwotCX0KKwlkaXJfZGVidWcgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImRlYnVnIiwgZGlyX2Rydik7CisJaWYgKCFkaXJfZGVidWcpCisJCWdvdG8gZXJyOwogCi0JREVCVUdGU19BRERfRElSKGRhdGEsIGRiZ2ZzLT5kaXJfZHJ2KTsKLQlERUJVR0ZTX0FERF9ESVIocmYsIGRiZ2ZzLT5kaXJfZHJ2KTsKLQlERUJVR0ZTX0FERF9ESVIoZGVidWcsIGRiZ2ZzLT5kaXJfZHJ2KTsKLQlERUJVR0ZTX0FERF9GSUxFKG52bSwgZGF0YSwgU19JUlVTUik7Ci0JREVCVUdGU19BRERfRklMRShzcmFtLCBkYXRhLCBTX0lXVVNSIHwgU19JUlVTUik7Ci0JREVCVUdGU19BRERfRklMRShsb2dfZXZlbnQsIGRhdGEsIFNfSVdVU1IpOwotCURFQlVHRlNfQUREX0ZJTEUoc3RhdGlvbnMsIGRhdGEsIFNfSVJVU1IpOwotCURFQlVHRlNfQUREX0ZJTEUoY2hhbm5lbHMsIGRhdGEsIFNfSVJVU1IpOwotCURFQlVHRlNfQUREX0ZJTEUoc3RhdHVzLCBkYXRhLCBTX0lSVVNSKTsKLQlERUJVR0ZTX0FERF9GSUxFKGludGVycnVwdCwgZGF0YSwgU19JV1VTUiB8IFNfSVJVU1IpOwotCURFQlVHRlNfQUREX0ZJTEUocW9zLCBkYXRhLCBTX0lSVVNSKTsKLQlERUJVR0ZTX0FERF9GSUxFKGxlZCwgZGF0YSwgU19JUlVTUik7Ci0JREVCVUdGU19BRERfRklMRShzbGVlcF9sZXZlbF9vdmVycmlkZSwgZGF0YSwgU19JV1VTUiB8IFNfSVJVU1IpOwotCURFQlVHRlNfQUREX0ZJTEUoY3VycmVudF9zbGVlcF9jb21tYW5kLCBkYXRhLCBTX0lSVVNSKTsKLQlERUJVR0ZTX0FERF9GSUxFKHRoZXJtYWxfdGhyb3R0bGluZywgZGF0YSwgU19JUlVTUik7Ci0JREVCVUdGU19BRERfRklMRShkaXNhYmxlX2h0NDAsIGRhdGEsIFNfSVdVU1IgfCBTX0lSVVNSKTsKLQlERUJVR0ZTX0FERF9GSUxFKHJ4X3N0YXRpc3RpY3MsIGRlYnVnLCBTX0lSVVNSKTsKLQlERUJVR0ZTX0FERF9GSUxFKHR4X3N0YXRpc3RpY3MsIGRlYnVnLCBTX0lSVVNSKTsKLQlERUJVR0ZTX0FERF9GSUxFKHRyYWZmaWNfbG9nLCBkZWJ1ZywgU19JV1VTUiB8IFNfSVJVU1IpOwotCURFQlVHRlNfQUREX0ZJTEUocnhfcXVldWUsIGRlYnVnLCBTX0lSVVNSKTsKLQlERUJVR0ZTX0FERF9GSUxFKHR4X3F1ZXVlLCBkZWJ1ZywgU19JUlVTUik7Ci0JREVCVUdGU19BRERfRklMRSh0eF9wb3dlciwgZGVidWcsIFNfSVJVU1IpOwotCURFQlVHRlNfQUREX0ZJTEUocG93ZXJfc2F2ZV9zdGF0dXMsIGRlYnVnLCBTX0lSVVNSKTsKLQlERUJVR0ZTX0FERF9GSUxFKGNsZWFyX3Vjb2RlX3N0YXRpc3RpY3MsIGRlYnVnLCBTX0lXVVNSKTsKLQlERUJVR0ZTX0FERF9GSUxFKGNsZWFyX3RyYWZmaWNfc3RhdGlzdGljcywgZGVidWcsIFNfSVdVU1IpOworCURFQlVHRlNfQUREX0ZJTEUobnZtLCBkaXJfZGF0YSwgU19JUlVTUik7CisJREVCVUdGU19BRERfRklMRShzcmFtLCBkaXJfZGF0YSwgU19JV1VTUiB8IFNfSVJVU1IpOworCURFQlVHRlNfQUREX0ZJTEUobG9nX2V2ZW50LCBkaXJfZGF0YSwgU19JV1VTUiB8IFNfSVJVU1IpOworCURFQlVHRlNfQUREX0ZJTEUoc3RhdGlvbnMsIGRpcl9kYXRhLCBTX0lSVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKGNoYW5uZWxzLCBkaXJfZGF0YSwgU19JUlVTUik7CisJREVCVUdGU19BRERfRklMRShzdGF0dXMsIGRpcl9kYXRhLCBTX0lSVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKGludGVycnVwdCwgZGlyX2RhdGEsIFNfSVdVU1IgfCBTX0lSVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKHFvcywgZGlyX2RhdGEsIFNfSVJVU1IpOworCURFQlVHRlNfQUREX0ZJTEUobGVkLCBkaXJfZGF0YSwgU19JUlVTUik7CisJREVCVUdGU19BRERfRklMRShzbGVlcF9sZXZlbF9vdmVycmlkZSwgZGlyX2RhdGEsIFNfSVdVU1IgfCBTX0lSVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKGN1cnJlbnRfc2xlZXBfY29tbWFuZCwgZGlyX2RhdGEsIFNfSVJVU1IpOworCURFQlVHRlNfQUREX0ZJTEUodGhlcm1hbF90aHJvdHRsaW5nLCBkaXJfZGF0YSwgU19JUlVTUik7CisJREVCVUdGU19BRERfRklMRShkaXNhYmxlX2h0NDAsIGRpcl9kYXRhLCBTX0lXVVNSIHwgU19JUlVTUik7CisJREVCVUdGU19BRERfRklMRShyeF9zdGF0aXN0aWNzLCBkaXJfZGVidWcsIFNfSVJVU1IpOworCURFQlVHRlNfQUREX0ZJTEUodHhfc3RhdGlzdGljcywgZGlyX2RlYnVnLCBTX0lSVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKHRyYWZmaWNfbG9nLCBkaXJfZGVidWcsIFNfSVdVU1IgfCBTX0lSVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKHJ4X3F1ZXVlLCBkaXJfZGVidWcsIFNfSVJVU1IpOworCURFQlVHRlNfQUREX0ZJTEUodHhfcXVldWUsIGRpcl9kZWJ1ZywgU19JUlVTUik7CisJREVCVUdGU19BRERfRklMRSh0eF9wb3dlciwgZGlyX2RlYnVnLCBTX0lSVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKHBvd2VyX3NhdmVfc3RhdHVzLCBkaXJfZGVidWcsIFNfSVJVU1IpOworCURFQlVHRlNfQUREX0ZJTEUoY2xlYXJfdWNvZGVfc3RhdGlzdGljcywgZGlyX2RlYnVnLCBTX0lXVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKGNsZWFyX3RyYWZmaWNfc3RhdGlzdGljcywgZGlyX2RlYnVnLCBTX0lXVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKGNzciwgZGlyX2RlYnVnLCBTX0lXVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKGZoX3JlZywgZGlyX2RlYnVnLCBTX0lSVVNSKTsKKwlERUJVR0ZTX0FERF9GSUxFKG1pc3NlZF9iZWFjb24sIGRpcl9kZWJ1ZywgU19JV1VTUik7CisJREVCVUdGU19BRERfRklMRShpbnRlcm5hbF9zY2FuLCBkaXJfZGVidWcsIFNfSVdVU1IpOworCURFQlVHRlNfQUREX0ZJTEUocGxjcF9kZWx0YSwgZGlyX2RlYnVnLCBTX0lXVVNSIHwgU19JUlVTUik7CisJREVCVUdGU19BRERfRklMRShmb3JjZV9yZXNldCwgZGlyX2RlYnVnLCBTX0lXVVNSIHwgU19JUlVTUik7CiAJaWYgKChwcml2LT5od19yZXYgJiBDU1JfSFdfUkVWX1RZUEVfTVNLKSAhPSBDU1JfSFdfUkVWX1RZUEVfMzk0NSkgewotCQlERUJVR0ZTX0FERF9GSUxFKHVjb2RlX3J4X3N0YXRzLCBkZWJ1ZywgU19JUlVTUik7Ci0JCURFQlVHRlNfQUREX0ZJTEUodWNvZGVfdHhfc3RhdHMsIGRlYnVnLCBTX0lSVVNSKTsKLQkJREVCVUdGU19BRERfRklMRSh1Y29kZV9nZW5lcmFsX3N0YXRzLCBkZWJ1ZywgU19JUlVTUik7Ci0JCURFQlVHRlNfQUREX0ZJTEUoc2Vuc2l0aXZpdHksIGRlYnVnLCBTX0lSVVNSKTsKLQkJREVCVUdGU19BRERfRklMRShjaGFpbl9ub2lzZSwgZGVidWcsIFNfSVJVU1IpOworCQlERUJVR0ZTX0FERF9GSUxFKHVjb2RlX3J4X3N0YXRzLCBkaXJfZGVidWcsIFNfSVJVU1IpOworCQlERUJVR0ZTX0FERF9GSUxFKHVjb2RlX3R4X3N0YXRzLCBkaXJfZGVidWcsIFNfSVJVU1IpOworCQlERUJVR0ZTX0FERF9GSUxFKHVjb2RlX2dlbmVyYWxfc3RhdHMsIGRpcl9kZWJ1ZywgU19JUlVTUik7CisJCURFQlVHRlNfQUREX0ZJTEUoc2Vuc2l0aXZpdHksIGRpcl9kZWJ1ZywgU19JUlVTUik7CisJCURFQlVHRlNfQUREX0ZJTEUoY2hhaW5fbm9pc2UsIGRpcl9kZWJ1ZywgU19JUlVTUik7CisJCURFQlVHRlNfQUREX0ZJTEUodWNvZGVfdHJhY2luZywgZGlyX2RlYnVnLCBTX0lXVVNSIHwgU19JUlVTUik7CiAJfQotCURFQlVHRlNfQUREX0JPT0woZGlzYWJsZV9zZW5zaXRpdml0eSwgcmYsICZwcml2LT5kaXNhYmxlX3NlbnNfY2FsKTsKLQlERUJVR0ZTX0FERF9CT09MKGRpc2FibGVfY2hhaW5fbm9pc2UsIHJmLAorCURFQlVHRlNfQUREX0JPT0woZGlzYWJsZV9zZW5zaXRpdml0eSwgZGlyX3JmLCAmcHJpdi0+ZGlzYWJsZV9zZW5zX2NhbCk7CisJREVCVUdGU19BRERfQk9PTChkaXNhYmxlX2NoYWluX25vaXNlLCBkaXJfcmYsCiAJCQkgJnByaXYtPmRpc2FibGVfY2hhaW5fbm9pc2VfY2FsKTsKIAlpZiAoKChwcml2LT5od19yZXYgJiBDU1JfSFdfUkVWX1RZUEVfTVNLKSA9PSBDU1JfSFdfUkVWX1RZUEVfNDk2NSkgfHwKIAkgICAgKChwcml2LT5od19yZXYgJiBDU1JfSFdfUkVWX1RZUEVfTVNLKSA9PSBDU1JfSFdfUkVWX1RZUEVfMzk0NSkpCi0JCURFQlVHRlNfQUREX0JPT0woZGlzYWJsZV90eF9wb3dlciwgcmYsCisJCURFQlVHRlNfQUREX0JPT0woZGlzYWJsZV90eF9wb3dlciwgZGlyX3JmLAogCQkJCSZwcml2LT5kaXNhYmxlX3R4X3Bvd2VyX2NhbCk7CiAJcmV0dXJuIDA7CiAKIGVycjoKLQlJV0xfRVJSKHByaXYsICJDYW4ndCBvcGVuIHRoZSBkZWJ1Z2ZzIGRpcmVjdG9yeVxuIik7CisJSVdMX0VSUihwcml2LCAiQ2FuJ3QgY3JlYXRlIHRoZSBkZWJ1Z2ZzIGRpcmVjdG9yeVxuIik7CiAJaXdsX2RiZ2ZzX3VucmVnaXN0ZXIocHJpdik7Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gLUVOT01FTTsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX2RiZ2ZzX3JlZ2lzdGVyKTsKIApAQCAtMTkzOCw1NiArMjM4MiwxMSBAQAogICovCiB2b2lkIGl3bF9kYmdmc191bnJlZ2lzdGVyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKLQlpZiAoIXByaXYtPmRiZ2ZzKQorCWlmICghcHJpdi0+ZGVidWdmc19kaXIpCiAJCXJldHVybjsKIAotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfc2xlZXBfbGV2ZWxfb3ZlcnJpZGUpOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfY3VycmVudF9zbGVlcF9jb21tYW5kKTsKLQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX252bSk7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9zcmFtKTsKLQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX2xvZ19ldmVudCk7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9zdGF0aW9ucyk7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9jaGFubmVscyk7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9zdGF0dXMpOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfaW50ZXJydXB0KTsKLQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX3Fvcyk7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RhdGFfZmlsZXMuZmlsZV9sZWQpOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kYXRhX2ZpbGVzLmZpbGVfdGhlcm1hbF90aHJvdHRsaW5nKTsKLQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGF0YV9maWxlcy5maWxlX2Rpc2FibGVfaHQ0MCk7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRpcl9kYXRhKTsKLQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGVidWdfZmlsZXMuZmlsZV9yeF9zdGF0aXN0aWNzKTsKLQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGVidWdfZmlsZXMuZmlsZV90eF9zdGF0aXN0aWNzKTsKLQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGVidWdfZmlsZXMuZmlsZV90cmFmZmljX2xvZyk7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLmZpbGVfcnhfcXVldWUpOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kZWJ1Z19maWxlcy5maWxlX3R4X3F1ZXVlKTsKLQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGVidWdfZmlsZXMuZmlsZV90eF9wb3dlcik7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLmZpbGVfcG93ZXJfc2F2ZV9zdGF0dXMpOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kZWJ1Z19maWxlcy4KLQkJCWZpbGVfY2xlYXJfdWNvZGVfc3RhdGlzdGljcyk7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLgotCQkJZmlsZV9jbGVhcl90cmFmZmljX3N0YXRpc3RpY3MpOwotCWlmICgocHJpdi0+aHdfcmV2ICYgQ1NSX0hXX1JFVl9UWVBFX01TSykgIT0gQ1NSX0hXX1JFVl9UWVBFXzM5NDUpIHsKLQkJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLgotCQkJZmlsZV91Y29kZV9yeF9zdGF0cyk7Ci0JCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19kZWJ1Z19maWxlcy4KLQkJCWZpbGVfdWNvZGVfdHhfc3RhdHMpOwotCQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGVidWdfZmlsZXMuCi0JCQlmaWxlX3Vjb2RlX2dlbmVyYWxfc3RhdHMpOwotCQlERUJVR0ZTX1JFTU9WRShwcml2LT5kYmdmcy0+ZGJnZnNfZGVidWdfZmlsZXMuCi0JCQlmaWxlX3NlbnNpdGl2aXR5KTsKLQkJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX2RlYnVnX2ZpbGVzLgotCQkJZmlsZV9jaGFpbl9ub2lzZSk7Ci0JfQotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kaXJfZGVidWcpOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19yZl9maWxlcy5maWxlX2Rpc2FibGVfc2Vuc2l0aXZpdHkpOwotCURFQlVHRlNfUkVNT1ZFKHByaXYtPmRiZ2ZzLT5kYmdmc19yZl9maWxlcy5maWxlX2Rpc2FibGVfY2hhaW5fbm9pc2UpOwotCWlmICgoKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spID09IENTUl9IV19SRVZfVFlQRV80OTY1KSB8fAotCSAgICAoKHByaXYtPmh3X3JldiAmIENTUl9IV19SRVZfVFlQRV9NU0spID09IENTUl9IV19SRVZfVFlQRV8zOTQ1KSkKLQkJREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRiZ2ZzX3JmX2ZpbGVzLmZpbGVfZGlzYWJsZV90eF9wb3dlcik7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRpcl9yZik7Ci0JREVCVUdGU19SRU1PVkUocHJpdi0+ZGJnZnMtPmRpcl9kcnYpOwotCWtmcmVlKHByaXYtPmRiZ2ZzKTsKLQlwcml2LT5kYmdmcyA9IE5VTEw7CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHByaXYtPmRlYnVnZnNfZGlyKTsKKwlwcml2LT5kZWJ1Z2ZzX2RpciA9IE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9kYmdmc191bnJlZ2lzdGVyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaAppbmRleCAzODIyY2Y1Li5hYjg5MWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXYuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC01MTIsNiArNTEyLDcgQEAKIAlib29sIGlzX2h0OwogCWJvb2wgaXNfNDBtaHo7CiAJYm9vbCBzaW5nbGVfY2hhaW5fc3VmZmljaWVudDsKKwllbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgc21wczsgLyogY3VycmVudCBzbXBzIG1vZGUgKi8KIAkvKiBCU1MgcmVsYXRlZCBkYXRhICovCiAJdTggZXh0ZW5zaW9uX2NoYW5fb2Zmc2V0OwogCXU4IGh0X3Byb3RlY3Rpb247CkBAIC05ODQsNiArOTg1LDc0IEBACiAJX19sZTE2IGNoYW5uZWw7CiB9OwogCisvKgorICogc2NoZWR1bGUgdGhlIHRpbWVyIHRvIHdha2UgdXAgZXZlcnkgVUNPREVfVFJBQ0VfUEVSSU9EIG1pbGxpc2Vjb25kcworICogdG8gcGVyZm9ybSBjb250aW51b3VzIHVDb2RlIGV2ZW50IGxvZ2dpbmcgb3BlcmF0aW9uIGlmIGVuYWJsZWQKKyAqLworI2RlZmluZSBVQ09ERV9UUkFDRV9QRVJJT0QgKDEwMCkKKworLyoKKyAqIGl3bF9ldmVudF9sb2c6IGN1cnJlbnQgdUNvZGUgZXZlbnQgbG9nIHBvc2l0aW9uCisgKgorICogQHVjb2RlX3RyYWNlOiBlbmFibGUvZGlzYWJsZSB1Y29kZSBjb250aW51b3VzIHRyYWNlIHRpbWVyCisgKiBAbnVtX3dyYXBzOiBob3cgbWFueSB0aW1lcyB0aGUgZXZlbnQgYnVmZmVyIHdyYXBzCisgKiBAbmV4dF9lbnRyeTogIHRoZSBlbnRyeSBqdXN0IGJlZm9yZSB0aGUgbmV4dCBvbmUgdGhhdCB1Q29kZSB3b3VsZCBmaWxsCisgKiBAbm9uX3dyYXBzX2NvdW50OiBjb3VudGVyIGZvciBubyB3cmFwIGRldGVjdGVkIHdoZW4gZHVtcCB1Y29kZSBldmVudHMKKyAqIEB3cmFwc19vbmNlX2NvdW50OiBjb3VudGVyIGZvciB3cmFwIG9uY2UgZGV0ZWN0ZWQgd2hlbiBkdW1wIHVjb2RlIGV2ZW50cworICogQHdyYXBzX21vcmVfY291bnQ6IGNvdW50ZXIgZm9yIHdyYXAgbW9yZSB0aGFuIG9uY2UgZGV0ZWN0ZWQKKyAqCQkgICAgICB3aGVuIGR1bXAgdWNvZGUgZXZlbnRzCisgKi8KK3N0cnVjdCBpd2xfZXZlbnRfbG9nIHsKKwlib29sIHVjb2RlX3RyYWNlOworCXUzMiBudW1fd3JhcHM7CisJdTMyIG5leHRfZW50cnk7CisJaW50IG5vbl93cmFwc19jb3VudDsKKwlpbnQgd3JhcHNfb25jZV9jb3VudDsKKwlpbnQgd3JhcHNfbW9yZV9jb3VudDsKK307CisKKy8qCisgKiBob3N0IGludGVycnVwdCB0aW1lb3V0IHZhbHVlCisgKiB1c2VkIHdpdGggc2V0dGluZyBpbnRlcnJ1cHQgY29hbGVzY2luZyB0aW1lcgorICogdGhlIENTUl9JTlRfQ09BTEVTQ0lORyBpcyBhbiA4IGJpdCByZWdpc3RlciBpbiAzMi11c2VjIHVuaXQKKyAqCisgKiBkZWZhdWx0IGludGVycnVwdCBjb2FsZXNjaW5nIHRpbWVyIGlzIDY0IHggMzIgPSAyMDQ4IHVzZWNzCisgKiBkZWZhdWx0IGludGVycnVwdCBjb2FsZXNjaW5nIGNhbGlicmF0aW9uIHRpbWVyIGlzIDE2IHggMzIgPSA1MTIgdXNlY3MKKyAqLworI2RlZmluZSBJV0xfSE9TVF9JTlRfVElNRU9VVF9NQVgJKDB4RkYpCisjZGVmaW5lIElXTF9IT1NUX0lOVF9USU1FT1VUX0RFRgkoMHg0MCkKKyNkZWZpbmUgSVdMX0hPU1RfSU5UX1RJTUVPVVRfTUlOCSgweDApCisjZGVmaW5lIElXTF9IT1NUX0lOVF9DQUxJQl9USU1FT1VUX01BWAkoMHhGRikKKyNkZWZpbmUgSVdMX0hPU1RfSU5UX0NBTElCX1RJTUVPVVRfREVGCSgweDEwKQorI2RlZmluZSBJV0xfSE9TVF9JTlRfQ0FMSUJfVElNRU9VVF9NSU4JKDB4MCkKKworLyoKKyAqIFRoaXMgaXMgdGhlIHRocmVzaG9sZCB2YWx1ZSBvZiBwbGNwIGVycm9yIHJhdGUgcGVyIDEwMG1TZWNzLiAgSXQgaXMKKyAqIHVzZWQgdG8gc2V0IGFuZCBjaGVjayBmb3IgdGhlIHZhbGlkaXR5IG9mIHBsY3BfZGVsdGEuCisgKi8KKyNkZWZpbmUgSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfTUlOCSgwKQorI2RlZmluZSBJV0xfTUFYX1BMQ1BfRVJSX1RIUkVTSE9MRF9ERUYJKDUwKQorI2RlZmluZSBJV0xfTUFYX1BMQ1BfRVJSX0xPTkdfVEhSRVNIT0xEX0RFRgkoMTAwKQorI2RlZmluZSBJV0xfTUFYX1BMQ1BfRVJSX0VYVF9MT05HX1RIUkVTSE9MRF9ERUYJKDIwMCkKKyNkZWZpbmUgSVdMX01BWF9QTENQX0VSUl9USFJFU0hPTERfTUFYCSgyNTUpCisKKyNkZWZpbmUgSVdMX0RFTEFZX05FWFRfRk9SQ0VfUkZfUkVTRVQgIChIWiozKQorI2RlZmluZSBJV0xfREVMQVlfTkVYVF9GT1JDRV9GV19SRUxPQUQgKEhaKjUpCisKK2VudW0gaXdsX3Jlc2V0IHsKKwlJV0xfUkZfUkVTRVQgPSAwLAorCUlXTF9GV19SRVNFVCwKKwlJV0xfTUFYX0ZPUkNFX1JFU0VULAorfTsKKworc3RydWN0IGl3bF9mb3JjZV9yZXNldCB7CisJaW50IHJlc2V0X3JlcXVlc3RfY291bnQ7CisJaW50IHJlc2V0X3N1Y2Nlc3NfY291bnQ7CisJaW50IHJlc2V0X3JlamVjdF9jb3VudDsKKwl1bnNpZ25lZCBsb25nIHJlc2V0X2R1cmF0aW9uOworCXVuc2lnbmVkIGxvbmcgbGFzdF9mb3JjZV9yZXNldF9qaWZmaWVzOworfTsKKwogc3RydWN0IGl3bF9wcml2IHsKIAogCS8qIGllZWUgZGV2aWNlIHVzZWQgYnkgZ2VuZXJpYyBpZWVlIHByb2Nlc3NpbmcgY29kZSAqLwpAQCAtMTAwNCwxMyArMTA3MywxOSBAQAogCiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBiYW5kc1tJRUVFODAyMTFfTlVNX0JBTkRTXTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0lXTFdJRklfU1BFQ1RSVU1fTUVBU1VSRU1FTlQpIHx8IGRlZmluZWQoQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQpCiAJLyogc3BlY3RydW0gbWVhc3VyZW1lbnQgcmVwb3J0IGNhY2hpbmcgKi8KIAlzdHJ1Y3QgaXdsX3NwZWN0cnVtX25vdGlmaWNhdGlvbiBtZWFzdXJlX3JlcG9ydDsKIAl1OCBtZWFzdXJlbWVudF9zdGF0dXM7Ci0jZW5kaWYKKwogCS8qIHVjb2RlIGJlYWNvbiB0aW1lICovCiAJdTMyIHVjb2RlX2JlYWNvbl90aW1lOworCWludCBtaXNzZWRfYmVhY29uX3RocmVzaG9sZDsKKworCS8qIHN0b3JpbmcgdGhlIGppZmZpZXMgd2hlbiB0aGUgcGxjcCBlcnJvciByYXRlIGlzIHJlY2VpdmVkICovCisJdW5zaWduZWQgbG9uZyBwbGNwX2ppZmZpZXM7CisKKwkvKiBmb3JjZSByZXNldCAqLworCXN0cnVjdCBpd2xfZm9yY2VfcmVzZXQgZm9yY2VfcmVzZXRbSVdMX01BWF9GT1JDRV9SRVNFVF07CiAKIAkvKiB3ZSBhbGxvY2F0ZSBhcnJheSBvZiBpd2w0OTY1X2NoYW5uZWxfaW5mbyBmb3IgTklDJ3MgdmFsaWQgY2hhbm5lbHMuCiAJICogICAgQWNjZXNzIHZpYSBjaGFubmVsICMgdXNpbmcgaW5kaXJlY3QgaW5kZXggYXJyYXkgKi8KQEAgLTEwMjksNyArMTEwNCw2IEBACiAJc3RydWN0IGl3bF9jYWxpYl9yZXN1bHQgY2FsaWJfcmVzdWx0c1tJV0xfQ0FMSUJfTUFYXTsKIAogCS8qIFNjYW4gcmVsYXRlZCB2YXJpYWJsZXMgKi8KLQl1bnNpZ25lZCBsb25nIGxhc3Rfc2Nhbl9qaWZmaWVzOwogCXVuc2lnbmVkIGxvbmcgbmV4dF9zY2FuX2ppZmZpZXM7CiAJdW5zaWduZWQgbG9uZyBzY2FuX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgc2Nhbl9wYXNzX3N0YXJ0OwpAQCAtMTAzNyw2ICsxMTExLDcgQEAKIAl2b2lkICpzY2FuOwogCWludCBzY2FuX2JhbmRzOwogCXN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnNjYW5fcmVxdWVzdDsKKwlib29sIGlzX2ludGVybmFsX3Nob3J0X3NjYW47CiAJdTggc2Nhbl90eF9hbnRbSUVFRTgwMjExX05VTV9CQU5EU107CiAJdTggbWdtdF90eF9hbnQ7CiAKQEAgLTEwNDUsNiArMTEyMCw3IEBACiAJc3BpbmxvY2tfdCBoY21kX2xvY2s7CS8qIHByb3RlY3QgaGNtZCAqLwogCXNwaW5sb2NrX3QgcmVnX2xvY2s7CS8qIHByb3RlY3QgaHcgcmVnaXN0ZXIgYWNjZXNzICovCiAJc3RydWN0IG11dGV4IG11dGV4OworCXN0cnVjdCBtdXRleCBzeW5jX2NtZF9tdXRleDsgLyogZW5hYmxlIHNlcmlhbGl6YXRpb24gb2Ygc3luYyBjb21tYW5kcyAqLwogCiAJLyogYmFzaWMgcGNpLW5ldHdvcmsgZHJpdmVyIHN0dWZmICovCiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CkBAIC0xMTM1LDYgKzEyMTEsOCBAQAogCXN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyBzdGF0aXN0aWNzOwogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIGFjY3VtX3N0YXRpc3RpY3M7CisJc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIGRlbHRhX3N0YXRpc3RpY3M7CisJc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzIG1heF9kZWx0YTsKICNlbmRpZgogCiAJLyogY29udGV4dCBpbmZvcm1hdGlvbiAqLwpAQCAtMTIwNywxNSArMTI4NSwxMCBAQAogCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZTsKIAotCXN0cnVjdCB3b3JrX3N0cnVjdCB1cDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzdGFydDsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2FsaWJyYXRlZF93b3JrOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBzY2FuX2NvbXBsZXRlZDsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcnhfcmVwbGVuaXNoOwogCXN0cnVjdCB3b3JrX3N0cnVjdCBhYm9ydF9zY2FuOwotCXN0cnVjdCB3b3JrX3N0cnVjdCB1cGRhdGVfbGlua19sZWQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGF1dGhfd29yazsKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVwb3J0X3dvcms7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJlcXVlc3Rfc2NhbjsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgYmVhY29uX3VwZGF0ZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHRfd29yazsKQEAgLTEyNTEsNyArMTMyNCw4IEBACiAJdTE2IHJ4X3RyYWZmaWNfaWR4OwogCXU4ICp0eF90cmFmZmljOwogCXU4ICpyeF90cmFmZmljOwotCXN0cnVjdCBpd2xfZGVidWdmcyAqZGJnZnM7CisJc3RydWN0IGRlbnRyeSAqZGVidWdmc19kaXI7CisJdTMyIGRiZ2ZzX3NyYW1fb2Zmc2V0LCBkYmdmc19zcmFtX2xlbjsKICNlbmRpZiAvKiBDT05GSUdfSVdMV0lGSV9ERUJVR0ZTICovCiAjZW5kaWYgLyogQ09ORklHX0lXTFdJRklfREVCVUcgKi8KIApAQCAtMTI2MSw2ICsxMzM1LDcgQEAKIAl1MzIgZGlzYWJsZV90eF9wb3dlcl9jYWw7CiAJc3RydWN0IHdvcmtfc3RydWN0IHJ1bl90aW1lX2NhbGliX3dvcms7CiAJc3RydWN0IHRpbWVyX2xpc3Qgc3RhdGlzdGljc19wZXJpb2RpYzsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB1Y29kZV90cmFjZTsKIAlib29sIGh3X3JlYWR5OwogCS8qRm9yIDM5NDUqLwogI2RlZmluZSBJV0xfREVGQVVMVF9UWF9QT1dFUiAweDBGCkBAIC0xMjY4LDYgKzEzNDMsOCBAQAogCXN0cnVjdCBpd2wzOTQ1X25vdGlmX3N0YXRpc3RpY3Mgc3RhdGlzdGljc18zOTsKIAogCXUzMiBzdGFfc3VwcF9yYXRlczsKKworCXN0cnVjdCBpd2xfZXZlbnRfbG9nIGV2ZW50X2xvZzsKIH07IC8qaXdsX3ByaXYgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIGl3bF90eHFfY3R4X2FjdGl2YXRlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgaW50IHR4cV9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldnRyYWNlLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXZ0cmFjZS5jCmluZGV4IDgzY2M0ZTUuLjM2NTgwZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldnRyYWNlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2dHJhY2UuYwpAQCAtMzcsNCArMzcsNiBAQAogRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKGl3bHdpZmlfZGV2X3J4KTsKIEVYUE9SVF9UUkFDRVBPSU5UX1NZTUJPTChpd2x3aWZpX2Rldl91Y29kZV9ldmVudCk7CiBFWFBPUlRfVFJBQ0VQT0lOVF9TWU1CT0woaXdsd2lmaV9kZXZfdWNvZGVfZXJyb3IpOworRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKGl3bHdpZmlfZGV2X3Vjb2RlX2NvbnRfZXZlbnQpOworRVhQT1JUX1RSQUNFUE9JTlRfU1lNQk9MKGl3bHdpZmlfZGV2X3Vjb2RlX3dyYXBfZXZlbnQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXZ0cmFjZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZGV2dHJhY2UuaAppbmRleCBkOWM3MzYzLi5mZjRkMDEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1kZXZ0cmFjZS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWRldnRyYWNlLmgKQEAgLTkxLDYgKzkxLDUwIEBACiApOwogCiAjdW5kZWYgVFJBQ0VfU1lTVEVNCisjZGVmaW5lIFRSQUNFX1NZU1RFTSBpd2x3aWZpX3Vjb2RlCisKK1RSQUNFX0VWRU5UKGl3bHdpZmlfZGV2X3Vjb2RlX2NvbnRfZXZlbnQsCisJVFBfUFJPVE8oc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgdGltZSwgdTMyIGRhdGEsIHUzMiBldiksCisJVFBfQVJHUyhwcml2LCB0aW1lLCBkYXRhLCBldiksCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJUFJJVl9FTlRSWQorCisJCV9fZmllbGQodTMyLCB0aW1lKQorCQlfX2ZpZWxkKHUzMiwgZGF0YSkKKwkJX19maWVsZCh1MzIsIGV2KQorCSksCisJVFBfZmFzdF9hc3NpZ24oCisJCVBSSVZfQVNTSUdOOworCQlfX2VudHJ5LT50aW1lID0gdGltZTsKKwkJX19lbnRyeS0+ZGF0YSA9IGRhdGE7CisJCV9fZW50cnktPmV2ID0gZXY7CisJKSwKKwlUUF9wcmludGsoIlslcF0gRVZUX0xPR1Q6JTAxMHU6MHglMDh4OiUwNHUiLAorCQkgIF9fZW50cnktPnByaXYsIF9fZW50cnktPnRpbWUsIF9fZW50cnktPmRhdGEsIF9fZW50cnktPmV2KQorKTsKKworVFJBQ0VfRVZFTlQoaXdsd2lmaV9kZXZfdWNvZGVfd3JhcF9ldmVudCwKKwlUUF9QUk9UTyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiB3cmFwcywgdTMyIG5fZW50cnksIHUzMiBwX2VudHJ5KSwKKwlUUF9BUkdTKHByaXYsIHdyYXBzLCBuX2VudHJ5LCBwX2VudHJ5KSwKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlQUklWX0VOVFJZCisKKwkJX19maWVsZCh1MzIsIHdyYXBzKQorCQlfX2ZpZWxkKHUzMiwgbl9lbnRyeSkKKwkJX19maWVsZCh1MzIsIHBfZW50cnkpCisJKSwKKwlUUF9mYXN0X2Fzc2lnbigKKwkJUFJJVl9BU1NJR047CisJCV9fZW50cnktPndyYXBzID0gd3JhcHM7CisJCV9fZW50cnktPm5fZW50cnkgPSBuX2VudHJ5OworCQlfX2VudHJ5LT5wX2VudHJ5ID0gcF9lbnRyeTsKKwkpLAorCVRQX3ByaW50aygiWyVwXSB3cmFwcz0jJTAyZCBuPTB4JVggcD0weCVYIiwKKwkJICBfX2VudHJ5LT5wcml2LCBfX2VudHJ5LT53cmFwcywgX19lbnRyeS0+bl9lbnRyeSwKKwkJICBfX2VudHJ5LT5wX2VudHJ5KQorKTsKKworI3VuZGVmIFRSQUNFX1NZU1RFTQogI2RlZmluZSBUUkFDRV9TWVNURU0gaXdsd2lmaQogCiBUUkFDRV9FVkVOVChpd2x3aWZpX2Rldl9oY21kLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYwppbmRleCA0YTMwOTY5Li5mZDM3MTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1lZXByb20uYwpAQCAtNSw3ICs1LDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMzAsNyArMzAsNyBAQAogICoKICAqIEJTRCBMSUNFTlNFCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDUgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWVlcHJvbS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKaW5kZXggMGNkOWMwMi4uNGUxYmE4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZWVwcm9tLmgKQEAgLTUsNyArNSw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTMwLDcgKzMwLDcgQEAKICAqCiAgKiBCU0QgTElDRU5TRQogICoKLSAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA1IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1maC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaAppbmRleCA2NWZhOGE2OS4uMTEzYzM2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtZmguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1maC5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMzc5LDYgKzM3OSwyNSBAQAogCiAjZGVmaW5lIEZIX1RTU1JfVFhfU1RBVFVTX1JFRwkJKEZIX1RTU1JfTE9XRVJfQk9VTkQgKyAweDAxMCkKIAorLyoqCisgKiBCaXQgZmllbGRzIGZvciBUU1NSKFR4IFNoYXJlZCBTdGF0dXMgJiBDb250cm9sKSBlcnJvciBzdGF0dXMgcmVnaXN0ZXI6CisgKiAzMTogIEluZGljYXRlcyBhbiBhZGRyZXNzIGVycm9yIHdoZW4gYWNjZXNzZWQgdG8gaW50ZXJuYWwgbWVtb3J5CisgKgl1Q29kZS9kcml2ZXIgbXVzdCB3cml0ZSAiMSIgaW4gb3JkZXIgdG8gY2xlYXIgdGhpcyBmbGFnCisgKiAzMDogIEluZGljYXRlcyB0aGF0IEhvc3QgZGlkIG5vdCBzZW5kIHRoZSBleHBlY3RlZCBudW1iZXIgb2YgZHdvcmRzIHRvIEZICisgKgl1Q29kZS9kcml2ZXIgbXVzdCB3cml0ZSAiMSIgaW4gb3JkZXIgdG8gY2xlYXIgdGhpcyBmbGFnCisgKiAxNi05OkVhY2ggc3RhdHVzIGJpdCBpcyBmb3Igb25lIGNoYW5uZWwuIEluZGljYXRlcyB0aGF0IGFuIChFcnJvcikgQWN0RE1BCisgKgljb21tYW5kIHdhcyByZWNlaXZlZCBmcm9tIHRoZSBzY2hlZHVsZXIgd2hpbGUgdGhlIFRSQiB3YXMgYWxyZWFkeSBmdWxsCisgKgl3aXRoIHByZXZpb3VzIGNvbW1hbmQKKyAqCXVDb2RlL2RyaXZlciBtdXN0IHdyaXRlICIxIiBpbiBvcmRlciB0byBjbGVhciB0aGlzIGZsYWcKKyAqIDctMDogRWFjaCBzdGF0dXMgYml0IGluZGljYXRlcyBhIGNoYW5uZWwncyBUeENyZWRpdCBlcnJvci4gV2hlbiBhbiBlcnJvcgorICoJYml0IGlzIHNldCwgaXQgaW5kaWNhdGVzIHRoYXQgdGhlIEZIIGhhcyByZWNlaXZlZCBhIGZ1bGwgaW5kaWNhdGlvbgorICoJZnJvbSB0aGUgUlRDIFR4RklGTyBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIFR4Q3JlZGl0IGNvdW50ZXIgd2FzCisgKglub3QgZXF1YWwgdG8gemVyby4gVGhpcyBtZWFuIHRoYXQgdGhlIGNyZWRpdCBtZWNoYW5pc20gd2FzIG5vdAorICoJc3luY2hyb25pemVkIHRvIHRoZSBUeEZJRk8gc3RhdHVzCisgKgl1Q29kZS9kcml2ZXIgbXVzdCB3cml0ZSAiMSIgaW4gb3JkZXIgdG8gY2xlYXIgdGhpcyBmbGFnCisgKi8KKyNkZWZpbmUgRkhfVFNTUl9UWF9FUlJPUl9SRUcJCShGSF9UU1NSX0xPV0VSX0JPVU5EICsgMHgwMTgpCisKICNkZWZpbmUgRkhfVFNTUl9UWF9TVEFUVVNfUkVHX0JJVF9CVUZTX0VNUFRZKF9jaG5sKSAoKDEgPDwgKF9jaG5sKSkgPDwgMjQpCiAjZGVmaW5lIEZIX1RTU1JfVFhfU1RBVFVTX1JFR19CSVRfTk9fUEVORF9SRVEoX2NobmwpICgoMSA8PCAoX2NobmwpKSA8PCAxNikKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGNtZC5jCmluZGV4IDMwZTllYTYuLjczNjgxYzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhjbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oY21kLmMKQEAgLTIsNyArMiw3IEBACiAgKgogICogR1BMIExJQ0VOU0UgU1VNTUFSWQogICoKLSAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDA4IC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKQEAgLTU4LDcgKzU4LDYgQEAKIAkJSVdMX0NNRChDT0VYX1BSSU9SSVRZX1RBQkxFX0NNRCk7CiAJCUlXTF9DTUQoQ09FWF9NRURJVU1fTk9USUZJQ0FUSU9OKTsKIAkJSVdMX0NNRChDT0VYX0VWRU5UX0NNRCk7Ci0JCUlXTF9DTUQoUkFEQVJfTk9USUZJQ0FUSU9OKTsKIAkJSVdMX0NNRChSRVBMWV9RVUlFVF9DTUQpOwogCQlJV0xfQ01EKFJFUExZX0NIQU5ORUxfU1dJVENIKTsKIAkJSVdMX0NNRChDSEFOTkVMX1NXSVRDSF9OT1RJRklDQVRJT04pOwpAQCAtMTY1LDE1ICsxNjQsMTMgQEAKIAkgLyogQSBzeW5jaHJvbm91cyBjb21tYW5kIGNhbiBub3QgaGF2ZSBhIGNhbGxiYWNrIHNldC4gKi8KIAlCVUdfT04oY21kLT5jYWxsYmFjayk7CiAKLQlpZiAodGVzdF9hbmRfc2V0X2JpdChTVEFUVVNfSENNRF9TWU5DX0FDVElWRSwgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0VSUihwcml2LAotCQkJIkVycm9yIHNlbmRpbmcgJXM6IEFscmVhZHkgc2VuZGluZyBhIGhvc3QgY29tbWFuZFxuIiwKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQXR0ZW1wdGluZyB0byBzZW5kIHN5bmMgY29tbWFuZCAlc1xuIiwKIAkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aWQpKTsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9CisJbXV0ZXhfbG9jaygmcHJpdi0+c3luY19jbWRfbXV0ZXgpOwogCiAJc2V0X2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICJTZXR0aW5nIEhDTURfQUNUSVZFIGZvciBjb21tYW5kICVzIFxuIiwKKwkJCWdldF9jbWRfc3RyaW5nKGNtZC0+aWQpKTsKIAogCWNtZF9pZHggPSBpd2xfZW5xdWV1ZV9oY21kKHByaXYsIGNtZCk7CiAJaWYgKGNtZF9pZHggPCAwKSB7CkBAIC0xOTQsNiArMTkxLDggQEAKIAkJCQlqaWZmaWVzX3RvX21zZWNzKEhPU1RfQ09NUExFVEVfVElNRU9VVCkpOwogCiAJCQljbGVhcl9iaXQoU1RBVFVTX0hDTURfQUNUSVZFLCAmcHJpdi0+c3RhdHVzKTsKKwkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJDbGVhcmluZyBIQ01EX0FDVElWRSBmb3IgY29tbWFuZCAlcyBcbiIsCisJCQkJICAgICAgIGdldF9jbWRfc3RyaW5nKGNtZC0+aWQpKTsKIAkJCXJldCA9IC1FVElNRURPVVQ7CiAJCQlnb3RvIGNhbmNlbDsKIAkJfQpAQCAtMjM4LDcgKzIzNyw3IEBACiAJCWNtZC0+cmVwbHlfcGFnZSA9IDA7CiAJfQogb3V0OgotCWNsZWFyX2JpdChTVEFUVVNfSENNRF9TWU5DX0FDVElWRSwgJnByaXYtPnN0YXR1cyk7CisJbXV0ZXhfdW5sb2NrKCZwcml2LT5zeW5jX2NtZF9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3NlbmRfY21kX3N5bmMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaGVscGVycy5oCmluZGV4IGJkMGIxMmUuLjUxYTY3ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWhlbHBlcnMuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1oZWxwZXJzLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTgwLDggKzgwLDggQEAKIAkJCQkgICAgc3RydWN0IGZ3X2Rlc2MgKmRlc2MpCiB7CiAJaWYgKGRlc2MtPnZfYWRkcikKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChwY2lfZGV2LCBkZXNjLT5sZW4sCi0JCQkJICAgIGRlc2MtPnZfYWRkciwgZGVzYy0+cF9hZGRyKTsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJnBjaV9kZXYtPmRldiwgZGVzYy0+bGVuLAorCQkJCSAgZGVzYy0+dl9hZGRyLCBkZXNjLT5wX2FkZHIpOwogCWRlc2MtPnZfYWRkciA9IE5VTEw7CiAJZGVzYy0+bGVuID0gMDsKIH0KQEAgLTg5LDcgKzg5LDggQEAKIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9hbGxvY19md19kZXNjKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAogCQkJCSAgICBzdHJ1Y3QgZndfZGVzYyAqZGVzYykKIHsKLQlkZXNjLT52X2FkZHIgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwY2lfZGV2LCBkZXNjLT5sZW4sICZkZXNjLT5wX2FkZHIpOworCWRlc2MtPnZfYWRkciA9IGRtYV9hbGxvY19jb2hlcmVudCgmcGNpX2Rldi0+ZGV2LCBkZXNjLT5sZW4sCisJCQkJCSAgJmRlc2MtPnBfYWRkciwgR0ZQX0tFUk5FTCk7CiAJcmV0dXJuIChkZXNjLT52X2FkZHIgIT0gTlVMTCkgPyAwIDogLUVOT01FTTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWlvLmgKaW5kZXggZTU1MmQ0Yy4uYzcxOWJhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtaW8uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1pby5oCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLWxlZC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmMKaW5kZXggNDZjN2E5NS4uYTZmOWM5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtbGVkLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuaAppbmRleCBmNDdmMDUzLi40OWE3MGJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1sZWQuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuYwppbmRleCA4Y2NjMGJiLi4xYTFhOWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTMwMywxMyArMzAzLDEyIEBACiAJCQkJc2l6ZW9mKHN0cnVjdCBpd2xfcG93ZXJ0YWJsZV9jbWQpLCBjbWQpOwogfQogCi0KKy8qIHByaXYtPm11dGV4IG11c3QgYmUgaGVsZCAqLwogaW50IGl3bF9wb3dlcl91cGRhdGVfbW9kZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIGJvb2wgZm9yY2UpCiB7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGl3bF90dF9tZ210ICp0dCA9ICZwcml2LT50aGVybWFsX3Rocm90dGxlOwotCWJvb2wgZW5hYmxlZCA9IChwcml2LT5pd19tb2RlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pICYmCi0JCQkocHJpdi0+aHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUyk7CisJYm9vbCBlbmFibGVkID0gcHJpdi0+aHctPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUzsKIAlib29sIHVwZGF0ZV9jaGFpbnM7CiAJc3RydWN0IGl3bF9wb3dlcnRhYmxlX2NtZCBjbWQ7CiAJaW50IGR0aW1wZXI7CkBAIC0zMTksNyArMzE4LDcgQEAKIAkJCXByaXYtPmNoYWluX25vaXNlX2RhdGEuc3RhdGUgPT0gSVdMX0NIQUlOX05PSVNFX0FMSVZFOwogCiAJaWYgKHByaXYtPnZpZikKLQkJZHRpbXBlciA9IHByaXYtPnZpZi0+YnNzX2NvbmYuZHRpbV9wZXJpb2Q7CisJCWR0aW1wZXIgPSBwcml2LT5ody0+Y29uZi5wc19kdGltX3BlcmlvZDsKIAllbHNlCiAJCWR0aW1wZXIgPSAxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcG93ZXIuaAppbmRleCAzMTBjMzJlLi41ZGI5MWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wb3dlci5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBvd2VyLmgKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDcgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXBycGguaAppbmRleCA2ZDk1ODMyLi5kMmQyYTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1wcnBoLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcHJwaC5oCkBAIC01LDcgKzUsNyBAQAogICoKICAqIEdQTCBMSUNFTlNFIFNVTU1BUlkKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCkBAIC0zMCw3ICszMCw3IEBACiAgKgogICogQlNEIExJQ0VOU0UKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwNSAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXJ4LmMKaW5kZXggMmRiY2U4NS4uZGYyNTdiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1yeC5jCkBAIC0xLDYgKzEsNiBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCiAgKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCkBAIC0xMjMsMTIgKzEyMywxMSBAQAogLyoqCiAgKiBpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0ciAtIFVwZGF0ZSB0aGUgd3JpdGUgcG9pbnRlciBmb3IgdGhlIFJYIHF1ZXVlCiAgKi8KLWludCBpd2xfcnhfcXVldWVfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfcnhfcXVldWUgKnEpCit2b2lkIGl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF9yeF9xdWV1ZSAqcSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXUzMiByeF93cnRfcHRyX3JlZyA9IHByaXYtPmh3X3BhcmFtcy5yeF93cnRfcHRyX3JlZzsKIAl1MzIgcmVnOwotCWludCByZXQgPSAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnEtPmxvY2ssIGZsYWdzKTsKIApAQCAtMTYxLDcgKzE2MCw2IEBACiAKICBleGl0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZxLT5sb2NrLCBmbGFncyk7Ci0JcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIpOwogLyoqCkBAIC0xODQsMTQgKzE4MiwxMyBAQAogICogYWxzbyB1cGRhdGVzIHRoZSBtZW1vcnkgYWRkcmVzcyBpbiB0aGUgZmlybXdhcmUgdG8gcmVmZXJlbmNlIHRoZSBuZXcKICAqIHRhcmdldCBidWZmZXIuCiAgKi8KLWludCBpd2xfcnhfcXVldWVfcmVzdG9jayhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit2b2lkIGl3bF9yeF9xdWV1ZV9yZXN0b2NrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CiAJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgd3JpdGU7Ci0JaW50IHJldCA9IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcnhxLT5sb2NrLCBmbGFncyk7CiAJd3JpdGUgPSByeHEtPndyaXRlICYgfjB4NzsKQEAgLTIyMCwxMCArMjE3LDggQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwogCQlyeHEtPm5lZWRfdXBkYXRlID0gMTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnhxLT5sb2NrLCBmbGFncyk7Ci0JCXJldCA9IGl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHJ4cSk7CisJCWl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHJ4cSk7CiAJfQotCi0JcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3J4X3F1ZXVlX3Jlc3RvY2spOwogCkBAIC0zNTAsMTAgKzM0NSwxMCBAQAogCQl9CiAJfQogCi0JcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LCA0ICogUlhfUVVFVUVfU0laRSwgcnhxLT5iZCwKLQkJCSAgICByeHEtPmRtYV9hZGRyKTsKLQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsIHNpemVvZihzdHJ1Y3QgaXdsX3JiX3N0YXR1cyksCi0JCQkgICAgcnhxLT5yYl9zdHRzLCByeHEtPnJiX3N0dHNfZG1hKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmcHJpdi0+cGNpX2Rldi0+ZGV2LCA0ICogUlhfUVVFVUVfU0laRSwgcnhxLT5iZCwKKwkJCSAgcnhxLT5kbWFfYWRkcik7CisJZG1hX2ZyZWVfY29oZXJlbnQoJnByaXYtPnBjaV9kZXYtPmRldiwgc2l6ZW9mKHN0cnVjdCBpd2xfcmJfc3RhdHVzKSwKKwkJCSAgcnhxLT5yYl9zdHRzLCByeHEtPnJiX3N0dHNfZG1hKTsKIAlyeHEtPmJkID0gTlVMTDsKIAlyeHEtPnJiX3N0dHMgID0gTlVMTDsKIH0KQEAgLTM2Miw3ICszNTcsNyBAQAogaW50IGl3bF9yeF9xdWV1ZV9hbGxvYyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCiB7CiAJc3RydWN0IGl3bF9yeF9xdWV1ZSAqcnhxID0gJnByaXYtPnJ4cTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcHJpdi0+cGNpX2Rldi0+ZGV2OwogCWludCBpOwogCiAJc3Bpbl9sb2NrX2luaXQoJnJ4cS0+bG9jayk7CkBAIC0zNzAsMTIgKzM2NSwxMyBAQAogCUlOSVRfTElTVF9IRUFEKCZyeHEtPnJ4X3VzZWQpOwogCiAJLyogQWxsb2MgdGhlIGNpcmN1bGFyIGJ1ZmZlciBvZiBSZWFkIEJ1ZmZlciBEZXNjcmlwdG9ycyAoUkJEcykgKi8KLQlyeHEtPmJkID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LCA0ICogUlhfUVVFVUVfU0laRSwgJnJ4cS0+ZG1hX2FkZHIpOworCXJ4cS0+YmQgPSBkbWFfYWxsb2NfY29oZXJlbnQoZGV2LCA0ICogUlhfUVVFVUVfU0laRSwgJnJ4cS0+ZG1hX2FkZHIsCisJCQkJICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXJ4cS0+YmQpCiAJCWdvdG8gZXJyX2JkOwogCi0JcnhxLT5yYl9zdHRzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LCBzaXplb2Yoc3RydWN0IGl3bF9yYl9zdGF0dXMpLAotCQkJCQkmcnhxLT5yYl9zdHRzX2RtYSk7CisJcnhxLT5yYl9zdHRzID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZW9mKHN0cnVjdCBpd2xfcmJfc3RhdHVzKSwKKwkJCQkJICAmcnhxLT5yYl9zdHRzX2RtYSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyeHEtPnJiX3N0dHMpCiAJCWdvdG8gZXJyX3JiOwogCkBAIC0zOTIsOCArMzg4LDggQEAKIAlyZXR1cm4gMDsKIAogZXJyX3JiOgotCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwgNCAqIFJYX1FVRVVFX1NJWkUsIHJ4cS0+YmQsCi0JCQkgICAgcnhxLT5kbWFfYWRkcik7CisJZG1hX2ZyZWVfY29oZXJlbnQoJnByaXYtPnBjaV9kZXYtPmRldiwgNCAqIFJYX1FVRVVFX1NJWkUsIHJ4cS0+YmQsCisJCQkgIHJ4cS0+ZG1hX2FkZHIpOwogZXJyX2JkOgogCXJldHVybiAtRU5PTUVNOwogfQpAQCAtNDczLDggKzQ2OSw4IEBACiAJCQkgICAocmJfdGltZW91dCA8PCBGSF9SQ1NSX1JYX0NPTkZJR19SRUdfSVJRX1JCVEhfUE9TKXwKIAkJCSAgIChyZmRubG9nIDw8IEZIX1JDU1JfUlhfQ09ORklHX1JCRENCX1NJWkVfUE9TKSk7CiAKLQkvKiBTZXQgaW50ZXJydXB0IGNvYWxlc2NpbmcgdGltZXIgdG8gNjQgeCAzMiA9IDIwNDggdXNlY3MgKi8KLQlpd2xfd3JpdGU4KHByaXYsIENTUl9JTlRfQ09BTEVTQ0lORywgMHg0MCk7CisJLyogU2V0IGludGVycnVwdCBjb2FsZXNjaW5nIHRpbWVyIHRvIGRlZmF1bHQgKDIwNDggdXNlY3MpICovCisJaXdsX3dyaXRlOChwcml2LCBDU1JfSU5UX0NPQUxFU0NJTkcsIElXTF9IT1NUX0lOVF9USU1FT1VUX0RFRik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ5OSw5ICs0OTUsMTAgQEAKIAlzdHJ1Y3QgaXdsX21pc3NlZF9iZWFjb25fbm90aWYgKm1pc3NlZF9iZWFjb247CiAKIAltaXNzZWRfYmVhY29uID0gJnBrdC0+dS5taXNzZWRfYmVhY29uOwotCWlmIChsZTMyX3RvX2NwdShtaXNzZWRfYmVhY29uLT5jb25zZXF1dGl2ZV9taXNzZWRfYmVhY29ucykgPiA1KSB7CisJaWYgKGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPmNvbnNlY3V0aXZlX21pc3NlZF9iZWFjb25zKSA+CisJICAgIHByaXYtPm1pc3NlZF9iZWFjb25fdGhyZXNob2xkKSB7CiAJCUlXTF9ERUJVR19DQUxJQihwcml2LCAibWlzc2VkIGJjbiBjbnNxICVkIHRvdGwgJWQgcmNkICVkIGV4cGN0ZCAlZFxuIiwKLQkJICAgIGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPmNvbnNlcXV0aXZlX21pc3NlZF9iZWFjb25zKSwKKwkJICAgIGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPmNvbnNlY3V0aXZlX21pc3NlZF9iZWFjb25zKSwKIAkJICAgIGxlMzJfdG9fY3B1KG1pc3NlZF9iZWFjb24tPnRvdGFsX21pc3NlZF9iZWNvbnMpLAogCQkgICAgbGUzMl90b19jcHUobWlzc2VkX2JlYWNvbi0+bnVtX3JlY3ZkX2JlYWNvbnMpLAogCQkgICAgbGUzMl90b19jcHUobWlzc2VkX2JlYWNvbi0+bnVtX2V4cGVjdGVkX2JlYWNvbnMpKTsKQEAgLTUxMSw2ICs1MDgsMjQgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX3J4X21pc3NlZF9iZWFjb25fbm90aWYpOwogCit2b2lkIGl3bF9yeF9zcGVjdHJ1bV9tZWFzdXJlX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkJICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKK3sKKwlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTsKKwlzdHJ1Y3QgaXdsX3NwZWN0cnVtX25vdGlmaWNhdGlvbiAqcmVwb3J0ID0gJihwa3QtPnUuc3BlY3RydW1fbm90aWYpOworCisJaWYgKCFyZXBvcnQtPnN0YXRlKSB7CisJCUlXTF9ERUJVR18xMUgocHJpdiwKKwkJCSJTcGVjdHJ1bSBNZWFzdXJlIE5vdGlmaWNhdGlvbjogU3RhcnRcbiIpOworCQlyZXR1cm47CisJfQorCisJbWVtY3B5KCZwcml2LT5tZWFzdXJlX3JlcG9ydCwgcmVwb3J0LCBzaXplb2YoKnJlcG9ydCkpOworCXByaXYtPm1lYXN1cmVtZW50X3N0YXR1cyB8PSBNRUFTVVJFTUVOVF9SRUFEWTsKK30KK0VYUE9SVF9TWU1CT0woaXdsX3J4X3NwZWN0cnVtX21lYXN1cmVfbm90aWYpOworCisKIAogLyogQ2FsY3VsYXRlIG5vaXNlIGxldmVsLCBiYXNlZCBvbiBtZWFzdXJlbWVudHMgZHVyaW5nIG5ldHdvcmsgc2lsZW5jZSBqdXN0CiAgKiAgIGJlZm9yZSBhcnJpdmluZyBiZWFjb24uICBUaGlzIG1lYXN1cmVtZW50IGNhbiBiZSBkb25lIG9ubHkgaWYgd2Uga25vdwpAQCAtNTY0LDE1ICs1NzksMjQgQEAKIAlpbnQgaTsKIAlfX2xlMzIgKnByZXZfc3RhdHM7CiAJdTMyICphY2N1bV9zdGF0czsKKwl1MzIgKmRlbHRhLCAqbWF4X2RlbHRhOwogCiAJcHJldl9zdGF0cyA9IChfX2xlMzIgKikmcHJpdi0+c3RhdGlzdGljczsKIAlhY2N1bV9zdGF0cyA9ICh1MzIgKikmcHJpdi0+YWNjdW1fc3RhdGlzdGljczsKKwlkZWx0YSA9ICh1MzIgKikmcHJpdi0+ZGVsdGFfc3RhdGlzdGljczsKKwltYXhfZGVsdGEgPSAodTMyICopJnByaXYtPm1heF9kZWx0YTsKIAogCWZvciAoaSA9IHNpemVvZihfX2xlMzIpOyBpIDwgc2l6ZW9mKHN0cnVjdCBpd2xfbm90aWZfc3RhdGlzdGljcyk7Ci0JICAgICBpICs9IHNpemVvZihfX2xlMzIpLCBzdGF0cysrLCBwcmV2X3N0YXRzKyssIGFjY3VtX3N0YXRzKyspCi0JCWlmIChsZTMyX3RvX2NwdSgqc3RhdHMpID4gbGUzMl90b19jcHUoKnByZXZfc3RhdHMpKQotCQkJKmFjY3VtX3N0YXRzICs9IChsZTMyX3RvX2NwdSgqc3RhdHMpIC0KKwkgICAgIGkgKz0gc2l6ZW9mKF9fbGUzMiksIHN0YXRzKyssIHByZXZfc3RhdHMrKywgZGVsdGErKywKKwkgICAgIG1heF9kZWx0YSsrLCBhY2N1bV9zdGF0cysrKSB7CisJCWlmIChsZTMyX3RvX2NwdSgqc3RhdHMpID4gbGUzMl90b19jcHUoKnByZXZfc3RhdHMpKSB7CisJCQkqZGVsdGEgPSAobGUzMl90b19jcHUoKnN0YXRzKSAtCiAJCQkJbGUzMl90b19jcHUoKnByZXZfc3RhdHMpKTsKKwkJCSphY2N1bV9zdGF0cyArPSAqZGVsdGE7CisJCQlpZiAoKmRlbHRhID4gKm1heF9kZWx0YSkKKwkJCQkqbWF4X2RlbHRhID0gKmRlbHRhOworCQl9CisJfQogCiAJLyogcmVzZXQgYWNjdW11bGF0aXZlIHN0YXRpc3RpY3MgZm9yICJuby1jb3VudGVyIiB0eXBlIHN0YXRpc3RpY3MgKi8KIAlwcml2LT5hY2N1bV9zdGF0aXN0aWNzLmdlbmVyYWwudGVtcGVyYXR1cmUgPQpAQCAtNTkyLDExICs2MTYsMTUgQEAKIAogI2RlZmluZSBSRUdfUkVDQUxJQl9QRVJJT0QgKDYwKQogCisjZGVmaW5lIFBMQ1BfTVNHICJwbGNwX2VyciBleGNlZWRlZCAldSwgJXUsICV1LCAldSwgJXUsICVkLCAldSBtU2Vjc1xuIgogdm9pZCBpd2xfcnhfc3RhdGlzdGljcyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKIHsKIAlpbnQgY2hhbmdlOwogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSByeGJfYWRkcihyeGIpOworCWludCBjb21iaW5lZF9wbGNwX2RlbHRhOworCXVuc2lnbmVkIGludCBwbGNwX21zZWM7CisJdW5zaWduZWQgbG9uZyBwbGNwX3JlY2VpdmVkX2ppZmZpZXM7CiAKIAlJV0xfREVCVUdfUlgocHJpdiwgIlN0YXRpc3RpY3Mgbm90aWZpY2F0aW9uIHJlY2VpdmVkICglZCB2cyAlZCkuXG4iLAogCQkgICAgIChpbnQpc2l6ZW9mKHByaXYtPnN0YXRpc3RpY3MpLApAQCAtNjExLDYgKzYzOSw1NiBAQAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCiAJaXdsX2FjY3VtdWxhdGl2ZV9zdGF0aXN0aWNzKHByaXYsIChfX2xlMzIgKikmcGt0LT51LnN0YXRzKTsKICNlbmRpZgorCS8qCisJICogY2hlY2sgZm9yIHBsY3BfZXJyIGFuZCB0cmlnZ2VyIHJhZGlvIHJlc2V0IGlmIGl0IGV4Y2VlZHMKKwkgKiB0aGUgcGxjcCBlcnJvciB0aHJlc2hvbGQgcGxjcF9kZWx0YS4KKwkgKi8KKwlwbGNwX3JlY2VpdmVkX2ppZmZpZXMgPSBqaWZmaWVzOworCXBsY3BfbXNlYyA9IGppZmZpZXNfdG9fbXNlY3MoKGxvbmcpIHBsY3BfcmVjZWl2ZWRfamlmZmllcyAtCisJCQkJCShsb25nKSBwcml2LT5wbGNwX2ppZmZpZXMpOworCXByaXYtPnBsY3BfamlmZmllcyA9IHBsY3BfcmVjZWl2ZWRfamlmZmllczsKKwkvKgorCSAqIGNoZWNrIHRvIG1ha2Ugc3VyZSBwbGNwX21zZWMgaXMgbm90IDAgdG8gcHJldmVudCBkaXZpc2lvbgorCSAqIGJ5IHplcm8uCisJICovCisJaWYgKHBsY3BfbXNlYykgeworCQljb21iaW5lZF9wbGNwX2RlbHRhID0KKwkJCShsZTMyX3RvX2NwdShwa3QtPnUuc3RhdHMucngub2ZkbS5wbGNwX2VycikgLQorCQkJbGUzMl90b19jcHUocHJpdi0+c3RhdGlzdGljcy5yeC5vZmRtLnBsY3BfZXJyKSkgKworCQkJKGxlMzJfdG9fY3B1KHBrdC0+dS5zdGF0cy5yeC5vZmRtX2h0LnBsY3BfZXJyKSAtCisJCQlsZTMyX3RvX2NwdShwcml2LT5zdGF0aXN0aWNzLnJ4Lm9mZG1faHQucGxjcF9lcnIpKTsKKworCQlpZiAoKGNvbWJpbmVkX3BsY3BfZGVsdGEgPiAwKSAmJgorCQkJKChjb21iaW5lZF9wbGNwX2RlbHRhICogMTAwKSAvIHBsY3BfbXNlYykgPgorCQkJcHJpdi0+Y2ZnLT5wbGNwX2RlbHRhX3RocmVzaG9sZCkgeworCQkJLyoKKwkJCSAqIGlmIHBsY3BfZXJyIGV4Y2VlZCB0aGUgdGhyZXNob2xkLCB0aGUgZm9sbG93aW5nCisJCQkgKiBkYXRhIGlzIHByaW50ZWQgaW4gY3N2IGZvcm1hdDoKKwkJCSAqICAgIFRleHQ6IHBsY3BfZXJyIGV4Y2VlZGVkICVkLAorCQkJICogICAgUmVjZWl2ZWQgb2ZkbS5wbGNwX2VyciwKKwkJCSAqICAgIEN1cnJlbnQgb2ZkbS5wbGNwX2VyciwKKwkJCSAqICAgIFJlY2VpdmVkIG9mZG1faHQucGxjcF9lcnIsCisJCQkgKiAgICBDdXJyZW50IG9mZG1faHQucGxjcF9lcnIsCisJCQkgKiAgICBjb21iaW5lZF9wbGNwX2RlbHRhLAorCQkJICogICAgcGxjcF9tc2VjCisJCQkgKi8KKwkJCUlXTF9ERUJVR19SQURJTyhwcml2LCBQTENQX01TRywKKwkJCQlwcml2LT5jZmctPnBsY3BfZGVsdGFfdGhyZXNob2xkLAorCQkJCWxlMzJfdG9fY3B1KHBrdC0+dS5zdGF0cy5yeC5vZmRtLnBsY3BfZXJyKSwKKwkJCQlsZTMyX3RvX2NwdShwcml2LT5zdGF0aXN0aWNzLnJ4Lm9mZG0ucGxjcF9lcnIpLAorCQkJCWxlMzJfdG9fY3B1KHBrdC0+dS5zdGF0cy5yeC5vZmRtX2h0LnBsY3BfZXJyKSwKKwkJCQlsZTMyX3RvX2NwdSgKKwkJCQkJcHJpdi0+c3RhdGlzdGljcy5yeC5vZmRtX2h0LnBsY3BfZXJyKSwKKwkJCQljb21iaW5lZF9wbGNwX2RlbHRhLCBwbGNwX21zZWMpOworCisJCQkvKgorCQkJICogUmVzZXQgdGhlIFJGIHJhZGlvIGR1ZSB0byB0aGUgaGlnaCBwbGNwCisJCQkgKiBlcnJvciByYXRlCisJCQkgKi8KKwkJCWl3bF9mb3JjZV9yZXNldChwcml2LCBJV0xfUkZfUkVTRVQpOworCQl9CisJfQorCiAJbWVtY3B5KCZwcml2LT5zdGF0aXN0aWNzLCAmcGt0LT51LnN0YXRzLCBzaXplb2YocHJpdi0+c3RhdGlzdGljcykpOwogCiAJc2V0X2JpdChTVEFUVVNfU1RBVElTVElDUywgJnByaXYtPnN0YXR1cyk7CkBAIC02MzgsMTEgKzcxNiwxMyBAQAogCXN0cnVjdCBpd2xfcnhfcGFja2V0ICpwa3QgPSByeGJfYWRkcihyeGIpOwogCiAJaWYgKGxlMzJfdG9fY3B1KHBrdC0+dS5zdGF0cy5mbGFnKSAmIFVDT0RFX1NUQVRJU1RJQ1NfQ0xFQVJfTVNLKSB7Ci0JCW1lbXNldCgmcHJpdi0+c3RhdGlzdGljcywgMCwKLQkJCXNpemVvZihzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MpKTsKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRwogCQltZW1zZXQoJnByaXYtPmFjY3VtX3N0YXRpc3RpY3MsIDAsCiAJCQlzaXplb2Yoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzKSk7CisJCW1lbXNldCgmcHJpdi0+ZGVsdGFfc3RhdGlzdGljcywgMCwKKwkJCXNpemVvZihzdHJ1Y3QgaXdsX25vdGlmX3N0YXRpc3RpY3MpKTsKKwkJbWVtc2V0KCZwcml2LT5tYXhfZGVsdGEsIDAsCisJCQlzaXplb2Yoc3RydWN0IGl3bF9ub3RpZl9zdGF0aXN0aWNzKSk7CiAjZW5kaWYKIAkJSVdMX0RFQlVHX1JYKHByaXYsICJTdGF0aXN0aWNzIGhhdmUgYmVlbiBjbGVhcmVkXG4iKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zY2FuLmMKaW5kZXggZmExYzg5Yi4uZGQ5ZmYyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc2Nhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNjYW4uYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiBHUEwgTElDRU5TRSBTVU1NQVJZCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDggLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwpAQCAtMTkyLDE5ICsxOTIsMTcgQEAKIAlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBjaC5yZXM6ICIKIAkJICAgICAgICIlZCBbODAyLjExJXNdICIKIAkJICAgICAgICIoVFNGOiAweCUwOFg6JTA4WCkgLSAlZCAiCi0JCSAgICAgICAiZWxhcHNlZD0lbHUgdXNlYyAoJWRtcyBzaW5jZSBsYXN0KVxuIiwKKwkJICAgICAgICJlbGFwc2VkPSVsdSB1c2VjXG4iLAogCQkgICAgICAgbm90aWYtPmNoYW5uZWwsCiAJCSAgICAgICBub3RpZi0+YmFuZCA/ICJiZyIgOiAiYSIsCiAJCSAgICAgICBsZTMyX3RvX2NwdShub3RpZi0+dHNmX2hpZ2gpLAogCQkgICAgICAgbGUzMl90b19jcHUobm90aWYtPnRzZl9sb3cpLAogCQkgICAgICAgbGUzMl90b19jcHUobm90aWYtPnN0YXRpc3RpY3NbMF0pLAotCQkgICAgICAgbGUzMl90b19jcHUobm90aWYtPnRzZl9sb3cpIC0gcHJpdi0+c2Nhbl9zdGFydF90c2YsCi0JCSAgICAgICBqaWZmaWVzX3RvX21zZWNzKGVsYXBzZWRfamlmZmllcwotCQkJCQkocHJpdi0+bGFzdF9zY2FuX2ppZmZpZXMsIGppZmZpZXMpKSk7CisJCSAgICAgICBsZTMyX3RvX2NwdShub3RpZi0+dHNmX2xvdykgLSBwcml2LT5zY2FuX3N0YXJ0X3RzZik7CiAjZW5kaWYKIAotCXByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzID0gamlmZmllczsKLQlwcml2LT5uZXh0X3NjYW5famlmZmllcyA9IDA7CisJaWYgKCFwcml2LT5pc19pbnRlcm5hbF9zaG9ydF9zY2FuKQorCQlwcml2LT5uZXh0X3NjYW5famlmZmllcyA9IDA7CiB9CiAKIC8qIFNlcnZpY2UgU0NBTl9DT01QTEVURV9OT1RJRklDQVRJT04gKDB4ODQpICovCkBAIC0yNTAsOCArMjQ4LDkgQEAKIAkJCWdvdG8gcmVzY2hlZHVsZTsKIAl9CiAKLQlwcml2LT5sYXN0X3NjYW5famlmZmllcyA9IGppZmZpZXM7Ci0JcHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMgPSAwOworCWlmICghcHJpdi0+aXNfaW50ZXJuYWxfc2hvcnRfc2NhbikKKwkJcHJpdi0+bmV4dF9zY2FuX2ppZmZpZXMgPSAwOworCiAJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNldHRpbmcgc2NhbiB0byBvZmZcbiIpOwogCiAJY2xlYXJfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7CkBAIC0zMTQsNiArMzEzLDcyIEBACiB9CiBFWFBPUlRfU1lNQk9MKGl3bF9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKTsKIAorc3RhdGljIGludCBpd2xfZ2V0X3NpbmdsZV9jaGFubmVsX2Zvcl9zY2FuKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJCQkgICAgIHN0cnVjdCBpd2xfc2Nhbl9jaGFubmVsICpzY2FuX2NoKQoreworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCWNvbnN0IHN0cnVjdCBpd2xfY2hhbm5lbF9pbmZvICpjaF9pbmZvOworCXUxNiBwYXNzaXZlX2R3ZWxsID0gMDsKKwl1MTYgYWN0aXZlX2R3ZWxsID0gMDsKKwlpbnQgaSwgYWRkZWQgPSAwOworCXUxNiBjaGFubmVsID0gMDsKKworCXNiYW5kID0gaXdsX2dldF9od19tb2RlKHByaXYsIGJhbmQpOworCWlmICghc2JhbmQpIHsKKwkJSVdMX0VSUihwcml2LCAiaW52YWxpZCBiYW5kXG4iKTsKKwkJcmV0dXJuIGFkZGVkOworCX0KKworCWFjdGl2ZV9kd2VsbCA9IGl3bF9nZXRfYWN0aXZlX2R3ZWxsX3RpbWUocHJpdiwgYmFuZCwgMCk7CisJcGFzc2l2ZV9kd2VsbCA9IGl3bF9nZXRfcGFzc2l2ZV9kd2VsbF90aW1lKHByaXYsIGJhbmQpOworCisJaWYgKHBhc3NpdmVfZHdlbGwgPD0gYWN0aXZlX2R3ZWxsKQorCQlwYXNzaXZlX2R3ZWxsID0gYWN0aXZlX2R3ZWxsICsgMTsKKworCS8qIG9ubHkgc2NhbiBzaW5nbGUgY2hhbm5lbCwgZ29vZCBlbm91Z2ggdG8gcmVzZXQgdGhlIFJGICovCisJLyogcGljayB0aGUgZmlyc3QgdmFsaWQgbm90IGluLXVzZSBjaGFubmVsICovCisJaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikgeworCQlmb3IgKGkgPSAxNDsgaSA8IHByaXYtPmNoYW5uZWxfY291bnQ7IGkrKykgeworCQkJaWYgKHByaXYtPmNoYW5uZWxfaW5mb1tpXS5jaGFubmVsICE9CisJCQkgICAgbGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpKSB7CisJCQkJY2hhbm5lbCA9IHByaXYtPmNoYW5uZWxfaW5mb1tpXS5jaGFubmVsOworCQkJCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LAorCQkJCQliYW5kLCBjaGFubmVsKTsKKwkJCQlpZiAoaXNfY2hhbm5lbF92YWxpZChjaF9pbmZvKSkKKwkJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkrKykgeworCQkJaWYgKHByaXYtPmNoYW5uZWxfaW5mb1tpXS5jaGFubmVsICE9CisJCQkgICAgbGUxNl90b19jcHUocHJpdi0+c3RhZ2luZ19yeG9uLmNoYW5uZWwpKSB7CisJCQkJCWNoYW5uZWwgPQorCQkJCQkJcHJpdi0+Y2hhbm5lbF9pbmZvW2ldLmNoYW5uZWw7CisJCQkJCWNoX2luZm8gPSBpd2xfZ2V0X2NoYW5uZWxfaW5mbyhwcml2LAorCQkJCQkJYmFuZCwgY2hhbm5lbCk7CisJCQkJCWlmIChpc19jaGFubmVsX3ZhbGlkKGNoX2luZm8pKQorCQkJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJaWYgKGNoYW5uZWwpIHsKKwkJc2Nhbl9jaC0+Y2hhbm5lbCA9IGNwdV90b19sZTE2KGNoYW5uZWwpOworCQlzY2FuX2NoLT50eXBlID0gU0NBTl9DSEFOTkVMX1RZUEVfUEFTU0lWRTsKKwkJc2Nhbl9jaC0+YWN0aXZlX2R3ZWxsID0gY3B1X3RvX2xlMTYoYWN0aXZlX2R3ZWxsKTsKKwkJc2Nhbl9jaC0+cGFzc2l2ZV9kd2VsbCA9IGNwdV90b19sZTE2KHBhc3NpdmVfZHdlbGwpOworCQkvKiBTZXQgdHhwb3dlciBsZXZlbHMgdG8gZGVmYXVsdHMgKi8KKwkJc2Nhbl9jaC0+ZHNwX2F0dGVuID0gMTEwOworCQlpZiAoYmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKQorCQkJc2Nhbl9jaC0+dHhfZ2FpbiA9ICgoMSA8PCA1KSB8ICgzIDw8IDMpKSB8IDM7CisJCWVsc2UKKwkJCXNjYW5fY2gtPnR4X2dhaW4gPSAoKDEgPDwgNSkgfCAoNSA8PCAzKSk7CisJCWFkZGVkKys7CisJfSBlbHNlCisJCUlXTF9FUlIocHJpdiwgIm5vIHZhbGlkIGNoYW5uZWwgZm91bmRcbiIpOworCXJldHVybiBhZGRlZDsKK30KKwogc3RhdGljIGludCBpd2xfZ2V0X2NoYW5uZWxzX2Zvcl9zY2FuKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKIAkJCQkgICAgIHU4IGlzX2FjdGl2ZSwgdTggbl9wcm9iZXMsCkBAIC00MDQsMjMgKzQ2OSw5IEBACiAKIHN0YXRpYyBpbnQgaXdsX3NjYW5faW5pdGlhdGUoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewotCWlmICghaXdsX2lzX3JlYWR5X3JmKHByaXYpKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKHByaXYsICJBYm9ydGluZyBzY2FuIGR1ZSB0byBub3QgcmVhZHkuXG4iKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCi0JaWYgKHRlc3RfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cykpIHsKLQkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW4gYWxyZWFkeSBpbiBwcm9ncmVzcy5cbiIpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0KLQlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7Ci0JCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FuIHJlcXVlc3Qgd2hpbGUgYWJvcnQgcGVuZGluZ1xuIik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQogCUlXTF9ERUJVR19JTkZPKHByaXYsICJTdGFydGluZyBzY2FuLi4uXG4iKTsKIAlzZXRfYml0KFNUQVRVU19TQ0FOTklORywgJnByaXYtPnN0YXR1cyk7CisJcHJpdi0+aXNfaW50ZXJuYWxfc2hvcnRfc2NhbiA9IGZhbHNlOwogCXByaXYtPnNjYW5fc3RhcnQgPSBqaWZmaWVzOwogCXByaXYtPnNjYW5fcGFzc19zdGFydCA9IHByaXYtPnNjYW5fc3RhcnQ7CiAKQEAgLTQ0OSw2ICs1MDAsMTggQEAKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAorCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpKSB7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FuIGFscmVhZHkgaW4gcHJvZ3Jlc3MuXG4iKTsKKwkJcmV0ID0gLUVBR0FJTjsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCWlmICh0ZXN0X2JpdChTVEFUVVNfU0NBTl9BQk9SVElORywgJnByaXYtPnN0YXR1cykpIHsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgIlNjYW4gcmVxdWVzdCB3aGlsZSBhYm9ydCBwZW5kaW5nXG4iKTsKKwkJcmV0ID0gLUVBR0FJTjsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKwogCS8qIFdlIGRvbid0IHNjaGVkdWxlIHNjYW4gd2l0aGluIG5leHRfc2Nhbl9qaWZmaWVzIHBlcmlvZC4KIAkgKiBBdm9pZCBzY2FubmluZyBkdXJpbmcgcG9zc2libGUgRUFQT0wgZXhjaGFuZ2UsIHJldHVybgogCSAqIHN1Y2Nlc3MgaW1tZWRpYXRlbHkuCkBAIC00NjEsMTUgKzUyNCw2IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQkvKiBpZiB3ZSBqdXN0IGZpbmlzaGVkIHNjYW4gYXNrIGZvciBkZWxheSAqLwotCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSAmJiBwcml2LT5sYXN0X3NjYW5famlmZmllcyAmJgotCSAgICB0aW1lX2FmdGVyKHByaXYtPmxhc3Rfc2Nhbl9qaWZmaWVzICsgSVdMX0RFTEFZX05FWFRfU0NBTiwgamlmZmllcykpIHsKLQkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgInNjYW4gcmVqZWN0ZWQ6IHdpdGhpbiBwcmV2aW91cyBzY2FuIHBlcmlvZFxuIik7Ci0JCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+c2Nhbl9jb21wbGV0ZWQpOwotCQlyZXQgPSAwOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCiAJcHJpdi0+c2Nhbl9iYW5kcyA9IDA7CiAJZm9yIChpID0gMDsgaSA8IHJlcS0+bl9jaGFubmVsczsgaSsrKQogCQlwcml2LT5zY2FuX2JhbmRzIHw9IEJJVChyZXEtPmNoYW5uZWxzW2ldLT5iYW5kKTsKQEAgLTQ4OCw2ICs1NDIsNDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woaXdsX21hY19od19zY2FuKTsKIAorLyoKKyAqIGludGVybmFsIHNob3J0IHNjYW4sIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmVlbiBjYWxsZWQgd2hpbGUgYXNzb2NpYXRlZC4KKyAqIEl0IHdpbGwgcmVzZXQgYW5kIHR1bmUgdGhlIHJhZGlvIHRvIHByZXZlbnQgcG9zc2libGUgUkYgcmVsYXRlZCBwcm9ibGVtCisgKi8KK2ludCBpd2xfaW50ZXJuYWxfc2hvcnRfaHdfc2NhbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpCit7CisJaW50IHJldCA9IDA7CisKKwlpZiAoIWl3bF9pc19yZWFkeV9yZihwcml2KSkgeworCQlyZXQgPSAtRUlPOworCQlJV0xfREVCVUdfU0NBTihwcml2LCAibm90IHJlYWR5IG9yIGV4aXQgcGVuZGluZ1xuIik7CisJCWdvdG8gb3V0OworCX0KKwlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5OSU5HLCAmcHJpdi0+c3RhdHVzKSkgeworCQlJV0xfREVCVUdfU0NBTihwcml2LCAiU2NhbiBhbHJlYWR5IGluIHByb2dyZXNzLlxuIik7CisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKwlpZiAodGVzdF9iaXQoU1RBVFVTX1NDQU5fQUJPUlRJTkcsICZwcml2LT5zdGF0dXMpKSB7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTY2FuIHJlcXVlc3Qgd2hpbGUgYWJvcnQgcGVuZGluZ1xuIik7CisJCXJldCA9IC1FQUdBSU47CisJCWdvdG8gb3V0OworCX0KKworCXByaXYtPnNjYW5fYmFuZHMgPSAwOworCWlmIChwcml2LT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzVHSFopCisJCXByaXYtPnNjYW5fYmFuZHMgfD0gQklUKElFRUU4MDIxMV9CQU5EXzVHSFopOworCWVsc2UKKwkJcHJpdi0+c2Nhbl9iYW5kcyB8PSBCSVQoSUVFRTgwMjExX0JBTkRfMkdIWik7CisKKwlJV0xfREVCVUdfU0NBTihwcml2LCAiU3RhcnQgaW50ZXJuYWwgc2hvcnQgc2Nhbi4uLlxuIik7CisJc2V0X2JpdChTVEFUVVNfU0NBTk5JTkcsICZwcml2LT5zdGF0dXMpOworCXByaXYtPmlzX2ludGVybmFsX3Nob3J0X3NjYW4gPSB0cnVlOworCXF1ZXVlX3dvcmsocHJpdi0+d29ya3F1ZXVlLCAmcHJpdi0+cmVxdWVzdF9zY2FuKTsKKworb3V0OgorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MKGl3bF9pbnRlcm5hbF9zaG9ydF9od19zY2FuKTsKKwogI2RlZmluZSBJV0xfU0NBTl9DSEVDS19XQVRDSERPRyAoNyAqIEhaKQogCiB2b2lkIGl3bF9iZ19zY2FuX2NoZWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKQEAgLTU0NCwxNCArNjM4LDI2IEBACiAJaWYgKGxlZnQgPCAwKQogCQlyZXR1cm4gMDsKIAkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOwotCSpwb3MrKyA9IDA7CisJaWYgKCFwcml2LT5pc19pbnRlcm5hbF9zaG9ydF9zY2FuICYmCisJICAgIHByaXYtPnNjYW5fcmVxdWVzdC0+bl9zc2lkcykgeworCQlzdHJ1Y3QgY2ZnODAyMTFfc3NpZCAqc3NpZCA9CisJCQlwcml2LT5zY2FuX3JlcXVlc3QtPnNzaWRzOwogCi0JbGVuICs9IDI7CisJCS8qIEJyb2FkY2FzdCBpZiBzc2lkX2xlbiBpcyAwICovCisJCSpwb3MrKyA9IHNzaWQtPnNzaWRfbGVuOworCQltZW1jcHkocG9zLCBzc2lkLT5zc2lkLCBzc2lkLT5zc2lkX2xlbik7CisJCXBvcyArPSBzc2lkLT5zc2lkX2xlbjsKKwkJbGVuICs9IDIgKyBzc2lkLT5zc2lkX2xlbjsKKwl9IGVsc2UgeworCQkqcG9zKysgPSAwOworCQlsZW4gKz0gMjsKKwl9CiAKIAlpZiAoV0FSTl9PTihsZWZ0IDwgaWVfbGVuKSkKIAkJcmV0dXJuIGxlbjsKIAotCW1lbWNweShwb3MsIGllcywgaWVfbGVuKTsKKwlpZiAoaWVzKQorCQltZW1jcHkocG9zLCBpZXMsIGllX2xlbik7CiAJbGVuICs9IGllX2xlbjsKIAlsZWZ0IC09IGllX2xlbjsKIApAQCAtNjU0LDcgKzc2MCw2IEBACiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlNjYW5uaW5nIHdoaWxlIGFzc29jaWF0ZWQuLi5cbiIpOwotCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCWludGVydmFsID0gcHJpdi0+YmVhY29uX2ludDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtNjcyLDIxICs3NzcsMjkgQEAKIAkJCSAgICAgICBzY2FuX3N1c3BlbmRfdGltZSwgaW50ZXJ2YWwpOwogCX0KIAotCWlmIChwcml2LT5zY2FuX3JlcXVlc3QtPm5fc3NpZHMpIHsKLQkJaW50IGksIHAgPSAwOworCWlmIChwcml2LT5pc19pbnRlcm5hbF9zaG9ydF9zY2FuKSB7CisJCUlXTF9ERUJVR19TQ0FOKHByaXYsICJTdGFydCBpbnRlcm5hbCBwYXNzaXZlIHNjYW4uXG4iKTsKKwl9IGVsc2UgaWYgKHByaXYtPnNjYW5fcmVxdWVzdC0+bl9zc2lkcykgewogCQlJV0xfREVCVUdfU0NBTihwcml2LCAiS2lja2luZyBvZmYgYWN0aXZlIHNjYW5cbiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+c2Nhbl9yZXF1ZXN0LT5uX3NzaWRzOyBpKyspIHsKLQkJCS8qIGFsd2F5cyBkb2VzIHdpbGRjYXJkIGFueXdheSAqLwotCQkJaWYgKCFwcml2LT5zY2FuX3JlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuKQotCQkJCWNvbnRpbnVlOwotCQkJc2Nhbi0+ZGlyZWN0X3NjYW5bcF0uaWQgPSBXTEFOX0VJRF9TU0lEOwotCQkJc2Nhbi0+ZGlyZWN0X3NjYW5bcF0ubGVuID0KLQkJCQlwcml2LT5zY2FuX3JlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuOwotCQkJbWVtY3B5KHNjYW4tPmRpcmVjdF9zY2FuW3BdLnNzaWQsCi0JCQkgICAgICAgcHJpdi0+c2Nhbl9yZXF1ZXN0LT5zc2lkc1tpXS5zc2lkLAotCQkJICAgICAgIHByaXYtPnNjYW5fcmVxdWVzdC0+c3NpZHNbaV0uc3NpZF9sZW4pOwotCQkJbl9wcm9iZXMrKzsKLQkJCXArKzsKKwkJLyoKKwkJICogVGhlIGZpcnN0IFNTSUQgdG8gc2NhbiBpcyBzdHVmZmVkIGludG8gdGhlIHByb2JlIHJlcXVlc3QKKwkJICogdGVtcGxhdGUgYW5kIHRoZSByZW1haW5pbmcgb25lcyBhcmUgaGFuZGxlZCB0aHJvdWdoIHRoZQorCQkgKiBkaXJlY3Rfc2NhbiBhcnJheS4KKwkJICovCisJCWlmIChwcml2LT5zY2FuX3JlcXVlc3QtPm5fc3NpZHMgPiAxKSB7CisJCQlpbnQgaSwgcCA9IDA7CisJCQlmb3IgKGkgPSAxOyBpIDwgcHJpdi0+c2Nhbl9yZXF1ZXN0LT5uX3NzaWRzOyBpKyspIHsKKwkJCQlpZiAoIXByaXYtPnNjYW5fcmVxdWVzdC0+c3NpZHNbaV0uc3NpZF9sZW4pCisJCQkJCWNvbnRpbnVlOworCQkJCXNjYW4tPmRpcmVjdF9zY2FuW3BdLmlkID0gV0xBTl9FSURfU1NJRDsKKwkJCQlzY2FuLT5kaXJlY3Rfc2NhbltwXS5sZW4gPQorCQkJCQlwcml2LT5zY2FuX3JlcXVlc3QtPnNzaWRzW2ldLnNzaWRfbGVuOworCQkJCW1lbWNweShzY2FuLT5kaXJlY3Rfc2NhbltwXS5zc2lkLAorCQkJCSAgICAgICBwcml2LT5zY2FuX3JlcXVlc3QtPnNzaWRzW2ldLnNzaWQsCisJCQkJICAgICAgIHByaXYtPnNjYW5fcmVxdWVzdC0+c3NpZHNbaV0uc3NpZF9sZW4pOworCQkJCW5fcHJvYmVzKys7CisJCQkJcCsrOworCQkJfQogCQl9CiAJCWlzX2FjdGl2ZSA9IHRydWU7CiAJfSBlbHNlCkBAIC03NTMsMjQgKzg2NiwzOCBAQAogCXJ4X2NoYWluIHw9IHJ4X2FudCA8PCBSWE9OX1JYX0NIQUlOX0ZPUkNFX1NFTF9QT1M7CiAJcnhfY2hhaW4gfD0gMHgxIDw8IFJYT05fUlhfQ0hBSU5fRFJJVkVSX0ZPUkNFX1BPUzsKIAlzY2FuLT5yeF9jaGFpbiA9IGNwdV90b19sZTE2KHJ4X2NoYWluKTsKLQljbWRfbGVuID0gaXdsX2ZpbGxfcHJvYmVfcmVxKHByaXYsCi0JCQkJKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNjYW4tPmRhdGEsCi0JCQkJcHJpdi0+c2Nhbl9yZXF1ZXN0LT5pZSwKLQkJCQlwcml2LT5zY2FuX3JlcXVlc3QtPmllX2xlbiwKLQkJCQlJV0xfTUFYX1NDQU5fU0laRSAtIHNpemVvZigqc2NhbikpOworCWlmICghcHJpdi0+aXNfaW50ZXJuYWxfc2hvcnRfc2NhbikgeworCQljbWRfbGVuID0gaXdsX2ZpbGxfcHJvYmVfcmVxKHByaXYsCisJCQkJCShzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilzY2FuLT5kYXRhLAorCQkJCQlwcml2LT5zY2FuX3JlcXVlc3QtPmllLAorCQkJCQlwcml2LT5zY2FuX3JlcXVlc3QtPmllX2xlbiwKKwkJCQkJSVdMX01BWF9TQ0FOX1NJWkUgLSBzaXplb2YoKnNjYW4pKTsKKwl9IGVsc2UgeworCQljbWRfbGVuID0gaXdsX2ZpbGxfcHJvYmVfcmVxKHByaXYsCisJCQkJCShzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKilzY2FuLT5kYXRhLAorCQkJCQlOVUxMLCAwLAorCQkJCQlJV0xfTUFYX1NDQU5fU0laRSAtIHNpemVvZigqc2NhbikpOwogCisJfQogCXNjYW4tPnR4X2NtZC5sZW4gPSBjcHVfdG9fbGUxNihjbWRfbGVuKTsKLQogCWlmIChpd2xfaXNfbW9uaXRvcl9tb2RlKHByaXYpKQogCQlzY2FuLT5maWx0ZXJfZmxhZ3MgPSBSWE9OX0ZJTFRFUl9QUk9NSVNDX01TSzsKIAogCXNjYW4tPmZpbHRlcl9mbGFncyB8PSAoUlhPTl9GSUxURVJfQUNDRVBUX0dSUF9NU0sgfAogCQkJICAgICAgIFJYT05fRklMVEVSX0JDT05fQVdBUkVfTVNLKTsKIAotCXNjYW4tPmNoYW5uZWxfY291bnQgPQotCQlpd2xfZ2V0X2NoYW5uZWxzX2Zvcl9zY2FuKHByaXYsIGJhbmQsIGlzX2FjdGl2ZSwgbl9wcm9iZXMsCi0JCQkodm9pZCAqKSZzY2FuLT5kYXRhW2xlMTZfdG9fY3B1KHNjYW4tPnR4X2NtZC5sZW4pXSk7Ci0KKwlpZiAocHJpdi0+aXNfaW50ZXJuYWxfc2hvcnRfc2NhbikgeworCQlzY2FuLT5jaGFubmVsX2NvdW50ID0KKwkJCWl3bF9nZXRfc2luZ2xlX2NoYW5uZWxfZm9yX3NjYW4ocHJpdiwgYmFuZCwKKwkJCQkodm9pZCAqKSZzY2FuLT5kYXRhW2xlMTZfdG9fY3B1KAorCQkJCXNjYW4tPnR4X2NtZC5sZW4pXSk7CisJfSBlbHNlIHsKKwkJc2Nhbi0+Y2hhbm5lbF9jb3VudCA9CisJCQlpd2xfZ2V0X2NoYW5uZWxzX2Zvcl9zY2FuKHByaXYsIGJhbmQsCisJCQkJaXNfYWN0aXZlLCBuX3Byb2JlcywKKwkJCQkodm9pZCAqKSZzY2FuLT5kYXRhW2xlMTZfdG9fY3B1KAorCQkJCXNjYW4tPnR4X2NtZC5sZW4pXSk7CisJfQogCWlmIChzY2FuLT5jaGFubmVsX2NvdW50ID09IDApIHsKIAkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgImNoYW5uZWwgY291bnQgJWRcbiIsIHNjYW4tPmNoYW5uZWxfY291bnQpOwogCQlnb3RvIGRvbmU7CkBAIC04MzEsNyArOTU4LDEyIEBACiAKIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT5zY2FuX2NoZWNrKTsKIAotCWllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZChwcml2LT5odywgZmFsc2UpOworCWlmICghcHJpdi0+aXNfaW50ZXJuYWxfc2hvcnRfc2NhbikKKwkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKHByaXYtPmh3LCBmYWxzZSk7CisJZWxzZSB7CisJCXByaXYtPmlzX2ludGVybmFsX3Nob3J0X3NjYW4gPSBmYWxzZTsKKwkJSVdMX0RFQlVHX1NDQU4ocHJpdiwgImludGVybmFsIHNob3J0IHNjYW4gY29tcGxldGVkXG4iKTsKKwl9CiAKIAlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWE1Y2QzLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTggKzAsMCBAQAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIENvcHlyaWdodChjKSAyMDAzIC0gMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSB0aGUgaXB3Mzk0NSBwcm9qZWN0LCBhcyB3ZWxsCi0gKiBhcyBwb3J0aW9ucyBvZiB0aGUgaWVlZTgwMjExIHN1YnN5c3RlbSBoZWFkZXIgZmlsZXMuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgotICogbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKLSAqIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMCwgVVNBCi0gKgotICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4gdGhlCi0gKiBmaWxlIGNhbGxlZCBMSUNFTlNFLgotICoKLSAqIENvbnRhY3QgSW5mb3JtYXRpb246Ci0gKiAgSW50ZWwgTGludXggV2lyZWxlc3MgPGlsd0BsaW51eC5pbnRlbC5jb20+Ci0gKiBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3Ci0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2tidWZmLmg+Ci0jaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KLQotI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgotCi0jaW5jbHVkZSAiaXdsLWVlcHJvbS5oIgotI2luY2x1ZGUgIml3bC1kZXYuaCIKLSNpbmNsdWRlICJpd2wtY29yZS5oIgotI2luY2x1ZGUgIml3bC1pby5oIgotI2luY2x1ZGUgIml3bC1zcGVjdHJ1bS5oIgotCi0jZGVmaW5lIEJFQUNPTl9USU1FX01BU0tfTE9XCTB4MDBGRkZGRkYKLSNkZWZpbmUgQkVBQ09OX1RJTUVfTUFTS19ISUdICTB4RkYwMDAwMDAKLSNkZWZpbmUgVElNRV9VTklUCQkxMDI0Ci0KLS8qCi0gKiBleHRlbmRlZCBiZWFjb24gdGltZSBmb3JtYXQKLSAqIHRpbWUgaW4gdXNlYyB3aWxsIGJlIGNoYW5nZWQgaW50byBhIDMyLWJpdCB2YWx1ZSBpbiA4OjI0IGZvcm1hdAotICogdGhlIGhpZ2ggMSBieXRlIGlzIHRoZSBiZWFjb24gY291bnRzCi0gKiB0aGUgbG93ZXIgMyBieXRlcyBpcyB0aGUgdGltZSBpbiB1c2VjIHdpdGhpbiBvbmUgYmVhY29uIGludGVydmFsCi0gKi8KLQotLyogVE9PRDogd2FzIHVzZWQgaW4gc3lzZnMgZGVidWcgaW50ZXJmYWNlIG5lZWQgdG8gYWRkIHRvIG1hYyAqLwotI2lmIDAKLXN0YXRpYyB1MzIgaXdsX3VzZWNzX3RvX2JlYWNvbnModTMyIHVzZWMsIHUzMiBiZWFjb25faW50ZXJ2YWwpCi17Ci0JdTMyIHF1b3Q7Ci0JdTMyIHJlbTsKLQl1MzIgaW50ZXJ2YWwgPSBiZWFjb25faW50ZXJ2YWwgKiAxMDI0OwotCi0JaWYgKCFpbnRlcnZhbCB8fCAhdXNlYykKLQkJcmV0dXJuIDA7Ci0KLQlxdW90ID0gKHVzZWMgLyBpbnRlcnZhbCkgJiAoQkVBQ09OX1RJTUVfTUFTS19ISUdIID4+IDI0KTsKLQlyZW0gPSAodXNlYyAlIGludGVydmFsKSAmIEJFQUNPTl9USU1FX01BU0tfTE9XOwotCi0JcmV0dXJuIChxdW90IDw8IDI0KSArIHJlbTsKLX0KLQotLyogYmFzZSBpcyB1c3VhbGx5IHdoYXQgd2UgZ2V0IGZyb20gdWNvZGUgd2l0aCBlYWNoIHJlY2VpdmVkIGZyYW1lLAotICogdGhlIHNhbWUgYXMgSFcgdGltZXIgY291bnRlciBjb3VudGluZyBkb3duCi0gKi8KLQotc3RhdGljIF9fbGUzMiBpd2xfYWRkX2JlYWNvbl90aW1lKHUzMiBiYXNlLCB1MzIgYWRkb24sIHUzMiBiZWFjb25faW50ZXJ2YWwpCi17Ci0JdTMyIGJhc2VfbG93ID0gYmFzZSAmIEJFQUNPTl9USU1FX01BU0tfTE9XOwotCXUzMiBhZGRvbl9sb3cgPSBhZGRvbiAmIEJFQUNPTl9USU1FX01BU0tfTE9XOwotCXUzMiBpbnRlcnZhbCA9IGJlYWNvbl9pbnRlcnZhbCAqIFRJTUVfVU5JVDsKLQl1MzIgcmVzID0gKGJhc2UgJiBCRUFDT05fVElNRV9NQVNLX0hJR0gpICsKLQkgICAgKGFkZG9uICYgQkVBQ09OX1RJTUVfTUFTS19ISUdIKTsKLQotCWlmIChiYXNlX2xvdyA+IGFkZG9uX2xvdykKLQkJcmVzICs9IGJhc2VfbG93IC0gYWRkb25fbG93OwotCWVsc2UgaWYgKGJhc2VfbG93IDwgYWRkb25fbG93KSB7Ci0JCXJlcyArPSBpbnRlcnZhbCArIGJhc2VfbG93IC0gYWRkb25fbG93OwotCQlyZXMgKz0gKDEgPDwgMjQpOwotCX0gZWxzZQotCQlyZXMgKz0gKDEgPDwgMjQpOwotCi0JcmV0dXJuIGNwdV90b19sZTMyKHJlcyk7Ci19Ci1zdGF0aWMgaW50IGl3bF9nZXRfbWVhc3VyZW1lbnQoc3RydWN0IGl3bF9wcml2ICpwcml2LAotCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWVhc3VyZW1lbnRfcGFyYW1zICpwYXJhbXMsCi0JCQkgICAgICAgdTggdHlwZSkKLXsKLQlzdHJ1Y3QgaXdsNDk2NV9zcGVjdHJ1bV9jbWQgc3BlY3RydW07Ci0Jc3RydWN0IGl3bF9yeF9wYWNrZXQgKnJlczsKLQlzdHJ1Y3QgaXdsX2hvc3RfY21kIGNtZCA9IHsKLQkJLmlkID0gUkVQTFlfU1BFQ1RSVU1fTUVBU1VSRU1FTlRfQ01ELAotCQkuZGF0YSA9ICh2b2lkICopJnNwZWN0cnVtLAotCQkubWV0YS5mbGFncyA9IENNRF9XQU5UX1NLQiwKLQl9OwotCXUzMiBhZGRfdGltZSA9IGxlNjRfdG9fY3B1KHBhcmFtcy0+c3RhcnRfdGltZSk7Ci0JaW50IHJjOwotCWludCBzcGVjdHJ1bV9yZXNwX3N0YXR1czsKLQlpbnQgZHVyYXRpb24gPSBsZTE2X3RvX2NwdShwYXJhbXMtPmR1cmF0aW9uKTsKLQotCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkKLQkJYWRkX3RpbWUgPQotCQkgICAgaXdsX3VzZWNzX3RvX2JlYWNvbnMoCi0JCQlsZTY0X3RvX2NwdShwYXJhbXMtPnN0YXJ0X3RpbWUpIC0gcHJpdi0+bGFzdF90c2YsCi0JCQlsZTE2X3RvX2NwdShwcml2LT5yeG9uX3RpbWluZy5iZWFjb25faW50ZXJ2YWwpKTsKLQotCW1lbXNldCgmc3BlY3RydW0sIDAsIHNpemVvZihzcGVjdHJ1bSkpOwotCi0Jc3BlY3RydW0uY2hhbm5lbF9jb3VudCA9IGNwdV90b19sZTE2KDEpOwotCXNwZWN0cnVtLmZsYWdzID0KLQkgICAgUlhPTl9GTEdfVFNGMkhPU1RfTVNLIHwgUlhPTl9GTEdfQU5UX0FfTVNLIHwgUlhPTl9GTEdfRElTX0RJVl9NU0s7Ci0Jc3BlY3RydW0uZmlsdGVyX2ZsYWdzID0gTUVBU1VSRU1FTlRfRklMVEVSX0ZMQUc7Ci0JY21kLmxlbiA9IHNpemVvZihzcGVjdHJ1bSk7Ci0Jc3BlY3RydW0ubGVuID0gY3B1X3RvX2xlMTYoY21kLmxlbiAtIHNpemVvZihzcGVjdHJ1bS5sZW4pKTsKLQotCWlmIChpd2xfaXNfYXNzb2NpYXRlZChwcml2KSkKLQkJc3BlY3RydW0uc3RhcnRfdGltZSA9Ci0JCSAgICBpd2xfYWRkX2JlYWNvbl90aW1lKHByaXYtPmxhc3RfYmVhY29uX3RpbWUsCi0JCQkJYWRkX3RpbWUsCi0JCQkJbGUxNl90b19jcHUocHJpdi0+cnhvbl90aW1pbmcuYmVhY29uX2ludGVydmFsKSk7Ci0JZWxzZQotCQlzcGVjdHJ1bS5zdGFydF90aW1lID0gMDsKLQotCXNwZWN0cnVtLmNoYW5uZWxzWzBdLmR1cmF0aW9uID0gY3B1X3RvX2xlMzIoZHVyYXRpb24gKiBUSU1FX1VOSVQpOwotCXNwZWN0cnVtLmNoYW5uZWxzWzBdLmNoYW5uZWwgPSBwYXJhbXMtPmNoYW5uZWw7Ci0Jc3BlY3RydW0uY2hhbm5lbHNbMF0udHlwZSA9IHR5cGU7Ci0JaWYgKHByaXYtPmFjdGl2ZV9yeG9uLmZsYWdzICYgUlhPTl9GTEdfQkFORF8yNEdfTVNLKQotCQlzcGVjdHJ1bS5mbGFncyB8PSBSWE9OX0ZMR19CQU5EXzI0R19NU0sgfAotCQkgICAgUlhPTl9GTEdfQVVUT19ERVRFQ1RfTVNLIHwgUlhPTl9GTEdfVEdHX1BST1RFQ1RfTVNLOwotCi0JcmMgPSBpd2xfc2VuZF9jbWRfc3luYyhwcml2LCAmY21kKTsKLQlpZiAocmMpCi0JCXJldHVybiByYzsKLQotCXJlcyA9IChzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqKWNtZC5tZXRhLnUuc2tiLT5kYXRhOwotCWlmIChyZXMtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewotCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfUlhfT05fQVNTT0MgY29tbWFuZFxuIik7Ci0JCXJjID0gLUVJTzsKLQl9Ci0KLQlzcGVjdHJ1bV9yZXNwX3N0YXR1cyA9IGxlMTZfdG9fY3B1KHJlcy0+dS5zcGVjdHJ1bS5zdGF0dXMpOwotCXN3aXRjaCAoc3BlY3RydW1fcmVzcF9zdGF0dXMpIHsKLQljYXNlIDA6CQkvKiBDb21tYW5kIHdpbGwgYmUgaGFuZGxlZCAqLwotCQlpZiAocmVzLT51LnNwZWN0cnVtLmlkICE9IDB4ZmYpIHsKLQkJCUlXTF9ERUJVR19JTkZPKHByaXYsCi0JCQkJIlJlcGxhY2VkIGV4aXN0aW5nIG1lYXN1cmVtZW50OiAlZFxuIiwKLQkJCQlyZXMtPnUuc3BlY3RydW0uaWQpOwotCQkJcHJpdi0+bWVhc3VyZW1lbnRfc3RhdHVzICY9IH5NRUFTVVJFTUVOVF9SRUFEWTsKLQkJfQotCQlwcml2LT5tZWFzdXJlbWVudF9zdGF0dXMgfD0gTUVBU1VSRU1FTlRfQUNUSVZFOwotCQlyYyA9IDA7Ci0JCWJyZWFrOwotCi0JY2FzZSAxOgkJLyogQ29tbWFuZCB3aWxsIG5vdCBiZSBoYW5kbGVkICovCi0JCXJjID0gLUVBR0FJTjsKLQkJYnJlYWs7Ci0JfQotCi0JZGV2X2tmcmVlX3NrYl9hbnkoY21kLm1ldGEudS5za2IpOwotCi0JcmV0dXJuIHJjOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIGl3bF9yeF9zcGVjdHJ1bV9tZWFzdXJlX25vdGlmKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKLQkJCQkJICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKLXsKLQlzdHJ1Y3QgaXdsX3J4X3BhY2tldCAqcGt0ID0gcnhiX2FkZHIocnhiKTsKLQlzdHJ1Y3QgaXdsX3NwZWN0cnVtX25vdGlmaWNhdGlvbiAqcmVwb3J0ID0gJihwa3QtPnUuc3BlY3RydW1fbm90aWYpOwotCi0JaWYgKCFyZXBvcnQtPnN0YXRlKSB7Ci0JCUlXTF9ERUJVR18xMUgocHJpdiwKLQkJCSJTcGVjdHJ1bSBNZWFzdXJlIE5vdGlmaWNhdGlvbjogU3RhcnRcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JbWVtY3B5KCZwcml2LT5tZWFzdXJlX3JlcG9ydCwgcmVwb3J0LCBzaXplb2YoKnJlcG9ydCkpOwotCXByaXYtPm1lYXN1cmVtZW50X3N0YXR1cyB8PSBNRUFTVVJFTUVOVF9SRUFEWTsKLX0KLQotdm9pZCBpd2xfc2V0dXBfc3BlY3RydW1faGFuZGxlcnMoc3RydWN0IGl3bF9wcml2ICpwcml2KQotewotCXByaXYtPnJ4X2hhbmRsZXJzW1NQRUNUUlVNX01FQVNVUkVfTk9USUZJQ0FUSU9OXSA9Ci0JCQlpd2xfcnhfc3BlY3RydW1fbWVhc3VyZV9ub3RpZjsKLX0KLUVYUE9SVF9TWU1CT0woaXdsX3NldHVwX3NwZWN0cnVtX2hhbmRsZXJzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zcGVjdHJ1bS5oCmluZGV4IGE3N2MxZTYuLmFmNmJhYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXNwZWN0cnVtLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3BlY3RydW0uaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXN0YS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMKaW5kZXggOTBmYmRiMi4uNGE2Njg2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTgwLDE5ICs4MCw5MCBAQAogfQogRVhQT1JUX1NZTUJPTChpd2xfZ2V0X3JhX3N0YV9pZCk7CiAKKy8qIHByaXYtPnN0YV9sb2NrIG11c3QgYmUgaGVsZCAqLwogc3RhdGljIHZvaWQgaXdsX3N0YV91Y29kZV9hY3RpdmF0ZShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHU4IHN0YV9pZCkKIHsKKworCWlmICghKHByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAmIElXTF9TVEFfRFJJVkVSX0FDVElWRSkpCisJCUlXTF9FUlIocHJpdiwgIkFDVElWQVRFIGEgbm9uIERSSVZFUiBhY3RpdmUgc3RhdGlvbiBpZCAldSBhZGRyICVwTVxuIiwKKwkJCXN0YV9pZCwgcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOworCisJaWYgKHByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAmIElXTF9TVEFfVUNPREVfQUNUSVZFKSB7CisJCUlXTF9ERUJVR19BU1NPQyhwcml2LAorCQkJCSJTVEEgaWQgJXUgYWRkciAlcE0gYWxyZWFkeSBwcmVzZW50IGluIHVDb2RlIChhY2NvcmRpbmcgdG8gZHJpdmVyKVxuIiwKKwkJCQlzdGFfaWQsIHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLnN0YS5hZGRyKTsKKwl9IGVsc2UgeworCQlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnVzZWQgfD0gSVdMX1NUQV9VQ09ERV9BQ1RJVkU7CisJCUlXTF9ERUJVR19BU1NPQyhwcml2LCAiQWRkZWQgU1RBIGlkICV1IGFkZHIgJXBNIHRvIHVDb2RlXG4iLAorCQkJCXN0YV9pZCwgcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOworCX0KK30KKworc3RhdGljIHZvaWQgaXdsX3Byb2Nlc3NfYWRkX3N0YV9yZXNwKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKKwkJCQkgICAgIHN0cnVjdCBpd2xfYWRkc3RhX2NtZCAqYWRkc3RhLAorCQkJCSAgICAgc3RydWN0IGl3bF9yeF9wYWNrZXQgKnBrdCwKKwkJCQkgICAgIGJvb2wgc3luYykKK3sKKwl1OCBzdGFfaWQgPSBhZGRzdGEtPnN0YS5zdGFfaWQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCWlmIChwa3QtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgeworCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfQUREX1NUQSAoMHglMDhYKVxuIiwKKwkJCXBrdC0+aGRyLmZsYWdzKTsKKwkJcmV0dXJuOworCX0KKworCUlXTF9ERUJVR19JTkZPKHByaXYsICJQcm9jZXNzaW5nIHJlc3BvbnNlIGZvciBhZGRpbmcgc3RhdGlvbiAldVxuIiwKKwkJICAgICAgIHN0YV9pZCk7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIAotCWlmICghKHByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCAmIElXTF9TVEFfRFJJVkVSX0FDVElWRSkpCi0JCUlXTF9FUlIocHJpdiwgIkFDVElWQVRFIGEgbm9uIERSSVZFUiBhY3RpdmUgc3RhdGlvbiAlZFxuIiwKKwlzd2l0Y2ggKHBrdC0+dS5hZGRfc3RhLnN0YXR1cykgeworCWNhc2UgQUREX1NUQV9TVUNDRVNTX01TSzoKKwkJSVdMX0RFQlVHX0lORk8ocHJpdiwgIlJFUExZX0FERF9TVEEgUEFTU0VEXG4iKTsKKwkJaXdsX3N0YV91Y29kZV9hY3RpdmF0ZShwcml2LCBzdGFfaWQpOworCQlicmVhazsKKwljYXNlIEFERF9TVEFfTk9fUk9PTV9JTl9UQUJMRToKKwkJSVdMX0VSUihwcml2LCAiQWRkaW5nIHN0YXRpb24gJWQgZmFpbGVkLCBubyByb29tIGluIHRhYmxlLlxuIiwKIAkJCXN0YV9pZCk7CisJCWJyZWFrOworCWNhc2UgQUREX1NUQV9OT19CTE9DS19BQ0tfUkVTT1VSQ0U6CisJCUlXTF9FUlIocHJpdiwgIkFkZGluZyBzdGF0aW9uICVkIGZhaWxlZCwgbm8gYmxvY2sgYWNrIHJlc291cmNlLlxuIiwKKwkJCXN0YV9pZCk7CisJCWJyZWFrOworCWNhc2UgQUREX1NUQV9NT0RJRllfTk9OX0VYSVNUX1NUQToKKwkJSVdMX0VSUihwcml2LCAiQXR0ZW1wdGluZyB0byBtb2RpZnkgbm9uLWV4aXN0aW5nIHN0YXRpb24gJWQgXG4iLAorCQkJc3RhX2lkKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJSVdMX0RFQlVHX0FTU09DKHByaXYsICJSZWNlaXZlZCBSRVBMWV9BRERfU1RBOigweCUwOFgpXG4iLAorCQkJCXBrdC0+dS5hZGRfc3RhLnN0YXR1cyk7CisJCWJyZWFrOworCX0KIAotCXByaXYtPnN0YXRpb25zW3N0YV9pZF0udXNlZCB8PSBJV0xfU1RBX1VDT0RFX0FDVElWRTsKLQlJV0xfREVCVUdfQVNTT0MocHJpdiwgIkFkZGVkIFNUQSB0byBVY29kZTogJXBNXG4iLAotCQkJcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOworCUlXTF9ERUJVR19JTkZPKHByaXYsICIlcyBzdGF0aW9uIGlkICV1IGFkZHIgJXBNXG4iLAorCQkgICAgICAgcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEubW9kZSA9PQorCQkgICAgICAgU1RBX0NPTlRST0xfTU9ESUZZX01TSyA/ICAiTW9kaWZpZWQiIDogIkFkZGVkIiwKKwkJICAgICAgIHN0YV9pZCwgcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS5zdGEuc3RhLmFkZHIpOworCisJLyoKKwkgKiBYWFg6IFRoZSBNQUMgYWRkcmVzcyBpbiB0aGUgY29tbWFuZCBidWZmZXIgaXMgb2Z0ZW4gY2hhbmdlZCBmcm9tCisJICogdGhlIG9yaWdpbmFsIHNlbnQgdG8gdGhlIGRldmljZS4gVGhhdCBpcywgdGhlIE1BQyBhZGRyZXNzCisJICogd3JpdHRlbiB0byB0aGUgY29tbWFuZCBidWZmZXIgb2Z0ZW4gaXMgbm90IHRoZSBzYW1lIE1BQyBhZHJlc3MKKwkgKiByZWFkIGZyb20gdGhlIGNvbW1hbmQgYnVmZmVyIHdoZW4gdGhlIGNvbW1hbmQgcmV0dXJucy4gVGhpcworCSAqIGlzc3VlIGhhcyBub3QgeWV0IGJlZW4gcmVzb2x2ZWQgYW5kIHRoaXMgZGVidWdnaW5nIGlzIGxlZnQgdG8KKwkgKiBvYnNlcnZlIHRoZSBwcm9ibGVtLgorCSAqLworCUlXTF9ERUJVR19JTkZPKHByaXYsICIlcyBzdGF0aW9uIGFjY29yZGluZyB0byBjbWQgYnVmZmVyICVwTVxuIiwKKwkJICAgICAgIHByaXYtPnN0YXRpb25zW3N0YV9pZF0uc3RhLm1vZGUgPT0KKwkJICAgICAgIFNUQV9DT05UUk9MX01PRElGWV9NU0sgPyAiTW9kaWZpZWQiIDogIkFkZGVkIiwKKwkJICAgICAgIGFkZHN0YS0+c3RhLmFkZHIpOworCisJLyoKKwkgKiBEZXRlcm1pbmUgaWYgd2Ugd2FudGVkIHRvIG1vZGlmeSBvciBhZGQgYSBzdGF0aW9uLAorCSAqIGlmIGFkZGluZyBhIHN0YXRpb24gc3VjY2VlZGVkIHdlIGhhdmUgc29tZSBtb3JlIGluaXRpYWxpemF0aW9uCisJICogdG8gZG8gd2hlbiB1c2luZyBzdGF0aW9uIG5vdGlmaWNhdGlvbi4gVE9ETworCSAqLwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+c3RhX2xvY2ssIGZsYWdzKTsKIH0KQEAgLTEwMywyMyArMTc0LDkgQEAKIHsKIAlzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKmFkZHN0YSA9CiAJCShzdHJ1Y3QgaXdsX2FkZHN0YV9jbWQgKiljbWQtPmNtZC5wYXlsb2FkOwotCXU4IHN0YV9pZCA9IGFkZHN0YS0+c3RhLnN0YV9pZDsKIAotCWlmIChwa3QtPmhkci5mbGFncyAmIElXTF9DTURfRkFJTEVEX01TSykgewotCQlJV0xfRVJSKHByaXYsICJCYWQgcmV0dXJuIGZyb20gUkVQTFlfQUREX1NUQSAoMHglMDhYKVxuIiwKLQkJCSAgcGt0LT5oZHIuZmxhZ3MpOwotCQlyZXR1cm47Ci0JfQorCWl3bF9wcm9jZXNzX2FkZF9zdGFfcmVzcChwcml2LCBhZGRzdGEsIHBrdCwgZmFsc2UpOwogCi0Jc3dpdGNoIChwa3QtPnUuYWRkX3N0YS5zdGF0dXMpIHsKLQljYXNlIEFERF9TVEFfU1VDQ0VTU19NU0s6Ci0JCWl3bF9zdGFfdWNvZGVfYWN0aXZhdGUocHJpdiwgc3RhX2lkKTsKLQkJIC8qIGZhbGwgdGhyb3VnaCAqLwotCWRlZmF1bHQ6Ci0JCUlXTF9ERUJVR19IQyhwcml2LCAiUmVjZWl2ZWQgUkVQTFlfQUREX1NUQTooMHglMDhYKVxuIiwKLQkJCSAgICAgcGt0LT51LmFkZF9zdGEuc3RhdHVzKTsKLQkJYnJlYWs7Ci0JfQogfQogCiBpbnQgaXdsX3NlbmRfYWRkX3N0YShzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsCkBAIC0xNDUsMjQgKzIwMiw5IEBACiAJaWYgKHJldCB8fCAoZmxhZ3MgJiBDTURfQVNZTkMpKQogCQlyZXR1cm4gcmV0OwogCi0JcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLnJlcGx5X3BhZ2U7Ci0JaWYgKHBrdC0+aGRyLmZsYWdzICYgSVdMX0NNRF9GQUlMRURfTVNLKSB7Ci0JCUlXTF9FUlIocHJpdiwgIkJhZCByZXR1cm4gZnJvbSBSRVBMWV9BRERfU1RBICgweCUwOFgpXG4iLAotCQkJICBwa3QtPmhkci5mbGFncyk7Ci0JCXJldCA9IC1FSU87Ci0JfQotCiAJaWYgKHJldCA9PSAwKSB7Ci0JCXN3aXRjaCAocGt0LT51LmFkZF9zdGEuc3RhdHVzKSB7Ci0JCWNhc2UgQUREX1NUQV9TVUNDRVNTX01TSzoKLQkJCWl3bF9zdGFfdWNvZGVfYWN0aXZhdGUocHJpdiwgc3RhLT5zdGEuc3RhX2lkKTsKLQkJCUlXTF9ERUJVR19JTkZPKHByaXYsICJSRVBMWV9BRERfU1RBIFBBU1NFRFxuIik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldCA9IC1FSU87Ci0JCQlJV0xfV0FSTihwcml2LCAiUkVQTFlfQUREX1NUQSBmYWlsZWRcbiIpOwotCQkJYnJlYWs7Ci0JCX0KKwkJcGt0ID0gKHN0cnVjdCBpd2xfcnhfcGFja2V0ICopY21kLnJlcGx5X3BhZ2U7CisJCWl3bF9wcm9jZXNzX2FkZF9zdGFfcmVzcChwcml2LCBzdGEsIHBrdCwgdHJ1ZSk7CiAJfQogCWl3bF9mcmVlX3BhZ2VzKHByaXYsIGNtZC5yZXBseV9wYWdlKTsKIApAQCAtMTAwMywyNCArMTA0NSwxOSBAQAogCXN0cnVjdCBpZWVlODAyMTFfc3RhX2h0X2NhcCAqY3VyX2h0X2NvbmZpZyA9IE5VTEw7CiAJdTggc3RhX2lkOwogCi0JLyogQWRkIHN0YXRpb24gdG8gZGV2aWNlJ3Mgc3RhdGlvbiB0YWJsZSAqLwotCiAJLyoKLQkgKiBYWFg6IFRoaXMgY2hlY2sgaXMgZGVmaW5pdGVseSBub3QgY29ycmVjdCwgaWYgd2UncmUgYW4gQVAKLQkgKglpdCdsbCBhbHdheXMgYmUgZmFsc2Ugd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudCwgYnV0Ci0JICoJaXQgZG9lc24ndCBsb29rIGxpa2UgaXdsYWduIGlzIHByZXBhcmVkIHRvIGJlIGFuIEhUCi0JICoJQVAgYW55d2F5LgorCSAqIFNldCBIVCBjYXBhYmlsaXRpZXMuIEl0IGlzIG9rIHRvIHNldCB0aGlzIHN0cnVjdCBldmVuIGlmIG5vdCB1c2luZworCSAqIEhUIGNvbmZpZzogdGhlIHByaXYtPmN1cnJlbnRfaHRfY29uZmlnLmlzX2h0IGZsYWcgd2lsbCBqdXN0IGJlIGZhbHNlCiAJICovCi0JaWYgKHByaXYtPmN1cnJlbnRfaHRfY29uZmlnLmlzX2h0KSB7Ci0JCXJjdV9yZWFkX2xvY2soKTsKLQkJc3RhID0gaWVlZTgwMjExX2ZpbmRfc3RhKHByaXYtPnZpZiwgYWRkcik7Ci0JCWlmIChzdGEpIHsKLQkJCW1lbWNweSgmaHRfY29uZmlnLCAmc3RhLT5odF9jYXAsIHNpemVvZihodF9jb25maWcpKTsKLQkJCWN1cl9odF9jb25maWcgPSAmaHRfY29uZmlnOwotCQl9Ci0JCXJjdV9yZWFkX3VubG9jaygpOworCXJjdV9yZWFkX2xvY2soKTsKKwlzdGEgPSBpZWVlODAyMTFfZmluZF9zdGEocHJpdi0+dmlmLCBhZGRyKTsKKwlpZiAoc3RhKSB7CisJCW1lbWNweSgmaHRfY29uZmlnLCAmc3RhLT5odF9jYXAsIHNpemVvZihodF9jb25maWcpKTsKKwkJY3VyX2h0X2NvbmZpZyA9ICZodF9jb25maWc7CiAJfQorCXJjdV9yZWFkX3VubG9jaygpOwogCisJLyogQWRkIHN0YXRpb24gdG8gZGV2aWNlJ3Mgc3RhdGlvbiB0YWJsZSAqLwogCXN0YV9pZCA9IGl3bF9hZGRfc3RhdGlvbihwcml2LCBhZGRyLCBpc19hcCwgQ01EX1NZTkMsIGN1cl9odF9jb25maWcpOwogCiAJLyogU2V0IHVwIGRlZmF1bHQgcmF0ZSBzY2FsaW5nIHRhYmxlIGluIGRldmljZSdzIHN0YXRpb24gdGFibGUgKi8KQEAgLTEwODUsNiArMTEyMiw3IEBACiAgKi8KIHZvaWQgaXdsX2FkZF9iY2FzdF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQWRkaW5nIGJyb2FkY2FzdCBzdGF0aW9uIHRvIHN0YXRpb24gdGFibGVcbiIpOwogCWl3bF9hZGRfc3RhdGlvbihwcml2LCBpd2xfYmNhc3RfYWRkciwgZmFsc2UsIENNRF9TWU5DLCBOVUxMKTsKIAogCS8qIFNldCB1cCBkZWZhdWx0IHJhdGUgc2NhbGluZyB0YWJsZSBpbiBkZXZpY2UncyBzdGF0aW9uIHRhYmxlICovCkBAIC0xMDkzLDYgKzExMzEsMTYgQEAKIEVYUE9SVF9TWU1CT0woaXdsX2FkZF9iY2FzdF9zdGF0aW9uKTsKIAogLyoqCisgKiBpd2wzOTQ1X2FkZF9iY2FzdF9zdGF0aW9uIC0gYWRkIGJyb2FkY2FzdCBzdGF0aW9uIGludG8gc3RhdGlvbiB0YWJsZS4KKyAqLwordm9pZCBpd2wzOTQ1X2FkZF9iY2FzdF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKK3sKKwlJV0xfREVCVUdfSU5GTyhwcml2LCAiQWRkaW5nIGJyb2FkY2FzdCBzdGF0aW9uIHRvIHN0YXRpb24gdGFibGVcbiIpOworCWl3bF9hZGRfc3RhdGlvbihwcml2LCBpd2xfYmNhc3RfYWRkciwgZmFsc2UsIENNRF9TWU5DLCBOVUxMKTsKK30KK0VYUE9SVF9TWU1CT0woaXdsMzk0NV9hZGRfYmNhc3Rfc3RhdGlvbik7CisKKy8qKgogICogaXdsX2dldF9zdGFfaWQgLSBGaW5kIHN0YXRpb24ncyBpbmRleCB3aXRoaW4gc3RhdGlvbiB0YWJsZQogICoKICAqIElmIG5ldyBJQlNTIHN0YXRpb24sIGNyZWF0ZSBuZXcgZW50cnkgaW4gc3RhdGlvbiB0YWJsZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtc3RhLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuaAppbmRleCA4ZDA1MmRlLi4yZGMzNWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC1zdGEuaApAQCAtMSw2ICsxLDYgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCi0gKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMDkgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQoYykgMjAwMyAtIDIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gdGhlIGlwdzM5NDUgcHJvamVjdCwgYXMgd2VsbAogICogYXMgcG9ydGlvbnMgb2YgdGhlIGllZWU4MDIxMSBzdWJzeXN0ZW0gaGVhZGVyIGZpbGVzLgpAQCAtNTMsNiArNTMsNyBAQAogCiBpbnQgaXdsX3J4b25fYWRkX3N0YXRpb24oc3RydWN0IGl3bF9wcml2ICpwcml2LCBjb25zdCB1OCAqYWRkciwgYm9vbCBpc19hcCk7CiB2b2lkIGl3bF9hZGRfYmNhc3Rfc3RhdGlvbihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYpOwordm9pZCBpd2wzOTQ1X2FkZF9iY2FzdF9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CiBpbnQgaXdsX3JlbW92ZV9zdGF0aW9uKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgY29uc3QgdTggKmFkZHIsIGJvb2wgaXNfYXApOwogdm9pZCBpd2xfY2xlYXJfc3RhdGlvbnNfdGFibGUoc3RydWN0IGl3bF9wcml2ICpwcml2KTsKIGludCBpd2xfZ2V0X2ZyZWVfdWNvZGVfa2V5X2luZGV4KHN0cnVjdCBpd2xfcHJpdiAqcHJpdik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wtdHguYwppbmRleCA4ZjQwNzE1Li4xZWQ1MjA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bC10eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsLXR4LmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTYwLDcgKzYwLDggQEAKIHN0YXRpYyBpbmxpbmUgaW50IGl3bF9hbGxvY19kbWFfcHRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCQkgICAgc3RydWN0IGl3bF9kbWFfcHRyICpwdHIsIHNpemVfdCBzaXplKQogewotCXB0ci0+YWRkciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsIHNpemUsICZwdHItPmRtYSk7CisJcHRyLT5hZGRyID0gZG1hX2FsbG9jX2NvaGVyZW50KCZwcml2LT5wY2lfZGV2LT5kZXYsIHNpemUsICZwdHItPmRtYSwKKwkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwdHItPmFkZHIpCiAJCXJldHVybiAtRU5PTUVNOwogCXB0ci0+c2l6ZSA9IHNpemU7CkBAIC03MywyMSArNzQsMjAgQEAKIAlpZiAodW5saWtlbHkoIXB0ci0+YWRkcikpCiAJCXJldHVybjsKIAotCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGNpX2RldiwgcHRyLT5zaXplLCBwdHItPmFkZHIsIHB0ci0+ZG1hKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmcHJpdi0+cGNpX2Rldi0+ZGV2LCBwdHItPnNpemUsIHB0ci0+YWRkciwgcHRyLT5kbWEpOwogCW1lbXNldChwdHIsIDAsIHNpemVvZigqcHRyKSk7CiB9CiAKIC8qKgogICogaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyIC0gU2VuZCBuZXcgd3JpdGUgaW5kZXggdG8gaGFyZHdhcmUKICAqLwotaW50IGl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSkKK3ZvaWQgaXdsX3R4cV91cGRhdGVfd3JpdGVfcHRyKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxKQogewogCXUzMiByZWcgPSAwOwotCWludCByZXQgPSAwOwogCWludCB0eHFfaWQgPSB0eHEtPnEuaWQ7CiAKIAlpZiAodHhxLT5uZWVkX3VwZGF0ZSA9PSAwKQotCQlyZXR1cm4gcmV0OworCQlyZXR1cm47CiAKIAkvKiBpZiB3ZSdyZSB0cnlpbmcgdG8gc2F2ZSBwb3dlciAqLwogCWlmICh0ZXN0X2JpdChTVEFUVVNfUE9XRVJfUE1JLCAmcHJpdi0+c3RhdHVzKSkgewpAQCAtMTAxLDcgKzEwMSw3IEBACiAJCQkJICAgICAgdHhxX2lkLCByZWcpOwogCQkJaXdsX3NldF9iaXQocHJpdiwgQ1NSX0dQX0NOVFJMLAogCQkJCSAgICBDU1JfR1BfQ05UUkxfUkVHX0ZMQUdfTUFDX0FDQ0VTU19SRVEpOwotCQkJcmV0dXJuIHJldDsKKwkJCXJldHVybjsKIAkJfQogCiAJCWl3bF93cml0ZV9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfV1JQVFIsCkBAIC0xMTQsOCArMTE0LDYgQEAKIAkJCSAgICB0eHEtPnEud3JpdGVfcHRyIHwgKHR4cV9pZCA8PCA4KSk7CiAKIAl0eHEtPm5lZWRfdXBkYXRlID0gMDsKLQotCXJldHVybiByZXQ7CiB9CiBFWFBPUlRfU1lNQk9MKGl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cik7CiAKQEAgLTE0Niw3ICsxNDQsNyBAQAogewogCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbdHhxX2lkXTsKIAlzdHJ1Y3QgaXdsX3F1ZXVlICpxID0gJnR4cS0+cTsKLQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcHJpdi0+cGNpX2RldjsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcHJpdi0+cGNpX2Rldi0+ZGV2OwogCWludCBpOwogCiAJaWYgKHEtPm5fYmQgPT0gMCkKQEAgLTE2Myw4ICsxNjEsOCBAQAogCiAJLyogRGUtYWxsb2MgY2lyY3VsYXIgYnVmZmVyIG9mIFRGRHMgKi8KIAlpZiAodHhxLT5xLm5fYmQpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBwcml2LT5od19wYXJhbXMudGZkX3NpemUgKgotCQkJCSAgICB0eHEtPnEubl9iZCwgdHhxLT50ZmRzLCB0eHEtPnEuZG1hX2FkZHIpOworCQlkbWFfZnJlZV9jb2hlcmVudChkZXYsIHByaXYtPmh3X3BhcmFtcy50ZmRfc2l6ZSAqCisJCQkJICB0eHEtPnEubl9iZCwgdHhxLT50ZmRzLCB0eHEtPnEuZG1hX2FkZHIpOwogCiAJLyogRGUtYWxsb2MgYXJyYXkgb2YgcGVyLVRGRCBkcml2ZXIgZGF0YSAqLwogCWtmcmVlKHR4cS0+dHhiKTsKQEAgLTE5Myw3ICsxOTEsNyBAQAogewogCXN0cnVjdCBpd2xfdHhfcXVldWUgKnR4cSA9ICZwcml2LT50eHFbSVdMX0NNRF9RVUVVRV9OVU1dOwogCXN0cnVjdCBpd2xfcXVldWUgKnEgPSAmdHhxLT5xOwotCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwcml2LT5wY2lfZGV2OworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwcml2LT5wY2lfZGV2LT5kZXY7CiAJaW50IGk7CiAKIAlpZiAocS0+bl9iZCA9PSAwKQpAQCAtMjA1LDggKzIwMyw4IEBACiAKIAkvKiBEZS1hbGxvYyBjaXJjdWxhciBidWZmZXIgb2YgVEZEcyAqLwogCWlmICh0eHEtPnEubl9iZCkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYsIHByaXYtPmh3X3BhcmFtcy50ZmRfc2l6ZSAqCi0JCQkJICAgIHR4cS0+cS5uX2JkLCB0eHEtPnRmZHMsIHR4cS0+cS5kbWFfYWRkcik7CisJCWRtYV9mcmVlX2NvaGVyZW50KGRldiwgcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplICogdHhxLT5xLm5fYmQsCisJCQkJICB0eHEtPnRmZHMsIHR4cS0+cS5kbWFfYWRkcik7CiAKIAkvKiBkZWFsbG9jYXRlIGFycmF5cyAqLwogCWtmcmVlKHR4cS0+Y21kKTsKQEAgLTI5Nyw3ICsyOTUsNyBAQAogc3RhdGljIGludCBpd2xfdHhfcXVldWVfYWxsb2Moc3RydWN0IGl3bF9wcml2ICpwcml2LAogCQkJICAgICAgc3RydWN0IGl3bF90eF9xdWV1ZSAqdHhxLCB1MzIgaWQpCiB7Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IHByaXYtPnBjaV9kZXY7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnByaXYtPnBjaV9kZXYtPmRldjsKIAlzaXplX3QgdGZkX3N6ID0gcHJpdi0+aHdfcGFyYW1zLnRmZF9zaXplICogVEZEX1FVRVVFX1NJWkVfTUFYOwogCiAJLyogRHJpdmVyIHByaXZhdGUgZGF0YSwgb25seSBmb3IgVHggKG5vdCBjb21tYW5kKSBxdWV1ZXMsCkBAIC0zMTYsOCArMzE0LDggQEAKIAogCS8qIENpcmN1bGFyIGJ1ZmZlciBvZiB0cmFuc21pdCBmcmFtZSBkZXNjcmlwdG9ycyAoVEZEcyksCiAJICogc2hhcmVkIHdpdGggZGV2aWNlICovCi0JdHhxLT50ZmRzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoZGV2LCB0ZmRfc3osICZ0eHEtPnEuZG1hX2FkZHIpOwotCisJdHhxLT50ZmRzID0gZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgdGZkX3N6LCAmdHhxLT5xLmRtYV9hZGRyLAorCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKIAlpZiAoIXR4cS0+dGZkcykgewogCQlJV0xfRVJSKHByaXYsICJwY2lfYWxsb2NfY29uc2lzdGVudCglemQpIGZhaWxlZFxuIiwgdGZkX3N6KTsKIAkJZ290byBlcnJvcjsKQEAgLTM2Niw3ICszNjQsNyBAQAogCWZvciAoaSA9IDA7IGkgPCBhY3R1YWxfc2xvdHM7IGkrKykgewogCQkvKiBvbmx5IGhhcHBlbnMgZm9yIGNtZCBxdWV1ZSAqLwogCQlpZiAoaSA9PSBzbG90c19udW0pCi0JCQlsZW4gKz0gSVdMX01BWF9TQ0FOX1NJWkU7CisJCQlsZW4gPSBJV0xfTUFYX0NNRF9TSVpFOwogCiAJCXR4cS0+Y21kW2ldID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOwogCQlpZiAoIXR4cS0+Y21kW2ldKQpAQCAtNzQ1LDcgKzc0Myw2IEBACiAJdTggdGlkID0gMDsKIAl1OCAqcWMgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJldDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKGl3bF9pc19yZmtpbGwocHJpdikpIHsKQEAgLTgyMCw4ICs4MTcsMTAgQEAKIAkJaGRyLT5zZXFfY3RybCB8PSBjcHVfdG9fbGUxNihzZXFfbnVtYmVyKTsKIAkJc2VxX251bWJlciArPSAweDEwOwogCQkvKiBhZ2dyZWdhdGlvbiBpcyBvbiBmb3IgdGhpcyA8c3RhLHRpZD4gKi8KLQkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSkKKwkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9BTVBEVSAmJgorCQkgICAgcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cuc3RhdGUgPT0gSVdMX0FHR19PTikgewogCQkJdHhxX2lkID0gcHJpdi0+c3RhdGlvbnNbc3RhX2lkXS50aWRbdGlkXS5hZ2cudHhxX2lkOworCQl9CiAJfQogCiAJdHhxID0gJnByaXYtPnR4cVt0eHFfaWRdOwpAQCAtOTYzLDcgKzk2Miw3IEBACiAKIAkvKiBUZWxsIGRldmljZSB0aGUgd3JpdGUgaW5kZXggKmp1c3QgcGFzdCogdGhpcyBsYXRlc3QgZmlsbGVkIFRGRCAqLwogCXEtPndyaXRlX3B0ciA9IGl3bF9xdWV1ZV9pbmNfd3JhcChxLT53cml0ZV9wdHIsIHEtPm5fYmQpOwotCXJldCA9IGl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOworCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCS8qCkBAIC05NzcsOSArOTc2LDYgQEAKIAlpZiAoc3RhX3ByaXYgJiYgc3RhX3ByaXYtPmNsaWVudCkKIAkJYXRvbWljX2luYygmc3RhX3ByaXYtPnBlbmRpbmdfZnJhbWVzKTsKIAotCWlmIChyZXQpCi0JCXJldHVybiByZXQ7Ci0KIAlpZiAoKGl3bF9xdWV1ZV9zcGFjZShxKSA8IHEtPmhpZ2hfbWFyaykgJiYgcHJpdi0+bWFjODAyMTFfcmVnaXN0ZXJlZCkgewogCQlpZiAod2FpdF93cml0ZV9wdHIpIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC0xMDE4LDcgKzEwMTQsNyBAQAogCXN0cnVjdCBpd2xfY21kX21ldGEgKm91dF9tZXRhOwogCWRtYV9hZGRyX3QgcGh5c19hZGRyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGxlbiwgcmV0OworCWludCBsZW47CiAJdTMyIGlkeDsKIAl1MTYgZml4X3NpemU7CiAKQEAgLTEwMjcsOSArMTAyMywxMiBAQAogCiAJLyogSWYgYW55IG9mIHRoZSBjb21tYW5kIHN0cnVjdHVyZXMgZW5kIHVwIGJlaW5nIGxhcmdlciB0aGFuCiAJICogdGhlIFRGRF9NQVhfUEFZTE9BRF9TSVpFLCBhbmQgaXQgc2VudCBhcyBhICdzbWFsbCcgY29tbWFuZCB0aGVuCi0JICogd2Ugd2lsbCBuZWVkIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBURkQgZW50cmllcyAqLworCSAqIHdlIHdpbGwgbmVlZCB0byBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgVEZEIGVudHJpZXMKKwkgKiBBbHNvLCBjaGVjayB0byBzZWUgaWYgY29tbWFuZCBidWZmZXIgc2hvdWxkIG5vdCBleGNlZWQgdGhlIHNpemUKKwkgKiBvZiBkZXZpY2VfY21kIGFuZCBtYXhfY21kX3NpemUuICovCiAJQlVHX09OKChmaXhfc2l6ZSA+IFRGRF9NQVhfUEFZTE9BRF9TSVpFKSAmJgogCSAgICAgICAhKGNtZC0+ZmxhZ3MgJiBDTURfU0laRV9IVUdFKSk7CisJQlVHX09OKGZpeF9zaXplID4gSVdMX01BWF9DTURfU0laRSk7CiAKIAlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSB8fCBpd2xfaXNfY3RraWxsKHByaXYpKSB7CiAJCUlXTF9XQVJOKHByaXYsICJOb3Qgc2VuZGluZyBjb21tYW5kIC0gJXMgS0lMTFxuIiwKQEAgLTEwNzMsOCArMTA3Miw4IEBACiAJaWYgKGNtZC0+ZmxhZ3MgJiBDTURfU0laRV9IVUdFKQogCQlvdXRfY21kLT5oZHIuc2VxdWVuY2UgfD0gU0VRX0hVR0VfRlJBTUU7CiAJbGVuID0gc2l6ZW9mKHN0cnVjdCBpd2xfZGV2aWNlX2NtZCk7Ci0JbGVuICs9IChpZHggPT0gVEZEX0NNRF9TTE9UUykgPyAgSVdMX01BWF9TQ0FOX1NJWkUgOiAwOwotCisJaWYgKGlkeCA9PSBURkRfQ01EX1NMT1RTKQorCQlsZW4gPSBJV0xfTUFYX0NNRF9TSVpFOwogCiAjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUcKIAlzd2l0Y2ggKG91dF9jbWQtPmhkci5jbWQpIHsKQEAgLTExMTUsMTAgKzExMTQsMTAgQEAKIAogCS8qIEluY3JlbWVudCBhbmQgdXBkYXRlIHF1ZXVlJ3Mgd3JpdGUgaW5kZXggKi8KIAlxLT53cml0ZV9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+d3JpdGVfcHRyLCBxLT5uX2JkKTsKLQlyZXQgPSBpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKKwlpd2xfdHhxX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgdHhxKTsKIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmhjbWRfbG9jaywgZmxhZ3MpOwotCXJldHVybiByZXQgPyByZXQgOiBpZHg7CisJcmV0dXJuIGlkeDsKIH0KIAogc3RhdGljIHZvaWQgaXdsX3R4X3N0YXR1cyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IpCkBAIC0xMjYwLDYgKzEyNTksOCBAQAogCiAJaWYgKCEobWV0YS0+ZmxhZ3MgJiBDTURfQVNZTkMpKSB7CiAJCWNsZWFyX2JpdChTVEFUVVNfSENNRF9BQ1RJVkUsICZwcml2LT5zdGF0dXMpOworCQlJV0xfREVCVUdfSU5GTyhwcml2LCAiQ2xlYXJpbmcgSENNRF9BQ1RJVkUgZm9yIGNvbW1hbmQgJXMgXG4iLAorCQkJICAgICAgIGdldF9jbWRfc3RyaW5nKGNtZC0+aGRyLmNtZCkpOwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnByaXYtPndhaXRfY29tbWFuZF9xdWV1ZSk7CiAJfQogfQpAQCAtMTM0Niw3ICsxMzQ3LDcgQEAKIHsKIAlpbnQgdHhfZmlmb19pZCwgdHhxX2lkLCBzdGFfaWQsIHNzbiA9IC0xOwogCXN0cnVjdCBpd2xfdGlkX2RhdGEgKnRpZF9kYXRhOwotCWludCByZXQsIHdyaXRlX3B0ciwgcmVhZF9wdHI7CisJaW50IHdyaXRlX3B0ciwgcmVhZF9wdHI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmICghcmEpIHsKQEAgLTEzOTgsMTMgKzEzOTksMTcgQEAKIAlwcml2LT5zdGF0aW9uc1tzdGFfaWRdLnRpZFt0aWRdLmFnZy5zdGF0ZSA9IElXTF9BR0dfT0ZGOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQlyZXQgPSBwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYWdnX2Rpc2FibGUocHJpdiwgdHhxX2lkLCBzc24sCisJLyoKKwkgKiB0aGUgb25seSByZWFzb24gdGhpcyBjYWxsIGNhbiBmYWlsIGlzIHF1ZXVlIG51bWJlciBvdXQgb2YgcmFuZ2UsCisJICogd2hpY2ggY2FuIGhhcHBlbiBpZiB1Q29kZSBpcyByZWxvYWRlZCBhbmQgYWxsIHRoZSBzdGF0aW9uCisJICogaW5mb3JtYXRpb24gYXJlIGxvc3QuIGlmIGl0IGlzIG91dHNpZGUgdGhlIHJhbmdlLCB0aGVyZSBpcyBubyBuZWVkCisJICogdG8gZGVhY3RpdmF0ZSB0aGUgdUNvZGUgcXVldWUsIGp1c3QgcmV0dXJuICJzdWNjZXNzIiB0byBhbGxvdworCSAqICBtYWM4MDIxMSB0byBjbGVhbiB1cCBpdCBvd24gZGF0YS4KKwkgKi8KKwlwcml2LT5jZmctPm9wcy0+bGliLT50eHFfYWdnX2Rpc2FibGUocHJpdiwgdHhxX2lkLCBzc24sCiAJCQkJCQkgICB0eF9maWZvX2lkKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCiAJaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZShwcml2LT52aWYsIHJhLCB0aWQpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdsd2lmaS9pd2wzOTQ1LWJhc2UuYwppbmRleCBmOGU0ZTRiLi41NGRhYTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd2x3aWZpL2l3bDM5NDUtYmFzZS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bHdpZmkvaXdsMzk0NS1iYXNlLmMKQEAgLTEsNiArMSw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgotICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDA5IEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0KGMpIDIwMDMgLSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIHRoZSBpcHczOTQ1IHByb2plY3QsIGFzIHdlbGwKICAqIGFzIHBvcnRpb25zIG9mIHRoZSBpZWVlODAyMTEgc3Vic3lzdGVtIGhlYWRlciBmaWxlcy4KQEAgLTUzLDkgKzUzLDEwIEBACiAjaW5jbHVkZSAiaXdsLWNvbW1hbmRzLmgiCiAjaW5jbHVkZSAiaXdsLXN0YS5oIgogI2luY2x1ZGUgIml3bC0zOTQ1LmgiCi0jaW5jbHVkZSAiaXdsLWhlbHBlcnMuaCIKICNpbmNsdWRlICJpd2wtY29yZS5oIgorI2luY2x1ZGUgIml3bC1oZWxwZXJzLmgiCiAjaW5jbHVkZSAiaXdsLWRldi5oIgorI2luY2x1ZGUgIml3bC1zcGVjdHJ1bS5oIgogCiAvKgogICogbW9kdWxlIG5hbWUsIGNvcHlyaWdodCwgdmVyc2lvbiwgZXRjLgpAQCAtNzAsMTQgKzcxLDEzIEBACiAjZGVmaW5lIFZECiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X1NQRUNUUlVNX01FQVNVUkVNRU5UCi0jZGVmaW5lIFZTICJzIgotI2Vsc2UKLSNkZWZpbmUgVlMKLSNlbmRpZgotCi0jZGVmaW5lIERSVl9WRVJTSU9OICBJV0xXSUZJX1ZFUlNJT04gVkQgVlMKLSNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbiIKKy8qCisgKiBhZGQgInMiIHRvIGluZGljYXRlIHNwZWN0cnVtIG1lYXN1cmVtZW50IGluY2x1ZGVkLgorICogd2UgYWRkIGl0IGhlcmUgdG8gYmUgY29uc2lzdGVudCB3aXRoIHByZXZpb3VzIHJlbGVhc2VzIGluIHdoaWNoCisgKiB0aGlzIHdhcyBjb25maWd1cmFibGUuCisgKi8KKyNkZWZpbmUgRFJWX1ZFUlNJT04gIElXTFdJRklfVkVSU0lPTiBWRCAicyIKKyNkZWZpbmUgRFJWX0NPUFlSSUdIVAkiQ29weXJpZ2h0KGMpIDIwMDMtMjAxMCBJbnRlbCBDb3Jwb3JhdGlvbiIKICNkZWZpbmUgRFJWX0FVVEhPUiAgICAgIjxpbHdAbGludXguaW50ZWwuY29tPiIKIAogTU9EVUxFX0RFU0NSSVBUSU9OKERSVl9ERVNDUklQVElPTik7CkBAIC0zNTIsMTAgKzM1MiwxMCBAQAogc3RhdGljIHZvaWQgaXdsMzk0NV91bnNldF9od19wYXJhbXMoc3RydWN0IGl3bF9wcml2ICpwcml2KQogewogCWlmIChwcml2LT5zaGFyZWRfdmlydCkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChwcml2LT5wY2lfZGV2LAotCQkJCSAgICBzaXplb2Yoc3RydWN0IGl3bDM5NDVfc2hhcmVkKSwKLQkJCQkgICAgcHJpdi0+c2hhcmVkX3ZpcnQsCi0JCQkJICAgIHByaXYtPnNoYXJlZF9waHlzKTsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJnByaXYtPnBjaV9kZXYtPmRldiwKKwkJCQkgIHNpemVvZihzdHJ1Y3QgaXdsMzk0NV9zaGFyZWQpLAorCQkJCSAgcHJpdi0+c2hhcmVkX3ZpcnQsCisJCQkJICBwcml2LT5zaGFyZWRfcGh5cyk7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bDM5NDVfYnVpbGRfdHhfY21kX2h3Y3J5cHRvKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKQEAgLTQ3OCw3ICs0NzgsNiBAQAogCXU4IHdhaXRfd3JpdGVfcHRyID0gMDsKIAl1OCAqcWMgPSBOVUxMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHJjOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpZiAoaXdsX2lzX3Jma2lsbChwcml2KSkgewpAQCAtNjYzLDEyICs2NjIsOSBAQAogCiAJLyogVGVsbCBkZXZpY2UgdGhlIHdyaXRlIGluZGV4ICpqdXN0IHBhc3QqIHRoaXMgbGF0ZXN0IGZpbGxlZCBURkQgKi8KIAlxLT53cml0ZV9wdHIgPSBpd2xfcXVldWVfaW5jX3dyYXAocS0+d3JpdGVfcHRyLCBxLT5uX2JkKTsKLQlyYyA9IGl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOworCWl3bF90eHFfdXBkYXRlX3dyaXRlX3B0cihwcml2LCB0eHEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAotCWlmIChyYykKLQkJcmV0dXJuIHJjOwotCiAJaWYgKChpd2xfcXVldWVfc3BhY2UocSkgPCBxLT5oaWdoX21hcmspCiAJICAgICYmIHByaXYtPm1hYzgwMjExX3JlZ2lzdGVyZWQpIHsKIAkJaWYgKHdhaXRfd3JpdGVfcHRyKSB7CkBAIC02ODksMTAgKzY4NSw2IEBACiAJcmV0dXJuIC0xOwogfQogCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKLQotI2luY2x1ZGUgIml3bC1zcGVjdHJ1bS5oIgotCiAjZGVmaW5lIEJFQUNPTl9USU1FX01BU0tfTE9XCTB4MDBGRkZGRkYKICNkZWZpbmUgQkVBQ09OX1RJTUVfTUFTS19ISUdICTB4RkYwMDAwMDAKICNkZWZpbmUgVElNRV9VTklUCQkxMDI0CkBAIC04MTksNyArODExLDYgQEAKIAogCXJldHVybiByYzsKIH0KLSNlbmRpZgogCiBzdGF0aWMgdm9pZCBpd2wzOTQ1X3J4X3JlcGx5X2FsaXZlKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgaXdsX3J4X21lbV9idWZmZXIgKnJ4YikKQEAgLTk2Miw2ICs5NTMsOCBAQAogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX0FERF9TVEFdID0gaXdsMzk0NV9yeF9yZXBseV9hZGRfc3RhOwogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX0VSUk9SXSA9IGl3bF9yeF9yZXBseV9lcnJvcjsKIAlwcml2LT5yeF9oYW5kbGVyc1tDSEFOTkVMX1NXSVRDSF9OT1RJRklDQVRJT05dID0gaXdsX3J4X2NzYTsKKwlwcml2LT5yeF9oYW5kbGVyc1tTUEVDVFJVTV9NRUFTVVJFX05PVElGSUNBVElPTl0gPQorCQkJaXdsX3J4X3NwZWN0cnVtX21lYXN1cmVfbm90aWY7CiAJcHJpdi0+cnhfaGFuZGxlcnNbUE1fU0xFRVBfTk9USUZJQ0FUSU9OXSA9IGl3bF9yeF9wbV9zbGVlcF9ub3RpZjsKIAlwcml2LT5yeF9oYW5kbGVyc1tQTV9ERUJVR19TVEFUSVNUSUNfTk9USUZJQ10gPQogCSAgICBpd2xfcnhfcG1fZGVidWdfc3RhdGlzdGljc19ub3RpZjsKQEAgLTk3NSw3ICs5NjgsNiBAQAogCXByaXYtPnJ4X2hhbmRsZXJzW1JFUExZX1NUQVRJU1RJQ1NfQ01EXSA9IGl3bDM5NDVfaHdfcnhfc3RhdGlzdGljczsKIAlwcml2LT5yeF9oYW5kbGVyc1tTVEFUSVNUSUNTX05PVElGSUNBVElPTl0gPSBpd2wzOTQ1X2h3X3J4X3N0YXRpc3RpY3M7CiAKLQlpd2xfc2V0dXBfc3BlY3RydW1faGFuZGxlcnMocHJpdik7CiAJaXdsX3NldHVwX3J4X3NjYW5faGFuZGxlcnMocHJpdik7CiAJcHJpdi0+cnhfaGFuZGxlcnNbQ0FSRF9TVEFURV9OT1RJRklDQVRJT05dID0gaXdsMzk0NV9yeF9jYXJkX3N0YXRlX25vdGlmOwogCkBAIC0xMDY3LDEzICsxMDU5LDEzIEBACiAgKiBhbHNvIHVwZGF0ZXMgdGhlIG1lbW9yeSBhZGRyZXNzIGluIHRoZSBmaXJtd2FyZSB0byByZWZlcmVuY2UgdGhlIG5ldwogICogdGFyZ2V0IGJ1ZmZlci4KICAqLwotc3RhdGljIGludCBpd2wzOTQ1X3J4X3F1ZXVlX3Jlc3RvY2soc3RydWN0IGl3bF9wcml2ICpwcml2KQorc3RhdGljIHZvaWQgaXdsMzk0NV9yeF9xdWV1ZV9yZXN0b2NrKHN0cnVjdCBpd2xfcHJpdiAqcHJpdikKIHsKIAlzdHJ1Y3QgaXdsX3J4X3F1ZXVlICpyeHEgPSAmcHJpdi0+cnhxOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVsZW1lbnQ7CiAJc3RydWN0IGl3bF9yeF9tZW1fYnVmZmVyICpyeGI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgd3JpdGUsIHJjOworCWludCB3cml0ZTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZyeHEtPmxvY2ssIGZsYWdzKTsKIAl3cml0ZSA9IHJ4cS0+d3JpdGUgJiB+MHg3OwpAQCAtMTEwMywxMiArMTA5NSw4IEBACiAJCXNwaW5fbG9ja19pcnFzYXZlKCZyeHEtPmxvY2ssIGZsYWdzKTsKIAkJcnhxLT5uZWVkX3VwZGF0ZSA9IDE7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJ4cS0+bG9jaywgZmxhZ3MpOwotCQlyYyA9IGl3bF9yeF9xdWV1ZV91cGRhdGVfd3JpdGVfcHRyKHByaXYsIHJ4cSk7Ci0JCWlmIChyYykKLQkJCXJldHVybiByYzsKKwkJaXdsX3J4X3F1ZXVlX3VwZGF0ZV93cml0ZV9wdHIocHJpdiwgcnhxKTsKIAl9Ci0KLQlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC0xMjUzLDEwICsxMjQxLDEwIEBACiAJCX0KIAl9CiAKLQlwY2lfZnJlZV9jb25zaXN0ZW50KHByaXYtPnBjaV9kZXYsIDQgKiBSWF9RVUVVRV9TSVpFLCByeHEtPmJkLAotCQkJICAgIHJ4cS0+ZG1hX2FkZHIpOwotCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGNpX2Rldiwgc2l6ZW9mKHN0cnVjdCBpd2xfcmJfc3RhdHVzKSwKLQkJCSAgICByeHEtPnJiX3N0dHMsIHJ4cS0+cmJfc3R0c19kbWEpOworCWRtYV9mcmVlX2NvaGVyZW50KCZwcml2LT5wY2lfZGV2LT5kZXYsIDQgKiBSWF9RVUVVRV9TSVpFLCByeHEtPmJkLAorCQkJICByeHEtPmRtYV9hZGRyKTsKKwlkbWFfZnJlZV9jb2hlcmVudCgmcHJpdi0+cGNpX2Rldi0+ZGV2LCBzaXplb2Yoc3RydWN0IGl3bF9yYl9zdGF0dXMpLAorCQkJICByeHEtPnJiX3N0dHMsIHJ4cS0+cmJfc3R0c19kbWEpOwogCXJ4cS0+YmQgPSBOVUxMOwogCXJ4cS0+cmJfc3R0cyAgPSBOVUxMOwogfQpAQCAtMTUxOCw4ICsxNTA2LDkgQEAKICAqIGl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nIC0gRHVtcCBlcnJvciBldmVudCBsb2cgdG8gc3lzbG9nCiAgKgogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBzdGFydF9pZHgsCi0JCQkJdTMyIG51bV9ldmVudHMsIHUzMiBtb2RlKQorc3RhdGljIGludCBpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBzdGFydF9pZHgsCisJCQkJICB1MzIgbnVtX2V2ZW50cywgdTMyIG1vZGUsCisJCQkJICBpbnQgcG9zLCBjaGFyICoqYnVmLCBzaXplX3QgYnVmc3opCiB7CiAJdTMyIGk7CiAJdTMyIGJhc2U7ICAgICAgIC8qIFNSQU0gYnl0ZSBhZGRyZXNzIG9mIGV2ZW50IGxvZyBoZWFkZXIgKi8KQEAgLTE1MjksNyArMTUxOCw3IEBACiAJdW5zaWduZWQgbG9uZyByZWdfZmxhZ3M7CiAKIAlpZiAobnVtX2V2ZW50cyA9PSAwKQotCQlyZXR1cm47CisJCXJldHVybiBwb3M7CiAKIAliYXNlID0gbGUzMl90b19jcHUocHJpdi0+Y2FyZF9hbGl2ZS5sb2dfZXZlbnRfdGFibGVfcHRyKTsKIApAQCAtMTU1NSwyNiArMTU0NCw0MyBAQAogCQl0aW1lID0gX2l3bF9yZWFkX2RpcmVjdDMyKHByaXYsIEhCVVNfVEFSR19NRU1fUkRBVCk7CiAJCWlmIChtb2RlID09IDApIHsKIAkJCS8qIGRhdGEsIGV2ICovCi0JCQlJV0xfRVJSKHByaXYsICIweCUwOHhcdCUwNHVcbiIsIHRpbWUsIGV2KTsKLQkJCXRyYWNlX2l3bHdpZmlfZGV2X3Vjb2RlX2V2ZW50KHByaXYsIDAsIHRpbWUsIGV2KTsKKwkJCWlmIChidWZzeikgeworCQkJCXBvcyArPSBzY25wcmludGYoKmJ1ZiArIHBvcywgYnVmc3ogLSBwb3MsCisJCQkJCQkiMHglMDh4OiUwNHVcbiIsCisJCQkJCQl0aW1lLCBldik7CisJCQl9IGVsc2UgeworCQkJCUlXTF9FUlIocHJpdiwgIjB4JTA4eFx0JTA0dVxuIiwgdGltZSwgZXYpOworCQkJCXRyYWNlX2l3bHdpZmlfZGV2X3Vjb2RlX2V2ZW50KHByaXYsIDAsCisJCQkJCQkJICAgICAgdGltZSwgZXYpOworCQkJfQogCQl9IGVsc2UgewogCQkJZGF0YSA9IF9pd2xfcmVhZF9kaXJlY3QzMihwcml2LCBIQlVTX1RBUkdfTUVNX1JEQVQpOwotCQkJSVdMX0VSUihwcml2LCAiJTAxMHVcdDB4JTA4eFx0JTA0dVxuIiwgdGltZSwgZGF0YSwgZXYpOwotCQkJdHJhY2VfaXdsd2lmaV9kZXZfdWNvZGVfZXZlbnQocHJpdiwgdGltZSwgZGF0YSwgZXYpOworCQkJaWYgKGJ1ZnN6KSB7CisJCQkJcG9zICs9IHNjbnByaW50ZigqYnVmICsgcG9zLCBidWZzeiAtIHBvcywKKwkJCQkJCSIlMDEwdToweCUwOHg6JTA0dVxuIiwKKwkJCQkJCSB0aW1lLCBkYXRhLCBldik7CisJCQl9IGVsc2UgeworCQkJCUlXTF9FUlIocHJpdiwgIiUwMTB1XHQweCUwOHhcdCUwNHVcbiIsCisJCQkJCXRpbWUsIGRhdGEsIGV2KTsKKwkJCQl0cmFjZV9pd2x3aWZpX2Rldl91Y29kZV9ldmVudChwcml2LCB0aW1lLAorCQkJCQkJCSAgICAgIGRhdGEsIGV2KTsKKwkJCX0KIAkJfQogCX0KIAogCS8qIEFsbG93IGRldmljZSB0byBwb3dlciBkb3duICovCiAJaXdsX3JlbGVhc2VfbmljX2FjY2Vzcyhwcml2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZWdfbG9jaywgcmVnX2ZsYWdzKTsKKwlyZXR1cm4gcG9zOwogfQogCiAvKioKICAqIGl3bDM5NDVfcHJpbnRfbGFzdF9ldmVudF9sb2dzIC0gRHVtcCB0aGUgbmV3ZXN0ICMgb2YgZXZlbnQgbG9nIHRvIHN5c2xvZwogICovCi1zdGF0aWMgdm9pZCBpd2wzOTQ1X3ByaW50X2xhc3RfZXZlbnRfbG9ncyhzdHJ1Y3QgaXdsX3ByaXYgKnByaXYsIHUzMiBjYXBhY2l0eSwKK3N0YXRpYyBpbnQgaXdsMzk0NV9wcmludF9sYXN0X2V2ZW50X2xvZ3Moc3RydWN0IGl3bF9wcml2ICpwcml2LCB1MzIgY2FwYWNpdHksCiAJCQkJICAgICAgdTMyIG51bV93cmFwcywgdTMyIG5leHRfZW50cnksCi0JCQkJICAgICAgdTMyIHNpemUsIHUzMiBtb2RlKQorCQkJCSAgICAgIHUzMiBzaXplLCB1MzIgbW9kZSwKKwkJCQkgICAgICBpbnQgcG9zLCBjaGFyICoqYnVmLCBzaXplX3QgYnVmc3opCiB7CiAJLyoKIAkgKiBkaXNwbGF5IHRoZSBuZXdlc3QgREVGQVVMVF9MT0dfRU5UUklFUyBlbnRyaWVzCkBAIC0xNTgyLDIxICsxNTg4LDI4IEBACiAJICovCiAJaWYgKG51bV93cmFwcykgewogCQlpZiAobmV4dF9lbnRyeSA8IHNpemUpIHsKLQkJCWl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHByaXYsCi0JCQkJCWNhcGFjaXR5IC0gKHNpemUgLSBuZXh0X2VudHJ5KSwKLQkJCQkJc2l6ZSAtIG5leHRfZW50cnksIG1vZGUpOwotCQkJaXdsMzk0NV9wcmludF9ldmVudF9sb2cocHJpdiwgMCwKLQkJCQkgICAgbmV4dF9lbnRyeSwgbW9kZSk7CisJCQlwb3MgPSBpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhwcml2LAorCQkJCQkgICAgIGNhcGFjaXR5IC0gKHNpemUgLSBuZXh0X2VudHJ5KSwKKwkJCQkJICAgICBzaXplIC0gbmV4dF9lbnRyeSwgbW9kZSwKKwkJCQkJICAgICBwb3MsIGJ1ZiwgYnVmc3opOworCQkJcG9zID0gaXdsMzk0NV9wcmludF9ldmVudF9sb2cocHJpdiwgMCwKKwkJCQkJCSAgICAgIG5leHRfZW50cnksIG1vZGUsCisJCQkJCQkgICAgICBwb3MsIGJ1ZiwgYnVmc3opOwogCQl9IGVsc2UKLQkJCWl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHByaXYsIG5leHRfZW50cnkgLSBzaXplLAotCQkJCSAgICBzaXplLCBtb2RlKTsKKwkJCXBvcyA9IGl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHByaXYsIG5leHRfZW50cnkgLSBzaXplLAorCQkJCQkJICAgICAgc2l6ZSwgbW9kZSwKKwkJCQkJCSAgICAgIHBvcywgYnVmLCBidWZzeik7CiAJfSBlbHNlIHsKIAkJaWYgKG5leHRfZW50cnkgPCBzaXplKQotCQkJaXdsMzk0NV9wcmludF9ldmVudF9sb2cocHJpdiwgMCwgbmV4dF9lbnRyeSwgbW9kZSk7CisJCQlwb3MgPSBpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhwcml2LCAwLAorCQkJCQkJICAgICAgbmV4dF9lbnRyeSwgbW9kZSwKKwkJCQkJCSAgICAgIHBvcywgYnVmLCBidWZzeik7CiAJCWVsc2UKLQkJCWl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHByaXYsIG5leHRfZW50cnkgLSBzaXplLAotCQkJCQkgICAgc2l6ZSwgbW9kZSk7CisJCQlwb3MgPSBpd2wzOTQ1X3ByaW50X2V2ZW50X2xvZyhwcml2LCBuZXh0X2VudHJ5IC0gc2l6ZSwKKwkJCQkJCSAgICAgIHNpemUsIG1vZGUsCisJCQkJCQkgICAgICBwb3MsIGJ1ZiwgYnVmc3opOwogCX0KKwlyZXR1cm4gcG9zOwogfQogCiAvKiBGb3Igc2FuaXR5IGNoZWNrIG9ubHkuICBBY3R1YWwgc2l6ZSBpcyBkZXRlcm1pbmVkIGJ5IHVDb2RlLCB0eXAuIDUxMiAqLwpAQCAtMTYwNCw3ICsxNjE3LDggQEAKIAogI2RlZmluZSBERUZBVUxUX0lXTDM5NDVfRFVNUF9FVkVOVF9MT0dfRU5UUklFUyAoMjApCiAKLXZvaWQgaXdsMzk0NV9kdW1wX25pY19ldmVudF9sb2coc3RydWN0IGl3bF9wcml2ICpwcml2LCBib29sIGZ1bGxfbG9nKQoraW50IGl3bDM5NDVfZHVtcF9uaWNfZXZlbnRfbG9nKHN0cnVjdCBpd2xfcHJpdiAqcHJpdiwgYm9vbCBmdWxsX2xvZywKKwkJCSAgICBjaGFyICoqYnVmLCBib29sIGRpc3BsYXkpCiB7CiAJdTMyIGJhc2U7ICAgICAgIC8qIFNSQU0gYnl0ZSBhZGRyZXNzIG9mIGV2ZW50IGxvZyBoZWFkZXIgKi8KIAl1MzIgY2FwYWNpdHk7ICAgLyogZXZlbnQgbG9nIGNhcGFjaXR5IGluICMgZW50cmllcyAqLwpAQCAtMTYxMiwxMSArMTYyNiwxMyBAQAogCXUzMiBudW1fd3JhcHM7ICAvKiAjIHRpbWVzIHVDb2RlIHdyYXBwZWQgdG8gdG9wIG9mIGxvZyAqLwogCXUzMiBuZXh0X2VudHJ5OyAvKiBpbmRleCBvZiBuZXh0IGVudHJ5IHRvIGJlIHdyaXR0ZW4gYnkgdUNvZGUgKi8KIAl1MzIgc2l6ZTsgICAgICAgLyogIyBlbnRyaWVzIHRoYXQgd2UnbGwgcHJpbnQgKi8KKwlpbnQgcG9zID0gMDsKKwlzaXplX3QgYnVmc3ogPSAwOwogCiAJYmFzZSA9IGxlMzJfdG9fY3B1KHByaXYtPmNhcmRfYWxpdmUubG9nX2V2ZW50X3RhYmxlX3B0cik7CiAJaWYgKCFpd2wzOTQ1X2h3X3ZhbGlkX3J0Y19kYXRhX2FkZHIoYmFzZSkpIHsKIAkJSVdMX0VSUihwcml2LCAiSW52YWxpZCBldmVudCBsb2cgcG9pbnRlciAweCUwOFhcbiIsIGJhc2UpOwotCQlyZXR1cm47CisJCXJldHVybiAgLUVJTlZBTDsKIAl9CiAKIAkvKiBldmVudCBsb2cgaGVhZGVyICovCkBAIC0xNjQyLDcgKzE2NTgsNyBAQAogCS8qIGJhaWwgb3V0IGlmIG5vdGhpbmcgaW4gbG9nICovCiAJaWYgKHNpemUgPT0gMCkgewogCQlJV0xfRVJSKHByaXYsICJTdGFydCBJV0wgRXZlbnQgTG9nIER1bXA6IG5vdGhpbmcgaW4gbG9nXG4iKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gcG9zOwogCX0KIAogI2lmZGVmIENPTkZJR19JV0xXSUZJX0RFQlVHCkBAIC0xNjU4LDI1ICsxNjc0LDM4IEBACiAJCSAgc2l6ZSk7CiAKICNpZmRlZiBDT05GSUdfSVdMV0lGSV9ERUJVRworCWlmIChkaXNwbGF5KSB7CisJCWlmIChmdWxsX2xvZykKKwkJCWJ1ZnN6ID0gY2FwYWNpdHkgKiA0ODsKKwkJZWxzZQorCQkJYnVmc3ogPSBzaXplICogNDg7CisJCSpidWYgPSBrbWFsbG9jKGJ1ZnN6LCBHRlBfS0VSTkVMKTsKKwkJaWYgKCEqYnVmKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQogCWlmICgoaXdsX2dldF9kZWJ1Z19sZXZlbChwcml2KSAmIElXTF9ETF9GV19FUlJPUlMpIHx8IGZ1bGxfbG9nKSB7CiAJCS8qIGlmIHVDb2RlIGhhcyB3cmFwcGVkIGJhY2sgdG8gdG9wIG9mIGxvZywKIAkJICogc3RhcnQgYXQgdGhlIG9sZGVzdCBlbnRyeSwKIAkJICogaS5lIHRoZSBuZXh0IG9uZSB0aGF0IHVDb2RlIHdvdWxkIGZpbGwuCiAJCSAqLwogCQlpZiAobnVtX3dyYXBzKQotCQkJaXdsMzk0NV9wcmludF9ldmVudF9sb2cocHJpdiwgbmV4dF9lbnRyeSwKLQkJCQkgICAgY2FwYWNpdHkgLSBuZXh0X2VudHJ5LCBtb2RlKTsKKwkJCXBvcyA9IGl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHByaXYsIG5leHRfZW50cnksCisJCQkJCQljYXBhY2l0eSAtIG5leHRfZW50cnksIG1vZGUsCisJCQkJCQlwb3MsIGJ1ZiwgYnVmc3opOwogCiAJCS8qICh0aGVuL2Vsc2UpIHN0YXJ0IGF0IHRvcCBvZiBsb2cgKi8KLQkJaXdsMzk0NV9wcmludF9ldmVudF9sb2cocHJpdiwgMCwgbmV4dF9lbnRyeSwgbW9kZSk7CisJCXBvcyA9IGl3bDM5NDVfcHJpbnRfZXZlbnRfbG9nKHByaXYsIDAsIG5leHRfZW50cnksIG1vZGUsCisJCQkJCSAgICAgIHBvcywgYnVmLCBidWZzeik7CiAJfSBlbHNlCi0JCWl3bDM5NDVfcHJpbnRfbGFzdF9ldmVudF9sb2dzKHByaXYsIGNhcGFjaXR5LCBudW1fd3JhcHMsCi0JCQkJCW5leHRfZW50cnksIHNpemUsIG1vZGUpOworCQlwb3MgPSBpd2wzOTQ1X3ByaW50X2xhc3RfZXZlbnRfbG9ncyhwcml2LCBjYXBhY2l0eSwgbnVtX3dyYXBzLAorCQkJCQkJICAgIG5leHRfZW50cnksIHNpemUsIG1vZGUsCisJCQkJCQkgICAgcG9zLCBidWYsIGJ1ZnN6KTsKICNlbHNlCi0JaXdsMzk0NV9wcmludF9sYXN0X2V2ZW50X2xvZ3MocHJpdiwgY2FwYWNpdHksIG51bV93cmFwcywKLQkJCQluZXh0X2VudHJ5LCBzaXplLCBtb2RlKTsKKwlwb3MgPSBpd2wzOTQ1X3ByaW50X2xhc3RfZXZlbnRfbG9ncyhwcml2LCBjYXBhY2l0eSwgbnVtX3dyYXBzLAorCQkJCQkgICAgbmV4dF9lbnRyeSwgc2l6ZSwgbW9kZSwKKwkJCQkJICAgIHBvcywgYnVmLCBidWZzeik7CiAjZW5kaWYKLQorCXJldHVybiBwb3M7CiB9CiAKIHN0YXRpYyB2b2lkIGl3bDM5NDVfaXJxX3Rhc2tsZXQoc3RydWN0IGl3bF9wcml2ICpwcml2KQpAQCAtMjk5NiwxOCArMzAyNSw2IEBACiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5tdXRleCk7CiB9CiAKLXN0YXRpYyB2b2lkIGl3bDM5NDVfYmdfdXAoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKQotewotCXN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihkYXRhLCBzdHJ1Y3QgaXdsX3ByaXYsIHVwKTsKLQotCWlmICh0ZXN0X2JpdChTVEFUVVNfRVhJVF9QRU5ESU5HLCAmcHJpdi0+c3RhdHVzKSkKLQkJcmV0dXJuOwotCi0JbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOwotCV9faXdsMzk0NV91cChwcml2KTsKLQltdXRleF91bmxvY2soJnByaXYtPm11dGV4KTsKLX0KLQogc3RhdGljIHZvaWQgaXdsMzk0NV9iZ19yZXN0YXJ0KHN0cnVjdCB3b3JrX3N0cnVjdCAqZGF0YSkKIHsKIAlzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoZGF0YSwgc3RydWN0IGl3bF9wcml2LCByZXN0YXJ0KTsKQEAgLTMwMjQsNyArMzA0MSwxMyBAQAogCQlpZWVlODAyMTFfcmVzdGFydF9odyhwcml2LT5odyk7CiAJfSBlbHNlIHsKIAkJaXdsMzk0NV9kb3duKHByaXYpOwotCQlxdWV1ZV93b3JrKHByaXYtPndvcmtxdWV1ZSwgJnByaXYtPnVwKTsKKworCQlpZiAodGVzdF9iaXQoU1RBVFVTX0VYSVRfUEVORElORywgJnByaXYtPnN0YXR1cykpCisJCQlyZXR1cm47CisKKwkJbXV0ZXhfbG9jaygmcHJpdi0+bXV0ZXgpOworCQlfX2l3bDM5NDVfdXAocHJpdik7CisJCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwogCX0KIH0KIApAQCAtMzUyOCw4ICszNTUxLDYgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihmaWx0ZXJfZmxhZ3MsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2ZpbHRlcl9mbGFncywKIAkJICAgc3RvcmVfZmlsdGVyX2ZsYWdzKTsKIAotI2lmZGVmIENPTkZJR19JV0wzOTQ1X1NQRUNUUlVNX01FQVNVUkVNRU5UCi0KIHN0YXRpYyBzc2l6ZV90IHNob3dfbWVhc3VyZW1lbnQoc3RydWN0IGRldmljZSAqZCwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMzU5OSw3ICszNjIwLDYgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKG1lYXN1cmVtZW50LCBTX0lSVVNSIHwgU19JV1VTUiwKIAkJICAgc2hvd19tZWFzdXJlbWVudCwgc3RvcmVfbWVhc3VyZW1lbnQpOwotI2VuZGlmIC8qIENPTkZJR19JV0wzOTQ1X1NQRUNUUlVNX01FQVNVUkVNRU5UICovCiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX3JldHJ5X3JhdGUoc3RydWN0IGRldmljZSAqZCwKIAkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTM3NDgsNyArMzc2OCw2IEBACiAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT53YWl0X2NvbW1hbmRfcXVldWUpOwogCi0JSU5JVF9XT1JLKCZwcml2LT51cCwgaXdsMzk0NV9iZ191cCk7CiAJSU5JVF9XT1JLKCZwcml2LT5yZXN0YXJ0LCBpd2wzOTQ1X2JnX3Jlc3RhcnQpOwogCUlOSVRfV09SSygmcHJpdi0+cnhfcmVwbGVuaXNoLCBpd2wzOTQ1X2JnX3J4X3JlcGxlbmlzaCk7CiAJSU5JVF9XT1JLKCZwcml2LT5iZWFjb25fdXBkYXRlLCBpd2wzOTQ1X2JnX2JlYWNvbl91cGRhdGUpOwpAQCAtMzc4Miw5ICszODAxLDcgQEAKIAkmZGV2X2F0dHJfZHVtcF9lcnJvcnMuYXR0ciwKIAkmZGV2X2F0dHJfZmxhZ3MuYXR0ciwKIAkmZGV2X2F0dHJfZmlsdGVyX2ZsYWdzLmF0dHIsCi0jaWZkZWYgQ09ORklHX0lXTDM5NDVfU1BFQ1RSVU1fTUVBU1VSRU1FTlQKIAkmZGV2X2F0dHJfbWVhc3VyZW1lbnQuYXR0ciwKLSNlbmRpZgogCSZkZXZfYXR0cl9yZXRyeV9yYXRlLmF0dHIsCiAJJmRldl9hdHRyX3N0YXRpc3RpY3MuYXR0ciwKIAkmZGV2X2F0dHJfc3RhdHVzLmF0dHIsCkBAIC0zODEwLDcgKzM4MjcsNiBAQAogCS5jb25maWcgPSBpd2xfbWFjX2NvbmZpZywKIAkuY29uZmlndXJlX2ZpbHRlciA9IGl3bF9jb25maWd1cmVfZmlsdGVyLAogCS5zZXRfa2V5ID0gaXdsMzk0NV9tYWNfc2V0X2tleSwKLQkuZ2V0X3R4X3N0YXRzID0gaXdsX21hY19nZXRfdHhfc3RhdHMsCiAJLmNvbmZfdHggPSBpd2xfbWFjX2NvbmZfdHgsCiAJLnJlc2V0X3RzZiA9IGl3bF9tYWNfcmVzZXRfdHNmLAogCS5ic3NfaW5mb19jaGFuZ2VkID0gaXdsX2Jzc19pbmZvX2NoYW5nZWQsCkBAIC0zODMxLDYgKzM4NDcsNyBAQAogCUlOSVRfTElTVF9IRUFEKCZwcml2LT5mcmVlX2ZyYW1lcyk7CiAKIAltdXRleF9pbml0KCZwcml2LT5tdXRleCk7CisJbXV0ZXhfaW5pdCgmcHJpdi0+c3luY19jbWRfbXV0ZXgpOwogCiAJLyogQ2xlYXIgdGhlIGRyaXZlcidzIChub3QgZGV2aWNlJ3MpIHN0YXRpb24gdGFibGUgKi8KIAlpd2xfY2xlYXJfc3RhdGlvbnNfdGFibGUocHJpdik7CkBAIC0zODQwLDYgKzM4NTcsNyBAQAogCXByaXYtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwogCiAJcHJpdi0+aXdfbW9kZSA9IE5MODAyMTFfSUZUWVBFX1NUQVRJT047CisJcHJpdi0+bWlzc2VkX2JlYWNvbl90aHJlc2hvbGQgPSBJV0xfTUlTU0VEX0JFQUNPTl9USFJFU0hPTERfREVGOwogCiAJaXdsX3Jlc2V0X3Fvcyhwcml2KTsKIApAQCAtNDAyMiw2ICs0MDQwLDEzIEBACiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnJlZ19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CiAKKwkvKgorCSAqIHN0b3AgYW5kIHJlc2V0IHRoZSBvbi1ib2FyZCBwcm9jZXNzb3IganVzdCBpbiBjYXNlIGl0IGlzIGluIGEKKwkgKiBzdHJhbmdlIHN0YXRlIC4uLiBsaWtlIGJlaW5nIGxlZnQgc3RyYW5kZWQgYnkgYSBwcmltYXJ5IGtlcm5lbAorCSAqIGFuZCB0aGlzIGlzIG5vdyB0aGUga2R1bXAga2VybmVsIHRyeWluZyB0byBzdGFydCB1cAorCSAqLworCWl3bF93cml0ZTMyKHByaXYsIENTUl9SRVNFVCwgQ1NSX1JFU0VUX1JFR19GTEFHX05FVk9fUkVTRVQpOworCiAJLyoqKioqKioqKioqKioqKioqKioqKioqCiAJICogNC4gUmVhZCBFRVBST00KIAkgKiAqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvZGVidWdmcy5jCmluZGV4IGJlOTkyY2EuLmMyOWM5OTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9kZWJ1Z2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2RlYnVnZnMuYwpAQCAtODksNyArODksNyBAQAogCWZvciAoaSA9IDA7IGkgPCBfX0lXTV9ETV9OUjsgaSsrKQogCQlpd20tPmRiZy5kYmdfbW9kdWxlW2ldID0gMDsKIAotCWZvcl9lYWNoX2JpdChiaXQsICZpd20tPmRiZy5kYmdfbW9kdWxlcywgX19JV01fRE1fTlIpCisJZm9yX2VhY2hfc2V0X2JpdChiaXQsICZpd20tPmRiZy5kYmdfbW9kdWxlcywgX19JV01fRE1fTlIpCiAJCWl3bS0+ZGJnLmRiZ19tb2R1bGVbYml0XSA9IGl3bS0+ZGJnLmRiZ19sZXZlbDsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2l3bS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2l3bS5oCmluZGV4IDg0MjgxMTEuLjc5ZmZhM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9pd20uaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvaXdtLmgKQEAgLTI2OCw3ICsyNjgsNyBAQAogCiAJc3RydWN0IHNrX2J1ZmZfaGVhZCByeF9saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgcnhfdGlja2V0czsKLQlzdHJ1Y3QgbGlzdF9oZWFkIHJ4X3BhY2tldHNbSVdNX1JYX0lEX0hBU0ggKyAxXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHJ4X3BhY2tldHNbSVdNX1JYX0lEX0hBU0hdOwogCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyeF93cTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgcnhfd29ya2VyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbG1hYy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL2xtYWMuaAppbmRleCBhM2E3OWI1Li5hODU1YTk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvbG1hYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2l3bWMzMjAwd2lmaS9sbWFjLmgKQEAgLTI2Miw3ICsyNjIsNyBAQAogCiAvKiBQb3dlciBNYW5hZ2VtZW50ICovCiAjZGVmaW5lIFBPV0VSX1RBQkxFX0NNRAkJCTB4NzcKLSNkZWZpbmUgU0FWRV9SRVNUT1JFX0FEUkVTU19DTUQJCTB4NzgKKyNkZWZpbmUgU0FWRV9SRVNUT1JFX0FERFJFU1NfQ01ECQkweDc4CiAjZGVmaW5lIFJFUExZX1dBVEVSTUFSS19DTUQJCTB4NzkKICNkZWZpbmUgUE1fREVCVUdfU1RBVElTVElDX05PVElGSUMJMHg3QgogI2RlZmluZSBQRF9GTFVTSF9OX05PVElGSUNBVElPTgkJMHg3QwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXdtYzMyMDB3aWZpL3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYwppbmRleCBmNzI3YjRhLi44NDU2YjRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pd21jMzIwMHdpZmkvcnguYwpAQCAtODY4LDM2ICs4NjgsMzUgQEAKIAlzdHJ1Y3QgaXdtX3VtYWNfbm90aWZfbWd0X2ZyYW1lICptZ3RfZnJhbWUgPQogCQkJKHN0cnVjdCBpd21fdW1hY19ub3RpZl9tZ3RfZnJhbWUgKilidWY7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ3QgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopbWd0X2ZyYW1lLT5mcmFtZTsKLQl1OCAqaWU7CiAKIAlJV01fSEVYRFVNUChpd20sIERCRywgTUxNRSwgIk1HVDogIiwgbWd0X2ZyYW1lLT5mcmFtZSwKIAkJICAgIGxlMTZfdG9fY3B1KG1ndF9mcmFtZS0+bGVuKSk7CiAKIAlpZiAoaWVlZTgwMjExX2lzX2Fzc29jX3JlcShtZ3QtPmZyYW1lX2NvbnRyb2wpKSB7Ci0JCWllID0gbWd0LT51LmFzc29jX3JlcS52YXJpYWJsZTs7Ci0JCWl3bS0+cmVxX2llX2xlbiA9Ci0JCQkJbGUxNl90b19jcHUobWd0X2ZyYW1lLT5sZW4pIC0gKGllIC0gKHU4ICopbWd0KTsKKwkJaXdtLT5yZXFfaWVfbGVuID0gbGUxNl90b19jcHUobWd0X2ZyYW1lLT5sZW4pCisJCQkJICAtIG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwKKwkJCQkJICAgICB1LmFzc29jX3JlcS52YXJpYWJsZSk7CiAJCWtmcmVlKGl3bS0+cmVxX2llKTsKIAkJaXdtLT5yZXFfaWUgPSBrbWVtZHVwKG1ndC0+dS5hc3NvY19yZXEudmFyaWFibGUsCiAJCQkJICAgICAgaXdtLT5yZXFfaWVfbGVuLCBHRlBfS0VSTkVMKTsKIAl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19yZWFzc29jX3JlcShtZ3QtPmZyYW1lX2NvbnRyb2wpKSB7Ci0JCWllID0gbWd0LT51LnJlYXNzb2NfcmVxLnZhcmlhYmxlOzsKLQkJaXdtLT5yZXFfaWVfbGVuID0KLQkJCQlsZTE2X3RvX2NwdShtZ3RfZnJhbWUtPmxlbikgLSAoaWUgLSAodTggKiltZ3QpOworCQlpd20tPnJlcV9pZV9sZW4gPSBsZTE2X3RvX2NwdShtZ3RfZnJhbWUtPmxlbikKKwkJCQkgIC0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LAorCQkJCQkgICAgIHUucmVhc3NvY19yZXEudmFyaWFibGUpOwogCQlrZnJlZShpd20tPnJlcV9pZSk7CiAJCWl3bS0+cmVxX2llID0ga21lbWR1cChtZ3QtPnUucmVhc3NvY19yZXEudmFyaWFibGUsCiAJCQkJICAgICAgaXdtLT5yZXFfaWVfbGVuLCBHRlBfS0VSTkVMKTsKIAl9IGVsc2UgaWYgKGllZWU4MDIxMV9pc19hc3NvY19yZXNwKG1ndC0+ZnJhbWVfY29udHJvbCkpIHsKLQkJaWUgPSBtZ3QtPnUuYXNzb2NfcmVzcC52YXJpYWJsZTs7Ci0JCWl3bS0+cmVzcF9pZV9sZW4gPQotCQkJCWxlMTZfdG9fY3B1KG1ndF9mcmFtZS0+bGVuKSAtIChpZSAtICh1OCAqKW1ndCk7CisJCWl3bS0+cmVzcF9pZV9sZW4gPSBsZTE2X3RvX2NwdShtZ3RfZnJhbWUtPmxlbikKKwkJCQkgICAtIG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwKKwkJCQkJICAgICAgdS5hc3NvY19yZXNwLnZhcmlhYmxlKTsKIAkJa2ZyZWUoaXdtLT5yZXNwX2llKTsKIAkJaXdtLT5yZXNwX2llID0ga21lbWR1cChtZ3QtPnUuYXNzb2NfcmVzcC52YXJpYWJsZSwKIAkJCQkgICAgICAgaXdtLT5yZXNwX2llX2xlbiwgR0ZQX0tFUk5FTCk7CiAJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfcmVhc3NvY19yZXNwKG1ndC0+ZnJhbWVfY29udHJvbCkpIHsKLQkJaWUgPSBtZ3QtPnUucmVhc3NvY19yZXNwLnZhcmlhYmxlOzsKLQkJaXdtLT5yZXNwX2llX2xlbiA9Ci0JCQkJbGUxNl90b19jcHUobWd0X2ZyYW1lLT5sZW4pIC0gKGllIC0gKHU4ICopbWd0KTsKKwkJaXdtLT5yZXNwX2llX2xlbiA9IGxlMTZfdG9fY3B1KG1ndF9mcmFtZS0+bGVuKQorCQkJCSAgIC0gb2Zmc2V0b2Yoc3RydWN0IGllZWU4MDIxMV9tZ210LAorCQkJCQkgICAgICB1LnJlYXNzb2NfcmVzcC52YXJpYWJsZSk7CiAJCWtmcmVlKGl3bS0+cmVzcF9pZSk7CiAJCWl3bS0+cmVzcF9pZSA9IGttZW1kdXAobWd0LT51LnJlYXNzb2NfcmVzcC52YXJpYWJsZSwKIAkJCQkgICAgICAgaXdtLT5yZXNwX2llX2xlbiwgR0ZQX0tFUk5FTCk7CkBAIC0xMTE3LDcgKzExMTYsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlmb3JfZWFjaF9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSZ0aWRfbXNrLCBJV01fVU1BQ19USURfTlIpIHsKKwlmb3JfZWFjaF9zZXRfYml0KGJpdCwgKHVuc2lnbmVkIGxvbmcgKikmdGlkX21zaywgSVdNX1VNQUNfVElEX05SKSB7CiAJCXRpZF9pbmZvID0gJnN0YV9pbmZvLT50aWRfaW5mb1tiaXRdOwogCiAJCW11dGV4X2xvY2soJnRpZF9pbmZvLT5tdXRleCk7CkBAIC0xNTM0LDYgKzE1MzMsMzMgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGl3bV9yeF9wcm9jZXNzX2Ftc2R1KHN0cnVjdCBpd21fcHJpdiAqaXdtLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBpd21fdG9fd2Rldihpd20pOworCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gaXdtX3RvX25kZXYoaXdtKTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGxpc3Q7CisJc3RydWN0IHNrX2J1ZmYgKmZyYW1lOworCisJSVdNX0hFWERVTVAoaXdtLCBEQkcsIFJYLCAiQS1NU0RVOiAiLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKworCV9fc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbGlzdCk7CisJaWVlZTgwMjExX2Ftc2R1X3RvXzgwMjNzKHNrYiwgJmxpc3QsIG5kZXYtPmRldl9hZGRyLCB3ZGV2LT5pZnR5cGUsIDApOworCisJd2hpbGUgKChmcmFtZSA9IF9fc2tiX2RlcXVldWUoJmxpc3QpKSkgeworCQluZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CisJCW5kZXYtPnN0YXRzLnJ4X2J5dGVzICs9IGZyYW1lLT5sZW47CisKKwkJZnJhbWUtPnByb3RvY29sID0gZXRoX3R5cGVfdHJhbnMoZnJhbWUsIG5kZXYpOworCQlmcmFtZS0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKKwkJbWVtc2V0KGZyYW1lLT5jYiwgMCwgc2l6ZW9mKGZyYW1lLT5jYikpOworCisJCWlmIChuZXRpZl9yeF9uaShmcmFtZSkgPT0gTkVUX1JYX0RST1ApIHsKKwkJCUlXTV9FUlIoaXdtLCAiUGFja2V0IGRyb3BwZWRcbiIpOworCQkJbmRldi0+c3RhdHMucnhfZHJvcHBlZCsrOworCQl9CisJfQorfQorCiBzdGF0aWMgdm9pZCBpd21fcnhfcHJvY2Vzc19wYWNrZXQoc3RydWN0IGl3bV9wcml2ICppd20sCiAJCQkJICBzdHJ1Y3QgaXdtX3J4X3BhY2tldCAqcGFja2V0LAogCQkJCSAgc3RydWN0IGl3bV9yeF90aWNrZXRfbm9kZSAqdGlja2V0X25vZGUpCkBAIC0xNTQ4LDI1ICsxNTc0LDM0IEBACiAJc3dpdGNoIChsZTE2X3RvX2NwdSh0aWNrZXRfbm9kZS0+dGlja2V0LT5hY3Rpb24pKSB7CiAJY2FzZSBJV01fUlhfVElDS0VUX1JFTEVBU0U6CiAJCUlXTV9EQkdfUlgoaXdtLCBEQkcsICJSRUxFQVNFIHBhY2tldFxuIik7Ci0JCWNsYXNzaWZ5ODAyMyhza2IpOworCiAJCWl3bV9yeF9hZGp1c3RfcGFja2V0KGl3bSwgcGFja2V0LCB0aWNrZXRfbm9kZSk7CisJCXNrYi0+ZGV2ID0gaXdtX3RvX25kZXYoaXdtKTsKKwkJY2xhc3NpZnk4MDIzKHNrYik7CisKKwkJaWYgKGxlMTZfdG9fY3B1KHRpY2tldF9ub2RlLT50aWNrZXQtPmZsYWdzKSAmCisJCSAgICBJV01fUlhfVElDS0VUX0FNU0RVX01TSykgeworCQkJaXdtX3J4X3Byb2Nlc3NfYW1zZHUoaXdtLCBza2IpOworCQkJYnJlYWs7CisJCX0KKwogCQlyZXQgPSBpZWVlODAyMTFfZGF0YV90b184MDIzKHNrYiwgbmRldi0+ZGV2X2FkZHIsIHdkZXYtPmlmdHlwZSk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlJV01fREJHX1JYKGl3bSwgREJHLCAiQ291bGRuJ3QgY29udmVydCA4MDIuMTEgaGVhZGVyIC0gIgogCQkJCSAgICIlZFxuIiwgcmV0KTsKKwkJCWtmcmVlX3NrYihwYWNrZXQtPnNrYik7CiAJCQlicmVhazsKIAkJfQogCiAJCUlXTV9IRVhEVU1QKGl3bSwgREJHLCBSWCwgIjgwMi4zOiAiLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKIAotCQlza2ItPmRldiA9IGl3bV90b19uZGV2KGl3bSk7CisJCW5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKKwkJbmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisKIAkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgbmRldik7CiAJCXNrYi0+aXBfc3VtbWVkID0gQ0hFQ0tTVU1fTk9ORTsKIAkJbWVtc2V0KHNrYi0+Y2IsIDAsIHNpemVvZihza2ItPmNiKSk7CiAKLQkJbmRldi0+c3RhdHMucnhfcGFja2V0cysrOwotCQluZGV2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKLQogCQlpZiAobmV0aWZfcnhfbmkoc2tiKSA9PSBORVRfUlhfRFJPUCkgewogCQkJSVdNX0VSUihpd20sICJQYWNrZXQgZHJvcHBlZFxuIik7CiAJCQluZGV2LT5zdGF0cy5yeF9kcm9wcGVkKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvS2NvbmZpZwppbmRleCAzMGFhOWQ0Li4wNDg1Yzk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL0tjb25maWcKQEAgLTM3LDMgKzM3LDkgQEAKIAlkZXBlbmRzIG9uIExJQkVSVEFTCiAJLS0taGVscC0tLQogCSAgRGVidWdnaW5nIHN1cHBvcnQuCisKK2NvbmZpZyBMSUJFUlRBU19NRVNICisJYm9vbCAiRW5hYmxlIG1lc2ggc3VwcG9ydCIKKwlkZXBlbmRzIG9uIExJQkVSVEFTCisJaGVscAorCSAgVGhpcyBlbmFibGVzIExpYmVydGFzJyBNRVNIIHN1cHBvcnQsIHVzZWQgYnkgZS5nLiB0aGUgT0xQQyBwZW9wbGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCmluZGV4IGIxODhjZDkuLjQ1ZTg3MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL01ha2VmaWxlCkBAIC01LDExICs1LDExIEBACiBsaWJlcnRhcy15ICs9IGRlYnVnZnMubwogbGliZXJ0YXMteSArPSBldGh0b29sLm8KIGxpYmVydGFzLXkgKz0gbWFpbi5vCi1saWJlcnRhcy15ICs9IG1lc2gubwogbGliZXJ0YXMteSArPSByeC5vCiBsaWJlcnRhcy15ICs9IHNjYW4ubwogbGliZXJ0YXMteSArPSB0eC5vCiBsaWJlcnRhcy15ICs9IHdleHQubworbGliZXJ0YXMtJChDT05GSUdfTElCRVJUQVNfTUVTSCkgKz0gbWVzaC5vCiAKIHVzYjh4eHgtb2JqcyArPSBpZl91c2IubwogbGliZXJ0YXNfY3Mtb2JqcyArPSBpZl9jcy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9hc3NvYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvYXNzb2MuYwppbmRleCA3NTEwNjczLi5mMDNkNWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9hc3NvYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Fzc29jLmMKQEAgLTM5MCwxMCArMzkwLDggQEAKIAljbWQuZW5hYmxlaHdhdXRvID0gY3B1X3RvX2xlMTYocHJpdi0+ZW5hYmxlaHdhdXRvKTsKIAljbWQuYml0bWFwID0gbGJzX3JhdGVfdG9fZndfYml0bWFwKHByaXYtPmN1cl9yYXRlLCBwcml2LT5lbmFibGVod2F1dG8pOwogCXJldCA9IGxic19jbWRfd2l0aF9yZXNwb25zZShwcml2LCBDTURfODAyXzExX1JBVEVfQURBUFRfUkFURVNFVCwgJmNtZCk7Ci0JaWYgKCFyZXQgJiYgY21kX2FjdGlvbiA9PSBDTURfQUNUX0dFVCkgewotCQlwcml2LT5yYXRlYml0bWFwID0gbGUxNl90b19jcHUoY21kLmJpdG1hcCk7CisJaWYgKCFyZXQgJiYgY21kX2FjdGlvbiA9PSBDTURfQUNUX0dFVCkKIAkJcHJpdi0+ZW5hYmxlaHdhdXRvID0gbGUxNl90b19jcHUoY21kLmVuYWJsZWh3YXV0byk7Ci0JfQogCiAJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfQ01ELCAicmV0ICVkIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwpAQCAtODA3LDggKzgwNSw3IEBACiAJfQogCiAJLyogVXNlIHNob3J0IHByZWFtYmxlIG9ubHkgd2hlbiBib3RoIHRoZSBCU1MgYW5kIGZpcm13YXJlIHN1cHBvcnQgaXQgKi8KLQlpZiAoKHByaXYtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpICYmCi0JICAgIChhc3NvY19yZXEtPmJzcy5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFKSkKKwlpZiAoYXNzb2NfcmVxLT5ic3MuY2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkKIAkJcHJlYW1ibGUgPSBSQURJT19QUkVBTUJMRV9TSE9SVDsKIAogCXJldCA9IGxic19zZXRfcmFkaW8ocHJpdiwgcHJlYW1ibGUsIDEpOwpAQCAtOTM5LDggKzkzNiw3IEBACiAJfQogCiAJLyogVXNlIHNob3J0IHByZWFtYmxlIG9ubHkgd2hlbiBib3RoIHRoZSBCU1MgYW5kIGZpcm13YXJlIHN1cHBvcnQgaXQgKi8KLQlpZiAoKHByaXYtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpICYmCi0JICAgIChic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpKSB7CisJaWYgKGJzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkgewogCQlsYnNfZGViX2pvaW4oIkFkaG9jSm9pbjogU2hvcnQgcHJlYW1ibGVcbiIpOwogCQlwcmVhbWJsZSA9IFJBRElPX1BSRUFNQkxFX1NIT1JUOwogCX0KQEAgLTEwNDksNyArMTA0NSw3IEBACiAJc3RydWN0IGFzc29jX3JlcXVlc3QgKmFzc29jX3JlcSkKIHsKIAlzdHJ1Y3QgY21kX2RzXzgwMl8xMV9hZF9ob2Nfc3RhcnQgY21kOwotCXU4IHByZWFtYmxlID0gUkFESU9fUFJFQU1CTEVfTE9ORzsKKwl1OCBwcmVhbWJsZSA9IFJBRElPX1BSRUFNQkxFX1NIT1JUOwogCXNpemVfdCByYXRlc2l6ZSA9IDA7CiAJdTE2IHRtcGNhcCA9IDA7CiAJaW50IHJldCA9IDA7CkBAIC0xMDU3LDExICsxMDUzLDYgQEAKIAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9BU1NPQyk7CiAKLQlpZiAocHJpdi0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRSkgewotCQlsYnNfZGViX2pvaW4oIkFESE9DX1NUQVJUOiBXaWxsIHVzZSBzaG9ydCBwcmVhbWJsZVxuIik7Ci0JCXByZWFtYmxlID0gUkFESU9fUFJFQU1CTEVfU0hPUlQ7Ci0JfQotCiAJcmV0ID0gbGJzX3NldF9yYWRpbyhwcml2LCBwcmVhbWJsZSwgMSk7CiAJaWYgKHJldCkKIAkJZ290byBvdXQ7CkBAIC0xMTY5LDExICsxMTYwLDExIEBACiBzdGF0aWMgaW5saW5lIGludCBtYXRjaF9ic3Nfbm9fc2VjdXJpdHkoc3RydWN0IGxic184MDJfMTFfc2VjdXJpdHkgKnNlY2luZm8sCiAJCQkJCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqbWF0Y2hfYnNzKQogewotCWlmICghc2VjaW5mby0+d2VwX2VuYWJsZWQgICYmICFzZWNpbmZvLT5XUEFlbmFibGVkCi0JICAgICYmICFzZWNpbmZvLT5XUEEyZW5hYmxlZAotCSAgICAmJiBtYXRjaF9ic3MtPndwYV9pZVswXSAhPSBXTEFOX0VJRF9HRU5FUklDCi0JICAgICYmIG1hdGNoX2Jzcy0+cnNuX2llWzBdICE9IFdMQU5fRUlEX1JTTgotCSAgICAmJiAhKG1hdGNoX2Jzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSkKKwlpZiAoIXNlY2luZm8tPndlcF9lbmFibGVkICYmCisJICAgICFzZWNpbmZvLT5XUEFlbmFibGVkICYmICFzZWNpbmZvLT5XUEEyZW5hYmxlZCAmJgorCSAgICBtYXRjaF9ic3MtPndwYV9pZVswXSAhPSBXTEFOX0VJRF9HRU5FUklDICYmCisJICAgIG1hdGNoX2Jzcy0+cnNuX2llWzBdICE9IFdMQU5fRUlEX1JTTiAmJgorCSAgICAhKG1hdGNoX2Jzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSkKIAkJcmV0dXJuIDE7CiAJZWxzZQogCQlyZXR1cm4gMDsKQEAgLTExODIsOSArMTE3Myw5IEBACiBzdGF0aWMgaW5saW5lIGludCBtYXRjaF9ic3Nfc3RhdGljX3dlcChzdHJ1Y3QgbGJzXzgwMl8xMV9zZWN1cml0eSAqc2VjaW5mbywKIAkJCQkgICAgICAgc3RydWN0IGJzc19kZXNjcmlwdG9yICptYXRjaF9ic3MpCiB7Ci0JaWYgKHNlY2luZm8tPndlcF9lbmFibGVkICYmICFzZWNpbmZvLT5XUEFlbmFibGVkCi0JICAgICYmICFzZWNpbmZvLT5XUEEyZW5hYmxlZAotCSAgICAmJiAobWF0Y2hfYnNzLT5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpKQorCWlmIChzZWNpbmZvLT53ZXBfZW5hYmxlZCAmJgorCSAgICAhc2VjaW5mby0+V1BBZW5hYmxlZCAmJiAhc2VjaW5mby0+V1BBMmVuYWJsZWQgJiYKKwkgICAgKG1hdGNoX2Jzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSkKIAkJcmV0dXJuIDE7CiAJZWxzZQogCQlyZXR1cm4gMDsKQEAgLTExOTMsOCArMTE4NCw4IEBACiBzdGF0aWMgaW5saW5lIGludCBtYXRjaF9ic3Nfd3BhKHN0cnVjdCBsYnNfODAyXzExX3NlY3VyaXR5ICpzZWNpbmZvLAogCQkJCXN0cnVjdCBic3NfZGVzY3JpcHRvciAqbWF0Y2hfYnNzKQogewotCWlmICghc2VjaW5mby0+d2VwX2VuYWJsZWQgJiYgc2VjaW5mby0+V1BBZW5hYmxlZAotCSAgICAmJiAobWF0Y2hfYnNzLT53cGFfaWVbMF0gPT0gV0xBTl9FSURfR0VORVJJQykKKwlpZiAoIXNlY2luZm8tPndlcF9lbmFibGVkICYmIHNlY2luZm8tPldQQWVuYWJsZWQgJiYKKwkgICAgKG1hdGNoX2Jzcy0+d3BhX2llWzBdID09IFdMQU5fRUlEX0dFTkVSSUMpCiAJICAgIC8qIHByaXZhY3kgYml0IG1heSBOT1QgYmUgc2V0IGluIHNvbWUgQVBzIGxpa2UgTGlua1N5cyBXUlQ1NEcKIAkgICAgJiYgKG1hdGNoX2Jzcy0+Y2FwYWJpbGl0eSAmIFdMQU5fQ0FQQUJJTElUWV9QUklWQUNZKSAqLwogCSAgICkKQEAgLTEyMTksMTEgKzEyMTAsMTEgQEAKIHN0YXRpYyBpbmxpbmUgaW50IG1hdGNoX2Jzc19keW5hbWljX3dlcChzdHJ1Y3QgbGJzXzgwMl8xMV9zZWN1cml0eSAqc2VjaW5mbywKIAkJCQkJc3RydWN0IGJzc19kZXNjcmlwdG9yICptYXRjaF9ic3MpCiB7Ci0JaWYgKCFzZWNpbmZvLT53ZXBfZW5hYmxlZCAmJiAhc2VjaW5mby0+V1BBZW5hYmxlZAotCSAgICAmJiAhc2VjaW5mby0+V1BBMmVuYWJsZWQKLQkgICAgJiYgKG1hdGNoX2Jzcy0+d3BhX2llWzBdICE9IFdMQU5fRUlEX0dFTkVSSUMpCi0JICAgICYmIChtYXRjaF9ic3MtPnJzbl9pZVswXSAhPSBXTEFOX0VJRF9SU04pCi0JICAgICYmIChtYXRjaF9ic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkpCisJaWYgKCFzZWNpbmZvLT53ZXBfZW5hYmxlZCAmJgorCSAgICAhc2VjaW5mby0+V1BBZW5hYmxlZCAmJiAhc2VjaW5mby0+V1BBMmVuYWJsZWQgJiYKKwkgICAgKG1hdGNoX2Jzcy0+d3BhX2llWzBdICE9IFdMQU5fRUlEX0dFTkVSSUMpICYmCisJICAgIChtYXRjaF9ic3MtPnJzbl9pZVswXSAhPSBXTEFOX0VJRF9SU04pICYmCisJICAgIChtYXRjaF9ic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkpCiAJCXJldHVybiAxOwogCWVsc2UKIAkJcmV0dXJuIDA7CkBAIC0xNTM0LDggKzE1MjUsOCBAQAogCS8qIElmIHdlJ3JlIGdpdmVuIGFuZCAnYW55JyBCU1NJRCwgdHJ5IGFzc29jaWF0aW5nIGJhc2VkIG9uIFNTSUQgKi8KIAogCWlmICh0ZXN0X2JpdChBU1NPQ19GTEFHX0JTU0lELCAmYXNzb2NfcmVxLT5mbGFncykpIHsKLQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZF9hbnksIGFzc29jX3JlcS0+YnNzaWQpCi0JCSAgICAmJiBjb21wYXJlX2V0aGVyX2FkZHIoYnNzaWRfb2ZmLCBhc3NvY19yZXEtPmJzc2lkKSkgeworCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKGJzc2lkX2FueSwgYXNzb2NfcmVxLT5ic3NpZCkgJiYKKwkJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihic3NpZF9vZmYsIGFzc29jX3JlcS0+YnNzaWQpKSB7CiAJCQlyZXQgPSBhc3NvY19oZWxwZXJfYnNzaWQocHJpdiwgYXNzb2NfcmVxKTsKIAkJCWRvbmUgPSAxOwogCQl9CkBAIC0xNjIxLDExICsxNjEyLDkgQEAKIAkJZ290byByZXN0b3JlX21lc2g7CiAJfQogCi0JaWYgKCAgIGFzc29jX3JlcS0+c2VjaW5mby53ZXBfZW5hYmxlZAotCSAgICAmJiAgIChhc3NvY19yZXEtPndlcF9rZXlzWzBdLmxlbgotCSAgICAgICB8fCBhc3NvY19yZXEtPndlcF9rZXlzWzFdLmxlbgotCSAgICAgICB8fCBhc3NvY19yZXEtPndlcF9rZXlzWzJdLmxlbgotCSAgICAgICB8fCBhc3NvY19yZXEtPndlcF9rZXlzWzNdLmxlbikpIHsKKwlpZiAoYXNzb2NfcmVxLT5zZWNpbmZvLndlcF9lbmFibGVkICYmCisJICAgIChhc3NvY19yZXEtPndlcF9rZXlzWzBdLmxlbiB8fCBhc3NvY19yZXEtPndlcF9rZXlzWzFdLmxlbiB8fAorCSAgICAgYXNzb2NfcmVxLT53ZXBfa2V5c1syXS5sZW4gfHwgYXNzb2NfcmVxLT53ZXBfa2V5c1szXS5sZW4pKSB7CiAJCS8qIE1ha2Ugc3VyZSBXRVAga2V5cyBhcmUgcmUtc2VudCB0byBmaXJtd2FyZSAqLwogCQlzZXRfYml0KEFTU09DX0ZMQUdfV0VQX0tFWVMsICZhc3NvY19yZXEtPmZsYWdzKTsKIAl9CkBAIC0xOTkyLDE0ICsxOTgxLDE0IEBACiAJCWFzc29jX3JlcS0+c2VjaW5mby5hdXRoX21vZGUpOwogCiAJLyogSWYgJ2FueScgU1NJRCB3YXMgc3BlY2lmaWVkLCBmaW5kIGFuIFNTSUQgdG8gYXNzb2NpYXRlIHdpdGggKi8KLQlpZiAodGVzdF9iaXQoQVNTT0NfRkxBR19TU0lELCAmYXNzb2NfcmVxLT5mbGFncykKLQkgICAgJiYgIWFzc29jX3JlcS0+c3NpZF9sZW4pCisJaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfU1NJRCwgJmFzc29jX3JlcS0+ZmxhZ3MpICYmCisJICAgICFhc3NvY19yZXEtPnNzaWRfbGVuKQogCQlmaW5kX2FueV9zc2lkID0gMTsKIAogCS8qIEJ1dCBkb24ndCB1c2UgJ2FueScgU1NJRCBpZiB0aGVyZSdzIGEgdmFsaWQgbG9ja2VkIEJTU0lEIHRvIHVzZSAqLwogCWlmICh0ZXN0X2JpdChBU1NPQ19GTEFHX0JTU0lELCAmYXNzb2NfcmVxLT5mbGFncykpIHsKLQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihhc3NvY19yZXEtPmJzc2lkLCBic3NpZF9hbnkpCi0JCSAgICAmJiBjb21wYXJlX2V0aGVyX2FkZHIoYXNzb2NfcmVxLT5ic3NpZCwgYnNzaWRfb2ZmKSkKKwkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihhc3NvY19yZXEtPmJzc2lkLCBic3NpZF9hbnkpICYmCisJCSAgICBjb21wYXJlX2V0aGVyX2FkZHIoYXNzb2NfcmVxLT5ic3NpZCwgYnNzaWRfb2ZmKSkKIAkJCWZpbmRfYW55X3NzaWQgPSAwOwogCX0KIApAQCAtMjA2MSwxMyArMjA1MCw2IEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoICAgdGVzdF9iaXQoQVNTT0NfRkxBR19XRVBfS0VZUywgJmFzc29jX3JlcS0+ZmxhZ3MpCi0JICAgIHx8IHRlc3RfYml0KEFTU09DX0ZMQUdfV0VQX1RYX0tFWUlEWCwgJmFzc29jX3JlcS0+ZmxhZ3MpKSB7Ci0JCXJldCA9IGFzc29jX2hlbHBlcl93ZXBfa2V5cyhwcml2LCBhc3NvY19yZXEpOwotCQlpZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JfQotCiAJaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfU0VDSU5GTywgJmFzc29jX3JlcS0+ZmxhZ3MpKSB7CiAJCXJldCA9IGFzc29jX2hlbHBlcl9zZWNpbmZvKHByaXYsIGFzc29jX3JlcSk7CiAJCWlmIChyZXQpCkBAIC0yMDgwLDE4ICsyMDYyLDMxIEBACiAJCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAodGVzdF9iaXQoQVNTT0NfRkxBR19XUEFfTUNBU1RfS0VZLCAmYXNzb2NfcmVxLT5mbGFncykKLQkgICAgfHwgdGVzdF9iaXQoQVNTT0NfRkxBR19XUEFfVUNBU1RfS0VZLCAmYXNzb2NfcmVxLT5mbGFncykpIHsKKwkvKgorCSAqIHYxMCBGVyB3YW50cyBXUEEga2V5cyB0byBiZSBzZXQvY2xlYXJlZCBiZWZvcmUgV0VQIGtleSBvcGVyYXRpb25zLAorCSAqIG90aGVyd2lzZSBpdCB3aWxsIGZhaWwgdG8gY29ycmVjdGx5IGFzc29jaWF0ZSB0byBXRVAgbmV0d29ya3MuCisJICogT3RoZXIgZmlybXdhcmUgdmVyc2lvbnMgZG9uJ3QgYXBwZWFyIHRvIGNhcmUuCisJICovCisJaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfV1BBX01DQVNUX0tFWSwgJmFzc29jX3JlcS0+ZmxhZ3MpIHx8CisJICAgIHRlc3RfYml0KEFTU09DX0ZMQUdfV1BBX1VDQVNUX0tFWSwgJmFzc29jX3JlcS0+ZmxhZ3MpKSB7CiAJCXJldCA9IGFzc29jX2hlbHBlcl93cGFfa2V5cyhwcml2LCBhc3NvY19yZXEpOwogCQlpZiAocmV0KQogCQkJZ290byBvdXQ7CiAJfQogCisJaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfV0VQX0tFWVMsICZhc3NvY19yZXEtPmZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChBU1NPQ19GTEFHX1dFUF9UWF9LRVlJRFgsICZhc3NvY19yZXEtPmZsYWdzKSkgeworCQlyZXQgPSBhc3NvY19oZWxwZXJfd2VwX2tleXMocHJpdiwgYXNzb2NfcmVxKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0OworCX0KKworCiAJLyogU1NJRC9CU1NJRCBzaG91bGQgYmUgdGhlIF9sYXN0XyBjb25maWcgb3B0aW9uIHNldCwgYmVjYXVzZSB0aGV5CiAJICogdHJpZ2dlciB0aGUgYXNzb2NpYXRpb24gYXR0ZW1wdC4KIAkgKi8KLQlpZiAodGVzdF9iaXQoQVNTT0NfRkxBR19CU1NJRCwgJmFzc29jX3JlcS0+ZmxhZ3MpCi0JICAgIHx8IHRlc3RfYml0KEFTU09DX0ZMQUdfU1NJRCwgJmFzc29jX3JlcS0+ZmxhZ3MpKSB7CisJaWYgKHRlc3RfYml0KEFTU09DX0ZMQUdfQlNTSUQsICZhc3NvY19yZXEtPmZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChBU1NPQ19GTEFHX1NTSUQsICZhc3NvY19yZXEtPmZsYWdzKSkgewogCQlpbnQgc3VjY2VzcyA9IDE7CiAKIAkJcmV0ID0gYXNzb2NfaGVscGVyX2Fzc29jaWF0ZShwcml2LCBhc3NvY19yZXEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwppbmRleCA0MjYxMWJlLi44MjM3MWVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuYwpAQCAtMTQzLDE5ICsxNDMsNiBAQAogCWxic19kZWJfY21kKCJHRVRfSFdfU1BFQzogaGFyZHdhcmUgaW50ZXJmYWNlIDB4JXgsIGhhcmR3YXJlIHNwZWMgMHglMDR4XG4iLAogCQkgICAgY21kLmh3aWZ2ZXJzaW9uLCBjbWQudmVyc2lvbik7CiAKLQkvKiBEZXRlcm1pbmUgbWVzaF9md192ZXIgZnJvbSBmd3JlbGVhc2UgYW5kIGZ3Y2FwaW5mbyAqLwotCS8qIDUuMC4xNnAwIDkuMC4wLnAwIGlzIGtub3duIHRvIE5PVCBzdXBwb3J0IGFueSBtZXNoICovCi0JLyogNS4xMTAuMjIgaGF2ZSBtZXNoIGNvbW1hbmQgd2l0aCAweGEzIGNvbW1hbmQgaWQgKi8KLQkvKiAxMC4wLjAucDAgRlcgYnJpbmdzIGluIG1lc2ggY29uZmlnIGNvbW1hbmQgd2l0aCBkaWZmZXJlbnQgaWQgKi8KLQkvKiBDaGVjayBGVyB2ZXJzaW9uIE1TQiBhbmQgaW5pdGlhbGl6ZSBtZXNoX2Z3X3ZlciAqLwotCWlmIChNUlZMX0ZXX01BSk9SX1JFVihwcml2LT5md3JlbGVhc2UpID09IE1SVkxfRldfVjUpCi0JCXByaXYtPm1lc2hfZndfdmVyID0gTUVTSF9GV19PTEQ7Ci0JZWxzZSBpZiAoKE1SVkxfRldfTUFKT1JfUkVWKHByaXYtPmZ3cmVsZWFzZSkgPj0gTVJWTF9GV19WMTApICYmCi0JCShwcml2LT5md2NhcGluZm8gJiBNRVNIX0NBUElORk9fRU5BQkxFX01BU0spKQotCQlwcml2LT5tZXNoX2Z3X3ZlciA9IE1FU0hfRldfTkVXOwotCWVsc2UKLQkJcHJpdi0+bWVzaF9md192ZXIgPSBNRVNIX05PTkU7Ci0KIAkvKiBDbGFtcCByZWdpb24gY29kZSB0byA4LWJpdCBzaW5jZSBGVyBzcGVjIGluZGljYXRlcyB0aGF0IGl0IHNob3VsZAogCSAqIG9ubHkgZXZlciBiZSA4LWJpdCwgZXZlbiB0aG91Z2ggdGhlIGZpZWxkIHNpemUgaXMgMTYtYml0LiAgU29tZSBmaXJtd2FyZQogCSAqIHJldHVybnMgbm9uLXplcm8gaGlnaCA4IGJpdHMgaGVyZS4KQEAgLTg1NSw5ICs4NDIsNiBAQAogCWlmIChwcml2LT5md3JlbGVhc2UgPCAweDA5MDAwMDAwKSB7CiAJCXN3aXRjaCAocHJlYW1ibGUpIHsKIAkJY2FzZSBSQURJT19QUkVBTUJMRV9TSE9SVDoKLQkJCWlmICghKHByaXYtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEUpKQotCQkJCWdvdG8gb3V0OwotCQkJLyogRmFsbCB0aHJvdWdoICovCiAJCWNhc2UgUkFESU9fUFJFQU1CTEVfQVVUTzoKIAkJY2FzZSBSQURJT19QUkVBTUJMRV9MT05HOgogCQkJY21kLmNvbnRyb2wgPSBjcHVfdG9fbGUxNihwcmVhbWJsZSk7CkBAIC0xMDExLDYgKzk5NSw4IEBACiAJCXJldCA9IDA7CiAJCWJyZWFrOwogCisjaWZkZWYgQ09ORklHX0xJQkVSVEFTX01FU0gKKwogCWNhc2UgQ01EX0JUX0FDQ0VTUzoKIAkJcmV0ID0gbGJzX2NtZF9idF9hY2Nlc3MoY21kcHRyLCBjbWRfYWN0aW9uLCBwZGF0YV9idWYpOwogCQlicmVhazsKQEAgLTEwMTksNiArMTAwNSw4IEBACiAJCXJldCA9IGxic19jbWRfZnd0X2FjY2VzcyhjbWRwdHIsIGNtZF9hY3Rpb24sIHBkYXRhX2J1Zik7CiAJCWJyZWFrOwogCisjZW5kaWYKKwogCWNhc2UgQ01EXzgwMl8xMV9CRUFDT05fQ1RSTDoKIAkJcmV0ID0gbGJzX2NtZF9iY25fY3RybChwcml2LCBjbWRwdHIsIGNtZF9hY3Rpb24pOwogCQlicmVhazsKQEAgLTEzMTcsNyArMTMwNSw3IEBACiAJCWlmICgocHJpdi0+cHNtb2RlICE9IExCUzgwMl8xMVBPV0VSTU9ERUNBTSkgJiYKIAkJICAgIChwcml2LT5wc3N0YXRlID09IFBTX1NUQVRFX0ZVTExfUE9XRVIpICYmCiAJCSAgICAoKHByaXYtPmNvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQpIHx8Ci0JCSAgICAocHJpdi0+bWVzaF9jb25uZWN0X3N0YXR1cyA9PSBMQlNfQ09OTkVDVEVEKSkpIHsKKwkJICAgIGxic19tZXNoX2Nvbm5lY3RlZChwcml2KSkpIHsKIAkJCWlmIChwcml2LT5zZWNpbmZvLldQQWVuYWJsZWQgfHwKIAkJCSAgICBwcml2LT5zZWNpbmZvLldQQTJlbmFibGVkKSB7CiAJCQkJLyogY2hlY2sgZm9yIHZhbGlkIFdQQSBncm91cCBrZXlzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5oCmluZGV4IDI4NjI3NDguLmNiNDEzOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZC5oCkBAIC0xMTAsMTggKzExMCw2IEBACiBpbnQgbGJzX2dldF9zbm1wX21pYihzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHUzMiBvaWQsIHUxNiAqb3V0X3ZhbCk7CiAKIAotLyogTWVzaCByZWxhdGVkICovCi0KLWludCBsYnNfbWVzaF9hY2Nlc3Moc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1aW50MTZfdCBjbWRfYWN0aW9uLAotCQkgICAgc3RydWN0IGNtZF9kc19tZXNoX2FjY2VzcyAqY21kKTsKLQotaW50IGxic19tZXNoX2NvbmZpZ19zZW5kKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKLQkJCSBzdHJ1Y3QgY21kX2RzX21lc2hfY29uZmlnICpjbWQsCi0JCQkgdWludDE2X3QgYWN0aW9uLCB1aW50MTZfdCB0eXBlKTsKLQotaW50IGxic19tZXNoX2NvbmZpZyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVpbnQxNl90IGVuYWJsZSwgdWludDE2X3QgY2hhbik7Ci0KLQogLyogQ29tbWFuZHMgb25seSB1c2VkIGluIHdleHQuYywgYXNzb2MuIGFuZCBzY2FuLmMgKi8KIAogaW50IGxic19zZXRfcG93ZXJfYWRhcHRfY2ZnKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwgaW50IGVuYWJsZSwgaW50OF90IHAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvY21kcmVzcC5jCmluZGV4IDIxZDU3NjkuLmU3NDcwNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2NtZHJlc3AuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9jbWRyZXNwLmMKQEAgLTI0MCwxMSArMjQwLDYgQEAKIAkvKiBOb3cgd2UgZ290IHJlc3BvbnNlIGZyb20gRlcsIGNhbmNlbCB0aGUgY29tbWFuZCB0aW1lciAqLwogCWRlbF90aW1lcigmcHJpdi0+Y29tbWFuZF90aW1lcik7CiAJcHJpdi0+Y21kX3RpbWVkX291dCA9IDA7Ci0JaWYgKHByaXYtPm5yX3JldHJpZXMpIHsKLQkJbGJzX3ByX2luZm8oIlJlY2VpdmVkIHJlc3VsdCAleCB0byBjb21tYW5kICV4IGFmdGVyICVkIHJldHJpZXNcbiIsCi0JCQkgICAgcmVzdWx0LCBjdXJjbWQsIHByaXYtPm5yX3JldHJpZXMpOwotCQlwcml2LT5ucl9yZXRyaWVzID0gMDsKLQl9CiAKIAkvKiBTdG9yZSB0aGUgcmVzcG9uc2UgY29kZSB0byBjdXJfY21kX3JldGNvZGUuICovCiAJcHJpdi0+Y3VyX2NtZF9yZXRjb2RlID0gcmVzdWx0OwpAQCAtNDg1LDIwICs0ODAsOCBAQAogCQlicmVhazsKIAogCWNhc2UgTUFDUkVHX0lOVF9DT0RFX01FU0hfQVVUT19TVEFSVEVEOgotCQkvKiBJZ25vcmUgc3B1cmlvdXMgYXV0b3N0YXJ0IGV2ZW50cyBpZiBhdXRvc3RhcnQgaXMgZGlzYWJsZWQgKi8KLQkJaWYgKCFwcml2LT5tZXNoX2F1dG9zdGFydF9lbmFibGVkKSB7Ci0JCQlsYnNfcHJfaW5mbygiRVZFTlQ6IE1FU0hfQVVUT19TVEFSVEVEIChpZ25vcmluZylcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJbGJzX3ByX2luZm8oIkVWRU5UOiBNRVNIX0FVVE9fU1RBUlRFRFxuIik7Ci0JCXByaXYtPm1lc2hfY29ubmVjdF9zdGF0dXMgPSBMQlNfQ09OTkVDVEVEOwotCQlpZiAocHJpdi0+bWVzaF9vcGVuKSB7Ci0JCQluZXRpZl9jYXJyaWVyX29uKHByaXYtPm1lc2hfZGV2KTsKLQkJCWlmICghcHJpdi0+dHhfcGVuZGluZ19sZW4pCi0JCQkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5tZXNoX2Rldik7Ci0JCX0KLQkJcHJpdi0+bW9kZSA9IElXX01PREVfQURIT0M7Ci0JCXNjaGVkdWxlX3dvcmsoJnByaXYtPnN5bmNfY2hhbm5lbCk7CisJCS8qIElnbm9yZSBzcHVyaW91cyBhdXRvc3RhcnQgZXZlbnRzICovCisJCWxic19wcl9pbmZvKCJFVkVOVDogTUVTSF9BVVRPX1NUQVJURUQgKGlnbm9yaW5nKVxuIik7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2RlZnMuaAppbmRleCA2YjZlYTlmLi5lYTNmMTBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZWZzLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZGVmcy5oCkBAIC0zOTcsMTMgKzM5Nyw2IEBACiAJS0VZX0lORk9fV1BBX0VOQUJMRUQgPSAweDA0CiB9OwogCi0vKiogbWVzaF9md192ZXIgKi8KLWVudW0gX21lc2hfZndfdmVyIHsKLQlNRVNIX05PTkUgPSAwLCAvKiBNRVNIIGlzIG5vdCBzdXBwb3J0ZWQgKi8KLQlNRVNIX0ZXX09MRCwgICAvKiBNRVNIIGlzIHN1cHBvcnRlZCBpbiBGVyBWNSAqLwotCU1FU0hfRldfTkVXLCAgIC8qIE1FU0ggaXMgc3VwcG9ydGVkIGluIEZXIFYxMCBhbmQgbmV3ZXIgKi8KLX07Ci0KIC8qIERlZmF1bHQgdmFsdWVzIGZvciBmd3QgY29tbWFuZHMuICovCiAjZGVmaW5lIEZXVF9ERUZBVUxUX01FVFJJQyAwCiAjZGVmaW5lIEZXVF9ERUZBVUxUX0RJUiAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2Rldi5oCmluZGV4IDA1YmIyOTguLjY5NzdlZTgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9kZXYuaApAQCAtMzksMTUgKzM5LDE0IEBACiAKIAkvKiBNZXNoICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKm1lc2hfZGV2OyAvKiBWaXJ0dWFsIGRldmljZSAqLworI2lmZGVmIENPTkZJR19MSUJFUlRBU19NRVNICiAJdTMyIG1lc2hfY29ubmVjdF9zdGF0dXM7CiAJc3RydWN0IGxic19tZXNoX3N0YXRzIG1zdGF0czsKIAlpbnQgbWVzaF9vcGVuOwotCWludCBtZXNoX2Z3X3ZlcjsKLQlpbnQgbWVzaF9hdXRvc3RhcnRfZW5hYmxlZDsKIAl1aW50MTZfdCBtZXNoX3RsdjsKIAl1OCBtZXNoX3NzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTiArIDFdOwogCXU4IG1lc2hfc3NpZF9sZW47Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHN5bmNfY2hhbm5lbDsKKyNlbmRpZgogCiAJLyogTW9uaXRvciBtb2RlICovCiAJc3RydWN0IG5ldF9kZXZpY2UgKnJ0YXBfbmV0X2RldjsKQEAgLTExMCw3ICsxMDksNiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgY21kcGVuZGluZ3E7IC8qIHBlbmRpbmcgY29tbWFuZCBidWZmZXJzICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgY21kX3BlbmRpbmc7CiAJc3RydWN0IHRpbWVyX2xpc3QgY29tbWFuZF90aW1lcjsKLQlpbnQgbnJfcmV0cmllczsKIAlpbnQgY21kX3RpbWVkX291dDsKIAogCS8qIENvbW1hbmQgcmVzcG9uc2VzIHNlbnQgZnJvbSB0aGUgaGFyZHdhcmUgdG8gdGhlIGRyaXZlciAqLwpAQCAtMTc2LDkgKzE3NCw3IEBACiAJc3RydWN0IGJzc19kZXNjcmlwdG9yICpuZXR3b3JrczsKIAlzdHJ1Y3QgYXNzb2NfcmVxdWVzdCAqIHBlbmRpbmdfYXNzb2NfcmVxOwogCXN0cnVjdCBhc3NvY19yZXF1ZXN0ICogaW5fcHJvZ3Jlc3NfYXNzb2NfcmVxOwotCXUxNiBjYXBhYmlsaXR5OwogCXVpbnQxNl90IGVuYWJsZWh3YXV0bzsKLQl1aW50MTZfdCByYXRlYml0bWFwOwogCiAJLyogQURIT0MgKi8KIAl1MTYgYmVhY29uX3BlcmlvZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL2V0aHRvb2wuYwppbmRleCA2M2QwMjAzLi4zODA0YTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9ldGh0b29sLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvZXRodG9vbC5jCkBAIC0xMTQsOSArMTE0LDExIEBACiAJLmdldF9kcnZpbmZvID0gbGJzX2V0aHRvb2xfZ2V0X2RydmluZm8sCiAJLmdldF9lZXByb20gPSAgbGJzX2V0aHRvb2xfZ2V0X2VlcHJvbSwKIAkuZ2V0X2VlcHJvbV9sZW4gPSBsYnNfZXRodG9vbF9nZXRfZWVwcm9tX2xlbiwKKyNpZmRlZiBDT05GSUdfTElCRVJUQVNfTUVTSAogCS5nZXRfc3NldF9jb3VudCA9IGxic19tZXNoX2V0aHRvb2xfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzID0gbGJzX21lc2hfZXRodG9vbF9nZXRfc3RhdHMsCiAJLmdldF9zdHJpbmdzID0gbGJzX21lc2hfZXRodG9vbF9nZXRfc3RyaW5ncywKKyNlbmRpZgogCS5nZXRfd29sID0gbGJzX2V0aHRvb2xfZ2V0X3dvbCwKIAkuc2V0X3dvbCA9IGxic19ldGh0b29sX3NldF93b2wsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvaWZfc3BpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuYwppbmRleCBiZjRiZmJhLi4zZWEwM2YyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9pZl9zcGkuYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpL2xpYmVydGFzX3NwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWFpbi5jCmluZGV4IGMyOTc1YzguLjI4YTFjOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tYWluLmMKQEAgLTEyMyw3ICsxMjMsNyBAQAogCQlpZiAocHJpdi0+bW9uaXRvcm1vZGUgPT0gbW9uaXRvcl9tb2RlKQogCQkJcmV0dXJuIHN0cmxlbihidWYpOwogCQlpZiAoIXByaXYtPm1vbml0b3Jtb2RlKSB7Ci0JCQlpZiAocHJpdi0+aW5mcmFfb3BlbiB8fCBwcml2LT5tZXNoX29wZW4pCisJCQlpZiAocHJpdi0+aW5mcmFfb3BlbiB8fCBsYnNfbWVzaF9vcGVuKHByaXYpKQogCQkJCXJldHVybiAtRUJVU1k7CiAJCQlpZiAocHJpdi0+bW9kZSA9PSBJV19NT0RFX0lORlJBKQogCQkJCWxic19jbWRfODAyMTFfZGVhdXRoZW50aWNhdGUocHJpdiwKQEAgLTMxOSwxNSArMzE5LDE4IEBACiB7CiAJaW50IGkgPSBucl9hZGRyczsKIAlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3Q7CisJaW50IGNudDsKIAogCWlmICgoZGV2LT5mbGFncyAmIChJRkZfVVB8SUZGX01VTFRJQ0FTVCkpICE9IChJRkZfVVB8SUZGX01VTFRJQ0FTVCkpCiAJCXJldHVybiBucl9hZGRyczsKIAogCW5ldGlmX2FkZHJfbG9ja19iaChkZXYpOwotCWZvciAobWNfbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNfbGlzdDsgbWNfbGlzdCA9IG1jX2xpc3QtPm5leHQpIHsKKwljbnQgPSBuZXRkZXZfbWNfY291bnQoZGV2KTsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY19saXN0LCBkZXYpIHsKIAkJaWYgKG1hY19pbl9saXN0KGNtZC0+bWFjbGlzdCwgbnJfYWRkcnMsIG1jX2xpc3QtPmRtaV9hZGRyKSkgewogCQkJbGJzX2RlYl9uZXQoIm1jYXN0IGFkZHJlc3MgJXM6JXBNIHNraXBwZWRcbiIsIGRldi0+bmFtZSwKIAkJCQkgICAgbWNfbGlzdC0+ZG1pX2FkZHIpOworCQkJY250LS07CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0zMzcsOSArMzQwLDEwIEBACiAJCWxic19kZWJfbmV0KCJtY2FzdCBhZGRyZXNzICVzOiVwTSBhZGRlZCB0byBmaWx0ZXJcbiIsIGRldi0+bmFtZSwKIAkJCSAgICBtY19saXN0LT5kbWlfYWRkcik7CiAJCWkrKzsKKwkJY250LS07CiAJfQogCW5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7Ci0JaWYgKG1jX2xpc3QpCisJaWYgKGNudCkKIAkJcmV0dXJuIC1FT1ZFUkZMT1c7CiAKIAlyZXR1cm4gaTsKQEAgLTUzNiwzMSArNTQwLDE0IEBACiAJCWlmIChwcml2LT5jbWRfdGltZWRfb3V0ICYmIHByaXYtPmN1cl9jbWQpIHsKIAkJCXN0cnVjdCBjbWRfY3RybF9ub2RlICpjbWRub2RlID0gcHJpdi0+Y3VyX2NtZDsKIAotCQkJaWYgKCsrcHJpdi0+bnJfcmV0cmllcyA+IDMpIHsKLQkJCQlsYnNfcHJfaW5mbygiRXhjZXNzaXZlIHRpbWVvdXRzIHN1Ym1pdHRpbmcgIgotCQkJCQkiY29tbWFuZCAweCUwNHhcbiIsCi0JCQkJCWxlMTZfdG9fY3B1KGNtZG5vZGUtPmNtZGJ1Zi0+Y29tbWFuZCkpOwotCQkJCWxic19jb21wbGV0ZV9jb21tYW5kKHByaXYsIGNtZG5vZGUsIC1FVElNRURPVVQpOwotCQkJCXByaXYtPm5yX3JldHJpZXMgPSAwOwotCQkJCWlmIChwcml2LT5yZXNldF9jYXJkKQotCQkJCQlwcml2LT5yZXNldF9jYXJkKHByaXYpOwotCQkJfSBlbHNlIHsKLQkJCQlwcml2LT5jdXJfY21kID0gTlVMTDsKLQkJCQlwcml2LT5kbmxkX3NlbnQgPSBETkxEX1JFU19SRUNFSVZFRDsKLQkJCQlsYnNfcHJfaW5mbygicmVxdWV1ZWluZyBjb21tYW5kIDB4JTA0eCBkdWUgIgotCQkJCQkidG8gdGltZW91dCAoIyVkKVxuIiwKLQkJCQkJbGUxNl90b19jcHUoY21kbm9kZS0+Y21kYnVmLT5jb21tYW5kKSwKLQkJCQkJcHJpdi0+bnJfcmV0cmllcyk7Ci0KLQkJCQkvKiBTdGljayBpdCBiYWNrIGF0IHRoZSBfdG9wXyBvZiB0aGUgcGVuZGluZyBxdWV1ZQotCQkJCSAgIGZvciBpbW1lZGlhdGUgcmVzdWJtaXNzaW9uICovCi0JCQkJbGlzdF9hZGQoJmNtZG5vZGUtPmxpc3QsICZwcml2LT5jbWRwZW5kaW5ncSk7Ci0JCQl9CisJCQlsYnNfcHJfaW5mbygiVGltZW91dCBzdWJtaXR0aW5nIGNvbW1hbmQgMHglMDR4XG4iLAorCQkJCWxlMTZfdG9fY3B1KGNtZG5vZGUtPmNtZGJ1Zi0+Y29tbWFuZCkpOworCQkJbGJzX2NvbXBsZXRlX2NvbW1hbmQocHJpdiwgY21kbm9kZSwgLUVUSU1FRE9VVCk7CisJCQlpZiAocHJpdi0+cmVzZXRfY2FyZCkKKwkJCQlwcml2LT5yZXNldF9jYXJkKHByaXYpOwogCQl9CiAJCXByaXYtPmNtZF90aW1lZF9vdXQgPSAwOwogCi0KLQogCQlpZiAoIXByaXYtPmZ3X3JlYWR5KQogCQkJY29udGludWU7CiAKQEAgLTYyMiw3ICs2MDksNyBAQAogCQkJCWlmIChwcml2LT5jb25uZWN0X3N0YXR1cyA9PSBMQlNfQ09OTkVDVEVEKQogCQkJCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPmRldik7CiAJCQkJaWYgKHByaXYtPm1lc2hfZGV2ICYmCi0JCQkJICAgIHByaXYtPm1lc2hfY29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCkKKwkJCQkgICAgbGJzX21lc2hfY29ubmVjdGVkKHByaXYpKQogCQkJCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPm1lc2hfZGV2KTsKIAkJCX0KIAkJfQpAQCAtNzMyLDcgKzcxOSw3IEBACiAgKiAgVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSB0aW1lb3V0IG9mIGNvbW1hbmQgc2VuZGluZy4KICAqICBJdCB3aWxsIHJlLXNlbmQgdGhlIHNhbWUgY29tbWFuZCBhZ2Fpbi4KICAqLwotc3RhdGljIHZvaWQgY29tbWFuZF90aW1lcl9mbih1bnNpZ25lZCBsb25nIGRhdGEpCitzdGF0aWMgdm9pZCBsYnNfY21kX3RpbWVvdXRfaGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJc3RydWN0IGxic19wcml2YXRlICpwcml2ID0gKHN0cnVjdCBsYnNfcHJpdmF0ZSAqKWRhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTgwOSwxOCArNzk2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbGJzX3N5bmNfY2hhbm5lbF93b3JrZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbGJzX3ByaXZhdGUsCi0JCXN5bmNfY2hhbm5lbCk7Ci0KLQlsYnNfZGViX2VudGVyKExCU19ERUJfTUFJTik7Ci0JaWYgKGxic191cGRhdGVfY2hhbm5lbChwcml2KSkKLQkJbGJzX3ByX2luZm8oIkNoYW5uZWwgc3luY2hyb25pemF0aW9uIGZhaWxlZC4iKTsKLQlsYnNfZGViX2xlYXZlKExCU19ERUJfTUFJTik7Ci19Ci0KLQogc3RhdGljIGludCBsYnNfaW5pdF9hZGFwdGVyKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdikKIHsKIAlzaXplX3QgYnVmc2l6ZTsKQEAgLTg0OCwxNCArODIzLDEyIEBACiAJbWVtc2V0KHByaXYtPmN1cnJlbnRfYWRkciwgMHhmZiwgRVRIX0FMRU4pOwogCiAJcHJpdi0+Y29ubmVjdF9zdGF0dXMgPSBMQlNfRElTQ09OTkVDVEVEOwotCXByaXYtPm1lc2hfY29ubmVjdF9zdGF0dXMgPSBMQlNfRElTQ09OTkVDVEVEOwogCXByaXYtPnNlY2luZm8uYXV0aF9tb2RlID0gSVdfQVVUSF9BTEdfT1BFTl9TWVNURU07CiAJcHJpdi0+bW9kZSA9IElXX01PREVfSU5GUkE7CiAJcHJpdi0+Y2hhbm5lbCA9IERFRkFVTFRfQURfSE9DX0NIQU5ORUw7CiAJcHJpdi0+bWFjX2NvbnRyb2wgPSBDTURfQUNUX01BQ19SWF9PTiB8IENNRF9BQ1RfTUFDX1RYX09OOwogCXByaXYtPnJhZGlvX29uID0gMTsKIAlwcml2LT5lbmFibGVod2F1dG8gPSAxOwotCXByaXYtPmNhcGFiaWxpdHkgPSBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfUFJFQU1CTEU7CiAJcHJpdi0+cHNtb2RlID0gTEJTODAyXzExUE9XRVJNT0RFQ0FNOwogCXByaXYtPnBzc3RhdGUgPSBQU19TVEFURV9GVUxMX1BPV0VSOwogCXByaXYtPmlzX2RlZXBfc2xlZXAgPSAwOwpAQCAtODY1LDcgKzgzOCw3IEBACiAKIAltdXRleF9pbml0KCZwcml2LT5sb2NrKTsKIAotCXNldHVwX3RpbWVyKCZwcml2LT5jb21tYW5kX3RpbWVyLCBjb21tYW5kX3RpbWVyX2ZuLAorCXNldHVwX3RpbWVyKCZwcml2LT5jb21tYW5kX3RpbWVyLCBsYnNfY21kX3RpbWVvdXRfaGFuZGxlciwKIAkJKHVuc2lnbmVkIGxvbmcpcHJpdik7CiAJc2V0dXBfdGltZXIoJnByaXYtPmF1dG9fZGVlcHNsZWVwX3RpbWVyLCBhdXRvX2RlZXBzbGVlcF90aW1lcl9mbiwKIAkJCSh1bnNpZ25lZCBsb25nKXByaXYpOwpAQCAtOTk4LDExICs5NzEsNiBAQAogCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5hc3NvY193b3JrLCBsYnNfYXNzb2NpYXRpb25fd29ya2VyKTsKIAlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+c2Nhbl93b3JrLCBsYnNfc2Nhbl93b3JrZXIpOwogCUlOSVRfV09SSygmcHJpdi0+bWNhc3Rfd29yaywgbGJzX3NldF9tY2FzdF93b3JrZXIpOwotCUlOSVRfV09SSygmcHJpdi0+c3luY19jaGFubmVsLCBsYnNfc3luY19jaGFubmVsX3dvcmtlcik7Ci0KLQlwcml2LT5tZXNoX29wZW4gPSAwOwotCXNwcmludGYocHJpdi0+bWVzaF9zc2lkLCAibWVzaCIpOwotCXByaXYtPm1lc2hfc3NpZF9sZW4gPSA0OwogCiAJcHJpdi0+d29sX2NyaXRlcmlhID0gMHhmZmZmZmZmZjsKIAlwcml2LT53b2xfZ3BpbyA9IDB4ZmY7CkBAIC0xMDc2LDYgKzEwNDQsMTcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGxic19yZW1vdmVfY2FyZCk7CiAKIAorc3RhdGljIGludCBsYnNfcnRhcF9zdXBwb3J0ZWQoc3RydWN0IGxic19wcml2YXRlICpwcml2KQoreworCWlmIChNUlZMX0ZXX01BSk9SX1JFVihwcml2LT5md3JlbGVhc2UpID09IE1SVkxfRldfVjUpCisJCXJldHVybiAxOworCisJLyogbmV3ZXIgZmlybXdhcmUgdXNlIGEgY2FwYWJpbGl0eSBtYXNrICovCisJcmV0dXJuICgoTVJWTF9GV19NQUpPUl9SRVYocHJpdi0+ZndyZWxlYXNlKSA+PSBNUlZMX0ZXX1YxMCkgJiYKKwkJKHByaXYtPmZ3Y2FwaW5mbyAmIE1FU0hfQ0FQSU5GT19FTkFCTEVfTUFTSykpOworfQorCisKIGludCBsYnNfc3RhcnRfY2FyZChzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHByaXYtPmRldjsKQEAgLTEwOTUsMTIgKzEwNzQsMTQgQEAKIAogCWxic191cGRhdGVfY2hhbm5lbChwcml2KTsKIAorCWxic19pbml0X21lc2gocHJpdik7CisKIAkvKgogCSAqIFdoaWxlIHJ0YXAgaXNuJ3QgcmVsYXRlZCB0byBtZXNoLCBvbmx5IG1lc2gtZW5hYmxlZAogCSAqIGZpcm13YXJlIGltcGxlbWVudHMgdGhlIHJ0YXAgZnVuY3Rpb25hbGl0eSB2aWEKIAkgKiBDTURfODAyXzExX01PTklUT1JfTU9ERS4KIAkgKi8KLQlpZiAobGJzX2luaXRfbWVzaChwcml2KSkgeworCWlmIChsYnNfcnRhcF9zdXBwb3J0ZWQocHJpdikpIHsKIAkJaWYgKGRldmljZV9jcmVhdGVfZmlsZSgmZGV2LT5kZXYsICZkZXZfYXR0cl9sYnNfcnRhcCkpCiAJCQlsYnNfcHJfZXJyKCJjYW5ub3QgcmVnaXN0ZXIgbGJzX3J0YXAgYXR0cmlidXRlXG4iKTsKIAl9CkBAIC0xMTM0LDcgKzExMTUsOSBAQAogCW5ldGlmX2NhcnJpZXJfb2ZmKGRldik7CiAKIAlsYnNfZGVidWdmc19yZW1vdmVfb25lKHByaXYpOwotCWlmIChsYnNfZGVpbml0X21lc2gocHJpdikpCisJbGJzX2RlaW5pdF9tZXNoKHByaXYpOworCisJaWYgKGxic19ydGFwX3N1cHBvcnRlZChwcml2KSkKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2xic19ydGFwKTsKIAogCS8qIERlbGV0ZSB0aGUgdGltZW91dCBvZiB0aGUgY3VycmVudGx5IHByb2Nlc3NpbmcgY29tbWFuZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5jCmluZGV4IDkyYjdhMzUuLmUzODVhZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21lc2guYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tZXNoLmMKQEAgLTEsNCArMSwzIEBACi0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CkBAIC0xOTcsNyArMTk2LDE0IEBACiAKIAlsYnNfZGViX2VudGVyKExCU19ERUJfTUVTSCk7CiAKLQlpZiAocHJpdi0+bWVzaF9md192ZXIgPT0gTUVTSF9GV19PTEQpIHsKKwlwcml2LT5tZXNoX2Nvbm5lY3Rfc3RhdHVzID0gTEJTX0RJU0NPTk5FQ1RFRDsKKworCS8qIERldGVybWluZSBtZXNoX2Z3X3ZlciBmcm9tIGZ3cmVsZWFzZSBhbmQgZndjYXBpbmZvICovCisJLyogNS4wLjE2cDAgOS4wLjAucDAgaXMga25vd24gdG8gTk9UIHN1cHBvcnQgYW55IG1lc2ggKi8KKwkvKiA1LjExMC4yMiBoYXZlIG1lc2ggY29tbWFuZCB3aXRoIDB4YTMgY29tbWFuZCBpZCAqLworCS8qIDEwLjAuMC5wMCBGVyBicmluZ3MgaW4gbWVzaCBjb25maWcgY29tbWFuZCB3aXRoIGRpZmZlcmVudCBpZCAqLworCS8qIENoZWNrIEZXIHZlcnNpb24gTVNCIGFuZCBpbml0aWFsaXplIG1lc2hfZndfdmVyICovCisJaWYgKE1SVkxfRldfTUFKT1JfUkVWKHByaXYtPmZ3cmVsZWFzZSkgPT0gTVJWTF9GV19WNSkgewogCQkvKiBFbmFibGUgbWVzaCwgaWYgc3VwcG9ydGVkLCBhbmQgd29yayBvdXQgd2hpY2ggVExWIGl0IHVzZXMuCiAJCSAgIDB4MTAwICsgMjkxIGlzIGFuIHVub2ZmaWNpYWwgdmFsdWUgdXNlZCBpbiA1LjExMC4yMC5wWFgKIAkJICAgMHgxMDAgKyAzNyBpcyB0aGUgb2ZmaWNpYWwgdmFsdWUgdXNlZCBpbiA1LjExMC4yMS5wWFgKQEAgLTIxOSw3ICsyMjUsOSBAQAogCQkJCQkgICAgcHJpdi0+Y2hhbm5lbCkpCiAJCQkJcHJpdi0+bWVzaF90bHYgPSAwOwogCQl9Ci0JfSBlbHNlIGlmIChwcml2LT5tZXNoX2Z3X3ZlciA9PSBNRVNIX0ZXX05FVykgeworCX0gZWxzZQorCWlmICgoTVJWTF9GV19NQUpPUl9SRVYocHJpdi0+ZndyZWxlYXNlKSA+PSBNUlZMX0ZXX1YxMCkgJiYKKwkJKHByaXYtPmZ3Y2FwaW5mbyAmIE1FU0hfQ0FQSU5GT19FTkFCTEVfTUFTSykpIHsKIAkJLyogMTAuMC4wLnBYWCBuZXcgZmlybXdhcmVzIHNob3VsZCBzdWNjZWVkIHdpdGggVExWCiAJCSAqIDB4MTAwKzM3OyBEbyBub3QgaW52b2tlIGNvbW1hbmQgd2l0aCBvbGQgVExWLgogCQkgKi8KQEAgLTIyOCw3ICsyMzYsMTIgQEAKIAkJCQkgICAgcHJpdi0+Y2hhbm5lbCkpCiAJCQlwcml2LT5tZXNoX3RsdiA9IDA7CiAJfQorCisKIAlpZiAocHJpdi0+bWVzaF90bHYpIHsKKwkJc3ByaW50Zihwcml2LT5tZXNoX3NzaWQsICJtZXNoIik7CisJCXByaXYtPm1lc2hfc3NpZF9sZW4gPSA0OworCiAJCWxic19hZGRfbWVzaChwcml2KTsKIAogCQlpZiAoZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2xic19tZXNoKSkKQEAgLTQxNiwxMCArNDI5LDEwIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHJ4cGQgKnJ4cGQpCiB7CiAJaWYgKHByaXYtPm1lc2hfZGV2KSB7Ci0JCWlmIChwcml2LT5tZXNoX2Z3X3ZlciA9PSBNRVNIX0ZXX09MRCkgeworCQlpZiAocHJpdi0+bWVzaF90bHYgPT0gVExWX1RZUEVfT0xEX01FU0hfSUQpIHsKIAkJCWlmIChyeHBkLT5yeF9jb250cm9sICYgUnhQRF9NRVNIX0ZSQU1FKQogCQkJCWRldiA9IHByaXYtPm1lc2hfZGV2OwotCQl9IGVsc2UgaWYgKHByaXYtPm1lc2hfZndfdmVyID09IE1FU0hfRldfTkVXKSB7CisJCX0gZWxzZSBpZiAocHJpdi0+bWVzaF90bHYgPT0gVExWX1RZUEVfTUVTSF9JRCkgewogCQkJaWYgKHJ4cGQtPnUuYnNzLmJzc19udW0gPT0gTUVTSF9JRkFDRV9JRCkKIAkJCQlkZXYgPSBwcml2LT5tZXNoX2RldjsKIAkJfQpAQCAtNDMyLDkgKzQ0NSw5IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHR4cGQgKnR4cGQpCiB7CiAJaWYgKGRldiA9PSBwcml2LT5tZXNoX2RldikgewotCQlpZiAocHJpdi0+bWVzaF9md192ZXIgPT0gTUVTSF9GV19PTEQpCisJCWlmIChwcml2LT5tZXNoX3RsdiA9PSBUTFZfVFlQRV9PTERfTUVTSF9JRCkKIAkJCXR4cGQtPnR4X2NvbnRyb2wgfD0gY3B1X3RvX2xlMzIoVHhQRF9NRVNIX0ZSQU1FKTsKLQkJZWxzZSBpZiAocHJpdi0+bWVzaF9md192ZXIgPT0gTUVTSF9GV19ORVcpCisJCWVsc2UgaWYgKHByaXYtPm1lc2hfdGx2ID09IFRMVl9UWVBFX01FU0hfSUQpCiAJCQl0eHBkLT51LmJzcy5ic3NfbnVtID0gTUVTSF9JRkFDRV9JRDsKIAl9CiB9CkBAIC01MzgsNyArNTUxLDcgQEAKIAkgKiBDb21tYW5kIGlkIGlzIDB4YWMgZm9yIHYxMCBGVyBhbG9uZyB3aXRoIG1lc2ggaW50ZXJmYWNlCiAJICogaWQgaW4gYml0cyAxNC0xMy0xMi4KIAkgKi8KLQlpZiAocHJpdi0+bWVzaF9md192ZXIgPT0gTUVTSF9GV19ORVcpCisJaWYgKHByaXYtPm1lc2hfdGx2ID09IFRMVl9UWVBFX01FU0hfSUQpCiAJCWNvbW1hbmQgPSBDTURfTUVTSF9DT05GSUcgfAogCQkJICAoTUVTSF9JRkFDRV9JRCA8PCBNRVNIX0lGQUNFX0JJVF9PRkZTRVQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tZXNoLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9tZXNoLmgKaW5kZXggZmVhOWI1ZC4uZTI1NzMzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvbWVzaC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL21lc2guaApAQCAtOSw2ICs5LDggQEAKICNpbmNsdWRlIDxuZXQvbGliODAyMTEuaD4KIAogCisjaWZkZWYgQ09ORklHX0xJQkVSVEFTX01FU0gKKwogLyogTWVzaCBzdGF0aXN0aWNzICovCiBzdHJ1Y3QgbGJzX21lc2hfc3RhdHMgewogCXUzMglmd2RfYmNhc3RfY250OwkJLyogRndkOiBCcm9hZGNhc3QgY291bnRlciAqLwpAQCAtNDYsMTEgKzQ4LDIwIEBACiAvKiBDb21tYW5kIGhhbmRsaW5nICovCiAKIHN0cnVjdCBjbWRfZHNfY29tbWFuZDsKK3N0cnVjdCBjbWRfZHNfbWVzaF9hY2Nlc3M7CitzdHJ1Y3QgY21kX2RzX21lc2hfY29uZmlnOwogCiBpbnQgbGJzX2NtZF9idF9hY2Nlc3Moc3RydWN0IGNtZF9kc19jb21tYW5kICpjbWQsCiAJdTE2IGNtZF9hY3Rpb24sIHZvaWQgKnBkYXRhX2J1Zik7CiBpbnQgbGJzX2NtZF9md3RfYWNjZXNzKHN0cnVjdCBjbWRfZHNfY29tbWFuZCAqY21kLAogCXUxNiBjbWRfYWN0aW9uLCB2b2lkICpwZGF0YV9idWYpOworaW50IGxic19tZXNoX2FjY2VzcyhzdHJ1Y3QgbGJzX3ByaXZhdGUgKnByaXYsIHVpbnQxNl90IGNtZF9hY3Rpb24sCisJCSAgICBzdHJ1Y3QgY21kX2RzX21lc2hfYWNjZXNzICpjbWQpOworaW50IGxic19tZXNoX2NvbmZpZ19zZW5kKHN0cnVjdCBsYnNfcHJpdmF0ZSAqcHJpdiwKKwkJCSBzdHJ1Y3QgY21kX2RzX21lc2hfY29uZmlnICpjbWQsCisJCQkgdWludDE2X3QgYWN0aW9uLCB1aW50MTZfdCB0eXBlKTsKK2ludCBsYnNfbWVzaF9jb25maWcoc3RydWN0IGxic19wcml2YXRlICpwcml2LCB1aW50MTZfdCBlbmFibGUsIHVpbnQxNl90IGNoYW4pOworCiAKIAogLyogUGVyc2lzdGVudCBjb25maWd1cmF0aW9uICovCkBAIC03NSw0ICs4NiwyNSBAQAogCXVpbnQzMl90IHN0cmluZ3NldCwgdWludDhfdCAqcyk7CiAKIAorLyogQWNjZXNzb3JzICovCisKKyNkZWZpbmUgbGJzX21lc2hfb3Blbihwcml2KSAocHJpdi0+bWVzaF9vcGVuKQorI2RlZmluZSBsYnNfbWVzaF9jb25uZWN0ZWQocHJpdikgKHByaXYtPm1lc2hfY29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCkKKworI2Vsc2UKKworI2RlZmluZSBsYnNfaW5pdF9tZXNoKHByaXYpCisjZGVmaW5lIGxic19kZWluaXRfbWVzaChwcml2KQorI2RlZmluZSBsYnNfYWRkX21lc2gocHJpdikKKyNkZWZpbmUgbGJzX3JlbW92ZV9tZXNoKHByaXYpCisjZGVmaW5lIGxic19tZXNoX3NldF9kZXYocHJpdiwgZGV2LCByeHBkKSAoZGV2KQorI2RlZmluZSBsYnNfbWVzaF9zZXRfdHhwZChwcml2LCBkZXYsIHR4cGQpCisjZGVmaW5lIGxic19tZXNoX2NvbmZpZyhwcml2LCBlbmFibGUsIGNoYW4pCisjZGVmaW5lIGxic19tZXNoX29wZW4ocHJpdikgKDApCisjZGVmaW5lIGxic19tZXNoX2Nvbm5lY3RlZChwcml2KSAoMCkKKworI2VuZGlmCisKKworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3NjYW4uYwppbmRleCBiMGIxYzc4Li4yMjAzNjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy9zY2FuLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvc2Nhbi5jCkBAIC02MzUsNyArNjM1LDcgQEAKIAlpZiAocHJpdi0+Y29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCAmJiAhcHJpdi0+dHhfcGVuZGluZ19sZW4pCiAJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+ZGV2KTsKIAotCWlmIChwcml2LT5tZXNoX2RldiAmJiAocHJpdi0+bWVzaF9jb25uZWN0X3N0YXR1cyA9PSBMQlNfQ09OTkVDVEVEKSAmJgorCWlmIChwcml2LT5tZXNoX2RldiAmJiBsYnNfbWVzaF9jb25uZWN0ZWQocHJpdikgJiYKIAkgICAgIXByaXYtPnR4X3BlbmRpbmdfbGVuKQogCQluZXRpZl93YWtlX3F1ZXVlKHByaXYtPm1lc2hfZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3R4LmMKaW5kZXggMzE1ZDFjZS4uNTJkMjQ0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvdHguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy90eC5jCkBAIC0xOTgsNyArMTk4LDcgQEAKIAlpZiAocHJpdi0+Y29ubmVjdF9zdGF0dXMgPT0gTEJTX0NPTk5FQ1RFRCkKIAkJbmV0aWZfd2FrZV9xdWV1ZShwcml2LT5kZXYpOwogCi0JaWYgKHByaXYtPm1lc2hfZGV2ICYmIChwcml2LT5tZXNoX2Nvbm5lY3Rfc3RhdHVzID09IExCU19DT05ORUNURUQpKQorCWlmIChwcml2LT5tZXNoX2RldiAmJiBsYnNfbWVzaF9jb25uZWN0ZWQocHJpdikpCiAJCW5ldGlmX3dha2VfcXVldWUocHJpdi0+bWVzaF9kZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwobGJzX3NlbmRfdHhfZmVlZGJhY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXMvd2V4dC5jCmluZGV4IDRiMWFhYjUuLjcxZjg4YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzL3dleHQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhcy93ZXh0LmMKQEAgLTE5Miw3ICsxOTIsNyBAQAogCWxic19kZWJfZW50ZXIoTEJTX0RFQl9XRVhUKTsKIAogCWlmICgocHJpdi0+Y29ubmVjdF9zdGF0dXMgIT0gTEJTX0NPTk5FQ1RFRCkgJiYKLQkJKHByaXYtPm1lc2hfY29ubmVjdF9zdGF0dXMgIT0gTEJTX0NPTk5FQ1RFRCkpCisJCSFsYnNfbWVzaF9jb25uZWN0ZWQocHJpdikpCiAJCW1lbWNweShyYXRlcywgbGJzX2JnX3JhdGVzLCBNQVhfUkFURVMpOwogCWVsc2UKIAkJbWVtY3B5KHJhdGVzLCBwcml2LT5jdXJic3NwYXJhbXMucmF0ZXMsIE1BWF9SQVRFUyk7CkBAIC0yOTgsNiArMjk4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19MSUJFUlRBU19NRVNICiBzdGF0aWMgaW50IG1lc2hfZ2V0X25pY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGl3X3JlcXVlc3RfaW5mbyAqaW5mbywKIAkJCSBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsIGNoYXIgKmV4dHJhKQogewpAQCAtMzA3LDcgKzMwOCw3IEBACiAKIAkvKiBVc2Ugbmlja25hbWUgdG8gaW5kaWNhdGUgdGhhdCBtZXNoIGlzIG9uICovCiAKLQlpZiAocHJpdi0+bWVzaF9jb25uZWN0X3N0YXR1cyA9PSBMQlNfQ09OTkVDVEVEKSB7CisJaWYgKGxic19tZXNoX2Nvbm5lY3RlZChwcml2KSkgewogCQlzdHJuY3B5KGV4dHJhLCAiTWVzaCIsIDEyKTsKIAkJZXh0cmFbMTJdID0gJ1wwJzsKIAkJZHdycS0+bGVuZ3RoID0gc3RybGVuKGV4dHJhKTsKQEAgLTMyMSw2ICszMjIsNyBAQAogCWxic19kZWJfbGVhdmUoTEJTX0RFQl9XRVhUKTsKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZgogCiBzdGF0aWMgaW50IGxic19zZXRfcnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQlzdHJ1Y3QgaXdfcGFyYW0gKnZ3cnEsIGNoYXIgKmV4dHJhKQpAQCAtNDIyLDYgKzQyNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfTElCRVJUQVNfTUVTSAogc3RhdGljIGludCBtZXNoX3dsYW5fZ2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICAgICAgICAgICBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLCB1MzIgKiB1d3JxLAogCQkJICAgICAgY2hhciAqZXh0cmEpCkBAIC00MzMsNiArNDM2LDcgQEAKIAlsYnNfZGViX2xlYXZlKExCU19ERUJfV0VYVCk7CiAJcmV0dXJuIDA7CiB9CisjZW5kaWYKIAogc3RhdGljIGludCBsYnNfZ2V0X3R4cG93KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCkBAIC04NjMsNyArODY3LDcgQEAKIAogCS8qIElmIHdlJ3JlIG5vdCBhc3NvY2lhdGVkLCBhbGwgcXVhbGl0eSB2YWx1ZXMgYXJlIG1lYW5pbmdsZXNzICovCiAJaWYgKChwcml2LT5jb25uZWN0X3N0YXR1cyAhPSBMQlNfQ09OTkVDVEVEKSAmJgotCSAgICAocHJpdi0+bWVzaF9jb25uZWN0X3N0YXR1cyAhPSBMQlNfQ09OTkVDVEVEKSkKKwkgICAgIWxic19tZXNoX2Nvbm5lY3RlZChwcml2KSkKIAkJZ290byBvdXQ7CiAKIAkvKiBRdWFsaXR5IGJ5IFJTU0kgKi8KQEAgLTEwMTAsNiArMTAxNCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmIENPTkZJR19MSUJFUlRBU19NRVNICiBzdGF0aWMgaW50IGxic19tZXNoX3NldF9mcmVxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgIHN0cnVjdCBpd19mcmVxICpmd3JxLCBjaGFyICpleHRyYSkKQEAgLTEwNjEsNiArMTA2Niw3IEBACiAJbGJzX2RlYl9sZWF2ZV9hcmdzKExCU19ERUJfV0VYVCwgInJldCAlZCIsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KKyNlbmRpZgogCiBzdGF0aWMgaW50IGxic19zZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaXdfcmVxdWVzdF9pbmZvICppbmZvLAogCQkgIHN0cnVjdCBpd19wYXJhbSAqdndycSwgY2hhciAqZXh0cmEpCkBAIC0yMTA4LDYgKzIxMTQsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfTElCRVJUQVNfTUVTSAogc3RhdGljIGludCBsYnNfbWVzaF9nZXRfZXNzaWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgIHN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCiAJCQkgICAgICBzdHJ1Y3QgaXdfcG9pbnQgKmR3cnEsIGNoYXIgKmV4dHJhKQpAQCAtMjE2MSw2ICsyMTY4LDcgQEAKIAlsYnNfZGViX2xlYXZlX2FyZ3MoTEJTX0RFQl9XRVhULCAicmV0ICVkIiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQorI2VuZGlmCiAKIC8qKgogICogIEBicmllZiBDb25uZWN0IHRvIHRoZSBBUCBvciBBZC1ob2MgTmV0d29yayB3aXRoIHNwZWNpZmljIGJzc2lkCkBAIC0yMjY3LDcgKzIyNzUsMTMgQEAKIAkoaXdfaGFuZGxlcikgbGJzX2dldF9lbmNvZGVleHQsLyogU0lPQ0dJV0VOQ09ERUVYVCAqLwogCShpd19oYW5kbGVyKSBOVUxMLAkJLyogU0lPQ1NJV1BNS1NBICovCiB9Oworc3RydWN0IGl3X2hhbmRsZXJfZGVmIGxic19oYW5kbGVyX2RlZiA9IHsKKwkubnVtX3N0YW5kYXJkCT0gQVJSQVlfU0laRShsYnNfaGFuZGxlciksCisJLnN0YW5kYXJkCT0gKGl3X2hhbmRsZXIgKikgbGJzX2hhbmRsZXIsCisJLmdldF93aXJlbGVzc19zdGF0cyA9IGxic19nZXRfd2lyZWxlc3Nfc3RhdHMsCit9OwogCisjaWZkZWYgQ09ORklHX0xJQkVSVEFTX01FU0gKIHN0YXRpYyBjb25zdCBpd19oYW5kbGVyIG1lc2hfd2xhbl9oYW5kbGVyW10gPSB7CiAJKGl3X2hhbmRsZXIpIE5VTEwsCS8qIFNJT0NTSVdDT01NSVQgKi8KIAkoaXdfaGFuZGxlcikgbGJzX2dldF9uYW1lLAkvKiBTSU9DR0lXTkFNRSAqLwpAQCAtMjMyNSwxNCArMjMzOSwxMCBAQAogCShpd19oYW5kbGVyKSBsYnNfZ2V0X2VuY29kZWV4dCwvKiBTSU9DR0lXRU5DT0RFRVhUICovCiAJKGl3X2hhbmRsZXIpIE5VTEwsCQkvKiBTSU9DU0lXUE1LU0EgKi8KIH07Ci1zdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgbGJzX2hhbmRsZXJfZGVmID0gewotCS5udW1fc3RhbmRhcmQJPSBBUlJBWV9TSVpFKGxic19oYW5kbGVyKSwKLQkuc3RhbmRhcmQJPSAoaXdfaGFuZGxlciAqKSBsYnNfaGFuZGxlciwKLQkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gbGJzX2dldF93aXJlbGVzc19zdGF0cywKLX07CiAKIHN0cnVjdCBpd19oYW5kbGVyX2RlZiBtZXNoX2hhbmRsZXJfZGVmID0gewogCS5udW1fc3RhbmRhcmQJPSBBUlJBWV9TSVpFKG1lc2hfd2xhbl9oYW5kbGVyKSwKIAkuc3RhbmRhcmQJPSAoaXdfaGFuZGxlciAqKSBtZXNoX3dsYW5faGFuZGxlciwKIAkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gbGJzX2dldF93aXJlbGVzc19zdGF0cywKIH07CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2xpYmVydGFzX3RmL21haW4uYwppbmRleCAyNmExYWJkLi42YWIzMDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9saWJlcnRhc190Zi9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbGliZXJ0YXNfdGYvbWFpbi5jCkBAIC0zMTgsMTQgKzMxOCwxNCBAQAogfQogCiBzdGF0aWMgaW50IGxidGZfb3BfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgbGJ0Zl9wcml2YXRlICpwcml2ID0gaHctPnByaXY7CiAJaWYgKHByaXYtPnZpZiAhPSBOVUxMKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlwcml2LT52aWYgPSBjb25mLT52aWY7Ci0Jc3dpdGNoIChjb25mLT50eXBlKSB7CisJcHJpdi0+dmlmID0gdmlmOworCXN3aXRjaCAodmlmLT50eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJCWxidGZfc2V0X21vZGUocHJpdiwgTEJURl9BUF9NT0RFKTsKQEAgLTMzNywxMiArMzM3LDEyIEBACiAJCXByaXYtPnZpZiA9IE5VTEw7CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9Ci0JbGJ0Zl9zZXRfbWFjX2FkZHJlc3MocHJpdiwgKHU4ICopIGNvbmYtPm1hY19hZGRyKTsKKwlsYnRmX3NldF9tYWNfYWRkcmVzcyhwcml2LCAodTggKikgdmlmLT5hZGRyKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgbGJ0Zl9vcF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBsYnRmX3ByaXZhdGUgKnByaXYgPSBody0+cHJpdjsKIApAQCAtNTU1LDYgKzU1NSw5IEBACiAJcHJpdi0+YmFuZC5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShsYnRmX2NoYW5uZWxzKTsKIAlwcml2LT5iYW5kLmNoYW5uZWxzID0gcHJpdi0+Y2hhbm5lbHM7CiAJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZwcml2LT5iYW5kOworCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0KKwkJQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKTsKIAlza2JfcXVldWVfaGVhZF9pbml0KCZwcml2LT5iY19wc19idWYpOwogCiAJU0VUX0lFRUU4MDIxMV9ERVYoaHcsIGRtZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9tYWM4MDIxMV9od3NpbS5jCmluZGV4IDg4ZTQxMTcuLjZlYTc3ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL21hYzgwMjExX2h3c2ltLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFjODAyMTFfaHdzaW0uYwpAQCAtMzIsNiArMzIsMTAgQEAKIG1vZHVsZV9wYXJhbShyYWRpb3MsIGludCwgMDQ0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKHJhZGlvcywgIk51bWJlciBvZiBzaW11bGF0ZWQgcmFkaW9zIik7CiAKK3N0YXRpYyBib29sIGZha2VfaHdfc2NhbjsKK21vZHVsZV9wYXJhbShmYWtlX2h3X3NjYW4sIGJvb2wsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhmYWtlX2h3X3NjYW4sICJJbnN0YWxsIGZha2UgKG5vLW9wKSBody1zY2FuIGhhbmRsZXIiKTsKKwogLyoqCiAgKiBlbnVtIGh3c2ltX3JlZ3Rlc3QgLSB0aGUgdHlwZSBvZiByZWd1bGF0b3J5IHRlc3RzIHdlIG9mZmVyCiAgKgpAQCAtMjgxLDYgKzI4NSw4IEBACiAJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzXzVnaHpbQVJSQVlfU0laRShod3NpbV9jaGFubmVsc181Z2h6KV07CiAJc3RydWN0IGllZWU4MDIxMV9yYXRlIHJhdGVzW0FSUkFZX1NJWkUoaHdzaW1fcmF0ZXMpXTsKIAorCXN0cnVjdCBtYWNfYWRkcmVzcyBhZGRyZXNzZXNbMl07CisKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CiAJdW5zaWduZWQgbG9uZyBiZWFjb25faW50OyAvKiBpbiBqaWZmaWVzIHVuaXQgKi8KIAl1bnNpZ25lZCBpbnQgcnhfZmlsdGVyOwpAQCAtNDM2LDYgKzQ0MiwzOCBAQAogfQogCiAKK3N0cnVjdCBtYWM4MDIxMV9od3NpbV9hZGRyX21hdGNoX2RhdGEgeworCWJvb2wgcmV0OworCWNvbnN0IHU4ICphZGRyOworfTsKKworc3RhdGljIHZvaWQgbWFjODAyMTFfaHdzaW1fYWRkcl9pdGVyKHZvaWQgKmRhdGEsIHU4ICptYWMsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBtYWM4MDIxMV9od3NpbV9hZGRyX21hdGNoX2RhdGEgKm1kID0gZGF0YTsKKwlpZiAobWVtY21wKG1hYywgbWQtPmFkZHIsIEVUSF9BTEVOKSA9PSAwKQorCQltZC0+cmV0ID0gdHJ1ZTsKK30KKworCitzdGF0aWMgYm9vbCBtYWM4MDIxMV9od3NpbV9hZGRyX21hdGNoKHN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhLAorCQkJCSAgICAgIGNvbnN0IHU4ICphZGRyKQoreworCXN0cnVjdCBtYWM4MDIxMV9od3NpbV9hZGRyX21hdGNoX2RhdGEgbWQ7CisKKwlpZiAobWVtY21wKGFkZHIsIGRhdGEtPmh3LT53aXBoeS0+cGVybV9hZGRyLCBFVEhfQUxFTikgPT0gMCkKKwkJcmV0dXJuIHRydWU7CisKKwltZC5yZXQgPSBmYWxzZTsKKwltZC5hZGRyID0gYWRkcjsKKwlpZWVlODAyMTFfaXRlcmF0ZV9hY3RpdmVfaW50ZXJmYWNlc19hdG9taWMoZGF0YS0+aHcsCisJCQkJCQkgICBtYWM4MDIxMV9od3NpbV9hZGRyX2l0ZXIsCisJCQkJCQkgICAmbWQpOworCisJcmV0dXJuIG1kLnJldDsKK30KKworCiBzdGF0aWMgYm9vbCBtYWM4MDIxMV9od3NpbV90eF9mcmFtZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTQ4OCw4ICs1MjYsNyBAQAogCQlpZiAobnNrYiA9PSBOVUxMKQogCQkJY29udGludWU7CiAKLQkJaWYgKG1lbWNtcChoZHItPmFkZHIxLCBkYXRhMi0+aHctPndpcGh5LT5wZXJtX2FkZHIsCi0JCQkgICBFVEhfQUxFTikgPT0gMCkKKwkJaWYgKG1hYzgwMjExX2h3c2ltX2FkZHJfbWF0Y2goZGF0YTIsIGhkci0+YWRkcjEpKQogCQkJYWNrID0gdHJ1ZTsKIAkJbWVtY3B5KElFRUU4MDIxMV9TS0JfUlhDQihuc2tiKSwgJnJ4X3N0YXR1cywgc2l6ZW9mKHJ4X3N0YXR1cykpOwogCQlpZWVlODAyMTFfcnhfaXJxc2FmZShkYXRhMi0+aHcsIG5za2IpOwpAQCAtNTUzLDI0ICs1OTAsMjQgQEAKIAogCiBzdGF0aWMgaW50IG1hYzgwMjExX2h3c2ltX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXByaW50ayhLRVJOX0RFQlVHICIlczolcyAodHlwZT0lZCBtYWNfYWRkcj0lcE0pXG4iLAotCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSksIF9fZnVuY19fLCBjb25mLT50eXBlLAotCSAgICAgICBjb25mLT5tYWNfYWRkcik7Ci0JaHdzaW1fc2V0X21hZ2ljKGNvbmYtPnZpZik7CisJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwgX19mdW5jX18sIHZpZi0+dHlwZSwKKwkgICAgICAgdmlmLT5hZGRyKTsKKwlod3NpbV9zZXRfbWFnaWModmlmKTsKIAlyZXR1cm4gMDsKIH0KIAogCiBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9yZW1vdmVfaW50ZXJmYWNlKAotCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6JXMgKHR5cGU9JWQgbWFjX2FkZHI9JXBNKVxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLCBfX2Z1bmNfXywgY29uZi0+dHlwZSwKLQkgICAgICAgY29uZi0+bWFjX2FkZHIpOwotCWh3c2ltX2NoZWNrX21hZ2ljKGNvbmYtPnZpZik7Ci0JaHdzaW1fY2xlYXJfbWFnaWMoY29uZi0+dmlmKTsKKwkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLCBfX2Z1bmNfXywgdmlmLT50eXBlLAorCSAgICAgICB2aWYtPmFkZHIpOworCWh3c2ltX2NoZWNrX21hZ2ljKHZpZik7CisJaHdzaW1fY2xlYXJfbWFnaWModmlmKTsKIH0KIAogCkBAIC02MTgsMTIgKzY1NSwyNiBAQAogewogCXN0cnVjdCBtYWM4MDIxMV9od3NpbV9kYXRhICpkYXRhID0gaHctPnByaXY7CiAJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJmh3LT5jb25mOworCXN0YXRpYyBjb25zdCBjaGFyICpjaGFudHlwZXNbNF0gPSB7CisJCVtOTDgwMjExX0NIQU5fTk9fSFRdID0gIm5vaHQiLAorCQlbTkw4MDIxMV9DSEFOX0hUMjBdID0gImh0MjAiLAorCQlbTkw4MDIxMV9DSEFOX0hUNDBNSU5VU10gPSAiaHQ0MC0iLAorCQlbTkw4MDIxMV9DSEFOX0hUNDBQTFVTXSA9ICJodDQwKyIsCisJfTsKKwlzdGF0aWMgY29uc3QgY2hhciAqc21wc19tb2Rlc1tJRUVFODAyMTFfU01QU19OVU1fTU9ERVNdID0geworCQlbSUVFRTgwMjExX1NNUFNfQVVUT01BVElDXSA9ICJhdXRvIiwKKwkJW0lFRUU4MDIxMV9TTVBTX09GRl0gPSAib2ZmIiwKKwkJW0lFRUU4MDIxMV9TTVBTX1NUQVRJQ10gPSAic3RhdGljIiwKKwkJW0lFRUU4MDIxMV9TTVBTX0RZTkFNSUNdID0gImR5bmFtaWMiLAorCX07CiAKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6JXMgKGZyZXE9JWQgaWRsZT0lZCBwcz0lZClcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiVzIChmcmVxPSVkLyVzIGlkbGU9JWQgcHM9JWQgc21wcz0lcylcbiIsCiAJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSwgX19mdW5jX18sCiAJICAgICAgIGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxLAorCSAgICAgICBjaGFudHlwZXNbY29uZi0+Y2hhbm5lbF90eXBlXSwKIAkgICAgICAgISEoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFKSwKLQkgICAgICAgISEoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykpOworCSAgICAgICAhIShjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSwKKwkgICAgICAgc21wc19tb2Rlc1tjb25mLT5zbXBzX21vZGVdKTsKIAogCWRhdGEtPmlkbGUgPSAhIShjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX0lETEUpOwogCkBAIC03MjAsMjMgKzc3MSw0MSBAQAogCX0KIH0KIAorc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9zdGFfYWRkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJaHdzaW1fY2hlY2tfbWFnaWModmlmKTsKKwlod3NpbV9zZXRfc3RhX21hZ2ljKHN0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9zdGFfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJaHdzaW1fY2hlY2tfbWFnaWModmlmKTsKKwlod3NpbV9jbGVhcl9zdGFfbWFnaWMoc3RhKTsKKworCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBtYWM4MDIxMV9od3NpbV9zdGFfbm90aWZ5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAogCQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQkJICAgICAgZW51bSBzdGFfbm90aWZ5X2NtZCBjbWQsCiAJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKIAlod3NpbV9jaGVja19tYWdpYyh2aWYpOworCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFNUQV9OT1RJRllfQUREOgotCQlod3NpbV9zZXRfc3RhX21hZ2ljKHN0YSk7Ci0JCWJyZWFrOwotCWNhc2UgU1RBX05PVElGWV9SRU1PVkU6Ci0JCWh3c2ltX2NsZWFyX3N0YV9tYWdpYyhzdGEpOwotCQlicmVhazsKIAljYXNlIFNUQV9OT1RJRllfU0xFRVA6CiAJY2FzZSBTVEFfTk9USUZZX0FXQUtFOgogCQkvKiBUT0RPOiBtYWtlIGdvb2QgdXNlIG9mIHRoZXNlIGZsYWdzICovCiAJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk4oMSwgIkludmFsaWQgc3RhIG5vdGlmeTogJWRcbiIsIGNtZCk7CisJCWJyZWFrOwogCX0KIH0KIApAQCAtODI3LDcgKzg5Niw3NyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX29wcyBtYWM4MDIxMV9od3NpbV9vcHMgPQorc3RhdGljIGludCBtYWM4MDIxMV9od3NpbV9hbXBkdV9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICAgICAgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCwgdTE2ICpzc24pCit7CisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9UWF9TVEFSVDoKKwkJaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUodmlmLCBzdGEtPmFkZHIsIHRpZCk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX1NUT1A6CisJCWllZWU4MDIxMV9zdG9wX3R4X2JhX2NiX2lycXNhZmUodmlmLCBzdGEtPmFkZHIsIHRpZCk7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMOgorCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVDoKKwljYXNlIElFRUU4MDIxMV9BTVBEVV9SWF9TVE9QOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIG1hYzgwMjExX2h3c2ltX2ZsdXNoKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGRyb3ApCit7CisJLyoKKwkgKiBJbiB0aGlzIHNwZWNpYWwgY2FzZSwgdGhlcmUncyBub3RoaW5nIHdlIG5lZWQgdG8KKwkgKiBkbyBiZWNhdXNlIGh3c2ltIGRvZXMgdHJhbnNtaXNzaW9uIHN5bmNocm9ub3VzbHkuCisJICogSW4gdGhlIGZ1dHVyZSwgd2hlbiBpdCBkb2VzIHRyYW5zbWlzc2lvbnMgdmlhCisJICogdXNlcnNwYWNlLCB3ZSBtYXkgbmVlZCB0byBkbyBzb21ldGhpbmcuCisJICovCit9CisKK3N0cnVjdCBod19zY2FuX2RvbmUgeworCXN0cnVjdCBkZWxheWVkX3dvcmsgdzsKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKK307CisKK3N0YXRpYyB2b2lkIGh3X3NjYW5fZG9uZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGh3X3NjYW5fZG9uZSAqaHNkID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBod19zY2FuX2RvbmUsIHcud29yayk7CisKKwlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoaHNkLT5odywgZmFsc2UpOworCWtmcmVlKGhzZCk7Cit9CisKK3N0YXRpYyBpbnQgbWFjODAyMTFfaHdzaW1faHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSkKK3sKKwlzdHJ1Y3QgaHdfc2Nhbl9kb25lICpoc2QgPSBremFsbG9jKHNpemVvZigqaHNkKSwgR0ZQX0tFUk5FTCk7CisJaW50IGk7CisKKwlpZiAoIWhzZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloc2QtPmh3ID0gaHc7CisJSU5JVF9ERUxBWUVEX1dPUksoJmhzZC0+dywgaHdfc2Nhbl9kb25lKTsKKworCXByaW50ayhLRVJOX0RFQlVHICJod3NpbSBzY2FuIHJlcXVlc3RcbiIpOworCWZvciAoaSA9IDA7IGkgPCByZXEtPm5fY2hhbm5lbHM7IGkrKykKKwkJcHJpbnRrKEtFUk5fREVCVUcgImh3c2ltIHNjYW4gZnJlcSAlZFxuIiwKKwkJCXJlcS0+Y2hhbm5lbHNbaV0tPmNlbnRlcl9mcmVxKTsKKworCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsoaHcsICZoc2QtPncsIDIgKiBIWik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfb3BzIG1hYzgwMjExX2h3c2ltX29wcyA9CiB7CiAJLnR4ID0gbWFjODAyMTFfaHdzaW1fdHgsCiAJLnN0YXJ0ID0gbWFjODAyMTFfaHdzaW1fc3RhcnQsCkBAIC04MzcsMTAgKzk3NiwxNCBAQAogCS5jb25maWcgPSBtYWM4MDIxMV9od3NpbV9jb25maWcsCiAJLmNvbmZpZ3VyZV9maWx0ZXIgPSBtYWM4MDIxMV9od3NpbV9jb25maWd1cmVfZmlsdGVyLAogCS5ic3NfaW5mb19jaGFuZ2VkID0gbWFjODAyMTFfaHdzaW1fYnNzX2luZm9fY2hhbmdlZCwKKwkuc3RhX2FkZCA9IG1hYzgwMjExX2h3c2ltX3N0YV9hZGQsCisJLnN0YV9yZW1vdmUgPSBtYWM4MDIxMV9od3NpbV9zdGFfcmVtb3ZlLAogCS5zdGFfbm90aWZ5ID0gbWFjODAyMTFfaHdzaW1fc3RhX25vdGlmeSwKIAkuc2V0X3RpbSA9IG1hYzgwMjExX2h3c2ltX3NldF90aW0sCiAJLmNvbmZfdHggPSBtYWM4MDIxMV9od3NpbV9jb25mX3R4LAogCUNGRzgwMjExX1RFU1RNT0RFX0NNRChtYWM4MDIxMV9od3NpbV90ZXN0bW9kZV9jbWQpCisJLmFtcGR1X2FjdGlvbiA9IG1hYzgwMjExX2h3c2ltX2FtcGR1X2FjdGlvbiwKKwkuZmx1c2ggPSBtYWM4MDIxMV9od3NpbV9mbHVzaCwKIH07CiAKIApAQCAtMTAzNSw2ICsxMTc4LDkgQEAKIAlpZiAocmFkaW9zIDwgMSB8fCByYWRpb3MgPiAxMDApCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKGZha2VfaHdfc2NhbikKKwkJbWFjODAyMTFfaHdzaW1fb3BzLmh3X3NjYW4gPSBtYWM4MDIxMV9od3NpbV9od19zY2FuOworCiAJc3Bpbl9sb2NrX2luaXQoJmh3c2ltX3JhZGlvX2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZod3NpbV9yYWRpb3MpOwogCkBAIC0xMDcyLDcgKzEyMTgsMTEgQEAKIAkJU0VUX0lFRUU4MDIxMV9ERVYoaHcsIGRhdGEtPmRldik7CiAJCWFkZHJbM10gPSBpID4+IDg7CiAJCWFkZHJbNF0gPSBpOwotCQlTRVRfSUVFRTgwMjExX1BFUk1fQUREUihodywgYWRkcik7CisJCW1lbWNweShkYXRhLT5hZGRyZXNzZXNbMF0uYWRkciwgYWRkciwgRVRIX0FMRU4pOworCQltZW1jcHkoZGF0YS0+YWRkcmVzc2VzWzFdLmFkZHIsIGFkZHIsIEVUSF9BTEVOKTsKKwkJZGF0YS0+YWRkcmVzc2VzWzFdLmFkZHJbMF0gfD0gMHg0MDsKKwkJaHctPndpcGh5LT5uX2FkZHJlc3NlcyA9IDI7CisJCWh3LT53aXBoeS0+YWRkcmVzc2VzID0gZGF0YS0+YWRkcmVzc2VzOwogCiAJCWh3LT5jaGFubmVsX2NoYW5nZV90aW1lID0gMTsKIAkJaHctPnF1ZXVlcyA9IDQ7CkBAIC0xMDgyLDcgKzEyMzIsOSBAQAogCQkJQklUKE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpOwogCiAJCWh3LT5mbGFncyA9IElFRUU4MDIxMV9IV19NRlBfQ0FQQUJMRSB8Ci0JCQkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk07CisJCQkgICAgSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAorCQkJICAgIElFRUU4MDIxMV9IV19TVVBQT1JUU19TVEFUSUNfU01QUyB8CisJCQkgICAgSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfU01QUzsKIAogCQkvKiBhc2sgbWFjODAyMTEgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbWFnaWMgKi8KIAkJaHctPnZpZl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGh3c2ltX3ZpZl9wcml2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9td2w4ay5jCmluZGV4IDU5ZjkyMTAuLmFjNjVlMTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvbXdsOGsuYwpAQCAtMiw3ICsyLDcgQEAKICAqIGRyaXZlcnMvbmV0L3dpcmVsZXNzL213bDhrLmMKICAqIERyaXZlciBmb3IgTWFydmVsbCBUT1BET0cgODAyLjExIFdpcmVsZXNzIGNhcmRzCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTWFydmVsbCBTZW1pY29uZHVjdG9yIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCBNYXJ2ZWxsIFNlbWljb25kdWN0b3IgSW5jLgogICoKICAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZSB2ZXJzaW9uIDIuICBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQpAQCAtMjYsNyArMjYsNyBAQAogCiAjZGVmaW5lIE1XTDhLX0RFU0MJIk1hcnZlbGwgVE9QRE9HKFIpIDgwMi4xMSBXaXJlbGVzcyBOZXR3b3JrIERyaXZlciIKICNkZWZpbmUgTVdMOEtfTkFNRQlLQlVJTERfTU9ETkFNRQotI2RlZmluZSBNV0w4S19WRVJTSU9OCSIwLjEwIgorI2RlZmluZSBNV0w4S19WRVJTSU9OCSIwLjEyIgogCiAvKiBSZWdpc3RlciBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBNV0w4S19ISVVfR0VOX1BUUgkJCTB4MDAwMDBjMTAKQEAgLTkyLDggKzkyLDcgQEAKIAljaGFyICpwYXJ0X25hbWU7CiAJY2hhciAqaGVscGVyX2ltYWdlOwogCWNoYXIgKmZ3X2ltYWdlOwotCXN0cnVjdCByeGRfb3BzICpyeGRfb3BzOwotCXUxNiBtb2RlczsKKwlzdHJ1Y3QgcnhkX29wcyAqYXBfcnhkX29wczsKIH07CiAKIHN0cnVjdCBtd2w4a19yeF9xdWV1ZSB7CkBAIC0xMjAsMzQgKzExOSwzNiBAQAogCS8qIHN3IGFwcGVuZHMgaGVyZSAqLwogCWludCB0YWlsOwogCi0Jc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyBzdGF0czsKKwl1bnNpZ25lZCBpbnQgbGVuOwogCXN0cnVjdCBtd2w4a190eF9kZXNjICp0eGQ7CiAJZG1hX2FkZHJfdCB0eGRfZG1hOwogCXN0cnVjdCBza19idWZmICoqc2tiOwogfTsKIAotLyogUG9pbnRlcnMgdG8gdGhlIGZpcm13YXJlIGRhdGEgYW5kIG1ldGEgaW5mb3JtYXRpb24gYWJvdXQgaXQuICAqLwotc3RydWN0IG13bDhrX2Zpcm13YXJlIHsKLQkvKiBCb290IGhlbHBlciBjb2RlICovCi0Jc3RydWN0IGZpcm13YXJlICpoZWxwZXI7Ci0KLQkvKiBNaWNyb2NvZGUgKi8KLQlzdHJ1Y3QgZmlybXdhcmUgKnVjb2RlOwotfTsKLQogc3RydWN0IG13bDhrX3ByaXYgewotCXZvaWQgX19pb21lbSAqc3JhbTsKLQl2b2lkIF9faW9tZW0gKnJlZ3M7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7Ci0KIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAogCXN0cnVjdCBtd2w4a19kZXZpY2VfaW5mbyAqZGV2aWNlX2luZm87CisKKwl2b2lkIF9faW9tZW0gKnNyYW07CisJdm9pZCBfX2lvbWVtICpyZWdzOworCisJLyogZmlybXdhcmUgKi8KKwlzdHJ1Y3QgZmlybXdhcmUgKmZ3X2hlbHBlcjsKKwlzdHJ1Y3QgZmlybXdhcmUgKmZ3X3Vjb2RlOworCisJLyogaGFyZHdhcmUvZmlybXdhcmUgcGFyYW1ldGVycyAqLwogCWJvb2wgYXBfZnc7CiAJc3RydWN0IHJ4ZF9vcHMgKnJ4ZF9vcHM7Ci0KLQkvKiBmaXJtd2FyZSBmaWxlcyBhbmQgbWV0YSBkYXRhICovCi0Jc3RydWN0IG13bDhrX2Zpcm13YXJlIGZ3OworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgYmFuZF8yNDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgY2hhbm5lbHNfMjRbMTRdOworCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSByYXRlc18yNFsxNF07CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCBiYW5kXzUwOworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBjaGFubmVsc181MFs0XTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNfNTBbOV07CisJdTMyIGFwX21hY2lkc19zdXBwb3J0ZWQ7CisJdTMyIHN0YV9tYWNpZHNfc3VwcG9ydGVkOwogCiAJLyogZmlybXdhcmUgYWNjZXNzICovCiAJc3RydWN0IG11dGV4IGZ3X211dGV4OwpAQCAtMTYxLDkgKzE2Miw5IEBACiAJLyogVFggcXVpZXNjZSBjb21wbGV0aW9uLCBwcm90ZWN0ZWQgYnkgZndfbXV0ZXggYW5kIHR4X2xvY2sgKi8KIAlzdHJ1Y3QgY29tcGxldGlvbiAqdHhfd2FpdDsKIAotCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7Ci0KLQlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmN1cnJlbnRfY2hhbm5lbDsKKwkvKiBMaXN0IG9mIGludGVyZmFjZXMuICAqLworCXUzMiBtYWNpZHNfdXNlZDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHZpZl9saXN0OwogCiAJLyogcG93ZXIgbWFuYWdlbWVudCBzdGF0dXMgY29va2llIGZyb20gZmlybXdhcmUgKi8KIAl1MzIgKmNvb2tpZTsKQEAgLTE4MiwxMSArMTgzLDYgQEAKIAlzdHJ1Y3QgbXdsOGtfcnhfcXVldWUgcnhxW01XTDhLX1JYX1FVRVVFU107CiAJc3RydWN0IG13bDhrX3R4X3F1ZXVlIHR4cVtNV0w4S19UWF9RVUVVRVNdOwogCi0JLyogUEhZIHBhcmFtZXRlcnMgKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIGJhbmQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIGNoYW5uZWxzWzE0XTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgcmF0ZXNbMTRdOwotCiAJYm9vbCByYWRpb19vbjsKIAlib29sIHJhZGlvX3Nob3J0X3ByZWFtYmxlOwogCWJvb2wgc25pZmZlcl9lbmFibGVkOwpAQCAtMjA1LDMyICsyMDEsMzMgQEAKIAkgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZmluYWxpemVfam9pbl93b3JrZXI7CiAKLQkvKiBUYXNrbGV0IHRvIHJlY2xhaW0gVFggZGVzY3JpcHRvcnMgYW5kIGJ1ZmZlcnMgYWZ0ZXIgdHggKi8KLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgdHhfcmVjbGFpbV90YXNrOworCS8qIFRhc2tsZXQgdG8gcGVyZm9ybSBUWCByZWNsYWltLiAgKi8KKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcG9sbF90eF90YXNrOworCisJLyogVGFza2xldCB0byBwZXJmb3JtIFJYLiAgKi8KKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgcG9sbF9yeF90YXNrOwogfTsKIAogLyogUGVyIGludGVyZmFjZSBzcGVjaWZpYyBwcml2YXRlIGRhdGEgKi8KIHN0cnVjdCBtd2w4a192aWYgewotCS8qIGJhY2twb2ludGVyIHRvIHBhcmVudCBjb25maWcgYmxvY2sgKi8KLQlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKIAotCS8qIEJTUyBjb25maWcgb2YgQVAgb3IgSUJTUyBmcm9tIG1hYzgwMjExKi8KLQlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mIGJzc19pbmZvOworCS8qIEZpcm13YXJlIG1hY2lkIGZvciB0aGlzIHZpZi4gICovCisJaW50IG1hY2lkOwogCi0JLyogQlNTSUQgb2YgQVAgb3IgSUJTUyAqLwotCXU4CWJzc2lkW0VUSF9BTEVOXTsKLQl1OAltYWNfYWRkcltFVEhfQUxFTl07Ci0KLQkgLyogSW5kZXggaW50byBzdGF0aW9uIGRhdGFiYXNlLlJldHVybmVkIGJ5IHVwZGF0ZV9zdGFfZGIgY2FsbCAqLwotCXU4CXBlZXJfaWQ7Ci0KLQkvKiBOb24gQU1QRFUgc2VxdWVuY2UgbnVtYmVyIGFzc2lnbmVkIGJ5IGRyaXZlciAqLwotCXUxNglzZXFubzsKKwkvKiBOb24gQU1QRFUgc2VxdWVuY2UgbnVtYmVyIGFzc2lnbmVkIGJ5IGRyaXZlci4gICovCisJdTE2IHNlcW5vOwogfTsKLQogI2RlZmluZSBNV0w4S19WSUYoX3ZpZikgKChzdHJ1Y3QgbXdsOGtfdmlmICopJigoX3ZpZiktPmRydl9wcml2KSkKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBtd2w4a19jaGFubmVsc1tdID0geworc3RydWN0IG13bDhrX3N0YSB7CisJLyogSW5kZXggaW50byBzdGF0aW9uIGRhdGFiYXNlLiBSZXR1cm5lZCBieSBVUERBVEVfU1RBREIuICAqLworCXU4IHBlZXJfaWQ7Cit9OworI2RlZmluZSBNV0w4S19TVEEoX3N0YSkgKChzdHJ1Y3QgbXdsOGtfc3RhICopJigoX3N0YSktPmRydl9wcml2KSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCBtd2w4a19jaGFubmVsc18yNFtdID0gewogCXsgLmNlbnRlcl9mcmVxID0gMjQxMiwgLmh3X3ZhbHVlID0gMSwgfSwKIAl7IC5jZW50ZXJfZnJlcSA9IDI0MTcsIC5od192YWx1ZSA9IDIsIH0sCiAJeyAuY2VudGVyX2ZyZXEgPSAyNDIyLCAuaHdfdmFsdWUgPSAzLCB9LApAQCAtMjQyLDkgKzIzOSwxMiBAQAogCXsgLmNlbnRlcl9mcmVxID0gMjQ1MiwgLmh3X3ZhbHVlID0gOSwgfSwKIAl7IC5jZW50ZXJfZnJlcSA9IDI0NTcsIC5od192YWx1ZSA9IDEwLCB9LAogCXsgLmNlbnRlcl9mcmVxID0gMjQ2MiwgLmh3X3ZhbHVlID0gMTEsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSAyNDY3LCAuaHdfdmFsdWUgPSAxMiwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDI0NzIsIC5od192YWx1ZSA9IDEzLCB9LAorCXsgLmNlbnRlcl9mcmVxID0gMjQ4NCwgLmh3X3ZhbHVlID0gMTQsIH0sCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIG13bDhrX3JhdGVzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYXRlIG13bDhrX3JhdGVzXzI0W10gPSB7CiAJeyAuYml0cmF0ZSA9IDEwLCAuaHdfdmFsdWUgPSAyLCB9LAogCXsgLmJpdHJhdGUgPSAyMCwgLmh3X3ZhbHVlID0gNCwgfSwKIAl7IC5iaXRyYXRlID0gNTUsIC5od192YWx1ZSA9IDExLCB9LApAQCAtMjYxLDggKzI2MSwyMyBAQAogCXsgLmJpdHJhdGUgPSA3MjAsIC5od192YWx1ZSA9IDE0NCwgfSwKIH07CiAKLXN0YXRpYyBjb25zdCB1OCBtd2w4a19yYXRlaWRzWzEyXSA9IHsKLQkyLCA0LCAxMSwgMjIsIDEyLCAxOCwgMjQsIDM2LCA0OCwgNzIsIDk2LCAxMDgsCitzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIG13bDhrX2NoYW5uZWxzXzUwW10gPSB7CisJeyAuY2VudGVyX2ZyZXEgPSA1MTgwLCAuaHdfdmFsdWUgPSAzNiwgfSwKKwl7IC5jZW50ZXJfZnJlcSA9IDUyMDAsIC5od192YWx1ZSA9IDQwLCB9LAorCXsgLmNlbnRlcl9mcmVxID0gNTIyMCwgLmh3X3ZhbHVlID0gNDQsIH0sCisJeyAuY2VudGVyX2ZyZXEgPSA1MjQwLCAuaHdfdmFsdWUgPSA0OCwgfSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgbXdsOGtfcmF0ZXNfNTBbXSA9IHsKKwl7IC5iaXRyYXRlID0gNjAsIC5od192YWx1ZSA9IDEyLCB9LAorCXsgLmJpdHJhdGUgPSA5MCwgLmh3X3ZhbHVlID0gMTgsIH0sCisJeyAuYml0cmF0ZSA9IDEyMCwgLmh3X3ZhbHVlID0gMjQsIH0sCisJeyAuYml0cmF0ZSA9IDE4MCwgLmh3X3ZhbHVlID0gMzYsIH0sCisJeyAuYml0cmF0ZSA9IDI0MCwgLmh3X3ZhbHVlID0gNDgsIH0sCisJeyAuYml0cmF0ZSA9IDM2MCwgLmh3X3ZhbHVlID0gNzIsIH0sCisJeyAuYml0cmF0ZSA9IDQ4MCwgLmh3X3ZhbHVlID0gOTYsIH0sCisJeyAuYml0cmF0ZSA9IDU0MCwgLmh3X3ZhbHVlID0gMTA4LCB9LAorCXsgLmJpdHJhdGUgPSA3MjAsIC5od192YWx1ZSA9IDE0NCwgfSwKIH07CiAKIC8qIFNldCBvciBnZXQgaW5mbyBmcm9tIEZpcm13YXJlICovCkBAIC0yNzgsNiArMjkzLDcgQEAKICNkZWZpbmUgTVdMOEtfQ01EX1JBRElPX0NPTlRST0wJCTB4MDAxYwogI2RlZmluZSBNV0w4S19DTURfUkZfVFhfUE9XRVIJCTB4MDAxZQogI2RlZmluZSBNV0w4S19DTURfUkZfQU5URU5OQQkJMHgwMDIwCisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfQkVBQ09OCQkweDAxMDAJCS8qIHBlci12aWYgKi8KICNkZWZpbmUgTVdMOEtfQ01EX1NFVF9QUkVfU0NBTgkJMHgwMTA3CiAjZGVmaW5lIE1XTDhLX0NNRF9TRVRfUE9TVF9TQ0FOCQkweDAxMDgKICNkZWZpbmUgTVdMOEtfQ01EX1NFVF9SRl9DSEFOTkVMCTB4MDEwYQpAQCAtMjkxLDggKzMwNywxMCBAQAogI2RlZmluZSBNV0w4S19DTURfTUlNT19DT05GSUcJCTB4MDEyNQogI2RlZmluZSBNV0w4S19DTURfVVNFX0ZJWEVEX1JBVEUJMHgwMTI2CiAjZGVmaW5lIE1XTDhLX0NNRF9FTkFCTEVfU05JRkZFUgkweDAxNTAKLSNkZWZpbmUgTVdMOEtfQ01EX1NFVF9NQUNfQUREUgkJMHgwMjAyCisjZGVmaW5lIE1XTDhLX0NNRF9TRVRfTUFDX0FERFIJCTB4MDIwMgkJLyogcGVyLXZpZiAqLwogI2RlZmluZSBNV0w4S19DTURfU0VUX1JBVEVBREFQVF9NT0RFCTB4MDIwMworI2RlZmluZSBNV0w4S19DTURfQlNTX1NUQVJUCQkweDExMDAJCS8qIHBlci12aWYgKi8KKyNkZWZpbmUgTVdMOEtfQ01EX1NFVF9ORVdfU1ROCQkweDExMTEJCS8qIHBlci12aWYgKi8KICNkZWZpbmUgTVdMOEtfQ01EX1VQREFURV9TVEFEQgkJMHgxMTIzCiAKIHN0YXRpYyBjb25zdCBjaGFyICptd2w4a19jbWRfbmFtZSh1MTYgY21kLCBjaGFyICpidWYsIGludCBidWZzaXplKQpAQCAtMzEwLDYgKzMyOCw3IEBACiAJCU1XTDhLX0NNRE5BTUUoUkFESU9fQ09OVFJPTCk7CiAJCU1XTDhLX0NNRE5BTUUoUkZfVFhfUE9XRVIpOwogCQlNV0w4S19DTUROQU1FKFJGX0FOVEVOTkEpOworCQlNV0w4S19DTUROQU1FKFNFVF9CRUFDT04pOwogCQlNV0w4S19DTUROQU1FKFNFVF9QUkVfU0NBTik7CiAJCU1XTDhLX0NNRE5BTUUoU0VUX1BPU1RfU0NBTik7CiAJCU1XTDhLX0NNRE5BTUUoU0VUX1JGX0NIQU5ORUwpOwpAQCAtMzI1LDYgKzM0NCw4IEBACiAJCU1XTDhLX0NNRE5BTUUoRU5BQkxFX1NOSUZGRVIpOwogCQlNV0w4S19DTUROQU1FKFNFVF9NQUNfQUREUik7CiAJCU1XTDhLX0NNRE5BTUUoU0VUX1JBVEVBREFQVF9NT0RFKTsKKwkJTVdMOEtfQ01ETkFNRShCU1NfU1RBUlQpOworCQlNV0w4S19DTUROQU1FKFNFVF9ORVdfU1ROKTsKIAkJTVdMOEtfQ01ETkFNRShVUERBVEVfU1RBREIpOwogCWRlZmF1bHQ6CiAJCXNucHJpbnRmKGJ1ZiwgYnVmc2l6ZSwgIjB4JXgiLCBjbWQpOwpAQCAtMzU1LDggKzM3Niw4IEBACiAKIHN0YXRpYyB2b2lkIG13bDhrX3JlbGVhc2VfZmlybXdhcmUoc3RydWN0IG13bDhrX3ByaXYgKnByaXYpCiB7Ci0JbXdsOGtfcmVsZWFzZV9mdygmcHJpdi0+ZncudWNvZGUpOwotCW13bDhrX3JlbGVhc2VfZncoJnByaXYtPmZ3LmhlbHBlcik7CisJbXdsOGtfcmVsZWFzZV9mdygmcHJpdi0+ZndfdWNvZGUpOworCW13bDhrX3JlbGVhc2VfZncoJnByaXYtPmZ3X2hlbHBlcik7CiB9CiAKIC8qIFJlcXVlc3QgZncgaW1hZ2UgKi8KQEAgLTM3Nyw3ICszOTgsNyBAQAogCWludCByYzsKIAogCWlmIChkaS0+aGVscGVyX2ltYWdlICE9IE5VTEwpIHsKLQkJcmMgPSBtd2w4a19yZXF1ZXN0X2Z3KHByaXYsIGRpLT5oZWxwZXJfaW1hZ2UsICZwcml2LT5mdy5oZWxwZXIpOworCQlyYyA9IG13bDhrX3JlcXVlc3RfZncocHJpdiwgZGktPmhlbHBlcl9pbWFnZSwgJnByaXYtPmZ3X2hlbHBlcik7CiAJCWlmIChyYykgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRXJyb3IgcmVxdWVzdGluZyBoZWxwZXIgIgogCQkJICAgICAgICJmaXJtd2FyZSBmaWxlICVzXG4iLCBwY2lfbmFtZShwcml2LT5wZGV2KSwKQEAgLTM4NiwyNCArNDA3LDIyIEBACiAJCX0KIAl9CiAKLQlyYyA9IG13bDhrX3JlcXVlc3RfZncocHJpdiwgZGktPmZ3X2ltYWdlLCAmcHJpdi0+ZncudWNvZGUpOworCXJjID0gbXdsOGtfcmVxdWVzdF9mdyhwcml2LCBkaS0+ZndfaW1hZ2UsICZwcml2LT5md191Y29kZSk7CiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IEVycm9yIHJlcXVlc3RpbmcgZmlybXdhcmUgZmlsZSAlc1xuIiwKIAkJICAgICAgIHBjaV9uYW1lKHByaXYtPnBkZXYpLCBkaS0+ZndfaW1hZ2UpOwotCQltd2w4a19yZWxlYXNlX2Z3KCZwcml2LT5mdy5oZWxwZXIpOworCQltd2w4a19yZWxlYXNlX2Z3KCZwcml2LT5md19oZWxwZXIpOwogCQlyZXR1cm4gcmM7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLU1PRFVMRV9GSVJNV0FSRSgibXdsOGsvaGVscGVyXzg2ODcuZnciKTsKLU1PRFVMRV9GSVJNV0FSRSgibXdsOGsvZm1pbWFnZV84Njg3LmZ3Iik7Ci0KIHN0cnVjdCBtd2w4a19jbWRfcGt0IHsKIAlfX2xlMTYJY29kZTsKIAlfX2xlMTYJbGVuZ3RoOwotCV9fbGUxNglzZXFfbnVtOworCV9fdTgJc2VxX251bTsKKwlfX3U4CW1hY2lkOwogCV9fbGUxNglyZXN1bHQ7CiAJY2hhcglwYXlsb2FkWzBdOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKQEAgLTQ2MSw2ICs0ODAsNyBAQAogCiAJY21kLT5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX0NPREVfRE5MRCk7CiAJY21kLT5zZXFfbnVtID0gMDsKKwljbWQtPm1hY2lkID0gMDsKIAljbWQtPnJlc3VsdCA9IDA7CiAKIAlkb25lID0gMDsKQEAgLTU1MSwxMyArNTcxLDEyIEBACiBzdGF0aWMgaW50IG13bDhrX2xvYWRfZmlybXdhcmUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7CiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlzdHJ1Y3QgZmlybXdhcmUgKmZ3ID0gcHJpdi0+ZncudWNvZGU7Ci0Jc3RydWN0IG13bDhrX2RldmljZV9pbmZvICpkaSA9IHByaXYtPmRldmljZV9pbmZvOworCXN0cnVjdCBmaXJtd2FyZSAqZncgPSBwcml2LT5md191Y29kZTsKIAlpbnQgcmM7CiAJaW50IGxvb3BzOwogCiAJaWYgKCFtZW1jbXAoZnctPmRhdGEsICJceDAxXHgwMFx4MDBceDAwIiwgNCkpIHsKLQkJc3RydWN0IGZpcm13YXJlICpoZWxwZXIgPSBwcml2LT5mdy5oZWxwZXI7CisJCXN0cnVjdCBmaXJtd2FyZSAqaGVscGVyID0gcHJpdi0+ZndfaGVscGVyOwogCiAJCWlmIChoZWxwZXIgPT0gTlVMTCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaGVscGVyIGltYWdlIG5lZWRlZCBidXQgbm9uZSAiCkBAIC01ODQsMTAgKzYwMyw3IEBACiAJCXJldHVybiByYzsKIAl9CiAKLQlpZiAoZGktPm1vZGVzICYgQklUKE5MODAyMTFfSUZUWVBFX0FQKSkKLQkJaW93cml0ZTMyKE1XTDhLX01PREVfQVAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfR0VOX1BUUik7Ci0JZWxzZQotCQlpb3dyaXRlMzIoTVdMOEtfTU9ERV9TVEEsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfR0VOX1BUUik7CisJaW93cml0ZTMyKE1XTDhLX01PREVfU1RBLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0dFTl9QVFIpOwogCiAJbG9vcHMgPSA1MDAwMDA7CiAJZG8gewpAQCAtNjEwLDkxICs2MjYsNiBAQAogfQogCiAKLS8qCi0gKiBEZWZpbmVzIHNoYXJlZCBiZXR3ZWVuIHRyYW5zbWlzc2lvbiBhbmQgcmVjZXB0aW9uLgotICovCi0vKiBIVCBjb250cm9sIGZpZWxkcyBmb3IgZmlybXdhcmUgKi8KLXN0cnVjdCBld2NfaHRfaW5mbyB7Ci0JX19sZTE2CWNvbnRyb2wxOwotCV9fbGUxNgljb250cm9sMjsKLQlfX2xlMTYJY29udHJvbDM7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi0vKiBGaXJtd2FyZSBTdGF0aW9uIGRhdGFiYXNlIG9wZXJhdGlvbnMgKi8KLSNkZWZpbmUgTVdMOEtfU1RBX0RCX0FERF9FTlRSWQkJMAotI2RlZmluZSBNV0w4S19TVEFfREJfTU9ESUZZX0VOVFJZCTEKLSNkZWZpbmUgTVdMOEtfU1RBX0RCX0RFTF9FTlRSWQkJMgotI2RlZmluZSBNV0w4S19TVEFfREJfRkxVU0gJCTMKLQotLyogUGVlciBFbnRyeSBmbGFncyAtIHVzZWQgdG8gZGVmaW5lIHRoZSB0eXBlIG9mIHRoZSBwZWVyIG5vZGUgKi8KLSNkZWZpbmUgTVdMOEtfUEVFUl9UWVBFX0FDQ0VTU1BPSU5UCTIKLQotc3RydWN0IHBlZXJfY2FwYWJpbGl0eV9pbmZvIHsKLQkvKiBQZWVyIHR5cGUgLSBBUCB2cy4gU1RBLiAgKi8KLQlfX3U4CXBlZXJfdHlwZTsKLQotCS8qIEJhc2ljIDgwMi4xMSBjYXBhYmlsaXRpZXMgZnJvbSBhc3NvYyByZXNwLiAgKi8KLQlfX2xlMTYJYmFzaWNfY2FwczsKLQotCS8qIFNldCBpZiBwZWVyIHN1cHBvcnRzIDgwMi4xMW4gaGlnaCB0aHJvdWdocHV0IChIVCkuICAqLwotCV9fdTgJaHRfc3VwcG9ydDsKLQotCS8qIFZhbGlkIGlmIEhUIGlzIHN1cHBvcnRlZC4gICovCi0JX19sZTE2CWh0X2NhcHM7Ci0JX191OAlleHRlbmRlZF9odF9jYXBzOwotCXN0cnVjdCBld2NfaHRfaW5mbwlld2NfaW5mbzsKLQotCS8qIExlZ2FjeSByYXRlIHRhYmxlLiBJbnRlcnNlY3Rpb24gb2Ygb3VyIHJhdGVzIGFuZCBwZWVyIHJhdGVzLiAgKi8KLQlfX3U4CWxlZ2FjeV9yYXRlc1sxMl07Ci0KLQkvKiBIVCByYXRlIHRhYmxlLiBJbnRlcnNlY3Rpb24gb2Ygb3VyIHJhdGVzIGFuZCBwZWVyIHJhdGVzLiAgKi8KLQlfX3U4CWh0X3JhdGVzWzE2XTsKLQlfX3U4CXBhZFsxNl07Ci0KLQkvKiBJZiBzZXQsIGludGVyb3BlcmFiaWxpdHkgbW9kZSwgbm8gcHJvcHJpZXRhcnkgZXh0ZW5zaW9ucy4gICovCi0JX191OAlpbnRlcm9wOwotCV9fdTgJcGFkMjsKLQlfX3U4CXN0YXRpb25faWQ7Ci0JX19sZTE2CWFtc2R1X2VuYWJsZWQ7Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi0vKiBJbmxpbmUgZnVuY3Rpb25zIHRvIG1hbmlwdWxhdGUgUW9TIGZpZWxkIGluIGRhdGEgZGVzY3JpcHRvci4gICovCi1zdGF0aWMgaW5saW5lIHUxNiBtd2w4a19xb3Nfc2V0Yml0X2Vvc3AodTE2IHFvcykKLXsKLQl1MTYgdmFsX21hc2sgPSAxIDw8IDQ7Ci0KLQkvKiBFbmQgb2YgU2VydmljZSBQZXJpb2QgQml0IDQgKi8KLQlyZXR1cm4gcW9zIHwgdmFsX21hc2s7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTE2IG13bDhrX3Fvc19zZXRiaXRfYWNrKHUxNiBxb3MsIHU4IGFja19wb2xpY3kpCi17Ci0JdTE2IHZhbF9tYXNrID0gMHgzOwotCXU4CXNoaWZ0ID0gNTsKLQl1MTYgcW9zX21hc2sgPSB+KHZhbF9tYXNrIDw8IHNoaWZ0KTsKLQotCS8qIEFjayBQb2xpY3kgQml0IDUtNiAqLwotCXJldHVybiAocW9zICYgcW9zX21hc2spIHwgKChhY2tfcG9saWN5ICYgdmFsX21hc2spIDw8IHNoaWZ0KTsKLX0KLQotc3RhdGljIGlubGluZSB1MTYgbXdsOGtfcW9zX3NldGJpdF9hbXNkdSh1MTYgcW9zKQotewotCXUxNiB2YWxfbWFzayA9IDEgPDwgNzsKLQotCS8qIEFNU0RVIHByZXNlbnQgQml0IDcgKi8KLQlyZXR1cm4gcW9zIHwgdmFsX21hc2s7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdTE2IG13bDhrX3Fvc19zZXRiaXRfcWxlbih1MTYgcW9zLCB1OCBsZW4pCi17Ci0JdTE2IHZhbF9tYXNrID0gMHhmZjsKLQl1OAlzaGlmdCA9IDg7Ci0JdTE2IHFvc19tYXNrID0gfih2YWxfbWFzayA8PCBzaGlmdCk7Ci0KLQkvKiBRdWV1ZSBMZW5ndGggQml0cyA4LTE1ICovCi0JcmV0dXJuIChxb3MgJiBxb3NfbWFzaykgfCAoKGxlbiAmIHZhbF9tYXNrKSA8PCBzaGlmdCk7Ci19Ci0KIC8qIERNQSBoZWFkZXIgdXNlZCBieSBmaXJtd2FyZSBhbmQgaGFyZHdhcmUuICAqLwogc3RydWN0IG13bDhrX2RtYV9kYXRhIHsKIAlfX2xlMTYgZndsZW47CkBAIC03NjEsOSArNjkyLDkgQEAKIAogCiAvKgotICogUGFja2V0IHJlY2VwdGlvbiBmb3IgODh3ODM2Ni4KKyAqIFBhY2tldCByZWNlcHRpb24gZm9yIDg4dzgzNjYgQVAgZmlybXdhcmUuCiAgKi8KLXN0cnVjdCBtd2w4a19yeGRfODM2NiB7CitzdHJ1Y3QgbXdsOGtfcnhkXzgzNjZfYXAgewogCV9fbGUxNiBwa3RfbGVuOwogCV9fdTggc3EyOwogCV9fdTggcmF0ZTsKQEAgLTc4MSwyMyArNzEyLDIzIEBACiAJX191OCByeF9jdHJsOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotI2RlZmluZSBNV0w4S184MzY2X1JBVEVfSU5GT19NQ1NfRk9STUFUCQkweDgwCi0jZGVmaW5lIE1XTDhLXzgzNjZfUkFURV9JTkZPXzQwTUhaCQkweDQwCi0jZGVmaW5lIE1XTDhLXzgzNjZfUkFURV9JTkZPX1JBVEVJRCh4KQkJKCh4KSAmIDB4M2YpCisjZGVmaW5lIE1XTDhLXzgzNjZfQVBfUkFURV9JTkZPX01DU19GT1JNQVQJMHg4MAorI2RlZmluZSBNV0w4S184MzY2X0FQX1JBVEVfSU5GT180ME1IWgkJMHg0MAorI2RlZmluZSBNV0w4S184MzY2X0FQX1JBVEVfSU5GT19SQVRFSUQoeCkJKCh4KSAmIDB4M2YpCiAKLSNkZWZpbmUgTVdMOEtfODM2Nl9SWF9DVFJMX09XTkVEX0JZX0hPU1QJMHg4MAorI2RlZmluZSBNV0w4S184MzY2X0FQX1JYX0NUUkxfT1dORURfQllfSE9TVAkweDgwCiAKLXN0YXRpYyB2b2lkIG13bDhrX3J4ZF84MzY2X2luaXQodm9pZCAqX3J4ZCwgZG1hX2FkZHJfdCBuZXh0X2RtYV9hZGRyKQorc3RhdGljIHZvaWQgbXdsOGtfcnhkXzgzNjZfYXBfaW5pdCh2b2lkICpfcnhkLCBkbWFfYWRkcl90IG5leHRfZG1hX2FkZHIpCiB7Ci0Jc3RydWN0IG13bDhrX3J4ZF84MzY2ICpyeGQgPSBfcnhkOworCXN0cnVjdCBtd2w4a19yeGRfODM2Nl9hcCAqcnhkID0gX3J4ZDsKIAogCXJ4ZC0+bmV4dF9yeGRfcGh5c19hZGRyID0gY3B1X3RvX2xlMzIobmV4dF9kbWFfYWRkcik7Ci0JcnhkLT5yeF9jdHJsID0gTVdMOEtfODM2Nl9SWF9DVFJMX09XTkVEX0JZX0hPU1Q7CisJcnhkLT5yeF9jdHJsID0gTVdMOEtfODM2Nl9BUF9SWF9DVFJMX09XTkVEX0JZX0hPU1Q7CiB9CiAKLXN0YXRpYyB2b2lkIG13bDhrX3J4ZF84MzY2X3JlZmlsbCh2b2lkICpfcnhkLCBkbWFfYWRkcl90IGFkZHIsIGludCBsZW4pCitzdGF0aWMgdm9pZCBtd2w4a19yeGRfODM2Nl9hcF9yZWZpbGwodm9pZCAqX3J4ZCwgZG1hX2FkZHJfdCBhZGRyLCBpbnQgbGVuKQogewotCXN0cnVjdCBtd2w4a19yeGRfODM2NiAqcnhkID0gX3J4ZDsKKwlzdHJ1Y3QgbXdsOGtfcnhkXzgzNjZfYXAgKnJ4ZCA9IF9yeGQ7CiAKIAlyeGQtPnBrdF9sZW4gPSBjcHVfdG9fbGUxNihsZW4pOwogCXJ4ZC0+cGt0X3BoeXNfYWRkciA9IGNwdV90b19sZTMyKGFkZHIpOwpAQCAtODA2LDEyICs3MzcsMTIgQEAKIH0KIAogc3RhdGljIGludAotbXdsOGtfcnhkXzgzNjZfcHJvY2Vzcyh2b2lkICpfcnhkLCBzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqc3RhdHVzLAotCQkgICAgICAgX19sZTE2ICpxb3MpCittd2w4a19yeGRfODM2Nl9hcF9wcm9jZXNzKHZvaWQgKl9yeGQsIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMsCisJCQkgIF9fbGUxNiAqcW9zKQogewotCXN0cnVjdCBtd2w4a19yeGRfODM2NiAqcnhkID0gX3J4ZDsKKwlzdHJ1Y3QgbXdsOGtfcnhkXzgzNjZfYXAgKnJ4ZCA9IF9yeGQ7CiAKLQlpZiAoIShyeGQtPnJ4X2N0cmwgJiBNV0w4S184MzY2X1JYX0NUUkxfT1dORURfQllfSE9TVCkpCisJaWYgKCEocnhkLT5yeF9jdHJsICYgTVdMOEtfODM2Nl9BUF9SWF9DVFJMX09XTkVEX0JZX0hPU1QpKQogCQlyZXR1cm4gLTE7CiAJcm1iKCk7CiAKQEAgLTgyMCwyMyArNzUxLDI5IEBACiAJc3RhdHVzLT5zaWduYWwgPSAtcnhkLT5yc3NpOwogCXN0YXR1cy0+bm9pc2UgPSAtcnhkLT5ub2lzZV9mbG9vcjsKIAotCWlmIChyeGQtPnJhdGUgJiBNV0w4S184MzY2X1JBVEVfSU5GT19NQ1NfRk9STUFUKSB7CisJaWYgKHJ4ZC0+cmF0ZSAmIE1XTDhLXzgzNjZfQVBfUkFURV9JTkZPX01DU19GT1JNQVQpIHsKIAkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfSFQ7Ci0JCWlmIChyeGQtPnJhdGUgJiBNV0w4S184MzY2X1JBVEVfSU5GT180ME1IWikKKwkJaWYgKHJ4ZC0+cmF0ZSAmIE1XTDhLXzgzNjZfQVBfUkFURV9JTkZPXzQwTUhaKQogCQkJc3RhdHVzLT5mbGFnIHw9IFJYX0ZMQUdfNDBNSFo7Ci0JCXN0YXR1cy0+cmF0ZV9pZHggPSBNV0w4S184MzY2X1JBVEVfSU5GT19SQVRFSUQocnhkLT5yYXRlKTsKKwkJc3RhdHVzLT5yYXRlX2lkeCA9IE1XTDhLXzgzNjZfQVBfUkFURV9JTkZPX1JBVEVJRChyeGQtPnJhdGUpOwogCX0gZWxzZSB7CiAJCWludCBpOwogCi0JCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG13bDhrX3JhdGVzKTsgaSsrKSB7Ci0JCQlpZiAobXdsOGtfcmF0ZXNbaV0uaHdfdmFsdWUgPT0gcnhkLT5yYXRlKSB7CisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG13bDhrX3JhdGVzXzI0KTsgaSsrKSB7CisJCQlpZiAobXdsOGtfcmF0ZXNfMjRbaV0uaHdfdmFsdWUgPT0gcnhkLT5yYXRlKSB7CiAJCQkJc3RhdHVzLT5yYXRlX2lkeCA9IGk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAl9CiAKLQlzdGF0dXMtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOworCWlmIChyeGQtPmNoYW5uZWwgPiAxNCkgeworCQlzdGF0dXMtPmJhbmQgPSBJRUVFODAyMTFfQkFORF81R0haOworCQlpZiAoIShzdGF0dXMtPmZsYWcgJiBSWF9GTEFHX0hUKSkKKwkJCXN0YXR1cy0+cmF0ZV9pZHggLT0gNTsKKwl9IGVsc2UgeworCQlzdGF0dXMtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOworCX0KIAlzdGF0dXMtPmZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3kocnhkLT5jaGFubmVsKTsKIAogCSpxb3MgPSByeGQtPnFvc19jb250cm9sOwpAQCAtODQ0LDE3ICs3ODEsMTcgQEAKIAlyZXR1cm4gbGUxNl90b19jcHUocnhkLT5wa3RfbGVuKTsKIH0KIAotc3RhdGljIHN0cnVjdCByeGRfb3BzIHJ4ZF84MzY2X29wcyA9IHsKLQkucnhkX3NpemUJPSBzaXplb2Yoc3RydWN0IG13bDhrX3J4ZF84MzY2KSwKLQkucnhkX2luaXQJPSBtd2w4a19yeGRfODM2Nl9pbml0LAotCS5yeGRfcmVmaWxsCT0gbXdsOGtfcnhkXzgzNjZfcmVmaWxsLAotCS5yeGRfcHJvY2Vzcwk9IG13bDhrX3J4ZF84MzY2X3Byb2Nlc3MsCitzdGF0aWMgc3RydWN0IHJ4ZF9vcHMgcnhkXzgzNjZfYXBfb3BzID0geworCS5yeGRfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgbXdsOGtfcnhkXzgzNjZfYXApLAorCS5yeGRfaW5pdAk9IG13bDhrX3J4ZF84MzY2X2FwX2luaXQsCisJLnJ4ZF9yZWZpbGwJPSBtd2w4a19yeGRfODM2Nl9hcF9yZWZpbGwsCisJLnJ4ZF9wcm9jZXNzCT0gbXdsOGtfcnhkXzgzNjZfYXBfcHJvY2VzcywKIH07CiAKIC8qCi0gKiBQYWNrZXQgcmVjZXB0aW9uIGZvciA4OHc4Njg3LgorICogUGFja2V0IHJlY2VwdGlvbiBmb3IgU1RBIGZpcm13YXJlLgogICovCi1zdHJ1Y3QgbXdsOGtfcnhkXzg2ODcgeworc3RydWN0IG13bDhrX3J4ZF9zdGEgewogCV9fbGUxNiBwa3RfbGVuOwogCV9fdTggbGlua19xdWFsaXR5OwogCV9fdTggbm9pc2VfbGV2ZWw7CkBAIC04NzEsMjYgKzgwOCwyNiBAQAogCV9fdTggcGFkMlsyXTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKLSNkZWZpbmUgTVdMOEtfODY4N19SQVRFX0lORk9fU0hPUlRQUkUJCTB4ODAwMAotI2RlZmluZSBNV0w4S184Njg3X1JBVEVfSU5GT19BTlRTRUxFQ1QoeCkJKCgoeCkgPj4gMTEpICYgMHgzKQotI2RlZmluZSBNV0w4S184Njg3X1JBVEVfSU5GT19SQVRFSUQoeCkJCSgoKHgpID4+IDMpICYgMHgzZikKLSNkZWZpbmUgTVdMOEtfODY4N19SQVRFX0lORk9fNDBNSFoJCTB4MDAwNAotI2RlZmluZSBNV0w4S184Njg3X1JBVEVfSU5GT19TSE9SVEdJCQkweDAwMDIKLSNkZWZpbmUgTVdMOEtfODY4N19SQVRFX0lORk9fTUNTX0ZPUk1BVAkJMHgwMDAxCisjZGVmaW5lIE1XTDhLX1NUQV9SQVRFX0lORk9fU0hPUlRQUkUJCTB4ODAwMAorI2RlZmluZSBNV0w4S19TVEFfUkFURV9JTkZPX0FOVFNFTEVDVCh4KQkoKCh4KSA+PiAxMSkgJiAweDMpCisjZGVmaW5lIE1XTDhLX1NUQV9SQVRFX0lORk9fUkFURUlEKHgpCQkoKCh4KSA+PiAzKSAmIDB4M2YpCisjZGVmaW5lIE1XTDhLX1NUQV9SQVRFX0lORk9fNDBNSFoJCTB4MDAwNAorI2RlZmluZSBNV0w4S19TVEFfUkFURV9JTkZPX1NIT1JUR0kJCTB4MDAwMgorI2RlZmluZSBNV0w4S19TVEFfUkFURV9JTkZPX01DU19GT1JNQVQJCTB4MDAwMQogCi0jZGVmaW5lIE1XTDhLXzg2ODdfUlhfQ1RSTF9PV05FRF9CWV9IT1NUCTB4MDIKKyNkZWZpbmUgTVdMOEtfU1RBX1JYX0NUUkxfT1dORURfQllfSE9TVAkJMHgwMgogCi1zdGF0aWMgdm9pZCBtd2w4a19yeGRfODY4N19pbml0KHZvaWQgKl9yeGQsIGRtYV9hZGRyX3QgbmV4dF9kbWFfYWRkcikKK3N0YXRpYyB2b2lkIG13bDhrX3J4ZF9zdGFfaW5pdCh2b2lkICpfcnhkLCBkbWFfYWRkcl90IG5leHRfZG1hX2FkZHIpCiB7Ci0Jc3RydWN0IG13bDhrX3J4ZF84Njg3ICpyeGQgPSBfcnhkOworCXN0cnVjdCBtd2w4a19yeGRfc3RhICpyeGQgPSBfcnhkOwogCiAJcnhkLT5uZXh0X3J4ZF9waHlzX2FkZHIgPSBjcHVfdG9fbGUzMihuZXh0X2RtYV9hZGRyKTsKLQlyeGQtPnJ4X2N0cmwgPSBNV0w4S184Njg3X1JYX0NUUkxfT1dORURfQllfSE9TVDsKKwlyeGQtPnJ4X2N0cmwgPSBNV0w4S19TVEFfUlhfQ1RSTF9PV05FRF9CWV9IT1NUOwogfQogCi1zdGF0aWMgdm9pZCBtd2w4a19yeGRfODY4N19yZWZpbGwodm9pZCAqX3J4ZCwgZG1hX2FkZHJfdCBhZGRyLCBpbnQgbGVuKQorc3RhdGljIHZvaWQgbXdsOGtfcnhkX3N0YV9yZWZpbGwodm9pZCAqX3J4ZCwgZG1hX2FkZHJfdCBhZGRyLCBpbnQgbGVuKQogewotCXN0cnVjdCBtd2w4a19yeGRfODY4NyAqcnhkID0gX3J4ZDsKKwlzdHJ1Y3QgbXdsOGtfcnhkX3N0YSAqcnhkID0gX3J4ZDsKIAogCXJ4ZC0+cGt0X2xlbiA9IGNwdV90b19sZTE2KGxlbik7CiAJcnhkLT5wa3RfcGh5c19hZGRyID0gY3B1X3RvX2xlMzIoYWRkcik7CkBAIC04OTksMTMgKzgzNiwxMyBAQAogfQogCiBzdGF0aWMgaW50Ci1td2w4a19yeGRfODY4N19wcm9jZXNzKHZvaWQgKl9yeGQsIHN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXMsCittd2w4a19yeGRfc3RhX3Byb2Nlc3Modm9pZCAqX3J4ZCwgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnN0YXR1cywKIAkJICAgICAgIF9fbGUxNiAqcW9zKQogewotCXN0cnVjdCBtd2w4a19yeGRfODY4NyAqcnhkID0gX3J4ZDsKKwlzdHJ1Y3QgbXdsOGtfcnhkX3N0YSAqcnhkID0gX3J4ZDsKIAl1MTYgcmF0ZV9pbmZvOwogCi0JaWYgKCEocnhkLT5yeF9jdHJsICYgTVdMOEtfODY4N19SWF9DVFJMX09XTkVEX0JZX0hPU1QpKQorCWlmICghKHJ4ZC0+cnhfY3RybCAmIE1XTDhLX1NUQV9SWF9DVFJMX09XTkVEX0JZX0hPU1QpKQogCQlyZXR1cm4gLTE7CiAJcm1iKCk7CiAKQEAgLTkxNSwxOSArODUyLDI1IEBACiAKIAlzdGF0dXMtPnNpZ25hbCA9IC1yeGQtPnJzc2k7CiAJc3RhdHVzLT5ub2lzZSA9IC1yeGQtPm5vaXNlX2xldmVsOwotCXN0YXR1cy0+YW50ZW5uYSA9IE1XTDhLXzg2ODdfUkFURV9JTkZPX0FOVFNFTEVDVChyYXRlX2luZm8pOwotCXN0YXR1cy0+cmF0ZV9pZHggPSBNV0w4S184Njg3X1JBVEVfSU5GT19SQVRFSUQocmF0ZV9pbmZvKTsKKwlzdGF0dXMtPmFudGVubmEgPSBNV0w4S19TVEFfUkFURV9JTkZPX0FOVFNFTEVDVChyYXRlX2luZm8pOworCXN0YXR1cy0+cmF0ZV9pZHggPSBNV0w4S19TVEFfUkFURV9JTkZPX1JBVEVJRChyYXRlX2luZm8pOwogCi0JaWYgKHJhdGVfaW5mbyAmIE1XTDhLXzg2ODdfUkFURV9JTkZPX1NIT1JUUFJFKQorCWlmIChyYXRlX2luZm8gJiBNV0w4S19TVEFfUkFURV9JTkZPX1NIT1JUUFJFKQogCQlzdGF0dXMtPmZsYWcgfD0gUlhfRkxBR19TSE9SVFBSRTsKLQlpZiAocmF0ZV9pbmZvICYgTVdMOEtfODY4N19SQVRFX0lORk9fNDBNSFopCisJaWYgKHJhdGVfaW5mbyAmIE1XTDhLX1NUQV9SQVRFX0lORk9fNDBNSFopCiAJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHXzQwTUhaOwotCWlmIChyYXRlX2luZm8gJiBNV0w4S184Njg3X1JBVEVfSU5GT19TSE9SVEdJKQorCWlmIChyYXRlX2luZm8gJiBNV0w4S19TVEFfUkFURV9JTkZPX1NIT1JUR0kpCiAJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX1NIT1JUX0dJOwotCWlmIChyYXRlX2luZm8gJiBNV0w4S184Njg3X1JBVEVfSU5GT19NQ1NfRk9STUFUKQorCWlmIChyYXRlX2luZm8gJiBNV0w4S19TVEFfUkFURV9JTkZPX01DU19GT1JNQVQpCiAJCXN0YXR1cy0+ZmxhZyB8PSBSWF9GTEFHX0hUOwogCi0Jc3RhdHVzLT5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKwlpZiAocnhkLT5jaGFubmVsID4gMTQpIHsKKwkJc3RhdHVzLT5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWjsKKwkJaWYgKCEoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19IVCkpCisJCQlzdGF0dXMtPnJhdGVfaWR4IC09IDU7CisJfSBlbHNlIHsKKwkJc3RhdHVzLT5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKKwl9CiAJc3RhdHVzLT5mcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KHJ4ZC0+Y2hhbm5lbCk7CiAKIAkqcW9zID0gcnhkLT5xb3NfY29udHJvbDsKQEAgLTkzNSwxMSArODc4LDExIEBACiAJcmV0dXJuIGxlMTZfdG9fY3B1KHJ4ZC0+cGt0X2xlbik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnhkX29wcyByeGRfODY4N19vcHMgPSB7Ci0JLnJ4ZF9zaXplCT0gc2l6ZW9mKHN0cnVjdCBtd2w4a19yeGRfODY4NyksCi0JLnJ4ZF9pbml0CT0gbXdsOGtfcnhkXzg2ODdfaW5pdCwKLQkucnhkX3JlZmlsbAk9IG13bDhrX3J4ZF84Njg3X3JlZmlsbCwKLQkucnhkX3Byb2Nlc3MJPSBtd2w4a19yeGRfODY4N19wcm9jZXNzLAorc3RhdGljIHN0cnVjdCByeGRfb3BzIHJ4ZF9zdGFfb3BzID0geworCS5yeGRfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgbXdsOGtfcnhkX3N0YSksCisJLnJ4ZF9pbml0CT0gbXdsOGtfcnhkX3N0YV9pbml0LAorCS5yeGRfcmVmaWxsCT0gbXdsOGtfcnhkX3N0YV9yZWZpbGwsCisJLnJ4ZF9wcm9jZXNzCT0gbXdsOGtfcnhkX3N0YV9wcm9jZXNzLAogfTsKIAogCkBAIC0xMTUzLDE2ICsxMDk2LDE4IEBACiAgKiBQYWNrZXQgdHJhbnNtaXNzaW9uLgogICovCiAKLS8qIFRyYW5zbWl0IHBhY2tldCBBQ0sgcG9saWN5ICovCi0jZGVmaW5lIE1XTDhLX1RYRF9BQ0tfUE9MSUNZX05PUk1BTAkJMAotI2RlZmluZSBNV0w4S19UWERfQUNLX1BPTElDWV9CTE9DS0FDSwkJMwotCiAjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfT0sJCQkweDAwMDAwMDAxCiAjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfT0tfUkVUUlkJCTB4MDAwMDAwMDIKICNkZWZpbmUgTVdMOEtfVFhEX1NUQVRVU19PS19NT1JFX1JFVFJZCQkweDAwMDAwMDA0CiAjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfTVVMVElDQVNUX1RYCQkweDAwMDAwMDA4CiAjZGVmaW5lIE1XTDhLX1RYRF9TVEFUVVNfRldfT1dORUQJCTB4ODAwMDAwMDAKIAorI2RlZmluZSBNV0w4S19RT1NfUUxFTl9VTlNQRUMJCQkweGZmMDAKKyNkZWZpbmUgTVdMOEtfUU9TX0FDS19QT0xJQ1lfTUFTSwkJMHgwMDYwCisjZGVmaW5lIE1XTDhLX1FPU19BQ0tfUE9MSUNZX05PUk1BTAkJMHgwMDAwCisjZGVmaW5lIE1XTDhLX1FPU19BQ0tfUE9MSUNZX0JMT0NLQUNLCQkweDAwNjAKKyNkZWZpbmUgTVdMOEtfUU9TX0VPU1AJCQkJMHgwMDEwCisKIHN0cnVjdCBtd2w4a190eF9kZXNjIHsKIAlfX2xlMzIgc3RhdHVzOwogCV9fdTggZGF0YV9yYXRlOwpAQCAtMTE4Nyw4ICsxMTMyLDcgQEAKIAlpbnQgc2l6ZTsKIAlpbnQgaTsKIAotCW1lbXNldCgmdHhxLT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMpKTsKLQl0eHEtPnN0YXRzLmxpbWl0ID0gTVdMOEtfVFhfREVTQ1M7CisJdHhxLT5sZW4gPSAwOwogCXR4cS0+aGVhZCA9IDA7CiAJdHhxLT50YWlsID0gMDsKIApAQCAtMTI2NCw3ICsxMjA4LDcgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogdHhxWyVkXSBsZW49JWQgaGVhZD0lZCB0YWlsPSVkICIKIAkJICAgICAgICJmd19vd25lZD0lZCBkcnZfb3duZWQ9JWQgdW51c2VkPSVkXG4iLAogCQkgICAgICAgd2lwaHlfbmFtZShody0+d2lwaHkpLCBpLAotCQkgICAgICAgdHhxLT5zdGF0cy5sZW4sIHR4cS0+aGVhZCwgdHhxLT50YWlsLAorCQkgICAgICAgdHhxLT5sZW4sIHR4cS0+aGVhZCwgdHhxLT50YWlsLAogCQkgICAgICAgZndfb3duZWQsIGRydl9vd25lZCwgdW51c2VkKTsKIAl9CiB9CkBAIC0xMjcyLDcgKzEyMTYsNyBAQAogLyoKICAqIE11c3QgYmUgY2FsbGVkIHdpdGggcHJpdi0+ZndfbXV0ZXggaGVsZCBhbmQgdHggcXVldWVzIHN0b3BwZWQuCiAgKi8KLSNkZWZpbmUgTVdMOEtfVFhfV0FJVF9USU1FT1VUX01TCTEwMDAKKyNkZWZpbmUgTVdMOEtfVFhfV0FJVF9USU1FT1VUX01TCTUwMDAKIAogc3RhdGljIGludCBtd2w4a190eF93YWl0X2VtcHR5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewpAQCAtMTMxNiw4ICsxMjYwLDggQEAKIAkJfQogCiAJCWlmIChwcml2LT5wZW5kaW5nX3R4X3BrdHMgPCBvbGRjb3VudCkgewotCQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogdGltZW91dCB3YWl0aW5nIGZvciB0eCAiCi0JCQkgICAgICAgInJpbmdzIHRvIGRyYWluICglZCAtPiAlZCBwa3RzKSwgcmV0cnlpbmdcbiIsCisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVzOiB3YWl0aW5nIGZvciB0eCByaW5ncyAiCisJCQkgICAgICAgInRvIGRyYWluICglZCAtPiAlZCBwa3RzKVxuIiwKIAkJCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSksIG9sZGNvdW50LAogCQkJICAgICAgIHByaXYtPnBlbmRpbmdfdHhfcGt0cyk7CiAJCQlyZXRyeSA9IDE7CkBAIC0xMzQyLDEzICsxMjg2LDE1IEBACiAJCSAgICAgTVdMOEtfVFhEX1NUQVRVU19PS19SRVRSWSB8CQlcCiAJCSAgICAgTVdMOEtfVFhEX1NUQVRVU19PS19NT1JFX1JFVFJZKSkKIAotc3RhdGljIHZvaWQgbXdsOGtfdHhxX3JlY2xhaW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBpbmRleCwgaW50IGZvcmNlKQorc3RhdGljIGludAorbXdsOGtfdHhxX3JlY2xhaW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBpbmRleCwgaW50IGxpbWl0LCBpbnQgZm9yY2UpCiB7CiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgKnR4cSA9IHByaXYtPnR4cSArIGluZGV4OwotCWludCB3YWtlID0gMDsKKwlpbnQgcHJvY2Vzc2VkOwogCi0Jd2hpbGUgKHR4cS0+c3RhdHMubGVuID4gMCkgeworCXByb2Nlc3NlZCA9IDA7CisJd2hpbGUgKHR4cS0+bGVuID4gMCAmJiBsaW1pdC0tKSB7CiAJCWludCB0eDsKIAkJc3RydWN0IG13bDhrX3R4X2Rlc2MgKnR4X2Rlc2M7CiAJCXVuc2lnbmVkIGxvbmcgYWRkcjsKQEAgLTEzNzAsOCArMTMxNiw4IEBACiAJCX0KIAogCQl0eHEtPmhlYWQgPSAodHggKyAxKSAlIE1XTDhLX1RYX0RFU0NTOwotCQlCVUdfT04odHhxLT5zdGF0cy5sZW4gPT0gMCk7Ci0JCXR4cS0+c3RhdHMubGVuLS07CisJCUJVR19PTih0eHEtPmxlbiA9PSAwKTsKKwkJdHhxLT5sZW4tLTsKIAkJcHJpdi0+cGVuZGluZ190eF9wa3RzLS07CiAKIAkJYWRkciA9IGxlMzJfdG9fY3B1KHR4X2Rlc2MtPnBrdF9waHlzX2FkZHIpOwpAQCAtMTM5NSwxMSArMTM0MSwxMyBAQAogCiAJCWllZWU4MDIxMV90eF9zdGF0dXNfaXJxc2FmZShodywgc2tiKTsKIAotCQl3YWtlID0gMTsKKwkJcHJvY2Vzc2VkKys7CiAJfQogCi0JaWYgKHdha2UgJiYgcHJpdi0+cmFkaW9fb24gJiYgIW11dGV4X2lzX2xvY2tlZCgmcHJpdi0+ZndfbXV0ZXgpKQorCWlmIChwcm9jZXNzZWQgJiYgcHJpdi0+cmFkaW9fb24gJiYgIW11dGV4X2lzX2xvY2tlZCgmcHJpdi0+ZndfbXV0ZXgpKQogCQlpZWVlODAyMTFfd2FrZV9xdWV1ZShodywgaW5kZXgpOworCisJcmV0dXJuIHByb2Nlc3NlZDsKIH0KIAogLyogbXVzdCBiZSBjYWxsZWQgb25seSB3aGVuIHRoZSBjYXJkJ3MgdHJhbnNtaXQgaXMgY29tcGxldGVseSBoYWx0ZWQgKi8KQEAgLTE0MDgsNyArMTM1Niw3IEBACiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAlzdHJ1Y3QgbXdsOGtfdHhfcXVldWUgKnR4cSA9IHByaXYtPnR4cSArIGluZGV4OwogCi0JbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGluZGV4LCAxKTsKKwltd2w4a190eHFfcmVjbGFpbShodywgaW5kZXgsIElOVF9NQVgsIDEpOwogCiAJa2ZyZWUodHhxLT5za2IpOwogCXR4cS0+c2tiID0gTlVMTDsKQEAgLTE0NDYsMTEgKzEzOTQsOSBAQAogCW13bDhrX3ZpZiA9IE1XTDhLX1ZJRih0eF9pbmZvLT5jb250cm9sLnZpZik7CiAKIAlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVEpIHsKLQkJdTE2IHNlcW5vID0gbXdsOGtfdmlmLT5zZXFubzsKLQogCQl3aC0+c2VxX2N0cmwgJj0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NDVExfRlJBRyk7Ci0JCXdoLT5zZXFfY3RybCB8PSBjcHVfdG9fbGUxNihzZXFubyA8PCA0KTsKLQkJbXdsOGtfdmlmLT5zZXFubyA9IHNlcW5vKysgJSA0MDk2OworCQl3aC0+c2VxX2N0cmwgfD0gY3B1X3RvX2xlMTYobXdsOGtfdmlmLT5zZXFubyk7CisJCW13bDhrX3ZpZi0+c2Vxbm8gKz0gMHgxMDsKIAl9CiAKIAkvKiBTZXR1cCBmaXJtd2FyZSBjb250cm9sIGJpdCBmaWVsZHMgZm9yIGVhY2ggZnJhbWUgdHlwZS4gICovCkBAIC0xNDU5LDI0ICsxNDA1LDE3IEBACiAJaWYgKGllZWU4MDIxMV9pc19tZ210KHdoLT5mcmFtZV9jb250cm9sKSB8fAogCSAgICBpZWVlODAyMTFfaXNfY3RsKHdoLT5mcmFtZV9jb250cm9sKSkgewogCQl0eGRhdGFyYXRlID0gMDsKLQkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9lb3NwKHFvcyk7Ci0JCS8qIFNldCBRdWV1ZSBzaXplIHRvIHVuc3BlY2lmaWVkICovCi0JCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfcWxlbihxb3MsIDB4ZmYpOworCQlxb3MgfD0gTVdMOEtfUU9TX1FMRU5fVU5TUEVDIHwgTVdMOEtfUU9TX0VPU1A7CiAJfSBlbHNlIGlmIChpZWVlODAyMTFfaXNfZGF0YSh3aC0+ZnJhbWVfY29udHJvbCkpIHsKIAkJdHhkYXRhcmF0ZSA9IDE7CiAJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcih3aC0+YWRkcjEpKQogCQkJdHhzdGF0dXMgfD0gTVdMOEtfVFhEX1NUQVRVU19NVUxUSUNBU1RfVFg7CiAKLQkJLyogU2VuZCBwa3QgaW4gYW4gYWdncmVnYXRlIGlmIEFNUERVIGZyYW1lLiAgKi8KKwkJcW9zICY9IH5NV0w4S19RT1NfQUNLX1BPTElDWV9NQVNLOwogCQlpZiAodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0FNUERVKQotCQkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9hY2socW9zLAotCQkJCU1XTDhLX1RYRF9BQ0tfUE9MSUNZX0JMT0NLQUNLKTsKKwkJCXFvcyB8PSBNV0w4S19RT1NfQUNLX1BPTElDWV9CTE9DS0FDSzsKIAkJZWxzZQotCQkJcW9zID0gbXdsOGtfcW9zX3NldGJpdF9hY2socW9zLAotCQkJCU1XTDhLX1RYRF9BQ0tfUE9MSUNZX05PUk1BTCk7Ci0KLQkJaWYgKHFvcyAmIElFRUU4MDIxMV9RT1NfQ09OVFJPTF9BX01TRFVfUFJFU0VOVCkKLQkJCXFvcyA9IG13bDhrX3Fvc19zZXRiaXRfYW1zZHUocW9zKTsKKwkJCXFvcyB8PSBNV0w4S19RT1NfQUNLX1BPTElDWV9OT1JNQUw7CiAJfQogCiAJZG1hID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiLT5kYXRhLApAQCAtMTUwMywxMiArMTQ0MiwxNCBAQAogCXR4LT5wa3RfcGh5c19hZGRyID0gY3B1X3RvX2xlMzIoZG1hKTsKIAl0eC0+cGt0X2xlbiA9IGNwdV90b19sZTE2KHNrYi0+bGVuKTsKIAl0eC0+cmF0ZV9pbmZvID0gMDsKLQl0eC0+cGVlcl9pZCA9IG13bDhrX3ZpZi0+cGVlcl9pZDsKKwlpZiAoIXByaXYtPmFwX2Z3ICYmIHR4X2luZm8tPmNvbnRyb2wuc3RhICE9IE5VTEwpCisJCXR4LT5wZWVyX2lkID0gTVdMOEtfU1RBKHR4X2luZm8tPmNvbnRyb2wuc3RhKS0+cGVlcl9pZDsKKwllbHNlCisJCXR4LT5wZWVyX2lkID0gMDsKIAl3bWIoKTsKIAl0eC0+c3RhdHVzID0gY3B1X3RvX2xlMzIoTVdMOEtfVFhEX1NUQVRVU19GV19PV05FRCB8IHR4c3RhdHVzKTsKIAotCXR4cS0+c3RhdHMuY291bnQrKzsKLQl0eHEtPnN0YXRzLmxlbisrOworCXR4cS0+bGVuKys7CiAJcHJpdi0+cGVuZGluZ190eF9wa3RzKys7CiAKIAl0eHEtPnRhaWwrKzsKQEAgLTE2NTYsNiArMTU5Nyw1NiBAQAogCXJldHVybiByYzsKIH0KIAorc3RhdGljIGludCBtd2w4a19wb3N0X3BlcnZpZl9jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJIHN0cnVjdCBtd2w4a19jbWRfcGt0ICpjbWQpCit7CisJaWYgKHZpZiAhPSBOVUxMKQorCQljbWQtPm1hY2lkID0gTVdMOEtfVklGKHZpZiktPm1hY2lkOworCXJldHVybiBtd2w4a19wb3N0X2NtZChodywgY21kKTsKK30KKworLyoKKyAqIFNldHVwIGNvZGUgc2hhcmVkIGJldHdlZW4gU1RBIGFuZCBBUCBmaXJtd2FyZSBpbWFnZXMuCisgKi8KK3N0YXRpYyB2b2lkIG13bDhrX3NldHVwXzJnaHpfYmFuZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJQlVJTERfQlVHX09OKHNpemVvZihwcml2LT5jaGFubmVsc18yNCkgIT0gc2l6ZW9mKG13bDhrX2NoYW5uZWxzXzI0KSk7CisJbWVtY3B5KHByaXYtPmNoYW5uZWxzXzI0LCBtd2w4a19jaGFubmVsc18yNCwgc2l6ZW9mKG13bDhrX2NoYW5uZWxzXzI0KSk7CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHByaXYtPnJhdGVzXzI0KSAhPSBzaXplb2YobXdsOGtfcmF0ZXNfMjQpKTsKKwltZW1jcHkocHJpdi0+cmF0ZXNfMjQsIG13bDhrX3JhdGVzXzI0LCBzaXplb2YobXdsOGtfcmF0ZXNfMjQpKTsKKworCXByaXYtPmJhbmRfMjQuYmFuZCA9IElFRUU4MDIxMV9CQU5EXzJHSFo7CisJcHJpdi0+YmFuZF8yNC5jaGFubmVscyA9IHByaXYtPmNoYW5uZWxzXzI0OworCXByaXYtPmJhbmRfMjQubl9jaGFubmVscyA9IEFSUkFZX1NJWkUobXdsOGtfY2hhbm5lbHNfMjQpOworCXByaXYtPmJhbmRfMjQuYml0cmF0ZXMgPSBwcml2LT5yYXRlc18yNDsKKwlwcml2LT5iYW5kXzI0Lm5fYml0cmF0ZXMgPSBBUlJBWV9TSVpFKG13bDhrX3JhdGVzXzI0KTsKKworCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmcHJpdi0+YmFuZF8yNDsKK30KKworc3RhdGljIHZvaWQgbXdsOGtfc2V0dXBfNWdoel9iYW5kKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisKKwlCVUlMRF9CVUdfT04oc2l6ZW9mKHByaXYtPmNoYW5uZWxzXzUwKSAhPSBzaXplb2YobXdsOGtfY2hhbm5lbHNfNTApKTsKKwltZW1jcHkocHJpdi0+Y2hhbm5lbHNfNTAsIG13bDhrX2NoYW5uZWxzXzUwLCBzaXplb2YobXdsOGtfY2hhbm5lbHNfNTApKTsKKworCUJVSUxEX0JVR19PTihzaXplb2YocHJpdi0+cmF0ZXNfNTApICE9IHNpemVvZihtd2w4a19yYXRlc181MCkpOworCW1lbWNweShwcml2LT5yYXRlc181MCwgbXdsOGtfcmF0ZXNfNTAsIHNpemVvZihtd2w4a19yYXRlc181MCkpOworCisJcHJpdi0+YmFuZF81MC5iYW5kID0gSUVFRTgwMjExX0JBTkRfNUdIWjsKKwlwcml2LT5iYW5kXzUwLmNoYW5uZWxzID0gcHJpdi0+Y2hhbm5lbHNfNTA7CisJcHJpdi0+YmFuZF81MC5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShtd2w4a19jaGFubmVsc181MCk7CisJcHJpdi0+YmFuZF81MC5iaXRyYXRlcyA9IHByaXYtPnJhdGVzXzUwOworCXByaXYtPmJhbmRfNTAubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUobXdsOGtfcmF0ZXNfNTApOworCisJaHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF81R0haXSA9ICZwcml2LT5iYW5kXzUwOworfQorCiAvKgogICogQ01EX0dFVF9IV19TUEVDIChTVEEgdmVyc2lvbikuCiAgKi8KQEAgLTE2NzgsNiArMTY2OSw4OSBAQAogCV9fbGUzMiB0b3RhbF9yeGQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCisjZGVmaW5lIE1XTDhLX0NBUF9NQVhfQU1TRFUJCTB4MjAwMDAwMDAKKyNkZWZpbmUgTVdMOEtfQ0FQX0dSRUVORklFTEQJCTB4MDgwMDAwMDAKKyNkZWZpbmUgTVdMOEtfQ0FQX0FNUERVCQkJMHgwNDAwMDAwMAorI2RlZmluZSBNV0w4S19DQVBfUlhfU1RCQwkJMHgwMTAwMDAwMAorI2RlZmluZSBNV0w4S19DQVBfVFhfU1RCQwkJMHgwMDgwMDAwMAorI2RlZmluZSBNV0w4S19DQVBfU0hPUlRHSV80ME1IWgkJMHgwMDQwMDAwMAorI2RlZmluZSBNV0w4S19DQVBfU0hPUlRHSV8yME1IWgkJMHgwMDIwMDAwMAorI2RlZmluZSBNV0w4S19DQVBfUlhfQU5URU5OQV9NQVNLCTB4MDAwZTAwMDAKKyNkZWZpbmUgTVdMOEtfQ0FQX1RYX0FOVEVOTkFfTUFTSwkweDAwMDFjMDAwCisjZGVmaW5lIE1XTDhLX0NBUF9ERUxBWV9CQQkJMHgwMDAwMzAwMAorI2RlZmluZSBNV0w4S19DQVBfTUlNTwkJCTB4MDAwMDAyMDAKKyNkZWZpbmUgTVdMOEtfQ0FQXzQwTUhaCQkJMHgwMDAwMDEwMAorI2RlZmluZSBNV0w4S19DQVBfQkFORF9NQVNLCQkweDAwMDAwMDA3CisjZGVmaW5lIE1XTDhLX0NBUF81R0haCQkJMHgwMDAwMDAwNAorI2RlZmluZSBNV0w4S19DQVBfMkdIWjQJCQkweDAwMDAwMDAxCisKK3N0YXRpYyB2b2lkCittd2w4a19zZXRfaHRfY2FwcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpiYW5kLCB1MzIgY2FwKQoreworCWludCByeF9zdHJlYW1zOworCWludCB0eF9zdHJlYW1zOworCisJYmFuZC0+aHRfY2FwLmh0X3N1cHBvcnRlZCA9IDE7CisKKwlpZiAoY2FwICYgTVdMOEtfQ0FQX01BWF9BTVNEVSkKKwkJYmFuZC0+aHRfY2FwLmNhcCB8PSBJRUVFODAyMTFfSFRfQ0FQX01BWF9BTVNEVTsKKwlpZiAoY2FwICYgTVdMOEtfQ0FQX0dSRUVORklFTEQpCisJCWJhbmQtPmh0X2NhcC5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEOworCWlmIChjYXAgJiBNV0w4S19DQVBfQU1QRFUpIHsKKwkJaHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19BTVBEVV9BR0dSRUdBVElPTjsKKwkJYmFuZC0+aHRfY2FwLmFtcGR1X2ZhY3RvciA9IElFRUU4MDIxMV9IVF9NQVhfQU1QRFVfNjRLOworCQliYW5kLT5odF9jYXAuYW1wZHVfZGVuc2l0eSA9IElFRUU4MDIxMV9IVF9NUERVX0RFTlNJVFlfTk9ORTsKKwl9CisJaWYgKGNhcCAmIE1XTDhLX0NBUF9SWF9TVEJDKQorCQliYW5kLT5odF9jYXAuY2FwIHw9IElFRUU4MDIxMV9IVF9DQVBfUlhfU1RCQzsKKwlpZiAoY2FwICYgTVdMOEtfQ0FQX1RYX1NUQkMpCisJCWJhbmQtPmh0X2NhcC5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9UWF9TVEJDOworCWlmIChjYXAgJiBNV0w4S19DQVBfU0hPUlRHSV80ME1IWikKKwkJYmFuZC0+aHRfY2FwLmNhcCB8PSBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKKwlpZiAoY2FwICYgTVdMOEtfQ0FQX1NIT1JUR0lfMjBNSFopCisJCWJhbmQtPmh0X2NhcC5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9TR0lfMjA7CisJaWYgKGNhcCAmIE1XTDhLX0NBUF9ERUxBWV9CQSkKKwkJYmFuZC0+aHRfY2FwLmNhcCB8PSBJRUVFODAyMTFfSFRfQ0FQX0RFTEFZX0JBOworCWlmIChjYXAgJiBNV0w4S19DQVBfNDBNSFopCisJCWJhbmQtPmh0X2NhcC5jYXAgfD0gSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7CisKKwlyeF9zdHJlYW1zID0gaHdlaWdodDMyKGNhcCAmIE1XTDhLX0NBUF9SWF9BTlRFTk5BX01BU0spOworCXR4X3N0cmVhbXMgPSBod2VpZ2h0MzIoY2FwICYgTVdMOEtfQ0FQX1RYX0FOVEVOTkFfTUFTSyk7CisKKwliYW5kLT5odF9jYXAubWNzLnJ4X21hc2tbMF0gPSAweGZmOworCWlmIChyeF9zdHJlYW1zID49IDIpCisJCWJhbmQtPmh0X2NhcC5tY3MucnhfbWFza1sxXSA9IDB4ZmY7CisJaWYgKHJ4X3N0cmVhbXMgPj0gMykKKwkJYmFuZC0+aHRfY2FwLm1jcy5yeF9tYXNrWzJdID0gMHhmZjsKKwliYW5kLT5odF9jYXAubWNzLnJ4X21hc2tbNF0gPSAweDAxOworCWJhbmQtPmh0X2NhcC5tY3MudHhfcGFyYW1zID0gSUVFRTgwMjExX0hUX01DU19UWF9ERUZJTkVEOworCisJaWYgKHJ4X3N0cmVhbXMgIT0gdHhfc3RyZWFtcykgeworCQliYW5kLT5odF9jYXAubWNzLnR4X3BhcmFtcyB8PSBJRUVFODAyMTFfSFRfTUNTX1RYX1JYX0RJRkY7CisJCWJhbmQtPmh0X2NhcC5tY3MudHhfcGFyYW1zIHw9ICh0eF9zdHJlYW1zIC0gMSkgPDwKKwkJCQlJRUVFODAyMTFfSFRfTUNTX1RYX01BWF9TVFJFQU1TX1NISUZUOworCX0KK30KKworc3RhdGljIHZvaWQKK213bDhrX3NldF9jYXBzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgY2FwcykKK3sKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCisJaWYgKChjYXBzICYgTVdMOEtfQ0FQXzJHSFo0KSB8fCAhKGNhcHMgJiBNV0w4S19DQVBfQkFORF9NQVNLKSkgeworCQltd2w4a19zZXR1cF8yZ2h6X2JhbmQoaHcpOworCQlpZiAoY2FwcyAmIE1XTDhLX0NBUF9NSU1PKQorCQkJbXdsOGtfc2V0X2h0X2NhcHMoaHcsICZwcml2LT5iYW5kXzI0LCBjYXBzKTsKKwl9CisKKwlpZiAoY2FwcyAmIE1XTDhLX0NBUF81R0haKSB7CisJCW13bDhrX3NldHVwXzVnaHpfYmFuZChodyk7CisJCWlmIChjYXBzICYgTVdMOEtfQ0FQX01JTU8pCisJCQltd2w4a19zZXRfaHRfY2FwcyhodywgJnByaXYtPmJhbmRfNTAsIGNhcHMpOworCX0KK30KKwogc3RhdGljIGludCBtd2w4a19jbWRfZ2V0X2h3X3NwZWNfc3RhKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CkBAIC0xNzA4LDYgKzE3ODIsOSBAQAogCQlwcml2LT5udW1fbWNhZGRycyA9IGxlMTZfdG9fY3B1KGNtZC0+bnVtX21jYWRkcnMpOwogCQlwcml2LT5md19yZXYgPSBsZTMyX3RvX2NwdShjbWQtPmZ3X3Jldik7CiAJCXByaXYtPmh3X3JldiA9IGNtZC0+aHdfcmV2OworCQltd2w4a19zZXRfY2FwcyhodywgbGUzMl90b19jcHUoY21kLT5jYXBzKSk7CisJCXByaXYtPmFwX21hY2lkc19zdXBwb3J0ZWQgPSAweDAwMDAwMDAwOworCQlwcml2LT5zdGFfbWFjaWRzX3N1cHBvcnRlZCA9IDB4MDAwMDAwMDE7CiAJfQogCiAJa2ZyZWUoY21kKTsKQEAgLTE3NjEsNiArMTgzOCw5IEBACiAJCXByaXYtPm51bV9tY2FkZHJzID0gbGUxNl90b19jcHUoY21kLT5udW1fbWNhZGRycyk7CiAJCXByaXYtPmZ3X3JldiA9IGxlMzJfdG9fY3B1KGNtZC0+ZndfcmV2KTsKIAkJcHJpdi0+aHdfcmV2ID0gY21kLT5od19yZXY7CisJCW13bDhrX3NldHVwXzJnaHpfYmFuZChodyk7CisJCXByaXYtPmFwX21hY2lkc19zdXBwb3J0ZWQgPSAweDAwMDAwMGZmOworCQlwcml2LT5zdGFfbWFjaWRzX3N1cHBvcnRlZCA9IDB4MDAwMDAwMDA7CiAKIAkJb2ZmID0gbGUzMl90b19jcHUoY21kLT53Y2JiYXNlMCkgJiAweGZmZmY7CiAJCWlvd3JpdGUzMihjcHVfdG9fbGUzMihwcml2LT50eHFbMF0udHhkX2RtYSksIHByaXYtPnNyYW0gKyBvZmYpOwpAQCAtMTgwNiw3ICsxODg2LDkgQEAKIAlfX2xlMzIgdG90YWxfcnhkOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAotI2RlZmluZSBNV0w4S19TRVRfSFdfU1BFQ19GTEFHX0hPU1RfREVDUl9NR01UCTB4MDAwMDAwODAKKyNkZWZpbmUgTVdMOEtfU0VUX0hXX1NQRUNfRkxBR19IT1NUX0RFQ1JfTUdNVAkJMHgwMDAwMDA4MAorI2RlZmluZSBNV0w4S19TRVRfSFdfU1BFQ19GTEFHX0hPU1RGT1JNX1BST0JFUkVTUAkweDAwMDAwMDIwCisjZGVmaW5lIE1XTDhLX1NFVF9IV19TUEVDX0ZMQUdfSE9TVEZPUk1fQkVBQ09OCQkweDAwMDAwMDEwCiAKIHN0YXRpYyBpbnQgbXdsOGtfY21kX3NldF9od19zcGVjKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KQogewpAQCAtMTgyNyw3ICsxOTA5LDkgQEAKIAljbWQtPm51bV90eF9xdWV1ZXMgPSBjcHVfdG9fbGUzMihNV0w4S19UWF9RVUVVRVMpOwogCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKIAkJY21kLT50eF9xdWV1ZV9wdHJzW2ldID0gY3B1X3RvX2xlMzIocHJpdi0+dHhxW2ldLnR4ZF9kbWEpOwotCWNtZC0+ZmxhZ3MgPSBjcHVfdG9fbGUzMihNV0w4S19TRVRfSFdfU1BFQ19GTEFHX0hPU1RfREVDUl9NR01UKTsKKwljbWQtPmZsYWdzID0gY3B1X3RvX2xlMzIoTVdMOEtfU0VUX0hXX1NQRUNfRkxBR19IT1NUX0RFQ1JfTUdNVCB8CisJCQkJIE1XTDhLX1NFVF9IV19TUEVDX0ZMQUdfSE9TVEZPUk1fUFJPQkVSRVNQIHwKKwkJCQkgTVdMOEtfU0VUX0hXX1NQRUNfRkxBR19IT1NURk9STV9CRUFDT04pOwogCWNtZC0+bnVtX3R4X2Rlc2NfcGVyX3F1ZXVlID0gY3B1X3RvX2xlMzIoTVdMOEtfVFhfREVTQ1MpOwogCWNtZC0+dG90YWxfcnhkID0gY3B1X3RvX2xlMzIoTVdMOEtfUlhfREVTQ1MpOwogCkBAIC0xODk3LDkgKzE5ODEsOSBAQAogfQogCiAvKgotICogQ01EXzgwMl8xMV9HRVRfU1RBVC4KKyAqIENNRF9HRVRfU1RBVC4KICAqLwotc3RydWN0IG13bDhrX2NtZF84MDJfMTFfZ2V0X3N0YXQgeworc3RydWN0IG13bDhrX2NtZF9nZXRfc3RhdCB7CiAJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOwogCV9fbGUzMiBzdGF0c1s2NF07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwpAQCAtMTkwOSwxMCArMTk5MywxMCBAQAogI2RlZmluZSBNV0w4S19TVEFUX0ZDU19FUlJPUgkyNAogI2RlZmluZSBNV0w4S19TVEFUX1JUU19TVUNDRVNTCTExCiAKLXN0YXRpYyBpbnQgbXdsOGtfY21kXzgwMl8xMV9nZXRfc3RhdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2xvd19sZXZlbF9zdGF0cyAqc3RhdHMpCitzdGF0aWMgaW50IG13bDhrX2NtZF9nZXRfc3RhdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKIHsKLQlzdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9nZXRfc3RhdCAqY21kOworCXN0cnVjdCBtd2w4a19jbWRfZ2V0X3N0YXQgKmNtZDsKIAlpbnQgcmM7CiAKIAljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CkBAIC0xOTM5LDkgKzIwMjMsOSBAQAogfQogCiAvKgotICogQ01EXzgwMl8xMV9SQURJT19DT05UUk9MLgorICogQ01EX1JBRElPX0NPTlRST0wuCiAgKi8KLXN0cnVjdCBtd2w4a19jbWRfODAyXzExX3JhZGlvX2NvbnRyb2wgeworc3RydWN0IG13bDhrX2NtZF9yYWRpb19jb250cm9sIHsKIAlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CiAJX19sZTE2IGFjdGlvbjsKIAlfX2xlMTYgY29udHJvbDsKQEAgLTE5NDksMTAgKzIwMzMsMTAgQEAKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0YXRpYyBpbnQKLW13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBlbmFibGUsIGJvb2wgZm9yY2UpCittd2w4a19jbWRfcmFkaW9fY29udHJvbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBlbmFibGUsIGJvb2wgZm9yY2UpCiB7CiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKLQlzdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sICpjbWQ7CisJc3RydWN0IG13bDhrX2NtZF9yYWRpb19jb250cm9sICpjbWQ7CiAJaW50IHJjOwogCiAJaWYgKGVuYWJsZSA9PSBwcml2LT5yYWRpb19vbiAmJiAhZm9yY2UpCkBAIC0xOTc3LDM2ICsyMDYxLDMyIEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fZGlzYWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3JhZGlvX2Rpc2FibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCiB7Ci0JcmV0dXJuIG13bDhrX2NtZF84MDJfMTFfcmFkaW9fY29udHJvbChodywgMCwgMCk7CisJcmV0dXJuIG13bDhrX2NtZF9yYWRpb19jb250cm9sKGh3LCAwLCAwKTsKIH0KIAotc3RhdGljIGludCBtd2w4a19jbWRfODAyXzExX3JhZGlvX2VuYWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3JhZGlvX2VuYWJsZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKLQlyZXR1cm4gbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LCAxLCAwKTsKKwlyZXR1cm4gbXdsOGtfY21kX3JhZGlvX2NvbnRyb2woaHcsIDEsIDApOwogfQogCiBzdGF0aWMgaW50CiBtd2w4a19zZXRfcmFkaW9fcHJlYW1ibGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgc2hvcnRfcHJlYW1ibGUpCiB7Ci0Jc3RydWN0IG13bDhrX3ByaXYgKnByaXY7Ci0KLQlpZiAoaHcgPT0gTlVMTCB8fCBody0+cHJpdiA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlwcml2ID0gaHctPnByaXY7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKIAogCXByaXYtPnJhZGlvX3Nob3J0X3ByZWFtYmxlID0gc2hvcnRfcHJlYW1ibGU7CiAKLQlyZXR1cm4gbXdsOGtfY21kXzgwMl8xMV9yYWRpb19jb250cm9sKGh3LCAxLCAxKTsKKwlyZXR1cm4gbXdsOGtfY21kX3JhZGlvX2NvbnRyb2woaHcsIDEsIDEpOwogfQogCiAvKgotICogQ01EXzgwMl8xMV9SRl9UWF9QT1dFUi4KKyAqIENNRF9SRl9UWF9QT1dFUi4KICAqLwogI2RlZmluZSBNV0w4S19UWF9QT1dFUl9MRVZFTF9UT1RBTAk4CiAKLXN0cnVjdCBtd2w4a19jbWRfODAyXzExX3JmX3R4X3Bvd2VyIHsKK3N0cnVjdCBtd2w4a19jbWRfcmZfdHhfcG93ZXIgewogCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKIAlfX2xlMTYgYWN0aW9uOwogCV9fbGUxNiBzdXBwb3J0X2xldmVsOwpAQCAtMjAxNSw5ICsyMDk1LDkgQEAKIAlfX2xlMTYgcG93ZXJfbGV2ZWxfbGlzdFtNV0w4S19UWF9QT1dFUl9MRVZFTF9UT1RBTF07CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi1zdGF0aWMgaW50IG13bDhrX2NtZF84MDJfMTFfcmZfdHhfcG93ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBkQm0pCitzdGF0aWMgaW50IG13bDhrX2NtZF9yZl90eF9wb3dlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgaW50IGRCbSkKIHsKLQlzdHJ1Y3QgbXdsOGtfY21kXzgwMl8xMV9yZl90eF9wb3dlciAqY21kOworCXN0cnVjdCBtd2w4a19jbWRfcmZfdHhfcG93ZXIgKmNtZDsKIAlpbnQgcmM7CiAKIAljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CkBAIC0yMDY5LDYgKzIxNDksMzYgQEAKIH0KIAogLyoKKyAqIENNRF9TRVRfQkVBQ09OLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX3NldF9iZWFjb24geworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYmVhY29uX2xlbjsKKwlfX3U4IGJlYWNvblswXTsKK307CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3NldF9iZWFjb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggKmJlYWNvbiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9iZWFjb24gKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSArIGxlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX0JFQUNPTik7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpICsgbGVuKTsKKwljbWQtPmJlYWNvbl9sZW4gPSBjcHVfdG9fbGUxNihsZW4pOworCW1lbWNweShjbWQtPmJlYWNvbiwgYmVhY29uLCBsZW4pOworCisJcmMgPSBtd2w4a19wb3N0X3BlcnZpZl9jbWQoaHcsIHZpZiwgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgogICogQ01EX1NFVF9QUkVfU0NBTi4KICAqLwogc3RydWN0IG13bDhrX2NtZF9zZXRfcHJlX3NjYW4gewpAQCAtMjEwMyw3ICsyMjEzLDcgQEAKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0YXRpYyBpbnQKLW13bDhrX2NtZF9zZXRfcG9zdF9zY2FuKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3U4ICptYWMpCittd2w4a19jbWRfc2V0X3Bvc3Rfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgY29uc3QgX191OCAqbWFjKQogewogCXN0cnVjdCBtd2w4a19jbWRfc2V0X3Bvc3Rfc2NhbiAqY21kOwogCWludCByYzsKQEAgLTIxMzQsOCArMjI0NCw5IEBACiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiBzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfcmZfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsKQorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgKmNvbmYpCiB7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsID0gY29uZi0+Y2hhbm5lbDsKIAlzdHJ1Y3QgbXdsOGtfY21kX3NldF9yZl9jaGFubmVsICpjbWQ7CiAJaW50IHJjOwogCkBAIC0yMTQ3LDEwICsyMjU4LDIwMSBAQAogCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CiAJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUKTsKIAljbWQtPmN1cnJlbnRfY2hhbm5lbCA9IGNoYW5uZWwtPmh3X3ZhbHVlOworCiAJaWYgKGNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKLQkJY21kLT5jaGFubmVsX2ZsYWdzID0gY3B1X3RvX2xlMzIoMHgwMDAwMDA4MSk7Ci0JZWxzZQotCQljbWQtPmNoYW5uZWxfZmxhZ3MgPSBjcHVfdG9fbGUzMigweDAwMDAwMDAwKTsKKwkJY21kLT5jaGFubmVsX2ZsYWdzIHw9IGNwdV90b19sZTMyKDB4MDAwMDAwMDEpOworCWVsc2UgaWYgKGNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKKwkJY21kLT5jaGFubmVsX2ZsYWdzIHw9IGNwdV90b19sZTMyKDB4MDAwMDAwMDQpOworCisJaWYgKGNvbmYtPmNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fTk9fSFQgfHwKKwkgICAgY29uZi0+Y2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDIwKQorCQljbWQtPmNoYW5uZWxfZmxhZ3MgfD0gY3B1X3RvX2xlMzIoMHgwMDAwMDA4MCk7CisJZWxzZSBpZiAoY29uZi0+Y2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMpCisJCWNtZC0+Y2hhbm5lbF9mbGFncyB8PSBjcHVfdG9fbGUzMigweDAwMDAwMTkwMCk7CisJZWxzZSBpZiAoY29uZi0+Y2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUykKKwkJY21kLT5jaGFubmVsX2ZsYWdzIHw9IGNwdV90b19sZTMyKDB4MDAwMDAwOTAwKTsKKworCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfQUlELgorICovCisjZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfRElTQUJMRUQJCQkweDAwCisjZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfMTFHCQkJCTB4MDcKKyNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF8xMU5fSFRfNDBNSFpfT05MWQkJMHgwMgorI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UXzExTl9IVF9BTEwJCQkweDA2CisKK3N0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3NldF9haWQgeworCXN0cnVjdAltd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYJYWlkOworCisJIC8qIEFQJ3MgTUFDIGFkZHJlc3MgKEJTU0lEKSAqLworCV9fdTgJYnNzaWRbRVRIX0FMRU5dOworCV9fbGUxNglwcm90ZWN0aW9uX21vZGU7CisJX191OAlzdXBwX3JhdGVzWzE0XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyB2b2lkIGxlZ2FjeV9yYXRlX21hc2tfdG9fYXJyYXkodTggKnJhdGVzLCB1MzIgbWFzaykKK3sKKwlpbnQgaTsKKwlpbnQgajsKKworCS8qCisJICogQ2xlYXIgbm9uc3RhbmRhcmQgcmF0ZXMgNCBhbmQgMTMuCisJICovCisJbWFzayAmPSAweDFmZWY7CisKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IDE0OyBpKyspIHsKKwkJaWYgKG1hc2sgJiAoMSA8PCBpKSkKKwkJCXJhdGVzW2orK10gPSBtd2w4a19yYXRlc18yNFtpXS5od192YWx1ZTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK213bDhrX2NtZF9zZXRfYWlkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHUzMiBsZWdhY3lfcmF0ZV9tYXNrKQoreworCXN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3NldF9haWQgKmNtZDsKKwl1MTYgcHJvdF9tb2RlOworCWludCByYzsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfQUlEKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWlkID0gY3B1X3RvX2xlMTYodmlmLT5ic3NfY29uZi5haWQpOworCW1lbWNweShjbWQtPmJzc2lkLCB2aWYtPmJzc19jb25mLmJzc2lkLCBFVEhfQUxFTik7CisKKwlpZiAodmlmLT5ic3NfY29uZi51c2VfY3RzX3Byb3QpIHsKKwkJcHJvdF9tb2RlID0gTVdMOEtfRlJBTUVfUFJPVF8xMUc7CisJfSBlbHNlIHsKKwkJc3dpdGNoICh2aWYtPmJzc19jb25mLmh0X29wZXJhdGlvbl9tb2RlICYKKwkJCUlFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT04pIHsKKwkJY2FzZSBJRUVFODAyMTFfSFRfT1BfTU9ERV9QUk9URUNUSU9OXzIwTUhaOgorCQkJcHJvdF9tb2RlID0gTVdMOEtfRlJBTUVfUFJPVF8xMU5fSFRfNDBNSFpfT05MWTsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT05fTk9OSFRfTUlYRUQ6CisJCQlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UXzExTl9IVF9BTEw7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfRElTQUJMRUQ7CisJCQlicmVhazsKKwkJfQorCX0KKwljbWQtPnByb3RlY3Rpb25fbW9kZSA9IGNwdV90b19sZTE2KHByb3RfbW9kZSk7CisKKwlsZWdhY3lfcmF0ZV9tYXNrX3RvX2FycmF5KGNtZC0+c3VwcF9yYXRlcywgbGVnYWN5X3JhdGVfbWFzayk7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX1JBVEUuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3JhdGUgeworCXN0cnVjdAltd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX3U4CWxlZ2FjeV9yYXRlc1sxNF07CisKKwkvKiBCaXRtYXAgZm9yIHN1cHBvcnRlZCBNQ1MgY29kZXMuICAqLworCV9fdTgJbWNzX3NldFsxNl07CisJX191OAlyZXNlcnZlZFsxNl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50Cittd2w4a19jbWRfc2V0X3JhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCSAgIHUzMiBsZWdhY3lfcmF0ZV9tYXNrLCB1OCAqbWNzX3JhdGVzKQoreworCXN0cnVjdCBtd2w4a19jbWRfc2V0X3JhdGUgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX1JBVEUpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJbGVnYWN5X3JhdGVfbWFza190b19hcnJheShjbWQtPmxlZ2FjeV9yYXRlcywgbGVnYWN5X3JhdGVfbWFzayk7CisJbWVtY3B5KGNtZC0+bWNzX3NldCwgbWNzX3JhdGVzLCAxNik7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfRklOQUxJWkVfSk9JTi4KKyAqLworI2RlZmluZSBNV0w4S19GSl9CRUFDT05fTUFYTEVOCTEyOAorCitzdHJ1Y3QgbXdsOGtfY21kX2ZpbmFsaXplX2pvaW4geworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMzIgc2xlZXBfaW50ZXJ2YWw7CS8qIE51bWJlciBvZiBiZWFjb24gcGVyaW9kcyB0byBzbGVlcCAqLworCV9fdTggYmVhY29uX2RhdGFbTVdMOEtfRkpfQkVBQ09OX01BWExFTl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9maW5hbGl6ZV9qb2luKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB2b2lkICpmcmFtZSwKKwkJCQkgICBpbnQgZnJhbWVsZW4sIGludCBkdGltKQoreworCXN0cnVjdCBtd2w4a19jbWRfZmluYWxpemVfam9pbiAqY21kOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqcGF5bG9hZCA9IGZyYW1lOworCWludCBwYXlsb2FkX2xlbjsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX0ZJTkFMSVpFX0pPSU4pOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5zbGVlcF9pbnRlcnZhbCA9IGNwdV90b19sZTMyKGR0aW0gPyBkdGltIDogMSk7CisKKwlwYXlsb2FkX2xlbiA9IGZyYW1lbGVuIC0gaWVlZTgwMjExX2hkcmxlbihwYXlsb2FkLT5mcmFtZV9jb250cm9sKTsKKwlpZiAocGF5bG9hZF9sZW4gPCAwKQorCQlwYXlsb2FkX2xlbiA9IDA7CisJZWxzZSBpZiAocGF5bG9hZF9sZW4gPiBNV0w4S19GSl9CRUFDT05fTUFYTEVOKQorCQlwYXlsb2FkX2xlbiA9IE1XTDhLX0ZKX0JFQUNPTl9NQVhMRU47CisKKwltZW1jcHkoY21kLT5iZWFjb25fZGF0YSwgJnBheWxvYWQtPnUuYmVhY29uLCBwYXlsb2FkX2xlbik7CisKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfU0VUX1JUU19USFJFU0hPTEQuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3J0c190aHJlc2hvbGQgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMTYgYWN0aW9uOworCV9fbGUxNiB0aHJlc2hvbGQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50Cittd2w4a19jbWRfc2V0X3J0c190aHJlc2hvbGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBydHNfdGhyZXNoKQoreworCXN0cnVjdCBtd2w4a19jbWRfc2V0X3J0c190aHJlc2hvbGQgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfUlRTX1RIUkVTSE9MRCk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpOworCWNtZC0+dGhyZXNob2xkID0gY3B1X3RvX2xlMTYocnRzX3RocmVzaCk7CiAKIAlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOwogCWtmcmVlKGNtZCk7CkBAIC0yMTg4LDE5NCArMjQ5MCw2IEBACiB9CiAKIC8qCi0gKiBDTURfTUlNT19DT05GSUcuCi0gKi8KLXN0cnVjdCBtd2w4a19jbWRfbWltb19jb25maWcgewotCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKLQlfX2xlMzIgYWN0aW9uOwotCV9fdTggcnhfYW50ZW5uYV9tYXA7Ci0JX191OCB0eF9hbnRlbm5hX21hcDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0YXRpYyBpbnQgbXdsOGtfY21kX21pbW9fY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3U4IHJ4LCBfX3U4IHR4KQotewotCXN0cnVjdCBtd2w4a19jbWRfbWltb19jb25maWcgKmNtZDsKLQlpbnQgcmM7Ci0KLQljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNtZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfTUlNT19DT05GSUcpOwotCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7Ci0JY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUzMigodTMyKU1XTDhLX0NNRF9TRVQpOwotCWNtZC0+cnhfYW50ZW5uYV9tYXAgPSByeDsKLQljbWQtPnR4X2FudGVubmFfbWFwID0gdHg7Ci0KLQlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOwotCWtmcmVlKGNtZCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBDTURfRU5BQkxFX1NOSUZGRVIuCi0gKi8KLXN0cnVjdCBtd2w4a19jbWRfZW5hYmxlX3NuaWZmZXIgewotCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKLQlfX2xlMzIgYWN0aW9uOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RhdGljIGludCBtd2w4a19lbmFibGVfc25pZmZlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBlbmFibGUpCi17Ci0Jc3RydWN0IG13bDhrX2NtZF9lbmFibGVfc25pZmZlciAqY21kOwotCWludCByYzsKLQotCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY21kID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9FTkFCTEVfU05JRkZFUik7Ci0JY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKLQljbWQtPmFjdGlvbiA9IGNwdV90b19sZTMyKCEhZW5hYmxlKTsKLQotCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7Ci0Ja2ZyZWUoY21kKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoKLSAqIENNRF9TRVRfTUFDX0FERFIuCi0gKi8KLXN0cnVjdCBtd2w4a19jbWRfc2V0X21hY19hZGRyIHsKLQlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7Ci0JdW5pb24gewotCQlzdHJ1Y3QgewotCQkJX19sZTE2IG1hY190eXBlOwotCQkJX191OCBtYWNfYWRkcltFVEhfQUxFTl07Ci0JCX0gbWJzczsKLQkJX191OCBtYWNfYWRkcltFVEhfQUxFTl07Ci0JfTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0YXRpYyBpbnQgbXdsOGtfc2V0X21hY19hZGRyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1OCAqbWFjKQotewotCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0Jc3RydWN0IG13bDhrX2NtZF9zZXRfbWFjX2FkZHIgKmNtZDsKLQlpbnQgcmM7Ci0KLQljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNtZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX01BQ19BRERSKTsKLQljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOwotCWlmIChwcml2LT5hcF9mdykgewotCQljbWQtPm1ic3MubWFjX3R5cGUgPSAwOwotCQltZW1jcHkoY21kLT5tYnNzLm1hY19hZGRyLCBtYWMsIEVUSF9BTEVOKTsKLQl9IGVsc2UgewotCQltZW1jcHkoY21kLT5tYWNfYWRkciwgbWFjLCBFVEhfQUxFTik7Ci0JfQotCi0JcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKLQlrZnJlZShjbWQpOwotCi0JcmV0dXJuIHJjOwotfQotCi0KLS8qCi0gKiBDTURfU0VUX1JBVEVBREFQVF9NT0RFLgotICovCi1zdHJ1Y3QgbXdsOGtfY21kX3NldF9yYXRlX2FkYXB0X21vZGUgewotCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKLQlfX2xlMTYgYWN0aW9uOwotCV9fbGUxNiBtb2RlOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RhdGljIGludCBtd2w4a19jbWRfc2V0cmF0ZWFkYXB0bW9kZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgX191MTYgbW9kZSkKLXsKLQlzdHJ1Y3QgbXdsOGtfY21kX3NldF9yYXRlX2FkYXB0X21vZGUgKmNtZDsKLQlpbnQgcmM7Ci0KLQljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNtZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX1JBVEVBREFQVF9NT0RFKTsKLQljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOwotCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVCk7Ci0JY21kLT5tb2RlID0gY3B1X3RvX2xlMTYobW9kZSk7Ci0KLQlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOwotCWtmcmVlKGNtZCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBDTURfU0VUX1dNTV9NT0RFLgotICovCi1zdHJ1Y3QgbXdsOGtfY21kX3NldF93bW0gewotCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKLQlfX2xlMTYgYWN0aW9uOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RhdGljIGludCBtd2w4a19zZXRfd21tKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGVuYWJsZSkKLXsKLQlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCXN0cnVjdCBtd2w4a19jbWRfc2V0X3dtbSAqY21kOwotCWludCByYzsKLQotCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY21kID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfV01NX01PREUpOwotCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7Ci0JY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNighIWVuYWJsZSk7Ci0KLQlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOwotCWtmcmVlKGNtZCk7Ci0KLQlpZiAoIXJjKQotCQlwcml2LT53bW1fZW5hYmxlZCA9IGVuYWJsZTsKLQotCXJldHVybiByYzsKLX0KLQotLyoKLSAqIENNRF9TRVRfUlRTX1RIUkVTSE9MRC4KLSAqLwotc3RydWN0IG13bDhrX2NtZF9ydHNfdGhyZXNob2xkIHsKLQlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7Ci0JX19sZTE2IGFjdGlvbjsKLQlfX2xlMTYgdGhyZXNob2xkOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RhdGljIGludCBtd2w4a19ydHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgICAgIHUxNiBhY3Rpb24sIHUxNiB0aHJlc2hvbGQpCi17Ci0Jc3RydWN0IG13bDhrX2NtZF9ydHNfdGhyZXNob2xkICpjbWQ7Ci0JaW50IHJjOwotCi0JY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwotCWlmIChjbWQgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1JUU19USFJFU0hPTEQpOwotCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7Ci0JY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihhY3Rpb24pOwotCWNtZC0+dGhyZXNob2xkID0gY3B1X3RvX2xlMTYodGhyZXNob2xkKTsKLQotCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7Ci0Ja2ZyZWUoY21kKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoKICAqIENNRF9TRVRfRURDQV9QQVJBTVMuCiAgKi8KIHN0cnVjdCBtd2w4a19jbWRfc2V0X2VkY2FfcGFyYW1zIHsKQEAgLTI0MjYsOSArMjU0MCw5IEBACiAJCQkJIE1XTDhLX1NFVF9FRENBX0FJRlMpCiAKIHN0YXRpYyBpbnQKLW13bDhrX3NldF9lZGNhX3BhcmFtcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgX191OCBxbnVtLAotCQlfX3UxNiBjd19taW4sIF9fdTE2IGN3X21heCwKLQkJX191OCBhaWZzLCBfX3UxNiB0eG9wKQorbXdsOGtfY21kX3NldF9lZGNhX3BhcmFtcyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgX191OCBxbnVtLAorCQkJICBfX3UxNiBjd19taW4sIF9fdTE2IGN3X21heCwKKwkJCSAgX191OCBhaWZzLCBfX3UxNiB0eG9wKQogewogCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CiAJc3RydWN0IG13bDhrX2NtZF9zZXRfZWRjYV9wYXJhbXMgKmNtZDsKQEAgLTI0MzgsMTIgKzI1NTIsNiBAQAogCWlmIChjbWQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKgotCSAqIFF1ZXVlcyAwIChCRSkgYW5kIDEgKEJLKSBhcmUgc3dhcHBlZCBpbiBoYXJkd2FyZSBmb3IKLQkgKiB0aGlzIGNhbGwuCi0JICovCi0JcW51bSBePSAhKHFudW0gPj4gMSk7Ci0KIAljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9FRENBX1BBUkFNUyk7CiAJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKIAljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX1NFVF9FRENBX0FMTCk7CkBAIC0yNDY3LDM5ICsyNTc1LDYwIEBACiB9CiAKIC8qCi0gKiBDTURfRklOQUxJWkVfSk9JTi4KKyAqIENNRF9TRVRfV01NX01PREUuCiAgKi8KLSNkZWZpbmUgTVdMOEtfRkpfQkVBQ09OX01BWExFTgkxMjgKLQotc3RydWN0IG13bDhrX2NtZF9maW5hbGl6ZV9qb2luIHsKK3N0cnVjdCBtd2w4a19jbWRfc2V0X3dtbV9tb2RlIHsKIAlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7Ci0JX19sZTMyIHNsZWVwX2ludGVydmFsOwkvKiBOdW1iZXIgb2YgYmVhY29uIHBlcmlvZHMgdG8gc2xlZXAgKi8KLQlfX3U4IGJlYWNvbl9kYXRhW01XTDhLX0ZKX0JFQUNPTl9NQVhMRU5dOworCV9fbGUxNiBhY3Rpb247CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi1zdGF0aWMgaW50IG13bDhrX2ZpbmFsaXplX2pvaW4oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHZvaWQgKmZyYW1lLAotCQkJICAgICAgIGludCBmcmFtZWxlbiwgaW50IGR0aW0pCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfd21tX21vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgZW5hYmxlKQogewotCXN0cnVjdCBtd2w4a19jbWRfZmluYWxpemVfam9pbiAqY21kOwotCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqcGF5bG9hZCA9IGZyYW1lOwotCWludCBwYXlsb2FkX2xlbjsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCXN0cnVjdCBtd2w4a19jbWRfc2V0X3dtbV9tb2RlICpjbWQ7CiAJaW50IHJjOwogCiAJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwogCWlmIChjbWQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9GSU5BTElaRV9KT0lOKTsKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9XTU1fTU9ERSk7CiAJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKLQljbWQtPnNsZWVwX2ludGVydmFsID0gY3B1X3RvX2xlMzIoZHRpbSA/IGR0aW0gOiAxKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KCEhZW5hYmxlKTsKIAotCXBheWxvYWRfbGVuID0gZnJhbWVsZW4gLSBpZWVlODAyMTFfaGRybGVuKHBheWxvYWQtPmZyYW1lX2NvbnRyb2wpOwotCWlmIChwYXlsb2FkX2xlbiA8IDApCi0JCXBheWxvYWRfbGVuID0gMDsKLQllbHNlIGlmIChwYXlsb2FkX2xlbiA+IE1XTDhLX0ZKX0JFQUNPTl9NQVhMRU4pCi0JCXBheWxvYWRfbGVuID0gTVdMOEtfRkpfQkVBQ09OX01BWExFTjsKKwlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CiAKLQltZW1jcHkoY21kLT5iZWFjb25fZGF0YSwgJnBheWxvYWQtPnUuYmVhY29uLCBwYXlsb2FkX2xlbik7CisJaWYgKCFyYykKKwkJcHJpdi0+d21tX2VuYWJsZWQgPSBlbmFibGU7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBDTURfTUlNT19DT05GSUcuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfbWltb19jb25maWcgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMzIgYWN0aW9uOworCV9fdTggcnhfYW50ZW5uYV9tYXA7CisJX191OCB0eF9hbnRlbm5hX21hcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX21pbW9fY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBfX3U4IHJ4LCBfX3U4IHR4KQoreworCXN0cnVjdCBtd2w4a19jbWRfbWltb19jb25maWcgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfTUlNT19DT05GSUcpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUzMigodTMyKU1XTDhLX0NNRF9TRVQpOworCWNtZC0+cnhfYW50ZW5uYV9tYXAgPSByeDsKKwljbWQtPnR4X2FudGVubmFfbWFwID0gdHg7CiAKIAlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOwogCWtmcmVlKGNtZCk7CkBAIC0yNTA4LDkgKzI2MzcsMzgwIEBACiB9CiAKIC8qCisgKiBDTURfVVNFX0ZJWEVEX1JBVEUgKFNUQSB2ZXJzaW9uKS4KKyAqLworc3RydWN0IG13bDhrX2NtZF91c2VfZml4ZWRfcmF0ZV9zdGEgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMzIgYWN0aW9uOworCV9fbGUzMiBhbGxvd19yYXRlX2Ryb3A7CisJX19sZTMyIG51bV9yYXRlczsKKwlzdHJ1Y3QgeworCQlfX2xlMzIgaXNfaHRfcmF0ZTsKKwkJX19sZTMyIGVuYWJsZV9yZXRyeTsKKwkJX19sZTMyIHJhdGU7CisJCV9fbGUzMiByZXRyeV9jb3VudDsKKwl9IHJhdGVfZW50cnlbOF07CisJX19sZTMyIHJhdGVfdHlwZTsKKwlfX2xlMzIgcmVzZXJ2ZWQxOworCV9fbGUzMiByZXNlcnZlZDI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIE1XTDhLX1VTRV9BVVRPX1JBVEUJMHgwMDAyCisjZGVmaW5lIE1XTDhLX1VDQVNUX1JBVEUJMAorCitzdGF0aWMgaW50IG13bDhrX2NtZF91c2VfZml4ZWRfcmF0ZV9zdGEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3RydWN0IG13bDhrX2NtZF91c2VfZml4ZWRfcmF0ZV9zdGEgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfVVNFX0ZJWEVEX1JBVEUpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUzMihNV0w4S19VU0VfQVVUT19SQVRFKTsKKwljbWQtPnJhdGVfdHlwZSA9IGNwdV90b19sZTMyKE1XTDhLX1VDQVNUX1JBVEUpOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1VTRV9GSVhFRF9SQVRFIChBUCB2ZXJzaW9uKS4KKyAqLworc3RydWN0IG13bDhrX2NtZF91c2VfZml4ZWRfcmF0ZV9hcCB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUzMiBhY3Rpb247CisJX19sZTMyIGFsbG93X3JhdGVfZHJvcDsKKwlfX2xlMzIgbnVtX3JhdGVzOworCXN0cnVjdCBtd2w4a19yYXRlX2VudHJ5X2FwIHsKKwkJX19sZTMyIGlzX2h0X3JhdGU7CisJCV9fbGUzMiBlbmFibGVfcmV0cnk7CisJCV9fbGUzMiByYXRlOworCQlfX2xlMzIgcmV0cnlfY291bnQ7CisJfSByYXRlX2VudHJ5WzRdOworCXU4IG11bHRpY2FzdF9yYXRlOworCXU4IG11bHRpY2FzdF9yYXRlX3R5cGU7CisJdTggbWFuYWdlbWVudF9yYXRlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludAorbXdsOGtfY21kX3VzZV9maXhlZF9yYXRlX2FwKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBpbnQgbWNhc3QsIGludCBtZ210KQoreworCXN0cnVjdCBtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGVfYXAgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfVVNFX0ZJWEVEX1JBVEUpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUzMihNV0w4S19VU0VfQVVUT19SQVRFKTsKKwljbWQtPm11bHRpY2FzdF9yYXRlID0gbWNhc3Q7CisJY21kLT5tYW5hZ2VtZW50X3JhdGUgPSBtZ210OworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX0VOQUJMRV9TTklGRkVSLgorICovCitzdHJ1Y3QgbXdsOGtfY21kX2VuYWJsZV9zbmlmZmVyIHsKKwlzdHJ1Y3QgbXdsOGtfY21kX3BrdCBoZWFkZXI7CisJX19sZTMyIGFjdGlvbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX2VuYWJsZV9zbmlmZmVyKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX2VuYWJsZV9zbmlmZmVyICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX0VOQUJMRV9TTklGRkVSKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoISFlbmFibGUpOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX1NFVF9NQUNfQUREUi4KKyAqLworc3RydWN0IG13bDhrX2NtZF9zZXRfbWFjX2FkZHIgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlfX2xlMTYgbWFjX3R5cGU7CisJCQlfX3U4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwkJfSBtYnNzOworCQlfX3U4IG1hY19hZGRyW0VUSF9BTEVOXTsKKwl9OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBNV0w4S19NQUNfVFlQRV9QUklNQVJZX0NMSUVOVAkJMAorI2RlZmluZSBNV0w4S19NQUNfVFlQRV9TRUNPTkRBUllfQ0xJRU5UCQkxCisjZGVmaW5lIE1XTDhLX01BQ19UWVBFX1BSSU1BUllfQVAJCTIKKyNkZWZpbmUgTVdMOEtfTUFDX1RZUEVfU0VDT05EQVJZX0FQCQkzCisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3NldF9tYWNfYWRkcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIHU4ICptYWMpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfdmlmICptd2w4a192aWYgPSBNV0w4S19WSUYodmlmKTsKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9tYWNfYWRkciAqY21kOworCWludCBtYWNfdHlwZTsKKwlpbnQgcmM7CisKKwltYWNfdHlwZSA9IE1XTDhLX01BQ19UWVBFX1BSSU1BUllfQVA7CisJaWYgKHZpZiAhPSBOVUxMICYmIHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWlmIChtd2w4a192aWYtPm1hY2lkICsgMSA9PSBmZnMocHJpdi0+c3RhX21hY2lkc19zdXBwb3J0ZWQpKQorCQkJbWFjX3R5cGUgPSBNV0w4S19NQUNfVFlQRV9QUklNQVJZX0NMSUVOVDsKKwkJZWxzZQorCQkJbWFjX3R5cGUgPSBNV0w4S19NQUNfVFlQRV9TRUNPTkRBUllfQ0xJRU5UOworCX0gZWxzZSBpZiAodmlmICE9IE5VTEwgJiYgdmlmLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCWlmIChtd2w4a192aWYtPm1hY2lkICsgMSA9PSBmZnMocHJpdi0+YXBfbWFjaWRzX3N1cHBvcnRlZCkpCisJCQltYWNfdHlwZSA9IE1XTDhLX01BQ19UWVBFX1BSSU1BUllfQVA7CisJCWVsc2UKKwkJCW1hY190eXBlID0gTVdMOEtfTUFDX1RZUEVfU0VDT05EQVJZX0FQOworCX0KKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY21kID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfTUFDX0FERFIpOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJaWYgKHByaXYtPmFwX2Z3KSB7CisJCWNtZC0+bWJzcy5tYWNfdHlwZSA9IGNwdV90b19sZTE2KG1hY190eXBlKTsKKwkJbWVtY3B5KGNtZC0+bWJzcy5tYWNfYWRkciwgbWFjLCBFVEhfQUxFTik7CisJfSBlbHNlIHsKKwkJbWVtY3B5KGNtZC0+bWFjX2FkZHIsIG1hYywgRVRIX0FMRU4pOworCX0KKworCXJjID0gbXdsOGtfcG9zdF9wZXJ2aWZfY21kKGh3LCB2aWYsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfUkFURUFEQVBUX01PREUuCisgKi8KK3N0cnVjdCBtd2w4a19jbWRfc2V0X3JhdGVfYWRhcHRfbW9kZSB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IG1vZGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfcmF0ZWFkYXB0X21vZGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIF9fdTE2IG1vZGUpCit7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfcmF0ZV9hZGFwdF9tb2RlICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9SQVRFQURBUFRfTU9ERSk7CisJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKKwljbWQtPmFjdGlvbiA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVQpOworCWNtZC0+bW9kZSA9IGNwdV90b19sZTE2KG1vZGUpOworCisJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCisvKgorICogQ01EX0JTU19TVEFSVC4KKyAqLworc3RydWN0IG13bDhrX2NtZF9ic3Nfc3RhcnQgeworCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKKwlfX2xlMzIgZW5hYmxlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGludCBtd2w4a19jbWRfYnNzX3N0YXJ0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsIGludCBlbmFibGUpCit7CisJc3RydWN0IG13bDhrX2NtZF9ic3Nfc3RhcnQgKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfQlNTX1NUQVJUKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+ZW5hYmxlID0gY3B1X3RvX2xlMzIoZW5hYmxlKTsKKworCXJjID0gbXdsOGtfcG9zdF9wZXJ2aWZfY21kKGh3LCB2aWYsICZjbWQtPmhlYWRlcik7CisJa2ZyZWUoY21kKTsKKworCXJldHVybiByYzsKK30KKworLyoKKyAqIENNRF9TRVRfTkVXX1NUTi4KKyAqLworc3RydWN0IG13bDhrX2NtZF9zZXRfbmV3X3N0biB7CisJc3RydWN0IG13bDhrX2NtZF9wa3QgaGVhZGVyOworCV9fbGUxNiBhaWQ7CisJX191OCBtYWNfYWRkcls2XTsKKwlfX2xlMTYgc3RuX2lkOworCV9fbGUxNiBhY3Rpb247CisJX19sZTE2IHJzdmQ7CisJX19sZTMyIGxlZ2FjeV9yYXRlczsKKwlfX3U4IGh0X3JhdGVzWzRdOworCV9fbGUxNiBjYXBfaW5mbzsKKwlfX2xlMTYgaHRfY2FwYWJpbGl0aWVzX2luZm87CisJX191OCBtYWNfaHRfcGFyYW1faW5mbzsKKwlfX3U4IHJldjsKKwlfX3U4IGNvbnRyb2xfY2hhbm5lbDsKKwlfX3U4IGFkZF9jaGFubmVsOworCV9fbGUxNiBvcF9tb2RlOworCV9fbGUxNiBzdGJjOworCV9fdTggYWRkX3Fvc19pbmZvOworCV9fdTggaXNfcW9zX3N0YTsKKwlfX2xlMzIgZndfc3RhX3B0cjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgTVdMOEtfU1RBX0FDVElPTl9BREQJCTAKKyNkZWZpbmUgTVdMOEtfU1RBX0FDVElPTl9SRU1PVkUJCTIKKworc3RhdGljIGludCBtd2w4a19jbWRfc2V0X25ld19zdG5fYWRkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJc3RydWN0IG13bDhrX2NtZF9zZXRfbmV3X3N0biAqY21kOworCXUzMiByYXRlczsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX05FV19TVE4pOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJY21kLT5haWQgPSBjcHVfdG9fbGUxNihzdGEtPmFpZCk7CisJbWVtY3B5KGNtZC0+bWFjX2FkZHIsIHN0YS0+YWRkciwgRVRIX0FMRU4pOworCWNtZC0+c3RuX2lkID0gY3B1X3RvX2xlMTYoc3RhLT5haWQpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMTYoTVdMOEtfU1RBX0FDVElPTl9BREQpOworCWlmIChody0+Y29uZi5jaGFubmVsLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCXJhdGVzID0gc3RhLT5zdXBwX3JhdGVzW0lFRUU4MDIxMV9CQU5EXzJHSFpdOworCWVsc2UKKwkJcmF0ZXMgPSBzdGEtPnN1cHBfcmF0ZXNbSUVFRTgwMjExX0JBTkRfNUdIWl0gPDwgNTsKKwljbWQtPmxlZ2FjeV9yYXRlcyA9IGNwdV90b19sZTMyKHJhdGVzKTsKKwlpZiAoc3RhLT5odF9jYXAuaHRfc3VwcG9ydGVkKSB7CisJCWNtZC0+aHRfcmF0ZXNbMF0gPSBzdGEtPmh0X2NhcC5tY3MucnhfbWFza1swXTsKKwkJY21kLT5odF9yYXRlc1sxXSA9IHN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrWzFdOworCQljbWQtPmh0X3JhdGVzWzJdID0gc3RhLT5odF9jYXAubWNzLnJ4X21hc2tbMl07CisJCWNtZC0+aHRfcmF0ZXNbM10gPSBzdGEtPmh0X2NhcC5tY3MucnhfbWFza1szXTsKKwkJY21kLT5odF9jYXBhYmlsaXRpZXNfaW5mbyA9IGNwdV90b19sZTE2KHN0YS0+aHRfY2FwLmNhcCk7CisJCWNtZC0+bWFjX2h0X3BhcmFtX2luZm8gPSAoc3RhLT5odF9jYXAuYW1wZHVfZmFjdG9yICYgMykgfAorCQkJKChzdGEtPmh0X2NhcC5hbXBkdV9kZW5zaXR5ICYgNykgPDwgMik7CisJCWNtZC0+aXNfcW9zX3N0YSA9IDE7CisJfQorCisJcmMgPSBtd2w4a19wb3N0X3BlcnZpZl9jbWQoaHcsIHZpZiwgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfbmV3X3N0bl9hZGRfc2VsZihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBtd2w4a19jbWRfc2V0X25ld19zdG4gKmNtZDsKKwlpbnQgcmM7CisKKwljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNtZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfU0VUX05FV19TVE4pOworCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7CisJbWVtY3B5KGNtZC0+bWFjX2FkZHIsIHZpZi0+YWRkciwgRVRIX0FMRU4pOworCisJcmMgPSBtd2w4a19wb3N0X3BlcnZpZl9jbWQoaHcsIHZpZiwgJmNtZC0+aGVhZGVyKTsKKwlrZnJlZShjbWQpOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG13bDhrX2NtZF9zZXRfbmV3X3N0bl9kZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCB1OCAqYWRkcikKK3sKKwlzdHJ1Y3QgbXdsOGtfY21kX3NldF9uZXdfc3RuICpjbWQ7CisJaW50IHJjOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmIChjbWQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9ORVdfU1ROKTsKKwljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCW1lbWNweShjbWQtPm1hY19hZGRyLCBhZGRyLCBFVEhfQUxFTik7CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUxNihNV0w4S19TVEFfQUNUSU9OX1JFTU9WRSk7CisKKwlyYyA9IG13bDhrX3Bvc3RfcGVydmlmX2NtZChodywgdmlmLCAmY21kLT5oZWFkZXIpOworCWtmcmVlKGNtZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qCiAgKiBDTURfVVBEQVRFX1NUQURCLgogICovCi1zdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zdGFfZGIgeworc3RydWN0IGV3Y19odF9pbmZvIHsKKwlfX2xlMTYJY29udHJvbDE7CisJX19sZTE2CWNvbnRyb2wyOworCV9fbGUxNgljb250cm9sMzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBwZWVyX2NhcGFiaWxpdHlfaW5mbyB7CisJLyogUGVlciB0eXBlIC0gQVAgdnMuIFNUQS4gICovCisJX191OAlwZWVyX3R5cGU7CisKKwkvKiBCYXNpYyA4MDIuMTEgY2FwYWJpbGl0aWVzIGZyb20gYXNzb2MgcmVzcC4gICovCisJX19sZTE2CWJhc2ljX2NhcHM7CisKKwkvKiBTZXQgaWYgcGVlciBzdXBwb3J0cyA4MDIuMTFuIGhpZ2ggdGhyb3VnaHB1dCAoSFQpLiAgKi8KKwlfX3U4CWh0X3N1cHBvcnQ7CisKKwkvKiBWYWxpZCBpZiBIVCBpcyBzdXBwb3J0ZWQuICAqLworCV9fbGUxNglodF9jYXBzOworCV9fdTgJZXh0ZW5kZWRfaHRfY2FwczsKKwlzdHJ1Y3QgZXdjX2h0X2luZm8JZXdjX2luZm87CisKKwkvKiBMZWdhY3kgcmF0ZSB0YWJsZS4gSW50ZXJzZWN0aW9uIG9mIG91ciByYXRlcyBhbmQgcGVlciByYXRlcy4gICovCisJX191OAlsZWdhY3lfcmF0ZXNbMTJdOworCisJLyogSFQgcmF0ZSB0YWJsZS4gSW50ZXJzZWN0aW9uIG9mIG91ciByYXRlcyBhbmQgcGVlciByYXRlcy4gICovCisJX191OAlodF9yYXRlc1sxNl07CisJX191OAlwYWRbMTZdOworCisJLyogSWYgc2V0LCBpbnRlcm9wZXJhYmlsaXR5IG1vZGUsIG5vIHByb3ByaWV0YXJ5IGV4dGVuc2lvbnMuICAqLworCV9fdTgJaW50ZXJvcDsKKwlfX3U4CXBhZDI7CisJX191OAlzdGF0aW9uX2lkOworCV9fbGUxNglhbXNkdV9lbmFibGVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG13bDhrX2NtZF91cGRhdGVfc3RhZGIgewogCXN0cnVjdCBtd2w4a19jbWRfcGt0IGhlYWRlcjsKIAogCS8qIFNlZSBTVEFEQl9BQ1RJT05fVFlQRSAqLwpAQCAtMjUyNSwxMyArMzAyNSwxOSBAQAogCXN0cnVjdCBwZWVyX2NhcGFiaWxpdHlfaW5mbwlwZWVyX2luZm87CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCi1zdGF0aWMgaW50IG13bDhrX2NtZF91cGRhdGVfc3RhX2RiKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLCBfX3UzMiBhY3Rpb24pCisjZGVmaW5lIE1XTDhLX1NUQV9EQl9NT0RJRllfRU5UUlkJMQorI2RlZmluZSBNV0w4S19TVEFfREJfREVMX0VOVFJZCQkyCisKKy8qIFBlZXIgRW50cnkgZmxhZ3MgLSB1c2VkIHRvIGRlZmluZSB0aGUgdHlwZSBvZiB0aGUgcGVlciBub2RlICovCisjZGVmaW5lIE1XTDhLX1BFRVJfVFlQRV9BQ0NFU1NQT0lOVAkyCisKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3VwZGF0ZV9zdGFkYl9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQogewotCXN0cnVjdCBtd2w4a192aWYgKm12X3ZpZiA9IE1XTDhLX1ZJRih2aWYpOwotCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8gPSAmbXZfdmlmLT5ic3NfaW5mbzsKLQlzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zdGFfZGIgKmNtZDsKLQlzdHJ1Y3QgcGVlcl9jYXBhYmlsaXR5X2luZm8gKnBlZXJfaW5mbzsKKwlzdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9zdGFkYiAqY21kOworCXN0cnVjdCBwZWVyX2NhcGFiaWxpdHlfaW5mbyAqcDsKKwl1MzIgcmF0ZXM7CiAJaW50IHJjOwogCiAJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwpAQCAtMjU0MCwyMTQgKzMwNDYsNDUgQEAKIAogCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfVVBEQVRFX1NUQURCKTsKIAljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOworCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoTVdMOEtfU1RBX0RCX01PRElGWV9FTlRSWSk7CisJbWVtY3B5KGNtZC0+cGVlcl9hZGRyLCBzdGEtPmFkZHIsIEVUSF9BTEVOKTsKIAotCWNtZC0+YWN0aW9uID0gY3B1X3RvX2xlMzIoYWN0aW9uKTsKLQlwZWVyX2luZm8gPSAmY21kLT5wZWVyX2luZm87Ci0JbWVtY3B5KGNtZC0+cGVlcl9hZGRyLCBtdl92aWYtPmJzc2lkLCBFVEhfQUxFTik7Ci0KLQlzd2l0Y2ggKGFjdGlvbikgewotCWNhc2UgTVdMOEtfU1RBX0RCX0FERF9FTlRSWToKLQljYXNlIE1XTDhLX1NUQV9EQl9NT0RJRllfRU5UUlk6Ci0JCS8qIEJ1aWxkIHBlZXJfaW5mbyBibG9jayAqLwotCQlwZWVyX2luZm8tPnBlZXJfdHlwZSA9IE1XTDhLX1BFRVJfVFlQRV9BQ0NFU1NQT0lOVDsKLQkJcGVlcl9pbmZvLT5iYXNpY19jYXBzID0gY3B1X3RvX2xlMTYoaW5mby0+YXNzb2NfY2FwYWJpbGl0eSk7Ci0JCW1lbWNweShwZWVyX2luZm8tPmxlZ2FjeV9yYXRlcywgbXdsOGtfcmF0ZWlkcywKLQkJICAgICAgIHNpemVvZihtd2w4a19yYXRlaWRzKSk7Ci0JCXBlZXJfaW5mby0+aW50ZXJvcCA9IDE7Ci0JCXBlZXJfaW5mby0+YW1zZHVfZW5hYmxlZCA9IDA7Ci0KLQkJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKLQkJaWYgKHJjID09IDApCi0JCQltdl92aWYtPnBlZXJfaWQgPSBwZWVyX2luZm8tPnN0YXRpb25faWQ7Ci0KLQkJYnJlYWs7Ci0KLQljYXNlIE1XTDhLX1NUQV9EQl9ERUxfRU5UUlk6Ci0JY2FzZSBNV0w4S19TVEFfREJfRkxVU0g6Ci0JZGVmYXVsdDoKLQkJcmMgPSBtd2w4a19wb3N0X2NtZChodywgJmNtZC0+aGVhZGVyKTsKLQkJaWYgKHJjID09IDApCi0JCQltdl92aWYtPnBlZXJfaWQgPSAwOwotCQlicmVhazsKLQl9Ci0Ja2ZyZWUoY21kKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoKLSAqIENNRF9TRVRfQUlELgotICovCi0jZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfRElTQUJMRUQJCQkweDAwCi0jZGVmaW5lIE1XTDhLX0ZSQU1FX1BST1RfMTFHCQkJCTB4MDcKLSNkZWZpbmUgTVdMOEtfRlJBTUVfUFJPVF8xMU5fSFRfNDBNSFpfT05MWQkJMHgwMgotI2RlZmluZSBNV0w4S19GUkFNRV9QUk9UXzExTl9IVF9BTEwJCQkweDA2Ci0KLXN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3NldF9haWQgewotCXN0cnVjdAltd2w4a19jbWRfcGt0IGhlYWRlcjsKLQlfX2xlMTYJYWlkOwotCi0JIC8qIEFQJ3MgTUFDIGFkZHJlc3MgKEJTU0lEKSAqLwotCV9fdTgJYnNzaWRbRVRIX0FMRU5dOwotCV9fbGUxNglwcm90ZWN0aW9uX21vZGU7Ci0JX191OAlzdXBwX3JhdGVzWzE0XTsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0YXRpYyBpbnQgbXdsOGtfY21kX3NldF9haWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCi17Ci0Jc3RydWN0IG13bDhrX3ZpZiAqbXZfdmlmID0gTVdMOEtfVklGKHZpZik7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbyA9ICZtdl92aWYtPmJzc19pbmZvOwotCXN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3NldF9haWQgKmNtZDsKLQl1MTYgcHJvdF9tb2RlOwotCWludCByYzsKLQotCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoY21kID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JY21kLT5oZWFkZXIuY29kZSA9IGNwdV90b19sZTE2KE1XTDhLX0NNRF9TRVRfQUlEKTsKLQljbWQtPmhlYWRlci5sZW5ndGggPSBjcHVfdG9fbGUxNihzaXplb2YoKmNtZCkpOwotCWNtZC0+YWlkID0gY3B1X3RvX2xlMTYoaW5mby0+YWlkKTsKLQotCW1lbWNweShjbWQtPmJzc2lkLCBtdl92aWYtPmJzc2lkLCBFVEhfQUxFTik7Ci0KLQlpZiAoaW5mby0+dXNlX2N0c19wcm90KSB7Ci0JCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfMTFHOwotCX0gZWxzZSB7Ci0JCXN3aXRjaCAoaW5mby0+aHRfb3BlcmF0aW9uX21vZGUgJgotCQkJSUVFRTgwMjExX0hUX09QX01PREVfUFJPVEVDVElPTikgewotCQljYXNlIElFRUU4MDIxMV9IVF9PUF9NT0RFX1BST1RFQ1RJT05fMjBNSFo6Ci0JCQlwcm90X21vZGUgPSBNV0w4S19GUkFNRV9QUk9UXzExTl9IVF80ME1IWl9PTkxZOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX0hUX09QX01PREVfUFJPVEVDVElPTl9OT05IVF9NSVhFRDoKLQkJCXByb3RfbW9kZSA9IE1XTDhLX0ZSQU1FX1BST1RfMTFOX0hUX0FMTDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJvdF9tb2RlID0gTVdMOEtfRlJBTUVfUFJPVF9ESVNBQkxFRDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWNtZC0+cHJvdGVjdGlvbl9tb2RlID0gY3B1X3RvX2xlMTYocHJvdF9tb2RlKTsKLQotCW1lbWNweShjbWQtPnN1cHBfcmF0ZXMsIG13bDhrX3JhdGVpZHMsIHNpemVvZihtd2w4a19yYXRlaWRzKSk7CisJcCA9ICZjbWQtPnBlZXJfaW5mbzsKKwlwLT5wZWVyX3R5cGUgPSBNV0w4S19QRUVSX1RZUEVfQUNDRVNTUE9JTlQ7CisJcC0+YmFzaWNfY2FwcyA9IGNwdV90b19sZTE2KHZpZi0+YnNzX2NvbmYuYXNzb2NfY2FwYWJpbGl0eSk7CisJcC0+aHRfc3VwcG9ydCA9IHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRlZDsKKwlwLT5odF9jYXBzID0gc3RhLT5odF9jYXAuY2FwOworCXAtPmV4dGVuZGVkX2h0X2NhcHMgPSAoc3RhLT5odF9jYXAuYW1wZHVfZmFjdG9yICYgMykgfAorCQkoKHN0YS0+aHRfY2FwLmFtcGR1X2RlbnNpdHkgJiA3KSA8PCAyKTsKKwlpZiAoaHctPmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQlyYXRlcyA9IHN0YS0+c3VwcF9yYXRlc1tJRUVFODAyMTFfQkFORF8yR0haXTsKKwllbHNlCisJCXJhdGVzID0gc3RhLT5zdXBwX3JhdGVzW0lFRUU4MDIxMV9CQU5EXzVHSFpdIDw8IDU7CisJbGVnYWN5X3JhdGVfbWFza190b19hcnJheShwLT5sZWdhY3lfcmF0ZXMsIHJhdGVzKTsKKwltZW1jcHkocC0+aHRfcmF0ZXMsIHN0YS0+aHRfY2FwLm1jcy5yeF9tYXNrLCAxNik7CisJcC0+aW50ZXJvcCA9IDE7CisJcC0+YW1zZHVfZW5hYmxlZCA9IDA7CiAKIAlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOwogCWtmcmVlKGNtZCk7CiAKLQlyZXR1cm4gcmM7CisJcmV0dXJuIHJjID8gcmMgOiBwLT5zdGF0aW9uX2lkOwogfQogCi0vKgotICogQ01EX1NFVF9SQVRFLgotICovCi1zdHJ1Y3QgbXdsOGtfY21kX3VwZGF0ZV9yYXRlc2V0IHsKLQlzdHJ1Y3QJbXdsOGtfY21kX3BrdCBoZWFkZXI7Ci0JX191OAlsZWdhY3lfcmF0ZXNbMTRdOwotCi0JLyogQml0bWFwIGZvciBzdXBwb3J0ZWQgTUNTIGNvZGVzLiAgKi8KLQlfX3U4CW1jc19zZXRbMTZdOwotCV9fdTgJcmVzZXJ2ZWRbMTZdOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RhdGljIGludCBtd2w4a191cGRhdGVfcmF0ZXNldChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3N0YXRpYyBpbnQgbXdsOGtfY21kX3VwZGF0ZV9zdGFkYl9kZWwoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgdTggKmFkZHIpCiB7Ci0Jc3RydWN0IG13bDhrX2NtZF91cGRhdGVfcmF0ZXNldCAqY21kOworCXN0cnVjdCBtd2w4a19jbWRfdXBkYXRlX3N0YWRiICpjbWQ7CiAJaW50IHJjOwogCiAJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOwogCWlmIChjbWQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1NFVF9SQVRFKTsKKwljbWQtPmhlYWRlci5jb2RlID0gY3B1X3RvX2xlMTYoTVdMOEtfQ01EX1VQREFURV9TVEFEQik7CiAJY21kLT5oZWFkZXIubGVuZ3RoID0gY3B1X3RvX2xlMTYoc2l6ZW9mKCpjbWQpKTsKLQltZW1jcHkoY21kLT5sZWdhY3lfcmF0ZXMsIG13bDhrX3JhdGVpZHMsIHNpemVvZihtd2w4a19yYXRlaWRzKSk7Ci0KLQlyYyA9IG13bDhrX3Bvc3RfY21kKGh3LCAmY21kLT5oZWFkZXIpOwotCWtmcmVlKGNtZCk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBDTURfVVNFX0ZJWEVEX1JBVEUuCi0gKi8KLSNkZWZpbmUgTVdMOEtfUkFURV9UQUJMRV9TSVpFCTgKLSNkZWZpbmUgTVdMOEtfVUNBU1RfUkFURQkwCi0jZGVmaW5lIE1XTDhLX1VTRV9BVVRPX1JBVEUJMHgwMDAyCi0KLXN0cnVjdCBtd2w4a19yYXRlX2VudHJ5IHsKLQkvKiBTZXQgdG8gMSBpZiBIVCByYXRlLCAwIGlmIGxlZ2FjeS4gICovCi0JX19sZTMyCWlzX2h0X3JhdGU7Ci0KLQkvKiBTZXQgdG8gMSB0byB1c2UgcmV0cnlfY291bnQgZmllbGQuICAqLwotCV9fbGUzMgllbmFibGVfcmV0cnk7Ci0KLQkvKiBTcGVjaWZpZWQgbGVnYWN5IHJhdGUgb3IgTUNTLiAgKi8KLQlfX2xlMzIJcmF0ZTsKLQotCS8qIE51bWJlciBvZiBhbGxvd2VkIHJldHJpZXMuICAqLwotCV9fbGUzMglyZXRyeV9jb3VudDsKLX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Ci0KLXN0cnVjdCBtd2w4a19yYXRlX3RhYmxlIHsKLQkvKiAxIHRvIGFsbG93IHNwZWNpZmllZCByYXRlIGFuZCBiZWxvdyAqLwotCV9fbGUzMglhbGxvd19yYXRlX2Ryb3A7Ci0JX19sZTMyCW51bV9yYXRlczsKLQlzdHJ1Y3QgbXdsOGtfcmF0ZV9lbnRyeSByYXRlX2VudHJ5W01XTDhLX1JBVEVfVEFCTEVfU0laRV07Ci19IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwotCi1zdHJ1Y3QgbXdsOGtfY21kX3VzZV9maXhlZF9yYXRlIHsKLQlzdHJ1Y3QJbXdsOGtfY21kX3BrdCBoZWFkZXI7Ci0JX19sZTMyCWFjdGlvbjsKLQlzdHJ1Y3QgbXdsOGtfcmF0ZV90YWJsZSByYXRlX3RhYmxlOwotCi0JLyogVW5pY2FzdCwgQnJvYWRjYXN0IG9yIE11bHRpY2FzdCAqLwotCV9fbGUzMglyYXRlX3R5cGU7Ci0JX19sZTMyCXJlc2VydmVkMTsKLQlfX2xlMzIJcmVzZXJ2ZWQyOwotfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKLQotc3RhdGljIGludCBtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGUoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JdTMyIGFjdGlvbiwgdTMyIHJhdGVfdHlwZSwgc3RydWN0IG13bDhrX3JhdGVfdGFibGUgKnJhdGVfdGFibGUpCi17Ci0Jc3RydWN0IG13bDhrX2NtZF91c2VfZml4ZWRfcmF0ZSAqY21kOwotCWludCBjb3VudDsKLQlpbnQgcmM7Ci0KLQljbWQgPSBremFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGNtZCA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNtZC0+aGVhZGVyLmNvZGUgPSBjcHVfdG9fbGUxNihNV0w4S19DTURfVVNFX0ZJWEVEX1JBVEUpOwotCWNtZC0+aGVhZGVyLmxlbmd0aCA9IGNwdV90b19sZTE2KHNpemVvZigqY21kKSk7Ci0KLQljbWQtPmFjdGlvbiA9IGNwdV90b19sZTMyKGFjdGlvbik7Ci0JY21kLT5yYXRlX3R5cGUgPSBjcHVfdG9fbGUzMihyYXRlX3R5cGUpOwotCi0JaWYgKHJhdGVfdGFibGUgIT0gTlVMTCkgewotCQkvKgotCQkgKiBDb3B5IG92ZXIgZWFjaCBmaWVsZCBtYW51YWxseSBzbyB0aGF0IGVuZGlhbgotCQkgKiBjb252ZXJzaW9uIGNhbiBiZSBkb25lLgotCQkgKi8KLQkJY21kLT5yYXRlX3RhYmxlLmFsbG93X3JhdGVfZHJvcCA9Ci0JCQkJY3B1X3RvX2xlMzIocmF0ZV90YWJsZS0+YWxsb3dfcmF0ZV9kcm9wKTsKLQkJY21kLT5yYXRlX3RhYmxlLm51bV9yYXRlcyA9Ci0JCQkJY3B1X3RvX2xlMzIocmF0ZV90YWJsZS0+bnVtX3JhdGVzKTsKLQotCQlmb3IgKGNvdW50ID0gMDsgY291bnQgPCByYXRlX3RhYmxlLT5udW1fcmF0ZXM7IGNvdW50KyspIHsKLQkJCXN0cnVjdCBtd2w4a19yYXRlX2VudHJ5ICpkc3QgPQotCQkJCSZjbWQtPnJhdGVfdGFibGUucmF0ZV9lbnRyeVtjb3VudF07Ci0JCQlzdHJ1Y3QgbXdsOGtfcmF0ZV9lbnRyeSAqc3JjID0KLQkJCQkmcmF0ZV90YWJsZS0+cmF0ZV9lbnRyeVtjb3VudF07Ci0KLQkJCWRzdC0+aXNfaHRfcmF0ZSA9IGNwdV90b19sZTMyKHNyYy0+aXNfaHRfcmF0ZSk7Ci0JCQlkc3QtPmVuYWJsZV9yZXRyeSA9IGNwdV90b19sZTMyKHNyYy0+ZW5hYmxlX3JldHJ5KTsKLQkJCWRzdC0+cmF0ZSA9IGNwdV90b19sZTMyKHNyYy0+cmF0ZSk7Ci0JCQlkc3QtPnJldHJ5X2NvdW50ID0gY3B1X3RvX2xlMzIoc3JjLT5yZXRyeV9jb3VudCk7Ci0JCX0KLQl9CisJY21kLT5hY3Rpb24gPSBjcHVfdG9fbGUzMihNV0w4S19TVEFfREJfREVMX0VOVFJZKTsKKwltZW1jcHkoY21kLT5wZWVyX2FkZHIsIGFkZHIsIEVUSF9BTEVOKTsKIAogCXJjID0gbXdsOGtfcG9zdF9jbWQoaHcsICZjbWQtPmhlYWRlcik7CiAJa2ZyZWUoY21kKTsKQEAgLTI3NjYsMTkgKzMxMDMsMjIgQEAKIAl1MzIgc3RhdHVzOwogCiAJc3RhdHVzID0gaW9yZWFkMzIocHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7Ci0JaW93cml0ZTMyKH5zdGF0dXMsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOwotCiAJaWYgKCFzdGF0dXMpCiAJCXJldHVybiBJUlFfTk9ORTsKIAotCWlmIChzdGF0dXMgJiBNV0w4S19BMkhfSU5UX1RYX0RPTkUpCi0JCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPnR4X3JlY2xhaW1fdGFzayk7CisJaWYgKHN0YXR1cyAmIE1XTDhLX0EySF9JTlRfVFhfRE9ORSkgeworCQlzdGF0dXMgJj0gfk1XTDhLX0EySF9JTlRfVFhfRE9ORTsKKwkJdGFza2xldF9zY2hlZHVsZSgmcHJpdi0+cG9sbF90eF90YXNrKTsKKwl9CiAKIAlpZiAoc3RhdHVzICYgTVdMOEtfQTJIX0lOVF9SWF9SRUFEWSkgewotCQl3aGlsZSAocnhxX3Byb2Nlc3MoaHcsIDAsIDEpKQotCQkJcnhxX3JlZmlsbChodywgMCwgMSk7CisJCXN0YXR1cyAmPSB+TVdMOEtfQTJIX0lOVF9SWF9SRUFEWTsKKwkJdGFza2xldF9zY2hlZHVsZSgmcHJpdi0+cG9sbF9yeF90YXNrKTsKIAl9CiAKKwlpZiAoc3RhdHVzKQorCQlpb3dyaXRlMzIofnN0YXR1cywgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVUyk7CisKIAlpZiAoc3RhdHVzICYgTVdMOEtfQTJIX0lOVF9PUENfRE9ORSkgewogCQlpZiAocHJpdi0+aG9zdGNtZF93YWl0ICE9IE5VTEwpCiAJCQljb21wbGV0ZShwcml2LT5ob3N0Y21kX3dhaXQpOwpAQCAtMjc5Myw2ICszMTMzLDUzIEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCitzdGF0aWMgdm9pZCBtd2w4a190eF9wb2xsKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyA9IChzdHJ1Y3QgaWVlZTgwMjExX2h3ICopZGF0YTsKKwlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OworCWludCBsaW1pdDsKKwlpbnQgaTsKKworCWxpbWl0ID0gMzI7CisKKwlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOworCisJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKQorCQlsaW1pdCAtPSBtd2w4a190eHFfcmVjbGFpbShodywgaSwgbGltaXQsIDApOworCisJaWYgKCFwcml2LT5wZW5kaW5nX3R4X3BrdHMgJiYgcHJpdi0+dHhfd2FpdCAhPSBOVUxMKSB7CisJCWNvbXBsZXRlKHByaXYtPnR4X3dhaXQpOworCQlwcml2LT50eF93YWl0ID0gTlVMTDsKKwl9CisKKwlzcGluX3VubG9ja19iaCgmcHJpdi0+dHhfbG9jayk7CisKKwlpZiAobGltaXQpIHsKKwkJd3JpdGVsKH5NV0w4S19BMkhfSU5UX1RYX0RPTkUsCisJCSAgICAgICBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKKwl9IGVsc2UgeworCQl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT5wb2xsX3R4X3Rhc2spOworCX0KK30KKworc3RhdGljIHZvaWQgbXdsOGtfcnhfcG9sbCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAoc3RydWN0IGllZWU4MDIxMV9odyAqKWRhdGE7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlpbnQgbGltaXQ7CisKKwlsaW1pdCA9IDMyOworCWxpbWl0IC09IHJ4cV9wcm9jZXNzKGh3LCAwLCBsaW1pdCk7CisJbGltaXQgLT0gcnhxX3JlZmlsbChodywgMCwgbGltaXQpOworCisJaWYgKGxpbWl0KSB7CisJCXdyaXRlbCh+TVdMOEtfQTJIX0lOVF9SWF9SRUFEWSwKKwkJICAgICAgIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9TVEFUVVMpOworCX0gZWxzZSB7CisJCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPnBvbGxfcnhfdGFzayk7CisJfQorfQorCiAKIC8qCiAgKiBDb3JlIGRyaXZlciBvcGVyYXRpb25zLgpAQCAtMjgwMyw3ICszMTkwLDcgQEAKIAlpbnQgaW5kZXggPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAlpbnQgcmM7CiAKLQlpZiAocHJpdi0+Y3VycmVudF9jaGFubmVsID09IE5VTEwpIHsKKwlpZiAoIXByaXYtPnJhZGlvX29uKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZHJvcHBlZCBUWCBmcmFtZSBzaW5jZSByYWRpbyAiCiAJCSAgICAgICAiZGlzYWJsZWRcbiIsIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTI4MjgsMTkgKzMyMTUsMjAgQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JLyogRW5hYmxlIHR4IHJlY2xhaW0gdGFza2xldCAqLwotCXRhc2tsZXRfZW5hYmxlKCZwcml2LT50eF9yZWNsYWltX3Rhc2spOworCS8qIEVuYWJsZSBUWCByZWNsYWltIGFuZCBSWCB0YXNrbGV0cy4gICovCisJdGFza2xldF9lbmFibGUoJnByaXYtPnBvbGxfdHhfdGFzayk7CisJdGFza2xldF9lbmFibGUoJnByaXYtPnBvbGxfcnhfdGFzayk7CiAKIAkvKiBFbmFibGUgaW50ZXJydXB0cyAqLwogCWlvd3JpdGUzMihNV0w4S19BMkhfRVZFTlRTLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CiAKIAlyYyA9IG13bDhrX2Z3X2xvY2soaHcpOwogCWlmICghcmMpIHsKLQkJcmMgPSBtd2w4a19jbWRfODAyXzExX3JhZGlvX2VuYWJsZShodyk7CisJCXJjID0gbXdsOGtfY21kX3JhZGlvX2VuYWJsZShodyk7CiAKIAkJaWYgKCFwcml2LT5hcF9mdykgewogCQkJaWYgKCFyYykKLQkJCQlyYyA9IG13bDhrX2VuYWJsZV9zbmlmZmVyKGh3LCAwKTsKKwkJCQlyYyA9IG13bDhrX2NtZF9lbmFibGVfc25pZmZlcihodywgMCk7CiAKIAkJCWlmICghcmMpCiAJCQkJcmMgPSBtd2w4a19jbWRfc2V0X3ByZV9zY2FuKGh3KTsKQEAgLTI4NTEsMTAgKzMyMzksMTAgQEAKIAkJfQogCiAJCWlmICghcmMpCi0JCQlyYyA9IG13bDhrX2NtZF9zZXRyYXRlYWRhcHRtb2RlKGh3LCAwKTsKKwkJCXJjID0gbXdsOGtfY21kX3NldF9yYXRlYWRhcHRfbW9kZShodywgMCk7CiAKIAkJaWYgKCFyYykKLQkJCXJjID0gbXdsOGtfc2V0X3dtbShodywgMCk7CisJCQlyYyA9IG13bDhrX2NtZF9zZXRfd21tX21vZGUoaHcsIDApOwogCiAJCW13bDhrX2Z3X3VubG9jayhodyk7CiAJfQpAQCAtMjg2Miw3ICszMjUwLDggQEAKIAlpZiAocmMpIHsKIAkJaW93cml0ZTMyKDAsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKIAkJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7Ci0JCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKKwkJdGFza2xldF9kaXNhYmxlKCZwcml2LT5wb2xsX3R4X3Rhc2spOworCQl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnBvbGxfcnhfdGFzayk7CiAJfQogCiAJcmV0dXJuIHJjOwpAQCAtMjg3Myw3ICszMjYyLDcgQEAKIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCWludCBpOwogCi0JbXdsOGtfY21kXzgwMl8xMV9yYWRpb19kaXNhYmxlKGh3KTsKKwltd2w4a19jbWRfcmFkaW9fZGlzYWJsZShodyk7CiAKIAlpZWVlODAyMTFfc3RvcF9xdWV1ZXMoaHcpOwogCkBAIC0yODg2LDM2ICszMjc1LDI3IEBACiAJaWYgKHByaXYtPmJlYWNvbl9za2IgIT0gTlVMTCkKIAkJZGV2X2tmcmVlX3NrYihwcml2LT5iZWFjb25fc2tiKTsKIAotCS8qIFN0b3AgdHggcmVjbGFpbSB0YXNrbGV0ICovCi0JdGFza2xldF9kaXNhYmxlKCZwcml2LT50eF9yZWNsYWltX3Rhc2spOworCS8qIFN0b3AgVFggcmVjbGFpbSBhbmQgUlggdGFza2xldHMuICAqLworCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+cG9sbF90eF90YXNrKTsKKwl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnBvbGxfcnhfdGFzayk7CiAKIAkvKiBSZXR1cm4gYWxsIHNrYnMgdG8gbWFjODAyMTEgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCi0JCW13bDhrX3R4cV9yZWNsYWltKGh3LCBpLCAxKTsKKwkJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGksIElOVF9NQVgsIDEpOwogfQogCiBzdGF0aWMgaW50IG13bDhrX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwogCXN0cnVjdCBtd2w4a192aWYgKm13bDhrX3ZpZjsKLQotCS8qCi0JICogV2Ugb25seSBzdXBwb3J0IG9uZSBhY3RpdmUgaW50ZXJmYWNlIGF0IGEgdGltZS4KLQkgKi8KLQlpZiAocHJpdi0+dmlmICE9IE5VTEwpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQkvKgotCSAqIFdlIG9ubHkgc3VwcG9ydCBtYW5hZ2VkIGludGVyZmFjZXMgZm9yIG5vdy4KLQkgKi8KLQlpZiAoY29uZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQlyZXR1cm4gLUVJTlZBTDsKKwl1MzIgbWFjaWRzX3N1cHBvcnRlZDsKKwlpbnQgbWFjaWQ7CiAKIAkvKgogCSAqIFJlamVjdCBpbnRlcmZhY2UgY3JlYXRpb24gaWYgc25pZmZlciBtb2RlIGlzIGFjdGl2ZSwgYXMKIAkgKiBTVEEgb3BlcmF0aW9uIGlzIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGhhcmR3YXJlIHNuaWZmZXIKLQkgKiBtb2RlLgorCSAqIG1vZGUuICAoU25pZmZlciBtb2RlIGlzIG9ubHkgdXNlZCBvbiBTVEEgZmlybXdhcmUuKQogCSAqLwogCWlmIChwcml2LT5zbmlmZmVyX2VuYWJsZWQpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHVuYWJsZSB0byBjcmVhdGUgU1RBICIKQEAgLTI5MjQsMzcgKzMzMDQsNTQgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JLyogQ2xlYW4gb3V0IGRyaXZlciBwcml2YXRlIGFyZWEgKi8KLQltd2w4a192aWYgPSBNV0w4S19WSUYoY29uZi0+dmlmKTsKKworCXN3aXRjaCAodmlmLT50eXBlKSB7CisJY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKKwkJbWFjaWRzX3N1cHBvcnRlZCA9IHByaXYtPmFwX21hY2lkc19zdXBwb3J0ZWQ7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKKwkJbWFjaWRzX3N1cHBvcnRlZCA9IHByaXYtPnN0YV9tYWNpZHNfc3VwcG9ydGVkOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltYWNpZCA9IGZmcyhtYWNpZHNfc3VwcG9ydGVkICYgfnByaXYtPm1hY2lkc191c2VkKTsKKwlpZiAoIW1hY2lkLS0pCisJCXJldHVybiAtRUJVU1k7CisKKwkvKiBTZXR1cCBkcml2ZXIgcHJpdmF0ZSBhcmVhLiAqLworCW13bDhrX3ZpZiA9IE1XTDhLX1ZJRih2aWYpOwogCW1lbXNldChtd2w4a192aWYsIDAsIHNpemVvZigqbXdsOGtfdmlmKSk7Ci0KLQkvKiBTZXQgYW5kIHNhdmUgdGhlIG1hYyBhZGRyZXNzICovCi0JbXdsOGtfc2V0X21hY19hZGRyKGh3LCBjb25mLT5tYWNfYWRkcik7Ci0JbWVtY3B5KG13bDhrX3ZpZi0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0KLQkvKiBCYWNrIHBvaW50ZXIgdG8gcGFyZW50IGNvbmZpZyBibG9jayAqLwotCW13bDhrX3ZpZi0+cHJpdiA9IHByaXY7Ci0KLQkvKiBTZXQgSW5pdGlhbCBzZXF1ZW5jZSBudW1iZXIgdG8gemVybyAqLworCW13bDhrX3ZpZi0+dmlmID0gdmlmOworCW13bDhrX3ZpZi0+bWFjaWQgPSBtYWNpZDsKIAltd2w4a192aWYtPnNlcW5vID0gMDsKIAotCXByaXYtPnZpZiA9IGNvbmYtPnZpZjsKLQlwcml2LT5jdXJyZW50X2NoYW5uZWwgPSBOVUxMOworCS8qIFNldCB0aGUgbWFjIGFkZHJlc3MuICAqLworCW13bDhrX2NtZF9zZXRfbWFjX2FkZHIoaHcsIHZpZiwgdmlmLT5hZGRyKTsKKworCWlmIChwcml2LT5hcF9mdykKKwkJbXdsOGtfY21kX3NldF9uZXdfc3RuX2FkZF9zZWxmKGh3LCB2aWYpOworCisJcHJpdi0+bWFjaWRzX3VzZWQgfD0gMSA8PCBtd2w4a192aWYtPm1hY2lkOworCWxpc3RfYWRkX3RhaWwoJm13bDhrX3ZpZi0+bGlzdCwgJnByaXYtPnZpZl9saXN0KTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBtd2w4a19yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKwlzdHJ1Y3QgbXdsOGtfdmlmICptd2w4a192aWYgPSBNV0w4S19WSUYodmlmKTsKIAotCWlmIChwcml2LT52aWYgPT0gTlVMTCkKLQkJcmV0dXJuOworCWlmIChwcml2LT5hcF9mdykKKwkJbXdsOGtfY21kX3NldF9uZXdfc3RuX2RlbChodywgdmlmLCB2aWYtPmFkZHIpOwogCi0JbXdsOGtfc2V0X21hY19hZGRyKGh3LCAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIik7CisJbXdsOGtfY21kX3NldF9tYWNfYWRkcihodywgdmlmLCAiXHgwMFx4MDBceDAwXHgwMFx4MDBceDAwIik7CiAKLQlwcml2LT52aWYgPSBOVUxMOworCXByaXYtPm1hY2lkc191c2VkICY9IH4oMSA8PCBtd2w4a192aWYtPm1hY2lkKTsKKwlsaXN0X2RlbCgmbXdsOGtfdmlmLT5saXN0KTsKIH0KIAogc3RhdGljIGludCBtd2w4a19jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQpAQCAtMjk2NCw4ICszMzYxLDcgQEAKIAlpbnQgcmM7CiAKIAlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFKSB7Ci0JCW13bDhrX2NtZF84MDJfMTFfcmFkaW9fZGlzYWJsZShodyk7Ci0JCXByaXYtPmN1cnJlbnRfY2hhbm5lbCA9IE5VTEw7CisJCW13bDhrX2NtZF9yYWRpb19kaXNhYmxlKGh3KTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yOTczLDE5ICszMzY5LDE3IEBACiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKLQlyYyA9IG13bDhrX2NtZF84MDJfMTFfcmFkaW9fZW5hYmxlKGh3KTsKKwlyYyA9IG13bDhrX2NtZF9yYWRpb19lbmFibGUoaHcpOwogCWlmIChyYykKIAkJZ290byBvdXQ7CiAKLQlyYyA9IG13bDhrX2NtZF9zZXRfcmZfY2hhbm5lbChodywgY29uZi0+Y2hhbm5lbCk7CisJcmMgPSBtd2w4a19jbWRfc2V0X3JmX2NoYW5uZWwoaHcsIGNvbmYpOwogCWlmIChyYykKIAkJZ290byBvdXQ7CiAKLQlwcml2LT5jdXJyZW50X2NoYW5uZWwgPSBjb25mLT5jaGFubmVsOwotCiAJaWYgKGNvbmYtPnBvd2VyX2xldmVsID4gMTgpCiAJCWNvbmYtPnBvd2VyX2xldmVsID0gMTg7Ci0JcmMgPSBtd2w4a19jbWRfODAyXzExX3JmX3R4X3Bvd2VyKGh3LCBjb25mLT5wb3dlcl9sZXZlbCk7CisJcmMgPSBtd2w4a19jbWRfcmZfdHhfcG93ZXIoaHcsIGNvbmYtPnBvd2VyX2xldmVsKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwogCkBAIC0zMDAzLDc5ICszMzk3LDE2MCBAQAogCXJldHVybiByYzsKIH0KIAotc3RhdGljIHZvaWQgbXdsOGtfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sCi0JCQkJICAgdTMyIGNoYW5nZWQpCitzdGF0aWMgdm9pZAorbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9zdGEoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvLCB1MzIgY2hhbmdlZCkKIHsKIAlzdHJ1Y3QgbXdsOGtfcHJpdiAqcHJpdiA9IGh3LT5wcml2OwotCXN0cnVjdCBtd2w4a192aWYgKm13bDhrX3ZpZiA9IE1XTDhLX1ZJRih2aWYpOworCXUzMiBhcF9sZWdhY3lfcmF0ZXM7CisJdTggYXBfbWNzX3JhdGVzWzE2XTsKIAlpbnQgcmM7CiAKLQlpZiAoKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9BU1NPQykgPT0gMCkKKwlpZiAobXdsOGtfZndfbG9jayhodykpCiAJCXJldHVybjsKIAotCXByaXYtPmNhcHR1cmVfYmVhY29uID0gZmFsc2U7CisJLyoKKwkgKiBObyBuZWVkIHRvIGNhcHR1cmUgYSBiZWFjb24gaWYgd2UncmUgbm8gbG9uZ2VyIGFzc29jaWF0ZWQuCisJICovCisJaWYgKChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpICYmICF2aWYtPmJzc19jb25mLmFzc29jKQorCQlwcml2LT5jYXB0dXJlX2JlYWNvbiA9IGZhbHNlOwogCi0JcmMgPSBtd2w4a19md19sb2NrKGh3KTsKLQlpZiAocmMpCi0JCXJldHVybjsKKwkvKgorCSAqIEdldCB0aGUgQVAncyBsZWdhY3kgYW5kIE1DUyByYXRlcy4KKwkgKi8KKwlpZiAodmlmLT5ic3NfY29uZi5hc3NvYykgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqYXA7CiAKLQlpZiAoaW5mby0+YXNzb2MpIHsKLQkJbWVtY3B5KCZtd2w4a192aWYtPmJzc19pbmZvLCBpbmZvLAotCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYpKTsKKwkJcmN1X3JlYWRfbG9jaygpOwogCi0JCW1lbWNweShtd2w4a192aWYtPmJzc2lkLCBpbmZvLT5ic3NpZCwgRVRIX0FMRU4pOworCQlhcCA9IGllZWU4MDIxMV9maW5kX3N0YSh2aWYsIHZpZi0+YnNzX2NvbmYuYnNzaWQpOworCQlpZiAoYXAgPT0gTlVMTCkgeworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlnb3RvIG91dDsKKwkJfQogCi0JCS8qIEluc3RhbGwgcmF0ZXMgKi8KLQkJcmMgPSBtd2w4a191cGRhdGVfcmF0ZXNldChodywgdmlmKTsKKwkJaWYgKGh3LT5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQkJYXBfbGVnYWN5X3JhdGVzID0gYXAtPnN1cHBfcmF0ZXNbSUVFRTgwMjExX0JBTkRfMkdIWl07CisJCX0gZWxzZSB7CisJCQlhcF9sZWdhY3lfcmF0ZXMgPQorCQkJCWFwLT5zdXBwX3JhdGVzW0lFRUU4MDIxMV9CQU5EXzVHSFpdIDw8IDU7CisJCX0KKwkJbWVtY3B5KGFwX21jc19yYXRlcywgYXAtPmh0X2NhcC5tY3MucnhfbWFzaywgMTYpOworCisJCXJjdV9yZWFkX3VubG9jaygpOworCX0KKworCWlmICgoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0FTU09DKSAmJiB2aWYtPmJzc19jb25mLmFzc29jKSB7CisJCXJjID0gbXdsOGtfY21kX3NldF9yYXRlKGh3LCB2aWYsIGFwX2xlZ2FjeV9yYXRlcywgYXBfbWNzX3JhdGVzKTsKIAkJaWYgKHJjKQogCQkJZ290byBvdXQ7CiAKLQkJLyogVHVybiBvbiByYXRlIGFkYXB0YXRpb24gKi8KLQkJcmMgPSBtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGUoaHcsIE1XTDhLX1VTRV9BVVRPX1JBVEUsCi0JCQlNV0w4S19VQ0FTVF9SQVRFLCBOVUxMKTsKKwkJcmMgPSBtd2w4a19jbWRfdXNlX2ZpeGVkX3JhdGVfc3RhKGh3KTsKIAkJaWYgKHJjKQogCQkJZ290byBvdXQ7CisJfQogCi0JCS8qIFNldCByYWRpbyBwcmVhbWJsZSAqLwotCQlyYyA9IG13bDhrX3NldF9yYWRpb19wcmVhbWJsZShodywgaW5mby0+dXNlX3Nob3J0X3ByZWFtYmxlKTsKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkgeworCQlyYyA9IG13bDhrX3NldF9yYWRpb19wcmVhbWJsZShodywKKwkJCQl2aWYtPmJzc19jb25mLnVzZV9zaG9ydF9wcmVhbWJsZSk7CiAJCWlmIChyYykKIAkJCWdvdG8gb3V0OworCX0KIAotCQkvKiBTZXQgc2xvdCB0aW1lICovCi0JCXJjID0gbXdsOGtfY21kX3NldF9zbG90KGh3LCBpbmZvLT51c2Vfc2hvcnRfc2xvdCk7CisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfU0xPVCkgeworCQlyYyA9IG13bDhrX2NtZF9zZXRfc2xvdChodywgdmlmLT5ic3NfY29uZi51c2Vfc2hvcnRfc2xvdCk7CiAJCWlmIChyYykKIAkJCWdvdG8gb3V0OworCX0KIAotCQkvKiBVcGRhdGUgcGVlciByYXRlIGluZm8gKi8KLQkJcmMgPSBtd2w4a19jbWRfdXBkYXRlX3N0YV9kYihodywgdmlmLAotCQkJCU1XTDhLX1NUQV9EQl9NT0RJRllfRU5UUlkpOworCWlmICh2aWYtPmJzc19jb25mLmFzc29jICYmCisJICAgIChjaGFuZ2VkICYgKEJTU19DSEFOR0VEX0FTU09DIHwgQlNTX0NIQU5HRURfRVJQX0NUU19QUk9UIHwKKwkJCUJTU19DSEFOR0VEX0hUKSkpIHsKKwkJcmMgPSBtd2w4a19jbWRfc2V0X2FpZChodywgdmlmLCBhcF9sZWdhY3lfcmF0ZXMpOwogCQlpZiAocmMpCiAJCQlnb3RvIG91dDsKKwl9CiAKLQkJLyogU2V0IEFJRCAqLwotCQlyYyA9IG13bDhrX2NtZF9zZXRfYWlkKGh3LCB2aWYpOwotCQlpZiAocmMpCi0JCQlnb3RvIG91dDsKLQorCWlmICh2aWYtPmJzc19jb25mLmFzc29jICYmCisJICAgIChjaGFuZ2VkICYgKEJTU19DSEFOR0VEX0FTU09DIHwgQlNTX0NIQU5HRURfQkVBQ09OX0lOVCkpKSB7CiAJCS8qCiAJCSAqIEZpbmFsaXplIHRoZSBqb2luLiAgVGVsbCByeCBoYW5kbGVyIHRvIHByb2Nlc3MKIAkJICogbmV4dCBiZWFjb24gZnJvbSBvdXIgQlNTSUQuCiAJCSAqLwotCQltZW1jcHkocHJpdi0+Y2FwdHVyZV9ic3NpZCwgbXdsOGtfdmlmLT5ic3NpZCwgRVRIX0FMRU4pOworCQltZW1jcHkocHJpdi0+Y2FwdHVyZV9ic3NpZCwgdmlmLT5ic3NfY29uZi5ic3NpZCwgRVRIX0FMRU4pOwogCQlwcml2LT5jYXB0dXJlX2JlYWNvbiA9IHRydWU7Ci0JfSBlbHNlIHsKLQkJcmMgPSBtd2w4a19jbWRfdXBkYXRlX3N0YV9kYihodywgdmlmLCBNV0w4S19TVEFfREJfREVMX0VOVFJZKTsKLQkJbWVtc2V0KCZtd2w4a192aWYtPmJzc19pbmZvLCAwLAotCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYpKTsKLQkJbWVtc2V0KG13bDhrX3ZpZi0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKIAl9CiAKIG91dDoKIAltd2w4a19md191bmxvY2soaHcpOwogfQogCitzdGF0aWMgdm9pZAorbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywgdTMyIGNoYW5nZWQpCit7CisJaW50IHJjOworCisJaWYgKG13bDhrX2Z3X2xvY2soaHcpKQorCQlyZXR1cm47CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0VSUF9QUkVBTUJMRSkgeworCQlyYyA9IG13bDhrX3NldF9yYWRpb19wcmVhbWJsZShodywKKwkJCQl2aWYtPmJzc19jb25mLnVzZV9zaG9ydF9wcmVhbWJsZSk7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0OworCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkFTSUNfUkFURVMpIHsKKwkJaW50IGlkeDsKKwkJaW50IHJhdGU7CisKKwkJLyoKKwkJICogVXNlIGxvd2VzdCBzdXBwb3J0ZWQgYmFzaWMgcmF0ZSBmb3IgbXVsdGljYXN0cworCQkgKiBhbmQgbWFuYWdlbWVudCBmcmFtZXMgKHN1Y2ggYXMgcHJvYmUgcmVzcG9uc2VzIC0tCisJCSAqIGJlYWNvbnMgd2lsbCBhbHdheXMgZ28gb3V0IGF0IDEgTWIvcykuCisJCSAqLworCQlpZHggPSBmZnModmlmLT5ic3NfY29uZi5iYXNpY19yYXRlcyk7CisJCWlmIChpZHgpCisJCQlpZHgtLTsKKworCQlpZiAoaHctPmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKQorCQkJcmF0ZSA9IG13bDhrX3JhdGVzXzI0W2lkeF0uaHdfdmFsdWU7CisJCWVsc2UKKwkJCXJhdGUgPSBtd2w4a19yYXRlc181MFtpZHhdLmh3X3ZhbHVlOworCisJCW13bDhrX2NtZF91c2VfZml4ZWRfcmF0ZV9hcChodywgcmF0ZSwgcmF0ZSk7CisJfQorCisJaWYgKGNoYW5nZWQgJiAoQlNTX0NIQU5HRURfQkVBQ09OX0lOVCB8IEJTU19DSEFOR0VEX0JFQUNPTikpIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCQlza2IgPSBpZWVlODAyMTFfYmVhY29uX2dldChodywgdmlmKTsKKwkJaWYgKHNrYiAhPSBOVUxMKSB7CisJCQltd2w4a19jbWRfc2V0X2JlYWNvbihodywgdmlmLCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJCWtmcmVlX3NrYihza2IpOworCQl9CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCkKKwkJbXdsOGtfY21kX2Jzc19zdGFydChodywgdmlmLCBpbmZvLT5lbmFibGVfYmVhY29uKTsKKworb3V0OgorCW13bDhrX2Z3X3VubG9jayhodyk7Cit9CisKK3N0YXRpYyB2b2lkCittd2w4a19ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywgdTMyIGNoYW5nZWQpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCWlmICghcHJpdi0+YXBfZncpCisJCW13bDhrX2Jzc19pbmZvX2NoYW5nZWRfc3RhKGh3LCB2aWYsIGluZm8sIGNoYW5nZWQpOworCWVsc2UKKwkJbXdsOGtfYnNzX2luZm9fY2hhbmdlZF9hcChodywgdmlmLCBpbmZvLCBjaGFuZ2VkKTsKK30KKwogc3RhdGljIHU2NCBtd2w4a19wcmVwYXJlX211bHRpY2FzdChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgICBpbnQgbWNfY291bnQsIHN0cnVjdCBkZXZfYWRkcl9saXN0ICptY2xpc3QpCiB7CkBAIC0zMTA1LDcgKzM1ODAsNyBAQAogCSAqIG9wZXJhdGlvbiwgc28gcmVmdXNlIHRvIGVuYWJsZSBzbmlmZmVyIG1vZGUgaWYgYSBTVEEKIAkgKiBpbnRlcmZhY2UgaXMgYWN0aXZlLgogCSAqLwotCWlmIChwcml2LT52aWYgIT0gTlVMTCkgeworCWlmICghbGlzdF9lbXB0eSgmcHJpdi0+dmlmX2xpc3QpKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCQlwcmludGsoS0VSTl9JTkZPICIlczogbm90IGVuYWJsaW5nIHNuaWZmZXIgIgogCQkJICAgICAgICJtb2RlIGJlY2F1c2UgU1RBIGludGVyZmFjZSBpcyBhY3RpdmVcbiIsCkBAIC0zMTE0LDcgKzM1ODksNyBAQAogCX0KIAogCWlmICghcHJpdi0+c25pZmZlcl9lbmFibGVkKSB7Ci0JCWlmIChtd2w4a19lbmFibGVfc25pZmZlcihodywgMSkpCisJCWlmIChtd2w4a19jbWRfZW5hYmxlX3NuaWZmZXIoaHcsIDEpKQogCQkJcmV0dXJuIDA7CiAJCXByaXYtPnNuaWZmZXJfZW5hYmxlZCA9IHRydWU7CiAJfQpAQCAtMzEyNiw2ICszNjAxLDE0IEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbXdsOGtfdmlmICptd2w4a19maXJzdF92aWYoc3RydWN0IG13bDhrX3ByaXYgKnByaXYpCit7CisJaWYgKCFsaXN0X2VtcHR5KCZwcml2LT52aWZfbGlzdCkpCisJCXJldHVybiBsaXN0X2VudHJ5KHByaXYtPnZpZl9saXN0Lm5leHQsIHN0cnVjdCBtd2w4a192aWYsIGxpc3QpOworCisJcmV0dXJuIE5VTEw7Cit9CisKIHN0YXRpYyB2b2lkIG13bDhrX2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJICAgdW5zaWduZWQgaW50IGNoYW5nZWRfZmxhZ3MsCiAJCQkJICAgdW5zaWduZWQgaW50ICp0b3RhbF9mbGFncywKQEAgLTMxNjMsNyArMzY0Niw3IEBACiAJfQogCiAJaWYgKHByaXYtPnNuaWZmZXJfZW5hYmxlZCkgewotCQltd2w4a19lbmFibGVfc25pZmZlcihodywgMCk7CisJCW13bDhrX2NtZF9lbmFibGVfc25pZmZlcihodywgMCk7CiAJCXByaXYtPnNuaWZmZXJfZW5hYmxlZCA9IGZhbHNlOwogCX0KIApAQCAtMzE3NCw3ICszNjU3LDggQEAKIAkJCSAqLwogCQkJbXdsOGtfY21kX3NldF9wcmVfc2Nhbihodyk7CiAJCX0gZWxzZSB7Ci0JCQl1OCAqYnNzaWQ7CisJCQlzdHJ1Y3QgbXdsOGtfdmlmICptd2w4a192aWY7CisJCQljb25zdCB1OCAqYnNzaWQ7CiAKIAkJCS8qCiAJCQkgKiBFbmFibGUgdGhlIEJTUyBmaWx0ZXIuCkBAIC0zMTg0LDkgKzM2NjgsMTEgQEAKIAkJCSAqICh3aGVyZSB0aGUgT1VJIHBhcnQgbmVlZHMgdG8gYmUgbm9uemVybyBmb3IKIAkJCSAqIHRoZSBCU1NJRCB0byBiZSBhY2NlcHRlZCBieSBQT1NUX1NDQU4pLgogCQkJICovCi0JCQlic3NpZCA9ICJceDAxXHgwMFx4MDBceDAwXHgwMFx4MDAiOwotCQkJaWYgKHByaXYtPnZpZiAhPSBOVUxMKQotCQkJCWJzc2lkID0gTVdMOEtfVklGKHByaXYtPnZpZiktPmJzc2lkOworCQkJbXdsOGtfdmlmID0gbXdsOGtfZmlyc3RfdmlmKHByaXYpOworCQkJaWYgKG13bDhrX3ZpZiAhPSBOVUxMKQorCQkJCWJzc2lkID0gbXdsOGtfdmlmLT52aWYtPmJzc19jb25mLmJzc2lkOworCQkJZWxzZQorCQkJCWJzc2lkID0gIlx4MDFceDAwXHgwMFx4MDBceDAwXHgwMCI7CiAKIAkJCW13bDhrX2NtZF9zZXRfcG9zdF9zY2FuKGh3LCBic3NpZCk7CiAJCX0KQEAgLTMyMTMsNyArMzY5OSwzOSBAQAogCiBzdGF0aWMgaW50IG13bDhrX3NldF9ydHNfdGhyZXNob2xkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCB1MzIgdmFsdWUpCiB7Ci0JcmV0dXJuIG13bDhrX3J0c190aHJlc2hvbGQoaHcsIE1XTDhLX0NNRF9TRVQsIHZhbHVlKTsKKwlyZXR1cm4gbXdsOGtfY21kX3NldF9ydHNfdGhyZXNob2xkKGh3LCB2YWx1ZSk7Cit9CisKK3N0YXRpYyBpbnQgbXdsOGtfc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPSBody0+cHJpdjsKKworCWlmIChwcml2LT5hcF9mdykKKwkJcmV0dXJuIG13bDhrX2NtZF9zZXRfbmV3X3N0bl9kZWwoaHcsIHZpZiwgc3RhLT5hZGRyKTsKKwllbHNlCisJCXJldHVybiBtd2w4a19jbWRfdXBkYXRlX3N0YWRiX2RlbChodywgdmlmLCBzdGEtPmFkZHIpOworfQorCitzdGF0aWMgaW50IG13bDhrX3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQoreworCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7CisJaW50IHJldDsKKworCWlmICghcHJpdi0+YXBfZncpIHsKKwkJcmV0ID0gbXdsOGtfY21kX3VwZGF0ZV9zdGFkYl9hZGQoaHcsIHZpZiwgc3RhKTsKKwkJaWYgKHJldCA+PSAwKSB7CisJCQlNV0w4S19TVEEoc3RhKS0+cGVlcl9pZCA9IHJldDsKKwkJCXJldHVybiAwOworCQl9CisKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gbXdsOGtfY21kX3NldF9uZXdfc3RuX2FkZChodywgdmlmLCBzdGEpOwogfQogCiBzdGF0aWMgaW50IG13bDhrX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBxdWV1ZSwKQEAgLTMyMjUsMTQgKzM3NDMsMTQgQEAKIAlyYyA9IG13bDhrX2Z3X2xvY2soaHcpOwogCWlmICghcmMpIHsKIAkJaWYgKCFwcml2LT53bW1fZW5hYmxlZCkKLQkJCXJjID0gbXdsOGtfc2V0X3dtbShodywgMSk7CisJCQlyYyA9IG13bDhrX2NtZF9zZXRfd21tX21vZGUoaHcsIDEpOwogCiAJCWlmICghcmMpCi0JCQlyYyA9IG13bDhrX3NldF9lZGNhX3BhcmFtcyhodywgcXVldWUsCi0JCQkJCQkgICBwYXJhbXMtPmN3X21pbiwKLQkJCQkJCSAgIHBhcmFtcy0+Y3dfbWF4LAotCQkJCQkJICAgcGFyYW1zLT5haWZzLAotCQkJCQkJICAgcGFyYW1zLT50eG9wKTsKKwkJCXJjID0gbXdsOGtfY21kX3NldF9lZGNhX3BhcmFtcyhodywgcXVldWUsCisJCQkJCQkgICAgICAgcGFyYW1zLT5jd19taW4sCisJCQkJCQkgICAgICAgcGFyYW1zLT5jd19tYXgsCisJCQkJCQkgICAgICAgcGFyYW1zLT5haWZzLAorCQkJCQkJICAgICAgIHBhcmFtcy0+dHhvcCk7CiAKIAkJbXdsOGtfZndfdW5sb2NrKGh3KTsKIAl9CkBAIC0zMjQwLDI4ICszNzU4LDI2IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IG13bDhrX2dldF90eF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKQotewotCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0Jc3RydWN0IG13bDhrX3R4X3F1ZXVlICp0eHE7Ci0JaW50IGluZGV4OwotCi0Jc3Bpbl9sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKLQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBNV0w4S19UWF9RVUVVRVM7IGluZGV4KyspIHsKLQkJdHhxID0gcHJpdi0+dHhxICsgaW5kZXg7Ci0JCW1lbWNweSgmc3RhdHNbaW5kZXhdLCAmdHhxLT5zdGF0cywKLQkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzKSk7Ci0JfQotCXNwaW5fdW5sb2NrX2JoKCZwcml2LT50eF9sb2NrKTsKLQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IG13bDhrX2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cykKIHsKLQlyZXR1cm4gbXdsOGtfY21kXzgwMl8xMV9nZXRfc3RhdChodywgc3RhdHMpOworCXJldHVybiBtd2w4a19jbWRfZ2V0X3N0YXQoaHcsIHN0YXRzKTsKK30KKworc3RhdGljIGludAorbXdsOGtfYW1wZHVfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgICBlbnVtIGllZWU4MDIxMV9hbXBkdV9tbG1lX2FjdGlvbiBhY3Rpb24sCisJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUxNiB0aWQsIHUxNiAqc3NuKQoreworCXN3aXRjaCAoYWN0aW9uKSB7CisJY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQ6CisJY2FzZSBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUDoKKwkJaWYgKCEoaHctPmZsYWdzICYgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OKSkKKwkJCXJldHVybiAtRU5PVFNVUFA7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PVFNVUFA7CisJfQogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgbXdsOGtfb3BzID0gewpAQCAtMzI3NSw2NyArMzc5MSw3MiBAQAogCS5wcmVwYXJlX211bHRpY2FzdAk9IG13bDhrX3ByZXBhcmVfbXVsdGljYXN0LAogCS5jb25maWd1cmVfZmlsdGVyCT0gbXdsOGtfY29uZmlndXJlX2ZpbHRlciwKIAkuc2V0X3J0c190aHJlc2hvbGQJPSBtd2w4a19zZXRfcnRzX3RocmVzaG9sZCwKKwkuc3RhX2FkZAkJPSBtd2w4a19zdGFfYWRkLAorCS5zdGFfcmVtb3ZlCQk9IG13bDhrX3N0YV9yZW1vdmUsCiAJLmNvbmZfdHgJCT0gbXdsOGtfY29uZl90eCwKLQkuZ2V0X3R4X3N0YXRzCQk9IG13bDhrX2dldF90eF9zdGF0cywKIAkuZ2V0X3N0YXRzCQk9IG13bDhrX2dldF9zdGF0cywKKwkuYW1wZHVfYWN0aW9uCQk9IG13bDhrX2FtcGR1X2FjdGlvbiwKIH07CiAKLXN0YXRpYyB2b2lkIG13bDhrX3R4X3JlY2xhaW1faGFuZGxlcih1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAoc3RydWN0IGllZWU4MDIxMV9odyAqKSBkYXRhOwotCXN0cnVjdCBtd2w4a19wcml2ICpwcml2ID0gaHctPnByaXY7Ci0KLQlzcGluX2xvY2tfYmgoJnByaXYtPnR4X2xvY2spOwotCWZvciAoaSA9IDA7IGkgPCBNV0w4S19UWF9RVUVVRVM7IGkrKykKLQkJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGksIDApOwotCi0JaWYgKHByaXYtPnR4X3dhaXQgIT0gTlVMTCAmJiAhcHJpdi0+cGVuZGluZ190eF9wa3RzKSB7Ci0JCWNvbXBsZXRlKHByaXYtPnR4X3dhaXQpOwotCQlwcml2LT50eF93YWl0ID0gTlVMTDsKLQl9Ci0Jc3Bpbl91bmxvY2tfYmgoJnByaXYtPnR4X2xvY2spOwotfQotCiBzdGF0aWMgdm9pZCBtd2w4a19maW5hbGl6ZV9qb2luX3dvcmtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IG13bDhrX3ByaXYgKnByaXYgPQogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG13bDhrX3ByaXYsIGZpbmFsaXplX2pvaW5fd29ya2VyKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcHJpdi0+YmVhY29uX3NrYjsKLQl1OCBkdGltID0gTVdMOEtfVklGKHByaXYtPnZpZiktPmJzc19pbmZvLmR0aW1fcGVyaW9kOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopc2tiLT5kYXRhOworCWludCBsZW4gPSBza2ItPmxlbiAtIG9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24udmFyaWFibGUpOworCWNvbnN0IHU4ICp0aW0gPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX1RJTSwKKwkJCQkJIG1nbXQtPnUuYmVhY29uLnZhcmlhYmxlLCBsZW4pOworCWludCBkdGltX3BlcmlvZCA9IDE7CiAKLQltd2w4a19maW5hbGl6ZV9qb2luKHByaXYtPmh3LCBza2ItPmRhdGEsIHNrYi0+bGVuLCBkdGltKTsKKwlpZiAodGltICYmIHRpbVsxXSA+PSAyKQorCQlkdGltX3BlcmlvZCA9IHRpbVszXTsKKworCW13bDhrX2NtZF9maW5hbGl6ZV9qb2luKHByaXYtPmh3LCBza2ItPmRhdGEsIHNrYi0+bGVuLCBkdGltX3BlcmlvZCk7CisKIAlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0KIAlwcml2LT5iZWFjb25fc2tiID0gTlVMTDsKIH0KIAogZW51bSB7Ci0JTVdMODY4NyA9IDAsCisJTVdMODM2MyA9IDAsCisJTVdMODY4NywKIAlNV0w4MzY2LAogfTsKIAogc3RhdGljIHN0cnVjdCBtd2w4a19kZXZpY2VfaW5mbyBtd2w4a19pbmZvX3RibFtdIF9fZGV2aW5pdGRhdGEgPSB7Ci0JeworCVtNV0w4MzYzXSA9IHsKKwkJLnBhcnRfbmFtZQk9ICI4OHc4MzYzIiwKKwkJLmhlbHBlcl9pbWFnZQk9ICJtd2w4ay9oZWxwZXJfODM2My5mdyIsCisJCS5md19pbWFnZQk9ICJtd2w4ay9mbWltYWdlXzgzNjMuZnciLAorCX0sCisJW01XTDg2ODddID0gewogCQkucGFydF9uYW1lCT0gIjg4dzg2ODciLAogCQkuaGVscGVyX2ltYWdlCT0gIm13bDhrL2hlbHBlcl84Njg3LmZ3IiwKIAkJLmZ3X2ltYWdlCT0gIm13bDhrL2ZtaW1hZ2VfODY4Ny5mdyIsCi0JCS5yeGRfb3BzCT0gJnJ4ZF84Njg3X29wcywKLQkJLm1vZGVzCQk9IEJJVChOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSwKIAl9LAotCXsKKwlbTVdMODM2Nl0gPSB7CiAJCS5wYXJ0X25hbWUJPSAiODh3ODM2NiIsCiAJCS5oZWxwZXJfaW1hZ2UJPSAibXdsOGsvaGVscGVyXzgzNjYuZnciLAogCQkuZndfaW1hZ2UJPSAibXdsOGsvZm1pbWFnZV84MzY2LmZ3IiwKLQkJLnJ4ZF9vcHMJPSAmcnhkXzgzNjZfb3BzLAotCQkubW9kZXMJCT0gMCwKKwkJLmFwX3J4ZF9vcHMJPSAmcnhkXzgzNjZfYXBfb3BzLAogCX0sCiB9OwogCitNT0RVTEVfRklSTVdBUkUoIm13bDhrL2hlbHBlcl84MzYzLmZ3Iik7CitNT0RVTEVfRklSTVdBUkUoIm13bDhrL2ZtaW1hZ2VfODM2My5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJtd2w4ay9oZWxwZXJfODY4Ny5mdyIpOworTU9EVUxFX0ZJUk1XQVJFKCJtd2w4ay9mbWltYWdlXzg2ODcuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgibXdsOGsvaGVscGVyXzgzNjYuZnciKTsKK01PRFVMRV9GSVJNV0FSRSgibXdsOGsvZm1pbWFnZV84MzY2LmZ3Iik7CisKIHN0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShtd2w4a19wY2lfaWRfdGFibGUpID0geworCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHgyYTBjKSwgLmRyaXZlcl9kYXRhID0gTVdMODM2MywgfSwKKwl7IFBDSV9WREVWSUNFKE1BUlZFTEwsIDB4MmEyNCksIC5kcml2ZXJfZGF0YSA9IE1XTDgzNjMsIH0sCiAJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDJhMmIpLCAuZHJpdmVyX2RhdGEgPSBNV0w4Njg3LCB9LAogCXsgUENJX1ZERVZJQ0UoTUFSVkVMTCwgMHgyYTMwKSwgLmRyaXZlcl9kYXRhID0gTVdMODY4NywgfSwKIAl7IFBDSV9WREVWSUNFKE1BUlZFTEwsIDB4MmE0MCksIC5kcml2ZXJfZGF0YSA9IE1XTDgzNjYsIH0sCisJeyBQQ0lfVkRFVklDRShNQVJWRUxMLCAweDJhNDMpLCAuZHJpdmVyX2RhdGEgPSBNV0w4MzY2LCB9LAogCXsgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbXdsOGtfcGNpX2lkX3RhYmxlKTsKQEAgLTMzNTQsNiArMzg3NSw3IEBACiAJCXByaW50ZWRfdmVyc2lvbiA9IDE7CiAJfQogCisKIAlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZW5hYmxlIG5ldyBQQ0kgZGV2aWNlXG4iLApAQCAtMzM3MCw2ICszODkyLDcgQEAKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCisKIAlodyA9IGllZWU4MDIxMV9hbGxvY19odyhzaXplb2YoKnByaXYpLCAmbXdsOGtfb3BzKTsKIAlpZiAoaHcgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpZWVlODAyMTEgYWxsb2MgZmFpbGVkXG4iLCBNV0w4S19OQU1FKTsKQEAgLTMzNzcsMTcgKzM5MDAsMTQgQEAKIAkJZ290byBlcnJfZnJlZV9yZWc7CiAJfQogCisJU0VUX0lFRUU4MDIxMV9ERVYoaHcsICZwZGV2LT5kZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBodyk7CisKIAlwcml2ID0gaHctPnByaXY7CiAJcHJpdi0+aHcgPSBodzsKIAlwcml2LT5wZGV2ID0gcGRldjsKIAlwcml2LT5kZXZpY2VfaW5mbyA9ICZtd2w4a19pbmZvX3RibFtpZC0+ZHJpdmVyX2RhdGFdOwotCXByaXYtPnJ4ZF9vcHMgPSBwcml2LT5kZXZpY2VfaW5mby0+cnhkX29wczsKLQlwcml2LT5zbmlmZmVyX2VuYWJsZWQgPSBmYWxzZTsKLQlwcml2LT53bW1fZW5hYmxlZCA9IGZhbHNlOwotCXByaXYtPnBlbmRpbmdfdHhfcGt0cyA9IDA7CiAKLQlTRVRfSUVFRTgwMjExX0RFVihodywgJnBkZXYtPmRldik7Ci0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIGh3KTsKIAogCXByaXYtPnNyYW0gPSBwY2lfaW9tYXAocGRldiwgMCwgMHgxMDAwMCk7CiAJaWYgKHByaXYtPnNyYW0gPT0gTlVMTCkgewpAQCAtMzQxMCwxNiArMzkzMCw0NiBAQAogCQl9CiAJfQogCi0JbWVtY3B5KHByaXYtPmNoYW5uZWxzLCBtd2w4a19jaGFubmVscywgc2l6ZW9mKG13bDhrX2NoYW5uZWxzKSk7Ci0JcHJpdi0+YmFuZC5iYW5kID0gSUVFRTgwMjExX0JBTkRfMkdIWjsKLQlwcml2LT5iYW5kLmNoYW5uZWxzID0gcHJpdi0+Y2hhbm5lbHM7Ci0JcHJpdi0+YmFuZC5uX2NoYW5uZWxzID0gQVJSQVlfU0laRShtd2w4a19jaGFubmVscyk7Ci0JcHJpdi0+YmFuZC5iaXRyYXRlcyA9IHByaXYtPnJhdGVzOwotCXByaXYtPmJhbmQubl9iaXRyYXRlcyA9IEFSUkFZX1NJWkUobXdsOGtfcmF0ZXMpOwotCWh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmcHJpdi0+YmFuZDsKIAotCUJVSUxEX0JVR19PTihzaXplb2YocHJpdi0+cmF0ZXMpICE9IHNpemVvZihtd2w4a19yYXRlcykpOwotCW1lbWNweShwcml2LT5yYXRlcywgbXdsOGtfcmF0ZXMsIHNpemVvZihtd2w4a19yYXRlcykpOworCS8qIFJlc2V0IGZpcm13YXJlIGFuZCBoYXJkd2FyZSAqLworCW13bDhrX2h3X3Jlc2V0KHByaXYpOworCisJLyogQXNrIHVzZXJsYW5kIGhvdHBsdWcgZGFlbW9uIGZvciB0aGUgZGV2aWNlIGZpcm13YXJlICovCisJcmMgPSBtd2w4a19yZXF1ZXN0X2Zpcm13YXJlKHByaXYpOworCWlmIChyYykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBGaXJtd2FyZSBmaWxlcyBub3QgZm91bmRcbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOworCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOworCX0KKworCS8qIExvYWQgZmlybXdhcmUgaW50byBoYXJkd2FyZSAqLworCXJjID0gbXdsOGtfbG9hZF9maXJtd2FyZShodyk7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBzdGFydCBmaXJtd2FyZVxuIiwKKwkJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCWdvdG8gZXJyX3N0b3BfZmlybXdhcmU7CisJfQorCisJLyogUmVjbGFpbSBtZW1vcnkgb25jZSBmaXJtd2FyZSBpcyBzdWNjZXNzZnVsbHkgbG9hZGVkICovCisJbXdsOGtfcmVsZWFzZV9maXJtd2FyZShwcml2KTsKKworCisJaWYgKHByaXYtPmFwX2Z3KSB7CisJCXByaXYtPnJ4ZF9vcHMgPSBwcml2LT5kZXZpY2VfaW5mby0+YXBfcnhkX29wczsKKwkJaWYgKHByaXYtPnJ4ZF9vcHMgPT0gTlVMTCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogRHJpdmVyIGRvZXMgbm90IGhhdmUgQVAgIgorCQkJICAgICAgICJmaXJtd2FyZSBpbWFnZSBzdXBwb3J0IGZvciB0aGlzIGhhcmR3YXJlXG4iLAorCQkJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSk7CisJCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOworCQl9CisJfSBlbHNlIHsKKwkJcHJpdi0+cnhkX29wcyA9ICZyeGRfc3RhX29wczsKKwl9CisKKwlwcml2LT5zbmlmZmVyX2VuYWJsZWQgPSBmYWxzZTsKKwlwcml2LT53bW1fZW5hYmxlZCA9IGZhbHNlOworCXByaXYtPnBlbmRpbmdfdHhfcGt0cyA9IDA7CisKIAogCS8qCiAJICogRXh0cmEgaGVhZHJvb20gaXMgdGhlIHNpemUgb2YgdGhlIHJlcXVpcmVkIERNQSBoZWFkZXIKQEAgLTM0MzIsMTIgKzM5ODIsMTMgQEAKIAogCWh3LT5xdWV1ZXMgPSBNV0w4S19UWF9RVUVVRVM7CiAKLQlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IHByaXYtPmRldmljZV9pbmZvLT5tb2RlczsKLQogCS8qIFNldCByc3NpIGFuZCBub2lzZSB2YWx1ZXMgdG8gZEJtICovCiAJaHctPmZsYWdzIHw9IElFRUU4MDIxMV9IV19TSUdOQUxfREJNIHwgSUVFRTgwMjExX0hXX05PSVNFX0RCTTsKIAlody0+dmlmX2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgbXdsOGtfdmlmKTsKLQlwcml2LT52aWYgPSBOVUxMOworCWh3LT5zdGFfZGF0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBtd2w4a19zdGEpOworCisJcHJpdi0+bWFjaWRzX3VzZWQgPSAwOworCUlOSVRfTElTVF9IRUFEKCZwcml2LT52aWZfbGlzdCk7CiAKIAkvKiBTZXQgZGVmYXVsdCByYWRpbyBzdGF0ZSBhbmQgcHJlYW1ibGUgKi8KIAlwcml2LT5yYWRpb19vbiA9IDA7CkBAIC0zNDQ2LDE5ICszOTk3LDIwIEBACiAJLyogRmluYWxpemUgam9pbiB3b3JrZXIgKi8KIAlJTklUX1dPUksoJnByaXYtPmZpbmFsaXplX2pvaW5fd29ya2VyLCBtd2w4a19maW5hbGl6ZV9qb2luX3dvcmtlcik7CiAKLQkvKiBUWCByZWNsYWltIHRhc2tsZXQgKi8KLQl0YXNrbGV0X2luaXQoJnByaXYtPnR4X3JlY2xhaW1fdGFzaywKLQkJCW13bDhrX3R4X3JlY2xhaW1faGFuZGxlciwgKHVuc2lnbmVkIGxvbmcpaHcpOwotCXRhc2tsZXRfZGlzYWJsZSgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKKwkvKiBUWCByZWNsYWltIGFuZCBSWCB0YXNrbGV0cy4gICovCisJdGFza2xldF9pbml0KCZwcml2LT5wb2xsX3R4X3Rhc2ssIG13bDhrX3R4X3BvbGwsICh1bnNpZ25lZCBsb25nKWh3KTsKKwl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnBvbGxfdHhfdGFzayk7CisJdGFza2xldF9pbml0KCZwcml2LT5wb2xsX3J4X3Rhc2ssIG13bDhrX3J4X3BvbGwsICh1bnNpZ25lZCBsb25nKWh3KTsKKwl0YXNrbGV0X2Rpc2FibGUoJnByaXYtPnBvbGxfcnhfdGFzayk7CiAKIAkvKiBQb3dlciBtYW5hZ2VtZW50IGNvb2tpZSAqLwogCXByaXYtPmNvb2tpZSA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHByaXYtPnBkZXYsIDQsICZwcml2LT5jb29raWVfZG1hKTsKIAlpZiAocHJpdi0+Y29va2llID09IE5VTEwpCi0JCWdvdG8gZXJyX2lvdW5tYXA7CisJCWdvdG8gZXJyX3N0b3BfZmlybXdhcmU7CiAKIAlyYyA9IG13bDhrX3J4cV9pbml0KGh3LCAwKTsKIAlpZiAocmMpCi0JCWdvdG8gZXJyX2lvdW5tYXA7CisJCWdvdG8gZXJyX2ZyZWVfY29va2llOwogCXJ4cV9yZWZpbGwoaHcsIDAsIElOVF9NQVgpOwogCiAJbXV0ZXhfaW5pdCgmcHJpdi0+ZndfbXV0ZXgpOwpAQCAtMzQ3OCw3ICs0MDMwLDggQEAKIAogCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfU1RBVFVTKTsKIAlpb3dyaXRlMzIoMCwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX01BU0spOwotCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfQ0xFQVJfU0VMKTsKKwlpb3dyaXRlMzIoTVdMOEtfQTJIX0lOVF9UWF9ET05FIHwgTVdMOEtfQTJIX0lOVF9SWF9SRUFEWSwKKwkJICBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfQ0xFQVJfU0VMKTsKIAlpb3dyaXRlMzIoMHhmZmZmZmZmZiwgcHJpdi0+cmVncyArIE1XTDhLX0hJVV9BMkhfSU5URVJSVVBUX1NUQVRVU19NQVNLKTsKIAogCXJjID0gcmVxdWVzdF9pcnEocHJpdi0+cGRldi0+aXJxLCBtd2w4a19pbnRlcnJ1cHQsCkBAIC0zNDg5LDMxICs0MDQyLDkgQEAKIAkJZ290byBlcnJfZnJlZV9xdWV1ZXM7CiAJfQogCi0JLyogUmVzZXQgZmlybXdhcmUgYW5kIGhhcmR3YXJlICovCi0JbXdsOGtfaHdfcmVzZXQocHJpdik7Ci0KLQkvKiBBc2sgdXNlcmxhbmQgaG90cGx1ZyBkYWVtb24gZm9yIHRoZSBkZXZpY2UgZmlybXdhcmUgKi8KLQlyYyA9IG13bDhrX3JlcXVlc3RfZmlybXdhcmUocHJpdik7Ci0JaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IEZpcm13YXJlIGZpbGVzIG5vdCBmb3VuZFxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSk7Ci0JCWdvdG8gZXJyX2ZyZWVfaXJxOwotCX0KLQotCS8qIExvYWQgZmlybXdhcmUgaW50byBoYXJkd2FyZSAqLwotCXJjID0gbXdsOGtfbG9hZF9maXJtd2FyZShodyk7Ci0JaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCBzdGFydCBmaXJtd2FyZVxuIiwKLQkJICAgICAgIHdpcGh5X25hbWUoaHctPndpcGh5KSk7Ci0JCWdvdG8gZXJyX3N0b3BfZmlybXdhcmU7Ci0JfQotCi0JLyogUmVjbGFpbSBtZW1vcnkgb25jZSBmaXJtd2FyZSBpcyBzdWNjZXNzZnVsbHkgbG9hZGVkICovCi0JbXdsOGtfcmVsZWFzZV9maXJtd2FyZShwcml2KTsKLQogCS8qCiAJICogVGVtcG9yYXJpbHkgZW5hYmxlIGludGVycnVwdHMuICBJbml0aWFsIGZpcm13YXJlIGhvc3QKLQkgKiBjb21tYW5kcyB1c2UgaW50ZXJydXB0cyBhbmQgYXZvaWRzIHBvbGxpbmcuICBEaXNhYmxlCisJICogY29tbWFuZHMgdXNlIGludGVycnVwdHMgYW5kIGF2b2lkIHBvbGxpbmcuICBEaXNhYmxlCiAJICogaW50ZXJydXB0cyB3aGVuIGRvbmUuCiAJICovCiAJaW93cml0ZTMyKE1XTDhLX0EySF9FVkVOVFMsIHByaXYtPnJlZ3MgKyBNV0w4S19ISVVfQTJIX0lOVEVSUlVQVF9NQVNLKTsKQEAgLTM1MjksMjIgKzQwNjAsMjkgQEAKIAlpZiAocmMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogQ2Fubm90IGluaXRpYWxpc2UgZmlybXdhcmVcbiIsCiAJCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOworCQlnb3RvIGVycl9mcmVlX2lycTsKIAl9CiAKKwlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyA9IDA7CisJaWYgKHByaXYtPmFwX21hY2lkc19zdXBwb3J0ZWQpCisJCWh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzIHw9IEJJVChOTDgwMjExX0lGVFlQRV9BUCk7CisJaWYgKHByaXYtPnN0YV9tYWNpZHNfc3VwcG9ydGVkKQorCQlody0+d2lwaHktPmludGVyZmFjZV9tb2RlcyB8PSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7CisKKwogCS8qIFR1cm4gcmFkaW8gb2ZmICovCi0JcmMgPSBtd2w4a19jbWRfODAyXzExX3JhZGlvX2Rpc2FibGUoaHcpOworCXJjID0gbXdsOGtfY21kX3JhZGlvX2Rpc2FibGUoaHcpOwogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgZGlzYWJsZVxuIiwgd2lwaHlfbmFtZShody0+d2lwaHkpKTsKLQkJZ290byBlcnJfc3RvcF9maXJtd2FyZTsKKwkJZ290byBlcnJfZnJlZV9pcnE7CiAJfQogCiAJLyogQ2xlYXIgTUFDIGFkZHJlc3MgKi8KLQlyYyA9IG13bDhrX3NldF9tYWNfYWRkcihodywgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIpOworCXJjID0gbXdsOGtfY21kX3NldF9tYWNfYWRkcihodywgTlVMTCwgIlx4MDBceDAwXHgwMFx4MDBceDAwXHgwMCIpOwogCWlmIChyYykgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBDYW5ub3QgY2xlYXIgTUFDIGFkZHJlc3NcbiIsCiAJCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOworCQlnb3RvIGVycl9mcmVlX2lycTsKIAl9CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KQEAgLTM1NTUsNyArNDA5Myw3IEBACiAJaWYgKHJjKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IENhbm5vdCByZWdpc3RlciBkZXZpY2VcbiIsCiAJCSAgICAgICB3aXBoeV9uYW1lKGh3LT53aXBoeSkpOwotCQlnb3RvIGVycl9zdG9wX2Zpcm13YXJlOworCQlnb3RvIGVycl9mcmVlX3F1ZXVlczsKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICIlczogJXMgdiVkLCAlcE0sICVzIGZpcm13YXJlICV1LiV1LiV1LiV1XG4iLApAQCAtMzU2NywxMCArNDEwNSw2IEBACiAKIAlyZXR1cm4gMDsKIAotZXJyX3N0b3BfZmlybXdhcmU6Ci0JbXdsOGtfaHdfcmVzZXQocHJpdik7Ci0JbXdsOGtfcmVsZWFzZV9maXJtd2FyZShwcml2KTsKLQogZXJyX2ZyZWVfaXJxOgogCWlvd3JpdGUzMigwLCBwcml2LT5yZWdzICsgTVdMOEtfSElVX0EySF9JTlRFUlJVUFRfTUFTSyk7CiAJZnJlZV9pcnEocHJpdi0+cGRldi0+aXJxLCBodyk7CkBAIC0zNTgwLDExICs0MTE0LDE2IEBACiAJCW13bDhrX3R4cV9kZWluaXQoaHcsIGkpOwogCW13bDhrX3J4cV9kZWluaXQoaHcsIDApOwogCi1lcnJfaW91bm1hcDoKK2Vycl9mcmVlX2Nvb2tpZToKIAlpZiAocHJpdi0+Y29va2llICE9IE5VTEwpCiAJCXBjaV9mcmVlX2NvbnNpc3RlbnQocHJpdi0+cGRldiwgNCwKIAkJCQlwcml2LT5jb29raWUsIHByaXYtPmNvb2tpZV9kbWEpOwogCitlcnJfc3RvcF9maXJtd2FyZToKKwltd2w4a19od19yZXNldChwcml2KTsKKwltd2w4a19yZWxlYXNlX2Zpcm13YXJlKHByaXYpOworCitlcnJfaW91bm1hcDoKIAlpZiAocHJpdi0+cmVncyAhPSBOVUxMKQogCQlwY2lfaW91bm1hcChwZGV2LCBwcml2LT5yZWdzKTsKIApAQCAtMzYyMiwxNSArNDE2MSwxNiBAQAogCiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcoaHcpOwogCi0JLyogUmVtb3ZlIHR4IHJlY2xhaW0gdGFza2xldCAqLwotCXRhc2tsZXRfa2lsbCgmcHJpdi0+dHhfcmVjbGFpbV90YXNrKTsKKwkvKiBSZW1vdmUgVFggcmVjbGFpbSBhbmQgUlggdGFza2xldHMuICAqLworCXRhc2tsZXRfa2lsbCgmcHJpdi0+cG9sbF90eF90YXNrKTsKKwl0YXNrbGV0X2tpbGwoJnByaXYtPnBvbGxfcnhfdGFzayk7CiAKIAkvKiBTdG9wIGhhcmR3YXJlICovCiAJbXdsOGtfaHdfcmVzZXQocHJpdik7CiAKIAkvKiBSZXR1cm4gYWxsIHNrYnMgdG8gbWFjODAyMTEgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTVdMOEtfVFhfUVVFVUVTOyBpKyspCi0JCW13bDhrX3R4cV9yZWNsYWltKGh3LCBpLCAxKTsKKwkJbXdsOGtfdHhxX3JlY2xhaW0oaHcsIGksIElOVF9NQVgsIDEpOwogCiAJZm9yIChpID0gMDsgaSA8IE1XTDhLX1RYX1FVRVVFUzsgaSsrKQogCQltd2w4a190eHFfZGVpbml0KGh3LCBpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuYwppbmRleCA0MDQ4MzBmLi5lNjM2OTI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5jCkBAIC0xMDI4LDcgKzEwMjgsNyBAQAogfQogCiBpbnQgX19vcmlub2NvX2h3X3NldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3Qgb3Jpbm9jb19wcml2YXRlICpwcml2LAotCQkJCSAgICBzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdCwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgaW50IG1jX2NvdW50LCBpbnQgcHJvbWlzYykKIHsKIAloZXJtZXNfdCAqaHcgPSAmcHJpdi0+aHc7CkBAIC0xMDQ5LDI0ICsxMDQ5LDE2IEBACiAJICogZ3JvdXAgYWRkcmVzcyBpZiBlaXRoZXIgd2Ugd2FudCB0byBtdWx0aWNhc3QsIG9yIGlmIHdlIHdlcmUKIAkgKiBtdWx0aWNhc3RpbmcgYW5kIHdhbnQgdG8gc3RvcCAqLwogCWlmICghcHJvbWlzYyAmJiAobWNfY291bnQgfHwgcHJpdi0+bWNfY291bnQpKSB7Ci0JCXN0cnVjdCBkZXZfbWNfbGlzdCAqcCA9IG1jX2xpc3Q7CisJCXN0cnVjdCBkZXZfbWNfbGlzdCAqcDsKIAkJc3RydWN0IGhlcm1lc19tdWx0aWNhc3QgbWNsaXN0OwotCQlpbnQgaTsKKwkJaW50IGkgPSAwOwogCi0JCWZvciAoaSA9IDA7IGkgPCBtY19jb3VudDsgaSsrKSB7Ci0JCQkvKiBwYXJhbm9pYTogaXMgbGlzdCBzaG9ydGVyIHRoYW4gbWNfY291bnQ/ICovCi0JCQlCVUdfT04oIXApOwotCQkJLyogcGFyYW5vaWE6IGJhZCBhZGRyZXNzIHNpemUgaW4gbGlzdD8gKi8KLQkJCUJVR19PTihwLT5kbWlfYWRkcmxlbiAhPSBFVEhfQUxFTik7Ci0KLQkJCW1lbWNweShtY2xpc3QuYWRkcltpXSwgcC0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKLQkJCXAgPSBwLT5uZXh0OworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihwLCBkZXYpIHsKKwkJCWlmIChpID09IG1jX2NvdW50KQorCQkJCWJyZWFrOworCQkJbWVtY3B5KG1jbGlzdC5hZGRyW2krK10sIHAtPmRtaV9hZGRyLCBFVEhfQUxFTik7CiAJCX0KIAotCQlpZiAocCkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNdWx0aWNhc3QgbGlzdCBpcyAiCi0JCQkgICAgICAgImxvbmdlciB0aGFuIG1jX2NvdW50XG4iLCBwcml2LT5uZGV2LT5uYW1lKTsKLQogCQllcnIgPSBoZXJtZXNfd3JpdGVfbHR2KGh3LCBVU0VSX0JBUCwKIAkJCQkgICBIRVJNRVNfUklEX0NORkdST1VQQUREUkVTU0VTLAogCQkJCSAgIEhFUk1FU19CWVRFU19UT19SRUNMRU4obWNfY291bnQgKiBFVEhfQUxFTiksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL2h3LmgKaW5kZXggZTJmN2ZkYy4uOTc5OWExZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9ody5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vaHcuaApAQCAtNDMsNyArNDMsNyBAQAogCQkJICAgICAgdTggKnRzYywgc2l6ZV90IHRzY19sZW4pOwogaW50IG9yaW5vY29fY2xlYXJfdGtpcF9rZXkoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwgaW50IGtleV9pZHgpOwogaW50IF9fb3Jpbm9jb19od19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG9yaW5vY29fcHJpdmF0ZSAqcHJpdiwKLQkJCQkgICAgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QsCisJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJICAgIGludCBtY19jb3VudCwgaW50IHByb21pc2MpOwogaW50IG9yaW5vY29faHdfZ2V0X2Vzc2lkKHN0cnVjdCBvcmlub2NvX3ByaXZhdGUgKnByaXYsIGludCAqYWN0aXZlLAogCQkJIGNoYXIgYnVmW0lXX0VTU0lEX01BWF9TSVpFKzFdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9tYWluLmMKaW5kZXggNzUzYTE4MC4uYjQyNjM0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9tYWluLmMKQEAgLTE2NjgsMTYgKzE2NjgsMTUgQEAKIAkvKiBUaGUgSGVybWVzIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGFuIGFsbG11bHRpIG1vZGUsIHNvIHdlIGdvCiAJICogaW50byBwcm9taXNjdW91cyBtb2RlIGFuZCBsZXQgdGhlIHVwcGVyIGxldmVscyBkZWFsLiAqLwogCWlmICgoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKLQkgICAgKGRldi0+bWNfY291bnQgPiBNQVhfTVVMVElDQVNUKHByaXYpKSkgeworCSAgICAobmV0ZGV2X21jX2NvdW50KGRldikgPiBNQVhfTVVMVElDQVNUKHByaXYpKSkgewogCQlwcm9taXNjID0gMTsKIAkJbWNfY291bnQgPSAwOwogCX0gZWxzZSB7CiAJCXByb21pc2MgPSAwOwotCQltY19jb3VudCA9IGRldi0+bWNfY291bnQ7CisJCW1jX2NvdW50ID0gbmV0ZGV2X21jX2NvdW50KGRldik7CiAJfQogCi0JZXJyID0gX19vcmlub2NvX2h3X3NldF9tdWx0aWNhc3RfbGlzdChwcml2LCBkZXYtPm1jX2xpc3QsIG1jX2NvdW50LAotCQkJCQkgICAgICBwcm9taXNjKTsKKwllcnIgPSBfX29yaW5vY29faHdfc2V0X211bHRpY2FzdF9saXN0KHByaXYsIGRldiwgbWNfY291bnQsIHByb21pc2MpOwogCiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX2NzLmMKaW5kZXggZjI3YmI4My4uMWQ0YWRhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX2NzLmMKQEAgLTQwNyw3ICs0MDcsNiBAQAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCIzQ29tIiwgIjNDUldFNzM3QSBBaXJDb25uZWN0IFdpcmVsZXNzIExBTiBQQyBDYXJkIiwgMHg0MTI0MGU1YiwgMHg1NjAxMGFmMyksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkFDVElPTlRFQyIsICJQUklTTSBXaXJlbGVzcyBMQU4gUEMgQ2FyZCIsIDB4MzkzMDg5ZGEsIDB4YTcxZTY5ZDUpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJBZGR0cm9uIiwgIkFXUC0xMDAgV2lyZWxlc3MgUENNQ0lBIiwgMHhlNmVjNTJjZSwgMHgwODY0OWFmMiksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKCJBSVJWQVNUIiwgIklFRUUgODAyLjExYiBXaXJlbGVzcyBQQ01DSUEgQ2FyZCIsICJIRkEzODYzIiwgMHhlYTU2OTUzMSwgMHg0YmNiOTY0NSwgMHgzNTVjYjA5MiksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkFsbGllZCBUZWxlc3luIiwgIkFULVdDTDQ1MiBXaXJlbGVzcyBQQ01DSUEgUmFkaW8iLCAweDVjZDAxNzA1LCAweDQyNzE2NjBmKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQVNVUyIsICI4MDJfMTFiX1BDX0NBUkRfMjUiLCAweDc4ZmMwNmVlLCAweGRiOWFhODQyKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiQVNVUyIsICI4MDJfMTFCX0NGX0NBUkRfMjUiLCAweDc4ZmMwNmVlLCAweDQ1YTUwYzFlKSwKQEAgLTQxNyw3ICs0MTYsNiBAQAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJCVUZGQUxPIiwgIldMSS1DRi1TMTFHIiwgMHgyZGVjZWNlMywgMHg4MjA2N2MxOCksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkNhYmxldHJvbiIsICJSb2FtQWJvdXQgODAyLjExIERTIiwgMHgzMmQ0NDVmNSwgMHhlZGVmZmQ5MCksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkNvbXBhcSIsICJXTDIwMF8xMU1icHNfV2lyZWxlc3NfUENJX0NhcmQiLCAweDU0ZjdjNDljLCAweDE1YTc1ZTViKSwKLQlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoImNvcmVnYSIsICJXTCBQQ0NMLTExIiwgIklTTDM3MzAwUCIsIDB4MGEyMTUwMWEsIDB4NTk4Njg5MjYsIDB4YzkwNDlhMzkpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJjb3JlZ2EgSy5LLiIsICJXaXJlbGVzcyBMQU4gUENDLTExIiwgMHg1MjYxNDQwZiwgMHhhNjQwNTU4NCksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoImNvcmVnYSBLLksuIiwgIldpcmVsZXNzIExBTiBQQ0NBLTExIiwgMHg1MjYxNDQwZiwgMHhkZjYxMTVmOSksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoImNvcmVnYV9LLksuIiwgIldpcmVsZXNzX0xBTl9QQ0NCLTExIiwgMHgyOWUzMzMxMSwgMHhlZTdhMjdhZSksCkBAIC00MzIsNyArNDMwLDYgQEAKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiSU5URVJTSUwiLCAiSEZBMzg0eC9JRUVFIiwgMHg3NGM1ZTQwZCwgMHhkYjQ3MmExOCksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIklOVEVSU0lMIiwgIkktR0FURSAxMU0gUEMgQ2FyZCAvIFBDIENhcmQgcGx1cyIsIDB4NzRjNWU0MGQsIDB4ODMwNGZmNzcpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJJbnRlcnNpbCIsICJQUklTTSAyXzUgUENNQ0lBIEFEQVBURVIiLCAweDRiODAxYTE3LCAweDYzNDVhMGJmKSwKLQlQQ01DSUFfREVWSUNFX1BST0RfSUQxMjMoIkludGVyc2lsIiwgIlBSSVNNIEZyZWVkb20gUENNQ0lBIEFkYXB0ZXIiLCAiSVNMMzcxMDBQIiwgMHg0YjgwMWExNywgMHhmMjIyZWMyZCwgMHg2MzBkNTJiMiksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIkxlQXJ0ZXJ5IiwgIlNZTkNCWUFJUiAxMU1icHMgV2lyZWxlc3MgTEFOIFBDIENhcmQiLCAweDdlM2IzMjZhLCAweDQ5ODkzZTkyKSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiTGlua3N5cyIsICJXaXJlbGVzcyBDb21wYWN0Rmxhc2ggQ2FyZCIsIDB4MDczM2NjODEsIDB4MGM1MmYzOTUpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJMdWNlbnQgVGVjaG5vbG9naWVzIiwgIldhdmVMQU4vSUVFRSIsIDB4MjNlYjk5NDksIDB4YzU2MmU3MmEpLApAQCAtNDQ1LDcgKzQ0Miw2IEBACiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIk5vcnRlbCBOZXR3b3JrcyIsICJlbW9iaWxpdHkgODAyLjExIFdpcmVsZXNzIExBTiBQQyBDYXJkIiwgMHgyZDYxN2VhMCwgMHg4OGNkNTc2NyksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIk9FTSIsICJQUklTTTIgSUVFRSA4MDIuMTEgUEMtQ2FyZCIsIDB4ZmVhNTRjOTAsIDB4NDhmMmJkZDYpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJPVEMiLCAiV2lyZWxlc3MgQWlyRVpZIDI0MTEtUENDIFdMQU4gQ2FyZCIsIDB4NGFjNDQyODcsIDB4MjM1YTZiZWQpLAotCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyMygiUENNQ0lBIiwgIjExTSBXTEFOIENhcmQgdjIuNSIsICJJU0wzNzMwMFAiLCAweDI4MWYxYzVkLCAweDZlNDQwNDg3LCAweGM5MDQ5YTM5KSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiUExBTkVYIiwgIkdlb1dhdmUvR1ctQ0YxMTAiLCAweDIwOWY0MGFiLCAweGQ5NzE1MjY0KSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiUExBTkVYIiwgIkdlb1dhdmUvR1ctTlMxMTAiLCAweDIwOWY0MGFiLCAweDQ2MjYzMTc4KSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiUFJPWElNIiwgIkxBTiBQQyBDQVJEIEhBUk1PTlkgODAyMTFCIiwgMHhjNjUzNmE1ZSwgMHgwOTBjM2NkOSksCkBAIC00NTQsOCArNDUwLDExIEBACiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlNNQyIsICJTTUMyNTMyVy1CIEVsaXRlQ29ubmVjdCBXaXJlbGVzcyBBZGFwdGVyIiwgMHhjNGY4YjE4YiwgMHgxOTZiZDc1NyksCiAJUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIoIlNNQyIsICJTTUMyNjMyVyIsIDB4YzRmOGIxOGIsIDB4NDc0YTFmMmEpLAogCVBDTUNJQV9ERVZJQ0VfUFJPRF9JRDEyKCJTeW1ib2wgVGVjaG5vbG9naWVzIiwgIkxBNDExMSBTcGVjdHJ1bTI0IFdpcmVsZXNzIExBTiBQQyBDYXJkIiwgMHgzZjAyYjRkNiwgMHgzNjYzY2IwZSksCi0JUENNQ0lBX0RFVklDRV9QUk9EX0lEMTIzKCJUaGUgTGlua3N5cyBHcm91cCwgSW5jLiIsICJJbnN0YW50IFdpcmVsZXNzIE5ldHdvcmsgUEMgQ2FyZCIsICJJU0wzNzMwMFAiLCAweGE1ZjQ3MmMyLCAweDU5MGViNTAyLCAweGM5MDQ5YTM5KSwKIAlQQ01DSUFfREVWSUNFX1BST0RfSUQxMigiWm9vbUFpciAxMU1icHMgSGlnaCIsICJSYXRlIHdpcmVsZXNzIE5ldHdvcmtpbmciLCAweDI3M2ZlM2RiLCAweDMyYTFlYWVlKSwKKwlQQ01DSUFfREVWSUNFX1BST0RfSUQzKCJIRkEzODYzIiwgMHgzNTVjYjA5MiksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMygiSVNMMzcxMDBQIiwgMHg2MzBkNTJiMiksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMygiSVNMMzcxMDFQLTEwIiwgMHhkZDk3YTI2YiksCisJUENNQ0lBX0RFVklDRV9QUk9EX0lEMygiSVNMMzczMDBQIiwgMHhjOTA0OWEzOSksCiAJUENNQ0lBX0RFVklDRV9OVUxMLAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNtY2lhLCBvcmlub2NvX2NzX2lkcyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fbm9ydGVsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fbm9ydGVsLmMKaW5kZXggYzEzYTRjMy4uMDc1ZjQ0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX25vcnRlbC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19ub3J0ZWwuYwpAQCAtMjc0LDcgKzI3NCw3IEBACiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3Jpbm9jb19ub3J0ZWxfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShvcmlub2NvX25vcnRlbF9pZF90YWJsZSkgPSB7CiAJLyogTm9ydGVsIGVtb2JpbGl0eSBQQ0kgKi8KIAl7MHgxMjZjLCAweDgwMzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKIAkvKiBTeW1ib2wgTEEtNDEyMyBQQ0kgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wY2kuYwppbmRleCBmZWE3NzgxLi5iZGE1MzE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BjaS5jCkBAIC0yMTIsNyArMjEyLDcgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvcmlub2NvX3BjaV9pZF90YWJsZVtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG9yaW5vY29fcGNpX2lkX3RhYmxlKSA9IHsKIAkvKiBJbnRlcnNpbCBQcmlzbSAzICovCiAJezB4MTI2MCwgMHgzODcyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCiAJLyogSW50ZXJzaWwgUHJpc20gMi41ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGx4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fcGx4LmMKaW5kZXggM2YyOTQyYS4uZTBkNTg3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3BseC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb19wbHguYwpAQCAtMzEwLDcgKzMxMCw3IEBACiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgb3Jpbm9jb19wbHhfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShvcmlub2NvX3BseF9pZF90YWJsZSkgPSB7CiAJezB4MTExYSwgMHgxMDIzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCS8qIFNpZW1lbnMgU3BlZWRTdHJlYW0gU1MxMDIzICovCiAJezB4MTM4NSwgMHg0MTAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELH0sCS8qIE5ldGdlYXIgTUEzMDEgKi8KIAl7MHgxNWU4LCAweDAxMzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwJLyogQ29ycmVnYSAgLSBkb2VzIHRoaXMgd29yaz8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb190bWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28vb3Jpbm9jb190bWQuYwppbmRleCBkMzQ1MjU0Li44OGNiYzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvL29yaW5vY29fdG1kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby9vcmlub2NvX3RtZC5jCkBAIC0yMDMsNyArMjAzLDcgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBvcmlub2NvX3RtZF9pZF90YWJsZVtdID0geworc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKG9yaW5vY29fdG1kX2lkX3RhYmxlKSA9IHsKIAl7MHgxNWU4LCAweDAxMzEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwgICAgICAvKiBOREMgYW5kIE9FTXMsIGUuZy4gcGhlZWNvbSAqLwogCXswLH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9tYWluLmMKaW5kZXggMTgwMTJkYi4uNGY3NTJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvbWFpbi5jCkBAIC0zMywyMSArMzMsMjkgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBUygicHJpc201NGNvbW1vbiIpOwogCitzdGF0aWMgaW50IHA1NF9zdGFfYWRkX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKQoreworCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gaHctPnByaXY7CisKKwkvKgorCSAqIE5vdGlmeSB0aGUgZmlybXdhcmUgdGhhdCB3ZSBkb24ndCB3YW50IG9yIHdlIGRvbid0CisJICogbmVlZCB0byBidWZmZXIgZnJhbWVzIGZvciB0aGlzIHN0YXRpb24gYW55bW9yZS4KKwkgKi8KKworCXA1NF9zdGFfdW5sb2NrKHByaXYsIHN0YS0+YWRkcik7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgcDU0X3N0YV9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJICAgICAgZW51bSBzdGFfbm90aWZ5X2NtZCBub3RpZnlfY21kLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKLQlzd2l0Y2ggKG5vdGlmeV9jbWQpIHsKLQljYXNlIFNUQV9OT1RJRllfQUREOgotCWNhc2UgU1RBX05PVElGWV9SRU1PVkU6Ci0JCS8qCi0JCSAqIE5vdGlmeSB0aGUgZmlybXdhcmUgdGhhdCB3ZSBkb24ndCB3YW50IG9yIHdlIGRvbid0Ci0JCSAqIG5lZWQgdG8gYnVmZmVyIGZyYW1lcyBmb3IgdGhpcyBzdGF0aW9uIGFueW1vcmUuCi0JCSAqLwogCi0JCXA1NF9zdGFfdW5sb2NrKHByaXYsIHN0YS0+YWRkcik7Ci0JCWJyZWFrOworCXN3aXRjaCAobm90aWZ5X2NtZCkgewogCWNhc2UgU1RBX05PVElGWV9BV0FLRToKIAkJLyogdXBkYXRlIHRoZSBmaXJtd2FyZSdzIGZpbHRlciB0YWJsZSAqLwogCQlwNTRfc3RhX3VubG9jayhwcml2LCBzdGEtPmFkZHIpOwpAQCAtMjE2LDcgKzIyNCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgcDU0X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIApAQCAtMjI2LDI4ICsyMzQsMjggQEAKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAotCXByaXYtPnZpZiA9IGNvbmYtPnZpZjsKKwlwcml2LT52aWYgPSB2aWY7CiAKLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FESE9DOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVA6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgotCQlwcml2LT5tb2RlID0gY29uZi0+dHlwZTsKKwkJcHJpdi0+bW9kZSA9IHZpZi0+dHlwZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAotCW1lbWNweShwcml2LT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkocHJpdi0+bWFjX2FkZHIsIHZpZi0+YWRkciwgRVRIX0FMRU4pOwogCXA1NF9zZXR1cF9tYWMocHJpdik7CiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb25mX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcDU0X3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgcDU0X2NvbW1vbiAqcHJpdiA9IGRldi0+cHJpdjsKIApAQCAtMzU4LDE2ICszNjYsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHA1NF9nZXRfdHhfc3RhdHMoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKQotewotCXN0cnVjdCBwNTRfY29tbW9uICpwcml2ID0gZGV2LT5wcml2OwotCi0JbWVtY3B5KHN0YXRzLCAmcHJpdi0+dHhfc3RhdHNbUDU0X1FVRVVFX0RBVEFdLAotCSAgICAgICBzaXplb2Yoc3RhdHNbMF0pICogZGV2LT5xdWV1ZXMpOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZCBwNTRfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8sCkBAIC01MTYsMTMgKzUxNCwxNCBAQAogCS5yZW1vdmVfaW50ZXJmYWNlCT0gcDU0X3JlbW92ZV9pbnRlcmZhY2UsCiAJLnNldF90aW0JCT0gcDU0X3NldF90aW0sCiAJLnN0YV9ub3RpZnkJCT0gcDU0X3N0YV9ub3RpZnksCisJLnN0YV9hZGQJCT0gcDU0X3N0YV9hZGRfcmVtb3ZlLAorCS5zdGFfcmVtb3ZlCQk9IHA1NF9zdGFfYWRkX3JlbW92ZSwKIAkuc2V0X2tleQkJPSBwNTRfc2V0X2tleSwKIAkuY29uZmlnCQkJPSBwNTRfY29uZmlnLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcDU0X2Jzc19pbmZvX2NoYW5nZWQsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSBwNTRfY29uZmlndXJlX2ZpbHRlciwKIAkuY29uZl90eAkJPSBwNTRfY29uZl90eCwKIAkuZ2V0X3N0YXRzCQk9IHA1NF9nZXRfc3RhdHMsCi0JLmdldF90eF9zdGF0cwkJPSBwNTRfZ2V0X3R4X3N0YXRzCiB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX2h3ICpwNTRfaW5pdF9jb21tb24oc2l6ZV90IHByaXZfZGF0YV9sZW4pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0LmgKaW5kZXggMWFmYzM5NC4uNDNhM2IyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTQuaApAQCAtMTU3LDYgKzE1NywxMiBAQAogCiAjZW5kaWYgLyogQ09ORklHX1A1NF9MRURTICovCiAKK3N0cnVjdCBwNTRfdHhfcXVldWVfc3RhdHMgeworCXVuc2lnbmVkIGludCBsZW47CisJdW5zaWduZWQgaW50IGxpbWl0OworCXVuc2lnbmVkIGludCBjb3VudDsKK307CisKIHN0cnVjdCBwNTRfY29tbW9uIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwpAQCAtMTgzLDcgKzE4OSw3IEBACiAJLyogKGUpRENGIC8gUU9TIHN0YXRlICovCiAJYm9vbCB1c2Vfc2hvcnRfc2xvdDsKIAlzcGlubG9ja190IHR4X3N0YXRzX2xvY2s7Ci0Jc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyB0eF9zdGF0c1s4XTsKKwlzdHJ1Y3QgcDU0X3R4X3F1ZXVlX3N0YXRzIHR4X3N0YXRzWzhdOwogCXN0cnVjdCBwNTRfZWRjZl9xdWV1ZV9wYXJhbSBxb3NfcGFyYW1zWzhdOwogCiAJLyogUmFkaW8gZGF0YSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5jCmluZGV4IGE3MmY3YzIuLmVkNGJkZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmMKQEAgLTMxLDcgKzMxLDcgQEAKIE1PRFVMRV9BTElBUygicHJpc201NHBjaSIpOwogTU9EVUxFX0ZJUk1XQVJFKCJpc2wzODg2cGNpIik7CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwNTRwX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwNTRwX3RhYmxlKSA9IHsKIAkvKiBJbnRlcnNpbCBQUklTTSBEdWV0dGUvUHJpc20gR1QgV2lyZWxlc3MgTEFOIGFkYXB0ZXIgKi8KIAl7IFBDSV9ERVZJQ0UoMHgxMjYwLCAweDM4OTApIH0sCiAJLyogM0NPTSAzQ1JXRTE1NEc3MiBXaXJlbGVzcyBMQU4gYWRhcHRlciAqLwpAQCAtMTU3LDYgKzE1NywxNCBAQAogCQkJCQkJIHNrYl90YWlsX3BvaW50ZXIoc2tiKSwKIAkJCQkJCSBwcml2LT5jb21tb24ucnhfbXR1ICsgMzIsCiAJCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKworCQkJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwcml2LT5wZGV2LCBtYXBwaW5nKSkgeworCQkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJCQkJZGV2X2VycigmcHJpdi0+cGRldi0+ZGV2LAorCQkJCQkiUlggRE1BIE1hcHBpbmcgZXJyb3JcbiIpOworCQkJCWJyZWFrOworCQkJfQorCiAJCQlkZXNjLT5ob3N0X2FkZHIgPSBjcHVfdG9fbGUzMihtYXBwaW5nKTsKIAkJCWRlc2MtPmRldmljZV9hZGRyID0gMDsJLy8gRklYTUU6IG5lY2Vzc2FyeT8KIAkJCWRlc2MtPmxlbiA9IGNwdV90b19sZTE2KHByaXYtPmNvbW1vbi5yeF9tdHUgKyAzMik7CkBAIC0yMjYsMTQgKzIzNCwxNCBAQAogCXA1NHBfcmVmaWxsX3J4X3JpbmcoZGV2LCByaW5nX2luZGV4LCByaW5nLCByaW5nX2xpbWl0LCByeF9idWYpOwogfQogCi0vKiBjYWxsZXIgbXVzdCBob2xkIHByaXYtPmxvY2sgKi8KIHN0YXRpYyB2b2lkIHA1NHBfY2hlY2tfdHhfcmluZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsIHUzMiAqaW5kZXgsCiAJaW50IHJpbmdfaW5kZXgsIHN0cnVjdCBwNTRwX2Rlc2MgKnJpbmcsIHUzMiByaW5nX2xpbWl0LAotCXZvaWQgKip0eF9idWYpCisJc3RydWN0IHNrX2J1ZmYgKip0eF9idWYpCiB7CiAJc3RydWN0IHA1NHBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAlzdHJ1Y3QgcDU0cF9yaW5nX2NvbnRyb2wgKnJpbmdfY29udHJvbCA9IHByaXYtPnJpbmdfY29udHJvbDsKIAlzdHJ1Y3QgcDU0cF9kZXNjICpkZXNjOworCXN0cnVjdCBza19idWZmICpza2I7CiAJdTMyIGlkeCwgaTsKIAogCWkgPSAoKmluZGV4KSAlIHJpbmdfbGltaXQ7CkBAIC0yNDIsOSArMjUwLDggQEAKIAogCXdoaWxlIChpICE9IGlkeCkgewogCQlkZXNjID0gJnJpbmdbaV07Ci0JCWlmICh0eF9idWZbaV0pCi0JCQlpZiAoRlJFRV9BRlRFUl9UWCgoc3RydWN0IHNrX2J1ZmYgKikgdHhfYnVmW2ldKSkKLQkJCQlwNTRfZnJlZV9za2IoZGV2LCB0eF9idWZbaV0pOworCisJCXNrYiA9IHR4X2J1ZltpXTsKIAkJdHhfYnVmW2ldID0gTlVMTDsKIAogCQlwY2lfdW5tYXBfc2luZ2xlKHByaXYtPnBkZXYsIGxlMzJfdG9fY3B1KGRlc2MtPmhvc3RfYWRkciksCkBAIC0yNTUsMTcgKzI2MiwyOCBAQAogCQlkZXNjLT5sZW4gPSAwOwogCQlkZXNjLT5mbGFncyA9IDA7CiAKKwkJaWYgKHNrYiAmJiBGUkVFX0FGVEVSX1RYKHNrYikpCisJCQlwNTRfZnJlZV9za2IoZGV2LCBza2IpOworCiAJCWkrKzsKIAkJaSAlPSByaW5nX2xpbWl0OwogCX0KIH0KIAotc3RhdGljIHZvaWQgcDU0cF9yeF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGV2X2lkKQorc3RhdGljIHZvaWQgcDU0cF90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGV2X2lkKQogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IChzdHJ1Y3QgaWVlZTgwMjExX2h3ICopZGV2X2lkOwogCXN0cnVjdCBwNTRwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAJc3RydWN0IHA1NHBfcmluZ19jb250cm9sICpyaW5nX2NvbnRyb2wgPSBwcml2LT5yaW5nX2NvbnRyb2w7CiAKKwlwNTRwX2NoZWNrX3R4X3JpbmcoZGV2LCAmcHJpdi0+dHhfaWR4X21nbXQsIDMsIHJpbmdfY29udHJvbC0+dHhfbWdtdCwKKwkJCSAgIEFSUkFZX1NJWkUocmluZ19jb250cm9sLT50eF9tZ210KSwKKwkJCSAgIHByaXYtPnR4X2J1Zl9tZ210KTsKKworCXA1NHBfY2hlY2tfdHhfcmluZyhkZXYsICZwcml2LT50eF9pZHhfZGF0YSwgMSwgcmluZ19jb250cm9sLT50eF9kYXRhLAorCQkJICAgQVJSQVlfU0laRShyaW5nX2NvbnRyb2wtPnR4X2RhdGEpLAorCQkJICAgcHJpdi0+dHhfYnVmX2RhdGEpOworCiAJcDU0cF9jaGVja19yeF9yaW5nKGRldiwgJnByaXYtPnJ4X2lkeF9tZ210LCAyLCByaW5nX2NvbnRyb2wtPnJ4X21nbXQsCiAJCUFSUkFZX1NJWkUocmluZ19jb250cm9sLT5yeF9tZ210KSwgcHJpdi0+cnhfYnVmX21nbXQpOwogCkBAIC0yODAsNTkgKzI5OCw0OSBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiA9IGRldl9pZDsKIAlzdHJ1Y3QgcDU0cF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXN0cnVjdCBwNTRwX3JpbmdfY29udHJvbCAqcmluZ19jb250cm9sID0gcHJpdi0+cmluZ19jb250cm9sOwogCV9fbGUzMiByZWc7CiAKLQlzcGluX2xvY2soJnByaXYtPmxvY2spOwogCXJlZyA9IFA1NFBfUkVBRChpbnRfaWRlbnQpOwogCWlmICh1bmxpa2VseShyZWcgPT0gY3B1X3RvX2xlMzIoMHhGRkZGRkZGRikpKSB7Ci0JCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKLQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQlnb3RvIG91dDsKIAl9Ci0KIAlQNTRQX1dSSVRFKGludF9hY2ssIHJlZyk7CiAKIAlyZWcgJj0gUDU0UF9SRUFEKGludF9lbmFibGUpOwogCi0JaWYgKHJlZyAmIGNwdV90b19sZTMyKElTTDM4WFhfSU5UX0lERU5UX1VQREFURSkpIHsKLQkJcDU0cF9jaGVja190eF9yaW5nKGRldiwgJnByaXYtPnR4X2lkeF9tZ210LAotCQkJCSAgIDMsIHJpbmdfY29udHJvbC0+dHhfbWdtdCwKLQkJCQkgICBBUlJBWV9TSVpFKHJpbmdfY29udHJvbC0+dHhfbWdtdCksCi0JCQkJICAgcHJpdi0+dHhfYnVmX21nbXQpOwotCi0JCXA1NHBfY2hlY2tfdHhfcmluZyhkZXYsICZwcml2LT50eF9pZHhfZGF0YSwKLQkJCQkgICAxLCByaW5nX2NvbnRyb2wtPnR4X2RhdGEsCi0JCQkJICAgQVJSQVlfU0laRShyaW5nX2NvbnRyb2wtPnR4X2RhdGEpLAotCQkJCSAgIHByaXYtPnR4X2J1Zl9kYXRhKTsKLQotCQl0YXNrbGV0X3NjaGVkdWxlKCZwcml2LT5yeF90YXNrbGV0KTsKLQotCX0gZWxzZSBpZiAocmVnICYgY3B1X3RvX2xlMzIoSVNMMzhYWF9JTlRfSURFTlRfSU5JVCkpCisJaWYgKHJlZyAmIGNwdV90b19sZTMyKElTTDM4WFhfSU5UX0lERU5UX1VQREFURSkpCisJCXRhc2tsZXRfc2NoZWR1bGUoJnByaXYtPnRhc2tsZXQpOworCWVsc2UgaWYgKHJlZyAmIGNwdV90b19sZTMyKElTTDM4WFhfSU5UX0lERU5UX0lOSVQpKQogCQljb21wbGV0ZSgmcHJpdi0+Ym9vdF9jb21wKTsKIAotCXNwaW5fdW5sb2NrKCZwcml2LT5sb2NrKTsKLQorb3V0OgogCXJldHVybiByZWcgPyBJUlFfSEFORExFRCA6IElSUV9OT05FOwogfQogCiBzdGF0aWMgdm9pZCBwNTRwX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBwNTRwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAJc3RydWN0IHA1NHBfcmluZ19jb250cm9sICpyaW5nX2NvbnRyb2wgPSBwcml2LT5yaW5nX2NvbnRyb2w7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgcDU0cF9kZXNjICpkZXNjOwogCWRtYV9hZGRyX3QgbWFwcGluZzsKIAl1MzIgZGV2aWNlX2lkeCwgaWR4LCBpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQogCWRldmljZV9pZHggPSBsZTMyX3RvX2NwdShyaW5nX2NvbnRyb2wtPmRldmljZV9pZHhbMV0pOwogCWlkeCA9IGxlMzJfdG9fY3B1KHJpbmdfY29udHJvbC0+aG9zdF9pZHhbMV0pOwogCWkgPSBpZHggJSBBUlJBWV9TSVpFKHJpbmdfY29udHJvbC0+dHhfZGF0YSk7CiAKLQlwcml2LT50eF9idWZfZGF0YVtpXSA9IHNrYjsKIAltYXBwaW5nID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKIAkJCQkgUENJX0RNQV9UT0RFVklDRSk7CisJaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihwcml2LT5wZGV2LCBtYXBwaW5nKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXA1NF9mcmVlX3NrYihkZXYsIHNrYik7CisJCWRldl9lcnIoJnByaXYtPnBkZXYtPmRldiwgIlRYIERNQSBtYXBwaW5nIGVycm9yXG4iKTsKKwkJcmV0dXJuIDsKKwl9CisJcHJpdi0+dHhfYnVmX2RhdGFbaV0gPSBza2I7CisKIAlkZXNjID0gJnJpbmdfY29udHJvbC0+dHhfZGF0YVtpXTsKIAlkZXNjLT5ob3N0X2FkZHIgPSBjcHVfdG9fbGUzMihtYXBwaW5nKTsKIAlkZXNjLT5kZXZpY2VfYWRkciA9ICgoc3RydWN0IHA1NF9oZHIgKilza2ItPmRhdGEpLT5yZXFfaWQ7CkBAIC0zNTQsMTQgKzM2MiwxNCBAQAogCXVuc2lnbmVkIGludCBpOwogCXN0cnVjdCBwNTRwX2Rlc2MgKmRlc2M7CiAKLQl0YXNrbGV0X2tpbGwoJnByaXYtPnJ4X3Rhc2tsZXQpOwotCiAJUDU0UF9XUklURShpbnRfZW5hYmxlLCBjcHVfdG9fbGUzMigwKSk7CiAJUDU0UF9SRUFEKGludF9lbmFibGUpOwogCXVkZWxheSgxMCk7CiAKIAlmcmVlX2lycShwcml2LT5wZGV2LT5pcnEsIGRldik7CiAKKwl0YXNrbGV0X2tpbGwoJnByaXYtPnRhc2tsZXQpOworCiAJUDU0UF9XUklURShkZXZfaW50LCBjcHVfdG9fbGUzMihJU0wzOFhYX0RFVl9JTlRfUkVTRVQpKTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByaXYtPnJ4X2J1Zl9kYXRhKTsgaSsrKSB7CkBAIC01NDUsNyArNTUzLDcgQEAKIAlwcml2LT5jb21tb24udHggPSBwNTRwX3R4OwogCiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwotCXRhc2tsZXRfaW5pdCgmcHJpdi0+cnhfdGFza2xldCwgcDU0cF9yeF90YXNrbGV0LCAodW5zaWduZWQgbG9uZylkZXYpOworCXRhc2tsZXRfaW5pdCgmcHJpdi0+dGFza2xldCwgcDU0cF90YXNrbGV0LCAodW5zaWduZWQgbG9uZylkZXYpOwogCiAJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmcHJpdi0+ZmlybXdhcmUsICJpc2wzODg2cGNpIiwKIAkJCSAgICAgICAmcHJpdi0+cGRldi0+ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTRwY2kuaAppbmRleCBmYmI2ODM5Li4yZmVlYWQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0cGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHBjaS5oCkBAIC05Miw3ICs5Miw3IEBACiAJc3RydWN0IHA1NF9jb21tb24gY29tbW9uOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXN0cnVjdCBwNTRwX2NzciBfX2lvbWVtICptYXA7Ci0Jc3RydWN0IHRhc2tsZXRfc3RydWN0IHJ4X3Rhc2tsZXQ7CisJc3RydWN0IHRhc2tsZXRfc3RydWN0IHRhc2tsZXQ7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmaXJtd2FyZTsKIAlzcGlubG9ja190IGxvY2s7CiAJc3RydWN0IHA1NHBfcmluZ19jb250cm9sICpyaW5nX2NvbnRyb2w7CkBAIC0xMDEsOCArMTAxLDggQEAKIAl1MzIgcnhfaWR4X21nbXQsIHR4X2lkeF9tZ210OwogCXN0cnVjdCBza19idWZmICpyeF9idWZfZGF0YVs4XTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqcnhfYnVmX21nbXRbNF07Ci0Jdm9pZCAqdHhfYnVmX2RhdGFbMzJdOwotCXZvaWQgKnR4X2J1Zl9tZ210WzRdOworCXN0cnVjdCBza19idWZmICp0eF9idWZfZGF0YVszMl07CisJc3RydWN0IHNrX2J1ZmYgKnR4X2J1Zl9tZ210WzRdOwogCXN0cnVjdCBjb21wbGV0aW9uIGJvb3RfY29tcDsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC9wNTR1c2IuYwppbmRleCA5MmFmOWI5Li5iM2M0ZmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvcDU0dXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3A1NHVzYi5jCkBAIC0zNiw2ICszNiw3IEBACiAJLyogVmVyc2lvbiAxIGRldmljZXMgKHBjaSBjaGlwICsgbmV0MjI4MCkgKi8KIAl7VVNCX0RFVklDRSgweDA1MDYsIDB4MGExMSl9LAkvKiAzQ09NIDNDUldFMjU0RzcyICovCiAJe1VTQl9ERVZJQ0UoMHgwNzA3LCAweGVlMDYpfSwJLyogU01DIDI4NjJXLUcgKi8KKwl7VVNCX0RFVklDRSgweDA3YWEsIDB4MDAxYyl9LAkvKiBDb3JlZ2EgQ0ctV0xVU0IyR1QgKi8KIAl7VVNCX0RFVklDRSgweDA4M2EsIDB4NDUwMSl9LAkvKiBBY2N0b24gODAyLjExZyBXTjQ1MDEgVVNCICovCiAJe1VTQl9ERVZJQ0UoMHgwODNhLCAweDQ1MDIpfSwJLyogU2llbWVucyBHaWdhc2V0IFVTQiBBZGFwdGVyICovCiAJe1VTQl9ERVZJQ0UoMHgwODNhLCAweDU1MDEpfSwJLyogUGhpbGxpcHMgQ1BXVUEwNTQgKi8KQEAgLTYwLDYgKzYxLDcgQEAKIAl7VVNCX0RFVklDRSgweDA2YjksIDB4MDEyMSl9LAkvKiBUaG9tc29uIFNwZWVkVG91Y2ggMTIxZyAqLwogCXtVU0JfREVWSUNFKDB4MDcwNywgMHhlZTEzKX0sICAgLyogU01DIDI4NjJXLUcgdmVyc2lvbiAyICovCiAJe1VTQl9ERVZJQ0UoMHgwODNhLCAweDQ1MjEpfSwgICAvKiBTaWVtZW5zIEdpZ2FzZXQgVVNCIEFkYXB0ZXIgNTQgdmVyc2lvbiAyICovCisJe1VTQl9ERVZJQ0UoMHgwODNhLCAweGY1MDMpfSwJLyogQWNjdG9uIEZENzA1MEUgdmVyIDEwMTBlYyAgKi8KIAl7VVNCX0RFVklDRSgweDA4NDYsIDB4NDI0MCl9LAkvKiBOZXRnZWFyIFdHMTExICh2MikgKi8KIAl7VVNCX0RFVklDRSgweDA5MTUsIDB4MjAwMCl9LAkvKiBDb2hpYmEgUHJvdG8gYm9hcmQgKi8KIAl7VVNCX0RFVklDRSgweDA5MTUsIDB4MjAwMil9LAkvKiBDb2hpYmEgUHJvdG8gYm9hcmQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC90eHJ4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wNTQvdHhyeC5jCmluZGV4IGI2ZGRhMmIuLjY2MDU3OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3A1NC90eHJ4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcDU0L3R4cnguYwpAQCAtMTgzLDEwICsxODMsMTAgQEAKIAkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgICAgY29uc3QgdTE2IHA1NF9xdWV1ZSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpxdWV1ZTsKKwlzdHJ1Y3QgcDU0X3R4X3F1ZXVlX3N0YXRzICpxdWV1ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKFdBUk5fT04ocDU0X3F1ZXVlID4gUDU0X1FVRVVFX05VTSkpCisJaWYgKFdBUk5fT04ocDU0X3F1ZXVlID49IFA1NF9RVUVVRV9OVU0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXF1ZXVlID0gJnByaXYtPnR4X3N0YXRzW3A1NF9xdWV1ZV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ob3RwbHVnLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbHBjaV9ob3RwbHVnLmMKaW5kZXggZTRmMmJiNy4uZGMxNDQyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xwY2lfaG90cGx1Zy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNscGNpX2hvdHBsdWcuYwpAQCAtMzksNyArMzksNyBAQAogICogZHJpdmVyX2RhdGEKICAqIElmIHlvdSBoYXZlIGFuIHVwZGF0ZSBmb3IgdGhpcyBwbGVhc2UgY29udGFjdCBwcmlzbTU0LWRldmVsQHByaXNtNTQub3JnCiAgKiBUaGUgbGF0ZXN0IGxpc3QgY2FuIGJlIGZvdW5kIGF0IGh0dHA6Ly9wcmlzbTU0Lm9yZy9zdXBwb3J0ZWRfY2FyZHMucGhwICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcHJpc201NF9pZF90YmxbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShwcmlzbTU0X2lkX3RibCkgPSB7CiAJLyogSW50ZXJzaWwgUFJJU00gRHVldHRlL1ByaXNtIEdUIFdpcmVsZXNzIExBTiBhZGFwdGVyICovCiAJewogCSAweDEyNjAsIDB4Mzg5MCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKaW5kZXggODhlMWU0ZS4uODRjNTMwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmF5X2NzLmMKQEAgLTE4NzEsMTAgKzE4NzEsOCBAQAogLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogc3RhdGljIHZvaWQgcmF5X3VwZGF0ZV9tdWx0aV9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBhbGwpCiB7Ci0Jc3RydWN0IGRldl9tY19saXN0ICpkbWksICoqZG1pcDsKIAlpbnQgY2NzaW5kZXg7CiAJc3RydWN0IGNjcyBfX2lvbWVtICpwY2NzOwotCWludCBpID0gMDsKIAlyYXlfZGV2X3QgKmxvY2FsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgcGNtY2lhX2RldmljZSAqbGluayA9IGxvY2FsLT5maW5kZXI7CiAJdm9pZCBfX2lvbWVtICpwID0gbG9jYWwtPnNyYW0gKyBIT1NUX1RPX0VDRl9CQVNFOwpAQCAtMTg5NSw5ICsxODkzLDExIEBACiAJCXdyaXRlYigweGZmLCAmcGNjcy0+dmFyKTsKIAkJbG9jYWwtPm51bV9tdWx0aSA9IDB4ZmY7CiAJfSBlbHNlIHsKKwkJc3RydWN0IGRldl9tY19saXN0ICpkbWk7CisJCWludCBpID0gMDsKKwogCQkvKiBDb3B5IHRoZSBrZXJuZWwncyBsaXN0IG9mIE1DIGFkZHJlc3NlcyB0byBjYXJkICovCi0JCWZvciAoZG1pcCA9ICZkZXYtPm1jX2xpc3Q7IChkbWkgPSAqZG1pcCkgIT0gTlVMTDsKLQkJICAgICBkbWlwID0gJmRtaS0+bmV4dCkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikgewogCQkJbWVtY3B5X3RvaW8ocCwgZG1pLT5kbWlfYWRkciwgRVRIX0FMRU4pOwogCQkJZGV2X2RiZygmbGluay0+ZGV2LAogCQkJICAgICAgInJheV91cGRhdGVfbXVsdGkgYWRkIGFkZHIgJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLApAQCAtMTk1MCw3ICsxOTUwLDcgQEAKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkKIAkJcmF5X3VwZGF0ZV9tdWx0aV9saXN0KGRldiwgMSk7CiAJZWxzZSB7Ci0JCWlmIChsb2NhbC0+bnVtX211bHRpICE9IGRldi0+bWNfY291bnQpCisJCWlmIChsb2NhbC0+bnVtX211bHRpICE9IG5ldGRldl9tY19jb3VudChkZXYpKQogCQkJcmF5X3VwZGF0ZV9tdWx0aV9saXN0KGRldiwgMCk7CiAJfQogfSAvKiBlbmQgc2V0X211bHRpY2FzdF9saXN0ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ybmRpc193bGFuLmMKaW5kZXggMmVjYmVkYi4uOWY2ZDZiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvcm5kaXNfd2xhbi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JuZGlzX3dsYW4uYwpAQCAtNzI4LDkgKzcyOCw5IEBACiAJcmV0ID0gcm5kaXNfY29tbWFuZChkZXYsIHUuaGVhZGVyLCBidWZsZW4pOwogCXByaXYtPmN1cnJlbnRfY29tbWFuZF9vaWQgPSAwOwogCWlmIChyZXQgPCAwKQotCQlkZXZkYmcoZGV2LCAicm5kaXNfcXVlcnlfb2lkKCVzKTogcm5kaXNfY29tbWFuZCgpIGZhaWxlZCwgJWQgIgotCQkJIiglMDh4KSIsIG9pZF90b19zdHJpbmcob2lkKSwgcmV0LAotCQkJbGUzMl90b19jcHUodS5nZXRfYy0+c3RhdHVzKSk7CisJCW5ldGRldl9kYmcoZGV2LT5uZXQsICIlcyglcyk6IHJuZGlzX2NvbW1hbmQoKSBmYWlsZWQsICVkICglMDh4KVxuIiwKKwkJCSAgIF9fZnVuY19fLCBvaWRfdG9fc3RyaW5nKG9pZCksIHJldCwKKwkJCSAgIGxlMzJfdG9fY3B1KHUuZ2V0X2MtPnN0YXR1cykpOwogCiAJaWYgKHJldCA9PSAwKSB7CiAJCW1lbWNweShkYXRhLCB1LmJ1ZiArIGxlMzJfdG9fY3B1KHUuZ2V0X2MtPm9mZnNldCkgKyA4LCAqbGVuKTsKQEAgLTc0MSw5ICs3NDEsOSBAQAogCiAJCXJldCA9IHJuZGlzX2Vycm9yX3N0YXR1cyh1LmdldF9jLT5zdGF0dXMpOwogCQlpZiAocmV0IDwgMCkKLQkJCWRldmRiZyhkZXYsICJybmRpc19xdWVyeV9vaWQoJXMpOiBkZXZpY2UgcmV0dXJuZWQgIgotCQkJCSJlcnJvciwgIDB4JTA4eCAoJWQpIiwgb2lkX3RvX3N0cmluZyhvaWQpLAotCQkJCWxlMzJfdG9fY3B1KHUuZ2V0X2MtPnN0YXR1cyksIHJldCk7CisJCQluZXRkZXZfZGJnKGRldi0+bmV0LCAiJXMoJXMpOiBkZXZpY2UgcmV0dXJuZWQgZXJyb3IsICAweCUwOHggKCVkKVxuIiwKKwkJCQkgICBfX2Z1bmNfXywgb2lkX3RvX3N0cmluZyhvaWQpLAorCQkJCSAgIGxlMzJfdG9fY3B1KHUuZ2V0X2MtPnN0YXR1cyksIHJldCk7CiAJfQogCiAJbXV0ZXhfdW5sb2NrKCZwcml2LT5jb21tYW5kX2xvY2spOwpAQCAtNzkxLDE3ICs3OTEsMTcgQEAKIAlyZXQgPSBybmRpc19jb21tYW5kKGRldiwgdS5oZWFkZXIsIGJ1Zmxlbik7CiAJcHJpdi0+Y3VycmVudF9jb21tYW5kX29pZCA9IDA7CiAJaWYgKHJldCA8IDApCi0JCWRldmRiZyhkZXYsICJybmRpc19zZXRfb2lkKCVzKTogcm5kaXNfY29tbWFuZCgpIGZhaWxlZCwgJWQgIgotCQkJIiglMDh4KSIsIG9pZF90b19zdHJpbmcob2lkKSwgcmV0LAotCQkJbGUzMl90b19jcHUodS5zZXRfYy0+c3RhdHVzKSk7CisJCW5ldGRldl9kYmcoZGV2LT5uZXQsICIlcyglcyk6IHJuZGlzX2NvbW1hbmQoKSBmYWlsZWQsICVkICglMDh4KVxuIiwKKwkJCSAgIF9fZnVuY19fLCBvaWRfdG9fc3RyaW5nKG9pZCksIHJldCwKKwkJCSAgIGxlMzJfdG9fY3B1KHUuc2V0X2MtPnN0YXR1cykpOwogCiAJaWYgKHJldCA9PSAwKSB7CiAJCXJldCA9IHJuZGlzX2Vycm9yX3N0YXR1cyh1LnNldF9jLT5zdGF0dXMpOwogCiAJCWlmIChyZXQgPCAwKQotCQkJZGV2ZGJnKGRldiwgInJuZGlzX3NldF9vaWQoJXMpOiBkZXZpY2UgcmV0dXJuZWQgZXJyb3IsICIKLQkJCQkiMHglMDh4ICglZCkiLCBvaWRfdG9fc3RyaW5nKG9pZCksCi0JCQkJbGUzMl90b19jcHUodS5zZXRfYy0+c3RhdHVzKSwgcmV0KTsKKwkJCW5ldGRldl9kYmcoZGV2LT5uZXQsICIlcyglcyk6IGRldmljZSByZXR1cm5lZCBlcnJvciwgMHglMDh4ICglZClcbiIsCisJCQkJICAgX19mdW5jX18sIG9pZF90b19zdHJpbmcob2lkKSwKKwkJCQkgICBsZTMyX3RvX2NwdSh1LnNldF9jLT5zdGF0dXMpLCByZXQpOwogCX0KIAogCW11dGV4X3VubG9jaygmcHJpdi0+Y29tbWFuZF9sb2NrKTsKQEAgLTg3MCwxMSArODcwLDExIEBACiAjZW5kaWYKIAogCWlmICh2YWx1ZV90eXBlID09IDIpCi0JCWRldmRiZyhkZXYsICJzZXR0aW5nIGNvbmZpZyBwYXJhbWV0ZXI6ICVzLCB2YWx1ZTogJXMiLAotCQkJCQkJcGFyYW0sICh1OCAqKXZhbHVlKTsKKwkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgInNldHRpbmcgY29uZmlnIHBhcmFtZXRlcjogJXMsIHZhbHVlOiAlc1xuIiwKKwkJCSAgIHBhcmFtLCAodTggKil2YWx1ZSk7CiAJZWxzZQotCQlkZXZkYmcoZGV2LCAic2V0dGluZyBjb25maWcgcGFyYW1ldGVyOiAlcywgdmFsdWU6ICVkIiwKLQkJCQkJCXBhcmFtLCAqKHUzMiAqKXZhbHVlKTsKKwkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgInNldHRpbmcgY29uZmlnIHBhcmFtZXRlcjogJXMsIHZhbHVlOiAlZFxuIiwKKwkJCSAgIHBhcmFtLCAqKHUzMiAqKXZhbHVlKTsKIAogCWluZm9idWYtPm5hbWVfb2ZmcyA9IGNwdV90b19sZTMyKHNpemVvZigqaW5mb2J1ZikpOwogCWluZm9idWYtPm5hbWVfbGVuZ3RoID0gY3B1X3RvX2xlMzIocGFyYW1fbGVuKTsKQEAgLTg5NywyMCArODk3LDIxIEBACiAJfQogCiAjaWZkZWYgREVCVUcKLQlkZXZkYmcoZGV2LCAiaW5mbyBidWZmZXIgKGxlbjogJWQpOiIsIGluZm9fbGVuKTsKKwluZXRkZXZfZGJnKGRldi0+bmV0LCAiaW5mbyBidWZmZXIgKGxlbjogJWQpXG4iLCBpbmZvX2xlbik7CiAJZm9yIChpID0gMDsgaSA8IGluZm9fbGVuOyBpICs9IDEyKSB7CiAJCXUzMiAqdG1wID0gKHUzMiAqKSgodTggKilpbmZvYnVmICsgaSk7Ci0JCWRldmRiZyhkZXYsICIlMDhYOiUwOFg6JTA4WCIsCi0JCQljcHVfdG9fYmUzMih0bXBbMF0pLAotCQkJY3B1X3RvX2JlMzIodG1wWzFdKSwKLQkJCWNwdV90b19iZTMyKHRtcFsyXSkpOworCQluZXRkZXZfZGJnKGRldi0+bmV0LCAiJTA4WDolMDhYOiUwOFhcbiIsCisJCQkgICBjcHVfdG9fYmUzMih0bXBbMF0pLAorCQkJICAgY3B1X3RvX2JlMzIodG1wWzFdKSwKKwkJCSAgIGNwdV90b19iZTMyKHRtcFsyXSkpOwogCX0KICNlbmRpZgogCiAJcmV0ID0gcm5kaXNfc2V0X29pZChkZXYsIE9JRF9HRU5fUk5ESVNfQ09ORklHX1BBUkFNRVRFUiwKIAkJCQkJCQlpbmZvYnVmLCBpbmZvX2xlbik7CiAJaWYgKHJldCAhPSAwKQotCQlkZXZkYmcoZGV2LCAic2V0dGluZyBybmRpcyBjb25maWcgcGFyYW1ldGVyIGZhaWxlZCwgJWQuIiwgcmV0KTsKKwkJbmV0ZGV2X2RiZyhkZXYtPm5ldCwgInNldHRpbmcgcm5kaXMgY29uZmlnIHBhcmFtZXRlciBmYWlsZWQsICVkXG4iLAorCQkJICAgcmV0KTsKIAogCWtmcmVlKGluZm9idWYpOwogCXJldHVybiByZXQ7CkBAIC05NDUsMTMgKzk0NiwxMyBAQAogCiAJcmV0ID0gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfU1NJRCwgc3NpZCwgc2l6ZW9mKCpzc2lkKSk7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2d2Fybih1c2JkZXYsICJzZXR0aW5nIFNTSUQgZmFpbGVkICglMDhYKSIsIHJldCk7CisJCW5ldGRldl93YXJuKHVzYmRldi0+bmV0LCAic2V0dGluZyBTU0lEIGZhaWxlZCAoJTA4WClcbiIsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCWlmIChyZXQgPT0gMCkgewogCQltZW1jcHkoJnByaXYtPmVzc2lkLCBzc2lkLCBzaXplb2YocHJpdi0+ZXNzaWQpKTsKIAkJcHJpdi0+cmFkaW9fb24gPSB0cnVlOwotCQlkZXZkYmcodXNiZGV2LCAic2V0X2Vzc2lkOiByYWRpb19vbiA9IHRydWUiKTsKKwkJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCk6IHJhZGlvX29uID0gdHJ1ZVxuIiwgX19mdW5jX18pOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC05NjMsNyArOTY0LDggQEAKIAogCXJldCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX0JTU0lELCBic3NpZCwgRVRIX0FMRU4pOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldndhcm4odXNiZGV2LCAic2V0dGluZyBCU1NJRFslcE1dIGZhaWxlZCAoJTA4WCkiLCBic3NpZCwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4odXNiZGV2LT5uZXQsICJzZXR0aW5nIEJTU0lEWyVwTV0gZmFpbGVkICglMDhYKVxuIiwKKwkJCSAgICBic3NpZCwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTEwMjEsNyArMTAyMyw4IEBACiAJCXJldCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX0RJU0FTU09DSUFURSwgTlVMTCwgMCk7CiAJCWlmIChyZXQgPT0gMCkgewogCQkJcHJpdi0+cmFkaW9fb24gPSBmYWxzZTsKLQkJCWRldmRiZyh1c2JkZXYsICJkaXNhc3NvY2lhdGU6IHJhZGlvX29uID0gZmFsc2UiKTsKKwkJCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcygpOiByYWRpb19vbiA9IGZhbHNlXG4iLAorCQkJCSAgIF9fZnVuY19fKTsKIAogCQkJaWYgKHJlc2V0X3NzaWQpCiAJCQkJbXNsZWVwKDEwMCk7CkBAIC0xMDU0LDggKzEwNTcsOCBAQAogCV9fbGUzMiB0bXA7CiAJaW50IGF1dGhfbW9kZSwgcmV0OwogCi0JZGV2ZGJnKHVzYmRldiwgInNldF9hdXRoX21vZGU6IHdwYV92ZXJzaW9uPTB4JXggYXV0aGFsZz0weCV4ICIKLQkJImtleW1nbXQ9MHgleCIsIHdwYV92ZXJzaW9uLCBhdXRoX3R5cGUsIGtleW1nbXQpOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcygpOiB3cGFfdmVyc2lvbj0weCV4IGF1dGhhbGc9MHgleCBrZXltZ210PTB4JXhcbiIsCisJCSAgIF9fZnVuY19fLCB3cGFfdmVyc2lvbiwgYXV0aF90eXBlLCBrZXltZ210KTsKIAogCWlmICh3cGFfdmVyc2lvbiAmIE5MODAyMTFfV1BBX1ZFUlNJT05fMikgewogCQlpZiAoa2V5bWdtdCAmIFJORElTX1dMQU5fS0VZX01HTVRfODAyXzFYKQpAQCAtMTA4Miw3ICsxMDg1LDggQEAKIAlyZXQgPSBybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9BVVRIRU5USUNBVElPTl9NT0RFLCAmdG1wLAogCQkJCQkJCQlzaXplb2YodG1wKSk7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCWRldndhcm4odXNiZGV2LCAic2V0dGluZyBhdXRoIG1vZGUgZmFpbGVkICglMDhYKSIsIHJldCk7CisJCW5ldGRldl93YXJuKHVzYmRldi0+bmV0LCAic2V0dGluZyBhdXRoIG1vZGUgZmFpbGVkICglMDhYKVxuIiwKKwkJCSAgICByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTA5OCw3ICsxMTAyLDggQEAKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwogCV9fbGUzMiB0bXA7CiAKLQlkZXZkYmcodXNiZGV2LCAic2V0X3ByaXZfZmlsdGVyOiB3cGFfdmVyc2lvbj0weCV4IiwgcHJpdi0+d3BhX3ZlcnNpb24pOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcygpOiB3cGFfdmVyc2lvbj0weCV4XG4iLAorCQkgICBfX2Z1bmNfXywgcHJpdi0+d3BhX3ZlcnNpb24pOwogCiAJaWYgKHByaXYtPndwYV92ZXJzaW9uICYgTkw4MDIxMV9XUEFfVkVSU0lPTl8yIHx8CiAJICAgIHByaXYtPndwYV92ZXJzaW9uICYgTkw4MDIxMV9XUEFfVkVSU0lPTl8xKQpAQCAtMTExNiw4ICsxMTIxLDggQEAKIAlfX2xlMzIgdG1wOwogCWludCBlbmNyX21vZGUsIHJldDsKIAotCWRldmRiZyh1c2JkZXYsICJzZXRfZW5jcl9tb2RlOiBjaXBoZXJfcGFpcj0weCV4IGNpcGhlcl9ncm91cD0weCV4IiwKLQkJcGFpcndpc2UsIGdyb3Vwd2lzZSk7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCk6IGNpcGhlcl9wYWlyPTB4JXggY2lwaGVyX2dyb3VwPTB4JXhcbiIsCisJCSAgIF9fZnVuY19fLCBwYWlyd2lzZSwgZ3JvdXB3aXNlKTsKIAogCWlmIChwYWlyd2lzZSAmIFJORElTX1dMQU5fQUxHX0NDTVApCiAJCWVuY3JfbW9kZSA9IE5ESVNfODAyMTFfRU5DUl9DQ01QX0VOQUJMRUQ7CkBAIC0xMTM2LDcgKzExNDEsOCBAQAogCXJldCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX0VOQ1JZUFRJT05fU1RBVFVTLCAmdG1wLAogCQkJCQkJCQlzaXplb2YodG1wKSk7CiAJaWYgKHJldCAhPSAwKSB7Ci0JCWRldndhcm4odXNiZGV2LCAic2V0dGluZyBlbmNyIG1vZGUgZmFpbGVkICglMDhYKSIsIHJldCk7CisJCW5ldGRldl93YXJuKHVzYmRldi0+bmV0LCAic2V0dGluZyBlbmNyIG1vZGUgZmFpbGVkICglMDhYKVxuIiwKKwkJCSAgICByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTE1MSwxMyArMTE1NywxNSBAQAogCV9fbGUzMiB0bXA7CiAJaW50IHJldDsKIAotCWRldmRiZyh1c2JkZXYsICJzZXRfaW5mcmFfbW9kZTogaW5mcmFfbW9kZT0weCV4IiwgcHJpdi0+aW5mcmFfbW9kZSk7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCk6IGluZnJhX21vZGU9MHgleFxuIiwKKwkJICAgX19mdW5jX18sIHByaXYtPmluZnJhX21vZGUpOwogCiAJdG1wID0gY3B1X3RvX2xlMzIobW9kZSk7CiAJcmV0ID0gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfSU5GUkFTVFJVQ1RVUkVfTU9ERSwgJnRtcCwKIAkJCQkJCQkJc2l6ZW9mKHRtcCkpOwogCWlmIChyZXQgIT0gMCkgewotCQlkZXZ3YXJuKHVzYmRldiwgInNldHRpbmcgaW5mcmEgbW9kZSBmYWlsZWQgKCUwOFgpIiwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4odXNiZGV2LT5uZXQsICJzZXR0aW5nIGluZnJhIG1vZGUgZmFpbGVkICglMDhYKVxuIiwKKwkJCSAgICByZXQpOwogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtMTE3NCw3ICsxMTgyLDcgQEAKIHsKIAlfX2xlMzIgdG1wOwogCi0JZGV2ZGJnKHVzYmRldiwgInNldF9ydHNfdGhyZXNob2xkICVpIiwgcnRzX3RocmVzaG9sZCk7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCk6ICVpXG4iLCBfX2Z1bmNfXywgcnRzX3RocmVzaG9sZCk7CiAKIAlpZiAocnRzX3RocmVzaG9sZCA8IDAgfHwgcnRzX3RocmVzaG9sZCA+IDIzNDcpCiAJCXJ0c190aHJlc2hvbGQgPSAyMzQ3OwpAQCAtMTE4OCw3ICsxMTk2LDcgQEAKIHsKIAlfX2xlMzIgdG1wOwogCi0JZGV2ZGJnKHVzYmRldiwgInNldF9mcmFnX3RocmVzaG9sZCAlaSIsIGZyYWdfdGhyZXNob2xkKTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogJWlcbiIsIF9fZnVuY19fLCBmcmFnX3RocmVzaG9sZCk7CiAKIAlpZiAoZnJhZ190aHJlc2hvbGQgPCAyNTYgfHwgZnJhZ190aHJlc2hvbGQgPiAyMzQ2KQogCQlmcmFnX3RocmVzaG9sZCA9IDIzNDY7CkBAIC0xMjIyLDcgKzEyMzAsNyBAQAogCXVuc2lnbmVkIGludCBkc2NvbmZpZzsKIAlpbnQgbGVuLCByZXQ7CiAKLQlkZXZkYmcodXNiZGV2LCAic2V0X2NoYW5uZWwoJWQpIiwgY2hhbm5lbCk7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCVkKVxuIiwgX19mdW5jX18sIGNoYW5uZWwpOwogCiAJLyogdGhpcyBPSUQgaXMgdmFsaWQgb25seSB3aGVuIG5vdCBhc3NvY2lhdGVkICovCiAJaWYgKGlzX2Fzc29jaWF0ZWQodXNiZGV2KSkKQEAgLTEyMzMsNyArMTI0MSw4IEBACiAJbGVuID0gc2l6ZW9mKGNvbmZpZyk7CiAJcmV0ID0gcm5kaXNfcXVlcnlfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9DT05GSUdVUkFUSU9OLCAmY29uZmlnLCAmbGVuKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZkYmcodXNiZGV2LCAic2V0X2NoYW5uZWw6IHF1ZXJ5aW5nIGNvbmZpZ3VyYXRpb24gZmFpbGVkIik7CisJCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcygpOiBxdWVyeWluZyBjb25maWd1cmF0aW9uIGZhaWxlZFxuIiwKKwkJCSAgIF9fZnVuY19fKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTEyNDEsNyArMTI1MCw3IEBACiAJcmV0ID0gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfQ09ORklHVVJBVElPTiwgJmNvbmZpZywKIAkJCQkJCQkJc2l6ZW9mKGNvbmZpZykpOwogCi0JZGV2ZGJnKHVzYmRldiwgInNldF9jaGFubmVsOiAlZCAtPiAlZCIsIGNoYW5uZWwsIHJldCk7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCk6ICVkIC0+ICVkXG4iLCBfX2Z1bmNfXywgY2hhbm5lbCwgcmV0KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xMjU1LDcgKzEyNjQsOCBAQAogCXUzMiBjaXBoZXI7CiAJaW50IHJldDsKIAotCWRldmRiZyh1c2JkZXYsICJhZGRfd2VwX2tleShpZHg6ICVkLCBsZW46ICVkKSIsIGluZGV4LCBrZXlfbGVuKTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoaWR4OiAlZCwgbGVuOiAlZClcbiIsCisJCSAgIF9fZnVuY19fLCBpbmRleCwga2V5X2xlbik7CiAKIAlpZiAoKGtleV9sZW4gIT0gNSAmJiBrZXlfbGVuICE9IDEzKSB8fCBpbmRleCA8IDAgfHwgaW5kZXggPiAzKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEyNzcsMTUgKzEyODcsMTUgQEAKIAkJcmV0ID0gc2V0X2VuY3JfbW9kZSh1c2JkZXYsIFJORElTX1dMQU5fQUxHX1dFUCwKIAkJCQkJCQlSTkRJU19XTEFOX0FMR19OT05FKTsKIAkJaWYgKHJldCkKLQkJCWRldndhcm4odXNiZGV2LCAiZW5jcnlwdGlvbiBjb3VsZG4ndCBiZSBlbmFibGVkICglMDhYKSIsCi0JCQkJCQkJCQlyZXQpOworCQkJbmV0ZGV2X3dhcm4odXNiZGV2LT5uZXQsICJlbmNyeXB0aW9uIGNvdWxkbid0IGJlIGVuYWJsZWQgKCUwOFgpXG4iLAorCQkJCSAgICByZXQpOwogCX0KIAogCXJldCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfODAyXzExX0FERF9XRVAsICZuZGlzX2tleSwKIAkJCQkJCQlzaXplb2YobmRpc19rZXkpKTsKIAlpZiAocmV0ICE9IDApIHsKLQkJZGV2d2Fybih1c2JkZXYsICJhZGRpbmcgZW5jcnlwdGlvbiBrZXkgJWQgZmFpbGVkICglMDhYKSIsCi0JCQkJCQkJaW5kZXgrMSwgcmV0KTsKKwkJbmV0ZGV2X3dhcm4odXNiZGV2LT5uZXQsICJhZGRpbmcgZW5jcnlwdGlvbiBrZXkgJWQgZmFpbGVkICglMDhYKVxuIiwKKwkJCSAgICBpbmRleCArIDEsIHJldCk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0xMzA3LDIyICsxMzE3LDIzIEBACiAJaW50IHJldDsKIAogCWlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gNCkgewotCQlkZXZkYmcodXNiZGV2LCAiYWRkX3dwYV9rZXk6IGluZGV4IG91dCBvZiByYW5nZSAoJWkpIiwgaW5kZXgpOworCQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogaW5kZXggb3V0IG9mIHJhbmdlICglaSlcbiIsCisJCQkgICBfX2Z1bmNfXywgaW5kZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGtleV9sZW4gPiBzaXplb2YobmRpc19rZXkubWF0ZXJpYWwpIHx8IGtleV9sZW4gPCAwKSB7Ci0JCWRldmRiZyh1c2JkZXYsICJhZGRfd3BhX2tleToga2V5IGxlbmd0aCBvdXQgb2YgcmFuZ2UgKCVpKSIsCi0JCQlrZXlfbGVuKTsKKwkJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCk6IGtleSBsZW5ndGggb3V0IG9mIHJhbmdlICglaSlcbiIsCisJCQkgICBfX2Z1bmNfXywga2V5X2xlbik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoZmxhZ3MgJiBORElTXzgwMjExX0FEREtFWV9TRVRfSU5JVF9SRUNWX1NFUSkgewogCQlpZiAoIXJ4X3NlcSB8fCBzZXFfbGVuIDw9IDApIHsKLQkJCWRldmRiZyh1c2JkZXYsICJhZGRfd3BhX2tleTogcmVjdiBzZXEgZmxhZyB3aXRob3V0IgotCQkJCQkiYnVmZmVyIik7CisJCQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogcmVjdiBzZXEgZmxhZyB3aXRob3V0IGJ1ZmZlclxuIiwKKwkJCQkgICBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlpZiAocnhfc2VxICYmIHNlcV9sZW4gPiBzaXplb2YobmRpc19rZXkucnNjKSkgewotCQkJZGV2ZGJnKHVzYmRldiwgImFkZF93cGFfa2V5OiB0b28gYmlnIHJlY3Ygc2VxIGJ1ZmZlciIpOworCQkJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCk6IHRvbyBiaWcgcmVjdiBzZXEgYnVmZmVyXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KQEAgLTEzMzAsMTUgKzEzNDEsMTYgQEAKIAlpc19hZGRyX29rID0gYWRkciAmJiAhaXNfemVyb19ldGhlcl9hZGRyKGFkZHIpICYmCiAJCQkJCSFpc19icm9hZGNhc3RfZXRoZXJfYWRkcihhZGRyKTsKIAlpZiAoKGZsYWdzICYgTkRJU184MDIxMV9BRERLRVlfUEFJUldJU0VfS0VZKSAmJiAhaXNfYWRkcl9vaykgewotCQlkZXZkYmcodXNiZGV2LCAiYWRkX3dwYV9rZXk6IHBhaXJ3aXNlIGJ1dCBic3NpZCBpbnZhbGlkICglcE0pIiwKLQkJCWFkZHIpOworCQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogcGFpcndpc2UgYnV0IGJzc2lkIGludmFsaWQgKCVwTSlcbiIsCisJCQkgICBfX2Z1bmNfXywgYWRkcik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWRldmRiZyh1c2JkZXYsICJhZGRfd3BhX2tleSglaSk6IGZsYWdzOiVpJWklaSIsIGluZGV4LAotCQkJISEoZmxhZ3MgJiBORElTXzgwMjExX0FEREtFWV9UUkFOU01JVF9LRVkpLAotCQkJISEoZmxhZ3MgJiBORElTXzgwMjExX0FEREtFWV9QQUlSV0lTRV9LRVkpLAotCQkJISEoZmxhZ3MgJiBORElTXzgwMjExX0FEREtFWV9TRVRfSU5JVF9SRUNWX1NFUSkpOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcyglaSk6IGZsYWdzOiVpJWklaVxuIiwKKwkJICAgX19mdW5jX18sIGluZGV4LAorCQkgICAhIShmbGFncyAmIE5ESVNfODAyMTFfQURES0VZX1RSQU5TTUlUX0tFWSksCisJCSAgICEhKGZsYWdzICYgTkRJU184MDIxMV9BRERLRVlfUEFJUldJU0VfS0VZKSwKKwkJICAgISEoZmxhZ3MgJiBORElTXzgwMjExX0FEREtFWV9TRVRfSU5JVF9SRUNWX1NFUSkpOwogCiAJbWVtc2V0KCZuZGlzX2tleSwgMCwgc2l6ZW9mKG5kaXNfa2V5KSk7CiAKQEAgLTEzNzIsNyArMTM4NCw4IEBACiAKIAlyZXQgPSBybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8xMV9BRERfS0VZLCAmbmRpc19rZXksCiAJCQkJCWxlMzJfdG9fY3B1KG5kaXNfa2V5LnNpemUpKTsKLQlkZXZkYmcodXNiZGV2LCAiYWRkX3dwYV9rZXk6IE9JRF84MDJfMTFfQUREX0tFWSAtPiAlMDhYIiwgcmV0KTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogT0lEXzgwMl8xMV9BRERfS0VZIC0+ICUwOFhcbiIsCisJCSAgIF9fZnVuY19fLCByZXQpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTQwMSw3ICsxNDE0LDcgQEAKIAogCWtleSA9IHByaXYtPmVuY3Jfa2V5c1trZXlfaWR4XTsKIAotCWRldmRiZyh1c2JkZXYsICJyZXN0b3JlX2tleTogJWk6JWkiLCBrZXlfaWR4LCBrZXkubGVuKTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogJWk6JWlcbiIsIF9fZnVuY19fLCBrZXlfaWR4LCBrZXkubGVuKTsKIAogCWlmIChrZXkubGVuID09IDApCiAJCXJldHVybiAwOwpAQCAtMTQzNiw4ICsxNDQ5LDkgQEAKIAogCWlzX3dwYSA9IGlzX3dwYV9rZXkocHJpdiwgaW5kZXgpOwogCi0JZGV2ZGJnKHVzYmRldiwgInJlbW92ZV9rZXk6ICVpOiVzOiVpIiwgaW5kZXgsIGlzX3dwYSA/ICJ3cGEiIDogIndlcCIsCi0JCXByaXYtPmVuY3Jfa2V5c1tpbmRleF0ubGVuKTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogJWk6JXM6JWlcbiIsCisJCSAgIF9fZnVuY19fLCBpbmRleCwgaXNfd3BhID8gIndwYSIgOiAid2VwIiwKKwkJICAgcHJpdi0+ZW5jcl9rZXlzW2luZGV4XS5sZW4pOwogCiAJY2xlYXJfa2V5KHByaXYsIGluZGV4KTsKIApAQCAtMTQ2NCw5ICsxNDc4LDkgQEAKIAkJcmV0ID0gcm5kaXNfc2V0X29pZCh1c2JkZXYsIE9JRF84MDJfMTFfUkVNT1ZFX1dFUCwgJmtleWluZGV4LAogCQkJCQkJCXNpemVvZihrZXlpbmRleCkpOwogCQlpZiAocmV0ICE9IDApIHsKLQkJCWRldndhcm4odXNiZGV2LAotCQkJCSJyZW1vdmluZyBlbmNyeXB0aW9uIGtleSAlZCBmYWlsZWQgKCUwOFgpIiwKLQkJCQlpbmRleCwgcmV0KTsKKwkJCW5ldGRldl93YXJuKHVzYmRldi0+bmV0LAorCQkJCSAgICAicmVtb3ZpbmcgZW5jcnlwdGlvbiBrZXkgJWQgZmFpbGVkICglMDhYKVxuIiwKKwkJCQkgICAgaW5kZXgsIHJldCk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQpAQCAtMTQ4OCwyOSArMTUwMiwyOSBAQAogCiAJZmlsdGVyID0gUk5ESVNfUEFDS0VUX1RZUEVfRElSRUNURUQgfCBSTkRJU19QQUNLRVRfVFlQRV9CUk9BRENBU1Q7CiAKKwluZXRpZl9hZGRyX2xvY2tfYmgodXNiZGV2LT5uZXQpOwogCWlmICh1c2JkZXYtPm5ldC0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewogCQlmaWx0ZXIgfD0gUk5ESVNfUEFDS0VUX1RZUEVfUFJPTUlTQ1VPVVMgfAogCQkJUk5ESVNfUEFDS0VUX1RZUEVfQUxMX0xPQ0FMOwogCX0gZWxzZSBpZiAodXNiZGV2LT5uZXQtPmZsYWdzICYgSUZGX0FMTE1VTFRJIHx8Ci0JCSAgIHVzYmRldi0+bmV0LT5tY19jb3VudCA+IHByaXYtPm11bHRpY2FzdF9zaXplKSB7CisJCSAgIG5ldGRldl9tY19jb3VudCh1c2JkZXYtPm5ldCkgPiBwcml2LT5tdWx0aWNhc3Rfc2l6ZSkgewogCQlmaWx0ZXIgfD0gUk5ESVNfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVDsKLQl9IGVsc2UgaWYgKHVzYmRldi0+bmV0LT5tY19jb3VudCA+IDApIHsKLQkJc2l6ZSA9IG1pbihwcml2LT5tdWx0aWNhc3Rfc2l6ZSwgdXNiZGV2LT5uZXQtPm1jX2NvdW50KTsKKwl9IGVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkodXNiZGV2LT5uZXQpKSB7CisJCXNpemUgPSBtaW4ocHJpdi0+bXVsdGljYXN0X3NpemUsIG5ldGRldl9tY19jb3VudCh1c2JkZXYtPm5ldCkpOwogCQlidWYgPSBrbWFsbG9jKHNpemUgKiBFVEhfQUxFTiwgR0ZQX0tFUk5FTCk7CiAJCWlmICghYnVmKSB7Ci0JCQlkZXZ3YXJuKHVzYmRldiwKLQkJCQkiY291bGRuJ3QgYWxsb2MgJWQgYnl0ZXMgb2YgbWVtb3J5IiwKLQkJCQlzaXplICogRVRIX0FMRU4pOworCQkJbmV0ZGV2X3dhcm4odXNiZGV2LT5uZXQsCisJCQkJICAgICJjb3VsZG4ndCBhbGxvYyAlZCBieXRlcyBvZiBtZW1vcnlcbiIsCisJCQkJICAgIHNpemUgKiBFVEhfQUxFTik7CisJCQluZXRpZl9hZGRyX3VubG9ja19iaCh1c2JkZXYtPm5ldCk7CiAJCQlyZXR1cm47CiAJCX0KIAotCQltY2xpc3QgPSB1c2JkZXYtPm5ldC0+bWNfbGlzdDsKLQkJZm9yIChpID0gMDsgaSA8IHNpemUgJiYgbWNsaXN0OyBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKLQkJCWlmIChtY2xpc3QtPmRtaV9hZGRybGVuICE9IEVUSF9BTEVOKQotCQkJCWNvbnRpbnVlOwotCi0JCQltZW1jcHkoYnVmICsgaSAqIEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyLCBFVEhfQUxFTik7Ci0JCQlpKys7CisJCWkgPSAwOworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIHVzYmRldi0+bmV0KSB7CisJCQlpZiAoaSA9PSBzaXplKQorCQkJCWJyZWFrOworCQkJbWVtY3B5KGJ1ZiArIGkrKyAqIEVUSF9BTEVOLCBtY2xpc3QtPmRtaV9hZGRyLCBFVEhfQUxFTik7CiAJCX0KIAogCQlyZXQgPSBybmRpc19zZXRfb2lkKHVzYmRldiwgT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNULCBidWYsCkBAIC0xNTIwLDIxICsxNTM0LDIyIEBACiAJCWVsc2UKIAkJCWZpbHRlciB8PSBSTkRJU19QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUOwogCi0JCWRldmRiZyh1c2JkZXYsICJPSURfODAyXzNfTVVMVElDQVNUX0xJU1QoJWQsIG1heDogJWQpIC0+ICVkIiwKLQkJCQkJCWksIHByaXYtPm11bHRpY2FzdF9zaXplLCByZXQpOworCQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiT0lEXzgwMl8zX01VTFRJQ0FTVF9MSVNUKCVkLCBtYXg6ICVkKSAtPiAlZFxuIiwKKwkJCSAgIGksIHByaXYtPm11bHRpY2FzdF9zaXplLCByZXQpOwogCiAJCWtmcmVlKGJ1Zik7CiAJfQorCW5ldGlmX2FkZHJfdW5sb2NrX2JoKHVzYmRldi0+bmV0KTsKIAogCXJldCA9IHJuZGlzX3NldF9vaWQodXNiZGV2LCBPSURfR0VOX0NVUlJFTlRfUEFDS0VUX0ZJTFRFUiwgJmZpbHRlciwKIAkJCQkJCQlzaXplb2YoZmlsdGVyKSk7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2d2Fybih1c2JkZXYsICJjb3VsZG4ndCBzZXQgcGFja2V0IGZpbHRlcjogJTA4eCIsCi0JCQkJCQkJbGUzMl90b19jcHUoZmlsdGVyKSk7CisJCW5ldGRldl93YXJuKHVzYmRldi0+bmV0LCAiY291bGRuJ3Qgc2V0IHBhY2tldCBmaWx0ZXI6ICUwOHhcbiIsCisJCQkgICAgbGUzMl90b19jcHUoZmlsdGVyKSk7CiAJfQogCi0JZGV2ZGJnKHVzYmRldiwgIk9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSKCUwOHgpIC0+ICVkIiwKLQkJCQkJCWxlMzJfdG9fY3B1KGZpbHRlciksIHJldCk7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIk9JRF9HRU5fQ1VSUkVOVF9QQUNLRVRfRklMVEVSKCUwOHgpIC0+ICVkXG4iLAorCQkgICBsZTMyX3RvX2NwdShmaWx0ZXIpLCByZXQpOwogfQogCiAvKgpAQCAtMTU5Miw3ICsxNjA3LDggQEAKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gd2lwaHlfcHJpdih3aXBoeSk7CiAJc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OwogCi0JZGV2ZGJnKHVzYmRldiwgInJuZGlzX3NldF90eF9wb3dlciB0eXBlOjB4JXggZGJtOiVpIiwgdHlwZSwgZGJtKTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoKTogdHlwZToweCV4IGRibTolaVxuIiwKKwkJICAgX19mdW5jX18sIHR5cGUsIGRibSk7CiAKIAkvKiBEZXZpY2UgZG9lc24ndCBzdXBwb3J0IGNoYW5naW5nIHR4cG93ZXIgYWZ0ZXIgaW5pdGlhbGl6YXRpb24sIG9ubHkKIAkgKiB0dXJuIG9mZi9vbiByYWRpby4gU3VwcG9ydCAnYXV0bycgbW9kZSBhbmQgc2V0dGluZyBzYW1lIGRCbSB0aGF0IGlzCkBAIC0xNjE1LDcgKzE2MzEsNyBAQAogCiAJKmRibSA9IGdldF9iY200MzIwX3Bvd2VyX2RibShwcml2KTsKIAotCWRldmRiZyh1c2JkZXYsICJybmRpc19nZXRfdHhfcG93ZXIgZGJtOiVpIiwgKmRibSk7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCk6IGRibTolaVxuIiwgX19mdW5jX18sICpkYm0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNjI5LDcgKzE2NDUsNyBAQAogCWludCByZXQ7CiAJX19sZTMyIHRtcDsKIAotCWRldmRiZyh1c2JkZXYsICJjZmc4MDIxMS5zY2FuIik7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImNmZzgwMjExLnNjYW5cbiIpOwogCiAJLyogR2V0IGN1cnJlbnQgYnNzaWQgbGlzdCBmcm9tIGRldmljZSBiZWZvcmUgbmV3IHNjYW4sIGFzIG5ldyBzY2FuCiAJICogY2xlYXJzIGludGVybmFsIGJzc2lkIGxpc3QuCkBAIC0xNjY5LDggKzE2ODUsOCBAQAogCWludCBpZV9sZW4sIGJzc2lkX2xlbjsKIAl1OCAqaWU7CiAKLQlkZXZkYmcodXNiZGV2LCAiIGZvdW5kIGJzc2lkOiAnJS4zMnMnIFslcE1dIiwgYnNzaWQtPnNzaWQuZXNzaWQsCi0JCQkJCQkJYnNzaWQtPm1hYyk7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiBmb3VuZCBic3NpZDogJyUuMzJzJyBbJXBNXVxuIiwKKwkJICAgYnNzaWQtPnNzaWQuZXNzaWQsIGJzc2lkLT5tYWMpOwogCiAJLyogcGFyc2UgYnNzaWQgc3RydWN0dXJlICovCiAJYnNzaWRfbGVuID0gbGUzMl90b19jcHUoYnNzaWQtPmxlbmd0aCk7CkBAIC0xNzEyLDcgKzE3MjgsNyBAQAogCWludCByZXQgPSAtRUlOVkFMLCBsZW4sIGNvdW50LCBic3NpZF9sZW47CiAJYm9vbCByZXNpemVkID0gZmFsc2U7CiAKLQlkZXZkYmcodXNiZGV2LCAiY2hlY2tfYnNzaWRfbGlzdCIpOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICJjaGVja19ic3NpZF9saXN0XG4iKTsKIAogCWxlbiA9IENPTlRST0xfQlVGRkVSX1NJWkU7CiByZXNpemVfYnVmOgpAQCAtMTczNiw4ICsxNzUyLDggQEAKIAlic3NpZCA9IGJzc2lkX2xpc3QtPmJzc2lkOwogCWJzc2lkX2xlbiA9IGxlMzJfdG9fY3B1KGJzc2lkLT5sZW5ndGgpOwogCWNvdW50ID0gbGUzMl90b19jcHUoYnNzaWRfbGlzdC0+bnVtX2l0ZW1zKTsKLQlkZXZkYmcodXNiZGV2LCAiY2hlY2tfYnNzaWRfbGlzdDogJWQgQlNTSURzIGZvdW5kIChidWZsZW46ICVkKSIsIGNvdW50LAotCQkJCQkJCQkJbGVuKTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiY2hlY2tfYnNzaWRfbGlzdDogJWQgQlNTSURzIGZvdW5kIChidWZsZW46ICVkKVxuIiwKKwkJICAgY291bnQsIGxlbik7CiAKIAl3aGlsZSAoY291bnQgJiYgKCh2b2lkICopYnNzaWQgKyBic3NpZF9sZW4pIDw9IChidWYgKyBsZW4pKSB7CiAJCXJuZGlzX2Jzc19pbmZvX3VwZGF0ZSh1c2JkZXYsIGJzc2lkKTsKQEAgLTE3NTksNyArMTc3NSw3IEBACiAJc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OwogCWludCByZXQ7CiAKLQlkZXZkYmcodXNiZGV2LCAiZ2V0X3NjYW5fcmVzdWx0cyIpOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICJnZXRfc2Nhbl9yZXN1bHRzXG4iKTsKIAogCWlmICghcHJpdi0+c2Nhbl9yZXF1ZXN0KQogCQlyZXR1cm47CkBAIC0xNzkzLDcgKzE4MDksNyBAQAogCiAJaWYgKHNtZS0+Y3J5cHRvLm5fY2lwaGVyc19wYWlyd2lzZSA+IDAgJiYKIAkJCXBhaXJ3aXNlID09IFJORElTX1dMQU5fQUxHX05PTkUpIHsKLQkJZGV2ZXJyKHVzYmRldiwgIlVuc3VwcG9ydGVkIHBhaXJ3aXNlIGNpcGhlciIpOworCQluZXRkZXZfZXJyKHVzYmRldi0+bmV0LCAiVW5zdXBwb3J0ZWQgcGFpcndpc2UgY2lwaGVyXG4iKTsKIAkJcmV0dXJuIC1FTk9UU1VQUDsKIAl9CiAKQEAgLTE4MDMsMjggKzE4MTksMzAgQEAKIAogCWlmIChzbWUtPmNyeXB0by5uX2FrbV9zdWl0ZXMgPiAwICYmCiAJCQlrZXltZ210ID09IFJORElTX1dMQU5fS0VZX01HTVRfTk9ORSkgewotCQlkZXZlcnIodXNiZGV2LCAiSW52YWxpZCBrZXltZ210Iik7CisJCW5ldGRldl9lcnIodXNiZGV2LT5uZXQsICJJbnZhbGlkIGtleW1nbXRcbiIpOwogCQlyZXR1cm4gLUVOT1RTVVBQOwogCX0KIAotCWRldmRiZyh1c2JkZXYsICJjZmc4MDIxMS5jb25uZWN0KCclLjMycyc6WyVwTV06JWQ6WyVkLDB4JXg6MHgleF06WzB4JXg6IgotCQkJIjB4JXhdOjB4JXgpIiwgc21lLT5zc2lkLCBzbWUtPmJzc2lkLCBjaGFuLAotCQkJc21lLT5wcml2YWN5LCBzbWUtPmNyeXB0by53cGFfdmVyc2lvbnMsIHNtZS0+YXV0aF90eXBlLAotCQkJZ3JvdXB3aXNlLCBwYWlyd2lzZSwga2V5bWdtdCk7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImNmZzgwMjExLmNvbm5lY3QoJyUuMzJzJzpbJXBNXTolZDpbJWQsMHgleDoweCV4XTpbMHgleDoweCV4XToweCV4KVxuIiwKKwkJICAgc21lLT5zc2lkLCBzbWUtPmJzc2lkLCBjaGFuLAorCQkgICBzbWUtPnByaXZhY3ksIHNtZS0+Y3J5cHRvLndwYV92ZXJzaW9ucywgc21lLT5hdXRoX3R5cGUsCisJCSAgIGdyb3Vwd2lzZSwgcGFpcndpc2UsIGtleW1nbXQpOwogCiAJaWYgKGlzX2Fzc29jaWF0ZWQodXNiZGV2KSkKIAkJZGlzYXNzb2NpYXRlKHVzYmRldiwgZmFsc2UpOwogCiAJcmV0ID0gc2V0X2luZnJhX21vZGUodXNiZGV2LCBORElTXzgwMjExX0lORlJBX0lORlJBKTsKIAlpZiAocmV0IDwgMCkgewotCQlkZXZkYmcodXNiZGV2LCAiY29ubmVjdDogc2V0X2luZnJhX21vZGUgZmFpbGVkLCAlZCIsIHJldCk7CisJCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICJjb25uZWN0OiBzZXRfaW5mcmFfbW9kZSBmYWlsZWQsICVkXG4iLAorCQkJICAgcmV0KTsKIAkJZ290byBlcnJfdHVybl9yYWRpb19vbjsKIAl9CiAKIAlyZXQgPSBzZXRfYXV0aF9tb2RlKHVzYmRldiwgc21lLT5jcnlwdG8ud3BhX3ZlcnNpb25zLCBzbWUtPmF1dGhfdHlwZSwKIAkJCQkJCQkJa2V5bWdtdCk7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2ZGJnKHVzYmRldiwgImNvbm5lY3Q6IHNldF9hdXRoX21vZGUgZmFpbGVkLCAlZCIsIHJldCk7CisJCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICJjb25uZWN0OiBzZXRfYXV0aF9tb2RlIGZhaWxlZCwgJWRcbiIsCisJCQkgICByZXQpOwogCQlnb3RvIGVycl90dXJuX3JhZGlvX29uOwogCX0KIApAQCAtMTgzMiwxNCArMTg1MCwxNiBAQAogCiAJcmV0ID0gc2V0X2VuY3JfbW9kZSh1c2JkZXYsIHBhaXJ3aXNlLCBncm91cHdpc2UpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldmRiZyh1c2JkZXYsICJjb25uZWN0OiBzZXRfZW5jcl9tb2RlIGZhaWxlZCwgJWQiLCByZXQpOworCQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiY29ubmVjdDogc2V0X2VuY3JfbW9kZSBmYWlsZWQsICVkXG4iLAorCQkJICAgcmV0KTsKIAkJZ290byBlcnJfdHVybl9yYWRpb19vbjsKIAl9CiAKIAlpZiAoY2hhbm5lbCkgewogCQlyZXQgPSBzZXRfY2hhbm5lbCh1c2JkZXYsIGNoYW4pOwogCQlpZiAocmV0IDwgMCkgewotCQkJZGV2ZGJnKHVzYmRldiwgImNvbm5lY3Q6IHNldF9jaGFubmVsIGZhaWxlZCwgJWQiLCByZXQpOworCQkJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImNvbm5lY3Q6IHNldF9jaGFubmVsIGZhaWxlZCwgJWRcbiIsCisJCQkJICAgcmV0KTsKIAkJCWdvdG8gZXJyX3R1cm5fcmFkaW9fb247CiAJCX0KIAl9CkBAIC0xODQ4LDggKzE4NjgsOCBAQAogCQlwcml2LT5lbmNyX3R4X2tleV9pbmRleCA9IHNtZS0+a2V5X2lkeDsKIAkJcmV0ID0gYWRkX3dlcF9rZXkodXNiZGV2LCBzbWUtPmtleSwgc21lLT5rZXlfbGVuLCBzbWUtPmtleV9pZHgpOwogCQlpZiAocmV0IDwgMCkgewotCQkJZGV2ZGJnKHVzYmRldiwgImNvbm5lY3Q6IGFkZF93ZXBfa2V5IGZhaWxlZCwgJWQgIgotCQkJCSIoJWQsICVkKSIsIHJldCwgc21lLT5rZXlfbGVuLCBzbWUtPmtleV9pZHgpOworCQkJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImNvbm5lY3Q6IGFkZF93ZXBfa2V5IGZhaWxlZCwgJWQgKCVkLCAlZClcbiIsCisJCQkJICAgcmV0LCBzbWUtPmtleV9sZW4sIHNtZS0+a2V5X2lkeCk7CiAJCQlnb3RvIGVycl90dXJuX3JhZGlvX29uOwogCQl9CiAJfQpAQCAtMTg1OCw3ICsxODc4LDggQEAKIAkJCQkhaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoc21lLT5ic3NpZCkpIHsKIAkJcmV0ID0gc2V0X2Jzc2lkKHVzYmRldiwgc21lLT5ic3NpZCk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZkYmcodXNiZGV2LCAiY29ubmVjdDogc2V0X2Jzc2lkIGZhaWxlZCwgJWQiLCByZXQpOworCQkJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImNvbm5lY3Q6IHNldF9ic3NpZCBmYWlsZWQsICVkXG4iLAorCQkJCSAgIHJldCk7CiAJCQlnb3RvIGVycl90dXJuX3JhZGlvX29uOwogCQl9CiAJfSBlbHNlCkBAIC0xODgwLDcgKzE5MDEsNyBAQAogCiAJcmV0ID0gc2V0X2Vzc2lkKHVzYmRldiwgJnNzaWQpOwogCWlmIChyZXQgPCAwKQotCQlkZXZkYmcodXNiZGV2LCAiY29ubmVjdDogc2V0X2Vzc2lkIGZhaWxlZCwgJWQiLCByZXQpOworCQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiY29ubmVjdDogc2V0X2Vzc2lkIGZhaWxlZCwgJWRcbiIsIHJldCk7CiAJcmV0dXJuIHJldDsKIAogZXJyX3R1cm5fcmFkaW9fb246CkBAIC0xODk1LDcgKzE5MTYsNyBAQAogCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKIAlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CiAKLQlkZXZkYmcodXNiZGV2LCAiY2ZnODAyMTEuZGlzY29ubmVjdCglZCkiLCByZWFzb25fY29kZSk7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImNmZzgwMjExLmRpc2Nvbm5lY3QoJWQpXG4iLCByZWFzb25fY29kZSk7CiAKIAlwcml2LT5jb25uZWN0ZWQgPSBmYWxzZTsKIAltZW1zZXQocHJpdi0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKQEAgLTE5MjksMjEgKzE5NTAsMjMgQEAKIAkJYWxnID0gUk5ESVNfV0xBTl9BTEdfTk9ORTsKIAl9CiAKLQlkZXZkYmcodXNiZGV2LCAiY2ZnODAyMTEuam9pbl9pYnNzKCclLjMycyc6WyVwTV06JWQ6JWQpIiwgcGFyYW1zLT5zc2lkLAotCQkJCQlwYXJhbXMtPmJzc2lkLCBjaGFuLCBwYXJhbXMtPnByaXZhY3kpOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICJjZmc4MDIxMS5qb2luX2lic3MoJyUuMzJzJzpbJXBNXTolZDolZClcbiIsCisJCSAgIHBhcmFtcy0+c3NpZCwgcGFyYW1zLT5ic3NpZCwgY2hhbiwgcGFyYW1zLT5wcml2YWN5KTsKIAogCWlmIChpc19hc3NvY2lhdGVkKHVzYmRldikpCiAJCWRpc2Fzc29jaWF0ZSh1c2JkZXYsIGZhbHNlKTsKIAogCXJldCA9IHNldF9pbmZyYV9tb2RlKHVzYmRldiwgTkRJU184MDIxMV9JTkZSQV9BREhPQyk7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2ZGJnKHVzYmRldiwgImpvaW5faWJzczogc2V0X2luZnJhX21vZGUgZmFpbGVkLCAlZCIsIHJldCk7CisJCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICJqb2luX2lic3M6IHNldF9pbmZyYV9tb2RlIGZhaWxlZCwgJWRcbiIsCisJCQkgICByZXQpOwogCQlnb3RvIGVycl90dXJuX3JhZGlvX29uOwogCX0KIAogCXJldCA9IHNldF9hdXRoX21vZGUodXNiZGV2LCAwLCBhdXRoX3R5cGUsIFJORElTX1dMQU5fS0VZX01HTVRfTk9ORSk7CiAJaWYgKHJldCA8IDApIHsKLQkJZGV2ZGJnKHVzYmRldiwgImpvaW5faWJzczogc2V0X2F1dGhfbW9kZSBmYWlsZWQsICVkIiwgcmV0KTsKKwkJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImpvaW5faWJzczogc2V0X2F1dGhfbW9kZSBmYWlsZWQsICVkXG4iLAorCQkJICAgcmV0KTsKIAkJZ290byBlcnJfdHVybl9yYWRpb19vbjsKIAl9CiAKQEAgLTE5NTEsMTUgKzE5NzQsMTYgQEAKIAogCXJldCA9IHNldF9lbmNyX21vZGUodXNiZGV2LCBhbGcsIFJORElTX1dMQU5fQUxHX05PTkUpOwogCWlmIChyZXQgPCAwKSB7Ci0JCWRldmRiZyh1c2JkZXYsICJqb2luX2lic3M6IHNldF9lbmNyX21vZGUgZmFpbGVkLCAlZCIsIHJldCk7CisJCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICJqb2luX2lic3M6IHNldF9lbmNyX21vZGUgZmFpbGVkLCAlZFxuIiwKKwkJCSAgIHJldCk7CiAJCWdvdG8gZXJyX3R1cm5fcmFkaW9fb247CiAJfQogCiAJaWYgKGNoYW5uZWwpIHsKIAkJcmV0ID0gc2V0X2NoYW5uZWwodXNiZGV2LCBjaGFuKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCWRldmRiZyh1c2JkZXYsICJqb2luX2lic3M6IHNldF9jaGFubmVsIGZhaWxlZCwgJWQiLAotCQkJCXJldCk7CisJCQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiam9pbl9pYnNzOiBzZXRfY2hhbm5lbCBmYWlsZWQsICVkXG4iLAorCQkJCSAgIHJldCk7CiAJCQlnb3RvIGVycl90dXJuX3JhZGlvX29uOwogCQl9CiAJfQpAQCAtMTk2OCw3ICsxOTkyLDggQEAKIAkJCQkhaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIocGFyYW1zLT5ic3NpZCkpIHsKIAkJcmV0ID0gc2V0X2Jzc2lkKHVzYmRldiwgcGFyYW1zLT5ic3NpZCk7CiAJCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZkYmcodXNiZGV2LCAiam9pbl9pYnNzOiBzZXRfYnNzaWQgZmFpbGVkLCAlZCIsIHJldCk7CisJCQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiam9pbl9pYnNzOiBzZXRfYnNzaWQgZmFpbGVkLCAlZFxuIiwKKwkJCQkgICByZXQpOwogCQkJZ290byBlcnJfdHVybl9yYWRpb19vbjsKIAkJfQogCX0gZWxzZQpAQCAtMTk4OCw3ICsyMDEzLDggQEAKIAogCXJldCA9IHNldF9lc3NpZCh1c2JkZXYsICZzc2lkKTsKIAlpZiAocmV0IDwgMCkKLQkJZGV2ZGJnKHVzYmRldiwgImpvaW5faWJzczogc2V0X2Vzc2lkIGZhaWxlZCwgJWQiLCByZXQpOworCQluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiam9pbl9pYnNzOiBzZXRfZXNzaWQgZmFpbGVkLCAlZFxuIiwKKwkJCSAgIHJldCk7CiAJcmV0dXJuIHJldDsKIAogZXJyX3R1cm5fcmFkaW9fb246CkBAIC0yMDAyLDcgKzIwMjgsNyBAQAogCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKIAlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CiAKLQlkZXZkYmcodXNiZGV2LCAiY2ZnODAyMTEubGVhdmVfaWJzcygpIik7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImNmZzgwMjExLmxlYXZlX2lic3MoKVxuIik7CiAKIAlwcml2LT5jb25uZWN0ZWQgPSBmYWxzZTsKIAltZW1zZXQocHJpdi0+YnNzaWQsIDAsIEVUSF9BTEVOKTsKQEAgLTIwMjgsOCArMjA1NCw4IEBACiAJc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OwogCV9fbGUzMiBmbGFnczsKIAotCWRldmRiZyh1c2JkZXYsICJybmRpc19hZGRfa2V5KCVpLCAlcE0sICUwOHgpIiwga2V5X2luZGV4LCBtYWNfYWRkciwKLQkJCQkJCQlwYXJhbXMtPmNpcGhlcik7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCVpLCAlcE0sICUwOHgpXG4iLAorCQkgICBfX2Z1bmNfXywga2V5X2luZGV4LCBtYWNfYWRkciwgcGFyYW1zLT5jaXBoZXIpOwogCiAJc3dpdGNoIChwYXJhbXMtPmNpcGhlcikgewogCWNhc2UgV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDA6CkBAIC0yMDUwLDggKzIwNzYsOCBAQAogCQkJCWtleV9pbmRleCwgbWFjX2FkZHIsIHBhcmFtcy0+c2VxLAogCQkJCXBhcmFtcy0+c2VxX2xlbiwgcGFyYW1zLT5jaXBoZXIsIGZsYWdzKTsKIAlkZWZhdWx0OgotCQlkZXZkYmcodXNiZGV2LCAicm5kaXNfYWRkX2tleTogdW5zdXBwb3J0ZWQgY2lwaGVyICUwOHgiLAotCQkJCQkJCXBhcmFtcy0+Y2lwaGVyKTsKKwkJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgIiVzKCk6IHVuc3VwcG9ydGVkIGNpcGhlciAlMDh4XG4iLAorCQkJICAgX19mdW5jX18sIHBhcmFtcy0+Y2lwaGVyKTsKIAkJcmV0dXJuIC1FTk9UU1VQUDsKIAl9CiB9CkBAIC0yMDYyLDcgKzIwODgsNyBAQAogCXN0cnVjdCBybmRpc193bGFuX3ByaXZhdGUgKnByaXYgPSB3aXBoeV9wcml2KHdpcGh5KTsKIAlzdHJ1Y3QgdXNibmV0ICp1c2JkZXYgPSBwcml2LT51c2JkZXY7CiAKLQlkZXZkYmcodXNiZGV2LCAicm5kaXNfZGVsX2tleSglaSwgJXBNKSIsIGtleV9pbmRleCwgbWFjX2FkZHIpOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcyglaSwgJXBNKVxuIiwgX19mdW5jX18sIGtleV9pbmRleCwgbWFjX2FkZHIpOwogCiAJcmV0dXJuIHJlbW92ZV9rZXkodXNiZGV2LCBrZXlfaW5kZXgsIG1hY19hZGRyKTsKIH0KQEAgLTIwNzQsNyArMjEwMCw3IEBACiAJc3RydWN0IHVzYm5ldCAqdXNiZGV2ID0gcHJpdi0+dXNiZGV2OwogCXN0cnVjdCBybmRpc193bGFuX2VuY3Jfa2V5IGtleTsKIAotCWRldmRiZyh1c2JkZXYsICJybmRpc19zZXRfZGVmYXVsdF9rZXkoJWkpIiwga2V5X2luZGV4KTsKKwluZXRkZXZfZGJnKHVzYmRldi0+bmV0LCAiJXMoJWkpXG4iLCBfX2Z1bmNfXywga2V5X2luZGV4KTsKIAogCXByaXYtPmVuY3JfdHhfa2V5X2luZGV4ID0ga2V5X2luZGV4OwogCkBAIC0yMTg4LDcgKzIyMTQsOCBAQAogCWlmIChyZXQgPCAwKQogCQltZW1zZXQoYnNzaWQsIDAsIHNpemVvZihic3NpZCkpOwogCi0JZGV2ZGJnKHVzYmRldiwgImxpbmsgdXAgd29yazogWyVwTV0gJXMiLCBic3NpZCwgcm9hbWVkID8gInJvYW1lZCIgOiAiIik7CisJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImxpbmsgdXAgd29yazogWyVwTV0lc1xuIiwKKwkJICAgYnNzaWQsIHJvYW1lZCA/ICIgcm9hbWVkIiA6ICIiKTsKIAogCS8qIEludGVybmFsIGJzcyBsaXN0IGluIGRldmljZSBhbHdheXMgY29udGFpbnMgYXQgbGVhc3QgdGhlIGN1cnJlbnRseQogCSAqIGNvbm5lY3RlZCBic3MgYW5kIHdlIGNhbiBnZXQgaXQgdG8gY2ZnODAyMTEgd2l0aApAQCAtMjI3MCw4ICsyMjk3LDggQEAKIAkvKiBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGFycmF5IGVudHJ5ICovCiAJaWYgKGxlbiA8IG9mZnNldG9mKHN0cnVjdCBuZGlzXzgwMjExX3N0YXR1c19pbmRpY2F0aW9uLCB1KSArCiAJCQkJc2l6ZW9mKHN0cnVjdCBuZGlzXzgwMjExX2F1dGhfcmVxdWVzdCkpIHsKLQkJZGV2aW5mbyh1c2JkZXYsICJhdXRoZW50aWNhdGlvbiBpbmRpY2F0aW9uOiAiCi0JCQkJInRvbyBzaG9ydCBtZXNzYWdlICglaSkiLCBsZW4pOworCQluZXRkZXZfaW5mbyh1c2JkZXYtPm5ldCwgImF1dGhlbnRpY2F0aW9uIGluZGljYXRpb246IHRvbyBzaG9ydCBtZXNzYWdlICglaSlcbiIsCisJCQkgICAgbGVuKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjI5OCw4ICsyMzI1LDggQEAKIAkJCXR5cGUgPSAiZ3JvdXBfZXJyb3IiOwogCQl9CiAKLQkJZGV2aW5mbyh1c2JkZXYsICJhdXRoZW50aWNhdGlvbiBpbmRpY2F0aW9uOiAlcyAoMHglMDh4KSIsIHR5cGUsCi0JCQkJbGUzMl90b19jcHUoYXV0aF9yZXEtPmZsYWdzKSk7CisJCW5ldGRldl9pbmZvKHVzYmRldi0+bmV0LCAiYXV0aGVudGljYXRpb24gaW5kaWNhdGlvbjogJXMgKDB4JTA4eClcbiIsCisJCQkgICAgdHlwZSwgbGUzMl90b19jcHUoYXV0aF9yZXEtPmZsYWdzKSk7CiAKIAkJaWYgKHBhaXJ3aXNlX2Vycm9yKSB7CiAJCQlrZXlfdHlwZSA9IE5MODAyMTFfS0VZVFlQRV9QQUlSV0lTRTsKQEAgLTIzMzUsOCArMjM2Miw4IEBACiAKIAlpZiAobGVuIDwgb2Zmc2V0b2Yoc3RydWN0IG5kaXNfODAyMTFfc3RhdHVzX2luZGljYXRpb24sIHUpICsKIAkJCQlzaXplb2Yoc3RydWN0IG5kaXNfODAyMTFfcG1raWRfY2FuZF9saXN0KSkgewotCQlkZXZpbmZvKHVzYmRldiwgInBta2lkIGNhbmRpZGF0ZSBsaXN0IGluZGljYXRpb246ICIKLQkJCQkidG9vIHNob3J0IG1lc3NhZ2UgKCVpKSIsIGxlbik7CisJCW5ldGRldl9pbmZvKHVzYmRldi0+bmV0LCAicG1raWQgY2FuZGlkYXRlIGxpc3QgaW5kaWNhdGlvbjogdG9vIHNob3J0IG1lc3NhZ2UgKCVpKVxuIiwKKwkJCSAgICBsZW4pOwogCQlyZXR1cm47CiAJfQogCkBAIC0yMzQ2LDE4ICsyMzczLDE2IEBACiAJCQlvZmZzZXRvZihzdHJ1Y3QgbmRpc184MDIxMV9zdGF0dXNfaW5kaWNhdGlvbiwgdSk7CiAKIAlpZiAobGVuIDwgZXhwZWN0ZWRfbGVuKSB7Ci0JCWRldmluZm8odXNiZGV2LCAicG1raWQgY2FuZGlkYXRlIGxpc3QgaW5kaWNhdGlvbjogIgotCQkJCSJsaXN0IGxhcmdlciB0aGFuIGJ1ZmZlciAoJWkgPCAlaSkiLAotCQkJCWxlbiwgZXhwZWN0ZWRfbGVuKTsKKwkJbmV0ZGV2X2luZm8odXNiZGV2LT5uZXQsICJwbWtpZCBjYW5kaWRhdGUgbGlzdCBpbmRpY2F0aW9uOiBsaXN0IGxhcmdlciB0aGFuIGJ1ZmZlciAoJWkgPCAlaSlcbiIsCisJCQkgICAgbGVuLCBleHBlY3RlZF9sZW4pOwogCQlyZXR1cm47CiAJfQogCiAJY2FuZF9saXN0ID0gJmluZGljYXRpb24tPnUuY2FuZF9saXN0OwogCi0JZGV2aW5mbyh1c2JkZXYsICJwbWtpZCBjYW5kaWRhdGUgbGlzdCBpbmRpY2F0aW9uOiAiCi0JCQkidmVyc2lvbiAlaSwgY2FuZGlkYXRlcyAlaSIsCi0JCQlsZTMyX3RvX2NwdShjYW5kX2xpc3QtPnZlcnNpb24pLAotCQkJbGUzMl90b19jcHUoY2FuZF9saXN0LT5udW1fY2FuZGlkYXRlcykpOworCW5ldGRldl9pbmZvKHVzYmRldi0+bmV0LCAicG1raWQgY2FuZGlkYXRlIGxpc3QgaW5kaWNhdGlvbjogdmVyc2lvbiAlaSwgY2FuZGlkYXRlcyAlaVxuIiwKKwkJICAgIGxlMzJfdG9fY3B1KGNhbmRfbGlzdC0+dmVyc2lvbiksCisJCSAgICBsZTMyX3RvX2NwdShjYW5kX2xpc3QtPm51bV9jYW5kaWRhdGVzKSk7CiAKIAlpZiAobGUzMl90b19jcHUoY2FuZF9saXN0LT52ZXJzaW9uKSAhPSAxKQogCQlyZXR1cm47CkBAIC0yMzY2LDggKzIzOTEsOCBAQAogCQlzdHJ1Y3QgbmRpc184MDIxMV9wbWtpZF9jYW5kaWRhdGUgKmNhbmQgPQogCQkJCQkJJmNhbmRfbGlzdC0+Y2FuZGlkYXRlX2xpc3RbaV07CiAKLQkJZGV2ZGJnKHVzYmRldiwgImNhbmRbJWldOiBmbGFnczogMHglMDh4LCBic3NpZDogJXBNIiwKLQkJCQlpLCBsZTMyX3RvX2NwdShjYW5kLT5mbGFncyksIGNhbmQtPmJzc2lkKTsKKwkJbmV0ZGV2X2RiZyh1c2JkZXYtPm5ldCwgImNhbmRbJWldOiBmbGFnczogMHglMDh4LCBic3NpZDogJXBNXG4iLAorCQkJICAgaSwgbGUzMl90b19jcHUoY2FuZC0+ZmxhZ3MpLCBjYW5kLT5ic3NpZCk7CiAKICNpZiAwCiAJCXN0cnVjdCBpd19wbWtpZF9jYW5kIHBjYW5kOwpAQCAtMjM5OCwxNSArMjQyMywxNCBAQAogCWxlbiA9IGxlMzJfdG9fY3B1KG1zZy0+bGVuZ3RoKTsKIAogCWlmIChsZW4gPCA4KSB7Ci0JCWRldmluZm8odXNiZGV2LCAibWVkaWEgc3BlY2lmaWMgaW5kaWNhdGlvbiwgIgotCQkJCSJpZ25vcmUgdG9vIHNob3J0IG1lc3NhZ2UgKCVpIDwgOCkiLCBsZW4pOworCQluZXRkZXZfaW5mbyh1c2JkZXYtPm5ldCwgIm1lZGlhIHNwZWNpZmljIGluZGljYXRpb24sIGlnbm9yZSB0b28gc2hvcnQgbWVzc2FnZSAoJWkgPCA4KVxuIiwKKwkJCSAgICBsZW4pOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKG9mZnNldCArIGxlbiA+IGJ1ZmxlbikgewotCQlkZXZpbmZvKHVzYmRldiwgIm1lZGlhIHNwZWNpZmljIGluZGljYXRpb24sICIKLQkJCQkidG9vIGxhcmdlIHRvIGZpdCB0byBidWZmZXIgKCVpID4gJWkpIiwKLQkJCQlvZmZzZXQgKyBsZW4sIGJ1Zmxlbik7CisJCW5ldGRldl9pbmZvKHVzYmRldi0+bmV0LCAibWVkaWEgc3BlY2lmaWMgaW5kaWNhdGlvbiwgdG9vIGxhcmdlIHRvIGZpdCB0byBidWZmZXIgKCVpID4gJWkpXG4iLAorCQkJICAgIG9mZnNldCArIGxlbiwgYnVmbGVuKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMjQxNCwxMyArMjQzOCwxMyBAQAogCiAJc3dpdGNoIChsZTMyX3RvX2NwdShpbmRpY2F0aW9uLT5zdGF0dXNfdHlwZSkpIHsKIAljYXNlIE5ESVNfODAyMTFfU1RBVFVTVFlQRV9SQURJT1NUQVRFOgotCQlkZXZpbmZvKHVzYmRldiwgInJhZGlvIHN0YXRlIGluZGljYXRpb246ICVpIiwKLQkJCWxlMzJfdG9fY3B1KGluZGljYXRpb24tPnUucmFkaW9fc3RhdHVzKSk7CisJCW5ldGRldl9pbmZvKHVzYmRldi0+bmV0LCAicmFkaW8gc3RhdGUgaW5kaWNhdGlvbjogJWlcbiIsCisJCQkgICAgbGUzMl90b19jcHUoaW5kaWNhdGlvbi0+dS5yYWRpb19zdGF0dXMpKTsKIAkJcmV0dXJuOwogCiAJY2FzZSBORElTXzgwMjExX1NUQVRVU1RZUEVfTUVESUFTVFJFQU1NT0RFOgotCQlkZXZpbmZvKHVzYmRldiwgIm1lZGlhIHN0cmVhbSBtb2RlIGluZGljYXRpb246ICVpIiwKLQkJCWxlMzJfdG9fY3B1KGluZGljYXRpb24tPnUubWVkaWFfc3RyZWFtX21vZGUpKTsKKwkJbmV0ZGV2X2luZm8odXNiZGV2LT5uZXQsICJtZWRpYSBzdHJlYW0gbW9kZSBpbmRpY2F0aW9uOiAlaVxuIiwKKwkJCSAgICBsZTMyX3RvX2NwdShpbmRpY2F0aW9uLT51Lm1lZGlhX3N0cmVhbV9tb2RlKSk7CiAJCXJldHVybjsKIAogCWNhc2UgTkRJU184MDIxMV9TVEFUVVNUWVBFX0FVVEhFTlRJQ0FUSU9OOgpAQCAtMjQzMiw5ICsyNDU2LDggQEAKIAkJcmV0dXJuOwogCiAJZGVmYXVsdDoKLQkJZGV2aW5mbyh1c2JkZXYsICJtZWRpYSBzcGVjaWZpYyBpbmRpY2F0aW9uOiAiCi0JCQkJInVua25vd24gc3RhdHVzIHR5cGUgMHglMDh4IiwKLQkJCQlsZTMyX3RvX2NwdShpbmRpY2F0aW9uLT5zdGF0dXNfdHlwZSkpOworCQluZXRkZXZfaW5mbyh1c2JkZXYtPm5ldCwgIm1lZGlhIHNwZWNpZmljIGluZGljYXRpb246IHVua25vd24gc3RhdHVzIHR5cGUgMHglMDh4XG4iLAorCQkJICAgIGxlMzJfdG9fY3B1KGluZGljYXRpb24tPnN0YXR1c190eXBlKSk7CiAJfQogfQogCkBAIC0yNDUxLDE0ICsyNDc0LDEzIEBACiAJCQkgKiBhbmQgdXNlcnNwYWNlIHRvIHRoaW5rIHRoYXQgZGV2aWNlIGlzCiAJCQkgKiByb2FtaW5nL3JlYXNzb2NpYXRpbmcgd2hlbiBpdCBpc24ndC4KIAkJCSAqLwotCQkJZGV2ZGJnKHVzYmRldiwgImlnbm9yZWQgT0lEXzgwMl8xMV9BRERfS0VZIHRyaWdnZXJlZCAiCi0JCQkJCSInbWVkaWEgY29ubmVjdCciKTsKKwkJCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICJpZ25vcmVkIE9JRF84MDJfMTFfQUREX0tFWSB0cmlnZ2VyZWQgJ21lZGlhIGNvbm5lY3QnXG4iKTsKIAkJCXJldHVybjsKIAkJfQogCiAJCXVzYm5ldF9wYXVzZV9yeCh1c2JkZXYpOwogCi0JCWRldmluZm8odXNiZGV2LCAibWVkaWEgY29ubmVjdCIpOworCQluZXRkZXZfaW5mbyh1c2JkZXYtPm5ldCwgIm1lZGlhIGNvbm5lY3RcbiIpOwogCiAJCS8qIHF1ZXVlIHdvcmsgdG8gYXZvaWQgcmVjdXJzaXZlIGNhbGxzIGludG8gcm5kaXNfY29tbWFuZCAqLwogCQlzZXRfYml0KFdPUktfTElOS19VUCwgJnByaXYtPndvcmtfcGVuZGluZyk7CkBAIC0yNDY2LDcgKzI0ODgsNyBAQAogCQlicmVhazsKIAogCWNhc2UgUk5ESVNfU1RBVFVTX01FRElBX0RJU0NPTk5FQ1Q6Ci0JCWRldmluZm8odXNiZGV2LCAibWVkaWEgZGlzY29ubmVjdCIpOworCQluZXRkZXZfaW5mbyh1c2JkZXYtPm5ldCwgIm1lZGlhIGRpc2Nvbm5lY3RcbiIpOwogCiAJCS8qIHF1ZXVlIHdvcmsgdG8gYXZvaWQgcmVjdXJzaXZlIGNhbGxzIGludG8gcm5kaXNfY29tbWFuZCAqLwogCQlzZXRfYml0KFdPUktfTElOS19ET1dOLCAmcHJpdi0+d29ya19wZW5kaW5nKTsKQEAgLTI0NzgsOCArMjUwMCw4IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJZGV2aW5mbyh1c2JkZXYsICJpbmRpY2F0aW9uOiAweCUwOHgiLAotCQkJCWxlMzJfdG9fY3B1KG1zZy0+c3RhdHVzKSk7CisJCW5ldGRldl9pbmZvKHVzYmRldi0+bmV0LCAiaW5kaWNhdGlvbjogMHglMDh4XG4iLAorCQkJICAgIGxlMzJfdG9fY3B1KG1zZy0+c3RhdHVzKSk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTI1NDQsOCArMjU2Niw4IEBACiAJaWYgKHJldCA9PSAwKQogCQlwcml2LT5sYXN0X3F1YWwgPSBsZXZlbF90b19xdWFsKGxlMzJfdG9fY3B1KHJzc2kpKTsKIAotCWRldmRiZyh1c2JkZXYsICJkZXYtcG9sbGVyOiBPSURfODAyXzExX1JTU0kgLT4gJWQsIHJzc2k6JWQsIHF1YWw6ICVkIiwKLQkJcmV0LCBsZTMyX3RvX2NwdShyc3NpKSwgbGV2ZWxfdG9fcXVhbChsZTMyX3RvX2NwdShyc3NpKSkpOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICJkZXYtcG9sbGVyOiBPSURfODAyXzExX1JTU0kgLT4gJWQsIHJzc2k6JWQsIHF1YWw6ICVkXG4iLAorCQkgICByZXQsIGxlMzJfdG9fY3B1KHJzc2kpLCBsZXZlbF90b19xdWFsKGxlMzJfdG9fY3B1KHJzc2kpKSk7CiAKIAkvKiBXb3JrYXJvdW5kIHRyYW5zZmVyIHN0YWxscyBvbiBwb29yIHF1YWxpdHkgbGlua3MuCiAJICogVE9ETzogZmluZCByaWdodCB3YXkgdG8gZml4IHRoZXNlIHN0YWxscyAoYXMgc3RhbGxzIGRvIG5vdCBoYXBwZW4KQEAgLTI1OTQsMjMgKzI2MTYsOSBAQAogLyoKICAqIGRyaXZlci9kZXZpY2UgaW5pdGlhbGl6YXRpb24KICAqLwotc3RhdGljIGludCBiY200MzIwYV9lYXJseV9pbml0KHN0cnVjdCB1c2JuZXQgKnVzYmRldikKLXsKLQkvKiBiY200MzIwYSBkb2Vzbid0IGhhbmRsZSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgd2VsbC4gVHJ5Ci0JICogc2V0IGFueSBhbmQgeW91IGdldCBwYXJ0aWFsbHkgemVyb2VkIG1hYyBhbmQgYnJva2VuIGRldmljZS4KLQkgKi8KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJjbTQzMjBiX2Vhcmx5X2luaXQoc3RydWN0IHVzYm5ldCAqdXNiZGV2KQorc3RhdGljIHZvaWQgcm5kaXNfY29weV9tb2R1bGVfcGFyYW1zKHN0cnVjdCB1c2JuZXQgKnVzYmRldikKIHsKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwotCWNoYXIgYnVmWzhdOwotCi0JLyogRWFybHkgaW5pdGlhbGl6YXRpb24gc2V0dGluZ3MsIHNldHRpbmcgdGhlc2Ugd29uJ3QgaGF2ZSBlZmZlY3QKLQkgKiBpZiBjYWxsZWQgYWZ0ZXIgZ2VuZXJpY19ybmRpc19iaW5kKCkuCi0JICovCiAKIAlwcml2LT5wYXJhbV9jb3VudHJ5WzBdID0gbW9kcGFyYW1fY291bnRyeVswXTsKIAlwcml2LT5wYXJhbV9jb3VudHJ5WzFdID0gbW9kcGFyYW1fY291bnRyeVsxXTsKQEAgLTI2NTIsNiArMjY2MCwzMiBAQAogCQlwcml2LT5wYXJhbV93b3JrYXJvdW5kX2ludGVydmFsID0gNTAwOwogCWVsc2UKIAkJcHJpdi0+cGFyYW1fd29ya2Fyb3VuZF9pbnRlcnZhbCA9IG1vZHBhcmFtX3dvcmthcm91bmRfaW50ZXJ2YWw7Cit9CisKK3N0YXRpYyBpbnQgYmNtNDMyMGFfZWFybHlfaW5pdChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpCit7CisJLyogY29weSBtb2R1bGUgcGFyYW1ldGVycyBmb3IgYmNtNDMyMGEgc28gdGhhdCBpd2NvbmZpZyByZXBvcnRzIHR4cG93ZXIKKwkgKiBhbmQgd29ya2Fyb3VuZCBwYXJhbWV0ZXIgaXMgY29waWVkIHRvIHByaXZhdGUgc3RydWN0dXJlIGNvcnJlY3RseS4KKwkgKi8KKwlybmRpc19jb3B5X21vZHVsZV9wYXJhbXModXNiZGV2KTsKKworCS8qIGJjbTQzMjBhIGRvZXNuJ3QgaGFuZGxlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyB3ZWxsLiBUcnkKKwkgKiBzZXQgYW55IGFuZCB5b3UgZ2V0IHBhcnRpYWxseSB6ZXJvZWQgbWFjIGFuZCBicm9rZW4gZGV2aWNlLgorCSAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmNtNDMyMGJfZWFybHlfaW5pdChzdHJ1Y3QgdXNibmV0ICp1c2JkZXYpCit7CisJc3RydWN0IHJuZGlzX3dsYW5fcHJpdmF0ZSAqcHJpdiA9IGdldF9ybmRpc193bGFuX3ByaXYodXNiZGV2KTsKKwljaGFyIGJ1Zls4XTsKKworCXJuZGlzX2NvcHlfbW9kdWxlX3BhcmFtcyh1c2JkZXYpOworCisJLyogRWFybHkgaW5pdGlhbGl6YXRpb24gc2V0dGluZ3MsIHNldHRpbmcgdGhlc2Ugd29uJ3QgaGF2ZSBlZmZlY3QKKwkgKiBpZiBjYWxsZWQgYWZ0ZXIgZ2VuZXJpY19ybmRpc19iaW5kKCkuCisJICovCiAKIAlybmRpc19zZXRfY29uZmlnX3BhcmFtZXRlcl9zdHIodXNiZGV2LCAiQ291bnRyeSIsIHByaXYtPnBhcmFtX2NvdW50cnkpOwogCXJuZGlzX3NldF9jb25maWdfcGFyYW1ldGVyX3N0cih1c2JkZXYsICJGcmFtZUJ1cnN0aW5nIiwKQEAgLTI4MjYsMTEgKzI4NjAsMTEgQEAKIAlzdHJ1Y3Qgcm5kaXNfd2xhbl9wcml2YXRlICpwcml2ID0gZ2V0X3JuZGlzX3dsYW5fcHJpdih1c2JkZXYpOwogCWludCByZXR2YWw7CiAKLQlkZXZkYmcodXNiZGV2LCAicm5kaXNfd2xhbl9yZXNldCIpOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlyZXR2YWwgPSBybmRpc19yZXNldCh1c2JkZXYpOwogCWlmIChyZXR2YWwpCi0JCWRldndhcm4odXNiZGV2LCAicm5kaXNfcmVzZXQoKSBmYWlsZWQ6ICVkIiwgcmV0dmFsKTsKKwkJbmV0ZGV2X3dhcm4odXNiZGV2LT5uZXQsICJybmRpc19yZXNldCBmYWlsZWQ6ICVkXG4iLCByZXR2YWwpOwogCiAJLyogcm5kaXNfcmVzZXQgY2xlYXJlZCBtdWx0aWNhc3QgbGlzdCwgc28gcmVzdG9yZSBoZXJlLgogCSAgIChzZXRfbXVsdGljYXN0X2xpc3QoKSBhbHNvIHR1cm5zIG9uIGN1cnJlbnQgcGFja2V0IGZpbHRlcikgKi8KQEAgLTI4NDgsNyArMjg4Miw3IEBACiAJaW50IHJldHZhbDsKIAlfX2xlMzIgZmlsdGVyOwogCi0JZGV2ZGJnKHVzYmRldiwgInJuZGlzX3dsYW5fc3RvcCIpOworCW5ldGRldl9kYmcodXNiZGV2LT5uZXQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlyZXR2YWwgPSBkaXNhc3NvY2lhdGUodXNiZGV2LCBmYWxzZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL0tjb25maWcKaW5kZXggYmY2MDY4OS4uNTIzOWUwODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9LY29uZmlnCkBAIC01NCwxNyArNTQsMTcgQEAKIAkgIFdoZW4gY29tcGlsZWQgYXMgYSBtb2R1bGUsIHRoaXMgZHJpdmVyIHdpbGwgYmUgY2FsbGVkIHJ0NjFwY2kuCiAKIGNvbmZpZyBSVDI4MDBQQ0lfUENJCi0JdHJpc3RhdGUKKwlib29sZWFuCiAJZGVwZW5kcyBvbiBQQ0kKIAlkZWZhdWx0IHkKIAogY29uZmlnIFJUMjgwMFBDSV9TT0MKLQl0cmlzdGF0ZQorCWJvb2xlYW4KIAlkZXBlbmRzIG9uIFJBTElOS19SVDI4OFggfHwgUkFMSU5LX1JUMzA1WAogCWRlZmF1bHQgeQogCiBjb25maWcgUlQyODAwUENJCi0JdHJpc3RhdGUgIlJhbGluayBydDI4MDAgKFBDSS9QQ01DSUEpIHN1cHBvcnQgKFZFUlkgRVhQRVJJTUVOVEFMKSIKKwl0cmlzdGF0ZSAiUmFsaW5rIHJ0Mjh4eC9ydDMweHgvcnQzNXh4IChQQ0kvUENJZS9QQ01DSUEpIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiAoUlQyODAwUENJX1BDSSB8fCBSVDI4MDBQQ0lfU09DKSAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgUlQyODAwX0xJQgogCXNlbGVjdCBSVDJYMDBfTElCX1BDSSBpZiBSVDI4MDBQQ0lfUENJCkBAIC03NSw3ICs3NSw3IEBACiAJc2VsZWN0IENSQ19DQ0lUVAogCXNlbGVjdCBFRVBST01fOTNDWDYKIAktLS1oZWxwLS0tCi0JICBUaGlzIGFkZHMgc3VwcG9ydCBmb3IgcnQyODAwIHdpcmVsZXNzIGNoaXBzZXQgZmFtaWx5LgorCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIHJ0MjgwMC9ydDMwMDAvcnQzNTAwIHdpcmVsZXNzIGNoaXBzZXQgZmFtaWx5LgogCSAgU3VwcG9ydGVkIGNoaXBzOiBSVDI3NjAsIFJUMjc5MCwgUlQyODYwLCBSVDI4ODAsIFJUMjg5MCAmIFJUMzA1MgogCiAJICBUaGlzIGRyaXZlciBpcyBub24tZnVuY3Rpb25hbCBhdCB0aGUgbW9tZW50IGFuZCBpcyBpbnRlbmRlZCBmb3IKQEAgLTgzLDYgKzgzLDMyIEBACiAKIAkgIFdoZW4gY29tcGlsZWQgYXMgYSBtb2R1bGUsIHRoaXMgZHJpdmVyIHdpbGwgYmUgY2FsbGVkICJydDI4MDBwY2kua28iLgogCitpZiBSVDI4MDBQQ0kKKworY29uZmlnIFJUMjgwMFBDSV9SVDMwWFgKKwlib29sICJydDI4MDBwY2kgLSBJbmNsdWRlIHN1cHBvcnQgZm9yIHJ0MzB4eCAoUENJL1BDSWUvUENNQ0lBKSBkZXZpY2VzIgorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBydDMweHggd2lyZWxlc3MgY2hpcHNldCBmYW1pbHkgdG8gdGhlCisJICBydDI4MDBwY2kgZHJpdmVyLgorCSAgU3VwcG9ydGVkIGNoaXBzOiBSVDMwOTAsIFJUMzA5MSAmIFJUMzA5MgorCisJICBTdXBwb3J0IGZvciB0aGVzZSBkZXZpY2VzIGlzIG5vbi1mdW5jdGlvbmFsIGF0IHRoZSBtb21lbnQgYW5kIGlzCisJICBpbnRlbmRlZCBmb3IgdGVzdGVycyBhbmQgZGV2ZWxvcGVycy4KKworY29uZmlnIFJUMjgwMFBDSV9SVDM1WFgKKwlib29sICJydDI4MDBwY2kgLSBJbmNsdWRlIHN1cHBvcnQgZm9yIHJ0MzV4eCAoUENJL1BDSWUvUENNQ0lBKSBkZXZpY2VzIgorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBydDM1eHggd2lyZWxlc3MgY2hpcHNldCBmYW1pbHkgdG8gdGhlCisJICBydDI4MDBwY2kgZHJpdmVyLgorCSAgU3VwcG9ydGVkIGNoaXBzOiBSVDMwNjAsIFJUMzA2MiwgUlQzNTYyLCBSVDM1OTIKKworCSAgU3VwcG9ydCBmb3IgdGhlc2UgZGV2aWNlcyBpcyBub24tZnVuY3Rpb25hbCBhdCB0aGUgbW9tZW50IGFuZCBpcworCSAgaW50ZW5kZWQgZm9yIHRlc3RlcnMgYW5kIGRldmVsb3BlcnMuCisKK2VuZGlmCisKIGNvbmZpZyBSVDI1MDBVU0IKIAl0cmlzdGF0ZSAiUmFsaW5rIHJ0MjUwMCAoVVNCKSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCCkBAIC0xMjYsNiArMTUyLDQzIEBACiAKIAkgIFdoZW4gY29tcGlsZWQgYXMgYSBtb2R1bGUsIHRoaXMgZHJpdmVyIHdpbGwgYmUgY2FsbGVkICJydDI4MDB1c2Iua28iLgogCitpZiBSVDI4MDBVU0IKKworY29uZmlnIFJUMjgwMFVTQl9SVDMwWFgKKwlib29sICJydDI4MDB1c2IgLSBJbmNsdWRlIHN1cHBvcnQgZm9yIHJ0MzB4eCAoVVNCKSBkZXZpY2VzIgorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBydDMweHggd2lyZWxlc3MgY2hpcHNldCBmYW1pbHkgdG8gdGhlCisJICBydDI4MDB1c2IgZHJpdmVyLgorCSAgU3VwcG9ydGVkIGNoaXBzOiBSVDMwNzAsIFJUMzA3MSAmIFJUMzA3MgorCisJICBTdXBwb3J0IGZvciB0aGVzZSBkZXZpY2VzIGlzIG5vbi1mdW5jdGlvbmFsIGF0IHRoZSBtb21lbnQgYW5kIGlzCisJICBpbnRlbmRlZCBmb3IgdGVzdGVycyBhbmQgZGV2ZWxvcGVycy4KKworY29uZmlnIFJUMjgwMFVTQl9SVDM1WFgKKwlib29sICJydDI4MDB1c2IgLSBJbmNsdWRlIHN1cHBvcnQgZm9yIHJ0MzV4eCAoVVNCKSBkZXZpY2VzIgorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBydDM1eHggd2lyZWxlc3MgY2hpcHNldCBmYW1pbHkgdG8gdGhlCisJICBydDI4MDB1c2IgZHJpdmVyLgorCSAgU3VwcG9ydGVkIGNoaXBzOiBSVDM1NzIKKworCSAgU3VwcG9ydCBmb3IgdGhlc2UgZGV2aWNlcyBpcyBub24tZnVuY3Rpb25hbCBhdCB0aGUgbW9tZW50IGFuZCBpcworCSAgaW50ZW5kZWQgZm9yIHRlc3RlcnMgYW5kIGRldmVsb3BlcnMuCisKK2NvbmZpZyBSVDI4MDBVU0JfVU5LTk9XTgorCWJvb2wgInJ0MjgwMHVzYiAtIEluY2x1ZGUgc3VwcG9ydCBmb3IgdW5rbm93biAoVVNCKSBkZXZpY2VzIgorCWRlZmF1bHQgbgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBydDI4MDAgZmFtaWx5IGRldmljZXMgdGhhdCBhcmUga25vd24gdG8KKwkgIGhhdmUgYSBydDI4MDAgZmFtaWx5IGNoaXBzZXQsIGJ1dCBmb3Igd2hpY2ggdGhlIGV4YWN0IGNoaXBzZXQKKwkgIGlzIHVua25vd24uCisKKwkgIFN1cHBvcnQgc3RhdHVzIGZvciB0aGVzZSBkZXZpY2VzIGlzIHVua25vd24sIGFuZCBlbmFibGluZyB0aGVzZQorCSAgZGV2aWNlcyBtYXkgb3IgbWF5IG5vdCB3b3JrLgorCitlbmRpZgorCiBjb25maWcgUlQyODAwX0xJQgogCXRyaXN0YXRlCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuYwppbmRleCBlN2Y0NjQwLi5jMjJiMDQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5jCkBAIC00NTEsNyArNDUxLDcgQEAKIAkvKgogCSAqIFJGMjQyMCBjaGlwc2V0IGRvbid0IG5lZWQgYW55IGFkZGl0aW9uYWwgYWN0aW9ucy4KIAkgKi8KLQlpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjQyMCkpCisJaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjQyMCkpCiAJCXJldHVybjsKIAogCS8qCkBAIC0xMzQwLDExICsxMzQwLDEwIEBACiAJICovCiAJdmFsdWUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9SRl9UWVBFKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIENTUjAsICZyZWcpOwotCXJ0MngwMF9zZXRfY2hpcF9yZihydDJ4MDBkZXYsIHZhbHVlLCByZWcpOwotCXJ0MngwMF9wcmludF9jaGlwKHJ0MngwMGRldik7CisJcnQyeDAwX3NldF9jaGlwKHJ0MngwMGRldiwgUlQyNDYwLCB2YWx1ZSwKKwkJCXJ0MngwMF9nZXRfZmllbGQzMihyZWcsIENTUjBfUkVWSVNJT04pKTsKIAotCWlmICghcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjQyMCkgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI0MjEpKSB7CisJaWYgKCFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI0MjApICYmICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI0MjEpKSB7CiAJCUVSUk9SKHJ0MngwMGRldiwgIkludmFsaWQgUkYgY2hpcHNldCBkZXRlY3RlZC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0xNTYyLDcgKzE1NjEsNiBAQAogCS5nZXRfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF9zdGF0cywKIAkuYnNzX2luZm9fY2hhbmdlZAk9IHJ0MngwMG1hY19ic3NfaW5mb19jaGFuZ2VkLAogCS5jb25mX3R4CQk9IHJ0MjQwMHBjaV9jb25mX3R4LAotCS5nZXRfdHhfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF90eF9zdGF0cywKIAkuZ2V0X3RzZgkJPSBydDI0MDBwY2lfZ2V0X3RzZiwKIAkudHhfbGFzdF9iZWFjb24JCT0gcnQyNDAwcGNpX3R4X2xhc3RfYmVhY29uLAogCS5yZmtpbGxfcG9sbAkJPSBydDJ4MDBtYWNfcmZraWxsX3BvbGwsCkBAIC0xNjQzLDcgKzE2NDEsNyBAQAogLyoKICAqIFJUMjQwMHBjaSBtb2R1bGUgaW5mb3JtYXRpb24uCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydDI0MDBwY2lfZGV2aWNlX3RhYmxlW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocnQyNDAwcGNpX2RldmljZV90YWJsZSkgPSB7CiAJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgwMTAxKSwgUENJX0RFVklDRV9EQVRBKCZydDI0MDBwY2lfb3BzKSB9LAogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI0MDBwY2kuaAppbmRleCBjM2RlYTY5Li5jMDQ4YjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNDAwcGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjQwMHBjaS5oCkBAIC02NSw2ICs2NSw3IEBACiAgKiBDU1IwOiBBU0lDIHJldmlzaW9uIG51bWJlci4KICAqLwogI2RlZmluZSBDU1IwCQkJCTB4MDAwMAorI2RlZmluZSBDU1IwX1JFVklTSU9OCQkJRklFTEQzMigweDAwMDBmZmZmKQogCiAvKgogICogQ1NSMTogU3lzdGVtIGNvbnRyb2wgcmVnaXN0ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmMKaW5kZXggNDA4ZmNmYy4uNTJiYmNmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuYwpAQCAtNDQwLDggKzQ0MCw3IEBACiAJLyoKIAkgKiBSVDI1MjVFIGFuZCBSVDUyMjIgbmVlZCB0byBmbGlwIFRYIEkvUQogCSAqLwotCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI1RSkgfHwKLQkgICAgcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGNTIyMikpIHsKKwlpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI1RSkgfHwgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjIyKSkgewogCQlydDJ4MDBfc2V0X2ZpZWxkOCgmcjIsIEJCUF9SMl9UWF9JUV9GTElQLCAxKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJCUENTUjFfQ0NLX0ZMSVAsIDEpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkJQQ1NSMV9PRkRNX0ZMSVAsIDEpOwpAQCAtNDQ5LDcgKzQ0OCw3IEBACiAJCS8qCiAJCSAqIFJUMjUyNUUgZG9lcyBub3QgbmVlZCBSWCBJL1EgRmxpcC4KIAkJICovCi0JCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI1RSkpCisJCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjVFKSkKIAkJCXJ0MngwMF9zZXRfZmllbGQ4KCZyMTQsIEJCUF9SMTRfUlhfSVFfRkxJUCwgMCk7CiAJfSBlbHNlIHsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJCUENTUjFfQ0NLX0ZMSVAsIDApOwpAQCAtNDc1LDE0ICs0NzQsMTQgQEAKIAkgKiBTd2l0Y2ggb24gdHVuaW5nIGJpdHMuCiAJICogRm9yIFJUMjUyMyBkZXZpY2VzIHdlIGRvIG5vdCBuZWVkIHRvIHVwZGF0ZSB0aGUgUjEgcmVnaXN0ZXIuCiAJICovCi0JaWYgKCFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTIzKSkKKwlpZiAoIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyMykpCiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmYtPnJmMSwgUkYxX1RVTkVSLCAxKTsKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJmLT5yZjMsIFJGM19UVU5FUiwgMSk7CiAKIAkvKgogCSAqIEZvciBSVDI1MjUgd2Ugc2hvdWxkIGZpcnN0IHNldCB0aGUgY2hhbm5lbCB0byBoYWxmIGJhbmQgaGlnaGVyLgogCSAqLwotCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI1KSkgeworCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjUpKSB7CiAJCXN0YXRpYyBjb25zdCB1MzIgdmFsc1tdID0gewogCQkJMHgwMDA4MGNiZSwgMHgwMDA4MGQwMiwgMHgwMDA4MGQwNiwgMHgwMDA4MGQwYSwKIAkJCTB4MDAwODBkMGUsIDB4MDAwODBkMTIsIDB4MDAwODBkMTYsIDB4MDAwODBkMWEsCkBAIC01MTYsNyArNTE1LDcgQEAKIAkgKiBTd2l0Y2ggb2ZmIHR1bmluZyBiaXRzLgogCSAqIEZvciBSVDI1MjMgZGV2aWNlcyB3ZSBkbyBub3QgbmVlZCB0byB1cGRhdGUgdGhlIFIxIHJlZ2lzdGVyLgogCSAqLwotCWlmICghcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyMykpIHsKKwlpZiAoIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyMykpIHsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZi0+cmYxLCBSRjFfVFVORVIsIDApOwogCQlydDI1MDBwY2lfcmZfd3JpdGUocnQyeDAwZGV2LCAxLCByZi0+cmYxKTsKIAl9CkBAIC02NDAsNyArNjM5LDcgQEAKIAkgKiB1cCB0byB2ZXJzaW9uIEMgdGhlIGxpbmsgdHVuaW5nIHNob3VsZCBoYWx0IGFmdGVyIDIwCiAJICogc2Vjb25kcyB3aGlsZSBiZWluZyBhc3NvY2lhdGVkLgogCSAqLwotCWlmIChydDJ4MDBfcmV2KCZydDJ4MDBkZXYtPmNoaXApIDwgUlQyNTYwX1ZFUlNJT05fRCAmJgorCWlmIChydDJ4MDBfcmV2KHJ0MngwMGRldikgPCBSVDI1NjBfVkVSU0lPTl9EICYmCiAJICAgIHJ0MngwMGRldi0+aW50Zl9hc3NvY2lhdGVkICYmIGNvdW50ID4gMjApCiAJCXJldHVybjsKIApAQCAtNjUwLDcgKzY0OSw3IEBACiAJICogc2hvdWxkIGdvIHN0cmFpZ2h0IHRvIGR5bmFtaWMgQ0NBIHR1bmluZyB3aGVuIHRoZXkKIAkgKiBhcmUgbm90IGFzc29jaWF0ZWQuCiAJICovCi0JaWYgKHJ0MngwMF9yZXYoJnJ0MngwMGRldi0+Y2hpcCkgPCBSVDI1NjBfVkVSU0lPTl9EIHx8CisJaWYgKHJ0MngwMF9yZXYocnQyeDAwZGV2KSA8IFJUMjU2MF9WRVJTSU9OX0QgfHwKIAkgICAgIXJ0MngwMGRldi0+aW50Zl9hc3NvY2lhdGVkKQogCQlnb3RvIGR5bmFtaWNfY2NhX3R1bmU7CiAKQEAgLTE1MDQsMTUgKzE1MDMsMTUgQEAKIAkgKi8KIAl2YWx1ZSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX1JGX1RZUEUpOwogCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgQ1NSMCwgJnJlZyk7Ci0JcnQyeDAwX3NldF9jaGlwX3JmKHJ0MngwMGRldiwgdmFsdWUsIHJlZyk7Ci0JcnQyeDAwX3ByaW50X2NoaXAocnQyeDAwZGV2KTsKKwlydDJ4MDBfc2V0X2NoaXAocnQyeDAwZGV2LCBSVDI1NjAsIHZhbHVlLAorCQkJcnQyeDAwX2dldF9maWVsZDMyKHJlZywgQ1NSMF9SRVZJU0lPTikpOwogCi0JaWYgKCFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTIyKSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyMykgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjQpICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI1KSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNUUpICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjIyKSkgeworCWlmICghcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTIyKSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTIzKSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI0KSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI1KSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI1RSkgJiYKKwkgICAgIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTIyMikpIHsKIAkJRVJST1IocnQyeDAwZGV2LCAiSW52YWxpZCBSRiBjaGlwc2V0IGRldGVjdGVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTE3NDQsMjIgKzE3NDMsMjIgQEAKIAlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgPSBTVVBQT1JUX0JBTkRfMkdIWjsKIAlzcGVjLT5zdXBwb3J0ZWRfcmF0ZXMgPSBTVVBQT1JUX1JBVEVfQ0NLIHwgU1VQUE9SVF9SQVRFX09GRE07CiAKLQlpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyMikpIHsKKwlpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTIyKSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJmX3ZhbHNfYmdfMjUyMik7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc19iZ18yNTIyOwotCX0gZWxzZSBpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyMykpIHsKKwl9IGVsc2UgaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyMykpIHsKIAkJc3BlYy0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShyZl92YWxzX2JnXzI1MjMpOwogCQlzcGVjLT5jaGFubmVscyA9IHJmX3ZhbHNfYmdfMjUyMzsKLQl9IGVsc2UgaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjQpKSB7CisJfSBlbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjQpKSB7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc19iZ18yNTI0KTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzX2JnXzI1MjQ7Ci0JfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI1KSkgeworCX0gZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI1KSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJmX3ZhbHNfYmdfMjUyNSk7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc19iZ18yNTI1OwotCX0gZWxzZSBpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNUUpKSB7CisJfSBlbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjVFKSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJmX3ZhbHNfYmdfMjUyNWUpOwogCQlzcGVjLT5jaGFubmVscyA9IHJmX3ZhbHNfYmdfMjUyNWU7Ci0JfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjIyKSkgeworCX0gZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjIyKSkgewogCQlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgfD0gU1VQUE9SVF9CQU5EXzVHSFo7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc181MjIyKTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzXzUyMjI7CkBAIC0xODYwLDcgKzE4NTksNiBAQAogCS5nZXRfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF9zdGF0cywKIAkuYnNzX2luZm9fY2hhbmdlZAk9IHJ0MngwMG1hY19ic3NfaW5mb19jaGFuZ2VkLAogCS5jb25mX3R4CQk9IHJ0MngwMG1hY19jb25mX3R4LAotCS5nZXRfdHhfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF90eF9zdGF0cywKIAkuZ2V0X3RzZgkJPSBydDI1MDBwY2lfZ2V0X3RzZiwKIAkudHhfbGFzdF9iZWFjb24JCT0gcnQyNTAwcGNpX3R4X2xhc3RfYmVhY29uLAogCS5yZmtpbGxfcG9sbAkJPSBydDJ4MDBtYWNfcmZraWxsX3BvbGwsCkBAIC0xOTQxLDcgKzE5MzksNyBAQAogLyoKICAqIFJUMjUwMHBjaSBtb2R1bGUgaW5mb3JtYXRpb24uCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydDI1MDBwY2lfZGV2aWNlX3RhYmxlW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocnQyNTAwcGNpX2RldmljZV90YWJsZSkgPSB7CiAJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgwMjAxKSwgUENJX0RFVklDRV9EQVRBKCZydDI1MDBwY2lfb3BzKSB9LAogCXsgMCwgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDBwY2kuaAppbmRleCBjNmJkMWZjLi5kNzA4MDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwcGNpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHBjaS5oCkBAIC03Niw2ICs3Niw3IEBACiAgKiBDU1IwOiBBU0lDIHJldmlzaW9uIG51bWJlci4KICAqLwogI2RlZmluZSBDU1IwCQkJCTB4MDAwMAorI2RlZmluZSBDU1IwX1JFVklTSU9OCQkJRklFTEQzMigweDAwMDBmZmZmKQogCiAvKgogICogQ1NSMTogU3lzdGVtIGNvbnRyb2wgcmVnaXN0ZXIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyNTAwdXNiLmMKaW5kZXggODNmMjU5Mi4uOWIwNDk2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjUwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI1MDB1c2IuYwpAQCAtMzY4LDcgKzM2OCw3IEBACiAKIAkJLyoKIAkJICogVGhlIGVuY3J5cHRpb24ga2V5IGRvZXNuJ3QgZml0IHdpdGhpbiB0aGUgQ1NSIGNhY2hlLAotCQkgKiB0aGlzIG1lYW5zIHdlIHNob3VsZCBhbGxvY2F0ZSBpdCBzZXBlcmF0ZWx5IGFuZCB1c2UKKwkJICogdGhpcyBtZWFucyB3ZSBzaG91bGQgYWxsb2NhdGUgaXQgc2VwYXJhdGVseSBhbmQgdXNlCiAJCSAqIHJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdCgpIHRvIHNlbmQgdGhlIGtleSB0byB0aGUgaGFyZHdhcmUuCiAJCSAqLwogCQlyZWcgPSBLRVlfRU5UUlkoa2V5LT5od19rZXlfaWR4KTsKQEAgLTM4Miw3ICszODIsNyBAQAogCQkvKgogCQkgKiBUaGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIElWL0VJViBnZW5lcmF0aW9uCiAJCSAqIGluIGhhcmR3YXJlLiBIb3dldmVyIGl0IGRlbWFuZHMgdGhlIGRhdGEgdG8gYmUgcHJvdmlkZWQKLQkJICogYm90aCBzZXBlcmF0ZWx5IGFzIHdlbGwgYXMgaW5zaWRlIHRoZSBmcmFtZS4KKwkJICogYm90aCBzZXBhcmF0ZWx5IGFzIHdlbGwgYXMgaW5zaWRlIHRoZSBmcmFtZS4KIAkJICogV2UgYWxyZWFkeSBwcm92aWRlZCB0aGUgQ09ORklHX0NSWVBUT19DT1BZX0lWIHRvIHJ0MngwMGxpYgogCQkgKiB0byBlbnN1cmUgcnQyeDAwbGliIHdpbGwgbm90IHN0cmlwIHRoZSBkYXRhIGZyb20gdGhlCiAJCSAqIGZyYW1lIGFmdGVyIHRoZSBjb3B5LCBub3cgd2UgbXVzdCB0ZWxsIG1hYzgwMjExCkBAIC01NjUsOCArNTY1LDcgQEAKIAkvKgogCSAqIFJUMjUyNUUgYW5kIFJUNTIyMiBuZWVkIHRvIGZsaXAgVFggSS9RCiAJICovCi0JaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjVFKSB8fAotCSAgICBydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjIyKSkgeworCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjVFKSB8fCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUyMjIpKSB7CiAJCXJ0MngwMF9zZXRfZmllbGQ4KCZyMiwgQkJQX1IyX1RYX0lRX0ZMSVAsIDEpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJmNzcjUsIFBIWV9DU1I1X0NDS19GTElQLCAxKTsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZjc3I2LCBQSFlfQ1NSNl9PRkRNX0ZMSVAsIDEpOwpAQCAtNTc0LDcgKzU3Myw3IEBACiAJCS8qCiAJCSAqIFJUMjUyNUUgZG9lcyBub3QgbmVlZCBSWCBJL1EgRmxpcC4KIAkJICovCi0JCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI1RSkpCisJCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjVFKSkKIAkJCXJ0MngwMF9zZXRfZmllbGQ4KCZyMTQsIEJCUF9SMTRfUlhfSVFfRkxJUCwgMCk7CiAJfSBlbHNlIHsKIAkJcnQyeDAwX3NldF9maWVsZDE2KCZjc3I1LCBQSFlfQ1NSNV9DQ0tfRkxJUCwgMCk7CkBAIC01OTgsNyArNTk3LDcgQEAKIAkvKgogCSAqIEZvciBSVDI1MjVFIHdlIHNob3VsZCBmaXJzdCBzZXQgdGhlIGNoYW5uZWwgdG8gaGFsZiBiYW5kIGhpZ2hlci4KIAkgKi8KLQlpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNUUpKSB7CisJaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyNUUpKSB7CiAJCXN0YXRpYyBjb25zdCB1MzIgdmFsc1tdID0gewogCQkJMHgwMDAwMDhhYSwgMHgwMDAwMDhhZSwgMHgwMDAwMDhhZSwgMHgwMDAwMDhiMiwKIAkJCTB4MDAwMDA4YjIsIDB4MDAwMDA4YjYsIDB4MDAwMDA4YjYsIDB4MDAwMDA4YmEsCkBAIC03OTMsNyArNzkyLDcgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgTUFDX0NTUjFfSE9TVF9SRUFEWSwgMSk7CiAJcnQyNTAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX0NTUjEsIHJlZyk7CiAKLQlpZiAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA+PSBSVDI1NzBfVkVSU0lPTl9DKSB7CisJaWYgKHJ0MngwMF9yZXYocnQyeDAwZGV2KSA+PSBSVDI1NzBfVkVSU0lPTl9DKSB7CiAJCXJ0MjUwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgUEhZX0NTUjIsICZyZWcpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJnJlZywgUEhZX0NTUjJfTE5BLCAwKTsKIAl9IGVsc2UgewpAQCAtMTQwOSwyMSArMTQwOCwxOCBAQAogCXZhbHVlID0gcnQyeDAwX2dldF9maWVsZDE2KGVlcHJvbSwgRUVQUk9NX0FOVEVOTkFfUkZfVFlQRSk7CiAJcnQyNTAwdXNiX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfQ1NSMCwgJnJlZyk7CiAJcnQyeDAwX3NldF9jaGlwKHJ0MngwMGRldiwgUlQyNTcwLCB2YWx1ZSwgcmVnKTsKLQlydDJ4MDBfcHJpbnRfY2hpcChydDJ4MDBkZXYpOwogCi0JaWYgKCFydDJ4MDBfY2hlY2tfcmV2KCZydDJ4MDBkZXYtPmNoaXAsIDB4MDAwZmZmZjAsIDApIHx8Ci0JICAgIHJ0MngwMF9jaGVja19yZXYoJnJ0MngwMGRldi0+Y2hpcCwgMHgwMDAwMDAwZiwgMCkpIHsKLQorCWlmICgoKHJlZyAmIDB4ZmZmMCkgIT0gMCkgfHwgKChyZWcgJiAweDAwMDAwMDBmKSA9PSAwKSkgewogCQlFUlJPUihydDJ4MDBkZXYsICJJbnZhbGlkIFJUIGNoaXBzZXQgZGV0ZWN0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKCFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTIyKSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyMykgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjQpICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI1KSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNUUpICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjIyKSkgeworCWlmICghcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTIyKSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTIzKSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI0KSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI1KSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI1RSkgJiYKKwkgICAgIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTIyMikpIHsKIAkJRVJST1IocnQyeDAwZGV2LCAiSW52YWxpZCBSRiBjaGlwc2V0IGRldGVjdGVkLlxuIik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTE2NjcsMjIgKzE2NjMsMjIgQEAKIAlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgPSBTVVBQT1JUX0JBTkRfMkdIWjsKIAlzcGVjLT5zdXBwb3J0ZWRfcmF0ZXMgPSBTVVBQT1JUX1JBVEVfQ0NLIHwgU1VQUE9SVF9SQVRFX09GRE07CiAKLQlpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyMikpIHsKKwlpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTIyKSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJmX3ZhbHNfYmdfMjUyMik7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc19iZ18yNTIyOwotCX0gZWxzZSBpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyMykpIHsKKwl9IGVsc2UgaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyMykpIHsKIAkJc3BlYy0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShyZl92YWxzX2JnXzI1MjMpOwogCQlzcGVjLT5jaGFubmVscyA9IHJmX3ZhbHNfYmdfMjUyMzsKLQl9IGVsc2UgaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjQpKSB7CisJfSBlbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjQpKSB7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc19iZ18yNTI0KTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzX2JnXzI1MjQ7Ci0JfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI1KSkgeworCX0gZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI1KSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJmX3ZhbHNfYmdfMjUyNSk7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc19iZ18yNTI1OwotCX0gZWxzZSBpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNUUpKSB7CisJfSBlbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjVFKSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSBBUlJBWV9TSVpFKHJmX3ZhbHNfYmdfMjUyNWUpOwogCQlzcGVjLT5jaGFubmVscyA9IHJmX3ZhbHNfYmdfMjUyNWU7Ci0JfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjIyKSkgeworCX0gZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjIyKSkgewogCQlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgfD0gU1VQUE9SVF9CQU5EXzVHSFo7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc181MjIyKTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzXzUyMjI7CkBAIC0xNzYzLDcgKzE3NTksNiBAQAogCS5nZXRfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF9zdGF0cywKIAkuYnNzX2luZm9fY2hhbmdlZAk9IHJ0MngwMG1hY19ic3NfaW5mb19jaGFuZ2VkLAogCS5jb25mX3R4CQk9IHJ0MngwMG1hY19jb25mX3R4LAotCS5nZXRfdHhfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF90eF9zdGF0cywKIAkucmZraWxsX3BvbGwJCT0gcnQyeDAwbWFjX3Jma2lsbF9wb2xsLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMC5oCmluZGV4IDFhN2VhZTMuLjc0YzA0MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDAuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwLmgKQEAgLTYwLDExICs2MCwxMSBAQAogLyoKICAqIENoaXBzZXQgdmVyc2lvbi4KICAqLwotI2RlZmluZSBSVDI4NjBDX1ZFUlNJT04JCQkweDI4NjAwMTAwCi0jZGVmaW5lIFJUMjg2MERfVkVSU0lPTgkJCTB4Mjg2MDAxMDEKLSNkZWZpbmUgUlQyODgwRV9WRVJTSU9OCQkJMHgyODcyMDIwMAotI2RlZmluZSBSVDI4ODNfVkVSU0lPTgkJCTB4Mjg4MzAzMDAKLSNkZWZpbmUgUlQzMDcwX1ZFUlNJT04JCQkweDMwNzAwMjAwCisjZGVmaW5lIFJUMjg2MENfVkVSU0lPTgkJCTB4MDEwMAorI2RlZmluZSBSVDI4NjBEX1ZFUlNJT04JCQkweDAxMDEKKyNkZWZpbmUgUlQyODgwRV9WRVJTSU9OCQkJMHgwMjAwCisjZGVmaW5lIFJUMjg4M19WRVJTSU9OCQkJMHgwMzAwCisjZGVmaW5lIFJUMzA3MF9WRVJTSU9OCQkJMHgwMjAwCiAKIC8qCiAgKiBTaWduYWwgaW5mb3JtYXRpb24uCkBAIC00MDgsOCArNDA4LDggQEAKICAqIEFTSUNfVkVSOiAyODYwIG9yIDI4NzAKICAqLwogI2RlZmluZSBNQUNfQ1NSMAkJCTB4MTAwMAotI2RlZmluZSBNQUNfQ1NSMF9BU0lDX1JFVgkJRklFTEQzMigweDAwMDBmZmZmKQotI2RlZmluZSBNQUNfQ1NSMF9BU0lDX1ZFUgkJRklFTEQzMigweGZmZmYwMDAwKQorI2RlZmluZSBNQUNfQ1NSMF9SRVZJU0lPTgkJRklFTEQzMigweDAwMDBmZmZmKQorI2RlZmluZSBNQUNfQ1NSMF9DSElQU0VUCQlGSUVMRDMyKDB4ZmZmZjAwMDApCiAKIC8qCiAgKiBNQUNfU1lTX0NUUkw6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmMKaW5kZXggOWRlYWU0MS4uMThkNGQ4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuYwpAQCAtMzcsOSArMzcsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgInJ0MngwMC5oIgotI2lmIGRlZmluZWQoQ09ORklHX1JUMjgwMFVTQikgfHwgZGVmaW5lZChDT05GSUdfUlQyODAwVVNCX01PRFVMRSkKKyNpZiBkZWZpbmVkKENPTkZJR19SVDJYMDBfTElCX1VTQikgfHwgZGVmaW5lZChDT05GSUdfUlQyWDAwX0xJQl9VU0JfTU9EVUxFKQogI2luY2x1ZGUgInJ0MngwMHVzYi5oIgogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfUlQyWDAwX0xJQl9QQ0kpIHx8IGRlZmluZWQoQ09ORklHX1JUMlgwMF9MSUJfUENJX01PRFVMRSkKKyNpbmNsdWRlICJydDJ4MDBwY2kuaCIKKyNlbmRpZgogI2luY2x1ZGUgInJ0MjgwMGxpYi5oIgogI2luY2x1ZGUgInJ0MjgwMC5oIgogI2luY2x1ZGUgInJ0MjgwMHVzYi5oIgpAQCAtODksNyArOTIsNyBAQAogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkJQX0NTUl9DRkdfUkVHTlVNLCB3b3JkKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJCUF9DU1JfQ0ZHX0JVU1ksIDEpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkJQX0NTUl9DRkdfUkVBRF9DT05UUk9MLCAwKTsKLQkJaWYgKHJ0MngwMF9pbnRmX2lzX3BjaShydDJ4MDBkZXYpKQorCQlpZiAocnQyeDAwX2lzX3BjaShydDJ4MDBkZXYpIHx8IHJ0MngwMF9pc19zb2MocnQyeDAwZGV2KSkKIAkJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQlBfQ1NSX0NGR19CQlBfUldfTU9ERSwgMSk7CiAKIAkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlX2xvY2socnQyeDAwZGV2LCBCQlBfQ1NSX0NGRywgcmVnKTsKQEAgLTExOCw3ICsxMjEsNyBAQAogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkJQX0NTUl9DRkdfUkVHTlVNLCB3b3JkKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIEJCUF9DU1JfQ0ZHX0JVU1ksIDEpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkJQX0NTUl9DRkdfUkVBRF9DT05UUk9MLCAxKTsKLQkJaWYgKHJ0MngwMF9pbnRmX2lzX3BjaShydDJ4MDBkZXYpKQorCQlpZiAocnQyeDAwX2lzX3BjaShydDJ4MDBkZXYpIHx8IHJ0MngwMF9pc19zb2MocnQyeDAwZGV2KSkKIAkJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBCQlBfQ1NSX0NGR19CQlBfUldfTU9ERSwgMSk7CiAKIAkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlX2xvY2socnQyeDAwZGV2LCBCQlBfQ1NSX0NGRywgcmVnKTsKQEAgLTIxOCwxMCArMjIxLDkgQEAKIAl1MzIgcmVnOwogCiAJLyoKLQkgKiBSVDI4ODAgYW5kIFJUMzA1MiBkb24ndCBzdXBwb3J0IE1DVSByZXF1ZXN0cy4KKwkgKiBTT0MgZGV2aWNlcyBkb24ndCBzdXBwb3J0IE1DVSByZXF1ZXN0cy4KIAkgKi8KLQlpZiAocnQyeDAwX3J0KCZydDJ4MDBkZXYtPmNoaXAsIFJUMjg4MCkgfHwKLQkgICAgcnQyeDAwX3J0KCZydDJ4MDBkZXYtPmNoaXAsIFJUMzA1MikpCisJaWYgKHJ0MngwMF9pc19zb2MocnQyeDAwZGV2KSkKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmcnQyeDAwZGV2LT5jc3JfbXV0ZXgpOwpAQCAtMjQ2LDYgKzI0OCwyNSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyODAwX21jdV9yZXF1ZXN0KTsKIAoraW50IHJ0MjgwMF93YWl0X3dwZG1hX3JlYWR5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCit7CisJdW5zaWduZWQgaW50IGk7CisJdTMyIHJlZzsKKworCWZvciAoaSA9IDA7IGkgPCBSRUdJU1RFUl9CVVNZX0NPVU5UOyBpKyspIHsKKwkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBXUERNQV9HTE9fQ0ZHLCAmcmVnKTsKKwkJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBXUERNQV9HTE9fQ0ZHX1RYX0RNQV9CVVNZKSAmJgorCQkgICAgIXJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFdQRE1BX0dMT19DRkdfUlhfRE1BX0JVU1kpKQorCQkJcmV0dXJuIDA7CisKKwkJbXNsZWVwKDEpOworCX0KKworCUVSUk9SKHJ0MngwMGRldiwgIldQRE1BIFRYL1JYIGJ1c3ksIGFib3J0aW5nLlxuIik7CisJcmV0dXJuIC1FQUNDRVM7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChydDI4MDBfd2FpdF93cGRtYV9yZWFkeSk7CisKICNpZmRlZiBDT05GSUdfUlQyWDAwX0xJQl9ERUJVR0ZTCiBjb25zdCBzdHJ1Y3QgcnQyeDAwZGVidWcgcnQyODAwX3J0MngwMGRlYnVnID0gewogCS5vd25lcgk9IFRISVNfTU9EVUxFLApAQCAtMzQ4LDcgKzM2OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgcnQyODAwX2luaXRfbGVkKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCitzdGF0aWMgdm9pZCBydDI4MDBfaW5pdF9sZWQoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJICAgICBzdHJ1Y3QgcnQyeDAwX2xlZCAqbGVkLCBlbnVtIGxlZF90eXBlIHR5cGUpCiB7CiAJbGVkLT5ydDJ4MDBkZXYgPSBydDJ4MDBkZXY7CkBAIC0zNTcsNyArMzc4LDYgQEAKIAlsZWQtPmxlZF9kZXYuYmxpbmtfc2V0ID0gcnQyODAwX2JsaW5rX3NldDsKIAlsZWQtPmZsYWdzID0gTEVEX0lOSVRJQUxJWkVEOwogfQotRVhQT1JUX1NZTUJPTF9HUEwocnQyODAwX2luaXRfbGVkKTsKICNlbmRpZiAvKiBDT05GSUdfUlQyWDAwX0xJQl9MRURTICovCiAKIC8qCkBAIC02NDMsNyArNjYzLDcgQEAKIAlzd2l0Y2ggKChpbnQpYW50LT50eCkgewogCWNhc2UgMToKIAkJcnQyeDAwX3NldF9maWVsZDgoJnIxLCBCQlAxX1RYX0FOVEVOTkEsIDApOwotCQlpZiAocnQyeDAwX2ludGZfaXNfcGNpKHJ0MngwMGRldikpCisJCWlmIChydDJ4MDBfaXNfcGNpKHJ0MngwMGRldikgfHwgcnQyeDAwX2lzX3NvYyhydDJ4MDBkZXYpKQogCQkJcnQyeDAwX3NldF9maWVsZDgoJnIzLCBCQlAzX1JYX0FOVEVOTkEsIDApOwogCQlicmVhazsKIAljYXNlIDI6CkBAIC04MDYsMTIgKzgyNiwxMiBAQAogCXVuc2lnbmVkIGludCB0eF9waW47CiAJdTggYmJwOwogCi0JaWYgKChydDJ4MDBfcnQoJnJ0MngwMGRldi0+Y2hpcCwgUlQzMDcwKSB8fAotCSAgICAgcnQyeDAwX3J0KCZydDJ4MDBkZXYtPmNoaXAsIFJUMzA5MCkpICYmCi0JICAgIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyMDIwKSB8fAotCSAgICAgcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMzAyMCkgfHwKLQkgICAgIHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjMwMjEpIHx8Ci0JICAgICBydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYzMDIyKSkpCisJaWYgKChydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNzApIHx8CisJICAgICBydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwOTApKSAmJgorCSAgICAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyMDIwKSB8fAorCSAgICAgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIwKSB8fAorCSAgICAgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIxKSB8fAorCSAgICAgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIyKSkpCiAJCXJ0MjgwMF9jb25maWdfY2hhbm5lbF9ydDN4KHJ0MngwMGRldiwgY29uZiwgcmYsIGluZm8pOwogCWVsc2UKIAkJcnQyODAwX2NvbmZpZ19jaGFubmVsX3J0MngocnQyeDAwZGV2LCBjb25mLCByZiwgaW5mbyk7CkBAIC04NzgsNyArODk4LDggQEAKIAlydDJ4MDBfc2V0X2ZpZWxkOCgmYmJwLCBCQlAzX0hUNDBfUExVUywgY29uZl9pc19odDQwX3BsdXMoY29uZikpOwogCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCAzLCBiYnApOwogCi0JaWYgKHJ0MngwMF9yZXYoJnJ0MngwMGRldi0+Y2hpcCkgPT0gUlQyODYwQ19WRVJTSU9OKSB7CisJaWYgKHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMjg2MCkgJiYKKwkgICAgKHJ0MngwMF9yZXYocnQyeDAwZGV2KSA9PSBSVDI4NjBDX1ZFUlNJT04pKSB7CiAJCWlmIChjb25mX2lzX2h0NDAoY29uZikpIHsKIAkJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCA2OSwgMHgxYSk7CiAJCQlydDI4MDBfYmJwX3dyaXRlKHJ0MngwMGRldiwgNzAsIDB4MGEpOwpAQCAtMTA0MCw4ICsxMDYxLDkgQEAKIHN0YXRpYyB1OCBydDI4MDBfZ2V0X2RlZmF1bHRfdmdjKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCiB7CiAJaWYgKHJ0MngwMGRldi0+Y3Vycl9iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKLQkJaWYgKHJ0MngwMF9pbnRmX2lzX3VzYihydDJ4MDBkZXYpICYmCi0JCSAgICBydDJ4MDBfcmV2KCZydDJ4MDBkZXYtPmNoaXApID09IFJUMzA3MF9WRVJTSU9OKQorCQlpZiAocnQyeDAwX2lzX3VzYihydDJ4MDBkZXYpICYmCisJCSAgICBydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNzApICYmCisJCSAgICAocnQyeDAwX3JldihydDJ4MDBkZXYpID09IFJUMzA3MF9WRVJTSU9OKSkKIAkJCXJldHVybiAweDFjICsgKDIgKiBydDJ4MDBkZXYtPmxuYV9nYWluKTsKIAkJZWxzZQogCQkJcmV0dXJuIDB4MmUgKyBydDJ4MDBkZXYtPmxuYV9nYWluOwpAQCAtMTA3Miw3ICsxMDk0LDggQEAKIHZvaWQgcnQyODAwX2xpbmtfdHVuZXIoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgc3RydWN0IGxpbmtfcXVhbCAqcXVhbCwKIAkJICAgICAgIGNvbnN0IHUzMiBjb3VudCkKIHsKLQlpZiAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA9PSBSVDI4NjBDX1ZFUlNJT04pCisJaWYgKHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMjg2MCkgJiYKKwkgICAgKHJ0MngwMF9yZXYocnQyeDAwZGV2KSA9PSBSVDI4NjBDX1ZFUlNJT04pKQogCQlyZXR1cm47CiAKIAkvKgpAQCAtMTA5Miw3ICsxMTE1LDcgQEAKIAl1MzIgcmVnOwogCXVuc2lnbmVkIGludCBpOwogCi0JaWYgKHJ0MngwMF9pbnRmX2lzX3VzYihydDJ4MDBkZXYpKSB7CisJaWYgKHJ0MngwMF9pc191c2IocnQyeDAwZGV2KSkgewogCQkvKgogCQkgKiBXYWl0IHVudGlsIEJCUCBhbmQgUkYgYXJlIHJlYWR5LgogCQkgKi8KQEAgLTExMTEsNyArMTEzNCw3IEBACiAJCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgUEJGX1NZU19DVFJMLCAmcmVnKTsKIAkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEJGX1NZU19DVFJMLAogCQkJCSAgICAgIHJlZyAmIH4weDAwMDAyMDAwKTsKLQl9IGVsc2UgaWYgKHJ0MngwMF9pbnRmX2lzX3BjaShydDJ4MDBkZXYpKQorCX0gZWxzZSBpZiAocnQyeDAwX2lzX3BjaShydDJ4MDBkZXYpIHx8IHJ0MngwMF9pc19zb2MocnQyeDAwZGV2KSkKIAkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUFdSX1BJTl9DRkcsIDB4MDAwMDAwMDMpOwogCiAJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQUNfU1lTX0NUUkwsICZyZWcpOwpAQCAtMTExOSw5ICsxMTQyLDkgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgTUFDX1NZU19DVFJMX1JFU0VUX0JCUCwgMSk7CiAJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgTUFDX1NZU19DVFJMLCByZWcpOwogCi0JaWYgKHJ0MngwMF9pbnRmX2lzX3VzYihydDJ4MDBkZXYpKSB7CisJaWYgKHJ0MngwMF9pc191c2IocnQyeDAwZGV2KSkgewogCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBVU0JfRE1BX0NGRywgMHgwMDAwMDAwMCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfUlQyODAwVVNCKSB8fCBkZWZpbmVkKENPTkZJR19SVDI4MDBVU0JfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX1JUMlgwMF9MSUJfVVNCKSB8fCBkZWZpbmVkKENPTkZJR19SVDJYMDBfTElCX1VTQl9NT0RVTEUpCiAJCXJ0MngwMHVzYl92ZW5kb3JfcmVxdWVzdF9zdyhydDJ4MDBkZXYsIFVTQl9ERVZJQ0VfTU9ERSwgMCwKIAkJCQkJICAgIFVTQl9NT0RFX1JFU0VULCBSRUdJU1RFUl9USU1FT1VUKTsKICNlbmRpZgpAQCAtMTE1Nyw4ICsxMTgwLDkgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgQkNOX1RJTUVfQ0ZHX1RYX1RJTUVfQ09NUEVOU0FURSwgMCk7CiAJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgQkNOX1RJTUVfQ0ZHLCByZWcpOwogCi0JaWYgKHJ0MngwMF9pbnRmX2lzX3VzYihydDJ4MDBkZXYpICYmCi0JICAgIHJ0MngwMF9yZXYoJnJ0MngwMGRldi0+Y2hpcCkgPT0gUlQzMDcwX1ZFUlNJT04pIHsKKwlpZiAocnQyeDAwX2lzX3VzYihydDJ4MDBkZXYpICYmCisJICAgIHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMzA3MCkgJiYKKwkgICAgKHJ0MngwMF9yZXYocnQyeDAwZGV2KSA9PSBSVDMwNzBfVkVSU0lPTikpIHsKIAkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVFhfU1dfQ0ZHMCwgMHgwMDAwMDQwMCk7CiAJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFRYX1NXX0NGRzEsIDB4MDAwMDAwMDApOwogCQlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9TV19DRkcyLCAweDAwMDAwMDAwKTsKQEAgLTExODUsOCArMTIwOSwxNCBAQAogCiAJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBNQVhfTEVOX0NGRywgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BWF9MRU5fQ0ZHX01BWF9NUERVLCBBR0dSRUdBVElPTl9TSVpFKTsKLQlpZiAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA+PSBSVDI4ODBFX1ZFUlNJT04gJiYKLQkgICAgcnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA8IFJUMzA3MF9WRVJTSU9OKQorCWlmICgocnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODcyKSAmJgorCSAgICAgKHJ0MngwMF9yZXYocnQyeDAwZGV2KSA+PSBSVDI4ODBFX1ZFUlNJT04pKSB8fAorCSAgICBydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4ODApIHx8CisJICAgIHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMjg4MykgfHwKKwkgICAgcnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODkwKSB8fAorCSAgICBydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNTIpIHx8CisJICAgIChydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNzApICYmCisJICAgICAocnQyeDAwX3JldihydDJ4MDBkZXYpIDwgUlQzMDcwX1ZFUlNJT04pKSkKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIE1BWF9MRU5fQ0ZHX01BWF9QU0RVLCAyKTsKIAllbHNlCiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBNQVhfTEVOX0NGR19NQVhfUFNEVSwgMSk7CkBAIC0xMjc2LDcgKzEzMDYsNyBAQAogCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBHRjQwX1BST1RfQ0ZHX1RYX09QX0FMTE9XX0dGNDAsIDEpOwogCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEdGNDBfUFJPVF9DRkcsIHJlZyk7CiAKLQlpZiAocnQyeDAwX2ludGZfaXNfdXNiKHJ0MngwMGRldikpIHsKKwlpZiAocnQyeDAwX2lzX3VzYihydDJ4MDBkZXYpKSB7CiAJCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9DRkcsIDB4ZjQwMDA2KTsKIAogCQlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIFdQRE1BX0dMT19DRkcsICZyZWcpOwpAQCAtMTMzNiw3ICsxMzY2LDcgQEAKIAlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBIV19CRUFDT05fQkFTRTYsIDApOwogCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIEhXX0JFQUNPTl9CQVNFNywgMCk7CiAKLQlpZiAocnQyeDAwX2ludGZfaXNfdXNiKHJ0MngwMGRldikpIHsKKwlpZiAocnQyeDAwX2lzX3VzYihydDJ4MDBkZXYpKSB7CiAJCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgVVNCX0NZQ19DRkcsICZyZWcpOwogCQlydDJ4MDBfc2V0X2ZpZWxkMzIoJnJlZywgVVNCX0NZQ19DRkdfQ0xPQ0tfQ1lDTEUsIDMwKTsKIAkJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgVVNCX0NZQ19DRkcsIHJlZyk7CkBAIC0xNDY1LDIyICsxNDk1LDI1IEBACiAJcnQyODAwX2JicF93cml0ZShydDJ4MDBkZXYsIDEwMywgMHgwMCk7CiAJcnQyODAwX2JicF93cml0ZShydDJ4MDBkZXYsIDEwNSwgMHgwNSk7CiAKLQlpZiAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA9PSBSVDI4NjBDX1ZFUlNJT04pIHsKKwlpZiAocnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODYwKSAmJgorCSAgICAocnQyeDAwX3JldihydDJ4MDBkZXYpID09IFJUMjg2MENfVkVSU0lPTikpIHsKIAkJcnQyODAwX2JicF93cml0ZShydDJ4MDBkZXYsIDY5LCAweDE2KTsKIAkJcnQyODAwX2JicF93cml0ZShydDJ4MDBkZXYsIDczLCAweDEyKTsKIAl9CiAKLQlpZiAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA+IFJUMjg2MERfVkVSU0lPTikKKwlpZiAocnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODYwKSAmJgorCSAgICAocnQyeDAwX3JldihydDJ4MDBkZXYpID4gUlQyODYwRF9WRVJTSU9OKSkKIAkJcnQyODAwX2JicF93cml0ZShydDJ4MDBkZXYsIDg0LCAweDE5KTsKIAotCWlmIChydDJ4MDBfaW50Zl9pc191c2IocnQyeDAwZGV2KSAmJgotCSAgICBydDJ4MDBfcmV2KCZydDJ4MDBkZXYtPmNoaXApID09IFJUMzA3MF9WRVJTSU9OKSB7CisJaWYgKHJ0MngwMF9pc191c2IocnQyeDAwZGV2KSAmJgorCSAgICBydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNzApICYmCisJICAgIChydDJ4MDBfcmV2KHJ0MngwMGRldikgPT0gUlQzMDcwX1ZFUlNJT04pKSB7CiAJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCA3MCwgMHgwYSk7CiAJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCA4NCwgMHg5OSk7CiAJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCAxMDUsIDB4MDUpOwogCX0KIAotCWlmIChydDJ4MDBfcnQoJnJ0MngwMGRldi0+Y2hpcCwgUlQzMDUyKSkgeworCWlmIChydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNTIpKSB7CiAJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCAzMSwgMHgwOCk7CiAJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCA3OCwgMHgwZSk7CiAJCXJ0MjgwMF9iYnBfd3JpdGUocnQyeDAwZGV2LCA4MCwgMHgwOCk7CkBAIC0xNTY1LDE0ICsxNTk4LDE1IEBACiAJdTggcmZjc3I7CiAJdTggYmJwOwogCi0JaWYgKHJ0MngwMF9pbnRmX2lzX3VzYihydDJ4MDBkZXYpICYmCi0JICAgIHJ0MngwMF9yZXYoJnJ0MngwMGRldi0+Y2hpcCkgIT0gUlQzMDcwX1ZFUlNJT04pCisJaWYgKHJ0MngwMF9pc191c2IocnQyeDAwZGV2KSAmJgorCSAgICBydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNzApICYmCisJICAgIChydDJ4MDBfcmV2KHJ0MngwMGRldikgIT0gUlQzMDcwX1ZFUlNJT04pKQogCQlyZXR1cm4gMDsKIAotCWlmIChydDJ4MDBfaW50Zl9pc19wY2kocnQyeDAwZGV2KSkgewotCQlpZiAoIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjMwMjApICYmCi0JCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMzAyMSkgJiYKLQkJICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYzMDIyKSkKKwlpZiAocnQyeDAwX2lzX3BjaShydDJ4MDBkZXYpIHx8IHJ0MngwMF9pc19zb2MocnQyeDAwZGV2KSkgeworCQlpZiAoIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMzAyMCkgJiYKKwkJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjEpICYmCisJCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIyKSkKIAkJCXJldHVybiAwOwogCX0KIApAQCAtMTU4Niw3ICsxNjIwLDcgQEAKIAlydDJ4MDBfc2V0X2ZpZWxkOCgmcmZjc3IsIFJGQ1NSMzBfUkZfQ0FMSUJSQVRJT04sIDApOwogCXJ0MjgwMF9yZmNzcl93cml0ZShydDJ4MDBkZXYsIDMwLCByZmNzcik7CiAKLQlpZiAocnQyeDAwX2ludGZfaXNfdXNiKHJ0MngwMGRldikpIHsKKwlpZiAocnQyeDAwX2lzX3VzYihydDJ4MDBkZXYpKSB7CiAJCXJ0MjgwMF9yZmNzcl93cml0ZShydDJ4MDBkZXYsIDQsIDB4NDApOwogCQlydDI4MDBfcmZjc3Jfd3JpdGUocnQyeDAwZGV2LCA1LCAweDAzKTsKIAkJcnQyODAwX3JmY3NyX3dyaXRlKHJ0MngwMGRldiwgNiwgMHgwMik7CkBAIC0xNjA3LDcgKzE2NDEsNyBAQAogCQlydDI4MDBfcmZjc3Jfd3JpdGUocnQyeDAwZGV2LCAyNSwgMHgwMSk7CiAJCXJ0MjgwMF9yZmNzcl93cml0ZShydDJ4MDBkZXYsIDI3LCAweDAzKTsKIAkJcnQyODAwX3JmY3NyX3dyaXRlKHJ0MngwMGRldiwgMjksIDB4MWYpOwotCX0gZWxzZSBpZiAocnQyeDAwX2ludGZfaXNfcGNpKHJ0MngwMGRldikpIHsKKwl9IGVsc2UgaWYgKHJ0MngwMF9pc19wY2kocnQyeDAwZGV2KSB8fCBydDJ4MDBfaXNfc29jKHJ0MngwMGRldikpIHsKIAkJcnQyODAwX3JmY3NyX3dyaXRlKHJ0MngwMGRldiwgMCwgMHg1MCk7CiAJCXJ0MjgwMF9yZmNzcl93cml0ZShydDJ4MDBkZXYsIDEsIDB4MDEpOwogCQlydDI4MDBfcmZjc3Jfd3JpdGUocnQyeDAwZGV2LCAyLCAweGY3KTsKQEAgLTE3MzcsNyArMTc3MSwxMiBAQAogCQlydDJ4MDBfc2V0X2ZpZWxkMTYoJndvcmQsIEVFUFJPTV9BTlRFTk5BX1JGX1RZUEUsIFJGMjgyMCk7CiAJCXJ0MngwMF9lZXByb21fd3JpdGUocnQyeDAwZGV2LCBFRVBST01fQU5URU5OQSwgd29yZCk7CiAJCUVFUFJPTShydDJ4MDBkZXYsICJBbnRlbm5hOiAweCUwNHhcbiIsIHdvcmQpOwotCX0gZWxzZSBpZiAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA8IFJUMjg4M19WRVJTSU9OKSB7CisJfSBlbHNlIGlmIChydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4NjApIHx8CisJCSAgIHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMjg3MCkgfHwKKwkJICAgcnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODcyKSB8fAorCQkgICBydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4ODApIHx8CisJCSAgIChydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4ODMpICYmCisJCSAgICAocnQyeDAwX3JldihydDJ4MDBkZXYpIDwgUlQyODgzX1ZFUlNJT04pKSkgewogCQkvKgogCQkgKiBUaGVyZSBpcyBhIG1heCBvZiAyIFJYIHN0cmVhbXMgZm9yIFJUMjh4MCBzZXJpZXMKIAkJICovCkBAIC0xODM2LDM2ICsxODc1LDM0IEBACiAJdmFsdWUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9SRl9UWVBFKTsKIAlydDI4MDBfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IwLCAmcmVnKTsKIAotCXJ0MngwMF9zZXRfY2hpcF9yZihydDJ4MDBkZXYsIHZhbHVlLCByZWcpOworCXJ0MngwMF9zZXRfY2hpcChydDJ4MDBkZXYsIHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIE1BQ19DU1IwX0NISVBTRVQpLAorCQkJdmFsdWUsIHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIE1BQ19DU1IwX1JFVklTSU9OKSk7CiAKLQlpZiAocnQyeDAwX2ludGZfaXNfdXNiKHJ0MngwMGRldikpIHsKLQkJc3RydWN0IHJ0MngwMF9jaGlwICpjaGlwID0gJnJ0MngwMGRldi0+Y2hpcDsKLQotCQkvKgotCQkgKiBUaGUgY2hlY2sgZm9yIHJ0Mjg2MCBpcyBub3QgYSB0eXBvLCBzb21lIHJ0Mjg3MCBoYXJkd2FyZQotCQkgKiBpZGVudGlmaWVzIGl0c2VsZiBhcyBydDI4NjAgaW4gdGhlIENTUiByZWdpc3Rlci4KLQkJICovCi0JCWlmIChydDJ4MDBfY2hlY2tfcmV2KGNoaXAsIDB4ZmZmMDAwMDAsIDB4Mjg2MDAwMDApIHx8Ci0JCSAgICBydDJ4MDBfY2hlY2tfcmV2KGNoaXAsIDB4ZmZmMDAwMDAsIDB4Mjg3MDAwMDApIHx8Ci0JCSAgICBydDJ4MDBfY2hlY2tfcmV2KGNoaXAsIDB4ZmZmMDAwMDAsIDB4Mjg4MDAwMDApKSB7Ci0JCQlydDJ4MDBfc2V0X2NoaXBfcnQocnQyeDAwZGV2LCBSVDI4NzApOwotCQl9IGVsc2UgaWYgKHJ0MngwMF9jaGVja19yZXYoY2hpcCwgMHhmZmZmMDAwMCwgMHgzMDcwMDAwMCkpIHsKLQkJCXJ0MngwMF9zZXRfY2hpcF9ydChydDJ4MDBkZXYsIFJUMzA3MCk7Ci0JCX0gZWxzZSB7Ci0JCQlFUlJPUihydDJ4MDBkZXYsICJJbnZhbGlkIFJUIGNoaXBzZXQgZGV0ZWN0ZWQuXG4iKTsKLQkJCXJldHVybiAtRU5PREVWOwotCQl9CisJaWYgKCFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4NjApICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4NzApICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4NzIpICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4ODApICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4ODMpICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4OTApICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNTIpICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNzApICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNzEpICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwOTApICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMzOTApICYmCisJICAgICFydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDM1NzIpKSB7CisJCUVSUk9SKHJ0MngwMGRldiwgIkludmFsaWQgUlQgY2hpcHNldCBkZXRlY3RlZC5cbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JcnQyeDAwX3ByaW50X2NoaXAocnQyeDAwZGV2KTsKIAotCWlmICghcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjgyMCkgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI4NTApICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNzIwKSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjc1MCkgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjMwMjApICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyMDIwKSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMzAyMSkgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjMwMjIpKSB7CisJaWYgKCFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI4MjApICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI4NTApICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI3MjApICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI3NTApICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjApICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjIwMjApICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjEpICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjIpICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwNTIpKSB7CiAJCUVSUk9SKHJ0MngwMGRldiwgIkludmFsaWQgUkYgY2hpcHNldCBkZXRlY3RlZC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0yMDEzLDcgKzIwNTAsNiBAQAogCiBpbnQgcnQyODAwX3Byb2JlX2h3X21vZGUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlzdHJ1Y3QgcnQyeDAwX2NoaXAgKmNoaXAgPSAmcnQyeDAwZGV2LT5jaGlwOwogCXN0cnVjdCBod19tb2RlX3NwZWMgKnNwZWMgPSAmcnQyeDAwZGV2LT5zcGVjOwogCXN0cnVjdCBjaGFubmVsX2luZm8gKmluZm87CiAJY2hhciAqdHhfcG93ZXIxOwpAQCAtMjAyNCw3ICsyMDYwLDcgQEAKIAkvKgogCSAqIERpc2FibGUgcG93ZXJzYXZpbmcgYXMgZGVmYXVsdCBvbiBQQ0kgZGV2aWNlcy4KIAkgKi8KLQlpZiAocnQyeDAwX2ludGZfaXNfcGNpKHJ0MngwMGRldikpCisJaWYgKHJ0MngwMF9pc19wY2kocnQyeDAwZGV2KSB8fCBydDJ4MDBfaXNfc29jKHJ0MngwMGRldikpCiAJCXJ0MngwMGRldi0+aHctPndpcGh5LT5mbGFncyAmPSB+V0lQSFlfRkxBR19QU19PTl9CWV9ERUZBVUxUOwogCiAJLyoKQEAgLTIwNDksMTkgKzIwODUsMTkgQEAKIAlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgPSBTVVBQT1JUX0JBTkRfMkdIWjsKIAlzcGVjLT5zdXBwb3J0ZWRfcmF0ZXMgPSBTVVBQT1JUX1JBVEVfQ0NLIHwgU1VQUE9SVF9SQVRFX09GRE07CiAKLQlpZiAocnQyeDAwX3JmKGNoaXAsIFJGMjgyMCkgfHwKLQkgICAgcnQyeDAwX3JmKGNoaXAsIFJGMjcyMCkgfHwKLQkgICAgKHJ0MngwMF9pbnRmX2lzX3BjaShydDJ4MDBkZXYpICYmIHJ0MngwMF9yZihjaGlwLCBSRjMwNTIpKSkgeworCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI4MjApIHx8CisJICAgIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjcyMCkgfHwKKwkgICAgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDUyKSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSAxNDsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzOwotCX0gZWxzZSBpZiAocnQyeDAwX3JmKGNoaXAsIFJGMjg1MCkgfHwgcnQyeDAwX3JmKGNoaXAsIFJGMjc1MCkpIHsKKwl9IGVsc2UgaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjg1MCkgfHwgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNzUwKSkgewogCQlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgfD0gU1VQUE9SVF9CQU5EXzVHSFo7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFscyk7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsczsKLQl9IGVsc2UgaWYgKHJ0MngwMF9yZihjaGlwLCBSRjMwMjApIHx8Ci0JCSAgIHJ0MngwMF9yZihjaGlwLCBSRjIwMjApIHx8Ci0JCSAgIHJ0MngwMF9yZihjaGlwLCBSRjMwMjEpIHx8Ci0JCSAgIHJ0MngwMF9yZihjaGlwLCBSRjMwMjIpKSB7CisJfSBlbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjApIHx8CisJCSAgIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjAyMCkgfHwKKwkJICAgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYzMDIxKSB8fAorCQkgICBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjMwMjIpKSB7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc18zMDJ4KTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzXzMwMng7CiAJfQpAQCAtMjA2OSw3ICsyMTA1LDcgQEAKIAkvKgogCSAqIEluaXRpYWxpemUgSFQgaW5mb3JtYXRpb24uCiAJICovCi0JaWYgKCFydDJ4MDBfcmYoY2hpcCwgUkYyMDIwKSkKKwlpZiAoIXJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjAyMCkpCiAJCXNwZWMtPmh0Lmh0X3N1cHBvcnRlZCA9IHRydWU7CiAJZWxzZQogCQlzcGVjLT5odC5odF9zdXBwb3J0ZWQgPSBmYWxzZTsKQEAgLTIyODIsNyArMjMxOCw2IEBACiAJLnNldF9ydHNfdGhyZXNob2xkCT0gcnQyODAwX3NldF9ydHNfdGhyZXNob2xkLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmNvbmZfdHgJCT0gcnQyODAwX2NvbmZfdHgsCi0JLmdldF90eF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzLAogCS5nZXRfdHNmCQk9IHJ0MjgwMF9nZXRfdHNmLAogCS5yZmtpbGxfcG9sbAkJPSBydDJ4MDBtYWNfcmZraWxsX3BvbGwsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMGxpYi5oCmluZGV4IDUzNWNlMjIuLmViYWJlYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBsaWIuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwbGliLmgKQEAgLTExNCw4ICsxMTQsNiBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBydDJ4MDBkZWJ1ZyBydDI4MDBfcnQyeDAwZGVidWc7CiAKIGludCBydDI4MDBfcmZraWxsX3BvbGwoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7Ci12b2lkIHJ0MjgwMF9pbml0X2xlZChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LAotCQkgICAgIHN0cnVjdCBydDJ4MDBfbGVkICpsZWQsIGVudW0gbGVkX3R5cGUgdHlwZSk7CiBpbnQgcnQyODAwX2NvbmZpZ19zaGFyZWRfa2V5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCiAJCQkgICAgIHN0cnVjdCBydDJ4MDBsaWJfY3J5cHRvICpjcnlwdG8sCiAJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7CkBAIC0xMzksNiArMTM3LDcgQEAKIGludCBydDI4MDBfaW5pdF9yZWdpc3RlcnMoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldik7CiBpbnQgcnQyODAwX2luaXRfYmJwKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogaW50IHJ0MjgwMF9pbml0X3JmY3NyKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOworaW50IHJ0MjgwMF93YWl0X3dwZG1hX3JlYWR5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwogCiBpbnQgcnQyODAwX2VmdXNlX2RldGVjdChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KTsKIHZvaWQgcnQyODAwX3JlYWRfZWVwcm9tX2VmdXNlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHBjaS5jCmluZGV4IGRmYzg4NmYuLmFjYThjMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwcGNpLmMKQEAgLTQ4LDE0ICs0OCw2IEBACiAjaW5jbHVkZSAicnQyODAwLmgiCiAjaW5jbHVkZSAicnQyODAwcGNpLmgiCiAKLSNpZmRlZiBDT05GSUdfUlQyODAwUENJX1BDSV9NT0RVTEUKLSNkZWZpbmUgQ09ORklHX1JUMjgwMFBDSV9QQ0kKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9XSVNPQ19NT0RVTEUKLSNkZWZpbmUgQ09ORklHX1JUMjgwMFBDSV9XSVNPQwotI2VuZGlmCi0KIC8qCiAgKiBBbGxvdyBoYXJkd2FyZSBlbmNyeXB0aW9uIHRvIGJlIGRpc2FibGVkLgogICovCkBAIC04Nyw3ICs3OSw3IEBACiAJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSDJNX01BSUxCT1hfQ0lELCB+MCk7CiB9CiAKLSNpZmRlZiBDT05GSUdfUlQyODAwUENJX1dJU09DCisjaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9TT0MKIHN0YXRpYyB2b2lkIHJ0MjgwMHBjaV9yZWFkX2VlcHJvbV9zb2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIAl1MzIgKmJhc2VfYWRkciA9ICh1MzIgKikgS1NFRzFBRERSKDB4MUYwNDAwMDApOyAvKiBYWFggZm9yIFJUMzA1MiAqLwpAQCAtOTgsNyArOTAsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHJ0MjgwMHBjaV9yZWFkX2VlcHJvbV9zb2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIH0KLSNlbmRpZiAvKiBDT05GSUdfUlQyODAwUENJX1dJU09DICovCisjZW5kaWYgLyogQ09ORklHX1JUMjgwMFBDSV9TT0MgKi8KIAogI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfUENJCiBzdGF0aWMgdm9pZCBydDI4MDBwY2lfZWVwcm9tcmVnaXN0ZXJfcmVhZChzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20pCkBAIC00NjEsMjQgKzQ1Myw2IEBACiAJcnQyODAwX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgSU5UX01BU0tfQ1NSLCByZWcpOwogfQogCi1zdGF0aWMgaW50IHJ0MjgwMHBjaV93YWl0X3dwZG1hX3JlYWR5KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0JdTMyIHJlZzsKLQotCWZvciAoaSA9IDA7IGkgPCBSRUdJU1RFUl9CVVNZX0NPVU5UOyBpKyspIHsKLQkJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBXUERNQV9HTE9fQ0ZHLCAmcmVnKTsKLQkJaWYgKCFydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBXUERNQV9HTE9fQ0ZHX1RYX0RNQV9CVVNZKSAmJgotCQkgICAgIXJ0MngwMF9nZXRfZmllbGQzMihyZWcsIFdQRE1BX0dMT19DRkdfUlhfRE1BX0JVU1kpKQotCQkJcmV0dXJuIDA7Ci0KLQkJbXNsZWVwKDEpOwotCX0KLQotCUVSUk9SKHJ0MngwMGRldiwgIldQRE1BIFRYL1JYIGJ1c3ksIGFib3J0aW5nLlxuIik7Ci0JcmV0dXJuIC1FQUNDRVM7Ci19Ci0KIHN0YXRpYyBpbnQgcnQyODAwcGNpX2VuYWJsZV9yYWRpbyhzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQogewogCXUzMiByZWc7CkBAIC00ODcsMTAgKzQ2MSwxMCBAQAogCS8qCiAJICogSW5pdGlhbGl6ZSBhbGwgcmVnaXN0ZXJzLgogCSAqLwotCWlmICh1bmxpa2VseShydDI4MDBwY2lfd2FpdF93cGRtYV9yZWFkeShydDJ4MDBkZXYpIHx8CisJaWYgKHVubGlrZWx5KHJ0MjgwMF93YWl0X3dwZG1hX3JlYWR5KHJ0MngwMGRldikgfHwKIAkJICAgICBydDI4MDBwY2lfaW5pdF9xdWV1ZXMocnQyeDAwZGV2KSB8fAogCQkgICAgIHJ0MjgwMF9pbml0X3JlZ2lzdGVycyhydDJ4MDBkZXYpIHx8Ci0JCSAgICAgcnQyODAwcGNpX3dhaXRfd3BkbWFfcmVhZHkocnQyeDAwZGV2KSB8fAorCQkgICAgIHJ0MjgwMF93YWl0X3dwZG1hX3JlYWR5KHJ0MngwMGRldikgfHwKIAkJICAgICBydDI4MDBfaW5pdF9iYnAocnQyeDAwZGV2KSB8fAogCQkgICAgIHJ0MjgwMF9pbml0X3JmY3NyKHJ0MngwMGRldikpKQogCQlyZXR1cm4gLUVJTzsKQEAgLTU3MCw3ICs1NDQsNyBAQAogCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBCRl9TWVNfQ1RSTCwgMHgwMDAwMGUwMCk7CiAKIAkvKiBXYWl0IGZvciBETUEsIGlnbm9yZSBlcnJvciAqLwotCXJ0MjgwMHBjaV93YWl0X3dwZG1hX3JlYWR5KHJ0MngwMGRldik7CisJcnQyODAwX3dhaXRfd3BkbWFfcmVhZHkocnQyeDAwZGV2KTsKIH0KIAogc3RhdGljIGludCBydDI4MDBwY2lfc2V0X3N0YXRlKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCkBAIC04MzUsNyArODA5LDYgQEAKIAkJCQkgIHN0cnVjdCByeGRvbmVfZW50cnlfZGVzYyAqcnhkZXNjKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBlbnRyeS0+cXVldWUtPnJ0MngwMGRldjsKLQlzdHJ1Y3Qgc2tiX2ZyYW1lX2Rlc2MgKnNrYmRlc2MgPSBnZXRfc2tiX2ZyYW1lX2Rlc2MoZW50cnktPnNrYik7CiAJc3RydWN0IHF1ZXVlX2VudHJ5X3ByaXZfcGNpICplbnRyeV9wcml2ID0gZW50cnktPnByaXZfZGF0YTsKIAlfX2xlMzIgKnJ4ZCA9IGVudHJ5X3ByaXYtPmRlc2M7CiAJX19sZTMyICpyeHdpID0gKF9fbGUzMiAqKWVudHJ5LT5za2ItPmRhdGE7CkBAIC04ODMsMTAgKzg1Niw4IEBACiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyeGQzLCBSWERfVzNfTVlfQlNTKSkKIAkJcnhkZXNjLT5kZXZfZmxhZ3MgfD0gUlhET05FX01ZX0JTUzsKIAotCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocnhkMywgUlhEX1czX0wyUEFEKSkgeworCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocnhkMywgUlhEX1czX0wyUEFEKSkKIAkJcnhkZXNjLT5kZXZfZmxhZ3MgfD0gUlhET05FX0wyUEFEOwotCQlza2JkZXNjLT5mbGFncyB8PSBTS0JERVNDX0wyX1BBRERFRDsKLQl9CiAKIAlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJ4d2kxLCBSWFdJX1cxX1NIT1JUX0dJKSkKIAkJcnhkZXNjLT5mbGFncyB8PSBSWF9GTEFHX1NIT1JUX0dJOwpAQCAtOTI3LDcgKzg5OCw2IEBACiAJICogUmVtb3ZlIFRYV0kgZGVzY3JpcHRvciBmcm9tIHN0YXJ0IG9mIGJ1ZmZlci4KIAkgKi8KIAlza2JfcHVsbChlbnRyeS0+c2tiLCBSWFdJX0RFU0NfU0laRSk7Ci0Jc2tiX3RyaW0oZW50cnktPnNrYiwgcnhkZXNjLT5zaXplKTsKIH0KIAogLyoKQEAgLTEwNzEsMTggKzEwNDEsMTIgQEAKIAkvKgogCSAqIFJlYWQgRUVQUk9NIGludG8gYnVmZmVyCiAJICovCi0Jc3dpdGNoIChydDJ4MDBkZXYtPmNoaXAucnQpIHsKLQljYXNlIFJUMjg4MDoKLQljYXNlIFJUMzA1MjoKKwlpZiAocnQyeDAwX2lzX3NvYyhydDJ4MDBkZXYpKQogCQlydDI4MDBwY2lfcmVhZF9lZXByb21fc29jKHJ0MngwMGRldik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWlmIChydDI4MDBwY2lfZWZ1c2VfZGV0ZWN0KHJ0MngwMGRldikpCi0JCQlydDI4MDBwY2lfcmVhZF9lZXByb21fZWZ1c2UocnQyeDAwZGV2KTsKLQkJZWxzZQotCQkJcnQyODAwcGNpX3JlYWRfZWVwcm9tX3BjaShydDJ4MDBkZXYpOwotCQlicmVhazsKLQl9CisJZWxzZSBpZiAocnQyODAwcGNpX2VmdXNlX2RldGVjdChydDJ4MDBkZXYpKQorCQlydDI4MDBwY2lfcmVhZF9lZXByb21fZWZ1c2UocnQyeDAwZGV2KTsKKwllbHNlCisJCXJ0MjgwMHBjaV9yZWFkX2VlcHJvbV9wY2kocnQyeDAwZGV2KTsKIAogCXJldHVybiBydDI4MDBfdmFsaWRhdGVfZWVwcm9tKHJ0MngwMGRldik7CiB9CkBAIC0xMTMzLDggKzEwOTcsNyBAQAogCS8qCiAJICogVGhpcyBkZXZpY2UgcmVxdWlyZXMgZmlybXdhcmUuCiAJICovCi0JaWYgKCFydDJ4MDBfcnQoJnJ0MngwMGRldi0+Y2hpcCwgUlQyODgwKSAmJgotCSAgICAhcnQyeDAwX3J0KCZydDJ4MDBkZXYtPmNoaXAsIFJUMzA1MikpCisJaWYgKCFydDJ4MDBfaXNfc29jKHJ0MngwMGRldikpCiAJCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9GSVJNV0FSRSwgJnJ0MngwMGRldi0+ZmxhZ3MpOwogCV9fc2V0X2JpdChEUklWRVJfUkVRVUlSRV9ETUEsICZydDJ4MDBkZXYtPmZsYWdzKTsKIAlfX3NldF9iaXQoRFJJVkVSX1JFUVVJUkVfTDJQQUQsICZydDJ4MDBkZXYtPmZsYWdzKTsKQEAgLTEyMjEsOCArMTE4NCwxMSBAQAogLyoKICAqIFJUMjgwMHBjaSBtb2R1bGUgaW5mb3JtYXRpb24uCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBydDI4MDBwY2lfZGV2aWNlX3RhYmxlW10gPSB7Ci0JeyBQQ0lfREVWSUNFKDB4MTQ2MiwgMHg4OTFhKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAorc3RhdGljIERFRklORV9QQ0lfREVWSUNFX1RBQkxFKHJ0MjgwMHBjaV9kZXZpY2VfdGFibGUpID0geworCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDYwMSksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDA2ODEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCisJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgwNzAxKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAorCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDc4MSksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKIAl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3MDgpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzI3KSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAogCXsgUENJX0RFVklDRSgweDE0MzIsIDB4NzcyOCksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKQEAgLTEyMzAsMTggKzExOTYsMTkgQEAKIAl7IFBDSV9ERVZJQ0UoMHgxNDMyLCAweDc3NDgpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTQzMiwgMHg3NzU4KSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAogCXsgUENJX0RFVklDRSgweDE0MzIsIDB4Nzc2OCksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDA2MDEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgwNjgxKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAotCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDcwMSksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDA3ODEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCi0JeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzMDYwKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAotCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzA2MiksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxYTNiLCAweDEwNTkpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCisjaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9SVDMwWFgKIAl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMwOTApLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzMDkxKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAogCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzA5MiksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxNDYyLCAweDg5MWEpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUlQyODAwUENJX1JUMzVYWAorCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzA2MCksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKKwl7IFBDSV9ERVZJQ0UoMHgxODE0LCAweDMwNjIpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCiAJeyBQQ0lfREVWSUNFKDB4MTgxNCwgMHgzNTYyKSwgUENJX0RFVklDRV9EQVRBKCZydDI4MDBwY2lfb3BzKSB9LAogCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MzU5MiksIFBDSV9ERVZJQ0VfREFUQSgmcnQyODAwcGNpX29wcykgfSwKLQl7IFBDSV9ERVZJQ0UoMHgxYTNiLCAweDEwNTkpLCBQQ0lfREVWSUNFX0RBVEEoJnJ0MjgwMHBjaV9vcHMpIH0sCisjZW5kaWYKIAl7IDAsIH0KIH07CiAKQEAgLTEyNTUsMTIgKzEyMjIsMTEgQEAKICNlbmRpZiAvKiBDT05GSUdfUlQyODAwUENJX1BDSSAqLwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9XSVNPQwotI2lmIGRlZmluZWQoQ09ORklHX1JBTElOS19SVDI4OFgpCi1fX3J0MngwMHNvY19wcm9iZShSVDI4ODAsICZydDI4MDBwY2lfb3BzKTsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1JBTElOS19SVDMwNVgpCi1fX3J0MngwMHNvY19wcm9iZShSVDMwNTIsICZydDI4MDBwY2lfb3BzKTsKLSNlbmRpZgorI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfU09DCitzdGF0aWMgaW50IHJ0MjgwMHNvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBydDJ4MDBzb2NfcHJvYmUocGRldiwgcnQyODAwcGNpX29wcyk7Cit9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJ0MjgwMHNvY19kcml2ZXIgPSB7CiAJLmRyaXZlcgkJPSB7CkBAIC0xMjY4LDEyICsxMjM0LDEyIEBACiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkJLm1vZF9uYW1lCT0gS0JVSUxEX01PRE5BTUUsCiAJfSwKLQkucHJvYmUJCT0gX19ydDJ4MDBzb2NfcHJvYmUsCisJLnByb2JlCQk9IHJ0MjgwMHNvY19wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHJ0MngwMHNvY19yZW1vdmUpLAogCS5zdXNwZW5kCT0gcnQyeDAwc29jX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBydDJ4MDBzb2NfcmVzdW1lLAogfTsKLSNlbmRpZiAvKiBDT05GSUdfUlQyODAwUENJX1dJU09DICovCisjZW5kaWYgLyogQ09ORklHX1JUMjgwMFBDSV9TT0MgKi8KIAogI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfUENJCiBzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgcnQyODAwcGNpX2RyaXZlciA9IHsKQEAgLTEyOTAsNyArMTI1Niw3IEBACiB7CiAJaW50IHJldCA9IDA7CiAKLSNpZmRlZiBDT05GSUdfUlQyODAwUENJX1dJU09DCisjaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9TT0MKIAlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnJ0MjgwMHNvY19kcml2ZXIpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC0xMjk4LDcgKzEyNjQsNyBAQAogI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfUENJCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcnQyODAwcGNpX2RyaXZlcik7CiAJaWYgKHJldCkgewotI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfV0lTT0MKKyNpZmRlZiBDT05GSUdfUlQyODAwUENJX1NPQwogCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmcnQyODAwc29jX2RyaXZlcik7CiAjZW5kaWYKIAkJcmV0dXJuIHJldDsKQEAgLTEzMTMsNyArMTI3OSw3IEBACiAjaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9QQ0kKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnJ0MjgwMHBjaV9kcml2ZXIpOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1JUMjgwMFBDSV9XSVNPQworI2lmZGVmIENPTkZJR19SVDI4MDBQQ0lfU09DCiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnJ0MjgwMHNvY19kcml2ZXIpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmMKaW5kZXggYWI5NTM0Ni4uZDI3ZDdkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuYwpAQCAtOTIsNyArOTIsNiBAQAogc3RhdGljIGludCBydDI4MDB1c2JfY2hlY2tfZmlybXdhcmUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCQkgICAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCiB7Ci0JdTE2IGNoaXBzZXQgPSAocnQyeDAwX3JldigmcnQyeDAwZGV2LT5jaGlwKSA+PiAxNikgJiAweGZmZmY7CiAJc2l6ZV90IG9mZnNldCA9IDA7CiAKIAkvKgpAQCAtMTAwLDcgKzk5LDcgQEAKIAkgKiBUaGVyZSBhcmUgMiB2YXJpYXRpb25zIG9mIHRoZSBydDI4NzAgZmlybXdhcmUuCiAJICogYSkgc2l6ZTogNGtiCiAJICogYikgc2l6ZTogOGtiCi0JICogTm90ZSB0aGF0IChiKSBjb250YWlucyAyIHNlcGVyYXRlIGZpcm13YXJlIGJsb2JzIG9mIDRrCisJICogTm90ZSB0aGF0IChiKSBjb250YWlucyAyIHNlcGFyYXRlIGZpcm13YXJlIGJsb2JzIG9mIDRrCiAJICogd2l0aGluIHRoZSBmaWxlLiBUaGUgZmlyc3QgYmxvYiBpcyB0aGUgc2FtZSBmaXJtd2FyZSBhcyAoYSksCiAJICogYnV0IHRoZSBzZWNvbmQgYmxvYiBpcyBmb3IgdGhlIGFkZGl0aW9uYWwgY2hpcHNldHMuCiAJICovCkBAIC0xMTEsMTQgKzExMCwxNCBAQAogCSAqIENoZWNrIGlmIHdlIG5lZWQgdGhlIHVwcGVyIDRrYiBmaXJtd2FyZSBkYXRhIG9yIG5vdC4KIAkgKi8KIAlpZiAoKGxlbiA9PSA0MDk2KSAmJgotCSAgICAoY2hpcHNldCAhPSAweDI4NjApICYmCi0JICAgIChjaGlwc2V0ICE9IDB4Mjg3MikgJiYKLQkgICAgKGNoaXBzZXQgIT0gMHgzMDcwKSkKKwkgICAgIXJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMjg2MCkgJiYKKwkgICAgIXJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMjg3MikgJiYKKwkgICAgIXJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMzA3MCkpCiAJCXJldHVybiBGV19CQURfVkVSU0lPTjsKIAogCS8qCiAJICogOGtiIGZpcm13YXJlIGZpbGVzIG11c3QgYmUgY2hlY2tlZCBhcyBpZiBpdCB3ZXJlCi0JICogMiBzZXBlcmF0ZSBmaXJtd2FyZSBmaWxlcy4KKwkgKiAyIHNlcGFyYXRlIGZpcm13YXJlIGZpbGVzLgogCSAqLwogCXdoaWxlIChvZmZzZXQgPCBsZW4pIHsKIAkJaWYgKCFydDI4MDB1c2JfY2hlY2tfY3JjKGRhdGEgKyBvZmZzZXQsIDQwOTYpKQpAQCAtMTM4LDE0ICsxMzcsMTMgQEAKIAl1MzIgcmVnOwogCXUzMiBvZmZzZXQ7CiAJdTMyIGxlbmd0aDsKLQl1MTYgY2hpcHNldCA9IChydDJ4MDBfcmV2KCZydDJ4MDBkZXYtPmNoaXApID4+IDE2KSAmIDB4ZmZmZjsKIAogCS8qCiAJICogQ2hlY2sgd2hpY2ggc2VjdGlvbiBvZiB0aGUgZmlybXdhcmUgd2UgbmVlZC4KIAkgKi8KLQlpZiAoKGNoaXBzZXQgPT0gMHgyODYwKSB8fAotCSAgICAoY2hpcHNldCA9PSAweDI4NzIpIHx8Ci0JICAgIChjaGlwc2V0ID09IDB4MzA3MCkpIHsKKwlpZiAocnQyeDAwX3J0KHJ0MngwMGRldiwgUlQyODYwKSB8fAorCSAgICBydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDI4NzIpIHx8CisJICAgIHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMzA3MCkpIHsKIAkJb2Zmc2V0ID0gMDsKIAkJbGVuZ3RoID0gNDA5NjsKIAl9IGVsc2UgewpAQCAtMjAwLDkgKzE5OCw5IEBACiAJICovCiAJcnQyODAwX21jdV9yZXF1ZXN0KHJ0MngwMGRldiwgTUNVX0JPT1RfU0lHTkFMLCAweGZmLCAwLCAwKTsKIAotCWlmICgoY2hpcHNldCA9PSAweDMwNzApIHx8Ci0JICAgIChjaGlwc2V0ID09IDB4MzA3MSkgfHwKLQkgICAgKGNoaXBzZXQgPT0gMHgzNTcyKSkgeworCWlmIChydDJ4MDBfcnQocnQyeDAwZGV2LCBSVDMwNzApIHx8CisJICAgIHJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMzA3MSkgfHwKKwkgICAgcnQyeDAwX3J0KHJ0MngwMGRldiwgUlQzNTcyKSkgewogCQl1ZGVsYXkoMjAwKTsKIAkJcnQyODAwX21jdV9yZXF1ZXN0KHJ0MngwMGRldiwgTUNVX0NVUlJFTlQsIDAsIDAsIDApOwogCQl1ZGVsYXkoMTApOwpAQCAtMjQ4LDI0ICsyNDYsNiBAQAogCXJ0MjgwMF9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIE1BQ19TWVNfQ1RSTCwgcmVnKTsKIH0KIAotc3RhdGljIGludCBydDI4MDB1c2Jfd2FpdF93cGRtYV9yZWFkeShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewotCXVuc2lnbmVkIGludCBpOwotCXUzMiByZWc7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgUkVHSVNURVJfQlVTWV9DT1VOVDsgaSsrKSB7Ci0JCXJ0MjgwMF9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgV1BETUFfR0xPX0NGRywgJnJlZyk7Ci0JCWlmICghcnQyeDAwX2dldF9maWVsZDMyKHJlZywgV1BETUFfR0xPX0NGR19UWF9ETUFfQlVTWSkgJiYKLQkJICAgICFydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBXUERNQV9HTE9fQ0ZHX1JYX0RNQV9CVVNZKSkKLQkJCXJldHVybiAwOwotCi0JCW1zbGVlcCgxKTsKLQl9Ci0KLQlFUlJPUihydDJ4MDBkZXYsICJXUERNQSBUWC9SWCBidXN5LCBhYm9ydGluZy5cbiIpOwotCXJldHVybiAtRUFDQ0VTOwotfQotCiBzdGF0aWMgaW50IHJ0MjgwMHVzYl9lbmFibGVfcmFkaW8oc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKIAl1MzIgcmVnOwpAQCAtMjc0LDcgKzI1NCw3IEBACiAJLyoKIAkgKiBJbml0aWFsaXplIGFsbCByZWdpc3RlcnMuCiAJICovCi0JaWYgKHVubGlrZWx5KHJ0MjgwMHVzYl93YWl0X3dwZG1hX3JlYWR5KHJ0MngwMGRldikgfHwKKwlpZiAodW5saWtlbHkocnQyODAwX3dhaXRfd3BkbWFfcmVhZHkocnQyeDAwZGV2KSB8fAogCQkgICAgIHJ0MjgwMF9pbml0X3JlZ2lzdGVycyhydDJ4MDBkZXYpIHx8CiAJCSAgICAgcnQyODAwX2luaXRfYmJwKHJ0MngwMGRldikgfHwKIAkJICAgICBydDI4MDBfaW5pdF9yZmNzcihydDJ4MDBkZXYpKSkKQEAgLTI5NSw5ICsyNzUsNyBAQAogCiAJcnQyODAwX3JlZ2lzdGVyX3JlYWQocnQyeDAwZGV2LCBVU0JfRE1BX0NGRywgJnJlZyk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFVTQl9ETUFfQ0ZHX1BIWV9DTEVBUiwgMCk7Ci0JLyogRG9uJ3QgdXNlIGJ1bGsgaW4gYWdncmVnYXRpb24gd2hlbiB3b3JraW5nIHdpdGggVVNCIDEuMSAqLwotCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBVU0JfRE1BX0NGR19SWF9CVUxLX0FHR19FTiwKLQkJCSAgIChydDJ4MDBkZXYtPnJ4LT51c2JfbWF4cGFja2V0ID09IDUxMikpOworCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBVU0JfRE1BX0NGR19SWF9CVUxLX0FHR19FTiwgMCk7CiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFVTQl9ETUFfQ0ZHX1JYX0JVTEtfQUdHX1RJTUVPVVQsIDEyOCk7CiAJLyoKIAkgKiBUb3RhbCByb29tIGZvciBSWCBmcmFtZXMgaW4ga2lsb2J5dGVzLCBQQkYgbWlnaHQgc3RpbGwgZXhjZWVkCkBAIC0zNDYsNyArMzI0LDcgQEAKIAlydDI4MDBfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBUWF9QSU5fQ0ZHLCAwKTsKIAogCS8qIFdhaXQgZm9yIERNQSwgaWdub3JlIGVycm9yICovCi0JcnQyODAwdXNiX3dhaXRfd3BkbWFfcmVhZHkocnQyeDAwZGV2KTsKKwlydDI4MDBfd2FpdF93cGRtYV9yZWFkeShydDJ4MDBkZXYpOwogCiAJcnQyeDAwdXNiX2Rpc2FibGVfcmFkaW8ocnQyeDAwZGV2KTsKIH0KQEAgLTU3Myw0MSArNTUxLDU3IEBACiB7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGVudHJ5LT5xdWV1ZS0+cnQyeDAwZGV2OwogCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhlbnRyeS0+c2tiKTsKLQlfX2xlMzIgKnJ4ZCA9IChfX2xlMzIgKillbnRyeS0+c2tiLT5kYXRhOworCV9fbGUzMiAqcnhpID0gKF9fbGUzMiAqKWVudHJ5LT5za2ItPmRhdGE7CiAJX19sZTMyICpyeHdpOwotCXUzMiByeGQwOworCV9fbGUzMiAqcnhkOworCXUzMiByeGkwOwogCXUzMiByeHdpMDsKIAl1MzIgcnh3aTE7CiAJdTMyIHJ4d2kyOwogCXUzMiByeHdpMzsKKwl1MzIgcnhkMDsKKwlpbnQgcnhfcGt0X2xlbjsKKworCS8qCisJICogUlggZnJhbWUgZm9ybWF0IGlzIDoKKwkgKiB8IFJYSU5GTyB8IFJYV0kgfCBoZWFkZXIgfCBMMiBwYWQgfCBwYXlsb2FkIHwgcGFkIHwgUlhEIHwgVVNCIHBhZCB8CisJICogICAgICAgICAgfDwtLS0tLS0tLS0tLS0gcnhfcGt0X2xlbiAtLS0tLS0tLS0tLS0tLT58CisJICovCisJcnQyeDAwX2Rlc2NfcmVhZChyeGksIDAsICZyeGkwKTsKKwlyeF9wa3RfbGVuID0gcnQyeDAwX2dldF9maWVsZDMyKHJ4aTAsIFJYSU5GT19XMF9VU0JfRE1BX1JYX1BLVF9MRU4pOworCisJcnh3aSA9IChfX2xlMzIgKikoZW50cnktPnNrYi0+ZGF0YSArIFJYSU5GT19ERVNDX1NJWkUpOworCisJLyoKKwkgKiBGSVhNRSA6IHdlIG5lZWQgdG8gY2hlY2sgZm9yIHJ4X3BrdF9sZW4gdmFsaWRpdHkKKwkgKi8KKwlyeGQgPSAoX19sZTMyICopKGVudHJ5LT5za2ItPmRhdGEgKyBSWElORk9fREVTQ19TSVpFICsgcnhfcGt0X2xlbik7CiAKIAkvKgogCSAqIENvcHkgZGVzY3JpcHRvciB0byB0aGUgc2tiZGVzYy0+ZGVzYyBidWZmZXIsIG1ha2luZyBpdCBzYWZlIGZyb20KIAkgKiBtb3Zpbmcgb2YgZnJhbWUgZGF0YSBpbiBydDJ4MDB1c2IuCiAJICovCi0JbWVtY3B5KHNrYmRlc2MtPmRlc2MsIHJ4ZCwgc2tiZGVzYy0+ZGVzY19sZW4pOwotCXJ4ZCA9IChfX2xlMzIgKilza2JkZXNjLT5kZXNjOwotCXJ4d2kgPSAmcnhkW1JYSU5GT19ERVNDX1NJWkUgLyBzaXplb2YoX19sZTMyKV07CisJbWVtY3B5KHNrYmRlc2MtPmRlc2MsIHJ4aSwgc2tiZGVzYy0+ZGVzY19sZW4pOwogCiAJLyoKIAkgKiBJdCBpcyBub3cgc2FmZSB0byByZWFkIHRoZSBkZXNjcmlwdG9yIG9uIGFsbCBhcmNoaXRlY3R1cmVzLgogCSAqLwotCXJ0MngwMF9kZXNjX3JlYWQocnhkLCAwLCAmcnhkMCk7CiAJcnQyeDAwX2Rlc2NfcmVhZChyeHdpLCAwLCAmcnh3aTApOwogCXJ0MngwMF9kZXNjX3JlYWQocnh3aSwgMSwgJnJ4d2kxKTsKIAlydDJ4MDBfZGVzY19yZWFkKHJ4d2ksIDIsICZyeHdpMik7CiAJcnQyeDAwX2Rlc2NfcmVhZChyeHdpLCAzLCAmcnh3aTMpOworCXJ0MngwMF9kZXNjX3JlYWQocnhkLCAwLCAmcnhkMCk7CiAKLQlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJ4ZDAsIFJYSU5GT19XMF9DUkNfRVJST1IpKQorCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocnhkMCwgUlhEX1cwX0NSQ19FUlJPUikpCiAJCXJ4ZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19GQUlMRURfRkNTX0NSQzsKIAogCWlmICh0ZXN0X2JpdChDT05GSUdfU1VQUE9SVF9IV19DUllQVE8sICZydDJ4MDBkZXYtPmZsYWdzKSkgewogCQlyeGRlc2MtPmNpcGhlciA9IHJ0MngwMF9nZXRfZmllbGQzMihyeHdpMCwgUlhXSV9XMF9VREYpOwogCQlyeGRlc2MtPmNpcGhlcl9zdGF0dXMgPQotCQkgICAgcnQyeDAwX2dldF9maWVsZDMyKHJ4ZDAsIFJYSU5GT19XMF9DSVBIRVJfRVJST1IpOworCQkgICAgcnQyeDAwX2dldF9maWVsZDMyKHJ4ZDAsIFJYRF9XMF9DSVBIRVJfRVJST1IpOwogCX0KIAotCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocnhkMCwgUlhJTkZPX1cwX0RFQ1JZUFRFRCkpIHsKKwlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJ4ZDAsIFJYRF9XMF9ERUNSWVBURUQpKSB7CiAJCS8qCiAJCSAqIEhhcmR3YXJlIGhhcyBzdHJpcHBlZCBJVi9FSVYgZGF0YSBmcm9tIDgwMi4xMSBmcmFtZSBkdXJpbmcKIAkJICogZGVjcnlwdGlvbi4gVW5mb3J0dW5hdGVseSB0aGUgZGVzY3JpcHRvciBkb2Vzbid0IGNvbnRhaW4KQEAgLTYyMiwxMyArNjE2LDExIEBACiAJCQlyeGRlc2MtPmZsYWdzIHw9IFJYX0ZMQUdfTU1JQ19FUlJPUjsKIAl9CiAKLQlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJ4ZDAsIFJYSU5GT19XMF9NWV9CU1MpKQorCWlmIChydDJ4MDBfZ2V0X2ZpZWxkMzIocnhkMCwgUlhEX1cwX01ZX0JTUykpCiAJCXJ4ZGVzYy0+ZGV2X2ZsYWdzIHw9IFJYRE9ORV9NWV9CU1M7CiAKLQlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJ4ZDAsIFJYSU5GT19XMF9MMlBBRCkpIHsKKwlpZiAocnQyeDAwX2dldF9maWVsZDMyKHJ4ZDAsIFJYRF9XMF9MMlBBRCkpCiAJCXJ4ZGVzYy0+ZGV2X2ZsYWdzIHw9IFJYRE9ORV9MMlBBRDsKLQkJc2tiZGVzYy0+ZmxhZ3MgfD0gU0tCREVTQ19MMl9QQURERUQ7Ci0JfQogCiAJaWYgKHJ0MngwMF9nZXRfZmllbGQzMihyeHdpMSwgUlhXSV9XMV9TSE9SVF9HSSkpCiAJCXJ4ZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19TSE9SVF9HSTsKQEAgLTY2Myw3ICs2NTUsNiBAQAogCSAqIFJlbW92ZSBSWFdJIGRlc2NyaXB0b3IgZnJvbSBzdGFydCBvZiBidWZmZXIuCiAJICovCiAJc2tiX3B1bGwoZW50cnktPnNrYiwgc2tiZGVzYy0+ZGVzY19sZW4pOwotCXNrYl90cmltKGVudHJ5LT5za2IsIHJ4ZGVzYy0+c2l6ZSk7CiB9CiAKIC8qCkBAIC04MTQsNTEgKzgwNSwyNyBAQAogCS8qIEFib2NvbSAqLwogCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4Mjg3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDI3NzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdiOCwgMHgzMDcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4MzA3MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDMwNzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTQ4MiwgMHgzYzA5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIEFpclRpZXMgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxZWRhLCAweDIzMTApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JLyogQW1pZ28gKi8KLQl7IFVTQl9ERVZJQ0UoMHgwZTBiLCAweDkwMzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGUwYiwgMHg5MDQxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIEFtaXQgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxNWM1LCAweDAwMDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogQXNrZXkgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxNjkwLCAweDA3NDApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTY5MCwgMHgwNzQ0KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA5MzAsIDB4MGEwNyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBBU1VTICovCiAJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzMxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTczMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3NDIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzYwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTc2MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3ODQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogQXp1cmVXYXZlICovCiAJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMjQ3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzI2MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMyNzMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMjg0KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzMwNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBCZWxraW4gKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDgwNTMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDUwZCwgMHg4MDVjKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4ODE1YyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDgyNWEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogQnVmZmFsbyAqLwogCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDBlOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAxMmUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JLyogQ2lzY28gKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNjdiLCAweDQwMDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogQ29uY2VwdHJvbmljICovCiAJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzA2KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MwNyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzA5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MxMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMTIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTRiMiwgMHgzYzIzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MyNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMjcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCkBAIC04NjcsMTAzICs4MzQsMzggQEAKIAl7IFVTQl9ERVZJQ0UoMHgwN2FhLCAweDAwMmYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDNjKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4MDAzZiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2FhLCAweDAwNDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDQyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE4YzUsIDB4MDAwOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxOGM1LCAweDAwMTIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogRC1MaW5rICovCiAJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzA5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwYSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMGIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzBkKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwZSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMGYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzExKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MxMyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMTUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogRWRpbWF4ICovCi0JeyBVU0JfREVWSUNFKDB4NzM5MiwgMHg3NzExKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDczOTIsIDB4NzcxNyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHg3MzkyLCAweDc3MTgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JLyogRW5jb3JlICovCi0JeyBVU0JfREVWSUNFKDB4MjAzZCwgMHgxNDgwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDIwM2QsIDB4MTRhMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDNkLCAweDE0YTkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogRW5HZW5pdXMgKi8KIAl7IFVTQl9ERVZJQ0UoMFgxNzQwLCAweDk3MDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzAyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwMyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzA2KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwNyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzA5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTgwMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQkvKiBHZW10ZWsgKi8KLQl7IFVTQl9ERVZJQ0UoMHgxNWE5LCAweDAwMTApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogR2lnYWJ5dGUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMDQ0LCAweDgwMGIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTA0NCwgMHg4MDBjKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDEwNDQsIDB4ODAwZCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBIYXdraW5nICovCiAJeyBVU0JfREVWSUNFKDB4MGU2NiwgMHgwMDAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDBlNjYsIDB4MDAwMyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZTY2LCAweDAwMDkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGU2NiwgMHgwMDBiKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIEktTyBEQVRBICovCi0JeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTQ0KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDk0NSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5NDcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTQ4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIExldmVsT25lICovCi0JeyBVU0JfREVWSUNFKDB4MTc0MCwgMHgwNjA1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4MDYxNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBMaW5rc3lzICovCiAJeyBVU0JfREVWSUNFKDB4MTczNywgMHgwMDcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDE3MzcsIDB4MDA3MSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTczNywgMHgwMDc5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIExvZ2l0ZWMgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNzg5LCAweDAxNjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDc4OSwgMHgwMTYzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA3ODksIDB4MDE2NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBNb3Rvcm9sYSAqLwogCXsgVVNCX0RFVklDRSgweDEwMGQsIDB4OTAzMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxMDBkLCAweDkwMzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogTVNJICovCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHgzODIwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4MzgyMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDM4NzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg2ODk5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4ODIxYSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDg3MGEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg4OTlhKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIE92aXNsaW5rICovCi0JeyBVU0JfREVWSUNFKDB4MWI3NSwgMHgzMDcyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIFBhcmEgKi8KLQl7IFVTQl9ERVZJQ0UoMHgyMGI4LCAweDg4ODgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JLyogUGVnYXRyb24gKi8KLQl7IFVTQl9ERVZJQ0UoMHgxZDRkLCAweDAwMDIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MWQ0ZCwgMHgwMDBjKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDFkNGQsIDB4MDAwZSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBQaGlsaXBzICovCiAJeyBVU0JfREVWSUNFKDB4MDQ3MSwgMHgyMDBmKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIFBsYW5leCAqLwogCXsgVVNCX0RFVklDRSgweDIwMTksIDB4ZWQwNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweGFiMjQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MjAxOSwgMHhhYjI1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCS8qIFFjb20gKi8KLQl7IFVTQl9ERVZJQ0UoMHgxOGU4LCAweDYyNTkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JLyogUXVhbnRhICovCi0JeyBVU0JfREVWSUNFKDB4MWEzMiwgMHgwMzA0KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIFJhbGluayAqLwotCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MjA3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDI3NzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgyODcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MzA3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDMwNzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgzMDcyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MzU3MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBTYW1zdW5nICovCiAJeyBVU0JfREVWSUNFKDB4MDRlOCwgMHgyMDE4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIFNpZW1lbnMgKi8KQEAgLTk3NCwzNiArODc2LDE4IEBACiAJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDJjKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAyZCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwMzkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDNiKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAzYyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwM2QpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDNlKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAzZiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNDApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDQxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA0MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNDcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDQ4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA0YSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNGQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogU01DICovCiAJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHg2NjE4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4NzUxMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweDc1MTIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHg3NTIyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4ODUyMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGE1MTIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhhNjE4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4YTcwMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGE3MDIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhiNTIyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4YzUyMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBTcGFya2xhbiAqLwogCXsgVVNCX0RFVklDRSgweDE1YTksIDB4MDAwNiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBTd2VleCAqLwotCXsgVVNCX0RFVklDRSgweDE3N2YsIDB4MDE1MyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxNzdmLCAweDAzMDIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4MTc3ZiwgMHgwMzEzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAogCS8qIFUtTWVkaWEqLwogCXsgVVNCX0RFVklDRSgweDE1N2UsIDB4MzAwZSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAkvKiBaQ09NICovCkBAIC0xMDEyLDEyICs4OTYsMTk1IEBACiAJLyogWmlud2VsbCAqLwogCXsgVVNCX0RFVklDRSgweDVhNTcsIDB4MDI4MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHg1YTU3LCAweDAyODIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCi0JeyBVU0JfREVWSUNFKDB4NWE1NywgMHgwMjgzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAotCXsgVVNCX0RFVklDRSgweDVhNTcsIDB4MDI4NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKLQl7IFVTQl9ERVZJQ0UoMHg1YTU3LCAweDUyNTcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCiAJLyogWnl4ZWwgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNTg2LCAweDM0MTYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisjaWZkZWYgQ09ORklHX1JUMjgwMFVTQl9SVDMwWFgKKwkvKiBBYm9jb20gKi8KKwl7IFVTQl9ERVZJQ0UoMHgwN2I4LCAweDMwNzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdiOCwgMHgzMDcxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3YjgsIDB4MzA3MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBBaXJUaWVzICovCisJeyBVU0JfREVWSUNFKDB4MWVkYSwgMHgyMzEwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEF6dXJlV2F2ZSAqLworCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzI3MyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBDb25jZXB0cm9uaWMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMTIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogQ29yZWdhICovCisJeyBVU0JfREVWSUNFKDB4MThjNSwgMHgwMDEyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEQtTGluayAqLworCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwYSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMGQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzBlKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MwZiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBFZGltYXggKi8KKwl7IFVTQl9ERVZJQ0UoMHg3MzkyLCAweDc3MTEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogRW5jb3JlICovCisJeyBVU0JfREVWSUNFKDB4MjAzZCwgMHgxNDgwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEVuR2VuaXVzICovCisJeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzAzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogR2lnYWJ5dGUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMDQ0LCAweDgwMGQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogSS1PIERBVEEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5NDUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogTVNJICovCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHgzODIwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIFBlZ2F0cm9uICovCisJeyBVU0JfREVWSUNFKDB4MWQ0ZCwgMHgwMDBjKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDFkNGQsIDB4MDAwZSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBQbGFuZXggKi8KKwl7IFVTQl9ERVZJQ0UoMHgyMDE5LCAweGFiMjUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogUXVhbnRhICovCisJeyBVU0JfREVWSUNFKDB4MWEzMiwgMHgwMzA0KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIFJhbGluayAqLworCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MjA3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDMwNzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHgzMDcxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MzA3MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBTaXRlY29tICovCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDNlKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA0MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBTTUMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweDc1MTEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogWmlud2VsbCAqLworCXsgVVNCX0RFVklDRSgweDVhNTcsIDB4MDI4MyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHg1YTU3LCAweDUyNTcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUlQyODAwVVNCX1JUMzVYWAorCS8qIEFza2V5ICovCisJeyBVU0JfREVWSUNFKDB4MTY5MCwgMHgwNzQ0KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIENpc2NvICovCisJeyBVU0JfREVWSUNFKDB4MTY3YiwgMHg0MDAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEVuR2VuaXVzICovCisJeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5ODAxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEktTyBEQVRBICovCisJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTQ0KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIFJhbGluayAqLworCXsgVVNCX0RFVklDRSgweDE0OGYsIDB4MzM3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNDhmLCAweDM1NzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTQ4ZiwgMHg4MDcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIFNpdGVjb20gKi8KKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogWmlud2VsbCAqLworCXsgVVNCX0RFVklDRSgweDVhNTcsIDB4MDI4NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKyNlbmRpZgorI2lmZGVmIENPTkZJR19SVDI4MDBVU0JfVU5LTk9XTgorCS8qCisJICogVW5jbGVhciB3aGF0IGtpbmQgb2YgZGV2aWNlcyB0aGVzZSBhcmUgKHRoZXkgYXJlbid0IHN1cHBvcnRlZCBieSB0aGUKKwkgKiB2ZW5kb3IgZHJpdmVyKS4KKwkgKi8KKwkvKiBBbGx3aW4gKi8KKwl7IFVTQl9ERVZJQ0UoMHg4NTE2LCAweDIwNzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4ODUxNiwgMHgyNzcwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDg1MTYsIDB4Mjg3MCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHg4NTE2LCAweDMwNzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4ODUxNiwgMHgzMDcxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDg1MTYsIDB4MzA3MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHg4NTE2LCAweDM1NzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogQW1pZ28gKi8KKwl7IFVTQl9ERVZJQ0UoMHgwZTBiLCAweDkwMzEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGUwYiwgMHg5MDQxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEFza2V5ICovCisJeyBVU0JfREVWSUNFKDB4MDkzMCwgMHgwYTA3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEFTVVMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3NjApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzYxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTc4NCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwYjA1LCAweDE3OTApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTc2MSwgMHgwYjA1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEF6dXJlV2F2ZSAqLworCXsgVVNCX0RFVklDRSgweDEzZDMsIDB4MzI2MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMyODQpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMzA1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEJlbGtpbiAqLworCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4ODI1YSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBCdWZmYWxvICovCisJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMTJlKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDE0OCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAxNTApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMTVkKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIENvbmNlcHRyb25pYyAqLworCXsgVVNCX0RFVklDRSgweDE0YjIsIDB4M2MwOCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNGIyLCAweDNjMTEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogQ29yZWdhICovCisJeyBVU0JfREVWSUNFKDB4MDdhYSwgMHgwMDQxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3YWEsIDB4MDA0MiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxOGM1LCAweDAwMDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogRC1MaW5rICovCisJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzBiKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA3ZDEsIDB4M2MxMyksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwN2QxLCAweDNjMTUpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDdkMSwgMHgzYzE2KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIEVuY29yZSAqLworCXsgVVNCX0RFVklDRSgweDIwM2QsIDB4MTRhMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDNkLCAweDE0YTkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogRW5HZW5pdXMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNzQwLCAweDk3MDcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTc0MCwgMHg5NzA4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4OTcwOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBHZW10ZWsgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNWE5LCAweDAwMTApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogR2lnYWJ5dGUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMDQ0LCAweDgwMGMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogSGF3a2luZyAqLworCXsgVVNCX0RFVklDRSgweDBlNjYsIDB4MDAwOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZTY2LCAweDAwMGIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogSS1PIERBVEEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNGJiLCAweDA5NDcpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDRiYiwgMHgwOTQ4KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIExldmVsT25lICovCisJeyBVU0JfREVWSUNFKDB4MTc0MCwgMHgwNjA1KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE3NDAsIDB4MDYxNSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBMaW5rc3lzICovCisJeyBVU0JfREVWSUNFKDB4MTczNywgMHgwMDc3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDE3MzcsIDB4MDA3OCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxNzM3LCAweDAwNzkpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogTW90b3JvbGEgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMDBkLCAweDkwMzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogTVNJICovCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHgzODIxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4MzgyMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDM4NzApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHgzODcxKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4ODIxYSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDgyMmEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRiMCwgMHg4NzBhKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkYjAsIDB4ODcxYSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGIwLCAweDg5OWEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogT3Zpc2xpbmsgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxYjc1LCAweDMwNzIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogUGFyYSAqLworCXsgVVNCX0RFVklDRSgweDIwYjgsIDB4ODg4OCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBQZWdhdHJvbiAqLworCXsgVVNCX0RFVklDRSgweDA1YTYsIDB4MDEwMSksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxZDRkLCAweDAwMDIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MWQ0ZCwgMHgwMDEwKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIFBsYW5leCAqLworCXsgVVNCX0RFVklDRSgweDIwMTksIDB4YWIyNCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwkvKiBRY29tICovCisJeyBVU0JfREVWSUNFKDB4MThlOCwgMHg2MjU5KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIFNpdGVjb20gKi8KKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwM2IpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDNjKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDAzZCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNDApLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDQ3KSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDBkZjYsIDB4MDA0OCksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwZGY2LCAweDAwNGEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MGRmNiwgMHgwMDRkKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIFNNQyAqLworCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4YTUxMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGE3MDEpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MDgzYSwgMHhhNzAyKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA4M2EsIDB4YzUyMiksIFVTQl9ERVZJQ0VfREFUQSgmcnQyODAwdXNiX29wcykgfSwKKwl7IFVTQl9ERVZJQ0UoMHgwODNhLCAweGQ1MjIpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJLyogU3dlZXggKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNzdmLCAweDAxNTMpLCBVU0JfREVWSUNFX0RBVEEoJnJ0MjgwMHVzYl9vcHMpIH0sCisJeyBVU0JfREVWSUNFKDB4MTc3ZiwgMHgwMzEzKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorCS8qIFp5eGVsICovCiAJeyBVU0JfREVWSUNFKDB4MDU4NiwgMHgzNDFhKSwgVVNCX0RFVklDRV9EQVRBKCZydDI4MDB1c2Jfb3BzKSB9LAorI2VuZGlmCiAJeyAwLCB9CiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyODAwdXNiLmgKaW5kZXggMWU0MzQwYS4uZDFkOGFlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MjgwMHVzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDI4MDB1c2IuaApAQCAtNzksNiArNzksOCBAQAogICovCiAjZGVmaW5lIFRYSU5GT19ERVNDX1NJWkUJCSggMSAqIHNpemVvZihfX2xlMzIpICkKICNkZWZpbmUgUlhJTkZPX0RFU0NfU0laRQkJKCAxICogc2l6ZW9mKF9fbGUzMikgKQorI2RlZmluZSBSWFdJX0RFU0NfU0laRQkJCSggNCAqIHNpemVvZihfX2xlMzIpICkKKyNkZWZpbmUgUlhEX0RFU0NfU0laRQkJCSggMSAqIHNpemVvZihfX2xlMzIpICkKIAogLyoKICAqIFRYIEluZm8gc3RydWN0dXJlCkBAIC0xMDEsNiArMTAzLDU0IEBACiAjZGVmaW5lIFRYSU5GT19XMF9VU0JfRE1BX1RYX0JVUlNUCUZJRUxEMzIoMHg4MDAwMDAwMCkKIAogLyoKKyAqIFJYIEluZm8gc3RydWN0dXJlCisgKi8KKworLyoKKyAqIFdvcmQgMAorICovCisKKyNkZWZpbmUgUlhJTkZPX1cwX1VTQl9ETUFfUlhfUEtUX0xFTglGSUVMRDMyKDB4MDAwMGZmZmYpCisKKy8qCisgKiBSWCBXSSBzdHJ1Y3R1cmUKKyAqLworCisvKgorICogV29yZDAKKyAqLworI2RlZmluZSBSWFdJX1cwX1dJUkVMRVNTX0NMSV9JRAkJRklFTEQzMigweDAwMDAwMGZmKQorI2RlZmluZSBSWFdJX1cwX0tFWV9JTkRFWAkJRklFTEQzMigweDAwMDAwMzAwKQorI2RlZmluZSBSWFdJX1cwX0JTU0lECQkJRklFTEQzMigweDAwMDAxYzAwKQorI2RlZmluZSBSWFdJX1cwX1VERgkJCUZJRUxEMzIoMHgwMDAwZTAwMCkKKyNkZWZpbmUgUlhXSV9XMF9NUERVX1RPVEFMX0JZVEVfQ09VTlQJRklFTEQzMigweDBmZmYwMDAwKQorI2RlZmluZSBSWFdJX1cwX1RJRAkJCUZJRUxEMzIoMHhmMDAwMDAwMCkKKworLyoKKyAqIFdvcmQxCisgKi8KKyNkZWZpbmUgUlhXSV9XMV9GUkFHCQkJRklFTEQzMigweDAwMDAwMDBmKQorI2RlZmluZSBSWFdJX1cxX1NFUVVFTkNFCQlGSUVMRDMyKDB4MDAwMGZmZjApCisjZGVmaW5lIFJYV0lfVzFfTUNTCQkJRklFTEQzMigweDAwN2YwMDAwKQorI2RlZmluZSBSWFdJX1cxX0JXCQkJRklFTEQzMigweDAwODAwMDAwKQorI2RlZmluZSBSWFdJX1cxX1NIT1JUX0dJCQlGSUVMRDMyKDB4MDEwMDAwMDApCisjZGVmaW5lIFJYV0lfVzFfU1RCQwkJCUZJRUxEMzIoMHgwNjAwMDAwMCkKKyNkZWZpbmUgUlhXSV9XMV9QSFlNT0RFCQkJRklFTEQzMigweGMwMDAwMDAwKQorCisvKgorICogV29yZDIKKyAqLworI2RlZmluZSBSWFdJX1cyX1JTU0kwCQkJRklFTEQzMigweDAwMDAwMGZmKQorI2RlZmluZSBSWFdJX1cyX1JTU0kxCQkJRklFTEQzMigweDAwMDBmZjAwKQorI2RlZmluZSBSWFdJX1cyX1JTU0kyCQkJRklFTEQzMigweDAwZmYwMDAwKQorCisvKgorICogV29yZDMKKyAqLworI2RlZmluZSBSWFdJX1czX1NOUjAJCQlGSUVMRDMyKDB4MDAwMDAwZmYpCisjZGVmaW5lIFJYV0lfVzNfU05SMQkJCUZJRUxEMzIoMHgwMDAwZmYwMCkKKworLyoKICAqIFJYIGRlc2NyaXB0b3IgZm9ybWF0IGZvciBSWCBSaW5nLgogICovCiAKQEAgLTExNSwyNSArMTY1LDI1IEBACiAgKiBBTVNEVTogcnggd2l0aCA4MDIuMyBoZWFkZXIsIG5vdCA4MDIuMTEgaGVhZGVyLgogICovCiAKLSNkZWZpbmUgUlhJTkZPX1cwX0JBCQkJRklFTEQzMigweDAwMDAwMDAxKQotI2RlZmluZSBSWElORk9fVzBfREFUQQkJCUZJRUxEMzIoMHgwMDAwMDAwMikKLSNkZWZpbmUgUlhJTkZPX1cwX05VTExEQVRBCQlGSUVMRDMyKDB4MDAwMDAwMDQpCi0jZGVmaW5lIFJYSU5GT19XMF9GUkFHCQkJRklFTEQzMigweDAwMDAwMDA4KQotI2RlZmluZSBSWElORk9fVzBfVU5JQ0FTVF9UT19NRQkJRklFTEQzMigweDAwMDAwMDEwKQotI2RlZmluZSBSWElORk9fVzBfTVVMVElDQVNUCQlGSUVMRDMyKDB4MDAwMDAwMjApCi0jZGVmaW5lIFJYSU5GT19XMF9CUk9BRENBU1QJCUZJRUxEMzIoMHgwMDAwMDA0MCkKLSNkZWZpbmUgUlhJTkZPX1cwX01ZX0JTUwkJRklFTEQzMigweDAwMDAwMDgwKQotI2RlZmluZSBSWElORk9fVzBfQ1JDX0VSUk9SCQlGSUVMRDMyKDB4MDAwMDAxMDApCi0jZGVmaW5lIFJYSU5GT19XMF9DSVBIRVJfRVJST1IJCUZJRUxEMzIoMHgwMDAwMDYwMCkKLSNkZWZpbmUgUlhJTkZPX1cwX0FNU0RVCQkJRklFTEQzMigweDAwMDAwODAwKQotI2RlZmluZSBSWElORk9fVzBfSFRDCQkJRklFTEQzMigweDAwMDAxMDAwKQotI2RlZmluZSBSWElORk9fVzBfUlNTSQkJCUZJRUxEMzIoMHgwMDAwMjAwMCkKLSNkZWZpbmUgUlhJTkZPX1cwX0wyUEFECQkJRklFTEQzMigweDAwMDA0MDAwKQotI2RlZmluZSBSWElORk9fVzBfQU1QRFUJCQlGSUVMRDMyKDB4MDAwMDgwMDApCi0jZGVmaW5lIFJYSU5GT19XMF9ERUNSWVBURUQJCUZJRUxEMzIoMHgwMDAxMDAwMCkKLSNkZWZpbmUgUlhJTkZPX1cwX1BMQ1BfUlNTSQkJRklFTEQzMigweDAwMDIwMDAwKQotI2RlZmluZSBSWElORk9fVzBfQ0lQSEVSX0FMRwkJRklFTEQzMigweDAwMDQwMDAwKQotI2RlZmluZSBSWElORk9fVzBfTEFTVF9BTVNEVQkJRklFTEQzMigweDAwMDgwMDAwKQotI2RlZmluZSBSWElORk9fVzBfUExDUF9TSUdOQUwJCUZJRUxEMzIoMHhmZmYwMDAwMCkKKyNkZWZpbmUgUlhEX1cwX0JBCQkJRklFTEQzMigweDAwMDAwMDAxKQorI2RlZmluZSBSWERfVzBfREFUQQkJCUZJRUxEMzIoMHgwMDAwMDAwMikKKyNkZWZpbmUgUlhEX1cwX05VTExEQVRBCQkJRklFTEQzMigweDAwMDAwMDA0KQorI2RlZmluZSBSWERfVzBfRlJBRwkJCUZJRUxEMzIoMHgwMDAwMDAwOCkKKyNkZWZpbmUgUlhEX1cwX1VOSUNBU1RfVE9fTUUJCUZJRUxEMzIoMHgwMDAwMDAxMCkKKyNkZWZpbmUgUlhEX1cwX01VTFRJQ0FTVAkJRklFTEQzMigweDAwMDAwMDIwKQorI2RlZmluZSBSWERfVzBfQlJPQURDQVNUCQlGSUVMRDMyKDB4MDAwMDAwNDApCisjZGVmaW5lIFJYRF9XMF9NWV9CU1MJCQlGSUVMRDMyKDB4MDAwMDAwODApCisjZGVmaW5lIFJYRF9XMF9DUkNfRVJST1IJCUZJRUxEMzIoMHgwMDAwMDEwMCkKKyNkZWZpbmUgUlhEX1cwX0NJUEhFUl9FUlJPUgkJRklFTEQzMigweDAwMDAwNjAwKQorI2RlZmluZSBSWERfVzBfQU1TRFUJCQlGSUVMRDMyKDB4MDAwMDA4MDApCisjZGVmaW5lIFJYRF9XMF9IVEMJCQlGSUVMRDMyKDB4MDAwMDEwMDApCisjZGVmaW5lIFJYRF9XMF9SU1NJCQkJRklFTEQzMigweDAwMDAyMDAwKQorI2RlZmluZSBSWERfVzBfTDJQQUQJCQlGSUVMRDMyKDB4MDAwMDQwMDApCisjZGVmaW5lIFJYRF9XMF9BTVBEVQkJCUZJRUxEMzIoMHgwMDAwODAwMCkKKyNkZWZpbmUgUlhEX1cwX0RFQ1JZUFRFRAkJRklFTEQzMigweDAwMDEwMDAwKQorI2RlZmluZSBSWERfVzBfUExDUF9SU1NJCQlGSUVMRDMyKDB4MDAwMjAwMDApCisjZGVmaW5lIFJYRF9XMF9DSVBIRVJfQUxHCQlGSUVMRDMyKDB4MDAwNDAwMDApCisjZGVmaW5lIFJYRF9XMF9MQVNUX0FNU0RVCQlGSUVMRDMyKDB4MDAwODAwMDApCisjZGVmaW5lIFJYRF9XMF9QTENQX1NJR05BTAkJRklFTEQzMigweGZmZjAwMDAwKQogCiAjZW5kaWYgLyogUlQyODAwVVNCX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDAuaAppbmRleCBkY2ZjOGMyLi5kOWRhYTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMC5oCkBAIC0xMDQsNiArMTA0LDEyIEBACiAjZGVmaW5lIEdFVF9EVVJBVElPTl9SRVMoX19zaXplLCBfX3JhdGUpKCgoX19zaXplKSAqIDggKiAxMCkgJSAoX19yYXRlKSkKIAogLyoKKyAqIERldGVybWluZSB0aGUgbnVtYmVyIG9mIEwyIHBhZGRpbmcgYnl0ZXMgcmVxdWlyZWQgYmV0d2VlbiB0aGUgaGVhZGVyIGFuZAorICogdGhlIHBheWxvYWQuCisgKi8KKyNkZWZpbmUgTDJQQURfU0laRShfX2hkcmxlbikJKC0oX19oZHJsZW4pICYgMykKKworLyoKICAqIERldGVybWluZSB0aGUgYWxpZ25tZW50IHJlcXVpcmVtZW50LAogICogdG8gbWFrZSBzdXJlIHRoZSA4MDIuMTEgcGF5bG9hZCBpcyBwYWRkZWQgdG8gYSA0LWJ5dGUgYm91bmRyYXJ5CiAgKiB3ZSBtdXN0IGRldGVybWluZSB0aGUgYWRkcmVzcyBvZiB0aGUgcGF5bG9hZCBhbmQgY2FsY3VsYXRlIHRoZQpAQCAtMTU0LDYgKzE2MCw3IEBACiBlbnVtIHJ0MngwMF9jaGlwX2ludGYgewogCVJUMlgwMF9DSElQX0lOVEZfUENJLAogCVJUMlgwMF9DSElQX0lOVEZfVVNCLAorCVJUMlgwMF9DSElQX0lOVEZfU09DLAogfTsKIAogLyoKQEAgLTE2MywyNSArMTcwLDI2IEBACiAgKi8KIHN0cnVjdCBydDJ4MDBfY2hpcCB7CiAJdTE2IHJ0OwotI2RlZmluZSBSVDI0NjAJCTB4MDEwMQotI2RlZmluZSBSVDI1NjAJCTB4MDIwMQotI2RlZmluZSBSVDI1NzAJCTB4MTIwMQotI2RlZmluZSBSVDI1NjFzCQkweDAzMDEJLyogVHVyYm8gKi8KLSNkZWZpbmUgUlQyNTYxCQkweDAzMDIKLSNkZWZpbmUgUlQyNjYxCQkweDA0MDEKLSNkZWZpbmUgUlQyNTcxCQkweDEzMDAKLSNkZWZpbmUgUlQyODYwCQkweDA2MDEJLyogMi40R0h6IFBDSS9DQiAqLwotI2RlZmluZSBSVDI4NjBECQkweDA2ODEJLyogMi40R0h6LCA1R0h6IFBDSS9DQiAqLwotI2RlZmluZSBSVDI4OTAJCTB4MDcwMQkvKiAyLjRHSHogUENJZSAqLwotI2RlZmluZSBSVDI4OTBECQkweDA3ODEJLyogMi40R0h6LCA1R0h6IFBDSWUgKi8KKyNkZWZpbmUgUlQyNDYwCQkweDI0NjAKKyNkZWZpbmUgUlQyNTYwCQkweDI1NjAKKyNkZWZpbmUgUlQyNTcwCQkweDI1NzAKKyNkZWZpbmUgUlQyNjYxCQkweDI2NjEKKyNkZWZpbmUgUlQyNTczCQkweDI1NzMKKyNkZWZpbmUgUlQyODYwCQkweDI4NjAJLyogMi40R0h6IFBDSS9DQiAqLworI2RlZmluZSBSVDI4NzAJCTB4Mjg3MAorI2RlZmluZSBSVDI4NzIJCTB4Mjg3MgogI2RlZmluZSBSVDI4ODAJCTB4Mjg4MAkvKiBXU09DICovCisjZGVmaW5lIFJUMjg4MwkJMHgyODgzCS8qIFdTT0MgKi8KKyNkZWZpbmUgUlQyODkwCQkweDI4OTAJLyogMi40R0h6IFBDSWUgKi8KICNkZWZpbmUgUlQzMDUyCQkweDMwNTIJLyogV1NPQyAqLworI2RlZmluZSBSVDMwNzAJCTB4MzA3MAorI2RlZmluZSBSVDMwNzEJCTB4MzA3MQogI2RlZmluZSBSVDMwOTAJCTB4MzA5MAkvKiAyLjRHSHogUENJZSAqLwotI2RlZmluZSBSVDI4NzAJCTB4MTYwMAotI2RlZmluZSBSVDMwNzAJCTB4MTgwMAorI2RlZmluZSBSVDMzOTAJCTB4MzM5MAorI2RlZmluZSBSVDM1NzIJCTB4MzU3MgogCiAJdTE2IHJmOwotCXUzMiByZXY7CisJdTE2IHJldjsKIAogCWVudW0gcnQyeDAwX2NoaXBfaW50ZiBpbnRmOwogfTsKQEAgLTkxMSw1MSArOTE5LDMwIEBACiAgKiBDaGlwc2V0IGhhbmRsZXJzCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDBfc2V0X2NoaXAoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKLQkJCQkgICBjb25zdCB1MTYgcnQsIGNvbnN0IHUxNiByZiwgY29uc3QgdTMyIHJldikKKwkJCQkgICBjb25zdCB1MTYgcnQsIGNvbnN0IHUxNiByZiwgY29uc3QgdTE2IHJldikKIHsKIAlydDJ4MDBkZXYtPmNoaXAucnQgPSBydDsKIAlydDJ4MDBkZXYtPmNoaXAucmYgPSByZjsKIAlydDJ4MDBkZXYtPmNoaXAucmV2ID0gcmV2OwotfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwX3NldF9jaGlwX3J0KHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJICAgICAgY29uc3QgdTE2IHJ0KQotewotCXJ0MngwMGRldi0+Y2hpcC5ydCA9IHJ0OwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcnQyeDAwX3NldF9jaGlwX3JmKHN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYsCi0JCQkJICAgICAgY29uc3QgdTE2IHJmLCBjb25zdCB1MzIgcmV2KQotewotCXJ0MngwMF9zZXRfY2hpcChydDJ4MDBkZXYsIHJ0MngwMGRldi0+Y2hpcC5ydCwgcmYsIHJldik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDBfcHJpbnRfY2hpcChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQotewogCUlORk8ocnQyeDAwZGV2LAotCSAgICAgIkNoaXBzZXQgZGV0ZWN0ZWQgLSBydDogJTA0eCwgcmY6ICUwNHgsIHJldjogJTA4eC5cbiIsCisJICAgICAiQ2hpcHNldCBkZXRlY3RlZCAtIHJ0OiAlMDR4LCByZjogJTA0eCwgcmV2OiAlMDR4LlxuIiwKIAkgICAgIHJ0MngwMGRldi0+Y2hpcC5ydCwgcnQyeDAwZGV2LT5jaGlwLnJmLCBydDJ4MDBkZXYtPmNoaXAucmV2KTsKIH0KIAotc3RhdGljIGlubGluZSBjaGFyIHJ0MngwMF9ydChjb25zdCBzdHJ1Y3QgcnQyeDAwX2NoaXAgKmNoaXBzZXQsIGNvbnN0IHUxNiBjaGlwKQorc3RhdGljIGlubGluZSBjaGFyIHJ0MngwMF9ydChzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LCBjb25zdCB1MTYgcnQpCiB7Ci0JcmV0dXJuIChjaGlwc2V0LT5ydCA9PSBjaGlwKTsKKwlyZXR1cm4gKHJ0MngwMGRldi0+Y2hpcC5ydCA9PSBydCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY2hhciBydDJ4MDBfcmYoY29uc3Qgc3RydWN0IHJ0MngwMF9jaGlwICpjaGlwc2V0LCBjb25zdCB1MTYgY2hpcCkKK3N0YXRpYyBpbmxpbmUgY2hhciBydDJ4MDBfcmYoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwgY29uc3QgdTE2IHJmKQogewotCXJldHVybiAoY2hpcHNldC0+cmYgPT0gY2hpcCk7CisJcmV0dXJuIChydDJ4MDBkZXYtPmNoaXAucmYgPT0gcmYpOwogfQogCi1zdGF0aWMgaW5saW5lIHUzMiBydDJ4MDBfcmV2KGNvbnN0IHN0cnVjdCBydDJ4MDBfY2hpcCAqY2hpcHNldCkKK3N0YXRpYyBpbmxpbmUgdTE2IHJ0MngwMF9yZXYoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlyZXR1cm4gY2hpcHNldC0+cmV2OwotfQotCi1zdGF0aWMgaW5saW5lIGJvb2wgcnQyeDAwX2NoZWNrX3Jldihjb25zdCBzdHJ1Y3QgcnQyeDAwX2NoaXAgKmNoaXBzZXQsCi0JCQkJICAgIGNvbnN0IHUzMiBtYXNrLCBjb25zdCB1MzIgcmV2KQotewotCXJldHVybiAoKGNoaXBzZXQtPnJldiAmIG1hc2spID09IHJldik7CisJcmV0dXJuIHJ0MngwMGRldi0+Y2hpcC5yZXY7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBydDJ4MDBfc2V0X2NoaXBfaW50ZihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2LApAQCAtOTY0LDIwICs5NTEsMjUgQEAKIAlydDJ4MDBkZXYtPmNoaXAuaW50ZiA9IGludGY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBydDJ4MDBfaW50Zihjb25zdCBzdHJ1Y3QgcnQyeDAwX2NoaXAgKmNoaXBzZXQsCitzdGF0aWMgaW5saW5lIGJvb2wgcnQyeDAwX2ludGYoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiwKIAkJCSAgICAgICBlbnVtIHJ0MngwMF9jaGlwX2ludGYgaW50ZikKIHsKLQlyZXR1cm4gKGNoaXBzZXQtPmludGYgPT0gaW50Zik7CisJcmV0dXJuIChydDJ4MDBkZXYtPmNoaXAuaW50ZiA9PSBpbnRmKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHJ0MngwMF9pbnRmX2lzX3BjaShzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQorc3RhdGljIGlubGluZSBib29sIHJ0MngwMF9pc19wY2koc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlyZXR1cm4gcnQyeDAwX2ludGYoJnJ0MngwMGRldi0+Y2hpcCwgUlQyWDAwX0NISVBfSU5URl9QQ0kpOworCXJldHVybiBydDJ4MDBfaW50ZihydDJ4MDBkZXYsIFJUMlgwMF9DSElQX0lOVEZfUENJKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHJ0MngwMF9pbnRmX2lzX3VzYihzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2KQorc3RhdGljIGlubGluZSBib29sIHJ0MngwMF9pc191c2Ioc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKLQlyZXR1cm4gcnQyeDAwX2ludGYoJnJ0MngwMGRldi0+Y2hpcCwgUlQyWDAwX0NISVBfSU5URl9VU0IpOworCXJldHVybiBydDJ4MDBfaW50ZihydDJ4MDBkZXYsIFJUMlgwMF9DSElQX0lOVEZfVVNCKTsKK30KKworc3RhdGljIGlubGluZSBib29sIHJ0MngwMF9pc19zb2Moc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKK3sKKwlyZXR1cm4gcnQyeDAwX2ludGYocnQyeDAwZGV2LCBSVDJYMDBfQ0hJUF9JTlRGX1NPQyk7CiB9CiAKIC8qKgpAQCAtMTAxOSw5ICsxMDExLDkgQEAKIGludCBydDJ4MDBtYWNfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogdm9pZCBydDJ4MDBtYWNfc3RvcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiBpbnQgcnQyeDAwbWFjX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpOworCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpOwogdm9pZCBydDJ4MDBtYWNfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZik7CisJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CiBpbnQgcnQyeDAwbWFjX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpOwogdm9pZCBydDJ4MDBtYWNfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQl1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKQEAgLTEwMzgsOCArMTAzMCw2IEBACiAjZW5kaWYgLyogQ09ORklHX1JUMlgwMF9MSUJfQ1JZUFRPICovCiBpbnQgcnQyeDAwbWFjX2dldF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCXN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzICpzdGF0cyk7Ci1pbnQgcnQyeDAwbWFjX2dldF90eF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKTsKIHZvaWQgcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCiAJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZWJ1Zy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKaW5kZXggN2QzMjNhNy4uMjhhMWM0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRlYnVnLmMKQEAgLTEwOSw3ICsxMDksNyBAQAogCiAJLyoKIAkgKiBIVyBjcnlwdG8gc3RhdGlzdGljcy4KLQkgKiBBbGwgc3RhdGlzdGljcyBhcmUgc3RvcmVkIHNlcGVyYXRlbHkgcGVyIGNpcGhlciB0eXBlLgorCSAqIEFsbCBzdGF0aXN0aWNzIGFyZSBzdG9yZWQgc2VwYXJhdGVseSBwZXIgY2lwaGVyIHR5cGUuCiAJICovCiAJc3RydWN0IHJ0MngwMGRlYnVnX2NyeXB0byBjcnlwdG9fc3RhdHNbQ0lQSEVSX01BWF07CiAKQEAgLTE4NCw3ICsxODQsNyBAQAogCWR1bXBfaGRyLT5kYXRhX2xlbmd0aCA9IGNwdV90b19sZTMyKHNrYi0+bGVuKTsKIAlkdW1wX2hkci0+Y2hpcF9ydCA9IGNwdV90b19sZTE2KHJ0MngwMGRldi0+Y2hpcC5ydCk7CiAJZHVtcF9oZHItPmNoaXBfcmYgPSBjcHVfdG9fbGUxNihydDJ4MDBkZXYtPmNoaXAucmYpOwotCWR1bXBfaGRyLT5jaGlwX3JldiA9IGNwdV90b19sZTMyKHJ0MngwMGRldi0+Y2hpcC5yZXYpOworCWR1bXBfaGRyLT5jaGlwX3JldiA9IGNwdV90b19sZTE2KHJ0MngwMGRldi0+Y2hpcC5yZXYpOwogCWR1bXBfaGRyLT50eXBlID0gY3B1X3RvX2xlMTYodHlwZSk7CiAJZHVtcF9oZHItPnF1ZXVlX2luZGV4ID0gZGVzYy0+ZW50cnktPnF1ZXVlLT5xaWQ7CiAJZHVtcF9oZHItPmVudHJ5X2luZGV4ID0gZGVzYy0+ZW50cnktPmVudHJ5X2lkeDsKQEAgLTU3Myw3ICs1NzMsNyBAQAogCWJsb2ItPmRhdGEgPSBkYXRhOwogCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAicnQgY2hpcDpcdCUwNHhcbiIsIGludGYtPnJ0MngwMGRldi0+Y2hpcC5ydCk7CiAJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJyZiBjaGlwOlx0JTA0eFxuIiwgaW50Zi0+cnQyeDAwZGV2LT5jaGlwLnJmKTsKLQlkYXRhICs9IHNwcmludGYoZGF0YSwgInJldmlzaW9uOlx0JTA4eFxuIiwgaW50Zi0+cnQyeDAwZGV2LT5jaGlwLnJldik7CisJZGF0YSArPSBzcHJpbnRmKGRhdGEsICJyZXZpc2lvbjpcdCUwNHhcbiIsIGludGYtPnJ0MngwMGRldi0+Y2hpcC5yZXYpOwogCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiXG4iKTsKIAlkYXRhICs9IHNwcmludGYoZGF0YSwgInJlZ2lzdGVyXHRiYXNlXHR3b3Jkc1x0d29yZHNpemVcbiIpOwogCWRhdGEgKz0gc3ByaW50ZihkYXRhLCAiY3NyXHQlZFx0JWRcdCVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMGRldi5jCmluZGV4IDI2NWU2NmQuLmRkNWFiOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBkZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwZGV2LmMKQEAgLTM4NSw5ICszODUsNiBAQAogCW1lbXNldCgmcnhkZXNjLCAwLCBzaXplb2YocnhkZXNjKSk7CiAJcnQyeDAwZGV2LT5vcHMtPmxpYi0+ZmlsbF9yeGRvbmUoZW50cnksICZyeGRlc2MpOwogCi0JLyogVHJpbSBidWZmZXIgdG8gY29ycmVjdCBzaXplICovCi0Jc2tiX3RyaW0oZW50cnktPnNrYiwgcnhkZXNjLnNpemUpOwotCiAJLyoKIAkgKiBUaGUgZGF0YSBiZWhpbmQgdGhlIGllZWU4MDIxMSBoZWFkZXIgbXVzdCBiZQogCSAqIGFsaWduZWQgb24gYSA0IGJ5dGUgYm91bmRhcnkuCkBAIC0zOTcsMTggKzM5NCwyMyBAQAogCS8qCiAJICogSGFyZHdhcmUgbWlnaHQgaGF2ZSBzdHJpcHBlZCB0aGUgSVYvRUlWL0lDViBkYXRhLAogCSAqIGluIHRoYXQgY2FzZSBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBkYXRhIHdhcwotCSAqIHByb3ZpZGVkIHNlcGVyYXRlbHkgKHRocm91Z2ggaGFyZHdhcmUgZGVzY3JpcHRvcikKKwkgKiBwcm92aWRlZCBzZXBhcmF0ZWx5ICh0aHJvdWdoIGhhcmR3YXJlIGRlc2NyaXB0b3IpCiAJICogaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQgcmVpbnNlcnQgdGhlIGRhdGEgaW50byB0aGUgZnJhbWUuCiAJICovCiAJaWYgKChyeGRlc2MuZGV2X2ZsYWdzICYgUlhET05FX0NSWVBUT19JVikgJiYKIAkgICAgKHJ4ZGVzYy5mbGFncyAmIFJYX0ZMQUdfSVZfU1RSSVBQRUQpKQogCQlydDJ4MDBjcnlwdG9fcnhfaW5zZXJ0X2l2KGVudHJ5LT5za2IsIGhlYWRlcl9sZW5ndGgsCiAJCQkJCSAgJnJ4ZGVzYyk7Ci0JZWxzZSBpZiAocnhkZXNjLmRldl9mbGFncyAmIFJYRE9ORV9MMlBBRCkKKwllbHNlIGlmIChoZWFkZXJfbGVuZ3RoICYmCisJCSAocnhkZXNjLnNpemUgPiBoZWFkZXJfbGVuZ3RoKSAmJgorCQkgKHJ4ZGVzYy5kZXZfZmxhZ3MgJiBSWERPTkVfTDJQQUQpKQogCQlydDJ4MDBxdWV1ZV9yZW1vdmVfbDJwYWQoZW50cnktPnNrYiwgaGVhZGVyX2xlbmd0aCk7CiAJZWxzZQogCQlydDJ4MDBxdWV1ZV9hbGlnbl9wYXlsb2FkKGVudHJ5LT5za2IsIGhlYWRlcl9sZW5ndGgpOwogCisJLyogVHJpbSBidWZmZXIgdG8gY29ycmVjdCBzaXplICovCisJc2tiX3RyaW0oZW50cnktPnNrYiwgcnhkZXNjLnNpemUpOworCiAJLyoKIAkgKiBDaGVjayBpZiB0aGUgZnJhbWUgd2FzIHJlY2VpdmVkIHVzaW5nIEhULiBJbiB0aGF0IGNhc2UsCiAJICogdGhlIHJhdGUgaXMgdGhlIE1DUyBpbmRleCBhbmQgc2hvdWxkIGJlIHBhc3NlZCB0byBtYWM4MDIxMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMG1hYy5jCmluZGV4IGRlNTQ5YzIuLmFiYmQ4NTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBtYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwbWFjLmMKQEAgLTE4NywxMCArMTg3LDEwIEBACiBFWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfc3RvcCk7CiAKIGludCBydDJ4MDBtYWNfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKLQlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zihjb25mLT52aWYpOworCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKHZpZik7CiAJc3RydWN0IGRhdGFfcXVldWUgKnF1ZXVlID0gcnQyeDAwcXVldWVfZ2V0X3F1ZXVlKHJ0MngwMGRldiwgUUlEX0JFQUNPTik7CiAJc3RydWN0IHF1ZXVlX2VudHJ5ICplbnRyeSA9IE5VTEw7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0yMDMsNyArMjAzLDcgQEAKIAkgICAgIXRlc3RfYml0KERFVklDRV9TVEFURV9TVEFSVEVELCAmcnQyeDAwZGV2LT5mbGFncykpCiAJCXJldHVybiAtRU5PREVWOwogCi0Jc3dpdGNoIChjb25mLT50eXBlKSB7CisJc3dpdGNoICh2aWYtPnR5cGUpIHsKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgogCQkvKgogCQkgKiBXZSBkb24ndCBzdXBwb3J0IG1peGVkIGNvbWJpbmF0aW9ucyBvZgpAQCAtMjYzLDcgKzI2Myw3IEBACiAJICogaW5jcmVhc2UgaW50ZXJmYWNlIGNvdW50IGFuZCBzdGFydCBpbml0aWFsaXphdGlvbi4KIAkgKi8KIAotCWlmIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQorCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCiAJCXJ0MngwMGRldi0+aW50Zl9hcF9jb3VudCsrOwogCWVsc2UKIAkJcnQyeDAwZGV2LT5pbnRmX3N0YV9jb3VudCsrOwpAQCAtMjczLDE2ICsyNzMsMTYgQEAKIAltdXRleF9pbml0KCZpbnRmLT5iZWFjb25fc2tiX211dGV4KTsKIAlpbnRmLT5iZWFjb24gPSBlbnRyeTsKIAotCWlmIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQotCQltZW1jcHkoJmludGYtPmJzc2lkLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCW1lbWNweSgmaW50Zi0+bWFjLCBjb25mLT5tYWNfYWRkciwgRVRIX0FMRU4pOworCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCisJCW1lbWNweSgmaW50Zi0+YnNzaWQsIHZpZi0+YWRkciwgRVRIX0FMRU4pOworCW1lbWNweSgmaW50Zi0+bWFjLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsKIAogCS8qCiAJICogVGhlIE1BQyBhZGRkcmVzcyBtdXN0IGJlIGNvbmZpZ3VyZWQgYWZ0ZXIgdGhlIGRldmljZQogCSAqIGhhcyBiZWVuIGluaXRpYWxpemVkLiBPdGhlcndpc2UgdGhlIGRldmljZSBjYW4gcmVzZXQKIAkgKiB0aGUgTUFDIHJlZ2lzdGVycy4KIAkgKi8KLQlydDJ4MDBsaWJfY29uZmlnX2ludGYocnQyeDAwZGV2LCBpbnRmLCBjb25mLT50eXBlLCBpbnRmLT5tYWMsIE5VTEwpOworCXJ0MngwMGxpYl9jb25maWdfaW50ZihydDJ4MDBkZXYsIGludGYsIHZpZi0+dHlwZSwgaW50Zi0+bWFjLCBOVUxMKTsKIAogCS8qCiAJICogU29tZSBmaWx0ZXJzIGRlcGVuZCBvbiB0aGUgY3VycmVudCB3b3JraW5nIG1vZGUuIFdlIGNhbiBmb3JjZQpAQCAtMjk2LDEwICsyOTYsMTAgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHJ0MngwMG1hY19hZGRfaW50ZXJmYWNlKTsKIAogdm9pZCBydDJ4MDBtYWNfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBydDJ4MDBfZGV2ICpydDJ4MDBkZXYgPSBody0+cHJpdjsKLQlzdHJ1Y3QgcnQyeDAwX2ludGYgKmludGYgPSB2aWZfdG9faW50Zihjb25mLT52aWYpOworCXN0cnVjdCBydDJ4MDBfaW50ZiAqaW50ZiA9IHZpZl90b19pbnRmKHZpZik7CiAKIAkvKgogCSAqIERvbid0IGFsbG93IGludGVyZmFjZXMgdG8gYmUgcmVtb3ZlIHdoaWxlCkBAIC0zMDcsMTEgKzMwNywxMSBAQAogCSAqIG5vIGludGVyZmFjZSBpcyBwcmVzZW50LgogCSAqLwogCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSB8fAotCSAgICAoY29uZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCAmJiAhcnQyeDAwZGV2LT5pbnRmX2FwX2NvdW50KSB8fAotCSAgICAoY29uZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJiAhcnQyeDAwZGV2LT5pbnRmX3N0YV9jb3VudCkpCisJICAgICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYgIXJ0MngwMGRldi0+aW50Zl9hcF9jb3VudCkgfHwKKwkgICAgKHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJiAhcnQyeDAwZGV2LT5pbnRmX3N0YV9jb3VudCkpCiAJCXJldHVybjsKIAotCWlmIChjb25mLT50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQKQorCWlmICh2aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCiAJCXJ0MngwMGRldi0+aW50Zl9hcF9jb3VudC0tOwogCWVsc2UKIAkJcnQyeDAwZGV2LT5pbnRmX3N0YV9jb3VudC0tOwpAQCAtNTU1LDIyICs1NTUsNiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocnQyeDAwbWFjX2dldF9zdGF0cyk7CiAKLWludCBydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJICAgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMpCi17Ci0Jc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldiA9IGh3LT5wcml2OwotCXVuc2lnbmVkIGludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IHJ0MngwMGRldi0+b3BzLT50eF9xdWV1ZXM7IGkrKykgewotCQlzdGF0c1tpXS5sZW4gPSBydDJ4MDBkZXYtPnR4W2ldLmxlbmd0aDsKLQkJc3RhdHNbaV0ubGltaXQgPSBydDJ4MDBkZXYtPnR4W2ldLmxpbWl0OwotCQlzdGF0c1tpXS5jb3VudCA9IHJ0MngwMGRldi0+dHhbaV0uY291bnQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChydDJ4MDBtYWNfZ2V0X3R4X3N0YXRzKTsKLQogdm9pZCBydDJ4MDBtYWNfYnNzX2luZm9fY2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkJCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5jCmluZGV4IDBmZWI0ZDAuLjA0NzEyM2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmMKQEAgLTQxLDYgKzQxLDkgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIAorCWlmICghdGVzdF9iaXQoREVWSUNFX1NUQVRFX1BSRVNFTlQsICZydDJ4MDBkZXYtPmZsYWdzKSkKKwkJcmV0dXJuIDA7CisKIAlmb3IgKGkgPSAwOyBpIDwgUkVHSVNURVJfQlVTWV9DT1VOVDsgaSsrKSB7CiAJCXJ0MngwMHBjaV9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgb2Zmc2V0LCByZWcpOwogCQlpZiAoIXJ0MngwMF9nZXRfZmllbGQzMigqcmVnLCBmaWVsZCkpCkBAIC0yNjksNyArMjcyLDYgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAlzdHJ1Y3QgcnQyeDAwX2RldiAqcnQyeDAwZGV2OwogCWludCByZXR2YWw7Ci0JdTE2IGNoaXA7CiAKIAlyZXR2YWwgPSBwY2lfcmVxdWVzdF9yZWdpb25zKHBjaV9kZXYsIHBjaV9uYW1lKHBjaV9kZXYpKTsKIAlpZiAocmV0dmFsKSB7CkBAIC0zMTIsMTIgKzMxNCw2IEBACiAKIAlydDJ4MDBfc2V0X2NoaXBfaW50ZihydDJ4MDBkZXYsIFJUMlgwMF9DSElQX0lOVEZfUENJKTsKIAotCS8qCi0JICogRGV0ZXJtaW5lIFJUIGNoaXBzZXQgYnkgcmVhZGluZyBQQ0kgaGVhZGVyLgotCSAqLwotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBjaV9kZXYsIFBDSV9ERVZJQ0VfSUQsICZjaGlwKTsKLQlydDJ4MDBfc2V0X2NoaXBfcnQocnQyeDAwZGV2LCBjaGlwKTsKLQogCXJldHZhbCA9IHJ0MngwMHBjaV9hbGxvY19yZWcocnQyeDAwZGV2KTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGV4aXRfZnJlZV9kZXZpY2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwcGNpLmgKaW5kZXggZDRmOTQ0OS4uODE0OWZmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBwY2kuaApAQCAtMjcsNiArMjcsNyBAQAogI2RlZmluZSBSVDJYMDBQQ0lfSAogCiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KIAogLyoKICAqIFRoaXMgdmFyaWFibGUgc2hvdWxkIGJlIHVzZWQgd2l0aCB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKaW5kZXggOTkxNWEwOS4uNWI2Yjc4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmMKQEAgLTE3Nyw1NSArMTc3LDQ1IEBACiAKIHZvaWQgcnQyeDAwcXVldWVfaW5zZXJ0X2wycGFkKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkZXJfbGVuZ3RoKQogewotCXN0cnVjdCBza2JfZnJhbWVfZGVzYyAqc2tiZGVzYyA9IGdldF9za2JfZnJhbWVfZGVzYyhza2IpOwotCXVuc2lnbmVkIGludCBmcmFtZV9sZW5ndGggPSBza2ItPmxlbjsKKwl1bnNpZ25lZCBpbnQgcGF5bG9hZF9sZW5ndGggPSBza2ItPmxlbiAtIGhlYWRlcl9sZW5ndGg7CiAJdW5zaWduZWQgaW50IGhlYWRlcl9hbGlnbiA9IEFMSUdOX1NJWkUoc2tiLCAwKTsKIAl1bnNpZ25lZCBpbnQgcGF5bG9hZF9hbGlnbiA9IEFMSUdOX1NJWkUoc2tiLCBoZWFkZXJfbGVuZ3RoKTsKLQl1bnNpZ25lZCBpbnQgbDJwYWQgPSA0IC0gKHBheWxvYWRfYWxpZ24gLSBoZWFkZXJfYWxpZ24pOworCXVuc2lnbmVkIGludCBsMnBhZCA9IHBheWxvYWRfbGVuZ3RoID8gTDJQQURfU0laRShoZWFkZXJfbGVuZ3RoKSA6IDA7CiAKLQlpZiAoaGVhZGVyX2FsaWduID09IHBheWxvYWRfYWxpZ24pIHsKLQkJLyoKLQkJICogQm90aCBoZWFkZXIgYW5kIHBheWxvYWQgbXVzdCBiZSBtb3ZlZCB0aGUgc2FtZQotCQkgKiBhbW91bnQgb2YgYnl0ZXMgdG8gYWxpZ24gdGhlbSBwcm9wZXJseS4gVGhpcyBtZWFucwotCQkgKiB3ZSBkb24ndCB1c2UgdGhlIEwyIHBhZGRpbmcgYnV0IGp1c3QgbW92ZSB0aGUgZW50aXJlCi0JCSAqIGZyYW1lLgotCQkgKi8KLQkJcnQyeDAwcXVldWVfYWxpZ25fZnJhbWUoc2tiKTsKLQl9IGVsc2UgaWYgKCFwYXlsb2FkX2FsaWduKSB7Ci0JCS8qCi0JCSAqIFNpbXBsZSBMMiBwYWRkaW5nLCBvbmx5IHRoZSBoZWFkZXIgbmVlZHMgdG8gYmUgbW92ZWQsCi0JCSAqIHRoZSBwYXlsb2FkIGlzIGFscmVhZHkgcHJvcGVybHkgYWxpZ25lZC4KLQkJICovCi0JCXNrYl9wdXNoKHNrYiwgaGVhZGVyX2FsaWduKTsKLQkJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIGhlYWRlcl9hbGlnbiwgZnJhbWVfbGVuZ3RoKTsKLQkJc2tiZGVzYy0+ZmxhZ3MgfD0gU0tCREVTQ19MMl9QQURERUQ7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICoKLQkJICogQ29tcGxpY2F0ZWQgTDIgcGFkZGluZywgYm90aCBoZWFkZXIgYW5kIHBheWxvYWQgbmVlZAotCQkgKiB0byBiZSBtb3ZlZC4gQnkgZGVmYXVsdCB3ZSBvbmx5IG1vdmUgdG8gdGhlIHN0YXJ0Ci0JCSAqIG9mIHRoZSBidWZmZXIsIHNvIG91ciBoZWFkZXIgYWxpZ25tZW50IG5lZWRzIHRvIGJlCi0JCSAqIGluY3JlYXNlZCBpZiB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20gZm9yIHRoZSBoZWFkZXIKLQkJICogdG8gYmUgbW92ZWQuCi0JCSAqLwotCQlpZiAocGF5bG9hZF9hbGlnbiA+IGhlYWRlcl9hbGlnbikKLQkJCWhlYWRlcl9hbGlnbiArPSA0OworCS8qCisJICogQWRqdXN0IHRoZSBoZWFkZXIgYWxpZ25tZW50IGlmIHRoZSBwYXlsb2FkIG5lZWRzIHRvIGJlIG1vdmVkIG1vcmUKKwkgKiB0aGFuIHRoZSBoZWFkZXIuCisJICovCisJaWYgKHBheWxvYWRfYWxpZ24gPiBoZWFkZXJfYWxpZ24pCisJCWhlYWRlcl9hbGlnbiArPSA0OwogCi0JCXNrYl9wdXNoKHNrYiwgaGVhZGVyX2FsaWduKTsKLQkJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIGhlYWRlcl9hbGlnbiwgaGVhZGVyX2xlbmd0aCk7CisJLyogVGhlcmUgaXMgbm90aGluZyB0byBkbyBpZiBubyBhbGlnbm1lbnQgaXMgbmVlZGVkICovCisJaWYgKCFoZWFkZXJfYWxpZ24pCisJCXJldHVybjsKKworCS8qIFJlc2VydmUgdGhlIGFtb3VudCBvZiBzcGFjZSBuZWVkZWQgaW4gZnJvbnQgb2YgdGhlIGZyYW1lICovCisJc2tiX3B1c2goc2tiLCBoZWFkZXJfYWxpZ24pOworCisJLyoKKwkgKiBNb3ZlIHRoZSBoZWFkZXIuCisJICovCisJbWVtbW92ZShza2ItPmRhdGEsIHNrYi0+ZGF0YSArIGhlYWRlcl9hbGlnbiwgaGVhZGVyX2xlbmd0aCk7CisKKwkvKiBNb3ZlIHRoZSBwYXlsb2FkLCBpZiBwcmVzZW50IGFuZCBpZiByZXF1aXJlZCAqLworCWlmIChwYXlsb2FkX2xlbmd0aCAmJiBwYXlsb2FkX2FsaWduKQogCQltZW1tb3ZlKHNrYi0+ZGF0YSArIGhlYWRlcl9sZW5ndGggKyBsMnBhZCwKIAkJCXNrYi0+ZGF0YSArIGhlYWRlcl9sZW5ndGggKyBsMnBhZCArIHBheWxvYWRfYWxpZ24sCi0JCQlmcmFtZV9sZW5ndGggLSBoZWFkZXJfbGVuZ3RoKTsKLQkJc2tiZGVzYy0+ZmxhZ3MgfD0gU0tCREVTQ19MMl9QQURERUQ7Ci0JfQorCQkJcGF5bG9hZF9sZW5ndGgpOworCisJLyogVHJpbSB0aGUgc2tiIHRvIHRoZSBjb3JyZWN0IHNpemUgKi8KKwlza2JfdHJpbShza2IsIGhlYWRlcl9sZW5ndGggKyBsMnBhZCArIHBheWxvYWRfbGVuZ3RoKTsKIH0KIAogdm9pZCBydDJ4MDBxdWV1ZV9yZW1vdmVfbDJwYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGhlYWRlcl9sZW5ndGgpCiB7Ci0Jc3RydWN0IHNrYl9mcmFtZV9kZXNjICpza2JkZXNjID0gZ2V0X3NrYl9mcmFtZV9kZXNjKHNrYik7Ci0JdW5zaWduZWQgaW50IGwycGFkID0gNCAtIChoZWFkZXJfbGVuZ3RoICYgMyk7CisJdW5zaWduZWQgaW50IGwycGFkID0gTDJQQURfU0laRShoZWFkZXJfbGVuZ3RoKTsKIAotCWlmICghbDJwYWQgfHwgKHNrYmRlc2MtPmZsYWdzICYgU0tCREVTQ19MMl9QQURERUQpKQorCWlmICghbDJwYWQpCiAJCXJldHVybjsKIAogCW1lbW1vdmUoc2tiLT5kYXRhICsgbDJwYWQsIHNrYi0+ZGF0YSwgaGVhZGVyX2xlbmd0aCk7CkBAIC0zNDYsNyArMzM2LDkgQEAKIAkgKiBIZWFkZXIgYW5kIGFsaWdubWVudCBpbmZvcm1hdGlvbi4KIAkgKi8KIAl0eGRlc2MtPmhlYWRlcl9sZW5ndGggPSBpZWVlODAyMTFfZ2V0X2hkcmxlbl9mcm9tX3NrYihlbnRyeS0+c2tiKTsKLQl0eGRlc2MtPmwycGFkID0gQUxJR05fU0laRShlbnRyeS0+c2tiLCB0eGRlc2MtPmhlYWRlcl9sZW5ndGgpOworCWlmICh0ZXN0X2JpdChEUklWRVJfUkVRVUlSRV9MMlBBRCwgJnJ0MngwMGRldi0+ZmxhZ3MpICYmCisJICAgIChlbnRyeS0+c2tiLT5sZW4gPiB0eGRlc2MtPmhlYWRlcl9sZW5ndGgpKQorCQl0eGRlc2MtPmwycGFkID0gTDJQQURfU0laRSh0eGRlc2MtPmhlYWRlcl9sZW5ndGgpOwogCiAJLyoKIAkgKiBDaGVjayB3aGV0aGVyIHRoaXMgZnJhbWUgaXMgdG8gYmUgYWNrZWQuCkBAIC0zODcsMTAgKzM3OSwxMyBAQAogCiAJLyoKIAkgKiBCZWFjb25zIGFuZCBwcm9iZSByZXNwb25zZXMgcmVxdWlyZSB0aGUgdHNmIHRpbWVzdGFtcAotCSAqIHRvIGJlIGluc2VydGVkIGludG8gdGhlIGZyYW1lLgorCSAqIHRvIGJlIGluc2VydGVkIGludG8gdGhlIGZyYW1lLCBleGNlcHQgZm9yIGEgZnJhbWUgdGhhdCBoYXMgYmVlbiBpbmplY3RlZAorCSAqIHRocm91Z2ggYSBtb25pdG9yIGludGVyZmFjZS4gVGhpcyBsYXR0ZXIgaXMgbmVlZGVkIGZvciB0ZXN0aW5nIGEKKwkgKiBtb25pdG9yIGludGVyZmFjZS4KIAkgKi8KLQlpZiAoaWVlZTgwMjExX2lzX2JlYWNvbihoZHItPmZyYW1lX2NvbnRyb2wpIHx8Ci0JICAgIGllZWU4MDIxMV9pc19wcm9iZV9yZXNwKGhkci0+ZnJhbWVfY29udHJvbCkpCisJaWYgKChpZWVlODAyMTFfaXNfYmVhY29uKGhkci0+ZnJhbWVfY29udHJvbCkgfHwKKwkgICAgaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AoaGRyLT5mcmFtZV9jb250cm9sKSkgJiYKKwkgICAgKCEodHhfaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSkpCiAJCV9fc2V0X2JpdChFTlRSWV9UWERfUkVRX1RJTUVTVEFNUCwgJnR4ZGVzYy0+ZmxhZ3MpOwogCiAJLyoKQEAgLTUwMiw3ICs0OTcsNyBAQAogCS8qCiAJICogV2hlbiBoYXJkd2FyZSBlbmNyeXB0aW9uIGlzIHN1cHBvcnRlZCwgYW5kIHRoaXMgZnJhbWUKIAkgKiBpcyB0byBiZSBlbmNyeXB0ZWQsIHdlIHNob3VsZCBzdHJpcCB0aGUgSVYvRUlWIGRhdGEgZnJvbQotCSAqIHRoZSBmcmFtZSBzbyB3ZSBjYW4gcHJvdmlkZSBpdCB0byB0aGUgZHJpdmVyIHNlcGVyYXRlbHkuCisJICogdGhlIGZyYW1lIHNvIHdlIGNhbiBwcm92aWRlIGl0IHRvIHRoZSBkcml2ZXIgc2VwYXJhdGVseS4KIAkgKi8KIAlpZiAodGVzdF9iaXQoRU5UUllfVFhEX0VOQ1JZUFQsICZ0eGRlc2MuZmxhZ3MpICYmCiAJICAgICF0ZXN0X2JpdChFTlRSWV9UWERfRU5DUllQVF9JViwgJnR4ZGVzYy5mbGFncykpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBxdWV1ZS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKaW5kZXggNzA3NzVlNS4uYzFlNDgyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHF1ZXVlLmgKQEAgLTkyLDggKzkyLDYgQEAKICAqIEBTS0JERVNDX0RNQV9NQVBQRURfVFg6ICZza2JfZG1hIGZpZWxkIGhhcyBiZWVuIG1hcHBlZCBmb3IgVFgKICAqIEBTS0JERVNDX0lWX1NUUklQUEVEOiBGcmFtZSBjb250YWluZWQgYSBJVi9FSVYgcHJvdmlkZWQgYnkKICAqCW1hYzgwMjExIGJ1dCB3YXMgc3RyaXBwZWQgZm9yIHByb2Nlc3NpbmcgYnkgdGhlIGRyaXZlci4KLSAqIEBTS0JERVNDX0wyX1BBRERFRDogUGF5bG9hZCBoYXMgYmVlbiBwYWRkZWQgZm9yIDQtYnl0ZSBhbGlnbm1lbnQsCi0gKgl0aGUgcGFkZGVkIGJ5dGVzIGFyZSBsb2NhdGVkIGJldHdlZW4gaGVhZGVyIGFuZCBwYXlsb2FkLgogICogQFNLQkRFU0NfTk9UX01BQzgwMjExOiBGcmFtZSBkaWRuJ3Qgb3JpZ2luYXRlIGZyb20gbWFjODAyMTEsCiAgKglkb24ndCB0cnkgdG8gcGFzcyBpdCBiYWNrLgogICovCkBAIC0xMDEsOCArOTksNyBAQAogCVNLQkRFU0NfRE1BX01BUFBFRF9SWCA9IDEgPDwgMCwKIAlTS0JERVNDX0RNQV9NQVBQRURfVFggPSAxIDw8IDEsCiAJU0tCREVTQ19JVl9TVFJJUFBFRCA9IDEgPDwgMiwKLQlTS0JERVNDX0wyX1BBRERFRCA9IDEgPDwgMywKLQlTS0JERVNDX05PVF9NQUM4MDIxMSA9IDEgPDwgNCwKKwlTS0JERVNDX05PVF9NQUM4MDIxMSA9IDEgPDwgMywKIH07CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHNvYy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHNvYy5jCmluZGV4IDE5ZTY4NGYuLjRlZmRjOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBzb2MuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwc29jLmMKQEAgLTcxLDkgKzcxLDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotaW50IHJ0MngwMHNvY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LAotCQkgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgY2hpcHNldCwKLQkJICAgIGNvbnN0IHN0cnVjdCBydDJ4MDBfb3BzICpvcHMpCitpbnQgcnQyeDAwc29jX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGNvbnN0IHN0cnVjdCBydDJ4MDBfb3BzICpvcHMpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CiAJc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldjsKQEAgLTk0LDEyICs5Miw3IEBACiAJcnQyeDAwZGV2LT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCXJ0MngwMGRldi0+bmFtZSA9IHBkZXYtPmRldi5kcml2ZXItPm5hbWU7CiAKLQkvKgotCSAqIFNvQyBkZXZpY2VzIG1pbWljIFBDSSBiZWhhdmlvci4KLQkgKi8KLQlydDJ4MDBfc2V0X2NoaXBfaW50ZihydDJ4MDBkZXYsIFJUMlgwMF9DSElQX0lOVEZfUENJKTsKLQotCXJ0MngwMF9zZXRfY2hpcF9ydChydDJ4MDBkZXYsIGNoaXBzZXQpOworCXJ0MngwMF9zZXRfY2hpcF9pbnRmKHJ0MngwMGRldiwgUlQyWDAwX0NISVBfSU5URl9TT0MpOwogCiAJcmV0dmFsID0gcnQyeDAwc29jX2FsbG9jX3JlZyhydDJ4MDBkZXYpOwogCWlmIChyZXR2YWwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwc29jLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQyeDAwc29jLmgKaW5kZXggOGEzNDE2Ni4uNDczOWVkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0MngwMHNvYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDJ4MDBzb2MuaApAQCAtMjgsMTggKzI4LDEwIEBACiAKICNkZWZpbmUgS1NFRzFBRERSKF9fcHRyKSBfX3B0cgogCi0jZGVmaW5lIF9fcnQyeDAwc29jX3Byb2JlKF9fY2hpcHNldCwgX19vcHMpIFwKLXN0YXRpYyBpbnQgX19ydDJ4MDBzb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikgXAoteyBcCi0JcmV0dXJuIHJ0MngwMHNvY19wcm9iZShwZGV2LCAoX19jaGlwc2V0KSwgKF9fb3BzKSk7IFwKLX0KLQogLyoKICAqIFNvQyBkcml2ZXIgaGFuZGxlcnMuCiAgKi8KLWludCBydDJ4MDBzb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwKLQkJICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0IGNoaXBzZXQsCi0JCSAgICBjb25zdCBzdHJ1Y3QgcnQyeDAwX29wcyAqb3BzKTsKK2ludCBydDJ4MDBzb2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgY29uc3Qgc3RydWN0IHJ0MngwMF9vcHMgKm9wcyk7CiBpbnQgcnQyeDAwc29jX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKICNpZmRlZiBDT05GSUdfUE0KIGludCBydDJ4MDBzb2Nfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmMKaW5kZXggMGNhNTg5My4uMTc3NDcyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5jCkBAIC00NzYsNyArNDc2LDcgQEAKIAkJICogVGhlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBJVi9FSVYgZ2VuZXJhdGlvbgogCQkgKiBpbiBoYXJkd2FyZS4gSG93ZXZlciBpdCBkb2Vzbid0IHN1cHBvcnQgdGhlIElWL0VJVgogCQkgKiBpbnNpZGUgdGhlIGllZWU4MDIxMSBmcmFtZSBlaXRoZXIsIGJ1dCByZXF1aXJlcyBpdAotCQkgKiB0byBiZSBwcm92aWRlZCBzZXBlcmF0ZWx5IGZvciB0aGUgZGVzY3JpcHRvci4KKwkJICogdG8gYmUgcHJvdmlkZWQgc2VwYXJhdGVseSBmb3IgdGhlIGRlc2NyaXB0b3IuCiAJCSAqIHJ0MngwMGxpYiB3aWxsIGN1dCB0aGUgSVYvRUlWIGRhdGEgb3V0IG9mIGFsbCBmcmFtZXMKIAkJICogZ2l2ZW4gdG8gdXMgYnkgbWFjODAyMTEsIGJ1dCB3ZSBtdXN0IHRlbGwgbWFjODAyMTEKIAkJICogdG8gZ2VuZXJhdGUgdGhlIElWL0VJViBkYXRhLgpAQCAtNjM3LDggKzYzNyw3IEBACiAJcnQ2MXBjaV9iYnBfcmVhZChydDJ4MDBkZXYsIDQsICZyNCk7CiAJcnQ2MXBjaV9iYnBfcmVhZChydDJ4MDBkZXYsIDc3LCAmcjc3KTsKIAotCXJ0MngwMF9zZXRfZmllbGQ4KCZyMywgQkJQX1IzX1NNQVJUX01PREUsCi0JCQkgIHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUzMjUpKTsKKwlydDJ4MDBfc2V0X2ZpZWxkOCgmcjMsIEJCUF9SM19TTUFSVF9NT0RFLCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUzMjUpKTsKIAogCS8qCiAJICogQ29uZmlndXJlIHRoZSBSWCBhbnRlbm5hLgpAQCAtNjg0LDggKzY4Myw3IEBACiAJcnQ2MXBjaV9iYnBfcmVhZChydDJ4MDBkZXYsIDQsICZyNCk7CiAJcnQ2MXBjaV9iYnBfcmVhZChydDJ4MDBkZXYsIDc3LCAmcjc3KTsKIAotCXJ0MngwMF9zZXRfZmllbGQ4KCZyMywgQkJQX1IzX1NNQVJUX01PREUsCi0JCQkgIHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjkpKTsKKwlydDJ4MDBfc2V0X2ZpZWxkOCgmcjMsIEJCUF9SM19TTUFSVF9NT0RFLCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjkpKTsKIAlydDJ4MDBfc2V0X2ZpZWxkOCgmcjQsIEJCUF9SNF9SWF9GUkFNRV9FTkQsCiAJCQkgICF0ZXN0X2JpdChDT05GSUdfRlJBTUVfVFlQRSwgJnJ0MngwMGRldi0+ZmxhZ3MpKTsKIApAQCAtODMzLDEyICs4MzEsMTEgQEAKIAogCXJ0MngwMHBjaV9yZWdpc3Rlcl93cml0ZShydDJ4MDBkZXYsIFBIWV9DU1IwLCByZWcpOwogCi0JaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjUpIHx8Ci0JICAgIHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUzMjUpKQorCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUyMjUpIHx8IHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTMyNSkpCiAJCXJ0NjFwY2lfY29uZmlnX2FudGVubmFfNXgocnQyeDAwZGV2LCBhbnQpOwotCWVsc2UgaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjcpKQorCWVsc2UgaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyNykpCiAJCXJ0NjFwY2lfY29uZmlnX2FudGVubmFfMngocnQyeDAwZGV2LCBhbnQpOwotCWVsc2UgaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjkpKSB7CisJZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI5KSkgewogCQlpZiAodGVzdF9iaXQoQ09ORklHX0RPVUJMRV9BTlRFTk5BLCAmcnQyeDAwZGV2LT5mbGFncykpCiAJCQlydDYxcGNpX2NvbmZpZ19hbnRlbm5hXzJ4KHJ0MngwMGRldiwgYW50KTsKIAkJZWxzZQpAQCAtODc5LDggKzg3Niw3IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZi0+cmYzLCBSRjNfVFhQT1dFUiwgVFhQT1dFUl9UT19ERVYodHhwb3dlcikpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmYtPnJmNCwgUkY0X0ZSRVFfT0ZGU0VULCBydDJ4MDBkZXYtPmZyZXFfb2Zmc2V0KTsKIAotCXNtYXJ0ID0gIShydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjI1KSB8fAotCQkgIHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjcpKTsKKwlzbWFydCA9ICEocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI1KSB8fCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjcpKTsKIAogCXJ0NjFwY2lfYmJwX3JlYWQocnQyeDAwZGV2LCAzLCAmcjMpOwogCXJ0MngwMF9zZXRfZmllbGQ4KCZyMywgQkJQX1IzX1NNQVJUX01PREUsIHNtYXJ0KTsKQEAgLTExMzUsMTYgKzExMzEsMTggQEAKICAqLwogc3RhdGljIGNoYXIgKnJ0NjFwY2lfZ2V0X2Zpcm13YXJlX25hbWUoc3RydWN0IHJ0MngwMF9kZXYgKnJ0MngwMGRldikKIHsKKwl1MTYgY2hpcDsKIAljaGFyICpmd19uYW1lOwogCi0Jc3dpdGNoIChydDJ4MDBkZXYtPmNoaXAucnQpIHsKLQljYXNlIFJUMjU2MToKKwlwY2lfcmVhZF9jb25maWdfd29yZCh0b19wY2lfZGV2KHJ0MngwMGRldi0+ZGV2KSwgUENJX0RFVklDRV9JRCwgJmNoaXApOworCXN3aXRjaCAoY2hpcCkgeworCWNhc2UgUlQyNTYxX1BDSV9JRDoKIAkJZndfbmFtZSA9IEZJUk1XQVJFX1JUMjU2MTsKIAkJYnJlYWs7Ci0JY2FzZSBSVDI1NjFzOgorCWNhc2UgUlQyNTYxc19QQ0lfSUQ6CiAJCWZ3X25hbWUgPSBGSVJNV0FSRV9SVDI1NjFzOwogCQlicmVhazsKLQljYXNlIFJUMjY2MToKKwljYXNlIFJUMjY2MV9QQ0lfSUQ6CiAJCWZ3X25hbWUgPSBGSVJNV0FSRV9SVDI2NjE7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0yMjk5LDEzICsyMjk3LDEzIEBACiAJICovCiAJdmFsdWUgPSBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fQU5URU5OQV9SRl9UWVBFKTsKIAlydDJ4MDBwY2lfcmVnaXN0ZXJfcmVhZChydDJ4MDBkZXYsIE1BQ19DU1IwLCAmcmVnKTsKLQlydDJ4MDBfc2V0X2NoaXBfcmYocnQyeDAwZGV2LCB2YWx1ZSwgcmVnKTsKLQlydDJ4MDBfcHJpbnRfY2hpcChydDJ4MDBkZXYpOworCXJ0MngwMF9zZXRfY2hpcChydDJ4MDBkZXYsIHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIE1BQ19DU1IwX0NISVBTRVQpLAorCQkJdmFsdWUsIHJ0MngwMF9nZXRfZmllbGQzMihyZWcsIE1BQ19DU1IwX1JFVklTSU9OKSk7CiAKLQlpZiAoIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjUpICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MzI1KSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNykgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjkpKSB7CisJaWYgKCFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUyMjUpICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUzMjUpICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjcpICYmCisJICAgICFydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjkpKSB7CiAJCUVSUk9SKHJ0MngwMGRldiwgIkludmFsaWQgUkYgY2hpcHNldCBkZXRlY3RlZC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0yMzYwLDcgKzIzNTgsNyBAQAogCSAqIHRoZSBhbnRlbm5hIHNldHRpbmdzIHNob3VsZCBiZSBnYXRoZXJlZCBmcm9tIHRoZSBOSUMKIAkgKiBlZXByb20gd29yZC4KIAkgKi8KLQlpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyOSkgJiYKKwlpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI5KSAmJgogCSAgICAhdGVzdF9iaXQoQ09ORklHX0RPVUJMRV9BTlRFTk5BLCAmcnQyeDAwZGV2LT5mbGFncykpIHsKIAkJcnQyeDAwZGV2LT5kZWZhdWx0X2FudC5yeCA9CiAJCSAgICBBTlRFTk5BX0EgKyBydDJ4MDBfZ2V0X2ZpZWxkMTYoZWVwcm9tLCBFRVBST01fTklDX1JYX0ZJWEVEKTsKQEAgLTI1NzEsOCArMjU2OSw3IEBACiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc19zZXE7CiAJfQogCi0JaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjUpIHx8Ci0JICAgIHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUzMjUpKSB7CisJaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTIyNSkgfHwgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MzI1KSkgewogCQlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgfD0gU1VQUE9SVF9CQU5EXzVHSFo7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc19zZXEpOwogCX0KQEAgLTI3MzUsNyArMjczMiw2IEBACiAJLmdldF9zdGF0cwkJPSBydDJ4MDBtYWNfZ2V0X3N0YXRzLAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnQyeDAwbWFjX2Jzc19pbmZvX2NoYW5nZWQsCiAJLmNvbmZfdHgJCT0gcnQ2MXBjaV9jb25mX3R4LAotCS5nZXRfdHhfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF90eF9zdGF0cywKIAkuZ2V0X3RzZgkJPSBydDYxcGNpX2dldF90c2YsCiAJLnJma2lsbF9wb2xsCQk9IHJ0MngwMG1hY19yZmtpbGxfcG9sbCwKIH07CkBAIC0yODEyLDcgKzI4MDgsNyBAQAogLyoKICAqIFJUNjFwY2kgbW9kdWxlIGluZm9ybWF0aW9uLgogICovCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnQ2MXBjaV9kZXZpY2VfdGFibGVbXSA9IHsKK3N0YXRpYyBERUZJTkVfUENJX0RFVklDRV9UQUJMRShydDYxcGNpX2RldmljZV90YWJsZSkgPSB7CiAJLyogUlQyNTYxcyAqLwogCXsgUENJX0RFVklDRSgweDE4MTQsIDB4MDMwMSksIFBDSV9ERVZJQ0VfREFUQSgmcnQ2MXBjaV9vcHMpIH0sCiAJLyogUlQyNTYxIHYyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NjFwY2kuaAppbmRleCA4ZjEzODEwLi5kZjgwZjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ2MXBjaS5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDYxcGNpLmgKQEAgLTI4LDYgKzI4LDEzIEBACiAjZGVmaW5lIFJUNjFQQ0lfSAogCiAvKgorICogUlQgY2hpcCBQQ0kgSURzLgorICovCisjZGVmaW5lIFJUMjU2MXNfUENJX0lECQkJMHgwMzAxCisjZGVmaW5lIFJUMjU2MV9QQ0lfSUQJCQkweDAzMDIKKyNkZWZpbmUgUlQyNjYxX1BDSV9JRAkJCTB4MDQwMQorCisvKgogICogUkYgY2hpcCBkZWZpbmVzLgogICovCiAjZGVmaW5lIFJGNTIyNQkJCQkweDAwMDEKQEAgLTIyNSw2ICsyMzIsOCBAQAogICogTUFDX0NTUjA6IEFTSUMgcmV2aXNpb24gbnVtYmVyLgogICovCiAjZGVmaW5lIE1BQ19DU1IwCQkJMHgzMDAwCisjZGVmaW5lIE1BQ19DU1IwX1JFVklTSU9OCQlGSUVMRDMyKDB4MDAwMDAwMGYpCisjZGVmaW5lIE1BQ19DU1IwX0NISVBTRVQJCUZJRUxEMzIoMHgwMDBmZmZmMCkKIAogLyoKICAqIE1BQ19DU1IxOiBTeXN0ZW0gY29udHJvbCByZWdpc3Rlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5jCmluZGV4IGNlZDNiNmEuLmU3N2FlYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuYwpAQCAtMTM2LDggKzEzNiw4IEBACiAJCSAqIGFsbCBvdGhlcnMgY29udGFpbiAyMCBiaXRzLgogCQkgKi8KIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFBIWV9DU1I0X05VTUJFUl9PRl9CSVRTLAotCQkJCSAgIDIwICsgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjUpIHx8Ci0JCQkJCSBydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI3KSkpOworCQkJCSAgIDIwICsgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTIyNSkgfHwKKwkJCQkJIHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGMjUyNykpKTsKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFBIWV9DU1I0X0lGX1NFTEVDVCwgMCk7CiAJCXJ0MngwMF9zZXRfZmllbGQzMigmcmVnLCBQSFlfQ1NSNF9CVVNZLCAxKTsKIApAQCAtMzM5LDcgKzMzOSw3IEBACiAJCSAqIFRoZSBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgSVYvRUlWIGdlbmVyYXRpb24KIAkJICogaW4gaGFyZHdhcmUuIEhvd2V2ZXIgaXQgZG9lc24ndCBzdXBwb3J0IHRoZSBJVi9FSVYKIAkJICogaW5zaWRlIHRoZSBpZWVlODAyMTEgZnJhbWUgZWl0aGVyLCBidXQgcmVxdWlyZXMgaXQKLQkJICogdG8gYmUgcHJvdmlkZWQgc2VwZXJhdGVseSBmb3IgdGhlIGRlc2NyaXB0b3IuCisJCSAqIHRvIGJlIHByb3ZpZGVkIHNlcGFyYXRlbHkgZm9yIHRoZSBkZXNjcmlwdG9yLgogCQkgKiBydDJ4MDBsaWIgd2lsbCBjdXQgdGhlIElWL0VJViBkYXRhIG91dCBvZiBhbGwgZnJhbWVzCiAJCSAqIGdpdmVuIHRvIHVzIGJ5IG1hYzgwMjExLCBidXQgd2UgbXVzdCB0ZWxsIG1hYzgwMjExCiAJCSAqIHRvIGdlbmVyYXRlIHRoZSBJVi9FSVYgZGF0YS4KQEAgLTQzOSw3ICs0MzksNyBAQAogCQkgKiBUaGUgZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIElWL0VJViBnZW5lcmF0aW9uCiAJCSAqIGluIGhhcmR3YXJlLiBIb3dldmVyIGl0IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgSVYvRUlWCiAJCSAqIGluc2lkZSB0aGUgaWVlZTgwMjExIGZyYW1lIGVpdGhlciwgYnV0IHJlcXVpcmVzIGl0Ci0JCSAqIHRvIGJlIHByb3ZpZGVkIHNlcGVyYXRlbHkgZm9yIHRoZSBkZXNjcmlwdG9yLgorCQkgKiB0byBiZSBwcm92aWRlZCBzZXBhcmF0ZWx5IGZvciB0aGUgZGVzY3JpcHRvci4KIAkJICogcnQyeDAwbGliIHdpbGwgY3V0IHRoZSBJVi9FSVYgZGF0YSBvdXQgb2YgYWxsIGZyYW1lcwogCQkgKiBnaXZlbiB0byB1cyBieSBtYWM4MDIxMSwgYnV0IHdlIG11c3QgdGVsbCBtYWM4MDIxMQogCQkgKiB0byBnZW5lcmF0ZSB0aGUgSVYvRUlWIGRhdGEuCkBAIC03NDEsMTEgKzc0MSw5IEBACiAKIAlydDJ4MDB1c2JfcmVnaXN0ZXJfd3JpdGUocnQyeDAwZGV2LCBQSFlfQ1NSMCwgcmVnKTsKIAotCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjI2KSB8fAotCSAgICBydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjI1KSkKKwlpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI2KSB8fCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUyMjUpKQogCQlydDczdXNiX2NvbmZpZ19hbnRlbm5hXzV4KHJ0MngwMGRldiwgYW50KTsKLQllbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI4KSB8fAotCQkgcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNykpCisJZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI4KSB8fCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjcpKQogCQlydDczdXNiX2NvbmZpZ19hbnRlbm5hXzJ4KHJ0MngwMGRldiwgYW50KTsKIH0KIApAQCAtNzc5LDggKzc3Nyw3IEBACiAJcnQyeDAwX3NldF9maWVsZDMyKCZyZi0+cmYzLCBSRjNfVFhQT1dFUiwgVFhQT1dFUl9UT19ERVYodHhwb3dlcikpOwogCXJ0MngwMF9zZXRfZmllbGQzMigmcmYtPnJmNCwgUkY0X0ZSRVFfT0ZGU0VULCBydDJ4MDBkZXYtPmZyZXFfb2Zmc2V0KTsKIAotCXNtYXJ0ID0gIShydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjI1KSB8fAotCQkgIHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjI1MjcpKTsKKwlzbWFydCA9ICEocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI1KSB8fCBydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjcpKTsKIAogCXJ0NzN1c2JfYmJwX3JlYWQocnQyeDAwZGV2LCAzLCAmcjMpOwogCXJ0MngwMF9zZXRfZmllbGQ4KCZyMywgQkJQX1IzX1NNQVJUX01PREUsIHNtYXJ0KTsKQEAgLTEyMTAsOCArMTIwNyw3IEBACiAJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgU0VDX0NTUjUsIDB4MDAwMDAwMDApOwogCiAJcmVnID0gMHgwMDAwMjNiMDsKLQlpZiAocnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGNTIyNSkgfHwKLQkgICAgcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyNykpCisJaWYgKHJ0MngwMF9yZihydDJ4MDBkZXYsIFJGNTIyNSkgfHwgcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI3KSkKIAkJcnQyeDAwX3NldF9maWVsZDMyKCZyZWcsIFBIWV9DU1IxX1JGX1JQSSwgMSk7CiAJcnQyeDAwdXNiX3JlZ2lzdGVyX3dyaXRlKHJ0MngwMGRldiwgUEhZX0NTUjEsIHJlZyk7CiAKQEAgLTE2NjUsNyArMTY2MSw3IEBACiAKIAkJLyoKIAkJICogSGFyZHdhcmUgaGFzIHN0cmlwcGVkIElWL0VJViBkYXRhIGZyb20gODAyLjExIGZyYW1lIGR1cmluZwotCQkgKiBkZWNyeXB0aW9uLiBJdCBoYXMgcHJvdmlkZWQgdGhlIGRhdGEgc2VwZXJhdGVseSBidXQgcnQyeDAwbGliCisJCSAqIGRlY3J5cHRpb24uIEl0IGhhcyBwcm92aWRlZCB0aGUgZGF0YSBzZXBhcmF0ZWx5IGJ1dCBydDJ4MDBsaWIKIAkJICogc2hvdWxkIGRlY2lkZSBpZiBpdCBzaG91bGQgYmUgcmVpbnNlcnRlZC4KIAkJICovCiAJCXJ4ZGVzYy0+ZmxhZ3MgfD0gUlhfRkxBR19JVl9TVFJJUFBFRDsKQEAgLTE4MjQsMTkgKzE4MjAsMTggQEAKIAkgKi8KIAl2YWx1ZSA9IHJ0MngwMF9nZXRfZmllbGQxNihlZXByb20sIEVFUFJPTV9BTlRFTk5BX1JGX1RZUEUpOwogCXJ0MngwMHVzYl9yZWdpc3Rlcl9yZWFkKHJ0MngwMGRldiwgTUFDX0NTUjAsICZyZWcpOwotCXJ0MngwMF9zZXRfY2hpcChydDJ4MDBkZXYsIFJUMjU3MSwgdmFsdWUsIHJlZyk7Ci0JcnQyeDAwX3ByaW50X2NoaXAocnQyeDAwZGV2KTsKKwlydDJ4MDBfc2V0X2NoaXAocnQyeDAwZGV2LCBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBNQUNfQ1NSMF9DSElQU0VUKSwKKwkJCXZhbHVlLCBydDJ4MDBfZ2V0X2ZpZWxkMzIocmVnLCBNQUNfQ1NSMF9SRVZJU0lPTikpOwogCi0JaWYgKCFydDJ4MDBfY2hlY2tfcmV2KCZydDJ4MDBkZXYtPmNoaXAsIDB4MDAwZmZmZjAsIDB4MjU3MzApIHx8Ci0JICAgIHJ0MngwMF9jaGVja19yZXYoJnJ0MngwMGRldi0+Y2hpcCwgMHgwMDAwMDAwZiwgMCkpIHsKKwlpZiAoIXJ0MngwMF9ydChydDJ4MDBkZXYsIFJUMjU3MykgfHwgKHJ0MngwMF9yZXYocnQyeDAwZGV2KSA9PSAwKSkgewogCQlFUlJPUihydDJ4MDBkZXYsICJJbnZhbGlkIFJUIGNoaXBzZXQgZGV0ZWN0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKCFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjI2KSAmJgotCSAgICAhcnQyeDAwX3JmKCZydDJ4MDBkZXYtPmNoaXAsIFJGMjUyOCkgJiYKLQkgICAgIXJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjUpICYmCi0JICAgICFydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI3KSkgeworCWlmICghcnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI2KSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI4KSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI1KSAmJgorCSAgICAhcnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI3KSkgewogCQlFUlJPUihydDJ4MDBkZXYsICJJbnZhbGlkIFJGIGNoaXBzZXQgZGV0ZWN0ZWQuXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMjA4MSwxNyArMjA3NiwxNyBAQAogCXNwZWMtPnN1cHBvcnRlZF9iYW5kcyA9IFNVUFBPUlRfQkFORF8yR0haOwogCXNwZWMtPnN1cHBvcnRlZF9yYXRlcyA9IFNVUFBPUlRfUkFURV9DQ0sgfCBTVVBQT1JUX1JBVEVfT0ZETTsKIAotCWlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI4KSkgeworCWlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjI1MjgpKSB7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc19iZ18yNTI4KTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzX2JnXzI1Mjg7Ci0JfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkY1MjI2KSkgeworCX0gZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkY1MjI2KSkgewogCQlzcGVjLT5zdXBwb3J0ZWRfYmFuZHMgfD0gU1VQUE9SVF9CQU5EXzVHSFo7CiAJCXNwZWMtPm51bV9jaGFubmVscyA9IEFSUkFZX1NJWkUocmZfdmFsc181MjI2KTsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzXzUyMjY7Ci0JfSBlbHNlIGlmIChydDJ4MDBfcmYoJnJ0MngwMGRldi0+Y2hpcCwgUkYyNTI3KSkgeworCX0gZWxzZSBpZiAocnQyeDAwX3JmKHJ0MngwMGRldiwgUkYyNTI3KSkgewogCQlzcGVjLT5udW1fY2hhbm5lbHMgPSAxNDsKIAkJc3BlYy0+Y2hhbm5lbHMgPSByZl92YWxzXzUyMjVfMjUyNzsKLQl9IGVsc2UgaWYgKHJ0MngwMF9yZigmcnQyeDAwZGV2LT5jaGlwLCBSRjUyMjUpKSB7CisJfSBlbHNlIGlmIChydDJ4MDBfcmYocnQyeDAwZGV2LCBSRjUyMjUpKSB7CiAJCXNwZWMtPnN1cHBvcnRlZF9iYW5kcyB8PSBTVVBQT1JUX0JBTkRfNUdIWjsKIAkJc3BlYy0+bnVtX2NoYW5uZWxzID0gQVJSQVlfU0laRShyZl92YWxzXzUyMjVfMjUyNyk7CiAJCXNwZWMtPmNoYW5uZWxzID0gcmZfdmFsc181MjI1XzI1Mjc7CkBAIC0yMjQ5LDcgKzIyNDQsNiBAQAogCS5nZXRfc3RhdHMJCT0gcnQyeDAwbWFjX2dldF9zdGF0cywKIAkuYnNzX2luZm9fY2hhbmdlZAk9IHJ0MngwMG1hY19ic3NfaW5mb19jaGFuZ2VkLAogCS5jb25mX3R4CQk9IHJ0NzN1c2JfY29uZl90eCwKLQkuZ2V0X3R4X3N0YXRzCQk9IHJ0MngwMG1hY19nZXRfdHhfc3RhdHMsCiAJLmdldF90c2YJCT0gcnQ3M3VzYl9nZXRfdHNmLAogCS5yZmtpbGxfcG9sbAkJPSBydDJ4MDBtYWNfcmZraWxsX3BvbGwsCiB9OwpAQCAtMjM1NCw2ICsyMzQ4LDcgQEAKIAl7IFVTQl9ERVZJQ0UoMHgwOGRkLCAweDAxMjApLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCS8qIEJ1ZmZhbG8gKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAwZDgpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAorCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDBkOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCiAJeyBVU0JfREVWSUNFKDB4MDQxMSwgMHgwMGY0KSwgVVNCX0RFVklDRV9EQVRBKCZydDczdXNiX29wcykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNDExLCAweDAxMTYpLCBVU0JfREVWSUNFX0RBVEEoJnJ0NzN1c2Jfb3BzKSB9LAogCXsgVVNCX0RFVklDRSgweDA0MTEsIDB4MDExOSksIFVTQl9ERVZJQ0VfREFUQSgmcnQ3M3VzYl9vcHMpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnQyeDAwL3J0NzN1c2IuaAppbmRleCA3OTQyZjgxLi43YWJlN2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydDJ4MDAvcnQ3M3VzYi5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0MngwMC9ydDczdXNiLmgKQEAgLTE0Miw2ICsxNDIsOCBAQAogICogTUFDX0NTUjA6IEFTSUMgcmV2aXNpb24gbnVtYmVyLgogICovCiAjZGVmaW5lIE1BQ19DU1IwCQkJMHgzMDAwCisjZGVmaW5lIE1BQ19DU1IwX1JFVklTSU9OCQlGSUVMRDMyKDB4MDAwMDAwMGYpCisjZGVmaW5lIE1BQ19DU1IwX0NISVBTRVQJCUZJRUxEMzIoMHgwMDBmZmZmMCkKIAogLyoKICAqIE1BQ19DU1IxOiBTeXN0ZW0gY29udHJvbCByZWdpc3Rlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwLmgKaW5kZXggODcyMTI4Mi4uZGUzODQ0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwLmgKQEAgLTYwLDcgKzYwLDYgQEAKIAlzdHJ1Y3QgcnRsODE4eF9jc3IgX19pb21lbSAqbWFwOwogCWNvbnN0IHN0cnVjdCBydGw4MTh4X3JmX29wcyAqcmY7CiAJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQlpbnQgbW9kZTsKIAogCS8qIHJ0bDgxODAgZHJpdmVyIHNwZWNpZmljICovCiAJc3BpbmxvY2tfdCBsb2NrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2Rldi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTgwX2Rldi5jCmluZGV4IDhhNDBhMTQuLjJiOTI4ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4MF9kZXYuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODBfZGV2LmMKQEAgLTMzLDcgKzMzLDcgQEAKIE1PRFVMRV9ERVNDUklQVElPTigiUlRMODE4MCAvIFJUTDgxODUgUENJIHdpcmVsZXNzIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRsODE4MF90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUocnRsODE4MF90YWJsZSkgPSB7CiAJLyogcnRsODE4NSAqLwogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1JFQUxURUssIDB4ODE4NSkgfSwKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CRUxLSU4sIDB4NzAwZikgfSwKQEAgLTgyLDggKzgyLDYgQEAKIH07CiAKIAotCi0KIHZvaWQgcnRsODE4MF93cml0ZV9waHkoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1OCBhZGRyLCB1MzIgZGF0YSkKIHsKIAlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwpAQCAtNjE1LDcgKzYxMyw2IEBACiAJcmVnIHw9IFJUTDgxOFhfQ01EX1RYX0VOQUJMRTsKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkNNRCwgcmVnKTsKIAotCXByaXYtPm1vZGUgPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOwogCXJldHVybiAwOwogCiAgZXJyX2ZyZWVfcmluZ3M6CkBAIC02MzMsOCArNjMwLDYgQEAKIAl1OCByZWc7CiAJaW50IGk7CiAKLQlwcml2LT5tb2RlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7Ci0KIAlydGw4MTh4X2lvd3JpdGUxNihwcml2LCAmcHJpdi0+bWFwLT5JTlRfTUFTSywgMCk7CiAKIAlyZWcgPSBydGw4MTh4X2lvcmVhZDgocHJpdiwgJnByaXYtPm1hcC0+Q01EKTsKQEAgLTY1NywzOCArNjUyLDM5IEBACiB9CiAKIHN0YXRpYyBpbnQgcnRsODE4MF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IHJ0bDgxODBfcHJpdiAqcHJpdiA9IGRldi0+cHJpdjsKIAotCWlmIChwcml2LT5tb2RlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCi0JCXJldHVybiAtRU9QTk9UU1VQUDsKKwkvKgorCSAqIFdlIG9ubHkgc3VwcG9ydCBvbmUgYWN0aXZlIGludGVyZmFjZSBhdCBhIHRpbWUuCisJICovCisJaWYgKHByaXYtPnZpZikKKwkJcmV0dXJuIC1FQlVTWTsKIAotCXN3aXRjaCAoY29uZi0+dHlwZSkgeworCXN3aXRjaCAodmlmLT50eXBlKSB7CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgotCQlwcml2LT5tb2RlID0gY29uZi0+dHlwZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAotCXByaXYtPnZpZiA9IGNvbmYtPnZpZjsKKwlwcml2LT52aWYgPSB2aWY7CiAKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOwogCXJ0bDgxOHhfaW93cml0ZTMyKHByaXYsIChfX2xlMzIgX19pb21lbSAqKSZwcml2LT5tYXAtPk1BQ1swXSwKLQkJCSAgbGUzMl90b19jcHUoKihfX2xlMzIgKiljb25mLT5tYWNfYWRkcikpOworCQkJICBsZTMyX3RvX2NwdSgqKF9fbGUzMiAqKXZpZi0+YWRkcikpOwogCXJ0bDgxOHhfaW93cml0ZTE2KHByaXYsIChfX2xlMTYgX19pb21lbSAqKSZwcml2LT5tYXAtPk1BQ1s0XSwKLQkJCSAgbGUxNl90b19jcHUoKihfX2xlMTYgKikoY29uZi0+bWFjX2FkZHIgKyA0KSkpOworCQkJICBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSh2aWYtPmFkZHIgKyA0KSkpOwogCXJ0bDgxOHhfaW93cml0ZTgocHJpdiwgJnByaXYtPm1hcC0+RUVQUk9NX0NNRCwgUlRMODE4WF9FRVBST01fQ01EX05PUk1BTCk7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgcnRsODE4MF9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3QgcnRsODE4MF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCXByaXYtPm1vZGUgPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOwogCXByaXYtPnZpZiA9IE5VTEw7CiB9CiAKQEAgLTc2NSw2ICs3NjEsMTQgQEAKIAlydGw4MTh4X2lvd3JpdGUzMihwcml2LCAmcHJpdi0+bWFwLT5SWF9DT05GLCBwcml2LT5yeF9jb25mKTsKIH0KIAorc3RhdGljIHU2NCBydGw4MTgwX2dldF90c2Yoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2KQoreworCXN0cnVjdCBydGw4MTgwX3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CisKKwlyZXR1cm4gcnRsODE4eF9pb3JlYWQzMihwcml2LCAmcHJpdi0+bWFwLT5UU0ZUWzBdKSB8CisJICAgICAgICh1NjQpKHJ0bDgxOHhfaW9yZWFkMzIocHJpdiwgJnByaXYtPm1hcC0+VFNGVFsxXSkpIDw8IDMyOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgcnRsODE4MF9vcHMgPSB7CiAJLnR4CQkJPSBydGw4MTgwX3R4LAogCS5zdGFydAkJCT0gcnRsODE4MF9zdGFydCwKQEAgLTc3NSw2ICs3NzksNyBAQAogCS5ic3NfaW5mb19jaGFuZ2VkCT0gcnRsODE4MF9ic3NfaW5mb19jaGFuZ2VkLAogCS5wcmVwYXJlX211bHRpY2FzdAk9IHJ0bDgxODBfcHJlcGFyZV9tdWx0aWNhc3QsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSBydGw4MTgwX2NvbmZpZ3VyZV9maWx0ZXIsCisJLmdldF90c2YJCT0gcnRsODE4MF9nZXRfdHNmLAogfTsKIAogc3RhdGljIHZvaWQgcnRsODE4MF9lZXByb21fcmVnaXN0ZXJfcmVhZChzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20pCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oCmluZGV4IDZhZjBmM2YuLjZiYjMyMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4Ny5oCkBAIC05Miw3ICs5Miw3IEBACiAJc3RydWN0IHJ0bDgxOHhfY3NyICptYXA7CiAJY29uc3Qgc3RydWN0IHJ0bDgxOHhfcmZfb3BzICpyZjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmOwotCWludCBtb2RlOworCiAJLyogVGhlIG11dGV4IHByb3RlY3RzIHRoZSBUWCBsb29wYmFjayBzdGF0ZS4KIAkgKiBBbnkgYXR0ZW1wdCB0byBzZXQgY2hhbm5lbHMgY29uY3VycmVudGx5IGxvY2tzIHRoZSBkZXZpY2UuCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfZGV2LmMKaW5kZXggN2JhMzA1Mi4uMGZiODUwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2Rldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19kZXYuYwpAQCAtMTAxOSwzMSArMTAxOSwzMCBAQAogfQogCiBzdGF0aWMgaW50IHJ0bDgxODdfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAJaW50IGk7CiAJaW50IHJldCA9IC1FT1BOT1RTVVBQOwogCiAJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JaWYgKHByaXYtPm1vZGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKKwlpZiAocHJpdi0+dmlmKQogCQlnb3RvIGV4aXQ7CiAKLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKLQkJcHJpdi0+bW9kZSA9IGNvbmYtPnR5cGU7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWdvdG8gZXhpdDsKIAl9CiAKIAlyZXQgPSAwOwotCXByaXYtPnZpZiA9IGNvbmYtPnZpZjsKKwlwcml2LT52aWYgPSB2aWY7CiAKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9DT05GSUcpOwogCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQogCQlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPk1BQ1tpXSwKLQkJCQkgKCh1OCAqKWNvbmYtPm1hY19hZGRyKVtpXSk7CisJCQkJICgodTggKil2aWYtPmFkZHIpW2ldKTsKIAlydGw4MTh4X2lvd3JpdGU4KHByaXYsICZwcml2LT5tYXAtPkVFUFJPTV9DTUQsIFJUTDgxOFhfRUVQUk9NX0NNRF9OT1JNQUwpOwogCiBleGl0OgpAQCAtMTA1MiwxMSArMTA1MSwxMCBAQAogfQogCiBzdGF0aWMgdm9pZCBydGw4MTg3X3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCBydGw4MTg3X3ByaXYgKnByaXYgPSBkZXYtPnByaXY7CiAJbXV0ZXhfbG9jaygmcHJpdi0+Y29uZl9tdXRleCk7Ci0JcHJpdi0+bW9kZSA9IE5MODAyMTFfSUZUWVBFX01PTklUT1I7CiAJcHJpdi0+dmlmID0gTlVMTDsKIAltdXRleF91bmxvY2soJnByaXYtPmNvbmZfbXV0ZXgpOwogfQpAQCAtMTI2OCw2ICsxMjY2LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB1NjQgcnRsODE4N19nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldikKK3sKKwlzdHJ1Y3QgcnRsODE4N19wcml2ICpwcml2ID0gZGV2LT5wcml2OworCisJcmV0dXJuIHJ0bDgxOHhfaW9yZWFkMzIocHJpdiwgJnByaXYtPm1hcC0+VFNGVFswXSkgfAorCSAgICAgICAodTY0KShydGw4MTh4X2lvcmVhZDMyKHByaXYsICZwcml2LT5tYXAtPlRTRlRbMV0pKSA8PCAzMjsKK30KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzIHJ0bDgxODdfb3BzID0gewogCS50eAkJCT0gcnRsODE4N190eCwKIAkuc3RhcnQJCQk9IHJ0bDgxODdfc3RhcnQsCkBAIC0xMjc5LDcgKzEyODUsOCBAQAogCS5wcmVwYXJlX211bHRpY2FzdAk9IHJ0bDgxODdfcHJlcGFyZV9tdWx0aWNhc3QsCiAJLmNvbmZpZ3VyZV9maWx0ZXIJPSBydGw4MTg3X2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmNvbmZfdHgJCT0gcnRsODE4N19jb25mX3R4LAotCS5yZmtpbGxfcG9sbAkJPSBydGw4MTg3X3Jma2lsbF9wb2xsCisJLnJma2lsbF9wb2xsCQk9IHJ0bDgxODdfcmZraWxsX3BvbGwsCisJLmdldF90c2YJCT0gcnRsODE4N19nZXRfdHNmLAogfTsKIAogc3RhdGljIHZvaWQgcnRsODE4N19lZXByb21fcmVnaXN0ZXJfcmVhZChzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20pCkBAIC0xMzY2LDcgKzEzNzMsNiBAQAogCWRldi0+d2lwaHktPmJhbmRzW0lFRUU4MDIxMV9CQU5EXzJHSFpdID0gJnByaXYtPmJhbmQ7CiAKIAotCXByaXYtPm1vZGUgPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SOwogCWRldi0+ZmxhZ3MgPSBJRUVFODAyMTFfSFdfSE9TVF9CUk9BRENBU1RfUFNfQlVGRkVSSU5HIHwKIAkJICAgICBJRUVFODAyMTFfSFdfU0lHTkFMX0RCTSB8CiAJCSAgICAgSUVFRTgwMjExX0hXX1JYX0lOQ0xVREVTX0ZDUzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19sZWRzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfbGVkcy5jCmluZGV4IGRlZDQ0YzAuLjQ2MzczMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19sZWRzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2xlZHMuYwpAQCAtMzMsNyArMzMsNyBAQAogCXN0cnVjdCBydGw4MTg3X2xlZCAqbGVkID0gJnByaXYtPmxlZF90eDsKIAogCS8qIERvbid0IGNoYW5nZSB0aGUgTEVELCB3aGVuIHRoZSBkZXZpY2UgaXMgZG93bi4gKi8KLQlpZiAocHJpdi0+bW9kZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkKKwlpZiAoIXByaXYtPnZpZiB8fCBwcml2LT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQpCiAJCXJldHVybiA7CiAKIAkvKiBTa2lwIGlmIHRoZSBMRUQgaXMgbm90IHJlZ2lzdGVyZWQuICovCkBAIC03MSw3ICs3MSw3IEBACiAJc3RydWN0IHJ0bDgxODdfbGVkICpsZWQgPSAmcHJpdi0+bGVkX3R4OwogCiAJLyogRG9uJ3QgY2hhbmdlIHRoZSBMRUQsIHdoZW4gdGhlIGRldmljZSBpcyBkb3duLiAqLwotCWlmIChwcml2LT5tb2RlID09IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKQorCWlmICghcHJpdi0+dmlmIHx8IHByaXYtPnZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9VTlNQRUNJRklFRCkKIAkJcmV0dXJuIDsKIAogCS8qIFNraXAgaWYgdGhlIExFRCBpcyBub3QgcmVnaXN0ZXJlZC4gKi8KQEAgLTI0MSw1ICsyNDEsNSBAQAogCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHJpdi0+bGVkX29mZik7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZwcml2LT5sZWRfb24pOwogfQotI2VuZGlmIC8qIGRlZiBDT05GSUdfUlRMODE4N19MRUQgKi8KKyNlbmRpZiAvKiBkZWYgQ09ORklHX1JUTDgxODdfTEVEUyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfbGVkcy5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcnRsODE4eC9ydGw4MTg3X2xlZHMuaAppbmRleCBlZmU4MDQxLi5kNzQzYzk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ydGw4MTh4L3J0bDgxODdfbGVkcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3J0bDgxOHgvcnRsODE4N19sZWRzLmgKQEAgLTU0LDYgKzU0LDYgQEAKIHZvaWQgcnRsODE4N19sZWRzX2luaXQoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LCB1MTYgY29kZSk7CiB2b2lkIHJ0bDgxODdfbGVkc19leGl0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldik7CiAKLSNlbmRpZiAvKiBkZWYgQ09ORklHX1JUTDgxODdfTEVEICovCisjZW5kaWYgLyogZGVmIENPTkZJR19SVEw4MTg3X0xFRFMgKi8KIAogI2VuZGlmIC8qIFJUTDgxODdfTEVEX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC9NYWtlZmlsZQppbmRleCA2MmUzN2FkLi5mNDdlYzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L01ha2VmaWxlCkBAIC0xMCw1ICsxMCw3IEBACiB3bDEyNzEtb2JqcwkJPSB3bDEyNzFfbWFpbi5vICB3bDEyNzFfc3BpLm8gd2wxMjcxX2NtZC5vICBcCiAJCQkgIHdsMTI3MV9ldmVudC5vIHdsMTI3MV90eC5vICB3bDEyNzFfcngubyAgIFwKIAkJCSAgd2wxMjcxX3BzLm8gICAgd2wxMjcxX2FjeC5vIHdsMTI3MV9ib290Lm8gXAotCQkJICB3bDEyNzFfaW5pdC5vICB3bDEyNzFfZGVidWdmcy5vCisJCQkgIHdsMTI3MV9pbml0Lm8gIHdsMTI3MV9kZWJ1Z2ZzLm8gd2wxMjcxX2lvLm8KKword2wxMjcxLSQoQ09ORklHX05MODAyMTFfVEVTVE1PREUpCSs9IHdsMTI3MV90ZXN0bW9kZS5vCiBvYmotJChDT05GSUdfV0wxMjcxKQkrPSB3bDEyNzEubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MS5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MS5oCmluZGV4IDA1NDUzM2YuLjM3YzYxYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTEuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxLmgKQEAgLTI0Nyw2ICsyNDcsNyBAQAogCXN0cnVjdCBkZW50cnkgKnJ4cGlwZV90eF94ZnJfaG9zdF9pbnRfdHJpZ19yeF9kYXRhOwogCiAJc3RydWN0IGRlbnRyeSAqdHhfcXVldWVfbGVuOworCXN0cnVjdCBkZW50cnkgKnR4X3F1ZXVlX3N0YXR1czsKIAogCXN0cnVjdCBkZW50cnkgKnJldHJ5X2NvdW50OwogCXN0cnVjdCBkZW50cnkgKmV4Y2Vzc2l2ZV9yZXRyaWVzOwpAQCAtMzQwLDkgKzM0MSw2IEBACiAJLyogQXJlIHdlIGN1cnJlbnRseSBzY2FubmluZyAqLwogCWJvb2wgc2Nhbm5pbmc7CiAKLQkvKiBPdXIgYXNzb2NpYXRpb24gSUQgKi8KLQl1MTYgYWlkOwotCiAJLyogRGVmYXVsdCBrZXkgKGZvciBXRVApICovCiAJdTMyIGRlZmF1bHRfa2V5OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2FjeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9hY3guYwppbmRleCBhY2ZhMDg2Li5iZWZmMDg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2FjeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYWN4LmMKQEAgLTk3NiwzICs5NzYsNzIgQEAKIAlrZnJlZShhY3gpOwogCXJldHVybiByZXQ7CiB9CisKK2ludCB3bDEyNTFfYWN4X2FjX2NmZyhzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggYWMsIHU4IGN3X21pbiwgdTE2IGN3X21heCwKKwkJICAgICAgdTggYWlmcywgdTE2IHR4b3ApCit7CisJc3RydWN0IHdsMTI1MV9hY3hfYWNfY2ZnICphY3g7CisJaW50IHJldCA9IDA7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGFjIGNmZyAlZCBjd19taW5nICVkIGN3X21heCAlZCAiCisJCSAgICAgImFpZnMgJWQgdHhvcCAlZCIsIGFjLCBjd19taW4sIGN3X21heCwgYWlmcywgdHhvcCk7CisKKwlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhY3gtPmFjID0gYWM7CisJYWN4LT5jd19taW4gPSBjd19taW47CisJYWN4LT5jd19tYXggPSBjd19tYXg7CisJYWN4LT5haWZzbiA9IGFpZnM7CisJYWN4LT50eG9wX2xpbWl0ID0gdHhvcDsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQUNfQ0ZHLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX3dhcm5pbmcoImFjeCBhYyBjZmcgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdsMTI1MV9hY3hfdGlkX2NmZyhzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggcXVldWUsCisJCSAgICAgICBlbnVtIHdsMTI1MV9hY3hfY2hhbm5lbF90eXBlIHR5cGUsCisJCSAgICAgICB1OCB0c2lkLCBlbnVtIHdsMTI1MV9hY3hfcHNfc2NoZW1lIHBzX3NjaGVtZSwKKwkJICAgICAgIGVudW0gd2wxMjUxX2FjeF9hY2tfcG9saWN5IGFja19wb2xpY3kpCit7CisJc3RydWN0IHdsMTI1MV9hY3hfdGlkX2NmZyAqYWN4OworCWludCByZXQgPSAwOworCisJd2wxMjUxX2RlYnVnKERFQlVHX0FDWCwgImFjeCB0aWQgY2ZnICVkIHR5cGUgJWQgdHNpZCAlZCAiCisJCSAgICAgInBzX3NjaGVtZSAlZCBhY2tfcG9saWN5ICVkIiwgcXVldWUsIHR5cGUsIHRzaWQsCisJCSAgICAgcHNfc2NoZW1lLCBhY2tfcG9saWN5KTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKworCWlmICghYWN4KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWFjeC0+cXVldWUgPSBxdWV1ZTsKKwlhY3gtPnR5cGUgPSB0eXBlOworCWFjeC0+dHNpZCA9IHRzaWQ7CisJYWN4LT5wc19zY2hlbWUgPSBwc19zY2hlbWU7CisJYWN4LT5hY2tfcG9saWN5ID0gYWNrX3BvbGljeTsKKworCXJldCA9IHdsMTI1MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfVElEX0NGRywgYWN4LCBzaXplb2YoKmFjeCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV93YXJuaW5nKCJhY3ggdGlkIGNmZyBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoYWN4KTsKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9hY3guaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfYWN4LmgKaW5kZXggNjUyMzcxNC4uMjYxNjBjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9hY3guaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2FjeC5oCkBAIC0xMTY2LDYgKzExNjYsODcgQEAKIAl1OCAgcGFkZGluZzsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCitzdHJ1Y3Qgd2wxMjUxX2FjeF9hY19jZmcgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCS8qCisJICogQWNjZXNzIENhdGVnb3J5IC0gVGhlIFRYIHF1ZXVlJ3MgYWNjZXNzIGNhdGVnb3J5CisJICogKHJlZmVyIHRvIEFjY2Vzc0NhdGVnb3J5X2VudW0pCisJICovCisJdTggYWM7CisKKwkvKgorCSAqIFRoZSBjb250ZW50aW9uIHdpbmRvdyBtaW5pbXVtIHNpemUgKGluIHNsb3RzKSBmb3IKKwkgKiB0aGUgYWNjZXNzIGNsYXNzLgorCSAqLworCXU4IGN3X21pbjsKKworCS8qCisJICogVGhlIGNvbnRlbnRpb24gd2luZG93IG1heGltdW0gc2l6ZSAoaW4gc2xvdHMpIGZvcgorCSAqIHRoZSBhY2Nlc3MgY2xhc3MuCisJICovCisJdTE2IGN3X21heDsKKworCS8qIFRoZSBBSUYgdmFsdWUgKGluIHNsb3RzKSBmb3IgdGhlIGFjY2VzcyBjbGFzcy4gKi8KKwl1OCBhaWZzbjsKKworCXU4IHJlc2VydmVkOworCisJLyogVGhlIFRYIE9wIExpbWl0IChpbiBtaWNyb3NlY29uZHMpIGZvciB0aGUgYWNjZXNzIGNsYXNzLiAqLworCXUxNiB0eG9wX2xpbWl0OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKworZW51bSB3bDEyNTFfYWN4X2NoYW5uZWxfdHlwZSB7CisJQ0hBTk5FTF9UWVBFX0RDRgk9IDAsCisJQ0hBTk5FTF9UWVBFX0VEQ0YJPSAxLAorCUNIQU5ORUxfVFlQRV9IQ0NBCT0gMiwKK307CisKK2VudW0gd2wxMjUxX2FjeF9wc19zY2hlbWUgeworCS8qIHJlZ3VsYXIgcHM6IHNpbXBsZSBzZW5kaW5nIG9mIHBhY2tldHMgKi8KKwlXTDEyNTFfQUNYX1BTX1NDSEVNRV9MRUdBQ1kJPSAwLAorCisJLyogc2VuZGluZyBhIHBhY2tldCB0cmlnZ2VycyBhIHVuc2NoZWR1bGVkIGFwc2QgZG93bnN0cmVhbSAqLworCVdMMTI1MV9BQ1hfUFNfU0NIRU1FX1VQU0RfVFJJR0dFUgk9IDEsCisKKwkvKiBhIHBzcG9sbCBwYWNrZXQgd2lsbCBiZSBzZW50IGJlZm9yZSBldmVyeSBkYXRhIHBhY2tldCAqLworCVdMMTI1MV9BQ1hfUFNfU0NIRU1FX0xFR0FDWV9QU1BPTEwJPSAyLAorCisJLyogc2NoZWR1bGVkIGFwc2QgbW9kZSAqLworCVdMMTI1MV9BQ1hfUFNfU0NIRU1FX1NBUFNECQk9IDMsCit9OworCitlbnVtIHdsMTI1MV9hY3hfYWNrX3BvbGljeSB7CisJV0wxMjUxX0FDWF9BQ0tfUE9MSUNZX0xFR0FDWQk9IDAsCisJV0wxMjUxX0FDWF9BQ0tfUE9MSUNZX05PX0FDSwk9IDEsCisJV0wxMjUxX0FDWF9BQ0tfUE9MSUNZX0JMT0NLCT0gMiwKK307CisKK3N0cnVjdCB3bDEyNTFfYWN4X3RpZF9jZmcgeworCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKKworCS8qIHR4IHF1ZXVlIGlkIG51bWJlciAoMC03KSAqLworCXU4IHF1ZXVlOworCisJLyogY2hhbm5lbCBhY2Nlc3MgdHlwZSBmb3IgdGhlIHF1ZXVlLCBlbnVtIHdsMTI1MV9hY3hfY2hhbm5lbF90eXBlICovCisJdTggdHlwZTsKKworCS8qIEVEQ0E6IGFjIGluZGV4ICgwLTMpLCBIQ0NBOiB0cmFmZmljIHN0cmVhbSBpZCAoOC0xNSkgKi8KKwl1OCB0c2lkOworCisJLyogcHMgc2NoZW1lIG9mIHRoZSBzcGVjaWZpZWQgcXVldWUsIGVudW0gd2wxMjUxX2FjeF9wc19zY2hlbWUgKi8KKwl1OCBwc19zY2hlbWU7CisKKwkvKiB0aGUgdHggcXVldWUgYWNrIHBvbGljeSwgZW51bSB3bDEyNTFfYWN4X2Fja19wb2xpY3kgKi8KKwl1OCBhY2tfcG9saWN5OworCisJdTggcGFkZGluZ1szXTsKKworCS8qIG5vdCBzdXBwb3J0ZWQgKi8KKwl1MzIgYXBzZGNvbmZbMl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogICAgIEhvc3QgSW50ZXJydXB0IFJlZ2lzdGVyIChXaUxpbmsgLT4gSG9zdCkKQEAgLTEzMjIsNSArMTQwMywxMSBAQAogaW50IHdsMTI1MV9hY3hfcmF0ZV9wb2xpY2llcyhzdHJ1Y3Qgd2wxMjUxICp3bCk7CiBpbnQgd2wxMjUxX2FjeF9tZW1fY2ZnKHN0cnVjdCB3bDEyNTEgKndsKTsKIGludCB3bDEyNTFfYWN4X3dyX3RidHRfYW5kX2R0aW0oc3RydWN0IHdsMTI1MSAqd2wsIHUxNiB0YnR0LCB1OCBkdGltKTsKK2ludCB3bDEyNTFfYWN4X2FjX2NmZyhzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggYWMsIHU4IGN3X21pbiwgdTE2IGN3X21heCwKKwkJICAgICAgdTggYWlmcywgdTE2IHR4b3ApOworaW50IHdsMTI1MV9hY3hfdGlkX2NmZyhzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggcXVldWUsCisJCSAgICAgICBlbnVtIHdsMTI1MV9hY3hfY2hhbm5lbF90eXBlIHR5cGUsCisJCSAgICAgICB1OCB0c2lkLCBlbnVtIHdsMTI1MV9hY3hfcHNfc2NoZW1lIHBzX3NjaGVtZSwKKwkJICAgICAgIGVudW0gd2wxMjUxX2FjeF9hY2tfcG9saWN5IGFja19wb2xpY3kpOwogCiAjZW5kaWYgLyogX19XTDEyNTFfQUNYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9jbWQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfY21kLmMKaW5kZXggNzcwZjI2MC4uMDMyMGI0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9jbWQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2NtZC5jCkBAIC00MTAsMyArNDEwLDg2IEBACiAJa2ZyZWUoY21kKTsKIAlyZXR1cm4gcmV0OwogfQorCitpbnQgd2wxMjUxX2NtZF9zY2FuKHN0cnVjdCB3bDEyNTEgKndsLCB1OCAqc3NpZCwgc2l6ZV90IHNzaWRfbGVuLAorCQkgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsc1tdLAorCQkgICAgdW5zaWduZWQgaW50IG5fY2hhbm5lbHMsIHVuc2lnbmVkIGludCBuX3Byb2JlcykKK3sKKwlzdHJ1Y3Qgd2wxMjUxX2NtZF9zY2FuICpjbWQ7CisJaW50IGksIHJldCA9IDA7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQ01ELCAiY21kIHNjYW4iKTsKKworCWNtZCA9IGt6YWxsb2Moc2l6ZW9mKCpjbWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNtZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljbWQtPnBhcmFtcy5yeF9jb25maWdfb3B0aW9ucyA9IGNwdV90b19sZTMyKENGR19SWF9BTExfR09PRCk7CisJY21kLT5wYXJhbXMucnhfZmlsdGVyX29wdGlvbnMgPSBjcHVfdG9fbGUzMihDRkdfUlhfUFJTUF9FTiB8CisJCQkJCQkgICAgQ0ZHX1JYX01HTVRfRU4gfAorCQkJCQkJICAgIENGR19SWF9CQ05fRU4pOworCWNtZC0+cGFyYW1zLnNjYW5fb3B0aW9ucyA9IDA7CisJY21kLT5wYXJhbXMubnVtX2NoYW5uZWxzID0gbl9jaGFubmVsczsKKwljbWQtPnBhcmFtcy5udW1fcHJvYmVfcmVxdWVzdHMgPSBuX3Byb2JlczsKKwljbWQtPnBhcmFtcy50eF9yYXRlID0gY3B1X3RvX2xlMTYoMSA8PCAxKTsgLyogMiBNYnBzICovCisJY21kLT5wYXJhbXMudGlkX3RyaWdnZXIgPSAwOworCisJZm9yIChpID0gMDsgaSA8IG5fY2hhbm5lbHM7IGkrKykgeworCQljbWQtPmNoYW5uZWxzW2ldLm1pbl9kdXJhdGlvbiA9CisJCQljcHVfdG9fbGUzMihXTDEyNTFfU0NBTl9NSU5fRFVSQVRJT04pOworCQljbWQtPmNoYW5uZWxzW2ldLm1heF9kdXJhdGlvbiA9CisJCQljcHVfdG9fbGUzMihXTDEyNTFfU0NBTl9NQVhfRFVSQVRJT04pOworCQltZW1zZXQoJmNtZC0+Y2hhbm5lbHNbaV0uYnNzaWRfbHNiLCAweGZmLCA0KTsKKwkJbWVtc2V0KCZjbWQtPmNoYW5uZWxzW2ldLmJzc2lkX21zYiwgMHhmZiwgMik7CisJCWNtZC0+Y2hhbm5lbHNbaV0uZWFybHlfdGVybWluYXRpb24gPSAwOworCQljbWQtPmNoYW5uZWxzW2ldLnR4X3Bvd2VyX2F0dCA9IDA7CisJCWNtZC0+Y2hhbm5lbHNbaV0uY2hhbm5lbCA9IGNoYW5uZWxzW2ldLT5od192YWx1ZTsKKwl9CisKKwljbWQtPnBhcmFtcy5zc2lkX2xlbiA9IHNzaWRfbGVuOworCWlmIChzc2lkKQorCQltZW1jcHkoY21kLT5wYXJhbXMuc3NpZCwgc3NpZCwgc3NpZF9sZW4pOworCisJcmV0ID0gd2wxMjUxX2NtZF9zZW5kKHdsLCBDTURfU0NBTiwgY21kLCBzaXplb2YoKmNtZCkpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI1MV9lcnJvcigiY21kIHNjYW4gZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXdsMTI1MV9tZW1fcmVhZCh3bCwgd2wtPmNtZF9ib3hfYWRkciwgY21kLCBzaXplb2YoKmNtZCkpOworCisJaWYgKGNtZC0+aGVhZGVyLnN0YXR1cyAhPSBDTURfU1RBVFVTX1NVQ0NFU1MpIHsKKwkJd2wxMjUxX2Vycm9yKCJjbWQgc2NhbiBzdGF0dXMgd2Fzbid0IHN1Y2Nlc3M6ICVkIiwKKwkJCSAgICAgY21kLT5oZWFkZXIuc3RhdHVzKTsKKwkJcmV0ID0gLUVJTzsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJa2ZyZWUoY21kKTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjUxX2NtZF90cmlnZ2VyX3NjYW5fdG8oc3RydWN0IHdsMTI1MSAqd2wsIHUzMiB0aW1lb3V0KQoreworCXN0cnVjdCB3bDEyNTFfY21kX3RyaWdnZXJfc2Nhbl90byAqY21kOworCWludCByZXQ7CisKKwl3bDEyNTFfZGVidWcoREVCVUdfQ01ELCAiY21kIHRyaWdnZXIgc2NhbiB0byIpOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmICghY21kKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWNtZC0+dGltZW91dCA9IHRpbWVvdXQ7CisKKwlyZXQgPSB3bDEyNTFfY21kX3NlbmQod2wsIENNRF9TQ0FOLCBjbWQsIHNpemVvZigqY21kKSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjUxX2Vycm9yKCJjbWQgdHJpZ2dlciBzY2FuIHRvIGZhaWxlZDogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShjbWQpOworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2NtZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9jbWQuaAppbmRleCBkZmY3OThhZC4uNGFkNjdjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9jbWQuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2NtZC5oCkBAIC0yNyw2ICsyNyw4IEBACiAKICNpbmNsdWRlICJ3bDEyNTEuaCIKIAorI2luY2x1ZGUgPG5ldC9jZmc4MDIxMS5oPgorCiBzdHJ1Y3QgYWN4X2hlYWRlcjsKIAogaW50IHdsMTI1MV9jbWRfc2VuZChzdHJ1Y3Qgd2wxMjUxICp3bCwgdTE2IHR5cGUsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pOwpAQCAtNDMsNiArNDUsMTAgQEAKIAkJCSAgIHNpemVfdCBsZW4pOwogaW50IHdsMTI1MV9jbWRfdGVtcGxhdGVfc2V0KHN0cnVjdCB3bDEyNTEgKndsLCB1MTYgY21kX2lkLAogCQkJICAgIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4pOworaW50IHdsMTI1MV9jbWRfc2NhbihzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbiwKKwkJICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbHNbXSwKKwkJICAgIHVuc2lnbmVkIGludCBuX2NoYW5uZWxzLCB1bnNpZ25lZCBpbnQgbl9wcm9iZXMpOworaW50IHdsMTI1MV9jbWRfdHJpZ2dlcl9zY2FuX3RvKHN0cnVjdCB3bDEyNTEgKndsLCB1MzIgdGltZW91dCk7CiAKIC8qIHVuaXQgbXMgKi8KICNkZWZpbmUgV0wxMjUxX0NPTU1BTkRfVElNRU9VVCAyMDAwCkBAIC0xNjMsOCArMTY5LDEyIEBACiAjZGVmaW5lIENNRE1CT1hfSEVBREVSX0xFTiA0CiAjZGVmaW5lIENNRE1CT1hfSU5GT19FTEVNX0hFQURFUl9MRU4gNAogCisjZGVmaW5lIFdMMTI1MV9TQ0FOX01JTl9EVVJBVElPTiAzMDAwMAorI2RlZmluZSBXTDEyNTFfU0NBTl9NQVhfRFVSQVRJT04gNjAwMDAKIAotc3RydWN0IGJhc2ljX3NjYW5fcGFyYW1ldGVycyB7CisjZGVmaW5lIFdMMTI1MV9TQ0FOX05VTV9QUk9CRVMgMworCitzdHJ1Y3Qgd2wxMjUxX3NjYW5fcGFyYW1ldGVycyB7CiAJdTMyIHJ4X2NvbmZpZ19vcHRpb25zOwogCXUzMiByeF9maWx0ZXJfb3B0aW9uczsKIApAQCAtMTg5LDExICsxOTksMTEgQEAKIAogCXU4IHRpZF90cmlnZ2VyOwogCXU4IHNzaWRfbGVuOwotCXUzMiBzc2lkWzhdOworCXU4IHNzaWRbMzJdOwogCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotc3RydWN0IGJhc2ljX3NjYW5fY2hhbm5lbF9wYXJhbWV0ZXJzIHsKK3N0cnVjdCB3bDEyNTFfc2Nhbl9jaF9wYXJhbWV0ZXJzIHsKIAl1MzIgbWluX2R1cmF0aW9uOyAvKiBpbiBUVSAqLwogCXUzMiBtYXhfZHVyYXRpb247IC8qIGluIFRVICovCiAJdTMyIGJzc2lkX2xzYjsKQEAgLTIxMywxMSArMjIzLDExIEBACiAvKiBTQ0FOIHBhcmFtZXRlcnMgKi8KICNkZWZpbmUgU0NBTl9NQVhfTlVNX09GX0NIQU5ORUxTIDE2CiAKLXN0cnVjdCBjbWRfc2NhbiB7CitzdHJ1Y3Qgd2wxMjUxX2NtZF9zY2FuIHsKIAlzdHJ1Y3Qgd2wxMjUxX2NtZF9oZWFkZXIgaGVhZGVyOwogCi0Jc3RydWN0IGJhc2ljX3NjYW5fcGFyYW1ldGVycyBwYXJhbXM7Ci0Jc3RydWN0IGJhc2ljX3NjYW5fY2hhbm5lbF9wYXJhbWV0ZXJzIGNoYW5uZWxzW1NDQU5fTUFYX05VTV9PRl9DSEFOTkVMU107CisJc3RydWN0IHdsMTI1MV9zY2FuX3BhcmFtZXRlcnMgcGFyYW1zOworCXN0cnVjdCB3bDEyNTFfc2Nhbl9jaF9wYXJhbWV0ZXJzIGNoYW5uZWxzW1NDQU5fTUFYX05VTV9PRl9DSEFOTkVMU107CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogZW51bSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2RlYnVnZnMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfZGVidWdmcy5jCmluZGV4IGEwMDcyMzAuLjBjY2JhNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfZGVidWdmcy5jCkBAIC0yMzcsNiArMjM3LDI3IEBACiAJLm9wZW4gPSB3bDEyNTFfb3Blbl9maWxlX2dlbmVyaWMsCiB9OwogCitzdGF0aWMgc3NpemVfdCB0eF9xdWV1ZV9zdGF0dXNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkJICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB3bDEyNTEgKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNoYXIgYnVmWzNdLCBzdGF0dXM7CisJaW50IGxlbjsKKworCWlmICh3bC0+dHhfcXVldWVfc3RvcHBlZCkKKwkJc3RhdHVzID0gJ3MnOworCWVsc2UKKwkJc3RhdHVzID0gJ3InOworCisJbGVuID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlY1xuIiwgc3RhdHVzKTsKKwlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIodXNlcmJ1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgbGVuKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdHhfcXVldWVfc3RhdHVzX29wcyA9IHsKKwkucmVhZCA9IHR4X3F1ZXVlX3N0YXR1c19yZWFkLAorCS5vcGVuID0gd2wxMjUxX29wZW5fZmlsZV9nZW5lcmljLAorfTsKKwogc3RhdGljIHZvaWQgd2wxMjUxX2RlYnVnZnNfZGVsZXRlX2ZpbGVzKHN0cnVjdCB3bDEyNTEgKndsKQogewogCURFQlVHRlNfRldTVEFUU19ERUwodHgsIGludGVybmFsX2Rlc2Nfb3ZlcmZsb3cpOwpAQCAtMzMxLDYgKzM1Miw3IEBACiAJREVCVUdGU19GV1NUQVRTX0RFTChyeHBpcGUsIHR4X3hmcl9ob3N0X2ludF90cmlnX3J4X2RhdGEpOwogCiAJREVCVUdGU19ERUwodHhfcXVldWVfbGVuKTsKKwlERUJVR0ZTX0RFTCh0eF9xdWV1ZV9zdGF0dXMpOwogCURFQlVHRlNfREVMKHJldHJ5X2NvdW50KTsKIAlERUJVR0ZTX0RFTChleGNlc3NpdmVfcmV0cmllcyk7CiB9CkBAIC00MzEsNiArNDUzLDcgQEAKIAlERUJVR0ZTX0ZXU1RBVFNfQUREKHJ4cGlwZSwgdHhfeGZyX2hvc3RfaW50X3RyaWdfcnhfZGF0YSk7CiAKIAlERUJVR0ZTX0FERCh0eF9xdWV1ZV9sZW4sIHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOworCURFQlVHRlNfQUREKHR4X3F1ZXVlX3N0YXR1cywgd2wtPmRlYnVnZnMucm9vdGRpcik7CiAJREVCVUdGU19BREQocmV0cnlfY291bnQsIHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOwogCURFQlVHRlNfQUREKGV4Y2Vzc2l2ZV9yZXRyaWVzLCB3bC0+ZGVidWdmcy5yb290ZGlyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9pbml0LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2luaXQuYwppbmRleCA1Y2I1NzMzLi41YWFkNTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2luaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2luaXQuYwpAQCAtMjk0LDYgKzI5NCwxMSBAQAogCQkJZ290byBvdXQ7CiAJfQogCisJd2wxMjUxX2FjeF9hY19jZmcod2wsIEFDX0JFLCBDV01JTl9CRSwgQ1dNQVhfQkUsIEFJRlNfRElGUywgVFhPUF9CRSk7CisJd2wxMjUxX2FjeF9hY19jZmcod2wsIEFDX0JLLCBDV01JTl9CSywgQ1dNQVhfQkssIEFJRlNfRElGUywgVFhPUF9CSyk7CisJd2wxMjUxX2FjeF9hY19jZmcod2wsIEFDX1ZJLCBDV01JTl9WSSwgQ1dNQVhfVkksIEFJRlNfRElGUywgVFhPUF9WSSk7CisJd2wxMjUxX2FjeF9hY19jZmcod2wsIEFDX1ZPLCBDV01JTl9WTywgQ1dNQVhfVk8sIEFJRlNfRElGUywgVFhPUF9WTyk7CisKIG91dDoKIAlrZnJlZShjb25maWcpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX2luaXQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfaW5pdC5oCmluZGV4IGIzYjI1ZWMuLjI2OWNlZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfaW5pdC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfaW5pdC5oCkBAIC0yNiw2ICsyNiw1MyBAQAogCiAjaW5jbHVkZSAid2wxMjUxLmgiCiAKK2VudW0geworCS8qIGJlc3QgZWZmb3J0L2xlZ2FjeSAqLworCUFDX0JFID0gMCwKKworCS8qIGJhY2tncm91bmQgKi8KKwlBQ19CSyA9IDEsCisKKwkvKiB2aWRlbyAqLworCUFDX1ZJID0gMiwKKworCS8qIHZvaWNlICovCisJQUNfVk8gPSAzLAorCisJLyogYnJvYWRjYXN0IGR1bW15IGFjY2VzcyBjYXRlZ29yeSAqLworCUFDX0JDQVNUID0gNCwKKworCU5VTV9BQ0NFU1NfQ0FURUdPUklFUyA9IDQKK307CisKKy8qIGZvbGxvd2luZyBhcmUgZGVmdWx0IHZhbHVlcyBmb3IgdGhlIElFIGZpZWxkcyovCisjZGVmaW5lIENXTUlOX0JLICAxNQorI2RlZmluZSBDV01JTl9CRSAgMTUKKyNkZWZpbmUgQ1dNSU5fVkkgIDcKKyNkZWZpbmUgQ1dNSU5fVk8gIDMKKyNkZWZpbmUgQ1dNQVhfQksgIDEwMjMKKyNkZWZpbmUgQ1dNQVhfQkUgIDYzCisjZGVmaW5lIENXTUFYX1ZJICAxNQorI2RlZmluZSBDV01BWF9WTyAgNworCisvKiBzbG90IG51bWJlciBzZXR0aW5nIHRvIHN0YXJ0IHRyYW5zbWlzc2lvbiBhdCBQSUZTIGludGVydmFsICovCisjZGVmaW5lIEFJRlNfUElGUyAxCisKKy8qCisgKiBzbG90IG51bWJlciBzZXR0aW5nIHRvIHN0YXJ0IHRyYW5zbWlzc2lvbiBhdCBESUZTIGludGVydmFsIC0gbm9ybWFsIERDRgorICogYWNjZXNzCisgKi8KKyNkZWZpbmUgQUlGU19ESUZTIDIKKworI2RlZmluZSBBSUZTTl9CSyAgNworI2RlZmluZSBBSUZTTl9CRSAgMworI2RlZmluZSBBSUZTTl9WSSAgQUlGU19QSUZTCisjZGVmaW5lIEFJRlNOX1ZPICBBSUZTX1BJRlMKKyNkZWZpbmUgVFhPUF9CSyAgIDAKKyNkZWZpbmUgVFhPUF9CRSAgIDAKKyNkZWZpbmUgVFhPUF9WSSAgIDMwMDgKKyNkZWZpbmUgVFhPUF9WTyAgIDE1MDQKKwogaW50IHdsMTI1MV9od19pbml0X2h3ZW5jX2NvbmZpZyhzdHJ1Y3Qgd2wxMjUxICp3bCk7CiBpbnQgd2wxMjUxX2h3X2luaXRfdGVtcGxhdGVzX2NvbmZpZyhzdHJ1Y3Qgd2wxMjUxICp3bCk7CiBpbnQgd2wxMjUxX2h3X2luaXRfcnhfY29uZmlnKHN0cnVjdCB3bDEyNTEgKndsLCB1MzIgY29uZmlnLCB1MzIgZmlsdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9tYWluLmMKaW5kZXggMmY1MGEyNS4uMjRhZTZhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9tYWluLmMKQEAgLTM5NSw2ICszOTUsNyBAQAogCSAqIHRoZSBxdWV1ZSBoZXJlLCBvdGhlcndpc2UgdGhlIHF1ZXVlIHdpbGwgZ2V0IHRvbyBsb25nLgogCSAqLwogCWlmIChza2JfcXVldWVfbGVuKCZ3bC0+dHhfcXVldWUpID49IFdMMTI1MV9UWF9RVUVVRV9NQVhfTEVOR1RIKSB7CisJCXdsMTI1MV9kZWJ1ZyhERUJVR19UWCwgIm9wX3R4OiB0eF9xdWV1ZSBmdWxsLCBzdG9wIHF1ZXVlcyIpOwogCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXMod2wtPmh3KTsKIAogCQkvKgpAQCAtNTEwLDEzICs1MTEsMTMgQEAKIH0KIAogc3RhdGljIGludCB3bDEyNTFfb3BfYWRkX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCB3bDEyNTEgKndsID0gaHctPnByaXY7CiAJaW50IHJldCA9IDA7CiAKIAl3bDEyNTFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBhZGQgaW50ZXJmYWNlIHR5cGUgJWQgbWFjICVwTSIsCi0JCSAgICAgY29uZi0+dHlwZSwgY29uZi0+bWFjX2FkZHIpOworCQkgICAgIHZpZi0+dHlwZSwgdmlmLT5hZGRyKTsKIAogCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAJaWYgKHdsLT52aWYpIHsKQEAgLTUyNCw5ICs1MjUsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQl3bC0+dmlmID0gY29uZi0+dmlmOworCXdsLT52aWYgPSB2aWY7CiAKLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJd2wtPmJzc190eXBlID0gQlNTX1RZUEVfU1RBX0JTUzsKIAkJYnJlYWs7CkBAIC01MzgsOCArNTM5LDggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKG1lbWNtcCh3bC0+bWFjX2FkZHIsIGNvbmYtPm1hY19hZGRyLCBFVEhfQUxFTikpIHsKLQkJbWVtY3B5KHdsLT5tYWNfYWRkciwgY29uZi0+bWFjX2FkZHIsIEVUSF9BTEVOKTsKKwlpZiAobWVtY21wKHdsLT5tYWNfYWRkciwgdmlmLT5hZGRyLCBFVEhfQUxFTikpIHsKKwkJbWVtY3B5KHdsLT5tYWNfYWRkciwgdmlmLT5hZGRyLCBFVEhfQUxFTik7CiAJCVNFVF9JRUVFODAyMTFfUEVSTV9BRERSKHdsLT5odywgd2wtPm1hY19hZGRyKTsKIAkJcmV0ID0gd2wxMjUxX2FjeF9zdGF0aW9uX2lkKHdsKTsKIAkJaWYgKHJldCA8IDApCkBAIC01NTIsNyArNTUzLDcgQEAKIH0KIAogc3RhdGljIHZvaWQgd2wxMjUxX29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkJIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IHdsMTI1MSAqd2wgPSBody0+cHJpdjsKIApAQCAtNTYyLDQzICs1NjMsMjUgQEAKIAltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiB9CiAKLXN0YXRpYyBpbnQgd2wxMjUxX2J1aWxkX251bGxfZGF0YShzdHJ1Y3Qgd2wxMjUxICp3bCkKK3N0YXRpYyBpbnQgd2wxMjUxX2J1aWxkX3Fvc19udWxsX2RhdGEoc3RydWN0IHdsMTI1MSAqd2wpCiB7Ci0Jc3RydWN0IHdsMTJ4eF9udWxsX2RhdGFfdGVtcGxhdGUgdGVtcGxhdGU7CisJc3RydWN0IGllZWU4MDIxMV9xb3NfaGRyIHRlbXBsYXRlOwogCi0JaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIod2wtPmJzc2lkKSkgewotCQltZW1jcHkodGVtcGxhdGUuaGVhZGVyLmRhLCB3bC0+YnNzaWQsIEVUSF9BTEVOKTsKLQkJbWVtY3B5KHRlbXBsYXRlLmhlYWRlci5ic3NpZCwgd2wtPmJzc2lkLCBFVEhfQUxFTik7Ci0JfSBlbHNlIHsKLQkJbWVtc2V0KHRlbXBsYXRlLmhlYWRlci5kYSwgMHhmZiwgRVRIX0FMRU4pOwotCQltZW1zZXQodGVtcGxhdGUuaGVhZGVyLmJzc2lkLCAweGZmLCBFVEhfQUxFTik7Ci0JfQorCW1lbXNldCgmdGVtcGxhdGUsIDAsIHNpemVvZih0ZW1wbGF0ZSkpOwogCi0JbWVtY3B5KHRlbXBsYXRlLmhlYWRlci5zYSwgd2wtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0JdGVtcGxhdGUuaGVhZGVyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9EQVRBIHwKLQkJCQkJCUlFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyB8Ci0JCQkJCQlJRUVFODAyMTFfRkNUTF9UT0RTKTsKKwltZW1jcHkodGVtcGxhdGUuYWRkcjEsIHdsLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweSh0ZW1wbGF0ZS5hZGRyMiwgd2wtPm1hY19hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KHRlbXBsYXRlLmFkZHIzLCB3bC0+YnNzaWQsIEVUSF9BTEVOKTsKIAotCXJldHVybiB3bDEyNTFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX05VTExfREFUQSwgJnRlbXBsYXRlLAorCXRlbXBsYXRlLmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8CisJCQkJCSAgICAgSUVFRTgwMjExX1NUWVBFX1FPU19OVUxMRlVOQyB8CisJCQkJCSAgICAgSUVFRTgwMjExX0ZDVExfVE9EUyk7CisKKwkvKiBGSVhNRTogbm90IHN1cmUgd2hhdCBwcmlvcml0eSB0byB1c2UgaGVyZSAqLworCXRlbXBsYXRlLnFvc19jdHJsID0gY3B1X3RvX2xlMTYoMCk7CisKKwlyZXR1cm4gd2wxMjUxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9RT1NfTlVMTF9EQVRBLCAmdGVtcGxhdGUsCiAJCQkJICAgICAgIHNpemVvZih0ZW1wbGF0ZSkpOwotCi19Ci0KLXN0YXRpYyBpbnQgd2wxMjUxX2J1aWxkX3BzX3BvbGwoc3RydWN0IHdsMTI1MSAqd2wsIHUxNiBhaWQpCi17Ci0Jc3RydWN0IHdsMTJ4eF9wc19wb2xsX3RlbXBsYXRlIHRlbXBsYXRlOwotCi0JbWVtY3B5KHRlbXBsYXRlLmJzc2lkLCB3bC0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZW1jcHkodGVtcGxhdGUudGEsIHdsLT5tYWNfYWRkciwgRVRIX0FMRU4pOwotCi0JLyogYWlkIGluIFBTLVBvbGwgaGFzIGl0cyB0d28gTVNCcyBlYWNoIHNldCB0byAxICovCi0JdGVtcGxhdGUuYWlkID0gY3B1X3RvX2xlMTYoMSA8PCAxNSB8IDEgPDwgMTQgfCBhaWQpOwotCi0JdGVtcGxhdGUuZmMgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfQ1RMIHwgSUVFRTgwMjExX1NUWVBFX1BTUE9MTCk7Ci0KLQlyZXR1cm4gd2wxMjUxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9QU19QT0xMLCAmdGVtcGxhdGUsCi0JCQkJICAgICAgIHNpemVvZih0ZW1wbGF0ZSkpOwotCiB9CiAKIHN0YXRpYyBpbnQgd2wxMjUxX29wX2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpCkBAIC02MzQsMjYgKzYxNywzNCBAQAogCiAJCXdsLT5wc21fcmVxdWVzdGVkID0gdHJ1ZTsKIAorCQl3bC0+ZHRpbV9wZXJpb2QgPSBjb25mLT5wc19kdGltX3BlcmlvZDsKKworCQlyZXQgPSB3bDEyNTFfYWN4X3dyX3RidHRfYW5kX2R0aW0od2wsIHdsLT5iZWFjb25faW50LAorCQkJCQkJICB3bC0+ZHRpbV9wZXJpb2QpOworCiAJCS8qCi0JCSAqIFdlIGVudGVyIFBTTSBvbmx5IGlmIHdlJ3JlIGFscmVhZHkgYXNzb2NpYXRlZC4KLQkJICogSWYgd2UncmUgbm90LCB3ZSdsbCBlbnRlciBpdCB3aGVuIGpvaW5pbmcgYW4gU1NJRCwKLQkJICogdGhyb3VnaCB0aGUgYnNzX2luZm9fY2hhbmdlZCgpIGhvb2suCisJCSAqIG1hYzgwMjExIGVuYWJsZXMgUFNNIG9ubHkgaWYgd2UncmUgYWxyZWFkeSBhc3NvY2lhdGVkLgogCQkgKi8KIAkJcmV0ID0gd2wxMjUxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfc2xlZXA7CiAJfSBlbHNlIGlmICghKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpICYmCiAJCSAgIHdsLT5wc21fcmVxdWVzdGVkKSB7CiAJCXdsMTI1MV9kZWJ1ZyhERUJVR19QU00sICJwc20gZGlzYWJsZWQiKTsKIAogCQl3bC0+cHNtX3JlcXVlc3RlZCA9IGZhbHNlOwogCi0JCWlmICh3bC0+cHNtKQorCQlpZiAod2wtPnBzbSkgewogCQkJcmV0ID0gd2wxMjUxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX0FDVElWRV9NT0RFKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0X3NsZWVwOworCQl9CiAJfQogCiAJaWYgKGNvbmYtPnBvd2VyX2xldmVsICE9IHdsLT5wb3dlcl9sZXZlbCkgewogCQlyZXQgPSB3bDEyNTFfYWN4X3R4X3Bvd2VyKHdsLCBjb25mLT5wb3dlcl9sZXZlbCk7CiAJCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7CisJCQlnb3RvIG91dF9zbGVlcDsKIAogCQl3bC0+cG93ZXJfbGV2ZWwgPSBjb25mLT5wb3dlcl9sZXZlbDsKIAl9CkBAIC04NjQsMTgzICs4NTUsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHdsMTI1MV9idWlsZF9iYXNpY19yYXRlcyhjaGFyICpyYXRlcykKLXsKLQl1OCBpbmRleCA9IDA7Ci0KLQlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0sgfCBJRUVFODAyMTFfQ0NLX1JBVEVfMU1COwotCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX0JBU0lDX1JBVEVfTUFTSyB8IElFRUU4MDIxMV9DQ0tfUkFURV8yTUI7Ci0JcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfQkFTSUNfUkFURV9NQVNLIHwgSUVFRTgwMjExX0NDS19SQVRFXzVNQjsKLQlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9CQVNJQ19SQVRFX01BU0sgfCBJRUVFODAyMTFfQ0NLX1JBVEVfMTFNQjsKLQotCXJldHVybiBpbmRleDsKLX0KLQotc3RhdGljIGludCB3bDEyNTFfYnVpbGRfZXh0ZW5kZWRfcmF0ZXMoY2hhciAqcmF0ZXMpCi17Ci0JdTggaW5kZXggPSAwOwotCi0JcmF0ZXNbaW5kZXgrK10gPSBJRUVFODAyMTFfT0ZETV9SQVRFXzZNQjsKLQlyYXRlc1tpbmRleCsrXSA9IElFRUU4MDIxMV9PRkRNX1JBVEVfOU1COwotCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX09GRE1fUkFURV8xMk1COwotCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX09GRE1fUkFURV8xOE1COwotCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX09GRE1fUkFURV8yNE1COwotCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX09GRE1fUkFURV8zNk1COwotCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX09GRE1fUkFURV80OE1COwotCXJhdGVzW2luZGV4KytdID0gSUVFRTgwMjExX09GRE1fUkFURV81NE1COwotCi0JcmV0dXJuIGluZGV4OwotfQotCi0KLXN0YXRpYyBpbnQgd2wxMjUxX2J1aWxkX3Byb2JlX3JlcShzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggKnNzaWQsIHNpemVfdCBzc2lkX2xlbikKLXsKLQlzdHJ1Y3Qgd2wxMnh4X3Byb2JlX3JlcV90ZW1wbGF0ZSB0ZW1wbGF0ZTsKLQlzdHJ1Y3Qgd2wxMnh4X2llX3JhdGVzICpyYXRlczsKLQljaGFyICpwdHI7Ci0JdTE2IHNpemU7Ci0KLQlwdHIgPSAoY2hhciAqKSZ0ZW1wbGF0ZTsKLQlzaXplID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaGVhZGVyKTsKLQotCW1lbXNldCh0ZW1wbGF0ZS5oZWFkZXIuZGEsIDB4ZmYsIEVUSF9BTEVOKTsKLQltZW1zZXQodGVtcGxhdGUuaGVhZGVyLmJzc2lkLCAweGZmLCBFVEhfQUxFTik7Ci0JbWVtY3B5KHRlbXBsYXRlLmhlYWRlci5zYSwgd2wtPm1hY19hZGRyLCBFVEhfQUxFTik7Ci0JdGVtcGxhdGUuaGVhZGVyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEpOwotCi0JLyogSUVzICovCi0JLyogU1NJRCAqLwotCXRlbXBsYXRlLnNzaWQuaGVhZGVyLmlkID0gV0xBTl9FSURfU1NJRDsKLQl0ZW1wbGF0ZS5zc2lkLmhlYWRlci5sZW4gPSBzc2lkX2xlbjsKLQlpZiAoc3NpZF9sZW4gJiYgc3NpZCkKLQkJbWVtY3B5KHRlbXBsYXRlLnNzaWQuc3NpZCwgc3NpZCwgc3NpZF9sZW4pOwotCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCB3bDEyeHhfaWVfaGVhZGVyKSArIHNzaWRfbGVuOwotCXB0ciArPSBzaXplOwotCi0JLyogQmFzaWMgUmF0ZXMgKi8KLQlyYXRlcyA9IChzdHJ1Y3Qgd2wxMnh4X2llX3JhdGVzICopcHRyOwotCXJhdGVzLT5oZWFkZXIuaWQgPSBXTEFOX0VJRF9TVVBQX1JBVEVTOwotCXJhdGVzLT5oZWFkZXIubGVuID0gd2wxMjUxX2J1aWxkX2Jhc2ljX3JhdGVzKHJhdGVzLT5yYXRlcyk7Ci0Jc2l6ZSArPSBzaXplb2Yoc3RydWN0IHdsMTJ4eF9pZV9oZWFkZXIpICsgcmF0ZXMtPmhlYWRlci5sZW47Ci0JcHRyICs9IHNpemVvZihzdHJ1Y3Qgd2wxMnh4X2llX2hlYWRlcikgKyByYXRlcy0+aGVhZGVyLmxlbjsKLQotCS8qIEV4dGVuZGVkIHJhdGVzICovCi0JcmF0ZXMgPSAoc3RydWN0IHdsMTJ4eF9pZV9yYXRlcyAqKXB0cjsKLQlyYXRlcy0+aGVhZGVyLmlkID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7Ci0JcmF0ZXMtPmhlYWRlci5sZW4gPSB3bDEyNTFfYnVpbGRfZXh0ZW5kZWRfcmF0ZXMocmF0ZXMtPnJhdGVzKTsKLQlzaXplICs9IHNpemVvZihzdHJ1Y3Qgd2wxMnh4X2llX2hlYWRlcikgKyByYXRlcy0+aGVhZGVyLmxlbjsKLQotCXdsMTI1MV9kdW1wKERFQlVHX1NDQU4sICJQUk9CRSBSRVE6ICIsICZ0ZW1wbGF0ZSwgc2l6ZSk7Ci0KLQlyZXR1cm4gd2wxMjUxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9QUk9CRV9SRVEsICZ0ZW1wbGF0ZSwKLQkJCQkgICAgICBzaXplKTsKLX0KLQotc3RhdGljIGludCB3bDEyNTFfaHdfc2NhbihzdHJ1Y3Qgd2wxMjUxICp3bCwgdTggKnNzaWQsIHNpemVfdCBsZW4sCi0JCQkgIHU4IGFjdGl2ZV9zY2FuLCB1OCBoaWdoX3ByaW8sIHU4IG51bV9jaGFubmVscywKLQkJCSAgdTggcHJvYmVfcmVxdWVzdHMpCi17Ci0Jc3RydWN0IHdsMTI1MV9jbWRfdHJpZ2dlcl9zY2FuX3RvICp0cmlnZ2VyID0gTlVMTDsKLQlzdHJ1Y3QgY21kX3NjYW4gKnBhcmFtcyA9IE5VTEw7Ci0JaW50IGksIHJldDsKLQl1MTYgc2Nhbl9vcHRpb25zID0gMDsKLQotCWlmICh3bC0+c2Nhbm5pbmcpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcGFyYW1zID0ga3phbGxvYyhzaXplb2YoKnBhcmFtcyksIEdGUF9LRVJORUwpOwotCWlmICghcGFyYW1zKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXBhcmFtcy0+cGFyYW1zLnJ4X2NvbmZpZ19vcHRpb25zID0gY3B1X3RvX2xlMzIoQ0ZHX1JYX0FMTF9HT09EKTsKLQlwYXJhbXMtPnBhcmFtcy5yeF9maWx0ZXJfb3B0aW9ucyA9Ci0JCWNwdV90b19sZTMyKENGR19SWF9QUlNQX0VOIHwgQ0ZHX1JYX01HTVRfRU4gfCBDRkdfUlhfQkNOX0VOKTsKLQotCS8qIEhpZ2ggcHJpb3JpdHkgc2NhbiAqLwotCWlmICghYWN0aXZlX3NjYW4pCi0JCXNjYW5fb3B0aW9ucyB8PSBTQ0FOX1BBU1NJVkU7Ci0JaWYgKGhpZ2hfcHJpbykKLQkJc2Nhbl9vcHRpb25zIHw9IFNDQU5fUFJJT1JJVFlfSElHSDsKLQlwYXJhbXMtPnBhcmFtcy5zY2FuX29wdGlvbnMgPSBzY2FuX29wdGlvbnM7Ci0KLQlwYXJhbXMtPnBhcmFtcy5udW1fY2hhbm5lbHMgPSBudW1fY2hhbm5lbHM7Ci0JcGFyYW1zLT5wYXJhbXMubnVtX3Byb2JlX3JlcXVlc3RzID0gcHJvYmVfcmVxdWVzdHM7Ci0JcGFyYW1zLT5wYXJhbXMudHhfcmF0ZSA9IGNwdV90b19sZTE2KDEgPDwgMSk7IC8qIDIgTWJwcyAqLwotCXBhcmFtcy0+cGFyYW1zLnRpZF90cmlnZ2VyID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1fY2hhbm5lbHM7IGkrKykgewotCQlwYXJhbXMtPmNoYW5uZWxzW2ldLm1pbl9kdXJhdGlvbiA9IGNwdV90b19sZTMyKDMwMDAwKTsKLQkJcGFyYW1zLT5jaGFubmVsc1tpXS5tYXhfZHVyYXRpb24gPSBjcHVfdG9fbGUzMig2MDAwMCk7Ci0JCW1lbXNldCgmcGFyYW1zLT5jaGFubmVsc1tpXS5ic3NpZF9sc2IsIDB4ZmYsIDQpOwotCQltZW1zZXQoJnBhcmFtcy0+Y2hhbm5lbHNbaV0uYnNzaWRfbXNiLCAweGZmLCAyKTsKLQkJcGFyYW1zLT5jaGFubmVsc1tpXS5lYXJseV90ZXJtaW5hdGlvbiA9IDA7Ci0JCXBhcmFtcy0+Y2hhbm5lbHNbaV0udHhfcG93ZXJfYXR0ID0gMDsKLQkJcGFyYW1zLT5jaGFubmVsc1tpXS5jaGFubmVsID0gaSArIDE7Ci0JCW1lbXNldChwYXJhbXMtPmNoYW5uZWxzW2ldLnBhZCwgMCwgMyk7Ci0JfQotCi0JZm9yIChpID0gbnVtX2NoYW5uZWxzOyBpIDwgU0NBTl9NQVhfTlVNX09GX0NIQU5ORUxTOyBpKyspCi0JCW1lbXNldCgmcGFyYW1zLT5jaGFubmVsc1tpXSwgMCwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3QgYmFzaWNfc2Nhbl9jaGFubmVsX3BhcmFtZXRlcnMpKTsKLQotCWlmIChsZW4gJiYgc3NpZCkgewotCQlwYXJhbXMtPnBhcmFtcy5zc2lkX2xlbiA9IGxlbjsKLQkJbWVtY3B5KHBhcmFtcy0+cGFyYW1zLnNzaWQsIHNzaWQsIGxlbik7Ci0JfSBlbHNlIHsKLQkJcGFyYW1zLT5wYXJhbXMuc3NpZF9sZW4gPSAwOwotCQltZW1zZXQocGFyYW1zLT5wYXJhbXMuc3NpZCwgMCwgMzIpOwotCX0KLQotCXJldCA9IHdsMTI1MV9idWlsZF9wcm9iZV9yZXEod2wsIHNzaWQsIGxlbik7Ci0JaWYgKHJldCA8IDApIHsKLQkJd2wxMjUxX2Vycm9yKCJQUk9CRSByZXF1ZXN0IHRlbXBsYXRlIGZhaWxlZCIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQl0cmlnZ2VyID0ga3phbGxvYyhzaXplb2YoKnRyaWdnZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXRyaWdnZXIpCi0JCWdvdG8gb3V0OwotCi0JdHJpZ2dlci0+dGltZW91dCA9IDA7Ci0KLQlyZXQgPSB3bDEyNTFfY21kX3NlbmQod2wsIENNRF9UUklHR0VSX1NDQU5fVE8sIHRyaWdnZXIsCi0JCQkgICAgICBzaXplb2YoKnRyaWdnZXIpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNTFfZXJyb3IoInRyaWdnZXIgc2NhbiB0byBmYWlsZWQgZm9yIGh3IHNjYW4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jd2wxMjUxX2R1bXAoREVCVUdfU0NBTiwgIlNDQU46ICIsIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpKTsKLQotCXdsLT5zY2FubmluZyA9IHRydWU7Ci0KLQlyZXQgPSB3bDEyNTFfY21kX3NlbmQod2wsIENNRF9TQ0FOLCBwYXJhbXMsIHNpemVvZigqcGFyYW1zKSk7Ci0JaWYgKHJldCA8IDApCi0JCXdsMTI1MV9lcnJvcigiU0NBTiBmYWlsZWQiKTsKLQotCXdsMTI1MV9tZW1fcmVhZCh3bCwgd2wtPmNtZF9ib3hfYWRkciwgcGFyYW1zLCBzaXplb2YoKnBhcmFtcykpOwotCi0JaWYgKHBhcmFtcy0+aGVhZGVyLnN0YXR1cyAhPSBDTURfU1RBVFVTX1NVQ0NFU1MpIHsKLQkJd2wxMjUxX2Vycm9yKCJURVNUIGNvbW1hbmQgYW5zd2VyIGVycm9yOiAlZCIsCi0JCQkgICAgIHBhcmFtcy0+aGVhZGVyLnN0YXR1cyk7Ci0JCXdsLT5zY2FubmluZyA9IGZhbHNlOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIG91dDsKLQl9Ci0KLW91dDoKLQlrZnJlZShwYXJhbXMpOwotCXJldHVybiByZXQ7Ci0KLX0KLQogc3RhdGljIGludCB3bDEyNTFfb3BfaHdfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCSAgICAgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAqcmVxKQogewogCXN0cnVjdCB3bDEyNTEgKndsID0gaHctPnByaXY7Ci0JaW50IHJldDsKLQl1OCAqc3NpZCA9IE5VTEw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzaXplX3Qgc3NpZF9sZW4gPSAwOworCXU4ICpzc2lkID0gTlVMTDsKKwlpbnQgcmV0OwogCiAJd2wxMjUxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgaHcgc2NhbiIpOwogCkBAIC0xMDUxLDEyICs4NzMsNDMgQEAKIAogCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAKKwlpZiAod2wtPnNjYW5uaW5nKSB7CisJCXdsMTI1MV9kZWJ1ZyhERUJVR19TQ0FOLCAic2NhbiBhbHJlYWR5IGluIHByb2dyZXNzIik7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwogCXJldCA9IHdsMTI1MV9wc19lbHBfd2FrZXVwKHdsKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSB3bDEyNTFfaHdfc2Nhbihody0+cHJpdiwgc3NpZCwgc3NpZF9sZW4sIDEsIDAsIDEzLCAzKTsKKwlza2IgPSBpZWVlODAyMTFfcHJvYmVyZXFfZ2V0KHdsLT5odywgd2wtPnZpZiwgc3NpZCwgc3NpZF9sZW4sCisJCQkJICAgICByZXEtPmllLCByZXEtPmllX2xlbik7CisJaWYgKCFza2IpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQogCisJcmV0ID0gd2wxMjUxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9QUk9CRV9SRVEsIHNrYi0+ZGF0YSwKKwkJCQkgICAgICBza2ItPmxlbik7CisJZGV2X2tmcmVlX3NrYihza2IpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9zbGVlcDsKKworCXJldCA9IHdsMTI1MV9jbWRfdHJpZ2dlcl9zY2FuX3RvKHdsLCAwKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfc2xlZXA7CisKKwl3bC0+c2Nhbm5pbmcgPSB0cnVlOworCisJcmV0ID0gd2wxMjUxX2NtZF9zY2FuKHdsLCBzc2lkLCBzc2lkX2xlbiwgcmVxLT5jaGFubmVscywKKwkJCSAgICAgIHJlcS0+bl9jaGFubmVscywgV0wxMjUxX1NDQU5fTlVNX1BST0JFUyk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wtPnNjYW5uaW5nID0gZmFsc2U7CisJCWdvdG8gb3V0X3NsZWVwOworCX0KKworb3V0X3NsZWVwOgogCXdsMTI1MV9wc19lbHBfc2xlZXAod2wpOwogCiBvdXQ6CkBAIC0xMDkzLDkgKzk0Niw4IEBACiAJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmJzc19jb25mLAogCQkJCSAgICAgICB1MzIgY2hhbmdlZCkKIHsKLQllbnVtIHdsMTI1MV9jbWRfcHNfbW9kZSBtb2RlOwogCXN0cnVjdCB3bDEyNTEgKndsID0gaHctPnByaXY7Ci0Jc3RydWN0IHNrX2J1ZmYgKmJlYWNvbjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uLCAqc2tiOwogCWludCByZXQ7CiAKIAl3bDEyNTFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBic3MgaW5mbyBjaGFuZ2VkIik7CkBAIC0xMTA5LDcgKzk2MSwxNyBAQAogCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQlNTSUQpIHsKIAkJbWVtY3B5KHdsLT5ic3NpZCwgYnNzX2NvbmYtPmJzc2lkLCBFVEhfQUxFTik7CiAKLQkJcmV0ID0gd2wxMjUxX2J1aWxkX251bGxfZGF0YSh3bCk7CisJCXNrYiA9IGllZWU4MDIxMV9udWxsZnVuY19nZXQod2wtPmh3LCB3bC0+dmlmKTsKKwkJaWYgKCFza2IpCisJCQlnb3RvIG91dF9zbGVlcDsKKworCQlyZXQgPSB3bDEyNTFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX05VTExfREFUQSwKKwkJCQkJICAgICAgc2tiLT5kYXRhLCBza2ItPmxlbik7CisJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dF9zbGVlcDsKKworCQlyZXQgPSB3bDEyNTFfYnVpbGRfcW9zX251bGxfZGF0YSh3bCk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBvdXQ7CiAKQEAgLTExMjQsMjcgKzk4NiwyMSBAQAogCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKIAkJaWYgKGJzc19jb25mLT5hc3NvYykgewogCQkJd2wtPmJlYWNvbl9pbnQgPSBic3NfY29uZi0+YmVhY29uX2ludDsKLQkJCXdsLT5kdGltX3BlcmlvZCA9IGJzc19jb25mLT5kdGltX3BlcmlvZDsKIAotCQkJcmV0ID0gd2wxMjUxX2FjeF93cl90YnR0X2FuZF9kdGltKHdsLCB3bC0+YmVhY29uX2ludCwKLQkJCQkJCQkgIHdsLT5kdGltX3BlcmlvZCk7Ci0JCQl3bC0+YWlkID0gYnNzX2NvbmYtPmFpZDsKKwkJCXNrYiA9IGllZWU4MDIxMV9wc3BvbGxfZ2V0KHdsLT5odywgd2wtPnZpZik7CisJCQlpZiAoIXNrYikKKwkJCQlnb3RvIG91dF9zbGVlcDsKIAotCQkJcmV0ID0gd2wxMjUxX2J1aWxkX3BzX3BvbGwod2wsIHdsLT5haWQpOworCQkJcmV0ID0gd2wxMjUxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9QU19QT0xMLAorCQkJCQkJICAgICAgc2tiLT5kYXRhLAorCQkJCQkJICAgICAgc2tiLT5sZW4pOworCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJaWYgKHJldCA8IDApCiAJCQkJZ290byBvdXRfc2xlZXA7CiAKLQkJCXJldCA9IHdsMTI1MV9hY3hfYWlkKHdsLCB3bC0+YWlkKTsKKwkJCXJldCA9IHdsMTI1MV9hY3hfYWlkKHdsLCBic3NfY29uZi0+YWlkKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCWdvdG8gb3V0X3NsZWVwOwotCi0JCQkvKiBJZiB3ZSB3YW50IHRvIGdvIGluIFBTTSBidXQgd2UncmUgbm90IHRoZXJlIHlldCAqLwotCQkJaWYgKHdsLT5wc21fcmVxdWVzdGVkICYmICF3bC0+cHNtKSB7Ci0JCQkJbW9kZSA9IFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFOwotCQkJCXJldCA9IHdsMTI1MV9wc19zZXRfbW9kZSh3bCwgbW9kZSk7Ci0JCQkJaWYgKHJldCA8IDApCi0JCQkJCWdvdG8gb3V0X3NsZWVwOwotCQkJfQogCQl9IGVsc2UgewogCQkJLyogdXNlIGRlZmF1bHRzIHdoZW4gbm90IGFzc29jaWF0ZWQgKi8KIAkJCXdsLT5iZWFjb25faW50ID0gV0wxMjUxX0RFRkFVTFRfQkVBQ09OX0lOVDsKQEAgLTExNzYsNyArMTAzMiw3IEBACiAJCQlyZXQgPSB3bDEyNTFfYWN4X2N0c19wcm90ZWN0KHdsLCBDVFNQUk9URUNUX0RJU0FCTEUpOwogCQlpZiAocmV0IDwgMCkgewogCQkJd2wxMjUxX3dhcm5pbmcoIlNldCBjdHNwcm90ZWN0IGZhaWxlZCAlZCIsIHJldCk7Ci0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X3NsZWVwOwogCQl9CiAJfQogCkBAIC0xMTg3LDcgKzEwNDMsNyBAQAogCiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkZXZfa2ZyZWVfc2tiKGJlYWNvbik7Ci0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X3NsZWVwOwogCQl9CiAKIAkJcmV0ID0gd2wxMjUxX2NtZF90ZW1wbGF0ZV9zZXQod2wsIENNRF9QUk9CRV9SRVNQLCBiZWFjb24tPmRhdGEsCkBAIC0xMTk2LDEzICsxMDUyLDEzIEBACiAJCWRldl9rZnJlZV9za2IoYmVhY29uKTsKIAogCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfc2xlZXA7CiAKIAkJcmV0ID0gd2wxMjUxX2pvaW4od2wsIHdsLT5ic3NfdHlwZSwgd2wtPmJlYWNvbl9pbnQsCiAJCQkJICB3bC0+Y2hhbm5lbCwgd2wtPmR0aW1fcGVyaW9kKTsKIAogCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OworCQkJZ290byBvdXRfc2xlZXA7CiAJfQogCiBvdXRfc2xlZXA6CkBAIC0xMjczLDYgKzExMjksNDkgQEAKIAl7IC5od192YWx1ZSA9IDEzLCAuY2VudGVyX2ZyZXEgPSAyNDcyfSwKIH07CiAKK3N0YXRpYyBpbnQgd2wxMjUxX29wX2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUxNiBxdWV1ZSwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcykKK3sKKwllbnVtIHdsMTI1MV9hY3hfcHNfc2NoZW1lIHBzX3NjaGVtZTsKKwlzdHJ1Y3Qgd2wxMjUxICp3bCA9IGh3LT5wcml2OworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworCisJd2wxMjUxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgY29uZiB0eCAlZCIsIHF1ZXVlKTsKKworCXJldCA9IHdsMTI1MV9wc19lbHBfd2FrZXVwKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwkvKiBtYWM4MDIxMSB1c2VzIHVuaXRzIG9mIDMyIHVzZWMgKi8KKwlyZXQgPSB3bDEyNTFfYWN4X2FjX2NmZyh3bCwgd2wxMjUxX3R4X2dldF9xdWV1ZShxdWV1ZSksCisJCQkJcGFyYW1zLT5jd19taW4sIHBhcmFtcy0+Y3dfbWF4LAorCQkJCXBhcmFtcy0+YWlmcywgcGFyYW1zLT50eG9wICogMzIpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9zbGVlcDsKKworCWlmIChwYXJhbXMtPnVhcHNkKQorCQlwc19zY2hlbWUgPSBXTDEyNTFfQUNYX1BTX1NDSEVNRV9VUFNEX1RSSUdHRVI7CisJZWxzZQorCQlwc19zY2hlbWUgPSBXTDEyNTFfQUNYX1BTX1NDSEVNRV9MRUdBQ1k7CisKKwlyZXQgPSB3bDEyNTFfYWN4X3RpZF9jZmcod2wsIHdsMTI1MV90eF9nZXRfcXVldWUocXVldWUpLAorCQkJCSBDSEFOTkVMX1RZUEVfRURDRiwKKwkJCQkgd2wxMjUxX3R4X2dldF9xdWV1ZShxdWV1ZSksIHBzX3NjaGVtZSwKKwkJCQkgV0wxMjUxX0FDWF9BQ0tfUE9MSUNZX0xFR0FDWSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X3NsZWVwOworCitvdXRfc2xlZXA6CisJd2wxMjUxX3BzX2VscF9zbGVlcCh3bCk7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCiAvKiBjYW4ndCBiZSBjb25zdCwgbWFjODAyMTEgd3JpdGVzIHRvIHRoaXMgKi8KIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kIHdsMTI1MV9iYW5kXzJnaHogPSB7CiAJLmNoYW5uZWxzID0gd2wxMjUxX2NoYW5uZWxzLApAQCAtMTI5Myw2ICsxMTkyLDcgQEAKIAkuaHdfc2NhbiA9IHdsMTI1MV9vcF9od19zY2FuLAogCS5ic3NfaW5mb19jaGFuZ2VkID0gd2wxMjUxX29wX2Jzc19pbmZvX2NoYW5nZWQsCiAJLnNldF9ydHNfdGhyZXNob2xkID0gd2wxMjUxX29wX3NldF9ydHNfdGhyZXNob2xkLAorCS5jb25mX3R4ID0gd2wxMjUxX29wX2NvbmZfdHgsCiB9OwogCiBzdGF0aWMgaW50IHdsMTI1MV9yZWdpc3Rlcl9odyhzdHJ1Y3Qgd2wxMjUxICp3bCkKQEAgLTEzMzIsMTIgKzEyMzIsMTUgQEAKIAl3bC0+aHctPmZsYWdzID0gSUVFRTgwMjExX0hXX1NJR05BTF9EQk0gfAogCQlJRUVFODAyMTFfSFdfTk9JU0VfREJNIHwKIAkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIHwKLQkJSUVFRTgwMjExX0hXX0JFQUNPTl9GSUxURVI7CisJCUlFRUU4MDIxMV9IV19CRUFDT05fRklMVEVSIHwKKwkJSUVFRTgwMjExX0hXX1NVUFBPUlRTX1VBUFNEOwogCiAJd2wtPmh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pOwogCXdsLT5ody0+d2lwaHktPm1heF9zY2FuX3NzaWRzID0gMTsKIAl3bC0+aHctPndpcGh5LT5iYW5kc1tJRUVFODAyMTFfQkFORF8yR0haXSA9ICZ3bDEyNTFfYmFuZF8yZ2h6OwogCisJd2wtPmh3LT5xdWV1ZXMgPSA0OworCiAJcmV0ID0gd2wxMjUxX3JlZ2lzdGVyX2h3KHdsKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcHMuYwppbmRleCA5OTMxYjE5Li44NTFkZmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3BzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9wcy5jCkBAIC0yNiw3ICsyNiw4IEBACiAjaW5jbHVkZSAid2wxMjUxX2NtZC5oIgogI2luY2x1ZGUgIndsMTI1MV9pby5oIgogCi0jZGVmaW5lIFdMMTI1MV9XQUtFVVBfVElNRU9VVCAyMDAwCisvKiBpbiBtcyAqLworI2RlZmluZSBXTDEyNTFfV0FLRVVQX1RJTUVPVVQgMTAwCiAKIHZvaWQgd2wxMjUxX2VscF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKQEAgLTY3LDcgKzY4LDcgQEAKIAogaW50IHdsMTI1MV9wc19lbHBfd2FrZXVwKHN0cnVjdCB3bDEyNTEgKndsKQogewotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQsIHN0YXJ0OwogCXUzMiBlbHBfcmVnOwogCiAJaWYgKCF3bC0+ZWxwKQpAQCAtNzUsNiArNzYsNyBAQAogCiAJd2wxMjUxX2RlYnVnKERFQlVHX1BTTSwgIndha2luZyB1cCBjaGlwIGZyb20gZWxwIik7CiAKKwlzdGFydCA9IGppZmZpZXM7CiAJdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFdMMTI1MV9XQUtFVVBfVElNRU9VVCk7CiAKIAl3bDEyNTFfd3JpdGUzMih3bCwgSFdfQUNDRVNTX0VMUF9DVFJMX1JFR19BRERSLCBFTFBDVFJMX1dBS0VfVVApOwpAQCAtOTUsOCArOTcsNyBAQAogCX0KIAogCXdsMTI1MV9kZWJ1ZyhERUJVR19QU00sICJ3YWtldXAgdGltZTogJXUgbXMiLAotCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcykgLQotCQkgICAgIChqaWZmaWVzX3RvX21zZWNzKHRpbWVvdXQpIC0gV0wxMjUxX1dBS0VVUF9USU1FT1VUKSk7CisJCSAgICAgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gc3RhcnQpKTsKIAogCXdsLT5lbHAgPSBmYWxzZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV9yeC5jCmluZGV4IGY4NGNjODkuLmI1NjczMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfcnguYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3J4LmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCWlmICh3bC0+cnhfY3VycmVudF9idWZmZXIpCiAJCXJ4X3BhY2tldF9yaW5nX2FkZHIgKz0gd2wtPmRhdGFfcGF0aC0+cnhfcGFja2V0X3JpbmdfY2h1bmtfc2l6ZTsKIAotCXNrYiA9IGRldl9hbGxvY19za2IobGVuZ3RoKTsKKwlza2IgPSBfX2Rldl9hbGxvY19za2IobGVuZ3RoLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikgewogCQl3bDEyNTFfZXJyb3IoIkNvdWxkbid0IGFsbG9jYXRlIFJYIGZyYW1lIik7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfdHguYwppbmRleCBmODU5NzA2Li5jODIyMzE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3R4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV90eC5jCkBAIC0xNjcsOCArMTY3LDcgQEAKIAl0eF9oZHItPmV4cGlyeV90aW1lID0gY3B1X3RvX2xlMzIoMSA8PCAxNik7CiAJdHhfaGRyLT5pZCA9IGlkOwogCi0JLyogRklYTUU6IGhvdyB0byBnZXQgdGhlIGNvcnJlY3QgcXVldWUgaWQ/ICovCi0JdHhfaGRyLT54bWl0X3F1ZXVlID0gMDsKKwl0eF9oZHItPnhtaXRfcXVldWUgPSB3bDEyNTFfdHhfZ2V0X3F1ZXVlKHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKIAogCXdsMTI1MV90eF9jb250cm9sKHR4X2hkciwgY29udHJvbCwgZmMpOwogCXdsMTI1MV90eF9mcmFnX2Jsb2NrX251bSh0eF9oZHIpOwpAQCAtMjIwLDYgKzIxOSw3IEBACiAJCQkvKiBhbGlnbiB0aGUgYnVmZmVyIG9uIGEgNC1ieXRlIGJvdW5kYXJ5ICovCiAJCQlza2JfcmVzZXJ2ZShza2IsIG9mZnNldCk7CiAJCQltZW1tb3ZlKHNrYi0+ZGF0YSwgc3JjLCBza2ItPmxlbik7CisJCQl0eF9oZHIgPSAoc3RydWN0IHR4X2RvdWJsZV9idWZmZXJfZGVzYyAqKSBza2ItPmRhdGE7CiAJCX0gZWxzZSB7CiAJCQl3bDEyNTFfaW5mbygiTm8gaGFuZGxlciwgZml4bWUhIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTIzNyw4ICsyMzcsOSBAQAogCiAJd2wxMjUxX21lbV93cml0ZSh3bCwgYWRkciwgc2tiLT5kYXRhLCBsZW4pOwogCi0Jd2wxMjUxX2RlYnVnKERFQlVHX1RYLCAidHggaWQgJXUgc2tiIDB4JXAgcGF5bG9hZCAldSByYXRlIDB4JXgiLAotCQkgICAgIHR4X2hkci0+aWQsIHNrYiwgdHhfaGRyLT5sZW5ndGgsIHR4X2hkci0+cmF0ZSk7CisJd2wxMjUxX2RlYnVnKERFQlVHX1RYLCAidHggaWQgJXUgc2tiIDB4JXAgcGF5bG9hZCAldSByYXRlIDB4JXggIgorCQkgICAgICJxdWV1ZSAlZCIsIHR4X2hkci0+aWQsIHNrYiwgdHhfaGRyLT5sZW5ndGgsCisJCSAgICAgdHhfaGRyLT5yYXRlLCB0eF9oZHItPnhtaXRfcXVldWUpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3R4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjUxX3R4LmgKaW5kZXggN2MxYzE2Ni4uNTU4NTZjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI1MV90eC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNTFfdHguaApAQCAtMjYsNiArMjYsNyBAQAogI2RlZmluZSBfX1dMMTI1MV9UWF9IX18KIAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgIndsMTI1MV9hY3guaCIKIAogLyoKICAqCkBAIC0yMDksNiArMjEwLDIyIEBACiAJdTggZG9uZV8yOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0YXRpYyBpbmxpbmUgaW50IHdsMTI1MV90eF9nZXRfcXVldWUoaW50IHF1ZXVlKQoreworCXN3aXRjaCAocXVldWUpIHsKKwljYXNlIDA6CisJCXJldHVybiBRT1NfQUNfVk87CisJY2FzZSAxOgorCQlyZXR1cm4gUU9TX0FDX1ZJOworCWNhc2UgMjoKKwkJcmV0dXJuIFFPU19BQ19CRTsKKwljYXNlIDM6CisJCXJldHVybiBRT1NfQUNfQks7CisJZGVmYXVsdDoKKwkJcmV0dXJuIFFPU19BQ19CRTsKKwl9Cit9CisKIHZvaWQgd2wxMjUxX3R4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKIHZvaWQgd2wxMjUxX3R4X2NvbXBsZXRlKHN0cnVjdCB3bDEyNTEgKndsKTsKIHZvaWQgd2wxMjUxX3R4X2ZsdXNoKHN0cnVjdCB3bDEyNTEgKndsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzEuaAppbmRleCA5NDM1OWIxLi45N2VhNTA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MS5oCkBAIC00Myw3ICs0Myw3IEBACiAJREVCVUdfU1BJCT0gQklUKDEpLAogCURFQlVHX0JPT1QJPSBCSVQoMiksCiAJREVCVUdfTUFJTEJPWAk9IEJJVCgzKSwKLQlERUJVR19ORVRMSU5LCT0gQklUKDQpLAorCURFQlVHX1RFU1RNT0RFCT0gQklUKDQpLAogCURFQlVHX0VWRU5UCT0gQklUKDUpLAogCURFQlVHX1RYCT0gQklUKDYpLAogCURFQlVHX1JYCT0gQklUKDcpLApAQCAtMTA3LDExICsxMDcsMzYgQEAKIAkJCQkgIENGR19SWF9DVExfRU4gfCBDRkdfUlhfQkNOX0VOIHwgICAgIFwKIAkJCQkgIENGR19SWF9BVVRIX0VOIHwgQ0ZHX1JYX0FTU09DX0VOKQogCi0jZGVmaW5lIFdMMTI3MV9ERUZBVUxUX0JBU0lDX1JBVEVfU0VUIChDT05GX1RYX1JBVEVfTUFTS19BTEwpCi0KICNkZWZpbmUgV0wxMjcxX0ZXX05BTUUgIndsMTI3MS1mdy5iaW4iCiAjZGVmaW5lIFdMMTI3MV9OVlNfTkFNRSAid2wxMjcxLW52cy5iaW4iCiAKKy8qIE5WUyBkYXRhIHN0cnVjdHVyZSAqLworI2RlZmluZSBXTDEyNzFfTlZTX1NFQ1RJT05fU0laRSAgICAgICAgICAgICAgICAgIDQ2OAorCisjZGVmaW5lIFdMMTI3MV9OVlNfR0VORVJBTF9QQVJBTVNfU0laRSAgICAgICAgICAgIDU3CisjZGVmaW5lIFdMMTI3MV9OVlNfR0VORVJBTF9QQVJBTVNfU0laRV9QQURERUQgXAorCShXTDEyNzFfTlZTX0dFTkVSQUxfUEFSQU1TX1NJWkUgKyAxKQorI2RlZmluZSBXTDEyNzFfTlZTX1NUQVRfUkFESU9fUEFSQU1TX1NJWkUgICAgICAgICAxNworI2RlZmluZSBXTDEyNzFfTlZTX1NUQVRfUkFESU9fUEFSQU1TX1NJWkVfUEFEREVEIFwKKwkoV0wxMjcxX05WU19TVEFUX1JBRElPX1BBUkFNU19TSVpFICsgMSkKKyNkZWZpbmUgV0wxMjcxX05WU19EWU5fUkFESU9fUEFSQU1TX1NJWkUgICAgICAgICAgNjUKKyNkZWZpbmUgV0wxMjcxX05WU19EWU5fUkFESU9fUEFSQU1TX1NJWkVfUEFEREVEIFwKKwkoV0wxMjcxX05WU19EWU5fUkFESU9fUEFSQU1TX1NJWkUgKyAxKQorI2RlZmluZSBXTDEyNzFfTlZTX0ZFTV9DT1VOVCAgICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBXTDEyNzFfTlZTX0lOSV9TUEFSRV9TSVpFICAgICAgICAgICAgICAgIDEyNAorCitzdHJ1Y3Qgd2wxMjcxX252c19maWxlIHsKKwkvKiBOVlMgc2VjdGlvbiAqLworCXU4IG52c1tXTDEyNzFfTlZTX1NFQ1RJT05fU0laRV07CisKKwkvKiBJTkkgc2VjdGlvbiAqLworCXU4IGdlbmVyYWxfcGFyYW1zW1dMMTI3MV9OVlNfR0VORVJBTF9QQVJBTVNfU0laRV9QQURERURdOworCXU4IHN0YXRfcmFkaW9fcGFyYW1zW1dMMTI3MV9OVlNfU1RBVF9SQURJT19QQVJBTVNfU0laRV9QQURERURdOworCXU4IGR5bl9yYWRpb19wYXJhbXNbV0wxMjcxX05WU19GRU1fQ09VTlRdCisJCQkgICBbV0wxMjcxX05WU19EWU5fUkFESU9fUEFSQU1TX1NJWkVfUEFEREVEXTsKKwl1OCBpbmlfc3BhcmVbV0wxMjcxX05WU19JTklfU1BBUkVfU0laRV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogLyoKICAqIEVuYWJsZS9kaXNhYmxlIDgwMi4xMWEgc3VwcG9ydCBmb3IgV0wxMjczCiAgKi8KQEAgLTI3Niw2ICszMDEsNyBAQAogCiAJc3RydWN0IGRlbnRyeSAqcmV0cnlfY291bnQ7CiAJc3RydWN0IGRlbnRyeSAqZXhjZXNzaXZlX3JldHJpZXM7CisJc3RydWN0IGRlbnRyeSAqZ3Bpb19wb3dlcjsKIH07CiAKICNkZWZpbmUgTlVNX1RYX1FVRVVFUyAgICAgICAgICAgICAgNApAQCAtMzIyLDYgKzM0OCwxNyBAQAogCWVudW0gd2wxMjcxX3N0YXRlIHN0YXRlOwogCXN0cnVjdCBtdXRleCBtdXRleDsKIAorI2RlZmluZSBXTDEyNzFfRkxBR19TVEFfUkFURVNfQ0hBTkdFRCAgKDApCisjZGVmaW5lIFdMMTI3MV9GTEFHX1NUQV9BU1NPQ0lBVEVEICAgICAoMSkKKyNkZWZpbmUgV0wxMjcxX0ZMQUdfSk9JTkVEICAgICAgICAgICAgICgyKQorI2RlZmluZSBXTDEyNzFfRkxBR19HUElPX1BPV0VSICAgICAgICAgKDMpCisjZGVmaW5lIFdMMTI3MV9GTEFHX1RYX1FVRVVFX1NUT1BQRUQgICAoNCkKKyNkZWZpbmUgV0wxMjcxX0ZMQUdfU0NBTk5JTkcgICAgICAgICAgICg1KQorI2RlZmluZSBXTDEyNzFfRkxBR19JTl9FTFAgICAgICAgICAgICAgKDYpCisjZGVmaW5lIFdMMTI3MV9GTEFHX1BTTSAgICAgICAgICAgICAgICAoNykKKyNkZWZpbmUgV0wxMjcxX0ZMQUdfUFNNX1JFUVVFU1RFRCAgICAgICg4KQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAlzdHJ1Y3Qgd2wxMjcxX3BhcnRpdGlvbl9zZXQgcGFydDsKIAogCXN0cnVjdCB3bDEyNzFfY2hpcCBjaGlwOwpAQCAtMzMxLDggKzM2OCw3IEBACiAKIAl1OCAqZnc7CiAJc2l6ZV90IGZ3X2xlbjsKLQl1OCAqbnZzOwotCXNpemVfdCBudnNfbGVuOworCXN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUgKm52czsKIAogCXU4IGJzc2lkW0VUSF9BTEVOXTsKIAl1OCBtYWNfYWRkcltFVEhfQUxFTl07CkBAIC0zNTksNyArMzk1LDYgQEAKIAogCS8qIEZyYW1lcyBzY2hlZHVsZWQgZm9yIHRyYW5zbWlzc2lvbiwgbm90IGhhbmRsZWQgeWV0ICovCiAJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9xdWV1ZTsKLQlib29sIHR4X3F1ZXVlX3N0b3BwZWQ7CiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdHhfd29yazsKIApAQCAtMzg3LDE0ICs0MjIsMTUgQEAKIAl1MzIgbWJveF9wdHJbMl07CiAKIAkvKiBBcmUgd2UgY3VycmVudGx5IHNjYW5uaW5nICovCi0JYm9vbCBzY2FubmluZzsKIAlzdHJ1Y3Qgd2wxMjcxX3NjYW4gc2NhbjsKIAogCS8qIE91ciBhc3NvY2lhdGlvbiBJRCAqLwogCXUxNiBhaWQ7CiAKIAkvKiBjdXJyZW50bHkgY29uZmlndXJlZCByYXRlIHNldCAqLworCXUzMiBzdGFfcmF0ZV9zZXQ7CiAJdTMyIGJhc2ljX3JhdGVfc2V0OworCXUzMiByYXRlX3NldDsKIAogCS8qIFRoZSBjdXJyZW50IGJhbmQgKi8KIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQ7CkBAIC00MDUsMTggKzQ0MSw5IEBACiAJdW5zaWduZWQgaW50IHJ4X2NvbmZpZzsKIAl1bnNpZ25lZCBpbnQgcnhfZmlsdGVyOwogCi0JLyogaXMgZmlybXdhcmUgaW4gZWxwIG1vZGUgKi8KLQlib29sIGVscDsKLQogCXN0cnVjdCBjb21wbGV0aW9uICplbHBfY29tcGw7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBlbHBfd29yazsKIAotCS8qIHdlIGNhbiBiZSBpbiBwc20sIGJ1dCBub3QgaW4gZWxwLCB3ZSBoYXZlIHRvIGRpZmZlcmVudGlhdGUgKi8KLQlib29sIHBzbTsKLQotCS8qIFBTTSBtb2RlIHJlcXVlc3RlZCAqLwotCWJvb2wgcHNtX3JlcXVlc3RlZDsKLQogCS8qIHJldHJ5IGNvdW50ZXIgZm9yIFBTTSBlbnRyaWVzICovCiAJdTggcHNtX2VudHJ5X3JldHJ5OwogCkBAIC00MzUsOSArNDYyLDYgQEAKIAogCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWY7CiAKLQkvKiBVc2VkIGZvciBhIHdvcmthcm91bmQgdG8gc2VuZCBkaXNjb25uZWN0IGJlZm9yZSByZWpvaW5pbmcgKi8KLQlib29sIGpvaW5lZDsKLQogCS8qIEN1cnJlbnQgY2hpcHNldCBjb25maWd1cmF0aW9uICovCiAJc3RydWN0IGNvbmZfZHJ2X3NldHRpbmdzIGNvbmY7CiAKQEAgLTQ1NSwxMSArNDc5LDE0IEBACiAKICNkZWZpbmUgV0wxMjcxX1RYX1FVRVVFX01BWF9MRU5HVEggMjAKIAotLyogV0wxMjcxIG5lZWRzIGEgMjAwbXMgc2xlZXAgYWZ0ZXIgcG93ZXIgb24gKi8KKy8qIFdMMTI3MSBuZWVkcyBhIDIwMG1zIHNsZWVwIGFmdGVyIHBvd2VyIG9uLCBhbmQgYSAyMG1zIHNsZWVwIGJlZm9yZSBwb3dlcgorICAgb24gaW4gY2FzZSBpcyBoYXMgYmVlbiBzaHV0IGRvd24gc2hvcnRseSBiZWZvcmUgKi8KKyNkZWZpbmUgV0wxMjcxX1BSRV9QT1dFUl9PTl9TTEVFUCAyMCAvKiBpbiBtaWxpc2Vjb25kcyAqLwogI2RlZmluZSBXTDEyNzFfUE9XRVJfT05fU0xFRVAgMjAwIC8qIGluIG1pbGlzZWNvbmRzICovCiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB3bDEyNzFfMTFhX2VuYWJsZWQodm9pZCkKIHsKKwkvKiBGSVhNRTogdGhpcyBjb3VsZCBiZSBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBOVlMtSU5JIGZpbGUgKi8KICNpZmRlZiBXTDEyNzFfODAyMTFBX0VOQUJMRUQKIAlyZXR1cm4gdHJ1ZTsKICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2FjeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9hY3guYwppbmRleCA1Y2M4OWJiLi42MGYxMGRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2FjeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYWN4LmMKQEAgLTM5MCw2ICszOTAsMzUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitpbnQgd2wxMjcxX2FjeF9kY29faXRyaW1fcGFyYW1zKHN0cnVjdCB3bDEyNzEgKndsKQoreworCXN0cnVjdCBhY3hfZGNvX2l0cmltX3BhcmFtcyAqZGNvOworCXN0cnVjdCBjb25mX2l0cmltX3NldHRpbmdzICpjID0gJndsLT5jb25mLml0cmltOworCWludCByZXQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfQUNYLCAiYWN4IGRjbyBpdHJpbSBwYXJhbWV0ZXJzIik7CisKKwlkY28gPSBremFsbG9jKHNpemVvZigqZGNvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkY28pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJZGNvLT5lbmFibGUgPSBjLT5lbmFibGU7CisJZGNvLT50aW1lb3V0ID0gY3B1X3RvX2xlMzIoYy0+dGltZW91dCk7CisKKwlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1NFVF9EQ09fSVRSSU1fUEFSQU1TLAorCQkJCSAgIGRjbywgc2l6ZW9mKCpkY28pKTsKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygiZmFpbGVkIHRvIHNldCBkY28gaXRyaW0gcGFyYW1ldGVyczogJWQiLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlrZnJlZShkY28pOworCXJldHVybiByZXQ7Cit9CisKIGludCB3bDEyNzFfYWN4X2JlYWNvbl9maWx0ZXJfb3B0KHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZV9maWx0ZXIpCiB7CiAJc3RydWN0IGFjeF9iZWFjb25fZmlsdGVyX29wdGlvbiAqYmVhY29uX2ZpbHRlciA9IE5VTEw7CkBAIC03NTgsMTAgKzc4NywxMSBAQAogCXJldHVybiAwOwogfQogCi1pbnQgd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgZW5hYmxlZF9yYXRlcykKK2ludCB3bDEyNzFfYWN4X3JhdGVfcG9saWNpZXMoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJc3RydWN0IGFjeF9yYXRlX3BvbGljeSAqYWN4OwogCXN0cnVjdCBjb25mX3R4X3JhdGVfY2xhc3MgKmMgPSAmd2wtPmNvbmYudHgucmNfY29uZjsKKwlpbnQgaWR4ID0gMDsKIAlpbnQgcmV0ID0gMDsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggcmF0ZSBwb2xpY2llcyIpOwpAQCAtNzczLDEyICs4MDMsMjEgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JLyogY29uZmlndXJlIG9uZSBkZWZhdWx0IChvbmUtc2l6ZS1maXRzLWFsbCkgcmF0ZSBjbGFzcyAqLwotCWFjeC0+cmF0ZV9jbGFzc19jbnQgPSBjcHVfdG9fbGUzMigxKTsKLQlhY3gtPnJhdGVfY2xhc3NbMF0uZW5hYmxlZF9yYXRlcyA9IGNwdV90b19sZTMyKGVuYWJsZWRfcmF0ZXMpOwotCWFjeC0+cmF0ZV9jbGFzc1swXS5zaG9ydF9yZXRyeV9saW1pdCA9IGMtPnNob3J0X3JldHJ5X2xpbWl0OwotCWFjeC0+cmF0ZV9jbGFzc1swXS5sb25nX3JldHJ5X2xpbWl0ID0gYy0+bG9uZ19yZXRyeV9saW1pdDsKLQlhY3gtPnJhdGVfY2xhc3NbMF0uYWZsYWdzID0gYy0+YWZsYWdzOworCS8qIGNvbmZpZ3VyZSBvbmUgYmFzaWMgcmF0ZSBjbGFzcyAqLworCWlkeCA9IEFDWF9UWF9CQVNJQ19SQVRFOworCWFjeC0+cmF0ZV9jbGFzc1tpZHhdLmVuYWJsZWRfcmF0ZXMgPSBjcHVfdG9fbGUzMih3bC0+YmFzaWNfcmF0ZV9zZXQpOworCWFjeC0+cmF0ZV9jbGFzc1tpZHhdLnNob3J0X3JldHJ5X2xpbWl0ID0gYy0+c2hvcnRfcmV0cnlfbGltaXQ7CisJYWN4LT5yYXRlX2NsYXNzW2lkeF0ubG9uZ19yZXRyeV9saW1pdCA9IGMtPmxvbmdfcmV0cnlfbGltaXQ7CisJYWN4LT5yYXRlX2NsYXNzW2lkeF0uYWZsYWdzID0gYy0+YWZsYWdzOworCisJLyogY29uZmlndXJlIG9uZSBBUCBzdXBwb3J0ZWQgcmF0ZSBjbGFzcyAqLworCWlkeCA9IEFDWF9UWF9BUF9GVUxMX1JBVEU7CisJYWN4LT5yYXRlX2NsYXNzW2lkeF0uZW5hYmxlZF9yYXRlcyA9IGNwdV90b19sZTMyKHdsLT5yYXRlX3NldCk7CisJYWN4LT5yYXRlX2NsYXNzW2lkeF0uc2hvcnRfcmV0cnlfbGltaXQgPSBjLT5zaG9ydF9yZXRyeV9saW1pdDsKKwlhY3gtPnJhdGVfY2xhc3NbaWR4XS5sb25nX3JldHJ5X2xpbWl0ID0gYy0+bG9uZ19yZXRyeV9saW1pdDsKKwlhY3gtPnJhdGVfY2xhc3NbaWR4XS5hZmxhZ3MgPSBjLT5hZmxhZ3M7CisKKwlhY3gtPnJhdGVfY2xhc3NfY250ID0gY3B1X3RvX2xlMzIoQUNYX1RYX1JBVEVfUE9MSUNZX0NOVCk7CiAKIAlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1JBVEVfUE9MSUNZLCBhY3gsIHNpemVvZigqYWN4KSk7CiAJaWYgKHJldCA8IDApIHsKQEAgLTc5MSwxMiArODMwLDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHdsMTI3MV9hY3hfYWNfY2ZnKHN0cnVjdCB3bDEyNzEgKndsKQoraW50IHdsMTI3MV9hY3hfYWNfY2ZnKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBhYywgdTggY3dfbWluLCB1MTYgY3dfbWF4LAorCQkgICAgICB1OCBhaWZzbiwgdTE2IHR4b3ApCiB7CiAJc3RydWN0IGFjeF9hY19jZmcgKmFjeDsKLQlpbnQgaSwgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMDsKIAotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYWNjZXNzIGNhdGVnb3J5IGNvbmZpZyIpOworCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggYWMgY2ZnICVkIGN3X21pbmcgJWQgY3dfbWF4ICVkICIKKwkJICAgICAiYWlmcyAlZCB0eG9wICVkIiwgYWMsIGN3X21pbiwgY3dfbWF4LCBhaWZzbiwgdHhvcCk7CiAKIAlhY3ggPSBremFsbG9jKHNpemVvZigqYWN4KSwgR0ZQX0tFUk5FTCk7CiAKQEAgLTgwNSwyMSArODQ2LDE2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCB3bC0+Y29uZi50eC5hY19jb25mX2NvdW50OyBpKyspIHsKLQkJc3RydWN0IGNvbmZfdHhfYWNfY2F0ZWdvcnkgKmMgPSAmKHdsLT5jb25mLnR4LmFjX2NvbmZbaV0pOwotCQlhY3gtPmFjID0gYy0+YWM7Ci0JCWFjeC0+Y3dfbWluID0gYy0+Y3dfbWluOwotCQlhY3gtPmN3X21heCA9IGNwdV90b19sZTE2KGMtPmN3X21heCk7Ci0JCWFjeC0+YWlmc24gPSBjLT5haWZzbjsKLQkJYWN4LT5yZXNlcnZlZCA9IDA7Ci0JCWFjeC0+dHhfb3BfbGltaXQgPSBjcHVfdG9fbGUxNihjLT50eF9vcF9saW1pdCk7CisJYWN4LT5hYyA9IGFjOworCWFjeC0+Y3dfbWluID0gY3dfbWluOworCWFjeC0+Y3dfbWF4ID0gY3B1X3RvX2xlMTYoY3dfbWF4KTsKKwlhY3gtPmFpZnNuID0gYWlmc247CisJYWN4LT50eF9vcF9saW1pdCA9IGNwdV90b19sZTE2KHR4b3ApOwogCi0JCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQUNfQ0ZHLCBhY3gsIHNpemVvZigqYWN4KSk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQl3bDEyNzFfd2FybmluZygiU2V0dGluZyBvZiBhY2Nlc3MgY2F0ZWdvcnkgIgotCQkJCSAgICAgICAiY29uZmlnOiAlZCIsIHJldCk7Ci0JCQlnb3RvIG91dDsKLQkJfQorCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfQUNfQ0ZHLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImFjeCBhYyBjZmcgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OwogCX0KIAogb3V0OgpAQCAtODI3LDEwICs4NjMsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgd2wxMjcxX2FjeF90aWRfY2ZnKHN0cnVjdCB3bDEyNzEgKndsKQoraW50IHdsMTI3MV9hY3hfdGlkX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggcXVldWVfaWQsIHU4IGNoYW5uZWxfdHlwZSwKKwkJICAgICAgIHU4IHRzaWQsIHU4IHBzX3NjaGVtZSwgdTggYWNrX3BvbGljeSwKKwkJICAgICAgIHUzMiBhcHNkX2NvbmYwLCB1MzIgYXBzZF9jb25mMSkKIHsKIAlzdHJ1Y3QgYWN4X3RpZF9jb25maWcgKmFjeDsKLQlpbnQgaSwgcmV0ID0gMDsKKwlpbnQgcmV0ID0gMDsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggdGlkIGNvbmZpZyIpOwogCkBAIC04NDEsMjEgKzg3OSwxOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgd2wtPmNvbmYudHgudGlkX2NvbmZfY291bnQ7IGkrKykgewotCQlzdHJ1Y3QgY29uZl90eF90aWQgKmMgPSAmKHdsLT5jb25mLnR4LnRpZF9jb25mW2ldKTsKLQkJYWN4LT5xdWV1ZV9pZCA9IGMtPnF1ZXVlX2lkOwotCQlhY3gtPmNoYW5uZWxfdHlwZSA9IGMtPmNoYW5uZWxfdHlwZTsKLQkJYWN4LT50c2lkID0gYy0+dHNpZDsKLQkJYWN4LT5wc19zY2hlbWUgPSBjLT5wc19zY2hlbWU7Ci0JCWFjeC0+YWNrX3BvbGljeSA9IGMtPmFja19wb2xpY3k7Ci0JCWFjeC0+YXBzZF9jb25mWzBdID0gY3B1X3RvX2xlMzIoYy0+YXBzZF9jb25mWzBdKTsKLQkJYWN4LT5hcHNkX2NvbmZbMV0gPSBjcHVfdG9fbGUzMihjLT5hcHNkX2NvbmZbMV0pOworCWFjeC0+cXVldWVfaWQgPSBxdWV1ZV9pZDsKKwlhY3gtPmNoYW5uZWxfdHlwZSA9IGNoYW5uZWxfdHlwZTsKKwlhY3gtPnRzaWQgPSB0c2lkOworCWFjeC0+cHNfc2NoZW1lID0gcHNfc2NoZW1lOworCWFjeC0+YWNrX3BvbGljeSA9IGFja19wb2xpY3k7CisJYWN4LT5hcHNkX2NvbmZbMF0gPSBjcHVfdG9fbGUzMihhcHNkX2NvbmYwKTsKKwlhY3gtPmFwc2RfY29uZlsxXSA9IGNwdV90b19sZTMyKGFwc2RfY29uZjEpOwogCi0JCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfVElEX0NGRywgYWN4LCBzaXplb2YoKmFjeCkpOwotCQlpZiAocmV0IDwgMCkgewotCQkJd2wxMjcxX3dhcm5pbmcoIlNldHRpbmcgb2YgdGlkIGNvbmZpZyBmYWlsZWQ6ICVkIiwgcmV0KTsKLQkJCWdvdG8gb3V0OwotCQl9CisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9USURfQ0ZHLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoIlNldHRpbmcgb2YgdGlkIGNvbmZpZyBmYWlsZWQ6ICVkIiwgcmV0KTsKKwkJZ290byBvdXQ7CiAJfQogCiBvdXQ6CkBAIC0xMDEyLDU5ICsxMDQ3LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgd2wxMjcxX2FjeF9zbWFydF9yZWZsZXgoc3RydWN0IHdsMTI3MSAqd2wpCi17Ci0Jc3RydWN0IGFjeF9zbWFydF9yZWZsZXhfc3RhdGUgKnNyX3N0YXRlID0gTlVMTDsKLQlzdHJ1Y3QgYWN4X3NtYXJ0X3JlZmxleF9jb25maWdfcGFyYW1zICpzcl9wYXJhbSA9IE5VTEw7Ci0JaW50IGksIHJldDsKLQotCXdsMTI3MV9kZWJ1ZyhERUJVR19BQ1gsICJhY3ggc21hcnQgcmVmbGV4Iik7Ci0KLQlzcl9wYXJhbSA9IGt6YWxsb2Moc2l6ZW9mKCpzcl9wYXJhbSksIEdGUF9LRVJORUwpOwotCWlmICghc3JfcGFyYW0pIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IENPTkZfU1JfRVJSX1RCTF9DT1VOVDsgaSsrKSB7Ci0JCXN0cnVjdCBjb25mX21hcnRfcmVmbGV4X2Vycl90YWJsZSAqZSA9Ci0JCQkmKHdsLT5jb25mLmluaXQuc3JfZXJyX3RibFtpXSk7Ci0KLQkJc3JfcGFyYW0tPmVycm9yX3RhYmxlW2ldLmxlbiA9IGUtPmxlbjsKLQkJc3JfcGFyYW0tPmVycm9yX3RhYmxlW2ldLnVwcGVyX2xpbWl0ID0gZS0+dXBwZXJfbGltaXQ7Ci0JCW1lbWNweShzcl9wYXJhbS0+ZXJyb3JfdGFibGVbaV0udmFsdWVzLCBlLT52YWx1ZXMsIGUtPmxlbik7Ci0JfQotCi0JcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIEFDWF9TRVRfU01BUlRfUkVGTEVYX1BBUkFNUywKLQkJCQkgICBzcl9wYXJhbSwgc2l6ZW9mKCpzcl9wYXJhbSkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJmYWlsZWQgdG8gc2V0IHNtYXJ0IHJlZmxleCBwYXJhbXM6ICVkIiwgcmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jc3Jfc3RhdGUgPSBremFsbG9jKHNpemVvZigqc3Jfc3RhdGUpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNyX3N0YXRlKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIGVuYWJsZSBzbWFydCByZWZsZXggKi8KLQlzcl9zdGF0ZS0+ZW5hYmxlID0gd2wtPmNvbmYuaW5pdC5zcl9lbmFibGU7Ci0KLQlyZXQgPSB3bDEyNzFfY21kX2NvbmZpZ3VyZSh3bCwgQUNYX1NFVF9TTUFSVF9SRUZMRVhfU1RBVEUsCi0JCQkJICAgc3Jfc3RhdGUsIHNpemVvZigqc3Jfc3RhdGUpKTsKLQlpZiAocmV0IDwgMCkgewotCQl3bDEyNzFfd2FybmluZygiZmFpbGVkIHRvIHNldCBzbWFydCByZWZsZXggcGFyYW1zOiAlZCIsIHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotb3V0OgotCWtmcmVlKHNyX3N0YXRlKTsKLQlrZnJlZShzcl9wYXJhbSk7Ci0JcmV0dXJuIHJldDsKLQotfQotCiBpbnQgd2wxMjcxX2FjeF9iZXRfZW5hYmxlKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSkKIHsKIAlzdHJ1Y3Qgd2wxMjcxX2FjeF9iZXRfZW5hYmxlICphY3ggPSBOVUxMOwpAQCAtMTEzMiwzICsxMTE0LDMxIEBACiAJa2ZyZWUoYWN4KTsKIAlyZXR1cm4gcmV0OwogfQorCitpbnQgd2wxMjcxX2FjeF9wbV9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJc3RydWN0IHdsMTI3MV9hY3hfcG1fY29uZmlnICphY3ggPSBOVUxMOworCXN0cnVjdCAgY29uZl9wbV9jb25maWdfc2V0dGluZ3MgKmMgPSAmd2wtPmNvbmYucG1fY29uZmlnOworCWludCByZXQgPSAwOworCisJd2wxMjcxX2RlYnVnKERFQlVHX0FDWCwgImFjeCBwbSBjb25maWciKTsKKworCWFjeCA9IGt6YWxsb2Moc2l6ZW9mKCphY3gpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFjeCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlhY3gtPmhvc3RfY2xrX3NldHRsaW5nX3RpbWUgPSBjcHVfdG9fbGUzMihjLT5ob3N0X2Nsa19zZXR0bGluZ190aW1lKTsKKwlhY3gtPmhvc3RfZmFzdF93YWtldXBfc3VwcG9ydCA9IGMtPmhvc3RfZmFzdF93YWtldXBfc3VwcG9ydDsKKworCXJldCA9IHdsMTI3MV9jbWRfY29uZmlndXJlKHdsLCBBQ1hfUE1fQ09ORklHLCBhY3gsIHNpemVvZigqYWN4KSk7CisJaWYgKHJldCA8IDApIHsKKwkJd2wxMjcxX3dhcm5pbmcoImFjeCBwbSBjb25maWcgZmFpbGVkOiAlZCIsIHJldCk7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCWtmcmVlKGFjeCk7CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYWN4LmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2FjeC5oCmluZGV4IDJjZTBhODEuLmFlY2NjOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYWN4LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9hY3guaApAQCAtMiw3ICsyLDcgQEAKICAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQogICoKICAqIENvcHlyaWdodCAoQykgMTk5OC0yMDA5IFRleGFzIEluc3RydW1lbnRzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCiAgKgogICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KICAqCkBAIC0zNDgsNyArMzQ4LDcgQEAKICAqIEFDWEJlYWNvbkZpbHRlckVudHJ5IChub3QgMjIxKQogICogQnl0ZSBPZmZzZXQgICAgIFNpemUgKEJ5dGVzKSAgICBEZWZpbml0aW9uCiAgKiA9PT09PT09PT09PSAgICAgPT09PT09PT09PT09ICAgID09PT09PT09PT0KLSAqIDAJCQkJMSAgICAgICAgICAgICAgIElFIGlkZW50aWZpZXIKKyAqIDAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgSUUgaWRlbnRpZmllcgogICogMSAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICBUcmVhdG1lbnQgYml0IG1hc2sKICAqCiAgKiBBQ1hCZWFjb25GaWx0ZXJFbnRyeSAoMjIxKQpAQCAtMzgxLDggKzM4MSw4IEBACiAJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwogCiAJdTggbnVtX2llOwotCXU4IHRhYmxlW0JFQUNPTl9GSUxURVJfVEFCTEVfTUFYX1NJWkVdOwogCXU4IHBhZFszXTsKKwl1OCB0YWJsZVtCRUFDT05fRklMVEVSX1RBQkxFX01BWF9TSVpFXTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCiBzdHJ1Y3QgYWN4X2Nvbm5fbW9uaXRfcGFyYW1zIHsKQEAgLTQxNSwyMyArNDE1LDEyIEBACiAJdTggcGFkWzNdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCBhY3hfc21hcnRfcmVmbGV4X3N0YXRlIHsKK3N0cnVjdCBhY3hfZGNvX2l0cmltX3BhcmFtcyB7CiAJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOwogCiAJdTggZW5hYmxlOwogCXU4IHBhZGRpbmdbM107Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotc3RydWN0IHNtYXJ0X3JlZmxleF9lcnJfdGFibGUgewotCXU4IGxlbjsKLQlzOCB1cHBlcl9saW1pdDsKLQlzOCB2YWx1ZXNbMTRdOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLXN0cnVjdCBhY3hfc21hcnRfcmVmbGV4X2NvbmZpZ19wYXJhbXMgewotCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKLQotCXN0cnVjdCBzbWFydF9yZWZsZXhfZXJyX3RhYmxlIGVycm9yX3RhYmxlWzNdOworCV9fbGUzMiB0aW1lb3V0OwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKICNkZWZpbmUgUFRBX0FOVEVOTkFfVFlQRV9ERUYJCSAgKDApCkBAIC04MzcsNiArODI2LDkgQEAKIAl1OCByZXNlcnZlZDsKIH07CiAKKyNkZWZpbmUgQUNYX1RYX0JBU0lDX1JBVEUgICAgICAwCisjZGVmaW5lIEFDWF9UWF9BUF9GVUxMX1JBVEUgICAgMQorI2RlZmluZSBBQ1hfVFhfUkFURV9QT0xJQ1lfQ05UIDIKIHN0cnVjdCBhY3hfcmF0ZV9wb2xpY3kgewogCXN0cnVjdCBhY3hfaGVhZGVyIGhlYWRlcjsKIApAQCAtODc3LDggKzg2OSw4IEBACiAJX19sZTE2IHR4X2NvbXBsX3RocmVzaG9sZDsgICAvKiBudW1iZXIgb2YgcGFja2V0cyAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLSNkZWZpbmUgQUNYX1JYX01FTV9CTE9DS1MgICAgIDY0Ci0jZGVmaW5lIEFDWF9UWF9NSU5fTUVNX0JMT0NLUyA2NAorI2RlZmluZSBBQ1hfUlhfTUVNX0JMT0NLUyAgICAgNzAKKyNkZWZpbmUgQUNYX1RYX01JTl9NRU1fQkxPQ0tTIDQwCiAjZGVmaW5lIEFDWF9UWF9ERVNDUklQVE9SUyAgICAzMgogI2RlZmluZSBBQ1hfTlVNX1NTSURfUFJPRklMRVMgMQogCkBAIC05NjksNiArOTYxLDEzIEBACiAJCQkgICAgICAgdXNlZC4gKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKK3N0cnVjdCB3bDEyNzFfYWN4X3BtX2NvbmZpZyB7CisJc3RydWN0IGFjeF9oZWFkZXIgaGVhZGVyOworCisJX19sZTMyIGhvc3RfY2xrX3NldHRsaW5nX3RpbWU7CisJdTggaG9zdF9mYXN0X3dha2V1cF9zdXBwb3J0OworCXU4IHBhZGRpbmdbM107Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogZW51bSB7CiAJQUNYX1dBS0VfVVBfQ09ORElUSU9OUyAgICAgID0gMHgwMDAyLApAQCAtMTAyNywxMyArMTAyNiwxMyBAQAogCUFDWF9IVF9CU1NfT1BFUkFUSU9OICAgICAgICA9IDB4MDA1OCwKIAlBQ1hfQ09FWF9BQ1RJVklUWSAgICAgICAgICAgPSAweDAwNTksCiAJQUNYX1NFVF9TTUFSVF9SRUZMRVhfREVCVUcgID0gMHgwMDVBLAotCUFDWF9TRVRfU01BUlRfUkVGTEVYX1NUQVRFICA9IDB4MDA1QiwKLQlBQ1hfU0VUX1NNQVJUX1JFRkxFWF9QQVJBTVMgPSAweDAwNUYsCisJQUNYX1NFVF9EQ09fSVRSSU1fUEFSQU1TICAgID0gMHgwMDYxLAogCURPVDExX1JYX01TRFVfTElGRV9USU1FICAgICA9IDB4MTAwNCwKIAlET1QxMV9DVVJfVFhfUFdSICAgICAgICAgICAgPSAweDEwMEQsCiAJRE9UMTFfUlhfRE9UMTFfTU9ERSAgICAgICAgID0gMHgxMDEyLAogCURPVDExX1JUU19USFJFU0hPTEQgICAgICAgICA9IDB4MTAxMywKIAlET1QxMV9HUk9VUF9BRERSRVNTX1RCTCAgICAgPSAweDEwMTQsCisJQUNYX1BNX0NPTkZJRyAgICAgICAgICAgICAgID0gMHgxMDE2LAogCiAJTUFYX0RPVDExX0lFID0gRE9UMTFfR1JPVVBfQUREUkVTU19UQkwsCiAKQEAgLTEwNTYsNiArMTA1NSw3IEBACiAJCQkJIHZvaWQgKm1jX2xpc3QsIHUzMiBtY19saXN0X2xlbik7CiBpbnQgd2wxMjcxX2FjeF9zZXJ2aWNlX3BlcmlvZF90aW1lb3V0KHN0cnVjdCB3bDEyNzEgKndsKTsKIGludCB3bDEyNzFfYWN4X3J0c190aHJlc2hvbGQoc3RydWN0IHdsMTI3MSAqd2wsIHUxNiBydHNfdGhyZXNob2xkKTsKK2ludCB3bDEyNzFfYWN4X2Rjb19pdHJpbV9wYXJhbXMoc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9hY3hfYmVhY29uX2ZpbHRlcl9vcHQoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlX2ZpbHRlcik7CiBpbnQgd2wxMjcxX2FjeF9iZWFjb25fZmlsdGVyX3RhYmxlKHN0cnVjdCB3bDEyNzEgKndsKTsKIGludCB3bDEyNzFfYWN4X2Nvbm5fbW9uaXRfcGFyYW1zKHN0cnVjdCB3bDEyNzEgKndsKTsKQEAgLTEwNjksOSArMTA2OSwxMiBAQAogaW50IHdsMTI3MV9hY3hfY3RzX3Byb3RlY3Qoc3RydWN0IHdsMTI3MSAqd2wsCiAJCQkgICBlbnVtIGFjeF9jdHNwcm90ZWN0X3R5cGUgY3RzcHJvdGVjdCk7CiBpbnQgd2wxMjcxX2FjeF9zdGF0aXN0aWNzKHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3QgYWN4X3N0YXRpc3RpY3MgKnN0YXRzKTsKLWludCB3bDEyNzFfYWN4X3JhdGVfcG9saWNpZXMoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBlbmFibGVkX3JhdGVzKTsKLWludCB3bDEyNzFfYWN4X2FjX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCk7Ci1pbnQgd2wxMjcxX2FjeF90aWRfY2ZnKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfYWN4X3JhdGVfcG9saWNpZXMoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9hY3hfYWNfY2ZnKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBhYywgdTggY3dfbWluLCB1MTYgY3dfbWF4LAorCQkgICAgICB1OCBhaWZzbiwgdTE2IHR4b3ApOworaW50IHdsMTI3MV9hY3hfdGlkX2NmZyhzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggcXVldWVfaWQsIHU4IGNoYW5uZWxfdHlwZSwKKwkJICAgICAgIHU4IHRzaWQsIHU4IHBzX3NjaGVtZSwgdTggYWNrX3BvbGljeSwKKwkJICAgICAgIHUzMiBhcHNkX2NvbmYwLCB1MzIgYXBzZF9jb25mMSk7CiBpbnQgd2wxMjcxX2FjeF9mcmFnX3RocmVzaG9sZChzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2FjeF90eF9jb25maWdfb3B0aW9ucyhzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX2FjeF9tZW1fY2ZnKHN0cnVjdCB3bDEyNzEgKndsKTsKQEAgLTEwODEsNSArMTA4NCw2IEBACiBpbnQgd2wxMjcxX2FjeF9iZXRfZW5hYmxlKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSk7CiBpbnQgd2wxMjcxX2FjeF9hcnBfaXBfZmlsdGVyKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSwgdTggKmFkZHJlc3MsCiAJCQkgICAgIHU4IHZlcnNpb24pOworaW50IHdsMTI3MV9hY3hfcG1fY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKTsKIAogI2VuZGlmIC8qIF9fV0wxMjcxX0FDWF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfYm9vdC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ib290LmMKaW5kZXggYjdjOTY0NS4uMmJlNzZlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ib290LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ib290LmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlICJ3bDEyNzFfcmVnLmgiCiAjaW5jbHVkZSAid2wxMjcxX2Jvb3QuaCIKICNpbmNsdWRlICJ3bDEyNzFfc3BpLmgiCisjaW5jbHVkZSAid2wxMjcxX2lvLmgiCiAjaW5jbHVkZSAid2wxMjcxX2V2ZW50LmgiCiAKIHN0YXRpYyBzdHJ1Y3Qgd2wxMjcxX3BhcnRpdGlvbl9zZXQgcGFydF90YWJsZVtQQVJUX1RBQkxFX0xFTl0gPSB7CkBAIC05MywxOSArOTQsMTkgQEAKIAl1MzIgY3B1X2N0cmw7CiAKIAkvKiAxMC41LjAgcnVuIHRoZSBmaXJtd2FyZSAoSSkgKi8KLQljcHVfY3RybCA9IHdsMTI3MV9zcGlfcmVhZDMyKHdsLCBBQ1hfUkVHX0VDUFVfQ09OVFJPTCk7CisJY3B1X2N0cmwgPSB3bDEyNzFfcmVhZDMyKHdsLCBBQ1hfUkVHX0VDUFVfQ09OVFJPTCk7CiAKIAkvKiAxMC41LjEgcnVuIHRoZSBmaXJtd2FyZSAoSUkpICovCiAJY3B1X2N0cmwgfD0gZmxhZzsKLQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIEFDWF9SRUdfRUNQVV9DT05UUk9MLCBjcHVfY3RybCk7CisJd2wxMjcxX3dyaXRlMzIod2wsIEFDWF9SRUdfRUNQVV9DT05UUk9MLCBjcHVfY3RybCk7CiB9CiAKIHN0YXRpYyB2b2lkIHdsMTI3MV9ib290X2Z3X3ZlcnNpb24oc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJc3RydWN0IHdsMTI3MV9zdGF0aWNfZGF0YSBzdGF0aWNfZGF0YTsKIAotCXdsMTI3MV9zcGlfcmVhZCh3bCwgd2wtPmNtZF9ib3hfYWRkciwKLQkJCSZzdGF0aWNfZGF0YSwgc2l6ZW9mKHN0YXRpY19kYXRhKSwgZmFsc2UpOworCXdsMTI3MV9yZWFkKHdsLCB3bC0+Y21kX2JveF9hZGRyLCAmc3RhdGljX2RhdGEsIHNpemVvZihzdGF0aWNfZGF0YSksCisJCSAgICBmYWxzZSk7CiAKIAlzdHJuY3B5KHdsLT5jaGlwLmZ3X3Zlciwgc3RhdGljX2RhdGEuZndfdmVyc2lvbiwKIAkJc2l6ZW9mKHdsLT5jaGlwLmZ3X3ZlcikpOwpAQCAtMTY0LDcgKzE2NSw3IEBACiAJCW1lbWNweShjaHVuaywgcCwgQ0hVTktfU0laRSk7CiAJCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAidXBsb2FkaW5nIGZ3IGNodW5rIDB4JXAgdG8gMHgleCIsCiAJCQkgICAgIHAsIGFkZHIpOwotCQl3bDEyNzFfc3BpX3dyaXRlKHdsLCBhZGRyLCBjaHVuaywgQ0hVTktfU0laRSwgZmFsc2UpOworCQl3bDEyNzFfd3JpdGUod2wsIGFkZHIsIGNodW5rLCBDSFVOS19TSVpFLCBmYWxzZSk7CiAKIAkJY2h1bmtfbnVtKys7CiAJfQpAQCAtMTc1LDcgKzE3Niw3IEBACiAJbWVtY3B5KGNodW5rLCBwLCBmd19kYXRhX2xlbiAlIENIVU5LX1NJWkUpOwogCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAidXBsb2FkaW5nIGZ3IGxhc3QgY2h1bmsgKCV6ZCBCKSAweCVwIHRvIDB4JXgiLAogCQkgICAgIGZ3X2RhdGFfbGVuICUgQ0hVTktfU0laRSwgcCwgYWRkcik7Ci0Jd2wxMjcxX3NwaV93cml0ZSh3bCwgYWRkciwgY2h1bmssIGZ3X2RhdGFfbGVuICUgQ0hVTktfU0laRSwgZmFsc2UpOworCXdsMTI3MV93cml0ZSh3bCwgYWRkciwgY2h1bmssIGZ3X2RhdGFfbGVuICUgQ0hVTktfU0laRSwgZmFsc2UpOwogCiAJa2ZyZWUoY2h1bmspOwogCXJldHVybiAwOwpAQCAtMjE5LDIzICsyMjAsMTQgQEAKIAlzaXplX3QgbnZzX2xlbiwgYnVyc3RfbGVuOwogCWludCBpOwogCXUzMiBkZXN0X2FkZHIsIHZhbDsKLQl1OCAqbnZzX3B0ciwgKm52cywgKm52c19hbGlnbmVkOworCXU4ICpudnNfcHRyLCAqbnZzX2FsaWduZWQ7CiAKLQludnMgPSB3bC0+bnZzOwotCWlmIChudnMgPT0gTlVMTCkKKwlpZiAod2wtPm52cyA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCW52c19wdHIgPSBudnM7Ci0KLQludnNfbGVuID0gd2wtPm52c19sZW47Ci0KLQkvKiBVcGRhdGUgdGhlIGRldmljZSBNQUMgYWRkcmVzcyBpbnRvIHRoZSBudnMgKi8KLQludnNbMTFdID0gd2wtPm1hY19hZGRyWzBdOwotCW52c1sxMF0gPSB3bC0+bWFjX2FkZHJbMV07Ci0JbnZzWzZdID0gd2wtPm1hY19hZGRyWzJdOwotCW52c1s1XSA9IHdsLT5tYWNfYWRkclszXTsKLQludnNbNF0gPSB3bC0+bWFjX2FkZHJbNF07Ci0JbnZzWzNdID0gd2wtPm1hY19hZGRyWzVdOworCS8qIG9ubHkgdGhlIGZpcnN0IHBhcnQgb2YgdGhlIE5WUyBuZWVkcyB0byBiZSB1cGxvYWRlZCAqLworCW52c19sZW4gPSBzaXplb2Yod2wtPm52cy0+bnZzKTsKKwludnNfcHRyID0gKHU4ICopd2wtPm52cy0+bnZzOwogCiAJLyoKIAkgKiBMYXlvdXQgYmVmb3JlIHRoZSBhY3R1YWwgTlZTIHRhYmxlczoKQEAgLTI2NSw3ICsyNTcsNyBAQAogCQkJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsCiAJCQkJICAgICAibnZzIGJ1cnN0IHdyaXRlIDB4JXg6IDB4JXgiLAogCQkJCSAgICAgZGVzdF9hZGRyLCB2YWwpOwotCQkJd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBkZXN0X2FkZHIsIHZhbCk7CisJCQl3bDEyNzFfd3JpdGUzMih3bCwgZGVzdF9hZGRyLCB2YWwpOwogCiAJCQludnNfcHRyICs9IDQ7CiAJCQlkZXN0X2FkZHIgKz0gNDsKQEAgLTI3Nyw3ICsyNjksNyBAQAogCSAqIGlzIDcgYnl0ZXMgZnVydGhlci4KIAkgKi8KIAludnNfcHRyICs9IDc7Ci0JbnZzX2xlbiAtPSBudnNfcHRyIC0gbnZzOworCW52c19sZW4gLT0gbnZzX3B0ciAtICh1OCAqKXdsLT5udnMtPm52czsKIAludnNfbGVuID0gQUxJR04obnZzX2xlbiwgNCk7CiAKIAkvKiBGSVhNRTogVGhlIGRyaXZlciBzZXRzIHRoZSBwYXJ0aXRpb24gaGVyZSwgYnV0IHRoaXMgaXMgbm90IG5lZWRlZCwKQEAgLTI4NiwxNSArMjc4LDIwIEBACiAJd2wxMjcxX3NldF9wYXJ0aXRpb24od2wsICZwYXJ0X3RhYmxlW1BBUlRfV09SS10pOwogCiAJLyogQ29weSB0aGUgTlZTIHRhYmxlcyB0byBhIG5ldyBibG9jayB0byBlbnN1cmUgYWxpZ25tZW50ICovCi0JbnZzX2FsaWduZWQgPSBrbWVtZHVwKG52c19wdHIsIG52c19sZW4sIEdGUF9LRVJORUwpOwotCWlmICghbnZzX2FsaWduZWQpCi0JCXJldHVybiAtRU5PTUVNOworCS8qIEZJWE1FOiBXZSBqdW1wIDMgbW9yZSBieXRlcyBiZWZvcmUgdXBsb2FkaW5nIHRoZSBOVlMuICBJdCBzZWVtcworCXRoYXQgb3VyIE5WUyBmaWxlcyBoYXZlIHRocmVlIGV4dHJhIHplcm9zIGhlcmUuICBJJ20gbm90IHN1cmUgd2hldGhlcgorCXRoZSBwcm9ibGVtIGlzIGluIG91ciBOVlMgZ2VuZXJhdGlvbiBvciB3ZSBzaG91bGQgcmVhbGx5IGp1bXB0IHRoZXNlCisJMyBieXRlcyBoZXJlICovCisJbnZzX3B0ciArPSAzOworCisJbnZzX2FsaWduZWQgPSBrbWVtZHVwKG52c19wdHIsIG52c19sZW4sIEdGUF9LRVJORUwpOyBpZgorCSghbnZzX2FsaWduZWQpIHJldHVybiAtRU5PTUVNOwogCiAJLyogQW5kIGZpbmFsbHkgd2UgdXBsb2FkIHRoZSBOVlMgdGFibGVzICovCiAJLyogRklYTUU6IEluIHdsMTI3MSwgd2UgdXBsb2FkIGV2ZXJ5dGhpbmcgYXQgb25jZS4KIAkgICBObyBlbmRpYW5uZXNzIGhhbmRsaW5nIG5lZWRlZCBoZXJlPyEgVGhlIHJlZiBkcml2ZXIgZG9lc24ndCBkbwogCSAgIGFueXRoaW5nIGFib3V0IGl0IGF0IHRoaXMgcG9pbnQgKi8KLQl3bDEyNzFfc3BpX3dyaXRlKHdsLCBDTURfTUJPWF9BRERSRVNTLCBudnNfYWxpZ25lZCwgbnZzX2xlbiwgZmFsc2UpOworCXdsMTI3MV93cml0ZSh3bCwgQ01EX01CT1hfQUREUkVTUywgbnZzX2FsaWduZWQsIG52c19sZW4sIGZhbHNlKTsKIAogCWtmcmVlKG52c19hbGlnbmVkKTsKIAlyZXR1cm4gMDsKQEAgLTMwMyw5ICszMDAsOSBAQAogc3RhdGljIHZvaWQgd2wxMjcxX2Jvb3RfZW5hYmxlX2ludGVycnVwdHMoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJZW5hYmxlX2lycSh3bC0+aXJxKTsKLQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssCi0JCQkgICBXTDEyNzFfQUNYX0lOVFJfQUxMICYgfihXTDEyNzFfSU5UUl9NQVNLKSk7Ci0Jd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBISV9DRkcsIEhJX0NGR19ERUZfVkFMKTsKKwl3bDEyNzFfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTUFTSywKKwkJICAgICAgIFdMMTI3MV9BQ1hfSU5UUl9BTEwgJiB+KFdMMTI3MV9JTlRSX01BU0spKTsKKwl3bDEyNzFfd3JpdGUzMih3bCwgSElfQ0ZHLCBISV9DRkdfREVGX1ZBTCk7CiB9CiAKIHN0YXRpYyBpbnQgd2wxMjcxX2Jvb3Rfc29mdF9yZXNldChzdHJ1Y3Qgd2wxMjcxICp3bCkKQEAgLTMxNCwxMyArMzExLDEyIEBACiAJdTMyIGJvb3RfZGF0YTsKIAogCS8qIHBlcmZvcm0gc29mdCByZXNldCAqLwotCXdsMTI3MV9zcGlfd3JpdGUzMih3bCwgQUNYX1JFR19TTFZfU09GVF9SRVNFVCwKLQkJCSAgIEFDWF9TTFZfU09GVF9SRVNFVF9CSVQpOworCXdsMTI3MV93cml0ZTMyKHdsLCBBQ1hfUkVHX1NMVl9TT0ZUX1JFU0VULCBBQ1hfU0xWX1NPRlRfUkVTRVRfQklUKTsKIAogCS8qIFNPRlRfUkVTRVQgaXMgc2VsZiBjbGVhcmluZyAqLwogCXRpbWVvdXQgPSBqaWZmaWVzICsgdXNlY3NfdG9famlmZmllcyhTT0ZUX1JFU0VUX01BWF9USU1FKTsKIAl3aGlsZSAoMSkgewotCQlib290X2RhdGEgPSB3bDEyNzFfc3BpX3JlYWQzMih3bCwgQUNYX1JFR19TTFZfU09GVF9SRVNFVCk7CisJCWJvb3RfZGF0YSA9IHdsMTI3MV9yZWFkMzIod2wsIEFDWF9SRUdfU0xWX1NPRlRfUkVTRVQpOwogCQl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgInNvZnQgcmVzZXQgYm9vdGRhdGEgMHgleCIsIGJvb3RfZGF0YSk7CiAJCWlmICgoYm9vdF9kYXRhICYgQUNYX1NMVl9TT0ZUX1JFU0VUX0JJVCkgPT0gMCkKIAkJCWJyZWFrOwpAQCAtMzM2LDEwICszMzIsMTAgQEAKIAl9CiAKIAkvKiBkaXNhYmxlIFJ4L1R4ICovCi0Jd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBFTkFCTEUsIDB4MCk7CisJd2wxMjcxX3dyaXRlMzIod2wsIEVOQUJMRSwgMHgwKTsKIAogCS8qIGRpc2FibGUgYXV0byBjYWxpYnJhdGlvbiBvbiBzdGFydCovCi0Jd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBTUEFSRV9BMiwgMHhmZmZmKTsKKwl3bDEyNzFfd3JpdGUzMih3bCwgU1BBUkVfQTIsIDB4ZmZmZik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM1MSw3ICszNDcsNyBAQAogCiAJd2wxMjcxX2Jvb3Rfc2V0X2VjcHVfY3RybCh3bCwgRUNQVV9DT05UUk9MX0hBTFQpOwogCi0JY2hpcF9pZCA9IHdsMTI3MV9zcGlfcmVhZDMyKHdsLCBDSElQX0lEX0IpOworCWNoaXBfaWQgPSB3bDEyNzFfcmVhZDMyKHdsLCBDSElQX0lEX0IpOwogCiAJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJjaGlwIGlkIGFmdGVyIGZpcm13YXJlIGJvb3Q6IDB4JXgiLCBjaGlwX2lkKTsKIApAQCAtMzY0LDggKzM2MCw3IEBACiAJbG9vcCA9IDA7CiAJd2hpbGUgKGxvb3ArKyA8IElOSVRfTE9PUCkgewogCQl1ZGVsYXkoSU5JVF9MT09QX0RFTEFZKTsKLQkJaW50ZXJydXB0ID0gd2wxMjcxX3NwaV9yZWFkMzIod2wsCi0JCQkJCSAgICAgIEFDWF9SRUdfSU5URVJSVVBUX05PX0NMRUFSKTsKKwkJaW50ZXJydXB0ID0gd2wxMjcxX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIpOwogCiAJCWlmIChpbnRlcnJ1cHQgPT0gMHhmZmZmZmZmZikgewogCQkJd2wxMjcxX2Vycm9yKCJlcnJvciByZWFkaW5nIGhhcmR3YXJlIGNvbXBsZXRlICIKQEAgLTM3NCw4ICszNjksOCBAQAogCQl9CiAJCS8qIGNoZWNrIHRoYXQgQUNYX0lOVFJfSU5JVF9DT01QTEVURSBpcyBlbmFibGVkICovCiAJCWVsc2UgaWYgKGludGVycnVwdCAmIFdMMTI3MV9BQ1hfSU5UUl9JTklUX0NPTVBMRVRFKSB7Ci0JCQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX0FDSywKLQkJCQkJICAgV0wxMjcxX0FDWF9JTlRSX0lOSVRfQ09NUExFVEUpOworCQkJd2wxMjcxX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX0FDSywKKwkJCQkgICAgICAgV0wxMjcxX0FDWF9JTlRSX0lOSVRfQ09NUExFVEUpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0zODcsMTAgKzM4MiwxMCBAQAogCX0KIAogCS8qIGdldCBoYXJkd2FyZSBjb25maWcgY29tbWFuZCBtYWlsIGJveCAqLwotCXdsLT5jbWRfYm94X2FkZHIgPSB3bDEyNzFfc3BpX3JlYWQzMih3bCwgUkVHX0NPTU1BTkRfTUFJTEJPWF9QVFIpOworCXdsLT5jbWRfYm94X2FkZHIgPSB3bDEyNzFfcmVhZDMyKHdsLCBSRUdfQ09NTUFORF9NQUlMQk9YX1BUUik7CiAKIAkvKiBnZXQgaGFyZHdhcmUgY29uZmlnIGV2ZW50IG1haWwgYm94ICovCi0Jd2wtPmV2ZW50X2JveF9hZGRyID0gd2wxMjcxX3NwaV9yZWFkMzIod2wsIFJFR19FVkVOVF9NQUlMQk9YX1BUUik7CisJd2wtPmV2ZW50X2JveF9hZGRyID0gd2wxMjcxX3JlYWQzMih3bCwgUkVHX0VWRU5UX01BSUxCT1hfUFRSKTsKIAogCS8qIHNldCB0aGUgd29ya2luZyBwYXJ0aXRpb24gdG8gaXRzICJydW5uaW5nIiBtb2RlIG9mZnNldCAqLwogCXdsMTI3MV9zZXRfcGFydGl0aW9uKHdsLCAmcGFydF90YWJsZVtQQVJUX1dPUktdKTsKQEAgLTQ2Myw5ICs0NTgsOSBAQAogCQl3bDEyNzFfdG9wX3JlZ193cml0ZSh3bCwgT0NQX1JFR19DTEtfUE9MQVJJVFksIHZhbCk7CiAJfQogCi0Jd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBQTExfUEFSQU1FVEVSUywgY2xrKTsKKwl3bDEyNzFfd3JpdGUzMih3bCwgUExMX1BBUkFNRVRFUlMsIGNsayk7CiAKLQlwYXVzZSA9IHdsMTI3MV9zcGlfcmVhZDMyKHdsLCBQTExfUEFSQU1FVEVSUyk7CisJcGF1c2UgPSB3bDEyNzFfcmVhZDMyKHdsLCBQTExfUEFSQU1FVEVSUyk7CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgInBhdXNlMSAweCV4IiwgcGF1c2UpOwogCkBAIC00NzQsMTAgKzQ2OSwxMCBAQAogCQkJCQkgICAqIDB4M2ZmIChtYWdpYyBudW1iZXIgKS4gIEhvdyBkb2VzCiAJCQkJCSAgICogdGhpcyB3b3JrPyEgKi8KIAlwYXVzZSB8PSBXVV9DT1VOVEVSX1BBVVNFX1ZBTDsKLQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIFdVX0NPVU5URVJfUEFVU0UsIHBhdXNlKTsKKwl3bDEyNzFfd3JpdGUzMih3bCwgV1VfQ09VTlRFUl9QQVVTRSwgcGF1c2UpOwogCiAJLyogQ29udGludWUgdGhlIEVMUCB3YWtlIHVwIHNlcXVlbmNlICovCi0Jd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBXRUxQX0FSTV9DT01NQU5ELCBXRUxQX0FSTV9DT01NQU5EX1ZBTCk7CisJd2wxMjcxX3dyaXRlMzIod2wsIFdFTFBfQVJNX0NPTU1BTkQsIFdFTFBfQVJNX0NPTU1BTkRfVkFMKTsKIAl1ZGVsYXkoNTAwKTsKIAogCXdsMTI3MV9zZXRfcGFydGl0aW9uKHdsLCAmcGFydF90YWJsZVtQQVJUX0RSUFddKTsKQEAgLTQ4NywxOCArNDgyLDE4IEBACiAJICAgYmVmb3JlIHRha2luZyBEUlB3IG91dCBvZiByZXNldCAqLwogCiAJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJEUlBXX1NDUkFUQ0hfU1RBUlQgJTA4eCIsIERSUFdfU0NSQVRDSF9TVEFSVCk7Ci0JY2xrID0gd2wxMjcxX3NwaV9yZWFkMzIod2wsIERSUFdfU0NSQVRDSF9TVEFSVCk7CisJY2xrID0gd2wxMjcxX3JlYWQzMih3bCwgRFJQV19TQ1JBVENIX1NUQVJUKTsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiY2xrMiAweCV4IiwgY2xrKTsKIAogCS8qIDIgKi8KIAljbGsgfD0gKFJFRl9DTE9DSyA8PCAxKSA8PCA0OwotCXdsMTI3MV9zcGlfd3JpdGUzMih3bCwgRFJQV19TQ1JBVENIX1NUQVJULCBjbGspOworCXdsMTI3MV93cml0ZTMyKHdsLCBEUlBXX1NDUkFUQ0hfU1RBUlQsIGNsayk7CiAKIAl3bDEyNzFfc2V0X3BhcnRpdGlvbih3bCwgJnBhcnRfdGFibGVbUEFSVF9XT1JLXSk7CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgKi8KLQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssIFdMMTI3MV9BQ1hfSU5UUl9BTEwpOworCXdsMTI3MV93cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9NQVNLLCBXTDEyNzFfQUNYX0lOVFJfQUxMKTsKIAogCXJldCA9IHdsMTI3MV9ib290X3NvZnRfcmVzZXQod2wpOwogCWlmIChyZXQgPCAwKQpAQCAtNTEzLDIzICs1MDgsMjIgQEAKIAkgKiBBQ1hfRUVQUk9NTEVTU19JTkRfUkVHICovCiAJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJBQ1hfRUVQUk9NTEVTU19JTkRfUkVHIik7CiAKLQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIEFDWF9FRVBST01MRVNTX0lORF9SRUcsCi0JCQkgICBBQ1hfRUVQUk9NTEVTU19JTkRfUkVHKTsKKwl3bDEyNzFfd3JpdGUzMih3bCwgQUNYX0VFUFJPTUxFU1NfSU5EX1JFRywgQUNYX0VFUFJPTUxFU1NfSU5EX1JFRyk7CiAKLQl0bXAgPSB3bDEyNzFfc3BpX3JlYWQzMih3bCwgQ0hJUF9JRF9CKTsKKwl0bXAgPSB3bDEyNzFfcmVhZDMyKHdsLCBDSElQX0lEX0IpOwogCiAJd2wxMjcxX2RlYnVnKERFQlVHX0JPT1QsICJjaGlwIGlkIDB4JXgiLCB0bXApOwogCiAJLyogNi4gcmVhZCB0aGUgRUVQUk9NIHBhcmFtZXRlcnMgKi8KLQl0bXAgPSB3bDEyNzFfc3BpX3JlYWQzMih3bCwgU0NSX1BBRDIpOworCXRtcCA9IHdsMTI3MV9yZWFkMzIod2wsIFNDUl9QQUQyKTsKIAogCXJldCA9IHdsMTI3MV9ib290X3dyaXRlX2lycV9wb2xhcml0eSh3bCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCiAJLyogRklYTUU6IE5lZWQgdG8gY2hlY2sgd2hldGhlciB0aGlzIGlzIHJlYWxseSB3aGF0IHdlIHdhbnQgKi8KLQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssCi0JCQkgICBXTDEyNzFfQUNYX0FMTF9FVkVOVFNfVkVDVE9SKTsKKwl3bDEyNzFfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTUFTSywKKwkJICAgICAgIFdMMTI3MV9BQ1hfQUxMX0VWRU5UU19WRUNUT1IpOwogCiAJLyogV0wxMjcxOiBUaGUgcmVmZXJlbmNlIGRyaXZlciBza2lwcyBzdGVwcyA3IHRvIDEwIChqdW1wcyBkaXJlY3RseQogCSAqIHRvIHVwbG9hZF9mdykgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NtZC5jCmluZGV4IGMzMzg1YjMuLjM2YTY0ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jbWQuYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIndsMTI3MS5oIgogI2luY2x1ZGUgIndsMTI3MV9yZWcuaCIKICNpbmNsdWRlICJ3bDEyNzFfc3BpLmgiCisjaW5jbHVkZSAid2wxMjcxX2lvLmgiCiAjaW5jbHVkZSAid2wxMjcxX2FjeC5oIgogI2luY2x1ZGUgIndsMTJ4eF84MDIxMS5oIgogI2luY2x1ZGUgIndsMTI3MV9jbWQuaCIKQEAgLTU3LDEzICs1OCwxMyBAQAogCiAJV0FSTl9PTihsZW4gJSA0ICE9IDApOwogCi0Jd2wxMjcxX3NwaV93cml0ZSh3bCwgd2wtPmNtZF9ib3hfYWRkciwgYnVmLCBsZW4sIGZhbHNlKTsKKwl3bDEyNzFfd3JpdGUod2wsIHdsLT5jbWRfYm94X2FkZHIsIGJ1ZiwgbGVuLCBmYWxzZSk7CiAKLQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX1RSSUcsIElOVFJfVFJJR19DTUQpOworCXdsMTI3MV93cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9UUklHLCBJTlRSX1RSSUdfQ01EKTsKIAogCXRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhXTDEyNzFfQ09NTUFORF9USU1FT1VUKTsKIAotCWludHIgPSB3bDEyNzFfc3BpX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIpOworCWludHIgPSB3bDEyNzFfcmVhZDMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9OT19DTEVBUik7CiAJd2hpbGUgKCEoaW50ciAmIFdMMTI3MV9BQ1hfSU5UUl9DTURfQ09NUExFVEUpKSB7CiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIHRpbWVvdXQpKSB7CiAJCQl3bDEyNzFfZXJyb3IoImNvbW1hbmQgY29tcGxldGUgdGltZW91dCIpOwpAQCAtNzMsMTMgKzc0LDEzIEBACiAKIAkJbXNsZWVwKDEpOwogCi0JCWludHIgPSB3bDEyNzFfc3BpX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIpOworCQlpbnRyID0gd2wxMjcxX3JlYWQzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTk9fQ0xFQVIpOwogCX0KIAogCS8qIHJlYWQgYmFjayB0aGUgc3RhdHVzIGNvZGUgb2YgdGhlIGNvbW1hbmQgKi8KIAlpZiAocmVzX2xlbiA9PSAwKQogCQlyZXNfbGVuID0gc2l6ZW9mKHN0cnVjdCB3bDEyNzFfY21kX2hlYWRlcik7Ci0Jd2wxMjcxX3NwaV9yZWFkKHdsLCB3bC0+Y21kX2JveF9hZGRyLCBjbWQsIHJlc19sZW4sIGZhbHNlKTsKKwl3bDEyNzFfcmVhZCh3bCwgd2wtPmNtZF9ib3hfYWRkciwgY21kLCByZXNfbGVuLCBmYWxzZSk7CiAKIAlzdGF0dXMgPSBsZTE2X3RvX2NwdShjbWQtPnN0YXR1cyk7CiAJaWYgKHN0YXR1cyAhPSBDTURfU1RBVFVTX1NVQ0NFU1MpIHsKQEAgLTg3LDggKzg4LDggQEAKIAkJcmV0ID0gLUVJTzsKIAl9CiAKLQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX0FDSywKLQkJCSAgIFdMMTI3MV9BQ1hfSU5UUl9DTURfQ09NUExFVEUpOworCXdsMTI3MV93cml0ZTMyKHdsLCBBQ1hfUkVHX0lOVEVSUlVQVF9BQ0ssCisJCSAgICAgICBXTDEyNzFfQUNYX0lOVFJfQ01EX0NPTVBMRVRFKTsKIAogb3V0OgogCXJldHVybiByZXQ7CkBAIC0xOTEsMjMgKzE5MiwxOSBAQAogaW50IHdsMTI3MV9jbWRfZ2VuZXJhbF9wYXJtcyhzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAlzdHJ1Y3Qgd2wxMjcxX2dlbmVyYWxfcGFybXNfY21kICpnZW5fcGFybXM7Ci0Jc3RydWN0IGNvbmZfZ2VuZXJhbF9wYXJtcyAqZyA9ICZ3bC0+Y29uZi5pbml0LmdlbnBhcmFtOwogCWludCByZXQ7CiAKKwlpZiAoIXdsLT5udnMpCisJCXJldHVybiAtRU5PREVWOworCiAJZ2VuX3Bhcm1zID0ga3phbGxvYyhzaXplb2YoKmdlbl9wYXJtcyksIEdGUF9LRVJORUwpOwogCWlmICghZ2VuX3Bhcm1zKQogCQlyZXR1cm4gLUVOT01FTTsKIAogCWdlbl9wYXJtcy0+dGVzdC5pZCA9IFRFU1RfQ01EX0lOSV9GSUxFX0dFTkVSQUxfUEFSQU07CiAKLQlnZW5fcGFybXMtPnJlZl9jbGsgPSBnLT5yZWZfY2xrOwotCWdlbl9wYXJtcy0+c2V0dGxpbmdfdGltZSA9IGctPnNldHRsaW5nX3RpbWU7Ci0JZ2VuX3Bhcm1zLT5jbGtfdmFsaWRfb25fd2FrZXVwID0gZy0+Y2xrX3ZhbGlkX29uX3dha2V1cDsKLQlnZW5fcGFybXMtPmRjMmRjbW9kZSA9IGctPmRjMmRjbW9kZTsKLQlnZW5fcGFybXMtPnNpbmdsZV9kdWFsX2JhbmQgPSBnLT5zaW5nbGVfZHVhbF9iYW5kOwotCWdlbl9wYXJtcy0+dHhfYmlwX2ZlbV9hdXRvZGV0ZWN0ID0gZy0+dHhfYmlwX2ZlbV9hdXRvZGV0ZWN0OwotCWdlbl9wYXJtcy0+dHhfYmlwX2ZlbV9tYW51ZmFjdHVyZXIgPSBnLT50eF9iaXBfZmVtX21hbnVmYWN0dXJlcjsKLQlnZW5fcGFybXMtPnNldHRpbmdzID0gZy0+c2V0dGluZ3M7CisJbWVtY3B5KGdlbl9wYXJtcy0+cGFyYW1zLCB3bC0+bnZzLT5nZW5lcmFsX3BhcmFtcywKKwkgICAgICAgV0wxMjcxX05WU19HRU5FUkFMX1BBUkFNU19TSVpFKTsKIAogCXJldCA9IHdsMTI3MV9jbWRfdGVzdCh3bCwgZ2VuX3Bhcm1zLCBzaXplb2YoKmdlbl9wYXJtcyksIDApOwogCWlmIChyZXQgPCAwKQpAQCAtMjIwLDggKzIxNywxMSBAQAogaW50IHdsMTI3MV9jbWRfcmFkaW9fcGFybXMoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJc3RydWN0IHdsMTI3MV9yYWRpb19wYXJtc19jbWQgKnJhZGlvX3Bhcm1zOwotCXN0cnVjdCBjb25mX3JhZGlvX3Bhcm1zICpyID0gJndsLT5jb25mLmluaXQucmFkaW9wYXJhbTsKLQlpbnQgaSwgcmV0OworCXN0cnVjdCBjb25mX3JhZGlvX3Bhcm1zICpycGFyYW0gPSAmd2wtPmNvbmYuaW5pdC5yYWRpb3BhcmFtOworCWludCByZXQ7CisKKwlpZiAoIXdsLT5udnMpCisJCXJldHVybiAtRU5PREVWOwogCiAJcmFkaW9fcGFybXMgPSBremFsbG9jKHNpemVvZigqcmFkaW9fcGFybXMpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJhZGlvX3Bhcm1zKQpAQCAtMjI5LDYwICsyMjksMTMgQEAKIAogCXJhZGlvX3Bhcm1zLT50ZXN0LmlkID0gVEVTVF9DTURfSU5JX0ZJTEVfUkFESU9fUEFSQU07CiAKLQkvKiBTdGF0aWMgcmFkaW8gcGFyYW1ldGVycyAqLwotCXJhZGlvX3Bhcm1zLT5yeF90cmFjZV9sb3NzID0gci0+cnhfdHJhY2VfbG9zczsKLQlyYWRpb19wYXJtcy0+dHhfdHJhY2VfbG9zcyA9IHItPnR4X3RyYWNlX2xvc3M7Ci0JbWVtY3B5KHJhZGlvX3Bhcm1zLT5yeF9yc3NpX2FuZF9wcm9jX2NvbXBlbnMsCi0JICAgICAgIHItPnJ4X3Jzc2lfYW5kX3Byb2NfY29tcGVucywKLQkgICAgICAgQ09ORl9SU1NJX0FORF9QUk9DRVNTX0NPTVBFTlNBVElPTl9TSVpFKTsKKwltZW1jcHkocmFkaW9fcGFybXMtPnN0YXRfcmFkaW9fcGFyYW1zLCB3bC0+bnZzLT5zdGF0X3JhZGlvX3BhcmFtcywKKwkgICAgICAgV0wxMjcxX05WU19TVEFUX1JBRElPX1BBUkFNU19TSVpFKTsKKwltZW1jcHkocmFkaW9fcGFybXMtPmR5bl9yYWRpb19wYXJhbXMsCisJICAgICAgIHdsLT5udnMtPmR5bl9yYWRpb19wYXJhbXNbcnBhcmFtLT5mZW1dLAorCSAgICAgICBXTDEyNzFfTlZTX0RZTl9SQURJT19QQVJBTVNfU0laRSk7CiAKLQltZW1jcHkocmFkaW9fcGFybXMtPnJ4X3RyYWNlX2xvc3NfNSwgci0+cnhfdHJhY2VfbG9zc181LAotCSAgICAgICBDT05GX05VTUJFUl9PRl9TVUJfQkFORFNfNSk7Ci0JbWVtY3B5KHJhZGlvX3Bhcm1zLT50eF90cmFjZV9sb3NzXzUsIHItPnR4X3RyYWNlX2xvc3NfNSwKLQkgICAgICAgQ09ORl9OVU1CRVJfT0ZfU1VCX0JBTkRTXzUpOwotCW1lbWNweShyYWRpb19wYXJtcy0+cnhfcnNzaV9hbmRfcHJvY19jb21wZW5zXzUsCi0JICAgICAgIHItPnJ4X3Jzc2lfYW5kX3Byb2NfY29tcGVuc181LAotCSAgICAgICBDT05GX1JTU0lfQU5EX1BST0NFU1NfQ09NUEVOU0FUSU9OX1NJWkUpOwotCi0JLyogRHluYW1pYyByYWRpbyBwYXJhbWV0ZXJzICovCi0JcmFkaW9fcGFybXMtPnR4X3JlZl9wZF92b2x0YWdlID0gY3B1X3RvX2xlMTYoci0+dHhfcmVmX3BkX3ZvbHRhZ2UpOwotCXJhZGlvX3Bhcm1zLT50eF9yZWZfcG93ZXIgPSByLT50eF9yZWZfcG93ZXI7Ci0JcmFkaW9fcGFybXMtPnR4X29mZnNldF9kYiA9IHItPnR4X29mZnNldF9kYjsKLQotCW1lbWNweShyYWRpb19wYXJtcy0+dHhfcmF0ZV9saW1pdHNfbm9ybWFsLCByLT50eF9yYXRlX2xpbWl0c19ub3JtYWwsCi0JICAgICAgIENPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTKTsKLQltZW1jcHkocmFkaW9fcGFybXMtPnR4X3JhdGVfbGltaXRzX2RlZ3JhZGVkLCByLT50eF9yYXRlX2xpbWl0c19kZWdyYWRlZCwKLQkgICAgICAgQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFMpOwotCi0JbWVtY3B5KHJhZGlvX3Bhcm1zLT50eF9jaGFubmVsX2xpbWl0c18xMWIsIHItPnR4X2NoYW5uZWxfbGltaXRzXzExYiwKLQkgICAgICAgQ09ORl9OVU1CRVJfT0ZfQ0hBTk5FTFNfMl80KTsKLQltZW1jcHkocmFkaW9fcGFybXMtPnR4X2NoYW5uZWxfbGltaXRzX29mZG0sIHItPnR4X2NoYW5uZWxfbGltaXRzX29mZG0sCi0JICAgICAgIENPTkZfTlVNQkVSX09GX0NIQU5ORUxTXzJfNCk7Ci0JbWVtY3B5KHJhZGlvX3Bhcm1zLT50eF9wZHZfcmF0ZV9vZmZzZXRzLCByLT50eF9wZHZfcmF0ZV9vZmZzZXRzLAotCSAgICAgICBDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQUyk7Ci0JbWVtY3B5KHJhZGlvX3Bhcm1zLT50eF9pYmlhcywgci0+dHhfaWJpYXMsIENPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTKTsKLQotCXJhZGlvX3Bhcm1zLT5yeF9mZW1faW5zZXJ0aW9uX2xvc3MgPSByLT5yeF9mZW1faW5zZXJ0aW9uX2xvc3M7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQ09ORl9OVU1CRVJfT0ZfU1VCX0JBTkRTXzU7IGkrKykKLQkJcmFkaW9fcGFybXMtPnR4X3JlZl9wZF92b2x0YWdlXzVbaV0gPQotCQkJY3B1X3RvX2xlMTYoci0+dHhfcmVmX3BkX3ZvbHRhZ2VfNVtpXSk7Ci0JbWVtY3B5KHJhZGlvX3Bhcm1zLT50eF9yZWZfcG93ZXJfNSwgci0+dHhfcmVmX3Bvd2VyXzUsCi0JICAgICAgIENPTkZfTlVNQkVSX09GX1NVQl9CQU5EU181KTsKLQltZW1jcHkocmFkaW9fcGFybXMtPnR4X29mZnNldF9kYl81LCByLT50eF9vZmZzZXRfZGJfNSwKLQkgICAgICAgQ09ORl9OVU1CRVJfT0ZfU1VCX0JBTkRTXzUpOwotCW1lbWNweShyYWRpb19wYXJtcy0+dHhfcmF0ZV9saW1pdHNfbm9ybWFsXzUsCi0JICAgICAgIHItPnR4X3JhdGVfbGltaXRzX25vcm1hbF81LCBDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQUyk7Ci0JbWVtY3B5KHJhZGlvX3Bhcm1zLT50eF9yYXRlX2xpbWl0c19kZWdyYWRlZF81LAotCSAgICAgICByLT50eF9yYXRlX2xpbWl0c19kZWdyYWRlZF81LCBDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQUyk7Ci0JbWVtY3B5KHJhZGlvX3Bhcm1zLT50eF9jaGFubmVsX2xpbWl0c19vZmRtXzUsCi0JICAgICAgIHItPnR4X2NoYW5uZWxfbGltaXRzX29mZG1fNSwgQ09ORl9OVU1CRVJfT0ZfQ0hBTk5FTFNfNSk7Ci0JbWVtY3B5KHJhZGlvX3Bhcm1zLT50eF9wZHZfcmF0ZV9vZmZzZXRzXzUsIHItPnR4X3Bkdl9yYXRlX29mZnNldHNfNSwKLQkgICAgICAgQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFMpOwotCW1lbWNweShyYWRpb19wYXJtcy0+dHhfaWJpYXNfNSwgci0+dHhfaWJpYXNfNSwKLQkgICAgICAgQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFMpOwotCW1lbWNweShyYWRpb19wYXJtcy0+cnhfZmVtX2luc2VydGlvbl9sb3NzXzUsCi0JICAgICAgIHItPnJ4X2ZlbV9pbnNlcnRpb25fbG9zc181LCBDT05GX05VTUJFUl9PRl9TVUJfQkFORFNfNSk7CisJLyogRklYTUU6IGN1cnJlbnQgTlZTIGlzIG1pc3NpbmcgNUdIeiBwYXJhbWV0ZXJzICovCiAKIAl3bDEyNzFfZHVtcChERUJVR19DTUQsICJURVNUX0NNRF9JTklfRklMRV9SQURJT19QQVJBTTogIiwKIAkJICAgIHJhZGlvX3Bhcm1zLCBzaXplb2YoKnJhZGlvX3Bhcm1zKSk7CkBAIC0zMTEsMTkgKzI2NCw2IEBACiAJCQlkb19jYWwgPSBmYWxzZTsKIAl9CiAKLQkvKiBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQsIGJlY2F1c2Ugd2l0aCB0aGUgY3VycmVudCBzdGFjaywgd2UKLQkgKiBjYW5ub3Qga25vdyB3aGVuIHdlIGhhdmUgZGlzYXNzb2NpYXRlZC4gIFNvLCBpZiB3ZSBoYXZlIGFscmVhZHkKLQkgKiBqb2luZWQsIHdlIGRpc2Nvbm5lY3QgYmVmb3JlIGpvaW5pbmcgYWdhaW4uICovCi0JaWYgKHdsLT5qb2luZWQpIHsKLQkJcmV0ID0gd2wxMjcxX2NtZF9kaXNjb25uZWN0KHdsKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXdsMTI3MV9lcnJvcigiZmFpbGVkIHRvIGRpc2Nvbm5lY3QgYmVmb3JlIHJlam9pbmluZyIpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQl3bC0+am9pbmVkID0gZmFsc2U7Ci0JfQotCiAJam9pbiA9IGt6YWxsb2Moc2l6ZW9mKCpqb2luKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFqb2luKSB7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0zODgsOCArMzI4LDYgQEAKIAkJZ290byBvdXRfZnJlZTsKIAl9CiAKLQl3bC0+am9pbmVkID0gdHJ1ZTsKLQogCS8qCiAJICogdWdseSBoYWNrOiB3ZSBzaG91bGQgd2FpdCBmb3IgSk9JTl9FVkVOVF9DT01QTEVURV9JRCBidXQgdG8KIAkgKiBzaW1wbGlmeSBsb2NraW5nIHdlIGp1c3Qgc2xlZXAgaW5zdGVhZCwgZm9yIG5vdwpAQCAtNDg3LDcgKzQyNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCB3bDEyNzFfY21kX2RhdGFfcGF0aChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggY2hhbm5lbCwgYm9vbCBlbmFibGUpCitpbnQgd2wxMjcxX2NtZF9kYXRhX3BhdGgoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgZW5hYmxlKQogewogCXN0cnVjdCBjbWRfZW5hYmxlZGlzYWJsZV9wYXRoICpjbWQ7CiAJaW50IHJldDsKQEAgLTUwMSw3ICs0MzksOCBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQljbWQtPmNoYW5uZWwgPSBjaGFubmVsOworCS8qIHRoZSBjaGFubmVsIGhlcmUgaXMgb25seSB1c2VkIGZvciBjYWxpYnJhdGlvbiwgc28gaGFyZGNvZGVkIHRvIDEgKi8KKwljbWQtPmNoYW5uZWwgPSAxOwogCiAJaWYgKGVuYWJsZSkgewogCQljbWRfcnggPSBDTURfRU5BQkxFX1JYOwpAQCAtNTE0LDI5ICs0NTMsMjkgQEAKIAlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIGNtZF9yeCwgY21kLCBzaXplb2YoKmNtZCksIDApOwogCWlmIChyZXQgPCAwKSB7CiAJCXdsMTI3MV9lcnJvcigicnggJXMgY21kIGZvciBjaGFubmVsICVkIGZhaWxlZCIsCi0JCQkgICAgIGVuYWJsZSA/ICJzdGFydCIgOiAic3RvcCIsIGNoYW5uZWwpOworCQkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjbWQtPmNoYW5uZWwpOwogCQlnb3RvIG91dDsKIAl9CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgInJ4ICVzIGNtZCBjaGFubmVsICVkIiwKLQkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjaGFubmVsKTsKKwkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjbWQtPmNoYW5uZWwpOwogCiAJcmV0ID0gd2wxMjcxX2NtZF9zZW5kKHdsLCBjbWRfdHgsIGNtZCwgc2l6ZW9mKCpjbWQpLCAwKTsKIAlpZiAocmV0IDwgMCkgewogCQl3bDEyNzFfZXJyb3IoInR4ICVzIGNtZCBmb3IgY2hhbm5lbCAlZCBmYWlsZWQiLAotCQkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjaGFubmVsKTsKKwkJCSAgICAgZW5hYmxlID8gInN0YXJ0IiA6ICJzdG9wIiwgY21kLT5jaGFubmVsKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAl3bDEyNzFfZGVidWcoREVCVUdfQk9PVCwgInR4ICVzIGNtZCBjaGFubmVsICVkIiwKLQkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjaGFubmVsKTsKKwkJICAgICBlbmFibGUgPyAic3RhcnQiIDogInN0b3AiLCBjbWQtPmNoYW5uZWwpOwogCiBvdXQ6CiAJa2ZyZWUoY21kKTsKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgd2wxMjcxX2NtZF9wc19tb2RlKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBwc19tb2RlKQoraW50IHdsMTI3MV9jbWRfcHNfbW9kZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTggcHNfbW9kZSwgYm9vbCBzZW5kKQogewogCXN0cnVjdCB3bDEyNzFfY21kX3BzX3BhcmFtcyAqcHNfcGFyYW1zID0gTlVMTDsKIAlpbnQgcmV0ID0gMDsKQEAgLTU1Nyw3ICs0OTYsNyBAQAogCX0KIAogCXBzX3BhcmFtcy0+cHNfbW9kZSA9IHBzX21vZGU7Ci0JcHNfcGFyYW1zLT5zZW5kX251bGxfZGF0YSA9IDE7CisJcHNfcGFyYW1zLT5zZW5kX251bGxfZGF0YSA9IHNlbmQ7CiAJcHNfcGFyYW1zLT5yZXRyaWVzID0gNTsKIAlwc19wYXJhbXMtPmhhbmdfb3Zlcl9wZXJpb2QgPSAxMjg7CiAJcHNfcGFyYW1zLT5udWxsX2RhdGFfcmF0ZSA9IGNwdV90b19sZTMyKDEpOyAvKiAxIE1icHMgKi8KQEAgLTYzNiw3ICs1NzUsNyBAQAogCWNoYW5uZWxzID0gd2wtPmh3LT53aXBoeS0+YmFuZHNbaWVlZV9iYW5kXS0+Y2hhbm5lbHM7CiAJbl9jaCA9IHdsLT5ody0+d2lwaHktPmJhbmRzW2llZWVfYmFuZF0tPm5fY2hhbm5lbHM7CiAKLQlpZiAod2wtPnNjYW5uaW5nKQorCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19TQ0FOTklORywgJndsLT5mbGFncykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJcGFyYW1zID0ga3phbGxvYyhzaXplb2YoKnBhcmFtcyksIEdGUF9LRVJORUwpOwpAQCAtNzExLDcgKzY1MCw3IEBACiAKIAl3bDEyNzFfZHVtcChERUJVR19TQ0FOLCAiU0NBTjogIiwgcGFyYW1zLCBzaXplb2YoKnBhcmFtcykpOwogCi0Jd2wtPnNjYW5uaW5nID0gdHJ1ZTsKKwlzZXRfYml0KFdMMTI3MV9GTEFHX1NDQU5OSU5HLCAmd2wtPmZsYWdzKTsKIAlpZiAod2wxMjcxXzExYV9lbmFibGVkKCkpIHsKIAkJd2wtPnNjYW4uc3RhdGUgPSBiYW5kOwogCQlpZiAoYmFuZCA9PSBXTDEyNzFfU0NBTl9CQU5EX0RVQUwpIHsKQEAgLTcyOSw3ICs2NjgsNyBAQAogCXJldCA9IHdsMTI3MV9jbWRfc2VuZCh3bCwgQ01EX1NDQU4sIHBhcmFtcywgc2l6ZW9mKCpwYXJhbXMpLCAwKTsKIAlpZiAocmV0IDwgMCkgewogCQl3bDEyNzFfZXJyb3IoIlNDQU4gZmFpbGVkIik7Ci0JCXdsLT5zY2FubmluZyA9IGZhbHNlOworCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfU0NBTk5JTkcsICZ3bC0+ZmxhZ3MpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTEwMDMsNyArOTQyLDcgQEAKIAlyZXQgPSB3bDEyNzFfY21kX3NlbmQod2wsIENNRF9TRVRfS0VZUywgY21kLCBzaXplb2YoKmNtZCksIDApOwogCWlmIChyZXQgPCAwKSB7CiAJCXdsMTI3MV93YXJuaW5nKCJjb3VsZCBub3Qgc2V0IGtleXMiKTsKLQkJZ290byBvdXQ7CisJZ290byBvdXQ7CiAJfQogCiBvdXQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NtZC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jbWQuaAppbmRleCBiNGZhNGFjLi4yZGMwNmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NtZC5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfY21kLmgKQEAgLTM3LDggKzM3LDggQEAKIGludCB3bDEyNzFfY21kX3Rlc3Qoc3RydWN0IHdsMTI3MSAqd2wsIHZvaWQgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIHU4IGFuc3dlcik7CiBpbnQgd2wxMjcxX2NtZF9pbnRlcnJvZ2F0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgdTE2IGlkLCB2b2lkICpidWYsIHNpemVfdCBsZW4pOwogaW50IHdsMTI3MV9jbWRfY29uZmlndXJlKHN0cnVjdCB3bDEyNzEgKndsLCB1MTYgaWQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7Ci1pbnQgd2wxMjcxX2NtZF9kYXRhX3BhdGgoc3RydWN0IHdsMTI3MSAqd2wsIHU4IGNoYW5uZWwsIGJvb2wgZW5hYmxlKTsKLWludCB3bDEyNzFfY21kX3BzX21vZGUoc3RydWN0IHdsMTI3MSAqd2wsIHU4IHBzX21vZGUpOworaW50IHdsMTI3MV9jbWRfZGF0YV9wYXRoKHN0cnVjdCB3bDEyNzEgKndsLCBib29sIGVuYWJsZSk7CitpbnQgd2wxMjcxX2NtZF9wc19tb2RlKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBwc19tb2RlLCBib29sIHNlbmQpOwogaW50IHdsMTI3MV9jbWRfcmVhZF9tZW1vcnkoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBhZGRyLCB2b2lkICphbnN3ZXIsCiAJCQkgICBzaXplX3QgbGVuKTsKIGludCB3bDEyNzFfY21kX3NjYW4oc3RydWN0IHdsMTI3MSAqd2wsIHU4ICpzc2lkLCBzaXplX3QgbGVuLApAQCAtNDI4LDY3ICs0MjgsMjQgQEAKIAogCXN0cnVjdCB3bDEyNzFfY21kX3Rlc3RfaGVhZGVyIHRlc3Q7CiAKLQl1OCByZWZfY2xrOwotCXU4IHNldHRsaW5nX3RpbWU7Ci0JdTggY2xrX3ZhbGlkX29uX3dha2V1cDsKLQl1OCBkYzJkY21vZGU7Ci0JdTggc2luZ2xlX2R1YWxfYmFuZDsKLQotCXU4IHR4X2JpcF9mZW1fYXV0b2RldGVjdDsKLQl1OCB0eF9iaXBfZmVtX21hbnVmYWN0dXJlcjsKLQl1OCBzZXR0aW5nczsKKwl1OCBwYXJhbXNbV0wxMjcxX05WU19HRU5FUkFMX1BBUkFNU19TSVpFXTsKKwlzOCByZXNlcnZlZFsyM107CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBXTDEyNzFfU1RBVF9SQURJT19QQVJBTVNfNV9TSVpFICAgIDI5CisjZGVmaW5lIFdMMTI3MV9EWU5fUkFESU9fUEFSQU1TXzVfU0laRSAgICAxMDQKKwogc3RydWN0IHdsMTI3MV9yYWRpb19wYXJtc19jbWQgewogCXN0cnVjdCB3bDEyNzFfY21kX2hlYWRlciBoZWFkZXI7CiAKIAlzdHJ1Y3Qgd2wxMjcxX2NtZF90ZXN0X2hlYWRlciB0ZXN0OwogCi0JLyogU3RhdGljIHJhZGlvIHBhcmFtZXRlcnMgKi8KLQkvKiAyLjRHSHogKi8KLQl1OCByeF90cmFjZV9sb3NzOwotCXU4IHR4X3RyYWNlX2xvc3M7Ci0JczggcnhfcnNzaV9hbmRfcHJvY19jb21wZW5zW0NPTkZfUlNTSV9BTkRfUFJPQ0VTU19DT01QRU5TQVRJT05fU0laRV07CisJdTggc3RhdF9yYWRpb19wYXJhbXNbV0wxMjcxX05WU19TVEFUX1JBRElPX1BBUkFNU19TSVpFXTsKKwl1OCBzdGF0X3JhZGlvX3BhcmFtc181W1dMMTI3MV9TVEFUX1JBRElPX1BBUkFNU181X1NJWkVdOwogCi0JLyogNUdIeiAqLwotCXU4IHJ4X3RyYWNlX2xvc3NfNVtDT05GX05VTUJFUl9PRl9TVUJfQkFORFNfNV07Ci0JdTggdHhfdHJhY2VfbG9zc181W0NPTkZfTlVNQkVSX09GX1NVQl9CQU5EU181XTsKLQlzOCByeF9yc3NpX2FuZF9wcm9jX2NvbXBlbnNfNVtDT05GX1JTU0lfQU5EX1BST0NFU1NfQ09NUEVOU0FUSU9OX1NJWkVdOwotCi0JLyogRHluYW1pYyByYWRpbyBwYXJhbWV0ZXJzICovCi0JLyogMi40R0h6ICovCi0JX19sZTE2IHR4X3JlZl9wZF92b2x0YWdlOwotCXM4ICB0eF9yZWZfcG93ZXI7Ci0JczggIHR4X29mZnNldF9kYjsKLQotCXM4ICB0eF9yYXRlX2xpbWl0c19ub3JtYWxbQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFNdOwotCXM4ICB0eF9yYXRlX2xpbWl0c19kZWdyYWRlZFtDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQU107Ci0KLQlzOCAgdHhfY2hhbm5lbF9saW1pdHNfMTFiW0NPTkZfTlVNQkVSX09GX0NIQU5ORUxTXzJfNF07Ci0JczggIHR4X2NoYW5uZWxfbGltaXRzX29mZG1bQ09ORl9OVU1CRVJfT0ZfQ0hBTk5FTFNfMl80XTsKLQlzOCAgdHhfcGR2X3JhdGVfb2Zmc2V0c1tDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQU107Ci0KLQl1OCAgdHhfaWJpYXNbQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFNdOwotCXU4ICByeF9mZW1faW5zZXJ0aW9uX2xvc3M7Ci0KLQl1OCBwYWRkaW5nMjsKLQotCS8qIDVHSHogKi8KLQlfX2xlMTYgdHhfcmVmX3BkX3ZvbHRhZ2VfNVtDT05GX05VTUJFUl9PRl9TVUJfQkFORFNfNV07Ci0JczggIHR4X3JlZl9wb3dlcl81W0NPTkZfTlVNQkVSX09GX1NVQl9CQU5EU181XTsKLQlzOCAgdHhfb2Zmc2V0X2RiXzVbQ09ORl9OVU1CRVJfT0ZfU1VCX0JBTkRTXzVdOwotCi0JczggIHR4X3JhdGVfbGltaXRzX25vcm1hbF81W0NPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKLQlzOCAgdHhfcmF0ZV9saW1pdHNfZGVncmFkZWRfNVtDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQU107Ci0KLQlzOCAgdHhfY2hhbm5lbF9saW1pdHNfb2ZkbV81W0NPTkZfTlVNQkVSX09GX0NIQU5ORUxTXzVdOwotCXM4ICB0eF9wZHZfcmF0ZV9vZmZzZXRzXzVbQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFNdOwotCi0JLyogRklYTUU6IHRoaXMgaXMgaW5jb25zaXN0ZW50IHdpdGggdGhlIHR5cGVzIGZvciAyLjRHSHogKi8KLQlzOCAgdHhfaWJpYXNfNVtDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQU107Ci0JczggIHJ4X2ZlbV9pbnNlcnRpb25fbG9zc181W0NPTkZfTlVNQkVSX09GX1NVQl9CQU5EU181XTsKLQotCXU4IHBhZGRpbmczWzJdOworCXU4IGR5bl9yYWRpb19wYXJhbXNbV0wxMjcxX05WU19EWU5fUkFESU9fUEFSQU1TX1NJWkVdOworCXU4IHJlc2VydmVkOworCXU4IGR5bl9yYWRpb19wYXJhbXNfNVtXTDEyNzFfRFlOX1JBRElPX1BBUkFNU181X1NJWkVdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKIHN0cnVjdCB3bDEyNzFfY21kX2NhbF9jaGFubmVsX3R1bmUgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9jb25mLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NvbmYuaAppbmRleCA1NjUzNzNlLi42ZjllNzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NvbmYuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2NvbmYuaApAQCAtMjU4LDcgKzI1OCw4IEBACiAjZGVmaW5lIENPTkZfVFhfTUFYX1JBVEVfQ0xBU1NFUyAgICAgICA4CiAKICNkZWZpbmUgQ09ORl9UWF9SQVRFX01BU0tfVU5TUEVDSUZJRUQgIDAKLSNkZWZpbmUgQ09ORl9UWF9SQVRFX01BU0tfQUxMICAgICAgICAgIDB4MWVmZgorI2RlZmluZSBDT05GX1RYX1JBVEVfTUFTS19CQVNJQyAgICAgICAgKENPTkZfSFdfQklUX1JBVEVfMU1CUFMgfCBcCisJCQkJCUNPTkZfSFdfQklUX1JBVEVfMk1CUFMpCiAjZGVmaW5lIENPTkZfVFhfUkFURV9SRVRSWV9MSU1JVCAgICAgICAxMAogCiBzdHJ1Y3QgY29uZl90eF9yYXRlX2NsYXNzIHsKQEAgLTcyMiwzMSArNzIzLDYgQEAKIAl1OCBwc21fZW50cnlfcmV0cmllczsKIH07CiAKLSNkZWZpbmUgQ09ORl9TUl9FUlJfVEJMX01BWF9WQUxVRVMgICAxNAotCi1zdHJ1Y3QgY29uZl9tYXJ0X3JlZmxleF9lcnJfdGFibGUgewotCS8qCi0JICogTGVuZ3RoIG9mIHRoZSBlcnJvciB0YWJsZSB2YWx1ZXMgdGFibGUuCi0JICoKLQkgKiBSYW5nZTogMCAtIENPTkZfU1JfRVJSX1RCTF9NQVhfVkFMVUVTCi0JICovCi0JdTggbGVuOwotCi0JLyoKLQkgKiBTbWFydCBSZWZsZXggZXJyb3IgdGFibGUgdXBwZXIgbGltaXQuCi0JICoKLQkgKiBSYW5nZTogczgKLQkgKi8KLQlzOCB1cHBlcl9saW1pdDsKLQotCS8qCi0JICogU21hcnQgUmVmbGV4IGVycm9yIHRhYmxlIHZhbHVlcy4KLQkgKgotCSAqIFJhbmdlOiBzOAotCSAqLwotCXM4IHZhbHVlc1tDT05GX1NSX0VSUl9UQkxfTUFYX1ZBTFVFU107Ci19OwotCiBlbnVtIHsKIAlDT05GX1JFRl9DTEtfMTlfMl9FLAogCUNPTkZfUkVGX0NMS18yNl9FLApAQCAtNzU5LDY0ICs3MzUsNiBAQAogCUNPTkZfRFVBTF9CQU5ECiB9OwogCi1zdHJ1Y3QgY29uZl9nZW5lcmFsX3Bhcm1zIHsKLQkvKgotCSAqIFJGIFJlZmVyZW5jZSBDbG9jayB0eXBlIC8gc3BlZWQKLQkgKgotCSAqIFJhbmdlOiBDT05GX1JFRl9DTEtfKgotCSAqLwotCXU4IHJlZl9jbGs7Ci0KLQkvKgotCSAqIFNldHRsaW5nIHRpbWUgb2YgdGhlIHJlZmVyZW5jZSBjbG9jayBhZnRlciBib290LgotCSAqCi0JICogUmFuZ2U6IHU4Ci0JICovCi0JdTggc2V0dGxpbmdfdGltZTsKLQotCS8qCi0JICogRmxhZyBkZWZpbmluZyB3aGV0aGVyIGNsb2NrIGlzIHZhbGlkIG9uIHdha2V1cC4KLQkgKgotCSAqIFJhbmdlOiAwIC0gbm90IHZhbGlkIG9uIHdha2V1cCwgMSAtIHZhbGlkIG9uIHdha2V1cAotCSAqLwotCXU4IGNsa192YWxpZF9vbl93YWtldXA7Ci0KLQkvKgotCSAqIERDLXRvLURDIG1vZGUuCi0JICoKLQkgKiBSYW5nZTogVW5rbm93bgotCSAqLwotCXU4IGRjMmRjbW9kZTsKLQotCS8qCi0JICogRmxhZyBkZWZpbmluZyB3aGV0aGVyIHVzZWQgYXMgc2luZ2xlIG9yIGR1YWwtYmFuZC4KLQkgKgotCSAqIFJhbmdlOiBDT05GX1NJTkdMRV9CQU5ELCBDT05GX0RVQUxfQkFORAotCSAqLwotCXU4IHNpbmdsZV9kdWFsX2JhbmQ7Ci0KLQkvKgotCSAqIFRYIGJpcCBmZW0gYXV0b2RldGVjdCBmbGFnLgotCSAqCi0JICogUmFuZ2U6IFVua25vd24KLQkgKi8KLQl1OCB0eF9iaXBfZmVtX2F1dG9kZXRlY3Q7Ci0KLQkvKgotCSAqIFRYIGJpcCBnZW0gbWFudWZhY3R1cmVyLgotCSAqCi0JICogUmFuZ2U6IFVua25vd24KLQkgKi8KLQl1OCB0eF9iaXBfZmVtX21hbnVmYWN0dXJlcjsKLQotCS8qCi0JICogU2V0dGluZ3MgZmxhZ3MuCi0JICoKLQkgKiBSYW5nZTogVW5rbm93bgotCSAqLwotCXU4IHNldHRpbmdzOwotfTsKLQogI2RlZmluZSBDT05GX1JTU0lfQU5EX1BST0NFU1NfQ09NUEVOU0FUSU9OX1NJWkUgMTUKICNkZWZpbmUgQ09ORl9OVU1CRVJfT0ZfU1VCX0JBTkRTXzUgIDcKICNkZWZpbmUgQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFMgIDYKQEAgLTgyNSw5NSArNzQzLDUzIEBACiAKIHN0cnVjdCBjb25mX3JhZGlvX3Bhcm1zIHsKIAkvKgotCSAqIFN0YXRpYyByYWRpbyBwYXJhbWV0ZXJzIGZvciAyLjRHSHoKKwkgKiBGRU0gcGFyYW1ldGVyIHNldCB0byB1c2UKIAkgKgotCSAqIFJhbmdlOiB1bmtub3duCisJICogUmFuZ2U6IDAgb3IgMQogCSAqLwotCXU4IHJ4X3RyYWNlX2xvc3M7Ci0JdTggdHhfdHJhY2VfbG9zczsKLQlzOCByeF9yc3NpX2FuZF9wcm9jX2NvbXBlbnNbQ09ORl9SU1NJX0FORF9QUk9DRVNTX0NPTVBFTlNBVElPTl9TSVpFXTsKLQotCS8qCi0JICogU3RhdGljIHJhZGlvIHBhcmFtZXRlcnMgZm9yIDVHSHoKLQkgKgotCSAqIFJhbmdlOiB1bmtub3duCi0JICovCi0JdTggcnhfdHJhY2VfbG9zc181W0NPTkZfTlVNQkVSX09GX1NVQl9CQU5EU181XTsKLQl1OCB0eF90cmFjZV9sb3NzXzVbQ09ORl9OVU1CRVJfT0ZfU1VCX0JBTkRTXzVdOwotCXM4IHJ4X3Jzc2lfYW5kX3Byb2NfY29tcGVuc181W0NPTkZfUlNTSV9BTkRfUFJPQ0VTU19DT01QRU5TQVRJT05fU0laRV07Ci0KLQkvKgotCSAqIER5bmFtaWMgcmFkaW8gcGFyYW1ldGVycyBmb3IgMi40R0h6Ci0JICoKLQkgKiBSYW5nZTogdW5rbm93bgotCSAqLwotCXMxNiB0eF9yZWZfcGRfdm9sdGFnZTsKLQlzOCAgdHhfcmVmX3Bvd2VyOwotCXM4ICB0eF9vZmZzZXRfZGI7Ci0KLQlzOCAgdHhfcmF0ZV9saW1pdHNfbm9ybWFsW0NPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKLQlzOCAgdHhfcmF0ZV9saW1pdHNfZGVncmFkZWRbQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFNdOwotCi0JczggIHR4X2NoYW5uZWxfbGltaXRzXzExYltDT05GX05VTUJFUl9PRl9DSEFOTkVMU18yXzRdOwotCXM4ICB0eF9jaGFubmVsX2xpbWl0c19vZmRtW0NPTkZfTlVNQkVSX09GX0NIQU5ORUxTXzJfNF07Ci0JczggIHR4X3Bkdl9yYXRlX29mZnNldHNbQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFNdOwotCi0JdTggIHR4X2liaWFzW0NPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKLQl1OCAgcnhfZmVtX2luc2VydGlvbl9sb3NzOwotCi0JLyoKLQkgKiBEeW5hbWljIHJhZGlvIHBhcmFtZXRlcnMgZm9yIDVHSHoKLQkgKgotCSAqIFJhbmdlOiB1bmtub3duCi0JICovCi0JczE2IHR4X3JlZl9wZF92b2x0YWdlXzVbQ09ORl9OVU1CRVJfT0ZfU1VCX0JBTkRTXzVdOwotCXM4ICB0eF9yZWZfcG93ZXJfNVtDT05GX05VTUJFUl9PRl9TVUJfQkFORFNfNV07Ci0JczggIHR4X29mZnNldF9kYl81W0NPTkZfTlVNQkVSX09GX1NVQl9CQU5EU181XTsKLQotCXM4ICB0eF9yYXRlX2xpbWl0c19ub3JtYWxfNVtDT05GX05VTUJFUl9PRl9SQVRFX0dST1VQU107Ci0JczggIHR4X3JhdGVfbGltaXRzX2RlZ3JhZGVkXzVbQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFNdOwotCi0JczggIHR4X2NoYW5uZWxfbGltaXRzX29mZG1fNVtDT05GX05VTUJFUl9PRl9DSEFOTkVMU181XTsKLQlzOCAgdHhfcGR2X3JhdGVfb2Zmc2V0c181W0NPTkZfTlVNQkVSX09GX1JBVEVfR1JPVVBTXTsKLQotCS8qIEZJWE1FOiB0aGlzIGlzIGluY29uc2lzdGVudCB3aXRoIHRoZSB0eXBlcyBmb3IgMi40R0h6ICovCi0JczggIHR4X2liaWFzXzVbQ09ORl9OVU1CRVJfT0ZfUkFURV9HUk9VUFNdOwotCXM4ICByeF9mZW1faW5zZXJ0aW9uX2xvc3NfNVtDT05GX05VTUJFUl9PRl9TVUJfQkFORFNfNV07CisJdTggZmVtOwogfTsKIAotI2RlZmluZSBDT05GX1NSX0VSUl9UQkxfQ09VTlQgICAgICAgIDMKLQogc3RydWN0IGNvbmZfaW5pdF9zZXR0aW5ncyB7CiAJLyoKLQkgKiBDb25maWd1cmUgU21hcnQgUmVmbGV4IGVycm9yIHRhYmxlIHZhbHVlcy4KLQkgKi8KLQlzdHJ1Y3QgY29uZl9tYXJ0X3JlZmxleF9lcnJfdGFibGUgc3JfZXJyX3RibFtDT05GX1NSX0VSUl9UQkxfQ09VTlRdOwotCi0JLyoKLQkgKiBTbWFydCBSZWZsZXggZW5hYmxlIGZsYWcuCi0JICoKLQkgKiBSYW5nZTogMSAtIFNtYXJ0IFJlZmxleCBlbmFibGVkLCAwIC0gU21hcnQgUmVmbGV4IGRpc2FibGVkCi0JICovCi0JdTggc3JfZW5hYmxlOwotCi0JLyoKLQkgKiBDb25maWd1cmUgZ2VuZXJhbCBwYXJhbWV0ZXJzLgotCSAqLwotCXN0cnVjdCBjb25mX2dlbmVyYWxfcGFybXMgZ2VucGFyYW07Ci0KLQkvKgogCSAqIENvbmZpZ3VyZSByYWRpbyBwYXJhbWV0ZXJzLgogCSAqLwogCXN0cnVjdCBjb25mX3JhZGlvX3Bhcm1zIHJhZGlvcGFyYW07CiAKIH07CiAKK3N0cnVjdCBjb25mX2l0cmltX3NldHRpbmdzIHsKKwkvKiBlbmFibGUgZGNvIGl0cmltICovCisJdTggZW5hYmxlOworCisJLyogbW9kZXJhdGlvbiB0aW1lb3V0IGluIG1pY3Jvc2VjcyBmcm9tIHRoZSBsYXN0IFRYICovCisJdTMyIHRpbWVvdXQ7Cit9OworCitzdHJ1Y3QgY29uZl9wbV9jb25maWdfc2V0dGluZ3MgeworCS8qCisJICogSG9zdCBjbG9jayBzZXR0bGluZyB0aW1lCisJICoKKwkgKiBSYW5nZTogMCAtIDMwMDAwIHVzCisJICovCisJdTMyIGhvc3RfY2xrX3NldHRsaW5nX3RpbWU7CisKKwkvKgorCSAqIEhvc3QgZmFzdCB3YWtldXAgc3VwcG9ydAorCSAqCisJICogUmFuZ2U6IHRydWUsIGZhbHNlCisJICovCisJYm9vbCBob3N0X2Zhc3Rfd2FrZXVwX3N1cHBvcnQ7Cit9OworCiBzdHJ1Y3QgY29uZl9kcnZfc2V0dGluZ3MgewogCXN0cnVjdCBjb25mX3NnX3NldHRpbmdzIHNnOwogCXN0cnVjdCBjb25mX3J4X3NldHRpbmdzIHJ4OwogCXN0cnVjdCBjb25mX3R4X3NldHRpbmdzIHR4OwogCXN0cnVjdCBjb25mX2Nvbm5fc2V0dGluZ3MgY29ubjsKIAlzdHJ1Y3QgY29uZl9pbml0X3NldHRpbmdzIGluaXQ7CisJc3RydWN0IGNvbmZfaXRyaW1fc2V0dGluZ3MgaXRyaW07CisJc3RydWN0IGNvbmZfcG1fY29uZmlnX3NldHRpbmdzIHBtX2NvbmZpZzsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2RlYnVnZnMuYwppbmRleCBjMTgwNWU1Li44ZDc1ODhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2RlYnVnZnMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2RlYnVnZnMuYwpAQCAtMjM3LDYgKzIzNyw2NCBAQAogCS5vcGVuID0gd2wxMjcxX29wZW5fZmlsZV9nZW5lcmljLAogfTsKIAorc3RhdGljIHNzaXplX3QgZ3Bpb19wb3dlcl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWJvb2wgc3RhdGUgPSB0ZXN0X2JpdChXTDEyNzFfRkxBR19HUElPX1BPV0VSLCAmd2wtPmZsYWdzKTsKKworCWludCByZXM7CisJY2hhciBidWZbMTBdOworCisJcmVzID0gc2NucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlZFxuIiwgc3RhdGUpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXMpOworfQorCitzdGF0aWMgc3NpemVfdCBncGlvX3Bvd2VyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IHdsMTI3MSAqd2wgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJY2hhciBidWZbMTBdOworCXNpemVfdCBsZW47CisJdW5zaWduZWQgbG9uZyB2YWx1ZTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCWxlbiA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKKwl9CisJYnVmW2xlbl0gPSAnXDAnOworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsdWUpOworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJpbGxlZ2FsIHZhbHVlIGluIGdwaW9fcG93ZXIiKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHZhbHVlKSB7CisJCXdsLT5zZXRfcG93ZXIodHJ1ZSk7CisJCXNldF9iaXQoV0wxMjcxX0ZMQUdfR1BJT19QT1dFUiwgJndsLT5mbGFncyk7CisJfSBlbHNlIHsKKwkJd2wtPnNldF9wb3dlcihmYWxzZSk7CisJCWNsZWFyX2JpdChXTDEyNzFfRkxBR19HUElPX1BPV0VSLCAmd2wtPmZsYWdzKTsKKwl9CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBncGlvX3Bvd2VyX29wcyA9IHsKKwkucmVhZCA9IGdwaW9fcG93ZXJfcmVhZCwKKwkud3JpdGUgPSBncGlvX3Bvd2VyX3dyaXRlLAorCS5vcGVuID0gd2wxMjcxX29wZW5fZmlsZV9nZW5lcmljCit9OworCiBzdGF0aWMgdm9pZCB3bDEyNzFfZGVidWdmc19kZWxldGVfZmlsZXMoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJREVCVUdGU19GV1NUQVRTX0RFTCh0eCwgaW50ZXJuYWxfZGVzY19vdmVyZmxvdyk7CkBAIC0zMzMsNiArMzkxLDggQEAKIAlERUJVR0ZTX0RFTCh0eF9xdWV1ZV9sZW4pOwogCURFQlVHRlNfREVMKHJldHJ5X2NvdW50KTsKIAlERUJVR0ZTX0RFTChleGNlc3NpdmVfcmV0cmllcyk7CisKKwlERUJVR0ZTX0RFTChncGlvX3Bvd2VyKTsKIH0KIAogc3RhdGljIGludCB3bDEyNzFfZGVidWdmc19hZGRfZmlsZXMoc3RydWN0IHdsMTI3MSAqd2wpCkBAIC00MzQsNiArNDk0LDggQEAKIAlERUJVR0ZTX0FERChyZXRyeV9jb3VudCwgd2wtPmRlYnVnZnMucm9vdGRpcik7CiAJREVCVUdGU19BREQoZXhjZXNzaXZlX3JldHJpZXMsIHdsLT5kZWJ1Z2ZzLnJvb3RkaXIpOwogCisJREVCVUdGU19BREQoZ3Bpb19wb3dlciwgd2wtPmRlYnVnZnMucm9vdGRpcik7CisKIG91dDoKIAlpZiAocmV0IDwgMCkKIAkJd2wxMjcxX2RlYnVnZnNfZGVsZXRlX2ZpbGVzKHdsKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZXZlbnQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZXZlbnQuYwppbmRleCBkMTNmZGQ5Li43NDY4ZWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2V2ZW50LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ldmVudC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAid2wxMjcxLmgiCiAjaW5jbHVkZSAid2wxMjcxX3JlZy5oIgogI2luY2x1ZGUgIndsMTI3MV9zcGkuaCIKKyNpbmNsdWRlICJ3bDEyNzFfaW8uaCIKICNpbmNsdWRlICJ3bDEyNzFfZXZlbnQuaCIKICNpbmNsdWRlICJ3bDEyNzFfcHMuaCIKICNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKQEAgLTM1LDcgKzM2LDcgQEAKIAl3bDEyNzFfZGVidWcoREVCVUdfRVZFTlQsICJzdGF0dXM6IDB4JXgiLAogCQkgICAgIG1ib3gtPnNjaGVkdWxlZF9zY2FuX3N0YXR1cyk7CiAKLQlpZiAod2wtPnNjYW5uaW5nKSB7CisJaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX1NDQU5OSU5HLCAmd2wtPmZsYWdzKSkgewogCQlpZiAod2wtPnNjYW4uc3RhdGUgPT0gV0wxMjcxX1NDQU5fQkFORF9EVUFMKSB7CiAJCQl3bDEyNzFfY21kX3RlbXBsYXRlX3NldCh3bCwgQ01EX1RFTVBMX0NGR19QUk9CRV9SRVFfMl80LAogCQkJCQkJTlVMTCwgc2l6ZSk7CkBAIC00Myw3ICs0NCw3IEBACiAJCQkgKiB0byB0aGUgd2wxMjcxX2NtZF9zY2FuIGZ1bmN0aW9uIHRoYXQgd2UgYXJlIG5vdAogCQkJICogc2Nhbm5pbmcgYXMgaXQgY2hlY2tzIHRoYXQuCiAJCQkgKi8KLQkJCXdsLT5zY2FubmluZyA9IGZhbHNlOworCQkJY2xlYXJfYml0KFdMMTI3MV9GTEFHX1NDQU5OSU5HLCAmd2wtPmZsYWdzKTsKIAkJCXdsMTI3MV9jbWRfc2Nhbih3bCwgd2wtPnNjYW4uc3NpZCwgd2wtPnNjYW4uc3NpZF9sZW4sCiAJCQkJCQl3bC0+c2Nhbi5hY3RpdmUsCiAJCQkJCQl3bC0+c2Nhbi5oaWdoX3ByaW8sCkBAIC02Miw3ICs2Myw3IEBACiAJCQltdXRleF91bmxvY2soJndsLT5tdXRleCk7CiAJCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQod2wtPmh3LCBmYWxzZSk7CiAJCQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwotCQkJd2wtPnNjYW5uaW5nID0gZmFsc2U7CisJCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfU0NBTk5JTkcsICZ3bC0+ZmxhZ3MpOwogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtNzgsMjUgKzc5LDYxIEBACiAKIAlzd2l0Y2ggKG1ib3gtPnBzX3N0YXR1cykgewogCWNhc2UgRVZFTlRfRU5URVJfUE9XRVJfU0FWRV9GQUlMOgotCQlpZiAoIXdsLT5wc20pIHsKKwkJd2wxMjcxX2RlYnVnKERFQlVHX1BTTSwgIlBTTSBlbnRyeSBmYWlsZWQiKTsKKworCQlpZiAoIXRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTSwgJndsLT5mbGFncykpIHsKKwkJCS8qIHJlbWFpbiBpbiBhY3RpdmUgbW9kZSAqLwogCQkJd2wtPnBzbV9lbnRyeV9yZXRyeSA9IDA7CiAJCQlicmVhazsKIAkJfQogCiAJCWlmICh3bC0+cHNtX2VudHJ5X3JldHJ5IDwgd2wtPmNvbmYuY29ubi5wc21fZW50cnlfcmV0cmllcykgewogCQkJd2wtPnBzbV9lbnRyeV9yZXRyeSsrOwotCQkJcmV0ID0gd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSk7CisJCQlyZXQgPSB3bDEyNzFfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFLAorCQkJCQkJIHRydWUpOwogCQl9IGVsc2UgewogCQkJd2wxMjcxX2Vycm9yKCJQU00gZW50cnkgZmFpbGVkLCBnaXZpbmcgdXAuXG4iKTsKKwkJCS8qIEZJWE1FOiB0aGlzIG1heSBuZWVkIHRvIGJlIHJlY29uc2lkZXJlZC4gZm9yIG5vdyBpdAorCQkJICAgaXMgbm90IHBvc3NpYmxlIHRvIGluZGljYXRlIHRvIHRoZSBtYWM4MDIxMQorCQkJICAgYWZ0ZXJ3YXJkcyB0aGF0IFBTTSBlbnRyeSBmYWlsZWQuIFRvIG1heGltaXplCisJCQkgICBmdW5jdGlvbmFsaXR5IChyZWNlaXZpbmcgZGF0YSBhbmQgcmVtYWluaW5nCisJCQkgICBhc3NvY2lhdGVkKSBtYWtlIHN1cmUgdGhhdCB3ZSBhcmUgaW4gc3luYyB3aXRoIHRoZQorCQkJICAgQVAgaW4gcmVnYXJkIG9mIFBTTSBtb2RlLiAqLworCQkJcmV0ID0gd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX0FDVElWRV9NT0RFLAorCQkJCQkJIGZhbHNlKTsKIAkJCXdsLT5wc21fZW50cnlfcmV0cnkgPSAwOwotCQkJKmJlYWNvbl9sb3NzID0gdHJ1ZTsKIAkJfQogCQlicmVhazsKIAljYXNlIEVWRU5UX0VOVEVSX1BPV0VSX1NBVkVfU1VDQ0VTUzoKIAkJd2wtPnBzbV9lbnRyeV9yZXRyeSA9IDA7CisKKwkJLyogZW5hYmxlIGJlYWNvbiBmaWx0ZXJpbmcgKi8KKwkJcmV0ID0gd2wxMjcxX2FjeF9iZWFjb25fZmlsdGVyX29wdCh3bCwgdHJ1ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisKKwkJLyogZW5hYmxlIGJlYWNvbiBlYXJseSB0ZXJtaW5hdGlvbiAqLworCQlyZXQgPSB3bDEyNzFfYWN4X2JldF9lbmFibGUod2wsIHRydWUpOworCQlpZiAocmV0IDwgMCkKKwkJCWJyZWFrOworCisJCS8qIGdvIHRvIGV4dHJlbWVseSBsb3cgcG93ZXIgbW9kZSAqLworCQl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKIAkJYnJlYWs7CiAJY2FzZSBFVkVOVF9FWElUX1BPV0VSX1NBVkVfRkFJTDoKLQkJd2wxMjcxX2luZm8oIlBTTSBleGl0IGZhaWxlZCIpOworCQl3bDEyNzFfZGVidWcoREVCVUdfUFNNLCAiUFNNIGV4aXQgZmFpbGVkIik7CisKKwkJaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTSwgJndsLT5mbGFncykpIHsKKwkJCXdsLT5wc21fZW50cnlfcmV0cnkgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBtYWtlIHN1cmUgdGhlIGZpcm13YXJlIGdvZXMgdG8gYWN0aXZlIG1vZGUgLSB0aGUgZnJhbWUgdG8KKwkJICAgYmUgc2VudCBuZXh0IHdpbGwgaW5kaWNhdGUgdG8gdGhlIEFQLCB0aGF0IHdlIGFyZSBhY3RpdmUuICovCisJCXJldCA9IHdsMTI3MV9wc19zZXRfbW9kZSh3bCwgU1RBVElPTl9BQ1RJVkVfTU9ERSwKKwkJCQkJIGZhbHNlKTsKIAkJYnJlYWs7CiAJY2FzZSBFVkVOVF9FWElUX1BPV0VSX1NBVkVfU1VDQ0VTUzoKIAlkZWZhdWx0OgpAQCAtMTM2LDcgKzE3Myw4IEBACiAJICogZmlsdGVyaW5nKSBpcyBlbmFibGVkLiBXaXRob3V0IFBTTSwgdGhlIHN0YWNrIHdpbGwgcmVjZWl2ZSBhbGwKIAkgKiBiZWFjb25zIGFuZCBjYW4gZGV0ZWN0IGJlYWNvbiBsb3NzIGJ5IGl0c2VsZi4KIAkgKi8KLQlpZiAodmVjdG9yICYgQlNTX0xPU0VfRVZFTlRfSUQgJiYgd2wtPnBzbSkgeworCWlmICh2ZWN0b3IgJiBCU1NfTE9TRV9FVkVOVF9JRCAmJgorCSAgICB0ZXN0X2JpdChXTDEyNzFfRkxBR19QU00sICZ3bC0+ZmxhZ3MpKSB7CiAJCXdsMTI3MV9kZWJ1ZyhERUJVR19FVkVOVCwgIkJTU19MT1NFX0VWRU5UIik7CiAKIAkJLyogaW5kaWNhdGUgdG8gdGhlIHN0YWNrLCB0aGF0IGJlYWNvbnMgaGF2ZSBiZWVuIGxvc3QgKi8KQEAgLTE1MCw3ICsxODgsNyBAQAogCQkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAoYmVhY29uX2xvc3MpIHsKKwlpZiAod2wtPnZpZiAmJiBiZWFjb25fbG9zcykgewogCQkvKiBPYnZpb3VzbHksIGl0J3MgZGFuZ2Vyb3VzIHRvIHJlbGVhc2UgdGhlIG11dGV4IHdoaWxlCiAJCSAgIHdlIGFyZSBob2xkaW5nIG1hbnkgb2YgdGhlIHZhcmlhYmxlcyBpbiB0aGUgd2wgc3RydWN0LgogCQkgICBUaGF0J3Mgd2h5IGl0J3MgZG9uZSBsYXN0IGluIHRoZSBmdW5jdGlvbiwgYW5kIGNhcmUgbXVzdApAQCAtMTc3LDE0ICsyMTUsMTQgQEAKIAogdm9pZCB3bDEyNzFfZXZlbnRfbWJveF9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpCiB7Ci0Jd2wtPm1ib3hfcHRyWzBdID0gd2wxMjcxX3NwaV9yZWFkMzIod2wsIFJFR19FVkVOVF9NQUlMQk9YX1BUUik7CisJd2wtPm1ib3hfcHRyWzBdID0gd2wxMjcxX3JlYWQzMih3bCwgUkVHX0VWRU5UX01BSUxCT1hfUFRSKTsKIAl3bC0+bWJveF9wdHJbMV0gPSB3bC0+bWJveF9wdHJbMF0gKyBzaXplb2Yoc3RydWN0IGV2ZW50X21haWxib3gpOwogCiAJd2wxMjcxX2RlYnVnKERFQlVHX0VWRU5ULCAiTUJPWCBwdHJzOiAweCV4IDB4JXgiLAogCQkgICAgIHdsLT5tYm94X3B0clswXSwgd2wtPm1ib3hfcHRyWzFdKTsKIH0KIAotaW50IHdsMTI3MV9ldmVudF9oYW5kbGUoc3RydWN0IHdsMTI3MSAqd2wsIHU4IG1ib3hfbnVtLCBib29sIGRvX2FjaykKK2ludCB3bDEyNzFfZXZlbnRfaGFuZGxlKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBtYm94X251bSkKIHsKIAlzdHJ1Y3QgZXZlbnRfbWFpbGJveCBtYm94OwogCWludCByZXQ7CkBAIC0xOTUsOCArMjMzLDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBmaXJzdCB3ZSByZWFkIHRoZSBtYm94IGRlc2NyaXB0b3IgKi8KLQl3bDEyNzFfc3BpX3JlYWQod2wsIHdsLT5tYm94X3B0clttYm94X251bV0sICZtYm94LAotCQkJc2l6ZW9mKHN0cnVjdCBldmVudF9tYWlsYm94KSwgZmFsc2UpOworCXdsMTI3MV9yZWFkKHdsLCB3bC0+bWJveF9wdHJbbWJveF9udW1dLCAmbWJveCwKKwkJICAgIHNpemVvZihzdHJ1Y3QgZXZlbnRfbWFpbGJveCksIGZhbHNlKTsKIAogCS8qIHByb2Nlc3MgdGhlIGRlc2NyaXB0b3IgKi8KIAlyZXQgPSB3bDEyNzFfZXZlbnRfcHJvY2Vzcyh3bCwgJm1ib3gpOwpAQCAtMjA0LDkgKzI0Miw3IEBACiAJCXJldHVybiByZXQ7CiAKIAkvKiB0aGVuIHdlIGxldCB0aGUgZmlybXdhcmUga25vdyBpdCBjYW4gZ28gb24uLi4qLwotCWlmIChkb19hY2spCi0JCXdsMTI3MV9zcGlfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfVFJJRywKLQkJCQkgICBJTlRSX1RSSUdfRVZFTlRfQUNLKTsKKwl3bDEyNzFfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfVFJJRywgSU5UUl9UUklHX0VWRU5UX0FDSyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZXZlbnQuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfZXZlbnQuaAppbmRleCA0ZTNmNTVlLi4yNzhmOTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2V2ZW50LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9ldmVudC5oCkBAIC0xMTIsNiArMTEyLDYgQEAKIAogaW50IHdsMTI3MV9ldmVudF91bm1hc2soc3RydWN0IHdsMTI3MSAqd2wpOwogdm9pZCB3bDEyNzFfZXZlbnRfbWJveF9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpOwotaW50IHdsMTI3MV9ldmVudF9oYW5kbGUoc3RydWN0IHdsMTI3MSAqd2wsIHU4IG1ib3gsIGJvb2wgZG9fYWNrKTsKK2ludCB3bDEyNzFfZXZlbnRfaGFuZGxlKHN0cnVjdCB3bDEyNzEgKndsLCB1OCBtYm94KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2luaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfaW5pdC5jCmluZGV4IDExMjQ5YjQuLjg2YzMwYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfaW5pdC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfaW5pdC5jCkBAIC00OSw3ICs0OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd2wxMjcxX2luaXRfdGVtcGxhdGVzX2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK2ludCB3bDEyNzFfaW5pdF90ZW1wbGF0ZXNfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKQogewogCWludCByZXQ7CiAKQEAgLTExMyw3ICsxMTMsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdsMTI3MV9pbml0X3BoeV9jb25maWcoc3RydWN0IHdsMTI3MSAqd2wpCitpbnQgd2wxMjcxX2luaXRfcGh5X2NvbmZpZyhzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAlpbnQgcmV0OwogCkBAIC0xNTYsNyArMTU2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3bDEyNzFfaW5pdF9wdGEoc3RydWN0IHdsMTI3MSAqd2wpCitpbnQgd2wxMjcxX2luaXRfcHRhKHN0cnVjdCB3bDEyNzEgKndsKQogewogCWludCByZXQ7CiAKQEAgLTE3MSw3ICsxNzEsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdsMTI3MV9pbml0X2VuZXJneV9kZXRlY3Rpb24oc3RydWN0IHdsMTI3MSAqd2wpCitpbnQgd2wxMjcxX2luaXRfZW5lcmd5X2RldGVjdGlvbihzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKIAlpbnQgcmV0OwogCkBAIC0xOTUsNyArMTk1LDkgQEAKIAogaW50IHdsMTI3MV9od19pbml0KHN0cnVjdCB3bDEyNzEgKndsKQogewotCWludCByZXQ7CisJc3RydWN0IGNvbmZfdHhfYWNfY2F0ZWdvcnkgKmNvbmZfYWM7CisJc3RydWN0IGNvbmZfdHhfdGlkICpjb25mX3RpZDsKKwlpbnQgcmV0LCBpOwogCiAJcmV0ID0gd2wxMjcxX2NtZF9nZW5lcmFsX3Bhcm1zKHdsKTsKIAlpZiAocmV0IDwgMCkKQEAgLTIyOSw2ICsyMzEsMTAgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXRfZnJlZV9tZW1tYXA7CiAKKwlyZXQgPSB3bDEyNzFfYWN4X2Rjb19pdHJpbV9wYXJhbXMod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKwogCS8qIEluaXRpYWxpemUgY29ubmVjdGlvbiBtb25pdG9yaW5nIHRocmVzaG9sZHMgKi8KIAlyZXQgPSB3bDEyNzFfYWN4X2Nvbm5fbW9uaXRfcGFyYW1zKHdsKTsKIAlpZiAocmV0IDwgMCkKQEAgLTI3MCwyMiArMjc2LDM2IEBACiAJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwogCiAJLyogRGVmYXVsdCBUSUQgY29uZmlndXJhdGlvbiAqLwotCXJldCA9IHdsMTI3MV9hY3hfdGlkX2NmZyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCWZvciAoaSA9IDA7IGkgPCB3bC0+Y29uZi50eC50aWRfY29uZl9jb3VudDsgaSsrKSB7CisJCWNvbmZfdGlkID0gJndsLT5jb25mLnR4LnRpZF9jb25mW2ldOworCQlyZXQgPSB3bDEyNzFfYWN4X3RpZF9jZmcod2wsIGNvbmZfdGlkLT5xdWV1ZV9pZCwKKwkJCQkJIGNvbmZfdGlkLT5jaGFubmVsX3R5cGUsCisJCQkJCSBjb25mX3RpZC0+dHNpZCwKKwkJCQkJIGNvbmZfdGlkLT5wc19zY2hlbWUsCisJCQkJCSBjb25mX3RpZC0+YWNrX3BvbGljeSwKKwkJCQkJIGNvbmZfdGlkLT5hcHNkX2NvbmZbMF0sCisJCQkJCSBjb25mX3RpZC0+YXBzZF9jb25mWzFdKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKwl9CiAKIAkvKiBEZWZhdWx0IEFDIGNvbmZpZ3VyYXRpb24gKi8KLQlyZXQgPSB3bDEyNzFfYWN4X2FjX2NmZyh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCWZvciAoaSA9IDA7IGkgPCB3bC0+Y29uZi50eC5hY19jb25mX2NvdW50OyBpKyspIHsKKwkJY29uZl9hYyA9ICZ3bC0+Y29uZi50eC5hY19jb25mW2ldOworCQlyZXQgPSB3bDEyNzFfYWN4X2FjX2NmZyh3bCwgY29uZl9hYy0+YWMsIGNvbmZfYWMtPmN3X21pbiwKKwkJCQkJY29uZl9hYy0+Y3dfbWF4LCBjb25mX2FjLT5haWZzbiwKKwkJCQkJY29uZl9hYy0+dHhfb3BfbGltaXQpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCX0KIAogCS8qIENvbmZpZ3VyZSBUWCByYXRlIGNsYXNzZXMgKi8KLQlyZXQgPSB3bDEyNzFfYWN4X3JhdGVfcG9saWNpZXMod2wsIENPTkZfVFhfUkFURV9NQVNLX0FMTCk7CisJcmV0ID0gd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHdsKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXRfZnJlZV9tZW1tYXA7CiAKIAkvKiBFbmFibGUgZGF0YSBwYXRoICovCi0JcmV0ID0gd2wxMjcxX2NtZF9kYXRhX3BhdGgod2wsIHdsLT5jaGFubmVsLCAxKTsKKwlyZXQgPSB3bDEyNzFfY21kX2RhdGFfcGF0aCh3bCwgMSk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOwogCkBAIC0yOTksOCArMzE5LDggQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXRfZnJlZV9tZW1tYXA7CiAKLQkvKiBDb25maWd1cmUgc21hcnQgcmVmbGV4ICovCi0JcmV0ID0gd2wxMjcxX2FjeF9zbWFydF9yZWZsZXgod2wpOworCS8qIGNvbmZpZ3VyZSBQTSAqLworCXJldCA9IHdsMTI3MV9hY3hfcG1fY29uZmlnKHdsKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBvdXRfZnJlZV9tZW1tYXA7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfaW5pdC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9pbml0LmgKaW5kZXggOTMwNjc3Zi4uYmMyNmY4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9pbml0LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9pbml0LmgKQEAgLTI3LDYgKzI3LDEwIEBACiAjaW5jbHVkZSAid2wxMjcxLmgiCiAKIGludCB3bDEyNzFfaHdfaW5pdF9wb3dlcl9hdXRoKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfaW5pdF90ZW1wbGF0ZXNfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfaW5pdF9waHlfY29uZmlnKHN0cnVjdCB3bDEyNzEgKndsKTsKK2ludCB3bDEyNzFfaW5pdF9wdGEoc3RydWN0IHdsMTI3MSAqd2wpOworaW50IHdsMTI3MV9pbml0X2VuZXJneV9kZXRlY3Rpb24oc3RydWN0IHdsMTI3MSAqd2wpOwogaW50IHdsMTI3MV9od19pbml0KHN0cnVjdCB3bDEyNzEgKndsKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2lvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2lvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNkOTRkNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfaW8uYwpAQCAtMCwwICsxLDIxMyBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHdsMTI3MQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDEwIE5va2lhIENvcnBvcmF0aW9uCisgKgorICogQ29udGFjdDogTHVjaWFubyBDb2VsaG8gPGx1Y2lhbm8uY29lbGhvQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyAqIDAyMTEwLTEzMDEgVVNBCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmM3Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpL3NwaS5oPgorCisjaW5jbHVkZSAid2wxMjcxLmgiCisjaW5jbHVkZSAid2wxMnh4XzgwMjExLmgiCisjaW5jbHVkZSAid2wxMjcxX3NwaS5oIgorI2luY2x1ZGUgIndsMTI3MV9pby5oIgorCitzdGF0aWMgaW50IHdsMTI3MV90cmFuc2xhdGVfYWRkcihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpCit7CisJLyoKKwkgKiBUbyB0cmFuc2xhdGUsIGZpcnN0IGNoZWNrIHRvIHdoaWNoIHdpbmRvdyBvZiBhZGRyZXNzZXMgdGhlCisJICogcGFydGljdWxhciBhZGRyZXNzIGJlbG9uZ3MuIFRoZW4gc3VidHJhY3QgdGhlIHN0YXJ0aW5nIGFkZHJlc3MKKwkgKiBvZiB0aGF0IHdpbmRvdyBmcm9tIHRoZSBhZGRyZXNzLiBUaGVuLCBhZGQgb2Zmc2V0IG9mIHRoZQorCSAqIHRyYW5zbGF0ZWQgcmVnaW9uLgorCSAqCisJICogVGhlIHRyYW5zbGF0ZWQgcmVnaW9ucyBvY2N1ciBuZXh0IHRvIGVhY2ggb3RoZXIgaW4gcGh5c2ljYWwgZGV2aWNlCisJICogbWVtb3J5LCBzbyBqdXN0IGFkZCB0aGUgc2l6ZXMgb2YgdGhlIHByZWNlZWRpbmcgYWRkcmVzcyByZWdpb25zIHRvCisJICogZ2V0IHRoZSBvZmZzZXQgdG8gdGhlIG5ldyByZWdpb24uCisJICoKKwkgKiBDdXJyZW50bHksIG9ubHkgdGhlIHR3byBmaXJzdCByZWdpb25zIGFyZSBhZGRyZXNzZWQsIGFuZCB0aGUKKwkgKiBhc3N1bXB0aW9uIGlzIHRoYXQgYWxsIGFkZHJlc3NlcyB3aWxsIGZhbGwgaW50byBlaXRoZXIgb2YgdGhvc2UKKwkgKiB0d28uCisJICovCisJaWYgKChhZGRyID49IHdsLT5wYXJ0LnJlZy5zdGFydCkgJiYKKwkgICAgKGFkZHIgPCB3bC0+cGFydC5yZWcuc3RhcnQgKyB3bC0+cGFydC5yZWcuc2l6ZSkpCisJCXJldHVybiBhZGRyIC0gd2wtPnBhcnQucmVnLnN0YXJ0ICsgd2wtPnBhcnQubWVtLnNpemU7CisJZWxzZQorCQlyZXR1cm4gYWRkciAtIHdsLT5wYXJ0Lm1lbS5zdGFydDsKK30KKworLyogU2V0IHRoZSBTUEkgcGFydGl0aW9ucyB0byBhY2Nlc3MgdGhlIGNoaXAgYWRkcmVzc2VzCisgKgorICogVG8gc2ltcGxpZnkgZHJpdmVyIGNvZGUsIGEgZml4ZWQgKHZpcnR1YWwpIG1lbW9yeSBtYXAgaXMgZGVmaW5lZCBmb3IKKyAqIHJlZ2lzdGVyIGFuZCBtZW1vcnkgYWRkcmVzc2VzLiBCZWNhdXNlIGluIHRoZSBjaGlwc2V0LCBpbiBkaWZmZXJlbnQgc3RhZ2VzCisgKiBvZiBvcGVyYXRpb24sIHRob3NlIGFkZHJlc3NlcyB3aWxsIG1vdmUgYXJvdW5kLCBhbiBhZGRyZXNzIHRyYW5zbGF0aW9uCisgKiBtZWNoYW5pc20gaXMgcmVxdWlyZWQuCisgKgorICogVGhlcmUgYXJlIGZvdXIgcGFydGl0aW9ucyAodGhyZWUgbWVtb3J5IGFuZCBvbmUgcmVnaXN0ZXIgcGFydGl0aW9uKSwKKyAqIHdoaWNoIGFyZSBtYXBwZWQgdG8gdHdvIGRpZmZlcmVudCBhcmVhcyBvZiB0aGUgaGFyZHdhcmUgbWVtb3J5LgorICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWaXJ0dWFsIGFkZHJlc3MKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlCisgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKy0tLS0rLS0+IG1lbS5zdGFydAorICogICAgICAgICAgUGh5c2ljYWwgYWRkcmVzcyAgICAuLi4gICB8ICAgIHwKKyAqICAgICAgICAgICAgICAgc3BhY2UgICAgICAgLi4uICAgICAgfCAgICB8IFtQQVJUXzBdCisgKiAgICAgICAgICAgICAgICAgICAgICAgIC4uLiAgICAgICAgIHwgICAgfAorICogIDAwMDAwMDAwICA8LS0rLS0tLSsuLi4gICAgICAgICAuLi4rLS0tLSstLT4gbWVtLnN0YXJ0ICsgbWVtLnNpemUKKyAqICAgICAgICAgICAgICAgfCAgICB8ICAgICAgICAgLi4uICAgfCAgICB8CisgKiAgICAgICAgICAgICAgIHxNRU0gfCAgICAgIC4uLiAgICAgIHwgICAgfAorICogICAgICAgICAgICAgICB8ICAgIHwgICAuLi4gICAgICAgICB8ICAgIHwKKyAqICBtZW0uc2l6ZSAgPC0tKy0tLS0rLi4uICAgICAgICAgICAgfCAgICB8IHt1bnVzZWQgYXJlYSkKKyAqICAgICAgICAgICAgICAgfCAgICB8ICAgLi4uICAgICAgICAgfCAgICB8CisgKiAgICAgICAgICAgICAgIHxSRUcgfCAgICAgIC4uLiAgICAgIHwgICAgfAorICogIG1lbS5zaXplICAgICB8ICAgIHwgICAgICAgICAuLi4gICB8ICAgIHwKKyAqICAgICAgKyAgICAgPC0tKy0tLS0rLi4uICAgICAgICAgLi4uKy0tLS0rLS0+IHJlZy5zdGFydAorICogIHJlZy5zaXplICAgICB8ICAgIHwgICAuLi4gICAgICAgICB8ICAgIHwKKyAqICAgICAgICAgICAgICAgfE1FTTJ8ICAgICAgLi4uICAgICAgfCAgICB8IFtQQVJUXzFdCisgKiAgICAgICAgICAgICAgIHwgICAgfCAgICAgICAgIC4uLiAgIHwgICAgfAorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4rLS0tLSstLT4gcmVnLnN0YXJ0ICsgcmVnLnNpemUKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8CisgKgorICovCitpbnQgd2wxMjcxX3NldF9wYXJ0aXRpb24oc3RydWN0IHdsMTI3MSAqd2wsCisJCQkgc3RydWN0IHdsMTI3MV9wYXJ0aXRpb25fc2V0ICpwKQoreworCS8qIGNvcHkgcGFydGl0aW9uIGluZm8gKi8KKwltZW1jcHkoJndsLT5wYXJ0LCBwLCBzaXplb2YoKnApKTsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19TUEksICJtZW1fc3RhcnQgJTA4WCBtZW1fc2l6ZSAlMDhYIiwKKwkJICAgICBwLT5tZW0uc3RhcnQsIHAtPm1lbS5zaXplKTsKKwl3bDEyNzFfZGVidWcoREVCVUdfU1BJLCAicmVnX3N0YXJ0ICUwOFggcmVnX3NpemUgJTA4WCIsCisJCSAgICAgcC0+cmVnLnN0YXJ0LCBwLT5yZWcuc2l6ZSk7CisJd2wxMjcxX2RlYnVnKERFQlVHX1NQSSwgIm1lbTJfc3RhcnQgJTA4WCBtZW0yX3NpemUgJTA4WCIsCisJCSAgICAgcC0+bWVtMi5zdGFydCwgcC0+bWVtMi5zaXplKTsKKwl3bDEyNzFfZGVidWcoREVCVUdfU1BJLCAibWVtM19zdGFydCAlMDhYIG1lbTNfc2l6ZSAlMDhYIiwKKwkJICAgICBwLT5tZW0zLnN0YXJ0LCBwLT5tZW0zLnNpemUpOworCisJLyogd3JpdGUgcGFydGl0aW9uIGluZm8gdG8gdGhlIGNoaXBzZXQgKi8KKwl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIEhXX1BBUlQwX1NUQVJUX0FERFIsIHAtPm1lbS5zdGFydCk7CisJd2wxMjcxX3Jhd193cml0ZTMyKHdsLCBIV19QQVJUMF9TSVpFX0FERFIsIHAtPm1lbS5zaXplKTsKKwl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIEhXX1BBUlQxX1NUQVJUX0FERFIsIHAtPnJlZy5zdGFydCk7CisJd2wxMjcxX3Jhd193cml0ZTMyKHdsLCBIV19QQVJUMV9TSVpFX0FERFIsIHAtPnJlZy5zaXplKTsKKwl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIEhXX1BBUlQyX1NUQVJUX0FERFIsIHAtPm1lbTIuc3RhcnQpOworCXdsMTI3MV9yYXdfd3JpdGUzMih3bCwgSFdfUEFSVDJfU0laRV9BRERSLCBwLT5tZW0yLnNpemUpOworCXdsMTI3MV9yYXdfd3JpdGUzMih3bCwgSFdfUEFSVDNfU1RBUlRfQUREUiwgcC0+bWVtMy5zdGFydCk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCB3bDEyNzFfaW9fcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJd2wxMjcxX3NwaV9yZXNldCh3bCk7Cit9CisKK3ZvaWQgd2wxMjcxX2lvX2luaXQoc3RydWN0IHdsMTI3MSAqd2wpCit7CisJd2wxMjcxX3NwaV9pbml0KHdsKTsKK30KKwordm9pZCB3bDEyNzFfcmF3X3dyaXRlKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLAorCQkgICAgICBzaXplX3QgbGVuLCBib29sIGZpeGVkKQoreworCXdsMTI3MV9zcGlfcmF3X3dyaXRlKHdsLCBhZGRyLCBidWYsIGxlbiwgZml4ZWQpOworfQorCit2b2lkIHdsMTI3MV9yYXdfcmVhZChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKKwkJICAgICBzaXplX3QgbGVuLCBib29sIGZpeGVkKQoreworCXdsMTI3MV9zcGlfcmF3X3JlYWQod2wsIGFkZHIsIGJ1ZiwgbGVuLCBmaXhlZCk7Cit9CisKK3ZvaWQgd2wxMjcxX3JlYWQoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4sCisJCSAgICAgYm9vbCBmaXhlZCkKK3sKKwlpbnQgcGh5c2ljYWw7CisKKwlwaHlzaWNhbCA9IHdsMTI3MV90cmFuc2xhdGVfYWRkcih3bCwgYWRkcik7CisKKwl3bDEyNzFfc3BpX3Jhd19yZWFkKHdsLCBwaHlzaWNhbCwgYnVmLCBsZW4sIGZpeGVkKTsKK30KKwordm9pZCB3bDEyNzFfd3JpdGUoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4sCisJCSAgYm9vbCBmaXhlZCkKK3sKKwlpbnQgcGh5c2ljYWw7CisKKwlwaHlzaWNhbCA9IHdsMTI3MV90cmFuc2xhdGVfYWRkcih3bCwgYWRkcik7CisKKwl3bDEyNzFfc3BpX3Jhd193cml0ZSh3bCwgcGh5c2ljYWwsIGJ1ZiwgbGVuLCBmaXhlZCk7Cit9CisKK3UzMiB3bDEyNzFfcmVhZDMyKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkcikKK3sKKwlyZXR1cm4gd2wxMjcxX3Jhd19yZWFkMzIod2wsIHdsMTI3MV90cmFuc2xhdGVfYWRkcih3bCwgYWRkcikpOworfQorCit2b2lkIHdsMTI3MV93cml0ZTMyKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdTMyIHZhbCkKK3sKKwl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIHdsMTI3MV90cmFuc2xhdGVfYWRkcih3bCwgYWRkciksIHZhbCk7Cit9CisKK3ZvaWQgd2wxMjcxX3RvcF9yZWdfd3JpdGUoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB1MTYgdmFsKQoreworCS8qIHdyaXRlIGFkZHJlc3MgPj4gMSArIDB4MzAwMDAgdG8gT0NQX1BPUl9DVFIgKi8KKwlhZGRyID0gKGFkZHIgPj4gMSkgKyAweDMwMDAwOworCXdsMTI3MV93cml0ZTMyKHdsLCBPQ1BfUE9SX0NUUiwgYWRkcik7CisKKwkvKiB3cml0ZSB2YWx1ZSB0byBPQ1BfUE9SX1dEQVRBICovCisJd2wxMjcxX3dyaXRlMzIod2wsIE9DUF9EQVRBX1dSSVRFLCB2YWwpOworCisJLyogd3JpdGUgMSB0byBPQ1BfQ01EICovCisJd2wxMjcxX3dyaXRlMzIod2wsIE9DUF9DTUQsIE9DUF9DTURfV1JJVEUpOworfQorCit1MTYgd2wxMjcxX3RvcF9yZWdfcmVhZChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpCit7CisJdTMyIHZhbDsKKwlpbnQgdGltZW91dCA9IE9DUF9DTURfTE9PUDsKKworCS8qIHdyaXRlIGFkZHJlc3MgPj4gMSArIDB4MzAwMDAgdG8gT0NQX1BPUl9DVFIgKi8KKwlhZGRyID0gKGFkZHIgPj4gMSkgKyAweDMwMDAwOworCXdsMTI3MV93cml0ZTMyKHdsLCBPQ1BfUE9SX0NUUiwgYWRkcik7CisKKwkvKiB3cml0ZSAyIHRvIE9DUF9DTUQgKi8KKwl3bDEyNzFfd3JpdGUzMih3bCwgT0NQX0NNRCwgT0NQX0NNRF9SRUFEKTsKKworCS8qIHBvbGwgZm9yIGRhdGEgcmVhZHkgKi8KKwlkbyB7CisJCXZhbCA9IHdsMTI3MV9yZWFkMzIod2wsIE9DUF9EQVRBX1JFQUQpOworCX0gd2hpbGUgKCEodmFsICYgT0NQX1JFQURZX01BU0spICYmIC0tdGltZW91dCk7CisKKwlpZiAoIXRpbWVvdXQpIHsKKwkJd2wxMjcxX3dhcm5pbmcoIlRvcCByZWdpc3RlciBhY2Nlc3MgdGltZWQgb3V0LiIpOworCQlyZXR1cm4gMHhmZmZmOworCX0KKworCS8qIGNoZWNrIGRhdGEgc3RhdHVzIGFuZCByZXR1cm4gaWYgT0sgKi8KKwlpZiAoKHZhbCAmIE9DUF9TVEFUVVNfTUFTSykgPT0gT0NQX1NUQVRVU19PSykKKwkJcmV0dXJuIHZhbCAmIDB4ZmZmZjsKKwllbHNlIHsKKwkJd2wxMjcxX3dhcm5pbmcoIlRvcCByZWdpc3RlciBhY2Nlc3MgcmV0dXJuZWQgZXJyb3IuIik7CisJCXJldHVybiAweGZmZmY7CisJfQorfQorCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2lvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE5YTBiMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfaW8uaApAQCAtMCwwICsxLDY4IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2Ygd2wxMjcxCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDkgVGV4YXMgSW5zdHJ1bWVudHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbgorICoKKyAqIENvbnRhY3Q6IEx1Y2lhbm8gQ29lbGhvIDxsdWNpYW5vLmNvZWxob0Bub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxIFVTQQorICoKKyAqLworCisjaWZuZGVmIF9fV0wxMjcxX0lPX0hfXworI2RlZmluZSBfX1dMMTI3MV9JT19IX18KKworc3RydWN0IHdsMTI3MTsKKwordm9pZCB3bDEyNzFfaW9fcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wpOwordm9pZCB3bDEyNzFfaW9faW5pdChzdHJ1Y3Qgd2wxMjcxICp3bCk7CisKKy8qIFJhdyB0YXJnZXQgSU8sIGFkZHJlc3MgaXMgbm90IHRyYW5zbGF0ZWQgKi8KK3ZvaWQgd2wxMjcxX3Jhd193cml0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKKwkJICAgICAgc2l6ZV90IGxlbiwgYm9vbCBmaXhlZCk7Cit2b2lkIHdsMTI3MV9yYXdfcmVhZChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKKwkJICAgICBzaXplX3QgbGVuLCBib29sIGZpeGVkKTsKKworLyogVHJhbnNsYXRlZCB0YXJnZXQgSU8gKi8KK3ZvaWQgd2wxMjcxX3JlYWQoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4sCisJCSAgICAgYm9vbCBmaXhlZCk7Cit2b2lkIHdsMTI3MV93cml0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwKKwkJICAgICAgYm9vbCBmaXhlZCk7Cit1MzIgd2wxMjcxX3JlYWQzMihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpOwordm9pZCB3bDEyNzFfd3JpdGUzMihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHUzMiB2YWwpOworCisvKiBUb3AgUmVnaXN0ZXIgSU8gKi8KK3ZvaWQgd2wxMjcxX3RvcF9yZWdfd3JpdGUoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB1MTYgdmFsKTsKK3UxNiB3bDEyNzFfdG9wX3JlZ19yZWFkKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkcik7CisKK2ludCB3bDEyNzFfc2V0X3BhcnRpdGlvbihzdHJ1Y3Qgd2wxMjcxICp3bCwKKwkJCSBzdHJ1Y3Qgd2wxMjcxX3BhcnRpdGlvbl9zZXQgKnApOworCitzdGF0aWMgaW5saW5lIHUzMiB3bDEyNzFfcmF3X3JlYWQzMihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpCit7CisJd2wxMjcxX3Jhd19yZWFkKHdsLCBhZGRyLCAmd2wtPmJ1ZmZlcl8zMiwKKwkJCSAgICBzaXplb2Yod2wtPmJ1ZmZlcl8zMiksIGZhbHNlKTsKKworCXJldHVybiB3bC0+YnVmZmVyXzMyOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd2wxMjcxX3Jhd193cml0ZTMyKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdTMyIHZhbCkKK3sKKwl3bC0+YnVmZmVyXzMyID0gdmFsOworCXdsMTI3MV9yYXdfd3JpdGUod2wsIGFkZHIsICZ3bC0+YnVmZmVyXzMyLAorCQkJICAgICBzaXplb2Yod2wtPmJ1ZmZlcl8zMiksIGZhbHNlKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX21haW4uYwppbmRleCBiNjJjMDBmLi4yYTg2NGIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX21haW4uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX21haW4uYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KICAqCiAgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgogICoKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKICNpbmNsdWRlICJ3bDEyNzFfcmVnLmgiCiAjaW5jbHVkZSAid2wxMjcxX3NwaS5oIgorI2luY2x1ZGUgIndsMTI3MV9pby5oIgogI2luY2x1ZGUgIndsMTI3MV9ldmVudC5oIgogI2luY2x1ZGUgIndsMTI3MV90eC5oIgogI2luY2x1ZGUgIndsMTI3MV9yeC5oIgpAQCAtNDYsNiArNDcsOSBAQAogI2luY2x1ZGUgIndsMTI3MV9kZWJ1Z2ZzLmgiCiAjaW5jbHVkZSAid2wxMjcxX2NtZC5oIgogI2luY2x1ZGUgIndsMTI3MV9ib290LmgiCisjaW5jbHVkZSAid2wxMjcxX3Rlc3Rtb2RlLmgiCisKKyNkZWZpbmUgV0wxMjcxX0JPT1RfUkVUUklFUyAzCiAKIHN0YXRpYyBzdHJ1Y3QgY29uZl9kcnZfc2V0dGluZ3MgZGVmYXVsdF9jb25mID0gewogCS5zZyA9IHsKQEAgLTY3LDE2ICs3MSwxNyBAQAogCQkucHNfcG9sbF90aW1lb3V0ICAgICAgICAgICAgID0gMTUsCiAJCS51cHNkX3RpbWVvdXQgICAgICAgICAgICAgICAgPSAxNSwKIAkJLnJ0c190aHJlc2hvbGQgICAgICAgICAgICAgICA9IDIzNDcsCi0JCS5yeF9jY2FfdGhyZXNob2xkICAgICAgICAgICAgPSAweEZGRUYsCi0JCS5pcnFfYmxrX3RocmVzaG9sZCAgICAgICAgICAgPSAwLAotCQkuaXJxX3BrdF90aHJlc2hvbGQgICAgICAgICAgID0gVVNIT1JUX01BWCwKLQkJLmlycV90aW1lb3V0ICAgICAgICAgICAgICAgICA9IDUsCisJCS5yeF9jY2FfdGhyZXNob2xkICAgICAgICAgICAgPSAwLAorCQkuaXJxX2Jsa190aHJlc2hvbGQgICAgICAgICAgID0gMHhGRkZGLAorCQkuaXJxX3BrdF90aHJlc2hvbGQgICAgICAgICAgID0gMCwKKwkJLmlycV90aW1lb3V0ICAgICAgICAgICAgICAgICA9IDYwMCwKIAkJLnF1ZXVlX3R5cGUgICAgICAgICAgICAgICAgICA9IENPTkZfUlhfUVVFVUVfVFlQRV9MT1dfUFJJT1JJVFksCiAJfSwKIAkudHggPSB7CiAJCS50eF9lbmVyZ3lfZGV0ZWN0aW9uICAgICAgICAgPSAwLAogCQkucmNfY29uZiAgICAgICAgICAgICAgICAgICAgID0gewotCQkJLmVuYWJsZWRfcmF0ZXMgICAgICAgPSBDT05GX1RYX1JBVEVfTUFTS19VTlNQRUNJRklFRCwKKwkJCS5lbmFibGVkX3JhdGVzICAgICAgID0gQ09ORl9IV19CSVRfUkFURV8xTUJQUyB8CisJCQkJCSAgICAgICBDT05GX0hXX0JJVF9SQVRFXzJNQlBTLAogCQkJLnNob3J0X3JldHJ5X2xpbWl0ICAgPSAxMCwKIAkJCS5sb25nX3JldHJ5X2xpbWl0ICAgID0gMTAsCiAJCQkuYWZsYWdzICAgICAgICAgICAgICA9IDAKQEAgLTE3Miw4ICsxNzcsOCBAQAogCQkJfQogCQl9LAogCQkuZnJhZ190aHJlc2hvbGQgICAgICAgICAgICAgID0gSUVFRTgwMjExX01BWF9GUkFHX1RIUkVTSE9MRCwKLQkJLnR4X2NvbXBsX3RpbWVvdXQgICAgICAgICAgICA9IDUsCi0JCS50eF9jb21wbF90aHJlc2hvbGQgICAgICAgICAgPSA1CisJCS50eF9jb21wbF90aW1lb3V0ICAgICAgICAgICAgPSA3MDAsCisJCS50eF9jb21wbF90aHJlc2hvbGQgICAgICAgICAgPSA0CiAJfSwKIAkuY29ubiA9IHsKIAkJLndha2VfdXBfZXZlbnQgICAgICAgICAgICAgICA9IENPTkZfV0FLRV9VUF9FVkVOVF9EVElNLApAQCAtMTg2LDEyICsxOTEsMTIgQEAKIAkJCQkucnVsZSAgICAgICAgPSBDT05GX0JDTl9SVUxFX1BBU1NfT05fQVBQRUFSQU5DRSwKIAkJCX0KIAkJfSwKLQkJLnN5bmNoX2ZhaWxfdGhvbGQgICAgICAgICAgICA9IDUsCisJCS5zeW5jaF9mYWlsX3Rob2xkICAgICAgICAgICAgPSAxMCwKIAkJLmJzc19sb3NlX3RpbWVvdXQgICAgICAgICAgICA9IDEwMCwKIAkJLmJlYWNvbl9yeF90aW1lb3V0ICAgICAgICAgICA9IDEwMDAwLAogCQkuYnJvYWRjYXN0X3RpbWVvdXQgICAgICAgICAgID0gMjAwMDAsCiAJCS5yeF9icm9hZGNhc3RfaW5fcHMgICAgICAgICAgPSAxLAotCQkucHNfcG9sbF90aHJlc2hvbGQgICAgICAgICAgID0gNCwKKwkJLnBzX3BvbGxfdGhyZXNob2xkICAgICAgICAgICA9IDIwLAogCQkuc2lnX3RyaWdnZXJfY291bnQgICAgICAgICAgID0gMiwKIAkJLnNpZ190cmlnZ2VyID0gewogCQkJWzBdID0gewpAQCAtMjI2LDk3ICsyMzEsMTcgQEAKIAkJLnBzbV9lbnRyeV9yZXRyaWVzICAgICAgICAgICA9IDMKIAl9LAogCS5pbml0ID0gewotCQkuc3JfZXJyX3RibCA9IHsKLQkJCVswXSA9IHsKLQkJCQkubGVuICAgICAgICAgPSA3LAotCQkJCS51cHBlcl9saW1pdCA9IDB4MDMsCi0JCQkJLnZhbHVlcyAgICAgID0gewotCQkJCQkweDE4LCAweDEwLCAweDA1LCAweGZiLCAweGYwLCAweGU4LAotCQkJCQkweDAwIH0KLQkJCX0sCi0JCQlbMV0gPSB7Ci0JCQkJLmxlbiAgICAgICAgID0gNywKLQkJCQkudXBwZXJfbGltaXQgPSAweDAzLAotCQkJCS52YWx1ZXMgICAgICA9IHsKLQkJCQkJMHgxOCwgMHgxMCwgMHgwNSwgMHhmNiwgMHhmMCwgMHhlOCwKLQkJCQkJMHgwMCB9Ci0JCQl9LAotCQkJWzJdID0gewotCQkJCS5sZW4gICAgICAgICA9IDcsCi0JCQkJLnVwcGVyX2xpbWl0ID0gMHgwMywKLQkJCQkudmFsdWVzICAgICAgPSB7Ci0JCQkJCTB4MTgsIDB4MTAsIDB4MDUsIDB4ZmIsIDB4ZjAsIDB4ZTgsCi0JCQkJCTB4MDAgfQotCQkJfQotCQl9LAotCQkuc3JfZW5hYmxlICAgICAgICAgICAgICAgICAgID0gMSwKLQkJLmdlbnBhcmFtICAgICAgICAgICAgICAgICAgICA9IHsKLQkJCS5yZWZfY2xrICAgICAgICAgICAgID0gQ09ORl9SRUZfQ0xLXzM4XzRfRSwKLQkJCS5zZXR0bGluZ190aW1lICAgICAgID0gNSwKLQkJCS5jbGtfdmFsaWRfb25fd2FrZXVwID0gMCwKLQkJCS5kYzJkY21vZGUgICAgICAgICAgID0gMCwKLQkJCS5zaW5nbGVfZHVhbF9iYW5kICAgID0gQ09ORl9TSU5HTEVfQkFORCwKLQkJCS50eF9iaXBfZmVtX2F1dG9kZXRlY3QgPSAwLAotCQkJLnR4X2JpcF9mZW1fbWFudWZhY3R1cmVyID0gMSwKLQkJCS5zZXR0aW5ncyA9IDEsCi0JCX0sCiAJCS5yYWRpb3BhcmFtID0gewotCQkJLnJ4X3RyYWNlX2xvc3MgICAgICAgPSAxMCwKLQkJCS50eF90cmFjZV9sb3NzICAgICAgID0gMTAsCi0JCQkucnhfcnNzaV9hbmRfcHJvY19jb21wZW5zID0gewotCQkJCTB4ZWMsIDB4ZjYsIDB4MDAsIDB4MGMsIDB4MTgsIDB4ZjgsCi0JCQkJMHhmYywgMHgwMCwgMHgwOCwgMHgxMCwgMHhmMCwgMHhmOCwKLQkJCQkweDAwLCAweDBhLCAweDE0IH0sCi0JCQkucnhfdHJhY2VfbG9zc181ICAgICA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LAotCQkJLnR4X3RyYWNlX2xvc3NfNSAgICAgPSB7IDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKLQkJCS5yeF9yc3NpX2FuZF9wcm9jX2NvbXBlbnNfNSA9IHsKLQkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0JCQkJMHgwMCwgMHgwMCwgMHgwMCB9LAotCQkJLnR4X3JlZl9wZF92b2x0YWdlICAgPSAweDI0ZSwKLQkJCS50eF9yZWZfcG93ZXIgICAgICAgID0gMHg3OCwKLQkJCS50eF9vZmZzZXRfZGIgICAgICAgID0gMHgwLAotCQkJLnR4X3JhdGVfbGltaXRzX25vcm1hbCA9IHsKLQkJCQkweDFlLCAweDFmLCAweDIyLCAweDI0LCAweDI4LCAweDI5IH0sCi0JCQkudHhfcmF0ZV9saW1pdHNfZGVncmFkZWQgPSB7Ci0JCQkJMHgxYiwgMHgxYywgMHgxZSwgMHgyMCwgMHgyNCwgMHgyNSB9LAotCQkJLnR4X2NoYW5uZWxfbGltaXRzXzExYiA9IHsKLQkJCQkweDIyLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLAotCQkJCTB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4MjIsIDB4NTAsCi0JCQkJMHgyMiwgMHg1MCB9LAotCQkJLnR4X2NoYW5uZWxfbGltaXRzX29mZG0gPSB7Ci0JCQkJMHgyMCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwKLQkJCQkweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDIwLCAweDUwLAotCQkJCTB4MjAsIDB4NTAgfSwKLQkJCS50eF9wZHZfcmF0ZV9vZmZzZXRzID0gewotCQkJCTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSwKLQkJCS50eF9pYmlhcyAgICAgICAgICAgID0gewotCQkJCTB4MWEsIDB4MWEsIDB4MWEsIDB4MWEsIDB4MWEsIDB4MjcgfSwKLQkJCS5yeF9mZW1faW5zZXJ0aW9uX2xvc3MgPSAweDE0LAotCQkJLnR4X3JlZl9wZF92b2x0YWdlXzUgPSB7Ci0JCQkJMHgwMTkwLCAweDAxYTQsIDB4MDFjMywgMHgwMWQ4LAotCQkJCTB4MDIwYSwgMHgwMjFjIH0sCi0JCQkudHhfcmVmX3Bvd2VyXzUgICAgICA9IHsKLQkJCQkweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwIH0sCi0JCQkudHhfb2Zmc2V0X2RiXzUgICAgICA9IHsKLQkJCQkweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0sCi0JCQkudHhfcmF0ZV9saW1pdHNfbm9ybWFsXzUgPSB7Ci0JCQkJMHgxYiwgMHgxZSwgMHgyMSwgMHgyMywgMHgyNywgMHgwMCB9LAotCQkJLnR4X3JhdGVfbGltaXRzX2RlZ3JhZGVkXzUgPSB7Ci0JCQkJMHgxYiwgMHgxZSwgMHgyMSwgMHgyMywgMHgyNywgMHgwMCB9LAotCQkJLnR4X2NoYW5uZWxfbGltaXRzX29mZG1fNSA9IHsKLQkJCQkweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLAotCQkJCTB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsIDB4NTAsCi0JCQkJMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwgMHg1MCwKLQkJCQkweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLCAweDUwLAotCQkJCTB4NTAsIDB4NTAsIDB4NTAgfSwKLQkJCS50eF9wZHZfcmF0ZV9vZmZzZXRzXzUgPSB7Ci0JCQkJMHgwMSwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMCB9LAotCQkJLnR4X2liaWFzXzUgICAgICAgICAgPSB7Ci0JCQkJMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCwgMHgxMCB9LAotCQkJLnJ4X2ZlbV9pbnNlcnRpb25fbG9zc181ID0gewotCQkJCTB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MTAgfQorCQkJLmZlbSAgICAgICAgICAgICAgICAgPSAxLAogCQl9CisJfSwKKwkuaXRyaW0gPSB7CisJCS5lbmFibGUgPSBmYWxzZSwKKwkJLnRpbWVvdXQgPSA1MDAwMCwKKwl9LAorCS5wbV9jb25maWcgPSB7CisJCS5ob3N0X2Nsa19zZXR0bGluZ190aW1lID0gNTAwMCwKKwkJLmhvc3RfZmFzdF93YWtldXBfc3VwcG9ydCA9IGZhbHNlCiAJfQogfTsKIApAQCAtMzM3LDE1ICsyNjIsMTQgQEAKIAogCS8qIGFwcGx5IGRyaXZlciBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8KIAltZW1jcHkoJndsLT5jb25mLCAmZGVmYXVsdF9jb25mLCBzaXplb2YoZGVmYXVsdF9jb25mKSk7Ci0KLQlpZiAod2wxMjcxXzExYV9lbmFibGVkKCkpCi0JCXdsLT5jb25mLmluaXQuZ2VucGFyYW0uc2luZ2xlX2R1YWxfYmFuZCA9IENPTkZfRFVBTF9CQU5EOwogfQogCiAKIHN0YXRpYyBpbnQgd2wxMjcxX3BsdF9pbml0KHN0cnVjdCB3bDEyNzEgKndsKQogewotCWludCByZXQ7CisJc3RydWN0IGNvbmZfdHhfYWNfY2F0ZWdvcnkgKmNvbmZfYWM7CisJc3RydWN0IGNvbmZfdHhfdGlkICpjb25mX3RpZDsKKwlpbnQgcmV0LCBpOwogCiAJcmV0ID0gd2wxMjcxX2NtZF9nZW5lcmFsX3Bhcm1zKHdsKTsKIAlpZiAocmV0IDwgMCkKQEAgLTM1NSwxNSArMjc5LDg5IEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKKwlyZXQgPSB3bDEyNzFfaW5pdF90ZW1wbGF0ZXNfY29uZmlnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwogCXJldCA9IHdsMTI3MV9hY3hfaW5pdF9tZW1fY29uZmlnKHdsKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IHdsMTI3MV9jbWRfZGF0YV9wYXRoKHdsLCB3bC0+Y2hhbm5lbCwgMSk7CisJLyogUEhZIGxheWVyIGNvbmZpZyAqLworCXJldCA9IHdsMTI3MV9pbml0X3BoeV9jb25maWcod2wpOwogCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OworCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCXJldCA9IHdsMTI3MV9hY3hfZGNvX2l0cmltX3BhcmFtcyh3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogSW5pdGlhbGl6ZSBjb25uZWN0aW9uIG1vbml0b3JpbmcgdGhyZXNob2xkcyAqLworCXJldCA9IHdsMTI3MV9hY3hfY29ubl9tb25pdF9wYXJhbXMod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIEJsdWV0b290aCBXTEFOIGNvZXhpc3RlbmNlICovCisJcmV0ID0gd2wxMjcxX2luaXRfcHRhKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBFbmVyZ3kgZGV0ZWN0aW9uICovCisJcmV0ID0gd2wxMjcxX2luaXRfZW5lcmd5X2RldGVjdGlvbih3bCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X2ZyZWVfbWVtbWFwOworCisJLyogRGVmYXVsdCBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCAqLworCXJldCA9IHdsMTI3MV9hY3hfZnJhZ190aHJlc2hvbGQod2wpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIERlZmF1bHQgVElEIGNvbmZpZ3VyYXRpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgd2wtPmNvbmYudHgudGlkX2NvbmZfY291bnQ7IGkrKykgeworCQljb25mX3RpZCA9ICZ3bC0+Y29uZi50eC50aWRfY29uZltpXTsKKwkJcmV0ID0gd2wxMjcxX2FjeF90aWRfY2ZnKHdsLCBjb25mX3RpZC0+cXVldWVfaWQsCisJCQkJCSBjb25mX3RpZC0+Y2hhbm5lbF90eXBlLAorCQkJCQkgY29uZl90aWQtPnRzaWQsCisJCQkJCSBjb25mX3RpZC0+cHNfc2NoZW1lLAorCQkJCQkgY29uZl90aWQtPmFja19wb2xpY3ksCisJCQkJCSBjb25mX3RpZC0+YXBzZF9jb25mWzBdLAorCQkJCQkgY29uZl90aWQtPmFwc2RfY29uZlsxXSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisJfQorCisJLyogRGVmYXVsdCBBQyBjb25maWd1cmF0aW9uICovCisJZm9yIChpID0gMDsgaSA8IHdsLT5jb25mLnR4LmFjX2NvbmZfY291bnQ7IGkrKykgeworCQljb25mX2FjID0gJndsLT5jb25mLnR4LmFjX2NvbmZbaV07CisJCXJldCA9IHdsMTI3MV9hY3hfYWNfY2ZnKHdsLCBjb25mX2FjLT5hYywgY29uZl9hYy0+Y3dfbWluLAorCQkJCQljb25mX2FjLT5jd19tYXgsIGNvbmZfYWMtPmFpZnNuLAorCQkJCQljb25mX2FjLT50eF9vcF9saW1pdCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisJfQorCisJLyogRW5hYmxlIGRhdGEgcGF0aCAqLworCXJldCA9IHdsMTI3MV9jbWRfZGF0YV9wYXRoKHdsLCAxKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CisKKwkvKiBDb25maWd1cmUgZm9yIENBTSBwb3dlciBzYXZpbmcgKGllLiBhbHdheXMgYWN0aXZlKSAqLworCXJldCA9IHdsMTI3MV9hY3hfc2xlZXBfYXV0aCh3bCwgV0wxMjcxX1BTTV9DQU0pOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF9mcmVlX21lbW1hcDsKKworCS8qIGNvbmZpZ3VyZSBQTSAqLworCXJldCA9IHdsMTI3MV9hY3hfcG1fY29uZmlnKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfZnJlZV9tZW1tYXA7CiAKIAlyZXR1cm4gMDsKKworIG91dF9mcmVlX21lbW1hcDoKKwlrZnJlZSh3bC0+dGFyZ2V0X21lbV9tYXApOworCXdsLT50YXJnZXRfbWVtX21hcCA9IE5VTEw7CisKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCB3bDEyNzFfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCB3bDEyNzEgKndsKQpAQCAtMzc0LDExICszNzIsMTMgQEAKIHN0YXRpYyB2b2lkIHdsMTI3MV9wb3dlcl9vZmYoc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJd2wtPnNldF9wb3dlcihmYWxzZSk7CisJY2xlYXJfYml0KFdMMTI3MV9GTEFHX0dQSU9fUE9XRVIsICZ3bC0+ZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCB3bDEyNzFfcG93ZXJfb24oc3RydWN0IHdsMTI3MSAqd2wpCiB7CiAJd2wtPnNldF9wb3dlcih0cnVlKTsKKwlzZXRfYml0KFdMMTI3MV9GTEFHX0dQSU9fUE9XRVIsICZ3bC0+ZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCB3bDEyNzFfZndfc3RhdHVzKHN0cnVjdCB3bDEyNzEgKndsLApAQCAtMzg3LDggKzM4Nyw3IEBACiAJdTMyIHRvdGFsID0gMDsKIAlpbnQgaTsKIAotCXdsMTI3MV9zcGlfcmVhZCh3bCwgRldfU1RBVFVTX0FERFIsIHN0YXR1cywKLQkJCXNpemVvZigqc3RhdHVzKSwgZmFsc2UpOworCXdsMTI3MV9yZWFkKHdsLCBGV19TVEFUVVNfQUREUiwgc3RhdHVzLCBzaXplb2YoKnN0YXR1cyksIGZhbHNlKTsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsICJpbnRyOiAweCV4IChmd19yeF9jb3VudGVyID0gJWQsICIKIAkJICAgICAiZHJ2X3J4X2NvdW50ZXIgPSAlZCwgdHhfcmVzdWx0c19jb3VudGVyID0gJWQpIiwKQEAgLTQzNSw3ICs0MzQsNyBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIAotCXdsMTI3MV9zcGlfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTUFTSywgV0wxMjcxX0FDWF9JTlRSX0FMTCk7CisJd2wxMjcxX3dyaXRlMzIod2wsIEFDWF9SRUdfSU5URVJSVVBUX01BU0ssIFdMMTI3MV9BQ1hfSU5UUl9BTEwpOwogCiAJd2wxMjcxX2Z3X3N0YXR1cyh3bCwgd2wtPmZ3X3N0YXR1cyk7CiAJaW50ciA9IGxlMzJfdG9fY3B1KHdsLT5md19zdGF0dXMtPmludHIpOwpAQCAtNDQ3LDE0ICs0NDYsMTMgQEAKIAlpbnRyICY9IFdMMTI3MV9JTlRSX01BU0s7CiAKIAlpZiAoaW50ciAmIFdMMTI3MV9BQ1hfSU5UUl9FVkVOVF9BKSB7Ci0JCWJvb2wgZG9fYWNrID0gKGludHIgJiBXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQikgPyBmYWxzZSA6IHRydWU7CiAJCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsICJXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQSIpOwotCQl3bDEyNzFfZXZlbnRfaGFuZGxlKHdsLCAwLCBkb19hY2spOworCQl3bDEyNzFfZXZlbnRfaGFuZGxlKHdsLCAwKTsKIAl9CiAKIAlpZiAoaW50ciAmIFdMMTI3MV9BQ1hfSU5UUl9FVkVOVF9CKSB7CiAJCXdsMTI3MV9kZWJ1ZyhERUJVR19JUlEsICJXTDEyNzFfQUNYX0lOVFJfRVZFTlRfQiIpOwotCQl3bDEyNzFfZXZlbnRfaGFuZGxlKHdsLCAxLCB0cnVlKTsKKwkJd2wxMjcxX2V2ZW50X2hhbmRsZSh3bCwgMSk7CiAJfQogCiAJaWYgKGludHIgJiBXTDEyNzFfQUNYX0lOVFJfSU5JVF9DT01QTEVURSkKQEAgLTQ3OCw4ICs0NzYsOCBAQAogCX0KIAogb3V0X3NsZWVwOgotCXdsMTI3MV9zcGlfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTUFTSywKLQkJCSAgIFdMMTI3MV9BQ1hfSU5UUl9BTEwgJiB+KFdMMTI3MV9JTlRSX01BU0spKTsKKwl3bDEyNzFfd3JpdGUzMih3bCwgQUNYX1JFR19JTlRFUlJVUFRfTUFTSywKKwkJICAgICAgIFdMMTI3MV9BQ1hfSU5UUl9BTEwgJiB+KFdMMTI3MV9JTlRSX01BU0spKTsKIAl3bDEyNzFfcHNfZWxwX3NsZWVwKHdsKTsKIAogb3V0OgpAQCAtNTQ2LDYgKzU0NCw0MCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgd2wxMjcxX3VwZGF0ZV9tYWNfYWRkcihzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1OCAqbnZzX3B0ciA9ICh1OCAqKXdsLT5udnMtPm52czsKKworCS8qIGdldCBtYWMgYWRkcmVzcyBmcm9tIHRoZSBOVlMgKi8KKwl3bC0+bWFjX2FkZHJbMF0gPSBudnNfcHRyWzExXTsKKwl3bC0+bWFjX2FkZHJbMV0gPSBudnNfcHRyWzEwXTsKKwl3bC0+bWFjX2FkZHJbMl0gPSBudnNfcHRyWzZdOworCXdsLT5tYWNfYWRkclszXSA9IG52c19wdHJbNV07CisJd2wtPm1hY19hZGRyWzRdID0gbnZzX3B0cls0XTsKKwl3bC0+bWFjX2FkZHJbNV0gPSBudnNfcHRyWzNdOworCisJLyogRklYTUU6IGlmIGl0IGlzIGEgemVyby1hZGRyZXNzLCB3ZSBzaG91bGQgYmFpbCBvdXQuIE5vdywgaW5zdGVhZCwKKwkgICB3ZSByYW5kb21pemUgYW4gYWRkcmVzcyAqLworCWlmIChpc196ZXJvX2V0aGVyX2FkZHIod2wtPm1hY19hZGRyKSkgeworCQlzdGF0aWMgY29uc3QgdTggbm9raWFfb3VpWzNdID0gezB4MDAsIDB4MWYsIDB4ZGZ9OworCQltZW1jcHkod2wtPm1hY19hZGRyLCBub2tpYV9vdWksIDMpOworCQlnZXRfcmFuZG9tX2J5dGVzKHdsLT5tYWNfYWRkciArIDMsIDMpOworCisJCS8qIHVwZGF0ZSB0aGlzIGFkZHJlc3MgdG8gdGhlIE5WUyAqLworCQludnNfcHRyWzExXSA9IHdsLT5tYWNfYWRkclswXTsKKwkJbnZzX3B0clsxMF0gPSB3bC0+bWFjX2FkZHJbMV07CisJCW52c19wdHJbNl0gPSB3bC0+bWFjX2FkZHJbMl07CisJCW52c19wdHJbNV0gPSB3bC0+bWFjX2FkZHJbM107CisJCW52c19wdHJbNF0gPSB3bC0+bWFjX2FkZHJbNF07CisJCW52c19wdHJbM10gPSB3bC0+bWFjX2FkZHJbNV07CisJfQorCisJU0VUX0lFRUU4MDIxMV9QRVJNX0FERFIod2wtPmh3LCB3bC0+bWFjX2FkZHIpOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCB3bDEyNzFfZmV0Y2hfbnZzKHN0cnVjdCB3bDEyNzEgKndsKQogewogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CkBAIC01NTgsMTUgKzU5MCwxNCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWlmIChmdy0+c2l6ZSAlIDQpIHsKLQkJd2wxMjcxX2Vycm9yKCJudnMgc2l6ZSBpcyBub3QgbXVsdGlwbGUgb2YgMzIgYml0czogJXp1IiwKLQkJCSAgICAgZnctPnNpemUpOworCWlmIChmdy0+c2l6ZSAhPSBzaXplb2Yoc3RydWN0IHdsMTI3MV9udnNfZmlsZSkpIHsKKwkJd2wxMjcxX2Vycm9yKCJudnMgc2l6ZSBpcyBub3QgYXMgZXhwZWN0ZWQ6ICV6dSAhPSAlenUiLAorCQkJICAgICBmdy0+c2l6ZSwgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpKTsKIAkJcmV0ID0gLUVJTFNFUTsKIAkJZ290byBvdXQ7CiAJfQogCi0Jd2wtPm52c19sZW4gPSBmdy0+c2l6ZTsKLQl3bC0+bnZzID0ga21hbGxvYyh3bC0+bnZzX2xlbiwgR0ZQX0tFUk5FTCk7CisJd2wtPm52cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghd2wtPm52cykgewogCQl3bDEyNzFfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBudnMgZmlsZSIpOwpAQCAtNTc0LDkgKzYwNSw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCW1lbWNweSh3bC0+bnZzLCBmdy0+ZGF0YSwgd2wtPm52c19sZW4pOworCW1lbWNweSh3bC0+bnZzLCBmdy0+ZGF0YSwgc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpKTsKIAotCXJldCA9IDA7CisJcmV0ID0gd2wxMjcxX3VwZGF0ZV9tYWNfYWRkcih3bCk7CiAKIG91dDoKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKQEAgLTYxNCwxMCArNjQ1LDExIEBACiAJc3RydWN0IHdsMTI3MV9wYXJ0aXRpb25fc2V0IHBhcnRpdGlvbjsKIAlpbnQgcmV0ID0gMDsKIAorCW1zbGVlcChXTDEyNzFfUFJFX1BPV0VSX09OX1NMRUVQKTsKIAl3bDEyNzFfcG93ZXJfb24od2wpOwogCW1zbGVlcChXTDEyNzFfUE9XRVJfT05fU0xFRVApOwotCXdsMTI3MV9zcGlfcmVzZXQod2wpOwotCXdsMTI3MV9zcGlfaW5pdCh3bCk7CisJd2wxMjcxX2lvX3Jlc2V0KHdsKTsKKwl3bDEyNzFfaW9faW5pdCh3bCk7CiAKIAkvKiBXZSBkb24ndCBuZWVkIGEgcmVhbCBtZW1vcnkgcGFydGl0aW9uIGhlcmUsIGJlY2F1c2Ugd2Ugb25seSB3YW50CiAJICogdG8gdXNlIHRoZSByZWdpc3RlcnMgYXQgdGhpcyBwb2ludC4gKi8KQEAgLTYzMiw3ICs2NjQsNyBAQAogCS8qIHdoYWxfRndDdHJsX0Jvb3RTbSgpICovCiAKIAkvKiAwLiByZWFkIGNoaXAgaWQgZnJvbSBDSElQX0lEICovCi0Jd2wtPmNoaXAuaWQgPSB3bDEyNzFfc3BpX3JlYWQzMih3bCwgQ0hJUF9JRF9CKTsKKwl3bC0+Y2hpcC5pZCA9IHdsMTI3MV9yZWFkMzIod2wsIENISVBfSURfQik7CiAKIAkvKiAxLiBjaGVjayBpZiBjaGlwIGlkIGlzIHZhbGlkICovCiAKQEAgLTY0Myw3ICs2NzUsNyBAQAogCiAJCXJldCA9IHdsMTI3MV9zZXR1cCh3bCk7CiAJCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXRfcG93ZXJfb2ZmOworCQkJZ290byBvdXQ7CiAJCWJyZWFrOwogCWNhc2UgQ0hJUF9JRF8xMjcxX1BHMjA6CiAJCXdsMTI3MV9kZWJ1ZyhERUJVR19CT09ULCAiY2hpcCBpZCAweCV4ICgxMjcxIFBHMjApIiwKQEAgLTY1MSwzOCArNjgzLDM0IEBACiAKIAkJcmV0ID0gd2wxMjcxX3NldHVwKHdsKTsKIAkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dF9wb3dlcl9vZmY7CisJCQlnb3RvIG91dDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJd2wxMjcxX2Vycm9yKCJ1bnN1cHBvcnRlZCBjaGlwIGlkOiAweCV4Iiwgd2wtPmNoaXAuaWQpOworCQl3bDEyNzFfd2FybmluZygidW5zdXBwb3J0ZWQgY2hpcCBpZDogMHgleCIsIHdsLT5jaGlwLmlkKTsKIAkJcmV0ID0gLUVOT0RFVjsKLQkJZ290byBvdXRfcG93ZXJfb2ZmOworCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAod2wtPmZ3ID09IE5VTEwpIHsKIAkJcmV0ID0gd2wxMjcxX2ZldGNoX2Zpcm13YXJlKHdsKTsKIAkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dF9wb3dlcl9vZmY7CisJCQlnb3RvIG91dDsKIAl9CiAKIAkvKiBObyBOVlMgZnJvbSBuZXRsaW5rLCB0cnkgdG8gZ2V0IGl0IGZyb20gdGhlIGZpbGVzeXN0ZW0gKi8KIAlpZiAod2wtPm52cyA9PSBOVUxMKSB7CiAJCXJldCA9IHdsMTI3MV9mZXRjaF9udnMod2wpOwogCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0X3Bvd2VyX29mZjsKKwkJCWdvdG8gb3V0OwogCX0KIAotCWdvdG8gb3V0OwotCi1vdXRfcG93ZXJfb2ZmOgotCXdsMTI3MV9wb3dlcl9vZmYod2wpOwotCiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAogaW50IHdsMTI3MV9wbHRfc3RhcnQoc3RydWN0IHdsMTI3MSAqd2wpCiB7CisJaW50IHJldHJpZXMgPSBXTDEyNzFfQk9PVF9SRVRSSUVTOwogCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwpAQCAtNjk2LDM1ICs3MjQsNDMgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0Jd2wtPnN0YXRlID0gV0wxMjcxX1NUQVRFX1BMVDsKKwl3aGlsZSAocmV0cmllcykgeworCQlyZXRyaWVzLS07CisJCXJldCA9IHdsMTI3MV9jaGlwX3dha2V1cCh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBwb3dlcl9vZmY7CiAKLQlyZXQgPSB3bDEyNzFfY2hpcF93YWtldXAod2wpOwotCWlmIChyZXQgPCAwKQorCQlyZXQgPSB3bDEyNzFfYm9vdCh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBwb3dlcl9vZmY7CisKKwkJcmV0ID0gd2wxMjcxX3BsdF9pbml0KHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGlycV9kaXNhYmxlOworCisJCXdsLT5zdGF0ZSA9IFdMMTI3MV9TVEFURV9QTFQ7CisJCXdsMTI3MV9ub3RpY2UoImZpcm13YXJlIGJvb3RlZCBpbiBQTFQgbW9kZSAoJXMpIiwKKwkJCSAgICAgIHdsLT5jaGlwLmZ3X3Zlcik7CiAJCWdvdG8gb3V0OwogCi0JcmV0ID0gd2wxMjcxX2Jvb3Qod2wpOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9wb3dlcl9vZmY7CitpcnFfZGlzYWJsZToKKwkJd2wxMjcxX2Rpc2FibGVfaW50ZXJydXB0cyh3bCk7CisJCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKwkJLyogVW5sb2NraW5nIHRoZSBtdXRleCBpbiB0aGUgbWlkZGxlIG9mIGhhbmRsaW5nIGlzCisJCSAgIGluaGVyZW50bHkgdW5zYWZlLiBJbiB0aGlzIGNhc2Ugd2UgZGVlbSBpdCBzYWZlIHRvIGRvLAorCQkgICBiZWNhdXNlIHdlIG5lZWQgdG8gbGV0IGFueSBwb3NzaWJseSBwZW5kaW5nIElSUSBvdXQgb2YKKwkJICAgdGhlIHN5c3RlbSAoYW5kIHdoaWxlIHdlIGFyZSBXTDEyNzFfU1RBVEVfT0ZGIHRoZSBJUlEKKwkJICAgd29yayBmdW5jdGlvbiB3aWxsIG5vdCBkbyBhbnl0aGluZy4pIEFsc28sIGFueSBvdGhlcgorCQkgICBwb3NzaWJsZSBjb25jdXJyZW50IG9wZXJhdGlvbnMgd2lsbCBmYWlsIGR1ZSB0byB0aGUKKwkJICAgY3VycmVudCBzdGF0ZSwgaGVuY2UgdGhlIHdsMTI3MSBzdHJ1Y3Qgc2hvdWxkIGJlIHNhZmUuICovCisJCWNhbmNlbF93b3JrX3N5bmMoJndsLT5pcnFfd29yayk7CisJCW11dGV4X2xvY2soJndsLT5tdXRleCk7Citwb3dlcl9vZmY6CisJCXdsMTI3MV9wb3dlcl9vZmYod2wpOworCX0KIAotCXdsMTI3MV9ub3RpY2UoImZpcm13YXJlIGJvb3RlZCBpbiBQTFQgbW9kZSAoJXMpIiwgd2wtPmNoaXAuZndfdmVyKTsKLQotCXJldCA9IHdsMTI3MV9wbHRfaW5pdCh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2lycV9kaXNhYmxlOwotCi0JLyogTWFrZSBzdXJlIHBvd2VyIHNhdmluZyBpcyBkaXNhYmxlZCAqLwotCXJldCA9IHdsMTI3MV9hY3hfc2xlZXBfYXV0aCh3bCwgV0wxMjcxX1BTTV9DQU0pOwotCWlmIChyZXQgPCAwKQotCQlnb3RvIG91dF9pcnFfZGlzYWJsZTsKLQotCWdvdG8gb3V0OwotCi1vdXRfaXJxX2Rpc2FibGU6Ci0Jd2wxMjcxX2Rpc2FibGVfaW50ZXJydXB0cyh3bCk7Ci0KLW91dF9wb3dlcl9vZmY6Ci0Jd2wxMjcxX3Bvd2VyX29mZih3bCk7Ci0KKwl3bDEyNzFfZXJyb3IoImZpcm13YXJlIGJvb3QgaW4gUExUIG1vZGUgZmFpbGVkIGRlc3BpdGUgJWQgcmV0cmllcyIsCisJCSAgICAgV0wxMjcxX0JPT1RfUkVUUklFUyk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogCkBAIC03NjIsNyArNzk4LDIwIEBACiBzdGF0aWMgaW50IHdsMTI3MV9vcF90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfY29uZiAqY29uZiA9ICZody0+Y29uZjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKnR4aW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhID0gdHhpbmZvLT5jb250cm9sLnN0YTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJLyogcGVlayBpbnRvIHRoZSByYXRlcyBjb25maWd1cmVkIGluIHRoZSBTVEEgZW50cnkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmd2wtPndsX2xvY2ssIGZsYWdzKTsKKwlpZiAoc3RhICYmIHN0YS0+c3VwcF9yYXRlc1tjb25mLT5jaGFubmVsLT5iYW5kXSAhPSB3bC0+c3RhX3JhdGVfc2V0KSB7CisJCXdsLT5zdGFfcmF0ZV9zZXQgPSBzdGEtPnN1cHBfcmF0ZXNbY29uZi0+Y2hhbm5lbC0+YmFuZF07CisJCXNldF9iaXQoV0wxMjcxX0ZMQUdfU1RBX1JBVEVTX0NIQU5HRUQsICZ3bC0+ZmxhZ3MpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCisJLyogcXVldWUgdGhlIHBhY2tldCAqLwogCXNrYl9xdWV1ZV90YWlsKCZ3bC0+dHhfcXVldWUsIHNrYik7CiAKIAkvKgpAQCAtNzg0LDcgKzgzMyw3IEBACiAJCSAqIHByb3RlY3RlZC4gTWF5YmUgZml4IHRoaXMgYnkgcmVtb3ZpbmcgdGhlIHN0dXBpZAogCQkgKiB2YXJpYWJsZSBhbHRvZ2V0aGVyIGFuZCBjaGVja2luZyB0aGUgcmVhbCBxdWV1ZSBzdGF0ZT8KIAkJICovCi0JCXdsLT50eF9xdWV1ZV9zdG9wcGVkID0gdHJ1ZTsKKwkJc2V0X2JpdChXTDEyNzFfRkxBR19UWF9RVUVVRV9TVE9QUEVELCAmd2wtPmZsYWdzKTsKIAl9CiAKIAlyZXR1cm4gTkVUREVWX1RYX09LOwpAQCAtODgwLDYgKzkyOSw3IEBACiBzdGF0aWMgaW50IHdsMTI3MV9vcF9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodykKIHsKIAlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCWludCByZXRyaWVzID0gV0wxMjcxX0JPT1RfUkVUUklFUzsKIAlpbnQgcmV0ID0gMDsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIHN0YXJ0Iik7CkBAIC04OTMsMzAgKzk0Myw0MiBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlyZXQgPSB3bDEyNzFfY2hpcF93YWtldXAod2wpOwotCWlmIChyZXQgPCAwKQorCXdoaWxlIChyZXRyaWVzKSB7CisJCXJldHJpZXMtLTsKKwkJcmV0ID0gd2wxMjcxX2NoaXBfd2FrZXVwKHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIHBvd2VyX29mZjsKKworCQlyZXQgPSB3bDEyNzFfYm9vdCh3bCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBwb3dlcl9vZmY7CisKKwkJcmV0ID0gd2wxMjcxX2h3X2luaXQod2wpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gaXJxX2Rpc2FibGU7CisKKwkJd2wtPnN0YXRlID0gV0wxMjcxX1NUQVRFX09OOworCQl3bDEyNzFfaW5mbygiZmlybXdhcmUgYm9vdGVkICglcykiLCB3bC0+Y2hpcC5md192ZXIpOwogCQlnb3RvIG91dDsKIAotCXJldCA9IHdsMTI3MV9ib290KHdsKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBvdXRfcG93ZXJfb2ZmOworaXJxX2Rpc2FibGU6CisJCXdsMTI3MV9kaXNhYmxlX2ludGVycnVwdHMod2wpOworCQltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisJCS8qIFVubG9ja2luZyB0aGUgbXV0ZXggaW4gdGhlIG1pZGRsZSBvZiBoYW5kbGluZyBpcworCQkgICBpbmhlcmVudGx5IHVuc2FmZS4gSW4gdGhpcyBjYXNlIHdlIGRlZW0gaXQgc2FmZSB0byBkbywKKwkJICAgYmVjYXVzZSB3ZSBuZWVkIHRvIGxldCBhbnkgcG9zc2libHkgcGVuZGluZyBJUlEgb3V0IG9mCisJCSAgIHRoZSBzeXN0ZW0gKGFuZCB3aGlsZSB3ZSBhcmUgV0wxMjcxX1NUQVRFX09GRiB0aGUgSVJRCisJCSAgIHdvcmsgZnVuY3Rpb24gd2lsbCBub3QgZG8gYW55dGhpbmcuKSBBbHNvLCBhbnkgb3RoZXIKKwkJICAgcG9zc2libGUgY29uY3VycmVudCBvcGVyYXRpb25zIHdpbGwgZmFpbCBkdWUgdG8gdGhlCisJCSAgIGN1cnJlbnQgc3RhdGUsIGhlbmNlIHRoZSB3bDEyNzEgc3RydWN0IHNob3VsZCBiZSBzYWZlLiAqLworCQljYW5jZWxfd29ya19zeW5jKCZ3bC0+aXJxX3dvcmspOworCQltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOworcG93ZXJfb2ZmOgorCQl3bDEyNzFfcG93ZXJfb2ZmKHdsKTsKKwl9CiAKLQlyZXQgPSB3bDEyNzFfaHdfaW5pdCh3bCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0X2lycV9kaXNhYmxlOwotCi0Jd2wtPnN0YXRlID0gV0wxMjcxX1NUQVRFX09OOwotCi0Jd2wxMjcxX2luZm8oImZpcm13YXJlIGJvb3RlZCAoJXMpIiwgd2wtPmNoaXAuZndfdmVyKTsKLQotCWdvdG8gb3V0OwotCi1vdXRfaXJxX2Rpc2FibGU6Ci0Jd2wxMjcxX2Rpc2FibGVfaW50ZXJydXB0cyh3bCk7Ci0KLW91dF9wb3dlcl9vZmY6Ci0Jd2wxMjcxX3Bvd2VyX29mZih3bCk7Ci0KKwl3bDEyNzFfZXJyb3IoImZpcm13YXJlIGJvb3QgZmFpbGVkIGRlc3BpdGUgJWQgcmV0cmllcyIsCisJCSAgICAgV0wxMjcxX0JPT1RfUkVUUklFUyk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogCkBAIC05NDQsMTEgKzEwMDYsMTAgQEAKIAogCVdBUk5fT04od2wtPnN0YXRlICE9IFdMMTI3MV9TVEFURV9PTik7CiAKLQlpZiAod2wtPnNjYW5uaW5nKSB7CisJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChXTDEyNzFfRkxBR19TQ0FOTklORywgJndsLT5mbGFncykpIHsKIAkJbXV0ZXhfdW5sb2NrKCZ3bC0+bXV0ZXgpOwogCQlpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQod2wtPmh3LCB0cnVlKTsKIAkJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKLQkJd2wtPnNjYW5uaW5nID0gZmFsc2U7CiAJfQogCiAJd2wtPnN0YXRlID0gV0wxMjcxX1NUQVRFX09GRjsKQEAgLTk3MywxMCArMTAzNCw3IEBACiAJd2wtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwogCiAJd2wtPnJ4X2NvdW50ZXIgPSAwOwotCXdsLT5lbHAgPSBmYWxzZTsKLQl3bC0+cHNtID0gMDsKIAl3bC0+cHNtX2VudHJ5X3JldHJ5ID0gMDsKLQl3bC0+dHhfcXVldWVfc3RvcHBlZCA9IGZhbHNlOwogCXdsLT5wb3dlcl9sZXZlbCA9IFdMMTI3MV9ERUZBVUxUX1BPV0VSX0xFVkVMOwogCXdsLT50eF9ibG9ja3NfYXZhaWxhYmxlID0gMDsKIAl3bC0+dHhfcmVzdWx0c19jb3VudCA9IDA7CkBAIC05ODYsNyArMTA0NCw5IEBACiAJd2wtPnR4X3NlY3VyaXR5X3NlcV8zMiA9IDA7CiAJd2wtPnRpbWVfb2Zmc2V0ID0gMDsKIAl3bC0+c2Vzc2lvbl9jb3VudGVyID0gMDsKLQl3bC0+am9pbmVkID0gZmFsc2U7CisJd2wtPnJhdGVfc2V0ID0gQ09ORl9UWF9SQVRFX01BU0tfQkFTSUM7CisJd2wtPnN0YV9yYXRlX3NldCA9IDA7CisJd2wtPmZsYWdzID0gMDsKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1fVFhfUVVFVUVTOyBpKyspCiAJCXdsLT50eF9ibG9ja3NfZnJlZWRbaV0gPSAwOwpAQCAtOTk2LDEzICsxMDU2LDEzIEBACiB9CiAKIHN0YXRpYyBpbnQgd2wxMjcxX29wX2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OwogCWludCByZXQgPSAwOwogCiAJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgYWRkIGludGVyZmFjZSB0eXBlICVkIG1hYyAlcE0iLAotCQkgICAgIGNvbmYtPnR5cGUsIGNvbmYtPm1hY19hZGRyKTsKKwkJICAgICB2aWYtPnR5cGUsIHZpZi0+YWRkcik7CiAKIAltdXRleF9sb2NrKCZ3bC0+bXV0ZXgpOwogCWlmICh3bC0+dmlmKSB7CkBAIC0xMDEwLDkgKzEwNzAsOSBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQl3bC0+dmlmID0gY29uZi0+dmlmOworCXdsLT52aWYgPSB2aWY7CiAKLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKIAkJd2wtPmJzc190eXBlID0gQlNTX1RZUEVfU1RBX0JTUzsKIAkJYnJlYWs7CkBAIC0xMDMyLDcgKzEwOTIsNyBAQAogfQogCiBzdGF0aWMgdm9pZCB3bDEyNzFfb3BfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKIAlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OwogCkBAIC0xMTA5LDYgKzExNjksNTEgQEAKIH0KICNlbmRpZgogCitzdGF0aWMgaW50IHdsMTI3MV9qb2luX2NoYW5uZWwoc3RydWN0IHdsMTI3MSAqd2wsIGludCBjaGFubmVsKQoreworCWludCByZXQgPSAwOworCS8qIHdlIG5lZWQgdG8gdXNlIGEgZHVtbXkgQlNTSUQgZm9yIG5vdyAqLworCXN0YXRpYyBjb25zdCB1OCBkdW1teV9ic3NpZFtFVEhfQUxFTl0gPSB7IDB4MGIsIDB4YWQsIDB4ZGUsCisJCQkJCQkgIDB4YWQsIDB4YmUsIDB4ZWYgfTsKKworCS8qIHRoZSBkdW1teSBqb2luIGlzIG5vdCByZXF1aXJlZCBmb3IgYWQtaG9jICovCisJaWYgKHdsLT5ic3NfdHlwZSA9PSBCU1NfVFlQRV9JQlNTKQorCQlnb3RvIG91dDsKKworCS8qIGRpc2FibGUgbWFjIGZpbHRlciwgc28gd2UgaGVhciBldmVyeXRoaW5nICovCisJd2wtPnJ4X2NvbmZpZyAmPSB+Q0ZHX0JTU0lEX0ZJTFRFUl9FTjsKKworCXdsLT5jaGFubmVsID0gY2hhbm5lbDsKKwltZW1jcHkod2wtPmJzc2lkLCBkdW1teV9ic3NpZCwgRVRIX0FMRU4pOworCisJcmV0ID0gd2wxMjcxX2NtZF9qb2luKHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlzZXRfYml0KFdMMTI3MV9GTEFHX0pPSU5FRCwgJndsLT5mbGFncyk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHdsMTI3MV91bmpvaW5fY2hhbm5lbChzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpbnQgcmV0OworCisJLyogdG8gc3RvcCBsaXN0ZW5pbmcgdG8gYSBjaGFubmVsLCB3ZSBkaXNjb25uZWN0ICovCisJcmV0ID0gd2wxMjcxX2NtZF9kaXNjb25uZWN0KHdsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfSk9JTkVELCAmd2wtPmZsYWdzKTsKKwl3bC0+Y2hhbm5lbCA9IDA7CisJbWVtc2V0KHdsLT5ic3NpZCwgMCwgRVRIX0FMRU4pOworCXdsLT5yeF9jb25maWcgPSBXTDEyNzFfREVGQVVMVF9SWF9DT05GSUc7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgaW50IHdsMTI3MV9vcF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQogewogCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CkBAIC0xMTE3LDEwICsxMjIyLDExIEBACiAKIAljaGFubmVsID0gaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGNvbmYtPmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAotCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGNvbmZpZyBjaCAlZCBwc20gJXMgcG93ZXIgJWQiLAorCXdsMTI3MV9kZWJ1ZyhERUJVR19NQUM4MDIxMSwgIm1hYzgwMjExIGNvbmZpZyBjaCAlZCBwc20gJXMgcG93ZXIgJWQgJXMiLAogCQkgICAgIGNoYW5uZWwsCiAJCSAgICAgY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUyA/ICJvbiIgOiAib2ZmIiwKLQkJICAgICBjb25mLT5wb3dlcl9sZXZlbCk7CisJCSAgICAgY29uZi0+cG93ZXJfbGV2ZWwsCisJCSAgICAgY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFID8gImlkbGUiIDogImluIHVzZSIpOwogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIApAQCAtMTEzMCwzNSArMTIzNiw1NSBAQAogCWlmIChyZXQgPCAwKQogCQlnb3RvIG91dDsKIAotCWlmIChjaGFubmVsICE9IHdsLT5jaGFubmVsKSB7Ci0JCS8qCi0JCSAqIFdlIGFzc3VtZSB0aGF0IHRoZSBzdGFjayB3aWxsIGNvbmZpZ3VyZSB0aGUgcmlnaHQgY2hhbm5lbAotCQkgKiBiZWZvcmUgYXNzb2NpYXRpbmcsIHNvIHdlIGRvbid0IG5lZWQgdG8gc2VuZCBhIGpvaW4KLQkJICogY29tbWFuZCBoZXJlLiAgV2Ugd2lsbCBqb2luIHRoZSByaWdodCBjaGFubmVsIHdoZW4gdGhlCi0JCSAqIEJTU0lEIGNoYW5nZXMKLQkJICovCi0JCXdsLT5jaGFubmVsID0gY2hhbm5lbDsKKwlpZiAoY2hhbmdlZCAmIElFRUU4MDIxMV9DT05GX0NIQU5HRV9JRExFKSB7CisJCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX0lETEUgJiYKKwkJICAgIHRlc3RfYml0KFdMMTI3MV9GTEFHX0pPSU5FRCwgJndsLT5mbGFncykpCisJCQl3bDEyNzFfdW5qb2luX2NoYW5uZWwod2wpOworCQllbHNlIGlmICghKGNvbmYtPmZsYWdzICYgSUVFRTgwMjExX0NPTkZfSURMRSkpCisJCQl3bDEyNzFfam9pbl9jaGFubmVsKHdsLCBjaGFubmVsKTsKKworCQlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9JRExFKSB7CisJCQl3bC0+cmF0ZV9zZXQgPSBDT05GX1RYX1JBVEVfTUFTS19CQVNJQzsKKwkJCXdsLT5zdGFfcmF0ZV9zZXQgPSAwOworCQkJd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHdsKTsKKwkJfQogCX0KIAotCWlmIChjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTICYmICF3bC0+cHNtX3JlcXVlc3RlZCkgewotCQl3bDEyNzFfaW5mbygicHNtIGVuYWJsZWQiKTsKKwkvKiBpZiB0aGUgY2hhbm5lbCBjaGFuZ2VzIHdoaWxlIGpvaW5lZCwgam9pbiBhZ2FpbiAqLworCWlmIChjaGFubmVsICE9IHdsLT5jaGFubmVsICYmCisJICAgIHRlc3RfYml0KFdMMTI3MV9GTEFHX0pPSU5FRCwgJndsLT5mbGFncykpIHsKKwkJd2wtPmNoYW5uZWwgPSBjaGFubmVsOworCQkvKiBGSVhNRTogbWF5YmUgdXNlIENNRF9DSEFOTkVMX1NXSVRDSCBmb3IgdGhpcz8gKi8KKwkJcmV0ID0gd2wxMjcxX2NtZF9qb2luKHdsKTsKKwkJaWYgKHJldCA8IDApCisJCQl3bDEyNzFfd2FybmluZygiY21kIGpvaW4gdG8gdXBkYXRlIGNoYW5uZWwgZmFpbGVkICVkIiwKKwkJCQkgICAgICAgcmV0KTsKKwl9IGVsc2UKKwkJd2wtPmNoYW5uZWwgPSBjaGFubmVsOwogCi0JCXdsLT5wc21fcmVxdWVzdGVkID0gdHJ1ZTsKKwlpZiAoY29uZi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUyAmJgorCSAgICAhdGVzdF9iaXQoV0wxMjcxX0ZMQUdfUFNNX1JFUVVFU1RFRCwgJndsLT5mbGFncykpIHsKKwkJc2V0X2JpdChXTDEyNzFfRkxBR19QU01fUkVRVUVTVEVELCAmd2wtPmZsYWdzKTsKIAogCQkvKgogCQkgKiBXZSBlbnRlciBQU00gb25seSBpZiB3ZSdyZSBhbHJlYWR5IGFzc29jaWF0ZWQuCiAJCSAqIElmIHdlJ3JlIG5vdCwgd2UnbGwgZW50ZXIgaXQgd2hlbiBqb2luaW5nIGFuIFNTSUQsCiAJCSAqIHRocm91Z2ggdGhlIGJzc19pbmZvX2NoYW5nZWQoKSBob29rLgogCQkgKi8KLQkJcmV0ID0gd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSk7CisJCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19TVEFfQVNTT0NJQVRFRCwgJndsLT5mbGFncykpIHsKKwkJCXdsMTI3MV9pbmZvKCJwc20gZW5hYmxlZCIpOworCQkJcmV0ID0gd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSwKKwkJCQkJCSB0cnVlKTsKKwkJfQogCX0gZWxzZSBpZiAoIShjb25mLT5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSAmJgotCQkgICB3bC0+cHNtX3JlcXVlc3RlZCkgeworCQkgICB0ZXN0X2JpdChXTDEyNzFfRkxBR19QU01fUkVRVUVTVEVELCAmd2wtPmZsYWdzKSkgewogCQl3bDEyNzFfaW5mbygicHNtIGRpc2FibGVkIik7CiAKLQkJd2wtPnBzbV9yZXF1ZXN0ZWQgPSBmYWxzZTsKKwkJY2xlYXJfYml0KFdMMTI3MV9GTEFHX1BTTV9SRVFVRVNURUQsICZ3bC0+ZmxhZ3MpOwogCi0JCWlmICh3bC0+cHNtKQotCQkJcmV0ID0gd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBTVEFUSU9OX0FDVElWRV9NT0RFKTsKKwkJaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTSwgJndsLT5mbGFncykpCisJCQlyZXQgPSB3bDEyNzFfcHNfc2V0X21vZGUod2wsIFNUQVRJT05fQUNUSVZFX01PREUsCisJCQkJCQkgdHJ1ZSk7CiAJfQogCiAJaWYgKGNvbmYtPnBvd2VyX2xldmVsICE9IHdsLT5wb3dlcl9sZXZlbCkgewpAQCAtMTM1MCw5ICsxNDc2LDI0IEBACiAJCQl3bDEyNzFfZXJyb3IoIkNvdWxkIG5vdCBhZGQgb3IgcmVwbGFjZSBrZXkiKTsKIAkJCWdvdG8gb3V0X3NsZWVwOwogCQl9CisKKwkJLyogdGhlIGRlZmF1bHQgV0VQIGtleSBuZWVkcyB0byBiZSBjb25maWd1cmVkIGF0IGxlYXN0IG9uY2UgKi8KKwkJaWYgKGtleV90eXBlID09IEtFWV9XRVApIHsKKwkJCXJldCA9IHdsMTI3MV9jbWRfc2V0X2RlZmF1bHRfd2VwX2tleSh3bCwKKwkJCQkJCQkgICAgIHdsLT5kZWZhdWx0X2tleSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dF9zbGVlcDsKKwkJfQogCQlicmVhazsKIAogCWNhc2UgRElTQUJMRV9LRVk6CisJCS8qIFRoZSB3bDEyNzEgZG9lcyBub3QgYWxsb3cgdG8gcmVtb3ZlIHVuaWNhc3Qga2V5cyAtIHRoZXkKKwkJICAgd2lsbCBiZSBjbGVhcmVkIGF1dG9tYXRpY2FsbHkgb24gbmV4dCBDTURfSk9JTi4gSWdub3JlIHRoZQorCQkgICByZXF1ZXN0IHNpbGVudGx5LCBhcyB3ZSBkb250IHdhbnQgdGhlIG1hYzgwMjExIHRvIGVtaXQKKwkJICAgYW4gZXJyb3IgbWVzc2FnZS4gKi8KKwkJaWYgKCFpc19icm9hZGNhc3RfZXRoZXJfYWRkcihhZGRyKSkKKwkJCWJyZWFrOworCiAJCXJldCA9IHdsMTI3MV9jbWRfc2V0X2tleSh3bCwgS0VZX1JFTU9WRSwKIAkJCQkJIGtleV9jb25mLT5rZXlpZHgsIGtleV90eXBlLAogCQkJCQkga2V5X2NvbmYtPmtleWxlbiwga2V5X2NvbmYtPmtleSwKQEAgLTE0NDAsMjAgKzE1ODEsMjEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdTMyIHdsMTI3MV9lbmFibGVkX3JhdGVzX2dldChzdHJ1Y3Qgd2wxMjcxICp3bCwgdTY0IGJhc2ljX3JhdGVfc2V0KQorc3RhdGljIHZvaWQgd2wxMjcxX3NzaWRfc2V0KHN0cnVjdCB3bDEyNzEgKndsLCBzdHJ1Y3Qgc2tfYnVmZiAqYmVhY29uKQogewotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKmJhbmQ7Ci0JdTMyIGVuYWJsZWRfcmF0ZXMgPSAwOwotCWludCBiaXQ7CisJdTggKnB0ciA9IGJlYWNvbi0+ZGF0YSArCisJCW9mZnNldG9mKHN0cnVjdCBpZWVlODAyMTFfbWdtdCwgdS5iZWFjb24udmFyaWFibGUpOwogCi0JYmFuZCA9IHdsLT5ody0+d2lwaHktPmJhbmRzW3dsLT5iYW5kXTsKLQlmb3IgKGJpdCA9IDA7IGJpdCA8IGJhbmQtPm5fYml0cmF0ZXM7IGJpdCsrKSB7Ci0JCWlmIChiYXNpY19yYXRlX3NldCAmIDB4MSkKLQkJCWVuYWJsZWRfcmF0ZXMgfD0gYmFuZC0+Yml0cmF0ZXNbYml0XS5od192YWx1ZTsKLQkJYmFzaWNfcmF0ZV9zZXQgPj49IDE7CisJLyogZmluZCB0aGUgbG9jYXRpb24gb2YgdGhlIHNzaWQgaW4gdGhlIGJlYWNvbiAqLworCXdoaWxlIChwdHIgPCBiZWFjb24tPmRhdGEgKyBiZWFjb24tPmxlbikgeworCQlpZiAocHRyWzBdID09IFdMQU5fRUlEX1NTSUQpIHsKKwkJCXdsLT5zc2lkX2xlbiA9IHB0clsxXTsKKwkJCW1lbWNweSh3bC0+c3NpZCwgcHRyKzIsIHdsLT5zc2lkX2xlbik7CisJCQlyZXR1cm47CisJCX0KKwkJcHRyICs9IHB0clsxXTsKIAl9Ci0KLQlyZXR1cm4gZW5hYmxlZF9yYXRlczsKKwl3bDEyNzFfZXJyb3IoImFkLWhvYyBiZWFjb24gdGVtcGxhdGUgaGFzIG5vIFNTSUQhXG4iKTsKIH0KIAogc3RhdGljIHZvaWQgd2wxMjcxX29wX2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCkBAIC0xNDYzLDYgKzE2MDUsNyBAQAogewogCWVudW0gd2wxMjcxX2NtZF9wc19tb2RlIG1vZGU7CiAJc3RydWN0IHdsMTI3MSAqd2wgPSBody0+cHJpdjsKKwlib29sIGRvX2pvaW4gPSBmYWxzZTsKIAlpbnQgcmV0OwogCiAJd2wxMjcxX2RlYnVnKERFQlVHX01BQzgwMjExLCAibWFjODAyMTEgYnNzIGluZm8gY2hhbmdlZCIpOwpAQCAtMTQ3Myw5ICsxNjE2LDY3IEBACiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwogCisJaWYgKHdsLT5ic3NfdHlwZSA9PSBCU1NfVFlQRV9JQlNTKSB7CisJCS8qIEZJWE1FOiBUaGlzIGltcGxlbWVudHMgcnVkaW1lbnRhcnkgYWQtaG9jIHN1cHBvcnQgLQorCQkgICBwcm9wZXIgdGVtcGxhdGVzIGFyZSBvbiB0aGUgd2lzaCBsaXN0IGFuZCBub3RpZmljYXRpb24KKwkJICAgb24gd2hlbiB0aGV5IGNoYW5nZS4gVGhpcyBwYXRjaCB3aWxsIHVwZGF0ZSB0aGUgdGVtcGxhdGVzCisJCSAgIG9uIGV2ZXJ5IGNhbGwgdG8gdGhpcyBmdW5jdGlvbi4gKi8KKwkJc3RydWN0IHNrX2J1ZmYgKmJlYWNvbiA9IGllZWU4MDIxMV9iZWFjb25fZ2V0KGh3LCB2aWYpOworCisJCWlmIChiZWFjb24pIHsKKwkJCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHI7CisKKwkJCXdsMTI3MV9zc2lkX3NldCh3bCwgYmVhY29uKTsKKwkJCXJldCA9IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHdsLCBDTURfVEVNUExfQkVBQ09OLAorCQkJCQkJICAgICAgYmVhY29uLT5kYXRhLAorCQkJCQkJICAgICAgYmVhY29uLT5sZW4pOworCisJCQlpZiAocmV0IDwgMCkgeworCQkJCWRldl9rZnJlZV9za2IoYmVhY29uKTsKKwkJCQlnb3RvIG91dF9zbGVlcDsKKwkJCX0KKworCQkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIGJlYWNvbi0+ZGF0YTsKKwkJCWhkci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KAorCQkJCUlFRUU4MDIxMV9GVFlQRV9NR01UIHwKKwkJCQlJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7CisKKwkJCXJldCA9IHdsMTI3MV9jbWRfdGVtcGxhdGVfc2V0KHdsLAorCQkJCQkJICAgICAgQ01EX1RFTVBMX1BST0JFX1JFU1BPTlNFLAorCQkJCQkJICAgICAgYmVhY29uLT5kYXRhLAorCQkJCQkJICAgICAgYmVhY29uLT5sZW4pOworCQkJZGV2X2tmcmVlX3NrYihiZWFjb24pOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXRfc2xlZXA7CisKKwkJCS8qIE5lZWQgdG8gdXBkYXRlIHRoZSBTU0lEIChmb3IgZmlsdGVyaW5nIGV0YykgKi8KKwkJCWRvX2pvaW4gPSB0cnVlOworCQl9CisJfQorCisJaWYgKChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQlNTSUQpICYmCisJICAgIC8qCisJICAgICAqIE5vdyB3ZSBrbm93IHRoZSBjb3JyZWN0IGJzc2lkLCBzbyB3ZSBzZW5kIGEgbmV3IGpvaW4gY29tbWFuZAorCSAgICAgKiBhbmQgZW5hYmxlIHRoZSBCU1NJRCBmaWx0ZXIKKwkgICAgICovCisJICAgIG1lbWNtcCh3bC0+YnNzaWQsIGJzc19jb25mLT5ic3NpZCwgRVRIX0FMRU4pKSB7CisJCQl3bC0+cnhfY29uZmlnIHw9IENGR19CU1NJRF9GSUxURVJfRU47CisJCQltZW1jcHkod2wtPmJzc2lkLCBic3NfY29uZi0+YnNzaWQsIEVUSF9BTEVOKTsKKwkJCXJldCA9IHdsMTI3MV9jbWRfYnVpbGRfbnVsbF9kYXRhKHdsKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJd2wxMjcxX3dhcm5pbmcoImNtZCBidWxkIG51bGwgZGF0YSBmYWlsZWQgJWQiLAorCQkJCQkgICAgICAgcmV0KTsKKwkJCQlnb3RvIG91dF9zbGVlcDsKKwkJCX0KKworCQkJLyogTmVlZCB0byB1cGRhdGUgdGhlIEJTU0lEIChmb3IgZmlsdGVyaW5nIGV0YykgKi8KKwkJCWRvX2pvaW4gPSB0cnVlOworCX0KKwogCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVNTT0MpIHsKIAkJaWYgKGJzc19jb25mLT5hc3NvYykgewogCQkJd2wtPmFpZCA9IGJzc19jb25mLT5haWQ7CisJCQlzZXRfYml0KFdMMTI3MV9GTEFHX1NUQV9BU1NPQ0lBVEVELCAmd2wtPmZsYWdzKTsKIAogCQkJLyoKIAkJCSAqIHdpdGggd2wxMjcxLCB3ZSBkb24ndCBuZWVkIHRvIHVwZGF0ZSB0aGUKQEAgLTE0OTIsMTUgKzE2OTMsMTYgQEAKIAkJCQlnb3RvIG91dF9zbGVlcDsKIAogCQkJLyogSWYgd2Ugd2FudCB0byBnbyBpbiBQU00gYnV0IHdlJ3JlIG5vdCB0aGVyZSB5ZXQgKi8KLQkJCWlmICh3bC0+cHNtX3JlcXVlc3RlZCAmJiAhd2wtPnBzbSkgeworCQkJaWYgKHRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTV9SRVFVRVNURUQsICZ3bC0+ZmxhZ3MpICYmCisJCQkgICAgIXRlc3RfYml0KFdMMTI3MV9GTEFHX1BTTSwgJndsLT5mbGFncykpIHsKIAkJCQltb2RlID0gU1RBVElPTl9QT1dFUl9TQVZFX01PREU7Ci0JCQkJcmV0ID0gd2wxMjcxX3BzX3NldF9tb2RlKHdsLCBtb2RlKTsKKwkJCQlyZXQgPSB3bDEyNzFfcHNfc2V0X21vZGUod2wsIG1vZGUsIHRydWUpOwogCQkJCWlmIChyZXQgPCAwKQogCQkJCQlnb3RvIG91dF9zbGVlcDsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCS8qIHVzZSBkZWZhdWx0cyB3aGVuIG5vdCBhc3NvY2lhdGVkICovCi0JCQl3bC0+YmFzaWNfcmF0ZV9zZXQgPSBXTDEyNzFfREVGQVVMVF9CQVNJQ19SQVRFX1NFVDsKKwkJCWNsZWFyX2JpdChXTDEyNzFfRkxBR19TVEFfQVNTT0NJQVRFRCwgJndsLT5mbGFncyk7CiAJCQl3bC0+YWlkID0gMDsKIAkJfQogCkBAIC0xNTM1LDE1ICsxNzM3LDEzIEBACiAJCX0KIAl9CiAKLQlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JBU0lDX1JBVEVTKSB7Ci0JCXdsLT5iYXNpY19yYXRlX3NldCA9IHdsMTI3MV9lbmFibGVkX3JhdGVzX2dldCgKLQkJCXdsLCBic3NfY29uZi0+YmFzaWNfcmF0ZXMpOwotCi0JCXJldCA9IHdsMTI3MV9hY3hfcmF0ZV9wb2xpY2llcyh3bCwgd2wtPmJhc2ljX3JhdGVfc2V0KTsKKwlpZiAoZG9fam9pbikgeworCQlyZXQgPSB3bDEyNzFfY21kX2pvaW4od2wpOwogCQlpZiAocmV0IDwgMCkgewotCQkJd2wxMjcxX3dhcm5pbmcoIlNldCByYXRlIHBvbGljaWVzIGZhaWxlZCAlZCIsIHJldCk7CisJCQl3bDEyNzFfd2FybmluZygiY21kIGpvaW4gZmFpbGVkICVkIiwgcmV0KTsKIAkJCWdvdG8gb3V0X3NsZWVwOwogCQl9CisJCXNldF9iaXQoV0wxMjcxX0ZMQUdfSk9JTkVELCAmd2wtPmZsYWdzKTsKIAl9CiAKIG91dF9zbGVlcDoKQEAgLTE1NTMsNiArMTc1Myw0MyBAQAogCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKIH0KIAorc3RhdGljIGludCB3bDEyNzFfb3BfY29uZl90eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKQoreworCXN0cnVjdCB3bDEyNzEgKndsID0gaHctPnByaXY7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfTUFDODAyMTEsICJtYWM4MDIxMSBjb25mIHR4ICVkIiwgcXVldWUpOworCisJcmV0ID0gd2wxMjcxX3BzX2VscF93YWtldXAod2wsIGZhbHNlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwlyZXQgPSB3bDEyNzFfYWN4X2FjX2NmZyh3bCwgd2wxMjcxX3R4X2dldF9xdWV1ZShxdWV1ZSksCisJCQkJcGFyYW1zLT5jd19taW4sIHBhcmFtcy0+Y3dfbWF4LAorCQkJCXBhcmFtcy0+YWlmcywgcGFyYW1zLT50eG9wKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXRfc2xlZXA7CisKKwlyZXQgPSB3bDEyNzFfYWN4X3RpZF9jZmcod2wsIHdsMTI3MV90eF9nZXRfcXVldWUocXVldWUpLAorCQkJCSBDT05GX0NIQU5ORUxfVFlQRV9FRENGLAorCQkJCSB3bDEyNzFfdHhfZ2V0X3F1ZXVlKHF1ZXVlKSwKKwkJCQkgQ09ORl9QU19TQ0hFTUVfTEVHQUNZX1BTUE9MTCwKKwkJCQkgQ09ORl9BQ0tfUE9MSUNZX0xFR0FDWSwgMCwgMCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0X3NsZWVwOworCitvdXRfc2xlZXA6CisJd2wxMjcxX3BzX2VscF9zbGVlcCh3bCk7CisKK291dDoKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCiAKIC8qIGNhbid0IGJlIGNvbnN0LCBtYWM4MDIxMSB3cml0ZXMgdG8gdGhpcyAqLwogc3RhdGljIHN0cnVjdCBpZWVlODAyMTFfcmF0ZSB3bDEyNzFfcmF0ZXNbXSA9IHsKQEAgLTE1OTksMTkgKzE4MzYsMTkgQEAKIAogLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCiBzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsIHdsMTI3MV9jaGFubmVsc1tdID0gewotCXsgLmh3X3ZhbHVlID0gMSwgLmNlbnRlcl9mcmVxID0gMjQxMn0sCi0JeyAuaHdfdmFsdWUgPSAyLCAuY2VudGVyX2ZyZXEgPSAyNDE3fSwKLQl7IC5od192YWx1ZSA9IDMsIC5jZW50ZXJfZnJlcSA9IDI0MjJ9LAotCXsgLmh3X3ZhbHVlID0gNCwgLmNlbnRlcl9mcmVxID0gMjQyN30sCi0JeyAuaHdfdmFsdWUgPSA1LCAuY2VudGVyX2ZyZXEgPSAyNDMyfSwKLQl7IC5od192YWx1ZSA9IDYsIC5jZW50ZXJfZnJlcSA9IDI0Mzd9LAotCXsgLmh3X3ZhbHVlID0gNywgLmNlbnRlcl9mcmVxID0gMjQ0Mn0sCi0JeyAuaHdfdmFsdWUgPSA4LCAuY2VudGVyX2ZyZXEgPSAyNDQ3fSwKLQl7IC5od192YWx1ZSA9IDksIC5jZW50ZXJfZnJlcSA9IDI0NTJ9LAotCXsgLmh3X3ZhbHVlID0gMTAsIC5jZW50ZXJfZnJlcSA9IDI0NTd9LAotCXsgLmh3X3ZhbHVlID0gMTEsIC5jZW50ZXJfZnJlcSA9IDI0NjJ9LAotCXsgLmh3X3ZhbHVlID0gMTIsIC5jZW50ZXJfZnJlcSA9IDI0Njd9LAotCXsgLmh3X3ZhbHVlID0gMTMsIC5jZW50ZXJfZnJlcSA9IDI0NzJ9LAorCXsgLmh3X3ZhbHVlID0gMSwgLmNlbnRlcl9mcmVxID0gMjQxMiwgLm1heF9wb3dlciA9IDI1IH0sCisJeyAuaHdfdmFsdWUgPSAyLCAuY2VudGVyX2ZyZXEgPSAyNDE3LCAubWF4X3Bvd2VyID0gMjUgfSwKKwl7IC5od192YWx1ZSA9IDMsIC5jZW50ZXJfZnJlcSA9IDI0MjIsIC5tYXhfcG93ZXIgPSAyNSB9LAorCXsgLmh3X3ZhbHVlID0gNCwgLmNlbnRlcl9mcmVxID0gMjQyNywgLm1heF9wb3dlciA9IDI1IH0sCisJeyAuaHdfdmFsdWUgPSA1LCAuY2VudGVyX2ZyZXEgPSAyNDMyLCAubWF4X3Bvd2VyID0gMjUgfSwKKwl7IC5od192YWx1ZSA9IDYsIC5jZW50ZXJfZnJlcSA9IDI0MzcsIC5tYXhfcG93ZXIgPSAyNSB9LAorCXsgLmh3X3ZhbHVlID0gNywgLmNlbnRlcl9mcmVxID0gMjQ0MiwgLm1heF9wb3dlciA9IDI1IH0sCisJeyAuaHdfdmFsdWUgPSA4LCAuY2VudGVyX2ZyZXEgPSAyNDQ3LCAubWF4X3Bvd2VyID0gMjUgfSwKKwl7IC5od192YWx1ZSA9IDksIC5jZW50ZXJfZnJlcSA9IDI0NTIsIC5tYXhfcG93ZXIgPSAyNSB9LAorCXsgLmh3X3ZhbHVlID0gMTAsIC5jZW50ZXJfZnJlcSA9IDI0NTcsIC5tYXhfcG93ZXIgPSAyNSB9LAorCXsgLmh3X3ZhbHVlID0gMTEsIC5jZW50ZXJfZnJlcSA9IDI0NjIsIC5tYXhfcG93ZXIgPSAyNSB9LAorCXsgLmh3X3ZhbHVlID0gMTIsIC5jZW50ZXJfZnJlcSA9IDI0NjcsIC5tYXhfcG93ZXIgPSAyNSB9LAorCXsgLmh3X3ZhbHVlID0gMTMsIC5jZW50ZXJfZnJlcSA9IDI0NzIsIC5tYXhfcG93ZXIgPSAyNSB9LAogfTsKIAogLyogY2FuJ3QgYmUgY29uc3QsIG1hYzgwMjExIHdyaXRlcyB0byB0aGlzICovCkBAIC0xNzE4LDYgKzE5NTUsOCBAQAogCS5od19zY2FuID0gd2wxMjcxX29wX2h3X3NjYW4sCiAJLmJzc19pbmZvX2NoYW5nZWQgPSB3bDEyNzFfb3BfYnNzX2luZm9fY2hhbmdlZCwKIAkuc2V0X3J0c190aHJlc2hvbGQgPSB3bDEyNzFfb3Bfc2V0X3J0c190aHJlc2hvbGQsCisJLmNvbmZfdHggPSB3bDEyNzFfb3BfY29uZl90eCwKKwlDRkc4MDIxMV9URVNUTU9ERV9DTUQod2wxMjcxX3RtX2NtZCkKIH07CiAKIHN0YXRpYyBpbnQgd2wxMjcxX3JlZ2lzdGVyX2h3KHN0cnVjdCB3bDEyNzEgKndsKQpAQCAtMTc1Nyw3ICsxOTk2LDggQEAKIAkJSUVFRTgwMjExX0hXX0JFQUNPTl9GSUxURVIgfAogCQlJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFM7CiAKLQl3bC0+aHctPndpcGh5LT5pbnRlcmZhY2VfbW9kZXMgPSBCSVQoTkw4MDIxMV9JRlRZUEVfU1RBVElPTik7CisJd2wtPmh3LT53aXBoeS0+aW50ZXJmYWNlX21vZGVzID0gQklUKE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHwKKwkJQklUKE5MODAyMTFfSUZUWVBFX0FESE9DKTsKIAl3bC0+aHctPndpcGh5LT5tYXhfc2Nhbl9zc2lkcyA9IDE7CiAJd2wtPmh3LT53aXBoeS0+YmFuZHNbSUVFRTgwMjExX0JBTkRfMkdIWl0gPSAmd2wxMjcxX2JhbmRfMmdoejsKIApAQCAtMTc4NSwyNCArMjAyNSwxNyBAQAogfTsKIAogI2RlZmluZSBXTDEyNzFfREVGQVVMVF9DSEFOTkVMIDAKLXN0YXRpYyBpbnQgX19kZXZpbml0IHdsMTI3MV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQorCitzdGF0aWMgc3RydWN0IGllZWU4MDIxMV9odyAqd2wxMjcxX2FsbG9jX2h3KHZvaWQpCiB7Ci0Jc3RydWN0IHdsMTJ4eF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodzsKIAlzdHJ1Y3Qgd2wxMjcxICp3bDsKLQlpbnQgcmV0LCBpOwotCXN0YXRpYyBjb25zdCB1OCBub2tpYV9vdWlbM10gPSB7MHgwMCwgMHgxZiwgMHhkZn07Ci0KLQlwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7Ci0JaWYgKCFwZGF0YSkgewotCQl3bDEyNzFfZXJyb3IoIm5vIHBsYXRmb3JtIGRhdGEiKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCWludCBpOwogCiAJaHcgPSBpZWVlODAyMTFfYWxsb2NfaHcoc2l6ZW9mKCp3bCksICZ3bDEyNzFfb3BzKTsKIAlpZiAoIWh3KSB7CiAJCXdsMTI3MV9lcnJvcigiY291bGQgbm90IGFsbG9jIGllZWU4MDIxMV9odyIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJfQogCiAJd2wgPSBody0+cHJpdjsKQEAgLTE4MTEsNDQgKzIwNDQsODAgQEAKIAlJTklUX0xJU1RfSEVBRCgmd2wtPmxpc3QpOwogCiAJd2wtPmh3ID0gaHc7Ci0JZGV2X3NldF9kcnZkYXRhKCZzcGktPmRldiwgd2wpOwotCXdsLT5zcGkgPSBzcGk7CiAKIAlza2JfcXVldWVfaGVhZF9pbml0KCZ3bC0+dHhfcXVldWUpOwogCiAJSU5JVF9ERUxBWUVEX1dPUksoJndsLT5lbHBfd29yaywgd2wxMjcxX2VscF93b3JrKTsKIAl3bC0+Y2hhbm5lbCA9IFdMMTI3MV9ERUZBVUxUX0NIQU5ORUw7Ci0Jd2wtPnNjYW5uaW5nID0gZmFsc2U7CiAJd2wtPmRlZmF1bHRfa2V5ID0gMDsKIAl3bC0+cnhfY291bnRlciA9IDA7CiAJd2wtPnJ4X2NvbmZpZyA9IFdMMTI3MV9ERUZBVUxUX1JYX0NPTkZJRzsKIAl3bC0+cnhfZmlsdGVyID0gV0wxMjcxX0RFRkFVTFRfUlhfRklMVEVSOwotCXdsLT5lbHAgPSBmYWxzZTsKLQl3bC0+cHNtID0gMDsKLQl3bC0+cHNtX3JlcXVlc3RlZCA9IGZhbHNlOwogCXdsLT5wc21fZW50cnlfcmV0cnkgPSAwOwotCXdsLT50eF9xdWV1ZV9zdG9wcGVkID0gZmFsc2U7CiAJd2wtPnBvd2VyX2xldmVsID0gV0wxMjcxX0RFRkFVTFRfUE9XRVJfTEVWRUw7Ci0Jd2wtPmJhc2ljX3JhdGVfc2V0ID0gV0wxMjcxX0RFRkFVTFRfQkFTSUNfUkFURV9TRVQ7CisJd2wtPmJhc2ljX3JhdGVfc2V0ID0gQ09ORl9UWF9SQVRFX01BU0tfQkFTSUM7CisJd2wtPnJhdGVfc2V0ID0gQ09ORl9UWF9SQVRFX01BU0tfQkFTSUM7CisJd2wtPnN0YV9yYXRlX3NldCA9IDA7CiAJd2wtPmJhbmQgPSBJRUVFODAyMTFfQkFORF8yR0haOwogCXdsLT52aWYgPSBOVUxMOwotCXdsLT5qb2luZWQgPSBmYWxzZTsKKwl3bC0+ZmxhZ3MgPSAwOwogCiAJZm9yIChpID0gMDsgaSA8IEFDWF9UWF9ERVNDUklQVE9SUzsgaSsrKQogCQl3bC0+dHhfZnJhbWVzW2ldID0gTlVMTDsKIAogCXNwaW5fbG9ja19pbml0KCZ3bC0+d2xfbG9jayk7CiAKLQkvKgotCSAqIEluIGNhc2Ugb3VyIE1BQyBhZGRyZXNzIGlzIG5vdCBjb3JyZWN0bHkgc2V0LAotCSAqIHdlIHVzZSBhIHJhbmRvbSBidXQgTm9raWEgTUFDLgotCSAqLwotCW1lbWNweSh3bC0+bWFjX2FkZHIsIG5va2lhX291aSwgMyk7Ci0JZ2V0X3JhbmRvbV9ieXRlcyh3bC0+bWFjX2FkZHIgKyAzLCAzKTsKLQogCXdsLT5zdGF0ZSA9IFdMMTI3MV9TVEFURV9PRkY7CiAJbXV0ZXhfaW5pdCgmd2wtPm11dGV4KTsKIAorCS8qIEFwcGx5IGRlZmF1bHQgZHJpdmVyIGNvbmZpZ3VyYXRpb24uICovCisJd2wxMjcxX2NvbmZfaW5pdCh3bCk7CisKKwlyZXR1cm4gaHc7Cit9CisKK2ludCB3bDEyNzFfZnJlZV9odyhzdHJ1Y3Qgd2wxMjcxICp3bCkKK3sKKwlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyh3bC0+aHcpOworCisJd2wxMjcxX2RlYnVnZnNfZXhpdCh3bCk7CisKKwlrZnJlZSh3bC0+dGFyZ2V0X21lbV9tYXApOworCXZmcmVlKHdsLT5mdyk7CisJd2wtPmZ3ID0gTlVMTDsKKwlrZnJlZSh3bC0+bnZzKTsKKwl3bC0+bnZzID0gTlVMTDsKKworCWtmcmVlKHdsLT5md19zdGF0dXMpOworCWtmcmVlKHdsLT50eF9yZXNfaWYpOworCisJaWVlZTgwMjExX2ZyZWVfaHcod2wtPmh3KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB3bDEyNzFfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3Qgd2wxMnh4X3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaHcgKmh3OworCXN0cnVjdCB3bDEyNzEgKndsOworCWludCByZXQ7CisKKwlwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJaWYgKCFwZGF0YSkgeworCQl3bDEyNzFfZXJyb3IoIm5vIHBsYXRmb3JtIGRhdGEiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaHcgPSB3bDEyNzFfYWxsb2NfaHcoKTsKKwlpZiAoSVNfRVJSKGh3KSkKKwkJcmV0dXJuIFBUUl9FUlIoaHcpOworCisJd2wgPSBody0+cHJpdjsKKworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHdsKTsKKwl3bC0+c3BpID0gc3BpOworCiAJLyogVGhpcyBpcyB0aGUgb25seSBTUEkgdmFsdWUgdGhhdCB3ZSBuZWVkIHRvIHNldCBoZXJlLCB0aGUgcmVzdAogCSAqIGNvbWVzIGZyb20gdGhlIGJvYXJkLXBlcmlwaGVyYWxzIGZpbGUgKi8KIAlzcGktPmJpdHNfcGVyX3dvcmQgPSAzMjsKQEAgLTE4OTAsOSArMjE1OSw2IEBACiAJfQogCWRldl9zZXRfZHJ2ZGF0YSgmd2wxMjcxX2RldmljZS5kZXYsIHdsKTsKIAotCS8qIEFwcGx5IGRlZmF1bHQgZHJpdmVyIGNvbmZpZ3VyYXRpb24uICovCi0Jd2wxMjcxX2NvbmZfaW5pdCh3bCk7Ci0KIAlyZXQgPSB3bDEyNzFfaW5pdF9pZWVlODAyMTEod2wpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3BsYXRmb3JtOwpAQCAtMTkyMywyMSArMjE4OSwxMCBAQAogewogCXN0cnVjdCB3bDEyNzEgKndsID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CiAKLQlpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyh3bC0+aHcpOwotCi0Jd2wxMjcxX2RlYnVnZnNfZXhpdCh3bCk7CiAJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJndsMTI3MV9kZXZpY2UpOwogCWZyZWVfaXJxKHdsLT5pcnEsIHdsKTsKLQlrZnJlZSh3bC0+dGFyZ2V0X21lbV9tYXApOwotCXZmcmVlKHdsLT5mdyk7Ci0Jd2wtPmZ3ID0gTlVMTDsKLQlrZnJlZSh3bC0+bnZzKTsKLQl3bC0+bnZzID0gTlVMTDsKIAotCWtmcmVlKHdsLT5md19zdGF0dXMpOwotCWtmcmVlKHdsLT50eF9yZXNfaWYpOwotCi0JaWVlZTgwMjExX2ZyZWVfaHcod2wtPmh3KTsKKwl3bDEyNzFfZnJlZV9odyh3bCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcHMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcHMuYwppbmRleCA1MDdjZDkxLi5lMmIxZWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3BzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9wcy5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAid2wxMjcxX3JlZy5oIgogI2luY2x1ZGUgIndsMTI3MV9wcy5oIgogI2luY2x1ZGUgIndsMTI3MV9zcGkuaCIKKyNpbmNsdWRlICJ3bDEyNzFfaW8uaCIKIAogI2RlZmluZSBXTDEyNzFfV0FLRVVQX1RJTUVPVVQgNTAwCiAKQEAgLTM5LDEyICs0MCwxMyBAQAogCiAJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKIAotCWlmICh3bC0+ZWxwIHx8ICF3bC0+cHNtKQorCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19JTl9FTFAsICZ3bC0+ZmxhZ3MpIHx8CisJICAgICF0ZXN0X2JpdChXTDEyNzFfRkxBR19QU00sICZ3bC0+ZmxhZ3MpKQogCQlnb3RvIG91dDsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19QU00sICJjaGlwIHRvIGVscCIpOwogCXdsMTI3MV9yYXdfd3JpdGUzMih3bCwgSFdfQUNDRVNTX0VMUF9DVFJMX1JFR19BRERSLCBFTFBDVFJMX1NMRUVQKTsKLQl3bC0+ZWxwID0gdHJ1ZTsKKwlzZXRfYml0KFdMMTI3MV9GTEFHX0lOX0VMUCwgJndsLT5mbGFncyk7CiAKIG91dDoKIAltdXRleF91bmxvY2soJndsLT5tdXRleCk7CkBAIC01NSw3ICs1Nyw3IEBACiAvKiBSb3V0aW5lcyB0byB0b2dnbGUgc2xlZXAgbW9kZSB3aGlsZSBpbiBFTFAgKi8KIHZvaWQgd2wxMjcxX3BzX2VscF9zbGVlcChzdHJ1Y3Qgd2wxMjcxICp3bCkKIHsKLQlpZiAod2wtPnBzbSkgeworCWlmICh0ZXN0X2JpdChXTDEyNzFfRkxBR19QU00sICZ3bC0+ZmxhZ3MpKSB7CiAJCWNhbmNlbF9kZWxheWVkX3dvcmsoJndsLT5lbHBfd29yayk7CiAJCWllZWU4MDIxMV9xdWV1ZV9kZWxheWVkX3dvcmsod2wtPmh3LCAmd2wtPmVscF93b3JrLAogCQkJCQltc2Vjc190b19qaWZmaWVzKEVMUF9FTlRSWV9ERUxBWSkpOwpAQCAtNzAsNyArNzIsNyBAQAogCXUzMiBzdGFydF90aW1lID0gamlmZmllczsKIAlib29sIHBlbmRpbmcgPSBmYWxzZTsKIAotCWlmICghd2wtPmVscCkKKwlpZiAoIXRlc3RfYml0KFdMMTI3MV9GTEFHX0lOX0VMUCwgJndsLT5mbGFncykpCiAJCXJldHVybiAwOwogCiAJd2wxMjcxX2RlYnVnKERFQlVHX1BTTSwgIndha2luZyB1cCBjaGlwIGZyb20gZWxwIik7CkBAIC0xMDEsNyArMTAzLDcgQEAKIAkJfQogCX0KIAotCXdsLT5lbHAgPSBmYWxzZTsKKwljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfSU5fRUxQLCAmd2wtPmZsYWdzKTsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19QU00sICJ3YWtldXAgdGltZTogJXUgbXMiLAogCQkgICAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIHN0YXJ0X3RpbWUpKTsKQEAgLTExNyw3ICsxMTksOCBAQAogCXJldHVybiAwOwogfQogCi1pbnQgd2wxMjcxX3BzX3NldF9tb2RlKHN0cnVjdCB3bDEyNzEgKndsLCBlbnVtIHdsMTI3MV9jbWRfcHNfbW9kZSBtb2RlKQoraW50IHdsMTI3MV9wc19zZXRfbW9kZShzdHJ1Y3Qgd2wxMjcxICp3bCwgZW51bSB3bDEyNzFfY21kX3BzX21vZGUgbW9kZSwKKwkJICAgICAgIGJvb2wgc2VuZCkKIHsKIAlpbnQgcmV0OwogCkBAIC0xMjUsMjUgKzEyOCwxMSBAQAogCWNhc2UgU1RBVElPTl9QT1dFUl9TQVZFX01PREU6CiAJCXdsMTI3MV9kZWJ1ZyhERUJVR19QU00sICJlbnRlcmluZyBwc20iKTsKIAotCQkvKiBlbmFibGUgYmVhY29uIGZpbHRlcmluZyAqLwotCQlyZXQgPSB3bDEyNzFfYWN4X2JlYWNvbl9maWx0ZXJfb3B0KHdsLCB0cnVlKTsKKwkJcmV0ID0gd2wxMjcxX2NtZF9wc19tb2RlKHdsLCBTVEFUSU9OX1BPV0VSX1NBVkVfTU9ERSwgc2VuZCk7CiAJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKIAotCQkvKiBlbmFibGUgYmVhY29uIGVhcmx5IHRlcm1pbmF0aW9uICovCi0JCXJldCA9IHdsMTI3MV9hY3hfYmV0X2VuYWJsZSh3bCwgdHJ1ZSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJcmV0dXJuIHJldDsKLQotCQlyZXQgPSB3bDEyNzFfY21kX3BzX21vZGUod2wsIFNUQVRJT05fUE9XRVJfU0FWRV9NT0RFKTsKLQkJaWYgKHJldCA8IDApCi0JCQlyZXR1cm4gcmV0OwotCi0JCXdsMTI3MV9wc19lbHBfc2xlZXAod2wpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7Ci0KLQkJd2wtPnBzbSA9IDE7CisJCXNldF9iaXQoV0wxMjcxX0ZMQUdfUFNNLCAmd2wtPmZsYWdzKTsKIAkJYnJlYWs7CiAJY2FzZSBTVEFUSU9OX0FDVElWRV9NT0RFOgogCWRlZmF1bHQ6CkBAIC0xNjIsMTEgKzE1MSwxMSBAQAogCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7CiAKLQkJcmV0ID0gd2wxMjcxX2NtZF9wc19tb2RlKHdsLCBTVEFUSU9OX0FDVElWRV9NT0RFKTsKKwkJcmV0ID0gd2wxMjcxX2NtZF9wc19tb2RlKHdsLCBTVEFUSU9OX0FDVElWRV9NT0RFLCBzZW5kKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCi0JCXdsLT5wc20gPSAwOworCQljbGVhcl9iaXQoV0wxMjcxX0ZMQUdfUFNNLCAmd2wtPmZsYWdzKTsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3BzLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3BzLmgKaW5kZXggNzc5NjUzZC4uOTQwMjc2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9wcy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcHMuaApAQCAtMjcsNyArMjcsOCBAQAogI2luY2x1ZGUgIndsMTI3MS5oIgogI2luY2x1ZGUgIndsMTI3MV9hY3guaCIKIAotaW50IHdsMTI3MV9wc19zZXRfbW9kZShzdHJ1Y3Qgd2wxMjcxICp3bCwgZW51bSB3bDEyNzFfY21kX3BzX21vZGUgbW9kZSk7CitpbnQgd2wxMjcxX3BzX3NldF9tb2RlKHN0cnVjdCB3bDEyNzEgKndsLCBlbnVtIHdsMTI3MV9jbWRfcHNfbW9kZSBtb2RlLAorCQkgICAgICAgYm9vbCBzZW5kKTsKIHZvaWQgd2wxMjcxX3BzX2VscF9zbGVlcChzdHJ1Y3Qgd2wxMjcxICp3bCk7CiBpbnQgd2wxMjcxX3BzX2VscF93YWtldXAoc3RydWN0IHdsMTI3MSAqd2wsIGJvb2wgY2hpcF9hd2FrZSk7CiB2b2lkIHdsMTI3MV9lbHBfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9yZWcuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcmVnLmgKaW5kZXggMWYyMzczOC4uOTkwOTYwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9yZWcuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3JlZy5oCkBAIC02Miw3MyArNjIsMTAgQEAKICNkZWZpbmUgV0wxMjcxX1NMVl9SRUdfREFUQSAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDAwOCkKICNkZWZpbmUgV0wxMjcxX1NMVl9SRUdfQURBVEEgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDAwYykKICNkZWZpbmUgV0wxMjcxX1NMVl9NRU1fREFUQSAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDAxOCkKLS8qCi0gKiBJbnRlcnJ1cHQgcmVnaXN0ZXJzLgotICogNjQgYml0IGludGVycnVwdCBzb3VyY2VzIHJlZ2lzdGVycyB3cyBjZWQuCi0gKiBzbWUgaW50ZXJ1cHRzIHdlcmUgcmVtb3ZlZCBhbmQgbmV3IG9uZXMgd2VyZSBhZGRlZC4KLSAqIE9yZGVyIHdhcyBjaGFuZ2VkLgotICovCi0jZGVmaW5lIEZJUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MDApCi0jZGVmaW5lIEZJUV9NQVNLX0wgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MDApCi0jZGVmaW5lIEZJUV9NQVNLX0ggICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MDQpCi0jZGVmaW5lIEZJUV9NQVNLX1NFVCAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MDgpCi0jZGVmaW5lIEZJUV9NQVNLX1NFVF9MICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MDgpCi0jZGVmaW5lIEZJUV9NQVNLX1NFVF9IICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MEMpCi0jZGVmaW5lIEZJUV9NQVNLX0NMUiAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MTApCi0jZGVmaW5lIEZJUV9NQVNLX0NMUl9MICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MTApCi0jZGVmaW5lIEZJUV9NQVNLX0NMUl9IICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MTQpCi0jZGVmaW5lIElSUV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MTgpCi0jZGVmaW5lIElSUV9NQVNLX0wgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MTgpCi0jZGVmaW5lIElSUV9NQVNLX0ggICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MUMpCi0jZGVmaW5lIElSUV9NQVNLX1NFVCAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MjApCi0jZGVmaW5lIElSUV9NQVNLX1NFVF9MICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MjApCi0jZGVmaW5lIElSUV9NQVNLX1NFVF9IICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MjQpCi0jZGVmaW5lIElSUV9NQVNLX0NMUiAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MjgpCi0jZGVmaW5lIElSUV9NQVNLX0NMUl9MICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MjgpCi0jZGVmaW5lIElSUV9NQVNLX0NMUl9IICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MkMpCi0jZGVmaW5lIEVDUFVfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NDgpCi0jZGVmaW5lIEZJUV9TVFNfTCAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NEMpCi0jZGVmaW5lIEZJUV9TVFNfSCAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NTApCi0jZGVmaW5lIElSUV9TVFNfTCAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NTQpCi0jZGVmaW5lIElSUV9TVFNfSCAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NTgpCi0jZGVmaW5lIElOVF9TVFNfTkQgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NjQpCi0jZGVmaW5lIElOVF9TVFNfUkFXX0wgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NjQpCi0jZGVmaW5lIElOVF9TVFNfUkFXX0ggICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NjgpCi0jZGVmaW5lIElOVF9TVFNfQ0xSICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0QjQpCi0jZGVmaW5lIElOVF9TVFNfQ0xSX0wgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0QjQpCi0jZGVmaW5lIElOVF9TVFNfQ0xSX0ggICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0QjgpCi0jZGVmaW5lIElOVF9BQ0sgICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NkMpCi0jZGVmaW5lIElOVF9BQ0tfTCAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NkMpCi0jZGVmaW5lIElOVF9BQ0tfSCAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NzApCi0jZGVmaW5lIElOVF9UUklHICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NzQpCi0jZGVmaW5lIElOVF9UUklHX0wgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NzQpCi0jZGVmaW5lIElOVF9UUklHX0ggICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NzgpCi0jZGVmaW5lIEhPU1RfU1RTX0wgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NUMpCi0jZGVmaW5lIEhPU1RfU1RTX0ggICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NjApCi0jZGVmaW5lIEhPU1RfTUFTSyAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MzApCi0jZGVmaW5lIEhPU1RfTUFTS19MICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MzApCi0jZGVmaW5lIEhPU1RfTUFTS19IICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MzQpCi0jZGVmaW5lIEhPU1RfTUFTS19TRVQgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MzgpCi0jZGVmaW5lIEhPU1RfTUFTS19TRVRfTCAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0MzgpCi0jZGVmaW5lIEhPU1RfTUFTS19TRVRfSCAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0M0MpCi0jZGVmaW5lIEhPU1RfTUFTS19DTFIgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NDApCi0jZGVmaW5lIEhPU1RfTUFTS19DTFJfTCAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NDApCi0jZGVmaW5lIEhPU1RfTUFTS19DTFJfSCAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0NDQpCiAKICNkZWZpbmUgQUNYX1JFR19JTlRFUlJVUFRfVFJJRyAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ3NCkKICNkZWZpbmUgQUNYX1JFR19JTlRFUlJVUFRfVFJJR19IICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ3OCkKIAotLyogSG9zdCBJbnRlcnJ1cHRzKi8KLSNkZWZpbmUgSElOVF9NQVNLICAgICAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ5NCkKLSNkZWZpbmUgSElOVF9NQVNLX1NFVCAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ5OCkKLSNkZWZpbmUgSElOVF9NQVNLX0NMUiAgICAgICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDQ5QykKLSNkZWZpbmUgSElOVF9TVFNfTkRfTUFTS0VEICAgICAgICAgICAgIChSRUdJU1RFUlNfQkFTRSArIDB4MDRBMCkKLS8qMTE1MCBzcGVjIGNhbGxzIHRoaXMgSElOVF9TVFNfUkFXKi8KLSNkZWZpbmUgSElOVF9TVFNfTkQJCSAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0QjApCi0jZGVmaW5lIEhJTlRfU1RTX0NMUiAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0QTQpCi0jZGVmaW5lIEhJTlRfQUNLICAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0QTgpCi0jZGVmaW5lIEhJTlRfVFJJRyAgICAgICAgICAgICAgICAgICAgICAoUkVHSVNURVJTX0JBU0UgKyAweDA0QUMpCi0KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEhvc3QgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgLSAzMmJpdCAoUlcpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDMzLDE2ICszNzAsNiBAQAogCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgUGh5IHJlZ3MKLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0jZGVmaW5lIEFDWF9QSFlfQUREUl9SRUcgICAgICAgICAgICAgICAgU0JCX0FERFIKLSNkZWZpbmUgQUNYX1BIWV9EQVRBX1JFRyAgICAgICAgICAgICAgICBTQkJfREFUQQotI2RlZmluZSBBQ1hfUEhZX0NUUkxfUkVHICAgICAgICAgICAgICAgIFNCQl9DVEwKLSNkZWZpbmUgQUNYX1BIWV9SRUdfV1JfTUFTSyAgICAgICAgICAgICAweDAwMDAwMDAxdWwKLSNkZWZpbmUgQUNYX1BIWV9SRUdfUkRfTUFTSyAgICAgICAgICAgICAweDAwMDAwMDAydWwKLQotCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgRUVQUk9NIFJlYWQvV3JpdGUgUmVxdWVzdCAzMmJpdCBSVwogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIDEgRUVfUkVBRCAtIEVFUFJPTSBSZWFkIFJlcXVlc3QgMSAtIFNldHRpbmcgdGhpcyBiaXQKQEAgLTUxMSwyOCArNDM4LDYgQEAKICNkZWZpbmUgQUNYX0NPTlRfV0lORF9NSU5fTUFTSyAgIDB4MDAwMDAwN2YKICNkZWZpbmUgQUNYX0NPTlRfV0lORF9NQVggICAgICAgIDB4MDNmZjAwMDAKIAotLyoKLSAqIEluZGlyZWN0IHNsYXZlIHJlZ2lzdGVyL21lbW9yeSByZWdpc3RlcnMKLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqLwotI2RlZmluZSBIV19TTEFWRV9SRUdfQUREUl9SRUcJCTB4MDAwMDAwMDQKLSNkZWZpbmUgSFdfU0xBVkVfUkVHX0RBVEFfUkVHCQkweDAwMDAwMDA4Ci0jZGVmaW5lIEhXX1NMQVZFX1JFR19DVFJMX1JFRwkJMHgwMDAwMDAwYwotCi0jZGVmaW5lIFNMQVZFX0FVVE9fSU5DCQkJCTB4MDAwMTAwMDAKLSNkZWZpbmUgU0xBVkVfTk9fQVVUT19JTkMJCQkweDAwMDAwMDAwCi0jZGVmaW5lIFNMQVZFX0hPU1RfTElUVExFX0VORElBTgkweDAwMDAwMDAwCi0KLSNkZWZpbmUgSFdfU0xBVkVfTUVNX0FERFJfUkVHCQlTTFZfTUVNX0FERFIKLSNkZWZpbmUgSFdfU0xBVkVfTUVNX0RBVEFfUkVHCQlTTFZfTUVNX0RBVEEKLSNkZWZpbmUgSFdfU0xBVkVfTUVNX0NUUkxfUkVHCQlTTFZfTUVNX0NUTAotI2RlZmluZSBIV19TTEFWRV9NRU1fRU5ESUFOX1JFRwkJU0xWX0VORF9DVEwKLQotI2RlZmluZSBIV19GVU5DX0VWRU5UX0lOVF9FTgkJMHg4MDAwCi0jZGVmaW5lIEhXX0ZVTkNfRVZFTlRfTUFTS19SRUcJCTB4MDAwMDAwMzQKLQotI2RlZmluZSBBQ1hfTUFDX1RJTUVTVEFNUF9SRUcJKE1BQ19USU1FU1RBTVApCi0KIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgSElfQ0ZHIEludGVyZmFjZSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIFZhbHVlcwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTY0NywxMCArNTUyLDYgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCi0jZGVmaW5lIFRORVRXMTI1MV9DSElQX0lEX1BHMV8wICAgICAgICAgMHgwNzAxMDEwMQotI2RlZmluZSBUTkVUVzEyNTFfQ0hJUF9JRF9QRzFfMSAgICAgICAgIDB4MDcwMjAxMDEKLSNkZWZpbmUgVE5FVFcxMjUxX0NISVBfSURfUEcxXzIJICAgICAgICAweDA3MDMwMTAxCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKICAgICBJbnRlcnJ1cHQgVHJpZ2dlciBSZWdpc3RlciAoSG9zdCAtPiBXaUxpbmspCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3J4LmMKaW5kZXggY2E2NDVmMy4uNjczMGY1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9yeC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfcnguYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIndsMTI3MV9yZWcuaCIKICNpbmNsdWRlICJ3bDEyNzFfcnguaCIKICNpbmNsdWRlICJ3bDEyNzFfc3BpLmgiCisjaW5jbHVkZSAid2wxMjcxX2lvLmgiCiAKIHN0YXRpYyB1OCB3bDEyNzFfcnhfZ2V0X21lbV9ibG9jayhzdHJ1Y3Qgd2wxMjcxX2Z3X3N0YXR1cyAqc3RhdHVzLAogCQkJCSAgdTMyIGRydl9yeF9jb3VudGVyKQpAQCAtMTY2LDcgKzE2Nyw3IEBACiAJfQogCiAJYnVmID0gc2tiX3B1dChza2IsIGxlbmd0aCk7Ci0Jd2wxMjcxX3NwaV9yZWFkKHdsLCBXTDEyNzFfU0xWX01FTV9EQVRBLCBidWYsIGxlbmd0aCwgdHJ1ZSk7CisJd2wxMjcxX3JlYWQod2wsIFdMMTI3MV9TTFZfTUVNX0RBVEEsIGJ1ZiwgbGVuZ3RoLCB0cnVlKTsKIAogCS8qIHRoZSBkYXRhIHJlYWQgc3RhcnRzIHdpdGggdGhlIGRlc2NyaXB0b3IgKi8KIAlkZXNjID0gKHN0cnVjdCB3bDEyNzFfcnhfZGVzY3JpcHRvciAqKSBidWY7CkBAIC0yMTAsMTUgKzIxMSwxMyBAQAogCQkJd2wtPnJ4X21lbV9wb29sX2FkZHIuYWRkciArIDQ7CiAKIAkJLyogQ2hvb3NlIHRoZSBibG9jayB3ZSB3YW50IHRvIHJlYWQgKi8KLQkJd2wxMjcxX3NwaV93cml0ZSh3bCwgV0wxMjcxX1NMVl9SRUdfREFUQSwKLQkJCQkgJndsLT5yeF9tZW1fcG9vbF9hZGRyLAotCQkJCSBzaXplb2Yod2wtPnJ4X21lbV9wb29sX2FkZHIpLCBmYWxzZSk7CisJCXdsMTI3MV93cml0ZSh3bCwgV0wxMjcxX1NMVl9SRUdfREFUQSwgJndsLT5yeF9tZW1fcG9vbF9hZGRyLAorCQkJICAgICBzaXplb2Yod2wtPnJ4X21lbV9wb29sX2FkZHIpLCBmYWxzZSk7CiAKIAkJd2wxMjcxX3J4X2hhbmRsZV9kYXRhKHdsLCBidWZfc2l6ZSk7CiAKIAkJd2wtPnJ4X2NvdW50ZXIrKzsKIAkJZHJ2X3J4X2NvdW50ZXIgPSB3bC0+cnhfY291bnRlciAmIE5VTV9SWF9QS1RfREVTQ19NT0RfTUFTSzsKKwkJd2wxMjcxX3dyaXRlMzIod2wsIFJYX0RSSVZFUl9DT1VOVEVSX0FERFJFU1MsIHdsLT5yeF9jb3VudGVyKTsKIAl9Ci0KLQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIFJYX0RSSVZFUl9DT1VOVEVSX0FERFJFU1MsIHdsLT5yeF9jb3VudGVyKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc3BpLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NwaS5jCmluZGV4IDAyOTc4YTEuLjY3YTgyOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc3BpLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9zcGkuYwpAQCAtMzAsMjggKzMwLDYgQEAKICNpbmNsdWRlICJ3bDEyeHhfODAyMTEuaCIKICNpbmNsdWRlICJ3bDEyNzFfc3BpLmgiCiAKLXN0YXRpYyBpbnQgd2wxMjcxX3RyYW5zbGF0ZV9hZGRyKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkcikKLXsKLQkvKgotCSAqIFRvIHRyYW5zbGF0ZSwgZmlyc3QgY2hlY2sgdG8gd2hpY2ggd2luZG93IG9mIGFkZHJlc3NlcyB0aGUKLQkgKiBwYXJ0aWN1bGFyIGFkZHJlc3MgYmVsb25ncy4gVGhlbiBzdWJ0cmFjdCB0aGUgc3RhcnRpbmcgYWRkcmVzcwotCSAqIG9mIHRoYXQgd2luZG93IGZyb20gdGhlIGFkZHJlc3MuIFRoZW4sIGFkZCBvZmZzZXQgb2YgdGhlCi0JICogdHJhbnNsYXRlZCByZWdpb24uCi0JICoKLQkgKiBUaGUgdHJhbnNsYXRlZCByZWdpb25zIG9jY3VyIG5leHQgdG8gZWFjaCBvdGhlciBpbiBwaHlzaWNhbCBkZXZpY2UKLQkgKiBtZW1vcnksIHNvIGp1c3QgYWRkIHRoZSBzaXplcyBvZiB0aGUgcHJlY2VlZGluZyBhZGRyZXNzIHJlZ2lvbnMgdG8KLQkgKiBnZXQgdGhlIG9mZnNldCB0byB0aGUgbmV3IHJlZ2lvbi4KLQkgKgotCSAqIEN1cnJlbnRseSwgb25seSB0aGUgdHdvIGZpcnN0IHJlZ2lvbnMgYXJlIGFkZHJlc3NlZCwgYW5kIHRoZQotCSAqIGFzc3VtcHRpb24gaXMgdGhhdCBhbGwgYWRkcmVzc2VzIHdpbGwgZmFsbCBpbnRvIGVpdGhlciBvZiB0aG9zZQotCSAqIHR3by4KLQkgKi8KLQlpZiAoKGFkZHIgPj0gd2wtPnBhcnQucmVnLnN0YXJ0KSAmJgotCSAgICAoYWRkciA8IHdsLT5wYXJ0LnJlZy5zdGFydCArIHdsLT5wYXJ0LnJlZy5zaXplKSkKLQkJcmV0dXJuIGFkZHIgLSB3bC0+cGFydC5yZWcuc3RhcnQgKyB3bC0+cGFydC5tZW0uc2l6ZTsKLQllbHNlCi0JCXJldHVybiBhZGRyIC0gd2wtPnBhcnQubWVtLnN0YXJ0OwotfQogCiB2b2lkIHdsMTI3MV9zcGlfcmVzZXQoc3RydWN0IHdsMTI3MSAqd2wpCiB7CkBAIC0xMzMsNjcgKzExMSw2IEBACiAJd2wxMjcxX2R1bXAoREVCVUdfU1BJLCAic3BpIGluaXQgLT4gIiwgY21kLCBXU1BJX0lOSVRfQ01EX0xFTik7CiB9CiAKLS8qIFNldCB0aGUgU1BJIHBhcnRpdGlvbnMgdG8gYWNjZXNzIHRoZSBjaGlwIGFkZHJlc3NlcwotICoKLSAqIFRvIHNpbXBsaWZ5IGRyaXZlciBjb2RlLCBhIGZpeGVkICh2aXJ0dWFsKSBtZW1vcnkgbWFwIGlzIGRlZmluZWQgZm9yCi0gKiByZWdpc3RlciBhbmQgbWVtb3J5IGFkZHJlc3Nlcy4gQmVjYXVzZSBpbiB0aGUgY2hpcHNldCwgaW4gZGlmZmVyZW50IHN0YWdlcwotICogb2Ygb3BlcmF0aW9uLCB0aG9zZSBhZGRyZXNzZXMgd2lsbCBtb3ZlIGFyb3VuZCwgYW4gYWRkcmVzcyB0cmFuc2xhdGlvbgotICogbWVjaGFuaXNtIGlzIHJlcXVpcmVkLgotICoKLSAqIFRoZXJlIGFyZSBmb3VyIHBhcnRpdGlvbnMgKHRocmVlIG1lbW9yeSBhbmQgb25lIHJlZ2lzdGVyIHBhcnRpdGlvbiksCi0gKiB3aGljaCBhcmUgbWFwcGVkIHRvIHR3byBkaWZmZXJlbnQgYXJlYXMgb2YgdGhlIGhhcmR3YXJlIG1lbW9yeS4KLSAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmlydHVhbCBhZGRyZXNzCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZQotICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICB8Ci0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uListLS0tKy0tPiBtZW0uc3RhcnQKLSAqICAgICAgICAgIFBoeXNpY2FsIGFkZHJlc3MgICAgLi4uICAgfCAgICB8Ci0gKiAgICAgICAgICAgICAgIHNwYWNlICAgICAgIC4uLiAgICAgIHwgICAgfCBbUEFSVF8wXQotICogICAgICAgICAgICAgICAgICAgICAgICAuLi4gICAgICAgICB8ICAgIHwKLSAqICAwMDAwMDAwMCAgPC0tKy0tLS0rLi4uICAgICAgICAgLi4uKy0tLS0rLS0+IG1lbS5zdGFydCArIG1lbS5zaXplCi0gKiAgICAgICAgICAgICAgIHwgICAgfCAgICAgICAgIC4uLiAgIHwgICAgfAotICogICAgICAgICAgICAgICB8TUVNIHwgICAgICAuLi4gICAgICB8ICAgIHwKLSAqICAgICAgICAgICAgICAgfCAgICB8ICAgLi4uICAgICAgICAgfCAgICB8Ci0gKiAgbWVtLnNpemUgIDwtLSstLS0tKy4uLiAgICAgICAgICAgIHwgICAgfCB7dW51c2VkIGFyZWEpCi0gKiAgICAgICAgICAgICAgIHwgICAgfCAgIC4uLiAgICAgICAgIHwgICAgfAotICogICAgICAgICAgICAgICB8UkVHIHwgICAgICAuLi4gICAgICB8ICAgIHwKLSAqICBtZW0uc2l6ZSAgICAgfCAgICB8ICAgICAgICAgLi4uICAgfCAgICB8Ci0gKiAgICAgICsgICAgIDwtLSstLS0tKy4uLiAgICAgICAgIC4uListLS0tKy0tPiByZWcuc3RhcnQKLSAqICByZWcuc2l6ZSAgICAgfCAgICB8ICAgLi4uICAgICAgICAgfCAgICB8Ci0gKiAgICAgICAgICAgICAgIHxNRU0yfCAgICAgIC4uLiAgICAgIHwgICAgfCBbUEFSVF8xXQotICogICAgICAgICAgICAgICB8ICAgIHwgICAgICAgICAuLi4gICB8ICAgIHwKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKy0tLS0rLS0+IHJlZy5zdGFydCArIHJlZy5zaXplCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgfAotICoKLSAqLwotaW50IHdsMTI3MV9zZXRfcGFydGl0aW9uKHN0cnVjdCB3bDEyNzEgKndsLAotCQkJIHN0cnVjdCB3bDEyNzFfcGFydGl0aW9uX3NldCAqcCkKLXsKLQkvKiBjb3B5IHBhcnRpdGlvbiBpbmZvICovCi0JbWVtY3B5KCZ3bC0+cGFydCwgcCwgc2l6ZW9mKCpwKSk7Ci0KLQl3bDEyNzFfZGVidWcoREVCVUdfU1BJLCAibWVtX3N0YXJ0ICUwOFggbWVtX3NpemUgJTA4WCIsCi0JCSAgICAgcC0+bWVtLnN0YXJ0LCBwLT5tZW0uc2l6ZSk7Ci0Jd2wxMjcxX2RlYnVnKERFQlVHX1NQSSwgInJlZ19zdGFydCAlMDhYIHJlZ19zaXplICUwOFgiLAotCQkgICAgIHAtPnJlZy5zdGFydCwgcC0+cmVnLnNpemUpOwotCXdsMTI3MV9kZWJ1ZyhERUJVR19TUEksICJtZW0yX3N0YXJ0ICUwOFggbWVtMl9zaXplICUwOFgiLAotCQkgICAgIHAtPm1lbTIuc3RhcnQsIHAtPm1lbTIuc2l6ZSk7Ci0Jd2wxMjcxX2RlYnVnKERFQlVHX1NQSSwgIm1lbTNfc3RhcnQgJTA4WCBtZW0zX3NpemUgJTA4WCIsCi0JCSAgICAgcC0+bWVtMy5zdGFydCwgcC0+bWVtMy5zaXplKTsKLQotCS8qIHdyaXRlIHBhcnRpdGlvbiBpbmZvIHRvIHRoZSBjaGlwc2V0ICovCi0Jd2wxMjcxX3Jhd193cml0ZTMyKHdsLCBIV19QQVJUMF9TVEFSVF9BRERSLCBwLT5tZW0uc3RhcnQpOwotCXdsMTI3MV9yYXdfd3JpdGUzMih3bCwgSFdfUEFSVDBfU0laRV9BRERSLCBwLT5tZW0uc2l6ZSk7Ci0Jd2wxMjcxX3Jhd193cml0ZTMyKHdsLCBIV19QQVJUMV9TVEFSVF9BRERSLCBwLT5yZWcuc3RhcnQpOwotCXdsMTI3MV9yYXdfd3JpdGUzMih3bCwgSFdfUEFSVDFfU0laRV9BRERSLCBwLT5yZWcuc2l6ZSk7Ci0Jd2wxMjcxX3Jhd193cml0ZTMyKHdsLCBIV19QQVJUMl9TVEFSVF9BRERSLCBwLT5tZW0yLnN0YXJ0KTsKLQl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIEhXX1BBUlQyX1NJWkVfQUREUiwgcC0+bWVtMi5zaXplKTsKLQl3bDEyNzFfcmF3X3dyaXRlMzIod2wsIEhXX1BBUlQzX1NUQVJUX0FERFIsIHAtPm1lbTMuc3RhcnQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KICNkZWZpbmUgV0wxMjcxX0JVU1lfV09SRF9USU1FT1VUIDEwMDAKIAogLyogRklYTUU6IENoZWNrIGJ1c3kgd29yZHMsIHJlbW92ZWQgZHVlIHRvIFNQSSBidWcgKi8KQEAgLTMzOCw3OCArMjU1LDMgQEAKIAl3bDEyNzFfZHVtcChERUJVR19TUEksICJzcGlfd3JpdGUgY21kIC0+ICIsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKIAl3bDEyNzFfZHVtcChERUJVR19TUEksICJzcGlfd3JpdGUgYnVmIC0+ICIsIGJ1ZiwgbGVuKTsKIH0KLQotdm9pZCB3bDEyNzFfc3BpX3JlYWQoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW4sCi0JCSAgICAgYm9vbCBmaXhlZCkKLXsKLQlpbnQgcGh5c2ljYWw7Ci0KLQlwaHlzaWNhbCA9IHdsMTI3MV90cmFuc2xhdGVfYWRkcih3bCwgYWRkcik7Ci0KLQl3bDEyNzFfc3BpX3Jhd19yZWFkKHdsLCBwaHlzaWNhbCwgYnVmLCBsZW4sIGZpeGVkKTsKLX0KLQotdm9pZCB3bDEyNzFfc3BpX3dyaXRlKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLAotCQkgICAgICBib29sIGZpeGVkKQotewotCWludCBwaHlzaWNhbDsKLQotCXBoeXNpY2FsID0gd2wxMjcxX3RyYW5zbGF0ZV9hZGRyKHdsLCBhZGRyKTsKLQotCXdsMTI3MV9zcGlfcmF3X3dyaXRlKHdsLCBwaHlzaWNhbCwgYnVmLCBsZW4sIGZpeGVkKTsKLX0KLQotdTMyIHdsMTI3MV9zcGlfcmVhZDMyKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkcikKLXsKLQlyZXR1cm4gd2wxMjcxX3Jhd19yZWFkMzIod2wsIHdsMTI3MV90cmFuc2xhdGVfYWRkcih3bCwgYWRkcikpOwotfQotCi12b2lkIHdsMTI3MV9zcGlfd3JpdGUzMihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHUzMiB2YWwpCi17Ci0Jd2wxMjcxX3Jhd193cml0ZTMyKHdsLCB3bDEyNzFfdHJhbnNsYXRlX2FkZHIod2wsIGFkZHIpLCB2YWwpOwotfQotCi12b2lkIHdsMTI3MV90b3BfcmVnX3dyaXRlKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdTE2IHZhbCkKLXsKLQkvKiB3cml0ZSBhZGRyZXNzID4+IDEgKyAweDMwMDAwIHRvIE9DUF9QT1JfQ1RSICovCi0JYWRkciA9IChhZGRyID4+IDEpICsgMHgzMDAwMDsKLQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIE9DUF9QT1JfQ1RSLCBhZGRyKTsKLQotCS8qIHdyaXRlIHZhbHVlIHRvIE9DUF9QT1JfV0RBVEEgKi8KLQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIE9DUF9EQVRBX1dSSVRFLCB2YWwpOwotCi0JLyogd3JpdGUgMSB0byBPQ1BfQ01EICovCi0Jd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBPQ1BfQ01ELCBPQ1BfQ01EX1dSSVRFKTsKLX0KLQotdTE2IHdsMTI3MV90b3BfcmVnX3JlYWQoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyKQotewotCXUzMiB2YWw7Ci0JaW50IHRpbWVvdXQgPSBPQ1BfQ01EX0xPT1A7Ci0KLQkvKiB3cml0ZSBhZGRyZXNzID4+IDEgKyAweDMwMDAwIHRvIE9DUF9QT1JfQ1RSICovCi0JYWRkciA9IChhZGRyID4+IDEpICsgMHgzMDAwMDsKLQl3bDEyNzFfc3BpX3dyaXRlMzIod2wsIE9DUF9QT1JfQ1RSLCBhZGRyKTsKLQotCS8qIHdyaXRlIDIgdG8gT0NQX0NNRCAqLwotCXdsMTI3MV9zcGlfd3JpdGUzMih3bCwgT0NQX0NNRCwgT0NQX0NNRF9SRUFEKTsKLQotCS8qIHBvbGwgZm9yIGRhdGEgcmVhZHkgKi8KLQlkbyB7Ci0JCXZhbCA9IHdsMTI3MV9zcGlfcmVhZDMyKHdsLCBPQ1BfREFUQV9SRUFEKTsKLQkJdGltZW91dC0tOwotCX0gd2hpbGUgKCEodmFsICYgT0NQX1JFQURZX01BU0spICYmIHRpbWVvdXQpOwotCi0JaWYgKCF0aW1lb3V0KSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJUb3AgcmVnaXN0ZXIgYWNjZXNzIHRpbWVkIG91dC4iKTsKLQkJcmV0dXJuIDB4ZmZmZjsKLQl9Ci0KLQkvKiBjaGVjayBkYXRhIHN0YXR1cyBhbmQgcmV0dXJuIGlmIE9LICovCi0JaWYgKCh2YWwgJiBPQ1BfU1RBVFVTX01BU0spID09IE9DUF9TVEFUVVNfT0spCi0JCXJldHVybiB2YWwgJiAweGZmZmY7Ci0JZWxzZSB7Ci0JCXdsMTI3MV93YXJuaW5nKCJUb3AgcmVnaXN0ZXIgYWNjZXNzIHJldHVybmVkIGVycm9yLiIpOwotCQlyZXR1cm4gMHhmZmZmOwotCX0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc3BpLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3NwaS5oCmluZGV4IGNiN2RmMWMuLmE4MDM1OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfc3BpLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV9zcGkuaApAQCAtOTAsMzcgKzkwLDcgQEAKIHZvaWQgd2wxMjcxX3NwaV9yYXdfcmVhZChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHZvaWQgKmJ1ZiwKIAkJICAgICBzaXplX3QgbGVuLCBib29sIGZpeGVkKTsKIAotLyogVHJhbnNsYXRlZCB0YXJnZXQgSU8gKi8KLXZvaWQgd2wxMjcxX3NwaV9yZWFkKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLAotCQkgICAgIGJvb2wgZml4ZWQpOwotdm9pZCB3bDEyNzFfc3BpX3dyaXRlKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuLAotCQkgICAgICBib29sIGZpeGVkKTsKLXUzMiB3bDEyNzFfc3BpX3JlYWQzMihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpOwotdm9pZCB3bDEyNzFfc3BpX3dyaXRlMzIoc3RydWN0IHdsMTI3MSAqd2wsIGludCBhZGRyLCB1MzIgdmFsKTsKLQotLyogVG9wIFJlZ2lzdGVyIElPICovCi12b2lkIHdsMTI3MV90b3BfcmVnX3dyaXRlKHN0cnVjdCB3bDEyNzEgKndsLCBpbnQgYWRkciwgdTE2IHZhbCk7Ci11MTYgd2wxMjcxX3RvcF9yZWdfcmVhZChzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpOwotCiAvKiBJTklUIGFuZCBSRVNFVCB3b3JkcyAqLwogdm9pZCB3bDEyNzFfc3BpX3Jlc2V0KHN0cnVjdCB3bDEyNzEgKndsKTsKIHZvaWQgd2wxMjcxX3NwaV9pbml0KHN0cnVjdCB3bDEyNzEgKndsKTsKLWludCB3bDEyNzFfc2V0X3BhcnRpdGlvbihzdHJ1Y3Qgd2wxMjcxICp3bCwKLQkJCSBzdHJ1Y3Qgd2wxMjcxX3BhcnRpdGlvbl9zZXQgKnApOwotCi1zdGF0aWMgaW5saW5lIHUzMiB3bDEyNzFfcmF3X3JlYWQzMihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIpCi17Ci0Jd2wxMjcxX3NwaV9yYXdfcmVhZCh3bCwgYWRkciwgJndsLT5idWZmZXJfMzIsCi0JCQkgICAgc2l6ZW9mKHdsLT5idWZmZXJfMzIpLCBmYWxzZSk7Ci0KLQlyZXR1cm4gd2wtPmJ1ZmZlcl8zMjsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHdsMTI3MV9yYXdfd3JpdGUzMihzdHJ1Y3Qgd2wxMjcxICp3bCwgaW50IGFkZHIsIHUzMiB2YWwpCi17Ci0Jd2wtPmJ1ZmZlcl8zMiA9IHZhbDsKLQl3bDEyNzFfc3BpX3Jhd193cml0ZSh3bCwgYWRkciwgJndsLT5idWZmZXJfMzIsCi0JCQkgICAgIHNpemVvZih3bC0+YnVmZmVyXzMyKSwgZmFsc2UpOwotfQotCiAjZW5kaWYgLyogX19XTDEyNzFfU1BJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90ZXN0bW9kZS5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90ZXN0bW9kZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MTkxMDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3Rlc3Rtb2RlLmMKQEAgLTAsMCArMSwyODMgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKyNpbmNsdWRlICJ3bDEyNzFfdGVzdG1vZGUuaCIKKworI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KKworI2luY2x1ZGUgIndsMTI3MS5oIgorI2luY2x1ZGUgIndsMTI3MV9zcGkuaCIKKyNpbmNsdWRlICJ3bDEyNzFfYWN4LmgiCisKKyNkZWZpbmUgV0wxMjcxX1RNX01BWF9EQVRBX0xFTkdUSCAxMDI0CisKK2VudW0gd2wxMjcxX3RtX2NvbW1hbmRzIHsKKwlXTDEyNzFfVE1fQ01EX1VOU1BFQywKKwlXTDEyNzFfVE1fQ01EX1RFU1QsCisJV0wxMjcxX1RNX0NNRF9JTlRFUlJPR0FURSwKKwlXTDEyNzFfVE1fQ01EX0NPTkZJR1VSRSwKKwlXTDEyNzFfVE1fQ01EX05WU19QVVNILAorCVdMMTI3MV9UTV9DTURfU0VUX1BMVF9NT0RFLAorCisJX19XTDEyNzFfVE1fQ01EX0FGVEVSX0xBU1QKK307CisjZGVmaW5lIFdMMTI3MV9UTV9DTURfTUFYIChfX1dMMTI3MV9UTV9DTURfQUZURVJfTEFTVCAtIDEpCisKK2VudW0gd2wxMjcxX3RtX2F0dHJzIHsKKwlXTDEyNzFfVE1fQVRUUl9VTlNQRUMsCisJV0wxMjcxX1RNX0FUVFJfQ01EX0lELAorCVdMMTI3MV9UTV9BVFRSX0FOU1dFUiwKKwlXTDEyNzFfVE1fQVRUUl9EQVRBLAorCVdMMTI3MV9UTV9BVFRSX0lFX0lELAorCVdMMTI3MV9UTV9BVFRSX1BMVF9NT0RFLAorCisJX19XTDEyNzFfVE1fQVRUUl9BRlRFUl9MQVNUCit9OworI2RlZmluZSBXTDEyNzFfVE1fQVRUUl9NQVggKF9fV0wxMjcxX1RNX0FUVFJfQUZURVJfTEFTVCAtIDEpCisKK3N0YXRpYyBzdHJ1Y3QgbmxhX3BvbGljeSB3bDEyNzFfdG1fcG9saWN5W1dMMTI3MV9UTV9BVFRSX01BWCArIDFdID0geworCVtXTDEyNzFfVE1fQVRUUl9DTURfSURdID0JeyAudHlwZSA9IE5MQV9VMzIgfSwKKwlbV0wxMjcxX1RNX0FUVFJfQU5TV0VSXSA9CXsgLnR5cGUgPSBOTEFfVTggfSwKKwlbV0wxMjcxX1RNX0FUVFJfREFUQV0gPQkJeyAudHlwZSA9IE5MQV9CSU5BUlksCisJCQkJCSAgLmxlbiA9IFdMMTI3MV9UTV9NQVhfREFUQV9MRU5HVEggfSwKKwlbV0wxMjcxX1RNX0FUVFJfSUVfSURdID0JeyAudHlwZSA9IE5MQV9VMzIgfSwKKwlbV0wxMjcxX1RNX0FUVFJfUExUX01PREVdID0JeyAudHlwZSA9IE5MQV9VMzIgfSwKK307CisKKworc3RhdGljIGludCB3bDEyNzFfdG1fY21kX3Rlc3Qoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBubGF0dHIgKnRiW10pCit7CisJaW50IGJ1Zl9sZW4sIHJldCwgbGVuOworCXN0cnVjdCBza19idWZmICpza2I7CisJdm9pZCAqYnVmOworCXU4IGFuc3dlciA9IDA7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfVEVTVE1PREUsICJ0ZXN0bW9kZSBjbWQgdGVzdCIpOworCisJaWYgKCF0YltXTDEyNzFfVE1fQVRUUl9EQVRBXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlidWYgPSBubGFfZGF0YSh0YltXTDEyNzFfVE1fQVRUUl9EQVRBXSk7CisJYnVmX2xlbiA9IG5sYV9sZW4odGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pOworCisJaWYgKHRiW1dMMTI3MV9UTV9BVFRSX0FOU1dFUl0pCisJCWFuc3dlciA9IG5sYV9nZXRfdTgodGJbV0wxMjcxX1RNX0FUVFJfQU5TV0VSXSk7CisKKwlpZiAoYnVmX2xlbiA+IHNpemVvZihzdHJ1Y3Qgd2wxMjcxX2NvbW1hbmQpKQorCQlyZXR1cm4gLUVNU0dTSVpFOworCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKwlyZXQgPSB3bDEyNzFfY21kX3Rlc3Qod2wsIGJ1ZiwgYnVmX2xlbiwgYW5zd2VyKTsKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygidGVzdG1vZGUgY21kIHRlc3QgZmFpbGVkOiAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKGFuc3dlcikgeworCQlsZW4gPSBubGFfdG90YWxfc2l6ZShidWZfbGVuKTsKKwkJc2tiID0gY2ZnODAyMTFfdGVzdG1vZGVfYWxsb2NfcmVwbHlfc2tiKHdsLT5ody0+d2lwaHksIGxlbik7CisJCWlmICghc2tiKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJTkxBX1BVVChza2IsIFdMMTI3MV9UTV9BVFRSX0RBVEEsIGJ1Zl9sZW4sIGJ1Zik7CisJCXJldCA9IGNmZzgwMjExX3Rlc3Rtb2RlX3JlcGx5KHNrYik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKKworbmxhX3B1dF9mYWlsdXJlOgorCWtmcmVlX3NrYihza2IpOworCXJldHVybiAtRU1TR1NJWkU7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX3RtX2NtZF9pbnRlcnJvZ2F0ZShzdHJ1Y3Qgd2wxMjcxICp3bCwgc3RydWN0IG5sYXR0ciAqdGJbXSkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCB3bDEyNzFfY29tbWFuZCAqY21kOworCXN0cnVjdCBza19idWZmICpza2I7CisJdTggaWVfaWQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfVEVTVE1PREUsICJ0ZXN0bW9kZSBjbWQgaW50ZXJyb2dhdGUiKTsKKworCWlmICghdGJbV0wxMjcxX1RNX0FUVFJfSUVfSURdKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWllX2lkID0gbmxhX2dldF91OCh0YltXTDEyNzFfVE1fQVRUUl9JRV9JRF0pOworCisJY21kID0ga3phbGxvYyhzaXplb2YoKmNtZCksIEdGUF9LRVJORUwpOworCWlmICghY21kKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisJcmV0ID0gd2wxMjcxX2NtZF9pbnRlcnJvZ2F0ZSh3bCwgaWVfaWQsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKwltdXRleF91bmxvY2soJndsLT5tdXRleCk7CisKKwlpZiAocmV0IDwgMCkgeworCQl3bDEyNzFfd2FybmluZygidGVzdG1vZGUgY21kIGludGVycm9nYXRlIGZhaWxlZDogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXNrYiA9IGNmZzgwMjExX3Rlc3Rtb2RlX2FsbG9jX3JlcGx5X3NrYih3bC0+aHctPndpcGh5LCBzaXplb2YoKmNtZCkpOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT01FTTsKKworCU5MQV9QVVQoc2tiLCBXTDEyNzFfVE1fQVRUUl9EQVRBLCBzaXplb2YoKmNtZCksIGNtZCk7CisKKwlyZXR1cm4gMDsKKworbmxhX3B1dF9mYWlsdXJlOgorCWtmcmVlX3NrYihza2IpOworCXJldHVybiAtRU1TR1NJWkU7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX3RtX2NtZF9jb25maWd1cmUoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBubGF0dHIgKnRiW10pCit7CisJaW50IGJ1Zl9sZW4sIHJldDsKKwl2b2lkICpidWY7CisJdTggaWVfaWQ7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfVEVTVE1PREUsICJ0ZXN0bW9kZSBjbWQgY29uZmlndXJlIik7CisKKwlpZiAoIXRiW1dMMTI3MV9UTV9BVFRSX0RBVEFdKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXRiW1dMMTI3MV9UTV9BVFRSX0lFX0lEXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZV9pZCA9IG5sYV9nZXRfdTgodGJbV0wxMjcxX1RNX0FUVFJfSUVfSURdKTsKKwlidWYgPSBubGFfZGF0YSh0YltXTDEyNzFfVE1fQVRUUl9EQVRBXSk7CisJYnVmX2xlbiA9IG5sYV9sZW4odGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pOworCisJaWYgKGJ1Zl9sZW4gPiBzaXplb2Yoc3RydWN0IHdsMTI3MV9jb21tYW5kKSkKKwkJcmV0dXJuIC1FTVNHU0laRTsKKworCW11dGV4X2xvY2soJndsLT5tdXRleCk7CisJcmV0ID0gd2wxMjcxX2NtZF9jb25maWd1cmUod2wsIGllX2lkLCBidWYsIGJ1Zl9sZW4pOworCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCWlmIChyZXQgPCAwKSB7CisJCXdsMTI3MV93YXJuaW5nKCJ0ZXN0bW9kZSBjbWQgY29uZmlndXJlIGZhaWxlZDogJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdsMTI3MV90bV9jbWRfbnZzX3B1c2goc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBubGF0dHIgKnRiW10pCit7CisJaW50IHJldCA9IDA7CisJc2l6ZV90IGxlbjsKKwl2b2lkICpidWY7CisKKwl3bDEyNzFfZGVidWcoREVCVUdfVEVTVE1PREUsICJ0ZXN0bW9kZSBjbWQgbnZzIHB1c2giKTsKKworCWlmICghdGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pCisJCXJldHVybiAtRUlOVkFMOworCisJYnVmID0gbmxhX2RhdGEodGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pOworCWxlbiA9IG5sYV9sZW4odGJbV0wxMjcxX1RNX0FUVFJfREFUQV0pOworCisJaWYgKGxlbiAhPSBzaXplb2Yoc3RydWN0IHdsMTI3MV9udnNfZmlsZSkpIHsKKwkJd2wxMjcxX2Vycm9yKCJudnMgc2l6ZSBpcyBub3QgYXMgZXhwZWN0ZWQ6ICV6dSAhPSAlenUiLAorCQkJICAgICBsZW4sIHNpemVvZihzdHJ1Y3Qgd2wxMjcxX252c19maWxlKSk7CisJCXJldHVybiAtRU1TR1NJWkU7CisJfQorCisJbXV0ZXhfbG9jaygmd2wtPm11dGV4KTsKKworCWtmcmVlKHdsLT5udnMpOworCisJd2wtPm52cyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB3bDEyNzFfbnZzX2ZpbGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXdsLT5udnMpIHsKKwkJd2wxMjcxX2Vycm9yKCJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgbnZzIGZpbGUiKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJbWVtY3B5KHdsLT5udnMsIGJ1ZiwgbGVuKTsKKworCXdsMTI3MV9kZWJ1ZyhERUJVR19URVNUTU9ERSwgInRlc3Rtb2RlIHB1c2hlZCBudnMiKTsKKworb3V0OgorCW11dGV4X3VubG9jaygmd2wtPm11dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgd2wxMjcxX3RtX2NtZF9zZXRfcGx0X21vZGUoc3RydWN0IHdsMTI3MSAqd2wsIHN0cnVjdCBubGF0dHIgKnRiW10pCit7CisJdTMyIHZhbDsKKwlpbnQgcmV0OworCisJd2wxMjcxX2RlYnVnKERFQlVHX1RFU1RNT0RFLCAidGVzdG1vZGUgY21kIHNldCBwbHQgbW9kZSIpOworCisJaWYgKCF0YltXTDEyNzFfVE1fQVRUUl9QTFRfTU9ERV0pCisJCXJldHVybiAtRUlOVkFMOworCisJdmFsID0gbmxhX2dldF91MzIodGJbV0wxMjcxX1RNX0FUVFJfUExUX01PREVdKTsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSAwOgorCQlyZXQgPSB3bDEyNzFfcGx0X3N0b3Aod2wpOworCQlicmVhazsKKwljYXNlIDE6CisJCXJldCA9IHdsMTI3MV9wbHRfc3RhcnQod2wpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitpbnQgd2wxMjcxX3RtX2NtZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGh3LT5wcml2OworCXN0cnVjdCBubGF0dHIgKnRiW1dMMTI3MV9UTV9BVFRSX01BWCArIDFdOworCWludCBlcnI7CisKKwllcnIgPSBubGFfcGFyc2UodGIsIFdMMTI3MV9UTV9BVFRSX01BWCwgZGF0YSwgbGVuLCB3bDEyNzFfdG1fcG9saWN5KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKCF0YltXTDEyNzFfVE1fQVRUUl9DTURfSURdKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAobmxhX2dldF91MzIodGJbV0wxMjcxX1RNX0FUVFJfQ01EX0lEXSkpIHsKKwljYXNlIFdMMTI3MV9UTV9DTURfVEVTVDoKKwkJcmV0dXJuIHdsMTI3MV90bV9jbWRfdGVzdCh3bCwgdGIpOworCWNhc2UgV0wxMjcxX1RNX0NNRF9JTlRFUlJPR0FURToKKwkJcmV0dXJuIHdsMTI3MV90bV9jbWRfaW50ZXJyb2dhdGUod2wsIHRiKTsKKwljYXNlIFdMMTI3MV9UTV9DTURfQ09ORklHVVJFOgorCQlyZXR1cm4gd2wxMjcxX3RtX2NtZF9jb25maWd1cmUod2wsIHRiKTsKKwljYXNlIFdMMTI3MV9UTV9DTURfTlZTX1BVU0g6CisJCXJldHVybiB3bDEyNzFfdG1fY21kX252c19wdXNoKHdsLCB0Yik7CisJY2FzZSBXTDEyNzFfVE1fQ01EX1NFVF9QTFRfTU9ERToKKwkJcmV0dXJuIHdsMTI3MV90bV9jbWRfc2V0X3BsdF9tb2RlKHdsLCB0Yik7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdGVzdG1vZGUuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdGVzdG1vZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTk2ZDI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90ZXN0bW9kZS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB3bDEyNzEKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDb250YWN0OiBMdWNpYW5vIENvZWxobyA8bHVjaWFuby5jb2VsaG9Abm9raWEuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBfX1dMMTI3MV9URVNUTU9ERV9IX18KKyNkZWZpbmUgX19XTDEyNzFfVEVTVE1PREVfSF9fCisKKyNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KKworaW50IHdsMTI3MV90bV9jbWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHZvaWQgKmRhdGEsIGludCBsZW4pOworCisjZW5kaWYgLyogX19XTDEyNzFfVEVTVE1PREVfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3R4LmMKaW5kZXggMDBhZjA2NS4uODExZTczOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90eC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdHguYwpAQCAtMjYsNiArMjYsNyBAQAogCiAjaW5jbHVkZSAid2wxMjcxLmgiCiAjaW5jbHVkZSAid2wxMjcxX3NwaS5oIgorI2luY2x1ZGUgIndsMTI3MV9pby5oIgogI2luY2x1ZGUgIndsMTI3MV9yZWcuaCIKICNpbmNsdWRlICJ3bDEyNzFfcHMuaCIKICNpbmNsdWRlICJ3bDEyNzFfdHguaCIKQEAgLTg3LDcgKzg4LDcgQEAKIAkJCSAgICAgIHUzMiBleHRyYSwgc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICpjb250cm9sKQogewogCXN0cnVjdCB3bDEyNzFfdHhfaHdfZGVzY3IgKmRlc2M7Ci0JaW50IHBhZDsKKwlpbnQgcGFkLCBhYzsKIAl1MTYgdHhfYXR0cjsKIAogCWRlc2MgPSAoc3RydWN0IHdsMTI3MV90eF9od19kZXNjciAqKSBza2ItPmRhdGE7CkBAIC0xMDcsOSArMTA4LDExIEBACiAKIAkvKiBjb25maWd1cmUgdGhlIHR4IGF0dHJpYnV0ZXMgKi8KIAl0eF9hdHRyID0gd2wtPnNlc3Npb25fY291bnRlciA8PCBUWF9IV19BVFRSX09GU1RfU0VTU0lPTl9DT1VOVEVSOwotCS8qIEZJWE1FOiBkbyB3ZSBrbm93IHRoZSBwYWNrZXQgcHJpb3JpdHk/IGNhbiB3ZSBpZGVudGlmeSBtZ210Ci0JICAgcGFja2V0cywgYW5kIHVzZSBtYXggcHJpbyBmb3IgdGhlbSBhdCBsZWFzdD8gKi8KLQlkZXNjLT50aWQgPSAwOworCisJLyogcXVldWUgKi8KKwlhYyA9IHdsMTI3MV90eF9nZXRfcXVldWUoc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpOworCWRlc2MtPnRpZCA9IHdsMTI3MV90eF9hY190b190aWQoYWMpOworCiAJZGVzYy0+YWlkID0gVFhfSFdfREVGQVVMVF9BSUQ7CiAJZGVzYy0+cmVzZXJ2ZWQgPSAwOwogCkBAIC0xMjEsNiArMTI0LDExIEBACiAJcGFkID0gcGFkIC0gc2tiLT5sZW47CiAJdHhfYXR0ciB8PSBwYWQgPDwgVFhfSFdfQVRUUl9PRlNUX0xBU1RfV09SRF9QQUQ7CiAKKwkvKiBpZiB0aGUgcGFja2V0cyBhcmUgZGVzdGluZWQgZm9yIEFQIChoYXZlIGEgU1RBIGVudHJ5KSBzZW5kIHRoZW0KKwkgICB3aXRoIEFQIHJhdGUgcG9saWNpZXMsIG90aGVyd2lzZSB1c2UgZGVmYXVsdCBiYXNpYyByYXRlcyAqLworCWlmIChjb250cm9sLT5jb250cm9sLnN0YSkKKwkJdHhfYXR0ciB8PSBBQ1hfVFhfQVBfRlVMTF9SQVRFIDw8IFRYX0hXX0FUVFJfT0ZTVF9SQVRFX1BPTElDWTsKKwogCWRlc2MtPnR4X2F0dHIgPSBjcHVfdG9fbGUxNih0eF9hdHRyKTsKIAogCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgInR4X2ZpbGxfaGRyOiBwYWQ6ICVkIiwgcGFkKTsKQEAgLTE1OCwxMSArMTY2LDExIEBACiAJbGVuID0gV0wxMjcxX1RYX0FMSUdOKHNrYi0+bGVuKTsKIAogCS8qIHBlcmZvcm0gYSBmaXhlZCBhZGRyZXNzIGJsb2NrIHdyaXRlIHdpdGggdGhlIHBhY2tldCAqLwotCXdsMTI3MV9zcGlfd3JpdGUod2wsIFdMMTI3MV9TTFZfTUVNX0RBVEEsIHNrYi0+ZGF0YSwgbGVuLCB0cnVlKTsKKwl3bDEyNzFfd3JpdGUod2wsIFdMMTI3MV9TTFZfTUVNX0RBVEEsIHNrYi0+ZGF0YSwgbGVuLCB0cnVlKTsKIAogCS8qIHdyaXRlIHBhY2tldCBuZXcgY291bnRlciBpbnRvIHRoZSB3cml0ZSBhY2Nlc3MgcmVnaXN0ZXIgKi8KIAl3bC0+dHhfcGFja2V0c19jb3VudCsrOwotCXdsMTI3MV9zcGlfd3JpdGUzMih3bCwgV0wxMjcxX0hPU1RfV1JfQUNDRVNTLCB3bC0+dHhfcGFja2V0c19jb3VudCk7CisJd2wxMjcxX3dyaXRlMzIod2wsIFdMMTI3MV9IT1NUX1dSX0FDQ0VTUywgd2wtPnR4X3BhY2tldHNfY291bnQpOwogCiAJZGVzYyA9IChzdHJ1Y3Qgd2wxMjcxX3R4X2h3X2Rlc2NyICopIHNrYi0+ZGF0YTsKIAl3bDEyNzFfZGVidWcoREVCVUdfVFgsICJ0eCBpZCAldSBza2IgMHglcCBwYXlsb2FkICV1ICgldSB3b3JkcykiLApAQCAtMTk2LDYgKzIwNCw3IEBACiAJCQlyZXQgPSB3bDEyNzFfY21kX3NldF9kZWZhdWx0X3dlcF9rZXkod2wsIGlkeCk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlyZXR1cm4gcmV0OworCQkJd2wtPmRlZmF1bHRfa2V5ID0gaWR4OwogCQl9CiAJfQogCkBAIC0yMTQsMTggKzIyMyw1MCBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB1MzIgd2wxMjcxX3R4X2VuYWJsZWRfcmF0ZXNfZ2V0KHN0cnVjdCB3bDEyNzEgKndsLCB1MzIgcmF0ZV9zZXQpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqYmFuZDsKKwl1MzIgZW5hYmxlZF9yYXRlcyA9IDA7CisJaW50IGJpdDsKKworCWJhbmQgPSB3bC0+aHctPndpcGh5LT5iYW5kc1t3bC0+YmFuZF07CisJZm9yIChiaXQgPSAwOyBiaXQgPCBiYW5kLT5uX2JpdHJhdGVzOyBiaXQrKykgeworCQlpZiAocmF0ZV9zZXQgJiAweDEpCisJCQllbmFibGVkX3JhdGVzIHw9IGJhbmQtPmJpdHJhdGVzW2JpdF0uaHdfdmFsdWU7CisJCXJhdGVfc2V0ID4+PSAxOworCX0KKworCXJldHVybiBlbmFibGVkX3JhdGVzOworfQorCiB2b2lkIHdsMTI3MV90eF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3Qgd2wxMjcxICp3bCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2wxMjcxLCB0eF93b3JrKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWJvb2wgd29rZW5fdXAgPSBmYWxzZTsKKwl1MzIgc3RhX3JhdGVzID0gMDsKIAlpbnQgcmV0OwogCisJLyogY2hlY2sgaWYgdGhlIHJhdGVzIHN1cHBvcnRlZCBieSB0aGUgQVAgaGF2ZSBjaGFuZ2VkICovCisJaWYgKHVubGlrZWx5KHRlc3RfYW5kX2NsZWFyX2JpdChXTDEyNzFfRkxBR19TVEFfUkFURVNfQ0hBTkdFRCwKKwkJCQkJJndsLT5mbGFncykpKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCQlzdGFfcmF0ZXMgPSB3bC0+c3RhX3JhdGVfc2V0OworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ3bC0+d2xfbG9jaywgZmxhZ3MpOworCX0KKwogCW11dGV4X2xvY2soJndsLT5tdXRleCk7CiAKIAlpZiAodW5saWtlbHkod2wtPnN0YXRlID09IFdMMTI3MV9TVEFURV9PRkYpKQogCQlnb3RvIG91dDsKIAorCS8qIGlmIHJhdGVzIGhhdmUgY2hhbmdlZCwgcmUtY29uZmlndXJlIHRoZSByYXRlIHBvbGljeSAqLworCWlmICh1bmxpa2VseShzdGFfcmF0ZXMpKSB7CisJCXdsLT5yYXRlX3NldCA9IHdsMTI3MV90eF9lbmFibGVkX3JhdGVzX2dldCh3bCwgc3RhX3JhdGVzKTsKKwkJd2wxMjcxX2FjeF9yYXRlX3BvbGljaWVzKHdsKTsKKwl9CisKIAl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZ3bC0+dHhfcXVldWUpKSkgewogCQlpZiAoIXdva2VuX3VwKSB7CiAJCQlyZXQgPSB3bDEyNzFfcHNfZWxwX3dha2V1cCh3bCwgZmFsc2UpOwpAQCAtMjQwLDE4ICsyODEsMTggQEAKIAkJCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwgInR4X3dvcms6IGZ3IGJ1ZmZlciBmdWxsLCAiCiAJCQkJICAgICAic3RvcCBxdWV1ZXMiKTsKIAkJCWllZWU4MDIxMV9zdG9wX3F1ZXVlcyh3bC0+aHcpOwotCQkJd2wtPnR4X3F1ZXVlX3N0b3BwZWQgPSB0cnVlOworCQkJc2V0X2JpdChXTDEyNzFfRkxBR19UWF9RVUVVRV9TVE9QUEVELCAmd2wtPmZsYWdzKTsKIAkJCXNrYl9xdWV1ZV9oZWFkKCZ3bC0+dHhfcXVldWUsIHNrYik7CiAJCQlnb3RvIG91dDsKIAkJfSBlbHNlIGlmIChyZXQgPCAwKSB7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlnb3RvIG91dDsKLQkJfSBlbHNlIGlmICh3bC0+dHhfcXVldWVfc3RvcHBlZCkgeworCQl9IGVsc2UgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChXTDEyNzFfRkxBR19UWF9RVUVVRV9TVE9QUEVELAorCQkJCQkgICAgICAmd2wtPmZsYWdzKSkgewogCQkJLyogZmlybXdhcmUgYnVmZmVyIGhhcyBzcGFjZSwgcmVzdGFydCBxdWV1ZXMgKi8KIAkJCXdsMTI3MV9kZWJ1ZyhERUJVR19UWCwKIAkJCQkgICAgICJjb21wbGV0ZV9wYWNrZXQ6IHdha2luZyBxdWV1ZXMiKTsKIAkJCWllZWU4MDIxMV93YWtlX3F1ZXVlcyh3bC0+aHcpOwotCQkJd2wtPnR4X3F1ZXVlX3N0b3BwZWQgPSBmYWxzZTsKIAkJfQogCX0KIApAQCAtMzM1LDggKzM3Niw4IEBACiAJd2wxMjcxX2RlYnVnKERFQlVHX1RYLCAidHhfY29tcGxldGUgcmVjZWl2ZWQsIHBhY2tldHM6ICVkIiwgY291bnQpOwogCiAJLyogcmVhZCB0aGUgdHggcmVzdWx0cyBmcm9tIHRoZSBjaGlwc2V0ICovCi0Jd2wxMjcxX3NwaV9yZWFkKHdsLCBsZTMyX3RvX2NwdShtZW1tYXAtPnR4X3Jlc3VsdCksCi0JCQl3bC0+dHhfcmVzX2lmLCBzaXplb2YoKndsLT50eF9yZXNfaWYpLCBmYWxzZSk7CisJd2wxMjcxX3JlYWQod2wsIGxlMzJfdG9fY3B1KG1lbW1hcC0+dHhfcmVzdWx0KSwKKwkJICAgIHdsLT50eF9yZXNfaWYsIHNpemVvZigqd2wtPnR4X3Jlc19pZiksIGZhbHNlKTsKIAogCS8qIHZlcmlmeSB0aGF0IHRoZSByZXN1bHQgYnVmZmVyIGlzIG5vdCBnZXR0aW5nIG92ZXJydW4gKi8KIAlpZiAoY291bnQgPiBUWF9IV19SRVNVTFRfUVVFVUVfTEVOKSB7CkBAIC0zNTcsMTAgKzM5OCwxMCBAQAogCX0KIAogCS8qIHdyaXRlIGhvc3QgY291bnRlciB0byBjaGlwc2V0ICh0byBhY2spICovCi0Jd2wxMjcxX3NwaV93cml0ZTMyKHdsLCBsZTMyX3RvX2NwdShtZW1tYXAtPnR4X3Jlc3VsdCkgKwotCQkJICAgb2Zmc2V0b2Yoc3RydWN0IHdsMTI3MV90eF9od19yZXNfaWYsCi0JCQkJICAgIHR4X3Jlc3VsdF9ob3N0X2NvdW50ZXIpLAotCQkJICAgbGUzMl90b19jcHUod2wtPnR4X3Jlc19pZi0+dHhfcmVzdWx0X2Z3X2NvdW50ZXIpKTsKKwl3bDEyNzFfd3JpdGUzMih3bCwgbGUzMl90b19jcHUobWVtbWFwLT50eF9yZXN1bHQpICsKKwkJICAgICAgIG9mZnNldG9mKHN0cnVjdCB3bDEyNzFfdHhfaHdfcmVzX2lmLAorCQkgICAgICAgdHhfcmVzdWx0X2hvc3RfY291bnRlciksCisJCSAgICAgICBsZTMyX3RvX2NwdSh3bC0+dHhfcmVzX2lmLT50eF9yZXN1bHRfZndfY291bnRlcikpOwogfQogCiAvKiBjYWxsZXIgbXVzdCBob2xkIHdsLT5tdXRleCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wxMnh4L3dsMTI3MV90eC5oCmluZGV4IDQxNjM5NmMuLjE3ZTQwNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMTJ4eC93bDEyNzFfdHguaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy93bDEyeHgvd2wxMjcxX3R4LmgKQEAgLTEyMyw2ICsxMjMsNDIgQEAKIAlzdHJ1Y3Qgd2wxMjcxX3R4X2h3X3Jlc19kZXNjciB0eF9yZXN1bHRzX3F1ZXVlW1RYX0hXX1JFU1VMVF9RVUVVRV9MRU5dOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKK3N0YXRpYyBpbmxpbmUgaW50IHdsMTI3MV90eF9nZXRfcXVldWUoaW50IHF1ZXVlKQoreworCS8qIEZJWE1FOiB1c2UgYmVzdCBlZmZvcnQgdW50aWwgV01NIGlzIGVuYWJsZWQgKi8KKwlyZXR1cm4gQ09ORl9UWF9BQ19CRTsKKworCXN3aXRjaCAocXVldWUpIHsKKwljYXNlIDA6CisJCXJldHVybiBDT05GX1RYX0FDX1ZPOworCWNhc2UgMToKKwkJcmV0dXJuIENPTkZfVFhfQUNfVkk7CisJY2FzZSAyOgorCQlyZXR1cm4gQ09ORl9UWF9BQ19CRTsKKwljYXNlIDM6CisJCXJldHVybiBDT05GX1RYX0FDX0JLOworCWRlZmF1bHQ6CisJCXJldHVybiBDT05GX1RYX0FDX0JFOworCX0KK30KKworLyogd2wxMjcxIHR4IGRlc2NyaXB0b3IgbmVlZHMgdGhlIHRpZCBhbmQgd2UgbmVlZCB0byBjb252ZXJ0IGl0IGZyb20gYWMgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHdsMTI3MV90eF9hY190b190aWQoaW50IGFjKQoreworCXN3aXRjaCAoYWMpIHsKKwljYXNlIDA6CisJCXJldHVybiAwOworCWNhc2UgMToKKwkJcmV0dXJuIDI7CisJY2FzZSAyOgorCQlyZXR1cm4gNDsKKwljYXNlIDM6CisJCXJldHVybiA2OworCWRlZmF1bHQ6CisJCXJldHVybiAwOworCX0KK30KKwogdm9pZCB3bDEyNzFfdHhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCB3bDEyNzFfdHhfY29tcGxldGUoc3RydWN0IHdsMTI3MSAqd2wsIHUzMiBjb3VudCk7CiB2b2lkIHdsMTI3MV90eF9mbHVzaChzdHJ1Y3Qgd2wxMjcxICp3bCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5jCmluZGV4IDMzYzhiZTcuLjY5MTcyODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIwMS5jCkBAIC04NzUsMjAgKzg3NSwxOCBAQAogc3RhdGljIHZvaWQgemQxMjAxX3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgemQxMjAxICp6ZCA9IG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGRldl9tY19saXN0ICptYyA9IGRldi0+bWNfbGlzdDsKKwlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jOwogCXVuc2lnbmVkIGNoYXIgcmVxYnVmW0VUSF9BTEVOKlpEMTIwMV9NQVhNVUxUSV07CiAJaW50IGk7CiAKLQlpZiAoZGV2LT5tY19jb3VudCA+IFpEMTIwMV9NQVhNVUxUSSkKKwlpZiAobmV0ZGV2X21jX2NvdW50KGRldikgPiBaRDEyMDFfTUFYTVVMVEkpCiAJCXJldHVybjsKIAotCWZvciAoaT0wOyBpPGRldi0+bWNfY291bnQ7IGkrKykgewotCQltZW1jcHkocmVxYnVmK2kqRVRIX0FMRU4sIG1jLT5kbWlfYWRkciwgRVRIX0FMRU4pOwotCQltYyA9IG1jLT5uZXh0OwotCX0KKwlpID0gMDsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtYywgZGV2KQorCQltZW1jcHkocmVxYnVmICsgaSsrICogRVRIX0FMRU4sIG1jLT5kbWlfYWRkciwgRVRIX0FMRU4pOwogCXpkMTIwMV9zZXRjb25maWcoemQsIFpEMTIwMV9SSURfQ05GR1JPVVBBRERSRVNTLCByZXFidWYsCi0JICAgIGRldi0+bWNfY291bnQqRVRIX0FMRU4sIDApOwotCQorCQkJIG5ldGRldl9tY19jb3VudChkZXYpICogRVRIX0FMRU4sIDApOwogfQogCiBzdGF0aWMgaW50IHpkMTIwMV9jb25maWdfY29tbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfbWFjLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYwppbmRleCBmMTRkZWIwLi5hMjJhMTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYwpAQCAtMzc0LDcgKzM3NCw3IEBACiAgKiB6ZF9tYWNfdHhfZmFpbGVkIC0gY2FsbGJhY2sgZm9yIGZhaWxlZCBmcmFtZXMKICAqIEBkZXY6IHRoZSBtYWM4MDIxMSB3aXJlbGVzcyBkZXZpY2UKICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpZiBhIGZyYW1lIGNvdWxkbid0IGJlIHN1Y2Nlc3NmdWxseSBiZQorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaWYgYSBmcmFtZSBjb3VsZG4ndCBiZSBzdWNjZXNzZnVsbHkKICAqIHRyYW5zZmVycmVkLiBUaGUgZmlyc3QgZnJhbWUgZnJvbSB0aGUgdHggcXVldWUsIHdpbGwgYmUgc2VsZWN0ZWQgYW5kCiAgKiByZXBvcnRlZCBhcyBlcnJvciB0byB0aGUgdXBwZXIgbGF5ZXJzLgogICovCkBAIC04NjksNyArODY5LDcgQEAKIH0KIAogc3RhdGljIGludCB6ZF9vcF9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IHpkX21hYyAqbWFjID0gemRfaHdfbWFjKGh3KTsKIApAQCAtODc3LDIyICs4NzcsMjIgQEAKIAlpZiAobWFjLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1VOU1BFQ0lGSUVEKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlzd2l0Y2ggKGNvbmYtPnR5cGUpIHsKKwlzd2l0Y2ggKHZpZi0+dHlwZSkgewogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTU9OSVRPUjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJY2FzZSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OOgogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQURIT0M6Ci0JCW1hYy0+dHlwZSA9IGNvbmYtPnR5cGU7CisJCW1hYy0+dHlwZSA9IHZpZi0+dHlwZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAotCXJldHVybiB6ZF93cml0ZV9tYWNfYWRkcigmbWFjLT5jaGlwLCBjb25mLT5tYWNfYWRkcik7CisJcmV0dXJuIHpkX3dyaXRlX21hY19hZGRyKCZtYWMtPmNoaXAsIHZpZi0+YWRkcik7CiB9CiAKIHN0YXRpYyB2b2lkIHpkX29wX3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXN0cnVjdCB6ZF9tYWMgKm1hYyA9IHpkX2h3X21hYyhodyk7CiAJbWFjLT50eXBlID0gTkw4MDIxMV9JRlRZUEVfVU5TUEVDSUZJRUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jCmluZGV4IDcyZDNlNDMuLjQ0MmZjMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX3VzYi5jCkBAIC0xMDc5LDExICsxMDc5LDE1IEBACiAJaW50IHI7CiAKIAkvKiBGaW5kIGJ1bGsgb3V0IGVuZHBvaW50ICovCi0JZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbMV0uZGVzYzsKLQlpZiAodXNiX2VuZHBvaW50X2Rpcl9vdXQoZW5kcG9pbnQpICYmCi0JICAgIHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZW5kcG9pbnQpKSB7Ci0JCWJ1bGtfb3V0X2VwID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7Ci0JfSBlbHNlIHsKKwlmb3IgKHIgPSAxOyByID49IDA7IHItLSkgeworCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtyXS5kZXNjOworCQlpZiAodXNiX2VuZHBvaW50X2Rpcl9vdXQoZW5kcG9pbnQpICYmCisJCSAgICB1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGVuZHBvaW50KSkgeworCQkJYnVsa19vdXRfZXAgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChyID09IC0xKSB7CiAJCWRldl9lcnIoJnVkZXYtPmRldiwKIAkJCSJ6ZDEyMTFydzogQ291bGQgbm90IGZpbmQgYnVsayBvdXQgZW5kcG9pbnRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3hpbGlueF9lbWFjbGl0ZS5jIGIvZHJpdmVycy9uZXQveGlsaW54X2VtYWNsaXRlLmMKaW5kZXggOGM3NzdiYS4uMWE3NDU5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQveGlsaW54X2VtYWNsaXRlLmMKKysrIGIvZHJpdmVycy9uZXQveGlsaW54X2VtYWNsaXRlLmMKQEAgLTIyLDExICsyMiwxNyBAQAogCiAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9tZGlvLmg+CisjaW5jbHVkZSA8bGludXgvcGh5Lmg+CiAKICNkZWZpbmUgRFJJVkVSX05BTUUgInhpbGlueF9lbWFjbGl0ZSIKIAogLyogUmVnaXN0ZXIgb2Zmc2V0cyBmb3IgdGhlIEVtYWNMaXRlIENvcmUgKi8KICNkZWZpbmUgWEVMX1RYQlVGRl9PRkZTRVQgCTB4MAkJLyogVHJhbnNtaXQgQnVmZmVyICovCisjZGVmaW5lIFhFTF9NRElPQUREUl9PRkZTRVQJMHgwN0U0CQkvKiBNRElPIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgWEVMX01ESU9XUl9PRkZTRVQJMHgwN0U4CQkvKiBNRElPIFdyaXRlIERhdGEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgWEVMX01ESU9SRF9PRkZTRVQJMHgwN0VDCQkvKiBNRElPIFJlYWQgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBYRUxfTURJT0NUUkxfT0ZGU0VUCTB4MDdGMAkJLyogTURJTyBDb250cm9sIFJlZ2lzdGVyICovCiAjZGVmaW5lIFhFTF9HSUVSX09GRlNFVAkJMHgwN0Y4CQkvKiBHSUUgUmVnaXN0ZXIgKi8KICNkZWZpbmUgWEVMX1RTUl9PRkZTRVQJCTB4MDdGQwkJLyogVHggc3RhdHVzICovCiAjZGVmaW5lIFhFTF9UUExSX09GRlNFVAkJMHgwN0Y0CQkvKiBUeCBwYWNrZXQgbGVuZ3RoICovCkBAIC0zNyw2ICs0MywyMiBAQAogCiAjZGVmaW5lIFhFTF9CVUZGRVJfT0ZGU0VUCTB4MDgwMAkJLyogTmV4dCBUeC9SeCBidWZmZXIncyBvZmZzZXQgKi8KIAorLyogTURJTyBBZGRyZXNzIFJlZ2lzdGVyIEJpdCBNYXNrcyAqLworI2RlZmluZSBYRUxfTURJT0FERFJfUkVHQURSX01BU0sgIDB4MDAwMDAwMUYJLyogUmVnaXN0ZXIgQWRkcmVzcyAqLworI2RlZmluZSBYRUxfTURJT0FERFJfUEhZQURSX01BU0sgIDB4MDAwMDAzRTAJLyogUEhZIEFkZHJlc3MgKi8KKyNkZWZpbmUgWEVMX01ESU9BRERSX1BIWUFEUl9TSElGVCA1CisjZGVmaW5lIFhFTF9NRElPQUREUl9PUF9NQVNLCSAgMHgwMDAwMDQwMAkvKiBSRC9XUiBPcGVyYXRpb24gKi8KKworLyogTURJTyBXcml0ZSBEYXRhIFJlZ2lzdGVyIEJpdCBNYXNrcyAqLworI2RlZmluZSBYRUxfTURJT1dSX1dSREFUQV9NQVNLCSAgMHgwMDAwRkZGRgkvKiBEYXRhIHRvIGJlIFdyaXR0ZW4gKi8KKworLyogTURJTyBSZWFkIERhdGEgUmVnaXN0ZXIgQml0IE1hc2tzICovCisjZGVmaW5lIFhFTF9NRElPUkRfUkREQVRBX01BU0sJICAweDAwMDBGRkZGCS8qIERhdGEgdG8gYmUgUmVhZCAqLworCisvKiBNRElPIENvbnRyb2wgUmVnaXN0ZXIgQml0IE1hc2tzICovCisjZGVmaW5lIFhFTF9NRElPQ1RSTF9NRElPU1RTX01BU0sgMHgwMDAwMDAwMQkvKiBNRElPIFN0YXR1cyBNYXNrICovCisjZGVmaW5lIFhFTF9NRElPQ1RSTF9NRElPRU5fTUFTSyAgMHgwMDAwMDAwOAkvKiBNRElPIEVuYWJsZSAqLworCiAvKiBHbG9iYWwgSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAoR0lFUikgQml0IE1hc2tzICovCiAjZGVmaW5lIFhFTF9HSUVSX0dJRV9NQVNLCTB4ODAwMDAwMDAgCS8qIEdsb2JhbCBFbmFibGUgKi8KIApAQCAtODcsNiArMTA5LDEyIEBACiAgKiBAcmVzZXRfbG9jazoJCWxvY2sgdXNlZCBmb3Igc3luY2hyb25pemF0aW9uCiAgKiBAZGVmZXJyZWRfc2tiOglob2xkcyBhbiBza2IgKGZvciB0cmFuc21pc3Npb24gYXQgYSBsYXRlciB0aW1lKSB3aGVuIHRoZQogICoJCQlUeCBidWZmZXIgaXMgbm90IGZyZWUKKyAqIEBwaHlfZGV2OgkJcG9pbnRlciB0byB0aGUgUEhZIGRldmljZQorICogQHBoeV9ub2RlOgkJcG9pbnRlciB0byB0aGUgUEhZIGRldmljZSBub2RlCisgKiBAbWlpX2J1czoJCXBvaW50ZXIgdG8gdGhlIE1JSSBidXMKKyAqIEBtZGlvX2lycXM6CQlJUlFzIHRhYmxlIGZvciBNRElPIGJ1cworICogQGxhc3RfbGluazoJCWxhc3QgbGluayBzdGF0dXMKKyAqIEBoYXNfbWRpbzoJCWluZGljYXRlcyB3aGV0aGVyIE1ESU8gaXMgaW5jbHVkZWQgaW4gdGhlIEhXCiAgKi8KIHN0cnVjdCBuZXRfbG9jYWwgewogCkBAIC0xMDAsNiArMTI4LDE1IEBACiAKIAlzcGlubG9ja190IHJlc2V0X2xvY2s7CiAJc3RydWN0IHNrX2J1ZmYgKmRlZmVycmVkX3NrYjsKKworCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlfZGV2OworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGh5X25vZGU7CisKKwlzdHJ1Y3QgbWlpX2J1cyAqbWlpX2J1czsKKwlpbnQgbWRpb19pcnFzW1BIWV9NQVhfQUREUl07CisKKwlpbnQgbGFzdF9saW5rOworCWJvb2wgaGFzX21kaW87CiB9OwogCiAKQEAgLTQzMSw3ICs0NjgsNyBAQAogfQogCiAvKioKLSAqIHhlbWFjbGl0ZV9zZXRfbWFjX2FkZHJlc3MgLSBTZXQgdGhlIE1BQyBhZGRyZXNzIGZvciB0aGlzIGRldmljZQorICogeGVtYWNsaXRlX3VwZGF0ZV9hZGRyZXNzIC0gVXBkYXRlIHRoZSBNQUMgYWRkcmVzcyBpbiB0aGUgZGV2aWNlCiAgKiBAZHJ2ZGF0YToJUG9pbnRlciB0byB0aGUgRW1hY2xpdGUgZGV2aWNlIHByaXZhdGUgZGF0YQogICogQGFkZHJlc3NfcHRyOlBvaW50ZXIgdG8gdGhlIE1BQyBhZGRyZXNzIChNQUMgYWRkcmVzcyBpcyBhIDQ4LWJpdCB2YWx1ZSkKICAqCkBAIC00NDEsOCArNDc4LDggQEAKICAqIFRoZSBNQUMgYWRkcmVzcyBjYW4gYmUgcHJvZ3JhbW1lZCB1c2luZyBhbnkgb2YgdGhlIHR3byB0cmFuc21pdAogICogYnVmZmVycyAoaWYgY29uZmlndXJlZCkuCiAgKi8KLXN0YXRpYyB2b2lkIHhlbWFjbGl0ZV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9sb2NhbCAqZHJ2ZGF0YSwKLQkJCQkgICAgICB1OCAqYWRkcmVzc19wdHIpCitzdGF0aWMgdm9pZCB4ZW1hY2xpdGVfdXBkYXRlX2FkZHJlc3Moc3RydWN0IG5ldF9sb2NhbCAqZHJ2ZGF0YSwKKwkJCQkgICAgIHU4ICphZGRyZXNzX3B0cikKIHsKIAl2b2lkIF9faW9tZW0gKmFkZHI7CiAJdTMyIHJlZ19kYXRhOwpAQCAtNDY1LDYgKzUwMiwzMCBAQAogfQogCiAvKioKKyAqIHhlbWFjbGl0ZV9zZXRfbWFjX2FkZHJlc3MgLSBTZXQgdGhlIE1BQyBhZGRyZXNzIGZvciB0aGlzIGRldmljZQorICogQGRldjoJUG9pbnRlciB0byB0aGUgbmV0d29yayBkZXZpY2UgaW5zdGFuY2UKKyAqIEBhZGRyOglWb2lkIHBvaW50ZXIgdG8gdGhlIHNvY2thZGRyIHN0cnVjdHVyZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBIVyBhZGRyZXNzIGZyb20gdGhlIHNvY2thZGRyIHN0cnVjdXRyZSB0byB0aGUKKyAqIG5ldF9kZXZpY2Ugc3RydWN0dXJlIGFuZCB1cGRhdGVzIHRoZSBhZGRyZXNzIGluIEhXLgorICoKKyAqIFJldHVybjoJRXJyb3IgaWYgdGhlIG5ldCBkZXZpY2UgaXMgYnVzeSBvciAwIGlmIHRoZSBhZGRyIGlzIHNldAorICoJCXN1Y2Nlc3NmdWxseQorICovCitzdGF0aWMgaW50IHhlbWFjbGl0ZV9zZXRfbWFjX2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcmVzcykKK3sKKwlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IChzdHJ1Y3QgbmV0X2xvY2FsICopIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gYWRkcmVzczsKKworCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJCXJldHVybiAtRUJVU1k7CisKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgZGV2LT5hZGRyX2xlbik7CisJeGVtYWNsaXRlX3VwZGF0ZV9hZGRyZXNzKGxwLCBkZXYtPmRldl9hZGRyKTsKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiB4ZW1hY2xpdGVfdHhfdGltZW91dCAtIENhbGxiYWNrIGZvciBUeCBUaW1lb3V0CiAgKiBAZGV2OglQb2ludGVyIHRvIHRoZSBuZXR3b3JrIGRldmljZQogICoKQEAgLTY0MSwxMiArNzAyLDIxOSBAQAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKiovCisvKiBNRElPIEJ1cyBmdW5jdGlvbnMgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqLworCisvKioKKyAqIHhlbWFjbGl0ZV9tZGlvX3dhaXQgLSBXYWl0IGZvciB0aGUgTURJTyB0byBiZSByZWFkeSB0byB1c2UKKyAqIEBscDoJCVBvaW50ZXIgdG8gdGhlIEVtYWNsaXRlIGRldmljZSBwcml2YXRlIGRhdGEKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdhaXRzIHRpbGwgdGhlIGRldmljZSBpcyByZWFkeSB0byBhY2NlcHQgYSBuZXcgTURJTworICogcmVxdWVzdC4KKyAqCisgKiBSZXR1cm46CTAgZm9yIHN1Y2Nlc3Mgb3IgRVRJTUVET1VUIGZvciBhIHRpbWVvdXQKKyAqLworCitzdGF0aWMgaW50IHhlbWFjbGl0ZV9tZGlvX3dhaXQoc3RydWN0IG5ldF9sb2NhbCAqbHApCit7CisJbG9uZyBlbmQgPSBqaWZmaWVzICsgMjsKKworCS8qIHdhaXQgZm9yIHRoZSBNRElPIGludGVyZmFjZSB0byBub3QgYmUgYnVzeSBvciB0aW1lb3V0CisJICAgYWZ0ZXIgc29tZSB0aW1lLgorCSovCisJd2hpbGUgKGluX2JlMzIobHAtPmJhc2VfYWRkciArIFhFTF9NRElPQ1RSTF9PRkZTRVQpICYKKwkJCVhFTF9NRElPQ1RSTF9NRElPU1RTX01BU0spIHsKKwkJaWYgKGVuZCAtIGppZmZpZXMgPD0gMCkgeworCQkJV0FSTl9PTigxKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJCW1zbGVlcCgxKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogeGVtYWNsaXRlX21kaW9fcmVhZCAtIFJlYWQgZnJvbSBhIGdpdmVuIE1JSSBtYW5hZ2VtZW50IHJlZ2lzdGVyCisgKiBAYnVzOgl0aGUgbWlpX2J1cyBzdHJ1Y3QKKyAqIEBwaHlfaWQ6CXRoZSBwaHkgYWRkcmVzcworICogQHJlZzoJcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWQgZnJvbQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2FpdHMgdGlsbCB0aGUgZGV2aWNlIGlzIHJlYWR5IHRvIGFjY2VwdCBhIG5ldyBNRElPCisgKiByZXF1ZXN0IGFuZCB0aGVuIHdyaXRlcyB0aGUgcGh5IGFkZHJlc3MgdG8gdGhlIE1ESU8gQWRkcmVzcyByZWdpc3RlcgorICogYW5kIHJlYWRzIGRhdGEgZnJvbSBNRElPIFJlYWQgRGF0YSByZWdpc3Rlciwgd2hlbiBpdHMgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybjoJVmFsdWUgcmVhZCBmcm9tIHRoZSBNSUkgbWFuYWdlbWVudCByZWdpc3RlcgorICovCitzdGF0aWMgaW50IHhlbWFjbGl0ZV9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9pZCwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IGJ1cy0+cHJpdjsKKwl1MzIgY3RybF9yZWc7CisJdTMyIHJjOworCisJaWYgKHhlbWFjbGl0ZV9tZGlvX3dhaXQobHApKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCS8qIFdyaXRlIHRoZSBQSFkgYWRkcmVzcywgcmVnaXN0ZXIgbnVtYmVyIGFuZCBzZXQgdGhlIE9QIGJpdCBpbiB0aGUKKwkgKiBNRElPIEFkZHJlc3MgcmVnaXN0ZXIuIFNldCB0aGUgU3RhdHVzIGJpdCBpbiB0aGUgTURJTyBDb250cm9sCisJICogcmVnaXN0ZXIgdG8gc3RhcnQgYSBNRElPIHJlYWQgdHJhbnNhY3Rpb24uCisJICovCisJY3RybF9yZWcgPSBpbl9iZTMyKGxwLT5iYXNlX2FkZHIgKyBYRUxfTURJT0NUUkxfT0ZGU0VUKTsKKwlvdXRfYmUzMihscC0+YmFzZV9hZGRyICsgWEVMX01ESU9BRERSX09GRlNFVCwKKwkJIFhFTF9NRElPQUREUl9PUF9NQVNLIHwKKwkJICgocGh5X2lkIDw8IFhFTF9NRElPQUREUl9QSFlBRFJfU0hJRlQpIHwgcmVnKSk7CisJb3V0X2JlMzIobHAtPmJhc2VfYWRkciArIFhFTF9NRElPQ1RSTF9PRkZTRVQsCisJCSBjdHJsX3JlZyB8IFhFTF9NRElPQ1RSTF9NRElPU1RTX01BU0spOworCisJaWYgKHhlbWFjbGl0ZV9tZGlvX3dhaXQobHApKQorCQlyZXR1cm4gLUVUSU1FRE9VVDsKKworCXJjID0gaW5fYmUzMihscC0+YmFzZV9hZGRyICsgWEVMX01ESU9SRF9PRkZTRVQpOworCisJZGV2X2RiZygmbHAtPm5kZXYtPmRldiwKKwkJInhlbWFjbGl0ZV9tZGlvX3JlYWQocGh5X2lkPSVpLCByZWc9JXgpID09ICV4XG4iLAorCQlwaHlfaWQsIHJlZywgcmMpOworCisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIHhlbWFjbGl0ZV9tZGlvX3dyaXRlIC0gV3JpdGUgdG8gYSBnaXZlbiBNSUkgbWFuYWdlbWVudCByZWdpc3RlcgorICogQGJ1czoJdGhlIG1paV9idXMgc3RydWN0CisgKiBAcGh5X2lkOgl0aGUgcGh5IGFkZHJlc3MKKyAqIEByZWc6CXJlZ2lzdGVyIG51bWJlciB0byB3cml0ZSB0bworICogQHZhbDoJdmFsdWUgdG8gd3JpdGUgdG8gdGhlIHJlZ2lzdGVyIG51bWJlciBzcGVjaWZpZWQgYnkgcmVnCisgKgorICogVGhpcyBmdWNudGlvbiB3YWl0cyB0aWxsIHRoZSBkZXZpY2UgaXMgcmVhZHkgdG8gYWNjZXB0IGEgbmV3IE1ESU8KKyAqIHJlcXVlc3QgYW5kIHRoZW4gd3JpdGVzIHRoZSB2YWwgdG8gdGhlIE1ESU8gV3JpdGUgRGF0YSByZWdpc3Rlci4KKyAqLworc3RhdGljIGludCB4ZW1hY2xpdGVfbWRpb193cml0ZShzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2lkLCBpbnQgcmVnLAorCQkJCXUxNiB2YWwpCit7CisJc3RydWN0IG5ldF9sb2NhbCAqbHAgPSBidXMtPnByaXY7CisJdTMyIGN0cmxfcmVnOworCisJZGV2X2RiZygmbHAtPm5kZXYtPmRldiwKKwkJInhlbWFjbGl0ZV9tZGlvX3dyaXRlKHBoeV9pZD0laSwgcmVnPSV4LCB2YWw9JXgpXG4iLAorCQlwaHlfaWQsIHJlZywgdmFsKTsKKworCWlmICh4ZW1hY2xpdGVfbWRpb193YWl0KGxwKSkKKwkJcmV0dXJuIC1FVElNRURPVVQ7CisKKwkvKiBXcml0ZSB0aGUgUEhZIGFkZHJlc3MsIHJlZ2lzdGVyIG51bWJlciBhbmQgY2xlYXIgdGhlIE9QIGJpdCBpbiB0aGUKKwkgKiBNRElPIEFkZHJlc3MgcmVnaXN0ZXIgYW5kIHRoZW4gd3JpdGUgdGhlIHZhbHVlIGludG8gdGhlIE1ESU8gV3JpdGUKKwkgKiBEYXRhIHJlZ2lzdGVyLiBGaW5hbGx5LCBzZXQgdGhlIFN0YXR1cyBiaXQgaW4gdGhlIE1ESU8gQ29udHJvbAorCSAqIHJlZ2lzdGVyIHRvIHN0YXJ0IGEgTURJTyB3cml0ZSB0cmFuc2FjdGlvbi4KKwkgKi8KKwljdHJsX3JlZyA9IGluX2JlMzIobHAtPmJhc2VfYWRkciArIFhFTF9NRElPQ1RSTF9PRkZTRVQpOworCW91dF9iZTMyKGxwLT5iYXNlX2FkZHIgKyBYRUxfTURJT0FERFJfT0ZGU0VULAorCQkgflhFTF9NRElPQUREUl9PUF9NQVNLICYKKwkJICgocGh5X2lkIDw8IFhFTF9NRElPQUREUl9QSFlBRFJfU0hJRlQpIHwgcmVnKSk7CisJb3V0X2JlMzIobHAtPmJhc2VfYWRkciArIFhFTF9NRElPV1JfT0ZGU0VULCB2YWwpOworCW91dF9iZTMyKGxwLT5iYXNlX2FkZHIgKyBYRUxfTURJT0NUUkxfT0ZGU0VULAorCQkgY3RybF9yZWcgfCBYRUxfTURJT0NUUkxfTURJT1NUU19NQVNLKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIHhlbWFjbGl0ZV9tZGlvX3Jlc2V0IC0gUmVzZXQgdGhlIG1kaW8gYnVzLgorICogQGJ1czoJUG9pbnRlciB0byB0aGUgTUlJIGJ1cworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQoPykgYXMgcGVyIERvY3VtZW50YXRpb24vbmV0d29ya2luZy9waHkudHh0LgorICogVGhlcmUgaXMgbm8gcmVzZXQgaW4gdGhpcyBkZXZpY2U7IHRoaXMgZnVuY3Rpb24gYWx3YXlzIHJldHVybnMgMC4KKyAqLworc3RhdGljIGludCB4ZW1hY2xpdGVfbWRpb19yZXNldChzdHJ1Y3QgbWlpX2J1cyAqYnVzKQoreworCXJldHVybiAwOworfQorCisvKioKKyAqIHhlbWFjbGl0ZV9tZGlvX3NldHVwIC0gUmVnaXN0ZXIgbWlpX2J1cyBmb3IgdGhlIEVtYWNsaXRlIGRldmljZQorICogQGxwOgkJUG9pbnRlciB0byB0aGUgRW1hY2xpdGUgZGV2aWNlIHByaXZhdGUgZGF0YQorICogQG9mZGV2OglQb2ludGVyIHRvIE9GIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGVuYWJsZXMgTURJTyBidXMgaW4gdGhlIEVtYWNsaXRlIGRldmljZSBhbmQgcmVnaXN0ZXJzIGEKKyAqIG1paV9idXMuCisgKgorICogUmV0dXJuOgkwIHVwb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIHVwb24gZmFpbHVyZQorICovCitzdGF0aWMgaW50IHhlbWFjbGl0ZV9tZGlvX3NldHVwKHN0cnVjdCBuZXRfbG9jYWwgKmxwLCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IG1paV9idXMgKmJ1czsKKwlpbnQgcmM7CisJc3RydWN0IHJlc291cmNlIHJlczsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gb2ZfZ2V0X3BhcmVudChscC0+cGh5X25vZGUpOworCisJLyogRG9uJ3QgcmVnaXN0ZXIgdGhlIE1ESU8gYnVzIGlmIHRoZSBwaHlfbm9kZSBvciBpdHMgcGFyZW50IG5vZGUKKwkgKiBjYW4ndCBiZSBmb3VuZC4KKwkgKi8KKwlpZiAoIW5wKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIEVuYWJsZSB0aGUgTURJTyBidXMgYnkgYXNzZXJ0aW5nIHRoZSBlbmFibGUgYml0IGluIE1ESU8gQ29udHJvbAorCSAqIHJlZ2lzdGVyLgorCSAqLworCW91dF9iZTMyKGxwLT5iYXNlX2FkZHIgKyBYRUxfTURJT0NUUkxfT0ZGU0VULAorCQkgWEVMX01ESU9DVFJMX01ESU9FTl9NQVNLKTsKKworCWJ1cyA9IG1kaW9idXNfYWxsb2MoKTsKKwlpZiAoIWJ1cykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCAwLCAmcmVzKTsKKwlzbnByaW50ZihidXMtPmlkLCBNSUlfQlVTX0lEX1NJWkUsICIlLjhsbHgiLAorCQkgKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMuc3RhcnQpOworCWJ1cy0+cHJpdiA9IGxwOworCWJ1cy0+bmFtZSA9ICJYaWxpbnggRW1hY2xpdGUgTURJTyI7CisJYnVzLT5yZWFkID0geGVtYWNsaXRlX21kaW9fcmVhZDsKKwlidXMtPndyaXRlID0geGVtYWNsaXRlX21kaW9fd3JpdGU7CisJYnVzLT5yZXNldCA9IHhlbWFjbGl0ZV9tZGlvX3Jlc2V0OworCWJ1cy0+cGFyZW50ID0gZGV2OworCWJ1cy0+aXJxID0gbHAtPm1kaW9faXJxczsgLyogcHJlYWxsb2NhdGVkIElSUSB0YWJsZSAqLworCisJbHAtPm1paV9idXMgPSBidXM7CisKKwlyYyA9IG9mX21kaW9idXNfcmVnaXN0ZXIoYnVzLCBucCk7CisJaWYgKHJjKQorCQlnb3RvIGVycl9yZWdpc3RlcjsKKworCXJldHVybiAwOworCitlcnJfcmVnaXN0ZXI6CisJbWRpb2J1c19mcmVlKGJ1cyk7CisJcmV0dXJuIHJjOworfQorCisvKioKKyAqIHhlbWFjbGl0ZV9hZGp1c3RfbGluayAtIExpbmsgc3RhdGUgY2FsbGJhY2sgZm9yIHRoZSBFbWFjbGl0ZSBkZXZpY2UKKyAqIEBuZGV2OiBwb2ludGVyIHRvIG5ldF9kZXZpY2Ugc3RydWN0CisgKgorICogVGhlcmUncyBub3RoaW5nIGluIHRoZSBFbWFjbGl0ZSBkZXZpY2UgdG8gYmUgY29uZmlndXJlZCB3aGVuIHRoZSBsaW5rCisgKiBzdGF0ZSBjaGFuZ2VzLiBXZSBqdXN0IHByaW50IHRoZSBzdGF0dXMuCisgKi8KK3ZvaWQgeGVtYWNsaXRlX2FkanVzdF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQoreworCXN0cnVjdCBuZXRfbG9jYWwgKmxwID0gbmV0ZGV2X3ByaXYobmRldik7CisJc3RydWN0IHBoeV9kZXZpY2UgKnBoeSA9IGxwLT5waHlfZGV2OworCWludCBsaW5rX3N0YXRlOworCisJLyogaGFzaCB0b2dldGhlciB0aGUgc3RhdGUgdmFsdWVzIHRvIGRlY2lkZSBpZiBzb21ldGhpbmcgaGFzIGNoYW5nZWQgKi8KKwlsaW5rX3N0YXRlID0gcGh5LT5zcGVlZCB8IChwaHktPmR1cGxleCA8PCAxKSB8IHBoeS0+bGluazsKKworCWlmIChscC0+bGFzdF9saW5rICE9IGxpbmtfc3RhdGUpIHsKKwkJbHAtPmxhc3RfbGluayA9IGxpbmtfc3RhdGU7CisJCXBoeV9wcmludF9zdGF0dXMocGh5KTsKKwl9Cit9CisKIC8qKgogICogeGVtYWNsaXRlX29wZW4gLSBPcGVuIHRoZSBuZXR3b3JrIGRldmljZQogICogQGRldjoJUG9pbnRlciB0byB0aGUgbmV0d29yayBkZXZpY2UKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIE1BQyBhZGRyZXNzLCByZXF1ZXN0cyBhbiBJUlEgYW5kIGVuYWJsZXMgaW50ZXJydXB0cwogICogZm9yIHRoZSBFbWFjbGl0ZSBkZXZpY2UgYW5kIHN0YXJ0cyB0aGUgVHggcXVldWUuCisgKiBJdCBhbHNvIGNvbm5lY3RzIHRvIHRoZSBwaHkgZGV2aWNlLCBpZiBNRElPIGlzIGluY2x1ZGVkIGluIEVtYWNsaXRlIGRldmljZS4KICAqLwogc3RhdGljIGludCB4ZW1hY2xpdGVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtNjU2LDE0ICs5MjQsNDcgQEAKIAkvKiBKdXN0IHRvIGJlIHNhZmUsIHN0b3AgdGhlIGRldmljZSBmaXJzdCAqLwogCXhlbWFjbGl0ZV9kaXNhYmxlX2ludGVycnVwdHMobHApOwogCisJaWYgKGxwLT5waHlfbm9kZSkgeworCQl1MzIgYm1jcjsKKworCQlscC0+cGh5X2RldiA9IG9mX3BoeV9jb25uZWN0KGxwLT5uZGV2LCBscC0+cGh5X25vZGUsCisJCQkJCSAgICAgeGVtYWNsaXRlX2FkanVzdF9saW5rLCAwLAorCQkJCQkgICAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUkpOworCQlpZiAoIWxwLT5waHlfZGV2KSB7CisJCQlkZXZfZXJyKCZscC0+bmRldi0+ZGV2LCAib2ZfcGh5X2Nvbm5lY3QoKSBmYWlsZWRcbiIpOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQkvKiBFbWFjTGl0ZSBkb2Vzbid0IHN1cHBvcnQgZ2lnYS1iaXQgc3BlZWRzICovCisJCWxwLT5waHlfZGV2LT5zdXBwb3J0ZWQgJj0gKFBIWV9CQVNJQ19GRUFUVVJFUyk7CisJCWxwLT5waHlfZGV2LT5hZHZlcnRpc2luZyA9IGxwLT5waHlfZGV2LT5zdXBwb3J0ZWQ7CisKKwkJLyogRG9uJ3QgYWR2ZXJ0aXNlIDEwMDBCQVNFLVQgRnVsbC9IYWxmIGR1cGxleCBzcGVlZHMgKi8KKwkJcGh5X3dyaXRlKGxwLT5waHlfZGV2LCBNSUlfQ1RSTDEwMDAsIDApOworCisJCS8qIEFkdmVydGlzZSBvbmx5IDEwIGFuZCAxMDBtYnBzIGZ1bGwvaGFsZiBkdXBsZXggc3BlZWRzICovCisJCXBoeV93cml0ZShscC0+cGh5X2RldiwgTUlJX0FEVkVSVElTRSwgQURWRVJUSVNFX0FMTCk7CisKKwkJLyogUmVzdGFydCBhdXRvIG5lZ290aWF0aW9uICovCisJCWJtY3IgPSBwaHlfcmVhZChscC0+cGh5X2RldiwgTUlJX0JNQ1IpOworCQlibWNyIHw9IChCTUNSX0FORU5BQkxFIHwgQk1DUl9BTlJFU1RBUlQpOworCQlwaHlfd3JpdGUobHAtPnBoeV9kZXYsIE1JSV9CTUNSLCBibWNyKTsKKworCQlwaHlfc3RhcnQobHAtPnBoeV9kZXYpOworCX0KKwogCS8qIFNldCB0aGUgTUFDIGFkZHJlc3MgZWFjaCB0aW1lIG9wZW5lZCAqLwotCXhlbWFjbGl0ZV9zZXRfbWFjX2FkZHJlc3MobHAsIGRldi0+ZGV2X2FkZHIpOworCXhlbWFjbGl0ZV91cGRhdGVfYWRkcmVzcyhscCwgZGV2LT5kZXZfYWRkcik7CiAKIAkvKiBHcmFiIHRoZSBJUlEgKi8KIAlyZXR2YWwgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgeGVtYWNsaXRlX2ludGVycnVwdCwgMCwgZGV2LT5uYW1lLCBkZXYpOwogCWlmIChyZXR2YWwpIHsKIAkJZGV2X2VycigmbHAtPm5kZXYtPmRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBpbnRlcnJ1cHQgJWRcbiIsCiAJCQlkZXYtPmlycSk7CisJCWlmIChscC0+cGh5X2RldikKKwkJCXBoeV9kaXNjb25uZWN0KGxwLT5waHlfZGV2KTsKKwkJbHAtPnBoeV9kZXYgPSBOVUxMOworCiAJCXJldHVybiByZXR2YWw7CiAJfQogCkBAIC02ODIsNiArOTgzLDcgQEAKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIHN0b3BzIHRoZSBUeCBxdWV1ZSwgZGlzYWJsZXMgaW50ZXJydXB0cyBhbmQgZnJlZXMgdGhlIElSUSBmb3IKICAqIHRoZSBFbWFjbGl0ZSBkZXZpY2UuCisgKiBJdCBhbHNvIGRpc2Nvbm5lY3RzIHRoZSBwaHkgZGV2aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgRW1hY2xpdGUgZGV2aWNlLgogICovCiBzdGF0aWMgaW50IHhlbWFjbGl0ZV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewpAQCAtNjkxLDYgKzk5MywxMCBAQAogCXhlbWFjbGl0ZV9kaXNhYmxlX2ludGVycnVwdHMobHApOwogCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCisJaWYgKGxwLT5waHlfZGV2KQorCQlwaHlfZGlzY29ubmVjdChscC0+cGh5X2Rldik7CisJbHAtPnBoeV9kZXYgPSBOVUxMOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1NCw0MiArMTA2MCw2IEBACiB9CiAKIC8qKgotICogeGVtYWNsaXRlX2lvY3RsIC0gUGVyZm9ybSBJTyBDb250cm9sIG9wZXJhdGlvbnMgb24gdGhlIG5ldHdvcmsgZGV2aWNlCi0gKiBAZGV2OglQb2ludGVyIHRvIHRoZSBuZXR3b3JrIGRldmljZQotICogQHJxOgkJUG9pbnRlciB0byB0aGUgaW50ZXJmYWNlIHJlcXVlc3Qgc3RydWN0dXJlCi0gKiBAY21kOglJT0NUTCBjb21tYW5kCi0gKgotICogVGhlIG9ubHkgSU9DVEwgb3BlcmF0aW9uIHN1cHBvcnRlZCBieSB0aGlzIGZ1bmN0aW9uIGlzIHNldHRpbmcgdGhlIE1BQwotICogYWRkcmVzcy4gQW4gZXJyb3IgaXMgcmVwb3J0ZWQgaWYgYW55IG90aGVyIG9wZXJhdGlvbnMgYXJlIHJlcXVlc3RlZC4KLSAqCi0gKiBSZXR1cm46CTAgdG8gaW5kaWNhdGUgc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBmb3IgZmFpbHVyZS4KLSAqLwotc3RhdGljIGludCB4ZW1hY2xpdGVfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICpycSwgaW50IGNtZCkKLXsKLQlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IChzdHJ1Y3QgbmV0X2xvY2FsICopIG5ldGRldl9wcml2KGRldik7Ci0Jc3RydWN0IGh3X2FkZHJfZGF0YSAqaHdfYWRkciA9IChzdHJ1Y3QgaHdfYWRkcl9kYXRhICopICZycS0+aWZyX2h3YWRkcjsKLQotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBTSU9DRVRIVE9PTDoKLQkJcmV0dXJuIC1FSU87Ci0KLQljYXNlIFNJT0NTSUZIV0FERFI6Ci0JCWRldl9lcnIoJmxwLT5uZGV2LT5kZXYsICJTSU9DU0lGSFdBRERSXG4iKTsKLQotCQkvKiBDb3B5IE1BQyBhZGRyZXNzIGluIGZyb20gdXNlciBzcGFjZSAqLwotCQljb3B5X2Zyb21fdXNlcigodm9pZCBfX2ZvcmNlICopIGRldi0+ZGV2X2FkZHIsCi0JCQkgICAgICAgKHZvaWQgX191c2VyIF9fZm9yY2UgKikgaHdfYWRkciwKLQkJCSAgICAgICBJRkhXQUREUkxFTik7Ci0JCXhlbWFjbGl0ZV9zZXRfbWFjX2FkZHJlc3MobHAsIGRldi0+ZGV2X2FkZHIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgogICogeGVtYWNsaXRlX3JlbW92ZV9uZGV2IC0gRnJlZSB0aGUgbmV0d29yayBkZXZpY2UKICAqIEBuZGV2OglQb2ludGVyIHRvIHRoZSBuZXR3b3JrIGRldmljZSB0byBiZSBmcmVlZAogICoKQEAgLTg0MCw2ICsxMTEwLDggQEAKICAqIFRoaXMgZnVuY3Rpb24gcHJvYmVzIGZvciB0aGUgRW1hY2xpdGUgZGV2aWNlIGluIHRoZSBkZXZpY2UgdHJlZS4KICAqIEl0IGluaXRpYWxpemVzIHRoZSBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmUgYW5kIHRoZSBoYXJkd2FyZSwgc2V0cyB0aGUgTUFDCiAgKiBhZGRyZXNzIGFuZCByZWdpc3RlcnMgdGhlIG5ldHdvcmsgZGV2aWNlLgorICogSXQgYWxzbyByZWdpc3RlcnMgYSBtaWlfYnVzIGZvciB0aGUgRW1hY2xpdGUgZGV2aWNlLCBpZiBNRElPIGlzIGluY2x1ZGVkCisgKiBpbiB0aGUgZGV2aWNlLgogICoKICAqIFJldHVybjoJMCwgaWYgdGhlIGRyaXZlciBpcyBib3VuZCB0byB0aGUgRW1hY2xpdGUgZGV2aWNlLCBvcgogICoJCWEgbmVnYXRpdmUgZXJyb3IgaWYgdGhlcmUgaXMgZmFpbHVyZS4KQEAgLTg4MCw2ICsxMTUyLDcgQEAKIAl9CiAKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCBuZGV2KTsKKwlTRVRfTkVUREVWX0RFVihuZGV2LCAmb2ZkZXYtPmRldik7CiAKIAluZGV2LT5pcnEgPSByX2lycS5zdGFydDsKIAluZGV2LT5tZW1fc3RhcnQgPSByX21lbS5zdGFydDsKQEAgLTkyMywxMyArMTE5NiwxNCBAQAogCW91dF9iZTMyKGxwLT5iYXNlX2FkZHIgKyBYRUxfQlVGRkVSX09GRlNFVCArIFhFTF9UU1JfT0ZGU0VULCAwKTsKIAogCS8qIFNldCB0aGUgTUFDIGFkZHJlc3MgaW4gdGhlIEVtYWNMaXRlIGRldmljZSAqLwotCXhlbWFjbGl0ZV9zZXRfbWFjX2FkZHJlc3MobHAsIG5kZXYtPmRldl9hZGRyKTsKKwl4ZW1hY2xpdGVfdXBkYXRlX2FkZHJlc3MobHAsIG5kZXYtPmRldl9hZGRyKTsKIAotCWRldl9pbmZvKGRldiwKLQkJICJNQUMgYWRkcmVzcyBpcyBub3cgJTJ4OiUyeDolMng6JTJ4OiUyeDolMnhcbiIsCi0JCSBuZGV2LT5kZXZfYWRkclswXSwgbmRldi0+ZGV2X2FkZHJbMV0sCi0JCSBuZGV2LT5kZXZfYWRkclsyXSwgbmRldi0+ZGV2X2FkZHJbM10sCi0JCSBuZGV2LT5kZXZfYWRkcls0XSwgbmRldi0+ZGV2X2FkZHJbNV0pOworCWxwLT5waHlfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUob2ZkZXYtPm5vZGUsICJwaHktaGFuZGxlIiwgMCk7CisJcmMgPSB4ZW1hY2xpdGVfbWRpb19zZXR1cChscCwgJm9mZGV2LT5kZXYpOworCWlmIChyYykKKwkJZGV2X3dhcm4oJm9mZGV2LT5kZXYsICJlcnJvciByZWdpc3RlcmluZyBNRElPIGJ1c1xuIik7CisKKwlkZXZfaW5mbyhkZXYsICJNQUMgYWRkcmVzcyBpcyBub3cgJXBNXG4iLCBuZGV2LT5kZXZfYWRkcik7CiAKIAluZGV2LT5uZXRkZXZfb3BzID0gJnhlbWFjbGl0ZV9uZXRkZXZfb3BzOwogCW5kZXYtPmZsYWdzICY9IH5JRkZfTVVMVElDQVNUOwpAQCAtOTcyLDEyICsxMjQ2LDI1IEBACiAJc3RydWN0IGRldmljZSAqZGV2ID0gJm9mX2Rldi0+ZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKKwlzdHJ1Y3QgbmV0X2xvY2FsICpscCA9IChzdHJ1Y3QgbmV0X2xvY2FsICopIG5ldGRldl9wcml2KG5kZXYpOworCisJLyogVW4tcmVnaXN0ZXIgdGhlIG1paV9idXMsIGlmIGNvbmZpZ3VyZWQgKi8KKwlpZiAobHAtPmhhc19tZGlvKSB7CisJCW1kaW9idXNfdW5yZWdpc3RlcihscC0+bWlpX2J1cyk7CisJCWtmcmVlKGxwLT5taWlfYnVzLT5pcnEpOworCQltZGlvYnVzX2ZyZWUobHAtPm1paV9idXMpOworCQlscC0+bWlpX2J1cyA9IE5VTEw7CisJfQorCiAJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7CiAKKwlpZiAobHAtPnBoeV9ub2RlKQorCQlvZl9ub2RlX3B1dChscC0+cGh5X25vZGUpOworCWxwLT5waHlfbm9kZSA9IE5VTEw7CisKIAlyZWxlYXNlX21lbV9yZWdpb24obmRldi0+bWVtX3N0YXJ0LCBuZGV2LT5tZW1fZW5kLW5kZXYtPm1lbV9zdGFydCArIDEpOwogCiAJeGVtYWNsaXRlX3JlbW92ZV9uZGV2KG5kZXYpOwotCiAJZGV2X3NldF9kcnZkYXRhKGRldiwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKQEAgLTk4Nyw3ICsxMjc0LDcgQEAKIAkubmRvX29wZW4JCT0geGVtYWNsaXRlX29wZW4sCiAJLm5kb19zdG9wCQk9IHhlbWFjbGl0ZV9jbG9zZSwKIAkubmRvX3N0YXJ0X3htaXQJCT0geGVtYWNsaXRlX3NlbmQsCi0JLm5kb19kb19pb2N0bAkJPSB4ZW1hY2xpdGVfaW9jdGwsCisJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSB4ZW1hY2xpdGVfc2V0X21hY19hZGRyZXNzLAogCS5uZG9fdHhfdGltZW91dAkJPSB4ZW1hY2xpdGVfdHhfdGltZW91dCwKIAkubmRvX2dldF9zdGF0cwkJPSB4ZW1hY2xpdGVfZ2V0X3N0YXRzLAogfTsKQEAgLTk5OSw2ICsxMjg2LDcgQEAKIAl7IC5jb21wYXRpYmxlID0gInhsbngseHBzLWV0aGVybmV0bGl0ZS0xLjAwLmEiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAieGxueCx4cHMtZXRoZXJuZXRsaXRlLTIuMDAuYSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1ldGhlcm5ldGxpdGUtMi4wMS5hIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gInhsbngseHBzLWV0aGVybmV0bGl0ZS0zLjAwLmEiLCB9LAogCXsgLyogZW5kIG9mIGxpc3QgKi8gfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCB4ZW1hY2xpdGVfb2ZfbWF0Y2gpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQveWVsbG93ZmluLmMgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwppbmRleCAwZjc3M2E5Li43ZDQxMDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYworKysgYi9kcml2ZXJzL25ldC95ZWxsb3dmaW4uYwpAQCAtMjMsMTIgKzIzLDEyIEBACiAKICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjogIiBmbXQKKwogI2RlZmluZSBEUlZfTkFNRQkieWVsbG93ZmluIgogI2RlZmluZSBEUlZfVkVSU0lPTgkiMi4xIgogI2RlZmluZSBEUlZfUkVMREFURQkiU2VwIDExLCAyMDA2IgogCi0jZGVmaW5lIFBGWCBEUlZfTkFNRSAiOiAiCi0KIC8qIFRoZSB1c2VyLWNvbmZpZ3VyYWJsZSB2YWx1ZXMuCiAgICBUaGVzZSBtYXkgYmUgbW9kaWZpZWQgd2hlbiBhIGRyaXZlciBtb2R1bGUgaXMgbG9hZGVkLiovCiAKQEAgLTIzNyw3ICsyMzcsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHllbGxvd2Zpbl9wY2lfdGJsW10gPSB7CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoeWVsbG93ZmluX3BjaV90YmwpID0gewogCXsgMHgxMDAwLCAweDA3MDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwKIAl7IDB4MTAwMCwgMHgwNzAxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAxIH0sCiAJeyB9CkBAIC0zOTksNyArMzk5LDcgQEAKIAogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVvZigqbnApKTsKIAlpZiAoIWRldikgewotCQlwcmludGsgKEtFUk5fRVJSIFBGWCAiY2Fubm90IGFsbG9jYXRlIGV0aGVybmV0IGRldmljZVxuIik7CisJCXByX2VycigiY2Fubm90IGFsbG9jYXRlIGV0aGVybmV0IGRldmljZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlTRVRfTkVUREVWX0RFVihkZXYsICZwZGV2LT5kZXYpOwpAQCAtNDg3LDEwICs0ODcsMTAgQEAKIAlpZiAoaSkKIAkJZ290byBlcnJfb3V0X3VubWFwX3N0YXR1czsKIAotCXByaW50ayhLRVJOX0lORk8gIiVzOiAlcyB0eXBlICU4eCBhdCAlcCwgJXBNLCBJUlEgJWQuXG4iLAotCQkgICBkZXYtPm5hbWUsIHBjaV9pZF90YmxbY2hpcF9pZHhdLm5hbWUsCi0JCSAgIGlvcmVhZDMyKGlvYWRkciArIENoaXBSZXYpLCBpb2FkZHIsCi0JCSAgIGRldi0+ZGV2X2FkZHIsIGlycSk7CisJbmV0ZGV2X2luZm8oZGV2LCAiJXMgdHlwZSAlOHggYXQgJXAsICVwTSwgSVJRICVkXG4iLAorCQkgICAgcGNpX2lkX3RibFtjaGlwX2lkeF0ubmFtZSwKKwkJICAgIGlvcmVhZDMyKGlvYWRkciArIENoaXBSZXYpLCBpb2FkZHIsCisJCSAgICBkZXYtPmRldl9hZGRyLCBpcnEpOwogCiAJaWYgKG5wLT5kcnZfZmxhZ3MgJiBIYXNNSUkpIHsKIAkJaW50IHBoeSwgcGh5X2lkeCA9IDA7CkBAIC00OTksOSArNDk5LDggQEAKIAkJCWlmIChtaWlfc3RhdHVzICE9IDB4ZmZmZiAgJiYgIG1paV9zdGF0dXMgIT0gMHgwMDAwKSB7CiAJCQkJbnAtPnBoeXNbcGh5X2lkeCsrXSA9IHBoeTsKIAkJCQlucC0+YWR2ZXJ0aXNpbmcgPSBtZGlvX3JlYWQoaW9hZGRyLCBwaHksIDQpOwotCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBNSUkgUEhZIGZvdW5kIGF0IGFkZHJlc3MgJWQsIHN0YXR1cyAiCi0JCQkJCSAgICIweCU0LjR4IGFkdmVydGlzaW5nICU0LjR4LlxuIiwKLQkJCQkJICAgZGV2LT5uYW1lLCBwaHksIG1paV9zdGF0dXMsIG5wLT5hZHZlcnRpc2luZyk7CisJCQkJbmV0ZGV2X2luZm8oZGV2LCAiTUlJIFBIWSBmb3VuZCBhdCBhZGRyZXNzICVkLCBzdGF0dXMgMHglMDR4IGFkdmVydGlzaW5nICUwNHhcbiIsCisJCQkJCSAgICBwaHksIG1paV9zdGF0dXMsIG5wLT5hZHZlcnRpc2luZyk7CiAJCQl9CiAJCX0KIAkJbnAtPm1paV9jbnQgPSBwaHlfaWR4OwpAQCAtNTg0LDggKzU4Myw4IEBACiAJCXJldHVybiByZXQ7CiAKIAlpZiAoeWVsbG93ZmluX2RlYnVnID4gMSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB5ZWxsb3dmaW5fb3BlbigpIGlycSAlZC5cbiIsCi0JCQkgICBkZXYtPm5hbWUsIGRldi0+aXJxKTsKKwkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICIlcygpIGlycSAlZFxuIiwKKwkJCSAgICAgIF9fZnVuY19fLCBkZXYtPmlycSk7CiAKIAlyZXQgPSB5ZWxsb3dmaW5faW5pdF9yaW5nKGRldik7CiAJaWYgKHJldCkgewpAQCAtNjQyLDggKzY0MSw3IEBACiAJaW93cml0ZTMyKDB4ODAwMDgwMDAsIGlvYWRkciArIFR4Q3RybCk7CiAKIAlpZiAoeWVsbG93ZmluX2RlYnVnID4gMikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IERvbmUgeWVsbG93ZmluX29wZW4oKS5cbiIsCi0JCQkgICBkZXYtPm5hbWUpOworCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgIkRvbmUgJXMoKVxuIiwgX19mdW5jX18pOwogCX0KIAogCS8qIFNldCB0aGUgdGltZXIgdG8gY2hlY2sgZm9yIGxpbmsgYmVhdC4gKi8KQEAgLTY2NCw4ICs2NjIsOCBAQAogCWludCBuZXh0X3RpY2sgPSA2MCpIWjsKIAogCWlmICh5ZWxsb3dmaW5fZGVidWcgPiAzKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogWWVsbG93ZmluIHRpbWVyIHRpY2ssIHN0YXR1cyAlOC44eC5cbiIsCi0JCQkgICBkZXYtPm5hbWUsIGlvcmVhZDE2KGlvYWRkciArIEludHJTdGF0dXMpKTsKKwkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICJZZWxsb3dmaW4gdGltZXIgdGljaywgc3RhdHVzICUwOHhcbiIsCisJCQkgICAgICBpb3JlYWQxNihpb2FkZHIgKyBJbnRyU3RhdHVzKSk7CiAJfQogCiAJaWYgKHlwLT5taWlfY250KSB7CkBAIC02NzMsOSArNjcxLDggQEAKIAkJaW50IGxwYSA9IG1kaW9fcmVhZChpb2FkZHIsIHlwLT5waHlzWzBdLCBNSUlfTFBBKTsKIAkJaW50IG5lZ290aWF0ZWQgPSBscGEgJiB5cC0+YWR2ZXJ0aXNpbmc7CiAJCWlmICh5ZWxsb3dmaW5fZGVidWcgPiAxKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBNSUkgIyVkIHN0YXR1cyByZWdpc3RlciBpcyAlNC40eCwgIgotCQkJCSAgICJsaW5rIHBhcnRuZXIgY2FwYWJpbGl0eSAlNC40eC5cbiIsCi0JCQkJICAgZGV2LT5uYW1lLCB5cC0+cGh5c1swXSwgYm1zciwgbHBhKTsKKwkJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCAiTUlJICMlZCBzdGF0dXMgcmVnaXN0ZXIgaXMgJTA0eCwgbGluayBwYXJ0bmVyIGNhcGFiaWxpdHkgJTA0eFxuIiwKKwkJCQkgICAgICB5cC0+cGh5c1swXSwgYm1zciwgbHBhKTsKIAogCQl5cC0+ZnVsbF9kdXBsZXggPSBtaWlfZHVwbGV4KHlwLT5kdXBsZXhfbG9jaywgbmVnb3RpYXRlZCk7CiAKQEAgLTY5NiwyNSArNjkzLDI0IEBACiAJc3RydWN0IHllbGxvd2Zpbl9wcml2YXRlICp5cCA9IG5ldGRldl9wcml2KGRldik7CiAJdm9pZCBfX2lvbWVtICppb2FkZHIgPSB5cC0+YmFzZTsKIAotCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBZZWxsb3dmaW4gdHJhbnNtaXQgdGltZWQgb3V0IGF0ICVkLyVkIFR4ICIKLQkJICAgInN0YXR1cyAlNC40eCwgUnggc3RhdHVzICU0LjR4LCByZXNldHRpbmcuLi5cbiIsCi0JCSAgIGRldi0+bmFtZSwgeXAtPmN1cl90eCwgeXAtPmRpcnR5X3R4LAotCQkgICBpb3JlYWQzMihpb2FkZHIgKyBUeFN0YXR1cyksIGlvcmVhZDMyKGlvYWRkciArIFJ4U3RhdHVzKSk7CisJbmV0ZGV2X3dhcm4oZGV2LCAiWWVsbG93ZmluIHRyYW5zbWl0IHRpbWVkIG91dCBhdCAlZC8lZCBUeCBzdGF0dXMgJTA0eCwgUnggc3RhdHVzICUwNHgsIHJlc2V0dGluZy4uLlxuIiwKKwkJICAgIHlwLT5jdXJfdHgsIHlwLT5kaXJ0eV90eCwKKwkJICAgIGlvcmVhZDMyKGlvYWRkciArIFR4U3RhdHVzKSwKKwkJICAgIGlvcmVhZDMyKGlvYWRkciArIFJ4U3RhdHVzKSk7CiAKIAkvKiBOb3RlOiB0aGVzZSBzaG91bGQgYmUgS0VSTl9ERUJVRy4gKi8KIAlpZiAoeWVsbG93ZmluX2RlYnVnKSB7CiAJCWludCBpOwotCQlwcmludGsoS0VSTl9XQVJOSU5HICIgIFJ4IHJpbmcgJXA6ICIsIHlwLT5yeF9yaW5nKTsKKwkJcHJfd2FybmluZygiICBSeCByaW5nICVwOiAiLCB5cC0+cnhfcmluZyk7CiAJCWZvciAoaSA9IDA7IGkgPCBSWF9SSU5HX1NJWkU7IGkrKykKLQkJCXByaW50ayhLRVJOX0NPTlQgIiAlOC44eCIsCi0JCQkgICAgICAgeXAtPnJ4X3JpbmdbaV0ucmVzdWx0X3N0YXR1cyk7Ci0JCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkciICBUeCByaW5nICVwOiAiLCB5cC0+dHhfcmluZyk7CisJCQlwcl9jb250KCIgJTA4eCIsIHlwLT5yeF9yaW5nW2ldLnJlc3VsdF9zdGF0dXMpOworCQlwcl9jb250KCJcbiIpOworCQlwcl93YXJuaW5nKCIgIFR4IHJpbmcgJXA6ICIsIHlwLT50eF9yaW5nKTsKIAkJZm9yIChpID0gMDsgaSA8IFRYX1JJTkdfU0laRTsgaSsrKQotCQkJcHJpbnRrKEtFUk5fQ09OVCAiICU0LjR4IC8lOC44eCIsCisJCQlwcl9jb250KCIgJTA0eCAvJTA4eCIsCiAJCQkgICAgICAgeXAtPnR4X3N0YXR1c1tpXS50eF9lcnJzLAogCQkJICAgICAgIHlwLT50eF9yaW5nW2ldLnJlc3VsdF9zdGF0dXMpOwotCQlwcmludGsoS0VSTl9DT05UICJcbiIpOworCQlwcl9jb250KCJcbiIpOwogCX0KIAogCS8qIElmIHRoZSBoYXJkd2FyZSBpcyBmb3VuZCB0byBoYW5nIHJlZ3VsYXJseSwgd2Ugd2lsbCB1cGRhdGUgdGhlIGNvZGUKQEAgLTg5MSw4ICs4ODcsOCBAQAogCQl5cC0+dHhfZnVsbCA9IDE7CiAKIAlpZiAoeWVsbG93ZmluX2RlYnVnID4gNCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFllbGxvd2ZpbiB0cmFuc21pdCBmcmFtZSAjJWQgcXVldWVkIGluIHNsb3QgJWQuXG4iLAotCQkJICAgZGV2LT5uYW1lLCB5cC0+Y3VyX3R4LCBlbnRyeSk7CisJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCAiWWVsbG93ZmluIHRyYW5zbWl0IGZyYW1lICMlZCBxdWV1ZWQgaW4gc2xvdCAlZFxuIiwKKwkJCSAgICAgIHlwLT5jdXJfdHgsIGVudHJ5KTsKIAl9CiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTkxNiw4ICs5MTIsOCBAQAogCQl1MTYgaW50cl9zdGF0dXMgPSBpb3JlYWQxNihpb2FkZHIgKyBJbnRyQ2xlYXIpOwogCiAJCWlmICh5ZWxsb3dmaW5fZGVidWcgPiA0KQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBZZWxsb3dmaW4gaW50ZXJydXB0LCBzdGF0dXMgJTQuNHguXG4iLAotCQkJCSAgIGRldi0+bmFtZSwgaW50cl9zdGF0dXMpOworCQkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICJZZWxsb3dmaW4gaW50ZXJydXB0LCBzdGF0dXMgJTA0eFxuIiwKKwkJCQkgICAgICBpbnRyX3N0YXR1cyk7CiAKIAkJaWYgKGludHJfc3RhdHVzID09IDApCiAJCQlicmVhazsKQEAgLTk2MywxMyArOTU5LDEyIEBACiAKICNpZm5kZWYgZmluYWxfdmVyc2lvbgogCQkJCWlmICh5ZWxsb3dmaW5fZGVidWcgPiA1KQotCQkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFR4IHF1ZXVlICVkIGNoZWNrLCBUeCBzdGF0dXMgIgotCQkJCQkJICAgIiU0LjR4ICU0LjR4ICU0LjR4ICU0LjR4LlxuIiwKLQkJCQkJCSAgIGRldi0+bmFtZSwgZW50cnksCi0JCQkJCQkgICB5cC0+dHhfc3RhdHVzW2VudHJ5XS50eF9jbnQsCi0JCQkJCQkgICB5cC0+dHhfc3RhdHVzW2VudHJ5XS50eF9lcnJzLAotCQkJCQkJICAgeXAtPnR4X3N0YXR1c1tlbnRyeV0udG90YWxfdHhfY250LAotCQkJCQkJICAgeXAtPnR4X3N0YXR1c1tlbnRyeV0ucGF1c2VkKTsKKwkJCQkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICJUeCBxdWV1ZSAlZCBjaGVjaywgVHggc3RhdHVzICUwNHggJTA0eCAlMDR4ICUwNHhcbiIsCisJCQkJCQkgICAgICBlbnRyeSwKKwkJCQkJCSAgICAgIHlwLT50eF9zdGF0dXNbZW50cnldLnR4X2NudCwKKwkJCQkJCSAgICAgIHlwLT50eF9zdGF0dXNbZW50cnldLnR4X2VycnMsCisJCQkJCQkgICAgICB5cC0+dHhfc3RhdHVzW2VudHJ5XS50b3RhbF90eF9jbnQsCisJCQkJCQkgICAgICB5cC0+dHhfc3RhdHVzW2VudHJ5XS5wYXVzZWQpOwogI2VuZGlmCiAJCQkJaWYgKHR4X2VycnMgPT0gMCkKIAkJCQkJYnJlYWs7CS8qIEl0IHN0aWxsIGhhc24ndCBiZWVuIFR4ZWQgKi8KQEAgLTk3OCw4ICs5NzMsOCBAQAogCQkJCQkvKiBUaGVyZSB3YXMgYW4gbWFqb3IgZXJyb3IsIGxvZyBpdC4gKi8KICNpZm5kZWYgZmluYWxfdmVyc2lvbgogCQkJCQlpZiAoeWVsbG93ZmluX2RlYnVnID4gMSkKLQkJCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVHJhbnNtaXQgZXJyb3IsIFR4IHN0YXR1cyAlNC40eC5cbiIsCi0JCQkJCQkJICAgZGV2LT5uYW1lLCB0eF9lcnJzKTsKKwkJCQkJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCAiVHJhbnNtaXQgZXJyb3IsIFR4IHN0YXR1cyAlMDR4XG4iLAorCQkJCQkJCSAgICAgIHR4X2VycnMpOwogI2VuZGlmCiAJCQkJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCQkJCWlmICh0eF9lcnJzICYgMHhGODAwKSBkZXYtPnN0YXRzLnR4X2Fib3J0ZWRfZXJyb3JzKys7CkBAIC05ODksOCArOTg0LDggQEAKIAkJCQl9IGVsc2UgewogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCiAJCQkJCWlmICh5ZWxsb3dmaW5fZGVidWcgPiA0KQotCQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBOb3JtYWwgdHJhbnNtaXQsIFR4IHN0YXR1cyAlNC40eC5cbiIsCi0JCQkJCQkJICAgZGV2LT5uYW1lLCB0eF9lcnJzKTsKKwkJCQkJCW5ldGRldl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCAiTm9ybWFsIHRyYW5zbWl0LCBUeCBzdGF0dXMgJTA0eFxuIiwKKwkJCQkJCQkgICAgICB0eF9lcnJzKTsKICNlbmRpZgogCQkJCQlkZXYtPnN0YXRzLnR4X2J5dGVzICs9IHNrYi0+bGVuOwogCQkJCQlkZXYtPnN0YXRzLmNvbGxpc2lvbnMgKz0gdHhfZXJycyAmIDE1OwpAQCAtMTAwOCw4ICsxMDAzLDggQEAKIAogI2lmbmRlZiBmaW5hbF92ZXJzaW9uCiAJCQlpZiAoeXAtPmN1cl90eCAtIGRpcnR5X3R4ID4gVFhfUklOR19TSVpFKSB7Ci0JCQkJcHJpbnRrKEtFUk5fRVJSICIlczogT3V0LW9mLXN5bmMgZGlydHkgcG9pbnRlciwgJWQgdnMuICVkLCBmdWxsPSVkLlxuIiwKLQkJCQkJICAgZGV2LT5uYW1lLCBkaXJ0eV90eCwgeXAtPmN1cl90eCwgeXAtPnR4X2Z1bGwpOworCQkJCW5ldGRldl9lcnIoZGV2LCAiT3V0LW9mLXN5bmMgZGlydHkgcG9pbnRlciwgJWQgdnMuICVkLCBmdWxsPSVkXG4iLAorCQkJCQkgICBkaXJ0eV90eCwgeXAtPmN1cl90eCwgeXAtPnR4X2Z1bGwpOwogCQkJCWRpcnR5X3R4ICs9IFRYX1JJTkdfU0laRTsKIAkJCX0KICNlbmRpZgpAQCAtMTAzMSwxNiArMTAyNiwxNSBAQAogCQkJeWVsbG93ZmluX2Vycm9yKGRldiwgaW50cl9zdGF0dXMpOwogCiAJCWlmICgtLWJvZ3VzY250IDwgMCkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFRvbyBtdWNoIHdvcmsgYXQgaW50ZXJydXB0LCAiCi0JCQkJICAgInN0YXR1cz0weCU0LjR4LlxuIiwKLQkJCQkgICBkZXYtPm5hbWUsIGludHJfc3RhdHVzKTsKKwkJCW5ldGRldl93YXJuKGRldiwgIlRvbyBtdWNoIHdvcmsgYXQgaW50ZXJydXB0LCBzdGF0dXM9JSMwNHhcbiIsCisJCQkJICAgIGludHJfc3RhdHVzKTsKIAkJCWJyZWFrOwogCQl9CiAJfSB3aGlsZSAoMSk7CiAKIAlpZiAoeWVsbG93ZmluX2RlYnVnID4gMykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBleGl0aW5nIGludGVycnVwdCwgc3RhdHVzPSUjNC40eC5cbiIsCi0JCQkgICBkZXYtPm5hbWUsIGlvcmVhZDE2KGlvYWRkciArIEludHJTdGF0dXMpKTsKKwkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICJleGl0aW5nIGludGVycnVwdCwgc3RhdHVzPSUjMDR4XG4iLAorCQkJICAgICAgaW9yZWFkMTYoaW9hZGRyICsgSW50clN0YXR1cykpOwogCiAJc3Bpbl91bmxvY2sgKCZ5cC0+bG9jayk7CiAJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CkBAIC0xMDU1LDkgKzEwNDksOSBAQAogCWludCBib2d1c2NudCA9IHlwLT5kaXJ0eV9yeCArIFJYX1JJTkdfU0laRSAtIHlwLT5jdXJfcng7CiAKIAlpZiAoeWVsbG93ZmluX2RlYnVnID4gNCkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiIEluIHllbGxvd2Zpbl9yeCgpLCBlbnRyeSAlZCBzdGF0dXMgJTguOHguXG4iLAorCQlwcmludGsoS0VSTl9ERUJVRyAiIEluIHllbGxvd2Zpbl9yeCgpLCBlbnRyeSAlZCBzdGF0dXMgJTA4eFxuIiwKIAkJCSAgIGVudHJ5LCB5cC0+cnhfcmluZ1tlbnRyeV0ucmVzdWx0X3N0YXR1cyk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIgICAjJWQgZGVzYy4gJTguOHggJTguOHggJTguOHguXG4iLAorCQlwcmludGsoS0VSTl9ERUJVRyAiICAgIyVkIGRlc2MuICUwOHggJTA4eCAlMDh4XG4iLAogCQkJICAgZW50cnksIHlwLT5yeF9yaW5nW2VudHJ5XS5kYmRtYV9jbWQsIHlwLT5yeF9yaW5nW2VudHJ5XS5hZGRyLAogCQkJICAgeXAtPnJ4X3JpbmdbZW50cnldLnJlc3VsdF9zdGF0dXMpOwogCX0KQEAgLTEwODEsMjAgKzEwNzUsMjAgQEAKIAkJCWxlMzJfdG9fY3B1KGRlc2MtPnJlc3VsdF9zdGF0dXMpKSAmIDB4ZmZmZjsKIAkJZnJhbWVfc3RhdHVzID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCYoYnVmX2FkZHJbZGF0YV9zaXplIC0gMl0pKTsKIAkJaWYgKHllbGxvd2Zpbl9kZWJ1ZyA+IDQpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiICB5ZWxsb3dmaW5fcngoKSBzdGF0dXMgd2FzICU0LjR4LlxuIiwKLQkJCQkgICBmcmFtZV9zdGF0dXMpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXMoKSBzdGF0dXMgd2FzICUwNHhcbiIsCisJCQkgICAgICAgX19mdW5jX18sIGZyYW1lX3N0YXR1cyk7CiAJCWlmICgtLWJvZ3VzY250IDwgMCkKIAkJCWJyZWFrOwogCQlpZiAoICEgKGRlc2Nfc3RhdHVzICYgUlhfRU9QKSkgewogCQkJaWYgKGRhdGFfc2l6ZSAhPSAwKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBPdmVyc2l6ZWQgRXRoZXJuZXQgZnJhbWUgc3Bhbm5lZCBtdWx0aXBsZSBidWZmZXJzLCIKLQkJCQkJICAgIiBzdGF0dXMgJTQuNHgsIGRhdGFfc2l6ZSAlZCFcbiIsIGRldi0+bmFtZSwgZGVzY19zdGF0dXMsIGRhdGFfc2l6ZSk7CisJCQkJbmV0ZGV2X3dhcm4oZGV2LCAiT3ZlcnNpemVkIEV0aGVybmV0IGZyYW1lIHNwYW5uZWQgbXVsdGlwbGUgYnVmZmVycywgc3RhdHVzICUwNHgsIGRhdGFfc2l6ZSAlZCFcbiIsCisJCQkJCSAgICBkZXNjX3N0YXR1cywgZGF0YV9zaXplKTsKIAkJCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycysrOwogCQl9IGVsc2UgaWYgKCh5cC0+ZHJ2X2ZsYWdzICYgSXNHaWdhYml0KSAgJiYgIChmcmFtZV9zdGF0dXMgJiAweDAwMzgpKSB7CiAJCQkvKiBUaGVyZSB3YXMgYSBlcnJvci4gKi8KIAkJCWlmICh5ZWxsb3dmaW5fZGVidWcgPiAzKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIgIHllbGxvd2Zpbl9yeCgpIFJ4IGVycm9yIHdhcyAlNC40eC5cbiIsCi0JCQkJCSAgIGZyYW1lX3N0YXR1cyk7CisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAgJXMoKSBSeCBlcnJvciB3YXMgJTA0eFxuIiwKKwkJCQkgICAgICAgX19mdW5jX18sIGZyYW1lX3N0YXR1cyk7CiAJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQkJaWYgKGZyYW1lX3N0YXR1cyAmIDB4MDA2MCkgZGV2LT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAJCQlpZiAoZnJhbWVfc3RhdHVzICYgMHgwMDA4KSBkZXYtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9ycysrOwpAQCAtMTExOCw4ICsxMTEyLDggQEAKIAkJCQllbnRyeSpzaXplb2Yoc3RydWN0IHllbGxvd2Zpbl9kZXNjKSksCiAJCQkJIlwzNzdcMzc3XDM3N1wzNzdcMzc3XDM3NyIsIDYpICE9IDApIHsKIAkJCWlmIChib2d1c19yeCsrID09IDApCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IEJhZCBmcmFtZSB0byAlcE1cbiIsCi0JCQkJCSAgIGRldi0+bmFtZSwgYnVmX2FkZHIpOworCQkJCW5ldGRldl93YXJuKGRldiwgIkJhZCBmcmFtZSB0byAlcE1cbiIsCisJCQkJCSAgICBidWZfYWRkcik7CiAjZW5kaWYKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xMTI5LDkgKzExMjMsOCBAQAogCiAjaWZuZGVmIGZpbmFsX3ZlcnNpb24KIAkJCWlmICh5ZWxsb3dmaW5fZGVidWcgPiA0KQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIgIHllbGxvd2Zpbl9yeCgpIG5vcm1hbCBSeCBwa3QgbGVuZ3RoICVkIgotCQkJCQkgICAiIG9mICVkLCBib2d1c19jbnQgJWQuXG4iLAotCQkJCQkgICBwa3RfbGVuLCBkYXRhX3NpemUsIGJvZ3VzY250KTsKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiICAlcygpIG5vcm1hbCBSeCBwa3QgbGVuZ3RoICVkIG9mICVkLCBib2d1c19jbnQgJWRcbiIsCisJCQkJICAgICAgIF9fZnVuY19fLCBwa3RfbGVuLCBkYXRhX3NpemUsIGJvZ3VzY250KTsKICNlbmRpZgogCQkJLyogQ2hlY2sgaWYgdGhlIHBhY2tldCBpcyBsb25nIGVub3VnaCB0byBqdXN0IHBhc3MgdXAgdGhlIHNrYnVmZgogCQkJICAgd2l0aG91dCBjb3B5aW5nIHRvIGEgcHJvcGVybHkgc2l6ZWQgc2tidWZmLiAqLwpAQCAtMTE5MSw4ICsxMTg0LDcgQEAKIAogc3RhdGljIHZvaWQgeWVsbG93ZmluX2Vycm9yKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBpbnRyX3N0YXR1cykKIHsKLQlwcmludGsoS0VSTl9FUlIgIiVzOiBTb21ldGhpbmcgV2lja2VkIGhhcHBlbmVkISAlNC40eC5cbiIsCi0JCSAgIGRldi0+bmFtZSwgaW50cl9zdGF0dXMpOworCW5ldGRldl9lcnIoZGV2LCAiU29tZXRoaW5nIFdpY2tlZCBoYXBwZW5lZCEgJTA0eFxuIiwgaW50cl9zdGF0dXMpOwogCS8qIEhtbW1tbSwgaXQncyBub3QgY2xlYXIgd2hhdCB0byBkbyBoZXJlLiAqLwogCWlmIChpbnRyX3N0YXR1cyAmIChJbnRyVHhQQ0lFcnIgfCBJbnRyVHhQQ0lGYXVsdCkpCiAJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CkBAIC0xMjA5LDEzICsxMjAxLDEzIEBACiAJbmV0aWZfc3RvcF9xdWV1ZSAoZGV2KTsKIAogCWlmICh5ZWxsb3dmaW5fZGVidWcgPiAxKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogU2h1dHRpbmcgZG93biBldGhlcmNhcmQsIHN0YXR1cyB3YXMgVHggJTQuNHggIgotCQkJICAgIlJ4ICU0LjR4IEludCAlMi4yeC5cbiIsCi0JCQkgICBkZXYtPm5hbWUsIGlvcmVhZDE2KGlvYWRkciArIFR4U3RhdHVzKSwKLQkJCSAgIGlvcmVhZDE2KGlvYWRkciArIFJ4U3RhdHVzKSwKLQkJCSAgIGlvcmVhZDE2KGlvYWRkciArIEludHJTdGF0dXMpKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBRdWV1ZSBwb2ludGVycyB3ZXJlIFR4ICVkIC8gJWQsICBSeCAlZCAvICVkLlxuIiwKLQkJCSAgIGRldi0+bmFtZSwgeXAtPmN1cl90eCwgeXAtPmRpcnR5X3R4LCB5cC0+Y3VyX3J4LCB5cC0+ZGlydHlfcngpOworCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgIlNodXR0aW5nIGRvd24gZXRoZXJjYXJkLCBzdGF0dXMgd2FzIFR4ICUwNHggUnggJTA0eCBJbnQgJTAyeFxuIiwKKwkJCSAgICAgIGlvcmVhZDE2KGlvYWRkciArIFR4U3RhdHVzKSwKKwkJCSAgICAgIGlvcmVhZDE2KGlvYWRkciArIFJ4U3RhdHVzKSwKKwkJCSAgICAgIGlvcmVhZDE2KGlvYWRkciArIEludHJTdGF0dXMpKTsKKwkJbmV0ZGV2X3ByaW50ayhLRVJOX0RFQlVHLCBkZXYsICJRdWV1ZSBwb2ludGVycyB3ZXJlIFR4ICVkIC8gJWQsICBSeCAlZCAvICVkXG4iLAorCQkJICAgICAgeXAtPmN1cl90eCwgeXAtPmRpcnR5X3R4LAorCQkJICAgICAgeXAtPmN1cl9yeCwgeXAtPmRpcnR5X3J4KTsKIAl9CiAKIAkvKiBEaXNhYmxlIGludGVycnVwdHMgYnkgY2xlYXJpbmcgdGhlIGludGVycnVwdCBtYXNrLiAqLwpAQCAtMTIyOSwzMyArMTIyMSwzNSBAQAogCiAjaWYgZGVmaW5lZChfX2kzODZfXykKIAlpZiAoeWVsbG93ZmluX2RlYnVnID4gMikgewotCQlwcmludGsoS0VSTl9ERUJVRyIgIFR4IHJpbmcgYXQgJTguOGxseDpcbiIsCisJCXByaW50ayhLRVJOX0RFQlVHICIgIFR4IHJpbmcgYXQgJTA4bGx4OlxuIiwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKXlwLT50eF9yaW5nX2RtYSk7CiAJCWZvciAoaSA9IDA7IGkgPCBUWF9SSU5HX1NJWkUqMjsgaSsrKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAlYyAjJWQgZGVzYy4gJTguOHggJTguOHggJTguOHggJTguOHguXG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAlYyAjJWQgZGVzYy4gJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKIAkJCQkgICBpb3JlYWQzMihpb2FkZHIgKyBUeFB0cikgPT0gKGxvbmcpJnlwLT50eF9yaW5nW2ldID8gJz4nIDogJyAnLAogCQkJCSAgIGksIHlwLT50eF9yaW5nW2ldLmRiZG1hX2NtZCwgeXAtPnR4X3JpbmdbaV0uYWRkciwKIAkJCQkgICB5cC0+dHhfcmluZ1tpXS5icmFuY2hfYWRkciwgeXAtPnR4X3JpbmdbaV0ucmVzdWx0X3N0YXR1cyk7CiAJCXByaW50ayhLRVJOX0RFQlVHICIgIFR4IHN0YXR1cyAlcDpcbiIsIHlwLT50eF9zdGF0dXMpOwogCQlmb3IgKGkgPSAwOyBpIDwgVFhfUklOR19TSVpFOyBpKyspCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiICAgIyVkIHN0YXR1cyAlNC40eCAlNC40eCAlNC40eCAlNC40eC5cbiIsCisJCQlwcmludGsoS0VSTl9ERUJVRyAiICAgIyVkIHN0YXR1cyAlMDR4ICUwNHggJTA0eCAlMDR4XG4iLAogCQkJCSAgIGksIHlwLT50eF9zdGF0dXNbaV0udHhfY250LCB5cC0+dHhfc3RhdHVzW2ldLnR4X2VycnMsCiAJCQkJICAgeXAtPnR4X3N0YXR1c1tpXS50b3RhbF90eF9jbnQsIHlwLT50eF9zdGF0dXNbaV0ucGF1c2VkKTsKIAotCQlwcmludGsoS0VSTl9ERUJVRyAiICBSeCByaW5nICU4LjhsbHg6XG4iLAorCQlwcmludGsoS0VSTl9ERUJVRyAiICBSeCByaW5nICUwOGxseDpcbiIsCiAJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl5cC0+cnhfcmluZ19kbWEpOwogCQlmb3IgKGkgPSAwOyBpIDwgUlhfUklOR19TSVpFOyBpKyspIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIgJWMgIyVkIGRlc2MuICU4Ljh4ICU4Ljh4ICU4Ljh4XG4iLAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIiAlYyAjJWQgZGVzYy4gJTA4eCAlMDh4ICUwOHhcbiIsCiAJCQkJICAgaW9yZWFkMzIoaW9hZGRyICsgUnhQdHIpID09IChsb25nKSZ5cC0+cnhfcmluZ1tpXSA/ICc+JyA6ICcgJywKIAkJCQkgICBpLCB5cC0+cnhfcmluZ1tpXS5kYmRtYV9jbWQsIHlwLT5yeF9yaW5nW2ldLmFkZHIsCiAJCQkJICAgeXAtPnJ4X3JpbmdbaV0ucmVzdWx0X3N0YXR1cyk7CiAJCQlpZiAoeWVsbG93ZmluX2RlYnVnID4gNikgewogCQkJCWlmIChnZXRfdW5hbGlnbmVkKCh1OCopeXAtPnJ4X3JpbmdbaV0uYWRkcikgIT0gMHg2OSkgewogCQkJCQlpbnQgajsKKworCQkJCQlwcmludGsoS0VSTl9ERUJVRyk7CiAJCQkJCWZvciAoaiA9IDA7IGogPCAweDUwOyBqKyspCi0JCQkJCQlwcmludGsoIiAlNC40eCIsCi0JCQkJCQkJICAgZ2V0X3VuYWxpZ25lZCgoKHUxNiopeXAtPnJ4X3JpbmdbaV0uYWRkcikgKyBqKSk7Ci0JCQkJCXByaW50aygiXG4iKTsKKwkJCQkJCXByX2NvbnQoIiAlMDR4IiwKKwkJCQkJCQlnZXRfdW5hbGlnbmVkKCgodTE2Kil5cC0+cnhfcmluZ1tpXS5hZGRyKSArIGopKTsKKwkJCQkJcHJfY29udCgiXG4iKTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTEyODEsOCArMTI3NSw4IEBACiAKICNpZmRlZiBZRl9QUk9UT1RZUEUJCQkvKiBTdXBwb3J0IGZvciBwcm90b3R5cGUgaGFyZHdhcmUgZXJyYXRhLiAqLwogCWlmICh5ZWxsb3dmaW5fZGVidWcgPiAwKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVjZWl2ZWQgJWQgZnJhbWVzIHRoYXQgd2Ugc2hvdWxkIG5vdCBoYXZlLlxuIiwKLQkJCSAgIGRldi0+bmFtZSwgYm9ndXNfcngpOworCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgIlJlY2VpdmVkICVkIGZyYW1lcyB0aGF0IHdlIHNob3VsZCBub3QgaGF2ZVxuIiwKKwkJCSAgICAgIGJvZ3VzX3J4KTsKIAl9CiAjZW5kaWYKIApAQCAtMTMwMSwxNiArMTI5NSwxNyBAQAogCWlvd3JpdGUxNihjZmdfdmFsdWUgJiB+MHgxMDAwLCBpb2FkZHIgKyBDbmZnKTsKIAlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CQkJLyogU2V0IHByb21pc2N1b3VzLiAqLwogCQlpb3dyaXRlMTYoMHgwMDBGLCBpb2FkZHIgKyBBZGRyTW9kZSk7Ci0JfSBlbHNlIGlmICgoZGV2LT5tY19jb3VudCA+IDY0KSAgfHwgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworCX0gZWxzZSBpZiAoKG5ldGRldl9tY19jb3VudChkZXYpID4gNjQpIHx8CisJCSAgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogCQkvKiBUb28gbWFueSB0byBmaWx0ZXIgd2VsbCwgb3IgYWNjZXB0IGFsbCBtdWx0aWNhc3RzLiAqLwogCQlpb3dyaXRlMTYoMHgwMDBCLCBpb2FkZHIgKyBBZGRyTW9kZSk7Ci0JfSBlbHNlIGlmIChkZXYtPm1jX2NvdW50ID4gMCkgeyAvKiBNdXN0IHVzZSB0aGUgbXVsdGljYXN0IGhhc2ggdGFibGUuICovCisJfSBlbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpIHsgLyogTXVzdCB1c2UgdGhlIG11bHRpY2FzdCBoYXNoIHRhYmxlLiAqLwogCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKIAkJdTE2IGhhc2hfdGFibGVbNF07CiAJCWludCBpOworCiAJCW1lbXNldChoYXNoX3RhYmxlLCAwLCBzaXplb2YoaGFzaF90YWJsZSkpOwotCQlmb3IgKGkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpIDwgZGV2LT5tY19jb3VudDsKLQkJCSBpKyssIG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkgeworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogCQkJdW5zaWduZWQgaW50IGJpdDsKIAogCQkJLyogRHVlIHRvIGEgYnVnIGluIHRoZSBlYXJseSBjaGlwIHZlcnNpb25zLCBtdWx0aXBsZSBmaWx0ZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3puZXQuYyBiL2RyaXZlcnMvbmV0L3puZXQuYwppbmRleCBiYzVhZTBmLi5kZWY0OWQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC96bmV0LmMKKysrIGIvZHJpdmVycy9uZXQvem5ldC5jCkBAIC0zMTMsNyArMzEzLDggQEAKIAkvKiBCeXRlIEQgKi8KIAljZmJsay0+ZHVtbXlfMSA9IDE7IAkvKiBzZXQgdG8gMSAqLwogCWNmYmxrLT50eF9pZnNfcmV0cmlnID0gMzsgLyogSG1tLi4uIERpc2FibGVkICovCi0JY2ZibGstPm1jX2FsbCA9IChkZXYtPm1jX2xpc3QgfHwgKGRldi0+ZmxhZ3MmSUZGX0FMTE1VTFRJKSk7LyogbXVsdGljYXN0IGFsbCBtb2RlICovCisJY2ZibGstPm1jX2FsbCA9ICghbmV0ZGV2X21jX2VtcHR5KGRldikgfHwKKwkJCShkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSk7IC8qIG11bHRpY2FzdCBhbGwgbW9kZSAqLwogCWNmYmxrLT5yY3ZfbW9uID0gMDsJLyogTW9uaXRvciBtb2RlIGRpc2FibGVkICovCiAJY2ZibGstPmZyYWdfYWNwdCA9IDA7CS8qIERvIG5vdCBhY2NlcHQgZnJhZ21lbnRzICovCiAJY2ZibGstPnRzdHJ0dHJzID0gMDsJLyogTm8gc3RhcnQgdHJhbnNtaXNzaW9uIHRocmVzaG9sZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvZWlzYV9lbnVtZXJhdG9yLmMgYi9kcml2ZXJzL3BhcmlzYy9laXNhX2VudW1lcmF0b3IuYwppbmRleCAwYmUxZDUwLi5jYWExNTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcmlzYy9laXNhX2VudW1lcmF0b3IuYworKysgYi9kcml2ZXJzL3BhcmlzYy9laXNhX2VudW1lcmF0b3IuYwpAQCAtNDYwLDcgKzQ2MCw3IEBACiAJCQkgICAgICAgc2xvdCwgaWRfc3RyaW5nKTsKIAkJCQogCQkJcHJpbnRfZWlzYV9pZChpZF9zdHJpbmcsIGVzLT5laXNhX3Nsb3RfaWQpOwotCQkJcHJpbnRrKCIgZXhwZWN0ZWQgJXMgXG4iLCBpZF9zdHJpbmcpOworCQkJcHJpbnRrKCIgZXhwZWN0ZWQgJXNcbiIsIGlkX3N0cmluZyk7CiAJCQogCQkJcmV0dXJuIC0xOwkKIAkJCQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJpc2MvcGRjX3N0YWJsZS5jIGIvZHJpdmVycy9wYXJpc2MvcGRjX3N0YWJsZS5jCmluZGV4IDBiYzVkNDcuLjEwNjJiOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFyaXNjL3BkY19zdGFibGUuYworKysgYi9kcml2ZXJzL3BhcmlzYy9wZGNfc3RhYmxlLmMKQEAgLTQ4MSw3ICs0ODEsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIHBkY3NwYXRoX2F0dHJfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgcGRjc3BhdGhfYXR0cl9vcHMgPSB7CiAJLnNob3cgPSBwZGNzcGF0aF9hdHRyX3Nob3csCiAJLnN0b3JlID0gcGRjc3BhdGhfYXR0cl9zdG9yZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMgYi9kcml2ZXJzL3BhcmlzYy9zdXBlcmlvLmMKaW5kZXggYTM1YzljNS4uZjc4MDZkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJpc2Mvc3VwZXJpby5jCisrKyBiL2RyaXZlcnMvcGFyaXNjL3N1cGVyaW8uYwpAQCAtMTY5LDcgKzE2OSw3IEBACiAJLyogLi4udGhlbiBwcm9wZXJseSBmaXh1cCB0aGUgVVNCIHRvIHBvaW50IGF0IHN1Y2t5aW8gUElDICovCiAJc2lvLT51c2JfcGRldi0+aXJxID0gc3VwZXJpb19maXh1cF9pcnEoc2lvLT51c2JfcGRldik7CiAKLQlwcmludGsoS0VSTl9JTkZPIFBGWCAiRm91bmQgTlM4NzU2MCBMZWdhY3kgSS9PIGRldmljZSBhdCAlcyAoSVJRICVpKSBcbiIsCisJcHJpbnRrKEtFUk5fSU5GTyBQRlggIkZvdW5kIE5TODc1NjAgTGVnYWN5IEkvTyBkZXZpY2UgYXQgJXMgKElSUSAlaSlcbiIsCiAJICAgICAgIHBjaV9uYW1lKHBkZXYpLCBwZGV2LT5pcnEpOwogCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkIChwZGV2LCBTSU9fU1AxQkFSLCAmc2lvLT5zcDFfYmFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvQ2hhbmdlTG9nIGIvZHJpdmVycy9wYXJwb3J0L0NoYW5nZUxvZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODU2NWJiYi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvQ2hhbmdlTG9nCisrKyAvZGV2L251bGwKQEAgLTEsNTgzICswLDAgQEAKLTIwMDEtMTAtMTEgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCSogcGFycG9ydF9wYy5jLCBwYXJwb3J0X3NlcmlhbC5jOiBTdXBwb3J0IGZvciBOZXRNb3MgY2FyZHMuCi0JKyBQYXRjaCBvcmlnaW5hbGx5IGZyb20gTWljaGFlbCBSZWluZWx0IDxyZWluZWx0QGV1bmV0LmF0Pi4KLQotMjAwMi0wNC0yNSAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIHBhcnBvcnRfc2VyaWFsLmMsIHBhcnBvcnRfcGMuYzogTW92ZSBzb21lIFNJSUcgY2FyZHMgYXJvdW5kLgotCVBhdGNoIGZyb20gQW5kcmV5IFBhbmluLgotCi0yMDAyLTAxLTIwICBUaW0gV2F1Z2ggIDx0d2F1Z2hAcmVkaGF0LmNvbT4KLQotCSogcGFycG9ydF9wYy5jIChwYXJwb3J0X3BjX2NvbXBhdF93cml0ZV9ibG9ja19waW8sCi0JcGFycG9ydF9wY19lY3Bfd3JpdGVfYmxvY2tfcGlvLCBwYXJwb3J0X3BjX2VjcF9yZWFkX2Jsb2NrX3Bpbyk6Ci0JVXNlIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyBpZiB0aGUgY2FsbGVyIHdhbnRzIHRvIHVzZQotCU9fTk9OQkxPQ0suCi0KLTIwMDItMDItMjUgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBwYXJwb3J0X3BjLmM6IE1ha2Ugc3VyZSB0aGF0IHByaXYtPmN0cl93cml0YWJsZSBpbmNsdWRlcyBJbnRFbgotCWV2ZW4gaWYgSVJRIGlzIGdpdmVuIGFzIGEgcGFyYW1ldGVyLgotCi0yMDAyLTAxLTIxICBUaW0gV2F1Z2ggIDx0d2F1Z2hAcmVkaGF0LmNvbT4KLQotCSogZGFpc3kuYzogQXBwbHkgcGF0Y2ggZnJvbSBNYXggVm9yb2JpZXYgdG8gbWFrZSBwYXJwb3J0X2RhaXN5X3NlbGVjdAotCXdvcmsgZm9yIEVDUC9FUFAgbW9kZXMuCi0KLTIwMDItMDEtMTMgIE5pZWxzIEtyaXN0aWFuIEJlY2ggSmVuc2VuICA8bmtiakBpbWFnZS5kaz4KLQotCSogcGFycG9ydF9wYy5jOiBDaGFuZ2Ugc29tZSBvY2N1cnJlbmNlcyBvZiBmcm9iX3NldF9tb2RlIHRvCi0JRUNSX1dSSVRFLiAgVGhpcyBmaXhlcyBQTElQLgotCi0yMDAyLTAxLTA0ICBUaW0gV2F1Z2ggIDx0d2F1Z2hAcmVkaGF0LmNvbT4KLQotCSogc2hhcmUuYyAocGFycG9ydF9jbGFpbV9vcl9ibG9jayk6IFNsZWVwIGludGVycnVwdGlibHkgdG8gcHJldmVudAotCWEgcG9zc2libGUgZGVhZGxvY2suCi0KLTIwMDEtMTItMDcgIERhbWlhbiBHcnVzemthICA8ZGFtaWFuLmdydXN6a2FAVmlzaW9uU3lzdGVtcy5kZT4KLQotCSogcGFycG9ydF9wYy5jIChFQ1JfV1JJVEUpOiBEZWZpbmUuICBJZiB0aGVyZSBhcmUgZm9yYmlkZGVuIGJpdHMKLQlpbiB0aGUgRUNSIHJlZ2lzdGVyIGZvciBzb21lIGNoaXBzLCB0aGlzIHdpbGwgYmUgYSB1c2VmdWwgcGxhY2UgdG8KLQlwdXQgdGhhdCBrbm93bGVkZ2UuCi0JKGNoYW5nZV9tb2RlKTogVXNlIEVDUl9XUklURS4KLQkocGFycG9ydF9wY19yZXN0b3JlX3N0YXRlKTogTGlrZXdpc2UuCi0JKHBhcnBvcnRfRUNQUFMyX3N1cHBvcnRlZCk6IExpa2V3aXNlLgotCShwYXJwb3J0X0VDUEVQUF9zdXBwb3J0ZWQpOiBMaWtld2lzZS4KLQkoaXJxX3Byb2JlX0VQUCk6IExpa2V3aXNlLgotCShwcm9ncmFtbWFibGVfaXJxX3N1cHBvcnQpOiBMaWtld2lzZS4KLQkocHJvZ3JhbW1hYmxlX2RtYV9zdXBwb3J0KTogTGlrZXdpc2UuCi0JKHBhcnBvcnRfcGNfcHJvYmVfcG9ydCk6IExpa2V3aXNlLgotCi0JKGZyb2Jfc2V0X21vZGUpOiBOZXcgZnVuY3Rpb24uICBTZXQgdGhlIG1vZGUgYml0cyBvZiB0aGUgRUNSLgotCShnZXRfZmlmb19yZXNpZHVlKTogVXNlIGZyb2Jfc2V0X21vZGUuCi0JKHBhcnBvcnRfcGNfZWNwZXBwX3JlYWRfZGF0YSk6IExpa2V3aXNlLgotCShwYXJwb3J0X3BjX2VjcGVwcF93cml0ZV9kYXRhKTogTGlrZXdpc2UuCi0JKHBhcnBvcnRfcGNfZWNwZXBwX3JlYWRfYWRkcik6IExpa2V3aXNlLgotCShwYXJwb3J0X3BjX2VjcGVwcF93cml0ZV9hZGRyKTogTGlrZXdpc2UuCi0JKHBhcnBvcnRfcGNfY29tcGF0X3dyaXRlX2Jsb2NrX3Bpbyk6IExpa2V3aXNlLgotCShwYXJwb3J0X3BjX2VjcF93cml0ZV9ibG9ja19waW8pOiBMaWtld2lzZS4KLQkocGFycG9ydF9FQ1JfcHJlc2VudCk6IExpa2V3aXNlLgotCShwYXJwb3J0X0VDUF9zdXBwb3J0ZWQpOiBMaWtld2lzZS4KLQkocGFycG9ydF9FUFBfc3VwcG9ydGVkKTogTGlrZXdpc2UuCi0JKHBhcnBvcnRfRUNQRVBQX3N1cHBvcnRlZCk6IExpa2V3aXNlLgotCShwcm9ncmFtbWFibGVfaXJxX3N1cHBvcnQpOiBMaWtld2lzZS4KLQkoaXJxX3Byb2JlX0VDUCk6IExpa2V3aXNlLgotCShwcm9ncmFtbWFibGVfZG1hX3N1cHBvcnQpOiBMaWtld2lzZS4KLQotCShwYXJwb3J0X3BjX2VuYWJsZV9pcnEpOiBPbmx5IGVuYWJsZSBpbnRlcnJ1cHRzIGlmIHdlIGtub3cgd2hpY2gKLQlJUlEgbGluZSB0aGV5IHdpbGwgY29tZSBmcm9tLgotCShwYXJwb3J0X3BjX2luaXRfc3RhdGUpOiBTZXQgbkVyckludHJFbiBhdCBpbml0aWFsaXNhdGlvbi4KLQkocGFycG9ydF9wY19yZXN0b3JlX3N0YXRlKTogT25seSB3cml0ZSB3cml0YWJsZSBiaXRzIG9mIENUUi4KLQkocGFycG9ydF9pcnFfcHJvYmUpOiBJZiBubyBJUlEgaXMgZm91bmQsIHRha2UgYWNrSW50RW4gb3V0IG9mIHRoZQotCXdyaXRhYmxlIGJpdCBzZXQuCi0KLTIwMDEtMTItMDcgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBwYXJwb3J0X3BjLmMgKHBhcnBvcnRfcGNfZmlmb193cml0ZV9ibG9ja19waW8pOiBDb3JyZWN0IHR5cG8uCi0JKHBhcnBvcnRfcGNfaW5pdF9zdGF0ZSk6IE9ubHkgc2V0IGFja0ludEVuIGlmIHdlIGtub3cgd2hpY2ggSVJRCi0JbGluZSB0aGUgaW50ZXJydXB0cyB3aWxsIGNvbWUgZnJvbS4KLQotMjAwMS0xMi0wNyAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIGllZWUxMjg0X29wcy5jIChwYXJwb3J0X2llZWUxMjg0X2VwcF93cml0ZV9hZGRyLAotCXBhcnBvcnRfaWVlZTEyODRfZXBwX3JlYWRfYWRkcik6IEFjdHVhbGx5IGRvIHNvbWV0aGluZyB1c2VmdWwuCi0KLTIwMDEtMTItMDcgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBwYXJwb3J0X3BjLmMgKGRtYXZhbCk6IERvbid0IHVzZSBETUEgYnkgZGVmYXVsdC4gIEl0IHNlZW1zIHRvIGJlCi0JdG9vIGJ1Z2d5IGF0IHRoZSBtb21lbnQuICBVc2UgJ2RtYT1hdXRvJyB0byByZXN0b3JlIHRoZSBwcmV2aW91cwotCWJlaGF2aW91ci4KLQotMjAwMS0xMi0wNyAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIGRhaXN5LmMgKERFQlVHKTogVW5kZWZpbmUuCi0KLTIwMDEtMTItMDYgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBpZWVlMTI4NF9vcHMuYyAocGFycG9ydF9pZWVlMTI4NF9lY3BfcmVhZF9kYXRhKTogTWFzayBvZmYKLQlQQVJQT1JUX0NPTlRST0xfQVVUT0ZEIGFzIHdlbGwuICBCdWcgc3BvdHRlZCBieSBKb2UKLQk8am9lamFAbWluZHNwcmluZy5jb20+LgotCi0yMDAxLTEyLTAzICBSaWNoIExpdSAgPFJpY2guTGl1QGl0ZS5jb20udHc+Ci0KLQkqIHBhcnBvcnRfcGMuYyAoc2lvX2l0ZV84ODcyX3Byb2JlKTogSVRFODg3MyBpcyBhIHNpbmdsZS1wb3J0Ci0Jc2VyaWFsIGJvYXJkLCBub3QgYSBzZXJpYWwrcGFyYWxsZWwuCi0KLTIwMDEtMTEtMzAgIE5pZWxzIEtyaXN0aWFuIEJlY2ggSmVuc2VuICA8bmtiakBpbWFnZS5kaz4KLQotCSogcGFycG9ydF9wYy5jOiBGaXggY29tcGlsZXIgd2FybmluZy4KLQotMjAwMS0xMS0xNCAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIHBhcnBvcnRfcGMuYyAocGFycG9ydF9wY19wY2lfcHJvYmUpOiBIb29rcyBmb3IgUENJIGNhcmRzIGJlZm9yZQotCWFuZCBhZnRlciBwcm9iaW5nIGZvciBwb3J0cy4KLQkqIHBhcnBvcnRfc2VyaWFsLmMgKHBhcnBvcnRfcmVnaXN0ZXIpOiBMaWtld2lzZS4KLQotMjAwMS0xMS0xMiAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIHBhcnBvcnRfcGMuYyAoaW5pdF9tb2R1bGUpOiBXYXJuIHdoZW4gcGFyYW1ldGVycyBhcmUgaWdub3JlZC4KLQotMjAwMS0xMS0wMSAgRGFtaWFuIEdydXN6a2EgIDxkYW1pYW4uZ3J1c3prYUBWaXNpb25TeXN0ZW1zLmRlPgotCi0JKiBwYXJwb3J0X3NlcmlhbC5jIChzZXJpYWxfcmVnaXN0ZXIpOiBTZXQgYmFzZV9iYXVkIGJlZm9yZQotCWNhbGxpbmcgcmVnaXN0ZXJfc2VyaWFsLgotCi0yMDAxLTEwLTI2ICBUaW0gV2F1Z2ggIDx0d2F1Z2hAcmVkaGF0LmNvbT4KLQotCSogcGFycG9ydF9wYy5jIChwYXJwb3J0X2lycV9wcm9iZSk6IFdoZW4gRUNSIHByb2dyYW1tYWJsZSBJUlEKLQlzdXBwb3J0IGZhaWxzLCBnZW5lcmF0ZSBpbnRlcnJ1cHRzIHVzaW5nIHRoZSBGSUZPIGV2ZW4gaWYgd2UgZG9uJ3QKLQl3YW50IHRvIHVzZSB0aGUgRklGTyBmb3IgcmVhbCBkYXRhIHRyYW5zZmVycy4KLQkocGFycG9ydF9wY19wcm9iZV9wb3J0KTogRGlzcGxheSB0aGUgRUNSIGFkZHJlc3MgaWYgd2UgaGF2ZSBhbgotCUVDUiwgbm90IGp1c3QgaWYgd2Ugd2lsbCB1c2UgdGhlIEZJRk8uCi0KLTIwMDEtMTAtMjQgIERhdmUgU3RyYXVzcyAgPEQuU3RyYXVzc0Btb3Rvcm9sYS5jb20+Ci0KLQkqIHBhcnBvcnRfcGMuYyAocGFycG9ydF9wY19jb21wYXRfd3JpdGVfYmxvY2tfcGlvLAotCXBhcnBvcnRfcGNfZWNwX3dyaXRlX2Jsb2NrX3Bpbyk6IEFsbG93IGEgZmV3IHNlY29uZHMgZm9yIGFuIEVDUAotCXRyYW5zZmVyIHRvIGZpbmlzaCB1cC4KLQotMjAwMS0xMC0xMSAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIHBhcnBvcnRfcGMgKHNpb19pdGVfODg3Ml9wcm9iZSk6IE5ldyBmdW5jdGlvbiwgc3VibWl0dGVkIGJ5IFJpY2gKLQlMaXUgZnJvbSBJVEUuICBDbGVhbmVkIHVwLCByZW1vdmVkIGJvZ3VzIHBoeXNfdG9fdmlydCBjYWxscy4KLQotMjAwMS0xMC0yNCAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIHBhcnBvcnRfcGMuYzogU3VwcG9ydCBmb3IgQUtTIEFsYWRkaW5DQVJELiAgUGF0Y2ggZnJvbQotCUFsYWRkaW4gS25vd2xlZGdlIFN5c3RlbXMgKENocmlzdGlhbiBHcm9lc3NsZXIpLgotCi0yMDAxLTEwLTI0ICBUaW0gV2F1Z2ggIDx0d2F1Z2hAcmVkaGF0LmNvbT4KLQkKLQkqIGllZWUxMjg0X29wcy5jIChwYXJwb3J0X2llZWUxMjg0X2VjcF9yZWFkX2RhdGEpOiBUcnkgdG8gbWluaW1pc2UKLQl0dXJuYXJvdW5kIHRpbWUuCi0KLQkqIGllZWUxMjg0LmMgKHBhcnBvcnRfcG9sbF9wZXJpcGhlcmFsKTogVHJ5IGEgY291cGxlIG9mIHRpbWVzCi0JZmlyc3Qgd2l0aG91dCBkZWxheWluZy4KLQotMjAwMS0xMC0xMCAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIHBhcnBvcnRfcGMuYzogU3VwcG9ydCBmb3IgT1gxNlBDSTk1NCBQQ0kgY2FyZC4KLQotMjAwMS0xMC0xMCAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIHBhcnBvcnRfcGMuYzogU3VwcG9ydCBmb3IgT1gxMlBDSTg0MCBQQ0kgY2FyZCAocmVwb3J0ZWQgYnkKLQlta0BkYXZlZy5jb20pLiAgTG9jay11cHMgZGlhZ25vc2VkIGJ5IFJvbm5pZSBBcm9zYSAoYW5kIG5vdyB3ZQotCWp1c3QgZG9uJ3QgdHJ1c3QgaXRzIEVDUikuCi0KLTIwMDEtMTAtMTAgIEd1bnRoZXIgTWF5ZXIgIDxndW50aGVyLm1heWVyQGJyYXVuc2Nod2VpZy5va2Vyc3VyZi5kZT4KLQotCSogcGFycG9ydF9wYy5jOiBTdXBwb3J0IGZvciBBVkxBQiBjYXJkcy4KLQotMjAwMS0xMC0xMCAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIGllZWUxMjg0X29wcy5jIChlY3BfZm9yd2FyZF90b19yZXZlcnNlLCBlY3BfcmV2ZXJzZV90b19mb3J3YXJkKToKLQlSZW1lbWJlciB0byByZXRyeSBkaXJlY3Rpb24gc3dpdGNoIGlmIGl0IGZhaWxzLiAgUGF0Y2ggZnJvbSBEYXZpZAotCUxhbWJlcnQuCi0KLTIwMDEtMTAtMDggIERhdmlkIEMuIEhhbnNlbiAgPGhhdmVibHVlQHVzLmlibS5jb20+Ci0KLQkqIHNoYXJlLmM6IE1ha2UgZHJpdmVybGlzdF9sb2NrIGFuZCBwYXJwb3J0bGlzdF9sb2NrIHN0YXRpYy4KLQotMjAwMS0xMC0wOCAgUGhpbGlwIEJsdW5kZWxsICA8cGhpbGJAZ251Lm9yZz4KLQotCSogcGFycG9ydF9wYy5jOiBOZXcgbW9kdWxhciBwYXJhbWV0ZXIgdmVyYm9zZV9sb2dnaW5nLgotCU1ha2UgcG9ydC0+bW9kZXMgaW5kaWNhdGUgdGhlIG1vZGVzIHRoYXQgd2UgYXJlIHByZXBhcmVkIHRvIHVzZSwKLQlyYXRoZXIgdGhhbiB0aGUgbW9kZXMgdGhhdCBhcmUgYXZhaWxhYmxlLgotCi0yMDAxLTEwLTA3ICBUaW0gV2F1Z2ggIDx0d2F1Z2hAcmVkaGF0LmNvbT4KLQotCSogcGFycG9ydF9wYy5jIChwYXJwb3J0X3BjX3Byb2JlX3BvcnQpOiBGaXggbWVtb3J5IGxlYWsgc3BvdHRlZCBieQotCUtpcHAgQ2Fubm9uLgotCi0yMDAxLTEwLTA3ICBUaW0gV2F1Z2ggIDx0d2F1Z2hAcmVkaGF0LmNvbT4KLQotCSogcGFycG9ydF9zZXJpYWwuYzogUmVtb3ZlIE5ldE1vcyBzdXBwb3J0LCBzaW5jZSBpdCBjYXVzZXMgcHJvYmxlbXMKLQlmb3Igc29tZSBwZW9wbGUuCi0KLTIwMDEtMDgtMzAgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBwYXJwb3J0X3NlcmlhbC5jIChwYXJwb3J0X3NlcmlhbF9wY2lfcHJvYmUpOiBDbGVhbi11cCBvbiBwYXJ0aWFsCi0JcmVnaXN0cmF0aW9uIGZhaWx1cmUuCi0KLTIwMDEtMDgtMTQgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBwYXJwb3J0X3BjLmMgKHBhcnBvcnRfcGNfaW5pdF9zdXBlcmlvKTogQWxsb3cgZm9yIG1vcmUgdGhhbiBvbmUKLQlTdXBlcklPIGRldmljZS4gIFBhdGNoIGZyb20gUmljaCBMaW8gKElURSkuCi0KLTIwMDEtMDgtMTEgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBwYXJwb3J0X3BjLmM6IFN1cHBvcnQgZm9yIFRpdGFuIEVsZWN0cm9uaWNzIGNhcmRzLgotCi0yMDAxLTA4LTA4ICBUaW0gV2F1Z2ggIDx0d2F1Z2hAcmVkaGF0LmNvbT4KLQotCSogc2hhcmUuYyAocGFycG9ydF91bnJlZ2lzdGVyX2RldmljZSk6IFJlbW92ZSBkZXZpY2UgZnJvbSB3YWl0IGxpc3QKLQl0b28uCi0KLTIwMDEtMDYtMjAgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBwYXJwb3J0X3BjLmM6IE1ha2UgJ2lvX2hpPTAnIHdvcmsuCi0KLTIwMDEtMDUtMzEgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBwYXJwb3J0X3NlcmlhbC5jOiBOZXcgZmlsZS4KLQotMjAwMS0wNi0wNSAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIHBhcnBvcnRfcGMuYyAocGFycG9ydF9wY191bnJlZ2lzdGVyX3BvcnQpOiBOZXcgZXhwb3J0ZWQgZnVuY3Rpb24uCi0JRG8gdGhlIG9wcG9zaXRlIG9mIHBhcnBvcnRfcGNfcHJvYmVfcG9ydC4KLQkoY2xlYW51cF9tb2R1bGUpOiBVc2UgaXQuCi0KLTIwMDEtMDUtMjIgIEp1YW4gUXVpbnRlbGEgIDxxdWludGVsYUBtYW5kcmFrZXNvZnQuY29tPgotCi0JKiBwYXJwb3J0X2FtaWdhLmM6IFNldCBwcmludGsgbGV2ZWxzLgotCSogcGFycG9ydF9nc2MuYzogTGlrZXdpc2UuCi0JKiBwYXJwb3J0X21mYzMuYzogTGlrZXdpc2UuCi0JKiBwYXJwb3J0X3BjLmM6IExpa2V3aXNlLgotCSogcGFycG9ydF9zdW5icHAuYzogTGlrZXdpc2UuCi0JKiBwcm9iZS5jOiBMaWtld2lzZS4KLQkqIHNoYXJlLmM6IExpa2V3aXNlLgotCi0yMDAxLTA1LTEwICBGcmVkIEJhcm5lcyAgPGZybWIyQHVrYy5hYy51az4KLQotICAgICAgICogcGFycG9ydF9wYy5jIChwYXJwb3J0X3BjX2VwcF9yZWFkX2RhdGEpOiBhZGRlZCBzdXBwb3J0IGZvcgotICAgICAgIHJlYWRpbmcgZnJvbSBhIHc5MTI4NHBpYyBwZXJpcGhlcmFsLCBmbGFnIGlzIFBBUlBPUlRfVzkxMjg0UElDLgotCi0yMDAxLTA1LTA3ICBGcmVkIEJhcm5lcyAgPGZybWIyQHVrYy5hYy51az4KLSAKLSAJKiBwYXJwb3J0X3BjLmMgKHBhcnBvcnRfcGNfZXBwX3JlYWRfZGF0YSwKLQlwYXJwb3J0X3BjX2VwcF93cml0ZV9kYXRhLCBwYXJwb3J0X3BjX2VwcF9yZWFkX2FkZHIsCi0JcGFycG9ydF9wY19lcHBfd3JpdGVfYWRkcik6IHN1cHBvcnQgZm9yIGZhc3QgcmVhZHMvd3JpdGVzIHVzaW5nCi0JdGhlIFBBUlBPUlRfRVBQX0ZBU1QgZmxhZy4KLSAKLSAJKiBpZWVlMTI4NC5jIChwYXJwb3J0X3JlYWQsIHBhcnBvcnRfd3JpdGUpOiBhZGRlZCBjb2RlIHRvIGhhbmRsZQotCXNvZnR3YXJlIEVQUCBtb2RlIChJRUVFMTI4NF9NT0RFX0VQUFNXRSkuICBBZGRlZCBjb2RlIHRvIGFsbG93Ci0JQllURSBtb2RlIHJldmVyc2UgdHJhbnNmZXJzIChwcmV2aW91c2x5IGFsd2F5cyB3ZW50IGZvciBOSUJCTEUKLQltb2RlKS4KLSAKLSAJKiBpZWVlMTI4NF9vcHMuYyAocGFycG9ydF9pZWVlMTI4NF9lcHBfcmVhZF9kYXRhLAotCXBhcnBvcnRfaWVlZTEyODRfZXBwX3dyaXRlX2RhdGEpOiBmaXhlZCB2YXJpb3VzIHBvbGFyaXR5IHByb2JsZW1zLgotCUFsc28gKHRoZW9yZXRpY2FsbHkpIGZpeGVkIGFkZHJlc3MgdmVyc2lvbnMgKC4uX2FkZHIpLCBidXQgbm8KLQloYXJkd2FyZSB0byB0ZXN0IHRoaXMgb24uCi0gCi0gCSogcGFycG9ydF9wYy5oOiBhZGRlZCBwYXJwb3J0X2R1bXBfc3RhdGUoKSBmdW5jdGlvbiBmb3IgZGVidWdnaW5nLgotIAlOZWVkcyB0byBoYXZlIERFQlVHX1BBUlBPUlQgdG8gYmUgZGVmaW5lZCBmb3IgaXQgdG8gYmUgaW5jbHVkZWQuCi0gCi0yMDAxLTA1LTAzICBUaW0gV2F1Z2ggIDx0d2F1Z2hAcmVkaGF0LmNvbT4KLQotCSogcGFycG9ydF9wYy5jOiBGaXggdGhlIGNvbXBpbGUgcHJvYmxlbSBJIGludHJvZHVjZSBmcm9tIHRoZSBsYXN0Ci0JY2hhbmdlLgotCi0yMDAxLTA0LTIwICBQYXVsIEdvcnRtYWtlciAgPHBfZ29ydG1ha2VyQHlhaG9vLmNvbT4KLQotCSogcGFycG9ydF9wYy5jOiBDdXQgZG93biB0aGUgc2l6ZSBxdWl0ZSBhIGJpdCAobW9yZSB0aGFuIDRrIG9mZgotCXRoZSBvYmplY3QsIGFib3V0IDFrIG9mZiB0aGUgekltYWdlKSBmb3IgdGhlIG9sZGVyIG5vbi1QQ0kKLQltYWNoaW5lcyB3aGljaCBhcmUgdHlwaWNhbGx5IHJlc291cmNlIHN0YXJ2ZWQgYW55d2F5Li4uCi0KLTIwMDEtMDMtMjYgIFIgSG9ybiAgPHJqaEB3b3JsZC5zdGQuY29tPgotCi0JKiBwYXJwb3J0X3BjLmM6IFNvbWUgY29tbWVudGFyeSBjaGFuZ2VzLgotCi0yMDAxLTA0LTE5ICBUaW0gV2F1Z2ggIDx0d2F1Z2hAcmVkaGF0LmNvbT4KLQotCSogcGFycG9ydF9wYy5jIChwYXJwb3J0X3BjX3Byb2JlX3BvcnQpOiBSZW1vdmUgX19kZXZpbml0Ci0JYXR0cmlidXRlLiAgRXhwb3J0IHVuY29uZGl0aW9uYWxseS4KLQotMjAwMS0wNC0xNCAgSmVmZiBHYXJ6aWsgIDxqZ2FyemlrQHBvYm94LmNvbT4KLQotCU1lcmdlZDogIDIwMDEtMDMtMzAgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0gICAgICAgICogZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYzogTWFrZSBWaWEgU3VwZXJJTyBjaGlwc2V0cyBiZWhhdmUKLSAgICAgICAgbGlrZSBldmVyeXRoaW5nIGVsc2Ugd2l0aCByZXNwZWN0IHRvIGlycT0gYW5kIGRtYT0gcGFyYW1ldGVycy4KLQotMjAwMS0wNC0wOCAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLSAgICAgICogcGFycG9ydF9wYy5jIChwYXJwb3J0X3BjX3NhdmVfc3RhdGUpOiBSZWFkIGZyb20gdGhlIHNvZnQgY29weSBvZgotICAgICAgdGhlIGNvbnRyb2wgcG9ydC4KLSAgICAgIChwYXJwb3J0X3BjX3Jlc3RvcmVfc3RhdGUpOiBVcGRhdGUgdGhlIHNvZnQgY29weSBvZiB0aGUgY29udHJvbAotICAgICAgcG9ydC4KLQotMjAwMS0wMy0yNiAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIHNoYXJlLmMgKHBhcnBvcnRfZmluZF9udW1iZXIsIHBhcnBvcnRfZmluZF9iYXNlKTogVHJpZ2dlcgotCWEgbG93bGV2ZWwgZHJpdmVyIGxvYWQgaWYgdGhlcmUgYXJlIG5vIHBvcnRzIHlldC4KLQotMjAwMS0wMy0yNiAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIHBhcnBvcnRfcGMuYyAocGFycG9ydF9FQ1Bfc3VwcG9ydGVkKTogUmVtb3ZlIHRoZSBJUlEgY29uZmxpY3QKLQljaGVjayBzaW5jZSBpdCBzZWVtcyB0b3RhbGx5IHVucmVsaWFibGUuCi0KLTIwMDEtMDMtMDIgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBpZWVlMTI4NF9vcHMuYyAocGFycG9ydF9pZWVlMTI4NF9yZWFkX25pYmJsZSk6IFJlc2V0IG5BdXRvRmQKLQlvbiB0aW1lb3V0LiAgTWF0Y2hlcyAyLjIueCBiZWhhdmlvdXIuCi0KLTIwMDEtMDMtMDIgIEFuZHJldyBNb3J0b24KLQotCSogcGFycG9ydF9wYy5jIChyZWdpc3RlcmVkX3BhcnBvcnQpOiBOZXcgc3RhdGljIHZhcmlhYmxlLgotCShwYXJwb3J0X3BjX2ZpbmRfcG9ydHMpOiBTZXQgaXQgd2hlbiB3ZSByZWdpc3RlciBQQ0kgZHJpdmVyLgotCShpbml0X21vZHVsZSk6IFVucmVnaXN0ZXIgUENJIGRyaXZlciBpZiBuZWNlc3Nhcnkgd2hlbiB3ZQotCWZhaWwuCi0KLTIwMDEtMDMtMDIgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBpZWVlMTI4NF9vcHMuYyAocGFycG9ydF9pZWVlMTI4NF93cml0ZV9jb21wYXQpOiBEb24ndCB1c2UKLQlkb3duX3RyeWxvY2sgdG8gcmVzZXQgdGhlIElSUSBjb3VudC4gIERvbid0IGV2ZW4gdXNlIHNlbWFfaW5pdCwKLQliZWNhdXNlIGl0J3Mgbm90IGV2ZW4gbmVjZXNzYXJ5IHRvIHJlc2V0IHRoZSBjb3VudC4gIEkgY2FuJ3QKLQlyZW1lbWJlciB3aHkgd2UgZXZlciBkaWQuCi0KLTIwMDEtMDEtMDQgIFBldGVyIE9zdGVybHVuZCAgPHBldGVyLm9zdGVybHVuZEBtYWlsYm94LnN3aXBuZXQuc2U+Ci0KLQkqIGllZWUxMjg0LmMgKHBhcnBvcnRfbmVnb3RpYXRlKTogRml4IG1pc3NpbmcgcHJpbnRrIGFyZ3VtZW50LgotCi0yMDAxLTAxLTAzICBQYXVsIFNjaGxlZ2VyICA8UGF1bC5TY2hsZWdlckB0LW9ubGluZS5kZT4KLQotCSogcHJvYmUuYyAocGFyc2VfZGF0YSk6IEdldCByaWQgb2YgdHJhaWxpbmcgYmxhbmtzIGluIHZhbHVlcy4KLQlOZWVkZWQgZm9yIFhFUk9YIFhKOEMgcHJpbnRlci4KLQotMjAwMS0wMS0wMyAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIHBhcnBvcnRfcGMuYyAocGFycG9ydF9wY19wcm9iZV9wb3J0KTogU2F5IHNvbWV0aGluZyB3aGVuIHByb2JlcwotCWFyZSBvbWl0dGVkLgotCi0yMDAxLTAxLTAzICBUaW0gV2F1Z2ggIDx0d2F1Z2hAcmVkaGF0LmNvbT4KLQotCSogcGFycG9ydF9wYy5jIChzaW9fdmlhXzY4NmFfcHJvYmUpOiBDb3JyZWN0IGRtYT0yNTUgZml4LgotCi0yMDAwLTExLTIxICBUaW0gV2F1Z2ggIDx0d2F1Z2hAcmVkaGF0LmNvbT4KLQotCSogcGFycG9ydF9wYy5jIChwYXJwb3J0X3BjX2VjcF93cml0ZV9ibG9ja19waW8pOiBGaXgKLQlyZXZlcnNlLXRvLWZvcndhcmQgbG9naWMuICBTcG90dGVkIGJ5IFJvbGFuZCBLdWNrCi0JPHJjaUBjaXR5d2ViLmRlPi4KLQotMjAwMC0wOS0xNiAgQ2VzYXIgRWR1YXJkbyBCYXJyb3MgIDxjZXNhcmJAbml0bmV0LmNvbS5icj4KLQotCSogcGFycG9ydF9wYy5jIChzaW9fdmlhXzY4NmFfcHJvYmUpOiBIYW5kbGUgY2FzZQotCXdoZXJlIGhhcmR3YXJlIHJldHVybnMgMjU1IGZvciBJUlEgb3IgRE1BLgotCi0yMDAwLTA3LTIwICBFZGRpZSBDLiBEb3N0ICA8ZWNkQHNreW5ldC5iZT4KLQotCSogc2hhcmUuYyAoYXR0YWNoX2RyaXZlcl9jaGFpbik6IGF0dGFjaFtpXShwb3J0KSBuZWVkcyB0byBiZQotCXJlcGxhY2VkIGJ5IGF0dGFjaFtjb3VudF0ocG9ydCkuCi0KLTIwMDAtMDctMjAgIEVkZGllIEMuIERvc3QgIDxlY2RAc2t5bmV0LmJlPgotCi0JKiBkYWlzeS5jIChhZGRfZGV2KToga21hbGxvYyBhcmdzIGFyZSBpbiB3cm9uZyBvcmRlci4KLQotMjAwMC0wNy0xMiAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIHNoYXJlLmM6IERvY3VtZW50YXRpb24gZm9yIHBhcnBvcnRfe2dldCxwb3J0fV9wb3J0LAotCXBhcnBvcnRfZmluZF97bnVtYmVyLGJhc2V9LgotCi0yMDAwLTA3LTEyICBUaW0gV2F1Z2ggIDx0d2F1Z2hAcmVkaGF0LmNvbT4KLQotCSogc2hhcmUuYyAocGFycG9ydF91bnJlZ2lzdGVyX2RldmljZSk6IFJlbW92ZSB1bm5lZWRlZCBsb2NraW5nCi0JKHRlc3QgY2FkPT1kZXYpLgotCShwYXJwb3J0X2NsYWltKTogTGlrZXdpc2UuCi0JKHBhcnBvcnRfZmluZF9udW1iZXIpOiBOZXcgZnVuY3Rpb24uCi0KLTIwMDAtMDctMTIgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBzaGFyZS5jIChwYXJwb3J0X3JlZ2lzdGVyX3BvcnQpOiBIb2xkIHRoZSBwYXJwb3J0bGlzdF9sb2NrIHdoaWxlCi0JbG9va2luZyBmb3IgYSBmcmVlIHBhcnBvcnQgbnVtYmVyLgotCShwYXJwb3J0X3JlZ2lzdGVyX2RyaXZlcik6IE1ha2Ugc3VyZSB0aGF0IGF0dGFjaCBjYW4gYmxvY2suCi0JKGF0dGFjaF9kcml2ZXJfY2hhaW4pOiBMaWtld2lzZS4KLQotMjAwMC0wNy0xMiAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIHNoYXJlLmMgKGNhbGxfZHJpdmVyX2NoYWluKTogRG8gcmVmZXJlbmNlIGNvdW50aW5nIHRoaW5ncy4KLQkocGFycG9ydF9nZXRfcG9ydCk6IE5ldyBmdW5jdGlvbi4KLQkocGFycG9ydF9wdXRfcG9ydCk6IE5ldyBmdW5jdGlvbi4KLQkocGFycG9ydF9yZWdpc3Rlcl9wb3J0KTogSW5pdGlhbGlzZSByZWZlcmVuY2UgY291bnQgdG8gemVyby4KLQkocGFycG9ydF91bnJlZ2lzdGVyX3BvcnQpOiBDaGVjayByZWZlcmVuY2UgY291bnQgcmF0aGVyIHRoYW4KLQlkcml2ZXIgbGlzdCB0byBzZWUgaWYgd2UgY2FuIGZyZWUgdGhlIHBvcnQuCi0KLTIwMDAtMDctMTIgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBzaGFyZS5jOiBDbGFyaWZpY2F0aW9ucyBpbiBkb2MgY29tbWVudHMuCi0KLTIwMDAtMDctMTIgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBzaGFyZS5jIChwYXJwb3J0X3VucmVnaXN0ZXJfcG9ydCk6IEZpeCB0eXBvIGluIGNvbW1lbnQuCi0KLTIwMDAtMDctMTEgIEd1bnRoZXIgTWF5ZXIgIDxndW50aGVyLm1heWVyQGJyYXVuc2Nod2VpZy5va2Vyc3VyZi5kZT4KLQotCSogcGFycG9ydF9wYy5jOiBTdXBwb3J0IGZvciB0aGUgZnVsbCByYW5nZSBvZiBUaW1lZGlhIGNhcmRzLgotCi0yMDAwLTA3LTA4ICBUaW0gV2F1Z2ggIDx0d2F1Z2hAcmVkaGF0LmNvbT4KLQotCSogZGFpc3kuYzogTGljZW5zZSBibG9jayBjb21tZW50cyBhcyBwYXJ0IG9mIHBhcnBvcnRib29rLgotCSogaWVlZTEyODQuYzogTGlrZXdpc2UuCi0JKiBzaGFyZS5jOiBMaWtld2lzZS4KLQotMjAwMC0wNi0zMCAgUGV0ciBWYW5kcm92ZWMgIDx2YW5kcm92ZUB2Yy5jdnV0LmN6PgotCi0JKiBwcm9jZnMuYyAoZG9faGFyZHdhcmVfbW9kZXMpOiBHZW5lcmF0ZWQgc3RyaW5nIGNhbiBiZSB1cCB0byAzNAotCWNoYXJzIGxvbmcuCi0KLTIwMDAtMDYtMjAgIEd1bnRoZXIgTWF5ZXIgIDxndW50aGVyLm1heWVyQGJyYXVuc2Nod2VpZy5va2Vyc3VyZi5kZT4KLQotCSogcGFycG9ydF9wYy5jIChwYXJwb3J0X3BjX2NvbXBhdF93cml0ZV9ibG9ja19waW8pOiBXYXJuIGFib3V0Ci0JY2hhbmdlX21vZGUgZmFpbHVyZXMuCi0JKHBhcnBvcnRfcGNfZWNwX3dyaXRlX2Jsb2NrX3Bpbyk6IExpa2V3aXNlLgotCShwYXJwb3J0X3BjX2VjcF9yZWFkX2Jsb2NrX3Bpbyk6IExpa2V3aXNlLgotCi0yMDAwLTA2LTIwICBHdW50aGVyIE1heWVyICA8Z3VudGhlci5tYXllckBicmF1bnNjaHdlaWcub2tlcnN1cmYuZGU+Ci0KLQkqIHBhcnBvcnRfcGMuYyAocGFycG9ydF9TUFBfc3VwcG9ydGVkKTogV2FybiBtb3JlIGFib3V0IHBvc3NpYmx5Ci0JaW5jb3JyZWN0IHBhcmFtZXRlcnMuCi0KLTIwMDAtMDYtMTUgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBwYXJwb3J0X3BjLmMgKHBhcnBvcnRfRUNQX3N1cHBvcnRlZCk6IFNldCBQQVJQT1JUX01PREVfQ09NUEFUCi0JZm9yIEVDUCBwb3J0cywgc2luY2UgdGhleSBjYW4gYWxsIGRvIGhhcmR3YXJlIGFjY2VsZXJhdGVkCi0JY29tcGF0aWJpbGl0eSBtb2RlIChJIGFzc3VtZSkuCi0KLTIwMDAtMDYtMTMgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBwYXJwb3J0X3BjLmMgKGNsZWFudXBfbW9kdWxlKTogUmVtYXJrIGFib3V0IHBvc3NpYmxlIGJ1Z3MuCi0KLTIwMDAtMDYtMTMgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBwcm9jZnMuYzogQnJlYWsgJ2hhcmR3YXJlJyBvdXQgaW50byBzZXBhcmF0ZSBmaWxlcy4KLQotMjAwMC0wNS0yOCAgR3VudGhlciBNYXllciAgPGd1bnRoZXIubWF5ZXJAYnJhdW5zY2h3ZWlnLm9rZXJzdXJmLmRlPgotCi0JKiBGaXggUENJIElEIHByaW50ayBmb3Igbm9uLXN1cGVyaW8gUENJIGNhcmRzLgotCi0yMDAwLTA1LTI4ICBUaW0gV2F1Z2ggIDx0d2F1Z2hAcmVkaGF0LmNvbT4KLQotCSogc2hhcmUuYyAoY2FsbF9kcml2ZXJfY2hhaW4pOiBHZXQgdGhlIGRyaXZlcmxpc3RfbG9jay4KLQkocGFycG9ydF9yZWdpc3Rlcl9kZXZpY2UpOiBNYWtlIHN1cmUgdGhhdCBwb3J0LT5kZXZpY2VzIGFsd2F5cwotCWxvb2tzIGNvbnNpc3RlbnQuCi0JKHBhcnBvcnRfcmVnaXN0ZXJfZHJpdmVyKTogRW5zdXJlIHRoYXQgcGFycG9ydCBkcml2ZXJzIGFyZSBnaXZlbgotCXBhcmFtZXRlcnMgdGhhdCBhcmUgdmFsaWQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY2FsbGJhY2sgYnkKLQlsb2NraW5nIHRoZSBwb3J0bGlzdCBhZ2FpbnN0IGNoYW5nZXMuCi0JKHBhcnBvcnRfdW5yZWdpc3Rlcl9kcml2ZXIpOiBMaWtld2lzZS4KLQkocGFycG9ydF9jbGFpbSk6IERvbid0IG92ZXJ3cml0ZSBmbGFncy4KLQotMjAwMC0wNS0yOCAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIGRhaXN5LmMgKGFzc2lnbl9hZGRycyk6IEF2b2lkIGRvdWJsZS1wcm9iaW5nIGRhaXN5LWNoYWluIGRldmljZXMKLQlpZiB0aGUgZmlyc3QgcHJvYmUgc3VjY2VlZHMuCi0KLTIwMDAtMDUtMTYgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBzaGFyZS5jIChwYXJwb3J0X2NsYWltKTogRml4IFNNUCByYWNlLgotCi0yMDAwLTA1LTE1ICBHdW50aGVyIE1heWVyICA8Z3VudGhlci5tYXllckBicmF1bnNjaHdlaWcub2tlcnN1cmYuZGU+Ci0KLQkqIHBhcnBvcnRfcGMuYyAocGFycG9ydF9wY19jb21wYXRfd3JpdGVfYmxvY2tfcGlvKTogQ2hlY2sgZm9yCi0JdGltZW91dHMuCi0JKHBhcnBvcnRfcGNfZWNwX3dyaXRlX2Jsb2NrX3Bpbyk6IExpa2V3aXNlLgotCShwYXJwb3J0X3BjX2VjcF9yZWFkX2Jsb2NrX3Bpbyk6IExpa2V3aXNlLgotCi0yMDAwLTA1LTAyICBHdW50aGVyIE1heWVyICA8Z3VudGhlci5tYXllckBicmF1bnNjaHdlaWcub2tlcnN1cmYuZGU+Ci0KLQkqIHBhcnBvcnRfcGMuYzogUENJIFNZQkEgcGF0Y2ggYW5kIHZlcmJvc2UgUENJIGRldGVjdGlvbi4KLQotMjAwMC0wNS0wMiAgR3VudGhlciBNYXllciAgPGd1bnRoZXIubWF5ZXJAYnJhdW5zY2h3ZWlnLm9rZXJzdXJmLmRlPgotCi0JKiBwYXJwb3J0X3BjLmMgKGRlY29kZV9zbXNjKTogRml4IFNNU0MgNjY1LzY2NiBpZGVudGlmaWNhdGlvbi4KLQotMjAwMC0wNC0yOCAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIGllZWUxMjg0LmM6IFNob3J0IGZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBjYW4ndCBiZSBtdWx0aWxpbmUuCi0KLQkqIGRhaXN5LmM6IFNob3J0IGZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBjYW4ndCBiZSBtdWx0aWxpbmUuCi0KLTIwMDAtMDQtMTkgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBwYXJwb3J0X3BjLmMgKHBhcnBvcnRfcGNfZmlmb193cml0ZV9ibG9ja19kbWEpOiBNYWtlIG1heGxlbgotCWNhbGN1bGF0aW9uIGEgYml0IGNsZWFyZXIuCi0KLQkqIGllZWUxMjg0LmMgKHBhcnBvcnRfbmVnb3RpYXRlKTogVHVybiBvbiBkYXRhIGxpbmUgZHJpdmVycy4KLQotCSogaWVlZTEyODRfb3BzLmMgKHBhcnBvcnRfaWVlZTEyODRfcmVhZF9ieXRlKTogVHVybiBvZmYgZGF0YSBsaW5lCi0JZHJpdmVycy4KLQkocGFycG9ydF9pZWVlMTI4NF93cml0ZV9jb21wYXQpOiBUdXJuIG9uIGRhdGEgbGluZSBkcml2ZXJzLgotCi0JKiBkYWlzeS5jIChhc3NpZ25fYWRkcnMpOiBUdXJuIG9uIGRhdGEgbGluZSBkcml2ZXJzLgotCShjcHBfbXV4KTogTGlrZXdpc2UuCi0JKGNwcF9kYWlzeSk6IExpa2V3aXNlLgotCi0yMDAwLTA0LTA0ICBUaW0gV2F1Z2ggIDx0d2F1Z2hAcmVkaGF0LmNvbT4KLQotCSogcGFycG9ydF9wYy5jOiBBZGQgc3VwcG9ydCBmb3IgYW5vdGhlciBQQ0kgY2FyZC4KLQotMjAwMC0wNC0wNCAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIGRhaXN5LmM6IERvY3VtZW50YXRpb24gaW4ga2VybmVsLWRvYyBmb3JtYXQuCi0KLQkqIGllZWUxMjg0LmM6IExpa2V3aXNlLgotCi0JKiBzaGFyZS5jOiBMaWtld2lzZS4KLQotMjAwMC0wNC0wMSAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIHNoYXJlLmMgKHBhcnBvcnRfcmVnaXN0ZXJfZGV2aWNlKTogTmVlZCB0byBob2xkIHRoZSBtb2R1bGUKLQlyZWZlcmVuY2UgY291bnRzIGJlZm9yZSBzbGVlcGluZy4KLQotMjAwMC0wMy0yNyAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIHBhcnBvcnRfcGMuYyAocGFycG9ydF9wY19lY3BfcmVhZF9ibG9ja19waW8pOiBDb3JyZWN0IG9wZXJhdGlvbgotCXdoZW4gcGVyaXBoZXJhbCBpcyB0cnlpbmcgdG8gc2VuZCBkYXRhIHdoZW4gd2Ugc3RvcCBsaXN0ZW5pbmcuCi0KLTIwMDAtMDMtMjIgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBpbml0LmMgKHBhcnBvcnRfc2V0dXApOiBGaXggcmV0dXJuIHZhbHVlLgotCi0yMDAwLTAzLTIxICBUaW0gV2F1Z2ggIDx0d2F1Z2hAcmVkaGF0LmNvbT4KLQotCSogcGFycG9ydF9wYy5jIChwYXJwb3J0X3BjX3BjaV9wcm9iZSk6IEZpeCByZXR1cm4gdmFsdWU7IGNhbGwKLQlwY2lfZW5hYmxlX2RldmljZS4KLQotMjAwMC0wMy0xNiAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIHBhcnBvcnRfcGMuYyAocGFycG9ydF9FQ1Bfc3VwcG9ydGVkKTogVGhpcyBzZWVtcyB0byB0cmlnZ2VyIG9uCi0JbWFjaGluZXMgdGhhdCBkb24ndCBoYXZlIGFuIElSUSBjb25mbGljdDsgdG9uZWQgZG93biB0aGUgd2FybmluZwotCW1lc3NhZ2UgYWNjb3JkaW5nbHkuCi0KLTIwMDAtMDMtMTYgIEd1bnRoZXIgTWF5ZXIgIDxndW50aGVyLm1heWVyQGJyYXVuc2Nod2VpZy5uZXRzdXJmLmRlPgotCi0JKiBwYXJwb3J0X3BjLmMgKHNob3dfcGFyY29uZmlnX3Ntc2MzN2M2NjkpOiBGaXggdHlwby4KLQkoZGVjb2RlX3dpbmJvbmQpOiBNb3JlIElEcy4KLQkod2luYm9uZF9jaGVjayk6IFByb3RlY3QgYWdhaW5zdCBmYWxzZSBwb3NpdGl2ZXMuCi0JKHdpbmJvbmRfY2hlY2syKTogTGlrZXdpc2UuCi0JKHNtc2NfY2hlY2spOiBMaWtld2lzZS4KLQotMjAwMC0wMy0xNSAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIHBhcnBvcnRfcGMuYyAoY2xlYW51cF9tb2R1bGUpOiBEb24ndCBjYWxsIHBjaV91bnJlZ2lzdGVyX2RyaXZlcgotCWlmIHdlIGRpZG4ndCBjYWxsIHBjaV9yZWdpc3Rlcl9kcml2ZXIgZmlyc3QuCi0KLTIwMDAtMDMtMTMgIFRpbSBXYXVnaCAgPHR3YXVnaEByZWRoYXQuY29tPgotCi0JKiBwYXJwb3J0X3BjLmMgKHBhcnBvcnRfcGNfaW5pdCk6IE1vdmVkIGZyb20gYXNtL3BhcnBvcnQuaC4KLQotCSogQ29uZmlnLmluOiBDT05GSUdfUEFSUE9SVF9QQ19TVVBFUklPOiBuZXcgb3B0aW9uLgotCi0JKiBwYXJwb3J0X3BjLmMgKHNob3dfcGFyY29uZmlnX3Ntc2MzN2M2NjkpOiBNYWtlIF9fZGV2aW5pdC4KLQkoc2hvd19wYXJjb25maWdfd2luYm9uZCk6IExpa2V3aXNlLgotCShkZWNvZGVfd2luYm9uZCk6IExpa2V3aXNlLgotCShkZWNvZGVfc21zYyk6IExpa2V3aXNlLgotCSh3aW5ib25kX2NoZWNrKTogTGlrZXdpc2UuCi0JKHdpbmJvbmRfY2hlY2syKTogTGlrZXdpc2UuCi0JKHNtc2NfY2hlY2spOiBMaWtld2lzZS4KLQkoZGV0ZWN0X2FuZF9yZXBvcnRfd2luYm9uZCk6IExpa2V3aXNlLgotCShkZXRlY3RfYW5kX3JlcG9ydF9zbXNjKTogTGlrZXdpc2UuCi0JKGdldF9zdXBlcmlvX2RtYSk6IExpa2V3aXNlLgotCShnZXRfc3VwZXJpb19pcnEpOiBMaWtld2lzZS4KLQkocGFycG9ydF9wY19maW5kX2lzYV9wb3J0cyk6IE5ldyBmdW5jdGlvbi4KLQkocGFycG9ydF9wY19maW5kX3BvcnRzKTogTmV3IGZ1bmN0aW9uLgotCShpbml0X21vZHVsZSk6IE1ha2Ugc3VwZXJpbyBhIGNvbmZpZyBvcHRpb24sIG5vdCBhIHBhcmFtZXRlci4KLQotMjAwMC0wMy0xMCAgVGltIFdhdWdoICA8dHdhdWdoQHJlZGhhdC5jb20+Ci0KLQkqIHBhcnBvcnRfcGMuYyAoZGVjb2RlX3dpbmJvbmQpOiBVc2UgY29ycmVjdCA4Mzg3N0FURiBjaGlwIElELgotCShkZWNvZGVfd2luYm9uZCk6IEZpeCB0eXBvLgotCi0yMDAwLTAzLTA5ICBUaW0gV2F1Z2ggIDx0d2F1Z2hAcmVkaGF0LmNvbT4KLQotCSogcGFycG9ydF9wYy5jOiBJbnRlZ3JhdGUgU3VwZXJJTyBQQ0kgcHJvYmUgd2l0aCBub3JtYWwgUENJIGNhcmQKLQlwcm9iZSwgc28gdGhhdCB0aGUgTU9EVUxFX0RFVklDRV9UQUJMRSBpcyBjb21wbGV0ZS4KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMKaW5kZXggYWQxMTNiMC4uMDk1MGZhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wYXJwb3J0L3BhcnBvcnRfcGMuYworKysgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jCkBAIC0yOTA4LDYgKzI5MDgsNyBAQAogCW5ldG1vc185ODA1LAogCW5ldG1vc185ODE1LAogCW5ldG1vc185OTAxLAorCW5ldG1vc185ODY1LAogCXF1YXRlY2hfc3BweHAxMDAsCiB9OwogCkBAIC0yOTg5LDYgKzI5OTAsNyBAQAogCS8qIG5ldG1vc185ODA1ICovICAgICAgICAgICAgICAgeyAxLCB7IHsgMCwgLTEgfSwgfSB9LAogCS8qIG5ldG1vc185ODE1ICovICAgICAgICAgICAgICAgeyAyLCB7IHsgMCwgLTEgfSwgeyAyLCAtMSB9LCB9IH0sCiAJLyogbmV0bW9zXzk5MDEgKi8gICAgICAgICAgICAgICB7IDEsIHsgeyAwLCAtMSB9LCB9IH0sCisJLyogbmV0bW9zXzk4NjUgKi8gICAgICAgICAgICAgICB7IDEsIHsgeyAwLCAtMSB9LCB9IH0sCiAJLyogcXVhdGVjaF9zcHB4cDEwMCAqLwkJeyAxLCB7IHsgMCwgMSB9LCB9IH0sCiB9OwogCkBAIC0zMDkyLDYgKzMwOTQsMTAgQEAKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIG5ldG1vc185ODE1IH0sCiAJeyBQQ0lfVkVORE9SX0lEX05FVE1PUywgUENJX0RFVklDRV9JRF9ORVRNT1NfOTkwMSwKIAkgIDB4QTAwMCwgMHgyMDAwLCAwLCAwLCBuZXRtb3NfOTkwMSB9LAorCXsgUENJX1ZFTkRPUl9JRF9ORVRNT1MsIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4NjUsCisJICAweEEwMDAsIDB4MTAwMCwgMCwgMCwgbmV0bW9zXzk4NjUgfSwKKwl7IFBDSV9WRU5ET1JfSURfTkVUTU9TLCBQQ0lfREVWSUNFX0lEX05FVE1PU185ODY1LAorCSAgMHhBMDAwLCAweDIwMDAsIDAsIDAsIG5ldG1vc185ODY1IH0sCiAJLyogUXVhdGVjaCBTUFBYUC0xMDAgUGFyYWxsZWwgcG9ydCBQQ0kgRXhwcmVzc0NhcmQgKi8KIAl7IFBDSV9WRU5ET1JfSURfUVVBVEVDSCwgUENJX0RFVklDRV9JRF9RVUFURUNIX1NQUFhQXzEwMCwKIAkgIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIHF1YXRlY2hfc3BweHAxMDAgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvTWFrZWZpbGUKaW5kZXggODY3NGMxZS4uM2QxMDJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9wY2kvTWFrZWZpbGUKQEAgLTQsNyArNCw3IEBACiAKIG9iai15CQkrPSBhY2Nlc3MubyBidXMubyBwcm9iZS5vIHJlbW92ZS5vIHBjaS5vIFwKIAkJCXBjaS1kcml2ZXIubyBzZWFyY2gubyBwY2ktc3lzZnMubyByb20ubyBzZXR1cC1yZXMubyBcCi0JCQlpcnEubworCQkJaXJxLm8gdnBkLm8KIG9iai0kKENPTkZJR19QUk9DX0ZTKSArPSBwcm9jLm8KIG9iai0kKENPTkZJR19TWVNGUykgKz0gc2xvdC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2J1cy5jIGIvZHJpdmVycy9wY2kvYnVzLmMKaW5kZXggNzEyMjUwZi4uMjYzMDFjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvYnVzLmMKKysrIGIvZHJpdmVycy9wY2kvYnVzLmMKQEAgLTI4OCw5ICsyODgsOSBAQAogCQkJbmV4dCA9IGRldi0+YnVzX2xpc3QubmV4dDsKIAogCQkvKiBSdW4gZGV2aWNlIHJvdXRpbmVzIHdpdGggdGhlIGRldmljZSBsb2NrZWQgKi8KLQkJZG93bigmZGV2LT5kZXYuc2VtKTsKKwkJZGV2aWNlX2xvY2soJmRldi0+ZGV2KTsKIAkJcmV0dmFsID0gY2IoZGV2LCB1c2VyZGF0YSk7Ci0JCXVwKCZkZXYtPmRldi5zZW0pOworCQlkZXZpY2VfdW5sb2NrKCZkZXYtPmRldik7CiAJCWlmIChyZXR2YWwpCiAJCQlicmVhazsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL2Zha2VwaHAuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvZmFrZXBocC5jCmluZGV4IDYxNTEzODkuLjBhODk0ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvZmFrZXBocC5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvZmFrZXBocC5jCkBAIC03Myw3ICs3Myw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGxlZ2FjeV9rdHlwZSA9IHsKLQkuc3lzZnNfb3BzID0gJihzdHJ1Y3Qgc3lzZnNfb3BzKXsKKwkuc3lzZnNfb3BzID0gJihjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzKXsKIAkJLnN0b3JlID0gbGVnYWN5X3N0b3JlLCAuc2hvdyA9IGxlZ2FjeV9zaG93CiAJfSwKIAkucmVsZWFzZSA9ICZsZWdhY3lfcmVsZWFzZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvaWJtcGhwX3Jlcy5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfcmVzLmMKaW5kZXggZWM3MzI5NC4uZTJkYzI4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfcmVzLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9pYm1waHBfcmVzLmMKQEAgLTQwLDcgKzQwLDcgQEAKIHN0YXRpYyBpbnQgb25jZV9vdmVyICh2b2lkKTsKIHN0YXRpYyBpbnQgcmVtb3ZlX3JhbmdlcyAoc3RydWN0IGJ1c19ub2RlICosIHN0cnVjdCBidXNfbm9kZSAqKTsKIHN0YXRpYyBpbnQgdXBkYXRlX2JyaWRnZV9yYW5nZXMgKHN0cnVjdCBidXNfbm9kZSAqKik7Ci1zdGF0aWMgaW50IGFkZF9yYW5nZSAoaW50IHR5cGUsIHN0cnVjdCByYW5nZV9ub2RlICosIHN0cnVjdCBidXNfbm9kZSAqKTsKK3N0YXRpYyBpbnQgYWRkX2J1c19yYW5nZSAoaW50IHR5cGUsIHN0cnVjdCByYW5nZV9ub2RlICosIHN0cnVjdCBidXNfbm9kZSAqKTsKIHN0YXRpYyB2b2lkIGZpeF9yZXNvdXJjZXMgKHN0cnVjdCBidXNfbm9kZSAqKTsKIHN0YXRpYyBzdHJ1Y3QgYnVzX25vZGUgKmZpbmRfYnVzX3dwcmV2ICh1OCwgc3RydWN0IGJ1c19ub2RlICoqLCB1OCk7CiAKQEAgLTEzMyw3ICsxMzMsNyBAQAogCQluZXdyYW5nZS0+cmFuZ2VubyA9IDE7CiAJZWxzZSB7CiAJCS8qIG5lZWQgdG8gaW5zZXJ0IG91ciByYW5nZSAqLwotCQlhZGRfcmFuZ2UgKGZsYWcsIG5ld3JhbmdlLCBuZXdidXMpOworCQlhZGRfYnVzX3JhbmdlIChmbGFnLCBuZXdyYW5nZSwgbmV3YnVzKTsKIAkJZGVidWcgKCIlZCByZXNvdXJjZSBQcmltYXJ5IEJ1cyBpbnNlcnRlZCBvbiBidXMgJXggWyV4IC0gJXhdXG4iLCBmbGFnLCBuZXdidXMtPmJ1c25vLCBuZXdyYW5nZS0+c3RhcnQsIG5ld3JhbmdlLT5lbmQpOwogCX0KIApAQCAtMzg0LDcgKzM4NCw3IEBACiAgKiBJbnB1dDogdHlwZSBvZiB0aGUgcmVzb3VyY2UsIHJhbmdlIHRvIGFkZCwgY3VycmVudCBidXMKICAqIE91dHB1dDogMCBvciAtMSwgYnVzIGFuZCByYW5nZSBwdHJzIAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIGludCBhZGRfcmFuZ2UgKGludCB0eXBlLCBzdHJ1Y3QgcmFuZ2Vfbm9kZSAqcmFuZ2UsIHN0cnVjdCBidXNfbm9kZSAqYnVzX2N1cikKK3N0YXRpYyBpbnQgYWRkX2J1c19yYW5nZSAoaW50IHR5cGUsIHN0cnVjdCByYW5nZV9ub2RlICpyYW5nZSwgc3RydWN0IGJ1c19ub2RlICpidXNfY3VyKQogewogCXN0cnVjdCByYW5nZV9ub2RlICpyYW5nZV9jdXIgPSBOVUxMOwogCXN0cnVjdCByYW5nZV9ub2RlICpyYW5nZV9wcmV2OwpAQCAtNDU1LDcgKzQ1NSw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBUaGlzIHJvdXRpbmUgZ29lcyB0aHJvdWdoIHRoZSBsaXN0IG9mIHJlc291cmNlcyBvZiB0eXBlICd0eXBlJyBhbmQgdXBkYXRlcwotICogdGhlIHJhbmdlIG51bWJlcnMgdGhhdCB0aGV5IGNvcnJlc3BvbmQgdG8uICBJdCB3YXMgY2FsbGVkIGZyb20gYWRkX3JhbmdlIGZuYworICogdGhlIHJhbmdlIG51bWJlcnMgdGhhdCB0aGV5IGNvcnJlc3BvbmQgdG8uICBJdCB3YXMgY2FsbGVkIGZyb20gYWRkX2J1c19yYW5nZSBmbmMKICAqCiAgKiBJbnB1dDogYnVzLCB0eXBlIG9mIHRoZSByZXNvdXJjZSwgdGhlIHJhbmdlbm8gc3RhcnRpbmcgZnJvbSB3aGljaCB0byB1cGRhdGUKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCkBAIC0xOTk5LDcgKzE5OTksNyBAQAogCiAJCQkJCQkJaWYgKGJ1c19zZWMtPm5vSU9SYW5nZXMgPiAwKSB7CiAJCQkJCQkJCWlmICghcmFuZ2VfZXhpc3RzX2FscmVhZHkgKHJhbmdlLCBidXNfc2VjLCBJTykpIHsKLQkJCQkJCQkJCWFkZF9yYW5nZSAoSU8sIHJhbmdlLCBidXNfc2VjKTsKKwkJCQkJCQkJCWFkZF9idXNfcmFuZ2UgKElPLCByYW5nZSwgYnVzX3NlYyk7CiAJCQkJCQkJCQkrK2J1c19zZWMtPm5vSU9SYW5nZXM7CiAJCQkJCQkJCX0gZWxzZSB7CiAJCQkJCQkJCQlrZnJlZSAocmFuZ2UpOwpAQCAtMjA0OCw3ICsyMDQ4LDcgQEAKIAogCQkJCQkJCWlmIChidXNfc2VjLT5ub01lbVJhbmdlcyA+IDApIHsKIAkJCQkJCQkJaWYgKCFyYW5nZV9leGlzdHNfYWxyZWFkeSAocmFuZ2UsIGJ1c19zZWMsIE1FTSkpIHsKLQkJCQkJCQkJCWFkZF9yYW5nZSAoTUVNLCByYW5nZSwgYnVzX3NlYyk7CisJCQkJCQkJCQlhZGRfYnVzX3JhbmdlIChNRU0sIHJhbmdlLCBidXNfc2VjKTsKIAkJCQkJCQkJCSsrYnVzX3NlYy0+bm9NZW1SYW5nZXM7CiAJCQkJCQkJCX0gZWxzZSB7CiAJCQkJCQkJCQlrZnJlZSAocmFuZ2UpOwpAQCAtMjEwMiw3ICsyMTAyLDcgQEAKIAogCQkJCQkJCWlmIChidXNfc2VjLT5ub1BGTWVtUmFuZ2VzID4gMCkgewogCQkJCQkJCQlpZiAoIXJhbmdlX2V4aXN0c19hbHJlYWR5IChyYW5nZSwgYnVzX3NlYywgUEZNRU0pKSB7Ci0JCQkJCQkJCQlhZGRfcmFuZ2UgKFBGTUVNLCByYW5nZSwgYnVzX3NlYyk7CisJCQkJCQkJCQlhZGRfYnVzX3JhbmdlIChQRk1FTSwgcmFuZ2UsIGJ1c19zZWMpOwogCQkJCQkJCQkJKytidXNfc2VjLT5ub1BGTWVtUmFuZ2VzOwogCQkJCQkJCQl9IGVsc2UgewogCQkJCQkJCQkJa2ZyZWUgKHJhbmdlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2lvdi5jIGIvZHJpdmVycy9wY2kvaW92LmMKaW5kZXggYjJhNDQ4ZS4uM2U1YWIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW92LmMKKysrIGIvZHJpdmVycy9wY2kvaW92LmMKQEAgLTcwNiw2ICs3MDYsMjEgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBjaV9zcmlvdl9taWdyYXRpb24pOwogCisvKioKKyAqIHBjaV9udW1fdmYgLSByZXR1cm4gbnVtYmVyIG9mIFZGcyBhc3NvY2lhdGVkIHdpdGggYSBQRiBkZXZpY2VfcmVsZWFzZV9kcml2ZXIKKyAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlCisgKgorICogUmV0dXJucyBudW1iZXIgb2YgVkZzLCBvciAwIGlmIFNSLUlPViBpcyBub3QgZW5hYmxlZC4KKyAqLworaW50IHBjaV9udW1fdmYoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpZiAoIWRldiB8fCAhZGV2LT5pc19waHlzZm4pCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIGRldi0+c3Jpb3YtPm5yX3ZpcnRmbjsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV9udW1fdmYpOworCiBzdGF0aWMgaW50IGF0c19hbGxvY19vbmUoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBzKQogewogCWludCBwb3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktc3lzZnMuYyBiL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jCmluZGV4IDgwNzIyNGUuLmRlMjk2NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jCkBAIC02NDIsNiArNjQyLDcgQEAKIAlpZiAoIWItPmxlZ2FjeV9pbykKIAkJZ290byBremFsbG9jX2VycjsKIAorCXN5c2ZzX2Jpbl9hdHRyX2luaXQoYi0+bGVnYWN5X2lvKTsKIAliLT5sZWdhY3lfaW8tPmF0dHIubmFtZSA9ICJsZWdhY3lfaW8iOwogCWItPmxlZ2FjeV9pby0+c2l6ZSA9IDB4ZmZmZjsKIAliLT5sZWdhY3lfaW8tPmF0dHIubW9kZSA9IFNfSVJVU1IgfCBTX0lXVVNSOwpAQCAtNjU0LDYgKzY1NSw3IEBACiAJCWdvdG8gbGVnYWN5X2lvX2VycjsKIAogCS8qIEFsbG9jYXRlZCBhYm92ZSBhZnRlciB0aGUgbGVnYWN5X2lvIHN0cnVjdCAqLworCXN5c2ZzX2Jpbl9hdHRyX2luaXQoYi0+bGVnYWN5X21lbSk7CiAJYi0+bGVnYWN5X21lbSA9IGItPmxlZ2FjeV9pbyArIDE7CiAJYi0+bGVnYWN5X21lbS0+YXR0ci5uYW1lID0gImxlZ2FjeV9tZW0iOwogCWItPmxlZ2FjeV9tZW0tPnNpemUgPSAxMDI0KjEwMjQ7CkBAIC04MDAsNiArODAyLDcgQEAKIAlpZiAocmVzX2F0dHIpIHsKIAkJY2hhciAqcmVzX2F0dHJfbmFtZSA9IChjaGFyICopKHJlc19hdHRyICsgMSk7CiAKKwkJc3lzZnNfYmluX2F0dHJfaW5pdChyZXNfYXR0cik7CiAJCWlmICh3cml0ZV9jb21iaW5lKSB7CiAJCQlwZGV2LT5yZXNfYXR0cl93Y1tudW1dID0gcmVzX2F0dHI7CiAJCQlzcHJpbnRmKHJlc19hdHRyX25hbWUsICJyZXNvdXJjZSVkX3djIiwgbnVtKTsKQEAgLTk3Miw2ICs5NzUsNyBAQAogCQlpZiAoIWF0dHIpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAorCQlzeXNmc19iaW5fYXR0cl9pbml0KGF0dHIpOwogCQlhdHRyLT5zaXplID0gZGV2LT52cGQtPmxlbjsKIAkJYXR0ci0+YXR0ci5uYW1lID0gInZwZCI7CiAJCWF0dHItPmF0dHIubW9kZSA9IFNfSVJVU1IgfCBTX0lXVVNSOwpAQCAtMTAzOCw2ICsxMDQyLDcgQEAKIAkJCXJldHZhbCA9IC1FTk9NRU07CiAJCQlnb3RvIGVycl9yZXNvdXJjZV9maWxlczsKIAkJfQorCQlzeXNmc19iaW5fYXR0cl9pbml0KGF0dHIpOwogCQlhdHRyLT5zaXplID0gcm9tX3NpemU7CiAJCWF0dHItPmF0dHIubmFtZSA9ICJyb20iOwogCQlhdHRyLT5hdHRyLm1vZGUgPSBTX0lSVVNSOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCA1YjU0OGFlLi5jYjFkZDVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtMzAzLDYgKzMwMyw0OSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkpOwogCisvKioKKyAqIHBjaV9idXNfZmluZF9leHRfY2FwYWJpbGl0eSAtIGZpbmQgYW4gZXh0ZW5kZWQgY2FwYWJpbGl0eQorICogQGJ1czogICB0aGUgUENJIGJ1cyB0byBxdWVyeQorICogQGRldmZuOiBQQ0kgZGV2aWNlIHRvIHF1ZXJ5CisgKiBAY2FwOiAgIGNhcGFiaWxpdHkgY29kZQorICoKKyAqIExpa2UgcGNpX2ZpbmRfZXh0X2NhcGFiaWxpdHkoKSBidXQgd29ya3MgZm9yIHBjaSBkZXZpY2VzIHRoYXQgZG8gbm90IGhhdmUgYQorICogcGNpX2RldiBzdHJ1Y3R1cmUgc2V0IHVwIHlldC4KKyAqCisgKiBSZXR1cm5zIHRoZSBhZGRyZXNzIG9mIHRoZSByZXF1ZXN0ZWQgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgd2l0aGluIHRoZQorICogZGV2aWNlJ3MgUENJIGNvbmZpZ3VyYXRpb24gc3BhY2Ugb3IgMCBpbiBjYXNlIHRoZSBkZXZpY2UgZG9lcyBub3QKKyAqIHN1cHBvcnQgaXQuCisgKi8KK2ludCBwY2lfYnVzX2ZpbmRfZXh0X2NhcGFiaWxpdHkoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJCWludCBjYXApCit7CisJdTMyIGhlYWRlcjsKKwlpbnQgdHRsOworCWludCBwb3MgPSBQQ0lfQ0ZHX1NQQUNFX1NJWkU7CisKKwkvKiBtaW5pbXVtIDggYnl0ZXMgcGVyIGNhcGFiaWxpdHkgKi8KKwl0dGwgPSAoUENJX0NGR19TUEFDRV9FWFBfU0laRSAtIFBDSV9DRkdfU1BBQ0VfU0laRSkgLyA4OworCisJaWYgKCFwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIHBvcywgJmhlYWRlcikpCisJCXJldHVybiAwOworCWlmIChoZWFkZXIgPT0gMHhmZmZmZmZmZiB8fCBoZWFkZXIgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAodHRsLS0gPiAwKSB7CisJCWlmIChQQ0lfRVhUX0NBUF9JRChoZWFkZXIpID09IGNhcCkKKwkJCXJldHVybiBwb3M7CisKKwkJcG9zID0gUENJX0VYVF9DQVBfTkVYVChoZWFkZXIpOworCQlpZiAocG9zIDwgUENJX0NGR19TUEFDRV9TSVpFKQorCQkJYnJlYWs7CisKKwkJaWYgKCFwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIHBvcywgJmhlYWRlcikpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX3BjaV9maW5kX25leHRfaHRfY2FwKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBwb3MsIGludCBodF9jYXApCiB7CiAJaW50IHJjLCB0dGwgPSBQQ0lfRklORF9DQVBfVFRMOwpAQCAtMTU0MCw4ICsxNTgzLDEwIEBACiAJaW50IHBtOwogCXUxNiBwbWM7CiAKKwlwbV9ydW50aW1lX2ZvcmJpZCgmZGV2LT5kZXYpOwogCWRldmljZV9lbmFibGVfYXN5bmNfc3VzcGVuZCgmZGV2LT5kZXYpOwogCWRldi0+d2FrZXVwX3ByZXBhcmVkID0gZmFsc2U7CisKIAlkZXYtPnBtX2NhcCA9IDA7CiAKIAkvKiBmaW5kIFBDSSBQTSBjYXBhYmlsaXR5IGluIGxpc3QgKi8KQEAgLTIyNTMsMzUgKzIyOTgsNiBAQAogCX0KIH0KIAotI2lmbmRlZiBIQVZFX0FSQ0hfUENJX1NFVF9ETUFfTUFTSwotLyoKLSAqIFRoZXNlIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGFyY2gtc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zCi0gKi8KLWludAotcGNpX3NldF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1NjQgbWFzaykKLXsKLQlpZiAoIXBjaV9kbWFfc3VwcG9ydGVkKGRldiwgbWFzaykpCi0JCXJldHVybiAtRUlPOwotCi0JZGV2LT5kbWFfbWFzayA9IG1hc2s7Ci0JZGV2X2RiZygmZGV2LT5kZXYsICJ1c2luZyAlZGJpdCBETUEgbWFza1xuIiwgZmxzNjQobWFzaykpOwotCi0JcmV0dXJuIDA7Ci19Ci0gICAgCi1pbnQKLXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1NjQgbWFzaykKLXsKLQlpZiAoIXBjaV9kbWFfc3VwcG9ydGVkKGRldiwgbWFzaykpCi0JCXJldHVybiAtRUlPOwotCi0JZGV2LT5kZXYuY29oZXJlbnRfZG1hX21hc2sgPSBtYXNrOwotCWRldl9kYmcoJmRldi0+ZGV2LCAidXNpbmcgJWRiaXQgY29uc2lzdGVudCBETUEgbWFza1xuIiwgZmxzNjQobWFzaykpOwotCi0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQogI2lmbmRlZiBIQVZFX0FSQ0hfUENJX1NFVF9ETUFfTUFYX1NFR01FTlRfU0laRQogaW50IHBjaV9zZXRfZG1hX21heF9zZWdfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKQEAgLTI0NDMsNyArMjQ1OSw3IEBACiAJaWYgKCFwcm9iZSkgewogCQlwY2lfYmxvY2tfdXNlcl9jZmdfYWNjZXNzKGRldik7CiAJCS8qIGJsb2NrIFBNIHN1c3BlbmQsIGRyaXZlciBwcm9iZSwgZXRjLiAqLwotCQlkb3duKCZkZXYtPmRldi5zZW0pOworCQlkZXZpY2VfbG9jaygmZGV2LT5kZXYpOwogCX0KIAogCXJjID0gcGNpX2Rldl9zcGVjaWZpY19yZXNldChkZXYsIHByb2JlKTsKQEAgLTI0NjUsNyArMjQ4MSw3IEBACiAJcmMgPSBwY2lfcGFyZW50X2J1c19yZXNldChkZXYsIHByb2JlKTsKIGRvbmU6CiAJaWYgKCFwcm9iZSkgewotCQl1cCgmZGV2LT5kZXYuc2VtKTsKKwkJZGV2aWNlX3VubG9jaygmZGV2LT5kZXYpOwogCQlwY2lfdW5ibG9ja191c2VyX2NmZ19hY2Nlc3MoZGV2KTsKIAl9CiAKQEAgLTMwMjMsOCArMzAzOSw2IEBACiBFWFBPUlRfU1lNQk9MKHBjaV90cnlfc2V0X213aSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9jbGVhcl9td2kpOwogRVhQT1JUX1NZTUJPTF9HUEwocGNpX2ludHgpOwotRVhQT1JUX1NZTUJPTChwY2lfc2V0X2RtYV9tYXNrKTsKLUVYUE9SVF9TWU1CT0wocGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKTsKIEVYUE9SVF9TWU1CT0wocGNpX2Fzc2lnbl9yZXNvdXJjZSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9maW5kX3BhcmVudF9yZXNvdXJjZSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9zZWxlY3RfYmFycyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IDc5MGViNjkuLjgxZDE5ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC0yNTI5LDkgKzI1MjksOTUgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDEwZTgsIHF1aXJrX2k4MjU3Nl9zcmlvdik7CiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgxNTBhLCBxdWlya19pODI1NzZfc3Jpb3YpOwogREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9WRU5ET1JfSURfSU5URUwsIDB4MTUwZCwgcXVpcmtfaTgyNTc2X3NyaW92KTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDE1MTgsIHF1aXJrX2k4MjU3Nl9zcmlvdik7CiAKICNlbmRpZgkvKiBDT05GSUdfUENJX0lPViAqLwogCisvKgorICogVGhpcyBpcyBhIHF1aXJrIGZvciB0aGUgUmljb2ggTU1DIGNvbnRyb2xsZXIgZm91bmQgYXMgYSBwYXJ0IG9mCisgKiBzb21lIG11bGlmdW5jdGlvbiBjaGlwcy4KKworICogVGhpcyBpcyB2ZXJ5IHNpbWlsaWFyIGFuZCBiYXNlZCBvbiB0aGUgcmljb2hfbW1jIGRyaXZlciB3cml0dGVuIGJ5CisgKiBQaGlsaXAgTGFuZ2RhbGUuIFRoYW5rIHlvdSBmb3IgdGhlc2UgbWFnaWMgc2VxdWVuY2VzLgorICoKKyAqIFRoZXNlIGNoaXBzIGltcGxlbWVudCB0aGUgZm91ciBtYWluIG1lbW9yeSBjYXJkIGNvbnRyb2xsZXJzIChTRCwgTU1DLCBNUywgeEQpCisgKiBhbmQgb25lIG9yIGJvdGggb2YgY2FyZGJ1cyBvciBmaXJld2lyZS4KKyAqCisgKiBJdCBoYXBwZW5zIHRoYXQgdGhleSBpbXBsZW1lbnQgU0QgYW5kIE1NQworICogc3VwcG9ydCBhcyBzZXBhcmF0ZSBjb250cm9sbGVycyAoYW5kIFBDSSBmdW5jdGlvbnMpLiBUaGUgbGludXggU0RIQ0kKKyAqIGRyaXZlciBzdXBwb3J0cyBNTUMgY2FyZHMgYnV0IHRoZSBjaGlwIGRldGVjdHMgTU1DIGNhcmRzIGluIGhhcmR3YXJlCisgKiBhbmQgZGlyZWN0cyB0aGVtIHRvIHRoZSBNTUMgY29udHJvbGxlciAtIHNvIHRoZSBTREhDSSBkcml2ZXIgbmV2ZXIgc2VlcworICogdGhlbS4KKyAqCisgKiBUbyBnZXQgYXJvdW5kIHRoaXMsIHdlIG11c3QgZGlzYWJsZSB0aGUgdXNlbGVzcyBNTUMgY29udHJvbGxlci4KKyAqIEF0IHRoYXQgcG9pbnQsIHRoZSBTREhDSSBjb250cm9sbGVyIHdpbGwgc3RhcnQgc2VlaW5nIHRoZW0KKyAqIEl0IHNlZW1zIHRvIGJlIHRoZSBjYXNlIHRoYXQgdGhlIHJlbGV2YW50IFBDSSByZWdpc3RlcnMgdG8gZGVhY3RpdmF0ZSB0aGUKKyAqIE1NQyBjb250cm9sbGVyIGxpdmUgb24gUENJIGZ1bmN0aW9uIDAsIHdoaWNoIG1pZ2h0IGJlIHRoZSBjYXJkYnVzIGNvbnRyb2xsZXIKKyAqIG9yIHRoZSBmaXJld2lyZSBjb250cm9sbGVyLCBkZXBlbmRpbmcgb24gdGhlIHBhcnRpY3VsYXIgY2hpcCBpbiBxdWVzdGlvbgorICoKKyAqIFRoaXMgaGFzIHRvIGJlIGRvbmUgZWFybHksIGJlY2F1c2UgYXMgc29vbiBhcyB3ZSBkaXNhYmxlIHRoZSBNTUMgY29udHJvbGxlcgorICogb3RoZXIgcGNpIGZ1bmN0aW9ucyBzaGlmdCB1cCBvbmUgbGV2ZWwsIGUuZy4gZnVuY3Rpb24gIzIgYmVjb21lcyBmdW5jdGlvbgorICogIzEsIGFuZCB0aGlzIHdpbGwgY29uZnVzZSB0aGUgcGNpIGNvcmUuCisgKi8KKworI2lmZGVmIENPTkZJR19NTUNfUklDT0hfTU1DCitzdGF0aWMgdm9pZCByaWNvaF9tbWNfZml4dXBfcmw1YzQ3NihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCS8qIGRpc2FibGUgdmlhIGNhcmRidXMgaW50ZXJmYWNlICovCisJdTggd3JpdGVfZW5hYmxlOworCXU4IHdyaXRlX3RhcmdldDsKKwl1OCBkaXNhYmxlOworCisJLyogZGlzYWJsZSBtdXN0IGJlIGRvbmUgdmlhIGZ1bmN0aW9uICMwICovCisJaWYgKFBDSV9GVU5DKGRldi0+ZGV2Zm4pKQorCQlyZXR1cm47CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4QjcsICZkaXNhYmxlKTsKKwlpZiAoZGlzYWJsZSAmIDB4MDIpCisJCXJldHVybjsKKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg4RSwgJndyaXRlX2VuYWJsZSk7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4RSwgMHhBQSk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCAweDhELCAmd3JpdGVfdGFyZ2V0KTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDhELCAweEI3KTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweEI3LCBkaXNhYmxlIHwgMHgwMik7CisJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg4RSwgd3JpdGVfZW5hYmxlKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweDhELCB3cml0ZV90YXJnZXQpOworCisJZGV2X25vdGljZSgmZGV2LT5kZXYsICJwcm9wcmlldGFyeSBSaWNvaCBNTUMgY29udHJvbGxlciBkaXNhYmxlZCAodmlhIGNhcmRidXMgZnVuY3Rpb24pXG4iKTsKKwlkZXZfbm90aWNlKCZkZXYtPmRldiwgIk1NQyBjYXJkcyBhcmUgbm93IHN1cHBvcnRlZCBieSBzdGFuZGFyZCBTREhDSSBjb250cm9sbGVyXG4iKTsKK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0VBUkxZKFBDSV9WRU5ET1JfSURfUklDT0gsIFBDSV9ERVZJQ0VfSURfUklDT0hfUkw1QzQ3Niwgcmljb2hfbW1jX2ZpeHVwX3JsNWM0NzYpOworREVDTEFSRV9QQ0lfRklYVVBfUkVTVU1FX0VBUkxZKFBDSV9WRU5ET1JfSURfUklDT0gsIFBDSV9ERVZJQ0VfSURfUklDT0hfUkw1QzQ3Niwgcmljb2hfbW1jX2ZpeHVwX3JsNWM0NzYpOworCitzdGF0aWMgdm9pZCByaWNvaF9tbWNfZml4dXBfcjVjODMyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJLyogZGlzYWJsZSB2aWEgZmlyZXdpcmUgaW50ZXJmYWNlICovCisJdTggd3JpdGVfZW5hYmxlOworCXU4IGRpc2FibGU7CisKKwkvKiBkaXNhYmxlIG11c3QgYmUgZG9uZSB2aWEgZnVuY3Rpb24gIzAgKi8KKwlpZiAoUENJX0ZVTkMoZGV2LT5kZXZmbikpCisJCXJldHVybjsKKworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHhDQiwgJmRpc2FibGUpOworCisJaWYgKGRpc2FibGUgJiAweDAyKQorCQlyZXR1cm47CisKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIDB4Q0EsICZ3cml0ZV9lbmFibGUpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4Q0EsIDB4NTcpOworCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIDB4Q0IsIGRpc2FibGUgfCAweDAyKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCAweENBLCB3cml0ZV9lbmFibGUpOworCisJZGV2X25vdGljZSgmZGV2LT5kZXYsICJwcm9wcmlldGFyeSBSaWNvaCBNTUMgY29udHJvbGxlciBkaXNhYmxlZCAodmlhIGZpcmV3aXJlIGZ1bmN0aW9uKVxuIik7CisJZGV2X25vdGljZSgmZGV2LT5kZXYsICJNTUMgY2FyZHMgYXJlIG5vdyBzdXBwb3J0ZWQgYnkgc3RhbmRhcmQgU0RIQ0kgY29udHJvbGxlclxuIik7Cit9CitERUNMQVJFX1BDSV9GSVhVUF9FQVJMWShQQ0lfVkVORE9SX0lEX1JJQ09ILCBQQ0lfREVWSUNFX0lEX1JJQ09IX1I1QzgzMiwgcmljb2hfbW1jX2ZpeHVwX3I1YzgzMik7CitERUNMQVJFX1BDSV9GSVhVUF9SRVNVTUVfRUFSTFkoUENJX1ZFTkRPUl9JRF9SSUNPSCwgUENJX0RFVklDRV9JRF9SSUNPSF9SNUM4MzIsIHJpY29oX21tY19maXh1cF9yNWM4MzIpOworI2VuZGlmIC8qQ09ORklHX01NQ19SSUNPSF9NTUMqLworCisKIHN0YXRpYyB2b2lkIHBjaV9kb19maXh1cHMoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9maXh1cCAqZiwKIAkJCSAgc3RydWN0IHBjaV9maXh1cCAqZW5kKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvc2xvdC5jIGIvZHJpdmVycy9wY2kvc2xvdC5jCmluZGV4IDQ5YzllNmMuLmY3NWE0NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3Nsb3QuYworKysgYi9kcml2ZXJzL3BjaS9zbG90LmMKQEAgLTI5LDcgKzI5LDcgQEAKIAlyZXR1cm4gYXR0cmlidXRlLT5zdG9yZSA/IGF0dHJpYnV0ZS0+c3RvcmUoc2xvdCwgYnVmLCBsZW4pIDogLUVJTzsKIH0KIAotc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgcGNpX3Nsb3Rfc3lzZnNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgcGNpX3Nsb3Rfc3lzZnNfb3BzID0gewogCS5zaG93ID0gcGNpX3Nsb3RfYXR0cl9zaG93LAogCS5zdG9yZSA9IHBjaV9zbG90X2F0dHJfc3RvcmUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvdnBkLmMgYi9kcml2ZXJzL3BjaS92cGQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWE1Y2ExCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wY2kvdnBkLmMKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIEZpbGU6CXZwZC5jCisgKiBQdXJwb3NlOglQcm92aWRlIFBDSSBWUEQgc3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisKK2ludCBwY2lfdnBkX2ZpbmRfdGFnKGNvbnN0IHU4ICpidWYsIHVuc2lnbmVkIGludCBvZmYsIHVuc2lnbmVkIGludCBsZW4sIHU4IHJkdCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IG9mZjsgaSA8IGxlbjsgKSB7CisJCXU4IHZhbCA9IGJ1ZltpXTsKKworCQlpZiAodmFsICYgUENJX1ZQRF9MUkRUKSB7CisJCQkvKiBEb24ndCByZXR1cm4gc3VjY2VzcyBvZiB0aGUgdGFnIGlzbid0IGNvbXBsZXRlICovCisJCQlpZiAoaSArIFBDSV9WUERfTFJEVF9UQUdfU0laRSA+IGxlbikKKwkJCQlicmVhazsKKworCQkJaWYgKHZhbCA9PSByZHQpCisJCQkJcmV0dXJuIGk7CisKKwkJCWkgKz0gUENJX1ZQRF9MUkRUX1RBR19TSVpFICsKKwkJCSAgICAgcGNpX3ZwZF9scmR0X3NpemUoJmJ1ZltpXSk7CisJCX0gZWxzZSB7CisJCQl1OCB0YWcgPSB2YWwgJiB+UENJX1ZQRF9TUkRUX0xFTl9NQVNLOworCisJCQlpZiAodGFnID09IHJkdCkKKwkJCQlyZXR1cm4gaTsKKworCQkJaWYgKHRhZyA9PSBQQ0lfVlBEX1NSRFRfRU5EKQorCQkJCWJyZWFrOworCisJCQlpICs9IFBDSV9WUERfU1JEVF9UQUdfU0laRSArCisJCQkgICAgIHBjaV92cGRfc3JkdF9zaXplKCZidWZbaV0pOworCQl9CisJfQorCisJcmV0dXJuIC1FTk9FTlQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfdnBkX2ZpbmRfdGFnKTsKKworaW50IHBjaV92cGRfZmluZF9pbmZvX2tleXdvcmQoY29uc3QgdTggKmJ1ZiwgdW5zaWduZWQgaW50IG9mZiwKKwkJCSAgICAgIHVuc2lnbmVkIGludCBsZW4sIGNvbnN0IGNoYXIgKmt3KQoreworCWludCBpOworCisJZm9yIChpID0gb2ZmOyBpICsgUENJX1ZQRF9JTkZPX0ZMRF9IRFJfU0laRSA8PSBvZmYgKyBsZW47KSB7CisJCWlmIChidWZbaSArIDBdID09IGt3WzBdICYmCisJCSAgICBidWZbaSArIDFdID09IGt3WzFdKQorCQkJcmV0dXJuIGk7CisKKwkJaSArPSBQQ0lfVlBEX0lORk9fRkxEX0hEUl9TSVpFICsKKwkJICAgICBwY2lfdnBkX2luZm9fZmllbGRfc2l6ZSgmYnVmW2ldKTsKKwl9CisKKwlyZXR1cm4gLUVOT0VOVDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHBjaV92cGRfZmluZF9pbmZvX2tleXdvcmQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvS2NvbmZpZyBiL2RyaXZlcnMvcGNtY2lhL0tjb25maWcKaW5kZXggMGE2NjAxYy4uZDE4OWU0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjbWNpYS9LY29uZmlnCkBAIC01MSwxNyArNTEsMjMgQEAKIAogY29uZmlnIFBDTUNJQV9JT0NUTAogCWJvb2wgIlBDTUNJQSBjb250cm9sIGlvY3RsIChvYnNvbGV0ZSkiCi0JZGVwZW5kcyBvbiBQQ01DSUEKKwlkZXBlbmRzIG9uIFBDTUNJQSAmJiBBUk0gJiYgIVNNUCAmJiAhUFJFRU1QVAogCWRlZmF1bHQgeQogCWhlbHAKIAkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUgZGVwcmVjYXRlZCBpb2N0bCBpbnRlcmZhY2UgdG8gdGhlIFBDTUNJQQotCSAgc3Vic3lzdGVtIHdpbGwgYmUgYnVpbHQuIEl0IGlzIG5lZWRlZCBieSBjYXJkbWdyIGFuZCBjYXJkY3RsCi0JICAocGNtY2lhLWNzKSB0byBmdW5jdGlvbiBwcm9wZXJseS4KKwkgIHN1YnN5c3RlbSB3aWxsIGJlIGJ1aWx0LiBJdCBpcyBuZWVkZWQgYnkgdGhlIGRlcHJlY2F0ZWQgcGNtY2lhLWNzCisJICB0b29scyAoY2FyZG1nciwgY2FyZGN0bCkgdG8gZnVuY3Rpb24gcHJvcGVybHkuCiAKIAkgIFlvdSBzaG91bGQgdXNlIHRoZSBuZXcgcGNtY2lhdXRpbHMgcGFja2FnZSBpbnN0ZWFkIChzZWUKIAkgIDxmaWxlOkRvY3VtZW50YXRpb24vQ2hhbmdlcz4gZm9yIGxvY2F0aW9uIGFuZCBkZXRhaWxzKS4KIAotCSAgSWYgdW5zdXJlLCBzYXkgWS4KKwkgIFRoaXMgY29uZmlnIG9wdGlvbiB3aWxsIG1vc3QgbGlrZWx5IGJlIHJlbW92ZWQgZnJvbSBrZXJuZWwgMi42LjM1LAorCSAgdGhlIGFzc29jaWF0ZWQgY29kZSBmcm9tIGtlcm5lbCAyLjYuMzYuCisKKwkgIEFzIHRoZSBQQ01DSUEgaW9jdGwgaXMgbm90IGxvY2tpbmcgc2FmZSwgaXQgZGVwZW5kcyBvbiAhU01QIGFuZAorCSAgIVBSRUVNUFQuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBDQVJEQlVTCiAJYm9vbCAiMzItYml0IENhcmRCdXMgc3VwcG9ydCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYyBiL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYwppbmRleCBhYzA2ODZlLi5lNmFiMmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMKKysrIGIvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jCkBAIC03MSw3ICs3MSw3IEBACiAJdW5zaWduZWQgaW50IG1heCwgcGFzczsKIAogCXMtPmZ1bmN0aW9ucyA9IHBjaV9zY2FuX3Nsb3QoYnVzLCBQQ0lfREVWRk4oMCwgMCkpOwotCXBjaV9maXh1cF9jYXJkYnVzKGJ1cyk7IAorCXBjaV9maXh1cF9jYXJkYnVzKGJ1cyk7CiAKIAltYXggPSBidXMtPnNlY29uZGFyeTsKIAlmb3IgKHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY2lzdHBsLmMgYi9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYwppbmRleCAyZjM2MjJkLi5mMjMwZjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jaXN0cGwuYwpAQCAtNTQsNDYgKzU0LDQ0IEBACiAvKiBVcHBlciBsaW1pdCBvbiByZWFzb25hYmxlICMgb2YgdHVwbGVzICovCiAjZGVmaW5lIE1BWF9UVVBMRVMJCTIwMAogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotLyogUGFyYW1ldGVycyB0aGF0IGNhbiBiZSBzZXQgd2l0aCAnaW5zbW9kJyAqLwotCiAvKiAxNi1iaXQgQ0lTPyAqLwogc3RhdGljIGludCBjaXNfd2lkdGg7CiBtb2R1bGVfcGFyYW0oY2lzX3dpZHRoLCBpbnQsIDA0NDQpOwogCiB2b2lkIHJlbGVhc2VfY2lzX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcykKIHsKLSAgICBtdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwotICAgIGlmIChzLT5jaXNfbWVtLmZsYWdzICYgTUFQX0FDVElWRSkgewotCXMtPmNpc19tZW0uZmxhZ3MgJj0gfk1BUF9BQ1RJVkU7Ci0Jcy0+b3BzLT5zZXRfbWVtX21hcChzLCAmcy0+Y2lzX21lbSk7Ci0JaWYgKHMtPmNpc19tZW0ucmVzKSB7Ci0JICAgIHJlbGVhc2VfcmVzb3VyY2Uocy0+Y2lzX21lbS5yZXMpOwotCSAgICBrZnJlZShzLT5jaXNfbWVtLnJlcyk7Ci0JICAgIHMtPmNpc19tZW0ucmVzID0gTlVMTDsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCWlmIChzLT5jaXNfbWVtLmZsYWdzICYgTUFQX0FDVElWRSkgeworCQlzLT5jaXNfbWVtLmZsYWdzICY9IH5NQVBfQUNUSVZFOworCQlzLT5vcHMtPnNldF9tZW1fbWFwKHMsICZzLT5jaXNfbWVtKTsKKwkJaWYgKHMtPmNpc19tZW0ucmVzKSB7CisJCQlyZWxlYXNlX3Jlc291cmNlKHMtPmNpc19tZW0ucmVzKTsKKwkJCWtmcmVlKHMtPmNpc19tZW0ucmVzKTsKKwkJCXMtPmNpc19tZW0ucmVzID0gTlVMTDsKKwkJfQorCQlpb3VubWFwKHMtPmNpc192aXJ0KTsKKwkJcy0+Y2lzX3ZpcnQgPSBOVUxMOwogCX0KLQlpb3VubWFwKHMtPmNpc192aXJ0KTsKLQlzLT5jaXNfdmlydCA9IE5VTEw7Ci0gICAgfQotICAgIG11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKwltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CiB9CiAKLS8qCi0gKiBNYXAgdGhlIGNhcmQgbWVtb3J5IGF0ICJjYXJkX29mZnNldCIgaW50byB2aXJ0dWFsIHNwYWNlLgorLyoqCisgKiBzZXRfY2lzX21hcCgpIC0gbWFwIHRoZSBjYXJkIG1lbW9yeSBhdCAiY2FyZF9vZmZzZXQiIGludG8gdmlydHVhbCBzcGFjZS4KKyAqCiAgKiBJZiBmbGFncyAmIE1BUF9BVFRSSUIsIG1hcCB0aGUgYXR0cmlidXRlIHNwYWNlLCBvdGhlcndpc2UKICAqIG1hcCB0aGUgbWVtb3J5IHNwYWNlLgogICoKICAqIE11c3QgYmUgY2FsbGVkIHdpdGggb3BzX211dGV4IGhlbGQuCiAgKi8KLXN0YXRpYyB2b2lkIF9faW9tZW0gKgotc2V0X2Npc19tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBjYXJkX29mZnNldCwgdW5zaWduZWQgaW50IGZsYWdzKQorc3RhdGljIHZvaWQgX19pb21lbSAqc2V0X2Npc19tYXAoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsCisJCQkJdW5zaWduZWQgaW50IGNhcmRfb2Zmc2V0LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJcGNjYXJkX21lbV9tYXAgKm1lbSA9ICZzLT5jaXNfbWVtOwogCWludCByZXQ7CiAKIAlpZiAoIShzLT5mZWF0dXJlcyAmIFNTX0NBUF9TVEFUSUNfTUFQKSAmJiAobWVtLT5yZXMgPT0gTlVMTCkpIHsKLQkJbWVtLT5yZXMgPSBwY21jaWFfZmluZF9tZW1fcmVnaW9uKDAsIHMtPm1hcF9zaXplLCBzLT5tYXBfc2l6ZSwgMCwgcyk7CisJCW1lbS0+cmVzID0gcGNtY2lhX2ZpbmRfbWVtX3JlZ2lvbigwLCBzLT5tYXBfc2l6ZSwKKwkJCQkJCXMtPm1hcF9zaXplLCAwLCBzKTsKIAkJaWYgKG1lbS0+cmVzID09IE5VTEwpIHsKIAkJCWRldl9wcmludGsoS0VSTl9OT1RJQ0UsICZzLT5kZXYsCiAJCQkJICAgImNzOiB1bmFibGUgdG8gbWFwIGNhcmQgbWVtb3J5IVxuIik7CkBAIC0xMjQsMTY1ICsxMjIsMTcwIEBACiAJcmV0dXJuIHMtPmNpc192aXJ0OwogfQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIExvdy1sZXZlbCBmdW5jdGlvbnMgdG8gcmVhZCBhbmQgd3JpdGUgQ0lTIG1lbW9yeS4gIEkgdGhpbmsgdGhlCi0gICAgd3JpdGUgcm91dGluZSBpcyBvbmx5IHVzZWZ1bCBmb3Igd3JpdGluZyBvbmUtYnl0ZSByZWdpc3RlcnMuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiAvKiBCaXRzIGluIGF0dHIgZmllbGQgKi8KICNkZWZpbmUgSVNfQVRUUgkJMQogI2RlZmluZSBJU19JTkRJUkVDVAk4CiAKKy8qKgorICogcGNtY2lhX3JlYWRfY2lzX21lbSgpIC0gbG93LWxldmVsIGZ1bmN0aW9uIHRvIHJlYWQgQ0lTIG1lbW9yeQorICovCiBpbnQgcGNtY2lhX3JlYWRfY2lzX21lbShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IGF0dHIsIHVfaW50IGFkZHIsCiAJCSB1X2ludCBsZW4sIHZvaWQgKnB0cikKIHsKLSAgICB2b2lkIF9faW9tZW0gKnN5cywgKmVuZDsKLSAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBwdHI7CisJdm9pZCBfX2lvbWVtICpzeXMsICplbmQ7CisJdW5zaWduZWQgY2hhciAqYnVmID0gcHRyOwogCi0gICAgZGV2X2RiZygmcy0+ZGV2LCAicGNtY2lhX3JlYWRfY2lzX21lbSglZCwgJSN4LCAldSlcbiIsIGF0dHIsIGFkZHIsIGxlbik7CisJZGV2X2RiZygmcy0+ZGV2LCAicGNtY2lhX3JlYWRfY2lzX21lbSglZCwgJSN4LCAldSlcbiIsIGF0dHIsIGFkZHIsIGxlbik7CiAKLSAgICBtdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOwotICAgIGlmIChhdHRyICYgSVNfSU5ESVJFQ1QpIHsKLQkvKiBJbmRpcmVjdCBhY2Nlc3NlcyB1c2UgYSBidW5jaCBvZiBzcGVjaWFsIHJlZ2lzdGVycyBhdCBmaXhlZAotCSAgIGxvY2F0aW9ucyBpbiBjb21tb24gbWVtb3J5ICovCi0JdV9jaGFyIGZsYWdzID0gSUNUUkwwX0NPTU1PTnxJQ1RSTDBfQVVUT0lOQ3xJQ1RSTDBfQllURUdSQU47Ci0JaWYgKGF0dHIgJiBJU19BVFRSKSB7Ci0JICAgIGFkZHIgKj0gMjsKLQkgICAgZmxhZ3MgPSBJQ1RSTDBfQVVUT0lOQzsKKwltdXRleF9sb2NrKCZzLT5vcHNfbXV0ZXgpOworCWlmIChhdHRyICYgSVNfSU5ESVJFQ1QpIHsKKwkJLyogSW5kaXJlY3QgYWNjZXNzZXMgdXNlIGEgYnVuY2ggb2Ygc3BlY2lhbCByZWdpc3RlcnMgYXQgZml4ZWQKKwkJICAgbG9jYXRpb25zIGluIGNvbW1vbiBtZW1vcnkgKi8KKwkJdV9jaGFyIGZsYWdzID0gSUNUUkwwX0NPTU1PTnxJQ1RSTDBfQVVUT0lOQ3xJQ1RSTDBfQllURUdSQU47CisJCWlmIChhdHRyICYgSVNfQVRUUikgeworCQkJYWRkciAqPSAyOworCQkJZmxhZ3MgPSBJQ1RSTDBfQVVUT0lOQzsKKwkJfQorCisJCXN5cyA9IHNldF9jaXNfbWFwKHMsIDAsIE1BUF9BQ1RJVkUgfAorCQkJCSgoY2lzX3dpZHRoKSA/IE1BUF8xNkJJVCA6IDApKTsKKwkJaWYgKCFzeXMpIHsKKwkJCWRldl9kYmcoJnMtPmRldiwgImNvdWxkIG5vdCBtYXAgbWVtb3J5XG4iKTsKKwkJCW1lbXNldChwdHIsIDB4ZmYsIGxlbik7CisJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKworCQl3cml0ZWIoZmxhZ3MsIHN5cytDSVNSRUdfSUNUUkwwKTsKKwkJd3JpdGViKGFkZHIgJiAweGZmLCBzeXMrQ0lTUkVHX0lBRERSMCk7CisJCXdyaXRlYigoYWRkcj4+OCkgJiAweGZmLCBzeXMrQ0lTUkVHX0lBRERSMSk7CisJCXdyaXRlYigoYWRkcj4+MTYpICYgMHhmZiwgc3lzK0NJU1JFR19JQUREUjIpOworCQl3cml0ZWIoKGFkZHI+PjI0KSAmIDB4ZmYsIHN5cytDSVNSRUdfSUFERFIzKTsKKwkJZm9yICggOyBsZW4gPiAwOyBsZW4tLSwgYnVmKyspCisJCQkqYnVmID0gcmVhZGIoc3lzK0NJU1JFR19JREFUQTApOworCX0gZWxzZSB7CisJCXVfaW50IGluYyA9IDEsIGNhcmRfb2Zmc2V0LCBmbGFnczsKKworCQlpZiAoYWRkciA+IENJU1RQTF9NQVhfQ0lTX1NJWkUpCisJCQlkZXZfZGJnKCZzLT5kZXYsCisJCQkJImF0dGVtcHQgdG8gcmVhZCBDSVMgbWVtIGF0IGFkZHIgJSN4IiwgYWRkcik7CisKKwkJZmxhZ3MgPSBNQVBfQUNUSVZFIHwgKChjaXNfd2lkdGgpID8gTUFQXzE2QklUIDogMCk7CisJCWlmIChhdHRyKSB7CisJCQlmbGFncyB8PSBNQVBfQVRUUklCOworCQkJaW5jKys7CisJCQlhZGRyICo9IDI7CisJCX0KKworCQljYXJkX29mZnNldCA9IGFkZHIgJiB+KHMtPm1hcF9zaXplLTEpOworCQl3aGlsZSAobGVuKSB7CisJCQlzeXMgPSBzZXRfY2lzX21hcChzLCBjYXJkX29mZnNldCwgZmxhZ3MpOworCQkJaWYgKCFzeXMpIHsKKwkJCQlkZXZfZGJnKCZzLT5kZXYsICJjb3VsZCBub3QgbWFwIG1lbW9yeVxuIik7CisJCQkJbWVtc2V0KHB0ciwgMHhmZiwgbGVuKTsKKwkJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJCQkJcmV0dXJuIC0xOworCQkJfQorCQkJZW5kID0gc3lzICsgcy0+bWFwX3NpemU7CisJCQlzeXMgPSBzeXMgKyAoYWRkciAmIChzLT5tYXBfc2l6ZS0xKSk7CisJCQlmb3IgKCA7IGxlbiA+IDA7IGxlbi0tLCBidWYrKywgc3lzICs9IGluYykgeworCQkJCWlmIChzeXMgPT0gZW5kKQorCQkJCQlicmVhazsKKwkJCQkqYnVmID0gcmVhZGIoc3lzKTsKKwkJCX0KKwkJCWNhcmRfb2Zmc2V0ICs9IHMtPm1hcF9zaXplOworCQkJYWRkciA9IDA7CisJCX0KIAl9Ci0KLQlzeXMgPSBzZXRfY2lzX21hcChzLCAwLCBNQVBfQUNUSVZFIHwgKChjaXNfd2lkdGgpID8gTUFQXzE2QklUIDogMCkpOwotCWlmICghc3lzKSB7Ci0JICAgIGRldl9kYmcoJnMtPmRldiwgImNvdWxkIG5vdCBtYXAgbWVtb3J5XG4iKTsKLQkgICAgbWVtc2V0KHB0ciwgMHhmZiwgbGVuKTsKLQkgICAgbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCSAgICByZXR1cm4gLTE7Ci0JfQotCi0Jd3JpdGViKGZsYWdzLCBzeXMrQ0lTUkVHX0lDVFJMMCk7Ci0Jd3JpdGViKGFkZHIgJiAweGZmLCBzeXMrQ0lTUkVHX0lBRERSMCk7Ci0Jd3JpdGViKChhZGRyPj44KSAmIDB4ZmYsIHN5cytDSVNSRUdfSUFERFIxKTsKLQl3cml0ZWIoKGFkZHI+PjE2KSAmIDB4ZmYsIHN5cytDSVNSRUdfSUFERFIyKTsKLQl3cml0ZWIoKGFkZHI+PjI0KSAmIDB4ZmYsIHN5cytDSVNSRUdfSUFERFIzKTsKLQlmb3IgKCA7IGxlbiA+IDA7IGxlbi0tLCBidWYrKykKLQkgICAgKmJ1ZiA9IHJlYWRiKHN5cytDSVNSRUdfSURBVEEwKTsKLSAgICB9IGVsc2UgewotCXVfaW50IGluYyA9IDEsIGNhcmRfb2Zmc2V0LCBmbGFnczsKLQotCWlmIChhZGRyID4gQ0lTVFBMX01BWF9DSVNfU0laRSkKLQkJZGV2X2RiZygmcy0+ZGV2LCAiYXR0ZW1wdCB0byByZWFkIENJUyBtZW0gYXQgYWRkciAlI3giLCBhZGRyKTsKLQotCWZsYWdzID0gTUFQX0FDVElWRSB8ICgoY2lzX3dpZHRoKSA/IE1BUF8xNkJJVCA6IDApOwotCWlmIChhdHRyKSB7Ci0JICAgIGZsYWdzIHw9IE1BUF9BVFRSSUI7Ci0JICAgIGluYysrOwotCSAgICBhZGRyICo9IDI7Ci0JfQotCi0JY2FyZF9vZmZzZXQgPSBhZGRyICYgfihzLT5tYXBfc2l6ZS0xKTsKLQl3aGlsZSAobGVuKSB7Ci0JICAgIHN5cyA9IHNldF9jaXNfbWFwKHMsIGNhcmRfb2Zmc2V0LCBmbGFncyk7Ci0JICAgIGlmICghc3lzKSB7Ci0JCWRldl9kYmcoJnMtPmRldiwgImNvdWxkIG5vdCBtYXAgbWVtb3J5XG4iKTsKLQkJbWVtc2V0KHB0ciwgMHhmZiwgbGVuKTsKLQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCQlyZXR1cm4gLTE7Ci0JICAgIH0KLQkgICAgZW5kID0gc3lzICsgcy0+bWFwX3NpemU7Ci0JICAgIHN5cyA9IHN5cyArIChhZGRyICYgKHMtPm1hcF9zaXplLTEpKTsKLQkgICAgZm9yICggOyBsZW4gPiAwOyBsZW4tLSwgYnVmKyssIHN5cyArPSBpbmMpIHsKLQkJaWYgKHN5cyA9PSBlbmQpCi0JCSAgICBicmVhazsKLQkJKmJ1ZiA9IHJlYWRiKHN5cyk7Ci0JICAgIH0KLQkgICAgY2FyZF9vZmZzZXQgKz0gcy0+bWFwX3NpemU7Ci0JICAgIGFkZHIgPSAwOwotCX0KLSAgICB9Ci0gICAgbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwotICAgIGRldl9kYmcoJnMtPmRldiwgIiAgJSMyLjJ4ICUjMi4yeCAlIzIuMnggJSMyLjJ4IC4uLlxuIiwKLQkgICoodV9jaGFyICopKHB0ciswKSwgKih1X2NoYXIgKikocHRyKzEpLAotCSAgKih1X2NoYXIgKikocHRyKzIpLCAqKHVfY2hhciAqKShwdHIrMykpOwotICAgIHJldHVybiAwOworCW11dGV4X3VubG9jaygmcy0+b3BzX211dGV4KTsKKwlkZXZfZGJnKCZzLT5kZXYsICIgICUjMi4yeCAlIzIuMnggJSMyLjJ4ICUjMi4yeCAuLi5cbiIsCisJCSoodV9jaGFyICopKHB0ciswKSwgKih1X2NoYXIgKikocHRyKzEpLAorCQkqKHVfY2hhciAqKShwdHIrMiksICoodV9jaGFyICopKHB0ciszKSk7CisJcmV0dXJuIDA7CiB9CiAKIAorLyoqCisgKiBwY21jaWFfd3JpdGVfY2lzX21lbSgpIC0gbG93LWxldmVsIGZ1bmN0aW9uIHRvIHdyaXRlIENJUyBtZW1vcnkKKyAqCisgKiBQcm9iYWJseSBvbmx5IHVzZWZ1bCBmb3Igd3JpdGluZyBvbmUtYnl0ZSByZWdpc3RlcnMuCisgKi8KIHZvaWQgcGNtY2lhX3dyaXRlX2Npc19tZW0oc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIGludCBhdHRyLCB1X2ludCBhZGRyLAogCQkgICB1X2ludCBsZW4sIHZvaWQgKnB0cikKIHsKLSAgICB2b2lkIF9faW9tZW0gKnN5cywgKmVuZDsKLSAgICB1bnNpZ25lZCBjaGFyICpidWYgPSBwdHI7CisJdm9pZCBfX2lvbWVtICpzeXMsICplbmQ7CisJdW5zaWduZWQgY2hhciAqYnVmID0gcHRyOwogCi0gICAgZGV2X2RiZygmcy0+ZGV2LCAicGNtY2lhX3dyaXRlX2Npc19tZW0oJWQsICUjeCwgJXUpXG4iLCBhdHRyLCBhZGRyLCBsZW4pOworCWRldl9kYmcoJnMtPmRldiwKKwkJInBjbWNpYV93cml0ZV9jaXNfbWVtKCVkLCAlI3gsICV1KVxuIiwgYXR0ciwgYWRkciwgbGVuKTsKIAotICAgIG11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7Ci0gICAgaWYgKGF0dHIgJiBJU19JTkRJUkVDVCkgewotCS8qIEluZGlyZWN0IGFjY2Vzc2VzIHVzZSBhIGJ1bmNoIG9mIHNwZWNpYWwgcmVnaXN0ZXJzIGF0IGZpeGVkCi0JICAgbG9jYXRpb25zIGluIGNvbW1vbiBtZW1vcnkgKi8KLQl1X2NoYXIgZmxhZ3MgPSBJQ1RSTDBfQ09NTU9OfElDVFJMMF9BVVRPSU5DfElDVFJMMF9CWVRFR1JBTjsKLQlpZiAoYXR0ciAmIElTX0FUVFIpIHsKLQkgICAgYWRkciAqPSAyOwotCSAgICBmbGFncyA9IElDVFJMMF9BVVRPSU5DOworCW11dGV4X2xvY2soJnMtPm9wc19tdXRleCk7CisJaWYgKGF0dHIgJiBJU19JTkRJUkVDVCkgeworCQkvKiBJbmRpcmVjdCBhY2Nlc3NlcyB1c2UgYSBidW5jaCBvZiBzcGVjaWFsIHJlZ2lzdGVycyBhdCBmaXhlZAorCQkgICBsb2NhdGlvbnMgaW4gY29tbW9uIG1lbW9yeSAqLworCQl1X2NoYXIgZmxhZ3MgPSBJQ1RSTDBfQ09NTU9OfElDVFJMMF9BVVRPSU5DfElDVFJMMF9CWVRFR1JBTjsKKwkJaWYgKGF0dHIgJiBJU19BVFRSKSB7CisJCQlhZGRyICo9IDI7CisJCQlmbGFncyA9IElDVFJMMF9BVVRPSU5DOworCQl9CisKKwkJc3lzID0gc2V0X2Npc19tYXAocywgMCwgTUFQX0FDVElWRSB8CisJCQkJKChjaXNfd2lkdGgpID8gTUFQXzE2QklUIDogMCkpOworCQlpZiAoIXN5cykgeworCQkJZGV2X2RiZygmcy0+ZGV2LCAiY291bGQgbm90IG1hcCBtZW1vcnlcbiIpOworCQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOworCQkJcmV0dXJuOyAvKiBGSVhNRTogRXJyb3IgKi8KKwkJfQorCisJCXdyaXRlYihmbGFncywgc3lzK0NJU1JFR19JQ1RSTDApOworCQl3cml0ZWIoYWRkciAmIDB4ZmYsIHN5cytDSVNSRUdfSUFERFIwKTsKKwkJd3JpdGViKChhZGRyPj44KSAmIDB4ZmYsIHN5cytDSVNSRUdfSUFERFIxKTsKKwkJd3JpdGViKChhZGRyPj4xNikgJiAweGZmLCBzeXMrQ0lTUkVHX0lBRERSMik7CisJCXdyaXRlYigoYWRkcj4+MjQpICYgMHhmZiwgc3lzK0NJU1JFR19JQUREUjMpOworCQlmb3IgKCA7IGxlbiA+IDA7IGxlbi0tLCBidWYrKykKKwkJCXdyaXRlYigqYnVmLCBzeXMrQ0lTUkVHX0lEQVRBMCk7CisJfSBlbHNlIHsKKwkJdV9pbnQgaW5jID0gMSwgY2FyZF9vZmZzZXQsIGZsYWdzOworCisJCWZsYWdzID0gTUFQX0FDVElWRSB8ICgoY2lzX3dpZHRoKSA/IE1BUF8xNkJJVCA6IDApOworCQlpZiAoYXR0ciAmIElTX0FUVFIpIHsKKwkJCWZsYWdzIHw9IE1BUF9BVFRSSUI7CisJCQlpbmMrKzsKKwkJCWFkZHIgKj0gMjsKKwkJfQorCisJCWNhcmRfb2Zmc2V0ID0gYWRkciAmIH4ocy0+bWFwX3NpemUtMSk7CisJCXdoaWxlIChsZW4pIHsKKwkJCXN5cyA9IHNldF9jaXNfbWFwKHMsIGNhcmRfb2Zmc2V0LCBmbGFncyk7CisJCQlpZiAoIXN5cykgeworCQkJCWRldl9kYmcoJnMtPmRldiwgImNvdWxkIG5vdCBtYXAgbWVtb3J5XG4iKTsKKwkJCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJCQkJcmV0dXJuOyAvKiBGSVhNRTogZXJyb3IgKi8KKwkJCX0KKworCQkJZW5kID0gc3lzICsgcy0+bWFwX3NpemU7CisJCQlzeXMgPSBzeXMgKyAoYWRkciAmIChzLT5tYXBfc2l6ZS0xKSk7CisJCQlmb3IgKCA7IGxlbiA+IDA7IGxlbi0tLCBidWYrKywgc3lzICs9IGluYykgeworCQkJCWlmIChzeXMgPT0gZW5kKQorCQkJCQlicmVhazsKKwkJCQl3cml0ZWIoKmJ1Ziwgc3lzKTsKKwkJCX0KKwkJCWNhcmRfb2Zmc2V0ICs9IHMtPm1hcF9zaXplOworCQkJYWRkciA9IDA7CisJCX0KIAl9Ci0KLQlzeXMgPSBzZXRfY2lzX21hcChzLCAwLCBNQVBfQUNUSVZFIHwgKChjaXNfd2lkdGgpID8gTUFQXzE2QklUIDogMCkpOwotCWlmICghc3lzKSB7Ci0JCWRldl9kYmcoJnMtPmRldiwgImNvdWxkIG5vdCBtYXAgbWVtb3J5XG4iKTsKLQkJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwotCQlyZXR1cm47IC8qIEZJWE1FOiBFcnJvciAqLwotCX0KLQotCXdyaXRlYihmbGFncywgc3lzK0NJU1JFR19JQ1RSTDApOwotCXdyaXRlYihhZGRyICYgMHhmZiwgc3lzK0NJU1JFR19JQUREUjApOwotCXdyaXRlYigoYWRkcj4+OCkgJiAweGZmLCBzeXMrQ0lTUkVHX0lBRERSMSk7Ci0Jd3JpdGViKChhZGRyPj4xNikgJiAweGZmLCBzeXMrQ0lTUkVHX0lBRERSMik7Ci0Jd3JpdGViKChhZGRyPj4yNCkgJiAweGZmLCBzeXMrQ0lTUkVHX0lBRERSMyk7Ci0JZm9yICggOyBsZW4gPiAwOyBsZW4tLSwgYnVmKyspCi0JICAgIHdyaXRlYigqYnVmLCBzeXMrQ0lTUkVHX0lEQVRBMCk7Ci0gICAgfSBlbHNlIHsKLQl1X2ludCBpbmMgPSAxLCBjYXJkX29mZnNldCwgZmxhZ3M7Ci0KLQlmbGFncyA9IE1BUF9BQ1RJVkUgfCAoKGNpc193aWR0aCkgPyBNQVBfMTZCSVQgOiAwKTsKLQlpZiAoYXR0ciAmIElTX0FUVFIpIHsKLQkgICAgZmxhZ3MgfD0gTUFQX0FUVFJJQjsKLQkgICAgaW5jKys7Ci0JICAgIGFkZHIgKj0gMjsKLQl9Ci0KLQljYXJkX29mZnNldCA9IGFkZHIgJiB+KHMtPm1hcF9zaXplLTEpOwotCXdoaWxlIChsZW4pIHsKLQkgICAgc3lzID0gc2V0X2Npc19tYXAocywgY2FyZF9vZmZzZXQsIGZsYWdzKTsKLQkgICAgaWYgKCFzeXMpIHsKLQkJZGV2X2RiZygmcy0+ZGV2LCAiY291bGQgbm90IG1hcCBtZW1vcnlcbiIpOwotCQltdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7Ci0JCXJldHVybjsgLyogRklYTUU6IGVycm9yICovCi0JICAgIH0KLQotCSAgICBlbmQgPSBzeXMgKyBzLT5tYXBfc2l6ZTsKLQkgICAgc3lzID0gc3lzICsgKGFkZHIgJiAocy0+bWFwX3NpemUtMSkpOwotCSAgICBmb3IgKCA7IGxlbiA+IDA7IGxlbi0tLCBidWYrKywgc3lzICs9IGluYykgewotCQlpZiAoc3lzID09IGVuZCkKLQkJICAgIGJyZWFrOwotCQl3cml0ZWIoKmJ1Ziwgc3lzKTsKLQkgICAgfQotCSAgICBjYXJkX29mZnNldCArPSBzLT5tYXBfc2l6ZTsKLQkgICAgYWRkciA9IDA7Ci0JfQotICAgIH0KLSAgICBtdXRleF91bmxvY2soJnMtPm9wc19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZzLT5vcHNfbXV0ZXgpOwogfQogCiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAgVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHJlYWRfY2lzX21lbSwgd2l0aCB0aGUgc2FtZSBpbnRlcmZhY2UsCi0gICAgYnV0IHdoaWNoIGNhY2hlcyBpbmZvcm1hdGlvbiwgZm9yIGNhcmRzIHdob3NlIENJUyBtYXkgbm90IGJlCi0gICAgcmVhZGFibGUgYWxsIHRoZSB0aW1lLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQorLyoqCisgKiByZWFkX2Npc19jYWNoZSgpIC0gcmVhZCBDSVMgbWVtb3J5IG9yIGl0cyBhc3NvY2lhdGVkIGNhY2hlCisgKgorICogVGhpcyBpcyBhIHdyYXBwZXIgYXJvdW5kIHJlYWRfY2lzX21lbSwgd2l0aCB0aGUgc2FtZSBpbnRlcmZhY2UsCisgKiBidXQgd2hpY2ggY2FjaGVzIGluZm9ybWF0aW9uLCBmb3IgY2FyZHMgd2hvc2UgQ0lTIG1heSBub3QgYmUKKyAqIHJlYWRhYmxlIGFsbCB0aGUgdGltZS4KKyAqLwogc3RhdGljIGludCByZWFkX2Npc19jYWNoZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgaW50IGF0dHIsIHVfaW50IGFkZHIsCiAJCQlzaXplX3QgbGVuLCB2b2lkICpwdHIpCiB7CkBAIC0zNTMsNyArMzU2LDYgQEAKICAqIFRoaXMgZGVzdHJveXMgdGhlIENJUyBjYWNoZSBidXQga2VlcHMgYW55IGZha2UgQ0lTIGFsaXZlLiBNdXN0IGJlCiAgKiBjYWxsZWQgd2l0aCBvcHNfbXV0ZXggaGVsZC4KICAqLwotCiB2b2lkIGRlc3Ryb3lfY2lzX2NhY2hlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmwsICpuOwpAQCAtMzY2LDEzICszNjgsOSBAQAogCX0KIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KLSAgICBUaGlzIHZlcmlmaWVzIGlmIHRoZSBDSVMgb2YgYSBjYXJkIG1hdGNoZXMgd2hhdCBpcyBpbiB0aGUgQ0lTCi0gICAgY2FjaGUuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCisvKioKKyAqIHZlcmlmeV9jaXNfY2FjaGUoKSAtIGRvZXMgdGhlIENJUyBtYXRjaCB3aGF0IGlzIGluIHRoZSBDSVMgY2FjaGU/CisgKi8KIGludCB2ZXJpZnlfY2lzX2NhY2hlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzKQogewogCXN0cnVjdCBjaXNfY2FjaGVfZW50cnkgKmNpczsKQEAgLTQwNCwxMyArNDAyLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICAgRm9yIHJlYWxseSBiYWQgY2FyZHMsIHdlIHByb3ZpZGUgYSBmYWNpbGl0eSBmb3IgdXBsb2FkaW5nIGEKLSAgICByZXBsYWNlbWVudCBDSVMuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCisvKioKKyAqIHBjbWNpYV9yZXBsYWNlX2NpcygpIC0gdXNlIGEgcmVwbGFjZW1lbnQgQ0lTIGluc3RlYWQgb2YgdGhlIGNhcmQncyBDSVMKKyAqCisgKiBGb3IgcmVhbGx5IGJhZCBjYXJkcywgd2UgcHJvdmlkZSBhIGZhY2lsaXR5IGZvciB1cGxvYWRpbmcgYQorICogcmVwbGFjZW1lbnQgQ0lTLgorICovCiBpbnQgcGNtY2lhX3JlcGxhY2VfY2lzKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLAogCQkgICAgICAgY29uc3QgdTggKmRhdGEsIGNvbnN0IHNpemVfdCBsZW4pCiB7CkBAIC00MzMsMTcgKzQzMCwxMyBAQAogCXJldHVybiAwOwogfQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIFRoZSBoaWdoLWxldmVsIENJUyB0dXBsZSBzZXJ2aWNlcwotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIFRoZSBoaWdoLWxldmVsIENJUyB0dXBsZSBzZXJ2aWNlcyAqLwogCiB0eXBlZGVmIHN0cnVjdCB0dXBsZV9mbGFncyB7Ci0gICAgdV9pbnQJCWxpbmtfc3BhY2U6NDsKLSAgICB1X2ludAkJaGFzX2xpbms6MTsKLSAgICB1X2ludAkJbWZjX2ZuOjM7Ci0gICAgdV9pbnQJCXNwYWNlOjQ7CisJdV9pbnQJCWxpbmtfc3BhY2U6NDsKKwl1X2ludAkJaGFzX2xpbms6MTsKKwl1X2ludAkJbWZjX2ZuOjM7CisJdV9pbnQJCXNwYWNlOjQ7CiB9IHR1cGxlX2ZsYWdzOwogCiAjZGVmaW5lIExJTktfU1BBQ0UoZikJKCgodHVwbGVfZmxhZ3MgKikoJihmKSkpLT5saW5rX3NwYWNlKQpAQCAtNDUxLDk4MiArNDQ0LDk2MSBAQAogI2RlZmluZSBNRkNfRk4oZikJKCgodHVwbGVfZmxhZ3MgKikoJihmKSkpLT5tZmNfZm4pCiAjZGVmaW5lIFNQQUNFKGYpCSgoKHR1cGxlX2ZsYWdzICopKCYoZikpKS0+c3BhY2UpCiAKLWludCBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sIHR1cGxlX3QgKnR1cGxlKQoraW50IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKKwkJCXR1cGxlX3QgKnR1cGxlKQogewotICAgIGlmICghcykKLQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXMpCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgaWYgKCEocy0+c3RhdGUgJiBTT0NLRVRfUFJFU0VOVCkgfHwgKHMtPnN0YXRlICYgU09DS0VUX0NBUkRCVVMpKQotCXJldHVybiAtRU5PREVWOwotICAgIHR1cGxlLT5UdXBsZUxpbmsgPSB0dXBsZS0+RmxhZ3MgPSAwOworCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpIHx8IChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJdHVwbGUtPlR1cGxlTGluayA9IHR1cGxlLT5GbGFncyA9IDA7CiAKLSAgICAvKiBBc3N1bWUgcHJlc2VuY2Ugb2YgYSBMT05HTElOS19DIHRvIGFkZHJlc3MgMCAqLwotICAgIHR1cGxlLT5DSVNPZmZzZXQgPSB0dXBsZS0+TGlua09mZnNldCA9IDA7Ci0gICAgU1BBQ0UodHVwbGUtPkZsYWdzKSA9IEhBU19MSU5LKHR1cGxlLT5GbGFncykgPSAxOworCS8qIEFzc3VtZSBwcmVzZW5jZSBvZiBhIExPTkdMSU5LX0MgdG8gYWRkcmVzcyAwICovCisJdHVwbGUtPkNJU09mZnNldCA9IHR1cGxlLT5MaW5rT2Zmc2V0ID0gMDsKKwlTUEFDRSh0dXBsZS0+RmxhZ3MpID0gSEFTX0xJTksodHVwbGUtPkZsYWdzKSA9IDE7CiAKLSAgICBpZiAoKHMtPmZ1bmN0aW9ucyA+IDEpICYmICEodHVwbGUtPkF0dHJpYnV0ZXMgJiBUVVBMRV9SRVRVUk5fQ09NTU9OKSkgewotCWNpc2RhdGFfdCByZXEgPSB0dXBsZS0+RGVzaXJlZFR1cGxlOwotCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTE9OR0xJTktfTUZDOwotCWlmIChwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgZnVuY3Rpb24sIHR1cGxlKSA9PSAwKSB7Ci0JICAgIHR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTElOS1RBUkdFVDsKLQkgICAgaWYgKHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBmdW5jdGlvbiwgdHVwbGUpICE9IDApCi0JCXJldHVybiAtRU5PU1BDOwotCX0gZWxzZQotCSAgICB0dXBsZS0+Q0lTT2Zmc2V0ID0gdHVwbGUtPlR1cGxlTGluayA9IDA7Ci0JdHVwbGUtPkRlc2lyZWRUdXBsZSA9IHJlcTsKLSAgICB9Ci0gICAgcmV0dXJuIHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBmdW5jdGlvbiwgdHVwbGUpOworCWlmICgocy0+ZnVuY3Rpb25zID4gMSkgJiYgISh0dXBsZS0+QXR0cmlidXRlcyAmIFRVUExFX1JFVFVSTl9DT01NT04pKSB7CisJCWNpc2RhdGFfdCByZXEgPSB0dXBsZS0+RGVzaXJlZFR1cGxlOworCQl0dXBsZS0+RGVzaXJlZFR1cGxlID0gQ0lTVFBMX0xPTkdMSU5LX01GQzsKKwkJaWYgKHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBmdW5jdGlvbiwgdHVwbGUpID09IDApIHsKKwkJCXR1cGxlLT5EZXNpcmVkVHVwbGUgPSBDSVNUUExfTElOS1RBUkdFVDsKKwkJCWlmIChwY2NhcmRfZ2V0X25leHRfdHVwbGUocywgZnVuY3Rpb24sIHR1cGxlKSAhPSAwKQorCQkJCXJldHVybiAtRU5PU1BDOworCQl9IGVsc2UKKwkJCXR1cGxlLT5DSVNPZmZzZXQgPSB0dXBsZS0+VHVwbGVMaW5rID0gMDsKKwkJdHVwbGUtPkRlc2lyZWRUdXBsZSA9IHJlcTsKKwl9CisJcmV0dXJuIHBjY2FyZF9nZXRfbmV4dF90dXBsZShzLCBmdW5jdGlvbiwgdHVwbGUpOwogfQogCiBzdGF0aWMgaW50IGZvbGxvd19saW5rKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB0dXBsZV90ICp0dXBsZSkKIHsKLSAgICB1X2NoYXIgbGlua1s1XTsKLSAgICB1X2ludCBvZnM7Ci0gICAgaW50IHJldDsKKwl1X2NoYXIgbGlua1s1XTsKKwl1X2ludCBvZnM7CisJaW50IHJldDsKIAotICAgIGlmIChNRkNfRk4odHVwbGUtPkZsYWdzKSkgewotCS8qIEdldCBpbmRpcmVjdCBsaW5rIGZyb20gdGhlIE1GQyB0dXBsZSAqLwotCXJldCA9IHJlYWRfY2lzX2NhY2hlKHMsIExJTktfU1BBQ0UodHVwbGUtPkZsYWdzKSwKLQkJICAgICAgIHR1cGxlLT5MaW5rT2Zmc2V0LCA1LCBsaW5rKTsKLQlpZiAocmV0KQorCWlmIChNRkNfRk4odHVwbGUtPkZsYWdzKSkgeworCQkvKiBHZXQgaW5kaXJlY3QgbGluayBmcm9tIHRoZSBNRkMgdHVwbGUgKi8KKwkJcmV0ID0gcmVhZF9jaXNfY2FjaGUocywgTElOS19TUEFDRSh0dXBsZS0+RmxhZ3MpLAorCQkJCXR1cGxlLT5MaW5rT2Zmc2V0LCA1LCBsaW5rKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtMTsKKwkJb2ZzID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGxpbmsgKyAxKTsKKwkJU1BBQ0UodHVwbGUtPkZsYWdzKSA9IChsaW5rWzBdID09IENJU1RQTF9NRkNfQVRUUik7CisJCS8qIE1vdmUgdG8gdGhlIG5leHQgaW5kaXJlY3QgbGluayAqLworCQl0dXBsZS0+TGlua09mZnNldCArPSA1OworCQlNRkNfRk4odHVwbGUtPkZsYWdzKS0tOworCX0gZWxzZSBpZiAoSEFTX0xJTksodHVwbGUtPkZsYWdzKSkgeworCQlvZnMgPSB0dXBsZS0+TGlua09mZnNldDsKKwkJU1BBQ0UodHVwbGUtPkZsYWdzKSA9IExJTktfU1BBQ0UodHVwbGUtPkZsYWdzKTsKKwkJSEFTX0xJTksodHVwbGUtPkZsYWdzKSA9IDA7CisJfSBlbHNlCiAJCXJldHVybiAtMTsKLQlvZnMgPSBnZXRfdW5hbGlnbmVkX2xlMzIobGluayArIDEpOwotCVNQQUNFKHR1cGxlLT5GbGFncykgPSAobGlua1swXSA9PSBDSVNUUExfTUZDX0FUVFIpOwotCS8qIE1vdmUgdG8gdGhlIG5leHQgaW5kaXJlY3QgbGluayAqLwotCXR1cGxlLT5MaW5rT2Zmc2V0ICs9IDU7Ci0JTUZDX0ZOKHR1cGxlLT5GbGFncyktLTsKLSAgICB9IGVsc2UgaWYgKEhBU19MSU5LKHR1cGxlLT5GbGFncykpIHsKLQlvZnMgPSB0dXBsZS0+TGlua09mZnNldDsKLQlTUEFDRSh0dXBsZS0+RmxhZ3MpID0gTElOS19TUEFDRSh0dXBsZS0+RmxhZ3MpOwotCUhBU19MSU5LKHR1cGxlLT5GbGFncykgPSAwOwotICAgIH0gZWxzZSB7Ci0JcmV0dXJuIC0xOwotICAgIH0KLSAgICBpZiAoU1BBQ0UodHVwbGUtPkZsYWdzKSkgewotCS8qIFRoaXMgaXMgdWdseSwgYnV0IGEgY29tbW9uIENJUyBlcnJvciBpcyB0byBjb2RlIHRoZSBsb25nCi0JICAgbGluayBvZmZzZXQgaW5jb3JyZWN0bHksIHNvIHdlIGNoZWNrIHRoZSByaWdodCBzcG90Li4uICovCisKKwlpZiAoU1BBQ0UodHVwbGUtPkZsYWdzKSkgeworCQkvKiBUaGlzIGlzIHVnbHksIGJ1dCBhIGNvbW1vbiBDSVMgZXJyb3IgaXMgdG8gY29kZSB0aGUgbG9uZworCQkgICBsaW5rIG9mZnNldCBpbmNvcnJlY3RseSwgc28gd2UgY2hlY2sgdGhlIHJpZ2h0IHNwb3QuLi4gKi8KKwkJcmV0ID0gcmVhZF9jaXNfY2FjaGUocywgU1BBQ0UodHVwbGUtPkZsYWdzKSwgb2ZzLCA1LCBsaW5rKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiAtMTsKKwkJaWYgKChsaW5rWzBdID09IENJU1RQTF9MSU5LVEFSR0VUKSAmJiAobGlua1sxXSA+PSAzKSAmJgorCQkJKHN0cm5jbXAobGluaysyLCAiQ0lTIiwgMykgPT0gMCkpCisJCQlyZXR1cm4gb2ZzOworCQlyZW1vdmVfY2lzX2NhY2hlKHMsIFNQQUNFKHR1cGxlLT5GbGFncyksIG9mcywgNSk7CisJCS8qIFRoZW4sIHdlIHRyeSB0aGUgd3Jvbmcgc3BvdC4uLiAqLworCQlvZnMgPSBvZnMgPj4gMTsKKwl9CiAJcmV0ID0gcmVhZF9jaXNfY2FjaGUocywgU1BBQ0UodHVwbGUtPkZsYWdzKSwgb2ZzLCA1LCBsaW5rKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gLTE7CiAJaWYgKChsaW5rWzBdID09IENJU1RQTF9MSU5LVEFSR0VUKSAmJiAobGlua1sxXSA+PSAzKSAmJgotCSAgICAoc3RybmNtcChsaW5rKzIsICJDSVMiLCAzKSA9PSAwKSkKLQkgICAgcmV0dXJuIG9mczsKKwkJKHN0cm5jbXAobGluaysyLCAiQ0lTIiwgMykgPT0gMCkpCisJCXJldHVybiBvZnM7CiAJcmVtb3ZlX2Npc19jYWNoZShzLCBTUEFDRSh0dXBsZS0+RmxhZ3MpLCBvZnMsIDUpOwotCS8qIFRoZW4sIHdlIHRyeSB0aGUgd3Jvbmcgc3BvdC4uLiAqLwotCW9mcyA9IG9mcyA+PiAxOwotICAgIH0KLSAgICByZXQgPSByZWFkX2Npc19jYWNoZShzLCBTUEFDRSh0dXBsZS0+RmxhZ3MpLCBvZnMsIDUsIGxpbmspOwotICAgIGlmIChyZXQpCi0JICAgIHJldHVybiAtMTsKLSAgICBpZiAoKGxpbmtbMF0gPT0gQ0lTVFBMX0xJTktUQVJHRVQpICYmIChsaW5rWzFdID49IDMpICYmCi0JKHN0cm5jbXAobGluaysyLCAiQ0lTIiwgMykgPT0gMCkpCi0JcmV0dXJuIG9mczsKLSAgICByZW1vdmVfY2lzX2NhY2hlKHMsIFNQQUNFKHR1cGxlLT5GbGFncyksIG9mcywgNSk7Ci0gICAgcmV0dXJuIC0xOworCXJldHVybiAtMTsKIH0KIAotaW50IHBjY2FyZF9nZXRfbmV4dF90dXBsZShzdHJ1Y3QgcGNtY2lhX3NvY2tldCAqcywgdW5zaWduZWQgaW50IGZ1bmN0aW9uLCB0dXBsZV90ICp0dXBsZSkKK2ludCBwY2NhcmRfZ2V0X25leHRfdHVwbGUoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHVuc2lnbmVkIGludCBmdW5jdGlvbiwKKwkJCXR1cGxlX3QgKnR1cGxlKQogewotICAgIHVfY2hhciBsaW5rWzJdLCB0bXA7Ci0gICAgaW50IG9mcywgaSwgYXR0cjsKLSAgICBpbnQgcmV0OworCXVfY2hhciBsaW5rWzJdLCB0bXA7CisJaW50IG9mcywgaSwgYXR0cjsKKwlpbnQgcmV0OwogCi0gICAgaWYgKCFzKQotCXJldHVybiAtRUlOVkFMOwotICAgIGlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpIHx8IChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSkKLQlyZXR1cm4gLUVOT0RFVjsKKwlpZiAoIXMpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghKHMtPnN0YXRlICYgU09DS0VUX1BSRVNFTlQpIHx8IChzLT5zdGF0ZSAmIFNPQ0tFVF9DQVJEQlVTKSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLSAgICBsaW5rWzFdID0gdHVwbGUtPlR1cGxlTGluazsKLSAgICBvZnMgPSB0dXBsZS0+Q0lTT2Zmc2V0ICsgdHVwbGUtPlR1cGxlTGluazsKLSAgICBhdHRyID0gU1BBQ0UodHVwbGUtPkZsYWdzKTsKKwlsaW5rWzFdID0gdHVwbGUtPlR1cGxlTGluazsKKwlvZnMgPSB0dXBsZS0+Q0lTT2Zmc2V0ICsgdHVwbGUtPlR1cGxlTGluazsKKwlhdHRyID0gU1BBQ0UodHVwbGUtPkZsYWdzKTsKIAotICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfVFVQTEVTOyBpKyspIHsKLQlpZiAobGlua1sxXSA9PSAweGZmKSB7Ci0JICAgIGxpbmtbMF0gPSBDSVNUUExfRU5EOwotCX0gZWxzZSB7Ci0JICAgIHJldCA9IHJlYWRfY2lzX2NhY2hlKHMsIGF0dHIsIG9mcywgMiwgbGluayk7Ci0JICAgIGlmIChyZXQpCi0JCSAgICByZXR1cm4gLTE7Ci0JICAgIGlmIChsaW5rWzBdID09IENJU1RQTF9OVUxMKSB7Ci0JCW9mcysrOyBjb250aW51ZTsKLQkgICAgfQotCX0KLQotCS8qIEVuZCBvZiBjaGFpbj8gIEZvbGxvdyBsb25nIGxpbmsgaWYgcG9zc2libGUgKi8KLQlpZiAobGlua1swXSA9PSBDSVNUUExfRU5EKSB7Ci0JICAgIG9mcyA9IGZvbGxvd19saW5rKHMsIHR1cGxlKTsKLQkgICAgaWYgKG9mcyA8IDApCi0JCXJldHVybiAtRU5PU1BDOwotCSAgICBhdHRyID0gU1BBQ0UodHVwbGUtPkZsYWdzKTsKLQkgICAgcmV0ID0gcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzLCAyLCBsaW5rKTsKLQkgICAgaWYgKHJldCkKLQkJICAgIHJldHVybiAtMTsKLQl9Ci0KLQkvKiBJcyB0aGlzIGEgbGluayB0dXBsZT8gIE1ha2UgYSBub3RlIG9mIGl0ICovCi0JaWYgKChsaW5rWzBdID09IENJU1RQTF9MT05HTElOS19BKSB8fAotCSAgICAobGlua1swXSA9PSBDSVNUUExfTE9OR0xJTktfQykgfHwKLQkgICAgKGxpbmtbMF0gPT0gQ0lTVFBMX0xPTkdMSU5LX01GQykgfHwKLQkgICAgKGxpbmtbMF0gPT0gQ0lTVFBMX0xJTktUQVJHRVQpIHx8Ci0JICAgIChsaW5rWzBdID09IENJU1RQTF9JTkRJUkVDVCkgfHwKLQkgICAgKGxpbmtbMF0gPT0gQ0lTVFBMX05PX0xJTkspKSB7Ci0JICAgIHN3aXRjaCAobGlua1swXSkgewotCSAgICBjYXNlIENJU1RQTF9MT05HTElOS19BOgotCQlIQVNfTElOSyh0dXBsZS0+RmxhZ3MpID0gMTsKLQkJTElOS19TUEFDRSh0dXBsZS0+RmxhZ3MpID0gYXR0ciB8IElTX0FUVFI7Ci0JCXJldCA9IHJlYWRfY2lzX2NhY2hlKHMsIGF0dHIsIG9mcysyLCA0LCAmdHVwbGUtPkxpbmtPZmZzZXQpOwotCQlpZiAocmV0KQotCQkJcmV0dXJuIC0xOwotCQlicmVhazsKLQkgICAgY2FzZSBDSVNUUExfTE9OR0xJTktfQzoKLQkJSEFTX0xJTksodHVwbGUtPkZsYWdzKSA9IDE7Ci0JCUxJTktfU1BBQ0UodHVwbGUtPkZsYWdzKSA9IGF0dHIgJiB+SVNfQVRUUjsKLQkJcmV0ID0gcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzKzIsIDQsICZ0dXBsZS0+TGlua09mZnNldCk7Ci0JCWlmIChyZXQpCi0JCQlyZXR1cm4gLTE7Ci0JCWJyZWFrOwotCSAgICBjYXNlIENJU1RQTF9JTkRJUkVDVDoKLQkJSEFTX0xJTksodHVwbGUtPkZsYWdzKSA9IDE7Ci0JCUxJTktfU1BBQ0UodHVwbGUtPkZsYWdzKSA9IElTX0FUVFIgfCBJU19JTkRJUkVDVDsKLQkJdHVwbGUtPkxpbmtPZmZzZXQgPSAwOwotCQlicmVhazsKLQkgICAgY2FzZSBDSVNUUExfTE9OR0xJTktfTUZDOgotCQl0dXBsZS0+TGlua09mZnNldCA9IG9mcyArIDM7Ci0JCUxJTktfU1BBQ0UodHVwbGUtPkZsYWdzKSA9IGF0dHI7Ci0JCWlmIChmdW5jdGlvbiA9PSBCSU5EX0ZOX0FMTCkgewotCQkgICAgLyogRm9sbG93IGFsbCB0aGUgTUZDIGxpbmtzICovCi0JCSAgICByZXQgPSByZWFkX2Npc19jYWNoZShzLCBhdHRyLCBvZnMrMiwgMSwgJnRtcCk7Ci0JCSAgICBpZiAocmV0KQotCQkJICAgIHJldHVybiAtMTsKLQkJICAgIE1GQ19GTih0dXBsZS0+RmxhZ3MpID0gdG1wOwotCQl9IGVsc2UgewotCQkgICAgLyogRm9sbG93IGV4YWN0bHkgb25lIG9mIHRoZSBsaW5rcyAqLwotCQkgICAgTUZDX0ZOKHR1cGxlLT5GbGFncykgPSAxOwotCQkgICAgdHVwbGUtPkxpbmtPZmZzZXQgKz0gZnVuY3Rpb24gKiA1OworCWZvciAoaSA9IDA7IGkgPCBNQVhfVFVQTEVTOyBpKyspIHsKKwkJaWYgKGxpbmtbMV0gPT0gMHhmZikKKwkJCWxpbmtbMF0gPSBDSVNUUExfRU5EOworCQllbHNlIHsKKwkJCXJldCA9IHJlYWRfY2lzX2NhY2hlKHMsIGF0dHIsIG9mcywgMiwgbGluayk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiAtMTsKKwkJCWlmIChsaW5rWzBdID09IENJU1RQTF9OVUxMKSB7CisJCQkJb2ZzKys7CisJCQkJY29udGludWU7CisJCQl9CiAJCX0KLQkJYnJlYWs7Ci0JICAgIGNhc2UgQ0lTVFBMX05PX0xJTks6Ci0JCUhBU19MSU5LKHR1cGxlLT5GbGFncykgPSAwOwotCQlicmVhazsKLQkgICAgfQotCSAgICBpZiAoKHR1cGxlLT5BdHRyaWJ1dGVzICYgVFVQTEVfUkVUVVJOX0xJTkspICYmCi0JCSh0dXBsZS0+RGVzaXJlZFR1cGxlID09IFJFVFVSTl9GSVJTVF9UVVBMRSkpCi0JCWJyZWFrOwotCX0gZWxzZQotCSAgICBpZiAodHVwbGUtPkRlc2lyZWRUdXBsZSA9PSBSRVRVUk5fRklSU1RfVFVQTEUpCi0JCWJyZWFrOwogCi0JaWYgKGxpbmtbMF0gPT0gdHVwbGUtPkRlc2lyZWRUdXBsZSkKLQkgICAgYnJlYWs7Ci0Jb2ZzICs9IGxpbmtbMV0gKyAyOwotICAgIH0KLSAgICBpZiAoaSA9PSBNQVhfVFVQTEVTKSB7Ci0JZGV2X2RiZygmcy0+ZGV2LCAiY3M6IG92ZXJydW4gaW4gcGNtY2lhX2dldF9uZXh0X3R1cGxlXG4iKTsKLQlyZXR1cm4gLUVOT1NQQzsKLSAgICB9CisJCS8qIEVuZCBvZiBjaGFpbj8gIEZvbGxvdyBsb25nIGxpbmsgaWYgcG9zc2libGUgKi8KKwkJaWYgKGxpbmtbMF0gPT0gQ0lTVFBMX0VORCkgeworCQkJb2ZzID0gZm9sbG93X2xpbmsocywgdHVwbGUpOworCQkJaWYgKG9mcyA8IDApCisJCQkJcmV0dXJuIC1FTk9TUEM7CisJCQlhdHRyID0gU1BBQ0UodHVwbGUtPkZsYWdzKTsKKwkJCXJldCA9IHJlYWRfY2lzX2NhY2hlKHMsIGF0dHIsIG9mcywgMiwgbGluayk7CisJCQlpZiAocmV0KQorCQkJCXJldHVybiAtMTsKKwkJfQogCi0gICAgdHVwbGUtPlR1cGxlQ29kZSA9IGxpbmtbMF07Ci0gICAgdHVwbGUtPlR1cGxlTGluayA9IGxpbmtbMV07Ci0gICAgdHVwbGUtPkNJU09mZnNldCA9IG9mcyArIDI7Ci0gICAgcmV0dXJuIDA7CisJCS8qIElzIHRoaXMgYSBsaW5rIHR1cGxlPyAgTWFrZSBhIG5vdGUgb2YgaXQgKi8KKwkJaWYgKChsaW5rWzBdID09IENJU1RQTF9MT05HTElOS19BKSB8fAorCQkJKGxpbmtbMF0gPT0gQ0lTVFBMX0xPTkdMSU5LX0MpIHx8CisJCQkobGlua1swXSA9PSBDSVNUUExfTE9OR0xJTktfTUZDKSB8fAorCQkJKGxpbmtbMF0gPT0gQ0lTVFBMX0xJTktUQVJHRVQpIHx8CisJCQkobGlua1swXSA9PSBDSVNUUExfSU5ESVJFQ1QpIHx8CisJCQkobGlua1swXSA9PSBDSVNUUExfTk9fTElOSykpIHsKKwkJCXN3aXRjaCAobGlua1swXSkgeworCQkJY2FzZSBDSVNUUExfTE9OR0xJTktfQToKKwkJCQlIQVNfTElOSyh0dXBsZS0+RmxhZ3MpID0gMTsKKwkJCQlMSU5LX1NQQUNFKHR1cGxlLT5GbGFncykgPSBhdHRyIHwgSVNfQVRUUjsKKwkJCQlyZXQgPSByZWFkX2Npc19jYWNoZShzLCBhdHRyLCBvZnMrMiwgNCwKKwkJCQkJCSZ0dXBsZS0+TGlua09mZnNldCk7CisJCQkJaWYgKHJldCkKKwkJCQkJcmV0dXJuIC0xOworCQkJCWJyZWFrOworCQkJY2FzZSBDSVNUUExfTE9OR0xJTktfQzoKKwkJCQlIQVNfTElOSyh0dXBsZS0+RmxhZ3MpID0gMTsKKwkJCQlMSU5LX1NQQUNFKHR1cGxlLT5GbGFncykgPSBhdHRyICYgfklTX0FUVFI7CisJCQkJcmV0ID0gcmVhZF9jaXNfY2FjaGUocywgYXR0ciwgb2ZzKzIsIDQsCisJCQkJCQkmdHVwbGUtPkxpbmtPZmZzZXQpOworCQkJCWlmIChyZXQpCisJCQkJCXJldHVybiAtMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ0lTVFBMX0lORElSRUNUOgorCQkJCUhBU19MSU5LKHR1cGxlLT5GbGFncykgPSAxOworCQkJCUxJTktfU1BBQ0UodHVwbGUtPkZsYWdzKSA9IElTX0FUVFIgfAorCQkJCQlJU19JTkRJUkVDVDsKKwkJCQl0dXBsZS0+TGlua09mZnNldCA9IDA7CisJCQkJYnJlYWs7CisJCQljYXNlIENJU1RQTF9MT05HTElOS19NRkM6CisJCQkJdHVwbGUtPkxpbmtPZmZzZXQgPSBvZnMgKyAzOworCQkJCUxJTktfU1BBQ0UodHVwbGUtPkZsYWdzKSA9IGF0dHI7CisJCQkJaWYgKGZ1bmN0aW9uID09IEJJTkRfRk5fQUxMKSB7CisJCQkJCS8qIEZvbGxvdyBhbGwgdGhlIE1GQyBsaW5rcyAqLworCQkJCQlyZXQgPSByZWFkX2Npc19jYWNoZShzLCBhdHRyLCBvZnMrMiwKKwkJCQkJCQkxLCAmdG1wKTsKKwkJCQkJaWYgKHJldCkKKwkJCQkJCXJldHVybiAtMTsKKwkJCQkJTUZDX0ZOKHR1cGxlLT5GbGFncykgPSB0bXA7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogRm9sbG93IGV4YWN0bHkgb25lIG9mIHRoZSBsaW5rcyAqLworCQkJCQlNRkNfRk4odHVwbGUtPkZsYWdzKSA9IDE7CisJCQkJCXR1cGxlLT5MaW5rT2Zmc2V0ICs9IGZ1bmN0aW9uICogNTsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIENJU1RQTF9OT19MSU5LOgorCQkJCUhBU19MSU5LKHR1cGxlLT5GbGFncykgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKCh0dXBsZS0+QXR0cmlidXRlcyAmIFRVUExFX1JFVFVSTl9MSU5LKSAmJgorCQkJCSh0dXBsZS0+RGVzaXJlZFR1cGxlID09IFJFVFVSTl9GSVJTVF9UVVBMRSkpCisJCQkJYnJlYWs7CisJCX0gZWxzZQorCQkJaWYgKHR1cGxlLT5EZXNpcmVkVHVwbGUgPT0gUkVUVVJOX0ZJUlNUX1RVUExFKQorCQkJCWJyZWFrOworCisJCWlmIChsaW5rWzBdID09IHR1cGxlLT5EZXNpcmVkVHVwbGUpCisJCQlicmVhazsKKwkJb2ZzICs9IGxpbmtbMV0gKyAyOworCX0KKwlpZiAoaSA9PSBNQVhfVFVQTEVTKSB7CisJCWRldl9kYmcoJnMtPmRldiwgImNzOiBvdmVycnVuIGluIHBjbWNpYV9nZXRfbmV4dF90dXBsZVxuIik7CisJCXJldHVybiAtRU5PU1BDOworCX0KKworCXR1cGxlLT5UdXBsZUNvZGUgPSBsaW5rWzBdOworCXR1cGxlLT5UdXBsZUxpbmsgPSBsaW5rWzFdOworCXR1cGxlLT5DSVNPZmZzZXQgPSBvZnMgKyAyOworCXJldHVybiAwOwogfQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotI2RlZmluZSBfTUlOKGEsIGIpCQkoKChhKSA8IChiKSkgPyAoYSkgOiAoYikpCi0KIGludCBwY2NhcmRfZ2V0X3R1cGxlX2RhdGEoc3RydWN0IHBjbWNpYV9zb2NrZXQgKnMsIHR1cGxlX3QgKnR1cGxlKQogewotICAgIHVfaW50IGxlbjsKLSAgICBpbnQgcmV0OworCXVfaW50IGxlbjsKKwlpbnQgcmV0OwogCi0gICAgaWYgKCFzKQotCXJldHVybiAtRUlOVkFMOworCWlmICghcykKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBpZiAodHVwbGUtPlR1cGxlTGluayA8IHR1cGxlLT5UdXBsZU9mZnNldCkKLQlyZXR1cm4gLUVOT1NQQzsKLSAgICBsZW4gPSB0dXBsZS0+VHVwbGVMaW5rIC0gdHVwbGUtPlR1cGxlT2Zmc2V0OwotICAgIHR1cGxlLT5UdXBsZURhdGFMZW4gPSB0dXBsZS0+VHVwbGVMaW5rOwotICAgIGlmIChsZW4gPT0gMCkKKwlpZiAodHVwbGUtPlR1cGxlTGluayA8IHR1cGxlLT5UdXBsZU9mZnNldCkKKwkJcmV0dXJuIC1FTk9TUEM7CisJbGVuID0gdHVwbGUtPlR1cGxlTGluayAtIHR1cGxlLT5UdXBsZU9mZnNldDsKKwl0dXBsZS0+VHVwbGVEYXRhTGVuID0gdHVwbGUtPlR1cGxlTGluazsKKwlpZiAobGVuID09IDApCisJCXJldHVybiAwOworCXJldCA9IHJlYWRfY2lzX2NhY2hlKHMsIFNQQUNFKHR1cGxlLT5GbGFncyksCisJCQl0dXBsZS0+Q0lTT2Zmc2V0ICsgdHVwbGUtPlR1cGxlT2Zmc2V0LAorCQkJbWluKGxlbiwgKHVfaW50KSB0dXBsZS0+VHVwbGVEYXRhTWF4KSwKKwkJCXR1cGxlLT5UdXBsZURhdGEpOworCWlmIChyZXQpCisJCXJldHVybiAtMTsKIAlyZXR1cm4gMDsKLSAgICByZXQgPSByZWFkX2Npc19jYWNoZShzLCBTUEFDRSh0dXBsZS0+RmxhZ3MpLAotCQkgICB0dXBsZS0+Q0lTT2Zmc2V0ICsgdHVwbGUtPlR1cGxlT2Zmc2V0LAotCQkgICBfTUlOKGxlbiwgdHVwbGUtPlR1cGxlRGF0YU1heCksIHR1cGxlLT5UdXBsZURhdGEpOwotICAgIGlmIChyZXQpCi0JICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4gMDsKIH0KIAogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgIFBhcnNpbmcgcm91dGluZXMgZm9yIGluZGl2aWR1YWwgdHVwbGVzCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogUGFyc2luZyByb3V0aW5lcyBmb3IgaW5kaXZpZHVhbCB0dXBsZXMgKi8KIAogc3RhdGljIGludCBwYXJzZV9kZXZpY2UodHVwbGVfdCAqdHVwbGUsIGNpc3RwbF9kZXZpY2VfdCAqZGV2aWNlKQogewotICAgIGludCBpOwotICAgIHVfY2hhciBzY2FsZTsKLSAgICB1X2NoYXIgKnAsICpxOworCWludCBpOworCXVfY2hhciBzY2FsZTsKKwl1X2NoYXIgKnAsICpxOwogCi0gICAgcCA9ICh1X2NoYXIgKil0dXBsZS0+VHVwbGVEYXRhOwotICAgIHEgPSBwICsgdHVwbGUtPlR1cGxlRGF0YUxlbjsKKwlwID0gKHVfY2hhciAqKXR1cGxlLT5UdXBsZURhdGE7CisJcSA9IHAgKyB0dXBsZS0+VHVwbGVEYXRhTGVuOwogCi0gICAgZGV2aWNlLT5uZGV2ID0gMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgQ0lTVFBMX01BWF9ERVZJQ0VTOyBpKyspIHsKKwlkZXZpY2UtPm5kZXYgPSAwOworCWZvciAoaSA9IDA7IGkgPCBDSVNUUExfTUFYX0RFVklDRVM7IGkrKykgewogCi0JaWYgKCpwID09IDB4ZmYpCi0JCWJyZWFrOwotCWRldmljZS0+ZGV2W2ldLnR5cGUgPSAoKnAgPj4gNCk7Ci0JZGV2aWNlLT5kZXZbaV0ud3AgPSAoKnAgJiAweDA4KSA/IDEgOiAwOwotCXN3aXRjaCAoKnAgJiAweDA3KSB7Ci0JY2FzZSAwOgotCQlkZXZpY2UtPmRldltpXS5zcGVlZCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAyNTA7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAyMDA7Ci0JCWJyZWFrOwotCWNhc2UgMzoKLQkJZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAxNTA7Ci0JCWJyZWFrOwotCWNhc2UgNDoKLQkJZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAxMDA7Ci0JCWJyZWFrOwotCWNhc2UgNzoKLQkJaWYgKCsrcCA9PSBxKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWRldmljZS0+ZGV2W2ldLnNwZWVkID0gU1BFRURfQ1ZUKCpwKTsKLQkJd2hpbGUgKCpwICYgMHg4MCkKKwkJaWYgKCpwID09IDB4ZmYpCisJCQlicmVhazsKKwkJZGV2aWNlLT5kZXZbaV0udHlwZSA9ICgqcCA+PiA0KTsKKwkJZGV2aWNlLT5kZXZbaV0ud3AgPSAoKnAgJiAweDA4KSA/IDEgOiAwOworCQlzd2l0Y2ggKCpwICYgMHgwNykgeworCQljYXNlIDA6CisJCQlkZXZpY2UtPmRldltpXS5zcGVlZCA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAyNTA7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAyMDA7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAxNTA7CisJCQlicmVhazsKKwkJY2FzZSA0OgorCQkJZGV2aWNlLT5kZXZbaV0uc3BlZWQgPSAxMDA7CisJCQlicmVhazsKKwkJY2FzZSA3OgogCQkJaWYgKCsrcCA9PSBxKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWRldmljZS0+ZGV2W2ldLnNwZWVkID0gU1BFRURfQ1ZUKCpwKTsKKwkJCXdoaWxlICgqcCAmIDB4ODApCisJCQkJaWYgKCsrcCA9PSBxKQorCQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlpZiAoKytwID09IHEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCpwID09IDB4ZmYpCisJCQlicmVhazsKKwkJc2NhbGUgPSAqcCAmIDc7CisJCWlmIChzY2FsZSA9PSA3KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWRldmljZS0+ZGV2W2ldLnNpemUgPSAoKCpwID4+IDMpICsgMSkgKiAoNTEyIDw8IChzY2FsZSoyKSk7CisJCWRldmljZS0+bmRldisrOworCQlpZiAoKytwID09IHEpCisJCQlicmVhazsKIAl9CiAKLQlpZiAoKytwID09IHEpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICgqcCA9PSAweGZmKQotCQlicmVhazsKLQlzY2FsZSA9ICpwICYgNzsKLQlpZiAoc2NhbGUgPT0gNykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZGV2aWNlLT5kZXZbaV0uc2l6ZSA9ICgoKnAgPj4gMykgKyAxKSAqICg1MTIgPDwgKHNjYWxlKjIpKTsKLQlkZXZpY2UtPm5kZXYrKzsKLQlpZiAoKytwID09IHEpCi0JCWJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiAwOworCXJldHVybiAwOwogfQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIGludCBwYXJzZV9jaGVja3N1bSh0dXBsZV90ICp0dXBsZSwgY2lzdHBsX2NoZWNrc3VtX3QgKmNzdW0pCiB7Ci0gICAgdV9jaGFyICpwOwotICAgIGlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDwgNSkKLQlyZXR1cm4gLUVJTlZBTDsKLSAgICBwID0gKHVfY2hhciAqKSB0dXBsZS0+VHVwbGVEYXRhOwotICAgIGNzdW0tPmFkZHIgPSB0dXBsZS0+Q0lTT2Zmc2V0ICsgZ2V0X3VuYWxpZ25lZF9sZTE2KHApIC0gMjsKLSAgICBjc3VtLT5sZW4gPSBnZXRfdW5hbGlnbmVkX2xlMTYocCArIDIpOwotICAgIGNzdW0tPnN1bSA9ICoocCArIDQpOwotICAgIHJldHVybiAwOworCXVfY2hhciAqcDsKKwlpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDUpCisJCXJldHVybiAtRUlOVkFMOworCXAgPSAodV9jaGFyICopIHR1cGxlLT5UdXBsZURhdGE7CisJY3N1bS0+YWRkciA9IHR1cGxlLT5DSVNPZmZzZXQgKyBnZXRfdW5hbGlnbmVkX2xlMTYocCkgLSAyOworCWNzdW0tPmxlbiA9IGdldF91bmFsaWduZWRfbGUxNihwICsgMik7CisJY3N1bS0+c3VtID0gKihwICsgNCk7CisJcmV0dXJuIDA7CiB9CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgaW50IHBhcnNlX2xvbmdsaW5rKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfbG9uZ2xpbmtfdCAqbGluaykKIHsKLSAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDQpCi0JcmV0dXJuIC1FSU5WQUw7Ci0gICAgbGluay0+YWRkciA9IGdldF91bmFsaWduZWRfbGUzMih0dXBsZS0+VHVwbGVEYXRhKTsKLSAgICByZXR1cm4gMDsKKwlpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDQpCisJCXJldHVybiAtRUlOVkFMOworCWxpbmstPmFkZHIgPSBnZXRfdW5hbGlnbmVkX2xlMzIodHVwbGUtPlR1cGxlRGF0YSk7CisJcmV0dXJuIDA7CiB9CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCi1zdGF0aWMgaW50IHBhcnNlX2xvbmdsaW5rX21mYyh0dXBsZV90ICp0dXBsZSwKLQkJCSAgICAgIGNpc3RwbF9sb25nbGlua19tZmNfdCAqbGluaykKK3N0YXRpYyBpbnQgcGFyc2VfbG9uZ2xpbmtfbWZjKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfbG9uZ2xpbmtfbWZjX3QgKmxpbmspCiB7Ci0gICAgdV9jaGFyICpwOwotICAgIGludCBpOworCXVfY2hhciAqcDsKKwlpbnQgaTsKIAotICAgIHAgPSAodV9jaGFyICopdHVwbGUtPlR1cGxlRGF0YTsKKwlwID0gKHVfY2hhciAqKXR1cGxlLT5UdXBsZURhdGE7CiAKLSAgICBsaW5rLT5uZm4gPSAqcDsgcCsrOwotICAgIGlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDw9IGxpbmstPm5mbio1KQotCXJldHVybiAtRUlOVkFMOwotICAgIGZvciAoaSA9IDA7IGkgPCBsaW5rLT5uZm47IGkrKykgewotCWxpbmstPmZuW2ldLnNwYWNlID0gKnA7IHArKzsKLQlsaW5rLT5mbltpXS5hZGRyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHApOwotCXAgKz0gNDsKLSAgICB9Ci0gICAgcmV0dXJuIDA7CisJbGluay0+bmZuID0gKnA7IHArKzsKKwlpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8PSBsaW5rLT5uZm4qNSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZm9yIChpID0gMDsgaSA8IGxpbmstPm5mbjsgaSsrKSB7CisJCWxpbmstPmZuW2ldLnNwYWNlID0gKnA7IHArKzsKKwkJbGluay0+Zm5baV0uYWRkciA9IGdldF91bmFsaWduZWRfbGUzMihwKTsKKwkJcCArPSA0OworCX0KKwlyZXR1cm4gMDsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgcGFyc2Vfc3RyaW5ncyh1X2NoYXIgKnAsIHVfY2hhciAqcSwgaW50IG1heCwKIAkJCSBjaGFyICpzLCB1X2NoYXIgKm9mcywgdV9jaGFyICpmb3VuZCkKIHsKLSAgICBpbnQgaSwgaiwgbnM7CisJaW50IGksIGosIG5zOwogCi0gICAgaWYgKHAgPT0gcSkKLQkgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgbnMgPSAwOyBqID0gMDsKLSAgICBmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHsKLQlpZiAoKnAgPT0gMHhmZikKLQkJYnJlYWs7Ci0Jb2ZzW2ldID0gajsKLQlucysrOwotCWZvciAoOzspIHsKLQkgICAgc1tqKytdID0gKCpwID09IDB4ZmYpID8gJ1wwJyA6ICpwOwotCSAgICBpZiAoKCpwID09ICdcMCcpIHx8ICgqcCA9PSAweGZmKSkKLQkJICAgIGJyZWFrOwotCSAgICBpZiAoKytwID09IHEpCi0JCSAgICByZXR1cm4gLUVJTlZBTDsKKwlpZiAocCA9PSBxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlucyA9IDA7IGogPSAwOworCWZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykgeworCQlpZiAoKnAgPT0gMHhmZikKKwkJCWJyZWFrOworCQlvZnNbaV0gPSBqOworCQlucysrOworCQlmb3IgKDs7KSB7CisJCQlzW2orK10gPSAoKnAgPT0gMHhmZikgPyAnXDAnIDogKnA7CisJCQlpZiAoKCpwID09ICdcMCcpIHx8ICgqcCA9PSAweGZmKSkKKwkJCQlicmVhazsKKwkJCWlmICgrK3AgPT0gcSkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAoKCpwID09IDB4ZmYpIHx8ICgrK3AgPT0gcSkpCisJCQlicmVhazsKIAl9Ci0JaWYgKCgqcCA9PSAweGZmKSB8fCAoKytwID09IHEpKQotCQlicmVhazsKLSAgICB9Ci0gICAgaWYgKGZvdW5kKSB7Ci0JKmZvdW5kID0gbnM7Ci0JcmV0dXJuIDA7Ci0gICAgfSBlbHNlIHsKKwlpZiAoZm91bmQpIHsKKwkJKmZvdW5kID0gbnM7CisJCXJldHVybiAwOworCX0KKwogCXJldHVybiAobnMgPT0gbWF4KSA/IDAgOiAtRUlOVkFMOwotICAgIH0KIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgcGFyc2VfdmVyc18xKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfdmVyc18xX3QgKnZlcnNfMSkKIHsKLSAgICB1X2NoYXIgKnAsICpxOworCXVfY2hhciAqcCwgKnE7CiAKLSAgICBwID0gKHVfY2hhciAqKXR1cGxlLT5UdXBsZURhdGE7Ci0gICAgcSA9IHAgKyB0dXBsZS0+VHVwbGVEYXRhTGVuOworCXAgPSAodV9jaGFyICopdHVwbGUtPlR1cGxlRGF0YTsKKwlxID0gcCArIHR1cGxlLT5UdXBsZURhdGFMZW47CiAKLSAgICB2ZXJzXzEtPm1ham9yID0gKnA7IHArKzsKLSAgICB2ZXJzXzEtPm1pbm9yID0gKnA7IHArKzsKLSAgICBpZiAocCA+PSBxKQotCSAgICByZXR1cm4gLUVJTlZBTDsKKwl2ZXJzXzEtPm1ham9yID0gKnA7IHArKzsKKwl2ZXJzXzEtPm1pbm9yID0gKnA7IHArKzsKKwlpZiAocCA+PSBxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotICAgIHJldHVybiBwYXJzZV9zdHJpbmdzKHAsIHEsIENJU1RQTF9WRVJTXzFfTUFYX1BST0RfU1RSSU5HUywKLQkJCSB2ZXJzXzEtPnN0ciwgdmVyc18xLT5vZnMsICZ2ZXJzXzEtPm5zKTsKKwlyZXR1cm4gcGFyc2Vfc3RyaW5ncyhwLCBxLCBDSVNUUExfVkVSU18xX01BWF9QUk9EX1NUUklOR1MsCisJCQl2ZXJzXzEtPnN0ciwgdmVyc18xLT5vZnMsICZ2ZXJzXzEtPm5zKTsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgcGFyc2VfYWx0c3RyKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfYWx0c3RyX3QgKmFsdHN0cikKIHsKLSAgICB1X2NoYXIgKnAsICpxOworCXVfY2hhciAqcCwgKnE7CiAKLSAgICBwID0gKHVfY2hhciAqKXR1cGxlLT5UdXBsZURhdGE7Ci0gICAgcSA9IHAgKyB0dXBsZS0+VHVwbGVEYXRhTGVuOworCXAgPSAodV9jaGFyICopdHVwbGUtPlR1cGxlRGF0YTsKKwlxID0gcCArIHR1cGxlLT5UdXBsZURhdGFMZW47CiAKLSAgICByZXR1cm4gcGFyc2Vfc3RyaW5ncyhwLCBxLCBDSVNUUExfTUFYX0FMVFNUUl9TVFJJTkdTLAotCQkJIGFsdHN0ci0+c3RyLCBhbHRzdHItPm9mcywgJmFsdHN0ci0+bnMpOworCXJldHVybiBwYXJzZV9zdHJpbmdzKHAsIHEsIENJU1RQTF9NQVhfQUxUU1RSX1NUUklOR1MsCisJCQlhbHRzdHItPnN0ciwgYWx0c3RyLT5vZnMsICZhbHRzdHItPm5zKTsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgcGFyc2VfamVkZWModHVwbGVfdCAqdHVwbGUsIGNpc3RwbF9qZWRlY190ICpqZWRlYykKIHsKLSAgICB1X2NoYXIgKnAsICpxOwotICAgIGludCBuaWQ7CisJdV9jaGFyICpwLCAqcTsKKwlpbnQgbmlkOwogCi0gICAgcCA9ICh1X2NoYXIgKil0dXBsZS0+VHVwbGVEYXRhOwotICAgIHEgPSBwICsgdHVwbGUtPlR1cGxlRGF0YUxlbjsKKwlwID0gKHVfY2hhciAqKXR1cGxlLT5UdXBsZURhdGE7CisJcSA9IHAgKyB0dXBsZS0+VHVwbGVEYXRhTGVuOwogCi0gICAgZm9yIChuaWQgPSAwOyBuaWQgPCBDSVNUUExfTUFYX0RFVklDRVM7IG5pZCsrKSB7Ci0JaWYgKHAgPiBxLTIpCi0JCWJyZWFrOwotCWplZGVjLT5pZFtuaWRdLm1mciA9IHBbMF07Ci0JamVkZWMtPmlkW25pZF0uaW5mbyA9IHBbMV07Ci0JcCArPSAyOwotICAgIH0KLSAgICBqZWRlYy0+bmlkID0gbmlkOwotICAgIHJldHVybiAwOworCWZvciAobmlkID0gMDsgbmlkIDwgQ0lTVFBMX01BWF9ERVZJQ0VTOyBuaWQrKykgeworCQlpZiAocCA+IHEtMikKKwkJCWJyZWFrOworCQlqZWRlYy0+aWRbbmlkXS5tZnIgPSBwWzBdOworCQlqZWRlYy0+aWRbbmlkXS5pbmZvID0gcFsxXTsKKwkJcCArPSAyOworCX0KKwlqZWRlYy0+bmlkID0gbmlkOworCXJldHVybiAwOwogfQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIGludCBwYXJzZV9tYW5maWQodHVwbGVfdCAqdHVwbGUsIGNpc3RwbF9tYW5maWRfdCAqbSkKIHsKLSAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDQpCi0JcmV0dXJuIC1FSU5WQUw7Ci0gICAgbS0+bWFuZiA9IGdldF91bmFsaWduZWRfbGUxNih0dXBsZS0+VHVwbGVEYXRhKTsKLSAgICBtLT5jYXJkID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHR1cGxlLT5UdXBsZURhdGEgKyAyKTsKLSAgICByZXR1cm4gMDsKKwlpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDQpCisJCXJldHVybiAtRUlOVkFMOworCW0tPm1hbmYgPSBnZXRfdW5hbGlnbmVkX2xlMTYodHVwbGUtPlR1cGxlRGF0YSk7CisJbS0+Y2FyZCA9IGdldF91bmFsaWduZWRfbGUxNih0dXBsZS0+VHVwbGVEYXRhICsgMik7CisJcmV0dXJuIDA7CiB9CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgaW50IHBhcnNlX2Z1bmNpZCh0dXBsZV90ICp0dXBsZSwgY2lzdHBsX2Z1bmNpZF90ICpmKQogewotICAgIHVfY2hhciAqcDsKLSAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDIpCi0JcmV0dXJuIC1FSU5WQUw7Ci0gICAgcCA9ICh1X2NoYXIgKil0dXBsZS0+VHVwbGVEYXRhOwotICAgIGYtPmZ1bmMgPSBwWzBdOwotICAgIGYtPnN5c2luaXQgPSBwWzFdOwotICAgIHJldHVybiAwOworCXVfY2hhciAqcDsKKwlpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDIpCisJCXJldHVybiAtRUlOVkFMOworCXAgPSAodV9jaGFyICopdHVwbGUtPlR1cGxlRGF0YTsKKwlmLT5mdW5jID0gcFswXTsKKwlmLT5zeXNpbml0ID0gcFsxXTsKKwlyZXR1cm4gMDsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgcGFyc2VfZnVuY2UodHVwbGVfdCAqdHVwbGUsIGNpc3RwbF9mdW5jZV90ICpmKQogewotICAgIHVfY2hhciAqcDsKLSAgICBpbnQgaTsKLSAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDEpCi0JcmV0dXJuIC1FSU5WQUw7Ci0gICAgcCA9ICh1X2NoYXIgKil0dXBsZS0+VHVwbGVEYXRhOwotICAgIGYtPnR5cGUgPSBwWzBdOwotICAgIGZvciAoaSA9IDE7IGkgPCB0dXBsZS0+VHVwbGVEYXRhTGVuOyBpKyspCi0JZi0+ZGF0YVtpLTFdID0gcFtpXTsKLSAgICByZXR1cm4gMDsKKwl1X2NoYXIgKnA7CisJaW50IGk7CisJaWYgKHR1cGxlLT5UdXBsZURhdGFMZW4gPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlwID0gKHVfY2hhciAqKXR1cGxlLT5UdXBsZURhdGE7CisJZi0+dHlwZSA9IHBbMF07CisJZm9yIChpID0gMTsgaSA8IHR1cGxlLT5UdXBsZURhdGFMZW47IGkrKykKKwkJZi0+ZGF0YVtpLTFdID0gcFtpXTsKKwlyZXR1cm4gMDsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgcGFyc2VfY29uZmlnKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfY29uZmlnX3QgKmNvbmZpZykKIHsKLSAgICBpbnQgcmFzeiwgcm1zeiwgaTsKLSAgICB1X2NoYXIgKnA7CisJaW50IHJhc3osIHJtc3osIGk7CisJdV9jaGFyICpwOwogCi0gICAgcCA9ICh1X2NoYXIgKil0dXBsZS0+VHVwbGVEYXRhOwotICAgIHJhc3ogPSAqcCAmIDB4MDM7Ci0gICAgcm1zeiA9ICgqcCAmIDB4M2MpID4+IDI7Ci0gICAgaWYgKHR1cGxlLT5UdXBsZURhdGFMZW4gPCByYXN6K3Jtc3orNCkKLQlyZXR1cm4gLUVJTlZBTDsKLSAgICBjb25maWctPmxhc3RfaWR4ID0gKigrK3ApOwotICAgIHArKzsKLSAgICBjb25maWctPmJhc2UgPSAwOwotICAgIGZvciAoaSA9IDA7IGkgPD0gcmFzejsgaSsrKQotCWNvbmZpZy0+YmFzZSArPSBwW2ldIDw8ICg4KmkpOwotICAgIHAgKz0gcmFzeisxOwotICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCi0JY29uZmlnLT5ybWFza1tpXSA9IDA7Ci0gICAgZm9yIChpID0gMDsgaSA8PSBybXN6OyBpKyspCi0JY29uZmlnLT5ybWFza1tpPj4yXSArPSBwW2ldIDw8ICg4KihpJTQpKTsKLSAgICBjb25maWctPnN1YnR1cGxlcyA9IHR1cGxlLT5UdXBsZURhdGFMZW4gLSAocmFzeitybXN6KzQpOwotICAgIHJldHVybiAwOworCXAgPSAodV9jaGFyICopdHVwbGUtPlR1cGxlRGF0YTsKKwlyYXN6ID0gKnAgJiAweDAzOworCXJtc3ogPSAoKnAgJiAweDNjKSA+PiAyOworCWlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDwgcmFzeitybXN6KzQpCisJCXJldHVybiAtRUlOVkFMOworCWNvbmZpZy0+bGFzdF9pZHggPSAqKCsrcCk7CisJcCsrOworCWNvbmZpZy0+YmFzZSA9IDA7CisJZm9yIChpID0gMDsgaSA8PSByYXN6OyBpKyspCisJCWNvbmZpZy0+YmFzZSArPSBwW2ldIDw8ICg4KmkpOworCXAgKz0gcmFzeisxOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWNvbmZpZy0+cm1hc2tbaV0gPSAwOworCWZvciAoaSA9IDA7IGkgPD0gcm1zejsgaSsrKQorCQljb25maWctPnJtYXNrW2k+PjJdICs9IHBbaV0gPDwgKDgqKGklNCkpOworCWNvbmZpZy0+c3VidHVwbGVzID0gdHVwbGUtPlR1cGxlRGF0YUxlbiAtIChyYXN6K3Jtc3orNCk7CisJcmV0dXJuIDA7CiB9CiAKLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLyogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgYWxsIHVzZWQgdG8gcGFyc2UgdGhlIG5pZ2h0bWFyaXNoCisgKiBjb25maWcgdGFibGUgZW50cmllcy4KKyAqLwogCi0gICAgVGhlIGZvbGxvd2luZyByb3V0aW5lcyBhcmUgYWxsIHVzZWQgdG8gcGFyc2UgdGhlIG5pZ2h0bWFyaXNoCi0gICAgY29uZmlnIHRhYmxlIGVudHJpZXMuCi0KLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwotCi1zdGF0aWMgdV9jaGFyICpwYXJzZV9wb3dlcih1X2NoYXIgKnAsIHVfY2hhciAqcSwKLQkJCSAgIGNpc3RwbF9wb3dlcl90ICpwd3IpCitzdGF0aWMgdV9jaGFyICpwYXJzZV9wb3dlcih1X2NoYXIgKnAsIHVfY2hhciAqcSwgY2lzdHBsX3Bvd2VyX3QgKnB3cikKIHsKLSAgICBpbnQgaTsKLSAgICB1X2ludCBzY2FsZTsKKwlpbnQgaTsKKwl1X2ludCBzY2FsZTsKIAotICAgIGlmIChwID09IHEpCi0JICAgIHJldHVybiBOVUxMOwotICAgIHB3ci0+cHJlc2VudCA9ICpwOwotICAgIHB3ci0+ZmxhZ3MgPSAwOwotICAgIHArKzsKLSAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKQotCWlmIChwd3ItPnByZXNlbnQgJiAoMTw8aSkpIHsKLQkgICAgaWYgKHAgPT0gcSkKLQkJICAgIHJldHVybiBOVUxMOwotCSAgICBwd3ItPnBhcmFtW2ldID0gUE9XRVJfQ1ZUKCpwKTsKLQkgICAgc2NhbGUgPSBQT1dFUl9TQ0FMRSgqcCk7Ci0JICAgIHdoaWxlICgqcCAmIDB4ODApIHsKKwlpZiAocCA9PSBxKQorCQlyZXR1cm4gTlVMTDsKKwlwd3ItPnByZXNlbnQgPSAqcDsKKwlwd3ItPmZsYWdzID0gMDsKKwlwKys7CisJZm9yIChpID0gMDsgaSA8IDc7IGkrKykKKwkJaWYgKHB3ci0+cHJlc2VudCAmICgxPDxpKSkgeworCQkJaWYgKHAgPT0gcSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCXB3ci0+cGFyYW1baV0gPSBQT1dFUl9DVlQoKnApOworCQkJc2NhbGUgPSBQT1dFUl9TQ0FMRSgqcCk7CisJCQl3aGlsZSAoKnAgJiAweDgwKSB7CisJCQkJaWYgKCsrcCA9PSBxKQorCQkJCQlyZXR1cm4gTlVMTDsKKwkJCQlpZiAoKCpwICYgMHg3ZikgPCAxMDApCisJCQkJCXB3ci0+cGFyYW1baV0gKz0KKwkJCQkJCSgqcCAmIDB4N2YpICogc2NhbGUgLyAxMDA7CisJCQkJZWxzZSBpZiAoKnAgPT0gMHg3ZCkKKwkJCQkJcHdyLT5mbGFncyB8PSBDSVNUUExfUE9XRVJfSElHSFpfT0s7CisJCQkJZWxzZSBpZiAoKnAgPT0gMHg3ZSkKKwkJCQkJcHdyLT5wYXJhbVtpXSA9IDA7CisJCQkJZWxzZSBpZiAoKnAgPT0gMHg3ZikKKwkJCQkJcHdyLT5mbGFncyB8PSBDSVNUUExfUE9XRVJfSElHSFpfUkVROworCQkJCWVsc2UKKwkJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlwKys7CisJCX0KKwlyZXR1cm4gcDsKK30KKworCitzdGF0aWMgdV9jaGFyICpwYXJzZV90aW1pbmcodV9jaGFyICpwLCB1X2NoYXIgKnEsIGNpc3RwbF90aW1pbmdfdCAqdGltaW5nKQoreworCXVfY2hhciBzY2FsZTsKKworCWlmIChwID09IHEpCisJCXJldHVybiBOVUxMOworCXNjYWxlID0gKnA7CisJaWYgKChzY2FsZSAmIDMpICE9IDMpIHsKIAkJaWYgKCsrcCA9PSBxKQogCQkJcmV0dXJuIE5VTEw7Ci0JCWlmICgoKnAgJiAweDdmKSA8IDEwMCkKLQkJICAgIHB3ci0+cGFyYW1baV0gKz0gKCpwICYgMHg3ZikgKiBzY2FsZSAvIDEwMDsKLQkJZWxzZSBpZiAoKnAgPT0gMHg3ZCkKLQkJICAgIHB3ci0+ZmxhZ3MgfD0gQ0lTVFBMX1BPV0VSX0hJR0haX09LOwotCQllbHNlIGlmICgqcCA9PSAweDdlKQotCQkgICAgcHdyLT5wYXJhbVtpXSA9IDA7Ci0JCWVsc2UgaWYgKCpwID09IDB4N2YpCi0JCSAgICBwd3ItPmZsYWdzIHw9IENJU1RQTF9QT1dFUl9ISUdIWl9SRVE7Ci0JCWVsc2UKLQkJICAgIHJldHVybiBOVUxMOwotCSAgICB9Ci0JICAgIHArKzsKLQl9Ci0gICAgcmV0dXJuIHA7CisJCXRpbWluZy0+d2FpdCA9IFNQRUVEX0NWVCgqcCk7CisJCXRpbWluZy0+d2FpdHNjYWxlID0gZXhwb25lbnRbc2NhbGUgJiAzXTsKKwl9IGVsc2UKKwkJdGltaW5nLT53YWl0ID0gMDsKKwlzY2FsZSA+Pj0gMjsKKwlpZiAoKHNjYWxlICYgNykgIT0gNykgeworCQlpZiAoKytwID09IHEpCisJCQlyZXR1cm4gTlVMTDsKKwkJdGltaW5nLT5yZWFkeSA9IFNQRUVEX0NWVCgqcCk7CisJCXRpbWluZy0+cmR5c2NhbGUgPSBleHBvbmVudFtzY2FsZSAmIDddOworCX0gZWxzZQorCQl0aW1pbmctPnJlYWR5ID0gMDsKKwlzY2FsZSA+Pj0gMzsKKwlpZiAoc2NhbGUgIT0gNykgeworCQlpZiAoKytwID09IHEpCisJCQlyZXR1cm4gTlVMTDsKKwkJdGltaW5nLT5yZXNlcnZlZCA9IFNQRUVEX0NWVCgqcCk7CisJCXRpbWluZy0+cnN2c2NhbGUgPSBleHBvbmVudFtzY2FsZV07CisJfSBlbHNlCisJCXRpbWluZy0+cmVzZXJ2ZWQgPSAwOworCXArKzsKKwlyZXR1cm4gcDsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCi0KLXN0YXRpYyB1X2NoYXIgKnBhcnNlX3RpbWluZyh1X2NoYXIgKnAsIHVfY2hhciAqcSwKLQkJCSAgICBjaXN0cGxfdGltaW5nX3QgKnRpbWluZykKLXsKLSAgICB1X2NoYXIgc2NhbGU7Ci0KLSAgICBpZiAocCA9PSBxKQotCSAgICByZXR1cm4gTlVMTDsKLSAgICBzY2FsZSA9ICpwOwotICAgIGlmICgoc2NhbGUgJiAzKSAhPSAzKSB7Ci0JaWYgKCsrcCA9PSBxKQotCQlyZXR1cm4gTlVMTDsKLQl0aW1pbmctPndhaXQgPSBTUEVFRF9DVlQoKnApOwotCXRpbWluZy0+d2FpdHNjYWxlID0gZXhwb25lbnRbc2NhbGUgJiAzXTsKLSAgICB9IGVsc2UKLQl0aW1pbmctPndhaXQgPSAwOwotICAgIHNjYWxlID4+PSAyOwotICAgIGlmICgoc2NhbGUgJiA3KSAhPSA3KSB7Ci0JaWYgKCsrcCA9PSBxKQotCQlyZXR1cm4gTlVMTDsKLQl0aW1pbmctPnJlYWR5ID0gU1BFRURfQ1ZUKCpwKTsKLQl0aW1pbmctPnJkeXNjYWxlID0gZXhwb25lbnRbc2NhbGUgJiA3XTsKLSAgICB9IGVsc2UKLQl0aW1pbmctPnJlYWR5ID0gMDsKLSAgICBzY2FsZSA+Pj0gMzsKLSAgICBpZiAoc2NhbGUgIT0gNykgewotCWlmICgrK3AgPT0gcSkKLQkJcmV0dXJuIE5VTEw7Ci0JdGltaW5nLT5yZXNlcnZlZCA9IFNQRUVEX0NWVCgqcCk7Ci0JdGltaW5nLT5yc3ZzY2FsZSA9IGV4cG9uZW50W3NjYWxlXTsKLSAgICB9IGVsc2UKLQl0aW1pbmctPnJlc2VydmVkID0gMDsKLSAgICBwKys7Ci0gICAgcmV0dXJuIHA7Ci19Ci0KLS8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLwogCiBzdGF0aWMgdV9jaGFyICpwYXJzZV9pbyh1X2NoYXIgKnAsIHVfY2hhciAqcSwgY2lzdHBsX2lvX3QgKmlvKQogewotICAgIGludCBpLCBqLCBic3osIGxzejsKKwlpbnQgaSwgaiwgYnN6LCBsc3o7CiAKLSAgICBpZiAocCA9PSBxKQotCSAgICByZXR1cm4gTlVMTDsKLSAgICBpby0+ZmxhZ3MgPSAqcDsKKwlpZiAocCA9PSBxKQorCQlyZXR1cm4gTlVMTDsKKwlpby0+ZmxhZ3MgPSAqcDsKIAotICAgIGlmICghKCpwICYgMHg4MCkpIHsKLQlpby0+bndpbiA9IDE7Ci0JaW8tPndpblswXS5iYXNlID0gMDsKLQlpby0+d2luWzBdLmxlbiA9ICgxIDw8IChpby0+ZmxhZ3MgJiBDSVNUUExfSU9fTElORVNfTUFTSykpOwotCXJldHVybiBwKzE7Ci0gICAgfQotCi0gICAgaWYgKCsrcCA9PSBxKQotCSAgICByZXR1cm4gTlVMTDsKLSAgICBpby0+bndpbiA9ICgqcCAmIDB4MGYpICsgMTsKLSAgICBic3ogPSAoKnAgJiAweDMwKSA+PiA0OwotICAgIGlmIChic3ogPT0gMykKLQkgICAgYnN6Kys7Ci0gICAgbHN6ID0gKCpwICYgMHhjMCkgPj4gNjsKLSAgICBpZiAobHN6ID09IDMpCi0JICAgIGxzeisrOwotICAgIHArKzsKLQotICAgIGZvciAoaSA9IDA7IGkgPCBpby0+bndpbjsgaSsrKSB7Ci0JaW8tPndpbltpXS5iYXNlID0gMDsKLQlpby0+d2luW2ldLmxlbiA9IDE7Ci0JZm9yIChqID0gMDsgaiA8IGJzejsgaisrLCBwKyspIHsKLQkgICAgaWYgKHAgPT0gcSkKLQkJICAgIHJldHVybiBOVUxMOwotCSAgICBpby0+d2luW2ldLmJhc2UgKz0gKnAgPDwgKGoqOCk7CisJaWYgKCEoKnAgJiAweDgwKSkgeworCQlpby0+bndpbiA9IDE7CisJCWlvLT53aW5bMF0uYmFzZSA9IDA7CisJCWlvLT53aW5bMF0ubGVuID0gKDEgPDwgKGlvLT5mbGFncyAmIENJU1RQTF9JT19MSU5FU19NQVNLKSk7CisJCXJldHVybiBwKzE7CiAJfQotCWZvciAoaiA9IDA7IGogPCBsc3o7IGorKywgcCsrKSB7Ci0JICAgIGlmIChwID09IHEpCi0JCSAgICByZXR1cm4gTlVMTDsKLQkgICAgaW8tPndpbltpXS5sZW4gKz0gKnAgPDwgKGoqOCk7CisKKwlpZiAoKytwID09IHEpCisJCXJldHVybiBOVUxMOworCWlvLT5ud2luID0gKCpwICYgMHgwZikgKyAxOworCWJzeiA9ICgqcCAmIDB4MzApID4+IDQ7CisJaWYgKGJzeiA9PSAzKQorCQlic3orKzsKKwlsc3ogPSAoKnAgJiAweGMwKSA+PiA2OworCWlmIChsc3ogPT0gMykKKwkJbHN6Kys7CisJcCsrOworCisJZm9yIChpID0gMDsgaSA8IGlvLT5ud2luOyBpKyspIHsKKwkJaW8tPndpbltpXS5iYXNlID0gMDsKKwkJaW8tPndpbltpXS5sZW4gPSAxOworCQlmb3IgKGogPSAwOyBqIDwgYnN6OyBqKyssIHArKykgeworCQkJaWYgKHAgPT0gcSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWlvLT53aW5baV0uYmFzZSArPSAqcCA8PCAoaio4KTsKKwkJfQorCQlmb3IgKGogPSAwOyBqIDwgbHN6OyBqKyssIHArKykgeworCQkJaWYgKHAgPT0gcSkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWlvLT53aW5baV0ubGVuICs9ICpwIDw8IChqKjgpOworCQl9CiAJfQotICAgIH0KLSAgICByZXR1cm4gcDsKKwlyZXR1cm4gcDsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB1X2NoYXIgKnBhcnNlX21lbSh1X2NoYXIgKnAsIHVfY2hhciAqcSwgY2lzdHBsX21lbV90ICptZW0pCiB7Ci0gICAgaW50IGksIGosIGFzeiwgbHN6LCBoYXNfaGE7Ci0gICAgdV9pbnQgbGVuLCBjYSwgaGE7CisJaW50IGksIGosIGFzeiwgbHN6LCBoYXNfaGE7CisJdV9pbnQgbGVuLCBjYSwgaGE7CiAKLSAgICBpZiAocCA9PSBxKQotCSAgICByZXR1cm4gTlVMTDsKKwlpZiAocCA9PSBxKQorCQlyZXR1cm4gTlVMTDsKIAotICAgIG1lbS0+bndpbiA9ICgqcCAmIDB4MDcpICsgMTsKLSAgICBsc3ogPSAoKnAgJiAweDE4KSA+PiAzOwotICAgIGFzeiA9ICgqcCAmIDB4NjApID4+IDU7Ci0gICAgaGFzX2hhID0gKCpwICYgMHg4MCk7Ci0gICAgaWYgKCsrcCA9PSBxKQotCSAgICByZXR1cm4gTlVMTDsKKwltZW0tPm53aW4gPSAoKnAgJiAweDA3KSArIDE7CisJbHN6ID0gKCpwICYgMHgxOCkgPj4gMzsKKwlhc3ogPSAoKnAgJiAweDYwKSA+PiA1OworCWhhc19oYSA9ICgqcCAmIDB4ODApOworCWlmICgrK3AgPT0gcSkKKwkJcmV0dXJuIE5VTEw7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgbWVtLT5ud2luOyBpKyspIHsKLQlsZW4gPSBjYSA9IGhhID0gMDsKLQlmb3IgKGogPSAwOyBqIDwgbHN6OyBqKyssIHArKykgewotCSAgICBpZiAocCA9PSBxKQotCQkgICAgcmV0dXJuIE5VTEw7Ci0JICAgIGxlbiArPSAqcCA8PCAoaio4KTsKKwlmb3IgKGkgPSAwOyBpIDwgbWVtLT5ud2luOyBpKyspIHsKKwkJbGVuID0gY2EgPSBoYSA9IDA7CisJCWZvciAoaiA9IDA7IGogPCBsc3o7IGorKywgcCsrKSB7CisJCQlpZiAocCA9PSBxKQorCQkJCXJldHVybiBOVUxMOworCQkJbGVuICs9ICpwIDw8IChqKjgpOworCQl9CisJCWZvciAoaiA9IDA7IGogPCBhc3o7IGorKywgcCsrKSB7CisJCQlpZiAocCA9PSBxKQorCQkJCXJldHVybiBOVUxMOworCQkJY2EgKz0gKnAgPDwgKGoqOCk7CisJCX0KKwkJaWYgKGhhc19oYSkKKwkJCWZvciAoaiA9IDA7IGogPCBhc3o7IGorKywgcCsrKSB7CisJCQkJaWYgKHAgPT0gcSkKKwkJCQkJcmV0dXJuIE5VTEw7CisJCQkJaGEgKz0gKnAgPDwgKGoqOCk7CisJCQl9CisJCW1lbS0+d2luW2ldLmxlbiA9IGxlbiA8PCA4OworCQltZW0tPndpbltpXS5jYXJkX2FkZHIgPSBjYSA8PCA4OworCQltZW0tPndpbltpXS5ob3N0X2FkZHIgPSBoYSA8PCA4OwogCX0KLQlmb3IgKGogPSAwOyBqIDwgYXN6OyBqKyssIHArKykgewotCSAgICBpZiAocCA9PSBxKQotCQkgICAgcmV0dXJuIE5VTEw7Ci0JICAgIGNhICs9ICpwIDw8IChqKjgpOwotCX0KLQlpZiAoaGFzX2hhKQotCSAgICBmb3IgKGogPSAwOyBqIDwgYXN6OyBqKyssIHArKykgewotCQlpZiAocCA9PSBxKQotCQkJcmV0dXJuIE5VTEw7Ci0JCWhhICs9ICpwIDw8IChqKjgpOwotCSAgICB9Ci0JbWVtLT53aW5baV0ubGVuID0gbGVuIDw8IDg7Ci0JbWVtLT53aW5baV0uY2FyZF9hZGRyID0gY2EgPDwgODsKLQltZW0tPndpbltpXS5ob3N0X2FkZHIgPSBoYSA8PCA4OwotICAgIH0KLSAgICByZXR1cm4gcDsKKwlyZXR1cm4gcDsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyB1X2NoYXIgKnBhcnNlX2lycSh1X2NoYXIgKnAsIHVfY2hhciAqcSwgY2lzdHBsX2lycV90ICppcnEpCiB7Ci0gICAgaWYgKHAgPT0gcSkKLQkgICAgcmV0dXJuIE5VTEw7Ci0gICAgaXJxLT5JUlFJbmZvMSA9ICpwOyBwKys7Ci0gICAgaWYgKGlycS0+SVJRSW5mbzEgJiBJUlFfSU5GTzJfVkFMSUQpIHsKLQlpZiAocCsyID4gcSkKKwlpZiAocCA9PSBxKQogCQlyZXR1cm4gTlVMTDsKLQlpcnEtPklSUUluZm8yID0gKHBbMV08PDgpICsgcFswXTsKLQlwICs9IDI7Ci0gICAgfQotICAgIHJldHVybiBwOworCWlycS0+SVJRSW5mbzEgPSAqcDsgcCsrOworCWlmIChpcnEtPklSUUluZm8xICYgSVJRX0lORk8yX1ZBTElEKSB7CisJCWlmIChwKzIgPiBxKQorCQkJcmV0dXJuIE5VTEw7CisJCWlycS0+SVJRSW5mbzIgPSAocFsxXTw8OCkgKyBwWzBdOworCQlwICs9IDI7CisJfQorCXJldHVybiBwOwogfQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIGludCBwYXJzZV9jZnRhYmxlX2VudHJ5KHR1cGxlX3QgKnR1cGxlLAogCQkJICAgICAgIGNpc3RwbF9jZnRhYmxlX2VudHJ5X3QgKmVudHJ5KQogewotICAgIHVfY2hhciAqcCwgKnEsIGZlYXR1cmVzOworCXVfY2hhciAqcCwgKnEsIGZlYXR1cmVzOwogCi0gICAgcCA9IHR1cGxlLT5UdXBsZURhdGE7Ci0gICAgcSA9IHAgKyB0dXBsZS0+VHVwbGVEYXRhTGVuOwotICAgIGVudHJ5LT5pbmRleCA9ICpwICYgMHgzZjsKLSAgICBlbnRyeS0+ZmxhZ3MgPSAwOwotICAgIGlmICgqcCAmIDB4NDApCi0JZW50cnktPmZsYWdzIHw9IENJU1RQTF9DRlRBQkxFX0RFRkFVTFQ7Ci0gICAgaWYgKCpwICYgMHg4MCkgeworCXAgPSB0dXBsZS0+VHVwbGVEYXRhOworCXEgPSBwICsgdHVwbGUtPlR1cGxlRGF0YUxlbjsKKwllbnRyeS0+aW5kZXggPSAqcCAmIDB4M2Y7CisJZW50cnktPmZsYWdzID0gMDsKKwlpZiAoKnAgJiAweDQwKQorCQllbnRyeS0+ZmxhZ3MgfD0gQ0lTVFBMX0NGVEFCTEVfREVGQVVMVDsKKwlpZiAoKnAgJiAweDgwKSB7CisJCWlmICgrK3AgPT0gcSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoKnAgJiAweDEwKQorCQkJZW50cnktPmZsYWdzIHw9IENJU1RQTF9DRlRBQkxFX0JWRFM7CisJCWlmICgqcCAmIDB4MjApCisJCQllbnRyeS0+ZmxhZ3MgfD0gQ0lTVFBMX0NGVEFCTEVfV1A7CisJCWlmICgqcCAmIDB4NDApCisJCQllbnRyeS0+ZmxhZ3MgfD0gQ0lTVFBMX0NGVEFCTEVfUkRZQlNZOworCQlpZiAoKnAgJiAweDgwKQorCQkJZW50cnktPmZsYWdzIHw9IENJU1RQTF9DRlRBQkxFX01XQUlUOworCQllbnRyeS0+aW50ZXJmYWNlID0gKnAgJiAweDBmOworCX0gZWxzZQorCQllbnRyeS0+aW50ZXJmYWNlID0gMDsKKworCS8qIFByb2Nlc3Mgb3B0aW9uYWwgZmVhdHVyZXMgKi8KIAlpZiAoKytwID09IHEpCiAJCXJldHVybiAtRUlOVkFMOwotCWlmICgqcCAmIDB4MTApCi0JICAgIGVudHJ5LT5mbGFncyB8PSBDSVNUUExfQ0ZUQUJMRV9CVkRTOwotCWlmICgqcCAmIDB4MjApCi0JICAgIGVudHJ5LT5mbGFncyB8PSBDSVNUUExfQ0ZUQUJMRV9XUDsKLQlpZiAoKnAgJiAweDQwKQotCSAgICBlbnRyeS0+ZmxhZ3MgfD0gQ0lTVFBMX0NGVEFCTEVfUkRZQlNZOwotCWlmICgqcCAmIDB4ODApCi0JICAgIGVudHJ5LT5mbGFncyB8PSBDSVNUUExfQ0ZUQUJMRV9NV0FJVDsKLQllbnRyeS0+aW50ZXJmYWNlID0gKnAgJiAweDBmOwotICAgIH0gZWxzZQotCWVudHJ5LT5pbnRlcmZhY2UgPSAwOworCWZlYXR1cmVzID0gKnA7IHArKzsKIAotICAgIC8qIFByb2Nlc3Mgb3B0aW9uYWwgZmVhdHVyZXMgKi8KLSAgICBpZiAoKytwID09IHEpCi0JICAgIHJldHVybiAtRUlOVkFMOwotICAgIGZlYXR1cmVzID0gKnA7IHArKzsKKwkvKiBQb3dlciBvcHRpb25zICovCisJaWYgKChmZWF0dXJlcyAmIDMpID4gMCkgeworCQlwID0gcGFyc2VfcG93ZXIocCwgcSwgJmVudHJ5LT52Y2MpOworCQlpZiAocCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlCisJCWVudHJ5LT52Y2MucHJlc2VudCA9IDA7CisJaWYgKChmZWF0dXJlcyAmIDMpID4gMSkgeworCQlwID0gcGFyc2VfcG93ZXIocCwgcSwgJmVudHJ5LT52cHAxKTsKKwkJaWYgKHAgPT0gTlVMTCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZQorCQllbnRyeS0+dnBwMS5wcmVzZW50ID0gMDsKKwlpZiAoKGZlYXR1cmVzICYgMykgPiAyKSB7CisJCXAgPSBwYXJzZV9wb3dlcihwLCBxLCAmZW50cnktPnZwcDIpOworCQlpZiAocCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlCisJCWVudHJ5LT52cHAyLnByZXNlbnQgPSAwOwogCi0gICAgLyogUG93ZXIgb3B0aW9ucyAqLwotICAgIGlmICgoZmVhdHVyZXMgJiAzKSA+IDApIHsKLQlwID0gcGFyc2VfcG93ZXIocCwgcSwgJmVudHJ5LT52Y2MpOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotICAgIH0gZWxzZQotCWVudHJ5LT52Y2MucHJlc2VudCA9IDA7Ci0gICAgaWYgKChmZWF0dXJlcyAmIDMpID4gMSkgewotCXAgPSBwYXJzZV9wb3dlcihwLCBxLCAmZW50cnktPnZwcDEpOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotICAgIH0gZWxzZQotCWVudHJ5LT52cHAxLnByZXNlbnQgPSAwOwotICAgIGlmICgoZmVhdHVyZXMgJiAzKSA+IDIpIHsKLQlwID0gcGFyc2VfcG93ZXIocCwgcSwgJmVudHJ5LT52cHAyKTsKLQlpZiAocCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLSAgICB9IGVsc2UKLQllbnRyeS0+dnBwMi5wcmVzZW50ID0gMDsKKwkvKiBUaW1pbmcgb3B0aW9ucyAqLworCWlmIChmZWF0dXJlcyAmIDB4MDQpIHsKKwkJcCA9IHBhcnNlX3RpbWluZyhwLCBxLCAmZW50cnktPnRpbWluZyk7CisJCWlmIChwID09IE5VTEwpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UgeworCQllbnRyeS0+dGltaW5nLndhaXQgPSAwOworCQllbnRyeS0+dGltaW5nLnJlYWR5ID0gMDsKKwkJZW50cnktPnRpbWluZy5yZXNlcnZlZCA9IDA7CisJfQogCi0gICAgLyogVGltaW5nIG9wdGlvbnMgKi8KLSAgICBpZiAoZmVhdHVyZXMgJiAweDA0KSB7Ci0JcCA9IHBhcnNlX3RpbWluZyhwLCBxLCAmZW50cnktPnRpbWluZyk7Ci0JaWYgKHAgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0gICAgfSBlbHNlIHsKLQllbnRyeS0+dGltaW5nLndhaXQgPSAwOwotCWVudHJ5LT50aW1pbmcucmVhZHkgPSAwOwotCWVudHJ5LT50aW1pbmcucmVzZXJ2ZWQgPSAwOwotICAgIH0KKwkvKiBJL08gd2luZG93IG9wdGlvbnMgKi8KKwlpZiAoZmVhdHVyZXMgJiAweDA4KSB7CisJCXAgPSBwYXJzZV9pbyhwLCBxLCAmZW50cnktPmlvKTsKKwkJaWYgKHAgPT0gTlVMTCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZQorCQllbnRyeS0+aW8ubndpbiA9IDA7CiAKLSAgICAvKiBJL08gd2luZG93IG9wdGlvbnMgKi8KLSAgICBpZiAoZmVhdHVyZXMgJiAweDA4KSB7Ci0JcCA9IHBhcnNlX2lvKHAsIHEsICZlbnRyeS0+aW8pOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotICAgIH0gZWxzZQotCWVudHJ5LT5pby5ud2luID0gMDsKKwkvKiBJbnRlcnJ1cHQgb3B0aW9ucyAqLworCWlmIChmZWF0dXJlcyAmIDB4MTApIHsKKwkJcCA9IHBhcnNlX2lycShwLCBxLCAmZW50cnktPmlycSk7CisJCWlmIChwID09IE5VTEwpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9IGVsc2UKKwkJZW50cnktPmlycS5JUlFJbmZvMSA9IDA7CiAKLSAgICAvKiBJbnRlcnJ1cHQgb3B0aW9ucyAqLwotICAgIGlmIChmZWF0dXJlcyAmIDB4MTApIHsKLQlwID0gcGFyc2VfaXJxKHAsIHEsICZlbnRyeS0+aXJxKTsKLQlpZiAocCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLSAgICB9IGVsc2UKLQllbnRyeS0+aXJxLklSUUluZm8xID0gMDsKKwlzd2l0Y2ggKGZlYXR1cmVzICYgMHg2MCkgeworCWNhc2UgMHgwMDoKKwkJZW50cnktPm1lbS5ud2luID0gMDsKKwkJYnJlYWs7CisJY2FzZSAweDIwOgorCQllbnRyeS0+bWVtLm53aW4gPSAxOworCQllbnRyeS0+bWVtLndpblswXS5sZW4gPSBnZXRfdW5hbGlnbmVkX2xlMTYocCkgPDwgODsKKwkJZW50cnktPm1lbS53aW5bMF0uY2FyZF9hZGRyID0gMDsKKwkJZW50cnktPm1lbS53aW5bMF0uaG9zdF9hZGRyID0gMDsKKwkJcCArPSAyOworCQlpZiAocCA+IHEpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJY2FzZSAweDQwOgorCQllbnRyeS0+bWVtLm53aW4gPSAxOworCQllbnRyeS0+bWVtLndpblswXS5sZW4gPSBnZXRfdW5hbGlnbmVkX2xlMTYocCkgPDwgODsKKwkJZW50cnktPm1lbS53aW5bMF0uY2FyZF9hZGRyID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHAgKyAyKSA8PCA4OworCQllbnRyeS0+bWVtLndpblswXS5ob3N0X2FkZHIgPSAwOworCQlwICs9IDQ7CisJCWlmIChwID4gcSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIDB4NjA6CisJCXAgPSBwYXJzZV9tZW0ocCwgcSwgJmVudHJ5LT5tZW0pOworCQlpZiAocCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KIAotICAgIHN3aXRjaCAoZmVhdHVyZXMgJiAweDYwKSB7Ci0gICAgY2FzZSAweDAwOgotCWVudHJ5LT5tZW0ubndpbiA9IDA7Ci0JYnJlYWs7Ci0gICAgY2FzZSAweDIwOgotCWVudHJ5LT5tZW0ubndpbiA9IDE7Ci0JZW50cnktPm1lbS53aW5bMF0ubGVuID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHApIDw8IDg7Ci0JZW50cnktPm1lbS53aW5bMF0uY2FyZF9hZGRyID0gMDsKLQllbnRyeS0+bWVtLndpblswXS5ob3N0X2FkZHIgPSAwOwotCXAgKz0gMjsKLQlpZiAocCA+IHEpCi0JCXJldHVybiAtRUlOVkFMOwotCWJyZWFrOwotICAgIGNhc2UgMHg0MDoKLQllbnRyeS0+bWVtLm53aW4gPSAxOwotCWVudHJ5LT5tZW0ud2luWzBdLmxlbiA9IGdldF91bmFsaWduZWRfbGUxNihwKSA8PCA4OwotCWVudHJ5LT5tZW0ud2luWzBdLmNhcmRfYWRkciA9IGdldF91bmFsaWduZWRfbGUxNihwICsgMikgPDwgODsKLQllbnRyeS0+bWVtLndpblswXS5ob3N0X2FkZHIgPSAwOwotCXAgKz0gNDsKLQlpZiAocCA+IHEpCi0JCXJldHVybiAtRUlOVkFMOwotCWJyZWFrOwotICAgIGNhc2UgMHg2MDoKLQlwID0gcGFyc2VfbWVtKHAsIHEsICZlbnRyeS0+bWVtKTsKLQlpZiAocCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlicmVhazsKLSAgICB9CisJLyogTWlzYyBmZWF0dXJlcyAqLworCWlmIChmZWF0dXJlcyAmIDB4ODApIHsKKwkJaWYgKHAgPT0gcSkKKwkJCXJldHVybiAtRUlOVkFMOworCQllbnRyeS0+ZmxhZ3MgfD0gKCpwIDw8IDgpOworCQl3aGlsZSAoKnAgJiAweDgwKQorCQkJaWYgKCsrcCA9PSBxKQorCQkJCXJldHVybiAtRUlOVkFMOworCQlwKys7CisJfQogCi0gICAgLyogTWlzYyBmZWF0dXJlcyAqLwotICAgIGlmIChmZWF0dXJlcyAmIDB4ODApIHsKLQlpZiAocCA9PSBxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllbnRyeS0+ZmxhZ3MgfD0gKCpwIDw8IDgpOwotCXdoaWxlICgqcCAmIDB4ODApCi0JICAgIGlmICgrK3AgPT0gcSkKLQkJICAgIHJldHVybiAtRUlOVkFMOwotCXArKzsKLSAgICB9CisJZW50cnktPnN1YnR1cGxlcyA9IHEtcDsKIAotICAgIGVudHJ5LT5zdWJ0dXBsZXMgPSBxLXA7Ci0KLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgcGFyc2VfZGV2aWNlX2dlbyh0dXBsZV90ICp0dXBsZSwgY2lzdHBsX2RldmljZV9nZW9fdCAqZ2VvKQogewotICAgIHVfY2hhciAqcCwgKnE7Ci0gICAgaW50IG47CisJdV9jaGFyICpwLCAqcTsKKwlpbnQgbjsKIAotICAgIHAgPSAodV9jaGFyICopdHVwbGUtPlR1cGxlRGF0YTsKLSAgICBxID0gcCArIHR1cGxlLT5UdXBsZURhdGFMZW47CisJcCA9ICh1X2NoYXIgKil0dXBsZS0+VHVwbGVEYXRhOworCXEgPSBwICsgdHVwbGUtPlR1cGxlRGF0YUxlbjsKIAotICAgIGZvciAobiA9IDA7IG4gPCBDSVNUUExfTUFYX0RFVklDRVM7IG4rKykgewotCWlmIChwID4gcS02KQotCQlicmVhazsKLQlnZW8tPmdlb1tuXS5idXN3aWR0aCA9IHBbMF07Ci0JZ2VvLT5nZW9bbl0uZXJhc2VfYmxvY2sgPSAxIDw8IChwWzFdLTEpOwotCWdlby0+Z2VvW25dLnJlYWRfYmxvY2sgID0gMSA8PCAocFsyXS0xKTsKLQlnZW8tPmdlb1tuXS53cml0ZV9ibG9jayA9IDEgPDwgKHBbM10tMSk7Ci0JZ2VvLT5nZW9bbl0ucGFydGl0aW9uICAgPSAxIDw8IChwWzRdLTEpOwotCWdlby0+Z2VvW25dLmludGVybGVhdmUgID0gMSA8PCAocFs1XS0xKTsKLQlwICs9IDY7Ci0gICAgfQotICAgIGdlby0+bmdlbyA9IG47Ci0gICAgcmV0dXJuIDA7CisJZm9yIChuID0gMDsgbiA8IENJU1RQTF9NQVhfREVWSUNFUzsgbisrKSB7CisJCWlmIChwID4gcS02KQorCQkJYnJlYWs7CisJCWdlby0+Z2VvW25dLmJ1c3dpZHRoID0gcFswXTsKKwkJZ2VvLT5nZW9bbl0uZXJhc2VfYmxvY2sgPSAxIDw8IChwWzFdLTEpOworCQlnZW8tPmdlb1tuXS5yZWFkX2Jsb2NrICA9IDEgPDwgKHBbMl0tMSk7CisJCWdlby0+Z2VvW25dLndyaXRlX2Jsb2NrID0gMSA8PCAocFszXS0xKTsKKwkJZ2VvLT5nZW9bbl0ucGFydGl0aW9uICAgPSAxIDw8IChwWzRdLTEpOworCQlnZW8tPmdlb1tuXS5pbnRlcmxlYXZlICA9IDEgPDwgKHBbNV0tMSk7CisJCXAgKz0gNjsKKwl9CisJZ2VvLT5uZ2VvID0gbjsKKwlyZXR1cm4gMDsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgcGFyc2VfdmVyc18yKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfdmVyc18yX3QgKnYyKQogewotICAgIHVfY2hhciAqcCwgKnE7CisJdV9jaGFyICpwLCAqcTsKIAotICAgIGlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDwgMTApCi0JcmV0dXJuIC1FSU5WQUw7CisJaWYgKHR1cGxlLT5UdXBsZURhdGFMZW4gPCAxMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICBwID0gdHVwbGUtPlR1cGxlRGF0YTsKLSAgICBxID0gcCArIHR1cGxlLT5UdXBsZURhdGFMZW47CisJcCA9IHR1cGxlLT5UdXBsZURhdGE7CisJcSA9IHAgKyB0dXBsZS0+VHVwbGVEYXRhTGVuOwogCi0gICAgdjItPnZlcnMgPSBwWzBdOwotICAgIHYyLT5jb21wbHkgPSBwWzFdOwotICAgIHYyLT5kaW5kZXggPSBnZXRfdW5hbGlnbmVkX2xlMTYocCArIDIpOwotICAgIHYyLT52c3BlYzggPSBwWzZdOwotICAgIHYyLT52c3BlYzkgPSBwWzddOwotICAgIHYyLT5uaGRyID0gcFs4XTsKLSAgICBwICs9IDk7Ci0gICAgcmV0dXJuIHBhcnNlX3N0cmluZ3MocCwgcSwgMiwgdjItPnN0ciwgJnYyLT52ZW5kb3IsIE5VTEwpOworCXYyLT52ZXJzID0gcFswXTsKKwl2Mi0+Y29tcGx5ID0gcFsxXTsKKwl2Mi0+ZGluZGV4ID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHAgKyAyKTsKKwl2Mi0+dnNwZWM4ID0gcFs2XTsKKwl2Mi0+dnNwZWM5ID0gcFs3XTsKKwl2Mi0+bmhkciA9IHBbOF07CisJcCArPSA5OworCXJldHVybiBwYXJzZV9zdHJpbmdzKHAsIHEsIDIsIHYyLT5zdHIsICZ2Mi0+dmVuZG9yLCBOVUxMKTsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIHN0YXRpYyBpbnQgcGFyc2Vfb3JnKHR1cGxlX3QgKnR1cGxlLCBjaXN0cGxfb3JnX3QgKm9yZykKIHsKLSAgICB1X2NoYXIgKnAsICpxOwotICAgIGludCBpOworCXVfY2hhciAqcCwgKnE7CisJaW50IGk7CiAKLSAgICBwID0gdHVwbGUtPlR1cGxlRGF0YTsKLSAgICBxID0gcCArIHR1cGxlLT5UdXBsZURhdGFMZW47Ci0gICAgaWYgKHAgPT0gcSkKLQkgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgb3JnLT5kYXRhX29yZyA9ICpwOwotICAgIGlmICgrK3AgPT0gcSkKLQkgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgZm9yIChpID0gMDsgaSA8IDMwOyBpKyspIHsKLQlvcmctPmRlc2NbaV0gPSAqcDsKLQlpZiAoKnAgPT0gJ1wwJykKLQkJYnJlYWs7CisJcCA9IHR1cGxlLT5UdXBsZURhdGE7CisJcSA9IHAgKyB0dXBsZS0+VHVwbGVEYXRhTGVuOworCWlmIChwID09IHEpCisJCXJldHVybiAtRUlOVkFMOworCW9yZy0+ZGF0YV9vcmcgPSAqcDsKIAlpZiAoKytwID09IHEpCiAJCXJldHVybiAtRUlOVkFMOwotICAgIH0KLSAgICByZXR1cm4gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMzA7IGkrKykgeworCQlvcmctPmRlc2NbaV0gPSAqcDsKKwkJaWYgKCpwID09ICdcMCcpCisJCQlicmVhazsKKwkJaWYgKCsrcCA9PSBxKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOwogfQogCi0vKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAogc3RhdGljIGludCBwYXJzZV9mb3JtYXQodHVwbGVfdCAqdHVwbGUsIGNpc3RwbF9mb3JtYXRfdCAqZm10KQogewotICAgIHVfY2hhciAqcDsKKwl1X2NoYXIgKnA7CiAKLSAgICBpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA8IDEwKQotCXJldHVybiAtRUlOVkFMOworCWlmICh0dXBsZS0+VHVwbGVEYXRhTGVuIDwgMTApCisJCXJldHVybiAtRUlOVkFMOwogCi0gICAgcCA9IHR1cGxlLT5UdXBsZURhdGE7CisJcCA9IHR1cGxlLT5UdXBsZURhdGE7CiAKLSAgICBmbXQtPnR5cGUgPSBwWzBdOwotICAgIGZtdC0+ZWRjID0gcFsxXTsKLSAgICBmbXQtPm9mZnNldCA9IGdldF91bmFsaWduZWRfbGUzMihwICsgMik7Ci0gICAgZm10LT5sZW5ndGggPSBnZXRfdW5hbGlnbmVkX2xlMzIocCArIDYpOworCWZtdC0+dHlwZSA9IHBbMF07CisJZm10LT5lZGMgPSBwWzFdOworCWZtdC0+b2Zmc2V0ID0gZ2V0X3VuYWxpZ25lZF9sZTMyKHAgKyAyKTsKKwlmbXQtPmxlbmd0aCA9IGdldF91bmFsaWduZWRfbGUzMihwICsgNik7CiAKLSAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCiAKIGludCBwY21jaWFfcGFyc2VfdHVwbGUodHVwbGVfdCAqdHVwbGUsIGNpc3BhcnNlX3QgKnBhcnNlKQogewotICAgIGludCByZXQgPSAwOworCWludCByZXQgPSAwOwogCi0gICAgaWYgKHR1cGxlLT5UdXBsZURhdGFMZW4gPiB0dXBsZS0+VHVwbGVEYXRhTWF4KQotCXJldHVybiAtRUlOVkFMOwotICAgIHN3aXRjaCAodHVwbGUtPlR1cGxlQ29kZSkgewotICAgIGNhc2UgQ0lTVFBMX0RFVklDRToKLSAgICBjYXNlIENJU1RQTF9ERVZJQ0VfQToKLQlyZXQgPSBwYXJzZV9kZXZpY2UodHVwbGUsICZwYXJzZS0+ZGV2aWNlKTsKLQlicmVhazsKLSAgICBjYXNlIENJU1RQTF9DSEVDS1NVTToKLQlyZXQgPSBwYXJzZV9jaGVja3N1bSh0dXBsZSwgJnBhcnNlLT5jaGVja3N1bSk7Ci0JYnJlYWs7Ci0gICAgY2FzZSBDSVNUUExfTE9OR0xJTktfQToKLSAgICBjYXNlIENJU1RQTF9MT05HTElOS19DOgotCXJldCA9IHBhcnNlX2xvbmdsaW5rKHR1cGxlLCAmcGFyc2UtPmxvbmdsaW5rKTsKLQlicmVhazsKLSAgICBjYXNlIENJU1RQTF9MT05HTElOS19NRkM6Ci0JcmV0ID0gcGFyc2VfbG9uZ2xpbmtfbWZjKHR1cGxlLCAmcGFyc2UtPmxvbmdsaW5rX21mYyk7Ci0JYnJlYWs7Ci0gICAgY2FzZSBDSVNUUExfVkVSU18xOgotCXJldCA9IHBhcnNlX3ZlcnNfMSh0dXBsZSwgJnBhcnNlLT52ZXJzaW9uXzEpOwotCWJyZWFrOwotICAgIGNhc2UgQ0lTVFBMX0FMVFNUUjoKLQlyZXQgPSBwYXJzZV9hbHRzdHIodHVwbGUsICZwYXJzZS0+YWx0c3RyKTsKLQlicmVhazsKLSAgICBjYXNlIENJU1RQTF9KRURFQ19BOgotICAgIGNhc2UgQ0lTVFBMX0pFREVDX0M6Ci0JcmV0ID0gcGFyc2VfamVkZWModHVwbGUsICZwYXJzZS0+amVkZWMpOwotCWJyZWFrOwotICAgIGNhc2UgQ0lTVFBMX01BTkZJRDoKLQlyZXQgPSBwYXJzZV9tYW5maWQodHVwbGUsICZwYXJzZS0+bWFuZmlkKTsKLQlicmVhazsKLSAgICBjYXNlIENJU1RQTF9GVU5DSUQ6Ci0JcmV0ID0gcGFyc2VfZnVuY2lkKHR1cGxlLCAmcGFyc2UtPmZ1bmNpZCk7Ci0JYnJlYWs7Ci0gICAgY2FzZSBDSVNUUExfRlVOQ0U6Ci0JcmV0ID0gcGFyc2VfZnVuY2UodHVwbGUsICZwYXJzZS0+ZnVuY2UpOwotCWJyZWFrOwotICAgIGNhc2UgQ0lTVFBMX0NPTkZJRzoKLQlyZXQgPSBwYXJzZV9jb25maWcodHVwbGUsICZwYXJzZS0+Y29uZmlnKTsKLQlicmVhazsKLSAgICBjYXNlIENJU1RQTF9DRlRBQkxFX0VOVFJZOgotCXJldCA9IHBhcnNlX2NmdGFibGVfZW50cnkodHVwbGUsICZwYXJzZS0+Y2Z0YWJsZV9lbnRyeSk7Ci0JYnJlYWs7Ci0gICAgY2FzZSBDSVNUUExfREVWSUNFX0dFTzoKLSAgICBjYXNlIENJU1RQTF9ERVZJQ0VfR0VPX0E6Ci0JcmV0ID0gcGFyc2VfZGV2aWNlX2dlbyh0dXBsZSwgJnBhcnNlLT5kZXZpY2VfZ2VvKTsKLQlicmVhazsKLSAgICBjYXNlIENJU1RQTF9WRVJTXzI6Ci0JcmV0ID0gcGFyc2VfdmVyc18yKHR1cGxlLCAmcGFyc2UtPnZlcnNfMik7Ci0JYnJlYWs7Ci0gICAgY2FzZSBDSVNUUExfT1JHOgotCXJldCA9IHBhcnNlX29yZyh0dXBsZSwgJnBhcnNlLT5vcmcpOwotCWJyZWFrOwotICAgIGNhc2UgQ0lTVFBMX0ZPUk1BVDoKLSAgICBjYXNlIENJU1RQTF9GT1JNQVRfQToKLQlyZXQgPSBwYXJzZV9mb3JtYXQodHVwbGUsICZwYXJzZS0+Zm9ybWF0KTsKLQlicmVhazsKLSAgICBjYXNlIENJU1RQTF9OT19MSU5LOgotICAgIGNhc2UgQ0lTVFBMX0xJTktUQVJHRVQ6Ci0JcmV0ID0gMDsKLQlicmVhazsKLSAgICBkZWZhdWx0OgotCXJldCA9IC1FSU5WQUw7Ci0JYnJlYWs7Ci0gICAgfQotICAgIGlmIChyZXQpCi0JICAgIHByX2RlYnVnKCJwYXJzZV90dXBsZSBmYWlsZWQgJWRcbiIsIHJldCk7Ci0gICAgcmV0dXJuIHJldDsKKwlpZiAodHVwbGUtPlR1cGxlRGF0YUxlbiA+IHR1cGxlLT5UdXBsZURhdGFNYXgpCisJCXJldHVybiAtRUlOVkFMOworCXN3aXRjaCAodHVwbGUtPlR1cGxlQ29kZSkgeworCWNhc2UgQ0lTVFBMX0RFVklDRToKKwljYXNlIENJU1RQTF9ERVZJQ0VfQToKKwkJcmV0ID0gcGFyc2VfZGV2aWNlKHR1cGxlLCAmcGFyc2UtPmRldmljZSk7CisJCWJyZWFrOworCWNhc2UgQ0lTVFBMX0NIRUNLU1VNOgorCQlyZXQgPSBwYXJzZV9jaGVja3N1bSh0dXBsZSwgJnBhcnNlLT5jaGVja3N1bSk7CisJCWJyZWFrOworCWNhc2UgQ0lTVFBMX0xPTkdMSU5LX0E6CisJY2FzZSBDSVNUUExfTE9OR0xJTktfQzoKKwkJcmV0ID0gcGFyc2VfbG9uZ2xpbmsodHVwbGUsICZwYXJzZS0+bG9uZ2xpbmspOworCQlicmVhazsKKwljYXNlIENJU1RQTF9MT05HTElOS19NRkM6CisJCXJldCA9IHBhcnNlX2xvbmdsaW5rX21mYyh0dXBsZSwgJnBhcnNlLT5sb25nbGlua19tZmMpOworCQlicmVhazsKKwljYXNlIENJU1RQTF9WRVJTXzE6CisJCXJldCA9IHBhcnNlX3ZlcnNfMSh0dXBsZSwgJnBhcnNlLT52ZXJzaW9uXzEpOworCQlicmVhazsKKwljYXNlIENJU1RQTF9BTFRTVFI6CisJCXJldCA9IHBhcnNlX2FsdHN0cih0dXBsZSwgJnBhcnNlLT5hbHRzdHIpOworCQlicmVhazsKKwljYXNlIENJU1RQTF9KRURFQ19BOgorCWNhc2UgQ0lTVFBMX0pFREVDX0M6CisJCXJldCA9IHBhcnNlX2plZGVjKHR1cGxlLCAmcGFyc2UtPmplZGVjKTsKKwkJYnJlYWs7CisJY2FzZSBDSVNUUExfTUFORklEOgorCQlyZXQgPSBwYXJzZV9tYW5maWQodHVwbGUsICZwYXJzZS0+bWFuZmlkKTsKKwkJYnJlYWs7CisJY2FzZSBDSVNUUExfRlVOQ0lEOgorCQlyZXQgPSBwYXJzZV9mdW5jaWQodHVwbGUsICZwYXJzZS0+ZnVuY2lkKTsKKwkJYnJlYWs7CisJY2FzZSBDSVNUUExfRlVOQ0U6CisJCXJldCA9IHBhcnNlX2Z1bmNlKHR1cGxlLCAmcGFyc2UtPmZ1bmNlKTsKKwkJYnJlYWs7CisJY2FzZSBDSVNUUExfQ09ORklHOgorCQlyZXQgPSBwYXJzZV9jb25maWcodHVwbGUsICZwYXJzZS0+Y29uZmlnKTsKKwkJYnJlYWs7CisJY2FzZSBDSVNUUExfQ0ZUQUJMRV9FTlRSWToKKwkJcmV0ID0gcGFyc2VfY2Z0YWJsZV9lbnRyeSh0dXBsZSwgJnBhcnNlLT5jZnRhYmxlX2VudHJ5KTsKKwkJYnJlYWs7CisJY2FzZSBDSVNUUExfREVWSUNFX0dFTzoKKwljYXNlIENJU1RQTF9ERVZJQ0VfR0VPX0E6CisJCXJldCA9IHBhcnNlX2RldmljZV9nZW8odHVwbGUsICZwYXJzZS0+ZGV2aWNlX2dlbyk7CisJCWJyZWFrOworCWNhc2UgQ0lTVFBMX1ZFUlNfMjoKKwkJcmV0ID0gcGFyc2VfdmVyc18yKHR1cGxlLCAmcGFyc2UtPnZlcnNfMik7CisJCWJyZWFrOworCWNhc2UgQ0lTVFBMX09SRzoKKwkJcmV0ID0gcGFyc2Vfb3JnKHR1cGxlLCAmcGFyc2UtPm9yZyk7CisJCWJyZWFrOworCWNhc2UgQ0lTVFBMX0ZPUk1BVDoKKwljYXNlIENJU1RQTF9GT1JNQVRfQToKKwkJcmV0ID0gcGFyc2VfZm9ybWF0KHR1cGxlLCAmcGFyc2UtPmZvcm1hdCk7CisJCWJyZWFrOworCWNhc2UgQ0lTVFBMX05PX0xJTks6CisJY2FzZSBDSVNUUExfTElOS1RBUkdFVDoKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCWlmIChyZXQpCisJCXByX2RlYnVnKCJwYXJzZV90dXBsZSBmYWlsZWQgJWRcbiIsIHJldCk7CisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wocGNtY2lhX3BhcnNlX3R1cGxlKTsKIAotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLSAgICBUaGlzIGlzIHVzZWQgaW50ZXJuYWxseSBieSBDYXJkIFNlcnZpY2VzIHRvIGxvb2sgdXAgQ0lTIHN0dWZmLgotCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQotaW50IHBjY2FyZF9yZWFkX3R1cGxlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sIGNpc2RhdGFfdCBjb2RlLCB2b2lkICpwYXJzZSkKKy8qKgorICogcGNjYXJkX3JlYWRfdHVwbGUoKSAtIGludGVybmFsIENJUyB0dXBsZSBhY2Nlc3MKKyAqIEBzOgkJdGhlIHN0cnVjdCBwY21jaWFfc29ja2V0IHdoZXJlIHRoZSBjYXJkIGlzIGluc2VydGVkCisgKiBAZnVuY3Rpb246CXRoZSBkZXZpY2UgZnVuY3Rpb24gd2UgbG9vcCBmb3IKKyAqIEBjb2RlOgl3aGljaCBDSVMgY29kZSBzaGFsbCB3ZSBsb29rIGZvcj8KKyAqIEBwYXJzZToJYnVmZmVyIHdoZXJlIHRoZSB0dXBsZSBzaGFsbCBiZSBwYXJzZWQgKG9yIE5VTEwsIGlmIG5vIHBhcnNlKQorICoKKyAqIHBjY2FyZF9yZWFkX3R1cGxlKCkgcmVhZHMgb3V0IG9uZSB0dXBsZSBhbmQgYXR0ZW1wdHMgdG8gcGFyc2UgaXQKKyAqLworaW50IHBjY2FyZF9yZWFkX3R1cGxlKHN0cnVjdCBwY21jaWFfc29ja2V0ICpzLCB1bnNpZ25lZCBpbnQgZnVuY3Rpb24sCisJCWNpc2RhdGFfdCBjb2RlLCB2b2lkICpwYXJzZSkKIHsKLSAgICB0dXBsZV90IHR1cGxlOwotICAgIGNpc2RhdGFfdCAqYnVmOwotICAgIGludCByZXQ7CisJdHVwbGVfdCB0dXBsZTsKKwljaXNkYXRhX3QgKmJ1ZjsKKwlpbnQgcmV0OwogCi0gICAgYnVmID0ga21hbGxvYygyNTYsIEdGUF9LRVJORUwpOwotICAgIGlmIChidWYgPT0gTlVMTCkgewotCSAgICBkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgJnMtPmRldiwgIm5vIG1lbW9yeSB0byByZWFkIHR1cGxlXG4iKTsKLQkgICAgcmV0dXJuIC1FTk9NRU07Ci0gICAgfQotICAgIHR1cGxlLkRlc2lyZWRUdXBsZSA9IGNvZGU7Ci0gICAgdHVwbGUuQXR0cmlidXRlcyA9IDA7Ci0gICAgaWYgKGZ1bmN0aW9uID09IEJJTkRfRk5fQUxMKQotCSAgICB0dXBsZS5BdHRyaWJ1dGVzID0gVFVQTEVfUkVUVVJOX0NPTU1PTjsKLSAgICByZXQgPSBwY2NhcmRfZ2V0X2ZpcnN0X3R1cGxlKHMsIGZ1bmN0aW9uLCAmdHVwbGUpOwotICAgIGlmIChyZXQgIT0gMCkKLQkgICAgZ290byBkb25lOwotICAgIHR1cGxlLlR1cGxlRGF0YSA9IGJ1ZjsKLSAgICB0dXBsZS5UdXBsZU9mZnNldCA9IDA7Ci0gICAgdHVwbGUuVHVwbGVEYXRhTWF4ID0gMjU1OwotICAgIHJldCA9IHBjY2FyZF9nZXRfdHVwbGVfZGF0YShzLCAmdHVwbGUpOwotICAgIGlmIChyZXQgIT0gMCkKLQkgICAgZ290byBkb25lOwotICAgIHJldCA9IHBjbWNpYV9wYXJzZV90dXBsZSgmdHVwbGUsIHBhcnNlKTsKKwlidWYgPSBrbWFsbG9jKDI1NiwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCWRldl9wcmludGsoS0VSTl9XQVJOSU5HLCAmcy0+ZGV2LCAibm8gbWVtb3J5IHRvIHJlYWQgdHVwbGVcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJdHVwbGUuRGVzaXJlZFR1cGxlID0gY29kZTsKKwl0dXBsZS5BdHRyaWJ1dGVzID0gMDsKKwlpZiAoZnVuY3Rpb24gPT0gQklORF9GTl9BTEwpCisJCXR1cGxlLkF0dHJpYnV0ZXMgPSBUVVBMRV9SRVRVUk5fQ09NTU9OOworCXJldCA9IHBjY2FyZF9nZXRfZmlyc3RfdHVwbGUocywgZnVuY3Rpb24sICZ0dXBsZSk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGRvbmU7CisJdHVwbGUuVHVwbGVEYXRhID0gYnVmOworCXR1cGxlLlR1cGxlT2Zmc2V0ID0gMDsKKwl0dXBsZS5UdXBsZURhdGFNYXggPSAyNTU7CisJcmV0ID0gcGNjYXJkX2dldF90dXBsZV9kYXRhKHMsICZ0dXBsZSk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGRvbmU7CisJcmV0ID0gcGNtY2lhX3BhcnNlX3R1cGxlKCZ0dXBsZSwgcGFyc2UpOwogZG9uZToKLSAgICBrZnJlZShidWYpOwotICAgIHJldHVybiByZXQ7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm4gcmV0OwogfQogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL2RiMXh4eF9zcy5jIGIvZHJpdmVycy9wY21jaWEvZGIxeHh4X3NzLmMKaW5kZXggMzg4OWNmMDcuLjkyNTRhYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2RiMXh4eF9zcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2RiMXh4eF9zcy5jCkBAIC00Miw3ICs0Miw2IEBACiAJaW50CQlucjsJCS8qIHNvY2tldCBudW1iZXIgKi8KIAl2b2lkCQkqdmlydF9pbzsKIAotCS8qIHRoZSAicHNldWRvIiBhZGRyZXNzZXMgb2YgdGhlIFBDTUNJQSBzcGFjZS4gKi8KIAlwaHlzX2FkZHJfdAlwaHlzX2lvOwogCXBoeXNfYWRkcl90CXBoeXNfYXR0cjsKIAlwaHlzX2FkZHJfdAlwaHlzX21lbTsKQEAgLTQzNyw3ICs0MzYsNyBAQAogCSAqIFRoaXMgaW5jbHVkZXMgSVJRcyBmb3IgQ2FyZGRldGVjdGlvbi9lamVjdGlvbiwgdGhlIGNhcmQKIAkgKiAgaXRzZWxmIGFuZCBvcHRpb25hbCBzdGF0dXMgY2hhbmdlIGRldGVjdGlvbi4KIAkgKiBBbHNvLCB0aGUgbWVtb3J5IGFyZWFzIGNvdmVyZWQgYnkgYSBzb2NrZXQuICBGb3IgdGhlc2UKLQkgKiAgd2UgcmVxdWlyZSB0aGUgMzJiaXQgInBzZXVkbyIgYWRkcmVzc2VzIChzZWUgdGhlIGF1MTAwMC5oCisJICogIHdlIHJlcXVpcmUgdGhlIHJlYWwgMzZiaXQgYWRkcmVzc2VzIChzZWUgdGhlIGF1MTAwMC5oCiAJICogIGhlYWRlciBmb3IgbW9yZSBpbmZvcm1hdGlvbikuCiAJICovCiAKQEAgLTQ1OSwxMSArNDU4LDcgQEAKIAogCXJldCA9IC1FTk9ERVY7CiAKLQkvKgotCSAqIHBzZXVkby1hdHRyOiAgVGhlIDMyYml0IGFkZHJlc3Mgb2YgdGhlIFBDTUNJQSBhdHRyaWJ1dGUgc3BhY2UKLQkgKiBmb3IgdGhpcyBzb2NrZXQgKHVzdWFsbHkgdGhlIDM2Yml0IGFkZHJlc3Mgc2hpZnRlZCA0IHRvIHRoZQotCSAqIHJpZ2h0KS4KLQkgKi8KKwkvKiAzNmJpdCBQQ01DSUEgQXR0cmlidXRlIGFyZWEgYWRkcmVzcyAqLwogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicGNtY2lhLWF0dHIiKTsKIAlpZiAoIXIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJwY21jaWElZCBoYXMgbm8gJ3BzZXVkby1hdHRyJyByZXNvdXJjZSFcbiIsCkBAIC00NzIsMTAgKzQ2Nyw3IEBACiAJfQogCXNvY2stPnBoeXNfYXR0ciA9IHItPnN0YXJ0OwogCi0JLyoKLQkgKiBwc2V1ZG8tbWVtOiAgVGhlIDMyYml0IGFkZHJlc3Mgb2YgdGhlIFBDTUNJQSBtZW1vcnkgc3BhY2UgZm9yCi0JICogdGhpcyBzb2NrZXQgKHVzdWFsbHkgdGhlIDM2Yml0IGFkZHJlc3Mgc2hpZnRlZCA0IHRvIHRoZSByaWdodCkKLQkgKi8KKwkvKiAzNmJpdCBQQ01DSUEgTWVtb3J5IGFyZWEgYWRkcmVzcyAqLwogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicGNtY2lhLW1lbSIpOwogCWlmICghcikgewogCQlwcmludGsoS0VSTl9FUlIgInBjbWNpYSVkIGhhcyBubyAncHNldWRvLW1lbScgcmVzb3VyY2UhXG4iLApAQCAtNDg0LDEwICs0NzYsNyBAQAogCX0KIAlzb2NrLT5waHlzX21lbSA9IHItPnN0YXJ0OwogCi0JLyoKLQkgKiBwc2V1ZG8taW86ICBUaGUgMzJiaXQgYWRkcmVzcyBvZiB0aGUgUENNQ0lBIElPIHNwYWNlIGZvciB0aGlzCi0JICogc29ja2V0ICh1c3VhbGx5IHRoZSAzNmJpdCBhZGRyZXNzIHNoaWZ0ZWQgNCB0byB0aGUgcmlnaHQpLgotCSAqLworCS8qIDM2Yml0IFBDTUNJQSBJTyBhcmVhIGFkZHJlc3MgKi8KIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInBjbWNpYS1pbyIpOwogCWlmICghcikgewogCQlwcmludGsoS0VSTl9FUlIgInBjbWNpYSVkIGhhcyBubyAncHNldWRvLWlvJyByZXNvdXJjZSFcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9kcy5jIGIvZHJpdmVycy9wY21jaWEvZHMuYwppbmRleCAwZjk4YmU0Li5hZDkzZWJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjbWNpYS9kcy5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL2RzLmMKQEAgLTk3MSw5ICs5NzEsOSBAQAogewogCWludCByYzsKIAotCWRvd24oJmRldi0+c2VtKTsKKwlkZXZpY2VfbG9jayhkZXYpOwogCXJjID0gcGNtY2lhX2Rldl9zdXNwZW5kKGRldiwgUE1TR19TVVNQRU5EKTsKLQl1cCgmZGV2LT5zZW0pOworCWRldmljZV91bmxvY2soZGV2KTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTk4MSw5ICs5ODEsOSBAQAogewogCWludCByYzsKIAotCWRvd24oJmRldi0+c2VtKTsKKwlkZXZpY2VfbG9jayhkZXYpOwogCXJjID0gcGNtY2lhX2Rldl9yZXN1bWUoZGV2KTsKLQl1cCgmZGV2LT5zZW0pOworCWRldmljZV91bmxvY2soZGV2KTsKIAlyZXR1cm4gcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3BkNjcyOS5jIGIvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKaW5kZXggZTE3NDFjZC4uN2MyMDQ5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKKysrIGIvZHJpdmVycy9wY21jaWEvcGQ2NzI5LmMKQEAgLTQ4LDIzICs0OCwxMyBAQAogICogICAgIFNwZWNpZmllcyB0aGUgaW50ZXJydXB0IGRlbGl2ZXJ5IG1vZGUuICBUaGUgZGVmYXVsdCAoMSkgaXMgdG8gdXNlIFBDSQogICogICAgIGludGVycnVwdHM7IGEgdmFsdWUgb2YgMCBzZWxlY3RzIElTQSBpbnRlcnJ1cHRzLiBUaGlzIG11c3QgYmUgc2V0IGZvcgogICogICAgIGNvcnJlY3Qgb3BlcmF0aW9uIG9mIFBDSSBjYXJkIHJlYWRlcnMuCi0gKgotICogIGlycV9saXN0PWksaiwuLi4KLSAqICAgICBUaGlzIGxpc3QgbGltaXRzIHRoZSBzZXQgb2YgaW50ZXJydXB0cyB0aGF0IGNhbiBiZSB1c2VkIGJ5IFBDTUNJQQotICogICAgIGNhcmRzLgotICogICAgIFRoZSBkZWZhdWx0IGxpc3QgaXMgMyw0LDUsNyw5LDEwLDExLgotICogICAgIChpcnFfbGlzdCBwYXJhbWV0ZXIgaXMgbm90IHVzZWQsIGlmIGlycV9tb2RlID0gMSkKICAqLwogCiBzdGF0aWMgaW50IGlycV9tb2RlID0gMTsgLyogMCA9IElTQSBpbnRlcnJ1cHQsIDEgPSBQQ0kgaW50ZXJydXB0ICovCi1zdGF0aWMgaW50IGlycV9saXN0WzE2XTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaXJxX2xpc3RfY291bnQgPSAwOwogCiBtb2R1bGVfcGFyYW0oaXJxX21vZGUsIGludCwgMDQ0NCk7Ci1tb2R1bGVfcGFyYW1fYXJyYXkoaXJxX2xpc3QsIGludCwgJmlycV9saXN0X2NvdW50LCAwNDQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoaXJxX21vZGUsCiAJCSJpbnRlcnJ1cHQgZGVsaXZlcnkgbW9kZS4gMCA9IElTQSwgMSA9IFBDSS4gZGVmYXVsdCBpcyAxIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGlycV9saXN0LCAiaW50ZXJydXB0cyB0aGF0IGNhbiBiZSB1c2VkIGJ5IFBDTUNJQSBjYXJkcyIpOwogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBvcnRfbG9jayk7CiAKQEAgLTYwNSwxMyArNTk1LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKGlycV9saXN0X2NvdW50ID09IDApCi0JCW1hc2swID0gMHhmZmZmOwotCWVsc2UKLQkJZm9yIChpID0gbWFzazAgPSAwOyBpIDwgaXJxX2xpc3RfY291bnQ7IGkrKykKLQkJCW1hc2swIHw9ICgxPDxpcnFfbGlzdFtpXSk7Ci0KLQltYXNrMCAmPSBQRDY3X01BU0s7CisJbWFzazAgPSBQRDY3X01BU0s7CiAKIAkvKiBqdXN0IGZpbmQgaW50ZXJydXB0cyB0aGF0IGFyZW4ndCBpbiB1c2UgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMgYi9kcml2ZXJzL3BjbWNpYS9yc3JjX21nci5jCmluZGV4IGU2ZjdkNDEuLjQ1MmM4M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3JzcmNfbWdyLmMKKysrIGIvZHJpdmVycy9wY21jaWEvcnNyY19tZ3IuYwpAQCAtNzksOSArNzksOCBAQAogCiAjaWZkZWYgQ09ORklHX1g4NgogCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykgewotCQlpZiAoc3RhcnQgJiAweDMwMCkgeworCQlpZiAoc3RhcnQgJiAweDMwMCkKIAkJCXN0YXJ0ID0gKHN0YXJ0ICsgMHgzZmYpICYgfjB4M2ZmOwotCQl9CiAJfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNtY2lhL3NhMTExMV9nZW5lcmljLmMgYi9kcml2ZXJzL3BjbWNpYS9zYTExMTFfZ2VuZXJpYy5jCmluZGV4IGRlNmJjMzMuLmRiNzljYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3NhMTExMV9nZW5lcmljLmMKKysrIGIvZHJpdmVycy9wY21jaWEvc2ExMTExX2dlbmVyaWMuYwpAQCAtMjEsMTEgKzIxLDE4IEBACiAKICNpbmNsdWRlICJzYTExMTFfZ2VuZXJpYy5oIgogCisjZGVmaW5lIElEWF9JUlFfUzBfUkVBRFlfTklOVAkoMCkKKyNkZWZpbmUgSURYX0lSUV9TMF9DRF9WQUxJRAkoMSkKKyNkZWZpbmUgSURYX0lSUV9TMF9CVkQxX1NUU0NIRwkoMikKKyNkZWZpbmUgSURYX0lSUV9TMV9SRUFEWV9OSU5UCSgzKQorI2RlZmluZSBJRFhfSVJRX1MxX0NEX1ZBTElECSg0KQorI2RlZmluZSBJRFhfSVJRX1MxX0JWRDFfU1RTQ0hHCSg1KQorCiBzdGF0aWMgc3RydWN0IHBjbWNpYV9pcnFzIGlycXNbXSA9IHsKLQl7IDAsIElSUV9TMF9DRF9WQUxJRCwgICAgIlNBMTExMSBQQ01DSUEgY2FyZCBkZXRlY3QiIH0sCi0JeyAwLCBJUlFfUzBfQlZEMV9TVFNDSEcsICJTQTExMTEgUENNQ0lBIEJWRDEiICAgICAgICB9LAotCXsgMSwgSVJRX1MxX0NEX1ZBTElELCAgICAiU0ExMTExIENGIGNhcmQgZGV0ZWN0IiAgICAgfSwKLQl7IDEsIElSUV9TMV9CVkQxX1NUU0NIRywgIlNBMTExMSBDRiBCVkQxIiAgICAgICAgICAgIH0sCisJeyAwLCBOT19JUlEsICJTQTExMTEgUENNQ0lBIGNhcmQgZGV0ZWN0IiB9LAorCXsgMCwgTk9fSVJRLCAiU0ExMTExIFBDTUNJQSBCVkQxIiAgICAgICAgfSwKKwl7IDEsIE5PX0lSUSwgIlNBMTExMSBDRiBjYXJkIGRldGVjdCIgICAgIH0sCisJeyAxLCBOT19JUlEsICJTQTExMTEgQ0YgQlZEMSIgICAgICAgICAgICB9LAogfTsKIAogc3RhdGljIGludCBzYTExMTFfcGNtY2lhX2h3X2luaXQoc3RydWN0IHNvY19wY21jaWFfc29ja2V0ICpza3QpCkBAIC0xMzYsNyArMTQzLDkgQEAKIAkJcy0+c29jLm9wcyA9IG9wczsKIAkJcy0+c29jLnNvY2tldC5vd25lciA9IG9wcy0+b3duZXI7CiAJCXMtPnNvYy5zb2NrZXQuZGV2LnBhcmVudCA9ICZkZXYtPmRldjsKLQkJcy0+c29jLnNvY2tldC5wY2lfaXJxID0gcy0+c29jLm5yID8gSVJRX1MxX1JFQURZX05JTlQgOiBJUlFfUzBfUkVBRFlfTklOVDsKKwkJcy0+c29jLnNvY2tldC5wY2lfaXJxID0gcy0+c29jLm5yID8KKwkJCQlkZXYtPmlycVtJRFhfSVJRX1MwX1JFQURZX05JTlRdIDoKKwkJCQlkZXYtPmlycVtJRFhfSVJRX1MxX1JFQURZX05JTlRdOwogCQlzLT5kZXYgPSBkZXY7CiAKIAkJcmV0ID0gYWRkKCZzLT5zb2MpOwpAQCAtMTYyLDYgKzE3MSwxMiBAQAogCiAJYmFzZSA9IGRldi0+bWFwYmFzZTsKIAorCS8qIEluaXRpYWxpemUgUENNQ0lBIElSUXMgKi8KKwlpcnFzWzBdLmlycSA9IGRldi0+aXJxW0lEWF9JUlFfUzBfQ0RfVkFMSURdOworCWlycXNbMV0uaXJxID0gZGV2LT5pcnFbSURYX0lSUV9TMF9CVkQxX1NUU0NIR107CisJaXJxc1syXS5pcnEgPSBkZXYtPmlycVtJRFhfSVJRX1MxX0NEX1ZBTElEXTsKKwlpcnFzWzNdLmlycSA9IGRldi0+aXJxW0lEWF9JUlFfUzFfQlZEMV9TVFNDSEddOworCiAJLyoKIAkgKiBJbml0aWFsaXNlIHRoZSBzdXNwZW5kIHN0YXRlLgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEveHhzMTUwMF9zcy5jIGIvZHJpdmVycy9wY21jaWEveHhzMTUwMF9zcy5jCmluZGV4IDYxNTYwY2QuLmY5MDA5ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3h4czE1MDBfc3MuYworKysgYi9kcml2ZXJzL3BjbWNpYS94eHMxNTAwX3NzLmMKQEAgLTIxOCwxMSArMjE4LDcgQEAKIAogCXJldCA9IC1FTk9ERVY7CiAKLQkvKgotCSAqIHBzZXVkby1hdHRyOiAgVGhlIDMyYml0IGFkZHJlc3Mgb2YgdGhlIFBDTUNJQSBhdHRyaWJ1dGUgc3BhY2UKLQkgKiBmb3IgdGhpcyBzb2NrZXQgKHVzdWFsbHkgdGhlIDM2Yml0IGFkZHJlc3Mgc2hpZnRlZCA0IHRvIHRoZQotCSAqIHJpZ2h0KS4KLQkgKi8KKwkvKiAzNmJpdCBQQ01DSUEgQXR0cmlidXRlIGFyZWEgYWRkcmVzcyAqLwogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicGNtY2lhLWF0dHIiKTsKIAlpZiAoIXIpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAibWlzc2luZyAncGNtY2lhLWF0dHInIHJlc291cmNlIVxuIik7CkBAIC0yMzAsMTAgKzIyNiw3IEBACiAJfQogCXNvY2stPnBoeXNfYXR0ciA9IHItPnN0YXJ0OwogCi0JLyoKLQkgKiBwc2V1ZG8tbWVtOiAgVGhlIDMyYml0IGFkZHJlc3Mgb2YgdGhlIFBDTUNJQSBtZW1vcnkgc3BhY2UgZm9yCi0JICogdGhpcyBzb2NrZXQgKHVzdWFsbHkgdGhlIDM2Yml0IGFkZHJlc3Mgc2hpZnRlZCA0IHRvIHRoZSByaWdodCkKLQkgKi8KKwkvKiAzNmJpdCBQQ01DSUEgTWVtb3J5IGFyZWEgYWRkcmVzcyAqLwogCXIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAicGNtY2lhLW1lbSIpOwogCWlmICghcikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtaXNzaW5nICdwY21jaWEtbWVtJyByZXNvdXJjZSFcbiIpOwpAQCAtMjQxLDEwICsyMzQsNyBAQAogCX0KIAlzb2NrLT5waHlzX21lbSA9IHItPnN0YXJ0OwogCi0JLyoKLQkgKiBwc2V1ZG8taW86ICBUaGUgMzJiaXQgYWRkcmVzcyBvZiB0aGUgUENNQ0lBIElPIHNwYWNlIGZvciB0aGlzCi0JICogc29ja2V0ICh1c3VhbGx5IHRoZSAzNmJpdCBhZGRyZXNzIHNoaWZ0ZWQgNCB0byB0aGUgcmlnaHQpLgotCSAqLworCS8qIDM2Yml0IFBDTUNJQSBJTyBhcmVhIGFkZHJlc3MgKi8KIAlyID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInBjbWNpYS1pbyIpOwogCWlmICghcikgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtaXNzaW5nICdwY21jaWEtaW8nIHJlc291cmNlIVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS95ZW50YV9zb2NrZXQuYyBiL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCmluZGV4IGI4NTM3NWYuLjk2N2M3NjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL3llbnRhX3NvY2tldC5jCkBAIC0xNDA4LDEwICsxNDA4LDEwIEBACiAJQ0JfSUQoUENJX1ZFTkRPUl9JRF9USSwgUENJX0RFVklDRV9JRF9USV83NTEwLCBUSTEyWFgpLAogCUNCX0lEKFBDSV9WRU5ET1JfSURfVEksIFBDSV9ERVZJQ0VfSURfVElfNzYxMCwgVEkxMlhYKSwKIAotCUNCX0lEKFBDSV9WRU5ET1JfSURfRU5FLCBQQ0lfREVWSUNFX0lEX0VORV83MTAsIFRJMTJYWCksCi0JQ0JfSUQoUENJX1ZFTkRPUl9JRF9FTkUsIFBDSV9ERVZJQ0VfSURfRU5FXzcxMiwgVEkxMlhYKSwKLQlDQl9JRChQQ0lfVkVORE9SX0lEX0VORSwgUENJX0RFVklDRV9JRF9FTkVfNzIwLCBUSTEyWFgpLAotCUNCX0lEKFBDSV9WRU5ET1JfSURfRU5FLCBQQ0lfREVWSUNFX0lEX0VORV83MjIsIFRJMTJYWCksCisJQ0JfSUQoUENJX1ZFTkRPUl9JRF9FTkUsIFBDSV9ERVZJQ0VfSURfRU5FXzcxMCwgRU5FKSwKKwlDQl9JRChQQ0lfVkVORE9SX0lEX0VORSwgUENJX0RFVklDRV9JRF9FTkVfNzEyLCBFTkUpLAorCUNCX0lEKFBDSV9WRU5ET1JfSURfRU5FLCBQQ0lfREVWSUNFX0lEX0VORV83MjAsIEVORSksCisJQ0JfSUQoUENJX1ZFTkRPUl9JRF9FTkUsIFBDSV9ERVZJQ0VfSURfRU5FXzcyMiwgRU5FKSwKIAlDQl9JRChQQ0lfVkVORE9SX0lEX0VORSwgUENJX0RFVklDRV9JRF9FTkVfMTIxMSwgRU5FKSwKIAlDQl9JRChQQ0lfVkVORE9SX0lEX0VORSwgUENJX0RFVklDRV9JRF9FTkVfMTIyNSwgRU5FKSwKIAlDQl9JRChQQ0lfVkVORE9SX0lEX0VORSwgUENJX0RFVklDRV9JRF9FTkVfMTQxMCwgRU5FKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9LY29uZmlnCmluZGV4IDY4NDhmMjEuLmU2MzFkYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L0tjb25maWcKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvS2NvbmZpZwpAQCAtNTksNiArNTksOCBAQAogCXNlbGVjdCBORVdfTEVEUwogCXNlbGVjdCBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCiAJZGVwZW5kcyBvbiBJTlBVVAorCWRlcGVuZHMgb24gUkZLSUxMIHx8IFJGS0lMTCA9IG4KKwlzZWxlY3QgSU5QVVRfU1BBUlNFS01BUAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgdGhlIG5ldyBMaW51eCBkcml2ZXIgZm9yIEFzdXMgbGFwdG9wcy4gSXQgbWF5IGFsc28gc3VwcG9ydCBzb21lCiAJICBNRURJT04sIEpWQyBvciBWSUNUT1IgbGFwdG9wcy4gSXQgbWFrZXMgYWxsIHRoZSBleHRyYSBidXR0b25zIGdlbmVyYXRlCkBAIC0xNDgsNiArMTUwLDcgQEAKIAl0cmlzdGF0ZSAiTVNJIExhcHRvcCBFeHRyYXMiCiAJZGVwZW5kcyBvbiBBQ1BJCiAJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCisJZGVwZW5kcyBvbiBSRktJTEwKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciBsYXB0b3BzIGJ1aWx0IGJ5IE1TSSAoTUlDUk8tU1RBUgogCSAgSU5URVJOQVRJT05BTCk6CkBAIC0xNzcsNiArMTgwLDcgQEAKIAl0cmlzdGF0ZSAiQ29tcGFsIExhcHRvcCBFeHRyYXMiCiAJZGVwZW5kcyBvbiBBQ1BJCiAJZGVwZW5kcyBvbiBCQUNLTElHSFRfQ0xBU1NfREVWSUNFCisJZGVwZW5kcyBvbiBSRktJTEwKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgZHJpdmVyIGZvciBsYXB0b3BzIGJ1aWx0IGJ5IENvbXBhbDoKIApAQCAtMzIwLDkgKzMyNCwxNSBAQAogCSAgc2VydmVyIHJ1bm5pbmcsIHBoYXNlIG9mIHRoZSBtb29uLCBhbmQgdGhlIGN1cnJlbnQgbW9vZCBvZgogCSAgU2Nocm9lZGluZ2VyJ3MgY2F0LiAgSWYgeW91IGNhbiB1c2UgWC5vcmcncyBSYW5kUiB0byBjb250cm9sCiAJICB5b3VyIFRoaW5rUGFkJ3MgdmlkZW8gb3V0cHV0IHBvcnRzIGluc3RlYWQgb2YgdGhpcyBmZWF0dXJlLAotCSAgZG9uJ3QgdGhpbmsgdHdpY2U6IGRvIGl0IGFuZCBzYXkgTiBoZXJlIHRvIHNhdmUgc29tZSBtZW1vcnkuCisJICBkb24ndCB0aGluayB0d2ljZTogZG8gaXQgYW5kIHNheSBOIGhlcmUgdG8gc2F2ZSBtZW1vcnkgYW5kIGF2b2lkCisJICBiYWQgaW50ZXJhY3Rpb25zIHdpdGggWC5vcmcuCiAKLQkgIElmIHlvdSBhcmUgbm90IHN1cmUsIHNheSBZIGhlcmUuCisJICBOT1RFOiBhY2Nlc3MgdG8gdGhpcyBmZWF0dXJlIGlzIGxpbWl0ZWQgdG8gcHJvY2Vzc2VzIHdpdGggdGhlCisJICBDQVBfU1lTX0FETUlOIGNhcGFiaWxpdHksIHRvIGF2b2lkIGxvY2FsIERvUyBpc3N1ZXMgaW4gcGxhdGZvcm1zCisJICB3aGVyZSBpdCBpbnRlcmFjdHMgYmFkbHkgd2l0aCBYLm9yZy4KKworCSAgSWYgeW91IGFyZSBub3Qgc3VyZSwgc2F5IFkgaGVyZSBidXQgZG8gdHJ5IHRvIGNoZWNrIGlmIHlvdSBjb3VsZAorCSAgYmUgdXNpbmcgWC5vcmcgUmFuZFIgaW5zdGVhZC4KIAogY29uZmlnIFRISU5LUEFEX0FDUElfSE9US0VZX1BPTEwKIAlib29sICJTdXBwb3J0IE5WUkFNIHBvbGxpbmcgZm9yIGhvdCBrZXlzIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXMtbGFwdG9wLmMKaW5kZXggNjFhMWM3NS4uNzkxZmNmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1cy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzLWxhcHRvcC5jCkBAIC00NSw1OCArNDUsMjMgQEAKICNpbmNsdWRlIDxsaW51eC9mYi5oPgogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnB1dC9zcGFyc2Uta2V5bWFwLmg+CisjaW5jbHVkZSA8bGludXgvcmZraWxsLmg+CiAjaW5jbHVkZSA8YWNwaS9hY3BpX2RyaXZlcnMuaD4KICNpbmNsdWRlIDxhY3BpL2FjcGlfYnVzLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogCi0jZGVmaW5lIEFTVVNfTEFQVE9QX1ZFUlNJT04gIjAuNDIiCisjZGVmaW5lIEFTVVNfTEFQVE9QX1ZFUlNJT04JIjAuNDIiCiAKLSNkZWZpbmUgQVNVU19IT1RLX05BTUUgICAgICAgICAgIkFzdXMgTGFwdG9wIFN1cHBvcnQiCi0jZGVmaW5lIEFTVVNfSE9US19DTEFTUyAgICAgICAgICJob3RrZXkiCi0jZGVmaW5lIEFTVVNfSE9US19ERVZJQ0VfTkFNRSAgICJIb3RrZXkiCi0jZGVmaW5lIEFTVVNfSE9US19GSUxFICAgICAgICAgIEtCVUlMRF9NT0ROQU1FCi0jZGVmaW5lIEFTVVNfSE9US19QUkVGSVggICAgICAgICJcXF9TQi5BVEtELiIKLQotCi0vKgotICogU29tZSBldmVudHMgd2UgdXNlLCBzYW1lIGZvciBhbGwgQXN1cwotICovCi0jZGVmaW5lIEFUS0RfQlJfVVAgICAgICAgMHgxMAotI2RlZmluZSBBVEtEX0JSX0RPV04gICAgIDB4MjAKLSNkZWZpbmUgQVRLRF9MQ0RfT04gICAgICAweDMzCi0jZGVmaW5lIEFUS0RfTENEX09GRiAgICAgMHgzNAotCi0vKgotICogS25vd24gYml0cyByZXR1cm5lZCBieSBcX1NCLkFUS0QuSFdSUwotICovCi0jZGVmaW5lIFdMX0hXUlMgICAgIDB4ODAKLSNkZWZpbmUgQlRfSFdSUyAgICAgMHgxMDAKLQotLyoKLSAqIEZsYWdzIGZvciBob3RrIHN0YXR1cwotICogV0xfT04gYW5kIEJUX09OIGFyZSBhbHNvIHVzZWQgZm9yIHdpcmVsZXNzX3N0YXR1cygpCi0gKi8KLSNkZWZpbmUgV0xfT04gICAgICAgMHgwMQkvKiBpbnRlcm5hbCBXaWZpICovCi0jZGVmaW5lIEJUX09OICAgICAgIDB4MDIJLyogaW50ZXJuYWwgQmx1ZXRvb3RoICovCi0jZGVmaW5lIE1MRURfT04gICAgIDB4MDQJLyogbWFpbCBMRUQgKi8KLSNkZWZpbmUgVExFRF9PTiAgICAgMHgwOAkvKiB0b3VjaHBhZCBMRUQgKi8KLSNkZWZpbmUgUkxFRF9PTiAgICAgMHgxMAkvKiBSZWNvcmQgTEVEICovCi0jZGVmaW5lIFBMRURfT04gICAgIDB4MjAJLyogUGhvbmUgTEVEICovCi0jZGVmaW5lIEdMRURfT04gICAgIDB4NDAJLyogR2FtaW5nIExFRCAqLwotI2RlZmluZSBMQ0RfT04gICAgICAweDgwCS8qIExDRCBiYWNrbGlnaHQgKi8KLSNkZWZpbmUgR1BTX09OICAgICAgMHgxMDAJLyogR1BTICovCi0jZGVmaW5lIEtFWV9PTiAgICAgIDB4MjAwCS8qIEtleWJvYXJkIGJhY2tsaWdodCAqLwotCi0jZGVmaW5lIEFTVVNfTE9HICAgIEFTVVNfSE9US19GSUxFICI6ICIKLSNkZWZpbmUgQVNVU19FUlIgICAgS0VSTl9FUlIgICAgQVNVU19MT0cKLSNkZWZpbmUgQVNVU19XQVJOSU5HICAgIEtFUk5fV0FSTklORyAgICBBU1VTX0xPRwotI2RlZmluZSBBU1VTX05PVElDRSBLRVJOX05PVElDRSBBU1VTX0xPRwotI2RlZmluZSBBU1VTX0lORk8gICBLRVJOX0lORk8gICBBU1VTX0xPRwotI2RlZmluZSBBU1VTX0RFQlVHICBLRVJOX0RFQlVHICBBU1VTX0xPRworI2RlZmluZSBBU1VTX0xBUFRPUF9OQU1FCSJBc3VzIExhcHRvcCBTdXBwb3J0IgorI2RlZmluZSBBU1VTX0xBUFRPUF9DTEFTUwkiaG90a2V5IgorI2RlZmluZSBBU1VTX0xBUFRPUF9ERVZJQ0VfTkFNRQkiSG90a2V5IgorI2RlZmluZSBBU1VTX0xBUFRPUF9GSUxFCUtCVUlMRF9NT0ROQU1FCisjZGVmaW5lIEFTVVNfTEFQVE9QX1BSRUZJWAkiXFxfU0IuQVRLRC4iCiAKIE1PRFVMRV9BVVRIT1IoIkp1bGllbiBMZXJvdWdlLCBLYXJvbCBLb3ppbW9yLCBDb3JlbnRpbiBDaGFyeSIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKEFTVVNfSE9US19OQU1FKTsKK01PRFVMRV9ERVNDUklQVElPTihBU1VTX0xBUFRPUF9OQU1FKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogLyoKQEAgLTExMywyMjUgKzc4LDIwOSBAQAogbW9kdWxlX3BhcmFtKHdhcGYsIHVpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyh3YXBmLCAiV0FQRiB2YWx1ZSIpOwogCi0jZGVmaW5lIEFTVVNfSEFORExFKG9iamVjdCwgcGF0aHMuLi4pCQkJCQlcCi0Jc3RhdGljIGFjcGlfaGFuZGxlICBvYmplY3QjI19oYW5kbGUgPSBOVUxMOwkJCVwKLQlzdGF0aWMgY2hhciAqb2JqZWN0IyNfcGF0aHNbXSA9IHsgcGF0aHMgfQorc3RhdGljIHVpbnQgd2xhbl9zdGF0dXMgPSAxOworc3RhdGljIHVpbnQgYmx1ZXRvb3RoX3N0YXR1cyA9IDE7CisKK21vZHVsZV9wYXJhbSh3bGFuX3N0YXR1cywgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHdsYW5fc3RhdHVzLCAiU2V0IHRoZSB3aXJlbGVzcyBzdGF0dXMgb24gYm9vdCAiCisJCSAiKDAgPSBkaXNhYmxlZCwgMSA9IGVuYWJsZWQsIC0xID0gZG9uJ3QgZG8gYW55dGhpbmcpLiAiCisJCSAiZGVmYXVsdCBpcyAxIik7CisKK21vZHVsZV9wYXJhbShibHVldG9vdGhfc3RhdHVzLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoYmx1ZXRvb3RoX3N0YXR1cywgIlNldCB0aGUgd2lyZWxlc3Mgc3RhdHVzIG9uIGJvb3QgIgorCQkgIigwID0gZGlzYWJsZWQsIDEgPSBlbmFibGVkLCAtMSA9IGRvbid0IGRvIGFueXRoaW5nKS4gIgorCQkgImRlZmF1bHQgaXMgMSIpOworCisvKgorICogU29tZSBldmVudHMgd2UgdXNlLCBzYW1lIGZvciBhbGwgQXN1cworICovCisjZGVmaW5lIEFUS0RfQlJfVVAJMHgxMAkvKiAoZXZlbnQgJiB+QVRLRF9CUl9VUCkgPSBicmlnaHRuZXNzIGxldmVsICovCisjZGVmaW5lIEFUS0RfQlJfRE9XTgkweDIwCS8qIChldmVudCAmIH5BVEtEX0JSX0RPV04pID0gYnJpdGdobmVzcyBsZXZlbCAqLworI2RlZmluZSBBVEtEX0JSX01JTglBVEtEX0JSX1VQCisjZGVmaW5lIEFUS0RfQlJfTUFYCShBVEtEX0JSX0RPV04gfCAweEYpCS8qIDB4MmYgKi8KKyNkZWZpbmUgQVRLRF9MQ0RfT04JMHgzMworI2RlZmluZSBBVEtEX0xDRF9PRkYJMHgzNAorCisvKgorICogS25vd24gYml0cyByZXR1cm5lZCBieSBcX1NCLkFUS0QuSFdSUworICovCisjZGVmaW5lIFdMX0hXUlMJCTB4ODAKKyNkZWZpbmUgQlRfSFdSUwkJMHgxMDAKKworLyoKKyAqIEZsYWdzIGZvciBob3RrIHN0YXR1cworICogV0xfT04gYW5kIEJUX09OIGFyZSBhbHNvIHVzZWQgZm9yIHdpcmVsZXNzX3N0YXR1cygpCisgKi8KKyNkZWZpbmUgV0xfUlNUUwkJMHgwMQkvKiBpbnRlcm5hbCBXaWZpICovCisjZGVmaW5lIEJUX1JTVFMJCTB4MDIJLyogaW50ZXJuYWwgQmx1ZXRvb3RoICovCiAKIC8qIExFRCAqLwotQVNVU19IQU5ETEUobWxlZF9zZXQsIEFTVVNfSE9US19QUkVGSVggIk1MRUQiKTsKLUFTVVNfSEFORExFKHRsZWRfc2V0LCBBU1VTX0hPVEtfUFJFRklYICJUTEVEIik7Ci1BU1VTX0hBTkRMRShybGVkX3NldCwgQVNVU19IT1RLX1BSRUZJWCAiUkxFRCIpOwkvKiBXMUpDICovCi1BU1VTX0hBTkRMRShwbGVkX3NldCwgQVNVU19IT1RLX1BSRUZJWCAiUExFRCIpOwkvKiBBN0ogKi8KLUFTVVNfSEFORExFKGdsZWRfc2V0LCBBU1VTX0hPVEtfUFJFRklYICJHTEVEIik7CS8qIEcxLCBHMiAocHJvYmFibHkpICovCisjZGVmaW5lIE1FVEhPRF9NTEVECQkiTUxFRCIKKyNkZWZpbmUgTUVUSE9EX1RMRUQJCSJUTEVEIgorI2RlZmluZSBNRVRIT0RfUkxFRAkJIlJMRUQiCS8qIFcxSkMgKi8KKyNkZWZpbmUgTUVUSE9EX1BMRUQJCSJQTEVEIgkvKiBBN0ogKi8KKyNkZWZpbmUgTUVUSE9EX0dMRUQJCSJHTEVEIgkvKiBHMSwgRzIgKHByb2JhYmx5KSAqLwogCiAvKiBMRUREICovCi1BU1VTX0hBTkRMRShsZWRkX3NldCwgQVNVU19IT1RLX1BSRUZJWCAiU0xDTSIpOworI2RlZmluZSBNRVRIT0RfTEVERAkJIlNMQ00iCiAKIC8qCiAgKiBCbHVldG9vdGggYW5kIFdMQU4KICAqIFdMRUQgYW5kIEJMRUQgYXJlIG5vdCBoYW5kbGVkIGxpa2Ugb3RoZXIgWExFRCwgYmVjYXVzZSBpbiBzb21lIGRzZHQKICAqIHRoZXkgYWxzbyBjb250cm9sIHRoZSBXTEFOL0JsdWV0b290aCBkZXZpY2UuCiAgKi8KLUFTVVNfSEFORExFKHdsX3N3aXRjaCwgQVNVU19IT1RLX1BSRUZJWCAiV0xFRCIpOwotQVNVU19IQU5ETEUoYnRfc3dpdGNoLCBBU1VTX0hPVEtfUFJFRklYICJCTEVEIik7Ci1BU1VTX0hBTkRMRSh3aXJlbGVzc19zdGF0dXMsIEFTVVNfSE9US19QUkVGSVggIlJTVFMiKTsJLyogQWxsIG5ldyBtb2RlbHMgKi8KKyNkZWZpbmUgTUVUSE9EX1dMQU4JCSJXTEVEIgorI2RlZmluZSBNRVRIT0RfQkxVRVRPT1RICSJCTEVEIgorI2RlZmluZSBNRVRIT0RfV0xfU1RBVFVTCSJSU1RTIgogCiAvKiBCcmlnaHRuZXNzICovCi1BU1VTX0hBTkRMRShicmlnaHRuZXNzX3NldCwgQVNVU19IT1RLX1BSRUZJWCAiU1BMViIpOwotQVNVU19IQU5ETEUoYnJpZ2h0bmVzc19nZXQsIEFTVVNfSE9US19QUkVGSVggIkdQTFYiKTsKKyNkZWZpbmUgTUVUSE9EX0JSSUdIVE5FU1NfU0VUCSJTUExWIgorI2RlZmluZSBNRVRIT0RfQlJJR0hUTkVTU19HRVQJIkdQTFYiCiAKIC8qIEJhY2tsaWdodCAqLwotQVNVU19IQU5ETEUobGNkX3N3aXRjaCwgIlxcX1NCLlBDSTAuU0JSRy5FQzAuX1ExMCIsCS8qIEFsbCBuZXcgbW9kZWxzICovCi0JICAgICJcXF9TQi5QQ0kwLklTQS5FQzAuX1ExMCIsCS8qIEExeCAqLwotCSAgICAiXFxfU0IuUENJMC5QWDQwLkVDRDAuX1ExMCIsCS8qIEwzQyAqLwotCSAgICAiXFxfU0IuUENJMC5QWDQwLkVDMC5RMTAiLAkvKiBNMUEgKi8KLQkgICAgIlxcX1NCLlBDSTAuTFBDQi5FQzAuX1ExMCIsCS8qIFAzMCAqLwotCSAgICAiXFxfU0IuUENJMC5MUENCLkVDMC5fUTBFIiwgLyogUDMwL1AzNSAqLwotCSAgICAiXFxfU0IuUENJMC5QWDQwLlExMCIsCS8qIFMxeCAqLwotCSAgICAiXFxRMTAiKTsJCS8qIEEyeCwgTDJELCBMM0QsIE0yRSAqLworc3RhdGljIGFjcGlfaGFuZGxlIGxjZF9zd2l0Y2hfaGFuZGxlOworc3RhdGljIGNvbnN0IGNoYXIgKmxjZF9zd2l0Y2hfcGF0aHNbXSA9IHsKKyAgIlxcX1NCLlBDSTAuU0JSRy5FQzAuX1ExMCIsCS8qIEFsbCBuZXcgbW9kZWxzICovCisgICJcXF9TQi5QQ0kwLklTQS5FQzAuX1ExMCIsCS8qIEExeCAqLworICAiXFxfU0IuUENJMC5QWDQwLkVDRDAuX1ExMCIsCS8qIEwzQyAqLworICAiXFxfU0IuUENJMC5QWDQwLkVDMC5RMTAiLAkvKiBNMUEgKi8KKyAgIlxcX1NCLlBDSTAuTFBDQi5FQzAuX1ExMCIsCS8qIFAzMCAqLworICAiXFxfU0IuUENJMC5MUENCLkVDMC5fUTBFIiwgLyogUDMwL1AzNSAqLworICAiXFxfU0IuUENJMC5QWDQwLlExMCIsCS8qIFMxeCAqLworICAiXFxRMTAifTsJCS8qIEEyeCwgTDJELCBMM0QsIE0yRSAqLwogCiAvKiBEaXNwbGF5ICovCi1BU1VTX0hBTkRMRShkaXNwbGF5X3NldCwgQVNVU19IT1RLX1BSRUZJWCAiU0RTUCIpOwotQVNVU19IQU5ETEUoZGlzcGxheV9nZXQsCi0JICAgIC8qIEE2QiwgQTZLIEE2UiBBN0QgRjNKTSBMNFIgTTZSIEEzRyBNNkEgTTZWIFZYLTEgVjZKIFY2ViBXM1ogKi8KLQkgICAgIlxcX1NCLlBDSTAuUDBQMS5WR0EuR0VURCIsCi0JICAgIC8qIEEzRSBBNEssIEE0RCBBNEwgQTZKIEE3SiBBOEogWjcxViBNOVYgUzVBIE01QSB6MzNBIFcxSmMgVzJWIEcxICovCi0JICAgICJcXF9TQi5QQ0kwLlAwUDIuVkdBLkdFVEQiLAotCSAgICAvKiBBNlYgQTZRICovCi0JICAgICJcXF9TQi5QQ0kwLlAwUDMuVkdBLkdFVEQiLAotCSAgICAvKiBBNlQsIEE2TSAqLwotCSAgICAiXFxfU0IuUENJMC5QMFBBLlZHQS5HRVREIiwKLQkgICAgLyogTDNDICovCi0JICAgICJcXF9TQi5QQ0kwLlBDSTEuVkdBQy5OTUFQIiwKLQkgICAgLyogWjk2RiAqLwotCSAgICAiXFxfU0IuUENJMC5WR0EuR0VURCIsCi0JICAgIC8qIEEyRCAqLwotCSAgICAiXFxBQ1REIiwKLQkgICAgLyogQTRHIFo3MUEgVzFOIFc1QSBXNUYgTTJOIE0zTiBNNU4gTTZOIFMxTiBTNU4gKi8KLQkgICAgIlxcQURWRyIsCi0JICAgIC8qIFAzMCAqLwotCSAgICAiXFxETlhUIiwKLQkgICAgLyogQTJIIEQxIEwyRCBMM0QgTDNIIEwyRSBMNUQgTDVDIE0xQSBNMkUgTDRMIFczViAqLwotCSAgICAiXFxJTkZCIiwKLQkgICAgLyogQTNGIEE2RiBBM04gQTNMIE02TiBXM04gVzZBICovCi0JICAgICJcXFNTVEUiKTsKKyNkZWZpbmUgTUVUSE9EX1NXSVRDSF9ESVNQTEFZCSJTRFNQIgogCi1BU1VTX0hBTkRMRShsc19zd2l0Y2gsIEFTVVNfSE9US19QUkVGSVggIkFMU0MiKTsgLyogWjcxQSBaNzFWICovCi1BU1VTX0hBTkRMRShsc19sZXZlbCwgQVNVU19IT1RLX1BSRUZJWCAiQUxTTCIpOwkgLyogWjcxQSBaNzFWICovCitzdGF0aWMgYWNwaV9oYW5kbGUgZGlzcGxheV9nZXRfaGFuZGxlOworc3RhdGljIGNvbnN0IGNoYXIgKmRpc3BsYXlfZ2V0X3BhdGhzW10gPSB7CisgIC8qIEE2QiwgQTZLIEE2UiBBN0QgRjNKTSBMNFIgTTZSIEEzRyBNNkEgTTZWIFZYLTEgVjZKIFY2ViBXM1ogKi8KKyAgIlxcX1NCLlBDSTAuUDBQMS5WR0EuR0VURCIsCisgIC8qIEEzRSBBNEssIEE0RCBBNEwgQTZKIEE3SiBBOEogWjcxViBNOVYgUzVBIE01QSB6MzNBIFcxSmMgVzJWIEcxICovCisgICJcXF9TQi5QQ0kwLlAwUDIuVkdBLkdFVEQiLAorICAvKiBBNlYgQTZRICovCisgICJcXF9TQi5QQ0kwLlAwUDMuVkdBLkdFVEQiLAorICAvKiBBNlQsIEE2TSAqLworICAiXFxfU0IuUENJMC5QMFBBLlZHQS5HRVREIiwKKyAgLyogTDNDICovCisgICJcXF9TQi5QQ0kwLlBDSTEuVkdBQy5OTUFQIiwKKyAgLyogWjk2RiAqLworICAiXFxfU0IuUENJMC5WR0EuR0VURCIsCisgIC8qIEEyRCAqLworICAiXFxBQ1REIiwKKyAgLyogQTRHIFo3MUEgVzFOIFc1QSBXNUYgTTJOIE0zTiBNNU4gTTZOIFMxTiBTNU4gKi8KKyAgIlxcQURWRyIsCisgIC8qIFAzMCAqLworICAiXFxETlhUIiwKKyAgLyogQTJIIEQxIEwyRCBMM0QgTDNIIEwyRSBMNUQgTDVDIE0xQSBNMkUgTDRMIFczViAqLworICAiXFxJTkZCIiwKKyAgLyogQTNGIEE2RiBBM04gQTNMIE02TiBXM04gVzZBICovCisgICJcXFNTVEUifTsKKworI2RlZmluZSBNRVRIT0RfQUxTX0NPTlRST0wJIkFMU0MiIC8qIFo3MUEgWjcxViAqLworI2RlZmluZSBNRVRIT0RfQUxTX0xFVkVMCSJBTFNMIiAvKiBaNzFBIFo3MVYgKi8KIAogLyogR1BTICovCiAvKiBSMkggdXNlIGRpZmZlcmVudCBoYW5kbGUgZm9yIEdQUyBvbi9vZmYgKi8KLUFTVVNfSEFORExFKGdwc19vbiwgQVNVU19IT1RLX1BSRUZJWCAiU0RPTiIpOwkvKiBSMkggKi8KLUFTVVNfSEFORExFKGdwc19vZmYsIEFTVVNfSE9US19QUkVGSVggIlNET0YiKTsJLyogUjJIICovCi1BU1VTX0hBTkRMRShncHNfc3RhdHVzLCBBU1VTX0hPVEtfUFJFRklYICJHUFNUIik7CisjZGVmaW5lIE1FVEhPRF9HUFNfT04JCSJTRE9OIgorI2RlZmluZSBNRVRIT0RfR1BTX09GRgkJIlNET0YiCisjZGVmaW5lIE1FVEhPRF9HUFNfU1RBVFVTCSJHUFNUIgogCiAvKiBLZXlib2FyZCBsaWdodCAqLwotQVNVU19IQU5ETEUoa2xlZF9zZXQsIEFTVVNfSE9US19QUkVGSVggIlNMS0IiKTsKLUFTVVNfSEFORExFKGtsZWRfZ2V0LCBBU1VTX0hPVEtfUFJFRklYICJHTEtCIik7CisjZGVmaW5lIE1FVEhPRF9LQkRfTElHSFRfU0VUCSJTTEtCIgorI2RlZmluZSBNRVRIT0RfS0JEX0xJR0hUX0dFVAkiR0xLQiIKKworLyoKKyAqIERlZmluZSBhIHNwZWNpZmljIGxlZCBzdHJ1Y3R1cmUgdG8ga2VlcCB0aGUgbWFpbiBzdHJ1Y3R1cmUgY2xlYW4KKyAqLworc3RydWN0IGFzdXNfbGVkIHsKKwlpbnQgd2s7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CisJc3RydWN0IGxlZF9jbGFzc2RldiBsZWQ7CisJc3RydWN0IGFzdXNfbGFwdG9wICphc3VzOworCWNvbnN0IGNoYXIgKm1ldGhvZDsKK307CiAKIC8qCiAgKiBUaGlzIGlzIHRoZSBtYWluIHN0cnVjdHVyZSwgd2UgY2FuIHVzZSBpdCB0byBzdG9yZSBhbnl0aGluZyBpbnRlcmVzdGluZwogICogYWJvdXQgdGhlIGhvdGsgZGV2aWNlCiAgKi8KLXN0cnVjdCBhc3VzX2hvdGsgeworc3RydWN0IGFzdXNfbGFwdG9wIHsKIAljaGFyICpuYW1lOwkJLyogbGFwdG9wIG5hbWUgKi8KLQlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsJLyogdGhlIGRldmljZSB3ZSBhcmUgaW4gKi8KKworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqZHNkdF9pbmZvOworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldmljZTsKKwlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsJCS8qIHRoZSBkZXZpY2Ugd2UgYXJlIGluICovCisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJhY2tsaWdodF9kZXZpY2U7CisKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldjsKKwlzdHJ1Y3Qga2V5X2VudHJ5ICprZXltYXA7CisKKwlzdHJ1Y3QgYXN1c19sZWQgbWxlZDsKKwlzdHJ1Y3QgYXN1c19sZWQgdGxlZDsKKwlzdHJ1Y3QgYXN1c19sZWQgcmxlZDsKKwlzdHJ1Y3QgYXN1c19sZWQgcGxlZDsKKwlzdHJ1Y3QgYXN1c19sZWQgZ2xlZDsKKwlzdHJ1Y3QgYXN1c19sZWQga2xlZDsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbGVkX3dvcmtxdWV1ZTsKKworCWludCB3aXJlbGVzc19zdGF0dXM7CisJYm9vbCBoYXZlX3JzdHM7CisJaW50IGxjZF9zdGF0ZTsKKworCXN0cnVjdCByZmtpbGwgKmdwc19yZmtpbGw7CisKIAlhY3BpX2hhbmRsZSBoYW5kbGU7CS8qIHRoZSBoYW5kbGUgb2YgdGhlIGhvdGsgZGV2aWNlICovCi0JY2hhciBzdGF0dXM7CQkvKiBzdGF0dXMgb2YgdGhlIGhvdGssIGZvciBMRURzLCAuLi4gKi8KIAl1MzIgbGVkZF9zdGF0dXM7CS8qIHN0YXR1cyBvZiB0aGUgTEVEIGRpc3BsYXkgKi8KIAl1OCBsaWdodF9sZXZlbDsJCS8qIGxpZ2h0IHNlbnNvciBsZXZlbCAqLwogCXU4IGxpZ2h0X3N3aXRjaDsJLyogbGlnaHQgc2Vuc29yIHN3aXRjaCB2YWx1ZSAqLwogCXUxNiBldmVudF9jb3VudFsxMjhdOwkvKiBjb3VudCBmb3IgZWFjaCBldmVudCBUT0RPIG1ha2UgdGhpcyBiZXR0ZXIgKi8KLQlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dGRldjsKIAl1MTYgKmtleWNvZGVfbWFwOwogfTsKIAotLyoKLSAqIFRoaXMgaGVhZGVyIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFsbG93IHByb3BlciBjb25maWd1cmF0aW9uIGdpdmVuIG1vZGVsLAotICogcmV2aXNpb24gbnVtYmVyICwgLi4uIHRoaXMgaW5mbyBjYW5ub3QgZ28gaW4gc3RydWN0IGFzdXNfaG90ayBiZWNhdXNlIGl0IGlzCi0gKiBhdmFpbGFibGUgYmVmb3JlIHRoZSBob3RrCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYWNwaV90YWJsZV9oZWFkZXIgKmFzdXNfaW5mbzsKLQotLyogVGhlIGFjdHVhbCBkZXZpY2UgdGhlIGRyaXZlciBiaW5kcyB0byAqLwotc3RhdGljIHN0cnVjdCBhc3VzX2hvdGsgKmhvdGs7Ci0KLS8qCi0gKiBUaGUgaG90a2V5IGRyaXZlciBkZWNsYXJhdGlvbgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGFjcGlfZGV2aWNlX2lkIGFzdXNfZGV2aWNlX2lkc1tdID0gewotCXsiQVRLMDEwMCIsIDB9LAotCXsiQVRLMDEwMSIsIDB9LAotCXsiIiwgMH0sCi19OwotTU9EVUxFX0RFVklDRV9UQUJMRShhY3BpLCBhc3VzX2RldmljZV9pZHMpOwotCi1zdGF0aWMgaW50IGFzdXNfaG90a19hZGQoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UpOwotc3RhdGljIGludCBhc3VzX2hvdGtfcmVtb3ZlKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCBpbnQgdHlwZSk7Ci1zdGF0aWMgdm9pZCBhc3VzX2hvdGtfbm90aWZ5KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCB1MzIgZXZlbnQpOwotCi1zdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFzdXNfaG90a19kcml2ZXIgPSB7Ci0JLm5hbWUgPSBBU1VTX0hPVEtfTkFNRSwKLQkuY2xhc3MgPSBBU1VTX0hPVEtfQ0xBU1MsCi0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLmlkcyA9IGFzdXNfZGV2aWNlX2lkcywKLQkuZmxhZ3MgPSBBQ1BJX0RSSVZFUl9BTExfTk9USUZZX0VWRU5UUywKLQkub3BzID0gewotCQkuYWRkID0gYXN1c19ob3RrX2FkZCwKLQkJLnJlbW92ZSA9IGFzdXNfaG90a19yZW1vdmUsCi0JCS5ub3RpZnkgPSBhc3VzX2hvdGtfbm90aWZ5LAotCQl9LAotfTsKLQotLyogVGhlIGJhY2tsaWdodCBkZXZpY2UgL3N5cy9jbGFzcy9iYWNrbGlnaHQgKi8KLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYXN1c19iYWNrbGlnaHRfZGV2aWNlOwotCi0vKgotICogVGhlIGJhY2tsaWdodCBjbGFzcyBkZWNsYXJhdGlvbgotICovCi1zdGF0aWMgaW50IHJlYWRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpOwotc3RhdGljIGludCB1cGRhdGVfYmxfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCk7Ci1zdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgYXN1c2JsX29wcyA9IHsKLQkuZ2V0X2JyaWdodG5lc3MgPSByZWFkX2JyaWdodG5lc3MsCi0JLnVwZGF0ZV9zdGF0dXMgPSB1cGRhdGVfYmxfc3RhdHVzLAotfTsKLQotLyoKLSAqIFRoZXNlIGZ1bmN0aW9ucyBhY3R1YWxseSB1cGRhdGUgdGhlIExFRCdzLCBhbmQgYXJlIGNhbGxlZCBmcm9tIGEKLSAqIHdvcmtxdWV1ZS4gQnkgZG9pbmcgdGhpcyBhcyBzZXBhcmF0ZSB3b3JrIHJhdGhlciB0aGFuIHdoZW4gdGhlIExFRAotICogc3Vic3lzdGVtIGFza3MsIHdlIGF2b2lkIG1lc3Npbmcgd2l0aCB0aGUgQXN1cyBBQ1BJIHN0dWZmIGR1cmluZyBhCi0gKiBwb3RlbnRpYWxseSBiYWQgdGltZSwgc3VjaCBhcyBhIHRpbWVyIGludGVycnVwdC4KLSAqLwotc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpsZWRfd29ya3F1ZXVlOwotCi0jZGVmaW5lIEFTVVNfTEVEKG9iamVjdCwgbGVkbmFtZSwgbWF4KQkJCQkJXAotCXN0YXRpYyB2b2lkIG9iamVjdCMjX2xlZF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCVwKLQkJCQkgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpOwlcCi0Jc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3Mgb2JqZWN0IyNfbGVkX2dldCgJCQlcCi0JCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KTsJCQkJXAotCXN0YXRpYyB2b2lkIG9iamVjdCMjX2xlZF91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICppZ25vcmVkKTsJXAotCXN0YXRpYyBpbnQgb2JqZWN0IyNfbGVkX3drOwkJCQkJXAotCXN0YXRpYyBERUNMQVJFX1dPUksob2JqZWN0IyNfbGVkX3dvcmssIG9iamVjdCMjX2xlZF91cGRhdGUpOwlcCi0Jc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYgb2JqZWN0IyNfbGVkID0gewkJCVwKLQkJLm5hbWUgICAgICAgICAgID0gImFzdXM6OiIgbGVkbmFtZSwJCQlcCi0JCS5icmlnaHRuZXNzX3NldCA9IG9iamVjdCMjX2xlZF9zZXQsCQkJXAotCQkuYnJpZ2h0bmVzc19nZXQgPSBvYmplY3QjI19sZWRfZ2V0LAkJCVwKLQkJLm1heF9icmlnaHRuZXNzID0gbWF4CQkJCQlcCi0JfQotCi1BU1VTX0xFRChtbGVkLCAibWFpbCIsIDEpOwotQVNVU19MRUQodGxlZCwgInRvdWNocGFkIiwgMSk7Ci1BU1VTX0xFRChybGVkLCAicmVjb3JkIiwgMSk7Ci1BU1VTX0xFRChwbGVkLCAicGhvbmUiLCAxKTsKLUFTVVNfTEVEKGdsZWQsICJnYW1pbmciLCAxKTsKLUFTVVNfTEVEKGtsZWQsICJrYmRfYmFja2xpZ2h0IiwgMyk7Ci0KLXN0cnVjdCBrZXlfZW50cnkgewotCWNoYXIgdHlwZTsKLQl1OCBjb2RlOwotCXUxNiBrZXljb2RlOwotfTsKLQotZW51bSB7IEtFX0tFWSwgS0VfRU5EIH07Ci0KLXN0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5IGFzdXNfa2V5bWFwW10gPSB7Ci0Je0tFX0tFWSwgMHgwMiwgS0VZX1NDUkVFTkxPQ0t9LAotCXtLRV9LRVksIDB4MDUsIEtFWV9XTEFOfSwKLQl7S0VfS0VZLCAweDA4LCBLRVlfRjEzfSwKLQl7S0VfS0VZLCAweDE3LCBLRVlfWk9PTX0sCi0Je0tFX0tFWSwgMHgxZiwgS0VZX0JBVFRFUll9LAotCXtLRV9LRVksIDB4MzAsIEtFWV9WT0xVTUVVUH0sCi0Je0tFX0tFWSwgMHgzMSwgS0VZX1ZPTFVNRURPV059LAotCXtLRV9LRVksIDB4MzIsIEtFWV9NVVRFfSwKLQl7S0VfS0VZLCAweDMzLCBLRVlfU1dJVENIVklERU9NT0RFfSwKLQl7S0VfS0VZLCAweDM0LCBLRVlfU1dJVENIVklERU9NT0RFfSwKLQl7S0VfS0VZLCAweDQwLCBLRVlfUFJFVklPVVNTT05HfSwKLQl7S0VfS0VZLCAweDQxLCBLRVlfTkVYVFNPTkd9LAotCXtLRV9LRVksIDB4NDMsIEtFWV9TVE9QQ0R9LAotCXtLRV9LRVksIDB4NDUsIEtFWV9QTEFZUEFVU0V9LAotCXtLRV9LRVksIDB4NGMsIEtFWV9NRURJQX0sCi0Je0tFX0tFWSwgMHg1MCwgS0VZX0VNQUlMfSwKLQl7S0VfS0VZLCAweDUxLCBLRVlfV1dXfSwKLQl7S0VfS0VZLCAweDU1LCBLRVlfQ0FMQ30sCi0Je0tFX0tFWSwgMHg1QywgS0VZX1NDUkVFTkxPQ0t9LCAgLyogU2NyZWVubG9jayAqLwotCXtLRV9LRVksIDB4NUQsIEtFWV9XTEFOfSwKLQl7S0VfS0VZLCAweDVFLCBLRVlfV0xBTn0sCi0Je0tFX0tFWSwgMHg1RiwgS0VZX1dMQU59LAotCXtLRV9LRVksIDB4NjAsIEtFWV9TV0lUQ0hWSURFT01PREV9LAotCXtLRV9LRVksIDB4NjEsIEtFWV9TV0lUQ0hWSURFT01PREV9LAotCXtLRV9LRVksIDB4NjIsIEtFWV9TV0lUQ0hWSURFT01PREV9LAotCXtLRV9LRVksIDB4NjMsIEtFWV9TV0lUQ0hWSURFT01PREV9LAotCXtLRV9LRVksIDB4NkIsIEtFWV9GMTN9LCAvKiBMb2NrIFRvdWNocGFkICovCi0Je0tFX0tFWSwgMHg4MiwgS0VZX0NBTUVSQX0sCi0Je0tFX0tFWSwgMHg4OCwgS0VZX1dMQU4gfSwKLQl7S0VfS0VZLCAweDhBLCBLRVlfUFJPRzF9LAotCXtLRV9LRVksIDB4OTUsIEtFWV9NRURJQX0sCi0Je0tFX0tFWSwgMHg5OSwgS0VZX1BIT05FfSwKLQl7S0VfS0VZLCAweGM0LCBLRVlfS0JESUxMVU1VUH0sCi0Je0tFX0tFWSwgMHhjNSwgS0VZX0tCRElMTFVNRE9XTn0sCitzdGF0aWMgY29uc3Qgc3RydWN0IGtleV9lbnRyeSBhc3VzX2tleW1hcFtdID0geworCS8qIExlbm92byBTTCBTcGVjaWZpYyBrZXljb2RlcyAqLworCXtLRV9LRVksIDB4MDIsIHsgS0VZX1NDUkVFTkxPQ0sgfSB9LAorCXtLRV9LRVksIDB4MDUsIHsgS0VZX1dMQU4gfSB9LAorCXtLRV9LRVksIDB4MDgsIHsgS0VZX0YxMyB9IH0sCisJe0tFX0tFWSwgMHgxNywgeyBLRVlfWk9PTSB9IH0sCisJe0tFX0tFWSwgMHgxZiwgeyBLRVlfQkFUVEVSWSB9IH0sCisJLyogRW5kIG9mIExlbm92byBTTCBTcGVjaWZpYyBrZXljb2RlcyAqLworCXtLRV9LRVksIDB4MzAsIHsgS0VZX1ZPTFVNRVVQIH0gfSwKKwl7S0VfS0VZLCAweDMxLCB7IEtFWV9WT0xVTUVET1dOIH0gfSwKKwl7S0VfS0VZLCAweDMyLCB7IEtFWV9NVVRFIH0gfSwKKwl7S0VfS0VZLCAweDMzLCB7IEtFWV9TV0lUQ0hWSURFT01PREUgfSB9LAorCXtLRV9LRVksIDB4MzQsIHsgS0VZX1NXSVRDSFZJREVPTU9ERSB9IH0sCisJe0tFX0tFWSwgMHg0MCwgeyBLRVlfUFJFVklPVVNTT05HIH0gfSwKKwl7S0VfS0VZLCAweDQxLCB7IEtFWV9ORVhUU09ORyB9IH0sCisJe0tFX0tFWSwgMHg0MywgeyBLRVlfU1RPUENEIH0gfSwKKwl7S0VfS0VZLCAweDQ1LCB7IEtFWV9QTEFZUEFVU0UgfSB9LAorCXtLRV9LRVksIDB4NGMsIHsgS0VZX01FRElBIH0gfSwKKwl7S0VfS0VZLCAweDUwLCB7IEtFWV9FTUFJTCB9IH0sCisJe0tFX0tFWSwgMHg1MSwgeyBLRVlfV1dXIH0gfSwKKwl7S0VfS0VZLCAweDU1LCB7IEtFWV9DQUxDIH0gfSwKKwl7S0VfS0VZLCAweDVDLCB7IEtFWV9TQ1JFRU5MT0NLIH0gfSwgIC8qIFNjcmVlbmxvY2sgKi8KKwl7S0VfS0VZLCAweDVELCB7IEtFWV9XTEFOIH0gfSwKKwl7S0VfS0VZLCAweDVFLCB7IEtFWV9XTEFOIH0gfSwKKwl7S0VfS0VZLCAweDVGLCB7IEtFWV9XTEFOIH0gfSwKKwl7S0VfS0VZLCAweDYwLCB7IEtFWV9TV0lUQ0hWSURFT01PREUgfSB9LAorCXtLRV9LRVksIDB4NjEsIHsgS0VZX1NXSVRDSFZJREVPTU9ERSB9IH0sCisJe0tFX0tFWSwgMHg2MiwgeyBLRVlfU1dJVENIVklERU9NT0RFIH0gfSwKKwl7S0VfS0VZLCAweDYzLCB7IEtFWV9TV0lUQ0hWSURFT01PREUgfSB9LAorCXtLRV9LRVksIDB4NkIsIHsgS0VZX0YxMyB9IH0sIC8qIExvY2sgVG91Y2hwYWQgKi8KKwl7S0VfS0VZLCAweDdFLCB7IEtFWV9CTFVFVE9PVEggfSB9LAorCXtLRV9LRVksIDB4N0QsIHsgS0VZX0JMVUVUT09USCB9IH0sCisJe0tFX0tFWSwgMHg4MiwgeyBLRVlfQ0FNRVJBIH0gfSwKKwl7S0VfS0VZLCAweDg4LCB7IEtFWV9XTEFOICB9IH0sCisJe0tFX0tFWSwgMHg4QSwgeyBLRVlfUFJPRzEgfSB9LAorCXtLRV9LRVksIDB4OTUsIHsgS0VZX01FRElBIH0gfSwKKwl7S0VfS0VZLCAweDk5LCB7IEtFWV9QSE9ORSB9IH0sCisJe0tFX0tFWSwgMHhjNCwgeyBLRVlfS0JESUxMVU1VUCB9IH0sCisJe0tFX0tFWSwgMHhjNSwgeyBLRVlfS0JESUxMVU1ET1dOIH0gfSwKIAl7S0VfRU5ELCAwfSwKIH07CiAKKwogLyoKICAqIFRoaXMgZnVuY3Rpb24gZXZhbHVhdGVzIGFuIEFDUEkgbWV0aG9kLCBnaXZlbiBhbiBpbnQgYXMgcGFyYW1ldGVyLCB0aGUKICAqIG1ldGhvZCBpcyBzZWFyY2hlZCB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoZSBoYW5kbGUsIGNhbiBiZSBOVUxMLiBUaGUgb3V0cHV0CkBAIC0zMzksOCArMjg4LDggQEAKICAqCiAgKiByZXR1cm5zIDAgaWYgd3JpdGUgaXMgc3VjY2Vzc2Z1bCwgLTEgZWxzZS4KICAqLwotc3RhdGljIGludCB3cml0ZV9hY3BpX2ludChhY3BpX2hhbmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIgKm1ldGhvZCwgaW50IHZhbCwKLQkJCSAgc3RydWN0IGFjcGlfYnVmZmVyICpvdXRwdXQpCitzdGF0aWMgaW50IHdyaXRlX2FjcGlfaW50X3JldChhY3BpX2hhbmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIgKm1ldGhvZCwgaW50IHZhbCwKKwkJCSAgICAgIHN0cnVjdCBhY3BpX2J1ZmZlciAqb3V0cHV0KQogewogCXN0cnVjdCBhY3BpX29iamVjdF9saXN0IHBhcmFtczsJLyogbGlzdCBvZiBpbnB1dCBwYXJhbWV0ZXJzIChhbiBpbnQpICovCiAJdW5pb24gYWNwaV9vYmplY3QgaW5fb2JqOwkvKiB0aGUgb25seSBwYXJhbSB3ZSB1c2UgKi8KQEAgLTM2MSwxMDIgKzMxMCw4MiBAQAogCQlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBpbnQgcmVhZF93aXJlbGVzc19zdGF0dXMoaW50IG1hc2spCitzdGF0aWMgaW50IHdyaXRlX2FjcGlfaW50KGFjcGlfaGFuZGxlIGhhbmRsZSwgY29uc3QgY2hhciAqbWV0aG9kLCBpbnQgdmFsKQogewotCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGF0dXM7Ci0JYWNwaV9zdGF0dXMgcnYgPSBBRV9PSzsKLQotCWlmICghd2lyZWxlc3Nfc3RhdHVzX2hhbmRsZSkKLQkJcmV0dXJuIChob3RrLT5zdGF0dXMgJiBtYXNrKSA/IDEgOiAwOwotCi0JcnYgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIod2lyZWxlc3Nfc3RhdHVzX2hhbmRsZSwgTlVMTCwgTlVMTCwgJnN0YXR1cyk7Ci0JaWYgKEFDUElfRkFJTFVSRShydikpCi0JCXByX3dhcm5pbmcoIkVycm9yIHJlYWRpbmcgV2lyZWxlc3Mgc3RhdHVzXG4iKTsKLQllbHNlCi0JCXJldHVybiAoc3RhdHVzICYgbWFzaykgPyAxIDogMDsKLQotCXJldHVybiAoaG90ay0+c3RhdHVzICYgbWFzaykgPyAxIDogMDsKKwlyZXR1cm4gd3JpdGVfYWNwaV9pbnRfcmV0KGhhbmRsZSwgbWV0aG9kLCB2YWwsIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IHJlYWRfZ3BzX3N0YXR1cyh2b2lkKQorc3RhdGljIGludCBhY3BpX2NoZWNrX2hhbmRsZShhY3BpX2hhbmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIgKm1ldGhvZCwKKwkJCSAgICAgYWNwaV9oYW5kbGUgKnJldCkKIHsKLQl1bnNpZ25lZCBsb25nIGxvbmcgc3RhdHVzOwotCWFjcGlfc3RhdHVzIHJ2ID0gQUVfT0s7CisJYWNwaV9zdGF0dXMgc3RhdHVzOwogCi0JcnYgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoZ3BzX3N0YXR1c19oYW5kbGUsIE5VTEwsIE5VTEwsICZzdGF0dXMpOwotCWlmIChBQ1BJX0ZBSUxVUkUocnYpKQotCQlwcl93YXJuaW5nKCJFcnJvciByZWFkaW5nIEdQUyBzdGF0dXNcbiIpOwotCWVsc2UKLQkJcmV0dXJuIHN0YXR1cyA/IDEgOiAwOworCWlmIChtZXRob2QgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLQlyZXR1cm4gKGhvdGstPnN0YXR1cyAmIEdQU19PTikgPyAxIDogMDsKLX0KKwlpZiAocmV0KQorCQlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoaGFuZGxlLCAoY2hhciAqKW1ldGhvZCwKKwkJCQkJIHJldCk7CisJZWxzZSB7CisJCWFjcGlfaGFuZGxlIGR1bW15OwogCi0vKiBHZW5lcmljIExFRCBmdW5jdGlvbnMgKi8KLXN0YXRpYyBpbnQgcmVhZF9zdGF0dXMoaW50IG1hc2spCi17Ci0JLyogVGhlcmUgaXMgYSBzcGVjaWFsIG1ldGhvZCBmb3IgYm90aCB3aXJlbGVzcyBkZXZpY2VzICovCi0JaWYgKG1hc2sgPT0gQlRfT04gfHwgbWFzayA9PSBXTF9PTikKLQkJcmV0dXJuIHJlYWRfd2lyZWxlc3Nfc3RhdHVzKG1hc2spOwotCWVsc2UgaWYgKG1hc2sgPT0gR1BTX09OKQotCQlyZXR1cm4gcmVhZF9ncHNfc3RhdHVzKCk7Ci0KLQlyZXR1cm4gKGhvdGstPnN0YXR1cyAmIG1hc2spID8gMSA6IDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHdyaXRlX3N0YXR1cyhhY3BpX2hhbmRsZSBoYW5kbGUsIGludCBvdXQsIGludCBtYXNrKQotewotCWhvdGstPnN0YXR1cyA9IChvdXQpID8gKGhvdGstPnN0YXR1cyB8IG1hc2spIDogKGhvdGstPnN0YXR1cyAmIH5tYXNrKTsKLQotCXN3aXRjaCAobWFzaykgewotCWNhc2UgTUxFRF9PTjoKLQkJb3V0ID0gIShvdXQgJiAweDEpOwotCQlicmVhazsKLQljYXNlIEdMRURfT046Ci0JCW91dCA9IChvdXQgJiAweDEpICsgMTsKLQkJYnJlYWs7Ci0JY2FzZSBHUFNfT046Ci0JCWhhbmRsZSA9IChvdXQpID8gZ3BzX29uX2hhbmRsZSA6IGdwc19vZmZfaGFuZGxlOwotCQlvdXQgPSAweDAyOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlvdXQgJj0gMHgxOwotCQlicmVhazsKKwkJc3RhdHVzID0gYWNwaV9nZXRfaGFuZGxlKGhhbmRsZSwgKGNoYXIgKiltZXRob2QsCisJCQkJCSAmZHVtbXkpOwogCX0KIAotCWlmICh3cml0ZV9hY3BpX2ludChoYW5kbGUsIE5VTEwsIG91dCwgTlVMTCkpCi0JCXByX3dhcm5pbmcoIiB3cml0ZSBmYWlsZWQgJXhcbiIsIG1hc2spOworCWlmIChzdGF0dXMgIT0gQUVfT0spIHsKKwkJaWYgKHJldCkKKwkJCXByX3dhcm5pbmcoIkVycm9yIGZpbmRpbmcgJXNcbiIsIG1ldGhvZCk7CisJCXJldHVybiAtRU5PREVWOworCX0KKwlyZXR1cm4gMDsKIH0KIAotLyogL3N5cy9jbGFzcy9sZWQgaGFuZGxlcnMgKi8KLSNkZWZpbmUgQVNVU19MRURfSEFORExFUihvYmplY3QsIG1hc2spCQkJCQlcCi0Jc3RhdGljIHZvaWQgb2JqZWN0IyNfbGVkX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwJXAotCQkJCSAgICAgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkJCVwKLQl7CQkJCQkJCQlcCi0JCW9iamVjdCMjX2xlZF93ayA9ICh2YWx1ZSA+IDApID8gMSA6IDA7CQkJXAotCQlxdWV1ZV93b3JrKGxlZF93b3JrcXVldWUsICZvYmplY3QjI19sZWRfd29yayk7CQlcCi0JfQkJCQkJCQkJXAotCXN0YXRpYyB2b2lkIG9iamVjdCMjX2xlZF91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICppZ25vcmVkKQlcCi0JewkJCQkJCQkJXAotCQlpbnQgdmFsdWUgPSBvYmplY3QjI19sZWRfd2s7CQkJCVwKLQkJd3JpdGVfc3RhdHVzKG9iamVjdCMjX3NldF9oYW5kbGUsIHZhbHVlLCAobWFzaykpOwlcCi0JfQkJCQkJCQkJXAotCXN0YXRpYyBlbnVtIGxlZF9icmlnaHRuZXNzIG9iamVjdCMjX2xlZF9nZXQoCQkJXAotCQlzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikJCQkJXAotCXsJCQkJCQkJCVwKLQkJcmV0dXJuIGxlZF9jZGV2LT5icmlnaHRuZXNzOwkJCQlcCi0JfQorLyogR2VuZXJpYyBMRUQgZnVuY3Rpb24gKi8KK3N0YXRpYyBpbnQgYXN1c19sZWRfc2V0KHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cywgY29uc3QgY2hhciAqbWV0aG9kLAorCQkJIGludCB2YWx1ZSkKK3sKKwlpZiAoIXN0cmNtcChtZXRob2QsIE1FVEhPRF9NTEVEKSkKKwkJdmFsdWUgPSAhdmFsdWU7CisJZWxzZSBpZiAoIXN0cmNtcChtZXRob2QsIE1FVEhPRF9HTEVEKSkKKwkJdmFsdWUgPSAhdmFsdWUgKyAxOworCWVsc2UKKwkJdmFsdWUgPSAhIXZhbHVlOwogCi1BU1VTX0xFRF9IQU5ETEVSKG1sZWQsIE1MRURfT04pOwotQVNVU19MRURfSEFORExFUihwbGVkLCBQTEVEX09OKTsKLUFTVVNfTEVEX0hBTkRMRVIocmxlZCwgUkxFRF9PTik7Ci1BU1VTX0xFRF9IQU5ETEVSKHRsZWQsIFRMRURfT04pOwotQVNVU19MRURfSEFORExFUihnbGVkLCBHTEVEX09OKTsKKwlyZXR1cm4gd3JpdGVfYWNwaV9pbnQoYXN1cy0+aGFuZGxlLCBtZXRob2QsIHZhbHVlKTsKK30KIAogLyoKLSAqIEtleWJvYXJkIGJhY2tsaWdodAorICogTEVEcwogICovCi1zdGF0aWMgaW50IGdldF9rbGVkX2x2bCh2b2lkKQorLyogL3N5cy9jbGFzcy9sZWQgaGFuZGxlcnMgKi8KK3N0YXRpYyB2b2lkIGFzdXNfbGVkX2NkZXZfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAorCQkJIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCit7CisJc3RydWN0IGFzdXNfbGVkICpsZWQgPSBjb250YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdCBhc3VzX2xlZCwgbGVkKTsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBsZWQtPmFzdXM7CisKKwlsZWQtPndrID0gISF2YWx1ZTsKKwlxdWV1ZV93b3JrKGFzdXMtPmxlZF93b3JrcXVldWUsICZsZWQtPndvcmspOworfQorCitzdGF0aWMgdm9pZCBhc3VzX2xlZF9jZGV2X3VwZGF0ZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGFzdXNfbGVkICpsZWQgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGFzdXNfbGVkLCB3b3JrKTsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBsZWQtPmFzdXM7CisKKwlhc3VzX2xlZF9zZXQoYXN1cywgbGVkLT5tZXRob2QsIGxlZC0+d2spOworfQorCitzdGF0aWMgZW51bSBsZWRfYnJpZ2h0bmVzcyBhc3VzX2xlZF9jZGV2X2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldikKK3sKKwlyZXR1cm4gbGVkX2NkZXYtPmJyaWdodG5lc3M7Cit9CisKKy8qCisgKiBLZXlib2FyZCBiYWNrbGlnaHQgKGFsc28gYSBMRUQpCisgKi8KK3N0YXRpYyBpbnQgYXN1c19rbGVkX2x2bChzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIGtibHY7CiAJc3RydWN0IGFjcGlfb2JqZWN0X2xpc3QgcGFyYW1zOwpAQCAtNDY4LDc1ICszOTcsMTgzIEBACiAJaW5fb2JqLnR5cGUgPSBBQ1BJX1RZUEVfSU5URUdFUjsKIAlpbl9vYmouaW50ZWdlci52YWx1ZSA9IDI7CiAKLQlydiA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihrbGVkX2dldF9oYW5kbGUsIE5VTEwsICZwYXJhbXMsICZrYmx2KTsKKwlydiA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihhc3VzLT5oYW5kbGUsIE1FVEhPRF9LQkRfTElHSFRfR0VULAorCQkJCSAgICZwYXJhbXMsICZrYmx2KTsKIAlpZiAoQUNQSV9GQUlMVVJFKHJ2KSkgewogCQlwcl93YXJuaW5nKCJFcnJvciByZWFkaW5nIGtsZWQgbGV2ZWxcbiIpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCXJldHVybiBrYmx2OwogfQogCi1zdGF0aWMgaW50IHNldF9rbGVkX2x2bChpbnQga2JsdikKK3N0YXRpYyBpbnQgYXN1c19rbGVkX3NldChzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMsIGludCBrYmx2KQogewogCWlmIChrYmx2ID4gMCkKIAkJa2JsdiA9ICgxIDw8IDcpIHwgKGtibHYgJiAweDdGKTsKIAllbHNlCiAJCWtibHYgPSAwOwogCi0JaWYgKHdyaXRlX2FjcGlfaW50KGtsZWRfc2V0X2hhbmRsZSwgTlVMTCwga2JsdiwgTlVMTCkpIHsKKwlpZiAod3JpdGVfYWNwaV9pbnQoYXN1cy0+aGFuZGxlLCBNRVRIT0RfS0JEX0xJR0hUX1NFVCwga2JsdikpIHsKIAkJcHJfd2FybmluZygiS2V5Ym9hcmQgTEVEIGRpc3BsYXkgd3JpdGUgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBrbGVkX2xlZF9zZXQoc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYsCi0JCQkgZW51bSBsZWRfYnJpZ2h0bmVzcyB2YWx1ZSkKK3N0YXRpYyB2b2lkIGFzdXNfa2xlZF9jZGV2X3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2ICpsZWRfY2RldiwKKwkJCSAgICAgIGVudW0gbGVkX2JyaWdodG5lc3MgdmFsdWUpCiB7Ci0Ja2xlZF9sZWRfd2sgPSB2YWx1ZTsKLQlxdWV1ZV93b3JrKGxlZF93b3JrcXVldWUsICZrbGVkX2xlZF93b3JrKTsKKwlzdHJ1Y3QgYXN1c19sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGFzdXNfbGVkLCBsZWQpOworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGxlZC0+YXN1czsKKworCWxlZC0+d2sgPSB2YWx1ZTsKKwlxdWV1ZV93b3JrKGFzdXMtPmxlZF93b3JrcXVldWUsICZsZWQtPndvcmspOwogfQogCi1zdGF0aWMgdm9pZCBrbGVkX2xlZF91cGRhdGUoc3RydWN0IHdvcmtfc3RydWN0ICppZ25vcmVkKQorc3RhdGljIHZvaWQgYXN1c19rbGVkX2NkZXZfdXBkYXRlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzZXRfa2xlZF9sdmwoa2xlZF9sZWRfd2spOworCXN0cnVjdCBhc3VzX2xlZCAqbGVkID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBhc3VzX2xlZCwgd29yayk7CisJc3RydWN0IGFzdXNfbGFwdG9wICphc3VzID0gbGVkLT5hc3VzOworCisJYXN1c19rbGVkX3NldChhc3VzLCBsZWQtPndrKTsKIH0KIAotc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3Mga2xlZF9sZWRfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQorc3RhdGljIGVudW0gbGVkX2JyaWdodG5lc3MgYXN1c19rbGVkX2NkZXZfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2KQogewotCXJldHVybiBnZXRfa2xlZF9sdmwoKTsKKwlzdHJ1Y3QgYXN1c19sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0IGFzdXNfbGVkLCBsZWQpOworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGxlZC0+YXN1czsKKworCXJldHVybiBhc3VzX2tsZWRfbHZsKGFzdXMpOwogfQogCi1zdGF0aWMgaW50IGdldF9sY2Rfc3RhdGUodm9pZCkKK3N0YXRpYyB2b2lkIGFzdXNfbGVkX2V4aXQoc3RydWN0IGFzdXNfbGFwdG9wICphc3VzKQogewotCXJldHVybiByZWFkX3N0YXR1cyhMQ0RfT04pOworCWlmIChhc3VzLT5tbGVkLmxlZC5kZXYpCisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZhc3VzLT5tbGVkLmxlZCk7CisJaWYgKGFzdXMtPnRsZWQubGVkLmRldikKKwkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmFzdXMtPnRsZWQubGVkKTsKKwlpZiAoYXN1cy0+cGxlZC5sZWQuZGV2KQorCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmYXN1cy0+cGxlZC5sZWQpOworCWlmIChhc3VzLT5ybGVkLmxlZC5kZXYpCisJCWxlZF9jbGFzc2Rldl91bnJlZ2lzdGVyKCZhc3VzLT5ybGVkLmxlZCk7CisJaWYgKGFzdXMtPmdsZWQubGVkLmRldikKKwkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJmFzdXMtPmdsZWQubGVkKTsKKwlpZiAoYXN1cy0+a2xlZC5sZWQuZGV2KQorCQlsZWRfY2xhc3NkZXZfdW5yZWdpc3RlcigmYXN1cy0+a2xlZC5sZWQpOworCWlmIChhc3VzLT5sZWRfd29ya3F1ZXVlKSB7CisJCWRlc3Ryb3lfd29ya3F1ZXVlKGFzdXMtPmxlZF93b3JrcXVldWUpOworCQlhc3VzLT5sZWRfd29ya3F1ZXVlID0gTlVMTDsKKwl9CiB9CiAKLXN0YXRpYyBpbnQgc2V0X2xjZF9zdGF0ZShpbnQgdmFsdWUpCisvKiAgVWdseSBtYWNybywgbmVlZCB0byBmaXggdGhhdCBsYXRlciAqLworc3RhdGljIGludCBhc3VzX2xlZF9yZWdpc3RlcihzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMsCisJCQkgICAgIHN0cnVjdCBhc3VzX2xlZCAqbGVkLAorCQkJICAgICBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICptZXRob2QpCit7CisJc3RydWN0IGxlZF9jbGFzc2RldiAqbGVkX2NkZXYgPSAmbGVkLT5sZWQ7CisKKwlpZiAoIW1ldGhvZCB8fCBhY3BpX2NoZWNrX2hhbmRsZShhc3VzLT5oYW5kbGUsIG1ldGhvZCwgTlVMTCkpCisJCXJldHVybiAwOyAvKiBMZWQgbm90IHByZXNlbnQgKi8KKworCWxlZC0+YXN1cyA9IGFzdXM7CisJbGVkLT5tZXRob2QgPSBtZXRob2Q7CisKKwlJTklUX1dPUksoJmxlZC0+d29yaywgYXN1c19sZWRfY2Rldl91cGRhdGUpOworCWxlZF9jZGV2LT5uYW1lID0gbmFtZTsKKwlsZWRfY2Rldi0+YnJpZ2h0bmVzc19zZXQgPSBhc3VzX2xlZF9jZGV2X3NldDsKKwlsZWRfY2Rldi0+YnJpZ2h0bmVzc19nZXQgPSBhc3VzX2xlZF9jZGV2X2dldDsKKwlsZWRfY2Rldi0+bWF4X2JyaWdodG5lc3MgPSAxOworCXJldHVybiBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJmFzdXMtPnBsYXRmb3JtX2RldmljZS0+ZGV2LCBsZWRfY2Rldik7Cit9CisKK3N0YXRpYyBpbnQgYXN1c19sZWRfaW5pdChzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMpCit7CisJaW50IHI7CisKKwkvKgorCSAqIEZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5IHVwZGF0ZSB0aGUgTEVEJ3MgYXJlIGNhbGxlZCBmcm9tIGEKKwkgKiB3b3JrcXVldWUuIEJ5IGRvaW5nIHRoaXMgYXMgc2VwYXJhdGUgd29yayByYXRoZXIgdGhhbiB3aGVuIHRoZSBMRUQKKwkgKiBzdWJzeXN0ZW0gYXNrcywgd2UgYXZvaWQgbWVzc2luZyB3aXRoIHRoZSBBc3VzIEFDUEkgc3R1ZmYgZHVyaW5nIGEKKwkgKiBwb3RlbnRpYWxseSBiYWQgdGltZSwgc3VjaCBhcyBhIHRpbWVyIGludGVycnVwdC4KKwkgKi8KKwlhc3VzLT5sZWRfd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImxlZF93b3JrcXVldWUiKTsKKwlpZiAoIWFzdXMtPmxlZF93b3JrcXVldWUpCisJCXJldHVybiAtRU5PTUVNOworCisJciA9IGFzdXNfbGVkX3JlZ2lzdGVyKGFzdXMsICZhc3VzLT5tbGVkLCAiYXN1czo6bWFpbCIsIE1FVEhPRF9NTEVEKTsKKwlpZiAocikKKwkJZ290byBlcnJvcjsKKwlyID0gYXN1c19sZWRfcmVnaXN0ZXIoYXN1cywgJmFzdXMtPnRsZWQsICJhc3VzOjp0b3VjaHBhZCIsIE1FVEhPRF9UTEVEKTsKKwlpZiAocikKKwkJZ290byBlcnJvcjsKKwlyID0gYXN1c19sZWRfcmVnaXN0ZXIoYXN1cywgJmFzdXMtPnJsZWQsICJhc3VzOjpyZWNvcmQiLCBNRVRIT0RfUkxFRCk7CisJaWYgKHIpCisJCWdvdG8gZXJyb3I7CisJciA9IGFzdXNfbGVkX3JlZ2lzdGVyKGFzdXMsICZhc3VzLT5wbGVkLCAiYXN1czo6cGhvbmUiLCBNRVRIT0RfUExFRCk7CisJaWYgKHIpCisJCWdvdG8gZXJyb3I7CisJciA9IGFzdXNfbGVkX3JlZ2lzdGVyKGFzdXMsICZhc3VzLT5nbGVkLCAiYXN1czo6Z2FtaW5nIiwgTUVUSE9EX0dMRUQpOworCWlmIChyKQorCQlnb3RvIGVycm9yOworCWlmICghYWNwaV9jaGVja19oYW5kbGUoYXN1cy0+aGFuZGxlLCBNRVRIT0RfS0JEX0xJR0hUX1NFVCwgTlVMTCkgJiYKKwkgICAgIWFjcGlfY2hlY2tfaGFuZGxlKGFzdXMtPmhhbmRsZSwgTUVUSE9EX0tCRF9MSUdIVF9HRVQsIE5VTEwpKSB7CisJCXN0cnVjdCBhc3VzX2xlZCAqbGVkID0gJmFzdXMtPmtsZWQ7CisJCXN0cnVjdCBsZWRfY2xhc3NkZXYgKmNkZXYgPSAmbGVkLT5sZWQ7CisKKwkJbGVkLT5hc3VzID0gYXN1czsKKworCQlJTklUX1dPUksoJmxlZC0+d29yaywgYXN1c19rbGVkX2NkZXZfdXBkYXRlKTsKKwkJY2Rldi0+bmFtZSA9ICJhc3VzOjprYmRfYmFja2xpZ2h0IjsKKwkJY2Rldi0+YnJpZ2h0bmVzc19zZXQgPSBhc3VzX2tsZWRfY2Rldl9zZXQ7CisJCWNkZXYtPmJyaWdodG5lc3NfZ2V0ID0gYXN1c19rbGVkX2NkZXZfZ2V0OworCQljZGV2LT5tYXhfYnJpZ2h0bmVzcyA9IDM7CisJCXIgPSBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoJmFzdXMtPnBsYXRmb3JtX2RldmljZS0+ZGV2LCBjZGV2KTsKKwl9CitlcnJvcjoKKwlpZiAocikKKwkJYXN1c19sZWRfZXhpdChhc3VzKTsKKwlyZXR1cm4gcjsKK30KKworLyoKKyAqIEJhY2tsaWdodCBkZXZpY2UKKyAqLworc3RhdGljIGludCBhc3VzX2xjZF9zdGF0dXMoc3RydWN0IGFzdXNfbGFwdG9wICphc3VzKQoreworCXJldHVybiBhc3VzLT5sY2Rfc3RhdGU7Cit9CisKK3N0YXRpYyBpbnQgYXN1c19sY2Rfc2V0KHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cywgaW50IHZhbHVlKQogewogCWludCBsY2QgPSAwOwogCWFjcGlfc3RhdHVzIHN0YXR1cyA9IDA7CiAKLQlsY2QgPSB2YWx1ZSA/IDEgOiAwOworCWxjZCA9ICEhdmFsdWU7CiAKLQlpZiAobGNkID09IGdldF9sY2Rfc3RhdGUoKSkKKwlpZiAobGNkID09IGFzdXNfbGNkX3N0YXR1cyhhc3VzKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAobGNkX3N3aXRjaF9oYW5kbGUpIHsKLQkJc3RhdHVzID0gYWNwaV9ldmFsdWF0ZV9vYmplY3QobGNkX3N3aXRjaF9oYW5kbGUsCi0JCQkJCSAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworCWlmICghbGNkX3N3aXRjaF9oYW5kbGUpCisJCXJldHVybiAtRU5PREVWOwogCi0JCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJCXByX3dhcm5pbmcoIkVycm9yIHN3aXRjaGluZyBMQ0RcbiIpOworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfb2JqZWN0KGxjZF9zd2l0Y2hfaGFuZGxlLAorCQkJCSAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworCisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCXByX3dhcm5pbmcoIkVycm9yIHN3aXRjaGluZyBMQ0RcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQl3cml0ZV9zdGF0dXMoTlVMTCwgbGNkLCBMQ0RfT04pOworCWFzdXMtPmxjZF9zdGF0ZSA9IGxjZDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgbGNkX2JsYW5rKGludCBibGFuaykKK3N0YXRpYyB2b2lkIGxjZF9ibGFuayhzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMsIGludCBibGFuaykKIHsKLQlzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQgPSBhc3VzX2JhY2tsaWdodF9kZXZpY2U7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkID0gYXN1cy0+YmFja2xpZ2h0X2RldmljZTsKKworCWFzdXMtPmxjZF9zdGF0ZSA9IChibGFuayA9PSBGQl9CTEFOS19VTkJMQU5LKTsKIAogCWlmIChiZCkgewogCQliZC0+cHJvcHMucG93ZXIgPSBibGFuazsKQEAgLTU0NCw0NCArNTgxLDkxIEBACiAJfQogfQogCi1zdGF0aWMgaW50IHJlYWRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQpCitzdGF0aWMgaW50IGFzdXNfcmVhZF9icmlnaHRuZXNzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBibF9nZXRfZGF0YShiZCk7CiAJdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlOwogCWFjcGlfc3RhdHVzIHJ2ID0gQUVfT0s7CiAKLQlydiA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihicmlnaHRuZXNzX2dldF9oYW5kbGUsIE5VTEwsIE5VTEwsICZ2YWx1ZSk7CisJcnYgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoYXN1cy0+aGFuZGxlLCBNRVRIT0RfQlJJR0hUTkVTU19HRVQsCisJCQkJICAgTlVMTCwgJnZhbHVlKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHJ2KSkKIAkJcHJfd2FybmluZygiRXJyb3IgcmVhZGluZyBicmlnaHRuZXNzXG4iKTsKIAogCXJldHVybiB2YWx1ZTsKIH0KIAotc3RhdGljIGludCBzZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQsIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgYXN1c19zZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmQsIGludCB2YWx1ZSkKIHsKLQlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBibF9nZXRfZGF0YShiZCk7CiAKLQl2YWx1ZSA9ICgwIDwgdmFsdWUpID8gKCgxNSA8IHZhbHVlKSA/IDE1IDogdmFsdWUpIDogMDsKLQkvKiAwIDw9IHZhbHVlIDw9IDE1ICovCi0KLQlpZiAod3JpdGVfYWNwaV9pbnQoYnJpZ2h0bmVzc19zZXRfaGFuZGxlLCBOVUxMLCB2YWx1ZSwgTlVMTCkpIHsKKwlpZiAod3JpdGVfYWNwaV9pbnQoYXN1cy0+aGFuZGxlLCBNRVRIT0RfQlJJR0hUTkVTU19TRVQsIHZhbHVlKSkgewogCQlwcl93YXJuaW5nKCJFcnJvciBjaGFuZ2luZyBicmlnaHRuZXNzXG4iKTsKLQkJcmV0ID0gLUVJTzsKKwkJcmV0dXJuIC1FSU87CiAJfQotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB1cGRhdGVfYmxfc3RhdHVzKHN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZCkKIHsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBibF9nZXRfZGF0YShiZCk7CiAJaW50IHJ2OwogCWludCB2YWx1ZSA9IGJkLT5wcm9wcy5icmlnaHRuZXNzOwogCi0JcnYgPSBzZXRfYnJpZ2h0bmVzcyhiZCwgdmFsdWUpOworCXJ2ID0gYXN1c19zZXRfYnJpZ2h0bmVzcyhiZCwgdmFsdWUpOwogCWlmIChydikKIAkJcmV0dXJuIHJ2OwogCiAJdmFsdWUgPSAoYmQtPnByb3BzLnBvd2VyID09IEZCX0JMQU5LX1VOQkxBTkspID8gMSA6IDA7Ci0JcmV0dXJuIHNldF9sY2Rfc3RhdGUodmFsdWUpOworCXJldHVybiBhc3VzX2xjZF9zZXQoYXN1cywgdmFsdWUpOworfQorCitzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9vcHMgYXN1c2JsX29wcyA9IHsKKwkuZ2V0X2JyaWdodG5lc3MgPSBhc3VzX3JlYWRfYnJpZ2h0bmVzcywKKwkudXBkYXRlX3N0YXR1cyA9IHVwZGF0ZV9ibF9zdGF0dXMsCit9OworCitzdGF0aWMgaW50IGFzdXNfYmFja2xpZ2h0X25vdGlmeShzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkID0gYXN1cy0+YmFja2xpZ2h0X2RldmljZTsKKwlpbnQgb2xkID0gYmQtPnByb3BzLmJyaWdodG5lc3M7CisKKwliYWNrbGlnaHRfZm9yY2VfdXBkYXRlKGJkLCBCQUNLTElHSFRfVVBEQVRFX0hPVEtFWSk7CisKKwlyZXR1cm4gb2xkOworfQorCitzdGF0aWMgaW50IGFzdXNfYmFja2xpZ2h0X2luaXQoc3RydWN0IGFzdXNfbGFwdG9wICphc3VzKQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpiZDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYXN1cy0+cGxhdGZvcm1fZGV2aWNlLT5kZXY7CisKKwlpZiAoIWFjcGlfY2hlY2tfaGFuZGxlKGFzdXMtPmhhbmRsZSwgTUVUSE9EX0JSSUdIVE5FU1NfR0VULCBOVUxMKSAmJgorCSAgICAhYWNwaV9jaGVja19oYW5kbGUoYXN1cy0+aGFuZGxlLCBNRVRIT0RfQlJJR0hUTkVTU19TRVQsIE5VTEwpICYmCisJICAgIGxjZF9zd2l0Y2hfaGFuZGxlKSB7CisJCWJkID0gYmFja2xpZ2h0X2RldmljZV9yZWdpc3RlcihBU1VTX0xBUFRPUF9GSUxFLCBkZXYsCisJCQkJCSAgICAgICBhc3VzLCAmYXN1c2JsX29wcyk7CisJCWlmIChJU19FUlIoYmQpKSB7CisJCQlwcl9lcnIoIkNvdWxkIG5vdCByZWdpc3RlciBhc3VzIGJhY2tsaWdodCBkZXZpY2VcbiIpOworCQkJYXN1cy0+YmFja2xpZ2h0X2RldmljZSA9IE5VTEw7CisJCQlyZXR1cm4gUFRSX0VSUihiZCk7CisJCX0KKworCQlhc3VzLT5iYWNrbGlnaHRfZGV2aWNlID0gYmQ7CisKKwkJYmQtPnByb3BzLm1heF9icmlnaHRuZXNzID0gMTU7CisJCWJkLT5wcm9wcy5wb3dlciA9IEZCX0JMQU5LX1VOQkxBTks7CisJCWJkLT5wcm9wcy5icmlnaHRuZXNzID0gYXN1c19yZWFkX2JyaWdodG5lc3MoYmQpOworCQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhiZCk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBhc3VzX2JhY2tsaWdodF9leGl0KHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cykKK3sKKwlpZiAoYXN1cy0+YmFja2xpZ2h0X2RldmljZSkKKwkJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKGFzdXMtPmJhY2tsaWdodF9kZXZpY2UpOworCWFzdXMtPmJhY2tsaWdodF9kZXZpY2UgPSBOVUxMOwogfQogCiAvKgpAQCAtNTk2LDI1ICs2ODAsMjYgQEAKIHN0YXRpYyBzc2l6ZV90IHNob3dfaW5mb3Moc3RydWN0IGRldmljZSAqZGV2LAogCQkJICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqcGFnZSkKIHsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgbGVuID0gMDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgdGVtcDsKIAljaGFyIGJ1ZlsxNl07CQkvKiBlbm91Z2ggZm9yIGFsbCBpbmZvICovCiAJYWNwaV9zdGF0dXMgcnYgPSBBRV9PSzsKIAogCS8qCi0JICogV2UgdXNlIHRoZSBlYXN5IHdheSwgd2UgZG9uJ3QgY2FyZSBvZiBvZmYgYW5kIGNvdW50LCBzbyB3ZSBkb24ndCBzZXQgZW9mCi0JICogdG8gMQorCSAqIFdlIHVzZSB0aGUgZWFzeSB3YXksIHdlIGRvbid0IGNhcmUgb2Ygb2ZmIGFuZCBjb3VudCwKKwkgKiBzbyB3ZSBkb24ndCBzZXQgZW9mIHRvIDEKIAkgKi8KIAotCWxlbiArPSBzcHJpbnRmKHBhZ2UsIEFTVVNfSE9US19OQU1FICIgIiBBU1VTX0xBUFRPUF9WRVJTSU9OICJcbiIpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJNb2RlbCByZWZlcmVuY2UgICAgOiAlc1xuIiwgaG90ay0+bmFtZSk7CisJbGVuICs9IHNwcmludGYocGFnZSwgQVNVU19MQVBUT1BfTkFNRSAiICIgQVNVU19MQVBUT1BfVkVSU0lPTiAiXG4iKTsKKwlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiTW9kZWwgcmVmZXJlbmNlICAgIDogJXNcbiIsIGFzdXMtPm5hbWUpOwogCS8qCiAJICogVGhlIFNGVU4gbWV0aG9kIHByb2JhYmx5IGFsbG93cyB0aGUgb3JpZ2luYWwgZHJpdmVyIHRvIGdldCB0aGUgbGlzdAogCSAqIG9mIGZlYXR1cmVzIHN1cHBvcnRlZCBieSBhIGdpdmVuIG1vZGVsLiBGb3Igbm93LCAweDAxMDAgb3IgMHgwODAwCiAJICogYml0IHNpZ25pZmllcyB0aGF0IHRoZSBsYXB0b3AgaXMgZXF1aXBwZWQgd2l0aCBhIFdpLUZpIE1pbmlQQ0kgY2FyZC4KIAkgKiBUaGUgc2lnbmlmaWNhbmNlIG9mIG90aGVycyBpcyB5ZXQgdG8gYmUgZm91bmQuCiAJICovCi0JcnYgPSBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaG90ay0+aGFuZGxlLCAiU0ZVTiIsIE5VTEwsICZ0ZW1wKTsKKwlydiA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihhc3VzLT5oYW5kbGUsICJTRlVOIiwgTlVMTCwgJnRlbXApOwogCWlmICghQUNQSV9GQUlMVVJFKHJ2KSkKIAkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIlNGVU4gdmFsdWUgICAgICAgICA6ICUjeFxuIiwKIAkJCSAgICAgICAodWludCkgdGVtcCk7CkBAIC02MjQsNyArNzA5LDcgQEAKIAkgKiBUaGUgc2lnbmlmaWNhbmNlIG9mIG90aGVycyBpcyB5ZXQgdG8gYmUgZm91bmQuCiAJICogSWYgd2UgZG9uJ3QgZmluZCB0aGUgbWV0aG9kLCB3ZSBhc3N1bWUgdGhlIGRldmljZSBhcmUgcHJlc2VudC4KIAkgKi8KLQlydiA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihob3RrLT5oYW5kbGUsICJIUldTIiwgTlVMTCwgJnRlbXApOworCXJ2ID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGFzdXMtPmhhbmRsZSwgIkhSV1MiLCBOVUxMLCAmdGVtcCk7CiAJaWYgKCFBQ1BJX0ZBSUxVUkUocnYpKQogCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiSFJXUyB2YWx1ZSAgICAgICAgIDogJSN4XG4iLAogCQkJICAgICAgICh1aW50KSB0ZW1wKTsKQEAgLTYzNSwyNiArNzIwLDI2IEBACiAJICogTm90ZTogc2luY2Ugbm90IGFsbCB0aGUgbGFwdG9wcyBwcm92aWRlIHRoaXMgbWV0aG9kLCBlcnJvcnMgYXJlCiAJICogc2lsZW50bHkgaWdub3JlZC4KIAkgKi8KLQlydiA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihob3RrLT5oYW5kbGUsICJBU1lNIiwgTlVMTCwgJnRlbXApOworCXJ2ID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGFzdXMtPmhhbmRsZSwgIkFTWU0iLCBOVUxMLCAmdGVtcCk7CiAJaWYgKCFBQ1BJX0ZBSUxVUkUocnYpKQogCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiQVNZTSB2YWx1ZSAgICAgICAgIDogJSN4XG4iLAogCQkJICAgICAgICh1aW50KSB0ZW1wKTsKLQlpZiAoYXN1c19pbmZvKSB7Ci0JCXNucHJpbnRmKGJ1ZiwgMTYsICIlZCIsIGFzdXNfaW5mby0+bGVuZ3RoKTsKKwlpZiAoYXN1cy0+ZHNkdF9pbmZvKSB7CisJCXNucHJpbnRmKGJ1ZiwgMTYsICIlZCIsIGFzdXMtPmRzZHRfaW5mby0+bGVuZ3RoKTsKIAkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIkRTRFQgbGVuZ3RoICAgICAgICA6ICVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDE2LCAiJWQiLCBhc3VzX2luZm8tPmNoZWNrc3VtKTsKKwkJc25wcmludGYoYnVmLCAxNiwgIiVkIiwgYXN1cy0+ZHNkdF9pbmZvLT5jaGVja3N1bSk7CiAJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJEU0RUIGNoZWNrc3VtICAgICAgOiAlc1xuIiwgYnVmKTsKLQkJc25wcmludGYoYnVmLCAxNiwgIiVkIiwgYXN1c19pbmZvLT5yZXZpc2lvbik7CisJCXNucHJpbnRmKGJ1ZiwgMTYsICIlZCIsIGFzdXMtPmRzZHRfaW5mby0+cmV2aXNpb24pOwogCQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiRFNEVCByZXZpc2lvbiAgICAgIDogJXNcbiIsIGJ1Zik7Ci0JCXNucHJpbnRmKGJ1ZiwgNywgIiVzIiwgYXN1c19pbmZvLT5vZW1faWQpOworCQlzbnByaW50ZihidWYsIDcsICIlcyIsIGFzdXMtPmRzZHRfaW5mby0+b2VtX2lkKTsKIAkJbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIk9FTSBpZCAgICAgICAgICAgICA6ICVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDksICIlcyIsIGFzdXNfaW5mby0+b2VtX3RhYmxlX2lkKTsKKwkJc25wcmludGYoYnVmLCA5LCAiJXMiLCBhc3VzLT5kc2R0X2luZm8tPm9lbV90YWJsZV9pZCk7CiAJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJPRU0gdGFibGUgaWQgICAgICAgOiAlc1xuIiwgYnVmKTsKLQkJc25wcmludGYoYnVmLCAxNiwgIiV4IiwgYXN1c19pbmZvLT5vZW1fcmV2aXNpb24pOworCQlzbnByaW50ZihidWYsIDE2LCAiJXgiLCBhc3VzLT5kc2R0X2luZm8tPm9lbV9yZXZpc2lvbik7CiAJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJPRU0gcmV2aXNpb24gICAgICAgOiAweCVzXG4iLCBidWYpOwotCQlzbnByaW50ZihidWYsIDUsICIlcyIsIGFzdXNfaW5mby0+YXNsX2NvbXBpbGVyX2lkKTsKKwkJc25wcmludGYoYnVmLCA1LCAiJXMiLCBhc3VzLT5kc2R0X2luZm8tPmFzbF9jb21waWxlcl9pZCk7CiAJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJBU0wgY29tcCB2ZW5kb3IgaWQgOiAlc1xuIiwgYnVmKTsKLQkJc25wcmludGYoYnVmLCAxNiwgIiV4IiwgYXN1c19pbmZvLT5hc2xfY29tcGlsZXJfcmV2aXNpb24pOworCQlzbnByaW50ZihidWYsIDE2LCAiJXgiLCBhc3VzLT5kc2R0X2luZm8tPmFzbF9jb21waWxlcl9yZXZpc2lvbik7CiAJCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJBU0wgY29tcCByZXZpc2lvbiAgOiAweCVzXG4iLCBidWYpOwogCX0KIApAQCAtNjcyLDggKzc1Nyw5IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3NpemVfdCBzdG9yZV9zdGF0dXMoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQsCi0JCQkgICAgYWNwaV9oYW5kbGUgaGFuZGxlLCBpbnQgbWFzaykKK3N0YXRpYyBzc2l6ZV90IHN5c2ZzX2FjcGlfc2V0KHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cywKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAorCQkJICAgICAgY29uc3QgY2hhciAqbWV0aG9kKQogewogCWludCBydiwgdmFsdWU7CiAJaW50IG91dCA9IDA7CkBAIC02ODIsOCArNzY4LDggQEAKIAlpZiAocnYgPiAwKQogCQlvdXQgPSB2YWx1ZSA/IDEgOiAwOwogCi0Jd3JpdGVfc3RhdHVzKGhhbmRsZSwgb3V0LCBtYXNrKTsKLQorCWlmICh3cml0ZV9hY3BpX2ludChhc3VzLT5oYW5kbGUsIG1ldGhvZCwgdmFsdWUpKQorCQlyZXR1cm4gLUVOT0RFVjsKIAlyZXR1cm4gcnY7CiB9CiAKQEAgLTY5Myw2NyArNzc5LDExNiBAQAogc3RhdGljIHNzaXplX3Qgc2hvd19sZWRkKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JTA4eFxuIiwgaG90ay0+bGVkZF9zdGF0dXMpOworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDh4XG4iLCBhc3VzLT5sZWRkX3N0YXR1cyk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2xlZGQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CisJc3RydWN0IGFzdXNfbGFwdG9wICphc3VzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJaW50IHJ2LCB2YWx1ZTsKIAogCXJ2ID0gcGFyc2VfYXJnKGJ1ZiwgY291bnQsICZ2YWx1ZSk7CiAJaWYgKHJ2ID4gMCkgewotCQlpZiAod3JpdGVfYWNwaV9pbnQobGVkZF9zZXRfaGFuZGxlLCBOVUxMLCB2YWx1ZSwgTlVMTCkpCisJCWlmICh3cml0ZV9hY3BpX2ludChhc3VzLT5oYW5kbGUsIE1FVEhPRF9MRURELCB2YWx1ZSkpCiAJCQlwcl93YXJuaW5nKCJMRUQgZGlzcGxheSB3cml0ZSBmYWlsZWRcbiIpOwogCQllbHNlCi0JCQlob3RrLT5sZWRkX3N0YXR1cyA9ICh1MzIpIHZhbHVlOworCQkJYXN1cy0+bGVkZF9zdGF0dXMgPSAodTMyKSB2YWx1ZTsKIAl9CiAJcmV0dXJuIHJ2OwogfQogCiAvKgorICogV2lyZWxlc3MKKyAqLworc3RhdGljIGludCBhc3VzX3dpcmVsZXNzX3N0YXR1cyhzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMsIGludCBtYXNrKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGF0dXM7CisJYWNwaV9zdGF0dXMgcnYgPSBBRV9PSzsKKworCWlmICghYXN1cy0+aGF2ZV9yc3RzKQorCQlyZXR1cm4gKGFzdXMtPndpcmVsZXNzX3N0YXR1cyAmIG1hc2spID8gMSA6IDA7CisKKwlydiA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihhc3VzLT5oYW5kbGUsIE1FVEhPRF9XTF9TVEFUVVMsCisJCQkJICAgTlVMTCwgJnN0YXR1cyk7CisJaWYgKEFDUElfRkFJTFVSRShydikpIHsKKwkJcHJfd2FybmluZygiRXJyb3IgcmVhZGluZyBXaXJlbGVzcyBzdGF0dXNcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuICEhKHN0YXR1cyAmIG1hc2spOworfQorCisvKgogICogV0xBTgogICovCitzdGF0aWMgaW50IGFzdXNfd2xhbl9zZXQoc3RydWN0IGFzdXNfbGFwdG9wICphc3VzLCBpbnQgc3RhdHVzKQoreworCWlmICh3cml0ZV9hY3BpX2ludChhc3VzLT5oYW5kbGUsIE1FVEhPRF9XTEFOLCAhIXN0YXR1cykpIHsKKwkJcHJfd2FybmluZygiRXJyb3Igc2V0dGluZyB3bGFuIHN0YXR1cyB0byAlZCIsIHN0YXR1cyk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHNzaXplX3Qgc2hvd193bGFuKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCByZWFkX3N0YXR1cyhXTF9PTikpOworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGFzdXNfd2lyZWxlc3Nfc3RhdHVzKGFzdXMsIFdMX1JTVFMpKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfd2xhbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlyZXR1cm4gc3RvcmVfc3RhdHVzKGJ1ZiwgY291bnQsIHdsX3N3aXRjaF9oYW5kbGUsIFdMX09OKTsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzeXNmc19hY3BpX3NldChhc3VzLCBidWYsIGNvdW50LCBNRVRIT0RfV0xBTik7CiB9CiAKIC8qCiAgKiBCbHVldG9vdGgKICAqLworc3RhdGljIGludCBhc3VzX2JsdWV0b290aF9zZXQoc3RydWN0IGFzdXNfbGFwdG9wICphc3VzLCBpbnQgc3RhdHVzKQoreworCWlmICh3cml0ZV9hY3BpX2ludChhc3VzLT5oYW5kbGUsIE1FVEhPRF9CTFVFVE9PVEgsICEhc3RhdHVzKSkgeworCQlwcl93YXJuaW5nKCJFcnJvciBzZXR0aW5nIGJsdWV0b290aCBzdGF0dXMgdG8gJWQiLCBzdGF0dXMpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHNob3dfYmx1ZXRvb3RoKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHJlYWRfc3RhdHVzKEJUX09OKSk7CisJc3RydWN0IGFzdXNfbGFwdG9wICphc3VzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgYXN1c193aXJlbGVzc19zdGF0dXMoYXN1cywgQlRfUlNUUykpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9ibHVldG9vdGgoc3RydWN0IGRldmljZSAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCiAJCQkgICAgICAgc2l6ZV90IGNvdW50KQogewotCXJldHVybiBzdG9yZV9zdGF0dXMoYnVmLCBjb3VudCwgYnRfc3dpdGNoX2hhbmRsZSwgQlRfT04pOworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHN5c2ZzX2FjcGlfc2V0KGFzdXMsIGJ1ZiwgY291bnQsIE1FVEhPRF9CTFVFVE9PVEgpOwogfQogCiAvKgogICogRGlzcGxheQogICovCi1zdGF0aWMgdm9pZCBzZXRfZGlzcGxheShpbnQgdmFsdWUpCitzdGF0aWMgdm9pZCBhc3VzX3NldF9kaXNwbGF5KHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cywgaW50IHZhbHVlKQogewogCS8qIG5vIHNhbml0eSBjaGVjayBuZWVkZWQgZm9yIG5vdyAqLwotCWlmICh3cml0ZV9hY3BpX2ludChkaXNwbGF5X3NldF9oYW5kbGUsIE5VTEwsIHZhbHVlLCBOVUxMKSkKKwlpZiAod3JpdGVfYWNwaV9pbnQoYXN1cy0+aGFuZGxlLCBNRVRIT0RfU1dJVENIX0RJU1BMQVksIHZhbHVlKSkKIAkJcHJfd2FybmluZygiRXJyb3Igc2V0dGluZyBkaXNwbGF5XG4iKTsKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbnQgcmVhZF9kaXNwbGF5KHZvaWQpCitzdGF0aWMgaW50IHJlYWRfZGlzcGxheShzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMpCiB7CiAJdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlID0gMDsKIAlhY3BpX3N0YXR1cyBydiA9IEFFX09LOwpAQCAtNzY5LDcgKzkwNCw3IEBACiAJCQlwcl93YXJuaW5nKCJFcnJvciByZWFkaW5nIGRpc3BsYXkgc3RhdHVzXG4iKTsKIAl9CiAKLQl2YWx1ZSAmPSAweDBGOwkJLyogbmVlZGVkIGZvciBzb21lIG1vZGVscywgc2hvdWxkbid0IGh1cnQgb3RoZXJzICovCisJdmFsdWUgJj0gMHgwRjsgLyogbmVlZGVkIGZvciBzb21lIG1vZGVscywgc2hvdWxkbid0IGh1cnQgb3RoZXJzICovCiAKIAlyZXR1cm4gdmFsdWU7CiB9CkBAIC03ODEsNyArOTE2LDExIEBACiBzdGF0aWMgc3NpemVfdCBzaG93X2Rpc3Aoc3RydWN0IGRldmljZSAqZGV2LAogCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHJlYWRfZGlzcGxheSgpKTsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmICghZGlzcGxheV9nZXRfaGFuZGxlKQorCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcmVhZF9kaXNwbGF5KGFzdXMpKTsKIH0KIAogLyoKQEAgLTc5NCw2NSArOTMzLDcyIEBACiBzdGF0aWMgc3NpemVfdCBzdG9yZV9kaXNwKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogeworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCBydiwgdmFsdWU7CiAKIAlydiA9IHBhcnNlX2FyZyhidWYsIGNvdW50LCAmdmFsdWUpOwogCWlmIChydiA+IDApCi0JCXNldF9kaXNwbGF5KHZhbHVlKTsKKwkJYXN1c19zZXRfZGlzcGxheShhc3VzLCB2YWx1ZSk7CiAJcmV0dXJuIHJ2OwogfQogCiAvKgogICogTGlnaHQgU2VucwogICovCi1zdGF0aWMgdm9pZCBzZXRfbGlnaHRfc2Vuc19zd2l0Y2goaW50IHZhbHVlKQorc3RhdGljIHZvaWQgYXN1c19hbHNfc3dpdGNoKHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cywgaW50IHZhbHVlKQogewotCWlmICh3cml0ZV9hY3BpX2ludChsc19zd2l0Y2hfaGFuZGxlLCBOVUxMLCB2YWx1ZSwgTlVMTCkpCisJaWYgKHdyaXRlX2FjcGlfaW50KGFzdXMtPmhhbmRsZSwgTUVUSE9EX0FMU19DT05UUk9MLCB2YWx1ZSkpCiAJCXByX3dhcm5pbmcoIkVycm9yIHNldHRpbmcgbGlnaHQgc2Vuc29yIHN3aXRjaFxuIik7Ci0JaG90ay0+bGlnaHRfc3dpdGNoID0gdmFsdWU7CisJYXN1cy0+bGlnaHRfc3dpdGNoID0gdmFsdWU7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfbHNzdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaG90ay0+bGlnaHRfc3dpdGNoKTsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBhc3VzLT5saWdodF9zd2l0Y2gpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzdG9yZV9sc3N3KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCQkgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogeworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCBydiwgdmFsdWU7CiAKIAlydiA9IHBhcnNlX2FyZyhidWYsIGNvdW50LCAmdmFsdWUpOwogCWlmIChydiA+IDApCi0JCXNldF9saWdodF9zZW5zX3N3aXRjaCh2YWx1ZSA/IDEgOiAwKTsKKwkJYXN1c19hbHNfc3dpdGNoKGFzdXMsIHZhbHVlID8gMSA6IDApOwogCiAJcmV0dXJuIHJ2OwogfQogCi1zdGF0aWMgdm9pZCBzZXRfbGlnaHRfc2Vuc19sZXZlbChpbnQgdmFsdWUpCitzdGF0aWMgdm9pZCBhc3VzX2Fsc19sZXZlbChzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMsIGludCB2YWx1ZSkKIHsKLQlpZiAod3JpdGVfYWNwaV9pbnQobHNfbGV2ZWxfaGFuZGxlLCBOVUxMLCB2YWx1ZSwgTlVMTCkpCisJaWYgKHdyaXRlX2FjcGlfaW50KGFzdXMtPmhhbmRsZSwgTUVUSE9EX0FMU19MRVZFTCwgdmFsdWUpKQogCQlwcl93YXJuaW5nKCJFcnJvciBzZXR0aW5nIGxpZ2h0IHNlbnNvciBsZXZlbFxuIik7Ci0JaG90ay0+bGlnaHRfbGV2ZWwgPSB2YWx1ZTsKKwlhc3VzLT5saWdodF9sZXZlbCA9IHZhbHVlOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X2xzbHZsKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCSAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaG90ay0+bGlnaHRfbGV2ZWwpOworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGFzdXMtPmxpZ2h0X2xldmVsKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc3RvcmVfbHNsdmwoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogeworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCBydiwgdmFsdWU7CiAKIAlydiA9IHBhcnNlX2FyZyhidWYsIGNvdW50LCAmdmFsdWUpOwogCWlmIChydiA+IDApIHsKIAkJdmFsdWUgPSAoMCA8IHZhbHVlKSA/ICgoMTUgPCB2YWx1ZSkgPyAxNSA6IHZhbHVlKSA6IDA7CiAJCS8qIDAgPD0gdmFsdWUgPD0gMTUgKi8KLQkJc2V0X2xpZ2h0X3NlbnNfbGV2ZWwodmFsdWUpOworCQlhc3VzX2Fsc19sZXZlbChhc3VzLCB2YWx1ZSk7CiAJfQogCiAJcmV0dXJuIHJ2OwpAQCAtODYxLDE5NyArMTAwNywzMDkgQEAKIC8qCiAgKiBHUFMKICAqLworc3RhdGljIGludCBhc3VzX2dwc19zdGF0dXMoc3RydWN0IGFzdXNfbGFwdG9wICphc3VzKQoreworCXVuc2lnbmVkIGxvbmcgbG9uZyBzdGF0dXM7CisJYWNwaV9zdGF0dXMgcnYgPSBBRV9PSzsKKworCXJ2ID0gYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGFzdXMtPmhhbmRsZSwgTUVUSE9EX0dQU19TVEFUVVMsCisJCQkJICAgTlVMTCwgJnN0YXR1cyk7CisJaWYgKEFDUElfRkFJTFVSRShydikpIHsKKwkJcHJfd2FybmluZygiRXJyb3IgcmVhZGluZyBHUFMgc3RhdHVzXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCXJldHVybiAhIXN0YXR1czsKK30KKworc3RhdGljIGludCBhc3VzX2dwc19zd2l0Y2goc3RydWN0IGFzdXNfbGFwdG9wICphc3VzLCBpbnQgc3RhdHVzKQoreworCWNvbnN0IGNoYXIgKm1ldGggPSBzdGF0dXMgPyBNRVRIT0RfR1BTX09OIDogTUVUSE9EX0dQU19PRkY7CisKKwlpZiAod3JpdGVfYWNwaV9pbnQoYXN1cy0+aGFuZGxlLCBtZXRoLCAweDAyKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHNob3dfZ3BzKHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHJlYWRfc3RhdHVzKEdQU19PTikpOworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGFzdXNfZ3BzX3N0YXR1cyhhc3VzKSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2dwcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewotCXJldHVybiBzdG9yZV9zdGF0dXMoYnVmLCBjb3VudCwgTlVMTCwgR1BTX09OKTsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlpbnQgcnYsIHZhbHVlOworCWludCByZXQ7CisKKwlydiA9IHBhcnNlX2FyZyhidWYsIGNvdW50LCAmdmFsdWUpOworCWlmIChydiA8PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXQgPSBhc3VzX2dwc19zd2l0Y2goYXN1cywgISF2YWx1ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlyZmtpbGxfc2V0X3N3X3N0YXRlKGFzdXMtPmdwc19yZmtpbGwsICF2YWx1ZSk7CisJcmV0dXJuIHJ2OwogfQogCiAvKgotICogSG90a2V5IGZ1bmN0aW9ucworICogcmZraWxsCiAgKi8KLXN0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5ICphc3VzX2dldF9lbnRyeV9ieV9zY2FuY29kZShpbnQgY29kZSkKK3N0YXRpYyBpbnQgYXN1c19ncHNfcmZraWxsX3NldCh2b2lkICpkYXRhLCBib29sIGJsb2NrZWQpCiB7Ci0Jc3RydWN0IGtleV9lbnRyeSAqa2V5OworCWFjcGlfaGFuZGxlIGhhbmRsZSA9IGRhdGE7CiAKLQlmb3IgKGtleSA9IGFzdXNfa2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykKLQkJaWYgKGNvZGUgPT0ga2V5LT5jb2RlKQotCQkJcmV0dXJuIGtleTsKLQotCXJldHVybiBOVUxMOworCXJldHVybiBhc3VzX2dwc19zd2l0Y2goaGFuZGxlLCAhYmxvY2tlZCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5ICphc3VzX2dldF9lbnRyeV9ieV9rZXljb2RlKGludCBjb2RlKQorc3RhdGljIGNvbnN0IHN0cnVjdCByZmtpbGxfb3BzIGFzdXNfZ3BzX3Jma2lsbF9vcHMgPSB7CisJLnNldF9ibG9jayA9IGFzdXNfZ3BzX3Jma2lsbF9zZXQsCit9OworCitzdGF0aWMgdm9pZCBhc3VzX3Jma2lsbF9leGl0KHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cykKIHsKLQlzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7Ci0KLQlmb3IgKGtleSA9IGFzdXNfa2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykKLQkJaWYgKGNvZGUgPT0ga2V5LT5rZXljb2RlICYmIGtleS0+dHlwZSA9PSBLRV9LRVkpCi0JCQlyZXR1cm4ga2V5OwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQgYXN1c19nZXRrZXljb2RlKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgaW50IHNjYW5jb2RlLCBpbnQgKmtleWNvZGUpCi17Ci0Jc3RydWN0IGtleV9lbnRyeSAqa2V5ID0gYXN1c19nZXRfZW50cnlfYnlfc2NhbmNvZGUoc2NhbmNvZGUpOwotCi0JaWYgKGtleSAmJiBrZXktPnR5cGUgPT0gS0VfS0VZKSB7Ci0JCSprZXljb2RlID0ga2V5LT5rZXljb2RlOwotCQlyZXR1cm4gMDsKKwlpZiAoYXN1cy0+Z3BzX3Jma2lsbCkgeworCQlyZmtpbGxfdW5yZWdpc3Rlcihhc3VzLT5ncHNfcmZraWxsKTsKKwkJcmZraWxsX2Rlc3Ryb3koYXN1cy0+Z3BzX3Jma2lsbCk7CisJCWFzdXMtPmdwc19yZmtpbGwgPSBOVUxMOwogCX0KLQotCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IGFzdXNfc2V0a2V5Y29kZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBzY2FuY29kZSwgaW50IGtleWNvZGUpCitzdGF0aWMgaW50IGFzdXNfcmZraWxsX2luaXQoc3RydWN0IGFzdXNfbGFwdG9wICphc3VzKQogewotCXN0cnVjdCBrZXlfZW50cnkgKmtleTsKLQlpbnQgb2xkX2tleWNvZGU7CisJaW50IHJlc3VsdDsKIAotCWlmIChrZXljb2RlIDwgMCB8fCBrZXljb2RlID4gS0VZX01BWCkKKwlpZiAoYWNwaV9jaGVja19oYW5kbGUoYXN1cy0+aGFuZGxlLCBNRVRIT0RfR1BTX09OLCBOVUxMKSB8fAorCSAgICBhY3BpX2NoZWNrX2hhbmRsZShhc3VzLT5oYW5kbGUsIE1FVEhPRF9HUFNfT0ZGLCBOVUxMKSB8fAorCSAgICBhY3BpX2NoZWNrX2hhbmRsZShhc3VzLT5oYW5kbGUsIE1FVEhPRF9HUFNfU1RBVFVTLCBOVUxMKSkKKwkJcmV0dXJuIDA7CisKKwlhc3VzLT5ncHNfcmZraWxsID0gcmZraWxsX2FsbG9jKCJhc3VzLWdwcyIsICZhc3VzLT5wbGF0Zm9ybV9kZXZpY2UtPmRldiwKKwkJCQkJUkZLSUxMX1RZUEVfR1BTLAorCQkJCQkmYXN1c19ncHNfcmZraWxsX29wcywgTlVMTCk7CisJaWYgKCFhc3VzLT5ncHNfcmZraWxsKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWtleSA9IGFzdXNfZ2V0X2VudHJ5X2J5X3NjYW5jb2RlKHNjYW5jb2RlKTsKLQlpZiAoa2V5ICYmIGtleS0+dHlwZSA9PSBLRV9LRVkpIHsKLQkJb2xkX2tleWNvZGUgPSBrZXktPmtleWNvZGU7Ci0JCWtleS0+a2V5Y29kZSA9IGtleWNvZGU7Ci0JCXNldF9iaXQoa2V5Y29kZSwgZGV2LT5rZXliaXQpOwotCQlpZiAoIWFzdXNfZ2V0X2VudHJ5X2J5X2tleWNvZGUob2xkX2tleWNvZGUpKQotCQkJY2xlYXJfYml0KG9sZF9rZXljb2RlLCBkZXYtPmtleWJpdCk7Ci0JCXJldHVybiAwOworCXJlc3VsdCA9IHJma2lsbF9yZWdpc3Rlcihhc3VzLT5ncHNfcmZraWxsKTsKKwlpZiAocmVzdWx0KSB7CisJCXJma2lsbF9kZXN0cm95KGFzdXMtPmdwc19yZmtpbGwpOworCQlhc3VzLT5ncHNfcmZraWxsID0gTlVMTDsKIAl9CiAKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCBhc3VzX2hvdGtfbm90aWZ5KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCB1MzIgZXZlbnQpCisvKgorICogSW5wdXQgZGV2aWNlIChpLmUuIGhvdGtleXMpCisgKi8KK3N0YXRpYyB2b2lkIGFzdXNfaW5wdXRfbm90aWZ5KHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cywgaW50IGV2ZW50KQogewotCXN0YXRpYyBzdHJ1Y3Qga2V5X2VudHJ5ICprZXk7Ci0JdTE2IGNvdW50OworCWlmIChhc3VzLT5pbnB1dGRldikKKwkJc3BhcnNlX2tleW1hcF9yZXBvcnRfZXZlbnQoYXN1cy0+aW5wdXRkZXYsIGV2ZW50LCAxLCB0cnVlKTsKK30KIAotCS8qIFRPRE8gRmluZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIGV2ZW50cyBjb3VudC4gKi8KLQlpZiAoIWhvdGspCi0JCXJldHVybjsKK3N0YXRpYyBpbnQgYXN1c19pbnB1dF9pbml0KHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cykKK3sKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwlpbnQgZXJyb3I7CisKKwlpbnB1dCA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOworCWlmICghaW5wdXQpIHsKKwkJcHJfaW5mbygiVW5hYmxlIHRvIGFsbG9jYXRlIGlucHV0IGRldmljZVxuIik7CisJCXJldHVybiAwOworCX0KKwlpbnB1dC0+bmFtZSA9ICJBc3VzIExhcHRvcCBleHRyYSBidXR0b25zIjsKKwlpbnB1dC0+cGh5cyA9IEFTVVNfTEFQVE9QX0ZJTEUgIi9pbnB1dDAiOworCWlucHV0LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7CisJaW5wdXQtPmRldi5wYXJlbnQgPSAmYXN1cy0+cGxhdGZvcm1fZGV2aWNlLT5kZXY7CisJaW5wdXRfc2V0X2RydmRhdGEoaW5wdXQsIGFzdXMpOworCisJZXJyb3IgPSBzcGFyc2Vfa2V5bWFwX3NldHVwKGlucHV0LCBhc3VzX2tleW1hcCwgTlVMTCk7CisJaWYgKGVycm9yKSB7CisJCXByX2VycigiVW5hYmxlIHRvIHNldHVwIGlucHV0IGRldmljZSBrZXltYXBcbiIpOworCQlnb3RvIGVycl9rZXltYXA7CisJfQorCWVycm9yID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGlucHV0KTsKKwlpZiAoZXJyb3IpIHsKKwkJcHJfaW5mbygiVW5hYmxlIHRvIHJlZ2lzdGVyIGlucHV0IGRldmljZVxuIik7CisJCWdvdG8gZXJyX2RldmljZTsKKwl9CisKKwlhc3VzLT5pbnB1dGRldiA9IGlucHV0OworCXJldHVybiAwOworCitlcnJfa2V5bWFwOgorCXNwYXJzZV9rZXltYXBfZnJlZShpbnB1dCk7CitlcnJfZGV2aWNlOgorCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyB2b2lkIGFzdXNfaW5wdXRfZXhpdChzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMpCit7CisJaWYgKGFzdXMtPmlucHV0ZGV2KSB7CisJCXNwYXJzZV9rZXltYXBfZnJlZShhc3VzLT5pbnB1dGRldik7CisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGFzdXMtPmlucHV0ZGV2KTsKKwl9Cit9CisKKy8qCisgKiBBQ1BJIGRyaXZlcgorICovCitzdGF0aWMgdm9pZCBhc3VzX2FjcGlfbm90aWZ5KHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlLCB1MzIgZXZlbnQpCit7CisJc3RydWN0IGFzdXNfbGFwdG9wICphc3VzID0gYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpOworCXUxNiBjb3VudDsKIAogCS8qCiAJICogV2UgbmVlZCB0byB0ZWxsIHRoZSBiYWNrbGlnaHQgZGV2aWNlIHdoZW4gdGhlIGJhY2tsaWdodCBwb3dlciBpcwogCSAqIHN3aXRjaGVkCiAJICovCi0JaWYgKGV2ZW50ID09IEFUS0RfTENEX09OKSB7Ci0JCXdyaXRlX3N0YXR1cyhOVUxMLCAxLCBMQ0RfT04pOwotCQlsY2RfYmxhbmsoRkJfQkxBTktfVU5CTEFOSyk7Ci0JfSBlbHNlIGlmIChldmVudCA9PSBBVEtEX0xDRF9PRkYpIHsKLQkJd3JpdGVfc3RhdHVzKE5VTEwsIDAsIExDRF9PTik7Ci0JCWxjZF9ibGFuayhGQl9CTEFOS19QT1dFUkRPV04pOwotCX0KKwlpZiAoZXZlbnQgPT0gQVRLRF9MQ0RfT04pCisJCWxjZF9ibGFuayhhc3VzLCBGQl9CTEFOS19VTkJMQU5LKTsKKwllbHNlIGlmIChldmVudCA9PSBBVEtEX0xDRF9PRkYpCisJCWxjZF9ibGFuayhhc3VzLCBGQl9CTEFOS19QT1dFUkRPV04pOwogCi0JY291bnQgPSBob3RrLT5ldmVudF9jb3VudFtldmVudCAlIDEyOF0rKzsKLQlhY3BpX2J1c19nZW5lcmF0ZV9wcm9jX2V2ZW50KGhvdGstPmRldmljZSwgZXZlbnQsIGNvdW50KTsKLQlhY3BpX2J1c19nZW5lcmF0ZV9uZXRsaW5rX2V2ZW50KGhvdGstPmRldmljZS0+cG5wLmRldmljZV9jbGFzcywKLQkJCQkJZGV2X25hbWUoJmhvdGstPmRldmljZS0+ZGV2KSwgZXZlbnQsCisJLyogVE9ETyBGaW5kIGEgYmV0dGVyIHdheSB0byBoYW5kbGUgZXZlbnRzIGNvdW50LiAqLworCWNvdW50ID0gYXN1cy0+ZXZlbnRfY291bnRbZXZlbnQgJSAxMjhdKys7CisJYWNwaV9idXNfZ2VuZXJhdGVfcHJvY19ldmVudChhc3VzLT5kZXZpY2UsIGV2ZW50LCBjb3VudCk7CisJYWNwaV9idXNfZ2VuZXJhdGVfbmV0bGlua19ldmVudChhc3VzLT5kZXZpY2UtPnBucC5kZXZpY2VfY2xhc3MsCisJCQkJCWRldl9uYW1lKCZhc3VzLT5kZXZpY2UtPmRldiksIGV2ZW50LAogCQkJCQljb3VudCk7CiAKLQlpZiAoaG90ay0+aW5wdXRkZXYpIHsKLQkJa2V5ID0gYXN1c19nZXRfZW50cnlfYnlfc2NhbmNvZGUoZXZlbnQpOwotCQlpZiAoIWtleSkKLQkJCXJldHVybiA7CisJLyogQnJpZ2h0bmVzcyBldmVudHMgYXJlIHNwZWNpYWwgKi8KKwlpZiAoZXZlbnQgPj0gQVRLRF9CUl9NSU4gJiYgZXZlbnQgPD0gQVRLRF9CUl9NQVgpIHsKIAotCQlzd2l0Y2ggKGtleS0+dHlwZSkgewotCQljYXNlIEtFX0tFWToKLQkJCWlucHV0X3JlcG9ydF9rZXkoaG90ay0+aW5wdXRkZXYsIGtleS0+a2V5Y29kZSwgMSk7Ci0JCQlpbnB1dF9zeW5jKGhvdGstPmlucHV0ZGV2KTsKLQkJCWlucHV0X3JlcG9ydF9rZXkoaG90ay0+aW5wdXRkZXYsIGtleS0+a2V5Y29kZSwgMCk7Ci0JCQlpbnB1dF9zeW5jKGhvdGstPmlucHV0ZGV2KTsKLQkJCWJyZWFrOworCQkvKiBJZ25vcmUgdGhlbSBjb21wbGV0ZWx5IGlmIHRoZSBhY3BpIHZpZGVvIGRyaXZlciBpcyB1c2VkICovCisJCWlmIChhc3VzLT5iYWNrbGlnaHRfZGV2aWNlICE9IE5VTEwpIHsKKwkJCS8qIFVwZGF0ZSB0aGUgYmFja2xpZ2h0IGRldmljZS4gKi8KKwkJCWFzdXNfYmFja2xpZ2h0X25vdGlmeShhc3VzKTsKIAkJfQorCQlyZXR1cm4gOwogCX0KKwlhc3VzX2lucHV0X25vdGlmeShhc3VzLCBldmVudCk7CiB9CiAKLSNkZWZpbmUgQVNVU19DUkVBVEVfREVWSUNFX0FUVFIoX25hbWUpCQkJCQlcCi0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2F0dHJfIyNfbmFtZSA9IHsJCQlcCi0JCS5hdHRyID0gewkJCQkJCVwKLQkJCS5uYW1lID0gX19zdHJpbmdpZnkoX25hbWUpLAkJCVwKLQkJCS5tb2RlID0gMCB9LAkJCQkJXAotCQkuc2hvdyAgID0gTlVMTCwJCQkJCQlcCi0JCS5zdG9yZSAgPSBOVUxMLAkJCQkJCVwKLQl9CitzdGF0aWMgREVWSUNFX0FUVFIoaW5mb3MsIFNfSVJVR08sIHNob3dfaW5mb3MsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHdsYW4sIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3dsYW4sIHN0b3JlX3dsYW4pOworc3RhdGljIERFVklDRV9BVFRSKGJsdWV0b290aCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfYmx1ZXRvb3RoLAorCQkgICBzdG9yZV9ibHVldG9vdGgpOworc3RhdGljIERFVklDRV9BVFRSKGRpc3BsYXksIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2Rpc3AsIHN0b3JlX2Rpc3ApOworc3RhdGljIERFVklDRV9BVFRSKGxlZGQsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2xlZGQsIHN0b3JlX2xlZGQpOworc3RhdGljIERFVklDRV9BVFRSKGxzX2xldmVsLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19sc2x2bCwgc3RvcmVfbHNsdmwpOworc3RhdGljIERFVklDRV9BVFRSKGxzX3N3aXRjaCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfbHNzdywgc3RvcmVfbHNzdyk7CitzdGF0aWMgREVWSUNFX0FUVFIoZ3BzLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19ncHMsIHN0b3JlX2dwcyk7CiAKLSNkZWZpbmUgQVNVU19TRVRfREVWSUNFX0FUVFIoX25hbWUsIF9tb2RlLCBfc2hvdywgX3N0b3JlKQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJZGV2X2F0dHJfIyNfbmFtZS5hdHRyLm1vZGUgPSBfbW9kZTsJCQlcCi0JCWRldl9hdHRyXyMjX25hbWUuc2hvdyA9IF9zaG93OwkJCQlcCi0JCWRldl9hdHRyXyMjX25hbWUuc3RvcmUgPSBfc3RvcmU7CQkJXAotCX0gd2hpbGUoMCkKLQotc3RhdGljIEFTVVNfQ1JFQVRFX0RFVklDRV9BVFRSKGluZm9zKTsKLXN0YXRpYyBBU1VTX0NSRUFURV9ERVZJQ0VfQVRUUih3bGFuKTsKLXN0YXRpYyBBU1VTX0NSRUFURV9ERVZJQ0VfQVRUUihibHVldG9vdGgpOwotc3RhdGljIEFTVVNfQ1JFQVRFX0RFVklDRV9BVFRSKGRpc3BsYXkpOwotc3RhdGljIEFTVVNfQ1JFQVRFX0RFVklDRV9BVFRSKGxlZGQpOwotc3RhdGljIEFTVVNfQ1JFQVRFX0RFVklDRV9BVFRSKGxzX3N3aXRjaCk7Ci1zdGF0aWMgQVNVU19DUkVBVEVfREVWSUNFX0FUVFIobHNfbGV2ZWwpOwotc3RhdGljIEFTVVNfQ1JFQVRFX0RFVklDRV9BVFRSKGdwcyk7Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphc3VzcGZfYXR0cmlidXRlc1tdID0gewotCSZkZXZfYXR0cl9pbmZvcy5hdHRyLAotCSZkZXZfYXR0cl93bGFuLmF0dHIsCi0JJmRldl9hdHRyX2JsdWV0b290aC5hdHRyLAotCSZkZXZfYXR0cl9kaXNwbGF5LmF0dHIsCi0JJmRldl9hdHRyX2xlZGQuYXR0ciwKLQkmZGV2X2F0dHJfbHNfc3dpdGNoLmF0dHIsCi0JJmRldl9hdHRyX2xzX2xldmVsLmF0dHIsCi0JJmRldl9hdHRyX2dwcy5hdHRyLAotCU5VTEwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFzdXNwZl9hdHRyaWJ1dGVfZ3JvdXAgPSB7Ci0JLmF0dHJzID0gYXN1c3BmX2F0dHJpYnV0ZXMKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFzdXNwZl9kcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJICAgLm5hbWUgPSBBU1VTX0hPVEtfRklMRSwKLQkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JCSAgIH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICphc3VzcGZfZGV2aWNlOwotCi1zdGF0aWMgdm9pZCBhc3VzX2hvdGtfYWRkX2ZzKHZvaWQpCitzdGF0aWMgdm9pZCBhc3VzX3N5c2ZzX2V4aXQoc3RydWN0IGFzdXNfbGFwdG9wICphc3VzKQogewotCUFTVVNfU0VUX0RFVklDRV9BVFRSKGluZm9zLCAwNDQ0LCBzaG93X2luZm9zLCBOVUxMKTsKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UgPSBhc3VzLT5wbGF0Zm9ybV9kZXZpY2U7CiAKLQlpZiAod2xfc3dpdGNoX2hhbmRsZSkKLQkJQVNVU19TRVRfREVWSUNFX0FUVFIod2xhbiwgMDY0NCwgc2hvd193bGFuLCBzdG9yZV93bGFuKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfaW5mb3MpOworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl93bGFuKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfYmx1ZXRvb3RoKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfZGlzcGxheSk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2xlZGQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9sc19zd2l0Y2gpOworCWRldmljZV9yZW1vdmVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9sc19sZXZlbCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2dwcyk7Cit9CiAKLQlpZiAoYnRfc3dpdGNoX2hhbmRsZSkKLQkJQVNVU19TRVRfREVWSUNFX0FUVFIoYmx1ZXRvb3RoLCAwNjQ0LAotCQkJCSAgICAgc2hvd19ibHVldG9vdGgsIHN0b3JlX2JsdWV0b290aCk7CitzdGF0aWMgaW50IGFzdXNfc3lzZnNfaW5pdChzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMpCit7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlID0gYXN1cy0+cGxhdGZvcm1fZGV2aWNlOworCWludCBlcnI7CiAKLQlpZiAoZGlzcGxheV9zZXRfaGFuZGxlICYmIGRpc3BsYXlfZ2V0X2hhbmRsZSkKLQkJQVNVU19TRVRfREVWSUNFX0FUVFIoZGlzcGxheSwgMDY0NCwgc2hvd19kaXNwLCBzdG9yZV9kaXNwKTsKLQllbHNlIGlmIChkaXNwbGF5X3NldF9oYW5kbGUpCi0JCUFTVVNfU0VUX0RFVklDRV9BVFRSKGRpc3BsYXksIDAyMDAsIE5VTEwsIHN0b3JlX2Rpc3ApOworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9pbmZvcyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKIAotCWlmIChsZWRkX3NldF9oYW5kbGUpCi0JCUFTVVNfU0VUX0RFVklDRV9BVFRSKGxlZGQsIDA2NDQsIHNob3dfbGVkZCwgc3RvcmVfbGVkZCk7Ci0KLQlpZiAobHNfc3dpdGNoX2hhbmRsZSAmJiBsc19sZXZlbF9oYW5kbGUpIHsKLQkJQVNVU19TRVRfREVWSUNFX0FUVFIobHNfbGV2ZWwsIDA2NDQsIHNob3dfbHNsdmwsIHN0b3JlX2xzbHZsKTsKLQkJQVNVU19TRVRfREVWSUNFX0FUVFIobHNfc3dpdGNoLCAwNjQ0LCBzaG93X2xzc3csIHN0b3JlX2xzc3cpOworCWlmICghYWNwaV9jaGVja19oYW5kbGUoYXN1cy0+aGFuZGxlLCBNRVRIT0RfV0xBTiwgTlVMTCkpIHsKKwkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX3dsYW4pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKIAl9CiAKLQlpZiAoZ3BzX3N0YXR1c19oYW5kbGUgJiYgZ3BzX29uX2hhbmRsZSAmJiBncHNfb2ZmX2hhbmRsZSkKLQkJQVNVU19TRVRfREVWSUNFX0FUVFIoZ3BzLCAwNjQ0LCBzaG93X2dwcywgc3RvcmVfZ3BzKTsKKwlpZiAoIWFjcGlfY2hlY2tfaGFuZGxlKGFzdXMtPmhhbmRsZSwgTUVUSE9EX0JMVUVUT09USCwgTlVMTCkpIHsKKwkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2JsdWV0b290aCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmICghYWNwaV9jaGVja19oYW5kbGUoYXN1cy0+aGFuZGxlLCBNRVRIT0RfU1dJVENIX0RJU1BMQVksIE5VTEwpKSB7CisJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9kaXNwbGF5KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJaWYgKCFhY3BpX2NoZWNrX2hhbmRsZShhc3VzLT5oYW5kbGUsIE1FVEhPRF9MRURELCBOVUxMKSkgeworCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfbGVkZCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCWlmICghYWNwaV9jaGVja19oYW5kbGUoYXN1cy0+aGFuZGxlLCBNRVRIT0RfQUxTX0NPTlRST0wsIE5VTEwpICYmCisJICAgICFhY3BpX2NoZWNrX2hhbmRsZShhc3VzLT5oYW5kbGUsIE1FVEhPRF9BTFNfTEVWRUwsIE5VTEwpKSB7CisJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmZGV2aWNlLT5kZXYsICZkZXZfYXR0cl9sc19zd2l0Y2gpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2xzX2xldmVsKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJaWYgKCFhY3BpX2NoZWNrX2hhbmRsZShhc3VzLT5oYW5kbGUsIE1FVEhPRF9HUFNfT04sIE5VTEwpICYmCisJICAgICFhY3BpX2NoZWNrX2hhbmRsZShhc3VzLT5oYW5kbGUsIE1FVEhPRF9HUFNfT0ZGLCBOVUxMKSAmJgorCSAgICAhYWNwaV9jaGVja19oYW5kbGUoYXN1cy0+aGFuZGxlLCBNRVRIT0RfR1BTX1NUQVRVUywgTlVMTCkpIHsKKwkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXZpY2UtPmRldiwgJmRldl9hdHRyX2dwcyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgYXN1c19wbGF0Zm9ybV9pbml0KHN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cykKK3sKKwlpbnQgZXJyOworCisJYXN1cy0+cGxhdGZvcm1fZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKEFTVVNfTEFQVE9QX0ZJTEUsIC0xKTsKKwlpZiAoIWFzdXMtPnBsYXRmb3JtX2RldmljZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcGxhdGZvcm1fc2V0X2RydmRhdGEoYXN1cy0+cGxhdGZvcm1fZGV2aWNlLCBhc3VzKTsKKworCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGQoYXN1cy0+cGxhdGZvcm1fZGV2aWNlKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxfcGxhdGZvcm1fZGV2aWNlOworCisJZXJyID0gYXN1c19zeXNmc19pbml0KGFzdXMpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbF9zeXNmczsKKwlyZXR1cm4gMDsKKworZmFpbF9zeXNmczoKKwlhc3VzX3N5c2ZzX2V4aXQoYXN1cyk7CisJcGxhdGZvcm1fZGV2aWNlX2RlbChhc3VzLT5wbGF0Zm9ybV9kZXZpY2UpOworZmFpbF9wbGF0Zm9ybV9kZXZpY2U6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChhc3VzLT5wbGF0Zm9ybV9kZXZpY2UpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGFzdXNfcGxhdGZvcm1fZXhpdChzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMpCit7CisJYXN1c19zeXNmc19leGl0KGFzdXMpOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGFzdXMtPnBsYXRmb3JtX2RldmljZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBsYXRmb3JtX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkubmFtZSA9IEFTVVNfTEFQVE9QX0ZJTEUsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0KK307CisKIHN0YXRpYyBpbnQgYXN1c19oYW5kbGVfaW5pdChjaGFyICpuYW1lLCBhY3BpX2hhbmRsZSAqIGhhbmRsZSwKIAkJCSAgICBjaGFyICoqcGF0aHMsIGludCBudW1fcGF0aHMpCiB7CkBAIC0xMDczLDEwICsxMzMxLDExIEBACiAJCQkgQVJSQVlfU0laRShvYmplY3QjI19wYXRocykpCiAKIC8qCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUgaG90ayB3aXRoIHJpZ2h0IHZhbHVlcy4gSW4gdGhpcwotICogbWV0aG9kLCB3ZSBjYW4gbWFrZSBhbGwgdGhlIGRldGVjdGlvbiB3ZSB3YW50LCBhbmQgbW9kaWZ5IHRoZSBob3RrIHN0cnVjdAorICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGluaXRpYWxpemUgdGhlIGNvbnRleHQgd2l0aCByaWdodCB2YWx1ZXMuIEluIHRoaXMKKyAqIG1ldGhvZCwgd2UgY2FuIG1ha2UgYWxsIHRoZSBkZXRlY3Rpb24gd2Ugd2FudCwgYW5kIG1vZGlmeSB0aGUgYXN1c19sYXB0b3AKKyAqIHN0cnVjdAogICovCi1zdGF0aWMgaW50IGFzdXNfaG90a19nZXRfaW5mbyh2b2lkKQorc3RhdGljIGludCBhc3VzX2xhcHRvcF9nZXRfaW5mbyhzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMpCiB7CiAJc3RydWN0IGFjcGlfYnVmZmVyIGJ1ZmZlciA9IHsgQUNQSV9BTExPQ0FURV9CVUZGRVIsIE5VTEwgfTsKIAl1bmlvbiBhY3BpX29iamVjdCAqbW9kZWwgPSBOVUxMOwpAQCAtMTA4OSwyMiArMTM0OCwyMSBAQAogCSAqIG1vZGVscywgYnV0IGxhdGUgZW5vdWdoIHRvIGFsbG93IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigpIHRvIGZhaWwKIAkgKiBiZWZvcmUgZG9pbmcgYW55dGhpbmcgQUNQSS1zcGVjaWZpYy4gU2hvdWxkIHdlIGVuY291bnRlciBhIG1hY2hpbmUsCiAJICogd2hpY2ggbmVlZHMgc3BlY2lhbCBoYW5kbGluZyAoaS5lLiBpdHMgaG90a2V5IGRldmljZSBoYXMgYSBkaWZmZXJlbnQKLQkgKiBISUQpLCB0aGlzIGJpdCB3aWxsIGJlIG1vdmVkLiBBIGdsb2JhbCB2YXJpYWJsZSBhc3VzX2luZm8gY29udGFpbnMKLQkgKiB0aGUgRFNEVCBoZWFkZXIuCisJICogSElEKSwgdGhpcyBiaXQgd2lsbCBiZSBtb3ZlZC4KIAkgKi8KLQlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19EU0RULCAxLCAmYXN1c19pbmZvKTsKKwlzdGF0dXMgPSBhY3BpX2dldF90YWJsZShBQ1BJX1NJR19EU0RULCAxLCAmYXN1cy0+ZHNkdF9pbmZvKTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXByX3dhcm5pbmcoIkNvdWxkbid0IGdldCB0aGUgRFNEVCB0YWJsZSBoZWFkZXJcbiIpOwogCiAJLyogV2UgaGF2ZSB0byB3cml0ZSAwIG9uIGluaXQgdGhpcyBmYXIgZm9yIGFsbCBBU1VTIG1vZGVscyAqLwotCWlmICh3cml0ZV9hY3BpX2ludChob3RrLT5oYW5kbGUsICJJTklUIiwgMCwgJmJ1ZmZlcikpIHsKKwlpZiAod3JpdGVfYWNwaV9pbnRfcmV0KGFzdXMtPmhhbmRsZSwgIklOSVQiLCAwLCAmYnVmZmVyKSkgewogCQlwcl9lcnIoIkhvdGtleSBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAkvKiBUaGlzIG5lZWRzIHRvIGJlIGNhbGxlZCBmb3Igc29tZSBsYXB0b3BzIHRvIGluaXQgcHJvcGVybHkgKi8KIAlzdGF0dXMgPQotCSAgICBhY3BpX2V2YWx1YXRlX2ludGVnZXIoaG90ay0+aGFuZGxlLCAiQlNUUyIsIE5VTEwsICZic3RzX3Jlc3VsdCk7CisJICAgIGFjcGlfZXZhbHVhdGVfaW50ZWdlcihhc3VzLT5oYW5kbGUsICJCU1RTIiwgTlVMTCwgJmJzdHNfcmVzdWx0KTsKIAlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpCiAJCXByX3dhcm5pbmcoIkVycm9yIGNhbGxpbmcgQlNUU1xuIik7CiAJZWxzZSBpZiAoYnN0c19yZXN1bHQpCkBAIC0xMTEyLDggKzEzNzAsOCBAQAogCQkgICAgICAgKHVpbnQpIGJzdHNfcmVzdWx0KTsKIAogCS8qIFRoaXMgdG9vIC4uLiAqLwotCXdyaXRlX2FjcGlfaW50KGhvdGstPmhhbmRsZSwgIkNXQVAiLCB3YXBmLCBOVUxMKTsKLQorCWlmICh3cml0ZV9hY3BpX2ludChhc3VzLT5oYW5kbGUsICJDV0FQIiwgd2FwZikpCisJCXByX2VycigiRXJyb3IgY2FsbGluZyBDV0FQKCVkKVxuIiwgd2FwZik7CiAJLyoKIAkgKiBUcnkgdG8gbWF0Y2ggdGhlIG9iamVjdCByZXR1cm5lZCBieSBJTklUIHRvIHRoZSBzcGVjaWZpYyBtb2RlbC4KIAkgKiBIYW5kbGUgZXZlcnkgcG9zc2libGUgb2JqZWN0IChvciB0aGUgbGFjayBvZiB0aGVyZW9mKSB0aGUgRFNEVApAQCAtMTEzNCwzOTcgKzEzOTIsMjEwIEBACiAJCQlicmVhazsKIAkJfQogCX0KLQlob3RrLT5uYW1lID0ga3N0cmR1cChzdHJpbmcsIEdGUF9LRVJORUwpOwotCWlmICghaG90ay0+bmFtZSkKKwlhc3VzLT5uYW1lID0ga3N0cmR1cChzdHJpbmcsIEdGUF9LRVJORUwpOworCWlmICghYXN1cy0+bmFtZSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpZiAoKnN0cmluZykKIAkJcHJfbm90aWNlKCIgICVzIG1vZGVsIGRldGVjdGVkXG4iLCBzdHJpbmcpOwogCi0JQVNVU19IQU5ETEVfSU5JVChtbGVkX3NldCk7Ci0JQVNVU19IQU5ETEVfSU5JVCh0bGVkX3NldCk7Ci0JQVNVU19IQU5ETEVfSU5JVChybGVkX3NldCk7Ci0JQVNVU19IQU5ETEVfSU5JVChwbGVkX3NldCk7Ci0JQVNVU19IQU5ETEVfSU5JVChnbGVkX3NldCk7Ci0KLQlBU1VTX0hBTkRMRV9JTklUKGxlZGRfc2V0KTsKLQotCUFTVVNfSEFORExFX0lOSVQoa2xlZF9zZXQpOwotCUFTVVNfSEFORExFX0lOSVQoa2xlZF9nZXQpOwotCiAJLyoKIAkgKiBUaGUgSFdSUyBtZXRob2QgcmV0dXJuIGluZm9ybWF0aW9ucyBhYm91dCB0aGUgaGFyZHdhcmUuCiAJICogMHg4MCBiaXQgaXMgZm9yIFdMQU4sIDB4MTAwIGZvciBCbHVldG9vdGguCiAJICogVGhlIHNpZ25pZmljYW5jZSBvZiBvdGhlcnMgaXMgeWV0IHRvIGJlIGZvdW5kLgotCSAqIElmIHdlIGRvbid0IGZpbmQgdGhlIG1ldGhvZCwgd2UgYXNzdW1lIHRoZSBkZXZpY2UgYXJlIHByZXNlbnQuCiAJICovCiAJc3RhdHVzID0KLQkgICAgYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGhvdGstPmhhbmRsZSwgIkhSV1MiLCBOVUxMLCAmaHdyc19yZXN1bHQpOwotCWlmIChBQ1BJX0ZBSUxVUkUoc3RhdHVzKSkKLQkJaHdyc19yZXN1bHQgPSBXTF9IV1JTIHwgQlRfSFdSUzsKKwkgICAgYWNwaV9ldmFsdWF0ZV9pbnRlZ2VyKGFzdXMtPmhhbmRsZSwgIkhSV1MiLCBOVUxMLCAmaHdyc19yZXN1bHQpOworCWlmICghQUNQSV9GQUlMVVJFKHN0YXR1cykpCisJCXByX25vdGljZSgiICBIUldTIHJldHVybmVkICV4IiwgKGludClod3JzX3Jlc3VsdCk7CiAKLQlpZiAoaHdyc19yZXN1bHQgJiBXTF9IV1JTKQotCQlBU1VTX0hBTkRMRV9JTklUKHdsX3N3aXRjaCk7Ci0JaWYgKGh3cnNfcmVzdWx0ICYgQlRfSFdSUykKLQkJQVNVU19IQU5ETEVfSU5JVChidF9zd2l0Y2gpOworCWlmICghYWNwaV9jaGVja19oYW5kbGUoYXN1cy0+aGFuZGxlLCBNRVRIT0RfV0xfU1RBVFVTLCBOVUxMKSkKKwkJYXN1cy0+aGF2ZV9yc3RzID0gdHJ1ZTsKIAotCUFTVVNfSEFORExFX0lOSVQod2lyZWxlc3Nfc3RhdHVzKTsKLQotCUFTVVNfSEFORExFX0lOSVQoYnJpZ2h0bmVzc19zZXQpOwotCUFTVVNfSEFORExFX0lOSVQoYnJpZ2h0bmVzc19nZXQpOwotCisJLyogU2NoZWR1bGVkIGZvciByZW1vdmFsICovCiAJQVNVU19IQU5ETEVfSU5JVChsY2Rfc3dpdGNoKTsKLQotCUFTVVNfSEFORExFX0lOSVQoZGlzcGxheV9zZXQpOwogCUFTVVNfSEFORExFX0lOSVQoZGlzcGxheV9nZXQpOwogCi0JLyoKLQkgKiBUaGVyZSBpcyBhIGxvdCBvZiBtb2RlbHMgd2l0aCAiQUxTTCIsIGJ1dCBhIGZldyBnZXQKLQkgKiBhIHJlYWwgbGlnaHQgc2Vucywgc28gd2UgbmVlZCB0byBjaGVjayBpdC4KLQkgKi8KLQlpZiAoIUFTVVNfSEFORExFX0lOSVQobHNfc3dpdGNoKSkKLQkJQVNVU19IQU5ETEVfSU5JVChsc19sZXZlbCk7Ci0KLQlBU1VTX0hBTkRMRV9JTklUKGdwc19vbik7Ci0JQVNVU19IQU5ETEVfSU5JVChncHNfb2ZmKTsKLQlBU1VTX0hBTkRMRV9JTklUKGdwc19zdGF0dXMpOwotCiAJa2ZyZWUobW9kZWwpOwogCiAJcmV0dXJuIEFFX09LOwogfQogCi1zdGF0aWMgaW50IGFzdXNfaW5wdXRfaW5pdCh2b2lkKQotewotCWNvbnN0IHN0cnVjdCBrZXlfZW50cnkgKmtleTsKLQlpbnQgcmVzdWx0Oworc3RhdGljIGJvb2wgYXN1c19kZXZpY2VfcHJlc2VudDsKIAotCWhvdGstPmlucHV0ZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCFob3RrLT5pbnB1dGRldikgewotCQlwcl9pbmZvKCJVbmFibGUgdG8gYWxsb2NhdGUgaW5wdXQgZGV2aWNlXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWhvdGstPmlucHV0ZGV2LT5uYW1lID0gIkFzdXMgTGFwdG9wIGV4dHJhIGJ1dHRvbnMiOwotCWhvdGstPmlucHV0ZGV2LT5waHlzID0gQVNVU19IT1RLX0ZJTEUgIi9pbnB1dDAiOwotCWhvdGstPmlucHV0ZGV2LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7Ci0JaG90ay0+aW5wdXRkZXYtPmdldGtleWNvZGUgPSBhc3VzX2dldGtleWNvZGU7Ci0JaG90ay0+aW5wdXRkZXYtPnNldGtleWNvZGUgPSBhc3VzX3NldGtleWNvZGU7Ci0KLQlmb3IgKGtleSA9IGFzdXNfa2V5bWFwOyBrZXktPnR5cGUgIT0gS0VfRU5EOyBrZXkrKykgewotCQlzd2l0Y2ggKGtleS0+dHlwZSkgewotCQljYXNlIEtFX0tFWToKLQkJCXNldF9iaXQoRVZfS0VZLCBob3RrLT5pbnB1dGRldi0+ZXZiaXQpOwotCQkJc2V0X2JpdChrZXktPmtleWNvZGUsIGhvdGstPmlucHV0ZGV2LT5rZXliaXQpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmVzdWx0ID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKGhvdGstPmlucHV0ZGV2KTsKLQlpZiAocmVzdWx0KSB7Ci0JCXByX2luZm8oIlVuYWJsZSB0byByZWdpc3RlciBpbnB1dCBkZXZpY2VcbiIpOwotCQlpbnB1dF9mcmVlX2RldmljZShob3RrLT5pbnB1dGRldik7Ci0JfQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQgYXN1c19ob3RrX2NoZWNrKHZvaWQpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhc3VzX2FjcGlfaW5pdChzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXMpCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKLQlyZXN1bHQgPSBhY3BpX2J1c19nZXRfc3RhdHVzKGhvdGstPmRldmljZSk7CisJcmVzdWx0ID0gYWNwaV9idXNfZ2V0X3N0YXR1cyhhc3VzLT5kZXZpY2UpOworCWlmIChyZXN1bHQpCisJCXJldHVybiByZXN1bHQ7CisJaWYgKCFhc3VzLT5kZXZpY2UtPnN0YXR1cy5wcmVzZW50KSB7CisJCXByX2VycigiSG90a2V5IGRldmljZSBub3QgcHJlc2VudCwgYWJvcnRpbmdcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXN1bHQgPSBhc3VzX2xhcHRvcF9nZXRfaW5mbyhhc3VzKTsKIAlpZiAocmVzdWx0KQogCQlyZXR1cm4gcmVzdWx0OwogCi0JaWYgKGhvdGstPmRldmljZS0+c3RhdHVzLnByZXNlbnQpIHsKLQkJcmVzdWx0ID0gYXN1c19ob3RrX2dldF9pbmZvKCk7Ci0JfSBlbHNlIHsKLQkJcHJfZXJyKCJIb3RrZXkgZGV2aWNlIG5vdCBwcmVzZW50LCBhYm9ydGluZ1xuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCS8qIFdMRUQgYW5kIEJMRUQgYXJlIG9uIGJ5IGRlZmF1bHQgKi8KKwlpZiAoYmx1ZXRvb3RoX3N0YXR1cyA+PSAwKQorCQlhc3VzX2JsdWV0b290aF9zZXQoYXN1cywgISFibHVldG9vdGhfc3RhdHVzKTsKKworCWlmICh3bGFuX3N0YXR1cyA+PSAwKQorCQlhc3VzX3dsYW5fc2V0KGFzdXMsICEhd2xhbl9zdGF0dXMpOworCisJLyogS2V5Ym9hcmQgQmFja2xpZ2h0IGlzIG9uIGJ5IGRlZmF1bHQgKi8KKwlpZiAoIWFjcGlfY2hlY2tfaGFuZGxlKGFzdXMtPmhhbmRsZSwgTUVUSE9EX0tCRF9MSUdIVF9TRVQsIE5VTEwpKQorCQlhc3VzX2tsZWRfc2V0KGFzdXMsIDEpOworCisJLyogTEVEIGRpc3BsYXkgaXMgb2ZmIGJ5IGRlZmF1bHQgKi8KKwlhc3VzLT5sZWRkX3N0YXR1cyA9IDB4RkZGOworCisJLyogU2V0IGluaXRpYWwgdmFsdWVzIG9mIGxpZ2h0IHNlbnNvciBhbmQgbGV2ZWwgKi8KKwlhc3VzLT5saWdodF9zd2l0Y2ggPSAwOwkvKiBEZWZhdWx0IHRvIGxpZ2h0IHNlbnNvciBkaXNhYmxlZCAqLworCWFzdXMtPmxpZ2h0X2xldmVsID0gNTsJLyogbGV2ZWwgNSBmb3Igc2Vuc29yIHNlbnNpdGl2aXR5ICovCisKKwlpZiAoIWFjcGlfY2hlY2tfaGFuZGxlKGFzdXMtPmhhbmRsZSwgTUVUSE9EX0FMU19DT05UUk9MLCBOVUxMKSAmJgorCSAgICAhYWNwaV9jaGVja19oYW5kbGUoYXN1cy0+aGFuZGxlLCBNRVRIT0RfQUxTX0xFVkVMLCBOVUxMKSkgeworCQlhc3VzX2Fsc19zd2l0Y2goYXN1cywgYXN1cy0+bGlnaHRfc3dpdGNoKTsKKwkJYXN1c19hbHNfbGV2ZWwoYXN1cywgYXN1cy0+bGlnaHRfbGV2ZWwpOwogCX0KIAorCWFzdXMtPmxjZF9zdGF0ZSA9IDE7IC8qIExDRCBzaG91bGQgYmUgb24gd2hlbiB0aGUgbW9kdWxlIGxvYWQgKi8KIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgaW50IGFzdXNfaG90a19mb3VuZDsKLQotc3RhdGljIGludCBhc3VzX2hvdGtfYWRkKHN0cnVjdCBhY3BpX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2RldmluaXQgYXN1c19hY3BpX2FkZChzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKKwlzdHJ1Y3QgYXN1c19sYXB0b3AgKmFzdXM7CiAJaW50IHJlc3VsdDsKIAogCXByX25vdGljZSgiQXN1cyBMYXB0b3AgU3VwcG9ydCB2ZXJzaW9uICVzXG4iLAotCSAgICAgICBBU1VTX0xBUFRPUF9WRVJTSU9OKTsKLQotCWhvdGsgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXN1c19ob3RrKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFob3RrKQorCQkgIEFTVVNfTEFQVE9QX1ZFUlNJT04pOworCWFzdXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXN1c19sYXB0b3ApLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFzdXMpCiAJCXJldHVybiAtRU5PTUVNOworCWFzdXMtPmhhbmRsZSA9IGRldmljZS0+aGFuZGxlOworCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFTVVNfTEFQVE9QX0RFVklDRV9OQU1FKTsKKwlzdHJjcHkoYWNwaV9kZXZpY2VfY2xhc3MoZGV2aWNlKSwgQVNVU19MQVBUT1BfQ0xBU1MpOworCWRldmljZS0+ZHJpdmVyX2RhdGEgPSBhc3VzOworCWFzdXMtPmRldmljZSA9IGRldmljZTsKIAotCWhvdGstPmhhbmRsZSA9IGRldmljZS0+aGFuZGxlOwotCXN0cmNweShhY3BpX2RldmljZV9uYW1lKGRldmljZSksIEFTVVNfSE9US19ERVZJQ0VfTkFNRSk7Ci0Jc3RyY3B5KGFjcGlfZGV2aWNlX2NsYXNzKGRldmljZSksIEFTVVNfSE9US19DTEFTUyk7Ci0JZGV2aWNlLT5kcml2ZXJfZGF0YSA9IGhvdGs7Ci0JaG90ay0+ZGV2aWNlID0gZGV2aWNlOwotCi0JcmVzdWx0ID0gYXN1c19ob3RrX2NoZWNrKCk7CisJcmVzdWx0ID0gYXN1c19hY3BpX2luaXQoYXN1cyk7CiAJaWYgKHJlc3VsdCkKLQkJZ290byBlbmQ7CisJCWdvdG8gZmFpbF9wbGF0Zm9ybTsKIAotCWFzdXNfaG90a19hZGRfZnMoKTsKKwkvKgorCSAqIFJlZ2lzdGVyIHRoZSBwbGF0Zm9ybSBkZXZpY2UgZmlyc3QuICBJdCBpcyB1c2VkIGFzIGEgcGFyZW50IGZvciB0aGUKKwkgKiBzdWItZGV2aWNlcyBiZWxvdy4KKwkgKi8KKwlyZXN1bHQgPSBhc3VzX3BsYXRmb3JtX2luaXQoYXN1cyk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBmYWlsX3BsYXRmb3JtOwogCi0JYXN1c19ob3RrX2ZvdW5kID0gMTsKKwlpZiAoIWFjcGlfdmlkZW9fYmFja2xpZ2h0X3N1cHBvcnQoKSkgeworCQlyZXN1bHQgPSBhc3VzX2JhY2tsaWdodF9pbml0KGFzdXMpOworCQlpZiAocmVzdWx0KQorCQkJZ290byBmYWlsX2JhY2tsaWdodDsKKwl9IGVsc2UKKwkJcHJfaW5mbygiQmFja2xpZ2h0IGNvbnRyb2xsZWQgYnkgQUNQSSB2aWRlbyBkcml2ZXJcbiIpOwogCi0JLyogV0xFRCBhbmQgQkxFRCBhcmUgb24gYnkgZGVmYXVsdCAqLwotCXdyaXRlX3N0YXR1cyhidF9zd2l0Y2hfaGFuZGxlLCAxLCBCVF9PTik7Ci0Jd3JpdGVfc3RhdHVzKHdsX3N3aXRjaF9oYW5kbGUsIDEsIFdMX09OKTsKKwlyZXN1bHQgPSBhc3VzX2lucHV0X2luaXQoYXN1cyk7CisJaWYgKHJlc3VsdCkKKwkJZ290byBmYWlsX2lucHV0OwogCi0JLyogSWYgdGhlIGgvdyBzd2l0Y2ggaXMgb2ZmLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSByZWFsIHN0YXR1cyAqLwotCXdyaXRlX3N0YXR1cyhOVUxMLCByZWFkX3N0YXR1cyhCVF9PTiksIEJUX09OKTsKLQl3cml0ZV9zdGF0dXMoTlVMTCwgcmVhZF9zdGF0dXMoV0xfT04pLCBXTF9PTik7CisJcmVzdWx0ID0gYXN1c19sZWRfaW5pdChhc3VzKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIGZhaWxfbGVkOwogCi0JLyogTENEIEJhY2tsaWdodCBpcyBvbiBieSBkZWZhdWx0ICovCi0Jd3JpdGVfc3RhdHVzKE5VTEwsIDEsIExDRF9PTik7CisJcmVzdWx0ID0gYXN1c19yZmtpbGxfaW5pdChhc3VzKTsKKwlpZiAocmVzdWx0KQorCQlnb3RvIGZhaWxfcmZraWxsOwogCi0JLyogS2V5Ym9hcmQgQmFja2xpZ2h0IGlzIG9uIGJ5IGRlZmF1bHQgKi8KLQlpZiAoa2xlZF9zZXRfaGFuZGxlKQotCQlzZXRfa2xlZF9sdmwoMSk7CisJYXN1c19kZXZpY2VfcHJlc2VudCA9IHRydWU7CisJcmV0dXJuIDA7CiAKLQkvKiBMRUQgZGlzcGxheSBpcyBvZmYgYnkgZGVmYXVsdCAqLwotCWhvdGstPmxlZGRfc3RhdHVzID0gMHhGRkY7Ci0KLQkvKiBTZXQgaW5pdGlhbCB2YWx1ZXMgb2YgbGlnaHQgc2Vuc29yIGFuZCBsZXZlbCAqLwotCWhvdGstPmxpZ2h0X3N3aXRjaCA9IDA7CS8qIERlZmF1bHQgdG8gbGlnaHQgc2Vuc29yIGRpc2FibGVkICovCi0JaG90ay0+bGlnaHRfbGV2ZWwgPSA1OwkvKiBsZXZlbCA1IGZvciBzZW5zb3Igc2Vuc2l0aXZpdHkgKi8KLQotCWlmIChsc19zd2l0Y2hfaGFuZGxlKQotCQlzZXRfbGlnaHRfc2Vuc19zd2l0Y2goaG90ay0+bGlnaHRfc3dpdGNoKTsKLQotCWlmIChsc19sZXZlbF9oYW5kbGUpCi0JCXNldF9saWdodF9zZW5zX2xldmVsKGhvdGstPmxpZ2h0X2xldmVsKTsKLQotCS8qIEdQUyBpcyBvbiBieSBkZWZhdWx0ICovCi0Jd3JpdGVfc3RhdHVzKE5VTEwsIDEsIEdQU19PTik7Ci0KLWVuZDoKLQlpZiAocmVzdWx0KSB7Ci0JCWtmcmVlKGhvdGstPm5hbWUpOwotCQlrZnJlZShob3RrKTsKLQl9CitmYWlsX3Jma2lsbDoKKwlhc3VzX2xlZF9leGl0KGFzdXMpOworZmFpbF9sZWQ6CisJYXN1c19pbnB1dF9leGl0KGFzdXMpOworZmFpbF9pbnB1dDoKKwlhc3VzX2JhY2tsaWdodF9leGl0KGFzdXMpOworZmFpbF9iYWNrbGlnaHQ6CisJYXN1c19wbGF0Zm9ybV9leGl0KGFzdXMpOworZmFpbF9wbGF0Zm9ybToKKwlrZnJlZShhc3VzLT5uYW1lKTsKKwlrZnJlZShhc3VzKTsKIAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbnQgYXN1c19ob3RrX3JlbW92ZShzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSwgaW50IHR5cGUpCitzdGF0aWMgaW50IGFzdXNfYWNwaV9yZW1vdmUoc3RydWN0IGFjcGlfZGV2aWNlICpkZXZpY2UsIGludCB0eXBlKQogewotCWtmcmVlKGhvdGstPm5hbWUpOwotCWtmcmVlKGhvdGspOworCXN0cnVjdCBhc3VzX2xhcHRvcCAqYXN1cyA9IGFjcGlfZHJpdmVyX2RhdGEoZGV2aWNlKTsKIAorCWFzdXNfYmFja2xpZ2h0X2V4aXQoYXN1cyk7CisJYXN1c19yZmtpbGxfZXhpdChhc3VzKTsKKwlhc3VzX2xlZF9leGl0KGFzdXMpOworCWFzdXNfaW5wdXRfZXhpdChhc3VzKTsKKwlhc3VzX3BsYXRmb3JtX2V4aXQoYXN1cyk7CisKKwlrZnJlZShhc3VzLT5uYW1lKTsKKwlrZnJlZShhc3VzKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgYXN1c19iYWNrbGlnaHRfZXhpdCh2b2lkKQotewotCWlmIChhc3VzX2JhY2tsaWdodF9kZXZpY2UpCi0JCWJhY2tsaWdodF9kZXZpY2VfdW5yZWdpc3Rlcihhc3VzX2JhY2tsaWdodF9kZXZpY2UpOwotfQorc3RhdGljIGNvbnN0IHN0cnVjdCBhY3BpX2RldmljZV9pZCBhc3VzX2RldmljZV9pZHNbXSA9IHsKKwl7IkFUSzAxMDAiLCAwfSwKKwl7IkFUSzAxMDEiLCAwfSwKKwl7IiIsIDB9LAorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoYWNwaSwgYXN1c19kZXZpY2VfaWRzKTsKIAotI2RlZmluZSAgQVNVU19MRURfVU5SRUdJU1RFUihvYmplY3QpCQkJCVwKLQlpZiAob2JqZWN0IyNfbGVkLmRldikJCQkJCVwKLQkJbGVkX2NsYXNzZGV2X3VucmVnaXN0ZXIoJm9iamVjdCMjX2xlZCkKLQotc3RhdGljIHZvaWQgYXN1c19sZWRfZXhpdCh2b2lkKQotewotCWRlc3Ryb3lfd29ya3F1ZXVlKGxlZF93b3JrcXVldWUpOwotCUFTVVNfTEVEX1VOUkVHSVNURVIobWxlZCk7Ci0JQVNVU19MRURfVU5SRUdJU1RFUih0bGVkKTsKLQlBU1VTX0xFRF9VTlJFR0lTVEVSKHBsZWQpOwotCUFTVVNfTEVEX1VOUkVHSVNURVIocmxlZCk7Ci0JQVNVU19MRURfVU5SRUdJU1RFUihnbGVkKTsKLQlBU1VTX0xFRF9VTlJFR0lTVEVSKGtsZWQpOwotfQotCi1zdGF0aWMgdm9pZCBhc3VzX2lucHV0X2V4aXQodm9pZCkKLXsKLQlpZiAoaG90ay0+aW5wdXRkZXYpCi0JCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKGhvdGstPmlucHV0ZGV2KTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IGFzdXNfbGFwdG9wX2V4aXQodm9pZCkKLXsKLQlhc3VzX2JhY2tsaWdodF9leGl0KCk7Ci0JYXN1c19sZWRfZXhpdCgpOwotCWFzdXNfaW5wdXRfZXhpdCgpOwotCi0JYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFzdXNfaG90a19kcml2ZXIpOwotCXN5c2ZzX3JlbW92ZV9ncm91cCgmYXN1c3BmX2RldmljZS0+ZGV2LmtvYmosICZhc3VzcGZfYXR0cmlidXRlX2dyb3VwKTsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihhc3VzcGZfZGV2aWNlKTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXN1c3BmX2RyaXZlcik7Ci19Ci0KLXN0YXRpYyBpbnQgYXN1c19iYWNrbGlnaHRfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJkOwotCi0JaWYgKGJyaWdodG5lc3Nfc2V0X2hhbmRsZSAmJiBsY2Rfc3dpdGNoX2hhbmRsZSkgewotCQliZCA9IGJhY2tsaWdodF9kZXZpY2VfcmVnaXN0ZXIoQVNVU19IT1RLX0ZJTEUsIGRldiwKLQkJCQkJICAgICAgIE5VTEwsICZhc3VzYmxfb3BzKTsKLQkJaWYgKElTX0VSUihiZCkpIHsKLQkJCXByX2VycigiQ291bGQgbm90IHJlZ2lzdGVyIGFzdXMgYmFja2xpZ2h0IGRldmljZVxuIik7Ci0JCQlhc3VzX2JhY2tsaWdodF9kZXZpY2UgPSBOVUxMOwotCQkJcmV0dXJuIFBUUl9FUlIoYmQpOwotCQl9Ci0KLQkJYXN1c19iYWNrbGlnaHRfZGV2aWNlID0gYmQ7Ci0KLQkJYmQtPnByb3BzLm1heF9icmlnaHRuZXNzID0gMTU7Ci0JCWJkLT5wcm9wcy5icmlnaHRuZXNzID0gcmVhZF9icmlnaHRuZXNzKE5VTEwpOwotCQliZC0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOwotCQliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhiZCk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGFzdXNfbGVkX3JlZ2lzdGVyKGFjcGlfaGFuZGxlIGhhbmRsZSwKLQkJCSAgICAgc3RydWN0IGxlZF9jbGFzc2RldiAqbGRldiwgc3RydWN0IGRldmljZSAqZGV2KQotewotCWlmICghaGFuZGxlKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBsZWRfY2xhc3NkZXZfcmVnaXN0ZXIoZGV2LCBsZGV2KTsKLX0KLQotI2RlZmluZSBBU1VTX0xFRF9SRUdJU1RFUihvYmplY3QsIGRldmljZSkJCQkJXAotCWFzdXNfbGVkX3JlZ2lzdGVyKG9iamVjdCMjX3NldF9oYW5kbGUsICZvYmplY3QjI19sZWQsIGRldmljZSkKLQotc3RhdGljIGludCBhc3VzX2xlZF9pbml0KHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlpbnQgcnY7Ci0KLQlydiA9IEFTVVNfTEVEX1JFR0lTVEVSKG1sZWQsIGRldik7Ci0JaWYgKHJ2KQotCQlnb3RvIG91dDsKLQotCXJ2ID0gQVNVU19MRURfUkVHSVNURVIodGxlZCwgZGV2KTsKLQlpZiAocnYpCi0JCWdvdG8gb3V0MTsKLQotCXJ2ID0gQVNVU19MRURfUkVHSVNURVIocmxlZCwgZGV2KTsKLQlpZiAocnYpCi0JCWdvdG8gb3V0MjsKLQotCXJ2ID0gQVNVU19MRURfUkVHSVNURVIocGxlZCwgZGV2KTsKLQlpZiAocnYpCi0JCWdvdG8gb3V0MzsKLQotCXJ2ID0gQVNVU19MRURfUkVHSVNURVIoZ2xlZCwgZGV2KTsKLQlpZiAocnYpCi0JCWdvdG8gb3V0NDsKLQotCWlmIChrbGVkX3NldF9oYW5kbGUgJiYga2xlZF9nZXRfaGFuZGxlKQotCQlydiA9IEFTVVNfTEVEX1JFR0lTVEVSKGtsZWQsIGRldik7Ci0JaWYgKHJ2KQotCQlnb3RvIG91dDU7Ci0KLQlsZWRfd29ya3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImxlZF93b3JrcXVldWUiKTsKLQlpZiAoIWxlZF93b3JrcXVldWUpCi0JCWdvdG8gb3V0NjsKLQotCXJldHVybiAwOwotb3V0NjoKLQlydiA9IC1FTk9NRU07Ci0JQVNVU19MRURfVU5SRUdJU1RFUihrbGVkKTsKLW91dDU6Ci0JQVNVU19MRURfVU5SRUdJU1RFUihnbGVkKTsKLW91dDQ6Ci0JQVNVU19MRURfVU5SRUdJU1RFUihwbGVkKTsKLW91dDM6Ci0JQVNVU19MRURfVU5SRUdJU1RFUihybGVkKTsKLW91dDI6Ci0JQVNVU19MRURfVU5SRUdJU1RFUih0bGVkKTsKLW91dDE6Ci0JQVNVU19MRURfVU5SRUdJU1RFUihtbGVkKTsKLW91dDoKLQlyZXR1cm4gcnY7Ci19CitzdGF0aWMgc3RydWN0IGFjcGlfZHJpdmVyIGFzdXNfYWNwaV9kcml2ZXIgPSB7CisJLm5hbWUgPSBBU1VTX0xBUFRPUF9OQU1FLAorCS5jbGFzcyA9IEFTVVNfTEFQVE9QX0NMQVNTLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5pZHMgPSBhc3VzX2RldmljZV9pZHMsCisJLmZsYWdzID0gQUNQSV9EUklWRVJfQUxMX05PVElGWV9FVkVOVFMsCisJLm9wcyA9IHsKKwkJLmFkZCA9IGFzdXNfYWNwaV9hZGQsCisJCS5yZW1vdmUgPSBhc3VzX2FjcGlfcmVtb3ZlLAorCQkubm90aWZ5ID0gYXN1c19hY3BpX25vdGlmeSwKKwkJfSwKK307CiAKIHN0YXRpYyBpbnQgX19pbml0IGFzdXNfbGFwdG9wX2luaXQodm9pZCkKIHsKIAlpbnQgcmVzdWx0OwogCi0JcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhc3VzX2hvdGtfZHJpdmVyKTsKKwlyZXN1bHQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnBsYXRmb3JtX2RyaXZlcik7CiAJaWYgKHJlc3VsdCA8IDApCiAJCXJldHVybiByZXN1bHQ7CiAKLQkvKgotCSAqIFRoaXMgaXMgYSBiaXQgb2YgYSBrbHVkZ2UuICBXZSBvbmx5IHdhbnQgdGhpcyBtb2R1bGUgbG9hZGVkCi0JICogZm9yIEFTVVMgc3lzdGVtcywgYnV0IHRoZXJlJ3MgY3VycmVudGx5IG5vIHdheSB0byBwcm9iZSB0aGUKLQkgKiBBQ1BJIG5hbWVzcGFjZSBmb3IgQVNVUyBISURzLiAgU28gd2UganVzdCByZXR1cm4gZmFpbHVyZSBpZgotCSAqIHdlIGRpZG4ndCBmaW5kIG9uZSwgd2hpY2ggd2lsbCBjYXVzZSB0aGUgbW9kdWxlIHRvIGJlCi0JICogdW5sb2FkZWQuCi0JICovCi0JaWYgKCFhc3VzX2hvdGtfZm91bmQpIHsKLQkJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFzdXNfaG90a19kcml2ZXIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwlyZXN1bHQgPSBhY3BpX2J1c19yZWdpc3Rlcl9kcml2ZXIoJmFzdXNfYWNwaV9kcml2ZXIpOworCWlmIChyZXN1bHQgPCAwKQorCQlnb3RvIGZhaWxfYWNwaV9kcml2ZXI7CisJaWYgKCFhc3VzX2RldmljZV9wcmVzZW50KSB7CisJCXJlc3VsdCA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9ub19kZXZpY2U7CiAJfQotCi0JcmVzdWx0ID0gYXN1c19pbnB1dF9pbml0KCk7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBmYWlsX2lucHV0OwotCi0JLyogUmVnaXN0ZXIgcGxhdGZvcm0gc3R1ZmYgKi8KLQlyZXN1bHQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFzdXNwZl9kcml2ZXIpOwotCWlmIChyZXN1bHQpCi0JCWdvdG8gZmFpbF9wbGF0Zm9ybV9kcml2ZXI7Ci0KLQlhc3VzcGZfZGV2aWNlID0gcGxhdGZvcm1fZGV2aWNlX2FsbG9jKEFTVVNfSE9US19GSUxFLCAtMSk7Ci0JaWYgKCFhc3VzcGZfZGV2aWNlKSB7Ci0JCXJlc3VsdCA9IC1FTk9NRU07Ci0JCWdvdG8gZmFpbF9wbGF0Zm9ybV9kZXZpY2UxOwotCX0KLQotCXJlc3VsdCA9IHBsYXRmb3JtX2RldmljZV9hZGQoYXN1c3BmX2RldmljZSk7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBmYWlsX3BsYXRmb3JtX2RldmljZTI7Ci0KLQlyZXN1bHQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmFzdXNwZl9kZXZpY2UtPmRldi5rb2JqLAotCQkJCSAgICAmYXN1c3BmX2F0dHJpYnV0ZV9ncm91cCk7Ci0JaWYgKHJlc3VsdCkKLQkJZ290byBmYWlsX3N5c2ZzOwotCi0JcmVzdWx0ID0gYXN1c19sZWRfaW5pdCgmYXN1c3BmX2RldmljZS0+ZGV2KTsKLQlpZiAocmVzdWx0KQotCQlnb3RvIGZhaWxfbGVkOwotCi0JaWYgKCFhY3BpX3ZpZGVvX2JhY2tsaWdodF9zdXBwb3J0KCkpIHsKLQkJcmVzdWx0ID0gYXN1c19iYWNrbGlnaHRfaW5pdCgmYXN1c3BmX2RldmljZS0+ZGV2KTsKLQkJaWYgKHJlc3VsdCkKLQkJCWdvdG8gZmFpbF9iYWNrbGlnaHQ7Ci0JfSBlbHNlCi0JCXByX2luZm8oIkJyaWdodG5lc3MgaWdub3JlZCwgbXVzdCBiZSBjb250cm9sbGVkIGJ5ICIKLQkJICAgICAgICJBQ1BJIHZpZGVvIGRyaXZlclxuIik7Ci0KIAlyZXR1cm4gMDsKIAotZmFpbF9iYWNrbGlnaHQ6Ci0gICAgICAgYXN1c19sZWRfZXhpdCgpOwotCi1mYWlsX2xlZDoKLSAgICAgICBzeXNmc19yZW1vdmVfZ3JvdXAoJmFzdXNwZl9kZXZpY2UtPmRldi5rb2JqLAotCQkJICAmYXN1c3BmX2F0dHJpYnV0ZV9ncm91cCk7Ci0KLWZhaWxfc3lzZnM6Ci0JcGxhdGZvcm1fZGV2aWNlX2RlbChhc3VzcGZfZGV2aWNlKTsKLQotZmFpbF9wbGF0Zm9ybV9kZXZpY2UyOgotCXBsYXRmb3JtX2RldmljZV9wdXQoYXN1c3BmX2RldmljZSk7Ci0KLWZhaWxfcGxhdGZvcm1fZGV2aWNlMToKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmYXN1c3BmX2RyaXZlcik7Ci0KLWZhaWxfcGxhdGZvcm1fZHJpdmVyOgotCWFzdXNfaW5wdXRfZXhpdCgpOwotCi1mYWlsX2lucHV0OgotCitmYWlsX25vX2RldmljZToKKwlhY3BpX2J1c191bnJlZ2lzdGVyX2RyaXZlcigmYXN1c19hY3BpX2RyaXZlcik7CitmYWlsX2FjcGlfZHJpdmVyOgorCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwbGF0Zm9ybV9kcml2ZXIpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0YXRpYyB2b2lkIF9fZXhpdCBhc3VzX2xhcHRvcF9leGl0KHZvaWQpCit7CisJYWNwaV9idXNfdW5yZWdpc3Rlcl9kcml2ZXIoJmFzdXNfYWNwaV9kcml2ZXIpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwbGF0Zm9ybV9kcml2ZXIpOworfQorCiBtb2R1bGVfaW5pdChhc3VzX2xhcHRvcF9pbml0KTsKIG1vZHVsZV9leGl0KGFzdXNfbGFwdG9wX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvYXN1c19hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYwppbmRleCBjMWQyYWVlLi4xMzgxNDMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYwpAQCAtMTIyNSw5ICsxMjI1LDggQEAKIAllbHNlIGlmIChzdHJuY21wKG1vZGVsLCAiTTJOIiwgMykgPT0gMCB8fAogCQkgc3RybmNtcChtb2RlbCwgIk0zTiIsIDMpID09IDAgfHwKIAkJIHN0cm5jbXAobW9kZWwsICJNNU4iLCAzKSA9PSAwIHx8Ci0JCSBzdHJuY21wKG1vZGVsLCAiTTZOIiwgMykgPT0gMCB8fAogCQkgc3RybmNtcChtb2RlbCwgIlMxTiIsIDMpID09IDAgfHwKLQkJIHN0cm5jbXAobW9kZWwsICJTNU4iLCAzKSA9PSAwIHx8IHN0cm5jbXAobW9kZWwsICJXMU4iLCAzKSA9PSAwKQorCQkgc3RybmNtcChtb2RlbCwgIlM1TiIsIDMpID09IDApCiAJCXJldHVybiB4eE47CiAJZWxzZSBpZiAoc3RybmNtcChtb2RlbCwgIk0xIiwgMikgPT0gMCkKIAkJcmV0dXJuIE0xQTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NsYXNzbWF0ZS1sYXB0b3AuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2NsYXNzbWF0ZS1sYXB0b3AuYwppbmRleCA4Y2IyMGU0Li4wMzVhN2RkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9jbGFzc21hdGUtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvY2xhc3NtYXRlLWxhcHRvcC5jCkBAIC01MDcsNiArNTA3LDEwIEBACiAJS0VZX0JSSUdIVE5FU1NET1dOLAogCUtFWV9CUklHSFRORVNTVVAsCiAJS0VZX1ZFTkRPUiwKKwlLRVlfVU5LTk9XTiwKKwlLRVlfQ0FNRVJBLAorCUtFWV9CQUNLLAorCUtFWV9GT1JXQVJELAogCUtFWV9NQVgKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCmluZGV4IGI3ZjRkMjcuLmVmNjE0OTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYwpAQCAtMTMyLDggKzEzMiw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGNhbGxpbmdfaW50ZXJmYWNlX2J1ZmZlciAqYnVmZmVyOwotc3RydWN0IHBhZ2UgKmJ1ZmZlcnBhZ2U7Ci1ERUZJTkVfTVVURVgoYnVmZmVyX211dGV4KTsKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqYnVmZmVycGFnZTsKK3N0YXRpYyBERUZJTkVfTVVURVgoYnVmZmVyX211dGV4KTsKIAogc3RhdGljIGludCBod3N3aXRjaF9zdGF0ZTsKIApAQCAtNTgwLDYgKzU4MCw3IEBACiAKIGZhaWxfYmFja2xpZ2h0OgogCWk4MDQyX3JlbW92ZV9maWx0ZXIoZGVsbF9sYXB0b3BfaTgwNDJfZmlsdGVyKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRlbGxfcmZraWxsX3dvcmspOwogZmFpbF9maWx0ZXI6CiAJZGVsbF9jbGVhbnVwX3Jma2lsbCgpOwogZmFpbF9yZmtpbGw6CkBAIC01OTcsMTIgKzU5OCwxMiBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZGVsbF9leGl0KHZvaWQpCiB7Ci0JY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkZWxsX3Jma2lsbF93b3JrKTsKIAlpODA0Ml9yZW1vdmVfZmlsdGVyKGRlbGxfbGFwdG9wX2k4MDQyX2ZpbHRlcik7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkZWxsX3Jma2lsbF93b3JrKTsKIAliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoZGVsbF9iYWNrbGlnaHRfZGV2aWNlKTsKIAlkZWxsX2NsZWFudXBfcmZraWxsKCk7CiAJaWYgKHBsYXRmb3JtX2RldmljZSkgewotCQlwbGF0Zm9ybV9kZXZpY2VfZGVsKHBsYXRmb3JtX2RldmljZSk7CisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBsYXRmb3JtX2RldmljZSk7CiAJCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwbGF0Zm9ybV9kcml2ZXIpOwogCX0KIAlrZnJlZShkYV90b2tlbnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvZWVlcGMtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwppbmRleCBlMmJlNmJiLi45YTg0NGNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9lZWVwYy1sYXB0b3AuYwpAQCAtNTc4LDYgKzU3OCw4IEBACiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlzdHJ1Y3QgcGNpX2J1cyAqYnVzOwogCWJvb2wgYmxvY2tlZCA9IGVlZXBjX3dsYW5fcmZraWxsX2Jsb2NrZWQoZWVlcGMpOworCWJvb2wgYWJzZW50OworCXUzMiBsOwogCiAJaWYgKGVlZXBjLT53bGFuX3Jma2lsbCkKIAkJcmZraWxsX3NldF9zd19zdGF0ZShlZWVwYy0+d2xhbl9yZmtpbGwsIGJsb2NrZWQpOwpAQCAtNTkxLDYgKzU5MywyMiBAQAogCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAKKwkJaWYgKHBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQoYnVzLCAwLCBQQ0lfVkVORE9SX0lELCAmbCkpIHsKKwkJCXByX2VycigiVW5hYmxlIHRvIHJlYWQgUENJIGNvbmZpZyBzcGFjZT9cbiIpOworCQkJZ290byBvdXRfdW5sb2NrOworCQl9CisJCWFic2VudCA9IChsID09IDB4ZmZmZmZmZmYpOworCisJCWlmIChibG9ja2VkICE9IGFic2VudCkgeworCQkJcHJfd2FybmluZygiQklPUyBzYXlzIHdpcmVsZXNzIGxhbiBpcyAlcywgIgorCQkJCQkiYnV0IHRoZSBwY2kgZGV2aWNlIGlzICVzXG4iLAorCQkJCWJsb2NrZWQgPyAiYmxvY2tlZCIgOiAidW5ibG9ja2VkIiwKKwkJCQlhYnNlbnQgPyAiYWJzZW50IiA6ICJwcmVzZW50Iik7CisJCQlwcl93YXJuaW5nKCJza2lwcGVkIHdpcmVsZXNzIGhvdHBsdWcgYXMgcHJvYmFibHkgIgorCQkJCQkiaW5hcHByb3ByaWF0ZSBmb3IgdGhpcyBtb2RlbFxuIik7CisJCQlnb3RvIG91dF91bmxvY2s7CisJCX0KKwogCQlpZiAoIWJsb2NrZWQpIHsKIAkJCWRldiA9IHBjaV9nZXRfc2xvdChidXMsIDApOwogCQkJaWYgKGRldikgewpAQCAtMTI3Nyw3ICsxMjk1LDggQEAKIAkgKiBob3RwbHVnIGNvZGUuIEluIGZhY3QsIGN1cnJlbnQgaG90cGx1ZyBjb2RlIHNlZW1zIHRvIHVucGx1ZyBhbm90aGVyCiAJICogZGV2aWNlLi4uCiAJICovCi0JaWYgKHN0cmNtcChtb2RlbCwgIjEwMDVIQSIpID09IDAgfHwgc3RyY21wKG1vZGVsLCAiMTIwMU4iKSA9PSAwKSB7CisJaWYgKHN0cmNtcChtb2RlbCwgIjEwMDVIQSIpID09IDAgfHwgc3RyY21wKG1vZGVsLCAiMTIwMU4iKSA9PSAwIHx8CisJICAgIHN0cmNtcChtb2RlbCwgIjEwMDVQRSIpID09IDApIHsKIAkJZWVlcGMtPmhvdHBsdWdfZGlzYWJsZWQgPSB0cnVlOwogCQlwcl9pbmZvKCJ3bGFuIGhvdHBsdWcgZGlzYWJsZWRcbiIpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2hwLXdtaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKaW5kZXggM2FhNTdkYS4uN2NjZjMzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvaHAtd21pLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAlIUFdNSV9XV0FOID0gMiwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGhwX3dtaV9iaW9zX3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSk7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBocF93bWlfYmlvc19zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXZpY2UpOwogc3RhdGljIGludCBfX2V4aXQgaHBfd21pX2Jpb3NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSk7CiBzdGF0aWMgaW50IGhwX3dtaV9yZXN1bWVfaGFuZGxlcihzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOwogCkBAIC00NDcsNyArNDQ3LDcgQEAKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmRldmljZS0+ZGV2LCAmZGV2X2F0dHJfdGFibGV0KTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgaHBfd21pX2Jpb3Nfc2V0dXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQorc3RhdGljIGludCBfX2RldmluaXQgaHBfd21pX2Jpb3Nfc2V0dXAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKQogewogCWludCBlcnI7CiAJaW50IHdpcmVsZXNzID0gaHBfd21pX3BlcmZvcm1fcXVlcnkoSFBXTUlfV0lSRUxFU1NfUVVFUlksIDAsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLWxhcHRvcC5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvbXNpLWxhcHRvcC5jCmluZGV4IDc1OTc2M2QuLmMyYjA1ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L21zaS1sYXB0b3AuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9tc2ktbGFwdG9wLmMKQEAgLTU4LDYgKzU4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KICNpbmNsdWRlIDxsaW51eC9iYWNrbGlnaHQuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZmtpbGwuaD4KIAogI2RlZmluZSBNU0lfRFJJVkVSX1ZFUlNJT04gIjAuNSIKIApAQCAtNjYsNiArNjcsMjAgQEAKICNkZWZpbmUgTVNJX0VDX0NPTU1BTkRfV0lSRUxFU1MgMHgxMAogI2RlZmluZSBNU0lfRUNfQ09NTUFORF9MQ0RfTEVWRUwgMHgxMQogCisjZGVmaW5lIE1TSV9TVEFOREFSRF9FQ19DT01NQU5EX0FERFJFU1MJMHgyZQorI2RlZmluZSBNU0lfU1RBTkRBUkRfRUNfQkxVRVRPT1RIX01BU0sJKDEgPDwgMCkKKyNkZWZpbmUgTVNJX1NUQU5EQVJEX0VDX1dFQkNBTV9NQVNLCSgxIDw8IDEpCisjZGVmaW5lIE1TSV9TVEFOREFSRF9FQ19XTEFOX01BU0sJKDEgPDwgMykKKyNkZWZpbmUgTVNJX1NUQU5EQVJEX0VDXzNHX01BU0sJCSgxIDw8IDQpCisKKy8qIEZvciBzZXQgU0NNIGxvYWQgZmxhZyB0byBkaXNhYmxlIEJJT1MgZm4ga2V5ICovCisjZGVmaW5lIE1TSV9TVEFOREFSRF9FQ19TQ01fTE9BRF9BRERSRVNTCTB4MmQKKyNkZWZpbmUgTVNJX1NUQU5EQVJEX0VDX1NDTV9MT0FEX01BU0sJCSgxIDw8IDApCisKK3N0YXRpYyBpbnQgbXNpX2xhcHRvcF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2aWNlKTsKKworI2RlZmluZSBNU0lfU1RBTkRBUkRfRUNfREVWSUNFU19FWElTVFNfQUREUkVTUwkweDJmCisKIHN0YXRpYyBpbnQgZm9yY2U7CiBtb2R1bGVfcGFyYW0oZm9yY2UsIGJvb2wsIDApOwogTU9EVUxFX1BBUk1fREVTQyhmb3JjZSwgIkZvcmNlIGRyaXZlciBsb2FkLCBpZ25vcmUgRE1JIGRhdGEiKTsKQEAgLTc0LDYgKzg5LDIzIEBACiBtb2R1bGVfcGFyYW0oYXV0b19icmlnaHRuZXNzLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhhdXRvX2JyaWdodG5lc3MsICJFbmFibGUgYXV0b21hdGljIGJyaWdodG5lc3MgY29udHJvbCAoMDogZGlzYWJsZWQ7IDE6IGVuYWJsZWQ7IDI6IGRvbid0IHRvdWNoKSIpOwogCitzdGF0aWMgYm9vbCBvbGRfZWNfbW9kZWw7CitzdGF0aWMgaW50IHdsYW5fcywgYmx1ZXRvb3RoX3MsIHRocmVlZ19zOworc3RhdGljIGludCB0aHJlZWdfZXhpc3RzOworCisvKiBTb21lIE1TSSAzRyBuZXRib29rIG9ubHkgaGF2ZSBvbmUgZm4ga2V5IHRvIGNvbnRyb2wgV2xhbi9CbHVldG9vdGgvM0csCisgKiB0aG9zZSBuZXRib29rIHdpbGwgbG9hZCB0aGUgU0NNICh3aW5kb3dzIGFwcCkgdG8gZGlzYWJsZSB0aGUgb3JpZ2luYWwKKyAqIFdsYW4vQmx1ZXRvb3RoIGNvbnRyb2wgYnkgQklPUyB3aGVuIHVzZXIgcHJlc3MgZm4ga2V5LCB0aGVuIGNvbnRyb2wKKyAqIFdsYW4vQmx1ZXRvb3RoLzNHIGJ5IFNDTSAoc29mdHdhcmUgY29udHJvbCBieSBPUykuIFdpdGhvdXQgU0NNLCB1c2VyCisgKiBjYW5uJ3Qgb24vb2ZmIDNHIG1vZHVsZSBvbiB0aG9zZSAzRyBuZXRib29rLgorICogT24gTGludXgsIG1zaS1sYXB0b3AgZHJpdmVyIHdpbGwgZG8gdGhlIHNhbWUgdGhpbmcgdG8gZGlzYWJsZSB0aGUKKyAqIG9yaWdpbmFsIEJJT1MgY29udHJvbCwgdGhlbiBtaWdodCBuZWVkIHVzZSBIQUwgb3Igb3RoZXIgdXNlcmxhbmQKKyAqIGFwcGxpY2F0aW9uIHRvIGRvIHRoZSBzb2Z0d2FyZSBjb250cm9sIHRoYXQgc2ltdWxhdGUgd2l0aCBTQ00uCisgKiBlLmcuIE1TSSBOMDM0IG5ldGJvb2sKKyAqLworc3RhdGljIGJvb2wgbG9hZF9zY21fbW9kZWw7CitzdGF0aWMgc3RydWN0IHJma2lsbCAqcmZrX3dsYW4sICpyZmtfYmx1ZXRvb3RoLCAqcmZrX3RocmVlZzsKKwogLyogSGFyZHdhcmUgYWNjZXNzICovCiAKIHN0YXRpYyBpbnQgc2V0X2xjZF9sZXZlbChpbnQgbGV2ZWwpCkBAIC0xMzAsNiArMTYyLDM1IEBACiAJcmV0dXJuIGVjX3RyYW5zYWN0aW9uKE1TSV9FQ19DT01NQU5EX0xDRF9MRVZFTCwgd2RhdGEsIDIsIE5VTEwsIDAsIDEpOwogfQogCitzdGF0aWMgc3NpemVfdCBzZXRfZGV2aWNlX3N0YXRlKGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCB1OCBtYXNrKQoreworCWludCBzdGF0dXM7CisJdTggd2RhdGEgPSAwLCByZGF0YTsKKwlpbnQgcmVzdWx0OworCisJaWYgKHNzY2FuZihidWYsICIlaSIsICZzdGF0dXMpICE9IDEgfHwgKHN0YXR1cyA8IDAgfHwgc3RhdHVzID4gMSkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogcmVhZCBjdXJyZW50IGRldmljZSBzdGF0ZSAqLworCXJlc3VsdCA9IGVjX3JlYWQoTVNJX1NUQU5EQVJEX0VDX0NPTU1BTkRfQUREUkVTUywgJnJkYXRhKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoISEocmRhdGEgJiBtYXNrKSAhPSBzdGF0dXMpIHsKKwkJLyogcmV2ZXJzZSBkZXZpY2UgYml0ICovCisJCWlmIChyZGF0YSAmIG1hc2spCisJCQl3ZGF0YSA9IHJkYXRhICYgfm1hc2s7CisJCWVsc2UKKwkJCXdkYXRhID0gcmRhdGEgfCBtYXNrOworCisJCXJlc3VsdCA9IGVjX3dyaXRlKE1TSV9TVEFOREFSRF9FQ19DT01NQU5EX0FERFJFU1MsIHdkYXRhKTsKKwkJaWYgKHJlc3VsdCA8IDApCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKIHN0YXRpYyBpbnQgZ2V0X3dpcmVsZXNzX3N0YXRlKGludCAqd2xhbiwgaW50ICpibHVldG9vdGgpCiB7CiAJdTggd2RhdGEgPSAwLCByZGF0YTsKQEAgLTE0OCw2ICsyMDksMzggQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBnZXRfd2lyZWxlc3Nfc3RhdGVfZWNfc3RhbmRhcmQodm9pZCkKK3sKKwl1OCByZGF0YTsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gZWNfcmVhZChNU0lfU1RBTkRBUkRfRUNfQ09NTUFORF9BRERSRVNTLCAmcmRhdGEpOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gLTE7CisKKwl3bGFuX3MgPSAhIShyZGF0YSAmIE1TSV9TVEFOREFSRF9FQ19XTEFOX01BU0spOworCisJYmx1ZXRvb3RoX3MgPSAhIShyZGF0YSAmIE1TSV9TVEFOREFSRF9FQ19CTFVFVE9PVEhfTUFTSyk7CisKKwl0aHJlZWdfcyA9ICEhKHJkYXRhICYgTVNJX1NUQU5EQVJEX0VDXzNHX01BU0spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3RocmVlZ19leGlzdHModm9pZCkKK3sKKwl1OCByZGF0YTsKKwlpbnQgcmVzdWx0OworCisJcmVzdWx0ID0gZWNfcmVhZChNU0lfU1RBTkRBUkRfRUNfREVWSUNFU19FWElTVFNfQUREUkVTUywgJnJkYXRhKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIC0xOworCisJdGhyZWVnX2V4aXN0cyA9ICEhKHJkYXRhICYgTVNJX1NUQU5EQVJEX0VDXzNHX01BU0spOworCisJcmV0dXJuIDA7Cit9CisKIC8qIEJhY2tsaWdodCBkZXZpY2Ugc3R1ZmYgKi8KIAogc3RhdGljIGludCBibF9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYikKQEAgLTE3NiwyNiArMjY5LDcxIEBACiAKIAlpbnQgcmV0LCBlbmFibGVkOwogCi0JcmV0ID0gZ2V0X3dpcmVsZXNzX3N0YXRlKCZlbmFibGVkLCBOVUxMKTsKKwlpZiAob2xkX2VjX21vZGVsKSB7CisJCXJldCA9IGdldF93aXJlbGVzc19zdGF0ZSgmZW5hYmxlZCwgTlVMTCk7CisJfSBlbHNlIHsKKwkJcmV0ID0gZ2V0X3dpcmVsZXNzX3N0YXRlX2VjX3N0YW5kYXJkKCk7CisJCWVuYWJsZWQgPSB3bGFuX3M7CisJfQogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIGVuYWJsZWQpOwogfQogCitzdGF0aWMgc3NpemVfdCBzdG9yZV93bGFuKHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJcmV0dXJuIHNldF9kZXZpY2Vfc3RhdGUoYnVmLCBjb3VudCwgTVNJX1NUQU5EQVJEX0VDX1dMQU5fTUFTSyk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHNob3dfYmx1ZXRvb3RoKHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCiAJaW50IHJldCwgZW5hYmxlZDsKIAotCXJldCA9IGdldF93aXJlbGVzc19zdGF0ZShOVUxMLCAmZW5hYmxlZCk7CisJaWYgKG9sZF9lY19tb2RlbCkgeworCQlyZXQgPSBnZXRfd2lyZWxlc3Nfc3RhdGUoTlVMTCwgJmVuYWJsZWQpOworCX0gZWxzZSB7CisJCXJldCA9IGdldF93aXJlbGVzc19zdGF0ZV9lY19zdGFuZGFyZCgpOworCQllbmFibGVkID0gYmx1ZXRvb3RoX3M7CisJfQogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWlcbiIsIGVuYWJsZWQpOwogfQogCitzdGF0aWMgc3NpemVfdCBzdG9yZV9ibHVldG9vdGgoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gc2V0X2RldmljZV9zdGF0ZShidWYsIGNvdW50LCBNU0lfU1RBTkRBUkRfRUNfQkxVRVRPT1RIX01BU0spOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X3RocmVlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKworCWludCByZXQ7CisKKwkvKiBvbGQgbXNpIGVjIG5vdCBzdXBwb3J0IDNHICovCisJaWYgKG9sZF9lY19tb2RlbCkKKwkJcmV0dXJuIC0xOworCisJcmV0ID0gZ2V0X3dpcmVsZXNzX3N0YXRlX2VjX3N0YW5kYXJkKCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlaVxuIiwgdGhyZWVnX3MpOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV90aHJlZWcoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlyZXR1cm4gc2V0X2RldmljZV9zdGF0ZShidWYsIGNvdW50LCBNU0lfU1RBTkRBUkRfRUNfM0dfTUFTSyk7Cit9CisKIHN0YXRpYyBzc2l6ZV90IHNob3dfbGNkX2xldmVsKHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtMjU4LDYgKzM5Niw3IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoYXV0b19icmlnaHRuZXNzLCAwNjQ0LCBzaG93X2F1dG9fYnJpZ2h0bmVzcywgc3RvcmVfYXV0b19icmlnaHRuZXNzKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihibHVldG9vdGgsIDA0NDQsIHNob3dfYmx1ZXRvb3RoLCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUih3bGFuLCAwNDQ0LCBzaG93X3dsYW4sIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKHRocmVlZywgMDQ0NCwgc2hvd190aHJlZWcsIE5VTEwpOwogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbXNpcGZfYXR0cmlidXRlc1tdID0gewogCSZkZXZfYXR0cl9sY2RfbGV2ZWwuYXR0ciwKQEAgLTI3NSw3ICs0MTQsOCBAQAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gIm1zaS1sYXB0b3AtcGYiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKLQl9CisJfSwKKwkucmVzdW1lID0gbXNpX2xhcHRvcF9yZXN1bWUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXNpcGZfZGV2aWNlOwpAQCAtMzMyLDYgKzQ3MiwxOTIgQEAKIAl7IH0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2luaXRkYXRhIG1zaV9sb2FkX3NjbV9tb2RlbHNfZG1pX3RhYmxlW10gPSB7CisJeworCQkuaWRlbnQgPSAiTVNJIE4wMzQiLAorCQkubWF0Y2hlcyA9IHsKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwKKwkJCQkiTUlDUk8tU1RBUiBJTlRFUk5BVElPTkFMIENPLiwgTFREIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk1TLU4wMzQiKSwKKwkJCURNSV9NQVRDSChETUlfQ0hBU1NJU19WRU5ET1IsCisJCQkiTUlDUk8tU1RBUiBJTlRFUk5BVElPTkFMIENPLiwgTFREIikKKwkJfSwKKwkJLmNhbGxiYWNrID0gZG1pX2NoZWNrX2NiCisJfSwKKwl7IH0KK307CisKK3N0YXRpYyBpbnQgcmZraWxsX2JsdWV0b290aF9zZXQodm9pZCAqZGF0YSwgYm9vbCBibG9ja2VkKQoreworCS8qIERvIHNvbWV0aGluZyB3aXRoIGJsb2NrZWQuLi4qLworCS8qCisJICogYmxvY2tlZCA9PSBmYWxzZSBpcyBvbgorCSAqIGJsb2NrZWQgPT0gdHJ1ZSBpcyBvZmYKKwkgKi8KKwlpZiAoYmxvY2tlZCkKKwkJc2V0X2RldmljZV9zdGF0ZSgiMCIsIDAsIE1TSV9TVEFOREFSRF9FQ19CTFVFVE9PVEhfTUFTSyk7CisJZWxzZQorCQlzZXRfZGV2aWNlX3N0YXRlKCIxIiwgMCwgTVNJX1NUQU5EQVJEX0VDX0JMVUVUT09USF9NQVNLKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJma2lsbF93bGFuX3NldCh2b2lkICpkYXRhLCBib29sIGJsb2NrZWQpCit7CisJaWYgKGJsb2NrZWQpCisJCXNldF9kZXZpY2Vfc3RhdGUoIjAiLCAwLCBNU0lfU1RBTkRBUkRfRUNfV0xBTl9NQVNLKTsKKwllbHNlCisJCXNldF9kZXZpY2Vfc3RhdGUoIjEiLCAwLCBNU0lfU1RBTkRBUkRfRUNfV0xBTl9NQVNLKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHJma2lsbF90aHJlZWdfc2V0KHZvaWQgKmRhdGEsIGJvb2wgYmxvY2tlZCkKK3sKKwlpZiAoYmxvY2tlZCkKKwkJc2V0X2RldmljZV9zdGF0ZSgiMCIsIDAsIE1TSV9TVEFOREFSRF9FQ18zR19NQVNLKTsKKwllbHNlCisJCXNldF9kZXZpY2Vfc3RhdGUoIjEiLCAwLCBNU0lfU1RBTkRBUkRfRUNfM0dfTUFTSyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCByZmtpbGxfb3BzIHJma2lsbF9ibHVldG9vdGhfb3BzID0geworCS5zZXRfYmxvY2sgPSByZmtpbGxfYmx1ZXRvb3RoX3NldAorfTsKKworc3RhdGljIHN0cnVjdCByZmtpbGxfb3BzIHJma2lsbF93bGFuX29wcyA9IHsKKwkuc2V0X2Jsb2NrID0gcmZraWxsX3dsYW5fc2V0Cit9OworCitzdGF0aWMgc3RydWN0IHJma2lsbF9vcHMgcmZraWxsX3RocmVlZ19vcHMgPSB7CisJLnNldF9ibG9jayA9IHJma2lsbF90aHJlZWdfc2V0Cit9OworCitzdGF0aWMgdm9pZCByZmtpbGxfY2xlYW51cCh2b2lkKQoreworCWlmIChyZmtfYmx1ZXRvb3RoKSB7CisJCXJma2lsbF91bnJlZ2lzdGVyKHJma19ibHVldG9vdGgpOworCQlyZmtpbGxfZGVzdHJveShyZmtfYmx1ZXRvb3RoKTsKKwl9CisKKwlpZiAocmZrX3RocmVlZykgeworCQlyZmtpbGxfdW5yZWdpc3RlcihyZmtfdGhyZWVnKTsKKwkJcmZraWxsX2Rlc3Ryb3kocmZrX3RocmVlZyk7CisJfQorCisJaWYgKHJma193bGFuKSB7CisJCXJma2lsbF91bnJlZ2lzdGVyKHJma193bGFuKTsKKwkJcmZraWxsX2Rlc3Ryb3kocmZrX3dsYW4pOworCX0KK30KKworc3RhdGljIGludCByZmtpbGxfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzZGV2KQoreworCS8qIGFkZCByZmtpbGwgKi8KKwlpbnQgcmV0dmFsOworCisJcmZrX2JsdWV0b290aCA9IHJma2lsbF9hbGxvYygibXNpLWJsdWV0b290aCIsICZzZGV2LT5kZXYsCisJCQkJUkZLSUxMX1RZUEVfQkxVRVRPT1RILAorCQkJCSZyZmtpbGxfYmx1ZXRvb3RoX29wcywgTlVMTCk7CisJaWYgKCFyZmtfYmx1ZXRvb3RoKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2JsdWV0b290aDsKKwl9CisJcmV0dmFsID0gcmZraWxsX3JlZ2lzdGVyKHJma19ibHVldG9vdGgpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyX2JsdWV0b290aDsKKworCXJma193bGFuID0gcmZraWxsX2FsbG9jKCJtc2ktd2xhbiIsICZzZGV2LT5kZXYsIFJGS0lMTF9UWVBFX1dMQU4sCisJCQkJJnJma2lsbF93bGFuX29wcywgTlVMTCk7CisJaWYgKCFyZmtfd2xhbikgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycl93bGFuOworCX0KKwlyZXR2YWwgPSByZmtpbGxfcmVnaXN0ZXIocmZrX3dsYW4pOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyX3dsYW47CisKKwlpZiAodGhyZWVnX2V4aXN0cykgeworCQlyZmtfdGhyZWVnID0gcmZraWxsX2FsbG9jKCJtc2ktdGhyZWVnIiwgJnNkZXYtPmRldiwKKwkJCQlSRktJTExfVFlQRV9XV0FOLCAmcmZraWxsX3RocmVlZ19vcHMsIE5VTEwpOworCQlpZiAoIXJma190aHJlZWcpIHsKKwkJCXJldHZhbCA9IC1FTk9NRU07CisJCQlnb3RvIGVycl90aHJlZWc7CisJCX0KKwkJcmV0dmFsID0gcmZraWxsX3JlZ2lzdGVyKHJma190aHJlZWcpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJfdGhyZWVnOworCX0KKworCXJldHVybiAwOworCitlcnJfdGhyZWVnOgorCXJma2lsbF9kZXN0cm95KHJma190aHJlZWcpOworCWlmIChyZmtfd2xhbikKKwkJcmZraWxsX3VucmVnaXN0ZXIocmZrX3dsYW4pOworZXJyX3dsYW46CisJcmZraWxsX2Rlc3Ryb3kocmZrX3dsYW4pOworCWlmIChyZmtfYmx1ZXRvb3RoKQorCQlyZmtpbGxfdW5yZWdpc3RlcihyZmtfYmx1ZXRvb3RoKTsKK2Vycl9ibHVldG9vdGg6CisJcmZraWxsX2Rlc3Ryb3kocmZrX2JsdWV0b290aCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IG1zaV9sYXB0b3BfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZSkKK3sKKwl1OCBkYXRhOworCWludCByZXN1bHQ7CisKKwlpZiAoIWxvYWRfc2NtX21vZGVsKQorCQlyZXR1cm4gMDsKKworCS8qIHNldCBsb2FkIFNDTSB0byBkaXNhYmxlIGhhcmR3YXJlIGNvbnRyb2wgYnkgZm4ga2V5ICovCisJcmVzdWx0ID0gZWNfcmVhZChNU0lfU1RBTkRBUkRfRUNfU0NNX0xPQURfQUREUkVTUywgJmRhdGEpOworCWlmIChyZXN1bHQgPCAwKQorCQlyZXR1cm4gcmVzdWx0OworCisJcmVzdWx0ID0gZWNfd3JpdGUoTVNJX1NUQU5EQVJEX0VDX1NDTV9MT0FEX0FERFJFU1MsCisJCWRhdGEgfCBNU0lfU1RBTkRBUkRfRUNfU0NNX0xPQURfTUFTSyk7CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2FkX3NjbV9tb2RlbF9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNkZXYpCit7CisJdTggZGF0YTsKKwlpbnQgcmVzdWx0OworCisJLyogYWxsb3cgdXNlcmxhbmQgd3JpdGUgc3lzZnMgZmlsZSAgKi8KKwlkZXZfYXR0cl9ibHVldG9vdGguc3RvcmUgPSBzdG9yZV9ibHVldG9vdGg7CisJZGV2X2F0dHJfd2xhbi5zdG9yZSA9IHN0b3JlX3dsYW47CisJZGV2X2F0dHJfdGhyZWVnLnN0b3JlID0gc3RvcmVfdGhyZWVnOworCWRldl9hdHRyX2JsdWV0b290aC5hdHRyLm1vZGUgfD0gU19JV1VTUjsKKwlkZXZfYXR0cl93bGFuLmF0dHIubW9kZSB8PSBTX0lXVVNSOworCWRldl9hdHRyX3RocmVlZy5hdHRyLm1vZGUgfD0gU19JV1VTUjsKKworCS8qIGRpc2FibGUgaGFyZHdhcmUgY29udHJvbCBieSBmbiBrZXkgKi8KKwlyZXN1bHQgPSBlY19yZWFkKE1TSV9TVEFOREFSRF9FQ19TQ01fTE9BRF9BRERSRVNTLCAmZGF0YSk7CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisKKwlyZXN1bHQgPSBlY193cml0ZShNU0lfU1RBTkRBUkRfRUNfU0NNX0xPQURfQUREUkVTUywKKwkJZGF0YSB8IE1TSV9TVEFOREFSRF9FQ19TQ01fTE9BRF9NQVNLKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCS8qIGluaXRpYWwgcmZraWxsICovCisJcmVzdWx0ID0gcmZraWxsX2luaXQoc2Rldik7CisJaWYgKHJlc3VsdCA8IDApCisJCXJldHVybiByZXN1bHQ7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBfX2luaXQgbXNpX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwpAQCAtMzM5LDggKzY2NSwxNCBAQAogCWlmIChhY3BpX2Rpc2FibGVkKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWlmICghZm9yY2UgJiYgIWRtaV9jaGVja19zeXN0ZW0obXNpX2RtaV90YWJsZSkpCi0JCXJldHVybiAtRU5PREVWOworCWlmIChmb3JjZSB8fCBkbWlfY2hlY2tfc3lzdGVtKG1zaV9kbWlfdGFibGUpKQorCQlvbGRfZWNfbW9kZWwgPSAxOworCisJaWYgKCFvbGRfZWNfbW9kZWwpCisJCWdldF90aHJlZWdfZXhpc3RzKCk7CisKKwlpZiAoIW9sZF9lY19tb2RlbCAmJiBkbWlfY2hlY2tfc3lzdGVtKG1zaV9sb2FkX3NjbV9tb2RlbHNfZG1pX3RhYmxlKSkKKwkJbG9hZF9zY21fbW9kZWwgPSAxOwogCiAJaWYgKGF1dG9fYnJpZ2h0bmVzcyA8IDAgfHwgYXV0b19icmlnaHRuZXNzID4gMikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNzQsMTAgKzcwNiwyMyBAQAogCWlmIChyZXQpCiAJCWdvdG8gZmFpbF9wbGF0Zm9ybV9kZXZpY2UxOwogCisJaWYgKGxvYWRfc2NtX21vZGVsICYmIChsb2FkX3NjbV9tb2RlbF9pbml0KG1zaXBmX2RldmljZSkgPCAwKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGZhaWxfcGxhdGZvcm1fZGV2aWNlMTsKKwl9CisKIAlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm1zaXBmX2RldmljZS0+ZGV2LmtvYmosICZtc2lwZl9hdHRyaWJ1dGVfZ3JvdXApOwogCWlmIChyZXQpCiAJCWdvdG8gZmFpbF9wbGF0Zm9ybV9kZXZpY2UyOwogCisJaWYgKCFvbGRfZWNfbW9kZWwpIHsKKwkJaWYgKHRocmVlZ19leGlzdHMpCisJCQlyZXQgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm1zaXBmX2RldmljZS0+ZGV2LAorCQkJCQkJJmRldl9hdHRyX3RocmVlZyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWxfcGxhdGZvcm1fZGV2aWNlMjsKKwl9CisKIAkvKiBEaXNhYmxlIGF1dG9tYXRpYyBicmlnaHRuZXNzIGNvbnRyb2wgYnkgZGVmYXVsdCBiZWNhdXNlCiAJICogdGhpcyBtb2R1bGUgd2FzIHByb2JhYmx5IGxvYWRlZCB0byBkbyBicmlnaHRuZXNzIGNvbnRyb2wgaW4KIAkgKiBzb2Z0d2FyZS4gKi8KQEAgLTQxMiwxMCArNzU3LDE0IEBACiB7CiAKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJm1zaXBmX2RldmljZS0+ZGV2LmtvYmosICZtc2lwZl9hdHRyaWJ1dGVfZ3JvdXApOworCWlmICghb2xkX2VjX21vZGVsICYmIHRocmVlZ19leGlzdHMpCisJCWRldmljZV9yZW1vdmVfZmlsZSgmbXNpcGZfZGV2aWNlLT5kZXYsICZkZXZfYXR0cl90aHJlZWcpOwogCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG1zaXBmX2RldmljZSk7CiAJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1zaXBmX2RyaXZlcik7CiAJYmFja2xpZ2h0X2RldmljZV91bnJlZ2lzdGVyKG1zaWJsX2RldmljZSk7CiAKKwlyZmtpbGxfY2xlYW51cCgpOworCiAJLyogRW5hYmxlIGF1dG9tYXRpYyBicmlnaHRuZXNzIGNvbnRyb2wgYWdhaW4gKi8KIAlpZiAoYXV0b19icmlnaHRuZXNzICE9IDIpCiAJCXNldF9hdXRvX2JyaWdodG5lc3MoMSk7CkBAIC00MzUsMyArNzg0LDQgQEAKIE1PRFVMRV9BTElBUygiZG1pOio6c3ZuTWljcm8tU3RhckludGVybmF0aW9uYWw6cG5NUy0xMDU4OnB2cjA1ODE6cnZuTVNJOnJuTVMtMTA1ODoqOmN0MTA6KiIpOwogTU9EVUxFX0FMSUFTKCJkbWk6Kjpzdm5NaWNyby1TdGFySW50ZXJuYXRpb25hbDpwbk1TLTE0MTI6Kjpydm5NU0k6cm5NUy0xNDEyOio6Y3ZuTUlDUk8tU1RBUklOVCdMQ08uLExURDpjdDEwOioiKTsKIE1PRFVMRV9BTElBUygiZG1pOio6c3ZuTk9URUJPT0s6cG5TQU0yMDAwOnB2cjAxMzEqOmN2bk1JQ1JPLVNUQVJJTlQnTENPLixMVEQ6Y3QxMDoqIik7CitNT0RVTEVfQUxJQVMoImRtaToqOnN2bk1JQ1JPLVNUQVJJTlRFUk5BVElPTkFMKjpwbk1TLU4wMzQ6KiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCmluZGV4IGViNjAzZjFkNS4uYzY0ZTM1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwpAQCAtMjg2LDYgKzI4Niw3IEBACiAJY2hhciBwYXJhbVszMl07CiAKIAlpbnQgKCppbml0KSAoc3RydWN0IGlibV9pbml0X3N0cnVjdCAqKTsKKwltb2RlX3QgYmFzZV9wcm9jZnNfbW9kZTsKIAlzdHJ1Y3QgaWJtX3N0cnVjdCAqZGF0YTsKIH07CiAKQEAgLTE2NjcsNyArMTY2OCw3IEBACiAgKiBUYWJsZSBvZiByZWNvbW1lbmRlZCBtaW5pbXVtIEJJT1MgdmVyc2lvbnMKICAqCiAgKiBSZWFzb25zIGZvciBsaXN0aW5nOgotICogICAgMS4gU3RhYmxlIEJJT1MsIGxpc3RlZCBiZWNhdXNlIHRoZSB1bmtub3duIGFtbW91bnQgb2YKKyAqICAgIDEuIFN0YWJsZSBCSU9TLCBsaXN0ZWQgYmVjYXVzZSB0aGUgdW5rbm93biBhbW91bnQgb2YKICAqICAgICAgIGJ1Z3MgYW5kIGJhZCBBQ1BJIGJlaGF2aW91ciBvbiBvbGRlciB2ZXJzaW9ucwogICoKICAqICAgIDIuIEJJT1Mgb3IgRUMgZncgd2l0aCBrbm93biBidWdzIHRoYXQgdHJpZ2dlciBvbiBMaW51eApAQCAtMjA4Miw2ICsyMDgzLDcgQEAKIAogc3RhdGljIHZvaWQgdHBhY3BpX2RyaXZlcl9ldmVudChjb25zdCB1bnNpZ25lZCBpbnQgaGtleV9ldmVudCk7CiBzdGF0aWMgdm9pZCBob3RrZXlfZHJpdmVyX2V2ZW50KGNvbnN0IHVuc2lnbmVkIGludCBzY2FuY29kZSk7CitzdGF0aWMgdm9pZCBob3RrZXlfcG9sbF9zZXR1cChjb25zdCBib29sIG1heV93YXJuKTsKIAogLyogSEtFWS5NSEtHKCkgcmV0dXJuIGJpdHMgKi8KICNkZWZpbmUgVFBfSE9US0VZX1RBQkxFVF9NQVNLICgxIDw8IDMpCkBAIC0yMjY0LDYgKzIyNjYsOCBAQAogCiAJcmMgPSBob3RrZXlfbWFza19zZXQoKGhvdGtleV9hY3BpX21hc2sgfCBob3RrZXlfZHJpdmVyX21hc2spICYKIAkJCQkJCQl+aG90a2V5X3NvdXJjZV9tYXNrKTsKKwlob3RrZXlfcG9sbF9zZXR1cCh0cnVlKTsKKwogCW11dGV4X3VubG9jaygmaG90a2V5X211dGV4KTsKIAogCXJldHVybiByYzsKQEAgLTI1NDgsNyArMjU1Miw3IEBACiB9CiAKIC8qIGNhbGwgd2l0aCBob3RrZXlfbXV0ZXggaGVsZCAqLwotc3RhdGljIHZvaWQgaG90a2V5X3BvbGxfc2V0dXAoYm9vbCBtYXlfd2FybikKK3N0YXRpYyB2b2lkIGhvdGtleV9wb2xsX3NldHVwKGNvbnN0IGJvb2wgbWF5X3dhcm4pCiB7CiAJY29uc3QgdTMyIHBvbGxfZHJpdmVyX21hc2sgPSBob3RrZXlfZHJpdmVyX21hc2sgJiBob3RrZXlfc291cmNlX21hc2s7CiAJY29uc3QgdTMyIHBvbGxfdXNlcl9tYXNrID0gaG90a2V5X3VzZXJfbWFzayAmIGhvdGtleV9zb3VyY2VfbWFzazsKQEAgLTI1NzksNyArMjU4Myw3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBob3RrZXlfcG9sbF9zZXR1cF9zYWZlKGJvb2wgbWF5X3dhcm4pCitzdGF0aWMgdm9pZCBob3RrZXlfcG9sbF9zZXR1cF9zYWZlKGNvbnN0IGJvb2wgbWF5X3dhcm4pCiB7CiAJbXV0ZXhfbG9jaygmaG90a2V5X211dGV4KTsKIAlob3RrZXlfcG9sbF9zZXR1cChtYXlfd2Fybik7CkBAIC0yNTk3LDcgKzI2MDEsMTEgQEAKIAogI2Vsc2UgLyogQ09ORklHX1RISU5LUEFEX0FDUElfSE9US0VZX1BPTEwgKi8KIAotc3RhdGljIHZvaWQgaG90a2V5X3BvbGxfc2V0dXBfc2FmZShib29sIF9fdW51c2VkKQorc3RhdGljIHZvaWQgaG90a2V5X3BvbGxfc2V0dXAoY29uc3QgYm9vbCBfX3VudXNlZCkKK3sKK30KKworc3RhdGljIHZvaWQgaG90a2V5X3BvbGxfc2V0dXBfc2FmZShjb25zdCBib29sIF9fdW51c2VkKQogewogfQogCkBAIC0yNjA3LDE2ICsyNjE1LDExIEBACiB7CiAJc3dpdGNoICh0cGFjcGlfbGlmZWN5Y2xlKSB7CiAJY2FzZSBUUEFDUElfTElGRV9JTklUOgotCQkvKgotCQkgKiBob3RrZXlfaW5pdCB3aWxsIGNhbGwgaG90a2V5X3BvbGxfc2V0dXBfc2FmZQotCQkgKiBhdCB0aGUgYXBwcm9wcmlhdGUgbW9tZW50Ci0JCSAqLwotCQlyZXR1cm4gMDsKLQljYXNlIFRQQUNQSV9MSUZFX0VYSVRJTkc6Ci0JCXJldHVybiAtRUJVU1k7CiAJY2FzZSBUUEFDUElfTElGRV9SVU5OSU5HOgogCQlob3RrZXlfcG9sbF9zZXR1cF9zYWZlKGZhbHNlKTsKIAkJcmV0dXJuIDA7CisJY2FzZSBUUEFDUElfTElGRV9FWElUSU5HOgorCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCS8qIFNob3VsZCBvbmx5IGhhcHBlbiBpZiB0cGFjcGlfbGlmZWN5Y2xlIGlzIGNvcnJ1cHQgKi8KQEAgLTI2MjcsNyArMjYzMCw3IEBACiBzdGF0aWMgdm9pZCBob3RrZXlfaW5wdXRkZXZfY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQogewogCS8qIGRpc2FibGUgaG90a2V5IHBvbGxpbmcgd2hlbiBwb3NzaWJsZSAqLwotCWlmICh0cGFjcGlfbGlmZWN5Y2xlID09IFRQQUNQSV9MSUZFX1JVTk5JTkcgJiYKKwlpZiAodHBhY3BpX2xpZmVjeWNsZSAhPSBUUEFDUElfTElGRV9FWElUSU5HICYmCiAJICAgICEoaG90a2V5X3NvdXJjZV9tYXNrICYgaG90a2V5X2RyaXZlcl9tYXNrKSkKIAkJaG90a2V5X3BvbGxfc2V0dXBfc2FmZShmYWxzZSk7CiB9CkBAIC0zNjU1LDEzICszNjU4LDE5IEBACiAJCQlicmVhazsKIAkJY2FzZSAzOgogCQkJLyogMHgzMDAwLTB4M0ZGRjogYmF5LXJlbGF0ZWQgd2FrZXVwcyAqLwotCQkJaWYgKGhrZXkgPT0gVFBfSEtFWV9FVl9CQVlFSl9BQ0spIHsKKwkJCXN3aXRjaCAoaGtleSkgeworCQkJY2FzZSBUUF9IS0VZX0VWX0JBWUVKX0FDSzoKIAkJCQlob3RrZXlfYXV0b3NsZWVwX2FjayA9IDE7CiAJCQkJcHJpbnRrKFRQQUNQSV9JTkZPCiAJCQkJICAgICAgICJiYXkgZWplY3RlZFxuIik7CiAJCQkJaG90a2V5X3dha2V1cF9ob3R1bnBsdWdfY29tcGxldGVfbm90aWZ5X2NoYW5nZSgpOwogCQkJCWtub3duX2V2ID0gdHJ1ZTsKLQkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQljYXNlIFRQX0hLRVlfRVZfT1BURFJWX0VKOgorCQkJCS8qIEZJWE1FOiBraWNrIGxpYmF0YSBpZiBTQVRBIGxpbmsgb2ZmbGluZSAqLworCQkJCWtub3duX2V2ID0gdHJ1ZTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CiAJCQkJa25vd25fZXYgPSBmYWxzZTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMzg3MCw3ICszODc5LDcgQEAKIAlUUF9BQ1BJX0JMVUVUT09USF9IV1BSRVNFTlQJPSAweDAxLAkvKiBCbHVldG9vdGggaHcgYXZhaWxhYmxlICovCiAJVFBfQUNQSV9CTFVFVE9PVEhfUkFESU9TU1cJPSAweDAyLAkvKiBCbHVldG9vdGggcmFkaW8gZW5hYmxlZCAqLwogCVRQX0FDUElfQkxVRVRPT1RIX1JFU1VNRUNUUkwJPSAweDA0LAkvKiBCbHVldG9vdGggc3RhdGUgYXQgcmVzdW1lOgotCQkJCQkJICAgb2ZmIC8gbGFzdCBzdGF0ZSAqLworCQkJCQkJICAgMCA9IGRpc2FibGUsIDEgPSBlbmFibGUgKi8KIH07CiAKIGVudW0gewpAQCAtMzkxNiwxMCArMzkyNSwxMSBAQAogCX0KICNlbmRpZgogCi0JLyogV2UgbWFrZSBzdXJlIHRvIGtlZXAgVFBfQUNQSV9CTFVFVE9PVEhfUkVTVU1FQ1RSTCBvZmYgKi8KLQlzdGF0dXMgPSBUUF9BQ1BJX0JMVUVUT09USF9SRVNVTUVDVFJMOwogCWlmIChzdGF0ZSA9PSBUUEFDUElfUkZLX1JBRElPX09OKQotCQlzdGF0dXMgfD0gVFBfQUNQSV9CTFVFVE9PVEhfUkFESU9TU1c7CisJCXN0YXR1cyA9IFRQX0FDUElfQkxVRVRPT1RIX1JBRElPU1NXCisJCQkgIHwgVFBfQUNQSV9CTFVFVE9PVEhfUkVTVU1FQ1RSTDsKKwllbHNlCisJCXN0YXR1cyA9IDA7CiAKIAlpZiAoIWFjcGlfZXZhbGYoaGtleV9oYW5kbGUsIE5VTEwsICJTQkRDIiwgInZkIiwgc3RhdHVzKSkKIAkJcmV0dXJuIC1FSU87CkBAIC00MDcwLDcgKzQwODAsNyBAQAogCVRQX0FDUElfV0FOQ0FSRF9IV1BSRVNFTlQJPSAweDAxLAkvKiBXYW4gaHcgYXZhaWxhYmxlICovCiAJVFBfQUNQSV9XQU5DQVJEX1JBRElPU1NXCT0gMHgwMiwJLyogV2FuIHJhZGlvIGVuYWJsZWQgKi8KIAlUUF9BQ1BJX1dBTkNBUkRfUkVTVU1FQ1RSTAk9IDB4MDQsCS8qIFdhbiBzdGF0ZSBhdCByZXN1bWU6Ci0JCQkJCQkgICBvZmYgLyBsYXN0IHN0YXRlICovCisJCQkJCQkgICAwID0gZGlzYWJsZSwgMSA9IGVuYWJsZSAqLwogfTsKIAogI2RlZmluZSBUUEFDUElfUkZLX1dXQU5fU1dfTkFNRQkJInRwYWNwaV93d2FuX3N3IgpAQCAtNDEwNywxMCArNDExNywxMSBAQAogCX0KICNlbmRpZgogCi0JLyogV2UgbWFrZSBzdXJlIHRvIHNldCBUUF9BQ1BJX1dBTkNBUkRfUkVTVU1FQ1RSTCAqLwotCXN0YXR1cyA9IFRQX0FDUElfV0FOQ0FSRF9SRVNVTUVDVFJMOwogCWlmIChzdGF0ZSA9PSBUUEFDUElfUkZLX1JBRElPX09OKQotCQlzdGF0dXMgfD0gVFBfQUNQSV9XQU5DQVJEX1JBRElPU1NXOworCQlzdGF0dXMgPSBUUF9BQ1BJX1dBTkNBUkRfUkFESU9TU1cKKwkJCSB8IFRQX0FDUElfV0FOQ0FSRF9SRVNVTUVDVFJMOworCWVsc2UKKwkJc3RhdHVzID0gMDsKIAogCWlmICghYWNwaV9ldmFsZihoa2V5X2hhbmRsZSwgTlVMTCwgIlNXQU4iLCAidmQiLCBzdGF0dXMpKQogCQlyZXR1cm4gLUVJTzsKQEAgLTQ2MTksNiArNDYzMCwxMCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwkvKiBFdmVuIHJlYWRzIGNhbiBjcmFzaCBYLm9yZywgc28uLi4gKi8KKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKIAlzdGF0dXMgPSB2aWRlb19vdXRwdXRzd19nZXQoKTsKIAlpZiAoc3RhdHVzIDwgMCkKIAkJcmV0dXJuIHN0YXR1czsKQEAgLTQ2NTIsNiArNDY2NywxMCBAQAogCWlmICh2aWRlb19zdXBwb3J0ZWQgPT0gVFBBQ1BJX1ZJREVPX05PTkUpCiAJCXJldHVybiAtRU5PREVWOwogCisJLyogRXZlbiByZWFkcyBjYW4gY3Jhc2ggWC5vcmcsIGxldCBhbG9uZSB3cml0ZXMuLi4gKi8KKwlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKIAllbmFibGUgPSAwOwogCWRpc2FibGUgPSAwOwogCkBAIC02MTMzLDEzICs2MTUyLDEzIEBACiAJVFBBQ1BJX1FfSUJNKCcxJywgJ1knLCBUUEFDUElfQlJHSFRfUV9FQyksCS8qIFQ0My9wIEFUSSAqLwogCiAJLyogTW9kZWxzIHdpdGggQVRJIEdQVXMgdGhhdCBjYW4gdXNlIEVDTlZSQU0gKi8KLQlUUEFDUElfUV9JQk0oJzEnLCAnUicsIFRQQUNQSV9CUkdIVF9RX0VDKSwKKwlUUEFDUElfUV9JQk0oJzEnLCAnUicsIFRQQUNQSV9CUkdIVF9RX0VDKSwJLyogUjUwLDUxIFQ0MC00MiAqLwogCVRQQUNQSV9RX0lCTSgnMScsICdRJywgVFBBQ1BJX0JSR0hUX1FfQVNLfFRQQUNQSV9CUkdIVF9RX0VDKSwKLQlUUEFDUElfUV9JQk0oJzcnLCAnNicsIFRQQUNQSV9CUkdIVF9RX0FTS3xUUEFDUElfQlJHSFRfUV9FQyksCisJVFBBQ1BJX1FfSUJNKCc3JywgJzYnLCBUUEFDUElfQlJHSFRfUV9FQyksCS8qIFI1MiAqLwogCVRQQUNQSV9RX0lCTSgnNycsICc4JywgVFBBQ1BJX0JSR0hUX1FfQVNLfFRQQUNQSV9CUkdIVF9RX0VDKSwKIAogCS8qIE1vZGVscyB3aXRoIEludGVsIEV4dHJlbWUgR3JhcGhpY3MgMiAqLwotCVRQQUNQSV9RX0lCTSgnMScsICdVJywgVFBBQ1BJX0JSR0hUX1FfTk9FQyksCisJVFBBQ1BJX1FfSUJNKCcxJywgJ1UnLCBUUEFDUElfQlJHSFRfUV9OT0VDKSwJLyogWDQwICovCiAJVFBBQ1BJX1FfSUJNKCcxJywgJ1YnLCBUUEFDUElfQlJHSFRfUV9BU0t8VFBBQ1BJX0JSR0hUX1FfRUMpLAogCVRQQUNQSV9RX0lCTSgnMScsICdXJywgVFBBQ1BJX0JSR0hUX1FfQVNLfFRQQUNQSV9CUkdIVF9RX0VDKSwKIApAQCAtNjUyMiw3ICs2NTQxLDggQEAKIAlyZXR1cm4gdm9sdW1lX3NldF9zdGF0dXNfZWMoc3RhdHVzKTsKIH0KIAotc3RhdGljIGludCB2b2x1bWVfc2V0X211dGVfZWMoY29uc3QgYm9vbCBtdXRlKQorLyogcmV0dXJucyA8IDAgb24gZXJyb3IsIDAgb24gbm8gY2hhbmdlLCAxIG9uIGNoYW5nZSAqLworc3RhdGljIGludCBfX3ZvbHVtZV9zZXRfbXV0ZV9lYyhjb25zdCBib29sIG11dGUpCiB7CiAJaW50IHJjOwogCXU4IHMsIG47CkBAIC02NTM3LDIyICs2NTU3LDM3IEBACiAJbiA9IChtdXRlKSA/IHMgfCBUUF9FQ19BVURJT19NVVRFU1dfTVNLIDoKIAkJICAgICBzICYgflRQX0VDX0FVRElPX01VVEVTV19NU0s7CiAKLQlpZiAobiAhPSBzKQorCWlmIChuICE9IHMpIHsKIAkJcmMgPSB2b2x1bWVfc2V0X3N0YXR1c19lYyhuKTsKKwkJaWYgKCFyYykKKwkJCXJjID0gMTsKKwl9CiAKIHVubG9jazoKIAltdXRleF91bmxvY2soJnZvbHVtZV9tdXRleCk7CiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgaW50IHZvbHVtZV9zZXRfbXV0ZShjb25zdCBib29sIG11dGUpCitzdGF0aWMgaW50IHZvbHVtZV9hbHNhX3NldF9tdXRlKGNvbnN0IGJvb2wgbXV0ZSkKIHsKLQlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfTUlYRVIsICJ0cnlpbmcgdG8gJXNtdXRlXG4iLAorCWRiZ19wcmludGsoVFBBQ1BJX0RCR19NSVhFUiwgIkFMU0E6IHRyeWluZyB0byAlc211dGVcbiIsCiAJCSAgIChtdXRlKSA/ICIiIDogInVuIik7Ci0JcmV0dXJuIHZvbHVtZV9zZXRfbXV0ZV9lYyhtdXRlKTsKKwlyZXR1cm4gX192b2x1bWVfc2V0X211dGVfZWMobXV0ZSk7CiB9CiAKLXN0YXRpYyBpbnQgdm9sdW1lX3NldF92b2x1bWVfZWMoY29uc3QgdTggdm9sKQorc3RhdGljIGludCB2b2x1bWVfc2V0X211dGUoY29uc3QgYm9vbCBtdXRlKQoreworCWludCByYzsKKworCWRiZ19wcmludGsoVFBBQ1BJX0RCR19NSVhFUiwgInRyeWluZyB0byAlc211dGVcbiIsCisJCSAgIChtdXRlKSA/ICIiIDogInVuIik7CisKKwlyYyA9IF9fdm9sdW1lX3NldF9tdXRlX2VjKG11dGUpOworCXJldHVybiAocmMgPCAwKSA/IHJjIDogMDsKK30KKworLyogcmV0dXJucyA8IDAgb24gZXJyb3IsIDAgb24gbm8gY2hhbmdlLCAxIG9uIGNoYW5nZSAqLworc3RhdGljIGludCBfX3ZvbHVtZV9zZXRfdm9sdW1lX2VjKGNvbnN0IHU4IHZvbCkKIHsKIAlpbnQgcmM7CiAJdTggcywgbjsKQEAgLTY1NjksMTkgKzY2MDQsMjIgQEAKIAogCW4gPSAocyAmIH5UUF9FQ19BVURJT19MVkxfTVNLKSB8IHZvbDsKIAotCWlmIChuICE9IHMpCisJaWYgKG4gIT0gcykgewogCQlyYyA9IHZvbHVtZV9zZXRfc3RhdHVzX2VjKG4pOworCQlpZiAoIXJjKQorCQkJcmMgPSAxOworCX0KIAogdW5sb2NrOgogCW11dGV4X3VubG9jaygmdm9sdW1lX211dGV4KTsKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgdm9sdW1lX3NldF92b2x1bWUoY29uc3QgdTggdm9sKQorc3RhdGljIGludCB2b2x1bWVfYWxzYV9zZXRfdm9sdW1lKGNvbnN0IHU4IHZvbCkKIHsKIAlkYmdfcHJpbnRrKFRQQUNQSV9EQkdfTUlYRVIsCi0JCSAgICJ0cnlpbmcgdG8gc2V0IHZvbHVtZSBsZXZlbCB0byAlaHVcbiIsIHZvbCk7Ci0JcmV0dXJuIHZvbHVtZV9zZXRfdm9sdW1lX2VjKHZvbCk7CisJCSAgICJBTFNBOiB0cnlpbmcgdG8gc2V0IHZvbHVtZSBsZXZlbCB0byAlaHVcbiIsIHZvbCk7CisJcmV0dXJuIF9fdm9sdW1lX3NldF92b2x1bWVfZWModm9sKTsKIH0KIAogc3RhdGljIHZvaWQgdm9sdW1lX2Fsc2Ffbm90aWZ5X2NoYW5nZSh2b2lkKQpAQCAtNjYyOCw3ICs2NjY2LDcgQEAKIHN0YXRpYyBpbnQgdm9sdW1lX2Fsc2Ffdm9sX3B1dChzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKIAkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKIHsKLQlyZXR1cm4gdm9sdW1lX3NldF92b2x1bWUodWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOworCXJldHVybiB2b2x1bWVfYWxzYV9zZXRfdm9sdW1lKHVjb250cm9sLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdKTsKIH0KIAogI2RlZmluZSB2b2x1bWVfYWxzYV9tdXRlX2luZm8gc25kX2N0bF9ib29sZWFuX21vbm9faW5mbwpAQCAtNjY1MSw3ICs2Njg5LDcgQEAKIHN0YXRpYyBpbnQgdm9sdW1lX2Fsc2FfbXV0ZV9wdXQoc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCiAJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWNvbnRyb2wpCiB7Ci0JcmV0dXJuIHZvbHVtZV9zZXRfbXV0ZSghdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOworCXJldHVybiB2b2x1bWVfYWxzYV9zZXRfbXV0ZSghdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF0pOwogfQogCiBzdGF0aWMgc3RydWN0IHNuZF9rY29udHJvbF9uZXcgdm9sdW1lX2Fsc2FfY29udHJvbF92b2wgX19kZXZpbml0ZGF0YSA9IHsKQEAgLTcwNzAsNyArNzEwOCw3IEBACiAgKgogICogCUZhbiBzcGVlZCBjaGFuZ2VzIG9mIGFueSBzb3J0IChpbmNsdWRpbmcgdGhvc2UgY2F1c2VkIGJ5IHRoZQogICogCWRpc2VuZ2FnZWQgbW9kZSkgYXJlIHVzdWFsbHkgZG9uZSBzbG93bHkgYnkgdGhlIGZpcm13YXJlIGFzIHRoZQotICogCW1heGltdW0gYW1tb3VudCBvZiBmYW4gZHV0eSBjeWNsZSBjaGFuZ2UgcGVyIHNlY29uZCBzZWVtcyB0byBiZQorICogCW1heGltdW0gYW1vdW50IG9mIGZhbiBkdXR5IGN5Y2xlIGNoYW5nZSBwZXIgc2Vjb25kIHNlZW1zIHRvIGJlCiAgKiAJbGltaXRlZC4KICAqCiAgKiAJUmVhZGluZyBpcyBub3QgYXZhaWxhYmxlIGlmIEdGQU4gZXhpc3RzLgpAQCAtODQ3Nyw5ICs4NTE1LDEwIEBACiAJCSIlcyBpbnN0YWxsZWRcbiIsIGlibS0+bmFtZSk7CiAKIAlpZiAoaWJtLT5yZWFkKSB7Ci0JCW1vZGVfdCBtb2RlOworCQltb2RlX3QgbW9kZSA9IGlpYm0tPmJhc2VfcHJvY2ZzX21vZGU7CiAKLQkJbW9kZSA9IFNfSVJVR087CisJCWlmICghbW9kZSkKKwkJCW1vZGUgPSBTX0lSVUdPOwogCQlpZiAoaWJtLT53cml0ZSkKIAkJCW1vZGUgfD0gU19JV1VTUjsKIAkJZW50cnkgPSBwcm9jX2NyZWF0ZV9kYXRhKGlibS0+bmFtZSwgbW9kZSwgcHJvY19kaXIsCkBAIC04NjcwLDYgKzg3MDksNyBAQAogI2lmZGVmIENPTkZJR19USElOS1BBRF9BQ1BJX1ZJREVPCiAJewogCQkuaW5pdCA9IHZpZGVvX2luaXQsCisJCS5iYXNlX3Byb2Nmc19tb2RlID0gU19JUlVTUiwKIAkJLmRhdGEgPSAmdmlkZW9fZHJpdmVyX2RhdGEsCiAJfSwKICNlbmRpZgpAQCAtOTAzMiw2ICs5MDcyLDkgQEAKIAkJCXJldHVybiByZXQ7CiAJCX0KIAl9CisKKwl0cGFjcGlfbGlmZWN5Y2xlID0gVFBBQ1BJX0xJRkVfUlVOTklORzsKKwogCXJldCA9IGlucHV0X3JlZ2lzdGVyX2RldmljZSh0cGFjcGlfaW5wdXRkZXYpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhUUEFDUElfRVJSICJ1bmFibGUgdG8gcmVnaXN0ZXIgaW5wdXQgZGV2aWNlXG4iKTsKQEAgLTkwNDEsNyArOTA4NCw2IEBACiAJCXRwX2ZlYXR1cmVzLmlucHV0X2RldmljZV9yZWdpc3RlcmVkID0gMTsKIAl9CiAKLQl0cGFjcGlfbGlmZWN5Y2xlID0gVFBBQ1BJX0xJRkVfUlVOTklORzsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbGF0Zm9ybS94ODYvdG9zaGliYV9hY3BpLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwppbmRleCAyNmMyMTE3Li40MDViOTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYworKysgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYwpAQCAtODE0LDIxICs4MTQsMjMgQEAKIAkJaWYgKGhjaV9yZXN1bHQgPT0gSENJX1NVQ0NFU1MpIHsKIAkJCWlmICh2YWx1ZSA9PSAweDEwMCkKIAkJCQljb250aW51ZTsKLQkJCWVsc2UgaWYgKHZhbHVlICYgMHg4MCkgewotCQkJCWtleSA9IHRvc2hpYmFfYWNwaV9nZXRfZW50cnlfYnlfc2NhbmNvZGUKLQkJCQkJKHZhbHVlICYgfjB4ODApOwotCQkJCWlmICgha2V5KSB7Ci0JCQkJCXByaW50ayhNWV9JTkZPICJVbmtub3duIGtleSAleFxuIiwKLQkJCQkJICAgICAgIHZhbHVlICYgfjB4ODApOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJaW5wdXRfcmVwb3J0X2tleSh0b3NoaWJhX2FjcGkuaG90a2V5X2RldiwKLQkJCQkJCSBrZXktPmtleWNvZGUsIDEpOwotCQkJCWlucHV0X3N5bmModG9zaGliYV9hY3BpLmhvdGtleV9kZXYpOwotCQkJCWlucHV0X3JlcG9ydF9rZXkodG9zaGliYV9hY3BpLmhvdGtleV9kZXYsCi0JCQkJCQkga2V5LT5rZXljb2RlLCAwKTsKLQkJCQlpbnB1dF9zeW5jKHRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2KTsKKwkJCS8qIGFjdCBvbiBrZXkgcHJlc3M7IGlnbm9yZSBrZXkgcmVsZWFzZSAqLworCQkJaWYgKHZhbHVlICYgMHg4MCkKKwkJCQljb250aW51ZTsKKworCQkJa2V5ID0gdG9zaGliYV9hY3BpX2dldF9lbnRyeV9ieV9zY2FuY29kZQorCQkJCSh2YWx1ZSk7CisJCQlpZiAoIWtleSkgeworCQkJCXByaW50ayhNWV9JTkZPICJVbmtub3duIGtleSAleFxuIiwKKwkJCQkgICAgICAgdmFsdWUpOworCQkJCWNvbnRpbnVlOwogCQkJfQorCQkJaW5wdXRfcmVwb3J0X2tleSh0b3NoaWJhX2FjcGkuaG90a2V5X2RldiwKKwkJCQkJIGtleS0+a2V5Y29kZSwgMSk7CisJCQlpbnB1dF9zeW5jKHRvc2hpYmFfYWNwaS5ob3RrZXlfZGV2KTsKKwkJCWlucHV0X3JlcG9ydF9rZXkodG9zaGliYV9hY3BpLmhvdGtleV9kZXYsCisJCQkJCSBrZXktPmtleWNvZGUsIDApOworCQkJaW5wdXRfc3luYyh0b3NoaWJhX2FjcGkuaG90a2V5X2Rldik7CiAJCX0gZWxzZSBpZiAoaGNpX3Jlc3VsdCA9PSBIQ0lfTk9UX1NVUFBPUlRFRCkgewogCQkJLyogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIGFuIHVucmVzb2x2ZWQgaXNzdWUgb24KIAkJCSAqIHNvbWUgbWFjaGluZXMgd2hlcmUgc3lzdGVtIGV2ZW50cyBzcG9yYWRpY2FsbHkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvS2NvbmZpZyBiL2RyaXZlcnMvcG93ZXIvS2NvbmZpZwppbmRleCBkNGIzZDY3Li5mYWFhOWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL0tjb25maWcKKysrIGIvZHJpdmVycy9wb3dlci9LY29uZmlnCkBAIC0yOSw2ICsyOSwxMyBAQAogCSAgU2F5IFkgaGVyZSB0byBlbmFibGUgc3VwcG9ydCBBUE0gc3RhdHVzIGVtdWxhdGlvbiB1c2luZwogCSAgYmF0dGVyeSBjbGFzcyBkZXZpY2VzLgogCitjb25maWcgTUFYODkyNV9QT1dFUgorCXRyaXN0YXRlICJNQVg4OTI1IGJhdHRlcnkgY2hhcmdlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gTUZEX01BWDg5MjUKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgYmF0dGVyeSBjaGFyZ2VyIGluIHRoZSBNYXhpbQorCSAgTUFYODkyNSBQTUlDLgorCiBjb25maWcgV004MzFYX0JBQ0tVUAogCXRyaXN0YXRlICJXTTgzMVggYmFja3VwIGJhdHRlcnkgY2hhcmdlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gTUZEX1dNODMxWApAQCAtOTgsMTAgKzEwNSwxMCBAQAogCSAgU2F5IFkgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGJhdHRlcnkgbWVhc3VyZWQgYnkgV005N3h4IGF1eCBwb3J0LgogCiBjb25maWcgQkFUVEVSWV9CUTI3eDAwCi0JdHJpc3RhdGUgIkJRMjcyMDAgYmF0dGVyeSBkcml2ZXIiCisJdHJpc3RhdGUgIkJRMjd4MDAgYmF0dGVyeSBkcml2ZXIiCiAJZGVwZW5kcyBvbiBJMkMKIAloZWxwCi0JICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBiYXR0ZXJpZXMgd2l0aCBCUTI3MjAwKEkyQykgY2hpcC4KKwkgIFNheSBZIGhlcmUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIGJhdHRlcmllcyB3aXRoIEJRMjd4MDAgKEkyQykgY2hpcHMuCiAKIGNvbmZpZyBCQVRURVJZX0RBOTAzMAogCXRyaXN0YXRlICJEQTkwMzAgYmF0dGVyeSBkcml2ZXIiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bvd2VyL01ha2VmaWxlIGIvZHJpdmVycy9wb3dlci9NYWtlZmlsZQppbmRleCA1NzM1OTdjLi5hMmJhN2M4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Bvd2VyL01ha2VmaWxlCkBAIC0xNiw2ICsxNiw3IEBACiAKIG9iai0kKENPTkZJR19QREFfUE9XRVIpCQkrPSBwZGFfcG93ZXIubwogb2JqLSQoQ09ORklHX0FQTV9QT1dFUikJCSs9IGFwbV9wb3dlci5vCitvYmotJChDT05GSUdfTUFYODkyNV9QT1dFUikJKz0gbWF4ODkyNV9wb3dlci5vCiBvYmotJChDT05GSUdfV004MzFYX0JBQ0tVUCkJKz0gd204MzF4X2JhY2t1cC5vCiBvYmotJChDT05GSUdfV004MzFYX1BPV0VSKQkrPSB3bTgzMXhfcG93ZXIubwogb2JqLSQoQ09ORklHX1dNODM1MF9QT1dFUikJKz0gd204MzUwX3Bvd2VyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvYnEyN3gwMF9iYXR0ZXJ5LmMgYi9kcml2ZXJzL3Bvd2VyL2JxMjd4MDBfYmF0dGVyeS5jCmluZGV4IDYyYmI5ODEuLmJlY2UzM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvYnEyN3gwMF9iYXR0ZXJ5LmMKKysrIGIvZHJpdmVycy9wb3dlci9icTI3eDAwX2JhdHRlcnkuYwpAQCAtMjYsMTMgKzI2LDIyIEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkJIjEuMC4wIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJCSIxLjEuMCIKIAogI2RlZmluZSBCUTI3eDAwX1JFR19URU1QCQkweDA2CiAjZGVmaW5lIEJRMjd4MDBfUkVHX1ZPTFQJCTB4MDgKLSNkZWZpbmUgQlEyN3gwMF9SRUdfUlNPQwkJMHgwQiAvKiBSZWxhdGl2ZSBTdGF0ZS1vZi1DaGFyZ2UgKi8KICNkZWZpbmUgQlEyN3gwMF9SRUdfQUkJCQkweDE0CiAjZGVmaW5lIEJRMjd4MDBfUkVHX0ZMQUdTCQkweDBBCisjZGVmaW5lIEJRMjd4MDBfUkVHX1RURQkJCTB4MTYKKyNkZWZpbmUgQlEyN3gwMF9SRUdfVFRGCQkJMHgxOAorI2RlZmluZSBCUTI3eDAwX1JFR19UVEVDUAkJMHgyNgorCisjZGVmaW5lIEJRMjcwMDBfUkVHX1JTT0MJCTB4MEIgLyogUmVsYXRpdmUgU3RhdGUtb2YtQ2hhcmdlICovCisjZGVmaW5lIEJRMjcwMDBfRkxBR19DSEdTCQlCSVQoNykKKworI2RlZmluZSBCUTI3NTAwX1JFR19TT0MJCQkweDJjCisjZGVmaW5lIEJRMjc1MDBfRkxBR19EU0MJCUJJVCgwKQorI2RlZmluZSBCUTI3NTAwX0ZMQUdfRkMJCQlCSVQoOSkKIAogLyogSWYgdGhlIHN5c3RlbSBoYXMgc2V2ZXJhbCBiYXR0ZXJpZXMgd2UgbmVlZCBhIGRpZmZlcmVudCBuYW1lIGZvciBlYWNoCiAgKiBvZiB0aGVtLi4uCkBAIC00NiwyNSArNTUsMjggQEAKIAkJc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKTsKIH07CiAKK2VudW0gYnEyN3gwMF9jaGlwIHsgQlEyNzAwMCwgQlEyNzUwMCB9OworCiBzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyB7CiAJc3RydWN0IGRldmljZSAJCSpkZXY7CiAJaW50CQkJaWQ7Ci0JaW50CQkJdm9sdGFnZV91VjsKLQlpbnQJCQljdXJyZW50X3VBOwotCWludAkJCXRlbXBfQzsKLQlpbnQJCQljaGFyZ2VfcnNvYzsKIAlzdHJ1Y3QgYnEyN3gwMF9hY2Nlc3NfbWV0aG9kcwkqYnVzOwogCXN0cnVjdCBwb3dlcl9zdXBwbHkJYmF0OworCWVudW0gYnEyN3gwMF9jaGlwCWNoaXA7CiAKIAlzdHJ1Y3QgaTJjX2NsaWVudAkqY2xpZW50OwogfTsKIAogc3RhdGljIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IGJxMjd4MDBfYmF0dGVyeV9wcm9wc1tdID0geworCVBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUywKIAlQT1dFUl9TVVBQTFlfUFJPUF9QUkVTRU5ULAogCVBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XLAogCVBPV0VSX1NVUFBMWV9QUk9QX0NVUlJFTlRfTk9XLAogCVBPV0VSX1NVUFBMWV9QUk9QX0NBUEFDSVRZLAogCVBPV0VSX1NVUFBMWV9QUk9QX1RFTVAsCisJUE9XRVJfU1VQUExZX1BST1BfVElNRV9UT19FTVBUWV9OT1csCisJUE9XRVJfU1VQUExZX1BST1BfVElNRV9UT19FTVBUWV9BVkcsCisJUE9XRVJfU1VQUExZX1BST1BfVElNRV9UT19GVUxMX05PVywKIH07CiAKIC8qCkBAIC03NCwxNiArODYsMTEgQEAKIHN0YXRpYyBpbnQgYnEyN3gwMF9yZWFkKHU4IHJlZywgaW50ICpydF92YWx1ZSwgaW50IGJfc2luZ2xlLAogCQkJc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQogewotCWludCByZXQ7Ci0KLQlyZXQgPSBkaS0+YnVzLT5yZWFkKHJlZywgcnRfdmFsdWUsIGJfc2luZ2xlLCBkaSk7Ci0JKnJ0X3ZhbHVlID0gYmUxNl90b19jcHUoKnJ0X3ZhbHVlKTsKLQotCXJldHVybiByZXQ7CisJcmV0dXJuIGRpLT5idXMtPnJlYWQocmVnLCBydF92YWx1ZSwgYl9zaW5nbGUsIGRpKTsKIH0KIAogLyoKLSAqIFJldHVybiB0aGUgYmF0dGVyeSB0ZW1wZXJhdHVyZSBpbiBDZWxzaXVzIGRlZ3JlZXMKKyAqIFJldHVybiB0aGUgYmF0dGVyeSB0ZW1wZXJhdHVyZSBpbiB0ZW50aHMgb2YgZGVncmVlIENlbHNpdXMKICAqIE9yIDwgMCBpZiBzb21ldGhpbmcgZmFpbHMuCiAgKi8KIHN0YXRpYyBpbnQgYnEyN3gwMF9iYXR0ZXJ5X3RlbXBlcmF0dXJlKHN0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvICpkaSkKQEAgLTk3LDcgKzEwNCwxMCBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldHVybiAodGVtcCA+PiAyKSAtIDI3MzsKKwlpZiAoZGktPmNoaXAgPT0gQlEyNzUwMCkKKwkJcmV0dXJuIHRlbXAgLSAyNzMxOworCWVsc2UKKwkJcmV0dXJuICgodGVtcCA+PiAyKSAtIDI3MykgKiAxMDsKIH0KIAogLyoKQEAgLTExNSw3ICsxMjUsNyBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldHVybiB2b2x0OworCXJldHVybiB2b2x0ICogMTAwMDsKIH0KIAogLyoKQEAgLTEzNCwxNiArMTQ0LDIzIEBACiAJCWRldl9lcnIoZGktPmRldiwgImVycm9yIHJlYWRpbmcgY3VycmVudFxuIik7CiAJCXJldHVybiAwOwogCX0KLQlyZXQgPSBicTI3eDAwX3JlYWQoQlEyN3gwMF9SRUdfRkxBR1MsICZmbGFncywgMCwgZGkpOwotCWlmIChyZXQgPCAwKSB7Ci0JCWRldl9lcnIoZGktPmRldiwgImVycm9yIHJlYWRpbmcgZmxhZ3NcbiIpOwotCQlyZXR1cm4gMDsKKworCWlmIChkaS0+Y2hpcCA9PSBCUTI3NTAwKSB7CisJCS8qIGJxMjc1MDAgcmV0dXJucyBzaWduZWQgdmFsdWUgKi8KKwkJY3VyciA9IChpbnQpKHMxNiljdXJyOworCX0gZWxzZSB7CisJCXJldCA9IGJxMjd4MDBfcmVhZChCUTI3eDAwX1JFR19GTEFHUywgJmZsYWdzLCAwLCBkaSk7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJvciByZWFkaW5nIGZsYWdzXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJCWlmIChmbGFncyAmIEJRMjcwMDBfRkxBR19DSEdTKSB7CisJCQlkZXZfZGJnKGRpLT5kZXYsICJuZWdhdGl2ZSBjdXJyZW50IVxuIik7CisJCQljdXJyID0gLWN1cnI7CisJCX0KIAl9Ci0JaWYgKChmbGFncyAmICgxIDw8IDcpKSAhPSAwKSB7Ci0JCWRldl9kYmcoZGktPmRldiwgIm5lZ2F0aXZlIGN1cnJlbnQhXG4iKTsKLQkJcmV0dXJuIC1jdXJyOwotCX0KLQlyZXR1cm4gY3VycjsKKworCXJldHVybiBjdXJyICogMTAwMDsKIH0KIAogLyoKQEAgLTE1NSwxMyArMTcyLDcwIEBACiAJaW50IHJldDsKIAlpbnQgcnNvYyA9IDA7CiAKLQlyZXQgPSBicTI3eDAwX3JlYWQoQlEyN3gwMF9SRUdfUlNPQywgJnJzb2MsIDEsIGRpKTsKKwlpZiAoZGktPmNoaXAgPT0gQlEyNzUwMCkKKwkJcmV0ID0gYnEyN3gwMF9yZWFkKEJRMjc1MDBfUkVHX1NPQywgJnJzb2MsIDAsIGRpKTsKKwllbHNlCisJCXJldCA9IGJxMjd4MDBfcmVhZChCUTI3MDAwX1JFR19SU09DLCAmcnNvYywgMSwgZGkpOwogCWlmIChyZXQpIHsKIAkJZGV2X2VycihkaS0+ZGV2LCAiZXJyb3IgcmVhZGluZyByZWxhdGl2ZSBTdGF0ZS1vZi1DaGFyZ2VcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAotCXJldHVybiByc29jID4+IDg7CisJcmV0dXJuIHJzb2M7Cit9CisKK3N0YXRpYyBpbnQgYnEyN3gwMF9iYXR0ZXJ5X3N0YXR1cyhzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGksCisJCQkJICB1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCWludCBmbGFncyA9IDA7CisJaW50IHN0YXR1czsKKwlpbnQgcmV0OworCisJcmV0ID0gYnEyN3gwMF9yZWFkKEJRMjd4MDBfUkVHX0ZMQUdTLCAmZmxhZ3MsIDAsIGRpKTsKKwlpZiAocmV0IDwgMCkgeworCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJvciByZWFkaW5nIGZsYWdzXG4iKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlpZiAoZGktPmNoaXAgPT0gQlEyNzUwMCkgeworCQlpZiAoZmxhZ3MgJiBCUTI3NTAwX0ZMQUdfRkMpCisJCQlzdGF0dXMgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0ZVTEw7CisJCWVsc2UgaWYgKGZsYWdzICYgQlEyNzUwMF9GTEFHX0RTQykKKwkJCXN0YXR1cyA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfRElTQ0hBUkdJTkc7CisJCWVsc2UKKwkJCXN0YXR1cyA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfQ0hBUkdJTkc7CisJfSBlbHNlIHsKKwkJaWYgKGZsYWdzICYgQlEyNzAwMF9GTEFHX0NIR1MpCisJCQlzdGF0dXMgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0NIQVJHSU5HOworCQllbHNlCisJCQlzdGF0dXMgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0RJU0NIQVJHSU5HOworCX0KKworCXZhbC0+aW50dmFsID0gc3RhdHVzOworCXJldHVybiAwOworfQorCisvKgorICogUmVhZCBhIHRpbWUgcmVnaXN0ZXIuCisgKiBSZXR1cm4gPCAwIGlmIHNvbWV0aGluZyBmYWlscy4KKyAqLworc3RhdGljIGludCBicTI3eDAwX2JhdHRlcnlfdGltZShzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGksIGludCByZWcsCisJCQkJdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwgKnZhbCkKK3sKKwlpbnQgdHZhbCA9IDA7CisJaW50IHJldDsKKworCXJldCA9IGJxMjd4MDBfcmVhZChyZWcsICZ0dmFsLCAwLCBkaSk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKGRpLT5kZXYsICJlcnJvciByZWFkaW5nIHJlZ2lzdGVyICUwMnhcbiIsIHJlZyk7CisJCXJldHVybiByZXQ7CisJfQorCisJaWYgKHR2YWwgPT0gNjU1MzUpCisJCXJldHVybiAtRU5PREFUQTsKKworCXZhbC0+aW50dmFsID0gdHZhbCAqIDYwOworCXJldHVybiAwOwogfQogCiAjZGVmaW5lIHRvX2JxMjd4MDBfZGV2aWNlX2luZm8oeCkgY29udGFpbmVyX29mKCh4KSwgXApAQCAtMTcxLDkgKzI0NSwxMyBAQAogCQkJCQllbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsCiAJCQkJCXVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICp2YWwpCiB7CisJaW50IHJldCA9IDA7CiAJc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpID0gdG9fYnEyN3gwMF9kZXZpY2VfaW5mbyhwc3kpOwogCiAJc3dpdGNoIChwc3ApIHsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1NUQVRVUzoKKwkJcmV0ID0gYnEyN3gwMF9iYXR0ZXJ5X3N0YXR1cyhkaSwgdmFsKTsKKwkJYnJlYWs7CiAJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVzoKIAljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1BSRVNFTlQ6CiAJCXZhbC0+aW50dmFsID0gYnEyN3gwMF9iYXR0ZXJ5X3ZvbHRhZ2UoZGkpOwpAQCAtMTg5LDExICsyNjcsMjAgQEAKIAljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1RFTVA6CiAJCXZhbC0+aW50dmFsID0gYnEyN3gwMF9iYXR0ZXJ5X3RlbXBlcmF0dXJlKGRpKTsKIAkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9USU1FX1RPX0VNUFRZX05PVzoKKwkJcmV0ID0gYnEyN3gwMF9iYXR0ZXJ5X3RpbWUoZGksIEJRMjd4MDBfUkVHX1RURSwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9USU1FX1RPX0VNUFRZX0FWRzoKKwkJcmV0ID0gYnEyN3gwMF9iYXR0ZXJ5X3RpbWUoZGksIEJRMjd4MDBfUkVHX1RURUNQLCB2YWwpOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1RJTUVfVE9fRlVMTF9OT1c6CisJCXJldCA9IGJxMjd4MDBfYmF0dGVyeV90aW1lKGRpLCBCUTI3eDAwX1JFR19UVEYsIHZhbCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIGJxMjd4MDBfcG93ZXJzdXBwbHlfaW5pdChzdHJ1Y3QgYnEyN3gwMF9kZXZpY2VfaW5mbyAqZGkpCkBAIC0yMDYsMTAgKzI5MywxMCBAQAogfQogCiAvKgotICogQlEyNzIwMCBzcGVjaWZpYyBjb2RlCisgKiBpMmMgc3BlY2lmaWMgY29kZQogICovCiAKLXN0YXRpYyBpbnQgYnEyNzIwMF9yZWFkKHU4IHJlZywgaW50ICpydF92YWx1ZSwgaW50IGJfc2luZ2xlLAorc3RhdGljIGludCBicTI3eDAwX3JlYWRfaTJjKHU4IHJlZywgaW50ICpydF92YWx1ZSwgaW50IGJfc2luZ2xlLAogCQkJc3RydWN0IGJxMjd4MDBfZGV2aWNlX2luZm8gKmRpKQogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBkaS0+Y2xpZW50OwpAQCAtMjM4LDcgKzMyNSw3IEBACiAJCWVyciA9IGkyY190cmFuc2ZlcihjbGllbnQtPmFkYXB0ZXIsIG1zZywgMSk7CiAJCWlmIChlcnIgPj0gMCkgewogCQkJaWYgKCFiX3NpbmdsZSkKLQkJCQkqcnRfdmFsdWUgPSBnZXRfdW5hbGlnbmVkX2JlMTYoZGF0YSk7CisJCQkJKnJ0X3ZhbHVlID0gZ2V0X3VuYWxpZ25lZF9sZTE2KGRhdGEpOwogCQkJZWxzZQogCQkJCSpydF92YWx1ZSA9IGRhdGFbMF07CiAKQEAgLTI0OCw3ICszMzUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgYnEyNzIwMF9iYXR0ZXJ5X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCitzdGF0aWMgaW50IGJxMjd4MDBfYmF0dGVyeV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJCSBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJY2hhciAqbmFtZTsKQEAgLTI2Nyw3ICszNTQsNyBAQAogCWlmIChyZXR2YWwgPCAwKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiYnEyNzIwMC0lZCIsIG51bSk7CisJbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiJXMtJWQiLCBpZC0+bmFtZSwgbnVtKTsKIAlpZiAoIW5hbWUpIHsKIAkJZGV2X2VycigmY2xpZW50LT5kZXYsICJmYWlsZWQgdG8gYWxsb2NhdGUgZGV2aWNlIG5hbWVcbiIpOwogCQlyZXR2YWwgPSAtRU5PTUVNOwpAQCAtMjgxLDYgKzM2OCw3IEBACiAJCWdvdG8gYmF0dF9mYWlsZWRfMjsKIAl9CiAJZGktPmlkID0gbnVtOworCWRpLT5jaGlwID0gaWQtPmRyaXZlcl9kYXRhOwogCiAJYnVzID0ga3phbGxvYyhzaXplb2YoKmJ1cyksIEdGUF9LRVJORUwpOwogCWlmICghYnVzKSB7CkBAIC0yOTMsNyArMzgxLDcgQEAKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkaSk7CiAJZGktPmRldiA9ICZjbGllbnQtPmRldjsKIAlkaS0+YmF0Lm5hbWUgPSBuYW1lOwotCWJ1cy0+cmVhZCA9ICZicTI3MjAwX3JlYWQ7CisJYnVzLT5yZWFkID0gJmJxMjd4MDBfcmVhZF9pMmM7CiAJZGktPmJ1cyA9IGJ1czsKIAlkaS0+Y2xpZW50ID0gY2xpZW50OwogCkBAIC0zMjMsNyArNDExLDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50IGJxMjcyMDBfYmF0dGVyeV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgYnEyN3gwMF9iYXR0ZXJ5X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCBicTI3eDAwX2RldmljZV9pbmZvICpkaSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCkBAIC0zNDQsMjcgKzQzMiwyOCBAQAogICogTW9kdWxlIHN0dWZmCiAgKi8KIAotc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGJxMjcyMDBfaWRbXSA9IHsKLQl7ICJicTI3MjAwIiwgMCB9LAorc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGJxMjd4MDBfaWRbXSA9IHsKKwl7ICJicTI3MjAwIiwgQlEyNzAwMCB9LAkvKiBicTI3MjAwIGlzIHNhbWUgYXMgYnEyNzAwMCwgYnV0IHdpdGggaTJjICovCisJeyAiYnEyNzUwMCIsIEJRMjc1MDAgfSwKIAl7fSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBicTI3MjAwX2JhdHRlcnlfZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGJxMjd4MDBfYmF0dGVyeV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKLQkJLm5hbWUgPSAiYnEyNzIwMC1iYXR0ZXJ5IiwKKwkJLm5hbWUgPSAiYnEyN3gwMC1iYXR0ZXJ5IiwKIAl9LAotCS5wcm9iZSA9IGJxMjcyMDBfYmF0dGVyeV9wcm9iZSwKLQkucmVtb3ZlID0gYnEyNzIwMF9iYXR0ZXJ5X3JlbW92ZSwKLQkuaWRfdGFibGUgPSBicTI3MjAwX2lkLAorCS5wcm9iZSA9IGJxMjd4MDBfYmF0dGVyeV9wcm9iZSwKKwkucmVtb3ZlID0gYnEyN3gwMF9iYXR0ZXJ5X3JlbW92ZSwKKwkuaWRfdGFibGUgPSBicTI3eDAwX2lkLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYnEyN3gwMF9iYXR0ZXJ5X2luaXQodm9pZCkKIHsKIAlpbnQgcmV0OwogCi0JcmV0ID0gaTJjX2FkZF9kcml2ZXIoJmJxMjcyMDBfYmF0dGVyeV9kcml2ZXIpOworCXJldCA9IGkyY19hZGRfZHJpdmVyKCZicTI3eDAwX2JhdHRlcnlfZHJpdmVyKTsKIAlpZiAocmV0KQotCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBCUTI3MjAwIGRyaXZlclxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIEJRMjd4MDAgZHJpdmVyXG4iKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zNzIsNyArNDYxLDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGJxMjd4MDBfYmF0dGVyeV9leGl0KHZvaWQpCiB7Ci0JaTJjX2RlbF9kcml2ZXIoJmJxMjcyMDBfYmF0dGVyeV9kcml2ZXIpOworCWkyY19kZWxfZHJpdmVyKCZicTI3eDAwX2JhdHRlcnlfZHJpdmVyKTsKIH0KIG1vZHVsZV9leGl0KGJxMjd4MDBfYmF0dGVyeV9leGl0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci9kYTkwMzBfYmF0dGVyeS5jIGIvZHJpdmVycy9wb3dlci9kYTkwMzBfYmF0dGVyeS5jCmluZGV4IDMzNjQxOTguLmEyZTcxZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcG93ZXIvZGE5MDMwX2JhdHRlcnkuYworKysgYi9kcml2ZXJzL3Bvd2VyL2RhOTAzMF9iYXR0ZXJ5LmMKQEAgLTUwOSw3ICs1MDksNyBAQAogCiAJY2hhcmdlci0+bWFzdGVyID0gcGRldi0+ZGV2LnBhcmVudDsKIAotCS8qIDEwIHNlY29uZHMgYmV0d2VlbiBtb25vdG9yIHJ1bnMgdW5sZXNzIHBsYXRmcm9tIGRlZmluZXMgb3RoZXIKKwkvKiAxMCBzZWNvbmRzIGJldHdlZW4gbW9uaXRvciBydW5zIHVubGVzcyBwbGF0Zm9ybSBkZWZpbmVzIG90aGVyCiAJICAgaW50ZXJ2YWwgKi8KIAljaGFyZ2VyLT5pbnRlcnZhbCA9IG1zZWNzX3RvX2ppZmZpZXMoCiAJCShwZGF0YS0+YmF0bW9uX2ludGVydmFsID8gOiAxMCkgKiAxMDAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvbWF4ODkyNV9wb3dlci5jIGIvZHJpdmVycy9wb3dlci9tYXg4OTI1X3Bvd2VyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiNDQxMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcG93ZXIvbWF4ODkyNV9wb3dlci5jCkBAIC0wLDAgKzEsNTM0IEBACisvKgorICogQmF0dGVyeSBkcml2ZXIgZm9yIE1heGltIE1BWDg5MjUKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoJSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvd2VyX3N1cHBseS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9tYXg4OTI1Lmg+CisKKy8qIHJlZ2lzdGVycyBpbiBHUE0gKi8KKyNkZWZpbmUgTUFYODkyNV9PVVQ1VkVOCQkJMHg1NAorI2RlZmluZSBNQVg4OTI1X09VVDNWRU4JCQkweDU4CisjZGVmaW5lIE1BWDg5MjVfQ0hHX0NOVEwxCQkweDdjCisKKy8qIGJpdHMgZGVmaW5pdGlvbiAqLworI2RlZmluZSBNQVg4OTI1X0NIR19TVEFUX1ZTWVNMT1cJKDEgPDwgMCkKKyNkZWZpbmUgTUFYODkyNV9DSEdfU1RBVF9NT0RFX01BU0sJKDMgPDwgMikKKyNkZWZpbmUgTUFYODkyNV9DSEdfU1RBVF9FTl9NQVNLCSgxIDw8IDQpCisjZGVmaW5lIE1BWDg5MjVfQ0hHX01CREVUCQkoMSA8PCAxKQorI2RlZmluZSBNQVg4OTI1X0NIR19BQ19SQU5HRV9NQVNLCSgzIDw8IDYpCisKKy8qIHJlZ2lzdGVycyBpbiBBREMgKi8KKyNkZWZpbmUgTUFYODkyNV9BRENfUkVTX0NORkcxCQkweDA2CisjZGVmaW5lIE1BWDg5MjVfQURDX0FWR19DTkZHMQkJMHgwNworI2RlZmluZSBNQVg4OTI1X0FEQ19BQ1FfQ05GRzEJCTB4MDgKKyNkZWZpbmUgTUFYODkyNV9BRENfQUNRX0NORkcyCQkweDA5CisvKiAyIGJ5dGVzIHJlZ2lzdGVycyBpbiBiZWxvdy4gTVNCIGlzIDFzdCwgTFNCIGlzIDJuZC4gKi8KKyNkZWZpbmUgTUFYODkyNV9BRENfQVVYMgkJMHg2MgorI2RlZmluZSBNQVg4OTI1X0FEQ19WQ0hHCQkweDY0CisjZGVmaW5lIE1BWDg5MjVfQURDX1ZCQkFUVAkJMHg2NgorI2RlZmluZSBNQVg4OTI1X0FEQ19WTUJBVFQJCTB4NjgKKyNkZWZpbmUgTUFYODkyNV9BRENfSVNOUwkJMHg2YQorI2RlZmluZSBNQVg4OTI1X0FEQ19USE0JCQkweDZjCisjZGVmaW5lIE1BWDg5MjVfQURDX1RESUUJCTB4NmUKKyNkZWZpbmUgTUFYODkyNV9DTURfQVVYMgkJMHhjOAorI2RlZmluZSBNQVg4OTI1X0NNRF9WQ0hHCQkweGQwCisjZGVmaW5lIE1BWDg5MjVfQ01EX1ZCQkFUVAkJMHhkOAorI2RlZmluZSBNQVg4OTI1X0NNRF9WTUJBVFQJCTB4ZTAKKyNkZWZpbmUgTUFYODkyNV9DTURfSVNOUwkJMHhlOAorI2RlZmluZSBNQVg4OTI1X0NNRF9USE0JCQkweGYwCisjZGVmaW5lIE1BWDg5MjVfQ01EX1RESUUJCTB4ZjgKKworZW51bSB7CisJTUVBU1VSRV9BVVgyLAorCU1FQVNVUkVfVkNIRywKKwlNRUFTVVJFX1ZCQkFUVCwKKwlNRUFTVVJFX1ZNQkFUVCwKKwlNRUFTVVJFX0lTTlMsCisJTUVBU1VSRV9USE0sCisJTUVBU1VSRV9URElFLAorCU1FQVNVUkVfTUFYLAorfTsKKworc3RydWN0IG1heDg5MjVfcG93ZXJfaW5mbyB7CisJc3RydWN0IG1heDg5MjVfY2hpcAkqY2hpcDsKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqZ3BtOworCXN0cnVjdCBpMmNfY2xpZW50CSphZGM7CisKKwlzdHJ1Y3QgcG93ZXJfc3VwcGx5CWFjOworCXN0cnVjdCBwb3dlcl9zdXBwbHkJdXNiOworCXN0cnVjdCBwb3dlcl9zdXBwbHkJYmF0dGVyeTsKKwlpbnQJCQlpcnFfYmFzZTsKKwl1bnNpZ25lZAkJYWNfb25saW5lOjE7CisJdW5zaWduZWQJCXVzYl9vbmxpbmU6MTsKKwl1bnNpZ25lZAkJYmF0X29ubGluZToxOworCXVuc2lnbmVkCQljaGdfbW9kZToyOworCXVuc2lnbmVkCQliYXR0X2RldGVjdDoxOwkvKiBkZXRlY2luZyBNQiBieSBJRCBwaW4gKi8KKwl1bnNpZ25lZAkJdG9wb2ZmX3RocmVzaG9sZDoyOworCXVuc2lnbmVkCQlmYXN0X2NoYXJnZTozOworCisJaW50ICgqc2V0X2NoYXJnZXIpIChpbnQpOworfTsKKworc3RhdGljIGludCBfX3NldF9jaGFyZ2VyKHN0cnVjdCBtYXg4OTI1X3Bvd2VyX2luZm8gKmluZm8sIGludCBlbmFibGUpCit7CisJc3RydWN0IG1heDg5MjVfY2hpcCAqY2hpcCA9IGluZm8tPmNoaXA7CisJaWYgKGVuYWJsZSkgeworCQkvKiBlbmFibGUgY2hhcmdlciBpbiBwbGF0Zm9ybSAqLworCQlpZiAoaW5mby0+c2V0X2NoYXJnZXIpCisJCQlpbmZvLT5zZXRfY2hhcmdlcigxKTsKKwkJLyogZW5hYmxlIGNoYXJnZXIgKi8KKwkJbWF4ODkyNV9zZXRfYml0cyhpbmZvLT5ncG0sIE1BWDg5MjVfQ0hHX0NOVEwxLCAxIDw8IDcsIDApOworCX0gZWxzZSB7CisJCS8qIGRpc2FibGUgY2hhcmdlICovCisJCW1heDg5MjVfc2V0X2JpdHMoaW5mby0+Z3BtLCBNQVg4OTI1X0NIR19DTlRMMSwgMSA8PCA3LCAxIDw8IDcpOworCQlpZiAoaW5mby0+c2V0X2NoYXJnZXIpCisJCQlpbmZvLT5zZXRfY2hhcmdlcigwKTsKKwl9CisJZGV2X2RiZyhjaGlwLT5kZXYsICIlc1xuIiwgKGVuYWJsZSkgPyAiRW5hYmxlIGNoYXJnZXIiCisJCTogIkRpc2FibGUgY2hhcmdlciIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgbWF4ODkyNV9jaGFyZ2VyX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9wb3dlcl9pbmZvICppbmZvID0gKHN0cnVjdCBtYXg4OTI1X3Bvd2VyX2luZm8gKilkYXRhOworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBpbmZvLT5jaGlwOworCisJc3dpdGNoIChpcnEgLSBjaGlwLT5pcnFfYmFzZSkgeworCWNhc2UgTUFYODkyNV9JUlFfVkNIR19EQ19SOgorCQlpbmZvLT5hY19vbmxpbmUgPSAxOworCQlfX3NldF9jaGFyZ2VyKGluZm8sIDEpOworCQlkZXZfZGJnKGNoaXAtPmRldiwgIkFkYXB0ZXIgaW5zZXJ0ZWRcbiIpOworCQlicmVhazsKKwljYXNlIE1BWDg5MjVfSVJRX1ZDSEdfRENfRjoKKwkJaW5mby0+YWNfb25saW5lID0gMDsKKwkJX19zZXRfY2hhcmdlcihpbmZvLCAwKTsKKwkJZGV2X2RiZyhjaGlwLT5kZXYsICJBZGFwdGVyIGlzIHJlbW92YWxcbiIpOworCQlicmVhazsKKwljYXNlIE1BWDg5MjVfSVJRX1ZDSEdfVVNCX1I6CisJCWluZm8tPnVzYl9vbmxpbmUgPSAxOworCQlfX3NldF9jaGFyZ2VyKGluZm8sIDEpOworCQlkZXZfZGJnKGNoaXAtPmRldiwgIlVTQiBpbnNlcnRlZFxuIik7CisJCWJyZWFrOworCWNhc2UgTUFYODkyNV9JUlFfVkNIR19VU0JfRjoKKwkJaW5mby0+dXNiX29ubGluZSA9IDA7CisJCV9fc2V0X2NoYXJnZXIoaW5mbywgMCk7CisJCWRldl9kYmcoY2hpcC0+ZGV2LCAiVVNCIGlzIHJlbW92YWxcbiIpOworCQlicmVhazsKKwljYXNlIE1BWDg5MjVfSVJRX1ZDSEdfVEhNX09LX0Y6CisJCS8qIEJhdHRlcnkgaXMgbm90IHJlYWR5IHlldCAqLworCQlkZXZfZGJnKGNoaXAtPmRldiwgIkJhdHRlcnkgdGVtcGVyYXR1cmUgaXMgb3V0IG9mIHJhbmdlXG4iKTsKKwljYXNlIE1BWDg5MjVfSVJRX1ZDSEdfRENfT1ZQOgorCQlkZXZfZGJnKGNoaXAtPmRldiwgIkVycm9yIGRldGVjdGlvblxuIik7CisJCV9fc2V0X2NoYXJnZXIoaW5mbywgMCk7CisJCWJyZWFrOworCWNhc2UgTUFYODkyNV9JUlFfVkNIR19USE1fT0tfUjoKKwkJLyogQmF0dGVyeSBpcyByZWFkeSBub3cgKi8KKwkJZGV2X2RiZyhjaGlwLT5kZXYsICJCYXR0ZXJ5IHRlbXBlcmF0dXJlIGlzIGluIHJhbmdlXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBNQVg4OTI1X0lSUV9WQ0hHX1NZU0xPV19SOgorCQkvKiBWU1lTIGlzIGxvdyAqLworCQlkZXZfaW5mbyhjaGlwLT5kZXYsICJTeXMgcG93ZXIgaXMgdG9vIGxvd1xuIik7CisJCWJyZWFrOworCWNhc2UgTUFYODkyNV9JUlFfVkNIR19TWVNMT1dfRjoKKwkJZGV2X2RiZyhjaGlwLT5kZXYsICJTeXMgcG93ZXIgaXMgYWJvdmUgbG93IHRocmVzaG9sZFxuIik7CisJCWJyZWFrOworCWNhc2UgTUFYODkyNV9JUlFfVkNIR19ET05FOgorCQlfX3NldF9jaGFyZ2VyKGluZm8sIDApOworCQlkZXZfZGJnKGNoaXAtPmRldiwgIkNoYXJnaW5nIGlzIGRvbmVcbiIpOworCQlicmVhazsKKwljYXNlIE1BWDg5MjVfSVJRX1ZDSEdfVE9QT0ZGOgorCQlkZXZfZGJnKGNoaXAtPmRldiwgIkNoYXJnaW5nIGluIHRvcC1vZmYgbW9kZVxuIik7CisJCWJyZWFrOworCWNhc2UgTUFYODkyNV9JUlFfVkNIR19UTVJfRkFVTFQ6CisJCV9fc2V0X2NoYXJnZXIoaW5mbywgMCk7CisJCWRldl9kYmcoY2hpcC0+ZGV2LCAiU2FmZSB0aW1lciBpcyBleHBpcmVkXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBNQVg4OTI1X0lSUV9WQ0hHX1JTVDoKKwkJX19zZXRfY2hhcmdlcihpbmZvLCAwKTsKKwkJZGV2X2RiZyhjaGlwLT5kZXYsICJDaGFyZ2VyIGlzIHJlc2V0XG4iKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGludCBzdGFydF9tZWFzdXJlKHN0cnVjdCBtYXg4OTI1X3Bvd2VyX2luZm8gKmluZm8sIGludCB0eXBlKQoreworCXVuc2lnbmVkIGNoYXIgYnVmWzJdID0gezAsIDB9OworCWludCBtZWFzX3JlZyA9IDAsIHJldDsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgTUVBU1VSRV9WQ0hHOgorCQltZWFzX3JlZyA9IE1BWDg5MjVfQURDX1ZDSEc7CisJCWJyZWFrOworCWNhc2UgTUVBU1VSRV9WQkJBVFQ6CisJCW1lYXNfcmVnID0gTUFYODkyNV9BRENfVkJCQVRUOworCQlicmVhazsKKwljYXNlIE1FQVNVUkVfVk1CQVRUOgorCQltZWFzX3JlZyA9IE1BWDg5MjVfQURDX1ZNQkFUVDsKKwkJYnJlYWs7CisJY2FzZSBNRUFTVVJFX0lTTlM6CisJCW1lYXNfcmVnID0gTUFYODkyNV9BRENfSVNOUzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbWF4ODkyNV9idWxrX3JlYWQoaW5mby0+YWRjLCBtZWFzX3JlZywgMiwgYnVmKTsKKwlyZXQgPSAoYnVmWzBdIDw8IDQpIHwgKGJ1ZlsxXSA+PiA0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWF4ODkyNV9hY19nZXRfcHJvcChzdHJ1Y3QgcG93ZXJfc3VwcGx5ICpwc3ksCisJCQkgICAgICAgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgcHNwLAorCQkJICAgICAgIHVuaW9uIHBvd2VyX3N1cHBseV9wcm9wdmFsICp2YWwpCit7CisJc3RydWN0IG1heDg5MjVfcG93ZXJfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShwc3ktPmRldi0+cGFyZW50KTsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAocHNwKSB7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9PTkxJTkU6CisJCXZhbC0+aW50dmFsID0gaW5mby0+YWNfb25saW5lOworCQlicmVhazsKKwljYXNlIFBPV0VSX1NVUFBMWV9QUk9QX1ZPTFRBR0VfTk9XOgorCQlpZiAoaW5mby0+YWNfb25saW5lKSB7CisJCQlyZXQgPSBzdGFydF9tZWFzdXJlKGluZm8sIE1FQVNVUkVfVkNIRyk7CisJCQlpZiAocmV0ID49IDApIHsKKwkJCQl2YWwtPmludHZhbCA9IHJldCA8PCAxOwkvKiB1bml0IGlzIG1WICovCisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwkJcmV0ID0gLUVOT0RBVEE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9ERVY7CisJCWJyZWFrOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgbWF4ODkyNV9hY19wcm9wc1tdID0geworCVBPV0VSX1NVUFBMWV9QUk9QX09OTElORSwKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKK307CisKK3N0YXRpYyBpbnQgbWF4ODkyNV91c2JfZ2V0X3Byb3Aoc3RydWN0IHBvd2VyX3N1cHBseSAqcHN5LAorCQkJCWVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IHBzcCwKKwkJCQl1bmlvbiBwb3dlcl9zdXBwbHlfcHJvcHZhbCAqdmFsKQoreworCXN0cnVjdCBtYXg4OTI1X3Bvd2VyX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEocHN5LT5kZXYtPnBhcmVudCk7CisJaW50IHJldCA9IDA7CisKKwlzd2l0Y2ggKHBzcCkgeworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfT05MSU5FOgorCQl2YWwtPmludHZhbCA9IGluZm8tPnVzYl9vbmxpbmU7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1c6CisJCWlmIChpbmZvLT51c2Jfb25saW5lKSB7CisJCQlyZXQgPSBzdGFydF9tZWFzdXJlKGluZm8sIE1FQVNVUkVfVkNIRyk7CisJCQlpZiAocmV0ID49IDApIHsKKwkJCQl2YWwtPmludHZhbCA9IHJldCA8PCAxOwkvKiB1bml0IGlzIG1WICovCisJCQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwkJcmV0ID0gLUVOT0RBVEE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9ERVY7CisJCWJyZWFrOworCX0KK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgZW51bSBwb3dlcl9zdXBwbHlfcHJvcGVydHkgbWF4ODkyNV91c2JfcHJvcHNbXSA9IHsKKwlQT1dFUl9TVVBQTFlfUFJPUF9PTkxJTkUsCisJUE9XRVJfU1VQUExZX1BST1BfVk9MVEFHRV9OT1csCit9OworCitzdGF0aWMgaW50IG1heDg5MjVfYmF0X2dldF9wcm9wKHN0cnVjdCBwb3dlcl9zdXBwbHkgKnBzeSwKKwkJCQllbnVtIHBvd2VyX3N1cHBseV9wcm9wZXJ0eSBwc3AsCisJCQkJdW5pb24gcG93ZXJfc3VwcGx5X3Byb3B2YWwgKnZhbCkKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9wb3dlcl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKHBzeS0+ZGV2LT5wYXJlbnQpOworCWxvbmcgbG9uZyBpbnQgdG1wID0gMDsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAocHNwKSB7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9PTkxJTkU6CisJCXZhbC0+aW50dmFsID0gaW5mby0+YmF0X29ubGluZTsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVzoKKwkJaWYgKGluZm8tPmJhdF9vbmxpbmUpIHsKKwkJCXJldCA9IHN0YXJ0X21lYXN1cmUoaW5mbywgTUVBU1VSRV9WTUJBVFQpOworCQkJaWYgKHJldCA+PSAwKSB7CisJCQkJdmFsLT5pbnR2YWwgPSByZXQgPDwgMTsJLyogdW5pdCBpcyBtViAqLworCQkJCXJldCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcmV0ID0gLUVOT0RBVEE7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ1VSUkVOVF9OT1c6CisJCWlmIChpbmZvLT5iYXRfb25saW5lKSB7CisJCQlyZXQgPSBzdGFydF9tZWFzdXJlKGluZm8sIE1FQVNVUkVfSVNOUyk7CisJCQlpZiAocmV0ID49IDApIHsKKwkJCQl0bXAgPSAobG9uZyBsb25nIGludClyZXQgKiA2MjUwIC8gNDA5NiAtIDMxMjU7CisJCQkJcmV0ID0gKGludCl0bXA7CisJCQkJdmFsLT5pbnR2YWwgPSAwOworCQkJCWlmIChyZXQgPiAwKQorCQkJCQl2YWwtPmludHZhbCA9IHJldDsgLyogdW5pdCBpcyBtQSAqLworCQkJCXJldCA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcmV0ID0gLUVOT0RBVEE7CisJCWJyZWFrOworCWNhc2UgUE9XRVJfU1VQUExZX1BST1BfQ0hBUkdFX1RZUEU6CisJCWlmICghaW5mby0+YmF0X29ubGluZSkgeworCQkJcmV0ID0gLUVOT0RBVEE7CisJCQlicmVhazsKKwkJfQorCQlyZXQgPSBtYXg4OTI1X3JlZ19yZWFkKGluZm8tPmdwbSwgTUFYODkyNV9DSEdfU1RBVFVTKTsKKwkJcmV0ID0gKHJldCAmIE1BWDg5MjVfQ0hHX1NUQVRfTU9ERV9NQVNLKSA+PiAyOworCQlzd2l0Y2ggKHJldCkgeworCQljYXNlIDE6CisJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9DSEFSR0VfVFlQRV9GQVNUOworCQkJYnJlYWs7CisJCWNhc2UgMDoKKwkJY2FzZSAyOgorCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfQ0hBUkdFX1RZUEVfVFJJQ0tMRTsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9DSEFSR0VfVFlQRV9OT05FOworCQkJYnJlYWs7CisJCX0KKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVM6CisJCWlmICghaW5mby0+YmF0X29ubGluZSkgeworCQkJcmV0ID0gLUVOT0RBVEE7CisJCQlicmVhazsKKwkJfQorCQlyZXQgPSBtYXg4OTI1X3JlZ19yZWFkKGluZm8tPmdwbSwgTUFYODkyNV9DSEdfU1RBVFVTKTsKKwkJaWYgKGluZm8tPnVzYl9vbmxpbmUgfHwgaW5mby0+YWNfb25saW5lKSB7CisJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfTk9UX0NIQVJHSU5HOworCQkJaWYgKHJldCAmIE1BWDg5MjVfQ0hHX1NUQVRfRU5fTUFTSykKKwkJCQl2YWwtPmludHZhbCA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfQ0hBUkdJTkc7CisJCX0gZWxzZQorCQkJdmFsLT5pbnR2YWwgPSBQT1dFUl9TVVBQTFlfU1RBVFVTX0RJU0NIQVJHSU5HOworCQlyZXQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRU5PREVWOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5IG1heDg5MjVfYmF0dGVyeV9wcm9wc1tdID0geworCVBPV0VSX1NVUFBMWV9QUk9QX09OTElORSwKKwlQT1dFUl9TVVBQTFlfUFJPUF9WT0xUQUdFX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DVVJSRU5UX05PVywKKwlQT1dFUl9TVVBQTFlfUFJPUF9DSEFSR0VfVFlQRSwKKwlQT1dFUl9TVVBQTFlfUFJPUF9TVEFUVVMsCit9OworCisjZGVmaW5lIFJFUVVFU1RfSVJRKF9pcnEsIF9uYW1lKQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlyZXQgPSByZXF1ZXN0X3RocmVhZGVkX2lycShjaGlwLT5pcnFfYmFzZSArIF9pcnEsIE5VTEwsCQlcCisJCQkJICAgIG1heDg5MjVfY2hhcmdlcl9oYW5kbGVyLAkJXAorCQkJCSAgICBJUlFGX09ORVNIT1QsIF9uYW1lLCBpbmZvKTsJCVwKKwlpZiAocmV0KQkJCQkJCQlcCisJCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgSVJRICMlZDogJWRcbiIsCVwKKwkJCV9pcnEsIHJldCk7CQkJCQlcCit9IHdoaWxlICgwKQorCitzdGF0aWMgX19kZXZpbml0IGludCBtYXg4OTI1X2luaXRfY2hhcmdlcihzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwLAorCQkJCQkgIHN0cnVjdCBtYXg4OTI1X3Bvd2VyX2luZm8gKmluZm8pCit7CisJaW50IHJldDsKKworCVJFUVVFU1RfSVJRKE1BWDg5MjVfSVJRX1ZDSEdfRENfT1ZQLCAiYWMtb3ZwIik7CisJUkVRVUVTVF9JUlEoTUFYODkyNV9JUlFfVkNIR19EQ19GLCAiYWMtcmVtb3ZlIik7CisJUkVRVUVTVF9JUlEoTUFYODkyNV9JUlFfVkNIR19EQ19SLCAiYWMtaW5zZXJ0Iik7CisJUkVRVUVTVF9JUlEoTUFYODkyNV9JUlFfVkNIR19VU0JfT1ZQLCAidXNiLW92cCIpOworCVJFUVVFU1RfSVJRKE1BWDg5MjVfSVJRX1ZDSEdfVVNCX0YsICJ1c2ItcmVtb3ZlIik7CisJUkVRVUVTVF9JUlEoTUFYODkyNV9JUlFfVkNIR19VU0JfUiwgInVzYi1pbnNlcnQiKTsKKwlSRVFVRVNUX0lSUShNQVg4OTI1X0lSUV9WQ0hHX1RITV9PS19SLCAiYmF0dC10ZW1wLWluLXJhbmdlIik7CisJUkVRVUVTVF9JUlEoTUFYODkyNV9JUlFfVkNIR19USE1fT0tfRiwgImJhdHQtdGVtcC1vdXQtcmFuZ2UiKTsKKwlSRVFVRVNUX0lSUShNQVg4OTI1X0lSUV9WQ0hHX1NZU0xPV19GLCAidnN5cy1oaWdoIik7CisJUkVRVUVTVF9JUlEoTUFYODkyNV9JUlFfVkNIR19TWVNMT1dfUiwgInZzeXMtbG93Iik7CisJUkVRVUVTVF9JUlEoTUFYODkyNV9JUlFfVkNIR19SU1QsICJjaGFyZ2VyLXJlc2V0Iik7CisJUkVRVUVTVF9JUlEoTUFYODkyNV9JUlFfVkNIR19ET05FLCAiY2hhcmdlci1kb25lIik7CisJUkVRVUVTVF9JUlEoTUFYODkyNV9JUlFfVkNIR19UT1BPRkYsICJjaGFyZ2VyLXRvcG9mZiIpOworCVJFUVVFU1RfSVJRKE1BWDg5MjVfSVJRX1ZDSEdfVE1SX0ZBVUxULCAiY2hhcmdlci10aW1lci1leHBpcmUiKTsKKworCWluZm8tPmFjX29ubGluZSA9IDA7CisJaW5mby0+dXNiX29ubGluZSA9IDA7CisJaW5mby0+YmF0X29ubGluZSA9IDA7CisJcmV0ID0gbWF4ODkyNV9yZWdfcmVhZChpbmZvLT5ncG0sIE1BWDg5MjVfQ0hHX1NUQVRVUyk7CisJaWYgKHJldCA+PSAwKSB7CisJCS8qCisJCSAqIElmIGJhdHRlcnkgZGV0ZWN0aW9uIGlzIGVuYWJsZWQsIElEIHBpbiBvZiBiYXR0ZXJ5IGlzCisJCSAqIGNvbm5lY3RlZCB0byBNQkRFVCBwaW4gb2YgTUFYODkyNS4gSXQgY291bGQgYmUgdXNlZCB0bworCQkgKiBkZXRlY3QgYmF0dGVyeSBwcmVzZW5jZS4KKwkJICogT3RoZXJ3aXNlLCB3ZSBoYXZlIHRvIGFzc3VtZSB0aGF0IGJhdHRlcnkgaXMgYWx3YXlzIG9uLgorCQkgKi8KKwkJaWYgKGluZm8tPmJhdHRfZGV0ZWN0KQorCQkJaW5mby0+YmF0X29ubGluZSA9IChyZXQgJiBNQVg4OTI1X0NIR19NQkRFVCkgPyAwIDogMTsKKwkJZWxzZQorCQkJaW5mby0+YmF0X29ubGluZSA9IDE7CisJCWlmIChyZXQgJiBNQVg4OTI1X0NIR19BQ19SQU5HRV9NQVNLKQorCQkJaW5mby0+YWNfb25saW5lID0gMTsKKwkJZWxzZQorCQkJaW5mby0+YWNfb25saW5lID0gMDsKKwl9CisJLyogZGlzYWJsZSBjaGFyZ2UgKi8KKwltYXg4OTI1X3NldF9iaXRzKGluZm8tPmdwbSwgTUFYODkyNV9DSEdfQ05UTDEsIDEgPDwgNywgMSA8PCA3KTsKKwkvKiBzZXQgY2hhcmdpbmcgY3VycmVudCBpbiBjaGFyZ2UgdG9wb2ZmIG1vZGUgKi8KKwltYXg4OTI1X3NldF9iaXRzKGluZm8tPmdwbSwgTUFYODkyNV9DSEdfQ05UTDEsIDMgPDwgNSwKKwkJCSBpbmZvLT50b3BvZmZfdGhyZXNob2xkIDw8IDUpOworCS8qIHNldCBjaGFyaW5nIGN1cnJlbnQgaW4gZmFzdCBjaGFyZ2UgbW9kZSAqLworCW1heDg5MjVfc2V0X2JpdHMoaW5mby0+Z3BtLCBNQVg4OTI1X0NIR19DTlRMMSwgNywgaW5mby0+ZmFzdF9jaGFyZ2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2RldmV4aXQgaW50IG1heDg5MjVfZGVpbml0X2NoYXJnZXIoc3RydWN0IG1heDg5MjVfcG93ZXJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwID0gaW5mby0+Y2hpcDsKKwlpbnQgaXJxOworCisJaXJxID0gY2hpcC0+aXJxX2Jhc2UgKyBNQVg4OTI1X0lSUV9WQ0hHX0RDX09WUDsKKwlmb3IgKDsgaXJxIDw9IGNoaXAtPmlycV9iYXNlICsgTUFYODkyNV9JUlFfVkNIR19UTVJfRkFVTFQ7IGlycSsrKQorCQlmcmVlX2lycShpcnEsIGluZm8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2RldmluaXQgaW50IG1heDg5MjVfcG93ZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCBtYXg4OTI1X3BsYXRmb3JtX2RhdGEgKm1heDg5MjVfcGRhdGE7CisJc3RydWN0IG1heDg5MjVfcG93ZXJfcGRhdGEgKnBkYXRhID0gTlVMTDsKKwlzdHJ1Y3QgbWF4ODkyNV9wb3dlcl9pbmZvICppbmZvOworCWludCByZXQ7CisKKwlpZiAocGRldi0+ZGV2LnBhcmVudC0+cGxhdGZvcm1fZGF0YSkgeworCQltYXg4OTI1X3BkYXRhID0gcGRldi0+ZGV2LnBhcmVudC0+cGxhdGZvcm1fZGF0YTsKKwkJcGRhdGEgPSBtYXg4OTI1X3BkYXRhLT5wb3dlcjsKKwl9CisKKwlpZiAoIXBkYXRhKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgInBsYXRmb3JtIGRhdGEgaXNuJ3QgYXNzaWduZWQgdG8gIgorCQkJInBvd2VyIHN1cHBseVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWF4ODkyNV9wb3dlcl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKwlpbmZvLT5jaGlwID0gY2hpcDsKKwlpbmZvLT5ncG0gPSBjaGlwLT5pMmM7CisJaW5mby0+YWRjID0gY2hpcC0+YWRjOworCisJaW5mby0+YWMubmFtZSA9ICJtYXg4OTI1LWFjIjsKKwlpbmZvLT5hYy50eXBlID0gUE9XRVJfU1VQUExZX1RZUEVfTUFJTlM7CisJaW5mby0+YWMucHJvcGVydGllcyA9IG1heDg5MjVfYWNfcHJvcHM7CisJaW5mby0+YWMubnVtX3Byb3BlcnRpZXMgPSBBUlJBWV9TSVpFKG1heDg5MjVfYWNfcHJvcHMpOworCWluZm8tPmFjLmdldF9wcm9wZXJ0eSA9IG1heDg5MjVfYWNfZ2V0X3Byb3A7CisJcmV0ID0gcG93ZXJfc3VwcGx5X3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZpbmZvLT5hYyk7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJaW5mby0+YWMuZGV2LT5wYXJlbnQgPSAmcGRldi0+ZGV2OworCisJaW5mby0+dXNiLm5hbWUgPSAibWF4ODkyNS11c2IiOworCWluZm8tPnVzYi50eXBlID0gUE9XRVJfU1VQUExZX1RZUEVfVVNCOworCWluZm8tPnVzYi5wcm9wZXJ0aWVzID0gbWF4ODkyNV91c2JfcHJvcHM7CisJaW5mby0+dXNiLm51bV9wcm9wZXJ0aWVzID0gQVJSQVlfU0laRShtYXg4OTI1X3VzYl9wcm9wcyk7CisJaW5mby0+dXNiLmdldF9wcm9wZXJ0eSA9IG1heDg5MjVfdXNiX2dldF9wcm9wOworCXJldCA9IHBvd2VyX3N1cHBseV9yZWdpc3RlcigmcGRldi0+ZGV2LCAmaW5mby0+dXNiKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF91c2I7CisJaW5mby0+dXNiLmRldi0+cGFyZW50ID0gJnBkZXYtPmRldjsKKworCWluZm8tPmJhdHRlcnkubmFtZSA9ICJtYXg4OTI1LWJhdHRlcnkiOworCWluZm8tPmJhdHRlcnkudHlwZSA9IFBPV0VSX1NVUFBMWV9UWVBFX0JBVFRFUlk7CisJaW5mby0+YmF0dGVyeS5wcm9wZXJ0aWVzID0gbWF4ODkyNV9iYXR0ZXJ5X3Byb3BzOworCWluZm8tPmJhdHRlcnkubnVtX3Byb3BlcnRpZXMgPSBBUlJBWV9TSVpFKG1heDg5MjVfYmF0dGVyeV9wcm9wcyk7CisJaW5mby0+YmF0dGVyeS5nZXRfcHJvcGVydHkgPSBtYXg4OTI1X2JhdF9nZXRfcHJvcDsKKwlyZXQgPSBwb3dlcl9zdXBwbHlfcmVnaXN0ZXIoJnBkZXYtPmRldiwgJmluZm8tPmJhdHRlcnkpOworCWlmIChyZXQpCisJCWdvdG8gb3V0X2JhdHRlcnk7CisJaW5mby0+YmF0dGVyeS5kZXYtPnBhcmVudCA9ICZwZGV2LT5kZXY7CisKKwlpbmZvLT5iYXR0X2RldGVjdCA9IHBkYXRhLT5iYXR0X2RldGVjdDsKKwlpbmZvLT50b3BvZmZfdGhyZXNob2xkID0gcGRhdGEtPnRvcG9mZl90aHJlc2hvbGQ7CisJaW5mby0+ZmFzdF9jaGFyZ2UgPSBwZGF0YS0+ZmFzdF9jaGFyZ2U7CisJaW5mby0+c2V0X2NoYXJnZXIgPSBwZGF0YS0+c2V0X2NoYXJnZXI7CisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGluZm8pOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGluZm8pOworCisJbWF4ODkyNV9pbml0X2NoYXJnZXIoY2hpcCwgaW5mbyk7CisJcmV0dXJuIDA7CitvdXRfYmF0dGVyeToKKwlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmaW5mby0+YmF0dGVyeSk7CitvdXRfdXNiOgorCXBvd2VyX3N1cHBseV91bnJlZ2lzdGVyKCZpbmZvLT5hYyk7CitvdXQ6CisJa2ZyZWUoaW5mbyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIF9fZGV2ZXhpdCBpbnQgbWF4ODkyNV9wb3dlcl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9wb3dlcl9pbmZvICppbmZvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAoaW5mbykgeworCQlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmaW5mby0+YWMpOworCQlwb3dlcl9zdXBwbHlfdW5yZWdpc3RlcigmaW5mby0+dXNiKTsKKwkJcG93ZXJfc3VwcGx5X3VucmVnaXN0ZXIoJmluZm8tPmJhdHRlcnkpOworCQltYXg4OTI1X2RlaW5pdF9jaGFyZ2VyKGluZm8pOworCQlrZnJlZShpbmZvKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1heDg5MjVfcG93ZXJfZHJpdmVyID0geworCS5wcm9iZQk9IG1heDg5MjVfcG93ZXJfcHJvYmUsCisJLnJlbW92ZQk9IF9fZGV2ZXhpdF9wKG1heDg5MjVfcG93ZXJfcmVtb3ZlKSwKKwkuZHJpdmVyCT0geworCQkubmFtZQk9ICJtYXg4OTI1LXBvd2VyIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWF4ODkyNV9wb3dlcl9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmbWF4ODkyNV9wb3dlcl9kcml2ZXIpOworfQorbW9kdWxlX2luaXQobWF4ODkyNV9wb3dlcl9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1heDg5MjVfcG93ZXJfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtYXg4OTI1X3Bvd2VyX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChtYXg4OTI1X3Bvd2VyX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlBvd2VyIHN1cHBseSBkcml2ZXIgZm9yIE1BWDg5MjUiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06bWF4ODkyNS1wb3dlciIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wb3dlci93bTgzNTBfcG93ZXIuYyBiL2RyaXZlcnMvcG93ZXIvd204MzUwX3Bvd2VyLmMKaW5kZXggYWQ0ZjA3MS4uMDY5MzkwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wb3dlci93bTgzNTBfcG93ZXIuYworKysgYi9kcml2ZXJzL3Bvd2VyL3dtODM1MF9wb3dlci5jCkBAIC0xOTAsNyArMTkwLDcgQEAKIAlzdHJ1Y3Qgd204MzUwX3Bvd2VyICpwb3dlciA9ICZ3bTgzNTAtPnBvd2VyOwogCXN0cnVjdCB3bTgzNTBfY2hhcmdlcl9wb2xpY3kgKnBvbGljeSA9IHBvd2VyLT5wb2xpY3k7CiAKLQlzd2l0Y2ggKGlycSkgeworCXN3aXRjaCAoaXJxIC0gd204MzUwLT5pcnFfYmFzZSkgewogCWNhc2UgV004MzUwX0lSUV9DSEdfQkFUX0ZBSUw6CiAJCWRldl9lcnIod204MzUwLT5kZXYsICJiYXR0ZXJ5IGZhaWxlZFxuIik7CiAJCWJyZWFrOwpAQCAtNDI4LDE4ICs0MjgsMTggQEAKIAogc3RhdGljIHZvaWQgZnJlZV9jaGFyZ2VyX2lycShzdHJ1Y3Qgd204MzUwICp3bTgzNTApCiB7Ci0Jd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfQkFUX0hPVCk7Ci0Jd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfQkFUX0NPTEQpOwotCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX0JBVF9GQUlMKTsKLQl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19UTyk7Ci0Jd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfRU5EKTsKLQl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19TVEFSVCk7Ci0Jd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfM1A5KTsKLQl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8zUDEpOwotCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX1ZCQVRUX0xUXzJQODUpOwotCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfRVhUX1VTQl9GQik7Ci0Jd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9FWFRfV0FMTF9GQik7Ci0Jd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9FWFRfQkFUX0ZCKTsKKwl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19CQVRfSE9ULCB3bTgzNTApOworCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX0JBVF9DT0xELCB3bTgzNTApOworCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX0JBVF9GQUlMLCB3bTgzNTApOworCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX1RPLCB3bTgzNTApOworCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX0VORCwgd204MzUwKTsKKwl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19TVEFSVCwgd204MzUwKTsKKwl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NIR19WQkFUVF9MVF8zUDksIHdtODM1MCk7CisJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DSEdfVkJBVFRfTFRfM1AxLCB3bTgzNTApOworCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ0hHX1ZCQVRUX0xUXzJQODUsIHdtODM1MCk7CisJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9FWFRfVVNCX0ZCLCB3bTgzNTApOworCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfRVhUX1dBTExfRkIsIHdtODM1MCk7CisJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9FWFRfQkFUX0ZCLCB3bTgzNTApOwogfQogCiBzdGF0aWMgX19kZXZpbml0IGludCB3bTgzNTBfcG93ZXJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcG93ZXIvd205N3h4X2JhdHRlcnkuYyBiL2RyaXZlcnMvcG93ZXIvd205N3h4X2JhdHRlcnkuYwppbmRleCA2ZWEzY2I1Li4yM2VlZDM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bvd2VyL3dtOTd4eF9iYXR0ZXJ5LmMKKysrIGIvZHJpdmVycy9wb3dlci93bTk3eHhfYmF0dGVyeS5jCkBAIC0yNiw3ICsyNiw3IEBACiAKIHN0YXRpYyBERUZJTkVfTVVURVgoYmF0X2xvY2spOwogc3RhdGljIHN0cnVjdCB3b3JrX3N0cnVjdCBiYXRfd29yazsKLXN0cnVjdCBtdXRleCB3b3JrX2xvY2s7CitzdGF0aWMgc3RydWN0IG11dGV4IHdvcmtfbG9jazsKIHN0YXRpYyBpbnQgYmF0X3N0YXR1cyA9IFBPV0VSX1NVUFBMWV9TVEFUVVNfVU5LTk9XTjsKIHN0YXRpYyBzdHJ1Y3Qgd205N3h4X2JhdHRfaW5mbyAqZ3BkYXRhOwogc3RhdGljIGVudW0gcG93ZXJfc3VwcGx5X3Byb3BlcnR5ICpwcm9wOwpAQCAtMjAzLDcgKzIwMyw3IEBACiAJCQlnb3RvIGVycjI7CiAJCXJldCA9IHJlcXVlc3RfaXJxKGdwaW9fdG9faXJxKHBkYXRhLT5jaGFyZ2VfZ3BpbyksCiAJCQkJd205N3h4X2NocmdfaXJxLCBJUlFGX0RJU0FCTEVELAotCQkJCSJBQyBEZXRlY3QiLCAwKTsKKwkJCQkiQUMgRGV0ZWN0IiwgZGV2KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gZXJyMjsKIAkJcHJvcHMrKzsJLyogUE9XRVJfU1VQUExZX1BST1BfU1RBVFVTICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9LY29uZmlnIGIvZHJpdmVycy9wcHMvS2NvbmZpZwppbmRleCBjYzJlYjhlLi4xYWZlNGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bwcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvcHBzL0tjb25maWcKQEAgLTMwLDQgKzMwLDYgQEAKIAkgIG1lc3NhZ2VzIHRvIHRoZSBzeXN0ZW0gbG9nLiAgU2VsZWN0IHRoaXMgaWYgeW91IGFyZSBoYXZpbmcgYQogCSAgcHJvYmxlbSB3aXRoIFBQUyBzdXBwb3J0IGFuZCB3YW50IHRvIHNlZSBtb3JlIG9mIHdoYXQgaXMgZ29pbmcgb24uCiAKK3NvdXJjZSBkcml2ZXJzL3Bwcy9jbGllbnRzL0tjb25maWcKKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wcHMvTWFrZWZpbGUgYi9kcml2ZXJzL3Bwcy9NYWtlZmlsZQppbmRleCAxOWVhNTgyLi45ODk2MGRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Bwcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Bwcy9NYWtlZmlsZQpAQCAtNCw1ICs0LDYgQEAKIAogcHBzX2NvcmUteQkJCTo9IHBwcy5vIGthcGkubyBzeXNmcy5vCiBvYmotJChDT05GSUdfUFBTKQkJOj0gcHBzX2NvcmUubworb2JqLXkJCQkJKz0gY2xpZW50cy8KIAogY2NmbGFncy0kKENPTkZJR19QUFNfREVCVUcpIDo9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHBzL2NsaWVudHMvS2NvbmZpZyBiL2RyaXZlcnMvcHBzL2NsaWVudHMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTgwMWJkNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcHBzL2NsaWVudHMvS2NvbmZpZwpAQCAtMCwwICsxLDI1IEBACisjCisjIFBQUyBjbGllbnRzIGNvbmZpZ3VyYXRpb24KKyMKKworaWYgUFBTCisKK2NvbW1lbnQgIlBQUyBjbGllbnRzIHN1cHBvcnQiCisKK2NvbmZpZyBQUFNfQ0xJRU5UX0tUSU1FUgorCXRyaXN0YXRlICJLZXJuZWwgdGltZXIgY2xpZW50IChUZXN0aW5nIGNsaWVudCwgdXNlIGZvciBkZWJ1ZykiCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIGEgUFBTIGRlYnVnZ2luZyBjbGllbnQKKwkgIHdoaWNoIHVzZXMgYSBrZXJuZWwgdGltZXIgdG8gZ2VuZXJhdGUgdGhlIFBQUyBzaWduYWwuCisKKwkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHBwcy1rdGltZXIuCisKK2NvbmZpZyBQUFNfQ0xJRU5UX0xESVNDCisJdHJpc3RhdGUgIlBQUyBsaW5lIGRpc2NpcGxpbmUiCisJZGVwZW5kcyBvbiBQUFMKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgYSBQUFMgc291cmNlIGNvbm5lY3RlZAorCSAgd2l0aCB0aGUgQ0QgKENhcnJpZXIgRGV0ZWN0KSBwaW4gb2YgeW91ciBzZXJpYWwgcG9ydC4KKworZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcHBzL2NsaWVudHMvTWFrZWZpbGUgYi9kcml2ZXJzL3Bwcy9jbGllbnRzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMmM5YjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Bwcy9jbGllbnRzL01ha2VmaWxlCkBAIC0wLDAgKzEsMTAgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIFBQUyBjbGllbnRzLgorIworCitvYmotJChDT05GSUdfUFBTX0NMSUVOVF9LVElNRVIpCSs9IHBwcy1rdGltZXIubworb2JqLSQoQ09ORklHX1BQU19DTElFTlRfTERJU0MpCSs9IHBwcy1sZGlzYy5vCisKK2lmZXEgKCQoQ09ORklHX1BQU19ERUJVRykseSkKK0VYVFJBX0NGTEFHUyArPSAtRERFQlVHCitlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wcHMvY2xpZW50cy9wcHMta3RpbWVyLmMgYi9kcml2ZXJzL3Bwcy9jbGllbnRzL3Bwcy1rdGltZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2VmNWI4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wcHMvY2xpZW50cy9wcHMta3RpbWVyLmMKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBwcHMta3RpbWVyLmMgLS0ga2VybmVsIHRpbWVyIHRlc3QgY2xpZW50CisgKgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2ICAgUm9kb2xmbyBHaW9tZXR0aSA8Z2lvbWV0dGlAbGludXguaXQ+CisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcHNfa2VybmVsLmg+CisKKy8qCisgKiBHbG9iYWwgdmFyaWFibGVzCisgKi8KKworc3RhdGljIGludCBzb3VyY2U7CitzdGF0aWMgc3RydWN0IHRpbWVyX2xpc3Qga3RpbWVyOworCisvKgorICogVGhlIGtlcm5lbCB0aW1lcgorICovCisKK3N0YXRpYyB2b2lkIHBwc19rdGltZXJfZXZlbnQodW5zaWduZWQgbG9uZyBwdHIpCit7CisJc3RydWN0IHRpbWVzcGVjIF9fdHM7CisJc3RydWN0IHBwc19rdGltZSB0czsKKworCS8qIEZpcnN0IG9mIGFsbCB3ZSBnZXQgdGhlIHRpbWUgc3RhbXAuLi4gKi8KKwlnZXRuc3RpbWVvZmRheSgmX190cyk7CisKKwlwcl9pbmZvKCJQUFMgZXZlbnQgYXQgJWx1XG4iLCBqaWZmaWVzKTsKKworCS8qIC4uLiBhbmQgdHJhbnNsYXRlIGl0IHRvIFBQUyB0aW1lIGRhdGEgc3RydWN0ICovCisJdHMuc2VjID0gX190cy50dl9zZWM7CisJdHMubnNlYyA9IF9fdHMudHZfbnNlYzsKKworCXBwc19ldmVudChzb3VyY2UsICZ0cywgUFBTX0NBUFRVUkVBU1NFUlQsIE5VTEwpOworCisJbW9kX3RpbWVyKCZrdGltZXIsIGppZmZpZXMgKyBIWik7Cit9CisKKy8qCisgKiBUaGUgZWNobyBmdW5jdGlvbgorICovCisKK3N0YXRpYyB2b2lkIHBwc19rdGltZXJfZWNobyhpbnQgc291cmNlLCBpbnQgZXZlbnQsIHZvaWQgKmRhdGEpCit7CisJcHJfaW5mbygiZWNobyAlcyAlcyBmb3Igc291cmNlICVkXG4iLAorCQlldmVudCAmIFBQU19DQVBUVVJFQVNTRVJUID8gImFzc2VydCIgOiAiIiwKKwkJZXZlbnQgJiBQUFNfQ0FQVFVSRUNMRUFSID8gImNsZWFyIiA6ICIiLAorCQlzb3VyY2UpOworfQorCisvKgorICogVGhlIFBQUyBpbmZvIHN0cnVjdAorICovCisKK3N0YXRpYyBzdHJ1Y3QgcHBzX3NvdXJjZV9pbmZvIHBwc19rdGltZXJfaW5mbyA9IHsKKwkubmFtZQkJPSAia3RpbWVyIiwKKwkucGF0aAkJPSAiIiwKKwkubW9kZQkJPSBQUFNfQ0FQVFVSRUFTU0VSVCB8IFBQU19PRkZTRVRBU1NFUlQgfAorCQkJICBQUFNfRUNIT0FTU0VSVCB8CisJCQkgIFBQU19DQU5XQUlUIHwgUFBTX1RTRk1UX1RTUEVDLAorCS5lY2hvCQk9IHBwc19rdGltZXJfZWNobywKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCit9OworCisvKgorICogTW9kdWxlIHN0YWZmCisgKi8KKworc3RhdGljIHZvaWQgX19leGl0IHBwc19rdGltZXJfZXhpdCh2b2lkKQoreworCWRlbF90aW1lcl9zeW5jKCZrdGltZXIpOworCXBwc191bnJlZ2lzdGVyX3NvdXJjZShzb3VyY2UpOworCisJcHJfaW5mbygia3RpbWVyIFBQUyBzb3VyY2UgdW5yZWdpc3RlcmVkXG4iKTsKK30KKworc3RhdGljIGludCBfX2luaXQgcHBzX2t0aW1lcl9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHBwc19yZWdpc3Rlcl9zb3VyY2UoJnBwc19rdGltZXJfaW5mbywKKwkJCQlQUFNfQ0FQVFVSRUFTU0VSVCB8IFBQU19PRkZTRVRBU1NFUlQpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY2Fubm90IHJlZ2lzdGVyIGt0aW1lciBzb3VyY2VcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKwlzb3VyY2UgPSByZXQ7CisKKwlzZXR1cF90aW1lcigma3RpbWVyLCBwcHNfa3RpbWVyX2V2ZW50LCAwKTsKKwltb2RfdGltZXIoJmt0aW1lciwgamlmZmllcyArIEhaKTsKKworCXByX2luZm8oImt0aW1lciBQUFMgc291cmNlIHJlZ2lzdGVyZWQgYXQgJWRcbiIsIHNvdXJjZSk7CisKKwlyZXR1cm4gIDA7Cit9CisKK21vZHVsZV9pbml0KHBwc19rdGltZXJfaW5pdCk7Cittb2R1bGVfZXhpdChwcHNfa3RpbWVyX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJSb2RvbGZvIEdpb21ldHRpIDxnaW9tZXR0aUBsaW51eC5pdD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiZHVtbXkgUFBTIHNvdXJjZSBieSB1c2luZyBhIGtlcm5lbCB0aW1lciAoanVzdCBmb3IgZGVidWcpIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Bwcy9jbGllbnRzL3Bwcy1sZGlzYy5jIGIvZHJpdmVycy9wcHMvY2xpZW50cy9wcHMtbGRpc2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTE5MzJkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9wcHMvY2xpZW50cy9wcHMtbGRpc2MuYwpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIHBwcy1sZGlzYy5jIC0tIFBQUyBsaW5lIGRpc2NpcGxpbmUKKyAqCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4CVJvZG9sZm8gR2lvbWV0dGkgPGdpb21ldHRpQGxpbnV4Lml0PgorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wcHNfa2VybmVsLmg+CisKKyNkZWZpbmUgUFBTX1RUWV9NQUdJQwkJMHgwMDAxCisKK3N0YXRpYyB2b2lkIHBwc190dHlfZGNkX2NoYW5nZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBpbnQgc3RhdHVzLAorCQkJCXN0cnVjdCB0aW1lc3BlYyAqdHMpCit7CisJaW50IGlkID0gKGxvbmcpdHR5LT5kaXNjX2RhdGE7CisJc3RydWN0IHRpbWVzcGVjIF9fdHM7CisJc3RydWN0IHBwc19rdGltZSBwcHNfdHM7CisKKwkvKiBGaXJzdCBvZiBhbGwgd2UgZ2V0IHRoZSB0aW1lIHN0YW1wLi4uICovCisJZ2V0bnN0aW1lb2ZkYXkoJl9fdHMpOworCisJLyogRG9lcyBjYWxsZXIgZ2l2ZSB1cyBhIHRpbWVzdGFtcD8gKi8KKwlpZiAodHMpIHsJLyogWWVzLiBMZXQncyB1c2UgaXQhICovCisJCXBwc190cy5zZWMgPSB0cy0+dHZfc2VjOworCQlwcHNfdHMubnNlYyA9IHRzLT50dl9uc2VjOworCX0gZWxzZSB7CS8qIE5vLiBEbyBpdCBvdXJzZWxmISAqLworCQlwcHNfdHMuc2VjID0gX190cy50dl9zZWM7CisJCXBwc190cy5uc2VjID0gX190cy50dl9uc2VjOworCX0KKworCS8qIE5vdyBkbyB0aGUgUFBTIGV2ZW50IHJlcG9ydCAqLworCXBwc19ldmVudChpZCwgJnBwc190cywgc3RhdHVzID8gUFBTX0NBUFRVUkVBU1NFUlQgOiBQUFNfQ0FQVFVSRUNMRUFSLAorCQkJTlVMTCk7CisKKwlwcl9kZWJ1ZygiUFBTICVzIGF0ICVsdSBvbiBzb3VyY2UgIyVkXG4iLAorCQkJc3RhdHVzID8gImFzc2VydCIgOiAiY2xlYXIiLCBqaWZmaWVzLCBpZCk7Cit9CisKK3N0YXRpYyBpbnQgKCphbGlhc19uX3R0eV9vcGVuKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKKworc3RhdGljIGludCBwcHNfdHR5X29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3sKKwlzdHJ1Y3QgcHBzX3NvdXJjZV9pbmZvIGluZm87CisJc3RydWN0IHR0eV9kcml2ZXIgKmRydiA9IHR0eS0+ZHJpdmVyOworCWludCBpbmRleCA9IHR0eS0+aW5kZXggKyBkcnYtPm5hbWVfYmFzZTsKKwlpbnQgcmV0OworCisJaW5mby5vd25lciA9IFRISVNfTU9EVUxFOworCWluZm8uZGV2ID0gTlVMTDsKKwlzbnByaW50ZihpbmZvLm5hbWUsIFBQU19NQVhfTkFNRV9MRU4sICIlcyVkIiwgZHJ2LT5kcml2ZXJfbmFtZSwgaW5kZXgpOworCXNucHJpbnRmKGluZm8ucGF0aCwgUFBTX01BWF9OQU1FX0xFTiwgIi9kZXYvJXMlZCIsIGRydi0+bmFtZSwgaW5kZXgpOworCWluZm8ubW9kZSA9IFBQU19DQVBUVVJFQk9USCB8IFwKKwkJCVBQU19PRkZTRVRBU1NFUlQgfCBQUFNfT0ZGU0VUQ0xFQVIgfCBcCisJCQlQUFNfQ0FOV0FJVCB8IFBQU19UU0ZNVF9UU1BFQzsKKworCXJldCA9IHBwc19yZWdpc3Rlcl9zb3VyY2UoJmluZm8sIFBQU19DQVBUVVJFQk9USCB8IFwKKwkJCQlQUFNfT0ZGU0VUQVNTRVJUIHwgUFBTX09GRlNFVENMRUFSKTsKKwlpZiAocmV0IDwgMCkgeworCQlwcl9lcnIoImNhbm5vdCByZWdpc3RlciBQUFMgc291cmNlIFwiJXNcIlxuIiwgaW5mby5wYXRoKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJdHR5LT5kaXNjX2RhdGEgPSAodm9pZCAqKShsb25nKXJldDsKKworCS8qIFNob3VsZCBvcGVuIE5fVFRZIGxkaXNjIHRvbyAqLworCXJldCA9IGFsaWFzX25fdHR5X29wZW4odHR5KTsKKwlpZiAocmV0IDwgMCkKKwkJcHBzX3VucmVnaXN0ZXJfc291cmNlKChsb25nKXR0eS0+ZGlzY19kYXRhKTsKKworCXByX2luZm8oIlBQUyBzb3VyY2UgIyVkIFwiJXNcIiBhZGRlZFxuIiwgcmV0LCBpbmZvLnBhdGgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkICgqYWxpYXNfbl90dHlfY2xvc2UpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworCitzdGF0aWMgdm9pZCBwcHNfdHR5X2Nsb3NlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpCit7CisJaW50IGlkID0gKGxvbmcpdHR5LT5kaXNjX2RhdGE7CisKKwlwcHNfdW5yZWdpc3Rlcl9zb3VyY2UoaWQpOworCWFsaWFzX25fdHR5X2Nsb3NlKHR0eSk7CisKKwlwcl9pbmZvKCJQUFMgc291cmNlICMlZCByZW1vdmVkXG4iLCBpZCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdHR5X2xkaXNjX29wcyBwcHNfbGRpc2Nfb3BzOworCisvKgorICogTW9kdWxlIHN0dWZmCisgKi8KKworc3RhdGljIGludCBfX2luaXQgcHBzX3R0eV9pbml0KHZvaWQpCit7CisJaW50IGVycjsKKworCS8qIEluaGVyaXQgdGhlIE5fVFRZJ3Mgb3BzICovCisJbl90dHlfaW5oZXJpdF9vcHMoJnBwc19sZGlzY19vcHMpOworCisJLyogU2F2ZSBOX1RUWSdzIG9wZW4oKS9jbG9zZSgpIG1ldGhvZHMgKi8KKwlhbGlhc19uX3R0eV9vcGVuID0gcHBzX2xkaXNjX29wcy5vcGVuOworCWFsaWFzX25fdHR5X2Nsb3NlID0gcHBzX2xkaXNjX29wcy5jbG9zZTsKKworCS8qIEluaXQgUFBTX1RUWSBkYXRhICovCisJcHBzX2xkaXNjX29wcy5vd25lciA9IFRISVNfTU9EVUxFOworCXBwc19sZGlzY19vcHMubWFnaWMgPSBQUFNfVFRZX01BR0lDOworCXBwc19sZGlzY19vcHMubmFtZSA9ICJwcHNfdHR5IjsKKwlwcHNfbGRpc2Nfb3BzLmRjZF9jaGFuZ2UgPSBwcHNfdHR5X2RjZF9jaGFuZ2U7CisJcHBzX2xkaXNjX29wcy5vcGVuID0gcHBzX3R0eV9vcGVuOworCXBwc19sZGlzY19vcHMuY2xvc2UgPSBwcHNfdHR5X2Nsb3NlOworCisJZXJyID0gdHR5X3JlZ2lzdGVyX2xkaXNjKE5fUFBTLCAmcHBzX2xkaXNjX29wcyk7CisJaWYgKGVycikKKwkJcHJfZXJyKCJjYW4ndCByZWdpc3RlciBQUFMgbGluZSBkaXNjaXBsaW5lXG4iKTsKKwllbHNlCisJCXByX2luZm8oIlBQUyBsaW5lIGRpc2NpcGxpbmUgcmVnaXN0ZXJlZFxuIik7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgcHBzX3R0eV9jbGVhbnVwKHZvaWQpCit7CisJaW50IGVycjsKKworCWVyciA9IHR0eV91bnJlZ2lzdGVyX2xkaXNjKE5fUFBTKTsKKwlpZiAoZXJyKQorCQlwcl9lcnIoImNhbid0IHVucmVnaXN0ZXIgUFBTIGxpbmUgZGlzY2lwbGluZVxuIik7CisJZWxzZQorCQlwcl9pbmZvKCJQUFMgbGluZSBkaXNjaXBsaW5lIHJlbW92ZWRcbiIpOworfQorCittb2R1bGVfaW5pdChwcHNfdHR5X2luaXQpOworbW9kdWxlX2V4aXQocHBzX3R0eV9jbGVhbnVwKTsKKworTU9EVUxFX0FMSUFTX0xESVNDKE5fUFBTKTsKK01PRFVMRV9BVVRIT1IoIlJvZG9sZm8gR2lvbWV0dGkgPGdpb21ldHRpQGxpbnV4Lml0PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQUFMgVFRZIGRldmljZSBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yLzg4cG04NjA3LmMgYi9kcml2ZXJzL3JlZ3VsYXRvci84OHBtODYwNy5jCmluZGV4IDA0NzE5NTUuLjVmYjgzZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yLzg4cG04NjA3LmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvODhwbTg2MDcuYwpAQCAtMTEsMTUgKzExLDE3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvbWFjaGluZS5oPgotI2luY2x1ZGUgPGxpbnV4L21mZC84OHBtODYwNy5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC84OHBtODYweC5oPgogCiBzdHJ1Y3QgcG04NjA3X3JlZ3VsYXRvcl9pbmZvIHsKIAlzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MJZGVzYzsKLQlzdHJ1Y3QgcG04NjA3X2NoaXAJKmNoaXA7CisJc3RydWN0IHBtODYweF9jaGlwCSpjaGlwOwogCXN0cnVjdCByZWd1bGF0b3JfZGV2CSpyZWd1bGF0b3I7CisJc3RydWN0IGkyY19jbGllbnQJKmkyYzsKIAogCWludAltaW5fdVY7CiAJaW50CW1heF91VjsKQEAgLTQ2LDcgKzQ4LDYgQEAKIHN0YXRpYyBpbnQgcG04NjA3X2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgdW5zaWduZWQgaW5kZXgpCiB7CiAJc3RydWN0IHBtODYwN19yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7Ci0JdWludDhfdCBjaGlwX2lkID0gaW5mby0+Y2hpcC0+Y2hpcF9pZDsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAogCXN3aXRjaCAoaW5mby0+ZGVzYy5pZCkgewpAQCAtODgsNzkgKzg5LDI5IEBACiAJY2FzZSBQTTg2MDdfSURfTERPMjoKIAljYXNlIFBNODYwN19JRF9MRE8zOgogCWNhc2UgUE04NjA3X0lEX0xETzk6Ci0JCXN3aXRjaCAoY2hpcF9pZCkgewotCQljYXNlIFBNODYwN19DSElQX0EwOgotCQljYXNlIFBNODYwN19DSElQX0ExOgotCQkJcmV0ID0gKGluZGV4IDwgMykgPyAoaW5kZXggKiA1MDAwMCArIDE4MDAwMDApIDoKLQkJCQkoKGluZGV4IDwgOCkgPyAoaW5kZXggKiA1MDAwMCArIDI1NTAwMDApIDoKLQkJCQkgLUVJTlZBTCk7Ci0JCQlicmVhazsKLQkJY2FzZSBQTTg2MDdfQ0hJUF9CMDoKLQkJCXJldCA9IChpbmRleCA8IDMpID8gKGluZGV4ICogNTAwMDAgKyAxODAwMDAwKSA6Ci0JCQkJKChpbmRleCA8IDcpID8gKGluZGV4ICogNTAwMDAgKyAyNTUwMDAwKSA6Ci0JCQkJMzMwMDAwMCk7Ci0JCQlicmVhazsKLQkJfQorCQlyZXQgPSAoaW5kZXggPCAzKSA/IChpbmRleCAqIDUwMDAwICsgMTgwMDAwMCkgOgorCQkJKChpbmRleCA8IDcpID8gKGluZGV4ICogNTAwMDAgKyAyNTUwMDAwKSA6CisJCQkzMzAwMDAwKTsKIAkJYnJlYWs7CiAJY2FzZSBQTTg2MDdfSURfTERPNDoKLQkJc3dpdGNoIChjaGlwX2lkKSB7Ci0JCWNhc2UgUE04NjA3X0NISVBfQTA6Ci0JCWNhc2UgUE04NjA3X0NISVBfQTE6Ci0JCQlyZXQgPSAoaW5kZXggPCAzKSA/IChpbmRleCAqIDUwMDAwICsgMTgwMDAwMCkgOgotCQkJCSgoaW5kZXggPCA4KSA/IChpbmRleCAqIDUwMDAwICsgMjU1MDAwMCkgOgotCQkJCSAtRUlOVkFMKTsKLQkJCWJyZWFrOwotCQljYXNlIFBNODYwN19DSElQX0IwOgotCQkJcmV0ID0gKGluZGV4IDwgMykgPyAoaW5kZXggKiA1MDAwMCArIDE4MDAwMDApIDoKLQkJCQkoKGluZGV4IDwgNikgPyAoaW5kZXggKiA1MDAwMCArIDI1NTAwMDApIDoKLQkJCQkoKGluZGV4ID09IDYpID8gMjkwMDAwMCA6IDMzMDAwMDApKTsKLQkJCWJyZWFrOwotCQl9CisJCXJldCA9IChpbmRleCA8IDMpID8gKGluZGV4ICogNTAwMDAgKyAxODAwMDAwKSA6CisJCQkoKGluZGV4IDwgNikgPyAoaW5kZXggKiA1MDAwMCArIDI1NTAwMDApIDoKKwkJCSgoaW5kZXggPT0gNikgPyAyOTAwMDAwIDogMzMwMDAwMCkpOwogCQlicmVhazsKIAljYXNlIFBNODYwN19JRF9MRE82OgotCQlzd2l0Y2ggKGNoaXBfaWQpIHsKLQkJY2FzZSBQTTg2MDdfQ0hJUF9BMDoKLQkJY2FzZSBQTTg2MDdfQ0hJUF9BMToKLQkJCXJldCA9IChpbmRleCA8IDMpID8gKGluZGV4ICogNTAwMDAgKyAxODAwMDAwKSA6Ci0JCQkJKChpbmRleCA8IDgpID8gKGluZGV4ICogNTAwMDAgKyAyNDUwMDAwKSA6Ci0JCQkJLUVJTlZBTCk7Ci0JCQlicmVhazsKLQkJY2FzZSBQTTg2MDdfQ0hJUF9CMDoKLQkJCXJldCA9IChpbmRleCA8IDIpID8gKGluZGV4ICogNTAwMDAgKyAxODAwMDAwKSA6Ci0JCQkJKChpbmRleCA8IDcpID8gKGluZGV4ICogNTAwMDAgKyAyNTAwMDAwKSA6Ci0JCQkJMzMwMDAwMCk7Ci0JCQlicmVhazsKLQkJfQorCQlyZXQgPSAoaW5kZXggPCAyKSA/IChpbmRleCAqIDUwMDAwICsgMTgwMDAwMCkgOgorCQkJKChpbmRleCA8IDcpID8gKGluZGV4ICogNTAwMDAgKyAyNTAwMDAwKSA6CisJCQkzMzAwMDAwKTsKIAkJYnJlYWs7CiAJY2FzZSBQTTg2MDdfSURfTERPMTA6Ci0JCXN3aXRjaCAoY2hpcF9pZCkgewotCQljYXNlIFBNODYwN19DSElQX0EwOgotCQljYXNlIFBNODYwN19DSElQX0ExOgotCQkJcmV0ID0gKGluZGV4IDwgMykgPyAoaW5kZXggKiA1MDAwMCArIDE4MDAwMDApIDoKLQkJCQkoKGluZGV4IDwgOCkgPyAoaW5kZXggKiA1MDAwMCArIDI1NTAwMDApIDoKLQkJCQkxMjAwMDAwKTsKLQkJCWJyZWFrOwotCQljYXNlIFBNODYwN19DSElQX0IwOgotCQkJcmV0ID0gKGluZGV4IDwgMykgPyAoaW5kZXggKiA1MDAwMCArIDE4MDAwMDApIDoKLQkJCQkoKGluZGV4IDwgNykgPyAoaW5kZXggKiA1MDAwMCArIDI1NTAwMDApIDoKLQkJCQkoKGluZGV4ID09IDcpID8gMzMwMDAwMCA6IDEyMDAwMDApKTsKLQkJCWJyZWFrOwotCQl9CisJCXJldCA9IChpbmRleCA8IDMpID8gKGluZGV4ICogNTAwMDAgKyAxODAwMDAwKSA6CisJCQkoKGluZGV4IDwgNykgPyAoaW5kZXggKiA1MDAwMCArIDI1NTAwMDApIDoKKwkJCSgoaW5kZXggPT0gNykgPyAzMzAwMDAwIDogMTIwMDAwMCkpOwogCQlicmVhazsKIAljYXNlIFBNODYwN19JRF9MRE8xNDoKLQkJc3dpdGNoIChjaGlwX2lkKSB7Ci0JCWNhc2UgUE04NjA3X0NISVBfQTA6Ci0JCWNhc2UgUE04NjA3X0NISVBfQTE6Ci0JCQlyZXQgPSAoaW5kZXggPCAzKSA/IChpbmRleCAqIDUwMDAwICsgMTgwMDAwMCkgOgotCQkJCSgoaW5kZXggPCA4KSA/IChpbmRleCAqIDUwMDAwICsgMjU1MDAwMCkgOgotCQkJCSAtRUlOVkFMKTsKLQkJCWJyZWFrOwotCQljYXNlIFBNODYwN19DSElQX0IwOgotCQkJcmV0ID0gKGluZGV4IDwgMikgPyAoaW5kZXggKiA1MDAwMCArIDE4MDAwMDApIDoKLQkJCQkoKGluZGV4IDwgNykgPyAoaW5kZXggKiA1MDAwMCArIDI2MDAwMDApIDoKLQkJCQkzMzAwMDAwKTsKLQkJCWJyZWFrOwotCQl9CisJCXJldCA9IChpbmRleCA8IDIpID8gKGluZGV4ICogNTAwMDAgKyAxODAwMDAwKSA6CisJCQkoKGluZGV4IDwgNykgPyAoaW5kZXggKiA1MDAwMCArIDI2MDAwMDApIDoKKwkJCTMzMDAwMDApOwogCQlicmVhazsKIAl9CiAJcmV0dXJuIHJldDsKQEAgLTE2OSw3ICsxMjAsNiBAQAogc3RhdGljIGludCBjaG9vc2Vfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IG1pbl91ViwgaW50IG1heF91VikKIHsKIAlzdHJ1Y3QgcG04NjA3X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKLQl1aW50OF90IGNoaXBfaWQgPSBpbmZvLT5jaGlwLT5jaGlwX2lkOwogCWludCB2YWwgPSAtRU5PRU5UOwogCWludCByZXQ7CiAKQEAgLTI1NCwxNjEgKzIwNCw3NyBAQAogCWNhc2UgUE04NjA3X0lEX0xETzI6CiAJY2FzZSBQTTg2MDdfSURfTERPMzoKIAljYXNlIFBNODYwN19JRF9MRE85OgotCQlzd2l0Y2ggKGNoaXBfaWQpIHsKLQkJY2FzZSBQTTg2MDdfQ0hJUF9BMDoKLQkJY2FzZSBQTTg2MDdfQ0hJUF9BMToKLQkJCWlmIChtaW5fdVYgPCAyNzAwMDAwKQkvKiAxODAwbVYgfiAxOTAwbVYgLyA1MG1WICovCi0JCQkJaWYgKG1pbl91ViA8PSAxODAwMDAwKQotCQkJCQl2YWwgPSAwOwotCQkJCWVsc2UgaWYgKG1pbl91ViA8PSAxOTAwMDAwKQotCQkJCQl2YWwgPSAobWluX3VWIC0gMTc1MDAwMSkgLyA1MDAwMDsKLQkJCQllbHNlCi0JCQkJCXZhbCA9IDM7CS8qIDI3MDBtViAqLwotCQkJZWxzZSB7CQkJLyogMjcwMG1WIH4gMjkwMG1WIC8gNTBtViAqLwotCQkJCWlmIChtaW5fdVYgPD0gMjkwMDAwMCkgewotCQkJCQl2YWwgPSAobWluX3VWIC0gMjY1MDAwMSkgLyA1MDAwMDsKLQkJCQkJdmFsICs9IDM7Ci0JCQkJfSBlbHNlCi0JCQkJCXZhbCA9IC1FSU5WQUw7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBQTTg2MDdfQ0hJUF9CMDoKLQkJCWlmIChtaW5fdVYgPCAyNzAwMDAwKSB7CS8qIDE4MDBtViB+IDE5MDBtViAvIDUwbVYgKi8KLQkJCQlpZiAobWluX3VWIDw9IDE4MDAwMDApCi0JCQkJCXZhbCA9IDA7Ci0JCQkJZWxzZSBpZiAobWluX3VWIDw9IDE5MDAwMDApCi0JCQkJCXZhbCA9IChtaW5fdVYgLSAxNzUwMDAxKSAvIDUwMDAwOwotCQkJCWVsc2UKLQkJCQkJdmFsID0gMzsJLyogMjcwMG1WICovCi0JCQl9IGVsc2UgewkJIC8qIDI3MDBtViB+IDI4NTBtViAvIDUwbVYgKi8KLQkJCQlpZiAobWluX3VWIDw9IDI4NTAwMDApIHsKLQkJCQkJdmFsID0gKG1pbl91ViAtIDI2NTAwMDEpIC8gNTAwMDA7Ci0JCQkJCXZhbCArPSAzOwotCQkJCX0gZWxzZSBpZiAobWluX3VWIDw9IDMzMDAwMDApCi0JCQkJCXZhbCA9IDc7Ci0JCQkJZWxzZQotCQkJCQl2YWwgPSAtRUlOVkFMOwotCQkJfQotCQkJYnJlYWs7CisJCWlmIChtaW5fdVYgPCAyNzAwMDAwKSB7CS8qIDE4MDBtViB+IDE5MDBtViAvIDUwbVYgKi8KKwkJCWlmIChtaW5fdVYgPD0gMTgwMDAwMCkKKwkJCQl2YWwgPSAwOworCQkJZWxzZSBpZiAobWluX3VWIDw9IDE5MDAwMDApCisJCQkJdmFsID0gKG1pbl91ViAtIDE3NTAwMDEpIC8gNTAwMDA7CisJCQllbHNlCisJCQkJdmFsID0gMzsJLyogMjcwMG1WICovCisJCX0gZWxzZSB7CQkgLyogMjcwMG1WIH4gMjg1MG1WIC8gNTBtViAqLworCQkJaWYgKG1pbl91ViA8PSAyODUwMDAwKSB7CisJCQkJdmFsID0gKG1pbl91ViAtIDI2NTAwMDEpIC8gNTAwMDA7CisJCQkJdmFsICs9IDM7CisJCQl9IGVsc2UgaWYgKG1pbl91ViA8PSAzMzAwMDAwKQorCQkJCXZhbCA9IDc7CisJCQllbHNlCisJCQkJdmFsID0gLUVJTlZBTDsKIAkJfQogCQlicmVhazsKIAljYXNlIFBNODYwN19JRF9MRE80OgotCQlzd2l0Y2ggKGNoaXBfaWQpIHsKLQkJY2FzZSBQTTg2MDdfQ0hJUF9BMDoKLQkJY2FzZSBQTTg2MDdfQ0hJUF9BMToKLQkJCWlmIChtaW5fdVYgPCAyNzAwMDAwKQkvKiAxODAwbVYgfiAxOTAwbVYgLyA1MG1WICovCi0JCQkJaWYgKG1pbl91ViA8PSAxODAwMDAwKQotCQkJCQl2YWwgPSAwOwotCQkJCWVsc2UgaWYgKG1pbl91ViA8PSAxOTAwMDAwKQotCQkJCQl2YWwgPSAobWluX3VWIC0gMTc1MDAwMSkgLyA1MDAwMDsKLQkJCQllbHNlCi0JCQkJCXZhbCA9IDM7CS8qIDI3MDBtViAqLwotCQkJZWxzZSB7CQkJLyogMjcwMG1WIH4gMjkwMG1WIC8gNTBtViAqLwotCQkJCWlmIChtaW5fdVYgPD0gMjkwMDAwMCkgewotCQkJCQl2YWwgPSAobWluX3VWIC0gMjY1MDAwMSkgLyA1MDAwMDsKLQkJCQkJdmFsICs9IDM7Ci0JCQkJfSBlbHNlCi0JCQkJCXZhbCA9IC1FSU5WQUw7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBQTTg2MDdfQ0hJUF9CMDoKLQkJCWlmIChtaW5fdVYgPCAyNzAwMDAwKSB7CS8qIDE4MDBtViB+IDE5MDBtViAvIDUwbVYgKi8KLQkJCQlpZiAobWluX3VWIDw9IDE4MDAwMDApCi0JCQkJCXZhbCA9IDA7Ci0JCQkJZWxzZSBpZiAobWluX3VWIDw9IDE5MDAwMDApCi0JCQkJCXZhbCA9IChtaW5fdVYgLSAxNzUwMDAxKSAvIDUwMDAwOwotCQkJCWVsc2UKLQkJCQkJdmFsID0gMzsJLyogMjcwMG1WICovCi0JCQl9IGVsc2UgewkJIC8qIDI3MDBtViB+IDI4MDBtViAvIDUwbVYgKi8KLQkJCQlpZiAobWluX3VWIDw9IDI4NTAwMDApIHsKLQkJCQkJdmFsID0gKG1pbl91ViAtIDI2NTAwMDEpIC8gNTAwMDA7Ci0JCQkJCXZhbCArPSAzOwotCQkJCX0gZWxzZSBpZiAobWluX3VWIDw9IDI5MDAwMDApCi0JCQkJCXZhbCA9IDY7Ci0JCQkJZWxzZSBpZiAobWluX3VWIDw9IDMzMDAwMDApCi0JCQkJCXZhbCA9IDc7Ci0JCQkJZWxzZQotCQkJCQl2YWwgPSAtRUlOVkFMOwotCQkJfQotCQkJYnJlYWs7CisJCWlmIChtaW5fdVYgPCAyNzAwMDAwKSB7CS8qIDE4MDBtViB+IDE5MDBtViAvIDUwbVYgKi8KKwkJCWlmIChtaW5fdVYgPD0gMTgwMDAwMCkKKwkJCQl2YWwgPSAwOworCQkJZWxzZSBpZiAobWluX3VWIDw9IDE5MDAwMDApCisJCQkJdmFsID0gKG1pbl91ViAtIDE3NTAwMDEpIC8gNTAwMDA7CisJCQllbHNlCisJCQkJdmFsID0gMzsJLyogMjcwMG1WICovCisJCX0gZWxzZSB7CQkgLyogMjcwMG1WIH4gMjgwMG1WIC8gNTBtViAqLworCQkJaWYgKG1pbl91ViA8PSAyODUwMDAwKSB7CisJCQkJdmFsID0gKG1pbl91ViAtIDI2NTAwMDEpIC8gNTAwMDA7CisJCQkJdmFsICs9IDM7CisJCQl9IGVsc2UgaWYgKG1pbl91ViA8PSAyOTAwMDAwKQorCQkJCXZhbCA9IDY7CisJCQllbHNlIGlmIChtaW5fdVYgPD0gMzMwMDAwMCkKKwkJCQl2YWwgPSA3OworCQkJZWxzZQorCQkJCXZhbCA9IC1FSU5WQUw7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBQTTg2MDdfSURfTERPNjoKLQkJc3dpdGNoIChjaGlwX2lkKSB7Ci0JCWNhc2UgUE04NjA3X0NISVBfQTA6Ci0JCWNhc2UgUE04NjA3X0NISVBfQTE6Ci0JCQlpZiAobWluX3VWIDwgMjYwMDAwMCkgewkvKiAxODAwbVYgfiAxOTAwbVYgLyA1MG1WICovCi0JCQkJaWYgKG1pbl91ViA8PSAxODAwMDAwKQotCQkJCQl2YWwgPSAwOwotCQkJCWVsc2UgaWYgKG1pbl91ViA8PSAxOTAwMDAwKQotCQkJCQl2YWwgPSAobWluX3VWIC0gMTc1MDAwMSkgLyA1MDAwMDsKLQkJCQllbHNlCi0JCQkJCXZhbCA9IDM7CS8qIDI2MDBtViAqLwotCQkJfSBlbHNlIHsJCS8qIDI2MDBtViB+IDI4MDBtViAvIDUwbVYgKi8KLQkJCQlpZiAobWluX3VWIDw9IDI4MDAwMDApIHsKLQkJCQkJdmFsID0gKG1pbl91ViAtIDI1NTAwMDEpIC8gNTAwMDA7Ci0JCQkJCXZhbCArPSAzOwotCQkJCX0gZWxzZQotCQkJCQl2YWwgPSAtRUlOVkFMOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgUE04NjA3X0NISVBfQjA6Ci0JCQlpZiAobWluX3VWIDwgMjYwMDAwMCkgewkvKiAxODAwbVYgfiAxODUwbVYgLyA1MG1WICovCi0JCQkJaWYgKG1pbl91ViA8PSAxODAwMDAwKQotCQkJCQl2YWwgPSAwOwotCQkJCWVsc2UgaWYgKG1pbl91ViA8PSAxODUwMDAwKQotCQkJCQl2YWwgPSAobWluX3VWIC0gMTc1MDAwMSkgLyA1MDAwMDsKLQkJCQllbHNlCi0JCQkJCXZhbCA9IDI7CS8qIDI2MDBtViAqLwotCQkJfSBlbHNlIHsJCS8qIDI2MDBtViB+IDI4MDBtViAvIDUwbVYgKi8KLQkJCQlpZiAobWluX3VWIDw9IDI4MDAwMDApIHsKLQkJCQkJdmFsID0gKG1pbl91ViAtIDI1NTAwMDEpIC8gNTAwMDA7Ci0JCQkJCXZhbCArPSAyOwotCQkJCX0gZWxzZSBpZiAobWluX3VWIDw9IDMzMDAwMDApCi0JCQkJCXZhbCA9IDc7Ci0JCQkJZWxzZQotCQkJCQl2YWwgPSAtRUlOVkFMOwotCQkJfQotCQkJYnJlYWs7CisJCWlmIChtaW5fdVYgPCAyNjAwMDAwKSB7CS8qIDE4MDBtViB+IDE4NTBtViAvIDUwbVYgKi8KKwkJCWlmIChtaW5fdVYgPD0gMTgwMDAwMCkKKwkJCQl2YWwgPSAwOworCQkJZWxzZSBpZiAobWluX3VWIDw9IDE4NTAwMDApCisJCQkJdmFsID0gKG1pbl91ViAtIDE3NTAwMDEpIC8gNTAwMDA7CisJCQllbHNlCisJCQkJdmFsID0gMjsJLyogMjYwMG1WICovCisJCX0gZWxzZSB7CQkvKiAyNjAwbVYgfiAyODAwbVYgLyA1MG1WICovCisJCQlpZiAobWluX3VWIDw9IDI4MDAwMDApIHsKKwkJCQl2YWwgPSAobWluX3VWIC0gMjU1MDAwMSkgLyA1MDAwMDsKKwkJCQl2YWwgKz0gMjsKKwkJCX0gZWxzZSBpZiAobWluX3VWIDw9IDMzMDAwMDApCisJCQkJdmFsID0gNzsKKwkJCWVsc2UKKwkJCQl2YWwgPSAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUE04NjA3X0lEX0xETzE0OgotCQlzd2l0Y2ggKGNoaXBfaWQpIHsKLQkJY2FzZSBQTTg2MDdfQ0hJUF9BMDoKLQkJY2FzZSBQTTg2MDdfQ0hJUF9BMToKLQkJCWlmIChtaW5fdVYgPCAyNzAwMDAwKSB7CS8qIDE4MDBtViB+IDE5MDBtViAvIDUwbVYgKi8KLQkJCQlpZiAobWluX3VWIDw9IDE4MDAwMDApCi0JCQkJCXZhbCA9IDA7Ci0JCQkJZWxzZSBpZiAobWluX3VWIDw9IDE5MDAwMDApCi0JCQkJCXZhbCA9IChtaW5fdVYgLSAxNzUwMDAxKSAvIDUwMDAwOwotCQkJCWVsc2UKLQkJCQkJdmFsID0gMzsJLyogMjcwMG1WICovCi0JCQl9IGVsc2UgewkJIC8qIDI3MDBtViB+IDI5MDBtViAvIDUwbVYgKi8KLQkJCQlpZiAobWluX3VWIDw9IDI5MDAwMDApIHsKLQkJCQkJdmFsID0gKG1pbl91ViAtIDI2NTAwMDEpIC8gNTAwMDA7Ci0JCQkJCXZhbCArPSAzOwotCQkJCX0gZWxzZQotCQkJCQl2YWwgPSAtRUlOVkFMOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgUE04NjA3X0NISVBfQjA6Ci0JCQlpZiAobWluX3VWIDwgMjcwMDAwMCkgewkvKiAxODAwbVYgfiAxODUwbVYgLyA1MG1WICovCi0JCQkJaWYgKG1pbl91ViA8PSAxODAwMDAwKQotCQkJCQl2YWwgPSAwOwotCQkJCWVsc2UgaWYgKG1pbl91ViA8PSAxODUwMDAwKQotCQkJCQl2YWwgPSAobWluX3VWIC0gMTc1MDAwMSkgLyA1MDAwMDsKLQkJCQllbHNlCi0JCQkJCXZhbCA9IDI7CS8qIDI3MDBtViAqLwotCQkJfSBlbHNlIHsJCSAvKiAyNzAwbVYgfiAyOTAwbVYgLyA1MG1WICovCi0JCQkJaWYgKG1pbl91ViA8PSAyOTAwMDAwKSB7Ci0JCQkJCXZhbCA9IChtaW5fdVYgLSAyNjUwMDAxKSAvIDUwMDAwOwotCQkJCQl2YWwgKz0gMjsKLQkJCQl9IGVsc2UgaWYgKG1pbl91ViA8PSAzMzAwMDAwKQotCQkJCQl2YWwgPSA3OwotCQkJCWVsc2UKLQkJCQkJdmFsID0gLUVJTlZBTDsKLQkJCX0KLQkJCWJyZWFrOworCQlpZiAobWluX3VWIDwgMjcwMDAwMCkgewkvKiAxODAwbVYgfiAxODUwbVYgLyA1MG1WICovCisJCQlpZiAobWluX3VWIDw9IDE4MDAwMDApCisJCQkJdmFsID0gMDsKKwkJCWVsc2UgaWYgKG1pbl91ViA8PSAxODUwMDAwKQorCQkJCXZhbCA9IChtaW5fdVYgLSAxNzUwMDAxKSAvIDUwMDAwOworCQkJZWxzZQorCQkJCXZhbCA9IDI7CS8qIDI3MDBtViAqLworCQl9IGVsc2UgewkJIC8qIDI3MDBtViB+IDI5MDBtViAvIDUwbVYgKi8KKwkJCWlmIChtaW5fdVYgPD0gMjkwMDAwMCkgeworCQkJCXZhbCA9IChtaW5fdVYgLSAyNjUwMDAxKSAvIDUwMDAwOworCQkJCXZhbCArPSAyOworCQkJfSBlbHNlIGlmIChtaW5fdVYgPD0gMzMwMDAwMCkKKwkJCQl2YWwgPSA3OworCQkJZWxzZQorCQkJCXZhbCA9IC1FSU5WQUw7CiAJCX0KIAkJYnJlYWs7CiAJfQpAQCAtNDI4LDcgKzI5NCw2IEBACiAJCQkgICAgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQogewogCXN0cnVjdCBwbTg2MDdfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwotCXN0cnVjdCBwbTg2MDdfY2hpcCAqY2hpcCA9IGluZm8tPmNoaXA7CiAJdWludDhfdCB2YWwsIG1hc2s7CiAJaW50IHJldDsKIApAQCAtNDQzLDEzICszMDgsMTMgQEAKIAl2YWwgPSAodWludDhfdCkocmV0IDw8IGluZm8tPnZvbF9zaGlmdCk7CiAJbWFzayA9ICgoMSA8PCBpbmZvLT52b2xfbmJpdHMpIC0gMSkgIDw8IGluZm8tPnZvbF9zaGlmdDsKIAotCXJldCA9IHBtODYwN19zZXRfYml0cyhjaGlwLCBpbmZvLT52b2xfcmVnLCBtYXNrLCB2YWwpOworCXJldCA9IHBtODYweF9zZXRfYml0cyhpbmZvLT5pMmMsIGluZm8tPnZvbF9yZWcsIG1hc2ssIHZhbCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAlzd2l0Y2ggKGluZm8tPmRlc2MuaWQpIHsKIAljYXNlIFBNODYwN19JRF9CVUNLMToKIAljYXNlIFBNODYwN19JRF9CVUNLMzoKLQkJcmV0ID0gcG04NjA3X3NldF9iaXRzKGNoaXAsIGluZm8tPnVwZGF0ZV9yZWcsCisJCXJldCA9IHBtODYweF9zZXRfYml0cyhpbmZvLT5pMmMsIGluZm8tPnVwZGF0ZV9yZWcsCiAJCQkJICAgICAgMSA8PCBpbmZvLT51cGRhdGVfYml0LAogCQkJCSAgICAgIDEgPDwgaW5mby0+dXBkYXRlX2JpdCk7CiAJCWJyZWFrOwpAQCAtNDYwLDExICszMjUsMTAgQEAKIHN0YXRpYyBpbnQgcG04NjA3X2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewogCXN0cnVjdCBwbTg2MDdfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwotCXN0cnVjdCBwbTg2MDdfY2hpcCAqY2hpcCA9IGluZm8tPmNoaXA7CiAJdWludDhfdCB2YWwsIG1hc2s7CiAJaW50IHJldDsKIAotCXJldCA9IHBtODYwN19yZWdfcmVhZChjaGlwLCBpbmZvLT52b2xfcmVnKTsKKwlyZXQgPSBwbTg2MHhfcmVnX3JlYWQoaW5mby0+aTJjLCBpbmZvLT52b2xfcmVnKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNDc3LDkgKzM0MSw4IEBACiBzdGF0aWMgaW50IHBtODYwN19lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCiB7CiAJc3RydWN0IHBtODYwN19yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7Ci0Jc3RydWN0IHBtODYwN19jaGlwICpjaGlwID0gaW5mby0+Y2hpcDsKIAotCXJldHVybiBwbTg2MDdfc2V0X2JpdHMoY2hpcCwgaW5mby0+ZW5hYmxlX3JlZywKKwlyZXR1cm4gcG04NjB4X3NldF9iaXRzKGluZm8tPmkyYywgaW5mby0+ZW5hYmxlX3JlZywKIAkJCSAgICAgICAxIDw8IGluZm8tPmVuYWJsZV9iaXQsCiAJCQkgICAgICAgMSA8PCBpbmZvLT5lbmFibGVfYml0KTsKIH0KQEAgLTQ4NywxOSArMzUwLDE3IEBACiBzdGF0aWMgaW50IHBtODYwN19kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQogewogCXN0cnVjdCBwbTg2MDdfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOwotCXN0cnVjdCBwbTg2MDdfY2hpcCAqY2hpcCA9IGluZm8tPmNoaXA7CiAKLQlyZXR1cm4gcG04NjA3X3NldF9iaXRzKGNoaXAsIGluZm8tPmVuYWJsZV9yZWcsCisJcmV0dXJuIHBtODYweF9zZXRfYml0cyhpbmZvLT5pMmMsIGluZm8tPmVuYWJsZV9yZWcsCiAJCQkgICAgICAgMSA8PCBpbmZvLT5lbmFibGVfYml0LCAwKTsKIH0KIAogc3RhdGljIGludCBwbTg2MDdfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKIAlzdHJ1Y3QgcG04NjA3X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKLQlzdHJ1Y3QgcG04NjA3X2NoaXAgKmNoaXAgPSBpbmZvLT5jaGlwOwogCWludCByZXQ7CiAKLQlyZXQgPSBwbTg2MDdfcmVnX3JlYWQoY2hpcCwgaW5mby0+ZW5hYmxlX3JlZyk7CisJcmV0ID0gcG04NjB4X3JlZ19yZWFkKGluZm8tPmkyYywgaW5mby0+ZW5hYmxlX3JlZyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKQEAgLTU4OSw4ICs0NTAsOCBAQAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBwbTg2MDdfcmVndWxhdG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHBtODYwN19jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOwotCXN0cnVjdCBwbTg2MDdfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjaGlwLT5kZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHBtODYweF9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCBwbTg2MHhfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjaGlwLT5kZXYtPnBsYXRmb3JtX2RhdGE7CiAJc3RydWN0IHBtODYwN19yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IE5VTEw7CiAKIAlpbmZvID0gZmluZF9yZWd1bGF0b3JfaW5mbyhwZGV2LT5pZCk7CkBAIC01OTksNiArNDYwLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaW5mby0+aTJjID0gKGNoaXAtPmlkID09IENISVBfUE04NjA3KSA/IGNoaXAtPmNsaWVudCA6IGNoaXAtPmNvbXBhbmlvbjsKIAlpbmZvLT5jaGlwID0gY2hpcDsKIAogCWluZm8tPnJlZ3VsYXRvciA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmaW5mby0+ZGVzYywgJnBkZXYtPmRldiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcgYi9kcml2ZXJzL3JlZ3VsYXRvci9LY29uZmlnCmluZGV4IDI2MmY2MmUuLjA0ZjJlMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL0tjb25maWcKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvS2NvbmZpZwpAQCAtMjcsNiArMjcsMTcgQEAKIAloZWxwCiAJICBTYXkgeWVzIGhlcmUgdG8gZW5hYmxlIGRlYnVnZ2luZyBzdXBwb3J0LgogCitjb25maWcgUkVHVUxBVE9SX0RVTU1ZCisJYm9vbCAiUHJvdmlkZSBhIGR1bW15IHJlZ3VsYXRvciBpZiByZWd1bGF0b3IgbG9va3VwcyBmYWlsIgorCWhlbHAKKwkgIElmIHRoaXMgb3B0aW9uIGlzIGVuYWJsZWQgdGhlbiB3aGVuIGEgcmVndWxhdG9yIGxvb2t1cCBmYWlscworCSAgYW5kIHRoZSBib2FyZCBoYXMgbm90IHNwZWNpZmllZCB0aGF0IGl0IGhhcyBwcm92aWRlZCBmdWxsCisJICBjb25zdHJhaW50cyB0aGVuIHRoZSByZWd1bGF0b3IgY29yZSB3aWxsIHByb3ZpZGUgYW4gYWx3YXlzCisJICBlbmFibGVkIGR1bW15IHJlZ3VsYXRvciB3aWxsIGJlIHByb3ZpZGVkLCBhbGxvd2luZyBjb25zdW1lcgorCSAgZHJpdmVycyB0byBjb250aW51ZS4KKworCSAgQSB3YXJuaW5nIHdpbGwgYmUgZ2VuZXJhdGVkIHdoZW4gdGhpcyBzdWJzdGl0dXRpb24gaXMgZG9uZS4KKwogY29uZmlnIFJFR1VMQVRPUl9GSVhFRF9WT0xUQUdFCiAJdHJpc3RhdGUgIkZpeGVkIHZvbHRhZ2UgcmVndWxhdG9yIHN1cHBvcnQiCiAJaGVscApAQCAtNjksNiArODAsMTMgQEAKIAkgIHJlZ3VsYXRvciB2aWEgSTJDIGJ1cy4gVGhlIHByb3ZpZGVkIHJlZ3VsYXRvciBpcyBzdWl0YWJsZQogCSAgZm9yIFBYQTI3eCBjaGlwcyB0byBjb250cm9sIFZDQ19DT1JFIGFuZCBWQ0NfVVNJTSB2b2x0YWdlcy4KIAorY29uZmlnIFJFR1VMQVRPUl9NQVg4NjQ5CisJdHJpc3RhdGUgIk1heGltIDg2NDkgdm9sdGFnZSByZWd1bGF0b3IiCisJZGVwZW5kcyBvbiBJMkMKKwloZWxwCisJICBUaGlzIGRyaXZlciBjb250cm9scyBhIE1heGltIDg2NDkgdm9sdGFnZSBvdXRwdXQgcmVndWxhdG9yIHZpYQorCSAgSTJDIGJ1cy4KKwogY29uZmlnIFJFR1VMQVRPUl9NQVg4NjYwCiAJdHJpc3RhdGUgIk1heGltIDg2NjAvODY2MSB2b2x0YWdlIHJlZ3VsYXRvciIKIAlkZXBlbmRzIG9uIEkyQwpAQCAtNzYsNiArOTQsMTIgQEAKIAkgIFRoaXMgZHJpdmVyIGNvbnRyb2xzIGEgTWF4aW0gODY2MC84NjYxIHZvbHRhZ2Ugb3V0cHV0CiAJICByZWd1bGF0b3IgdmlhIEkyQyBidXMuCiAKK2NvbmZpZyBSRUdVTEFUT1JfTUFYODkyNQorCXRyaXN0YXRlICJNYXhpbSBNQVg4OTI1IFBvd2VyIE1hbmFnZW1lbnQgSUMiCisJZGVwZW5kcyBvbiBNRkRfTUFYODkyNQorCWhlbHAKKwkgIFNheSB5IGhlcmUgdG8gc3VwcG9ydCB0aGUgdm9sdGFnZSByZWd1bGFsdG9yIG9mIE1heGltIE1BWDg5MjUgUE1JQy4KKwogY29uZmlnIFJFR1VMQVRPUl9UV0w0MDMwCiAJYm9vbCAiVEkgVFdMNDAzMC9UV0w1MDMwL1RXTDYwMzAvVFBTNjk1eDAgUE1JQyIKIAlkZXBlbmRzIG9uIFRXTDQwMzBfQ09SRQpAQCAtOTEsMTkgKzExNSwyNiBAQAogCSAgb2YgUE1JQyBkZXZpY2VzLgogCiBjb25maWcgUkVHVUxBVE9SX1dNODM1MAotCXRyaXN0YXRlICJXb2xmc29uIE1pY3JvZWxlY3Ryb25jaXMgV004MzUwIEF1ZGlvUGx1cyBQTUlDIgorCXRyaXN0YXRlICJXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgV004MzUwIEF1ZGlvUGx1cyBQTUlDIgogCWRlcGVuZHMgb24gTUZEX1dNODM1MAogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSB2b2x0YWdlIGFuZCBjdXJyZW50IHJlZ3VsYXRvcnMKICAgICAgICAgICBvZiB0aGUgV004MzUwIEF1ZGlvUGx1cyBQTUlDLgogCiBjb25maWcgUkVHVUxBVE9SX1dNODQwMAotCXRyaXN0YXRlICJXb2xmc29uIE1pY3JvZWxlY3Ryb25jaXMgV004NDAwIEF1ZGlvUGx1cyBQTUlDIgorCXRyaXN0YXRlICJXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgV004NDAwIEF1ZGlvUGx1cyBQTUlDIgogCWRlcGVuZHMgb24gTUZEX1dNODQwMAogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSB2b2x0YWdlIHJlZ3VsYXRvcnMgb2YgdGhlCiAJICBXTTg0MDAgQXVkaW9QbHVzIFBNSUMuCiAKK2NvbmZpZyBSRUdVTEFUT1JfV004OTk0CisJdHJpc3RhdGUgIldvbGZzb24gTWljcm9lbGVjdHJvbmljcyBXTTg5OTQgQ09ERUMiCisJZGVwZW5kcyBvbiBNRkRfV004OTk0CisJaGVscAorCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIHZvbHRhZ2UgcmVndWxhdG9ycyBvbiB0aGUKKwkgIFdNODk5NCBDT0RFQy4KKwogY29uZmlnIFJFR1VMQVRPUl9EQTkwM1gKIAl0cmlzdGF0ZSAiU3VwcG9ydCByZWd1bGF0b3JzIG9uIERpYWxvZyBTZW1pY29uZHVjdG9yIERBOTAzMC9EQTkwMzQgUE1JQyIKIAlkZXBlbmRzIG9uIFBNSUNfREE5MDNYCkBAIC0xNjYsNyArMTk3LDcgQEAKIAogY29uZmlnIFJFR1VMQVRPUl84OFBNODYwNwogCWJvb2wgIk1hcnZlbGwgODhQTTg2MDcgUG93ZXIgcmVndWxhdG9ycyIKLQlkZXBlbmRzIG9uIE1GRF84OFBNODYwNz15CisJZGVwZW5kcyBvbiBNRkRfODhQTTg2MFg9eQogCWhlbHAKIAkgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIDg4UE04NjA3IHZvbHRhZ2UgcmVndWxhdG9yIGNoaXBzLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9NYWtlZmlsZSBiL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCmluZGV4IGIzYzgwNmMuLjRlN2ZlZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL01ha2VmaWxlCkBAIC05LDE1ICs5LDE5IEBACiBvYmotJChDT05GSUdfUkVHVUxBVE9SX1VTRVJTUEFDRV9DT05TVU1FUikgKz0gdXNlcnNwYWNlLWNvbnN1bWVyLm8KIAogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9CUTI0MDIyKSArPSBicTI0MDIyLm8KK29iai0kKENPTkZJR19SRUdVTEFUT1JfRFVNTVkpICs9IGR1bW15Lm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfTFAzOTcxKSArPSBscDM5NzEubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9NQVgxNTg2KSArPSBtYXgxNTg2Lm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfVFdMNDAzMCkgKz0gdHdsLXJlZ3VsYXRvci5vCitvYmotJChDT05GSUdfUkVHVUxBVE9SX01BWDg2NDkpCSs9IG1heDg2NDkubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9NQVg4NjYwKSArPSBtYXg4NjYwLm8KK29iai0kKENPTkZJR19SRUdVTEFUT1JfTUFYODkyNSkgKz0gbWF4ODkyNS1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9XTTgzMVgpICs9IHdtODMxeC1kY2RjLm8KIG9iai0kKENPTkZJR19SRUdVTEFUT1JfV004MzFYKSArPSB3bTgzMXgtaXNpbmsubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9XTTgzMVgpICs9IHdtODMxeC1sZG8ubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9XTTgzNTApICs9IHdtODM1MC1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9XTTg0MDApICs9IHdtODQwMC1yZWd1bGF0b3Iubworb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9XTTg5OTQpICs9IHdtODk5NC1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9EQTkwM1gpCSs9IGRhOTAzeC5vCiBvYmotJChDT05GSUdfUkVHVUxBVE9SX1BDRjUwNjMzKSArPSBwY2Y1MDYzMy1yZWd1bGF0b3Iubwogb2JqLSQoQ09ORklHX1JFR1VMQVRPUl9QQ0FQKSArPSBwY2FwLXJlZ3VsYXRvci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9hYjMxMDAuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2FiMzEwMC5jCmluZGV4IGIzNDlkYjQuLjdkZTk1MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2FiMzEwMC5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2FiMzEwMC5jCkBAIC01NjEsNyArNTYxLDcgQEAKICAqIGZvciBhbGwgdGhlIGRpZmZlcmVudCByZWd1bGF0b3JzLgogICovCiAKLXN0YXRpYyBpbnQgX19pbml0IGFiMzEwMF9yZWd1bGF0b3JzX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhYjMxMDBfcmVndWxhdG9yc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBhYjMxMDBfcGxhdGZvcm1fZGF0YSAqcGxmZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCBhYjMxMDAgKmFiMzEwMCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwpAQCAtNjQxLDcgKzY0MSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19leGl0IGFiMzEwMF9yZWd1bGF0b3JzX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmV4aXQgYWIzMTAwX3JlZ3VsYXRvcnNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IGk7CiAKQEAgLTY1OSw3ICs2NTksNyBAQAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAl9LAogCS5wcm9iZSA9IGFiMzEwMF9yZWd1bGF0b3JzX3Byb2JlLAotCS5yZW1vdmUgPSBfX2V4aXRfcChhYjMxMDBfcmVndWxhdG9yc19yZW1vdmUpLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChhYjMxMDBfcmVndWxhdG9yc19yZW1vdmUpLAogfTsKIAogc3RhdGljIF9faW5pdCBpbnQgYWIzMTAwX3JlZ3VsYXRvcnNfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvY29yZS5jCmluZGV4IGI2MGE0YzkuLmM3YmJlMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL2NvcmUuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9jb3JlLmMKQEAgLTE5LDEwICsxOSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9tYWNoaW5lLmg+CiAKKyNpbmNsdWRlICJkdW1teS5oIgorCiAjZGVmaW5lIFJFR1VMQVRPUl9WRVJTSU9OICIwLjUiCiAKIHN0YXRpYyBERUZJTkVfTVVURVgocmVndWxhdG9yX2xpc3RfbXV0ZXgpOwpAQCAtMTA4NCw2ICsxMDg3LDEzIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBpbnQgX3JlZ3VsYXRvcl9nZXRfZW5hYmxlX3RpbWUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJaWYgKCFyZGV2LT5kZXNjLT5vcHMtPmVuYWJsZV90aW1lKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gcmRldi0+ZGVzYy0+b3BzLT5lbmFibGVfdGltZShyZGV2KTsKK30KKwogLyogSW50ZXJuYWwgcmVndWxhdG9yIHJlcXVlc3QgZnVuY3Rpb24gKi8KIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yICpfcmVndWxhdG9yX2dldChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IGNoYXIgKmlkLAogCQkJCQlpbnQgZXhjbHVzaXZlKQpAQCAtMTExNSw2ICsxMTI1LDIyIEBACiAJCQlnb3RvIGZvdW5kOwogCQl9CiAJfQorCisjaWZkZWYgQ09ORklHX1JFR1VMQVRPUl9EVU1NWQorCWlmICghZGV2bmFtZSkKKwkJZGV2bmFtZSA9ICJkZXZpY2VsZXNzIjsKKworCS8qIElmIHRoZSBib2FyZCBkaWRuJ3QgZmxhZyB0aGF0IGl0IHdhcyBmdWxseSBjb25zdHJhaW5lZCB0aGVuCisJICogc3Vic3RpdHV0ZSBpbiBhIGR1bW15IHJlZ3VsYXRvciBzbyBjb25zdW1lcnMgY2FuIGNvbnRpbnVlLgorCSAqLworCWlmICghaGFzX2Z1bGxfY29uc3RyYWludHMpIHsKKwkJcHJfd2FybmluZygiJXMgc3VwcGx5ICVzIG5vdCBmb3VuZCwgdXNpbmcgZHVtbXkgcmVndWxhdG9yXG4iLAorCQkJICAgZGV2bmFtZSwgaWQpOworCQlyZGV2ID0gZHVtbXlfcmVndWxhdG9yX3JkZXY7CisJCWdvdG8gZm91bmQ7CisJfQorI2VuZGlmCisKIAltdXRleF91bmxvY2soJnJlZ3VsYXRvcl9saXN0X211dGV4KTsKIAlyZXR1cm4gcmVndWxhdG9yOwogCkBAIC0xMjUxLDcgKzEyNzcsNyBAQAogLyogbG9ja3MgaGVsZCBieSByZWd1bGF0b3JfZW5hYmxlKCkgKi8KIHN0YXRpYyBpbnQgX3JlZ3VsYXRvcl9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCiB7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBkZWxheTsKIAogCS8qIGRvIHdlIG5lZWQgdG8gZW5hYmxlIHRoZSBzdXBwbHkgcmVndWxhdG9yIGZpcnN0ICovCiAJaWYgKHJkZXYtPnN1cHBseSkgewpAQCAtMTI3NSwxMyArMTMwMSwzNCBAQAogCQkJaWYgKCFfcmVndWxhdG9yX2Nhbl9jaGFuZ2Vfc3RhdHVzKHJkZXYpKQogCQkJCXJldHVybiAtRVBFUk07CiAKLQkJCWlmIChyZGV2LT5kZXNjLT5vcHMtPmVuYWJsZSkgewotCQkJCXJldCA9IHJkZXYtPmRlc2MtPm9wcy0+ZW5hYmxlKHJkZXYpOwotCQkJCWlmIChyZXQgPCAwKQotCQkJCQlyZXR1cm4gcmV0OwotCQkJfSBlbHNlIHsKKwkJCWlmICghcmRldi0+ZGVzYy0+b3BzLT5lbmFibGUpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCS8qIFF1ZXJ5IGJlZm9yZSBlbmFibGluZyBpbiBjYXNlIGNvbmZpZ3VyYXRpb24KKwkJCSAqIGRlcGVuZGFudC4gICovCisJCQlyZXQgPSBfcmVndWxhdG9yX2dldF9lbmFibGVfdGltZShyZGV2KTsKKwkJCWlmIChyZXQgPj0gMCkgeworCQkJCWRlbGF5ID0gcmV0OworCQkJfSBlbHNlIHsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCSIlczogZW5hYmxlX3RpbWUoKSBmYWlsZWQgZm9yICVzOiAlZFxuIiwKKwkJCQkJX19mdW5jX18sIHJkZXZfZ2V0X25hbWUocmRldiksCisJCQkJCXJldCk7CisJCQkJZGVsYXkgPSAwOwogCQkJfQorCisJCQkvKiBBbGxvdyB0aGUgcmVndWxhdG9yIHRvIHJhbXA7IGl0IHdvdWxkIGJlIHVzZWZ1bAorCQkJICogdG8gZXh0ZW5kIHRoaXMgZm9yIGJ1bGsgb3BlcmF0aW9ucyBzbyB0aGF0IHRoZQorCQkJICogcmVndWxhdG9ycyBjYW4gcmFtcCB0b2dldGhlci4gICovCisJCQlyZXQgPSByZGV2LT5kZXNjLT5vcHMtPmVuYWJsZShyZGV2KTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXJldHVybiByZXQ7CisKKwkJCWlmIChkZWxheSA+PSAxMDAwKQorCQkJCW1kZWxheShkZWxheSAvIDEwMDApOworCQkJZWxzZSBpZiAoZGVsYXkpCisJCQkJdWRlbGF5KGRlbGF5KTsKKwogCQl9IGVsc2UgaWYgKHJldCA8IDApIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlzX2VuYWJsZWQoKSBmYWlsZWQgZm9yICVzOiAlZFxuIiwKIAkJCSAgICAgICBfX2Z1bmNfXywgcmRldl9nZXRfbmFtZShyZGV2KSwgcmV0KTsKQEAgLTEzNDEsNiArMTM4OCw5IEBACiAJCQkJICAgICAgIF9fZnVuY19fLCByZGV2X2dldF9uYW1lKHJkZXYpKTsKIAkJCQlyZXR1cm4gcmV0OwogCQkJfQorCisJCQlfbm90aWZpZXJfY2FsbF9jaGFpbihyZGV2LCBSRUdVTEFUT1JfRVZFTlRfRElTQUJMRSwKKwkJCQkJICAgICBOVUxMKTsKIAkJfQogCiAJCS8qIGRlY3JlYXNlIG91ciBzdXBwbGllcyByZWYgY291bnQgYW5kIGRpc2FibGUgaWYgcmVxdWlyZWQgKi8KQEAgLTEzOTksOCArMTQ0OSw4IEBACiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCS8qIG5vdGlmeSBvdGhlciBjb25zdW1lcnMgdGhhdCBwb3dlciBoYXMgYmVlbiBmb3JjZWQgb2ZmICovCi0JCV9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsIFJFR1VMQVRPUl9FVkVOVF9GT1JDRV9ESVNBQkxFLAotCQkJTlVMTCk7CisJCV9ub3RpZmllcl9jYWxsX2NoYWluKHJkZXYsIFJFR1VMQVRPUl9FVkVOVF9GT1JDRV9ESVNBQkxFIHwKKwkJCVJFR1VMQVRPUl9FVkVOVF9ESVNBQkxFLCBOVUxMKTsKIAl9CiAKIAkvKiBkZWNyZWFzZSBvdXIgc3VwcGxpZXMgcmVmIGNvdW50IGFuZCBkaXNhYmxlIGlmIHJlcXVpcmVkICovCkBAIC0xNDM0LDkgKzE0ODQsOSBAQAogCiBzdGF0aWMgaW50IF9yZWd1bGF0b3JfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKIHsKLQkvKiBzYW5pdHkgY2hlY2sgKi8KKwkvKiBJZiB3ZSBkb24ndCBrbm93IHRoZW4gYXNzdW1lIHRoYXQgdGhlIHJlZ3VsYXRvciBpcyBhbHdheXMgb24gKi8KIAlpZiAoIXJkZXYtPmRlc2MtPm9wcy0+aXNfZW5hYmxlZCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAxOwogCiAJcmV0dXJuIHJkZXYtPmRlc2MtPm9wcy0+aXNfZW5hYmxlZChyZGV2KTsKIH0KQEAgLTI0NTEsOCArMjUwMSwxNSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCByZWd1bGF0b3JfaW5pdCh2b2lkKQogeworCWludCByZXQ7CisKIAlwcmludGsoS0VSTl9JTkZPICJyZWd1bGF0b3I6IGNvcmUgdmVyc2lvbiAlc1xuIiwgUkVHVUxBVE9SX1ZFUlNJT04pOwotCXJldHVybiBjbGFzc19yZWdpc3RlcigmcmVndWxhdG9yX2NsYXNzKTsKKworCXJldCA9IGNsYXNzX3JlZ2lzdGVyKCZyZWd1bGF0b3JfY2xhc3MpOworCisJcmVndWxhdG9yX2R1bW15X2luaXQoKTsKKworCXJldHVybiByZXQ7CiB9CiAKIC8qIGluaXQgZWFybHkgdG8gYWxsb3cgb3VyIGNvbnN1bWVycyB0byBjb21wbGV0ZSBzeXN0ZW0gYm9vdGluZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvZHVtbXkuYyBiL2RyaXZlcnMvcmVndWxhdG9yL2R1bW15LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc0MTBiZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2R1bW15LmMKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIGR1bW15LmMKKyAqCisgKiBDb3B5cmlnaHQgMjAxMCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIHVzZWZ1bCBmb3Igc3lzdGVtcyB3aXRoIG1peGVkIGNvbnRyb2xsYWJsZSBhbmQKKyAqIG5vbi1jb250cm9sbGFibGUgcmVndWxhdG9ycywgYXMgd2VsbCBhcyBmb3IgYWxsb3dpbmcgdGVzdGluZyBvbgorICogc3lzdGVtcyB3aXRoIG5vIGNvbnRyb2xsYWJsZSByZWd1bGF0b3JzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKworI2luY2x1ZGUgImR1bW15LmgiCisKK3N0cnVjdCByZWd1bGF0b3JfZGV2ICpkdW1teV9yZWd1bGF0b3JfcmRldjsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhIGR1bW15X2luaXRkYXRhOworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgZHVtbXlfb3BzOworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGR1bW15X2Rlc2MgPSB7CisJLm5hbWUgPSAiZHVtbXkiLAorCS5pZCA9IC0xLAorCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm9wcyA9ICZkdW1teV9vcHMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZHVtbXlfcGRldjsKKwordm9pZCBfX2luaXQgcmVndWxhdG9yX2R1bW15X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJZHVtbXlfcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYygicmVnLWR1bW15IiwgLTEpOworCWlmICghZHVtbXlfcGRldikgeworCQlwcl9lcnIoIkZhaWxlZCB0byBhbGxvY2F0ZSBkdW1teSByZWd1bGF0b3IgZGV2aWNlXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXJldCA9IHBsYXRmb3JtX2RldmljZV9hZGQoZHVtbXlfcGRldik7CisJaWYgKHJldCAhPSAwKSB7CisJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIGR1bW15IHJlZ3VsYXRvciBkZXZpY2U6ICVkXG4iLCByZXQpOworCQlwbGF0Zm9ybV9kZXZpY2VfcHV0KGR1bW15X3BkZXYpOworCQlyZXR1cm47CisJfQorCisJZHVtbXlfcmVndWxhdG9yX3JkZXYgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJmR1bW15X2Rlc2MsIE5VTEwsCisJCQkJCQkgICZkdW1teV9pbml0ZGF0YSwgTlVMTCk7CisJaWYgKElTX0VSUihkdW1teV9yZWd1bGF0b3JfcmRldikpIHsKKwkJcmV0ID0gUFRSX0VSUihkdW1teV9yZWd1bGF0b3JfcmRldik7CisJCXByX2VycigiRmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvcjogJWRcbiIsIHJldCk7CisJCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKGR1bW15X3BkZXYpOworCQlyZXR1cm47CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvZHVtbXkuaCBiL2RyaXZlcnMvcmVndWxhdG9yL2R1bW15LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkyMWMwZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2R1bW15LmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIGR1bW15LmgKKyAqCisgKiBDb3B5cmlnaHQgMjAxMCBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICogTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGlzIHVzZWZ1bCBmb3Igc3lzdGVtcyB3aXRoIG1peGVkIGNvbnRyb2xsYWJsZSBhbmQKKyAqIG5vbi1jb250cm9sbGFibGUgcmVndWxhdG9ycywgYXMgd2VsbCBhcyBmb3IgYWxsb3dpbmcgdGVzdGluZyBvbgorICogc3lzdGVtcyB3aXRoIG5vIGNvbnRyb2xsYWJsZSByZWd1bGF0b3JzLgorICovCisKKyNpZm5kZWYgX0RVTU1ZX0gKKyNkZWZpbmUgX0RVTU1ZX0gKKworc3RydWN0IHJlZ3VsYXRvcl9kZXY7CisKK2V4dGVybiBzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZHVtbXlfcmVndWxhdG9yX3JkZXY7CisKKyNpZmRlZiBDT05GSUdfUkVHVUxBVE9SX0RVTU1ZCit2b2lkIF9faW5pdCByZWd1bGF0b3JfZHVtbXlfaW5pdCh2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgcmVndWxhdG9yX2R1bW15X2luaXQodm9pZCkgeyB9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jIGIvZHJpdmVycy9yZWd1bGF0b3IvZml4ZWQuYwppbmRleCBmOWY1MTZhLi5kMTFmNzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9maXhlZC5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL2ZpeGVkLmMKQEAgLTI0LDE0ICsyNCwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZml4ZWQuaD4KICNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAogc3RydWN0IGZpeGVkX3ZvbHRhZ2VfZGF0YSB7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXNjIGRlc2M7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldjsKIAlpbnQgbWljcm92b2x0czsKIAlpbnQgZ3BpbzsKLQl1bnNpZ25lZCBlbmFibGVfaGlnaDoxOwotCXVuc2lnbmVkIGlzX2VuYWJsZWQ6MTsKKwl1bnNpZ25lZCBzdGFydHVwX2RlbGF5OworCWJvb2wgZW5hYmxlX2hpZ2g7CisJYm9vbCBpc19lbmFibGVkOwogfTsKIAogc3RhdGljIGludCBmaXhlZF92b2x0YWdlX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKQEAgLTQ3LDcgKzQ5LDcgQEAKIAogCWlmIChncGlvX2lzX3ZhbGlkKGRhdGEtPmdwaW8pKSB7CiAJCWdwaW9fc2V0X3ZhbHVlX2NhbnNsZWVwKGRhdGEtPmdwaW8sIGRhdGEtPmVuYWJsZV9oaWdoKTsKLQkJZGF0YS0+aXNfZW5hYmxlZCA9IDE7CisJCWRhdGEtPmlzX2VuYWJsZWQgPSB0cnVlOwogCX0KIAogCXJldHVybiAwOwpAQCAtNTksMTIgKzYxLDE5IEBACiAKIAlpZiAoZ3Bpb19pc192YWxpZChkYXRhLT5ncGlvKSkgewogCQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChkYXRhLT5ncGlvLCAhZGF0YS0+ZW5hYmxlX2hpZ2gpOwotCQlkYXRhLT5pc19lbmFibGVkID0gMDsKKwkJZGF0YS0+aXNfZW5hYmxlZCA9IGZhbHNlOwogCX0KIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGZpeGVkX3ZvbHRhZ2VfZW5hYmxlX3RpbWUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9kYXRhICpkYXRhID0gcmRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJcmV0dXJuIGRhdGEtPnN0YXJ0dXBfZGVsYXk7Cit9CisKIHN0YXRpYyBpbnQgZml4ZWRfdm9sdGFnZV9nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGV2KQogewogCXN0cnVjdCBmaXhlZF92b2x0YWdlX2RhdGEgKmRhdGEgPSByZGV2X2dldF9kcnZkYXRhKGRldik7CkBAIC04NywxMSArOTYsMTIgQEAKIAkuaXNfZW5hYmxlZCA9IGZpeGVkX3ZvbHRhZ2VfaXNfZW5hYmxlZCwKIAkuZW5hYmxlID0gZml4ZWRfdm9sdGFnZV9lbmFibGUsCiAJLmRpc2FibGUgPSBmaXhlZF92b2x0YWdlX2Rpc2FibGUsCisJLmVuYWJsZV90aW1lID0gZml4ZWRfdm9sdGFnZV9lbmFibGVfdGltZSwKIAkuZ2V0X3ZvbHRhZ2UgPSBmaXhlZF92b2x0YWdlX2dldF92b2x0YWdlLAogCS5saXN0X3ZvbHRhZ2UgPSBmaXhlZF92b2x0YWdlX2xpc3Rfdm9sdGFnZSwKIH07CiAKLXN0YXRpYyBpbnQgcmVndWxhdG9yX2ZpeGVkX3ZvbHRhZ2VfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHJlZ19maXhlZF92b2x0YWdlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGZpeGVkX3ZvbHRhZ2VfY29uZmlnICpjb25maWcgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKIAlzdHJ1Y3QgZml4ZWRfdm9sdGFnZV9kYXRhICpkcnZkYXRhOwpAQCAtMTE3LDYgKzEyNyw3IEBACiAKIAlkcnZkYXRhLT5taWNyb3ZvbHRzID0gY29uZmlnLT5taWNyb3ZvbHRzOwogCWRydmRhdGEtPmdwaW8gPSBjb25maWctPmdwaW87CisJZHJ2ZGF0YS0+c3RhcnR1cF9kZWxheSA9IGNvbmZpZy0+c3RhcnR1cF9kZWxheTsKIAogCWlmIChncGlvX2lzX3ZhbGlkKGNvbmZpZy0+Z3BpbykpIHsKIAkJZHJ2ZGF0YS0+ZW5hYmxlX2hpZ2ggPSBjb25maWctPmVuYWJsZV9oaWdoOwpAQCAtMTYzLDcgKzE3NCw3IEBACiAJCS8qIFJlZ3VsYXRvciB3aXRob3V0IEdQSU8gY29udHJvbCBpcyBjb25zaWRlcmVkCiAJCSAqIGFsd2F5cyBlbmFibGVkCiAJCSAqLwotCQlkcnZkYXRhLT5pc19lbmFibGVkID0gMTsKKwkJZHJ2ZGF0YS0+aXNfZW5hYmxlZCA9IHRydWU7CiAJfQogCiAJZHJ2ZGF0YS0+ZGV2ID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZkcnZkYXRhLT5kZXNjLCAmcGRldi0+ZGV2LApAQCAtMTkxLDcgKzIwMiw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCByZWd1bGF0b3JfZml4ZWRfdm9sdGFnZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHJlZ19maXhlZF92b2x0YWdlX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBmaXhlZF92b2x0YWdlX2RhdGEgKmRydmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIApAQCAtMjA1LDEwICsyMTYsMTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcmVndWxhdG9yX2ZpeGVkX3ZvbHRhZ2VfZHJpdmVyID0gewotCS5wcm9iZQkJPSByZWd1bGF0b3JfZml4ZWRfdm9sdGFnZV9wcm9iZSwKLQkucmVtb3ZlCQk9IHJlZ3VsYXRvcl9maXhlZF92b2x0YWdlX3JlbW92ZSwKKwkucHJvYmUJCT0gcmVnX2ZpeGVkX3ZvbHRhZ2VfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChyZWdfZml4ZWRfdm9sdGFnZV9yZW1vdmUpLAogCS5kcml2ZXIJCT0gewogCQkubmFtZQkJPSAicmVnLWZpeGVkLXZvbHRhZ2UiLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL2xwMzk3MS5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbHAzOTcxLmMKaW5kZXggNGYzM2EwZi4uZjU1MzJlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvbHAzOTcxLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvbHAzOTcxLmMKQEAgLTU0LDcgKzU0LDcgQEAKICNkZWZpbmUgTFAzOTcxX0JVQ0syX0JBU0UgMHgyOQogI2RlZmluZSBMUDM5NzFfQlVDSzNfQkFTRSAweDMyCiAKLWNvbnN0IHN0YXRpYyBpbnQgYnVja19iYXNlX2FkZHJbXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgYnVja19iYXNlX2FkZHJbXSA9IHsKIAlMUDM5NzFfQlVDSzFfQkFTRSwKIAlMUDM5NzFfQlVDSzJfQkFTRSwKIAlMUDM5NzFfQlVDSzNfQkFTRSwKQEAgLTYzLDcgKzYzLDcgQEAKICNkZWZpbmUgTFAzOTcxX0JVQ0tfVEFSR0VUX1ZPTDFfUkVHKHgpIChidWNrX2Jhc2VfYWRkclt4XSkKICNkZWZpbmUgTFAzOTcxX0JVQ0tfVEFSR0VUX1ZPTDJfUkVHKHgpIChidWNrX2Jhc2VfYWRkclt4XSsxKQogCi1jb25zdCBzdGF0aWMgaW50IGJ1Y2tfdm9sdGFnZV9tYXBbXSA9IHsKK3N0YXRpYyBjb25zdCBpbnQgYnVja192b2x0YWdlX21hcFtdID0gewogCSAgIDAsICA4MDAsICA4NTAsICA5MDAsICA5NTAsIDEwMDAsIDEwNTAsIDExMDAsCiAJMTE1MCwgMTIwMCwgMTI1MCwgMTMwMCwgMTM1MCwgMTQwMCwgMTQ1MCwgMTUwMCwKIAkxNTUwLCAxNjAwLCAxNjUwLCAxNzAwLCAxODAwLCAxOTAwLCAyNTAwLCAyODAwLApAQCAtOTYsMTcgKzk2LDE3IEBACiAjZGVmaW5lIExET19WT0xfQ09OVFJfU0hJRlQoeCkgKCh4ICYgMSkgPDwgMikKICNkZWZpbmUgTERPX1ZPTF9DT05UUl9NQVNLIDB4MGYKIAotY29uc3Qgc3RhdGljIGludCBsZG80NV92b2x0YWdlX21hcFtdID0geworc3RhdGljIGNvbnN0IGludCBsZG80NV92b2x0YWdlX21hcFtdID0gewogCTEwMDAsIDEwNTAsIDExMDAsIDExNTAsIDEyMDAsIDEyNTAsIDEzMDAsIDEzNTAsCiAJMTQwMCwgMTUwMCwgMTgwMCwgMTkwMCwgMjUwMCwgMjgwMCwgMzAwMCwgMzMwMCwKIH07CiAKLWNvbnN0IHN0YXRpYyBpbnQgbGRvMTIzX3ZvbHRhZ2VfbWFwW10gPSB7CitzdGF0aWMgY29uc3QgaW50IGxkbzEyM192b2x0YWdlX21hcFtdID0gewogCTE4MDAsIDE5MDAsIDIwMDAsIDIxMDAsIDIyMDAsIDIzMDAsIDI0MDAsIDI1MDAsCiAJMjYwMCwgMjcwMCwgMjgwMCwgMjkwMCwgMzAwMCwgMzEwMCwgMzIwMCwgMzMwMCwKIH07CiAKLWNvbnN0IHN0YXRpYyBpbnQgKmxkb192b2x0YWdlX21hcFtdID0geworc3RhdGljIGNvbnN0IGludCAqbGRvX3ZvbHRhZ2VfbWFwW10gPSB7CiAJbGRvMTIzX3ZvbHRhZ2VfbWFwLCAvKiBMRE8xICovCiAJbGRvMTIzX3ZvbHRhZ2VfbWFwLCAvKiBMRE8yICovCiAJbGRvMTIzX3ZvbHRhZ2VfbWFwLCAvKiBMRE8zICovCkBAIC00MzEsMjAgKzQzMSwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc2V0dXBfcmVndWxhdG9ycyhzdHJ1Y3QgbHAzOTcxICpscDM5NzEsCi0Jc3RydWN0IGxwMzk3MV9wbGF0Zm9ybV9kYXRhICpwZGF0YSkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNldHVwX3JlZ3VsYXRvcnMoc3RydWN0IGxwMzk3MSAqbHAzOTcxLAorCQkJCSAgICAgIHN0cnVjdCBscDM5NzFfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCiB7CiAJaW50IGksIGVycjsKLQlpbnQgbnVtX3JlZ3VsYXRvcnMgPSBwZGF0YS0+bnVtX3JlZ3VsYXRvcnM7Ci0JbHAzOTcxLT5udW1fcmVndWxhdG9ycyA9IG51bV9yZWd1bGF0b3JzOwotCWxwMzk3MS0+cmRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZWd1bGF0b3JfZGV2ICopICogbnVtX3JlZ3VsYXRvcnMsCi0JCUdGUF9LRVJORUwpOworCisJbHAzOTcxLT5udW1fcmVndWxhdG9ycyA9IHBkYXRhLT5udW1fcmVndWxhdG9yczsKKwlscDM5NzEtPnJkZXYgPSBrY2FsbG9jKHBkYXRhLT5udW1fcmVndWxhdG9ycywKKwkJCQlzaXplb2Yoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKiksIEdGUF9LRVJORUwpOwogCiAJLyogSW5zdGFudGlhdGUgdGhlIHJlZ3VsYXRvcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3JlZ3VsYXRvcnM7IGkrKykgewotCQlpbnQgaWQgPSBwZGF0YS0+cmVndWxhdG9yc1tpXS5pZDsKLQkJbHAzOTcxLT5yZGV2W2ldID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZyZWd1bGF0b3JzW2lkXSwKLQkJCWxwMzk3MS0+ZGV2LCBwZGF0YS0+cmVndWxhdG9yc1tpXS5pbml0ZGF0YSwgbHAzOTcxKTsKKwlmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm51bV9yZWd1bGF0b3JzOyBpKyspIHsKKwkJc3RydWN0IGxwMzk3MV9yZWd1bGF0b3Jfc3ViZGV2ICpyZWcgPSAmcGRhdGEtPnJlZ3VsYXRvcnNbaV07CisJCWxwMzk3MS0+cmRldltpXSA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmcmVndWxhdG9yc1tyZWctPmlkXSwKKwkJCQkJbHAzOTcxLT5kZXYsIHJlZy0+aW5pdGRhdGEsIGxwMzk3MSk7CiAKIAkJaWYgKElTX0VSUihscDM5NzEtPnJkZXZbaV0pKSB7CiAJCQllcnIgPSBQVFJfRVJSKGxwMzk3MS0+cmRldltpXSk7CkBAIC00NTUsMTAgKzQ1NSwxMCBAQAogCX0KIAogCXJldHVybiAwOworCiBlcnJvcjoKLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3JlZ3VsYXRvcnM7IGkrKykKLQkJaWYgKGxwMzk3MS0+cmRldltpXSkKLQkJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKGxwMzk3MS0+cmRldltpXSk7CisJd2hpbGUgKC0taSA+PSAwKQorCQlyZWd1bGF0b3JfdW5yZWdpc3RlcihscDM5NzEtPnJkZXZbaV0pOwogCWtmcmVlKGxwMzk3MS0+cmRldik7CiAJbHAzOTcxLT5yZGV2ID0gTlVMTDsKIAlyZXR1cm4gZXJyOwpAQCAtNDcyLDE1ICs0NzIsMTcgQEAKIAlpbnQgcmV0OwogCXUxNiB2YWw7CiAKLQlscDM5NzEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbHAzOTcxKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGxwMzk3MSA9PSBOVUxMKSB7Ci0JCXJldCA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyOworCWlmICghcGRhdGEpIHsKKwkJZGV2X2RiZygmaTJjLT5kZXYsICJObyBwbGF0Zm9ybSBpbml0IGRhdGEgc3VwcGxpZWRcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKKwlscDM5NzEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbHAzOTcxKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGxwMzk3MSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCWxwMzk3MS0+aTJjID0gaTJjOwogCWxwMzk3MS0+ZGV2ID0gJmkyYy0+ZGV2OwotCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIGxwMzk3MSk7CiAKIAltdXRleF9pbml0KCZscDM5NzEtPmlvX2xvY2spOwogCkBAIC00OTMsMTkgKzQ5NSwxNSBAQAogCQlnb3RvIGVycl9kZXRlY3Q7CiAJfQogCi0JaWYgKHBkYXRhKSB7Ci0JCXJldCA9IHNldHVwX3JlZ3VsYXRvcnMobHAzOTcxLCBwZGF0YSk7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBlcnJfZGV0ZWN0OwotCX0gZWxzZQotCQlkZXZfd2FybihscDM5NzEtPmRldiwgIk5vIHBsYXRmb3JtIGluaXQgZGF0YSBzdXBwbGllZFxuIik7CisJcmV0ID0gc2V0dXBfcmVndWxhdG9ycyhscDM5NzEsIHBkYXRhKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZGV0ZWN0OwogCisJaTJjX3NldF9jbGllbnRkYXRhKGkyYywgbHAzOTcxKTsKIAlyZXR1cm4gMDsKIAogZXJyX2RldGVjdDoKLQlpMmNfc2V0X2NsaWVudGRhdGEoaTJjLCBOVUxMKTsKIAlrZnJlZShscDM5NzEpOwotZXJyOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTUxMywxMSArNTExLDEzIEBACiB7CiAJc3RydWN0IGxwMzk3MSAqbHAzOTcxID0gaTJjX2dldF9jbGllbnRkYXRhKGkyYyk7CiAJaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IGxwMzk3MS0+bnVtX3JlZ3VsYXRvcnM7IGkrKykKLQkJaWYgKGxwMzk3MS0+cmRldltpXSkKLQkJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKGxwMzk3MS0+cmRldltpXSk7Ci0Ja2ZyZWUobHAzOTcxLT5yZGV2KTsKKwogCWkyY19zZXRfY2xpZW50ZGF0YShpMmMsIE5VTEwpOworCisJZm9yIChpID0gMDsgaSA8IGxwMzk3MS0+bnVtX3JlZ3VsYXRvcnM7IGkrKykKKwkJcmVndWxhdG9yX3VucmVnaXN0ZXIobHAzOTcxLT5yZGV2W2ldKTsKKworCWtmcmVlKGxwMzk3MS0+cmRldik7CiAJa2ZyZWUobHAzOTcxKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4MTU4Ni5jIGIvZHJpdmVycy9yZWd1bGF0b3IvbWF4MTU4Ni5jCmluZGV4IDJjMDgyZDMuLmE0OWZjOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL21heDE1ODYuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXgxNTg2LmMKQEAgLTE3OSw4ICsxNzksOCBAQAogCX0sCiB9OwogCi1zdGF0aWMgaW50IG1heDE1ODZfcG1pY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmkyY19pZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1heDE1ODZfcG1pY19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaTJjX2lkKQogewogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICoqcmRldjsKIAlzdHJ1Y3QgbWF4MTU4Nl9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CkBAIC0yMzUsNyArMjM1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG1heDE1ODZfcG1pY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1heDE1ODZfcG1pY19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKnJkZXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgaTsKQEAgLTI1Nyw5ICsyNTcsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1heDE1ODZfcG1pY19kcml2ZXIgPSB7CiAJLnByb2JlID0gbWF4MTU4Nl9wbWljX3Byb2JlLAotCS5yZW1vdmUgPSBtYXgxNTg2X3BtaWNfcmVtb3ZlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChtYXgxNTg2X3BtaWNfcmVtb3ZlKSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAibWF4MTU4NiIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiAJLmlkX3RhYmxlCT0gbWF4MTU4Nl9pZCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4NjQ5LmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4NjQ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ViZGY2OQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg2NDkuYwpAQCAtMCwwICsxLDQwOCBAQAorLyoKKyAqIFJlZ3VsYXRvcnMgZHJpdmVyIGZvciBNYXhpbSBtYXg4NjQ5CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KKyAqICAgICAgSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21heDg2NDkuaD4KKworI2RlZmluZSBNQVg4NjQ5X0RDRENfVk1JTgk3NTAwMDAJCS8qIHVWICovCisjZGVmaW5lIE1BWDg2NDlfRENEQ19WTUFYCTEzODAwMDAJCS8qIHVWICovCisjZGVmaW5lIE1BWDg2NDlfRENEQ19TVEVQCTEwMDAwCQkvKiB1ViAqLworI2RlZmluZSBNQVg4NjQ5X1ZPTF9NQVNLCTB4M2YKKworLyogUmVnaXN0ZXJzICovCisjZGVmaW5lIE1BWDg2NDlfTU9ERTAJCTB4MDAKKyNkZWZpbmUgTUFYODY0OV9NT0RFMQkJMHgwMQorI2RlZmluZSBNQVg4NjQ5X01PREUyCQkweDAyCisjZGVmaW5lIE1BWDg2NDlfTU9ERTMJCTB4MDMKKyNkZWZpbmUgTUFYODY0OV9DT05UUk9MCQkweDA0CisjZGVmaW5lIE1BWDg2NDlfU1lOQwkJMHgwNQorI2RlZmluZSBNQVg4NjQ5X1JBTVAJCTB4MDYKKyNkZWZpbmUgTUFYODY0OV9DSElQX0lEMQkweDA4CisjZGVmaW5lIE1BWDg2NDlfQ0hJUF9JRDIJMHgwOQorCisvKiBCaXRzICovCisjZGVmaW5lIE1BWDg2NDlfRU5fUEQJCSgxIDw8IDcpCisjZGVmaW5lIE1BWDg2NDlfVklEMF9QRAkJKDEgPDwgNikKKyNkZWZpbmUgTUFYODY0OV9WSUQxX1BECQkoMSA8PCA1KQorI2RlZmluZSBNQVg4NjQ5X1ZJRF9NQVNLCSgzIDw8IDUpCisKKyNkZWZpbmUgTUFYODY0OV9GT1JDRV9QV00JKDEgPDwgNykKKyNkZWZpbmUgTUFYODY0OV9TWU5DX0VYVENMSwkoMSA8PCA2KQorCisjZGVmaW5lIE1BWDg2NDlfRVhUX01BU0sJKDMgPDwgNikKKworI2RlZmluZSBNQVg4NjQ5X1JBTVBfTUFTSwkoNyA8PCA1KQorI2RlZmluZSBNQVg4NjQ5X1JBTVBfRE9XTgkoMSA8PCAxKQorCitzdHJ1Y3QgbWF4ODY0OV9yZWd1bGF0b3JfaW5mbyB7CisJc3RydWN0IHJlZ3VsYXRvcl9kZXYJKnJlZ3VsYXRvcjsKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqaTJjOworCXN0cnVjdCBkZXZpY2UJCSpkZXY7CisJc3RydWN0IG11dGV4CQlpb19sb2NrOworCisJaW50CQl2b2xfcmVnOworCXVuc2lnbmVkCW1vZGU6MjsJLyogYml0WzE6MF0gPSBWSUQxLCBWSUQwICovCisJdW5zaWduZWQJZXh0Y2xrX2ZyZXE6MjsKKwl1bnNpZ25lZAlleHRjbGs6MTsKKwl1bnNpZ25lZAlyYW1wX3RpbWluZzozOworCXVuc2lnbmVkCXJhbXBfZG93bjoxOworfTsKKworLyogSTJDIG9wZXJhdGlvbnMgKi8KKworc3RhdGljIGlubGluZSBpbnQgbWF4ODY0OV9yZWFkX2RldmljZShzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjLAorCQkJCSAgICAgIGludCByZWcsIGludCBieXRlcywgdm9pZCAqZGVzdCkKK3sKKwl1bnNpZ25lZCBjaGFyIGRhdGE7CisJaW50IHJldDsKKworCWRhdGEgPSAodW5zaWduZWQgY2hhcilyZWc7CisJcmV0ID0gaTJjX21hc3Rlcl9zZW5kKGkyYywgJmRhdGEsIDEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldCA9IGkyY19tYXN0ZXJfcmVjdihpMmMsIGRlc3QsIGJ5dGVzKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbWF4ODY0OV93cml0ZV9kZXZpY2Uoc3RydWN0IGkyY19jbGllbnQgKmkyYywKKwkJCQkgICAgICAgaW50IHJlZywgaW50IGJ5dGVzLCB2b2lkICpzcmMpCit7CisJdW5zaWduZWQgY2hhciBidWZbYnl0ZXMgKyAxXTsKKwlpbnQgcmV0OworCisJYnVmWzBdID0gKHVuc2lnbmVkIGNoYXIpcmVnOworCW1lbWNweSgmYnVmWzFdLCBzcmMsIGJ5dGVzKTsKKworCXJldCA9IGkyY19tYXN0ZXJfc2VuZChpMmMsIGJ1ZiwgYnl0ZXMgKyAxKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXg4NjQ5X3JlZ19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCByZWcpCit7CisJc3RydWN0IG1heDg2NDlfcmVndWxhdG9yX2luZm8gKmluZm8gPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTsKKwl1bnNpZ25lZCBjaGFyIGRhdGE7CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmluZm8tPmlvX2xvY2spOworCXJldCA9IG1heDg2NDlfcmVhZF9kZXZpY2UoaTJjLCByZWcsIDEsICZkYXRhKTsKKwltdXRleF91bmxvY2soJmluZm8tPmlvX2xvY2spOworCisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIChpbnQpZGF0YTsKK30KKworc3RhdGljIGludCBtYXg4NjQ5X3NldF9iaXRzKHN0cnVjdCBpMmNfY2xpZW50ICppMmMsIGludCByZWcsCisJCQkgICAgdW5zaWduZWQgY2hhciBtYXNrLCB1bnNpZ25lZCBjaGFyIGRhdGEpCit7CisJc3RydWN0IG1heDg2NDlfcmVndWxhdG9yX2luZm8gKmluZm8gPSBpMmNfZ2V0X2NsaWVudGRhdGEoaTJjKTsKKwl1bnNpZ25lZCBjaGFyIHZhbHVlOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZpbmZvLT5pb19sb2NrKTsKKwlyZXQgPSBtYXg4NjQ5X3JlYWRfZGV2aWNlKGkyYywgcmVnLCAxLCAmdmFsdWUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKwl2YWx1ZSAmPSB+bWFzazsKKwl2YWx1ZSB8PSBkYXRhOworCXJldCA9IG1heDg2NDlfd3JpdGVfZGV2aWNlKGkyYywgcmVnLCAxLCAmdmFsdWUpOworb3V0OgorCW11dGV4X3VubG9jaygmaW5mby0+aW9fbG9jayk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfcmFuZ2UoaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlpZiAoKG1pbl91ViA8IE1BWDg2NDlfRENEQ19WTUlOKSB8fCAobWF4X3VWID4gTUFYODY0OV9EQ0RDX1ZNQVgpCisJCXx8IChtaW5fdVYgPiBtYXhfdVYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXg4NjQ5X2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgdW5zaWduZWQgaW5kZXgpCit7CisJcmV0dXJuIChNQVg4NjQ5X0RDRENfVk1JTiArIGluZGV4ICogTUFYODY0OV9EQ0RDX1NURVApOworfQorCitzdGF0aWMgaW50IG1heDg2NDlfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1heDg2NDlfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXVuc2lnbmVkIGNoYXIgZGF0YTsKKwlpbnQgcmV0OworCisJcmV0ID0gbWF4ODY0OV9yZWdfcmVhZChpbmZvLT5pMmMsIGluZm8tPnZvbF9yZWcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWRhdGEgPSAodW5zaWduZWQgY2hhcilyZXQgJiBNQVg4NjQ5X1ZPTF9NQVNLOworCXJldHVybiBtYXg4NjQ5X2xpc3Rfdm9sdGFnZShyZGV2LCBkYXRhKTsKK30KKworc3RhdGljIGludCBtYXg4NjQ5X3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJICAgICAgIGludCBtaW5fdVYsIGludCBtYXhfdVYpCit7CisJc3RydWN0IG1heDg2NDlfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXVuc2lnbmVkIGNoYXIgZGF0YSwgbWFzazsKKworCWlmIChjaGVja19yYW5nZShtaW5fdVYsIG1heF91VikpIHsKKwkJZGV2X2VycihpbmZvLT5kZXYsICJpbnZhbGlkIHZvbHRhZ2UgcmFuZ2UgKCVkLCAlZCkgdVZcbiIsCisJCQltaW5fdVYsIG1heF91Vik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkYXRhID0gKG1pbl91ViAtIE1BWDg2NDlfRENEQ19WTUlOICsgTUFYODY0OV9EQ0RDX1NURVAgLSAxKQorCQkvIE1BWDg2NDlfRENEQ19TVEVQOworCW1hc2sgPSBNQVg4NjQ5X1ZPTF9NQVNLOworCisJcmV0dXJuIG1heDg2NDlfc2V0X2JpdHMoaW5mby0+aTJjLCBpbmZvLT52b2xfcmVnLCBtYXNrLCBkYXRhKTsKK30KKworLyogRU5fUEQgbWVhbnMgcHVsbGRvd24gb24gRU4gaW5wdXQgKi8KK3N0YXRpYyBpbnQgbWF4ODY0OV9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1heDg2NDlfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXJldHVybiBtYXg4NjQ5X3NldF9iaXRzKGluZm8tPmkyYywgTUFYODY0OV9DT05UUk9MLCBNQVg4NjQ5X0VOX1BELCAwKTsKK30KKworLyoKKyAqIEFwcGxpZWQgaW50ZXJuYWwgcHVsbGRvd24gcmVzaXN0b3Igb24gRU4gaW5wdXQgcGluLgorICogSWYgcHVsbGRvd24gRU4gcGluIG91dHNpZGUsIGl0IHdvdWxkIGJlIGJldHRlci4KKyAqLworc3RhdGljIGludCBtYXg4NjQ5X2Rpc2FibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1heDg2NDlfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXJldHVybiBtYXg4NjQ5X3NldF9iaXRzKGluZm8tPmkyYywgTUFYODY0OV9DT05UUk9MLCBNQVg4NjQ5X0VOX1BELAorCQkJCU1BWDg2NDlfRU5fUEQpOworfQorCitzdGF0aWMgaW50IG1heDg2NDlfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgbWF4ODY0OV9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHJldDsKKworCXJldCA9IG1heDg2NDlfcmVnX3JlYWQoaW5mby0+aTJjLCBNQVg4NjQ5X0NPTlRST0wpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAhKCh1bnNpZ25lZCBjaGFyKXJldCAmIE1BWDg2NDlfRU5fUEQpOworfQorCitzdGF0aWMgaW50IG1heDg2NDlfZW5hYmxlX3RpbWUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1heDg2NDlfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCB2b2x0YWdlLCByYXRlLCByZXQ7CisKKwkvKiBnZXQgdm9sdGFnZSAqLworCXJldCA9IG1heDg2NDlfcmVnX3JlYWQoaW5mby0+aTJjLCBpbmZvLT52b2xfcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXQgJj0gTUFYODY0OV9WT0xfTUFTSzsKKwl2b2x0YWdlID0gbWF4ODY0OV9saXN0X3ZvbHRhZ2UocmRldiwgKHVuc2lnbmVkIGNoYXIpcmV0KTsgLyogdVYgKi8KKworCS8qIGdldCByYXRlICovCisJcmV0ID0gbWF4ODY0OV9yZWdfcmVhZChpbmZvLT5pMmMsIE1BWDg2NDlfUkFNUCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0ID0gKHJldCAmIE1BWDg2NDlfUkFNUF9NQVNLKSA+PiA1OworCXJhdGUgPSAoMzIgKiAxMDAwKSA+PiByZXQ7CS8qIHVWL3VTICovCisKKwlyZXR1cm4gKHZvbHRhZ2UgLyByYXRlKTsKK30KKworc3RhdGljIGludCBtYXg4NjQ5X3NldF9tb2RlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LCB1bnNpZ25lZCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3QgbWF4ODY0OV9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwljYXNlIFJFR1VMQVRPUl9NT0RFX0ZBU1Q6CisJCW1heDg2NDlfc2V0X2JpdHMoaW5mby0+aTJjLCBpbmZvLT52b2xfcmVnLCBNQVg4NjQ5X0ZPUkNFX1BXTSwKKwkJCQkgTUFYODY0OV9GT1JDRV9QV00pOworCQlicmVhazsKKwljYXNlIFJFR1VMQVRPUl9NT0RFX05PUk1BTDoKKwkJbWF4ODY0OV9zZXRfYml0cyhpbmZvLT5pMmMsIGluZm8tPnZvbF9yZWcsCisJCQkJIE1BWDg2NDlfRk9SQ0VfUFdNLCAwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IG1heDg2NDlfZ2V0X21vZGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1heDg2NDlfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCByZXQ7CisKKwlyZXQgPSBtYXg4NjQ5X3JlZ19yZWFkKGluZm8tPmkyYywgaW5mby0+dm9sX3JlZyk7CisJaWYgKHJldCAmIE1BWDg2NDlfRk9SQ0VfUFdNKQorCQlyZXR1cm4gUkVHVUxBVE9SX01PREVfRkFTVDsKKwlyZXR1cm4gUkVHVUxBVE9SX01PREVfTk9STUFMOworfQorCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWF4ODY0OV9kY2RjX29wcyA9IHsKKwkuc2V0X3ZvbHRhZ2UJPSBtYXg4NjQ5X3NldF92b2x0YWdlLAorCS5nZXRfdm9sdGFnZQk9IG1heDg2NDlfZ2V0X3ZvbHRhZ2UsCisJLmxpc3Rfdm9sdGFnZQk9IG1heDg2NDlfbGlzdF92b2x0YWdlLAorCS5lbmFibGUJCT0gbWF4ODY0OV9lbmFibGUsCisJLmRpc2FibGUJPSBtYXg4NjQ5X2Rpc2FibGUsCisJLmlzX2VuYWJsZWQJPSBtYXg4NjQ5X2lzX2VuYWJsZWQsCisJLmVuYWJsZV90aW1lCT0gbWF4ODY0OV9lbmFibGVfdGltZSwKKwkuc2V0X21vZGUJPSBtYXg4NjQ5X3NldF9tb2RlLAorCS5nZXRfbW9kZQk9IG1heDg2NDlfZ2V0X21vZGUsCisKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX2Rlc2MgZGNkY19kZXNjID0geworCS5uYW1lCQk9ICJtYXg4NjQ5IiwKKwkub3BzCQk9ICZtYXg4NjQ5X2RjZGNfb3BzLAorCS50eXBlCQk9IFJFR1VMQVRPUl9WT0xUQUdFLAorCS5uX3ZvbHRhZ2VzCT0gMSA8PCA2LAorCS5vd25lcgkJPSBUSElTX01PRFVMRSwKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1heDg2NDlfcmVndWxhdG9yX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQkJCSAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBtYXg4NjQ5X3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlzdHJ1Y3QgbWF4ODY0OV9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IE5VTEw7CisJdW5zaWduZWQgY2hhciBkYXRhOworCWludCByZXQ7CisKKwlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1heDg2NDlfcmVndWxhdG9yX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWluZm8pIHsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJObyBlbm91Z2ggbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaW5mby0+aTJjID0gY2xpZW50OworCWluZm8tPmRldiA9ICZjbGllbnQtPmRldjsKKwltdXRleF9pbml0KCZpbmZvLT5pb19sb2NrKTsKKwlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBpbmZvKTsKKworCWluZm8tPm1vZGUgPSBwZGF0YS0+bW9kZTsKKwlzd2l0Y2ggKGluZm8tPm1vZGUpIHsKKwljYXNlIDA6CisJCWluZm8tPnZvbF9yZWcgPSBNQVg4NjQ5X01PREUwOworCQlicmVhazsKKwljYXNlIDE6CisJCWluZm8tPnZvbF9yZWcgPSBNQVg4NjQ5X01PREUxOworCQlicmVhazsKKwljYXNlIDI6CisJCWluZm8tPnZvbF9yZWcgPSBNQVg4NjQ5X01PREUyOworCQlicmVhazsKKwljYXNlIDM6CisJCWluZm8tPnZvbF9yZWcgPSBNQVg4NjQ5X01PREUzOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXQgPSBtYXg4NjQ5X3JlZ19yZWFkKGluZm8tPmkyYywgTUFYODY0OV9DSElQX0lEMSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihpbmZvLT5kZXYsICJGYWlsZWQgdG8gZGV0ZWN0IElEIG9mIE1BWDg2NDk6JWRcbiIsCisJCQlyZXQpOworCQlnb3RvIG91dDsKKwl9CisJZGV2X2luZm8oaW5mby0+ZGV2LCAiRGV0ZWN0ZWQgTUFYODY0OSAoSUQ6JXgpXG4iLCByZXQpOworCisJLyogZW5hYmxlIFZJRDAgJiBWSUQxICovCisJbWF4ODY0OV9zZXRfYml0cyhpbmZvLT5pMmMsIE1BWDg2NDlfQ09OVFJPTCwgTUFYODY0OV9WSURfTUFTSywgMCk7CisKKwkvKiBlbmFibGUvZGlzYWJsZSBleHRlcm5hbCBjbG9jayBzeW5jaHJvbml6YXRpb24gKi8KKwlpbmZvLT5leHRjbGsgPSBwZGF0YS0+ZXh0Y2xrOworCWRhdGEgPSAoaW5mby0+ZXh0Y2xrKSA/IE1BWDg2NDlfU1lOQ19FWFRDTEsgOiAwOworCW1heDg2NDlfc2V0X2JpdHMoaW5mby0+aTJjLCBpbmZvLT52b2xfcmVnLCBNQVg4NjQ5X1NZTkNfRVhUQ0xLLCBkYXRhKTsKKwlpZiAoaW5mby0+ZXh0Y2xrKSB7CisJCS8qIHNldCBleHRlcm5hbCBjbG9jayBmcmVxdWVuY3kgKi8KKwkJaW5mby0+ZXh0Y2xrX2ZyZXEgPSBwZGF0YS0+ZXh0Y2xrX2ZyZXE7CisJCW1heDg2NDlfc2V0X2JpdHMoaW5mby0+aTJjLCBNQVg4NjQ5X1NZTkMsIE1BWDg2NDlfRVhUX01BU0ssCisJCQkJIGluZm8tPmV4dGNsa19mcmVxKTsKKwl9CisKKwlpZiAocGRhdGEtPnJhbXBfdGltaW5nKSB7CisJCWluZm8tPnJhbXBfdGltaW5nID0gcGRhdGEtPnJhbXBfdGltaW5nOworCQltYXg4NjQ5X3NldF9iaXRzKGluZm8tPmkyYywgTUFYODY0OV9SQU1QLCBNQVg4NjQ5X1JBTVBfTUFTSywKKwkJCQkgaW5mby0+cmFtcF90aW1pbmcgPDwgNSk7CisJfQorCisJaW5mby0+cmFtcF9kb3duID0gcGRhdGEtPnJhbXBfZG93bjsKKwlpZiAoaW5mby0+cmFtcF9kb3duKSB7CisJCW1heDg2NDlfc2V0X2JpdHMoaW5mby0+aTJjLCBNQVg4NjQ5X1JBTVAsIE1BWDg2NDlfUkFNUF9ET1dOLAorCQkJCSBNQVg4NjQ5X1JBTVBfRE9XTik7CisJfQorCisJaW5mby0+cmVndWxhdG9yID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZkY2RjX2Rlc2MsICZjbGllbnQtPmRldiwKKwkJCQkJICAgICBwZGF0YS0+cmVndWxhdG9yLCBpbmZvKTsKKwlpZiAoSVNfRVJSKGluZm8tPnJlZ3VsYXRvcikpIHsKKwkJZGV2X2VycihpbmZvLT5kZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgcmVndWxhdG9yICVzXG4iLAorCQkJZGNkY19kZXNjLm5hbWUpOworCQlyZXQgPSBQVFJfRVJSKGluZm8tPnJlZ3VsYXRvcik7CisJCWdvdG8gb3V0OworCX0KKworCWRldl9pbmZvKGluZm8tPmRldiwgIk1heDg2NDkgcmVndWxhdG9yIGRldmljZSBpcyBkZXRlY3RlZC5cbiIpOworCXJldHVybiAwOworb3V0OgorCWtmcmVlKGluZm8pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1heDg2NDlfcmVndWxhdG9yX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBtYXg4NjQ5X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwlpZiAoaW5mbykgeworCQlpZiAoaW5mby0+cmVndWxhdG9yKQorCQkJcmVndWxhdG9yX3VucmVnaXN0ZXIoaW5mby0+cmVndWxhdG9yKTsKKwkJa2ZyZWUoaW5mbyk7CisJfQorCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBtYXg4NjQ5X2lkW10gPSB7CisJeyAibWF4ODY0OSIsIDAgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgbWF4ODY0OV9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBtYXg4NjQ5X2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbWF4ODY0OV9yZWd1bGF0b3JfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtYXg4NjQ5X3JlZ3VsYXRvcl9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtYXg4NjQ5IiwKKwl9LAorCS5pZF90YWJsZQk9IG1heDg2NDlfaWQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtYXg4NjQ5X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJm1heDg2NDlfZHJpdmVyKTsKK30KK3N1YnN5c19pbml0Y2FsbChtYXg4NjQ5X2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbWF4ODY0OV9leGl0KHZvaWQpCit7CisJaTJjX2RlbF9kcml2ZXIoJm1heDg2NDlfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1heDg2NDlfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0RFU0NSSVBUSU9OKCJNQVhJTSA4NjQ5IHZvbHRhZ2UgcmVndWxhdG9yIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4NjYwLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYXg4NjYwLmMKaW5kZXggYWNjMmZiNy4uZjEyZjFiYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODY2MC5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg2NjAuYwpAQCAtMzQ1LDggKzM0NSw4IEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgbWF4ODY2MF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmkyY19pZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1heDg2NjBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaTJjX2lkKQogewogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICoqcmRldjsKIAlzdHJ1Y3QgbWF4ODY2MF9wbGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CkBAIC0zNTQsNyArMzU0LDcgQEAKIAlpbnQgYm9vdF9vbiwgaSwgaWQsIHJldCA9IC1FSU5WQUw7CiAKIAlpZiAocGRhdGEtPm51bV9zdWJkZXZzID4gTUFYODY2MF9WX0VORCkgewotCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgIlRvbyBtdWNoIHJlZ3VsYXRvcnMgZm91bmQhXG4iKTsKKwkJZGV2X2VycigmY2xpZW50LT5kZXYsICJUb28gbWFueSByZWd1bGF0b3JzIGZvdW5kIVxuIik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNDYyLDcgKzQ2Miw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBtYXg4NjYwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBfX2RldmV4aXQgbWF4ODY2MF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKnJkZXYgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgaTsKQEAgLTQ4NSw5ICs0ODUsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG1heDg2NjBfZHJpdmVyID0gewogCS5wcm9iZSA9IG1heDg2NjBfcHJvYmUsCi0JLnJlbW92ZSA9IG1heDg2NjBfcmVtb3ZlLAorCS5yZW1vdmUgPSBfX2RldmV4aXRfcChtYXg4NjYwX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIm1heDg2NjAiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogCS5pZF90YWJsZQk9IG1heDg2NjBfaWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvbWF4ODkyNS1yZWd1bGF0b3IuYyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg5MjUtcmVndWxhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc4NzNmMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL21heDg5MjUtcmVndWxhdG9yLmMKQEAgLTAsMCArMSwzMDYgQEAKKy8qCisgKiBSZWd1bGF0b3JzIGRyaXZlciBmb3IgTWF4aW0gbWF4ODkyNQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICogICAgICBIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvZHJpdmVyLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvbWF4ODkyNS5oPgorCisjZGVmaW5lIFNEMV9EVk1fVk1JTgkJODUwMDAwCisjZGVmaW5lIFNEMV9EVk1fVk1BWAkJMTAwMDAwMAorI2RlZmluZSBTRDFfRFZNX1NURVAJCTUwMDAwCisjZGVmaW5lIFNEMV9EVk1fU0hJRlQJCTUJCS8qIFNEQ1RMMSBiaXQ1ICovCisjZGVmaW5lIFNEMV9EVk1fRU4JCTYJCS8qIFNEVjEgYml0IDYgKi8KKworc3RydWN0IG1heDg5MjVfcmVndWxhdG9yX2luZm8geworCXN0cnVjdCByZWd1bGF0b3JfZGVzYwlkZXNjOworCXN0cnVjdCByZWd1bGF0b3JfZGV2CSpyZWd1bGF0b3I7CisJc3RydWN0IGkyY19jbGllbnQJKmkyYzsKKwlzdHJ1Y3QgbWF4ODkyNV9jaGlwCSpjaGlwOworCisJaW50CW1pbl91VjsKKwlpbnQJbWF4X3VWOworCWludAlzdGVwX3VWOworCWludAl2b2xfcmVnOworCWludAl2b2xfc2hpZnQ7CisJaW50CXZvbF9uYml0czsKKwlpbnQJZW5hYmxlX2JpdDsKKwlpbnQJZW5hYmxlX3JlZzsKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3JhbmdlKHN0cnVjdCBtYXg4OTI1X3JlZ3VsYXRvcl9pbmZvICppbmZvLAorCQkJICAgICAgaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlpZiAobWluX3VWIDwgaW5mby0+bWluX3VWIHx8IG1pbl91ViA+IGluZm8tPm1heF91VikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYXg4OTI1X2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgdW5zaWduZWQgaW5kZXgpCit7CisJc3RydWN0IG1heDg5MjVfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXJldHVybiBpbmZvLT5taW5fdVYgKyBpbmRleCAqIGluZm8tPnN0ZXBfdVY7Cit9CisKK3N0YXRpYyBpbnQgbWF4ODkyNV9zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKKwkJCSAgICAgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCXN0cnVjdCBtYXg4OTI1X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwl1bnNpZ25lZCBjaGFyIGRhdGEsIG1hc2s7CisKKwlpZiAoY2hlY2tfcmFuZ2UoaW5mbywgbWluX3VWLCBtYXhfdVYpKSB7CisJCWRldl9lcnIoaW5mby0+Y2hpcC0+ZGV2LCAiaW52YWxpZCB2b2x0YWdlIHJhbmdlICglZCwgJWQpIHVWXG4iLAorCQkJbWluX3VWLCBtYXhfdVYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGF0YSA9IChtaW5fdVYgLSBpbmZvLT5taW5fdVYgKyBpbmZvLT5zdGVwX3VWIC0gMSkgLyBpbmZvLT5zdGVwX3VWOworCWRhdGEgPDw9IGluZm8tPnZvbF9zaGlmdDsKKwltYXNrID0gKCgxIDw8IGluZm8tPnZvbF9uYml0cykgLSAxKSA8PCBpbmZvLT52b2xfc2hpZnQ7CisKKwlyZXR1cm4gbWF4ODkyNV9zZXRfYml0cyhpbmZvLT5pMmMsIGluZm8tPnZvbF9yZWcsIG1hc2ssIGRhdGEpOworfQorCitzdGF0aWMgaW50IG1heDg5MjVfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1heDg5MjVfcmVndWxhdG9yX2luZm8gKmluZm8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCXVuc2lnbmVkIGNoYXIgZGF0YSwgbWFzazsKKwlpbnQgcmV0OworCisJcmV0ID0gbWF4ODkyNV9yZWdfcmVhZChpbmZvLT5pMmMsIGluZm8tPnZvbF9yZWcpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCW1hc2sgPSAoKDEgPDwgaW5mby0+dm9sX25iaXRzKSAtIDEpIDw8IGluZm8tPnZvbF9zaGlmdDsKKwlkYXRhID0gKHJldCAmIG1hc2spID4+IGluZm8tPnZvbF9zaGlmdDsKKworCXJldHVybiBtYXg4OTI1X2xpc3Rfdm9sdGFnZShyZGV2LCBkYXRhKTsKK30KKworc3RhdGljIGludCBtYXg4OTI1X2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisKKwlyZXR1cm4gbWF4ODkyNV9zZXRfYml0cyhpbmZvLT5pMmMsIGluZm8tPmVuYWJsZV9yZWcsCisJCQkJMSA8PCBpbmZvLT5lbmFibGVfYml0LAorCQkJCTEgPDwgaW5mby0+ZW5hYmxlX2JpdCk7Cit9CisKK3N0YXRpYyBpbnQgbWF4ODkyNV9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYXg4OTI1X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKworCXJldHVybiBtYXg4OTI1X3NldF9iaXRzKGluZm8tPmkyYywgaW5mby0+ZW5hYmxlX3JlZywKKwkJCQkxIDw8IGluZm8tPmVuYWJsZV9iaXQsIDApOworfQorCitzdGF0aWMgaW50IG1heDg5MjVfaXNfZW5hYmxlZChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHJldDsKKworCXJldCA9IG1heDg5MjVfcmVnX3JlYWQoaW5mby0+aTJjLCBpbmZvLT52b2xfcmVnKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiByZXQgJiAoMSA8PCBpbmZvLT5lbmFibGVfYml0KTsKK30KKworc3RhdGljIGludCBtYXg4OTI1X3NldF9kdm1fdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwgaW50IHVWKQoreworCXN0cnVjdCBtYXg4OTI1X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwl1bnNpZ25lZCBjaGFyIGRhdGEsIG1hc2s7CisKKwlpZiAodVYgPCBTRDFfRFZNX1ZNSU4gfHwgdVYgPiBTRDFfRFZNX1ZNQVgpCisJCXJldHVybiAtRUlOVkFMOworCisJZGF0YSA9ICh1ViAtIFNEMV9EVk1fVk1JTiArIFNEMV9EVk1fU1RFUCAtIDEpIC8gU0QxX0RWTV9TVEVQOworCWRhdGEgPDw9IFNEMV9EVk1fU0hJRlQ7CisJbWFzayA9IDMgPDwgU0QxX0RWTV9TSElGVDsKKworCXJldHVybiBtYXg4OTI1X3NldF9iaXRzKGluZm8tPmkyYywgaW5mby0+ZW5hYmxlX3JlZywgbWFzaywgZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQgbWF4ODkyNV9zZXRfZHZtX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9yZWd1bGF0b3JfaW5mbyAqaW5mbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisKKwlyZXR1cm4gbWF4ODkyNV9zZXRfYml0cyhpbmZvLT5pMmMsIGluZm8tPnZvbF9yZWcsIDEgPDwgU0QxX0RWTV9FTiwKKwkJCQkxIDw8IFNEMV9EVk1fRU4pOworfQorCitzdGF0aWMgaW50IG1heDg5MjVfc2V0X2R2bV9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYXg4OTI1X3JlZ3VsYXRvcl9pbmZvICppbmZvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKworCXJldHVybiBtYXg4OTI1X3NldF9iaXRzKGluZm8tPmkyYywgaW5mby0+dm9sX3JlZywgMSA8PCBTRDFfRFZNX0VOLCAwKTsKK30KKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIG1heDg5MjVfcmVndWxhdG9yX3Nkdl9vcHMgPSB7CisJLnNldF92b2x0YWdlCQk9IG1heDg5MjVfc2V0X3ZvbHRhZ2UsCisJLmdldF92b2x0YWdlCQk9IG1heDg5MjVfZ2V0X3ZvbHRhZ2UsCisJLmVuYWJsZQkJCT0gbWF4ODkyNV9lbmFibGUsCisJLmRpc2FibGUJCT0gbWF4ODkyNV9kaXNhYmxlLAorCS5pc19lbmFibGVkCQk9IG1heDg5MjVfaXNfZW5hYmxlZCwKKwkuc2V0X3N1c3BlbmRfdm9sdGFnZQk9IG1heDg5MjVfc2V0X2R2bV92b2x0YWdlLAorCS5zZXRfc3VzcGVuZF9lbmFibGUJPSBtYXg4OTI1X3NldF9kdm1fZW5hYmxlLAorCS5zZXRfc3VzcGVuZF9kaXNhYmxlCT0gbWF4ODkyNV9zZXRfZHZtX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWF4ODkyNV9yZWd1bGF0b3JfbGRvX29wcyA9IHsKKwkuc2V0X3ZvbHRhZ2UJCT0gbWF4ODkyNV9zZXRfdm9sdGFnZSwKKwkuZ2V0X3ZvbHRhZ2UJCT0gbWF4ODkyNV9nZXRfdm9sdGFnZSwKKwkuZW5hYmxlCQkJPSBtYXg4OTI1X2VuYWJsZSwKKwkuZGlzYWJsZQkJPSBtYXg4OTI1X2Rpc2FibGUsCisJLmlzX2VuYWJsZWQJCT0gbWF4ODkyNV9pc19lbmFibGVkLAorfTsKKworI2RlZmluZSBNQVg4OTI1X1NEVihfaWQsIG1pbiwgbWF4LCBzdGVwKQkJCVwKK3sJCQkJCQkJCVwKKwkuZGVzYwk9IHsJCQkJCQlcCisJCS5uYW1lCT0gIlNEViIgI19pZCwJCQkJXAorCQkub3BzCT0gJm1heDg5MjVfcmVndWxhdG9yX3Nkdl9vcHMsCQlcCisJCS50eXBlCT0gUkVHVUxBVE9SX1ZPTFRBR0UsCQkJXAorCQkuaWQJPSBNQVg4OTI1X0lEX1NEIyNfaWQsCQkJXAorCQkub3duZXIJPSBUSElTX01PRFVMRSwJCQkJXAorCX0sCQkJCQkJCVwKKwkubWluX3VWCQk9IG1pbiAqIDEwMDAsCQkJCVwKKwkubWF4X3VWCQk9IG1heCAqIDEwMDAsCQkJCVwKKwkuc3RlcF91Vgk9IHN0ZXAgKiAxMDAwLAkJCQlcCisJLnZvbF9yZWcJPSBNQVg4OTI1X1NEViMjX2lkLAkJCVwKKwkudm9sX3NoaWZ0CT0gMCwJCQkJCVwKKwkudm9sX25iaXRzCT0gNiwJCQkJCVwKKwkuZW5hYmxlX3JlZwk9IE1BWDg5MjVfU0RDVEwjI19pZCwJCQlcCisJLmVuYWJsZV9iaXQJPSAwLAkJCQkJXAorfQorCisjZGVmaW5lIE1BWDg5MjVfTERPKF9pZCwgbWluLCBtYXgsIHN0ZXApCQkJXAorewkJCQkJCQkJXAorCS5kZXNjCT0gewkJCQkJCVwKKwkJLm5hbWUJPSAiTERPIiAjX2lkLAkJCQlcCisJCS5vcHMJPSAmbWF4ODkyNV9yZWd1bGF0b3JfbGRvX29wcywJCVwKKwkJLnR5cGUJPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQlcCisJCS5pZAk9IE1BWDg5MjVfSURfTERPIyNfaWQsCQkJXAorCQkub3duZXIJPSBUSElTX01PRFVMRSwJCQkJXAorCX0sCQkJCQkJCVwKKwkubWluX3VWCQk9IG1pbiAqIDEwMDAsCQkJCVwKKwkubWF4X3VWCQk9IG1heCAqIDEwMDAsCQkJCVwKKwkuc3RlcF91Vgk9IHN0ZXAgKiAxMDAwLAkJCQlcCisJLnZvbF9yZWcJPSBNQVg4OTI1X0xET1ZPVVQjI19pZCwJCQlcCisJLnZvbF9zaGlmdAk9IDAsCQkJCQlcCisJLnZvbF9uYml0cwk9IDYsCQkJCQlcCisJLmVuYWJsZV9yZWcJPSBNQVg4OTI1X0xET0NUTCMjX2lkLAkJCVwKKwkuZW5hYmxlX2JpdAk9IDAsCQkJCQlcCit9CisKK3N0YXRpYyBzdHJ1Y3QgbWF4ODkyNV9yZWd1bGF0b3JfaW5mbyBtYXg4OTI1X3JlZ3VsYXRvcl9pbmZvW10gPSB7CisJTUFYODkyNV9TRFYoMSwgNjM3LjUsIDE0MjUsIDEyLjUpLAorCU1BWDg5MjVfU0RWKDIsICAgNjUwLCAyMjI1LCAgIDI1KSwKKwlNQVg4OTI1X1NEVigzLCAgIDc1MCwgMzkwMCwgICA1MCksCisKKwlNQVg4OTI1X0xETygxLCAgNzUwLCAzOTAwLCA1MCksCisJTUFYODkyNV9MRE8oMiwgIDY1MCwgMjI1MCwgMjUpLAorCU1BWDg5MjVfTERPKDMsICA2NTAsIDIyNTAsIDI1KSwKKwlNQVg4OTI1X0xETyg0LCAgNzUwLCAzOTAwLCA1MCksCisJTUFYODkyNV9MRE8oNSwgIDc1MCwgMzkwMCwgNTApLAorCU1BWDg5MjVfTERPKDYsICA3NTAsIDM5MDAsIDUwKSwKKwlNQVg4OTI1X0xETyg3LCAgNzUwLCAzOTAwLCA1MCksCisJTUFYODkyNV9MRE8oOCwgIDc1MCwgMzkwMCwgNTApLAorCU1BWDg5MjVfTERPKDksICA3NTAsIDM5MDAsIDUwKSwKKwlNQVg4OTI1X0xETygxMCwgNzUwLCAzOTAwLCA1MCksCisJTUFYODkyNV9MRE8oMTEsIDc1MCwgMzkwMCwgNTApLAorCU1BWDg5MjVfTERPKDEyLCA3NTAsIDM5MDAsIDUwKSwKKwlNQVg4OTI1X0xETygxMywgNzUwLCAzOTAwLCA1MCksCisJTUFYODkyNV9MRE8oMTQsIDc1MCwgMzkwMCwgNTApLAorCU1BWDg5MjVfTERPKDE1LCA3NTAsIDM5MDAsIDUwKSwKKwlNQVg4OTI1X0xETygxNiwgNzUwLCAzOTAwLCA1MCksCisJTUFYODkyNV9MRE8oMTcsIDY1MCwgMjI1MCwgMjUpLAorCU1BWDg5MjVfTERPKDE4LCA2NTAsIDIyNTAsIDI1KSwKKwlNQVg4OTI1X0xETygxOSwgNzUwLCAzOTAwLCA1MCksCisJTUFYODkyNV9MRE8oMjAsIDc1MCwgMzkwMCwgNTApLAorfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbWF4ODkyNV9yZWd1bGF0b3JfaW5mbyAqZmluZF9yZWd1bGF0b3JfaW5mbyhpbnQgaWQpCit7CisJc3RydWN0IG1heDg5MjVfcmVndWxhdG9yX2luZm8gKnJpOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWF4ODkyNV9yZWd1bGF0b3JfaW5mbyk7IGkrKykgeworCQlyaSA9ICZtYXg4OTI1X3JlZ3VsYXRvcl9pbmZvW2ldOworCQlpZiAocmktPmRlc2MuaWQgPT0gaWQpCisJCQlyZXR1cm4gcmk7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBtYXg4OTI1X3JlZ3VsYXRvcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBtYXg4OTI1X2NoaXAgKmNoaXAgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG1heDg5MjVfcGxhdGZvcm1fZGF0YSAqcGRhdGEgPSBjaGlwLT5kZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG1heDg5MjVfcmVndWxhdG9yX2luZm8gKnJpID0gTlVMTDsKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldjsKKworCXJpID0gZmluZF9yZWd1bGF0b3JfaW5mbyhwZGV2LT5pZCk7CisJaWYgKHJpID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiaW52YWxpZCByZWd1bGF0b3IgSUQgc3BlY2lmaWVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJpLT5pMmMgPSBjaGlwLT5pMmM7CisJcmktPmNoaXAgPSBjaGlwOworCisJcmRldiA9IHJlZ3VsYXRvcl9yZWdpc3RlcigmcmktPmRlc2MsICZwZGV2LT5kZXYsCisJCQkJICBwZGF0YS0+cmVndWxhdG9yW3BkZXYtPmlkXSwgcmkpOworCWlmIChJU19FUlIocmRldikpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHJlZ3VsYXRvciAlc1xuIiwKKwkJCQlyaS0+ZGVzYy5uYW1lKTsKKwkJcmV0dXJuIFBUUl9FUlIocmRldik7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcmRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1heDg5MjVfcmVndWxhdG9yX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlyZWd1bGF0b3JfdW5yZWdpc3RlcihyZGV2KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWF4ODkyNV9yZWd1bGF0b3JfZHJpdmVyID0geworCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJtYXg4OTI1LXJlZ3VsYXRvciIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IG1heDg5MjVfcmVndWxhdG9yX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobWF4ODkyNV9yZWd1bGF0b3JfcmVtb3ZlKSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1heDg5MjVfcmVndWxhdG9yX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZtYXg4OTI1X3JlZ3VsYXRvcl9kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKG1heDg5MjVfcmVndWxhdG9yX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgbWF4ODkyNV9yZWd1bGF0b3JfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZtYXg4OTI1X3JlZ3VsYXRvcl9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQobWF4ODkyNV9yZWd1bGF0b3JfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BVVRIT1IoIkhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiUmVndWxhdG9yIERyaXZlciBmb3IgTWF4aW0gODkyNSBQTUlDIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm1heDg5MjUtcmVndWxhdG9yIik7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL21jMTM3ODMtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci9tYzEzNzgzLXJlZ3VsYXRvci5jCmluZGV4IDM5YzQ5NTMuLmY3YjgxODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL21jMTM3ODMtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvbWMxMzc4My1yZWd1bGF0b3IuYwpAQCAtMiw2ICsyLDcgQEAKICAqIFJlZ3VsYXRvciBEcml2ZXIgZm9yIEZyZWVzY2FsZSBNQzEzNzgzIFBNSUMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggU2FzY2hhIEhhdWVyLCBQZW5ndXRyb25peCA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4KKyAqIENvcHlyaWdodCAyMDA5IEFsYmVydG8gUGFuaXp6byA8bWFyYW1hb3BlcmNoZXNlaW1vcnRvQGdtYWlsLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTE2LDExICsxNyw0NCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KIAotI2RlZmluZSBNQzEzNzgzX1JFR19TV0lUQ0hFUlM0CQkJMjgKLSNkZWZpbmUgTUMxMzc4M19SRUdfU1dJVENIRVJTNF9QTExFTgkJCSgxIDw8IDE4KQotCiAjZGVmaW5lIE1DMTM3ODNfUkVHX1NXSVRDSEVSUzUJCQkyOQogI2RlZmluZSBNQzEzNzgzX1JFR19TV0lUQ0hFUlM1X1NXM0VOCQkJKDEgPDwgMjApCisjZGVmaW5lIE1DMTM3ODNfUkVHX1NXSVRDSEVSUzVfU1czVlNFTAkJCTE4CisjZGVmaW5lIE1DMTM3ODNfUkVHX1NXSVRDSEVSUzVfU1czVlNFTF9NCQkoMyA8PCAxOCkKKworI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JTRVRUSU5HMAkJMzAKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzBfVklPTE9WU0VMCQkyCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUlNFVFRJTkcwX1ZESUdWU0VMCQk0CisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUlNFVFRJTkcwX1ZHRU5WU0VMCQk2CisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUlNFVFRJTkcwX1ZSRkRJR1ZTRUwJOQorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JTRVRUSU5HMF9WUkZSRUZWU0VMCTExCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUlNFVFRJTkcwX1ZSRkNQVlNFTAkJMTMKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzBfVlNJTVZTRUwJCTE0CisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUlNFVFRJTkcwX1ZFU0lNVlNFTAkJMTUKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzBfVkNBTVZTRUwJCTE2CisKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzBfVklPTE9WU0VMX00JKDMgPDwgMikKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzBfVkRJR1ZTRUxfTQkoMyA8PCA0KQorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JTRVRUSU5HMF9WR0VOVlNFTF9NCSg3IDw8IDYpCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUlNFVFRJTkcwX1ZSRkRJR1ZTRUxfTQkoMyA8PCA5KQorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JTRVRUSU5HMF9WUkZSRUZWU0VMX00JKDMgPDwgMTEpCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUlNFVFRJTkcwX1ZSRkNQVlNFTF9NCSgxIDw8IDEzKQorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JTRVRUSU5HMF9WU0lNVlNFTF9NCSgxIDw8IDE0KQorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JTRVRUSU5HMF9WRVNJTVZTRUxfTQkoMSA8PCAxNSkKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzBfVkNBTVZTRUxfTQkoNyA8PCAxNikKKworI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JTRVRUSU5HMQkJMzEKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzFfVlZJQlZTRUwJCTAKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzFfVlJGMVZTRUwJCTIKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzFfVlJGMlZTRUwJCTQKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzFfVk1NQzFWU0VMCQk2CisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUlNFVFRJTkcxX1ZNTUMyVlNFTAkJOQorCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUlNFVFRJTkcxX1ZWSUJWU0VMX00JKDMgPDwgMCkKKyNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9SU0VUVElORzFfVlJGMVZTRUxfTQkoMyA8PCAyKQorI2RlZmluZSBNQzEzNzgzX1JFR19SRUdVTEFUT1JTRVRUSU5HMV9WUkYyVlNFTF9NCSgzIDw8IDQpCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUlNFVFRJTkcxX1ZNTUMxVlNFTF9NCSg3IDw8IDYpCisjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUlNFVFRJTkcxX1ZNTUMyVlNFTF9NCSg3IDw8IDkpCiAKICNkZWZpbmUgTUMxMzc4M19SRUdfUkVHVUxBVE9STU9ERTAJCTMyCiAjZGVmaW5lIE1DMTM3ODNfUkVHX1JFR1VMQVRPUk1PREUwX1ZBVURJT0VOCQkoMSA8PCAwKQpAQCAtNDgsMTkgKzgyLDEwNyBAQAogI2RlZmluZSBNQzEzNzgzX1JFR19QT1dFUk1JU0NfR1BPMkVOCQkJKDEgPDwgOCkKICNkZWZpbmUgTUMxMzc4M19SRUdfUE9XRVJNSVNDX0dQTzNFTgkJCSgxIDw8IDEwKQogI2RlZmluZSBNQzEzNzgzX1JFR19QT1dFUk1JU0NfR1BPNEVOCQkJKDEgPDwgMTIpCisjZGVmaW5lIE1DMTM3ODNfUkVHX1BPV0VSTUlTQ19QV0dUMVNQSUVOCQkoMSA8PCAxNSkKKyNkZWZpbmUgTUMxMzc4M19SRUdfUE9XRVJNSVNDX1BXR1QyU1BJRU4JCSgxIDw8IDE2KQorCisjZGVmaW5lIE1DMTM3ODNfUkVHX1BPV0VSTUlTQ19QV0dUU1BJX00JCQkoMyA8PCAxNSkKKwogCiBzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3IgewogCXN0cnVjdCByZWd1bGF0b3JfZGVzYyBkZXNjOwogCWludCByZWc7CiAJaW50IGVuYWJsZV9iaXQ7CisJaW50IHZzZWxfcmVnOworCWludCB2c2VsX3NoaWZ0OworCWludCB2c2VsX21hc2s7CisJaW50IGNvbnN0ICp2b2x0YWdlczsKK307CisKKy8qIFZvbHRhZ2UgVmFsdWVzICovCitzdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfc3czX3ZhbFtdID0geworCTUwMDAwMDAsIDUwMDAwMDAsIDUwMDAwMDAsIDU1MDAwMDAsCit9OworCitzdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfdmF1ZGlvX3ZhbFtdID0geworCTI3NzUwMDAsCit9OworCitzdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfdmlvaGlfdmFsW10gPSB7CisJMjc3NTAwMCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgY29uc3QgbWMxMzc4M192aW9sb192YWxbXSA9IHsKKwkxMjAwMDAwLCAxMzAwMDAwLCAxNTAwMDAwLCAxODAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBjb25zdCBtYzEzNzgzX3ZkaWdfdmFsW10gPSB7CisJMTIwMDAwMCwgMTMwMDAwMCwgMTUwMDAwMCwgMTgwMDAwMCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgY29uc3QgbWMxMzc4M192Z2VuX3ZhbFtdID0geworCTEyMDAwMDAsIDEzMDAwMDAsIDE1MDAwMDAsIDE4MDAwMDAsCisJMTEwMDAwMCwgMjAwMDAwMCwgMjc3NTAwMCwgMjQwMDAwMCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgY29uc3QgbWMxMzc4M192cmZkaWdfdmFsW10gPSB7CisJMTIwMDAwMCwgMTUwMDAwMCwgMTgwMDAwMCwgMTg3NTAwMCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgY29uc3QgbWMxMzc4M192cmZyZWZfdmFsW10gPSB7CisJMjQ3NTAwMCwgMjYwMDAwMCwgMjcwMDAwMCwgMjc3NTAwMCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgY29uc3QgbWMxMzc4M192cmZjcF92YWxbXSA9IHsKKwkyNzAwMDAwLCAyNzc1MDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBjb25zdCBtYzEzNzgzX3ZzaW1fdmFsW10gPSB7CisJMTgwMDAwMCwgMjkwMDAwMCwgMzAwMDAwMCwKK307CisKK3N0YXRpYyBjb25zdCBpbnQgY29uc3QgbWMxMzc4M192ZXNpbV92YWxbXSA9IHsKKwkxODAwMDAwLCAyOTAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBjb25zdCBtYzEzNzgzX3ZjYW1fdmFsW10gPSB7CisJMTUwMDAwMCwgMTgwMDAwMCwgMjUwMDAwMCwgMjU1MDAwMCwKKwkyNjAwMDAwLCAyNzUwMDAwLCAyODAwMDAwLCAzMDAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBjb25zdCBtYzEzNzgzX3ZyZmJnX3ZhbFtdID0geworCTEyNTAwMDAsCit9OworCitzdGF0aWMgY29uc3QgaW50IGNvbnN0IG1jMTM3ODNfdnZpYl92YWxbXSA9IHsKKwkxMzAwMDAwLCAxODAwMDAwLCAyMDAwMDAwLCAzMDAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBjb25zdCBtYzEzNzgzX3ZtbWNfdmFsW10gPSB7CisJMTYwMDAwMCwgMTgwMDAwMCwgMjAwMDAwMCwgMjYwMDAwMCwKKwkyNzAwMDAwLCAyODAwMDAwLCAyOTAwMDAwLCAzMDAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBjb25zdCBtYzEzNzgzX3ZyZl92YWxbXSA9IHsKKwkxNTAwMDAwLCAxODc1MDAwLCAyNzAwMDAwLCAyNzc1MDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBjb25zdCBtYzEzNzgzX2dwb192YWxbXSA9IHsKKwkzMTAwMDAwLAorfTsKKworc3RhdGljIGNvbnN0IGludCBjb25zdCBtYzEzNzgzX3B3Z3RkcnZfdmFsW10gPSB7CisJNTUwMDAwMCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBtYzEzNzgzX3JlZ3VsYXRvcl9vcHM7CitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWMxMzc4M19maXhlZF9yZWd1bGF0b3Jfb3BzOworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIG1jMTM3ODNfZ3BvX3JlZ3VsYXRvcl9vcHM7CiAKLSNkZWZpbmUgTUMxMzc4M19ERUZJTkUocHJlZml4LCBfbmFtZSwgX3JlZykJCQkJXAorI2RlZmluZSBNQzEzNzgzX0RFRklORShwcmVmaXgsIF9uYW1lLCBfcmVnLCBfdnNlbF9yZWcsIF92b2x0YWdlcykJXAogCVtNQzEzNzgzXyAjIyBwcmVmaXggIyMgXyAjIyBfbmFtZV0gPSB7CQkJCVwKIAkJLmRlc2MgPSB7CQkJCQkJXAogCQkJLm5hbWUgPSAjcHJlZml4ICJfIiAjX25hbWUsCQkJXAorCQkJLm5fdm9sdGFnZXMgPSBBUlJBWV9TSVpFKF92b2x0YWdlcyksCQlcCiAJCQkub3BzID0gJm1jMTM3ODNfcmVndWxhdG9yX29wcywJCQlcCiAJCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAkJCVwKIAkJCS5pZCA9IE1DMTM3ODNfICMjIHByZWZpeCAjIyBfICMjIF9uYW1lLAkJXApAQCAtNjgsNDAgKzE5MCw5MiBAQAogCQl9LAkJCQkJCQlcCiAJCS5yZWcgPSBNQzEzNzgzX1JFR18gIyMgX3JlZywJCQkJXAogCQkuZW5hYmxlX2JpdCA9IE1DMTM3ODNfUkVHXyAjIyBfcmVnICMjIF8gIyMgX25hbWUgIyMgRU4sCVwKKwkJLnZzZWxfcmVnID0gTUMxMzc4M19SRUdfICMjIF92c2VsX3JlZywJCQlcCisJCS52c2VsX3NoaWZ0ID0gTUMxMzc4M19SRUdfICMjIF92c2VsX3JlZyAjIyBfICMjIF9uYW1lICMjIFZTRUwsXAorCQkudnNlbF9tYXNrID0gTUMxMzc4M19SRUdfICMjIF92c2VsX3JlZyAjIyBfICMjIF9uYW1lICMjIFZTRUxfTSxcCisJCS52b2x0YWdlcyA9ICBfdm9sdGFnZXMsCQkJCQlcCiAJfQogCi0jZGVmaW5lIE1DMTM3ODNfREVGSU5FX1NXKF9uYW1lLCBfcmVnKSBNQzEzNzgzX0RFRklORShTVywgX25hbWUsIF9yZWcpCi0jZGVmaW5lIE1DMTM3ODNfREVGSU5FX1JFR1UoX25hbWUsIF9yZWcpIE1DMTM3ODNfREVGSU5FKFJFR1UsIF9uYW1lLCBfcmVnKQorI2RlZmluZSBNQzEzNzgzX0ZJWEVEX0RFRklORShwcmVmaXgsIF9uYW1lLCBfcmVnLCBfdm9sdGFnZXMpCQlcCisJW01DMTM3ODNfICMjIHByZWZpeCAjIyBfICMjIF9uYW1lXSA9IHsJCQkJXAorCQkuZGVzYyA9IHsJCQkJCQlcCisJCQkubmFtZSA9ICNwcmVmaXggIl8iICNfbmFtZSwJCQlcCisJCQkubl92b2x0YWdlcyA9IEFSUkFZX1NJWkUoX3ZvbHRhZ2VzKSwJCVwKKwkJCS5vcHMgPSAmbWMxMzc4M19maXhlZF9yZWd1bGF0b3Jfb3BzLAkJXAorCQkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQlcCisJCQkuaWQgPSBNQzEzNzgzXyAjIyBwcmVmaXggIyMgXyAjIyBfbmFtZSwJCVwKKwkJCS5vd25lciA9IFRISVNfTU9EVUxFLAkJCQlcCisJCX0sCQkJCQkJCVwKKwkJLnJlZyA9IE1DMTM3ODNfUkVHXyAjIyBfcmVnLAkJCQlcCisJCS5lbmFibGVfYml0ID0gTUMxMzc4M19SRUdfICMjIF9yZWcgIyMgXyAjIyBfbmFtZSAjIyBFTiwJXAorCQkudm9sdGFnZXMgPSAgX3ZvbHRhZ2VzLAkJCQkJXAorCX0KKworI2RlZmluZSBNQzEzNzgzX0dQT19ERUZJTkUocHJlZml4LCBfbmFtZSwgX3JlZywgIF92b2x0YWdlcykJCVwKKwlbTUMxMzc4M18gIyMgcHJlZml4ICMjIF8gIyMgX25hbWVdID0gewkJCQlcCisJCS5kZXNjID0gewkJCQkJCVwKKwkJCS5uYW1lID0gI3ByZWZpeCAiXyIgI19uYW1lLAkJCVwKKwkJCS5uX3ZvbHRhZ2VzID0gQVJSQVlfU0laRShfdm9sdGFnZXMpLAkJXAorCQkJLm9wcyA9ICZtYzEzNzgzX2dwb19yZWd1bGF0b3Jfb3BzLAkJXAorCQkJLnR5cGUgPSBSRUdVTEFUT1JfVk9MVEFHRSwJCQlcCisJCQkuaWQgPSBNQzEzNzgzXyAjIyBwcmVmaXggIyMgXyAjIyBfbmFtZSwJCVwKKwkJCS5vd25lciA9IFRISVNfTU9EVUxFLAkJCQlcCisJCX0sCQkJCQkJCVwKKwkJLnJlZyA9IE1DMTM3ODNfUkVHXyAjIyBfcmVnLAkJCQlcCisJCS5lbmFibGVfYml0ID0gTUMxMzc4M19SRUdfICMjIF9yZWcgIyMgXyAjIyBfbmFtZSAjIyBFTiwJXAorCQkudm9sdGFnZXMgPSAgX3ZvbHRhZ2VzLAkJCQkJXAorCX0KKworI2RlZmluZSBNQzEzNzgzX0RFRklORV9TVyhfbmFtZSwgX3JlZywgX3ZzZWxfcmVnLCBfdm9sdGFnZXMpCQlcCisJTUMxMzc4M19ERUZJTkUoU1csIF9uYW1lLCBfcmVnLCBfdnNlbF9yZWcsIF92b2x0YWdlcykKKyNkZWZpbmUgTUMxMzc4M19ERUZJTkVfUkVHVShfbmFtZSwgX3JlZywgX3ZzZWxfcmVnLCBfdm9sdGFnZXMpCQlcCisJTUMxMzc4M19ERUZJTkUoUkVHVSwgX25hbWUsIF9yZWcsIF92c2VsX3JlZywgX3ZvbHRhZ2VzKQogCiBzdGF0aWMgc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yIG1jMTM3ODNfcmVndWxhdG9yc1tdID0gewotCU1DMTM3ODNfREVGSU5FX1NXKFNXMywgU1dJVENIRVJTNSksCi0JTUMxMzc4M19ERUZJTkVfU1coUExMLCBTV0lUQ0hFUlM0KSwKKwlNQzEzNzgzX0RFRklORV9TVyhTVzMsIFNXSVRDSEVSUzUsIFNXSVRDSEVSUzUsIG1jMTM3ODNfc3czX3ZhbCksCiAKLQlNQzEzNzgzX0RFRklORV9SRUdVKFZBVURJTywgUkVHVUxBVE9STU9ERTApLAotCU1DMTM3ODNfREVGSU5FX1JFR1UoVklPSEksIFJFR1VMQVRPUk1PREUwKSwKLQlNQzEzNzgzX0RFRklORV9SRUdVKFZJT0xPLCBSRUdVTEFUT1JNT0RFMCksCi0JTUMxMzc4M19ERUZJTkVfUkVHVShWRElHLCBSRUdVTEFUT1JNT0RFMCksCi0JTUMxMzc4M19ERUZJTkVfUkVHVShWR0VOLCBSRUdVTEFUT1JNT0RFMCksCi0JTUMxMzc4M19ERUZJTkVfUkVHVShWUkZESUcsIFJFR1VMQVRPUk1PREUwKSwKLQlNQzEzNzgzX0RFRklORV9SRUdVKFZSRlJFRiwgUkVHVUxBVE9STU9ERTApLAotCU1DMTM3ODNfREVGSU5FX1JFR1UoVlJGQ1AsIFJFR1VMQVRPUk1PREUwKSwKLQlNQzEzNzgzX0RFRklORV9SRUdVKFZTSU0sIFJFR1VMQVRPUk1PREUxKSwKLQlNQzEzNzgzX0RFRklORV9SRUdVKFZFU0lNLCBSRUdVTEFUT1JNT0RFMSksCi0JTUMxMzc4M19ERUZJTkVfUkVHVShWQ0FNLCBSRUdVTEFUT1JNT0RFMSksCi0JTUMxMzc4M19ERUZJTkVfUkVHVShWUkZCRywgUkVHVUxBVE9STU9ERTEpLAotCU1DMTM3ODNfREVGSU5FX1JFR1UoVlZJQiwgUkVHVUxBVE9STU9ERTEpLAotCU1DMTM3ODNfREVGSU5FX1JFR1UoVlJGMSwgUkVHVUxBVE9STU9ERTEpLAotCU1DMTM3ODNfREVGSU5FX1JFR1UoVlJGMiwgUkVHVUxBVE9STU9ERTEpLAotCU1DMTM3ODNfREVGSU5FX1JFR1UoVk1NQzEsIFJFR1VMQVRPUk1PREUxKSwKLQlNQzEzNzgzX0RFRklORV9SRUdVKFZNTUMyLCBSRUdVTEFUT1JNT0RFMSksCi0JTUMxMzc4M19ERUZJTkVfUkVHVShHUE8xLCBQT1dFUk1JU0MpLAotCU1DMTM3ODNfREVGSU5FX1JFR1UoR1BPMiwgUE9XRVJNSVNDKSwKLQlNQzEzNzgzX0RFRklORV9SRUdVKEdQTzMsIFBPV0VSTUlTQyksCi0JTUMxMzc4M19ERUZJTkVfUkVHVShHUE80LCBQT1dFUk1JU0MpLAorCU1DMTM3ODNfRklYRURfREVGSU5FKFJFR1UsIFZBVURJTywgUkVHVUxBVE9STU9ERTAsIG1jMTM3ODNfdmF1ZGlvX3ZhbCksCisJTUMxMzc4M19GSVhFRF9ERUZJTkUoUkVHVSwgVklPSEksIFJFR1VMQVRPUk1PREUwLCBtYzEzNzgzX3Zpb2hpX3ZhbCksCisJTUMxMzc4M19ERUZJTkVfUkVHVShWSU9MTywgUkVHVUxBVE9STU9ERTAsIFJFR1VMQVRPUlNFVFRJTkcwLAlcCisJCQkgICAgbWMxMzc4M192aW9sb192YWwpLAorCU1DMTM3ODNfREVGSU5FX1JFR1UoVkRJRywgUkVHVUxBVE9STU9ERTAsIFJFR1VMQVRPUlNFVFRJTkcwLAlcCisJCQkgICAgbWMxMzc4M192ZGlnX3ZhbCksCisJTUMxMzc4M19ERUZJTkVfUkVHVShWR0VOLCBSRUdVTEFUT1JNT0RFMCwgUkVHVUxBVE9SU0VUVElORzAsCVwKKwkJCSAgICBtYzEzNzgzX3ZnZW5fdmFsKSwKKwlNQzEzNzgzX0RFRklORV9SRUdVKFZSRkRJRywgUkVHVUxBVE9STU9ERTAsIFJFR1VMQVRPUlNFVFRJTkcwLAlcCisJCQkgICAgbWMxMzc4M192cmZkaWdfdmFsKSwKKwlNQzEzNzgzX0RFRklORV9SRUdVKFZSRlJFRiwgUkVHVUxBVE9STU9ERTAsIFJFR1VMQVRPUlNFVFRJTkcwLAlcCisJCQkgICAgbWMxMzc4M192cmZyZWZfdmFsKSwKKwlNQzEzNzgzX0RFRklORV9SRUdVKFZSRkNQLCBSRUdVTEFUT1JNT0RFMCwgUkVHVUxBVE9SU0VUVElORzAsCVwKKwkJCSAgICBtYzEzNzgzX3ZyZmNwX3ZhbCksCisJTUMxMzc4M19ERUZJTkVfUkVHVShWU0lNLCBSRUdVTEFUT1JNT0RFMSwgUkVHVUxBVE9SU0VUVElORzAsCVwKKwkJCSAgICBtYzEzNzgzX3ZzaW1fdmFsKSwKKwlNQzEzNzgzX0RFRklORV9SRUdVKFZFU0lNLCBSRUdVTEFUT1JNT0RFMSwgUkVHVUxBVE9SU0VUVElORzAsCVwKKwkJCSAgICBtYzEzNzgzX3Zlc2ltX3ZhbCksCisJTUMxMzc4M19ERUZJTkVfUkVHVShWQ0FNLCBSRUdVTEFUT1JNT0RFMSwgUkVHVUxBVE9SU0VUVElORzAsCVwKKwkJCSAgICBtYzEzNzgzX3ZjYW1fdmFsKSwKKwlNQzEzNzgzX0ZJWEVEX0RFRklORShSRUdVLCBWUkZCRywgUkVHVUxBVE9STU9ERTEsIG1jMTM3ODNfdnJmYmdfdmFsKSwKKwlNQzEzNzgzX0RFRklORV9SRUdVKFZWSUIsIFJFR1VMQVRPUk1PREUxLCBSRUdVTEFUT1JTRVRUSU5HMSwJXAorCQkJICAgIG1jMTM3ODNfdnZpYl92YWwpLAorCU1DMTM3ODNfREVGSU5FX1JFR1UoVlJGMSwgUkVHVUxBVE9STU9ERTEsIFJFR1VMQVRPUlNFVFRJTkcxLAlcCisJCQkgICAgbWMxMzc4M192cmZfdmFsKSwKKwlNQzEzNzgzX0RFRklORV9SRUdVKFZSRjIsIFJFR1VMQVRPUk1PREUxLCBSRUdVTEFUT1JTRVRUSU5HMSwJXAorCQkJICAgIG1jMTM3ODNfdnJmX3ZhbCksCisJTUMxMzc4M19ERUZJTkVfUkVHVShWTU1DMSwgUkVHVUxBVE9STU9ERTEsIFJFR1VMQVRPUlNFVFRJTkcxLAlcCisJCQkgICAgbWMxMzc4M192bW1jX3ZhbCksCisJTUMxMzc4M19ERUZJTkVfUkVHVShWTU1DMiwgUkVHVUxBVE9STU9ERTEsIFJFR1VMQVRPUlNFVFRJTkcxLAlcCisJCQkgICAgbWMxMzc4M192bW1jX3ZhbCksCisJTUMxMzc4M19HUE9fREVGSU5FKFJFR1UsIEdQTzEsIFBPV0VSTUlTQywgbWMxMzc4M19ncG9fdmFsKSwKKwlNQzEzNzgzX0dQT19ERUZJTkUoUkVHVSwgR1BPMiwgUE9XRVJNSVNDLCBtYzEzNzgzX2dwb192YWwpLAorCU1DMTM3ODNfR1BPX0RFRklORShSRUdVLCBHUE8zLCBQT1dFUk1JU0MsIG1jMTM3ODNfZ3BvX3ZhbCksCisJTUMxMzc4M19HUE9fREVGSU5FKFJFR1UsIEdQTzQsIFBPV0VSTUlTQywgbWMxMzc4M19ncG9fdmFsKSwKKwlNQzEzNzgzX0dQT19ERUZJTkUoUkVHVSwgUFdHVDFTUEksIFBPV0VSTUlTQywgbWMxMzc4M19wd2d0ZHJ2X3ZhbCksCisJTUMxMzc4M19HUE9fREVGSU5FKFJFR1UsIFBXR1QyU1BJLCBQT1dFUk1JU0MsIG1jMTM3ODNfcHdndGRydl92YWwpLAogfTsKIAogc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX3ByaXYgewogCXN0cnVjdCBtYzEzNzgzICptYzEzNzgzOworCXUzMiBwb3dlcm1pc2NfcHdndF9zdGF0ZTsKIAlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmVndWxhdG9yc1tdOwogfTsKIApAQCAtMTU0LDEwICszMjgsMjQxIEBACiAJcmV0dXJuICh2YWwgJiBtYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLmVuYWJsZV9iaXQpICE9IDA7CiB9CiAKK3N0YXRpYyBpbnQgbWMxMzc4M19yZWd1bGF0b3JfbGlzdF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCQkJdW5zaWduZWQgc2VsZWN0b3IpCit7CisJaW50IGlkID0gcmRldl9nZXRfaWQocmRldik7CisKKwlpZiAoc2VsZWN0b3IgPj0gbWMxMzc4M19yZWd1bGF0b3JzW2lkXS5kZXNjLm5fdm9sdGFnZXMpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIG1jMTM3ODNfcmVndWxhdG9yc1tpZF0udm9sdGFnZXNbc2VsZWN0b3JdOworfQorCitzdGF0aWMgaW50IG1jMTM3ODNfZ2V0X2Jlc3Rfdm9sdGFnZV9pbmRleChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKKwkJCQkJCWludCBtaW5fdVYsIGludCBtYXhfdVYpCit7CisJaW50IHJlZ19pZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCWludCBpOworCWludCBiZXN0bWF0Y2g7CisJaW50IGJlc3RpbmRleDsKKworCS8qCisJICogTG9jYXRlIHRoZSBtaW5pbXVtIHZvbHRhZ2UgZml0dGluZyB0aGUgY3JpdGVyaWEgb24KKwkgKiB0aGlzIHJlZ3VsYXRvci4gVGhlIHN3aXRjaGFibGUgdm9sdGFnZXMgYXJlIG5vdAorCSAqIGluIHN0cmljdCBmYWxsaW5nIG9yZGVyIHNvIHdlIG5lZWQgdG8gY2hlY2sgdGhlbQorCSAqIGFsbCBmb3IgdGhlIGJlc3QgbWF0Y2guCisJICovCisJYmVzdG1hdGNoID0gSU5UX01BWDsKKwliZXN0aW5kZXggPSAtMTsKKwlmb3IgKGkgPSAwOyBpIDwgbWMxMzc4M19yZWd1bGF0b3JzW3JlZ19pZF0uZGVzYy5uX3ZvbHRhZ2VzOyBpKyspIHsKKwkJaWYgKG1jMTM3ODNfcmVndWxhdG9yc1tyZWdfaWRdLnZvbHRhZ2VzW2ldID49IG1pbl91ViAmJgorCQkgICAgbWMxMzc4M19yZWd1bGF0b3JzW3JlZ19pZF0udm9sdGFnZXNbaV0gPCBiZXN0bWF0Y2gpIHsKKwkJCWJlc3RtYXRjaCA9IG1jMTM3ODNfcmVndWxhdG9yc1tyZWdfaWRdLnZvbHRhZ2VzW2ldOworCQkJYmVzdGluZGV4ID0gaTsKKwkJfQorCX0KKworCWlmIChiZXN0aW5kZXggPCAwIHx8IGJlc3RtYXRjaCA+IG1heF91VikgeworCQlkZXZfd2FybigmcmRldi0+ZGV2LCAibm8gcG9zc2libGUgdmFsdWUgZm9yICVkPD14PD0lZCB1VlxuIiwKKwkJCQltaW5fdVYsIG1heF91Vik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gYmVzdGluZGV4OworfQorCitzdGF0aWMgaW50IG1jMTM3ODNfcmVndWxhdG9yX3NldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2LAorCQkJCQkJaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlzdHJ1Y3QgbWMxMzc4M19yZWd1bGF0b3JfcHJpdiAqcHJpdiA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHZhbHVlLCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCWludCByZXQ7CisKKwlkZXZfZGJnKHJkZXZfZ2V0X2RldihyZGV2KSwgIiVzIGlkOiAlZCBtaW5fdVY6ICVkIG1heF91VjogJWRcbiIsCisJCV9fZnVuY19fLCBpZCwgbWluX3VWLCBtYXhfdVYpOworCisJLyogRmluZCB0aGUgYmVzdCBpbmRleCAqLworCXZhbHVlID0gbWMxMzc4M19nZXRfYmVzdF92b2x0YWdlX2luZGV4KHJkZXYsIG1pbl91ViwgbWF4X3VWKTsKKwlkZXZfZGJnKHJkZXZfZ2V0X2RldihyZGV2KSwgIiVzIGJlc3QgdmFsdWU6ICVkIFxuIiwgX19mdW5jX18sIHZhbHVlKTsKKwlpZiAodmFsdWUgPCAwKQorCQlyZXR1cm4gdmFsdWU7CisKKwltYzEzNzgzX2xvY2socHJpdi0+bWMxMzc4Myk7CisJcmV0ID0gbWMxMzc4M19yZWdfcm13KHByaXYtPm1jMTM3ODMsIG1jMTM3ODNfcmVndWxhdG9yc1tpZF0udnNlbF9yZWcsCisJCQltYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLnZzZWxfbWFzaywKKwkJCXZhbHVlIDw8IG1jMTM3ODNfcmVndWxhdG9yc1tpZF0udnNlbF9zaGlmdCk7CisJbWMxMzc4M191bmxvY2socHJpdi0+bWMxMzc4Myk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1jMTM3ODNfcmVndWxhdG9yX2dldF92b2x0YWdlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9wcml2ICpwcml2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgcmV0LCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCXVuc2lnbmVkIGludCB2YWw7CisKKwlkZXZfZGJnKHJkZXZfZ2V0X2RldihyZGV2KSwgIiVzIGlkOiAlZFxuIiwgX19mdW5jX18sIGlkKTsKKworCW1jMTM3ODNfbG9jayhwcml2LT5tYzEzNzgzKTsKKwlyZXQgPSBtYzEzNzgzX3JlZ19yZWFkKHByaXYtPm1jMTM3ODMsCisJCQkJbWMxMzc4M19yZWd1bGF0b3JzW2lkXS52c2VsX3JlZywgJnZhbCk7CisJbWMxMzc4M191bmxvY2socHJpdi0+bWMxMzc4Myk7CisKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJdmFsID0gKHZhbCAmIG1jMTM3ODNfcmVndWxhdG9yc1tpZF0udnNlbF9tYXNrKQorCQk+PiBtYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLnZzZWxfc2hpZnQ7CisKKwlkZXZfZGJnKHJkZXZfZ2V0X2RldihyZGV2KSwgIiVzIGlkOiAlZCB2YWw6ICVkXG4iLCBfX2Z1bmNfXywgaWQsIHZhbCk7CisKKwlCVUdfT04odmFsIDwgMCB8fCB2YWwgPiBtYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLmRlc2Mubl92b2x0YWdlcyk7CisKKwlyZXR1cm4gbWMxMzc4M19yZWd1bGF0b3JzW2lkXS52b2x0YWdlc1t2YWxdOworfQorCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWMxMzc4M19yZWd1bGF0b3Jfb3BzID0gewogCS5lbmFibGUgPSBtYzEzNzgzX3JlZ3VsYXRvcl9lbmFibGUsCiAJLmRpc2FibGUgPSBtYzEzNzgzX3JlZ3VsYXRvcl9kaXNhYmxlLAogCS5pc19lbmFibGVkID0gbWMxMzc4M19yZWd1bGF0b3JfaXNfZW5hYmxlZCwKKwkubGlzdF92b2x0YWdlID0gbWMxMzc4M19yZWd1bGF0b3JfbGlzdF92b2x0YWdlLAorCS5zZXRfdm9sdGFnZSA9IG1jMTM3ODNfcmVndWxhdG9yX3NldF92b2x0YWdlLAorCS5nZXRfdm9sdGFnZSA9IG1jMTM3ODNfcmVndWxhdG9yX2dldF92b2x0YWdlLAorfTsKKworc3RhdGljIGludCBtYzEzNzgzX2ZpeGVkX3JlZ3VsYXRvcl9zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKKwkJCQkJCWludCBtaW5fdVYsIGludCBtYXhfdVYpCit7CisJaW50IGlkID0gcmRldl9nZXRfaWQocmRldik7CisKKwlkZXZfZGJnKHJkZXZfZ2V0X2RldihyZGV2KSwgIiVzIGlkOiAlZCBtaW5fdVY6ICVkIG1heF91VjogJWRcbiIsCisJCV9fZnVuY19fLCBpZCwgbWluX3VWLCBtYXhfdVYpOworCisJaWYgKG1pbl91ViA+IG1jMTM3ODNfcmVndWxhdG9yc1tpZF0udm9sdGFnZXNbMF0gJiYKKwkgICAgbWF4X3VWIDwgbWMxMzc4M19yZWd1bGF0b3JzW2lkXS52b2x0YWdlc1swXSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCBtYzEzNzgzX2ZpeGVkX3JlZ3VsYXRvcl9nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKKworCWRldl9kYmcocmRldl9nZXRfZGV2KHJkZXYpLCAiJXMgaWQ6ICVkXG4iLCBfX2Z1bmNfXywgaWQpOworCisJcmV0dXJuIG1jMTM3ODNfcmVndWxhdG9yc1tpZF0udm9sdGFnZXNbMF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyBtYzEzNzgzX2ZpeGVkX3JlZ3VsYXRvcl9vcHMgPSB7CisJLmVuYWJsZSA9IG1jMTM3ODNfcmVndWxhdG9yX2VuYWJsZSwKKwkuZGlzYWJsZSA9IG1jMTM3ODNfcmVndWxhdG9yX2Rpc2FibGUsCisJLmlzX2VuYWJsZWQgPSBtYzEzNzgzX3JlZ3VsYXRvcl9pc19lbmFibGVkLAorCS5saXN0X3ZvbHRhZ2UgPSBtYzEzNzgzX3JlZ3VsYXRvcl9saXN0X3ZvbHRhZ2UsCisJLnNldF92b2x0YWdlID0gbWMxMzc4M19maXhlZF9yZWd1bGF0b3Jfc2V0X3ZvbHRhZ2UsCisJLmdldF92b2x0YWdlID0gbWMxMzc4M19maXhlZF9yZWd1bGF0b3JfZ2V0X3ZvbHRhZ2UsCit9OworCitpbnQgbWMxMzc4M19wb3dlcm1pc2Nfcm13KHN0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9wcml2ICpwcml2LCB1MzIgbWFzaywKKwkJCQkJCQkJCXUzMiB2YWwpCit7CisJc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMgPSBwcml2LT5tYzEzNzgzOworCWludCByZXQ7CisJdTMyIHZhbHJlYWQ7CisKKwlCVUdfT04odmFsICYgfm1hc2spOworCisJcmV0ID0gbWMxMzc4M19yZWdfcmVhZChtYzEzNzgzLCBNQzEzNzgzX1JFR19QT1dFUk1JU0MsICZ2YWxyZWFkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogVXBkYXRlIHRoZSBzdG9yZWQgc3RhdGUgZm9yIFBvd2VyIEdhdGVzLiAqLworCXByaXYtPnBvd2VybWlzY19wd2d0X3N0YXRlID0KKwkJCQkocHJpdi0+cG93ZXJtaXNjX3B3Z3Rfc3RhdGUgJiB+bWFzaykgfCB2YWw7CisJcHJpdi0+cG93ZXJtaXNjX3B3Z3Rfc3RhdGUgJj0gTUMxMzc4M19SRUdfUE9XRVJNSVNDX1BXR1RTUElfTTsKKworCS8qIENvbnN0cnVjdCB0aGUgbmV3IHJlZ2lzdGVyIHZhbHVlICovCisJdmFscmVhZCA9ICh2YWxyZWFkICYgfm1hc2spIHwgdmFsOworCS8qIE92ZXJ3cml0ZSB0aGUgUFdHVHhFTiB3aXRoIHRoZSBzdG9yZWQgdmVyc2lvbiAqLworCXZhbHJlYWQgPSAodmFscmVhZCAmIH5NQzEzNzgzX1JFR19QT1dFUk1JU0NfUFdHVFNQSV9NKSB8CisJCQkJCQlwcml2LT5wb3dlcm1pc2NfcHdndF9zdGF0ZTsKKworCXJldHVybiBtYzEzNzgzX3JlZ193cml0ZShtYzEzNzgzLCBNQzEzNzgzX1JFR19QT1dFUk1JU0MsIHZhbHJlYWQpOworfQorCitzdGF0aWMgaW50IG1jMTM3ODNfZ3BvX3JlZ3VsYXRvcl9lbmFibGUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX3ByaXYgKnByaXYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCBpZCA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCWludCByZXQ7CisJdTMyIGVuX3ZhbCA9IG1jMTM3ODNfcmVndWxhdG9yc1tpZF0uZW5hYmxlX2JpdDsKKworCWRldl9kYmcocmRldl9nZXRfZGV2KHJkZXYpLCAiJXMgaWQ6ICVkXG4iLCBfX2Z1bmNfXywgaWQpOworCisJLyogUG93ZXIgR2F0ZSBlbmFibGUgdmFsdWUgaXMgMCAqLworCWlmIChpZCA9PSBNQzEzNzgzX1JFR1VfUFdHVDFTUEkgfHwKKwkgICAgaWQgPT0gTUMxMzc4M19SRUdVX1BXR1QyU1BJKQorCQllbl92YWwgPSAwOworCisJbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOworCXJldCA9IG1jMTM3ODNfcG93ZXJtaXNjX3Jtdyhwcml2LCBtYzEzNzgzX3JlZ3VsYXRvcnNbaWRdLmVuYWJsZV9iaXQsCisJCQkJCWVuX3ZhbCk7CisJbWMxMzc4M191bmxvY2socHJpdi0+bWMxMzc4Myk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1jMTM3ODNfZ3BvX3JlZ3VsYXRvcl9kaXNhYmxlKHN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2KQoreworCXN0cnVjdCBtYzEzNzgzX3JlZ3VsYXRvcl9wcml2ICpwcml2ID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgaWQgPSByZGV2X2dldF9pZChyZGV2KTsKKwlpbnQgcmV0OworCXUzMiBkaXNfdmFsID0gMDsKKworCWRldl9kYmcocmRldl9nZXRfZGV2KHJkZXYpLCAiJXMgaWQ6ICVkXG4iLCBfX2Z1bmNfXywgaWQpOworCisJLyogUG93ZXIgR2F0ZSBkaXNhYmxlIHZhbHVlIGlzIDEgKi8KKwlpZiAoaWQgPT0gTUMxMzc4M19SRUdVX1BXR1QxU1BJIHx8CisJICAgIGlkID09IE1DMTM3ODNfUkVHVV9QV0dUMlNQSSkKKwkJZGlzX3ZhbCA9IG1jMTM3ODNfcmVndWxhdG9yc1tpZF0uZW5hYmxlX2JpdDsKKworCW1jMTM3ODNfbG9jayhwcml2LT5tYzEzNzgzKTsKKwlyZXQgPSBtYzEzNzgzX3Bvd2VybWlzY19ybXcocHJpdiwgbWMxMzc4M19yZWd1bGF0b3JzW2lkXS5lbmFibGVfYml0LAorCQkJCQlkaXNfdmFsKTsKKwltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbWMxMzc4M19ncG9fcmVndWxhdG9yX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IG1jMTM3ODNfcmVndWxhdG9yX3ByaXYgKnByaXYgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCByZXQsIGlkID0gcmRldl9nZXRfaWQocmRldik7CisJdW5zaWduZWQgaW50IHZhbDsKKworCW1jMTM3ODNfbG9jayhwcml2LT5tYzEzNzgzKTsKKwlyZXQgPSBtYzEzNzgzX3JlZ19yZWFkKHByaXYtPm1jMTM3ODMsIG1jMTM3ODNfcmVndWxhdG9yc1tpZF0ucmVnLCAmdmFsKTsKKwltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKKworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBQb3dlciBHYXRlcyBzdGF0ZSBpcyBzdG9yZWQgaW4gcG93ZXJtaXNjX3B3Z3Rfc3RhdGUKKwkgKiB3aGVyZSB0aGUgbWVhbmluZyBvZiBiaXRzIGlzIG5lZ2F0ZWQgKi8KKwl2YWwgPSAodmFsICYgfk1DMTM3ODNfUkVHX1BPV0VSTUlTQ19QV0dUU1BJX00pIHwKKwkgICAgICAocHJpdi0+cG93ZXJtaXNjX3B3Z3Rfc3RhdGUgXiBNQzEzNzgzX1JFR19QT1dFUk1JU0NfUFdHVFNQSV9NKTsKKworCXJldHVybiAodmFsICYgbWMxMzc4M19yZWd1bGF0b3JzW2lkXS5lbmFibGVfYml0KSAhPSAwOworfQorCitzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcl9vcHMgbWMxMzc4M19ncG9fcmVndWxhdG9yX29wcyA9IHsKKwkuZW5hYmxlID0gbWMxMzc4M19ncG9fcmVndWxhdG9yX2VuYWJsZSwKKwkuZGlzYWJsZSA9IG1jMTM3ODNfZ3BvX3JlZ3VsYXRvcl9kaXNhYmxlLAorCS5pc19lbmFibGVkID0gbWMxMzc4M19ncG9fcmVndWxhdG9yX2lzX2VuYWJsZWQsCisJLmxpc3Rfdm9sdGFnZSA9IG1jMTM3ODNfcmVndWxhdG9yX2xpc3Rfdm9sdGFnZSwKKwkuc2V0X3ZvbHRhZ2UgPSBtYzEzNzgzX2ZpeGVkX3JlZ3VsYXRvcl9zZXRfdm9sdGFnZSwKKwkuZ2V0X3ZvbHRhZ2UgPSBtYzEzNzgzX2ZpeGVkX3JlZ3VsYXRvcl9nZXRfdm9sdGFnZSwKIH07CiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IG1jMTM3ODNfcmVndWxhdG9yX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci9wY2FwLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvcGNhcC1yZWd1bGF0b3IuYwppbmRleCAzM2Q3ZDg5Li4yOWQwNTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci9wY2FwLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3BjYXAtcmVndWxhdG9yLmMKQEAgLTI4OCwxNiArMjg4LDE4IEBACiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAogCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHJkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHBjYXBfcmVndWxhdG9yX2RyaXZlciA9IHsKIAkuZHJpdmVyID0gewotCQkubmFtZSA9ICJwY2FwLXJlZ3VsYXRvciIsCisJCS5uYW1lCT0gInBjYXAtcmVndWxhdG9yIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKLQkucHJvYmUgPSBwY2FwX3JlZ3VsYXRvcl9wcm9iZSwKLQkucmVtb3ZlID0gX19kZXZleGl0X3AocGNhcF9yZWd1bGF0b3JfcmVtb3ZlKSwKKwkucHJvYmUJPSBwY2FwX3JlZ3VsYXRvcl9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AocGNhcF9yZWd1bGF0b3JfcmVtb3ZlKSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHBjYXBfcmVndWxhdG9yX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDIzLXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUwMjMtcmVndWxhdG9yLmMKaW5kZXggMDdmZGEwYS4uMWYxODM1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUwMjMtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUwMjMtcmVndWxhdG9yLmMKQEAgLTQ1Nyw4ICs0NTcsOCBAQAogCS5saXN0X3ZvbHRhZ2UgPSB0cHM2NTAyM19sZG9fbGlzdF92b2x0YWdlLAogfTsKIAotc3RhdGljCi1pbnQgdHBzXzY1MDIzX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRwc182NTAyM19wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0YXRpYyBpbnQgZGVzY19pZDsKIAljb25zdCBzdHJ1Y3QgdHBzX2luZm8gKmluZm8gPSAodm9pZCAqKWlkLT5kcml2ZXJfZGF0YTsKQEAgLTQ2Niw2ICs0NjYsNyBAQAogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OwogCXN0cnVjdCB0cHNfcG1pYyAqdHBzOwogCWludCBpOworCWludCBlcnJvcjsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQogCQlyZXR1cm4gLUVJTzsKQEAgLTQ3NSw3ICs0NzYsNiBAQAogCSAqIGNvbWluZyBmcm9tIHRoZSBib2FyZC1ldm0gZmlsZS4KIAkgKi8KIAlpbml0X2RhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwotCiAJaWYgKCFpbml0X2RhdGEpCiAJCXJldHVybiAtRUlPOwogCkBAIC01MDIsMjEgKzUwMiwxMiBAQAogCiAJCS8qIFJlZ2lzdGVyIHRoZSByZWd1bGF0b3JzICovCiAJCXJkZXYgPSByZWd1bGF0b3JfcmVnaXN0ZXIoJnRwcy0+ZGVzY1tpXSwgJmNsaWVudC0+ZGV2LAotCQkJCQkJCQlpbml0X2RhdGEsIHRwcyk7CisJCQkJCSAgaW5pdF9kYXRhLCB0cHMpOwogCQlpZiAoSVNfRVJSKHJkZXYpKSB7CiAJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciAlc1xuIiwKIAkJCQlpZC0+bmFtZSk7Ci0KLQkJCS8qIFVucmVnaXN0ZXIgKi8KLQkJCXdoaWxlIChpKQotCQkJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHRwcy0+cmRldlstLWldKTsKLQotCQkJdHBzLT5jbGllbnQgPSBOVUxMOwotCi0JCQkvKiBjbGVhciB0aGUgY2xpZW50IGRhdGEgaW4gaTJjICovCi0JCQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKLQkJCWtmcmVlKHRwcyk7Ci0JCQlyZXR1cm4gUFRSX0VSUihyZGV2KTsKKwkJCWVycm9yID0gUFRSX0VSUihyZGV2KTsKKwkJCWdvdG8gZmFpbDsKIAkJfQogCiAJCS8qIFNhdmUgcmVndWxhdG9yIGZvciBjbGVhbnVwICovCkBAIC01MjYsNiArNTE3LDEzIEBACiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdHBzKTsKIAogCXJldHVybiAwOworCisgZmFpbDoKKwl3aGlsZSAoLS1pID49IDApCisJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHRwcy0+cmRldltpXSk7CisKKwlrZnJlZSh0cHMpOworCXJldHVybiBlcnJvcjsKIH0KIAogLyoqCkBAIC01MzksMTMgKzUzNywxMiBAQAogCXN0cnVjdCB0cHNfcG1pYyAqdHBzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaW50IGk7CiAKKwkvKiBjbGVhciB0aGUgY2xpZW50IGRhdGEgaW4gaTJjICovCisJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7CisKIAlmb3IgKGkgPSAwOyBpIDwgVFBTNjUwMjNfTlVNX1JFR1VMQVRPUjsgaSsrKQogCQlyZWd1bGF0b3JfdW5yZWdpc3Rlcih0cHMtPnJkZXZbaV0pOwogCi0JdHBzLT5jbGllbnQgPSBOVUxMOwotCi0JLyogY2xlYXIgdGhlIGNsaWVudCBkYXRhIGluIGkyYyAqLwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOwogCWtmcmVlKHRwcyk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3RwczY1MDd4LXJlZ3VsYXRvci5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUwN3gtcmVndWxhdG9yLmMKaW5kZXggZjhhNmRmYi4uYzJhOTUzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUwN3gtcmVndWxhdG9yLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3IvdHBzNjUwN3gtcmVndWxhdG9yLmMKQEAgLTUzOCw4ICs1MzgsOCBAQAogCS5saXN0X3ZvbHRhZ2UgPSB0cHM2NTA3eF9sZG9fbGlzdF92b2x0YWdlLAogfTsKIAotc3RhdGljCi1pbnQgdHBzXzY1MDd4X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBpbnQgX19kZXZpbml0IHRwc182NTA3eF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJCSAgICAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0YXRpYyBpbnQgZGVzY19pZDsKIAljb25zdCBzdHJ1Y3QgdHBzX2luZm8gKmluZm8gPSAodm9pZCAqKWlkLT5kcml2ZXJfZGF0YTsKQEAgLTU0Nyw2ICs1NDcsNyBAQAogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2OwogCXN0cnVjdCB0cHNfcG1pYyAqdHBzOwogCWludCBpOworCWludCBlcnJvcjsKIAogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLAogCQkJCUkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCkBAIC01NTcsNyArNTU4LDYgQEAKIAkgKiBjb21pbmcgZnJvbSB0aGUgYm9hcmQtZXZtIGZpbGUuCiAJICovCiAJaW5pdF9kYXRhID0gY2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKLQogCWlmICghaW5pdF9kYXRhKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtNTg2LDE4ICs1ODYsOCBAQAogCQlpZiAoSVNfRVJSKHJkZXYpKSB7CiAJCQlkZXZfZXJyKCZjbGllbnQtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciAlc1xuIiwKIAkJCQlpZC0+bmFtZSk7Ci0KLQkJCS8qIFVucmVnaXN0ZXIgKi8KLQkJCXdoaWxlIChpKQotCQkJCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHRwcy0+cmRldlstLWldKTsKLQotCQkJdHBzLT5jbGllbnQgPSBOVUxMOwotCi0JCQkvKiBjbGVhciB0aGUgY2xpZW50IGRhdGEgaW4gaTJjICovCi0JCQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKLQotCQkJa2ZyZWUodHBzKTsKLQkJCXJldHVybiBQVFJfRVJSKHJkZXYpOworCQkJZXJyb3IgPSBQVFJfRVJSKHJkZXYpOworCQkJZ290byBmYWlsOwogCQl9CiAKIAkJLyogU2F2ZSByZWd1bGF0b3IgZm9yIGNsZWFudXAgKi8KQEAgLTYwNyw2ICs1OTcsMTMgQEAKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCB0cHMpOwogCiAJcmV0dXJuIDA7CisKK2ZhaWw6CisJd2hpbGUgKC0taSA+PSAwKQorCQlyZWd1bGF0b3JfdW5yZWdpc3Rlcih0cHMtPnJkZXZbaV0pOworCisJa2ZyZWUodHBzKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qKgpAQCAtNjIwLDEzICs2MTcsMTIgQEAKIAlzdHJ1Y3QgdHBzX3BtaWMgKnRwcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBpOwogCisJLyogY2xlYXIgdGhlIGNsaWVudCBkYXRhIGluIGkyYyAqLworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIE5VTEwpOworCiAJZm9yIChpID0gMDsgaSA8IFRQUzY1MDdYX05VTV9SRUdVTEFUT1I7IGkrKykKIAkJcmVndWxhdG9yX3VucmVnaXN0ZXIodHBzLT5yZGV2W2ldKTsKIAotCXRwcy0+Y2xpZW50ID0gTlVMTDsKLQotCS8qIGNsZWFyIHRoZSBjbGllbnQgZGF0YSBpbiBpMmMgKi8KLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKIAlrZnJlZSh0cHMpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci90d2wtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci90d2wtcmVndWxhdG9yLmMKaW5kZXggN2U2NzQ4NS4uOTcyOWQ3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3IvdHdsLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3R3bC1yZWd1bGF0b3IuYwpAQCAtNTE5LDE5ICs1MTksMTkgQEAKIAkvKiA2MDMwIFJFRyB3aXRoIGJhc2UgYXMgUE1DIFNsYXZlIE1pc2MgOiAweDAwMzAgKi8KIAkvKiBUdXJub24tZGVsYXkgYW5kIHJlbWFwIGNvbmZpZ3VyYXRpb24gdmFsdWVzIGZvciA2MDMwIGFyZSBub3QKIAkgICB2ZXJpZmllZCBzaW5jZSB0aGUgc3BlY2lmaWNhdGlvbiBpcyBub3QgcHVibGljICovCi0JVFdMNjAzMF9BREpVU1RBQkxFX0xETyhWQVVYMV82MDMwLCAweDU0LCAxLCAwLCAweDA4KSwKLQlUV0w2MDMwX0FESlVTVEFCTEVfTERPKFZBVVgyXzYwMzAsIDB4NTgsIDIsIDAsIDB4MDgpLAotCVRXTDYwMzBfQURKVVNUQUJMRV9MRE8oVkFVWDNfNjAzMCwgMHg1YywgMywgMCwgMHgwOCksCi0JVFdMNjAzMF9BREpVU1RBQkxFX0xETyhWTU1DLCAweDY4LCA0LCAwLCAweDA4KSwKLQlUV0w2MDMwX0FESlVTVEFCTEVfTERPKFZQUCwgMHg2YywgNSwgMCwgMHgwOCksCi0JVFdMNjAzMF9BREpVU1RBQkxFX0xETyhWVVNJTSwgMHg3NCwgNywgMCwgMHgwOCksCi0JVFdMNjAzMF9GSVhFRF9MRE8oVkFOQSwgMHg1MCwgMjEwMCwgMTUsIDAsIDB4MDgpLAotCVRXTDYwMzBfRklYRURfTERPKFZDWElPLCAweDYwLCAxODAwLCAxNiwgMCwgMHgwOCksCi0JVFdMNjAzMF9GSVhFRF9MRE8oVkRBQywgMHg2NCwgMTgwMCwgMTcsIDAsIDB4MDgpLAotCVRXTDYwMzBfRklYRURfTERPKFZVU0IsIDB4NzAsIDMzMDAsIDE4LCAwLCAweDA4KQorCVRXTDYwMzBfQURKVVNUQUJMRV9MRE8oVkFVWDFfNjAzMCwgMHg1NCwgMSwgMCwgMHgyMSksCisJVFdMNjAzMF9BREpVU1RBQkxFX0xETyhWQVVYMl82MDMwLCAweDU4LCAyLCAwLCAweDIxKSwKKwlUV0w2MDMwX0FESlVTVEFCTEVfTERPKFZBVVgzXzYwMzAsIDB4NWMsIDMsIDAsIDB4MjEpLAorCVRXTDYwMzBfQURKVVNUQUJMRV9MRE8oVk1NQywgMHg2OCwgNCwgMCwgMHgyMSksCisJVFdMNjAzMF9BREpVU1RBQkxFX0xETyhWUFAsIDB4NmMsIDUsIDAsIDB4MjEpLAorCVRXTDYwMzBfQURKVVNUQUJMRV9MRE8oVlVTSU0sIDB4NzQsIDcsIDAsIDB4MjEpLAorCVRXTDYwMzBfRklYRURfTERPKFZBTkEsIDB4NTAsIDIxMDAsIDE1LCAwLCAweDIxKSwKKwlUV0w2MDMwX0ZJWEVEX0xETyhWQ1hJTywgMHg2MCwgMTgwMCwgMTYsIDAsIDB4MjEpLAorCVRXTDYwMzBfRklYRURfTERPKFZEQUMsIDB4NjQsIDE4MDAsIDE3LCAwLCAweDIxKSwKKwlUV0w2MDMwX0ZJWEVEX0xETyhWVVNCLCAweDcwLCAzMzAwLCAxOCwgMCwgMHgyMSkKIH07CiAKLXN0YXRpYyBpbnQgdHdscmVnX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB0d2xyZWdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQJCQkJaTsKIAlzdHJ1Y3QgdHdscmVnX2luZm8JCSppbmZvOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3IvdmlydHVhbC5jIGIvZHJpdmVycy9yZWd1bGF0b3IvdmlydHVhbC5jCmluZGV4IGFkZGMwMzIuLmQ5NmNlY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcmVndWxhdG9yL3ZpcnR1YWwuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci92aXJ0dWFsLmMKQEAgLTE5LDcgKzE5LDcgQEAKIHN0cnVjdCB2aXJ0dWFsX2NvbnN1bWVyX2RhdGEgewogCXN0cnVjdCBtdXRleCBsb2NrOwogCXN0cnVjdCByZWd1bGF0b3IgKnJlZ3VsYXRvcjsKLQlpbnQgZW5hYmxlZDsKKwlib29sIGVuYWJsZWQ7CiAJaW50IG1pbl91VjsKIAlpbnQgbWF4X3VWOwogCWludCBtaW5fdUE7CkBAIC00OSw3ICs0OSw3IEBACiAJCWRldl9kYmcoZGV2LCAiRW5hYmxpbmcgcmVndWxhdG9yXG4iKTsKIAkJcmV0ID0gcmVndWxhdG9yX2VuYWJsZShkYXRhLT5yZWd1bGF0b3IpOwogCQlpZiAocmV0ID09IDApCi0JCQlkYXRhLT5lbmFibGVkID0gMTsKKwkJCWRhdGEtPmVuYWJsZWQgPSB0cnVlOwogCQllbHNlCiAJCQlkZXZfZXJyKGRldiwgInJlZ3VsYXRvcl9lbmFibGUoKSBmYWlsZWQ6ICVkXG4iLAogCQkJCXJldCk7CkBAIC01OSw3ICs1OSw3IEBACiAJCWRldl9kYmcoZGV2LCAiRGlzYWJsaW5nIHJlZ3VsYXRvclxuIik7CiAJCXJldCA9IHJlZ3VsYXRvcl9kaXNhYmxlKGRhdGEtPnJlZ3VsYXRvcik7CiAJCWlmIChyZXQgPT0gMCkKLQkJCWRhdGEtPmVuYWJsZWQgPSAwOworCQkJZGF0YS0+ZW5hYmxlZCA9IGZhbHNlOwogCQllbHNlCiAJCQlkZXZfZXJyKGRldiwgInJlZ3VsYXRvcl9kaXNhYmxlKCkgZmFpbGVkOiAlZFxuIiwKIAkJCQlyZXQpOwpAQCAtODksNyArODksNyBAQAogCQlkZXZfZGJnKGRldiwgIkVuYWJsaW5nIHJlZ3VsYXRvclxuIik7CiAJCXJldCA9IHJlZ3VsYXRvcl9lbmFibGUoZGF0YS0+cmVndWxhdG9yKTsKIAkJaWYgKHJldCA9PSAwKQotCQkJZGF0YS0+ZW5hYmxlZCA9IDE7CisJCQlkYXRhLT5lbmFibGVkID0gdHJ1ZTsKIAkJZWxzZQogCQkJZGV2X2VycihkZXYsICJyZWd1bGF0b3JfZW5hYmxlKCkgZmFpbGVkOiAlZFxuIiwKIAkJCQlyZXQpOwpAQCAtOTksNyArOTksNyBAQAogCQlkZXZfZGJnKGRldiwgIkRpc2FibGluZyByZWd1bGF0b3JcbiIpOwogCQlyZXQgPSByZWd1bGF0b3JfZGlzYWJsZShkYXRhLT5yZWd1bGF0b3IpOwogCQlpZiAocmV0ID09IDApCi0JCQlkYXRhLT5lbmFibGVkID0gMDsKKwkJCWRhdGEtPmVuYWJsZWQgPSBmYWxzZTsKIAkJZWxzZQogCQkJZGV2X2VycihkZXYsICJyZWd1bGF0b3JfZGlzYWJsZSgpIGZhaWxlZDogJWRcbiIsCiAJCQkJcmV0KTsKQEAgLTI3MCwyNCArMjcwLDI4IEBACiBzdGF0aWMgREVWSUNFX0FUVFIobWF4X21pY3JvYW1wcywgMDY2Niwgc2hvd19tYXhfdUEsIHNldF9tYXhfdUEpOwogc3RhdGljIERFVklDRV9BVFRSKG1vZGUsIDA2NjYsIHNob3dfbW9kZSwgc2V0X21vZGUpOwogCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHJpYnV0ZXNbXSA9IHsKLQkmZGV2X2F0dHJfbWluX21pY3Jvdm9sdHMsCi0JJmRldl9hdHRyX21heF9taWNyb3ZvbHRzLAotCSZkZXZfYXR0cl9taW5fbWljcm9hbXBzLAotCSZkZXZfYXR0cl9tYXhfbWljcm9hbXBzLAotCSZkZXZfYXR0cl9tb2RlLAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnJlZ3VsYXRvcl92aXJ0dWFsX2F0dHJpYnV0ZXNbXSA9IHsKKwkmZGV2X2F0dHJfbWluX21pY3Jvdm9sdHMuYXR0ciwKKwkmZGV2X2F0dHJfbWF4X21pY3Jvdm9sdHMuYXR0ciwKKwkmZGV2X2F0dHJfbWluX21pY3JvYW1wcy5hdHRyLAorCSZkZXZfYXR0cl9tYXhfbWljcm9hbXBzLmF0dHIsCisJJmRldl9hdHRyX21vZGUuYXR0ciwKKwlOVUxMCiB9OwogCi1zdGF0aWMgaW50IHJlZ3VsYXRvcl92aXJ0dWFsX2NvbnN1bWVyX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCByZWd1bGF0b3JfdmlydHVhbF9hdHRyX2dyb3VwID0geworCS5hdHRycwk9IHJlZ3VsYXRvcl92aXJ0dWFsX2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCByZWd1bGF0b3JfdmlydHVhbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWNoYXIgKnJlZ19pZCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXN0cnVjdCB2aXJ0dWFsX2NvbnN1bWVyX2RhdGEgKmRydmRhdGE7Ci0JaW50IHJldCwgaTsKKwlpbnQgcmV0OwogCiAJZHJ2ZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2aXJ0dWFsX2NvbnN1bWVyX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZHJ2ZGF0YSA9PSBOVUxMKSB7CisJaWYgKGRydmRhdGEgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JfQogCiAJbXV0ZXhfaW5pdCgmZHJ2ZGF0YS0+bG9jayk7CiAKQEAgLTI5OSwxMyArMzAzLDEyIEBACiAJCWdvdG8gZXJyOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF0dHJpYnV0ZXMpOyBpKyspIHsKLQkJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsIGF0dHJpYnV0ZXNbaV0pOwotCQlpZiAocmV0ICE9IDApIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBjcmVhdGUgYXR0ciAlZDogJWRcbiIsCi0JCQkJaSwgcmV0KTsKLQkJCWdvdG8gZXJyX3JlZ3VsYXRvcjsKLQkJfQorCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosCisJCQkJICZyZWd1bGF0b3JfdmlydHVhbF9hdHRyX2dyb3VwKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJIkZhaWxlZCB0byBjcmVhdGUgYXR0cmlidXRlIGdyb3VwOiAlZFxuIiwgcmV0KTsKKwkJZ290byBlcnJfcmVndWxhdG9yOwogCX0KIAogCWRydmRhdGEtPm1vZGUgPSByZWd1bGF0b3JfZ2V0X21vZGUoZHJ2ZGF0YS0+cmVndWxhdG9yKTsKQEAgLTMxNywzNyArMzIwLDM2IEBACiBlcnJfcmVndWxhdG9yOgogCXJlZ3VsYXRvcl9wdXQoZHJ2ZGF0YS0+cmVndWxhdG9yKTsKIGVycjoKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShhdHRyaWJ1dGVzKTsgaSsrKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwgYXR0cmlidXRlc1tpXSk7CiAJa2ZyZWUoZHJ2ZGF0YSk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCByZWd1bGF0b3JfdmlydHVhbF9jb25zdW1lcl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHJlZ3VsYXRvcl92aXJ0dWFsX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCB2aXJ0dWFsX2NvbnN1bWVyX2RhdGEgKmRydmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGF0dHJpYnV0ZXMpOyBpKyspCi0JCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCBhdHRyaWJ1dGVzW2ldKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmcmVndWxhdG9yX3ZpcnR1YWxfYXR0cl9ncm91cCk7CisKIAlpZiAoZHJ2ZGF0YS0+ZW5hYmxlZCkKIAkJcmVndWxhdG9yX2Rpc2FibGUoZHJ2ZGF0YS0+cmVndWxhdG9yKTsKIAlyZWd1bGF0b3JfcHV0KGRydmRhdGEtPnJlZ3VsYXRvcik7CiAKIAlrZnJlZShkcnZkYXRhKTsKIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHJlZ3VsYXRvcl92aXJ0dWFsX2NvbnN1bWVyX2RyaXZlciA9IHsKLQkucHJvYmUJCT0gcmVndWxhdG9yX3ZpcnR1YWxfY29uc3VtZXJfcHJvYmUsCi0JLnJlbW92ZQkJPSByZWd1bGF0b3JfdmlydHVhbF9jb25zdW1lcl9yZW1vdmUsCisJLnByb2JlCQk9IHJlZ3VsYXRvcl92aXJ0dWFsX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AocmVndWxhdG9yX3ZpcnR1YWxfcmVtb3ZlKSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJCT0gInJlZy12aXJ0LWNvbnN1bWVyIiwKKwkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCi0KIHN0YXRpYyBpbnQgX19pbml0IHJlZ3VsYXRvcl92aXJ0dWFsX2NvbnN1bWVyX2luaXQodm9pZCkKIHsKIAlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZyZWd1bGF0b3JfdmlydHVhbF9jb25zdW1lcl9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWRjZGMuYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1kY2RjLmMKaW5kZXggMGE2NTc3NS4uNmUxOGU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWRjZGMuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtZGNkYy5jCkBAIC02MDAsNiArNjAwLDggQEAKIAlzdHJ1Y3Qgd204MzF4X2RjZGMgKmRjZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBkY2RjLT53bTgzMXg7CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwogCXdtODMxeF9mcmVlX2lycSh3bTgzMXgsIHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJIQyIpLCBkY2RjKTsKIAl3bTgzMXhfZnJlZV9pcnEod204MzF4LCBwbGF0Zm9ybV9nZXRfaXJxX2J5bmFtZShwZGV2LCAiVVYiKSwgZGNkYyk7CiAJcmVndWxhdG9yX3VucmVnaXN0ZXIoZGNkYy0+cmVndWxhdG9yKTsKQEAgLTYxNSw2ICs2MTcsNyBAQAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3bTgzMXhfYnVja3ZfcmVtb3ZlKSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAid204MzF4LWJ1Y2t2IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKQEAgLTc2OSw2ICs3NzIsOCBAQAogCXN0cnVjdCB3bTgzMXhfZGNkYyAqZGNkYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCB3bTgzMXggKndtODMxeCA9IGRjZGMtPndtODMxeDsKIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCiAJd204MzF4X2ZyZWVfaXJxKHdtODMxeCwgcGxhdGZvcm1fZ2V0X2lycV9ieW5hbWUocGRldiwgIlVWIiksIGRjZGMpOwogCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKGRjZGMtPnJlZ3VsYXRvcik7CiAJa2ZyZWUoZGNkYyk7CkBAIC03ODEsNiArNzg2LDcgQEAKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aod204MzF4X2J1Y2twX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIndtODMxeC1idWNrcCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCkBAIC04OTUsNiArOTAxLDggQEAKIAlzdHJ1Y3Qgd204MzF4X2RjZGMgKmRjZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBkY2RjLT53bTgzMXg7CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwogCXdtODMxeF9mcmVlX2lycSh3bTgzMXgsIHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJVViIpLCBkY2RjKTsKIAlyZWd1bGF0b3JfdW5yZWdpc3RlcihkY2RjLT5yZWd1bGF0b3IpOwogCWtmcmVlKGRjZGMpOwpAQCAtOTA3LDYgKzkxNSw3IEBACiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHdtODMxeF9ib29zdHBfcmVtb3ZlKSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAid204MzF4LWJvb3N0cCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCkBAIC05NzksNiArOTg4LDggQEAKIHsKIAlzdHJ1Y3Qgd204MzF4X2RjZGMgKmRjZGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCiAJcmVndWxhdG9yX3VucmVnaXN0ZXIoZGNkYy0+cmVndWxhdG9yKTsKIAlrZnJlZShkY2RjKTsKIApAQCAtOTkwLDYgKzEwMDEsNyBAQAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3bTgzMXhfZXBlX3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gIndtODMxeC1lcGUiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWlzaW5rLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtaXNpbmsuYwppbmRleCA0ODg1NzAwLi5jYTBmNmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtaXNpbmsuYworKysgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtaXNpbmsuYwpAQCAtMjIyLDYgKzIyMiw4IEBACiAJc3RydWN0IHdtODMxeF9pc2luayAqaXNpbmsgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgd204MzF4ICp3bTgzMXggPSBpc2luay0+d204MzF4OwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisKIAl3bTgzMXhfZnJlZV9pcnEod204MzF4LCBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApLCBpc2luayk7CiAKIAlyZWd1bGF0b3JfdW5yZWdpc3Rlcihpc2luay0+cmVndWxhdG9yKTsKQEAgLTIzNSw2ICsyMzcsNyBAQAogCS5yZW1vdmUgPSBfX2RldmV4aXRfcCh3bTgzMXhfaXNpbmtfcmVtb3ZlKSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAid204MzF4LWlzaW5rIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJfSwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1sZG8uYyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODMxeC1sZG8uYwppbmRleCA2MWUwMmFjLi5kMjQwNmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzMXgtbGRvLmMKKysrIGIvZHJpdmVycy9yZWd1bGF0b3Ivd204MzF4LWxkby5jCkBAIC0zNzEsNiArMzcxLDggQEAKIAlzdHJ1Y3Qgd204MzF4X2xkbyAqbGRvID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHdtODMxeCAqd204MzF4ID0gbGRvLT53bTgzMXg7CiAKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwogCXdtODMxeF9mcmVlX2lycSh3bTgzMXgsIHBsYXRmb3JtX2dldF9pcnFfYnluYW1lKHBkZXYsICJVViIpLCBsZG8pOwogCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKGxkby0+cmVndWxhdG9yKTsKIAlrZnJlZShsZG8pOwpAQCAtMzgzLDYgKzM4NSw3IEBACiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHdtODMxeF9ncF9sZG9fcmVtb3ZlKSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAid204MzF4LWxkbyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCkBAIC02NDAsNiArNjQzLDcgQEAKIAkucmVtb3ZlID0gX19kZXZleGl0X3Aod204MzF4X2FsZG9fcmVtb3ZlKSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAid204MzF4LWFsZG8iLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAl9LAogfTsKIApAQCAtODExLDYgKzgxNSw3IEBACiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHdtODMxeF9hbGl2ZV9sZG9fcmVtb3ZlKSwKIAkuZHJpdmVyCQk9IHsKIAkJLm5hbWUJPSAid204MzF4LWFsaXZlLWxkbyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci93bTgzNTAtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTgzNTAtcmVndWxhdG9yLmMKaW5kZXggZTdiODllNy4uNzIzY2QxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3Ivd204MzUwLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODM1MC1yZWd1bGF0b3IuYwpAQCAtMjkwLDYgKzI5MCw1MSBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgaW50IHdtODM1MF9pc2lua19lbmFibGVfdGltZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCBpc2luayA9IHJkZXZfZ2V0X2lkKHJkZXYpOworCWludCByZWc7CisKKwlzd2l0Y2ggKGlzaW5rKSB7CisJY2FzZSBXTTgzNTBfSVNJTktfQToKKwkJcmVnID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0NTQV9GTEFTSF9DT05UUk9MKTsKKwkJYnJlYWs7CisJY2FzZSBXTTgzNTBfSVNJTktfQjoKKwkJcmVnID0gd204MzUwX3JlZ19yZWFkKHdtODM1MCwgV004MzUwX0NTQl9GTEFTSF9DT05UUk9MKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHJlZyAmIFdNODM1MF9DUzFfRkxBU0hfTU9ERSkgeworCQlzd2l0Y2ggKHJlZyAmIFdNODM1MF9DUzFfT05fUkFNUF9NQVNLKSB7CisJCWNhc2UgMDoKKwkJCXJldHVybiAwOworCQljYXNlIDE6CisJCQlyZXR1cm4gMTk1MDsKKwkJY2FzZSAyOgorCQkJcmV0dXJuIDM5MTA7CisJCWNhc2UgMzoKKwkJCXJldHVybiA3ODAwOworCQl9CisJfSBlbHNlIHsKKwkJc3dpdGNoIChyZWcgJiBXTTgzNTBfQ1MxX09OX1JBTVBfTUFTSykgeworCQljYXNlIDA6CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAxOgorCQkJcmV0dXJuIDI1MDAwMDsKKwkJY2FzZSAyOgorCQkJcmV0dXJuIDUwMDAwMDsKKwkJY2FzZSAzOgorCQkJcmV0dXJuIDEwMDAwMDA7CisJCX0KKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworCiBpbnQgd204MzUwX2lzaW5rX3NldF9mbGFzaChzdHJ1Y3Qgd204MzUwICp3bTgzNTAsIGludCBpc2luaywgdTE2IG1vZGUsCiAJCQkgICB1MTYgdHJpZ2dlciwgdTE2IGR1cmF0aW9uLCB1MTYgb25fcmFtcCwgdTE2IG9mZl9yYW1wLAogCQkJICAgdTE2IGRyaXZlKQpAQCAtMTIyMSw2ICsxMjY2LDcgQEAKIAkuZW5hYmxlID0gd204MzUwX2lzaW5rX2VuYWJsZSwKIAkuZGlzYWJsZSA9IHdtODM1MF9pc2lua19kaXNhYmxlLAogCS5pc19lbmFibGVkID0gd204MzUwX2lzaW5rX2lzX2VuYWJsZWQsCisJLmVuYWJsZV90aW1lID0gd204MzUwX2lzaW5rX2VuYWJsZV90aW1lLAogfTsKIAogc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfZGVzYyB3bTgzNTBfcmVnW05VTV9XTTgzNTBfUkVHVUxBVE9SU10gPSB7CkBAIC0xNDA3LDcgKzE0NTMsNyBAQAogCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZGV2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHdtODM1MCAqd204MzUwID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKIAotCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIHdtODM1MF9yZWdbcGRldi0+aWRdLmlycSk7CisJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgd204MzUwX3JlZ1twZGV2LT5pZF0uaXJxLCByZGV2KTsKIAogCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHJkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci93bTg0MDAtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTg0MDAtcmVndWxhdG9yLmMKaW5kZXggZDlhMmM5OC4uOTI0YzdlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9yZWd1bGF0b3Ivd204NDAwLXJlZ3VsYXRvci5jCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODQwMC1yZWd1bGF0b3IuYwpAQCAtMzE3LDE0ICszMTcsMTcgQEAKIAogc3RhdGljIGludCBfX2RldmluaXQgd204NDAwX3JlZ3VsYXRvcl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCXN0cnVjdCB3bTg0MDAgKndtODQwMCA9IGNvbnRhaW5lcl9vZihwZGV2LCBzdHJ1Y3Qgd204NDAwLCByZWd1bGF0b3JzW3BkZXYtPmlkXSk7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXY7CiAKIAlyZGV2ID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZyZWd1bGF0b3JzW3BkZXYtPmlkXSwgJnBkZXYtPmRldiwKLQkJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEsIGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KSk7CisJCQkJICBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSwgd204NDAwKTsKIAogCWlmIChJU19FUlIocmRldikpCiAJCXJldHVybiBQVFJfRVJSKHJkZXYpOwogCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcmRldik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzMyLDYgKzMzNSw3IEBACiB7CiAJc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCXJlZ3VsYXRvcl91bnJlZ2lzdGVyKHJkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC0zNzAsNyArMzc0LDYgQEAKIAl3bTg0MDAtPnJlZ3VsYXRvcnNbcmVnXS5pZCA9IHJlZzsKIAl3bTg0MDAtPnJlZ3VsYXRvcnNbcmVnXS5kZXYucGFyZW50ID0gZGV2OwogCXdtODQwMC0+cmVndWxhdG9yc1tyZWddLmRldi5wbGF0Zm9ybV9kYXRhID0gaW5pdGRhdGE7Ci0JZGV2X3NldF9kcnZkYXRhKCZ3bTg0MDAtPnJlZ3VsYXRvcnNbcmVnXS5kZXYsIHdtODQwMCk7CiAKIAlyZXR1cm4gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZ3bTg0MDAtPnJlZ3VsYXRvcnNbcmVnXSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3JlZ3VsYXRvci93bTg5OTQtcmVndWxhdG9yLmMgYi9kcml2ZXJzL3JlZ3VsYXRvci93bTg5OTQtcmVndWxhdG9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU0NTRhNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcmVndWxhdG9yL3dtODk5NC1yZWd1bGF0b3IuYwpAQCAtMCwwICsxLDMwNyBAQAorLyoKKyAqIHdtODk5NC1yZWd1bGF0b3IuYyAgLS0gIFJlZ3VsYXRvciBkcml2ZXIgZm9yIHRoZSBXTTg5OTQKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tZmQvd204OTk0L2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tZmQvd204OTk0L3JlZ2lzdGVycy5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC93bTg5OTQvcGRhdGEuaD4KKworc3RydWN0IHdtODk5NF9sZG8geworCWludCBlbmFibGU7CisJYm9vbCBpc19lbmFibGVkOworCXN0cnVjdCByZWd1bGF0b3JfZGV2ICpyZWd1bGF0b3I7CisJc3RydWN0IHdtODk5NCAqd204OTk0OworfTsKKworI2RlZmluZSBXTTg5OTRfTERPMV9NQVhfU0VMRUNUT1IgMHg3CisjZGVmaW5lIFdNODk5NF9MRE8yX01BWF9TRUxFQ1RPUiAweDMKKworc3RhdGljIGludCB3bTg5OTRfbGRvX2VuYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3Qgd204OTk0X2xkbyAqbGRvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKworCS8qIElmIHdlIGhhdmUgbm8gc29mdCBjb250cm9sIGFzc3VtZSB0aGF0IHRoZSBMRE8gaXMgYWx3YXlzIGVuYWJsZWQuICovCisJaWYgKCFsZG8tPmVuYWJsZSkKKwkJcmV0dXJuIDA7CisKKwlncGlvX3NldF92YWx1ZShsZG8tPmVuYWJsZSwgMSk7CisJbGRvLT5pc19lbmFibGVkID0gdHJ1ZTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHdtODk5NF9sZG9fZGlzYWJsZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3Qgd204OTk0X2xkbyAqbGRvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKworCS8qIElmIHdlIGhhdmUgbm8gc29mdCBjb250cm9sIGFzc3VtZSB0aGF0IHRoZSBMRE8gaXMgYWx3YXlzIGVuYWJsZWQuICovCisJaWYgKCFsZG8tPmVuYWJsZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlncGlvX3NldF92YWx1ZShsZG8tPmVuYWJsZSwgMCk7CisJbGRvLT5pc19lbmFibGVkID0gZmFsc2U7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfbGRvX2lzX2VuYWJsZWQoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODk5NF9sZG8gKmxkbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisKKwlyZXR1cm4gbGRvLT5pc19lbmFibGVkOworfQorCitzdGF0aWMgaW50IHdtODk5NF9sZG9fZW5hYmxlX3RpbWUoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJLyogM21zIGlzIGZhaXJseSBjb25zZXJ2YXRpdmUgYnV0IHRoaXMgc2hvdWxkbid0IGJlIHRvbyBwZXJmb3JtYW5jZQorCSAqIGNyaXRpY2FsOyBjYW4gYmUgdHdlYWtlZCBwZXItc3lzdGVtIGlmIHJlcXVpcmVkLiAqLworCXJldHVybiAzMDAwOworfQorCitzdGF0aWMgaW50IHdtODk5NF9sZG8xX2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKKwkJCQkgICAgdW5zaWduZWQgaW50IHNlbGVjdG9yKQoreworCWlmIChzZWxlY3RvciA+IFdNODk5NF9MRE8xX01BWF9TRUxFQ1RPUikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gKHNlbGVjdG9yICogMTAwMDAwKSArIDI0MDAwMDA7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X2xkbzFfZ2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYpCit7CisJc3RydWN0IHdtODk5NF9sZG8gKmxkbyA9IHJkZXZfZ2V0X2RydmRhdGEocmRldik7CisJaW50IHZhbDsKKworCXZhbCA9IHdtODk5NF9yZWdfcmVhZChsZG8tPndtODk5NCwgV004OTk0X0xET18xKTsKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuIHZhbDsKKworCXZhbCA9ICh2YWwgJiBXTTg5OTRfTERPMV9WU0VMX01BU0spID4+IFdNODk5NF9MRE8xX1ZTRUxfU0hJRlQ7CisKKwlyZXR1cm4gd204OTk0X2xkbzFfbGlzdF92b2x0YWdlKHJkZXYsIHZhbCk7Cit9CisKK3N0YXRpYyBpbnQgd204OTk0X2xkbzFfc2V0X3ZvbHRhZ2Uoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKnJkZXYsCisJCQkJICAgaW50IG1pbl91ViwgaW50IG1heF91VikKK3sKKwlzdHJ1Y3Qgd204OTk0X2xkbyAqbGRvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgc2VsZWN0b3IsIHY7CisKKwlzZWxlY3RvciA9IChtaW5fdVYgLSAyNDAwMDAwKSAvIDEwMDAwMDsKKwl2ID0gd204OTk0X2xkbzFfbGlzdF92b2x0YWdlKHJkZXYsIHNlbGVjdG9yKTsKKwlpZiAodiA8IDAgfHwgdiA+IG1heF91VikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzZWxlY3RvciA8PD0gV004OTk0X0xETzFfVlNFTF9TSElGVDsKKworCXJldHVybiB3bTg5OTRfc2V0X2JpdHMobGRvLT53bTg5OTQsIFdNODk5NF9MRE9fMSwKKwkJCSAgICAgICBXTTg5OTRfTERPMV9WU0VMX01BU0ssIHNlbGVjdG9yKTsKK30KKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3Jfb3BzIHdtODk5NF9sZG8xX29wcyA9IHsKKwkuZW5hYmxlID0gd204OTk0X2xkb19lbmFibGUsCisJLmRpc2FibGUgPSB3bTg5OTRfbGRvX2Rpc2FibGUsCisJLmlzX2VuYWJsZWQgPSB3bTg5OTRfbGRvX2lzX2VuYWJsZWQsCisJLmVuYWJsZV90aW1lID0gd204OTk0X2xkb19lbmFibGVfdGltZSwKKworCS5saXN0X3ZvbHRhZ2UgPSB3bTg5OTRfbGRvMV9saXN0X3ZvbHRhZ2UsCisJLmdldF92b2x0YWdlID0gd204OTk0X2xkbzFfZ2V0X3ZvbHRhZ2UsCisJLnNldF92b2x0YWdlID0gd204OTk0X2xkbzFfc2V0X3ZvbHRhZ2UsCit9OworCitzdGF0aWMgaW50IHdtODk5NF9sZG8yX2xpc3Rfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKKwkJCQkgICAgdW5zaWduZWQgaW50IHNlbGVjdG9yKQoreworCWlmIChzZWxlY3RvciA+IFdNODk5NF9MRE8yX01BWF9TRUxFQ1RPUikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gKHNlbGVjdG9yICogMTAwMDAwKSArIDkwMDAwMDsKK30KKworc3RhdGljIGludCB3bTg5OTRfbGRvMl9nZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldikKK3sKKwlzdHJ1Y3Qgd204OTk0X2xkbyAqbGRvID0gcmRldl9nZXRfZHJ2ZGF0YShyZGV2KTsKKwlpbnQgdmFsOworCisJdmFsID0gd204OTk0X3JlZ19yZWFkKGxkby0+d204OTk0LCBXTTg5OTRfTERPXzIpOworCWlmICh2YWwgPCAwKQorCQlyZXR1cm4gdmFsOworCisJdmFsID0gKHZhbCAmIFdNODk5NF9MRE8yX1ZTRUxfTUFTSykgPj4gV004OTk0X0xETzJfVlNFTF9TSElGVDsKKworCXJldHVybiB3bTg5OTRfbGRvMl9saXN0X3ZvbHRhZ2UocmRldiwgdmFsKTsKK30KKworc3RhdGljIGludCB3bTg5OTRfbGRvMl9zZXRfdm9sdGFnZShzdHJ1Y3QgcmVndWxhdG9yX2RldiAqcmRldiwKKwkJCQkgICBpbnQgbWluX3VWLCBpbnQgbWF4X3VWKQoreworCXN0cnVjdCB3bTg5OTRfbGRvICpsZG8gPSByZGV2X2dldF9kcnZkYXRhKHJkZXYpOworCWludCBzZWxlY3RvciwgdjsKKworCXNlbGVjdG9yID0gKG1pbl91ViAtIDkwMDAwMCkgLyAxMDAwMDA7CisJdiA9IHdtODk5NF9sZG8yX2xpc3Rfdm9sdGFnZShyZGV2LCBzZWxlY3Rvcik7CisJaWYgKHYgPCAwIHx8IHYgPiBtYXhfdVYpCisJCXJldHVybiAtRUlOVkFMOworCisJc2VsZWN0b3IgPDw9IFdNODk5NF9MRE8yX1ZTRUxfU0hJRlQ7CisKKwlyZXR1cm4gd204OTk0X3NldF9iaXRzKGxkby0+d204OTk0LCBXTTg5OTRfTERPXzIsCisJCQkgICAgICAgV004OTk0X0xETzJfVlNFTF9NQVNLLCBzZWxlY3Rvcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVndWxhdG9yX29wcyB3bTg5OTRfbGRvMl9vcHMgPSB7CisJLmVuYWJsZSA9IHdtODk5NF9sZG9fZW5hYmxlLAorCS5kaXNhYmxlID0gd204OTk0X2xkb19kaXNhYmxlLAorCS5pc19lbmFibGVkID0gd204OTk0X2xkb19pc19lbmFibGVkLAorCS5lbmFibGVfdGltZSA9IHdtODk5NF9sZG9fZW5hYmxlX3RpbWUsCisKKwkubGlzdF92b2x0YWdlID0gd204OTk0X2xkbzJfbGlzdF92b2x0YWdlLAorCS5nZXRfdm9sdGFnZSA9IHdtODk5NF9sZG8yX2dldF92b2x0YWdlLAorCS5zZXRfdm9sdGFnZSA9IHdtODk5NF9sZG8yX3NldF92b2x0YWdlLAorfTsKKworc3RhdGljIHN0cnVjdCByZWd1bGF0b3JfZGVzYyB3bTg5OTRfbGRvX2Rlc2NbXSA9IHsKKwl7CisJCS5uYW1lID0gIkxETzEiLAorCQkuaWQgPSAxLAorCQkudHlwZSA9IFJFR1VMQVRPUl9WT0xUQUdFLAorCQkubl92b2x0YWdlcyA9IFdNODk5NF9MRE8xX01BWF9TRUxFQ1RPUiArIDEsCisJCS5vcHMgPSAmd204OTk0X2xkbzFfb3BzLAorCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwl9LAorCXsKKwkJLm5hbWUgPSAiTERPMiIsCisJCS5pZCA9IDIsCisJCS50eXBlID0gUkVHVUxBVE9SX1ZPTFRBR0UsCisJCS5uX3ZvbHRhZ2VzID0gV004OTk0X0xETzJfTUFYX1NFTEVDVE9SICsgMSwKKwkJLm9wcyA9ICZ3bTg5OTRfbGRvMl9vcHMsCisJCS5vd25lciA9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgX19kZXZpbml0IGludCB3bTg5OTRfbGRvX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHdtODk5NCAqd204OTk0ID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCB3bTg5OTRfcGRhdGEgKnBkYXRhID0gd204OTk0LT5kZXYtPnBsYXRmb3JtX2RhdGE7CisJaW50IGlkID0gcGRldi0+aWQgJSBBUlJBWV9TSVpFKHBkYXRhLT5sZG8pOworCXN0cnVjdCB3bTg5OTRfbGRvICpsZG87CisJaW50IHJldDsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgIlByb2JpbmcgTERPJWRcbiIsIGlkICsgMSk7CisKKwlpZiAoIXBkYXRhKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWxkbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB3bTg5OTRfbGRvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGxkbyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBwcml2YXRlIGRhdGFcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlsZG8tPndtODk5NCA9IHdtODk5NDsKKworCWxkby0+aXNfZW5hYmxlZCA9IHRydWU7CisKKwlpZiAocGRhdGEtPmxkb1tpZF0uZW5hYmxlICYmIGdwaW9faXNfdmFsaWQocGRhdGEtPmxkb1tpZF0uZW5hYmxlKSkgeworCQlsZG8tPmVuYWJsZSA9IHBkYXRhLT5sZG9baWRdLmVuYWJsZTsKKworCQlyZXQgPSBncGlvX3JlcXVlc3QobGRvLT5lbmFibGUsICJXTTg5OTQgTERPIGVuYWJsZSIpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGdldCBlbmFibGUgR1BJTzogJWRcbiIsCisJCQkJcmV0KTsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGxkby0+ZW5hYmxlLCBsZG8tPmlzX2VuYWJsZWQpOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHNldCBHUElPIHVwOiAlZFxuIiwKKwkJCQlyZXQpOworCQkJZ290byBlcnJfZ3BpbzsKKwkJfQorCX0KKworCWxkby0+cmVndWxhdG9yID0gcmVndWxhdG9yX3JlZ2lzdGVyKCZ3bTg5OTRfbGRvX2Rlc2NbaWRdLCAmcGRldi0+ZGV2LAorCQkJCQkgICAgIHBkYXRhLT5sZG9baWRdLmluaXRfZGF0YSwgbGRvKTsKKwlpZiAoSVNfRVJSKGxkby0+cmVndWxhdG9yKSkgeworCQlyZXQgPSBQVFJfRVJSKGxkby0+cmVndWxhdG9yKTsKKwkJZGV2X2Vycih3bTg5OTQtPmRldiwgIkZhaWxlZCB0byByZWdpc3RlciBMRE8lZDogJWRcbiIsCisJCQlpZCArIDEsIHJldCk7CisJCWdvdG8gZXJyX2dwaW87CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbGRvKTsKKworCXJldHVybiAwOworCitlcnJfZ3BpbzoKKwlpZiAoZ3Bpb19pc192YWxpZChsZG8tPmVuYWJsZSkpCisJCWdwaW9fZnJlZShsZG8tPmVuYWJsZSk7CitlcnI6CisJa2ZyZWUobGRvKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgX19kZXZleGl0IGludCB3bTg5OTRfbGRvX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB3bTg5OTRfbGRvICpsZG8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCisJcmVndWxhdG9yX3VucmVnaXN0ZXIobGRvLT5yZWd1bGF0b3IpOworCWlmIChncGlvX2lzX3ZhbGlkKGxkby0+ZW5hYmxlKSkKKwkJZ3Bpb19mcmVlKGxkby0+ZW5hYmxlKTsKKwlrZnJlZShsZG8pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHdtODk5NF9sZG9fZHJpdmVyID0geworCS5wcm9iZSA9IHdtODk5NF9sZG9fcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHdtODk5NF9sZG9fcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAid204OTk0LWxkbyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCB3bTg5OTRfbGRvX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ3bTg5OTRfbGRvX2RyaXZlcik7CisJaWYgKHJldCAhPSAwKQorCQlwcl9lcnIoIkZhaWxlZCB0byByZWdpc3RlciBXbTg5OTQgR1AgTERPIGRyaXZlcjogJWRcbiIsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorc3Vic3lzX2luaXRjYWxsKHdtODk5NF9sZG9faW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB3bTg5OTRfbGRvX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmd204OTk0X2xkb19kcml2ZXIpOworfQorbW9kdWxlX2V4aXQod204OTk0X2xkb19leGl0KTsKKworLyogTW9kdWxlIGluZm9ybWF0aW9uICovCitNT0RVTEVfQVVUSE9SKCJNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiV004OTk0IExETyBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06d204OTk0LWxkbyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvS2NvbmZpZyBiL2RyaXZlcnMvcnRjL0tjb25maWcKaW5kZXggMmJiOGE4Yi4uNmExMzAzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvS2NvbmZpZworKysgYi9kcml2ZXJzL3J0Yy9LY29uZmlnCkBAIC0xNzUsNiArMTc1LDE2IEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1tYXg2OTAwLgogCitjb25maWcgUlRDX0RSVl9NQVg4OTI1CisJdHJpc3RhdGUgIk1heGltIE1BWDg5MjUiCisJZGVwZW5kcyBvbiBNRkRfTUFYODkyNQorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IHdpbGwgZ2V0IHN1cHBvcnQgZm9yIHRoZQorCSAgUlRDIG9mIE1heGltIE1BWDg5MjUgUE1JQy4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCBydGMtbWF4ODkyNS4KKwogY29uZmlnIFJUQ19EUlZfUlM1QzM3MgogCXRyaXN0YXRlICJSaWNvaCBSMjAyNVMvRCwgUlM1QzM3MkEvQiwgUlY1QzM4NiwgUlY1QzM4N0EiCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvTWFrZWZpbGUgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQppbmRleCBiNzE0OGFmLi40NGVmMTk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3J0Yy9NYWtlZmlsZQpAQCAtNTIsNiArNTIsNyBAQAogb2JqLSQoQ09ORklHX1JUQ19EUlZfTTQ4VDg2KQkrPSBydGMtbTQ4dDg2Lm8KIG9iai0kKENPTkZJR19SVENfTVhDKQkJKz0gcnRjLW14Yy5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9NQVg2OTAwKQkrPSBydGMtbWF4NjkwMC5vCitvYmotJChDT05GSUdfUlRDX0RSVl9NQVg4OTI1KQkrPSBydGMtbWF4ODkyNS5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9NQVg2OTAyKQkrPSBydGMtbWF4NjkwMi5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9NQzEzNzgzKQkrPSBydGMtbWMxMzc4My5vCiBvYmotJChDT05GSUdfUlRDX0RSVl9NU002MjQyKQkrPSBydGMtbXNtNjI0Mi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9jbGFzcy5jIGIvZHJpdmVycy9ydGMvY2xhc3MuYwppbmRleCBiZTVhNmI3Li40MDg0NWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9jbGFzcy5jCisrKyBiL2RyaXZlcnMvcnRjL2NsYXNzLmMKQEAgLTIyNiw2ICsyMjYsNyBAQAogewogCXJ0Y19kZXZfZXhpdCgpOwogCWNsYXNzX2Rlc3Ryb3kocnRjX2NsYXNzKTsKKwlpZHJfZGVzdHJveSgmcnRjX2lkcik7CiB9CiAKIHN1YnN5c19pbml0Y2FsbChydGNfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9oY3Rvc3lzLmMgYi9kcml2ZXJzL3J0Yy9oY3Rvc3lzLmMKaW5kZXggMzNjMGU5OC4uYmM5MGIwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvaGN0b3N5cy5jCisrKyBiL2RyaXZlcnMvcnRjL2hjdG9zeXMuYwpAQCAtMjIsNDggKzIyLDU3IEBACiAgKiB0aGUgYmVzdCBndWVzcyBpcyB0byBhZGQgMC41cy4KICAqLwogCitpbnQgcnRjX2hjdG9zeXNfcmV0ID0gLUVOT0RFVjsKKwogc3RhdGljIGludCBfX2luaXQgcnRjX2hjdG9zeXModm9pZCkKIHsKLQlpbnQgZXJyOworCWludCBlcnIgPSAtRU5PREVWOwogCXN0cnVjdCBydGNfdGltZSB0bTsKKwlzdHJ1Y3QgdGltZXNwZWMgdHYgPSB7CisJCS50dl9uc2VjID0gTlNFQ19QRVJfU0VDID4+IDEsCisJfTsKIAlzdHJ1Y3QgcnRjX2RldmljZSAqcnRjID0gcnRjX2NsYXNzX29wZW4oQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRSk7CiAKIAlpZiAocnRjID09IE5VTEwpIHsKLQkJcHJpbnRrKCIlczogdW5hYmxlIHRvIG9wZW4gcnRjIGRldmljZSAoJXMpXG4iLAorCQlwcl9lcnIoIiVzOiB1bmFibGUgdG8gb3BlbiBydGMgZGV2aWNlICglcylcbiIsCiAJCQlfX0ZJTEVfXywgQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRSk7Ci0JCXJldHVybiAtRU5PREVWOworCQlnb3RvIGVycl9vcGVuOwogCX0KIAogCWVyciA9IHJ0Y19yZWFkX3RpbWUocnRjLCAmdG0pOwotCWlmIChlcnIgPT0gMCkgewotCQllcnIgPSBydGNfdmFsaWRfdG0oJnRtKTsKLQkJaWYgKGVyciA9PSAwKSB7Ci0JCQlzdHJ1Y3QgdGltZXNwZWMgdHY7Ci0KLQkJCXR2LnR2X25zZWMgPSBOU0VDX1BFUl9TRUMgPj4gMTsKLQotCQkJcnRjX3RtX3RvX3RpbWUoJnRtLCAmdHYudHZfc2VjKTsKLQotCQkJZG9fc2V0dGltZW9mZGF5KCZ0dik7Ci0KLQkJCWRldl9pbmZvKHJ0Yy0+ZGV2LnBhcmVudCwKLQkJCQkic2V0dGluZyBzeXN0ZW0gY2xvY2sgdG8gIgotCQkJCSIlZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmQgVVRDICgldSlcbiIsCi0JCQkJdG0udG1feWVhciArIDE5MDAsIHRtLnRtX21vbiArIDEsIHRtLnRtX21kYXksCi0JCQkJdG0udG1faG91ciwgdG0udG1fbWluLCB0bS50bV9zZWMsCi0JCQkJKHVuc2lnbmVkIGludCkgdHYudHZfc2VjKTsKLQkJfQotCQllbHNlCi0JCQlkZXZfZXJyKHJ0Yy0+ZGV2LnBhcmVudCwKLQkJCQkiaGN0b3N5czogaW52YWxpZCBkYXRlL3RpbWVcbiIpOwotCX0KLQllbHNlCisJaWYgKGVycikgewogCQlkZXZfZXJyKHJ0Yy0+ZGV2LnBhcmVudCwKIAkJCSJoY3Rvc3lzOiB1bmFibGUgdG8gcmVhZCB0aGUgaGFyZHdhcmUgY2xvY2tcbiIpOworCQlnb3RvIGVycl9yZWFkOwogCisJfQorCisJZXJyID0gcnRjX3ZhbGlkX3RtKCZ0bSk7CisJaWYgKGVycikgeworCQlkZXZfZXJyKHJ0Yy0+ZGV2LnBhcmVudCwKKwkJCSJoY3Rvc3lzOiBpbnZhbGlkIGRhdGUvdGltZVxuIik7CisJCWdvdG8gZXJyX2ludmFsaWQ7CisJfQorCisJcnRjX3RtX3RvX3RpbWUoJnRtLCAmdHYudHZfc2VjKTsKKworCWRvX3NldHRpbWVvZmRheSgmdHYpOworCisJZGV2X2luZm8ocnRjLT5kZXYucGFyZW50LAorCQkic2V0dGluZyBzeXN0ZW0gY2xvY2sgdG8gIgorCQkiJWQtJTAyZC0lMDJkICUwMmQ6JTAyZDolMDJkIFVUQyAoJXUpXG4iLAorCQl0bS50bV95ZWFyICsgMTkwMCwgdG0udG1fbW9uICsgMSwgdG0udG1fbWRheSwKKwkJdG0udG1faG91ciwgdG0udG1fbWluLCB0bS50bV9zZWMsCisJCSh1bnNpZ25lZCBpbnQpIHR2LnR2X3NlYyk7CisKK2Vycl9pbnZhbGlkOgorZXJyX3JlYWQ6CiAJcnRjX2NsYXNzX2Nsb3NlKHJ0Yyk7CiAKLQlyZXR1cm4gMDsKK2Vycl9vcGVuOgorCXJ0Y19oY3Rvc3lzX3JldCA9IGVycjsKKworCXJldHVybiBlcnI7CiB9CiAKIGxhdGVfaW5pdGNhbGwocnRjX2hjdG9zeXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWF0OTFzYW05LmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYwppbmRleCA4NmM2MWYxLi43OGEwMThiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MXNhbTkuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiAJaWYgKG9mZnNldCA9PSAwKQogCQlyZXR1cm4gLUVJTFNFUTsKIAotCW1lbXNldChhbHJtLCAwLCBzaXplb2YoYWxybSkpOworCW1lbXNldChhbHJtLCAwLCBzaXplb2YoKmFscm0pKTsKIAlpZiAoYWxhcm0gIT0gQUxBUk1fRElTQUJMRUQgJiYgb2Zmc2V0ICE9IDApIHsKIAkJcnRjX3RpbWVfdG9fdG0ob2Zmc2V0ICsgYWxhcm0sIHRtKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWNvaDkwMTMzMS5jIGIvZHJpdmVycy9ydGMvcnRjLWNvaDkwMTMzMS5jCmluZGV4IDAzZWE1MzAuLjQ0YzQzOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1jb2g5MDEzMzEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtY29oOTAxMzMxLmMKQEAgLTI3MSwxMiArMjcxLDEzIEBACiB7CiAJc3RydWN0IGNvaDkwMTMzMV9wb3J0ICpydGFwID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOwogCi0JaWYgKGRldmljZV9tYXlfd2FrZXVwKCZwZGV2LT5kZXYpKQorCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkgewogCQlkaXNhYmxlX2lycV93YWtlKHJ0YXAtPmlycSk7Ci0JZWxzZQorCX0gZWxzZSB7CiAJCWNsa19lbmFibGUocnRhcC0+Y2xrKTsKIAkJd3JpdGVsKHJ0YXAtPmlycW1hc2tzdG9yZSwgcnRhcC0+dmlydGJhc2UgKyBDT0g5MDEzMzFfSVJRX01BU0spOwogCQljbGtfZGlzYWJsZShydGFwLT5jbGspOworCX0KIAlyZXR1cm4gMDsKIH0KICNlbHNlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMKaW5kZXggOWRhMDJkMS4uOTFiZGU5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYwpAQCAtMTE1LDYgKzExNSwxNSBAQAogfQogc3RhdGljIERFVklDRV9BVFRSKGNvbXBfZGVsZXRlLCBTX0lSVUdPLCBlcDkzeHhfcnRjX3Nob3dfY29tcF9kZWxldGUsIE5VTEwpOwogCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZXA5M3h4X3J0Y19hdHRyc1tdID0geworCSZkZXZfYXR0cl9jb21wX3ByZWxvYWQuYXR0ciwKKwkmZGV2X2F0dHJfY29tcF9kZWxldGUuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBlcDkzeHhfcnRjX3N5c2ZzX2ZpbGVzID0geworCS5hdHRycwk9IGVwOTN4eF9ydGNfYXR0cnMsCit9OwogCiBzdGF0aWMgaW50IF9faW5pdCBlcDkzeHhfcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CkBAIC0xMjMsMjcgKzEzMiwyMiBAQAogCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CiAJaW50IGVycjsKIAotCWVwOTN4eF9ydGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZXA5M3h4X3J0YyksIEdGUF9LRVJORUwpOwotCWlmIChlcDkzeHhfcnRjID09IE5VTEwpCisJZXA5M3h4X3J0YyA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKmVwOTN4eF9ydGMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWVwOTN4eF9ydGMpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAocmVzID09IE5VTEwpIHsKLQkJZXJyID0gLUVOWElPOwotCQlnb3RvIGZhaWxfZnJlZTsKLQl9CisJaWYgKCFyZXMpCisJCXJldHVybiAtRU5YSU87CiAKLQlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKTsKLQlpZiAocmVzID09IE5VTEwpIHsKLQkJZXJyID0gLUVCVVNZOwotCQlnb3RvIGZhaWxfZnJlZTsKLQl9CisJaWYgKCFkZXZtX3JlcXVlc3RfbWVtX3JlZ2lvbigmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAorCQkJCSAgICAgcmVzb3VyY2Vfc2l6ZShyZXMpLCBwZGV2LT5uYW1lKSkKKwkJcmV0dXJuIC1FQlVTWTsKIAotCWVwOTN4eF9ydGMtPm1taW9fYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKLQlpZiAoZXA5M3h4X3J0Yy0+bW1pb19iYXNlID09IE5VTEwpIHsKLQkJZXJyID0gLUVOWElPOwotCQlnb3RvIGZhaWw7Ci0JfQorCWVwOTN4eF9ydGMtPm1taW9fYmFzZSA9IGRldm1faW9yZW1hcCgmcGRldi0+ZGV2LCByZXMtPnN0YXJ0LAorCQkJCQkgICAgIHJlc291cmNlX3NpemUocmVzKSk7CisJaWYgKCFlcDkzeHhfcnRjLT5tbWlvX2Jhc2UpCisJCXJldHVybiAtRU5YSU87CiAKIAlwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9IGVwOTN4eF9ydGM7CiAKQEAgLTE1MSw1MiArMTU1LDMzIEBACiAJCQkJJnBkZXYtPmRldiwgJmVwOTN4eF9ydGNfb3BzLCBUSElTX01PRFVMRSk7CiAJaWYgKElTX0VSUihydGMpKSB7CiAJCWVyciA9IFBUUl9FUlIocnRjKTsKLQkJZ290byBmYWlsOworCQlnb3RvIGV4aXQ7CiAJfQogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcnRjKTsKIAotCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfY29tcF9wcmVsb2FkKTsKKwllcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmZXA5M3h4X3J0Y19zeXNmc19maWxlcyk7CiAJaWYgKGVycikKIAkJZ290byBmYWlsOwotCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfY29tcF9kZWxldGUpOwotCWlmIChlcnIpIHsKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9jb21wX3ByZWxvYWQpOwotCQlnb3RvIGZhaWw7Ci0JfQogCiAJcmV0dXJuIDA7CiAKIGZhaWw6Ci0JaWYgKGVwOTN4eF9ydGMtPm1taW9fYmFzZSkgewotCQlpb3VubWFwKGVwOTN4eF9ydGMtPm1taW9fYmFzZSk7Ci0JCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gTlVMTDsKLQl9Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7Ci1mYWlsX2ZyZWU6Ci0Ja2ZyZWUoZXA5M3h4X3J0Yyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CitleGl0OgorCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gTlVMTDsKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IF9fZXhpdCBlcDkzeHhfcnRjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgZXA5M3h4X3J0YyAqZXA5M3h4X3J0YyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwogCi0JLyogY2xlYW51cCBzeXNmcyAqLwotCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfY29tcF9kZWxldGUpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfY29tcF9wcmVsb2FkKTsKLQotCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwotCi0JaW91bm1hcChlcDkzeHhfcnRjLT5tbWlvX2Jhc2UpOwotCXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhID0gTlVMTDsKLQotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7Ci0KKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmZXA5M3h4X3J0Y19zeXNmc19maWxlcyk7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJcnRjX2RldmljZV91bnJlZ2lzdGVyKHJ0Yyk7CisJcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEgPSBOVUxMOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbWF4ODkyNS5jIGIvZHJpdmVycy9ydGMvcnRjLW1heDg5MjUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2RiYjE3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLW1heDg5MjUuYwpAQCAtMCwwICsxLDMxNCBAQAorLyoKKyAqIFJUQyBkcml2ZXIgZm9yIE1heGltIE1BWDg5MjUKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoJSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC9tYXg4OTI1Lmg+CisKK2VudW0geworCVJUQ19TRUMgPSAwLAorCVJUQ19NSU4sCisJUlRDX0hPVVIsCisJUlRDX1dFRUtEQVksCisJUlRDX0RBVEUsCisJUlRDX01PTlRILAorCVJUQ19ZRUFSMSwKKwlSVENfWUVBUjIsCit9OworCisjZGVmaW5lIE1BWDg5MjVfUlRDX1NFQwkJCTB4MDAKKyNkZWZpbmUgTUFYODkyNV9SVENfTUlOCQkJMHgwMQorI2RlZmluZSBNQVg4OTI1X1JUQ19IT1VSCQkweDAyCisjZGVmaW5lIE1BWDg5MjVfUlRDX1dFRUtEQVkJCTB4MDMKKyNkZWZpbmUgTUFYODkyNV9SVENfREFURQkJMHgwNAorI2RlZmluZSBNQVg4OTI1X1JUQ19NT05USAkJMHgwNQorI2RlZmluZSBNQVg4OTI1X1JUQ19ZRUFSMQkJMHgwNgorI2RlZmluZSBNQVg4OTI1X1JUQ19ZRUFSMgkJMHgwNworI2RlZmluZSBNQVg4OTI1X0FMQVJNMF9TRUMJCTB4MDgKKyNkZWZpbmUgTUFYODkyNV9BTEFSTTBfTUlOCQkweDA5CisjZGVmaW5lIE1BWDg5MjVfQUxBUk0wX0hPVVIJCTB4MGEKKyNkZWZpbmUgTUFYODkyNV9BTEFSTTBfV0VFS0RBWQkJMHgwYgorI2RlZmluZSBNQVg4OTI1X0FMQVJNMF9EQVRFCQkweDBjCisjZGVmaW5lIE1BWDg5MjVfQUxBUk0wX01PTgkJMHgwZAorI2RlZmluZSBNQVg4OTI1X0FMQVJNMF9ZRUFSMQkJMHgwZQorI2RlZmluZSBNQVg4OTI1X0FMQVJNMF9ZRUFSMgkJMHgwZgorI2RlZmluZSBNQVg4OTI1X0FMQVJNMV9TRUMJCTB4MTAKKyNkZWZpbmUgTUFYODkyNV9BTEFSTTFfTUlOCQkweDExCisjZGVmaW5lIE1BWDg5MjVfQUxBUk0xX0hPVVIJCTB4MTIKKyNkZWZpbmUgTUFYODkyNV9BTEFSTTFfV0VFS0RBWQkJMHgxMworI2RlZmluZSBNQVg4OTI1X0FMQVJNMV9EQVRFCQkweDE0CisjZGVmaW5lIE1BWDg5MjVfQUxBUk0xX01PTgkJMHgxNQorI2RlZmluZSBNQVg4OTI1X0FMQVJNMV9ZRUFSMQkJMHgxNgorI2RlZmluZSBNQVg4OTI1X0FMQVJNMV9ZRUFSMgkJMHgxNworI2RlZmluZSBNQVg4OTI1X1JUQ19DTlRMCQkweDFiCisjZGVmaW5lIE1BWDg5MjVfUlRDX1NUQVRVUwkJMHgyMAorCisjZGVmaW5lIFRJTUVfTlVNCQkJOAorI2RlZmluZSBBTEFSTV8xU0VDCQkJKDEgPDwgNykKKyNkZWZpbmUgSE9VUl8xMgkJCQkoMSA8PCA3KQorI2RlZmluZSBIT1VSX0FNX1BNCQkJKDEgPDwgNSkKKyNkZWZpbmUgQUxBUk0wX0lSUQkJCSgxIDw8IDMpCisjZGVmaW5lIEFMQVJNMV9JUlEJCQkoMSA8PCAyKQorI2RlZmluZSBBTEFSTTBfU1RBVFVTCQkJKDEgPDwgMikKKyNkZWZpbmUgQUxBUk0xX1NUQVRVUwkJCSgxIDw8IDEpCisKKworc3RydWN0IG1heDg5MjVfcnRjX2luZm8geworCXN0cnVjdCBydGNfZGV2aWNlCSpydGNfZGV2OworCXN0cnVjdCBtYXg4OTI1X2NoaXAJKmNoaXA7CisJc3RydWN0IGkyY19jbGllbnQJKnJ0YzsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworfTsKKworc3RhdGljIGlycXJldHVybl90IHJ0Y191cGRhdGVfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtYXg4OTI1X3J0Y19pbmZvICppbmZvID0gKHN0cnVjdCBtYXg4OTI1X3J0Y19pbmZvICopZGF0YTsKKworCS8qIGRpc2FibGUgQUxBUk0wIGV4Y2VwdCBmb3IgMVNFQyBhbGFybSAqLworCW1heDg5MjVfc2V0X2JpdHMoaW5mby0+cnRjLCBNQVg4OTI1X0FMQVJNMF9DTlRMLCAweDdmLCAwKTsKKwlydGNfdXBkYXRlX2lycShpbmZvLT5ydGNfZGV2LCAxLCBSVENfSVJRRiB8IFJUQ19BRik7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IHRtX2NhbGMoc3RydWN0IHJ0Y190aW1lICp0bSwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKQoreworCWlmIChsZW4gPCBUSU1FX05VTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJdG0tPnRtX3llYXIgPSAoYnVmW1JUQ19ZRUFSMl0gPj4gNCkgKiAxMDAwCisJCQkrIChidWZbUlRDX1lFQVIyXSAmIDB4ZikgKiAxMDAKKwkJCSsgKGJ1ZltSVENfWUVBUjFdID4+IDQpICogMTAKKwkJCSsgKGJ1ZltSVENfWUVBUjFdICYgMHhmKTsKKwl0bS0+dG1feWVhciAtPSAxOTAwOworCXRtLT50bV9tb24gPSAoKGJ1ZltSVENfTU9OVEhdID4+IDQpICYgMHgwMSkgKiAxMAorCQkJKyAoYnVmW1JUQ19NT05USF0gJiAweDBmKTsKKwl0bS0+dG1fbWRheSA9ICgoYnVmW1JUQ19EQVRFXSA+PiA0KSAmIDB4MDMpICogMTAKKwkJCSsgKGJ1ZltSVENfREFURV0gJiAweDBmKTsKKwl0bS0+dG1fd2RheSA9IGJ1ZltSVENfV0VFS0RBWV0gJiAweDA3OworCWlmIChidWZbUlRDX0hPVVJdICYgSE9VUl8xMikgeworCQl0bS0+dG1faG91ciA9ICgoYnVmW1JUQ19IT1VSXSA+PiA0KSAmIDB4MSkgKiAxMAorCQkJCSsgKGJ1ZltSVENfSE9VUl0gJiAweDBmKTsKKwkJaWYgKGJ1ZltSVENfSE9VUl0gJiBIT1VSX0FNX1BNKQorCQkJdG0tPnRtX2hvdXIgKz0gMTI7CisJfSBlbHNlCisJCXRtLT50bV9ob3VyID0gKChidWZbUlRDX0hPVVJdID4+IDQpICYgMHgwMykgKiAxMAorCQkJCSsgKGJ1ZltSVENfSE9VUl0gJiAweDBmKTsKKwl0bS0+dG1fbWluID0gKChidWZbUlRDX01JTl0gPj4gNCkgJiAweDcpICogMTAKKwkJCSsgKGJ1ZltSVENfTUlOXSAmIDB4MGYpOworCXRtLT50bV9zZWMgPSAoKGJ1ZltSVENfU0VDXSA+PiA0KSAmIDB4NykgKiAxMAorCQkJKyAoYnVmW1JUQ19TRUNdICYgMHgwZik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGF0YV9jYWxjKHVuc2lnbmVkIGNoYXIgKmJ1Ziwgc3RydWN0IHJ0Y190aW1lICp0bSwgaW50IGxlbikKK3sKKwl1bnNpZ25lZCBjaGFyIGhpZ2gsIGxvdzsKKworCWlmIChsZW4gPCBUSU1FX05VTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloaWdoID0gKHRtLT50bV95ZWFyICsgMTkwMCkgLyAxMDAwOworCWxvdyA9ICh0bS0+dG1feWVhciArIDE5MDApIC8gMTAwOworCWxvdyA9IGxvdyAtIGhpZ2ggKiAxMDsKKwlidWZbUlRDX1lFQVIyXSA9IChoaWdoIDw8IDQpICsgbG93OworCWhpZ2ggPSAodG0tPnRtX3llYXIgKyAxOTAwKSAvIDEwOworCWxvdyA9IHRtLT50bV95ZWFyICsgMTkwMDsKKwlsb3cgPSBsb3cgLSBoaWdoICogMTA7CisJaGlnaCA9IGhpZ2ggLSAoaGlnaCAvIDEwKSAqIDEwOworCWJ1ZltSVENfWUVBUjFdID0gKGhpZ2ggPDwgNCkgKyBsb3c7CisJaGlnaCA9IHRtLT50bV9tb24gLyAxMDsKKwlsb3cgPSB0bS0+dG1fbW9uOworCWxvdyA9IGxvdyAtIGhpZ2ggKiAxMDsKKwlidWZbUlRDX01PTlRIXSA9IChoaWdoIDw8IDQpICsgbG93OworCWhpZ2ggPSB0bS0+dG1fbWRheSAvIDEwOworCWxvdyA9IHRtLT50bV9tZGF5OworCWxvdyA9IGxvdyAtIGhpZ2ggKiAxMDsKKwlidWZbUlRDX0RBVEVdID0gKGhpZ2ggPDwgNCkgKyBsb3c7CisJYnVmW1JUQ19XRUVLREFZXSA9IHRtLT50bV93ZGF5OworCWhpZ2ggPSB0bS0+dG1faG91ciAvIDEwOworCWxvdyA9IHRtLT50bV9ob3VyOworCWxvdyA9IGxvdyAtIGhpZ2ggKiAxMDsKKwlidWZbUlRDX0hPVVJdID0gKGhpZ2ggPDwgNCkgKyBsb3c7CisJaGlnaCA9IHRtLT50bV9taW4gLyAxMDsKKwlsb3cgPSB0bS0+dG1fbWluOworCWxvdyA9IGxvdyAtIGhpZ2ggKiAxMDsKKwlidWZbUlRDX01JTl0gPSAoaGlnaCA8PCA0KSArIGxvdzsKKwloaWdoID0gdG0tPnRtX3NlYyAvIDEwOworCWxvdyA9IHRtLT50bV9zZWM7CisJbG93ID0gbG93IC0gaGlnaCAqIDEwOworCWJ1ZltSVENfU0VDXSA9IChoaWdoIDw8IDQpICsgbG93OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1heDg5MjVfcnRjX3JlYWRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJc3RydWN0IG1heDg5MjVfcnRjX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZltUSU1FX05VTV07CisJaW50IHJldDsKKworCXJldCA9IG1heDg5MjVfYnVsa19yZWFkKGluZm8tPnJ0YywgTUFYODkyNV9SVENfU0VDLCBUSU1FX05VTSwgYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJcmV0ID0gdG1fY2FsYyh0bSwgYnVmLCBUSU1FX05VTSk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYXg4OTI1X3J0Y19zZXRfdGltZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBydGNfdGltZSAqdG0pCit7CisJc3RydWN0IG1heDg5MjVfcnRjX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZltUSU1FX05VTV07CisJaW50IHJldDsKKworCXJldCA9IGRhdGFfY2FsYyhidWYsIHRtLCBUSU1FX05VTSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCXJldCA9IG1heDg5MjVfYnVsa193cml0ZShpbmZvLT5ydGMsIE1BWDg5MjVfUlRDX1NFQywgVElNRV9OVU0sIGJ1Zik7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYXg4OTI1X3J0Y19yZWFkX2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCit7CisJc3RydWN0IG1heDg5MjVfcnRjX2luZm8gKmluZm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwl1bnNpZ25lZCBjaGFyIGJ1ZltUSU1FX05VTV07CisJaW50IHJldDsKKworCXJldCA9IG1heDg5MjVfYnVsa19yZWFkKGluZm8tPnJ0YywgTUFYODkyNV9BTEFSTTBfU0VDLCBUSU1FX05VTSwgYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJcmV0ID0gdG1fY2FsYygmYWxybS0+dGltZSwgYnVmLCBUSU1FX05VTSk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCXJldCA9IG1heDg5MjVfcmVnX3JlYWQoaW5mby0+cnRjLCBNQVg4OTI1X1JUQ19JUlFfTUFTSyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCWlmICgocmV0ICYgQUxBUk0wX0lSUSkgPT0gMCkKKwkJYWxybS0+ZW5hYmxlZCA9IDE7CisJZWxzZQorCQlhbHJtLT5lbmFibGVkID0gMDsKKwlyZXQgPSBtYXg4OTI1X3JlZ19yZWFkKGluZm8tPnJ0YywgTUFYODkyNV9SVENfU1RBVFVTKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJaWYgKHJldCAmIEFMQVJNMF9TVEFUVVMpCisJCWFscm0tPnBlbmRpbmcgPSAxOworCWVsc2UKKwkJYWxybS0+cGVuZGluZyA9IDA7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtYXg4OTI1X3J0Y19zZXRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqYWxybSkKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9ydGNfaW5mbyAqaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGNoYXIgYnVmW1RJTUVfTlVNXTsKKwlpbnQgcmV0OworCisJcmV0ID0gZGF0YV9jYWxjKGJ1ZiwgJmFscm0tPnRpbWUsIFRJTUVfTlVNKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJcmV0ID0gbWF4ODkyNV9idWxrX3dyaXRlKGluZm8tPnJ0YywgTUFYODkyNV9BTEFSTTBfU0VDLCBUSU1FX05VTSwgYnVmKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJLyogb25seSBlbmFibGUgYWxhcm0gb24geWVhci9tb250aC9kYXkvaG91ci9taW4vc2VjICovCisJcmV0ID0gbWF4ODkyNV9yZWdfd3JpdGUoaW5mby0+cnRjLCBNQVg4OTI1X0FMQVJNMF9DTlRMLCAweDc3KTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIG1heDg5MjVfcnRjX29wcyA9IHsKKwkucmVhZF90aW1lCT0gbWF4ODkyNV9ydGNfcmVhZF90aW1lLAorCS5zZXRfdGltZQk9IG1heDg5MjVfcnRjX3NldF90aW1lLAorCS5yZWFkX2FsYXJtCT0gbWF4ODkyNV9ydGNfcmVhZF9hbGFybSwKKwkuc2V0X2FsYXJtCT0gbWF4ODkyNV9ydGNfc2V0X2FsYXJtLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgbWF4ODkyNV9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCBtYXg4OTI1X3J0Y19pbmZvICppbmZvOworCWludCBpcnEsIHJldDsKKworCWluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWF4ODkyNV9ydGNfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghaW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisJaW5mby0+Y2hpcCA9IGNoaXA7CisJaW5mby0+cnRjID0gY2hpcC0+cnRjOworCWluZm8tPmRldiA9ICZwZGV2LT5kZXY7CisJaXJxID0gY2hpcC0+aXJxX2Jhc2UgKyBNQVg4OTI1X0lSUV9SVENfQUxBUk0wOworCisJcmV0ID0gcmVxdWVzdF90aHJlYWRlZF9pcnEoaXJxLCBOVUxMLCBydGNfdXBkYXRlX2hhbmRsZXIsCisJCQkJICAgSVJRRl9PTkVTSE9ULCAicnRjLWFsYXJtMCIsIGluZm8pOworCWlmIChyZXQgPCAwKSB7CisJCWRldl9lcnIoY2hpcC0+ZGV2LCAiRmFpbGVkIHRvIHJlcXVlc3QgSVJROiAjJWQ6ICVkXG4iLAorCQkJaXJxLCByZXQpOworCQlnb3RvIG91dF9pcnE7CisJfQorCisJaW5mby0+cnRjX2RldiA9IHJ0Y19kZXZpY2VfcmVnaXN0ZXIoIm1heDg5MjUtcnRjIiwgJnBkZXYtPmRldiwKKwkJCQkJJm1heDg5MjVfcnRjX29wcywgVEhJU19NT0RVTEUpOworCXJldCA9IFBUUl9FUlIoaW5mby0+cnRjX2Rldik7CisJaWYgKElTX0VSUihpbmZvLT5ydGNfZGV2KSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gcmVnaXN0ZXIgUlRDIGRldmljZTogJWRcbiIsIHJldCk7CisJCWdvdG8gb3V0X3J0YzsKKwl9CisKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgaW5mbyk7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaW5mbyk7CisKKwlyZXR1cm4gMDsKK291dF9ydGM6CisJZnJlZV9pcnEoY2hpcC0+aXJxX2Jhc2UgKyBNQVg4OTI1X0lSUV9SVENfQUxBUk0wLCBpbmZvKTsKK291dF9pcnE6CisJa2ZyZWUoaW5mbyk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbWF4ODkyNV9ydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG1heDg5MjVfcnRjX2luZm8gKmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWlmIChpbmZvKSB7CisJCWZyZWVfaXJxKGluZm8tPmNoaXAtPmlycV9iYXNlICsgTUFYODkyNV9JUlFfUlRDX0FMQVJNMCwgaW5mbyk7CisJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihpbmZvLT5ydGNfZGV2KTsKKwkJa2ZyZWUoaW5mbyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYXg4OTI1X3J0Y19kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm1heDg5MjUtcnRjIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gbWF4ODkyNV9ydGNfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtYXg4OTI1X3J0Y19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWF4ODkyNV9ydGNfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1heDg5MjVfcnRjX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChtYXg4OTI1X3J0Y19pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1heDg5MjVfcnRjX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWF4ODkyNV9ydGNfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KG1heDg5MjVfcnRjX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIk1heGltIE1BWDg5MjUgUlRDIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbWMxMzc4My5jIGIvZHJpdmVycy9ydGMvcnRjLW1jMTM3ODMuYwppbmRleCA4NTBmOTgzLi5kNjBjODFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtbWMxMzc4My5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1tYzEzNzgzLmMKQEAgLTI4LDYgKzI4LDM0IEBACiAJaW50IHZhbGlkOwogfTsKIAorc3RhdGljIGludCBtYzEzNzgzX3J0Y19pcnFfZW5hYmxlX3VubG9ja2VkKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJdW5zaWduZWQgaW50IGVuYWJsZWQsIGludCBpcnEpCit7CisJc3RydWN0IG1jMTM3ODNfcnRjICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJaW50ICgqZnVuYykoc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIGludCBpcnEpOworCisJaWYgKCFwcml2LT52YWxpZCkKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJZnVuYyA9IGVuYWJsZWQgPyBtYzEzNzgzX2lycV91bm1hc2sgOiBtYzEzNzgzX2lycV9tYXNrOworCXJldHVybiBmdW5jKHByaXYtPm1jMTM3ODMsIGlycSk7Cit9CisKK3N0YXRpYyBpbnQgbWMxMzc4M19ydGNfaXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXVuc2lnbmVkIGludCBlbmFibGVkLCBpbnQgaXJxKQoreworCXN0cnVjdCBtYzEzNzgzX3J0YyAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisKKwltYzEzNzgzX2xvY2socHJpdi0+bWMxMzc4Myk7CisKKwlyZXQgPSBtYzEzNzgzX3J0Y19pcnFfZW5hYmxlX3VubG9ja2VkKGRldiwgZW5hYmxlZCwgaXJxKTsKKworCW1jMTM3ODNfdW5sb2NrKHByaXYtPm1jMTM3ODMpOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBtYzEzNzgzX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCXN0cnVjdCBtYzEzNzgzX3J0YyAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwpAQCAtNzgsNiArMTA2LDcgQEAKIHsKIAlzdHJ1Y3QgbWMxMzc4M19ydGMgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAl1bnNpZ25lZCBpbnQgc2Vjb25kcywgZGF5czsKKwl1bnNpZ25lZCBpbnQgYWxhcm1zZWNvbmRzOwogCWludCByZXQ7CiAKIAlzZWNvbmRzID0gc2VjcyAlIDg2NDAwOwpAQCAtODYsNyArMTE1LDIyIEBACiAJbWMxMzc4M19sb2NrKHByaXYtPm1jMTM3ODMpOwogCiAJLyoKLQkgKiBmaXJzdCB3cml0ZSBzZWNvbmRzPTAgdG8gcHJldmVudCBhIGRheSBzd2l0Y2ggYmV0d2VlbiB3cml0aW5nIGRheXMKKwkgKiB0ZW1wb3JhcmlseSBpbnZhbGlkYXRlIGFsYXJtIHRvIHByZXZlbnQgdHJpZ2dlcmluZyBpdCB3aGVuIHRoZSBkYXkgaXMKKwkgKiBhbHJlYWR5IHVwZGF0ZWQgd2hpbGUgdGhlIHRpbWUgaXNuJ3QgeWV0LgorCSAqLworCXJldCA9IG1jMTM3ODNfcmVnX3JlYWQocHJpdi0+bWMxMzc4MywgTUMxMzc4M19SVENUT0RBLCAmYWxhcm1zZWNvbmRzKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBvdXQ7CisKKwlpZiAoYWxhcm1zZWNvbmRzIDwgODY0MDApIHsKKwkJcmV0ID0gbWMxMzc4M19yZWdfd3JpdGUocHJpdi0+bWMxMzc4MywKKwkJCQlNQzEzNzgzX1JUQ1RPREEsIDB4MWZmZmYpOworCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogd3JpdGUgc2Vjb25kcz0wIHRvIHByZXZlbnQgYSBkYXkgc3dpdGNoIGJldHdlZW4gd3JpdGluZyBkYXlzCiAJICogYW5kIHNlY29uZHMgYmVsb3cKIAkgKi8KIAlyZXQgPSBtYzEzNzgzX3JlZ193cml0ZShwcml2LT5tYzEzNzgzLCBNQzEzNzgzX1JUQ1RPRCwgMCk7CkBAIC0xMDEsMTEgKzE0NSwxOSBAQAogCWlmICh1bmxpa2VseShyZXQpKQogCQlnb3RvIG91dDsKIAotCXJldCA9IG1jMTM3ODNfYWNraXJxKHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfSVJRX1JUQ1JTVCk7CisJLyogcmVzdG9yZSBhbGFybSAqLworCWlmIChhbGFybXNlY29uZHMgPCA4NjQwMCkgeworCQlyZXQgPSBtYzEzNzgzX3JlZ193cml0ZShwcml2LT5tYzEzNzgzLAorCQkJCU1DMTM3ODNfUlRDVE9EQSwgYWxhcm1zZWNvbmRzKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlnb3RvIG91dDsKKwl9CisKKwlyZXQgPSBtYzEzNzgzX2lycV9hY2socHJpdi0+bWMxMzc4MywgTUMxMzc4M19JUlFfUlRDUlNUKTsKIAlpZiAodW5saWtlbHkocmV0KSkKIAkJZ290byBvdXQ7CiAKLQlyZXQgPSBtYzEzNzgzX3VubWFzayhwcml2LT5tYzEzNzgzLCBNQzEzNzgzX0lSUV9SVENSU1QpOworCXJldCA9IG1jMTM3ODNfaXJxX3VubWFzayhwcml2LT5tYzEzNzgzLCBNQzEzNzgzX0lSUV9SVENSU1QpOwogb3V0OgogCXByaXYtPnZhbGlkID0gIXJldDsKIApAQCAtMTE0LDYgKzE2NiwxMDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IG1jMTM3ODNfcnRjX3JlYWRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqYWxhcm0pCit7CisJc3RydWN0IG1jMTM3ODNfcnRjICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgc2Vjb25kcywgZGF5czsKKwl1bnNpZ25lZCBsb25nIHMxOTcwOworCWludCBlbmFibGVkLCBwZW5kaW5nOworCWludCByZXQ7CisKKwltYzEzNzgzX2xvY2socHJpdi0+bWMxMzc4Myk7CisKKwlyZXQgPSBtYzEzNzgzX3JlZ19yZWFkKHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfUlRDVE9EQSwgJnNlY29uZHMpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIG91dDsKKwlpZiAoc2Vjb25kcyA+PSA4NjQwMCkgeworCQlyZXQgPSAtRU5PREFUQTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gbWMxMzc4M19yZWdfcmVhZChwcml2LT5tYzEzNzgzLCBNQzEzNzgzX1JUQ0RBWSwgJmRheXMpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIG91dDsKKworCXJldCA9IG1jMTM3ODNfaXJxX3N0YXR1cyhwcml2LT5tYzEzNzgzLCBNQzEzNzgzX0lSUV9UT0RBLAorCQkJJmVuYWJsZWQsICZwZW5kaW5nKTsKKworb3V0OgorCW1jMTM3ODNfdW5sb2NrKHByaXYtPm1jMTM3ODMpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWFsYXJtLT5lbmFibGVkID0gZW5hYmxlZDsKKwlhbGFybS0+cGVuZGluZyA9IHBlbmRpbmc7CisKKwlzMTk3MCA9IGRheXMgKiA4NjQwMCArIHNlY29uZHM7CisKKwlydGNfdGltZV90b190bShzMTk3MCwgJmFsYXJtLT50aW1lKTsKKwlkZXZfZGJnKGRldiwgIiVzOiAlbHVcbiIsIF9fZnVuY19fLCBzMTk3MCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYzEzNzgzX3J0Y19zZXRfYWxhcm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3drYWxybSAqYWxhcm0pCit7CisJc3RydWN0IG1jMTM3ODNfcnRjICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgbG9uZyBzMTk3MDsKKwl1bnNpZ25lZCBzZWNvbmRzLCBkYXlzOworCWludCByZXQ7CisKKwltYzEzNzgzX2xvY2socHJpdi0+bWMxMzc4Myk7CisKKwkvKiBkaXNhYmxlIGFsYXJtIHRvIHByZXZlbnQgZmFsc2UgdHJpZ2dlcmluZyAqLworCXJldCA9IG1jMTM3ODNfcmVnX3dyaXRlKHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfUlRDVE9EQSwgMHgxZmZmZik7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCWdvdG8gb3V0OworCisJcmV0ID0gbWMxMzc4M19pcnFfYWNrKHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfSVJRX1RPREEpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlnb3RvIG91dDsKKworCXJldCA9IHJ0Y190bV90b190aW1lKCZhbGFybS0+dGltZSwgJnMxOTcwKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBvdXQ7CisKKwlkZXZfZGJnKGRldiwgIiVzOiBvJTIucyAlbHVcbiIsIF9fZnVuY19fLCBhbGFybS0+ZW5hYmxlZCA/ICJuIiA6ICJmZiIsCisJCQlzMTk3MCk7CisKKwlyZXQgPSBtYzEzNzgzX3J0Y19pcnFfZW5hYmxlX3VubG9ja2VkKGRldiwgYWxhcm0tPmVuYWJsZWQsCisJCQlNQzEzNzgzX0lSUV9UT0RBKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJZ290byBvdXQ7CisKKwlzZWNvbmRzID0gczE5NzAgJSA4NjQwMDsKKwlkYXlzID0gczE5NzAgLyA4NjQwMDsKKworCXJldCA9IG1jMTM3ODNfcmVnX3dyaXRlKHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfUlRDREFZQSwgZGF5cyk7CisJaWYgKHVubGlrZWx5KHJldCkpCisJCWdvdG8gb3V0OworCisJcmV0ID0gbWMxMzc4M19yZWdfd3JpdGUocHJpdi0+bWMxMzc4MywgTUMxMzc4M19SVENUT0RBLCBzZWNvbmRzKTsKKworb3V0OgorCW1jMTM3ODNfdW5sb2NrKHByaXYtPm1jMTM3ODMpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlycXJldHVybl90IG1jMTM3ODNfcnRjX2FsYXJtX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2KQoreworCXN0cnVjdCBtYzEzNzgzX3J0YyAqcHJpdiA9IGRldjsKKwlzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MyA9IHByaXYtPm1jMTM3ODM7CisKKwlkZXZfZGJnKCZwcml2LT5ydGMtPmRldiwgIkFsYXJtXG4iKTsKKworCXJ0Y191cGRhdGVfaXJxKHByaXYtPnJ0YywgMSwgUlRDX0lSUUYgfCBSVENfQUYpOworCisJbWMxMzc4M19pcnFfYWNrKG1jMTM3ODMsIGlycSk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKIHN0YXRpYyBpcnFyZXR1cm5fdCBtYzEzNzgzX3J0Y191cGRhdGVfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXYpCiB7CiAJc3RydWN0IG1jMTM3ODNfcnRjICpwcml2ID0gZGV2OwpAQCAtMTIzLDcgKzI3Niw3IEBACiAKIAlydGNfdXBkYXRlX2lycShwcml2LT5ydGMsIDEsIFJUQ19JUlFGIHwgUlRDX1VGKTsKIAotCW1jMTM3ODNfYWNraXJxKG1jMTM3ODMsIGlycSk7CisJbWMxMzc4M19pcnFfYWNrKG1jMTM3ODMsIGlycSk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0xMzEsMjQgKzI4NCwyMSBAQAogc3RhdGljIGludCBtYzEzNzgzX3J0Y191cGRhdGVfaXJxX2VuYWJsZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCXVuc2lnbmVkIGludCBlbmFibGVkKQogewotCXN0cnVjdCBtYzEzNzgzX3J0YyAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCWludCByZXQgPSAtRU5PREFUQTsKKwlyZXR1cm4gbWMxMzc4M19ydGNfaXJxX2VuYWJsZShkZXYsIGVuYWJsZWQsIE1DMTM3ODNfSVJRXzFIWik7Cit9CiAKLQltYzEzNzgzX2xvY2socHJpdi0+bWMxMzc4Myk7Ci0JaWYgKCFwcml2LT52YWxpZCkKLQkJZ290byBvdXQ7Ci0KLQlyZXQgPSAoZW5hYmxlZCA/IG1jMTM3ODNfdW5tYXNrIDogbWMxMzc4M19tYXNrKShwcml2LT5tYzEzNzgzLAotCQkJTUMxMzc4M19JUlFfMUhaKTsKLW91dDoKLQltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKLQotCXJldHVybiByZXQ7CitzdGF0aWMgaW50IG1jMTM3ODNfcnRjX2FsYXJtX2lycV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LAorCQl1bnNpZ25lZCBpbnQgZW5hYmxlZCkKK3sKKwlyZXR1cm4gbWMxMzc4M19ydGNfaXJxX2VuYWJsZShkZXYsIGVuYWJsZWQsIE1DMTM3ODNfSVJRX1RPREEpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgbWMxMzc4M19ydGNfb3BzID0gewogCS5yZWFkX3RpbWUgPSBtYzEzNzgzX3J0Y19yZWFkX3RpbWUsCiAJLnNldF9tbXNzID0gbWMxMzc4M19ydGNfc2V0X21tc3MsCisJLnJlYWRfYWxhcm0gPSBtYzEzNzgzX3J0Y19yZWFkX2FsYXJtLAorCS5zZXRfYWxhcm0gPSBtYzEzNzgzX3J0Y19zZXRfYWxhcm0sCisJLmFsYXJtX2lycV9lbmFibGUgPSBtYzEzNzgzX3J0Y19hbGFybV9pcnFfZW5hYmxlLAogCS51cGRhdGVfaXJxX2VuYWJsZSA9IG1jMTM3ODNfcnRjX3VwZGF0ZV9pcnFfZW5hYmxlLAogfTsKIApAQCAtMTYwLDcgKzMxMCw3IEBACiAJZGV2X2RiZygmcHJpdi0+cnRjLT5kZXYsICJSVENSU1RcbiIpOwogCXByaXYtPnZhbGlkID0gMDsKIAotCW1jMTM3ODNfbWFzayhtYzEzNzgzLCBpcnEpOworCW1jMTM3ODNfaXJxX21hc2sobWMxMzc4MywgaXJxKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KQEAgLTE2OSw2ICszMTksNyBAQAogewogCWludCByZXQ7CiAJc3RydWN0IG1jMTM3ODNfcnRjICpwcml2OworCWludCBydGNyc3RfcGVuZGluZzsKIAogCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdikKQEAgLTE3Nyw4ICszMjgsNiBAQAogCXByaXYtPm1jMTM3ODMgPSBkZXZfZ2V0X2RydmRhdGEocGRldi0+ZGV2LnBhcmVudCk7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcHJpdik7CiAKLQlwcml2LT52YWxpZCA9IDE7Ci0KIAltYzEzNzgzX2xvY2socHJpdi0+bWMxMzc4Myk7CiAKIAlyZXQgPSBtYzEzNzgzX2lycV9yZXF1ZXN0KHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfSVJRX1JUQ1JTVCwKQEAgLTE4NiwzMyArMzM1LDQ1IEBACiAJaWYgKHJldCkKIAkJZ290byBlcnJfcmVzZXRfaXJxX3JlcXVlc3Q7CiAKKwlyZXQgPSBtYzEzNzgzX2lycV9zdGF0dXMocHJpdi0+bWMxMzc4MywgTUMxMzc4M19JUlFfUlRDUlNULAorCQkJTlVMTCwgJnJ0Y3JzdF9wZW5kaW5nKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9yZXNldF9pcnFfc3RhdHVzOworCisJcHJpdi0+dmFsaWQgPSAhcnRjcnN0X3BlbmRpbmc7CisKIAlyZXQgPSBtYzEzNzgzX2lycV9yZXF1ZXN0X25vdW5tYXNrKHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfSVJRXzFIWiwKIAkJCW1jMTM3ODNfcnRjX3VwZGF0ZV9oYW5kbGVyLCBEUklWRVJfTkFNRSwgcHJpdik7CiAJaWYgKHJldCkKIAkJZ290byBlcnJfdXBkYXRlX2lycV9yZXF1ZXN0OwogCi0JbWMxMzc4M191bmxvY2socHJpdi0+bWMxMzc4Myk7CisJcmV0ID0gbWMxMzc4M19pcnFfcmVxdWVzdF9ub3VubWFzayhwcml2LT5tYzEzNzgzLCBNQzEzNzgzX0lSUV9UT0RBLAorCQkJbWMxMzc4M19ydGNfYWxhcm1faGFuZGxlciwgRFJJVkVSX05BTUUsIHByaXYpOworCWlmIChyZXQpCisJCWdvdG8gZXJyX2FsYXJtX2lycV9yZXF1ZXN0OwogCiAJcHJpdi0+cnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwZGV2LT5uYW1lLAogCQkJJnBkZXYtPmRldiwgJm1jMTM3ODNfcnRjX29wcywgVEhJU19NT0RVTEUpOwotCiAJaWYgKElTX0VSUihwcml2LT5ydGMpKSB7CiAJCXJldCA9IFBUUl9FUlIocHJpdi0+cnRjKTsKIAotCQltYzEzNzgzX2xvY2socHJpdi0+bWMxMzc4Myk7CisJCW1jMTM3ODNfaXJxX2ZyZWUocHJpdi0+bWMxMzc4MywgTUMxMzc4M19JUlFfVE9EQSwgcHJpdik7CitlcnJfYWxhcm1faXJxX3JlcXVlc3Q6CiAKIAkJbWMxMzc4M19pcnFfZnJlZShwcml2LT5tYzEzNzgzLCBNQzEzNzgzX0lSUV8xSFosIHByaXYpOwogZXJyX3VwZGF0ZV9pcnFfcmVxdWVzdDoKIAorZXJyX3Jlc2V0X2lycV9zdGF0dXM6CisKIAkJbWMxMzc4M19pcnFfZnJlZShwcml2LT5tYzEzNzgzLCBNQzEzNzgzX0lSUV9SVENSU1QsIHByaXYpOwogZXJyX3Jlc2V0X2lycV9yZXF1ZXN0OgogCi0JCW1jMTM3ODNfdW5sb2NrKHByaXYtPm1jMTM3ODMpOwotCiAJCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCQlrZnJlZShwcml2KTsKIAl9CiAKKwltYzEzNzgzX3VubG9jayhwcml2LT5tYzEzNzgzKTsKKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIyMCwxMCArMzgxLDExIEBACiB7CiAJc3RydWN0IG1jMTM3ODNfcnRjICpwcml2ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlydGNfZGV2aWNlX3VucmVnaXN0ZXIocHJpdi0+cnRjKTsKLQogCW1jMTM3ODNfbG9jayhwcml2LT5tYzEzNzgzKTsKIAorCXJ0Y19kZXZpY2VfdW5yZWdpc3Rlcihwcml2LT5ydGMpOworCisJbWMxMzc4M19pcnFfZnJlZShwcml2LT5tYzEzNzgzLCBNQzEzNzgzX0lSUV9UT0RBLCBwcml2KTsKIAltYzEzNzgzX2lycV9mcmVlKHByaXYtPm1jMTM3ODMsIE1DMTM3ODNfSVJRXzFIWiwgcHJpdik7CiAJbWMxMzc4M19pcnFfZnJlZShwcml2LT5tYzEzNzgzLCBNQzEzNzgzX0lSUV9SVENSU1QsIHByaXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtbXhjLmMgYi9kcml2ZXJzL3J0Yy9ydGMtbXhjLmMKaW5kZXggNmJkNTA3Mi4uODcxMGY5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW14Yy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1teGMuYwpAQCAtMzk2LDggKzM5NiwxMSBAQAogCXBkYXRhLT5pb2FkZHIgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAKIAljbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJja2lsIik7Ci0JaWYgKElTX0VSUihjbGspKQotCQlyZXR1cm4gUFRSX0VSUihjbGspOworCWlmIChJU19FUlIoY2xrKSkgeworCQlpb3VubWFwKHBkYXRhLT5pb2FkZHIpOworCQlyZXQgPSBQVFJfRVJSKGNsayk7CisJCWdvdG8gZXhpdF9mcmVlX3BkYXRhOworCX0KIAogCXJhdGUgPSBjbGtfZ2V0X3JhdGUoY2xrKTsKIAljbGtfcHV0KGNsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGNmMjEyMy5jIGIvZHJpdmVycy9ydGMvcnRjLXBjZjIxMjMuYwppbmRleCBlNzVkZjlkLi4yY2ViMzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGNmMjEyMy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2YyMTIzLmMKQEAgLTMxNSw3ICszMTUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcGNmMjEyM19yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3N0YXRpYyBpbnQgX19kZXZleGl0IHBjZjIxMjNfcmVtb3ZlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpCiB7CiAJc3RydWN0IHBjZjIxMjNfcGxhdF9kYXRhICpwZGF0YSA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtc3lzZnMuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zeXNmcy5jCmluZGV4IDdkZDIzYTYuLjM4MDA4M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1zeXNmcy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zeXNmcy5jCkBAIC0xMDcsOCArMTA3LDkgQEAKIAkJY2hhciAqYnVmKQogewogI2lmZGVmIENPTkZJR19SVENfSENUT1NZU19ERVZJQ0UKLQlpZiAoc3RyY21wKGRldl9uYW1lKCZ0b19ydGNfZGV2aWNlKGRldiktPmRldiksCi0JCSAgIENPTkZJR19SVENfSENUT1NZU19ERVZJQ0UpID09IDApCisJaWYgKHJ0Y19oY3Rvc3lzX3JldCA9PSAwICYmCisJCQlzdHJjbXAoZGV2X25hbWUoJnRvX3J0Y19kZXZpY2UoZGV2KS0+ZGV2KSwKKwkJCQlDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFKSA9PSAwKQogCQlyZXR1cm4gc3ByaW50ZihidWYsICIxXG4iKTsKIAllbHNlCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy10d2wuYyBiL2RyaXZlcnMvcnRjL3J0Yy10d2wuYwppbmRleCBjNmE4M2EyLi5lZDFiODY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtdHdsLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXR3bC5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJUkVHX1JUQ19DT01QX0xTQl9SRUcsCiAJUkVHX1JUQ19DT01QX01TQl9SRUcsCiB9OwotY29uc3Qgc3RhdGljIHU4IHR3bDQwMzBfcnRjX3JlZ19tYXBbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCB0d2w0MDMwX3J0Y19yZWdfbWFwW10gPSB7CiAJW1JFR19TRUNPTkRTX1JFR10gPSAweDAwLAogCVtSRUdfTUlOVVRFU19SRUddID0gMHgwMSwKIAlbUkVHX0hPVVJTX1JFR10gPSAweDAyLApAQCAtODAsNyArODAsNyBAQAogCVtSRUdfUlRDX0NPTVBfTFNCX1JFR10gPSAweDEwLAogCVtSRUdfUlRDX0NPTVBfTVNCX1JFR10gPSAweDExLAogfTsKLWNvbnN0IHN0YXRpYyB1OCB0d2w2MDMwX3J0Y19yZWdfbWFwW10gPSB7CitzdGF0aWMgY29uc3QgdTggdHdsNjAzMF9ydGNfcmVnX21hcFtdID0gewogCVtSRUdfU0VDT05EU19SRUddID0gMHgwMCwKIAlbUkVHX01JTlVURVNfUkVHXSA9IDB4MDEsCiAJW1JFR19IT1VSU19SRUddID0gMHgwMiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy13bTgzNTAuYyBiL2RyaXZlcnMvcnRjL3J0Yy13bTgzNTAuYwppbmRleCBmMWU0NDA1Mi4uM2QwZGM3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXdtODM1MC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy13bTgzNTAuYwpAQCAtMzA3LDExICszMDcsMTggQEAKIHsKIAlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAorCS8qIFN1cHByZXNzIGR1cGxpY2F0ZSBjaGFuZ2VzIHNpbmNlIGdlbmlycSBuZXN0cyBlbmFibGUgYW5kCisJICogZGlzYWJsZSBjYWxscy4gKi8KKwlpZiAoZW5hYmxlZCA9PSB3bTgzNTAtPnJ0Yy51cGRhdGVfZW5hYmxlZCkKKwkJcmV0dXJuIDA7CisKIAlpZiAoZW5hYmxlZCkKIAkJd204MzUwX3VubWFza19pcnEod204MzUwLCBXTTgzNTBfSVJRX1JUQ19TRUMpOwogCWVsc2UKIAkJd204MzUwX21hc2tfaXJxKHdtODM1MCwgV004MzUwX0lSUV9SVENfU0VDKTsKIAorCXdtODM1MC0+cnRjLnVwZGF0ZV9lbmFibGVkID0gZW5hYmxlZDsKKwogCXJldHVybiAwOwogfQogCkBAIC00NzgsOCArNDg1LDggQEAKIAlzdHJ1Y3Qgd204MzUwICp3bTgzNTAgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3Qgd204MzUwX3J0YyAqd21fcnRjID0gJndtODM1MC0+cnRjOwogCi0Jd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9SVENfU0VDKTsKLQl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX1JUQ19BTE0pOworCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfUlRDX1NFQywgd204MzUwKTsKKwl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX1JUQ19BTE0sIHdtODM1MCk7CiAKIAlydGNfZGV2aWNlX3VucmVnaXN0ZXIod21fcnRjLT5ydGMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2QuYwppbmRleCA0OTUxYWE4Li5iYmVhOTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZC5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CiAjaW5jbHVkZSA8YXNtL2lkYWxzLmg+CiAjaW5jbHVkZSA8YXNtL2l0Y3cuaD4KKyNpbmNsdWRlIDxhc20vZGlhZy5oPgogCiAvKiBUaGlzIGlzIHVnbHkuLi4gKi8KICNkZWZpbmUgUFJJTlRLX0hFQURFUiAiZGFzZDoiCkBAIC0yMjEyLDYgKzIyMTMsMTMgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJaWYgKChtb2RlICYgRk1PREVfV1JJVEUpICYmCisJICAgICh0ZXN0X2JpdChEQVNEX0ZMQUdfREVWSUNFX1JPLCAmYmFzZS0+ZmxhZ3MpIHx8CisJICAgICAoYmFzZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfUkVBRE9OTFkpKSkgeworCQlyYyA9IC1FUk9GUzsKKwkJZ290byBvdXQ7CisJfQorCiAJcmV0dXJuIDA7CiAKIG91dDoKQEAgLTIyODksNiArMjI5NywzNCBAQAogICogU0VDVElPTjogY29tbW9uIGZ1bmN0aW9ucyBmb3IgY2N3X2RyaXZlciB1c2UKICAqLwogCisvKgorICogSXMgdGhlIGRldmljZSByZWFkLW9ubHk/CisgKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCByZXBvcnQgdGhlIHNldHRpbmcgb2YgdGhlCisgKiByZWFkb25seSBkZXZpY2UgYXR0cmlidXRlLCBidXQgaG93IGl0IGlzIGNvbmZpZ3VyZWQgaW4gei9WTS4KKyAqLworaW50IGRhc2RfZGV2aWNlX2lzX3JvKHN0cnVjdCBkYXNkX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBjY3dfZGV2X2lkIGRldl9pZDsKKwlzdHJ1Y3QgZGlhZzIxMCBkaWFnX2RhdGE7CisJaW50IHJjOworCisJaWYgKCFNQUNISU5FX0lTX1ZNKQorCQlyZXR1cm4gMDsKKwljY3dfZGV2aWNlX2dldF9pZChkZXZpY2UtPmNkZXYsICZkZXZfaWQpOworCW1lbXNldCgmZGlhZ19kYXRhLCAwLCBzaXplb2YoZGlhZ19kYXRhKSk7CisJZGlhZ19kYXRhLnZyZGNkdm5vID0gZGV2X2lkLmRldm5vOworCWRpYWdfZGF0YS52cmRjbGVuID0gc2l6ZW9mKGRpYWdfZGF0YSk7CisJcmMgPSBkaWFnMjEwKCZkaWFnX2RhdGEpOworCWlmIChyYyA9PSAwIHx8IHJjID09IDIpIHsKKwkJcmV0dXJuIGRpYWdfZGF0YS52cmRjdmZsYSAmIDB4ODA7CisJfSBlbHNlIHsKKwkJREJGX0VWRU5UKERCRl9XQVJOSU5HLCAiZGlhZzIxMCBmYWlsZWQgZm9yIGRldj0lMDR4IHdpdGggcmM9JWQiLAorCQkJICBkZXZfaWQuZGV2bm8sIHJjKTsKKwkJcmV0dXJuIDA7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoZGFzZF9kZXZpY2VfaXNfcm8pOworCiBzdGF0aWMgdm9pZCBkYXNkX2dlbmVyaWNfYXV0b19vbmxpbmUodm9pZCAqZGF0YSwgYXN5bmNfY29va2llX3QgY29va2llKQogewogCXN0cnVjdCBjY3dfZGV2aWNlICpjZGV2ID0gZGF0YTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF8zOTkwX2VycC5jCmluZGV4IDQ0Nzk2YmEuLjUxMjI0ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkXzM5OTBfZXJwLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfMzk5MF9lcnAuYwpAQCAtMTA0NSw2ICsxMDQ1LDEwIEBACiAKIAkJZXJwLT5yZXRyaWVzID0gNTsKIAorCX0gZWxzZSBpZiAoc2Vuc2VbMV0gJiBTTlMxX1dSSVRFX0lOSElCSVRFRCkgeworCQlkZXZfZXJyKCZkZXZpY2UtPmNkZXYtPmRldiwgIkFuIEkvTyByZXF1ZXN0IHdhcyByZWplY3RlZCIKKwkJCSIgYmVjYXVzZSB3cml0aW5nIGlzIGluaGliaXRlZFxuIik7CisJCWVycCA9IGRhc2RfMzk5MF9lcnBfY2xlYW51cChlcnAsIERBU0RfQ1FSX0ZBSUxFRCk7CiAJfSBlbHNlIHsKIAkJLyogZmF0YWwgZXJyb3IgLSAgc2V0IHN0YXR1cyB0byBGQUlMRUQKIAkJICAgaW50ZXJuYWwgZXJyb3IgMDkgLSBDb21tYW5kIFJlamVjdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGV2bWFwLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwppbmRleCBkNDk3NjZmLi44ZTIzOTE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kZXZtYXAuYwpAQCAtNzQyLDYgKzc0Miw3IEBACiAJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGRhc2RfZGV2bWFwICpkZXZtYXA7CisJc3RydWN0IGRhc2RfZGV2aWNlICpkZXZpY2U7CiAJaW50IHZhbDsKIAljaGFyICplbmRwOwogCkBAIC03NTgsMTIgKzc1OSwxNCBAQAogCQlkZXZtYXAtPmZlYXR1cmVzIHw9IERBU0RfRkVBVFVSRV9SRUFET05MWTsKIAllbHNlCiAJCWRldm1hcC0+ZmVhdHVyZXMgJj0gfkRBU0RfRkVBVFVSRV9SRUFET05MWTsKLQlpZiAoZGV2bWFwLT5kZXZpY2UpCi0JCWRldm1hcC0+ZGV2aWNlLT5mZWF0dXJlcyA9IGRldm1hcC0+ZmVhdHVyZXM7Ci0JaWYgKGRldm1hcC0+ZGV2aWNlICYmIGRldm1hcC0+ZGV2aWNlLT5ibG9jawotCSAgICAmJiBkZXZtYXAtPmRldmljZS0+YmxvY2stPmdkcCkKLQkJc2V0X2Rpc2tfcm8oZGV2bWFwLT5kZXZpY2UtPmJsb2NrLT5nZHAsIHZhbCk7CisJZGV2aWNlID0gZGV2bWFwLT5kZXZpY2U7CisJaWYgKGRldmljZSkgeworCQlkZXZpY2UtPmZlYXR1cmVzID0gZGV2bWFwLT5mZWF0dXJlczsKKwkJdmFsID0gdmFsIHx8IHRlc3RfYml0KERBU0RfRkxBR19ERVZJQ0VfUk8sICZkZXZpY2UtPmZsYWdzKTsKKwl9CiAJc3Bpbl91bmxvY2soJmRhc2RfZGV2bWFwX2xvY2spOworCWlmIChkZXZpY2UgJiYgZGV2aWNlLT5ibG9jayAmJiBkZXZpY2UtPmJsb2NrLT5nZHApCisJCXNldF9kaXNrX3JvKGRldmljZS0+YmxvY2stPmdkcCwgdmFsKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwppbmRleCA2ZTE0ODYzLi42ODdmMzIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCkBAIC0xNDUsMTIgKzE0NSwxMCBAQAogCW1kc2tfdGVybV9pbyhkZXZpY2UpOwogCXJjID0gbWRza19pbml0X2lvKGRldmljZSwgZGV2aWNlLT5ibG9jay0+YnBfYmxvY2ssIDAsIE5VTEwpOwogCWlmIChyYyA9PSA0KSB7Ci0JCWlmICghKGRldmljZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfUkVBRE9OTFkpKSB7CisJCWlmICghKHRlc3RfYW5kX3NldF9iaXQoREFTRF9GTEFHX0RFVklDRV9STywgJmRldmljZS0+ZmxhZ3MpKSkKIAkJCXByX3dhcm5pbmcoIiVzOiBUaGUgYWNjZXNzIG1vZGUgb2YgYSBESUFHIGRldmljZSAiCiAJCQkJICAgImNoYW5nZWQgdG8gcmVhZC1vbmx5XG4iLAogCQkJCSAgIGRldl9uYW1lKCZkZXZpY2UtPmNkZXYtPmRldikpOwotCQkJZGV2aWNlLT5mZWF0dXJlcyB8PSBEQVNEX0ZFQVRVUkVfUkVBRE9OTFk7Ci0JCX0KIAkJcmMgPSAwOwogCX0KIAlpZiAocmMpCkBAIC00NDksNyArNDQ3LDcgQEAKIAkJcmMgPSAtRUlPOwogCX0gZWxzZSB7CiAJCWlmIChyYyA9PSA0KQotCQkJZGV2aWNlLT5mZWF0dXJlcyB8PSBEQVNEX0ZFQVRVUkVfUkVBRE9OTFk7CisJCQlzZXRfYml0KERBU0RfRkxBR19ERVZJQ0VfUk8sICZkZXZpY2UtPmZsYWdzKTsKIAkJcHJfaW5mbygiJXM6IE5ldyBEQVNEIHdpdGggJWxkIGJ5dGUvYmxvY2ssIHRvdGFsIHNpemUgJWxkICIKIAkJCSJLQiVzXG4iLCBkZXZfbmFtZSgmZGV2aWNlLT5jZGV2LT5kZXYpLAogCQkJKHVuc2lnbmVkIGxvbmcpIGJsb2NrLT5icF9ibG9jaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYwppbmRleCAxY2NhMjFhLi4wMWY0ZTdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCkBAIC0xMDg5LDYgKzEwODksNyBAQAogCXN0cnVjdCBkYXNkX2Vja2RfcHJpdmF0ZSAqcHJpdmF0ZTsKIAlzdHJ1Y3QgZGFzZF9ibG9jayAqYmxvY2s7CiAJaW50IGlzX2tub3duLCByYzsKKwlpbnQgcmVhZG9ubHk7CiAKIAlpZiAoIWNjd19kZXZpY2VfaXNfcGF0aGdyb3VwKGRldmljZS0+Y2RldikpIHsKIAkJZGV2X3dhcm4oJmRldmljZS0+Y2Rldi0+ZGV2LApAQCAtMTE4MiwxNSArMTE4MywyMCBAQAogCWVsc2UKIAkJcHJpdmF0ZS0+cmVhbF9jeWwgPSBwcml2YXRlLT5yZGNfZGF0YS5ub19jeWw7CiAKKwlyZWFkb25seSA9IGRhc2RfZGV2aWNlX2lzX3JvKGRldmljZSk7CisJaWYgKHJlYWRvbmx5KQorCQlzZXRfYml0KERBU0RfRkxBR19ERVZJQ0VfUk8sICZkZXZpY2UtPmZsYWdzKTsKKwogCWRldl9pbmZvKCZkZXZpY2UtPmNkZXYtPmRldiwgIk5ldyBEQVNEICUwNFgvJTAyWCAoQ1UgJTA0WC8lMDJYKSAiCi0JCSAid2l0aCAlZCBjeWxpbmRlcnMsICVkIGhlYWRzLCAlZCBzZWN0b3JzXG4iLAorCQkgIndpdGggJWQgY3lsaW5kZXJzLCAlZCBoZWFkcywgJWQgc2VjdG9ycyVzXG4iLAogCQkgcHJpdmF0ZS0+cmRjX2RhdGEuZGV2X3R5cGUsCiAJCSBwcml2YXRlLT5yZGNfZGF0YS5kZXZfbW9kZWwsCiAJCSBwcml2YXRlLT5yZGNfZGF0YS5jdV90eXBlLAogCQkgcHJpdmF0ZS0+cmRjX2RhdGEuY3VfbW9kZWwubW9kZWwsCiAJCSBwcml2YXRlLT5yZWFsX2N5bCwKIAkJIHByaXZhdGUtPnJkY19kYXRhLnRya19wZXJfY3lsLAotCQkgcHJpdmF0ZS0+cmRjX2RhdGEuc2VjX3Blcl90cmspOworCQkgcHJpdmF0ZS0+cmRjX2RhdGEuc2VjX3Blcl90cmssCisJCSByZWFkb25seSA/ICIsIHJlYWQtb25seSBkZXZpY2UiIDogIiIpOwogCXJldHVybiAwOwogCiBvdXRfZXJyMzoKQEAgLTI4MzksOCArMjg0NSwxMyBAQAogCWNoYXIgKnBzZl9kYXRhLCAqcnNzZF9yZXN1bHQ7CiAJc3RydWN0IGRhc2RfY2N3X3JlcSAqY3FyOwogCXN0cnVjdCBjY3cxICpjY3c7CisJY2hhciBwc2YwLCBwc2YxOwogCWludCByYzsKIAorCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSAmJiAhY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKKwkJcmV0dXJuIC1FQUNDRVM7CisJcHNmMCA9IHBzZjEgPSAwOworCiAJLyogQ29weSBwYXJtcyBmcm9tIGNhbGxlciAqLwogCXJjID0gLUVGQVVMVDsKIAlpZiAoY29weV9mcm9tX3VzZXIoJnVzcnBhcm0sIGFyZ3AsIHNpemVvZih1c3JwYXJtKSkpCkBAIC0yODY5LDEyICsyODgwLDggQEAKIAkJCSAgICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKSB1c3JwYXJtLnBzZl9kYXRhLAogCQkJICAgdXNycGFybS5wc2ZfZGF0YV9sZW4pKQogCQlnb3RvIG91dF9mcmVlOwotCi0JLyogc2FuaXR5IGNoZWNrIG9uIHN5c2NhbGwgaGVhZGVyICovCi0JaWYgKHBzZl9kYXRhWzBdICE9IDB4MTcgJiYgcHNmX2RhdGFbMV0gIT0gMHhjZSkgewotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQorCXBzZjAgPSBwc2ZfZGF0YVswXTsKKwlwc2YxID0gcHNmX2RhdGFbMV07CiAKIAkvKiBzZXR1cCBDQ1dzIGZvciBQU0YgKyBSU1NEICovCiAJY3FyID0gZGFzZF9zbWFsbG9jX3JlcXVlc3QoREFTRF9FQ0tEX01BR0lDLCAyICwgMCwgZGV2aWNlKTsKQEAgLTI5MjUsNyArMjkzMiw5IEBACiAJa2ZyZWUocnNzZF9yZXN1bHQpOwogCWtmcmVlKHBzZl9kYXRhKTsKIG91dDoKLQlEQkZfREVWX0VWRU5UKERCRl9XQVJOSU5HLCBkZXZpY2UsICJTeW1tZXRyaXggaW9jdGw6IHJjPSVkIiwgcmMpOworCURCRl9ERVZfRVZFTlQoREJGX1dBUk5JTkcsIGRldmljZSwKKwkJICAgICAgIlN5bW1ldHJpeCBpb2N0bCAoMHglMDJ4IDB4JTAyeCk6IHJjPSVkIiwKKwkJICAgICAgKGludCkgcHNmMCwgKGludCkgcHNmMSwgcmMpOwogCXJldHVybiByYzsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYwppbmRleCAwZjE1MjQ0Li4zNzI4MmI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9mYmEuYwpAQCAtMTI0LDYgKzEyNCw3IEBACiAJc3RydWN0IGRhc2RfZmJhX3ByaXZhdGUgKnByaXZhdGU7CiAJc3RydWN0IGNjd19kZXZpY2UgKmNkZXYgPSBkZXZpY2UtPmNkZXY7CiAJaW50IHJjOworCWludCByZWFkb25seTsKIAogCXByaXZhdGUgPSAoc3RydWN0IGRhc2RfZmJhX3ByaXZhdGUgKikgZGV2aWNlLT5wcml2YXRlOwogCWlmICghcHJpdmF0ZSkgewpAQCAtMTYyLDE2ICsxNjMsMjEgQEAKIAkJcmV0dXJuIHJjOwogCX0KIAorCXJlYWRvbmx5ID0gZGFzZF9kZXZpY2VfaXNfcm8oZGV2aWNlKTsKKwlpZiAocmVhZG9ubHkpCisJCXNldF9iaXQoREFTRF9GTEFHX0RFVklDRV9STywgJmRldmljZS0+ZmxhZ3MpOworCiAJZGV2X2luZm8oJmRldmljZS0+Y2Rldi0+ZGV2LAogCQkgIk5ldyBGQkEgREFTRCAlMDRYLyUwMlggKENVICUwNFgvJTAyWCkgd2l0aCAlZCBNQiAiCi0JCSAiYW5kICVkIEIvYmxrXG4iLAorCQkgImFuZCAlZCBCL2JsayVzXG4iLAogCQkgY2Rldi0+aWQuZGV2X3R5cGUsCiAJCSBjZGV2LT5pZC5kZXZfbW9kZWwsCiAJCSBjZGV2LT5pZC5jdV90eXBlLAogCQkgY2Rldi0+aWQuY3VfbW9kZWwsCiAJCSAoKHByaXZhdGUtPnJkY19kYXRhLmJsa19iZHNhICoKIAkJICAgKHByaXZhdGUtPnJkY19kYXRhLmJsa19zaXplID4+IDkpKSA+PiAxMSksCi0JCSBwcml2YXRlLT5yZGNfZGF0YS5ibGtfc2l6ZSk7CisJCSBwcml2YXRlLT5yZGNfZGF0YS5ibGtfc2l6ZSwKKwkJIHJlYWRvbmx5ID8gIiwgcmVhZC1vbmx5IGRldmljZSIgOiAiIik7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9nZW5oZC5jCmluZGV4IDk0ZjkyYTEuLjMwYTFjYTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2dlbmhkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZ2VuaGQuYwpAQCAtNzAsNyArNzAsOCBAQAogCX0KIAlsZW4gKz0gc3ByaW50ZihnZHAtPmRpc2tfbmFtZSArIGxlbiwgIiVjIiwgJ2EnKyhiYXNlLT5kZXZpbmRleCUyNikpOwogCi0JaWYgKGJsb2NrLT5iYXNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9SRUFET05MWSkKKwlpZiAoYmFzZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfUkVBRE9OTFkgfHwKKwkgICAgdGVzdF9iaXQoREFTRF9GTEFHX0RFVklDRV9STywgJmJhc2UtPmZsYWdzKSkKIAkJc2V0X2Rpc2tfcm8oZ2RwLCAxKTsKIAlnZHAtPnByaXZhdGVfZGF0YSA9IGJsb2NrOwogCWdkcC0+cXVldWUgPSBibG9jay0+cmVxdWVzdF9xdWV1ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ludC5oIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKaW5kZXggZWQ3M2NlNS4uYTkxZDRhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW50LmgKQEAgLTQzNiw2ICs0MzYsMTAgQEAKICNkZWZpbmUgREFTRF9GTEFHX09GRkxJTkUJMwkvKiBkZXZpY2UgaXMgaW4gb2ZmbGluZSBwcm9jZXNzaW5nICovCiAjZGVmaW5lIERBU0RfRkxBR19FRVJfU05TUwk0CS8qIEEgU05TUyBpcyByZXF1aXJlZCAqLwogI2RlZmluZSBEQVNEX0ZMQUdfRUVSX0lOX1VTRQk1CS8qIEEgU05TUyByZXF1ZXN0IGlzIHJ1bm5pbmcgKi8KKyNkZWZpbmUgREFTRF9GTEFHX0RFVklDRV9STwk2CS8qIFRoZSBkZXZpY2UgaXRzZWxmIGlzIHJlYWQtb25seS4gRG9uJ3QKKwkJCQkJICogY29uZnVzZSB0aGlzIHdpdGggdGhlIHVzZXIgc3BlY2lmaWVkCisJCQkJCSAqIHJlYWQtb25seSBmZWF0dXJlLgorCQkJCQkgKi8KIAogdm9pZCBkYXNkX3B1dF9kZXZpY2Vfd2FrZShzdHJ1Y3QgZGFzZF9kZXZpY2UgKik7CiAKQEAgLTYwOSw2ICs2MTMsOSBAQAogdm9pZCBkYXNkX2RldmljZV9zZXRfc3RvcF9iaXRzKHN0cnVjdCBkYXNkX2RldmljZSAqLCBpbnQpOwogdm9pZCBkYXNkX2RldmljZV9yZW1vdmVfc3RvcF9iaXRzKHN0cnVjdCBkYXNkX2RldmljZSAqLCBpbnQpOwogCitpbnQgZGFzZF9kZXZpY2VfaXNfcm8oc3RydWN0IGRhc2RfZGV2aWNlICopOworCisKIC8qIGV4dGVybmFscyBpbiBkYXNkX2Rldm1hcC5jICovCiBleHRlcm4gaW50IGRhc2RfbWF4X2RldmluZGV4OwogZXh0ZXJuIGludCBkYXNkX3Byb2Jlb25seTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9pb2N0bC5jCmluZGV4IDcwMzlkOWMuLjM0NzlmODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfaW9jdGwuYwpAQCAtMTk5LDcgKzE5OSw4IEBACiAJaWYgKCFhcmdwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChibG9jay0+YmFzZS0+ZmVhdHVyZXMgJiBEQVNEX0ZFQVRVUkVfUkVBRE9OTFkpCisJaWYgKGJsb2NrLT5iYXNlLT5mZWF0dXJlcyAmIERBU0RfRkVBVFVSRV9SRUFET05MWSB8fAorCSAgICB0ZXN0X2JpdChEQVNEX0ZMQUdfREVWSUNFX1JPLCAmYmxvY2stPmJhc2UtPmZsYWdzKSkKIAkJcmV0dXJuIC1FUk9GUzsKIAlpZiAoY29weV9mcm9tX3VzZXIoJmZkYXRhLCBhcmdwLCBzaXplb2Yoc3RydWN0IGZvcm1hdF9kYXRhX3QpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0zNDksNyArMzUwLDggQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGdldF91c2VyKGludHZhbCwgKGludCBfX3VzZXIgKilhcmdwKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0KKwlpZiAoIWludHZhbCAmJiB0ZXN0X2JpdChEQVNEX0ZMQUdfREVWSUNFX1JPLCAmYmxvY2stPmJhc2UtPmZsYWdzKSkKKwkJcmV0dXJuIC1FUk9GUzsKIAlzZXRfZGlza19ybyhiZGV2LT5iZF9kaXNrLCBpbnR2YWwpOwogCXJldHVybiBkYXNkX3NldF9mZWF0dXJlKGJsb2NrLT5iYXNlLT5jZGV2LCBEQVNEX0ZFQVRVUkVfUkVBRE9OTFksIGludHZhbCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9yYXczMjcwLmMKaW5kZXggNjJkZGY1Mi4uMmE0YzU2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvcmF3MzI3MC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3JhdzMyNzAuYwpAQCAtMzczLDcgKzM3Myw3IEBACiAJCXJxLT5yYyA9IGNjd19kZXZpY2Vfc3RhcnQocnAtPmNkZXYsICZycS0+Y2N3LAogCQkJCQkgICh1bnNpZ25lZCBsb25nKSBycSwgMCwgMCk7CiAJCWlmIChycS0+cmMgPT0gMCkKLQkJCXJldHVybjsJLyogU3VjZXNzZnVsbHkgcmVzdGFydGVkLiAqLworCQkJcmV0dXJuOwkvKiBTdWNjZXNzZnVsbHkgcmVzdGFydGVkLiAqLwogCQlicmVhazsKIAljYXNlIFJBVzMyNzBfSU9fU1RPUDoKIAkJaWYgKCFycSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHAuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHAuYwppbmRleCBlYzg4YzU5Li5mNmQ3MmUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9zY2xwLmMKKysrIGIvZHJpdmVycy9zMzkwL2NoYXIvc2NscC5jCkBAIC0xOTYsNyArMTk2LDcgQEAKIAlyZXEtPnN0YXJ0X2NvdW50Kys7CiAKIAlpZiAocmMgPT0gMCkgewotCQkvKiBTdWNlc3NmdWxseSBzdGFydGVkIHJlcXVlc3QgKi8KKwkJLyogU3VjY2Vzc2Z1bGx5IHN0YXJ0ZWQgcmVxdWVzdCAqLwogCQlyZXEtPnN0YXR1cyA9IFNDTFBfUkVRX1JVTk5JTkc7CiAJCXNjbHBfcnVubmluZ19zdGF0ZSA9IHNjbHBfcnVubmluZ19zdGF0ZV9ydW5uaW5nOwogCQlfX3NjbHBfc2V0X3JlcXVlc3RfdGltZXIoU0NMUF9SRVRSWV9JTlRFUlZBTCAqIEhaLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYyBiL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlLmMKaW5kZXggYzZhYmI3NS4uNmQyMjlmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9kZXZpY2UuYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZS5jCkBAIC03NjQsNyArNzY0LDcgQEAKIHN0YXRpYyB2b2lkIGlvX3N1YmNoYW5uZWxfcmVnaXN0ZXIoc3RydWN0IGNjd19kZXZpY2UgKmNkZXYpCiB7CiAJc3RydWN0IHN1YmNoYW5uZWwgKnNjaDsKLQlpbnQgcmV0OworCWludCByZXQsIGFkanVzdF9pbml0X2NvdW50ID0gMTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc2NoID0gdG9fc3ViY2hhbm5lbChjZGV2LT5kZXYucGFyZW50KTsKQEAgLTc5Myw2ICs3OTMsNyBAQAogCQkJCQkgICAgICBjZGV2LT5wcml2YXRlLT5kZXZfaWQuc3NpZCwKIAkJCQkJICAgICAgY2Rldi0+cHJpdmF0ZS0+ZGV2X2lkLmRldm5vKTsKIAkJfQorCQlhZGp1c3RfaW5pdF9jb3VudCA9IDA7CiAJCWdvdG8gb3V0OwogCX0KIAkvKgpAQCAtODE4LDcgKzgxOSw3IEBACiAJY2Rldi0+cHJpdmF0ZS0+ZmxhZ3MucmVjb2dfZG9uZSA9IDE7CiAJd2FrZV91cCgmY2Rldi0+cHJpdmF0ZS0+d2FpdF9xKTsKIG91dF9lcnI6Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmNjd19kZXZpY2VfaW5pdF9jb3VudCkpCisJaWYgKGFkanVzdF9pbml0X2NvdW50ICYmIGF0b21pY19kZWNfYW5kX3Rlc3QoJmNjd19kZXZpY2VfaW5pdF9jb3VudCkpCiAJCXdha2VfdXAoJmNjd19kZXZpY2VfaW5pdF93cSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vcWRpb19kZWJ1Zy5jIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKaW5kZXggYzk0ZWIyYS4uNmNlODNmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9xZGlvX2RlYnVnLmMKQEAgLTMzLDcgKzMzLDYgQEAKIAlEQkZfSEVYKCZpbml0X2RhdGEtPmlucHV0X2hhbmRsZXIsIHNpemVvZih2b2lkICopKTsKIAlEQkZfSEVYKCZpbml0X2RhdGEtPm91dHB1dF9oYW5kbGVyLCBzaXplb2Yodm9pZCAqKSk7CiAJREJGX0hFWCgmaW5pdF9kYXRhLT5pbnRfcGFybSwgc2l6ZW9mKGxvbmcpKTsKLQlEQkZfSEVYKCZpbml0X2RhdGEtPmZsYWdzLCBzaXplb2YobG9uZykpOwogCURCRl9IRVgoJmluaXRfZGF0YS0+aW5wdXRfc2JhbF9hZGRyX2FycmF5LCBzaXplb2Yodm9pZCAqKSk7CiAJREJGX0hFWCgmaW5pdF9kYXRhLT5vdXRwdXRfc2JhbF9hZGRyX2FycmF5LCBzaXplb2Yodm9pZCAqKSk7CiAJREJGX0VWRU5UKCJpcnE6JThseCIsICh1bnNpZ25lZCBsb25nKWlycV9wdHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYyBiL2RyaXZlcnMvczM5MC9jaW8vcWRpb19tYWluLmMKaW5kZXggMjMyZWYwNC4uNGY4Zjc0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Npby9xZGlvX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW9fbWFpbi5jCkBAIC01ODgsMTAgKzU4OCwxMSBAQAogCWlmIChxLT5pc19pbnB1dF9xKSB7CiAJCXFwZXJmX2luYyhxLCBpbmJvdW5kX2hhbmRsZXIpOwogCQlEQkZfREVWX0VWRU5UKERCRl9JTkZPLCBxLT5pcnFfcHRyLCAia2loIHM6JTAyeCBjOiUwMngiLCBzdGFydCwgY291bnQpOwotCX0gZWxzZQorCX0gZWxzZSB7CiAJCXFwZXJmX2luYyhxLCBvdXRib3VuZF9oYW5kbGVyKTsKIAkJREJGX0RFVl9FVkVOVChEQkZfSU5GTywgcS0+aXJxX3B0ciwgImtvaDogczolMDJ4IGM6JTAyeCIsCiAJCQkgICAgICBzdGFydCwgY291bnQpOworCX0KIAogCXEtPmhhbmRsZXIocS0+aXJxX3B0ci0+Y2RldiwgcS0+cWRpb19lcnJvciwgcS0+bnIsIHN0YXJ0LCBjb3VudCwKIAkJICAgcS0+aXJxX3B0ci0+aW50X3Bhcm0pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9LY29uZmlnIGIvZHJpdmVycy9zMzkwL25ldC9LY29uZmlnCmluZGV4IGNiOTA5YTUuLjk3N2JiNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3MzOTAvbmV0L0tjb25maWcKQEAgLTQzLDYgKzQzLDE2IEBACiAJICBTZWxlY3QgdGhpcyBvcHRpb24gaWYgeW91IHdhbnQgdG8gYmUgYWJsZSB0byByZWNlaXZlIFNNU0cgbWVzc2FnZXMKIAkgIGZyb20gb3RoZXIgVk0gZ3Vlc3Qgc3lzdGVtcy4KIAorY29uZmlnIFNNU0dJVUNWX0VWRU5UCisJdHJpc3RhdGUgIkRlbGl2ZXIgSVVDViBzcGVjaWFsIG1lc3NhZ2VzIGFzIHVldmVudHMgKFZNIG9ubHkpIgorCWRlcGVuZHMgb24gU01TR0lVQ1YKKwloZWxwCisJICBTZWxlY3QgdGhpcyBvcHRpb24gdG8gZGVsaXZlciBDUCBzcGVjaWFsIG1lc3NhZ2VzIChTTVNHcykgYXMKKwkgIHVldmVudHMuICBUaGUgZHJpdmVyIGhhbmRsZXMgb25seSB0aG9zZSBzcGVjaWFsIG1lc3NhZ2VzIHRoYXQKKwkgIHN0YXJ0IHdpdGggIkFQUCIuCisKKwkgIFRvIGNvbXBpbGUgYXMgYSBtb2R1bGUsIGNob29zZSBNLiBUaGUgbW9kdWxlIG5hbWUgaXMgInNtc2dpdWN2X2FwcCIuCisKIGNvbmZpZyBDTEFXCiAJdHJpc3RhdGUgIkNMQVcgZGV2aWNlIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBDQ1cgJiYgTkVUREVWSUNFUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9NYWtlZmlsZSBiL2RyaXZlcnMvczM5MC9uZXQvTWFrZWZpbGUKaW5kZXggNmNhYjVhNi4uNGRmZThjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3MzOTAvbmV0L01ha2VmaWxlCkBAIC02LDYgKzYsNyBAQAogb2JqLSQoQ09ORklHX0NUQ00pICs9IGN0Y20ubyBmc20ubwogb2JqLSQoQ09ORklHX05FVElVQ1YpICs9IG5ldGl1Y3YubyBmc20ubwogb2JqLSQoQ09ORklHX1NNU0dJVUNWKSArPSBzbXNnaXVjdi5vCitvYmotJChDT05GSUdfU01TR0lVQ1ZfRVZFTlQpICs9IHNtc2dpdWN2X2FwcC5vCiBvYmotJChDT05GSUdfTENTKSArPSBsY3Mubwogb2JqLSQoQ09ORklHX0NMQVcpICs9IGNsYXcubwogcWV0aC15ICs9IHFldGhfY29yZV9zeXMubyBxZXRoX2NvcmVfbWFpbi5vIHFldGhfY29yZV9tcGMubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlLmgKaW5kZXggYjIzMjY5My4uYTNhYzQ0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmUuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZS5oCkBAIC02NDksNiArNjQ5LDcgQEAKIAlpbnQgcGVyZm9ybWFuY2Vfc3RhdHM7CiAJaW50IHJ4X3NnX2NiOwogCWVudW0gcWV0aF9pcGFfaXNvbGF0aW9uX21vZGVzIGlzb2xhdGlvbjsKKwlpbnQgc25pZmZlcjsKIH07CiAKIC8qCkBAIC03MzcsNiArNzM4LDcgQEAKIAlzdHJ1Y3QgcWV0aF9kaXNjaXBsaW5lIGRpc2NpcGxpbmU7CiAJYXRvbWljX3QgZm9yY2VfYWxsb2Nfc2tiOwogCXN0cnVjdCBzZXJ2aWNlX2xldmVsIHFldGhfc2VydmljZV9sZXZlbDsKKwlzdHJ1Y3QgcWRpb19zc3FkX2Rlc2Mgc3NxZDsKIH07CiAKIHN0cnVjdCBxZXRoX2NhcmRfbGlzdF9zdHJ1Y3QgewpAQCAtODExLDcgKzgxMyw4IEBACiBzdHJ1Y3QgcWV0aF9jbWRfYnVmZmVyICpxZXRoX2dldF9pcGFjbWRfYnVmZmVyKHN0cnVjdCBxZXRoX2NhcmQgKiwKIAkJCWVudW0gcWV0aF9pcGFfY21kcywgZW51bSBxZXRoX3Byb3RfdmVyc2lvbnMpOwogaW50IHFldGhfcXVlcnlfc2V0YWRhcHRlcnBhcm1zKHN0cnVjdCBxZXRoX2NhcmQgKik7Ci1pbnQgcWV0aF9jaGVja19xZGlvX2Vycm9ycyhzdHJ1Y3QgcWRpb19idWZmZXIgKiwgdW5zaWduZWQgaW50LCBjb25zdCBjaGFyICopOworaW50IHFldGhfY2hlY2tfcWRpb19lcnJvcnMoc3RydWN0IHFldGhfY2FyZCAqLCBzdHJ1Y3QgcWRpb19idWZmZXIgKiwKKwkJdW5zaWduZWQgaW50LCBjb25zdCBjaGFyICopOwogdm9pZCBxZXRoX3F1ZXVlX2lucHV0X2J1ZmZlcihzdHJ1Y3QgcWV0aF9jYXJkICosIGludCk7CiBzdHJ1Y3Qgc2tfYnVmZiAqcWV0aF9jb3JlX2dldF9uZXh0X3NrYihzdHJ1Y3QgcWV0aF9jYXJkICosCiAJCXN0cnVjdCBxZGlvX2J1ZmZlciAqLCBzdHJ1Y3QgcWRpb19idWZmZXJfZWxlbWVudCAqKiwgaW50ICosCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKaW5kZXggZDM0ODA0ZC4uN2QyNWJkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21haW4uYwpAQCAtMjY5LDYgKzI2OSw3IEBACiAJY2FyZC0+cWRpby5pbml0X3Bvb2wuYnVmX2NvdW50ID0gYnVmY250OwogCXJldHVybiBxZXRoX2FsbG9jX2J1ZmZlcl9wb29sKGNhcmQpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwocWV0aF9yZWFsbG9jX2J1ZmZlcl9wb29sKTsKIAogc3RhdGljIGludCBxZXRoX2lzc3VlX25leHRfcmVhZChzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQogewpAQCAtMzUwLDggKzM1MSwxMCBAQAogCWlmIChJU19JUEEoaW9iLT5kYXRhKSkgewogCQljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKSBQRFVfRU5DQVBTVUxBVElPTihpb2ItPmRhdGEpOwogCQlpZiAoSVNfSVBBX1JFUExZKGNtZCkpIHsKLQkJCWlmIChjbWQtPmhkci5jb21tYW5kIDwgSVBBX0NNRF9TRVRDQ0lEIHx8Ci0JCQkgICAgY21kLT5oZHIuY29tbWFuZCA+IElQQV9DTURfTU9EQ0NJRCkKKwkJCWlmIChjbWQtPmhkci5jb21tYW5kICE9IElQQV9DTURfU0VUQ0NJRCAmJgorCQkJICAgIGNtZC0+aGRyLmNvbW1hbmQgIT0gSVBBX0NNRF9ERUxDQ0lEICYmCisJCQkgICAgY21kLT5oZHIuY29tbWFuZCAhPSBJUEFfQ01EX01PRENDSUQgJiYKKwkJCSAgICBjbWQtPmhkci5jb21tYW5kICE9IElQQV9DTURfU0VUX0RJQUdfQVNTKQogCQkJCXFldGhfaXNzdWVfaXBhX21zZyhjbWQsCiAJCQkJCQljbWQtPmhkci5yZXR1cm5fY29kZSwgY2FyZCk7CiAJCQlyZXR1cm4gY21kOwpAQCAtMTEwMCwxMSArMTEwMyw2IEBACiAJY2FyZC0+dGhyZWFkX3J1bm5pbmdfbWFzayA9IDA7CiAJSU5JVF9XT1JLKCZjYXJkLT5rZXJuZWxfdGhyZWFkX3N0YXJ0ZXIsIHFldGhfc3RhcnRfa2VybmVsX3RocmVhZCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmlwX2xpc3QpOwotCWNhcmQtPmlwX3RiZF9saXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCksIEdGUF9LRVJORUwpOwotCWlmICghY2FyZC0+aXBfdGJkX2xpc3QpIHsKLQkJUUVUSF9EQkZfVEVYVChTRVRVUCwgMCwgImlwdGJkbm9tIik7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KIAlJTklUX0xJU1RfSEVBRChjYXJkLT5pcF90YmRfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmNhcmQtPmNtZF93YWl0ZXJfbGlzdCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY2FyZC0+d2FpdF9xKTsKQEAgLTExMzgsMjEgKzExMzYsMzAgQEAKIAlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiYWxsb2NjcmQiKTsKIAljYXJkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFldGhfY2FyZCksIEdGUF9ETUF8R0ZQX0tFUk5FTCk7CiAJaWYgKCFjYXJkKQotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBvdXQ7CiAJUUVUSF9EQkZfSEVYKFNFVFVQLCAyLCAmY2FyZCwgc2l6ZW9mKHZvaWQgKikpOwotCWlmIChxZXRoX3NldHVwX2NoYW5uZWwoJmNhcmQtPnJlYWQpKSB7Ci0JCWtmcmVlKGNhcmQpOwotCQlyZXR1cm4gTlVMTDsKKwljYXJkLT5pcF90YmRfbGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWNhcmQtPmlwX3RiZF9saXN0KSB7CisJCVFFVEhfREJGX1RFWFQoU0VUVVAsIDAsICJpcHRiZG5vbSIpOworCQlnb3RvIG91dF9jYXJkOwogCX0KLQlpZiAocWV0aF9zZXR1cF9jaGFubmVsKCZjYXJkLT53cml0ZSkpIHsKLQkJcWV0aF9jbGVhbl9jaGFubmVsKCZjYXJkLT5yZWFkKTsKLQkJa2ZyZWUoY2FyZCk7Ci0JCXJldHVybiBOVUxMOwotCX0KKwlpZiAocWV0aF9zZXR1cF9jaGFubmVsKCZjYXJkLT5yZWFkKSkKKwkJZ290byBvdXRfaXA7CisJaWYgKHFldGhfc2V0dXBfY2hhbm5lbCgmY2FyZC0+d3JpdGUpKQorCQlnb3RvIG91dF9jaGFubmVsOwogCWNhcmQtPm9wdGlvbnMubGF5ZXIyID0gLTE7CiAJY2FyZC0+cWV0aF9zZXJ2aWNlX2xldmVsLnNlcV9wcmludCA9IHFldGhfY29yZV9zbF9wcmludDsKIAlyZWdpc3Rlcl9zZXJ2aWNlX2xldmVsKCZjYXJkLT5xZXRoX3NlcnZpY2VfbGV2ZWwpOwogCXJldHVybiBjYXJkOworCitvdXRfY2hhbm5lbDoKKwlxZXRoX2NsZWFuX2NoYW5uZWwoJmNhcmQtPnJlYWQpOworb3V0X2lwOgorCWtmcmVlKGNhcmQtPmlwX3RiZF9saXN0KTsKK291dF9jYXJkOgorCWtmcmVlKGNhcmQpOworb3V0OgorCXJldHVybiBOVUxMOwogfQogCiBzdGF0aWMgaW50IHFldGhfZGV0ZXJtaW5lX2NhcmRfdHlwZShzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQpAQCAtMTM1NSwyNiArMTM2MiwyOSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgcWV0aF9nZXRfdW5pdGFkZHIoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3N0YXRpYyB2b2lkIHFldGhfY29uZmlndXJlX3VuaXRhZGRyKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIGNoYXIgKnByY2QpCiB7Ci0JaW50IGxlbmd0aDsKLQljaGFyICpwcmNkOwotCWludCByYzsKLQotCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJnZXR1bml0Iik7Ci0JcmMgPSBxZXRoX3JlYWRfY29uZl9kYXRhKGNhcmQsICh2b2lkICoqKSAmcHJjZCwgJmxlbmd0aCk7Ci0JaWYgKHJjKSB7Ci0JCVFFVEhfREJGX01FU1NBR0UoMiwgIiVzIHFldGhfcmVhZF9jb25mX2RhdGEgcmV0dXJuZWQgJWlcbiIsCi0JCQlkZXZfbmFtZSgmY2FyZC0+Z2Rldi0+ZGV2KSwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQorCVFFVEhfREJGX1RFWFQoU0VUVVAsIDIsICJjZmd1bml0Iik7CiAJY2FyZC0+aW5mby5jaHBpZCA9IHByY2RbMzBdOwogCWNhcmQtPmluZm8udW5pdF9hZGRyMiA9IHByY2RbMzFdOwogCWNhcmQtPmluZm8uY3VsYSA9IHByY2RbNjNdOwogCWNhcmQtPmluZm8uZ3Vlc3RsYW4gPSAoKHByY2RbMHgxMF0gPT0gX2FzY2ViY1snViddKSAmJgogCQkJICAgICAgIChwcmNkWzB4MTFdID09IF9hc2NlYmNbJ00nXSkpOwotCWtmcmVlKHByY2QpOwotCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBxZXRoX2NvbmZpZ3VyZV9ibGt0X2RlZmF1bHQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgY2hhciAqcHJjZCkKK3sKKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiY2ZnYmxrdCIpOworCisJaWYgKHByY2RbNzRdID09IDB4RjAgJiYgcHJjZFs3NV0gPT0gMHhGMCAmJiBwcmNkWzc2XSA9PSAweEY1KSB7CisJCWNhcmQtPmluZm8uYmxrdC50aW1lX3RvdGFsID0gMjUwOworCQljYXJkLT5pbmZvLmJsa3QuaW50ZXJfcGFja2V0ID0gNTsKKwkJY2FyZC0+aW5mby5ibGt0LmludGVyX3BhY2tldF9qdW1ibyA9IDE1OworCX0gZWxzZSB7CisJCWNhcmQtPmluZm8uYmxrdC50aW1lX3RvdGFsID0gMDsKKwkJY2FyZC0+aW5mby5ibGt0LmludGVyX3BhY2tldCA9IDA7CisJCWNhcmQtPmluZm8uYmxrdC5pbnRlcl9wYWNrZXRfanVtYm8gPSAwOworCX0KIH0KIAogc3RhdGljIHZvaWQgcWV0aF9pbml0X3Rva2VucyhzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkKQpAQCAtMjU3Myw4ICsyNTgzLDggQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHFldGhfcXVlcnlfc2V0YWRhcHRlcnBhcm1zKTsKIAotaW50IHFldGhfY2hlY2tfcWRpb19lcnJvcnMoc3RydWN0IHFkaW9fYnVmZmVyICpidWYsIHVuc2lnbmVkIGludCBxZGlvX2Vycm9yLAotCQljb25zdCBjaGFyICpkYmZ0ZXh0KQoraW50IHFldGhfY2hlY2tfcWRpb19lcnJvcnMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgc3RydWN0IHFkaW9fYnVmZmVyICpidWYsCisJCXVuc2lnbmVkIGludCBxZGlvX2Vycm9yLCBjb25zdCBjaGFyICpkYmZ0ZXh0KQogewogCWlmIChxZGlvX2Vycm9yKSB7CiAJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDIsIGRiZnRleHQpOwpAQCAtMjU4NCw3ICsyNTk0LDExIEBACiAJCVFFVEhfREJGX1RFWFRfKFFFUlIsIDIsICIgRjE0PSUwMlgiLAogCQkJICAgICAgIGJ1Zi0+ZWxlbWVudFsxNF0uZmxhZ3MgJiAweGZmKTsKIAkJUUVUSF9EQkZfVEVYVF8oUUVSUiwgMiwgIiBxZXJyPSVYIiwgcWRpb19lcnJvcik7Ci0JCXJldHVybiAxOworCQlpZiAoKGJ1Zi0+ZWxlbWVudFsxNV0uZmxhZ3MgJiAweGZmKSA9PSAweDEyKSB7CisJCQljYXJkLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCQlyZXR1cm4gMDsKKwkJfSBlbHNlCisJCQlyZXR1cm4gMTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yNjY3LDcgKzI2ODEsNyBAQAogCQkJcWRpb19lcnIgPSAxOwogCQl9CiAJfQotCXFldGhfY2hlY2tfcWRpb19lcnJvcnMoYnVmZmVyLT5idWZmZXIsIHFkaW9fZXJyLCAicW91dGVyciIpOworCXFldGhfY2hlY2tfcWRpb19lcnJvcnMoY2FyZCwgYnVmZmVyLT5idWZmZXIsIHFkaW9fZXJyLCAicW91dGVyciIpOwogCiAJaWYgKCFxZGlvX2VycikKIAkJcmV0dXJuIFFFVEhfU0VORF9FUlJPUl9OT05FOwpAQCAtMzUwOSw2ICszNTIzLDcgQEAKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkOwogCisJUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgInR4dGltZW8iKTsKIAljYXJkID0gZGV2LT5tbF9wcml2OwogCWNhcmQtPnN0YXRzLnR4X2Vycm9ycysrOwogCXFldGhfc2NoZWR1bGVfcmVjb3ZlcnkoY2FyZCk7CkBAIC0zNzkwLDkgKzM4MDUsNiBAQAogCWluaXRfZGF0YS5pbnB1dF9oYW5kbGVyICAgICAgICAgID0gY2FyZC0+ZGlzY2lwbGluZS5pbnB1dF9oYW5kbGVyOwogCWluaXRfZGF0YS5vdXRwdXRfaGFuZGxlciAgICAgICAgID0gY2FyZC0+ZGlzY2lwbGluZS5vdXRwdXRfaGFuZGxlcjsKIAlpbml0X2RhdGEuaW50X3Bhcm0gICAgICAgICAgICAgICA9ICh1bnNpZ25lZCBsb25nKSBjYXJkOwotCWluaXRfZGF0YS5mbGFncyAgICAgICAgICAgICAgICAgID0gUURJT19JTkJPVU5EXzBDT1BZX1NCQUxTIHwKLQkJCQkJICAgUURJT19PVVRCT1VORF8wQ09QWV9TQkFMUyB8Ci0JCQkJCSAgIFFESU9fVVNFX09VVEJPVU5EX1BDSVM7CiAJaW5pdF9kYXRhLmlucHV0X3NiYWxfYWRkcl9hcnJheSAgPSAodm9pZCAqKikgaW5fc2JhbF9wdHJzOwogCWluaXRfZGF0YS5vdXRwdXRfc2JhbF9hZGRyX2FycmF5ID0gKHZvaWQgKiopIG91dF9zYmFsX3B0cnM7CiAKQEAgLTM4NDcsOSArMzg1OSw3IEBACiAKIGludCBxZXRoX2NvcmVfaGFyZHNldHVwX2NhcmQoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKIHsKLQlzdHJ1Y3QgcWRpb19zc3FkX2Rlc2MgKnNzcWQ7CiAJaW50IHJldHJpZXMgPSAwOwotCWludCBtcG5vID0gMDsKIAlpbnQgcmM7CiAKIAlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiaHJkc2V0dXAiKTsKQEAgLTM4ODIsMzEgKzM4OTIsNiBAQAogCQllbHNlCiAJCQlnb3RvIHJldHJ5OwogCX0KLQotCXJjID0gcWV0aF9nZXRfdW5pdGFkZHIoY2FyZCk7Ci0JaWYgKHJjKSB7Ci0JCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiMmVyciVkIiwgcmMpOwotCQlyZXR1cm4gcmM7Ci0JfQotCi0Jc3NxZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBxZGlvX3NzcWRfZGVzYyksIEdGUF9LRVJORUwpOwotCWlmICghc3NxZCkgewotCQlyYyA9IC1FTk9NRU07Ci0JCWdvdG8gb3V0OwotCX0KLQlyYyA9IHFkaW9fZ2V0X3NzcWRfZGVzYyhDQVJEX0RERVYoY2FyZCksIHNzcWQpOwotCWlmIChyYyA9PSAwKQotCQltcG5vID0gc3NxZC0+cGNudDsKLQlrZnJlZShzc3FkKTsKLQotCWlmIChtcG5vKQotCQltcG5vID0gbWluKG1wbm8gLSAxLCBRRVRIX01BWF9QT1JUTk8pOwotCWlmIChjYXJkLT5pbmZvLnBvcnRubyA+IG1wbm8pIHsKLQkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiRGV2aWNlICVzIGRvZXMgbm90IG9mZmVyIHBvcnQgbnVtYmVyICVkIgotCQkJIlxuLiIsIENBUkRfQlVTX0lEKGNhcmQpLCBjYXJkLT5pbmZvLnBvcnRubyk7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBvdXQ7Ci0JfQogCXFldGhfaW5pdF90b2tlbnMoY2FyZCk7CiAJcWV0aF9pbml0X2Z1bmNfbGV2ZWwoY2FyZCk7CiAJcmMgPSBxZXRoX2lkeF9hY3RpdmF0ZV9jaGFubmVsKCZjYXJkLT5yZWFkLCBxZXRoX2lkeF9yZWFkX2NiKTsKQEAgLTM5OTAsNyArMzk3NSw3IEBACiAJc3RydWN0IHFkaW9fYnVmZmVyX2VsZW1lbnQgKmVsZW1lbnQgPSAqX19lbGVtZW50OwogCWludCBvZmZzZXQgPSAqX19vZmZzZXQ7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IE5VTEw7Ci0JaW50IHNrYl9sZW47CisJaW50IHNrYl9sZW4gPSAwOwogCXZvaWQgKmRhdGFfcHRyOwogCWludCBkYXRhX2xlbjsKIAlpbnQgaGVhZHJvb20gPSAwOwpAQCAtNDAwOSwyMCArMzk5NCwyNCBAQAogCSpoZHIgPSBlbGVtZW50LT5hZGRyICsgb2Zmc2V0OwogCiAJb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpOwotCWlmIChjYXJkLT5vcHRpb25zLmxheWVyMikgewotCQlpZiAoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX09TTikgewotCQkJc2tiX2xlbiA9ICgqaGRyKS0+aGRyLm9zbi5wZHVfbGVuZ3RoOwotCQkJaGVhZHJvb20gPSBzaXplb2Yoc3RydWN0IHFldGhfaGRyKTsKLQkJfSBlbHNlIHsKLQkJCXNrYl9sZW4gPSAoKmhkciktPmhkci5sMi5wa3RfbGVuZ3RoOwotCQl9Ci0JfSBlbHNlIHsKKwlzd2l0Y2ggKCgqaGRyKS0+aGRyLmwyLmlkKSB7CisJY2FzZSBRRVRIX0hFQURFUl9UWVBFX0xBWUVSMjoKKwkJc2tiX2xlbiA9ICgqaGRyKS0+aGRyLmwyLnBrdF9sZW5ndGg7CisJCWJyZWFrOworCWNhc2UgUUVUSF9IRUFERVJfVFlQRV9MQVlFUjM6CiAJCXNrYl9sZW4gPSAoKmhkciktPmhkci5sMy5sZW5ndGg7CiAJCWlmICgoY2FyZC0+aW5mby5saW5rX3R5cGUgPT0gUUVUSF9MSU5LX1RZUEVfTEFORV9UUikgfHwKIAkJICAgIChjYXJkLT5pbmZvLmxpbmtfdHlwZSA9PSBRRVRIX0xJTktfVFlQRV9IU1RSKSkKIAkJCWhlYWRyb29tID0gVFJfSExFTjsKIAkJZWxzZQogCQkJaGVhZHJvb20gPSBFVEhfSExFTjsKKwkJYnJlYWs7CisJY2FzZSBRRVRIX0hFQURFUl9UWVBFX09TTjoKKwkJc2tiX2xlbiA9ICgqaGRyKS0+aGRyLm9zbi5wZHVfbGVuZ3RoOworCQloZWFkcm9vbSA9IHNpemVvZihzdHJ1Y3QgcWV0aF9oZHIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKIAl9CiAKIAlpZiAoIXNrYl9sZW4pCkBAIC00MTc3LDYgKzQxNjYsNDEgQEAKIAljYXJkLT5kaXNjaXBsaW5lLmNjd2dkcml2ZXIgPSBOVUxMOwogfQogCitzdGF0aWMgdm9pZCBxZXRoX2RldGVybWluZV9jYXBhYmlsaXRpZXMoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlpbnQgcmM7CisJaW50IGxlbmd0aDsKKwljaGFyICpwcmNkOworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgImRldGNhcGFiIik7CisJcmMgPSBjY3dfZGV2aWNlX3NldF9vbmxpbmUoQ0FSRF9EREVWKGNhcmQpKTsKKwlpZiAocmMpIHsKKwkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIzZXJyJWQiLCByYyk7CisJCWdvdG8gb3V0OworCX0KKworCisJcmMgPSBxZXRoX3JlYWRfY29uZl9kYXRhKGNhcmQsICh2b2lkICoqKSAmcHJjZCwgJmxlbmd0aCk7CisJaWYgKHJjKSB7CisJCVFFVEhfREJGX01FU1NBR0UoMiwgIiVzIHFldGhfcmVhZF9jb25mX2RhdGEgcmV0dXJuZWQgJWlcbiIsCisJCQlkZXZfbmFtZSgmY2FyZC0+Z2Rldi0+ZGV2KSwgcmMpOworCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjVlcnIlZCIsIHJjKTsKKwkJZ290byBvdXRfb2ZmbGluZTsKKwl9CisJcWV0aF9jb25maWd1cmVfdW5pdGFkZHIoY2FyZCwgcHJjZCk7CisJcWV0aF9jb25maWd1cmVfYmxrdF9kZWZhdWx0KGNhcmQsIHByY2QpOworCWtmcmVlKHByY2QpOworCisJcmMgPSBxZGlvX2dldF9zc3FkX2Rlc2MoQ0FSRF9EREVWKGNhcmQpLCAmY2FyZC0+c3NxZCk7CisJaWYgKHJjKQorCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjZlcnIlZCIsIHJjKTsKKworb3V0X29mZmxpbmU6CisJY2N3X2RldmljZV9zZXRfb2ZmbGluZShDQVJEX0RERVYoY2FyZCkpOworb3V0OgorCXJldHVybjsKK30KKwogc3RhdGljIGludCBxZXRoX2NvcmVfcHJvYmVfZGV2aWNlKHN0cnVjdCBjY3dncm91cF9kZXZpY2UgKmdkZXYpCiB7CiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZDsKQEAgLTQyNDIsNiArNDI2Niw4IEBACiAJd3JpdGVfbG9ja19pcnFzYXZlKCZxZXRoX2NvcmVfY2FyZF9saXN0LnJ3bG9jaywgZmxhZ3MpOwogCWxpc3RfYWRkX3RhaWwoJmNhcmQtPmxpc3QsICZxZXRoX2NvcmVfY2FyZF9saXN0Lmxpc3QpOwogCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZxZXRoX2NvcmVfY2FyZF9saXN0LnJ3bG9jaywgZmxhZ3MpOworCisJcWV0aF9kZXRlcm1pbmVfY2FwYWJpbGl0aWVzKGNhcmQpOwogCXJldHVybiAwOwogCiBlcnJfY2FyZDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX21wYy5oIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbXBjLmgKaW5kZXggMWJhNTExNS4uMTA0YTMzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbXBjLmgKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbXBjLmgKQEAgLTE1Niw2ICsxNTYsOCBAQAogCUlQQV9SQ19JUF9UQUJMRV9GVUxMCQk9IDB4MDAwMiwKIAlJUEFfUkNfVU5LTk9XTl9FUlJPUgkJPSAweDAwMDMsCiAJSVBBX1JDX1VOU1VQUE9SVEVEX0NPTU1BTkQJPSAweDAwMDQsCisJSVBBX1JDX1RSQUNFX0FMUkVBRFlfQUNUSVZFCT0gMHgwMDA1LAorCUlQQV9SQ19JTlZBTElEX0ZPUk1BVAkJPSAweDAwMDYsCiAJSVBBX1JDX0RVUF9JUFY2X1JFTU9URQkJPSAweDAwMDgsCiAJSVBBX1JDX0RVUF9JUFY2X0hPTUUJCT0gMHgwMDEwLAogCUlQQV9SQ19VTlJFR0lTVEVSRURfQUREUgk9IDB4MDAxMSwKQEAgLTE5Niw2ICsxOTgsMTEgQEAKIAlJUEFfUkNfSU5WQUxJRF9JUF9WRVJTSU9OMgk9IDB4ZjAwMSwKIAlJUEFfUkNfRkZGRgkJCT0gMHhmZmZmCiB9OworLyogZm9yIERFTElQICovCisjZGVmaW5lIElQQV9SQ19JUF9BRERSRVNTX05PVF9ERUZJTkVECUlQQV9SQ19QUklNQVJZX0FMUkVBRFlfREVGSU5FRAorLyogZm9yIFNFVF9ESUFHTk9TVElDX0FTU0lTVCAqLworI2RlZmluZSBJUEFfUkNfSU5WQUxJRF9TVUJDTUQJCUlQQV9SQ19JUF9UQUJMRV9GVUxMCisjZGVmaW5lIElQQV9SQ19IQVJEV0FSRV9BVVRIX0VSUk9SCUlQQV9SQ19VTktOT1dOX0VSUk9SCiAKIC8qIElQQSBmdW5jdGlvbiBmbGFnczsgZWFjaCBmbGFnIG1hcmtzIGF2YWlsYWJpbGl0eSBvZiByZXNwZWN0aXZlIGZ1bmN0aW9uICovCiBlbnVtIHFldGhfaXBhX2Z1bmNzIHsKQEAgLTI0Niw2ICsyNTMsNyBAQAogCUlQQV9TRVRBRFBfU0VUX1NOTVBfQ09OVFJPTAkJPSAweDAwMDAwMjAwTCwKIAlJUEFfU0VUQURQX1FVRVJZX0NBUkRfSU5GTwkJPSAweDAwMDAwNDAwTCwKIAlJUEFfU0VUQURQX1NFVF9QUk9NSVNDX01PREUJCT0gMHgwMDAwMDgwMEwsCisJSVBBX1NFVEFEUF9TRVRfRElBR19BU1NJU1QJCT0gMHgwMDAwMjAwMEwsCiAJSVBBX1NFVEFEUF9TRVRfQUNDRVNTX0NPTlRST0wJCT0gMHgwMDAxMDAwMEwsCiB9OwogZW51bSBxZXRoX2lwYV9tYWNfb3BzIHsKQEAgLTQyNCw2ICs0MzIsNDAgQEAKIAlfX3U4IHVuaXF1ZV9pZFs4XTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCisvKiBTRVQgRElBR05PU1RJQyBBU1NJU1QgSVBBIENvbW1hbmQ6CSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitlbnVtIHFldGhfZGlhZ3NfY21kcyB7CisJUUVUSF9ESUFHU19DTURfUVVFUlkJPSAweDAwMDEsCisJUUVUSF9ESUFHU19DTURfVFJBUAk9IDB4MDAwMiwKKwlRRVRIX0RJQUdTX0NNRF9UUkFDRQk9IDB4MDAwNCwKKwlRRVRIX0RJQUdTX0NNRF9OT0xPRwk9IDB4MDAwOCwKKwlRRVRIX0RJQUdTX0NNRF9EVU1QCT0gMHgwMDEwLAorfTsKKworZW51bSBxZXRoX2RpYWdzX3RyYWNlX3R5cGVzIHsKKwlRRVRIX0RJQUdTX1RZUEVfSElQRVJTT0NLRVQJPSAweDAyLAorfTsKKworZW51bSBxZXRoX2RpYWdzX3RyYWNlX2NtZHMgeworCVFFVEhfRElBR1NfQ01EX1RSQUNFX0VOQUJMRQk9IDB4MDAwMSwKKwlRRVRIX0RJQUdTX0NNRF9UUkFDRV9ESVNBQkxFCT0gMHgwMDAyLAorCVFFVEhfRElBR1NfQ01EX1RSQUNFX01PRElGWQk9IDB4MDAwNCwKKwlRRVRIX0RJQUdTX0NNRF9UUkFDRV9SRVBMQUNFCT0gMHgwMDA4LAorCVFFVEhfRElBR1NfQ01EX1RSQUNFX1FVRVJZCT0gMHgwMDEwLAorfTsKKworc3RydWN0IHFldGhfaXBhY21kX2RpYWdhc3MgeworCV9fdTMyICBob3N0X3RvZDI7CisJX191MzI6MzI7CisJX191MTYgIHN1YmNtZF9sZW47CisJX191MTY6MTY7CisJX191MzIgIHN1YmNtZDsKKwlfX3U4ICAgdHlwZTsKKwlfX3U4ICAgYWN0aW9uOworCV9fdTE2ICBvcHRpb25zOworCV9fdTMyOjMyOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKIC8qIEhlYWRlciBmb3IgZWFjaCBJUEEgY29tbWFuZCAqLwogc3RydWN0IHFldGhfaXBhY21kX2hkciB7CiAJX191OCAgIGNvbW1hbmQ7CkBAIC00NTIsNiArNDk0LDcgQEAKIAkJc3RydWN0IHFldGhfY3JlYXRlX2Rlc3Ryb3lfYWRkcmVzcwljcmVhdGVfZGVzdHJveV9hZGRyOwogCQlzdHJ1Y3QgcWV0aF9pcGFjbWRfc2V0YWRwcGFybXMJCXNldGFkYXB0ZXJwYXJtczsKIAkJc3RydWN0IHFldGhfc2V0X3JvdXRpbmcJCQlzZXRydGc7CisJCXN0cnVjdCBxZXRoX2lwYWNtZF9kaWFnYXNzCQlkaWFnYXNzOwogCX0gZGF0YTsKIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwogCkBAIC00NjksNyArNTEyLDYgQEAKIAlRRVRIX0lQQV9BUlBfUkNfUV9OT19EQVRBICAgID0gMHgwMDA4LAogfTsKIAotCiBleHRlcm4gY2hhciAqcWV0aF9nZXRfaXBhX21zZyhlbnVtIHFldGhfaXBhX3JldHVybl9jb2RlcyByYyk7CiBleHRlcm4gY2hhciAqcWV0aF9nZXRfaXBhX2NtZF9uYW1lKGVudW0gcWV0aF9pcGFfY21kcyBjbWQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9zeXMuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jCmluZGV4IDlmZjJiMzYuLjg4YWU0MzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9jb3JlX3N5cy5jCkBAIC0xMTgsNyArMTE4LDcgQEAKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJY2hhciAqdG1wOwotCXVuc2lnbmVkIGludCBwb3J0bm87CisJdW5zaWduZWQgaW50IHBvcnRubywgbGltaXQ7CiAKIAlpZiAoIWNhcmQpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTI4LDkgKzEyOCwxMSBAQAogCQlyZXR1cm4gLUVQRVJNOwogCiAJcG9ydG5vID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmdG1wLCAxNik7Ci0JaWYgKHBvcnRubyA+IFFFVEhfTUFYX1BPUlROTykgeworCWlmIChwb3J0bm8gPiBRRVRIX01BWF9QT1JUTk8pCiAJCXJldHVybiAtRUlOVkFMOwotCX0KKwlsaW1pdCA9IChjYXJkLT5zc3FkLnBjbnQgPyBjYXJkLT5zc3FkLnBjbnQgLSAxIDogY2FyZC0+c3NxZC5wY250KTsKKwlpZiAocG9ydG5vID4gbGltaXQpCisJCXJldHVybiAtRUlOVkFMOwogCiAJY2FyZC0+aW5mby5wb3J0bm8gPSBwb3J0bm87CiAJcmV0dXJuIGNvdW50OwpAQCAtNTM3LDcgKzUzOSw3IEBACiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcmV0dXJuIHFldGhfZGV2X2Jsa3Rfc3RvcmUoY2FyZCwgYnVmLCBjb3VudCwKLQkJCQkgICAmY2FyZC0+aW5mby5ibGt0LnRpbWVfdG90YWwsIDEwMDApOworCQkJCSAgICZjYXJkLT5pbmZvLmJsa3QudGltZV90b3RhbCwgNTAwMCk7CiB9CiAKIApAQCAtNTU5LDcgKzU2MSw3IEBACiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcmV0dXJuIHFldGhfZGV2X2Jsa3Rfc3RvcmUoY2FyZCwgYnVmLCBjb3VudCwKLQkJCQkgICAmY2FyZC0+aW5mby5ibGt0LmludGVyX3BhY2tldCwgMTAwKTsKKwkJCQkgICAmY2FyZC0+aW5mby5ibGt0LmludGVyX3BhY2tldCwgMTAwMCk7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihpbnRlciwgMDY0NCwgcWV0aF9kZXZfYmxrdF9pbnRlcl9zaG93LApAQCAtNTgwLDcgKzU4Miw3IEBACiAJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCiAJcmV0dXJuIHFldGhfZGV2X2Jsa3Rfc3RvcmUoY2FyZCwgYnVmLCBjb3VudCwKLQkJCQkgICAmY2FyZC0+aW5mby5ibGt0LmludGVyX3BhY2tldF9qdW1ibywgMTAwKTsKKwkJCQkgICAmY2FyZC0+aW5mby5ibGt0LmludGVyX3BhY2tldF9qdW1ibywgMTAwMCk7CiB9CiAKIHN0YXRpYyBERVZJQ0VfQVRUUihpbnRlcl9qdW1ibywgMDY0NCwgcWV0aF9kZXZfYmxrdF9pbnRlcl9qdW1ib19zaG93LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMl9tYWluLmMKaW5kZXggMGI3NjMzOS4uNTFmZGU2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wyX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDJfbWFpbi5jCkBAIC00ODYsMjIgKzQ4NiwxNCBAQAogCQljYXNlIElQQV9SQ19MMl9EVVBfTUFDOgogCQljYXNlIElQQV9SQ19MMl9EVVBfTEFZRVIzX01BQzoKIAkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsCi0JCQkJIk1BQyBhZGRyZXNzICIKLQkJCQkiJTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMng6JTIuMnggIgotCQkJCSJhbHJlYWR5IGV4aXN0c1xuIiwKLQkJCQljYXJkLT5kZXYtPmRldl9hZGRyWzBdLCBjYXJkLT5kZXYtPmRldl9hZGRyWzFdLAotCQkJCWNhcmQtPmRldi0+ZGV2X2FkZHJbMl0sIGNhcmQtPmRldi0+ZGV2X2FkZHJbM10sCi0JCQkJY2FyZC0+ZGV2LT5kZXZfYWRkcls0XSwgY2FyZC0+ZGV2LT5kZXZfYWRkcls1XSk7CisJCQkJIk1BQyBhZGRyZXNzICVwTSBhbHJlYWR5IGV4aXN0c1xuIiwKKwkJCQljYXJkLT5kZXYtPmRldl9hZGRyKTsKIAkJCWJyZWFrOwogCQljYXNlIElQQV9SQ19MMl9NQUNfTk9UX0FVVEhfQllfSFlQOgogCQljYXNlIElQQV9SQ19MMl9NQUNfTk9UX0FVVEhfQllfQURQOgogCQkJZGV2X3dhcm4oJmNhcmQtPmdkZXYtPmRldiwKLQkJCQkiTUFDIGFkZHJlc3MgIgotCQkJCSIlMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeCAiCi0JCQkJImlzIG5vdCBhdXRob3JpemVkXG4iLAotCQkJCWNhcmQtPmRldi0+ZGV2X2FkZHJbMF0sIGNhcmQtPmRldi0+ZGV2X2FkZHJbMV0sCi0JCQkJY2FyZC0+ZGV2LT5kZXZfYWRkclsyXSwgY2FyZC0+ZGV2LT5kZXZfYWRkclszXSwKLQkJCQljYXJkLT5kZXYtPmRldl9hZGRyWzRdLCBjYXJkLT5kZXYtPmRldl9hZGRyWzVdKTsKKwkJCQkiTUFDIGFkZHJlc3MgJXBNIGlzIG5vdCBhdXRob3JpemVkXG4iLAorCQkJCWNhcmQtPmRldi0+ZGV2X2FkZHIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKQEAgLTUxMiwxMiArNTA0LDggQEAKIAkJbWVtY3B5KGNhcmQtPmRldi0+ZGV2X2FkZHIsIGNtZC0+ZGF0YS5zZXRkZWxtYWMubWFjLAogCQkgICAgICAgT1NBX0FERFJfTEVOKTsKIAkJZGV2X2luZm8oJmNhcmQtPmdkZXYtPmRldiwKLQkJCSJNQUMgYWRkcmVzcyAlMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeDolMi4yeCAiCi0JCQkic3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQgb24gZGV2aWNlICVzXG4iLAotCQkJY2FyZC0+ZGV2LT5kZXZfYWRkclswXSwgY2FyZC0+ZGV2LT5kZXZfYWRkclsxXSwKLQkJCWNhcmQtPmRldi0+ZGV2X2FkZHJbMl0sIGNhcmQtPmRldi0+ZGV2X2FkZHJbM10sCi0JCQljYXJkLT5kZXYtPmRldl9hZGRyWzRdLCBjYXJkLT5kZXYtPmRldl9hZGRyWzVdLAotCQkJY2FyZC0+ZGV2LT5uYW1lKTsKKwkJCSJNQUMgYWRkcmVzcyAlcE0gc3VjY2Vzc2Z1bGx5IHJlZ2lzdGVyZWQgb24gZGV2aWNlICVzXG4iLAorCQkJY2FyZC0+ZGV2LT5kZXZfYWRkciwgY2FyZC0+ZGV2LT5uYW1lKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC02MzQsNyArNjIyLDcgQEAKIAlmb3IgKGRtID0gZGV2LT5tY19saXN0OyBkbTsgZG0gPSBkbS0+bmV4dCkKIAkJcWV0aF9sMl9hZGRfbWMoY2FyZCwgZG0tPmRhX2FkZHIsIDApOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShoYSwgJmRldi0+dWMubGlzdCwgbGlzdCkKKwluZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgZGV2KQogCQlxZXRoX2wyX2FkZF9tYyhjYXJkLCBoYS0+YWRkciwgMSk7CiAKIAlzcGluX3VubG9ja19iaCgmY2FyZC0+bWNsb2NrKTsKQEAgLTc4MSw3ICs3NjksOCBAQAogCQlpbmRleCA9IGkgJSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwogCQlidWZmZXIgPSAmY2FyZC0+cWRpby5pbl9xLT5idWZzW2luZGV4XTsKIAkJaWYgKCEocWRpb19lcnIgJiYKLQkJICAgICAgcWV0aF9jaGVja19xZGlvX2Vycm9ycyhidWZmZXItPmJ1ZmZlciwgcWRpb19lcnIsICJxaW5lcnIiKSkpCisJCSAgICAgIHFldGhfY2hlY2tfcWRpb19lcnJvcnMoY2FyZCwgYnVmZmVyLT5idWZmZXIsIHFkaW9fZXJyLAorCQkJCQkgICAgICJxaW5lcnIiKSkpCiAJCQlxZXRoX2wyX3Byb2Nlc3NfaW5ib3VuZF9idWZmZXIoY2FyZCwgYnVmZmVyLCBpbmRleCk7CiAJCS8qIGNsZWFyIGJ1ZmZlciBhbmQgZ2l2ZSBiYWNrIHRvIGhhcmR3YXJlICovCiAJCXFldGhfcHV0X2J1ZmZlcl9wb29sX2VudHJ5KGNhcmQsIGJ1ZmZlci0+cG9vbF9lbnRyeSk7CkBAIC05MzgsNyArOTI3LDYgQEAKIAlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAic2V0b25saW4iKTsKIAlRRVRIX0RCRl9IRVgoU0VUVVAsIDIsICZjYXJkLCBzaXplb2Yodm9pZCAqKSk7CiAKLQlxZXRoX3NldF9hbGxvd2VkX3RocmVhZHMoY2FyZCwgUUVUSF9SRUNPVkVSX1RIUkVBRCwgMSk7CiAJcmVjb3Zlcl9mbGFnID0gY2FyZC0+c3RhdGU7CiAJcmMgPSBxZXRoX2NvcmVfaGFyZHNldHVwX2NhcmQoY2FyZCk7CiAJaWYgKHJjKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDMuaCBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMy5oCmluZGV4IDMyMTk4OGYuLjg0NDdkMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMy5oCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sMy5oCkBAIC0xMyw2ICsxMyw4IEBACiAKICNpbmNsdWRlICJxZXRoX2NvcmUuaCIKIAorI2RlZmluZSBRRVRIX1NOSUZGX0FWQUlMCTB4MDAwOAorCiBzdHJ1Y3QgcWV0aF9pcGFkZHIgewogCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CiAJZW51bSBxZXRoX2lwX3R5cGVzIHR5cGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX21haW4uYwppbmRleCBmZDFiNmVkLi41NDc1ODM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfbWFpbi5jCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19tYWluLmMKQEAgLTI0Miw2ICsyNDIsOCBAQAogCXN0cnVjdCBxZXRoX2lwYWRkciAqdG1wLCAqdDsKIAlpbnQgZm91bmQgPSAwOwogCisJaWYgKGNhcmQtPm9wdGlvbnMuc25pZmZlcikKKwkJcmV0dXJuIDA7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRtcCwgdCwgY2FyZC0+aXBfdGJkX2xpc3QsIGVudHJ5KSB7CiAJCWlmICgoYWRkci0+dHlwZSA9PSBRRVRIX0lQX1RZUEVfREVMX0FMTF9NQykgJiYKIAkJICAgICh0bXAtPnR5cGUgPT0gUUVUSF9JUF9UWVBFX0RFTF9BTExfTUMpKQpAQCAtNDU3LDYgKzQ1OSw4IEBACiAJUUVUSF9EQkZfVEVYVChUUkFDRSwgMiwgInNkaXBsaXN0Iik7CiAJUUVUSF9EQkZfSEVYKFRSQUNFLCAyLCAmY2FyZCwgc2l6ZW9mKHZvaWQgKikpOwogCisJaWYgKGNhcmQtPm9wdGlvbnMuc25pZmZlcikKKwkJcmV0dXJuOwogCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7CiAJdGJkX2xpc3QgPSBjYXJkLT5pcF90YmRfbGlzdDsKIAljYXJkLT5pcF90YmRfbGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpLCBHRlBfQVRPTUlDKTsKQEAgLTQ5NSw3ICs0OTksNyBAQAogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwogCQkJcmMgPSBxZXRoX2wzX2RlcmVnaXN0ZXJfYWRkcl9lbnRyeShjYXJkLCBhZGRyKTsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZjYXJkLT5pcF9sb2NrLCBmbGFncyk7Ci0JCQlpZiAoIXJjIHx8IChyYyA9PSBJUEFfUkNfUFJJTUFSWV9BTFJFQURZX0RFRklORUQpKQorCQkJaWYgKCFyYyB8fCAocmMgPT0gSVBBX1JDX0lQX0FERFJFU1NfTk9UX0RFRklORUQpKQogCQkJCWtmcmVlKGFkZHIpOwogCQkJZWxzZQogCQkJCWxpc3RfYWRkX3RhaWwoJmFkZHItPmVudHJ5LCAmY2FyZC0+aXBfbGlzdCk7CkBAIC01MTMsNiArNTE3LDggQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJUUVUSF9EQkZfVEVYVChUUkFDRSwgNCwgImNsZWFyaXAiKTsKKwlpZiAocmVjb3ZlciAmJiBjYXJkLT5vcHRpb25zLnNuaWZmZXIpCisJCXJldHVybjsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2FyZC0+aXBfbG9jaywgZmxhZ3MpOwogCS8qIGNsZWFyIHRvZG8gbGlzdCAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhZGRyLCB0bXAsIGNhcmQtPmlwX3RiZF9saXN0LCBlbnRyeSkgewpAQCAtMTY3NCw2ICsxNjgwLDc2IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW50CitxZXRoX2RpYWdzX3RyYWNlX2NiKHN0cnVjdCBxZXRoX2NhcmQgKmNhcmQsIHN0cnVjdCBxZXRoX3JlcGx5ICpyZXBseSwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IHFldGhfaXBhX2NtZAkgICAqY21kOworCV9fdTE2IHJjOworCisJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgImRpYXN0cmNiIik7CisKKwljbWQgPSAoc3RydWN0IHFldGhfaXBhX2NtZCAqKWRhdGE7CisJcmMgPSBjbWQtPmhkci5yZXR1cm5fY29kZTsKKwlpZiAocmMpIHsKKwkJUUVUSF9EQkZfVEVYVF8oVFJBQ0UsIDIsICJkeHRlciV4IiwgcmMpOworCQlpZiAoY21kLT5kYXRhLmRpYWdhc3MuYWN0aW9uID09IFFFVEhfRElBR1NfQ01EX1RSQUNFX0VOQUJMRSkgeworCQkJc3dpdGNoIChyYykgeworCQkJY2FzZSBJUEFfUkNfSEFSRFdBUkVfQVVUSF9FUlJPUjoKKwkJCQlkZXZfd2FybigmY2FyZC0+Z2Rldi0+ZGV2LCAiVGhlIGRldmljZSBpcyBub3QgIgorCQkJCQkiYXV0aG9yaXplZCB0byBydW4gYXMgYSBIaXBlclNvY2tldHMgIgorCQkJCQkibmV0d29yayB0cmFmZmljIGFuYWx5emVyXG4iKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgSVBBX1JDX1RSQUNFX0FMUkVBRFlfQUNUSVZFOgorCQkJCWRldl93YXJuKCZjYXJkLT5nZGV2LT5kZXYsICJBIEhpcGVyU29ja2V0cyAiCisJCQkJCSJuZXR3b3JrIHRyYWZmaWMgYW5hbHl6ZXIgaXMgYWxyZWFkeSAiCisJCQkJCSJhY3RpdmUgaW4gdGhlIEhpcGVyU29ja2V0cyBMQU5cbiIpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKGNtZC0+ZGF0YS5kaWFnYXNzLmFjdGlvbikgeworCWNhc2UgUUVUSF9ESUFHU19DTURfVFJBQ0VfUVVFUlk6CisJCWJyZWFrOworCWNhc2UgUUVUSF9ESUFHU19DTURfVFJBQ0VfRElTQUJMRToKKwkJY2FyZC0+aW5mby5wcm9taXNjX21vZGUgPSBTRVRfUFJPTUlTQ19NT0RFX09GRjsKKwkJZGV2X2luZm8oJmNhcmQtPmdkZXYtPmRldiwgIlRoZSBIaXBlclNvY2tldHMgbmV0d29yayB0cmFmZmljICIKKwkJCSJhbmFseXplciBpcyBkZWFjdGl2YXRlZFxuIik7CisJCWJyZWFrOworCWNhc2UgUUVUSF9ESUFHU19DTURfVFJBQ0VfRU5BQkxFOgorCQljYXJkLT5pbmZvLnByb21pc2NfbW9kZSA9IFNFVF9QUk9NSVNDX01PREVfT047CisJCWRldl9pbmZvKCZjYXJkLT5nZGV2LT5kZXYsICJUaGUgSGlwZXJTb2NrZXRzIG5ldHdvcmsgdHJhZmZpYyAiCisJCQkiYW5hbHl6ZXIgaXMgYWN0aXZhdGVkXG4iKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJUUVUSF9EQkZfTUVTU0FHRSgyLCAiVW5rbm93biBzbmlmZmVyIGFjdGlvbiAoMHglMDR4KSBvbiAlc1xuIiwKKwkJCWNtZC0+ZGF0YS5kaWFnYXNzLmFjdGlvbiwgUUVUSF9DQVJEX0lGTkFNRShjYXJkKSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3FldGhfZGlhZ3NfdHJhY2Uoc3RydWN0IHFldGhfY2FyZCAqY2FyZCwgZW51bSBxZXRoX2RpYWdzX3RyYWNlX2NtZHMgZGlhZ3NfY21kKQoreworCXN0cnVjdCBxZXRoX2NtZF9idWZmZXIgKmlvYjsKKwlzdHJ1Y3QgcWV0aF9pcGFfY21kICAgICpjbWQ7CisKKwlRRVRIX0RCRl9URVhUKFNFVFVQLCAyLCAiZGlhZ3RyYWMiKTsKKworCWlvYiA9IHFldGhfZ2V0X2lwYWNtZF9idWZmZXIoY2FyZCwgSVBBX0NNRF9TRVRfRElBR19BU1MsIDApOworCWNtZCA9IChzdHJ1Y3QgcWV0aF9pcGFfY21kICopKGlvYi0+ZGF0YStJUEFfUERVX0hFQURFUl9TSVpFKTsKKwljbWQtPmRhdGEuZGlhZ2Fzcy5zdWJjbWRfbGVuID0gMTY7CisJY21kLT5kYXRhLmRpYWdhc3Muc3ViY21kID0gUUVUSF9ESUFHU19DTURfVFJBQ0U7CisJY21kLT5kYXRhLmRpYWdhc3MudHlwZSA9IFFFVEhfRElBR1NfVFlQRV9ISVBFUlNPQ0tFVDsKKwljbWQtPmRhdGEuZGlhZ2Fzcy5hY3Rpb24gPSBkaWFnc19jbWQ7CisJcmV0dXJuIHFldGhfc2VuZF9pcGFfY21kKGNhcmQsIGlvYiwgcWV0aF9kaWFnc190cmFjZV9jYiwgTlVMTCk7Cit9CisKIHN0YXRpYyB2b2lkIHFldGhfbDNfZ2V0X21hY19mb3JfaXBtKF9fdTMyIGlwbSwgY2hhciAqbWFjLAogCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xOTUxLDcgKzIwMjcsMTAgQEAKIAkJY2FzZSBRRVRIX0NBU1RfQU5ZQ0FTVDoKIAkJY2FzZSBRRVRIX0NBU1RfTk9DQVNUOgogCQlkZWZhdWx0OgotCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOworCQkJaWYgKGNhcmQtPm9wdGlvbnMuc25pZmZlcikKKwkJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKKwkJCWVsc2UKKwkJCQlza2ItPnBrdF90eXBlID0gUEFDS0VUX0hPU1Q7CiAJCQltZW1jcHkodGdfYWRkciwgY2FyZC0+ZGV2LT5kZXZfYWRkciwKIAkJCQljYXJkLT5kZXYtPmFkZHJfbGVuKTsKIAkJfQpAQCAtMjAwNyw3ICsyMDg2LDYgQEAKIAlpbnQgb2Zmc2V0OwogCV9fdTE2IHZsYW5fdGFnID0gMDsKIAl1bnNpZ25lZCBpbnQgbGVuOwotCiAJLyogZ2V0IGZpcnN0IGVsZW1lbnQgb2YgY3VycmVudCBidWZmZXIgKi8KIAllbGVtZW50ID0gKHN0cnVjdCBxZGlvX2J1ZmZlcl9lbGVtZW50ICopJmJ1Zi0+YnVmZmVyLT5lbGVtZW50WzBdOwogCW9mZnNldCA9IDA7CkBAIC0yMDI2LDcgKzIxMDQsNyBAQAogCQljYXNlIFFFVEhfSEVBREVSX1RZUEVfTEFZRVIzOgogCQkJdmxhbl90YWcgPSBxZXRoX2wzX3JlYnVpbGRfc2tiKGNhcmQsIHNrYiwgaGRyKTsKIAkJCWxlbiA9IHNrYi0+bGVuOwotCQkJaWYgKHZsYW5fdGFnKQorCQkJaWYgKHZsYW5fdGFnICYmICFjYXJkLT5vcHRpb25zLnNuaWZmZXIpCiAJCQkJaWYgKGNhcmQtPnZsYW5ncnApCiAJCQkJCXZsYW5faHdhY2NlbF9yeChza2IsIGNhcmQtPnZsYW5ncnAsCiAJCQkJCQl2bGFuX3RhZyk7CkBAIC0yMDM3LDYgKzIxMTUsMTYgQEAKIAkJCWVsc2UKIAkJCQluZXRpZl9yeChza2IpOwogCQkJYnJlYWs7CisJCWNhc2UgUUVUSF9IRUFERVJfVFlQRV9MQVlFUjI6IC8qIGZvciBIaXBlclNvY2tldHMgc25pZmZlciAqLworCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOworCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgc2tiLT5kZXYpOworCQkJaWYgKGNhcmQtPm9wdGlvbnMuY2hlY2tzdW1fdHlwZSA9PSBOT19DSEVDS1NVTU1JTkcpCisJCQkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKKwkJCWVsc2UKKwkJCQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX05PTkU7CisJCQlsZW4gPSBza2ItPmxlbjsKKwkJCW5ldGlmX3JlY2VpdmVfc2tiKHNrYik7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiaW5idW5rbm8iKTsKQEAgLTIxMTgsNiArMjIwNiw5IEBACiAJUUVUSF9EQkZfSEVYKFNFVFVQLCAyLCAmY2FyZCwgc2l6ZW9mKHZvaWQgKikpOwogCiAJcWV0aF9zZXRfYWxsb3dlZF90aHJlYWRzKGNhcmQsIDAsIDEpOworCWlmIChjYXJkLT5vcHRpb25zLnNuaWZmZXIgJiYKKwkgICAgKGNhcmQtPmluZm8ucHJvbWlzY19tb2RlID09IFNFVF9QUk9NSVNDX01PREVfT04pKQorCQlxZXRoX2RpYWdzX3RyYWNlKGNhcmQsIFFFVEhfRElBR1NfQ01EX1RSQUNFX0RJU0FCTEUpOwogCWlmIChjYXJkLT5yZWFkLnN0YXRlID09IENIX1NUQVRFX1VQICYmCiAJICAgIGNhcmQtPndyaXRlLnN0YXRlID09IENIX1NUQVRFX1VQICYmCiAJICAgIChjYXJkLT5zdGF0ZSA9PSBDQVJEX1NUQVRFX1VQKSkgewpAQCAtMjE2Miw2ICsyMjUzLDM2IEBACiAJcmV0dXJuIHJjOwogfQogCisvKgorICogdGVzdCBmb3IgYW5kIFN3aXRjaCBwcm9taXNjdW91cyBtb2RlIChvbiBvciBvZmYpCisgKiAgZWl0aGVyIGZvciBndWVzdGxhbiBvciBIaXBlclNvY2tldCBTbmlmZmVyCisgKi8KK3N0YXRpYyB2b2lkCitxZXRoX2wzX2hhbmRsZV9wcm9taXNjX21vZGUoc3RydWN0IHFldGhfY2FyZCAqY2FyZCkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gY2FyZC0+ZGV2OworCisJaWYgKCgoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSAmJgorCSAgICAgKGNhcmQtPmluZm8ucHJvbWlzY19tb2RlID09IFNFVF9QUk9NSVNDX01PREVfT04pKSB8fAorCSAgICAoIShkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpICYmCisJICAgICAoY2FyZC0+aW5mby5wcm9taXNjX21vZGUgPT0gU0VUX1BST01JU0NfTU9ERV9PRkYpKSkKKwkJcmV0dXJuOworCisJaWYgKGNhcmQtPmluZm8uZ3Vlc3RsYW4pIHsJCS8qIEd1ZXN0bGFuIHRyYWNlICovCisJCWlmIChxZXRoX2FkcF9zdXBwb3J0ZWQoY2FyZCwgSVBBX1NFVEFEUF9TRVRfUFJPTUlTQ19NT0RFKSkKKwkJCXFldGhfc2V0YWRwX3Byb21pc2NfbW9kZShjYXJkKTsKKwl9IGVsc2UgaWYgKGNhcmQtPm9wdGlvbnMuc25pZmZlciAmJgkvKiBIaXBlclNvY2tldHMgdHJhY2UgKi8KKwkJICAgcWV0aF9hZHBfc3VwcG9ydGVkKGNhcmQsIElQQV9TRVRBRFBfU0VUX0RJQUdfQVNTSVNUKSkgeworCQlpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCQlRRVRIX0RCRl9URVhUKFRSQUNFLCAzLCAiK3Byb21pc2MiKTsKKwkJCXFldGhfZGlhZ3NfdHJhY2UoY2FyZCwgUUVUSF9ESUFHU19DTURfVFJBQ0VfRU5BQkxFKTsKKwkJfSBlbHNlIHsKKwkJCVFFVEhfREJGX1RFWFQoVFJBQ0UsIDMsICItcHJvbWlzYyIpOworCQkJcWV0aF9kaWFnc190cmFjZShjYXJkLCBRRVRIX0RJQUdTX0NNRF9UUkFDRV9ESVNBQkxFKTsKKwkJfQorCX0KK30KKwogc3RhdGljIHZvaWQgcWV0aF9sM19zZXRfbXVsdGljYXN0X2xpc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgcWV0aF9jYXJkICpjYXJkID0gZGV2LT5tbF9wcml2OwpAQCAtMjE3MCwxNSArMjI5MSwxNyBAQAogCWlmIChxZXRoX3RocmVhZHNfcnVubmluZyhjYXJkLCBRRVRIX1JFQ09WRVJfVEhSRUFEKSAmJgogCSAgICAoY2FyZC0+c3RhdGUgIT0gQ0FSRF9TVEFURV9VUCkpCiAJCXJldHVybjsKLQlxZXRoX2wzX2RlbGV0ZV9tY19hZGRyZXNzZXMoY2FyZCk7Ci0JcWV0aF9sM19hZGRfbXVsdGljYXN0X2lwdjQoY2FyZCk7CisJaWYgKCFjYXJkLT5vcHRpb25zLnNuaWZmZXIpIHsKKwkJcWV0aF9sM19kZWxldGVfbWNfYWRkcmVzc2VzKGNhcmQpOworCQlxZXRoX2wzX2FkZF9tdWx0aWNhc3RfaXB2NChjYXJkKTsKICNpZmRlZiBDT05GSUdfUUVUSF9JUFY2Ci0JcWV0aF9sM19hZGRfbXVsdGljYXN0X2lwdjYoY2FyZCk7CisJCXFldGhfbDNfYWRkX211bHRpY2FzdF9pcHY2KGNhcmQpOwogI2VuZGlmCi0JcWV0aF9sM19zZXRfaXBfYWRkcl9saXN0KGNhcmQpOwotCWlmICghcWV0aF9hZHBfc3VwcG9ydGVkKGNhcmQsIElQQV9TRVRBRFBfU0VUX1BST01JU0NfTU9ERSkpCi0JCXJldHVybjsKLQlxZXRoX3NldGFkcF9wcm9taXNjX21vZGUoY2FyZCk7CisJCXFldGhfbDNfc2V0X2lwX2FkZHJfbGlzdChjYXJkKTsKKwkJaWYgKCFxZXRoX2FkcF9zdXBwb3J0ZWQoY2FyZCwgSVBBX1NFVEFEUF9TRVRfUFJPTUlTQ19NT0RFKSkKKwkJCXJldHVybjsKKwl9CisJcWV0aF9sM19oYW5kbGVfcHJvbWlzY19tb2RlKGNhcmQpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqcWV0aF9sM19hcnBfZ2V0X2Vycm9yX2NhdXNlKGludCAqcmMpCkBAIC0yNzc4LDggKzI5MDEsOSBAQAogCWludCBucl9mcmFnczsKIAogCWlmICgoY2FyZC0+aW5mby50eXBlID09IFFFVEhfQ0FSRF9UWVBFX0lRRCkgJiYKLQkgICAgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVBWNikpICYmCi0JICAgIChza2ItPnByb3RvY29sICE9IGh0b25zKEVUSF9QX0lQKSkpCisJICAgICgoKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVBWNikpICYmCisJICAgICAgKHNrYi0+cHJvdG9jb2wgIT0gaHRvbnMoRVRIX1BfSVApKSkgfHwKKwkgICAgIGNhcmQtPm9wdGlvbnMuc25pZmZlcikpCiAJCQlnb3RvIHR4X2Ryb3A7CiAKIAlpZiAoKGNhcmQtPnN0YXRlICE9IENBUkRfU1RBVEVfVVApIHx8ICFjYXJkLT5sYW5fb25saW5lKSB7CkBAIC0zMTU1LDcgKzMyNzksNyBAQAogCQlpbmRleCA9IGkgJSBRRElPX01BWF9CVUZGRVJTX1BFUl9ROwogCQlidWZmZXIgPSAmY2FyZC0+cWRpby5pbl9xLT5idWZzW2luZGV4XTsKIAkJaWYgKCEocWRpb19lcnIgJiYKLQkJICAgICAgcWV0aF9jaGVja19xZGlvX2Vycm9ycyhidWZmZXItPmJ1ZmZlciwKKwkJICAgICAgcWV0aF9jaGVja19xZGlvX2Vycm9ycyhjYXJkLCBidWZmZXItPmJ1ZmZlciwKIAkJCQkJICAgICBxZGlvX2VyciwgInFpbmVyciIpKSkKIAkJCXFldGhfbDNfcHJvY2Vzc19pbmJvdW5kX2J1ZmZlcihjYXJkLCBidWZmZXIsIGluZGV4KTsKIAkJLyogY2xlYXIgYnVmZmVyIGFuZCBnaXZlIGJhY2sgdG8gaGFyZHdhcmUgKi8KQEAgLTMyMTQsOCArMzMzOCw2IEBACiAJUUVUSF9EQkZfVEVYVChTRVRVUCwgMiwgInNldG9ubGluIik7CiAJUUVUSF9EQkZfSEVYKFNFVFVQLCAyLCAmY2FyZCwgc2l6ZW9mKHZvaWQgKikpOwogCi0JcWV0aF9zZXRfYWxsb3dlZF90aHJlYWRzKGNhcmQsIFFFVEhfUkVDT1ZFUl9USFJFQUQsIDEpOwotCiAJcmVjb3Zlcl9mbGFnID0gY2FyZC0+c3RhdGU7CiAJcmMgPSBxZXRoX2NvcmVfaGFyZHNldHVwX2NhcmQoY2FyZCk7CiAJaWYgKHJjKSB7CkBAIC0zMjUwLDIwICszMzcyLDIyIEBACiAJCWdvdG8gb3V0X3JlbW92ZTsKIAl9IGVsc2UKIAkJY2FyZC0+bGFuX29ubGluZSA9IDE7Ci0JcWV0aF9sM19zZXRfbGFyZ2Vfc2VuZChjYXJkLCBjYXJkLT5vcHRpb25zLmxhcmdlX3NlbmQpOwogCiAJcmMgPSBxZXRoX2wzX3NldGFkYXB0ZXJfcGFybXMoY2FyZCk7CiAJaWYgKHJjKQogCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjJlcnIlZCIsIHJjKTsKLQlyYyA9IHFldGhfbDNfc3RhcnRfaXBhc3Npc3RzKGNhcmQpOwotCWlmIChyYykKLQkJUUVUSF9EQkZfVEVYVF8oU0VUVVAsIDIsICIzZXJyJWQiLCByYyk7Ci0JcmMgPSBxZXRoX2wzX3NldHJvdXRpbmdfdjQoY2FyZCk7Ci0JaWYgKHJjKQotCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjRlcnIlZCIsIHJjKTsKLQlyYyA9IHFldGhfbDNfc2V0cm91dGluZ192NihjYXJkKTsKLQlpZiAocmMpCi0JCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNWVyciVkIiwgcmMpOworCWlmICghY2FyZC0+b3B0aW9ucy5zbmlmZmVyKSB7CisJCXJjID0gcWV0aF9sM19zdGFydF9pcGFzc2lzdHMoY2FyZCk7CisJCWlmIChyYykKKwkJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiM2VyciVkIiwgcmMpOworCQlxZXRoX2wzX3NldF9sYXJnZV9zZW5kKGNhcmQsIGNhcmQtPm9wdGlvbnMubGFyZ2Vfc2VuZCk7CisJCXJjID0gcWV0aF9sM19zZXRyb3V0aW5nX3Y0KGNhcmQpOworCQlpZiAocmMpCisJCQlRRVRIX0RCRl9URVhUXyhTRVRVUCwgMiwgIjRlcnIlZCIsIHJjKTsKKwkJcmMgPSBxZXRoX2wzX3NldHJvdXRpbmdfdjYoY2FyZCk7CisJCWlmIChyYykKKwkJCVFFVEhfREJGX1RFWFRfKFNFVFVQLCAyLCAiNWVyciVkIiwgcmMpOworCX0KIAluZXRpZl90eF9kaXNhYmxlKGNhcmQtPmRldik7CiAKIAlyYyA9IHFldGhfaW5pdF9xZGlvX3F1ZXVlcyhjYXJkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19zeXMuYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9sM19zeXMuYwppbmRleCAzMzYwYjA5Li4zZjA4YjExIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbDNfc3lzLmMKKysrIGIvZHJpdmVycy9zMzkwL25ldC9xZXRoX2wzX3N5cy5jCkBAIC0zMTksNiArMzE5LDYxIEBACiBzdGF0aWMgREVWSUNFX0FUVFIoY2hlY2tzdW1taW5nLCAwNjQ0LCBxZXRoX2wzX2Rldl9jaGVja3N1bV9zaG93LAogCQlxZXRoX2wzX2Rldl9jaGVja3N1bV9zdG9yZSk7CiAKK3N0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X3NuaWZmZXJfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVpXG4iLCBjYXJkLT5vcHRpb25zLnNuaWZmZXIgPyAxIDogMCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHFldGhfbDNfZGV2X3NuaWZmZXJfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHFldGhfY2FyZCAqY2FyZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBpOworCisJaWYgKCFjYXJkKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjYXJkLT5pbmZvLnR5cGUgIT0gUUVUSF9DQVJEX1RZUEVfSVFEKQorCQlyZXR1cm4gLUVQRVJNOworCisJaWYgKChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX0RPV04pICYmCisJICAgIChjYXJkLT5zdGF0ZSAhPSBDQVJEX1NUQVRFX1JFQ09WRVIpKQorCQlyZXR1cm4gLUVQRVJNOworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAxNiwgJmkpOworCWlmIChyZXQpCisJCXJldHVybiAtRUlOVkFMOworCXN3aXRjaCAoaSkgeworCWNhc2UgMDoKKwkJY2FyZC0+b3B0aW9ucy5zbmlmZmVyID0gaTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXQgPSBxZGlvX2dldF9zc3FkX2Rlc2MoQ0FSRF9EREVWKGNhcmQpLCAmY2FyZC0+c3NxZCk7CisJCWlmIChjYXJkLT5zc3FkLnFkaW9hYzIgJiBRRVRIX1NOSUZGX0FWQUlMKSB7CisJCQljYXJkLT5vcHRpb25zLnNuaWZmZXIgPSBpOworCQkJaWYgKGNhcmQtPnFkaW8uaW5pdF9wb29sLmJ1Zl9jb3VudCAhPQorCQkJCQlRRVRIX0lOX0JVRl9DT1VOVF9NQVgpCisJCQkJcWV0aF9yZWFsbG9jX2J1ZmZlcl9wb29sKGNhcmQsCisJCQkJCVFFVEhfSU5fQlVGX0NPVU5UX01BWCk7CisJCQlicmVhazsKKwkJfSBlbHNlCisJCQlyZXR1cm4gLUVQRVJNOworCWRlZmF1bHQ6ICAgLyogZmFsbCB0aHJvdWdoICovCisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihzbmlmZmVyLCAwNjQ0LCBxZXRoX2wzX2Rldl9zbmlmZmVyX3Nob3csCisJCXFldGhfbDNfZGV2X3NuaWZmZXJfc3RvcmUpOworCiBzdGF0aWMgc3NpemVfdCBxZXRoX2wzX2Rldl9sYXJnZV9zZW5kX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAogCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC0zNzMsNiArNDI4LDcgQEAKIAkmZGV2X2F0dHJfYnJvYWRjYXN0X21vZGUuYXR0ciwKIAkmZGV2X2F0dHJfY2Fub25pY2FsX21hY2FkZHIuYXR0ciwKIAkmZGV2X2F0dHJfY2hlY2tzdW1taW5nLmF0dHIsCisJJmRldl9hdHRyX3NuaWZmZXIuYXR0ciwKIAkmZGV2X2F0dHJfbGFyZ2Vfc2VuZC5hdHRyLAogCU5VTEwsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jIGIvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5jCmluZGV4IDY3ZjI0ODUuLmVjZWYxZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmMKQEAgLTMxLDkgKzMxLDkgQEAKIAogc3RydWN0IHNtc2dfY2FsbGJhY2sgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQljaGFyICpwcmVmaXg7CisJY29uc3QgY2hhciAqcHJlZml4OwogCWludCBsZW47Ci0Jdm9pZCAoKmNhbGxiYWNrKShjaGFyICpmcm9tLCBjaGFyICpzdHIpOworCXZvaWQgKCpjYWxsYmFjaykoY29uc3QgY2hhciAqZnJvbSwgY2hhciAqc3RyKTsKIH07CiAKIE1PRFVMRV9BVVRIT1IKQEAgLTEwMCw4ICsxMDAsOCBAQAogCWtmcmVlKGJ1ZmZlcik7CiB9CiAKLWludCBzbXNnX3JlZ2lzdGVyX2NhbGxiYWNrKGNoYXIgKnByZWZpeCwKLQkJCSAgIHZvaWQgKCpjYWxsYmFjaykoY2hhciAqZnJvbSwgY2hhciAqc3RyKSkKK2ludCBzbXNnX3JlZ2lzdGVyX2NhbGxiYWNrKGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCSAgIHZvaWQgKCpjYWxsYmFjaykoY29uc3QgY2hhciAqZnJvbSwgY2hhciAqc3RyKSkKIHsKIAlzdHJ1Y3Qgc21zZ19jYWxsYmFjayAqY2I7CiAKQEAgLTExNyw4ICsxMTcsOSBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHNtc2dfdW5yZWdpc3Rlcl9jYWxsYmFjayhjaGFyICpwcmVmaXgsCi0JCQkgICAgICB2b2lkICgqY2FsbGJhY2spKGNoYXIgKmZyb20sIGNoYXIgKnN0cikpCit2b2lkIHNtc2dfdW5yZWdpc3Rlcl9jYWxsYmFjayhjb25zdCBjaGFyICpwcmVmaXgsCisJCQkgICAgICB2b2lkICgqY2FsbGJhY2spKGNvbnN0IGNoYXIgKmZyb20sCisJCQkJCSAgICAgICBjaGFyICpzdHIpKQogewogCXN0cnVjdCBzbXNnX2NhbGxiYWNrICpjYiwgKnRtcDsKIApAQCAtMTc2LDcgKzE3Nyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2RyaXZlciBzbXNnX2RyaXZlciA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKLQkubmFtZSA9ICJTTVNHSVVDViIsCisJLm5hbWUgPSBTTVNHSVVDVl9EUlZfTkFNRSwKIAkuYnVzICA9ICZpdWN2X2J1cywKIAkucG0gPSAmc21zZ19wbV9vcHMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5oIGIvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdi5oCmluZGV4IDY3ZjVkNGYuLjE0OWExMTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3YuaAorKysgYi9kcml2ZXJzL3MzOTAvbmV0L3Ntc2dpdWN2LmgKQEAgLTUsNiArNSwxMCBAQAogICogQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pCiAgKi8KIAotaW50ICBzbXNnX3JlZ2lzdGVyX2NhbGxiYWNrKGNoYXIgKiwgdm9pZCAoKikoY2hhciAqLCBjaGFyICopKTsKLXZvaWQgc21zZ191bnJlZ2lzdGVyX2NhbGxiYWNrKGNoYXIgKiwgdm9pZCAoKikoY2hhciAqLCBjaGFyICopKTsKKyNkZWZpbmUgU01TR0lVQ1ZfRFJWX05BTUUgICAgICJTTVNHSVVDViIKKworaW50ICBzbXNnX3JlZ2lzdGVyX2NhbGxiYWNrKGNvbnN0IGNoYXIgKiwKKwkJCSAgICB2b2lkICgqKShjb25zdCBjaGFyICosIGNoYXIgKikpOwordm9pZCBzbXNnX3VucmVnaXN0ZXJfY2FsbGJhY2soY29uc3QgY2hhciAqLAorCQkJICAgICAgdm9pZCAoKikoY29uc3QgY2hhciAqLCBjaGFyICopKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9zbXNnaXVjdl9hcHAuYyBiL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE1NzlkYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvczM5MC9uZXQvc21zZ2l1Y3ZfYXBwLmMKQEAgLTAsMCArMSwyMTEgQEAKKy8qCisgKiBEZWxpdmVyIHovVk0gQ1Agc3BlY2lhbCBtZXNzYWdlcyAoU01TRykgYXMgdWV2ZW50cy4KKyAqCisgKiBUaGUgZHJpdmVyIHJlZ2lzdGVycyBmb3Igei9WTSBDUCBzcGVjaWFsIG1lc3NhZ2VzIHdpdGggdGhlCisgKiAiQVBQIiBwcmVmaXguIEluY29taW5nIG1lc3NhZ2VzIGFyZSBkZWxpdmVyZWQgdG8gdXNlciBzcGFjZQorICogYXMgdWV2ZW50cy4KKyAqCisgKiBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMTAKKyAqIEF1dGhvcihzKTogSGVuZHJpayBCcnVlY2tuZXIgPGJydWVja25lckBsaW51eC52bmV0LmlibS5jb20+CisgKgorICovCisjZGVmaW5lIEtNU0dfQ09NUE9ORU5UCQkic21zZ2l1Y3ZfYXBwIgorI2RlZmluZSBwcl9mbXQoZm10KQkJS01TR19DT01QT05FTlQgIjogIiBmbXQKKworI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPG5ldC9pdWN2L2l1Y3YuaD4KKyNpbmNsdWRlICJzbXNnaXVjdi5oIgorCisvKiBwcmVmaXggdXNlZCBmb3IgU01TRyByZWdpc3RyYXRpb24gKi8KKyNkZWZpbmUgU01TR19QUkVGSVgJCSJBUFAiCisKKy8qIFNNU0cgcmVsYXRlZCB1ZXZlbnQgZW52aXJvbm1lbnQgdmFyaWFibGVzICovCisjZGVmaW5lIEVOVl9TRU5ERVJfU1RSCQkiU01TR19TRU5ERVI9IgorI2RlZmluZSBFTlZfU0VOREVSX0xFTgkJKHN0cmxlbihFTlZfU0VOREVSX1NUUikgKyA4ICsgMSkKKyNkZWZpbmUgRU5WX1BSRUZJWF9TVFIJCSJTTVNHX0lEPSIKKyNkZWZpbmUgRU5WX1BSRUZJWF9MRU4JCShzdHJsZW4oRU5WX1BSRUZJWF9TVFIpICsgXAorCQkJCSBzdHJsZW4oU01TR19QUkVGSVgpICsgMSkKKyNkZWZpbmUgRU5WX1RFWFRfU1RSCQkiU01TR19URVhUPSIKKyNkZWZpbmUgRU5WX1RFWFRfTEVOKG1zZykJKHN0cmxlbihFTlZfVEVYVF9TVFIpICsgc3RybGVuKChtc2cpKSArIDEpCisKKy8qIHovVk0gdXNlciBJRCB3aGljaCBpcyBwZXJtaXR0ZWQgdG8gc2VuZCBTTVNHcworICogSWYgdGhlIHZhbHVlIGlzIHVuZGVmaW5lZCBvciBlbXB0eSAoIiIpLCBzcGVjaWFsIG1lc3NhZ2VzIGFyZQorICogYWNjZXB0ZWQgZnJvbSBhbnkgei9WTSB1c2VyIElELiAqLworc3RhdGljIGNoYXIgKnNlbmRlcjsKK21vZHVsZV9wYXJhbShzZW5kZXIsIGNoYXJwLCAwNDAwKTsKK01PRFVMRV9QQVJNX0RFU0Moc2VuZGVyLCAiei9WTSB1c2VyIElEIGZyb20gd2hpY2ggQ1AgU01TR3MgYXJlIGFjY2VwdGVkIik7CisKKy8qIFNNU0cgZGV2aWNlIHJlcHJlc2VudGF0aW9uICovCitzdGF0aWMgc3RydWN0IGRldmljZSAqc21zZ19hcHBfZGV2OworCisvKiBsaXN0IGVsZW1lbnQgZm9yIHF1ZXVpbmcgcmVjZWl2ZWQgbWVzc2FnZXMgZm9yIGRlbGl2ZXJ5ICovCitzdHJ1Y3Qgc21zZ19hcHBfZXZlbnQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljaGFyICpidWY7CisJY2hhciAqZW52cFs0XTsKK307CisKKy8qIHF1ZXVlIGZvciBvdXRnb2luZyB1ZXZlbnRzICovCitzdGF0aWMgTElTVF9IRUFEKHNtc2dfZXZlbnRfcXVldWUpOworc3RhdGljIERFRklORV9TUElOTE9DSyhzbXNnX2V2ZW50X3F1ZXVlX2xvY2spOworCitzdGF0aWMgdm9pZCBzbXNnX2FwcF9ldmVudF9mcmVlKHN0cnVjdCBzbXNnX2FwcF9ldmVudCAqZXYpCit7CisJa2ZyZWUoZXYtPmJ1Zik7CisJa2ZyZWUoZXYpOworfQorCitzdGF0aWMgc3RydWN0IHNtc2dfYXBwX2V2ZW50ICpzbXNnX2FwcF9ldmVudF9hbGxvYyhjb25zdCBjaGFyICpmcm9tLAorCQkJCQkJICAgY29uc3QgY2hhciAqbXNnKQoreworCXN0cnVjdCBzbXNnX2FwcF9ldmVudCAqZXY7CisKKwlldiA9IGt6YWxsb2Moc2l6ZW9mKCpldiksIEdGUF9BVE9NSUMpOworCWlmICghZXYpCisJCXJldHVybiBOVUxMOworCisJZXYtPmJ1ZiA9IGt6YWxsb2MoRU5WX1NFTkRFUl9MRU4gKyBFTlZfUFJFRklYX0xFTiArCisJCQkgIEVOVl9URVhUX0xFTihtc2cpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWV2LT5idWYpIHsKKwkJa2ZyZWUoZXYpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwkvKiBzZXR0aW5nIHVwIGVudmlyb25tZW50IHBvaW50ZXJzIGludG8gYnVmICovCisJZXYtPmVudnBbMF0gPSBldi0+YnVmOworCWV2LT5lbnZwWzFdID0gZXYtPmVudnBbMF0gKyBFTlZfU0VOREVSX0xFTjsKKwlldi0+ZW52cFsyXSA9IGV2LT5lbnZwWzFdICsgRU5WX1BSRUZJWF9MRU47CisJZXYtPmVudnBbM10gPSBOVUxMOworCisJLyogc2V0dGluZyB1cCBlbnZpcm9ubWVudDogc2VuZGVyLCBwcmVmaXggbmFtZSwgYW5kIG1lc3NhZ2UgdGV4dCAqLworCXNucHJpbnRmKGV2LT5lbnZwWzBdLCBFTlZfU0VOREVSX0xFTiwgRU5WX1NFTkRFUl9TVFIgIiVzIiwgZnJvbSk7CisJc25wcmludGYoZXYtPmVudnBbMV0sIEVOVl9QUkVGSVhfTEVOLCBFTlZfUFJFRklYX1NUUiAiJXMiLCBTTVNHX1BSRUZJWCk7CisJc25wcmludGYoZXYtPmVudnBbMl0sIEVOVl9URVhUX0xFTihtc2cpLCBFTlZfVEVYVF9TVFIgIiVzIiwgbXNnKTsKKworCXJldHVybiBldjsKK30KKworc3RhdGljIHZvaWQgc21zZ19ldmVudF93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlMSVNUX0hFQUQoZXZlbnRfcXVldWUpOworCXN0cnVjdCBzbXNnX2FwcF9ldmVudCAqcCwgKm47CisJc3RydWN0IGRldmljZSAqZGV2OworCisJZGV2ID0gZ2V0X2RldmljZShzbXNnX2FwcF9kZXYpOworCWlmICghZGV2KQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfYmgoJnNtc2dfZXZlbnRfcXVldWVfbG9jayk7CisJbGlzdF9zcGxpY2VfaW5pdCgmc21zZ19ldmVudF9xdWV1ZSwgJmV2ZW50X3F1ZXVlKTsKKwlzcGluX3VubG9ja19iaCgmc21zZ19ldmVudF9xdWV1ZV9sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCBuLCAmZXZlbnRfcXVldWUsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJnAtPmxpc3QpOworCQlrb2JqZWN0X3VldmVudF9lbnYoJmRldi0+a29iaiwgS09CSl9DSEFOR0UsIHAtPmVudnApOworCQlzbXNnX2FwcF9ldmVudF9mcmVlKHApOworCX0KKworCXB1dF9kZXZpY2UoZGV2KTsKK30KK3N0YXRpYyBERUNMQVJFX1dPUksoc21zZ19ldmVudF93b3JrLCBzbXNnX2V2ZW50X3dvcmtfZm4pOworCitzdGF0aWMgdm9pZCBzbXNnX2FwcF9jYWxsYmFjayhjb25zdCBjaGFyICpmcm9tLCBjaGFyICptc2cpCit7CisJc3RydWN0IHNtc2dfYXBwX2V2ZW50ICpzZTsKKworCS8qIGNoZWNrIGlmIHRoZSBvcmlnaW5hdGluZyB6L1ZNIHVzZXIgSUQgbWF0Y2hlcworCSAqIHRoZSBjb25maWd1cmVkIHNlbmRlci4gKi8KKwlpZiAoc2VuZGVyICYmIHN0cmxlbihzZW5kZXIpID4gMCAmJiBzdHJjbXAoZnJvbSwgc2VuZGVyKSAhPSAwKQorCQlyZXR1cm47CisKKwkvKiBnZXQgc3RhcnQgb2YgbWVzc2FnZSB0ZXh0IChza2lwIHByZWZpeCBhbmQgbGVhZGluZyBibGFua3MpICovCisJbXNnICs9IHN0cmxlbihTTVNHX1BSRUZJWCk7CisJd2hpbGUgKCptc2cgJiYgaXNzcGFjZSgqbXNnKSkKKwkJbXNnKys7CisJaWYgKCptc2cgPT0gJ1wwJykKKwkJcmV0dXJuOworCisJLyogYWxsb2NhdGUgZXZlbnQgbGlzdCBlbGVtZW50IGFuZCBpdHMgZW52aXJvbm1lbnQgKi8KKwlzZSA9IHNtc2dfYXBwX2V2ZW50X2FsbG9jKGZyb20sIG1zZyk7CisJaWYgKCFzZSkKKwkJcmV0dXJuOworCisJLyogcXVldWUgZXZlbnQgYW5kIHNjaGVkdWxlIHdvcmsgZnVuY3Rpb24gKi8KKwlzcGluX2xvY2soJnNtc2dfZXZlbnRfcXVldWVfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmc2UtPmxpc3QsICZzbXNnX2V2ZW50X3F1ZXVlKTsKKwlzcGluX3VubG9jaygmc21zZ19ldmVudF9xdWV1ZV9sb2NrKTsKKworCXNjaGVkdWxlX3dvcmsoJnNtc2dfZXZlbnRfd29yayk7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IF9faW5pdCBzbXNnaXVjdl9hcHBfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpzbXNnaXVjdl9kcnY7CisJaW50IHJjOworCisJaWYgKCFNQUNISU5FX0lTX1ZNKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXNtc2dfYXBwX2RldiA9IGt6YWxsb2Moc2l6ZW9mKCpzbXNnX2FwcF9kZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXNtc2dfYXBwX2RldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzbXNnaXVjdl9kcnYgPSBkcml2ZXJfZmluZChTTVNHSVVDVl9EUlZfTkFNRSwgJml1Y3ZfYnVzKTsKKwlpZiAoIXNtc2dpdWN2X2RydikgeworCQlrZnJlZShzbXNnX2FwcF9kZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyYyA9IGRldl9zZXRfbmFtZShzbXNnX2FwcF9kZXYsIEtNU0dfQ09NUE9ORU5UKTsKKwlpZiAocmMpIHsKKwkJa2ZyZWUoc21zZ19hcHBfZGV2KTsKKwkJZ290byBmYWlsX3B1dF9kcml2ZXI7CisJfQorCXNtc2dfYXBwX2Rldi0+YnVzID0gJml1Y3ZfYnVzOworCXNtc2dfYXBwX2Rldi0+cGFyZW50ID0gaXVjdl9yb290OworCXNtc2dfYXBwX2Rldi0+cmVsZWFzZSA9ICh2b2lkICgqKShzdHJ1Y3QgZGV2aWNlICopKSBrZnJlZTsKKwlzbXNnX2FwcF9kZXYtPmRyaXZlciA9IHNtc2dpdWN2X2RydjsKKwlyYyA9IGRldmljZV9yZWdpc3RlcihzbXNnX2FwcF9kZXYpOworCWlmIChyYykgeworCQlwdXRfZGV2aWNlKHNtc2dfYXBwX2Rldik7CisJCWdvdG8gZmFpbF9wdXRfZHJpdmVyOworCX0KKworCS8qIHJlZ2lzdGVyIHdpdGggdGhlIHNtc2dpdWN2IGRldmljZSBkcml2ZXIgKi8KKwlyYyA9IHNtc2dfcmVnaXN0ZXJfY2FsbGJhY2soU01TR19QUkVGSVgsIHNtc2dfYXBwX2NhbGxiYWNrKTsKKwlpZiAocmMpIHsKKwkJZGV2aWNlX3VucmVnaXN0ZXIoc21zZ19hcHBfZGV2KTsKKwkJZ290byBmYWlsX3B1dF9kcml2ZXI7CisJfQorCisJcmMgPSAwOworZmFpbF9wdXRfZHJpdmVyOgorCXB1dF9kcml2ZXIoc21zZ2l1Y3ZfZHJ2KTsKKwlyZXR1cm4gcmM7Cit9Cittb2R1bGVfaW5pdChzbXNnaXVjdl9hcHBfaW5pdCk7CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBzbXNnaXVjdl9hcHBfZXhpdCh2b2lkKQoreworCS8qIHVucmVnaXN0ZXIgY2FsbGJhY2sgKi8KKwlzbXNnX3VucmVnaXN0ZXJfY2FsbGJhY2soU01TR19QUkVGSVgsIHNtc2dfYXBwX2NhbGxiYWNrKTsKKworCS8qIGNhbmNlbCBwZW5kaW5nIHdvcmsgYW5kIGZsdXNoIGFueSBxdWV1ZWQgZXZlbnQgd29yayAqLworCWNhbmNlbF93b3JrX3N5bmMoJnNtc2dfZXZlbnRfd29yayk7CisJc21zZ19ldmVudF93b3JrX2ZuKCZzbXNnX2V2ZW50X3dvcmspOworCisJZGV2aWNlX3VucmVnaXN0ZXIoc21zZ19hcHBfZGV2KTsKK30KK21vZHVsZV9leGl0KHNtc2dpdWN2X2FwcF9leGl0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEZWxpdmVyIHovVk0gQ1AgU01TRyBhcyB1ZXZlbnRzIik7CitNT0RVTEVfQVVUSE9SKCJIZW5kcmlrIEJydWVja25lciA8YnJ1ZWNrbmVyQGxpbnV4LnZuZXQuaWJtLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9zY3NpL3pmY3BfcWRpby5jIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKaW5kZXggNzFiOTdmZi4uNjQ3OTI3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKKysrIGIvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9xZGlvLmMKQEAgLTMxOSw4ICszMTksNiBAQAogCWlkLT5pbnB1dF9oYW5kbGVyID0gemZjcF9xZGlvX2ludF9yZXNwOwogCWlkLT5vdXRwdXRfaGFuZGxlciA9IHpmY3BfcWRpb19pbnRfcmVxOwogCWlkLT5pbnRfcGFybSA9ICh1bnNpZ25lZCBsb25nKSBxZGlvOwotCWlkLT5mbGFncyA9IFFESU9fSU5CT1VORF8wQ09QWV9TQkFMUyB8Ci0JCSAgICBRRElPX09VVEJPVU5EXzBDT1BZX1NCQUxTIHwgUURJT19VU0VfT1VUQk9VTkRfUENJUzsKIAlpZC0+aW5wdXRfc2JhbF9hZGRyX2FycmF5ID0gKHZvaWQgKiopIChxZGlvLT5yZXNwX3Euc2JhbCk7CiAJaWQtPm91dHB1dF9zYmFsX2FkZHJfYXJyYXkgPSAodm9pZCAqKikgKHFkaW8tPnJlcV9xLnNiYWwpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYTEwMHUydy5jIGIvZHJpdmVycy9zY3NpL2ExMDB1MncuYwppbmRleCAyMDhkNmRmLi5mZjU3MTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYTEwMHUydy5jCisrKyBiL2RyaXZlcnMvc2NzaS9hMTAwdTJ3LmMKQEAgLTQ5Miw3ICs0OTIsNyBAQAogICoJaW5pdF9vcmNoaWQJCS0JaW5pdGlhbGlzZSB0aGUgaG9zdCBhZGFwdGVyCiAgKglAaG9zdDpob3N0IGFkYXB0ZXIgdG8gaW5pdGlhbGlzZQogICoKLSAqCUluaXRpYWxpc2UgdGhlIGNvbnRyb2xsZXIgYW5kIGlmIG5lY2Nlc3NhcnkgbG9hZCB0aGUgZmlybXdhcmUuCisgKglJbml0aWFsaXNlIHRoZSBjb250cm9sbGVyIGFuZCBpZiBuZWNlc3NhcnkgbG9hZCB0aGUgZmlybXdhcmUuCiAgKgogICoJUmV0dXJucyAtMSBpZiB0aGUgaW5pdGlhbGlzYXRpb24gZmFpbHMuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9pbml0aW8uYyBiL2RyaXZlcnMvc2NzaS9pbml0aW8uYwppbmRleCA4OWE1OTQ4Li5hNzcxNDE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaW5pdGlvLmMKKysrIGIvZHJpdmVycy9zY3NpL2luaXRpby5jCkBAIC01MzEsNyArNTMxLDcgQEAKICAqCWluaXRpb19zdG9wX2JtCQktCXN0b3AgYnVzIG1hc3RlcgogICoJQGhvc3Q6IEluaXRJTyB3ZSBhcmUgc3RvcHBpbmcKICAqCi0gKglTdG9wIGFueSBwZW5kaW5nIERNQSBvcGVyYXRpb24sIGFib3J0aW5nIHRoZSBETUEgaWYgbmVjY2Vzc2FyeQorICoJU3RvcCBhbnkgcGVuZGluZyBETUEgb3BlcmF0aW9uLCBhYm9ydGluZyB0aGUgRE1BIGlmIG5lY2Vzc2FyeQogICovCiAKIHN0YXRpYyB2b2lkIGluaXRpb19zdG9wX2JtKHN0cnVjdCBpbml0aW9faG9zdCAqIGhvc3QpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKaW5kZXggNmZkZTJmYWIuLjc3NGU3YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9saWJmYy9mY19mY3AuYworKysgYi9kcml2ZXJzL3Njc2kvbGliZmMvZmNfZmNwLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKICNkZWZpbmUgRkNfU1JCX0NNRF9TRU5UCQkoMSA8PCAwKQkvKiBjbWQgaGFzIGJlZW4gc2VudCAqLwogI2RlZmluZSBGQ19TUkJfUkNWX1NUQVRVUwkoMSA8PCAxKQkvKiByZXNwb25zZSBoYXMgYXJyaXZlZCAqLwogI2RlZmluZSBGQ19TUkJfQUJPUlRfUEVORElORwkoMSA8PCAyKQkvKiBjbWQgYWJvcnQgc2VudCB0byBkZXZpY2UgKi8KLSNkZWZpbmUgRkNfU1JCX0FCT1JURUQJCSgxIDw8IDMpCS8qIGFib3J0IGFja25vd2xlZ2VkICovCisjZGVmaW5lIEZDX1NSQl9BQk9SVEVECQkoMSA8PCAzKQkvKiBhYm9ydCBhY2tub3dsZWRnZWQgKi8KICNkZWZpbmUgRkNfU1JCX0RJU0NPTlRJRwkoMSA8PCA0KQkvKiBub24tc2VxdWVudGlhbCBkYXRhIHJlY3ZkICovCiAjZGVmaW5lIEZDX1NSQl9DT01QTAkJKDEgPDwgNSkJLyogZmNfaW9fY29tcGwgaGFzIGJlZW4gcnVuICovCiAjZGVmaW5lIEZDX1NSQl9GQ1BfUFJPQ0VTU0lOR19UTU8gKDEgPDwgNikJLyogdGltZXIgZnVuY3Rpb24gcHJvY2Vzc2luZyAqLwpAQCAtNTE5LDcgKzUxOSw3IEBACiAgKgogICogQ2FsbGVkIGFmdGVyIHJlY2VpdmluZyBhIFRyYW5zZmVyIFJlYWR5IGRhdGEgZGVzY3JpcHRvci4KICAqIElmIHRoZSBMTEQgaXMgY2FwYWJsZSBvZiBzZXF1ZW5jZSBvZmZsb2FkIHRoZW4gc2VuZCBkb3duIHRoZQotICogc2VxX2JsZW4gYW1tb3VudCBvZiBkYXRhIGluIHNpbmdsZSBmcmFtZSwgb3RoZXJ3aXNlIHNlbmQKKyAqIHNlcV9ibGVuIGFtb3VudCBvZiBkYXRhIGluIHNpbmdsZSBmcmFtZSwgb3RoZXJ3aXNlIHNlbmQKICAqIG11bHRpcGxlIGZyYW1lcyBvZiB0aGUgbWF4aW11bSBmcmFtZSBwYXlsb2FkIHN1cHBvcnRlZCBieQogICogdGhlIHRhcmdldCBwb3J0LgogICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19lbHMuYwppbmRleCAwOGI2NjM0Li4yYTQwYTZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvbHBmYy9scGZjX2Vscy5jCisrKyBiL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfZWxzLmMKQEAgLTk4MSw3ICs5ODEsNyBAQAogICogZnVuY3Rpb24gcmV0dXJucywgaXQgZG9lcyBub3QgZ3VhcmFudGVlIGFsbCB0aGUgSU9DQnMgYXJlIGFjdHVhbGx5IGFib3J0ZWQuCiAgKgogICogUmV0dXJuIGNvZGUKLSAqICAgMCAtIFN1Y2Vzc2Z1bGx5IGlzc3VlZCBhYm9ydCBpb2NiIG9uIGFsbCBvdXRzdGFuZGluZyBmbG9naXMgKEFsd2F5cyAwKQorICogICAwIC0gU3VjY2Vzc2Z1bGx5IGlzc3VlZCBhYm9ydCBpb2NiIG9uIGFsbCBvdXRzdGFuZGluZyBmbG9naXMgKEFsd2F5cyAwKQogICoqLwogaW50CiBscGZjX2Vsc19hYm9ydF9mbG9naShzdHJ1Y3QgbHBmY19oYmEgKnBoYmEpCkBAIC0zMTI5LDcgKzMxMjksNyBAQAogCWlmIChuZGxwICYmIE5MUF9DSEtfTk9ERV9BQ1QobmRscCkgJiYKIAkgICAgKCooKHVpbnQzMl90ICopIChwY21kKSkgPT0gRUxTX0NNRF9MU19SSlQpKSB7CiAJCS8qIEEgTFNfUkpUIGFzc29jaWF0ZWQgd2l0aCBEZWZhdWx0IFJQSSBjbGVhbnVwIGhhcyBpdHMgb3duCi0JCSAqIHNlcGVyYXRlIGNvZGUgcGF0aC4KKwkJICogc2VwYXJhdGUgY29kZSBwYXRoLgogCQkgKi8KIAkJaWYgKCEobmRscC0+bmxwX2ZsYWcgJiBOTFBfUk1fREZMVF9SUEkpKQogCQkJbHNfcmp0ID0gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9scGZjL2xwZmNfc2NzaS5jIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKaW5kZXggN2YyMWI0Ny4uNDgzZmI3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL2xwZmMvbHBmY19zY3NpLmMKQEAgLTE1NzUsNyArMTU3NSw3IEBACiAJCWNhc2UgTFBGQ19QR19UWVBFX05PX0RJRjoKIAkJCW51bV9iZGUgPSBscGZjX2JnX3NldHVwX2JwbChwaGJhLCBzY3NpX2NtbmQsIGJwbCwKIAkJCQkJZGF0YXNlZ2NudCk7Ci0JCQkvKiB3ZSBzaG91ZCBoYXZlIDIgb3IgbW9yZSBlbnRyaWVzIGluIGJ1ZmZlciBsaXN0ICovCisJCQkvKiB3ZSBzaG91bGQgaGF2ZSAyIG9yIG1vcmUgZW50cmllcyBpbiBidWZmZXIgbGlzdCAqLwogCQkJaWYgKG51bV9iZGUgPCAyKQogCQkJCWdvdG8gZXJyOwogCQkJYnJlYWs7CkBAIC0xNjEyLDcgKzE2MTIsNyBAQAogCiAJCQludW1fYmRlID0gbHBmY19iZ19zZXR1cF9icGxfcHJvdChwaGJhLCBzY3NpX2NtbmQsIGJwbCwKIAkJCQkJZGF0YXNlZ2NudCwgcHJvdHNlZ2NudCk7Ci0JCQkvKiB3ZSBzaG91ZCBoYXZlIDMgb3IgbW9yZSBlbnRyaWVzIGluIGJ1ZmZlciBsaXN0ICovCisJCQkvKiB3ZSBzaG91bGQgaGF2ZSAzIG9yIG1vcmUgZW50cmllcyBpbiBidWZmZXIgbGlzdCAqLwogCQkJaWYgKG51bV9iZGUgPCAzKQogCQkJCWdvdG8gZXJyOwogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5oIGIvZHJpdmVycy9zY3NpL3BjbWNpYS9uc3BfY3MuaAppbmRleCA3ZGIyOGNkLi44YzYxYTRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvcGNtY2lhL25zcF9jcy5oCisrKyBiL2RyaXZlcnMvc2NzaS9wY21jaWEvbnNwX2NzLmgKQEAgLTE4Nyw3ICsxODcsNyBAQAogI2RlZmluZSBTX0lPCQlCSVQoMSkgICAgLyogSW5wdXQvT3V0cHV0IGxpbmUgZnJvbSBTQ1NJIGJ1cyAqLwogI2RlZmluZSBTX0NECQlCSVQoMikgICAgLyogQ29tbWFuZC9EYXRhIGxpbmUgZnJvbSBTQ1NJIGJ1cyAqLwogI2RlZmluZSBTX0JVU1kJCUJJVCgzKSAgICAvKiBCdXN5IGxpbmUgZnJvbSBTQ1NJIGJ1cyAgICAgICAgICovCi0jZGVmaW5lIFNfQUNLCQlCSVQoNCkgICAgLyogQWNrbm93bGVnZSBsaW5lIGZyb20gU0NTSSBidXMgICAqLworI2RlZmluZSBTX0FDSwkJQklUKDQpICAgIC8qIEFja25vd2xlZGdlIGxpbmUgZnJvbSBTQ1NJIGJ1cyAgKi8KICNkZWZpbmUgU19SRVFVRVNUCUJJVCg1KSAgICAvKiBSZXF1ZXN0IGxpbmUgZnJvbSBTQ1NJIGJ1cyAgICAgICovCiAjZGVmaW5lIFNfU0VMRUNUCUJJVCg2KQkgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgU19BVE4JCUJJVCg3KQkgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX2h3aS5jIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaHdpLmMKaW5kZXggOWI0NGM2Zi4uNzk4NWFlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaHdpLmMKKysrIGIvZHJpdmVycy9zY3NpL3BtODAwMS9wbTgwMDFfaHdpLmMKQEAgLTI5MjQsNyArMjkyNCw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCVBNODAwMV9NU0dfREJHKHBtODAwMV9oYSwKLQkJCXBtODAwMV9wcmludGsoInVua293biBkZXZpY2UgdHlwZSgleClcbiIsIGRldmljZVR5cGUpKTsKKwkJCXBtODAwMV9wcmludGsoInVua25vd24gZGV2aWNlIHR5cGUoJXgpXG4iLCBkZXZpY2VUeXBlKSk7CiAJCWJyZWFrOwogCX0KIAlwaHktPnBoeV90eXBlIHw9IFBPUlRfVFlQRV9TQVM7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcG04MDAxL3BtODAwMV9zYXMuYyBiL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5jCmluZGV4IDdmOWM4M2EuLjNiMmM5OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5jCisrKyBiL2RyaXZlcnMvc2NzaS9wbTgwMDEvcG04MDAxX3Nhcy5jCkBAIC02MDAsNyArNjAwLDcgQEAKICAgKiBieSB0aGUgY29tbWFuZCAiT1BDX0lOQl9SRUdfREVWIiwgYWZ0ZXIgdGhhdCB0aGUgSEJBIHdpbGwgYXNzaWduIGEKICAgKiBkZXZpY2UgSUQoYWNjb3JkaW5nIHRvIGRldmljZSdzIHNhcyBhZGRyZXNzKSBhbmQgcmV0dXJuZWQgaXQgdG8gTExERC4gRnJvbQogICAqIG5vdyBvbiwgd2UgY29tbXVuaWNhdGUgd2l0aCBIQkEgRlcgd2l0aCB0aGUgZGV2aWNlIElEIHdoaWNoIEhCQSBhc3NpZ25lZAotICAqIHJhdGhlciB0aGFuIHNhcyBhZGRyZXNzLiBpdCBpcyB0aGUgbmVjY2Vzc2FyeSBzdGVwIGZvciBvdXIgSEJBIGJ1dCBpdCBpcworICAqIHJhdGhlciB0aGFuIHNhcyBhZGRyZXNzLiBpdCBpcyB0aGUgbmVjZXNzYXJ5IHN0ZXAgZm9yIG91ciBIQkEgYnV0IGl0IGlzCiAgICogdGhlIG9wdGlvbmFsIGZvciBvdGhlciBIQkEgZHJpdmVyLgogICAqLwogc3RhdGljIGludCBwbTgwMDFfZGV2X2ZvdW5kX25vdGlmeShzdHJ1Y3QgZG9tYWluX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuaCBiL2RyaXZlcnMvc2NzaS9wbWNyYWlkLmgKaW5kZXggOTJmODlkNS4uYjhhZDA3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3BtY3JhaWQuaAorKysgYi9kcml2ZXJzL3Njc2kvcG1jcmFpZC5oCkBAIC05MzgsNyArOTM4LDcgQEAKIAogLyoKICAqIHBtY3JhaWRfaW9jdGxfaGVhZGVyIC0gZGVmaW5pdGlvbiBvZiBoZWFkZXIgc3RydWN0dXJlIHRoYXQgcHJlY2VlZHMgYWxsIHRoZQotICogYnVmZmVycyBnaXZlbiBhcyBpb2N0bCBhcmd1ZW1lbnRzLgorICogYnVmZmVycyBnaXZlbiBhcyBpb2N0bCBhcmd1bWVudHMuCiAgKgogICogLnNpZ25hdHVyZSAgICAgICAgICAgOiBhbHdheXMgQVNDSUkgc3RyaW5nLCAiUE1DUkFJRCIKICAqIC5yZXNlcnZlZCAgICAgICAgICAgIDogbm90IHVzZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZC5jIGIvZHJpdmVycy9zY3NpL3NkLmMKaW5kZXggMWRkNGQ4NC4uODM4ODFkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTIxMTEsNyArMjExMSw3IEBACiAgKgl3aGljaCBpcyBmb2xsb3dlZCBieSBzZGFhYS4KICAqCiAgKglUaGlzIGlzIGJhc2ljYWxseSAyNiBiYXNlIGNvdW50aW5nIHdpdGggb25lIGV4dHJhICduaWwnIGVudHJ5Ci0gKglhdCB0aGUgYmVnZ2luaW5nIGZyb20gdGhlIHNlY29uZCBkaWdpdCBvbiBhbmQgY2FuIGJlCisgKglhdCB0aGUgYmVnaW5uaW5nIGZyb20gdGhlIHNlY29uZCBkaWdpdCBvbiBhbmQgY2FuIGJlCiAgKglkZXRlcm1pbmVkIHVzaW5nIHNpbWlsYXIgbWV0aG9kIGFzIDI2IGJhc2UgY29udmVyc2lvbiB3aXRoIHRoZQogICoJaW5kZXggc2hpZnRlZCAtMSBhZnRlciBlYWNoIGRpZ2l0IGlzIGNvbXB1dGVkLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zZXMuYyBiL2RyaXZlcnMvc2NzaS9zZXMuYwppbmRleCAxZDdhODc4Li4wZDlkNmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc2VzLmMKKysrIGIvZHJpdmVycy9zY3NpL3Nlcy5jCkBAIC01OTUsOCArNTk1LDYgQEAKIAkJc2VzX2Rldi0+cGFnZTEwX2xlbiA9IGxlbjsKIAkJYnVmID0gTlVMTDsKIAl9Ci0Ja2ZyZWUoaGRyX2J1Zik7Ci0KIAlzY29tcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXNfY29tcG9uZW50KSAqIGNvbXBvbmVudHMsIEdGUF9LRVJORUwpOwogCWlmICghc2NvbXApCiAJCWdvdG8gZXJyX2ZyZWU7CkBAIC02MDgsNiArNjA2LDggQEAKIAkJZ290byBlcnJfZnJlZTsKIAl9CiAKKwlrZnJlZShoZHJfYnVmKTsKKwogCWVkZXYtPnNjcmF0Y2ggPSBzZXNfZGV2OwogCWZvciAoaSA9IDA7IGkgPCBjb21wb25lbnRzOyBpKyspCiAJCWVkZXYtPmNvbXBvbmVudFtpXS5zY3JhdGNoID0gc2NvbXAgKyBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NnaXdkOTMuYyBiL2RyaXZlcnMvc2NzaS9zZ2l3ZDkzLmMKaW5kZXggMDgwN2IyNi4uZmVmMGUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NnaXdkOTMuYworKysgYi9kcml2ZXJzL3Njc2kvc2dpd2Q5My5jCkBAIC0yMjYsNyArMjI2LDcgQEAKIAkudXNlX2NsdXN0ZXJpbmcJCT0gRElTQUJMRV9DTFVTVEVSSU5HLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgc2dpd2Q5M19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgc2dpd2Q5M19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBzZ2l3ZDkzX3BsYXRmb3JtX2RhdGEgKnBkID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJdW5zaWduZWQgY2hhciAqd2RyZWdzID0gcGQtPndkcmVnczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zbmlfNTNjNzEwLmMgYi9kcml2ZXJzL3Njc2kvc25pXzUzYzcxMC5jCmluZGV4IDM3YjMzNTkuLjU2Y2YwYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zbmlfNTNjNzEwLmMKKysrIGIvZHJpdmVycy9zY3NpL3NuaV81M2M3MTAuYwpAQCAtNjQsNyArNjQsNyBAQAogCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBzbmlybTcxMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBzbmlybTcxMF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBiYXNlOwogCXN0cnVjdCBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycyAqaG9zdGRhdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC82ODMyOHNlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvNjgzMjhzZXJpYWwuYwppbmRleCBkOTM1YjJkLi5hZTAyNTFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC82ODMyOHNlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsLzY4MzI4c2VyaWFsLmMKQEAgLTE1Myw4ICsxNTMsNiBAQAogCTAsIDUwLCA3NSwgMTEwLCAxMzQsIDE1MCwgMjAwLCAzMDAsIDYwMCwgMTIwMCwgMTgwMCwgMjQwMCwgNDgwMCwKIAk5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAsIDAgfTsKIAotI2RlZmluZSBCQVVEX1RBQkxFX1NJWkUgKHNpemVvZihiYXVkX3RhYmxlKS9zaXplb2YoYmF1ZF90YWJsZVswXSkpCi0KIC8qIFNldHMgb3IgY2xlYXJzIERUUi9SVFMgb24gdGhlIHJlcXVlc3RlZCBsaW5lICovCiBzdGF0aWMgaW5saW5lIHZvaWQgbTY4a19ydHNkdHIoc3RydWN0IG02OGtfc2VyaWFsICpzcywgaW50IHNldCkKIHsKQEAgLTE0MDYsMTAgKzE0MDQsMTAgQEAKIAlVU1RDTlQgPSB1c3RjbnQgJiB+VVNUQ05UX1RYRU47CiAKIGFnYWluOgotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoYmF1ZF90YWJsZSkgLyBzaXplb2YoYmF1ZF90YWJsZVswXSk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShiYXVkX3RhYmxlKTsgaSsrKQogCQlpZiAoYmF1ZF90YWJsZVtpXSA9PSBtNjgzMjhfY29uc29sZV9iYXVkKQogCQkJYnJlYWs7Ci0JaWYgKGkgPj0gc2l6ZW9mKGJhdWRfdGFibGUpIC8gc2l6ZW9mKGJhdWRfdGFibGVbMF0pKSB7CisJaWYgKGkgPj0gQVJSQVlfU0laRShiYXVkX3RhYmxlKSkgewogCQltNjgzMjhfY29uc29sZV9iYXVkID0gOTYwMDsKIAkJZ290byBhZ2FpbjsKIAl9CkBAIC0xNDM1LDcgKzE0MzMsNyBAQAogCWlmIChhcmcpCiAJCW4gPSBzaW1wbGVfc3RydG91bChhcmcsTlVMTCwwKTsKIAotCWZvciAoaSA9IDA7IGkgPCBCQVVEX1RBQkxFX1NJWkU7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShiYXVkX3RhYmxlKTsgaSsrKQogCQlpZiAoYmF1ZF90YWJsZVtpXSA9PSBuKQogCQkJYnJlYWs7CiAJaWYgKGkgPCBCQVVEX1RBQkxFX1NJWkUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsLzgyNTAuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTAuYwppbmRleCBhODFmZjdiLi5jM2RiMTZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC84MjUwLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvODI1MC5jCkBAIC0yNDA4LDYgKzI0MDgsMjEgQEAKIH0KIAogc3RhdGljIHZvaWQKK3NlcmlhbDgyNTBfc2V0X2xkaXNjKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJaW50IGxpbmUgPSBwb3J0LT5saW5lOworCisJaWYgKGxpbmUgPj0gcG9ydC0+c3RhdGUtPnBvcnQudHR5LT5kcml2ZXItPm51bSkKKwkJcmV0dXJuOworCisJaWYgKHBvcnQtPnN0YXRlLT5wb3J0LnR0eS0+bGRpc2MtPm9wcy0+bnVtID09IE5fUFBTKSB7CisJCXBvcnQtPmZsYWdzIHw9IFVQRl9IQVJEUFBTX0NEOworCQlzZXJpYWw4MjUwX2VuYWJsZV9tcyhwb3J0KTsKKwl9IGVsc2UKKwkJcG9ydC0+ZmxhZ3MgJj0gflVQRl9IQVJEUFBTX0NEOworfQorCitzdGF0aWMgdm9pZAogc2VyaWFsODI1MF9wbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgc3RhdGUsCiAJICAgICAgdW5zaWduZWQgaW50IG9sZHN0YXRlKQogewpAQCAtMjYyOCw2ICsyNjQzLDcgQEAKIAkuc3RhcnR1cAk9IHNlcmlhbDgyNTBfc3RhcnR1cCwKIAkuc2h1dGRvd24JPSBzZXJpYWw4MjUwX3NodXRkb3duLAogCS5zZXRfdGVybWlvcwk9IHNlcmlhbDgyNTBfc2V0X3Rlcm1pb3MsCisJLnNldF9sZGlzYwk9IHNlcmlhbDgyNTBfc2V0X2xkaXNjLAogCS5wbQkJPSBzZXJpYWw4MjUwX3BtLAogCS50eXBlCQk9IHNlcmlhbDgyNTBfdHlwZSwKIAkucmVsZWFzZV9wb3J0CT0gc2VyaWFsODI1MF9yZWxlYXNlX3BvcnQsCkBAIC0yNjkwLDYgKzI3MDYsMTUgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkCitzZXJpYWw4MjUwX2luaXRfZml4ZWRfdHlwZV9wb3J0KHN0cnVjdCB1YXJ0XzgyNTBfcG9ydCAqdXAsIHVuc2lnbmVkIGludCB0eXBlKQoreworCXVwLT5wb3J0LnR5cGUgPSB0eXBlOworCXVwLT5wb3J0LmZpZm9zaXplID0gdWFydF9jb25maWdbdHlwZV0uZmlmb19zaXplOworCXVwLT5jYXBhYmlsaXRpZXMgPSB1YXJ0X2NvbmZpZ1t0eXBlXS5mbGFnczsKKwl1cC0+dHhfbG9hZHN6ID0gdWFydF9jb25maWdbdHlwZV0udHhfbG9hZHN6OworfQorCiBzdGF0aWMgdm9pZCBfX2luaXQKIHNlcmlhbDgyNTBfcmVnaXN0ZXJfcG9ydHMoc3RydWN0IHVhcnRfZHJpdmVyICpkcnYsIHN0cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTI3MDYsNiArMjczMSwxMCBAQAogCQlzdHJ1Y3QgdWFydF84MjUwX3BvcnQgKnVwID0gJnNlcmlhbDgyNTBfcG9ydHNbaV07CiAKIAkJdXAtPnBvcnQuZGV2ID0gZGV2OworCisJCWlmICh1cC0+cG9ydC5mbGFncyAmIFVQRl9GSVhFRF9UWVBFKQorCQkJc2VyaWFsODI1MF9pbml0X2ZpeGVkX3R5cGVfcG9ydCh1cCwgdXAtPnBvcnQudHlwZSk7CisKIAkJdWFydF9hZGRfb25lX3BvcnQoZHJ2LCAmdXAtPnBvcnQpOwogCX0KIH0KQEAgLTMxMTgsMTIgKzMxNDcsOCBAQAogCQlpZiAocG9ydC0+ZGV2KQogCQkJdWFydC0+cG9ydC5kZXYgPSBwb3J0LT5kZXY7CiAKLQkJaWYgKHBvcnQtPmZsYWdzICYgVVBGX0ZJWEVEX1RZUEUpIHsKLQkJCXVhcnQtPnBvcnQudHlwZSA9IHBvcnQtPnR5cGU7Ci0JCQl1YXJ0LT5wb3J0LmZpZm9zaXplID0gdWFydF9jb25maWdbcG9ydC0+dHlwZV0uZmlmb19zaXplOwotCQkJdWFydC0+Y2FwYWJpbGl0aWVzID0gdWFydF9jb25maWdbcG9ydC0+dHlwZV0uZmxhZ3M7Ci0JCQl1YXJ0LT50eF9sb2Fkc3ogPSB1YXJ0X2NvbmZpZ1twb3J0LT50eXBlXS50eF9sb2Fkc3o7Ci0JCX0KKwkJaWYgKHBvcnQtPmZsYWdzICYgVVBGX0ZJWEVEX1RZUEUpCisJCQlzZXJpYWw4MjUwX2luaXRfZml4ZWRfdHlwZV9wb3J0KHVhcnQsIHBvcnQtPnR5cGUpOwogCiAJCXNldF9pb19mcm9tX3VwaW8oJnVhcnQtPnBvcnQpOwogCQkvKiBQb3NzaWJseSBvdmVycmlkZSBkZWZhdWx0IEkvTyBmdW5jdGlvbnMuICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfcGNpLmMKaW5kZXggYjI4YWYxMy4uMDFjMDEyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9wY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX3BjaS5jCkBAIC03NjAsNyArNzYwLDggQEAKIAkvKiBzdWJkZXZpY2UgMHgwMFBTIG1lYW5zIDxQPiBwYXJhbGxlbCwgPFM+IHNlcmlhbCAqLwogCXVuc2lnbmVkIGludCBudW1fc2VyaWFsID0gZGV2LT5zdWJzeXN0ZW1fZGV2aWNlICYgMHhmOwogCi0JaWYgKGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk5MDEpCisJaWYgKChkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX05FVE1PU185OTAxKSB8fAorCQkoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9ORVRNT1NfOTg2NSkpCiAJCXJldHVybiAwOwogCWlmIChkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9JQk0gJiYKIAkJCWRldi0+c3Vic3lzdGVtX2RldmljZSA9PSAweDAyOTkpCkBAIC0xNDc5LDYgKzE0ODAsNyBAQAogCiAJcGJuX2IwX2J0XzFfMTE1MjAwLAogCXBibl9iMF9idF8yXzExNTIwMCwKKwlwYm5fYjBfYnRfNF8xMTUyMDAsCiAJcGJuX2IwX2J0XzhfMTE1MjAwLAogCiAJcGJuX2IwX2J0XzFfNDYwODAwLApAQCAtMTcwMyw2ICsxNzA1LDEyIEBACiAJCS5iYXNlX2JhdWQJPSAxMTUyMDAsCiAJCS51YXJ0X29mZnNldAk9IDgsCiAJfSwKKwlbcGJuX2IwX2J0XzRfMTE1MjAwXSA9IHsKKwkJLmZsYWdzCQk9IEZMX0JBU0UwfEZMX0JBU0VfQkFSUywKKwkJLm51bV9wb3J0cwk9IDQsCisJCS5iYXNlX2JhdWQJPSAxMTUyMDAsCisJCS51YXJ0X29mZnNldAk9IDgsCisJfSwKIAlbcGJuX2IwX2J0XzhfMTE1MjAwXSA9IHsKIAkJLmZsYWdzCQk9IEZMX0JBU0UwfEZMX0JBU0VfQkFSUywKIAkJLm51bV9wb3J0cwk9IDgsCkBAIC0zMTkxLDYgKzMxOTksMTUgQEAKIAkJMHgxMjA4LCAweDAwMDQsIDAsIDAsCiAJCXBibl9iMF80XzkyMTYwMCB9LAogCisJewlQQ0lfVkVORE9SX0lEX0tPUkVOSVgsIFBDSV9ERVZJQ0VfSURfS09SRU5JWF9KRVRDQVJERjIsCisJCTB4MTIwNCwgMHgwMDA0LCAwLCAwLAorCQlwYm5fYjBfNF85MjE2MDAgfSwKKwl7CVBDSV9WRU5ET1JfSURfS09SRU5JWCwgUENJX0RFVklDRV9JRF9LT1JFTklYX0pFVENBUkRGMiwKKwkJMHgxMjA4LCAweDAwMDQsIDAsIDAsCisJCXBibl9iMF80XzkyMTYwMCB9LAorCXsJUENJX1ZFTkRPUl9JRF9LT1JFTklYLCBQQ0lfREVWSUNFX0lEX0tPUkVOSVhfSkVUQ0FSREYzLAorCQkweDEyMDgsIDB4MDAwNCwgMCwgMCwKKwkJcGJuX2IwXzRfOTIxNjAwIH0sCiAJLyoKIAkgKiBEZWxsIFJlbW90ZSBBY2Nlc3MgQ2FyZCA0IC0gVGltX1RfTXVycGh5QERlbGwuY29tCiAJICovCkBAIC0zNjQ5LDYgKzM2NjYsMTggQEAKIAkJMCwgMCwgcGJuX2IwXzFfMTE1MjAwIH0sCiAKIAkvKgorCSAqIEJlc3QgQ29ubmVjdGl2aXR5IFBDSSBNdWx0aSBJL08gY2FyZHMKKwkgKi8KKworCXsJUENJX1ZFTkRPUl9JRF9ORVRNT1MsIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4NjUsCisJCTB4QTAwMCwgMHgxMDAwLAorCQkwLCAwLCBwYm5fYjBfMV8xMTUyMDAgfSwKKworCXsJUENJX1ZFTkRPUl9JRF9ORVRNT1MsIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4NjUsCisJCTB4QTAwMCwgMHgzMDA0LAorCQkwLCAwLCBwYm5fYjBfYnRfNF8xMTUyMDAgfSwKKworCS8qCiAJICogVGhlc2UgZW50cmllcyBtYXRjaCBkZXZpY2VzIHdpdGggY2xhc3MgQ09NTVVOSUNBVElPTl9TRVJJQUwsCiAJICogQ09NTVVOSUNBVElPTl9NT0RFTSBvciBDT01NVU5JQ0FUSU9OX01VTFRJU0VSSUFMCiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy9zZXJpYWwvS2NvbmZpZwppbmRleCA4ODhhMGNlLi5mNTVjNDk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKQEAgLTQ0Nyw3ICs0NDcsNyBAQAogCiBjb25maWcgU0VSSUFMX1NBTVNVTkcKIAl0cmlzdGF0ZSAiU2Ftc3VuZyBTb0Mgc2VyaWFsIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBBUk0gJiYgUExBVF9TM0MKKwlkZXBlbmRzIG9uIEFSTSAmJiBQTEFUX1NBTVNVTkcKIAlzZWxlY3QgU0VSSUFMX0NPUkUKIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgb24tY2hpcCBVQVJUcyBvbiB0aGUgU2Ftc3VuZyBTM0MyNFhYIHNlcmllcyBDUFVzLApAQCAtNDU1LDExICs0NTUsMTggQEAKIAkgIHByb3ZpZGUgYWxsIG9mIHRoZXNlIHBvcnRzLCBkZXBlbmRpbmcgb24gaG93IHRoZSBzZXJpYWwgcG9ydAogCSAgcGlucyBhcmUgY29uZmlndXJlZC4KIAorY29uZmlnIFNFUklBTF9TQU1TVU5HX1VBUlRTXzQKKwlib29sCisJZGVwZW5kcyBvbiBBUk0gJiYgUExBVF9TQU1TVU5HCisJZGVmYXVsdCB5IGlmIENQVV9TM0MyNDQzCisJaGVscAorCSAgSW50ZXJuYWwgbm9kZSBmb3IgdGhlIGNvbW1vbiBjYXNlIG9mIDQgU2Ftc3VuZyBjb21wYXRpYmxlIFVBUlRzCisKIGNvbmZpZyBTRVJJQUxfU0FNU1VOR19VQVJUUwogCWludAotCWRlcGVuZHMgb24gQVJNICYmIFBMQVRfUzNDCisJZGVwZW5kcyBvbiBBUk0gJiYgUExBVF9TQU1TVU5HCiAJZGVmYXVsdCAyIGlmIEFSQ0hfUzNDMjQwMAotCWRlZmF1bHQgNCBpZiBBUkNIX1M1UEMxWFggfHwgQVJDSF9TM0M2NFhYIHx8IENQVV9TM0MyNDQzCisJZGVmYXVsdCA0IGlmIFNFUklBTF9TQU1TVU5HX1VBUlRTXzQKIAlkZWZhdWx0IDMKIAloZWxwCiAJICBTZWxlY3QgdGhlIG51bWJlciBvZiBhdmFpbGFibGUgVUFSVCBwb3J0cyBmb3IgdGhlIFNhbXN1bmcgUzNDCkBAIC01MjYsMjAgKzUzMywzMCBAQAogCSAgU2VyaWFsIHBvcnQgc3VwcG9ydCBmb3IgdGhlIFNhbXN1bmcgUzNDMjRBMCBTb0MKIAogY29uZmlnIFNFUklBTF9TM0M2NDAwCi0JdHJpc3RhdGUgIlNhbXN1bmcgUzNDNjQwMC9TM0M2NDEwIFNlcmlhbCBwb3J0IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTRVJJQUxfU0FNU1VORyAmJiAoQ1BVX1MzQzY0MDAgfHwgQ1BVX1MzQzY0MTApCisJdHJpc3RhdGUgIlNhbXN1bmcgUzNDNjQwMC9TM0M2NDEwL1M1UDY0NDAgU2VyaWEgcG9ydCBzdXBwb3J0IgorCWRlcGVuZHMgb24gU0VSSUFMX1NBTVNVTkcgJiYgKENQVV9TM0M2NDAwIHx8IENQVV9TM0M2NDEwIHx8IENQVV9TNVA2NDQwKQorCXNlbGVjdCBTRVJJQUxfU0FNU1VOR19VQVJUU180CiAJZGVmYXVsdCB5CiAJaGVscAotCSAgU2VyaWFsIHBvcnQgc3VwcG9ydCBmb3IgdGhlIFNhbXN1bmcgUzNDNjQwMCBhbmQgUzNDNjQxMAorCSAgU2VyaWFsIHBvcnQgc3VwcG9ydCBmb3IgdGhlIFNhbXN1bmcgUzNDNjQwMCwgUzNDNjQxMCBhbmQgUzVQNjQ0MAogCSAgU29DcwogCiBjb25maWcgU0VSSUFMX1M1UEMxMDAKIAl0cmlzdGF0ZSAiU2Ftc3VuZyBTNVBDMTAwIFNlcmlhbCBwb3J0IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTRVJJQUxfU0FNU1VORyAmJiBDUFVfUzVQQzEwMAorCXNlbGVjdCBTRVJJQUxfU0FNU1VOR19VQVJUU180CiAJZGVmYXVsdCB5CiAJaGVscAogCSAgU2VyaWFsIHBvcnQgc3VwcG9ydCBmb3IgdGhlIFNhbXN1bmcgUzVQQzEwMCBTb0NzCiAKK2NvbmZpZyBTRVJJQUxfUzVQVjIxMAorCXRyaXN0YXRlICJTYW1zdW5nIFM1UFYyMTAgU2VyaWFsIHBvcnQgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFNFUklBTF9TQU1TVU5HICYmIChDUFVfUzVQVjIxMCB8fCBDUFVfUzVQNjQ0MikKKwlzZWxlY3QgU0VSSUFMX1NBTVNVTkdfVUFSVFNfNCBpZiBDUFVfUzVQVjIxMAorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFNlcmlhbCBwb3J0IHN1cHBvcnQgZm9yIFNhbXN1bmcncyBTNVAgRmFtaWx5IG9mIFNvQydzCisKIGNvbmZpZyBTRVJJQUxfTUFYMzEwMAogCXRyaXN0YXRlICJNQVgzMTAwIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTUEkKQEAgLTk5Niw3ICsxMDEzLDcgQEAKIAogY29uZmlnIFNFUklBTF9TSF9TQ0kKIAl0cmlzdGF0ZSAiU3VwZXJIIFNDSShGKSBzZXJpYWwgcG9ydCBzdXBwb3J0IgotCWRlcGVuZHMgb24gSEFWRV9DTEsgJiYgKFNVUEVSSCB8fCBIODMwMCkKKwlkZXBlbmRzIG9uIEhBVkVfQ0xLICYmIChTVVBFUkggfHwgSDgzMDAgfHwgQVJDSF9TSE1PQklMRSkKIAlzZWxlY3QgU0VSSUFMX0NPUkUKIAogY29uZmlnIFNFUklBTF9TSF9TQ0lfTlJfVUFSVFMKQEAgLTEwMDksNiArMTAyNiwxMCBAQAogCWRlcGVuZHMgb24gU0VSSUFMX1NIX1NDST15CiAJc2VsZWN0IFNFUklBTF9DT1JFX0NPTlNPTEUKIAorY29uZmlnIFNFUklBTF9TSF9TQ0lfRE1BCisJYm9vbCAiRE1BIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBTRVJJQUxfU0hfU0NJICYmIFNIX0RNQUUgJiYgRVhQRVJJTUVOVEFMCisKIGNvbmZpZyBTRVJJQUxfUE5YOFhYWAogCWJvb2wgIkVuYWJsZSBQTlg4WFhYIFNvQ3MnIFVBUlQgU3VwcG9ydCIKIAlkZXBlbmRzIG9uIE1JUFMgJiYgKFNPQ19QTlg4NTUwIHx8IFNPQ19QTlg4MzNYKQpAQCAtMTQxOCw0MiArMTQzOSwzNyBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYmZpbl9zcG9ydF91YXJ0LgogCi1jaG9pY2UKLQlwcm9tcHQgIkJhdWQgcmF0ZSBmb3IgQmxhY2tmaW4gU1BPUlQgVUFSVCIKLQlkZXBlbmRzIG9uIFNFUklBTF9CRklOX1NQT1JUCi0JZGVmYXVsdCBTRVJJQUxfU1BPUlRfQkFVRF9SQVRFXzU3NjAwCitjb25maWcgU0VSSUFMX0JGSU5fU1BPUlRfQ09OU09MRQorCWJvb2wgIkNvbnNvbGUgb24gQmxhY2tmaW4gc3BvcnQgZW11bGF0ZWQgdWFydCIKKwlkZXBlbmRzIG9uIFNFUklBTF9CRklOX1NQT1JUPXkKKwlzZWxlY3QgU0VSSUFMX0NPUkVfQ09OU09MRQorCitjb25maWcgU0VSSUFMX0JGSU5fU1BPUlQwX1VBUlQKKwlib29sICJFbmFibGUgVUFSVCBvdmVyIFNQT1JUMCIKKwlkZXBlbmRzIG9uIFNFUklBTF9CRklOX1NQT1JUICYmICEoQkY1NDIgfHwgQkY1NDJNIHx8IEJGNTQ0IHx8IEJGNTQ0TSkKIAloZWxwCi0JICBDaG9vc2UgYSBiYXVkIHJhdGUgZm9yIHRoZSBTUE9SVCBVQVJULCBvdGhlciB1YXJ0IHNldHRpbmdzIGFyZQotCSAgOCBiaXQsIDEgc3RvcCBiaXQsIG5vIHBhcml0eSwgbm8gZmxvdyBjb250cm9sLgorCSAgRW5hYmxlIFVBUlQgb3ZlciBTUE9SVDAKIAotY29uZmlnIFNFUklBTF9TUE9SVF9CQVVEX1JBVEVfMTE1MjAwCi0JYm9vbCAiMTE1MjAwIgotCi1jb25maWcgU0VSSUFMX1NQT1JUX0JBVURfUkFURV81NzYwMAotCWJvb2wgIjU3NjAwIgotCi1jb25maWcgU0VSSUFMX1NQT1JUX0JBVURfUkFURV8zODQwMAotCWJvb2wgIjM4NDAwIgotCi1jb25maWcgU0VSSUFMX1NQT1JUX0JBVURfUkFURV8xOTIwMAotCWJvb2wgIjE5MjAwIgotCi1jb25maWcgU0VSSUFMX1NQT1JUX0JBVURfUkFURV85NjAwCi0JYm9vbCAiOTYwMCIKLWVuZGNob2ljZQotCi1jb25maWcgU1BPUlRfQkFVRF9SQVRFCi0JaW50Citjb25maWcgU0VSSUFMX0JGSU5fU1BPUlQxX1VBUlQKKwlib29sICJFbmFibGUgVUFSVCBvdmVyIFNQT1JUMSIKIAlkZXBlbmRzIG9uIFNFUklBTF9CRklOX1NQT1JUCi0JZGVmYXVsdCAxMTUyMDAgaWYgKFNFUklBTF9TUE9SVF9CQVVEX1JBVEVfMTE1MjAwKQotCWRlZmF1bHQgNTc2MDAgaWYgKFNFUklBTF9TUE9SVF9CQVVEX1JBVEVfNTc2MDApCi0JZGVmYXVsdCAzODQwMCBpZiAoU0VSSUFMX1NQT1JUX0JBVURfUkFURV8zODQwMCkKLQlkZWZhdWx0IDE5MjAwIGlmIChTRVJJQUxfU1BPUlRfQkFVRF9SQVRFXzE5MjAwKQotCWRlZmF1bHQgOTYwMCBpZiAoU0VSSUFMX1NQT1JUX0JBVURfUkFURV85NjAwKQorCWhlbHAKKwkgIEVuYWJsZSBVQVJUIG92ZXIgU1BPUlQxCisKK2NvbmZpZyBTRVJJQUxfQkZJTl9TUE9SVDJfVUFSVAorCWJvb2wgIkVuYWJsZSBVQVJUIG92ZXIgU1BPUlQyIgorCWRlcGVuZHMgb24gU0VSSUFMX0JGSU5fU1BPUlQgJiYgKEJGNTR4IHx8IEJGNTM4IHx8IEJGNTM5KQorCWhlbHAKKwkgIEVuYWJsZSBVQVJUIG92ZXIgU1BPUlQyCisKK2NvbmZpZyBTRVJJQUxfQkZJTl9TUE9SVDNfVUFSVAorCWJvb2wgIkVuYWJsZSBVQVJUIG92ZXIgU1BPUlQzIgorCWRlcGVuZHMgb24gU0VSSUFMX0JGSU5fU1BPUlQgJiYgKEJGNTR4IHx8IEJGNTM4IHx8IEJGNTM5KQorCWhlbHAKKwkgIEVuYWJsZSBVQVJUIG92ZXIgU1BPUlQzCiAKIGNvbmZpZyBTRVJJQUxfVElNQkVSREFMRQogCXRyaXN0YXRlICJTdXBwb3J0IGZvciB0aW1iZXJkYWxlIFVBUlQiCi0JZGVwZW5kcyBvbiBNRkRfVElNQkVSREFMRQogCXNlbGVjdCBTRVJJQUxfQ09SRQogCS0tLWhlbHAtLS0KIAlBZGQgc3VwcG9ydCBmb3IgVUFSVCBjb250cm9sbGVyIG9uIHRpbWJlcmRhbGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9NYWtlZmlsZSBiL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCmluZGV4IDU1NDhmZTcuLjZhYTQ3MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc2VyaWFsL01ha2VmaWxlCkBAIC00NSw2ICs0NSw3IEBACiBvYmotJChDT05GSUdfU0VSSUFMX1MzQzI0QTApICs9IHMzYzI0YTAubwogb2JqLSQoQ09ORklHX1NFUklBTF9TM0M2NDAwKSArPSBzM2M2NDAwLm8KIG9iai0kKENPTkZJR19TRVJJQUxfUzVQQzEwMCkgKz0gczNjNjQwMC5vCitvYmotJChDT05GSUdfU0VSSUFMX1M1UFYyMTApICs9IHM1cHYyMTAubwogb2JqLSQoQ09ORklHX1NFUklBTF9NQVgzMTAwKSArPSBtYXgzMTAwLm8KIG9iai0kKENPTkZJR19TRVJJQUxfSVAyMl9aSUxPRykgKz0gaXAyMnppbG9nLm8KIG9iai0kKENPTkZJR19TRVJJQUxfTVVYKSArPSBtdXgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jIGIvZHJpdmVycy9zZXJpYWwvYW1iYS1wbDAxMC5jCmluZGV4IDQyOWE4YWUuLmU0YjNjMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2FtYmEtcGwwMTAuYworKysgYi9kcml2ZXJzL3NlcmlhbC9hbWJhLXBsMDEwLmMKQEAgLTQ3MSw2ICs0NzEsMjAgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1YXAtPnBvcnQubG9jaywgZmxhZ3MpOwogfQogCitzdGF0aWMgdm9pZCBwbDAxMF9zZXRfbGRpc2Moc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlpbnQgbGluZSA9IHBvcnQtPmxpbmU7CisKKwlpZiAobGluZSA+PSBwb3J0LT5zdGF0ZS0+cG9ydC50dHktPmRyaXZlci0+bnVtKQorCQlyZXR1cm47CisKKwlpZiAocG9ydC0+c3RhdGUtPnBvcnQudHR5LT5sZGlzYy0+b3BzLT5udW0gPT0gTl9QUFMpIHsKKwkJcG9ydC0+ZmxhZ3MgfD0gVVBGX0hBUkRQUFNfQ0Q7CisJCXBsMDEwX2VuYWJsZV9tcyhwb3J0KTsKKwl9IGVsc2UKKwkJcG9ydC0+ZmxhZ3MgJj0gflVQRl9IQVJEUFBTX0NEOworfQorCiBzdGF0aWMgY29uc3QgY2hhciAqcGwwMTBfdHlwZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXJldHVybiBwb3J0LT50eXBlID09IFBPUlRfQU1CQSA/ICJBTUJBIiA6IE5VTEw7CkBAIC01MzEsNiArNTQ1LDcgQEAKIAkuc3RhcnR1cAk9IHBsMDEwX3N0YXJ0dXAsCiAJLnNodXRkb3duCT0gcGwwMTBfc2h1dGRvd24sCiAJLnNldF90ZXJtaW9zCT0gcGwwMTBfc2V0X3Rlcm1pb3MsCisJLnNldF9sZGlzYwk9IHBsMDEwX3NldF9sZGlzYywKIAkudHlwZQkJPSBwbDAxMF90eXBlLAogCS5yZWxlYXNlX3BvcnQJPSBwbDAxMF9yZWxlYXNlX3BvcnQsCiAJLnJlcXVlc3RfcG9ydAk9IHBsMDEwX3JlcXVlc3RfcG9ydCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2F0bWVsX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKaW5kZXggOWQ5NDhiYy4uMmM5YmY5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYXRtZWxfc2VyaWFsLmMKQEAgLTEyMTMsNiArMTIxMywyNCBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfQ09OU09MRV9QT0xMCitzdGF0aWMgaW50IGF0bWVsX3BvbGxfZ2V0X2NoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwl3aGlsZSAoIShVQVJUX0dFVF9DU1IocG9ydCkgJiBBVE1FTF9VU19SWFJEWSkpCisJCWNwdV9yZWxheCgpOworCisJcmV0dXJuIFVBUlRfR0VUX0NIQVIocG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIGF0bWVsX3BvbGxfcHV0X2NoYXIoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgY2hhciBjaCkKK3sKKwl3aGlsZSAoIShVQVJUX0dFVF9DU1IocG9ydCkgJiBBVE1FTF9VU19UWFJEWSkpCisJCWNwdV9yZWxheCgpOworCisJVUFSVF9QVVRfQ0hBUihwb3J0LCBjaCk7Cit9CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCB1YXJ0X29wcyBhdG1lbF9wb3BzID0gewogCS50eF9lbXB0eQk9IGF0bWVsX3R4X2VtcHR5LAogCS5zZXRfbWN0cmwJPSBhdG1lbF9zZXRfbWN0cmwsCkBAIC0xMjMyLDYgKzEyNTAsMTAgQEAKIAkuY29uZmlnX3BvcnQJPSBhdG1lbF9jb25maWdfcG9ydCwKIAkudmVyaWZ5X3BvcnQJPSBhdG1lbF92ZXJpZnlfcG9ydCwKIAkucG0JCT0gYXRtZWxfc2VyaWFsX3BtLAorI2lmZGVmIENPTkZJR19DT05TT0xFX1BPTEwKKwkucG9sbF9nZXRfY2hhcgk9IGF0bWVsX3BvbGxfZ2V0X2NoYXIsCisJLnBvbGxfcHV0X2NoYXIJPSBhdG1lbF9wb2xsX3B1dF9jaGFyLAorI2VuZGlmCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYmNtNjN4eF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9iY202M3h4X3VhcnQuYwppbmRleCAzN2FkMGM0Li5hMWEwZTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9iY202M3h4X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9iY202M3h4X3VhcnQuYwpAQCAtMzUsNyArMzUsNyBAQAogI2luY2x1ZGUgPGJjbTYzeHhfcmVncy5oPgogI2luY2x1ZGUgPGJjbTYzeHhfaW8uaD4KIAotI2RlZmluZSBCQ002M1hYX05SX1VBUlRTCTEKKyNkZWZpbmUgQkNNNjNYWF9OUl9VQVJUUwkyCiAKIHN0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IHBvcnRzW0JDTTYzWFhfTlJfVUFSVFNdOwogCkBAIC03ODQsNyArNzg0LDcgQEAKIAkuZGV2X25hbWUJPSAidHR5UyIsCiAJLm1ham9yCQk9IFRUWV9NQUpPUiwKIAkubWlub3IJCT0gNjQsCi0JLm5yCQk9IDEsCisJLm5yCQk9IEJDTTYzWFhfTlJfVUFSVFMsCiAJLmNvbnMJCT0gQkNNNjNYWF9DT05TT0xFLAogfTsKIApAQCAtODI2LDExICs4MjYsMTIgQEAKIAlwb3J0LT5kZXYgPSAmcGRldi0+ZGV2OwogCXBvcnQtPmZpZm9zaXplID0gMTY7CiAJcG9ydC0+dWFydGNsayA9IGNsa19nZXRfcmF0ZShjbGspIC8gMjsKKwlwb3J0LT5saW5lID0gcGRldi0+aWQ7CiAJY2xrX3B1dChjbGspOwogCiAJcmV0ID0gdWFydF9hZGRfb25lX3BvcnQoJmJjbV91YXJ0X2RyaXZlciwgcG9ydCk7CiAJaWYgKHJldCkgewotCQlrZnJlZShwb3J0KTsKKwkJcG9ydHNbcGRldi0+aWRdLm1lbWJhc2UgPSAwOwogCQlyZXR1cm4gcmV0OwogCX0KIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBwb3J0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMgYi9kcml2ZXJzL3NlcmlhbC9iZmluXzV4eC5jCmluZGV4IDUwYWJiN2UuLmZjZjI3M2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvYmZpbl81eHguYwpAQCAtMTQsNiArMTQsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+CkBAIC0yMzcsNyArMjM4LDggQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0tHREJfU0VSSUFMX0NPTlNPTEUpIHx8IFwKIAlkZWZpbmVkKENPTkZJR19LR0RCX1NFUklBTF9DT05TT0xFX01PRFVMRSkKLQlpZiAoa2dkYl9jb25uZWN0ZWQgJiYga2dkYm9jX3BvcnRfbGluZSA9PSB1YXJ0LT5wb3J0LmxpbmUpCisJaWYgKGtnZGJfY29ubmVjdGVkICYmIGtnZGJvY19wb3J0X2xpbmUgPT0gdWFydC0+cG9ydC5saW5lCisJCSYmIGtnZGJvY19icmVha19lbmFibGVkKQogCQlpZiAoY2ggPT0gMHgzKSB7LyogQ3RybCArIEMgKi8KIAkJCWtnZGJfYnJlYWtwb2ludCgpOwogCQkJcmV0dXJuOwpAQCAtNDg4LDYgKzQ5MCw3IEBACiB7CiAJaW50IHhfcG9zLCBwb3M7CiAKKwlkbWFfZGlzYWJsZV9pcnEodWFydC0+dHhfZG1hX2NoYW5uZWwpOwogCWRtYV9kaXNhYmxlX2lycSh1YXJ0LT5yeF9kbWFfY2hhbm5lbCk7CiAJc3Bpbl9sb2NrX2JoKCZ1YXJ0LT5wb3J0LmxvY2spOwogCkBAIC01MjEsNiArNTI0LDcgQEAKIAl9CiAKIAlzcGluX3VubG9ja19iaCgmdWFydC0+cG9ydC5sb2NrKTsKKwlkbWFfZW5hYmxlX2lycSh1YXJ0LT50eF9kbWFfY2hhbm5lbCk7CiAJZG1hX2VuYWJsZV9pcnEodWFydC0+cnhfZG1hX2NoYW5uZWwpOwogCiAJbW9kX3RpbWVyKCYodWFydC0+cnhfZG1hX3RpbWVyKSwgamlmZmllcyArIERNQV9SWF9GTFVTSF9KSUZGSUVTKTsKQEAgLTc0NiwxNSArNzUwLDYgQEAKIAkJCVN0YXR1cyBpbnRlcnJ1cHQuXG4iKTsKIAl9CiAKLQlpZiAodWFydC0+Y3RzX3BpbiA+PSAwKSB7Ci0JCWdwaW9fcmVxdWVzdCh1YXJ0LT5jdHNfcGluLCBEUklWRVJfTkFNRSk7Ci0JCWdwaW9fZGlyZWN0aW9uX291dHB1dCh1YXJ0LT5jdHNfcGluLCAxKTsKLQl9Ci0JaWYgKHVhcnQtPnJ0c19waW4gPj0gMCkgewotCQlncGlvX3JlcXVlc3QodWFydC0+cnRzX3BpbiwgRFJJVkVSX05BTUUpOwotCQlncGlvX2RpcmVjdGlvbl9vdXRwdXQodWFydC0+cnRzX3BpbiwgMCk7Ci0JfQotCiAJLyogQ1RTIFJUUyBQSU5zIGFyZSBuZWdhdGl2ZSBhc3NlcnRpdmUuICovCiAJVUFSVF9QVVRfTUNSKHVhcnQsIEFDVFMpOwogCVVBUlRfU0VUX0lFUih1YXJ0LCBFRFNTSSk7CkBAIC04MDEsMTAgKzc5Niw2IEBACiAJCWdwaW9fZnJlZSh1YXJ0LT5ydHNfcGluKTsKICNlbmRpZgogI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9IQVJEX0NUU1JUUwotCWlmICh1YXJ0LT5jdHNfcGluID49IDApCi0JCWdwaW9fZnJlZSh1YXJ0LT5jdHNfcGluKTsKLQlpZiAodWFydC0+cnRzX3BpbiA+PSAwKQotCQlncGlvX2ZyZWUodWFydC0+cnRzX3Bpbik7CiAJaWYgKFVBUlRfR0VUX0lFUih1YXJ0KSAmJiBFRFNTSSkKIAkJZnJlZV9pcnEodWFydC0+c3RhdHVzX2lycSwgdWFydCk7CiAjZW5kaWYKQEAgLTE0MDksOCArMTQwMCw3IEBACiAJCQljb250aW51ZTsKIAkJdWFydF9yZW1vdmVfb25lX3BvcnQoJmJmaW5fc2VyaWFsX3JlZywgJmJmaW5fc2VyaWFsX3BvcnRzW2ldLnBvcnQpOwogCQliZmluX3NlcmlhbF9wb3J0c1tpXS5wb3J0LmRldiA9IE5VTEw7Ci0jaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fSEFSRF9DVFNSVFMpCisjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX0JGSU5fQ1RTUlRTKQogCQlncGlvX2ZyZWUoYmZpbl9zZXJpYWxfcG9ydHNbaV0uY3RzX3Bpbik7CiAJCWdwaW9fZnJlZShiZmluX3NlcmlhbF9wb3J0c1tpXS5ydHNfcGluKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvYmZpbl9zcG9ydF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9iZmluX3Nwb3J0X3VhcnQuYwppbmRleCAwODhiYjM1Li43YzcyODg4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9iZmluX3Nwb3J0X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9iZmluX3Nwb3J0X3VhcnQuYwpAQCAtMSwyNyArMSwxMSBAQAogLyoKLSAqIEZpbGU6CWxpbnV4L2RyaXZlcnMvc2VyaWFsL2JmaW5fc3BvcnRfdWFydC5jCisgKiBCbGFja2ZpbiBPbi1DaGlwIFNwb3J0IEVtdWxhdGVkIFVBUlQgRHJpdmVyCiAgKgotICogQmFzZWQgb246CWRyaXZlcnMvc2VyaWFsL2JmaW5fNXh4LmMgYnkgQXVicmV5IExpLgotICogQXV0aG9yOglSb3kgSHVhbmcgPHJveS5odWFuZ0BhbmFsb2cuY29tPgorICogQ29weXJpZ2h0IDIwMDYtMjAwOSBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoJTm92IDIyLCAyMDA2Ci0gKiBDb3B5cmlnaHQ6CShjKSAyMDA2LTIwMDcgQW5hbG9nIERldmljZXMgSW5jLgotICogRGVzY3JpcHRpb246IHRoaXMgZHJpdmVyIGVuYWJsZSBTUE9SVHMgb24gQmxhY2tmaW4gZW11bGF0ZSBVQVJULgorICogRW50ZXIgYnVncyBhdCBodHRwOi8vYmxhY2tmaW4udWNsaW51eC5vcmcvCiAgKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgdGhlIGZpbGUgQ09QWUlORywgb3Igd3JpdGUKLSAqIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTC0yIG9yIGxhdGVyLgogICovCiAKIC8qCkBAIC0yOSwzOSArMTMsMTggQEAKICAqIGh0dHA6Ly93d3cuYW5hbG9nLmNvbS9VcGxvYWRlZEZpbGVzL0FwcGxpY2F0aW9uX05vdGVzLzM5OTQ0NzY2M0VFMTkxLnBkZgogICogVGhpcyBhcHBsaWNhdGlvbiBub3RlIGRlc2NyaWJlIGhvdyB0byBpbXBsZW1lbnQgYSBVQVJUIG9uIGEgU2hhcmMgRFNQLAogICogYnV0IHRoaXMgZHJpdmVyIGlzIGltcGxlbWVudGVkIG9uIEJsYWNrZmluIFByb2Nlc3Nvci4KKyAqIFRyYW5zbWl0IEZyYW1lIFN5bmMgaXMgbm90IHVzZWQgYnkgdGhpcyBkcml2ZXIgdG8gdHJhbnNmZXIgZGF0YSBvdXQuCiAgKi8KIAotLyogQWZ0ZXIgcmVzZXQsIHRoZXJlIGlzIGEgcHJlbHVkZSBvZiBsb3cgbGV2ZWwgcHVsc2Ugd2hlbiB0cmFuc21pdCBkYXRhIGZpcnN0Ci0gKiB0aW1lLiBObyBhZGR0aW9uYWwgcHVsc2UgaW4gZm9sbG93aW5nIHRyYW5zbWl0LgotICogQWNjb3JkaW5nIHRvIGRvY3VtZW50OgotICogVGhlIFNQT1JUcyBhcmUgcmVhZHkgdG8gc3RhcnQgdHJhbnNtaXR0aW5nIG9yIHJlY2VpdmluZyBkYXRhIG5vIGxhdGVyIHRoYW4KLSAqIHRocmVlIHNlcmlhbCBjbG9jayBjeWNsZXMgYWZ0ZXIgdGhleSBhcmUgZW5hYmxlZCBpbiB0aGUgU1BPUlR4X1RDUjEgb3IKLSAqIFNQT1JUeF9SQ1IxIHJlZ2lzdGVyLiBObyBzZXJpYWwgY2xvY2sgY3ljbGVzIGFyZSBsb3N0IGZyb20gdGhpcyBwb2ludCBvbi4KLSAqIFRoZSBmaXJzdCBpbnRlcm5hbCBmcmFtZSBzeW5jIHdpbGwgb2NjdXIgb25lIGZyYW1lIHN5bmMgZGVsYXkgYWZ0ZXIgdGhlCi0gKiBTUE9SVHMgYXJlIHJlYWR5LiBFeHRlcm5hbCBmcmFtZSBzeW5jcyBjYW4gb2NjdXIgYXMgc29vbiBhcyB0aGUgU1BPUlQgaXMKLSAqIHJlYWR5LgotICovCisvKiAjZGVmaW5lIERFQlVHICovCiAKLS8qIFRoYW5rcyB0byBBeGVsIEFsYXRhbG8gPGF4ZWxAcnViaWNvLnNlPiBmb3IgZml4aW5nIHNwb3J0IHJ4IGJ1Zy4gU29tZXRpbWVzCi0gKiBzcG9ydCByZWNlaXZlcyBkYXRhIGluY29ycmVjdGx5LiBUaGUgZm9sbG93aW5nIGlzIEF4ZWwncyB3b3Jkcy4KLSAqIEFzIEVFLTE5MSwgc3BvcnQgcnggc2FtcGxlcyAzIHRpbWVzIG9mIHRoZSBVQVJUIGJhdWRyYXRlIGFuZCB0YWtlcyB0aGUKLSAqIG1pZGRsZSBzbWFwbGUgb2YgZXZlcnkgMyBzYW1wbGVzIGFzIHRoZSBkYXRhIGJpdC4gRm9yIGEgOC1OLTEgVUFSVCBzZXR0aW5nLAotICogMzAgc2FtcGxlcyB3aWxsIGJlIHJlcXVpcmVkIGZvciBhIGJ5dGUuIElmIHRyYW5zbWl0dGVyIHNlbmRzIGEgMS8zIGJpdCBzaG9ydAotICogYnl0ZSBkdWUgdG8gYnVhZHJhdGUgZHJpZnQsIHRoZW4gdGhlIDMwdGggc2FtcGxlIG9mIGEgYnl0ZSwgdGhpcyBzYW1wbGUgaXMKLSAqIGFsc28gdGhlIHRoaXJkIHNhbXBsZSBvZiB0aGUgc3RvcCBiaXQsIHdpbGwgaGFwcGVucyBvbiB0aGUgaW1tZWRpYXRlbHkKLSAqIGZvbGxvd2luZyBzdGFydCBiaXQgd2hpY2ggd2lsbCBiZSB0aHJvd24gYXdheSBhbmQgbWlzc2VkLiBUaHVzIHNpbmNlIHBhcnRzCi0gKiBvZiB0aGUgc3RhcnRiaXQgd2lsbCBiZSBtaXNzZWQgYW5kIHRoZSByZWNlaXZlciB3aWxsIGJlZ2luIHRvIGRyaWZ0LCB0aGUKLSAqIGVmZmVjdCBhY2N1bXVsYXRlcyBvdmVyIHRpbWUgdW50aWwgc3luY2hyb25pemF0aW9uIGlzIGxvc3QuCi0gKiBJZiBvbmx5IHJlcXVpcmUgMiBzYW1wbGVzIG9mIHRoZSBzdG9wYml0IChieSBzYW1wbGluZyBpbiB0b3RhbCAyOSBzYW1wbGVzKSwKLSAqIHRoZW4gYSB0byBzaG9ydCBieXRlIGFzIGluIHRoZSBjYXNlIGFib3ZlIHdpbGwgYmUgdG9sZXJhdGVkLiBUaGVuIHRoZSAxLzMKLSAqIGVhcmx5IHN0YXJ0Yml0IHdpbGwgdHJpZ2dlciBhIGZyYW1lc3luYyBzaW5jZSB0aGUgbGFzdCByZWFkIGlzIGNvbXBsZXRlCi0gKiBhZnRlciBvbmx5IDIvMyBzdG9wYml0IGFuZCBmcmFtZXN5bmMgaXMgYWN0aXZlIGR1cmluZyB0aGUgbGFzdCAxLzMgbG9va2luZwotICogZm9yIGEgcG9zc2libGUgZWFybHkgc3RhcnRiaXQuICovCi0KLS8vI2RlZmluZSBERUJVRworI2RlZmluZSBEUlZfTkFNRSAiYmZpbi1zcG9ydC11YXJ0IgorI2RlZmluZSBERVZJQ0VfTkFNRQkidHR5U1MiCisjZGVmaW5lIHByX2ZtdChmbXQpIERSVl9OQU1FICI6ICIgZm10CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KQEAgLTc1LDIzICszOCwzNiBAQAogCiAjaW5jbHVkZSAiYmZpbl9zcG9ydF91YXJ0LmgiCiAKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQwX1VBUlQKIHVuc2lnbmVkIHNob3J0IGJmaW5fdWFydF9waW5fcmVxX3Nwb3J0MFtdID0KIAl7UF9TUE9SVDBfVEZTLCBQX1NQT1JUMF9EVFBSSSwgUF9TUE9SVDBfVFNDTEssIFBfU1BPUlQwX1JGUywgXAogCSBQX1NQT1JUMF9EUlBSSSwgUF9TUE9SVDBfUlNDTEssIFBfU1BPUlQwX0RSU0VDLCBQX1NQT1JUMF9EVFNFQywgMH07Ci0KKyNlbmRpZgorI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVDFfVUFSVAogdW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0X3Bpbl9yZXFfc3BvcnQxW10gPQogCXtQX1NQT1JUMV9URlMsIFBfU1BPUlQxX0RUUFJJLCBQX1NQT1JUMV9UU0NMSywgUF9TUE9SVDFfUkZTLCBcCiAJUF9TUE9SVDFfRFJQUkksIFBfU1BPUlQxX1JTQ0xLLCBQX1NQT1JUMV9EUlNFQywgUF9TUE9SVDFfRFRTRUMsIDB9OwotCi0jZGVmaW5lIERSVl9OQU1FICJiZmluLXNwb3J0LXVhcnQiCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlQyX1VBUlQKK3Vuc2lnbmVkIHNob3J0IGJmaW5fdWFydF9waW5fcmVxX3Nwb3J0MltdID0KKwl7UF9TUE9SVDJfVEZTLCBQX1NQT1JUMl9EVFBSSSwgUF9TUE9SVDJfVFNDTEssIFBfU1BPUlQyX1JGUywgXAorCVBfU1BPUlQyX0RSUFJJLCBQX1NQT1JUMl9SU0NMSywgUF9TUE9SVDJfRFJTRUMsIFBfU1BPUlQyX0RUU0VDLCAwfTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19TRVJJQUxfQkZJTl9TUE9SVDNfVUFSVAordW5zaWduZWQgc2hvcnQgYmZpbl91YXJ0X3Bpbl9yZXFfc3BvcnQzW10gPQorCXtQX1NQT1JUM19URlMsIFBfU1BPUlQzX0RUUFJJLCBQX1NQT1JUM19UU0NMSywgUF9TUE9SVDNfUkZTLCBcCisJUF9TUE9SVDNfRFJQUkksIFBfU1BPUlQzX1JTQ0xLLCBQX1NQT1JUM19EUlNFQywgUF9TUE9SVDNfRFRTRUMsIDB9OworI2VuZGlmCiAKIHN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgewogCXN0cnVjdCB1YXJ0X3BvcnQJcG9ydDsKLQljaGFyCQkJKm5hbWU7Ci0KLQlpbnQJCQl0eF9pcnE7Ci0JaW50CQkJcnhfaXJxOwogCWludAkJCWVycl9pcnE7CisJdW5zaWduZWQgc2hvcnQJCWNzaXplOworCXVuc2lnbmVkIHNob3J0CQlyeG1hc2s7CisJdW5zaWduZWQgc2hvcnQJCXR4bWFzazE7CisJdW5zaWduZWQgc2hvcnQJCXR4bWFzazI7CisJdW5zaWduZWQgY2hhcgkJc3RvcGI7CisvKgl1bnNpZ25lZCBjaGFyCQlwYXJpYjsgKi8KIH07CiAKIHN0YXRpYyB2b2lkIHNwb3J0X3VhcnRfdHhfY2hhcnMoc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqdXApOwpAQCAtOTksMzYgKzc1LDQyIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCB0eF9vbmVfYnl0ZShzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0ICp1cCwgdW5zaWduZWQgaW50IHZhbHVlKQogewotCXByX2RlYnVnKCIlcyB2YWx1ZToleFxuIiwgX19mdW5jX18sIHZhbHVlKTsKLQkvKiBQbGFjZSBhIFN0YXJ0IGFuZCBTdG9wIGJpdCAqLworCXByX2RlYnVnKCIlcyB2YWx1ZToleCwgbWFzazE9MHgleCwgbWFzazI9MHgleFxuIiwgX19mdW5jX18sIHZhbHVlLAorCQl1cC0+dHhtYXNrMSwgdXAtPnR4bWFzazIpOworCisJLyogUGxhY2UgU3RhcnQgYW5kIFN0b3AgYml0cyAqLwogCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIlIyID0gYiMwMTExMTExMTEwMDsiCi0JCSJSMyA9IGIjMTAwMDAwMDAwMDE7IgotCQkiJTAgPDw9IDI7IgotCQkiJTAgPSAlMCAmIFIyOyIKLQkJIiUwID0gJTAgfCBSMzsiCi0JCTogIj1kIih2YWx1ZSkKLQkJOiAiZCIodmFsdWUpCi0JCTogIkFTVEFUIiwgIlIyIiwgIlIzIgorCQkiJVt2YWxdIDw8PSAxOyIKKwkJIiVbdmFsXSA9ICVbdmFsXSAmICVbbWFzazFdOyIKKwkJIiVbdmFsXSA9ICVbdmFsXSB8ICVbbWFzazJdOyIKKwkJOiBbdmFsXSIrZCIodmFsdWUpCisJCTogW21hc2sxXSJkIih1cC0+dHhtYXNrMSksIFttYXNrMl0iZCIodXAtPnR4bWFzazIpCisJCTogIkFTVEFUIgogCSk7CiAJcHJfZGVidWcoIiVzIHZhbHVlOiV4XG4iLCBfX2Z1bmNfXywgdmFsdWUpOwogCiAJU1BPUlRfUFVUX1RYKHVwLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJ4X29uZV9ieXRlKHN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnVwKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIHJ4X29uZV9ieXRlKHN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnVwKQogewotCXVuc2lnbmVkIGludCB2YWx1ZSwgZXh0cmFjdDsKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisJdW5zaWduZWQgY2hhciBleHRyYWN0OwogCXUzMiB0bXBfbWFzazEsIHRtcF9tYXNrMiwgdG1wX3NoaWZ0LCB0bXA7CiAKLQl2YWx1ZSA9IFNQT1JUX0dFVF9SWDMyKHVwKTsKLQlwcl9kZWJ1ZygiJXMgdmFsdWU6JXhcbiIsIF9fZnVuY19fLCB2YWx1ZSk7CisJaWYgKCh1cC0+Y3NpemUgKyB1cC0+c3RvcGIpID4gNykKKwkJdmFsdWUgPSBTUE9SVF9HRVRfUlgzMih1cCk7CisJZWxzZQorCQl2YWx1ZSA9IFNQT1JUX0dFVF9SWCh1cCk7CiAKLQkvKiBFeHRyYWN0IDggYml0cyBkYXRhICovCisJcHJfZGVidWcoIiVzIHZhbHVlOiV4LCBjcz0lZCwgbWFzaz0weCV4XG4iLCBfX2Z1bmNfXywgdmFsdWUsCisJCXVwLT5jc2l6ZSwgdXAtPnJ4bWFzayk7CisKKwkvKiBFeHRyYWN0IGRhdGEgKi8KIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAJCSIlW2V4dHJdID0gMDsiCi0JCSIlW21hc2sxXSA9IDB4MTgwMShaKTsiCi0JCSIlW21hc2syXSA9IDB4MDMwMChaKTsiCisJCSIlW21hc2sxXSA9ICVbcnhtYXNrXTsiCisJCSIlW21hc2syXSA9IDB4MDIwMChaKTsiCiAJCSIlW3NoaWZ0XSA9IDA7IgogCQkiTFNFVFVQKC5MbG9vcF9zLCAuTGxvb3BfZSkgTEMwID0gJVtsY107IgogCQkiLkxsb29wX3M6IgpAQCAtMTM4LDkgKzEyMCw5IEBACiAJCSIlW21hc2sxXSA9ICVbbWFzazFdIC0gJVttYXNrMl07IgogCQkiLkxsb29wX2U6IgogCQkiJVtzaGlmdF0gKz0gMTsiCi0JCTogW3ZhbF0iPWQiKHZhbHVlKSwgW2V4dHJdIj1kIihleHRyYWN0KSwgW3NoaWZ0XSI9ZCIodG1wX3NoaWZ0KSwgW3RtcF0iPWQiKHRtcCksCi0JCSAgW21hc2sxXSI9ZCIodG1wX21hc2sxKSwgW21hc2syXSI9ZCIodG1wX21hc2syKQotCQk6ICJkIih2YWx1ZSksIFtsY10iYSIoOCkKKwkJOiBbZXh0cl0iPSZkIihleHRyYWN0KSwgW3NoaWZ0XSI9JmQiKHRtcF9zaGlmdCksIFt0bXBdIj0mZCIodG1wKSwKKwkJICBbbWFzazFdIj0mZCIodG1wX21hc2sxKSwgW21hc2syXSI9JmQiKHRtcF9tYXNrMikKKwkJOiBbdmFsXSJkIih2YWx1ZSksIFtyeG1hc2tdImQiKHVwLT5yeG1hc2spLCBbbGNdImEiKHVwLT5jc2l6ZSkKIAkJOiAiQVNUQVQiLCAiTEIwIiwgIkxDMCIsICJMVDAiCiAJKTsKIApAQCAtMTQ4LDI5ICsxMzAsMjggQEAKIAlyZXR1cm4gZXh0cmFjdDsKIH0KIAotc3RhdGljIGludCBzcG9ydF91YXJ0X3NldHVwKHN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnVwLCBpbnQgc2NsaywgaW50IGJhdWRfcmF0ZSkKK3N0YXRpYyBpbnQgc3BvcnRfdWFydF9zZXR1cChzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0ICp1cCwgaW50IHNpemUsIGludCBiYXVkX3JhdGUpCiB7Ci0JaW50IHRjbGtkaXYsIHRmc2RpdiwgcmNsa2RpdjsKKwlpbnQgdGNsa2RpdiwgcmNsa2RpdjsKKwl1bnNpZ25lZCBpbnQgc2NsayA9IGdldF9zY2xrKCk7CiAKLQkvKiBTZXQgVENSMSBhbmQgVENSMiAqLwotCVNQT1JUX1BVVF9UQ1IxKHVwLCAoTEFURlMgfCBJVEZTIHwgVEZTUiB8IFRMU0JJVCB8IElUQ0xLKSk7Ci0JU1BPUlRfUFVUX1RDUjIodXAsIDEwKTsKKwkvKiBTZXQgVENSMSBhbmQgVENSMiwgVEZTUiBpcyBub3QgZW5hYmxlZCBmb3IgdWFydCAqLworCVNQT1JUX1BVVF9UQ1IxKHVwLCAoSVRGUyB8IFRMU0JJVCB8IElUQ0xLKSk7CisJU1BPUlRfUFVUX1RDUjIodXAsIHNpemUgKyAxKTsKIAlwcl9kZWJ1ZygiJXMgVENSMToleCwgVENSMjoleFxuIiwgX19mdW5jX18sIFNQT1JUX0dFVF9UQ1IxKHVwKSwgU1BPUlRfR0VUX1RDUjIodXApKTsKIAogCS8qIFNldCBSQ1IxIGFuZCBSQ1IyICovCiAJU1BPUlRfUFVUX1JDUjEodXAsIChSQ0tGRSB8IExBUkZTIHwgTFJGUyB8IFJGU1IgfCBJUkNMSykpOwotCVNQT1JUX1BVVF9SQ1IyKHVwLCAyOCk7CisJU1BPUlRfUFVUX1JDUjIodXAsIChzaXplICsgMSkgKiAyIC0gMSk7CiAJcHJfZGVidWcoIiVzIFJDUjE6JXgsIFJDUjI6JXhcbiIsIF9fZnVuY19fLCBTUE9SVF9HRVRfUkNSMSh1cCksIFNQT1JUX0dFVF9SQ1IyKHVwKSk7CiAKLQl0Y2xrZGl2ID0gc2Nsay8oMiAqIGJhdWRfcmF0ZSkgLSAxOwotCXRmc2RpdiA9IDEyOwotCXJjbGtkaXYgPSBzY2xrLygyICogYmF1ZF9yYXRlICogMykgLSAxOworCXRjbGtkaXYgPSBzY2xrIC8gKDIgKiBiYXVkX3JhdGUpIC0gMTsKKwlyY2xrZGl2ID0gc2NsayAvICgyICogYmF1ZF9yYXRlICogMikgLSAxOwogCVNQT1JUX1BVVF9UQ0xLRElWKHVwLCB0Y2xrZGl2KTsKLQlTUE9SVF9QVVRfVEZTRElWKHVwLCB0ZnNkaXYpOwogCVNQT1JUX1BVVF9SQ0xLRElWKHVwLCByY2xrZGl2KTsKIAlTU1lOQygpOwotCXByX2RlYnVnKCIlcyBzY2xrOiVkLCBiYXVkX3JhdGU6JWQsIHRjbGtkaXY6JWQsIHRmc2RpdjolZCwgcmNsa2RpdjolZFxuIiwKLQkJCV9fZnVuY19fLCBzY2xrLCBiYXVkX3JhdGUsIHRjbGtkaXYsIHRmc2RpdiwgcmNsa2Rpdik7CisJcHJfZGVidWcoIiVzIHNjbGs6JWQsIGJhdWRfcmF0ZTolZCwgdGNsa2RpdjolZCwgcmNsa2RpdjolZFxuIiwKKwkJCV9fZnVuY19fLCBzY2xrLCBiYXVkX3JhdGUsIHRjbGtkaXYsIHJjbGtkaXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xODEsMjMgKzE2MiwyOSBAQAogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSB1cC0+cG9ydC5zdGF0ZS0+cG9ydC50dHk7CiAJdW5zaWduZWQgaW50IGNoOwogCi0JZG8geworCXNwaW5fbG9jaygmdXAtPnBvcnQubG9jayk7CisKKwl3aGlsZSAoU1BPUlRfR0VUX1NUQVQodXApICYgUlhORSkgewogCQljaCA9IHJ4X29uZV9ieXRlKHVwKTsKIAkJdXAtPnBvcnQuaWNvdW50LnJ4Kys7CiAKLQkJaWYgKHVhcnRfaGFuZGxlX3N5c3JxX2NoYXIoJnVwLT5wb3J0LCBjaCkpCi0JCQk7Ci0JCWVsc2UKKwkJaWYgKCF1YXJ0X2hhbmRsZV9zeXNycV9jaGFyKCZ1cC0+cG9ydCwgY2gpKQogCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBjaCwgVFRZX05PUk1BTCk7Ci0JfSB3aGlsZSAoU1BPUlRfR0VUX1NUQVQodXApICYgUlhORSk7CisJfQogCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAKKwlzcGluX3VubG9jaygmdXAtPnBvcnQubG9jayk7CisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzcG9ydF91YXJ0X3R4X2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7Ci0Jc3BvcnRfdWFydF90eF9jaGFycyhkZXZfaWQpOworCXN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnVwID0gZGV2X2lkOworCisJc3Bpbl9sb2NrKCZ1cC0+cG9ydC5sb2NrKTsKKwlzcG9ydF91YXJ0X3R4X2NoYXJzKHVwKTsKKwlzcGluX3VubG9jaygmdXAtPnBvcnQubG9jayk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC0yMDgsNiArMTk1LDggQEAKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gdXAtPnBvcnQuc3RhdGUtPnBvcnQudHR5OwogCXVuc2lnbmVkIGludCBzdGF0ID0gU1BPUlRfR0VUX1NUQVQodXApOwogCisJc3Bpbl9sb2NrKCZ1cC0+cG9ydC5sb2NrKTsKKwogCS8qIE92ZXJmbG93IGluIFJYIEZJRk8gKi8KIAlpZiAoc3RhdCAmIFJPVkYpIHsKIAkJdXAtPnBvcnQuaWNvdW50Lm92ZXJydW4rKzsKQEAgLTIxNiwxNSArMjA1LDE2IEBACiAJfQogCS8qIFRoZXNlIHNob3VsZCBub3QgaGFwcGVuICovCiAJaWYgKHN0YXQgJiAoVE9WRiB8IFRVVkYgfCBSVVZGKSkgewotCQlwcmludGsoS0VSTl9FUlIgIlNQT1JUIEVycm9yOiVzICVzICVzXG4iLAotCQkJCShzdGF0ICYgVE9WRik/IlRYIG92ZXJmbG93IjoiIiwKLQkJCQkoc3RhdCAmIFRVVkYpPyJUWCB1bmRlcmZsb3ciOiIiLAotCQkJCShzdGF0ICYgUlVWRik/IlJYIHVuZGVyZmxvdyI6IiIpOworCQlwcl9lcnIoIlNQT1JUIEVycm9yOiVzICVzICVzXG4iLAorCQkgICAgICAgKHN0YXQgJiBUT1ZGKSA/ICJUWCBvdmVyZmxvdyIgOiAiIiwKKwkJICAgICAgIChzdGF0ICYgVFVWRikgPyAiVFggdW5kZXJmbG93IiA6ICIiLAorCQkgICAgICAgKHN0YXQgJiBSVVZGKSA/ICJSWCB1bmRlcmZsb3ciIDogIiIpOwogCQlTUE9SVF9QVVRfVENSMSh1cCwgU1BPUlRfR0VUX1RDUjEodXApICYgflRTUEVOKTsKIAkJU1BPUlRfUFVUX1JDUjEodXAsIFNQT1JUX0dFVF9SQ1IxKHVwKSAmIH5SU1BFTik7CiAJfQogCVNTWU5DKCk7CiAKKwlzcGluX3VubG9jaygmdXAtPnBvcnQubG9jayk7CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0yMzIsNjAgKzIyMiwzNyBAQAogc3RhdGljIGludCBzcG9ydF9zdGFydHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqdXAgPSAoc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqKXBvcnQ7Ci0JY2hhciBidWZmZXJbMjBdOwotCWludCByZXR2YWw7CisJaW50IHJldDsKIAogCXByX2RlYnVnKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOwotCXNucHJpbnRmKGJ1ZmZlciwgMjAsICIlcyByeCIsIHVwLT5uYW1lKTsKLQlyZXR2YWwgPSByZXF1ZXN0X2lycSh1cC0+cnhfaXJxLCBzcG9ydF91YXJ0X3J4X2lycSwgSVJRRl9TQU1QTEVfUkFORE9NLCBidWZmZXIsIHVwKTsKLQlpZiAocmV0dmFsKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlcXVlc3QgaW50ZXJydXB0ICVzXG4iLCBidWZmZXIpOwotCQlyZXR1cm4gcmV0dmFsOworCXJldCA9IHJlcXVlc3RfaXJxKHVwLT5wb3J0LmlycSwgc3BvcnRfdWFydF9yeF9pcnEsIDAsCisJCSJTUE9SVF9VQVJUX1JYIiwgdXApOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihwb3J0LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBTUE9SVCBSWCBpbnRlcnJ1cHRcbiIpOworCQlyZXR1cm4gcmV0OwogCX0KIAotCXNucHJpbnRmKGJ1ZmZlciwgMjAsICIlcyB0eCIsIHVwLT5uYW1lKTsKLQlyZXR2YWwgPSByZXF1ZXN0X2lycSh1cC0+dHhfaXJxLCBzcG9ydF91YXJ0X3R4X2lycSwgSVJRRl9TQU1QTEVfUkFORE9NLCBidWZmZXIsIHVwKTsKLQlpZiAocmV0dmFsKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlcXVlc3QgaW50ZXJydXB0ICVzXG4iLCBidWZmZXIpOworCXJldCA9IHJlcXVlc3RfaXJxKHVwLT5wb3J0LmlycSsxLCBzcG9ydF91YXJ0X3R4X2lycSwgMCwKKwkJIlNQT1JUX1VBUlRfVFgiLCB1cCk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHBvcnQtPmRldiwgInVuYWJsZSB0byByZXF1ZXN0IFNQT1JUIFRYIGludGVycnVwdFxuIik7CiAJCWdvdG8gZmFpbDE7CiAJfQogCi0Jc25wcmludGYoYnVmZmVyLCAyMCwgIiVzIGVyciIsIHVwLT5uYW1lKTsKLQlyZXR2YWwgPSByZXF1ZXN0X2lycSh1cC0+ZXJyX2lycSwgc3BvcnRfdWFydF9lcnJfaXJxLCBJUlFGX1NBTVBMRV9SQU5ET00sIGJ1ZmZlciwgdXApOwotCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVxdWVzdCBpbnRlcnJ1cHQgJXNcbiIsIGJ1ZmZlcik7CisJcmV0ID0gcmVxdWVzdF9pcnEodXAtPmVycl9pcnEsIHNwb3J0X3VhcnRfZXJyX2lycSwgMCwKKwkJIlNQT1JUX1VBUlRfU1RBVFVTIiwgdXApOworCWlmIChyZXQpIHsKKwkJZGV2X2Vycihwb3J0LT5kZXYsICJ1bmFibGUgdG8gcmVxdWVzdCBTUE9SVCBzdGF0dXMgaW50ZXJydXB0XG4iKTsKIAkJZ290byBmYWlsMjsKIAl9CiAKLQlpZiAocG9ydC0+bGluZSkgewotCQlpZiAocGVyaXBoZXJhbF9yZXF1ZXN0X2xpc3QoYmZpbl91YXJ0X3Bpbl9yZXFfc3BvcnQxLCBEUlZfTkFNRSkpCi0JCQlnb3RvIGZhaWwzOwotCX0gZWxzZSB7Ci0JCWlmIChwZXJpcGhlcmFsX3JlcXVlc3RfbGlzdChiZmluX3VhcnRfcGluX3JlcV9zcG9ydDAsIERSVl9OQU1FKSkKLQkJCWdvdG8gZmFpbDM7Ci0JfQotCi0Jc3BvcnRfdWFydF9zZXR1cCh1cCwgZ2V0X3NjbGsoKSwgcG9ydC0+dWFydGNsayk7Ci0KLQkvKiBFbmFibGUgcmVjZWl2ZSBpbnRlcnJ1cHQgKi8KLQlTUE9SVF9QVVRfUkNSMSh1cCwgKFNQT1JUX0dFVF9SQ1IxKHVwKSB8IFJTUEVOKSk7Ci0JU1NZTkMoKTsKLQogCXJldHVybiAwOworIGZhaWwyOgorCWZyZWVfaXJxKHVwLT5wb3J0LmlycSsxLCB1cCk7CisgZmFpbDE6CisJZnJlZV9pcnEodXAtPnBvcnQuaXJxLCB1cCk7CiAKLQotZmFpbDM6Ci0JcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCi0JCSI6IFJlcXVlc3RpbmcgUGVyaXBoZXJhbHMgZmFpbGVkXG4iKTsKLQotCWZyZWVfaXJxKHVwLT5lcnJfaXJxLCB1cCk7Ci1mYWlsMjoKLQlmcmVlX2lycSh1cC0+dHhfaXJxLCB1cCk7Ci1mYWlsMToKLQlmcmVlX2lycSh1cC0+cnhfaXJxLCB1cCk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgc3BvcnRfdWFydF90eF9jaGFycyhzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0ICp1cCkKQEAgLTM0NCwyMCArMzExLDE3IEBACiBzdGF0aWMgdm9pZCBzcG9ydF9zdG9wX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqdXAgPSAoc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqKXBvcnQ7Ci0JdW5zaWduZWQgaW50IHN0YXQ7CiAKIAlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKIAotCXN0YXQgPSBTUE9SVF9HRVRfU1RBVCh1cCk7Ci0Jd2hpbGUoIShzdGF0ICYgVFhIUkUpKSB7Ci0JCXVkZWxheSgxKTsKLQkJc3RhdCA9IFNQT1JUX0dFVF9TVEFUKHVwKTsKLQl9CiAJLyogQWx0aG91Z2ggdGhlIGhvbGQgcmVnaXN0ZXIgaXMgZW1wdHksIGxhc3QgYnl0ZSBpcyBzdGlsbCBpbiBzaGlmdAotCSAqIHJlZ2lzdGVyIGFuZCBub3Qgc2VudCBvdXQgeWV0LiBJZiBiYXVkIHJhdGUgaXMgbG93ZXIgdGhhbiBkZWZhdWx0LAotCSAqIGRlbGF5IHNob3VsZCBiZSBsb25nZXIuIEZvciBleGFtcGxlLCBpZiB0aGUgYmF1ZCByYXRlIGlzIDk2MDAsCi0JICogdGhlIGRlbGF5IG11c3QgYmUgYXQgbGVhc3QgMm1zIGJ5IGV4cGVyaWVuY2UgKi8KLQl1ZGVsYXkoNTAwKTsKKwkgKiByZWdpc3RlciBhbmQgbm90IHNlbnQgb3V0IHlldC4gU28sIHB1dCBhIGR1bW15IGRhdGEgaW50byBUWCBGSUZPLgorCSAqIFRoZW4sIHNwb3J0IHR4IHN0b3BzIHdoZW4gbGFzdCBieXRlIGlzIHNoaWZ0IG91dCBhbmQgdGhlIGR1bW15CisJICogZGF0YSBpcyBtb3ZlZCBpbnRvIHRoZSBzaGlmdCByZWdpc3Rlci4KKwkgKi8KKwlTUE9SVF9QVVRfVFgodXAsIDB4ZmZmZik7CisJd2hpbGUgKCEoU1BPUlRfR0VUX1NUQVQodXApICYgVFhIUkUpKQorCQljcHVfcmVsYXgoKTsKIAogCVNQT1JUX1BVVF9UQ1IxKHVwLCAoU1BPUlRfR0VUX1RDUjEodXApICYgflRTUEVOKSk7CiAJU1NZTkMoKTsKQEAgLTM3MCw2ICszMzQsNyBAQAogCXN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnVwID0gKHN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKilwb3J0OwogCiAJcHJfZGVidWcoIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CisKIAkvKiBXcml0ZSBkYXRhIGludG8gU1BPUlQgRklGTyBiZWZvcmUgZW5hYmxlIFNQUk9UIHRvIHRyYW5zbWl0ICovCiAJc3BvcnRfdWFydF90eF9jaGFycyh1cCk7CiAKQEAgLTQwMywzNyArMzY4LDI0IEBACiB7CiAJc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqdXAgPSAoc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqKXBvcnQ7CiAKLQlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKHBvcnQtPmRldiwgIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CiAKIAkvKiBEaXNhYmxlIHNwb3J0ICovCiAJU1BPUlRfUFVUX1RDUjEodXAsIChTUE9SVF9HRVRfVENSMSh1cCkgJiB+VFNQRU4pKTsKIAlTUE9SVF9QVVRfUkNSMSh1cCwgKFNQT1JUX0dFVF9SQ1IxKHVwKSAmIH5SU1BFTikpOwogCVNTWU5DKCk7CiAKLQlpZiAocG9ydC0+bGluZSkgewotCQlwZXJpcGhlcmFsX2ZyZWVfbGlzdChiZmluX3VhcnRfcGluX3JlcV9zcG9ydDEpOwotCX0gZWxzZSB7Ci0JCXBlcmlwaGVyYWxfZnJlZV9saXN0KGJmaW5fdWFydF9waW5fcmVxX3Nwb3J0MCk7Ci0JfQotCi0JZnJlZV9pcnEodXAtPnJ4X2lycSwgdXApOwotCWZyZWVfaXJxKHVwLT50eF9pcnEsIHVwKTsKKwlmcmVlX2lycSh1cC0+cG9ydC5pcnEsIHVwKTsKKwlmcmVlX2lycSh1cC0+cG9ydC5pcnErMSwgdXApOwogCWZyZWVfaXJxKHVwLT5lcnJfaXJxLCB1cCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNwb3J0X3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCi0JCXN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywgc3RydWN0IGt0ZXJtaW9zICpvbGQpCi17Ci0JcHJfZGVidWcoIiVzIGVudGVyLCBjX2NmbGFnOiUwOHhcbiIsIF9fZnVuY19fLCB0ZXJtaW9zLT5jX2NmbGFnKTsKLQl1YXJ0X3VwZGF0ZV90aW1lb3V0KHBvcnQsIENTOCAscG9ydC0+dWFydGNsayk7Ci19Ci0KIHN0YXRpYyBjb25zdCBjaGFyICpzcG9ydF90eXBlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqdXAgPSAoc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqKXBvcnQ7CiAKIAlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKLQlyZXR1cm4gdXAtPm5hbWU7CisJcmV0dXJuIHVwLT5wb3J0LnR5cGUgPT0gUE9SVF9CRklOX1NQT1JUID8gIkJGSU4tU1BPUlQtVUFSVCIgOiBOVUxMOwogfQogCiBzdGF0aWMgdm9pZCBzcG9ydF9yZWxlYXNlX3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKQEAgLTQ2MSw2ICs0MTMsMTEwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHNwb3J0X3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsCisJCXN0cnVjdCBrdGVybWlvcyAqdGVybWlvcywgc3RydWN0IGt0ZXJtaW9zICpvbGQpCit7CisJc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqdXAgPSAoc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqKXBvcnQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKworCXByX2RlYnVnKCIlcyBlbnRlciwgY19jZmxhZzolMDh4XG4iLCBfX2Z1bmNfXywgdGVybWlvcy0+Y19jZmxhZyk7CisKKwlzd2l0Y2ggKHRlcm1pb3MtPmNfY2ZsYWcgJiBDU0laRSkgeworCWNhc2UgQ1M4OgorCQl1cC0+Y3NpemUgPSA4OworCQlicmVhazsKKwljYXNlIENTNzoKKwkJdXAtPmNzaXplID0gNzsKKwkJYnJlYWs7CisJY2FzZSBDUzY6CisJCXVwLT5jc2l6ZSA9IDY7CisJCWJyZWFrOworCWNhc2UgQ1M1OgorCQl1cC0+Y3NpemUgPSA1OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl93YXJuaW5nKCJyZXF1ZXN0ZWQgd29yZCBsZW5ndGggbm90IHN1cHBvcnRlZFxuIik7CisJfQorCisJaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBDU1RPUEIpIHsKKwkJdXAtPnN0b3BiID0gMTsKKwl9CisJaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBQQVJFTkIpIHsKKwkJcHJfd2FybmluZygiUEFSRU4gYml0cyBpcyBub3Qgc3VwcG9ydGVkIHlldFxuIik7CisJCS8qIHVwLT5wYXJpYiA9IDE7ICovCisJfQorCisJcG9ydC0+cmVhZF9zdGF0dXNfbWFzayA9IE9FOworCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSU5QQ0spCisJCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgfD0gKEZFIHwgUEUpOworCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgKEJSS0lOVCB8IFBBUk1SSykpCisJCXBvcnQtPnJlYWRfc3RhdHVzX21hc2sgfD0gQkk7CisKKwkvKgorCSAqIENoYXJhY3RlcnMgdG8gaWdub3JlCisJICovCisJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrID0gMDsKKwlpZiAodGVybWlvcy0+Y19pZmxhZyAmIElHTlBBUikKKwkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IEZFIHwgUEU7CisJaWYgKHRlcm1pb3MtPmNfaWZsYWcgJiBJR05CUkspIHsKKwkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IEJJOworCQkvKgorCQkgKiBJZiB3ZSdyZSBpZ25vcmluZyBwYXJpdHkgYW5kIGJyZWFrIGluZGljYXRvcnMsCisJCSAqIGlnbm9yZSBvdmVycnVucyB0b28gKGZvciByZWFsIHJhdyBzdXBwb3J0KS4KKwkJICovCisJCWlmICh0ZXJtaW9zLT5jX2lmbGFnICYgSUdOUEFSKQorCQkJcG9ydC0+aWdub3JlX3N0YXR1c19tYXNrIHw9IE9FOworCX0KKworCS8qIFJYIGV4dHJhY3QgbWFzayAqLworCXVwLT5yeG1hc2sgPSAweDAxIHwgKCgodXAtPmNzaXplICsgdXAtPnN0b3BiKSAqIDIgLSAxKSA8PCAweDgpOworCS8qIFRYIG1hc2tzLCA4IGJpdCBkYXRhIGFuZCAxIGJpdCBzdG9wIGZvciBleGFtcGxlOgorCSAqIG1hc2sxID0gYiMwMTExMTExMTEwCisJICogbWFzazIgPSBiIzEwMDAwMDAwMDAKKwkgKi8KKwlmb3IgKGkgPSAwLCB1cC0+dHhtYXNrMSA9IDA7IGkgPCB1cC0+Y3NpemU7IGkrKykKKwkJdXAtPnR4bWFzazEgfD0gKDE8PGkpOworCXVwLT50eG1hc2syID0gKDE8PGkpOworCWlmICh1cC0+c3RvcGIpIHsKKwkJKytpOworCQl1cC0+dHhtYXNrMiB8PSAoMTw8aSk7CisJfQorCXVwLT50eG1hc2sxIDw8PSAxOworCXVwLT50eG1hc2syIDw8PSAxOworCS8qIHVhcnQgYmF1ZCByYXRlICovCisJcG9ydC0+dWFydGNsayA9IHVhcnRfZ2V0X2JhdWRfcmF0ZShwb3J0LCB0ZXJtaW9zLCBvbGQsIDAsIGdldF9zY2xrKCkvMTYpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnVwLT5wb3J0LmxvY2ssIGZsYWdzKTsKKworCS8qIERpc2FibGUgVUFSVCAqLworCVNQT1JUX1BVVF9UQ1IxKHVwLCBTUE9SVF9HRVRfVENSMSh1cCkgJiB+VFNQRU4pOworCVNQT1JUX1BVVF9SQ1IxKHVwLCBTUE9SVF9HRVRfUkNSMSh1cCkgJiB+UlNQRU4pOworCisJc3BvcnRfdWFydF9zZXR1cCh1cCwgdXAtPmNzaXplICsgdXAtPnN0b3BiLCBwb3J0LT51YXJ0Y2xrKTsKKworCS8qIGRyaXZlciBUWCBsaW5lIGhpZ2ggYWZ0ZXIgY29uZmlnLCBvbmUgZHVtbXkgZGF0YSBpcworCSAqIG5lY2Vzc2FyeSB0byBzdG9wIHNwb3J0IGFmdGVyIHNoaWZ0IG9uZSBieXRlCisJICovCisJU1BPUlRfUFVUX1RYKHVwLCAweGZmZmYpOworCVNQT1JUX1BVVF9UWCh1cCwgMHhmZmZmKTsKKwlTUE9SVF9QVVRfVENSMSh1cCwgKFNQT1JUX0dFVF9UQ1IxKHVwKSB8IFRTUEVOKSk7CisJU1NZTkMoKTsKKwl3aGlsZSAoIShTUE9SVF9HRVRfU1RBVCh1cCkgJiBUWEhSRSkpCisJCWNwdV9yZWxheCgpOworCVNQT1JUX1BVVF9UQ1IxKHVwLCBTUE9SVF9HRVRfVENSMSh1cCkgJiB+VFNQRU4pOworCVNTWU5DKCk7CisKKwkvKiBQb3J0IHNwZWVkIGNoYW5nZWQsIHVwZGF0ZSB0aGUgcGVyLXBvcnQgdGltZW91dC4gKi8KKwl1YXJ0X3VwZGF0ZV90aW1lb3V0KHBvcnQsIHRlcm1pb3MtPmNfY2ZsYWcsIHBvcnQtPnVhcnRjbGspOworCisJLyogRW5hYmxlIHNwb3J0IHJ4ICovCisJU1BPUlRfUFVUX1JDUjEodXAsIFNQT1JUX0dFVF9SQ1IxKHVwKSB8IFJTUEVOKTsKKwlTU1lOQygpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdXAtPnBvcnQubG9jaywgZmxhZ3MpOworfQorCiBzdHJ1Y3QgdWFydF9vcHMgc3BvcnRfdWFydF9vcHMgPSB7CiAJLnR4X2VtcHR5CT0gc3BvcnRfdHhfZW1wdHksCiAJLnNldF9tY3RybAk9IHNwb3J0X3NldF9tY3RybCwKQEAgLTQ4MCwxMzggKzUzNiwzMTkgQEAKIAkudmVyaWZ5X3BvcnQJPSBzcG9ydF92ZXJpZnlfcG9ydCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0IHNwb3J0X3VhcnRfcG9ydHNbXSA9IHsKLQl7IC8qIFNQT1JUIDAgKi8KLQkJLm5hbWUJPSAiU1BPUlQwIiwKLQkJLnR4X2lycSA9IElSUV9TUE9SVDBfVFgsCi0JCS5yeF9pcnEgPSBJUlFfU1BPUlQwX1JYLAotCQkuZXJyX2lycT0gSVJRX1NQT1JUMF9FUlJPUiwKLQkJLnBvcnQJPSB7Ci0JCQkudHlwZQkJPSBQT1JUX0JGSU5fU1BPUlQsCi0JCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkJLm1lbWJhc2UJPSAodm9pZCBfX2lvbWVtICopU1BPUlQwX1RDUjEsCi0JCQkubWFwYmFzZQk9IFNQT1JUMF9UQ1IxLAotCQkJLmlycQkJPSBJUlFfU1BPUlQwX1JYLAotCQkJLnVhcnRjbGsJPSBDT05GSUdfU1BPUlRfQkFVRF9SQVRFLAotCQkJLmZpZm9zaXplCT0gOCwKLQkJCS5vcHMJCT0gJnNwb3J0X3VhcnRfb3BzLAotCQkJLmxpbmUJCT0gMCwKLQkJfSwKLQl9LCB7IC8qIFNQT1JUIDEgKi8KLQkJLm5hbWUJPSAiU1BPUlQxIiwKLQkJLnR4X2lycSA9IElSUV9TUE9SVDFfVFgsCi0JCS5yeF9pcnEgPSBJUlFfU1BPUlQxX1JYLAotCQkuZXJyX2lycT0gSVJRX1NQT1JUMV9FUlJPUiwKLQkJLnBvcnQJPSB7Ci0JCQkudHlwZQkJPSBQT1JUX0JGSU5fU1BPUlQsCi0JCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkJLm1lbWJhc2UJPSAodm9pZCBfX2lvbWVtICopU1BPUlQxX1RDUjEsCi0JCQkubWFwYmFzZQk9IFNQT1JUMV9UQ1IxLAotCQkJLmlycQkJPSBJUlFfU1BPUlQxX1JYLAotCQkJLnVhcnRjbGsJPSBDT05GSUdfU1BPUlRfQkFVRF9SQVRFLAotCQkJLmZpZm9zaXplCT0gOCwKLQkJCS5vcHMJCT0gJnNwb3J0X3VhcnRfb3BzLAotCQkJLmxpbmUJCT0gMSwKLQkJfSwKKyNkZWZpbmUgQkZJTl9TUE9SVF9VQVJUX01BWF9QT1JUUyA0CisKK3N0YXRpYyBzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0ICpiZmluX3Nwb3J0X3VhcnRfcG9ydHNbQkZJTl9TUE9SVF9VQVJUX01BWF9QT1JUU107CisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlRfQ09OU09MRQorc3RhdGljIGludCBfX2luaXQKK3Nwb3J0X3VhcnRfY29uc29sZV9zZXR1cChzdHJ1Y3QgY29uc29sZSAqY28sIGNoYXIgKm9wdGlvbnMpCit7CisJc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqdXA7CisJaW50IGJhdWQgPSA1NzYwMDsKKwlpbnQgYml0cyA9IDg7CisJaW50IHBhcml0eSA9ICduJzsKKwlpbnQgZmxvdyA9ICduJzsKKworCS8qIENoZWNrIHdoZXRoZXIgYW4gaW52YWxpZCB1YXJ0IG51bWJlciBoYXMgYmVlbiBzcGVjaWZpZWQgKi8KKwlpZiAoY28tPmluZGV4IDwgMCB8fCBjby0+aW5kZXggPj0gQkZJTl9TUE9SVF9VQVJUX01BWF9QT1JUUykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl1cCA9IGJmaW5fc3BvcnRfdWFydF9wb3J0c1tjby0+aW5kZXhdOworCWlmICghdXApCisJCXJldHVybiAtRU5PREVWOworCisJaWYgKG9wdGlvbnMpCisJCXVhcnRfcGFyc2Vfb3B0aW9ucyhvcHRpb25zLCAmYmF1ZCwgJnBhcml0eSwgJmJpdHMsICZmbG93KTsKKworCXJldHVybiB1YXJ0X3NldF9vcHRpb25zKCZ1cC0+cG9ydCwgY28sIGJhdWQsIHBhcml0eSwgYml0cywgZmxvdyk7Cit9CisKK3N0YXRpYyB2b2lkIHNwb3J0X3VhcnRfY29uc29sZV9wdXRjaGFyKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIGludCBjaCkKK3sKKwlzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0ICp1cCA9IChzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0ICopcG9ydDsKKworCXdoaWxlIChTUE9SVF9HRVRfU1RBVCh1cCkgJiBUWEYpCisJCWJhcnJpZXIoKTsKKworCXR4X29uZV9ieXRlKHVwLCBjaCk7Cit9CisKKy8qCisgKiBJbnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCBvbiBlbnRlcmluZworICovCitzdGF0aWMgdm9pZAorc3BvcnRfdWFydF9jb25zb2xlX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjbywgY29uc3QgY2hhciAqcywgdW5zaWduZWQgaW50IGNvdW50KQoreworCXN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnVwID0gYmZpbl9zcG9ydF91YXJ0X3BvcnRzW2NvLT5pbmRleF07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7CisKKwlpZiAoU1BPUlRfR0VUX1RDUjEodXApICYgVFNQRU4pCisJCXVhcnRfY29uc29sZV93cml0ZSgmdXAtPnBvcnQsIHMsIGNvdW50LCBzcG9ydF91YXJ0X2NvbnNvbGVfcHV0Y2hhcik7CisJZWxzZSB7CisJCS8qIGR1bW15IGRhdGEgdG8gc3RhcnQgc3BvcnQgKi8KKwkJd2hpbGUgKFNQT1JUX0dFVF9TVEFUKHVwKSAmIFRYRikKKwkJCWJhcnJpZXIoKTsKKwkJU1BPUlRfUFVUX1RYKHVwLCAweGZmZmYpOworCQkvKiBFbmFibGUgdHJhbnNtaXQsIHRoZW4gYW4gaW50ZXJydXB0IHdpbGwgZ2VuZXJhdGVkICovCisJCVNQT1JUX1BVVF9UQ1IxKHVwLCAoU1BPUlRfR0VUX1RDUjEodXApIHwgVFNQRU4pKTsKKwkJU1NZTkMoKTsKKworCQl1YXJ0X2NvbnNvbGVfd3JpdGUoJnVwLT5wb3J0LCBzLCBjb3VudCwgc3BvcnRfdWFydF9jb25zb2xlX3B1dGNoYXIpOworCisJCS8qIEFsdGhvdWdoIHRoZSBob2xkIHJlZ2lzdGVyIGlzIGVtcHR5LCBsYXN0IGJ5dGUgaXMgc3RpbGwgaW4gc2hpZnQKKwkJICogcmVnaXN0ZXIgYW5kIG5vdCBzZW50IG91dCB5ZXQuIFNvLCBwdXQgYSBkdW1teSBkYXRhIGludG8gVFggRklGTy4KKwkJICogVGhlbiwgc3BvcnQgdHggc3RvcHMgd2hlbiBsYXN0IGJ5dGUgaXMgc2hpZnQgb3V0IGFuZCB0aGUgZHVtbXkKKwkJICogZGF0YSBpcyBtb3ZlZCBpbnRvIHRoZSBzaGlmdCByZWdpc3Rlci4KKwkJICovCisJCXdoaWxlIChTUE9SVF9HRVRfU1RBVCh1cCkgJiBUWEYpCisJCQliYXJyaWVyKCk7CisJCVNQT1JUX1BVVF9UWCh1cCwgMHhmZmZmKTsKKwkJd2hpbGUgKCEoU1BPUlRfR0VUX1NUQVQodXApICYgVFhIUkUpKQorCQkJYmFycmllcigpOworCisJCS8qIFN0b3Agc3BvcnQgdHggdHJhbnNmZXIgKi8KKwkJU1BPUlRfUFVUX1RDUjEodXAsIChTUE9SVF9HRVRfVENSMSh1cCkgJiB+VFNQRU4pKTsKKwkJU1NZTkMoKTsKIAl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1cC0+cG9ydC5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9kcml2ZXIgc3BvcnRfdWFydF9yZWc7CisKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBzcG9ydF91YXJ0X2NvbnNvbGUgPSB7CisJLm5hbWUJCT0gREVWSUNFX05BTUUsCisJLndyaXRlCQk9IHNwb3J0X3VhcnRfY29uc29sZV93cml0ZSwKKwkuZGV2aWNlCQk9IHVhcnRfY29uc29sZV9kZXZpY2UsCisJLnNldHVwCQk9IHNwb3J0X3VhcnRfY29uc29sZV9zZXR1cCwKKwkuZmxhZ3MJCT0gQ09OX1BSSU5UQlVGRkVSLAorCS5pbmRleAkJPSAtMSwKKwkuZGF0YQkJPSAmc3BvcnRfdWFydF9yZWcsCiB9OwogCisjZGVmaW5lIFNQT1JUX1VBUlRfQ09OU09MRQkoJnNwb3J0X3VhcnRfY29uc29sZSkKKyNlbHNlCisjZGVmaW5lIFNQT1JUX1VBUlRfQ09OU09MRQlOVUxMCisjZW5kaWYgLyogQ09ORklHX1NFUklBTF9CRklOX1NQT1JUX0NPTlNPTEUgKi8KKworCiBzdGF0aWMgc3RydWN0IHVhcnRfZHJpdmVyIHNwb3J0X3VhcnRfcmVnID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkuZHJpdmVyX25hbWUJPSAiU1BPUlQtVUFSVCIsCi0JLmRldl9uYW1lCT0gInR0eVNTIiwKKwkuZHJpdmVyX25hbWUJPSBEUlZfTkFNRSwKKwkuZGV2X25hbWUJPSBERVZJQ0VfTkFNRSwKIAkubWFqb3IJCT0gMjA0LAogCS5taW5vcgkJPSA4NCwKLQkubnIJCT0gQVJSQVlfU0laRShzcG9ydF91YXJ0X3BvcnRzKSwKLQkuY29ucwkJPSBOVUxMLAorCS5ucgkJPSBCRklOX1NQT1JUX1VBUlRfTUFYX1BPUlRTLAorCS5jb25zCQk9IFNQT1JUX1VBUlRfQ09OU09MRSwKIH07CiAKLXN0YXRpYyBpbnQgc3BvcnRfdWFydF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBzcG9ydF91YXJ0X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewotCXN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnNwb3J0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0ICpzcG9ydCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCi0JcHJfZGVidWcoIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CisJZGV2X2RiZyhkZXYsICIlcyBlbnRlclxuIiwgX19mdW5jX18pOwogCWlmIChzcG9ydCkKIAkJdWFydF9zdXNwZW5kX3BvcnQoJnNwb3J0X3VhcnRfcmVnLCAmc3BvcnQtPnBvcnQpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc3BvcnRfdWFydF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBzcG9ydF91YXJ0X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnNwb3J0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAKLQlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKKwlkZXZfZGJnKGRldiwgIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CiAJaWYgKHNwb3J0KQogCQl1YXJ0X3Jlc3VtZV9wb3J0KCZzcG9ydF91YXJ0X3JlZywgJnNwb3J0LT5wb3J0KTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNwb3J0X3VhcnRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCXByX2RlYnVnKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOwotCXNwb3J0X3VhcnRfcG9ydHNbZGV2LT5pZF0ucG9ydC5kZXYgPSAmZGV2LT5kZXY7Ci0JdWFydF9hZGRfb25lX3BvcnQoJnNwb3J0X3VhcnRfcmVnLCAmc3BvcnRfdWFydF9wb3J0c1tkZXYtPmlkXS5wb3J0KTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsICZzcG9ydF91YXJ0X3BvcnRzW2Rldi0+aWRdKTsKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyBiZmluX3Nwb3J0X3VhcnRfZGV2X3BtX29wcyA9IHsKKwkuc3VzcGVuZAk9IHNwb3J0X3VhcnRfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNwb3J0X3VhcnRfcmVzdW1lLAorfTsKKyNlbmRpZgogCi0JcmV0dXJuIDA7CitzdGF0aWMgaW50IF9fZGV2aW5pdCBzcG9ydF91YXJ0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqc3BvcnQ7CisJaW50IHJldCA9IDA7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICIlcyBlbnRlclxuIiwgX19mdW5jX18pOworCisJaWYgKHBkZXYtPmlkIDwgMCB8fCBwZGV2LT5pZCA+PSBCRklOX1NQT1JUX1VBUlRfTUFYX1BPUlRTKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIldyb25nIHNwb3J0IHVhcnQgcGxhdGZvcm0gZGV2aWNlIGlkLlxuIik7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCWlmIChiZmluX3Nwb3J0X3VhcnRfcG9ydHNbcGRldi0+aWRdID09IE5VTEwpIHsKKwkJYmZpbl9zcG9ydF91YXJ0X3BvcnRzW3BkZXYtPmlkXSA9CisJCQlrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3BvcnRfdWFydF9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJCXNwb3J0ID0gYmZpbl9zcG9ydF91YXJ0X3BvcnRzW3BkZXYtPmlkXTsKKwkJaWYgKCFzcG9ydCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJCSJGYWlsIHRvIGttYWxsb2Mgc3BvcnRfdWFydF9wb3J0XG4iKTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisKKwkJcmV0ID0gcGVyaXBoZXJhbF9yZXF1ZXN0X2xpc3QoCisJCQkodW5zaWduZWQgc2hvcnQgKilwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSwgRFJWX05BTUUpOworCQlpZiAocmV0KSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkJIkZhaWwgdG8gcmVxdWVzdCBTUE9SVCBwZXJpcGhlcmFsc1xuIik7CisJCQlnb3RvIG91dF9lcnJvcl9mcmVlX21lbTsKKwkJfQorCisJCXNwaW5fbG9ja19pbml0KCZzcG9ydC0+cG9ydC5sb2NrKTsKKwkJc3BvcnQtPnBvcnQuZmlmb3NpemUgID0gU1BPUlRfVFhfRklGT19TSVpFLAorCQlzcG9ydC0+cG9ydC5vcHMgICAgICAgPSAmc3BvcnRfdWFydF9vcHM7CisJCXNwb3J0LT5wb3J0LmxpbmUgICAgICA9IHBkZXYtPmlkOworCQlzcG9ydC0+cG9ydC5pb3R5cGUgICAgPSBVUElPX01FTTsKKwkJc3BvcnQtPnBvcnQuZmxhZ3MgICAgID0gVVBGX0JPT1RfQVVUT0NPTkY7CisKKwkJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwkJaWYgKHJlcyA9PSBOVUxMKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDYW5ub3QgZ2V0IElPUkVTT1VSQ0VfTUVNXG4iKTsKKwkJCXJldCA9IC1FTk9FTlQ7CisJCQlnb3RvIG91dF9lcnJvcl9mcmVlX3BlcmlwaGVyYWxzOworCQl9CisKKwkJc3BvcnQtPnBvcnQubWVtYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwKKwkJCXJlcy0+ZW5kIC0gcmVzLT5zdGFydCk7CisJCWlmICghc3BvcnQtPnBvcnQubWVtYmFzZSkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IG1hcCBzcG9ydCBJT1xuIik7CisJCQlyZXQgPSAtRU5YSU87CisJCQlnb3RvIG91dF9lcnJvcl9mcmVlX3BlcmlwaGVyYWxzOworCQl9CisKKwkJc3BvcnQtPnBvcnQuaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwkJaWYgKHNwb3J0LT5wb3J0LmlycSA8IDApIHsKKwkJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIHNwb3J0IFJYL1RYIElSUSBzcGVjaWZpZWRcbiIpOworCQkJcmV0ID0gLUVOT0VOVDsKKwkJCWdvdG8gb3V0X2Vycm9yX3VubWFwOworCQl9CisKKwkJc3BvcnQtPmVycl9pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDEpOworCQlpZiAoc3BvcnQtPmVycl9pcnEgPCAwKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBzcG9ydCBzdGF0dXMgSVJRIHNwZWNpZmllZFxuIik7CisJCQlyZXQgPSAtRU5PRU5UOworCQkJZ290byBvdXRfZXJyb3JfdW5tYXA7CisJCX0KKwl9CisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX0JGSU5fU1BPUlRfQ09OU09MRQorCWlmICghaXNfZWFybHlfcGxhdGZvcm1fZGV2aWNlKHBkZXYpKSB7CisjZW5kaWYKKwkJc3BvcnQgPSBiZmluX3Nwb3J0X3VhcnRfcG9ydHNbcGRldi0+aWRdOworCQlzcG9ydC0+cG9ydC5kZXYgPSAmcGRldi0+ZGV2OworCQlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgc3BvcnQpOworCQlyZXQgPSB1YXJ0X2FkZF9vbmVfcG9ydCgmc3BvcnRfdWFydF9yZWcsICZzcG9ydC0+cG9ydCk7CisjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX1NQT1JUX0NPTlNPTEUKKwl9CisjZW5kaWYKKwlpZiAoIXJldCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoc3BvcnQpIHsKK291dF9lcnJvcl91bm1hcDoKKwkJaW91bm1hcChzcG9ydC0+cG9ydC5tZW1iYXNlKTsKK291dF9lcnJvcl9mcmVlX3BlcmlwaGVyYWxzOgorCQlwZXJpcGhlcmFsX2ZyZWVfbGlzdCgKKwkJCSh1bnNpZ25lZCBzaG9ydCAqKXBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKTsKK291dF9lcnJvcl9mcmVlX21lbToKKwkJa2ZyZWUoc3BvcnQpOworCQliZmluX3Nwb3J0X3VhcnRfcG9ydHNbcGRldi0+aWRdID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHNwb3J0X3VhcnRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNwb3J0X3VhcnRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0Jc3RydWN0IHNwb3J0X3VhcnRfcG9ydCAqc3BvcnQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzcG9ydF91YXJ0X3BvcnQgKnNwb3J0ID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAKLQlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKLQlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzIGVudGVyXG4iLCBfX2Z1bmNfXyk7CisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIE5VTEwpOwogCi0JaWYgKHNwb3J0KQorCWlmIChzcG9ydCkgewogCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmc3BvcnRfdWFydF9yZWcsICZzcG9ydC0+cG9ydCk7CisJCWlvdW5tYXAoc3BvcnQtPnBvcnQubWVtYmFzZSk7CisJCXBlcmlwaGVyYWxfZnJlZV9saXN0KAorCQkJKHVuc2lnbmVkIHNob3J0ICopcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGEpOworCQlrZnJlZShzcG9ydCk7CisJCWJmaW5fc3BvcnRfdWFydF9wb3J0c1twZGV2LT5pZF0gPSBOVUxMOworCX0KIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBzcG9ydF91YXJ0X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gc3BvcnRfdWFydF9wcm9iZSwKLQkucmVtb3ZlCQk9IHNwb3J0X3VhcnRfcmVtb3ZlLAotCS5zdXNwZW5kCT0gc3BvcnRfdWFydF9zdXNwZW5kLAotCS5yZXN1bWUJCT0gc3BvcnRfdWFydF9yZXN1bWUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzcG9ydF91YXJ0X3JlbW92ZSksCiAJLmRyaXZlcgkJPSB7CiAJCS5uYW1lCT0gRFJWX05BTUUsCisjaWZkZWYgQ09ORklHX1BNCisJCS5wbQk9ICZiZmluX3Nwb3J0X3VhcnRfZGV2X3BtX29wcywKKyNlbmRpZgogCX0sCiB9OwogCisjaWZkZWYgQ09ORklHX1NFUklBTF9CRklOX1NQT1JUX0NPTlNPTEUKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBlYXJseV9wbGF0Zm9ybV9kcml2ZXIgZWFybHlfc3BvcnRfdWFydF9kcml2ZXIgPSB7CisJLmNsYXNzX3N0ciA9IERSVl9OQU1FLAorCS5wZHJ2ID0gJnNwb3J0X3VhcnRfZHJpdmVyLAorCS5yZXF1ZXN0ZWRfaWQgPSBFQVJMWV9QTEFURk9STV9JRF9VTlNFVCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNwb3J0X3VhcnRfcnNfY29uc29sZV9pbml0KHZvaWQpCit7CisJZWFybHlfcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZlYXJseV9zcG9ydF91YXJ0X2RyaXZlciwgRFJWX05BTUUpOworCisJZWFybHlfcGxhdGZvcm1fZHJpdmVyX3Byb2JlKERSVl9OQU1FLCBCRklOX1NQT1JUX1VBUlRfTUFYX1BPUlRTLCAwKTsKKworCXJlZ2lzdGVyX2NvbnNvbGUoJnNwb3J0X3VhcnRfY29uc29sZSk7CisKKwlyZXR1cm4gMDsKK30KK2NvbnNvbGVfaW5pdGNhbGwoc3BvcnRfdWFydF9yc19jb25zb2xlX2luaXQpOworI2VuZGlmCisKIHN0YXRpYyBpbnQgX19pbml0IHNwb3J0X3VhcnRfaW5pdCh2b2lkKQogewogCWludCByZXQ7CiAKLQlwcl9kZWJ1ZygiJXMgZW50ZXJcbiIsIF9fZnVuY19fKTsKKwlwcl9pbmZvKCJTZXJpYWw6IEJsYWNrZmluIHVhcnQgb3ZlciBzcG9ydCBkcml2ZXJcbiIpOworCiAJcmV0ID0gdWFydF9yZWdpc3Rlcl9kcml2ZXIoJnNwb3J0X3VhcnRfcmVnKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgJXM6JWRcbiIsCisJaWYgKHJldCkgeworCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciAlczolZFxuIiwKIAkJCQlzcG9ydF91YXJ0X3JlZy5kcml2ZXJfbmFtZSwgcmV0KTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKIAlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNwb3J0X3VhcnRfZHJpdmVyKTsKLQlpZiAocmV0ICE9IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVnaXN0ZXIgc3BvcnQgdWFydCBkcml2ZXI6JWRcbiIsIHJldCk7CisJaWYgKHJldCkgeworCQlwcl9lcnIoImZhaWxlZCB0byByZWdpc3RlciBzcG9ydCB1YXJ0IGRyaXZlcjolZFxuIiwgcmV0KTsKIAkJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmc3BvcnRfdWFydF9yZWcpOwogCX0KIAotCi0JcHJfZGVidWcoIiVzIGV4aXRcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gcmV0OwogfQorbW9kdWxlX2luaXQoc3BvcnRfdWFydF9pbml0KTsKIAogc3RhdGljIHZvaWQgX19leGl0IHNwb3J0X3VhcnRfZXhpdCh2b2lkKQogewotCXByX2RlYnVnKCIlcyBlbnRlclxuIiwgX19mdW5jX18pOwogCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzcG9ydF91YXJ0X2RyaXZlcik7CiAJdWFydF91bnJlZ2lzdGVyX2RyaXZlcigmc3BvcnRfdWFydF9yZWcpOwogfQotCi1tb2R1bGVfaW5pdChzcG9ydF91YXJ0X2luaXQpOwogbW9kdWxlX2V4aXQoc3BvcnRfdWFydF9leGl0KTsKIAorTU9EVUxFX0FVVEhPUigiU29uaWMgWmhhbmcsIFJveSBIdWFuZyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJCbGFja2ZpbiBzZXJpYWwgb3ZlciBTUE9SVCBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2JmaW5fc3BvcnRfdWFydC5oIGIvZHJpdmVycy9zZXJpYWwvYmZpbl9zcG9ydF91YXJ0LmgKaW5kZXggNjcxZDQxYy4uYWJlMDM2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvYmZpbl9zcG9ydF91YXJ0LmgKKysrIGIvZHJpdmVycy9zZXJpYWwvYmZpbl9zcG9ydF91YXJ0LmgKQEAgLTEsMjkgKzEsMjMgQEAKIC8qCi0gKiBGaWxlOglsaW51eC9kcml2ZXJzL3NlcmlhbC9iZmluX3Nwb3J0X3VhcnQuaAorICogQmxhY2tmaW4gT24tQ2hpcCBTcG9ydCBFbXVsYXRlZCBVQVJUIERyaXZlcgogICoKLSAqIEJhc2VkIG9uOglpbmNsdWRlL2FzbS1ibGFja2Zpbi9tYWNoLTUzMy9iZmluX3NlcmlhbF81eHguaAotICogQXV0aG9yOglSb3kgSHVhbmcgPHJveS5odWFuZz5hbmFsb2cuY29tPgorICogQ29weXJpZ2h0IDIwMDYtMjAwOCBBbmFsb2cgRGV2aWNlcyBJbmMuCiAgKgotICogQ3JlYXRlZDoJTm92IDIyLCAyMDA2Ci0gKiBDb3B5cmlnaHQ6CShDKSBBbmFsb2cgRGV2aWNlIEluYy4KLSAqIERlc2NyaXB0aW9uOiB0aGlzIGRyaXZlciBlbmFibGUgU1BPUlRzIG9uIEJsYWNrZmluIGVtdWxhdGUgVUFSVC4KKyAqIEVudGVyIGJ1Z3MgYXQgaHR0cDovL2JsYWNrZmluLnVjbGludXgub3JnLwogICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIHRoZSBmaWxlIENPUFlJTkcsIG9yIHdyaXRlCi0gKiB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwtMiBvciBsYXRlci4KICAqLwogCisvKgorICogVGhpcyBkcml2ZXIgYW5kIHRoZSBoYXJkd2FyZSBzdXBwb3J0ZWQgYXJlIGluIHRlcm0gb2YgRUUtMTkxIG9mIEFESS4KKyAqIGh0dHA6Ly93d3cuYW5hbG9nLmNvbS9VcGxvYWRlZEZpbGVzL0FwcGxpY2F0aW9uX05vdGVzLzM5OTQ0NzY2M0VFMTkxLnBkZgorICogVGhpcyBhcHBsaWNhdGlvbiBub3RlIGRlc2NyaWJlIGhvdyB0byBpbXBsZW1lbnQgYSBVQVJUIG9uIGEgU2hhcmMgRFNQLAorICogYnV0IHRoaXMgZHJpdmVyIGlzIGltcGxlbWVudGVkIG9uIEJsYWNrZmluIFByb2Nlc3Nvci4KKyAqIFRyYW5zbWl0IEZyYW1lIFN5bmMgaXMgbm90IHVzZWQgYnkgdGhpcyBkcml2ZXIgdG8gdHJhbnNmZXIgZGF0YSBvdXQuCisgKi8KKworI2lmbmRlZiBfQkZJTl9TUE9SVF9VQVJUX0gKKyNkZWZpbmUgX0JGSU5fU1BPUlRfVUFSVF9ICiAKICNkZWZpbmUgT0ZGU0VUX1RDUjEJCTB4MDAJLyogVHJhbnNtaXQgQ29uZmlndXJhdGlvbiAxIFJlZ2lzdGVyICovCiAjZGVmaW5lIE9GRlNFVF9UQ1IyCQkweDA0CS8qIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gMiBSZWdpc3RlciAqLwpAQCAtNjEsMyArNTUsNyBAQAogI2RlZmluZSBTUE9SVF9QVVRfUkNMS0RJVihzcG9ydCwgdikJYmZpbl93cml0ZTE2KCgoc3BvcnQpLT5wb3J0Lm1lbWJhc2UgKyBPRkZTRVRfUkNMS0RJViksIHYpCiAjZGVmaW5lIFNQT1JUX1BVVF9SRlNESVYoc3BvcnQsIHYpCWJmaW5fd3JpdGUxNigoKHNwb3J0KS0+cG9ydC5tZW1iYXNlICsgT0ZGU0VUX1JGU0RJViksIHYpCiAjZGVmaW5lIFNQT1JUX1BVVF9TVEFUKHNwb3J0LCB2KQliZmluX3dyaXRlMTYoKChzcG9ydCktPnBvcnQubWVtYmFzZSArIE9GRlNFVF9TVEFUKSwgdikKKworI2RlZmluZSBTUE9SVF9UWF9GSUZPX1NJWkUJOAorCisjZW5kaWYgLyogX0JGSU5fU1BPUlRfVUFSVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pY29tLmMgYi9kcml2ZXJzL3NlcmlhbC9pY29tLmMKaW5kZXggMDAyOGI2Zi4uNTNhNDY4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaWNvbS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2ljb20uYwpAQCAtNzUxLDcgKzc1MSw2IEBACiAJCXRyYWNlKGljb21fcG9ydCwgIkZJRF9TVEFUVVMiLCBzdGF0dXMpOwogCQljb3VudCA9IGNwdV90b19sZTE2KGljb21fcG9ydC0+c3RhdFN0Zy0+cmN2W3Jjdl9idWZmXS5sZUxlbmd0aCk7CiAKLSAgICAgICAgICAgICAgICBjb3VudCA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgY291bnQpOwogCQl0cmFjZShpY29tX3BvcnQsICJSQ1ZfQ09VTlQiLCBjb3VudCk7CiAKIAkJdHJhY2UoaWNvbV9wb3J0LCAiUkVBTF9DT1VOVCIsIGNvdW50KTsKQEAgLTE2NTQsNCArMTY1Myw2IEBACiBNT0RVTEVfU1VQUE9SVEVEX0RFVklDRQogICAgICgiSUJNIGlTZXJpZXMgMjc0NSwgMjc3MSwgMjc3MiwgMjc0MiwgMjc5MyBhbmQgMjgwNSBDb21tdW5pY2F0aW9ucyBhZGFwdGVycyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCitNT0RVTEVfRklSTVdBUkUoImljb21fY2FsbF9zZXR1cC5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgiaWNvbV9yZXNfZGNlLmJpbiIpOworTU9EVUxFX0ZJUk1XQVJFKCJpY29tX2FzYy5iaW4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lteC5jIGIvZHJpdmVycy9zZXJpYWwvaW14LmMKaW5kZXggNjBkNjY1YS4uZTU3OWQ3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaW14LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaW14LmMKQEAgLTQ0MCw3ICs0NDAsNyBAQAogCiAJCXRlbXAgPSByZWFkbChzcG9ydC0+cG9ydC5tZW1iYXNlICsgVVNSMik7CiAJCWlmICh0ZW1wICYgVVNSMl9CUkNEKSB7Ci0JCQl3cml0ZWwodGVtcCB8IFVTUjJfQlJDRCwgc3BvcnQtPnBvcnQubWVtYmFzZSArIFVTUjIpOworCQkJd3JpdGVsKFVTUjJfQlJDRCwgc3BvcnQtPnBvcnQubWVtYmFzZSArIFVTUjIpOwogCQkJaWYgKHVhcnRfaGFuZGxlX2JyZWFrKCZzcG9ydC0+cG9ydCkpCiAJCQkJY29udGludWU7CiAJCX0KQEAgLTEyNzksNyArMTI3OSw3IEBACiAJCXNwb3J0LT51c2VfaXJkYSA9IDE7CiAjZW5kaWYKIAotCWlmIChwZGF0YS0+aW5pdCkgeworCWlmIChwZGF0YSAmJiBwZGF0YS0+aW5pdCkgewogCQlyZXQgPSBwZGF0YS0+aW5pdChwZGV2KTsKIAkJaWYgKHJldCkKIAkJCWdvdG8gY2xrcHV0OwpAQCAtMTI5Miw3ICsxMjkyLDcgQEAKIAogCXJldHVybiAwOwogZGVpbml0OgotCWlmIChwZGF0YS0+ZXhpdCkKKwlpZiAocGRhdGEgJiYgcGRhdGEtPmV4aXQpCiAJCXBkYXRhLT5leGl0KHBkZXYpOwogY2xrcHV0OgogCWNsa19wdXQoc3BvcnQtPmNsayk7CkBAIC0xMzIxLDcgKzEzMjEsNyBAQAogCiAJY2xrX2Rpc2FibGUoc3BvcnQtPmNsayk7CiAKLQlpZiAocGRhdGEtPmV4aXQpCisJaWYgKHBkYXRhICYmIHBkYXRhLT5leGl0KQogCQlwZGF0YS0+ZXhpdChwZGV2KTsKIAogCWlvdW5tYXAoc3BvcnQtPnBvcnQubWVtYmFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9pb2MzX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvaW9jM19zZXJpYWwuYwppbmRleCA4NWRjMDQxLi4yM2JhNmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9pb2MzX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2lvYzNfc2VyaWFsLmMKQEAgLTE0MTEsOCArMTQxMSw3IEBACiAJcmVhZF9jb3VudCA9IGRvX3JlYWQodGhlX3BvcnQsIGNoLCBNQVhfQ0hBUlMpOwogCWlmIChyZWFkX2NvdW50ID4gMCkgewogCQlmbGlwID0gMTsKLQkJcmVhZF9yb29tID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCByZWFkX2NvdW50KTsKLQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGNoLCByZWFkX3Jvb20pOworCQlyZWFkX3Jvb20gPSB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgY2gsIHJlYWRfY291bnQpOwogCQl0aGVfcG9ydC0+aWNvdW50LnJ4ICs9IHJlYWRfY291bnQ7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRoZV9wb3J0LT5sb2NrLCBwZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvanNtL2pzbV9kcml2ZXIuYyBiL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fZHJpdmVyLmMKaW5kZXggMTA4YzNlMC4uMTJjYjVlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvanNtL2pzbV9kcml2ZXIuYworKysgYi9kcml2ZXJzL3NlcmlhbC9qc20vanNtX2RyaXZlci5jCkBAIC0xNzksNiArMTc5LDcgQEAKIAogCXJldHVybiAwOwogIG91dF9mcmVlX2lycToKKwlqc21fcmVtb3ZlX3VhcnRfcG9ydChicmQpOwogCWZyZWVfaXJxKGJyZC0+aXJxLCBicmQpOwogIG91dF9pb3VubWFwOgogCWlvdW5tYXAoYnJkLT5yZV9tYXBfbWVtYmFzZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9qc20vanNtX3R0eS5jIGIvZHJpdmVycy9zZXJpYWwvanNtL2pzbV90dHkuYwppbmRleCBjZDk1ZTIxLi41NjczY2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9qc20vanNtX3R0eS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2pzbS9qc21fdHR5LmMKQEAgLTQzMiw3ICs0MzIsNyBAQAogCiBpbnQganNtX3VhcnRfcG9ydF9pbml0KHN0cnVjdCBqc21fYm9hcmQgKmJyZCkKIHsKLQlpbnQgaTsKKwlpbnQgaSwgcmM7CiAJdW5zaWduZWQgaW50IGxpbmU7CiAJc3RydWN0IGpzbV9jaGFubmVsICpjaDsKIApAQCAtNDY3LDggKzQ2NywxMSBAQAogCQl9IGVsc2UKIAkJCXNldF9iaXQobGluZSwgbGluZW1hcCk7CiAJCWJyZC0+Y2hhbm5lbHNbaV0tPnVhcnRfcG9ydC5saW5lID0gbGluZTsKLQkJaWYgKHVhcnRfYWRkX29uZV9wb3J0ICgmanNtX3VhcnRfZHJpdmVyLCAmYnJkLT5jaGFubmVsc1tpXS0+dWFydF9wb3J0KSkKLQkJCXByaW50ayhLRVJOX0lORk8gImpzbTogYWRkIGRldmljZSBmYWlsZWRcbiIpOworCQlyYyA9IHVhcnRfYWRkX29uZV9wb3J0ICgmanNtX3VhcnRfZHJpdmVyLCAmYnJkLT5jaGFubmVsc1tpXS0+dWFydF9wb3J0KTsKKwkJaWYgKHJjKXsKKwkJCXByaW50ayhLRVJOX0lORk8gImpzbTogUG9ydCAlZCBmYWlsZWQuIEFib3J0aW5nLi4uXG4iLCBpKTsKKwkJCXJldHVybiByYzsKKwkJfQogCQllbHNlCiAJCQlwcmludGsoS0VSTl9JTkZPICJqc206IFBvcnQgJWQgYWRkZWRcbiIsIGkpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21zbV9zZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsL21zbV9zZXJpYWwuYwppbmRleCBiMDVjNWFhLi5lY2RjMGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tc21fc2VyaWFsLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXNtX3NlcmlhbC5jCkBAIC02OTEsNiArNjkxLDcgQEAKIAlzdHJ1Y3QgbXNtX3BvcnQgKm1zbV9wb3J0OwogCXN0cnVjdCByZXNvdXJjZSAqcmVzb3VyY2U7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydDsKKwlpbnQgaXJxOwogCiAJaWYgKHVubGlrZWx5KHBkZXYtPmlkIDwgMCB8fCBwZGV2LT5pZCA+PSBVQVJUX05SKSkKIAkJcmV0dXJuIC1FTlhJTzsKQEAgLTcxMSw5ICs3MTIsMTAgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAlwb3J0LT5tYXBiYXNlID0gcmVzb3VyY2UtPnN0YXJ0OwogCi0JcG9ydC0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKLQlpZiAodW5saWtlbHkocG9ydC0+aXJxIDwgMCkpCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAodW5saWtlbHkoaXJxIDwgMCkpCiAJCXJldHVybiAtRU5YSU87CisJcG9ydC0+aXJxID0gaXJxOwogCiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcG9ydCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTIuYyBiL2RyaXZlcnMvc2VyaWFsL3MzYzI0MTIuYwppbmRleCBjZTc1ZTI4Li4xNzAwYjFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zM2MyNDEyLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvczNjMjQxMi5jCkBAIC0xMDIsNiArMTAyLDcgQEAKIAkubmFtZQkJPSAiU2Ftc3VuZyBTM0MyNDEyIFVBUlQiLAogCS50eXBlCQk9IFBPUlRfUzNDMjQxMiwKIAkuZmlmb3NpemUJPSA2NCwKKwkuaGFzX2RpdnNsb3QJPSAxLAogCS5yeF9maWZvbWFzawk9IFMzQzI0NDBfVUZTVEFUX1JYTUFTSywKIAkucnhfZmlmb3NoaWZ0CT0gUzNDMjQ0MF9VRlNUQVRfUlhTSElGVCwKIAkucnhfZmlmb2Z1bGwJPSBTM0MyNDQwX1VGU1RBVF9SWEZVTEwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zNXB2MjEwLmMgYi9kcml2ZXJzL3NlcmlhbC9zNXB2MjEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRjMDM4MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc2VyaWFsL3M1cHYyMTAuYwpAQCAtMCwwICsxLDE1NCBAQAorLyogbGludXgvZHJpdmVycy9zZXJpYWwvczVwdjIxMC5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MgQ28uLCBMdGQuCisgKgkJaHR0cDovL3d3dy5zYW1zdW5nLmNvbS8KKyAqCisgKiBCYXNlZCBvbiBkcml2ZXJzL3NlcmlhbC9zM2M2NDAwLmMKKyAqCisgKiBEcml2ZXIgZm9yIFNhbXN1bmcgUzVQVjIxMCBTb0MgVUFSVHMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxwbGF0L3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSAic2Ftc3VuZy5oIgorCitzdGF0aWMgaW50IHM1cHYyMTBfc2VyaWFsX3NldHNvdXJjZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAorCQkJCQlzdHJ1Y3QgczNjMjR4eF91YXJ0X2Nsa3NyYyAqY2xrKQoreworCXVuc2lnbmVkIGxvbmcgdWNvbiA9IHJkX3JlZ2wocG9ydCwgUzNDMjQxMF9VQ09OKTsKKworCWlmIChzdHJjbXAoY2xrLT5uYW1lLCAicGNsayIpID09IDApCisJCXVjb24gJj0gflM1UFYyMTBfVUNPTl9DTEtNQVNLOworCWVsc2UgaWYgKHN0cmNtcChjbGstPm5hbWUsICJ1Y2xrMSIpID09IDApCisJCXVjb24gfD0gUzVQVjIxMF9VQ09OX0NMS01BU0s7CisJZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAidW5rbm93biBjbG9jayBzb3VyY2UgJXNcbiIsIGNsay0+bmFtZSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXdyX3JlZ2wocG9ydCwgUzNDMjQxMF9VQ09OLCB1Y29uKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHM1cHYyMTBfc2VyaWFsX2dldHNvdXJjZShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAorCQkJCQlzdHJ1Y3QgczNjMjR4eF91YXJ0X2Nsa3NyYyAqY2xrKQoreworCXUzMiB1Y29uID0gcmRfcmVnbChwb3J0LCBTM0MyNDEwX1VDT04pOworCisJY2xrLT5kaXZpc29yID0gMTsKKworCXN3aXRjaCAodWNvbiAmIFM1UFYyMTBfVUNPTl9DTEtNQVNLKSB7CisJY2FzZSBTNVBWMjEwX1VDT05fUENMSzoKKwkJY2xrLT5uYW1lID0gInBjbGsiOworCQlicmVhazsKKwljYXNlIFM1UFYyMTBfVUNPTl9VQ0xLOgorCQljbGstPm5hbWUgPSAidWNsazEiOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzNXB2MjEwX3NlcmlhbF9yZXNldHBvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQkJc3RydWN0IHMzYzI0MTBfdWFydGNmZyAqY2ZnKQoreworCXVuc2lnbmVkIGxvbmcgdWNvbiA9IHJkX3JlZ2wocG9ydCwgUzNDMjQxMF9VQ09OKTsKKworCXVjb24gJj0gUzVQVjIxMF9VQ09OX0NMS01BU0s7CisJd3JfcmVnbChwb3J0LCBTM0MyNDEwX1VDT04sICB1Y29uIHwgY2ZnLT51Y29uKTsKKwl3cl9yZWdsKHBvcnQsIFMzQzI0MTBfVUxDT04sIGNmZy0+dWxjb24pOworCisJLyogcmVzZXQgYm90aCBmaWZvcyAqLworCXdyX3JlZ2wocG9ydCwgUzNDMjQxMF9VRkNPTiwgY2ZnLT51ZmNvbiB8IFMzQzI0MTBfVUZDT05fUkVTRVRCT1RIKTsKKwl3cl9yZWdsKHBvcnQsIFMzQzI0MTBfVUZDT04sIGNmZy0+dWZjb24pOworCisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgUzVQVjIxMF9VQVJUX0RFRkFVTFRfSU5GTyhmaWZvX3NpemUpCQkJXAorCQkubmFtZQkJPSAiU2Ftc3VuZyBTNVBWMjEwIFVBUlQwIiwJXAorCQkudHlwZQkJPSBQT1JUX1MzQzY0MDAsCQkJXAorCQkuZmlmb3NpemUJPSBmaWZvX3NpemUsCQkJXAorCQkuaGFzX2RpdnNsb3QJPSAxLAkJCQlcCisJCS5yeF9maWZvbWFzawk9IFM1UFYyMTBfVUZTVEFUX1JYTUFTSywJXAorCQkucnhfZmlmb3NoaWZ0CT0gUzVQVjIxMF9VRlNUQVRfUlhTSElGVCwJXAorCQkucnhfZmlmb2Z1bGwJPSBTNVBWMjEwX1VGU1RBVF9SWEZVTEwsCVwKKwkJLnR4X2ZpZm9mdWxsCT0gUzVQVjIxMF9VRlNUQVRfVFhGVUxMLAlcCisJCS50eF9maWZvbWFzawk9IFM1UFYyMTBfVUZTVEFUX1RYTUFTSywJXAorCQkudHhfZmlmb3NoaWZ0CT0gUzVQVjIxMF9VRlNUQVRfVFhTSElGVCwJXAorCQkuZ2V0X2Nsa3NyYwk9IHM1cHYyMTBfc2VyaWFsX2dldHNvdXJjZSwJXAorCQkuc2V0X2Nsa3NyYwk9IHM1cHYyMTBfc2VyaWFsX3NldHNvdXJjZSwJXAorCQkucmVzZXRfcG9ydAk9IHM1cHYyMTBfc2VyaWFsX3Jlc2V0cG9ydAorCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfdWFydF9pbmZvIHM1cF9wb3J0X2ZpZm8yNTYgPSB7CisJUzVQVjIxMF9VQVJUX0RFRkFVTFRfSU5GTygyNTYpLAorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X3VhcnRfaW5mbyBzNXBfcG9ydF9maWZvNjQgPSB7CisJUzVQVjIxMF9VQVJUX0RFRkFVTFRfSU5GTyg2NCksCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfdWFydF9pbmZvIHM1cF9wb3J0X2ZpZm8xNiA9IHsKKwlTNVBWMjEwX1VBUlRfREVGQVVMVF9JTkZPKDE2KSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF91YXJ0X2luZm8gKnM1cF91YXJ0X2luZltdID0geworCVswXSA9ICZzNXBfcG9ydF9maWZvMjU2LAorCVsxXSA9ICZzNXBfcG9ydF9maWZvNjQsCisJWzJdID0gJnM1cF9wb3J0X2ZpZm8xNiwKKwlbM10gPSAmczVwX3BvcnRfZmlmbzE2LAorfTsKKworLyogZGV2aWNlIG1hbmFnZW1lbnQgKi8KK3N0YXRpYyBpbnQgczVwX3NlcmlhbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXJldHVybiBzM2MyNHh4X3NlcmlhbF9wcm9iZShwZGV2LCBzNXBfdWFydF9pbmZbcGRldi0+aWRdKTsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczVwX3NlcmlhbF9kcnYgPSB7CisJLnByb2JlCQk9IHM1cF9zZXJpYWxfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChzM2MyNHh4X3NlcmlhbF9yZW1vdmUpLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJzNXB2MjEwLXVhcnQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgczVwdjIxMF9zZXJpYWxfY29uc29sZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHMzYzI0eHhfc2VyaWFsX2luaXRjb25zb2xlKCZzNXBfc2VyaWFsX2RydiwgczVwX3VhcnRfaW5mKTsKK30KKworY29uc29sZV9pbml0Y2FsbChzNXB2MjEwX3NlcmlhbF9jb25zb2xlX2luaXQpOworCitzdGF0aWMgaW50IF9faW5pdCBzNXBfc2VyaWFsX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gczNjMjR4eF9zZXJpYWxfaW5pdCgmczVwX3NlcmlhbF9kcnYsICpzNXBfdWFydF9pbmYpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgczVwX3NlcmlhbF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnM1cF9zZXJpYWxfZHJ2KTsKK30KKworbW9kdWxlX2luaXQoczVwX3NlcmlhbF9pbml0KTsKK21vZHVsZV9leGl0KHM1cF9zZXJpYWxfZXhpdCk7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06czVwdjIxMC11YXJ0Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNhbXN1bmcgUzVQVjIxMCBVQVJUIERyaXZlciBzdXBwb3J0Iik7CitNT0RVTEVfQVVUSE9SKCJUaG9tYXMgQWJyYWhhbSA8dGhvbWFzLmFiQHNhbXN1bmcuY29tPiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2Ftc3VuZy5jIGIvZHJpdmVycy9zZXJpYWwvc2Ftc3VuZy5jCmluZGV4IDUyZTNkZjEuLmE5ZDZjNTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NhbXN1bmcuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zYW1zdW5nLmMKQEAgLTEyNzEsNyArMTI3MSw3IEBACiAJdW5zaWduZWQgbG9uZyB1ZnN0YXQsIHV0cnN0YXQ7CiAKIAlpZiAodWZjb24gJiBTM0MyNDEwX1VGQ09OX0ZJRk9NT0RFKSB7Ci0JCS8qIGZpZm8gbW9kZSAtIGNoZWNrIGFtbW91bnQgb2YgZGF0YSBpbiBmaWZvIHJlZ2lzdGVycy4uLiAqLworCQkvKiBmaWZvIG1vZGUgLSBjaGVjayBhbW91bnQgb2YgZGF0YSBpbiBmaWZvIHJlZ2lzdGVycy4uLiAqLwogCiAJCXVmc3RhdCA9IHJkX3JlZ2wocG9ydCwgUzNDMjQxMF9VRlNUQVQpOwogCQlyZXR1cm4gKHVmc3RhdCAmIGluZm8tPnR4X2ZpZm9mdWxsKSA/IDAgOiAxOwpAQCAtMTM3NCw3ICsxMzc0LDcgQEAKICAqIGRhdGEuCiAqLwogCi1zdGF0aWMgaW50IHMzYzI0eHhfc2VyaWFsX2luaXRfcG9ydHMoc3RydWN0IHMzYzI0eHhfdWFydF9pbmZvICppbmZvKQorc3RhdGljIGludCBzM2MyNHh4X3NlcmlhbF9pbml0X3BvcnRzKHN0cnVjdCBzM2MyNHh4X3VhcnRfaW5mbyAqKmluZm8pCiB7CiAJc3RydWN0IHMzYzI0eHhfdWFydF9wb3J0ICpwdHIgPSBzM2MyNHh4X3NlcmlhbF9wb3J0czsKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICoqcGxhdGRldl9wdHI7CkBAIC0xMzg1LDcgKzEzODUsNyBAQAogCXBsYXRkZXZfcHRyID0gczNjMjR4eF91YXJ0X2RldnM7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTOyBpKyssIHB0cisrLCBwbGF0ZGV2X3B0cisrKSB7Ci0JCXMzYzI0eHhfc2VyaWFsX2luaXRfcG9ydChwdHIsIGluZm8sICpwbGF0ZGV2X3B0cik7CisJCXMzYzI0eHhfc2VyaWFsX2luaXRfcG9ydChwdHIsIGluZm9baV0sICpwbGF0ZGV2X3B0cik7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0xNDUxLDcgKzE0NTEsNyBAQAogfTsKIAogaW50IHMzYzI0eHhfc2VyaWFsX2luaXRjb25zb2xlKHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgKmRydiwKLQkJCSAgICAgICBzdHJ1Y3QgczNjMjR4eF91YXJ0X2luZm8gKmluZm8pCisJCQkgICAgICAgc3RydWN0IHMzYzI0eHhfdWFydF9pbmZvICoqaW5mbykKIAogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiA9IHMzYzI0eHhfdWFydF9kZXZzWzBdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2Ftc3VuZy5oIGIvZHJpdmVycy9zZXJpYWwvc2Ftc3VuZy5oCmluZGV4IDFmYjIyMzQuLjBhYzA2YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NhbXN1bmcuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9zYW1zdW5nLmgKQEAgLTc1LDE5ICs3NSwyNCBAQAogZXh0ZXJuIGludCBfX2RldmV4aXQgczNjMjR4eF9zZXJpYWxfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CiAKIGV4dGVybiBpbnQgczNjMjR4eF9zZXJpYWxfaW5pdGNvbnNvbGUoc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqZHJ2LAotCQkJCSAgICAgIHN0cnVjdCBzM2MyNHh4X3VhcnRfaW5mbyAqdWFydCk7CisJCQkJICAgICAgc3RydWN0IHMzYzI0eHhfdWFydF9pbmZvICoqdWFydCk7CiAKIGV4dGVybiBpbnQgczNjMjR4eF9zZXJpYWxfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcnYsCiAJCQkgICAgICAgc3RydWN0IHMzYzI0eHhfdWFydF9pbmZvICppbmZvKTsKIAogI2lmZGVmIENPTkZJR19TRVJJQUxfU0FNU1VOR19DT05TT0xFCiAKLSNkZWZpbmUgczNjMjR4eF9jb25zb2xlX2luaXQoX19kcnYsIF9faW5mKQkJCVwKLXN0YXRpYyBpbnQgX19pbml0IHMzY19zZXJpYWxfY29uc29sZV9pbml0KHZvaWQpCQkJXAotewkJCQkJCQkJXAotCXJldHVybiBzM2MyNHh4X3NlcmlhbF9pbml0Y29uc29sZShfX2RydiwgX19pbmYpOwlcCi19CQkJCQkJCQlcCi0JCQkJCQkJCVwKKyNkZWZpbmUgczNjMjR4eF9jb25zb2xlX2luaXQoX19kcnYsIF9faW5mKQkJCQlcCitzdGF0aWMgaW50IF9faW5pdCBzM2Nfc2VyaWFsX2NvbnNvbGVfaW5pdCh2b2lkKQkJCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBzM2MyNHh4X3VhcnRfaW5mbyAqdWluZm9bQ09ORklHX1NFUklBTF9TQU1TVU5HX1VBUlRTXTsJXAorCWludCBpOwkJCQkJCQkJXAorCQkJCQkJCQkJXAorCWZvciAoaSA9IDA7IGkgPCBDT05GSUdfU0VSSUFMX1NBTVNVTkdfVUFSVFM7IGkrKykJCVwKKwkJdWluZm9baV0gPSBfX2luZjsJCQkJCVwKKwlyZXR1cm4gczNjMjR4eF9zZXJpYWxfaW5pdGNvbnNvbGUoX19kcnYsIHVpbmZvKTsJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCiBjb25zb2xlX2luaXRjYWxsKHMzY19zZXJpYWxfY29uc29sZV9pbml0KQogCiAjZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwppbmRleCA0MmYzMzMzLi45ODBmMzk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYworKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuYwpAQCAtNDgsNiArNDgsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYWVuZ2luZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KIAogI2lmZGVmIENPTkZJR19TVVBFUkgKICNpbmNsdWRlIDxhc20vc2hfYmlvcy5oPgpAQCAtODQsNiArODcsMjcgQEAKIAlzdHJ1Y3QgY2xrCQkqZGNsazsKIAogCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKKwlzdHJ1Y3QgZG1hX2NoYW4JCQkqY2hhbl90eDsKKwlzdHJ1Y3QgZG1hX2NoYW4JCQkqY2hhbl9yeDsKKyNpZmRlZiBDT05GSUdfU0VSSUFMX1NIX1NDSV9ETUEKKwlzdHJ1Y3QgZGV2aWNlCQkJKmRtYV9kZXY7CisJZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQJc2xhdmVfdHg7CisJZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQJc2xhdmVfcng7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yCSpkZXNjX3R4OworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvcgkqZGVzY19yeFsyXTsKKwlkbWFfY29va2llX3QJCQljb29raWVfdHg7CisJZG1hX2Nvb2tpZV90CQkJY29va2llX3J4WzJdOworCWRtYV9jb29raWVfdAkJCWFjdGl2ZV9yeDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJCXNnX3R4OworCXVuc2lnbmVkIGludAkJCXNnX2xlbl90eDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJCXNnX3J4WzJdOworCXNpemVfdAkJCQlidWZfbGVuX3J4OworCXN0cnVjdCBzaF9kbWFlX3NsYXZlCQlwYXJhbV90eDsKKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZQkJcGFyYW1fcng7CisJc3RydWN0IHdvcmtfc3RydWN0CQl3b3JrX3R4OworCXN0cnVjdCB3b3JrX3N0cnVjdAkJd29ya19yeDsKKwlzdHJ1Y3QgdGltZXJfbGlzdAkJcnhfdGltZXI7CisjZW5kaWYKIH07CiAKIHN0cnVjdCBzaF9zY2lfcHJpdiB7CkBAIC0yNjksMjkgKzI5Myw0NCBAQAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NSkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4NikKLXN0YXRpYyBpbmxpbmUgaW50IHNjaWZfdHhyb29tKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IHNjaWZfdHhmaWxsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0JcmV0dXJuIFNDSUZfVFhST09NX01BWCAtIChzY2lfaW4ocG9ydCwgU0NURkRSKSAmIDB4ZmYpOworCXJldHVybiBzY2lfaW4ocG9ydCwgU0NURkRSKSAmIDB4ZmY7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNjaWZfcnhyb29tKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IHNjaWZfdHhyb29tKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJcmV0dXJuIFNDSUZfVFhST09NX01BWCAtIHNjaWZfdHhmaWxsKHBvcnQpOworfQorCitzdGF0aWMgaW50IHNjaWZfcnhmaWxsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJcmV0dXJuIHNjaV9pbihwb3J0LCBTQ1JGRFIpICYgMHhmZjsKIH0KICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MykKLXN0YXRpYyBpbmxpbmUgaW50IHNjaWZfdHhyb29tKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IHNjaWZfdHhmaWxsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0JaWYgKChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDApIHx8Ci0JICAgIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDgwMDApKSB7CisJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUwMDAwMCB8fAorCSAgICBwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDgwMDApCiAJCS8qIFNDSUYwLzEqLwotCQlyZXR1cm4gU0NJRl9UWFJPT01fTUFYIC0gKHNjaV9pbihwb3J0LCBTQ1RGRFIpICYgMHhmZik7Ci0JfSBlbHNlIHsKKwkJcmV0dXJuIHNjaV9pbihwb3J0LCBTQ1RGRFIpICYgMHhmZjsKKwllbHNlCiAJCS8qIFNDSUYyICovCi0JCXJldHVybiBTQ0lGMl9UWFJPT01fTUFYIC0gKHNjaV9pbihwb3J0LCBTQ0ZEUikgPj4gOCk7Ci0JfQorCQlyZXR1cm4gc2NpX2luKHBvcnQsIFNDRkRSKSA+PiA4OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzY2lmX3J4cm9vbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQorc3RhdGljIGludCBzY2lmX3R4cm9vbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMDAwMDAgfHwKKwkgICAgcG9ydC0+bWFwYmFzZSA9PSAweGZmZTA4MDAwKQorCQkvKiBTQ0lGMC8xKi8KKwkJcmV0dXJuIFNDSUZfVFhST09NX01BWCAtIHNjaWZfdHhmaWxsKHBvcnQpOworCWVsc2UKKwkJLyogU0NJRjIgKi8KKwkJcmV0dXJuIFNDSUYyX1RYUk9PTV9NQVggLSBzY2lmX3R4ZmlsbChwb3J0KTsKK30KKworc3RhdGljIGludCBzY2lmX3J4ZmlsbChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCWlmICgocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwKSB8fAogCSAgICAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTA4MDAwKSkgewpAQCAtMzAzLDIzICszNDIsMzMgQEAKIAl9CiB9CiAjZWxzZQotc3RhdGljIGlubGluZSBpbnQgc2NpZl90eHJvb20oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQgc2NpZl90eGZpbGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlyZXR1cm4gU0NJRl9UWFJPT01fTUFYIC0gKHNjaV9pbihwb3J0LCBTQ0ZEUikgPj4gOCk7CisJcmV0dXJuIHNjaV9pbihwb3J0LCBTQ0ZEUikgPj4gODsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2NpZl9yeHJvb20oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQgc2NpZl90eHJvb20oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZXR1cm4gU0NJRl9UWFJPT01fTUFYIC0gc2NpZl90eGZpbGwocG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgc2NpZl9yeGZpbGwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlyZXR1cm4gc2NpX2luKHBvcnQsIFNDRkRSKSAmIFNDSUZfUkZEQ19NQVNLOwogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV90eHJvb20oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQgc2NpX3R4ZmlsbChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewotCXJldHVybiAoc2NpX2luKHBvcnQsIFNDeFNSKSAmIFNDSV9URFJFKSAhPSAwOworCXJldHVybiAhKHNjaV9pbihwb3J0LCBTQ3hTUikgJiBTQ0lfVERSRSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeHJvb20oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3N0YXRpYyBpbnQgc2NpX3R4cm9vbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybiAhc2NpX3R4ZmlsbChwb3J0KTsKK30KKworc3RhdGljIGludCBzY2lfcnhmaWxsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CiAJcmV0dXJuIChzY2lfaW4ocG9ydCwgU0N4U1IpICYgU0N4U1JfUkR4Rihwb3J0KSkgIT0gMDsKIH0KQEAgLTQwNiw5ICs0NTUsOSBAQAogCiAJd2hpbGUgKDEpIHsKIAkJaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0kpCi0JCQljb3VudCA9IHNjaV9yeHJvb20ocG9ydCk7CisJCQljb3VudCA9IHNjaV9yeGZpbGwocG9ydCk7CiAJCWVsc2UKLQkJCWNvdW50ID0gc2NpZl9yeHJvb20ocG9ydCk7CisJCQljb3VudCA9IHNjaWZfcnhmaWxsKHBvcnQpOwogCiAJCS8qIERvbid0IGNvcHkgbW9yZSBieXRlcyB0aGFuIHRoZXJlIGlzIHJvb20gZm9yIGluIHRoZSBidWZmZXIgKi8KIAkJY291bnQgPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIGNvdW50KTsKQEAgLTQ1MywxMCArNTAyLDEwIEBACiAJCQkJfQogCiAJCQkJLyogU3RvcmUgZGF0YSBhbmQgc3RhdHVzICovCi0JCQkJaWYgKHN0YXR1cyZTQ3hTUl9GRVIocG9ydCkpIHsKKwkJCQlpZiAoc3RhdHVzICYgU0N4U1JfRkVSKHBvcnQpKSB7CiAJCQkJCWZsYWcgPSBUVFlfRlJBTUU7CiAJCQkJCWRldl9ub3RpY2UocG9ydC0+ZGV2LCAiZnJhbWUgZXJyb3JcbiIpOwotCQkJCX0gZWxzZSBpZiAoc3RhdHVzJlNDeFNSX1BFUihwb3J0KSkgeworCQkJCX0gZWxzZSBpZiAoc3RhdHVzICYgU0N4U1JfUEVSKHBvcnQpKSB7CiAJCQkJCWZsYWcgPSBUVFlfUEFSSVRZOwogCQkJCQlkZXZfbm90aWNlKHBvcnQtPmRldiwgInBhcml0eSBlcnJvclxuIik7CiAJCQkJfSBlbHNlCkBAIC02MTgsMTMgKzY2NywzOSBAQAogCXJldHVybiBjb3BpZWQ7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBzY2lfcnhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnBvcnQpCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2NpX3J4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpwdHIpCiB7CisjaWZkZWYgQ09ORklHX1NFUklBTF9TSF9TQ0lfRE1BCisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9IHB0cjsKKwlzdHJ1Y3Qgc2NpX3BvcnQgKnMgPSB0b19zY2lfcG9ydChwb3J0KTsKKworCWlmIChzLT5jaGFuX3J4KSB7CisJCXVuc2lnbmVkIGxvbmcgdG91dDsKKwkJdTE2IHNjciA9IHNjaV9pbihwb3J0LCBTQ1NDUik7CisJCXUxNiBzc3IgPSBzY2lfaW4ocG9ydCwgU0N4U1IpOworCisJCS8qIERpc2FibGUgZnV0dXJlIFJ4IGludGVycnVwdHMgKi8KKwkJc2NpX291dChwb3J0LCBTQ1NDUiwgc2NyICYgflNDSV9DVFJMX0ZMQUdTX1JJRSk7CisJCS8qIENsZWFyIGN1cnJlbnQgaW50ZXJydXB0ICovCisJCXNjaV9vdXQocG9ydCwgU0N4U1IsIHNzciAmIH4oMSB8IFNDeFNSX1JEeEYocG9ydCkpKTsKKwkJLyogQ2FsY3VsYXRlIGRlbGF5IGZvciAxLjUgRE1BIGJ1ZmZlcnMgKi8KKwkJdG91dCA9IChwb3J0LT50aW1lb3V0IC0gSFogLyA1MCkgKiBzLT5idWZfbGVuX3J4ICogMyAvCisJCQlwb3J0LT5maWZvc2l6ZSAvIDI7CisJCWRldl9kYmcocG9ydC0+ZGV2LCAiUnggSVJROiBzZXR1cCB0aW1lb3V0IGluICVsdSBtc1xuIiwKKwkJCXRvdXQgKiAxMDAwIC8gSFopOworCQlpZiAodG91dCA8IDIpCisJCQl0b3V0ID0gMjsKKwkJbW9kX3RpbWVyKCZzLT5yeF90aW1lciwgamlmZmllcyArIHRvdXQpOworCisJCXJldHVybiBJUlFfSEFORExFRDsKKwl9CisjZW5kaWYKKwogCS8qIEkgdGhpbmsgc2NpX3JlY2VpdmVfY2hhcnMgaGFzIHRvIGJlIGNhbGxlZCBpcnJlc3BlY3RpdmUKIAkgKiBvZiB3aGV0aGVyIHRoZSBJX0lYT0ZGIGlzIHNldCwgb3RoZXJ3aXNlLCBob3cgaXMgdGhlIGludGVycnVwdAogCSAqIHRvIGJlIGRpc2FibGVkPwogCSAqLwotCXNjaV9yZWNlaXZlX2NoYXJzKHBvcnQpOworCXNjaV9yZWNlaXZlX2NoYXJzKHB0cik7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC02ODAsNiArNzU1LDcgQEAKIHsKIAl1bnNpZ25lZCBzaG9ydCBzc3Jfc3RhdHVzLCBzY3Jfc3RhdHVzLCBlcnJfZW5hYmxlZDsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gcHRyOworCXN0cnVjdCBzY2lfcG9ydCAqcyA9IHRvX3NjaV9wb3J0KHBvcnQpOwogCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOwogCiAJc3NyX3N0YXR1cyA9IHNjaV9pbihwb3J0LCBTQ3hTUik7CkBAIC02ODcsMTAgKzc2MywxNSBAQAogCWVycl9lbmFibGVkID0gc2NyX3N0YXR1cyAmIChTQ0lfQ1RSTF9GTEFHU19SRUlFIHwgU0NJX0NUUkxfRkxBR1NfUklFKTsKIAogCS8qIFR4IEludGVycnVwdCAqLwotCWlmICgoc3NyX3N0YXR1cyAmIFNDeFNSX1REeEUocG9ydCkpICYmIChzY3Jfc3RhdHVzICYgU0NJX0NUUkxfRkxBR1NfVElFKSkKKwlpZiAoKHNzcl9zdGF0dXMgJiBTQ3hTUl9URHhFKHBvcnQpKSAmJiAoc2NyX3N0YXR1cyAmIFNDSV9DVFJMX0ZMQUdTX1RJRSkgJiYKKwkgICAgIXMtPmNoYW5fdHgpCiAJCXJldCA9IHNjaV90eF9pbnRlcnJ1cHQoaXJxLCBwdHIpOwotCS8qIFJ4IEludGVycnVwdCAqLwotCWlmICgoc3NyX3N0YXR1cyAmIFNDeFNSX1JEeEYocG9ydCkpICYmIChzY3Jfc3RhdHVzICYgU0NJX0NUUkxfRkxBR1NfUklFKSkKKwkvKgorCSAqIFJ4IEludGVycnVwdDogaWYgd2UncmUgdXNpbmcgRE1BLCB0aGUgRE1BIGNvbnRyb2xsZXIgY2xlYXJzIFJERiAvCisJICogRFIgZmxhZ3MKKwkgKi8KKwlpZiAoKChzc3Jfc3RhdHVzICYgU0N4U1JfUkR4Rihwb3J0KSkgfHwgcy0+Y2hhbl9yeCkgJiYKKwkgICAgKHNjcl9zdGF0dXMgJiBTQ0lfQ1RSTF9GTEFHU19SSUUpKQogCQlyZXQgPSBzY2lfcnhfaW50ZXJydXB0KGlycSwgcHRyKTsKIAkvKiBFcnJvciBJbnRlcnJ1cHQgKi8KIAlpZiAoKHNzcl9zdGF0dXMgJiBTQ3hTUl9FUlJPUlMocG9ydCkpICYmIGVycl9lbmFibGVkKQpAQCAtNjk5LDYgKzc4MCwxMCBAQAogCWlmICgoc3NyX3N0YXR1cyAmIFNDeFNSX0JSSyhwb3J0KSkgJiYgZXJyX2VuYWJsZWQpCiAJCXJldCA9IHNjaV9icl9pbnRlcnJ1cHQoaXJxLCBwdHIpOwogCisJV0FSTl9PTkNFKHJldCA9PSBJUlFfTk9ORSwKKwkJICAiJXM6ICVkIElSUSAlZCwgc3RhdHVzICV4LCBjb250cm9sICV4XG4iLCBfX2Z1bmNfXywKKwkJICBpcnEsIHBvcnQtPmxpbmUsIHNzcl9zdGF0dXMsIHNjcl9zdGF0dXMpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtODAwLDcgKzg4NSw5IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHNjaV90eF9lbXB0eShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXVuc2lnbmVkIHNob3J0IHN0YXR1cyA9IHNjaV9pbihwb3J0LCBTQ3hTUik7Ci0JcmV0dXJuIHN0YXR1cyAmIFNDeFNSX1RFTkQocG9ydCkgPyBUSU9DU0VSX1RFTVQgOiAwOworCXVuc2lnbmVkIHNob3J0IGluX3R4X2ZpZm8gPSBzY2lmX3R4ZmlsbChwb3J0KTsKKworCXJldHVybiAoc3RhdHVzICYgU0N4U1JfVEVORChwb3J0KSkgJiYgIWluX3R4X2ZpZm8gPyBUSU9DU0VSX1RFTVQgOiAwOwogfQogCiBzdGF0aWMgdm9pZCBzY2lfc2V0X21jdHJsKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBtY3RybCkKQEAgLTgxMiwxNiArODk5LDI5NyBAQAogCiBzdGF0aWMgdW5zaWduZWQgaW50IHNjaV9nZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQkvKiBUaGlzIHJvdXRpbmUgaXMgdXNlZCBmb3IgZ2V0aW5nIHNpZ25hbHMgb2Y6IERUUiwgRENELCBEU1IsIFJJLAorCS8qIFRoaXMgcm91dGluZSBpcyB1c2VkIGZvciBnZXR0aW5nIHNpZ25hbHMgb2Y6IERUUiwgRENELCBEU1IsIFJJLAogCSAgIGFuZCBDVFMvUlRTICovCiAKIAlyZXR1cm4gVElPQ01fRFRSIHwgVElPQ01fUlRTIHwgVElPQ01fRFNSOwogfQogCisjaWZkZWYgQ09ORklHX1NFUklBTF9TSF9TQ0lfRE1BCitzdGF0aWMgdm9pZCBzY2lfZG1hX3R4X2NvbXBsZXRlKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgc2NpX3BvcnQgKnMgPSBhcmc7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZzLT5wb3J0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGV2X2RiZyhwb3J0LT5kZXYsICIlcyglZClcbiIsIF9fZnVuY19fLCBwb3J0LT5saW5lKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisKKwl4bWl0LT50YWlsICs9IHMtPnNnX3R4Lmxlbmd0aDsKKwl4bWl0LT50YWlsICY9IFVBUlRfWE1JVF9TSVpFIC0gMTsKKworCXBvcnQtPmljb3VudC50eCArPSBzLT5zZ190eC5sZW5ndGg7CisKKwlhc3luY190eF9hY2socy0+ZGVzY190eCk7CisJcy0+Y29va2llX3R4ID0gLUVJTlZBTDsKKwlzLT5kZXNjX3R4ID0gTlVMTDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKworCWlmICh1YXJ0X2NpcmNfY2hhcnNfcGVuZGluZyh4bWl0KSA8IFdBS0VVUF9DSEFSUykKKwkJdWFydF93cml0ZV93YWtldXAocG9ydCk7CisKKwlpZiAodWFydF9jaXJjX2NoYXJzX3BlbmRpbmcoeG1pdCkpCisJCXNjaGVkdWxlX3dvcmsoJnMtPndvcmtfdHgpOworfQorCisvKiBMb2NraW5nOiBjYWxsZWQgd2l0aCBwb3J0IGxvY2sgaGVsZCAqLworc3RhdGljIGludCBzY2lfZG1hX3J4X3B1c2goc3RydWN0IHNjaV9wb3J0ICpzLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LAorCQkJICAgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmcy0+cG9ydDsKKwlpbnQgaSwgYWN0aXZlLCByb29tOworCisJcm9vbSA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgY291bnQpOworCisJaWYgKHMtPmFjdGl2ZV9yeCA9PSBzLT5jb29raWVfcnhbMF0pIHsKKwkJYWN0aXZlID0gMDsKKwl9IGVsc2UgaWYgKHMtPmFjdGl2ZV9yeCA9PSBzLT5jb29raWVfcnhbMV0pIHsKKwkJYWN0aXZlID0gMTsKKwl9IGVsc2UgeworCQlkZXZfZXJyKHBvcnQtPmRldiwgImNvb2tpZSAlZCBub3QgZm91bmQhXG4iLCBzLT5hY3RpdmVfcngpOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAocm9vbSA8IGNvdW50KQorCQlkZXZfd2Fybihwb3J0LT5kZXYsICJSeCBvdmVycnVuOiBkcm9wcGluZyAldSBieXRlc1xuIiwKKwkJCSBjb3VudCAtIHJvb20pOworCWlmICghcm9vbSkKKwkJcmV0dXJuIHJvb207CisKKwlmb3IgKGkgPSAwOyBpIDwgcm9vbTsgaSsrKQorCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksICgodTggKilzZ192aXJ0KCZzLT5zZ19yeFthY3RpdmVdKSlbaV0sCisJCQkJICAgICBUVFlfTk9STUFMKTsKKworCXBvcnQtPmljb3VudC5yeCArPSByb29tOworCisJcmV0dXJuIHJvb207Cit9CisKK3N0YXRpYyB2b2lkIHNjaV9kbWFfcnhfY29tcGxldGUodm9pZCAqYXJnKQoreworCXN0cnVjdCBzY2lfcG9ydCAqcyA9IGFyZzsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJnMtPnBvcnQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSA9IHBvcnQtPnN0YXRlLT5wb3J0LnR0eTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBjb3VudDsKKworCWRldl9kYmcocG9ydC0+ZGV2LCAiJXMoJWQpXG4iLCBfX2Z1bmNfXywgcG9ydC0+bGluZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJY291bnQgPSBzY2lfZG1hX3J4X3B1c2gocywgdHR5LCBzLT5idWZfbGVuX3J4KTsKKworCW1vZF90aW1lcigmcy0+cnhfdGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUpKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKworCWlmIChjb3VudCkKKwkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKworCXNjaGVkdWxlX3dvcmsoJnMtPndvcmtfcngpOworfQorCitzdGF0aWMgdm9pZCBzY2lfc3RhcnRfcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCk7CitzdGF0aWMgdm9pZCBzY2lfc3RhcnRfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCk7CisKK3N0YXRpYyB2b2lkIHNjaV9yeF9kbWFfcmVsZWFzZShzdHJ1Y3Qgc2NpX3BvcnQgKnMsIGJvb2wgZW5hYmxlX3BpbykKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBzLT5jaGFuX3J4OworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmcy0+cG9ydDsKKworCXMtPmNoYW5fcnggPSBOVUxMOworCXMtPmNvb2tpZV9yeFswXSA9IHMtPmNvb2tpZV9yeFsxXSA9IC1FSU5WQUw7CisJZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuKTsKKwlkbWFfZnJlZV9jb2hlcmVudChwb3J0LT5kZXYsIHMtPmJ1Zl9sZW5fcnggKiAyLAorCQkJICBzZ192aXJ0KCZzLT5zZ19yeFswXSksIHNnX2RtYV9hZGRyZXNzKCZzLT5zZ19yeFswXSkpOworCWlmIChlbmFibGVfcGlvKQorCQlzY2lfc3RhcnRfcngocG9ydCk7Cit9CisKK3N0YXRpYyB2b2lkIHNjaV90eF9kbWFfcmVsZWFzZShzdHJ1Y3Qgc2NpX3BvcnQgKnMsIGJvb2wgZW5hYmxlX3BpbykKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBzLT5jaGFuX3R4OworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmcy0+cG9ydDsKKworCXMtPmNoYW5fdHggPSBOVUxMOworCXMtPmNvb2tpZV90eCA9IC1FSU5WQUw7CisJZG1hX3JlbGVhc2VfY2hhbm5lbChjaGFuKTsKKwlpZiAoZW5hYmxlX3BpbykKKwkJc2NpX3N0YXJ0X3R4KHBvcnQpOworfQorCitzdGF0aWMgdm9pZCBzY2lfc3VibWl0X3J4KHN0cnVjdCBzY2lfcG9ydCAqcykKK3sKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBzLT5jaGFuX3J4OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgeworCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gJnMtPnNnX3J4W2ldOworCQlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2M7CisKKwkJZGVzYyA9IGNoYW4tPmRldmljZS0+ZGV2aWNlX3ByZXBfc2xhdmVfc2coY2hhbiwKKwkJCXNnLCAxLCBETUFfRlJPTV9ERVZJQ0UsIERNQV9QUkVQX0lOVEVSUlVQVCk7CisKKwkJaWYgKGRlc2MpIHsKKwkJCXMtPmRlc2NfcnhbaV0gPSBkZXNjOworCQkJZGVzYy0+Y2FsbGJhY2sgPSBzY2lfZG1hX3J4X2NvbXBsZXRlOworCQkJZGVzYy0+Y2FsbGJhY2tfcGFyYW0gPSBzOworCQkJcy0+Y29va2llX3J4W2ldID0gZGVzYy0+dHhfc3VibWl0KGRlc2MpOworCQl9CisKKwkJaWYgKCFkZXNjIHx8IHMtPmNvb2tpZV9yeFtpXSA8IDApIHsKKwkJCWlmIChpKSB7CisJCQkJYXN5bmNfdHhfYWNrKHMtPmRlc2NfcnhbMF0pOworCQkJCXMtPmNvb2tpZV9yeFswXSA9IC1FSU5WQUw7CisJCQl9CisJCQlpZiAoZGVzYykgeworCQkJCWFzeW5jX3R4X2FjayhkZXNjKTsKKwkJCQlzLT5jb29raWVfcnhbaV0gPSAtRUlOVkFMOworCQkJfQorCQkJZGV2X3dhcm4ocy0+cG9ydC5kZXYsCisJCQkJICJmYWlsZWQgdG8gcmUtc3RhcnQgRE1BLCB1c2luZyBQSU9cbiIpOworCQkJc2NpX3J4X2RtYV9yZWxlYXNlKHMsIHRydWUpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJcy0+YWN0aXZlX3J4ID0gcy0+Y29va2llX3J4WzBdOworCisJZG1hX2FzeW5jX2lzc3VlX3BlbmRpbmcoY2hhbik7Cit9CisKK3N0YXRpYyB2b2lkIHdvcmtfZm5fcngoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBzY2lfcG9ydCAqcyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc2NpX3BvcnQsIHdvcmtfcngpOworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmcy0+cG9ydDsKKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IgKmRlc2M7CisJaW50IG5ldzsKKworCWlmIChzLT5hY3RpdmVfcnggPT0gcy0+Y29va2llX3J4WzBdKSB7CisJCW5ldyA9IDA7CisJfSBlbHNlIGlmIChzLT5hY3RpdmVfcnggPT0gcy0+Y29va2llX3J4WzFdKSB7CisJCW5ldyA9IDE7CisJfSBlbHNlIHsKKwkJZGV2X2Vycihwb3J0LT5kZXYsICJjb29raWUgJWQgbm90IGZvdW5kIVxuIiwgcy0+YWN0aXZlX3J4KTsKKwkJcmV0dXJuOworCX0KKwlkZXNjID0gcy0+ZGVzY19yeFtuZXddOworCisJaWYgKGRtYV9hc3luY19pc190eF9jb21wbGV0ZShzLT5jaGFuX3J4LCBzLT5hY3RpdmVfcngsIE5VTEwsIE5VTEwpICE9CisJICAgIERNQV9TVUNDRVNTKSB7CisJCS8qIEhhbmRsZSBpbmNvbXBsZXRlIERNQSByZWNlaXZlICovCisJCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5zdGF0ZS0+cG9ydC50dHk7CisJCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IHMtPmNoYW5fcng7CisJCXN0cnVjdCBzaF9kZXNjICpzaF9kZXNjID0gY29udGFpbmVyX29mKGRlc2MsIHN0cnVjdCBzaF9kZXNjLAorCQkJCQkJICAgICAgIGFzeW5jX3R4KTsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJaW50IGNvdW50OworCisJCWNoYW4tPmRldmljZS0+ZGV2aWNlX3Rlcm1pbmF0ZV9hbGwoY2hhbik7CisJCWRldl9kYmcocG9ydC0+ZGV2LCAiUmVhZCAldSBieXRlcyB3aXRoIGNvb2tpZSAlZFxuIiwKKwkJCXNoX2Rlc2MtPnBhcnRpYWwsIHNoX2Rlc2MtPmNvb2tpZSk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKKwkJY291bnQgPSBzY2lfZG1hX3J4X3B1c2gocywgdHR5LCBzaF9kZXNjLT5wYXJ0aWFsKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOworCisJCWlmIChjb3VudCkKKwkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CisKKwkJc2NpX3N1Ym1pdF9yeChzKTsKKworCQlyZXR1cm47CisJfQorCisJcy0+Y29va2llX3J4W25ld10gPSBkZXNjLT50eF9zdWJtaXQoZGVzYyk7CisJaWYgKHMtPmNvb2tpZV9yeFtuZXddIDwgMCkgeworCQlkZXZfd2Fybihwb3J0LT5kZXYsICJGYWlsZWQgc3VibWl0dGluZyBSeCBETUEgZGVzY3JpcHRvclxuIik7CisJCXNjaV9yeF9kbWFfcmVsZWFzZShzLCB0cnVlKTsKKwkJcmV0dXJuOworCX0KKworCWRldl9kYmcocG9ydC0+ZGV2LCAiJXM6IGNvb2tpZSAlZCAjJWRcbiIsIF9fZnVuY19fLAorCQlzLT5jb29raWVfcnhbbmV3XSwgbmV3KTsKKworCXMtPmFjdGl2ZV9yeCA9IHMtPmNvb2tpZV9yeFshbmV3XTsKK30KKworc3RhdGljIHZvaWQgd29ya19mbl90eChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHNjaV9wb3J0ICpzID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBzY2lfcG9ydCwgd29ya190eCk7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICpkZXNjOworCXN0cnVjdCBkbWFfY2hhbiAqY2hhbiA9IHMtPmNoYW5fdHg7CisJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZzLT5wb3J0OworCXN0cnVjdCBjaXJjX2J1ZiAqeG1pdCA9ICZwb3J0LT5zdGF0ZS0+eG1pdDsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gJnMtPnNnX3R4OworCisJLyoKKwkgKiBETUEgaXMgaWRsZSBub3cuCisJICogUG9ydCB4bWl0IGJ1ZmZlciBpcyBhbHJlYWR5IG1hcHBlZCwgYW5kIGl0IGlzIG9uZSBwYWdlLi4uIEp1c3QgYWRqdXN0CisJICogb2Zmc2V0cyBhbmQgbGVuZ3Rocy4gU2luY2UgaXQgaXMgYSBjaXJjdWxhciBidWZmZXIsIHdlIGhhdmUgdG8KKwkgKiB0cmFuc21pdCB0aWxsIHRoZSBlbmQsIGFuZCB0aGVuIHRoZSByZXN0LiBUYWtlIHRoZSBwb3J0IGxvY2sgdG8gZ2V0IGEKKwkgKiBjb25zaXN0ZW50IHhtaXQgYnVmZmVyIHN0YXRlLgorCSAqLworCXNwaW5fbG9ja19pcnEoJnBvcnQtPmxvY2spOworCXNnLT5vZmZzZXQgPSB4bWl0LT50YWlsICYgKFVBUlRfWE1JVF9TSVpFIC0gMSk7CisJc2ctPmRtYV9hZGRyZXNzID0gKHNnX2RtYV9hZGRyZXNzKHNnKSAmIH4oVUFSVF9YTUlUX1NJWkUgLSAxKSkgKworCQlzZy0+b2Zmc2V0OworCXNnLT5sZW5ndGggPSBtaW4oKGludClDSVJDX0NOVCh4bWl0LT5oZWFkLCB4bWl0LT50YWlsLCBVQVJUX1hNSVRfU0laRSksCisJCUNJUkNfQ05UX1RPX0VORCh4bWl0LT5oZWFkLCB4bWl0LT50YWlsLCBVQVJUX1hNSVRfU0laRSkpOworCXNnLT5kbWFfbGVuZ3RoID0gc2ctPmxlbmd0aDsKKwlzcGluX3VubG9ja19pcnEoJnBvcnQtPmxvY2spOworCisJQlVHX09OKCFzZy0+bGVuZ3RoKTsKKworCWRlc2MgPSBjaGFuLT5kZXZpY2UtPmRldmljZV9wcmVwX3NsYXZlX3NnKGNoYW4sCisJCQlzZywgcy0+c2dfbGVuX3R4LCBETUFfVE9fREVWSUNFLAorCQkJRE1BX1BSRVBfSU5URVJSVVBUIHwgRE1BX0NUUkxfQUNLKTsKKwlpZiAoIWRlc2MpIHsKKwkJLyogc3dpdGNoIHRvIFBJTyAqLworCQlzY2lfdHhfZG1hX3JlbGVhc2UocywgdHJ1ZSk7CisJCXJldHVybjsKKwl9CisKKwlkbWFfc3luY19zZ19mb3JfZGV2aWNlKHBvcnQtPmRldiwgc2csIDEsIERNQV9UT19ERVZJQ0UpOworCisJc3Bpbl9sb2NrX2lycSgmcG9ydC0+bG9jayk7CisJcy0+ZGVzY190eCA9IGRlc2M7CisJZGVzYy0+Y2FsbGJhY2sgPSBzY2lfZG1hX3R4X2NvbXBsZXRlOworCWRlc2MtPmNhbGxiYWNrX3BhcmFtID0gczsKKwlzcGluX3VubG9ja19pcnEoJnBvcnQtPmxvY2spOworCXMtPmNvb2tpZV90eCA9IGRlc2MtPnR4X3N1Ym1pdChkZXNjKTsKKwlpZiAocy0+Y29va2llX3R4IDwgMCkgeworCQlkZXZfd2Fybihwb3J0LT5kZXYsICJGYWlsZWQgc3VibWl0dGluZyBUeCBETUEgZGVzY3JpcHRvclxuIik7CisJCS8qIHN3aXRjaCB0byBQSU8gKi8KKwkJc2NpX3R4X2RtYV9yZWxlYXNlKHMsIHRydWUpOworCQlyZXR1cm47CisJfQorCisJZGV2X2RiZyhwb3J0LT5kZXYsICIlczogJXA6ICVkLi4uJWQsIGNvb2tpZSAlZFxuIiwgX19mdW5jX18sCisJCXhtaXQtPmJ1ZiwgeG1pdC0+dGFpbCwgeG1pdC0+aGVhZCwgcy0+Y29va2llX3R4KTsKKworCWRtYV9hc3luY19pc3N1ZV9wZW5kaW5nKGNoYW4pOworfQorI2VuZGlmCisKIHN0YXRpYyB2b2lkIHNjaV9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXVuc2lnbmVkIHNob3J0IGN0cmw7CiAKKyNpZmRlZiBDT05GSUdfU0VSSUFMX1NIX1NDSV9ETUEKKwlzdHJ1Y3Qgc2NpX3BvcnQgKnMgPSB0b19zY2lfcG9ydChwb3J0KTsKKworCWlmIChzLT5jaGFuX3R4KSB7CisJCWlmICghdWFydF9jaXJjX2VtcHR5KCZzLT5wb3J0LnN0YXRlLT54bWl0KSAmJiBzLT5jb29raWVfdHggPCAwKQorCQkJc2NoZWR1bGVfd29yaygmcy0+d29ya190eCk7CisKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCiAJLyogU2V0IFRJRSAoVHJhbnNtaXQgSW50ZXJydXB0IEVuYWJsZSkgYml0IGluIFNDU0NSICovCiAJY3RybCA9IHNjaV9pbihwb3J0LCBTQ1NDUik7CiAJY3RybCB8PSBTQ0lfQ1RSTF9GTEFHU19USUU7CkBAIC04MzgsMTMgKzEyMDYsMTIgQEAKIAlzY2lfb3V0KHBvcnQsIFNDU0NSLCBjdHJsKTsKIH0KIAotc3RhdGljIHZvaWQgc2NpX3N0YXJ0X3J4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCB0dHlfc3RhcnQpCitzdGF0aWMgdm9pZCBzY2lfc3RhcnRfcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQl1bnNpZ25lZCBzaG9ydCBjdHJsOworCXVuc2lnbmVkIHNob3J0IGN0cmwgPSBTQ0lfQ1RSTF9GTEFHU19SSUUgfCBTQ0lfQ1RSTF9GTEFHU19SRUlFOwogCiAJLyogU2V0IFJJRSAoUmVjZWl2ZSBJbnRlcnJ1cHQgRW5hYmxlKSBiaXQgaW4gU0NTQ1IgKi8KLQljdHJsID0gc2NpX2luKHBvcnQsIFNDU0NSKTsKLQljdHJsIHw9IFNDSV9DVFJMX0ZMQUdTX1JJRSB8IFNDSV9DVFJMX0ZMQUdTX1JFSUU7CisJY3RybCB8PSBzY2lfaW4ocG9ydCwgU0NTQ1IpOwogCXNjaV9vdXQocG9ydCwgU0NTQ1IsIGN0cmwpOwogfQogCkBAIC04NjgsMTYgKzEyMzUsMTU0IEBACiAJLyogTm90aGluZyBoZXJlIHlldCAuLiAqLwogfQogCisjaWZkZWYgQ09ORklHX1NFUklBTF9TSF9TQ0lfRE1BCitzdGF0aWMgYm9vbCBmaWx0ZXIoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB2b2lkICpzbGF2ZSkKK3sKKwlzdHJ1Y3Qgc2hfZG1hZV9zbGF2ZSAqcGFyYW0gPSBzbGF2ZTsKKworCWRldl9kYmcoY2hhbi0+ZGV2aWNlLT5kZXYsICIlczogc2xhdmUgSUQgJWRcbiIsIF9fZnVuY19fLAorCQlwYXJhbS0+c2xhdmVfaWQpOworCisJaWYgKHBhcmFtLT5kbWFfZGV2ID09IGNoYW4tPmRldmljZS0+ZGV2KSB7CisJCWNoYW4tPnByaXZhdGUgPSBwYXJhbTsKKwkJcmV0dXJuIHRydWU7CisJfSBlbHNlIHsKKwkJcmV0dXJuIGZhbHNlOworCX0KK30KKworc3RhdGljIHZvaWQgcnhfdGltZXJfZm4odW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IHNjaV9wb3J0ICpzID0gKHN0cnVjdCBzY2lfcG9ydCAqKWFyZzsKKwlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gJnMtPnBvcnQ7CisKKwl1MTYgc2NyID0gc2NpX2luKHBvcnQsIFNDU0NSKTsKKwlzY2lfb3V0KHBvcnQsIFNDU0NSLCBzY3IgfCBTQ0lfQ1RSTF9GTEFHU19SSUUpOworCWRldl9kYmcocG9ydC0+ZGV2LCAiRE1BIFJ4IHRpbWVkIG91dFxuIik7CisJc2NoZWR1bGVfd29yaygmcy0+d29ya19yeCk7Cit9CisKK3N0YXRpYyB2b2lkIHNjaV9yZXF1ZXN0X2RtYShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBzY2lfcG9ydCAqcyA9IHRvX3NjaV9wb3J0KHBvcnQpOworCXN0cnVjdCBzaF9kbWFlX3NsYXZlICpwYXJhbTsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW47CisJZG1hX2NhcF9tYXNrX3QgbWFzazsKKwlpbnQgbmVudDsKKworCWRldl9kYmcocG9ydC0+ZGV2LCAiJXM6IHBvcnQgJWQgRE1BICVwXG4iLCBfX2Z1bmNfXywKKwkJcG9ydC0+bGluZSwgcy0+ZG1hX2Rldik7CisKKwlpZiAoIXMtPmRtYV9kZXYpCisJCXJldHVybjsKKworCWRtYV9jYXBfemVybyhtYXNrKTsKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCisJcGFyYW0gPSAmcy0+cGFyYW1fdHg7CisKKwkvKiBTbGF2ZSBJRCwgZS5nLiwgU0hETUFfU0xBVkVfU0NJRjBfVFggKi8KKwlwYXJhbS0+c2xhdmVfaWQgPSBzLT5zbGF2ZV90eDsKKwlwYXJhbS0+ZG1hX2RldiA9IHMtPmRtYV9kZXY7CisKKwlzLT5jb29raWVfdHggPSAtRUlOVkFMOworCWNoYW4gPSBkbWFfcmVxdWVzdF9jaGFubmVsKG1hc2ssIGZpbHRlciwgcGFyYW0pOworCWRldl9kYmcocG9ydC0+ZGV2LCAiJXM6IFRYOiBnb3QgY2hhbm5lbCAlcFxuIiwgX19mdW5jX18sIGNoYW4pOworCWlmIChjaGFuKSB7CisJCXMtPmNoYW5fdHggPSBjaGFuOworCQlzZ19pbml0X3RhYmxlKCZzLT5zZ190eCwgMSk7CisJCS8qIFVBUlQgY2lyY3VsYXIgdHggYnVmZmVyIGlzIGFuIGFsaWduZWQgcGFnZS4gKi8KKwkJQlVHX09OKChpbnQpcG9ydC0+c3RhdGUtPnhtaXQuYnVmICYgflBBR0VfTUFTSyk7CisJCXNnX3NldF9wYWdlKCZzLT5zZ190eCwgdmlydF90b19wYWdlKHBvcnQtPnN0YXRlLT54bWl0LmJ1ZiksCisJCQkgICAgVUFSVF9YTUlUX1NJWkUsIChpbnQpcG9ydC0+c3RhdGUtPnhtaXQuYnVmICYgflBBR0VfTUFTSyk7CisJCW5lbnQgPSBkbWFfbWFwX3NnKHBvcnQtPmRldiwgJnMtPnNnX3R4LCAxLCBETUFfVE9fREVWSUNFKTsKKwkJaWYgKCFuZW50KQorCQkJc2NpX3R4X2RtYV9yZWxlYXNlKHMsIGZhbHNlKTsKKwkJZWxzZQorCQkJZGV2X2RiZyhwb3J0LT5kZXYsICIlczogbWFwcGVkICVkQCVwIHRvICV4XG4iLCBfX2Z1bmNfXywKKwkJCQlzZ19kbWFfbGVuKCZzLT5zZ190eCksCisJCQkJcG9ydC0+c3RhdGUtPnhtaXQuYnVmLCBzZ19kbWFfYWRkcmVzcygmcy0+c2dfdHgpKTsKKworCQlzLT5zZ19sZW5fdHggPSBuZW50OworCisJCUlOSVRfV09SSygmcy0+d29ya190eCwgd29ya19mbl90eCk7CisJfQorCisJcGFyYW0gPSAmcy0+cGFyYW1fcng7CisKKwkvKiBTbGF2ZSBJRCwgZS5nLiwgU0hETUFfU0xBVkVfU0NJRjBfUlggKi8KKwlwYXJhbS0+c2xhdmVfaWQgPSBzLT5zbGF2ZV9yeDsKKwlwYXJhbS0+ZG1hX2RldiA9IHMtPmRtYV9kZXY7CisKKwljaGFuID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBmaWx0ZXIsIHBhcmFtKTsKKwlkZXZfZGJnKHBvcnQtPmRldiwgIiVzOiBSWDogZ290IGNoYW5uZWwgJXBcbiIsIF9fZnVuY19fLCBjaGFuKTsKKwlpZiAoY2hhbikgeworCQlkbWFfYWRkcl90IGRtYVsyXTsKKwkJdm9pZCAqYnVmWzJdOworCQlpbnQgaTsKKworCQlzLT5jaGFuX3J4ID0gY2hhbjsKKworCQlzLT5idWZfbGVuX3J4ID0gMiAqIG1heCgxNiwgKGludClwb3J0LT5maWZvc2l6ZSk7CisJCWJ1ZlswXSA9IGRtYV9hbGxvY19jb2hlcmVudChwb3J0LT5kZXYsIHMtPmJ1Zl9sZW5fcnggKiAyLAorCQkJCQkgICAgJmRtYVswXSwgR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFidWZbMF0pIHsKKwkJCWRldl93YXJuKHBvcnQtPmRldiwKKwkJCQkgImZhaWxlZCB0byBhbGxvY2F0ZSBkbWEgYnVmZmVyLCB1c2luZyBQSU9cbiIpOworCQkJc2NpX3J4X2RtYV9yZWxlYXNlKHMsIHRydWUpOworCQkJcmV0dXJuOworCQl9CisKKwkJYnVmWzFdID0gYnVmWzBdICsgcy0+YnVmX2xlbl9yeDsKKwkJZG1hWzFdID0gZG1hWzBdICsgcy0+YnVmX2xlbl9yeDsKKworCQlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gJnMtPnNnX3J4W2ldOworCisJCQlzZ19pbml0X3RhYmxlKHNnLCAxKTsKKwkJCXNnX3NldF9wYWdlKHNnLCB2aXJ0X3RvX3BhZ2UoYnVmW2ldKSwgcy0+YnVmX2xlbl9yeCwKKwkJCQkgICAgKGludClidWZbaV0gJiB+UEFHRV9NQVNLKTsKKwkJCXNnLT5kbWFfYWRkcmVzcyA9IGRtYVtpXTsKKwkJCXNnLT5kbWFfbGVuZ3RoID0gc2ctPmxlbmd0aDsKKwkJfQorCisJCUlOSVRfV09SSygmcy0+d29ya19yeCwgd29ya19mbl9yeCk7CisJCXNldHVwX3RpbWVyKCZzLT5yeF90aW1lciwgcnhfdGltZXJfZm4sICh1bnNpZ25lZCBsb25nKXMpOworCisJCXNjaV9zdWJtaXRfcngocyk7CisJfQorfQorCitzdGF0aWMgdm9pZCBzY2lfZnJlZV9kbWEoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3Qgc2NpX3BvcnQgKnMgPSB0b19zY2lfcG9ydChwb3J0KTsKKworCWlmICghcy0+ZG1hX2RldikKKwkJcmV0dXJuOworCisJaWYgKHMtPmNoYW5fdHgpCisJCXNjaV90eF9kbWFfcmVsZWFzZShzLCBmYWxzZSk7CisJaWYgKHMtPmNoYW5fcngpCisJCXNjaV9yeF9kbWFfcmVsZWFzZShzLCBmYWxzZSk7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBzY2lfc3RhcnR1cChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBzY2lfcG9ydCAqcyA9IHRvX3NjaV9wb3J0KHBvcnQpOwogCisJZGV2X2RiZyhwb3J0LT5kZXYsICIlcyglZClcbiIsIF9fZnVuY19fLCBwb3J0LT5saW5lKTsKKwogCWlmIChzLT5lbmFibGUpCiAJCXMtPmVuYWJsZShwb3J0KTsKIAogCXNjaV9yZXF1ZXN0X2lycShzKTsKKyNpZmRlZiBDT05GSUdfU0VSSUFMX1NIX1NDSV9ETUEKKwlzY2lfcmVxdWVzdF9kbWEocG9ydCk7CisjZW5kaWYKIAlzY2lfc3RhcnRfdHgocG9ydCk7Ci0Jc2NpX3N0YXJ0X3J4KHBvcnQsIDEpOworCXNjaV9zdGFydF9yeChwb3J0KTsKIAogCXJldHVybiAwOwogfQpAQCAtODg2LDggKzEzOTEsMTMgQEAKIHsKIAlzdHJ1Y3Qgc2NpX3BvcnQgKnMgPSB0b19zY2lfcG9ydChwb3J0KTsKIAorCWRldl9kYmcocG9ydC0+ZGV2LCAiJXMoJWQpXG4iLCBfX2Z1bmNfXywgcG9ydC0+bGluZSk7CisKIAlzY2lfc3RvcF9yeChwb3J0KTsKIAlzY2lfc3RvcF90eChwb3J0KTsKKyNpZmRlZiBDT05GSUdfU0VSSUFMX1NIX1NDSV9ETUEKKwlzY2lfZnJlZV9kbWEocG9ydCk7CisjZW5kaWYKIAlzY2lfZnJlZV9pcnEocyk7CiAKIAlpZiAocy0+ZGlzYWJsZSkKQEAgLTkzNyw2ICsxNDQ3LDkgQEAKIAogCXNjaV9vdXQocG9ydCwgU0NTTVIsIHNtcl92YWwpOwogCisJZGV2X2RiZyhwb3J0LT5kZXYsICIlczogU01SICV4LCB0ICV4LCBTQ1NDUiAleFxuIiwgX19mdW5jX18sIHNtcl92YWwsIHQsCisJCVNDU0NSX0lOSVQocG9ydCkpOworCiAJaWYgKHQgPiAwKSB7CiAJCWlmICh0ID49IDI1NikgewogCQkJc2NpX291dChwb3J0LCBTQ1NNUiwgKHNjaV9pbihwb3J0LCBTQ1NNUikgJiB+MykgfCAxKTsKQEAgLTk1NCw3ICsxNDY3LDcgQEAKIAlzY2lfb3V0KHBvcnQsIFNDU0NSLCBTQ1NDUl9JTklUKHBvcnQpKTsKIAogCWlmICgodGVybWlvcy0+Y19jZmxhZyAmIENSRUFEKSAhPSAwKQotCQlzY2lfc3RhcnRfcngocG9ydCwgMCk7CisJCXNjaV9zdGFydF9yeChwb3J0KTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgKnNjaV90eXBlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCkBAIC0xMDQ5LDE5ICsxNTYyLDIxIEBACiAJCQkJICAgICAgdW5zaWduZWQgaW50IGluZGV4LAogCQkJCSAgICAgIHN0cnVjdCBwbGF0X3NjaV9wb3J0ICpwKQogewotCXNjaV9wb3J0LT5wb3J0Lm9wcwk9ICZzY2lfdWFydF9vcHM7Ci0Jc2NpX3BvcnQtPnBvcnQuaW90eXBlCT0gVVBJT19NRU07Ci0Jc2NpX3BvcnQtPnBvcnQubGluZQk9IGluZGV4OworCXN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQgPSAmc2NpX3BvcnQtPnBvcnQ7CisKKwlwb3J0LT5vcHMJPSAmc2NpX3VhcnRfb3BzOworCXBvcnQtPmlvdHlwZQk9IFVQSU9fTUVNOworCXBvcnQtPmxpbmUJPSBpbmRleDsKIAogCXN3aXRjaCAocC0+dHlwZSkgewogCWNhc2UgUE9SVF9TQ0lGQToKLQkJc2NpX3BvcnQtPnBvcnQuZmlmb3NpemUgPSA2NDsKKwkJcG9ydC0+Zmlmb3NpemUgPSA2NDsKIAkJYnJlYWs7CiAJY2FzZSBQT1JUX1NDSUY6Ci0JCXNjaV9wb3J0LT5wb3J0LmZpZm9zaXplID0gMTY7CisJCXBvcnQtPmZpZm9zaXplID0gMTY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXNjaV9wb3J0LT5wb3J0LmZpZm9zaXplID0gMTsKKwkJcG9ydC0+Zmlmb3NpemUgPSAxOwogCQlicmVhazsKIAl9CiAKQEAgLTEwNzAsMTkgKzE1ODUsMjggQEAKIAkJc2NpX3BvcnQtPmRjbGsgPSBjbGtfZ2V0KCZkZXYtPmRldiwgInBlcmlwaGVyYWxfY2xrIik7CiAJCXNjaV9wb3J0LT5lbmFibGUgPSBzY2lfY2xrX2VuYWJsZTsKIAkJc2NpX3BvcnQtPmRpc2FibGUgPSBzY2lfY2xrX2Rpc2FibGU7Ci0JCXNjaV9wb3J0LT5wb3J0LmRldiA9ICZkZXYtPmRldjsKKwkJcG9ydC0+ZGV2ID0gJmRldi0+ZGV2OwogCX0KIAogCXNjaV9wb3J0LT5icmVha190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpc2NpX3BvcnQ7CiAJc2NpX3BvcnQtPmJyZWFrX3RpbWVyLmZ1bmN0aW9uID0gc2NpX2JyZWFrX3RpbWVyOwogCWluaXRfdGltZXIoJnNjaV9wb3J0LT5icmVha190aW1lcik7CiAKLQlzY2lfcG9ydC0+cG9ydC5tYXBiYXNlCT0gcC0+bWFwYmFzZTsKLQlzY2lfcG9ydC0+cG9ydC5tZW1iYXNlCT0gcC0+bWVtYmFzZTsKKwlwb3J0LT5tYXBiYXNlCT0gcC0+bWFwYmFzZTsKKwlwb3J0LT5tZW1iYXNlCT0gcC0+bWVtYmFzZTsKIAotCXNjaV9wb3J0LT5wb3J0LmlycQk9IHAtPmlycXNbU0NJeF9UWElfSVJRXTsKLQlzY2lfcG9ydC0+cG9ydC5mbGFncwk9IHAtPmZsYWdzOwotCXNjaV9wb3J0LT50eXBlCQk9IHNjaV9wb3J0LT5wb3J0LnR5cGUgPSBwLT50eXBlOworCXBvcnQtPmlycQk9IHAtPmlycXNbU0NJeF9UWElfSVJRXTsKKwlwb3J0LT5mbGFncwk9IHAtPmZsYWdzOworCXNjaV9wb3J0LT50eXBlCT0gcG9ydC0+dHlwZSA9IHAtPnR5cGU7CisKKyNpZmRlZiBDT05GSUdfU0VSSUFMX1NIX1NDSV9ETUEKKwlzY2lfcG9ydC0+ZG1hX2Rldgk9IHAtPmRtYV9kZXY7CisJc2NpX3BvcnQtPnNsYXZlX3R4CT0gcC0+ZG1hX3NsYXZlX3R4OworCXNjaV9wb3J0LT5zbGF2ZV9yeAk9IHAtPmRtYV9zbGF2ZV9yeDsKKworCWRldl9kYmcocG9ydC0+ZGV2LCAiJXM6IERNQSBkZXZpY2UgJXAsIHR4ICVkLCByeCAlZFxuIiwgX19mdW5jX18sCisJCXAtPmRtYV9kZXYsIHAtPmRtYV9zbGF2ZV90eCwgcC0+ZG1hX3NsYXZlX3J4KTsKKyNlbmRpZgogCiAJbWVtY3B5KCZzY2lfcG9ydC0+aXJxcywgJnAtPmlycXMsIHNpemVvZihwLT5pcnFzKSk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaCBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCmluZGV4IGY3ZDI1ODkuLmZhZDY3ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCisrKyBiL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5oCkBAIC0zMCw3ICszMCw4IEBACiAgKi8KICMgZGVmaW5lIFNDU0NSX0lOSVQocG9ydCkgKHBvcnQtPm1hcGJhc2UgPT0gU0NJRjIpID8gMHhGMyA6IDB4RjAKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKQorICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NITU9CSUxFKQogIyBkZWZpbmUgU0NTQ1JfSU5JVChwb3J0KSAgMHgwMDMwIC8qIFRJRT0wLFJJRT0wLFRFPTEsUkU9MSAqLwogIyBkZWZpbmUgUE9SVF9QVENSCSAgIDB4QTQwNTAxMUVVTAogIyBkZWZpbmUgUE9SVF9QVkNSCSAgIDB4QTQwNTAxMjJVTApAQCAtMjI4LDcgKzIyOSw4IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQVJDSF9TSE1PQklMRSkKICMgZGVmaW5lIFNDSUZfT1JFUiAgICAweDAyMDAKICMgZGVmaW5lIFNDSUZfRVJST1JTICggU0NJRl9QRVIgfCBTQ0lGX0ZFUiB8IFNDSUZfRVIgfCBTQ0lGX0JSSyB8IFNDSUZfT1JFUikKICMgZGVmaW5lIFNDSUZfUkZEQ19NQVNLIDB4MDA3ZgpAQCAtMjYxLDcgKzI2Myw4IEBACiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjEpCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQVJDSF9TSE1PQklMRSkKICMgZGVmaW5lIFNDeFNSX1JEeEZfQ0xFQVIocG9ydCkJIChzY2lfaW4ocG9ydCwgU0N4U1IpICYgMHhmZmZjKQogIyBkZWZpbmUgU0N4U1JfRVJST1JfQ0xFQVIocG9ydCkgKHNjaV9pbihwb3J0LCBTQ3hTUikgJiAweGZkNzMpCiAjIGRlZmluZSBTQ3hTUl9URHhFX0NMRUFSKHBvcnQpCSAoc2NpX2luKHBvcnQsIFNDeFNSKSAmIDB4ZmZkZikKQEAgLTM1Niw3ICszNTksNyBAQAogICAgIFNDSV9PVVQoc2NpX3NpemUsIHNjaV9vZmZzZXQsIHZhbHVlKTsJCQkJXAogICB9CiAKLSNpZmRlZiBDT05GSUdfQ1BVX1NIMworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfU0hNT0JJTEUpCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTIpCiAjZGVmaW5lIFNDSXhfRk5TKG5hbWUsIHNoM19zY2lfb2Zmc2V0LCBzaDNfc2NpX3NpemUsIHNoNF9zY2lfb2Zmc2V0LCBzaDRfc2NpX3NpemUsIFwKIAkJICAgICAgICAgICAgICAgIHNoM19zY2lmX29mZnNldCwgc2gzX3NjaWZfc2l6ZSwgc2g0X3NjaWZfb2Zmc2V0LCBzaDRfc2NpZl9zaXplLCBcCkBAIC0zNjYsNyArMzY5LDggQEAKIAkgIENQVV9TQ0lGX0ZOUyhuYW1lLCBzaDRfc2NpZl9vZmZzZXQsIHNoNF9zY2lmX3NpemUpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMCkgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKQorICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19BUkNIX1NITU9CSUxFKQogI2RlZmluZSBTQ0lGX0ZOUyhuYW1lLCBzY2lmX29mZnNldCwgc2NpZl9zaXplKSBcCiAgIENQVV9TQ0lGX0ZOUyhuYW1lLCBzY2lmX29mZnNldCwgc2NpZl9zaXplKQogI2Vsc2UKQEAgLTQwMSw3ICs0MDUsOCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBcCi0gICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKQorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0FSQ0hfU0hNT0JJTEUpCiAKIFNDSUZfRk5TKFNDU01SLCAgMHgwMCwgMTYpCiBTQ0lGX0ZOUyhTQ0JSUiwgIDB4MDQsICA4KQpAQCAtNDEzLDcgKzQxOCw3IEBACiBTQ0lGX0ZOUyhTQ0ZEUiwgIDB4MWMsIDE2KQogU0NJRl9GTlMoU0N4VERSLCAweDIwLCAgOCkKIFNDSUZfRk5TKFNDeFJEUiwgMHgyNCwgIDgpCi1TQ0lGX0ZOUyhTQ0xTUiwgIDB4MjQsIDE2KQorU0NJRl9GTlMoU0NMU1IsICAweDAwLCAgMCkKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMykgfHxcCiAgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjQpCiBTQ0l4X0ZOUyhTQ1NNUiwgIDB4MDAsIDE2LCAweDAwLCAxNikKQEAgLTU4Myw3ICs1ODgsOCBAQAogI2RlZmluZSBTQ0JSUl9WQUxVRShicHMsIGNsaykgKChjbGsrMTYqYnBzKS8oMTYqYnBzKS0xKQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjApIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkKKyAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyMSkgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfQVJDSF9TSE1PQklMRSkKICNkZWZpbmUgU0NCUlJfVkFMVUUoYnBzLCBjbGspICgoKGNsayoyKSsxNipicHMpLygzMipicHMpLTEpCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjMpIHx8XAogICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzI0KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvdGltYnVhcnQuYyBiL2RyaXZlcnMvc2VyaWFsL3RpbWJ1YXJ0LmMKaW5kZXggMzRiMzFkYTAuLjdiZjEwMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsL3RpbWJ1YXJ0LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvdGltYnVhcnQuYwpAQCAtNDIxLDcgKzQyMSw3IEBACiAKIHN0YXRpYyBpbnQgdGltYnVhcnRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewotCWludCBlcnI7CisJaW50IGVyciwgaXJxOwogCXN0cnVjdCB0aW1idWFydF9wb3J0ICp1YXJ0OwogCXN0cnVjdCByZXNvdXJjZSAqaW9tZW07CiAKQEAgLTQ1MywxMSArNDUzLDEyIEBACiAJdWFydC0+cG9ydC5tYXBiYXNlID0gaW9tZW0tPnN0YXJ0OwogCXVhcnQtPnBvcnQubWVtYmFzZSA9IE5VTEw7CiAKLQl1YXJ0LT5wb3J0LmlycSA9IHBsYXRmb3JtX2dldF9pcnEoZGV2LCAwKTsKLQlpZiAodWFydC0+cG9ydC5pcnEgPCAwKSB7CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CiAJCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3JlZ2lzdGVyOwogCX0KKwl1YXJ0LT5wb3J0LmlycSA9IGlycTsKIAogCXRhc2tsZXRfaW5pdCgmdWFydC0+dGFza2xldCwgdGltYnVhcnRfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcpdWFydCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2gvaW50Yy5jIGIvZHJpdmVycy9zaC9pbnRjLmMKaW5kZXggM2E1YTE3ZC4uYzI3NTAzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zaC9pbnRjLmMKKysrIGIvZHJpdmVycy9zaC9pbnRjLmMKQEAgLTc2Miw2ICs3NjIsMTAgQEAKIAogCWlmIChkZXNjLT5ody5hY2tfcmVncykKIAkJYWNrX2hhbmRsZVtpcnFdID0gaW50Y19hY2tfZGF0YShkZXNjLCBkLCBlbnVtX2lkKTsKKworI2lmZGVmIENPTkZJR19BUk0KKwlzZXRfaXJxX2ZsYWdzKGlycSwgSVJRRl9WQUxJRCk7IC8qIEVuYWJsZSBJUlEgb24gQVJNIHN5c3RlbXMgKi8KKyNlbmRpZgogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdCBzYXZlX3JlZyhzdHJ1Y3QgaW50Y19kZXNjX2ludCAqZCwKQEAgLTEwMjQsOCArMTAyOCwxMiBAQAogb3V0X3VubG9jazoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwogCi0JaWYgKGlycSA+IDApCisJaWYgKGlycSA+IDApIHsKIAkJZHluYW1pY19pcnFfaW5pdChpcnEpOworI2lmZGVmIENPTkZJR19BUk0KKwkJc2V0X2lycV9mbGFncyhpcnEsIElSUUZfVkFMSUQpOyAvKiBFbmFibGUgSVJRIG9uIEFSTSBzeXN0ZW1zICovCisjZW5kaWYKKwl9CiAKIAlyZXR1cm4gaXJxOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkvS2NvbmZpZyBiL2RyaXZlcnMvc3BpL0tjb25maWcKaW5kZXggMGZlZTk1Yy4uYTE5MWZhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zcGkvS2NvbmZpZworKysgYi9kcml2ZXJzL3NwaS9LY29uZmlnCkBAIC0xODEsNyArMTgxLDcgQEAKIAogY29uZmlnIFNQSV9PTUFQMjRYWAogCXRyaXN0YXRlICJNY1NQSSBkcml2ZXIgZm9yIE9NQVAyNHh4L09NQVAzNHh4IgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMjRYWCB8fCBBUkNIX09NQVAzNFhYCisJZGVwZW5kcyBvbiBBUkNIX09NQVAyIHx8IEFSQ0hfT01BUDMKIAloZWxwCiAJICBTUEkgbWFzdGVyIGNvbnRyb2xsZXIgZm9yIE9NQVAyNHh4L09NQVAzNHh4IE11bHRpY2hhbm5lbCBTUEkKIAkgIChNY1NQSSkgbW9kdWxlcy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMgYi9kcml2ZXJzL3NwaS9vbWFwMl9tY3NwaS5jCmluZGV4IGJmNWY5NWEuLjcxNWM1MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL29tYXAyX21jc3BpLmMKKysrIGIvZHJpdmVycy9zcGkvb21hcDJfbWNzcGkuYwpAQCAtMTAxNCw3ICsxMDE0LDcgQEAKIAlPTUFQMjRYWF9ETUFfU1BJMl9UWDEsCiB9OwogCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgXAorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpIFwKIAl8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVA0KQogc3RhdGljIHU4IF9faW5pdGRhdGEgc3BpM19yeGRtYV9pZFtdID0gewogCU9NQVAyNFhYX0RNQV9TUEkzX1JYMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMgYi9kcml2ZXJzL3NwaS9zcGlfczNjMjR4eC5jCmluZGV4IGMwMTA3MzMuLjFmYWJlZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3NwaV9zM2MyNHh4LmMKKysrIGIvZHJpdmVycy9zcGkvc3BpX3MzYzI0eHguYwpAQCAtMjc1LDcgKzI3NSw3IEBACiAgKiBDbGFpbSB0aGUgRklRIGhhbmRsZXIgKG9ubHkgb25lIGNhbiBiZSBhY3RpdmUgYXQgYW55IG9uZSB0aW1lKSBhbmQKICAqIHRoZW4gc2V0dXAgdGhlIGNvcnJlY3QgdHJhbnNmZXIgY29kZSBmb3IgdGhpcyB0cmFuc2Zlci4KICAqCi0gKiBUaGlzIGNhbGwgdXBkYXRlcyBhbGwgdGhlIG5lY2Vzc2FyeSBzdGF0ZSBpbmZvcm1hdGlvbiBpZiBzdWNlc3NmdWwsCisgKiBUaGlzIGNhbGwgdXBkYXRlcyBhbGwgdGhlIG5lY2Vzc2FyeSBzdGF0ZSBpbmZvcm1hdGlvbiBpZiBzdWNjZXNzZnVsLAogICogc28gdGhlIGNhbGxlciBkb2VzIG5vdCBuZWVkIHRvIGRvIGFueXRoaW5nIG1vcmUgdGhhbiBzdGFydCB0aGUgdHJhbnNmZXIKICAqIGFzIG5vcm1hbCwgc2luY2UgdGhlIElSUSB3aWxsIGhhdmUgYmVlbiByZS1yb3V0ZWQgdG8gdGhlIEZJUSBoYW5kbGVyLgogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL2RyaXZlcl9jaGlwY29tbW9uX3BtdS5jIGIvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb25fcG11LmMKaW5kZXggNjRhYmQxMS4uM2Q1NTEyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb25fcG11LmMKKysrIGIvZHJpdmVycy9zc2IvZHJpdmVyX2NoaXBjb21tb25fcG11LmMKQEAgLTMzMiw2ICszMzIsMTIgQEAKIAljYXNlIDB4NTM1NDoKIAkJc3NiX3BtdTBfcGxsaW5pdF9yMChjYywgY3J5c3RhbGZyZXEpOwogCQlicmVhazsKKwljYXNlIDB4NDMyMjoKKwkJaWYgKGNjLT5wbXUucmV2ID09IDIpIHsKKwkJCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BMTENUTF9BRERSLCAweDAwMDAwMDBBKTsKKwkJCWNoaXBjb193cml0ZTMyKGNjLCBTU0JfQ0hJUENPX1BMTENUTF9EQVRBLCAweDM4MDAwNUMwKTsKKwkJfQorCQlicmVhazsKIAlkZWZhdWx0OgogCQlzc2JfcHJpbnRrKEtFUk5fRVJSIFBGWAogCQkJICAgIkVSUk9SOiBQTEwgaW5pdCB1bmtub3duIGZvciBkZXZpY2UgJTA0WFxuIiwKQEAgLTQxNyw2ICs0MjMsNyBAQAogCiAJc3dpdGNoIChidXMtPmNoaXBfaWQpIHsKIAljYXNlIDB4NDMxMjoKKwljYXNlIDB4NDMyMjoKIAkJLyogV2Uga2VlcCB0aGUgZGVmYXVsdCBzZXR0aW5nczoKIAkJICogbWluX21zayA9IDB4Q0JCCiAJCSAqIG1heF9tc2sgPSAweDdGRkZGCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NzYi9kcml2ZXJfbWlwc2NvcmUuYyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9taXBzY29yZS5jCmluZGV4IDNjNmZlZWQuLjk3ZWZjZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL2RyaXZlcl9taXBzY29yZS5jCisrKyBiL2RyaXZlcnMvc3NiL2RyaXZlcl9taXBzY29yZS5jCkBAIC0yNzAsNyArMjcwLDYgQEAKIAkJCQlzZXRfaXJxKGRldiwgaXJxKyspOwogCQkJfQogCQkJYnJlYWs7Ci0JCQkvKiBmYWxsdGhyb3VnaCAqLwogCQljYXNlIFNTQl9ERVZfUENJOgogCQljYXNlIFNTQl9ERVZfRVRIRVJORVQ6CiAJCWNhc2UgU1NCX0RFVl9FVEhFUk5FVF9HQklUOgpAQCAtMjgxLDYgKzI4MCwxMCBAQAogCQkJCXNldF9pcnEoZGV2LCBpcnErKyk7CiAJCQkJYnJlYWs7CiAJCQl9CisJCQkvKiBmYWxsdGhyb3VnaCAqLworCQljYXNlIFNTQl9ERVZfRVhUSUY6CisJCQlzZXRfaXJxKGRldiwgMCk7CisJCQlicmVhazsKIAkJfQogCX0KIAlzc2JfZHByaW50ayhLRVJOX0lORk8gUEZYICJhZnRlciBpcnEgcmVjb25maWd1cmF0aW9uXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3NiL3NzYl9wcml2YXRlLmggYi9kcml2ZXJzL3NzYi9zc2JfcHJpdmF0ZS5oCmluZGV4IDU2MDU0YmUuLjAzMzExMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3NiL3NzYl9wcml2YXRlLmgKKysrIGIvZHJpdmVycy9zc2Ivc3NiX3ByaXZhdGUuaApAQCAtMTk2LDcgKzE5Niw3IEBACiAjaWZkZWYgQ09ORklHX1NTQl9CNDNfUENJX0JSSURHRQogZXh0ZXJuIGludCBfX2luaXQgYjQzX3BjaV9zc2JfYnJpZGdlX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBfX2V4aXQgYjQzX3BjaV9zc2JfYnJpZGdlX2V4aXQodm9pZCk7Ci0jZWxzZSAvKiBDT05GSUdfU1NCX0I0M19QQ0lfQlJJREdSICovCisjZWxzZSAvKiBDT05GSUdfU1NCX0I0M19QQ0lfQlJJREdFICovCiBzdGF0aWMgaW5saW5lIGludCBiNDNfcGNpX3NzYl9icmlkZ2VfaW5pdCh2b2lkKQogewogCXJldHVybiAwOwpAQCAtMjA0LDYgKzIwNCw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgYjQzX3BjaV9zc2JfYnJpZGdlX2V4aXQodm9pZCkKIHsKIH0KLSNlbmRpZiAvKiBDT05GSUdfU1NCX1BDSUhPU1QgKi8KKyNlbmRpZiAvKiBDT05GSUdfU1NCX0I0M19QQ0lfQlJJREdFICovCiAKICNlbmRpZiAvKiBMSU5VWF9TU0JfUFJJVkFURV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwppbmRleCBmYzJlOTYzLi43Njk2YTY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvS2NvbmZpZwpAQCAtNzEsOCArNzEsNiBAQAogCiBzb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9wYW5lbC9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9hbHRwY2llY2hkbWEvS2NvbmZpZyIKLQogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9LY29uZmlnIgpAQCAtODEsMjAgKzc5LDE0IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL21pbWlvL0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2RyZWFtL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2IzZGZnL0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9LY29uZmlnIgogCi1zb3VyY2UgImRyaXZlcnMvc3RhZ2luZy9wOWF1dGgvS2NvbmZpZyIKLQogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvbGluZTYvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL2dwdS9kcm0vdm13Z2Z4L0tjb25maWciCkBAIC0xMTcsNyArMTA5LDcgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvdm1lL0tjb25maWciCiAKLXNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3Jhci9LY29uZmlnIgorc291cmNlICJkcml2ZXJzL3N0YWdpbmcvcmFyX3JlZ2lzdGVyL0tjb25maWciCiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3NlcC9LY29uZmlnIgogCkBAIC0xNDMsNSArMTM1LDkgQEAKIAogc291cmNlICJkcml2ZXJzL3N0YWdpbmcvc203eHgvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL3N0YWdpbmcvZHQzMTU1L0tjb25maWciCisKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9LY29uZmlnIgorCiBlbmRpZiAjICFTVEFHSU5HX0VYQ0xVREVfQlVJTEQKIGVuZGlmICMgU1RBR0lORwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL01ha2VmaWxlCmluZGV4IGI1ZTY3YjguLmVhMmU3MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvTWFrZWZpbGUKQEAgLTE4LDE4ICsxOCwxNCBAQAogb2JqLSQoQ09ORklHX0NPTUVESSkJCSs9IGNvbWVkaS8KIG9iai0kKENPTkZJR19BU1VTX09MRUQpCQkrPSBhc3VzX29sZWQvCiBvYmotJChDT05GSUdfUEFORUwpCQkrPSBwYW5lbC8KLW9iai0kKENPTkZJR19BTFRFUkFfUENJRV9DSERNQSkJKz0gYWx0cGNpZWNoZG1hLwogb2JqLSQoQ09ORklHX1I4MTg3U0UpCQkrPSBydGw4MTg3c2UvCiBvYmotJChDT05GSUdfUlRMODE5MlNVKQkJKz0gcnRsODE5MnN1Lwogb2JqLSQoQ09ORklHX1JUTDgxOTJVKQkJKz0gcnRsODE5MnUvCiBvYmotJChDT05GSUdfUlRMODE5MkUpCQkrPSBydGw4MTkyZS8KLW9iai0kKENPTkZJR19JTlBVVF9NSU1JTykJKz0gbWltaW8vCiBvYmotJChDT05GSUdfVFJBTlpQT1JUKQkJKz0gZnJvbnRpZXIvCiBvYmotJChDT05GSUdfRFJFQU0pCQkrPSBkcmVhbS8KIG9iai0kKENPTkZJR19QT0hNRUxGUykJCSs9IHBvaG1lbGZzLwotb2JqLSQoQ09ORklHX0IzREZHKQkJKz0gYjNkZmcvCiBvYmotJChDT05GSUdfSURFX1BISVNPTikJKz0gcGhpc29uLwotb2JqLSQoQ09ORklHX1BMQU45QVVUSCkJCSs9IHA5YXV0aC8KIG9iai0kKENPTkZJR19MSU5FNl9VU0IpCQkrPSBsaW5lNi8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1FVQVRFQ0gyKQkrPSBzZXJxdF91c2IyLwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfUVVBVEVDSF9VU0IyKQkrPSBxdWF0ZWNoX3VzYjIvCkBAIC0zOSw3ICszNSw3IEBACiBvYmotJChDT05GSUdfRkJfVURMKQkJKz0gdWRsZmIvCiBvYmotJChDT05GSUdfSFlQRVJWKQkJKz0gaHYvCiBvYmotJChDT05GSUdfVk1FX0JVUykJCSs9IHZtZS8KLW9iai0kKENPTkZJR19SQVJfUkVHSVNURVIpCSs9IHJhci8KK29iai0kKENPTkZJR19SQVJfUkVHSVNURVIpCSs9IHJhcl9yZWdpc3Rlci8KIG9iai0kKENPTkZJR19EWF9TRVApCQkrPSBzZXAvCiBvYmotJChDT05GSUdfSUlPKQkJKz0gaWlvLwogb2JqLSQoQ09ORklHX1JBTVpTV0FQKQkJKz0gcmFtenN3YXAvCkBAIC01MywzICs0OSw1IEBACiBvYmotJChDT05GSUdfUENNQ0lBX1dBVkVMQU4pCSs9IHdhdmVsYW4vCiBvYmotJChDT05GSUdfUENNQ0lBX05FVFdBVkUpCSs9IG5ldHdhdmUvCiBvYmotJChDT05GSUdfRkJfU003WFgpCQkrPSBzbTd4eC8KK29iai0kKENPTkZJR19EVDMxNTUpCQkrPSBkdDMxNTUvCitvYmotJChDT05GSUdfQ1JZU1RBTEhEKQkJKz0gY3J5c3RhbGhkLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FsdHBjaWVjaGRtYS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2FsdHBjaWVjaGRtYS9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZjRiZjkyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hbHRwY2llY2hkbWEvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLWNvbmZpZyBBTFRFUkFfUENJRV9DSERNQQotCXRyaXN0YXRlICJBbHRlcmEgUENJIEV4cHJlc3MgQ2hhaW5pbmcgRE1BIGRyaXZlciIKLQlkZXBlbmRzIG9uIFBDSQotCWRlZmF1bHQgTgotCS0tLWhlbHAtLS0KLQkgIEEgcmVmZXJlbmNlIGRyaXZlciB0aGF0IGV4ZXJjaXNlcyB0aGUgQ2hhaW5pbmcgRE1BIGxvZ2ljIHJlZmVyZW5jZQotCSAgZGVzaWduIGdlbmVyYXRlZCBhbG9uZyB0aGUgQWx0ZXJhIEZQR0EgUENJIEV4cHJlc3Mgc29mdCBvciBoYXJkIGNvcmUsCi0JICBvbmx5IGlmIGluc3RhbnRpYXRlZCB1c2luZyB0aGUgTWVnYVdpemFyZCwgbm90IHRoZSBTT1BDIGJ1aWxkZXIsIG9mCi0JICBRdWFydHVzIDguMS4KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FsdHBjaWVjaGRtYS9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9hbHRwY2llY2hkbWEvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwOGM4NDMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FsdHBjaWVjaGRtYS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDIgKzAsMCBAQAotb2JqLSQoQ09ORklHX0FMVEVSQV9QQ0lFX0NIRE1BKQkrPSBhbHRwY2llY2hkbWEubwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWx0cGNpZWNoZG1hL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvYWx0cGNpZWNoZG1hL1RPRE8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyYzk0NWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2FsdHBjaWVjaGRtYS9UT0RPCisrKyAvZGV2L251bGwKQEAgLTEsMTUgKzAsMCBAQAotRE9ORToKLSAgICAtIGZ1bmN0aW9uYWxpdHkgc2ltaWxhciB0byBsb2dpYyB0ZXN0YmVuY2gKLQotVE9ETzoKLQktIGNoZWNrcGF0Y2gucGwgY2xlYW51cHMuCi0JLSBrZWVwIHN0YXRlIG9mIERNQSBlbmdpbmVzLgotCS0ga2VlcCBkYXRhIHN0cnVjdHVyZSB0aGF0IGtlZXBzIHN0YXRlIG9mIGVhY2ggdHJhbnNmZXIuCi0JLSBpbnRlcnJ1cHQgaGFuZGxlciBzaG91bGQgaXRlcmF0ZSBvdmVyIG91dHN0YW5kaW5nIGRlc2NyaXB0b3IgdGFibGVzLgotCS0gY29tcGxldGUgdXNlcnNwYWNlIGNkZXYgdG8gcmVhZC93cml0ZSB1c2luZyB0aGUgRE1BIGVuZ2luZXMuCi0JLSBzcGxpdCBvZmYgdGhlIERNQSBzdXBwb3J0IGZ1bmN0aW9ucyBpbiBhIG1vZHVsZSwgcmUtdXNhYmxlIGJ5IGN1c3RvbQotCSAgZHJpdmVycy4KLQotUGxlYXNlIGNvb3JkaW5hdGUgd29yayB3aXRoLCBhbmQgc2VuZCBwYXRjaGVzIHRvCi1MZW9uIFdvZXN0ZW5iZXJnIDxsZW9uQHNpZGVicmFuY2guY29tPgotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYWx0cGNpZWNoZG1hL2FsdHBjaWVjaGRtYS5jIGIvZHJpdmVycy9zdGFnaW5nL2FsdHBjaWVjaGRtYS9hbHRwY2llY2hkbWEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmYwN2RkNC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYWx0cGNpZWNoZG1hL2FsdHBjaWVjaGRtYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTE4MiArMCwwIEBACi0vKioKLSAqIERyaXZlciBmb3IgQWx0ZXJhIFBDSWUgY29yZSBjaGFpbmluZyBETUEgcmVmZXJlbmNlIGRlc2lnbi4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggTGVvbiBXb2VzdGVuYmVyZyAgPGxlb24ud29lc3RlbmJlcmdAYXhvbi50dj4KLSAqIENvcHlyaWdodCAoQykgMjAwOCBOaWNrb2xhcyBIZXBwZXJtYW5uICA8aGVwcGVybWFubndkdEBnbWFpbC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KLSAqCi0gKgotICogUmF0aW9uYWxlOiBUaGlzIGRyaXZlciBleGVyY2lzZXMgdGhlIGNoYWluaW5nIERNQSByZWFkIGFuZCB3cml0ZSBlbmdpbmUKLSAqIGluIHRoZSByZWZlcmVuY2UgZGVzaWduLiBJdCBpcyBtZWFudCBhcyBhIGNvbXBsZW1lbnRhcnkgcmVmZXJlbmNlCi0gKiBkcml2ZXIgdGhhdCBjYW4gYmUgdXNlZCBmb3IgdGVzdGluZyBlYXJseSBkZXNpZ25zIGFzIHdlbGwgYXMgYSBiYXNpcyB0bwotICogd3JpdGUgeW91ciBjdXN0b20gZHJpdmVyLgotICoKLSAqIFN0YXR1czogVGVzdCByZXN1bHRzIGZyb20gTGVvbiBXb2VzdGVuYmVyZyAgPGxlb24ud29lc3RlbmJlcmdAYXhvbi50dj46Ci0gKgotICogU2VuZGVybyBCb2FyZCB3LyBDeWNsb25lIElJIEVQMkMzNUY2NzJDNk4sIFBYMTAxMUEgUENJZSB4MSBQSFkgb24gYQotICogRGVsbCBQcmVjaXNpb24gMzcwIFBDLCB4ODYsIGtlcm5lbCAyLjYuMjAgZnJvbSBVYnVudHUgNy4wNC4KLSAqCi0gKiBTZW5kZXJvIEJvYXJkIHcvIEN5Y2xvbmUgSUkgRVAyQzM1RjY3MkM2TiwgUFgxMDExQSBQQ0llIHgxIFBIWSBvbiBhCi0gKiBGcmVlc2NhbGUgTVBDODMxM0UtUkRCIGJvYXJkLCBQb3dlclBDLCAyLjYuMjQgdy8gRnJlZXNjYWxlIHBhdGNoZXMuCi0gKgotICogRHJpdmVyIHRlc3RzIHBhc3NlZCB3aXRoIFBDSWUgQ29tcGlsZXIgOC4xLiBXaXRoIFBDSWUgOC4wIHRoZSBETUEKLSAqIGxvb3BiYWNrIHRlc3QgaGFkIHJlcHJvZHVjYWJsZSBjb21wYXJlIGVycm9ycy4gSSBhc3N1bWUgYSBjaGFuZ2UKLSAqIGluIHRoZSBjb21waWxlciBvciByZWZlcmVuY2UgZGVzaWduLCBidXQgY291bGQgbm90IGZpbmQgZXZpZGVuY2Ugbm9yCi0gKiBkb2N1bWVudGF0aW9uIG9uIGEgY2hhbmdlIG9yIGZpeCBpbiB0aGF0IGRpcmVjdGlvbi4KLSAqCi0gKiBUaGUgcmVmZXJlbmNlIGRlc2lnbiBkb2VzIG5vdCBoYXZlIHJlYWRhYmxlIGxvY2F0aW9ucyBhbmQgdGh1cyBhCi0gKiBkdW1teSByZWFkLCB1c2VkIHRvIGZsdXNoIFBDSSBwb3N0ZWQgd3JpdGVzLCBjYW5ub3QgYmUgcGVyZm9ybWVkLgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvY2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0KLQotLyogYnkgZGVmYXVsdCBkbyBub3QgYnVpbGQgdGhlIGNoYXJhY3RlciBkZXZpY2UgaW50ZXJmYWNlICovCi0vKiBYWFggSXQgaXMgbm9uLWZ1bmN0aW9uYWwgeWV0ICovCi0jaWZuZGVmIEFMVFBDSUVDSERNQV9DREVWCi0jICBkZWZpbmUgQUxUUENJRUNIRE1BX0NERVYgMAotI2VuZGlmCi0KLS8qIGJ1aWxkIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIGludGVyZmFjZT8gKi8KLSNpZiBBTFRQQ0lFQ0hETUFfQ0RFVgotIyAgZGVmaW5lIE1BWF9DSERNQV9TSVpFICg4ICogMTAyNCAqIDEwMjQpCi0jICBpbmNsdWRlICJtYXBwZXJfdXNlcl90b19zZy5oIgotI2VuZGlmCi0KLS8qKiBkcml2ZXIgbmFtZSwgbWltaWNrcyBBbHRlcmEgbmFtaW5nIG9mIHRoZSByZWZlcmVuY2UgZGVzaWduICovCi0jZGVmaW5lIERSVl9OQU1FICJhbHRwY2llY2hkbWEiCi0vKiogbnVtYmVyIG9mIEJBUnMgb24gdGhlIGRldmljZSAqLwotI2RlZmluZSBBUEVfQkFSX05VTSAoNikKLS8qKiBCQVIgbnVtYmVyIHdoZXJlIHRoZSBSQ1NMQVZFIG1lbW9yeSBzaXRzICovCi0jZGVmaW5lIEFQRV9CQVJfUkNTTEFWRSAoMCkKLS8qKiBCQVIgbnVtYmVyIHdoZXJlIHRoZSBEZXNjcmlwdG9yIEhlYWRlciBzaXRzICovCi0jZGVmaW5lIEFQRV9CQVJfSEVBREVSICgyKQotCi0vKiogbWF4aW11bSBzaXplIGluIGJ5dGVzIG9mIHRoZSBkZXNjcmlwdG9yIHRhYmxlLCBjaGRtYSBsb2dpYyBsaW1pdCAqLwotI2RlZmluZSBBUEVfQ0hETUFfVEFCTEVfU0laRSAoNDA5NikKLS8qIHNpbmdsZSB0cmFuc2ZlciBtdXN0IG5vdCBleGNlZWQgMjU1IHRhYmxlIGVudHJpZXMuIHdvcnN0IGNhc2UgdGhpcyBjYW4gYmUKLSAqIGFjaGlldmVkIGJ5IDI1NSBzY2F0dGVyZWQgcGFnZXMsIHdpdGggb25seSBhIHNpbmdsZSBieXRlIGluIHRoZSBoZWFkIGFuZAotICogdGFpbCBwYWdlcy4gMjUzICogUEFHRV9TSVpFIGlzIGEgc2FmZSB1cHBlciBib3VuZCBmb3IgdGhlIHRyYW5zZmVyIHNpemUuCi0gKi8KLSNkZWZpbmUgQVBFX0NIRE1BX01BWF9UUkFOU0ZFUl9MRU4gKDI1MyAqIFBBR0VfU0laRSkKLQotLyoqCi0gKiBTcGVjaWZpZXMgdGhvc2UgQkFScyB0byBiZSBtYXBwZWQgYW5kIHRoZSBsZW5ndGggb2YgZWFjaCBtYXBwaW5nLgotICoKLSAqIFplcm8gKDApIG1lYW5zIGRvIG5vdCBtYXAsIG90aGVyd2lzZSBzcGVjaWZpZXMgdGhlIEJBUiBsZW5ndGhzIHRvIGJlIG1hcHBlZC4KLSAqIElmIHRoZSBhY3R1YWwgQkFSIGxlbmd0aCBpcyBsZXNzLCB0aGlzIGlzIGNvbnNpZGVyZWQgYW4gZXJyb3I7IHRoZW4KLSAqIHJlY29uZmlndXJlIHlvdXIgUENJZSBjb3JlLgotICoKLSAqIEBzZWUgdWdfcGNpX2V4cHJlc3MgOC4wLCB0YWJsZSA3LTIgYXQgcGFnZSA3LTEzLgotICovCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBiYXJfbWluX2xlbltBUEVfQkFSX05VTV0gPQotCXsgMzI3NjgsIDAsIDI1NiwgMCwgMzI3NjgsIDAgfTsKLQotLyoqCi0gKiBEZXNjcmlwdG9yIEhlYWRlciwgY29udHJvbHMgdGhlIERNQSByZWFkIGVuZ2luZSBvciB3cml0ZSBlbmdpbmUuCi0gKgotICogVGhlIGRlc2NyaXB0b3IgaGVhZGVyIGlzIHRoZSBtYWluIGRhdGEgc3RydWN0dXJlIGZvciBzdGFydGluZyBETUEgdHJhbnNmZXJzLgotICoKLSAqIEl0IHNpdHMgaW4gRW5kIFBvaW50IChGUEdBKSBtZW1vcnkgQkFSWzJdIGZvciAzMi1iaXQgb3IgQkFSWzM6Ml0gZm9yIDY0LWJpdC4KLSAqIEl0IHJlZmVyZW5jZXMgYSBkZXNjcmlwdG9yIHRhYmxlIHdoaWNoIGV4aXN0cyBpbiBSb290IENvbXBsZXggKFBDKSBtZW1vcnkuCi0gKiBXcml0aW5nIHRoZSByY2xhc3QgZmllbGQgc3RhcnRzIHRoZSBETUEgb3BlcmF0aW9uLCB0aHVzIGFsbCBvdGhlciBzdHJ1Y3R1cmVzCi0gKiBhbmQgZmllbGRzIG11c3QgYmUgc2V0dXAgYmVmb3JlIGRvaW5nIHNvLgotICoKLSAqIEBzZWUgdWdfcGNpX2V4cHJlc3MgOC4wLCB0YWJsZXMgNy0zLCA3LTQgYW5kIDctNSBhdCBwYWdlIDctMTQuCi0gKiBAbm90ZSBUaGlzIGhlYWRlciBtdXN0IGJlIHdyaXR0ZW4gaW4gZm91ciAzMi1iaXQgKFBDSSBEV09SRCkgd3JpdGVzLgotICovCi1zdHJ1Y3QgYXBlX2NoZG1hX2hlYWRlciB7Ci0JLyoqCi0JICogdzAgY29uc2lzdHMgb2YgdHdvIDE2LWJpdCBmaWVsZHM6Ci0JICogbHNiIHUxNiBudW1iZXI7IG51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiBhcGVfY2hkbWFfdGFibGUKLQkgKiBtc2IgdTE2IGNvbnRyb2w7IGdsb2JhbCBjb250cm9sIGZsYWdzCi0JICovCi0JdTMyIHcwOwotCS8qIGJ1cyBhZGRyZXNzIHRvIGFwZV9jaGRtYV90YWJsZSBpbiBSb290IENvbXBsZXggbWVtb3J5ICovCi0JdTMyIGJkdF9hZGRyX2g7Ci0JdTMyIGJkdF9hZGRyX2w7Ci0JLyoqCi0JICogdzMgY29uc2lzdHMgb2YgdHdvIDE2LWJpdCBmaWVsZHM6Ci0JICogLSBsc2IgdTE2IHJjbGFzdDsgbGFzdCBkZXNjcmlwdG9yIG51bWJlciBhdmFpbGFibGUgaW4gUm9vdCBDb21wbGV4Ci0JICogICAgLSB6ZXJvICgwKSBtZWFucyB0aGUgZmlyc3QgZGVzY3JpcHRvciBpcyByZWFkeSwKLQkgKiAgICAtIG9uZSAoMSkgbWVhbnMgdHdvIGRlc2NyaXB0b3JzIGFyZSByZWFkeSwgZXRjLgotCSAqIC0gbXNiIHUxNiByZXNlcnZlZDsKLQkgKgotCSAqIEBub3RlIHdyaXRpbmcgdG8gdGhpcyBtZW1vcnkgbG9jYXRpb24gc3RhcnRzIHRoZSBETUEgb3BlcmF0aW9uIQotCSAqLwotCXUzMiB3MzsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCi0vKioKLSAqIERlc2NyaXB0b3IgRW50cnksIGRlc2NyaWJpbmcgYSAobm9uLXNjYXR0ZXJlZCkgc2luZ2xlIG1lbW9yeSBibG9jayB0cmFuc2Zlci4KLSAqCi0gKiBUaGVyZSBpcyBvbmUgZGVzY3JpcHRvciBmb3IgZWFjaCBtZW1vcnkgYmxvY2sgaW52b2x2ZWQgaW4gdGhlIHRyYW5zZmVyLCBhCi0gKiBibG9jayBiZWluZyBhIGNvbnRpZ3VvdXMgYWRkcmVzcyByYW5nZSBvbiB0aGUgYnVzLgotICoKLSAqIE11bHRpcGxlIGRlc2NyaXB0b3JzIGFyZSBjaGFpbmVkIGJ5IG1lYW5zIG9mIHRoZSBhcGVfY2hkbWFfdGFibGUgZGF0YQotICogc3RydWN0dXJlLgotICoKLSAqIEBzZWUgdWdfcGNpX2V4cHJlc3MgOC4wLCB0YWJsZXMgNy02LCA3LTcgYW5kIDctOCBhdCBwYWdlIDctMTQgYW5kIHBhZ2UgNy0xNS4KLSAqLwotc3RydWN0IGFwZV9jaGRtYV9kZXNjIHsKLQkvKioKLQkgKiB3MCBjb25zaXN0cyBvZiB0d28gMTYtYml0IGZpZWxkczoKLQkgKiBudW1iZXIgb2YgRFdPUkRTIHRvIHRyYW5zZmVyCi0JICogLSBsc2IgdTE2IGxlbmd0aDsKLQkgKiBnbG9iYWwgY29udHJvbAotCSAqIC0gbXNiIHUxNiBjb250cm9sOwotCSAqLwotCXUzMiB3MDsKLQkvKiBhZGRyZXNzIG9mIG1lbW9yeSBpbiB0aGUgRW5kIFBvaW50ICovCi0JdTMyIGVwX2FkZHI7Ci0JLyogYnVzIGFkZHJlc3Mgb2Ygc291cmNlIG9yIGRlc3RpbmF0aW9uIG1lbW9yeSBpbiB0aGUgUm9vdCBDb21wbGV4ICovCi0JdTMyIHJjX2FkZHJfaDsKLQl1MzIgcmNfYWRkcl9sOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KLS8qKgotICogRGVzY3JpcHRvciBUYWJsZSwgYW4gYXJyYXkgb2YgZGVzY3JpcHRvcnMgZGVzY3JpYmluZyBhIGNoYWluZWQgdHJhbnNmZXIuCi0gKgotICogQW4gYXJyYXkgb2YgZGVzY3JpcHRvcnMsIHByZWNlZGVkIGJ5IHdvcmtzcGFjZSBmb3IgdGhlIEVuZCBQb2ludC4KLSAqIEl0IGV4aXN0cyBpbiBSb290IENvbXBsZXggbWVtb3J5LgotICoKLSAqIFRoZSBFbmQgUG9pbnQgY2FuIHVwZGF0ZSBpdHMgbGFzdCBjb21wbGV0ZWQgZGVzY3JpcHRvciBudW1iZXIgaW4gdGhlCi0gKiBlcGxhc3QgZmllbGQgaWYgcmVxdWVzdGVkIGJ5IHNldHRpbmcgdGhlIEVQTEFTVF9FTkEgYml0IGVpdGhlcgotICogZ2xvYmFsbHkgaW4gdGhlIGhlYWRlcidzIG9yIGxvY2FsbHkgaW4gYW55IGRlc2NyaXB0b3IncyBjb250cm9sIGZpZWxkLgotICoKLSAqIEBub3RlIHRoaXMgc3RydWN0dXJlIG1heSBub3QgZXhjZWVkIDQwOTYgYnl0ZXMuIFRoaXMgcmVzdWx0cyBpbiBhCi0gKiBtYXhpbXVtIG9mIDQwOTYgLyAoNCAqIDQpIC0gMSA9IDI1NSBkZXNjcmlwdG9ycyBwZXIgY2hhaW5lZCB0cmFuc2Zlci4KLSAqCi0gKiBAc2VlIHVnX3BjaV9leHByZXNzIDguMCwgdGFibGVzIDctOSwgNy0xMCBhbmQgNy0xMSBhdCBwYWdlIDctMTcgYW5kIHBhZ2UgNy0xOC4KLSAqLwotc3RydWN0IGFwZV9jaGRtYV90YWJsZSB7Ci0JLyogd29ya3NwYWNlIDB4MDAtMHgwYiwgcmVzZXJ2ZWQgKi8KLQl1MzIgcmVzZXJ2ZWQxWzNdOwotCS8qIHdvcmtzcGFjZSAweDBjLTB4MGYsIGxhc3QgZGVzY3JpcHRvciBoYW5kbGVkIGJ5IEVuZCBQb2ludCAqLwotCXUzMiB3MzsKLQkvKiB0aGUgYWN0dWFsIGFycmF5IG9mIGRlc2NyaXB0b3JzCi0gICAgKiAweDEwLTB4MWYsIDB4MjAtMHgyZiwgLi4uIDB4ZmYwLTB4ZmZmICgyNTUgZW50cmllcykKLSAgICAqLwotCXN0cnVjdCBhcGVfY2hkbWFfZGVzYyBkZXNjWzI1NV07Ci19IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKLQotLyoqCi0gKiBBbHRlcmEgUENJIEV4cHJlc3MgKCdhcGUnKSBib2FyZCBzcGVjaWZpYyBib29rIGtlZXBpbmcgZGF0YQotICoKLSAqIEtlZXBzIHN0YXRlIG9mIHRoZSBQQ0llIGNvcmUgYW5kIHRoZSBDaGFpbmluZyBETUEgY29udHJvbGxlcgotICogYXBwbGljYXRpb24uCi0gKi8KLXN0cnVjdCBhcGVfZGV2IHsKLQkvKiogdGhlIGtlcm5lbCBwY2kgZGV2aWNlIGRhdGEgc3RydWN0dXJlIHByb3ZpZGVkIGJ5IHByb2JlKCkgKi8KLQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKLQkvKioKLQkgKiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzIG9mIHRoZSBtYXBwZWQgQkFSIG1lbW9yeSBhbmQgSU8gcmVnaW9ucyBvZgotCSAqIHRoZSBFbmQgUG9pbnQuIFVzZWQgYnkgbWFwX2JhcnMoKS91bm1hcF9iYXJzKCkuCi0JICovCi0Jdm9pZCAqIF9faW9tZW0gYmFyW0FQRV9CQVJfTlVNXTsKLQkvKioga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBmb3IgRGVzY3JpcHRvciBUYWJsZSBpbiBSb290IENvbXBsZXggbWVtb3J5ICovCi0Jc3RydWN0IGFwZV9jaGRtYV90YWJsZSAqdGFibGVfdmlydDsKLQkvKioKLQkgKiBidXMgYWRkcmVzcyBmb3IgdGhlIERlc2NyaXB0b3IgVGFibGUgaW4gUm9vdCBDb21wbGV4IG1lbW9yeSwgaW4KLQkgKiBDUFUtbmF0aXZlIGVuZGlhbmVzcwotCSAqLwotCWRtYV9hZGRyX3QgdGFibGVfYnVzOwotCS8qIGlmIHRoZSBkZXZpY2UgcmVnaW9ucyBjb3VsZCBub3QgYmUgYWxsb2NhdGVkLCBhc3N1bWUgYW5kIHJlbWVtYmVyIGl0Ci0JICogaXMgaW4gdXNlIGJ5IGFub3RoZXIgZHJpdmVyOyB0aGlzIGRyaXZlciBtdXN0IG5vdCBkaXNhYmxlIHRoZSBkZXZpY2UuCi0JICovCi0JaW50IGluX3VzZTsKLQkvKiB3aGV0aGVyIHRoaXMgZHJpdmVyIGVuYWJsZWQgbXNpIGZvciB0aGUgZGV2aWNlICovCi0JaW50IG1zaV9lbmFibGVkOwotCS8qIHdoZXRoZXIgdGhpcyBkcml2ZXIgY291bGQgb2J0YWluIHRoZSByZWdpb25zICovCi0JaW50IGdvdF9yZWdpb25zOwotCS8qIGlycSBsaW5lIHN1Y2Nlc3NmdWxseSByZXF1ZXN0ZWQgYnkgdGhpcyBkcml2ZXIsIC0xIG90aGVyd2lzZSAqLwotCWludCBpcnFfbGluZTsKLQkvKiBib2FyZCByZXZpc2lvbiAqLwotCXU4IHJldmlzaW9uOwotCS8qIGludGVycnVwdCBjb3VudCwgaW5jcmVtZW50ZWQgYnkgdGhlIGludGVycnVwdCBoYW5kbGVyICovCi0JaW50IGlycV9jb3VudDsKLSNpZiBBTFRQQ0lFQ0hETUFfQ0RFVgotCS8qIGNoYXJhY3RlciBkZXZpY2UgKi8KLQlkZXZfdCBjZGV2bm87Ci0Jc3RydWN0IGNkZXYgY2RldjsKLQkvKiB1c2VyIHNwYWNlIHNjYXR0ZXIgZ2F0aGVyIG1hcHBlciAqLwotCXN0cnVjdCBzZ19tYXBwaW5nX3QgKnNnbTsKLSNlbmRpZgotfTsKLQotLyoqCi0gKiBVc2luZyB0aGUgc3Vic3lzdGVtIHZlbmRvciBpZCBhbmQgc3Vic3lzdGVtIGlkLCBpdCBpcyBwb3NzaWJsZSB0bwotICogZGlzdGluZ3Vpc2ggYmV0d2VlbiBkaWZmZXJlbnQgY2FyZHMgYmFzZXMgYXJvdW5kIHRoZSBzYW1lCi0gKiAodGhpcmQtcGFydHkpIGxvZ2ljIGNvcmUuCi0gKgotICogRGVmYXVsdCBBbHRlcmEgdmVuZG9yIGFuZCBkZXZpY2UgSUQncywgYW5kIHNvbWUgKG5vbi1yZXNlcnZlZCkKLSAqIElEJ3MgYXJlIG5vdyB1c2VkIGhlcmUgdGhhdCBhcmUgdXNlZCBhbW9uZ3N0IHRoZSB0ZXN0ZXJzL2RldmVsb3BlcnMuCi0gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBpZHNbXSA9IHsKLQl7IFBDSV9ERVZJQ0UoMHgxMTcyLCAweEUwMDEpLCB9LAotCXsgUENJX0RFVklDRSgweDIwNzEsIDB4MjA3MSksIH0sCi0JeyAwLCB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGlkcyk7Ci0KLSNpZiBBTFRQQ0lFQ0hETUFfQ0RFVgotLyogcHJvdG90eXBlcyBmb3IgY2hhcmFjdGVyIGRldmljZSAqLwotc3RhdGljIGludCBzZ19pbml0KHN0cnVjdCBhcGVfZGV2ICphcGUpOwotc3RhdGljIHZvaWQgc2dfZXhpdChzdHJ1Y3QgYXBlX2RldiAqYXBlKTsKLSNlbmRpZgotCi0vKioKLSAqIGFsdHBjaWVjaGRtYV9pc3IoKSAtIEludGVycnVwdCBoYW5kbGVyCi0gKgotICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgYWx0cGNpZWNoZG1hX2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpCi17Ci0Jc3RydWN0IGFwZV9kZXYgKmFwZSA9IChzdHJ1Y3QgYXBlX2RldiAqKWRldl9pZDsKLQlpZiAoIWFwZSkKLQkJcmV0dXJuIElSUV9OT05FOwotCWFwZS0+aXJxX2NvdW50Kys7Ci0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBzY2FuX2JhcnMoc3RydWN0IGFwZV9kZXYgKmFwZSwgc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgQVBFX0JBUl9OVU07IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGJhcl9zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGkpOwotCQlpZiAoYmFyX3N0YXJ0KSB7Ci0JCQl1bnNpZ25lZCBsb25nIGJhcl9lbmQgPSBwY2lfcmVzb3VyY2VfZW5kKGRldiwgaSk7Ci0JCQl1bnNpZ25lZCBsb25nIGJhcl9mbGFncyA9IHBjaV9yZXNvdXJjZV9mbGFncyhkZXYsIGkpOwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIkJBUiVkIDB4JTA4bHgtMHglMDhseCBmbGFncyAweCUwOGx4XG4iLAotCQkJICBpLCBiYXJfc3RhcnQsIGJhcl9lbmQsIGJhcl9mbGFncyk7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogVW5tYXAgdGhlIEJBUiByZWdpb25zIHRoYXQgaGFkIGJlZW4gbWFwcGVkIGVhcmxpZXIgdXNpbmcgbWFwX2JhcnMoKQotICovCi1zdGF0aWMgdm9pZCB1bm1hcF9iYXJzKHN0cnVjdCBhcGVfZGV2ICphcGUsIHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IEFQRV9CQVJfTlVNOyBpKyspIHsKLQkgIC8qIGlzIHRoaXMgQkFSIG1hcHBlZD8gKi8KLQkJaWYgKGFwZS0+YmFyW2ldKSB7Ci0JCQkvKiB1bm1hcCBCQVIgKi8KLQkJCXBjaV9pb3VubWFwKGRldiwgYXBlLT5iYXJbaV0pOwotCQkJYXBlLT5iYXJbaV0gPSBOVUxMOwotCQl9Ci0JfQotfQotCi0vKioKLSAqIE1hcCB0aGUgZGV2aWNlIG1lbW9yeSByZWdpb25zIGludG8ga2VybmVsIHZpcnR1YWwgYWRkcmVzcyBzcGFjZSBhZnRlcgotICogdmVyaWZ5aW5nIHRoZWlyIHNpemVzIHJlc3BlY3QgdGhlIG1pbmltdW0gc2l6ZXMgbmVlZGVkLCBnaXZlbiBieSB0aGUKLSAqIGJhcl9taW5fbGVuW10gYXJyYXkuCi0gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IG1hcF9iYXJzKHN0cnVjdCBhcGVfZGV2ICphcGUsIHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JaW50IHJjOwotCWludCBpOwotCS8qIGl0ZXJhdGUgdGhyb3VnaCBhbGwgdGhlIEJBUnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgQVBFX0JBUl9OVU07IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGJhcl9zdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGkpOwotCQl1bnNpZ25lZCBsb25nIGJhcl9lbmQgPSBwY2lfcmVzb3VyY2VfZW5kKGRldiwgaSk7Ci0JCXVuc2lnbmVkIGxvbmcgYmFyX2xlbmd0aCA9IGJhcl9lbmQgLSBiYXJfc3RhcnQgKyAxOwotCQlhcGUtPmJhcltpXSA9IE5VTEw7Ci0JCS8qIGRvIG5vdCBtYXAsIGFuZCBza2lwLCBCQVJzIHdpdGggbGVuZ3RoIDAgKi8KLQkJaWYgKCFiYXJfbWluX2xlbltpXSkKLQkJCWNvbnRpbnVlOwotCQkvKiBkbyBub3QgbWFwIEJBUnMgd2l0aCBhZGRyZXNzIDAgKi8KLQkJaWYgKCFiYXJfc3RhcnQgfHwgIWJhcl9lbmQpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJCQVIgIyVkIGlzIG5vdCBwcmVzZW50PyFcbiIsIGkpOwotCQkJcmMgPSAtMTsKLQkJCWdvdG8gZmFpbDsKLQkJfQotCQliYXJfbGVuZ3RoID0gYmFyX2VuZCAtIGJhcl9zdGFydCArIDE7Ci0JCS8qIEJBUiBsZW5ndGggaXMgbGVzcyB0aGFuIGRyaXZlciByZXF1aXJlcz8gKi8KLQkJaWYgKGJhcl9sZW5ndGggPCBiYXJfbWluX2xlbltpXSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIkJBUiAjJWQgbGVuZ3RoID0gJWx1IGJ5dGVzIGJ1dCBkcml2ZXIgIgotCQkJInJlcXVpcmVzIGF0IGxlYXN0ICVsdSBieXRlc1xuIiwKLQkJCWksIGJhcl9sZW5ndGgsIGJhcl9taW5fbGVuW2ldKTsKLQkJCXJjID0gLTE7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQkJLyogbWFwIHRoZSBkZXZpY2UgbWVtb3J5IG9yIElPIHJlZ2lvbiBpbnRvIGtlcm5lbCB2aXJ0dWFsCi0JCSAqIGFkZHJlc3Mgc3BhY2UgKi8KLQkJYXBlLT5iYXJbaV0gPSBwY2lfaW9tYXAoZGV2LCBpLCBiYXJfbWluX2xlbltpXSk7Ci0JCWlmICghYXBlLT5iYXJbaV0pIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3QgbWFwIEJBUiAjJWQuXG4iLCBpKTsKLQkJCXJjID0gLTE7Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KLQkJcHJpbnRrKEtFUk5fREVCVUcgIkJBUlslZF0gbWFwcGVkIGF0IDB4JXAgd2l0aCBsZW5ndGggJWx1KC8lbHUpLlxuIiwgaSwKLQkJYXBlLT5iYXJbaV0sIGJhcl9taW5fbGVuW2ldLCBiYXJfbGVuZ3RoKTsKLQl9Ci0JLyogc3VjY2Vzc2Z1bGx5IG1hcHBlZCBhbGwgcmVxdWlyZWQgQkFSIHJlZ2lvbnMgKi8KLQlyYyA9IDA7Ci0JZ290byBzdWNjZXNzOwotZmFpbDoKLQkvKiB1bm1hcCBhbnkgQkFScyB0aGF0IHdlIGRpZCBtYXAgKi8KLQl1bm1hcF9iYXJzKGFwZSwgZGV2KTsKLXN1Y2Nlc3M6Ci0JcmV0dXJuIHJjOwotfQotCi0jaWYgMCAvKiBub3QgeWV0IGltcGxlbWVudGVkIGZ1bGx5IEZJWE1FIGFkZCBvcGNvZGUgKi8KLXN0YXRpYyB2b2lkIF9fZGV2aW5pdCByY3NsYXZlX3Rlc3Qoc3RydWN0IGFwZV9kZXYgKmFwZSwgc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQl1MzIgKnJjc2xhdmVfbWVtID0gKHUzMiAqKWFwZS0+YmFyW0FQRV9CQVJfUkNTTEFWRV07Ci0JdTMyIHJlc3VsdCA9IDA7Ci0JLyoqIHRoaXMgbnVtYmVyIGlzIGFzc3VtZWQgdG8gYmUgZGlmZmVyZW50IGVhY2ggdGltZSB0aGlzIHRlc3QgcnVucyAqLwotCXUzMiBzZWVkID0gKHUzMilqaWZmaWVzOwotCXUzMiB2YWx1ZSA9IHNlZWQ7Ci0JaW50IGk7Ci0KLQkvKiB3cml0ZSBsb29wICovCi0JdmFsdWUgPSBzZWVkOwotCWZvciAoaSA9IDEwMjQ7IGkgPCAzMjc2OCAvIDQgOyBpKyspIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIldyaXRpbmcgMHglMDh4IHRvIDB4JXAuXG4iLAotCQkJKHUzMil2YWx1ZSwgKHZvaWQgKilyY3NsYXZlX21lbSArIGkpOwotCQlpb3dyaXRlMzIodmFsdWUsIHJjc2xhdmVfbWVtICsgaSk7Ci0JCXZhbHVlKys7Ci0JfQotCS8qIHJlYWQtYmFjayBsb29wICovCi0JdmFsdWUgPSBzZWVkOwotCWZvciAoaSA9IDEwMjQ7IGkgPCAzMjc2OCAvIDQ7IGkrKykgewotCQlyZXN1bHQgPSBpb3JlYWQzMihyY3NsYXZlX21lbSArIGkpOwotCQlpZiAocmVzdWx0ICE9IHZhbHVlKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiV3JvdGUgMHglMDh4IHRvIDB4JXAsIGJ1dCByZWFkIGJhY2sgMHglMDh4LlxuIiwKLQkJCQkodTMyKXZhbHVlLCAodm9pZCAqKXJjc2xhdmVfbWVtICsgaSwgKHUzMilyZXN1bHQpOwotCQkJYnJlYWs7Ci0JCX0KLQkJdmFsdWUrKzsKLQl9Ci19Ci0jZW5kaWYKLQotLyogb2J0YWluIHRoZSAzMiBtb3N0IHNpZ25pZmljYW50IChoaWdoKSBiaXRzIG9mIGEgMzItYml0IG9yIDY0LWJpdCBhZGRyZXNzICovCi0jZGVmaW5lIHBjaV9kbWFfaChhZGRyKSAoKGFkZHIgPj4gMTYpID4+IDE2KQotLyogb2J0YWluIHRoZSAzMiBsZWFzdCBzaWduaWZpY2FudCAobG93KSBiaXRzIG9mIGEgMzItYml0IG9yIDY0LWJpdCBhZGRyZXNzICovCi0jZGVmaW5lIHBjaV9kbWFfbChhZGRyKSAoYWRkciAmIDB4ZmZmZmZmZmZVTCkKLQotLyogYXBlX2ZpbGxfY2hkbWFfZGVzYygpIC0gRmlsbCBhIEFsdGVyYSBQQ0kgRXhwcmVzcyBDaGFpbmluZyBETUEgZGVzY3JpcHRvcgotICoKLSAqIEBkZXNjIHBvaW50ZXIgdG8gZGVzY3JpcHRvciB0byBiZSBmaWxsZWQKLSAqIEBhZGRyIHJvb3QgY29tcGxleCBhZGRyZXNzCi0gKiBAZXBfYWRkciBlbmQgcG9pbnQgYWRkcmVzcwotICogQGxlbiBudW1iZXIgb2YgYnl0ZXMsIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgYXBlX2NoZG1hX2Rlc2Nfc2V0KHN0cnVjdCBhcGVfY2hkbWFfZGVzYyAqZGVzYywgZG1hX2FkZHJfdCBhZGRyLCB1MzIgZXBfYWRkciwgaW50IGxlbikKLXsKLSAgQlVHX09OKGxlbiAmIDMpOwotCWRlc2MtPncwID0gY3B1X3RvX2xlMzIobGVuIC8gNCk7Ci0JZGVzYy0+ZXBfYWRkciA9IGNwdV90b19sZTMyKGVwX2FkZHIpOwotCWRlc2MtPnJjX2FkZHJfaCA9IGNwdV90b19sZTMyKHBjaV9kbWFfaChhZGRyKSk7Ci0JZGVzYy0+cmNfYWRkcl9sID0gY3B1X3RvX2xlMzIocGNpX2RtYV9sKGFkZHIpKTsKLX0KLQotI2lmIEFMVFBDSUVDSERNQV9DREVWCi0vKgotICogYXBlX3NnX3RvX2NoZG1hX3RhYmxlKCkgLSBDcmVhdGUgYSBkZXZpY2UgZGVzY3JpcHRvciB0YWJsZSBmcm9tIGEgc2NhdHRlcmxpc3QuCi0gKgotICogVGhlIHNjYXR0ZXJsaXN0IG11c3QgaGF2ZSBiZWVuIG1hcHBlZCBieSBwY2lfbWFwX3NnKHNnbS0+c2dsKS4KLSAqCi0gKiBAc2dsIHNjYXR0ZXJsaXN0LgotICogQG5lbnRzIE51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzY2F0dGVybGlzdC4KLSAqIEBmaXJzdCBTdGFydCBpbmRleCBpbiB0aGUgc2NhdHRlcmxpc3Qgc2dtLT5zZ2wuCi0gKiBAZXBfYWRkciBFbmQgUG9pbnQgYWRkcmVzcyBmb3IgdGhlIHNjYXR0ZXIvZ2F0aGVyIHRyYW5zZmVyLgotICogQGRlc2MgcG9pbnRlciB0byBmaXJzdCBkZXNjcmlwdG9yCi0gKgotICogUmV0dXJucyBOdW1iZXIgb2YgZW50cmllcyBpbiB0aGUgdGFibGUgb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCi0gKi8KLXN0YXRpYyBpbnQgYXBlX3NnX3RvX2NoZG1hX3RhYmxlKHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCBpbnQgbmVudHMsIGludCBmaXJzdCwgc3RydWN0IGFwZV9jaGRtYV9kZXNjICpkZXNjLCB1MzIgZXBfYWRkcikKLXsKLQlpbnQgaSA9IGZpcnN0LCBqID0gMDsKLQkvKiBpbnNwZWN0IGZpcnN0IGVudHJ5ICovCi0JZG1hX2FkZHJfdCBhZGRyID0gc2dfZG1hX2FkZHJlc3MoJnNnbFtpXSk7Ci0JdW5zaWduZWQgaW50IGxlbiA9IHNnX2RtYV9sZW4oJnNnbFtpXSk7Ci0JLyogY29udGlndW91cyBibG9jayAqLwotCWRtYV9hZGRyX3QgY29udF9hZGRyID0gYWRkcjsKLQl1bnNpZ25lZCBpbnQgY29udF9sZW4gPSBsZW47Ci0JLyogaXRlcmF0ZSBvdmVyIHJlbWFpbmluZyBlbnRyaWVzICovCi0JZm9yICg7IGogPCAyNSAmJiBpIDwgbmVudHMgLSAxOyBpKyspIHsKLQkJLyogYnVzIGFkZHJlc3Mgb2YgbmV4dCBlbnRyeSBpICsgMSAqLwotCQlkbWFfYWRkcl90IG5leHQgPSBzZ19kbWFfYWRkcmVzcygmc2dsW2kgKyAxXSk7Ci0JCS8qIGxlbmd0aCBvZiB0aGlzIGVudHJ5IGkgKi8KLQkJbGVuID0gc2dfZG1hX2xlbigmc2dsW2ldKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiUwNGQ6IGFkZHI9MHglTHggbGVuZ3RoPTB4JTA4eFxuIiwgaSwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYWRkciwgbGVuKTsKLQkJLyogZW50cnkgaSArIDEgaXMgbm9uLWNvbnRpZ3VvdXMgd2l0aCBlbnRyeSBpPyAqLwotCQlpZiAobmV4dCAhPSBhZGRyICsgbGVuKSB7Ci0JCQkvKiBUT0RPIGNyZWF0ZSBlbnRyeSBoZXJlICh3ZSBjb3VsZCBvdmVyd3JpdGUgaSkgKi8KLQkJCXByaW50ayhLRVJOX0RFQlVHICIlNGQ6IGNvbnRfYWRkcj0weCVMeCBjb250X2xlbj0weCUwOHhcbiIsIGosCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb250X2FkZHIsIGNvbnRfbGVuKTsKLQkJCS8qIHNldCBkZXNjcmlwdG9yIGZvciBjb250aWd1b3VzIHRyYW5zZmVyICovCi0JCQlhcGVfY2hkbWFfZGVzY19zZXQoJmRlc2Nbal0sIGNvbnRfYWRkciwgZXBfYWRkciwgY29udF9sZW4pOwotCQkJLyogbmV4dCBlbmQgcG9pbnQgbWVtb3J5IGFkZHJlc3MgKi8KLQkJCWVwX2FkZHIgKz0gY29udF9sZW47Ci0JCQkvKiBzdGFydCBuZXcgY29udGlndW91cyBibG9jayAqLwotCQkJY29udF9hZGRyID0gbmV4dDsKLQkJCWNvbnRfbGVuID0gMDsKLQkJCWorKzsKLQkJfQotCQkvKiBhZGQgZW50cnkgaSArIDEgdG8gY3VycmVudCBjb250aWd1b3VzIGJsb2NrICovCi0JCWNvbnRfbGVuICs9IGxlbjsKLQkJLyogZ290byBlbnRyeSBpICsgMSAqLwotCQlhZGRyID0gbmV4dDsKLQl9Ci0JLyogVE9ETyBjcmVhdGUgZW50cnkgaGVyZSAgKHdlIGNvdWxkIG92ZXJ3cml0ZSBpKSAqLwotCXByaW50ayhLRVJOX0RFQlVHICIlMDRkOiBhZGRyPTB4JUx4IGxlbmd0aD0weCUwOHhcbiIsIGksCi0JCSh1bnNpZ25lZCBsb25nIGxvbmcpYWRkciwgbGVuKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJTRkOiBjb250X2FkZHI9MHglTHggbGVuZ3RoPTB4JTA4eFxuIiwgaiwKLQkJKHVuc2lnbmVkIGxvbmcgbG9uZyljb250X2FkZHIsIGNvbnRfbGVuKTsKLQlqKys7Ci0JcmV0dXJuIGo7Ci19Ci0jZW5kaWYKLQotLyogY29tcGFyZSBidWZmZXJzICovCi1zdGF0aWMgaW5saW5lIGludCBjb21wYXJlKHUzMiAqcCwgdTMyICpxLCBpbnQgbGVuKQotewotCWludCByZXN1bHQgPSAtMTsKLQlpbnQgZmFpbCA9IDA7Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IGxlbiAvIDQ7IGkrKykgewotCQlpZiAoKnAgPT0gKnEpIHsKLQkJCS8qIGV2ZXJ5IHNvIG1hbnkgdTMyIHdvcmRzLCBzaG93IGVxdWFscyAqLwotCQkJaWYgKChpICYgMjU1KSA9PSAwKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICJbJXBdID0gMHglMDh4ICAgIFslcF0gPSAweCUwOHhcbiIsIHAsICpwLCBxLCAqcSk7Ci0JCX0gZWxzZSB7Ci0JCQlmYWlsKys7Ci0JCQkvKiBzaG93IHRoZSBmaXJzdCBmZXcgbWlzY29tcGFyZXMgKi8KLQkJCWlmIChmYWlsIDwgMTApCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIlslcF0gPSAweCUwOHggIT0gWyVwXSA9IDB4JTA4eCA/IVxuIiwgcCwgKnAsIHEsICpxKTsKLQkJCQkvKiBidXQgc3RvcCBhZnRlciBhIHdoaWxlICovCi0JCQllbHNlIGlmIChmYWlsID09IDEwKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICItLS1tb3JlIGVycm9ycyBmb2xsb3chIG5vdCBwcmludGVkLS0tXG4iKTsKLQkJCWVsc2UKLQkJCQkvKiBzdG9wIGNvbXBhcmUgYWZ0ZXIgdGhpcyBtYW55IGVycm9ycyAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJcCsrOwotCQlxKys7Ci0JfQotCWlmICghZmFpbCkKLQkJcmVzdWx0ID0gMDsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKiBkbWFfdGVzdCgpIC0gUGVyZm9ybSBETUEgbG9vcCBiYWNrIHRlc3QgdG8gZW5kIHBvaW50IGFuZCBiYWNrIHRvIHJvb3QgY29tcGxleC4KLSAqCi0gKiBBbGxvY2F0ZSBhIGNhY2hlLWNvaGVyZW50IGJ1ZmZlciBpbiBob3N0IG1lbW9yeSwgY29uc2lzdGluZyBvZiBmb3VyIHBhZ2VzLgotICoKLSAqIEZpbGwgdGhlIGZvdXIgbWVtb3J5IHBhZ2VzIHN1Y2ggdGhhdCBlYWNoIDMyLWJpdCB3b3JkIGNvbnRhaW5zIGl0cyBvd24gYWRkcmVzcy4KLSAqCi0gKiBOb3cgcGVyZm9ybSBhIGxvb3AgYmFjayB0ZXN0LCBoYXZlIHRoZSBlbmQgcG9pbnQgZGV2aWNlIGNvcHkgdGhlIGZpcnN0IGJ1ZmZlcgotICogaGFsZiB0byBlbmQgcG9pbnQgbWVtb3J5LCB0aGVuIGhhdmUgaXQgY29weSBiYWNrIGludG8gdGhlIHNlY29uZCBoYWxmLgotICoKLSAqICAgQ3JlYXRlIGEgZGVzY3JpcHRvciB0YWJsZSB0byBjb3B5IHRoZSBmaXJzdCBidWZmZXIgaGFsZiBpbnRvIEVuZCBQb2ludAotICogICBtZW1vcnkuIEluc3RydWN0IHRoZSBFbmQgUG9pbnQgdG8gZG8gYSBETUEgcmVhZCB1c2luZyB0aGF0IHRhYmxlLgotICoKLSAqICAgQ3JlYXRlIGEgZGVzY3JpcHRvciB0YWJsZSB0byBjb3B5IEVuZCBQb2ludCBtZW1vcnkgdG8gdGhlIHNlY29uZCBidWZmZXIKLSAqICAgaGFsZi4gSW5zdHJ1Y3QgdGhlIEVuZCBQb2ludCB0byBkbyBhIERNQSB3cml0ZSB1c2luZyB0aGF0IHRhYmxlLgotICoKLSAqIENvbXBhcmUgcmVzdWx0cywgZmFpbCBvciBwYXNzLgotICoKLSAqLwotc3RhdGljIGludCBfX2RldmluaXQgZG1hX3Rlc3Qoc3RydWN0IGFwZV9kZXYgKmFwZSwgc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQkvKiB0ZXN0IHJlc3VsdDsgZ3VpbHR5IHVudGlsIHByb3ZlbiBpbm5vY2VudCAqLwotCWludCByZXN1bHQgPSAtMTsKLQkvKiB0aGUgRE1BIHJlYWQgaGVhZGVyIHNpdHMgYXQgYWRkcmVzcyAweDAwIG9mIHRoZSBETUEgZW5naW5lIEJBUiAqLwotCXN0cnVjdCBhcGVfY2hkbWFfaGVhZGVyICp3cml0ZV9oZWFkZXIgPSAoc3RydWN0IGFwZV9jaGRtYV9oZWFkZXIgKilhcGUtPmJhcltBUEVfQkFSX0hFQURFUl07Ci0JLyogdGhlIHdyaXRlIERNQSBoZWFkZXIgc2l0cyBhZnRlciB0aGUgcmVhZCBoZWFkZXIgYXQgYWRkcmVzcyAweDEwICovCi0Jc3RydWN0IGFwZV9jaGRtYV9oZWFkZXIgKnJlYWRfaGVhZGVyID0gd3JpdGVfaGVhZGVyICsgMTsKLQkvKiB2aXJ0dWFsIGFkZHJlc3Mgb2YgdGhlIGFsbG9jYXRlZCBidWZmZXIgKi8KLQl1OCAqYnVmZmVyX3ZpcnQgPSAwOwotCS8qIGJ1cyBhZGRyZXNzIG9mIHRoZSBhbGxvY2F0ZWQgYnVmZmVyICovCi0JZG1hX2FkZHJfdCBidWZmZXJfYnVzID0gMDsKLQlpbnQgaSwgbiA9IDAsIGlycV9jb3VudDsKLQotCS8qIHRlbXBvcmFyeSB2YWx1ZSB1c2VkIHRvIGNvbnN0cnVjdCAzMi1iaXQgZGF0YSB3b3JkcyAqLwotCXUzMiB3OwotCi0JcHJpbnRrKEtFUk5fREVCVUcgImJhcl90ZXN0cygpLCBQQUdFX1NJWkUgPSAweCUweFxuIiwgKGludClQQUdFX1NJWkUpOwotCXByaW50ayhLRVJOX0RFQlVHICJ3cml0ZV9oZWFkZXIgPSAweCVwLlxuIiwgd3JpdGVfaGVhZGVyKTsKLQlwcmludGsoS0VSTl9ERUJVRyAicmVhZF9oZWFkZXIgPSAweCVwLlxuIiwgcmVhZF9oZWFkZXIpOwotCXByaW50ayhLRVJOX0RFQlVHICImd3JpdGVfaGVhZGVyLT53MyA9IDB4JXBcbiIsICZ3cml0ZV9oZWFkZXItPnczKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJnJlYWRfaGVhZGVyLT53MyA9IDB4JXBcbiIsICZyZWFkX2hlYWRlci0+dzMpOwotCXByaW50ayhLRVJOX0RFQlVHICJhcGUtPnRhYmxlX3ZpcnQgPSAweCVwLlxuIiwgYXBlLT50YWJsZV92aXJ0KTsKLQotCWlmICghd3JpdGVfaGVhZGVyIHx8ICFyZWFkX2hlYWRlciB8fCAhYXBlLT50YWJsZV92aXJ0KQotCQlnb3RvIGZhaWw7Ci0KLQkvKiBhbGxvY2F0ZSBhbmQgbWFwIGNvaGVyZW50bHktY2FjaGVkIG1lbW9yeSBmb3IgYSBETUEtYWJsZSBidWZmZXIgKi8KLQkvKiBAc2VlIERvY3VtZW50YXRpb24vUENJL1BDSS1ETUEtbWFwcGluZy50eHQsIG5lYXIgbGluZSAzMTggKi8KLQlidWZmZXJfdmlydCA9ICh1OCAqKXBjaV9hbGxvY19jb25zaXN0ZW50KGRldiwgUEFHRV9TSVpFICogNCwgJmJ1ZmZlcl9idXMpOwotCWlmICghYnVmZmVyX3ZpcnQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBhbGxvY2F0ZSBjb2hlcmVudCBETUEgYnVmZmVyLlxuIik7Ci0JCWdvdG8gZmFpbDsKLQl9Ci0JcHJpbnRrKEtFUk5fREVCVUcgIkFsbG9jYXRlZCBjYWNoZS1jb2hlcmVudCBETUEgYnVmZmVyICh2aXJ0dWFsIGFkZHJlc3MgPSAlcCwgYnVzIGFkZHJlc3MgPSAweCUwMTZsbHgpLlxuIiwKLQkgICAgICAgYnVmZmVyX3ZpcnQsICh1NjQpYnVmZmVyX2J1cyk7Ci0KLQkvKiBmaWxsIGZpcnN0IGhhbGYgb2YgYnVmZmVyIHdpdGggaXRzIHZpcnR1YWwgYWRkcmVzcyBhcyBkYXRhICovCi0JZm9yIChpID0gMDsgaSA8IDQgKiBQQUdFX1NJWkU7IGkgKz0gNCkKLSNpZiAwCi0JCSoodTMyICopKGJ1ZmZlcl92aXJ0ICsgaSkgPSBpIC8gUEFHRV9TSVpFICsgMTsKLSNlbHNlCi0JCSoodTMyICopKGJ1ZmZlcl92aXJ0ICsgaSkgPSAodTMyKSh1bnNpZ25lZCBsb25nKShidWZmZXJfdmlydCArIGkpOwotI2VuZGlmCi0jaWYgMAotICBjb21wYXJlKCh1MzIgKilidWZmZXJfdmlydCwgKHUzMiAqKShidWZmZXJfdmlydCArIDIgKiBQQUdFX1NJWkUpLCA4MTkyKTsKLSNlbmRpZgotCi0jaWYgMAotCS8qIGZpbGwgc2Vjb25kIGhhbGYgb2YgYnVmZmVyIHdpdGggemVyb2VzICovCi0JZm9yIChpID0gMiAqIFBBR0VfU0laRTsgaSA8IDQgKiBQQUdFX1NJWkU7IGkgKz0gNCkKLQkJKih1MzIgKikoYnVmZmVyX3ZpcnQgKyBpKSA9IDA7Ci0jZW5kaWYKLQotCS8qIGludmFsaWRhdGUgRVBMQVNULCBvdXRzaWRlIDAtMjU1LCAweEZBREUgaXMgZnJvbSB0aGUgdGVzdGJlbmNoICovCi0JYXBlLT50YWJsZV92aXJ0LT53MyA9IGNwdV90b19sZTMyKDB4MDAwMEZBREUpOwotCi0JLyogZmlsbCBpbiBmaXJzdCBkZXNjcmlwdG9yICovCi0JbiA9IDA7Ci0JLyogcmVhZCA4MTkyIGJ5dGVzIGZyb20gUkMgYnVmZmVyIHRvIEVQIGFkZHJlc3MgNDA5NiAqLwotCWFwZV9jaGRtYV9kZXNjX3NldCgmYXBlLT50YWJsZV92aXJ0LT5kZXNjW25dLCBidWZmZXJfYnVzLCA0MDk2LCAyICogUEFHRV9TSVpFKTsKLSNpZiAxCi0JZm9yIChpID0gMDsgaSA8IDI1NTsgaSsrKQotCQlhcGVfY2hkbWFfZGVzY19zZXQoJmFwZS0+dGFibGVfdmlydC0+ZGVzY1tpXSwgYnVmZmVyX2J1cywgNDA5NiwgMiAqIFBBR0VfU0laRSk7Ci0JLyogaW5kZXggb2YgbGFzdCBkZXNjcmlwdG9yICovCi0JbiA9IGkgLSAxOwotI2VuZGlmCi0jaWYgMAotCS8qIGZpbGwgaW4gbmV4dCBkZXNjcmlwdG9yICovCi0JbisrOwotCS8qIHJlYWQgMTAyNCBieXRlcyBmcm9tIFJDIGJ1ZmZlciB0byBFUCBhZGRyZXNzIDQwOTYgKyAxMDI0ICovCi0JYXBlX2NoZG1hX2Rlc2Nfc2V0KCZhcGUtPnRhYmxlX3ZpcnQtPmRlc2Nbbl0sIGJ1ZmZlcl9idXMgKyAxMDI0LCA0MDk2ICsgMTAyNCwgMTAyNCk7Ci0jZW5kaWYKLQotI2lmIDEKLQkvKiBlbmFibGUgTVNJIGFmdGVyIHRoZSBsYXN0IGRlc2NyaXB0b3IgaXMgY29tcGxldGVkICovCi0JaWYgKGFwZS0+bXNpX2VuYWJsZWQpCi0JCWFwZS0+dGFibGVfdmlydC0+ZGVzY1tuXS53MCB8PSBjcHVfdG9fbGUzMigxVUwgPDwgMTYpLypsb2NhbCBNU0kqLzsKLSNlbmRpZgotI2lmIDAKLQkvKiBkdW1wIGRlc2NyaXB0b3IgdGFibGUgZm9yIGRlYnVnZ2luZyAqLwotCXByaW50ayhLRVJOX0RFQlVHICJEZXNjcmlwdG9yIFRhYmxlIChSZWFkLCBpbiBSb290IENvbXBsZXggTWVtb3J5LCAjID0gJWQpXG4iLCBuICsgMSk7Ci0JZm9yIChpID0gMDsgaSA8IDQgKyAobiArIDEpICogNDsgaSArPSA0KSB7Ci0JCXUzMiAqcCA9ICh1MzIgKilhcGUtPnRhYmxlX3ZpcnQ7Ci0JCXAgKz0gaTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIjB4JTA4eC8weCUwMng6IDB4JTA4eCAoTEVOPTB4JXgpXG4iLCAodTMyKXAsICh1MzIpcCAmIDE1LCAqcCwgNCAqIGxlMzJfdG9fY3B1KCpwKSk7Ci0JCXArKzsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIjB4JTA4eC8weCUwMng6IDB4JTA4eCAoRVBBPTB4JXgpXG4iLCAodTMyKXAsICh1MzIpcCAmIDE1LCAqcCwgbGUzMl90b19jcHUoKnApKTsKLQkJcCsrOwotCQlwcmludGsoS0VSTl9ERUJVRyAiMHglMDh4LzB4JTAyeDogMHglMDh4IChSQ0g9MHgleClcbiIsICh1MzIpcCwgKHUzMilwICYgMTUsICpwLCBsZTMyX3RvX2NwdSgqcCkpOwotCQlwKys7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIweCUwOHgvMHglMDJ4OiAweCUwOHggKFJDTD0weCV4KVxuIiwgKHUzMilwLCAodTMyKXAgJiAxNSwgKnAsIGxlMzJfdG9fY3B1KCpwKSk7Ci0JfQotI2VuZGlmCi0JLyogc2V0IGF2YWlsYWJsZSBudW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gdGFibGUgKi8KLQl3ID0gKHUzMikobiArIDEpOwotCXcgfD0gKDFVTCA8PCAxOCkvKmdsb2JhbCBFUExBU1RfRU4qLzsKLSNpZiAwCi0JaWYgKGFwZS0+bXNpX2VuYWJsZWQpCi0JCXcgfD0gKDFVTCA8PCAxNykvKmdsb2JhbCBNU0kqLzsKLSNlbmRpZgotCXByaW50ayhLRVJOX0RFQlVHICJ3cml0aW5nIDB4JTA4eCB0byAweCVwXG4iLCB3LCAodm9pZCAqKSZyZWFkX2hlYWRlci0+dzApOwotCWlvd3JpdGUzMih3LCAmcmVhZF9oZWFkZXItPncwKTsKLQotCS8qIHdyaXRlIHRhYmxlIGFkZHJlc3MgKGhpZ2hlciAzMi1iaXRzKSAqLwotCXByaW50ayhLRVJOX0RFQlVHICJ3cml0aW5nIDB4JTA4eCB0byAweCVwXG4iLCAodTMyKSgoYXBlLT50YWJsZV9idXMgPj4gMTYpID4+IDE2KSwgKHZvaWQgKikmcmVhZF9oZWFkZXItPmJkdF9hZGRyX2gpOwotCWlvd3JpdGUzMihwY2lfZG1hX2goYXBlLT50YWJsZV9idXMpLCAmcmVhZF9oZWFkZXItPmJkdF9hZGRyX2gpOwotCi0JLyogd3JpdGUgdGFibGUgYWRkcmVzcyAobG93ZXIgMzItYml0cykgKi8KLQlwcmludGsoS0VSTl9ERUJVRyAid3JpdGluZyAweCUwOHggdG8gMHglcFxuIiwgKHUzMikoYXBlLT50YWJsZV9idXMgJiAweGZmZmZmZmZmVUwpLCAodm9pZCAqKSZyZWFkX2hlYWRlci0+YmR0X2FkZHJfbCk7Ci0JaW93cml0ZTMyKHBjaV9kbWFfbChhcGUtPnRhYmxlX2J1cyksICZyZWFkX2hlYWRlci0+YmR0X2FkZHJfbCk7Ci0KLQkvKiBtZW1vcnkgd3JpdGUgYmFycmllciAqLwotCXdtYigpOwotCXByaW50ayhLRVJOX0RFQlVHICJGbHVzaCBwb3N0ZWQgd3JpdGVzXG4iKTsKLQkvKiogRklYTUUgQWRkIGR1bW15IHJlYWQgdG8gZmx1c2ggcG9zdGVkIHdyaXRlcyBidXQgbmVlZCBhIHJlYWRhYmxlIGxvY2F0aW9uISAqLwotI2lmIDAKLQkodm9pZClpb3JlYWQzMigpOwotI2VuZGlmCi0KLQkvKiByZW1lbWJlciBJUlEgY291bnQgYmVmb3JlIHRoZSB0cmFuc2ZlciAqLwotCWlycV9jb3VudCA9IGFwZS0+aXJxX2NvdW50OwotCS8qIHdyaXRlIG51bWJlciBvZiBkZXNjcmlwdG9ycyAtIHRoaXMgc3RhcnRzIHRoZSBETUEgKi8KLQlwcmludGsoS0VSTl9ERUJVRyAiXG5TdGFydCBETUEgcmVhZFxuIik7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIndyaXRpbmcgMHglMDh4IHRvIDB4JXBcbiIsICh1MzIpbiwgKHZvaWQgKikmcmVhZF9oZWFkZXItPnczKTsKLQlpb3dyaXRlMzIobiwgJnJlYWRfaGVhZGVyLT53Myk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIkVQTEFTVCA9ICVsdVxuIiwgbGUzMl90b19jcHUoKih1MzIgKikmYXBlLT50YWJsZV92aXJ0LT53MykgJiAweGZmZmZVTCk7Ci0KLQkvKiogbWVtb3J5IHdyaXRlIGJhcnJpZXIgKi8KLQl3bWIoKTsKLQkvKiBkdW1teSByZWFkIHRvIGZsdXNoIHBvc3RlZCB3cml0ZXMgKi8KLQkvKiBGSVhNRSBOZWVkIGEgcmVhZGFibGUgbG9jYXRpb24hICovCi0jaWYgMAotCSh2b2lkKWlvcmVhZDMyKCk7Ci0jZW5kaWYKLQlwcmludGsoS0VSTl9ERUJVRyAiUE9MTCBGT1IgUkVBRDpcbiIpOwotCS8qIHBvbGwgZm9yIGNoYWluIGNvbXBsZXRpb24sIDEwMDAgdGltZXMgMSBtaWxsaXNlY29uZCAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewotCQl2b2xhdGlsZSB1MzIgKnAgPSAmYXBlLT50YWJsZV92aXJ0LT53MzsKLQkJdTMyIGVwbGFzdCA9IGxlMzJfdG9fY3B1KCpwKSAmIDB4ZmZmZlVMOwotCQlwcmludGsoS0VSTl9ERUJVRyAiRVBMQVNUID0gJXUsIG4gPSAlZFxuIiwgZXBsYXN0LCBuKTsKLQkJaWYgKGVwbGFzdCA9PSBuKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiRE9ORVxuIik7Ci0JCQkvKiBwcmludCBJUlEgY291bnQgYmVmb3JlIHRoZSB0cmFuc2ZlciAqLwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiNJUlFzIGR1cmluZyB0cmFuc2ZlcjogJWRcbiIsIGFwZS0+aXJxX2NvdW50IC0gaXJxX2NvdW50KTsKLQkJCWJyZWFrOwotCQl9Ci0JCXVkZWxheSgxMDApOwotCX0KLQotCS8qIGludmFsaWRhdGUgRVBMQVNULCBvdXRzaWRlIDAtMjU1LCAweEZBREUgaXMgZnJvbSB0aGUgdGVzdGJlbmNoICovCi0JYXBlLT50YWJsZV92aXJ0LT53MyA9IGNwdV90b19sZTMyKDB4MDAwMEZBREUpOwotCi0JLyogc2V0dXAgZmlyc3QgZGVzY3JpcHRvciAqLwotCW4gPSAwOwotCWFwZV9jaGRtYV9kZXNjX3NldCgmYXBlLT50YWJsZV92aXJ0LT5kZXNjW25dLCBidWZmZXJfYnVzICsgODE5MiwgNDA5NiwgMiAqIFBBR0VfU0laRSk7Ci0jaWYgMQotCWZvciAoaSA9IDA7IGkgPCAyNTU7IGkrKykKLQkJYXBlX2NoZG1hX2Rlc2Nfc2V0KCZhcGUtPnRhYmxlX3ZpcnQtPmRlc2NbaV0sIGJ1ZmZlcl9idXMgKyA4MTkyLCA0MDk2LCAyICogUEFHRV9TSVpFKTsKLQotCS8qIGluZGV4IG9mIGxhc3QgZGVzY3JpcHRvciAqLwotCW4gPSBpIC0gMTsKLSNlbmRpZgotI2lmIDEgLyogdGVzdCB2YXJpYWJsZSwgbWFrZSBhIG1vZHVsZSBvcHRpb24gbGF0ZXIgKi8KLQlpZiAoYXBlLT5tc2lfZW5hYmxlZCkKLQkJYXBlLT50YWJsZV92aXJ0LT5kZXNjW25dLncwIHw9IGNwdV90b19sZTMyKDFVTCA8PCAxNikvKmxvY2FsIE1TSSovOwotI2VuZGlmCi0jaWYgMAotCS8qIGR1bXAgZGVzY3JpcHRvciB0YWJsZSBmb3IgZGVidWdnaW5nICovCi0JcHJpbnRrKEtFUk5fREVCVUcgIkRlc2NyaXB0b3IgVGFibGUgKFdyaXRlLCBpbiBSb290IENvbXBsZXggTWVtb3J5LCAjID0gJWQpXG4iLCBuICsgMSk7Ci0JZm9yIChpID0gMDsgaSA8IDQgKyAobiArIDEpICogNDsgaSArPSA0KSB7Ci0JCXUzMiAqcCA9ICh1MzIgKilhcGUtPnRhYmxlX3ZpcnQ7Ci0JCXAgKz0gaTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIjB4JTA4eC8weCUwMng6IDB4JTA4eCAoTEVOPTB4JXgpXG4iLCAodTMyKXAsICh1MzIpcCAmIDE1LCAqcCwgNCAqIGxlMzJfdG9fY3B1KCpwKSk7Ci0JCXArKzsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIjB4JTA4eC8weCUwMng6IDB4JTA4eCAoRVBBPTB4JXgpXG4iLCAodTMyKXAsICh1MzIpcCAmIDE1LCAqcCwgbGUzMl90b19jcHUoKnApKTsKLQkJcCsrOwotCQlwcmludGsoS0VSTl9ERUJVRyAiMHglMDh4LzB4JTAyeDogMHglMDh4IChSQ0g9MHgleClcbiIsICh1MzIpcCwgKHUzMilwICYgMTUsICpwLCBsZTMyX3RvX2NwdSgqcCkpOwotCQlwKys7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIweCUwOHgvMHglMDJ4OiAweCUwOHggKFJDTD0weCV4KVxuIiwgKHUzMilwLCAodTMyKXAgJiAxNSwgKnAsIGxlMzJfdG9fY3B1KCpwKSk7Ci0JfQotI2VuZGlmCi0KLQkvKiBzZXQgbnVtYmVyIG9mIGF2YWlsYWJsZSBkZXNjcmlwdG9ycyBpbiB0aGUgdGFibGUgKi8KLQl3ID0gKHUzMikobiArIDEpOwotCS8qIGVuYWJsZSB1cGRhdGVzIG9mIGVwbGFzdCBmb3IgZWFjaCBkZXNjcmlwdG9yIGNvbXBsZXRpb24gKi8KLQl3IHw9ICh1MzIpKDFVTCA8PCAxOCkvKmdsb2JhbCBFUExBU1RfRU4qLzsKLSNpZiAwICAgLyogdGVzdCB2YXJpYWJsZSwgbWFrZSBhIG1vZHVsZSBvcHRpb24gbGF0ZXIgKi8KLQkvKiBlbmFibGUgTVNJIGZvciBlYWNoIGRlc2NyaXB0b3IgY29tcGxldGlvbiAqLwotCWlmIChhcGUtPm1zaV9lbmFibGVkKQotCQl3IHw9ICgxVUwgPDwgMTcpLypnbG9iYWwgTVNJKi87Ci0jZW5kaWYKLQlpb3dyaXRlMzIodywgJndyaXRlX2hlYWRlci0+dzApOwotCWlvd3JpdGUzMihwY2lfZG1hX2goYXBlLT50YWJsZV9idXMpLCAmd3JpdGVfaGVhZGVyLT5iZHRfYWRkcl9oKTsKLQlpb3dyaXRlMzIocGNpX2RtYV9sKGFwZS0+dGFibGVfYnVzKSwgJndyaXRlX2hlYWRlci0+YmR0X2FkZHJfbCk7Ci0KLQkvKiogbWVtb3J5IHdyaXRlIGJhcnJpZXIgYW5kIGZsdXNoIHBvc3RlZCB3cml0ZXMgKi8KLQl3bWIoKTsKLQkvKiBkdW1teSByZWFkIHRvIGZsdXNoIHBvc3RlZCB3cml0ZXMgKi8KLQkvKiBGSVhNRSBOZWVkIGEgcmVhZGFibGUgbG9jYXRpb24hICovCi0jaWYgMAotCSh2b2lkKWlvcmVhZDMyKCk7Ci0jZW5kaWYKLQlpcnFfY291bnQgPSBhcGUtPmlycV9jb3VudDsKLQotCXByaW50ayhLRVJOX0RFQlVHICJcblN0YXJ0IERNQSB3cml0ZVxuIik7Ci0JaW93cml0ZTMyKG4sICZ3cml0ZV9oZWFkZXItPnczKTsKLQotCS8qKiBtZW1vcnkgd3JpdGUgYmFycmllciAqLwotCXdtYigpOwotCS8qKiBkdW1teSByZWFkIHRvIGZsdXNoIHBvc3RlZCB3cml0ZXMgKi8KLQkvKiAodm9pZCkgaW9yZWFkMzIoKTsgKi8KLQotCXByaW50ayhLRVJOX0RFQlVHICJQT0xMIEZPUiBXUklURTpcbiIpOwotCS8qIHBvbGwgZm9yIGNvbXBsZXRpb24sIDEwMDAgdGltZXMgMSBtaWxsaXNlY29uZCAqLwotCWZvciAoaSA9IDA7IGkgPCAxMDA7IGkrKykgewotCQl2b2xhdGlsZSB1MzIgKnAgPSAmYXBlLT50YWJsZV92aXJ0LT53MzsKLQkJdTMyIGVwbGFzdCA9IGxlMzJfdG9fY3B1KCpwKSAmIDB4ZmZmZlVMOwotCQlwcmludGsoS0VSTl9ERUJVRyAiRVBMQVNUID0gJXUsIG4gPSAlZFxuIiwgZXBsYXN0LCBuKTsKLQkJaWYgKGVwbGFzdCA9PSBuKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiRE9ORVxuIik7Ci0JCQkvKiBwcmludCBJUlEgY291bnQgYmVmb3JlIHRoZSB0cmFuc2ZlciAqLwotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiNJUlFzIGR1cmluZyB0cmFuc2ZlcjogJWRcbiIsIGFwZS0+aXJxX2NvdW50IC0gaXJxX2NvdW50KTsKLQkJCWJyZWFrOwotCQl9Ci0JCXVkZWxheSgxMDApOwotCX0KLQkvKiBzb2Z0LXJlc2V0IERNQSB3cml0ZSBlbmdpbmUgKi8KLQlpb3dyaXRlMzIoMHgwMDAwZmZmZlVMLCAmd3JpdGVfaGVhZGVyLT53MCk7Ci0JLyogc29mdC1yZXNldCBETUEgcmVhZCBlbmdpbmUgKi8KLQlpb3dyaXRlMzIoMHgwMDAwZmZmZlVMLCAmcmVhZF9oZWFkZXItPncwKTsKLQotCS8qKiBtZW1vcnkgd3JpdGUgYmFycmllciAqLwotCXdtYigpOwotCS8qIGR1bW15IHJlYWQgdG8gZmx1c2ggcG9zdGVkIHdyaXRlcyAqLwotCS8qIEZJWE1FIE5lZWQgYSByZWFkYWJsZSBsb2NhdGlvbiEgKi8KLSNpZiAwCi0JKHZvaWQpaW9yZWFkMzIoKTsKLSNlbmRpZgotCS8qIGNvbXBhcmUgZmlyc3QgaGFsZiBvZiBidWZmZXIgd2l0aCBzZWNvbmQgaGFsZiwgc2hvdWxkIGJlIGlkZW50aWNhbCAqLwotCXJlc3VsdCA9IGNvbXBhcmUoKHUzMiAqKWJ1ZmZlcl92aXJ0LCAodTMyICopKGJ1ZmZlcl92aXJ0ICsgMiAqIFBBR0VfU0laRSksIDgxOTIpOwotCXByaW50ayhLRVJOX0RFQlVHICJETUEgbG9vcCBiYWNrIHRlc3QgJXMuXG4iLCByZXN1bHQgPyAiRkFJTEVEIiA6ICJQQVNTRUQiKTsKLQotCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCA0ICogUEFHRV9TSVpFLCBidWZmZXJfdmlydCwgYnVmZmVyX2J1cyk7Ci1mYWlsOgotCXByaW50ayhLRVJOX0RFQlVHICJiYXJfdGVzdHMoKSBlbmQsIHJlc3VsdCAlZFxuIiwgcmVzdWx0KTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKiBDYWxsZWQgd2hlbiB0aGUgUENJIHN1YiBzeXN0ZW0gdGhpbmtzIHdlIGNhbiBjb250cm9sIHRoZSBnaXZlbiBkZXZpY2UuCi0gKiBJbnNwZWN0IGlmIHdlIGNhbiBzdXBwb3J0IHRoZSBkZXZpY2UgYW5kIGlmIHNvIHRha2UgY29udHJvbCBvZiBpdC4KLSAqCi0gKiBSZXR1cm4gMCB3aGVuIHdlIGhhdmUgdGFrZW4gY29udHJvbCBvZiB0aGUgZ2l2ZW4gZGV2aWNlLgotICoKLSAqIC0gYWxsb2NhdGUgYm9hcmQgc3BlY2lmaWMgYm9va2tlZXBpbmcKLSAqIC0gYWxsb2NhdGUgY29oZXJlbnRseS1tYXBwZWQgbWVtb3J5IGZvciB0aGUgZGVzY3JpcHRvciB0YWJsZQotICogLSBlbmFibGUgdGhlIGJvYXJkCi0gKiAtIHZlcmlmeSBib2FyZCByZXZpc2lvbgotICogLSByZXF1ZXN0IHJlZ2lvbnMKLSAqIC0gcXVlcnkgRE1BIG1hc2sKLSAqIC0gb2J0YWluIGFuZCByZXF1ZXN0IGlycQotICogLSBtYXAgcmVnaW9ucyBpbnRvIGtlcm5lbCBhZGRyZXNzIHNwYWNlCi0gKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHByb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKLXsKLQlpbnQgcmMgPSAwOwotCXN0cnVjdCBhcGVfZGV2ICphcGUgPSBOVUxMOwotCXU4IGlycV9waW4sIGlycV9saW5lOwotCXByaW50ayhLRVJOX0RFQlVHICJwcm9iZShkZXYgPSAweCVwLCBwY2lpZCA9IDB4JXApXG4iLCBkZXYsIGlkKTsKLQotCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgcGVyLWJvYXJkIGJvb2sga2VlcGluZyAqLwotCWFwZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhcGVfZGV2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhcGUpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBremFsbG9jKClhdGUgbWVtb3J5LlxuIik7Ci0JCWdvdG8gZXJyX2FwZTsKLQl9Ci0JYXBlLT5wY2lfZGV2ID0gZGV2OwotCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIGFwZSk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgInByb2JlKCkgYXBlID0gMHglcFxuIiwgYXBlKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICJzaXplb2Yoc3RydWN0IGFwZV9jaGRtYV90YWJsZSkgPSAlZC5cbiIsCi0JCShpbnQpc2l6ZW9mKHN0cnVjdCBhcGVfY2hkbWFfdGFibGUpKTsKLQkvKiB0aGUgcmVmZXJlbmNlIGRlc2lnbiBoYXMgYSBzaXplIHJlc3RyaWN0aW9uIG9uIHRoZSB0YWJsZSBzaXplICovCi0JQlVHX09OKHNpemVvZihzdHJ1Y3QgYXBlX2NoZG1hX3RhYmxlKSA+IEFQRV9DSERNQV9UQUJMRV9TSVpFKTsKLQotCS8qIGFsbG9jYXRlIGFuZCBtYXAgY29oZXJlbnRseS1jYWNoZWQgbWVtb3J5IGZvciBhIGRlc2NyaXB0b3IgdGFibGUgKi8KLQkvKiBAc2VlIExERDMgcGFnZSA0NDYgKi8KLQlhcGUtPnRhYmxlX3ZpcnQgPSAoc3RydWN0IGFwZV9jaGRtYV90YWJsZSAqKXBjaV9hbGxvY19jb25zaXN0ZW50KGRldiwKLQkJQVBFX0NIRE1BX1RBQkxFX1NJWkUsICZhcGUtPnRhYmxlX2J1cyk7Ci0JLyogY291bGQgbm90IGFsbG9jYXRlIHRhYmxlPyAqLwotCWlmICghYXBlLT50YWJsZV92aXJ0KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3QgZG1hX2FsbG9jKClhdGVfY29oZXJlbnQgbWVtb3J5LlxuIik7Ci0JCWdvdG8gZXJyX3RhYmxlOwotCX0KLQotCXByaW50ayhLRVJOX0RFQlVHICJ0YWJsZV92aXJ0ID0gJXAsIHRhYmxlX2J1cyA9IDB4JTE2bGx4LlxuIiwKLQkJYXBlLT50YWJsZV92aXJ0LCAodTY0KWFwZS0+dGFibGVfYnVzKTsKLQotCS8qIGVuYWJsZSBkZXZpY2UgKi8KLQlyYyA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7Ci0JaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJwY2lfZW5hYmxlX2RldmljZSgpIGZhaWxlZFxuIik7Ci0JCWdvdG8gZXJyX2VuYWJsZTsKLQl9Ci0KLQkvKiBlbmFibGUgYnVzIG1hc3RlciBjYXBhYmlsaXR5IG9uIGRldmljZSAqLwotCXBjaV9zZXRfbWFzdGVyKGRldik7Ci0JLyogZW5hYmxlIG1lc3NhZ2Ugc2lnbmFsZWQgaW50ZXJydXB0cyAqLwotCXJjID0gcGNpX2VuYWJsZV9tc2koZGV2KTsKLQkvKiBjb3VsZCBub3QgdXNlIE1TST8gKi8KLQlpZiAocmMpIHsKLQkJLyogcmVzb3J0IHRvIGxlZ2FjeSBpbnRlcnJ1cHRzICovCi0JCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3QgZW5hYmxlIE1TSSBpbnRlcnJ1cHRpbmcuXG4iKTsKLQkJYXBlLT5tc2lfZW5hYmxlZCA9IDA7Ci0JLyogTVNJIGVuYWJsZWQsIHJlbWVtYmVyIGZvciBjbGVhbnVwICovCi0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkVuYWJsZWQgTVNJIGludGVycnVwdGluZy5cbiIpOwotCQlhcGUtPm1zaV9lbmFibGVkID0gMTsKLQl9Ci0KLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJmFwZS0+cmV2aXNpb24pOwotI2lmIDAgLyogZXhhbXBsZSAqLwotCS8qIChmb3IgZXhhbXBsZSkgdGhpcyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCByZXZpc2lvbiAweDQyICovCi0gICAgaWYgKGFwZS0+cmV2aXNpb24gPT0gMHg0MikgewotCQlwcmludGsoS0VSTl9ERUJVRyAiUmV2aXNpb24gMHg0MiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgZHJpdmVyLlxuIik7Ci0JCXJjID0gLUVOT0RFVjsKLQkJZ290byBlcnJfcmV2OwotCX0KLSNlbmRpZgotCS8qKiBYWFggY2hlY2sgZm9yIG5hdGl2ZSBvciBsZWdhY3kgUENJZSBlbmRwb2ludD8gKi8KLQotCXJjID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhkZXYsIERSVl9OQU1FKTsKLQkvKiBjb3VsZCBub3QgcmVxdWVzdCBhbGwgcmVnaW9ucz8gKi8KLQlpZiAocmMpIHsKLQkJLyogYXNzdW1lIGRldmljZSBpcyBpbiB1c2UgKGFuZCBkbyBub3QgZGlzYWJsZSBpdCBsYXRlciEpICovCi0JCWFwZS0+aW5fdXNlID0gMTsKLQkJZ290byBlcnJfcmVnaW9uczsKLQl9Ci0JYXBlLT5nb3RfcmVnaW9ucyA9IDE7Ci0KLSNpZiAxICAgLyogQHRvZG8gRm9yIG5vdywgZGlzYWJsZSA2NC1iaXQsIGJlY2F1c2UgSSBkbyBub3QgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIChEQUMhKSAqLwotCS8qIHF1ZXJ5IGZvciBETUEgdHJhbnNmZXIgKi8KLQkvKiBAc2VlIERvY3VtZW50YXRpb24vUENJL1BDSS1ETUEtbWFwcGluZy50eHQgKi8KLQlpZiAoIXBjaV9zZXRfZG1hX21hc2soZGV2LCBETUFfQklUX01BU0soNjQpKSkgewotCQlwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2soZGV2LCBETUFfQklUX01BU0soNjQpKTsKLQkJLyogdXNlIDY0LWJpdCBETUEgKi8KLQkJcHJpbnRrKEtFUk5fREVCVUcgIlVzaW5nIGEgNjQtYml0IERNQSBtYXNrLlxuIik7Ci0JfSBlbHNlCi0jZW5kaWYKLQlpZiAoIXBjaV9zZXRfZG1hX21hc2soZGV2LCBETUFfQklUX01BU0soMzIpKSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiQ291bGQgbm90IHNldCA2NC1iaXQgRE1BIG1hc2suXG4iKTsKLQkJcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKGRldiwgRE1BX0JJVF9NQVNLKDMyKSk7Ci0JCS8qIHVzZSAzMi1iaXQgRE1BICovCi0JCXByaW50ayhLRVJOX0RFQlVHICJVc2luZyBhIDMyLWJpdCBETUEgbWFzay5cbiIpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJObyBzdWl0YWJsZSBETUEgcG9zc2libGUuXG4iKTsKLQkJLyoqIEB0b2RvIENob29zZSBwcm9wZXIgZXJyb3IgcmV0dXJuIGNvZGUgKi8KLQkJcmMgPSAtMTsKLQkJZ290byBlcnJfbWFzazsKLQl9Ci0KLQlyYyA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0lOVEVSUlVQVF9QSU4sICZpcnFfcGluKTsKLQkvKiBjb3VsZCBub3QgcmVhZD8gKi8KLQlpZiAocmMpCi0JCWdvdG8gZXJyX2lycTsKLQlwcmludGsoS0VSTl9ERUJVRyAiSVJRIHBpbiAjJWQgKDA9bm9uZSwgMT1JTlRBIy4uLjQ9SU5URCMpLlxuIiwgaXJxX3Bpbik7Ci0KLQkvKiBAc2VlIExERDMsIHBhZ2UgMzE4ICovCi0JcmMgPSBwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgJmlycV9saW5lKTsKLQkvKiBjb3VsZCBub3QgcmVhZD8gKi8KLQlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkNvdWxkIG5vdCBxdWVyeSBQQ0lfSU5URVJSVVBUX0xJTkUsIGVycm9yICVkXG4iLCByYyk7Ci0JCWdvdG8gZXJyX2lycTsKLQl9Ci0JcHJpbnRrKEtFUk5fREVCVUcgIklSUSBsaW5lICMlZC5cbiIsIGlycV9saW5lKTsKLSNpZiAxCi0JaXJxX2xpbmUgPSBkZXYtPmlycTsKLQkvKiBAc2VlIExERDMsIHBhZ2UgMjU5ICovCi0JcmMgPSByZXF1ZXN0X2lycShpcnFfbGluZSwgYWx0cGNpZWNoZG1hX2lzciwgSVJRRl9TSEFSRUQsIERSVl9OQU1FLCAodm9pZCAqKWFwZSk7Ci0JaWYgKHJjKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3QgcmVxdWVzdCBJUlEgIyVkLCBlcnJvciAlZFxuIiwgaXJxX2xpbmUsIHJjKTsKLQkJYXBlLT5pcnFfbGluZSA9IC0xOwotCQlnb3RvIGVycl9pcnE7Ci0JfQotCS8qIHJlbWVtYmVyIHdoaWNoIGlycSB3ZSBhbGxvY2F0ZWQgKi8KLQlhcGUtPmlycV9saW5lID0gKGludClpcnFfbGluZTsKLQlwcmludGsoS0VSTl9ERUJVRyAiU3VjY2VzZnVsbHkgcmVxdWVzdGVkIElSUSAjJWQgd2l0aCBkZXZfaWQgMHglcFxuIiwgaXJxX2xpbmUsIGFwZSk7Ci0jZW5kaWYKLQkvKiBzaG93IEJBUnMgKi8KLQlzY2FuX2JhcnMoYXBlLCBkZXYpOwotCS8qIG1hcCBCQVJzICovCi0JcmMgPSBtYXBfYmFycyhhcGUsIGRldik7Ci0JaWYgKHJjKQotCQlnb3RvIGVycl9tYXA7Ci0jaWYgQUxUUENJRUNIRE1BX0NERVYKLQkvKiBpbml0aWFsaXplIGNoYXJhY3RlciBkZXZpY2UgKi8KLQlyYyA9IHNnX2luaXQoYXBlKTsKLQlpZiAocmMpCi0JCWdvdG8gZXJyX2NkZXY7Ci0jZW5kaWYKLQkvKiBwZXJmb3JtIERNQSBlbmdpbmVzIGxvb3AgYmFjayB0ZXN0ICovCi0JcmMgPSBkbWFfdGVzdChhcGUsIGRldik7Ci0JKHZvaWQpcmM7Ci0JLyogc3VjY2Vzc2Z1bGx5IHRvb2sgdGhlIGRldmljZSAqLwotCXJjID0gMDsKLQlwcmludGsoS0VSTl9ERUJVRyAicHJvYmUoKSBzdWNjZXNzZnVsLlxuIik7Ci0JZ290byBlbmQ7Ci0jaWYgQUxUUENJRUNIRE1BX0NERVYKLWVycl9jZGV2OgotCS8qIHVubWFwIHRoZSBCQVJzICovCi0JdW5tYXBfYmFycyhhcGUsIGRldik7Ci0jZW5kaWYKLWVycl9tYXA6Ci0JLyogZnJlZSBhbGxvY2F0ZWQgaXJxICovCi0JaWYgKGFwZS0+aXJxX2xpbmUgPj0gMCkKLQkJZnJlZV9pcnEoYXBlLT5pcnFfbGluZSwgKHZvaWQgKilhcGUpOwotZXJyX2lycToKLQlpZiAoYXBlLT5tc2lfZW5hYmxlZCkKLQkJcGNpX2Rpc2FibGVfbXNpKGRldik7Ci0JLyogZGlzYWJsZSB0aGUgZGV2aWNlIGlmZiBpdCBpcyBub3QgaW4gdXNlICovCi0JaWYgKCFhcGUtPmluX3VzZSkKLQkJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7Ci0JaWYgKGFwZS0+Z290X3JlZ2lvbnMpCi0JCXBjaV9yZWxlYXNlX3JlZ2lvbnMoZGV2KTsKLWVycl9tYXNrOgotZXJyX3JlZ2lvbnM6Ci0vKmVycl9yZXY6Ki8KLS8qIGNsZWFuIHVwIGV2ZXJ5dGhpbmcgYmVmb3JlIGRldmljZSBlbmFibGUoKSAqLwotZXJyX2VuYWJsZToKLQlpZiAoYXBlLT50YWJsZV92aXJ0KQotCQlwY2lfZnJlZV9jb25zaXN0ZW50KGRldiwgQVBFX0NIRE1BX1RBQkxFX1NJWkUsIGFwZS0+dGFibGVfdmlydCwgYXBlLT50YWJsZV9idXMpOwotLyogY2xlYW4gdXAgZXZlcnl0aGluZyBiZWZvcmUgYWxsb2NhdGluZyBkZXNjcmlwdG9yIHRhYmxlICovCi1lcnJfdGFibGU6Ci0JaWYgKGFwZSkKLQkJa2ZyZWUoYXBlKTsKLWVycl9hcGU6Ci1lbmQ6Ci0JcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0Jc3RydWN0IGFwZV9kZXYgKmFwZSA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOwotCi0JcHJpbnRrKEtFUk5fREVCVUcgInJlbW92ZSgweCVwKVxuIiwgZGV2KTsKLQlwcmludGsoS0VSTl9ERUJVRyAicmVtb3ZlKGRldiA9IDB4JXApIHdoZXJlIGFwZSA9IDB4JXBcbiIsIGRldiwgYXBlKTsKLQotCS8qIHJlbW92ZSBjaGFyYWN0ZXIgZGV2aWNlICovCi0jaWYgQUxUUENJRUNIRE1BX0NERVYKLQlzZ19leGl0KGFwZSk7Ci0jZW5kaWYKLQotCWlmIChhcGUtPnRhYmxlX3ZpcnQpCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoZGV2LCBBUEVfQ0hETUFfVEFCTEVfU0laRSwgYXBlLT50YWJsZV92aXJ0LCBhcGUtPnRhYmxlX2J1cyk7Ci0KLQkvKiBmcmVlIElSUQotCSAqIEBzZWUgTEREMyBwYWdlIDI3OQotCSAqLwotCWlmIChhcGUtPmlycV9saW5lID49IDApIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkZyZWVpbmcgSVJRICMlZCBmb3IgZGV2X2lkIDB4JTA4bHguXG4iLAotCQlhcGUtPmlycV9saW5lLCAodW5zaWduZWQgbG9uZylhcGUpOwotCQlmcmVlX2lycShhcGUtPmlycV9saW5lLCAodm9pZCAqKWFwZSk7Ci0JfQotCS8qIE1TSSB3YXMgZW5hYmxlZD8gKi8KLQlpZiAoYXBlLT5tc2lfZW5hYmxlZCkgewotCQkvKiBEaXNhYmxlIE1TSSBAc2VlIERvY3VtZW50YXRpb24vTVNJLUhPV1RPLnR4dCAqLwotCQlwY2lfZGlzYWJsZV9tc2koZGV2KTsKLQkJYXBlLT5tc2lfZW5hYmxlZCA9IDA7Ci0JfQotCS8qIHVubWFwIHRoZSBCQVJzICovCi0JdW5tYXBfYmFycyhhcGUsIGRldik7Ci0JaWYgKCFhcGUtPmluX3VzZSkKLQkJcGNpX2Rpc2FibGVfZGV2aWNlKGRldik7Ci0JaWYgKGFwZS0+Z290X3JlZ2lvbnMpCi0JCS8qIHRvIGJlIGNhbGxlZCBhZnRlciBkZXZpY2UgZGlzYWJsZSAqLwotCQlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7Ci19Ci0KLSNpZiBBTFRQQ0lFQ0hETUFfQ0RFVgotCi0vKgotICogQ2FsbGVkIHdoZW4gdGhlIGRldmljZSBnb2VzIGZyb20gdW51c2VkIHRvIHVzZWQuCi0gKi8KLXN0YXRpYyBpbnQgc2dfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgYXBlX2RldiAqYXBlOwotCXByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FICJfb3BlbigpXG4iKTsKLQkvKiBwb2ludGVyIHRvIGNvbnRhaW5pbmcgZGF0YSBzdHJ1Y3R1cmUgb2YgdGhlIGNoYXJhY3RlciBkZXZpY2UgaW5vZGUgKi8KLQlhcGUgPSBjb250YWluZXJfb2YoaW5vZGUtPmlfY2Rldiwgc3RydWN0IGFwZV9kZXYsIGNkZXYpOwotCS8qIGNyZWF0ZSBhIHJlZmVyZW5jZSB0byBvdXIgZGV2aWNlIHN0YXRlIGluIHRoZSBvcGVuZWQgZmlsZSAqLwotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGFwZTsKLQkvKiBjcmVhdGUgdmlydHVhbCBtZW1vcnkgbWFwcGVyICovCi0JYXBlLT5zZ20gPSBzZ19jcmVhdGVfbWFwcGVyKE1BWF9DSERNQV9TSVpFKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIENhbGxlZCB3aGVuIHRoZSBkZXZpY2UgZ29lcyBmcm9tIHVzZWQgdG8gdW51c2VkLgotICovCi1zdGF0aWMgaW50IHNnX2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCS8qIGZldGNoIGRldmljZSBzcGVjaWZpYyBkYXRhIHN0b3JlZCBlYXJsaWVyIGR1cmluZyBvcGVuICovCi0Jc3RydWN0IGFwZV9kZXYgKmFwZSA9IChzdHJ1Y3QgYXBlX2RldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiX2Nsb3NlKClcbiIpOwotCS8qIGRlc3Ryb3kgdmlydHVhbCBtZW1vcnkgbWFwcGVyICovCi0Jc2dfZGVzdHJveV9tYXBwZXIoYXBlLT5zZ20pOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCBzZ19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcG9zKQotewotCS8qIGZldGNoIGRldmljZSBzcGVjaWZpYyBkYXRhIHN0b3JlZCBlYXJsaWVyIGR1cmluZyBvcGVuICovCi0Jc3RydWN0IGFwZV9kZXYgKmFwZSA9IChzdHJ1Y3QgYXBlX2RldiAqKWZpbGUtPnByaXZhdGVfZGF0YTsKLQkodm9pZClhcGU7Ci0JcHJpbnRrKEtFUk5fREVCVUcgRFJWX05BTUUgIl9yZWFkKGJ1Zj0weCVwLCBjb3VudD0lbGxkLCBwb3M9JWxsdSlcbiIsIGJ1ZiwgKHM2NCljb3VudCwgKHU2NCkqcG9zKTsKLQlyZXR1cm4gY291bnQ7Ci19Ci0KLS8qIHNnX3dyaXRlKCkgLSBXcml0ZSB0byB0aGUgZGV2aWNlCi0gKgotICogQGJ1ZiB1c2Vyc3BhY2UgYnVmZmVyCi0gKiBAY291bnQgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSB1c2Vyc3BhY2UgYnVmZmVyCi0gKgotICogSXRlcmF0ZSBvdmVyIHRoZSB1c2Vyc3BhY2UgYnVmZmVyLCB0YWtpbmcgYXQgbW9zdCAyNTUgKiBQQUdFX1NJWkUgYnl0ZXMgZm9yCi0gKiBlYWNoIERNQSB0cmFuc2Zlci4KLSAqICAgRm9yIGVhY2ggdHJhbnNmZXIsIGdldCB0aGUgdXNlciBwYWdlcywgYnVpbGQgYSBzZ2xpc3QsIG1hcCwgYnVpbGQgYQotICogICBkZXNjcmlwdG9yIHRhYmxlLiBzdWJtaXQgdGhlIHRyYW5zZmVyLiB3YWl0IGZvciB0aGUgaW50ZXJydXB0IGhhbmRsZXIKLSAqICAgdG8gd2FrZSB1cyBvbiBjb21wbGV0aW9uLgotICovCi1zdGF0aWMgc3NpemVfdCBzZ193cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKLXsKLQlpbnQgaHduZW50cywgdGVudHM7Ci0Jc2l6ZV90IHRyYW5zZmVyX2xlbiwgcmVtYWluaW5nID0gY291bnQsIGRvbmUgPSAwOwotCXU2NCB0cmFuc2Zlcl9hZGRyID0gKHU2NClidWY7Ci0JLyogZmV0Y2ggZGV2aWNlIHNwZWNpZmljIGRhdGEgc3RvcmVkIGVhcmxpZXIgZHVyaW5nIG9wZW4gKi8KLQlzdHJ1Y3QgYXBlX2RldiAqYXBlID0gKHN0cnVjdCBhcGVfZGV2ICopZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FICJfd3JpdGUoYnVmPTB4JXAsIGNvdW50PSVsbGQsIHBvcz0lbGx1KVxuIiwKLQkJYnVmLCAoczY0KWNvdW50LCAodTY0KSpwb3MpOwotCS8qIFRPRE8gdHJhbnNmZXIgYm91bmRhcmllcyBhdCBQQUdFX1NJWkUgZ3JhbnVsYXJpdHkgKi8KLQl3aGlsZSAocmVtYWluaW5nID4gMCkgewotCQkvKiBsaW1pdCBETUEgdHJhbnNmZXIgc2l6ZSAqLwotCQl0cmFuc2Zlcl9sZW4gPSAocmVtYWluaW5nIDwgQVBFX0NIRE1BX01BWF9UUkFOU0ZFUl9MRU4pID8gcmVtYWluaW5nIDoKLQkJCUFQRV9DSERNQV9NQVhfVFJBTlNGRVJfTEVOOwotCQkvKiBnZXQgYWxsIHVzZXIgc3BhY2UgYnVmZmVyIHBhZ2VzIGFuZCBjcmVhdGUgYSBzY2F0dGVyZ2F0aGVyIGxpc3QgKi8KLQkJc2dtX21hcF91c2VyX3BhZ2VzKGFwZS0+c2dtLCB0cmFuc2Zlcl9hZGRyLCB0cmFuc2Zlcl9sZW4sIDAvKnJlYWQgZnJvbSB1c2Vyc3BhY2UqLyk7Ci0JCXByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FICJtYXBwZWRfcGFnZXM9JWRcbiIsIGFwZS0+c2dtLT5tYXBwZWRfcGFnZXMpOwotCQkvKiBtYXAgYWxsIGVudHJpZXMgaW4gdGhlIHNjYXR0ZXJnYXRoZXIgbGlzdCAqLwotCQlod25lbnRzID0gcGNpX21hcF9zZyhhcGUtPnBjaV9kZXYsIGFwZS0+c2dtLT5zZ2wsIGFwZS0+c2dtLT5tYXBwZWRfcGFnZXMsIERNQV9UT19ERVZJQ0UpOwotCQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiaHduZW50cz0lZFxuIiwgaHduZW50cyk7Ci0JCS8qIGJ1aWxkIGRldmljZSBkZXNjcmlwdG9yIHRhYmxlcyBhbmQgc3VibWl0IHRoZW0gdG8gdGhlIERNQSBlbmdpbmUgKi8KLQkJdGVudHMgPSBhcGVfc2dfdG9fY2hkbWFfdGFibGUoYXBlLT5zZ20tPnNnbCwgaHduZW50cywgMCwgJmFwZS0+dGFibGVfdmlydC0+ZGVzY1swXSwgNDA5Nik7Ci0JCXByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FICJ0ZW50cz0lZFxuIiwgaHduZW50cyk7Ci0jaWYgMAotCQl3aGlsZSAodGFibGVzKSB7Ci0JCQkvKiBUT0RPIGJ1aWxkIHRhYmxlICovCi0JCQkvKiBUT0RPIHN1Ym1pdCB0YWJsZSB0byB0aGUgZGV2aWNlICovCi0JCQkvKiBpZiBlbmdpbmUgc3RvcHBlZCBhbmQgdW5maW5pc2hlZCB3b3JrIHRoZW4gc3RhcnQgZW5naW5lICovCi0JCX0KLQkJcHV0IG91cnNlbHZlcyBvbiB3YWl0IHF1ZXVlCi0jZW5kaWYKLQotCQlkbWFfdW5tYXBfc2coTlVMTCwgYXBlLT5zZ20tPnNnbCwgYXBlLT5zZ20tPm1hcHBlZF9wYWdlcywgRE1BX1RPX0RFVklDRSk7Ci0JCS8qIGRpcnR5IGFuZCBmcmVlIHRoZSBwYWdlcyAqLwotCQlzZ21fdW5tYXBfdXNlcl9wYWdlcyhhcGUtPnNnbSwgMS8qZGlydGllZCovKTsKLQkJLyogYm9vayBrZWVwaW5nICovCi0JCXRyYW5zZmVyX2FkZHIgKz0gdHJhbnNmZXJfbGVuOwotCQlyZW1haW5pbmcgLT0gdHJhbnNmZXJfbGVuOwotCQlkb25lICs9IHRyYW5zZmVyX2xlbjsKLQl9Ci0JcmV0dXJuIGRvbmU7Ci19Ci0KLS8qCi0gKiBjaGFyYWN0ZXIgZGV2aWNlIGZpbGUgb3BlcmF0aW9ucwotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZ19mb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5vcGVuID0gc2dfb3BlbiwKLQkucmVsZWFzZSA9IHNnX2Nsb3NlLAotCS5yZWFkID0gc2dfcmVhZCwKLQkud3JpdGUgPSBzZ193cml0ZSwKLX07Ci0KLS8qIHNnX2luaXQoKSAtIEluaXRpYWxpemUgY2hhcmFjdGVyIGRldmljZQotICoKLSAqIFhYWCBTaG91bGQgaWRlYWxseSBiZSB0aWVkIHRvIHRoZSBkZXZpY2UsIG9uIGRldmljZSBwcm9iZSwgbm90IG1vZHVsZSBpbml0LgotICovCi1zdGF0aWMgaW50IHNnX2luaXQoc3RydWN0IGFwZV9kZXYgKmFwZSkKLXsKLQlpbnQgcmM7Ci0JcHJpbnRrKEtFUk5fREVCVUcgRFJWX05BTUUgIiBzZ19pbml0KClcbiIpOwotCS8qIGFsbG9jYXRlIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSAqLwotCXJjID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmYXBlLT5jZGV2bm8sIDAvKnJlcXVlc3RlZCBtaW5vciovLCAxLypjb3VudCovLCBEUlZfTkFNRSk7Ci0JLyogYWxsb2NhdGlvbiBmYWlsZWQ/ICovCi0JaWYgKHJjIDwgMCkgewotCQlwcmludGsoImFsbG9jX2NocmRldl9yZWdpb24oKSA9ICVkXG4iLCByYyk7Ci0JCWdvdG8gZmFpbF9hbGxvYzsKLQl9Ci0JLyogY291cGxlIHRoZSBkZXZpY2UgZmlsZSBvcGVyYXRpb25zIHRvIHRoZSBjaGFyYWN0ZXIgZGV2aWNlICovCi0JY2Rldl9pbml0KCZhcGUtPmNkZXYsICZzZ19mb3BzKTsKLQlhcGUtPmNkZXYub3duZXIgPSBUSElTX01PRFVMRTsKLQkvKiBicmluZyBjaGFyYWN0ZXIgZGV2aWNlIGxpdmUgKi8KLQlyYyA9IGNkZXZfYWRkKCZhcGUtPmNkZXYsIGFwZS0+Y2Rldm5vLCAxLypjb3VudCovKTsKLQlpZiAocmMgPCAwKSB7Ci0JCXByaW50aygiY2Rldl9hZGQoKSA9ICVkXG4iLCByYyk7Ci0JCWdvdG8gZmFpbF9hZGQ7Ci0JfQotCXByaW50ayhLRVJOX0RFQlVHICJhbHRwY2llY2hkbWEgPSAlZDolZFxuIiwgTUFKT1IoYXBlLT5jZGV2bm8pLCBNSU5PUihhcGUtPmNkZXZubykpOwotCXJldHVybiAwOwotZmFpbF9hZGQ6Ci0JLyogZnJlZSB0aGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSAqLwotICAgIHVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihhcGUtPmNkZXZubywgMS8qY291bnQqLyk7Ci1mYWlsX2FsbG9jOgotCXJldHVybiAtMTsKLX0KLQotLyogc2dfZXhpdCgpIC0gQ2xlYW51cCBjaGFyYWN0ZXIgZGV2aWNlCi0gKgotICogWFhYIFNob3VsZCBpZGVhbGx5IGJlIHRpZWQgdG8gdGhlIGRldmljZSwgb24gZGV2aWNlIHJlbW92ZSwgbm90IG1vZHVsZSBleGl0LgotICovCi0KLXN0YXRpYyB2b2lkIHNnX2V4aXQoc3RydWN0IGFwZV9kZXYgKmFwZSkKLXsKLQlwcmludGsoS0VSTl9ERUJVRyBEUlZfTkFNRSAiIHNnX2V4aXQoKVxuIik7Ci0JLyogcmVtb3ZlIHRoZSBjaGFyYWN0ZXIgZGV2aWNlICovCi0JY2Rldl9kZWwoJmFwZS0+Y2Rldik7Ci0JLyogZnJlZSB0aGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGNoYXJhY3RlciBkZXZpY2Ugbm9kZSAqLwotCXVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihhcGUtPmNkZXZubywgMS8qY291bnQqLyk7Ci19Ci0KLSNlbmRpZiAvKiBBTFRQQ0lFQ0hETUFfQ0RFViAqLwotCi0vKiB1c2VkIHRvIHJlZ2lzdGVyIHRoZSBkcml2ZXIgd2l0aCB0aGUgUENJIGtlcm5lbCBzdWIgc3lzdGVtCi0gKiBAc2VlIExERDMgcGFnZSAzMTEKLSAqLwotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBjaV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSBEUlZfTkFNRSwKLQkuaWRfdGFibGUgPSBpZHMsCi0JLnByb2JlID0gcHJvYmUsCi0JLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHJlbW92ZSksCi0JLyogcmVzdW1lLCBzdXNwZW5kIGFyZSBvcHRpb25hbCAqLwotfTsKLQotLyoqCi0gKiBhbHRlcmFwY2llY2hkbWFfaW5pdCgpIC0gTW9kdWxlIGluaXRpYWxpemF0aW9uLCByZWdpc3RlcnMgZGV2aWNlcy4KLSAqLwotc3RhdGljIGludCBfX2luaXQgYWx0ZXJhcGNpZWNoZG1hX2luaXQodm9pZCkKLXsKLQlpbnQgcmMgPSAwOwotCXByaW50ayhLRVJOX0RFQlVHIERSVl9OQU1FICIgaW5pdCgpLCBidWlsdCBhdCAiIF9fREFURV9fICIgIiBfX1RJTUVfXyAiXG4iKTsKLQkvKiByZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBQQ0kgYnVzIGRyaXZlciAqLwotCXJjID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcGNpX2RyaXZlcik7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCXJldHVybiAwOwotfQotCi0vKioKLSAqIGFsdGVyYXBjaWVjaGRtYV9pbml0KCkgLSBNb2R1bGUgY2xlYW51cCwgdW5yZWdpc3RlcnMgZGV2aWNlcy4KLSAqLwotc3RhdGljIHZvaWQgX19leGl0IGFsdGVyYXBjaWVjaGRtYV9leGl0KHZvaWQpCi17Ci0JcHJpbnRrKEtFUk5fREVCVUcgRFJWX05BTUUgIiBleGl0KCksIGJ1aWx0IGF0ICIgX19EQVRFX18gIiAiIF9fVElNRV9fICJcbiIpOwotCS8qIHVucmVnaXN0ZXIgdGhpcyBkcml2ZXIgZnJvbSB0aGUgUENJIGJ1cyBkcml2ZXIgKi8KLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnBjaV9kcml2ZXIpOwotfQotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9pbml0KGFsdGVyYXBjaWVjaGRtYV9pbml0KTsKLW1vZHVsZV9leGl0KGFsdGVyYXBjaWVjaGRtYV9leGl0KTsKLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FybGFuL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2FybGFuL01ha2VmaWxlCmluZGV4IDllNThlNWYuLjVhODRkNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hcmxhbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXJsYW4vTWFrZWZpbGUKQEAgLTEsMyArMSwzIEBACi1vYmotJChDT05GSUdfQVJMQU4pICs9IGFybGFuLm8gCitvYmotJChDT05GSUdfQVJMQU4pICs9IGFybGFuLm8KIAogYXJsYW4tb2JqcyA6PSBhcmxhbi1tYWluLm8gYXJsYW4tcHJvYy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYXJsYW4vYXJsYW4tbWFpbi5jIGIvZHJpdmVycy9zdGFnaW5nL2FybGFuL2FybGFuLW1haW4uYwppbmRleCA5MjFhMDgyLi44OGZkZDUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXJsYW4vYXJsYW4tbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9hcmxhbi9hcmxhbi1tYWluLmMKQEAgLTE0NTUsMTAgKzE0NTUsMTAgQEAKICNpZmRlZiBBUkxBTl9NVUxUSUNBU1QKIAkJCWlmICghKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpICYmCiAJCQkJIShkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpICYmCi0JCQkJZGV2LT5tY19saXN0KQorCQkJCSFuZXRkZXZfbWNfZW1wdHkoZGV2KSkKIAkJCXsKIAkJCQljaGFyIGh3X2RzdF9hZGRyWzZdOwotCQkJCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pID0gZGV2LT5tY19saXN0OworCQkJCXN0cnVjdCBkZXZfbWNfbGlzdCAqZG1pOwogCQkJCWludCBpOwogCiAJCQkJbWVtY3B5X2Zyb21pbyhod19kc3RfYWRkciwgYXJsYW4tPnVsdGltYXRlRGVzdEFkZHJlc3MsIDYpOwpAQCAtMTQ2OSwyMCArMTQ2OSwxNSBAQAogCQkJCQkJCXByaW50ayhLRVJOX0VSUiAiJXMgbWNhc3QgMHgwMTAwIFxuIiwgZGV2LT5uYW1lKTsKIAkJCQkJCWVsc2UgaWYgKGh3X2RzdF9hZGRyWzFdID09IDB4NDApCiAJCQkJCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBtL2JjYXN0IDB4MDE0MCBcbiIsIGRldi0+bmFtZSk7Ci0JCQkJCXdoaWxlIChkbWkpCi0JCQkJCXsKLQkJCQkJCWlmIChkbWktPmRtaV9hZGRybGVuID09IDYpIHsKLQkJCQkJCQlpZiAoYXJsYW5fZGVidWcgJiBBUkxBTl9ERUJVR19IRUFERVJfRFVNUCkKLQkJCQkJCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBtY2wgJXBNXG4iLAotCQkJCQkJCQkgICAgICAgZGV2LT5uYW1lLCBkbWktPmRtaV9hZGRyKTsKLQkJCQkJCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQotCQkJCQkJCQlpZiAoZG1pLT5kbWlfYWRkcltpXSAhPSBod19kc3RfYWRkcltpXSkKLQkJCQkJCQkJCWJyZWFrOwotCQkJCQkJCWlmIChpID09IDYpCisJCQkJCW5ldGRldl9mb3JfZWFjaF9tY19lbnRyeShkbWksIGRldikgeworCQkJCQkJaWYgKGFybGFuX2RlYnVnICYgQVJMQU5fREVCVUdfSEVBREVSX0RVTVApCisJCQkJCQkJcHJpbnRrKEtFUk5fRVJSICIlcyBtY2wgJXBNXG4iLAorCQkJCQkJCSAgICAgICBkZXYtPm5hbWUsIGRtaS0+ZG1pX2FkZHIpOworCQkJCQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKKwkJCQkJCQlpZiAoZG1pLT5kbWlfYWRkcltpXSAhPSBod19kc3RfYWRkcltpXSkKIAkJCQkJCQkJYnJlYWs7Ci0JCQkJCQl9IGVsc2UKLQkJCQkJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpbnZhbGlkIG11bHRpY2FzdCBhZGRyZXNzIGxlbmd0aCBnaXZlbi5cbiIsIGRldi0+bmFtZSk7Ci0JCQkJCQlkbWkgPSBkbWktPm5leHQ7CisJCQkJCQlpZiAoaSA9PSA2KQorCQkJCQkJCWJyZWFrOwogCQkJCQl9CiAJCQkJCS8qIHdlIHJlYWNoIGhlcmUgaWYgbXVsdGljYXN0IGZpbHRlcmluZyBpcyBvbiBhbmQgcGFja2V0IAogCQkJCQkgKiBpcyBtdWx0aWNhc3QgYW5kIG5vdCBmb3IgcmVjZWl2ZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2FybGFuL2FybGFuLmggYi9kcml2ZXJzL3N0YWdpbmcvYXJsYW4vYXJsYW4uaAppbmRleCBmYjNhZDUxLi5mZmNkM2VhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYXJsYW4vYXJsYW4uaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYXJsYW4vYXJsYW4uaApAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk3IEN1bGxlbiBKZW5uaW5ncwotICogIENvcHlyaWdodCAoQykgMTk5OCBFbG1lci5Kb2FuZGlAdXQuZWUsICszNy0yNTUtMTM1MDAJCisgKiAgQ29weXJpZ2h0IChDKSAxOTk4IEVsbWVyLkpvYW5kaUB1dC5lZSwgKzM3LTI1NS0xMzUwMAogICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMKICAqLwogCkBAIC0yMCwxNCArMjAsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aGVyZGV2aWNlLmg+CiAKIAotLy8jZGVmaW5lIEFSTEFOX0RFQlVHR0lORyAxCisvKiAjZGVmaW5lIEFSTEFOX0RFQlVHR0lORyAxICovCiAKICNkZWZpbmUgQVJMQU5fUFJPQ19JTlRFUkZBQ0UKICNkZWZpbmUgTUFYX0FSTEFOUyA0IC8qIG5vdCBtb3JlIHRoYW4gNCAhICovCkBAIC01MSw4ICs1MSw4IEBACiBleHRlcm4gaW50CWFybGFuX2VudHJ5X2RlYnVnOwogZXh0ZXJuIGludAlhcmxhbl9leGl0X2RlYnVnOwogZXh0ZXJuIGludAl0ZXN0TWVtb3J5OwotZXh0ZXJuIGludCAgICAgYXJsYW5fY29tbWFuZChzdHJ1Y3QgbmV0X2RldmljZSAqIGRldiwgaW50IGNvbW1hbmQpOwotIAorZXh0ZXJuIGludCAgICAgYXJsYW5fY29tbWFuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgY29tbWFuZCk7CisKICNkZWZpbmUgU0lEVU5LTk9XTiAtMQogI2RlZmluZSByYWRpb05vZGVJZFVOS05PV04gLTEKICNkZWZpbmUgaXJxVU5LTk9XTiAwCkBAIC02NSwyMiArNjUsMjEgQEAKICNkZWZpbmUgcmVnaXN0cmF0aW9uTW9kZVVOS05PV04gLTEKIAogCi0jZGVmaW5lIElGREVCVUcoIEwgKSBpZiAoIChMKSAmIGFybGFuX2RlYnVnICkgCi0jZGVmaW5lIEFSTEFOX0ZBS0VfSERSX0xFTiAxMiAKKyNkZWZpbmUgSUZERUJVRyhMKSBpZiAoKEwpICYgYXJsYW5fZGVidWcpCisjZGVmaW5lIEFSTEFOX0ZBS0VfSERSX0xFTiAxMgogCiAjaWZkZWYgQVJMQU5fREVCVUdHSU5HCiAJI2RlZmluZSBERUJVRyAxCiAJI2RlZmluZSBBUkxBTl9FTlRSWV9FWElUX0RFQlVHR0lORyAxCi0JI2RlZmluZSBBUkxBTl9ERUJVRyhhLGIpIHByaW50ayhLRVJOX0RFQlVHIGEsIGIpCisJI2RlZmluZSBBUkxBTl9ERUJVRyhhLCBiKSBwcmludGsoS0VSTl9ERUJVRyBhLCBiKQogI2Vsc2UKLQkjZGVmaW5lIEFSTEFOX0RFQlVHKGEsYikgCisJI2RlZmluZSBBUkxBTl9ERUJVRyhhLCBiKQogI2VuZGlmCiAKICNkZWZpbmUgQVJMQU5fU0hNRU1fU0laRQkweDIwMDAKIAotc3RydWN0IGFybGFuX3NobWVtCi17Ci0gICAgICAvKiBIZWFkZXIgU2lnbmF0dXJlICovIAorc3RydWN0IGFybGFuX3NobWVtIHsKKyAgICAgIC8qIEhlYWRlciBTaWduYXR1cmUgKi8KICAgICAgIHZvbGF0aWxlCWNoYXIgdGV4dFJlZ2lvbls0OF07CiAgICAgICB2b2xhdGlsZQl1X2NoYXIgcmVzZXRGbGFnOwogICAgICAgdm9sYXRpbGUJdV9jaGFyICBkaWFnbm9zdGljSW5mbzsKQEAgLTkxLDEwICs5MCwxMCBAQAogICAgICAgdm9sYXRpbGUJdV9jaGFyIGhhcmR3YXJlVHlwZTsKICAgICAgIHZvbGF0aWxlCXVfY2hhciBtYWpvckhhcmR3YXJlVmVyc2lvbjsKICAgICAgIHZvbGF0aWxlCXVfY2hhciBtaW5vckhhcmR3YXJlVmVyc2lvbjsKLSAgICAgIHZvbGF0aWxlCXVfY2hhciByYWRpb01vZHVsZTsvLyBzaG93cyBFRVBST00sIGNhbiBiZSBvdmVycmlkZGVuIGF0IDB4MTExCi0gICAgICB2b2xhdGlsZQl1X2NoYXIgZGVmYXVsdENoYW5uZWxTZXQ7IC8vIHNob3dzIEVFUHJvbSwgY2FuIGJlIG92ZXJyaWlkZW4gYXQgMHgxMEEKKyAgICAgIHZvbGF0aWxlCXVfY2hhciByYWRpb01vZHVsZTsvKiBzaG93cyBFRVBST00sIGNhbiBiZSBvdmVycmlkZGVuIGF0IDB4MTExICovCisgICAgICB2b2xhdGlsZQl1X2NoYXIgZGVmYXVsdENoYW5uZWxTZXQ7IC8qIHNob3dzIEVFUHJvbSwgY2FuIGJlIG92ZXJyaWlkZW4gYXQgMHgxMEEgKi8KICAgICAgIHZvbGF0aWxlCXVfY2hhciBfMls0N107Ci0gICAgICAKKwogICAgICAgLyogQ29udHJvbC9TdGF0dXMgQmxvY2sgLSAweDAwODAgKi8KICAgICAgIHZvbGF0aWxlCXVfY2hhciBpbnRlcnJ1cHRJblByb2dyZXNzOyAvKiBub3QgdXNlZCBieSBsYW5jcHUgKi8KICAgICAgIHZvbGF0aWxlCXVfY2hhciBjbnRybFJlZ0ltYWdlOyAvKiBub3QgdXNlZCBieSBsYW5jcHUgKi8KQEAgLTExMyw3ICsxMTIsNyBAQAogICAgICAgdm9sYXRpbGUJdV9jaGFyIHJ4UXVhbGl0eTsKICAgICAgIHZvbGF0aWxlCXVfY2hhciBzY3JhbWJsZWQ7CiAgICAgICB2b2xhdGlsZQl1X2NoYXIgXzRbMV07Ci0gICAgICAKKwogICAgICAgLyogVHJhbnNtaXQgU3RhdHVzIC0gMHgwMGIwICovCiAgICAgICB2b2xhdGlsZQl1X2NoYXIgdHhTdGF0dXM7CiAgICAgICB2b2xhdGlsZQl1X2NoYXIgdHhBY2tRdWFsaXR5OwpAQCAtMTUxLDcgKzE1MCw3IEBACiAgICAgICB2b2xhdGlsZQl1X3Nob3J0IHJvdXRlcklkOwogICAgICAgdm9sYXRpbGUJdV9jaGFyIF8xMFs5XTsKICAgICAgIHZvbGF0aWxlCXVfY2hhciB0eEF0dGVudWF0aW9uOwotICAgICAgdm9sYXRpbGUJdV9jaGFyIHN5c3RlbUlkWzRdOyAKKyAgICAgIHZvbGF0aWxlCXVfY2hhciBzeXN0ZW1JZFs0XTsKICAgICAgIHZvbGF0aWxlCXVfc2hvcnQgZ2xvYmFsQ2hlY2tzdW07CiAgICAgICB2b2xhdGlsZQl1X2NoYXIgXzExWzRdOwogICAgICAgdm9sYXRpbGUJdV9zaG9ydCBtYXhEYXRhZ3JhbVNpemU7CkBAIC0yMDcsMTkgKzIwNiwxOSBAQAogICAgICAgdm9sYXRpbGUJdV9jaGFyIGhvc3RjcHVMb2NrOwogICAgICAgdm9sYXRpbGUJdV9jaGFyIGxhbmNwdUxvY2s7CiAgICAgICB2b2xhdGlsZQl1X2NoYXIgcmVzZXRUaW1lWzE4XTsKLSAgICAgIAorCiAgICAgICB2b2xhdGlsZQl1X2NoYXIgbnVtRGF0YWdyYW1zVHJhbnNtaXR0ZWRbNF07CiAgICAgICB2b2xhdGlsZQl1X2NoYXIgbnVtUmVUcmFuc21pc3Npb25zWzRdOwogICAgICAgdm9sYXRpbGUJdV9jaGFyIG51bUZyYW1lc0Rpc2NhcmRlZFs0XTsKICAgICAgIHZvbGF0aWxlCXVfY2hhciBudW1EYXRhZ3JhbXNSZWNlaXZlZFs0XTsKICAgICAgIHZvbGF0aWxlCXVfY2hhciBudW1EdXBsaWNhdGVSZWNlaXZlZEZyYW1lc1s0XTsKICAgICAgIHZvbGF0aWxlCXVfY2hhciBudW1EYXRhZ3JhbXNEaXNjYXJkZWRbNF07Ci0gICAgICAKKwogICAgICAgdm9sYXRpbGUJdV9zaG9ydCBtYXhOdW1SZVRyYW5zbWl0RGF0YWdyYW07CiAgICAgICB2b2xhdGlsZQl1X3Nob3J0IG1heE51bVJlVHJhbnNtaXRGcmFtZXM7CiAgICAgICB2b2xhdGlsZQl1X3Nob3J0IG1heE51bUNvbnNlY3V0aXZlRHVwbGljYXRlRnJhbWVzOwogICAgICAgLyogbWlzYWxpZ25lZCBoZXJlIHNvIHdlIGhhdmUgdG8gZ28gdG8gY2hhcmFjdGVycyAqLwotICAgICAKKwogICAgICAgdm9sYXRpbGUJdV9jaGFyIG51bUJ5dGVzVHJhbnNtaXR0ZWRbNF07CiAgICAgICB2b2xhdGlsZQl1X2NoYXIgbnVtQnl0ZXNSZWNlaXZlZFs0XTsKICAgICAgIHZvbGF0aWxlCXVfY2hhciBudW1DUkNFcnJvcnNbNF07CkBAIC0yNTksNyArMjU4LDcgQEAKICAgICAgIGludCBjaGFubmVsTnVtYmVyOwogICAgICAgaW50IHNjcmFtYmxpbmdEaXNhYmxlOwogICAgICAgaW50IHR4QXR0ZW51YXRpb247Ci0gICAgICBpbnQgc3lzdGVtSWQ7IAorICAgICAgaW50IHN5c3RlbUlkOwogICAgICAgaW50IG1heERhdGFncmFtU2l6ZTsKICAgICAgIGludCBtYXhGcmFtZVNpemU7CiAgICAgICBpbnQgbWF4UmV0cmllczsKQEAgLTMxNiw4ICszMTUsNyBAQAogCiBleHRlcm4gc3RydWN0IGFybGFuX2NvbmZfc3RydSBhcmxhbl9jb25mW01BWF9BUkxBTlNdOwogCi1zdHJ1Y3QgVHhQYXJhbQoteworc3RydWN0IFR4UGFyYW0gewogICAgICAgdm9sYXRpbGUJc2hvcnQgCQlvZmZzZXQ7CiAgICAgICB2b2xhdGlsZSAJc2hvcnQgCQlsZW5ndGg7CiAgICAgICB2b2xhdGlsZQl1X2NoYXIgCQlkZXN0WzZdOwpAQCAtMzMwLDEyICszMjgsMTIgQEAKICNkZWZpbmUgVFhfUklOR19TSVpFIDIKIC8qIEluZm9ybWF0aW9uIHRoYXQgbmVlZCB0byBiZSBrZXB0IGZvciBlYWNoIGJvYXJkLiAqLwogc3RydWN0IGFybGFuX3ByaXZhdGUgewotICAgICAgc3RydWN0IGFybGFuX3NobWVtIF9faW9tZW0gKiBjYXJkOwotICAgICAgc3RydWN0IGFybGFuX3NobWVtICogY29uZjsKKyAgICAgIHN0cnVjdCBhcmxhbl9zaG1lbSBfX2lvbWVtICpjYXJkOworICAgICAgc3RydWN0IGFybGFuX3NobWVtICpjb25mOwogCi0gICAgICBzdHJ1Y3QgYXJsYW5fY29uZl9zdHJ1ICogQ29uZjsJICAgICAKKyAgICAgIHN0cnVjdCBhcmxhbl9jb25mX3N0cnUgKkNvbmY7CiAgICAgICBpbnQJYmFkOwotICAgICAgaW50IAlyZXNldDsKKyAgICAgIGludAlyZXNldDsKICAgICAgIHVuc2lnbmVkIGxvbmcgbGFzdFJlc2V0OwogICAgICAgc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAgICAgICBzdHJ1Y3QgdGltZXJfbGlzdCB0eF9kZWxheV90aW1lcjsKQEAgLTQwNywzOCArNDA1LDM4IEBACiAKICNkZWZpbmUgVFhCdWZmU3RhcnQoZGV2KSBvZmZzZXRvZihzdHJ1Y3QgYXJsYW5fc2htZW0sIHR4QnVmZmVyKQogI2RlZmluZSBUWEJ1ZmZFbmQoZGV2KSBvZmZzZXRvZihzdHJ1Y3QgYXJsYW5fc2htZW0sIHh4QnVmZmVyKQotIAotI2RlZmluZSBSRUFEU0hNKHRvLGZyb20sYXR5cGUpIHtcCisKKyNkZWZpbmUgUkVBRFNITSh0bywgZnJvbSwgYXR5cGUpIHtcCiAJYXR5cGUgdG1wO1wKLQltZW1jcHlfZnJvbWlvKCYodG1wKSwmKGZyb20pLHNpemVvZihhdHlwZSkpO1wKKwltZW1jcHlfZnJvbWlvKCYodG1wKSwgJihmcm9tKSwgc2l6ZW9mKGF0eXBlKSk7XAogCXRvID0gdG1wO1wKIAl9CiAKLSNkZWZpbmUgUkVBRFNITUVNKGZyb20sYXR5cGUpXAorI2RlZmluZSBSRUFEU0hNRU0oZnJvbSwgYXR5cGUpXAogCWF0eXBlIGZyb207IFwKIAlSRUFEU0hNKGZyb20sIGFybGFuLT5mcm9tLCBhdHlwZSk7CiAKLSNkZWZpbmUgV1JJVEVTSE0odG8sZnJvbSxhdHlwZSkgXAorI2RlZmluZSBXUklURVNITSh0bywgZnJvbSwgYXR5cGUpIFwKIAl7IGF0eXBlIHRtcFNITSA9IGZyb207XAotCW1lbWNweV90b2lvKCYodG8pLCZ0bXBTSE0sc2l6ZW9mKGF0eXBlKSk7XAorCW1lbWNweV90b2lvKCYodG8pLCAmdG1wU0hNLCBzaXplb2YoYXR5cGUpKTtcCiAJfQogCi0jZGVmaW5lIERFQlVHU0hNKGxldmVsU0hNLHN0cmluZ1NITSxzdHVmZixhdHlwZSkgXAorI2RlZmluZSBERUJVR1NITShsZXZlbFNITSwgc3RyaW5nU0hNLCBzdHVmZiwgYXR5cGUpIFwKIAl7CWF0eXBlIHRtcFNITTsgXAotCQltZW1jcHlfZnJvbWlvKCZ0bXBTSE0sJihzdHVmZiksc2l6ZW9mKGF0eXBlKSk7XAotCQlJRkRFQlVHKGxldmVsU0hNKSBwcmludGsoc3RyaW5nU0hNLHRtcFNITSk7XAorCQltZW1jcHlfZnJvbWlvKCZ0bXBTSE0sICYoc3R1ZmYpLCBzaXplb2YoYXR5cGUpKTtcCisJCUlGREVCVUcobGV2ZWxTSE0pIHByaW50ayhzdHJpbmdTSE0sIHRtcFNITSk7XAogCX0KIAogI2RlZmluZSBXUklURVNITUIodG8sIHZhbCkgXAotCXdyaXRlYih2YWwsJih0bykpCisJd3JpdGViKHZhbCwgJih0bykpCiAjZGVmaW5lIFJFQURTSE1CKHRvKSBcCiAJcmVhZGIoJih0bykpCiAjZGVmaW5lIFdSSVRFU0hNUyh0bywgdmFsKSBcCi0Jd3JpdGV3KHZhbCwmKHRvKSkKKwl3cml0ZXcodmFsLCAmKHRvKSkKICNkZWZpbmUgUkVBRFNITVModG8pIFwKIAlyZWFkdygmKHRvKSkKICNkZWZpbmUgV1JJVEVTSE1JKHRvLCB2YWwpIFwKLQl3cml0ZWwodmFsLCYodG8pKQorCXdyaXRlbCh2YWwsICYodG8pKQogI2RlZmluZSBSRUFEU0hNSSh0bykgXAogCXJlYWRsKCYodG8pKQogCkBAIC00NDcsNTEgKzQ0NSw1MSBAQAogCiAKICNkZWZpbmUgcmVnaXN0cmF0aW9uQmFkKGRldilcCi0gICAoICggICBSRUFEU0hNQigoKHN0cnVjdCBhcmxhbl9wcml2YXRlICopbmV0ZGV2X3ByaXYoZGV2KSktPmNhcmQtPnJlZ2lzdHJhdGlvbk1vZGUpICAgID4gMCkgJiYgXAotICAgICAoICAgUkVBRFNITUIoKChzdHJ1Y3QgYXJsYW5fcHJpdmF0ZSAqKW5ldGRldl9wcml2KGRldikpLT5jYXJkLT5yZWdpc3RyYXRpb25TdGF0dXMpID09IDApICAgICkKKyAgICAoKCAgIFJFQURTSE1CKCgoc3RydWN0IGFybGFuX3ByaXZhdGUgKiluZXRkZXZfcHJpdihkZXYpKS0+Y2FyZC0+cmVnaXN0cmF0aW9uTW9kZSkgICAgPiAwKSAmJiBcCisgICAgICggICBSRUFEU0hNQigoKHN0cnVjdCBhcmxhbl9wcml2YXRlICopbmV0ZGV2X3ByaXYoZGV2KSktPmNhcmQtPnJlZ2lzdHJhdGlvblN0YXR1cykgPT0gMCkpCiAKIAogI2RlZmluZSByZWFkQ29udHJvbFJlZ2lzdGVyKGRldilcCi0gCVJFQURTSE1CKCgoc3RydWN0IGFybGFuX3ByaXZhdGUgKiluZXRkZXZfcHJpdihkZXYpKS0+Y2FyZC0+Y250cmxSZWdJbWFnZSkKKwlSRUFEU0hNQigoKHN0cnVjdCBhcmxhbl9wcml2YXRlICopbmV0ZGV2X3ByaXYoZGV2KSktPmNhcmQtPmNudHJsUmVnSW1hZ2UpCiAKLSNkZWZpbmUgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LCB2KXtcCi0gICBXUklURVNITUIoKChzdHJ1Y3QgYXJsYW5fcHJpdmF0ZSAqKW5ldGRldl9wcml2KGRldikpLT5jYXJkLT5jbnRybFJlZ0ltYWdlCSwoKHYpICYweEYpICk7XAotICAgV1JJVEVTSE1CKCgoc3RydWN0IGFybGFuX3ByaXZhdGUgKiluZXRkZXZfcHJpdihkZXYpKS0+Y2FyZC0+Y29udHJvbFJlZ2lzdGVyCSwodikgCSk7fQorI2RlZmluZSB3cml0ZUNvbnRyb2xSZWdpc3RlcihkZXYsIHYpIHtcCisgICBXUklURVNITUIoKChzdHJ1Y3QgYXJsYW5fcHJpdmF0ZSAqKW5ldGRldl9wcml2KGRldikpLT5jYXJkLT5jbnRybFJlZ0ltYWdlLCAoKHYpICYgMHhGKSk7XAorICAgV1JJVEVTSE1CKCgoc3RydWN0IGFybGFuX3ByaXZhdGUgKiluZXRkZXZfcHJpdihkZXYpKS0+Y2FyZC0+Y29udHJvbFJlZ2lzdGVyLCAodikpOyB9CiAKIAogI2RlZmluZSBhcmxhbl9pbnRlcnJ1cHRfbGFuY3B1KGRldikge1wKICAgIGludCBjcjsgICBcCiAgICBcCiAgICBjciA9IHJlYWRDb250cm9sUmVnaXN0ZXIoZGV2KTtcCi0gICBpZiAoY3IgJiBBUkxBTl9DSEFOTkVMX0FUVEVOVElPTil7IFwKKyAgIGlmIChjciAmIEFSTEFOX0NIQU5ORUxfQVRURU5USU9OKSB7IFwKICAgICAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldiwgKGNyICYgfkFSTEFOX0NIQU5ORUxfQVRURU5USU9OKSk7XAotICAgfWVsc2UgIFwKKyAgIH0gZWxzZSAgXAogICAgICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LCAoY3IgfCBBUkxBTl9DSEFOTkVMX0FUVEVOVElPTikpO1wKIH0KIAotI2RlZmluZSBjbGVhckNoYW5uZWxBdHRlbnRpb24oZGV2KXsgXAotICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LHJlYWRDb250cm9sUmVnaXN0ZXIoZGV2KSAmIH5BUkxBTl9DSEFOTkVMX0FUVEVOVElPTik7fQorI2RlZmluZSBjbGVhckNoYW5uZWxBdHRlbnRpb24oZGV2KSB7IFwKKyAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldiwgcmVhZENvbnRyb2xSZWdpc3RlcihkZXYpICYgfkFSTEFOX0NIQU5ORUxfQVRURU5USU9OKTsgfQogI2RlZmluZSBzZXRIYXJkd2FyZVJlc2V0KGRldikge1wKLSAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldixyZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgfCBBUkxBTl9SRVNFVCk7fQorICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LCByZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgfCBBUkxBTl9SRVNFVCk7IH0KICNkZWZpbmUgY2xlYXJIYXJkd2FyZVJlc2V0KGRldikge1wKLSAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldixyZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgJiB+QVJMQU5fUkVTRVQpO30KLSNkZWZpbmUgc2V0SW50ZXJydXB0RW5hYmxlKGRldil7XAotICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LHJlYWRDb250cm9sUmVnaXN0ZXIoZGV2KSB8IEFSTEFOX0lOVEVSUlVQVF9FTkFCTEUpICA7fQotI2RlZmluZSBjbGVhckludGVycnVwdEVuYWJsZShkZXYpe1wKLSAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldixyZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgJiB+QVJMQU5fSU5URVJSVVBUX0VOQUJMRSkgIDt9Ci0jZGVmaW5lIHNldENsZWFySW50ZXJydXB0KGRldil7XAotICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LHJlYWRDb250cm9sUmVnaXN0ZXIoZGV2KSB8IEFSTEFOX0NMRUFSX0lOVEVSUlVQVCkgICA7fQotI2RlZmluZSBjbGVhckNsZWFySW50ZXJydXB0KGRldil7XAotICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LHJlYWRDb250cm9sUmVnaXN0ZXIoZGV2KSAmIH5BUkxBTl9DTEVBUl9JTlRFUlJVUFQpO30KLSNkZWZpbmUgc2V0UG93ZXJPZmYoZGV2KXtcCi0gICB3cml0ZUNvbnRyb2xSZWdpc3RlcihkZXYscmVhZENvbnRyb2xSZWdpc3RlcihkZXYpIHwgKEFSTEFOX1BPV0VSICYmIEFSTEFOX0FDQ0VTUykpO1wKLSAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldixyZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgJiB+QVJMQU5fQUNDRVNTKTt9Ci0jZGVmaW5lIHNldFBvd2VyT24oZGV2KXtcCi0gICB3cml0ZUNvbnRyb2xSZWdpc3RlcihkZXYscmVhZENvbnRyb2xSZWdpc3RlcihkZXYpICYgfihBUkxBTl9QT1dFUikpOyAgIH0KLSNkZWZpbmUgYXJsYW5fbG9ja19jYXJkX2FjY2VzcyhkZXYpe1wKLSAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldixyZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgJiB+QVJMQU5fQUNDRVNTKTt9Ci0jZGVmaW5lIGFybGFuX3VubG9ja19jYXJkX2FjY2VzcyhkZXYpe1wKLSAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldixyZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgfCBBUkxBTl9BQ0NFU1MgKTsgfSAgCisgICB3cml0ZUNvbnRyb2xSZWdpc3RlcihkZXYsIHJlYWRDb250cm9sUmVnaXN0ZXIoZGV2KSAmIH5BUkxBTl9SRVNFVCk7IH0KKyNkZWZpbmUgc2V0SW50ZXJydXB0RW5hYmxlKGRldikge1wKKyAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldiwgcmVhZENvbnRyb2xSZWdpc3RlcihkZXYpIHwgQVJMQU5fSU5URVJSVVBUX0VOQUJMRSkgIDsgfQorI2RlZmluZSBjbGVhckludGVycnVwdEVuYWJsZShkZXYpIHtcCisgICB3cml0ZUNvbnRyb2xSZWdpc3RlcihkZXYsIHJlYWRDb250cm9sUmVnaXN0ZXIoZGV2KSAmIH5BUkxBTl9JTlRFUlJVUFRfRU5BQkxFKSAgOyB9CisjZGVmaW5lIHNldENsZWFySW50ZXJydXB0KGRldikge1wKKyAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldiwgcmVhZENvbnRyb2xSZWdpc3RlcihkZXYpIHwgQVJMQU5fQ0xFQVJfSU5URVJSVVBUKSAgIDsgfQorI2RlZmluZSBjbGVhckNsZWFySW50ZXJydXB0KGRldikge1wKKyAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldiwgcmVhZENvbnRyb2xSZWdpc3RlcihkZXYpICYgfkFSTEFOX0NMRUFSX0lOVEVSUlVQVCk7IH0KKyNkZWZpbmUgc2V0UG93ZXJPZmYoZGV2KSB7XAorICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LCByZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgfCAoQVJMQU5fUE9XRVIgJiYgQVJMQU5fQUNDRVNTKSk7XAorICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LCByZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgJiB+QVJMQU5fQUNDRVNTKTsgfQorI2RlZmluZSBzZXRQb3dlck9uKGRldikge1wKKyAgIHdyaXRlQ29udHJvbFJlZ2lzdGVyKGRldiwgcmVhZENvbnRyb2xSZWdpc3RlcihkZXYpICYgfihBUkxBTl9QT1dFUikpOyB9CisjZGVmaW5lIGFybGFuX2xvY2tfY2FyZF9hY2Nlc3MoZGV2KSB7XAorICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LCByZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgJiB+QVJMQU5fQUNDRVNTKTsgfQorI2RlZmluZSBhcmxhbl91bmxvY2tfY2FyZF9hY2Nlc3MoZGV2KSB7XAorICAgd3JpdGVDb250cm9sUmVnaXN0ZXIoZGV2LCByZWFkQ29udHJvbFJlZ2lzdGVyKGRldikgfCBBUkxBTl9BQ0NFU1MpOyB9CiAKIAogCkBAIC01MjUsNyArNTIzLDYgQEAKIAkJCQkJfCBBUkxBTl9DT01NQU5EX1JFU0VUKQogCiAKLSAKICNkZWZpbmUgQVJMQU5fREVCVUdfQ0hBSU5fTE9DS1MJCTB4MDAwMDEKICNkZWZpbmUgQVJMQU5fREVCVUdfUkVTRVQJCTB4MDAwMDIKICNkZWZpbmUgQVJMQU5fREVCVUdfVElNSU5HCQkweDAwMDA0CkBAIC01MzYsNCArNTMzLDMgQEAKICNkZWZpbmUgQVJMQU5fREVCVUdfSU5URVJSVVBUCQkweDAwMDgwCiAjZGVmaW5lIEFSTEFOX0RFQlVHX1NUQVJUVVAJCTB4MDAxMDAKICNkZWZpbmUgQVJMQU5fREVCVUdfU0hVVERPV04JCTB4MDAyMDAKLSAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9hc3VzX29sZWQvYXN1c19vbGVkLmMgYi9kcml2ZXJzL3N0YWdpbmcvYXN1c19vbGVkL2FzdXNfb2xlZC5jCmluZGV4IDQzYzU3YjcuLjdlYmVjYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9hc3VzX29sZWQvYXN1c19vbGVkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2FzdXNfb2xlZC9hc3VzX29sZWQuYwpAQCAtNTIsNiArNTIsMTAgQEAKICNkZWZpbmUgQVNVU19PTEVEX0RJU1BfSEVJR0hUCQkzMgogI2RlZmluZSBBU1VTX09MRURfUEFDS0VUX0JVRl9TSVpFCTI1NgogCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfQVNVUyAgICAgIDB4MGIwNQorI2RlZmluZSBVU0JfREVWSUNFX0lEX0FTVVNfTENNICAgICAgMHgxNzI2CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfQVNVU19MQ00yICAgICAweDE3NWIKKwogTU9EVUxFX0FVVEhPUigiSmFrdWIgU2NobWlkdGtlLCBzamFrdWJAZ21haWwuY29tIik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkFzdXMgT0xFRCBEcml2ZXIgdiIgQVNVU19PTEVEX1ZFUlNJT04pOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtODMsMTggKzg3LDIwIEBACiB9OwogCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCS8qIEFzdXMgRzEvRzIgKGFuZCB2YXJpYW50cykqLwotCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTcyNikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BU1VTLCBVU0JfREVWSUNFX0lEX0FTVVNfTENNKSB9LAogCS8qIEFzdXMgRzUwViAoYW5kIHBvc3NpYmx5IG90aGVycyAtIEc3MD8gRzcxPykqLwotCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTc1YikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9BU1VTLCBVU0JfREVWSUNFX0lEX0FTVVNfTENNMikgfSwKIAl7IH0sCiB9OwogCiAvKiBwYXJhbWV0ZXJzIG9mIHNwZWNpZmljIGRldmljZXMgKi8KIHN0YXRpYyBzdHJ1Y3Qgb2xlZF9kZXZfZGVzY19zdHIgb2xlZF9kZXZfZGVzY190YWJsZVtdID0gewotCXsgMHgwYjA1LCAweDE3MjYsIDEyOCwgUEFDS19NT0RFX0cxLCAiRzEvRzIiIH0sCi0JeyAweDBiMDUsIDB4MTc1YiwgMjU2LCBQQUNLX01PREVfRzUwLCAiRzUwIiB9LAorCXsgVVNCX1ZFTkRPUl9JRF9BU1VTLCBVU0JfREVWSUNFX0lEX0FTVVNfTENNLCAxMjgsIFBBQ0tfTU9ERV9HMSwKKwkJIkcxL0cyIiB9LAorCXsgVVNCX1ZFTkRPUl9JRF9BU1VTLCBVU0JfREVWSUNFX0lEX0FTVVNfTENNMiwgMjU2LCBQQUNLX01PREVfRzUwLAorCQkiRzUwIiB9LAogCXsgfSwKIH07CiAKQEAgLTQyNCw2ICs0MzAsMTEgQEAKIAogCQlrZnJlZShvZGV2LT5idWYpOwogCQlvZGV2LT5idWYgPSBrbWFsbG9jKG9kZXYtPmJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKwkJaWYgKG9kZXYtPmJ1ZiA9PSBOVUxMKSB7CisJCQlvZGV2LT5idWZfc2l6ZSA9IDA7CisJCQlwcmludGsoQVNVU19PTEVEX0VSUk9SICJPdXQgb2YgbWVtb3J5IVxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCiAJCW1lbXNldChvZGV2LT5idWYsIDB4ZmYsIG9kZXYtPmJ1Zl9zaXplKTsKIApAQCAtNzU5LDEzICs3NzAsOCBAQAogCS5pZF90YWJsZSA9CWlkX3RhYmxlLAogfTsKIAotc3RhdGljIHNzaXplX3QgdmVyc2lvbl9zaG93KHN0cnVjdCBjbGFzcyAqZGV2LCBjaGFyICpidWYpCi17Ci0JcmV0dXJuIHNwcmludGYoYnVmLCBBU1VTX09MRURfVU5ERVJTQ09SRV9OQU1FICIgJXNcbiIsCi0JCSAgICAgICBBU1VTX09MRURfVkVSU0lPTik7Ci19Ci0KLXN0YXRpYyBDTEFTU19BVFRSKHZlcnNpb24sIFNfSVJVR08sIHZlcnNpb25fc2hvdywgTlVMTCk7CitzdGF0aWMgQ0xBU1NfQVRUUl9TVFJJTkcodmVyc2lvbiwgU19JUlVHTywKKwkJIAlBU1VTX09MRURfVU5ERVJTQ09SRV9OQU1FICIgIiBBU1VTX09MRURfVkVSU0lPTik7CiAKIHN0YXRpYyBpbnQgX19pbml0IGFzdXNfb2xlZF9pbml0KHZvaWQpCiB7CkBAIC03NzcsNyArNzgzLDcgQEAKIAkJcmV0dXJuIFBUUl9FUlIob2xlZF9jbGFzcyk7CiAJfQogCi0JcmV0dmFsID0gY2xhc3NfY3JlYXRlX2ZpbGUob2xlZF9jbGFzcywgJmNsYXNzX2F0dHJfdmVyc2lvbik7CisJcmV0dmFsID0gY2xhc3NfY3JlYXRlX2ZpbGUob2xlZF9jbGFzcywgJmNsYXNzX2F0dHJfdmVyc2lvbi5hdHRyKTsKIAlpZiAocmV0dmFsKSB7CiAJCWVycigiRXJyb3IgY3JlYXRpbmcgY2xhc3MgdmVyc2lvbiBmaWxlIik7CiAJCWdvdG8gZXJyb3I7CkBAIC03OTksNyArODA1LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGFzdXNfb2xlZF9leGl0KHZvaWQpCiB7Ci0JY2xhc3NfcmVtb3ZlX2ZpbGUob2xlZF9jbGFzcywgJmNsYXNzX2F0dHJfdmVyc2lvbik7CisJY2xhc3NfcmVtb3ZlX2ZpbGUob2xlZF9jbGFzcywgJmNsYXNzX2F0dHJfdmVyc2lvbi5hdHRyKTsKIAljbGFzc19kZXN0cm95KG9sZWRfY2xhc3MpOwogCiAJdXNiX2RlcmVnaXN0ZXIoJm9sZWRfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2IzZGZnL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNjU3M2MuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2IzZGZnL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1jb25maWcgQjNERkcKLSAgICAgICB0cmlzdGF0ZSAiQnJvbnRlcyAzZCBGcmFtZSBGcmFtZWdyYWJiZXIiCi0gICAgICAgZGVwZW5kcyBvbiBQQ0kKLSAgICAgICBkZWZhdWx0IG4KLSAgICAgICAtLS1oZWxwLS0tCi0gICAgICAgICBUaGlzIGRyaXZlciBwcm92aWRlcyBzdXBwb3J0IGZvciB0aGUgQnJvbnRlcyAzZCBGcmFtZWdyYWJiZXIKLSAgICAgICAgIFBDSSBjYXJkLgotCi0gICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlCi0gICAgICAgICB3aWxsIGJlIGNhbGxlZCBiM2RmZy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTFmNDM5Zi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1vYmotJChDT05GSUdfQjNERkcpICs9IGIzZGZnLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iM2RmZy9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2IzZGZnL1RPRE8KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1YTkyOTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2IzZGZnL1RPRE8KKysrIC9kZXYvbnVsbApAQCAtMSw0ICswLDAgQEAKLQotIC0gcXVldWUvd2FpdCBidWZmZXIgcHJlc2VudHMgZmlsbHRpbWUgcmVzdWx0cyBmb3IgZWFjaCBmcmFtZT8KLSAtIGNvdW50aW5nIG9mIGRyb3BwZWQgZnJhbWVzCi0gLSByZXZpZXcgZW5kaWFubmVzcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2IzZGZnL2IzZGZnLmMgYi9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvYjNkZmcuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGE0M2M1MS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYjNkZmcvYjNkZmcuYworKysgL2Rldi9udWxsCkBAIC0xLDExMDAgKzAsMCBAQAotIC8qCi0gKiBCcm9udGVzIFBDSSBmcmFtZSBncmFiYmVyIGRyaXZlcgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCAzTSBDb21wYW55Ci0gKiBDb250YWN0OiBKdXN0aW4gQnJvbmRlciA8anNicm9uZGVyQGJyb250ZXMzZC5jb20+Ci0gKiBPcmlnaW5hbCBBdXRob3JzOiBEYW5pZWwgRHJha2UgPGRkcmFrZUBicm9udGVzM2QuY29tPgotICogICAgICAgICAgICAgICAgICAgRHVhbmUgR3JpZmZpbiA8ZHVhbmVnQGRnaGRhLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotCi1zdGF0aWMgdW5zaWduZWQgaW50IGIzZGZnX25idWYgPSAyOwotCi1tb2R1bGVfcGFyYW1fbmFtZWQoYnVmZmVyX2NvdW50LCBiM2RmZ19uYnVmLCB1aW50LCAwNDQ0KTsKLQotTU9EVUxFX1BBUk1fREVTQyhidWZmZXJfY291bnQsICJOdW1iZXIgb2YgYnVmZmVycyAobWluIDIsIGRlZmF1bHQgMikiKTsKLQotTU9EVUxFX0FVVEhPUigiRGFuaWVsIERyYWtlIDxkZHJha2VAYnJvbnRlczNkLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQnJvbnRlcyBmcmFtZSBncmFiYmVyIGRyaXZlciIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0jZGVmaW5lIERSSVZFUl9OQU1FICJiM2RmZyIKLSNkZWZpbmUgQjNERkdfTUFYX0RFVlMgNAotI2RlZmluZSBCM0RGR19GUkFNRVNfUEVSX0JVRkZFUiAzCi0KLSNkZWZpbmUgQjNERkdfQkFSX1JFR1MJMAotI2RlZmluZSBCM0RGR19SRUdTX0xFTkdUSCAweDEwMDAwCi0KLSNkZWZpbmUgQjNERkdfSU9DX01BR0lDCQkweGIzIC8qIGRmZyA6LSkgKi8KLSNkZWZpbmUgQjNERkdfSU9DR0ZSTVNaCQlfSU9SKEIzREZHX0lPQ19NQUdJQywgMSwgaW50KQotI2RlZmluZSBCM0RGR19JT0NUTlVNQlVGUwlfSU8oQjNERkdfSU9DX01BR0lDLCAyKQotI2RlZmluZSBCM0RGR19JT0NUVFJBTlMJCV9JTyhCM0RGR19JT0NfTUFHSUMsIDMpCi0jZGVmaW5lIEIzREZHX0lPQ1RRVUVVRUJVRglfSU8oQjNERkdfSU9DX01BR0lDLCA0KQotI2RlZmluZSBCM0RGR19JT0NUUE9MTEJVRglfSU9XUihCM0RGR19JT0NfTUFHSUMsIDUsIHN0cnVjdCBiM2RmZ19wb2xsKQotI2RlZmluZSBCM0RGR19JT0NUV0FJVEJVRglfSU9XUihCM0RGR19JT0NfTUFHSUMsIDYsIHN0cnVjdCBiM2RmZ193YWl0KQotI2RlZmluZSBCM0RGR19JT0NHV0FORFNUQVQJX0lPUihCM0RGR19JT0NfTUFHSUMsIDcsIGludCkKLQotZW51bSB7Ci0JLyogbnVtYmVyIG9mIDRrYiBwYWdlcyBwZXIgZnJhbWUgKi8KLQlCM0RfUkVHX0ZSTV9TSVpFID0gMHgwLAotCi0JLyogYml0IDA6IHNldCB0byBlbmFibGUgaW50ZXJydXB0cwotCSAqIGJpdCAxOiBzZXQgdG8gZW5hYmxlIGNhYmxlIHN0YXR1cyBjaGFuZ2UgaW50ZXJydXB0cyAqLwotCUIzRF9SRUdfSFdfQ1RSTCA9IDB4NCwKLQotCS8qIGJpdCAwLTEgLSAxLWJhc2VkIElEIG9mIG5leHQgcGVuZGluZyBmcmFtZSB0cmFuc2ZlciAoMCA9IG5vbmUpCi0JICogYml0IDIgaW5kaWNhdGVzIHRoZSBwcmV2aW91cyBETUEgdHJhbnNmZXIgaGFzIGNvbXBsZXRlZAotCSAqIGJpdCAzIGluZGljYXRlcyB3YW5kIGNhYmxlIHN0YXR1cyBjaGFuZ2UKLQkgKiBiaXQgODoxNSAtIGNvdW50ZXIgb2YgbnVtYmVyIG9mIGRpc2NhcmRlZCB0cmlwbGV0cyAqLwotCUIzRF9SRUdfRE1BX1NUUyA9IDB4OCwKLQotCS8qIGJpdCAwOiB3YW5kIHN0YXR1cyAoMSA9IHByZXNlbnQsIDAgPSBkaXNjb25uZWN0ZWQpICovCi0JQjNEX1JFR19XQU5EX1NUUyA9IDB4YywKLQotCS8qIGJ1cyBhZGRyZXNzIGZvciBETUEgdHJhbnNmZXJzLiBsb3dlciAyIGJpdHMgbXVzdCBiZSB6ZXJvIGJlY2F1c2UgRE1BCi0JICogd29ya3Mgd2l0aCAzMiBiaXQgd29yZCBzaXplLiAqLwotCUIzRF9SRUdfRUMyMjBfRE1BX0FERFIgPSAweDgwMDAsCi0KLQkvKiBiaXQgMjA6MCAtIG51bWJlciBvZiAzMiBiaXQgd29yZHMgdG8gYmUgdHJhbnNmZXJyZWQKLQkgKiBiaXQgMjE6MzEgLSByZXNlcnZlZCAqLwotCUIzRF9SRUdfRUMyMjBfVFJGX1NJWkUgPSAweDgwMDQsCi0KLQkvKiBiaXQgMCAtIGVycm9yIGJpdAotCSAqIGJpdCAxIC0gaW50ZXJydXB0IGJpdCAoc2V0IHRvIGdlbmVyYXRlIGludGVycnVwdCBhdCBlbmQgb2YgdHJhbnNmZXIpCi0JICogYml0IDIgLSBzdGFydCBiaXQgKHNldCB0byBzdGFydCB0cmFuc2ZlcikKLQkgKiBiaXQgMyAtIGRpcmVjdGlvbiAoMCA9IERNQV9UT19ERVZJQ0UsIDEgPSBETUFfRlJPTV9ERVZJQ0UKLQkgKiBiaXQgNDozMSAtIHJlc2VydmVkICovCi0JQjNEX1JFR19FQzIyMF9ETUFfU1RTID0gMHg4MDA4LAotfTsKLQotZW51bSBiM2RmZ19idWZmZXJfc3RhdGUgewotCUIzREZHX0JVRkZFUl9QT0xMRUQgPSAwLAotCUIzREZHX0JVRkZFUl9QRU5ESU5HLAotCUIzREZHX0JVRkZFUl9QT1BVTEFURUQsCi19OwotCi1zdHJ1Y3QgYjNkZmdfYnVmZmVyIHsKLQl1bnNpZ25lZCBjaGFyICpmcmFtZVtCM0RGR19GUkFNRVNfUEVSX0JVRkZFUl07Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXU4IHN0YXRlOwotfTsKLQotc3RydWN0IGIzZGZnX2RldiB7Ci0KLQkvKiBubyBwcm90ZWN0aW9uIG5lZWRlZDogYWxsIGZpbmFsaXplZCBhdCBpbml0aWFsaXphdGlvbiB0aW1lICovCi0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0Jc3RydWN0IGNkZXYgY2hhcmRldjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXY7Ci0Jdm9pZCBfX2lvbWVtICpyZWdzOwotCXVuc2lnbmVkIGludCBmcmFtZV9zaXplOwotCi0JLyoKLQkgKiBQcm90ZWN0cyBidWZmZXIgc3RhdGUsIGluY2x1ZGluZyBidWZmZXJfcXVldWUsIHRyaXBsZXRfcmVhZHksCi0JICogY3VyX2RtYV9mcmFtZV9pZHggJiBjdXJfZG1hX2ZyYW1lX2FkZHIuCi0JICovCi0Jc3BpbmxvY2tfdCBidWZmZXJfbG9jazsKLQlzdHJ1Y3QgYjNkZmdfYnVmZmVyICpidWZmZXJzOwotCXN0cnVjdCBsaXN0X2hlYWQgYnVmZmVyX3F1ZXVlOwotCi0JLyogTGFzdCBmcmFtZSBpbiB0cmlwbGV0IHRyYW5zZmVycmVkICgtMSBpZiBub25lKS4gKi8KLQlpbnQgY3VyX2RtYV9mcmFtZV9pZHg7Ci0KLQkvKiBDdXJyZW50IGZyYW1lJ3MgYWRkcmVzcyBmb3IgRE1BLiAqLwotCWRtYV9hZGRyX3QgY3VyX2RtYV9mcmFtZV9hZGRyOwotCi0JLyoKLQkgKiBQcm90ZWN0cyBjc3RhdGVfdHN0YW1wLgotCSAqIE5lc3RzIGluc2lkZSBidWZmZXJfbG9jay4KLQkgKi8KLQlzcGlubG9ja190IGNzdGF0ZV9sb2NrOwotCXVuc2lnbmVkIGxvbmcgY3N0YXRlX3RzdGFtcDsKLQotCS8qCi0JICogUHJvdGVjdHMgdHJpcGxldHNfZHJvcHBlZC4KLQkgKiBOZXN0cyBpbnNpZGUgYnVmZmVyc19sb2NrLgotCSAqLwotCXNwaW5sb2NrX3QgdHJpcGxldHNfZHJvcHBlZF9sb2NrOwotCXVuc2lnbmVkIGludCB0cmlwbGV0c19kcm9wcGVkOwotCi0Jd2FpdF9xdWV1ZV9oZWFkX3QgYnVmZmVyX3dhaXRxdWV1ZTsKLQotCXVuc2lnbmVkIGludCB0cmFuc21pc3Npb25fZW5hYmxlZDoxOwotCXVuc2lnbmVkIGludCB0cmlwbGV0X3JlYWR5OjE7Ci19OwotCi1zdGF0aWMgdTggYjNkZmdfZGV2aWNlc1tCM0RGR19NQVhfREVWU107Ci0KLXN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmIzZGZnX2NsYXNzOwotc3RhdGljIGRldl90IGIzZGZnX2RldnQ7Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBiM2RmZ19pZHNbXSBfX2RldmluaXRkYXRhID0gewotCXsgUENJX0RFVklDRSgweDBiM2QsIDB4MDAwMSkgfSwKLQl7IH0sCi19OwotCi1NT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYjNkZmdfaWRzKTsKLQotLyoqKioqIHVzZXItdmlzaWJsZSB0eXBlcyAqKioqKi8KLQotc3RydWN0IGIzZGZnX3BvbGwgewotCWludCBidWZmZXJfaWR4OwotCXVuc2lnbmVkIGludCB0cmlwbGV0c19kcm9wcGVkOwotfTsKLQotc3RydWN0IGIzZGZnX3dhaXQgewotCWludCBidWZmZXJfaWR4OwotCXVuc2lnbmVkIGludCB0aW1lb3V0OwotCXVuc2lnbmVkIGludCB0cmlwbGV0c19kcm9wcGVkOwotfTsKLQotLyoqKiogcmVnaXN0ZXIgSS9PICoqKiovCi0KLXN0YXRpYyB1MzIgYjNkZmdfcmVhZDMyKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2LCB1MTYgcmVnKQotewotCXJldHVybiBpb3JlYWQzMihmZ2Rldi0+cmVncyArIHJlZyk7Ci19Ci0KLXN0YXRpYyB2b2lkIGIzZGZnX3dyaXRlMzIoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYsIHUxNiByZWcsIHUzMiB2YWx1ZSkKLXsKLQlpb3dyaXRlMzIodmFsdWUsIGZnZGV2LT5yZWdzICsgcmVnKTsKLX0KLQotLyoqKiogYnVmZmVyIG1hbmFnZW1lbnQgKioqKi8KLQotLyoKLSAqIFByb2dyYW0gRUMyMjAgZm9yIHRyYW5zZmVyIG9mIGEgc3BlY2lmaWMgZnJhbWUuCi0gKiBDYWxsZWQgd2l0aCBidWZmZXJfbG9jayBoZWxkLgotICovCi1zdGF0aWMgaW50IHNldHVwX2ZyYW1lX3RyYW5zZmVyKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2LAotCXN0cnVjdCBiM2RmZ19idWZmZXIgKmJ1ZiwgaW50IGZyYW1lKQotewotCXVuc2lnbmVkIGNoYXIgKmZybV9hZGRyOwotCWRtYV9hZGRyX3QgZnJtX2FkZHJfZG1hOwotCXVuc2lnbmVkIGludCBmcm1fc2l6ZSA9IGZnZGV2LT5mcmFtZV9zaXplOwotCi0JZnJtX2FkZHIgPSBidWYtPmZyYW1lW2ZyYW1lXTsKLQlmcm1fYWRkcl9kbWEgPSBwY2lfbWFwX3NpbmdsZShmZ2Rldi0+cGRldiwgZnJtX2FkZHIsCi0JCQkJCSAgZnJtX3NpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7Ci0JaWYgKHBjaV9kbWFfbWFwcGluZ19lcnJvcihmZ2Rldi0+cGRldiwgZnJtX2FkZHJfZG1hKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9hZGRyID0gZnJtX2FkZHJfZG1hOwotCWZnZGV2LT5jdXJfZG1hX2ZyYW1lX2lkeCA9IGZyYW1lOwotCi0JYjNkZmdfd3JpdGUzMihmZ2RldiwgQjNEX1JFR19FQzIyMF9ETUFfQUREUiwKLQkJCQkJY3B1X3RvX2xlMzIoZnJtX2FkZHJfZG1hKSk7Ci0JYjNkZmdfd3JpdGUzMihmZ2RldiwgQjNEX1JFR19FQzIyMF9UUkZfU0laRSwKLQkJCQkJY3B1X3RvX2xlMzIoZnJtX3NpemUgPj4gMikpOwotCWIzZGZnX3dyaXRlMzIoZmdkZXYsIEIzRF9SRUdfRUMyMjBfRE1BX1NUUywgMHhmKTsKLQotCXJldHVybiAwOwotfQotCi0vKiBDYWxsZXIgc2hvdWxkIGhvbGQgYnVmZmVyIGxvY2sgKi8KLXN0YXRpYyB2b2lkIGRlcXVldWVfYWxsX2J1ZmZlcnMoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IGIzZGZnX25idWY7IGkrKykgewotCQlzdHJ1Y3QgYjNkZmdfYnVmZmVyICpidWYgPSAmZmdkZXYtPmJ1ZmZlcnNbaV07Ci0JCWJ1Zi0+c3RhdGUgPSBCM0RGR19CVUZGRVJfUE9MTEVEOwotCQlsaXN0X2RlbF9pbml0KCZidWYtPmxpc3QpOwotCX0KLX0KLQotLyogcXVldWUgYSBidWZmZXIgdG8gcmVjZWl2ZSBkYXRhICovCi1zdGF0aWMgaW50IHF1ZXVlX2J1ZmZlcihzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiwgaW50IGJ1ZmlkeCkKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZmdkZXYtPnBkZXYtPmRldjsKLQlzdHJ1Y3QgYjNkZmdfYnVmZmVyICpidWY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgciA9IDA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7Ci0JaWYgKGJ1ZmlkeCA8IDAgfHwgYnVmaWR4ID49IGIzZGZnX25idWYpIHsKLQkJZGV2X2RiZyhkZXYsICJJbnZhbGlkIGJ1ZmZlciBpbmRleCwgJWRcbiIsIGJ1ZmlkeCk7Ci0JCXIgPSAtRU5PRU5UOwotCQlnb3RvIG91dDsKLQl9Ci0JYnVmID0gJmZnZGV2LT5idWZmZXJzW2J1ZmlkeF07Ci0KLQlpZiAodW5saWtlbHkoYnVmLT5zdGF0ZSA9PSBCM0RGR19CVUZGRVJfUEVORElORykpIHsKLQkJZGV2X2RiZyhkZXYsICJidWZmZXIgJWQgaXMgYWxyZWFkeSBxdWV1ZWRcbiIsIGJ1ZmlkeCk7Ci0JCXIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlidWYtPnN0YXRlID0gQjNERkdfQlVGRkVSX1BFTkRJTkc7Ci0JbGlzdF9hZGRfdGFpbCgmYnVmLT5saXN0LCAmZmdkZXYtPmJ1ZmZlcl9xdWV1ZSk7Ci0KLQlpZiAoZmdkZXYtPnRyYW5zbWlzc2lvbl9lbmFibGVkICYmIGZnZGV2LT50cmlwbGV0X3JlYWR5KSB7Ci0JCWRldl9kYmcoZGV2LCAidHJpcGxldCBpcyByZWFkeSwgcHVzaGluZyBpbW1lZGlhdGVseVxuIik7Ci0JCWZnZGV2LT50cmlwbGV0X3JlYWR5ID0gMDsKLQkJciA9IHNldHVwX2ZyYW1lX3RyYW5zZmVyKGZnZGV2LCBidWYsIDApOwotCQlpZiAocikKLQkJCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIG1hcCBETUEgYnVmZmVyXG4iKTsKLQl9Ci0KLW91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gcjsKLX0KLQotLyogbm9uLWJsb2NraW5nIGJ1ZmZlciBwb2xsLiByZXR1cm5zIDEgaWYgZGF0YSBpcyBwcmVzZW50IGluIHRoZSBidWZmZXIsCi0gKiAwIG90aGVyd2lzZSAqLwotc3RhdGljIGludCBwb2xsX2J1ZmZlcihzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2Rldiwgdm9pZCBfX3VzZXIgKmFyZykKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZmdkZXYtPnBkZXYtPmRldjsKLQlzdHJ1Y3QgYjNkZmdfcG9sbCBwOwotCXN0cnVjdCBiM2RmZ19idWZmZXIgKmJ1ZjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByID0gMTsKLQlpbnQgYXJnX291dCA9IDA7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJnAsIGFyZywgc2l6ZW9mKHApKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAodW5saWtlbHkoIWZnZGV2LT50cmFuc21pc3Npb25fZW5hYmxlZCkpIHsKLQkJZGV2X2RiZyhkZXYsICJjYW5ub3QgcG9sbCwgdHJhbnNtaXNzaW9uIGRpc2FibGVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHAuYnVmZmVyX2lkeCA8IDAgfHwgcC5idWZmZXJfaWR4ID49IGIzZGZnX25idWYpCi0JCXJldHVybiAtRU5PRU5UOwotCi0JYnVmID0gJmZnZGV2LT5idWZmZXJzW3AuYnVmZmVyX2lkeF07Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7Ci0KLQlpZiAobGlrZWx5KGJ1Zi0+c3RhdGUgPT0gQjNERkdfQlVGRkVSX1BPUFVMQVRFRCkpIHsKLQkJYXJnX291dCA9IDE7Ci0JCWJ1Zi0+c3RhdGUgPSBCM0RGR19CVUZGRVJfUE9MTEVEOwotCi0JCS8qIElSUXMgYWxyZWFkeSBkaXNhYmxlZCBieSBzcGluX2xvY2tfaXJxc2F2ZSBhYm92ZS4gKi8KLQkJc3Bpbl9sb2NrKCZmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZF9sb2NrKTsKLQkJcC50cmlwbGV0c19kcm9wcGVkID0gZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWQ7Ci0JCWZnZGV2LT50cmlwbGV0c19kcm9wcGVkID0gMDsKLQkJc3Bpbl91bmxvY2soJmZnZGV2LT50cmlwbGV0c19kcm9wcGVkX2xvY2spOwotCX0gZWxzZSB7Ci0JCXIgPSAwOwotCX0KLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOwotCi0JaWYgKGFyZ19vdXQgJiYgY29weV90b191c2VyKGFyZywgJnAsIHNpemVvZihwKSkpCi0JCXIgPSAtRUZBVUxUOwotCi0JcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9jc3RhdGVfY2hhbmdlKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2KQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHdoZW47Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmdkZXYtPmNzdGF0ZV9sb2NrLCBmbGFncyk7Ci0Jd2hlbiA9IGZnZGV2LT5jc3RhdGVfdHN0YW1wOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZnZGV2LT5jc3RhdGVfbG9jaywgZmxhZ3MpOwotCXJldHVybiB3aGVuOwotfQotCi1zdGF0aWMgaW50IGlzX2V2ZW50X3JlYWR5KHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2LCBzdHJ1Y3QgYjNkZmdfYnVmZmVyICpidWYsCi0JCQkgIHVuc2lnbmVkIGxvbmcgd2hlbikKLXsKLQlpbnQgcmVzdWx0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7Ci0Jc3Bpbl9sb2NrKCZmZ2Rldi0+Y3N0YXRlX2xvY2spOwotCXJlc3VsdCA9ICghZmdkZXYtPnRyYW5zbWlzc2lvbl9lbmFibGVkIHx8Ci0JCSAgYnVmLT5zdGF0ZSA9PSBCM0RGR19CVUZGRVJfUE9QVUxBVEVEIHx8Ci0JCSAgd2hlbiAhPSBmZ2Rldi0+Y3N0YXRlX3RzdGFtcCk7Ci0Jc3Bpbl91bmxvY2soJmZnZGV2LT5jc3RhdGVfbG9jayk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQotCi0vKiBzbGVlcCB1bnRpbCBhIHNwZWNpZmljIGJ1ZmZlciBiZWNvbWVzIHBvcHVsYXRlZCAqLwotc3RhdGljIGludCB3YWl0X2J1ZmZlcihzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2Rldiwgdm9pZCBfX3VzZXIgKmFyZykKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZmdkZXYtPnBkZXYtPmRldjsKLQlzdHJ1Y3QgYjNkZmdfd2FpdCB3OwotCXN0cnVjdCBiM2RmZ19idWZmZXIgKmJ1ZjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCB3aGVuOwotCWludCByOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZ3LCBhcmcsIHNpemVvZih3KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JaWYgKCFmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQpIHsKLQkJZGV2X2RiZyhkZXYsICJjYW5ub3Qgd2FpdCwgdHJhbnNtaXNzaW9uIGRpc2FibGVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKHcuYnVmZmVyX2lkeCA8IDAgfHwgdy5idWZmZXJfaWR4ID49IGIzZGZnX25idWYpCi0JCXJldHVybiAtRU5PRU5UOwotCi0JYnVmID0gJmZnZGV2LT5idWZmZXJzW3cuYnVmZmVyX2lkeF07Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7Ci0KLQlpZiAoYnVmLT5zdGF0ZSA9PSBCM0RGR19CVUZGRVJfUE9QVUxBVEVEKSB7Ci0JCXIgPSB3LnRpbWVvdXQ7Ci0JCWdvdG8gb3V0X3RyaXBsZXRzX2Ryb3BwZWQ7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7Ci0KLQl3aGVuID0gZ2V0X2NzdGF0ZV9jaGFuZ2UoZmdkZXYpOwotCWlmICh3LnRpbWVvdXQgPiAwKSB7Ci0JCXIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dChmZ2Rldi0+YnVmZmVyX3dhaXRxdWV1ZSwKLQkJCWlzX2V2ZW50X3JlYWR5KGZnZGV2LCBidWYsIHdoZW4pLAotCQkJKHcudGltZW91dCAqIEhaKSAvIDEwMDApOwotCi0JCWlmICh1bmxpa2VseShyIDwgMCkpCi0JCQlnb3RvIG91dDsKLQotCQl3LnRpbWVvdXQgPSByICogMTAwMCAvIEhaOwotCX0gZWxzZSB7Ci0JCXIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZmdkZXYtPmJ1ZmZlcl93YWl0cXVldWUsCi0JCQlpc19ldmVudF9yZWFkeShmZ2RldiwgYnVmLCB3aGVuKSk7Ci0KLQkJaWYgKHVubGlrZWx5KHIpKSB7Ci0JCQlyID0gLUVSRVNUQVJUU1lTOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQkvKiBUT0RPOiBJbmZvcm0gdGhlIHVzZXIgdmlhIGZpZWxkKHMpIGluIHc/ICovCi0JaWYgKCFmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQgfHwgd2hlbiAhPSBnZXRfY3N0YXRlX2NoYW5nZShmZ2RldikpIHsKLQkJciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKLQotCWlmIChidWYtPnN0YXRlICE9IEIzREZHX0JVRkZFUl9QT1BVTEFURUQpIHsKLQkJciA9IC1FVElNRURPVVQ7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KLQlidWYtPnN0YXRlID0gQjNERkdfQlVGRkVSX1BPTExFRDsKLQotb3V0X3RyaXBsZXRzX2Ryb3BwZWQ6Ci0KLQkvKiBJUlFzIGFscmVhZHkgZGlzYWJsZWQgYnkgc3Bpbl9sb2NrX2lycXNhdmUgYWJvdmUuICovCi0Jc3Bpbl9sb2NrKCZmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZF9sb2NrKTsKLQl3LnRyaXBsZXRzX2Ryb3BwZWQgPSBmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZDsKLQlmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZCA9IDA7Ci0Jc3Bpbl91bmxvY2soJmZnZGV2LT50cmlwbGV0c19kcm9wcGVkX2xvY2spOwotCi1vdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOwotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdywgc2l6ZW9mKHcpKSkKLQkJciA9IC1FRkFVTFQ7Ci1vdXQ6Ci0JcmV0dXJuIHI7Ci19Ci0KLS8qIG1tYXAgcGFnZSBmYXVsdCBoYW5kbGVyICovCi1zdGF0aWMgaW50IGIzZGZnX3ZtYV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQlzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKLXsKLQlzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGxvbmcgb2ZmID0gdm1mLT5wZ29mZiA8PCBQQUdFX1NISUZUOwotCXVuc2lnbmVkIGludCBmcmFtZV9zaXplID0gZmdkZXYtPmZyYW1lX3NpemU7Ci0JdW5zaWduZWQgaW50IGJ1Zl9zaXplID0gZnJhbWVfc2l6ZSAqIEIzREZHX0ZSQU1FU19QRVJfQlVGRkVSOwotCXVuc2lnbmVkIGNoYXIgKmFkZHI7Ci0KLQkvKiBkZXRlcm1pbmUgd2hpY2ggYnVmZmVyIHRoZSBvZmZzZXQgbGllcyB3aXRoaW4gKi8KLQl1bnNpZ25lZCBpbnQgYnVmX2lkeCA9IG9mZiAvIGJ1Zl9zaXplOwotCS8qIGFuZCB0aGUgb2Zmc2V0IGludG8gdGhlIGJ1ZmZlciAqLwotCXVuc2lnbmVkIGludCBidWZfb2ZmID0gb2ZmICUgYnVmX3NpemU7Ci0KLQkvKiBkZXRlcm1pbmUgd2hpY2ggZnJhbWUgaW5zaWRlIHRoZSBidWZmZXIgdGhlIG9mZnNldCBsaWVzIGluICovCi0JdW5zaWduZWQgaW50IGZybV9pZHggPSBidWZfb2ZmIC8gZnJhbWVfc2l6ZTsKLQkvKiBhbmQgdGhlIG9mZnNldCBpbnRvIHRoZSBmcmFtZSAqLwotCXVuc2lnbmVkIGludCBmcm1fb2ZmID0gYnVmX29mZiAlIGZyYW1lX3NpemU7Ci0KLQlpZiAodW5saWtlbHkoYnVmX2lkeCA+PSBiM2RmZ19uYnVmKSkKLQkJcmV0dXJuIFZNX0ZBVUxUX1NJR0JVUzsKLQotCWFkZHIgPSBmZ2Rldi0+YnVmZmVyc1tidWZfaWR4XS5mcmFtZVtmcm1faWR4XSArIGZybV9vZmY7Ci0Jdm1faW5zZXJ0X3Bmbih2bWEsICh1bnNpZ25lZCBsb25nKXZtZi0+dmlydHVhbF9hZGRyZXNzLAotCQkJICB2aXJ0X3RvX3BoeXMoYWRkcikgPj4gUEFHRV9TSElGVCk7Ci0KLQlyZXR1cm4gVk1fRkFVTFRfTk9QQUdFOwotfQotCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IGIzZGZnX3ZtX29wcyA9IHsKLQkuZmF1bHQgPSBiM2RmZ192bWFfZmF1bHQsCi19OwotCi1zdGF0aWMgaW50IGdldF93YW5kX3N0YXR1cyhzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiwgaW50IF9fdXNlciAqYXJnKQotewotCXUzMiB3bmRzdGF0ID0gYjNkZmdfcmVhZDMyKGZnZGV2LCBCM0RfUkVHX1dBTkRfU1RTKTsKLQlkZXZfZGJnKCZmZ2Rldi0+cGRldi0+ZGV2LCAid2FuZCBzdGF0dXMgJXhcbiIsIHduZHN0YXQpOwotCXJldHVybiBfX3B1dF91c2VyKHduZHN0YXQgJiAweDEsIGFyZyk7Ci19Ci0KLXN0YXRpYyBpbnQgZW5hYmxlX3RyYW5zbWlzc2lvbihzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldikKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZmZ2Rldi0+cGRldi0+ZGV2OwotCi0JZGV2X2RiZyhkZXYsICJlbmFibGUgdHJhbnNtaXNzaW9uXG4iKTsKLQotCS8qIGNoZWNrIHRoZSBjYWJsZSBpcyBwbHVnZ2VkIGluLiAqLwotCWlmICghYjNkZmdfcmVhZDMyKGZnZGV2LCBCM0RfUkVHX1dBTkRfU1RTKSkgewotCQlkZXZfZGJnKGRldiwgImNhbm5vdCBzdGFydCB0cmFuc21pc3Npb24gd2l0aG91dCB3YW5kXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOwotCi0JLyogSGFuZGxlIHJhY2luZyBlbmFibGVfdHJhbnNtaXNzaW9uIGNhbGxzLiAqLwotCWlmIChmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQpIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXNwaW5fbG9jaygmZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWRfbG9jayk7Ci0JZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWQgPSAwOwotCXNwaW5fdW5sb2NrKCZmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZF9sb2NrKTsKLQotCWZnZGV2LT50cmlwbGV0X3JlYWR5ID0gMDsKLQlmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9pZHggPSAtMTsKLQlmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQgPSAxOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7Ci0KLQkvKiBFbmFibGUgRE1BIGFuZCBjYWJsZSBzdGF0dXMgaW50ZXJydXB0cy4gKi8KLQliM2RmZ193cml0ZTMyKGZnZGV2LCBCM0RfUkVHX0hXX0NUUkwsIDB4MDMpOwotCi1vdXQ6Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGRpc2FibGVfdHJhbnNtaXNzaW9uKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2KQotewotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZmZ2Rldi0+cGRldi0+ZGV2OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdTMyIHRtcDsKLQotCWRldl9kYmcoZGV2LCAiZGlzYWJsZSB0cmFuc21pc3Npb25cbiIpOwotCi0JLyogZ3VhcmFudGVlIHRoYXQgbm8gbW9yZSBpbnRlcnJ1cHRzIHdpbGwgYmUgc2VydmljZWQgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7Ci0JZmdkZXYtPnRyYW5zbWlzc2lvbl9lbmFibGVkID0gMDsKLQotCWIzZGZnX3dyaXRlMzIoZmdkZXYsIEIzRF9SRUdfSFdfQ1RSTCwgMCk7Ci0KLQkvKiBGSVhNRTogdGVtcG9yYXJ5IGRlYnVnZ2luZyBvbmx5LiBpZiB0aGUgYm9hcmQgc3RvcHMgdHJhbnNtaXR0aW5nLAotCSAqIGhpdHRpbmcgY3RybCtjIGFuZCBzZWVpbmcgdGhpcyBtZXNzYWdlIGlzIHVzZWZ1bCBmb3IgZGV0ZXJtaW5pbmcKLQkgKiB0aGUgc3RhdGUgb2YgdGhlIGJvYXJkLiAqLwotCXRtcCA9IGIzZGZnX3JlYWQzMihmZ2RldiwgQjNEX1JFR19ETUFfU1RTKTsKLQlkZXZfZGJnKGRldiwgIkRNQV9TVFMgcmVhZHMgJXggYWZ0ZXIgVFggc3RvcHBlZFxuIiwgdG1wKTsKLQotCWRlcXVldWVfYWxsX2J1ZmZlcnMoZmdkZXYpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZnZGV2LT5idWZmZXJfbG9jaywgZmxhZ3MpOwotCi0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZmZ2Rldi0+YnVmZmVyX3dhaXRxdWV1ZSk7Ci19Ci0KLXN0YXRpYyBpbnQgc2V0X3RyYW5zbWlzc2lvbihzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiwgaW50IGVuYWJsZWQpCi17Ci0JaW50IHJlcyA9IDA7Ci0KLQlpZiAoZW5hYmxlZCAmJiAhZmdkZXYtPnRyYW5zbWlzc2lvbl9lbmFibGVkKQotCQlyZXMgPSBlbmFibGVfdHJhbnNtaXNzaW9uKGZnZGV2KTsKLQllbHNlIGlmICghZW5hYmxlZCAmJiBmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQpCi0JCWRpc2FibGVfdHJhbnNtaXNzaW9uKGZnZGV2KTsKLQotCXJldHVybiByZXM7Ci19Ci0KLS8qIENhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dC4gKi8KLXN0YXRpYyB2b2lkIGhhbmRsZV9jc3RhdGVfdW5wbHVnKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2KQotewotCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMuICovCi0JYjNkZmdfd3JpdGUzMihmZ2RldiwgQjNEX1JFR19IV19DVFJMLCAwKTsKLQotCS8qIFN0b3AgdHJhbnNtaXNzaW9uLiAqLwotCXNwaW5fbG9jaygmZmdkZXYtPmJ1ZmZlcl9sb2NrKTsKLQlmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQgPSAwOwotCi0JZmdkZXYtPmN1cl9kbWFfZnJhbWVfaWR4ID0gLTE7Ci0JZmdkZXYtPnRyaXBsZXRfcmVhZHkgPSAwOwotCWlmIChmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9hZGRyKSB7Ci0JCXBjaV91bm1hcF9zaW5nbGUoZmdkZXYtPnBkZXYsIGZnZGV2LT5jdXJfZG1hX2ZyYW1lX2FkZHIsCi0JCQkJIGZnZGV2LT5mcmFtZV9zaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotCQlmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9hZGRyID0gMDsKLQl9Ci0JZGVxdWV1ZV9hbGxfYnVmZmVycyhmZ2Rldik7Ci0Jc3Bpbl91bmxvY2soJmZnZGV2LT5idWZmZXJfbG9jayk7Ci19Ci0KLS8qIENhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dC4gKi8KLXN0YXRpYyB2b2lkIGhhbmRsZV9jc3RhdGVfY2hhbmdlKHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2KQotewotCXUzMiBjc3RhdGUgPSBiM2RmZ19yZWFkMzIoZmdkZXYsIEIzRF9SRUdfV0FORF9TVFMpOwotCXVuc2lnbmVkIGxvbmcgd2hlbjsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZmdkZXYtPnBkZXYtPmRldjsKLQotCWRldl9kYmcoZGV2LCAiY2FibGUgc3RhdGUgY2hhbmdlOiAldVxuIiwgY3N0YXRlKTsKLQotCS8qCi0JICogV2hlbiB0aGUgd2FuZCBpcyB1bnBsdWdnZWQgd2UgcmVzZXQgb3VyIHN0YXRlLiBUaGUgaGFyZHdhcmUgd2lsbAotCSAqIGhhdmUgZG9uZSB0aGUgc2FtZSBpbnRlcm5hbGx5LgotCSAqCi0JICogTm90ZSB3ZSBzaG91bGQgbmV2ZXIgc2VlIGEgY2FibGUgKnBsdWdnZWQqIGV2ZW50LCBhcyBpbnRlcnJ1cHRzCi0JICogc2hvdWxkIG9ubHkgYmUgZW5hYmxlZCB3aGVuIHRyYW5zbWl0dGluZywgd2hpY2ggcmVxdWlyZXMgdGhlIGNhYmxlCi0JICogdG8gYmUgcGx1Z2dlZC4gSWYgd2UgZG8gc2VlIG9uZSBpdCBwcm9iYWJseSBtZWFucyB0aGUgY2FibGUgaGFzIGJlZW4KLQkgKiB1bnBsdWdnZWQgYW5kIHJlLXBsdWdnZWQgdmVyeSByYXBpZGx5LiBQb3NzaWJseSBiZWNhdXNlIGl0IGhhcyBhCi0JICogYnJva2VuIHdpcmUgYW5kIGlzIG1vbWVudGFyaWx5IGxvc2luZyBjb250YWN0LgotCSAqCi0JICogVE9ETzogQXQgdGhlIG1vbWVudCBpZiB5b3UgcGx1ZyBpbiB0aGUgY2FibGUgdGhlbiBlbmFibGUgdHJhbnNtaXNzaW9uCi0JICogdGhlIGhhcmR3YXJlIHdpbGwgcmFpc2UgYSBjb3VwbGUgb2Ygc3B1cmlvdXMgaW50ZXJydXB0cywgc28KLQkgKiBqdXN0IGlnbm9yZSB0aGVtIGZvciBub3cuCi0JICoKLQkgKiBPbmNlIHRoZSBoYXJkd2FyZSBpcyBmaXhlZCB3ZSBzaG91bGQgY29tcGxhaW4gYW5kIHRyZWF0IGl0IGFzIGFuCi0JICogdW5wbHVnLiBPciBhdCBsZWFzdCB0cmFjayBob3cgZnJlcXVlbnRseSBpdCBpcyBoYXBwZW5pbmcgYW5kIGRvCi0JICogc28gaWYgdG9vIG1hbnkgY29tZSBpbi4KLQkgKi8KLQlpZiAoY3N0YXRlKSB7Ci0JCWRldl93YXJuKGRldiwgImlnbm9yaW5nIHVuZXhwZWN0ZWQgcGx1ZyBldmVudFxuIik7Ci0JCXJldHVybjsKLQl9Ci0JaGFuZGxlX2NzdGF0ZV91bnBsdWcoZmdkZXYpOwotCi0JLyoKLQkgKiBSZWNvcmQgY2FibGUgc3RhdGUgY2hhbmdlIHRpbWVzdGFtcCAmIHdha2UgYW55b25lIHdhaXRpbmcKLQkgKiBvbiBhIGNhYmxlIHN0YXRlIGNoYW5nZS4gQmUgcGFyYW5vaWQgYWJvdXQgZW5zdXJpbmcgZXZlbnRzCi0JICogYXJlIG5vdCBtaXNzZWQgaWYgd2Ugc29tZWhvdyBnZXQgdHdvIGludGVycnVwdHMgaW4gYSBqaWZmeS4KLQkgKi8KLQlzcGluX2xvY2soJmZnZGV2LT5jc3RhdGVfbG9jayk7Ci0Jd2hlbiA9IGppZmZpZXNfNjQ7Ci0JaWYgKHdoZW4gPD0gZmdkZXYtPmNzdGF0ZV90c3RhbXApCi0JCXdoZW4gPSBmZ2Rldi0+Y3N0YXRlX3RzdGFtcCArIDE7Ci0JZmdkZXYtPmNzdGF0ZV90c3RhbXAgPSB3aGVuOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZmdkZXYtPmJ1ZmZlcl93YWl0cXVldWUpOwotCXNwaW5fdW5sb2NrKCZmZ2Rldi0+Y3N0YXRlX2xvY2spOwotfQotCi0vKiBDYWxsZWQgd2l0aCBidWZmZXJfbG9jayBoZWxkLiAqLwotc3RhdGljIHZvaWQgdHJhbnNmZXJfY29tcGxldGUoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYpCi17Ci0Jc3RydWN0IGIzZGZnX2J1ZmZlciAqYnVmOwotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZmZ2Rldi0+cGRldi0+ZGV2OwotCi0JcGNpX3VubWFwX3NpbmdsZShmZ2Rldi0+cGRldiwgZmdkZXYtPmN1cl9kbWFfZnJhbWVfYWRkciwKLQkJCSBmZ2Rldi0+ZnJhbWVfc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKLQlmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9hZGRyID0gMDsKLQotCWJ1ZiA9IGxpc3RfZW50cnkoZmdkZXYtPmJ1ZmZlcl9xdWV1ZS5uZXh0LCBzdHJ1Y3QgYjNkZmdfYnVmZmVyLCBsaXN0KTsKLQotCWRldl9kYmcoZGV2LCAiaGFuZGxlIGZyYW1lIGNvbXBsZXRpb25cbiIpOwotCWlmIChmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9pZHggPT0gQjNERkdfRlJBTUVTX1BFUl9CVUZGRVIgLSAxKSB7Ci0KLQkJLyogbGFzdCBmcmFtZSBvZiB0aGF0IHRyaXBsZXQgY29tcGxldGVkICovCi0JCWRldl9kYmcoZGV2LCAidHJpcGxldCBjb21wbGV0ZWRcbiIpOwotCQlidWYtPnN0YXRlID0gQjNERkdfQlVGRkVSX1BPUFVMQVRFRDsKLQkJbGlzdF9kZWxfaW5pdCgmYnVmLT5saXN0KTsKLQkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZmZ2Rldi0+YnVmZmVyX3dhaXRxdWV1ZSk7Ci0JfQotfQotCi0vKgotICogQ2FsbGVkIHdpdGggYnVmZmVyX2xvY2sgaGVsZC4KLSAqCi0gKiBOb3RlIHRoYXQgaWR4IGlzIHRoZSAoMS1iYXNlZCkgKm5leHQqIGZyYW1lIHRvIGJlIHRyYW5zZmVycmVkLCB3aGlsZQotICogY3VyX2RtYV9mcmFtZV9pZHggaXMgdGhlICgwLWJhc2VkKSAqbGFzdCogZnJhbWUgdG8gaGF2ZSBiZWVuIHRyYW5zZmVycmVkIChvcgotICogLTEgaWYgbm9uZSkuIFRodXMgdGhlcmUgc2hvdWxkIGJlIGEgZGlmZmVyZW5jZSBvZiAyIGJldHdlZW4gdGhlbS4KLSAqLwotc3RhdGljIGJvb2wgc2V0dXBfbmV4dF9mcmFtZV90cmFuc2ZlcihzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiwgaW50IGlkeCkKLXsKLQlzdHJ1Y3QgYjNkZmdfYnVmZmVyICpidWY7Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJmZnZGV2LT5wZGV2LT5kZXY7Ci0JYm9vbCBuZWVkX2FjayA9IDE7Ci0KLQlkZXZfZGJnKGRldiwgInByb2dyYW0gRE1BIHRyYW5zZmVyIGZvciBuZXh0IGZyYW1lOiAlZFxuIiwgaWR4KTsKLQotCWJ1ZiA9IGxpc3RfZW50cnkoZmdkZXYtPmJ1ZmZlcl9xdWV1ZS5uZXh0LCBzdHJ1Y3QgYjNkZmdfYnVmZmVyLCBsaXN0KTsKLQlpZiAoaWR4ID09IGZnZGV2LT5jdXJfZG1hX2ZyYW1lX2lkeCArIDIpIHsKLQkJaWYgKHNldHVwX2ZyYW1lX3RyYW5zZmVyKGZnZGV2LCBidWYsIGlkeCAtIDEpKQotCQkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gbWFwIERNQSBidWZmZXJcbiIpOwotCQluZWVkX2FjayA9IDA7Ci0JfSBlbHNlIHsKLQkJZGV2X2VycihkZXYsICJmcmFtZSBtaXNtYXRjaCwgZ290ICVkLCBleHBlY3RlZCAlZFxuIiwKLQkJCWlkeCwgZmdkZXYtPmN1cl9kbWFfZnJhbWVfaWR4ICsgMik7Ci0KLQkJLyogRklYTUU6IGhhbmRsZSBkcm9wcGVkIHRyaXBsZXRzIGhlcmUgKi8KLQl9Ci0KLQlyZXR1cm4gbmVlZF9hY2s7Ci19Ci0KLXN0YXRpYyBpcnFyZXR1cm5fdCBiM2RmZ19pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiA9IGRldl9pZDsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmZmdkZXYtPnBkZXYtPmRldjsKLQl1MzIgc3RzOwotCXU4IGRyb3BwZWQ7Ci0JYm9vbCBuZWVkX2FjayA9IDE7Ci0JaXJxcmV0dXJuX3QgcmVzID0gSVJRX0hBTkRMRUQ7Ci0KLQlzdHMgPSBiM2RmZ19yZWFkMzIoZmdkZXYsIEIzRF9SRUdfRE1BX1NUUyk7Ci0JaWYgKHVubGlrZWx5KHN0cyA9PSAwKSkgewotCQlkZXZfd2FybihkZXYsICJpZ25vcmUgaW50ZXJydXB0LCBETUEgc3RhdHVzIGlzIDBcbiIpOwotCQlyZXMgPSBJUlFfTk9ORTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JaWYgKHVubGlrZWx5KCFmZ2Rldi0+dHJhbnNtaXNzaW9uX2VuYWJsZWQpKSB7Ci0JCWRldl93YXJuKGRldiwgImlnbm9yZSBpbnRlcnJ1cHQsIFRYIGRpc2FibGVkXG4iKTsKLQkJcmVzID0gSVJRX0hBTkRMRUQ7Ci0JCWdvdG8gb3V0OwotCX0KLQotCS8qIEhhbmRsZSBkcm9wcGVkIGZyYW1lcywgYXMgcmVwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlLiAqLwotCWRyb3BwZWQgPSAoc3RzID4+IDgpICYgMHhmZjsKLQlkZXZfZGJnKGRldiwgImludHI6IERNQV9TVFM9JTA4eCAoZHJvcD0lZCBjb21wPSVkIG5leHQ9JWQpXG4iLAotCQlzdHMsIGRyb3BwZWQsICEhKHN0cyAmIDB4NCksIHN0cyAmIDB4Myk7Ci0JaWYgKHVubGlrZWx5KGRyb3BwZWQgPiAwKSkgewotCQlzcGluX2xvY2soJmZnZGV2LT50cmlwbGV0c19kcm9wcGVkX2xvY2spOwotCQlmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZCArPSBkcm9wcGVkOwotCQlzcGluX3VubG9jaygmZmdkZXYtPnRyaXBsZXRzX2Ryb3BwZWRfbG9jayk7Ci0JfQotCi0JLyogSGFuZGxlIGEgY2FibGUgc3RhdGUgY2hhbmdlIChpLmUuIHRoZSB3YW5kIGJlaW5nIHVucGx1Z2dlZCkuICovCi0JaWYgKHN0cyAmIDB4MDgpIHsKLQkJaGFuZGxlX2NzdGF0ZV9jaGFuZ2UoZmdkZXYpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzcGluX2xvY2soJmZnZGV2LT5idWZmZXJfbG9jayk7Ci0JaWYgKHVubGlrZWx5KGxpc3RfZW1wdHkoJmZnZGV2LT5idWZmZXJfcXVldWUpKSkgewotCi0JCS8qIEZJWE1FIG5lZWQgbW9yZSBzYW5pdHkgY2hlY2tpbmcgaGVyZSAqLwotCQlkZXZfaW5mbyhkZXYsICJidWZmZXIgbm90IHJlYWR5IGZvciBuZXh0IHRyYW5zZmVyXG4iKTsKLQkJZmdkZXYtPnRyaXBsZXRfcmVhZHkgPSAxOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JLyogSGFzIGEgZnJhbWUgdHJhbnNmZXIgYmVlbiBjb21wbGV0ZWQ/ICovCi0JaWYgKHN0cyAmIDB4NCkgewotCQl1MzIgZG1hX3N0YXR1cyA9IGIzZGZnX3JlYWQzMihmZ2RldiwgQjNEX1JFR19FQzIyMF9ETUFfU1RTKTsKLQotCQkvKiBDaGVjayBmb3IgRE1BIGVycm9ycyByZXBvcnRlZCBieSB0aGUgaGFyZHdhcmUuICovCi0JCWlmICh1bmxpa2VseShkbWFfc3RhdHVzICYgMHgxKSkgewotCQkJZGV2X2VycihkZXYsICJFQzIyMCBlcnJvcjogJTA4eFxuIiwgZG1hX3N0YXR1cyk7Ci0KLQkJCS8qIEZJWE1FIGZsZXNoIG91dCBlcnJvciBoYW5kbGluZyAqLwotCQkJZ290byBvdXRfdW5sb2NrOwotCQl9Ci0KLQkJLyogU2FuaXR5IGNoZWNrLCB3ZSBzaG91bGQgaGF2ZSBhIGZyYW1lIGluZGV4IGF0IHRoaXMgcG9pbnQuICovCi0JCWlmICh1bmxpa2VseShmZ2Rldi0+Y3VyX2RtYV9mcmFtZV9pZHggPT0gLTEpKSB7Ci0JCQlkZXZfZXJyKGRldiwgImNvbXBsZXRlZCBidXQgbm8gbGFzdCBpZHg/XG4iKTsKLQotCQkJLyogRklYTUUgZmxlc2ggb3V0IGVycm9yIGhhbmRsaW5nICovCi0JCQlnb3RvIG91dF91bmxvY2s7Ci0JCX0KLQotCQl0cmFuc2Zlcl9jb21wbGV0ZShmZ2Rldik7Ci0JfQotCi0JLyogSXMgdGhlcmUgYW5vdGhlciBmcmFtZSB0cmFuc2ZlciBwZW5kaW5nPyAqLwotCWlmIChzdHMgJiAweDMpCi0JCW5lZWRfYWNrID0gc2V0dXBfbmV4dF9mcmFtZV90cmFuc2ZlcihmZ2Rldiwgc3RzICYgMHgzKTsKLQllbHNlCi0JCWZnZGV2LT5jdXJfZG1hX2ZyYW1lX2lkeCA9IC0xOwotCi1vdXRfdW5sb2NrOgotCXNwaW5fdW5sb2NrKCZmZ2Rldi0+YnVmZmVyX2xvY2spOwotb3V0OgotCWlmIChuZWVkX2FjaykgewotCQlkZXZfZGJnKGRldiwgImFja25vd2xlZGdpbmcgaW50ZXJydXB0XG4iKTsKLQkJYjNkZmdfd3JpdGUzMihmZ2RldiwgQjNEX1JFR19FQzIyMF9ETUFfU1RTLCAweDBiKTsKLQl9Ci0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludCBiM2RmZ19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQotewotCXN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2ID0KLQkJY29udGFpbmVyX29mKGlub2RlLT5pX2NkZXYsIHN0cnVjdCBiM2RmZ19kZXYsIGNoYXJkZXYpOwotCi0JZGV2X2RiZygmZmdkZXYtPnBkZXYtPmRldiwgIm9wZW5cbiIpOwotCWZpbHAtPnByaXZhdGVfZGF0YSA9IGZnZGV2OwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGIzZGZnX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IGIzZGZnX2RldiAqZmdkZXYgPSBmaWxwLT5wcml2YXRlX2RhdGE7Ci0JZGV2X2RiZygmZmdkZXYtPnBkZXYtPmRldiwgInJlbGVhc2VcbiIpOwotCWRpc2FibGVfdHJhbnNtaXNzaW9uKGZnZGV2KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGxvbmcgYjNkZmdfaW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCXN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIEIzREZHX0lPQ0dGUk1TWjoKLQkJcmV0dXJuIF9fcHV0X3VzZXIoZmdkZXYtPmZyYW1lX3NpemUsIChpbnQgX191c2VyICopIGFyZyk7Ci0JY2FzZSBCM0RGR19JT0NHV0FORFNUQVQ6Ci0JCXJldHVybiBnZXRfd2FuZF9zdGF0dXMoZmdkZXYsIChpbnQgX191c2VyICopIGFyZyk7Ci0JY2FzZSBCM0RGR19JT0NUVFJBTlM6Ci0JCXJldHVybiBzZXRfdHJhbnNtaXNzaW9uKGZnZGV2LCAoaW50KSBhcmcpOwotCWNhc2UgQjNERkdfSU9DVFFVRVVFQlVGOgotCQlyZXR1cm4gcXVldWVfYnVmZmVyKGZnZGV2LCAoaW50KSBhcmcpOwotCWNhc2UgQjNERkdfSU9DVFBPTExCVUY6Ci0JCXJldHVybiBwb2xsX2J1ZmZlcihmZ2RldiwgKHZvaWQgX191c2VyICopIGFyZyk7Ci0JY2FzZSBCM0RGR19JT0NUV0FJVEJVRjoKLQkJcmV0dXJuIHdhaXRfYnVmZmVyKGZnZGV2LCAodm9pZCBfX3VzZXIgKikgYXJnKTsKLQlkZWZhdWx0OgotCQlkZXZfZGJnKCZmZ2Rldi0+cGRldi0+ZGV2LCAidW5yZWNvZ25pc2VkIGlvY3RsICV4XG4iLCBjbWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYjNkZmdfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqcG9sbF90YWJsZSkKLXsKLQlzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCB3aGVuOwotCWludCBpOwotCWludCByID0gMDsKLQotCXdoZW4gPSBnZXRfY3N0YXRlX2NoYW5nZShmZ2Rldik7Ci0JcG9sbF93YWl0KGZpbHAsICZmZ2Rldi0+YnVmZmVyX3dhaXRxdWV1ZSwgcG9sbF90YWJsZSk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmdkZXYtPmJ1ZmZlcl9sb2NrLCBmbGFncyk7Ci0JZm9yIChpID0gMDsgaSA8IGIzZGZnX25idWY7IGkrKykgewotCQlpZiAoZmdkZXYtPmJ1ZmZlcnNbaV0uc3RhdGUgPT0gQjNERkdfQlVGRkVSX1BPUFVMQVRFRCkgewotCQkJciA9IFBPTExJTiB8IFBPTExSRE5PUk07Ci0JCQlicmVhazsKLQkJfQotCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmZ2Rldi0+YnVmZmVyX2xvY2ssIGZsYWdzKTsKLQotCS8qIFRPRE86IENvbmZpcm0gdGhpcyBpcyBob3cgd2Ugd2FudCB0byBjb21tdW5pY2F0ZSB0aGUgY2hhbmdlLiAqLwotCWlmICghZmdkZXYtPnRyYW5zbWlzc2lvbl9lbmFibGVkIHx8IHdoZW4gIT0gZ2V0X2NzdGF0ZV9jaGFuZ2UoZmdkZXYpKQotCQlyID0gUE9MTEVSUjsKLQotCXJldHVybiByOwotfQotCi1zdGF0aWMgaW50IGIzZGZnX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCXN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOwotCXVuc2lnbmVkIGxvbmcgdnNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBidWZkYXRhbGVuID0gYjNkZmdfbmJ1ZiAqIGZnZGV2LT5mcmFtZV9zaXplICogMzsKLQl1bnNpZ25lZCBsb25nIHBzaXplID0gYnVmZGF0YWxlbiAtIG9mZnNldDsKLQlpbnQgciA9IDA7Ci0KLQlpZiAodnNpemUgPD0gcHNpemUpIHsKLQkJdm1hLT52bV9mbGFncyB8PSBWTV9JTyB8IFZNX1JFU0VSVkVEIHwgVk1fQ0FOX05PTkxJTkVBUiB8Ci0JCQkJIFZNX1BGTk1BUDsKLQkJdm1hLT52bV9vcHMgPSAmYjNkZmdfdm1fb3BzOwotCX0gZWxzZSB7Ci0JCXIgPSAtRUlOVkFMOwotCX0KLQotCXJldHVybiByOwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiM2RmZ19mb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5vcGVuID0gYjNkZmdfb3BlbiwKLQkucmVsZWFzZSA9IGIzZGZnX3JlbGVhc2UsCi0JLnVubG9ja2VkX2lvY3RsID0gYjNkZmdfaW9jdGwsCi0JLnBvbGwgPSBiM2RmZ19wb2xsLAotCS5tbWFwID0gYjNkZmdfbW1hcCwKLX07Ci0KLXN0YXRpYyB2b2lkIGZyZWVfYWxsX2ZyYW1lX2J1ZmZlcnMoc3RydWN0IGIzZGZnX2RldiAqZmdkZXYpCi17Ci0JaW50IGksIGo7Ci0JZm9yIChpID0gMDsgaSA8IGIzZGZnX25idWY7IGkrKykKLQkJZm9yIChqID0gMDsgaiA8IEIzREZHX0ZSQU1FU19QRVJfQlVGRkVSOyBqKyspCi0JCQlrZnJlZShmZ2Rldi0+YnVmZmVyc1tpXS5mcmFtZVtqXSk7Ci0Ja2ZyZWUoZmdkZXYtPmJ1ZmZlcnMpOwotfQotCi0vKiBpbml0aWFsaXplIGRldmljZSBhbmQgYW55IGRhdGEgc3RydWN0dXJlcy4gY2FsbGVkIGJlZm9yZSBhbnkgaW50ZXJydXB0cwotICogYXJlIGVuYWJsZWQuICovCi1zdGF0aWMgaW50IGIzZGZnX2luaXRfZGV2KHN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2KQotewotCWludCBpLCBqOwotCXUzMiBmcm1fc2l6ZSA9IGIzZGZnX3JlYWQzMihmZ2RldiwgQjNEX1JFR19GUk1fU0laRSk7Ci0KLQkvKiBEaXNhYmxlIGludGVycnVwdHMuIEluIGFibm9ybWFsIGNpcmN1bXN0YW5jZXMgKGUuZy4gYWZ0ZXIgYSBjcmFzaCkKLQkgKiB0aGUgYm9hcmQgbWF5IHN0aWxsIGJlIHRyYW5zbWl0dGluZyBmcm9tIHRoZSBwcmV2aW91cyBzZXNzaW9uLiBJZiB3ZQotCSAqIGVuc3VyZSB0aGF0IGludGVycnVwdHMgYXJlIGRpc2FibGVkIGJlZm9yZSB3ZSBsYXRlciBlbmFibGUgdGhlbSwgd2UKLQkgKiBhcmUgc3VyZSB0byBjYXB0dXJlIGEgdHJpcGxldCBmcm9tIHRoZSBzdGFydCwgcmF0aGVyIHRoYW4gc3RhcnRpbmcKLQkgKiBmcm9tIGZyYW1lIDIgb3IgMy4gRGlzYWJsaW5nIGludGVycnVwdHMgY2F1c2VzIHRoZSBGRyB0byB0aHJvdyBhd2F5Ci0JICogYWxsIGJ1ZmZlcmVkIGRhdGEgYW5kIHN0b3AgYnVmZmVyaW5nIG1vcmUgdW50aWwgaW50ZXJydXB0cyBhcmUKLQkgKiBlbmFibGVkIGFnYWluLgotCSAqLwotCWIzZGZnX3dyaXRlMzIoZmdkZXYsIEIzRF9SRUdfSFdfQ1RSTCwgMCk7Ci0KLQlmZ2Rldi0+ZnJhbWVfc2l6ZSA9IGZybV9zaXplICogNDA5NjsKLQlmZ2Rldi0+YnVmZmVycyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBiM2RmZ19idWZmZXIpICogYjNkZmdfbmJ1ZiwKLQkJCQkgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFmZ2Rldi0+YnVmZmVycykKLQkJZ290byBlcnJfbm9fYnVmOwotCWZvciAoaSA9IDA7IGkgPCBiM2RmZ19uYnVmOyBpKyspIHsKLQkJc3RydWN0IGIzZGZnX2J1ZmZlciAqYnVmID0gJmZnZGV2LT5idWZmZXJzW2ldOwotCQlmb3IgKGogPSAwOyBqIDwgQjNERkdfRlJBTUVTX1BFUl9CVUZGRVI7IGorKykgewotCQkJYnVmLT5mcmFtZVtqXSA9IGttYWxsb2MoZmdkZXYtPmZyYW1lX3NpemUsIEdGUF9LRVJORUwpOwotCQkJaWYgKCFidWYtPmZyYW1lW2pdKQotCQkJCWdvdG8gZXJyX25vX21lbTsKLQkJfQotCQlJTklUX0xJU1RfSEVBRCgmYnVmLT5saXN0KTsKLQl9Ci0KLQlJTklUX0xJU1RfSEVBRCgmZmdkZXYtPmJ1ZmZlcl9xdWV1ZSk7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmZmdkZXYtPmJ1ZmZlcl93YWl0cXVldWUpOwotCXNwaW5fbG9ja19pbml0KCZmZ2Rldi0+YnVmZmVyX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZmZ2Rldi0+Y3N0YXRlX2xvY2spOwotCXNwaW5fbG9ja19pbml0KCZmZ2Rldi0+dHJpcGxldHNfZHJvcHBlZF9sb2NrKTsKLQlyZXR1cm4gMDsKLQotZXJyX25vX21lbToKLQlmcmVlX2FsbF9mcmFtZV9idWZmZXJzKGZnZGV2KTsKLWVycl9ub19idWY6Ci0JcmV0dXJuIC1FTk9NRU07Ci19Ci0KLS8qIGZpbmQgbmV4dCBmcmVlIG1pbm9yIG51bWJlciwgcmV0dXJucyAtMSBpZiBub25lIGFyZSBhdmFpbGFiaWxlICovCi1zdGF0aWMgaW50IGdldF9mcmVlX21pbm9yKHZvaWQpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IEIzREZHX01BWF9ERVZTOyBpKyspIHsKLQkJaWYgKGIzZGZnX2RldmljZXNbaV0gPT0gMCkKLQkJCXJldHVybiBpOwotCX0KLQlyZXR1cm4gLTE7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IGIzZGZnX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAotCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgYjNkZmdfZGV2ICpmZ2RldiA9IGt6YWxsb2Moc2l6ZW9mKCpmZ2RldiksIEdGUF9LRVJORUwpOwotCWludCByID0gMDsKLQlpbnQgbWlub3IgPSBnZXRfZnJlZV9taW5vcigpOwotCWRldl90IGRldm5vID0gTUtERVYoTUFKT1IoYjNkZmdfZGV2dCksIG1pbm9yKTsKLQl1bnNpZ25lZCBsb25nIHJlc19sZW47Ci0JcmVzb3VyY2Vfc2l6ZV90IHJlc19iYXNlOwotCi0JaWYgKGZnZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JaWYgKG1pbm9yIDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJ0b28gbWFueSBkZXZpY2VzIGZvdW5kIVxuIik7Ci0JCXIgPSAtRUlPOwotCQlnb3RvIGVycl9mcmVlOwotCX0KLQotCWIzZGZnX2RldmljZXNbbWlub3JdID0gMTsKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAicHJvYmUgZGV2aWNlIHdpdGggSVJRICVkXG4iLCBwZGV2LT5pcnEpOwotCi0JY2Rldl9pbml0KCZmZ2Rldi0+Y2hhcmRldiwgJmIzZGZnX2ZvcHMpOwotCWZnZGV2LT5jaGFyZGV2Lm93bmVyID0gVEhJU19NT0RVTEU7Ci0KLQlyID0gY2Rldl9hZGQoJmZnZGV2LT5jaGFyZGV2LCBkZXZubywgMSk7Ci0JaWYgKHIpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IGFkZCBjaGFyIGRldmljZVxuIik7Ci0JCWdvdG8gZXJyX3JlbGVhc2VfbWlub3I7Ci0JfQotCi0JZmdkZXYtPmRldiA9IGRldmljZV9jcmVhdGUoCi0JCWIzZGZnX2NsYXNzLAotCQkmcGRldi0+ZGV2LAotCQlkZXZubywKLQkJZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpLAotCQlEUklWRVJfTkFNRSAiJWQiLCBtaW5vcik7Ci0KLQlpZiAoSVNfRVJSKGZnZGV2LT5kZXYpKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBjcmVhdGUgZGV2aWNlXG4iKTsKLQkJciA9IFBUUl9FUlIoZmdkZXYtPmRldik7Ci0JCWdvdG8gZXJyX2RlbF9jZGV2OwotCX0KLQotCXIgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKLQlpZiAocikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgZW5hYmxlIFBDSSBkZXZpY2VcbiIpOwotCQlnb3RvIGVycl9kZXZfdW5yZWc7Ci0JfQotCi0JcmVzX2xlbiA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgQjNERkdfQkFSX1JFR1MpOwotCWlmIChyZXNfbGVuICE9IEIzREZHX1JFR1NfTEVOR1RIKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgcmVnaXN0ZXIgcmVzb3VyY2Ugc2l6ZVxuIik7Ci0JCXIgPSAtRUlPOwotCQlnb3RvIGVycl9kaXNhYmxlOwotCX0KLQotCWlmIChwY2lfcmVzb3VyY2VfZmxhZ3MocGRldiwgQjNERkdfQkFSX1JFR1MpCi0JCQkJIT0gKElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9TSVpFQUxJR04pKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImludmFsaWQgcmVzb3VyY2UgZmxhZ3NcbiIpOwotCQlyID0gLUVJTzsKLQkJZ290byBlcnJfZGlzYWJsZTsKLQl9Ci0JciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgRFJJVkVSX05BTUUpOwotCWlmIChyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCBvYnRhaW4gUENJIHJlc291cmNlc1xuIik7Ci0JCWdvdG8gZXJyX2Rpc2FibGU7Ci0JfQotCi0JcGNpX3NldF9tYXN0ZXIocGRldik7Ci0KLQlyID0gcGNpX3NldF9kbWFfbWFzayhwZGV2LCBETUFfQklUX01BU0soMzIpKTsKLQlpZiAocikgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb25cbiIpOwotCQlnb3RvIGVycl9mcmVlX3JlczsKLQl9Ci0KLQlyZXNfYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCBCM0RGR19CQVJfUkVHUyk7Ci0JZmdkZXYtPnJlZ3MgPSBpb3JlbWFwX25vY2FjaGUocmVzX2Jhc2UsIHJlc19sZW4pOwotCWlmICghZmdkZXYtPnJlZ3MpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAicmVncyBpb3JlbWFwIGZhaWxlZFxuIik7Ci0JCXIgPSAtRUlPOwotCQlnb3RvIGVycl9mcmVlX3JlczsKLQl9Ci0KLQlmZ2Rldi0+cGRldiA9IHBkZXY7Ci0JcGNpX3NldF9kcnZkYXRhKHBkZXYsIGZnZGV2KTsKLQlyID0gYjNkZmdfaW5pdF9kZXYoZmdkZXYpOwotCWlmIChyIDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gaW5pdGFsaXplIGRldmljZVxuIik7Ci0JCWdvdG8gZXJyX3VubWFwOwotCX0KLQotCXIgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIGIzZGZnX2ludHIsIElSUUZfU0hBUkVELCBEUklWRVJfTkFNRSwgZmdkZXYpOwotCWlmIChyKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImNvdWxkbid0IHJlcXVlc3QgaXJxICVkXG4iLCBwZGV2LT5pcnEpOwotCQlnb3RvIGVycl9mcmVlX2J1ZnM7Ci0JfQotCi0JcmV0dXJuIDA7Ci0KLWVycl9mcmVlX2J1ZnM6Ci0JZnJlZV9hbGxfZnJhbWVfYnVmZmVycyhmZ2Rldik7Ci1lcnJfdW5tYXA6Ci0JaW91bm1hcChmZ2Rldi0+cmVncyk7Ci1lcnJfZnJlZV9yZXM6Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLWVycl9kaXNhYmxlOgotCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKLWVycl9kZXZfdW5yZWc6Ci0JZGV2aWNlX2Rlc3Ryb3koYjNkZmdfY2xhc3MsIGRldm5vKTsKLWVycl9kZWxfY2RldjoKLQljZGV2X2RlbCgmZmdkZXYtPmNoYXJkZXYpOwotZXJyX3JlbGVhc2VfbWlub3I6Ci0JYjNkZmdfZGV2aWNlc1ttaW5vcl0gPSAwOwotZXJyX2ZyZWU6Ci0Ja2ZyZWUoZmdkZXYpOwotCXJldHVybiByOwotfQotCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgYjNkZmdfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBiM2RmZ19kZXYgKmZnZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOwotCXVuc2lnbmVkIGludCBtaW5vciA9IE1JTk9SKGZnZGV2LT5jaGFyZGV2LmRldik7Ci0KLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJyZW1vdmVcbiIpOwotCi0JZnJlZV9pcnEocGRldi0+aXJxLCBmZ2Rldik7Ci0JaW91bm1hcChmZ2Rldi0+cmVncyk7Ci0JcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKLQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JZGV2aWNlX2Rlc3Ryb3koYjNkZmdfY2xhc3MsIE1LREVWKE1BSk9SKGIzZGZnX2RldnQpLCBtaW5vcikpOwotCWNkZXZfZGVsKCZmZ2Rldi0+Y2hhcmRldik7Ci0JZnJlZV9hbGxfZnJhbWVfYnVmZmVycyhmZ2Rldik7Ci0Ja2ZyZWUoZmdkZXYpOwotCWIzZGZnX2RldmljZXNbbWlub3JdID0gMDsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGIzZGZnX2RyaXZlciA9IHsKLQkubmFtZSA9IERSSVZFUl9OQU1FLAotCS5pZF90YWJsZSA9IGIzZGZnX2lkcywKLQkucHJvYmUgPSBiM2RmZ19wcm9iZSwKLQkucmVtb3ZlID0gX19kZXZleGl0X3AoYjNkZmdfcmVtb3ZlKSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGIzZGZnX21vZHVsZV9pbml0KHZvaWQpCi17Ci0JaW50IHI7Ci0KLQlpZiAoYjNkZmdfbmJ1ZiA8IDIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIERSSVZFUl9OQU1FCi0JCQkgICAiOiBidWZmZXJfY291bnQgaXMgb3V0IG9mIHJhbmdlIChtdXN0IGJlID49IDIpIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogbG9hZGVkXG4iKTsKLQotCWIzZGZnX2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCBEUklWRVJfTkFNRSk7Ci0JaWYgKElTX0VSUihiM2RmZ19jbGFzcykpCi0JCXJldHVybiBQVFJfRVJSKGIzZGZnX2NsYXNzKTsKLQotCXIgPSBhbGxvY19jaHJkZXZfcmVnaW9uKCZiM2RmZ19kZXZ0LCAwLCBCM0RGR19NQVhfREVWUywgRFJJVkVSX05BTUUpOwotCWlmIChyKQotCQlnb3RvIGVycjE7Ci0KLQlyID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmYjNkZmdfZHJpdmVyKTsKLQlpZiAocikKLQkJZ290byBlcnIyOwotCi0JcmV0dXJuIHI7Ci0KLWVycjI6Ci0JdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGIzZGZnX2RldnQsIEIzREZHX01BWF9ERVZTKTsKLWVycjE6Ci0JY2xhc3NfZGVzdHJveShiM2RmZ19jbGFzcyk7Ci0JcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBiM2RmZ19tb2R1bGVfZXhpdCh2b2lkKQotewotCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUgIjogdW5sb2FkZWRcbiIpOwotCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmYjNkZmdfZHJpdmVyKTsKLQl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oYjNkZmdfZGV2dCwgQjNERkdfTUFYX0RFVlMpOwotCWNsYXNzX2Rlc3Ryb3koYjNkZmdfY2xhc3MpOwotfQotCi1tb2R1bGVfaW5pdChiM2RmZ19tb2R1bGVfaW5pdCk7Ci1tb2R1bGVfZXhpdChiM2RmZ19tb2R1bGVfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvS2NvbmZpZwppbmRleCAxZDc0ZGFiLi4xZTdlMGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L0tjb25maWcKQEAgLTQsNyArNCw3IEBACiAKIGNvbmZpZyBCQVRNQU5fQURWCiAJdHJpc3RhdGUgIkIuQS5ULk0uQS5OLiBBZHZhbmNlZCBNZXNoaW5nIFByb3RvY29sIgotCWRlcGVuZHMgb24gUFJPQ19GUyAmJiBQQUNLRVQKKwlkZXBlbmRzIG9uIFBST0NfRlMgJiYgTkVUCiAgICAgICAgIGRlZmF1bHQgbgogCS0tLWhlbHAtLS0KIApAQCAtMTQsMTAgKzE0LDEwIEBACiAgICAgICAgIGh0dHA6Ly93d3cub3Blbi1tZXNoLm9yZy8gZm9yIG1vcmUgaW5mb3JtYXRpb24gYW5kIHVzZXIgc3BhY2UKICAgICAgICAgdG9vbHMuCiAKLWNvbmZpZyBCQVRNQU5fREVCVUcKK2NvbmZpZyBCQVRNQU5fQURWX0RFQlVHCiAJYm9vbCAiQi5BLlQuTS5BLk4uIGRlYnVnZ2luZyIKIAlkZXBlbmRzIG9uIEJBVE1BTl9BRFYgIT0gbgotCWhlbHAKKwktLS1oZWxwLS0tCiAKIAkgIFRoaXMgaXMgYW4gb3B0aW9uIGZvciB1c2UgYnkgZGV2ZWxvcGVyczsgbW9zdCBwZW9wbGUgc2hvdWxkCiAJICBzYXkgTiBoZXJlLiBUaGlzIGVuYWJsZXMgY29tcGlsYXRpb24gb2Ygc3VwcG9ydCBmb3IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvTWFrZWZpbGUKaW5kZXggMDJkYTg3MS4uNDJiNGU2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvTWFrZWZpbGUKQEAgLTE5LDQgKzE5LDQgQEAKICMKIAogb2JqLW0gKz0gYmF0bWFuLWFkdi5vCi1iYXRtYW4tYWR2LW9ianMgOj0gbWFpbi5vIHByb2MubyBzZW5kLm8gcm91dGluZy5vIHNvZnQtaW50ZXJmYWNlLm8gZGV2aWNlLm8gdHJhbnNsYXRpb24tdGFibGUubyBiaXRhcnJheS5vIGhhc2gubyByaW5nX2J1ZmZlci5vIHZpcy5vIGhhcmQtaW50ZXJmYWNlLm8gYWdncmVnYXRpb24ubyBsb2cubworYmF0bWFuLWFkdi1vYmpzIDo9IG1haW4ubyBwcm9jLm8gc2VuZC5vIHJvdXRpbmcubyBzb2Z0LWludGVyZmFjZS5vIGRldmljZS5vIHRyYW5zbGF0aW9uLXRhYmxlLm8gYml0YXJyYXkubyBoYXNoLm8gcmluZ19idWZmZXIubyB2aXMubyBoYXJkLWludGVyZmFjZS5vIGFnZ3JlZ2F0aW9uLm8gb3JpZ2luYXRvci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9SRUFETUUgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9SRUFETUUKaW5kZXggM2FhZjM5My4uN2Q2NjZhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvUkVBRE1FCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L1JFQURNRQpAQCAtMSw0ICsxLDQgQEAKLVtzdGF0ZTogMDctMTEtMjAwOV0KK1tzdGF0ZTogMDYtMDEtMjAxMF0KIAogQkFUTUFOLUFEVgogLS0tLS0tLS0tLQpAQCAtMTUsMTkgKzE1LDYgQEAKIFRoaXMgaXMgYmF0bWFuLWFkdmFuY2VkIGltcGxlbWVudGVkIGFzIExpbnV4IGtlcm5lbCBkcml2ZXIuIEl0IGRvZXMgbm90IGRlcGVuZAogb24gYW55IG5ldHdvcmsgKG90aGVyKSBkcml2ZXIsIGFuZCBjYW4gYmUgdXNlZCBvbiB3aWZpIGFzIHdlbGwgYXMgZXRoZXJuZXQsCiB2cG4sIGV0YyAuLi4gKGFueXRoaW5nIHdpdGggZXRoZXJuZXQtc3R5bGUgbGF5ZXIgMikuCi1JdCBjb21waWxlcyBhZ2FpbnN0IGFuZCBzaG91bGQgd29yayB3aXRoIExpbnV4IDIuNi4yMCAtIDIuNi4zMS4gU3VwcG9ydGluZyBvbGRlcgotdmVyc2lvbnMgaXMgbm90IHBsYW5uZWQsIGJ1dCBpdCdzIHByb2JhYmx5IGVhc3kgdG8gYmFja3BvcnQgaXQuIElmIHlvdSB3b3JrIG9uIGEKLWJhY2twb3J0LCBmZWVsIGZyZWUgdG8gY29udGFjdCB1cy4gIDotKQotCi1DT01QSUxFCi0tLS0tLS0tCi1UbyBjb21waWxlIGFnYWluc3QgeW91ciBjdXJyZW50bHkgaW5zdGFsbGVkIGtlcm5lbCwganVzdCB0eXBlOgotCi0jIG1ha2UKLQotaWYgeW91IHdhbnQgdG8gY29tcGlsZSBhZ2FpbnN0IHNvbWUgb3RoZXIga2VybmVsLCB1c2U6Ci0KLSMgbWFrZSBLRVJORUxQQVRIPS9wYXRoL3RvL2tlcm5lbAogCiBVU0FHRQogLS0tLS0KQEAgLTczLDE2ICs2MCw5IEBACiAKICMgY2F0IC9wcm9jL25ldC9iYXRtYW4tYWR2L3ZpcwogCi1UaGlzIG91dHB1dCBmb3JtYXQgaXMgYSBncmFwaHZpeiBmb3JtYXR0ZWQgdGV4dCBmaWxlIHdoaWNoIGNhbiBiZQotcHJvY2Vzc2VkIHdpdGggZ3JhcGh2aXotdG9vbHMgbGlrZSBkb3QuCi1UaGUgbGFiZWxzIGFyZSBzaW1pbGFyL2NvbXBhdGlibGUgdG8gdGhlIEVUWCBtZXRyaWMsIDEuMCBtZWFucyBwZXJmZWN0Ci1jb25uZWN0aW9uICgxMDAlKSwgMi4wIG1lYW5zIDUwJSwgMy4wIG1lYW5zIDMzJSBhbmQgc28gb24uCi0KLUFsdGVybmF0aXZlbHksIGEgSlNPTiBvdXRwdXQgZm9ybWF0IGlzIGF2YWlsYWJsZS4gVGhlIGZvcm1hdCBjYW4gYmUgc2V0Ci11c2luZyBieSB3cml0aW5nIGVpdGhlciAiZG90X2RyYXciIG9yICJqc29uIiBpbnRvIHRoZSB2aXNfZm9ybWF0IGZpbGUuCi0iZG90X2RyYXciIGlzIHNlbGVjdGVkIGJ5IGRlZmF1bHQuCi0KLWVjaG8gImpzb24iID4gL3Byb2MvbmV0L2JhdG1hbi1hZHYvdmlzX2Zvcm1hdAorVGhlIG91dHB1dCBpcyBpbiBhIGdlbmVyaWMgcmF3IGZvcm1hdC4gVXNlIHRoZSBiYXRjdGwgdG9vbCAoU2VlIGJlbG93KQordG8gY29udmVydCB0aGlzIHRvIG90aGVyIGZvcm1hdHMgbW9yZSBzdWl0YWJsZSBmb3IgZ3JhcGhpbmcsIGVnCitncmFwaHZpeiBkb3QsIG9yIEpTT04gZGF0YS1pbnRlcmNoYW5nZSBmb3JtYXQuCiAKIEluIHZlcnkgbW9iaWxlIHNjZW5hcmlvcywgeW91IG1pZ2h0IHdhbnQgdG8gYWRqdXN0IHRoZSBvcmlnaW5hdG9yCiBpbnRlcnZhbCB0byBhIGxvd2VyIHZhbHVlLiBUaGlzIHdpbGwgbWFrZSB0aGUgbWVzaCBtb3JlIHJlc3BvbnNpdmUgdG8KQEAgLTk2LDE1ICs3Niw1OSBAQAogCiAjIGVjaG8gIiIgPiAvcHJvYy9uZXQvYmF0bWFuLWFkdi9pbnRlcmZhY2VzCiAKK0xPR0dJTkcvREVCVUdHSU5HCistLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgZXJyb3IgbWVzc2FnZXMsIHdhcm5pbmdzIGFuZCBpbmZvcm1hdGlvbiBtZXNzYWdlcyBhcmUgc2VudCB0byB0aGUKK2tlcm5lbCBsb2cuIERlcGVuZGluZyBvbiB5b3VyIG9wZXJhdGluZyBzeXN0ZW0gZGlzdHJpYnV0aW9uIHRoaXMgY2FuIGJlCityZWFkIGluIG9uZSBvZiBhIG51bWJlciBvZiB3YXlzLiBUcnkgdXNpbmcgdGhlIGNvbW1hbmRzOiBkbWVzZywKK2xvZ3JlYWQsIG9yIGxvb2tpbmcgaW4gdGhlIGZpbGVzIC92YXIvbG9nL2tlcm4ubG9nIG9yCisvdmFyL2xvZy9zeXNsb2cuIEFsbCBiYXRtYW4tYWR2IG1lc3NhZ2VzIGFyZSBwcmVmaXhlZCB3aXRoCisiYmF0bWFuLWFkdjoiIFNvIHRvIHNlZSBqdXN0IHRoZXNlIG1lc3NhZ2VzIHRyeQorCitkbWVzZyB8IGdyZXAgYmF0bWFuLWFkdgorCitXaGVuIGludmVzdGlnYXRpbmcgcHJvYmxlbXMgd2l0aCB5b3VyIG1lc2ggbmV0d29yayBpdCBpcyBzb21ldGltZXMKK25lY2Vzc2FyeSB0byBzZWUgbW9yZSBkZXRhaWwgZGVidWcgbWVzc2FnZXMuIFRoaXMgbXVzdCBiZSBlbmFibGVkIHdoZW4KK2NvbXBpbGluZyB0aGUgYmF0bWFuLWFkdiBtb2R1bGUuIFVzZSAibWFrZSBtZW51Y29uZmlnIiBhbmQgZW5hYmxlIHRoZQorb3B0aW9uICJCLkEuVC5NLkEuTi4gZGVidWdnaW5nIi4KKworVGhlIGFkZGl0aW9uYWwgZGVidWcgb3V0cHV0IGlzIGJ5IGRlZmF1bHQgZGlzYWJsZWQuIEl0IGNhbiBiZSBlbmFibGVkCitlaXRoZXIgYXQga2VybmVsIG1vZHVsZSBsb2FkIHRpbWUgb3IgZHVyaW5nIHJ1biB0aW1lLiBUbyBlbmFibGUgZGVidWcKK291dHB1dCBhdCBtb2R1bGUgbG9hZCB0aW1lLCBhZGQgdGhlIG1vZHVsZSBwYXJhbWV0ZXIgZGVidWc9PHZhbHVlPi4KKzx2YWx1ZT4gY2FuIHRha2Ugb25lIG9mIGZvdXIgdmFsdWVzLgorCiswIC0gQWxsIGRlYnVnIG91dHB1dCBkaXNhYmxlZAorMSAtIEVuYWJsZSBtZXNzYWdlcyByZWxhdGVkIHRvIHJvdXRpbmcgLyBmbG9vZGluZyAvIGJyb2FkY2FzdGluZworMiAtIEVuYWJsZSByb3V0ZSBvciBobmEgYWRkZWQgLyBjaGFuZ2VkIC8gZGVsZXRlZAorMyAtIEVuYWJsZSBhbGwgbWVzc2FnZXMKKworZS5nLgorCittb2Rwcm9iZSBiYXRtYW4tYWR2IGRlYnVnPTIKKword2lsbCBsb2FkIHRoZSBtb2R1bGUgYW5kIGVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBmb3Igd2hlbiByb3V0ZXMgb3IgSE5BcworY2hhbmdlLgorCitUaGUgZGVidWcgb3V0cHV0IGNhbiBhbHNvIGJlIGNoYW5nZWQgYXQgcnVudGltZSB1c2luZyB0aGUgZmlsZQorL3N5cy9tb2R1bGUvYmF0bWFuLWFkdi9wYXJhbWV0ZXJzL2RlYnVnLiBlLmcuCisKK2VjaG8gMiA+IC9zeXMvbW9kdWxlL2JhdG1hbi1hZHYvcGFyYW1ldGVycy9kZWJ1ZworCitlbmFibGVzIGRlYnVnIG1lc3NhZ2VzIGZvciB3aGVuIHJvdXRlcyBvciBITkFzCisKK1RoZSBkZWJ1ZyBvdXRwdXQgaXMgc2VudCB0byB0aGUga2VybmVsIGxvZ3MuIFNvIHRyeSBkbWVzZywgbG9ncmVhZCBldGMKK3RvIHNlZSB0aGUgZGVidWcgbWVzc2FnZXMuCisKIEJBVENUTAogLS0tLS0tCiAKLUIuQS5ULk0uQS5OLiAgYWR2YW5jZWQgIG9wZXJhdGVzIG9uIGxheWVyIDIgYW5kIHRodXMgYWxsIGhvc3RzIHBhcnRpY2ktCi1wYXRpbmcgaW4gdGhlIHZpcnR1YWwgc3dpdGNoIGFyZSBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IGZvciBhbGwgIHByb3RvLQotY29scyBhYm92ZSBsYXllciAyLiBUaGVyZWZvcmUgdGhlIGNvbW1vbiBkaWFnbm9zaXMgdG9vbHMgZG8gbm90IHdvcmsgYXMKLWV4cGVjdGVkLiBUbyBvdmVyY29tZSB0aGVzZSBwcm9ibGVtcyBiYXRjdGwgd2FzIGNyZWF0ZWQuIEF0IHRoZSAgbW9tZW50Ci10aGUgIGJhdGN0bCBjb250YWlucyBwaW5nLCB0cmFjZXJvdXRlLCB0Y3BkdW1wIGFuZCBpbnRlcmZhY2VzIHRvIHRoZQota2VybmVsIG1vZHVsZSBzZXR0aW5ncy4KK0IuQS5ULk0uQS5OLiAgYWR2YW5jZWQgb3BlcmF0ZXMgb24gbGF5ZXIgMiBhbmQgdGh1cyBhbGwgaG9zdHMKK3BhcnRpY2lwYXRpbmcgaW4gdGhlIHZpcnR1YWwgc3dpdGNoIGFyZSBjb21wbGV0ZWx5IHRyYW5zcGFyZW50IGZvciBhbGwKK3Byb3RvY29scyBhYm92ZSBsYXllciAyLiBUaGVyZWZvcmUgdGhlIGNvbW1vbiBkaWFnbm9zaXMgdG9vbHMgZG8gbm90Cit3b3JrIGFzIGV4cGVjdGVkLiBUbyBvdmVyY29tZSB0aGVzZSBwcm9ibGVtcyBiYXRjdGwgd2FzIGNyZWF0ZWQuIEF0Cit0aGUgbW9tZW50IHRoZSBiYXRjdGwgY29udGFpbnMgcGluZywgdHJhY2Vyb3V0ZSwgdGNwZHVtcCBhbmQKK2ludGVyZmFjZXMgdG8gdGhlIGtlcm5lbCBtb2R1bGUgc2V0dGluZ3MuCiAKIEZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIHRoZSBtYW5wYWdlIChtYW4gYmF0Y3RsKS4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L1RPRE8KaW5kZXggZWE2ZGNmOS4uMmYxNTEzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvVE9ETworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9UT0RPCkBAIC0xNywzMCArMTcsNiBAQAogLT4gdHJhbnN0YWJsZV9nbG9iYWwgKHJlYWQtb25seSkgW291dHB1dHMgdGhlIGdsb2JhbCB0cmFuc2xhdGlvbiB0YWJsZV0KIC0+IHRyYW5zdGFibGVfbG9jYWwgKHJlYWQtb25seSkgW291dHB1dHMgdGhlIGxvY2FsIHRyYW5zbGF0aW9uIHRhYmxlXQogCi09PiB2aXMgInJhdyIgZGF0YSBvdXRwdXQKLSogdGhlIHJhdyBmb3JtYXQgc2hhbGwgcmVwbGFjZSBkb3QgZHJhdyAvIGpzb24gdG8gb2ZmZXIgYSBuZXV0cmFsIHRoYXQgY2FuCi0qIGJlIGNvbnZlcnRlZAotKiB0aGUgZm9ybWF0IChjb21tYSBzZXBlcmF0ZWQgZW50cmllcyk6Ci0tPiAibWFjIiAtPiBtYWMgYWRkcmVzcyBvZiBhbiBvcmlnaW5hdG9yIChlYWNoIGxpbmUgYmVnaW5zIHdpdGggaXQpCi0tPiAiVFEgbWFjIHZhbHVlIiAtPiBzcmMgbWFjJ3MgbGluayBxdWFsaXR5IHRvd2FyZHMgbWFjIGFkZHJlc3MKLS0+ICJITkEgbWFjIiAtPiBITkEgYW5ub3VuY2VkIGJ5IHNvdXJjZSBtYWMKLS0+ICJQUklNQVJZIiAtPiB0aGlzIGlzIGEgcHJpbWFyeSBpbnRlcmZhY2UKLS0+ICJTRUMgbWFjIiAtPiBzZWNvbmRhcnkgbWFjIGFkZHJlc3Mgb2Ygc291cmNlIChyZXF1aXJlcyBwcmVjZWVkaW5nCi0tPiBQUklNQVJZKQotCi09PiBsb2dnaW5nCi0qIHRoZSBsb2cgbGV2ZWwgTE9HX1RZUEVfQ1JJVCwgTE9HX1RZUEVfV0FSTiAmIExPR19UWVBFX05PVElDRSB3aWxsIGJlCi0qIHVuaWZpZWQgdG8gdXNlIHByaW50awotKiBMT0dfVFlQRV9CQVRNQU4gJiBMT0dfVFlQRV9ST1VURVMgd2lsbCBhbHNvIHVzZSBwcmludGsgYnV0IG9ubHkgYWZ0ZXIgdGhlCi0qIGludGVybmFsIGRlYnVnIGxldmVsIGhhcyBiZWVuIHJhaXNlZAotKiB0aGUgaW50ZXJuYWwgZGVidWcgbGV2ZWwgY2FuIGJlIG1vZGlmaWVkIHVzaW5nIGEgbW9kdWxlIHBhcmFtZXRlciAoZGVidWcpCi0qIG9yIGF0IHJ1biB0aW1lIHZpYSAvc3lzL21vZHVsZS9iYXRtYW4tYWR2L3BhcmFtZXRlcnMvZGVidWcKLSogbWFrZSB1c2Ugb2YgcHJpbnRrICVwTSBzdXBwb3J0IGluc3RlYWQgb2YgY29udmVydGluZyBtYWMgYWRkcmVzc2VzCi0qIG1hbnVhbGx5Ci0KLT0+IHN0cmlwIG91dCBhbGwgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBzdXBwb3J0IHRvIG9sZGVyIGtlcm5lbHMKLSAgIChvbmx5IGZvdW5kIGluIGNvbXBhdC5oKQotCiA9PiBmaXggY2hlY2twYXRjaC5wbCBlcnJvcnMKIAogUGxlYXNlIHNlbmQgYWxsIHBhdGNoZXMgdG86CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9hZ2dyZWdhdGlvbi5jIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYWdncmVnYXRpb24uYwppbmRleCA5YzZlNjgxLi43OTE3MzIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9hZ2dyZWdhdGlvbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2FnZ3JlZ2F0aW9uLmMKQEAgLTk2LDYgKzk2LDcgQEAKIAkJCSAgIGludCBvd25fcGFja2V0KQogewogCXN0cnVjdCBmb3J3X3BhY2tldCAqZm9yd19wYWNrZXRfYWdncjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZm9yd19wYWNrZXRfYWdnciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmb3J3X3BhY2tldCksIEdGUF9BVE9NSUMpOwogCWlmICghZm9yd19wYWNrZXRfYWdncikKQEAgLTExNSw2ICsxMTYsNyBAQAogCSAgICAgICBwYWNrZXRfYnVmZiwKIAkgICAgICAgZm9yd19wYWNrZXRfYWdnci0+cGFja2V0X2xlbik7CiAKKwlmb3J3X3BhY2tldF9hZ2dyLT5za2IgPSBOVUxMOwogCWZvcndfcGFja2V0X2FnZ3ItPm93biA9IG93bl9wYWNrZXQ7CiAJZm9yd19wYWNrZXRfYWdnci0+aWZfaW5jb21pbmcgPSBpZl9pbmNvbWluZzsKIAlmb3J3X3BhY2tldF9hZ2dyLT5udW1fcGFja2V0cyA9IDA7CkBAIC0xMjYsOSArMTI4LDkgQEAKIAkJZm9yd19wYWNrZXRfYWdnci0+ZGlyZWN0X2xpbmtfZmxhZ3MgfD0gMTsKIAogCS8qIGFkZCBuZXcgcGFja2V0IHRvIHBhY2tldCBsaXN0ICovCi0Jc3Bpbl9sb2NrKCZmb3J3X2JhdF9saXN0X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZmb3J3X2JhdF9saXN0X2xvY2ssIGZsYWdzKTsKIAlobGlzdF9hZGRfaGVhZCgmZm9yd19wYWNrZXRfYWdnci0+bGlzdCwgJmZvcndfYmF0X2xpc3QpOwotCXNwaW5fdW5sb2NrKCZmb3J3X2JhdF9saXN0X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZvcndfYmF0X2xpc3RfbG9jaywgZmxhZ3MpOwogCiAJLyogc3RhcnQgdGltZXIgZm9yIHRoaXMgcGFja2V0ICovCiAJSU5JVF9ERUxBWUVEX1dPUksoJmZvcndfcGFja2V0X2FnZ3ItPmRlbGF5ZWRfd29yaywKQEAgLTE2OCw5ICsxNzAsMTAgQEAKIAlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCA9CiAJCShzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqKXBhY2tldF9idWZmOwogCWJvb2wgZGlyZWN0X2xpbmsgPSBiYXRtYW5fcGFja2V0LT5mbGFncyAmIERJUkVDVExJTksgPyAxIDogMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogZmluZCBwb3NpdGlvbiBmb3IgdGhlIHBhY2tldCBpbiB0aGUgZm9yd2FyZCBxdWV1ZSAqLwotCXNwaW5fbG9jaygmZm9yd19iYXRfbGlzdF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZm9yd19iYXRfbGlzdF9sb2NrLCBmbGFncyk7CiAJLyogb3duIHBhY2tldHMgYXJlIG5vdCB0byBiZSBhZ2dyZWdhdGVkICovCiAJaWYgKChhdG9taWNfcmVhZCgmYWdncmVnYXRpb25fZW5hYmxlZCkpICYmICghb3duX3BhY2tldCkpIHsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZm9yd19wYWNrZXRfcG9zLCB0bXBfbm9kZSwgJmZvcndfYmF0X2xpc3QsCkBAIC0xOTEsNyArMTk0LDcgQEAKIAkgKiBzdWl0YWJsZSBhZ2dyZWdhdGlvbiBwYWNrZXQgZm91bmQgKi8KIAlpZiAoZm9yd19wYWNrZXRfYWdnciA9PSBOVUxMKSB7CiAJCS8qIHRoZSBmb2xsb3dpbmcgc2VjdGlvbiBjYW4gcnVuIHdpdGhvdXQgdGhlIGxvY2sgKi8KLQkJc3Bpbl91bmxvY2soJmZvcndfYmF0X2xpc3RfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZvcndfYmF0X2xpc3RfbG9jaywgZmxhZ3MpOwogCQluZXdfYWdncmVnYXRlZF9wYWNrZXQocGFja2V0X2J1ZmYsIHBhY2tldF9sZW4sCiAJCQkJICAgICAgc2VuZF90aW1lLCBkaXJlY3RfbGluaywKIAkJCQkgICAgICBpZl9pbmNvbWluZywgb3duX3BhY2tldCk7CkBAIC0xOTksNyArMjAyLDcgQEAKIAkJYWdncmVnYXRlKGZvcndfcGFja2V0X2FnZ3IsCiAJCQkgIHBhY2tldF9idWZmLCBwYWNrZXRfbGVuLAogCQkJICBkaXJlY3RfbGluayk7Ci0JCXNwaW5fdW5sb2NrKCZmb3J3X2JhdF9saXN0X2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmb3J3X2JhdF9saXN0X2xvY2ssIGZsYWdzKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2JpdGFycmF5LmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9iaXRhcnJheS5jCmluZGV4IDNjNjdmNWYuLjIxMmVlZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2JpdGFycmF5LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvYml0YXJyYXkuYwpAQCAtMjEsNyArMjEsNiBAQAogCiAjaW5jbHVkZSAibWFpbi5oIgogI2luY2x1ZGUgImJpdGFycmF5LmgiCi0jaW5jbHVkZSAibG9nLmgiCiAKIC8qIHJldHVybnMgdHJ1ZSBpZiB0aGUgY29ycmVzcG9uZGluZyBiaXQgaW4gdGhlIGdpdmVuIHNlcV9iaXRzIGluZGljYXRlcyB0cnVlCiAgKiBhbmQgY3Vycl9zZXFubyBpcyB3aXRoaW4gcmFuZ2Ugb2YgbGFzdF9zZXFubyAqLwpAQCAtODAsOCArNzksOCBAQAogCQkgKiBmcm9tLgogCQkgKgogCQkgKiBsZWZ0IGlzIGhpZ2gsIHJpZ2h0IGlzIGxvdzogRkVEQyBCQTk4IDc2NTQgMzIxMAotCQkgKgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl4gXl4KLQkJICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZ2dnYKKwkJICoJCQkJCSAgXl4gXl4KKwkJICoJCQkgICAgICAgdnZ2dgogCQkgKiBeXl5eID0gZnJvbSwgdnZ2dnYgPXRvLCB3ZSdkIGhhdmUgd29yZF9udW09PTEgYW5kCiAJCSAqIHdvcmRfb2Zmc2V0PT1XT1JEX0JJVF9TSVpFLzIgPz8/Pz8gaW4gdGhpcyBleGFtcGxlLgogCQkgKiAoPTI0IGJpdHMpCkBAIC0xMzMsMTMgKzEzMiwxMyBAQAogCSAgICAoc2VxX251bV9kaWZmIDwgLVRRX0xPQ0FMX1dJTkRPV19TSVpFKSkgewogCiAJCWlmIChzZXFfbnVtX2RpZmYgPiBUUV9MT0NBTF9XSU5ET1dfU0laRSkKLQkJCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sCi0JCQkJICAiV2UgbWlzc2VkIGEgbG90IG9mIHBhY2tldHMgKCVpKSAhXG4iLAotCQkJCSAgc2VxX251bV9kaWZmLTEpOworCQkJYmF0X2RiZyhEQkdfQkFUTUFOLAorCQkJCSJXZSBtaXNzZWQgYSBsb3Qgb2YgcGFja2V0cyAoJWkpICFcbiIsCisJCQkJc2VxX251bV9kaWZmLTEpOwogCiAJCWlmICgtc2VxX251bV9kaWZmID4gVFFfTE9DQUxfV0lORE9XX1NJWkUpCi0JCQlkZWJ1Z19sb2coTE9HX1RZUEVfQkFUTUFOLAotCQkJCSAgIk90aGVyIGhvc3QgcHJvYmFibHkgcmVzdGFydGVkICFcbiIpOworCQkJYmF0X2RiZyhEQkdfQkFUTUFOLAorCQkJCSJPdGhlciBob3N0IHByb2JhYmx5IHJlc3RhcnRlZCAhXG4iKTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1dPUkRTOyBpKyspCiAJCQlzZXFfYml0c1tpXSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9jb21wYXQuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2NvbXBhdC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmNGUwYTQ1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2NvbXBhdC5oCisrKyAvZGV2L251bGwKQEAgLTEsNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6Ci0gKgotICogTWFyZWsgTGluZG5lciwgU2ltb24gV3VuZGVybGljaAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSwgVVNBCi0gKgotICoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBtYWNyb3MgZm9yIG1haW50YWluaW5nIGNvbXBhdGliaWxpdHkgd2l0aCBvbGRlciB2ZXJzaW9ucwotICogb2YgdGhlIExpbnV4IGtlcm5lbC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgkvKiBMSU5VWF9WRVJTSU9OX0NPREUgKi8KLQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDIyKQotCi0jZGVmaW5lIHNrYl9zZXRfbmV0d29ya19oZWFkZXIoX3NrYiwgX29mZnNldCkgXAotCWRvIHsgKF9za2IpLT5uaC5yYXcgPSAoX3NrYiktPmRhdGEgKyAoX29mZnNldCk7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgc2tiX3Jlc2V0X21hY19oZWFkZXIoX3NrYikgXAotCWRvIHsgKF9za2IpLT5tYWMucmF3ID0gKF9za2IpLT5kYXRhOyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIGxpc3RfZmlyc3RfZW50cnkocHRyLCB0eXBlLCBtZW1iZXIpIFwKLQlsaXN0X2VudHJ5KChwdHIpLT5uZXh0LCB0eXBlLCBtZW1iZXIpCi0KLSNlbmRpZiAvKiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAyMikgKi8KLQotCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNiwgMjYpCi0KLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZShfY2xzLCBfcGFyZW50LCBfZGV2dCwgX2RldmljZSwgX2ZtdCkgXAotCWNsYXNzX2RldmljZV9jcmVhdGUoX2NscywgX3BhcmVudCwgX2RldnQsIF9kZXZpY2UsIF9mbXQpCi0KLSNkZWZpbmUgZGV2aWNlX2Rlc3Ryb3koX2NscywgX2RldmljZSkgXAotCWNsYXNzX2RldmljZV9kZXN0cm95KF9jbHMsIF9kZXZpY2UpCi0KLSNlbHNlCi0KLSNpZiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAyNykKLQotI2RlZmluZSBkZXZpY2VfY3JlYXRlKF9jbHMsIF9wYXJlbnQsIF9kZXZ0LCBfZGV2aWNlLCBfZm10KSBcCi0JZGV2aWNlX2NyZWF0ZV9kcnZkYXRhKF9jbHMsIF9wYXJlbnQsIF9kZXZ0LCBfZGV2aWNlLCBfZm10KQotCi0jZW5kaWYgLyogTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNiwgMjcpICovCi0KLSNlbmRpZiAvKiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAyNikgKi8KLQotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDIzKQotCi0jZGVmaW5lIGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyh3cSkgY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yayh3cSkKLQotI2VuZGlmIC8qIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDIzKSAqLwotI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsIDYsIDI1KQotI2RlZmluZSBzdHJpY3Rfc3RydG91bChjcCwgYmFzZSwgcmVzKSBcCi0JKHsgXAotCWludCByZXQgPSAwOyBcCi0JY2hhciAqZW5kcDsgXAotCSpyZXMgPSBzaW1wbGVfc3RydG91bChjcCwgJmVuZHAsIGJhc2UpOyBcCi0JaWYgKGNwID09IGVuZHApIFwKLQkJcmV0ID0gLUVJTlZBTDsgXAotCXJldDsgXAotfSkKLSNlbmRpZiAvKiBMSU5VWF9WRVJTSU9OX0NPREUgPCBLRVJORUxfVkVSU0lPTigyLCA2LCAyNSkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2RldmljZS5jIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvZGV2aWNlLmMKaW5kZXggMWU3ZDFmOC4uZTdmNDQyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvZGV2aWNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvZGV2aWNlLmMKQEAgLTE5LDE0ICsxOSwxMyBAQAogICoKICAqLwogCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSAibWFpbi5oIgogI2luY2x1ZGUgImRldmljZS5oIgotI2luY2x1ZGUgImxvZy5oIgogI2luY2x1ZGUgInNlbmQuaCIKICNpbmNsdWRlICJ0eXBlcy5oIgogI2luY2x1ZGUgImhhc2guaCIKLQotI2luY2x1ZGUgImNvbXBhdC5oIgorI2luY2x1ZGUgImhhcmQtaW50ZXJmYWNlLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKmJhdG1hbl9jbGFzczsKIApAQCAtNjAsNyArNTksNyBAQAogCS8qIHJlZ2lzdGVyIG91ciBkZXZpY2UgLSBrZXJuZWwgYXNzaWducyBhIGZyZWUgbWFqb3IgbnVtYmVyICovCiAJdG1wX21ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsIERSSVZFUl9ERVZJQ0UsICZmb3BzKTsKIAlpZiAodG1wX21ham9yIDwgMCkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfV0FSTiwgIlJlZ2lzdGVyaW5nIHRoZSBjaGFyYWN0ZXIgZGV2aWNlIGZhaWxlZCB3aXRoICVkXG4iLAorCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6UmVnaXN0ZXJpbmcgdGhlIGNoYXJhY3RlciBkZXZpY2UgZmFpbGVkIHdpdGggJWRcbiIsCiAJCQkgIHRtcF9tYWpvcik7CiAJCXJldHVybiAwOwogCX0KQEAgLTY4LDcgKzY3LDcgQEAKIAliYXRtYW5fY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJiYXRtYW4tYWR2Iik7CiAKIAlpZiAoSVNfRVJSKGJhdG1hbl9jbGFzcykpIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX1dBUk4sICJDb3VsZCBub3QgcmVnaXN0ZXIgY2xhc3MgJ2JhdG1hbi1hZHYnIFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpDb3VsZCBub3QgcmVnaXN0ZXIgY2xhc3MgJ2JhdG1hbi1hZHYnIFxuIik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMTExLDcgKzExMCw3IEBACiAJfQogCiAJaWYgKGRldmljZV9jbGllbnRfaGFzaFtpXSAhPSBkZXZpY2VfY2xpZW50KSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9XQVJOLCAiRXJyb3IgLSBjYW4ndCBhZGQgYW5vdGhlciBwYWNrZXQgY2xpZW50OiBtYXhpbXVtIG51bWJlciBvZiBjbGllbnRzIHJlYWNoZWQgXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OkVycm9yIC0gY2FuJ3QgYWRkIGFub3RoZXIgcGFja2V0IGNsaWVudDogbWF4aW11bSBudW1iZXIgb2YgY2xpZW50cyByZWFjaGVkIFxuIik7CiAJCWtmcmVlKGRldmljZV9jbGllbnQpOwogCQlyZXR1cm4gLUVYRlVMTDsKIAl9CkBAIC0xMTksNyArMTE4LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmZGV2aWNlX2NsaWVudC0+cXVldWVfbGlzdCk7CiAJZGV2aWNlX2NsaWVudC0+cXVldWVfbGVuID0gMDsKIAlkZXZpY2VfY2xpZW50LT5pbmRleCA9IGk7Ci0JZGV2aWNlX2NsaWVudC0+bG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKGRldmljZV9jbGllbnQtPmxvY2spOworCXNwaW5fbG9ja19pbml0KCZkZXZpY2VfY2xpZW50LT5sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXZpY2VfY2xpZW50LT5xdWV1ZV93YWl0KTsKIAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRldmljZV9jbGllbnQ7CkBAIC0xMzQsOCArMTMzLDkgQEAKIAkJKHN0cnVjdCBkZXZpY2VfY2xpZW50ICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkZXZpY2VfcGFja2V0ICpkZXZpY2VfcGFja2V0OwogCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfcG9zLCAqbGlzdF9wb3NfdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJmRldmljZV9jbGllbnQtPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZpY2VfY2xpZW50LT5sb2NrLCBmbGFncyk7CiAKIAkvKiBmb3IgYWxsIHBhY2tldHMgaW4gdGhlIHF1ZXVlIC4uLiAqLwogCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X3BvcywgbGlzdF9wb3NfdG1wLCAmZGV2aWNlX2NsaWVudC0+cXVldWVfbGlzdCkgewpAQCAtMTQ3LDcgKzE0Nyw3IEBACiAJfQogCiAJZGV2aWNlX2NsaWVudF9oYXNoW2RldmljZV9jbGllbnQtPmluZGV4XSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2soJmRldmljZV9jbGllbnQtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZV9jbGllbnQtPmxvY2ssIGZsYWdzKTsKIAogCWtmcmVlKGRldmljZV9jbGllbnQpOwogCWRlY19tb2R1bGVfY291bnQoKTsKQEAgLTE2Miw2ICsxNjIsNyBAQAogCQkoc3RydWN0IGRldmljZV9jbGllbnQgKilmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRldmljZV9wYWNrZXQgKmRldmljZV9wYWNrZXQ7CiAJaW50IGVycm9yOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAmJiAoZGV2aWNlX2NsaWVudC0+cXVldWVfbGVuID09IDApKQogCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTE3OCwxNCArMTc5LDE0IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlzcGluX2xvY2soJmRldmljZV9jbGllbnQtPmxvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXZpY2VfY2xpZW50LT5sb2NrLCBmbGFncyk7CiAKIAlkZXZpY2VfcGFja2V0ID0gbGlzdF9maXJzdF9lbnRyeSgmZGV2aWNlX2NsaWVudC0+cXVldWVfbGlzdCwKIAkJCQkJIHN0cnVjdCBkZXZpY2VfcGFja2V0LCBsaXN0KTsKIAlsaXN0X2RlbCgmZGV2aWNlX3BhY2tldC0+bGlzdCk7CiAJZGV2aWNlX2NsaWVudC0+cXVldWVfbGVuLS07CiAKLQlzcGluX3VubG9jaygmZGV2aWNlX2NsaWVudC0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2aWNlX2NsaWVudC0+bG9jaywgZmxhZ3MpOwogCiAJZXJyb3IgPSBfX2NvcHlfdG9fdXNlcihidWYsICZkZXZpY2VfcGFja2V0LT5pY21wX3BhY2tldCwKIAkJCSAgICAgICBzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0KSk7CkBAIC0yMDYsOSArMjA3LDExIEBACiAJc3RydWN0IGljbXBfcGFja2V0IGljbXBfcGFja2V0OwogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKIAlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CisJdWludDhfdCBkc3RhZGRyW0VUSF9BTEVOXTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXQpKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9OT1RJQ0UsICJFcnJvciAtIGNhbid0IHNlbmQgcGFja2V0IGZyb20gY2hhciBkZXZpY2U6IGludmFsaWQgcGFja2V0IHNpemVcbiIpOworCQliYXRfZGJnKERCR19CQVRNQU4sICJiYXRtYW4tYWR2OkVycm9yIC0gY2FuJ3Qgc2VuZCBwYWNrZXQgZnJvbSBjaGFyIGRldmljZTogaW52YWxpZCBwYWNrZXQgc2l6ZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMjE5LDEyICsyMjIsMTIgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlpZiAoaWNtcF9wYWNrZXQucGFja2V0X3R5cGUgIT0gQkFUX0lDTVApIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX05PVElDRSwgIkVycm9yIC0gY2FuJ3Qgc2VuZCBwYWNrZXQgZnJvbSBjaGFyIGRldmljZTogZ290IGJvZ3VzIHBhY2tldCB0eXBlIChleHBlY3RlZDogQkFUX0lDTVApXG4iKTsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCAiYmF0bWFuLWFkdjpFcnJvciAtIGNhbid0IHNlbmQgcGFja2V0IGZyb20gY2hhciBkZXZpY2U6IGdvdCBib2d1cyBwYWNrZXQgdHlwZSAoZXhwZWN0ZWQ6IEJBVF9JQ01QKVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmIChpY21wX3BhY2tldC5tc2dfdHlwZSAhPSBFQ0hPX1JFUVVFU1QpIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX05PVElDRSwgIkVycm9yIC0gY2FuJ3Qgc2VuZCBwYWNrZXQgZnJvbSBjaGFyIGRldmljZTogZ290IGJvZ3VzIG1lc3NhZ2UgdHlwZSAoZXhwZWN0ZWQ6IEVDSE9fUkVRVUVTVClcbiIpOworCQliYXRfZGJnKERCR19CQVRNQU4sICJiYXRtYW4tYWR2OkVycm9yIC0gY2FuJ3Qgc2VuZCBwYWNrZXQgZnJvbSBjaGFyIGRldmljZTogZ290IGJvZ3VzIG1lc3NhZ2UgdHlwZSAoZXhwZWN0ZWQ6IEVDSE9fUkVRVUVTVClcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTI0MCw3ICsyNDMsNyBAQAogCWlmIChhdG9taWNfcmVhZCgmbW9kdWxlX3N0YXRlKSAhPSBNT0RVTEVfQUNUSVZFKQogCQlnb3RvIGRzdF91bnJlYWNoOwogCi0Jc3Bpbl9sb2NrKCZvcmlnX2hhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiAJb3JpZ19ub2RlID0gKChzdHJ1Y3Qgb3JpZ19ub2RlICopaGFzaF9maW5kKG9yaWdfaGFzaCwgaWNtcF9wYWNrZXQuZHN0KSk7CiAKIAlpZiAoIW9yaWdfbm9kZSkKQEAgLTI1MCw5ICsyNTMsMTUgQEAKIAkJZ290byB1bmxvY2s7CiAKIAliYXRtYW5faWYgPSBvcmlnX25vZGUtPmJhdG1hbl9pZjsKKwltZW1jcHkoZHN0YWRkciwgb3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIsIEVUSF9BTEVOKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiAKIAlpZiAoIWJhdG1hbl9pZikKLQkJZ290byB1bmxvY2s7CisJCWdvdG8gZHN0X3VucmVhY2g7CisKKwlpZiAoYmF0bWFuX2lmLT5pZl9hY3RpdmUgIT0gSUZfQUNUSVZFKQorCQlnb3RvIGRzdF91bnJlYWNoOwogCiAJbWVtY3B5KGljbXBfcGFja2V0Lm9yaWcsCiAJICAgICAgIGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIsCkBAIC0yNjAsMTMgKzI2OSwxMiBAQAogCiAJc2VuZF9yYXdfcGFja2V0KCh1bnNpZ25lZCBjaGFyICopJmljbXBfcGFja2V0LAogCQkJc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldCksCi0JCQliYXRtYW5faWYsIG9yaWdfbm9kZS0+cm91dGVyLT5hZGRyKTsKKwkJCWJhdG1hbl9pZiwgZHN0YWRkcik7CiAKLQlzcGluX3VubG9jaygmb3JpZ19oYXNoX2xvY2spOwogCWdvdG8gb3V0OwogCiB1bmxvY2s6Ci0Jc3Bpbl91bmxvY2soJm9yaWdfaGFzaF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwogZHN0X3VucmVhY2g6CiAJaWNtcF9wYWNrZXQubXNnX3R5cGUgPSBERVNUSU5BVElPTl9VTlJFQUNIQUJMRTsKIAliYXRfZGV2aWNlX2FkZF9wYWNrZXQoZGV2aWNlX2NsaWVudCwgJmljbXBfcGFja2V0KTsKQEAgLTI5MSw2ICsyOTksNyBAQAogCQkJICAgc3RydWN0IGljbXBfcGFja2V0ICppY21wX3BhY2tldCkKIHsKIAlzdHJ1Y3QgZGV2aWNlX3BhY2tldCAqZGV2aWNlX3BhY2tldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZGV2aWNlX3BhY2tldCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZpY2VfcGFja2V0KSwgR0ZQX0tFUk5FTCk7CiAKQEAgLTMwMSwxMiArMzEwLDEyIEBACiAJbWVtY3B5KCZkZXZpY2VfcGFja2V0LT5pY21wX3BhY2tldCwgaWNtcF9wYWNrZXQsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXQpKTsKIAotCXNwaW5fbG9jaygmZGV2aWNlX2NsaWVudC0+bG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldmljZV9jbGllbnQtPmxvY2ssIGZsYWdzKTsKIAogCS8qIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBsb2NrIHRoZSBkZXZpY2VfY2xpZW50IGNvdWxkIGhhdmUgYmVlbgogCSAqIGRlbGV0ZWQgKi8KIAlpZiAoIWRldmljZV9jbGllbnRfaGFzaFtpY21wX3BhY2tldC0+dWlkXSkgewotCQlzcGluX3VubG9jaygmZGV2aWNlX2NsaWVudC0+bG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZV9jbGllbnQtPmxvY2ssIGZsYWdzKTsKIAkJa2ZyZWUoZGV2aWNlX3BhY2tldCk7CiAJCXJldHVybjsKIAl9CkBAIC0zMjMsNyArMzMyLDcgQEAKIAkJZGV2aWNlX2NsaWVudC0+cXVldWVfbGVuLS07CiAJfQogCi0Jc3Bpbl91bmxvY2soJmRldmljZV9jbGllbnQtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldmljZV9jbGllbnQtPmxvY2ssIGZsYWdzKTsKIAogCXdha2VfdXAoJmRldmljZV9jbGllbnQtPnF1ZXVlX3dhaXQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmMKaW5kZXggNWVhMzVkYS4uYmVmZDQ4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5jCkBAIC0yMSwxMyArMjEsMTEgQEAKIAogI2luY2x1ZGUgIm1haW4uaCIKICNpbmNsdWRlICJoYXJkLWludGVyZmFjZS5oIgotI2luY2x1ZGUgImxvZy5oIgogI2luY2x1ZGUgInNvZnQtaW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAic2VuZC5oIgogI2luY2x1ZGUgInRyYW5zbGF0aW9uLXRhYmxlLmgiCiAjaW5jbHVkZSAicm91dGluZy5oIgogI2luY2x1ZGUgImhhc2guaCIKLSNpbmNsdWRlICJjb21wYXQuaCIKIAogI2RlZmluZSBNSU4oeCwgeSkgKCh4KSA8ICh5KSA/ICh4KSA6ICh5KSkKIApAQCAtNzUsNyArNzMsNiBAQAogc3RhdGljIHZvaWQgY2hlY2tfa25vd25fbWFjX2FkZHIodWludDhfdCAqYWRkcikKIHsKIAlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7Ci0JY2hhciBtYWNfc3RyaW5nW0VUSF9TVFJfTEVOXTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShiYXRtYW5faWYsICZpZl9saXN0LCBsaXN0KSB7CkBAIC04NiwxMCArODMsOSBAQAogCQlpZiAoIWNvbXBhcmVfb3JpZyhiYXRtYW5faWYtPm5ldF9kZXYtPmRldl9hZGRyLCBhZGRyKSkKIAkJCWNvbnRpbnVlOwogCi0JCWFkZHJfdG9fc3RyaW5nKG1hY19zdHJpbmcsIGFkZHIpOwotCQlkZWJ1Z19sb2coTE9HX1RZUEVfV0FSTiwgIlRoZSBuZXdseSBhZGRlZCBtYWMgYWRkcmVzcyAoJXMpIGFscmVhZHkgZXhpc3RzIG9uOiAlc1xuIiwKLQkJICAgICAgICAgIG1hY19zdHJpbmcsIGJhdG1hbl9pZi0+ZGV2KTsKLQkJZGVidWdfbG9nKExPR19UWVBFX1dBUk4sICJJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBrZWVwIG1hYyBhZGRyZXNzZXMgdW5pcXVlIHRvIGF2b2lkIHByb2JsZW1zIVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJhdG1hbi1hZHY6VGhlIG5ld2x5IGFkZGVkIG1hYyBhZGRyZXNzICglcE0pIGFscmVhZHkgZXhpc3RzIG9uOiAlc1xuIiwKKwkJICAgICAgIGFkZHIsIGJhdG1hbl9pZi0+ZGV2KTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmF0bWFuLWFkdjpJdCBpcyBzdHJvbmdseSByZWNvbW1lbmRlZCB0byBrZWVwIG1hYyBhZGRyZXNzZXMgdW5pcXVlIHRvIGF2b2lkIHByb2JsZW1zIVxuIik7CiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogfQpAQCAtMTU0LDkgKzE1MCw2IEBACiAJaWYgKGJhdG1hbl9pZi0+aWZfYWN0aXZlICE9IElGX0FDVElWRSkKIAkJcmV0dXJuOwogCi0JaWYgKGJhdG1hbl9pZi0+cmF3X3NvY2spCi0JCXNvY2tfcmVsZWFzZShiYXRtYW5faWYtPnJhd19zb2NrKTsKLQogCS8qKgogCSAqIGJhdG1hbl9pZi0+bmV0X2RldiBoYXMgYmVlbiBhY3F1aXJlZCBieSBkZXZfZ2V0X2J5X25hbWUoKSBpbgogCSAqIHByb2NfaW50ZXJmYWNlc193cml0ZSgpIGFuZCBoYXMgdG8gYmUgdW5yZWZlcmVuY2VkLgpAQCAtMTY1LDIyICsxNTgsMTYgQEAKIAlpZiAoYmF0bWFuX2lmLT5uZXRfZGV2KQogCQlkZXZfcHV0KGJhdG1hbl9pZi0+bmV0X2Rldik7CiAKLQliYXRtYW5faWYtPnJhd19zb2NrID0gTlVMTDsKLQliYXRtYW5faWYtPm5ldF9kZXYgPSBOVUxMOwotCiAJYmF0bWFuX2lmLT5pZl9hY3RpdmUgPSBJRl9JTkFDVElWRTsKIAlhY3RpdmVfaWZzLS07CiAKLQlkZWJ1Z19sb2coTE9HX1RZUEVfTk9USUNFLCAiSW50ZXJmYWNlIGRlYWN0aXZhdGVkOiAlc1xuIiwKLQkgICAgICAgICAgYmF0bWFuX2lmLT5kZXYpOworCXByaW50ayhLRVJOX0lORk8gImJhdG1hbi1hZHY6SW50ZXJmYWNlIGRlYWN0aXZhdGVkOiAlc1xuIiwKKwkJICBiYXRtYW5faWYtPmRldik7CiB9CiAKIC8qIChyZSlhY3RpdmF0ZSBnaXZlbiBpbnRlcmZhY2UuICovCiBzdGF0aWMgdm9pZCBoYXJkaWZfYWN0aXZhdGVfaW50ZXJmYWNlKHN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZikKIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfbGwgYmluZF9hZGRyOwotCWludCByZXR2YWw7Ci0KIAlpZiAoYmF0bWFuX2lmLT5pZl9hY3RpdmUgIT0gSUZfSU5BQ1RJVkUpCiAJCXJldHVybjsKIApAQCAtMTkyLDM1ICsxNzksOCBAQAogCWlmICghYmF0bWFuX2lmLT5uZXRfZGV2KQogCQlnb3RvIGRldl9lcnI7CiAKLQlyZXR2YWwgPSBzb2NrX2NyZWF0ZV9rZXJuKFBGX1BBQ0tFVCwgU09DS19SQVcsCi0JCQkJICBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0JBVE1BTiksCi0JCQkJICAmYmF0bWFuX2lmLT5yYXdfc29jayk7Ci0KLQlpZiAocmV0dmFsIDwgMCkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfV0FSTiwgIkNhbid0IGNyZWF0ZSByYXcgc29ja2V0OiAlaVxuIiwKLQkJCSAgcmV0dmFsKTsKLQkJZ290byBzb2NrX2VycjsKLQl9Ci0KLQliaW5kX2FkZHIuc2xsX2ZhbWlseSA9IEFGX1BBQ0tFVDsKLQliaW5kX2FkZHIuc2xsX2lmaW5kZXggPSBiYXRtYW5faWYtPm5ldF9kZXYtPmlmaW5kZXg7Ci0JYmluZF9hZGRyLnNsbF9wcm90b2NvbCA9IDA7CS8qIGlzIHNldCBieSB0aGUga2VybmVsICovCi0KLQlyZXR2YWwgPSBrZXJuZWxfYmluZChiYXRtYW5faWYtPnJhd19zb2NrLAotCQkJICAgICAoc3RydWN0IHNvY2thZGRyICopJmJpbmRfYWRkciwgc2l6ZW9mKGJpbmRfYWRkcikpOwotCi0JaWYgKHJldHZhbCA8IDApIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX1dBUk4sICJDYW4ndCBjcmVhdGUgYmluZCByYXcgc29ja2V0OiAlaVxuIiwKLQkJCSAgcmV0dmFsKTsKLQkJZ290byBiaW5kX2VycjsKLQl9Ci0KIAljaGVja19rbm93bl9tYWNfYWRkcihiYXRtYW5faWYtPm5ldF9kZXYtPmRldl9hZGRyKTsKIAotCWJhdG1hbl9pZi0+cmF3X3NvY2stPnNrLT5za191c2VyX2RhdGEgPQotCQliYXRtYW5faWYtPnJhd19zb2NrLT5zay0+c2tfZGF0YV9yZWFkeTsKLQliYXRtYW5faWYtPnJhd19zb2NrLT5zay0+c2tfZGF0YV9yZWFkeSA9IGJhdG1hbl9kYXRhX3JlYWR5OwotCiAJYWRkcl90b19zdHJpbmcoYmF0bWFuX2lmLT5hZGRyX3N0ciwgYmF0bWFuX2lmLT5uZXRfZGV2LT5kZXZfYWRkcik7CiAKIAltZW1jcHkoKChzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqKShiYXRtYW5faWYtPnBhY2tldF9idWZmKSktPm9yaWcsCkBAIC0yMzUsMTcgKzE5NSwxMiBAQAogCWlmIChiYXRtYW5faWYtPmlmX251bSA9PSAwKQogCQlzZXRfbWFpbl9pZl9hZGRyKGJhdG1hbl9pZi0+bmV0X2Rldi0+ZGV2X2FkZHIpOwogCi0JZGVidWdfbG9nKExPR19UWVBFX05PVElDRSwgIkludGVyZmFjZSBhY3RpdmF0ZWQ6ICVzXG4iLAotCSAgICAgICAgICBiYXRtYW5faWYtPmRldik7CisJcHJpbnRrKEtFUk5fSU5GTyAiYmF0bWFuLWFkdjpJbnRlcmZhY2UgYWN0aXZhdGVkOiAlc1xuIiwKKwkJICBiYXRtYW5faWYtPmRldik7CiAKIAlyZXR1cm47CiAKLWJpbmRfZXJyOgotCXNvY2tfcmVsZWFzZShiYXRtYW5faWYtPnJhd19zb2NrKTsKLXNvY2tfZXJyOgotCWRldl9wdXQoYmF0bWFuX2lmLT5uZXRfZGV2KTsKIGRldl9lcnI6Ci0JYmF0bWFuX2lmLT5yYXdfc29jayA9IE5VTEw7CiAJYmF0bWFuX2lmLT5uZXRfZGV2ID0gTlVMTDsKIH0KIApAQCAtMjkwLDcgKzI0NSw3IEBACiAJZGF0YV9wdHIgPSBrbWFsbG9jKChpZl9udW0gKyAxKSAqIHNpemVvZihUWVBFX09GX1dPUkQpICogTlVNX1dPUkRTLAogCQkJICAgR0ZQX0FUT01JQyk7CiAJaWYgKCFkYXRhX3B0cikgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfV0FSTiwgIkNhbid0IHJlc2l6ZSBvcmlnOiBvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OkNhbid0IHJlc2l6ZSBvcmlnOiBvdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzAxLDcgKzI1Niw3IEBACiAKIAlkYXRhX3B0ciA9IGttYWxsb2MoKGlmX251bSArIDEpICogc2l6ZW9mKHVpbnQ4X3QpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWRhdGFfcHRyKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9XQVJOLCAiQ2FuJ3QgcmVzaXplIG9yaWc6IG91dCBvZiBtZW1vcnlcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6Q2FuJ3QgcmVzaXplIG9yaWc6IG91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0zMTksMTYgKzI3NCwxNiBAQAogCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZjsKIAlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldDsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7Ci0Jc3RydWN0IGhhc2hfaXRfdCAqaGFzaGl0ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCUhBU0hJVChoYXNoaXQpOwogCiAJYmF0bWFuX2lmID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGJhdG1hbl9pZiksIEdGUF9LRVJORUwpOwogCiAJaWYgKCFiYXRtYW5faWYpIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX1dBUk4sICJDYW4ndCBhZGQgaW50ZXJmYWNlICglcyk6IG91dCBvZiBtZW1vcnlcbiIsIGRldik7CisJCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpDYW4ndCBhZGQgaW50ZXJmYWNlICglcyk6IG91dCBvZiBtZW1vcnlcbiIsIGRldik7CiAJCXJldHVybiAtMTsKIAl9CiAKLQliYXRtYW5faWYtPnJhd19zb2NrID0gTlVMTDsKIAliYXRtYW5faWYtPm5ldF9kZXYgPSBOVUxMOwogCiAJaWYgKChpZl9udW0gPT0gMCkgJiYgKG51bV9obmEgPiAwKSkKQEAgLTMzOSw3ICsyOTQsNyBAQAogCWJhdG1hbl9pZi0+cGFja2V0X2J1ZmYgPSBrbWFsbG9jKGJhdG1hbl9pZi0+cGFja2V0X2xlbiwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWJhdG1hbl9pZi0+cGFja2V0X2J1ZmYpIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX1dBUk4sICJDYW4ndCBhZGQgaW50ZXJmYWNlIHBhY2tldCAoJXMpOiBvdXQgb2YgbWVtb3J5XG4iLCBkZXYpOworCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6Q2FuJ3QgYWRkIGludGVyZmFjZSBwYWNrZXQgKCVzKTogb3V0IG9mIG1lbW9yeVxuIiwgZGV2KTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0zNDgsNyArMzAzLDcgQEAKIAliYXRtYW5faWYtPmlmX2FjdGl2ZSA9IElGX0lOQUNUSVZFOwogCUlOSVRfUkNVX0hFQUQoJmJhdG1hbl9pZi0+cmN1KTsKIAotCWRlYnVnX2xvZyhMT0dfVFlQRV9OT1RJQ0UsICJBZGRpbmcgaW50ZXJmYWNlOiAlc1xuIiwgZGV2KTsKKwlwcmludGsoS0VSTl9JTkZPICJiYXRtYW4tYWR2OkFkZGluZyBpbnRlcmZhY2U6ICVzXG4iLCBkZXYpOwogCWF2YWlsX2lmcysrOwogCiAJSU5JVF9MSVNUX0hFQUQoJmJhdG1hbl9pZi0+bGlzdCk7CkBAIC0zNzYsMjAgKzMzMSwyMCBAQAogCiAJLyogcmVzaXplIGFsbCBvcmlnIG5vZGVzIGJlY2F1c2Ugb3JpZ19ub2RlLT5iY2FzdF9vd24oX3N1bSkgZGVwZW5kIG9uCiAJICogaWZfbnVtICovCi0Jc3Bpbl9sb2NrKCZvcmlnX2hhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiAKLQl3aGlsZSAoTlVMTCAhPSAoaGFzaGl0ID0gaGFzaF9pdGVyYXRlKG9yaWdfaGFzaCwgaGFzaGl0KSkpIHsKLQkJb3JpZ19ub2RlID0gaGFzaGl0LT5idWNrZXQtPmRhdGE7CisJd2hpbGUgKGhhc2hfaXRlcmF0ZShvcmlnX2hhc2gsICZoYXNoaXQpKSB7CisJCW9yaWdfbm9kZSA9IGhhc2hpdC5idWNrZXQtPmRhdGE7CiAJCWlmIChyZXNpemVfb3JpZyhvcmlnX25vZGUsIGlmX251bSkgPT0gLTEpIHsKLQkJCXNwaW5fdW5sb2NrKCZvcmlnX2hhc2hfbG9jayk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwogCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKLQlzcGluX3VubG9jaygmb3JpZ19oYXNoX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiAKIAlpZiAoIWhhcmRpZl9pc19pbnRlcmZhY2VfdXAoYmF0bWFuX2lmLT5kZXYpKQotCQlkZWJ1Z19sb2coTE9HX1RZUEVfV0FSTiwgIk5vdCB1c2luZyBpbnRlcmZhY2UgJXMgKHJldHJ5aW5nIGxhdGVyKTogaW50ZXJmYWNlIG5vdCBhY3RpdmVcbiIsIGJhdG1hbl9pZi0+ZGV2KTsKKwkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2Ok5vdCB1c2luZyBpbnRlcmZhY2UgJXMgKHJldHJ5aW5nIGxhdGVyKTogaW50ZXJmYWNlIG5vdCBhY3RpdmVcbiIsIGJhdG1hbl9pZi0+ZGV2KTsKIAllbHNlCiAJCWhhcmRpZl9hY3RpdmF0ZV9pbnRlcmZhY2UoYmF0bWFuX2lmKTsKIApAQCAtNDAwLDggKzM1NSw3IEBACiAJcmV0dXJuIDE7CiAKIG91dDoKLQlpZiAoYmF0bWFuX2lmLT5wYWNrZXRfYnVmZikKLQkJa2ZyZWUoYmF0bWFuX2lmLT5wYWNrZXRfYnVmZik7CisJa2ZyZWUoYmF0bWFuX2lmLT5wYWNrZXRfYnVmZik7CiAJa2ZyZWUoYmF0bWFuX2lmKTsKIAlrZnJlZShkZXYpOwogCXJldHVybiAtMTsKQEAgLTQxMyw3ICszNjcsNyBAQAogfQogCiBzdGF0aWMgaW50IGhhcmRfaWZfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0cikKKwkJCSAgICB1bnNpZ25lZCBsb25nIGV2ZW50LCB2b2lkICpwdHIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXB0cjsKIAlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYgPSBnZXRfYmF0bWFuX2lmX2J5X25hbWUoZGV2LT5uYW1lKTsKQEAgLTQzNiw3ICszOTAsNiBAQAogCQlicmVhazsKIAkvKiBORVRERVZfQ0hBTkdFQUREUiAtIG1hYyBhZGRyZXNzIGNoYW5nZSAtIHdoYXQgYXJlIHdlIGRvaW5nIGhlcmUgPyAqLwogCWRlZmF1bHQ6Ci0JCS8qIGRlYnVnX2xvZyhMT0dfVFlQRV9DUklULCAiaGFyZF9pZl9ldmVudDogJXMgJWlcbiIsIGRldi0+bmFtZSwgZXZlbnQpOyAqLwogCQlicmVhazsKIAl9OwogCkBAIC00NDYsNiArMzk5LDEyMiBAQAogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIAorLyogZmluZCBiYXRtYW4gaW50ZXJmYWNlIGJ5IG5ldGRldi4gYXNzdW1lcyByY3VfcmVhZF9sb2NrIG9uICovCitzdGF0aWMgc3RydWN0IGJhdG1hbl9pZiAqZmluZF9iYXRtYW5faWYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoYmF0bWFuX2lmLCAmaWZfbGlzdCwgbGlzdCkgeworCQlpZiAoYmF0bWFuX2lmLT5uZXRfZGV2ID09IGRldikgeworCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlyZXR1cm4gYmF0bWFuX2lmOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiBOVUxMOworfQorCisKKy8qIHJlY2VpdmUgYSBwYWNrZXQgd2l0aCB0aGUgYmF0bWFuIGV0aGVydHlwZSBjb21pbmcgb24gYSBoYXJkCisgKiBpbnRlcmZhY2UgKi8KK2ludCBiYXRtYW5fc2tiX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwlzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCit7CisJc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQ7CisJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKKwlpbnQgcmV0OworCisJc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQyk7CisKKwkvKiBza2Igd2FzIHJlbGVhc2VkIGJ5IHNrYl9zaGFyZV9jaGVjaygpICovCisJaWYgKCFza2IpCisJCWdvdG8gZXJyX291dDsKKworCWlmIChhdG9taWNfcmVhZCgmbW9kdWxlX3N0YXRlKSAhPSBNT0RVTEVfQUNUSVZFKQorCQlnb3RvIGVycl9mcmVlOworCisJLyogcGFja2V0IHNob3VsZCBob2xkIGF0IGxlYXN0IHR5cGUgYW5kIHZlcnNpb24gKi8KKwlpZiAodW5saWtlbHkoc2tiX2hlYWRsZW4oc2tiKSA8IDIpKQorCQlnb3RvIGVycl9mcmVlOworCisJLyogZXhwZWN0IGEgdmFsaWQgZXRoZXJuZXQgaGVhZGVyIGhlcmUuICovCisJaWYgKHVubGlrZWx5KHNrYi0+bWFjX2xlbiAhPSBzaXplb2Yoc3RydWN0IGV0aGhkcikKKwkJCQl8fCAhc2tiX21hY19oZWFkZXIoc2tiKSkpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwliYXRtYW5faWYgPSBmaW5kX2JhdG1hbl9pZihza2ItPmRldik7CisJaWYgKCFiYXRtYW5faWYpCisJCWdvdG8gZXJyX2ZyZWU7CisKKwkvKiBkaXNjYXJkIGZyYW1lcyBvbiBub3QgYWN0aXZlIGludGVyZmFjZXMgKi8KKwlpZiAoYmF0bWFuX2lmLT5pZl9hY3RpdmUgIT0gSUZfQUNUSVZFKQorCQlnb3RvIGVycl9mcmVlOworCisJc3RhdHMgPSAoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKilkZXZfZ2V0X3N0YXRzKHNrYi0+ZGV2KTsKKwlpZiAoc3RhdHMpIHsKKwkJc3RhdHMtPnJ4X3BhY2tldHMrKzsKKwkJc3RhdHMtPnJ4X2J5dGVzICs9IHNrYi0+bGVuOworCX0KKworCWJhdG1hbl9wYWNrZXQgPSAoc3RydWN0IGJhdG1hbl9wYWNrZXQgKilza2ItPmRhdGE7CisKKwlpZiAoYmF0bWFuX3BhY2tldC0+dmVyc2lvbiAhPSBDT01QQVRfVkVSU0lPTikgeworCQliYXRfZGJnKERCR19CQVRNQU4sCisJCQkiRHJvcCBwYWNrZXQ6IGluY29tcGF0aWJsZSBiYXRtYW4gdmVyc2lvbiAoJWkpXG4iLAorCQkJYmF0bWFuX3BhY2tldC0+dmVyc2lvbik7CisJCWdvdG8gZXJyX2ZyZWU7CisJfQorCisJLyogYWxsIHJlY2VpdmUgaGFuZGxlcnMgcmV0dXJuIHdoZXRoZXIgdGhleSByZWNlaXZlZCBvciByZXVzZWQKKwkgKiB0aGUgc3VwcGxpZWQgc2tiLiBpZiBub3QsIHdlIGhhdmUgdG8gZnJlZSB0aGUgc2tiLiAqLworCisJc3dpdGNoIChiYXRtYW5fcGFja2V0LT5wYWNrZXRfdHlwZSkgeworCQkvKiBiYXRtYW4gb3JpZ2luYXRvciBwYWNrZXQgKi8KKwljYXNlIEJBVF9QQUNLRVQ6CisJCXJldCA9IHJlY3ZfYmF0X3BhY2tldChza2IsIGJhdG1hbl9pZik7CisJCWJyZWFrOworCisJCS8qIGJhdG1hbiBpY21wIHBhY2tldCAqLworCWNhc2UgQkFUX0lDTVA6CisJCXJldCA9IHJlY3ZfaWNtcF9wYWNrZXQoc2tiKTsKKwkJYnJlYWs7CisKKwkJLyogdW5pY2FzdCBwYWNrZXQgKi8KKwljYXNlIEJBVF9VTklDQVNUOgorCQlyZXQgPSByZWN2X3VuaWNhc3RfcGFja2V0KHNrYik7CisJCWJyZWFrOworCisJCS8qIGJyb2FkY2FzdCBwYWNrZXQgKi8KKwljYXNlIEJBVF9CQ0FTVDoKKwkJcmV0ID0gcmVjdl9iY2FzdF9wYWNrZXQoc2tiKTsKKwkJYnJlYWs7CisKKwkJLyogdmlzIHBhY2tldCAqLworCWNhc2UgQkFUX1ZJUzoKKwkJcmV0ID0gcmVjdl92aXNfcGFja2V0KHNrYik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IE5FVF9SWF9EUk9QOworCX0KKworCWlmIChyZXQgPT0gTkVUX1JYX0RST1ApCisJCWtmcmVlX3NrYihza2IpOworCisJLyogcmV0dXJuIE5FVF9SWF9TVUNDRVNTIGluIGFueSBjYXNlIGFzIHdlCisJICogbW9zdCBwcm9iYWJseSBkcm9wcGVkIHRoZSBwYWNrZXQgZm9yCisJICogcm91dGluZy1sb2dpY2FsIHJlYXNvbnMuICovCisKKwlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CisKK2Vycl9mcmVlOgorCWtmcmVlX3NrYihza2IpOworZXJyX291dDoKKwlyZXR1cm4gTkVUX1JYX0RST1A7Cit9CisKKwogc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGhhcmRfaWZfbm90aWZpZXIgPSB7Ci0gICAgICAgIC5ub3RpZmllcl9jYWxsID0gaGFyZF9pZl9ldmVudCwKKwkubm90aWZpZXJfY2FsbCA9IGhhcmRfaWZfZXZlbnQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhcmQtaW50ZXJmYWNlLmgKaW5kZXggNzQyMzU4Yy4uOTdjNmVjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFyZC1pbnRlcmZhY2UuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXJkLWludGVyZmFjZS5oCkBAIC0zMiw1ICszMiw5IEBACiBjaGFyIGhhcmRpZl9nZXRfYWN0aXZlX2lmX251bSh2b2lkKTsKIHZvaWQgaGFyZGlmX2NoZWNrX2ludGVyZmFjZXNfc3RhdHVzKHZvaWQpOwogdm9pZCBoYXJkaWZfY2hlY2tfaW50ZXJmYWNlc19zdGF0dXNfd3Eoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK2ludCBiYXRtYW5fc2tiX3JlY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCXN0cnVjdCBwYWNrZXRfdHlwZSAqcHR5cGUsCisJCQkJc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KTsKIGludCBoYXJkaWZfbWluX210dSh2b2lkKTsKIHZvaWQgdXBkYXRlX21pbl9tdHUodm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXNoLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXNoLmMKaW5kZXggNjFjYjRhMi4uNWEyMDE4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFzaC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhc2guYwpAQCAtNjQsMjQgKzY0LDE4IEBACiAJa2ZyZWUoaGFzaCk7CiB9CiAKLS8qIGl0ZXJhdGUgdGhvdWdoIHRoZSBoYXNoLiBmaXJzdCBlbGVtZW50IGlzIHNlbGVjdGVkIHdpdGggaXRlcl9pbiBOVUxMLiAgdXNlCi0gKiB0aGUgcmV0dXJuZWQgaXRlcmF0b3IgdG8gYWNjZXNzIHRoZSBlbGVtZW50cyB1bnRpbCBoYXNoX2l0X3QgcmV0dXJucyBOVUxMLiAqLwotc3RydWN0IGhhc2hfaXRfdCAqaGFzaF9pdGVyYXRlKHN0cnVjdCBoYXNodGFibGVfdCAqaGFzaCwKLQkJCSAgICAgICBzdHJ1Y3QgaGFzaF9pdF90ICppdGVyX2luKQotewotCXN0cnVjdCBoYXNoX2l0X3QgKml0ZXI7CisvKiBpdGVyYXRlIHRob3VnaCB0aGUgaGFzaC4gRmlyc3QgZWxlbWVudCBpcyBzZWxlY3RlZCBpZiBhbiBpdGVyYXRvcgorICogaW5pdGlhbGl6ZWQgd2l0aCBIQVNISVQoKSBpcyBzdXBwbGllZCBhcyBpdGVyLiBVc2UgdGhlIHJldHVybmVkCisgKiAob3Igc3VwcGxpZWQpIGl0ZXJhdG9yIHRvIGFjY2VzcyB0aGUgZWxlbWVudHMgdW50aWwgaGFzaF9pdGVyYXRlIHJldHVybnMKKyAqIE5VTEwuICovCiAKK3N0cnVjdCBoYXNoX2l0X3QgKmhhc2hfaXRlcmF0ZShzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhhc2gsCisJCQkgICAgICAgc3RydWN0IGhhc2hfaXRfdCAqaXRlcikKK3sKIAlpZiAoIWhhc2gpCiAJCXJldHVybiBOVUxMOwotCi0JaWYgKGl0ZXJfaW4gPT0gTlVMTCkgewotCQlpdGVyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhhc2hfaXRfdCksIEdGUF9BVE9NSUMpOwotCQlpdGVyLT5pbmRleCA9IC0xOwotCQlpdGVyLT5idWNrZXQgPSBOVUxMOwotCQlpdGVyLT5wcmV2X2J1Y2tldCA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJaXRlciA9IGl0ZXJfaW47Ci0JfQorCWlmICghaXRlcikKKwkJcmV0dXJuIE5VTEw7CiAKIAkvKiBzYW5pdHkgY2hlY2tzIGZpcnN0IChpZiBvdXIgYnVja2V0IGdvdCBkZWxldGVkIGluIHRoZSBsYXN0CiAJICogaXRlcmF0aW9uKTogKi8KQEAgLTEzOSw3ICsxMzMsNiBAQAogCX0KIAogCS8qIG5vdGhpbmcgdG8gaXRlcmF0ZSBvdmVyIGFueW1vcmUgKi8KLQlrZnJlZShpdGVyKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFzaC5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvaGFzaC5oCmluZGV4IGJiNjBmMDguLmE3MGQ2ZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2hhc2guaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9oYXNoLmgKQEAgLTIxLDYgKzIxLDExIEBACiAKICNpZm5kZWYgX0JBVE1BTl9IQVNIX0gKICNkZWZpbmUgX0JBVE1BTl9IQVNIX0gKKyNkZWZpbmUgSEFTSElUKG5hbWUpIHN0cnVjdCBoYXNoX2l0X3QgbmFtZSA9IHsgXAorCQkuaW5kZXggPSAtMSwgLmJ1Y2tldCA9IE5VTEwsIFwKKwkJLnByZXZfYnVja2V0ID0gTlVMTCwgXAorCQkuZmlyc3RfYnVja2V0ID0gTlVMTCB9CisKIAogdHlwZWRlZiBpbnQgKCpoYXNoZGF0YV9jb21wYXJlX2NiKSh2b2lkICosIHZvaWQgKik7CiB0eXBlZGVmIGludCAoKmhhc2hkYXRhX2Nob29zZV9jYikodm9pZCAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvbG9nLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9sb2cuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM3YzdmMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9sb2cuYworKysgL2Rldi9udWxsCkBAIC0xLDE3OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgQi5BLlQuTS5BLk4uIGNvbnRyaWJ1dG9yczoKLSAqCi0gKiBNYXJlayBMaW5kbmVyLCBTaW1vbiBXdW5kZXJsaWNoCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci0gKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCi0gKiAwMjExMC0xMzAxLCBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgIm1haW4uaCIKLSNpbmNsdWRlICJsb2cuaCIKLQotI2RlZmluZSBMT0dfQlVGX01BU0sgKGxvZ19idWZfbGVuLTEpCi0jZGVmaW5lIExPR19CVUYoaWR4KSAobG9nX2J1ZlsoaWR4KSAmIExPR19CVUZfTUFTS10pCi0KLXN0YXRpYyBjaGFyIGxvZ19idWZbTE9HX0JVRl9MRU5dOwotc3RhdGljIGludCBsb2dfYnVmX2xlbiA9IExPR19CVUZfTEVOOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9nX3N0YXJ0Owotc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9nX2VuZDsKLXVpbnQ4X3QgbG9nX2xldmVsOwotCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxvZ2J1Zl9sb2NrKTsKLQotY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX2xvZ19vcGVyYXRpb25zID0gewotCS5vcGVuICAgICAgICAgICA9IGxvZ19vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IGxvZ19yZWxlYXNlLAotCS5yZWFkICAgICAgICAgICA9IGxvZ19yZWFkLAotCS53cml0ZSAgICAgICAgICA9IGxvZ193cml0ZSwKLQkucG9sbCAgICAgICAgICAgPSBsb2dfcG9sbCwKLX07Ci0KLXN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChsb2dfd2FpdCk7Ci0KLXN0YXRpYyB2b2lkIGVtaXRfbG9nX2NoYXIoY2hhciBjKQotewotCUxPR19CVUYobG9nX2VuZCkgPSBjOwotCWxvZ19lbmQrKzsKLQotCWlmIChsb2dfZW5kIC0gbG9nX3N0YXJ0ID4gbG9nX2J1Zl9sZW4pCi0JCWxvZ19zdGFydCA9IGxvZ19lbmQgLSBsb2dfYnVmX2xlbjsKLX0KLQotc3RhdGljIGludCBmZGVidWdfbG9nKGNoYXIgKmZtdCwgLi4uKQotewotCWludCBwcmludGVkX2xlbjsKLQljaGFyICpwOwotCXZhX2xpc3QgYXJnczsKLQlzdGF0aWMgY2hhciBkZWJ1Z19sb2dfYnVmWzI1Nl07Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZsb2didWZfbG9jaywgZmxhZ3MpOwotCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JcHJpbnRlZF9sZW4gPSB2c2NucHJpbnRmKGRlYnVnX2xvZ19idWYsIHNpemVvZihkZWJ1Z19sb2dfYnVmKSwgZm10LAotCQkJCSBhcmdzKTsKLQl2YV9lbmQoYXJncyk7Ci0KLQlmb3IgKHAgPSBkZWJ1Z19sb2dfYnVmOyAqcCAhPSAwOyBwKyspCi0JCWVtaXRfbG9nX2NoYXIoKnApOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9nYnVmX2xvY2ssIGZsYWdzKTsKLQotCXdha2VfdXAoJmxvZ193YWl0KTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgZGVidWdfbG9nKGludCB0eXBlLCBjaGFyICpmbXQsIC4uLikKLXsKLQl2YV9saXN0IGFyZ3M7Ci0JaW50IHJldHZhbCA9IDA7Ci0JY2hhciB0bXBfbG9nX2J1ZlsyNTZdOwotCi0JLyogb25seSBjcml0aWNhbCBpbmZvcm1hdGlvbiBnZXQgaW50byB0aGUgb2ZmaWNpYWwga2VybmVsIGxvZyAqLwotCWlmICh0eXBlID09IExPR19UWVBFX0NSSVQpIHsKLQkJdmFfc3RhcnQoYXJncywgZm10KTsKLQkJdnNjbnByaW50Zih0bXBfbG9nX2J1Ziwgc2l6ZW9mKHRtcF9sb2dfYnVmKSwgZm10LCBhcmdzKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OiAlcyIsIHRtcF9sb2dfYnVmKTsKLQkJdmFfZW5kKGFyZ3MpOwotCX0KLQotCWlmICgodHlwZSA9PSBMT0dfVFlQRV9DUklUKSB8fCAobG9nX2xldmVsICYgdHlwZSkpIHsKLQkJdmFfc3RhcnQoYXJncywgZm10KTsKLQkJdnNjbnByaW50Zih0bXBfbG9nX2J1Ziwgc2l6ZW9mKHRtcF9sb2dfYnVmKSwgZm10LCBhcmdzKTsKLQkJZmRlYnVnX2xvZygiWyUxMHVdICVzIiwgKGppZmZpZXMgLyBIWiksIHRtcF9sb2dfYnVmKTsKLQkJdmFfZW5kKGFyZ3MpOwotCX0KLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLWludCBsb2dfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlpbmNfbW9kdWxlX2NvdW50KCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBsb2dfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlkZWNfbW9kdWxlX2NvdW50KCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXNzaXplX3QgbG9nX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwKLQkJIGxvZmZfdCAqcHBvcykKLXsKLQlpbnQgZXJyb3IsIGkgPSAwOwotCWNoYXIgYzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgJiYgIShsb2dfZW5kIC0gbG9nX3N0YXJ0KSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQlpZiAoKCFidWYpIHx8IChjb3VudCA8IDApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChjb3VudCA9PSAwKQotCQlyZXR1cm4gMDsKLQotCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgYnVmLCBjb3VudCkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JZXJyb3IgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUobG9nX3dhaXQsIChsb2dfc3RhcnQgLSBsb2dfZW5kKSk7Ci0KLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZsb2didWZfbG9jaywgZmxhZ3MpOwotCi0Jd2hpbGUgKCghZXJyb3IpICYmIChsb2dfc3RhcnQgIT0gbG9nX2VuZCkgJiYgKGkgPCBjb3VudCkpIHsKLQkJYyA9IExPR19CVUYobG9nX3N0YXJ0KTsKLQotCQlsb2dfc3RhcnQrKzsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2didWZfbG9jaywgZmxhZ3MpOwotCi0JCWVycm9yID0gX19wdXRfdXNlcihjLCBidWYpOwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZsb2didWZfbG9jaywgZmxhZ3MpOwotCi0JCWJ1ZisrOwotCQlpKys7Ci0KLQl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2didWZfbG9jaywgZmxhZ3MpOwotCi0JaWYgKCFlcnJvcikKLQkJcmV0dXJuIGk7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLXNzaXplX3QgbG9nX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCi0JCSAgbG9mZl90ICpwcG9zKQotewotCXJldHVybiBjb3VudDsKLX0KLQotdW5zaWduZWQgaW50IGxvZ19wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQotewotCXBvbGxfd2FpdChmaWxlLCAmbG9nX3dhaXQsIHdhaXQpOwotCi0JaWYgKGxvZ19lbmQgLSBsb2dfc3RhcnQpCi0JCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9sb2cuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2xvZy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ODBlM2FiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L2xvZy5oCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6Ci0gKgotICogTWFyZWsgTGluZG5lciwgU2ltb24gV3VuZGVybGljaAotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQotICogMDIxMTAtMTMwMSwgVVNBCi0gKgotICovCi0KLWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfbG9nX29wZXJhdGlvbnM7Ci1leHRlcm4gdWludDhfdCBsb2dfbGV2ZWw7Ci0KLWludCBkZWJ1Z19sb2coaW50IHR5cGUsIGNoYXIgKmZtdCwgLi4uKTsKLWludCBsb2dfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1pbnQgbG9nX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOwotc3NpemVfdCBsb2dfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LAotCQkgbG9mZl90ICpwcG9zKTsKLXNzaXplX3QgbG9nX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsCi0JCSAgbG9mZl90ICpwcG9zKTsKLXVuc2lnbmVkIGludCBsb2dfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9tYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9tYWluLmMKaW5kZXggYmI4OWJmYy4uMmUwYjQ4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L21haW4uYwpAQCAtMjEsOSArMjEsOSBAQAogCiAjaW5jbHVkZSAibWFpbi5oIgogI2luY2x1ZGUgInByb2MuaCIKLSNpbmNsdWRlICJsb2cuaCIKICNpbmNsdWRlICJyb3V0aW5nLmgiCiAjaW5jbHVkZSAic2VuZC5oIgorI2luY2x1ZGUgIm9yaWdpbmF0b3IuaCIKICNpbmNsdWRlICJzb2Z0LWludGVyZmFjZS5oIgogI2luY2x1ZGUgImRldmljZS5oIgogI2luY2x1ZGUgInRyYW5zbGF0aW9uLXRhYmxlLmgiCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAidHlwZXMuaCIKICNpbmNsdWRlICJ2aXMuaCIKICNpbmNsdWRlICJoYXNoLmgiCi0jaW5jbHVkZSAiY29tcGF0LmgiCiAKIHN0cnVjdCBsaXN0X2hlYWQgaWZfbGlzdDsKIHN0cnVjdCBobGlzdF9oZWFkIGZvcndfYmF0X2xpc3Q7CkBAIC00NCwxOSArNDMsMzQgQEAKIAogYXRvbWljX3Qgb3JpZ2luYXRvcl9pbnRlcnZhbDsKIGF0b21pY190IHZpc19pbnRlcnZhbDsKK2F0b21pY190IHZpc19tb2RlOwogYXRvbWljX3QgYWdncmVnYXRpb25fZW5hYmxlZDsKIGludDE2X3QgbnVtX2huYTsKIGludDE2X3QgbnVtX2lmczsKIAogc3RydWN0IG5ldF9kZXZpY2UgKnNvZnRfZGV2aWNlOwogCi1zdGF0aWMgc3RydWN0IHRhc2tfc3RydWN0ICprdGhyZWFkX3Rhc2s7Ci0KIHVuc2lnbmVkIGNoYXIgYnJvYWRjYXN0QWRkcltdID0gezB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmZ9OwogYXRvbWljX3QgbW9kdWxlX3N0YXRlOwogCitzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGJhdG1hbl9hZHZfcGFja2V0X3R5cGUgX19yZWFkX21vc3RseSA9IHsKKwkudHlwZSA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQkFUTUFOKSwKKwkuZnVuYyA9IGJhdG1hbl9za2JfcmVjdiwKK307CisKIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpiYXRfZXZlbnRfd29ya3F1ZXVlOwogCisjaWZkZWYgQ09ORklHX0JBVE1BTl9BRFZfREVCVUcKK2ludCBkZWJ1ZzsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworCitpbnQgYmF0X2RlYnVnX3R5cGUoaW50IHR5cGUpCit7CisJcmV0dXJuIGRlYnVnICYgdHlwZTsKK30KKyNlbmRpZgorCiBpbnQgaW5pdF9tb2R1bGUodm9pZCkKIHsKIAlpbnQgcmV0dmFsOwpAQCAtNzAsNiArODQsNyBAQAogCWF0b21pY19zZXQoJm9yaWdpbmF0b3JfaW50ZXJ2YWwsIDEwMDApOwogCWF0b21pY19zZXQoJnZpc19pbnRlcnZhbCwgMTAwMCk7LyogVE9ETzogcmFpc2UgdGhpcyBsYXRlciwgdGhpcyBpcyBvbmx5CiAJCQkJCSAqIGZvciBkZWJ1Z2dpbmcgbm93LiAqLworCWF0b21pY19zZXQoJnZpc19tb2RlLCBWSVNfVFlQRV9DTElFTlRfVVBEQVRFKTsKIAlhdG9taWNfc2V0KCZhZ2dyZWdhdGlvbl9lbmFibGVkLCAxKTsKIAogCS8qIHRoZSBuYW1lIHNob3VsZCBub3QgYmUgbG9uZ2VyIHRoYW4gMTAgY2hhcnMgLSBzZWUKQEAgLTkwLDIxICsxMDUsMjIgQEAKIAkJCQkgICBpbnRlcmZhY2Vfc2V0dXApOwogCiAJaWYgKCFzb2Z0X2RldmljZSkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfQ1JJVCwgIlVuYWJsZSB0byBhbGxvY2F0ZSB0aGUgYmF0bWFuIGludGVyZmFjZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpVbmFibGUgdG8gYWxsb2NhdGUgdGhlIGJhdG1hbiBpbnRlcmZhY2VcbiIpOwogCQlnb3RvIGVuZDsKIAl9CiAKIAlyZXR2YWwgPSByZWdpc3Rlcl9uZXRkZXYoc29mdF9kZXZpY2UpOwogCiAJaWYgKHJldHZhbCA8IDApIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX0NSSVQsICJVbmFibGUgdG8gcmVnaXN0ZXIgdGhlIGJhdG1hbiBpbnRlcmZhY2U6ICVpXG4iLCByZXR2YWwpOworCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6VW5hYmxlIHRvIHJlZ2lzdGVyIHRoZSBiYXRtYW4gaW50ZXJmYWNlOiAlaVxuIiwgcmV0dmFsKTsKIAkJZ290byBmcmVlX3NvZnRfZGV2aWNlOwogCX0KIAogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmaGFyZF9pZl9ub3RpZmllcik7CisJZGV2X2FkZF9wYWNrKCZiYXRtYW5fYWR2X3BhY2tldF90eXBlKTsKIAotCWRlYnVnX2xvZyhMT0dfVFlQRV9DUklULCAiQi5BLlQuTS5BLk4uIGFkdmFuY2VkICVzJXMgKGNvbXBhdGliaWxpdHkgdmVyc2lvbiAlaSkgbG9hZGVkIFxuIiwKLQkgICAgICAgICAgU09VUkNFX1ZFUlNJT04sIFJFVklTSU9OX1ZFUlNJT05fU1RSLCBDT01QQVRfVkVSU0lPTik7CisJcHJpbnRrKEtFUk5fSU5GTyAiYmF0bWFuLWFkdjpCLkEuVC5NLkEuTi4gYWR2YW5jZWQgJXMlcyAoY29tcGF0aWJpbGl0eSB2ZXJzaW9uICVpKSBsb2FkZWQgXG4iLAorCQkgIFNPVVJDRV9WRVJTSU9OLCBSRVZJU0lPTl9WRVJTSU9OX1NUUiwgQ09NUEFUX1ZFUlNJT04pOwogCiAJcmV0dXJuIDA7CiAKQEAgLTEyNCw2ICsxNDAsOCBAQAogCQlzb2Z0X2RldmljZSA9IE5VTEw7CiAJfQogCisJZGV2X3JlbW92ZV9wYWNrKCZiYXRtYW5fYWR2X3BhY2tldF90eXBlKTsKKwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZoYXJkX2lmX25vdGlmaWVyKTsKIAljbGVhbnVwX3Byb2NmcygpOwogCkBAIC0xNTEsMjIgKzE2OSwxMiBAQAogCWlmICh2aXNfaW5pdCgpIDwgMSkKIAkJZ290byBlcnI7CiAKLQkvKiAocmUpc3RhcnQga2VybmVsIHRocmVhZCBmb3IgcGFja2V0IHByb2Nlc3NpbmcgKi8KLQlpZiAoIWt0aHJlYWRfdGFzaykgewotCQlrdGhyZWFkX3Rhc2sgPSBrdGhyZWFkX3J1bihwYWNrZXRfcmVjdl90aHJlYWQsIE5VTEwsICJiYXRtYW4tYWR2Iik7Ci0KLQkJaWYgKElTX0VSUihrdGhyZWFkX3Rhc2spKSB7Ci0JCQlkZWJ1Z19sb2coTE9HX1RZUEVfQ1JJVCwgIlVuYWJsZSB0byBzdGFydCBwYWNrZXQgcmVjZWl2ZSB0aHJlYWRcbiIpOwotCQkJa3RocmVhZF90YXNrID0gTlVMTDsKLQkJfQotCX0KLQogCXVwZGF0ZV9taW5fbXR1KCk7CiAJYXRvbWljX3NldCgmbW9kdWxlX3N0YXRlLCBNT0RVTEVfQUNUSVZFKTsKIAlnb3RvIGVuZDsKIAogZXJyOgotCWRlYnVnX2xvZyhMT0dfVFlQRV9DUklULCAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgbWVzaCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmVzOiBvdXQgb2YgbWVtID9cbiIpOworCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjpVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBtZXNoIGluZm9ybWF0aW9uIHN0cnVjdHVyZXM6IG91dCBvZiBtZW0gP1xuIik7CiAJc2h1dGRvd25fbW9kdWxlKCk7CiBlbmQ6CiAJcmV0dXJuOwpAQCAtMTgyLDE0ICsxOTAsNyBAQAogCiAJdmlzX3F1aXQoKTsKIAotCS8qIGRlYWN0aXZhdGUga2VybmVsIHRocmVhZCBmb3IgcGFja2V0IHByb2Nlc3NpbmcgKGlmIHJ1bm5pbmcpICovCi0JaWYgKGt0aHJlYWRfdGFzaykgewotCQlhdG9taWNfc2V0KCZleGl0X2NvbmQsIDEpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnRocmVhZF93YWl0KTsKLQkJa3RocmVhZF9zdG9wKGt0aHJlYWRfdGFzayk7Ci0KLQkJa3RocmVhZF90YXNrID0gTlVMTDsKLQl9CisJLyogVE9ETzogdW5yZWdpc3RlciBCQVRNQU4gcGFjayAqLwogCiAJb3JpZ2luYXRvcl9mcmVlKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L21haW4uaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L21haW4uaAppbmRleCBmYWNiNmI3Li5kZWI0MWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9tYWluLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvbWFpbi5oCkBAIC0zMywxNiArMzMsMTYgQEAKIAogI2RlZmluZSBUUV9NQVhfVkFMVUUgMjU1CiAjZGVmaW5lIEpJVFRFUiAyMAotI2RlZmluZSBUVEwgNTAJCSAgICAgICAgICAvKiBUaW1lIFRvIExpdmUgb2YgYnJvYWRjYXN0IG1lc3NhZ2VzICovCi0jZGVmaW5lIE1BWF9BRERSIDE2CSAgICAgICAgICAvKiBudW1iZXIgb2YgaW50ZXJmYWNlcyB3aGljaCBjYW4gYmUgYWRkZWQgdG8KKyNkZWZpbmUgVFRMIDUwCQkJICAvKiBUaW1lIFRvIExpdmUgb2YgYnJvYWRjYXN0IG1lc3NhZ2VzICovCisjZGVmaW5lIE1BWF9BRERSIDE2CQkgIC8qIG51bWJlciBvZiBpbnRlcmZhY2VzIHdoaWNoIGNhbiBiZSBhZGRlZCB0bwogCQkJCSAgICogYmF0bWFuLiAqLwogCi0jZGVmaW5lIFBVUkdFX1RJTUVPVVQgMjAwMDAwICAgICAgLyogcHVyZ2Ugb3JpZ2luYXRvcnMgYWZ0ZXIgdGltZSBpbiBtcyBpZiBubworI2RlZmluZSBQVVJHRV9USU1FT1VUIDIwMDAwMAkgIC8qIHB1cmdlIG9yaWdpbmF0b3JzIGFmdGVyIHRpbWUgaW4gbXMgaWYgbm8KIAkJCQkgICAqIHZhbGlkIHBhY2tldCBjb21lcyBpbiAtPiBUT0RPOiBjaGVjawogCQkJCSAgICogaW5mbHVlbmNlIG9uIFRRX0xPQ0FMX1dJTkRPV19TSVpFICovCiAjZGVmaW5lIExPQ0FMX0hOQV9USU1FT1VUIDM2MDAwMDAKIAotI2RlZmluZSBUUV9MT0NBTF9XSU5ET1dfU0laRSA2NCAgIC8qIHNsaWRpbmcgcGFja2V0IHJhbmdlIG9mIHJlY2VpdmVkIG9yaWdpbmF0b3IKKyNkZWZpbmUgVFFfTE9DQUxfV0lORE9XX1NJWkUgNjQJICAvKiBzbGlkaW5nIHBhY2tldCByYW5nZSBvZiByZWNlaXZlZCBvcmlnaW5hdG9yCiAJCQkJICAgKiBtZXNzYWdlcyBpbiBzcXVlbmNlIG51bWJlcnMgKHNob3VsZCBiZSBhCiAJCQkJICAgKiBtdWx0aXBsZSBvZiBvdXIgd29yZCBzaXplKSAqLwogI2RlZmluZSBUUV9HTE9CQUxfV0lORE9XX1NJWkUgNQpAQCAtNjksMjQgKzY5LDI3IEBACiAKIAogLyoKLSAqIExvZ2dpbmcKKyAqIERlYnVnIE1lc3NhZ2VzCiAgKi8KIAotI2RlZmluZSBMT0dfVFlQRV9DUklUIDAJCS8qIGhpZ2hlc3QgcHJpb3JpdHkgZm9yIGZhdGFsIGVycm9ycyBzdWNoIGFzCi0JCQkJICogYmxvY2tlZCBzb2NrZXRzIC8gZmFpbGVkIHBhY2tldCBkZWxpdmVyeSAvCi0JCQkJICogcHJvZ3JhbW1pbmcgZXJyb3JzICovCi0jZGVmaW5lIExPR19UWVBFX1dBUk4gMQkJLyogd2FybmluZ3MgZm9yIHNtYWxsIGVycm9ycyBsaWtlIHdyb25nIHVzZXIKLQkJCQkgKiBpbnB1dCAvIGRhbWFnZWQgcGFja2V0cyAvIGV0YyAqLwotI2RlZmluZSBMT0dfVFlQRV9OT1RJQ0UgMgkvKiBub3RpY2UgaW5mb3JtYXRpb24gZm9yIG5ldyBpbnRlcmZhY2VzIC8KLQkJCQkgKiBjaGFuZ2VkIHNldHRpbmdzIC8gbmV3IG9yaWdpbmF0b3JzIC8gZXRjICovCi0jZGVmaW5lIExPR19UWVBFX0JBVE1BTiA0CS8qIGFsbCBtZXNzYWdlcyByZWxhdGVkIHRvIHJvdXRpbmcgLyBmbG9vZGluZyAvCi0JCQkJICogYnJvYWRjYXN0aW5nIC8gZXRjICovCi0jZGVmaW5lIExPR19UWVBFX1JPVVRFUyA4CS8qIHJvdXRlIG9yIGhuYSBhZGRlZCAvIGNoYW5nZWQgLyBkZWxldGVkICovCi0jZGVmaW5lIExPR19UWVBFX0NSSVRfTkFNRQkiY3JpdGljYWwiCi0jZGVmaW5lIExPR19UWVBFX1dBUk5fTkFNRQkid2FybmluZ3MiCi0jZGVmaW5lIExPR19UWVBFX05PVElDRV9OQU1FCSJub3RpY2VzIgotI2RlZmluZSBMT0dfVFlQRV9CQVRNQU5fTkFNRQkiYmF0bWFuIgotI2RlZmluZSBMT0dfVFlQRV9ST1VURVNfTkFNRQkicm91dGVzIgorI2RlZmluZSBEQkdfQkFUTUFOIDEJLyogYWxsIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gcm91dGluZyAvIGZsb29kaW5nIC8KKwkJCSAqIGJyb2FkY2FzdGluZyAvIGV0YyAqLworI2RlZmluZSBEQkdfUk9VVEVTIDIJLyogcm91dGUgb3IgaG5hIGFkZGVkIC8gY2hhbmdlZCAvIGRlbGV0ZWQgKi8KKworI2lmZGVmIENPTkZJR19CQVRNQU5fQURWX0RFQlVHCitleHRlcm4gaW50IGRlYnVnOworCitleHRlcm4gaW50IGJhdF9kZWJ1Z190eXBlKGludCB0eXBlKTsKKyNkZWZpbmUgYmF0X2RiZyh0eXBlLCBmbXQsIGFyZy4uLikgZG8gewkJCQkJXAorCQlpZiAoYmF0X2RlYnVnX3R5cGUodHlwZSkpCQkJCVwKKwkJCXByaW50ayhLRVJOX0RFQlVHICJiYXRtYW4tYWR2OiIgZm10LCAjIyBhcmcpOwlcCisJfQkJCQkJCQkJXAorCXdoaWxlICgwKQorI2Vsc2UgLyogIUNPTkZJR19CQVRNQU5fQURWX0RFQlVHICovCisjZGVmaW5lIGJhdF9kYmcodHlwZSwgZm10LCBhcmcuLi4pIGRvIHsJCVwKKwl9CQkJCQlcCisJd2hpbGUgKDApCisjZW5kaWYKIAogLyoKICAqICBWaXMKQEAgLTEyNyw2ICsxMzAsNyBAQAogCiBleHRlcm4gYXRvbWljX3Qgb3JpZ2luYXRvcl9pbnRlcnZhbDsKIGV4dGVybiBhdG9taWNfdCB2aXNfaW50ZXJ2YWw7CitleHRlcm4gYXRvbWljX3QgdmlzX21vZGU7CiBleHRlcm4gYXRvbWljX3QgYWdncmVnYXRpb25fZW5hYmxlZDsKIGV4dGVybiBpbnQxNl90IG51bV9obmE7CiBleHRlcm4gaW50MTZfdCBudW1faWZzOwpAQCAtMTQ3LDUgKzE1MSwzIEBACiBpbnQgaXNfbXlfbWFjKHVpbnQ4X3QgKmFkZHIpOwogaW50IGlzX2JjYXN0KHVpbnQ4X3QgKmFkZHIpOwogaW50IGlzX21jYXN0KHVpbnQ4X3QgKmFkZHIpOwotCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L29yaWdpbmF0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWMyNDExCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvb3JpZ2luYXRvci5jCkBAIC0wLDAgKzEsMjUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6CisgKgorICogTWFyZWsgTGluZG5lciwgU2ltb24gV3VuZGVybGljaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKgorICovCisKKy8qIGluY3JlYXNlIHRoZSByZWZlcmVuY2UgY291bnRlciBmb3IgdGhpcyBvcmlnaW5hdG9yICovCisKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAib3JpZ2luYXRvci5oIgorI2luY2x1ZGUgImhhc2guaCIKKyNpbmNsdWRlICJ0cmFuc2xhdGlvbi10YWJsZS5oIgorI2luY2x1ZGUgInJvdXRpbmcuaCIKKworc3RhdGljIERFQ0xBUkVfREVMQVlFRF9XT1JLKHB1cmdlX29yaWdfd3EsIHB1cmdlX29yaWcpOworCitzdGF0aWMgdm9pZCBzdGFydF9wdXJnZV90aW1lcih2b2lkKQoreworCXF1ZXVlX2RlbGF5ZWRfd29yayhiYXRfZXZlbnRfd29ya3F1ZXVlLCAmcHVyZ2Vfb3JpZ193cSwgMSAqIEhaKTsKK30KKworaW50IG9yaWdpbmF0b3JfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaWYgKG9yaWdfaGFzaCkKKwkJcmV0dXJuIDE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKwlvcmlnX2hhc2ggPSBoYXNoX25ldygxMjgsIGNvbXBhcmVfb3JpZywgY2hvb3NlX29yaWcpOworCisJaWYgKCFvcmlnX2hhc2gpCisJCWdvdG8gZXJyOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKwlzdGFydF9wdXJnZV90aW1lcigpOworCXJldHVybiAxOworCitlcnI6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBvcmlnaW5hdG9yX2ZyZWUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFvcmlnX2hhc2gpCisJCXJldHVybjsKKworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcHVyZ2Vfb3JpZ193cSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKwloYXNoX2RlbGV0ZShvcmlnX2hhc2gsIGZyZWVfb3JpZ19ub2RlKTsKKwlvcmlnX2hhc2ggPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7Cit9CisKK3N0cnVjdCBuZWlnaF9ub2RlICoKK2NyZWF0ZV9uZWlnaGJvcihzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbmVpZ2hfbm9kZSwKKwkJdWludDhfdCAqbmVpZ2gsIHN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKQoreworCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlOworCisJYmF0X2RiZyhEQkdfQkFUTUFOLCAiQ3JlYXRpbmcgbmV3IGxhc3QtaG9wIG5laWdoYm9yIG9mIG9yaWdpbmF0b3JcbiIpOworCisJbmVpZ2hfbm9kZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZWlnaF9ub2RlKSwgR0ZQX0FUT01JQyk7CisJaWYgKCFuZWlnaF9ub2RlKQorCQlyZXR1cm4gTlVMTDsKKworCUlOSVRfTElTVF9IRUFEKCZuZWlnaF9ub2RlLT5saXN0KTsKKworCW1lbWNweShuZWlnaF9ub2RlLT5hZGRyLCBuZWlnaCwgRVRIX0FMRU4pOworCW5laWdoX25vZGUtPm9yaWdfbm9kZSA9IG9yaWdfbmVpZ2hfbm9kZTsKKwluZWlnaF9ub2RlLT5pZl9pbmNvbWluZyA9IGlmX2luY29taW5nOworCisJbGlzdF9hZGRfdGFpbCgmbmVpZ2hfbm9kZS0+bGlzdCwgJm9yaWdfbm9kZS0+bmVpZ2hfbGlzdCk7CisJcmV0dXJuIG5laWdoX25vZGU7Cit9CisKK3ZvaWQgZnJlZV9vcmlnX25vZGUodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X3BvcywgKmxpc3RfcG9zX3RtcDsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZTsKKwlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUgPSAoc3RydWN0IG9yaWdfbm9kZSAqKWRhdGE7CisKKwkvKiBmb3IgYWxsIG5laWdoYm9ycyB0b3dhcmRzIHRoaXMgb3JpZ2luYXRvciAuLi4gKi8KKwlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdF9wb3MsIGxpc3RfcG9zX3RtcCwgJm9yaWdfbm9kZS0+bmVpZ2hfbGlzdCkgeworCQluZWlnaF9ub2RlID0gbGlzdF9lbnRyeShsaXN0X3Bvcywgc3RydWN0IG5laWdoX25vZGUsIGxpc3QpOworCisJCWxpc3RfZGVsKGxpc3RfcG9zKTsKKwkJa2ZyZWUobmVpZ2hfbm9kZSk7CisJfQorCisJaG5hX2dsb2JhbF9kZWxfb3JpZyhvcmlnX25vZGUsICJvcmlnaW5hdG9yIHRpbWVkIG91dCIpOworCisJa2ZyZWUob3JpZ19ub2RlLT5iY2FzdF9vd24pOworCWtmcmVlKG9yaWdfbm9kZS0+YmNhc3Rfb3duX3N1bSk7CisJa2ZyZWUob3JpZ19ub2RlKTsKK30KKworLyogdGhpcyBmdW5jdGlvbiBmaW5kcyBvciBjcmVhdGVzIGFuIG9yaWdpbmF0b3IgZW50cnkgZm9yIHRoZSBnaXZlbgorICogYWRkcmVzcyBpZiBpdCBkb2VzIG5vdCBleGl0cyAqLworc3RydWN0IG9yaWdfbm9kZSAqZ2V0X29yaWdfbm9kZSh1aW50OF90ICphZGRyKQoreworCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwlzdHJ1Y3QgaGFzaHRhYmxlX3QgKnN3YXBoYXNoOworCWludCBzaXplOworCisJb3JpZ19ub2RlID0gKChzdHJ1Y3Qgb3JpZ19ub2RlICopaGFzaF9maW5kKG9yaWdfaGFzaCwgYWRkcikpOworCisJaWYgKG9yaWdfbm9kZSAhPSBOVUxMKQorCQlyZXR1cm4gb3JpZ19ub2RlOworCisJYmF0X2RiZyhEQkdfQkFUTUFOLCAiQ3JlYXRpbmcgbmV3IG9yaWdpbmF0b3I6ICVwTSBcbiIsIGFkZHIpOworCisJb3JpZ19ub2RlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9yaWdfbm9kZSksIEdGUF9BVE9NSUMpOworCWlmICghb3JpZ19ub2RlKQorCQlyZXR1cm4gTlVMTDsKKworCUlOSVRfTElTVF9IRUFEKCZvcmlnX25vZGUtPm5laWdoX2xpc3QpOworCisJbWVtY3B5KG9yaWdfbm9kZS0+b3JpZywgYWRkciwgRVRIX0FMRU4pOworCW9yaWdfbm9kZS0+cm91dGVyID0gTlVMTDsKKwlvcmlnX25vZGUtPmJhdG1hbl9pZiA9IE5VTEw7CisJb3JpZ19ub2RlLT5obmFfYnVmZiA9IE5VTEw7CisKKwlzaXplID0gbnVtX2lmcyAqIHNpemVvZihUWVBFX09GX1dPUkQpICogTlVNX1dPUkRTOworCisJb3JpZ19ub2RlLT5iY2FzdF9vd24gPSBremFsbG9jKHNpemUsIEdGUF9BVE9NSUMpOworCWlmICghb3JpZ19ub2RlLT5iY2FzdF9vd24pCisJCWdvdG8gZnJlZV9vcmlnX25vZGU7CisKKwlzaXplID0gbnVtX2lmcyAqIHNpemVvZih1aW50OF90KTsKKwlvcmlnX25vZGUtPmJjYXN0X293bl9zdW0gPSBremFsbG9jKHNpemUsIEdGUF9BVE9NSUMpOworCWlmICghb3JpZ19ub2RlLT5iY2FzdF9vd25fc3VtKQorCQlnb3RvIGZyZWVfYmNhc3Rfb3duOworCisJaWYgKGhhc2hfYWRkKG9yaWdfaGFzaCwgb3JpZ19ub2RlKSA8IDApCisJCWdvdG8gZnJlZV9iY2FzdF9vd25fc3VtOworCisJaWYgKG9yaWdfaGFzaC0+ZWxlbWVudHMgKiA0ID4gb3JpZ19oYXNoLT5zaXplKSB7CisJCXN3YXBoYXNoID0gaGFzaF9yZXNpemUob3JpZ19oYXNoLCBvcmlnX2hhc2gtPnNpemUgKiAyKTsKKworCQlpZiAoc3dhcGhhc2ggPT0gTlVMTCkKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJiYXRtYW4tYWR2OkNvdWxkbid0IHJlc2l6ZSBvcmlnIGhhc2ggdGFibGUgXG4iKTsKKwkJZWxzZQorCQkJb3JpZ19oYXNoID0gc3dhcGhhc2g7CisJfQorCisJcmV0dXJuIG9yaWdfbm9kZTsKK2ZyZWVfYmNhc3Rfb3duX3N1bToKKwlrZnJlZShvcmlnX25vZGUtPmJjYXN0X293bl9zdW0pOworZnJlZV9iY2FzdF9vd246CisJa2ZyZWUob3JpZ19ub2RlLT5iY2FzdF9vd24pOworZnJlZV9vcmlnX25vZGU6CisJa2ZyZWUob3JpZ19ub2RlKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGJvb2wgcHVyZ2Vfb3JpZ19uZWlnaGJvcnMoc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLAorCQkJCSBzdHJ1Y3QgbmVpZ2hfbm9kZSAqKmJlc3RfbmVpZ2hfbm9kZSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0X3BvcywgKmxpc3RfcG9zX3RtcDsKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZTsKKwlib29sIG5laWdoX3B1cmdlZCA9IGZhbHNlOworCisJKmJlc3RfbmVpZ2hfbm9kZSA9IE5VTEw7CisKKworCS8qIGZvciBhbGwgbmVpZ2hib3JzIHRvd2FyZHMgdGhpcyBvcmlnaW5hdG9yIC4uLiAqLworCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X3BvcywgbGlzdF9wb3NfdG1wLCAmb3JpZ19ub2RlLT5uZWlnaF9saXN0KSB7CisJCW5laWdoX25vZGUgPSBsaXN0X2VudHJ5KGxpc3RfcG9zLCBzdHJ1Y3QgbmVpZ2hfbm9kZSwgbGlzdCk7CisKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKKwkJCSAgICAgICAobmVpZ2hfbm9kZS0+bGFzdF92YWxpZCArCisJCQkJKChQVVJHRV9USU1FT1VUICogSFopIC8gMTAwMCkpKSkgeworCisJCQliYXRfZGJnKERCR19CQVRNQU4sICJuZWlnaGJvciB0aW1lb3V0OiBvcmlnaW5hdG9yICVwTSwgbmVpZ2hib3I6ICVwTSwgbGFzdF92YWxpZCAlbHVcbiIsIG9yaWdfbm9kZS0+b3JpZywgbmVpZ2hfbm9kZS0+YWRkciwgKG5laWdoX25vZGUtPmxhc3RfdmFsaWQgLyBIWikpOworCisJCQluZWlnaF9wdXJnZWQgPSB0cnVlOworCQkJbGlzdF9kZWwobGlzdF9wb3MpOworCQkJa2ZyZWUobmVpZ2hfbm9kZSk7CisJCX0gZWxzZSB7CisJCQlpZiAoKCpiZXN0X25laWdoX25vZGUgPT0gTlVMTCkgfHwKKwkJCSAgICAobmVpZ2hfbm9kZS0+dHFfYXZnID4gKCpiZXN0X25laWdoX25vZGUpLT50cV9hdmcpKQorCQkJCSpiZXN0X25laWdoX25vZGUgPSBuZWlnaF9ub2RlOworCQl9CisJfQorCXJldHVybiBuZWlnaF9wdXJnZWQ7Cit9CisKKworc3RhdGljIGJvb2wgcHVyZ2Vfb3JpZ19ub2RlKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSkKK3sKKwlzdHJ1Y3QgbmVpZ2hfbm9kZSAqYmVzdF9uZWlnaF9ub2RlOworCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKKwkJICAgICAgIChvcmlnX25vZGUtPmxhc3RfdmFsaWQgKworCQkJKCgyICogUFVSR0VfVElNRU9VVCAqIEhaKSAvIDEwMDApKSkpIHsKKworCQliYXRfZGJnKERCR19CQVRNQU4sCisJCQkiT3JpZ2luYXRvciB0aW1lb3V0OiBvcmlnaW5hdG9yICVwTSwgbGFzdF92YWxpZCAlbHVcbiIsCisJCQlvcmlnX25vZGUtPm9yaWcsIChvcmlnX25vZGUtPmxhc3RfdmFsaWQgLyBIWikpOworCQlyZXR1cm4gdHJ1ZTsKKwl9IGVsc2UgeworCQlpZiAocHVyZ2Vfb3JpZ19uZWlnaGJvcnMob3JpZ19ub2RlLCAmYmVzdF9uZWlnaF9ub2RlKSkKKwkJCXVwZGF0ZV9yb3V0ZXMob3JpZ19ub2RlLCBiZXN0X25laWdoX25vZGUsCisJCQkJICAgICAgb3JpZ19ub2RlLT5obmFfYnVmZiwKKwkJCQkgICAgICBvcmlnX25vZGUtPmhuYV9idWZmX2xlbik7CisJfQorCXJldHVybiBmYWxzZTsKK30KKwordm9pZCBwdXJnZV9vcmlnKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlIQVNISVQoaGFzaGl0KTsKKwlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworCisJLyogZm9yIGFsbCBvcmlnaW5zLi4uICovCisJd2hpbGUgKGhhc2hfaXRlcmF0ZShvcmlnX2hhc2gsICZoYXNoaXQpKSB7CisJCW9yaWdfbm9kZSA9IGhhc2hpdC5idWNrZXQtPmRhdGE7CisJCWlmIChwdXJnZV9vcmlnX25vZGUob3JpZ19ub2RlKSkgeworCQkJaGFzaF9yZW1vdmVfYnVja2V0KG9yaWdfaGFzaCwgJmhhc2hpdCk7CisJCQlmcmVlX29yaWdfbm9kZShvcmlnX25vZGUpOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKworCXN0YXJ0X3B1cmdlX3RpbWVyKCk7Cit9CisKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvb3JpZ2luYXRvci5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvb3JpZ2luYXRvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZjdhMDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9vcmlnaW5hdG9yLmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNy0yMDA5IEIuQS5ULk0uQS5OLiBjb250cmlidXRvcnM6CisgKgorICogTWFyZWsgTGluZG5lciwgU2ltb24gV3VuZGVybGljaAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSwgVVNBCisgKgorICovCisKK2ludCBvcmlnaW5hdG9yX2luaXQodm9pZCk7Cit2b2lkIGZyZWVfb3JpZ19ub2RlKHZvaWQgKmRhdGEpOwordm9pZCBvcmlnaW5hdG9yX2ZyZWUodm9pZCk7Cit2b2lkIHB1cmdlX29yaWcoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0cnVjdCBvcmlnX25vZGUgKm9yaWdfZmluZChjaGFyICptYWMpOworc3RydWN0IG9yaWdfbm9kZSAqZ2V0X29yaWdfbm9kZSh1aW50OF90ICphZGRyKTsKK3N0cnVjdCBuZWlnaF9ub2RlICoKK2NyZWF0ZV9uZWlnaGJvcihzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbmVpZ2hfbm9kZSwKKwkJdWludDhfdCAqbmVpZ2gsIHN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcGFja2V0LmggYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9wYWNrZXQuaAppbmRleCA1NjI3Y2EzLi5hZDAwNmNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9wYWNrZXQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9wYWNrZXQuaApAQCAtOTAsNyArOTAsNyBAQAogCXVpbnQ4X3QgIGVudHJpZXM7CSAvKiBudW1iZXIgb2YgZW50cmllcyBiZWhpbmQgdGhpcyBzdHJ1Y3QgKi8KIAl1aW50OF90ICB0dGw7CQkgLyogVFRMICovCiAJdWludDhfdCAgdmlzX29yaWdbNl07CSAvKiBvcmlnaW5hdG9yIHRoYXQgaW5mb3JtcyBhYm91dCBpdHMKLQkJCQkgICogbmVpZ2hib3VycyAqLworCQkJCSAgKiBuZWlnaGJvcnMgKi8KIAl1aW50OF90ICB0YXJnZXRfb3JpZ1s2XTsgLyogd2hvIHNob3VsZCByZWNlaXZlIHRoaXMgcGFja2V0ICovCiAJdWludDhfdCAgc2VuZGVyX29yaWdbNl07IC8qIHdobyBzZW50IG9yIHJlYnJvYWRjYXN0ZWQgdGhpcyBwYWNrZXQgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9wcm9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9wcm9jLmMKaW5kZXggYWFjM2RmNy4uN2RlNjBlODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Byb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9wcm9jLmMKQEAgLTIxLDIzICsyMSwxOCBAQAogCiAjaW5jbHVkZSAibWFpbi5oIgogI2luY2x1ZGUgInByb2MuaCIKLSNpbmNsdWRlICJsb2cuaCIKICNpbmNsdWRlICJyb3V0aW5nLmgiCiAjaW5jbHVkZSAidHJhbnNsYXRpb24tdGFibGUuaCIKICNpbmNsdWRlICJoYXJkLWludGVyZmFjZS5oIgogI2luY2x1ZGUgInR5cGVzLmgiCiAjaW5jbHVkZSAiaGFzaC5oIgogI2luY2x1ZGUgInZpcy5oIgotI2luY2x1ZGUgImNvbXBhdC5oIgotCi1zdGF0aWMgdWludDhfdCB2aXNfZm9ybWF0ID0gRE9UX0RSQVc7CiAKIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfYmF0bWFuX2RpciwgKnByb2NfaW50ZXJmYWNlX2ZpbGU7CiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX29yaWdfaW50ZXJ2YWxfZmlsZSwgKnByb2Nfb3JpZ2luYXRvcnNfZmlsZTsKLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfbG9nX2ZpbGUsICpwcm9jX2xvZ19sZXZlbF9maWxlOwogc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY190cmFuc3RfbG9jYWxfZmlsZTsKIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfdHJhbnN0X2dsb2JhbF9maWxlOwotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY192aXNfZmlsZSwgKnByb2NfdmlzX2Zvcm1hdF9maWxlOworc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY192aXNfc3J2X2ZpbGUsICpwcm9jX3Zpc19kYXRhX2ZpbGU7CiBzdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2FnZ3JfZmlsZTsKIAogc3RhdGljIGludCBwcm9jX2ludGVyZmFjZXNfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQpAQCAtNjgsNyArNjMsNyBAQAogCQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmRhdGEpCiB7CiAJY2hhciAqaWZfc3RyaW5nLCAqY29sb25fcHRyID0gTlVMTCwgKmNyX3B0ciA9IE5VTEw7Ci0JaW50IG5vdF9jb3BpZWQgPSAwLCBpZl9udW0gPSAwOworCWludCBub3RfY29waWVkID0gMCwgaWZfbnVtID0gMCwgYWRkX3N1Y2Nlc3M7CiAJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmID0gTlVMTDsKIAogCWlmX3N0cmluZyA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOwpAQCAtNzcsOCArNzIsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWlmIChjb3VudCA+IElGTkFNU0laIC0gMSkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfV0FSTiwKLQkJCSAgIkNhbid0IGFkZCBpbnRlcmZhY2U6IGRldmljZSBuYW1lIGlzIHRvbyBsb25nXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmF0bWFuLWFkdjpDYW4ndCBhZGQgaW50ZXJmYWNlOiBkZXZpY2UgbmFtZSBpcyB0b28gbG9uZ1xuIik7CiAJCWdvdG8gZW5kOwogCX0KIApAQCAtMTA1LDcgKzk5LDcgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoYmF0bWFuX2lmLCAmaWZfbGlzdCwgbGlzdCkgewogCQlpZiAoc3RybmNtcChiYXRtYW5faWYtPmRldiwgaWZfc3RyaW5nLCBjb3VudCkgPT0gMCkgewotCQkJZGVidWdfbG9nKExPR19UWVBFX1dBUk4sICJHaXZlbiBpbnRlcmZhY2UgaXMgYWxyZWFkeSBhY3RpdmU6ICVzXG4iLCBpZl9zdHJpbmcpOworCQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OkdpdmVuIGludGVyZmFjZSBpcyBhbHJlYWR5IGFjdGl2ZTogJXNcbiIsIGlmX3N0cmluZyk7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCWdvdG8gZW5kOwogCkBAIC0xMTUsMjIgKzEwOSwxNyBAQAogCX0KIAlyY3VfcmVhZF91bmxvY2soKTsKIAotCWhhcmRpZl9hZGRfaW50ZXJmYWNlKGlmX3N0cmluZywgaWZfbnVtKTsKKwlhZGRfc3VjY2VzcyA9IGhhcmRpZl9hZGRfaW50ZXJmYWNlKGlmX3N0cmluZywgaWZfbnVtKTsKKwlpZiAoYWRkX3N1Y2Nlc3MgPCAwKQorCQlnb3RvIGVuZDsKKworCW51bV9pZnMgPSBpZl9udW0gKyAxOwogCiAJaWYgKChhdG9taWNfcmVhZCgmbW9kdWxlX3N0YXRlKSA9PSBNT0RVTEVfSU5BQ1RJVkUpICYmCiAJICAgIChoYXJkaWZfZ2V0X2FjdGl2ZV9pZl9udW0oKSA+IDApKQogCQlhY3RpdmF0ZV9tb2R1bGUoKTsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQlpZiAobGlzdF9lbXB0eSgmaWZfbGlzdCkpIHsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCWdvdG8gZW5kOwotCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCW51bV9pZnMgPSBpZl9udW0gKyAxOwogCXJldHVybiBjb3VudDsKLQogZW5kOgogCWtmcmVlKGlmX3N0cmluZyk7CiAJcmV0dXJuIGNvdW50OwpAQCAtMTYyLDIwICsxNTEsMTggQEAKIAogCXJldHZhbCA9IHN0cmljdF9zdHJ0b3VsKGludGVydmFsX3N0cmluZywgMTAsICZvcmlnaW5hdG9yX2ludGVydmFsX3RtcCk7CiAJaWYgKHJldHZhbCkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfV0FSTiwgIk5ldyBvcmlnaW5hdG9yIGludGVydmFsIGludmFsaWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6TmV3IG9yaWdpbmF0b3IgaW50ZXJ2YWwgaW52YWxpZFxuIik7CiAJCWdvdG8gZW5kOwogCX0KIAogCWlmIChvcmlnaW5hdG9yX2ludGVydmFsX3RtcCA8PSBKSVRURVIgKiAyKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9XQVJOLAotCQkJICAiTmV3IG9yaWdpbmF0b3IgaW50ZXJ2YWwgdG9vIHNtYWxsOiAlaSAobWluOiAlaSlcbiIsCi0JCQkgIG9yaWdpbmF0b3JfaW50ZXJ2YWxfdG1wLCBKSVRURVIgKiAyKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmF0bWFuLWFkdjpOZXcgb3JpZ2luYXRvciBpbnRlcnZhbCB0b28gc21hbGw6ICVsaSAobWluOiAlaSlcbiIsCisJCSAgICAgICBvcmlnaW5hdG9yX2ludGVydmFsX3RtcCwgSklUVEVSICogMik7CiAJCWdvdG8gZW5kOwogCX0KIAotCWRlYnVnX2xvZyhMT0dfVFlQRV9OT1RJQ0UsCi0JCSAgIkNoYW5naW5nIG9yaWdpbmF0b3IgaW50ZXJ2YWwgZnJvbTogJWkgdG86ICVpXG4iLAotCQkgIGF0b21pY19yZWFkKCZvcmlnaW5hdG9yX2ludGVydmFsKSwgb3JpZ2luYXRvcl9pbnRlcnZhbF90bXApOworCXByaW50ayhLRVJOX0lORk8gImJhdG1hbi1hZHY6Q2hhbmdpbmcgb3JpZ2luYXRvciBpbnRlcnZhbCBmcm9tOiAlaSB0bzogJWxpXG4iLAorCSAgICAgICBhdG9taWNfcmVhZCgmb3JpZ2luYXRvcl9pbnRlcnZhbCksIG9yaWdpbmF0b3JfaW50ZXJ2YWxfdG1wKTsKIAogCWF0b21pY19zZXQoJm9yaWdpbmF0b3JfaW50ZXJ2YWwsIG9yaWdpbmF0b3JfaW50ZXJ2YWxfdG1wKTsKIApAQCAtMTkxLDExICsxNzgsMTIgQEAKIAogc3RhdGljIGludCBwcm9jX29yaWdpbmF0b3JzX3JlYWQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKLQlzdHJ1Y3QgaGFzaF9pdF90ICpoYXNoaXQgPSBOVUxMOworCUhBU0hJVChoYXNoaXQpOwogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKIAlzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZTsKIAlpbnQgYmF0bWFuX2NvdW50ID0gMDsKIAljaGFyIG9yaWdfc3RyW0VUSF9TVFJfTEVOXSwgcm91dGVyX3N0cltFVEhfU1RSX0xFTl07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlpZiAobGlzdF9lbXB0eSgmaWZfbGlzdCkpIHsKQEAgLTIxOCwxMSArMjA2LDExIEBACiAJCSAgICgoc3RydWN0IGJhdG1hbl9pZiAqKWlmX2xpc3QubmV4dCktPmFkZHJfc3RyKTsKIAogCXJjdV9yZWFkX3VubG9jaygpOwotCXNwaW5fbG9jaygmb3JpZ19oYXNoX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwogCi0Jd2hpbGUgKE5VTEwgIT0gKGhhc2hpdCA9IGhhc2hfaXRlcmF0ZShvcmlnX2hhc2gsIGhhc2hpdCkpKSB7CisJd2hpbGUgKGhhc2hfaXRlcmF0ZShvcmlnX2hhc2gsICZoYXNoaXQpKSB7CiAKLQkJb3JpZ19ub2RlID0gaGFzaGl0LT5idWNrZXQtPmRhdGE7CisJCW9yaWdfbm9kZSA9IGhhc2hpdC5idWNrZXQtPmRhdGE7CiAKIAkJaWYgKCFvcmlnX25vZGUtPnJvdXRlcikKIAkJCWNvbnRpbnVlOwpAQCAtMjQ5LDcgKzIzNyw3IEBACiAKIAl9CiAKLQlzcGluX3VubG9jaygmb3JpZ19oYXNoX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiAKIAlpZiAoYmF0bWFuX2NvdW50ID09IDApCiAJCXNlcV9wcmludGYoc2VxLCAiTm8gYmF0bWFuIG5vZGVzIGluIHJhbmdlIC4uLiBcbiIpOwpAQCAtMjYzLDg0ICsyNTEsNiBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcm9jX29yaWdpbmF0b3JzX3JlYWQsIE5VTEwpOwogfQogCi1zdGF0aWMgaW50IHByb2NfbG9nX2xldmVsX3JlYWQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKLXsKLQotCXNlcV9wcmludGYoc2VxLCAiW3hdICVzICglZClcbiIsIExPR19UWVBFX0NSSVRfTkFNRSwgTE9HX1RZUEVfQ1JJVCk7Ci0Jc2VxX3ByaW50ZihzZXEsICJbJWNdICVzICglZClcbiIsCi0JCSAgIChMT0dfVFlQRV9XQVJOICYgbG9nX2xldmVsKSA/ICd4JyA6ICcgJywKLQkJICAgTE9HX1RZUEVfV0FSTl9OQU1FLCBMT0dfVFlQRV9XQVJOKTsKLQlzZXFfcHJpbnRmKHNlcSwgIlslY10gJXMgKCVkKVxuIiwKLQkJICAgKExPR19UWVBFX05PVElDRSAmIGxvZ19sZXZlbCkgPyAneCcgOiAnICcsCi0JCSAgIExPR19UWVBFX05PVElDRV9OQU1FLCBMT0dfVFlQRV9OT1RJQ0UpOwotCXNlcV9wcmludGYoc2VxLCAiWyVjXSAlcyAoJWQpXG4iLAotCQkgICAoTE9HX1RZUEVfQkFUTUFOICYgbG9nX2xldmVsKSA/ICd4JyA6ICcgJywKLQkJICAgTE9HX1RZUEVfQkFUTUFOX05BTUUsIExPR19UWVBFX0JBVE1BTik7Ci0Jc2VxX3ByaW50ZihzZXEsICJbJWNdICVzICglZClcbiIsCi0JCSAgIChMT0dfVFlQRV9ST1VURVMgJiBsb2dfbGV2ZWwpID8gJ3gnIDogJyAnLAotCQkgICBMT0dfVFlQRV9ST1VURVNfTkFNRSwgTE9HX1RZUEVfUk9VVEVTKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBwcm9jX2xvZ19sZXZlbF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcm9jX2xvZ19sZXZlbF9yZWFkLCBOVUxMKTsKLX0KLQotc3RhdGljIHNzaXplX3QgcHJvY19sb2dfbGV2ZWxfd3JpdGUoc3RydWN0IGZpbGUgKmluc3RhbmNlLAotCQkJCSAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcmJ1ZmZlciwKLQkJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKmRhdGEpCi17Ci0JY2hhciAqbG9nX2xldmVsX3N0cmluZywgKnRva3B0ciwgKmNwOwotCWludCBmaW5pc2hlZCwgbm90X2NvcGllZCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBsb2dfbGV2ZWxfdG1wID0gMDsKLQotCWxvZ19sZXZlbF9zdHJpbmcgPSBrbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKLQotCWlmICghbG9nX2xldmVsX3N0cmluZykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlub3RfY29waWVkID0gY29weV9mcm9tX3VzZXIobG9nX2xldmVsX3N0cmluZywgdXNlcmJ1ZmZlciwgY291bnQpOwotCWxvZ19sZXZlbF9zdHJpbmdbY291bnQgLSBub3RfY29waWVkIC0gMV0gPSAwOwotCi0JaWYgKHN0cmljdF9zdHJ0b3VsKGxvZ19sZXZlbF9zdHJpbmcsIDEwLCAmbG9nX2xldmVsX3RtcCkgPCAwKSB7Ci0JCS8qIHdhcyBub3QgYSBudW1iZXIsIGRvaW5nIHRleHR1YWwgcGFyc2luZyAqLwotCQlsb2dfbGV2ZWxfdG1wID0gMDsKLQkJdG9rcHRyID0gbG9nX2xldmVsX3N0cmluZzsKLQotCQlmb3IgKGNwID0gbG9nX2xldmVsX3N0cmluZywgZmluaXNoZWQgPSAwOyAhZmluaXNoZWQ7IGNwKyspIHsKLQkJCXN3aXRjaCAoKmNwKSB7Ci0JCQljYXNlIDA6Ci0JCQkJZmluaXNoZWQgPSAxOwotCQkJY2FzZSAnICc6Ci0JCQljYXNlICdcbic6Ci0JCQljYXNlICdcdCc6Ci0JCQkJKmNwID0gMDsKLQkJCQkvKiBjb21wYXJlICovCi0JCQkJaWYgKHN0cmNtcCh0b2twdHIsIExPR19UWVBFX1dBUk5fTkFNRSkgPT0gMCkKLQkJCQkJbG9nX2xldmVsX3RtcCB8PSBMT0dfVFlQRV9XQVJOOwotCQkJCWlmIChzdHJjbXAodG9rcHRyLCBMT0dfVFlQRV9OT1RJQ0VfTkFNRSkgPT0gMCkKLQkJCQkJbG9nX2xldmVsX3RtcCB8PSBMT0dfVFlQRV9OT1RJQ0U7Ci0JCQkJaWYgKHN0cmNtcCh0b2twdHIsIExPR19UWVBFX0JBVE1BTl9OQU1FKSA9PSAwKQotCQkJCQlsb2dfbGV2ZWxfdG1wIHw9IExPR19UWVBFX0JBVE1BTjsKLQkJCQlpZiAoc3RyY21wKHRva3B0ciwgTE9HX1RZUEVfUk9VVEVTX05BTUUpID09IDApCi0JCQkJCWxvZ19sZXZlbF90bXAgfD0gTE9HX1RZUEVfUk9VVEVTOwotCQkJCXRva3B0ciA9IGNwICsgMTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJOwotCQkJfQotCQl9Ci0JfQotCi0JZGVidWdfbG9nKExPR19UWVBFX0NSSVQsICJDaGFuZ2luZyBsb2dfbGV2ZWwgZnJvbTogJWkgdG86ICVpXG4iLAotCQkgIGxvZ19sZXZlbCwgbG9nX2xldmVsX3RtcCk7Ci0JbG9nX2xldmVsID0gbG9nX2xldmVsX3RtcDsKLQotCWtmcmVlKGxvZ19sZXZlbF9zdHJpbmcpOwotCXJldHVybiBjb3VudDsKLX0KLQogc3RhdGljIGludCBwcm9jX3RyYW5zdF9sb2NhbF9yZWFkKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCiB7CiAJY2hhciAqYnVmOwpAQCAtNDA1LDE3MiArMzE1LDggQEAKIAlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcHJvY190cmFuc3RfZ2xvYmFsX3JlYWQsIE5VTEwpOwogfQogCi0vKiBpbnNlcnQgaW50ZXJmYWNlIHRvIHRoZSBsaXN0IG9mIGludGVyZmFjZXMgb2Ygb25lIG9yaWdpbmF0b3IgKi8KLQotc3RhdGljIHZvaWQgcHJvY192aXNfaW5zZXJ0X2ludGVyZmFjZShjb25zdCB1aW50OF90ICppbnRlcmZhY2UsCi0JCQkJICAgICAgc3RydWN0IHZpc19pZl9saXN0ICoqaWZfZW50cnksCi0JCQkJICAgICAgYm9vbCBwcmltYXJ5KQotewotCS8qIERpZCB3ZSBnZXQgYW4gZW1wdHkgbGlzdD8gKHRoZW4gaW5zZXJ0IGltZWRpYXRlbHkpICovCi0JaWYoKmlmX2VudHJ5ID09IE5VTEwpIHsKLQkJKmlmX2VudHJ5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZpc19pZl9saXN0KSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICgqaWZfZW50cnkgPT0gTlVMTCkKLQkJCXJldHVybjsKLQotCQkoKmlmX2VudHJ5KS0+cHJpbWFyeSA9IHByaW1hcnk7Ci0JCSgqaWZfZW50cnkpLT5uZXh0ID0gTlVMTDsKLQkJbWVtY3B5KCgqaWZfZW50cnkpLT5hZGRyLCBpbnRlcmZhY2UsIEVUSF9BTEVOKTsKLQl9IGVsc2UgewotCQlzdHJ1Y3QgdmlzX2lmX2xpc3QgKmhlYWRfaWZfZW50cnkgPSAqaWZfZW50cnk7Ci0JCS8qIERvIHdlIGFscmVhZHkgaGF2ZSB0aGlzIGludGVyZmFjZSBpbiBvdXIgbGlzdD8gKi8KLQkJd2hpbGUgKCFjb21wYXJlX29yaWcoKCppZl9lbnRyeSktPmFkZHIsICh2b2lkICopaW50ZXJmYWNlKSkgewotCi0JCQkvKiBPciBkaWQgd2UgcmVhY2ggdGhlIGVuZCAodGhlbiBhcHBlbmQgdGhlIGludGVyZmFjZSkgKi8KLQkJCWlmICgoKmlmX2VudHJ5KS0+bmV4dCA9PSBOVUxMKSB7Ci0JCQkJKCppZl9lbnRyeSktPm5leHQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlzX2lmX2xpc3QpLCBHRlBfS0VSTkVMKTsKLQkJCQlpZiAoKCppZl9lbnRyeSktPm5leHQgPT0gTlVMTCkKLQkJCQkJcmV0dXJuOwotCi0JCQkJbWVtY3B5KCgqaWZfZW50cnkpLT5uZXh0LT5hZGRyLCBpbnRlcmZhY2UsIEVUSF9BTEVOKTsKLQkJCQkoKmlmX2VudHJ5KS0+bmV4dC0+cHJpbWFyeSA9IHByaW1hcnk7Ci0JCQkJKCppZl9lbnRyeSktPm5leHQtPm5leHQgPSBOVUxMOwotCQkJCWJyZWFrOwotCQkJfQotCQkJKmlmX2VudHJ5ID0gKCppZl9lbnRyeSktPm5leHQ7Ci0JCX0KLQkJLyogUmV3aW5kIHRoZSBsaXN0IHRvIGl0cyBoZWFkICovCi0JCSppZl9lbnRyeSA9IGhlYWRfaWZfZW50cnk7Ci0JfQotfQotLyogcmVhZCBhbiBlbnRyeSAgKi8KLQotc3RhdGljIHZvaWQgcHJvY192aXNfcmVhZF9lbnRyeShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKLQkJCQlzdHJ1Y3QgdmlzX2luZm9fZW50cnkgKmVudHJ5LAotCQkJCXN0cnVjdCB2aXNfaWZfbGlzdCAqKmlmX2VudHJ5LAotCQkJCXVpbnQ4X3QgKnZpc19vcmlnLAotCQkJCXVpbnQ4X3QgY3VycmVudF9mb3JtYXQsCi0JCQkJdWludDhfdCBmaXJzdF9saW5lKQotewotCWNoYXIgZnJvbVs0MF07Ci0JY2hhciB0b1s0MF07Ci0JaW50IGludF9wYXJ0LCBmcmFjX3BhcnQ7Ci0KLQlhZGRyX3RvX3N0cmluZyh0bywgZW50cnktPmRlc3QpOwotCWlmIChlbnRyeS0+cXVhbGl0eSA9PSAwKSB7Ci0jaWZuZGVmIFZJU19TVUJDTFVTVEVSU19ESVNBQkxFRAotCQlwcm9jX3Zpc19pbnNlcnRfaW50ZXJmYWNlKHZpc19vcmlnLCBpZl9lbnRyeSwgdHJ1ZSk7Ci0jZW5kaWYgLyogVklTX1NVQkNMVVNURVJTX0RJU0FCTEVEICovCi0JCWFkZHJfdG9fc3RyaW5nKGZyb20sIHZpc19vcmlnKTsKLQkJaWYgKGN1cnJlbnRfZm9ybWF0ID09IERPVF9EUkFXKSB7Ci0JCQlzZXFfcHJpbnRmKHNlcSwgIlx0XCIlc1wiIC0+IFwiJXNcIiBbbGFiZWw9XCJITkFcIl1cbiIsCi0JCQkJICAgZnJvbSwgdG8pOwotCQl9IGVsc2UgewotCQkJc2VxX3ByaW50ZihzZXEsCi0JCQkJICAgIiVzXHR7IHJvdXRlciA6IFwiJXNcIiwgZ2F0ZXdheSAgIDogXCIlc1wiLCBsYWJlbCA6IFwiSE5BXCIgfSIsCi0JCQkJICAgKGZpcnN0X2xpbmUgPyAiIiA6ICIsXG4iKSwgZnJvbSwgdG8pOwotCQl9Ci0JfSBlbHNlIHsKLSNpZm5kZWYgVklTX1NVQkNMVVNURVJTX0RJU0FCTEVECi0JCXByb2NfdmlzX2luc2VydF9pbnRlcmZhY2UoZW50cnktPnNyYywgaWZfZW50cnksIGNvbXBhcmVfb3JpZyhlbnRyeS0+c3JjLCB2aXNfb3JpZykpOwotI2VuZGlmIC8qIFZJU19TVUJDTFVTVEVSU19ESVNBQkxFRCAqLwotCQlhZGRyX3RvX3N0cmluZyhmcm9tLCBlbnRyeS0+c3JjKTsKLQotCQkvKiBrZXJuZWwgaGFzIG5vIHByaW50Zi1zdXBwb3J0IGZvciAlZj8gaXQnZCBiZSBiZXR0ZXIgdG8gcmV0dXJuCi0JCSAqIHRoaXMgaW4gZmxvYXQuICovCi0KLQkJaW50X3BhcnQgPSBUUV9NQVhfVkFMVUUgLyBlbnRyeS0+cXVhbGl0eTsKLQkJZnJhY19wYXJ0ID0gMTAwMCAqIFRRX01BWF9WQUxVRSAvIGVudHJ5LT5xdWFsaXR5IC0gaW50X3BhcnQgKiAxMDAwOwotCi0JCWlmIChjdXJyZW50X2Zvcm1hdCA9PSBET1RfRFJBVykgewotCQkJc2VxX3ByaW50ZihzZXEsCi0JCQkJICAgIlx0XCIlc1wiIC0+IFwiJXNcIiBbbGFiZWw9XCIlZC4lZFwiXVxuIiwKLQkJCQkgICBmcm9tLCB0bywgaW50X3BhcnQsIGZyYWNfcGFydCk7Ci0JCX0gZWxzZSB7Ci0JCQlzZXFfcHJpbnRmKHNlcSwKLQkJCQkgICAiJXNcdHsgcm91dGVyIDogXCIlc1wiLCBuZWlnaGJvdXIgOiBcIiVzXCIsIGxhYmVsIDogJWQuJWQgfSIsCi0JCQkJICAgKGZpcnN0X2xpbmUgPyAiIiA6ICIsXG4iKSwgZnJvbSwgdG8sIGludF9wYXJ0LCBmcmFjX3BhcnQpOwotCQl9Ci0JfQotfQotCi0KLXN0YXRpYyBpbnQgcHJvY192aXNfcmVhZChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqb2Zmc2V0KQotewotCXN0cnVjdCBoYXNoX2l0X3QgKmhhc2hpdCA9IE5VTEw7Ci0Jc3RydWN0IHZpc19pbmZvICppbmZvOwotCXN0cnVjdCB2aXNfaW5mb19lbnRyeSAqZW50cmllczsKLQlzdHJ1Y3QgdmlzX2lmX2xpc3QgKmlmX2VudHJpZXMgPSBOVUxMOwotCWludCBpOwotCXVpbnQ4X3QgY3VycmVudF9mb3JtYXQsIGZpcnN0X2xpbmUgPSAxOwotI2lmbmRlZiBWSVNfU1VCQ0xVU1RFUlNfRElTQUJMRUQKLQljaGFyIHRtcF9hZGRyX3N0cltFVEhfU1RSX0xFTl07Ci0Jc3RydWN0IHZpc19pZl9saXN0ICp0bXBfaWZfbmV4dDsKLSNlbmRpZiAvKiBWSVNfU1VCQ0xVU1RFUlNfRElTQUJMRUQgKi8KLQotCWN1cnJlbnRfZm9ybWF0ID0gdmlzX2Zvcm1hdDsKLQotCXJjdV9yZWFkX2xvY2soKTsKLQlpZiAobGlzdF9lbXB0eSgmaWZfbGlzdCkgfHwgKCFpc192aXNfc2VydmVyKCkpKSB7Ci0JCXJjdV9yZWFkX3VubG9jaygpOwotCQlpZiAoY3VycmVudF9mb3JtYXQgPT0gRE9UX0RSQVcpCi0JCQlzZXFfcHJpbnRmKHNlcSwgImRpZ3JhcGgge1xufVxuIik7Ci0JCWdvdG8gZW5kOwotCX0KLQotCXJjdV9yZWFkX3VubG9jaygpOwotCi0JaWYgKGN1cnJlbnRfZm9ybWF0ID09IERPVF9EUkFXKQotCQlzZXFfcHJpbnRmKHNlcSwgImRpZ3JhcGgge1xuIik7Ci0KLQlzcGluX2xvY2soJnZpc19oYXNoX2xvY2spOwotCXdoaWxlIChOVUxMICE9IChoYXNoaXQgPSBoYXNoX2l0ZXJhdGUodmlzX2hhc2gsIGhhc2hpdCkpKSB7Ci0JCWluZm8gPSBoYXNoaXQtPmJ1Y2tldC0+ZGF0YTsKLQkJZW50cmllcyA9IChzdHJ1Y3QgdmlzX2luZm9fZW50cnkgKikKLQkJCSgoY2hhciAqKWluZm8gKyBzaXplb2Yoc3RydWN0IHZpc19pbmZvKSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IGluZm8tPnBhY2tldC5lbnRyaWVzOyBpKyspIHsKLQkJCXByb2NfdmlzX3JlYWRfZW50cnkoc2VxLCAmZW50cmllc1tpXSwgJmlmX2VudHJpZXMsCi0JCQkJCSAgICBpbmZvLT5wYWNrZXQudmlzX29yaWcsCi0JCQkJCSAgICBjdXJyZW50X2Zvcm1hdCwgZmlyc3RfbGluZSk7Ci0JCQlpZiAoZmlyc3RfbGluZSkKLQkJCQlmaXJzdF9saW5lID0gMDsKLQkJfQotCi0jaWZuZGVmIFZJU19TVUJDTFVTVEVSU19ESVNBQkxFRAotCQkvKiBHZW5lcmF0ZSBzdWJncmFwaHMgZnJvbSB0aGUgY29sbGVjdGVkIGl0ZW1zICovCi0JCWlmIChjdXJyZW50X2Zvcm1hdCA9PSBET1RfRFJBVykgewotCi0JCQlhZGRyX3RvX3N0cmluZyh0bXBfYWRkcl9zdHIsIGluZm8tPnBhY2tldC52aXNfb3JpZyk7Ci0JCQlzZXFfcHJpbnRmKHNlcSwgIlx0c3ViZ3JhcGggXCJjbHVzdGVyXyVzXCIge1xuIiwgdG1wX2FkZHJfc3RyKTsKLQkJCXdoaWxlIChpZl9lbnRyaWVzICE9IE5VTEwpIHsKLQotCQkJCWFkZHJfdG9fc3RyaW5nKHRtcF9hZGRyX3N0ciwgaWZfZW50cmllcy0+YWRkcik7Ci0JCQkJaWYgKGlmX2VudHJpZXMtPnByaW1hcnkpCi0JCQkJCXNlcV9wcmludGYoc2VxLCAiXHRcdFwiJXNcIiBbcGVyaXBoZXJpZXM9Ml1cbiIsIHRtcF9hZGRyX3N0cik7Ci0JCQkJZWxzZQotCQkJCQlzZXFfcHJpbnRmKHNlcSwgIlx0XHRcIiVzXCJcbiIsIHRtcF9hZGRyX3N0cik7Ci0KLQkJCQkvKiAuLi4gYW5kIGVtcHR5IHRoZSBsaXN0IHdoaWxlIGRvaW5nIHRoaXMgKi8KLQkJCQl0bXBfaWZfbmV4dCA9IGlmX2VudHJpZXMtPm5leHQ7Ci0JCQkJa2ZyZWUoaWZfZW50cmllcyk7Ci0JCQkJaWZfZW50cmllcyA9IHRtcF9pZl9uZXh0OwotCQkJfQotCQkJc2VxX3ByaW50ZihzZXEsICJcdH1cbiIpOwotCQl9Ci0jZW5kaWYgLyogVklTX1NVQkNMVVNURVJTX0RJU0FCTEVEICovCi0JfQotCXNwaW5fdW5sb2NrKCZ2aXNfaGFzaF9sb2NrKTsKLQotCWlmIChjdXJyZW50X2Zvcm1hdCA9PSBET1RfRFJBVykKLQkJc2VxX3ByaW50ZihzZXEsICJ9XG4iKTsKLQllbHNlCi0JCXNlcV9wcmludGYoc2VxLCAiXG4iKTsKLWVuZDoKLQlyZXR1cm4gMDsKLX0KLQogLyogc2V0dGluZyB0aGUgbW9kZSBvZiB0aGUgdmlzIHNlcnZlciBieSB0aGUgdXNlciAqLwotc3RhdGljIHNzaXplX3QgcHJvY192aXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmZmVyLAorc3RhdGljIHNzaXplX3QgcHJvY192aXNfc3J2X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZmZlciwKIAkJCSAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCWNoYXIgKnZpc19tb2RlX3N0cmluZzsKQEAgLTU4NCw3MiArMzMwLDg0IEBACiAJbm90X2NvcGllZCA9IGNvcHlfZnJvbV91c2VyKHZpc19tb2RlX3N0cmluZywgYnVmZmVyLCBjb3VudCk7CiAJdmlzX21vZGVfc3RyaW5nW2NvdW50IC0gbm90X2NvcGllZCAtIDFdID0gMDsKIAotCWlmIChzdHJjbXAodmlzX21vZGVfc3RyaW5nLCAiY2xpZW50IikgPT0gMCkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfTk9USUNFLCAiU2V0dGluZyBWSVMgbW9kZSB0byBjbGllbnRcbiIpOwotCQl2aXNfc2V0X21vZGUoVklTX1RZUEVfQ0xJRU5UX1VQREFURSk7Ci0JfSBlbHNlIGlmIChzdHJjbXAodmlzX21vZGVfc3RyaW5nLCAic2VydmVyIikgPT0gMCkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfTk9USUNFLCAiU2V0dGluZyBWSVMgbW9kZSB0byBzZXJ2ZXJcbiIpOwotCQl2aXNfc2V0X21vZGUoVklTX1RZUEVfU0VSVkVSX1NZTkMpOworCWlmICgoc3RyY21wKHZpc19tb2RlX3N0cmluZywgImNsaWVudCIpID09IDApIHx8CisJCQkoc3RyY21wKHZpc19tb2RlX3N0cmluZywgImRpc2FibGVkIikgPT0gMCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiYmF0bWFuLWFkdjpTZXR0aW5nIFZJUyBtb2RlIHRvIGNsaWVudCAoZGlzYWJsaW5nIHZpcyBzZXJ2ZXIpXG4iKTsKKwkJYXRvbWljX3NldCgmdmlzX21vZGUsIFZJU19UWVBFX0NMSUVOVF9VUERBVEUpOworCX0gZWxzZSBpZiAoKHN0cmNtcCh2aXNfbW9kZV9zdHJpbmcsICJzZXJ2ZXIiKSA9PSAwKSB8fAorCQkJKHN0cmNtcCh2aXNfbW9kZV9zdHJpbmcsICJlbmFibGVkIikgPT0gMCkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiYmF0bWFuLWFkdjpTZXR0aW5nIFZJUyBtb2RlIHRvIHNlcnZlciAoZW5hYmxpbmcgdmlzIHNlcnZlcilcbiIpOworCQlhdG9taWNfc2V0KCZ2aXNfbW9kZSwgVklTX1RZUEVfU0VSVkVSX1NZTkMpOwogCX0gZWxzZQotCQlkZWJ1Z19sb2coTE9HX1RZUEVfV0FSTiwgIlVua25vd24gVklTIG1vZGU6ICVzXG4iLAotCQkJICB2aXNfbW9kZV9zdHJpbmcpOworCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6VW5rbm93biBWSVMgbW9kZTogJXNcbiIsCisJCSAgICAgICB2aXNfbW9kZV9zdHJpbmcpOwogCiAJa2ZyZWUodmlzX21vZGVfc3RyaW5nKTsKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY192aXNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgcHJvY192aXNfc3J2X3JlYWQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcHJvY192aXNfcmVhZCwgTlVMTCk7Ci19CisJaW50IHZpc19zZXJ2ZXIgPSBhdG9taWNfcmVhZCgmdmlzX21vZGUpOwogCi1zdGF0aWMgaW50IHByb2NfdmlzX2Zvcm1hdF9yZWFkKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCi17Ci0JdWludDhfdCBjdXJyZW50X2Zvcm1hdCA9IHZpc19mb3JtYXQ7CisJc2VxX3ByaW50ZihzZXEsICJbJWNdIGNsaWVudCBtb2RlIChzZXJ2ZXIgZGlzYWJsZWQpIFxuIiwKKwkJCSh2aXNfc2VydmVyID09IFZJU19UWVBFX0NMSUVOVF9VUERBVEUpID8gJ3gnIDogJyAnKTsKKwlzZXFfcHJpbnRmKHNlcSwgIlslY10gc2VydmVyIG1vZGUgKHNlcnZlciBlbmFibGVkKSBcbiIsCisJCQkodmlzX3NlcnZlciA9PSBWSVNfVFlQRV9TRVJWRVJfU1lOQykgPyAneCcgOiAnICcpOwogCi0Jc2VxX3ByaW50ZihzZXEsICJbJWNdICVzXG4iLAotCQkgICAoY3VycmVudF9mb3JtYXQgPT0gRE9UX0RSQVcpID8gJ3gnIDogJyAnLAotCQkgICBWSVNfRk9STUFUX0REX05BTUUpOwotCXNlcV9wcmludGYoc2VxLCAiWyVjXSAlc1xuIiwKLQkJICAgKGN1cnJlbnRfZm9ybWF0ID09IEpTT04pID8gJ3gnIDogJyAnLAotCQkgICBWSVNfRk9STUFUX0pTT05fTkFNRSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY192aXNfZm9ybWF0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHByb2NfdmlzX3Nydl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcm9jX3Zpc19mb3JtYXRfcmVhZCwgTlVMTCk7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIHByb2NfdmlzX3Nydl9yZWFkLCBOVUxMKTsKIH0KIAotc3RhdGljIHNzaXplX3QgcHJvY192aXNfZm9ybWF0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAotCQkJCSAgICAgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKLQkJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorc3RhdGljIGludCBwcm9jX3Zpc19kYXRhX3JlYWQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKLQljaGFyICp2aXNfZm9ybWF0X3N0cmluZzsKLQlpbnQgbm90X2NvcGllZCA9IDA7CisJSEFTSElUKGhhc2hpdCk7CisJc3RydWN0IHZpc19pbmZvICppbmZvOworCXN0cnVjdCB2aXNfaW5mb19lbnRyeSAqZW50cmllczsKKwlITElTVF9IRUFEKHZpc19pZl9saXN0KTsKKwlpbnQgaTsKKwljaGFyIHRtcF9hZGRyX3N0cltFVEhfU1RSX0xFTl07CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgdmlzX3NlcnZlciA9IGF0b21pY19yZWFkKCZ2aXNfbW9kZSk7CiAKLQl2aXNfZm9ybWF0X3N0cmluZyA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCXJjdV9yZWFkX2xvY2soKTsKKwlpZiAobGlzdF9lbXB0eSgmaWZfbGlzdCkgfHwgKHZpc19zZXJ2ZXIgPT0gVklTX1RZUEVfQ0xJRU5UX1VQREFURSkpIHsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCWdvdG8gZW5kOworCX0KIAotCWlmICghdmlzX2Zvcm1hdF9zdHJpbmcpCi0JCXJldHVybiAtRU5PTUVNOworCXJjdV9yZWFkX3VubG9jaygpOwogCi0Jbm90X2NvcGllZCA9IGNvcHlfZnJvbV91c2VyKHZpc19mb3JtYXRfc3RyaW5nLCBidWZmZXIsIGNvdW50KTsKLQl2aXNfZm9ybWF0X3N0cmluZ1tjb3VudCAtIG5vdF9jb3BpZWQgLSAxXSA9IDA7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnZpc19oYXNoX2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAoaGFzaF9pdGVyYXRlKHZpc19oYXNoLCAmaGFzaGl0KSkgeworCQlpbmZvID0gaGFzaGl0LmJ1Y2tldC0+ZGF0YTsKKwkJZW50cmllcyA9IChzdHJ1Y3QgdmlzX2luZm9fZW50cnkgKikKKwkJCSgoY2hhciAqKWluZm8gKyBzaXplb2Yoc3RydWN0IHZpc19pbmZvKSk7CisJCWFkZHJfdG9fc3RyaW5nKHRtcF9hZGRyX3N0ciwgaW5mby0+cGFja2V0LnZpc19vcmlnKTsKKwkJc2VxX3ByaW50ZihzZXEsICIlcywiLCB0bXBfYWRkcl9zdHIpOwogCi0JaWYgKHN0cmNtcCh2aXNfZm9ybWF0X3N0cmluZywgVklTX0ZPUk1BVF9ERF9OQU1FKSA9PSAwKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9OT1RJQ0UsICJTZXR0aW5nIFZJUyBvdXRwdXQgZm9ybWF0IHRvOiAlc1xuIiwKLQkJCSAgVklTX0ZPUk1BVF9ERF9OQU1FKTsKLQkJdmlzX2Zvcm1hdCA9IERPVF9EUkFXOwotCX0gZWxzZSBpZiAoc3RyY21wKHZpc19mb3JtYXRfc3RyaW5nLCBWSVNfRk9STUFUX0pTT05fTkFNRSkgPT0gMCkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfTk9USUNFLCAiU2V0dGluZyBWSVMgb3V0cHV0IGZvcm1hdCB0bzogJXNcbiIsCi0JCQkgIFZJU19GT1JNQVRfSlNPTl9OQU1FKTsKLQkJdmlzX2Zvcm1hdCA9IEpTT047Ci0JfSBlbHNlCi0JCWRlYnVnX2xvZyhMT0dfVFlQRV9XQVJOLCAiVW5rbm93biBWSVMgb3V0cHV0IGZvcm1hdDogJXNcbiIsCi0JCQkgIHZpc19mb3JtYXRfc3RyaW5nKTsKKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPnBhY2tldC5lbnRyaWVzOyBpKyspIHsKKwkJCXByb2NfdmlzX3JlYWRfZW50cnkoc2VxLCAmZW50cmllc1tpXSwgJnZpc19pZl9saXN0LAorCQkJCQkgICAgaW5mby0+cGFja2V0LnZpc19vcmlnKTsKKwkJfQogCi0Ja2ZyZWUodmlzX2Zvcm1hdF9zdHJpbmcpOwotCXJldHVybiBjb3VudDsKKwkJLyogYWRkIHByaW1hcnkvc2Vjb25kYXJ5IHJlY29yZHMgKi8KKwkJcHJvY192aXNfcmVhZF9wcmltX3NlYyhzZXEsICZ2aXNfaWZfbGlzdCk7CisJCXNlcV9wcmludGYoc2VxLCAiXG4iKTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlzX2hhc2hfbG9jaywgZmxhZ3MpOworCitlbmQ6CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHJvY192aXNfZGF0YV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcm9jX3Zpc19kYXRhX3JlYWQsIE5VTEwpOwogfQogCiBzdGF0aWMgaW50IHByb2NfYWdncl9yZWFkKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICpvZmZzZXQpCkBAIC02NjUsNiArNDIzLDcgQEAKIAljaGFyICphZ2dyX3N0cmluZzsKIAlpbnQgbm90X2NvcGllZCA9IDA7CiAJdW5zaWduZWQgbG9uZyBhZ2dyZWdhdGlvbl9lbmFibGVkX3RtcDsKKwlpbnQgcmV0dmFsOwogCiAJYWdncl9zdHJpbmcgPSBrbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKIApAQCAtNjc0LDIyICs0MzMsMjEgQEAKIAlub3RfY29waWVkID0gY29weV9mcm9tX3VzZXIoYWdncl9zdHJpbmcsIGJ1ZmZlciwgY291bnQpOwogCWFnZ3Jfc3RyaW5nW2NvdW50IC0gbm90X2NvcGllZCAtIDFdID0gMDsKIAotCXN0cmljdF9zdHJ0b3VsKGFnZ3Jfc3RyaW5nLCAxMCwgJmFnZ3JlZ2F0aW9uX2VuYWJsZWRfdG1wKTsKKwlyZXR2YWwgPSBzdHJpY3Rfc3RydG91bChhZ2dyX3N0cmluZywgMTAsICZhZ2dyZWdhdGlvbl9lbmFibGVkX3RtcCk7CiAKLQlpZiAoKGFnZ3JlZ2F0aW9uX2VuYWJsZWRfdG1wICE9IDApICYmIChhZ2dyZWdhdGlvbl9lbmFibGVkX3RtcCAhPSAxKSkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfV0FSTiwgIkFnZ3JlZ2F0aW9uIGNhbiBvbmx5IGJlIGVuYWJsZWQgKDEpIG9yIGRpc2FibGVkICgwKSwgZ2l2ZW4gdmFsdWU6ICVsaVxuIiwgYWdncmVnYXRpb25fZW5hYmxlZF90bXApOwotCQlnb3RvIGVuZDsKKwlpZiAocmV0dmFsIHx8IGFnZ3JlZ2F0aW9uX2VuYWJsZWRfdG1wID4gMSkgeworCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6QWdncmVnYXRpb24gY2FuIG9ubHkgYmUgZW5hYmxlZCAoMSkgb3IgZGlzYWJsZWQgKDApLCBnaXZlbiB2YWx1ZTogJWxpXG4iLCBhZ2dyZWdhdGlvbl9lbmFibGVkX3RtcCk7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiYmF0bWFuLWFkdjpDaGFuZ2luZyBhZ2dyZWdhdGlvbiBmcm9tOiAlcyAoJWkpIHRvOiAlcyAoJWxpKVxuIiwKKwkJICAgICAgIChhdG9taWNfcmVhZCgmYWdncmVnYXRpb25fZW5hYmxlZCkgPT0gMSA/CisJCQkiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSwKKwkJICAgICAgIGF0b21pY19yZWFkKCZhZ2dyZWdhdGlvbl9lbmFibGVkKSwKKwkJICAgICAgIChhZ2dyZWdhdGlvbl9lbmFibGVkX3RtcCA9PSAxID8gImVuYWJsZWQiIDogImRpc2FibGVkIiksCisJCSAgICAgICBhZ2dyZWdhdGlvbl9lbmFibGVkX3RtcCk7CisJCWF0b21pY19zZXQoJmFnZ3JlZ2F0aW9uX2VuYWJsZWQsCisJCQkgICAodW5zaWduZWQpYWdncmVnYXRpb25fZW5hYmxlZF90bXApOwogCX0KIAotCWRlYnVnX2xvZyhMT0dfVFlQRV9OT1RJQ0UsICJDaGFuZ2luZyBhZ2dyZWdhdGlvbiBmcm9tOiAlcyAoJWkpIHRvOiAlcyAoJWxpKVxuIiwKLQkJICAoYXRvbWljX3JlYWQoJmFnZ3JlZ2F0aW9uX2VuYWJsZWQpID09IDEgPwotCQkgICAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSwKLQkJICBhdG9taWNfcmVhZCgmYWdncmVnYXRpb25fZW5hYmxlZCksCi0JCSAgKGFnZ3JlZ2F0aW9uX2VuYWJsZWRfdG1wID09IDEgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSwKLQkJICBhZ2dyZWdhdGlvbl9lbmFibGVkX3RtcCk7Ci0KLQlhdG9taWNfc2V0KCZhZ2dyZWdhdGlvbl9lbmFibGVkLCAodW5zaWduZWQpYWdncmVnYXRpb25fZW5hYmxlZF90bXApOwotZW5kOgogCWtmcmVlKGFnZ3Jfc3RyaW5nKTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC03MTUsMjAgKzQ3MywyMCBAQAogCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3Zpc19mb3JtYXRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfdmlzX3Nydl9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbgkJPSBwcm9jX3Zpc19mb3JtYXRfb3BlbiwKKwkub3BlbgkJPSBwcm9jX3Zpc19zcnZfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKLQkud3JpdGUJCT0gcHJvY192aXNfZm9ybWF0X3dyaXRlLAorCS53cml0ZQkJPSBwcm9jX3Zpc19zcnZfd3JpdGUsCiAJLmxsc2VlawkJPSBzZXFfbHNlZWssCiAJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfdmlzX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3Zpc19kYXRhX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IHByb2NfdmlzX29wZW4sCisJLm9wZW4JCT0gcHJvY192aXNfZGF0YV9vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAotCS53cml0ZQkJPSBwcm9jX3Zpc193cml0ZSwKKwkud3JpdGUJCT0gcHJvY19kdW1teV93cml0ZSwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKIAkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAogfTsKQEAgLTc2MCwxNSArNTE4LDYgQEAKIAkucmVsZWFzZQk9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19sb2dfbGV2ZWxfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gcHJvY19sb2dfbGV2ZWxfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkud3JpdGUJCT0gcHJvY19sb2dfbGV2ZWxfd3JpdGUsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKLX07Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfaW50ZXJmYWNlc19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkub3BlbgkJPSBwcm9jX2ludGVyZmFjZXNfb3BlbiwKQEAgLTc5NSwxMiArNTQ0LDYgQEAKIAlpZiAocHJvY190cmFuc3RfbG9jYWxfZmlsZSkKIAkJcmVtb3ZlX3Byb2NfZW50cnkoUFJPQ19GSUxFX1RSQU5TVF9MT0NBTCwgcHJvY19iYXRtYW5fZGlyKTsKIAotCWlmIChwcm9jX2xvZ19maWxlKQotCQlyZW1vdmVfcHJvY19lbnRyeShQUk9DX0ZJTEVfTE9HLCBwcm9jX2JhdG1hbl9kaXIpOwotCi0JaWYgKHByb2NfbG9nX2xldmVsX2ZpbGUpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NfRklMRV9MT0dfTEVWRUwsIHByb2NfYmF0bWFuX2Rpcik7Ci0KIAlpZiAocHJvY19vcmlnaW5hdG9yc19maWxlKQogCQlyZW1vdmVfcHJvY19lbnRyeShQUk9DX0ZJTEVfT1JJR0lOQVRPUlMsIHByb2NfYmF0bWFuX2Rpcik7CiAKQEAgLTgxMCwxMSArNTUzLDExIEBACiAJaWYgKHByb2NfaW50ZXJmYWNlX2ZpbGUpCiAJCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NfRklMRV9JTlRFUkZBQ0VTLCBwcm9jX2JhdG1hbl9kaXIpOwogCi0JaWYgKHByb2NfdmlzX2ZpbGUpCi0JCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NfRklMRV9WSVMsIHByb2NfYmF0bWFuX2Rpcik7CisJaWYgKHByb2NfdmlzX2RhdGFfZmlsZSkKKwkJcmVtb3ZlX3Byb2NfZW50cnkoUFJPQ19GSUxFX1ZJU19EQVRBLCBwcm9jX2JhdG1hbl9kaXIpOwogCi0JaWYgKHByb2NfdmlzX2Zvcm1hdF9maWxlKQotCQlyZW1vdmVfcHJvY19lbnRyeShQUk9DX0ZJTEVfVklTX0ZPUk1BVCwgcHJvY19iYXRtYW5fZGlyKTsKKwlpZiAocHJvY192aXNfc3J2X2ZpbGUpCisJCXJlbW92ZV9wcm9jX2VudHJ5KFBST0NfRklMRV9WSVNfU1JWLCBwcm9jX2JhdG1hbl9kaXIpOwogCiAJaWYgKHByb2NfYWdncl9maWxlKQogCQlyZW1vdmVfcHJvY19lbnRyeShQUk9DX0ZJTEVfQUdHUiwgcHJvY19iYXRtYW5fZGlyKTsKQEAgLTg2MiwxNyArNjA1LDYgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JcHJvY19sb2dfbGV2ZWxfZmlsZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KFBST0NfRklMRV9MT0dfTEVWRUwsCi0JCQkJCQlTX0lXVVNSIHwgU19JUlVHTywKLQkJCQkJCXByb2NfYmF0bWFuX2Rpcik7Ci0JaWYgKHByb2NfbG9nX2xldmVsX2ZpbGUpIHsKLQkJcHJvY19sb2dfbGV2ZWxfZmlsZS0+cHJvY19mb3BzID0gJnByb2NfbG9nX2xldmVsX2ZvcHM7Ci0JfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OiBSZWdpc3RlcmluZyB0aGUgJy9wcm9jL25ldC8lcy8lcycgZmlsZSBmYWlsZWRcbiIsIFBST0NfUk9PVF9ESVIsIFBST0NfRklMRV9MT0dfTEVWRUwpOwotCQljbGVhbnVwX3Byb2NmcygpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KIAlwcm9jX29yaWdpbmF0b3JzX2ZpbGUgPSBjcmVhdGVfcHJvY19lbnRyeShQUk9DX0ZJTEVfT1JJR0lOQVRPUlMsCiAJCQkJCQkgIFNfSVJVR08sIHByb2NfYmF0bWFuX2Rpcik7CiAJaWYgKHByb2Nfb3JpZ2luYXRvcnNfZmlsZSkgewpAQCAtODgzLDE2ICs2MTUsNiBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQlwcm9jX2xvZ19maWxlID0gY3JlYXRlX3Byb2NfZW50cnkoUFJPQ19GSUxFX0xPRywKLQkJCQkJICBTX0lSVUdPLCBwcm9jX2JhdG1hbl9kaXIpOwotCWlmIChwcm9jX2xvZ19maWxlKSB7Ci0JCXByb2NfbG9nX2ZpbGUtPnByb2NfZm9wcyA9ICZwcm9jX2xvZ19vcGVyYXRpb25zOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYmF0bWFuLWFkdjogUmVnaXN0ZXJpbmcgdGhlICcvcHJvYy9uZXQvJXMvJXMnIGZpbGUgZmFpbGVkXG4iLCBQUk9DX0ZJTEVfTE9HLCBQUk9DX0ZJTEVfR0FURVdBWVMpOwotCQljbGVhbnVwX3Byb2NmcygpOwotCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0KIAlwcm9jX3RyYW5zdF9sb2NhbF9maWxlID0gY3JlYXRlX3Byb2NfZW50cnkoUFJPQ19GSUxFX1RSQU5TVF9MT0NBTCwKIAkJCQkJCSAgIFNfSVJVR08sIHByb2NfYmF0bWFuX2Rpcik7CiAJaWYgKHByb2NfdHJhbnN0X2xvY2FsX2ZpbGUpIHsKQEAgLTkxMywyMyArNjM1LDIzIEBACiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXByb2NfdmlzX2ZpbGUgPSBjcmVhdGVfcHJvY19lbnRyeShQUk9DX0ZJTEVfVklTLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJCQkJICBwcm9jX2JhdG1hbl9kaXIpOwotCWlmIChwcm9jX3Zpc19maWxlKSB7Ci0JCXByb2NfdmlzX2ZpbGUtPnByb2NfZm9wcyA9ICZwcm9jX3Zpc19mb3BzOworCXByb2NfdmlzX3Nydl9maWxlID0gY3JlYXRlX3Byb2NfZW50cnkoUFJPQ19GSUxFX1ZJU19TUlYsCisJCQkJCQlTX0lXVVNSIHwgU19JUlVHTywKKwkJCQkJCXByb2NfYmF0bWFuX2Rpcik7CisJaWYgKHByb2NfdmlzX3Nydl9maWxlKSB7CisJCXByb2NfdmlzX3Nydl9maWxlLT5wcm9jX2ZvcHMgPSAmcHJvY192aXNfc3J2X2ZvcHM7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OiBSZWdpc3RlcmluZyB0aGUgJy9wcm9jL25ldC8lcy8lcycgZmlsZSBmYWlsZWRcbiIsIFBST0NfUk9PVF9ESVIsIFBST0NfRklMRV9WSVMpOworCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6IFJlZ2lzdGVyaW5nIHRoZSAnL3Byb2MvbmV0LyVzLyVzJyBmaWxlIGZhaWxlZFxuIiwgUFJPQ19ST09UX0RJUiwgUFJPQ19GSUxFX1ZJU19TUlYpOwogCQljbGVhbnVwX3Byb2NmcygpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQlwcm9jX3Zpc19mb3JtYXRfZmlsZSA9IGNyZWF0ZV9wcm9jX2VudHJ5KFBST0NfRklMRV9WSVNfRk9STUFULAotCQkJCQkJIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkJCQkJIHByb2NfYmF0bWFuX2Rpcik7Ci0JaWYgKHByb2NfdmlzX2Zvcm1hdF9maWxlKSB7Ci0JCXByb2NfdmlzX2Zvcm1hdF9maWxlLT5wcm9jX2ZvcHMgPSAmcHJvY192aXNfZm9ybWF0X2ZvcHM7CisJcHJvY192aXNfZGF0YV9maWxlID0gY3JlYXRlX3Byb2NfZW50cnkoUFJPQ19GSUxFX1ZJU19EQVRBLCBTX0lSVUdPLAorCQkJCQkgIHByb2NfYmF0bWFuX2Rpcik7CisJaWYgKHByb2NfdmlzX2RhdGFfZmlsZSkgeworCQlwcm9jX3Zpc19kYXRhX2ZpbGUtPnByb2NfZm9wcyA9ICZwcm9jX3Zpc19kYXRhX2ZvcHM7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OiBSZWdpc3RlcmluZyB0aGUgJy9wcm9jL25ldC8lcy8lcycgZmlsZSBmYWlsZWRcbiIsIFBST0NfUk9PVF9ESVIsIFBST0NfRklMRV9WSVNfRk9STUFUKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OiBSZWdpc3RlcmluZyB0aGUgJy9wcm9jL25ldC8lcy8lcycgZmlsZSBmYWlsZWRcbiIsIFBST0NfUk9PVF9ESVIsIFBST0NfRklMRV9WSVNfREFUQSk7CiAJCWNsZWFudXBfcHJvY2ZzKCk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KQEAgLTk0Niw1ICs2NjgsMyBAQAogCiAJcmV0dXJuIDA7CiB9Ci0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcHJvYy5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcHJvYy5oCmluZGV4IDE2ZDNlZmQuLmNkNjkwZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Byb2MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9wcm9jLmgKQEAgLTMxLDE5ICszMSwxMCBAQAogI2RlZmluZSBQUk9DX0ZJTEVfTE9HX0xFVkVMICJsb2dfbGV2ZWwiCiAjZGVmaW5lIFBST0NfRklMRV9UUkFOU1RfTE9DQUwgInRyYW5zdGFibGVfbG9jYWwiCiAjZGVmaW5lIFBST0NfRklMRV9UUkFOU1RfR0xPQkFMICJ0cmFuc3RhYmxlX2dsb2JhbCIKLSNkZWZpbmUgUFJPQ19GSUxFX1ZJUyAidmlzIgotI2RlZmluZSBQUk9DX0ZJTEVfVklTX0ZPUk1BVCAidmlzX2Zvcm1hdCIKKyNkZWZpbmUgUFJPQ19GSUxFX1ZJU19TUlYgInZpc19zZXJ2ZXIiCisjZGVmaW5lIFBST0NfRklMRV9WSVNfREFUQSAidmlzX2RhdGEiCiAjZGVmaW5lIFBST0NfRklMRV9BR0dSICJhZ2dyZWdhdGVfb2dtIgogCiB2b2lkIGNsZWFudXBfcHJvY2ZzKHZvaWQpOwogaW50IHNldHVwX3Byb2Nmcyh2b2lkKTsKIAotLyogV2hpbGUgc2Nhbm5pbmcgZm9yIHZpcy1lbnRyaWVzIG9mIGEgcGFydGljdWxhciB2aXMtb3JpZ2luYXRvcgotICogdGhpcyBsaXN0IGNvbGxlY3RzIGl0cyBpbnRlcmZhY2VzIHRvIGNyZWF0ZSBhIHN1YmdyYXBoL2NsdXN0ZXIKLSAqIG91dCBvZiB0aGVtIGxhdGVyCi0gKi8KLXN0cnVjdCB2aXNfaWZfbGlzdCB7Ci0JdWludDhfdCBhZGRyW0VUSF9BTEVOXTsKLQlib29sIHByaW1hcnk7Ci0Jc3RydWN0IHZpc19pZl9saXN0ICpuZXh0OwotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3JvdXRpbmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3JvdXRpbmcuYwppbmRleCA0YTE0YzM2Li5kODkwNDhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9yb3V0aW5nLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcm91dGluZy5jCkBAIC0xOSwzMDQgKzE5LDIyNiBAQAogICoKICAqLwogCi0KLQotCi0KICNpbmNsdWRlICJtYWluLmgiCiAjaW5jbHVkZSAicm91dGluZy5oIgotI2luY2x1ZGUgImxvZy5oIgogI2luY2x1ZGUgInNlbmQuaCIKKyNpbmNsdWRlICJoYXNoLmgiCiAjaW5jbHVkZSAic29mdC1pbnRlcmZhY2UuaCIKICNpbmNsdWRlICJoYXJkLWludGVyZmFjZS5oIgogI2luY2x1ZGUgImRldmljZS5oIgogI2luY2x1ZGUgInRyYW5zbGF0aW9uLXRhYmxlLmgiCisjaW5jbHVkZSAib3JpZ2luYXRvci5oIgogI2luY2x1ZGUgInR5cGVzLmgiCi0jaW5jbHVkZSAiaGFzaC5oIgogI2luY2x1ZGUgInJpbmdfYnVmZmVyLmgiCiAjaW5jbHVkZSAidmlzLmgiCiAjaW5jbHVkZSAiYWdncmVnYXRpb24uaCIKLSNpbmNsdWRlICJjb21wYXQuaCIKLQotCiAKIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHRocmVhZF93YWl0KTsKLXN0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhwdXJnZV9vcmlnX3dxLCBwdXJnZV9vcmlnKTsKLQotc3RhdGljIGF0b21pY190IGRhdGFfcmVhZHlfY29uZDsKLWF0b21pY190IGV4aXRfY29uZDsKLQotc3RhdGljIHZvaWQgc3RhcnRfcHVyZ2VfdGltZXIodm9pZCkKLXsKLQlxdWV1ZV9kZWxheWVkX3dvcmsoYmF0X2V2ZW50X3dvcmtxdWV1ZSwgJnB1cmdlX29yaWdfd3EsIDEgKiBIWik7Ci19Ci0KLWludCBvcmlnaW5hdG9yX2luaXQodm9pZCkKLXsKLQlpZiAob3JpZ19oYXNoKQotCQlyZXR1cm4gMTsKLQotCXNwaW5fbG9jaygmb3JpZ19oYXNoX2xvY2spOwotCW9yaWdfaGFzaCA9IGhhc2hfbmV3KDEyOCwgY29tcGFyZV9vcmlnLCBjaG9vc2Vfb3JpZyk7Ci0KLQlpZiAoIW9yaWdfaGFzaCkKLQkJZ290byBlcnI7Ci0KLQlzcGluX3VubG9jaygmb3JpZ19oYXNoX2xvY2spOwotCXN0YXJ0X3B1cmdlX3RpbWVyKCk7Ci0JcmV0dXJuIDE7Ci0KLWVycjoKLQlzcGluX3VubG9jaygmb3JpZ19oYXNoX2xvY2spOwotCXJldHVybiAwOwotfQotCi12b2lkIG9yaWdpbmF0b3JfZnJlZSh2b2lkKQotewotCWlmICghb3JpZ19oYXNoKQotCQlyZXR1cm47Ci0KLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnB1cmdlX29yaWdfd3EpOwotCi0Jc3Bpbl9sb2NrKCZvcmlnX2hhc2hfbG9jayk7Ci0JaGFzaF9kZWxldGUob3JpZ19oYXNoLCBmcmVlX29yaWdfbm9kZSk7Ci0Jb3JpZ19oYXNoID0gTlVMTDsKLQlzcGluX3VubG9jaygmb3JpZ19oYXNoX2xvY2spOwotfQotCi1zdGF0aWMgc3RydWN0IG5laWdoX25vZGUgKmNyZWF0ZV9uZWlnaGJvcihzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbmVpZ2hfbm9kZSwgdWludDhfdCAqbmVpZ2gsIHN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKQotewotCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlOwotCi0JZGVidWdfbG9nKExPR19UWVBFX0JBVE1BTiwgIkNyZWF0aW5nIG5ldyBsYXN0LWhvcCBuZWlnaGJvdXIgb2Ygb3JpZ2luYXRvclxuIik7Ci0KLQluZWlnaF9ub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG5laWdoX25vZGUpLCBHRlBfQVRPTUlDKTsKLQltZW1zZXQobmVpZ2hfbm9kZSwgMCwgc2l6ZW9mKHN0cnVjdCBuZWlnaF9ub2RlKSk7Ci0JSU5JVF9MSVNUX0hFQUQoJm5laWdoX25vZGUtPmxpc3QpOwotCi0JbWVtY3B5KG5laWdoX25vZGUtPmFkZHIsIG5laWdoLCBFVEhfQUxFTik7Ci0JbmVpZ2hfbm9kZS0+b3JpZ19ub2RlID0gb3JpZ19uZWlnaF9ub2RlOwotCW5laWdoX25vZGUtPmlmX2luY29taW5nID0gaWZfaW5jb21pbmc7Ci0KLQlsaXN0X2FkZF90YWlsKCZuZWlnaF9ub2RlLT5saXN0LCAmb3JpZ19ub2RlLT5uZWlnaF9saXN0KTsKLQlyZXR1cm4gbmVpZ2hfbm9kZTsKLX0KLQotdm9pZCBmcmVlX29yaWdfbm9kZSh2b2lkICpkYXRhKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3RfcG9zLCAqbGlzdF9wb3NfdG1wOwotCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlOwotCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSA9IChzdHJ1Y3Qgb3JpZ19ub2RlICopZGF0YTsKLQotCS8qIGZvciBhbGwgbmVpZ2hib3VycyB0b3dhcmRzIHRoaXMgb3JpZ2luYXRvciAuLi4gKi8KLQlsaXN0X2Zvcl9lYWNoX3NhZmUobGlzdF9wb3MsIGxpc3RfcG9zX3RtcCwgJm9yaWdfbm9kZS0+bmVpZ2hfbGlzdCkgewotCQluZWlnaF9ub2RlID0gbGlzdF9lbnRyeShsaXN0X3Bvcywgc3RydWN0IG5laWdoX25vZGUsIGxpc3QpOwotCi0JCWxpc3RfZGVsKGxpc3RfcG9zKTsKLQkJa2ZyZWUobmVpZ2hfbm9kZSk7Ci0JfQotCi0JaG5hX2dsb2JhbF9kZWxfb3JpZyhvcmlnX25vZGUsICJvcmlnaW5hdG9yIHRpbWVkIG91dCIpOwotCi0Ja2ZyZWUob3JpZ19ub2RlLT5iY2FzdF9vd24pOwotCWtmcmVlKG9yaWdfbm9kZS0+YmNhc3Rfb3duX3N1bSk7Ci0Ja2ZyZWUob3JpZ19ub2RlKTsKLX0KLQotLyogdGhpcyBmdW5jdGlvbiBmaW5kcyBvciBjcmVhdGVzIGFuIG9yaWdpbmF0b3IgZW50cnkgZm9yIHRoZSBnaXZlbiBhZGRyZXNzIGlmIGl0IGRvZXMgbm90IGV4aXRzICovCi1zdGF0aWMgc3RydWN0IG9yaWdfbm9kZSAqZ2V0X29yaWdfbm9kZSh1aW50OF90ICphZGRyKQotewotCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKLQlzdHJ1Y3QgaGFzaHRhYmxlX3QgKnN3YXBoYXNoOwotCWNoYXIgb3JpZ19zdHJbRVRIX1NUUl9MRU5dOwotCi0Jb3JpZ19ub2RlID0gKChzdHJ1Y3Qgb3JpZ19ub2RlICopaGFzaF9maW5kKG9yaWdfaGFzaCwgYWRkcikpOwotCi0JaWYgKG9yaWdfbm9kZSAhPSBOVUxMKQotCQlyZXR1cm4gb3JpZ19ub2RlOwotCi0JYWRkcl90b19zdHJpbmcob3JpZ19zdHIsIGFkZHIpOwotCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sICJDcmVhdGluZyBuZXcgb3JpZ2luYXRvcjogJXMgXG4iLCBvcmlnX3N0cik7Ci0KLQlvcmlnX25vZGUgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgb3JpZ19ub2RlKSwgR0ZQX0FUT01JQyk7Ci0JbWVtc2V0KG9yaWdfbm9kZSwgMCwgc2l6ZW9mKHN0cnVjdCBvcmlnX25vZGUpKTsKLQlJTklUX0xJU1RfSEVBRCgmb3JpZ19ub2RlLT5uZWlnaF9saXN0KTsKLQotCW1lbWNweShvcmlnX25vZGUtPm9yaWcsIGFkZHIsIEVUSF9BTEVOKTsKLQlvcmlnX25vZGUtPnJvdXRlciA9IE5VTEw7Ci0Jb3JpZ19ub2RlLT5iYXRtYW5faWYgPSBOVUxMOwotCW9yaWdfbm9kZS0+aG5hX2J1ZmYgPSBOVUxMOwotCi0Jb3JpZ19ub2RlLT5iY2FzdF9vd24gPSBrbWFsbG9jKG51bV9pZnMgKiBzaXplb2YoVFlQRV9PRl9XT1JEKSAqIE5VTV9XT1JEUywgR0ZQX0FUT01JQyk7Ci0JbWVtc2V0KG9yaWdfbm9kZS0+YmNhc3Rfb3duLCAwLCBudW1faWZzICogc2l6ZW9mKFRZUEVfT0ZfV09SRCkgKiBOVU1fV09SRFMpOwotCi0Jb3JpZ19ub2RlLT5iY2FzdF9vd25fc3VtID0ga21hbGxvYyhudW1faWZzICogc2l6ZW9mKHVpbnQ4X3QpLCBHRlBfQVRPTUlDKTsKLQltZW1zZXQob3JpZ19ub2RlLT5iY2FzdF9vd25fc3VtLCAwLCBudW1faWZzICogc2l6ZW9mKHVpbnQ4X3QpKTsKLQotCWhhc2hfYWRkKG9yaWdfaGFzaCwgb3JpZ19ub2RlKTsKLQotCWlmIChvcmlnX2hhc2gtPmVsZW1lbnRzICogNCA+IG9yaWdfaGFzaC0+c2l6ZSkgewotCQlzd2FwaGFzaCA9IGhhc2hfcmVzaXplKG9yaWdfaGFzaCwgb3JpZ19oYXNoLT5zaXplICogMik7Ci0KLQkJaWYgKHN3YXBoYXNoID09IE5VTEwpCi0JCQlkZWJ1Z19sb2coTE9HX1RZUEVfQ1JJVCwgIkNvdWxkbid0IHJlc2l6ZSBvcmlnIGhhc2ggdGFibGUgXG4iKTsKLQkJZWxzZQotCQkJb3JpZ19oYXNoID0gc3dhcGhhc2g7Ci0JfQotCi0JcmV0dXJuIG9yaWdfbm9kZTsKLX0KIAogdm9pZCBzbGlkZV9vd25fYmNhc3Rfd2luZG93KHN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZikKIHsKLQlzdHJ1Y3QgaGFzaF9pdF90ICpoYXNoaXQgPSBOVUxMOworCUhBU0hJVChoYXNoaXQpOwogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwlUWVBFX09GX1dPUkQgKndvcmQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmb3JpZ19oYXNoX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwogCi0Jd2hpbGUgKE5VTEwgIT0gKGhhc2hpdCA9IGhhc2hfaXRlcmF0ZShvcmlnX2hhc2gsIGhhc2hpdCkpKSB7Ci0JCW9yaWdfbm9kZSA9IGhhc2hpdC0+YnVja2V0LT5kYXRhOworCXdoaWxlIChoYXNoX2l0ZXJhdGUob3JpZ19oYXNoLCAmaGFzaGl0KSkgeworCQlvcmlnX25vZGUgPSBoYXNoaXQuYnVja2V0LT5kYXRhOworCQl3b3JkID0gJihvcmlnX25vZGUtPmJjYXN0X293bltiYXRtYW5faWYtPmlmX251bSAqIE5VTV9XT1JEU10pOwogCi0JCWJpdF9nZXRfcGFja2V0KChUWVBFX09GX1dPUkQgKikmKG9yaWdfbm9kZS0+YmNhc3Rfb3duW2JhdG1hbl9pZi0+aWZfbnVtICogTlVNX1dPUkRTXSksIDEsIDApOwotCQlvcmlnX25vZGUtPmJjYXN0X293bl9zdW1bYmF0bWFuX2lmLT5pZl9udW1dID0gYml0X3BhY2tldF9jb3VudCgoVFlQRV9PRl9XT1JEICopJihvcmlnX25vZGUtPmJjYXN0X293bltiYXRtYW5faWYtPmlmX251bSAqIE5VTV9XT1JEU10pKTsKKwkJYml0X2dldF9wYWNrZXQod29yZCwgMSwgMCk7CisJCW9yaWdfbm9kZS0+YmNhc3Rfb3duX3N1bVtiYXRtYW5faWYtPmlmX251bV0gPQorCQkJYml0X3BhY2tldF9jb3VudCh3b3JkKTsKIAl9CiAKLQlzcGluX3VubG9jaygmb3JpZ19oYXNoX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHVwZGF0ZV9yb3V0ZXMoc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLCBzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZSwgdW5zaWduZWQgY2hhciAqaG5hX2J1ZmYsIGludCBobmFfYnVmZl9sZW4pCitzdGF0aWMgdm9pZCB1cGRhdGVfSE5BKHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZSwKKwkJICAgICAgIHVuc2lnbmVkIGNoYXIgKmhuYV9idWZmLCBpbnQgaG5hX2J1ZmZfbGVuKQogewotCWNoYXIgb3JpZ19zdHJbRVRIX1NUUl9MRU5dLCBuZWlnaF9zdHJbRVRIX1NUUl9MRU5dLCByb3V0ZXJfc3RyW0VUSF9TVFJfTEVOXTsKKwlpZiAoKGhuYV9idWZmX2xlbiAhPSBvcmlnX25vZGUtPmhuYV9idWZmX2xlbikgfHwKKwkgICAgKChobmFfYnVmZl9sZW4gPiAwKSAmJgorCSAgICAgKG9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuID4gMCkgJiYKKwkgICAgIChtZW1jbXAob3JpZ19ub2RlLT5obmFfYnVmZiwgaG5hX2J1ZmYsIGhuYV9idWZmX2xlbikgIT0gMCkpKSB7CisKKwkJaWYgKG9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuID4gMCkKKwkJCWhuYV9nbG9iYWxfZGVsX29yaWcob3JpZ19ub2RlLAorCQkJCQkgICAgIm9yaWdpbmF0b3IgY2hhbmdlZCBobmEiKTsKKworCQlpZiAoKGhuYV9idWZmX2xlbiA+IDApICYmIChobmFfYnVmZiAhPSBOVUxMKSkKKwkJCWhuYV9nbG9iYWxfYWRkX29yaWcob3JpZ19ub2RlLCBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZV9yb3V0ZShzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCisJCQkgc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGUsCisJCQkgdW5zaWduZWQgY2hhciAqaG5hX2J1ZmYsIGludCBobmFfYnVmZl9sZW4pCit7CisJLyogcm91dGUgZGVsZXRlZCAqLworCWlmICgob3JpZ19ub2RlLT5yb3V0ZXIgIT0gTlVMTCkgJiYgKG5laWdoX25vZGUgPT0gTlVMTCkpIHsKKworCQliYXRfZGJnKERCR19ST1VURVMsICJEZWxldGluZyByb3V0ZSB0b3dhcmRzOiAlcE1cbiIsCisJCQlvcmlnX25vZGUtPm9yaWcpOworCQlobmFfZ2xvYmFsX2RlbF9vcmlnKG9yaWdfbm9kZSwgIm9yaWdpbmF0b3IgdGltZWQgb3V0Iik7CisKKwkJLyogcm91dGUgYWRkZWQgKi8KKwl9IGVsc2UgaWYgKChvcmlnX25vZGUtPnJvdXRlciA9PSBOVUxMKSAmJiAobmVpZ2hfbm9kZSAhPSBOVUxMKSkgeworCisJCWJhdF9kYmcoREJHX1JPVVRFUywKKwkJCSJBZGRpbmcgcm91dGUgdG93YXJkczogJXBNICh2aWEgJXBNKVxuIiwKKwkJCW9yaWdfbm9kZS0+b3JpZywgbmVpZ2hfbm9kZS0+YWRkcik7CisJCWhuYV9nbG9iYWxfYWRkX29yaWcob3JpZ19ub2RlLCBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuKTsKKworCQkvKiByb3V0ZSBjaGFuZ2VkICovCisJfSBlbHNlIHsKKwkJYmF0X2RiZyhEQkdfUk9VVEVTLCAiQ2hhbmdpbmcgcm91dGUgdG93YXJkczogJXBNIChub3cgdmlhICVwTSAtIHdhcyB2aWEgJXBNKVxuIiwgb3JpZ19ub2RlLT5vcmlnLCBuZWlnaF9ub2RlLT5hZGRyLCBvcmlnX25vZGUtPnJvdXRlci0+YWRkcik7CisJfQorCisJaWYgKG5laWdoX25vZGUgIT0gTlVMTCkKKwkJb3JpZ19ub2RlLT5iYXRtYW5faWYgPSBuZWlnaF9ub2RlLT5pZl9pbmNvbWluZzsKKwllbHNlCisJCW9yaWdfbm9kZS0+YmF0bWFuX2lmID0gTlVMTDsKKworCW9yaWdfbm9kZS0+cm91dGVyID0gbmVpZ2hfbm9kZTsKK30KKworCit2b2lkIHVwZGF0ZV9yb3V0ZXMoc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLAorCQkJICBzdHJ1Y3QgbmVpZ2hfbm9kZSAqbmVpZ2hfbm9kZSwKKwkJCSAgdW5zaWduZWQgY2hhciAqaG5hX2J1ZmYsIGludCBobmFfYnVmZl9sZW4pCit7CiAKIAlpZiAob3JpZ19ub2RlID09IE5VTEwpCiAJCXJldHVybjsKIAotCWlmIChvcmlnX25vZGUtPnJvdXRlciAhPSBuZWlnaF9ub2RlKSB7Ci0JCWFkZHJfdG9fc3RyaW5nKG9yaWdfc3RyLCBvcmlnX25vZGUtPm9yaWcpOwotCi0JCS8qIHJvdXRlIGRlbGV0ZWQgKi8KLQkJaWYgKChvcmlnX25vZGUtPnJvdXRlciAhPSBOVUxMKSAmJiAobmVpZ2hfbm9kZSA9PSBOVUxMKSkgewotCi0JCQlkZWJ1Z19sb2coTE9HX1RZUEVfUk9VVEVTLCAiRGVsZXRpbmcgcm91dGUgdG93YXJkczogJXNcbiIsIG9yaWdfc3RyKTsKLQkJCWhuYV9nbG9iYWxfZGVsX29yaWcob3JpZ19ub2RlLCAib3JpZ2luYXRvciB0aW1lZCBvdXQiKTsKLQotCQkvKiByb3V0ZSBhZGRlZCAqLwotCQl9IGVsc2UgaWYgKChvcmlnX25vZGUtPnJvdXRlciA9PSBOVUxMKSAmJiAobmVpZ2hfbm9kZSAhPSBOVUxMKSkgewotCi0JCQlhZGRyX3RvX3N0cmluZyhuZWlnaF9zdHIsIG5laWdoX25vZGUtPmFkZHIpOwotCQkJZGVidWdfbG9nKExPR19UWVBFX1JPVVRFUywgIkFkZGluZyByb3V0ZSB0b3dhcmRzOiAlcyAodmlhICVzKVxuIiwgb3JpZ19zdHIsIG5laWdoX3N0cik7Ci0JCQlobmFfZ2xvYmFsX2FkZF9vcmlnKG9yaWdfbm9kZSwgaG5hX2J1ZmYsIGhuYV9idWZmX2xlbik7Ci0KLQkJLyogcm91dGUgY2hhbmdlZCAqLwotCQl9IGVsc2UgewotCi0JCQlhZGRyX3RvX3N0cmluZyhuZWlnaF9zdHIsIG5laWdoX25vZGUtPmFkZHIpOwotCQkJYWRkcl90b19zdHJpbmcocm91dGVyX3N0ciwgb3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIpOwotCQkJZGVidWdfbG9nKExPR19UWVBFX1JPVVRFUywgIkNoYW5naW5nIHJvdXRlIHRvd2FyZHM6ICVzIChub3cgdmlhICVzIC0gd2FzIHZpYSAlcylcbiIsIG9yaWdfc3RyLCBuZWlnaF9zdHIsIHJvdXRlcl9zdHIpOwotCi0JCX0KLQotCQlpZiAobmVpZ2hfbm9kZSAhPSBOVUxMKQotCQkJb3JpZ19ub2RlLT5iYXRtYW5faWYgPSBuZWlnaF9ub2RlLT5pZl9pbmNvbWluZzsKLQkJZWxzZQotCQkJb3JpZ19ub2RlLT5iYXRtYW5faWYgPSBOVUxMOwotCi0JCW9yaWdfbm9kZS0+cm91dGVyID0gbmVpZ2hfbm9kZTsKLQorCWlmIChvcmlnX25vZGUtPnJvdXRlciAhPSBuZWlnaF9ub2RlKQorCQl1cGRhdGVfcm91dGUob3JpZ19ub2RlLCBuZWlnaF9ub2RlLCBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuKTsKIAkvKiBtYXkgYmUganVzdCBITkEgY2hhbmdlZCAqLwotCX0gZWxzZSB7Ci0KLQkJaWYgKChobmFfYnVmZl9sZW4gIT0gb3JpZ19ub2RlLT5obmFfYnVmZl9sZW4pIHx8ICgoaG5hX2J1ZmZfbGVuID4gMCkgJiYgKG9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuID4gMCkgJiYgKG1lbWNtcChvcmlnX25vZGUtPmhuYV9idWZmLCBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuKSAhPSAwKSkpIHsKLQotCQkJaWYgKG9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuID4gMCkKLQkJCQlobmFfZ2xvYmFsX2RlbF9vcmlnKG9yaWdfbm9kZSwgIm9yaWdpbmF0b3IgY2hhbmdlZCBobmEiKTsKLQotCQkJaWYgKChobmFfYnVmZl9sZW4gPiAwKSAmJiAoaG5hX2J1ZmYgIT0gTlVMTCkpCi0JCQkJaG5hX2dsb2JhbF9hZGRfb3JpZyhvcmlnX25vZGUsIGhuYV9idWZmLCBobmFfYnVmZl9sZW4pOwotCi0JCX0KLQotCX0KKwllbHNlCisJCXVwZGF0ZV9ITkEob3JpZ19ub2RlLCBobmFfYnVmZiwgaG5hX2J1ZmZfbGVuKTsKIH0KIAotc3RhdGljIGludCBpc0JpZGlyZWN0aW9uYWxOZWlnaChzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsIHN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbmVpZ2hfbm9kZSwgc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQsIHN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKQorc3RhdGljIGludCBpc0JpZGlyZWN0aW9uYWxOZWlnaChzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsCisJCQkJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19uZWlnaF9ub2RlLAorCQkJCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0LAorCQkJCXN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKQogewogCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlID0gTlVMTCwgKnRtcF9uZWlnaF9ub2RlID0gTlVMTDsKLQljaGFyIG9yaWdfc3RyW0VUSF9TVFJfTEVOXSwgbmVpZ2hfc3RyW0VUSF9TVFJfTEVOXTsKIAl1bnNpZ25lZCBjaGFyIHRvdGFsX2NvdW50OwogCi0JYWRkcl90b19zdHJpbmcob3JpZ19zdHIsIG9yaWdfbm9kZS0+b3JpZyk7Ci0JYWRkcl90b19zdHJpbmcobmVpZ2hfc3RyLCBvcmlnX25laWdoX25vZGUtPm9yaWcpOwotCiAJaWYgKG9yaWdfbm9kZSA9PSBvcmlnX25laWdoX25vZGUpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfbmVpZ2hfbm9kZSwgJm9yaWdfbm9kZS0+bmVpZ2hfbGlzdCwgbGlzdCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9uZWlnaF9ub2RlLAorCQkJCSAgICAmb3JpZ19ub2RlLT5uZWlnaF9saXN0LAorCQkJCSAgICBsaXN0KSB7CiAKLQkJCWlmIChjb21wYXJlX29yaWcodG1wX25laWdoX25vZGUtPmFkZHIsIG9yaWdfbmVpZ2hfbm9kZS0+b3JpZykgJiYgKHRtcF9uZWlnaF9ub2RlLT5pZl9pbmNvbWluZyA9PSBpZl9pbmNvbWluZykpCisJCQlpZiAoY29tcGFyZV9vcmlnKHRtcF9uZWlnaF9ub2RlLT5hZGRyLAorCQkJCQkgb3JpZ19uZWlnaF9ub2RlLT5vcmlnKSAmJgorCQkJICAgICh0bXBfbmVpZ2hfbm9kZS0+aWZfaW5jb21pbmcgPT0gaWZfaW5jb21pbmcpKQogCQkJCW5laWdoX25vZGUgPSB0bXBfbmVpZ2hfbm9kZTsKIAkJfQogCi0JCWlmIChuZWlnaF9ub2RlID09IE5VTEwpCi0JCQluZWlnaF9ub2RlID0gY3JlYXRlX25laWdoYm9yKG9yaWdfbm9kZSwgb3JpZ19uZWlnaF9ub2RlLCBvcmlnX25laWdoX25vZGUtPm9yaWcsIGlmX2luY29taW5nKTsKKwkJaWYgKCFuZWlnaF9ub2RlKQorCQkJbmVpZ2hfbm9kZSA9IGNyZWF0ZV9uZWlnaGJvcihvcmlnX25vZGUsCisJCQkJCQkgICAgIG9yaWdfbmVpZ2hfbm9kZSwKKwkJCQkJCSAgICAgb3JpZ19uZWlnaF9ub2RlLT5vcmlnLAorCQkJCQkJICAgICBpZl9pbmNvbWluZyk7CisJCS8qIGNyZWF0ZV9uZWlnaGJvciBmYWlsZWQsIHJldHVybiAwICovCisJCWlmICghbmVpZ2hfbm9kZSkKKwkJCXJldHVybiAwOwogCiAJCW5laWdoX25vZGUtPmxhc3RfdmFsaWQgPSBqaWZmaWVzOwogCX0gZWxzZSB7CiAJCS8qIGZpbmQgcGFja2V0IGNvdW50IG9mIGNvcnJlc3BvbmRpbmcgb25lIGhvcCBuZWlnaGJvciAqLwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcF9uZWlnaF9ub2RlLCAmb3JpZ19uZWlnaF9ub2RlLT5uZWlnaF9saXN0LCBsaXN0KSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wX25laWdoX25vZGUsCisJCQkJICAgICZvcmlnX25laWdoX25vZGUtPm5laWdoX2xpc3QsIGxpc3QpIHsKIAotCQkJaWYgKGNvbXBhcmVfb3JpZyh0bXBfbmVpZ2hfbm9kZS0+YWRkciwgb3JpZ19uZWlnaF9ub2RlLT5vcmlnKSAmJiAodG1wX25laWdoX25vZGUtPmlmX2luY29taW5nID09IGlmX2luY29taW5nKSkKKwkJCWlmIChjb21wYXJlX29yaWcodG1wX25laWdoX25vZGUtPmFkZHIsCisJCQkJCSBvcmlnX25laWdoX25vZGUtPm9yaWcpICYmCisJCQkgICAgKHRtcF9uZWlnaF9ub2RlLT5pZl9pbmNvbWluZyA9PSBpZl9pbmNvbWluZykpCiAJCQkJbmVpZ2hfbm9kZSA9IHRtcF9uZWlnaF9ub2RlOwogCQl9CiAKLQkJaWYgKG5laWdoX25vZGUgPT0gTlVMTCkKLQkJCW5laWdoX25vZGUgPSBjcmVhdGVfbmVpZ2hib3Iob3JpZ19uZWlnaF9ub2RlLCBvcmlnX25laWdoX25vZGUsIG9yaWdfbmVpZ2hfbm9kZS0+b3JpZywgaWZfaW5jb21pbmcpOworCQlpZiAoIW5laWdoX25vZGUpCisJCQluZWlnaF9ub2RlID0gY3JlYXRlX25laWdoYm9yKG9yaWdfbmVpZ2hfbm9kZSwKKwkJCQkJCSAgICAgb3JpZ19uZWlnaF9ub2RlLAorCQkJCQkJICAgICBvcmlnX25laWdoX25vZGUtPm9yaWcsCisJCQkJCQkgICAgIGlmX2luY29taW5nKTsKKwkJLyogY3JlYXRlX25laWdoYm9yIGZhaWxlZCwgcmV0dXJuIDAgKi8KKwkJaWYgKCFuZWlnaF9ub2RlKQorCQkJcmV0dXJuIDA7CiAJfQogCiAJb3JpZ19ub2RlLT5sYXN0X3ZhbGlkID0gamlmZmllczsKIAogCS8qIHBheSBhdHRlbnRpb24gdG8gbm90IGdldCBhIHZhbHVlIGJpZ2dlciB0aGFuIDEwMCAlICovCi0JdG90YWxfY291bnQgPSAob3JpZ19uZWlnaF9ub2RlLT5iY2FzdF9vd25fc3VtW2lmX2luY29taW5nLT5pZl9udW1dID4gbmVpZ2hfbm9kZS0+cmVhbF9wYWNrZXRfY291bnQgPyBuZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudCA6IG9yaWdfbmVpZ2hfbm9kZS0+YmNhc3Rfb3duX3N1bVtpZl9pbmNvbWluZy0+aWZfbnVtXSk7CisJdG90YWxfY291bnQgPSAob3JpZ19uZWlnaF9ub2RlLT5iY2FzdF9vd25fc3VtW2lmX2luY29taW5nLT5pZl9udW1dID4KKwkJICAgICAgIG5laWdoX25vZGUtPnJlYWxfcGFja2V0X2NvdW50ID8KKwkJICAgICAgIG5laWdoX25vZGUtPnJlYWxfcGFja2V0X2NvdW50IDoKKwkJICAgICAgIG9yaWdfbmVpZ2hfbm9kZS0+YmNhc3Rfb3duX3N1bVtpZl9pbmNvbWluZy0+aWZfbnVtXSk7CiAKIAkvKiBpZiB3ZSBoYXZlIHRvbyBmZXcgcGFja2V0cyAodG9vIGxlc3MgZGF0YSkgd2Ugc2V0IHRxX293biB0byB6ZXJvICovCiAJLyogaWYgd2UgcmVjZWl2ZSB0b28gZmV3IHBhY2tldHMgaXQgaXMgbm90IGNvbnNpZGVyZWQgYmlkaXJlY3Rpb25hbCAqLwotCWlmICgodG90YWxfY291bnQgPCBUUV9MT0NBTF9CSURSRUNUX1NFTkRfTUlOSU1VTSkgfHwgKG5laWdoX25vZGUtPnJlYWxfcGFja2V0X2NvdW50IDwgVFFfTE9DQUxfQklEUkVDVF9SRUNWX01JTklNVU0pKQorCWlmICgodG90YWxfY291bnQgPCBUUV9MT0NBTF9CSURSRUNUX1NFTkRfTUlOSU1VTSkgfHwKKwkgICAgKG5laWdoX25vZGUtPnJlYWxfcGFja2V0X2NvdW50IDwgVFFfTE9DQUxfQklEUkVDVF9SRUNWX01JTklNVU0pKQogCQlvcmlnX25laWdoX25vZGUtPnRxX293biA9IDA7CiAJZWxzZQotCQkvKiBuZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudCBpcyBuZXZlciB6ZXJvIGFzIHdlIG9ubHkgcHVyZ2Ugb2xkIGluZm9ybWF0aW9uIHdoZW4gZ2V0dGluZyBuZXcgaW5mb3JtYXRpb24gKi8KLQkJb3JpZ19uZWlnaF9ub2RlLT50cV9vd24gPSAoVFFfTUFYX1ZBTFVFICogdG90YWxfY291bnQpIC8gbmVpZ2hfbm9kZS0+cmVhbF9wYWNrZXRfY291bnQ7CisJCS8qIG5laWdoX25vZGUtPnJlYWxfcGFja2V0X2NvdW50IGlzIG5ldmVyIHplcm8gYXMgd2UKKwkJICogb25seSBwdXJnZSBvbGQgaW5mb3JtYXRpb24gd2hlbiBnZXR0aW5nIG5ldworCQkgKiBpbmZvcm1hdGlvbiAqLworCQlvcmlnX25laWdoX25vZGUtPnRxX293biA9IChUUV9NQVhfVkFMVUUgKiB0b3RhbF9jb3VudCkgLworCQkJbmVpZ2hfbm9kZS0+cmVhbF9wYWNrZXRfY291bnQ7CiAKIAkvKgotCSAqIDEgLSAoKDEteCkgKiogMyksIG5vcm1hbGl6ZWQgdG8gVFFfTUFYX1ZBTFVFCi0JICogdGhpcyBkb2VzIGFmZmVjdCB0aGUgbmVhcmx5LXN5bW1ldHJpYyBsaW5rcyBvbmx5IGEgbGl0dGxlLAotCSAqIGJ1dCBwdW5pc2hlcyBhc3ltbWV0cmljIGxpbmtzIG1vcmUuCi0JICogdGhpcyB3aWxsIGdpdmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIFRRX01BWF9WQUxVRQorCSAqIDEgLSAoKDEteCkgKiogMyksIG5vcm1hbGl6ZWQgdG8gVFFfTUFYX1ZBTFVFIHRoaXMgZG9lcworCSAqIGFmZmVjdCB0aGUgbmVhcmx5LXN5bW1ldHJpYyBsaW5rcyBvbmx5IGEgbGl0dGxlLCBidXQKKwkgKiBwdW5pc2hlcyBhc3ltbWV0cmljIGxpbmtzIG1vcmUuICBUaGlzIHdpbGwgZ2l2ZSBhIHZhbHVlCisJICogYmV0d2VlbiAwIGFuZCBUUV9NQVhfVkFMVUUKIAkgKi8KLQlvcmlnX25laWdoX25vZGUtPnRxX2FzeW1fcGVuYWx0eSA9IFRRX01BWF9WQUxVRSAtIChUUV9NQVhfVkFMVUUgKgotCQkJKFRRX0xPQ0FMX1dJTkRPV19TSVpFIC0gbmVpZ2hfbm9kZS0+cmVhbF9wYWNrZXRfY291bnQpICoKLQkJCShUUV9MT0NBTF9XSU5ET1dfU0laRSAtIG5laWdoX25vZGUtPnJlYWxfcGFja2V0X2NvdW50KSAqCi0JCQkoVFFfTE9DQUxfV0lORE9XX1NJWkUgLSBuZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudCkpIC8KLQkJCShUUV9MT0NBTF9XSU5ET1dfU0laRSAqIFRRX0xPQ0FMX1dJTkRPV19TSVpFICogVFFfTE9DQUxfV0lORE9XX1NJWkUpOworCW9yaWdfbmVpZ2hfbm9kZS0+dHFfYXN5bV9wZW5hbHR5ID0KKwkJVFFfTUFYX1ZBTFVFIC0KKwkJKFRRX01BWF9WQUxVRSAqCisJCSAoVFFfTE9DQUxfV0lORE9XX1NJWkUgLSBuZWlnaF9ub2RlLT5yZWFsX3BhY2tldF9jb3VudCkgKgorCQkgKFRRX0xPQ0FMX1dJTkRPV19TSVpFIC0gbmVpZ2hfbm9kZS0+cmVhbF9wYWNrZXRfY291bnQpICoKKwkJIChUUV9MT0NBTF9XSU5ET1dfU0laRSAtIG5laWdoX25vZGUtPnJlYWxfcGFja2V0X2NvdW50KSkgLworCQkoVFFfTE9DQUxfV0lORE9XX1NJWkUgKgorCQkgVFFfTE9DQUxfV0lORE9XX1NJWkUgKgorCQkgVFFfTE9DQUxfV0lORE9XX1NJWkUpOwogCi0JYmF0bWFuX3BhY2tldC0+dHEgPSAoKGJhdG1hbl9wYWNrZXQtPnRxICogb3JpZ19uZWlnaF9ub2RlLT50cV9vd24gKiBvcmlnX25laWdoX25vZGUtPnRxX2FzeW1fcGVuYWx0eSkgLyAoVFFfTUFYX1ZBTFVFICogIFRRX01BWF9WQUxVRSkpOworCWJhdG1hbl9wYWNrZXQtPnRxID0gKChiYXRtYW5fcGFja2V0LT50cSAqCisJCQkgICAgICBvcmlnX25laWdoX25vZGUtPnRxX293biAqCisJCQkgICAgICBvcmlnX25laWdoX25vZGUtPnRxX2FzeW1fcGVuYWx0eSkgLworCQkJICAgICAoVFFfTUFYX1ZBTFVFICoJIFRRX01BWF9WQUxVRSkpOwogCi0JZGVidWdfbG9nKExPR19UWVBFX0JBVE1BTiwgImJpZGlyZWN0aW9uYWw6IG9yaWcgPSAlLTE1cyBuZWlnaCA9ICUtMTVzID0+IG93bl9iY2FzdCA9ICUyaSwgcmVhbCByZWN2ID0gJTJpLCBsb2NhbCB0cTogJTNpLCBhc3ltX3BlbmFsdHk6ICUzaSwgdG90YWwgdHE6ICUzaSBcbiIsCi0JCSAgb3JpZ19zdHIsIG5laWdoX3N0ciwgdG90YWxfY291bnQsIG5laWdoX25vZGUtPnJlYWxfcGFja2V0X2NvdW50LCBvcmlnX25laWdoX25vZGUtPnRxX293biwgb3JpZ19uZWlnaF9ub2RlLT50cV9hc3ltX3BlbmFsdHksIGJhdG1hbl9wYWNrZXQtPnRxKTsKKwliYXRfZGJnKERCR19CQVRNQU4sICJiaWRpcmVjdGlvbmFsOiBvcmlnID0gJS0xNXBNIG5laWdoID0gJS0xNXBNID0+IG93bl9iY2FzdCA9ICUyaSwgcmVhbCByZWN2ID0gJTJpLCBsb2NhbCB0cTogJTNpLCBhc3ltX3BlbmFsdHk6ICUzaSwgdG90YWwgdHE6ICUzaSBcbiIsCisJCW9yaWdfbm9kZS0+b3JpZywgb3JpZ19uZWlnaF9ub2RlLT5vcmlnLCB0b3RhbF9jb3VudCwKKwkJbmVpZ2hfbm9kZS0+cmVhbF9wYWNrZXRfY291bnQsIG9yaWdfbmVpZ2hfbm9kZS0+dHFfb3duLAorCQlvcmlnX25laWdoX25vZGUtPnRxX2FzeW1fcGVuYWx0eSwgYmF0bWFuX3BhY2tldC0+dHEpOwogCi0JLyogaWYgbGluayBoYXMgdGhlIG1pbmltdW0gcmVxdWlyZWQgdHJhbnNtaXNzaW9uIHF1YWxpdHkgY29uc2lkZXIgaXQgYmlkaXJlY3Rpb25hbCAqLworCS8qIGlmIGxpbmsgaGFzIHRoZSBtaW5pbXVtIHJlcXVpcmVkIHRyYW5zbWlzc2lvbiBxdWFsaXR5CisJICogY29uc2lkZXIgaXQgYmlkaXJlY3Rpb25hbCAqLwogCWlmIChiYXRtYW5fcGFja2V0LT50cSA+PSBUUV9UT1RBTF9CSURSRUNUX0xJTUlUKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVfb3JpZyhzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsIHN0cnVjdCBldGhoZHIgKmV0aGhkciwgc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQsIHN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nLCB1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbiwgY2hhciBpc19kdXBsaWNhdGUpCitzdGF0aWMgdm9pZCB1cGRhdGVfb3JpZyhzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGUsIHN0cnVjdCBldGhoZHIgKmV0aGhkciwKKwkJCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0LAorCQkJc3RydWN0IGJhdG1hbl9pZiAqaWZfaW5jb21pbmcsCisJCQl1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbiwKKwkJCWNoYXIgaXNfZHVwbGljYXRlKQogewogCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlID0gTlVMTCwgKnRtcF9uZWlnaF9ub2RlID0gTlVMTDsKIAlpbnQgdG1wX2huYV9idWZmX2xlbjsKIAotCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sICJ1cGRhdGVfb3JpZ2luYXRvcigpOiBTZWFyY2hpbmcgYW5kIHVwZGF0aW5nIG9yaWdpbmF0b3IgZW50cnkgb2YgcmVjZWl2ZWQgcGFja2V0IFxuIik7CisJYmF0X2RiZyhEQkdfQkFUTUFOLCAidXBkYXRlX29yaWdpbmF0b3IoKTogU2VhcmNoaW5nIGFuZCB1cGRhdGluZyBvcmlnaW5hdG9yIGVudHJ5IG9mIHJlY2VpdmVkIHBhY2tldCBcbiIpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfbmVpZ2hfbm9kZSwgJm9yaWdfbm9kZS0+bmVpZ2hfbGlzdCwgbGlzdCkgewotCQlpZiAoY29tcGFyZV9vcmlnKHRtcF9uZWlnaF9ub2RlLT5hZGRyLCBldGhoZHItPmhfc291cmNlKSAmJiAodG1wX25laWdoX25vZGUtPmlmX2luY29taW5nID09IGlmX2luY29taW5nKSkgeworCQlpZiAoY29tcGFyZV9vcmlnKHRtcF9uZWlnaF9ub2RlLT5hZGRyLCBldGhoZHItPmhfc291cmNlKSAmJgorCQkgICAgKHRtcF9uZWlnaF9ub2RlLT5pZl9pbmNvbWluZyA9PSBpZl9pbmNvbWluZykpIHsKIAkJCW5laWdoX25vZGUgPSB0bXBfbmVpZ2hfbm9kZTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0zMjQsMTkgKzI0NiwzNCBAQAogCQlpZiAoaXNfZHVwbGljYXRlKQogCQkJY29udGludWU7CiAKLQkJcmluZ19idWZmZXJfc2V0KHRtcF9uZWlnaF9ub2RlLT50cV9yZWN2LCAmdG1wX25laWdoX25vZGUtPnRxX2luZGV4LCAwKTsKLQkJdG1wX25laWdoX25vZGUtPnRxX2F2ZyA9IHJpbmdfYnVmZmVyX2F2Zyh0bXBfbmVpZ2hfbm9kZS0+dHFfcmVjdik7CisJCXJpbmdfYnVmZmVyX3NldCh0bXBfbmVpZ2hfbm9kZS0+dHFfcmVjdiwKKwkJCQkmdG1wX25laWdoX25vZGUtPnRxX2luZGV4LCAwKTsKKwkJdG1wX25laWdoX25vZGUtPnRxX2F2ZyA9CisJCQlyaW5nX2J1ZmZlcl9hdmcodG1wX25laWdoX25vZGUtPnRxX3JlY3YpOwogCX0KIAotCWlmIChuZWlnaF9ub2RlID09IE5VTEwpCi0JCW5laWdoX25vZGUgPSBjcmVhdGVfbmVpZ2hib3Iob3JpZ19ub2RlLCBnZXRfb3JpZ19ub2RlKGV0aGhkci0+aF9zb3VyY2UpLCBldGhoZHItPmhfc291cmNlLCBpZl9pbmNvbWluZyk7Ci0JZWxzZQotCQlkZWJ1Z19sb2coTE9HX1RZUEVfQkFUTUFOLCAiVXBkYXRpbmcgZXhpc3RpbmcgbGFzdC1ob3AgbmVpZ2hib3VyIG9mIG9yaWdpbmF0b3JcbiIpOworCWlmICghbmVpZ2hfbm9kZSkgeworCQlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX3RtcDsKKworCQlvcmlnX3RtcCA9IGdldF9vcmlnX25vZGUoZXRoaGRyLT5oX3NvdXJjZSk7CisJCWlmICghb3JpZ190bXApCisJCQlyZXR1cm47CisKKwkJbmVpZ2hfbm9kZSA9IGNyZWF0ZV9uZWlnaGJvcihvcmlnX25vZGUsCisJCQkJCSAgICAgb3JpZ190bXAsCisJCQkJCSAgICAgZXRoaGRyLT5oX3NvdXJjZSwgaWZfaW5jb21pbmcpOworCQlpZiAoIW5laWdoX25vZGUpCisJCQlyZXR1cm47CisJfSBlbHNlCisJCWJhdF9kYmcoREJHX0JBVE1BTiwKKwkJCSJVcGRhdGluZyBleGlzdGluZyBsYXN0LWhvcCBuZWlnaGJvciBvZiBvcmlnaW5hdG9yXG4iKTsKIAogCW9yaWdfbm9kZS0+ZmxhZ3MgPSBiYXRtYW5fcGFja2V0LT5mbGFnczsKIAluZWlnaF9ub2RlLT5sYXN0X3ZhbGlkID0gamlmZmllczsKIAotCXJpbmdfYnVmZmVyX3NldChuZWlnaF9ub2RlLT50cV9yZWN2LCAmbmVpZ2hfbm9kZS0+dHFfaW5kZXgsIGJhdG1hbl9wYWNrZXQtPnRxKTsKKwlyaW5nX2J1ZmZlcl9zZXQobmVpZ2hfbm9kZS0+dHFfcmVjdiwKKwkJCSZuZWlnaF9ub2RlLT50cV9pbmRleCwKKwkJCWJhdG1hbl9wYWNrZXQtPnRxKTsKIAluZWlnaF9ub2RlLT50cV9hdmcgPSByaW5nX2J1ZmZlcl9hdmcobmVpZ2hfbm9kZS0+dHFfcmVjdik7CiAKIAlpZiAoIWlzX2R1cGxpY2F0ZSkgewpAQCAtMzQ0LDkgKzI4MSwxMSBAQAogCQluZWlnaF9ub2RlLT5sYXN0X3R0bCA9IGJhdG1hbl9wYWNrZXQtPnR0bDsKIAl9CiAKLQl0bXBfaG5hX2J1ZmZfbGVuID0gKGhuYV9idWZmX2xlbiA+IGJhdG1hbl9wYWNrZXQtPm51bV9obmEgKiBFVEhfQUxFTiA/IGJhdG1hbl9wYWNrZXQtPm51bV9obmEgKiBFVEhfQUxFTiA6IGhuYV9idWZmX2xlbik7CisJdG1wX2huYV9idWZmX2xlbiA9IChobmFfYnVmZl9sZW4gPiBiYXRtYW5fcGFja2V0LT5udW1faG5hICogRVRIX0FMRU4gPworCQkJICAgIGJhdG1hbl9wYWNrZXQtPm51bV9obmEgKiBFVEhfQUxFTiA6IGhuYV9idWZmX2xlbik7CiAKLQkvKiBpZiB0aGlzIG5laWdoYm9yIGFscmVhZHkgaXMgb3VyIG5leHQgaG9wIHRoZXJlIGlzIG5vdGhpbmcgdG8gY2hhbmdlICovCisJLyogaWYgdGhpcyBuZWlnaGJvciBhbHJlYWR5IGlzIG91ciBuZXh0IGhvcCB0aGVyZSBpcyBub3RoaW5nCisJICogdG8gY2hhbmdlICovCiAJaWYgKG9yaWdfbm9kZS0+cm91dGVyID09IG5laWdoX25vZGUpCiAJCWdvdG8gdXBkYXRlX2huYTsKIApAQCAtMzU1LDExICsyOTQsMTIgQEAKIAkgICAgKG9yaWdfbm9kZS0+cm91dGVyLT50cV9hdmcgPiBuZWlnaF9ub2RlLT50cV9hdmcpKQogCQlnb3RvIHVwZGF0ZV9obmE7CiAKLQkvKiBpZiB0aGUgVFEgaXMgdGhlIHNhbWUgYW5kIHRoZSBsaW5rIG5vdCBtb3JlIHN5bWV0cmljIHdlIHdvbid0IGNvbnNpZGVyIGl0IGVpdGhlciAqLworCS8qIGlmIHRoZSBUUSBpcyB0aGUgc2FtZSBhbmQgdGhlIGxpbmsgbm90IG1vcmUgc3ltZXRyaWMgd2UKKwkgKiB3b24ndCBjb25zaWRlciBpdCBlaXRoZXIgKi8KIAlpZiAoKG9yaWdfbm9kZS0+cm91dGVyKSAmJgogCSAgICAgKChuZWlnaF9ub2RlLT50cV9hdmcgPT0gb3JpZ19ub2RlLT5yb3V0ZXItPnRxX2F2ZykgJiYKLQkgICAgIChvcmlnX25vZGUtPnJvdXRlci0+b3JpZ19ub2RlLT5iY2FzdF9vd25fc3VtW2lmX2luY29taW5nLT5pZl9udW1dID49Ci0JICAgICAgbmVpZ2hfbm9kZS0+b3JpZ19ub2RlLT5iY2FzdF9vd25fc3VtW2lmX2luY29taW5nLT5pZl9udW1dKSkpCisJICAgICAob3JpZ19ub2RlLT5yb3V0ZXItPm9yaWdfbm9kZS0+YmNhc3Rfb3duX3N1bVtpZl9pbmNvbWluZy0+aWZfbnVtXQorCSAgICAgID49IG5laWdoX25vZGUtPm9yaWdfbm9kZS0+YmNhc3Rfb3duX3N1bVtpZl9pbmNvbWluZy0+aWZfbnVtXSkpKQogCQlnb3RvIHVwZGF0ZV9obmE7CiAKIAl1cGRhdGVfcm91dGVzKG9yaWdfbm9kZSwgbmVpZ2hfbm9kZSwgaG5hX2J1ZmYsIHRtcF9obmFfYnVmZl9sZW4pOwpAQCAtMzY3LDYwICszMDcsNzIgQEAKIAogdXBkYXRlX2huYToKIAl1cGRhdGVfcm91dGVzKG9yaWdfbm9kZSwgb3JpZ19ub2RlLT5yb3V0ZXIsIGhuYV9idWZmLCB0bXBfaG5hX2J1ZmZfbGVuKTsKLQlyZXR1cm47CiB9CiAKLXN0YXRpYyBjaGFyIGNvdW50X3JlYWxfcGFja2V0cyhzdHJ1Y3QgZXRoaGRyICpldGhoZHIsIHN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0LCBzdHJ1Y3QgYmF0bWFuX2lmICppZl9pbmNvbWluZykKK3N0YXRpYyBjaGFyIGNvdW50X3JlYWxfcGFja2V0cyhzdHJ1Y3QgZXRoaGRyICpldGhoZHIsCisJCQkgICAgICAgc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQsCisJCQkgICAgICAgc3RydWN0IGJhdG1hbl9pZiAqaWZfaW5jb21pbmcpCiB7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOwogCXN0cnVjdCBuZWlnaF9ub2RlICp0bXBfbmVpZ2hfbm9kZTsKIAljaGFyIGlzX2R1cGxpY2F0ZSA9IDA7Ci0KKwl1aW50MTZfdCBzZXFfZGlmZjsKIAogCW9yaWdfbm9kZSA9IGdldF9vcmlnX25vZGUoYmF0bWFuX3BhY2tldC0+b3JpZyk7CiAJaWYgKG9yaWdfbm9kZSA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfbmVpZ2hfbm9kZSwgJm9yaWdfbm9kZS0+bmVpZ2hfbGlzdCwgbGlzdCkgewogCiAJCWlmICghaXNfZHVwbGljYXRlKQotCQkJaXNfZHVwbGljYXRlID0gZ2V0X2JpdF9zdGF0dXModG1wX25laWdoX25vZGUtPnJlYWxfYml0cywgb3JpZ19ub2RlLT5sYXN0X3JlYWxfc2Vxbm8sIGJhdG1hbl9wYWNrZXQtPnNlcW5vKTsKLQotCQlpZiAoY29tcGFyZV9vcmlnKHRtcF9uZWlnaF9ub2RlLT5hZGRyLCBldGhoZHItPmhfc291cmNlKSAmJiAodG1wX25laWdoX25vZGUtPmlmX2luY29taW5nID09IGlmX2luY29taW5nKSkKLQkJCWJpdF9nZXRfcGFja2V0KHRtcF9uZWlnaF9ub2RlLT5yZWFsX2JpdHMsIGJhdG1hbl9wYWNrZXQtPnNlcW5vIC0gb3JpZ19ub2RlLT5sYXN0X3JlYWxfc2Vxbm8sIDEpOworCQkJaXNfZHVwbGljYXRlID0KKwkJCQlnZXRfYml0X3N0YXR1cyh0bXBfbmVpZ2hfbm9kZS0+cmVhbF9iaXRzLAorCQkJCQkgICAgICAgb3JpZ19ub2RlLT5sYXN0X3JlYWxfc2Vxbm8sCisJCQkJCSAgICAgICBiYXRtYW5fcGFja2V0LT5zZXFubyk7CisJCXNlcV9kaWZmID0gYmF0bWFuX3BhY2tldC0+c2Vxbm8gLSBvcmlnX25vZGUtPmxhc3RfcmVhbF9zZXFubzsKKwkJaWYgKGNvbXBhcmVfb3JpZyh0bXBfbmVpZ2hfbm9kZS0+YWRkciwgZXRoaGRyLT5oX3NvdXJjZSkgJiYKKwkJICAgICh0bXBfbmVpZ2hfbm9kZS0+aWZfaW5jb21pbmcgPT0gaWZfaW5jb21pbmcpKQorCQkJYml0X2dldF9wYWNrZXQodG1wX25laWdoX25vZGUtPnJlYWxfYml0cywgc2VxX2RpZmYsIDEpOwogCQllbHNlCi0JCQliaXRfZ2V0X3BhY2tldCh0bXBfbmVpZ2hfbm9kZS0+cmVhbF9iaXRzLCBiYXRtYW5fcGFja2V0LT5zZXFubyAtIG9yaWdfbm9kZS0+bGFzdF9yZWFsX3NlcW5vLCAwKTsKKwkJCWJpdF9nZXRfcGFja2V0KHRtcF9uZWlnaF9ub2RlLT5yZWFsX2JpdHMsIHNlcV9kaWZmLCAwKTsKIAotCQl0bXBfbmVpZ2hfbm9kZS0+cmVhbF9wYWNrZXRfY291bnQgPSBiaXRfcGFja2V0X2NvdW50KHRtcF9uZWlnaF9ub2RlLT5yZWFsX2JpdHMpOworCQl0bXBfbmVpZ2hfbm9kZS0+cmVhbF9wYWNrZXRfY291bnQgPQorCQkJYml0X3BhY2tldF9jb3VudCh0bXBfbmVpZ2hfbm9kZS0+cmVhbF9iaXRzKTsKIAl9CiAKIAlpZiAoIWlzX2R1cGxpY2F0ZSkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfQkFUTUFOLCAidXBkYXRpbmcgbGFzdF9zZXFubzogb2xkICVkLCBuZXcgJWQgXG4iLCBvcmlnX25vZGUtPmxhc3RfcmVhbF9zZXFubywgYmF0bWFuX3BhY2tldC0+c2Vxbm8pOworCQliYXRfZGJnKERCR19CQVRNQU4sICJ1cGRhdGluZyBsYXN0X3NlcW5vOiBvbGQgJWQsIG5ldyAlZCBcbiIsCisJCQlvcmlnX25vZGUtPmxhc3RfcmVhbF9zZXFubywgYmF0bWFuX3BhY2tldC0+c2Vxbm8pOwogCQlvcmlnX25vZGUtPmxhc3RfcmVhbF9zZXFubyA9IGJhdG1hbl9wYWNrZXQtPnNlcW5vOwogCX0KIAogCXJldHVybiBpc19kdXBsaWNhdGU7CiB9CiAKLXZvaWQgcmVjZWl2ZV9iYXRfcGFja2V0KHN0cnVjdCBldGhoZHIgKmV0aGhkciwgc3RydWN0IGJhdG1hbl9wYWNrZXQgKmJhdG1hbl9wYWNrZXQsIHVuc2lnbmVkIGNoYXIgKmhuYV9idWZmLCBpbnQgaG5hX2J1ZmZfbGVuLCBzdHJ1Y3QgYmF0bWFuX2lmICppZl9pbmNvbWluZykKK3ZvaWQgcmVjZWl2ZV9iYXRfcGFja2V0KHN0cnVjdCBldGhoZHIgKmV0aGhkciwKKwkJCQlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCwKKwkJCQl1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbiwKKwkJCQlzdHJ1Y3QgYmF0bWFuX2lmICppZl9pbmNvbWluZykKIHsKIAlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19uZWlnaF9ub2RlLCAqb3JpZ19ub2RlOwotCWNoYXIgb3JpZ19zdHJbRVRIX1NUUl9MRU5dLCBwcmV2X3NlbmRlcl9zdHJbRVRIX1NUUl9MRU5dLCBuZWlnaF9zdHJbRVRIX1NUUl9MRU5dOwogCWNoYXIgaGFzX2RpcmVjdGxpbmtfZmxhZzsKLQljaGFyIGlzX215X2FkZHIgPSAwLCBpc19teV9vcmlnID0gMCwgaXNfbXlfb2xkb3JpZyA9IDAsIGlzX2Jyb2FkY2FzdCA9IDAsIGlzX2JpZGlyZWN0aW9uYWwsIGlzX3NpbmdsZV9ob3BfbmVpZ2gsIGlzX2R1cGxpY2F0ZTsKKwljaGFyIGlzX215X2FkZHIgPSAwLCBpc19teV9vcmlnID0gMCwgaXNfbXlfb2xkb3JpZyA9IDA7CisJY2hhciBpc19icm9hZGNhc3QgPSAwLCBpc19iaWRpcmVjdGlvbmFsLCBpc19zaW5nbGVfaG9wX25laWdoOworCWNoYXIgaXNfZHVwbGljYXRlOwogCXVuc2lnbmVkIHNob3J0IGlmX2luY29taW5nX3NlcW5vOwogCi0JLyogU2lsZW50bHkgZHJvcCB3aGVuIHRoZSBiYXRtYW4gcGFja2V0IGlzIGFjdHVhbGx5IG5vdCBhIGNvcnJlY3QgcGFja2V0LgorCS8qIFNpbGVudGx5IGRyb3Agd2hlbiB0aGUgYmF0bWFuIHBhY2tldCBpcyBhY3R1YWxseSBub3QgYQorCSAqIGNvcnJlY3QgcGFja2V0LgogCSAqCiAJICogVGhpcyBtaWdodCBoYXBwZW4gaWYgYSBwYWNrZXQgaXMgcGFkZGVkIChlLmcuIEV0aGVybmV0IGhhcyBhCiAJICogbWluaW11bSBmcmFtZSBsZW5ndGggb2YgNjQgYnl0ZSkgYW5kIHRoZSBhZ2dyZWdhdGlvbiBpbnRlcnByZXRzCiAJICogaXQgYXMgYW4gYWRkaXRpb25hbCBsZW5ndGguCiAJICoKLQkgKiBUT0RPOiBBIG1vcmUgc2FuZSBzb2x1dGlvbiB3b3VsZCBiZSB0byBoYXZlIGEgYml0IGluIHRoZSBiYXRtYW5fcGFja2V0Ci0JICogdG8gZGV0ZWN0IHdoZXRoZXIgdGhlIHBhY2tldCBpcyB0aGUgbGFzdCBwYWNrZXQgaW4gYW4gYWdncmVnYXRpb24uCi0JICogSGVyZSB3ZSBleHBlY3QgdGhhdCB0aGUgcGFkZGluZyBpcyBhbHdheXMgemVybyAob3Igbm90IDB4MDEpCisJICogVE9ETzogQSBtb3JlIHNhbmUgc29sdXRpb24gd291bGQgYmUgdG8gaGF2ZSBhIGJpdCBpbiB0aGUKKwkgKiBiYXRtYW5fcGFja2V0IHRvIGRldGVjdCB3aGV0aGVyIHRoZSBwYWNrZXQgaXMgdGhlIGxhc3QKKwkgKiBwYWNrZXQgaW4gYW4gYWdncmVnYXRpb24uICBIZXJlIHdlIGV4cGVjdCB0aGF0IHRoZSBwYWRkaW5nCisJICogaXMgYWx3YXlzIHplcm8gKG9yIG5vdCAweDAxKQogCSAqLwogCWlmIChiYXRtYW5fcGFja2V0LT5wYWNrZXRfdHlwZSAhPSBCQVRfUEFDS0VUKQogCQlyZXR1cm47CkBAIC00MjgsMjcgKzM4MCwzMSBAQAogCS8qIGNvdWxkIGJlIGNoYW5nZWQgYnkgc2NoZWR1bGVfb3duX3BhY2tldCgpICovCiAJaWZfaW5jb21pbmdfc2Vxbm8gPSBhdG9taWNfcmVhZCgmaWZfaW5jb21pbmctPnNlcW5vKTsKIAotCWFkZHJfdG9fc3RyaW5nKG9yaWdfc3RyLCBiYXRtYW5fcGFja2V0LT5vcmlnKTsKLQlhZGRyX3RvX3N0cmluZyhwcmV2X3NlbmRlcl9zdHIsIGJhdG1hbl9wYWNrZXQtPnByZXZfc2VuZGVyKTsKLQlhZGRyX3RvX3N0cmluZyhuZWlnaF9zdHIsIGV0aGhkci0+aF9zb3VyY2UpOwotCiAJaGFzX2RpcmVjdGxpbmtfZmxhZyA9IChiYXRtYW5fcGFja2V0LT5mbGFncyAmIERJUkVDVExJTksgPyAxIDogMCk7CiAKLQlpc19zaW5nbGVfaG9wX25laWdoID0gKGNvbXBhcmVfb3JpZyhldGhoZHItPmhfc291cmNlLCBiYXRtYW5fcGFja2V0LT5vcmlnKSA/IDEgOiAwKTsKKwlpc19zaW5nbGVfaG9wX25laWdoID0gKGNvbXBhcmVfb3JpZyhldGhoZHItPmhfc291cmNlLAorCQkJCQkgICAgYmF0bWFuX3BhY2tldC0+b3JpZykgPyAxIDogMCk7CiAKLQlkZWJ1Z19sb2coTE9HX1RZUEVfQkFUTUFOLCAiUmVjZWl2ZWQgQkFUTUFOIHBhY2tldCB2aWEgTkI6ICVzLCBJRjogJXMgWyVzXSAoZnJvbSBPRzogJXMsIHZpYSBwcmV2IE9HOiAlcywgc2Vxbm8gJWQsIHRxICVkLCBUVEwgJWQsIFYgJWQsIElERiAlZCkgXG4iLCBuZWlnaF9zdHIsIGlmX2luY29taW5nLT5kZXYsIGlmX2luY29taW5nLT5hZGRyX3N0ciwgb3JpZ19zdHIsIHByZXZfc2VuZGVyX3N0ciwgYmF0bWFuX3BhY2tldC0+c2Vxbm8sIGJhdG1hbl9wYWNrZXQtPnRxLCBiYXRtYW5fcGFja2V0LT50dGwsIGJhdG1hbl9wYWNrZXQtPnZlcnNpb24sIGhhc19kaXJlY3RsaW5rX2ZsYWcpOworCWJhdF9kYmcoREJHX0JBVE1BTiwgIlJlY2VpdmVkIEJBVE1BTiBwYWNrZXQgdmlhIE5COiAlcE0sIElGOiAlcyBbJXNdIChmcm9tIE9HOiAlcE0sIHZpYSBwcmV2IE9HOiAlcE0sIHNlcW5vICVkLCB0cSAlZCwgVFRMICVkLCBWICVkLCBJREYgJWQpIFxuIiwKKwkJZXRoaGRyLT5oX3NvdXJjZSwgaWZfaW5jb21pbmctPmRldiwgaWZfaW5jb21pbmctPmFkZHJfc3RyLAorCQliYXRtYW5fcGFja2V0LT5vcmlnLCBiYXRtYW5fcGFja2V0LT5wcmV2X3NlbmRlciwKKwkJYmF0bWFuX3BhY2tldC0+c2Vxbm8sIGJhdG1hbl9wYWNrZXQtPnRxLCBiYXRtYW5fcGFja2V0LT50dGwsCisJCWJhdG1hbl9wYWNrZXQtPnZlcnNpb24sIGhhc19kaXJlY3RsaW5rX2ZsYWcpOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoYmF0bWFuX2lmLCAmaWZfbGlzdCwgbGlzdCkgewogCQlpZiAoYmF0bWFuX2lmLT5pZl9hY3RpdmUgIT0gSUZfQUNUSVZFKQogCQkJY29udGludWU7CiAKLQkJaWYgKGNvbXBhcmVfb3JpZyhldGhoZHItPmhfc291cmNlLCBiYXRtYW5faWYtPm5ldF9kZXYtPmRldl9hZGRyKSkKKwkJaWYgKGNvbXBhcmVfb3JpZyhldGhoZHItPmhfc291cmNlLAorCQkJCSBiYXRtYW5faWYtPm5ldF9kZXYtPmRldl9hZGRyKSkKIAkJCWlzX215X2FkZHIgPSAxOwogCi0JCWlmIChjb21wYXJlX29yaWcoYmF0bWFuX3BhY2tldC0+b3JpZywgYmF0bWFuX2lmLT5uZXRfZGV2LT5kZXZfYWRkcikpCisJCWlmIChjb21wYXJlX29yaWcoYmF0bWFuX3BhY2tldC0+b3JpZywKKwkJCQkgYmF0bWFuX2lmLT5uZXRfZGV2LT5kZXZfYWRkcikpCiAJCQlpc19teV9vcmlnID0gMTsKIAotCQlpZiAoY29tcGFyZV9vcmlnKGJhdG1hbl9wYWNrZXQtPnByZXZfc2VuZGVyLCBiYXRtYW5faWYtPm5ldF9kZXYtPmRldl9hZGRyKSkKKwkJaWYgKGNvbXBhcmVfb3JpZyhiYXRtYW5fcGFja2V0LT5wcmV2X3NlbmRlciwKKwkJCQkgYmF0bWFuX2lmLT5uZXRfZGV2LT5kZXZfYWRkcikpCiAJCQlpc19teV9vbGRvcmlnID0gMTsKIAogCQlpZiAoY29tcGFyZV9vcmlnKGV0aGhkci0+aF9zb3VyY2UsIGJyb2FkY2FzdEFkZHIpKQpAQCAtNDU2LDQ0ICs0MTIsNjEgQEAKIAl9CiAKIAlpZiAoYmF0bWFuX3BhY2tldC0+dmVyc2lvbiAhPSBDT01QQVRfVkVSU0lPTikgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfQkFUTUFOLCAiRHJvcCBwYWNrZXQ6IGluY29tcGF0aWJsZSBiYXRtYW4gdmVyc2lvbiAoJWkpIFxuIiwgYmF0bWFuX3BhY2tldC0+dmVyc2lvbik7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwKKwkJCSJEcm9wIHBhY2tldDogaW5jb21wYXRpYmxlIGJhdG1hbiB2ZXJzaW9uICglaSlcbiIsCisJCQliYXRtYW5fcGFja2V0LT52ZXJzaW9uKTsKIAkJcmV0dXJuOwogCX0KIAogCWlmIChpc19teV9hZGRyKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sICJEcm9wIHBhY2tldDogcmVjZWl2ZWQgbXkgb3duIGJyb2FkY2FzdCAoc2VuZGVyOiAlcykgXG4iLCBuZWlnaF9zdHIpOworCQliYXRfZGJnKERCR19CQVRNQU4sCisJCQkiRHJvcCBwYWNrZXQ6IHJlY2VpdmVkIG15IG93biBicm9hZGNhc3QgKHNlbmRlcjogJXBNKVxuIiwKKwkJCWV0aGhkci0+aF9zb3VyY2UpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKGlzX2Jyb2FkY2FzdCkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfQkFUTUFOLCAiRHJvcCBwYWNrZXQ6IGlnbm9yaW5nIGFsbCBwYWNrZXRzIHdpdGggYnJvYWRjYXN0IHNvdXJjZSBhZGRyIChzZW5kZXI6ICVzKSBcbiIsIG5laWdoX3N0cik7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgIkRyb3AgcGFja2V0OiBpZ25vcmluZyBhbGwgcGFja2V0cyB3aXRoIGJyb2FkY2FzdCBzb3VyY2UgYWRkciAoc2VuZGVyOiAlcE0pIFxuIiwgZXRoaGRyLT5oX3NvdXJjZSk7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoaXNfbXlfb3JpZykgeworCQlUWVBFX09GX1dPUkQgKndvcmQ7CisJCWludCBvZmZzZXQ7CisKIAkJb3JpZ19uZWlnaF9ub2RlID0gZ2V0X29yaWdfbm9kZShldGhoZHItPmhfc291cmNlKTsKIAotCQkvKiBuZWlnaGJvdXIgaGFzIHRvIGluZGljYXRlIGRpcmVjdCBsaW5rIGFuZCBpdCBoYXMgdG8gY29tZSB2aWEgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJmYWNlICovCi0JCS8qIGlmIHJlY2VpdmVkIHNlcW5vIGVxdWFscyBsYXN0IHNlbmQgc2Vxbm8gc2F2ZSBuZXcgc2Vxbm8gZm9yIGJpZGlyZWN0aW9uYWwgY2hlY2sgKi8KLQkJaWYgKGhhc19kaXJlY3RsaW5rX2ZsYWcgJiYgY29tcGFyZV9vcmlnKGlmX2luY29taW5nLT5uZXRfZGV2LT5kZXZfYWRkciwgYmF0bWFuX3BhY2tldC0+b3JpZykgJiYKLQkJCQkgIChiYXRtYW5fcGFja2V0LT5zZXFubyAtIGlmX2luY29taW5nX3NlcW5vICsgMiA9PSAwKSkgewotCQkJYml0X21hcmsoKFRZUEVfT0ZfV09SRCAqKSYob3JpZ19uZWlnaF9ub2RlLT5iY2FzdF9vd25baWZfaW5jb21pbmctPmlmX251bSAqIE5VTV9XT1JEU10pLCAwKTsKLQkJCW9yaWdfbmVpZ2hfbm9kZS0+YmNhc3Rfb3duX3N1bVtpZl9pbmNvbWluZy0+aWZfbnVtXSA9IGJpdF9wYWNrZXRfY291bnQoKFRZUEVfT0ZfV09SRCAqKSYob3JpZ19uZWlnaF9ub2RlLT5iY2FzdF9vd25baWZfaW5jb21pbmctPmlmX251bSAqIE5VTV9XT1JEU10pKTsKKwkJaWYgKCFvcmlnX25laWdoX25vZGUpCisJCQlyZXR1cm47CisKKwkJLyogbmVpZ2hib3IgaGFzIHRvIGluZGljYXRlIGRpcmVjdCBsaW5rIGFuZCBpdCBoYXMgdG8KKwkJICogY29tZSB2aWEgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJmYWNlICovCisJCS8qIGlmIHJlY2VpdmVkIHNlcW5vIGVxdWFscyBsYXN0IHNlbmQgc2Vxbm8gc2F2ZSBuZXcKKwkJICogc2Vxbm8gZm9yIGJpZGlyZWN0aW9uYWwgY2hlY2sgKi8KKwkJaWYgKGhhc19kaXJlY3RsaW5rX2ZsYWcgJiYKKwkJICAgIGNvbXBhcmVfb3JpZyhpZl9pbmNvbWluZy0+bmV0X2Rldi0+ZGV2X2FkZHIsCisJCQkJIGJhdG1hbl9wYWNrZXQtPm9yaWcpICYmCisJCSAgICAoYmF0bWFuX3BhY2tldC0+c2Vxbm8gLSBpZl9pbmNvbWluZ19zZXFubyArIDIgPT0gMCkpIHsKKwkJCW9mZnNldCA9IGlmX2luY29taW5nLT5pZl9udW0gKiBOVU1fV09SRFM7CisJCQl3b3JkID0gJihvcmlnX25laWdoX25vZGUtPmJjYXN0X293bltvZmZzZXRdKTsKKwkJCWJpdF9tYXJrKHdvcmQsIDApOworCQkJb3JpZ19uZWlnaF9ub2RlLT5iY2FzdF9vd25fc3VtW2lmX2luY29taW5nLT5pZl9udW1dID0KKwkJCQliaXRfcGFja2V0X2NvdW50KHdvcmQpOwogCQl9CiAKLQkJZGVidWdfbG9nKExPR19UWVBFX0JBVE1BTiwgIkRyb3AgcGFja2V0OiBvcmlnaW5hdG9yIHBhY2tldCBmcm9tIG15c2VsZiAodmlhIG5laWdoYm91cikgXG4iKTsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCAiRHJvcCBwYWNrZXQ6IG9yaWdpbmF0b3IgcGFja2V0IGZyb20gbXlzZWxmICh2aWEgbmVpZ2hib3IpIFxuIik7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoYmF0bWFuX3BhY2tldC0+dHEgPT0gMCkgewogCQljb3VudF9yZWFsX3BhY2tldHMoZXRoaGRyLCBiYXRtYW5fcGFja2V0LCBpZl9pbmNvbWluZyk7CiAKLQkJZGVidWdfbG9nKExPR19UWVBFX0JBVE1BTiwgIkRyb3AgcGFja2V0OiBvcmlnaW5hdG9yIHBhY2tldCB3aXRoIHRxIGVxdWFsIDAgXG4iKTsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCAiRHJvcCBwYWNrZXQ6IG9yaWdpbmF0b3IgcGFja2V0IHdpdGggdHEgZXF1YWwgMCBcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKGlzX215X29sZG9yaWcpIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX0JBVE1BTiwgIkRyb3AgcGFja2V0OiBpZ25vcmluZyBhbGwgcmVicm9hZGNhc3QgZWNob3MgKHNlbmRlcjogJXMpIFxuIiwgbmVpZ2hfc3RyKTsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCAiRHJvcCBwYWNrZXQ6IGlnbm9yaW5nIGFsbCByZWJyb2FkY2FzdCBlY2hvcyAoc2VuZGVyOiAlcE0pIFxuIiwgZXRoaGRyLT5oX3NvdXJjZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTUwNCw1MDcgKzQ3Nyw1MDIgQEAKIAkJcmV0dXJuOwogCiAJLyogYXZvaWQgdGVtcG9yYXJ5IHJvdXRpbmcgbG9vcHMgKi8KLQlpZiAoKG9yaWdfbm9kZS0+cm91dGVyKSAmJiAob3JpZ19ub2RlLT5yb3V0ZXItPm9yaWdfbm9kZS0+cm91dGVyKSAmJgotCSAgICAoY29tcGFyZV9vcmlnKG9yaWdfbm9kZS0+cm91dGVyLT5hZGRyLCBiYXRtYW5fcGFja2V0LT5wcmV2X3NlbmRlcikpICYmCisJaWYgKChvcmlnX25vZGUtPnJvdXRlcikgJiYKKwkgICAgKG9yaWdfbm9kZS0+cm91dGVyLT5vcmlnX25vZGUtPnJvdXRlcikgJiYKKwkgICAgKGNvbXBhcmVfb3JpZyhvcmlnX25vZGUtPnJvdXRlci0+YWRkciwKKwkJCSAgYmF0bWFuX3BhY2tldC0+cHJldl9zZW5kZXIpKSAmJgogCSAgICAhKGNvbXBhcmVfb3JpZyhiYXRtYW5fcGFja2V0LT5vcmlnLCBiYXRtYW5fcGFja2V0LT5wcmV2X3NlbmRlcikpICYmCi0JICAgIChjb21wYXJlX29yaWcob3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIsIG9yaWdfbm9kZS0+cm91dGVyLT5vcmlnX25vZGUtPnJvdXRlci0+YWRkcikpKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sICJEcm9wIHBhY2tldDogaWdub3JpbmcgYWxsIHJlYnJvYWRjYXN0IHBhY2tldHMgdGhhdCBtYXkgbWFrZSBtZSBsb29wIChzZW5kZXI6ICVzKSBcbiIsIG5laWdoX3N0cik7CisJICAgIChjb21wYXJlX29yaWcob3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIsCisJCQkgIG9yaWdfbm9kZS0+cm91dGVyLT5vcmlnX25vZGUtPnJvdXRlci0+YWRkcikpKSB7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgIkRyb3AgcGFja2V0OiBpZ25vcmluZyBhbGwgcmVicm9hZGNhc3QgcGFja2V0cyB0aGF0IG1heSBtYWtlIG1lIGxvb3AgKHNlbmRlcjogJXBNKSBcbiIsIGV0aGhkci0+aF9zb3VyY2UpOwogCQlyZXR1cm47CiAJfQogCi0JLyogaWYgc2VuZGVyIGlzIGEgZGlyZWN0IG5laWdoYm9yIHRoZSBzZW5kZXIgbWFjIGVxdWFscyBvcmlnaW5hdG9yIG1hYyAqLwotCW9yaWdfbmVpZ2hfbm9kZSA9IChpc19zaW5nbGVfaG9wX25laWdoID8gb3JpZ19ub2RlIDogZ2V0X29yaWdfbm9kZShldGhoZHItPmhfc291cmNlKSk7CisJLyogaWYgc2VuZGVyIGlzIGEgZGlyZWN0IG5laWdoYm9yIHRoZSBzZW5kZXIgbWFjIGVxdWFscworCSAqIG9yaWdpbmF0b3IgbWFjICovCisJb3JpZ19uZWlnaF9ub2RlID0gKGlzX3NpbmdsZV9ob3BfbmVpZ2ggPworCQkJICAgb3JpZ19ub2RlIDogZ2V0X29yaWdfbm9kZShldGhoZHItPmhfc291cmNlKSk7CiAJaWYgKG9yaWdfbmVpZ2hfbm9kZSA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQkvKiBkcm9wIHBhY2tldCBpZiBzZW5kZXIgaXMgbm90IGEgZGlyZWN0IG5laWdoYm9yIGFuZCBpZiB3ZSBkb24ndCByb3V0ZSB0b3dhcmRzIGl0ICovCi0JaWYgKCFpc19zaW5nbGVfaG9wX25laWdoICYmIChvcmlnX25laWdoX25vZGUtPnJvdXRlciA9PSBOVUxMKSkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfQkFUTUFOLCAiRHJvcCBwYWNrZXQ6IE9HTSB2aWEgdW5rbm93biBuZWlnaGJvciEgXG4iKTsKKwkvKiBkcm9wIHBhY2tldCBpZiBzZW5kZXIgaXMgbm90IGEgZGlyZWN0IG5laWdoYm9yIGFuZCBpZiB3ZQorCSAqIGRvbid0IHJvdXRlIHRvd2FyZHMgaXQgKi8KKwlpZiAoIWlzX3NpbmdsZV9ob3BfbmVpZ2ggJiYKKwkgICAgKG9yaWdfbmVpZ2hfbm9kZS0+cm91dGVyID09IE5VTEwpKSB7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgIkRyb3AgcGFja2V0OiBPR00gdmlhIHVua25vd24gbmVpZ2hib3IhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWlzX2JpZGlyZWN0aW9uYWwgPSBpc0JpZGlyZWN0aW9uYWxOZWlnaChvcmlnX25vZGUsIG9yaWdfbmVpZ2hfbm9kZSwgYmF0bWFuX3BhY2tldCwgaWZfaW5jb21pbmcpOworCWlzX2JpZGlyZWN0aW9uYWwgPSBpc0JpZGlyZWN0aW9uYWxOZWlnaChvcmlnX25vZGUsIG9yaWdfbmVpZ2hfbm9kZSwKKwkJCQkJCWJhdG1hbl9wYWNrZXQsIGlmX2luY29taW5nKTsKIAotCS8qIHVwZGF0ZSByYW5raW5nIGlmIGl0IGlzIG5vdCBhIGR1cGxpY2F0ZSBvciBoYXMgdGhlIHNhbWUgc2Vxbm8gYW5kIHNpbWlsYXIgdHRsIGFzIHRoZSBub24tZHVwbGljYXRlICovCi0JaWYgKGlzX2JpZGlyZWN0aW9uYWwgJiYgKCFpc19kdXBsaWNhdGUgfHwKLQkJKChvcmlnX25vZGUtPmxhc3RfcmVhbF9zZXFubyA9PSBiYXRtYW5fcGFja2V0LT5zZXFubykgJiYKLQkJCShvcmlnX25vZGUtPmxhc3RfdHRsIC0gMyA8PSBiYXRtYW5fcGFja2V0LT50dGwpKSkpCi0JCXVwZGF0ZV9vcmlnKG9yaWdfbm9kZSwgZXRoaGRyLCBiYXRtYW5fcGFja2V0LCBpZl9pbmNvbWluZywgaG5hX2J1ZmYsIGhuYV9idWZmX2xlbiwgaXNfZHVwbGljYXRlKTsKKwkvKiB1cGRhdGUgcmFua2luZyBpZiBpdCBpcyBub3QgYSBkdXBsaWNhdGUgb3IgaGFzIHRoZSBzYW1lCisJICogc2Vxbm8gYW5kIHNpbWlsYXIgdHRsIGFzIHRoZSBub24tZHVwbGljYXRlICovCisJaWYgKGlzX2JpZGlyZWN0aW9uYWwgJiYKKwkgICAgKCFpc19kdXBsaWNhdGUgfHwKKwkgICAgICgob3JpZ19ub2RlLT5sYXN0X3JlYWxfc2Vxbm8gPT0gYmF0bWFuX3BhY2tldC0+c2Vxbm8pICYmCisJICAgICAgKG9yaWdfbm9kZS0+bGFzdF90dGwgLSAzIDw9IGJhdG1hbl9wYWNrZXQtPnR0bCkpKSkKKwkJdXBkYXRlX29yaWcob3JpZ19ub2RlLCBldGhoZHIsIGJhdG1hbl9wYWNrZXQsCisJCQkgICAgaWZfaW5jb21pbmcsIGhuYV9idWZmLCBobmFfYnVmZl9sZW4sIGlzX2R1cGxpY2F0ZSk7CiAKLQkvKiBpcyBzaW5nbGUgaG9wIChkaXJlY3QpIG5laWdoYm91ciAqLworCS8qIGlzIHNpbmdsZSBob3AgKGRpcmVjdCkgbmVpZ2hib3IgKi8KIAlpZiAoaXNfc2luZ2xlX2hvcF9uZWlnaCkgewogCiAJCS8qIG1hcmsgZGlyZWN0IGxpbmsgb24gaW5jb21pbmcgaW50ZXJmYWNlICovCi0JCXNjaGVkdWxlX2ZvcndhcmRfcGFja2V0KG9yaWdfbm9kZSwgZXRoaGRyLCBiYXRtYW5fcGFja2V0LCAxLCBobmFfYnVmZl9sZW4sIGlmX2luY29taW5nKTsKKwkJc2NoZWR1bGVfZm9yd2FyZF9wYWNrZXQob3JpZ19ub2RlLCBldGhoZHIsIGJhdG1hbl9wYWNrZXQsCisJCQkJCTEsIGhuYV9idWZmX2xlbiwgaWZfaW5jb21pbmcpOwogCi0JCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sICJGb3J3YXJkaW5nIHBhY2tldDogcmVicm9hZGNhc3QgbmVpZ2hib3VyIHBhY2tldCB3aXRoIGRpcmVjdCBsaW5rIGZsYWcgXG4iKTsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCAiRm9yd2FyZGluZyBwYWNrZXQ6IHJlYnJvYWRjYXN0IG5laWdoYm9yIHBhY2tldCB3aXRoIGRpcmVjdCBsaW5rIGZsYWdcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJLyogbXVsdGlob3Agb3JpZ2luYXRvciAqLwogCWlmICghaXNfYmlkaXJlY3Rpb25hbCkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfQkFUTUFOLCAiRHJvcCBwYWNrZXQ6IG5vdCByZWNlaXZlZCB2aWEgYmlkaXJlY3Rpb25hbCBsaW5rXG4iKTsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLAorCQkJIkRyb3AgcGFja2V0OiBub3QgcmVjZWl2ZWQgdmlhIGJpZGlyZWN0aW9uYWwgbGlua1xuIik7CiAJCXJldHVybjsKIAl9CiAKIAlpZiAoaXNfZHVwbGljYXRlKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sICJEcm9wIHBhY2tldDogZHVwbGljYXRlIHBhY2tldCByZWNlaXZlZFxuIik7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwgIkRyb3AgcGFja2V0OiBkdXBsaWNhdGUgcGFja2V0IHJlY2VpdmVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sICJGb3J3YXJkaW5nIHBhY2tldDogcmVicm9hZGNhc3Qgb3JpZ2luYXRvciBwYWNrZXQgXG4iKTsKLQlzY2hlZHVsZV9mb3J3YXJkX3BhY2tldChvcmlnX25vZGUsIGV0aGhkciwgYmF0bWFuX3BhY2tldCwgMCwgaG5hX2J1ZmZfbGVuLCBpZl9pbmNvbWluZyk7CisJYmF0X2RiZyhEQkdfQkFUTUFOLAorCQkiRm9yd2FyZGluZyBwYWNrZXQ6IHJlYnJvYWRjYXN0IG9yaWdpbmF0b3IgcGFja2V0XG4iKTsKKwlzY2hlZHVsZV9mb3J3YXJkX3BhY2tldChvcmlnX25vZGUsIGV0aGhkciwgYmF0bWFuX3BhY2tldCwKKwkJCQkwLCBobmFfYnVmZl9sZW4sIGlmX2luY29taW5nKTsKIH0KIAotdm9pZCBwdXJnZV9vcmlnKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK2ludCByZWN2X2JhdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdF9wb3MsICpsaXN0X3Bvc190bXA7Ci0Jc3RydWN0IGhhc2hfaXRfdCAqaGFzaGl0ID0gTlVMTDsKLQlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7Ci0Jc3RydWN0IG5laWdoX25vZGUgKm5laWdoX25vZGUsICpiZXN0X25laWdoX25vZGU7Ci0JY2hhciBvcmlnX3N0cltFVEhfU1RSX0xFTl0sIG5laWdoX3N0cltFVEhfU1RSX0xFTl0sIG5laWdoX3B1cmdlZDsKLQotCXNwaW5fbG9jaygmb3JpZ19oYXNoX2xvY2spOwotCi0JLyogZm9yIGFsbCBvcmlnaW5zLi4uICovCi0Jd2hpbGUgKE5VTEwgIT0gKGhhc2hpdCA9IGhhc2hfaXRlcmF0ZShvcmlnX2hhc2gsIGhhc2hpdCkpKSB7Ci0KLQkJb3JpZ19ub2RlID0gaGFzaGl0LT5idWNrZXQtPmRhdGE7Ci0JCWFkZHJfdG9fc3RyaW5nKG9yaWdfc3RyLCBvcmlnX25vZGUtPm9yaWcpOwotCi0JCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG9yaWdfbm9kZS0+bGFzdF92YWxpZCArICgoMiAqIFBVUkdFX1RJTUVPVVQgKiBIWikgLyAxMDAwKSkpIHsKLQotCQkJZGVidWdfbG9nKExPR19UWVBFX0JBVE1BTiwgIk9yaWdpbmF0b3IgdGltZW91dDogb3JpZ2luYXRvciAlcywgbGFzdF92YWxpZCAldSBcbiIsIG9yaWdfc3RyLCAob3JpZ19ub2RlLT5sYXN0X3ZhbGlkIC8gSFopKTsKLQotCQkJaGFzaF9yZW1vdmVfYnVja2V0KG9yaWdfaGFzaCwgaGFzaGl0KTsKLQkJCWZyZWVfb3JpZ19ub2RlKG9yaWdfbm9kZSk7Ci0KLQkJfSBlbHNlIHsKLQotCQkJYmVzdF9uZWlnaF9ub2RlID0gTlVMTDsKLQkJCW5laWdoX3B1cmdlZCA9IDA7Ci0KLQkJCS8qIGZvciBhbGwgbmVpZ2hib3VycyB0b3dhcmRzIHRoaXMgb3JpZ2luYXRvciAuLi4gKi8KLQkJCWxpc3RfZm9yX2VhY2hfc2FmZShsaXN0X3BvcywgbGlzdF9wb3NfdG1wLCAmb3JpZ19ub2RlLT5uZWlnaF9saXN0KSB7Ci0JCQkJbmVpZ2hfbm9kZSA9IGxpc3RfZW50cnkobGlzdF9wb3MsIHN0cnVjdCBuZWlnaF9ub2RlLCBsaXN0KTsKLQotCQkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG5laWdoX25vZGUtPmxhc3RfdmFsaWQgKyAoKFBVUkdFX1RJTUVPVVQgKiBIWikgLyAxMDAwKSkpIHsKLQotCQkJCQlhZGRyX3RvX3N0cmluZyhuZWlnaF9zdHIsIG5laWdoX25vZGUtPmFkZHIpOwotCQkJCQlkZWJ1Z19sb2coTE9HX1RZUEVfQkFUTUFOLCAiTmVpZ2hib3VyIHRpbWVvdXQ6IG9yaWdpbmF0b3IgJXMsIG5laWdoYm91cjogJXMsIGxhc3RfdmFsaWQgJXUgXG4iLCBvcmlnX3N0ciwgbmVpZ2hfc3RyLCAobmVpZ2hfbm9kZS0+bGFzdF92YWxpZCAvIEhaKSk7Ci0KLQkJCQkJbmVpZ2hfcHVyZ2VkID0gMTsKLQkJCQkJbGlzdF9kZWwobGlzdF9wb3MpOwotCQkJCQlrZnJlZShuZWlnaF9ub2RlKTsKLQotCQkJCX0gZWxzZSB7Ci0KLQkJCQkJaWYgKChiZXN0X25laWdoX25vZGUgPT0gTlVMTCkgfHwgKG5laWdoX25vZGUtPnRxX2F2ZyA+IGJlc3RfbmVpZ2hfbm9kZS0+dHFfYXZnKSkKLQkJCQkJCWJlc3RfbmVpZ2hfbm9kZSA9IG5laWdoX25vZGU7Ci0KLQkJCQl9Ci0KLQkJCX0KLQotCQkJaWYgKG5laWdoX3B1cmdlZCkKLQkJCQl1cGRhdGVfcm91dGVzKG9yaWdfbm9kZSwgYmVzdF9uZWlnaF9ub2RlLCBvcmlnX25vZGUtPmhuYV9idWZmLCBvcmlnX25vZGUtPmhuYV9idWZmX2xlbik7Ci0KLQkJfQotCi0JfQotCi0Jc3Bpbl91bmxvY2soJm9yaWdfaGFzaF9sb2NrKTsKLQotCXN0YXJ0X3B1cmdlX3RpbWVyKCk7Ci19Ci0KLXN0YXRpYyBpbnQgcmVjZWl2ZV9yYXdfcGFja2V0KHN0cnVjdCBzb2NrZXQgKnJhd19zb2NrLCB1bnNpZ25lZCBjaGFyICpwYWNrZXRfYnVmZiwgaW50IHBhY2tldF9idWZmX2xlbikKLXsKLQlzdHJ1Y3Qga3ZlYyBpb3Y7Ci0Jc3RydWN0IG1zZ2hkciBtc2c7Ci0KLQlpb3YuaW92X2Jhc2UgPSBwYWNrZXRfYnVmZjsKLQlpb3YuaW92X2xlbiA9IHBhY2tldF9idWZmX2xlbjsKLQotCW1zZy5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQ7CS8qIG5vbi1ibG9ja2luZyAqLwotCW1zZy5tc2dfbmFtZSA9IE5VTEw7Ci0JbXNnLm1zZ19uYW1lbGVuID0gMDsKLQltc2cubXNnX2NvbnRyb2wgPSBOVUxMOwotCi0JcmV0dXJuIGtlcm5lbF9yZWN2bXNnKHJhd19zb2NrLCAmbXNnLCAmaW92LCAxLCBwYWNrZXRfYnVmZl9sZW4sIE1TR19ET05UV0FJVCk7Ci19Ci0KLWludCBwYWNrZXRfcmVjdl90aHJlYWQodm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CiAJc3RydWN0IGV0aGhkciAqZXRoaGRyOwotCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0OwotCXN0cnVjdCB1bmljYXN0X3BhY2tldCAqdW5pY2FzdF9wYWNrZXQ7Ci0Jc3RydWN0IGJjYXN0X3BhY2tldCAqYmNhc3RfcGFja2V0OwotCXN0cnVjdCBpY21wX3BhY2tldCAqaWNtcF9wYWNrZXQ7Ci0Jc3RydWN0IHZpc19wYWNrZXQgKnZpc19wYWNrZXQ7Ci0Jc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOwotCXVuc2lnbmVkIGNoYXIgKnBhY2tldF9idWZmLCBzcmNfc3RyW0VUSF9TVFJfTEVOXSwgZHN0X3N0cltFVEhfU1RSX0xFTl07Ci0JaW50IHZpc19pbmZvX2xlbjsKLQlpbnQgcmVzdWx0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlhdG9taWNfc2V0KCZkYXRhX3JlYWR5X2NvbmQsIDApOwotCWF0b21pY19zZXQoJmV4aXRfY29uZCwgMCk7Ci0JcGFja2V0X2J1ZmYgPSBrbWFsbG9jKFBBQ0tCVUZGX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghcGFja2V0X2J1ZmYpIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX0NSSVQsICJDb3VsZCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBwYWNrZXQgYnVmZmVyLiA6KFxuIik7Ci0JCXJldHVybiAtMTsKLQl9CisJLyogZHJvcCBwYWNrZXQgaWYgaXQgaGFzIG5vdCBuZWNlc3NhcnkgbWluaW11bSBzaXplICovCisJaWYgKHNrYl9oZWFkbGVuKHNrYikgPCBzaXplb2Yoc3RydWN0IGJhdG1hbl9wYWNrZXQpKQorCQlyZXR1cm4gTkVUX1JYX0RST1A7CiAKLQl3aGlsZSAoKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpICYmICghYXRvbWljX3JlYWQoJmV4aXRfY29uZCkpKSB7CisJZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2JfbWFjX2hlYWRlcihza2IpOwogCi0JCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSh0aHJlYWRfd2FpdCwgKGF0b21pY19yZWFkKCZkYXRhX3JlYWR5X2NvbmQpIHx8IGF0b21pY19yZWFkKCZleGl0X2NvbmQpKSk7CisJLyogcGFja2V0IHdpdGggYnJvYWRjYXN0IGluZGljYXRpb24gYnV0IHVuaWNhc3QgcmVjaXBpZW50ICovCisJaWYgKCFpc19iY2FzdChldGhoZHItPmhfZGVzdCkpCisJCXJldHVybiBORVRfUlhfRFJPUDsKIAotCQlhdG9taWNfc2V0KCZkYXRhX3JlYWR5X2NvbmQsIDApOworCS8qIHBhY2tldCB3aXRoIGJyb2FkY2FzdCBzZW5kZXIgYWRkcmVzcyAqLworCWlmIChpc19iY2FzdChldGhoZHItPmhfc291cmNlKSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOwogCi0JCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgYXRvbWljX3JlYWQoJmV4aXRfY29uZCkpCi0JCQlicmVhazsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKwkvKiBUT0RPOiB3ZSB1c2UgaGVhZGxlbiBpbnN0ZWFkIG9mICJsZW5ndGgiLCBiZWNhdXNlCisJICogb25seSB0aGlzIGRhdGEgaXMgcGFnZWQgaW4uICovCisJLyogVE9ETzogaXMgYW5vdGhlciBza2JfY29weSBuZWVkZWQgaGVyZT8gdGhlcmUgd2lsbCBiZQorCSAqIHdyaXR0ZW4gb24gdGhlIGRhdGEsIGJ1dCBub2JvZHkgKD8pIHNob3VsZCBmdXJ0aGVyIHVzZQorCSAqIHRoaXMgZGF0YSAqLworCXJlY2VpdmVfYWdncl9iYXRfcGFja2V0KGV0aGhkciwKKwkJCQlza2ItPmRhdGEsCisJCQkJc2tiX2hlYWRsZW4oc2tiKSwKKwkJCQliYXRtYW5faWYpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiAKLQkJLyogd2Ugb25seSB3YW50IHRvIHNhZmVseSB0cmF2ZXJzZSB0aGUgbGlzdCwgaGFyZC1pbnRlcmZhY2VzCi0JCSAqIHdvbid0IGJlIGRlbGV0ZWQgYW55d2F5IGFzIGxvbmcgYXMgdGhpcyB0aHJlYWQgcnVucy4gKi8KLQotCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGJhdG1hbl9pZiwgJmlmX2xpc3QsIGxpc3QpIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwotCi0JCQlyZXN1bHQgPSAtMTsKLQotCQkJd2hpbGUgKDEpIHsKLQkJCQlpZiAoYmF0bWFuX2lmLT5pZl9hY3RpdmUgIT0gSUZfQUNUSVZFKSB7Ci0JCQkJCWlmIChiYXRtYW5faWYtPmlmX2FjdGl2ZSAhPSBJRl9UT19CRV9BQ1RJVkFURUQpCi0JCQkJCQlkZWJ1Z19sb2coTE9HX1RZUEVfTk9USUNFLAotCQkJCQkJICAgICAgICAgICJDb3VsZCBub3QgcmVhZCBmcm9tIGRlYWN0aXZhdGVkIGludGVyZmFjZSAlcyFcbiIsCi0JCQkJCQkgICAgICAgICAgYmF0bWFuX2lmLT5kZXYpOwotCi0JCQkJCWlmIChiYXRtYW5faWYtPnJhd19zb2NrKQotCQkJCQkJcmVjZWl2ZV9yYXdfcGFja2V0KGJhdG1hbl9pZi0+cmF3X3NvY2ssIHBhY2tldF9idWZmLCBQQUNLQlVGRl9TSVpFKTsKLQkJCQkJcmVzdWx0ID0gMDsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCi0JCQkJcmVzdWx0ID0gcmVjZWl2ZV9yYXdfcGFja2V0KGJhdG1hbl9pZi0+cmF3X3NvY2ssIHBhY2tldF9idWZmLCBQQUNLQlVGRl9TSVpFKTsKLQkJCQlpZiAocmVzdWx0IDw9IDApCi0JCQkJCWJyZWFrOwotCi0JCQkJaWYgKHJlc3VsdCA8IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArIDIpCi0JCQkJCWNvbnRpbnVlOwotCi0JCQkJZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilwYWNrZXRfYnVmZjsKLQkJCQliYXRtYW5fcGFja2V0ID0gKHN0cnVjdCBiYXRtYW5fcGFja2V0ICopKHBhY2tldF9idWZmICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKLQotCQkJCWlmIChiYXRtYW5fcGFja2V0LT52ZXJzaW9uICE9IENPTVBBVF9WRVJTSU9OKSB7Ci0JCQkJCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sICJEcm9wIHBhY2tldDogaW5jb21wYXRpYmxlIGJhdG1hbiB2ZXJzaW9uICglaSkgXG4iLCBiYXRtYW5fcGFja2V0LT52ZXJzaW9uKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCi0JCQkJc3dpdGNoIChiYXRtYW5fcGFja2V0LT5wYWNrZXRfdHlwZSkgewotCQkJCS8qIGJhdG1hbiBvcmlnaW5hdG9yIHBhY2tldCAqLwotCQkJCWNhc2UgQkFUX1BBQ0tFVDoKLQkJCQkJLyogcGFja2V0IHdpdGggYnJvYWRjYXN0IGluZGljYXRpb24gYnV0IHVuaWNhc3QgcmVjaXBpZW50ICovCi0JCQkJCWlmICghaXNfYmNhc3QoZXRoaGRyLT5oX2Rlc3QpKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJLyogcGFja2V0IHdpdGggYnJvYWRjYXN0IHNlbmRlciBhZGRyZXNzICovCi0JCQkJCWlmIChpc19iY2FzdChldGhoZHItPmhfc291cmNlKSkKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCS8qIGRyb3AgcGFja2V0IGlmIGl0IGhhcyBub3QgYXQgbGVhc3Qgb25lIGJhdG1hbiBwYWNrZXQgYXMgcGF5bG9hZCAqLwotCQkJCQlpZiAocmVzdWx0IDwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpICsgc2l6ZW9mKHN0cnVjdCBiYXRtYW5fcGFja2V0KSkKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCXNwaW5fbG9jaygmb3JpZ19oYXNoX2xvY2spOwotCQkJCQlyZWNlaXZlX2FnZ3JfYmF0X3BhY2tldChldGhoZHIsCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tldF9idWZmICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgLSBzaXplb2Yoc3RydWN0IGV0aGhkciksCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIGJhdG1hbl9pZik7Ci0JCQkJCXNwaW5fdW5sb2NrKCZvcmlnX2hhc2hfbG9jayk7Ci0KLQkJCQkJYnJlYWs7Ci0KLQkJCQkvKiBiYXRtYW4gaWNtcCBwYWNrZXQgKi8KLQkJCQljYXNlIEJBVF9JQ01QOgotCQkJCQkvKiBwYWNrZXQgd2l0aCB1bmljYXN0IGluZGljYXRpb24gYnV0IGJyb2FkY2FzdCByZWNpcGllbnQgKi8KLQkJCQkJaWYgKGlzX2JjYXN0KGV0aGhkci0+aF9kZXN0KSkKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCS8qIHBhY2tldCB3aXRoIGJyb2FkY2FzdCBzZW5kZXIgYWRkcmVzcyAqLwotCQkJCQlpZiAoaXNfYmNhc3QoZXRoaGRyLT5oX3NvdXJjZSkpCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQkvKiBub3QgZm9yIG1lICovCi0JCQkJCWlmICghaXNfbXlfbWFjKGV0aGhkci0+aF9kZXN0KSkKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCS8qIGRyb3AgcGFja2V0IGlmIGl0IGhhcyBub3QgbmVjZXNzYXJ5IG1pbmltdW0gc2l6ZSAqLwotCQkJCQlpZiAocmVzdWx0IDwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpICsgc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldCkpCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQlpY21wX3BhY2tldCA9IChzdHJ1Y3QgaWNtcF9wYWNrZXQgKikocGFja2V0X2J1ZmYgKyBzaXplb2Yoc3RydWN0IGV0aGhkcikpOwotCi0JCQkJCS8qIHBhY2tldCBmb3IgbWUgKi8KLQkJCQkJaWYgKGlzX215X21hYyhpY21wX3BhY2tldC0+ZHN0KSkgewotCi0JCQkJCQkvKiBhZGQgZGF0YSB0byBkZXZpY2UgcXVldWUgKi8KLQkJCQkJCWlmIChpY21wX3BhY2tldC0+bXNnX3R5cGUgIT0gRUNIT19SRVFVRVNUKSB7Ci0JCQkJCQkJYmF0X2RldmljZV9yZWNlaXZlX3BhY2tldChpY21wX3BhY2tldCk7Ci0JCQkJCQkJY29udGludWU7Ci0JCQkJCQl9Ci0KLQkJCQkJCS8qIGFuc3dlciBlY2hvIHJlcXVlc3QgKHBpbmcpICovCi0JCQkJCQkvKiBnZXQgcm91dGluZyBpbmZvcm1hdGlvbiAqLwotCQkJCQkJc3Bpbl9sb2NrKCZvcmlnX2hhc2hfbG9jayk7Ci0JCQkJCQlvcmlnX25vZGUgPSAoKHN0cnVjdCBvcmlnX25vZGUgKiloYXNoX2ZpbmQob3JpZ19oYXNoLCBpY21wX3BhY2tldC0+b3JpZykpOwotCi0JCQkJCQlpZiAoKG9yaWdfbm9kZSAhPSBOVUxMKSAmJiAob3JpZ19ub2RlLT5iYXRtYW5faWYgIT0gTlVMTCkgJiYgKG9yaWdfbm9kZS0+cm91dGVyICE9IE5VTEwpKSB7Ci0KLQkJCQkJCQltZW1jcHkoaWNtcF9wYWNrZXQtPmRzdCwgaWNtcF9wYWNrZXQtPm9yaWcsIEVUSF9BTEVOKTsKLQkJCQkJCQltZW1jcHkoaWNtcF9wYWNrZXQtPm9yaWcsIGV0aGhkci0+aF9kZXN0LCBFVEhfQUxFTik7Ci0JCQkJCQkJaWNtcF9wYWNrZXQtPm1zZ190eXBlID0gRUNIT19SRVBMWTsKLQkJCQkJCQlpY21wX3BhY2tldC0+dHRsID0gVFRMOwotCi0JCQkJCQkJc2VuZF9yYXdfcGFja2V0KHBhY2tldF9idWZmICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLAotCQkJCQkJCSAgICAgICAgICAgICAgICByZXN1bHQgLSBzaXplb2Yoc3RydWN0IGV0aGhkciksCi0JCQkJCQkJICAgICAgICAgICAgICAgIG9yaWdfbm9kZS0+YmF0bWFuX2lmLAotCQkJCQkJCSAgICAgICAgICAgICAgICBvcmlnX25vZGUtPnJvdXRlci0+YWRkcik7Ci0KLQkJCQkJCX0KLQotCQkJCQkJc3Bpbl91bmxvY2soJm9yaWdfaGFzaF9sb2NrKTsKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCX0KLQotCQkJCQkvKiBUVEwgZXhjZWVkZWQgKi8KLQkJCQkJaWYgKGljbXBfcGFja2V0LT50dGwgPCAyKSB7Ci0KLQkJCQkJCWFkZHJfdG9fc3RyaW5nKHNyY19zdHIsIGljbXBfcGFja2V0LT5vcmlnKTsKLQkJCQkJCWFkZHJfdG9fc3RyaW5nKGRzdF9zdHIsIGljbXBfcGFja2V0LT5kc3QpOwotCi0JCQkJCQlkZWJ1Z19sb2coTE9HX1RZUEVfTk9USUNFLCAiRXJyb3IgLSBjYW4ndCBzZW5kIHBhY2tldCBmcm9tICVzIHRvICVzOiB0dGwgZXhjZWVkZWRcbiIsIHNyY19zdHIsIGRzdF9zdHIpOwotCi0JCQkJCQkvKiBzZW5kIFRUTCBleGNlZWRlZCBpZiBwYWNrZXQgaXMgYW4gZWNobyByZXF1ZXN0ICh0cmFjZXJvdXRlKSAqLwotCQkJCQkJaWYgKGljbXBfcGFja2V0LT5tc2dfdHlwZSAhPSBFQ0hPX1JFUVVFU1QpCi0JCQkJCQkJY29udGludWU7Ci0KLQkJCQkJCS8qIGdldCByb3V0aW5nIGluZm9ybWF0aW9uICovCi0JCQkJCQlzcGluX2xvY2soJm9yaWdfaGFzaF9sb2NrKTsKLQkJCQkJCW9yaWdfbm9kZSA9ICgoc3RydWN0IG9yaWdfbm9kZSAqKWhhc2hfZmluZChvcmlnX2hhc2gsIGljbXBfcGFja2V0LT5vcmlnKSk7Ci0KLQkJCQkJCWlmICgob3JpZ19ub2RlICE9IE5VTEwpICYmIChvcmlnX25vZGUtPmJhdG1hbl9pZiAhPSBOVUxMKSAmJiAob3JpZ19ub2RlLT5yb3V0ZXIgIT0gTlVMTCkpIHsKLQotCQkJCQkJCW1lbWNweShpY21wX3BhY2tldC0+ZHN0LCBpY21wX3BhY2tldC0+b3JpZywgRVRIX0FMRU4pOwotCQkJCQkJCW1lbWNweShpY21wX3BhY2tldC0+b3JpZywgZXRoaGRyLT5oX2Rlc3QsIEVUSF9BTEVOKTsKLQkJCQkJCQlpY21wX3BhY2tldC0+bXNnX3R5cGUgPSBUVExfRVhDRUVERUQ7Ci0JCQkJCQkJaWNtcF9wYWNrZXQtPnR0bCA9IFRUTDsKLQotCQkJCQkJCXNlbmRfcmF3X3BhY2tldChwYWNrZXRfYnVmZiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwKLQkJCQkJCQkgICAgICAgICAgICAgICAgcmVzdWx0IC0gc2l6ZW9mKHN0cnVjdCBldGhoZHIpLAotCQkJCQkJCSAgICAgICAgICAgICAgICBvcmlnX25vZGUtPmJhdG1hbl9pZiwKLQkJCQkJCQkgICAgICAgICAgICAgICAgb3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIpOwotCi0JCQkJCQl9Ci0KLQkJCQkJCXNwaW5fdW5sb2NrKCZvcmlnX2hhc2hfbG9jayk7Ci0JCQkJCQljb250aW51ZTsKLQotCQkJCQl9Ci0KLQkJCQkJLyogZ2V0IHJvdXRpbmcgaW5mb3JtYXRpb24gKi8KLQkJCQkJc3Bpbl9sb2NrKCZvcmlnX2hhc2hfbG9jayk7Ci0JCQkJCW9yaWdfbm9kZSA9ICgoc3RydWN0IG9yaWdfbm9kZSAqKWhhc2hfZmluZChvcmlnX2hhc2gsIGljbXBfcGFja2V0LT5kc3QpKTsKLQotCQkJCQlpZiAoKG9yaWdfbm9kZSAhPSBOVUxMKSAmJiAob3JpZ19ub2RlLT5iYXRtYW5faWYgIT0gTlVMTCkgJiYgKG9yaWdfbm9kZS0+cm91dGVyICE9IE5VTEwpKSB7Ci0KLQkJCQkJCS8qIGRlY3JlbWVudCB0dGwgKi8KLQkJCQkJCWljbXBfcGFja2V0LT50dGwtLTsKLQotCQkJCQkJLyogcm91dGUgaXQgKi8KLQkJCQkJCXNlbmRfcmF3X3BhY2tldChwYWNrZXRfYnVmZiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwKLQkJCQkJCSAgICAgICAgICAgICAgICByZXN1bHQgLSBzaXplb2Yoc3RydWN0IGV0aGhkciksCi0JCQkJCQkgICAgICAgICAgICAgICAgb3JpZ19ub2RlLT5iYXRtYW5faWYsCi0JCQkJCQkgICAgICAgICAgICAgICAgb3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIpOwotCQkJCQl9Ci0KLQkJCQkJc3Bpbl91bmxvY2soJm9yaWdfaGFzaF9sb2NrKTsKLQkJCQkJYnJlYWs7Ci0KLQkJCQkvKiB1bmljYXN0IHBhY2tldCAqLwotCQkJCWNhc2UgQkFUX1VOSUNBU1Q6Ci0JCQkJCS8qIHBhY2tldCB3aXRoIHVuaWNhc3QgaW5kaWNhdGlvbiBidXQgYnJvYWRjYXN0IHJlY2lwaWVudCAqLwotCQkJCQlpZiAoaXNfYmNhc3QoZXRoaGRyLT5oX2Rlc3QpKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJLyogcGFja2V0IHdpdGggYnJvYWRjYXN0IHNlbmRlciBhZGRyZXNzICovCi0JCQkJCWlmIChpc19iY2FzdChldGhoZHItPmhfc291cmNlKSkKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCS8qIG5vdCBmb3IgbWUgKi8KLQkJCQkJaWYgKCFpc19teV9tYWMoZXRoaGRyLT5oX2Rlc3QpKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJLyogZHJvcCBwYWNrZXQgaWYgaXQgaGFzIG5vdCBuZWNlc3NhcnkgbWluaW11bSBzaXplICovCi0JCQkJCWlmIChyZXN1bHQgPCBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyBzaXplb2Yoc3RydWN0IHVuaWNhc3RfcGFja2V0KSkKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCXVuaWNhc3RfcGFja2V0ID0gKHN0cnVjdCB1bmljYXN0X3BhY2tldCAqKShwYWNrZXRfYnVmZiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7Ci0KLQkJCQkJLyogcGFja2V0IGZvciBtZSAqLwotCQkJCQlpZiAoaXNfbXlfbWFjKHVuaWNhc3RfcGFja2V0LT5kZXN0KSkgewotCi0JCQkJCQlpbnRlcmZhY2Vfcngoc29mdF9kZXZpY2UsIHBhY2tldF9idWZmICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpICsgc2l6ZW9mKHN0cnVjdCB1bmljYXN0X3BhY2tldCksIHJlc3VsdCAtIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSAtIHNpemVvZihzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQpKTsKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCX0KLQotCQkJCQkvKiBUVEwgZXhjZWVkZWQgKi8KLQkJCQkJaWYgKHVuaWNhc3RfcGFja2V0LT50dGwgPCAyKSB7Ci0JCQkJCQlhZGRyX3RvX3N0cmluZyhzcmNfc3RyLCAoKHN0cnVjdCBldGhoZHIgKikodW5pY2FzdF9wYWNrZXQgKyAxKSktPmhfc291cmNlKTsKLQkJCQkJCWFkZHJfdG9fc3RyaW5nKGRzdF9zdHIsIHVuaWNhc3RfcGFja2V0LT5kZXN0KTsKLQotCQkJCQkJZGVidWdfbG9nKExPR19UWVBFX05PVElDRSwgIkVycm9yIC0gY2FuJ3Qgc2VuZCBwYWNrZXQgZnJvbSAlcyB0byAlczogdHRsIGV4Y2VlZGVkXG4iLCBzcmNfc3RyLCBkc3Rfc3RyKTsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0KLQkJCQkJLyogZ2V0IHJvdXRpbmcgaW5mb3JtYXRpb24gKi8KLQkJCQkJc3Bpbl9sb2NrKCZvcmlnX2hhc2hfbG9jayk7Ci0JCQkJCW9yaWdfbm9kZSA9ICgoc3RydWN0IG9yaWdfbm9kZSAqKWhhc2hfZmluZChvcmlnX2hhc2gsIHVuaWNhc3RfcGFja2V0LT5kZXN0KSk7Ci0KLQkJCQkJaWYgKChvcmlnX25vZGUgIT0gTlVMTCkgJiYgKG9yaWdfbm9kZS0+YmF0bWFuX2lmICE9IE5VTEwpICYmIChvcmlnX25vZGUtPnJvdXRlciAhPSBOVUxMKSkgewotCQkJCQkJLyogZGVjcmVtZW50IHR0bCAqLwotCQkJCQkJdW5pY2FzdF9wYWNrZXQtPnR0bC0tOwotCi0JCQkJCQkvKiByb3V0ZSBpdCAqLwotCQkJCQkJc2VuZF9yYXdfcGFja2V0KHBhY2tldF9idWZmICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpLAotCQkJCQkJICAgICAgICAgICAgICAgIHJlc3VsdCAtIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwKLQkJCQkJCSAgICAgICAgICAgICAgICBvcmlnX25vZGUtPmJhdG1hbl9pZiwKLQkJCQkJCSAgICAgICAgICAgICAgICBvcmlnX25vZGUtPnJvdXRlci0+YWRkcik7Ci0JCQkJCX0KLQotCQkJCQlzcGluX3VubG9jaygmb3JpZ19oYXNoX2xvY2spOwotCQkJCQlicmVhazsKLQotCQkJCS8qIGJyb2FkY2FzdCBwYWNrZXQgKi8KLQkJCQljYXNlIEJBVF9CQ0FTVDoKLQkJCQkJLyogcGFja2V0IHdpdGggYnJvYWRjYXN0IGluZGljYXRpb24gYnV0IHVuaWNhc3QgcmVjaXBpZW50ICovCi0JCQkJCWlmICghaXNfYmNhc3QoZXRoaGRyLT5oX2Rlc3QpKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJLyogcGFja2V0IHdpdGggYnJvYWRjYXN0IHNlbmRlciBhZGRyZXNzICovCi0JCQkJCWlmIChpc19iY2FzdChldGhoZHItPmhfc291cmNlKSkKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCS8qIGRyb3AgcGFja2V0IGlmIGl0IGhhcyBub3QgbmVjZXNzYXJ5IG1pbmltdW0gc2l6ZSAqLwotCQkJCQlpZiAocmVzdWx0IDwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpICsgc2l6ZW9mKHN0cnVjdCBiY2FzdF9wYWNrZXQpKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJLyogaWdub3JlIGJyb2FkY2FzdHMgc2VudCBieSBteXNlbGYgKi8KLQkJCQkJaWYgKGlzX215X21hYyhldGhoZHItPmhfc291cmNlKSkKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCWJjYXN0X3BhY2tldCA9IChzdHJ1Y3QgYmNhc3RfcGFja2V0ICopKHBhY2tldF9idWZmICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKLQotCQkJCQkvKiBpZ25vcmUgYnJvYWRjYXN0cyBvcmlnaW5hdGVkIGJ5IG15c2VsZiAqLwotCQkJCQlpZiAoaXNfbXlfbWFjKGJjYXN0X3BhY2tldC0+b3JpZykpCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQlzcGluX2xvY2soJm9yaWdfaGFzaF9sb2NrKTsKLQkJCQkJb3JpZ19ub2RlID0gKChzdHJ1Y3Qgb3JpZ19ub2RlICopaGFzaF9maW5kKG9yaWdfaGFzaCwgYmNhc3RfcGFja2V0LT5vcmlnKSk7Ci0KLQkJCQkJaWYgKG9yaWdfbm9kZSA9PSBOVUxMKSB7Ci0JCQkJCQlzcGluX3VubG9jaygmb3JpZ19oYXNoX2xvY2spOwotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQotCQkJCQkvKiBjaGVjayBmbG9vZCBoaXN0b3J5ICovCi0JCQkJCWlmIChnZXRfYml0X3N0YXR1cyhvcmlnX25vZGUtPmJjYXN0X2JpdHMsIG9yaWdfbm9kZS0+bGFzdF9iY2FzdF9zZXFubywgbnRvaHMoYmNhc3RfcGFja2V0LT5zZXFubykpKSB7Ci0JCQkJCQlzcGluX3VubG9jaygmb3JpZ19oYXNoX2xvY2spOwotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQotCQkJCQkvKiBtYXJrIGJyb2FkY2FzdCBpbiBmbG9vZCBoaXN0b3J5ICovCi0JCQkJCWlmIChiaXRfZ2V0X3BhY2tldChvcmlnX25vZGUtPmJjYXN0X2JpdHMsIG50b2hzKGJjYXN0X3BhY2tldC0+c2Vxbm8pIC0gb3JpZ19ub2RlLT5sYXN0X2JjYXN0X3NlcW5vLCAxKSkKLQkJCQkJCW9yaWdfbm9kZS0+bGFzdF9iY2FzdF9zZXFubyA9IG50b2hzKGJjYXN0X3BhY2tldC0+c2Vxbm8pOwotCi0JCQkJCXNwaW5fdW5sb2NrKCZvcmlnX2hhc2hfbG9jayk7Ci0KLQkJCQkJLyogYnJvYWRjYXN0IGZvciBtZSAqLwotCQkJCQlpbnRlcmZhY2Vfcngoc29mdF9kZXZpY2UsIHBhY2tldF9idWZmICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpICsgc2l6ZW9mKHN0cnVjdCBiY2FzdF9wYWNrZXQpLCByZXN1bHQgLSBzaXplb2Yoc3RydWN0IGV0aGhkcikgLSBzaXplb2Yoc3RydWN0IGJjYXN0X3BhY2tldCkpOwotCi0JCQkJCS8qIHJlYnJvYWRjYXN0IHBhY2tldCAqLwotCQkJCQlhZGRfYmNhc3RfcGFja2V0X3RvX2xpc3QocGFja2V0X2J1ZmYgKyBzaXplb2Yoc3RydWN0IGV0aGhkciksCi0JCQkJCQkJCQlyZXN1bHQgLSBzaXplb2Yoc3RydWN0IGV0aGhkcikpOwotCi0JCQkJCWJyZWFrOwotCi0JCQkJLyogdmlzIHBhY2tldCAqLwotCQkJCWNhc2UgQkFUX1ZJUzoKLQkJCQkJLyogZHJvcCBpZiB0b28gc2hvcnQuICovCi0JCQkJCWlmIChyZXN1bHQgPCBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyBzaXplb2Yoc3RydWN0IHZpc19wYWNrZXQpKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJLyogbm90IGZvciBtZSAqLwotCQkJCQlpZiAoIWlzX215X21hYyhldGhoZHItPmhfZGVzdCkpCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQl2aXNfcGFja2V0ID0gKHN0cnVjdCB2aXNfcGFja2V0ICopKHBhY2tldF9idWZmICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKLQkJCQkJdmlzX2luZm9fbGVuID0gcmVzdWx0ICAtIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSAtIHNpemVvZihzdHJ1Y3QgdmlzX3BhY2tldCk7Ci0KLQkJCQkJLyogaWdub3JlIG93biBwYWNrZXRzICovCi0JCQkJCWlmIChpc19teV9tYWModmlzX3BhY2tldC0+dmlzX29yaWcpKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJaWYgKGlzX215X21hYyh2aXNfcGFja2V0LT5zZW5kZXJfb3JpZykpCi0JCQkJCQljb250aW51ZTsKLQotCQkJCQlzd2l0Y2ggKHZpc19wYWNrZXQtPnZpc190eXBlKSB7Ci0JCQkJCWNhc2UgVklTX1RZUEVfU0VSVkVSX1NZTkM6Ci0JCQkJCQlyZWNlaXZlX3NlcnZlcl9zeW5jX3BhY2tldCh2aXNfcGFja2V0LCB2aXNfaW5mb19sZW4pOwotCQkJCQkJYnJlYWs7Ci0KLQkJCQkJY2FzZSBWSVNfVFlQRV9DTElFTlRfVVBEQVRFOgotCQkJCQkJcmVjZWl2ZV9jbGllbnRfdXBkYXRlX3BhY2tldCh2aXNfcGFja2V0LCB2aXNfaW5mb19sZW4pOwotCQkJCQkJYnJlYWs7Ci0KLQkJCQkJZGVmYXVsdDoJLyogaWdub3JlIHVua25vd24gcGFja2V0ICovCi0JCQkJCQlicmVhazsKLQkJCQkJfQotCi0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJfQotCi0JCQlpZiAoKHJlc3VsdCA8IDApICYmIChyZXN1bHQgIT0gLUVBR0FJTikpCi0JCQkJZGVidWdfbG9nKExPR19UWVBFX0NSSVQsICJDb3VsZCBub3QgcmVjZWl2ZSBwYWNrZXQgZnJvbSBpbnRlcmZhY2UgJXM6ICVpXG4iLCBiYXRtYW5faWYtPmRldiwgcmVzdWx0KTsKLQotCQkJLyogbG9jayBmb3IgdGhlIG5leHQgaXRlcmF0aW9uICovCi0JCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCX0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0KLQl9Ci0Ja2ZyZWUocGFja2V0X2J1ZmYpOwotCi0JLyogZG8gbm90IGV4aXQgdW50aWwga3RocmVhZF9zdG9wKCkgaXMgYWN0dWFsbHkgY2FsbGVkLCBvdGhlcndpc2UgaXQgd2lsbCB3YWl0IGZvciB1cwotCSAqIGZvcmV2ZXIuICovCi0Jd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpCi0JCXNjaGVkdWxlKCk7Ci0KLQlyZXR1cm4gMDsKKwlrZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CiB9CiAKLXZvaWQgYmF0bWFuX2RhdGFfcmVhZHkoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuKQorc3RhdGljIGludCByZWN2X215X2ljbXBfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jdm9pZCAoKmRhdGFfcmVhZHkpKHN0cnVjdCBzb2NrICosIGludCkgPSBzay0+c2tfdXNlcl9kYXRhOworCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwlzdHJ1Y3QgaWNtcF9wYWNrZXQgKmljbXBfcGFja2V0OworCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX29sZDsKKwlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVpbnQ4X3QgZHN0YWRkcltFVEhfQUxFTl07CiAKLQlkYXRhX3JlYWR5KHNrLCBsZW4pOworCWljbXBfcGFja2V0ID0gKHN0cnVjdCBpY21wX3BhY2tldCAqKSBza2ItPmRhdGE7CisJZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKikgc2tiX21hY19oZWFkZXIoc2tiKTsKIAotCWF0b21pY19zZXQoJmRhdGFfcmVhZHlfY29uZCwgMSk7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0aHJlYWRfd2FpdCk7CisJLyogYWRkIGRhdGEgdG8gZGV2aWNlIHF1ZXVlICovCisJaWYgKGljbXBfcGFja2V0LT5tc2dfdHlwZSAhPSBFQ0hPX1JFUVVFU1QpIHsKKwkJYmF0X2RldmljZV9yZWNlaXZlX3BhY2tldChpY21wX3BhY2tldCk7CisJCXJldHVybiBORVRfUlhfRFJPUDsKKwl9CisKKwkvKiBhbnN3ZXIgZWNobyByZXF1ZXN0IChwaW5nKSAqLworCS8qIGdldCByb3V0aW5nIGluZm9ybWF0aW9uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CisJb3JpZ19ub2RlID0gKChzdHJ1Y3Qgb3JpZ19ub2RlICopaGFzaF9maW5kKG9yaWdfaGFzaCwKKwkJCQkJCSAgIGljbXBfcGFja2V0LT5vcmlnKSk7CisJcmV0ID0gTkVUX1JYX0RST1A7CisKKwlpZiAoKG9yaWdfbm9kZSAhPSBOVUxMKSAmJgorCSAgICAob3JpZ19ub2RlLT5iYXRtYW5faWYgIT0gTlVMTCkgJiYKKwkgICAgKG9yaWdfbm9kZS0+cm91dGVyICE9IE5VTEwpKSB7CisKKwkJLyogZG9uJ3QgbG9jayB3aGlsZSBzZW5kaW5nIHRoZSBwYWNrZXRzIC4uLiB3ZSB0aGVyZWZvcmUKKwkJICogY29weSB0aGUgcmVxdWlyZWQgZGF0YSBiZWZvcmUgc2VuZGluZyAqLworCQliYXRtYW5faWYgPSBvcmlnX25vZGUtPmJhdG1hbl9pZjsKKwkJbWVtY3B5KGRzdGFkZHIsIG9yaWdfbm9kZS0+cm91dGVyLT5hZGRyLCBFVEhfQUxFTik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CisKKwkJLyogY3JlYXRlIGEgY29weSBvZiB0aGUgc2tiLCBpZiBuZWVkZWQsIHRvIG1vZGlmeSBpdC4gKi8KKwkJc2tiX29sZCA9IE5VTEw7CisJCWlmICghc2tiX2Nsb25lX3dyaXRhYmxlKHNrYiwgc2l6ZW9mKHN0cnVjdCBpY21wX3BhY2tldCkpKSB7CisJCQlza2Jfb2xkID0gc2tiOworCQkJc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKKwkJCWlmICghc2tiKQorCQkJCXJldHVybiBORVRfUlhfRFJPUDsKKwkJCWljbXBfcGFja2V0ID0gKHN0cnVjdCBpY21wX3BhY2tldCAqKSBza2ItPmRhdGE7CisJCQlrZnJlZV9za2Ioc2tiX29sZCk7CisJCX0KKworCQltZW1jcHkoaWNtcF9wYWNrZXQtPmRzdCwgaWNtcF9wYWNrZXQtPm9yaWcsIEVUSF9BTEVOKTsKKwkJbWVtY3B5KGljbXBfcGFja2V0LT5vcmlnLCBldGhoZHItPmhfZGVzdCwgRVRIX0FMRU4pOworCQlpY21wX3BhY2tldC0+bXNnX3R5cGUgPSBFQ0hPX1JFUExZOworCQlpY21wX3BhY2tldC0+dHRsID0gVFRMOworCisJCXNlbmRfc2tiX3BhY2tldChza2IsIGJhdG1hbl9pZiwgZHN0YWRkcik7CisJCXJldCA9IE5FVF9SWF9TVUNDRVNTOworCisJfSBlbHNlCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHJlY3ZfaWNtcF90dGxfZXhjZWVkZWQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CisJc3RydWN0IGljbXBfcGFja2V0ICppY21wX3BhY2tldDsKKwlzdHJ1Y3QgZXRoaGRyICpldGhoZHI7CisJc3RydWN0IHNrX2J1ZmYgKnNrYl9vbGQ7CisJc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmOworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1aW50OF90IGRzdGFkZHJbRVRIX0FMRU5dOworCisJaWNtcF9wYWNrZXQgPSAoc3RydWN0IGljbXBfcGFja2V0ICopc2tiLT5kYXRhOworCWV0aGhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTsKKworCS8qIHNlbmQgVFRMIGV4Y2VlZGVkIGlmIHBhY2tldCBpcyBhbiBlY2hvIHJlcXVlc3QgKHRyYWNlcm91dGUpICovCisJaWYgKGljbXBfcGFja2V0LT5tc2dfdHlwZSAhPSBFQ0hPX1JFUVVFU1QpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYmF0bWFuLWFkdjpXYXJuaW5nIC0gY2FuJ3QgZm9yd2FyZCBpY21wIHBhY2tldCBmcm9tICVwTSB0byAlcE06IHR0bCBleGNlZWRlZFxuIiwKKwkJCWljbXBfcGFja2V0LT5vcmlnLCBpY21wX3BhY2tldC0+ZHN0KTsKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCX0KKworCS8qIGdldCByb3V0aW5nIGluZm9ybWF0aW9uICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CisJb3JpZ19ub2RlID0gKChzdHJ1Y3Qgb3JpZ19ub2RlICopCisJCSAgICAgaGFzaF9maW5kKG9yaWdfaGFzaCwgaWNtcF9wYWNrZXQtPm9yaWcpKTsKKwlyZXQgPSBORVRfUlhfRFJPUDsKKworCWlmICgob3JpZ19ub2RlICE9IE5VTEwpICYmCisJICAgIChvcmlnX25vZGUtPmJhdG1hbl9pZiAhPSBOVUxMKSAmJgorCSAgICAob3JpZ19ub2RlLT5yb3V0ZXIgIT0gTlVMTCkpIHsKKworCQkvKiBkb24ndCBsb2NrIHdoaWxlIHNlbmRpbmcgdGhlIHBhY2tldHMgLi4uIHdlIHRoZXJlZm9yZQorCQkgKiBjb3B5IHRoZSByZXF1aXJlZCBkYXRhIGJlZm9yZSBzZW5kaW5nICovCisJCWJhdG1hbl9pZiA9IG9yaWdfbm9kZS0+YmF0bWFuX2lmOworCQltZW1jcHkoZHN0YWRkciwgb3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIsIEVUSF9BTEVOKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKworCQkvKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBza2IsIGlmIG5lZWRlZCwgdG8gbW9kaWZ5IGl0LiAqLworCQlpZiAoIXNrYl9jbG9uZV93cml0YWJsZShza2IsIHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXQpKSkgeworCQkJc2tiX29sZCA9IHNrYjsKKwkJCXNrYiA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7CisJCQlpZiAoIXNrYikKKwkJCQlyZXR1cm4gTkVUX1JYX0RST1A7CisJCQlpY21wX3BhY2tldCA9IChzdHJ1Y3QgaWNtcF9wYWNrZXQgKikgc2tiLT5kYXRhOworCQkJa2ZyZWVfc2tiKHNrYl9vbGQpOworCQl9CisKKwkJbWVtY3B5KGljbXBfcGFja2V0LT5kc3QsIGljbXBfcGFja2V0LT5vcmlnLCBFVEhfQUxFTik7CisJCW1lbWNweShpY21wX3BhY2tldC0+b3JpZywgZXRoaGRyLT5oX2Rlc3QsIEVUSF9BTEVOKTsKKwkJaWNtcF9wYWNrZXQtPm1zZ190eXBlID0gVFRMX0VYQ0VFREVEOworCQlpY21wX3BhY2tldC0+dHRsID0gVFRMOworCisJCXNlbmRfc2tiX3BhY2tldChza2IsIGJhdG1hbl9pZiwgZHN0YWRkcik7CisJCXJldCA9IE5FVF9SWF9TVUNDRVNTOworCisJfSBlbHNlCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmV0OworfQorCisKK2ludCByZWN2X2ljbXBfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGljbXBfcGFja2V0ICppY21wX3BhY2tldDsKKwlzdHJ1Y3QgZXRoaGRyICpldGhoZHI7CisJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOworCXN0cnVjdCBza19idWZmICpza2Jfb2xkOworCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZjsKKwlpbnQgaGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGljbXBfcGFja2V0KTsKKwlpbnQgcmV0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdWludDhfdCBkc3RhZGRyW0VUSF9BTEVOXTsKKworCS8qIGRyb3AgcGFja2V0IGlmIGl0IGhhcyBub3QgbmVjZXNzYXJ5IG1pbmltdW0gc2l6ZSAqLworCWlmIChza2JfaGVhZGxlbihza2IpIDwgaGRyX3NpemUpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCWV0aGhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTsKKworCS8qIHBhY2tldCB3aXRoIHVuaWNhc3QgaW5kaWNhdGlvbiBidXQgYnJvYWRjYXN0IHJlY2lwaWVudCAqLworCWlmIChpc19iY2FzdChldGhoZHItPmhfZGVzdCkpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCS8qIHBhY2tldCB3aXRoIGJyb2FkY2FzdCBzZW5kZXIgYWRkcmVzcyAqLworCWlmIChpc19iY2FzdChldGhoZHItPmhfc291cmNlKSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJLyogbm90IGZvciBtZSAqLworCWlmICghaXNfbXlfbWFjKGV0aGhkci0+aF9kZXN0KSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJaWNtcF9wYWNrZXQgPSAoc3RydWN0IGljbXBfcGFja2V0ICopIHNrYi0+ZGF0YTsKKworCS8qIHBhY2tldCBmb3IgbWUgKi8KKwlpZiAoaXNfbXlfbWFjKGljbXBfcGFja2V0LT5kc3QpKQorCQlyZXR1cm4gcmVjdl9teV9pY21wX3BhY2tldChza2IpOworCisJLyogVFRMIGV4Y2VlZGVkICovCisJaWYgKGljbXBfcGFja2V0LT50dGwgPCAyKQorCQlyZXR1cm4gcmVjdl9pY21wX3R0bF9leGNlZWRlZChza2IpOworCisJcmV0ID0gTkVUX1JYX0RST1A7CisKKwkvKiBnZXQgcm91dGluZyBpbmZvcm1hdGlvbiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworCW9yaWdfbm9kZSA9ICgoc3RydWN0IG9yaWdfbm9kZSAqKQorCQkgICAgIGhhc2hfZmluZChvcmlnX2hhc2gsIGljbXBfcGFja2V0LT5kc3QpKTsKKworCWlmICgob3JpZ19ub2RlICE9IE5VTEwpICYmCisJICAgIChvcmlnX25vZGUtPmJhdG1hbl9pZiAhPSBOVUxMKSAmJgorCSAgICAob3JpZ19ub2RlLT5yb3V0ZXIgIT0gTlVMTCkpIHsKKworCQkvKiBkb24ndCBsb2NrIHdoaWxlIHNlbmRpbmcgdGhlIHBhY2tldHMgLi4uIHdlIHRoZXJlZm9yZQorCQkgKiBjb3B5IHRoZSByZXF1aXJlZCBkYXRhIGJlZm9yZSBzZW5kaW5nICovCisJCWJhdG1hbl9pZiA9IG9yaWdfbm9kZS0+YmF0bWFuX2lmOworCQltZW1jcHkoZHN0YWRkciwgb3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIsIEVUSF9BTEVOKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKworCQkvKiBjcmVhdGUgYSBjb3B5IG9mIHRoZSBza2IsIGlmIG5lZWRlZCwgdG8gbW9kaWZ5IGl0LiAqLworCQlpZiAoIXNrYl9jbG9uZV93cml0YWJsZShza2IsIHNpemVvZihzdHJ1Y3QgaWNtcF9wYWNrZXQpKSkgeworCQkJc2tiX29sZCA9IHNrYjsKKwkJCXNrYiA9IHNrYl9jb3B5KHNrYiwgR0ZQX0FUT01JQyk7CisJCQlpZiAoIXNrYikKKwkJCQlyZXR1cm4gTkVUX1JYX0RST1A7CisJCQlpY21wX3BhY2tldCA9IChzdHJ1Y3QgaWNtcF9wYWNrZXQgKikgc2tiLT5kYXRhOworCQkJa2ZyZWVfc2tiKHNrYl9vbGQpOworCQl9CisKKwkJLyogZGVjcmVtZW50IHR0bCAqLworCQlpY21wX3BhY2tldC0+dHRsLS07CisKKwkJLyogcm91dGUgaXQgKi8KKwkJc2VuZF9za2JfcGFja2V0KHNrYiwgYmF0bWFuX2lmLCBkc3RhZGRyKTsKKwkJcmV0ID0gTkVUX1JYX1NVQ0NFU1M7CisKKwl9IGVsc2UKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCByZWN2X3VuaWNhc3RfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IHVuaWNhc3RfcGFja2V0ICp1bmljYXN0X3BhY2tldDsKKwlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CisJc3RydWN0IGV0aGhkciAqZXRoaGRyOworCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX29sZDsKKwl1aW50OF90IGRzdGFkZHJbRVRIX0FMRU5dOworCWludCBoZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdW5pY2FzdF9wYWNrZXQpOworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIGRyb3AgcGFja2V0IGlmIGl0IGhhcyBub3QgbmVjZXNzYXJ5IG1pbmltdW0gc2l6ZSAqLworCWlmIChza2JfaGVhZGxlbihza2IpIDwgaGRyX3NpemUpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCWV0aGhkciA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYl9tYWNfaGVhZGVyKHNrYik7CisKKwkvKiBwYWNrZXQgd2l0aCB1bmljYXN0IGluZGljYXRpb24gYnV0IGJyb2FkY2FzdCByZWNpcGllbnQgKi8KKwlpZiAoaXNfYmNhc3QoZXRoaGRyLT5oX2Rlc3QpKQorCQlyZXR1cm4gTkVUX1JYX0RST1A7CisKKwkvKiBwYWNrZXQgd2l0aCBicm9hZGNhc3Qgc2VuZGVyIGFkZHJlc3MgKi8KKwlpZiAoaXNfYmNhc3QoZXRoaGRyLT5oX3NvdXJjZSkpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCS8qIG5vdCBmb3IgbWUgKi8KKwlpZiAoIWlzX215X21hYyhldGhoZHItPmhfZGVzdCkpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCXVuaWNhc3RfcGFja2V0ID0gKHN0cnVjdCB1bmljYXN0X3BhY2tldCAqKSBza2ItPmRhdGE7CisKKwkvKiBwYWNrZXQgZm9yIG1lICovCisJaWYgKGlzX215X21hYyh1bmljYXN0X3BhY2tldC0+ZGVzdCkpIHsKKwkJaW50ZXJmYWNlX3J4KHNrYiwgaGRyX3NpemUpOworCQlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7CisJfQorCisJLyogVFRMIGV4Y2VlZGVkICovCisJaWYgKHVuaWNhc3RfcGFja2V0LT50dGwgPCAyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImJhdG1hbi1hZHY6V2FybmluZyAtIGNhbid0IGZvcndhcmQgdW5pY2FzdCBwYWNrZXQgZnJvbSAlcE0gdG8gJXBNOiB0dGwgZXhjZWVkZWRcbiIsCisJCSAgICAgICBldGhoZHItPmhfc291cmNlLCB1bmljYXN0X3BhY2tldC0+ZGVzdCk7CisJCXJldHVybiBORVRfUlhfRFJPUDsKKwl9CisKKwlyZXQgPSBORVRfUlhfRFJPUDsKKwkvKiBnZXQgcm91dGluZyBpbmZvcm1hdGlvbiAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworCW9yaWdfbm9kZSA9ICgoc3RydWN0IG9yaWdfbm9kZSAqKQorCQkgICAgIGhhc2hfZmluZChvcmlnX2hhc2gsIHVuaWNhc3RfcGFja2V0LT5kZXN0KSk7CisKKwlpZiAoKG9yaWdfbm9kZSAhPSBOVUxMKSAmJgorCSAgICAob3JpZ19ub2RlLT5iYXRtYW5faWYgIT0gTlVMTCkgJiYKKwkgICAgKG9yaWdfbm9kZS0+cm91dGVyICE9IE5VTEwpKSB7CisKKwkJLyogZG9uJ3QgbG9jayB3aGlsZSBzZW5kaW5nIHRoZSBwYWNrZXRzIC4uLiB3ZSB0aGVyZWZvcmUKKwkJICogY29weSB0aGUgcmVxdWlyZWQgZGF0YSBiZWZvcmUgc2VuZGluZyAqLworCQliYXRtYW5faWYgPSBvcmlnX25vZGUtPmJhdG1hbl9pZjsKKwkJbWVtY3B5KGRzdGFkZHIsIG9yaWdfbm9kZS0+cm91dGVyLT5hZGRyLCBFVEhfQUxFTik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CisKKwkJLyogY3JlYXRlIGEgY29weSBvZiB0aGUgc2tiLCBpZiBuZWVkZWQsIHRvIG1vZGlmeSBpdC4gKi8KKwkJaWYgKCFza2JfY2xvbmVfd3JpdGFibGUoc2tiLCBzaXplb2Yoc3RydWN0IHVuaWNhc3RfcGFja2V0KSkpIHsKKwkJCXNrYl9vbGQgPSBza2I7CisJCQlza2IgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOworCQkJaWYgKCFza2IpCisJCQkJcmV0dXJuIE5FVF9SWF9EUk9QOworCQkJdW5pY2FzdF9wYWNrZXQgPSAoc3RydWN0IHVuaWNhc3RfcGFja2V0ICopIHNrYi0+ZGF0YTsKKwkJCWtmcmVlX3NrYihza2Jfb2xkKTsKKwkJfQorCQkvKiBkZWNyZW1lbnQgdHRsICovCisJCXVuaWNhc3RfcGFja2V0LT50dGwtLTsKKworCQkvKiByb3V0ZSBpdCAqLworCQlzZW5kX3NrYl9wYWNrZXQoc2tiLCBiYXRtYW5faWYsIGRzdGFkZHIpOworCQlyZXQgPSBORVRfUlhfU1VDQ0VTUzsKKworCX0gZWxzZQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHJldDsKK30KKworCitpbnQgcmVjdl9iY2FzdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CisJc3RydWN0IGJjYXN0X3BhY2tldCAqYmNhc3RfcGFja2V0OworCXN0cnVjdCBldGhoZHIgKmV0aGhkcjsKKwlpbnQgaGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGJjYXN0X3BhY2tldCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIGRyb3AgcGFja2V0IGlmIGl0IGhhcyBub3QgbmVjZXNzYXJ5IG1pbmltdW0gc2l6ZSAqLworCWlmIChza2JfaGVhZGxlbihza2IpIDwgaGRyX3NpemUpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCWV0aGhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTsKKworCS8qIHBhY2tldCB3aXRoIGJyb2FkY2FzdCBpbmRpY2F0aW9uIGJ1dCB1bmljYXN0IHJlY2lwaWVudCAqLworCWlmICghaXNfYmNhc3QoZXRoaGRyLT5oX2Rlc3QpKQorCQlyZXR1cm4gTkVUX1JYX0RST1A7CisKKwkvKiBwYWNrZXQgd2l0aCBicm9hZGNhc3Qgc2VuZGVyIGFkZHJlc3MgKi8KKwlpZiAoaXNfYmNhc3QoZXRoaGRyLT5oX3NvdXJjZSkpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCS8qIGlnbm9yZSBicm9hZGNhc3RzIHNlbnQgYnkgbXlzZWxmICovCisJaWYgKGlzX215X21hYyhldGhoZHItPmhfc291cmNlKSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJYmNhc3RfcGFja2V0ID0gKHN0cnVjdCBiY2FzdF9wYWNrZXQgKikgc2tiLT5kYXRhOworCisJLyogaWdub3JlIGJyb2FkY2FzdHMgb3JpZ2luYXRlZCBieSBteXNlbGYgKi8KKwlpZiAoaXNfbXlfbWFjKGJjYXN0X3BhY2tldC0+b3JpZykpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworCW9yaWdfbm9kZSA9ICgoc3RydWN0IG9yaWdfbm9kZSAqKQorCQkgICAgIGhhc2hfZmluZChvcmlnX2hhc2gsIGJjYXN0X3BhY2tldC0+b3JpZykpOworCisJaWYgKG9yaWdfbm9kZSA9PSBOVUxMKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CisJCXJldHVybiBORVRfUlhfRFJPUDsKKwl9CisKKwkvKiBjaGVjayBmbG9vZCBoaXN0b3J5ICovCisJaWYgKGdldF9iaXRfc3RhdHVzKG9yaWdfbm9kZS0+YmNhc3RfYml0cywKKwkJCSAgIG9yaWdfbm9kZS0+bGFzdF9iY2FzdF9zZXFubywKKwkJCSAgIG50b2hzKGJjYXN0X3BhY2tldC0+c2Vxbm8pKSkgeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOworCQlyZXR1cm4gTkVUX1JYX0RST1A7CisJfQorCisJLyogbWFyayBicm9hZGNhc3QgaW4gZmxvb2QgaGlzdG9yeSAqLworCWlmIChiaXRfZ2V0X3BhY2tldChvcmlnX25vZGUtPmJjYXN0X2JpdHMsCisJCQkgICBudG9ocyhiY2FzdF9wYWNrZXQtPnNlcW5vKSAtCisJCQkgICBvcmlnX25vZGUtPmxhc3RfYmNhc3Rfc2Vxbm8sIDEpKQorCQlvcmlnX25vZGUtPmxhc3RfYmNhc3Rfc2Vxbm8gPSBudG9ocyhiY2FzdF9wYWNrZXQtPnNlcW5vKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CisKKwkvKiByZWJyb2FkY2FzdCBwYWNrZXQgKi8KKwlhZGRfYmNhc3RfcGFja2V0X3RvX2xpc3Qoc2tiKTsKKworCS8qIGJyb2FkY2FzdCBmb3IgbWUgKi8KKwlpbnRlcmZhY2Vfcngoc2tiLCBoZHJfc2l6ZSk7CisKKwlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7Cit9CisKK2ludCByZWN2X3Zpc19wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgdmlzX3BhY2tldCAqdmlzX3BhY2tldDsKKwlzdHJ1Y3QgZXRoaGRyICpldGhoZHI7CisJaW50IGhkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCB2aXNfcGFja2V0KTsKKworCWlmIChza2JfaGVhZGxlbihza2IpIDwgaGRyX3NpemUpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCXZpc19wYWNrZXQgPSAoc3RydWN0IHZpc19wYWNrZXQgKikgc2tiLT5kYXRhOworCWV0aGhkciA9IChzdHJ1Y3QgZXRoaGRyICopc2tiX21hY19oZWFkZXIoc2tiKTsKKworCS8qIG5vdCBmb3IgbWUgKi8KKwlpZiAoIWlzX215X21hYyhldGhoZHItPmhfZGVzdCkpCisJCXJldHVybiBORVRfUlhfRFJPUDsKKworCS8qIGlnbm9yZSBvd24gcGFja2V0cyAqLworCWlmIChpc19teV9tYWModmlzX3BhY2tldC0+dmlzX29yaWcpKQorCQlyZXR1cm4gTkVUX1JYX0RST1A7CisKKwlpZiAoaXNfbXlfbWFjKHZpc19wYWNrZXQtPnNlbmRlcl9vcmlnKSkKKwkJcmV0dXJuIE5FVF9SWF9EUk9QOworCisJc3dpdGNoICh2aXNfcGFja2V0LT52aXNfdHlwZSkgeworCWNhc2UgVklTX1RZUEVfU0VSVkVSX1NZTkM6CisJCS8qIFRPRE86IGhhbmRsZSBmcmFnbWVudGVkIHNrYnMgcHJvcGVybHkgKi8KKwkJcmVjZWl2ZV9zZXJ2ZXJfc3luY19wYWNrZXQodmlzX3BhY2tldCwgc2tiX2hlYWRsZW4oc2tiKSk7CisJCWJyZWFrOworCisJY2FzZSBWSVNfVFlQRV9DTElFTlRfVVBEQVRFOgorCQkvKiBUT0RPOiBoYW5kbGUgZnJhZ21lbnRlZCBza2JzIHByb3Blcmx5ICovCisJCXJlY2VpdmVfY2xpZW50X3VwZGF0ZV9wYWNrZXQodmlzX3BhY2tldCwgc2tiX2hlYWRsZW4oc2tiKSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoJLyogaWdub3JlIHVua25vd24gcGFja2V0ICovCisJCWJyZWFrOworCX0KKworCS8qIFdlIHRha2UgYSBjb3B5IG9mIHRoZSBkYXRhIGluIHRoZSBwYWNrZXQsIHNvIHdlIHNob3VsZAorCSAgIGFsd2F5cyBmcmVlIHRoZSBza2J1Zi4gKi8KKwlyZXR1cm4gTkVUX1JYX0RST1A7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9yb3V0aW5nLmggYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9yb3V0aW5nLmgKaW5kZXggMDEyM2VhOC4uOTM5YjhkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvcm91dGluZy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3JvdXRpbmcuaApAQCAtMjIsMTMgKzIyLDE4IEBACiAjaW5jbHVkZSAidHlwZXMuaCIKIAogZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IHRocmVhZF93YWl0OwotZXh0ZXJuIGF0b21pY190IGV4aXRfY29uZDsKIAotaW50IG9yaWdpbmF0b3JfaW5pdCh2b2lkKTsKLXZvaWQgZnJlZV9vcmlnX25vZGUodm9pZCAqZGF0YSk7Ci12b2lkIG9yaWdpbmF0b3JfZnJlZSh2b2lkKTsKIHZvaWQgc2xpZGVfb3duX2JjYXN0X3dpbmRvdyhzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYpOwotdm9pZCBiYXRtYW5fZGF0YV9yZWFkeShzdHJ1Y3Qgc29jayAqc2ssIGludCBsZW4pOwotdm9pZCBwdXJnZV9vcmlnKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1pbnQgcGFja2V0X3JlY3ZfdGhyZWFkKHZvaWQgKmRhdGEpOwotdm9pZCByZWNlaXZlX2JhdF9wYWNrZXQoc3RydWN0IGV0aGhkciAqZXRoaGRyLCBzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCwgdW5zaWduZWQgY2hhciAqaG5hX2J1ZmYsIGludCBobmFfYnVmZl9sZW4sIHN0cnVjdCBiYXRtYW5faWYgKmlmX2luY29taW5nKTsKK3ZvaWQgcmVjZWl2ZV9iYXRfcGFja2V0KHN0cnVjdCBldGhoZHIgKmV0aGhkciwKKwkJCQlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCwKKwkJCQl1bnNpZ25lZCBjaGFyICpobmFfYnVmZiwgaW50IGhuYV9idWZmX2xlbiwKKwkJCQlzdHJ1Y3QgYmF0bWFuX2lmICppZl9pbmNvbWluZyk7Cit2b2lkIHVwZGF0ZV9yb3V0ZXMoc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlLAorCQkJCXN0cnVjdCBuZWlnaF9ub2RlICpuZWlnaF9ub2RlLAorCQkJCXVuc2lnbmVkIGNoYXIgKmhuYV9idWZmLCBpbnQgaG5hX2J1ZmZfbGVuKTsKK2ludCByZWN2X2ljbXBfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IpOworaW50IHJlY3ZfdW5pY2FzdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgcmVjdl9iY2FzdF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CitpbnQgcmVjdl92aXNfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IpOworaW50IHJlY3ZfYmF0X3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zZW5kLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zZW5kLmMKaW5kZXggZWI2MTc1MC4uMmE5ZmFjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc2VuZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NlbmQuYwpAQCAtMjEsMTYgKzIxLDE0IEBACiAKICNpbmNsdWRlICJtYWluLmgiCiAjaW5jbHVkZSAic2VuZC5oIgotI2luY2x1ZGUgImxvZy5oIgogI2luY2x1ZGUgInJvdXRpbmcuaCIKICNpbmNsdWRlICJ0cmFuc2xhdGlvbi10YWJsZS5oIgorI2luY2x1ZGUgInNvZnQtaW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiaGFyZC1pbnRlcmZhY2UuaCIKICNpbmNsdWRlICJ0eXBlcy5oIgogI2luY2x1ZGUgInZpcy5oIgogI2luY2x1ZGUgImFnZ3JlZ2F0aW9uLmgiCiAKLSNpbmNsdWRlICJjb21wYXQuaCIKLQogLyogYXBwbHkgaG9wIHBlbmFsdHkgZm9yIGEgbm9ybWFsIGxpbmsgKi8KIHN0YXRpYyB1aW50OF90IGhvcF9wZW5hbHR5KGNvbnN0IHVpbnQ4X3QgdHEpCiB7CkBAIC01OSw1MSArNTcsNjkgQEAKIAlyZXR1cm4gc2VuZF90aW1lOwogfQogCi0vKiBzZW5kcyBhIHJhdyBwYWNrZXQuICovCi12b2lkIHNlbmRfcmF3X3BhY2tldCh1bnNpZ25lZCBjaGFyICpwYWNrX2J1ZmYsIGludCBwYWNrX2J1ZmZfbGVuLAotCQkgICAgIHN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZiwgdWludDhfdCAqZHN0X2FkZHIpCisvKiBzZW5kIG91dCBhbiBhbHJlYWR5IHByZXBhcmVkIHBhY2tldCB0byB0aGUgZ2l2ZW4gYWRkcmVzcyB2aWEgdGhlCisgKiBzcGVjaWZpZWQgYmF0bWFuIGludGVyZmFjZSAqLworaW50IHNlbmRfc2tiX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZiwKKwkJCQl1aW50OF90ICpkc3RfYWRkcikKIHsKIAlzdHJ1Y3QgZXRoaGRyICpldGhoZHI7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlpbnQgcmV0dmFsOwotCWNoYXIgKmRhdGE7CiAKIAlpZiAoYmF0bWFuX2lmLT5pZl9hY3RpdmUgIT0gSUZfQUNUSVZFKQotCQlyZXR1cm47CisJCWdvdG8gc2VuZF9za2JfZXJyOworCisJaWYgKHVubGlrZWx5KCFiYXRtYW5faWYtPm5ldF9kZXYpKQorCQlnb3RvIHNlbmRfc2tiX2VycjsKIAogCWlmICghKGJhdG1hbl9pZi0+bmV0X2Rldi0+ZmxhZ3MgJiBJRkZfVVApKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9XQVJOLAotCQkgICAgICAgICAiSW50ZXJmYWNlICVzIGlzIG5vdCB1cCAtIGNhbid0IHNlbmQgcGFja2V0IHZpYSB0aGF0IGludGVyZmFjZSAoSUZfVE9fQkVfREVBQ1RJVkFURUQgd2FzIGhlcmUpICFcbiIsCi0JCSAgICAgICAgICBiYXRtYW5faWYtPmRldik7Ci0JCXJldHVybjsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgImJhdG1hbi1hZHY6SW50ZXJmYWNlICVzIGlzIG5vdCB1cCAtIGNhbid0IHNlbmQgcGFja2V0IHZpYSB0aGF0IGludGVyZmFjZSFcbiIsCisJCSAgICAgICBiYXRtYW5faWYtPmRldik7CisJCWdvdG8gc2VuZF9za2JfZXJyOwogCX0KIAotCXNrYiA9IGRldl9hbGxvY19za2IocGFja19idWZmX2xlbiArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSk7Ci0JaWYgKCFza2IpCi0JCXJldHVybjsKLQlkYXRhID0gc2tiX3B1dChza2IsIHBhY2tfYnVmZl9sZW4gKyBzaXplb2Yoc3RydWN0IGV0aGhkcikpOworCS8qIHB1c2ggdG8gdGhlIGV0aGVybmV0IGhlYWRlci4gKi8KKwlpZiAobXlfc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpIDwgMCkKKwkJZ290byBzZW5kX3NrYl9lcnI7CiAKLQltZW1jcHkoZGF0YSArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgcGFja19idWZmLCBwYWNrX2J1ZmZfbGVuKTsKKwlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCi0JZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKikgZGF0YTsKKwlldGhoZHIgPSAoc3RydWN0IGV0aGhkciAqKSBza2JfbWFjX2hlYWRlcihza2IpOwogCW1lbWNweShldGhoZHItPmhfc291cmNlLCBiYXRtYW5faWYtPm5ldF9kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KGV0aGhkci0+aF9kZXN0LCBkc3RfYWRkciwgRVRIX0FMRU4pOwogCWV0aGhkci0+aF9wcm90byA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfQkFUTUFOKTsKIAotCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CiAJc2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIEVUSF9ITEVOKTsKIAlza2ItPnByaW9yaXR5ID0gVENfUFJJT19DT05UUk9MOwogCXNrYi0+cHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0JBVE1BTik7CisKIAlza2ItPmRldiA9IGJhdG1hbl9pZi0+bmV0X2RldjsKIAogCS8qIGRldl9xdWV1ZV94bWl0KCkgcmV0dXJucyBhIG5lZ2F0aXZlIHJlc3VsdCBvbiBlcnJvci4JIEhvd2V2ZXIgb24KIAkgKiBjb25nZXN0aW9uIGFuZCB0cmFmZmljIHNoYXBpbmcsIGl0IGRyb3BzIGFuZCByZXR1cm5zIE5FVF9YTUlUX0RST1AKIAkgKiAod2hpY2ggaXMgPiAwKS4gVGhpcyB3aWxsIG5vdCBiZSB0cmVhdGVkIGFzIGFuIGVycm9yLiAqLwotCXJldHZhbCA9IGRldl9xdWV1ZV94bWl0KHNrYik7Ci0JaWYgKHJldHZhbCA8IDApCi0JCWRlYnVnX2xvZyhMT0dfVFlQRV9DUklULAotCQkgICAgICAgICAgIkNhbid0IHdyaXRlIHRvIHJhdyBzb2NrZXQgKElGX1RPX0JFX0RFQUNUSVZBVEVEIHdhcyBoZXJlKTogJWlcbiIsCi0JCSAgICAgICAgICByZXR2YWwpOworCisJcmV0dXJuIGRldl9xdWV1ZV94bWl0KHNrYik7CitzZW5kX3NrYl9lcnI6CisJa2ZyZWVfc2tiKHNrYik7CisJcmV0dXJuIE5FVF9YTUlUX0RST1A7Cit9CisKKy8qIHNlbmRzIGEgcmF3IHBhY2tldC4gKi8KK3ZvaWQgc2VuZF9yYXdfcGFja2V0KHVuc2lnbmVkIGNoYXIgKnBhY2tfYnVmZiwgaW50IHBhY2tfYnVmZl9sZW4sCisJCSAgICAgc3RydWN0IGJhdG1hbl9pZiAqYmF0bWFuX2lmLCB1aW50OF90ICpkc3RfYWRkcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCWNoYXIgKmRhdGE7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKHBhY2tfYnVmZl9sZW4gKyBzaXplb2Yoc3RydWN0IGV0aGhkcikpOworCWlmICghc2tiKQorCQlyZXR1cm47CisJZGF0YSA9IHNrYl9wdXQoc2tiLCBwYWNrX2J1ZmZfbGVuICsgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKKwltZW1jcHkoZGF0YSArIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSwgcGFja19idWZmLCBwYWNrX2J1ZmZfbGVuKTsKKwkvKiBwdWxsIGJhY2sgdG8gdGhlIGJhdG1hbiAibmV0d29yayBoZWFkZXIiICovCisJc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOworCXNlbmRfc2tiX3BhY2tldChza2IsIGJhdG1hbl9pZiwgZHN0X2FkZHIpOwogfQogCiAvKiBTZW5kIGEgcGFja2V0IHRvIGEgZ2l2ZW4gaW50ZXJmYWNlICovCkBAIC0xMTQsNyArMTMwLDYgQEAKIAl1aW50OF90IHBhY2tldF9udW07CiAJaW50MTZfdCBidWZmX3BvczsKIAlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldDsKLQljaGFyIG9yaWdfc3RyW0VUSF9TVFJfTEVOXTsKIAogCWlmIChiYXRtYW5faWYtPmlmX2FjdGl2ZSAhPSBJRl9BQ1RJVkUpCiAJCXJldHVybjsKQEAgLTEzNiwxOSArMTUxLDE4IEBACiAJCWVsc2UKIAkJCWJhdG1hbl9wYWNrZXQtPmZsYWdzICY9IH5ESVJFQ1RMSU5LOwogCi0JCWFkZHJfdG9fc3RyaW5nKG9yaWdfc3RyLCBiYXRtYW5fcGFja2V0LT5vcmlnKTsKIAkJZndkX3N0ciA9IChwYWNrZXRfbnVtID4gMCA/ICJGb3J3YXJkaW5nIiA6IChmb3J3X3BhY2tldC0+b3duID8KIAkJCQkJCQkgICAgIlNlbmRpbmcgb3duIiA6CiAJCQkJCQkJICAgICJGb3J3YXJkaW5nIikpOwotCQlkZWJ1Z19sb2coTE9HX1RZUEVfQkFUTUFOLAotCQkJICAiJXMgJXNwYWNrZXQgKG9yaWdpbmF0b3IgJXMsIHNlcW5vICVkLCBUUSAlZCwgVFRMICVkLCBJREYgJXMpIG9uIGludGVyZmFjZSAlcyBbJXNdXG4iLAotCQkJICBmd2Rfc3RyLAotCQkJICAocGFja2V0X251bSA+IDAgPyAiYWdncmVnYXRlZCAiIDogIiIpLAotCQkJICBvcmlnX3N0ciwgbnRvaHMoYmF0bWFuX3BhY2tldC0+c2Vxbm8pLAotCQkJICBiYXRtYW5fcGFja2V0LT50cSwgYmF0bWFuX3BhY2tldC0+dHRsLAotCQkJICAoYmF0bWFuX3BhY2tldC0+ZmxhZ3MgJiBESVJFQ1RMSU5LID8KLQkJCSAgICJvbiIgOiAib2ZmIiksCi0JCQkgIGJhdG1hbl9pZi0+ZGV2LCBiYXRtYW5faWYtPmFkZHJfc3RyKTsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLAorCQkJIiVzICVzcGFja2V0IChvcmlnaW5hdG9yICVwTSwgc2Vxbm8gJWQsIFRRICVkLCBUVEwgJWQsIElERiAlcykgb24gaW50ZXJmYWNlICVzIFslc11cbiIsCisJCQlmd2Rfc3RyLAorCQkJKHBhY2tldF9udW0gPiAwID8gImFnZ3JlZ2F0ZWQgIiA6ICIiKSwKKwkJCWJhdG1hbl9wYWNrZXQtPm9yaWcsIG50b2hzKGJhdG1hbl9wYWNrZXQtPnNlcW5vKSwKKwkJCWJhdG1hbl9wYWNrZXQtPnRxLCBiYXRtYW5fcGFja2V0LT50dGwsCisJCQkoYmF0bWFuX3BhY2tldC0+ZmxhZ3MgJiBESVJFQ1RMSU5LID8KKwkJCSAib24iIDogIm9mZiIpLAorCQkJYmF0bWFuX2lmLT5kZXYsIGJhdG1hbl9pZi0+YWRkcl9zdHIpOwogCiAJCWJ1ZmZfcG9zICs9IHNpemVvZihzdHJ1Y3QgYmF0bWFuX3BhY2tldCkgKwogCQkJKGJhdG1hbl9wYWNrZXQtPm51bV9obmEgKiBFVEhfQUxFTik7CkBAIC0xNjgsMzIgKzE4MiwyOCBAQAogCXN0cnVjdCBiYXRtYW5faWYgKmJhdG1hbl9pZjsKIAlzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCA9CiAJCShzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqKShmb3J3X3BhY2tldC0+cGFja2V0X2J1ZmYpOwotCWNoYXIgb3JpZ19zdHJbRVRIX1NUUl9MRU5dOwogCXVuc2lnbmVkIGNoYXIgZGlyZWN0bGluayA9IChiYXRtYW5fcGFja2V0LT5mbGFncyAmIERJUkVDVExJTksgPyAxIDogMCk7CiAKIAlpZiAoIWZvcndfcGFja2V0LT5pZl9pbmNvbWluZykgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfQ1JJVCwKLQkJCSAgIkVycm9yIC0gY2FuJ3QgZm9yd2FyZCBwYWNrZXQ6IGluY29taW5nIGlmYWNlIG5vdCBzcGVjaWZpZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6IEVycm9yIC0gY2FuJ3QgZm9yd2FyZCBwYWNrZXQ6IGluY29taW5nIGlmYWNlIG5vdCBzcGVjaWZpZWRcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJaWYgKGZvcndfcGFja2V0LT5pZl9pbmNvbWluZy0+aWZfYWN0aXZlICE9IElGX0FDVElWRSkKIAkJcmV0dXJuOwogCi0JYWRkcl90b19zdHJpbmcob3JpZ19zdHIsIGJhdG1hbl9wYWNrZXQtPm9yaWcpOwotCiAJLyogbXVsdGlob21lZCBwZWVyIGFzc3VtZWQgKi8KIAkvKiBub24tcHJpbWFyeSBPR01zIGFyZSBvbmx5IGJyb2FkY2FzdGVkIG9uIHRoZWlyIGludGVyZmFjZSAqLwogCWlmICgoZGlyZWN0bGluayAmJiAoYmF0bWFuX3BhY2tldC0+dHRsID09IDEpKSB8fAogCSAgICAoZm9yd19wYWNrZXQtPm93biAmJiAoZm9yd19wYWNrZXQtPmlmX2luY29taW5nLT5pZl9udW0gPiAwKSkpIHsKIAogCQkvKiBGSVhNRTogd2hhdCBhYm91dCBhZ2dyZWdhdGVkIHBhY2tldHMgPyAqLwotCQlkZWJ1Z19sb2coTE9HX1RZUEVfQkFUTUFOLAotCQkJICAiJXMgcGFja2V0IChvcmlnaW5hdG9yICVzLCBzZXFubyAlZCwgVFRMICVkKSBvbiBpbnRlcmZhY2UgJXMgWyVzXVxuIiwKLQkJCSAgKGZvcndfcGFja2V0LT5vd24gPyAiU2VuZGluZyBvd24iIDogIkZvcndhcmRpbmciKSwKLQkJCSAgb3JpZ19zdHIsIG50b2hzKGJhdG1hbl9wYWNrZXQtPnNlcW5vKSwKLQkJCSAgYmF0bWFuX3BhY2tldC0+dHRsLCBmb3J3X3BhY2tldC0+aWZfaW5jb21pbmctPmRldiwKLQkJCSAgZm9yd19wYWNrZXQtPmlmX2luY29taW5nLT5hZGRyX3N0cik7CisJCWJhdF9kYmcoREJHX0JBVE1BTiwKKwkJCSIlcyBwYWNrZXQgKG9yaWdpbmF0b3IgJXBNLCBzZXFubyAlZCwgVFRMICVkKSBvbiBpbnRlcmZhY2UgJXMgWyVzXVxuIiwKKwkJCShmb3J3X3BhY2tldC0+b3duID8gIlNlbmRpbmcgb3duIiA6ICJGb3J3YXJkaW5nIiksCisJCQliYXRtYW5fcGFja2V0LT5vcmlnLCBudG9ocyhiYXRtYW5fcGFja2V0LT5zZXFubyksCisJCQliYXRtYW5fcGFja2V0LT50dGwsIGZvcndfcGFja2V0LT5pZl9pbmNvbWluZy0+ZGV2LAorCQkJZm9yd19wYWNrZXQtPmlmX2luY29taW5nLT5hZGRyX3N0cik7CiAKIAkJc2VuZF9yYXdfcGFja2V0KGZvcndfcGFja2V0LT5wYWNrZXRfYnVmZiwKIAkJCQlmb3J3X3BhY2tldC0+cGFja2V0X2xlbiwKQEAgLTIzOCw2ICsyNDgsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgc2VuZF90aW1lOwogCXN0cnVjdCBiYXRtYW5fcGFja2V0ICpiYXRtYW5fcGFja2V0OworCWludCB2aXNfc2VydmVyID0gYXRvbWljX3JlYWQoJnZpc19tb2RlKTsKIAogCS8qKgogCSAqIHRoZSBpbnRlcmZhY2UgZ2V0cyBhY3RpdmF0ZWQgaGVyZSB0byBhdm9pZCByYWNlIGNvbmRpdGlvbnMgYmV0d2VlbgpAQCAtMjYyLDcgKzI3Myw3IEBACiAJLyogY2hhbmdlIHNlcXVlbmNlIG51bWJlciB0byBuZXR3b3JrIG9yZGVyICovCiAJYmF0bWFuX3BhY2tldC0+c2Vxbm8gPSBodG9ucygodWludDE2X3QpYXRvbWljX3JlYWQoJmJhdG1hbl9pZi0+c2Vxbm8pKTsKIAotCWlmIChpc192aXNfc2VydmVyKCkpCisJaWYgKHZpc19zZXJ2ZXIgPT0gVklTX1RZUEVfU0VSVkVSX1NZTkMpCiAJCWJhdG1hbl9wYWNrZXQtPmZsYWdzID0gVklTX1NFUlZFUjsKIAllbHNlCiAJCWJhdG1hbl9wYWNrZXQtPmZsYWdzID0gMDsKQEAgLTI4Niw3ICsyOTcsNyBAQAogCXVuc2lnbmVkIGxvbmcgc2VuZF90aW1lOwogCiAJaWYgKGJhdG1hbl9wYWNrZXQtPnR0bCA8PSAxKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sICJ0dGwgZXhjZWVkZWQgXG4iKTsKKwkJYmF0X2RiZyhEQkdfQkFUTUFOLCAidHRsIGV4Y2VlZGVkIFxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTMxNCw5ICszMjUsOSBAQAogCS8qIGFwcGx5IGhvcCBwZW5hbHR5ICovCiAJYmF0bWFuX3BhY2tldC0+dHEgPSBob3BfcGVuYWx0eShiYXRtYW5fcGFja2V0LT50cSk7CiAKLQlkZWJ1Z19sb2coTE9HX1RZUEVfQkFUTUFOLCAiRm9yd2FyZGluZyBwYWNrZXQ6IHRxX29yaWc6ICVpLCB0cV9hdmc6ICVpLCB0cV9mb3J3OiAlaSwgdHRsX29yaWc6ICVpLCB0dGxfZm9ydzogJWkgXG4iLAotCQkgIGluX3RxLCB0cV9hdmcsIGJhdG1hbl9wYWNrZXQtPnRxLCBpbl90dGwgLSAxLAotCQkgIGJhdG1hbl9wYWNrZXQtPnR0bCk7CisJYmF0X2RiZyhEQkdfQkFUTUFOLCAiRm9yd2FyZGluZyBwYWNrZXQ6IHRxX29yaWc6ICVpLCB0cV9hdmc6ICVpLCB0cV9mb3J3OiAlaSwgdHRsX29yaWc6ICVpLCB0dGxfZm9ydzogJWkgXG4iLAorCQlpbl90cSwgdHFfYXZnLCBiYXRtYW5fcGFja2V0LT50cSwgaW5fdHRsIC0gMSwKKwkJYmF0bWFuX3BhY2tldC0+dHRsKTsKIAogCWJhdG1hbl9wYWNrZXQtPnNlcW5vID0gaHRvbnMoYmF0bWFuX3BhY2tldC0+c2Vxbm8pOwogCkBAIC0zMzMsNiArMzQ0LDggQEAKIAogc3RhdGljIHZvaWQgZm9yd19wYWNrZXRfZnJlZShzdHJ1Y3QgZm9yd19wYWNrZXQgKmZvcndfcGFja2V0KQogeworCWlmIChmb3J3X3BhY2tldC0+c2tiKQorCQlrZnJlZV9za2IoZm9yd19wYWNrZXQtPnNrYik7CiAJa2ZyZWUoZm9yd19wYWNrZXQtPnBhY2tldF9idWZmKTsKIAlrZnJlZShmb3J3X3BhY2tldCk7CiB9CkBAIC0zNDAsMTIgKzM1MywxMyBAQAogc3RhdGljIHZvaWQgX2FkZF9iY2FzdF9wYWNrZXRfdG9fbGlzdChzdHJ1Y3QgZm9yd19wYWNrZXQgKmZvcndfcGFja2V0LAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc2VuZF90aW1lKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJSU5JVF9ITElTVF9OT0RFKCZmb3J3X3BhY2tldC0+bGlzdCk7CiAKIAkvKiBhZGQgbmV3IHBhY2tldCB0byBwYWNrZXQgbGlzdCAqLwotCXNwaW5fbG9jaygmZm9yd19iY2FzdF9saXN0X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZmb3J3X2JjYXN0X2xpc3RfbG9jaywgZmxhZ3MpOwogCWhsaXN0X2FkZF9oZWFkKCZmb3J3X3BhY2tldC0+bGlzdCwgJmZvcndfYmNhc3RfbGlzdCk7Ci0Jc3Bpbl91bmxvY2soJmZvcndfYmNhc3RfbGlzdF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmb3J3X2JjYXN0X2xpc3RfbG9jaywgZmxhZ3MpOwogCiAJLyogc3RhcnQgdGltZXIgZm9yIHRoaXMgcGFja2V0ICovCiAJSU5JVF9ERUxBWUVEX1dPUksoJmZvcndfcGFja2V0LT5kZWxheWVkX3dvcmssCkBAIC0zNTQsNyArMzY4LDcgQEAKIAkJCSAgIHNlbmRfdGltZSk7CiB9CiAKLXZvaWQgYWRkX2JjYXN0X3BhY2tldF90b19saXN0KHVuc2lnbmVkIGNoYXIgKnBhY2tldF9idWZmLCBpbnQgcGFja2V0X2xlbikKK3ZvaWQgYWRkX2JjYXN0X3BhY2tldF90b19saXN0KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGZvcndfcGFja2V0ICpmb3J3X3BhY2tldDsKIApAQCAtMzYyLDE0ICszNzYsMTYgQEAKIAlpZiAoIWZvcndfcGFja2V0KQogCQlyZXR1cm47CiAKLQlmb3J3X3BhY2tldC0+cGFja2V0X2J1ZmYgPSBrbWFsbG9jKHBhY2tldF9sZW4sIEdGUF9BVE9NSUMpOwotCWlmICghZm9yd19wYWNrZXQtPnBhY2tldF9idWZmKSB7CisJc2tiID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikgewogCQlrZnJlZShmb3J3X3BhY2tldCk7CiAJCXJldHVybjsKIAl9CiAKLQlmb3J3X3BhY2tldC0+cGFja2V0X2xlbiA9IHBhY2tldF9sZW47Ci0JbWVtY3B5KGZvcndfcGFja2V0LT5wYWNrZXRfYnVmZiwgcGFja2V0X2J1ZmYsIGZvcndfcGFja2V0LT5wYWNrZXRfbGVuKTsKKwlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOworCisJZm9yd19wYWNrZXQtPnNrYiA9IHNrYjsKKwlmb3J3X3BhY2tldC0+cGFja2V0X2J1ZmYgPSBOVUxMOwogCiAJLyogaG93IG9mdGVuIGRpZCB3ZSBzZW5kIHRoZSBiY2FzdCBwYWNrZXQgPyAqLwogCWZvcndfcGFja2V0LT5udW1fcGFja2V0cyA9IDA7CkBAIC0zODQsMTYgKzQwMCwyMCBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CiAJc3RydWN0IGZvcndfcGFja2V0ICpmb3J3X3BhY2tldCA9CiAJCWNvbnRhaW5lcl9vZihkZWxheWVkX3dvcmssIHN0cnVjdCBmb3J3X3BhY2tldCwgZGVsYXllZF93b3JrKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBza19idWZmICpza2IxOwogCi0Jc3Bpbl9sb2NrKCZmb3J3X2JjYXN0X2xpc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmZvcndfYmNhc3RfbGlzdF9sb2NrLCBmbGFncyk7CiAJaGxpc3RfZGVsKCZmb3J3X3BhY2tldC0+bGlzdCk7Ci0Jc3Bpbl91bmxvY2soJmZvcndfYmNhc3RfbGlzdF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmb3J3X2JjYXN0X2xpc3RfbG9jaywgZmxhZ3MpOwogCiAJLyogcmVicm9hZGNhc3QgcGFja2V0ICovCiAJcmN1X3JlYWRfbG9jaygpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGJhdG1hbl9pZiwgJmlmX2xpc3QsIGxpc3QpIHsKLQkJc2VuZF9yYXdfcGFja2V0KGZvcndfcGFja2V0LT5wYWNrZXRfYnVmZiwKLQkJCQlmb3J3X3BhY2tldC0+cGFja2V0X2xlbiwKKwkJLyogc2VuZCBhIGNvcHkgb2YgdGhlIHNhdmVkIHNrYiAqLworCQlza2IxID0gc2tiX2NvcHkoZm9yd19wYWNrZXQtPnNrYiwgR0ZQX0FUT01JQyk7CisJCWlmIChza2IxKQorCQkJc2VuZF9za2JfcGFja2V0KHNrYjEsCiAJCQkJYmF0bWFuX2lmLCBicm9hZGNhc3RBZGRyKTsKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC00MTUsMTAgKzQzNSwxMSBAQAogCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGRlbGF5ZWRfd29yaywgd29yayk7CiAJc3RydWN0IGZvcndfcGFja2V0ICpmb3J3X3BhY2tldCA9CiAJCWNvbnRhaW5lcl9vZihkZWxheWVkX3dvcmssIHN0cnVjdCBmb3J3X3BhY2tldCwgZGVsYXllZF93b3JrKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZmb3J3X2JhdF9saXN0X2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZmb3J3X2JhdF9saXN0X2xvY2ssIGZsYWdzKTsKIAlobGlzdF9kZWwoJmZvcndfcGFja2V0LT5saXN0KTsKLQlzcGluX3VubG9jaygmZm9yd19iYXRfbGlzdF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmb3J3X2JhdF9saXN0X2xvY2ssIGZsYWdzKTsKIAogCXNlbmRfcGFja2V0KGZvcndfcGFja2V0KTsKIApAQCAtNDM4LDM4ICs0NTksMzkgQEAKIHsKIAlzdHJ1Y3QgZm9yd19wYWNrZXQgKmZvcndfcGFja2V0OwogCXN0cnVjdCBobGlzdF9ub2RlICp0bXBfbm9kZSwgKnNhZmVfdG1wX25vZGU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWRlYnVnX2xvZyhMT0dfVFlQRV9CQVRNQU4sICJwdXJnZV9vdXRzdGFuZGluZ19wYWNrZXRzKClcbiIpOworCWJhdF9kYmcoREJHX0JBVE1BTiwgInB1cmdlX291dHN0YW5kaW5nX3BhY2tldHMoKVxuIik7CiAKIAkvKiBmcmVlIGJjYXN0IGxpc3QgKi8KLQlzcGluX2xvY2soJmZvcndfYmNhc3RfbGlzdF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZm9yd19iY2FzdF9saXN0X2xvY2ssIGZsYWdzKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZvcndfcGFja2V0LCB0bXBfbm9kZSwgc2FmZV90bXBfbm9kZSwKIAkJCQkgICZmb3J3X2JjYXN0X2xpc3QsIGxpc3QpIHsKIAotCQlzcGluX3VubG9jaygmZm9yd19iY2FzdF9saXN0X2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmb3J3X2JjYXN0X2xpc3RfbG9jaywgZmxhZ3MpOwogCiAJCS8qKgogCQkgKiBzZW5kX291dHN0YW5kaW5nX2JjYXN0X3BhY2tldCgpIHdpbGwgbG9jayB0aGUgbGlzdCB0bwogCQkgKiBkZWxldGUgdGhlIGl0ZW0gZnJvbSB0aGUgbGlzdAogCQkgKi8KIAkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZmb3J3X3BhY2tldC0+ZGVsYXllZF93b3JrKTsKLQkJc3Bpbl9sb2NrKCZmb3J3X2JjYXN0X2xpc3RfbG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZmb3J3X2JjYXN0X2xpc3RfbG9jaywgZmxhZ3MpOwogCX0KLQlzcGluX3VubG9jaygmZm9yd19iY2FzdF9saXN0X2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZvcndfYmNhc3RfbGlzdF9sb2NrLCBmbGFncyk7CiAKIAkvKiBmcmVlIGJhdG1hbiBwYWNrZXQgbGlzdCAqLwotCXNwaW5fbG9jaygmZm9yd19iYXRfbGlzdF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZm9yd19iYXRfbGlzdF9sb2NrLCBmbGFncyk7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmb3J3X3BhY2tldCwgdG1wX25vZGUsIHNhZmVfdG1wX25vZGUsCiAJCQkJICAmZm9yd19iYXRfbGlzdCwgbGlzdCkgewogCi0JCXNwaW5fdW5sb2NrKCZmb3J3X2JhdF9saXN0X2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmb3J3X2JhdF9saXN0X2xvY2ssIGZsYWdzKTsKIAogCQkvKioKIAkJICogc2VuZF9vdXRzdGFuZGluZ19iYXRfcGFja2V0KCkgd2lsbCBsb2NrIHRoZSBsaXN0IHRvCiAJCSAqIGRlbGV0ZSB0aGUgaXRlbSBmcm9tIHRoZSBsaXN0CiAJCSAqLwogCQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmZvcndfcGFja2V0LT5kZWxheWVkX3dvcmspOwotCQlzcGluX2xvY2soJmZvcndfYmF0X2xpc3RfbG9jayk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZmb3J3X2JhdF9saXN0X2xvY2ssIGZsYWdzKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmZvcndfYmF0X2xpc3RfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZm9yd19iYXRfbGlzdF9sb2NrLCBmbGFncyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zZW5kLmggYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zZW5kLmgKaW5kZXggNTlkNTAwOS4uNWZjNmYzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc2VuZC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NlbmQuaApAQCAtMjIsNiArMjIsOSBAQAogI2luY2x1ZGUgInR5cGVzLmgiCiAKIHZvaWQgc2VuZF9vd25fcGFja2V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK2ludCBzZW5kX3NrYl9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYsCisJCQkJdWludDhfdCAqZHN0X2FkZHIpOwogdm9pZCBzZW5kX3Jhd19wYWNrZXQodW5zaWduZWQgY2hhciAqcGFja19idWZmLCBpbnQgcGFja19idWZmX2xlbiwKIAkJICAgICBzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYsIHVpbnQ4X3QgKmRzdF9hZGRyKTsKIHZvaWQgc2NoZWR1bGVfb3duX3BhY2tldChzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWYpOwpAQCAtMzAsNyArMzMsNyBAQAogCQkJICAgICBzdHJ1Y3QgYmF0bWFuX3BhY2tldCAqYmF0bWFuX3BhY2tldCwKIAkJCSAgICAgdWludDhfdCBkaXJlY3RsaW5rLCBpbnQgaG5hX2J1ZmZfbGVuLAogCQkJICAgICBzdHJ1Y3QgYmF0bWFuX2lmICppZl9vdXRnb2luZyk7Ci12b2lkIGFkZF9iY2FzdF9wYWNrZXRfdG9fbGlzdCh1bnNpZ25lZCBjaGFyICpwYWNrZXRfYnVmZiwgaW50IHBhY2tldF9sZW4pOwordm9pZCBhZGRfYmNhc3RfcGFja2V0X3RvX2xpc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiB2b2lkIHNlbmRfb3V0c3RhbmRpbmdfYmNhc3RfcGFja2V0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiB2b2lkIHNlbmRfb3V0c3RhbmRpbmdfYmF0X3BhY2tldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBwdXJnZV9vdXRzdGFuZGluZ19wYWNrZXRzKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuYyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmMKaW5kZXggZDU0M2Y1MC4uYzliMzVkOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuYwpAQCAtMjQsMTggKzI0LDE1IEBACiAjaW5jbHVkZSAiaGFyZC1pbnRlcmZhY2UuaCIKICNpbmNsdWRlICJzZW5kLmgiCiAjaW5jbHVkZSAidHJhbnNsYXRpb24tdGFibGUuaCIKLSNpbmNsdWRlICJsb2cuaCIKICNpbmNsdWRlICJ0eXBlcy5oIgogI2luY2x1ZGUgImhhc2guaCIKICNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KLSNpbmNsdWRlICJjb21wYXQuaCIKIAogc3RhdGljIHVpbnQxNl90IGJjYXN0X3NlcW5vID0gMTsgLyogZ2l2ZSBvd24gYmNhc3QgbWVzc2FnZXMgc2VxIG51bWJlcnMgdG8gYXZvaWQKIAkJCQkgICogYnJvYWRjYXN0IHN0b3JtcyAqLwogc3RhdGljIGludDMyX3Qgc2tiX3BhY2tldHM7CiBzdGF0aWMgaW50MzJfdCBza2JfYmFkX3BhY2tldHM7Ci1zdGF0aWMgaW50MzJfdCBsb2NrX2Ryb3BwZWQ7CiAKIHVuc2lnbmVkIGNoYXIgbWFpbklmQWRkcltFVEhfQUxFTl07CiBzdGF0aWMgdW5zaWduZWQgY2hhciBtYWluSWZBZGRyX2RlZmF1bHRbRVRIX0FMRU5dOwpAQCAtNjgsMTIgKzY1LDEyIEBACiAJcmV0dXJuIChtZW1jbXAobWFpbklmQWRkciwgbWFpbklmQWRkcl9kZWZhdWx0LCBFVEhfQUxFTikgIT0gMCA/IDEgOiAwKTsKIH0KIAotc3RhdGljIGludCBteV9za2JfcHVzaChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuKQoraW50IG15X3NrYl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaW50IHJlc3VsdCA9IDA7CiAKIAlza2JfcGFja2V0cysrOwotCWlmIChza2ItPmRhdGEgLSBsZW4gPCBza2ItPmhlYWQpIHsKKwlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCBsZW4pIHsKIAkJc2tiX2JhZF9wYWNrZXRzKys7CiAJCXJlc3VsdCA9IHBza2JfZXhwYW5kX2hlYWQoc2tiLCBsZW4sIDAsIEdGUF9BVE9NSUMpOwogCkBAIC0xMjIsNyArMTE5LDcgQEAKIAogCS8qIGdlbmVyYXRlIHJhbmRvbSBhZGRyZXNzICovCiAJcmFuZG9tX2V0aGVyX2FkZHIoZGV2X2FkZHIpOwotCW1lbWNweShkZXYtPmRldl9hZGRyLCBkZXZfYWRkciwgc2l6ZW9mKGRldi0+ZGV2X2FkZHIpKTsKKwltZW1jcHkoZGV2LT5kZXZfYWRkciwgZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAogCVNFVF9FVEhUT09MX09QUyhkZXYsICZiYXRfZXRodG9vbF9vcHMpOwogCkBAIC0xNDcsOSArMTQ0LDE4IEBACiAJcmV0dXJuICZwcml2LT5zdGF0czsKIH0KIAotaW50IGludGVyZmFjZV9zZXRfbWFjX2FkZHIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKK2ludCBpbnRlcmZhY2Vfc2V0X21hY19hZGRyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKnApCiB7Ci0JcmV0dXJuIC1FQlVTWTsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwlobmFfbG9jYWxfcmVtb3ZlKGRldi0+ZGV2X2FkZHIsICJtYWMgYWRkcmVzcyBjaGFuZ2VkIik7CisJbWVtY3B5KGRldi0+ZGV2X2FkZHIsIGFkZHItPnNhX2RhdGEsIEVUSF9BTEVOKTsKKwlobmFfbG9jYWxfYWRkKGRldi0+ZGV2X2FkZHIpOworCisJcmV0dXJuIDA7CiB9CiAKIGludCBpbnRlcmZhY2VfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKQEAgLTE3MCw3ICsxNzYsMTAgQEAKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CiAJc3RydWN0IGV0aGhkciAqZXRoaGRyID0gKHN0cnVjdCBldGhoZHIgKilza2ItPmRhdGE7CiAJc3RydWN0IGJhdF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgYmF0bWFuX2lmICpiYXRtYW5faWY7CisJdWludDhfdCBkc3RhZGRyWzZdOwogCWludCBkYXRhX2xlbiA9IHNrYi0+bGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlpZiAoYXRvbWljX3JlYWQoJm1vZHVsZV9zdGF0ZSkgIT0gTU9EVUxFX0FDVElWRSkKIAkJZ290byBkcm9wcGVkOwpAQCAtMTg2LDcgKzE5NSw2IEBACiAJCQlnb3RvIGRyb3BwZWQ7CiAKIAkJYmNhc3RfcGFja2V0ID0gKHN0cnVjdCBiY2FzdF9wYWNrZXQgKilza2ItPmRhdGE7Ci0KIAkJYmNhc3RfcGFja2V0LT52ZXJzaW9uID0gQ09NUEFUX1ZFUlNJT047CiAKIAkJLyogYmF0bWFuIHBhY2tldCB0eXBlOiBicm9hZGNhc3QgKi8KQEAgLTE5NSwyNyArMjAzLDIxIEBACiAJCS8qIGh3IGFkZHJlc3Mgb2YgZmlyc3QgaW50ZXJmYWNlIGlzIHRoZSBvcmlnIG1hYyBiZWNhdXNlIG9ubHkKIAkJICogdGhpcyBtYWMgaXMga25vd24gdGhyb3VnaG91dCB0aGUgbWVzaCAqLwogCQltZW1jcHkoYmNhc3RfcGFja2V0LT5vcmlnLCBtYWluSWZBZGRyLCBFVEhfQUxFTik7CisKIAkJLyogc2V0IGJyb2FkY2FzdCBzZXF1ZW5jZSBudW1iZXIgKi8KIAkJYmNhc3RfcGFja2V0LT5zZXFubyA9IGh0b25zKGJjYXN0X3NlcW5vKTsKIAogCQliY2FzdF9zZXFubysrOwogCiAJCS8qIGJyb2FkY2FzdCBwYWNrZXQgKi8KLQkJYWRkX2JjYXN0X3BhY2tldF90b19saXN0KHNrYi0+ZGF0YSwgc2tiLT5sZW4pOworCQlhZGRfYmNhc3RfcGFja2V0X3RvX2xpc3Qoc2tiKTsKKwkJLyogYSBjb3B5IGlzIHN0b3JlZCBpbiB0aGUgYmNhc3QgbGlzdCwgdGhlcmVmb3JlIHJlbW92aW5nCisJCSAqIHRoZSBvcmlnaW5hbCBza2IuICovCisJCWtmcmVlX3NrYihza2IpOwogCiAJLyogdW5pY2FzdCBwYWNrZXQgKi8KIAl9IGVsc2UgewotCi0JCS8qIHNpbXBseSBzcGluX2xvY2soKWluZyBjYW4gZGVhZGxvY2sgd2hlbiB0aGUgbG9jayBpcyBhbHJlYWR5Ci0JCSAqIGhvbGQuICovCi0JCS8qIFRPRE86IGRlZmVyIHRoZSB3b3JrIGluIGEgd29ya2luZyBxdWV1ZSBpbnN0ZWFkIG9mCi0JCSAqIGRyb3BwaW5nICovCi0JCWlmICghc3Bpbl90cnlsb2NrKCZvcmlnX2hhc2hfbG9jaykpIHsKLQkJCWxvY2tfZHJvcHBlZCsrOwotCQkJZGVidWdfbG9nKExPR19UWVBFX05PVElDRSwgIiVkIHBhY2tldHMgZHJvcHBlZCBiZWNhdXNlIGxvY2sgd2FzIGhvbGRcbiIsIGxvY2tfZHJvcHBlZCk7Ci0JCQlnb3RvIGRyb3BwZWQ7Ci0JCX0KLQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAkJLyogZ2V0IHJvdXRpbmcgaW5mb3JtYXRpb24gKi8KIAkJb3JpZ19ub2RlID0gKChzdHJ1Y3Qgb3JpZ19ub2RlICopaGFzaF9maW5kKG9yaWdfaGFzaCwKIAkJCQkJCQkgICBldGhoZHItPmhfZGVzdCkpOwpAQCAtMjQ0LDE0ICsyNDYsMTcgQEAKIAkJCWlmIChvcmlnX25vZGUtPmJhdG1hbl9pZi0+aWZfYWN0aXZlICE9IElGX0FDVElWRSkKIAkJCQlnb3RvIHVubG9jazsKIAotCQkJc2VuZF9yYXdfcGFja2V0KHNrYi0+ZGF0YSwgc2tiLT5sZW4sCi0JCQkJCW9yaWdfbm9kZS0+YmF0bWFuX2lmLAotCQkJCQlvcmlnX25vZGUtPnJvdXRlci0+YWRkcik7CisJCQkvKiBkb24ndCBsb2NrIHdoaWxlIHNlbmRpbmcgdGhlIHBhY2tldHMgLi4uIHdlIHRoZXJlZm9yZQorCQkJICogY29weSB0aGUgcmVxdWlyZWQgZGF0YSBiZWZvcmUgc2VuZGluZyAqLworCisJCQliYXRtYW5faWYgPSBvcmlnX25vZGUtPmJhdG1hbl9pZjsKKwkJCW1lbWNweShkc3RhZGRyLCBvcmlnX25vZGUtPnJvdXRlci0+YWRkciwgRVRIX0FMRU4pOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKKworCQkJc2VuZF9za2JfcGFja2V0KHNrYiwgYmF0bWFuX2lmLCBkc3RhZGRyKTsKIAkJfSBlbHNlIHsKIAkJCWdvdG8gdW5sb2NrOwogCQl9Ci0KLQkJc3Bpbl91bmxvY2soJm9yaWdfaGFzaF9sb2NrKTsKIAl9CiAKIAlwcml2LT5zdGF0cy50eF9wYWNrZXRzKys7CkBAIC0yNTksNDIgKzI2NCw0NCBAQAogCWdvdG8gZW5kOwogCiB1bmxvY2s6Ci0Jc3Bpbl91bmxvY2soJm9yaWdfaGFzaF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwogZHJvcHBlZDoKIAlwcml2LT5zdGF0cy50eF9kcm9wcGVkKys7CiBlbmQ6Ci0Ja2ZyZWVfc2tiKHNrYik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KIAotdm9pZCBpbnRlcmZhY2Vfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcGFja2V0LCBpbnQgcGFja2V0X2xlbikKK3ZvaWQgaW50ZXJmYWNlX3J4KHN0cnVjdCBza19idWZmICpza2IsIGludCBoZHJfc2l6ZSkKIHsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzb2Z0X2RldmljZTsKIAlzdHJ1Y3QgYmF0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihwYWNrZXRfbGVuKTsKLQotCWlmICghc2tiKSB7Ci0JCXByaXYtPnN0YXRzLnJ4X2Ryb3BwZWQrKzsKLQkJZ290byBvdXQ7CisJLyogY2hlY2sgaWYgZW5vdWdoIHNwYWNlIGlzIGF2YWlsYWJsZSBmb3IgcHVsbGluZywgYW5kIHB1bGwgKi8KKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBoZHJfc2l6ZSkpIHsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybjsKIAl9CisJc2tiX3B1bGxfcmNzdW0oc2tiLCBoZHJfc2l6ZSk7CisvKglza2Jfc2V0X21hY19oZWFkZXIoc2tiLCAtc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsqLwogCi0JbWVtY3B5KHNrYl9wdXQoc2tiLCBwYWNrZXRfbGVuKSwgcGFja2V0LCBwYWNrZXRfbGVuKTsKLQotCS8qIFdyaXRlIG1ldGFkYXRhLCBhbmQgdGhlbiBwYXNzIHRvIHRoZSByZWNlaXZlIGxldmVsICovCiAJc2tiLT5kZXYgPSBkZXY7CiAJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKLQlza2ItPmlwX3N1bW1lZCA9IENIRUNLU1VNX1VOTkVDRVNTQVJZOworCisJLyogc2hvdWxkIG5vdCBiZSBuZWNjZXNhcnkgYW55bW9yZSBhcyB3ZSB1c2Ugc2tiX3B1bGxfcmNzdW0oKQorCSAqIFRPRE86IHBsZWFzZSB2ZXJpZnkgdGhpcyBhbmQgcmVtb3ZlIHRoaXMgVE9ETworCSAqIC0tIERlYyAyMXN0IDIwMDksIFNpbW9uIFd1bmRlcmxpY2ggKi8KKworLyoJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsqLworCisJLyogVE9ETzogc2V0IHNrYi0+cGt0X3R5cGUgdG8gUEFDS0VUX0JST0FEQ0FTVCwgUEFDS0VUX01VTFRJQ0FTVCwKKwkgKiBQQUNLRVRfT1RIRVJIT1NUIG9yIFBBQ0tFVF9IT1NUICovCiAKIAlwcml2LT5zdGF0cy5yeF9wYWNrZXRzKys7Ci0JcHJpdi0+c3RhdHMucnhfYnl0ZXMgKz0gcGFja2V0X2xlbjsKKwlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKIAogCWRldi0+bGFzdF9yeCA9IGppZmZpZXM7CiAKIAluZXRpZl9yeChza2IpOwotCi1vdXQ6Ci0JcmV0dXJuOwogfQogCiAvKiBldGh0b29sICovCkBAIC0zMzAsNyArMzM3LDYgQEAKIAogc3RhdGljIHZvaWQgYmF0X3NldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdmFsdWUpCiB7Ci0JcmV0dXJuOwogfQogCiBzdGF0aWMgdTMyIGJhdF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3NvZnQtaW50ZXJmYWNlLmgKaW5kZXggNTE1ZTI3Ni4uYzBjYWQ4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvc29mdC1pbnRlcmZhY2UuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi9zb2Z0LWludGVyZmFjZS5oCkBAIC0yOCw2ICsyOCw3IEBACiBpbnQgaW50ZXJmYWNlX3NldF9tYWNfYWRkcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKTsKIGludCBpbnRlcmZhY2VfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSk7CiBpbnQgaW50ZXJmYWNlX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotdm9pZCBpbnRlcmZhY2Vfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcGFja2V0LCBpbnQgcGFja2V0X2xlbik7Cit2b2lkIGludGVyZmFjZV9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGRyX3NpemUpOworaW50IG15X3NrYl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pOwogCiBleHRlcm4gdW5zaWduZWQgY2hhciBtYWluSWZBZGRyW107CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuYwppbmRleCBjMjE5MGUxLi5kNTZmNjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmMKQEAgLTIxLDExICsyMSw5IEBACiAKICNpbmNsdWRlICJtYWluLmgiCiAjaW5jbHVkZSAidHJhbnNsYXRpb24tdGFibGUuaCIKLSNpbmNsdWRlICJsb2cuaCIKICNpbmNsdWRlICJzb2Z0LWludGVyZmFjZS5oIgogI2luY2x1ZGUgInR5cGVzLmgiCiAjaW5jbHVkZSAiaGFzaC5oIgotI2luY2x1ZGUgImNvbXBhdC5oIgogCiBzdHJ1Y3QgaGFzaHRhYmxlX3QgKmhuYV9sb2NhbF9oYXNoOwogc3RhdGljIHN0cnVjdCBoYXNodGFibGVfdCAqaG5hX2dsb2JhbF9oYXNoOwpAQCAtNjIsNyArNjAsNiBAQAogCXN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeTsKIAlzdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSAqaG5hX2dsb2JhbF9lbnRyeTsKIAlzdHJ1Y3QgaGFzaHRhYmxlX3QgKnN3YXBoYXNoOwotCWNoYXIgaG5hX3N0cltFVEhfU1RSX0xFTl07CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZobmFfbG9jYWxfaGFzaF9sb2NrLCBmbGFncyk7CkBAIC03NSwxOSArNzIsMTcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWFkZHJfdG9fc3RyaW5nKGhuYV9zdHIsIGFkZHIpOwotCiAJLyogb25seSBhbm5vdW5jZSBhcyBtYW55IGhvc3RzIGFzIHBvc3NpYmxlIGluIHRoZSBiYXRtYW4tcGFja2V0IGFuZAogCSAgIHNwYWNlIGluIGJhdG1hbl9wYWNrZXQtPm51bV9obmEgVGhhdCBhbHNvIHNob3VsZCBnaXZlIGEgbGltaXQgdG8KIAkgICBNQUMtZmxvb2RpbmcuICovCiAJaWYgKChudW1faG5hICsgMSA+IChFVEhfREFUQV9MRU4gLSBCQVRfUEFDS0VUX0xFTikgLyBFVEhfQUxFTikgfHwKIAkgICAgKG51bV9obmEgKyAxID4gMjU1KSkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfUk9VVEVTLCAiQ2FuJ3QgYWRkIG5ldyBsb2NhbCBobmEgZW50cnkgKCVzKTogbnVtYmVyIG9mIGxvY2FsIGhuYSBlbnRyaWVzIGV4Y2VlZHMgcGFja2V0IHNpemUgXG4iLCBobmFfc3RyKTsKKwkJYmF0X2RiZyhEQkdfUk9VVEVTLCAiQ2FuJ3QgYWRkIG5ldyBsb2NhbCBobmEgZW50cnkgKCVwTSk6IG51bWJlciBvZiBsb2NhbCBobmEgZW50cmllcyBleGNlZWRzIHBhY2tldCBzaXplIFxuIiwgYWRkcik7CiAJCXJldHVybjsKIAl9CiAKLQlkZWJ1Z19sb2coTE9HX1RZUEVfUk9VVEVTLCAiQ3JlYXRpbmcgbmV3IGxvY2FsIGhuYSBlbnRyeTogJXMgXG4iLAotCQkgIGhuYV9zdHIpOworCWJhdF9kYmcoREJHX1JPVVRFUywgIkNyZWF0aW5nIG5ldyBsb2NhbCBobmEgZW50cnk6ICVwTSBcbiIsCisJCWFkZHIpOwogCiAJaG5hX2xvY2FsX2VudHJ5ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhuYV9sb2NhbF9lbnRyeSksIEdGUF9BVE9NSUMpOwogCWlmICghaG5hX2xvY2FsX2VudHJ5KQpAQCAtMTEzLDcgKzEwOCw3IEBACiAJCQkJICAgICAgIGhuYV9sb2NhbF9oYXNoLT5zaXplICogMik7CiAKIAkJaWYgKHN3YXBoYXNoID09IE5VTEwpCi0JCQlkZWJ1Z19sb2coTE9HX1RZUEVfQ1JJVCwgIkNvdWxkbid0IHJlc2l6ZSBsb2NhbCBobmEgaGFzaCB0YWJsZSBcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OkNvdWxkbid0IHJlc2l6ZSBsb2NhbCBobmEgaGFzaCB0YWJsZSBcbiIpOwogCQllbHNlCiAJCQlobmFfbG9jYWxfaGFzaCA9IHN3YXBoYXNoOwogCX0KQEAgLTEzNSwxOCArMTMwLDE4IEBACiBpbnQgaG5hX2xvY2FsX2ZpbGxfYnVmZmVyKHVuc2lnbmVkIGNoYXIgKmJ1ZmYsIGludCBidWZmX2xlbikKIHsKIAlzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5ICpobmFfbG9jYWxfZW50cnk7Ci0Jc3RydWN0IGhhc2hfaXRfdCAqaGFzaGl0ID0gTlVMTDsKKwlIQVNISVQoaGFzaGl0KTsKIAlpbnQgaSA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZobmFfbG9jYWxfaGFzaF9sb2NrLCBmbGFncyk7CiAKLQl3aGlsZSAoTlVMTCAhPSAoaGFzaGl0ID0gaGFzaF9pdGVyYXRlKGhuYV9sb2NhbF9oYXNoLCBoYXNoaXQpKSkgeworCXdoaWxlIChoYXNoX2l0ZXJhdGUoaG5hX2xvY2FsX2hhc2gsICZoYXNoaXQpKSB7CiAKIAkJaWYgKGJ1ZmZfbGVuIDwgKGkgKyAxKSAqIEVUSF9BTEVOKQogCQkJYnJlYWs7CiAKLQkJaG5hX2xvY2FsX2VudHJ5ID0gaGFzaGl0LT5idWNrZXQtPmRhdGE7CisJCWhuYV9sb2NhbF9lbnRyeSA9IGhhc2hpdC5idWNrZXQtPmRhdGE7CiAJCW1lbWNweShidWZmICsgKGkgKiBFVEhfQUxFTiksIGhuYV9sb2NhbF9lbnRyeS0+YWRkciwgRVRIX0FMRU4pOwogCiAJCWkrKzsKQEAgLTE2NCwxOCArMTU5LDE4IEBACiBpbnQgaG5hX2xvY2FsX2ZpbGxfYnVmZmVyX3RleHQodW5zaWduZWQgY2hhciAqYnVmZiwgaW50IGJ1ZmZfbGVuKQogewogCXN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeTsKLQlzdHJ1Y3QgaGFzaF9pdF90ICpoYXNoaXQgPSBOVUxMOworCUhBU0hJVChoYXNoaXQpOwogCWludCBieXRlc193cml0dGVuID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhuYV9sb2NhbF9oYXNoX2xvY2ssIGZsYWdzKTsKIAotCXdoaWxlIChOVUxMICE9IChoYXNoaXQgPSBoYXNoX2l0ZXJhdGUoaG5hX2xvY2FsX2hhc2gsIGhhc2hpdCkpKSB7CisJd2hpbGUgKGhhc2hfaXRlcmF0ZShobmFfbG9jYWxfaGFzaCwgJmhhc2hpdCkpIHsKIAogCQlpZiAoYnVmZl9sZW4gPCBieXRlc193cml0dGVuICsgRVRIX1NUUl9MRU4gKyA0KQogCQkJYnJlYWs7CiAKLQkJaG5hX2xvY2FsX2VudHJ5ID0gaGFzaGl0LT5idWNrZXQtPmRhdGE7CisJCWhuYV9sb2NhbF9lbnRyeSA9IGhhc2hpdC5idWNrZXQtPmRhdGE7CiAKIAkJYnl0ZXNfd3JpdHRlbiArPSBzbnByaW50ZihidWZmICsgYnl0ZXNfd3JpdHRlbiwgRVRIX1NUUl9MRU4gKyA0LAogCQkJCQkgICIgKiAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKQEAgLTIwMiwyNyArMTk3LDM5IEBACiBzdGF0aWMgdm9pZCBobmFfbG9jYWxfZGVsKHN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeSwKIAkJCSAgY2hhciAqbWVzc2FnZSkKIHsKLQljaGFyIGhuYV9zdHJbRVRIX1NUUl9MRU5dOwotCi0JYWRkcl90b19zdHJpbmcoaG5hX3N0ciwgaG5hX2xvY2FsX2VudHJ5LT5hZGRyKTsKLQlkZWJ1Z19sb2coTE9HX1RZUEVfUk9VVEVTLCAiRGVsZXRpbmcgbG9jYWwgaG5hIGVudHJ5ICglcyk6ICVzIFxuIiwKLQkJICBobmFfc3RyLCBtZXNzYWdlKTsKKwliYXRfZGJnKERCR19ST1VURVMsICJEZWxldGluZyBsb2NhbCBobmEgZW50cnkgKCVwTSk6ICVzIFxuIiwKKwkJaG5hX2xvY2FsX2VudHJ5LT5hZGRyLCBtZXNzYWdlKTsKIAogCWhhc2hfcmVtb3ZlKGhuYV9sb2NhbF9oYXNoLCBobmFfbG9jYWxfZW50cnktPmFkZHIpOwogCV9obmFfbG9jYWxfZGVsKGhuYV9sb2NhbF9lbnRyeSk7CiB9CiAKK3ZvaWQgaG5hX2xvY2FsX3JlbW92ZSh1aW50OF90ICphZGRyLCBjaGFyICptZXNzYWdlKQoreworCXN0cnVjdCBobmFfbG9jYWxfZW50cnkgKmhuYV9sb2NhbF9lbnRyeTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhuYV9sb2NhbF9oYXNoX2xvY2ssIGZsYWdzKTsKKworCWhuYV9sb2NhbF9lbnRyeSA9IChzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5ICopCisJCWhhc2hfZmluZChobmFfbG9jYWxfaGFzaCwgYWRkcik7CisJaWYgKGhuYV9sb2NhbF9lbnRyeSkKKwkJaG5hX2xvY2FsX2RlbChobmFfbG9jYWxfZW50cnksIG1lc3NhZ2UpOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG5hX2xvY2FsX2hhc2hfbG9jaywgZmxhZ3MpOworfQorCiB2b2lkIGhuYV9sb2NhbF9wdXJnZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGhuYV9sb2NhbF9lbnRyeSAqaG5hX2xvY2FsX2VudHJ5OwotCXN0cnVjdCBoYXNoX2l0X3QgKmhhc2hpdCA9IE5VTEw7CisJSEFTSElUKGhhc2hpdCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaG5hX2xvY2FsX2hhc2hfbG9jaywgZmxhZ3MpOwogCi0Jd2hpbGUgKE5VTEwgIT0gKGhhc2hpdCA9IGhhc2hfaXRlcmF0ZShobmFfbG9jYWxfaGFzaCwgaGFzaGl0KSkpIHsKLQkJaG5hX2xvY2FsX2VudHJ5ID0gaGFzaGl0LT5idWNrZXQtPmRhdGE7CisJd2hpbGUgKGhhc2hfaXRlcmF0ZShobmFfbG9jYWxfaGFzaCwgJmhhc2hpdCkpIHsKKwkJaG5hX2xvY2FsX2VudHJ5ID0gaGFzaGl0LmJ1Y2tldC0+ZGF0YTsKIAogCQl0aW1lb3V0ID0gaG5hX2xvY2FsX2VudHJ5LT5sYXN0X3NlZW4gKwogCQkJKChMT0NBTF9ITkFfVElNRU9VVCAvIDEwMDApICogSFopOwpAQCAtMjY0LDEzICsyNzEsMTAgQEAKIAlzdHJ1Y3QgaG5hX2dsb2JhbF9lbnRyeSAqaG5hX2dsb2JhbF9lbnRyeTsKIAlzdHJ1Y3QgaG5hX2xvY2FsX2VudHJ5ICpobmFfbG9jYWxfZW50cnk7CiAJc3RydWN0IGhhc2h0YWJsZV90ICpzd2FwaGFzaDsKLQljaGFyIGhuYV9zdHJbRVRIX1NUUl9MRU5dLCBvcmlnX3N0cltFVEhfU1RSX0xFTl07CiAJaW50IGhuYV9idWZmX2NvdW50ID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGNoYXIgKmhuYV9wdHI7CiAKLQlhZGRyX3RvX3N0cmluZyhvcmlnX3N0ciwgb3JpZ19ub2RlLT5vcmlnKTsKLQogCXdoaWxlICgoaG5hX2J1ZmZfY291bnQgKyAxKSAqIEVUSF9BTEVOIDw9IGhuYV9idWZmX2xlbikgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaG5hX2dsb2JhbF9oYXNoX2xvY2ssIGZsYWdzKTsKIApAQCAtMjkwLDggKzI5NCw5IEBACiAKIAkJCW1lbWNweShobmFfZ2xvYmFsX2VudHJ5LT5hZGRyLCBobmFfcHRyLCBFVEhfQUxFTik7CiAKLQkJCWFkZHJfdG9fc3RyaW5nKGhuYV9zdHIsIGhuYV9nbG9iYWxfZW50cnktPmFkZHIpOwotCQkJZGVidWdfbG9nKExPR19UWVBFX1JPVVRFUywgIkNyZWF0aW5nIG5ldyBnbG9iYWwgaG5hIGVudHJ5OiAlcyAodmlhICVzKVxuIiwgaG5hX3N0ciwgb3JpZ19zdHIpOworCQkJYmF0X2RiZyhEQkdfUk9VVEVTLAorCQkJCSJDcmVhdGluZyBuZXcgZ2xvYmFsIGhuYSBlbnRyeTogJXBNICh2aWEgJXBNKVxuIiwKKwkJCQlobmFfZ2xvYmFsX2VudHJ5LT5hZGRyLCBvcmlnX25vZGUtPm9yaWcpOwogCiAJCQlzcGluX2xvY2tfaXJxc2F2ZSgmaG5hX2dsb2JhbF9oYXNoX2xvY2ssIGZsYWdzKTsKIAkJCWhhc2hfYWRkKGhuYV9nbG9iYWxfaGFzaCwgaG5hX2dsb2JhbF9lbnRyeSk7CkBAIC0zMTYsMTQgKzMyMSwxNiBAQAogCQlobmFfYnVmZl9jb3VudCsrOwogCX0KIAotCW9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuID0gaG5hX2J1ZmZfbGVuOworCS8qIGluaXRpYWxpemUsIGFuZCBvdmVyd3JpdGUgaWYgbWFsbG9jIHN1Y2NlZWRzICovCisJb3JpZ19ub2RlLT5obmFfYnVmZiA9IE5VTEw7CisJb3JpZ19ub2RlLT5obmFfYnVmZl9sZW4gPSAwOwogCi0JaWYgKG9yaWdfbm9kZS0+aG5hX2J1ZmZfbGVuID4gMCkgewotCQlvcmlnX25vZGUtPmhuYV9idWZmID0ga21hbGxvYyhvcmlnX25vZGUtPmhuYV9idWZmX2xlbiwKLQkJCQkJICAgICAgR0ZQX0FUT01JQyk7Ci0JCW1lbWNweShvcmlnX25vZGUtPmhuYV9idWZmLCBobmFfYnVmZiwgb3JpZ19ub2RlLT5obmFfYnVmZl9sZW4pOwotCX0gZWxzZSB7Ci0JCW9yaWdfbm9kZS0+aG5hX2J1ZmYgPSBOVUxMOworCWlmIChobmFfYnVmZl9sZW4gPiAwKSB7CisJCW9yaWdfbm9kZS0+aG5hX2J1ZmYgPSBrbWFsbG9jKGhuYV9idWZmX2xlbiwgR0ZQX0FUT01JQyk7CisJCWlmIChvcmlnX25vZGUtPmhuYV9idWZmKSB7CisJCQltZW1jcHkob3JpZ19ub2RlLT5obmFfYnVmZiwgaG5hX2J1ZmYsIGhuYV9idWZmX2xlbik7CisJCQlvcmlnX25vZGUtPmhuYV9idWZmX2xlbiA9IGhuYV9idWZmX2xlbjsKKwkJfQogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZobmFfZ2xvYmFsX2hhc2hfbG9jaywgZmxhZ3MpOwpAQCAtMzMzLDcgKzM0MCw3IEBACiAJCQkJICAgICAgIGhuYV9nbG9iYWxfaGFzaC0+c2l6ZSAqIDIpOwogCiAJCWlmIChzd2FwaGFzaCA9PSBOVUxMKQotCQkJZGVidWdfbG9nKExPR19UWVBFX0NSSVQsICJDb3VsZG4ndCByZXNpemUgZ2xvYmFsIGhuYSBoYXNoIHRhYmxlIFxuIik7CisJCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6Q291bGRuJ3QgcmVzaXplIGdsb2JhbCBobmEgaGFzaCB0YWJsZSBcbiIpOwogCQllbHNlCiAJCQlobmFfZ2xvYmFsX2hhc2ggPSBzd2FwaGFzaDsKIAl9CkBAIC0zNDQsMTcgKzM1MSwxNyBAQAogaW50IGhuYV9nbG9iYWxfZmlsbF9idWZmZXJfdGV4dCh1bnNpZ25lZCBjaGFyICpidWZmLCBpbnQgYnVmZl9sZW4pCiB7CiAJc3RydWN0IGhuYV9nbG9iYWxfZW50cnkgKmhuYV9nbG9iYWxfZW50cnk7Ci0Jc3RydWN0IGhhc2hfaXRfdCAqaGFzaGl0ID0gTlVMTDsKKwlIQVNISVQoaGFzaGl0KTsKIAlpbnQgYnl0ZXNfd3JpdHRlbiA9IDA7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZobmFfZ2xvYmFsX2hhc2hfbG9jaywgZmxhZ3MpOwogCi0Jd2hpbGUgKE5VTEwgIT0gKGhhc2hpdCA9IGhhc2hfaXRlcmF0ZShobmFfZ2xvYmFsX2hhc2gsIGhhc2hpdCkpKSB7CisJd2hpbGUgKGhhc2hfaXRlcmF0ZShobmFfZ2xvYmFsX2hhc2gsICZoYXNoaXQpKSB7CiAJCWlmIChidWZmX2xlbiA8IGJ5dGVzX3dyaXR0ZW4gKyAoMiAqIEVUSF9TVFJfTEVOKSArIDEwKQogCQkJYnJlYWs7CiAKLQkJaG5hX2dsb2JhbF9lbnRyeSA9IGhhc2hpdC0+YnVja2V0LT5kYXRhOworCQlobmFfZ2xvYmFsX2VudHJ5ID0gaGFzaGl0LmJ1Y2tldC0+ZGF0YTsKIAogCQlieXRlc193cml0dGVuICs9IHNucHJpbnRmKGJ1ZmYgKyBieXRlc193cml0dGVuLAogCQkJCQkgICgyICogRVRIX1NUUl9MRU4pICsgMTAsCkBAIC0zODEsMTIgKzM4OCw5IEBACiB2b2lkIF9obmFfZ2xvYmFsX2RlbF9vcmlnKHN0cnVjdCBobmFfZ2xvYmFsX2VudHJ5ICpobmFfZ2xvYmFsX2VudHJ5LAogCQkJICBjaGFyICptZXNzYWdlKQogewotCWNoYXIgaG5hX3N0cltFVEhfU1RSX0xFTl0sIG9yaWdfc3RyW0VUSF9TVFJfTEVOXTsKLQotCWFkZHJfdG9fc3RyaW5nKG9yaWdfc3RyLCBobmFfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGUtPm9yaWcpOwotCWFkZHJfdG9fc3RyaW5nKGhuYV9zdHIsIGhuYV9nbG9iYWxfZW50cnktPmFkZHIpOwotCi0JZGVidWdfbG9nKExPR19UWVBFX1JPVVRFUywgIkRlbGV0aW5nIGdsb2JhbCBobmEgZW50cnkgJXMgKHZpYSAlcyk6ICVzIFxuIiwgaG5hX3N0ciwgb3JpZ19zdHIsIG1lc3NhZ2UpOworCWJhdF9kYmcoREJHX1JPVVRFUywgIkRlbGV0aW5nIGdsb2JhbCBobmEgZW50cnkgJXBNICh2aWEgJXBNKTogJXMgXG4iLAorCQlobmFfZ2xvYmFsX2VudHJ5LT5hZGRyLCBobmFfZ2xvYmFsX2VudHJ5LT5vcmlnX25vZGUtPm9yaWcsCisJCW1lc3NhZ2UpOwogCiAJaGFzaF9yZW1vdmUoaG5hX2dsb2JhbF9oYXNoLCBobmFfZ2xvYmFsX2VudHJ5LT5hZGRyKTsKIAlrZnJlZShobmFfZ2xvYmFsX2VudHJ5KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmggYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi90cmFuc2xhdGlvbi10YWJsZS5oCmluZGV4IGY3ZGE4MTEuLjI4MTEyNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3RyYW5zbGF0aW9uLXRhYmxlLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdHJhbnNsYXRpb24tdGFibGUuaApAQCAtMjMsNiArMjMsNyBAQAogCiBpbnQgaG5hX2xvY2FsX2luaXQodm9pZCk7CiB2b2lkIGhuYV9sb2NhbF9hZGQodWludDhfdCAqYWRkcik7Cit2b2lkIGhuYV9sb2NhbF9yZW1vdmUodWludDhfdCAqYWRkciwgY2hhciAqbWVzc2FnZSk7CiBpbnQgaG5hX2xvY2FsX2ZpbGxfYnVmZmVyKHVuc2lnbmVkIGNoYXIgKmJ1ZmYsIGludCBidWZmX2xlbik7CiBpbnQgaG5hX2xvY2FsX2ZpbGxfYnVmZmVyX3RleHQodW5zaWduZWQgY2hhciAqYnVmZiwgaW50IGJ1ZmZfbGVuKTsKIHZvaWQgaG5hX2xvY2FsX3B1cmdlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi90eXBlcy5oIGIvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdHlwZXMuaAppbmRleCAzYTBlZjBjLi5kZWMxYjU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi90eXBlcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3R5cGVzLmgKQEAgLTM5LDcgKzM5LDYgQEAKIAljaGFyIGlmX2FjdGl2ZTsKIAljaGFyIGFkZHJfc3RyW0VUSF9TVFJfTEVOXTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldjsKLQlzdHJ1Y3Qgc29ja2V0ICpyYXdfc29jazsKIAlhdG9taWNfdCBzZXFubzsKIAl1bnNpZ25lZCBjaGFyICpwYWNrZXRfYnVmZjsKIAlpbnQgcGFja2V0X2xlbjsKQEAgLTc1LDcgKzc0LDcgQEAKIAl1aW50OF90IHRxX2luZGV4OwogCXVpbnQ4X3QgdHFfYXZnOwogCXVpbnQ4X3QgbGFzdF90dGw7Ci0JdW5zaWduZWQgbG9uZyBsYXN0X3ZhbGlkOyAgICAgICAgICAgIC8qIHdoZW4gbGFzdCBwYWNrZXQgdmlhIHRoaXMgbmVpZ2hib3VyIHdhcyByZWNlaXZlZCAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF92YWxpZDsgICAgICAgICAgICAvKiB3aGVuIGxhc3QgcGFja2V0IHZpYSB0aGlzIG5laWdoYm9yIHdhcyByZWNlaXZlZCAqLwogCVRZUEVfT0ZfV09SRCByZWFsX2JpdHNbTlVNX1dPUkRTXTsKIAlzdHJ1Y3Qgb3JpZ19ub2RlICpvcmlnX25vZGU7CiAJc3RydWN0IGJhdG1hbl9pZiAqaWZfaW5jb21pbmc7CkBAIC0xMTMsNiArMTEyLDcgQEAKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBsaXN0OwogCXVuc2lnbmVkIGxvbmcgc2VuZF90aW1lOwogCXVpbnQ4X3Qgb3duOworCXN0cnVjdCBza19idWZmICpza2I7CiAJdW5zaWduZWQgY2hhciAqcGFja2V0X2J1ZmY7CiAJdWludDE2X3QgcGFja2V0X2xlbjsKIAl1aW50MzJfdCBkaXJlY3RfbGlua19mbGFnczsKQEAgLTEyMSw0ICsxMjEsMTQgQEAKIAlzdHJ1Y3QgYmF0bWFuX2lmICppZl9pbmNvbWluZzsKIH07CiAKKy8qIFdoaWxlIHNjYW5uaW5nIGZvciB2aXMtZW50cmllcyBvZiBhIHBhcnRpY3VsYXIgdmlzLW9yaWdpbmF0b3IKKyAqIHRoaXMgbGlzdCBjb2xsZWN0cyBpdHMgaW50ZXJmYWNlcyB0byBjcmVhdGUgYSBzdWJncmFwaC9jbHVzdGVyCisgKiBvdXQgb2YgdGhlbSBsYXRlcgorICovCitzdHJ1Y3QgaWZfbGlzdF9lbnRyeSB7CisJdWludDhfdCBhZGRyW0VUSF9BTEVOXTsKKwlib29sIHByaW1hcnk7CisJc3RydWN0IGhsaXN0X25vZGUgbGlzdDsKK307CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2JhdG1hbi1hZHYvdmlzLmMgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi92aXMuYwppbmRleCBmNmM5YWNiLi5mZWRlYzFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi92aXMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi92aXMuYwpAQCAtMjMsMTEgKzIzLDkgQEAKICNpbmNsdWRlICJzZW5kLmgiCiAjaW5jbHVkZSAidHJhbnNsYXRpb24tdGFibGUuaCIKICNpbmNsdWRlICJ2aXMuaCIKLSNpbmNsdWRlICJsb2cuaCIKICNpbmNsdWRlICJzb2Z0LWludGVyZmFjZS5oIgogI2luY2x1ZGUgImhhcmQtaW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiaGFzaC5oIgotI2luY2x1ZGUgImNvbXBhdC5oIgogCiBzdHJ1Y3QgaGFzaHRhYmxlX3QgKnZpc19oYXNoOwogREVGSU5FX1NQSU5MT0NLKHZpc19oYXNoX2xvY2spOwpAQCAtNTAsMzkgKzQ4LDYgQEAKIAlrZnJlZShpbmZvKTsKIH0KIAotLyogc2V0IHRoZSBtb2RlIG9mIHRoZSB2aXN1YWxpemF0aW9uIHRvIGNsaWVudCBvciBzZXJ2ZXIgKi8KLXZvaWQgdmlzX3NldF9tb2RlKGludCBtb2RlKQotewotCXNwaW5fbG9jaygmdmlzX2hhc2hfbG9jayk7Ci0KLQlpZiAobXlfdmlzX2luZm8gIT0gTlVMTCkKLQkJbXlfdmlzX2luZm8tPnBhY2tldC52aXNfdHlwZSA9IG1vZGU7Ci0KLQlzcGluX3VubG9jaygmdmlzX2hhc2hfbG9jayk7Ci19Ci0KLS8qIGlzX3Zpc19zZXJ2ZXIoKSwgbG9ja2VkIG91dHNpZGUgKi8KLXN0YXRpYyBpbnQgaXNfdmlzX3NlcnZlcl9sb2NrZWQodm9pZCkKLXsKLQlpZiAobXlfdmlzX2luZm8gIT0gTlVMTCkKLQkJaWYgKG15X3Zpc19pbmZvLT5wYWNrZXQudmlzX3R5cGUgPT0gVklTX1RZUEVfU0VSVkVSX1NZTkMpCi0JCQlyZXR1cm4gMTsKLQotCXJldHVybiAwOwotfQotCi0vKiBnZXQgdGhlIGN1cnJlbnQgc2V0IG1vZGUgKi8KLWludCBpc192aXNfc2VydmVyKHZvaWQpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQlzcGluX2xvY2soJnZpc19oYXNoX2xvY2spOwotCXJldCA9IGlzX3Zpc19zZXJ2ZXJfbG9ja2VkKCk7Ci0Jc3Bpbl91bmxvY2soJnZpc19oYXNoX2xvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLQogLyogQ29tcGFyZSB0d28gdmlzIHBhY2tldHMsIHVzZWQgYnkgdGhlIGhhc2hpbmcgYWxnb3JpdGhtICovCiBzdGF0aWMgaW50IHZpc19pbmZvX2NtcCh2b2lkICpkYXRhMSwgdm9pZCAqZGF0YTIpCiB7CkBAIC0xMTUsNiArODAsNjggQEAKIAlyZXR1cm4gaGFzaCAlIHNpemU7CiB9CiAKKy8qIGluc2VydCBpbnRlcmZhY2UgdG8gdGhlIGxpc3Qgb2YgaW50ZXJmYWNlcyBvZiBvbmUgb3JpZ2luYXRvciwgaWYgaXQKKyAqIGRvZXMgbm90IGFscmVhZHkgZXhpc3QgaW4gdGhlIGxpc3QgKi8KK3N0YXRpYyB2b2lkIHByb2NfdmlzX2luc2VydF9pbnRlcmZhY2UoY29uc3QgdWludDhfdCAqaW50ZXJmYWNlLAorCQkJCSAgICAgIHN0cnVjdCBobGlzdF9oZWFkICppZl9saXN0LAorCQkJCSAgICAgIGJvb2wgcHJpbWFyeSkKK3sKKwlzdHJ1Y3QgaWZfbGlzdF9lbnRyeSAqZW50cnk7CisJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBwb3MsIGlmX2xpc3QsIGxpc3QpIHsKKwkJaWYgKGNvbXBhcmVfb3JpZyhlbnRyeS0+YWRkciwgKHZvaWQgKilpbnRlcmZhY2UpKQorCQkJcmV0dXJuOworCX0KKworCS8qIGl0cyBhIG5ldyBhZGRyZXNzLCBhZGQgaXQgdG8gdGhlIGxpc3QgKi8KKwllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCWlmICghZW50cnkpCisJCXJldHVybjsKKwltZW1jcHkoZW50cnktPmFkZHIsIGludGVyZmFjZSwgRVRIX0FMRU4pOworCWVudHJ5LT5wcmltYXJ5ID0gcHJpbWFyeTsKKwlobGlzdF9hZGRfaGVhZCgmZW50cnktPmxpc3QsIGlmX2xpc3QpOworfQorCit2b2lkIHByb2NfdmlzX3JlYWRfcHJpbV9zZWMoc3RydWN0IHNlcV9maWxlICpzZXEsCisJCQkgICAgc3RydWN0IGhsaXN0X2hlYWQgKmlmX2xpc3QpCit7CisJc3RydWN0IGlmX2xpc3RfZW50cnkgKmVudHJ5OworCXN0cnVjdCBobGlzdF9ub2RlICpwb3MsICpuOworCWNoYXIgdG1wX2FkZHJfc3RyW0VUSF9TVFJfTEVOXTsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIHBvcywgbiwgaWZfbGlzdCwgbGlzdCkgeworCQlpZiAoZW50cnktPnByaW1hcnkpIHsKKwkJCXNlcV9wcmludGYoc2VxLCAiUFJJTUFSWSwgIik7CisJCX0gZWxzZSB7CisJCQlhZGRyX3RvX3N0cmluZyh0bXBfYWRkcl9zdHIsIGVudHJ5LT5hZGRyKTsKKwkJCXNlcV9wcmludGYoc2VxLCAiU0VDICVzLCAiLCB0bXBfYWRkcl9zdHIpOworCQl9CisKKwkJaGxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7CisJCWtmcmVlKGVudHJ5KTsKKwl9Cit9CisKKy8qIHJlYWQgYW4gZW50cnkgICovCit2b2lkIHByb2NfdmlzX3JlYWRfZW50cnkoc3RydWN0IHNlcV9maWxlICpzZXEsCisJCQkJc3RydWN0IHZpc19pbmZvX2VudHJ5ICplbnRyeSwKKwkJCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaWZfbGlzdCwKKwkJCQl1aW50OF90ICp2aXNfb3JpZykKK3sKKwljaGFyIHRvWzQwXTsKKworCWFkZHJfdG9fc3RyaW5nKHRvLCBlbnRyeS0+ZGVzdCk7CisJaWYgKGVudHJ5LT5xdWFsaXR5ID09IDApIHsKKwkJcHJvY192aXNfaW5zZXJ0X2ludGVyZmFjZSh2aXNfb3JpZywgaWZfbGlzdCwgdHJ1ZSk7CisJCXNlcV9wcmludGYoc2VxLCAiSE5BICVzLCAiLCB0byk7CisJfSBlbHNlIHsKKwkJcHJvY192aXNfaW5zZXJ0X2ludGVyZmFjZShlbnRyeS0+c3JjLCBpZl9saXN0LAorCQkJCQkgIGNvbXBhcmVfb3JpZyhlbnRyeS0+c3JjLCB2aXNfb3JpZykpOworCQlzZXFfcHJpbnRmKHNlcSwgIlRRICVzICVkLCAiLCB0bywgZW50cnktPnF1YWxpdHkpOworCX0KK30KKwogLyogdHJpZXMgdG8gYWRkIG9uZSBlbnRyeSB0byB0aGUgcmVjZWl2ZSBsaXN0LiAqLwogc3RhdGljIHZvaWQgcmVjdl9saXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpyZWN2X2xpc3QsIGNoYXIgKm1hYykKIHsKQEAgLTIwOCwyMSArMjM1LDIzIEBACiB7CiAJc3RydWN0IHZpc19pbmZvICppbmZvOwogCWludCBpc19uZXc7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgdmlzX3NlcnZlciA9IGF0b21pY19yZWFkKCZ2aXNfbW9kZSk7CiAKLQlzcGluX2xvY2soJnZpc19oYXNoX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZ2aXNfaGFzaF9sb2NrLCBmbGFncyk7CiAJaW5mbyA9IGFkZF9wYWNrZXQodmlzX3BhY2tldCwgdmlzX2luZm9fbGVuLCAmaXNfbmV3KTsKIAlpZiAoaW5mbyA9PSBOVUxMKQogCQlnb3RvIGVuZDsKIAogCS8qIG9ubHkgaWYgd2UgYXJlIHNlcnZlciBvdXJzZWx2ZXMgYW5kIHBhY2tldCBpcyBuZXdlciB0aGFuIHRoZSBvbmUgaW4KIAkgKiBoYXNoLiovCi0JaWYgKGlzX3Zpc19zZXJ2ZXJfbG9ja2VkKCkgJiYgaXNfbmV3KSB7CisJaWYgKHZpc19zZXJ2ZXIgPT0gVklTX1RZUEVfU0VSVkVSX1NZTkMgJiYgaXNfbmV3KSB7CiAJCW1lbWNweShpbmZvLT5wYWNrZXQudGFyZ2V0X29yaWcsIGJyb2FkY2FzdEFkZHIsIEVUSF9BTEVOKTsKIAkJaWYgKGxpc3RfZW1wdHkoJmluZm8tPnNlbmRfbGlzdCkpCiAJCQlsaXN0X2FkZF90YWlsKCZpbmZvLT5zZW5kX2xpc3QsICZzZW5kX2xpc3QpOwogCX0KIGVuZDoKLQlzcGluX3VubG9jaygmdmlzX2hhc2hfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlzX2hhc2hfbG9jaywgZmxhZ3MpOwogfQogCiAvKiBoYW5kbGUgYW4gaW5jb21pbmcgY2xpZW50IHVwZGF0ZSBwYWNrZXQgYW5kIHNjaGVkdWxlIGZvcndhcmQgaWYgbmVlZGVkLiAqLwpAQCAtMjMxLDEyICsyNjAsMTQgQEAKIHsKIAlzdHJ1Y3QgdmlzX2luZm8gKmluZm87CiAJaW50IGlzX25ldzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCB2aXNfc2VydmVyID0gYXRvbWljX3JlYWQoJnZpc19tb2RlKTsKIAogCS8qIGNsaWVudHMgc2hhbGwgbm90IGJyb2FkY2FzdC4gKi8KIAlpZiAoaXNfYmNhc3QodmlzX3BhY2tldC0+dGFyZ2V0X29yaWcpKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2soJnZpc19oYXNoX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZ2aXNfaGFzaF9sb2NrLCBmbGFncyk7CiAJaW5mbyA9IGFkZF9wYWNrZXQodmlzX3BhY2tldCwgdmlzX2luZm9fbGVuLCAmaXNfbmV3KTsKIAlpZiAoaW5mbyA9PSBOVUxMKQogCQlnb3RvIGVuZDsKQEAgLTI0NCw3ICsyNzUsNyBAQAogCiAKIAkvKiBzZW5kIG9ubHkgaWYgd2UncmUgdGhlIHRhcmdldCBzZXJ2ZXIgb3IgLi4uICovCi0JaWYgKGlzX3Zpc19zZXJ2ZXJfbG9ja2VkKCkgJiYKKwlpZiAodmlzX3NlcnZlciA9PSBWSVNfVFlQRV9TRVJWRVJfU1lOQyAgJiYKIAkgICAgaXNfbXlfbWFjKGluZm8tPnBhY2tldC50YXJnZXRfb3JpZykgJiYKIAkgICAgaXNfbmV3KSB7CiAJCWluZm8tPnBhY2tldC52aXNfdHlwZSA9IFZJU19UWVBFX1NFUlZFUl9TWU5DOwkvKiB1cGdyYWRlISAqLwpAQCAtMjU4LDcgKzI4OSw3IEBACiAJCQlsaXN0X2FkZF90YWlsKCZpbmZvLT5zZW5kX2xpc3QsICZzZW5kX2xpc3QpOwogCX0KIGVuZDoKLQlzcGluX3VubG9jaygmdmlzX2hhc2hfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlzX2hhc2hfbG9jaywgZmxhZ3MpOwogfQogCiAvKiBXYWxrIHRoZSBvcmlnaW5hdG9ycyBhbmQgZmluZCB0aGUgVklTIHNlcnZlciB3aXRoIHRoZSBiZXN0IHRxLiBTZXQgdGhlIHBhY2tldApAQCAtMjY3LDEyICsyOTgsMTIgQEAKICAqIE11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG9yaWdpbmF0b3IgaGFzaCBsb2NrZWQgKi8KIHN0YXRpYyBpbnQgZmluZF9iZXN0X3Zpc19zZXJ2ZXIoc3RydWN0IHZpc19pbmZvICppbmZvKQogewotCXN0cnVjdCBoYXNoX2l0X3QgKmhhc2hpdCA9IE5VTEw7CisJSEFTSElUKGhhc2hpdCk7CiAJc3RydWN0IG9yaWdfbm9kZSAqb3JpZ19ub2RlOwogCWludCBiZXN0X3RxID0gLTE7CiAKLQl3aGlsZSAoTlVMTCAhPSAoaGFzaGl0ID0gaGFzaF9pdGVyYXRlKG9yaWdfaGFzaCwgaGFzaGl0KSkpIHsKLQkJb3JpZ19ub2RlID0gaGFzaGl0LT5idWNrZXQtPmRhdGE7CisJd2hpbGUgKGhhc2hfaXRlcmF0ZShvcmlnX2hhc2gsICZoYXNoaXQpKSB7CisJCW9yaWdfbm9kZSA9IGhhc2hpdC5idWNrZXQtPmRhdGE7CiAJCWlmICgob3JpZ19ub2RlICE9IE5VTEwpICYmCiAJCSAgICAob3JpZ19ub2RlLT5yb3V0ZXIgIT0gTlVMTCkgJiYKIAkJICAgIChvcmlnX25vZGUtPmZsYWdzICYgVklTX1NFUlZFUikgJiYKQEAgLTI5OCw3ICszMjksOCBAQAogICogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC0xIGlmIG5vIHBhY2tldCBjb3VsZCBiZSBnZW5lcmF0ZWQgKi8KIHN0YXRpYyBpbnQgZ2VuZXJhdGVfdmlzX3BhY2tldCh2b2lkKQogewotCXN0cnVjdCBoYXNoX2l0X3QgKmhhc2hpdCA9IE5VTEw7CisJSEFTSElUKGhhc2hpdF9sb2NhbCk7CisJSEFTSElUKGhhc2hpdF9nbG9iYWwpOwogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKIAlzdHJ1Y3QgdmlzX2luZm8gKmluZm8gPSAoc3RydWN0IHZpc19pbmZvICopbXlfdmlzX2luZm87CiAJc3RydWN0IHZpc19pbmZvX2VudHJ5ICplbnRyeSwgKmVudHJ5X2FycmF5OwpAQCAtMzA3LDI3ICszMzksMjcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaW5mby0+Zmlyc3Rfc2VlbiA9IGppZmZpZXM7CisJaW5mby0+cGFja2V0LnZpc190eXBlID0gYXRvbWljX3JlYWQoJnZpc19tb2RlKTsKIAotCXNwaW5fbG9jaygmb3JpZ19oYXNoX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwogCW1lbWNweShpbmZvLT5wYWNrZXQudGFyZ2V0X29yaWcsIGJyb2FkY2FzdEFkZHIsIEVUSF9BTEVOKTsKIAlpbmZvLT5wYWNrZXQudHRsID0gVFRMOwogCWluZm8tPnBhY2tldC5zZXFubysrOwogCWluZm8tPnBhY2tldC5lbnRyaWVzID0gMDsKIAotCWlmICghaXNfdmlzX3NlcnZlcl9sb2NrZWQoKSkgeworCWlmIChpbmZvLT5wYWNrZXQudmlzX3R5cGUgPT0gVklTX1RZUEVfQ0xJRU5UX1VQREFURSkgewogCQliZXN0X3RxID0gZmluZF9iZXN0X3Zpc19zZXJ2ZXIoaW5mbyk7CiAJCWlmIChiZXN0X3RxIDwgMCkgewotCQkJc3Bpbl91bmxvY2soJm9yaWdfaGFzaF9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAl9Ci0JaGFzaGl0ID0gTlVMTDsKIAogCWVudHJ5X2FycmF5ID0gKHN0cnVjdCB2aXNfaW5mb19lbnRyeSAqKQogCQkoKGNoYXIgKilpbmZvICsgc2l6ZW9mKHN0cnVjdCB2aXNfaW5mbykpOwogCi0Jd2hpbGUgKE5VTEwgIT0gKGhhc2hpdCA9IGhhc2hfaXRlcmF0ZShvcmlnX2hhc2gsIGhhc2hpdCkpKSB7Ci0JCW9yaWdfbm9kZSA9IGhhc2hpdC0+YnVja2V0LT5kYXRhOworCXdoaWxlIChoYXNoX2l0ZXJhdGUob3JpZ19oYXNoLCAmaGFzaGl0X2dsb2JhbCkpIHsKKwkJb3JpZ19ub2RlID0gaGFzaGl0X2dsb2JhbC5idWNrZXQtPmRhdGE7CiAJCWlmIChvcmlnX25vZGUtPnJvdXRlciAhPSBOVUxMCiAJCQkmJiBjb21wYXJlX29yaWcob3JpZ19ub2RlLT5yb3V0ZXItPmFkZHIsIG9yaWdfbm9kZS0+b3JpZykKIAkJCSYmIG9yaWdfbm9kZS0+YmF0bWFuX2lmCkBAIC0zNDIsMTggKzM3NCwxNyBAQAogCQkJaW5mby0+cGFja2V0LmVudHJpZXMrKzsKIAogCQkJaWYgKHZpc19wYWNrZXRfZnVsbChpbmZvKSkgewotCQkJCXNwaW5fdW5sb2NrKCZvcmlnX2hhc2hfbG9jayk7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJfQogCX0KIAotCXNwaW5fdW5sb2NrKCZvcmlnX2hhc2hfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3JpZ19oYXNoX2xvY2ssIGZsYWdzKTsKIAotCWhhc2hpdCA9IE5VTEw7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmhuYV9sb2NhbF9oYXNoX2xvY2ssIGZsYWdzKTsKLQl3aGlsZSAoTlVMTCAhPSAoaGFzaGl0ID0gaGFzaF9pdGVyYXRlKGhuYV9sb2NhbF9oYXNoLCBoYXNoaXQpKSkgewotCQlobmFfbG9jYWxfZW50cnkgPSBoYXNoaXQtPmJ1Y2tldC0+ZGF0YTsKKwl3aGlsZSAoaGFzaF9pdGVyYXRlKGhuYV9sb2NhbF9oYXNoLCAmaGFzaGl0X2xvY2FsKSkgeworCQlobmFfbG9jYWxfZW50cnkgPSBoYXNoaXRfbG9jYWwuYnVja2V0LT5kYXRhOwogCQllbnRyeSA9ICZlbnRyeV9hcnJheVtpbmZvLT5wYWNrZXQuZW50cmllc107CiAJCW1lbXNldChlbnRyeS0+c3JjLCAwLCBFVEhfQUxFTik7CiAJCW1lbWNweShlbnRyeS0+ZGVzdCwgaG5hX2xvY2FsX2VudHJ5LT5hZGRyLCBFVEhfQUxFTik7CkBAIC0zNzEsMTYgKzQwMiwxNiBAQAogCiBzdGF0aWMgdm9pZCBwdXJnZV92aXNfcGFja2V0cyh2b2lkKQogewotCXN0cnVjdCBoYXNoX2l0X3QgKmhhc2hpdCA9IE5VTEw7CisJSEFTSElUKGhhc2hpdCk7CiAJc3RydWN0IHZpc19pbmZvICppbmZvOwogCi0Jd2hpbGUgKE5VTEwgIT0gKGhhc2hpdCA9IGhhc2hfaXRlcmF0ZSh2aXNfaGFzaCwgaGFzaGl0KSkpIHsKLQkJaW5mbyA9IGhhc2hpdC0+YnVja2V0LT5kYXRhOworCXdoaWxlIChoYXNoX2l0ZXJhdGUodmlzX2hhc2gsICZoYXNoaXQpKSB7CisJCWluZm8gPSBoYXNoaXQuYnVja2V0LT5kYXRhOwogCQlpZiAoaW5mbyA9PSBteV92aXNfaW5mbykJLyogbmV2ZXIgcHVyZ2Ugb3duIGRhdGEuICovCiAJCQljb250aW51ZTsKIAkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywKLQkJCSAgICAgICBpbmZvLT5maXJzdF9zZWVuICsgKFZJU19USU1FT1VULzEwMDApKkhaKSkgewotCQkJaGFzaF9yZW1vdmVfYnVja2V0KHZpc19oYXNoLCBoYXNoaXQpOworCQkJICAgICAgIGluZm8tPmZpcnN0X3NlZW4gKyAoVklTX1RJTUVPVVQqSFopLzEwMDApKSB7CisJCQloYXNoX3JlbW92ZV9idWNrZXQodmlzX2hhc2gsICZoYXNoaXQpOwogCQkJZnJlZV9pbmZvKGluZm8pOwogCQl9CiAJfQpAQCAtMzg4LDE0ICs0MTksMTUgQEAKIAogc3RhdGljIHZvaWQgYnJvYWRjYXN0X3Zpc19wYWNrZXQoc3RydWN0IHZpc19pbmZvICppbmZvLCBpbnQgcGFja2V0X2xlbmd0aCkKIHsKLQlzdHJ1Y3QgaGFzaF9pdF90ICpoYXNoaXQgPSBOVUxMOworCUhBU0hJVChoYXNoaXQpOwogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZvcmlnX2hhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiAKIAkvKiBzZW5kIHRvIGFsbCByb3V0ZXJzIGluIHJhbmdlLiAqLwotCXdoaWxlIChOVUxMICE9IChoYXNoaXQgPSBoYXNoX2l0ZXJhdGUob3JpZ19oYXNoLCBoYXNoaXQpKSkgewotCQlvcmlnX25vZGUgPSBoYXNoaXQtPmJ1Y2tldC0+ZGF0YTsKKwl3aGlsZSAoaGFzaF9pdGVyYXRlKG9yaWdfaGFzaCwgJmhhc2hpdCkpIHsKKwkJb3JpZ19ub2RlID0gaGFzaGl0LmJ1Y2tldC0+ZGF0YTsKIAogCQkvKiBpZiBpdCdzIGEgdmlzIHNlcnZlciBhbmQgcmVhY2hhYmxlLCBzZW5kIGl0LiAqLwogCQlpZiAob3JpZ19ub2RlICYmCkBAIC00MTgsMTQgKzQ1MCwxNSBAQAogCQl9CiAJfQogCW1lbWNweShpbmZvLT5wYWNrZXQudGFyZ2V0X29yaWcsIGJyb2FkY2FzdEFkZHIsIEVUSF9BTEVOKTsKLQlzcGluX3VubG9jaygmb3JpZ19oYXNoX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHVuaWNhc3RfdmlzX3BhY2tldChzdHJ1Y3QgdmlzX2luZm8gKmluZm8sIGludCBwYWNrZXRfbGVuZ3RoKQogewogCXN0cnVjdCBvcmlnX25vZGUgKm9yaWdfbm9kZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZvcmlnX2hhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJm9yaWdfaGFzaF9sb2NrLCBmbGFncyk7CiAJb3JpZ19ub2RlID0gKChzdHJ1Y3Qgb3JpZ19ub2RlICopCiAJCSAgICAgaGFzaF9maW5kKG9yaWdfaGFzaCwgaW5mby0+cGFja2V0LnRhcmdldF9vcmlnKSk7CiAKQEAgLTQzNiw3ICs0NjksNyBAQAogCQkJCW9yaWdfbm9kZS0+YmF0bWFuX2lmLAogCQkJCW9yaWdfbm9kZS0+cm91dGVyLT5hZGRyKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJm9yaWdfaGFzaF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZvcmlnX2hhc2hfbG9jaywgZmxhZ3MpOwogfQogCiAvKiBvbmx5IHNlbmQgb25lIHZpcyBwYWNrZXQuIGNhbGxlZCBmcm9tIHNlbmRfdmlzX3BhY2tldHMoKSAqLwpAQCAtNDQ1LDggKzQ3OCw3IEBACiAJaW50IHBhY2tldF9sZW5ndGg7CiAKIAlpZiAoaW5mby0+cGFja2V0LnR0bCA8IDIpIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX05PVElDRSwKLQkJCSAgIkVycm9yIC0gY2FuJ3Qgc2VuZCB2aXMgcGFja2V0OiB0dGwgZXhjZWVkZWRcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJiYXRtYW4tYWR2OiBFcnJvciAtIGNhbid0IHNlbmQgdmlzIHBhY2tldDogdHRsIGV4Y2VlZGVkXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNDY3LDggKzQ5OSw5IEBACiBzdGF0aWMgdm9pZCBzZW5kX3Zpc19wYWNrZXRzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKIAlzdHJ1Y3QgdmlzX2luZm8gKmluZm8sICp0ZW1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJnZpc19oYXNoX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZ2aXNfaGFzaF9sb2NrLCBmbGFncyk7CiAJcHVyZ2VfdmlzX3BhY2tldHMoKTsKIAogCWlmIChnZW5lcmF0ZV92aXNfcGFja2V0KCkgPT0gMCkKQEAgLTQ3OSw3ICs1MTIsNyBAQAogCQlsaXN0X2RlbF9pbml0KCZpbmZvLT5zZW5kX2xpc3QpOwogCQlzZW5kX3Zpc19wYWNrZXQoaW5mbyk7CiAJfQotCXNwaW5fdW5sb2NrKCZ2aXNfaGFzaF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aXNfaGFzaF9sb2NrLCBmbGFncyk7CiAJc3RhcnRfdmlzX3RpbWVyKCk7CiB9CiBzdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksodmlzX3RpbWVyX3dxLCBzZW5kX3Zpc19wYWNrZXRzKTsKQEAgLTQ4OCwyMCArNTIxLDIxIEBACiAgKiBpbml0aWFsaXplZCAoZS5nLiBiYXQwIGlzIGluaXRpYWxpemVkLCBpbnRlcmZhY2VzIGhhdmUgYmVlbiBhZGRlZCkgKi8KIGludCB2aXNfaW5pdCh2b2lkKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaWYgKHZpc19oYXNoKQogCQlyZXR1cm4gMTsKIAotCXNwaW5fbG9jaygmdmlzX2hhc2hfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnZpc19oYXNoX2xvY2ssIGZsYWdzKTsKIAogCXZpc19oYXNoID0gaGFzaF9uZXcoMjU2LCB2aXNfaW5mb19jbXAsIHZpc19pbmZvX2Nob29zZSk7CiAJaWYgKCF2aXNfaGFzaCkgewotCQlkZWJ1Z19sb2coTE9HX1RZUEVfQ1JJVCwgIkNhbid0IGluaXRpYWxpemUgdmlzX2hhc2hcbiIpOworCQlwcmludGsoS0VSTl9FUlIgImJhdG1hbi1hZHY6Q2FuJ3QgaW5pdGlhbGl6ZSB2aXNfaGFzaFxuIik7CiAJCWdvdG8gZXJyOwogCX0KIAogCW15X3Zpc19pbmZvID0ga21hbGxvYygxMDAwLCBHRlBfQVRPTUlDKTsKIAlpZiAoIW15X3Zpc19pbmZvKSB7Ci0JCWRlYnVnX2xvZyhMT0dfVFlQRV9DUklULCAiQ2FuJ3QgaW5pdGlhbGl6ZSB2aXMgcGFja2V0XG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJiYXRtYW4tYWR2OkNhbid0IGluaXRpYWxpemUgdmlzIHBhY2tldFxuIik7CiAJCWdvdG8gZXJyOwogCX0KIApAQCAtNTExLDcgKzU0NSw2IEBACiAJSU5JVF9MSVNUX0hFQUQoJm15X3Zpc19pbmZvLT5zZW5kX2xpc3QpOwogCW15X3Zpc19pbmZvLT5wYWNrZXQudmVyc2lvbiA9IENPTVBBVF9WRVJTSU9OOwogCW15X3Zpc19pbmZvLT5wYWNrZXQucGFja2V0X3R5cGUgPSBCQVRfVklTOwotCW15X3Zpc19pbmZvLT5wYWNrZXQudmlzX3R5cGUgPSBWSVNfVFlQRV9DTElFTlRfVVBEQVRFOwogCW15X3Zpc19pbmZvLT5wYWNrZXQudHRsID0gVFRMOwogCW15X3Zpc19pbmZvLT5wYWNrZXQuc2Vxbm8gPSAwOwogCW15X3Zpc19pbmZvLT5wYWNrZXQuZW50cmllcyA9IDA7CkBAIC01MjIsMTkgKzU1NSwxOSBAQAogCW1lbWNweShteV92aXNfaW5mby0+cGFja2V0LnNlbmRlcl9vcmlnLCBtYWluSWZBZGRyLCBFVEhfQUxFTik7CiAKIAlpZiAoaGFzaF9hZGQodmlzX2hhc2gsIG15X3Zpc19pbmZvKSA8IDApIHsKLQkJZGVidWdfbG9nKExPR19UWVBFX0NSSVQsCi0JCQkgICJDYW4ndCBhZGQgb3duIHZpcyBwYWNrZXQgaW50byBoYXNoXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCQkgICJiYXRtYW4tYWR2OkNhbid0IGFkZCBvd24gdmlzIHBhY2tldCBpbnRvIGhhc2hcbiIpOwogCQlmcmVlX2luZm8obXlfdmlzX2luZm8pOwkvKiBub3QgaW4gaGFzaCwgbmVlZCB0byByZW1vdmUgaXQKIAkJCQkJICogbWFudWFsbHkuICovCiAJCWdvdG8gZXJyOwogCX0KIAotCXNwaW5fdW5sb2NrKCZ2aXNfaGFzaF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aXNfaGFzaF9sb2NrLCBmbGFncyk7CiAJc3RhcnRfdmlzX3RpbWVyKCk7CiAJcmV0dXJuIDE7CiAKIGVycjoKLQlzcGluX3VubG9jaygmdmlzX2hhc2hfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlzX2hhc2hfbG9jaywgZmxhZ3MpOwogCXZpc19xdWl0KCk7CiAJcmV0dXJuIDA7CiB9CkBAIC01NDIsMjMgKzU3NSwyMyBAQAogLyogc2h1dGRvd24gdmlzLXNlcnZlciAqLwogdm9pZCB2aXNfcXVpdCh2b2lkKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaWYgKCF2aXNfaGFzaCkKIAkJcmV0dXJuOwogCiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ2aXNfdGltZXJfd3EpOwogCi0Jc3Bpbl9sb2NrKCZ2aXNfaGFzaF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmlzX2hhc2hfbG9jaywgZmxhZ3MpOwogCS8qIHByb3Blcmx5IHJlbW92ZSwga2lsbCB0aW1lcnMgLi4uICovCiAJaGFzaF9kZWxldGUodmlzX2hhc2gsIGZyZWVfaW5mbyk7CiAJdmlzX2hhc2ggPSBOVUxMOwogCW15X3Zpc19pbmZvID0gTlVMTDsKLQlzcGluX3VubG9jaygmdmlzX2hhc2hfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlzX2hhc2hfbG9jaywgZmxhZ3MpOwogfQogCiAvKiBzY2hlZHVsZSBwYWNrZXRzIGZvciAocmUpdHJhbnNtaXNzaW9uICovCiBzdGF0aWMgdm9pZCBzdGFydF92aXNfdGltZXIodm9pZCkKIHsKIAlxdWV1ZV9kZWxheWVkX3dvcmsoYmF0X2V2ZW50X3dvcmtxdWV1ZSwgJnZpc190aW1lcl93cSwKLQkJCSAgIChhdG9taWNfcmVhZCgmdmlzX2ludGVydmFsKS8xMDAwKSAqIEhaKTsKKwkJCSAgIChhdG9taWNfcmVhZCgmdmlzX2ludGVydmFsKSAqIEhaKSAvIDEwMDApOwogfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvYmF0bWFuLWFkdi92aXMuaCBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Zpcy5oCmluZGV4IDI3NmZhYmEuLjBjZGFmZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Zpcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9iYXRtYW4tYWR2L3Zpcy5oCkBAIC00NSwxNiArNDUsMTUgQEAKIAl1aW50OF90IG1hY1tFVEhfQUxFTl07CiB9OwogCi1lbnVtIHZpc19mb3JtYXRzIHsKLQlET1RfRFJBVywKLQlKU09OLAotfTsKLQogZXh0ZXJuIHN0cnVjdCBoYXNodGFibGVfdCAqdmlzX2hhc2g7CiBleHRlcm4gc3BpbmxvY2tfdCB2aXNfaGFzaF9sb2NrOwogCi12b2lkIHZpc19zZXRfbW9kZShpbnQgbW9kZSk7Ci1pbnQgaXNfdmlzX3NlcnZlcih2b2lkKTsKK3ZvaWQgcHJvY192aXNfcmVhZF9lbnRyeShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKKwkJCQlzdHJ1Y3QgdmlzX2luZm9fZW50cnkgKmVudHJ5LAorCQkJCXN0cnVjdCBobGlzdF9oZWFkICppZl9saXN0LAorCQkJCXVpbnQ4X3QgKnZpc19vcmlnKTsKK3ZvaWQgcHJvY192aXNfcmVhZF9wcmltX3NlYyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwKKwkJCSAgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqaWZfbGlzdCk7CiB2b2lkIHJlY2VpdmVfc2VydmVyX3N5bmNfcGFja2V0KHN0cnVjdCB2aXNfcGFja2V0ICp2aXNfcGFja2V0LAogCQkJCWludCB2aXNfaW5mb19sZW4pOwogdm9pZCByZWNlaXZlX2NsaWVudF91cGRhdGVfcGFja2V0KHN0cnVjdCB2aXNfcGFja2V0ICp2aXNfcGFja2V0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfY29tcGF0MzIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2NvbXBhdDMyLmMKaW5kZXggYTlmZGNkYS4uNTgxYWE1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfY29tcGF0MzIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9jb21wYXQzMi5jCkBAIC0yNiw3ICsyNiw2IEBACiAKICNkZWZpbmUgX19OT19WRVJTSU9OX18KICNpbmNsdWRlICJjb21lZGkuaCIKLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgImNvbWVkaV9jb21wYXQzMi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9jb21lZGlfZm9wcy5jCmluZGV4IDgxMTc3NDguLmFjYTk2NzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvY29tZWRpX2ZvcHMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2NvbWVkaV9mb3BzLmMKQEAgLTYzLDcgKzYzLDcgQEAKIGludCBjb21lZGlfYXV0b2NvbmZpZyA9IDE7CiBtb2R1bGVfcGFyYW0oY29tZWRpX2F1dG9jb25maWcsIGJvb2wsIDA0NDQpOwogCi1pbnQgY29tZWRpX251bV9sZWdhY3lfbWlub3JzID0gMDsKK2ludCBjb21lZGlfbnVtX2xlZ2FjeV9taW5vcnM7CiBtb2R1bGVfcGFyYW0oY29tZWRpX251bV9sZWdhY3lfbWlub3JzLCBpbnQsIDA0NDQpOwogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbWVkaV9maWxlX2luZm9fdGFibGVfbG9jayk7CkBAIC0xNTEwLDcgKzE1MTAsNyBAQAogfQogCiBzdGF0aWMgc3NpemVfdCBjb21lZGlfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywKLQkJCSAgICBsb2ZmX3QgKiBvZmZzZXQpCisJCQkJbG9mZl90ICpvZmZzZXQpCiB7CiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAJc3RydWN0IGNvbWVkaV9hc3luYyAqYXN5bmM7CkBAIC0xNjEyLDcgKzE2MTIsNyBAQAogfQogCiBzdGF0aWMgc3NpemVfdCBjb21lZGlfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBzaXplX3QgbmJ5dGVzLAotCQkJICAgbG9mZl90ICogb2Zmc2V0KQorCQkJCWxvZmZfdCAqb2Zmc2V0KQogewogCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCXN0cnVjdCBjb21lZGlfYXN5bmMgKmFzeW5jOwpAQCAtMjAwNCwxMiArMjAwNCwxMCBAQAogCWlmIChhc3luYy0+Y2JfbWFzayAmIHMtPmFzeW5jLT5ldmVudHMpIHsKIAkJaWYgKGNvbWVkaV9nZXRfc3ViZGV2aWNlX3J1bmZsYWdzKHMpICYgU1JGX1VTRVIpIHsKIAkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYXN5bmMtPndhaXRfaGVhZCk7Ci0JCQlpZiAocy0+c3ViZGV2X2ZsYWdzICYgU0RGX0NNRF9SRUFEKSB7CisJCQlpZiAocy0+c3ViZGV2X2ZsYWdzICYgU0RGX0NNRF9SRUFEKQogCQkJCWtpbGxfZmFzeW5jKCZkZXYtPmFzeW5jX3F1ZXVlLCBTSUdJTywgUE9MTF9JTik7Ci0JCQl9Ci0JCQlpZiAocy0+c3ViZGV2X2ZsYWdzICYgU0RGX0NNRF9XUklURSkgeworCQkJaWYgKHMtPnN1YmRldl9mbGFncyAmIFNERl9DTURfV1JJVEUpCiAJCQkJa2lsbF9mYXN5bmMoJmRldi0+YXN5bmNfcXVldWUsIFNJR0lPLCBQT0xMX09VVCk7Ci0JCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoYXN5bmMtPmNiX2Z1bmMpCiAJCQkJYXN5bmMtPmNiX2Z1bmMocy0+YXN5bmMtPmV2ZW50cywgYXN5bmMtPmNiX2FyZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy5jCmluZGV4IGMyYTYzMmQuLjQ0ZDZiNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy5jCkBAIC00NCw3ICs0NCw3IEBACiAjaW5jbHVkZSA8bGludXgvY2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAogc3RhdGljIGludCBwb3N0Y29uZmlnKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpOwpAQCAtOTksMTEgKzk5LDEwIEBACiBzdGF0aWMgdm9pZCBfX2NvbWVkaV9kZXZpY2VfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CiAJZGV2LT5hdHRhY2hlZCA9IDA7Ci0JaWYgKGRldi0+ZHJpdmVyKSB7CisJaWYgKGRldi0+ZHJpdmVyKQogCQlkZXYtPmRyaXZlci0+ZGV0YWNoKGRldik7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXByaW50aygiQlVHOiBkZXYtPmRyaXZlcj1OVUxMIGluIGNvbWVkaV9kZXZpY2VfZGV0YWNoKClcbiIpOwotCX0KIAljbGVhbnVwX2RldmljZShkZXYpOwogfQogCkBAIC0zODAsOSArMzc5LDggQEAKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChpbnNuLT5pbnNuID09IElOU05fUkVBRCkgeworCWlmIChpbnNuLT5pbnNuID09IElOU05fUkVBRCkKIAkJZGF0YVswXSA9IChuZXdfZGF0YVsxXSA+PiAoY2hhbiAtIGJhc2VfYml0ZmllbGRfY2hhbm5lbCkpICYgMTsKLQl9CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTQyOSw5ICs0MjcsOSBAQAogCW5ld19zaXplID0gKG5ld19zaXplICsgUEFHRV9TSVpFIC0gMSkgJiBQQUdFX01BU0s7CiAKIAkvKiBpZiBubyBjaGFuZ2UgaXMgcmVxdWlyZWQsIGRvIG5vdGhpbmcgKi8KLQlpZiAoYXN5bmMtPnByZWFsbG9jX2J1ZiAmJiBhc3luYy0+cHJlYWxsb2NfYnVmc3ogPT0gbmV3X3NpemUpIHsKKwlpZiAoYXN5bmMtPnByZWFsbG9jX2J1ZiAmJiBhc3luYy0+cHJlYWxsb2NfYnVmc3ogPT0gbmV3X3NpemUpCiAJCXJldHVybiAwOwotCX0KKwogCS8qICBkZWFsbG9jYXRlIG9sZCBidWZmZXIgKi8KIAlpZiAoYXN5bmMtPnByZWFsbG9jX2J1ZikgewogCQl2dW5tYXAoYXN5bmMtPnByZWFsbG9jX2J1Zik7CkBAIC00OTQsOSArNDkyLDkgQEAKIAkJCQkJICAgICh2b2lkICopCiAJCQkJCSAgICBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CiAJCQkJfQotCQkJCWlmIChhc3luYy0+YnVmX3BhZ2VfbGlzdFtpXS52aXJ0X2FkZHIgPT0gTlVMTCkgeworCQkJCWlmIChhc3luYy0+YnVmX3BhZ2VfbGlzdFtpXS52aXJ0X2FkZHIgPT0gTlVMTCkKIAkJCQkJYnJlYWs7Ci0JCQkJfQorCiAJCQkJbWVtX21hcF9yZXNlcnZlKHZpcnRfdG9fcGFnZQogCQkJCQkJKGFzeW5jLT5idWZfcGFnZV9saXN0W2ldLgogCQkJCQkJIHZpcnRfYWRkcikpOwpAQCAtNjE5LDkgKzYxNyw5IEBACiB7CiAJdW5zaWduZWQgaW50IGZyZWVfZW5kID0gYXN5bmMtPmJ1Zl9yZWFkX2NvdW50ICsgYXN5bmMtPnByZWFsbG9jX2J1ZnN6OwogCi0JaWYgKChpbnQpKGFzeW5jLT5idWZfd3JpdGVfYWxsb2NfY291bnQgKyBuYnl0ZXMgLSBmcmVlX2VuZCkgPiAwKSB7CisJaWYgKChpbnQpKGFzeW5jLT5idWZfd3JpdGVfYWxsb2NfY291bnQgKyBuYnl0ZXMgLSBmcmVlX2VuZCkgPiAwKQogCQluYnl0ZXMgPSBmcmVlX2VuZCAtIGFzeW5jLT5idWZfd3JpdGVfYWxsb2NfY291bnQ7Ci0JfQorCiAJYXN5bmMtPmJ1Zl93cml0ZV9hbGxvY19jb3VudCArPSBuYnl0ZXM7CiAJLyogYmFycmllciBpbnN1cmVzIHRoZSByZWFkIG9mIGJ1Zl9yZWFkX2NvdW50IGFib3ZlIG9jY3VycyBiZWZvcmUKIAkgICB3ZSB3cml0ZSBkYXRhIHRvIHRoZSB3cml0ZS1hbGxvYydlZCBidWZmZXIgc3BhY2UgKi8KQEAgLTYzNSw5ICs2MzMsOSBAQAogewogCXVuc2lnbmVkIGludCBmcmVlX2VuZCA9IGFzeW5jLT5idWZfcmVhZF9jb3VudCArIGFzeW5jLT5wcmVhbGxvY19idWZzejsKIAotCWlmICgoaW50KShhc3luYy0+YnVmX3dyaXRlX2FsbG9jX2NvdW50ICsgbmJ5dGVzIC0gZnJlZV9lbmQpID4gMCkgeworCWlmICgoaW50KShhc3luYy0+YnVmX3dyaXRlX2FsbG9jX2NvdW50ICsgbmJ5dGVzIC0gZnJlZV9lbmQpID4gMCkKIAkJbmJ5dGVzID0gMDsKLQl9CisKIAlhc3luYy0+YnVmX3dyaXRlX2FsbG9jX2NvdW50ICs9IG5ieXRlczsKIAkvKiBiYXJyaWVyIGluc3VyZXMgdGhlIHJlYWQgb2YgYnVmX3JlYWRfY291bnQgYWJvdmUgb2NjdXJzIGJlZm9yZQogCSAgIHdlIHdyaXRlIGRhdGEgdG8gdGhlIHdyaXRlLWFsbG9jJ2VkIGJ1ZmZlciBzcGFjZSAqLwpAQCAtNjU3LDkgKzY1NSw5IEBACiAJYXN5bmMtPmJ1Zl93cml0ZV9jb3VudCArPSBuYnl0ZXM7CiAJYXN5bmMtPmJ1Zl93cml0ZV9wdHIgKz0gbmJ5dGVzOwogCWNvbWVkaV9idWZfbXVuZ2UoYXN5bmMsIGFzeW5jLT5idWZfd3JpdGVfY291bnQgLSBhc3luYy0+bXVuZ2VfY291bnQpOwotCWlmIChhc3luYy0+YnVmX3dyaXRlX3B0ciA+PSBhc3luYy0+cHJlYWxsb2NfYnVmc3opIHsKKwlpZiAoYXN5bmMtPmJ1Zl93cml0ZV9wdHIgPj0gYXN5bmMtPnByZWFsbG9jX2J1ZnN6KQogCQlhc3luYy0+YnVmX3dyaXRlX3B0ciAlPSBhc3luYy0+cHJlYWxsb2NfYnVmc3o7Ci0JfQorCiAJcmV0dXJuIG5ieXRlczsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9DaHJvbm8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfQ2hyb25vLmMKaW5kZXggMGFmMTJmZDIuLmZiYzI2YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfQ2hyb25vLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9DaHJvbm8uYwpAQCAtMTcsNyArMTcsNyBAQAogCiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogCi1Zb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KK1lvdSBzaG91bGQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KIAogQGVuZHZlcmJhdGltCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9EaWdfaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfRGlnX2lvLmMKaW5kZXggZjNlNDdlNS4uYTY4OThlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9EaWdfaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0RpZ19pby5jCkBAIC0xNyw3ICsxNyw3IEBACiAKIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAKLVlvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorWW91IHNob3VsZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgogCiBAZW5kdmVyYmF0aW0KICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0lOQ0NQVC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9JTkNDUFQuYwppbmRleCBhMTVjOTUyLi4wZTQ5OGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX0lOQ0NQVC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfSU5DQ1BULmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIAotWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCitZb3Ugc2hvdWxkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCiAKIEBlbmR2ZXJiYXRpbQogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfSW5wX2NwdC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9JbnBfY3B0LmMKaW5kZXggMGZjMjI4NS4uMjA0ZDc5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9JbnBfY3B0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9JbnBfY3B0LmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIAotWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCitZb3Ugc2hvdWxkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCiAKIEBlbmR2ZXJiYXRpbQogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfUHdtLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1B3bS5jCmluZGV4IDEzOGE4NGYuLjE0OGNlNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfUHdtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Qd20uYwpAQCAtMTcsNyArMTcsNyBAQAogCiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogCi1Zb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KK1lvdSBzaG91bGQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KIAogQGVuZHZlcmJhdGltCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Tc2kuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfU3NpLmMKaW5kZXggYTQ0NWRhYi4uNjM2MGRlNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Tc2kuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1NzaS5jCkBAIC0xNyw3ICsxNyw3IEBACiAKIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAKLVlvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorWW91IHNob3VsZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgogCiBAZW5kdmVyYmF0aW0KICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1Rvci5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9Ub3IuYwppbmRleCA3ZTEyNTQ0Li4zNDRkZjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1Rvci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfVG9yLmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIAotWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCitZb3Ugc2hvdWxkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCiAKIEBlbmR2ZXJiYXRpbQogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfVHRsLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL0FQQ0kxNzEwX1R0bC5jCmluZGV4IGQzZDc4ZDMuLmRlNmY3NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvQVBDSTE3MTBfVHRsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9BUENJMTcxMF9UdGwuYwpAQCAtMTcsNyArMTcsNyBAQAogCiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogCi1Zb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KK1lvdSBzaG91bGQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KIAogQGVuZHZlcmJhdGltCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2FtY2NfUzU5MjAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9hbWNjX1M1OTIwLmMKaW5kZXggNmU5ZTdlZC4uOTdjMTBhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2FtY2NfUzU5MjAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfYW1jY19TNTkyMC5jCkBAIC0xNyw3ICsxNyw3IEBACiAKIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAKLVlvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorWW91IHNob3VsZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgogCiBAZW5kdmVyYmF0aW0KICovCkBAIC0xNzMsMTEgKzE3MywxMCBAQAogCQkJfSB3aGlsZSAoZHdfZWVwcm9tX2J1c3kgPT0gRUVQUk9NX0JVU1kpOwogCiAJCQkvKiBTZWxlY3QgdGhlIHVwcGVyIGFkZHJlc3MgcGFydCAqLwotCQkJaWYgKGlfQ291bnRlciA9PSAwKSB7CisJCQlpZiAoaV9Db3VudGVyID09IDApCiAJCQkJYl9SZWFkTG93Qnl0ZSA9IHBiX1JlYWRCeXRlWzBdOwotCQkJfSBlbHNlIHsKKwkJCWVsc2UKIAkJCQliX1JlYWRIaWdoQnl0ZSA9IHBiX1JlYWRCeXRlWzBdOwotCQkJfQogCiAJCQkvKiBTbGVlcCAqLwogCQkJbXNsZWVwKDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2NvbW1vbi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2NvbW1vbi5jCmluZGV4IGE1NjUzNWYuLjhkYjVhYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9jb21tb24uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfY29tbW9uLmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIAotWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCitZb3Ugc2hvdWxkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCiAKIEBlbmR2ZXJiYXRpbQogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9jb21tb24uaCBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9jb21tb24uaAppbmRleCAzYWIyN2NmLi5jYWViNmZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfY29tbW9uLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2NvbW1vbi5oCkBAIC03Nyw4ICs3Nyw4IEBACiAJaW50IGlfTmJyQW9DaGFubmVsOwkvKiAgbnVtIG9mIEQvQSBjaGFucyAqLwogCWludCBpX0FpTWF4ZGF0YTsJLyogIHJlc29sdXRpb24gb2YgQS9EICovCiAJaW50IGlfQW9NYXhkYXRhOwkvKiAgcmVzb2x1dGlvbiBvZiBEL0EgKi8KLSAgICAgICAgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnByX0FpUmFuZ2VsaXN0OwkvKiByYW5nZWxpc3QgZm9yIEEvRCAqLwotICAgICAgICBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSAqcHJfQW9SYW5nZWxpc3Q7CS8qIHJhbmdlbGlzdCBmb3IgRC9BICovCisJY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgKnByX0FpUmFuZ2VsaXN0OwkvKiByYW5nZWxpc3QgZm9yIEEvRCAqLworCWNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlICpwcl9Bb1JhbmdlbGlzdDsJLyogcmFuZ2VsaXN0IGZvciBEL0EgKi8KIAogCWludCBpX05ickRpQ2hhbm5lbDsJLyogIE51bWJlciBvZiBESSBjaGFubmVscyAqLwogCWludCBpX05ickRvQ2hhbm5lbDsJLyogIE51bWJlciBvZiBETyBjaGFubmVscyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2VlcHJvbS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9hZGRpX2VlcHJvbS5jCmluZGV4IDY5YjQyNzMuLmJlYTMyOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvYWRkaV9lZXByb20uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2FkZGlfZWVwcm9tLmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIAotWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCitZb3Ugc2hvdWxkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCiAKIEBlbmR2ZXJiYXRpbQogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfQVBDSTE3MTAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfQVBDSTE3MTAuYwppbmRleCA0NzUxN2E5Li5kN2Q3NjhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X0FQQ0kxNzEwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9BUENJMTcxMC5jCkBAIC0xNyw3ICsxNyw3IEBACiAKIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAKLVlvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorWW91IHNob3VsZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgogCiBAZW5kdmVyYmF0aW0KICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kwMzUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTAzNS5jCmluZGV4IDAxNjcyMWUuLjc5MTI5NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTAzNS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTAzNS5jCkBAIC0xNyw3ICsxNyw3IEBACiAKIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAKLVlvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorWW91IHNob3VsZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgogCiBAZW5kdmVyYmF0aW0KICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxMDMyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxMDMyLmMKaW5kZXggNzIzYTk3Yi4uZmUwNjc4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTAzMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTEwMzIuYwpAQCAtMTcsNyArMTcsNyBAQAogCiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogCi1Zb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KK1lvdSBzaG91bGQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KIAogQGVuZHZlcmJhdGltCiAqLwpAQCAtNTQsNyArNTQsNyBAQAogI2luY2x1ZGUgImh3ZHJ2X2FwY2kxMDMyLmgiCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIC8qIEdsb2JhbCB2YXJpYWJsZXMgKi8KLXVuc2lnbmVkIGludCB1aV9JbnRlcnJ1cHRTdGF0dXMgPSAwOwordW5zaWduZWQgaW50IHVpX0ludGVycnVwdFN0YXR1czsKIAogLyoKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwpAQCAtMTA4LDkgKzEwOCw5IEBACiAJCQl1aV9UbXBWYWx1ZSA9CiAJCQkJaW5sKGRldnByaXYtPmlvYmFzZSArIEFQQ0kxMDMyX0RJR0lUQUxfSVBfSVJRKTsKIAkJfQkJLyogaWYgKGRhdGFbMV0gPT0gQURESURBVEFfT1IpICovCi0JCWVsc2UgeworCQllbHNlCiAJCQlvdXRsKDB4NiwgZGV2cHJpdi0+aW9iYXNlICsgQVBDSTEwMzJfRElHSVRBTF9JUF9JUlEpOwotCQl9CQkvKiBlbHNlIGlmKGRhdGFbMV0gPT0gQURESURBVEFfT1IpICovCisJCQkJLyogZWxzZSBpZihkYXRhWzFdID09IEFERElEQVRBX09SKSAqLwogCX0JCQkvKiAgaWYoIGRhdGFbMF0gPT0gQURESURBVEFfRU5BQkxFKSAqLwogCWVsc2UgewogCQl1bF9Db21tYW5kMSA9IHVsX0NvbW1hbmQxICYgMHhGRkZGMDAwMDsKQEAgLTIyMSw5ICsyMjEsOSBAQAogCQl9CQkvKiBzd2l0Y2godWlfTm9PZkNoYW5uZWxzKSAqLwogCX0JCQkvKiBpZihkYXRhWzFdPT0wKSAqLwogCWVsc2UgewotCQlpZiAoZGF0YVsxXSA9PSAxKSB7CisJCWlmIChkYXRhWzFdID09IDEpCiAJCQkqZGF0YSA9IHVpX0ludGVycnVwdFN0YXR1czsKLQkJfQkJLyogaWYoZGF0YVsxXT09MSkgKi8KKwkJCQkvKiBpZihkYXRhWzFdPT0xKSAqLwogCX0JCQkvKiBlbHNlIGlmKGRhdGFbMV09PTApICovCiAJcmV0dXJuIGluc24tPm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTAwLmMKaW5kZXggMzZiOTI5Zi4uZDVlMDZhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTUwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1MDAuYwpAQCAtMTcsNyArMTcsNyBAQAogCiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogCi1Zb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KK1lvdSBzaG91bGQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KIAogQGVuZHZlcmJhdGltCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTUxNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTUxNi5jCmluZGV4IDg2NmViOGQuLjc5NDhjNDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1MTYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTE2LmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIAotWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCitZb3Ugc2hvdWxkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCiAKIEBlbmR2ZXJiYXRpbQogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1NjQuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE1NjQuYwppbmRleCAzYWU2NjNiLi40NDEzMjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNTY0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTU2NC5jCkBAIC0xNyw3ICsxNyw3IEBACiAKIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAKLVlvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorWW91IHNob3VsZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgogCiBAZW5kdmVyYmF0aW0KICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNnh4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kxNnh4LmMKaW5kZXggOTg4ZTNmYy4uOGJjODhhZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMTZ4eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTE2eHguYwpAQCAtMTcsNyArMTcsNyBAQAogCiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogCi1Zb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KK1lvdSBzaG91bGQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KIAogQGVuZHZlcmJhdGltCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjAxNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjAxNi5jCmluZGV4IGQzNDhjZDUuLjg5NzgzYjFlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjAxNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMTYuYwpAQCAtMTcsNyArMTcsNyBAQAogCiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogCi1Zb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KK1lvdSBzaG91bGQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KIAogQGVuZHZlcmJhdGltCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjAzMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjAzMi5jCmluZGV4IGVjODE3MDguLjJkMzI1MTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIwMzIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMDMyLmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIAotWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCitZb3Ugc2hvdWxkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCiAKIEBlbmR2ZXJiYXRpbQogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIyMDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTIyMDAuYwppbmRleCBhYTE1OWRjLi5lMDE4ODljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kyMjAwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMjIwMC5jCkBAIC0xNyw3ICsxNyw3IEBACiAKIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAKLVlvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorWW91IHNob3VsZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgogCiBAZW5kdmVyYmF0aW0KICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMTIwLmMKaW5kZXggMTcyZmJhOC4uZjkzZGRkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzEyMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMxMjAuYwpAQCAtMTcsNyArMTcsNyBAQAogCiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogCi1Zb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KK1lvdSBzaG91bGQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KIAogQGVuZHZlcmJhdGltCiAqLwpAQCAtNDUsNyArNDUsNyBAQAogKi8KIAogI2luY2x1ZGUgImh3ZHJ2X2FwY2kzMTIwLmgiCi1zdGF0aWMgdW5zaWduZWQgaW50IHVpX1RlbXAgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCB1aV9UZW1wOwogCiAvKiBGVU5DVElPTiBERUZJTklUSU9OUyAqLwogCkBAIC05OCwyNSArOTgsMjIgQEAKIAogCQlkZXZwcml2LT5iX0ludGVycnVwdE1vZGUgPSBBUENJMzEyMF9FT1NfTU9ERTsKIAotCQlpZiAoZGF0YVsxXSkgeworCQlpZiAoZGF0YVsxXSkKIAkJCWRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID0gQVBDSTMxMjBfRU5BQkxFOwotCQl9IGVsc2UKKwkJZWxzZQogCQkJZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPSBBUENJMzEyMF9ESVNBQkxFOwogCQkvKiAgQ29weSBjaGFubmVsIGxpc3QgYW5kIFJhbmdlIExpc3QgdG8gZGV2cHJpdiAqLwogCiAJCWRldnByaXYtPnVpX0FpTmJyb2ZDaGFubmVscyA9IGRhdGFbM107Ci0JCWZvciAoaSA9IDA7IGkgPCBkZXZwcml2LT51aV9BaU5icm9mQ2hhbm5lbHM7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgZGV2cHJpdi0+dWlfQWlOYnJvZkNoYW5uZWxzOyBpKyspCiAJCQlkZXZwcml2LT51aV9BaUNoYW5uZWxMaXN0W2ldID0gZGF0YVs0ICsgaV07Ci0JCX0KIAotCX0gZWxzZQkJCS8qICBFT0MgKi8KLQl7CisJfSBlbHNlIHsJCQkvKiAgRU9DICovCiAJCWRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9IEFQQ0kzMTIwX0VPQ19NT0RFOwotCQlpZiAoZGF0YVsxXSkgeworCQlpZiAoZGF0YVsxXSkKIAkJCWRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID0gQVBDSTMxMjBfRU5BQkxFOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlkZXZwcml2LT5iX0VvY0Vvc0ludGVycnVwdCA9IEFQQ0kzMTIwX0RJU0FCTEU7Ci0JCX0KIAl9CiAKIAlyZXR1cm4gaW5zbi0+bjsKQEAgLTE2NiwxMyArMTYzLDkgQEAKIAlkZXZwcml2LT51c19PdXRwdXRSZWdpc3RlciA9IDA7CiAvKiBkZXZwcml2LT5iX0RpZ2l0YWxPdXRwdXRSZWdpc3Rlcj0wOyAqLwogCi0JaWYgKGluc24tPnVudXNlZFswXSA9PSAyMjIpCS8qICBzZWNvbmQgaW5zbiByZWFkICovCi0JewotCi0JCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKKwlpZiAoaW5zbi0+dW51c2VkWzBdID09IDIyMikgewkvKiAgc2Vjb25kIGluc24gcmVhZCAqLworCQlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKQogCQkJZGF0YVtpXSA9IGRldnByaXYtPnVpX0FpUmVhZERhdGFbaV07Ci0JCX0KLQogCX0gZWxzZSB7CiAJCWRldnByaXYtPnRza19DdXJyZW50ID0gY3VycmVudDsJLyogIFNhdmUgdGhlIGN1cnJlbnQgcHJvY2VzcyB0YXNrIHN0cnVjdHVyZSAqLwogLyoKQEAgLTUxOSw5ICs1MTIsOCBAQAogCiAJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5IGNvbXBhdGlibGUgKi8KIAotCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkgeworCWlmIChjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX05PVyAmJiBjbWQtPnN0YXJ0X3NyYyAhPSBUUklHX0VYVCkKIAkJZXJyKys7Ci0JfQogCiAJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgIT0gVFJJR19USU1FUiAmJgogCQljbWQtPnNjYW5fYmVnaW5fc3JjICE9IFRSSUdfRk9MTE9XKQpAQCAtNTQ4LDE2ICs1NDAsMTQgQEAKIAkJZXJyKys7CiAJfQogCi0JaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikJLyogIFRlc3QgRGVsYXkgdGltaW5nICovCi0JeworCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsJLyogIFRlc3QgRGVsYXkgdGltaW5nICovCiAJCWlmIChjbWQtPnNjYW5fYmVnaW5fYXJnIDwgdGhpc19ib2FyZC0+dWlfTWluRGVsYXl0aW1lTnMpIHsKIAkJCWNtZC0+c2Nhbl9iZWdpbl9hcmcgPSB0aGlzX2JvYXJkLT51aV9NaW5EZWxheXRpbWVOczsKIAkJCWVycisrOwogCQl9CiAJfQogCi0JaWYgKGNtZC0+Y29udmVydF9zcmMgPT0gVFJJR19USU1FUikJLyogIFRlc3QgQWNxdWlzaXRpb24gdGltaW5nICovCi0JeworCWlmIChjbWQtPmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpIHsJLyogIFRlc3QgQWNxdWlzaXRpb24gdGltaW5nICovCiAJCWlmIChjbWQtPnNjYW5fYmVnaW5fc3JjID09IFRSSUdfVElNRVIpIHsKIAkJCWlmICgoY21kLT5jb252ZXJ0X2FyZykKIAkJCQkmJiAoY21kLT5jb252ZXJ0X2FyZyA8CkBAIC02NTMsMTEgKzY0MywxMCBAQAogCS8qIFVQREFURS0wLjcuNTctPjAuNy42OGRldnByaXYtPnVpX0FpRGF0YUxlbmd0aD1zLT5hc3luYy0+ZGF0YV9sZW47ICovCiAJZGV2cHJpdi0+dWlfQWlEYXRhTGVuZ3RoID0gcy0+YXN5bmMtPnByZWFsbG9jX2J1ZnN6OwogCi0JaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCiAJCWRldnByaXYtPnVpX0FpTmJyb2ZTY2FucyA9IGNtZC0+c3RvcF9hcmc7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWRldnByaXYtPnVpX0FpTmJyb2ZTY2FucyA9IDA7Ci0JfQogCiAJZGV2cHJpdi0+dWlfQWlUaW1lcjAgPSAwOwkvKiAgdmFyaWFibGVzIGNoYW5nZWQgdG8gdGltZXIwLHRpbWVyMSAqLwogCWRldnByaXYtPnVpX0FpVGltZXIxID0gMDsKQEAgLTg0OSw5ICs4MzgsOCBAQAogCX0KIC8qKiogRUwyNDEwMDMgRW5kICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotCWlmIChkZXZwcml2LT5iX0V4dHRyaWdFbmFibGUgPT0gQVBDSTMxMjBfRU5BQkxFKSB7CisJaWYgKGRldnByaXYtPmJfRXh0dHJpZ0VuYWJsZSA9PSBBUENJMzEyMF9FTkFCTEUpCiAJCWlfQVBDSTMxMjBfRXh0dHJpZ0VuYWJsZShkZXYpOwkvKiAgYWN0aXZhdGUgRVhUIHRyaWdnZXIgKi8KLQl9CiAJc3dpdGNoIChtb2RlKSB7CiAJY2FzZSAxOgogCQkvKiAgaW5pdCB0aW1lcjAgaW4gbW9kZSAyICovCkBAIC0xMDQ5LDEyICsxMDM3LDEwIEBACiAJCQkJCWRtYWxlbjEgPSA0OwogCQkJfQogCQl9IGVsc2UgewkvKiAgaXNuJ3Qgb3V0cHV0IGJ1ZmYgc21hbGxlciB0aGF0IG91ciBETUEgYnVmZj8gKi8KLQkJCWlmIChkbWFsZW4wID4gKGRldnByaXYtPnVpX0FpRGF0YUxlbmd0aCkpIHsKKwkJCWlmIChkbWFsZW4wID4gKGRldnByaXYtPnVpX0FpRGF0YUxlbmd0aCkpCiAJCQkJZG1hbGVuMCA9IGRldnByaXYtPnVpX0FpRGF0YUxlbmd0aDsKLQkJCX0KLQkJCWlmIChkbWFsZW4xID4gKGRldnByaXYtPnVpX0FpRGF0YUxlbmd0aCkpIHsKKwkJCWlmIChkbWFsZW4xID4gKGRldnByaXYtPnVpX0FpRGF0YUxlbmd0aCkpCiAJCQkJZG1hbGVuMSA9IGRldnByaXYtPnVpX0FpRGF0YUxlbmd0aDsKLQkJCX0KIAkJfQogCQlkZXZwcml2LT51aV9EbWFCdWZmZXJVc2VzaXplWzBdID0gZG1hbGVuMDsKIAkJZGV2cHJpdi0+dWlfRG1hQnVmZmVyVXNlc2l6ZVsxXSA9IGRtYWxlbjE7CkBAIC0xMzU2LDExICsxMzQyLDEwIEBACiAJCS8qICBzdG9yZSByYW5nZSBsaXN0IHRvIGNhcmQgKi8KIAkJdXNfVG1wVmFsdWUgPSBDUl9DSEFOKGNoYW5saXN0W2ldKTsJLyogIGdldCBjaGFubmVsIG51bWJlcjsgKi8KIAotCQlpZiAoQ1JfUkFOR0UoY2hhbmxpc3RbaV0pIDwgQVBDSTMxMjBfQklQT0xBUl9SQU5HRVMpIHsKKwkJaWYgKENSX1JBTkdFKGNoYW5saXN0W2ldKSA8IEFQQ0kzMTIwX0JJUE9MQVJfUkFOR0VTKQogCQkJdXNfVG1wVmFsdWUgJj0gKCh+QVBDSTMxMjBfVU5JUE9MQVIpICYgMHhmZik7CS8qICBzZXQgYmlwb2xhciAqLwotCQl9IGVsc2UgeworCQllbHNlCiAJCQl1c19UbXBWYWx1ZSB8PSBBUENJMzEyMF9VTklQT0xBUjsJLyogIGVuYWJsZSB1bmlwb2xhci4uLi4uLiAqLwotCQl9CiAKIAkJZ2FpbiA9IENSX1JBTkdFKGNoYW5saXN0W2ldKTsJLyogIGdldCBnYWluIG51bWJlciAqLwogCQl1c19UbXBWYWx1ZSB8PSAoKGdhaW4gJiAweDAzKSA8PCA0KTsJLyogPDw0IGZvciBHMCBhbmQgRzEgYml0IGluIFJBTSAqLwpAQCAtMTUxNCw4ICsxNDk5LDcgQEAKIAkvKiAgQ2hlY2sgSWYgRU9TIGludGVycnVwdCAqLwogCWlmICgoaW50X2RhcSAmIDB4MikgJiYgKGRldnByaXYtPmJfSW50ZXJydXB0TW9kZSA9PSBBUENJMzEyMF9FT1NfTU9ERSkpIHsKIAotCQlpZiAoZGV2cHJpdi0+Yl9Fb2NFb3NJbnRlcnJ1cHQgPT0gQVBDSTMxMjBfRU5BQkxFKQkvKiAgZW5hYmxlIHRoaXMgaW4gd2l0aG91dCBETUEgPz8/ICovCi0JCXsKKwkJaWYgKGRldnByaXYtPmJfRW9jRW9zSW50ZXJydXB0ID09IEFQQ0kzMTIwX0VOQUJMRSkgewkvKiAgZW5hYmxlIHRoaXMgaW4gd2l0aG91dCBETUEgPz8/ICovCiAKIAkJCWlmIChkZXZwcml2LT5iX0FpQ3ljbGljQWNxdWlzaXRpb24gPT0gQVBDSTMxMjBfRU5BQkxFKSB7CiAJCQkJdWlfQ2hlY2sgPSAwOwpAQCAtMTk2Niw4ICsxOTUwLDcgQEAKIAkJQVBDSTMxMjBfRElTQUJMRV9FT1NfSU5UOwogCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCiAJCWRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1dSSVRFX01PREVfU0VMRUNUKTsKLQlpZiAoZGF0YVswXSA9PSBBUENJMzEyMF9USU1FUikJLyogaW5pdGlhbGl6ZSB0aW1lciAqLwotCXsKKwlpZiAoZGF0YVswXSA9PSBBUENJMzEyMF9USU1FUikgewkvKiBpbml0aWFsaXplIHRpbWVyICovCiAJCS8qIGRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyPWRldnByaXYtPmJfTW9kZVNlbGVjdFJlZ2lzdGVyIHwKIAkJICogQVBDSTMxMjBfRU5BQkxFX1RJTUVSX0lOVDsgKi8KIApAQCAtMjAwNiw4ICsxOTg5LDcgQEAKIAkJLyogIHRpbWVyMiBpbiBUaW1lciBtb2RlIGVuYWJsZWQgKi8KIAkJZGV2cHJpdi0+Yl9UaW1lcjJNb2RlID0gQVBDSTMxMjBfVElNRVI7CiAKLQl9IGVsc2UJCQkvKiAgSW5pdGlhbGl6ZSBXYXRjaCBkb2cgKi8KLQl7CisJfSBlbHNlIHsJCQkvKiAgSW5pdGlhbGl6ZSBXYXRjaCBkb2cgKi8KIAogCQkvKiBTZXQgdGhlIFRpbWVyIDIgaW4gbW9kZSA1KFdhdGNoZG9nKSAqLwogCkBAIC0yMDkyLDggKzIwNzQsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoZGF0YVswXSA9PSAyKQkvKiAgd3JpdGUgbmV3IHZhbHVlICovCi0JeworCWlmIChkYXRhWzBdID09IDIpIHsJLyogIHdyaXRlIG5ldyB2YWx1ZSAqLwogCQlpZiAoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlICE9IEFQQ0kzMTIwX1RJTUVSKSB7CiAJCQljb21lZGlfZXJyb3IoZGV2LAogCQkJCSJ3cml0ZSA6dGltZXIyICBub3QgY29uZmlndXJlZCAgaW4gVElNRVIgTU9ERSIpOwpAQCAtMjExMywxMyArMjA5NCwxMSBAQAogCiAJCS8qICBSZXNldCBGQ19USU1FUiBCSVQgKi8KIAkJaW5iKGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1RJTUVSX1NUQVRVU19SRUdJU1RFUik7Ci0JCWlmIChkZXZwcml2LT5iX1RpbWVyMk1vZGUgPT0gQVBDSTMxMjBfVElNRVIpCS8qIHN0YXJ0IHRpbWVyICovCi0JCXsKKwkJaWYgKGRldnByaXYtPmJfVGltZXIyTW9kZSA9PSBBUENJMzEyMF9USU1FUikgewkvKiBzdGFydCB0aW1lciAqLwogCQkJLyogRW5hYmxlIFRpbWVyICovCiAJCQlkZXZwcml2LT5iX01vZGVTZWxlY3RSZWdpc3RlciA9CiAJCQkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgJiAweDBCOwotCQl9IGVsc2UJCS8qIHN0YXJ0IHdhdGNoIGRvZyAqLwotCQl7CisJCX0gZWxzZSB7CQkvKiBzdGFydCB3YXRjaCBkb2cgKi8KIAkJCS8qIEVuYWJsZSBXYXRjaERvZyAqLwogCQkJZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIgPQogCQkJCShkZXZwcml2LT4KQEAgLTIxNDYsOCArMjEyNSw3IEBACiAJCW91dGIoZGV2cHJpdi0+Yl9Nb2RlU2VsZWN0UmVnaXN0ZXIsCiAJCQlkZXZwcml2LT5pb2Jhc2UgKyBBUENJMzEyMF9XUklURV9NT0RFX1NFTEVDVCk7CiAKLQkJaWYgKGRldnByaXYtPmJfVGltZXIyTW9kZSA9PSBBUENJMzEyMF9USU1FUikJLyogc3RhcnQgdGltZXIgKi8KLQkJeworCQlpZiAoZGV2cHJpdi0+Yl9UaW1lcjJNb2RlID09IEFQQ0kzMTIwX1RJTUVSKSB7CS8qIHN0YXJ0IHRpbWVyICovCiAJCQkvKiBGb3IgVGltZXIgbW9kZSBpcyAgR2F0ZTIgbXVzdCBiZSBhY3RpdmF0ZWQgICAqKnRpbWVyIHN0YXJ0ZWQgKi8KIAkJCWRldnByaXYtPnVzX091dHB1dFJlZ2lzdGVyID0KIAkJCQlkZXZwcml2LT4KQEAgLTIyOTksOCArMjI3Nyw3IEBACiAJCS8qICBjb21iaW5pbmcgYm90aCB3b3JkcyAqLwogCQlkYXRhWzBdID0gKHVuc2lnbmVkIGludCkgKCh1c19UbXBWYWx1ZSkgfCAoKHVzX1RtcFZhbHVlXzIpIDw8IDE2KSk7CiAKLQl9IGVsc2UJCQkvKiAgUmVhZCB3YXRjaCBkb2cgc3RhdHVzICovCi0JeworCX0gZWxzZSB7CQkJLyogIFJlYWQgd2F0Y2ggZG9nIHN0YXR1cyAqLwogCiAJCXVzX1N0YXR1c1ZhbHVlID0gaW53KGRldnByaXYtPmlvYmFzZSArIEFQQ0kzMTIwX1JEX1NUQVRVUyk7CiAJCXVzX1N0YXR1c1ZhbHVlID0KQEAgLTI0NDEsMTAgKzI0MTgsOSBAQAogCQlkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyA9IEFQQ0kzMTIwX0RJU0FCTEU7CiAJCWRldnByaXYtPmJfRGlnaXRhbE91dHB1dFJlZ2lzdGVyID0gMDsKIAl9Ci0JaWYgKCFkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cykgeworCWlmICghZGV2cHJpdi0+Yl9PdXRwdXRNZW1vcnlTdGF0dXMpCiAJCXVpX1RlbXAgPSAwOwotCi0JfQkJCS8qIGlmKCFkZXZwcml2LT5iX091dHB1dE1lbW9yeVN0YXR1cyApICovCisJCQkJLyogaWYoIWRldnByaXYtPmJfT3V0cHV0TWVtb3J5U3RhdHVzICkgKi8KIAogCXJldHVybiBpbnNuLT5uOwogfQpAQCAtMjUwNCwyMyArMjQ4MCwyMyBAQAogCiAvKgogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IEZ1bmN0aW9uIG5hbWUgICAgIDppbnQgaV9BUENJMzEyMF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsfAotfHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpIAkJCSAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJCQkgICAgICAgICB8Cit8IEZ1bmN0aW9uIG5hbWUJCTppbnQgaV9BUENJMzEyMF9JbnNuV3JpdGVEaWdpdGFsT3V0cHV0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsfAorfHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLHN0cnVjdCBjb21lZGlfaW5zbiAqaW5zbix1bnNpZ25lZCBpbnQgKmRhdGEpCXwKK3wJCQkJCQkJCQkJfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IFRhc2sgICAgICAgICAgICAgIDogV3JpdGUgZGlnaWF0bCBvdXRwdXQJCQkJCQkJCSAgICAgfAotfCAgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkgICAgICAgICAgICAgICAgIHwKK3wgVGFzawkJCTogV3JpdGUgZGlnaWF0bCBvdXRwdXQJCQkJCXwKK3wgCQkJCQkJCQkJCXwKICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwotfCBJbnB1dCBQYXJhbWV0ZXJzICA6IHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYJCQkJCQkJCSAJIHwKLXwgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcwkJCQkJCQkJCSB8Ci18ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvbWVkaV9pbnNuICppbnNuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci18ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpkYXRhIAkJCQkJCQkJCQkgfAotICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gICAgIFZhbHVlIHRvIGJlIHdyaXR0ZW4KLSAgICAgICAgICAgICAgICAgICAgICBkYXRhWzFdICAgIDoxIFNldCBkaWdpdGFsIG8vcCBPTgotICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMV0gICAgIDIgU2V0IGRpZ2l0YWwgby9wIE9GRiB3aXRoIG1lbW9yeSBPTgorfCBJbnB1dCBQYXJhbWV0ZXJzCTogc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldgkJCQl8Cit8CQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMJCQkgCXwKK3wJCQlzdHJ1Y3QgY29tZWRpX2luc24gKmluc24JCQkJfAorfAkJCXVuc2lnbmVkIGludCAqZGF0YQkJCQkJfAorCQkJZGF0YVswXSAgICAgVmFsdWUgdG8gYmUgd3JpdHRlbgorCQkJZGF0YVsxXSAgICA6MSBTZXQgZGlnaXRhbCBvL3AgT04KKwkJCWRhdGFbMV0gICAgIDIgU2V0IGRpZ2l0YWwgby9wIE9GRiB3aXRoIG1lbW9yeSBPTgogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCi18IFJldHVybiBWYWx1ZSAgICAgIDogICAgICAgICAgICAgIAkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIHwKLXwgICAgICAgICAgICAgICAgICAgIAkJCQkJCQkJCQkJCQkgICAgIHwKK3wgUmV0dXJuIFZhbHVlCQk6CQkJCQkJCXwKK3wJCQkJCQkJCQkJfAogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAqLwogCkBAIC0yNjE1LDggKzI1OTEsNyBAQAogCXVpX0NoYW5uZWwgPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKIAogCS8qIHRoaXNfYm9hcmQtPmlfaHdkcnZfSW5zbldyaXRlQW5hbG9nT3V0cHV0KGRldiwgdWlfUmFuZ2UsIHVpX0NoYW5uZWwsZGF0YVswXSk7ICovCi0JaWYgKHVpX1JhbmdlKQkJLyogIGlmIDEgdGhlbiB1bmlwb2xhciAqLwotCXsKKwlpZiAodWlfUmFuZ2UpIHsJCS8qICBpZiAxIHRoZW4gdW5pcG9sYXIgKi8KIAogCQlpZiAoZGF0YVswXSAhPSAwKQogCQkJZGF0YVswXSA9CkBAIC0yNjI3LDggKzI2MDIsNyBAQAogCQkJCSgoKCh1aV9DaGFubmVsICYgMHgwMykgPDwgMTQpICYgMHhDMDAwKSB8ICgxIDw8CiAJCQkJCTEzKSB8IDgxOTIpOwogCi0JfSBlbHNlCQkJLyogIGlmIDAgdGhlbiAgIGJpcG9sYXIgKi8KLQl7CisJfSBlbHNlIHsJCQkvKiAgaWYgMCB0aGVuICAgYmlwb2xhciAqLwogCQlkYXRhWzBdID0KIAkJCSgoKCh1aV9DaGFubmVsICYgMHgwMykgPDwgMTQpICYgMHhDMDAwKSB8ICgwIDw8IDEzKSB8CiAJCQlkYXRhWzBdKTsKQEAgLTI2MzksOCArMjYxMyw3IEBACiAgKiBvdXQgcHV0IG4gdmFsdWVzIGF0IHRoZSBnaXZlbiBjaGFubmVsLiBwcmludGsoIlxud2FpdGluZyBmb3IKICAqIERBX1JFQURZIEJJVCIpOwogICovCi0JZG8JCQkvKiBXYWl0aW5nIG9mIERBX1JFQURZIEJJVCAqLwotCXsKKwlkbyB7CQkJLyogV2FpdGluZyBvZiBEQV9SRUFEWSBCSVQgKi8KIAkJdXNfVG1wVmFsdWUgPQogCQkJKCh1bnNpZ25lZCBzaG9ydCkgaW53KGRldnByaXYtPmlvYmFzZSArCiAJCQkJQVBDSTMxMjBfUkRfU1RBVFVTKSkgJiAweDAwMDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMjAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzMjAwLmMKaW5kZXggOThjMjM4Ny4uNTYwYzg0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzIwMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTMyMDAuYwpAQCAtMTcsNyArMTcsNyBAQAogCiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogCi1Zb3Ugc2hvdWQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KK1lvdSBzaG91bGQgYWxzbyBmaW5kIHRoZSBjb21wbGV0ZSBHUEwgaW4gdGhlIENPUFlJTkcgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBzb3VyY2UgY29kZS4KIAogQGVuZHZlcmJhdGltCiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzUwMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpMzUwMS5jCmluZGV4IDdiMzhkMTcuLjRlZDQ0MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTM1MDEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzNTAxLmMKQEAgLTE3LDcgKzE3LDcgQEAKIAogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIAotWW91IHNob3VkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCitZb3Ugc2hvdWxkIGFsc28gZmluZCB0aGUgY29tcGxldGUgR1BMIGluIHRoZSBDT1BZSU5HIGZpbGUgYWNjb21wYW55aW5nIHRoaXMgc291cmNlIGNvZGUuCiAKIEBlbmR2ZXJiYXRpbQogKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTN4eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGRpLWRhdGEvaHdkcnZfYXBjaTN4eHguYwppbmRleCAxZDFlNWZjLi4zNjkyMzI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRkaS1kYXRhL2h3ZHJ2X2FwY2kzeHh4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkZGktZGF0YS9od2Rydl9hcGNpM3h4eC5jCkBAIC0xNyw3ICsxNyw3IEBACiAKIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAKLVlvdSBzaG91ZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgorWW91IHNob3VsZCBhbHNvIGZpbmQgdGhlIGNvbXBsZXRlIEdQTCBpbiB0aGUgQ09QWUlORyBmaWxlIGFjY29tcGFueWluZyB0aGlzIHNvdXJjZSBjb2RlLgogCiBAZW5kdmVyYmF0aW0KICovCkBAIC0xMjA2LDcgKzEyMDYsNyBAQAogCiAJCWlmIChiX0NoYW5uZWwgPCA4KSB7CiAJICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCQkJLyogUmVhZCBwb3J0IDAgKGZpcnN0IGRpZ2l0YWwgb3V0cHV0IHBvcnQpIGFuZCBzZXQvcmVzZXQgdGhlIHNlbGN0ZWQgY2hhbm5lbCAqLworCQkJLyogUmVhZCBwb3J0IDAgKGZpcnN0IGRpZ2l0YWwgb3V0cHV0IHBvcnQpIGFuZCBzZXQvcmVzZXQgdGhlIHNlbGVjdGVkIGNoYW5uZWwgKi8KIAkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIAkJCWR3X1N0YXR1cyA9IGlubChkZXZwcml2LT5pb2Jhc2UgKyA4MCk7CkBAIC0xMjI4LDcgKzEyMjgsNyBAQAogCQkJCWlmICgoZGV2cHJpdi0+dWxfVFRMUG9ydENvbmZpZ3VyYXRpb25bMF0gJiAweEZGKQogCQkJCQk9PSAweEZGKSB7CiAJCSAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JCQkJCS8qIFJlYWQgcG9ydCAyIChmaXJzdCBkaWdpdGFsIG91dHB1dCBwb3J0KSBhbmQgc2V0L3Jlc2V0IHRoZSBzZWxjdGVkIGNoYW5uZWwgKi8KKwkJCQkJLyogUmVhZCBwb3J0IDIgKGZpcnN0IGRpZ2l0YWwgb3V0cHV0IHBvcnQpIGFuZCBzZXQvcmVzZXQgdGhlIHNlbGVjdGVkIGNoYW5uZWwgKi8KIAkJICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogCQkJCQlkd19TdGF0dXMgPSBpbmwoZGV2cHJpdi0+aW9iYXNlICsgMTEyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZGxfcGNpOTExOC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTE4LmMKaW5kZXggNzkxZWE4My4uOTkzNGEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTE4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkbF9wY2k5MTE4LmMKQEAgLTg4LDkgKzg4LDkgQEAKICNkZWZpbmUgSU9SQU5HRV85MTE4IAk2NAkvKiBJIGhvcGUgKi8KICNkZWZpbmUgUENJOTExOF9DSEFOTEVOCTI1NQkvKiBsZW4gb2YgY2hhbmxpc3QsIHNvbWUgc291cmNlIHNheSAyNTYsIGJ1dCByZWFsaXR5IGxvb2tzIGxpa2UgMjU1IDotKCAqLwogCi0jZGVmaW5lIFBDSTkxMThfQ05UMAkweDAwCS8qIFIvVzogODI1NCBjb3V0ZXIgMCAqLwotI2RlZmluZSBQQ0k5MTE4X0NOVDEJMHgwNAkvKiBSL1c6IDgyNTQgY291dGVyIDAgKi8KLSNkZWZpbmUgUENJOTExOF9DTlQyCTB4MDgJLyogUi9XOiA4MjU0IGNvdXRlciAwICovCisjZGVmaW5lIFBDSTkxMThfQ05UMAkweDAwCS8qIFIvVzogODI1NCBjb3VudGVyIDAgKi8KKyNkZWZpbmUgUENJOTExOF9DTlQxCTB4MDQJLyogUi9XOiA4MjU0IGNvdW50ZXIgMCAqLworI2RlZmluZSBQQ0k5MTE4X0NOVDIJMHgwOAkvKiBSL1c6IDgyNTQgY291bnRlciAwICovCiAjZGVmaW5lIFBDSTkxMThfQ05UQ1RSTAkweDBjCS8qIFc6ICAgODI1NCBjb3VudGVyIGNvbnRyb2wgKi8KICNkZWZpbmUgUENJOTExOF9BRF9EQVRBCTB4MTAJLyogUjogICBBL0QgZGF0YSAqLwogI2RlZmluZSBQQ0k5MTE4X0RBMQkweDEwCS8qIFc6ICAgRC9BIHJlZ2lzdGVycyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkcTEyYi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FkcTEyYi5jCmluZGV4IGM1ZWQ4YmIuLmYzYmE2NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHExMmIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYWRxMTJiLmMKQEAgLTQyLDIzICs0MiwyMyBAQAogICBvcHRpb24gMTogSS9PIGJhc2UgYWRkcmVzcy4gVGhlIGZvbGxvd2luZyB0YWJsZSBpcyBwcm92aWRlZCBhcyBhIGhlbHAKICAgIG9mIHRoZSBoYXJkd2FyZSBqdW1wZXJzLgogCi0gICAgICAgICBhZGRyZXNzICAgICAgICAgICAganVtcGVyIEpBRFIKLSAgICAgICAgICAweDMwMCAgICAgICAgICAgICAgICAgMSAoZmFjdG9yeSBkZWZhdWx0KQotICAgICAgICAgIDB4MzIwICAgICAgICAgICAgICAgICAyCi0gICAgICAgICAgMHgzNDAgICAgICAgICAgICAgICAgIDMKLSAgICAgICAgICAweDM2MCAgICAgICAgICAgICAgICAgNAotICAgICAgICAgIDB4MzgwICAgICAgICAgICAgICAgICA1Ci0gICAgICAgICAgMHgzQTAgICAgICAgICAgICAgICAgIDYKKwkgYWRkcmVzcyAgICAgICAgICAgIGp1bXBlciBKQURSCisJICAweDMwMCAgICAgICAgICAgICAgICAgMSAoZmFjdG9yeSBkZWZhdWx0KQorCSAgMHgzMjAgICAgICAgICAgICAgICAgIDIKKwkgIDB4MzQwICAgICAgICAgICAgICAgICAzCisJICAweDM2MCAgICAgICAgICAgICAgICAgNAorCSAgMHgzODAgICAgICAgICAgICAgICAgIDUKKwkgIDB4M0EwICAgICAgICAgICAgICAgICA2CiAKICAgb3B0aW9uIDI6IHVuaXBvbGFyL2JpcG9sYXIgQURDIHNlbGVjdGlvbjogMCAtPiBiaXBvbGFyLCAxIC0+IHVuaXBvbGFyCiAKLSAgICAgICAgc2VsZWN0aW9uICAgICAgICAgY29tZWRpX2NvbmZpZyBvcHRpb24gICAgICAgICAgICBKVUIKLSAgICAgICAgIGJpcG9sYXIgICAgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgICAgICAgICAyLTMgKGZhY3RvcnkgZGVmYXVsdCkKLSAgICAgICAgIHVuaXBvbGFyICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAxLTIKKwlzZWxlY3Rpb24gICAgICAgICBjb21lZGlfY29uZmlnIG9wdGlvbiAgICAgICAgICAgIEpVQgorCSBiaXBvbGFyICAgICAgICAgICAgICAgIDAgICAgICAgICAgICAgICAgICAgICAgICAgMi0zIChmYWN0b3J5IGRlZmF1bHQpCisJIHVuaXBvbGFyICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAgICAgICAxLTIKIAogICBvcHRpb24gMzogc2luZ2xlLWVuZGVkL2RpZmZlcmVudGlhbCBBSSBzZWxlY3Rpb246IDAgLT4gU0UsIDEgLT4gZGlmZmVyZW50aWFsCiAKLSAgICAgICAgc2VsZWN0aW9uICAgICAgICAgY29tZWRpX2NvbmZpZyBvcHRpb24gICAgIEpDSEEgICAgSkNIQgorCXNlbGVjdGlvbiAgICAgICAgIGNvbWVkaV9jb25maWcgb3B0aW9uICAgICBKQ0hBICAgIEpDSEIKICAgICAgICBzaW5nbGUtZW5kZWQgICAgICAgICAgICAgMCAgICAgICAgICAgICAgICAgIDEtMiAgICAgMS0yIChmYWN0b3J5IGRlZmF1bHQpCiAgICAgICAgZGlmZmVyZW50aWFsICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAyLTMgICAgIDItMwogCkBAIC0xNDAsNyArMTQwLDcgQEAKIAkuYWlfYml0cyA9IDEyLAogCS5kaV9jaGFucyA9IDgsCiAJLmRvX2NoYW5zID0gNQotICAgICAgICB9Ki8KKwl9Ki8KIH07CiAKICNkZWZpbmUgdGhpc2JvYXJkICgoY29uc3Qgc3RydWN0IGFkcTEyYl9ib2FyZCAqKWRldi0+Ym9hcmRfcHRyKQpAQCAtMTY0LDE0ICsxNjQsMTUgQEAKIHN0YXRpYyBpbnQgYWRxMTJiX2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAogCQkJIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCk7CiBzdGF0aWMgaW50IGFkcTEyYl9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldik7CisKIHN0YXRpYyBzdHJ1Y3QgY29tZWRpX2RyaXZlciBkcml2ZXJfYWRxMTJiID0gewotZHJpdmVyX25hbWU6ImFkcTEyYiIsCi1tb2R1bGU6VEhJU19NT0RVTEUsCi1hdHRhY2g6YWRxMTJiX2F0dGFjaCwKLWRldGFjaDphZHExMmJfZGV0YWNoLAotYm9hcmRfbmFtZTomYWRxMTJiX2JvYXJkc1swXS5uYW1lLAotb2Zmc2V0OnNpemVvZihzdHJ1Y3QgYWRxMTJiX2JvYXJkKSwKLW51bV9uYW1lczpBUlJBWV9TSVpFKGFkcTEyYl9ib2FyZHMpLAorCS5kcml2ZXJfbmFtZSA9ICJhZHExMmIiLAorCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKKwkuYXR0YWNoID0gYWRxMTJiX2F0dGFjaCwKKwkuZGV0YWNoID0gYWRxMTJiX2RldGFjaCwKKwkuYm9hcmRfbmFtZSA9ICZhZHExMmJfYm9hcmRzWzBdLm5hbWUsCisJLm9mZnNldCA9IHNpemVvZihzdHJ1Y3QgYWRxMTJiX2JvYXJkKSwKKwkubnVtX25hbWVzID0gQVJSQVlfU0laRShhZHExMmJfYm9hcmRzKSwKIH07CiAKIHN0YXRpYyBpbnQgYWRxMTJiX2FpX3JpbnNuKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCkBAIC0yMDAsMTUgKzIwMSwxNiBAQAogCXVuaXBvbGFyID0gaXQtPm9wdGlvbnNbMV07CiAJZGlmZmVyZW50aWFsID0gaXQtPm9wdGlvbnNbMl07CiAKLQlwcmludGsoImNvbWVkaSVkOiBhZHExMmIgY2FsbGVkIHdpdGggb3B0aW9ucyBiYXNlPTB4JTAzbHgsICVzIGFuZCAlc1xuIiwKLQkgICAgICAgZGV2LT5taW5vciwgaW9iYXNlLCAodW5pcG9sYXIgPT0gMSkgPyAidW5pcG9sYXIiIDogImJpcG9sYXIiLAorCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBhZHExMmIgY2FsbGVkIHdpdGggb3B0aW9ucyBiYXNlPTB4JTAzbHgsICIKKwkgICAgICAgIiVzIGFuZCAlc1xuIiwgZGV2LT5taW5vciwgaW9iYXNlLAorCSAgICAgICAodW5pcG9sYXIgPT0gMSkgPyAidW5pcG9sYXIiIDogImJpcG9sYXIiLAogCSAgICAgICAoZGlmZmVyZW50aWFsID09IDEpID8gImRpZmZlcmVudGlhbCIgOiAic2luZ2xlLWVuZGVkIik7CiAKIAkvKiBpZiBubyBhZGRyZXNzIHdhcyBzcGVjaWZpZWQsIHRyeSB0aGUgZGVmYXVsdCAweDMwMCAqLwogCWlmIChpb2Jhc2UgPT0gMCkgewotCQlwcmludGsKLQkJICAgICgiY29tZWRpJWQ6IGFkcTEyYiB3YXJuaW5nOiBJL08gYmFzZSBhZGRyZXNzIG5vdCBzcGVjaWZpZWQuIFRyeWluZyB0aGUgZGVmYXVsdCAweDMwMC5cbiIsCi0JCSAgICAgZGV2LT5taW5vcik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNvbWVkaSVkOiBhZHExMmIgd2FybmluZzogSS9PIGJhc2UgIgorCQkgICAgICAgImFkZHJlc3Mgbm90IHNwZWNpZmllZC4gVHJ5aW5nIHRoZSBkZWZhdWx0IDB4MzAwLlxuIiwKKwkJICAgICAgIGRldi0+bWlub3IpOwogCQlpb2Jhc2UgPSAweDMwMDsKIAl9CiAKQEAgLTI1OSwxMSArMjYxLDEwIEBACiAJCXMtPm5fY2hhbiA9IHRoaXNib2FyZC0+YWlfc2VfY2hhbnM7CiAJfQogCi0JaWYgKHVuaXBvbGFyKSB7CisJaWYgKHVuaXBvbGFyKQogCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9hZHExMmJfYWlfdW5pcG9sYXI7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2FkcTEyYl9haV9iaXBvbGFyOwotCX0KIAogCXMtPm1heGRhdGEgPSAoMSA8PCB0aGlzYm9hcmQtPmFpX2JpdHMpIC0gMTsKIApAQCAtMjg5LDcgKzI5MCw3IEBACiAJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKIAlzLT5pbnNuX2JpdHMgPSBhZHExMmJfZG9faW5zbl9iaXRzOwogCi0JcHJpbnRrKCJhdHRhY2hlZFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiYXR0YWNoZWRcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMDksNyArMzEwLDcgQEAKIAogCWtmcmVlKGRldnByaXYpOwogCi0JcHJpbnRrKCJjb21lZGklZDogYWRxMTJiOiByZW1vdmVkXG4iLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogYWRxMTJiOiByZW1vdmVkXG4iLCBkZXYtPm1pbm9yKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzQ0LDE3ICszNDUsMTggQEAKIAkJLyogd2FpdCBmb3IgZW5kIG9mIGNvbnZlcnRpb24gKi8KIAkJaSA9IDA7CiAJCWRvIHsKLS8qIHVkZWxheSgxKTsgKi8KKwkJCS8qIHVkZWxheSgxKTsgKi8KIAkJCXN0YXR1cyA9IGluYihkZXYtPmlvYmFzZSArIEFEUTEyQl9TVElOUik7CiAJCQlzdGF0dXMgPSBzdGF0dXMgJiBBRFExMkJfRU9DOwogCQl9IHdoaWxlIChzdGF0dXMgPT0gMCAmJiArK2kgPCBUSU1FT1VUKTsKLS8qIH0gd2hpbGUgKCsraSA8IDEwKTsgKi8KKwkJLyogfSB3aGlsZSAoKytpIDwgMTApOyAqLwogCiAJCS8qIHJlYWQgZGF0YSAqLwogCQloaSA9IGluYihkZXYtPmlvYmFzZSArIEFEUTEyQl9BREhJRyk7CiAJCWxvID0gaW5iKGRldi0+aW9iYXNlICsgQURRMTJCX0FETE9XKTsKIAotCQkvKiBwcmludGsoImRlYnVnOiBjaGFuPSVkIHJhbmdlPSVkIHN0YXR1cz0lZCBoaT0lZCBsbz0lZFxuIiwgY2hhbm5lbCwgcmFuZ2UsIHN0YXR1cywgIGhpLCBsbyk7ICovCisJCS8qIHByaW50aygiZGVidWc6IGNoYW49JWQgcmFuZ2U9JWQgc3RhdHVzPSVkIGhpPSVkIGxvPSVkXG4iLAorCQkgICAgICAgY2hhbm5lbCwgcmFuZ2UsIHN0YXR1cywgIGhpLCBsbyk7ICovCiAJCWRhdGFbbl0gPSAoaGkgPDwgOCkgfCBsbzsKIAogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hZHZfcGNpMTcxMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fkdl9wY2kxNzEwLmMKaW5kZXggOTUxZTU3OS4uMzk0ZDJlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fkdl9wY2kxNzEwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fkdl9wY2kxNzEwLmMKQEAgLTg0LDkgKzg0LDkgQEAKICNkZWZpbmUgUENJMTcxeF9EQVJFRgkxNAkvKiBXOiAgIEQvQSByZWZlcmVuY2UgY29udHJvbCAqLwogI2RlZmluZSBQQ0kxNzF4X0RJCTE2CS8qIFI6ICAgZGlnaSBpbnB1dHMgKi8KICNkZWZpbmUgUENJMTcxeF9ETwkxNgkvKiBSOiAgIGRpZ2kgaW5wdXRzICovCi0jZGVmaW5lIFBDSTE3MXhfQ05UMAkyNAkvKiBSL1c6IDgyNTQgY291dGVyIDAgKi8KLSNkZWZpbmUgUENJMTcxeF9DTlQxCTI2CS8qIFIvVzogODI1NCBjb3V0ZXIgMSAqLwotI2RlZmluZSBQQ0kxNzF4X0NOVDIJMjgJLyogUi9XOiA4MjU0IGNvdXRlciAyICovCisjZGVmaW5lIFBDSTE3MXhfQ05UMAkyNAkvKiBSL1c6IDgyNTQgY291bnRlciAwICovCisjZGVmaW5lIFBDSTE3MXhfQ05UMQkyNgkvKiBSL1c6IDgyNTQgY291bnRlciAxICovCisjZGVmaW5lIFBDSTE3MXhfQ05UMgkyOAkvKiBSL1c6IDgyNTQgY291bnRlciAyICovCiAjZGVmaW5lIFBDSTE3MXhfQ05UQ1RSTAkzMAkvKiBXOiAgIDgyNTQgY291bnRlciBjb250cm9sICovCiAKIC8qIHVwcGVyIGJpdHMgZnJvbSBzdGF0dXMgcmVnaXN0ZXIgKFBDSTE3MXhfU1RBVFVTKSAobG93ZXIgaXMgc2FtZSB3b3RoIGNvbnRyb2wgcmVnKSAqLwpAQCAtNzI0LDYgKzcyNCw3IEBACiAJCQlkZXZwcml2LT5haV9hY3Rfc2NhbisrOwogCQl9CiAJfQorCXMtPmFzeW5jLT5jdXJfY2hhbiA9IGo7CiAJRFBSSU5USygiYWR2X3BjaTE3MTAgRURCRzogRU5EOiBtb3ZlX2Jsb2NrX2Zyb21fZmlmbyguLi4pXG4iKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMzQsMTQgKzEwMzUsNiBAQAogCQl9CiAJfQogCi0JaWYgKCFjbWQtPmNoYW5saXN0X2xlbikgewotCQljbWQtPmNoYW5saXN0X2xlbiA9IDE7Ci0JCWVycisrOwotCX0KLQlpZiAoY21kLT5jaGFubGlzdF9sZW4gPiB0aGlzX2JvYXJkLT5uX2FpY2hhbikgewotCQljbWQtPmNoYW5saXN0X2xlbiA9IHRoaXNfYm9hcmQtPm5fYWljaGFuOwotCQllcnIrKzsKLQl9CiAJaWYgKGNtZC0+c2Nhbl9lbmRfYXJnICE9IGNtZC0+Y2hhbmxpc3RfbGVuKSB7CiAJCWNtZC0+c2Nhbl9lbmRfYXJnID0gY21kLT5jaGFubGlzdF9sZW47CiAJCWVycisrOwpAQCAtMTIzMCw2ICsxMjIzLDEyIEBACiAJCURQUklOVEsoIkdTOiAlMmQuIFslNHhdPSU0eCAlNHhcbiIsIGksIGNoYW5wcm9nLCByYW5nZSwKIAkJCWRldnByaXYtPmFjdF9jaGFubGlzdFtpXSk7CiAJfQorI2lmZGVmIFBDSTE3MXhfUEFSQU5PSURDSEVDSworCWZvciAoIDsgaSA8IG5fY2hhbjsgaSsrKSB7IC8qIHN0b3JlIHJlbWFpbmRlciBvZiBjaGFubmVsIGxpc3QgKi8KKwkJZGV2cHJpdi0+YWN0X2NoYW5saXN0W2ldID0KKwkJICAgIChDUl9DSEFOKGNoYW5saXN0W2ldKSA8PCAxMikgJiAweGYwMDA7CisJfQorI2VuZGlmCiAKIAlkZXZwcml2LT5haV9ldF9NdXhWYWwgPQogCSAgICBDUl9DSEFOKGNoYW5saXN0WzBdKSB8IChDUl9DSEFOKGNoYW5saXN0W3NlZ2xlbiAtIDFdKSA8PCA4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9haW9faWlyb18xNi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fpb19paXJvXzE2LmMKaW5kZXggMzg1N2ZkNS4uNGJhZWY5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fpb19paXJvXzE2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2Fpb19paXJvXzE2LmMKQEAgLTk4LDcgKzk4LDcgQEAKIAlpbnQgaW9iYXNlOwogCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCi0JcHJpbnRrKCJjb21lZGklZDogYWlvX2lpcm9fMTY6ICIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBhaW9faWlyb18xNjogIiwgZGV2LT5taW5vcik7CiAKIAlkZXYtPmJvYXJkX25hbWUgPSB0aGlzYm9hcmQtPm5hbWU7CiAKQEAgLTE0MCw3ICsxNDAsNyBAQAogCiBzdGF0aWMgaW50IGFpb19paXJvXzE2X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotCXByaW50aygiY29tZWRpJWQ6IGFpb19paXJvXzE2OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBhaW9faWlyb18xNjogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKIAogCWlmIChkZXYtPmlvYmFzZSkKIAkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIEFJT19JSVJPXzE2X1NJWkUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX2RpbzIwMC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX2RpbzIwMC5jCmluZGV4IDY5YWIyODEuLjIwNGYzMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9hbXBsY19kaW8yMDAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfZGlvMjAwLmMKQEAgLTQ4LDggKzQ4LDggQEAKIAogU1VCREVWSUNFUwogCi0gICAgICAgICAgICAgICAgICAgIFBDMjE4RSAgICAgICAgIFBDMjEyRSAgICAgIFBDMjE1RS9QQ0kyMTUKLSAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLQorCQkgICAgUEMyMThFICAgICAgICAgUEMyMTJFICAgICAgUEMyMTVFL1BDSTIxNQorCQkgLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLQogICBTdWJkZXZpY2VzICAgICAgICAgICA3ICAgICAgICAgICAgICA2ICAgICAgICAgICAgICA1CiAgICAwICAgICAgICAgICAgICAgICBDVFItWDEgICAgICAgICBQUEktWCAgICAgICAgICBQUEktWAogICAgMSAgICAgICAgICAgICAgICAgQ1RSLVgyICAgICAgICAgQ1RSLVkxICAgICAgICAgUFBJLVkKQEAgLTU5LDggKzU5LDggQEAKICAgIDUgICAgICAgICAgICAgICAgIENUUi1aMiAgICAgICBJTlRFUlJVUFQKICAgIDYgICAgICAgICAgICAgICBJTlRFUlJVUFQKIAotICAgICAgICAgICAgICAgICAgICBQQzIxNEUgICAgICBQQzI3MkUvUENJMjcyCi0gICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0KKwkJICAgIFBDMjE0RSAgICAgIFBDMjcyRS9QQ0kyNzIKKwkJIC0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0KICAgU3ViZGV2aWNlcyAgICAgICAgICAgNCAgICAgICAgICAgICAgNAogICAgMCAgICAgICAgICAgICAgICAgUFBJLVggICAgICAgICAgUFBJLVgKICAgIDEgICAgICAgICAgICAgICAgIFBQSS1ZICAgICAgICAgIFBQSS1ZCkBAIC05Niw4ICs5Niw4IEBACiAgICAgMCB0byA3IGFzIGZvbGxvd3M6CiAKICAgICAgIDAuICBDTEsgbiwgdGhlIGNvdW50ZXIgY2hhbm5lbCdzIGRlZGljYXRlZCBDTEsgaW5wdXQgZnJvbSB0aGUgU0sxCi0gICAgICAgIGNvbm5lY3Rvci4gIChOLkIuIGZvciBvdGhlciB2YWx1ZXMsIHRoZSBjb3VudGVyIGNoYW5uZWwncyBDTEtuCi0gICAgICAgIHBpbiBvbiB0aGUgU0sxIGNvbm5lY3RvciBpcyBhbiBvdXRwdXQhKQorCWNvbm5lY3Rvci4gIChOLkIuIGZvciBvdGhlciB2YWx1ZXMsIHRoZSBjb3VudGVyIGNoYW5uZWwncyBDTEtuCisJcGluIG9uIHRoZSBTSzEgY29ubmVjdG9yIGlzIGFuIG91dHB1dCEpCiAgICAgICAxLiAgSW50ZXJuYWwgMTAgTUh6IGNsb2NrLgogICAgICAgMi4gIEludGVybmFsIDEgTUh6IGNsb2NrLgogICAgICAgMy4gIEludGVybmFsIDEwMCBrSHogY2xvY2suCkBAIC0xMDUsOCArMTA1LDggQEAKICAgICAgIDUuICBJbnRlcm5hbCAxIGtIeiBjbG9jay4KICAgICAgIDYuICBPVVQgbi0xLCB0aGUgb3V0cHV0IG9mIGNvdW50ZXIgY2hhbm5lbCBuLTEgKHNlZSBub3RlIDEgYmVsb3cpLgogICAgICAgNy4gIEV4dCBDbG9jaywgdGhlIGNvdW50ZXIgY2hpcCdzIGRlZGljYXRlZCBFeHQgQ2xvY2sgaW5wdXQgZnJvbQotICAgICAgICB0aGUgU0sxIGNvbm5lY3Rvci4gIFRoaXMgcGluIGlzIHNoYXJlZCBieSBhbGwgdGhyZWUgY291bnRlcgotICAgICAgICBjaGFubmVscyBvbiB0aGUgY2hpcC4KKwl0aGUgU0sxIGNvbm5lY3Rvci4gIFRoaXMgcGluIGlzIHNoYXJlZCBieSBhbGwgdGhyZWUgY291bnRlcgorCWNoYW5uZWxzIG9uIHRoZSBjaGlwLgogCiAgIElOU05fQ09ORklHX0dFVF9DTE9DS19TUkMuICBSZXR1cm5zIHRoZSBjb3VudGVyIGNoYW5uZWwncyBjdXJyZW50CiAgICAgY2xvY2sgc291cmNlIGluIGRhdGFbMV0uICBGb3IgaW50ZXJuYWwgY2xvY2sgc291cmNlcywgZGF0YVsyXSBpcyBzZXQKQEAgLTEyMCwxMCArMTIwLDEwIEBACiAgICAgICAwLiAgVkNDIChpbnRlcm5hbCArNVYgZC5jLiksIGkuZS4gZ2F0ZSBwZXJtYW5lbnRseSBlbmFibGVkLgogICAgICAgMS4gIEdORCAoaW50ZXJuYWwgMFYgZC5jLiksIGkuZS4gZ2F0ZSBwZXJtYW5lbnRseSBkaXNhYmxlZC4KICAgICAgIDIuICBHQVQgbiwgdGhlIGNvdW50ZXIgY2hhbm5lbCdzIGRlZGljYXRlZCBHQVQgaW5wdXQgZnJvbSB0aGUgU0sxCi0gICAgICAgIGNvbm5lY3Rvci4gIChOLkIuIGZvciBvdGhlciB2YWx1ZXMsIHRoZSBjb3VudGVyIGNoYW5uZWwncyBHQVRuCi0gICAgICAgIHBpbiBvbiB0aGUgU0sxIGNvbm5lY3RvciBpcyBhbiBvdXRwdXQhKQorCWNvbm5lY3Rvci4gIChOLkIuIGZvciBvdGhlciB2YWx1ZXMsIHRoZSBjb3VudGVyIGNoYW5uZWwncyBHQVRuCisJcGluIG9uIHRoZSBTSzEgY29ubmVjdG9yIGlzIGFuIG91dHB1dCEpCiAgICAgICAzLiAgL09VVCBuLTIsIHRoZSBpbnZlcnRlZCBvdXRwdXQgb2YgY291bnRlciBjaGFubmVsIG4tMiAoc2VlIG5vdGUKLSAgICAgICAgMiBiZWxvdykuCisJMiBiZWxvdykuCiAgICAgICA0LiAgUmVzZXJ2ZWQuCiAgICAgICA1LiAgUmVzZXJ2ZWQuCiAgICAgICA2LiAgUmVzZXJ2ZWQuCkBAIC0xNTMsOCArMTUzLDggQEAKIAogSU5URVJSVVBUIFNPVVJDRVMKIAotICAgICAgICAgICAgICAgICAgICBQQzIxOEUgICAgICAgICBQQzIxMkUgICAgICBQQzIxNUUvUENJMjE1Ci0gICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0KKwkJICAgIFBDMjE4RSAgICAgICAgIFBDMjEyRSAgICAgIFBDMjE1RS9QQ0kyMTUKKwkJIC0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0gIC0tLS0tLS0tLS0tLS0KICAgU291cmNlcyAgICAgICAgICAgICAgNiAgICAgICAgICAgICAgNiAgICAgICAgICAgICAgNgogICAgMCAgICAgICAgICAgICAgQ1RSLVgxLU9VVCAgICAgIFBQSS1YLUMwICAgICAgIFBQSS1YLUMwCiAgICAxICAgICAgICAgICAgICBDVFItWDItT1VUICAgICAgUFBJLVgtQzMgICAgICAgUFBJLVgtQzMKQEAgLTE2Myw4ICsxNjMsOCBAQAogICAgNCAgICAgICAgICAgICAgQ1RSLVoxLU9VVCAgICAgQ1RSLVoxLU9VVCAgICAgQ1RSLVoxLU9VVAogICAgNSAgICAgICAgICAgICAgQ1RSLVoyLU9VVCAgICAgQ1RSLVoyLU9VVCAgICAgQ1RSLVoyLU9VVAogCi0gICAgICAgICAgICAgICAgICAgIFBDMjE0RSAgICAgIFBDMjcyRS9QQ0kyNzIKLSAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLQorCQkgICAgUEMyMTRFICAgICAgUEMyNzJFL1BDSTI3MgorCQkgLS0tLS0tLS0tLS0tLSAgLS0tLS0tLS0tLS0tLQogICBTb3VyY2VzICAgICAgICAgICAgICAxICAgICAgICAgICAgICA2CiAgICAwICAgICAgICAgICAgICAgSlVNUEVSLUo1ICAgICAgUFBJLVgtQzAKICAgIDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUEktWC1DMwpAQCAtNDM1LDExICs0MzUsMTMgQEAKICAqIFVzZWZ1bCBmb3Igc2hvcnRoYW5kIGFjY2VzcyB0byB0aGUgcGFydGljdWxhciBib2FyZCBzdHJ1Y3R1cmUKICAqLwogI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgZGlvMjAwX2JvYXJkICopZGV2LT5ib2FyZF9wdHIpCi0jZGVmaW5lIHRoaXNsYXlvdXQgKCZkaW8yMDBfbGF5b3V0c1soKHN0cnVjdCBkaW8yMDBfYm9hcmQgKilkZXYtPmJvYXJkX3B0ciktPmxheW91dF0pCisjZGVmaW5lIHRoaXNsYXlvdXQgKCZkaW8yMDBfbGF5b3V0c1soKHN0cnVjdCBkaW8yMDBfYm9hcmQgKikgXAorCQkgICAgZGV2LT5ib2FyZF9wdHIpLT5sYXlvdXRdKQogCiAvKiB0aGlzIHN0cnVjdHVyZSBpcyBmb3IgZGF0YSB1bmlxdWUgdG8gdGhpcyBoYXJkd2FyZSBkcml2ZXIuICBJZgogICAgc2V2ZXJhbCBoYXJkd2FyZSBkcml2ZXJzIGtlZXAgc2ltaWxhciBpbmZvcm1hdGlvbiBpbiB0aGlzIHN0cnVjdHVyZSwKLSAgIGZlZWwgZnJlZSB0byBzdWdnZXN0IG1vdmluZyB0aGUgdmFyaWFibGUgdG8gdGhlIHN0cnVjdCBjb21lZGlfZGV2aWNlIHN0cnVjdC4gICovCisgICBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuCisgKi8KIHN0cnVjdCBkaW8yMDBfcHJpdmF0ZSB7CiAjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsJLyogUENJIGRldmljZSAqLwpAQCAtNjAzLDkgKzYwNSw4IEBACiAKIAlzdWJwcml2LT5hY3RpdmUgPSAwOwogCXN1YnByaXYtPmVuYWJsZWRfaXNucyA9IDA7Ci0JaWYgKHN1YnByaXYtPmhhc19pbnRfc2NlKSB7CisJaWYgKHN1YnByaXYtPmhhc19pbnRfc2NlKQogCQlvdXRiKDAsIHN1YnByaXYtPmlvYmFzZSk7Ci0JfQogfQogCiAvKgpAQCAtNjI5LDE2ICs2MzAsMTQgQEAKIAkJLyogRGV0ZXJtaW5lIGludGVycnVwdCBzb3VyY2VzIHRvIGVuYWJsZS4gKi8KIAkJaXNuX2JpdHMgPSAwOwogCQlpZiAoY21kLT5jaGFubGlzdCkgewotCQkJZm9yIChuID0gMDsgbiA8IGNtZC0+Y2hhbmxpc3RfbGVuOyBuKyspIHsKKwkJCWZvciAobiA9IDA7IG4gPCBjbWQtPmNoYW5saXN0X2xlbjsgbisrKQogCQkJCWlzbl9iaXRzIHw9ICgxVSA8PCBDUl9DSEFOKGNtZC0+Y2hhbmxpc3Rbbl0pKTsKLQkJCX0KIAkJfQogCQlpc25fYml0cyAmPSBzdWJwcml2LT52YWxpZF9pc25zOwogCQkvKiBFbmFibGUgaW50ZXJydXB0IHNvdXJjZXMuICovCiAJCXN1YnByaXYtPmVuYWJsZWRfaXNucyA9IGlzbl9iaXRzOwotCQlpZiAoc3VicHJpdi0+aGFzX2ludF9zY2UpIHsKKwkJaWYgKHN1YnByaXYtPmhhc19pbnRfc2NlKQogCQkJb3V0Yihpc25fYml0cywgc3VicHJpdi0+aW9iYXNlKTsKLQkJfQogCX0KIAogCXJldHVybiByZXR2YWw7CkBAIC02NjIsMTQgKzY2MSwxMyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnByaXYtPnNwaW5sb2NrLCBmbGFncyk7CiAJcy0+YXN5bmMtPmludHRyaWcgPSAwOwotCWlmIChzdWJwcml2LT5hY3RpdmUpIHsKKwlpZiAoc3VicHJpdi0+YWN0aXZlKQogCQlldmVudCA9IGRpbzIwMF9zdGFydF9pbnRyKGRldiwgcyk7Ci0JfQorCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3VicHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKIAotCWlmIChldmVudCkgeworCWlmIChldmVudCkKIAkJY29tZWRpX2V2ZW50KGRldiwgcyk7Ci0JfQogCiAJcmV0dXJuIDE7CiB9CkBAIC03MjYsOSArNzI0LDggQEAKIAkJICogUmVlbmFibGUgdGhlbSBOT1cgdG8gbWluaW1pemUgdGhlIHRpbWUgdGhleSBhcmUgZGlzYWJsZWQuCiAJCSAqLwogCQljdXJfZW5hYmxlZCA9IHN1YnByaXYtPmVuYWJsZWRfaXNuczsKLQkJaWYgKHN1YnByaXYtPmhhc19pbnRfc2NlKSB7CisJCWlmIChzdWJwcml2LT5oYXNfaW50X3NjZSkKIAkJCW91dGIoY3VyX2VuYWJsZWQsIHN1YnByaXYtPmlvYmFzZSk7Ci0JCX0KIAogCQlpZiAoc3VicHJpdi0+YWN0aXZlKSB7CiAJCQkvKgpAQCAtNzQ3LDkgKzc0NCw4IEBACiAJCQkJbGVuID0gcy0+YXN5bmMtPmNtZC5jaGFubGlzdF9sZW47CiAJCQkJZm9yIChuID0gMDsgbiA8IGxlbjsgbisrKSB7CiAJCQkJCWNoID0gQ1JfQ0hBTihzLT5hc3luYy0+Y21kLmNoYW5saXN0W25dKTsKLQkJCQkJaWYgKHRyaWdnZXJlZCAmICgxVSA8PCBjaCkpIHsKKwkJCQkJaWYgKHRyaWdnZXJlZCAmICgxVSA8PCBjaCkpCiAJCQkJCQl2YWwgfD0gKDFVIDw8IG4pOwotCQkJCQl9CiAJCQkJfQogCQkJCS8qIFdyaXRlIHRoZSBzY2FuIHRvIHRoZSBidWZmZXIuICovCiAJCQkJaWYgKGNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCB2YWwpKSB7CkBAIC03ODEsOSArNzc3LDggQEAKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3VicHJpdi0+c3BpbmxvY2ssIGZsYWdzKTsKIAotCWlmIChvbGRldmVudHMgIT0gcy0+YXN5bmMtPmV2ZW50cykgeworCWlmIChvbGRldmVudHMgIT0gcy0+YXN5bmMtPmV2ZW50cykKIAkJY29tZWRpX2V2ZW50KGRldiwgcyk7Ci0JfQogCiAJcmV0dXJuICh0cmlnZ2VyZWQgIT0gMCk7CiB9CkBAIC03OTgsOSArNzkzLDkgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnN1YnByaXYtPnNwaW5sb2NrLCBmbGFncyk7Ci0JaWYgKHN1YnByaXYtPmFjdGl2ZSkgeworCWlmIChzdWJwcml2LT5hY3RpdmUpCiAJCWRpbzIwMF9zdG9wX2ludHIoZGV2LCBzKTsKLQl9CisKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdWJwcml2LT5zcGlubG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CkBAIC04NDYsNyArODQxLDggQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gMTsKIAotCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5CisJCSAgIGNvbXBhdGlibGUgKi8KIAogCS8qIHRoZXNlIHRlc3RzIGFyZSB0cnVlIGlmIG1vcmUgdGhhbiBvbmUgX3NyYyBiaXQgaXMgc2V0ICovCiAJaWYgKChjbWQtPnN0YXJ0X3NyYyAmIChjbWQtPnN0YXJ0X3NyYyAtIDEpKSAhPSAwKQpAQCAtOTUyLDkgKzk0OCw4IEBACiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnN1YnByaXYtPnNwaW5sb2NrLCBmbGFncyk7CiAKLQlpZiAoZXZlbnQpIHsKKwlpZiAoZXZlbnQpCiAJCWNvbWVkaV9ldmVudChkZXYsIHMpOwotCX0KIAogCXJldHVybiAwOwogfQpAQCAtOTgwLDkgKzk3NSw4IEBACiAJc3VicHJpdi0+dmFsaWRfaXNucyA9IHZhbGlkX2lzbnM7CiAJc3Bpbl9sb2NrX2luaXQoJnN1YnByaXYtPnNwaW5sb2NrKTsKIAotCWlmIChoYXNfaW50X3NjZSkgeworCWlmIChoYXNfaW50X3NjZSkKIAkJb3V0YigwLCBzdWJwcml2LT5pb2Jhc2UpOwkvKiBEaXNhYmxlIGludGVycnVwdCBzb3VyY2VzLiAqLwotCX0KIAogCXMtPnByaXZhdGUgPSBzdWJwcml2OwogCXMtPnR5cGUgPSBDT01FRElfU1VCRF9ESTsKQEAgLTEwMTMsMTAgKzEwMDcsNyBAQAogCQkJICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpCiB7CiAJc3RydWN0IGRpbzIwMF9zdWJkZXZfaW50ciAqc3VicHJpdiA9IHMtPnByaXZhdGU7Ci0KLQlpZiAoc3VicHJpdikgewotCQlrZnJlZShzdWJwcml2KTsKLQl9CisJa2ZyZWUoc3VicHJpdik7CiB9CiAKIC8qCkBAIC0xMDI3LDkgKzEwMTgsOCBAQAogCXN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYgPSBkOwogCWludCBoYW5kbGVkOwogCi0JaWYgKCFkZXYtPmF0dGFjaGVkKSB7CisJaWYgKCFkZXYtPmF0dGFjaGVkKQogCQlyZXR1cm4gSVJRX05PTkU7Ci0JfQogCiAJaWYgKGRldnByaXYtPmludHJfc2QgPj0gMCkgewogCQloYW5kbGVkID0gZGlvMjAwX2hhbmRsZV9yZWFkX2ludHIoZGV2LApAQCAtMTI2NiwxMCArMTI1Niw3IEBACiAJCQkgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKIAlzdHJ1Y3QgZGlvMjAwX3N1YmRldl9pbnRyICpzdWJwcml2ID0gcy0+cHJpdmF0ZTsKLQotCWlmIChzdWJwcml2KSB7Ci0JCWtmcmVlKHN1YnByaXYpOwotCX0KKwlrZnJlZShzdWJwcml2KTsKIH0KIAogLyoKQEAgLTEzNDgsOSArMTMzNSw4IEBACiAjZW5kaWYKIAl7CiAJCXJldCA9IGRpbzIwMF9yZXF1ZXN0X3JlZ2lvbihkZXYtPm1pbm9yLCBpb2Jhc2UsIERJTzIwMF9JT19TSVpFKTsKLQkJaWYgKHJldCA8IDApIHsKKwkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwotCQl9CiAJfQogCWRldi0+aW9iYXNlID0gaW9iYXNlOwogCkBAIC0xMzcxLDE3ICsxMzU3LDE3IEBACiAJCQlyZXQgPSBkaW8yMDBfc3ViZGV2XzgyNTRfaW5pdChkZXYsIHMsIGlvYmFzZSwKIAkJCQkJCSAgICAgIGxheW91dC0+c2RpbmZvW25dLAogCQkJCQkJICAgICAgbGF5b3V0LT5oYXNfY2xrX2dhdF9zY2UpOwotCQkJaWYgKHJldCA8IDApIHsKKwkJCWlmIChyZXQgPCAwKQogCQkJCXJldHVybiByZXQ7Ci0JCQl9CisKIAkJCWJyZWFrOwogCQljYXNlIHNkXzgyNTU6CiAJCQkvKiBkaWdpdGFsIGkvbyBzdWJkZXZpY2UgKDgyNTUpICovCiAJCQlyZXQgPSBzdWJkZXZfODI1NV9pbml0KGRldiwgcywgMCwKIAkJCQkJICAgICAgIGlvYmFzZSArIGxheW91dC0+c2RpbmZvW25dKTsKLQkJCWlmIChyZXQgPCAwKSB7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlyZXR1cm4gcmV0OwotCQkJfQorCiAJCQlicmVhazsKIAkJY2FzZSBzZF9pbnRyOgogCQkJLyogJ0lOVEVSUlVQVCcgc3ViZGV2aWNlICovCkBAIC0xMzkyLDkgKzEzNzgsOSBAQAogCQkJCQkJCSAgICAgIGxheW91dC0+c2RpbmZvW25dLAogCQkJCQkJCSAgICAgIGxheW91dC0+CiAJCQkJCQkJICAgICAgaGFzX2ludF9zY2UpOwotCQkJCWlmIChyZXQgPCAwKSB7CisJCQkJaWYgKHJldCA8IDApCiAJCQkJCXJldHVybiByZXQ7Ci0JCQkJfQorCiAJCQkJZGV2cHJpdi0+aW50cl9zZCA9IG47CiAJCQl9IGVsc2UgewogCQkJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9VTlVTRUQ7CkBAIC0xNDA3LDkgKzEzOTMsOCBAQAogCX0KIAogCXNkeCA9IGRldnByaXYtPmludHJfc2Q7Ci0JaWYgKHNkeCA+PSAwICYmIHNkeCA8IGRldi0+bl9zdWJkZXZpY2VzKSB7CisJaWYgKHNkeCA+PSAwICYmIHNkeCA8IGRldi0+bl9zdWJkZXZpY2VzKQogCQlkZXYtPnJlYWRfc3ViZGV2ID0gJmRldi0+c3ViZGV2aWNlc1tzZHhdOwotCX0KIAogCWRldi0+Ym9hcmRfbmFtZSA9IHRoaXNib2FyZC0+bmFtZTsKIApAQCAtMTQzNCwxMSArMTQxOSwxMCBAQAogCQlwcmludGsoIihwY2kgJXMpICIsIHBjaV9uYW1lKHBjaV9kZXYpKTsKICNlbmRpZgogCX0KLQlpZiAoaXJxKSB7CisJaWYgKGlycSkKIAkJcHJpbnRrKCIoaXJxICV1JXMpICIsIGlycSwgKGRldi0+aXJxID8gIiIgOiAiIFVOQVZBSUxBQkxFIikpOwotCX0gZWxzZSB7CisJZWxzZQogCQlwcmludGsoIihubyBpcnEpICIpOwotCX0KIAogCXByaW50aygiYXR0YWNoZWRcbiIpOwogCkBAIC0xNDYxLDkgKzE0NDUsOCBAQAogCXByaW50ayhLRVJOX0RFQlVHICJjb21lZGklZDogJXM6IGRldGFjaFxuIiwgZGV2LT5taW5vciwKIAkgICAgICAgRElPMjAwX0RSSVZFUl9OQU1FKTsKIAotCWlmIChkZXYtPmlycSkgeworCWlmIChkZXYtPmlycSkKIAkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7Ci0JfQogCWlmIChkZXYtPnN1YmRldmljZXMpIHsKIAkJbGF5b3V0ID0gdGhpc2xheW91dDsKIAkJZm9yIChuID0gMDsgbiA8IGRldi0+bl9zdWJkZXZpY2VzOyBuKyspIHsKQEAgLTE0ODYsMjIgKzE0NjksMTkgQEAKIAlpZiAoZGV2cHJpdikgewogI2lmZGVmIENPTkZJR19DT01FRElfUENJCiAJCWlmIChkZXZwcml2LT5wY2lfZGV2KSB7Ci0JCQlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJCWlmIChkZXYtPmlvYmFzZSkKIAkJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7Ci0JCQl9CiAJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKIAkJfSBlbHNlCiAjZW5kaWYKIAkJewotCQkJaWYgKGRldi0+aW9iYXNlKSB7CisJCQlpZiAoZGV2LT5pb2Jhc2UpCiAJCQkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIERJTzIwMF9JT19TSVpFKTsKLQkJCX0KIAkJfQogCX0KLQlpZiAoZGV2LT5ib2FyZF9uYW1lKSB7CisJaWYgKGRldi0+Ym9hcmRfbmFtZSkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6ICVzIHJlbW92ZWRcbiIsCiAJCSAgICAgICBkZXYtPm1pbm9yLCBkZXYtPmJvYXJkX25hbWUpOwotCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjMjM2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyMzYuYwppbmRleCAxMDMyYTgxLi5hMzA3ZDY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyMzYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGMyMzYuYwpAQCAtNzgsMTggKzc4LDE4IEBACiAgKi8KIC8qIERpc2FibGUgaW50ZXJydXB0LCBhbHNvIGNsZWFyIGFueSBpbnRlcnJ1cHQgdGhlcmUgKi8KICNkZWZpbmUgUENJMjM2X0lOVFJfRElTQUJMRSAoUExYOTA1Ml9JTlRDU1JfTEkxRU5BQl9ESVNBQkxFRCBcCi0gICAgICAgIHwgUExYOTA1Ml9JTlRDU1JfTEkxUE9MX0hJR0ggXAotICAgICAgICB8IFBMWDkwNTJfSU5UQ1NSX0xJMlBPTF9ISUdIIFwKLSAgICAgICAgfCBQTFg5MDUyX0lOVENTUl9QQ0lFTkFCX0RJU0FCTEVEIFwKLSAgICAgICAgfCBQTFg5MDUyX0lOVENTUl9MSTFTRUxfRURHRSBcCi0gICAgICAgIHwgUExYOTA1Ml9JTlRDU1JfTEkxQ0xSSU5UX0FTU0VSVEVEKQorCXwgUExYOTA1Ml9JTlRDU1JfTEkxUE9MX0hJR0ggXAorCXwgUExYOTA1Ml9JTlRDU1JfTEkyUE9MX0hJR0ggXAorCXwgUExYOTA1Ml9JTlRDU1JfUENJRU5BQl9ESVNBQkxFRCBcCisJfCBQTFg5MDUyX0lOVENTUl9MSTFTRUxfRURHRSBcCisJfCBQTFg5MDUyX0lOVENTUl9MSTFDTFJJTlRfQVNTRVJURUQpCiAvKiBFbmFibGUgaW50ZXJydXB0LCBhbHNvIGNsZWFyIGFueSBpbnRlcnJ1cHQgdGhlcmUuICovCiAjZGVmaW5lIFBDSTIzNl9JTlRSX0VOQUJMRSAoUExYOTA1Ml9JTlRDU1JfTEkxRU5BQl9FTkFCTEVEIFwKLSAgICAgICAgfCBQTFg5MDUyX0lOVENTUl9MSTFQT0xfSElHSCBcCi0gICAgICAgIHwgUExYOTA1Ml9JTlRDU1JfTEkyUE9MX0hJR0ggXAotICAgICAgICB8IFBMWDkwNTJfSU5UQ1NSX1BDSUVOQUJfRU5BQkxFRCBcCi0gICAgICAgIHwgUExYOTA1Ml9JTlRDU1JfTEkxU0VMX0VER0UgXAotICAgICAgICB8IFBMWDkwNTJfSU5UQ1NSX0xJMUNMUklOVF9BU1NFUlRFRCkKKwl8IFBMWDkwNTJfSU5UQ1NSX0xJMVBPTF9ISUdIIFwKKwl8IFBMWDkwNTJfSU5UQ1NSX0xJMlBPTF9ISUdIIFwKKwl8IFBMWDkwNTJfSU5UQ1NSX1BDSUVOQUJfRU5BQkxFRCBcCisJfCBQTFg5MDUyX0lOVENTUl9MSTFTRUxfRURHRSBcCisJfCBQTFg5MDUyX0lOVENTUl9MSTFDTFJJTlRfQVNTRVJURUQpCiAKIC8qCiAgKiBCb2FyZCBkZXNjcmlwdGlvbnMgZm9yIEFtcGxpY29uIFBDMzZBVCBhbmQgUENJMjM2LgpAQCAtMTUwLDEyICsxNTAsMTMgQEAKIAogLyogdGhpcyBzdHJ1Y3R1cmUgaXMgZm9yIGRhdGEgdW5pcXVlIHRvIHRoaXMgaGFyZHdhcmUgZHJpdmVyLiAgSWYKICAgIHNldmVyYWwgaGFyZHdhcmUgZHJpdmVycyBrZWVwIHNpbWlsYXIgaW5mb3JtYXRpb24gaW4gdGhpcyBzdHJ1Y3R1cmUsCi0gICBmZWVsIGZyZWUgdG8gc3VnZ2VzdCBtb3ZpbmcgdGhlIHZhcmlhYmxlIHRvIHRoZSBzdHJ1Y3QgY29tZWRpX2RldmljZSBzdHJ1Y3QuICAqLworICAgZmVlbCBmcmVlIHRvIHN1Z2dlc3QgbW92aW5nIHRoZSB2YXJpYWJsZSB0byB0aGUgc3RydWN0IGNvbWVkaV9kZXZpY2Ugc3RydWN0LgorICovCiBzdHJ1Y3QgcGMyMzZfcHJpdmF0ZSB7CiAjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKIAkvKiBQQ0kgZGV2aWNlICovCiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7Ci0JdW5zaWduZWQgbG9uZyBsY3JfaW9iYXNlOwkvKiBQTFggUENJOTA1MiBjb25maWcgcmVnaXN0ZXJzIGluIFBDSUJBUjEgKi8KKwl1bnNpZ25lZCBsb25nIGxjcl9pb2Jhc2U7IC8qIFBMWCBQQ0k5MDUyIGNvbmZpZyByZWdpc3RlcnMgaW4gUENJQkFSMSAqLwogI2VuZGlmCiAJaW50IGVuYWJsZV9pcnE7CiB9OwpAQCAtMzQ1LDkgKzM0Niw4IEBACiAjZW5kaWYKIAl7CiAJCXJldCA9IHBjMjM2X3JlcXVlc3RfcmVnaW9uKGRldi0+bWlub3IsIGlvYmFzZSwgUEMyMzZfSU9fU0laRSk7Ci0JCWlmIChyZXQgPCAwKSB7CisJCWlmIChyZXQgPCAwKQogCQkJcmV0dXJuIHJldDsKLQkJfQogCX0KIAlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKIApAQCAtMzk5LDExICszOTksMTAgQEAKIAkJcHJpbnRrKCIocGNpICVzKSAiLCBwY2lfbmFtZShwY2lfZGV2KSk7CiAjZW5kaWYKIAl9Ci0JaWYgKGlycSkgeworCWlmIChpcnEpCiAJCXByaW50aygiKGlycSAldSVzKSAiLCBpcnEsIChkZXYtPmlycSA/ICIiIDogIiBVTkFWQUlMQUJMRSIpKTsKLQl9IGVsc2UgeworCWVsc2UKIAkJcHJpbnRrKCIobm8gaXJxKSAiKTsKLQl9CiAKIAlwcmludGsoImF0dGFjaGVkXG4iKTsKIApAQCAtNDIyLDI3ICs0MjEsMjQgQEAKIHsKIAlwcmludGsoS0VSTl9ERUJVRyAiY29tZWRpJWQ6ICVzOiBkZXRhY2hcbiIsIGRldi0+bWlub3IsCiAJICAgICAgIFBDMjM2X0RSSVZFUl9OQU1FKTsKLQlpZiAoZGV2cHJpdikgeworCWlmIChkZXZwcml2KQogCQlwYzIzNl9pbnRyX2Rpc2FibGUoZGV2KTsKLQl9CisKIAlpZiAoZGV2LT5pcnEpCiAJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotCWlmIChkZXYtPnN1YmRldmljZXMpIHsKKwlpZiAoZGV2LT5zdWJkZXZpY2VzKQogCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgMCk7Ci0JfQogCWlmIChkZXZwcml2KSB7CiAjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKIAkJaWYgKGRldnByaXYtPnBjaV9kZXYpIHsKLQkJCWlmIChkZXYtPmlvYmFzZSkgeworCQkJaWYgKGRldi0+aW9iYXNlKQogCQkJCWNvbWVkaV9wY2lfZGlzYWJsZShkZXZwcml2LT5wY2lfZGV2KTsKLQkJCX0KIAkJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOwogCQl9IGVsc2UKICNlbmRpZgogCQl7Ci0JCQlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJCWlmIChkZXYtPmlvYmFzZSkKIAkJCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgUEMyMzZfSU9fU0laRSk7Ci0JCQl9CiAJCX0KIAl9CiAJaWYgKGRldi0+Ym9hcmRfbmFtZSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjaTIyNC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjaTIyNC5jCmluZGV4IGQ5ODM2ODcuLmI0MWU1ZTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYW1wbGNfcGNpMjI0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2FtcGxjX3BjaTIyNC5jCkBAIC0xNTM2LDIwICsxNTM2LDEyIEBACiAKIAkJcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CiAJCS8qIEFPIHN1YmRldmljZSAqLwotCQlpZiAocy0+cmFuZ2VfdGFibGVfbGlzdCkgewotCQkJa2ZyZWUocy0+cmFuZ2VfdGFibGVfbGlzdCk7Ci0JCX0KKwkJa2ZyZWUocy0+cmFuZ2VfdGFibGVfbGlzdCk7CiAJfQogCWlmIChkZXZwcml2KSB7Ci0JCWlmIChkZXZwcml2LT5hb19yZWFkYmFjaykgewotCQkJa2ZyZWUoZGV2cHJpdi0+YW9fcmVhZGJhY2spOwotCQl9Ci0JCWlmIChkZXZwcml2LT5hb19zY2FuX3ZhbHMpIHsKLQkJCWtmcmVlKGRldnByaXYtPmFvX3NjYW5fdmFscyk7Ci0JCX0KLQkJaWYgKGRldnByaXYtPmFvX3NjYW5fb3JkZXIpIHsKLQkJCWtmcmVlKGRldnByaXYtPmFvX3NjYW5fb3JkZXIpOwotCQl9CisJCWtmcmVlKGRldnByaXYtPmFvX3JlYWRiYWNrKTsKKwkJa2ZyZWUoZGV2cHJpdi0+YW9fc2Nhbl92YWxzKTsKKwkJa2ZyZWUoZGV2cHJpdi0+YW9fc2Nhbl9vcmRlcik7CiAJCWlmIChkZXZwcml2LT5wY2lfZGV2KSB7CiAJCQlpZiAoZGV2LT5pb2Jhc2UpIHsKIAkJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvYzZ4ZGlnaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jNnhkaWdpby5jCmluZGV4IGFiYjA1MzIuLmZiMGQ1ZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jNnhkaWdpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jNnhkaWdpby5jCkBAIC00NSw3ICs0NSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvcG5wLmg+CiAKICNpbmNsdWRlICIuLi9jb21lZGlkZXYuaCIKQEAgLTIyMCwxMSArMjIwLDExIEBACiAJLyogcHJpbnRrKCJJbnNpZGUgQzZYX2VuY0lucHV0XG4iKTsgKi8KIAogCWVuYy52YWx1ZSA9IDA7Ci0JaWYgKGNoYW5uZWwgPT0gMCkgeworCWlmIChjaGFubmVsID09IDApCiAJCXBwY21kID0gMHg0ODsKLQl9IGVsc2UgeworCWVsc2UKIAkJcHBjbWQgPSAweDUwOwotCX0KKwogCVdyaXRlQnl0ZVRvSHdQb3J0KGJhc2VBZGRyLCBwcGNtZCk7CiAJdG1wID0gUmVhZEJ5dGVGcm9tSHdQb3J0KGJhc2VBZGRyICsgMSk7CiAJd2hpbGUgKCgodG1wICYgMHg4MCkgPT0gMCkgJiYgKHRpbWVvdXQgPCBDNlhESUdJT19USU1FX09VVCkpIHsKQEAgLTM5MSw5ICszOTEsOCBAQAogCWludCBuOwogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAKLQlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKSB7CisJZm9yIChuID0gMDsgbiA8IGluc24tPm47IG4rKykKIAkJZGF0YVtuXSA9IChDNlhfZW5jSW5wdXQoZGV2LT5pb2Jhc2UsIGNoYW4pICYgMHhmZmZmZmYpOwotCX0KIAogCXJldHVybiBuOwogfQpAQCAtNDIwLDkgKzQxOSw5IEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcG5wX2RldmljZV9pZCBjNnhkaWdpb19wbnBfdGJsW10gPSB7CiAJLyogU3RhbmRhcmQgTFBUIFByaW50ZXIgUG9ydCAqLwotCXsuaWQgPSAiUE5QMDQwMCIsLmRyaXZlcl9kYXRhID0gMH0sCisJey5pZCA9ICJQTlAwNDAwIiwgLmRyaXZlcl9kYXRhID0gMH0sCiAJLyogRUNQIFByaW50ZXIgUG9ydCAqLwotCXsuaWQgPSAiUE5QMDQwMSIsLmRyaXZlcl9kYXRhID0gMH0sCisJey5pZCA9ICJQTlAwNDAxIiwgLmRyaXZlcl9kYXRhID0gMH0sCiAJe30KIH07CiAKQEAgLTQ1MiwxNSArNDUxLDE0IEBACiAJaWYgKHJlc3VsdCA8IDApCiAJCXJldHVybiByZXN1bHQ7CiAKLQkvKiAgTWFrZSBzdXJlIHRoYXQgUG5QIHBvcnRzIGdldHMgYWN0aXZhdGVkICovCisJLyogIE1ha2Ugc3VyZSB0aGF0IFBuUCBwb3J0cyBnZXQgYWN0aXZhdGVkICovCiAJcG5wX3JlZ2lzdGVyX2RyaXZlcigmYzZ4ZGlnaW9fcG5wX2RyaXZlcik7CiAKIAlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKLQlpZiAoaXJxID4gMCkgeworCWlmIChpcnEgPiAwKQogCQlwcmludGsoImNvbWVkaSVkOiBpcnEgPSAldSBpZ25vcmVkXG4iLCBkZXYtPm1pbm9yLCBpcnEpOwotCX0gZWxzZSBpZiAoaXJxID09IDApIHsKKwllbHNlIGlmIChpcnEgPT0gMCkKIAkJcHJpbnRrKCJjb21lZGklZDogbm8gaXJxXG4iLCBkZXYtPm1pbm9yKTsKLQl9CiAKIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKIAkvKiBwd20gb3V0cHV0IHN1YmRldmljZSAqLwpAQCAtNDgzLDE5ICs0ODEsMTkgQEAKIAlzLT5tYXhkYXRhID0gMHhmZmZmZmY7CiAJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfdW5rbm93bjsKIAotCS8qICAgICAgICAgICBzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsgKi8KKwkvKglzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsgKi8KIAkvKiBwd20gb3V0cHV0IHN1YmRldmljZSAqLwotCS8qICAgICAgIHMtPnR5cGUgPSBDT01FRElfU1VCRF9DT1VOVEVSOyAgLy8gTm90IHN1cmUgd2hhdCB0byBwdXQgaGVyZSAqLwotCS8qICAgICAgIHMtPnN1YmRldl9mbGFncyA9IFNERl9XUklURUFCTEU7ICovCi0JLyogICAgICAgcy0+bl9jaGFuID0gMTsgKi8KLQkvKiAgICAgICBzLT50cmlnWzBdID0gYzZ4ZGlnaW9fZWlfaW5pdDsgKi8KLQkvKiAgICAgICBzLT5pbnNuX3JlYWQgPSBjNnhkaWdpb19laV9pbml0X2luc25fcmVhZDsgKi8KLQkvKiAgICAgICBzLT5pbnNuX3dyaXRlID0gYzZ4ZGlnaW9fZWlfaW5pdF9pbnNuX3dyaXRlOyAqLwotCS8qICAgICAgIHMtPm1heGRhdGEgPSAweEZGRkY7ICAvLyBSZWFsbHkganVzdCBhIGRvbid0IGNhcmUgKi8KLQkvKiAgICAgICBzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV91bmtub3duOyAvLyBOb3Qgc3VyZSB3aGF0IHRvIHB1dCBoZXJlICovCisJLyoJcy0+dHlwZSA9IENPTUVESV9TVUJEX0NPVU5URVI7ICAvLyBOb3Qgc3VyZSB3aGF0IHRvIHB1dCBoZXJlICovCisJLyoJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1dSSVRFQUJMRTsgKi8KKwkvKglzLT5uX2NoYW4gPSAxOyAqLworCS8qCXMtPnRyaWdbMF0gPSBjNnhkaWdpb19laV9pbml0OyAqLworCS8qCXMtPmluc25fcmVhZCA9IGM2eGRpZ2lvX2VpX2luaXRfaW5zbl9yZWFkOyAqLworCS8qCXMtPmluc25fd3JpdGUgPSBjNnhkaWdpb19laV9pbml0X2luc25fd3JpdGU7ICovCisJLyoJcy0+bWF4ZGF0YSA9IDB4RkZGRjsgIC8vIFJlYWxseSBqdXN0IGEgZG9uJ3QgY2FyZSAqLworCS8qCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX3Vua25vd247IC8vIE5vdCBzdXJlIHdoYXQgdG8gcHV0IGhlcmUgKi8KIAotCS8qICBJIHdpbGwgY2FsbCB0aGlzIGluaXQgYW55d2F5IGJ1dCBtb3JlIHRoYW4gbGlrZWx5IHRoZSBEU1AgYm9hcmQgd2lsbCBub3QgYmUgY29ubmVjdCAqLwotCS8qICB3aGVuIGRldmljZSBkcml2ZXIgaXMgbG9hZGVkLiAqLworCS8qICBJIHdpbGwgY2FsbCB0aGlzIGluaXQgYW55d2F5IGJ1dCBtb3JlIHRoYW4gbGlrZWx5IHRoZSBEU1AgYm9hcmQgKi8KKwkvKiAgd2lsbCBub3QgYmUgY29ubmVjdGVkIHdoZW4gZGV2aWNlIGRyaXZlciBpcyBsb2FkZWQuICovCiAJYm9hcmRfaW5pdChkZXYpOwogCiAJcmV0dXJuIDA7CkBAIC01MDMsMTYgKzUwMSwxNyBAQAogCiBzdGF0aWMgaW50IGM2eGRpZ2lvX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotLyogYm9hcmRfaGFsdChkZXYpOyAgbWF5IG5vdCBuZWVkIHRoaXMgKi8KKwkvKiBib2FyZF9oYWx0KGRldik7ICBtYXkgbm90IG5lZWQgdGhpcyAqLwogCiAJcHJpbnRrKCJjb21lZGklZDogYzZ4ZGlnaW86IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CiAKLQlpZiAoZGV2LT5pb2Jhc2UpIHsKKwlpZiAoZGV2LT5pb2Jhc2UpCiAJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBDNlhESUdJT19TSVpFKTsKLQl9Ci0JaWYgKGRldi0+aXJxKSB7CisKKwkvKiAgTm90IHVzaW5nIElSUSBzbyBJIGFtIG5vdCBzdXJlIGlmIEkgbmVlZCB0aGlzICovCisJaWYgKGRldi0+aXJxKQogCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQl9CQkJLyogIE5vdCB1c2luZyBJUlEgc28gSSBhbSBub3Qgc3VyZSBpZiBJIG5lZWQgdGhpcyAqLworCiAJcG5wX3VucmVnaXN0ZXJfZHJpdmVyKCZjNnhkaWdpb19wbnBfZHJpdmVyKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRhcy5jCmluZGV4IGYzZTY2YzQuLjQzNDU5MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkYXMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGFzLmMKQEAgLTUxOCw3ICs1MTgsNyBAQAogc3RhdGljIGludCB0cmltcG90Xzg0MDJfd3JpdGUoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNoYW5uZWwsCiAJCQkgICAgICB1aW50OF90IHZhbHVlKTsKIHN0YXRpYyBpbnQgbnZyYW1fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYWRkcmVzcywKLQkJICAgICAgdWludDhfdCAqIGRhdGEpOworCQkgICAgICB1aW50OF90ICpkYXRhKTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY2FsX2VuYWJsZV9iaXRzKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7CkBAIC03NjAsOSArNzYwLDggQEAKIAlpZiAoZGV2LT5zdWJkZXZpY2VzKQogCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgMik7CiAJaWYgKGRldnByaXYgJiYgZGV2cHJpdi0+cGNpX2RldikgewotCQlpZiAoZGV2cHJpdi0+czU5MzNfY29uZmlnKSB7CisJCWlmIChkZXZwcml2LT5zNTkzM19jb25maWcpCiAJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7Ci0JCX0KIAkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CiAJfQogCkBAIC0xMjQ4LDkgKzEyNDcsOCBAQAogCQkJCQljbWQtPmZsYWdzICYgVFJJR19ST1VORF9NQVNLKTsKIAogCS8qICBzZXQgbnVtYmVyIG9mIGNvbnZlcnNpb25zICovCi0JaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCiAJCWRldnByaXYtPmNvdW50ID0gY21kLT5jaGFubGlzdF9sZW4gKiBjbWQtPnN0b3BfYXJnOwotCX0KIAkvKiAgZW5hYmxlIGludGVycnVwdHMgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOwogCWRldnByaXYtPmFkY19maWZvX2JpdHMgfD0gSU5URTsKQEAgLTE0NDksOSArMTQ0Nyw4IEBACiAJCQkgICBkZXZwcml2LT5hb19kaXZpc29yMiwgMik7CiAJfQogCS8qICBzZXQgbnVtYmVyIG9mIGNvbnZlcnNpb25zICovCi0JaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCiAJCWRldnByaXYtPmFvX2NvdW50ID0gY21kLT5jaGFubGlzdF9sZW4gKiBjbWQtPnN0b3BfYXJnOwotCX0KIAkvKiAgc2V0IHBhY2VyIHNvdXJjZSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CiAJc3dpdGNoIChjbWQtPnNjYW5fYmVnaW5fc3JjKSB7CkBAIC0xNDk0LDkgKzE0OTEsOCBAQAogCQkJCQkgICAgICAgbnVtX3BvaW50cyAqIHNpemVvZihzaG9ydCkpOwogCW51bV9wb2ludHMgPSBudW1fYnl0ZXMgLyBzaXplb2Yoc2hvcnQpOwogCi0JaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfQ09VTlQpCiAJCWRldnByaXYtPmFvX2NvdW50IC09IG51bV9wb2ludHM7Ci0JfQogCS8qICB3cml0ZSBkYXRhIHRvIGJvYXJkJ3MgZmlmbyAqLwogCW91dHN3KGRldnByaXYtPmFvX3JlZ2lzdGVycyArIERBQ0RBVEEsIGRldnByaXYtPmFvX2J1ZmZlciwgbnVtX2J5dGVzKTsKIApAQCAtMTUzNCw5ICsxNTMwLDggQEAKIAlzdGF0aWMgY29uc3QgaW50IHRpbWVvdXQgPSAxMDAwMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKGRldi0+YXR0YWNoZWQgPT0gMCkgeworCWlmIChkZXYtPmF0dGFjaGVkID09IDApCiAJCXJldHVybiBJUlFfTk9ORTsKLQl9CiAKIAlhc3luYyA9IHMtPmFzeW5jOwogCWFzeW5jLT5ldmVudHMgPSAwOwpAQCAtMTU1OCwxNSArMTU1MywxMyBAQAogCiAJc3RhdHVzID0gaW53KGRldnByaXYtPmNvbnRyb2xfc3RhdHVzICsgSU5UX0FEQ0ZJRk8pOwogI2lmZGVmIENCX1BDSURBU19ERUJVRwotCWlmICgoc3RhdHVzICYgKElOVCB8IEVPQUkgfCBMQURGVUwgfCBEQUhGSSB8IERBRU1JKSkgPT0gMCkgeworCWlmICgoc3RhdHVzICYgKElOVCB8IEVPQUkgfCBMQURGVUwgfCBEQUhGSSB8IERBRU1JKSkgPT0gMCkKIAkJY29tZWRpX2Vycm9yKGRldiwgInNwdXJpb3VzIGludGVycnVwdCIpOwotCX0KICNlbmRpZgogCiAJLyogIGNoZWNrIGZvciBhbmFsb2cgb3V0cHV0IGludGVycnVwdCAqLwotCWlmIChzdGF0dXMgJiAoREFIRkkgfCBEQUVNSSkpIHsKKwlpZiAoc3RhdHVzICYgKERBSEZJIHwgREFFTUkpKQogCQloYW5kbGVfYW9faW50ZXJydXB0KGRldiwgc3RhdHVzKTsKLQl9CiAJLyogIGNoZWNrIGZvciBhbmFsb2cgaW5wdXQgaW50ZXJydXB0cyAqLwogCS8qICBpZiBmaWZvIGhhbGYtZnVsbCAqLwogCWlmIChzdGF0dXMgJiBBREhGSSkgewpAQCAtMTY3NSw5ICsxNjY4LDggQEAKIAkJCQkJICAgICAgIG51bV9wb2ludHMgKiBzaXplb2Yoc2hvcnQpKTsKIAkJbnVtX3BvaW50cyA9IG51bV9ieXRlcyAvIHNpemVvZihzaG9ydCk7CiAKLQkJaWYgKGFzeW5jLT5jbWQuc3RvcF9zcmMgPT0gVFJJR19DT1VOVCkgeworCQlpZiAoYXN5bmMtPmNtZC5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQogCQkJZGV2cHJpdi0+YW9fY291bnQgLT0gbnVtX3BvaW50czsKLQkJfQogCQkvKiAgd3JpdGUgZGF0YSB0byBib2FyZCdzIGZpZm8gKi8KIAkJb3V0c3coZGV2cHJpdi0+YW9fcmVnaXN0ZXJzICsgREFDREFUQSwgZGV2cHJpdi0+YW9fYnVmZmVyLAogCQkgICAgICBudW1fcG9pbnRzKTsKQEAgLTE4NTIsNyArMTg0NCw3IEBACiB9CiAKIHN0YXRpYyBpbnQgbnZyYW1fcmVhZChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYWRkcmVzcywKLQkJICAgICAgdWludDhfdCAqIGRhdGEpCisJCQl1aW50OF90ICpkYXRhKQogewogCXVuc2lnbmVkIGxvbmcgaW9iYXNlID0gZGV2cHJpdi0+czU5MzNfY29uZmlnOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGRhLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGRhLmMKaW5kZXggNzgyMzU3Ny4uODE4MjlkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRkYS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkZGEuYwpAQCAtNDEwLDkgKzQxMCw4IEBACiAgKi8KIAlpZiAoZGV2cHJpdikgewogCQlpZiAoZGV2cHJpdi0+cGNpX2RldikgewotCQkJaWYgKGRldnByaXYtPmRhYykgeworCQkJaWYgKGRldnByaXYtPmRhYykKIAkJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7Ci0JCQl9CiAJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKIAkJfQogCX0KQEAgLTY3Nyw5ICs2NzYsOCBAQAogCiAJZm9yIChpID0gMTsgaSA8PSB2YWx1ZV93aWR0aDsgaSsrKSB7CiAJCS8qICByZWFkIGJpdHMgbW9zdCBzaWduaWZpY2FudCBiaXQgZmlyc3QgKi8KLQkJaWYgKGlud19wKGRldnByaXYtPmRhYyArIERBQ0FMSUJSQVRJT04xKSAmIFNFUklBTF9PVVRfQklUKSB7CisJCWlmIChpbndfcChkZXZwcml2LT5kYWMgKyBEQUNBTElCUkFUSU9OMSkgJiBTRVJJQUxfT1VUX0JJVCkKIAkJCXZhbHVlIHw9IDEgPDwgKHZhbHVlX3dpZHRoIC0gaSk7Ci0JCX0KIAl9CiAKIAlyZXR1cm4gdmFsdWU7CkBAIC03MTYsOSArNzE0LDggQEAKIAkvKiAgc2VuZCBzZXJpYWwgb3V0cHV0IHN0cmVhbSB0byBlZXByb20gKi8KIAljYWwyX2JpdHMgPSBTRUxFQ1RfRUVQUk9NX0JJVCB8IERFU0VMRUNUX1JFRl9EQUNfQklUIHwgRFVNTVlfQklUOwogCS8qICBkZWFjdGl2YXRlIGNhbGRhY3MgKG9uZSBjYWxkYWMgZm9yIGV2ZXJ5IHR3byBjaGFubmVscykgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbWF4X251bV9jYWxkYWNzOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X251bV9jYWxkYWNzOyBpKyspCiAJCWNhbDJfYml0cyB8PSBERVNFTEVDVF9DQUxEQUNfQklUKGkpOwotCX0KIAlvdXR3X3AoY2FsMl9iaXRzLCBkZXZwcml2LT5kYWMgKyBEQUNBTElCUkFUSU9OMik7CiAKIAkvKiAgdGVsbCBlZXByb20gd2Ugd2FudCB0byByZWFkICovCkBAIC03NTYsOSArNzUzLDggQEAKICovCiAJY2FsMl9iaXRzID0gREVTRUxFQ1RfUkVGX0RBQ19CSVQgfCBEVU1NWV9CSVQ7CiAJLyogIGRlYWN0aXZhdGUgY2FsZGFjcyAob25lIGNhbGRhYyBmb3IgZXZlcnkgdHdvIGNoYW5uZWxzKSAqLwotCWZvciAoaSA9IDA7IGkgPCBtYXhfbnVtX2NhbGRhY3M7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBtYXhfbnVtX2NhbGRhY3M7IGkrKykKIAkJY2FsMl9iaXRzIHw9IERFU0VMRUNUX0NBTERBQ19CSVQoaSk7Ci0JfQogCS8qICBhY3RpdmF0ZSB0aGUgY2FsZGFjIHdlIHdhbnQgKi8KIAljYWwyX2JpdHMgJj0gfkRFU0VMRUNUX0NBTERBQ19CSVQoY2FsZGFjKTsKIAlvdXR3X3AoY2FsMl9iaXRzLCBkZXZwcml2LT5kYWMgKyBEQUNBTElCUkFUSU9OMik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpZGlvLmMKaW5kZXggN2RhYWQwYS4uMzhjY2QxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaWRpby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2lkaW8uYwpAQCAtMjgzLDE3ICsyODMsMTUgQEAKIAlwcmludGsoImNvbWVkaSVkOiBjYl9wY2lkaW86IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CiAJaWYgKGRldnByaXYpIHsKIAkJaWYgKGRldnByaXYtPnBjaV9kZXYpIHsKLQkJCWlmIChkZXZwcml2LT5kaW9fcmVnX2Jhc2UpIHsKKwkJCWlmIChkZXZwcml2LT5kaW9fcmVnX2Jhc2UpCiAJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOwotCQkJfQogCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CiAJCX0KIAl9CiAJaWYgKGRldi0+c3ViZGV2aWNlcykgewogCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IHRoaXNib2FyZC0+bl84MjU1OyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IHRoaXNib2FyZC0+bl84MjU1OyBpKyspCiAJCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgaSk7Ci0JCX0KIAl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRhcy5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kYXMuYwppbmRleCBjYmJjYTA1Li4yZTYxNzI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRhcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2ltZGFzLmMKQEAgLTMzMCwxMSArMzMwLDEwIEBACiAKIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgMjsKIAkvKiBkaWdpdGFsIGkvbyBzdWJkZXZpY2UgKi8KLQlpZiAodGhpc2JvYXJkLT5oYXNfZGlvKSB7CisJaWYgKHRoaXNib2FyZC0+aGFzX2RpbykKIAkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIE5VTEwsIGRldnByaXYtPkJBRFI0KTsKLQl9IGVsc2UgeworCWVsc2UKIAkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKLQl9CiAKIAlwcmludGsoImF0dGFjaGVkXG4iKTsKIApAQCAtMzY1LDkgKzM2NCw4IEBACiAJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwogCWlmIChkZXZwcml2KSB7CiAJCWlmIChkZXZwcml2LT5wY2lfZGV2KSB7Ci0JCQlpZiAoZGV2cHJpdi0+QkFEUjApIHsKKwkJCWlmIChkZXZwcml2LT5CQURSMCkKIAkJCQljb21lZGlfcGNpX2Rpc2FibGUoZGV2cHJpdi0+cGNpX2Rldik7Ci0JCQl9CiAJCQlwY2lfZGV2X3B1dChkZXZwcml2LT5wY2lfZGV2KTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2ltZGRhLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY2JfcGNpbWRkYS5jCmluZGV4IDk4MGZhMGEuLmUzMmEzMTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9jYl9wY2ltZGRhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NiX3BjaW1kZGEuYwpAQCAtMjg0LDExICsyODQsMTAgQEAKIAlzLT5uX2NoYW4gPSB0aGlzYm9hcmQtPmFvX2NoYW5zOwogCXMtPm1heGRhdGEgPSBmaWd1cmVfb3V0X21heGRhdGEodGhpc2JvYXJkLT5hb19iaXRzKTsKIAkvKiB0aGlzIGlzIGhhcmQtY29kZWQgaGVyZSAqLwotCWlmIChpdC0+b3B0aW9uc1syXSkgeworCWlmIChpdC0+b3B0aW9uc1syXSkKIAkJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfYmlwb2xhcjEwOwotCX0gZWxzZSB7CisJZWxzZQogCQlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9iaXBvbGFyNTsKLQl9CiAJcy0+aW5zbl93cml0ZSA9ICZhb193aW5zbjsKIAlzLT5pbnNuX3JlYWQgPSAmYW9fcmluc247CiAKQEAgLTMzNyw5ICszMzYsOCBAQAogCQl9CiAKIAkJaWYgKGRldnByaXYtPnBjaV9kZXYpIHsKLQkJCWlmIChkZXZwcml2LT5yZWdpc3RlcnMpIHsKKwkJCWlmIChkZXZwcml2LT5yZWdpc3RlcnMpCiAJCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOwotCQkJfQogCQkJcGNpX2Rldl9wdXQoZGV2cHJpdi0+cGNpX2Rldik7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbWVkaV9ib25kLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2JvbmQuYwppbmRleCBjZjM5YTI0Li5kNzI2MGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2JvbmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29tZWRpX2JvbmQuYwpAQCAtNDE3LDcgKzQxNyw3IEBACiAJCWludCBzZGV2ID0gLTEsIG5jaGFucywgdG1wOwogCQlzdHJ1Y3QgQm9uZGVkRGV2aWNlICpiZGV2ID0gTlVMTDsKIAotCQlpZiAobWlub3IgPCAwIHx8IG1pbm9yID4gQ09NRURJX05VTV9CT0FSRF9NSU5PUlMpIHsKKwkJaWYgKG1pbm9yIDwgMCB8fCBtaW5vciA+PSBDT01FRElfTlVNX0JPQVJEX01JTk9SUykgewogCQkJRVJST1IoIk1pbm9yICVkIGlzIGludmFsaWQhXG4iLCBtaW5vcik7CiAJCQlyZXR1cm4gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2NvbnRlY19wY2lfZGlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29udGVjX3BjaV9kaW8uYwppbmRleCBiMTZkNjUyLi45NTExODE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29udGVjX3BjaV9kaW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvY29udGVjX3BjaV9kaW8uYwpAQCAtMTczLDkgKzE3Myw4IEBACiAJcHJpbnRrKCJjb21lZGklZDogY29udGVjOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOwogCiAJaWYgKGRldnByaXYgJiYgZGV2cHJpdi0+cGNpX2RldikgewotCQlpZiAoZGV2LT5pb2Jhc2UpIHsKKwkJaWYgKGRldi0+aW9iYXNlKQogCQkJY29tZWRpX3BjaV9kaXNhYmxlKGRldnByaXYtPnBjaV9kZXYpOwotCQl9CiAJCXBjaV9kZXZfcHV0KGRldnByaXYtPnBjaV9kZXYpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczA4X2NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDhfY3MuYwppbmRleCA5Yjk0NWU1Li5mMTJlZjFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDhfY3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzMDhfY3MuYwpAQCAtMzQsNyArMzQsNyBAQAogZGFzMDggZHJpdmVyLgogCiBPcHRpb25zIChmb3IgcGNtLWRhczA4KToKLSAgICAgICAgTk9ORQorCU5PTkUKIAogQ29tbWFuZCBzdXBwb3J0IGRvZXMgbm90IGV4aXN0LCBidXQgY291bGQgYmUgYWRkZWQgZm9yIHRoaXMgYm9hcmQuCiAqLwpAQCAtNTIsNyArNTIsNyBAQAogI2luY2x1ZGUgPHBjbWNpYS9jaXN0cGwuaD4KICNpbmNsdWRlIDxwY21jaWEvZHMuaD4KIAotc3RhdGljIHN0cnVjdCBwY21jaWFfZGV2aWNlICpjdXJfZGV2ID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgcGNtY2lhX2RldmljZSAqY3VyX2RldjsKIAogI2RlZmluZSB0aGlzYm9hcmQgKChjb25zdCBzdHJ1Y3QgZGFzMDhfYm9hcmRfc3RydWN0ICopZGV2LT5ib2FyZF9wdHIpCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM2NDAyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzNjQwMi5jCmluZGV4IDkyNDg3ZjUuLmE0MDRhMTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM2NDAyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczY0MDIuYwpAQCAtNDUsNyArNDUsNyBAQAogCiAjZGVmaW5lIERBUzY0MDJfU0laRSAxNgogCi0jZGVmaW5lIE5fV09SRFMgMzAwMCo2NAorI2RlZmluZSBOX1dPUkRTICgzMDAwKjY0KQogCiAjZGVmaW5lIFNUT1AgICAgMAogI2RlZmluZSBTVEFSVCAgIDEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM4MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kYXM4MDAuYwppbmRleCBlY2I5N2NkLi5hYWRjNDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZGFzODAwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RhczgwMC5jCkBAIC0zOTksOSArMzk5LDggQEAKIAkJfSBlbHNlIHsKIAkJCWZpZm9fZW1wdHkgPSAwOwkvKiAgY2lvLWRhczgwMi8xNiBoYXMgbm8gZmlmbyBlbXB0eSBzdGF0dXMgYml0ICovCiAJCX0KLQkJaWYgKGZpZm9fZW1wdHkpIHsKKwkJaWYgKGZpZm9fZW1wdHkpCiAJCQlicmVhazsKLQkJfQogCQkvKiBzdHJpcCBvZmYgZXh0cmFuZW91cyBiaXRzIGZvciAxMiBiaXQgY2FyZHMgKi8KIAkJaWYgKHRoaXNib2FyZC0+cmVzb2x1dGlvbiA9PSAxMikKIAkJCWRhdGFQb2ludCA9IChkYXRhUG9pbnQgPj4gNCkgJiAweGZmZjsKQEAgLTQ1Nyw5ICs0NTYsOCBAQAogCWludCBib2FyZDsKIAogCXByaW50aygiY29tZWRpJWQ6IGRhczgwMDogaW8gMHglbHgiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOwotCWlmIChpcnEpIHsKKwlpZiAoaXJxKQogCQlwcmludGsoIiwgaXJxICV1IiwgaXJxKTsKLQl9CiAJcHJpbnRrKCJcbiIpOwogCiAJLyogYWxsb2NhdGUgYW5kIGluaXRpYWxpemUgZGV2LT5wcml2YXRlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZG1tMzJhdC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2RtbTMyYXQuYwppbmRleCA5ZGI5YTQ2Li5kNWNiZDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZG1tMzJhdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kbW0zMmF0LmMKQEAgLTEwNDgsMTEgKzEwNDgsMTAgQEAKIAkgKiB2YWx1ZSBDT01FRElfSU5QVVQgb3IgQ09NRURJX09VVFBVVC4gKi8KIAogCS8qIGlmIG91dHB1dCBjbGVhciB0aGUgYml0LCBvdGhlcndpc2Ugc2V0IGl0ICovCi0JaWYgKGRhdGFbMF0gPT0gQ09NRURJX09VVFBVVCkgeworCWlmIChkYXRhWzBdID09IENPTUVESV9PVVRQVVQpCiAJCWRldnByaXYtPmRpb19jb25maWcgJj0gfmNoYW5iaXQ7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWRldnByaXYtPmRpb19jb25maWcgfD0gY2hhbmJpdDsKLQl9CiAJLyogZ2V0IGFjY2VzcyB0byB0aGUgRElPIHJlZ3MgKi8KIAlkbW1fb3V0YihkZXYsIERNTTMyQVRfQ05UUkwsIERNTTMyQVRfRElPQUNDKTsKIAkvKiBzZXQgdGhlIERJTydzIHRvIHRoZSBuZXcgY29uZmlndXJhdGlvbiBzZXR0aW5nICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODAxLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODAxLmMKaW5kZXggN2I5YWY1ZC4uM2YzNjVhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgwMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MDEuYwpAQCAtMTgsMTAgKzE4LDEwIEBACiAgIFsxXSAtIHVudXNlZAogICBbMl0gLSBBL0QgcmVmZXJlbmNlIDA9ZGlmZmVyZW50aWFsLCAxPXNpbmdsZS1lbmRlZAogICBbM10gLSBBL0QgcmFuZ2UKLSAgICAgICAgICAwID0gWy0xMCwxMF0KKwkgIDAgPSBbLTEwLCAxMF0KIAkgIDEgPSBbMCwxMF0KICAgWzRdIC0gRC9BIDAgcmFuZ2UKLSAgICAgICAgICAwID0gWy0xMCwxMF0KKwkgIDAgPSBbLTEwLCAxMF0KIAkgIDEgPSBbLTUsNV0KIAkgIDIgPSBbLTIuNSwyLjVdCiAJICAzID0gWzAsMTBdCkBAIC0yNzksOSArMjc5LDggQEAKIAogCWRvIHsKIAkJc3RhdCA9IGluYl9wKGRldi0+aW9iYXNlICsgRFQyODAxX1NUQVRVUyk7Ci0JCWlmIChzdGF0ICYgKERUX1NfQ09NUE9TSVRFX0VSUk9SIHwgRFRfU19SRUFEWSkpIHsKKwkJaWYgKHN0YXQgJiAoRFRfU19DT01QT1NJVEVfRVJST1IgfCBEVF9TX1JFQURZKSkKIAkJCXJldHVybiBzdGF0OwotCQl9CiAJCWlmIChzdGF0ICYgRFRfU19EQVRBX09VVF9SRUFEWSkgewogCQkJKmRhdGEgPSBpbmJfcChkZXYtPmlvYmFzZSArIERUMjgwMV9EQVRBKTsKIAkJCXJldHVybiAwOwpAQCAtMzE1LDkgKzMxNCw4IEBACiAJZG8gewogCQlzdGF0ID0gaW5iX3AoZGV2LT5pb2Jhc2UgKyBEVDI4MDFfU1RBVFVTKTsKIAotCQlpZiAoc3RhdCAmIERUX1NfQ09NUE9TSVRFX0VSUk9SKSB7CisJCWlmIChzdGF0ICYgRFRfU19DT01QT1NJVEVfRVJST1IpCiAJCQlyZXR1cm4gc3RhdDsKLQkJfQogCQlpZiAoIShzdGF0ICYgRFRfU19EQVRBX0lOX0ZVTEwpKSB7CiAJCQlvdXRiX3AoZGF0YSAmIDB4ZmYsIGRldi0+aW9iYXNlICsgRFQyODAxX0RBVEEpOwogCQkJcmV0dXJuIDA7CkBAIC0zNTQsMTggKzM1MiwxNSBAQAogCWludCBzdGF0OwogCiAJc3RhdCA9IGluYl9wKGRldi0+aW9iYXNlICsgRFQyODAxX1NUQVRVUyk7Ci0JaWYgKHN0YXQgJiBEVF9TX1JFQURZKSB7CisJaWYgKHN0YXQgJiBEVF9TX1JFQURZKQogCQlyZXR1cm4gMDsKLQl9CiAJZG8gewogCQlzdGF0ID0gaW5iX3AoZGV2LT5pb2Jhc2UgKyBEVDI4MDFfU1RBVFVTKTsKIAotCQlpZiAoc3RhdCAmIERUX1NfQ09NUE9TSVRFX0VSUk9SKSB7CisJCWlmIChzdGF0ICYgRFRfU19DT01QT1NJVEVfRVJST1IpCiAJCQlyZXR1cm4gc3RhdDsKLQkJfQotCQlpZiAoc3RhdCAmIERUX1NfUkVBRFkpIHsKKwkJaWYgKHN0YXQgJiBEVF9TX1JFQURZKQogCQkJcmV0dXJuIDA7Ci0JCX0KIAl9IHdoaWxlICgtLXRpbWVvdXQgPiAwKTsKIAogCXJldHVybiAtRVRJTUU7CkBAIC0zODIsOSArMzc3LDggQEAKIAkJcHJpbnRrCiAJCSAgICAoImR0MjgwMTogY29tcG9zaXRlLWVycm9yIGluIGR0MjgwMV93cml0ZWNtZCgpLCBpZ25vcmluZ1xuIik7CiAJfQotCWlmICghKHN0YXQgJiBEVF9TX1JFQURZKSkgeworCWlmICghKHN0YXQgJiBEVF9TX1JFQURZKSkKIAkJcHJpbnRrKCJkdDI4MDE6ICFyZWFkeSBpbiBkdDI4MDFfd3JpdGVjbWQoKSwgaWdub3JpbmdcbiIpOwotCX0KIAlvdXRiX3AoY29tbWFuZCwgZGV2LT5pb2Jhc2UgKyBEVDI4MDFfQ01EKTsKIAogCXJldHVybiAwOwpAQCAtNDE4LDkgKzQxMiw4IEBACiAJCWlmIChzdGF0ICYgRFRfU19SRUFEWSkKIAkJCWJyZWFrOwogCX0gd2hpbGUgKHRpbWVvdXQtLSk7Ci0JaWYgKCF0aW1lb3V0KSB7CisJaWYgKCF0aW1lb3V0KQogCQlwcmludGsoImR0MjgwMTogdGltZW91dCAxIHN0YXR1cz0weCUwMnhcbiIsIHN0YXQpOwotCX0KIAogCS8qIHByaW50aygiZHQyODAxOiByZWFkaW5nIGR1bW15XG4iKTsgKi8KIAkvKiBkdDI4MDFfcmVhZGRhdGEoZGV2LCZib2FyZF9jb2RlKTsgKi8KQEAgLTQzNiw5ICs0MjksOCBAQAogCQlpZiAoc3RhdCAmIERUX1NfUkVBRFkpCiAJCQlicmVhazsKIAl9IHdoaWxlICh0aW1lb3V0LS0pOwotCWlmICghdGltZW91dCkgeworCWlmICghdGltZW91dCkKIAkJcHJpbnRrKCJkdDI4MDE6IHRpbWVvdXQgMiBzdGF0dXM9MHglMDJ4XG4iLCBzdGF0KTsKLQl9CiAKIAlEUFJJTlRLKCJkdDI4MDE6IHJlYWRpbmcgY29kZVxuIik7CiAJZHQyODAxX3JlYWRkYXRhKGRldiwgJmJvYXJkX2NvZGUpOwpAQCAtNjIzLDExICs2MTUsMTAgQEAKIHN0YXRpYyBpbnQgZHQyODAxX2Vycm9yKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIGludCBzdGF0KQogewogCWlmIChzdGF0IDwgMCkgewotCQlpZiAoc3RhdCA9PSAtRVRJTUUpIHsKKwkJaWYgKHN0YXQgPT0gLUVUSU1FKQogCQkJcHJpbnRrKCJkdDI4MDE6IHRpbWVvdXRcbiIpOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlwcmludGsoImR0MjgwMTogZXJyb3IgJWRcbiIsIHN0YXQpOwotCQl9CiAJCXJldHVybiBzdGF0OwogCX0KIAlwcmludGsoImR0MjgwMTogZXJyb3Igc3RhdHVzIDB4JTAyeCwgcmVzZXR0aW5nLi4uXG4iLCBzdGF0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTUuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDI4MTUuYwppbmRleCBkMWRiOTNjLi5kMWE0Zjc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQyODE1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0MjgxNS5jCkBAIC0zNCwxOSArMzQsMTkgQEAKICAgWzBdIC0gSS9PIHBvcnQgYmFzZSBiYXNlIGFkZHJlc3MKICAgWzFdIC0gSVJRICh1bnVzZWQpCiAgIFsyXSAtIFZvbHRhZ2UgdW5pcG9sYXIvYmlwb2xhciBjb25maWd1cmF0aW9uCi0gICAgICAgICAgMCA9PSB1bmlwb2xhciA1ViAgKDBWIC0tICs1VikKLQkgIDEgPT0gYmlwb2xhciA1ViAgKC01ViAtLSArNVYpCisJMCA9PSB1bmlwb2xhciA1ViAgKDBWIC0tICs1VikKKwkxID09IGJpcG9sYXIgNVYgICgtNVYgLS0gKzVWKQogICBbM10gLSBDdXJyZW50IG9mZnNldCBjb25maWd1cmF0aW9uCi0gICAgICAgICAgMCA9PSBkaXNhYmxlZCAgKDBtQSAtLSArMzJtQVYpCi0gICAgICAgICAgMSA9PSBlbmFibGVkICAoKzRtQSAtLSArMjBtQVYpCisJMCA9PSBkaXNhYmxlZCAgKDBtQSAtLSArMzJtQVYpCisJMSA9PSBlbmFibGVkICAoKzRtQSAtLSArMjBtQVYpCiAgIFs0XSAtIEZpcm13YXJlIHByb2dyYW0gY29uZmlndXJhdGlvbgotICAgICAgICAgIDAgPT0gcHJvZ3JhbSAxIChzZWUgbWFudWFsIHRhYmxlIDUtNCkKLSAgICAgICAgICAxID09IHByb2dyYW0gMiAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCi0gICAgICAgICAgMiA9PSBwcm9ncmFtIDMgKHNlZSBtYW51YWwgdGFibGUgNS00KQotICAgICAgICAgIDMgPT0gcHJvZ3JhbSA0IChzZWUgbWFudWFsIHRhYmxlIDUtNCkKKwkwID09IHByb2dyYW0gMSAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCisJMSA9PSBwcm9ncmFtIDIgKHNlZSBtYW51YWwgdGFibGUgNS00KQorCTIgPT0gcHJvZ3JhbSAzIChzZWUgbWFudWFsIHRhYmxlIDUtNCkKKwkzID09IHByb2dyYW0gNCAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCiAgIFs1XSAtIEFuYWxvZyBvdXRwdXQgMCByYW5nZSBjb25maWd1cmF0aW9uCi0gICAgICAgICAgMCA9PSB2b2x0YWdlCi0gICAgICAgICAgMSA9PSBjdXJyZW50CisJMCA9PSB2b2x0YWdlCisJMSA9PSBjdXJyZW50CiAgIFs2XSAtIEFuYWxvZyBvdXRwdXQgMSByYW5nZSBjb25maWd1cmF0aW9uIChzYW1lIG9wdGlvbnMpCiAgIFs3XSAtIEFuYWxvZyBvdXRwdXQgMiByYW5nZSBjb25maWd1cmF0aW9uIChzYW1lIG9wdGlvbnMpCiAgIFs4XSAtIEFuYWxvZyBvdXRwdXQgMyByYW5nZSBjb25maWd1cmF0aW9uIChzYW1lIG9wdGlvbnMpCkBAIC02MSwxNyArNjEsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGNvbWVkaV9scmFuZ2UgcmFuZ2VfZHQyODE1X2FvXzMyX2N1cnJlbnQgPSB7IDEsIHsKLQkJCQkJCQkJICAgICBSQU5HRV9tQSgwLAotCQkJCQkJCQkJICAgICAgMzIpCi0JCQkJCQkJCSAgICAgfQotfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZQorCXJhbmdlX2R0MjgxNV9hb18zMl9jdXJyZW50ID0gezEsIHtSQU5HRV9tQSgwLCAzMil9IH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgY29tZWRpX2xyYW5nZSByYW5nZV9kdDI4MTVfYW9fMjBfY3VycmVudCA9IHsgMSwgewotCQkJCQkJCQkgICAgIFJBTkdFX21BKDQsCi0JCQkJCQkJCQkgICAgICAyMCkKLQkJCQkJCQkJICAgICB9Ci19Oworc3RhdGljIGNvbnN0IHN0cnVjdCBjb21lZGlfbHJhbmdlCisJcmFuZ2VfZHQyODE1X2FvXzIwX2N1cnJlbnQgPSB7MSwge1JBTkdFX21BKDQsIDIwKX0gfTsKIAogI2RlZmluZSBEVDI4MTVfU0laRSAyCiAKQEAgLTExOCw5ICsxMTIsOCBAQAogCWludCBpOwogCWludCBjaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgaW5zbi0+bjsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykKIAkJZGF0YVtpXSA9IGRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dOwotCX0KIAogCXJldHVybiBpOwogfQpAQCAtMTM5LDkgKzEzMiw4IEBACiAKIAkJc3RhdHVzID0gZHQyODE1X3dhaXRfZm9yX3N0YXR1cyhkZXYsIDB4MDApOwogCQlpZiAoc3RhdHVzICE9IDApIHsKLQkJCXByaW50awotCQkJICAgICgiZHQyODE1OiBmYWlsZWQgdG8gd3JpdGUgbG93IGJ5dGUgb24gJWQgcmVhc29uICV4XG4iLAotCQkJICAgICBjaGFuLCBzdGF0dXMpOworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZHQyODE1OiBmYWlsZWQgdG8gd3JpdGUgbG93IGJ5dGUgIgorCQkJICAgICAgICJvbiAlZCByZWFzb24gJXhcbiIsIGNoYW4sIHN0YXR1cyk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAKQEAgLTE0OSw5ICsxNDEsOCBAQAogCiAJCXN0YXR1cyA9IGR0MjgxNV93YWl0X2Zvcl9zdGF0dXMoZGV2LCAweDEwKTsKIAkJaWYgKHN0YXR1cyAhPSAweDEwKSB7Ci0JCQlwcmludGsKLQkJCSAgICAoImR0MjgxNTogZmFpbGVkIHRvIHdyaXRlIGhpZ2ggYnl0ZSBvbiAlZCByZWFzb24gJXhcbiIsCi0JCQkgICAgIGNoYW4sIHN0YXR1cyk7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJkdDI4MTU6IGZhaWxlZCB0byB3cml0ZSBoaWdoIGJ5dGUgIgorCQkJICAgICAgICJvbiAlZCByZWFzb24gJXhcbiIsIGNoYW4sIHN0YXR1cyk7CiAJCQlyZXR1cm4gLUVCVVNZOwogCQl9CiAJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKQEAgLTE2MywyNCArMTU0LDI0IEBACiAgIG9wdGlvbnNbMF0gICBCb2FyZCBiYXNlIGFkZHJlc3MKICAgb3B0aW9uc1sxXSAgIElSUSAobm90IGFwcGxpY2FibGUpCiAgIG9wdGlvbnNbMl0gICBWb2x0YWdlIHVuaXBvbGFyL2JpcG9sYXIgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgICAgICAwID09IHVuaXBvbGFyIDVWICAoMFYgLS0gKzVWKQotCQkgMSA9PSBiaXBvbGFyIDVWICAoLTVWIC0tICs1VikKKwkJMCA9PSB1bmlwb2xhciA1ViAgKDBWIC0tICs1VikKKwkJMSA9PSBiaXBvbGFyIDVWICAoLTVWIC0tICs1VikKICAgb3B0aW9uc1szXSAgIEN1cnJlbnQgb2Zmc2V0IGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgICAgICAgMCA9PSBkaXNhYmxlZCAgKDBtQSAtLSArMzJtQVYpCi0gICAgICAgICAgICAgICAgIDEgPT0gZW5hYmxlZCAgKCs0bUEgLS0gKzIwbUFWKQorCQkwID09IGRpc2FibGVkICAoMG1BIC0tICszMm1BVikKKwkJMSA9PSBlbmFibGVkICAoKzRtQSAtLSArMjBtQVYpCiAgIG9wdGlvbnNbNF0gICBGaXJtd2FyZSBwcm9ncmFtIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICAgICAgICAgMCA9PSBwcm9ncmFtIDEgKHNlZSBtYW51YWwgdGFibGUgNS00KQotICAgICAgICAgICAgICAgICAxID09IHByb2dyYW0gMiAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCi0gICAgICAgICAgICAgICAgIDIgPT0gcHJvZ3JhbSAzIChzZWUgbWFudWFsIHRhYmxlIDUtNCkKLSAgICAgICAgICAgICAgICAgMyA9PSBwcm9ncmFtIDQgKHNlZSBtYW51YWwgdGFibGUgNS00KQorCQkwID09IHByb2dyYW0gMSAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCisJCTEgPT0gcHJvZ3JhbSAyIChzZWUgbWFudWFsIHRhYmxlIDUtNCkKKwkJMiA9PSBwcm9ncmFtIDMgKHNlZSBtYW51YWwgdGFibGUgNS00KQorCQkzID09IHByb2dyYW0gNCAoc2VlIG1hbnVhbCB0YWJsZSA1LTQpCiAgIG9wdGlvbnNbNV0gICBBbmFsb2cgb3V0cHV0IDAgcmFuZ2UgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgICAgICAwID09IHZvbHRhZ2UKLSAgICAgICAgICAgICAgICAgMSA9PSBjdXJyZW50CisJCTAgPT0gdm9sdGFnZQorCQkxID09IGN1cnJlbnQKICAgb3B0aW9uc1s2XSAgIEFuYWxvZyBvdXRwdXQgMSByYW5nZSBjb25maWd1cmF0aW9uCiAgIC4uLgogICBvcHRpb25zWzEyXSAgIEFuYWxvZyBvdXRwdXQgNyByYW5nZSBjb25maWd1cmF0aW9uCi0gICAgICAgICAgICAgICAgIDAgPT0gdm9sdGFnZQotICAgICAgICAgICAgICAgICAxID09IGN1cnJlbnQKKwkJMCA9PSB2b2x0YWdlCisJCTEgPT0gY3VycmVudAogICovCiAKIHN0YXRpYyBpbnQgZHQyODE1X2F0dGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX2RldmNvbmZpZyAqaXQpCkBAIC0xOTEsOSArMTgyLDkgQEAKIAl1bnNpZ25lZCBsb25nIGlvYmFzZTsKIAogCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOwotCXByaW50aygiY29tZWRpJWQ6IGR0MjgxNTogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBkdDI4MTU6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgRFQyODE1X1NJWkUsICJkdDI4MTUiKSkgewotCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSS9PIHBvcnQgY29uZmxpY3RcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTIzNiwxOSArMjI3LDE3IEBACiAJCQl1bnNpZ25lZCBpbnQgcHJvZ3JhbTsKIAkJCXByb2dyYW0gPSAoaXQtPm9wdGlvbnNbNF0gJiAweDMpIDw8IDMgfCAweDc7CiAJCQlvdXRiKHByb2dyYW0sIGRldi0+aW9iYXNlICsgRFQyODE1X0RBVEEpOwotCQkJcHJpbnRrKCIsIHByb2dyYW06IDB4JXggKEB0PSVkKVxuIiwgcHJvZ3JhbSwgaSk7CisJCQlwcmludGsoS0VSTl9JTkZPICIsIHByb2dyYW06IDB4JXggKEB0PSVkKVxuIiwKKwkJCSAgICAgICBwcm9ncmFtLCBpKTsKIAkJCWJyZWFrOwogCQl9IGVsc2UgaWYgKHN0YXR1cyAhPSAweDAwKSB7Ci0JCQlwcmludGsoImR0MjgxNTogdW5leHBlY3RlZCBzdGF0dXMgMHgleCAoQHQ9JWQpXG4iLAotCQkJICAgICAgIHN0YXR1cywgaSk7Ci0JCQlpZiAoc3RhdHVzICYgMHg2MCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZHQyODE1OiB1bmV4cGVjdGVkIHN0YXR1cyAweCV4ICIKKwkJCSAgICAgICAiKEB0PSVkKVxuIiwgc3RhdHVzLCBpKTsKKwkJCWlmIChzdGF0dXMgJiAweDYwKQogCQkJCW91dGIoMHgwMCwgZGV2LT5pb2Jhc2UgKyBEVDI4MTVfU1RBVFVTKTsKLQkJCX0KIAkJfQogCX0KIAotCXByaW50aygiXG4iKTsKLQogCXJldHVybiAwOwogfQogCkBAIC0yNjAsNyArMjQ5LDcgQEAKIAogc3RhdGljIGludCBkdDI4MTVfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7Ci0JcHJpbnRrKCJjb21lZGklZDogZHQyODE1OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBkdDI4MTU6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CiAKIAlkdDI4MTVfZnJlZV9yZXNvdXJjZXMoZGV2KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0OTgxMi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2R0OTgxMi5jCmluZGV4IDMxMmY0ZjIuLjk2Y2FhZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9kdDk4MTIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZHQ5ODEyLmMKQEAgLTI2NCw3ICsyNjQsNyBAQAogCiBzdGF0aWMgREVDTEFSRV9NVVRFWChkdDk4MTJfbXV0ZXgpOwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZHQ5ODEyX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZHQ5ODEyX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgwODY3LCAweDk4MTIpfSwKIAl7fQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL2ZsNTEyLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZmw1MTIuYwppbmRleCA4ZmNhMTgwLi5hMTBhMmIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZmw1MTIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvZmw1MTIuYwpAQCAtNzYsMTQgKzc2LDE0IEBACiAJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSBkZXYtPmlvYmFzZTsKIAogCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsJLyogc2FtcGxlIG4gdGltZXMgb24gc2VsZWN0ZWQgY2hhbm5lbCAqLwotCQkvKiBYWFggcHJvYmFibHkgY2FuIG1vdmUgbmV4dCBzdGVwIG91dCBvZiBmb3IoKSBsb29wIC0tIHdpbGwgbWFrZQotCQkgKiBBSSBhIGxpdHRsZSBiaXQgZmFzdGVyLiAqLworCQkvKiBYWFggcHJvYmFibHkgY2FuIG1vdmUgbmV4dCBzdGVwIG91dCBvZiBmb3IoKSBsb29wIC0tIHdpbGwKKwkJICogbWFrZSBBSSBhIGxpdHRsZSBiaXQgZmFzdGVyLiAqLwogCQlvdXRiKGNoYW4sIGlvYmFzZSArIDIpOwkvKiBzZWxlY3QgY2hhbiAqLwogCQlvdXRiKDAsIGlvYmFzZSArIDMpOwkvKiBzdGFydCBjb252ZXJzaW9uICovCiAJCS8qIFhYWCBzaG91bGQgdGVzdCAiZG9uZSIgZmxhZyBpbnN0ZWFkIG9mIGRlbGF5ICovCiAJCXVkZWxheSgzMCk7CS8qIHNsZWVwIDMwIHVzZWMgKi8KIAkJbG9fYnl0ZSA9IGluYihpb2Jhc2UgKyAyKTsJLyogbG93IDggYnl0ZSAqLwotCQloaV9ieXRlID0gaW5iKGlvYmFzZSArIDMpICYgMHhmOwkvKiBoaWdoIDQgYml0IGFuZCBtYXNrICovCisJCWhpX2J5dGUgPSBpbmIoaW9iYXNlICsgMykgJiAweGY7IC8qIGhpZ2ggNCBiaXQgYW5kIG1hc2sgKi8KIAkJZGF0YVtuXSA9IGxvX2J5dGUgKyAoaGlfYnl0ZSA8PCA4KTsKIAl9CiAJcmV0dXJuIG47CkBAIC0xMDEsOCArMTAxLDEwIEBACiAJdW5zaWduZWQgbG9uZyBpb2Jhc2UgPSBkZXYtPmlvYmFzZTsJLyogZ2V0IGJhc2UgYWRkcmVzcyAgKi8KIAogCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsJLyogd3JpdGUgbiBkYXRhIHNldCAqLwotCQlvdXRiKGRhdGFbbl0gJiAweDBmZiwgaW9iYXNlICsgNCArIDIgKiBjaGFuKTsJLyogd3JpdGUgbG93IGJ5dGUgICAqLwotCQlvdXRiKChkYXRhW25dICYgMHhmMDApID4+IDgsIGlvYmFzZSArIDQgKyAyICogY2hhbik7CS8qIHdyaXRlIGhpZ2ggYnl0ZSAgKi8KKwkJLyogd3JpdGUgbG93IGJ5dGUgICAqLworCQlvdXRiKGRhdGFbbl0gJiAweDBmZiwgaW9iYXNlICsgNCArIDIgKiBjaGFuKTsKKwkJLyogd3JpdGUgaGlnaCBieXRlICAqLworCQlvdXRiKChkYXRhW25dICYgMHhmMDApID4+IDgsIGlvYmFzZSArIDQgKyAyICogY2hhbik7CiAJCWluYihpb2Jhc2UgKyA0ICsgMiAqIGNoYW4pOwkvKiB0cmlnICovCiAKIAkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkYXRhW25dOwpAQCAtMTIxLDkgKzEyMyw4IEBACiAJaW50IG47CiAJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKIAotCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKQogCQlkYXRhW25dID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07Ci0JfQogCiAJcmV0dXJuIG47CiB9CkBAIC0xMzQsMTMgKzEzNSwxNSBAQAogc3RhdGljIGludCBmbDUxMl9hdHRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9kZXZjb25maWcgKml0KQogewogCXVuc2lnbmVkIGxvbmcgaW9iYXNlOwotCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwkvKiBwb2ludGVyIHRvIHRoZSBzdWJkZXZpY2U6Ci0JCQkJCSAgIEFuYWxvZyBpbiwgQW5hbG9nIG91dCwgKCBub3QgbWFkZSAtPmFuZCBEaWdpdGFsIElPKSAqLworCisJLyogcG9pbnRlciB0byB0aGUgc3ViZGV2aWNlOiBBbmFsb2cgaW4sIEFuYWxvZyBvdXQsCisJICAgKG5vdCBtYWRlIC0+YW5kIERpZ2l0YWwgSU8pICovCisJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnM7CiAKIAlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKLQlwcmludGsoImNvbWVkaTolZCBmbDUxMjogMHglMDRseCIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpOiVkIGZsNTEyOiAweCUwNGx4IiwgZGV2LT5taW5vciwgaW9iYXNlKTsKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgRkw1MTJfU0laRSwgImZsNTEyIikpIHsKLQkJcHJpbnRrKCIgSS9PIHBvcnQgY29uZmxpY3RcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIgSS9PIHBvcnQgY29uZmxpY3RcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CkBAIC0xNDksNyArMTUyLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKICNpZiBERUJVRwotCXByaW50aygibWFsbG9jIG9rXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAibWFsbG9jIG9rXG4iKTsKICNlbmRpZgogCiAJaWYgKGFsbG9jX3N1YmRldmljZXMoZGV2LCAyKSA8IDApCkBAIC0xNjAsMjQgKzE2MywzNyBAQAogCSAqLwogCS8qIEFuYWxvZyBpbmRwdXQgKi8KIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKLQlzLT50eXBlID0gQ09NRURJX1NVQkRfQUk7CS8qIGRlZmluZSBzdWJkZXZpY2UgYXMgQW5hbG9nIEluICAgKi8KLQlzLT5zdWJkZXZfZmxhZ3MgPSBTREZfUkVBREFCTEUgfCBTREZfR1JPVU5EOwkvKiB5b3UgY2FuIHJlYWQgaXQgZnJvbSB1c2Vyc3BhY2UgICovCi0Jcy0+bl9jaGFuID0gMTY7CQkvKiBOdW1iZXIgb2YgQW5hbG9nIGlucHV0IGNoYW5uZWxzICovCi0Jcy0+bWF4ZGF0YSA9IDB4MGZmZjsJLyogYWNjZXB0IG9ubHkgMTIgYml0cyBvZiBkYXRhICAgICAqLwotCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2ZsNTEyOwkvKiBkZXZpY2UgdXNlIG9uZSBvZiB0aGUgcmFuZ2VzICAgICovCi0Jcy0+aW5zbl9yZWFkID0gZmw1MTJfYWlfaW5zbjsJLyogZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHJlYWQgQUQgICAqLwotCXByaW50aygiY29tZWRpOiBmbDUxMjogc3ViZGV2aWNlIDAgaW5pdGlhbGl6ZWRcbiIpOworCS8qIGRlZmluZSBzdWJkZXZpY2UgYXMgQW5hbG9nIEluICovCisJcy0+dHlwZSA9IENPTUVESV9TVUJEX0FJOworCS8qIHlvdSBjYW4gcmVhZCBpdCBmcm9tIHVzZXJzcGFjZSAqLworCXMtPnN1YmRldl9mbGFncyA9IFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQ7CisJLyogTnVtYmVyIG9mIEFuYWxvZyBpbnB1dCBjaGFubmVscyAqLworCXMtPm5fY2hhbiA9IDE2OworCS8qIGFjY2VwdCBvbmx5IDEyIGJpdHMgb2YgZGF0YSAqLworCXMtPm1heGRhdGEgPSAweDBmZmY7CisJLyogZGV2aWNlIHVzZSBvbmUgb2YgdGhlIHJhbmdlcyAqLworCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2ZsNTEyOworCS8qIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiByZWFkIEFEICovCisJcy0+aW5zbl9yZWFkID0gZmw1MTJfYWlfaW5zbjsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGk6IGZsNTEyOiBzdWJkZXZpY2UgMCBpbml0aWFsaXplZFxuIik7CiAKIAkvKiBBbmFsb2cgb3V0cHV0ICovCiAJcyA9IGRldi0+c3ViZGV2aWNlcyArIDE7Ci0Jcy0+dHlwZSA9IENPTUVESV9TVUJEX0FPOwkvKiBkZWZpbmUgc3ViZGV2aWNlIGFzIEFuYWxvZyBPVVQgICAqLwotCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsJLyogeW91IGNhbiB3cml0ZSBpdCBmcm9tIHVzZXJzcGFjZSAgKi8KLQlzLT5uX2NoYW4gPSAyOwkJLyogTnVtYmVyIG9mIEFuYWxvZyBvdXRwdXQgY2hhbm5lbHMgKi8KLQlzLT5tYXhkYXRhID0gMHgwZmZmOwkvKiBhY2NlcHQgb25seSAxMiBiaXRzIG9mIGRhdGEgICAgICAqLwotCXMtPnJhbmdlX3RhYmxlID0gJnJhbmdlX2ZsNTEyOwkvKiBkZXZpY2UgdXNlIG9uZSBvZiB0aGUgcmFuZ2VzICAgICAqLwotCXMtPmluc25fd3JpdGUgPSBmbDUxMl9hb19pbnNuOwkvKiBmdW5jdGlvbiB0byBjYWxsIHdoZW4gd3JpdGUgREEgICAqLwotCXMtPmluc25fcmVhZCA9IGZsNTEyX2FvX2luc25fcmVhZGJhY2s7CS8qIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiByZWFkaW5nIERBICAgKi8KLQlwcmludGsoImNvbWVkaTogZmw1MTI6IHN1YmRldmljZSAxIGluaXRpYWxpemVkXG4iKTsKKwkvKiBkZWZpbmUgc3ViZGV2aWNlIGFzIEFuYWxvZyBPVVQgKi8KKwlzLT50eXBlID0gQ09NRURJX1NVQkRfQU87CisJLyogeW91IGNhbiB3cml0ZSBpdCBmcm9tIHVzZXJzcGFjZSAqLworCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKKwkvKiBOdW1iZXIgb2YgQW5hbG9nIG91dHB1dCBjaGFubmVscyAqLworCXMtPm5fY2hhbiA9IDI7CisJLyogYWNjZXB0IG9ubHkgMTIgYml0cyBvZiBkYXRhICovCisJcy0+bWF4ZGF0YSA9IDB4MGZmZjsKKwkvKiBkZXZpY2UgdXNlIG9uZSBvZiB0aGUgcmFuZ2VzICovCisJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZmw1MTI7CisJLyogZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHdyaXRlIERBICovCisJcy0+aW5zbl93cml0ZSA9IGZsNTEyX2FvX2luc247CisJLyogZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHJlYWRpbmcgREEgKi8KKwlzLT5pbnNuX3JlYWQgPSBmbDUxMl9hb19pbnNuX3JlYWRiYWNrOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaTogZmw1MTI6IHN1YmRldmljZSAxIGluaXRpYWxpemVkXG4iKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTg2LDYgKzIwMiw2IEBACiB7CiAJaWYgKGRldi0+aW9iYXNlKQogCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgRkw1MTJfU0laRSk7Ci0JcHJpbnRrKCJjb21lZGklZDogZmw1MTI6IGR1bW15IGkgZGV0YWNoXG4iLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogZmw1MTI6IGR1bW15IGkgZGV0YWNoXG4iLCBkZXYtPm1pbm9yKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jCmluZGV4IGJkMzk3ODQuLmZlNWI0OTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvanIzX3BjaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9qcjNfcGNpLmMKQEAgLTk1NCw2ICs5NTQsOCBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKK01PRFVMRV9GSVJNV0FSRSgiY29tZWRpL2pyM3BjaS5pZG0iKTsKKwogc3RhdGljIGludCBqcjNfcGNpX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewogCWludCBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21wYzYyNC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL21wYzYyNC5jCmluZGV4IGNiNGRhMmEuLjEyZTcyYzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9tcGM2MjQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbXBjNjI0LmMKQEAgLTI4NCw3ICsyODQsNyBAQAogCW91dGIoaW5zbi0+Y2hhbnNwZWMsIGRldi0+aW9iYXNlICsgTVBDNjI0X0dOTVVYQ0gpOwogLyogcHJpbnRrKCJDaGFubmVsICVkOiBcbiIsIGluc24tPmNoYW5zcGVjKTsgKi8KIAlpZiAoIWluc24tPm4pIHsKLQkJcHJpbnRrKCJNUEM2MjQ6IFdhcm5pbmcsIG5vIGRhdGEgdG8gYXF1aXJlXG4iKTsKKwkJcHJpbnRrKCJNUEM2MjQ6IFdhcm5pbmcsIG5vIGRhdGEgdG8gYWNxdWlyZVxuIik7CiAJCXJldHVybiAwOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NXh4LmMKaW5kZXggYmJmNzVlYi4uYzIyM2Y3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY1eHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjV4eC5jCkBAIC0yNiwxMiArMjYsMTMgQEAKIC8qCiBEcml2ZXI6IG5pXzY1eHgKIERlc2NyaXB0aW9uOiBOYXRpb25hbCBJbnN0cnVtZW50cyA2NXh4IHN0YXRpYyBkaW8gYm9hcmRzCi1BdXRob3I6IEpvbiBHcmllcnNvbiA8amRAcmVua28uY28udWs+LCBGcmFuayBNb3JpIEhlc3MgPGZtaGVzc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitBdXRob3I6IEpvbiBHcmllcnNvbiA8amRAcmVua28uY28udWs+LAorCUZyYW5rIE1vcmkgSGVzcyA8Zm1oZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KIFN0YXR1czogdGVzdGluZwotRGV2aWNlczogW05hdGlvbmFsIEluc3RydW1lbnRzXSBQQ0ktNjUwOSAobmlfNjV4eCksIFBYSS02NTA5LCBQQ0ktNjUxMCwgUENJLTY1MTEsCi0gIFBYSS02NTExLCBQQ0ktNjUxMiwgUFhJLTY1MTIsIFBDSS02NTEzLCBQWEktNjUxMywgUENJLTY1MTQsIFBYSS02NTE0LCBQQ0ktNjUxNSwKLSAgUFhJLTY1MTUsIFBDSS02NTE2LCBQQ0ktNjUxNywgUENJLTY1MTgsIFBDSS02NTE5LCBQQ0ktNjUyMCwgUENJLTY1MjEsIFBYSS02NTIxLAotICBQQ0ktNjUyOCwgUFhJLTY1MjgKK0RldmljZXM6IFtOYXRpb25hbCBJbnN0cnVtZW50c10gUENJLTY1MDkgKG5pXzY1eHgpLCBQWEktNjUwOSwgUENJLTY1MTAsCisgIFBDSS02NTExLCBQWEktNjUxMSwgUENJLTY1MTIsIFBYSS02NTEyLCBQQ0ktNjUxMywgUFhJLTY1MTMsIFBDSS02NTE0LAorICBQWEktNjUxNCwgUENJLTY1MTUsIFBYSS02NTE1LCBQQ0ktNjUxNiwgUENJLTY1MTcsIFBDSS02NTE4LCBQQ0ktNjUxOSwKKyAgUENJLTY1MjAsIFBDSS02NTIxLCBQWEktNjUyMSwgUENJLTY1MjgsIFBYSS02NTI4CiBVcGRhdGVkOiBXZWQgT2N0IDE4IDA4OjU5OjExIEVEVCAyMDA2CiAKIEJhc2VkIG9uIHRoZSBQQ0ktNjUyNyBkcml2ZXIgYnkgZHMuCkBAIC00MTgsOSArNDE5LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCWJhc2VfYml0ZmllbGRfY2hhbm5lbCA9IENSX0NIQU4oaW5zbi0+Y2hhbnNwZWMpOwogCWZvciAoaiA9IDA7IGogPCBtYXhfcG9ydHNfcGVyX2JpdGZpZWxkOyArK2opIHsKLQkJY29uc3QgdW5zaWduZWQgcG9ydF9vZmZzZXQgPSBuaV82NXh4X3BvcnRfYnlfY2hhbm5lbChiYXNlX2JpdGZpZWxkX2NoYW5uZWwpICsgajsKKwkJY29uc3QgdW5zaWduZWQgcG9ydF9vZmZzZXQgPQorCQkJbmlfNjV4eF9wb3J0X2J5X2NoYW5uZWwoYmFzZV9iaXRmaWVsZF9jaGFubmVsKSArIGo7CiAJCWNvbnN0IHVuc2lnbmVkIHBvcnQgPQotCQkgICAgc3ByaXZhdGUocyktPmJhc2VfcG9ydCArIHBvcnRfb2Zmc2V0OworCQkJc3ByaXZhdGUocyktPmJhc2VfcG9ydCArIHBvcnRfb2Zmc2V0OwogCQl1bnNpZ25lZCBiYXNlX3BvcnRfY2hhbm5lbDsKIAkJdW5zaWduZWQgcG9ydF9tYXNrLCBwb3J0X2RhdGEsIHBvcnRfcmVhZF9iaXRzOwogCQlpbnQgYml0c2hpZnQ7CkBAIC00NjMsMTEgKzQ2NSwxMSBAQAogCQkJICogc3ViZGV2aWNlLikgKi8KIAkJCXBvcnRfcmVhZF9iaXRzIF49IDB4RkY7CiAJCX0KLQkJaWYgKGJpdHNoaWZ0ID4gMCkgeworCQlpZiAoYml0c2hpZnQgPiAwKQogCQkJcG9ydF9yZWFkX2JpdHMgPDw9IGJpdHNoaWZ0OwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlwb3J0X3JlYWRfYml0cyA+Pj0gLWJpdHNoaWZ0OwotCQl9CisKIAkJcmVhZF9iaXRzIHw9IHBvcnRfcmVhZF9iaXRzOwogCX0KIAlkYXRhWzFdID0gcmVhZF9iaXRzOwpAQCAtNTMyLDcgKzUzNCw4IEBACiAJaWYgKGVycikKIAkJcmV0dXJuIDE7CiAKLQkvKiBzdGVwIDI6IG1ha2Ugc3VyZSB0cmlnZ2VyIHNvdXJjZXMgYXJlIHVuaXF1ZSBhbmQgbXV0dWFsbHkgY29tcGF0aWJsZSAqLworCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseQorCWNvbXBhdGlibGUgKi8KIAogCWlmIChlcnIpCiAJCXJldHVybiAyOwpAQCAtNjUyLDcgKzY1NSw3IEBACiAJdW5zaWduZWQgaTsKIAlpbnQgcmV0OwogCi0JcHJpbnRrKCJjb21lZGklZDogbmlfNjV4eDoiLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogbmlfNjV4eDoiLCBkZXYtPm1pbm9yKTsKIAogCXJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IG5pXzY1eHhfcHJpdmF0ZSkpOwogCWlmIChyZXQgPCAwKQpAQCAtNjY0LDE1ICs2NjcsMTUgQEAKIAogCXJldCA9IG1pdGVfc2V0dXAocHJpdmF0ZShkZXYpLT5taXRlKTsKIAlpZiAocmV0IDwgMCkgewotCQlwcmludGsoImVycm9yIHNldHRpbmcgdXAgbWl0ZVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImVycm9yIHNldHRpbmcgdXAgbWl0ZVxuIik7CiAJCXJldHVybiByZXQ7CiAJfQogCiAJZGV2LT5ib2FyZF9uYW1lID0gYm9hcmQoZGV2KS0+bmFtZTsKIAlkZXYtPmlycSA9IG1pdGVfaXJxKHByaXZhdGUoZGV2KS0+bWl0ZSk7Ci0JcHJpbnRrKCIgJXMiLCBkZXYtPmJvYXJkX25hbWUpOworCXByaW50ayhLRVJOX0lORk8gIiAlcyIsIGRldi0+Ym9hcmRfbmFtZSk7CiAKLQlwcmludGsoIiBJRD0weCUwMngiLAorCXByaW50ayhLRVJOX0lORk8gIiBJRD0weCUwMngiLAogCSAgICAgICByZWFkYihwcml2YXRlKGRldiktPm1pdGUtPmRhcV9pb19hZGRyICsgSURfUmVnaXN0ZXIpKTsKIAogCXJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCA0KTsKQEAgLTc3Myw3ICs3NzYsNyBAQAogCQkJICAibmlfNjV4eCIsIGRldik7CiAJaWYgKHJldCA8IDApIHsKIAkJZGV2LT5pcnEgPSAwOwotCQlwcmludGsoIiBpcnEgbm90IGF2YWlsYWJsZSIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIgaXJxIG5vdCBhdmFpbGFibGUiKTsKIAl9CiAKIAlwcmludGsoIlxuIik7CkBAIC03OTAsMjEgKzc5MywxNyBAQAogCQkgICAgICAgTWFzdGVyX0ludGVycnVwdF9Db250cm9sKTsKIAl9CiAKLQlpZiAoZGV2LT5pcnEpIHsKKwlpZiAoZGV2LT5pcnEpCiAJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOwotCX0KIAogCWlmIChwcml2YXRlKGRldikpIHsKIAkJdW5zaWduZWQgaTsKIAkJZm9yIChpID0gMDsgaSA8IGRldi0+bl9zdWJkZXZpY2VzOyArK2kpIHsKLQkJCWlmIChkZXYtPnN1YmRldmljZXNbaV0ucHJpdmF0ZSkgewotCQkJCWtmcmVlKGRldi0+c3ViZGV2aWNlc1tpXS5wcml2YXRlKTsKLQkJCQlkZXYtPnN1YmRldmljZXNbaV0ucHJpdmF0ZSA9IE5VTEw7Ci0JCQl9CisJCQlrZnJlZShkZXYtPnN1YmRldmljZXNbaV0ucHJpdmF0ZSk7CisJCQlkZXYtPnN1YmRldmljZXNbaV0ucHJpdmF0ZSA9IE5VTEw7CiAJCX0KLQkJaWYgKHByaXZhdGUoZGV2KS0+bWl0ZSkgeworCQlpZiAocHJpdmF0ZShkZXYpLT5taXRlKQogCQkJbWl0ZV91bnNldHVwKHByaXZhdGUoZGV2KS0+bWl0ZSk7Ci0JCX0KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC04MzAsNyArODI5LDcgQEAKIAkJCX0KIAkJfQogCX0KLQlwcmludGsoIm5vIGRldmljZSBmb3VuZFxuIik7CisJcHJpbnRrKEtFUk5fV0FSTklORyAibm8gZGV2aWNlIGZvdW5kXG4iKTsKIAltaXRlX2xpc3RfZGV2aWNlcygpOwogCXJldHVybiAtRUlPOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NjB4LmMKaW5kZXggNDA0ZDNjNS4uMDE3NjMwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY2MHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjYweC5jCkBAIC01Miw3ICs1Miw4IEBACiB9OwogCiAjZGVmaW5lIE5VTV9QRklfQ0hBTk5FTFMgNDAKLS8qIHJlYWxseSB0aGVyZSBhcmUgb25seSB1cCB0byAzIGRtYSBjaGFubmVscywgYnV0IHRoZSByZWdpc3RlciBsYXlvdXQgYWxsb3dzIGZvciA0ICovCisvKiByZWFsbHkgdGhlcmUgYXJlIG9ubHkgdXAgdG8gMyBkbWEgY2hhbm5lbHMsIGJ1dCB0aGUgcmVnaXN0ZXIgbGF5b3V0IGFsbG93cworZm9yIDQgKi8KICNkZWZpbmUgTUFYX0RNQV9DSEFOTkVMIDQKIAogLyogU2VlIFJlZ2lzdGVyLUxldmVsIFByb2dyYW1tZXIgTWFudWFsIHBhZ2UgMy4xICovCkBAIC0xOTgsNyArMTk5LDcgQEAKIAljb25zdCBjaGFyICpuYW1lOwkvKiAgUmVnaXN0ZXIgTmFtZSAqLwogCWludCBvZmZzZXQ7CQkvKiAgT2Zmc2V0IGZyb20gYmFzZSBhZGRyZXNzIGZyb20gR1BDVCBjaGlwICovCiAJZW51bSBuaV82NjB4X3JlZ2lzdGVyX2RpcmVjdGlvbiBkaXJlY3Rpb247Ci0JZW51bSBuaV82NjB4X3JlZ2lzdGVyX3dpZHRoIHNpemU7CS8qICAxIGJ5dGUsIDIgYnl0ZXMsIG9yIDQgYnl0ZXMgKi8KKwllbnVtIG5pXzY2MHhfcmVnaXN0ZXJfd2lkdGggc2l6ZTsgLyogMSBieXRlLCAyIGJ5dGVzLCBvciA0IGJ5dGVzICovCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IE5JXzY2MHhSZWdpc3RlckRhdGEgcmVnaXN0ZXJEYXRhW051bVJlZ2lzdGVyc10gPSB7CkBAIC0zODIsOCArMzgzLDggQEAKIH07CiAKIC8qIE9mZnNldCBvZiB0aGUgR1BDVCBjaGlwcyBmcm9tIHRoZSBiYXNlLWFkcmVzcyBvZiB0aGUgY2FyZCAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIEdQQ1RfT0ZGU0VUWzJdID0geyAweDAsIDB4ODAwIH07CS8qIEZpcnN0IGNoaXAgaXMgYXQgYmFzZS1hZGRyZXNzICsKLQkJCQkJCQkgICAweDAwLCBldGMuICovCisvKiBGaXJzdCBjaGlwIGlzIGF0IGJhc2UtYWRkcmVzcyArIDB4MDAsIGV0Yy4gKi8KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBHUENUX09GRlNFVFsyXSA9IHsgMHgwLCAweDgwMCB9OwogCiAvKiBCb2FyZCBkZXNjcmlwdGlvbiovCiBzdHJ1Y3QgbmlfNjYweF9ib2FyZCB7CkBAIC02OTEsMTMgKzY5MiwxMyBAQAogCQluaV82NjB4X3JlZ2lzdGVyID0gRzBTdGF0dXNSZWdpc3RlcjsKIAkJYnJlYWs7CiAJY2FzZSBOSVRJT19HMV9TdGF0dXNfUmVnOgotCQluaV82NjB4X3JlZ2lzdGVyID0gRzBTdGF0dXNSZWdpc3RlcjsKKwkJbmlfNjYweF9yZWdpc3RlciA9IEcxU3RhdHVzUmVnaXN0ZXI7CiAJCWJyZWFrOwogCWNhc2UgTklUSU9fRzJfU3RhdHVzX1JlZzoKLQkJbmlfNjYweF9yZWdpc3RlciA9IEcwU3RhdHVzUmVnaXN0ZXI7CisJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMlN0YXR1c1JlZ2lzdGVyOwogCQlicmVhazsKIAljYXNlIE5JVElPX0czX1N0YXR1c19SZWc6Ci0JCW5pXzY2MHhfcmVnaXN0ZXIgPSBHMFN0YXR1c1JlZ2lzdGVyOworCQluaV82NjB4X3JlZ2lzdGVyID0gRzNTdGF0dXNSZWdpc3RlcjsKIAkJYnJlYWs7CiAJY2FzZSBOSVRJT19HMF9JbnRlcnJ1cHRfRW5hYmxlX1JlZzoKIAkJbmlfNjYweF9yZWdpc3RlciA9IEcwSW50ZXJydXB0RW5hYmxlOwpAQCAtNzEyLDcgKzcxMyw3IEBACiAJCW5pXzY2MHhfcmVnaXN0ZXIgPSBHM0ludGVycnVwdEVuYWJsZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKCIlczogdW5oYW5kbGVkIHJlZ2lzdGVyIDB4JXggaW4gc3dpdGNoLlxuIiwKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHVuaGFuZGxlZCByZWdpc3RlciAweCV4IGluIHN3aXRjaC5cbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgcmVnKTsKIAkJQlVHKCk7CiAJCXJldHVybiAwOwpAQCAtNzM3LDcgKzczOCw3IEBACiAJCXdyaXRlbChiaXRzLCB3cml0ZV9hZGRyZXNzKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKCIlczogJXM6IGJ1ZyEgdW5oYW5kbGVkIGNhc2UgKHJlZz0weCV4KSBpbiBzd2l0Y2guXG4iLAorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogJXM6IGJ1ZyEgdW5oYW5kbGVkIGNhc2UgKHJlZz0weCV4KSBpbiBzd2l0Y2guXG4iLAogCQkgICAgICAgX19GSUxFX18sIF9fZnVuY19fLCByZWcpOwogCQlCVUcoKTsKIAkJYnJlYWs7CkBAIC03NjAsNyArNzYxLDcgQEAKIAkJcmV0dXJuIHJlYWRsKHJlYWRfYWRkcmVzcyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50aygiJXM6ICVzOiBidWchIHVuaGFuZGxlZCBjYXNlIChyZWc9MHgleCkgaW4gc3dpdGNoLlxuIiwKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICVzOiBidWchIHVuaGFuZGxlZCBjYXNlIChyZWc9MHgleCkgaW4gc3dpdGNoLlxuIiwKIAkJICAgICAgIF9fRklMRV9fLCBfX2Z1bmNfXywgcmVnKTsKIAkJQlVHKCk7CiAJCWJyZWFrOwpAQCAtOTkzLDkgKzk5NCw5IEBACiAJc3Bpbl9sb2NrX2luaXQoJnByaXZhdGUoZGV2KS0+bWl0ZV9jaGFubmVsX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZwcml2YXRlKGRldiktPmludGVycnVwdF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdmF0ZShkZXYpLT5zb2Z0X3JlZ19jb3B5X2xvY2spOwotCWZvciAoaSA9IDA7IGkgPCBOVU1fUEZJX0NIQU5ORUxTOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1BGSV9DSEFOTkVMUzsgKytpKQogCQlwcml2YXRlKGRldiktPnBmaV9vdXRwdXRfc2VsZWN0c1tpXSA9IHBmaV9vdXRwdXRfc2VsZWN0X2NvdW50ZXI7Ci0JfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwMDgsOSArMTAwOSw4IEBACiAJCWZvciAoaiA9IDA7IGogPCBjb3VudGVyc19wZXJfY2hpcDsgKytqKSB7CiAJCQlwcml2YXRlKGRldiktPm1pdGVfcmluZ3NbaV1bal0gPQogCQkJICAgIG1pdGVfYWxsb2NfcmluZyhwcml2YXRlKGRldiktPm1pdGUpOwotCQkJaWYgKHByaXZhdGUoZGV2KS0+bWl0ZV9yaW5nc1tpXVtqXSA9PSBOVUxMKSB7CisJCQlpZiAocHJpdmF0ZShkZXYpLT5taXRlX3JpbmdzW2ldW2pdID09IE5VTEwpCiAJCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl9CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC0xMDIyLDkgKzEwMjIsOCBAQAogCXVuc2lnbmVkIGo7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYm9hcmQoZGV2KS0+bl9jaGlwczsgKytpKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBjb3VudGVyc19wZXJfY2hpcDsgKytqKSB7CisJCWZvciAoaiA9IDA7IGogPCBjb3VudGVyc19wZXJfY2hpcDsgKytqKQogCQkJbWl0ZV9mcmVlX3JpbmcocHJpdmF0ZShkZXYpLT5taXRlX3JpbmdzW2ldW2pdKTsKLQkJfQogCX0KIH0KIApAQCAtMTAzNiw3ICsxMDM1LDcgQEAKIAl1bnNpZ25lZCBpOwogCXVuc2lnbmVkIGdsb2JhbF9pbnRlcnJ1cHRfY29uZmlnX2JpdHM7CiAKLQlwcmludGsoImNvbWVkaSVkOiBuaV82NjB4OiAiLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogbmlfNjYweDogIiwgZGV2LT5taW5vcik7CiAKIAlyZXQgPSBuaV82NjB4X2FsbG9jYXRlX3ByaXZhdGUoZGV2KTsKIAlpZiAocmV0IDwgMCkKQEAgLTEwNDksNyArMTA0OCw3IEBACiAKIAlyZXQgPSBtaXRlX3NldHVwMihwcml2YXRlKGRldiktPm1pdGUsIDEpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiZXJyb3Igc2V0dGluZyB1cCBtaXRlXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZXJyb3Igc2V0dGluZyB1cCBtaXRlXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJY29tZWRpX3NldF9od19kZXYoZGV2LCAmcHJpdmF0ZShkZXYpLT5taXRlLT5wY2lkZXYtPmRldik7CkBAIC0xMDU3LDcgKzEwNTYsNyBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0JcHJpbnRrKCIgJXMgIiwgZGV2LT5ib2FyZF9uYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPICIgJXMgIiwgZGV2LT5ib2FyZF9uYW1lKTsKIAogCWRldi0+bl9zdWJkZXZpY2VzID0gMiArIE5JXzY2MFhfTUFYX05VTV9DT1VOVEVSUzsKIApAQCAtMTA3OCwxNSArMTA3NywxNiBAQAogCXMtPmluc25fYml0cyA9IG5pXzY2MHhfZGlvX2luc25fYml0czsKIAlzLT5pbnNuX2NvbmZpZyA9IG5pXzY2MHhfZGlvX2luc25fY29uZmlnOwogCXMtPmlvX2JpdHMgPSAwOwkJLyogYWxsIGJpdHMgZGVmYXVsdCB0byBpbnB1dCAqLwotCS8qICB3ZSB1c2UgdGhlIGlvY29uZmlnIHJlZ2lzdGVycyB0byBjb250cm9sIGRpbyBkaXJlY3Rpb24sIHNvIHplcm8gb3V0cHV0IGVuYWJsZXMgaW4gc3RjIGRpbyBjb250cm9sIHJlZyAqLworCS8qICB3ZSB1c2UgdGhlIGlvY29uZmlnIHJlZ2lzdGVycyB0byBjb250cm9sIGRpbyBkaXJlY3Rpb24sIHNvIHplcm8KKwlvdXRwdXQgZW5hYmxlcyBpbiBzdGMgZGlvIGNvbnRyb2wgcmVnICovCiAJbmlfNjYweF93cml0ZV9yZWdpc3RlcihkZXYsIDAsIDAsIFNUQ0RJT0NvbnRyb2wpOwogCiAJcHJpdmF0ZShkZXYpLT5jb3VudGVyX2RldiA9IG5pX2dwY3RfZGV2aWNlX2NvbnN0cnVjdChkZXYsCi0JCQkJCQkJICAgICAmbmlfZ3BjdF93cml0ZV9yZWdpc3RlciwKLQkJCQkJCQkgICAgICZuaV9ncGN0X3JlYWRfcmVnaXN0ZXIsCi0JCQkJCQkJICAgICBuaV9ncGN0X3ZhcmlhbnRfNjYweCwKLQkJCQkJCQkgICAgIG5pXzY2MHhfbnVtX2NvdW50ZXJzCi0JCQkJCQkJICAgICAoZGV2KSk7CisJCQkJCQkgICAgICZuaV9ncGN0X3dyaXRlX3JlZ2lzdGVyLAorCQkJCQkJICAgICAmbmlfZ3BjdF9yZWFkX3JlZ2lzdGVyLAorCQkJCQkJICAgICBuaV9ncGN0X3ZhcmlhbnRfNjYweCwKKwkJCQkJCSAgICAgbmlfNjYweF9udW1fY291bnRlcnMKKwkJCQkJCSAgICAgKGRldikpOwogCWlmIChwcml2YXRlKGRldiktPmNvdW50ZXJfZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCWZvciAoaSA9IDA7IGkgPCBOSV82NjBYX01BWF9OVU1fQ09VTlRFUlM7ICsraSkgewpAQCAtMTExOCwxMiArMTExOCwxMiBAQAogCQkJcy0+dHlwZSA9IENPTUVESV9TVUJEX1VOVVNFRDsKIAkJfQogCX0KLQlmb3IgKGkgPSAwOyBpIDwgYm9hcmQoZGV2KS0+bl9jaGlwczsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IGJvYXJkKGRldiktPm5fY2hpcHM7ICsraSkKIAkJaW5pdF90aW9fY2hpcChkZXYsIGkpOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgbmlfNjYweF9udW1fY291bnRlcnMoZGV2KTsgKytpKSB7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmlfNjYweF9udW1fY291bnRlcnMoZGV2KTsgKytpKQogCQluaV90aW9faW5pdF9jb3VudGVyKCZwcml2YXRlKGRldiktPmNvdW50ZXJfZGV2LT5jb3VudGVyc1tpXSk7Ci0JfQorCiAJZm9yIChpID0gMDsgaSA8IE5VTV9QRklfQ0hBTk5FTFM7ICsraSkgewogCQlpZiAoaSA8IG1pbl9jb3VudGVyX3BmaV9jaGFuKQogCQkJbmlfNjYweF9zZXRfcGZpX3JvdXRpbmcoZGV2LCBpLCBwZmlfb3V0cHV0X3NlbGVjdF9kbyk7CkBAIC0xMTM0LDEzICsxMTM0LDEzIEBACiAJfQogCS8qIHRvIGJlIHNhZmUsIHNldCBjb3VudGVyc3dhcCBiaXRzIG9uIHRpbyBjaGlwcyBhZnRlciBhbGwgdGhlIGNvdW50ZXIKIAkgICBvdXRwdXRzIGhhdmUgYmVlbiBzZXQgdG8gaGlnaCBpbXBlZGFuY2UgbW9kZSAqLwotCWZvciAoaSA9IDA7IGkgPCBib2FyZChkZXYpLT5uX2NoaXBzOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgYm9hcmQoZGV2KS0+bl9jaGlwczsgKytpKQogCQlzZXRfdGlvX2NvdW50ZXJzd2FwKGRldiwgaSk7Ci0JfQorCiAJcmV0ID0gcmVxdWVzdF9pcnEobWl0ZV9pcnEocHJpdmF0ZShkZXYpLT5taXRlKSwgbmlfNjYweF9pbnRlcnJ1cHQsCiAJCQkgIElSUUZfU0hBUkVELCAibmlfNjYweCIsIGRldik7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCIgaXJxIG5vdCBhdmFpbGFibGVcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICIgaXJxIG5vdCBhdmFpbGFibGVcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAlkZXYtPmlycSA9IG1pdGVfaXJxKHByaXZhdGUoZGV2KS0+bWl0ZSk7CkBAIC0xMTQ5LDEzICsxMTQ5LDEzIEBACiAJCWdsb2JhbF9pbnRlcnJ1cHRfY29uZmlnX2JpdHMgfD0gQ2FzY2FkZV9JbnRfRW5hYmxlX0JpdDsKIAluaV82NjB4X3dyaXRlX3JlZ2lzdGVyKGRldiwgMCwgZ2xvYmFsX2ludGVycnVwdF9jb25maWdfYml0cywKIAkJCSAgICAgICBHbG9iYWxJbnRlcnJ1cHRDb25maWdSZWdpc3Rlcik7Ci0JcHJpbnRrKCJhdHRhY2hlZFxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiYXR0YWNoZWRcbiIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG5pXzY2MHhfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7Ci0JcHJpbnRrKCJjb21lZGklZDogbmlfNjYweDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogbmlfNjYweDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKIAogCS8qIEZyZWUgaXJxICovCiAJaWYgKGRldi0+aXJxKQpAQCAtMTE5Myw5ICsxMTkzLDggQEAKIAkJCSAgICAgICBwcml2YXRlKGRldiktPgogCQkJICAgICAgIGRtYV9jb25maWd1cmF0aW9uX3NvZnRfY29waWVzW2NoaXBzZXRdLAogCQkJICAgICAgIERNQUNvbmZpZ1JlZ2lzdGVyKTsKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX1BGSV9DSEFOTkVMUzsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IE5VTV9QRklfQ0hBTk5FTFM7ICsraSkKIAkJbmlfNjYweF93cml0ZV9yZWdpc3RlcihkZXYsIGNoaXBzZXQsIDAsIElPQ29uZmlnUmVnKGkpKTsKLQl9CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTEyMzQsNyArMTIzMyw3IEBACiAJCQl9CiAJCX0KIAl9Ci0JcHJpbnRrKCJubyBkZXZpY2UgZm91bmRcbiIpOworCXByaW50ayhLRVJOX1dBUk5JTkcgIm5vIGRldmljZSBmb3VuZFxuIik7CiAJbWl0ZV9saXN0X2RldmljZXMoKTsKIAlyZXR1cm4gLUVJTzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfNjcweC5jCmluZGV4IDliNDM1NDcuLjFlNzkyZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV82NzB4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pXzY3MHguYwpAQCAtOTMsNyArOTMsNyBAQAogCXsKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MmM5MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIHsKIAlQQ0lfVkVORE9SX0lEX05BVElOU1QsIDB4MTkyMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCi0JICAgIC8qIHsgUENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDAwMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwgKi8KKwkvKnsgUENJX1ZFTkRPUl9JRF9OQVRJTlNULCAweDAwMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAgfSwqLwogCXsKIAkwfQogfTsKQEAgLTE1MSw3ICsxNTEsNyBAQAogCWludCByZXQ7CiAJaW50IGk7CiAKLQlwcmludGsoImNvbWVkaSVkOiBuaV82NzB4OiAiLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogbmlfNjcweDogIiwgZGV2LT5taW5vcik7CiAKIAlyZXQgPSBhbGxvY19wcml2YXRlKGRldiwgc2l6ZW9mKHN0cnVjdCBuaV82NzB4X3ByaXZhdGUpKTsKIAlpZiAocmV0IDwgMCkKQEAgLTE2MywxMiArMTYzLDEyIEBACiAKIAlyZXQgPSBtaXRlX3NldHVwKGRldnByaXYtPm1pdGUpOwogCWlmIChyZXQgPCAwKSB7Ci0JCXByaW50aygiZXJyb3Igc2V0dGluZyB1cCBtaXRlXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiZXJyb3Igc2V0dGluZyB1cCBtaXRlXG4iKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAJZGV2LT5ib2FyZF9uYW1lID0gdGhpc2JvYXJkLT5uYW1lOwogCWRldi0+aXJxID0gbWl0ZV9pcnEoZGV2cHJpdi0+bWl0ZSk7Ci0JcHJpbnRrKCIgJXMiLCBkZXYtPmJvYXJkX25hbWUpOworCXByaW50ayhLRVJOX0lORk8gIiAlcyIsIGRldi0+Ym9hcmRfbmFtZSk7CiAKIAlpZiAoYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIDIpIDwgMCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMDcsMjEgKzIwNywyMiBAQAogCXMtPmluc25fYml0cyA9IG5pXzY3MHhfZGlvX2luc25fYml0czsKIAlzLT5pbnNuX2NvbmZpZyA9IG5pXzY3MHhfZGlvX2luc25fY29uZmlnOwogCi0Jd3JpdGVsKDB4MTAsIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgTUlTQ19DT05UUk9MX09GRlNFVCk7CS8qIENvbmZpZyBvZiBtaXNjIHJlZ2lzdGVycyAqLwotCXdyaXRlbCgweDAwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEFPX0NPTlRST0xfT0ZGU0VUKTsJLyogQ29uZmlnIG9mIGFvIHJlZ2lzdGVycyAqLworCS8qIENvbmZpZyBvZiBtaXNjIHJlZ2lzdGVycyAqLworCXdyaXRlbCgweDEwLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIE1JU0NfQ09OVFJPTF9PRkZTRVQpOworCS8qIENvbmZpZyBvZiBhbyByZWdpc3RlcnMgKi8KKwl3cml0ZWwoMHgwMCwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBBT19DT05UUk9MX09GRlNFVCk7CiAKLQlwcmludGsoImF0dGFjaGVkXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJhdHRhY2hlZFxuIik7CiAKIAlyZXR1cm4gMTsKIH0KIAogc3RhdGljIGludCBuaV82NzB4X2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotCXByaW50aygiY29tZWRpJWQ6IG5pXzY3MHg6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IG5pXzY3MHg6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CiAKLQlpZiAoZGV2LT5zdWJkZXZpY2VzWzBdLnJhbmdlX3RhYmxlX2xpc3QpIHsKLQkJa2ZyZWUoZGV2LT5zdWJkZXZpY2VzWzBdLnJhbmdlX3RhYmxlX2xpc3QpOwotCX0KKwlrZnJlZShkZXYtPnN1YmRldmljZXNbMF0ucmFuZ2VfdGFibGVfbGlzdCk7CisKIAlpZiAoZGV2LT5wcml2YXRlICYmIGRldnByaXYtPm1pdGUpCiAJCW1pdGVfdW5zZXR1cChkZXZwcml2LT5taXRlKTsKIApAQCAtMjUwLDggKzI1MSwxMSBAQAogCSAgIHZjaCgxNSkgICAgICA6ICAgICAgIDMwICAgICAgfCBpY2goMzEpICAgICAgIDogICAgICAgMzEgICAgICAqLwogCiAJZm9yIChpID0gMDsgaSA8IGluc24tPm47IGkrKykgewotCQl3cml0ZWwoKChjaGFuICYgMTUpIDw8IDEpIHwgKChjaGFuICYgMTYpID4+IDQpLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEFPX0NIQU5fT0ZGU0VUKTsJLyogRmlyc3Qgd3JpdGUgaW4gY2hhbm5lbCByZWdpc3RlciB3aGljaCBjaGFubmVsIHRvIHVzZSAqLwotCQl3cml0ZWwoZGF0YVtpXSwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBBT19WQUxVRV9PRkZTRVQpOwkvKiB3cml0ZSBjaGFubmVsIHZhbHVlICovCisJCS8qIEZpcnN0IHdyaXRlIGluIGNoYW5uZWwgcmVnaXN0ZXIgd2hpY2ggY2hhbm5lbCB0byB1c2UgKi8KKwkJd3JpdGVsKCgoY2hhbiAmIDE1KSA8PCAxKSB8ICgoY2hhbiAmIDE2KSA+PiA0KSwKKwkJICAgICAgIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgQU9fQ0hBTl9PRkZTRVQpOworCQkvKiB3cml0ZSBjaGFubmVsIHZhbHVlICovCisJCXdyaXRlbChkYXRhW2ldLCBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkciArIEFPX1ZBTFVFX09GRlNFVCk7CiAJCWRldnByaXYtPmFvX3JlYWRiYWNrW2NoYW5dID0gZGF0YVtpXTsKIAl9CiAKQEAgLTM0NCw3ICszNDgsNyBAQAogCQkJfQogCQl9CiAJfQotCXByaW50aygibm8gZGV2aWNlIGZvdW5kXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJubyBkZXZpY2UgZm91bmRcbiIpOwogCW1pdGVfbGlzdF9kZXZpY2VzKCk7CiAJcmV0dXJuIC1FSU87CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfYXRtaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdG1pby5jCmluZGV4IDhlYWQzMTEuLjAwM2QwMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdG1pby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9hdG1pby5jCkBAIC0zMjksMTEgKzMyOSwxMSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHBucF9kZXZpY2VfaWQgZGV2aWNlX2lkc1tdID0gewotCXsuaWQgPSAiTklDMTkwMCIsLmRyaXZlcl9kYXRhID0gMH0sCi0Jey5pZCA9ICJOSUMyNDAwIiwuZHJpdmVyX2RhdGEgPSAwfSwKLQl7LmlkID0gIk5JQzI1MDAiLC5kcml2ZXJfZGF0YSA9IDB9LAotCXsuaWQgPSAiTklDMjYwMCIsLmRyaXZlcl9kYXRhID0gMH0sCi0Jey5pZCA9ICJOSUMyNzAwIiwuZHJpdmVyX2RhdGEgPSAwfSwKKwl7LmlkID0gIk5JQzE5MDAiLCAuZHJpdmVyX2RhdGEgPSAwfSwKKwl7LmlkID0gIk5JQzI0MDAiLCAuZHJpdmVyX2RhdGEgPSAwfSwKKwl7LmlkID0gIk5JQzI1MDAiLCAuZHJpdmVyX2RhdGEgPSAwfSwKKwl7LmlkID0gIk5JQzI2MDAiLCAuZHJpdmVyX2RhdGEgPSAwfSwKKwl7LmlkID0gIk5JQzI3MDAiLCAuZHJpdmVyX2RhdGEgPSAwfSwKIAl7LmlkID0gIiJ9CiB9OwogCkBAIC0zNjIsOSArMzYyLDkgQEAKIAogCWlmIChkZXYtPmlvYmFzZSkKIAkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIE5JX1NJWkUpOwotCWlmIChkZXYtPmlycSkgeworCWlmIChkZXYtPmlycSkKIAkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7Ci0JfQorCiAJaWYgKGRldnByaXYtPmlzYXBucF9kZXYpCiAJCXBucF9kZXZpY2VfZGV0YWNoKGRldnByaXYtPmlzYXBucF9kZXYpOwogCkBAIC0zODcsOCArMzg3LDggQEAKIAogCQlpZiAocG5wX2RldmljZV9hdHRhY2goaXNhcG5wX2RldikgPCAwKSB7CiAJCQlwcmludGsKLQkJCSAgICAoIm5pX2F0bWlvOiAlcyBmb3VuZCBidXQgYWxyZWFkeSBhY3RpdmUsIHNraXBwaW5nLlxuIiwKLQkJCSAgICAgbmlfYm9hcmRzW2ldLm5hbWUpOworCQkJICgibmlfYXRtaW86ICVzIGZvdW5kIGJ1dCBhbHJlYWR5IGFjdGl2ZSwgc2tpcHBpbmcuXG4iLAorCQkJICBuaV9ib2FyZHNbaV0ubmFtZSk7CiAJCQljb250aW51ZTsKIAkJfQogCQlpZiAocG5wX2FjdGl2YXRlX2Rldihpc2FwbnBfZGV2KSA8IDApIHsKQEAgLTQ5Niw5ICs0OTYsOSBAQAogCS8qIGdlbmVyaWMgRSBzZXJpZXMgc3R1ZmYgaW4gbmlfbWlvX2NvbW1vbi5jICovCiAKIAlyZXQgPSBuaV9FX2luaXQoZGV2LCBpdCk7Ci0JaWYgKHJldCA8IDApIHsKKwlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKLQl9CisKIAogCXJldHVybiAwOwogfQpAQCAtNTA5LDE2ICs1MDksMTYgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBuX25pX2JvYXJkczsgaSsrKSB7Ci0JCWlmIChuaV9ib2FyZHNbaV0uZGV2aWNlX2lkID09IGRldmljZV9pZCkgeworCQlpZiAobmlfYm9hcmRzW2ldLmRldmljZV9pZCA9PSBkZXZpY2VfaWQpCiAJCQlyZXR1cm4gaTsKLQkJfQorCiAJfQotCWlmIChkZXZpY2VfaWQgPT0gMjU1KSB7CisJaWYgKGRldmljZV9pZCA9PSAyNTUpCiAJCXByaW50aygiIGNhbid0IGZpbmQgYm9hcmRcbiIpOwotCX0gZWxzZSBpZiAoZGV2aWNlX2lkID09IDApIHsKKwkgZWxzZSBpZiAoZGV2aWNlX2lkID09IDApCiAJCXByaW50aygiIEVFUFJPTSByZWFkIGVycm9yICg/KSBvciBkZXZpY2Ugbm90IGZvdW5kXG4iKTsKLQl9IGVsc2UgeworCSBlbHNlCiAJCXByaW50aygiIHVua25vd24gZGV2aWNlIElEICVkIC0tIGNvbnRhY3QgYXV0aG9yXG4iLCBkZXZpY2VfaWQpOwotCX0KKwogCXJldHVybiAtMTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfNzAwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfZGFxXzcwMC5jCmluZGV4IGVmNWUxMTguLmM5YjAzOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9kYXFfNzAwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX2RhcV83MDAuYwpAQCAtNzYsMTMgKzc2LDE1IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGRpbzcwMF9ib2FyZCBkaW83MDBfYm9hcmRzW10gPSB7CiAJewogCSAubmFtZSA9ICJkYXFjYXJkLTcwMCIsCi0JIC5kZXZpY2VfaWQgPSAweDQ3NDMsCS8qICAweDEwYiBpcyBtYW51ZmFjdHVyZXIgaWQsIDB4NDc0MyBpcyBkZXZpY2UgaWQgKi8KKwkgIC8qICAweDEwYiBpcyBtYW51ZmFjdHVyZXIgaWQsIDB4NDc0MyBpcyBkZXZpY2UgaWQgKi8KKwkgLmRldmljZV9pZCA9IDB4NDc0MywKIAkgLmJ1c3R5cGUgPSBwY21jaWFfYnVzdHlwZSwKIAkgLmhhdmVfZGlvID0gMSwKIAkgfSwKIAl7CiAJIC5uYW1lID0gIm5pX2RhcV83MDAiLAotCSAuZGV2aWNlX2lkID0gMHg0NzQzLAkvKiAgMHgxMGIgaXMgbWFudWZhY3R1cmVyIGlkLCAweDQ3NDMgaXMgZGV2aWNlIGlkICovCisJICAvKiAgMHgxMGIgaXMgbWFudWZhY3R1cmVyIGlkLCAweDQ3NDMgaXMgZGV2aWNlIGlkICovCisJIC5kZXZpY2VfaWQgPSAweDQ3NDMsCiAJIC5idXN0eXBlID0gcGNtY2lhX2J1c3R5cGUsCiAJIC5oYXZlX2RpbyA9IDEsCiAJIH0sCkBAIC0zMDksMTEgKzMxMSwxMSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCUNBTExCQUNLX0FSRyA9IGFyZzsKLQlpZiAoY2IgPT0gTlVMTCkgeworCWlmIChjYiA9PSBOVUxMKQogCQlDQUxMQkFDS19GVU5DID0gc3ViZGV2XzcwMF9jYjsKLQl9IGVsc2UgeworCSBlbHNlCiAJCUNBTExCQUNLX0ZVTkMgPSBjYjsKLQl9CisKIAlzLT5pbnNuX2JpdHMgPSBzdWJkZXZfNzAwX2luc247CiAJcy0+aW5zbl9jb25maWcgPSBzdWJkZXZfNzAwX2luc25fY29uZmlnOwogCkBAIC0zNDUsMTIgKzM0NywxMCBAQAogCiB2b2lkIHN1YmRldl83MDBfY2xlYW51cChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LCBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcykKIHsKLQlpZiAocy0+cHJpdmF0ZSkgewotCQlpZiAoc3ViZGV2cHJpdi0+aGF2ZV9pcnEpIHsKLQkJfQorCWlmIChzLT5wcml2YXRlKQorCQlpZiAoc3ViZGV2cHJpdi0+aGF2ZV9pcnEpCiAKLQkJa2ZyZWUocy0+cHJpdmF0ZSk7Ci0JfQorCQkJa2ZyZWUocy0+cHJpdmF0ZSk7CiB9CiAKIEVYUE9SVF9TWU1CT0woc3ViZGV2XzcwMF9pbml0KTsKQEAgLTM5MCw5ICszOTAsOSBAQAogCXByaW50aygiY29tZWRpJWQ6IG5pX2RhcV83MDA6ICVzLCBpbyAweCVseCIsIGRldi0+bWlub3IsCiAJICAgICAgIHRoaXNib2FyZC0+bmFtZSwgaW9iYXNlKTsKICNpZmRlZiBpbmNvbXBsZXRlCi0JaWYgKGlycSkgeworCWlmIChpcnEpCiAJCXByaW50aygiLCBpcnEgJXUiLCBpcnEpOwotCX0KKwogI2VuZGlmCiAKIAlwcmludGsoIlxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbGFicGMuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5jCmluZGV4IGRjM2YzOTguLjNjODhjYWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9sYWJwYy5jCkBAIC05MCw4ICs5MCwxMCBAQAogCiAjZGVmaW5lIERSVl9OQU1FICJuaV9sYWJwYyIKIAotI2RlZmluZSBMQUJQQ19TSVpFICAgICAgICAgICAzMgkvKiAgc2l6ZSBvZiBpbyByZWdpb24gdXNlZCBieSBib2FyZCAqLwotI2RlZmluZSBMQUJQQ19USU1FUl9CQVNFICAgICAgICAgICAgNTAwCS8qICAyIE1IeiBtYXN0ZXIgY2xvY2sgKi8KKy8qIHNpemUgb2YgaW8gcmVnaW9uIHVzZWQgYnkgYm9hcmQgKi8KKyNkZWZpbmUgTEFCUENfU0laRSAgICAgICAgICAgMzIKKy8qIDIgTUh6IG1hc3RlciBjbG9jayAqLworI2RlZmluZSBMQUJQQ19USU1FUl9CQVNFICAgICAgICAgICAgNTAwCiAKIC8qIFJlZ2lzdGVycyBmb3IgdGhlIGxhYi1wYysgKi8KIApAQCAtOTksNjkgKzEwMSwxMTAgQEAKICNkZWZpbmUgQ09NTUFORDFfUkVHCTB4MAogI2RlZmluZSAgIEFEQ19HQUlOX01BU0sJKDB4NyA8PCA0KQogI2RlZmluZSAgIEFEQ19DSEFOX0JJVFMoeCkJKCh4KSAmIDB4NykKLSNkZWZpbmUgICBBRENfU0NBTl9FTl9CSVQJMHg4MAkvKiAgZW5hYmxlcyBtdWx0aSBjaGFubmVsIHNjYW5zICovCisvKiBlbmFibGVzIG11bHRpIGNoYW5uZWwgc2NhbnMgKi8KKyNkZWZpbmUgICBBRENfU0NBTl9FTl9CSVQJMHg4MAogI2RlZmluZSBDT01NQU5EMl9SRUcJMHgxCi0jZGVmaW5lICAgUFJFVFJJR19CSVQJMHgxCS8qICBlbmFibGUgcHJldHJpZ2dlcmluZyAodXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIFNXVFJJRykgKi8KLSNkZWZpbmUgICBIV1RSSUdfQklUCTB4MgkvKiAgZW5hYmxlIHBhY2VkIGNvbnZlcnNpb25zIG9uIGV4dGVybmFsIHRyaWdnZXIgKi8KLSNkZWZpbmUgICBTV1RSSUdfQklUCTB4NAkvKiAgZW5hYmxlIHBhY2VkIGNvbnZlcnNpb25zICovCi0jZGVmaW5lICAgQ0FTQ0FERV9CSVQJMHg4CS8qICB1c2UgdHdvIGNhc2NhZGVkIGNvdW50ZXJzIGZvciBwYWNpbmcgKi8KKy8qIGVuYWJsZSBwcmV0cmlnZ2VyaW5nICh1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggU1dUUklHKSAqLworI2RlZmluZSAgIFBSRVRSSUdfQklUCTB4MQorLyogZW5hYmxlIHBhY2VkIGNvbnZlcnNpb25zIG9uIGV4dGVybmFsIHRyaWdnZXIgKi8KKyNkZWZpbmUgICBIV1RSSUdfQklUCTB4MgorLyogZW5hYmxlIHBhY2VkIGNvbnZlcnNpb25zICovCisjZGVmaW5lICAgU1dUUklHX0JJVAkweDQKKy8qIHVzZSB0d28gY2FzY2FkZWQgY291bnRlcnMgZm9yIHBhY2luZyAqLworI2RlZmluZSAgIENBU0NBREVfQklUCTB4OAogI2RlZmluZSAgIERBQ19QQUNFRF9CSVQoY2hhbm5lbCkJKDB4NDAgPDwgKChjaGFubmVsKSAmIDB4MSkpCiAjZGVmaW5lIENPTU1BTkQzX1JFRwkweDIKLSNkZWZpbmUgICBETUFfRU5fQklUCTB4MQkvKiAgZW5hYmxlIGRtYSB0cmFuc2ZlcnMgKi8KLSNkZWZpbmUgICBESU9fSU5UUl9FTl9CSVQJMHgyCS8qICBlbmFibGUgaW50ZXJydXB0cyBmb3IgODI1NSAqLwotI2RlZmluZSAgIERNQVRDX0lOVFJfRU5fQklUCTB4NAkvKiAgZW5hYmxlIGRtYSB0ZXJtaW5hbCBjb3VudCBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICBUSU1FUl9JTlRSX0VOX0JJVAkweDgJLyogIGVuYWJsZSB0aW1lciBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICBFUlJfSU5UUl9FTl9CSVQJMHgxMAkvKiAgZW5hYmxlIGVycm9yIGludGVycnVwdCAqLwotI2RlZmluZSAgIEFEQ19GTkVfSU5UUl9FTl9CSVQJMHgyMAkvKiAgZW5hYmxlIGZpZm8gbm90IGVtcHR5IGludGVycnVwdCAqLworLyogZW5hYmxlIGRtYSB0cmFuc2ZlcnMgKi8KKyNkZWZpbmUgICBETUFfRU5fQklUCTB4MQorLyogZW5hYmxlIGludGVycnVwdHMgZm9yIDgyNTUgKi8KKyNkZWZpbmUgICBESU9fSU5UUl9FTl9CSVQJMHgyCisvKiBlbmFibGUgZG1hIHRlcm1pbmFsIGNvdW50IGludGVycnVwdCAqLworI2RlZmluZSAgIERNQVRDX0lOVFJfRU5fQklUCTB4NAorLyogZW5hYmxlIHRpbWVyIGludGVycnVwdCAqLworI2RlZmluZSAgIFRJTUVSX0lOVFJfRU5fQklUCTB4OAorLyogZW5hYmxlIGVycm9yIGludGVycnVwdCAqLworI2RlZmluZSAgIEVSUl9JTlRSX0VOX0JJVAkweDEwCisvKiBlbmFibGUgZmlmbyBub3QgZW1wdHkgaW50ZXJydXB0ICovCisjZGVmaW5lICAgQURDX0ZORV9JTlRSX0VOX0JJVAkweDIwCiAjZGVmaW5lIEFEQ19DT05WRVJUX1JFRwkweDMKICNkZWZpbmUgREFDX0xTQl9SRUcoY2hhbm5lbCkJKDB4NCArIDIgKiAoKGNoYW5uZWwpICYgMHgxKSkKICNkZWZpbmUgREFDX01TQl9SRUcoY2hhbm5lbCkJKDB4NSArIDIgKiAoKGNoYW5uZWwpICYgMHgxKSkKICNkZWZpbmUgQURDX0NMRUFSX1JFRwkweDgKICNkZWZpbmUgRE1BVENfQ0xFQVJfUkVHCTB4YQogI2RlZmluZSBUSU1FUl9DTEVBUl9SRUcJMHhjCi0jZGVmaW5lIENPTU1BTkQ2X1JFRwkweGUJLyogIDEyMDAgYm9hcmRzIG9ubHkgKi8KLSNkZWZpbmUgICBBRENfQ09NTU9OX0JJVAkweDEJLyogIHNlbGVjdCBncm91bmQgb3IgY29tbW9uLW1vZGUgcmVmZXJlbmNlICovCi0jZGVmaW5lICAgQURDX1VOSVBfQklUCTB4MgkvKiAgYWRjIHVuaXBvbGFyICovCi0jZGVmaW5lICAgREFDX1VOSVBfQklUKGNoYW5uZWwpCSgweDQgPDwgKChjaGFubmVsKSAmIDB4MSkpCS8qICBkYWMgdW5pcG9sYXIgKi8KLSNkZWZpbmUgICBBRENfRkhGX0lOVFJfRU5fQklUCTB4MjAJLyogIGVuYWJsZSBmaWZvIGhhbGYgZnVsbCBpbnRlcnJ1cHQgKi8KLSNkZWZpbmUgICBBMV9JTlRSX0VOX0JJVAkweDQwCS8qICBlbmFibGUgaW50ZXJydXB0IG9uIGVuZCBvZiBoYXJkd2FyZSBjb3VudCAqLwotI2RlZmluZSAgIEFEQ19TQ0FOX1VQX0JJVCAweDgwCS8qICBzY2FuIHVwIGZyb20gY2hhbm5lbCB6ZXJvIGluc3RlYWQgb2YgZG93biB0byB6ZXJvICovCisvKiAxMjAwIGJvYXJkcyBvbmx5ICovCisjZGVmaW5lIENPTU1BTkQ2X1JFRwkweGUKKy8qIHNlbGVjdCBncm91bmQgb3IgY29tbW9uLW1vZGUgcmVmZXJlbmNlICovCisjZGVmaW5lICAgQURDX0NPTU1PTl9CSVQJMHgxCisvKiAgYWRjIHVuaXBvbGFyICovCisjZGVmaW5lICAgQURDX1VOSVBfQklUCTB4MgorLyogIGRhYyB1bmlwb2xhciAqLworI2RlZmluZSAgIERBQ19VTklQX0JJVChjaGFubmVsKQkoMHg0IDw8ICgoY2hhbm5lbCkgJiAweDEpKQorLyogZW5hYmxlIGZpZm8gaGFsZiBmdWxsIGludGVycnVwdCAqLworI2RlZmluZSAgIEFEQ19GSEZfSU5UUl9FTl9CSVQJMHgyMAorLyogZW5hYmxlIGludGVycnVwdCBvbiBlbmQgb2YgaGFyZHdhcmUgY291bnQgKi8KKyNkZWZpbmUgICBBMV9JTlRSX0VOX0JJVAkweDQwCisvKiBzY2FuIHVwIGZyb20gY2hhbm5lbCB6ZXJvIGluc3RlYWQgb2YgZG93biB0byB6ZXJvICovCisjZGVmaW5lICAgQURDX1NDQU5fVVBfQklUIDB4ODAKICNkZWZpbmUgQ09NTUFORDRfUkVHCTB4ZgotI2RlZmluZSAgIElOVEVSVkFMX1NDQU5fRU5fQklUCTB4MQkvKiAgZW5hYmxlcyAnaW50ZXJ2YWwnIHNjYW5uaW5nICovCi0jZGVmaW5lICAgRVhUX1NDQU5fRU5fQklUCTB4MgkvKiAgZW5hYmxlcyBleHRlcm5hbCBzaWduYWwgb24gY291bnRlciBiMSBvdXRwdXQgdG8gdHJpZ2dlciBzY2FuICovCi0jZGVmaW5lICAgRVhUX0NPTlZFUlRfT1VUX0JJVAkweDQJLyogIGNob29zZXMgZGlyZWN0aW9uIChvdXRwdXQgb3IgaW5wdXQpIGZvciBFWFRDT05WKiBsaW5lICovCi0jZGVmaW5lICAgQURDX0RJRkZfQklUCTB4OAkvKiAgY2hvb3NlcyBkaWZmZXJlbnRpYWwgaW5wdXRzIGZvciBhZGMgKGluIGNvbmp1bmN0aW9uIHdpdGggYm9hcmQganVtcGVyKSAqLworLyogZW5hYmxlcyAnaW50ZXJ2YWwnIHNjYW5uaW5nICovCisjZGVmaW5lICAgSU5URVJWQUxfU0NBTl9FTl9CSVQJMHgxCisvKiBlbmFibGVzIGV4dGVybmFsIHNpZ25hbCBvbiBjb3VudGVyIGIxIG91dHB1dCB0byB0cmlnZ2VyIHNjYW4gKi8KKyNkZWZpbmUgICBFWFRfU0NBTl9FTl9CSVQJMHgyCisvKiBjaG9vc2VzIGRpcmVjdGlvbiAob3V0cHV0IG9yIGlucHV0KSBmb3IgRVhUQ09OViogbGluZSAqLworI2RlZmluZSAgIEVYVF9DT05WRVJUX09VVF9CSVQJMHg0CisvKiBjaG9vc2VzIGRpZmZlcmVudGlhbCBpbnB1dHMgZm9yIGFkYyAoaW4gY29uanVuY3Rpb24gd2l0aCBib2FyZCBqdW1wZXIpICovCisjZGVmaW5lICAgQURDX0RJRkZfQklUCTB4OAogI2RlZmluZSAgIEVYVF9DT05WRVJUX0RJU0FCTEVfQklUCTB4MTAKLSNkZWZpbmUgQ09NTUFORDVfUkVHCTB4MWMJLyogIDEyMDAgYm9hcmRzIG9ubHksIGNhbGlicmF0aW9uIHN0dWZmICovCi0jZGVmaW5lICAgRUVQUk9NX1dSSVRFX1VOUFJPVEVDVF9CSVQJMHg0CS8qICBlbmFibGUgZWVwcm9tIGZvciB3cml0ZSAqLwotI2RlZmluZSAgIERJVEhFUl9FTl9CSVQJMHg4CS8qICBlbmFibGUgZGl0aGVyaW5nICovCi0jZGVmaW5lICAgQ0FMREFDX0xPQURfQklUCTB4MTAJLyogIGxvYWQgY2FsaWJyYXRpb24gZGFjICovCi0jZGVmaW5lICAgU0NMT0NLX0JJVAkweDIwCS8qICBzZXJpYWwgY2xvY2sgLSByaXNpbmcgZWRnZSB3cml0ZXMsIGZhbGxpbmcgZWRnZSByZWFkcyAqLwotI2RlZmluZSAgIFNEQVRBX0JJVAkweDQwCS8qICBzZXJpYWwgZGF0YSBiaXQgZm9yIHdyaXRpbmcgdG8gZWVwcm9tIG9yIGNhbGlicmF0aW9uIGRhY3MgKi8KLSNkZWZpbmUgICBFRVBST01fRU5fQklUCTB4ODAJLyogIGVuYWJsZSBlZXByb20gZm9yIHJlYWQvd3JpdGUgKi8KKy8qIDEyMDAgYm9hcmRzIG9ubHksIGNhbGlicmF0aW9uIHN0dWZmICovCisjZGVmaW5lIENPTU1BTkQ1X1JFRwkweDFjCisvKiBlbmFibGUgZWVwcm9tIGZvciB3cml0ZSAqLworI2RlZmluZSAgIEVFUFJPTV9XUklURV9VTlBST1RFQ1RfQklUCTB4NAorLyogZW5hYmxlIGRpdGhlcmluZyAqLworI2RlZmluZSAgIERJVEhFUl9FTl9CSVQJMHg4CisvKiBsb2FkIGNhbGlicmF0aW9uIGRhYyAqLworI2RlZmluZSAgIENBTERBQ19MT0FEX0JJVAkweDEwCisvKiBzZXJpYWwgY2xvY2sgLSByaXNpbmcgZWRnZSB3cml0ZXMsIGZhbGxpbmcgZWRnZSByZWFkcyAqLworI2RlZmluZSAgIFNDTE9DS19CSVQJMHgyMAorLyogc2VyaWFsIGRhdGEgYml0IGZvciB3cml0aW5nIHRvIGVlcHJvbSBvciBjYWxpYnJhdGlvbiBkYWNzICovCisjZGVmaW5lICAgU0RBVEFfQklUCTB4NDAKKy8qIGVuYWJsZSBlZXByb20gZm9yIHJlYWQvd3JpdGUgKi8KKyNkZWZpbmUgICBFRVBST01fRU5fQklUCTB4ODAKICNkZWZpbmUgSU5URVJWQUxfQ09VTlRfUkVHCTB4MWUKICNkZWZpbmUgSU5URVJWQUxfTE9BRF9SRUcJMHgxZgogI2RlZmluZSAgIElOVEVSVkFMX0xPQURfQklUUwkweDEKIAogLyogcmVhZC1vbmx5IHJlZ2lzdGVycyAqLwogI2RlZmluZSBTVEFUVVMxX1JFRwkweDAKLSNkZWZpbmUgICBEQVRBX0FWQUlMX0JJVAkweDEJLyogIGRhdGEgaXMgYXZhaWxhYmxlIGluIGZpZm8gKi8KLSNkZWZpbmUgICBPVkVSUlVOX0JJVAkweDIJLyogIG92ZXJydW4gaGFzIG9jY3VycmVkICovCi0jZGVmaW5lICAgT1ZFUkZMT1dfQklUCTB4NAkvKiAgZmlmbyBvdmVyZmxvdyAqLwotI2RlZmluZSAgIFRJTUVSX0JJVAkweDgJLyogIHRpbWVyIGludGVycnVwdCBoYXMgb2NjdXJlZCAqLwotI2RlZmluZSAgIERNQVRDX0JJVAkweDEwCS8qICBkbWEgdGVybWluYWwgY291bnQgaGFzIG9jY3VyZWQgKi8KLSNkZWZpbmUgICBFWFRfVFJJR19CSVQJMHg0MAkvKiAgZXh0ZXJuYWwgdHJpZ2dlciBoYXMgb2NjdXJlZCAqLwotI2RlZmluZSBTVEFUVVMyX1JFRwkweDFkCS8qICAxMjAwIGJvYXJkcyBvbmx5ICovCi0jZGVmaW5lICAgRUVQUk9NX09VVF9CSVQJMHgxCS8qICBwcm9ncmFtbWFibGUgZWVwcm9tIHNlcmlhbCBvdXRwdXQgKi8KLSNkZWZpbmUgICBBMV9UQ19CSVQJMHgyCS8qICBjb3VudGVyIEExIHRlcm1pbmFsIGNvdW50ICovCi0jZGVmaW5lICAgRk5IRl9CSVQJMHg0CS8qICBmaWZvIG5vdCBoYWxmIGZ1bGwgKi8KKy8qIGRhdGEgaXMgYXZhaWxhYmxlIGluIGZpZm8gKi8KKyNkZWZpbmUgICBEQVRBX0FWQUlMX0JJVAkweDEKKy8qIG92ZXJydW4gaGFzIG9jY3VycmVkICovCisjZGVmaW5lICAgT1ZFUlJVTl9CSVQJMHgyCisvKiBmaWZvIG92ZXJmbG93ICovCisjZGVmaW5lICAgT1ZFUkZMT1dfQklUCTB4NAorLyogdGltZXIgaW50ZXJydXB0IGhhcyBvY2N1cmVkICovCisjZGVmaW5lICAgVElNRVJfQklUCTB4OAorLyogZG1hIHRlcm1pbmFsIGNvdW50IGhhcyBvY2N1cmVkICovCisjZGVmaW5lICAgRE1BVENfQklUCTB4MTAKKy8qIGV4dGVybmFsIHRyaWdnZXIgaGFzIG9jY3VyZWQgKi8KKyNkZWZpbmUgICBFWFRfVFJJR19CSVQJMHg0MAorLyogMTIwMCBib2FyZHMgb25seSAqLworI2RlZmluZSBTVEFUVVMyX1JFRwkweDFkCisvKiBwcm9ncmFtbWFibGUgZWVwcm9tIHNlcmlhbCBvdXRwdXQgKi8KKyNkZWZpbmUgICBFRVBST01fT1VUX0JJVAkweDEKKy8qIGNvdW50ZXIgQTEgdGVybWluYWwgY291bnQgKi8KKyNkZWZpbmUgICBBMV9UQ19CSVQJMHgyCisvKiBmaWZvIG5vdCBoYWxmIGZ1bGwgKi8KKyNkZWZpbmUgICBGTkhGX0JJVAkweDQKICNkZWZpbmUgQURDX0ZJRk9fUkVHCTB4YQogCiAjZGVmaW5lIERJT19CQVNFX1JFRwkweDEwCiAjZGVmaW5lIENPVU5URVJfQV9CQVNFX1JFRwkweDE0CiAjZGVmaW5lIENPVU5URVJfQV9DT05UUk9MX1JFRwkoQ09VTlRFUl9BX0JBU0VfUkVHICsgMHgzKQotI2RlZmluZSAgIElOSVRfQTBfQklUUwkweDE0CS8qICBjaGVjayBtb2RlcyBwdXQgY29udmVyc2lvbiBwYWNlciBvdXRwdXQgaW4gaGFybWxlc3Mgc3RhdGUgKGEwIG1vZGUgMikgKi8KLSNkZWZpbmUgICBJTklUX0ExX0JJVFMJMHg3MAkvKiAgcHV0IGhhcmR3YXJlIGNvbnZlcnNpb24gY291bnRlciBvdXRwdXQgaW4gaGFybWxlc3Mgc3RhdGUgKGExIG1vZGUgMCkgKi8KKy8qIGNoZWNrIG1vZGVzIHB1dCBjb252ZXJzaW9uIHBhY2VyIG91dHB1dCBpbiBoYXJtbGVzcyBzdGF0ZSAoYTAgbW9kZSAyKSAqLworI2RlZmluZSAgIElOSVRfQTBfQklUUwkweDE0CisvKiBwdXQgaGFyZHdhcmUgY29udmVyc2lvbiBjb3VudGVyIG91dHB1dCBpbiBoYXJtbGVzcyBzdGF0ZSAoYTEgbW9kZSAwKSAqLworI2RlZmluZSAgIElOSVRfQTFfQklUUwkweDcwCiAjZGVmaW5lIENPVU5URVJfQl9CQVNFX1JFRwkweDE4CiAKIHN0YXRpYyBpbnQgbGFicGNfYXR0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsIHN0cnVjdCBjb21lZGlfZGV2Y29uZmlnICppdCk7CkBAIC00MjMsNyArNDY2LDcgQEAKIAkgLmFpX3NjYW5fdXAgPSAxLAogCSAubWVtb3J5X21hcHBlZF9pbyA9IDEsCiAJIH0sCi0JLyogIGR1bW15IGVudHJ5IHNvIHBjaSBib2FyZCB3b3JrcyB3aGVuIGNvbWVkaV9jb25maWcgaXMgcGFzc2VkIGRyaXZlciBuYW1lICovCisvKiBkdW1teSBlbnRyeSBzbyBwY2kgYm9hcmQgd29ya3Mgd2hlbiBjb21lZGlfY29uZmlnIGlzIHBhc3NlZCBkcml2ZXIgbmFtZSAqLwogCXsKIAkgLm5hbWUgPSBEUlZfTkFNRSwKIAkgLmJ1c3R5cGUgPSBwY2lfYnVzdHlwZSwKQEAgLTQzNiw4ICs0NzksMTAgQEAKICAqLwogI2RlZmluZSB0aGlzYm9hcmQgKChzdHJ1Y3QgbGFicGNfYm9hcmRfc3RydWN0ICopZGV2LT5ib2FyZF9wdHIpCiAKLXN0YXRpYyBjb25zdCBpbnQgZG1hX2J1ZmZlcl9zaXplID0gMHhmZjAwOwkvKiAgc2l6ZSBpbiBieXRlcyBvZiBkbWEgYnVmZmVyICovCi1zdGF0aWMgY29uc3QgaW50IHNhbXBsZV9zaXplID0gMjsJLyogIDIgYnl0ZXMgcGVyIHNhbXBsZSAqLworLyogc2l6ZSBpbiBieXRlcyBvZiBkbWEgYnVmZmVyICovCitzdGF0aWMgY29uc3QgaW50IGRtYV9idWZmZXJfc2l6ZSA9IDB4ZmYwMDsKKy8qIDIgYnl0ZXMgcGVyIHNhbXBsZSAqLworc3RhdGljIGNvbnN0IGludCBzYW1wbGVfc2l6ZSA9IDI7CiAKICNkZWZpbmUgZGV2cHJpdiAoKHN0cnVjdCBsYWJwY19wcml2YXRlICopZGV2LT5wcml2YXRlKQogCkBAIC00ODMsMTIgKzUyOCwxMCBAQAogCiAJcHJpbnRrKCJjb21lZGklZDogbmlfbGFicGM6ICVzLCBpbyAweCVseCIsIGRldi0+bWlub3IsIHRoaXNib2FyZC0+bmFtZSwKIAkgICAgICAgaW9iYXNlKTsKLQlpZiAoaXJxKSB7CisJaWYgKGlycSkKIAkJcHJpbnRrKCIsIGlycSAldSIsIGlycSk7Ci0JfQotCWlmIChkbWFfY2hhbikgeworCWlmIChkbWFfY2hhbikKIAkJcHJpbnRrKCIsIGRtYSAldSIsIGRtYV9jaGFuKTsKLQl9CiAJcHJpbnRrKCJcbiIpOwogCiAJaWYgKGlvYmFzZSA9PSAwKSB7CkBAIC01MTMsNyArNTU2LDcgQEAKIAkJZGV2cHJpdi0+cmVhZF9ieXRlID0gbGFicGNfaW5iOwogCQlkZXZwcml2LT53cml0ZV9ieXRlID0gbGFicGNfb3V0YjsKIAl9Ci0JLyogIGluaXRpYWxpemUgYm9hcmQncyBjb21tYW5kIHJlZ2lzdGVycyAqLworCS8qIGluaXRpYWxpemUgYm9hcmQncyBjb21tYW5kIHJlZ2lzdGVycyAqLwogCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDFfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EMV9SRUcpOwogCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDJfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EMl9SRUcpOwogCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDNfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EM19SRUcpOwpAQCAtNTM4LDEyICs1ODEsMTIgQEAKIAl9CiAJZGV2LT5pcnEgPSBpcnE7CiAKLQkvKiAgZ3JhYiBkbWEgY2hhbm5lbCAqLworCS8qIGdyYWIgZG1hIGNoYW5uZWwgKi8KIAlpZiAoZG1hX2NoYW4gPiAzKSB7CiAJCXByaW50aygiIGludmFsaWQgZG1hIGNoYW5uZWwgJXVcbiIsIGRtYV9jaGFuKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfSBlbHNlIGlmIChkbWFfY2hhbikgewotCQkvKiAgYWxsb2NhdGUgZG1hIGJ1ZmZlciAqLworCQkvKiBhbGxvY2F0ZSBkbWEgYnVmZmVyICovCiAJCWRldnByaXYtPmRtYV9idWZmZXIgPQogCQkgICAga21hbGxvYyhkbWFfYnVmZmVyX3NpemUsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKIAkJaWYgKGRldnByaXYtPmRtYV9idWZmZXIgPT0gTlVMTCkgewpAQCAtNTc1LDcgKzYxOCw3IEBACiAJICAgIFNERl9SRUFEQUJMRSB8IFNERl9HUk9VTkQgfCBTREZfQ09NTU9OIHwgU0RGX0RJRkYgfCBTREZfQ01EX1JFQUQ7CiAJcy0+bl9jaGFuID0gODsKIAlzLT5sZW5fY2hhbmxpc3QgPSA4OwotCXMtPm1heGRhdGEgPSAoMSA8PCAxMikgLSAxOwkvKiAgMTIgYml0IHJlc29sdXRpb24gKi8KKwlzLT5tYXhkYXRhID0gKDEgPDwgMTIpIC0gMTsJLyogMTIgYml0IHJlc29sdXRpb24gKi8KIAlzLT5yYW5nZV90YWJsZSA9IHRoaXNib2FyZC0+YWlfcmFuZ2VfdGFibGU7CiAJcy0+ZG9fY21kID0gbGFicGNfYWlfY21kOwogCXMtPmRvX2NtZHRlc3QgPSBsYWJwY19haV9jbWR0ZXN0OwpAQCAtNTg1LDggKzYyOCwxMSBAQAogCS8qIGFuYWxvZyBvdXRwdXQgKi8KIAlzID0gZGV2LT5zdWJkZXZpY2VzICsgMTsKIAlpZiAodGhpc2JvYXJkLT5oYXNfYW8pIHsKLS8qIENvdWxkIHByb3ZpZGUgY29tbWFuZCBzdXBwb3J0LCBleGNlcHQgaXQgb25seSBoYXMgYSBvbmUgc2FtcGxlCi0gKiBoYXJkd2FyZSBidWZmZXIgZm9yIGFuYWxvZyBvdXRwdXQgYW5kIG5vIHVuZGVycnVuIGZsYWcuICovCisJCS8qCisJCSAqIENvdWxkIHByb3ZpZGUgY29tbWFuZCBzdXBwb3J0LCBleGNlcHQgaXQgb25seSBoYXMgYQorCQkgKiBvbmUgc2FtcGxlIGhhcmR3YXJlIGJ1ZmZlciBmb3IgYW5hbG9nIG91dHB1dCBhbmQgbm8KKwkJICogdW5kZXJydW4gZmxhZy4KKwkJICovCiAJCXMtPnR5cGUgPSBDT01FRElfU1VCRF9BTzsKIAkJcy0+c3ViZGV2X2ZsYWdzID0gU0RGX1JFQURBQkxFIHwgU0RGX1dSSVRBQkxFIHwgU0RGX0dST1VORDsKIAkJcy0+bl9jaGFuID0gTlVNX0FPX0NIQU47CkBAIC02MDgsNyArNjU0LDggQEAKIAogCS8qIDgyNTUgZGlvICovCiAJcyA9IGRldi0+c3ViZGV2aWNlcyArIDI7Ci0JLyogIGlmIGJvYXJkIHVzZXMgaW8gbWVtb3J5IHdlIGhhdmUgdG8gZ2l2ZSBhIGN1c3RvbSBjYWxsYmFjayBmdW5jdGlvbiB0byB0aGUgODI1NSBkcml2ZXIgKi8KKwkvKiAgaWYgYm9hcmQgdXNlcyBpbyBtZW1vcnkgd2UgaGF2ZSB0byBnaXZlIGEgY3VzdG9tIGNhbGxiYWNrCisJICogZnVuY3Rpb24gdG8gdGhlIDgyNTUgZHJpdmVyICovCiAJaWYgKHRoaXNib2FyZC0+bWVtb3J5X21hcHBlZF9pbykKIAkJc3ViZGV2XzgyNTVfaW5pdChkZXYsIHMsIGxhYnBjX2Rpb19tZW1fY2FsbGJhY2ssCiAJCQkJICh1bnNpZ25lZCBsb25nKShkZXYtPmlvYmFzZSArIERJT19CQVNFX1JFRykpOwpAQCAtNjQwLDE0ICs2ODcsMTIgQEAKIAkJcy0+aW5zbl9yZWFkID0gbGFicGNfZWVwcm9tX3JlYWRfaW5zbjsKIAkJcy0+aW5zbl93cml0ZSA9IGxhYnBjX2VlcHJvbV93cml0ZV9pbnNuOwogCi0JCWZvciAoaSA9IDA7IGkgPCBFRVBST01fU0laRTsgaSsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCBFRVBST01fU0laRTsgaSsrKQogCQkJZGV2cHJpdi0+ZWVwcm9tX2RhdGFbaV0gPSBsYWJwY19lZXByb21fcmVhZChkZXYsIGkpOwotCQl9CiAjaWZkZWYgTEFCUENfREVCVUcKIAkJcHJpbnRrKCIgZWVwcm9tOiIpOwotCQlmb3IgKGkgPSAwOyBpIDwgRUVQUk9NX1NJWkU7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgRUVQUk9NX1NJWkU7IGkrKykKIAkJCXByaW50aygiICVpOjB4JXggIiwgaSwgZGV2cHJpdi0+ZWVwcm9tX2RhdGFbaV0pOwotCQl9CiAJCXByaW50aygiXG4iKTsKICNlbmRpZgogCX0gZWxzZQpAQCAtNjY5LDcgKzcxNCw3IEBACiAJaWYgKGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IGxhYnBjX3ByaXZhdGUpKSA8IDApCiAJCXJldHVybiAtRU5PTUVNOwogCi0JLyogIGdldCBiYXNlIGFkZHJlc3MsIGlycSBldGMuIGJhc2VkIG9uIGJ1c3R5cGUgKi8KKwkvKiBnZXQgYmFzZSBhZGRyZXNzLCBpcnEgZXRjLiBiYXNlZCBvbiBidXN0eXBlICovCiAJc3dpdGNoICh0aGlzYm9hcmQtPmJ1c3R5cGUpIHsKIAljYXNlIGlzYV9idXN0eXBlOgogCQlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKQEAgLTY3OSw5ICs3MjQsOCBAQAogCWNhc2UgcGNpX2J1c3R5cGU6CiAjaWZkZWYgQ09ORklHX0NPTUVESV9QQ0kKIAkJcmV0dmFsID0gbGFicGNfZmluZF9kZXZpY2UoZGV2LCBpdC0+b3B0aW9uc1swXSwgaXQtPm9wdGlvbnNbMV0pOwotCQlpZiAocmV0dmFsIDwgMCkgeworCQlpZiAocmV0dmFsIDwgMCkKIAkJCXJldHVybiByZXR2YWw7Ci0JCX0KIAkJcmV0dmFsID0gbWl0ZV9zZXR1cChkZXZwcml2LT5taXRlKTsKIAkJaWYgKHJldHZhbCA8IDApCiAJCQlyZXR1cm4gcmV0dmFsOwpAQCAtNzE1LDcgKzc1OSw3IEBACiAJZm9yIChtaXRlID0gbWl0ZV9kZXZpY2VzOyBtaXRlOyBtaXRlID0gbWl0ZS0+bmV4dCkgewogCQlpZiAobWl0ZS0+dXNlZCkKIAkJCWNvbnRpbnVlOwotCQkvKiAgaWYgYnVzL3Nsb3QgYXJlIHNwZWNpZmllZCB0aGVuIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBidXMvc2xvdCAqLworLyogaWYgYnVzL3Nsb3QgYXJlIHNwZWNpZmllZCB0aGVuIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBidXMvc2xvdCAqLwogCQlpZiAoYnVzIHx8IHNsb3QpIHsKIAkJCWlmIChidXMgIT0gbWl0ZS0+cGNpZGV2LT5idXMtPm51bWJlcgogCQkJICAgIHx8IHNsb3QgIT0gUENJX1NMT1QobWl0ZS0+cGNpZGV2LT5kZXZmbikpCkBAIC03MjYsNyArNzcwLDcgQEAKIAkJCQljb250aW51ZTsKIAkJCWlmIChtaXRlX2RldmljZV9pZChtaXRlKSA9PSBsYWJwY19ib2FyZHNbaV0uZGV2aWNlX2lkKSB7CiAJCQkJZGV2cHJpdi0+bWl0ZSA9IG1pdGU7Ci0JCQkJLyogIGZpeHVwIGJvYXJkIHBvaW50ZXIsIGluIGNhc2Ugd2Ugd2VyZSB1c2luZyB0aGUgZHVtbXkgIm5pX2xhYnBjIiBlbnRyeSAqLworLyogZml4dXAgYm9hcmQgcG9pbnRlciwgaW4gY2FzZSB3ZSB3ZXJlIHVzaW5nIHRoZSBkdW1teSAibmlfbGFicGMiIGVudHJ5ICovCiAJCQkJZGV2LT5ib2FyZF9wdHIgPSAmbGFicGNfYm9hcmRzW2ldOwogCQkJCXJldHVybiAwOwogCQkJfQpAQCAtOTk0LDcgKzEwMzgsNyBAQAogCSAgICBjbWQtPnN0b3Bfc3JjICE9IFRSSUdfRVhUICYmIGNtZC0+c3RvcF9zcmMgIT0gVFJJR19OT05FKQogCQllcnIrKzsKIAotCS8qICBjYW4ndCBoYXZlIGV4dGVybmFsIHN0b3AgYW5kIHN0YXJ0IHRyaWdnZXJzIGF0IG9uY2UgKi8KKwkvKiBjYW4ndCBoYXZlIGV4dGVybmFsIHN0b3AgYW5kIHN0YXJ0IHRyaWdnZXJzIGF0IG9uY2UgKi8KIAlpZiAoY21kLT5zdGFydF9zcmMgPT0gVFJJR19FWFQgJiYgY21kLT5zdG9wX3NyYyA9PSBUUklHX0VYVCkKIAkJZXJyKys7CiAKQEAgLTEwMDgsOSArMTA1Miw5IEBACiAJCWVycisrOwogCX0KIAotCWlmICghY21kLT5jaGFubGlzdF9sZW4pIHsKKwlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKQogCQllcnIrKzsKLQl9CisKIAlpZiAoY21kLT5zY2FuX2VuZF9hcmcgIT0gY21kLT5jaGFubGlzdF9sZW4pIHsKIAkJY21kLT5zY2FuX2VuZF9hcmcgPSBjbWQtPmNoYW5saXN0X2xlbjsKIAkJZXJyKys7CkBAIC0xMDIyLDcgKzEwNjYsNyBAQAogCQkJZXJyKys7CiAJCX0KIAl9Ci0JLyogIG1ha2Ugc3VyZSBzY2FuIHRpbWluZyBpcyBub3QgdG9vIGZhc3QgKi8KKwkvKiBtYWtlIHN1cmUgc2NhbiB0aW1pbmcgaXMgbm90IHRvbyBmYXN0ICovCiAJaWYgKGNtZC0+c2Nhbl9iZWdpbl9zcmMgPT0gVFJJR19USU1FUikgewogCQlpZiAoY21kLT5jb252ZXJ0X3NyYyA9PSBUUklHX1RJTUVSICYmCiAJCSAgICBjbWQtPnNjYW5fYmVnaW5fYXJnIDwKQEAgLTEwMzgsNyArMTA4Miw3IEBACiAJCQllcnIrKzsKIAkJfQogCX0KLQkvKiAgc3RvcCBzb3VyY2UgKi8KKwkvKiBzdG9wIHNvdXJjZSAqLwogCXN3aXRjaCAoY21kLT5zdG9wX3NyYykgewogCWNhc2UgVFJJR19DT1VOVDoKIAkJaWYgKCFjbWQtPnN0b3BfYXJnKSB7CkBAIC0xMDk1LDcgKzExMzksNyBAQAogCXJhbmdlID0gQ1JfUkFOR0UoY21kLT5jaGFubGlzdFswXSk7CiAJYXJlZiA9IENSX0FSRUYoY21kLT5jaGFubGlzdFswXSk7CiAKLQkvKiAgbWFrZSBzdXJlIGJvYXJkIGlzIGRpc2FibGVkIGJlZm9yZSBzZXR0aW5nIHVwIGFxdWlzaXRpb24gKi8KKwkvKiBtYWtlIHN1cmUgYm9hcmQgaXMgZGlzYWJsZWQgYmVmb3JlIHNldHRpbmcgdXAgYXF1aXNpdGlvbiAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNwaW5sb2NrLCBmbGFncyk7CiAJZGV2cHJpdi0+Y29tbWFuZDJfYml0cyAmPSB+U1dUUklHX0JJVCAmIH5IV1RSSUdfQklUICYgflBSRVRSSUdfQklUOwogCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDJfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EMl9SRUcpOwpAQCAtMTEwNSw5ICsxMTQ5LDkgQEAKIAlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQzX2JpdHMsIGRldi0+aW9iYXNlICsgQ09NTUFORDNfUkVHKTsKIAogCS8qICBpbml0aWFsaXplIHNvZnR3YXJlIGNvbnZlcnNpb24gY291bnQgKi8KLQlpZiAoY21kLT5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKSB7CisJaWYgKGNtZC0+c3RvcF9zcmMgPT0gVFJJR19DT1VOVCkKIAkJZGV2cHJpdi0+Y291bnQgPSBjbWQtPnN0b3BfYXJnICogY21kLT5jaGFubGlzdF9sZW47Ci0JfQorCiAJLyogIHNldHVwIGhhcmR3YXJlIGNvbnZlcnNpb24gY291bnRlciAqLwogCWlmIChjbWQtPnN0b3Bfc3JjID09IFRSSUdfRVhUKSB7CiAJCS8qICBsb2FkIGNvdW50ZXIgYTEgd2l0aCBjb3VudCBvZiAzIChwYysgbWFudWFsIHNheXMgdGhpcyBpcyBtaW5pbXVtIGFsbG93ZWQpIHVzaW5nIG1vZGUgMCAqLwpAQCAtMTE3NiwxNyArMTIyMCwxOCBAQAogCQljaGFubmVsID0gQ1JfQ0hBTihjbWQtPmNoYW5saXN0W2NtZC0+Y2hhbmxpc3RfbGVuIC0gMV0pOwogCWVsc2UKIAkJY2hhbm5lbCA9IENSX0NIQU4oY21kLT5jaGFubGlzdFswXSk7Ci0JLyogIG11bmdlIGNoYW5uZWwgYml0cyBmb3IgZGlmZmVyZW50aWFsIC8gc2NhbiBkaXNhYmxlZCBtb2RlICovCisJLyogbXVuZ2UgY2hhbm5lbCBiaXRzIGZvciBkaWZmZXJlbnRpYWwgLyBzY2FuIGRpc2FibGVkIG1vZGUgKi8KIAlpZiAobGFicGNfYWlfc2Nhbl9tb2RlKGNtZCkgIT0gTU9ERV9TSU5HTEVfQ0hBTiAmJiBhcmVmID09IEFSRUZfRElGRikKIAkJY2hhbm5lbCAqPSAyOwogCWRldnByaXYtPmNvbW1hbmQxX2JpdHMgfD0gQURDX0NIQU5fQklUUyhjaGFubmVsKTsKIAlkZXZwcml2LT5jb21tYW5kMV9iaXRzIHw9IHRoaXNib2FyZC0+YWlfcmFuZ2VfY29kZVtyYW5nZV07CiAJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kMV9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQxX1JFRyk7Ci0JLyogIG1hbnVhbCBzYXlzIHRvIHNldCBzY2FuIGVuYWJsZSBiaXQgb24gc2Vjb25kIHBhc3MgKi8KKwkvKiBtYW51YWwgc2F5cyB0byBzZXQgc2NhbiBlbmFibGUgYml0IG9uIHNlY29uZCBwYXNzICovCiAJaWYgKGxhYnBjX2FpX3NjYW5fbW9kZShjbWQpID09IE1PREVfTVVMVF9DSEFOX1VQIHx8CiAJICAgIGxhYnBjX2FpX3NjYW5fbW9kZShjbWQpID09IE1PREVfTVVMVF9DSEFOX0RPV04pIHsKIAkJZGV2cHJpdi0+Y29tbWFuZDFfYml0cyB8PSBBRENfU0NBTl9FTl9CSVQ7Ci0JCS8qIG5lZWQgYSBicmllZiBkZWxheSBiZWZvcmUgZW5hYmxpbmcgc2Nhbiwgb3Igc2NhbiBsaXN0IHdpbGwgZ2V0IHNjcmV3ZWQgd2hlbiB5b3Ugc3dpdGNoCisJCS8qIG5lZWQgYSBicmllZiBkZWxheSBiZWZvcmUgZW5hYmxpbmcgc2Nhbiwgb3Igc2NhbgorCQkgKiBsaXN0IHdpbGwgZ2V0IHNjcmV3ZWQgd2hlbiB5b3Ugc3dpdGNoCiAJCSAqIGJldHdlZW4gc2NhbiB1cCB0byBzY2FuIGRvd24gbW9kZSAtIGR1bm5vIHdoeSAqLwogCQl1ZGVsYXkoMSk7CiAJCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDFfYml0cywKQEAgLTEzMzgsNyArMTM4Myw3IEBACiAJY21kID0gJmFzeW5jLT5jbWQ7CiAJYXN5bmMtPmV2ZW50cyA9IDA7CiAKLQkvKiAgcmVhZCBib2FyZCBzdGF0dXMgKi8KKwkvKiByZWFkIGJvYXJkIHN0YXR1cyAqLwogCWRldnByaXYtPnN0YXR1czFfYml0cyA9IGRldnByaXYtPnJlYWRfYnl0ZShkZXYtPmlvYmFzZSArIFNUQVRVUzFfUkVHKTsKIAlpZiAodGhpc2JvYXJkLT5yZWdpc3Rlcl9sYXlvdXQgPT0gbGFicGNfMTIwMF9sYXlvdXQpCiAJCWRldnByaXYtPnN0YXR1czJfYml0cyA9CkBAIC0xMzUyLDcgKzEzOTcsNyBAQAogCX0KIAogCWlmIChkZXZwcml2LT5zdGF0dXMxX2JpdHMgJiBPVkVSUlVOX0JJVCkgewotCQkvKiAgY2xlYXIgZXJyb3IgaW50ZXJydXB0ICovCisJCS8qIGNsZWFyIGVycm9yIGludGVycnVwdCAqLwogCQlkZXZwcml2LT53cml0ZV9ieXRlKDB4MSwgZGV2LT5pb2Jhc2UgKyBBRENfQ0xFQVJfUkVHKTsKIAkJYXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRVJST1IgfCBDT01FRElfQ0JfRU9BOwogCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKQEAgLTEzNjEsNyArMTQwNiwxMCBAQAogCX0KIAogCWlmIChkZXZwcml2LT5jdXJyZW50X3RyYW5zZmVyID09IGlzYV9kbWFfdHJhbnNmZXIpIHsKLQkJLyogIGlmIGEgZG1hIHRlcm1pbmFsIGNvdW50IG9mIGV4dGVybmFsIHN0b3AgdHJpZ2dlciBoYXMgb2NjdXJyZWQgKi8KKwkJLyoKKwkJICogaWYgYSBkbWEgdGVybWluYWwgY291bnQgb2YgZXh0ZXJuYWwgc3RvcCB0cmlnZ2VyCisJCSAqIGhhcyBvY2N1cnJlZAorCQkgKi8KIAkJaWYgKGRldnByaXYtPnN0YXR1czFfYml0cyAmIERNQVRDX0JJVCB8fAogCQkgICAgKHRoaXNib2FyZC0+cmVnaXN0ZXJfbGF5b3V0ID09IGxhYnBjXzEyMDBfbGF5b3V0CiAJCSAgICAgJiYgZGV2cHJpdi0+c3RhdHVzMl9iaXRzICYgQTFfVENfQklUKSkgewpAQCAtMTQ3OSw5ICsxNTI3LDkgQEAKIAl9CiAKIAkvKiB3cml0ZSBkYXRhIHRvIGNvbWVkaSBidWZmZXIgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3BvaW50czsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IG51bV9wb2ludHM7IGkrKykKIAkJY2ZjX3dyaXRlX3RvX2J1ZmZlcihzLCBkZXZwcml2LT5kbWFfYnVmZmVyW2ldKTsKLQl9CisKIAlpZiAoYXN5bmMtPmNtZC5zdG9wX3NyYyA9PSBUUklHX0NPVU5UKQogCQlkZXZwcml2LT5jb3VudCAtPSBudW1fcG9pbnRzOwogCkBAIC0xNTAzLDcgKzE1NTEsNyBAQAogCWRldnByaXYtPndyaXRlX2J5dGUoMHgxLCBkZXYtPmlvYmFzZSArIERNQVRDX0NMRUFSX1JFRyk7CiB9CiAKLS8qIG1ha2VzIHN1cmUgYWxsIGRhdGEgYXF1aXJlZCBieSBib2FyZCBpcyB0cmFuc2ZlcmVkIHRvIGNvbWVkaSAodXNlZAorLyogbWFrZXMgc3VyZSBhbGwgZGF0YSBhY3F1aXJlZCBieSBib2FyZCBpcyB0cmFuc2ZlcmVkIHRvIGNvbWVkaSAodXNlZAogICogd2hlbiBhcXVpc2l0aW9uIGlzIHRlcm1pbmF0ZWQgYnkgc3RvcF9zcmMgPT0gVFJJR19FWFQpLiAqLwogc3RhdGljIHZvaWQgbGFicGNfZHJhaW5fZHJlZ3Moc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKQEAgLTE1MzcsNDEgKzE1ODUsNDEgQEAKIAljaGFuID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAJcmFuZ2UgPSBDUl9SQU5HRShpbnNuLT5jaGFuc3BlYyk7CiAJZGV2cHJpdi0+Y29tbWFuZDFfYml0cyB8PSB0aGlzYm9hcmQtPmFpX3JhbmdlX2NvZGVbcmFuZ2VdOwotCS8qICBtdW5nZSBjaGFubmVsIGJpdHMgZm9yIGRpZmZlcmVudGlhbC9zY2FuIGRpc2FibGVkIG1vZGUgKi8KKwkvKiBtdW5nZSBjaGFubmVsIGJpdHMgZm9yIGRpZmZlcmVudGlhbC9zY2FuIGRpc2FibGVkIG1vZGUgKi8KIAlpZiAoQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykgPT0gQVJFRl9ESUZGKQogCQljaGFuICo9IDI7CiAJZGV2cHJpdi0+Y29tbWFuZDFfYml0cyB8PSBBRENfQ0hBTl9CSVRTKGNoYW4pOwogCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDFfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5EMV9SRUcpOwogCi0JLyogIHNldHVwIGNvbW1hbmQ2IHJlZ2lzdGVyIGZvciAxMjAwIGJvYXJkcyAqLworCS8qIHNldHVwIGNvbW1hbmQ2IHJlZ2lzdGVyIGZvciAxMjAwIGJvYXJkcyAqLwogCWlmICh0aGlzYm9hcmQtPnJlZ2lzdGVyX2xheW91dCA9PSBsYWJwY18xMjAwX2xheW91dCkgewogCQkvKiAgcmVmZXJlbmNlIGlucHV0cyB0byBncm91bmQgb3IgY29tbW9uPyAqLwogCQlpZiAoQ1JfQVJFRihpbnNuLT5jaGFuc3BlYykgIT0gQVJFRl9HUk9VTkQpCiAJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzIHw9IEFEQ19DT01NT05fQklUOwogCQllbHNlCiAJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzICY9IH5BRENfQ09NTU9OX0JJVDsKLQkJLyogIGJpcG9sYXIgb3IgdW5pcG9sYXIgcmFuZ2U/ICovCisJCS8qIGJpcG9sYXIgb3IgdW5pcG9sYXIgcmFuZ2U/ICovCiAJCWlmICh0aGlzYm9hcmQtPmFpX3JhbmdlX2lzX3VuaXBvbGFyW3JhbmdlXSkKIAkJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgfD0gQURDX1VOSVBfQklUOwogCQllbHNlCiAJCQlkZXZwcml2LT5jb21tYW5kNl9iaXRzICY9IH5BRENfVU5JUF9CSVQ7Ci0JCS8qICBkb24ndCBpbnRlcnJ1cHQgb24gZmlmbyBoYWxmIGZ1bGwgKi8KKwkJLyogZG9uJ3QgaW50ZXJydXB0IG9uIGZpZm8gaGFsZiBmdWxsICovCiAJCWRldnByaXYtPmNvbW1hbmQ2X2JpdHMgJj0gfkFEQ19GSEZfSU5UUl9FTl9CSVQ7Ci0JCS8qICBkb24ndCBlbmFibGUgaW50ZXJydXB0IG9uIGNvdW50ZXIgYTEgdGVybWluYWwgY291bnQ/ICovCisJCS8qIGRvbid0IGVuYWJsZSBpbnRlcnJ1cHQgb24gY291bnRlciBhMSB0ZXJtaW5hbCBjb3VudD8gKi8KIAkJZGV2cHJpdi0+Y29tbWFuZDZfYml0cyAmPSB+QTFfSU5UUl9FTl9CSVQ7Ci0JCS8qICB3cml0ZSB0byByZWdpc3RlciAqLworCQkvKiB3cml0ZSB0byByZWdpc3RlciAqLwogCQlkZXZwcml2LT53cml0ZV9ieXRlKGRldnByaXYtPmNvbW1hbmQ2X2JpdHMsCiAJCQkJICAgIGRldi0+aW9iYXNlICsgQ09NTUFORDZfUkVHKTsKIAl9Ci0JLyogIHNldHVwIGNvbW1hbmQ0IHJlZ2lzdGVyICovCisJLyogc2V0dXAgY29tbWFuZDQgcmVnaXN0ZXIgKi8KIAlkZXZwcml2LT5jb21tYW5kNF9iaXRzID0gMDsKIAlkZXZwcml2LT5jb21tYW5kNF9iaXRzIHw9IEVYVF9DT05WRVJUX0RJU0FCTEVfQklUOwotCS8qICBzaW5nbGUtZW5kZWQvZGlmZmVyZW50aWFsICovCisJLyogc2luZ2xlLWVuZGVkL2RpZmZlcmVudGlhbCAqLwogCWlmIChDUl9BUkVGKGluc24tPmNoYW5zcGVjKSA9PSBBUkVGX0RJRkYpCiAJCWRldnByaXYtPmNvbW1hbmQ0X2JpdHMgfD0gQURDX0RJRkZfQklUOwogCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDRfYml0cywgZGV2LT5pb2Jhc2UgKyBDT01NQU5ENF9SRUcpOwogCi0JLyogIGluaXRpYWxpemUgcGFjZXIgY291bnRlciBvdXRwdXQgdG8gbWFrZSBzdXJlIGl0IGRvZXNuJ3QgY2F1c2UgYW55IHByb2JsZW1zICovCisJLyogaW5pdGlhbGl6ZSBwYWNlciBjb3VudGVyIG91dHB1dCB0byBtYWtlIHN1cmUgaXQgZG9lc24ndCBjYXVzZSBhbnkgcHJvYmxlbXMgKi8KIAlkZXZwcml2LT53cml0ZV9ieXRlKElOSVRfQTBfQklUUywgZGV2LT5pb2Jhc2UgKyBDT1VOVEVSX0FfQ09OVFJPTF9SRUcpOwogCiAJbGFicGNfY2xlYXJfYWRjX2ZpZm8oZGV2KTsKQEAgLTE2MDgsNyArMTY1Niw3IEBACiAKIAljaGFubmVsID0gQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7CiAKLQkvKiAgdHVybiBvZmYgcGFjaW5nIG9mIGFuYWxvZyBvdXRwdXQgY2hhbm5lbCAqLworCS8qIHR1cm4gb2ZmIHBhY2luZyBvZiBhbmFsb2cgb3V0cHV0IGNoYW5uZWwgKi8KIAkvKiBub3RlOiBoYXJkd2FyZSBidWcgaW4gZGFxY2FyZC0xMjAwIG1lYW5zIHBhY2luZyBjYW5ub3QKIAkgKiBiZSBpbmRlcGVuZGVudGx5IGVuYWJsZWQvZGlzYWJsZWQgZm9yIGl0cyB0aGUgdHdvIGNoYW5uZWxzICovCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+c3BpbmxvY2ssIGZsYWdzKTsKQEAgLTE2MTYsNyArMTY2NCw3IEBACiAJZGV2cHJpdi0+d3JpdGVfYnl0ZShkZXZwcml2LT5jb21tYW5kMl9iaXRzLCBkZXYtPmlvYmFzZSArIENPTU1BTkQyX1JFRyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5zcGlubG9jaywgZmxhZ3MpOwogCi0JLyogIHNldCByYW5nZSAqLworCS8qIHNldCByYW5nZSAqLwogCWlmICh0aGlzYm9hcmQtPnJlZ2lzdGVyX2xheW91dCA9PSBsYWJwY18xMjAwX2xheW91dCkgewogCQlyYW5nZSA9IENSX1JBTkdFKGluc24tPmNoYW5zcGVjKTsKIAkJaWYgKHJhbmdlICYgQU9fUkFOR0VfSVNfVU5JUE9MQVIpCkBAIC0xNjI3LDEzICsxNjc1LDEzIEBACiAJCWRldnByaXYtPndyaXRlX2J5dGUoZGV2cHJpdi0+Y29tbWFuZDZfYml0cywKIAkJCQkgICAgZGV2LT5pb2Jhc2UgKyBDT01NQU5ENl9SRUcpOwogCX0KLQkvKiAgc2VuZCBkYXRhICovCisJLyogc2VuZCBkYXRhICovCiAJbHNiID0gZGF0YVswXSAmIDB4ZmY7CiAJbXNiID0gKGRhdGFbMF0gPj4gOCkgJiAweGZmOwogCWRldnByaXYtPndyaXRlX2J5dGUobHNiLCBkZXYtPmlvYmFzZSArIERBQ19MU0JfUkVHKGNoYW5uZWwpKTsKIAlkZXZwcml2LT53cml0ZV9ieXRlKG1zYiwgZGV2LT5pb2Jhc2UgKyBEQUNfTVNCX1JFRyhjaGFubmVsKSk7CiAKLQkvKiAgcmVtZW1iZXIgdmFsdWUgZm9yIHJlYWRiYWNrICovCisJLyogcmVtZW1iZXIgdmFsdWUgZm9yIHJlYWRiYWNrICovCiAJZGV2cHJpdi0+YW9fdmFsdWVbY2hhbm5lbF0gPSBkYXRhWzBdOwogCiAJcmV0dXJuIDE7CkBAIC0xNzA1LDE0ICsxNzUzLDE0IEBACiAKIAlpZiAoY21kLmNvbnZlcnRfc3JjID09IFRSSUdfVElNRVIpCiAJCWZyZXEgPSAxMDAwMDAwMDAwIC8gY21kLmNvbnZlcnRfYXJnOwotCS8qICByZXR1cm4gc29tZSBkZWZhdWx0IHZhbHVlICovCisJLyogcmV0dXJuIHNvbWUgZGVmYXVsdCB2YWx1ZSAqLwogCWVsc2UKIAkJZnJlcSA9IDB4ZmZmZmZmZmY7CiAKLQkvKiAgbWFrZSBidWZmZXIgZmlsbCBpbiBubyBtb3JlIHRoYW4gMS8zIHNlY29uZCAqLworCS8qIG1ha2UgYnVmZmVyIGZpbGwgaW4gbm8gbW9yZSB0aGFuIDEvMyBzZWNvbmQgKi8KIAlzaXplID0gKGZyZXEgLyAzKSAqIHNhbXBsZV9zaXplOwogCi0JLyogIHNldCBhIG1pbmltdW0gYW5kIG1heGltdW0gc2l6ZSBhbGxvd2VkICovCisJLyogc2V0IGEgbWluaW11bSBhbmQgbWF4aW11bSBzaXplIGFsbG93ZWQgKi8KIAlpZiAoc2l6ZSA+IGRtYV9idWZmZXJfc2l6ZSkKIAkJc2l6ZSA9IGRtYV9idWZmZXJfc2l6ZSAtIGRtYV9idWZmZXJfc2l6ZSAlIHNhbXBsZV9zaXplOwogCWVsc2UgaWYgKHNpemUgPCBzYW1wbGVfc2l6ZSkKQEAgLTE3MjQsMTMgKzE3NzIsMjEgQEAKIC8qIGZpZ3VyZXMgb3V0IHdoYXQgY291bnRlciB2YWx1ZXMgdG8gdXNlIGJhc2VkIG9uIGNvbW1hbmQgKi8KIHN0YXRpYyB2b2lkIGxhYnBjX2FkY190aW1pbmcoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgc3RydWN0IGNvbWVkaV9jbWQgKmNtZCkKIHsKLQljb25zdCBpbnQgbWF4X2NvdW50ZXJfdmFsdWUgPSAweDEwMDAwOwkvKiAgbWF4IHZhbHVlIGZvciAxNiBiaXQgY291bnRlciBpbiBtb2RlIDIgKi8KLQljb25zdCBpbnQgbWluX2NvdW50ZXJfdmFsdWUgPSAyOwkvKiAgbWluIHZhbHVlIGZvciAxNiBiaXQgY291bnRlciBpbiBtb2RlIDIgKi8KKwkvKiBtYXggdmFsdWUgZm9yIDE2IGJpdCBjb3VudGVyIGluIG1vZGUgMiAqLworCWNvbnN0IGludCBtYXhfY291bnRlcl92YWx1ZSA9IDB4MTAwMDA7CisJLyogbWluIHZhbHVlIGZvciAxNiBiaXQgY291bnRlciBpbiBtb2RlIDIgKi8KKwljb25zdCBpbnQgbWluX2NvdW50ZXJfdmFsdWUgPSAyOwogCXVuc2lnbmVkIGludCBiYXNlX3BlcmlvZDsKIAotCS8qICBpZiBib3RoIGNvbnZlcnQgYW5kIHNjYW4gdHJpZ2dlcnMgYXJlIFRSSUdfVElNRVIsIHRoZW4gdGhleSBib3RoIHJlbHkgb24gY291bnRlciBiMCAqLworCS8qCisJICogaWYgYm90aCBjb252ZXJ0IGFuZCBzY2FuIHRyaWdnZXJzIGFyZSBUUklHX1RJTUVSLCB0aGVuIHRoZXkKKwkgKiBib3RoIHJlbHkgb24gY291bnRlciBiMAorCSAqLwogCWlmIChsYWJwY19haV9jb252ZXJ0X3BlcmlvZChjbWQpICYmIGxhYnBjX2FpX3NjYW5fcGVyaW9kKGNtZCkpIHsKLQkJLyogIHBpY2sgdGhlIGxvd2VzdCBiMCBkaXZpc29yIHZhbHVlIHdlIGNhbiAoZm9yIG1heGltdW0gaW5wdXQgY2xvY2sgc3BlZWQgb24gY29udmVydCBhbmQgc2NhbiBjb3VudGVycykgKi8KKwkJLyoKKwkJICogcGljayB0aGUgbG93ZXN0IGIwIGRpdmlzb3IgdmFsdWUgd2UgY2FuIChmb3IgbWF4aW11bSBpbnB1dAorCQkgKiBjbG9jayBzcGVlZCBvbiBjb252ZXJ0IGFuZCBzY2FuIGNvdW50ZXJzKQorCQkgKi8KIAkJZGV2cHJpdi0+ZGl2aXNvcl9iMCA9IChsYWJwY19haV9zY2FuX3BlcmlvZChjbWQpIC0gMSkgLwogCQkgICAgKExBQlBDX1RJTUVSX0JBU0UgKiBtYXhfY291bnRlcl92YWx1ZSkgKyAxOwogCQlpZiAoZGV2cHJpdi0+ZGl2aXNvcl9iMCA8IG1pbl9jb3VudGVyX3ZhbHVlKQpAQCAtMTc4MCw3ICsxODM2LDEwIEBACiAJCQkJCSAgICBiYXNlX3BlcmlvZCAqIGRldnByaXYtPmRpdmlzb3JfYTApOwogCQlsYWJwY19zZXRfYWlfc2Nhbl9wZXJpb2QoY21kLAogCQkJCQkgYmFzZV9wZXJpb2QgKiBkZXZwcml2LT5kaXZpc29yX2IxKTsKLQkJLyogIGlmIG9ubHkgb25lIFRSSUdfVElNRVIgaXMgdXNlZCwgd2UgY2FuIGVtcGxveSB0aGUgZ2VuZXJpYyBjYXNjYWRlZCB0aW1pbmcgZnVuY3Rpb25zICovCisJCS8qCisJCSAqIGlmIG9ubHkgb25lIFRSSUdfVElNRVIgaXMgdXNlZCwgd2UgY2FuIGVtcGxveSB0aGUgZ2VuZXJpYworCQkgKiBjYXNjYWRlZCB0aW1pbmcgZnVuY3Rpb25zCisJCSAqLwogCX0gZWxzZSBpZiAobGFicGNfYWlfc2Nhbl9wZXJpb2QoY21kKSkgewogCQl1bnNpZ25lZCBpbnQgc2Nhbl9wZXJpb2Q7CiAKQEAgLTE4NjQsOSArMTkyMyw4IEBACiAJCXVkZWxheSgxKTsKIAkJZGV2cHJpdi0+c3RhdHVzMl9iaXRzID0KIAkJICAgIGRldnByaXYtPnJlYWRfYnl0ZShkZXYtPmlvYmFzZSArIFNUQVRVUzJfUkVHKTsKLQkJaWYgKGRldnByaXYtPnN0YXR1czJfYml0cyAmIEVFUFJPTV9PVVRfQklUKSB7CisJCWlmIChkZXZwcml2LT5zdGF0dXMyX2JpdHMgJiBFRVBST01fT1VUX0JJVCkKIAkJCXZhbHVlIHw9IDEgPDwgKHZhbHVlX3dpZHRoIC0gaSk7Ci0JCX0KIAl9CiAKIAlyZXR1cm4gdmFsdWU7CkBAIC0xODc2LDggKzE5MzQsMTAgQEAKIAkJCQkgICAgICB1bnNpZ25lZCBpbnQgYWRkcmVzcykKIHsKIAl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0JY29uc3QgaW50IHJlYWRfaW5zdHJ1Y3Rpb24gPSAweDM7CS8qICBiaXRzIHRvIHRlbGwgZWVwcm9tIHRvIGV4cGVjdCBhIHJlYWQgKi8KLQljb25zdCBpbnQgd3JpdGVfbGVuZ3RoID0gODsJLyogIDggYml0IHdyaXRlIGxlbmd0aHMgdG8gZWVwcm9tICovCisJLyogIGJpdHMgdG8gdGVsbCBlZXByb20gdG8gZXhwZWN0IGEgcmVhZCAqLworCWNvbnN0IGludCByZWFkX2luc3RydWN0aW9uID0gMHgzOworCS8qICA4IGJpdCB3cml0ZSBsZW5ndGhzIHRvIGVlcHJvbSAqLworCWNvbnN0IGludCB3cml0ZV9sZW5ndGggPSA4OwogCiAJLyogIGVuYWJsZSByZWFkL3dyaXRlIHRvIGVlcHJvbSAqLwogCWRldnByaXYtPmNvbW1hbmQ1X2JpdHMgJj0gfkVFUFJPTV9FTl9CSVQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX21pb19jb21tb24uYwppbmRleCBkNmQ0OWMzLi5iZDE2ZjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfbWlvX2NvbW1vbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9taW9fY29tbW9uLmMKQEAgLTM3OTUsNyArMzc5NSw3IEBACiAjZW5kaWYKIAlpbnQgcmV0dmFsID0gMDsKIAl1bnNpZ25lZCBpOwotCWNvbnN0IHVuc2lnbmVkIHRpbWVvdXQgPSAxMDA7CisJY29uc3QgdW5zaWduZWQgdGltZW91dCA9IDEwMDA7CiAKIAlzLT5hc3luYy0+aW50dHJpZyA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYwppbmRleCAyZDg4YTViLi45ZDMzNzUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvbmlfcGNpZGlvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL25pX3BjaWRpby5jCkBAIC0xLDggKzEsOCBAQAogLyoKICAgICBjb21lZGkvZHJpdmVycy9uaV9wY2lkaW8uYwogICAgIGRyaXZlciBmb3IgTmF0aW9uYWwgSW5zdHJ1bWVudHMgUENJLURJTy05Ni9QQ0ktNjUwOAotICAgICAgICAgICAgICAgTmF0aW9uYWwgSW5zdHJ1bWVudHMgUENJLURJTy0zMkhTCi0gICAgICAgICAgICAgICBOYXRpb25hbCBJbnN0cnVtZW50cyBQQ0ktNjUwMworCQlOYXRpb25hbCBJbnN0cnVtZW50cyBQQ0ktRElPLTMySFMKKwkJTmF0aW9uYWwgSW5zdHJ1bWVudHMgUENJLTY1MDMKIAogICAgIENPTUVESSAtIExpbnV4IENvbnRyb2wgYW5kIE1lYXN1cmVtZW50IERldmljZSBJbnRlcmZhY2UKICAgICBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMiBEYXZpZCBBLiBTY2hsZWVmIDxkc0BzY2hsZWVmLm9yZz4KQEAgLTUxOCw3ICs1MTgsOCBAQAogCW5pX3BjaWRpb19wcmludF9zdGF0dXMoc3RhdHVzKTsKIAogCS8qIHByaW50aygiYnVmWzBdPSUwOHhcbiIsKih1bnNpZ25lZCBpbnQgKilhc3luYy0+cHJlYWxsb2NfYnVmKTsgKi8KLQkvKiBwcmludGsoImJ1Zls0MDk2XT0lMDh4XG4iLCoodW5zaWduZWQgaW50ICopKGFzeW5jLT5wcmVhbGxvY19idWYrNDA5NikpOyAqLworCS8qIHByaW50aygiYnVmWzQwOTZdPSUwOHhcbiIsCisJICAgICAgICoodW5zaWduZWQgaW50ICopKGFzeW5jLT5wcmVhbGxvY19idWYrNDA5NikpOyAqLwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrLCBpcnFfZmxhZ3MpOwogCWlmIChkZXZwcml2LT5kaV9taXRlX2NoYW4pCkBAIC01MjYsNyArNTI3LDkgQEAKICNpZmRlZiBNSVRFX0RFQlVHCiAJbWl0ZV9wcmludF9jaHNyKG1fc3RhdHVzKTsKICNlbmRpZgotCS8qIHByaW50aygibWl0ZV9ieXRlc190cmFuc2ZlcnJlZDogJWRcbiIsbWl0ZV9ieXRlc190cmFuc2ZlcnJlZChtaXRlLERJX0RNQV9DSEFOKSk7ICovCisJLyogcHJpbnRrKCJtaXRlX2J5dGVzX3RyYW5zZmVycmVkOiAlZFxuIiwKKwkgICAgICAgbWl0ZV9ieXRlc190cmFuc2ZlcnJlZChtaXRlLERJX0RNQV9DSEFOKSk7ICovCisKIAkvKiBtaXRlX2R1bXBfcmVncyhtaXRlKTsgKi8KIAlpZiAobV9zdGF0dXMgJiBDSFNSX0lOVCkgewogCQlpZiAobV9zdGF0dXMgJiBDSFNSX0xJTktDKSB7CkBAIC01NjUsNyArNTY4LDggQEAKIAkJCQkJRFBSSU5USygidG9vIG11Y2ggd29yayBpbiBpbnRlcnJ1cHRcbiIpOwogCQkJCQl3cml0ZWIoMHgwMCwKIAkJCQkJICAgICAgIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKLQkJCQkJICAgICAgIE1hc3Rlcl9ETUFfQW5kX0ludGVycnVwdF9Db250cm9sKTsKKwkJCQkJICAgICAgIE1hc3Rlcl9ETUFfQW5kX0ludGVycnVwdF9Db250cm9sCisJCQkJCSAgICAgICk7CiAJCQkJCWdvdG8gb3V0OwogCQkJCX0KIAkJCQlBdXhEYXRhID0KQEAgLTU3OSw4ICs1ODMsMTAgQEAKIAkJCQlmbGFncyA9IHJlYWRiKGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsKIAkJCQkJICAgICAgR3JvdXBfMV9GbGFncyk7CiAJCQl9Ci0JCQkvKiBEUFJJTlRLKCJidWZfaW50X2NvdW50OiAlZFxuIixhc3luYy0+YnVmX2ludF9jb3VudCk7ICovCi0JCQkvKiBEUFJJTlRLKCIxKSBJbnRFbj0lZCxmbGFncz0lZCxzdGF0dXM9JWRcbiIsSW50RW4sZmxhZ3Msc3RhdHVzKTsgKi8KKwkJCS8qIERQUklOVEsoImJ1Zl9pbnRfY291bnQ6ICVkXG4iLAorCQkJCWFzeW5jLT5idWZfaW50X2NvdW50KTsgKi8KKwkJCS8qIERQUklOVEsoIjEpIEludEVuPSVkLGZsYWdzPSVkLHN0YXR1cz0lZFxuIiwKKwkJCQlJbnRFbixmbGFncyxzdGF0dXMpOyAqLwogCQkJLyogbmlfcGNpZGlvX3ByaW50X2ZsYWdzKGZsYWdzKTsgKi8KIAkJCS8qIG5pX3BjaWRpb19wcmludF9zdGF0dXMoc3RhdHVzKTsgKi8KIAkJCWFzeW5jLT5ldmVudHMgfD0gQ09NRURJX0NCX0JMT0NLOwpAQCAtNjI3LDggKzYzMyw4IEBACiAJCWZsYWdzID0gcmVhZGIoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBHcm91cF8xX0ZsYWdzKTsKIAkJc3RhdHVzID0gcmVhZGIoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKwogCQkJICAgICAgIEludGVycnVwdF9BbmRfV2luZG93X1N0YXR1cyk7Ci0JCS8qIERQUklOVEsoImxvb3AgZW5kOiBJbnRFbj0weCUwMngsZmxhZ3M9MHglMDJ4LHN0YXR1cz0weCUwMnhcbiIsICovCi0JCS8qIEludEVuLGZsYWdzLHN0YXR1cyk7ICovCisJCS8qIERQUklOVEsoImxvb3AgZW5kOiBJbnRFbj0weCUwMngsZmxhZ3M9MHglMDJ4LCIKKwkJCSJzdGF0dXM9MHglMDJ4XG4iLCBJbnRFbiwgZmxhZ3MsIHN0YXR1cyk7ICovCiAJCS8qIG5pX3BjaWRpb19wcmludF9mbGFncyhmbGFncyk7ICovCiAJCS8qIG5pX3BjaWRpb19wcmludF9zdGF0dXMoc3RhdHVzKTsgKi8KIAl9CkBAIC02NTUsMTEgKzY2MSwxMCBAQAogewogCWludCBpOwogCi0JcHJpbnRrKCJncm91cF8xX2ZsYWdzOiIpOworCXByaW50ayhLRVJOX0lORk8gImdyb3VwXzFfZmxhZ3M6Iik7CiAJZm9yIChpID0gNzsgaSA+PSAwOyBpLS0pIHsKLQkJaWYgKGZsYWdzICYgKDEgPDwgaSkpIHsKKwkJaWYgKGZsYWdzICYgKDEgPDwgaSkpCiAJCQlwcmludGsoIiAlcyIsIGZsYWdzX3N0cmluZ3NbaV0pOwotCQl9CiAJfQogCXByaW50aygiXG4iKTsKIH0KQEAgLTY3MywxMSArNjc4LDEwIEBACiB7CiAJaW50IGk7CiAKLQlwcmludGsoImdyb3VwX3N0YXR1czoiKTsKKwlwcmludGsoS0VSTl9JTkZPICJncm91cF9zdGF0dXM6Iik7CiAJZm9yIChpID0gNzsgaSA+PSAwOyBpLS0pIHsKLQkJaWYgKGZsYWdzICYgKDEgPDwgaSkpIHsKKwkJaWYgKGZsYWdzICYgKDEgPDwgaSkpCiAJCQlwcmludGsoIiAlcyIsIHN0YXR1c19zdHJpbmdzW2ldKTsKLQkJfQogCX0KIAlwcmludGsoIlxuIik7CiB9CkBAIC03OTMsNyArNzk3LDggQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gMTsKIAotCS8qIHN0ZXAgMjogbWFrZSBzdXJlIHRyaWdnZXIgc291cmNlcyBhcmUgdW5pcXVlIGFuZCBtdXR1YWxseSBjb21wYXRpYmxlICovCisJLyogc3RlcCAyOiBtYWtlIHN1cmUgdHJpZ2dlciBzb3VyY2VzIGFyZSB1bmlxdWUgYW5kIG11dHVhbGx5CisJY29tcGF0aWJsZSAqLwogCiAJLyogbm90ZSB0aGF0IG11dHVhbCBjb21wYXRpYmlsaXR5IGlzIG5vdCBhbiBpc3N1ZSBoZXJlICovCiAJaWYgKGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfTk9XICYmIGNtZC0+c3RhcnRfc3JjICE9IFRSSUdfSU5UKQpAQCAtOTc0LDcgKzk3OSw4IEBACiAKIAkvKiBjbGVhciBhbmQgZW5hYmxlIGludGVycnVwdHMgKi8KIAl3cml0ZWIoMHhmZiwgZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBHcm91cF8xX0ZpcnN0X0NsZWFyKTsKLQkvKiB3cml0ZWIoQ2xlYXJFeHBpcmVkLGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyK0dyb3VwXzFfU2Vjb25kX0NsZWFyKTsgKi8KKwkvKiB3cml0ZWIoQ2xlYXJFeHBpcmVkLAorCSAgICAgICBkZXZwcml2LT5taXRlLT5kYXFfaW9fYWRkcitHcm91cF8xX1NlY29uZF9DbGVhcik7ICovCiAKIAl3cml0ZWIoSW50RW4sIGRldnByaXYtPm1pdGUtPmRhcV9pb19hZGRyICsgSW50ZXJydXB0X0NvbnRyb2wpOwogCXdyaXRlYigweDAzLApAQCAtMTA1Miw3ICsxMDU4LDcgQEAKIH0KIAogc3RhdGljIGludCBwY2lfNjUzNF9sb2FkX2ZwZ2Eoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgaW50IGZwZ2FfaW5kZXgsCi0JCQkgICAgICB1OCAqIGRhdGEsIGludCBkYXRhX2xlbikKKwkJCSAgICAgIHU4ICpkYXRhLCBpbnQgZGF0YV9sZW4pCiB7CiAJc3RhdGljIGNvbnN0IGludCB0aW1lb3V0ID0gMTAwMDsKIAlpbnQgaSwgajsKQEAgLTEwNjYsOSArMTA3Miw4IEBACiAJCXVkZWxheSgxKTsKIAl9CiAJaWYgKGkgPT0gdGltZW91dCkgewotCQlwcmludGsKLQkJICAgICgibmlfcGNpZGlvOiBmYWlsZWQgdG8gbG9hZCBmcGdhICVpLCB3YWl0aW5nIGZvciBzdGF0dXMgMHgyXG4iLAotCQkgICAgIGZwZ2FfaW5kZXgpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJuaV9wY2lkaW86IGZhaWxlZCB0byBsb2FkIGZwZ2EgJWksICIKKwkJICAgICAgICJ3YWl0aW5nIGZvciBzdGF0dXMgMHgyXG4iLCBmcGdhX2luZGV4KTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCXdyaXRldygweDgwIHwgZnBnYV9pbmRleCwKQEAgLTEwNzksOSArMTA4NCw4IEBACiAJCXVkZWxheSgxKTsKIAl9CiAJaWYgKGkgPT0gdGltZW91dCkgewotCQlwcmludGsKLQkJICAgICgibmlfcGNpZGlvOiBmYWlsZWQgdG8gbG9hZCBmcGdhICVpLCB3YWl0aW5nIGZvciBzdGF0dXMgMHgzXG4iLAotCQkgICAgIGZwZ2FfaW5kZXgpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJuaV9wY2lkaW86IGZhaWxlZCB0byBsb2FkIGZwZ2EgJWksICIKKwkJICAgICAgICJ3YWl0aW5nIGZvciBzdGF0dXMgMHgzXG4iLCBmcGdhX2luZGV4KTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWZvciAoaiA9IDA7IGogKyAxIDwgZGF0YV9sZW47KSB7CkBAIC0xMTc0LDkgKzExNzgsMTAgQEAKIAlpbnQgbl9zdWJkZXZpY2VzOwogCXVuc2lnbmVkIGludCBpcnE7CiAKLQlwcmludGsoImNvbWVkaSVkOiBuaWRpbzoiLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogbmlkaW86IiwgZGV2LT5taW5vcik7CiAKLQlpZiAoKHJldCA9IGFsbG9jX3ByaXZhdGUoZGV2LCBzaXplb2Yoc3RydWN0IG5pZGlvOTZfcHJpdmF0ZSkpKSA8IDApCisJcmV0ID0gYWxsb2NfcHJpdmF0ZShkZXYsIHNpemVvZihzdHJ1Y3QgbmlkaW85Nl9wcml2YXRlKSk7CisJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAJc3Bpbl9sb2NrX2luaXQoJmRldnByaXYtPm1pdGVfY2hhbm5lbF9sb2NrKTsKIApAQCAtMTE4Niw3ICsxMTkxLDcgQEAKIAogCXJldCA9IG1pdGVfc2V0dXAoZGV2cHJpdi0+bWl0ZSk7CiAJaWYgKHJldCA8IDApIHsKLQkJcHJpbnRrKCJlcnJvciBzZXR0aW5nIHVwIG1pdGVcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJlcnJvciBzZXR0aW5nIHVwIG1pdGVcbiIpOwogCQlyZXR1cm4gcmV0OwogCX0KIAljb21lZGlfc2V0X2h3X2RldihkZXYsICZkZXZwcml2LT5taXRlLT5wY2lkZXYtPmRldik7CkBAIC0xMTk2LDE4ICsxMjAxLDE5IEBACiAKIAlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOwogCWlycSA9IG1pdGVfaXJxKGRldnByaXYtPm1pdGUpOwotCXByaW50aygiICVzIiwgZGV2LT5ib2FyZF9uYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPICIgJXMiLCBkZXYtPmJvYXJkX25hbWUpOwogCWlmICh0aGlzX2JvYXJkLT51c2VzX2Zpcm13YXJlKSB7CiAJCXJldCA9IHBjaV82NTM0X3VwbG9hZF9maXJtd2FyZShkZXYsIGl0LT5vcHRpb25zKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCX0KLQlpZiAoIXRoaXNfYm9hcmQtPmlzX2Rpb2RhcSkgeworCWlmICghdGhpc19ib2FyZC0+aXNfZGlvZGFxKQogCQluX3N1YmRldmljZXMgPSB0aGlzX2JvYXJkLT5uXzgyNTU7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCW5fc3ViZGV2aWNlcyA9IDE7Ci0JfQotCWlmICgocmV0ID0gYWxsb2Nfc3ViZGV2aWNlcyhkZXYsIG5fc3ViZGV2aWNlcykpIDwgMCkKKworCXJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCBuX3N1YmRldmljZXMpOworCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJaWYgKCF0aGlzX2JvYXJkLT5pc19kaW9kYXEpIHsKQEAgLTEyMjAsNyArMTIyNiw3IEBACiAJCX0KIAl9IGVsc2UgewogCi0JCXByaW50aygiIHJldj0lZCIsCisJCXByaW50ayhLRVJOX0lORk8gIiByZXY9JWQiLAogCQkgICAgICAgcmVhZGIoZGV2cHJpdi0+bWl0ZS0+ZGFxX2lvX2FkZHIgKyBDaGlwX1ZlcnNpb24pKTsKIAogCQlzID0gZGV2LT5zdWJkZXZpY2VzICsgMDsKQEAgLTEyNTMsOSArMTI1OSw5IEBACiAKIAkJcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBuaWRpb19pbnRlcnJ1cHQsIElSUUZfU0hBUkVELAogCQkJCSAgIm5pX3BjaWRpbyIsIGRldik7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlwcmludGsoIiBpcnEgbm90IGF2YWlsYWJsZSIpOwotCQl9CisJCWlmIChyZXQgPCAwKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiIGlycSBub3QgYXZhaWxhYmxlIik7CisKIAkJZGV2LT5pcnEgPSBpcnE7CiAJfQogCkBAIC0xMjY5LDkgKzEyNzUsOCBAQAogCWludCBpOwogCiAJaWYgKHRoaXNfYm9hcmQgJiYgIXRoaXNfYm9hcmQtPmlzX2Rpb2RhcSkgewotCQlmb3IgKGkgPSAwOyBpIDwgdGhpc19ib2FyZC0+bl84MjU1OyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IHRoaXNfYm9hcmQtPm5fODI1NTsgaSsrKQogCQkJc3ViZGV2XzgyNTVfY2xlYW51cChkZXYsIGRldi0+c3ViZGV2aWNlcyArIGkpOwotCQl9CiAJfQogCiAJaWYgKGRldi0+aXJxKQpAQCAtMTMxMCw3ICsxMzE1LDcgQEAKIAkJCX0KIAkJfQogCX0KLQlwcmludGsoIm5vIGRldmljZSBmb3VuZFxuIik7CisJcHJpbnRrKEtFUk5fV0FSTklORyAibm8gZGV2aWNlIGZvdW5kXG4iKTsKIAltaXRlX2xpc3RfZGV2aWNlcygpOwogCXJldHVybiAtRUlPOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcxMS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcxMS5jCmluZGV4IDQ5MTQ3ODQuLmE0OTlmNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MTEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzExLmMKQEAgLTIwNywxMSArMjA3LDEwIEBACiAKIAkvKiBGSVhNRSEgTm90aGluZyBlbHNlIHNldHMgbnRyaWchICovCiAJaWYgKCEoLS1kZXZwcml2LT5udHJpZykpIHsKLQkJaWYgKHRoaXNfYm9hcmQtPmlzXzgxMTIpIHsKKwkJaWYgKHRoaXNfYm9hcmQtPmlzXzgxMTIpCiAJCQlvdXRiKDEsIGRldi0+aW9iYXNlICsgUENMNzExX01PREUpOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMNzExX01PREUpOwotCQl9CiAKIAkJcy0+YXN5bmMtPmV2ZW50cyB8PSBDT01FRElfQ0JfRU9BOwogCX0KQEAgLTIzMiwxNSArMjMxLDE1IEBACiAJCS8qCiAJCSAqICBTZXQgdGhlIGNvcnJlY3QgY2hhbm5lbC4gIFRoZSB0d28gY2hhbm5lbCBiYW5rcyBhcmUgc3dpdGNoZWQKIAkJICogIHVzaW5nIHRoZSBtYXNrIHZhbHVlLgotCQkgKiAgTkI6IFRvIHVzZSBkaWZmZXJlbnRpYWwgY2hhbm5lbHMsIHlvdSBzaG91bGQgdXNlIG1hc2sgPSAweDMwLAotCQkgKiAgYnV0IEkgaGF2ZW4ndCB3cml0dGVuIHRoZSBzdXBwb3J0IGZvciB0aGlzIHlldC4gL0pKCisJCSAqICBOQjogVG8gdXNlIGRpZmZlcmVudGlhbCBjaGFubmVscywgeW91IHNob3VsZCB1c2UKKwkJICogIG1hc2sgPSAweDMwLCBidXQgSSBoYXZlbid0IHdyaXR0ZW4gdGhlIHN1cHBvcnQgZm9yIHRoaXMKKwkJICogIHlldC4gL0pKCiAJCSAqLwogCi0JCWlmIChjaGFuX3JlZ2lzdGVyID49IDgpIHsKKwkJaWYgKGNoYW5fcmVnaXN0ZXIgPj0gOCkKIAkJCWNoYW5fcmVnaXN0ZXIgPSAweDIwIHwgKGNoYW5fcmVnaXN0ZXIgJiAweDcpOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQljaGFuX3JlZ2lzdGVyIHw9IDB4MTA7Ci0JCX0KIAl9IGVsc2UgewogCQlvdXRiKGNoYW5fcmVnaXN0ZXIsIGRldi0+aW9iYXNlICsgUENMNzExX01VWCk7CiAJfQpAQCAtMjU2LDE1ICsyNTUsMTMgQEAKIAogCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKIAkJLyoKLQkJICogIFdyaXRlIHRoZSBjb3JyZWN0IG1vZGUgKHNvZnR3YXJlIHBvbGxpbmcpIGFuZCBzdGFydCBwb2xsaW5nIGJ5IHdyaXRpbmcKLQkJICogIHRvIHRoZSB0cmlnZ2VyIHJlZ2lzdGVyCisJCSAqICBXcml0ZSB0aGUgY29ycmVjdCBtb2RlIChzb2Z0d2FyZSBwb2xsaW5nKSBhbmQgc3RhcnQgcG9sbGluZworCQkgKiAgYnkgd3JpdGluZyB0byB0aGUgdHJpZ2dlciByZWdpc3RlcgogCQkgKi8KIAkJb3V0YigxLCBkZXYtPmlvYmFzZSArIFBDTDcxMV9NT0RFKTsKIAotCQlpZiAodGhpc19ib2FyZC0+aXNfODExMikgewotCQl9IGVsc2UgeworCQlpZiAoIXRoaXNfYm9hcmQtPmlzXzgxMTIpCiAJCQlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMNzExX1NPRlRUUklHKTsKLQkJfQogCiAJCWkgPSBQQ0w3MTFfVElNRU9VVDsKIAkJd2hpbGUgKC0taSkgewpAQCAtNDYyLDkgKzQ1OSw4IEBACiAJaW50IG47CiAJaW50IGNoYW4gPSBDUl9DSEFOKGluc24tPmNoYW5zcGVjKTsKIAotCWZvciAobiA9IDA7IG4gPCBpbnNuLT5uOyBuKyspIHsKKwlmb3IgKG4gPSAwOyBuIDwgaW5zbi0+bjsgbisrKQogCQlkYXRhW25dID0gZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl07Ci0JfQogCiAJcmV0dXJuIG47CiAKQEAgLTYxOSw5ICs2MTUsOCBAQAogCSAgIHRoaXMgaXMgdGhlICJiYXNlIHZhbHVlIiBmb3IgdGhlIG1vZGUgcmVnaXN0ZXIsIHdoaWNoIGlzCiAJICAgdXNlZCBmb3IgdGhlIGlycSBvbiB0aGUgUENMNzExCiAJICovCi0JaWYgKHRoaXNfYm9hcmQtPmlzX3BjbDcxMWIpIHsKKwlpZiAodGhpc19ib2FyZC0+aXNfcGNsNzExYikKIAkJZGV2cHJpdi0+bW9kZSA9IChkZXYtPmlycSA8PCA0KTsKLQl9CiAKIAkvKiBjbGVhciBEQUMgKi8KIAlvdXRiKDAsIGRldi0+aW9iYXNlICsgUENMNzExX0RBMF9MTyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI0LmMKaW5kZXggZGYxZjRlZi4uMGYxMDNjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjQuYwpAQCAtMTcsNyArMTcsNyBAQAogICAgICBbMF0gLSBJTyBCYXNlCiAgICAgIFsxXSAtIElSUSAoMD1kaXNhYmxlIElSUSkgSVJRIGlzbid0IHN1cHBvcnRlZCBhdCB0aGlzIHRpbWUhCiAgICAgIFsyXSAtbnVtYmVyIG9mIERJTzoKLSAgICAgICAgICAgICAgMCwgMTQ0OiAxNDQgRElPIGNvbmZpZ3VyYXRpb24KKwkgICAgICAwLCAxNDQ6IDE0NCBESU8gY29uZmlndXJhdGlvbgogCSAgICAgIDEsICA5NjogIDk2IERJTyBjb25maWd1cmF0aW9uCiAqLwogLyoKQEAgLTEzNyw4ICsxMzcsOCBAQAogCWlvcmFuZ2UgPSB0aGlzX2JvYXJkLT5pb19yYW5nZTsKIAlpZiAoKHRoaXNfYm9hcmQtPmNhbl9oYXZlOTYpICYmICgoaXQtPm9wdGlvbnNbMV0gPT0gMSkKIAkJCQkJIHx8IChpdC0+b3B0aW9uc1sxXSA9PSA5NikpKQotCQlpb3JhbmdlID0gUENMNzIyXzk2X1NJWkU7CS8qICBQQ0wtNzI0IGluIDk2IERJTyBjb25maWd1cmF0aW9uICovCi0JcHJpbnRrKCJjb21lZGklZDogcGNsNzI0OiBib2FyZD0lcywgMHglMDNseCAiLCBkZXYtPm1pbm9yLAorCQlpb3JhbmdlID0gUENMNzIyXzk2X1NJWkU7IC8qIFBDTC03MjQgaW4gOTYgRElPIGNvbmZpZ3VyYXRpb24gKi8KKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogcGNsNzI0OiBib2FyZD0lcywgMHglMDNseCAiLCBkZXYtPm1pbm9yLAogCSAgICAgICB0aGlzX2JvYXJkLT5uYW1lLCBpb2Jhc2UpOwogCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBpb3JhbmdlLCAicGNsNzI0IikpIHsKIAkJcHJpbnRrKCJJL08gcG9ydCBjb25mbGljdFxuIik7CkBAIC0xNTUsMTYgKzE1NSwxNiBAQAogCQlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKIAkJaWYgKGlycSkgewkvKiB3ZSB3YW50IHRvIHVzZSBJUlEgKi8KIAkJCWlmICgoKDEgPDwgaXJxKSAmIHRoaXNfYm9hcmQtPklSUWJpdHMpID09IDApIHsKLQkJCQlwcmludGsKLQkJCQkgICAgKCIsIElSUSAldSBpcyBvdXQgb2YgYWxsb3dlZCByYW5nZSwgRElTQUJMSU5HIElUIiwKLQkJCQkgICAgIGlycSk7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICAgICAiLCBJUlEgJXUgaXMgb3V0IG9mIGFsbG93ZWQgcmFuZ2UsICIKKwkJCQkgICAgICAgIkRJU0FCTElORyBJVCIsIGlycSk7CiAJCQkJaXJxID0gMDsJLyogQmFkIElSUSAqLwogCQkJfSBlbHNlIHsKIAkJCQlpZiAocmVxdWVzdF9pcnEKIAkJCQkgICAgKGlycSwgaW50ZXJydXB0X3BjbDcyNCwgMCwgInBjbDcyNCIsIGRldikpIHsKLQkJCQkJcHJpbnRrCi0JCQkJCSAgICAoIiwgdW5hYmxlIHRvIGFsbG9jYXRlIElSUSAldSwgRElTQUJMSU5HIElUIiwKLQkJCQkJICAgICBpcnEpOworCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCQkJCSAgICAgICAiLCB1bmFibGUgdG8gYWxsb2NhdGUgSVJRICV1LCAiCisJCQkJCSAgICAgICAiRElTQUJMSU5HIElUIiwgaXJxKTsKIAkJCQkJaXJxID0gMDsJLyogQ2FuJ3QgdXNlIElSUSAqLwogCQkJCX0gZWxzZSB7CiAJCQkJCXByaW50aygiLCBpcnE9JXUiLCBpcnEpOwpAQCAtMjA3LDE2ICsyMDcsMTQgQEAKIHsKIAlpbnQgaTsKIAotLyogcHJpbnRrKCJjb21lZGklZDogcGNsNzI0OiByZW1vdmVcbiIsZGV2LT5taW5vcik7ICovCisJLyogcHJpbnRrKCJjb21lZGklZDogcGNsNzI0OiByZW1vdmVcbiIsZGV2LT5taW5vcik7ICovCiAKLQlmb3IgKGkgPSAwOyBpIDwgZGV2LT5uX3N1YmRldmljZXM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm5fc3ViZGV2aWNlczsgaSsrKQogCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgaSk7Ci0JfQogCiAjaWZkZWYgUENMNzI0X0lSUQotCWlmIChkZXYtPmlycSkgeworCWlmIChkZXYtPmlycSkKIAkJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7Ci0JfQogI2VuZGlmCiAKIAlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgdGhpc19ib2FyZC0+aW9fcmFuZ2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNS5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDcyNS5jCmluZGV4IDFkYTQ5NDEuLjYwMjYxZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MjUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzI1LmMKQEAgLTY2LDcgKzY2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGlvYmFzZTsKIAogCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOwotCXByaW50aygiY29tZWRpJWQ6IHBjbDcyNTogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBwY2w3MjU6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgUENMNzI1X1NJWkUsICJwY2w3MjUiKSkgewogCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKIAkJcmV0dXJuIC1FSU87CkBAIC05NiwxNCArOTYsMTQgQEAKIAlzLT5pbnNuX2JpdHMgPSBwY2w3MjVfZGlfaW5zbjsKIAlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOwogCi0JcHJpbnRrKCJcbiIpOworCXByaW50ayhLRVJOX0lORk8gIlxuIik7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwY2w3MjVfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7Ci0JcHJpbnRrKCJjb21lZGklZDogcGNsNzI1OiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBwY2w3MjU6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CiAKIAlpZiAoZGV2LT5pb2Jhc2UpCiAJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBQQ0w3MjVfU0laRSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzMwLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsNzMwLmMKaW5kZXggYzk4NTljOS4uZTVlN2JlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDczMC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w3MzAuYwpAQCAtOTksNyArOTksNyBAQAogCiAJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07CiAJaW9yYW5nZSA9IHRoaXNfYm9hcmQtPmlvX3JhbmdlOwotCXByaW50aygiY29tZWRpJWQ6IHBjbDczMDogYm9hcmQ9JXMgMHglMDRseCAiLCBkZXYtPm1pbm9yLAorCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBwY2w3MzA6IGJvYXJkPSVzIDB4JTA0bHggIiwgZGV2LT5taW5vciwKIAkgICAgICAgdGhpc19ib2FyZC0+bmFtZSwgaW9iYXNlKTsKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgaW9yYW5nZSwgInBjbDczMCIpKSB7CiAJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOwpAQCAtMTUyLDE0ICsxNTIsMTQgQEAKIAlzLT5yYW5nZV90YWJsZSA9ICZyYW5nZV9kaWdpdGFsOwogCXMtPnByaXZhdGUgPSAodm9pZCAqKVBDTDczMF9ESU9fTE87CiAKLQlwcmludGsoIlxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHBjbDczMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKLQlwcmludGsoImNvbWVkaSVkOiBwY2w3MzA6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IHBjbDczMDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKIAogCWlmIChkZXYtPmlvYmFzZSkKIAkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIHRoaXNfYm9hcmQtPmlvX3JhbmdlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTIuYwppbmRleCAwYTViYzNkLi5kNDYzNGM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODEyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxMi5jCkBAIC05NTUsNiArOTU1LDcgQEAKIAl1bnNpZ25lZCBpbnQgbWFzaywgdGltZW91dDsKIAlzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2ID0gZDsKIAlzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcyA9IGRldi0+c3ViZGV2aWNlcyArIDA7CisJdW5zaWduZWQgaW50IG5leHRfY2hhbjsKIAogCXMtPmFzeW5jLT5ldmVudHMgPSAwOwogCkBAIC05OTMsOSArOTk0LDE4IEBACiAJCSAgICAgICAoKGluYihkZXYtPmlvYmFzZSArIFBDTDgxMl9BRF9ISSkgPDwgOCkgfAogCQkJaW5iKGRldi0+aW9iYXNlICsgUENMODEyX0FEX0xPKSkgJiBtYXNrKTsKIAorCS8qIFNldCB1cCBuZXh0IGNoYW5uZWwuIEFkZGVkIGJ5IGFiYm90dGkgMjAxMC0wMS0yMCwgYnV0IHVudGVzdGVkLiAqLworCW5leHRfY2hhbiA9IHMtPmFzeW5jLT5jdXJfY2hhbiArIDE7CisJaWYgKG5leHRfY2hhbiA+PSBkZXZwcml2LT5haV9uX2NoYW4pCisJCW5leHRfY2hhbiA9IDA7CisJaWYgKGRldnByaXYtPmFpX2NoYW5saXN0W3MtPmFzeW5jLT5jdXJfY2hhbl0gIT0KKwkJCWRldnByaXYtPmFpX2NoYW5saXN0W25leHRfY2hhbl0pCisJCXNldHVwX3JhbmdlX2NoYW5uZWwoZGV2LCBzLCBkZXZwcml2LT5haV9jaGFubGlzdFtuZXh0X2NoYW5dLCAwKTsKKwogCW91dGIoMCwgZGV2LT5pb2Jhc2UgKyBQQ0w4MTJfQ0xSSU5UKTsJLyogY2xlYXIgSU5UIHJlcXVlc3QgKi8KIAotCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPT0gMCkgewkvKiBvbmUgc2NhbiBkb25lICovCisJcy0+YXN5bmMtPmN1cl9jaGFuID0gbmV4dF9jaGFuOworCWlmIChuZXh0X2NoYW4gPT0gMCkgewkvKiBvbmUgc2NhbiBkb25lICovCiAJCWRldnByaXYtPmFpX2FjdF9zY2FuKys7CiAJCWlmICghKGRldnByaXYtPmFpX25ldmVyZW5kaW5nKSkKIAkJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewkvKiBhbGwgZGF0YSBzYW1wbGVkICovCkBAIC0xMDIxLDcgKzEwMzEsOSBAQAogCWZvciAoaSA9IGxlbjsgaTsgaS0tKSB7CiAJCWNvbWVkaV9idWZfcHV0KHMtPmFzeW5jLCBwdHJbYnVmcHRyKytdKTsJLyogIGdldCBvbmUgc2FtcGxlICovCiAKLQkJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA9PSAwKSB7CisJCXMtPmFzeW5jLT5jdXJfY2hhbisrOworCQlpZiAocy0+YXN5bmMtPmN1cl9jaGFuID49IGRldnByaXYtPmFpX25fY2hhbikgeworCQkJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKIAkJCWRldnByaXYtPmFpX2FjdF9zY2FuKys7CiAJCQlpZiAoIWRldnByaXYtPmFpX25ldmVyZW5kaW5nKQogCQkJCWlmIChkZXZwcml2LT5haV9hY3Rfc2NhbiA+PSBkZXZwcml2LT5haV9zY2FucykgewkvKiBhbGwgZGF0YSBzYW1wbGVkICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE2LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE2LmMKaW5kZXggODUyZmUyNC4uOTgyMDc1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxNi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTYuYwpAQCAtMjAyLDYgKzIwMiw3IEBACiAJdW5zaWduZWQgaW50IGFpX2FjdF9jaGFubGlzdFsxNl07CS8qICBNVVggc2V0dGluZyBmb3IgYWN0dWFsIEFJIG9wZXJhdGlvbnMgKi8KIAl1bnNpZ25lZCBpbnQgYWlfYWN0X2NoYW5saXN0X2xlbjsJLyogIGhvdyBsb25nIGlzIGFjdHVhbCBNVVggbGlzdCAqLwogCXVuc2lnbmVkIGludCBhaV9hY3RfY2hhbmxpc3RfcG9zOwkvKiAgYWN0dWFsIHBvc2l0aW9uIGluIE1VWCBsaXN0ICovCisJdW5zaWduZWQgaW50IGFpX25fY2hhbjsJCS8qICBob3cgbWFueSBjaGFubmVscyBwZXIgc2NhbiAqLwogCXVuc2lnbmVkIGludCBhaV9wb2xsX3B0cjsJLyogIGhvdyBtYW55IHNhbXBlcyB0cmFuc2ZlciBwb2xsICovCiAJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnN1Yl9haTsJLyogIHB0ciB0byBBSSBzdWJkZXZpY2UgKi8KICNpZmRlZiB1bnVzZWQKQEAgLTIxMyw5ICsyMTQsMTIgQEAKIC8qCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCi1zdGF0aWMgaW50IGNoZWNrX2FuZF9zZXR1cF9jaGFubmVsX2xpc3Qoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwKLQkJCQkJc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMsCi0JCQkJCXVuc2lnbmVkIGludCAqY2hhbmxpc3QsIGludCBjaGFubGVuKTsKK3N0YXRpYyBpbnQgY2hlY2tfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywKKwkJCSAgICAgIHVuc2lnbmVkIGludCAqY2hhbmxpc3QsIHVuc2lnbmVkIGludCBjaGFubGVuKTsKK3N0YXRpYyB2b2lkIHNldHVwX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkJICAgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLAorCQkJICAgICAgIHVuc2lnbmVkIGludCAqY2hhbmxpc3QsIHVuc2lnbmVkIGludCBzZWdsZW4pOwogc3RhdGljIGludCBwY2w4MTZfYWlfY2FuY2VsKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCiAJCQkgICAgc3RydWN0IGNvbWVkaV9zdWJkZXZpY2UgKnMpOwogc3RhdGljIHZvaWQgc3RhcnRfcGFjZXIoc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldiwgaW50IG1vZGUsCkBAIC0zMjAsNyArMzI0LDkgQEAKIAlpZiAoKytkZXZwcml2LT5haV9hY3RfY2hhbmxpc3RfcG9zID49IGRldnByaXYtPmFpX2FjdF9jaGFubGlzdF9sZW4pCiAJCWRldnByaXYtPmFpX2FjdF9jaGFubGlzdF9wb3MgPSAwOwogCi0JaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA9PSAwKSB7CisJcy0+YXN5bmMtPmN1cl9jaGFuKys7CisJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA+PSBkZXZwcml2LT5haV9uX2NoYW4pIHsKKwkJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKIAkJZGV2cHJpdi0+YWlfYWN0X3NjYW4rKzsKIAl9CiAKQEAgLTM1Myw2ICszNTksMTEgQEAKIAkJaWYgKCsrZGV2cHJpdi0+YWlfYWN0X2NoYW5saXN0X3BvcyA+PQogCQkgICAgZGV2cHJpdi0+YWlfYWN0X2NoYW5saXN0X2xlbikgewogCQkJZGV2cHJpdi0+YWlfYWN0X2NoYW5saXN0X3BvcyA9IDA7CisJCX0KKworCQlzLT5hc3luYy0+Y3VyX2NoYW4rKzsKKwkJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA+PSBkZXZwcml2LT5haV9uX2NoYW4pIHsKKwkJCXMtPmFzeW5jLT5jdXJfY2hhbiA9IDA7CiAJCQlkZXZwcml2LT5haV9hY3Rfc2NhbisrOwogCQl9CiAKQEAgLTU1OCwxNCArNTY5LDYgQEAKIAkJfQogCX0KIAotCWlmICghY21kLT5jaGFubGlzdF9sZW4pIHsKLQkJY21kLT5jaGFubGlzdF9sZW4gPSAxOwotCQllcnIrKzsKLQl9Ci0JaWYgKGNtZC0+Y2hhbmxpc3RfbGVuID4gdGhpc19ib2FyZC0+bl9haWNoYW4pIHsKLQkJY21kLT5jaGFubGlzdF9sZW4gPSB0aGlzX2JvYXJkLT5uX2FpY2hhbjsKLQkJZXJyKys7Ci0JfQogCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgewogCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOwogCQllcnIrKzsKQEAgLTYwMyw2ICs2MDYsMTQgQEAKIAkJcmV0dXJuIDQ7CiAJfQogCisJLyogc3RlcCA1OiBjb21wbGFpbiBhYm91dCBzcGVjaWFsIGNoYW5saXN0IGNvbnNpZGVyYXRpb25zICovCisKKwlpZiAoY21kLT5jaGFubGlzdCkgeworCQlpZiAoIWNoZWNrX2NoYW5uZWxfbGlzdChkZXYsIHMsIGNtZC0+Y2hhbmxpc3QsCisJCQkJCWNtZC0+Y2hhbmxpc3RfbGVuKSkKKwkJCXJldHVybiA1OwkvKiAgaW5jb3JyZWN0IGNoYW5uZWxzIGxpc3QgKi8KKwl9CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjEwLDYgKzYyMSw3IEBACiB7CiAJdW5zaWduZWQgaW50IGRpdmlzb3IxID0gMCwgZGl2aXNvcjIgPSAwLCBkbWFfZmxhZ3MsIGJ5dGVzLCBkbWFpcnE7CiAJc3RydWN0IGNvbWVkaV9jbWQgKmNtZCA9ICZzLT5hc3luYy0+Y21kOworCXVuc2lnbmVkIGludCBzZWdsZW47CiAKIAlpZiAoY21kLT5zdGFydF9zcmMgIT0gVFJJR19OT1cpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNjQyLDExICs2NTQsMTMgQEAKIAogCXN0YXJ0X3BhY2VyKGRldiwgLTEsIDAsIDApOwkvKiAgc3RvcCBwYWNlciAqLwogCi0JaWYgKCFjaGVja19hbmRfc2V0dXBfY2hhbm5lbF9saXN0KGRldiwgcywgY21kLT5jaGFubGlzdCwKLQkJCQkJICBjbWQtPmNoYW5saXN0X2xlbikpCisJc2VnbGVuID0gY2hlY2tfY2hhbm5lbF9saXN0KGRldiwgcywgY21kLT5jaGFubGlzdCwgY21kLT5jaGFubGlzdF9sZW4pOworCWlmIChzZWdsZW4gPCAxKQogCQlyZXR1cm4gLUVJTlZBTDsKKwlzZXR1cF9jaGFubmVsX2xpc3QoZGV2LCBzLCBjbWQtPmNoYW5saXN0LCBzZWdsZW4pOwogCXVkZWxheSgxKTsKIAorCWRldnByaXYtPmFpX25fY2hhbiA9IGNtZC0+Y2hhbmxpc3RfbGVuOwogCWRldnByaXYtPmFpX2FjdF9zY2FuID0gMDsKIAlzLT5hc3luYy0+Y3VyX2NoYW4gPSAwOwogCWRldnByaXYtPmlycV9ibG9ja2VkID0gMTsKQEAgLTg3MSwxMiArODg1LDEyIEBACiAvKgogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgQ2hlY2sgaWYgY2hhbm5lbCBsaXN0IGZyb20gdXNlciBpcyBidWlsZGVkIGNvcnJlY3RseQotIElmIGl0J3Mgb2ssIHRoZW4gcHJvZ3JhbSBzY2FuL2dhaW4gbG9naWMKKyBJZiBpdCdzIG9rLCB0aGVuIHJldHVybiBub24temVybyBsZW5ndGggb2YgcmVwZWF0ZWQgc2VnbWVudCBvZiBjaGFubmVsIGxpc3QKICovCiBzdGF0aWMgaW50Ci1jaGVja19hbmRfc2V0dXBfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCi0JCQkgICAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCB1bnNpZ25lZCBpbnQgKmNoYW5saXN0LAotCQkJICAgICBpbnQgY2hhbmxlbikKK2NoZWNrX2NoYW5uZWxfbGlzdChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2LAorCQkgICBzdHJ1Y3QgY29tZWRpX3N1YmRldmljZSAqcywgdW5zaWduZWQgaW50ICpjaGFubGlzdCwKKwkJICAgdW5zaWduZWQgaW50IGNoYW5sZW4pCiB7CiAJdW5zaWduZWQgaW50IGNoYW5zZWdtZW50WzE2XTsKIAl1bnNpZ25lZCBpbnQgaSwgbm93bXVzdGJlY2hhbiwgc2VnbGVuLCBzZWdwb3M7CkBAIC05MzAsNiArOTQ0LDIwIEBACiAJCXNlZ2xlbiA9IDE7CiAJfQogCisJcmV0dXJuIHNlZ2xlbjsJLyogIHdlIGNhbiBzZXJ2ZSB0aGlzIHdpdGggTVVYIGxvZ2ljICovCit9CisKKy8qCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyBQcm9ncmFtIHNjYW4vZ2FpbiBsb2dpYyB3aXRoIGNoYW5uZWwgbGlzdC4KKyovCitzdGF0aWMgdm9pZAorc2V0dXBfY2hhbm5lbF9saXN0KHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYsCisJCSAgIHN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzLCB1bnNpZ25lZCBpbnQgKmNoYW5saXN0LAorCQkgICB1bnNpZ25lZCBpbnQgc2VnbGVuKQoreworCXVuc2lnbmVkIGludCBpOworCiAJZGV2cHJpdi0+YWlfYWN0X2NoYW5saXN0X2xlbiA9IHNlZ2xlbjsKIAlkZXZwcml2LT5haV9hY3RfY2hhbmxpc3RfcG9zID0gMDsKIApAQCAtOTQyLDggKzk3MCw2IEBACiAJdWRlbGF5KDEpOwogCiAJb3V0YihkZXZwcml2LT5haV9hY3RfY2hhbmxpc3RbMF0gfCAoZGV2cHJpdi0+YWlfYWN0X2NoYW5saXN0W3NlZ2xlbiAtIDFdIDw8IDQpLCBkZXYtPmlvYmFzZSArIFBDTDgxNl9NVVgpOwkvKiBzZWxlY3QgY2hhbm5lbCBpbnRlcnZhbCB0byBzY2FuICovCi0KLQlyZXR1cm4gMTsJCS8qICB3ZSBjYW4gc2VydmUgdGhpcyB3aXRoIE1VWCBsb2dpYyAqLwogfQogCiAjaWZkZWYgdW51c2VkCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE4LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNsODE4LmMKaW5kZXggZDA0ODEwMS4uYzlkNzUzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbDgxOC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY2w4MTguYwpAQCAtNTU3LDggKzU1NywxNCBAQAogCQljb21lZGlfZXZlbnQoZGV2LCBzKTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KLQlpZiAocy0+YXN5bmMtPmN1cl9jaGFuID09IDApIHsKKwlkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zKys7CisJaWYgKGRldnByaXYtPmFjdF9jaGFubGlzdF9wb3MgPj0gZGV2cHJpdi0+YWN0X2NoYW5saXN0X2xlbikgeworCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zID0gMDsKKwl9CisJcy0+YXN5bmMtPmN1cl9jaGFuKys7CisJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA+PSBkZXZwcml2LT5haV9uX2NoYW4pIHsKIAkJLyogIHByaW50aygiRSIpOyAqLworCQlzLT5hc3luYy0+Y3VyX2NoYW4gPSAwOwogCQlkZXZwcml2LT5haV9hY3Rfc2Nhbi0tOwogCX0KIApAQCAtNjI3LDkgKzYzMywxMyBAQAogCiAJCWRldnByaXYtPmFjdF9jaGFubGlzdF9wb3MrKzsKIAkJaWYgKGRldnByaXYtPmFjdF9jaGFubGlzdF9wb3MgPj0gZGV2cHJpdi0+YWN0X2NoYW5saXN0X2xlbikgewotCQkJZGV2cHJpdi0+YWlfYWN0X3NjYW4tLTsKIAkJCWRldnByaXYtPmFjdF9jaGFubGlzdF9wb3MgPSAwOwogCQl9CisJCXMtPmFzeW5jLT5jdXJfY2hhbisrOworCQlpZiAocy0+YXN5bmMtPmN1cl9jaGFuID49IGRldnByaXYtPmFpX25fY2hhbikgeworCQkJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKKwkJCWRldnByaXYtPmFpX2FjdF9zY2FuLS07CisJCX0KIAogCQlpZiAoIWRldnByaXYtPm5ldmVyZW5kaW5nX2FpKQogCQkJaWYgKGRldnByaXYtPmFpX2FjdF9zY2FuID09IDApIHsJLyogYWxsIGRhdGEgc2FtcGxlZCAqLwpAQCAtNzE3LDcgKzcyNywxNCBAQAogCQkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIGRtYWJ1ZltidWZwdHIrK10gPj4gNCk7CS8qICBnZXQgb25lIHNhbXBsZSAqLwogCQkJYnVmcHRyICY9IChkZXZwcml2LT5kbWFzYW1wbHNpemUgLSAxKTsKIAotCQkJaWYgKHMtPmFzeW5jLT5jdXJfY2hhbiA9PSAwKSB7CisJCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zKys7CisJCQlpZiAoZGV2cHJpdi0+YWN0X2NoYW5saXN0X3BvcyA+PQorCQkJCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RfbGVuKSB7CisJCQkJZGV2cHJpdi0+YWN0X2NoYW5saXN0X3BvcyA9IDA7CisJCQl9CisJCQlzLT5hc3luYy0+Y3VyX2NoYW4rKzsKKwkJCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPj0gZGV2cHJpdi0+YWlfbl9jaGFuKSB7CisJCQkJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKIAkJCQlkZXZwcml2LT5haV9hY3Rfc2Nhbi0tOwogCQkJfQogCkBAIC03OTYsNyArODEzLDEzIEBACiAKIAkJY29tZWRpX2J1Zl9wdXQocy0+YXN5bmMsIChsbyA+PiA0KSB8IChpbmIoZGV2LT5pb2Jhc2UgKyBQQ0w4MThfRklfREFUQUhJKSA8PCA0KSk7CS8qICBnZXQgb25lIHNhbXBsZSAqLwogCi0JCWlmIChzLT5hc3luYy0+Y3VyX2NoYW4gPT0gMCkgeworCQlkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zKys7CisJCWlmIChkZXZwcml2LT5hY3RfY2hhbmxpc3RfcG9zID49IGRldnByaXYtPmFjdF9jaGFubGlzdF9sZW4pIHsKKwkJCWRldnByaXYtPmFjdF9jaGFubGlzdF9wb3MgPSAwOworCQl9CisJCXMtPmFzeW5jLT5jdXJfY2hhbisrOworCQlpZiAocy0+YXN5bmMtPmN1cl9jaGFuID49IGRldnByaXYtPmFpX25fY2hhbikgeworCQkJcy0+YXN5bmMtPmN1cl9jaGFuID0gMDsKIAkJCWRldnByaXYtPmFpX2FjdF9zY2FuLS07CiAJCX0KIApAQCAtMTM2OSwxNCArMTM5Miw2IEBACiAJCX0KIAl9CiAKLQlpZiAoIWNtZC0+Y2hhbmxpc3RfbGVuKSB7Ci0JCWNtZC0+Y2hhbmxpc3RfbGVuID0gMTsKLQkJZXJyKys7Ci0JfQotCWlmIChjbWQtPmNoYW5saXN0X2xlbiA+IHMtPm5fY2hhbikgewotCQljbWQtPmNoYW5saXN0X2xlbiA9IHMtPm5fY2hhbjsKLQkJZXJyKys7Ci0JfQogCWlmIChjbWQtPnNjYW5fZW5kX2FyZyAhPSBjbWQtPmNoYW5saXN0X2xlbikgewogCQljbWQtPnNjYW5fZW5kX2FyZyA9IGNtZC0+Y2hhbmxpc3RfbGVuOwogCQllcnIrKzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY20zNzI0LmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtMzcyNC5jCmluZGV4IDUyODExODIuLmVkNjEwMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY20zNzI0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbTM3MjQuYwpAQCAtMTIxLDI1ICsxMjEsMjIgQEAKIHsKIAkvKiAxIGluIGlvX2JpdHMgaW5kaWNhdGVzIG91dHB1dCAqLwogCWlmIChzLT5pb19iaXRzICYgMHgwMDAwZmYpIHsKLQkJaWYgKGRldm5vID09IDApIHsKKwkJaWYgKGRldm5vID09IDApCiAJCQljb25maWcgfD0gQlVGX0EwOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQljb25maWcgfD0gQlVGX0ExOwotCQl9CiAJfQogCWlmIChzLT5pb19iaXRzICYgMHgwMGZmMDApIHsKLQkJaWYgKGRldm5vID09IDApIHsKKwkJaWYgKGRldm5vID09IDApCiAJCQljb25maWcgfD0gQlVGX0IwOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQljb25maWcgfD0gQlVGX0IxOwotCQl9CiAJfQogCWlmIChzLT5pb19iaXRzICYgMHhmZjAwMDApIHsKLQkJaWYgKGRldm5vID09IDApIHsKKwkJaWYgKGRldm5vID09IDApCiAJCQljb25maWcgfD0gQlVGX0MwOwotCQl9IGVsc2UgeworCQllbHNlCiAJCQljb25maWcgfD0gQlVGX0MxOwotCQl9CiAJfQogCXJldHVybiBjb25maWc7CiB9CkBAIC0xNTUsMjYgKzE1MiwyNyBAQAogCWJ1ZmZlcl9jb25maWcgPSAwOwogCiAJLyogMSBpbiBpb19iaXRzIGluZGljYXRlcyBvdXRwdXQsIDEgaW4gY29uZmlnIGluZGljYXRlcyBpbnB1dCAqLwotCWlmICghKHMtPmlvX2JpdHMgJiAweDAwMDBmZikpIHsKKwlpZiAoIShzLT5pb19iaXRzICYgMHgwMDAwZmYpKQogCQljb25maWcgfD0gQ1JfQV9JTzsKLQl9Ci0JaWYgKCEocy0+aW9fYml0cyAmIDB4MDBmZjAwKSkgeworCisJaWYgKCEocy0+aW9fYml0cyAmIDB4MDBmZjAwKSkKIAkJY29uZmlnIHw9IENSX0JfSU87Ci0JfQotCWlmICghKHMtPmlvX2JpdHMgJiAweGZmMDAwMCkpIHsKKworCWlmICghKHMtPmlvX2JpdHMgJiAweGZmMDAwMCkpCiAJCWNvbmZpZyB8PSBDUl9DX0lPOwotCX0KIAogCWJ1ZmZlcl9jb25maWcgPSBjb21wdXRlX2J1ZmZlcigwLCAwLCBkZXYtPnN1YmRldmljZXMpOwogCWJ1ZmZlcl9jb25maWcgPSBjb21wdXRlX2J1ZmZlcihidWZmZXJfY29uZmlnLCAxLCAoZGV2LT5zdWJkZXZpY2VzKSArIDEpOwogCi0JaWYgKHMgPT0gZGV2LT5zdWJkZXZpY2VzKSB7CisJaWYgKHMgPT0gZGV2LT5zdWJkZXZpY2VzKQogCQlwb3J0XzgyNTVfY2ZnID0gZGV2LT5pb2Jhc2UgKyBfODI1NV9DUjsKLQl9IGVsc2UgeworCWVsc2UKIAkJcG9ydF84MjU1X2NmZyA9IGRldi0+aW9iYXNlICsgU0laRV84MjU1ICsgXzgyNTVfQ1I7Ci0JfQorCiAJb3V0YihidWZmZXJfY29uZmlnLCBkZXYtPmlvYmFzZSArIDgpOwkvKiB1cGRhdGUgYnVmZmVyIHJlZ2lzdGVyICovCi0JLyogcHJpbnRrKCJwY20zNzI0IGJ1ZmZlcl9jb25maWcgKCVseCkgJWQsICV4XG4iLCBkZXYtPmlvYmFzZSArIF84MjU1X0NSLCBjaGFuc3BlYywgYnVmZmVyX2NvbmZpZyk7ICovCisJLyogcHJpbnRrKCJwY20zNzI0IGJ1ZmZlcl9jb25maWcgKCVseCkgJWQsICV4XG4iLAorCSAgICAgICBkZXYtPmlvYmFzZSArIF84MjU1X0NSLCBjaGFuc3BlYywgYnVmZmVyX2NvbmZpZyk7ICovCisKIAlvdXRiKGNvbmZpZywgcG9ydF84MjU1X2NmZyk7CiB9CiAKQEAgLTE4OSwyOSArMTg3LDI5IEBACiAJcHJpdiA9IChzdHJ1Y3QgcHJpdl9wY20zNzI0ICopKGRldi0+cHJpdmF0ZSk7CiAKIAltYXNrID0gMSA8PCBDUl9DSEFOKGNoYW5zcGVjKTsKLQlpZiAocyA9PSBkZXYtPnN1YmRldmljZXMpIHsJLyogIHN1YmRldiAwICovCisJaWYgKHMgPT0gZGV2LT5zdWJkZXZpY2VzKQkvKiAgc3ViZGV2IDAgKi8KIAkJcHJpdi0+ZGlvXzEgfD0gbWFzazsKLQl9IGVsc2UgewkJLyogc3ViZGV2IDEgKi8KKwllbHNlCQkvKiBzdWJkZXYgMSAqLwogCQlwcml2LT5kaW9fMiB8PSBtYXNrOwotCX0KLQlpZiAocHJpdi0+ZGlvXzEgJiAweGZmMDAwMCkgeworCisJaWYgKHByaXYtPmRpb18xICYgMHhmZjAwMDApCiAJCWdhdGVjZmcgfD0gR0FURV9DMDsKLQl9Ci0JaWYgKHByaXYtPmRpb18xICYgMHhmZjAwKSB7CisKKwlpZiAocHJpdi0+ZGlvXzEgJiAweGZmMDApCiAJCWdhdGVjZmcgfD0gR0FURV9CMDsKLQl9Ci0JaWYgKHByaXYtPmRpb18xICYgMHhmZikgeworCisJaWYgKHByaXYtPmRpb18xICYgMHhmZikKIAkJZ2F0ZWNmZyB8PSBHQVRFX0EwOwotCX0KLQlpZiAocHJpdi0+ZGlvXzIgJiAweGZmMDAwMCkgeworCisJaWYgKHByaXYtPmRpb18yICYgMHhmZjAwMDApCiAJCWdhdGVjZmcgfD0gR0FURV9DMTsKLQl9Ci0JaWYgKHByaXYtPmRpb18yICYgMHhmZjAwKSB7CisKKwlpZiAocHJpdi0+ZGlvXzIgJiAweGZmMDApCiAJCWdhdGVjZmcgfD0gR0FURV9CMTsKLQl9Ci0JaWYgKHByaXYtPmRpb18yICYgMHhmZikgeworCisJaWYgKHByaXYtPmRpb18yICYgMHhmZikKIAkJZ2F0ZWNmZyB8PSBHQVRFX0ExOwotCX0KKwogCS8qICAgICAgIHByaW50aygiZ2F0ZSBjb250cm9sICV4XG4iLCBnYXRlY2ZnKTsgKi8KIAlvdXRiKGdhdGVjZmcsIGRldi0+aW9iYXNlICsgOSk7CiB9CkBAIC0yMjUsMTUgKzIyMywxNCBAQAogCXVuc2lnbmVkIGludCBiaXRzOwogCiAJbWFzayA9IDEgPDwgQ1JfQ0hBTihpbnNuLT5jaGFuc3BlYyk7Ci0JaWYgKG1hc2sgJiAweDAwMDBmZikgeworCWlmIChtYXNrICYgMHgwMDAwZmYpCiAJCWJpdHMgPSAweDAwMDBmZjsKLQl9IGVsc2UgaWYgKG1hc2sgJiAweDAwZmYwMCkgeworCWVsc2UgaWYgKG1hc2sgJiAweDAwZmYwMCkKIAkJYml0cyA9IDB4MDBmZjAwOwotCX0gZWxzZSBpZiAobWFzayAmIDB4MGYwMDAwKSB7CisJZWxzZSBpZiAobWFzayAmIDB4MGYwMDAwKQogCQliaXRzID0gMHgwZjAwMDA7Ci0JfSBlbHNlIHsKKwllbHNlCiAJCWJpdHMgPSAweGYwMDAwMDsKLQl9CiAKIAlzd2l0Y2ggKGRhdGFbMF0pIHsKIAljYXNlIElOU05fQ09ORklHX0RJT19JTlBVVDoKQEAgLTI3Miw3ICsyNjksNyBAQAogCSgoc3RydWN0IHByaXZfcGNtMzcyNCAqKShkZXYtPnByaXZhdGUpKS0+ZGlvXzEgPSAwOwogCSgoc3RydWN0IHByaXZfcGNtMzcyNCAqKShkZXYtPnByaXZhdGUpKS0+ZGlvXzIgPSAwOwogCi0JcHJpbnRrKCJjb21lZGklZDogcGNtMzcyNDogYm9hcmQ9JXMsIDB4JTAzbHggIiwgZGV2LT5taW5vciwKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogcGNtMzcyNDogYm9hcmQ9JXMsIDB4JTAzbHggIiwgZGV2LT5taW5vciwKIAkgICAgICAgdGhpc19ib2FyZC0+bmFtZSwgaW9iYXNlKTsKIAlpZiAoIWlvYmFzZSB8fCAhcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBpb3JhbmdlLCAicGNtMzcyNCIpKSB7CiAJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOwpAQCAtMjgxLDcgKzI3OCw3IEBACiAKIAlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKIAlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOwotCXByaW50aygiXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJcbiIpOwogCiAJbl9zdWJkZXZpY2VzID0gdGhpc19ib2FyZC0+bnVtb2Zwb3J0czsKIApAQCAtMzAyLDEzICsyOTksMTEgQEAKIAlpbnQgaTsKIAogCWlmIChkZXYtPnN1YmRldmljZXMpIHsKLQkJZm9yIChpID0gMDsgaSA8IGRldi0+bl9zdWJkZXZpY2VzOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGRldi0+bl9zdWJkZXZpY2VzOyBpKyspCiAJCQlzdWJkZXZfODI1NV9jbGVhbnVwKGRldiwgZGV2LT5zdWJkZXZpY2VzICsgaSk7Ci0JCX0KIAl9Ci0JaWYgKGRldi0+aW9iYXNlKSB7CisJaWYgKGRldi0+aW9iYXNlKQogCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgdGhpc19ib2FyZC0+aW9fcmFuZ2UpOwotCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbTM3MzAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY20zNzMwLmMKaW5kZXggOWU0YWRiZC4uMjJiN2FhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbTM3MzAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtMzczMC5jCkBAIC03Myw3ICs3Myw3IEBACiAJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CiAKIAlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKLQlwcmludGsoImNvbWVkaSVkOiBwY20zNzMwOiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IHBjbTM3MzA6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgUENNMzczMF9TSVpFLCAicGNtMzczMCIpKSB7CiAJCXByaW50aygiSS9PIHBvcnQgY29uZmxpY3RcbiIpOwogCQlyZXR1cm4gLUVJTzsKQEAgLTE0MCwxNCArMTQwLDE0IEBACiAJcy0+cmFuZ2VfdGFibGUgPSAmcmFuZ2VfZGlnaXRhbDsKIAlzLT5wcml2YXRlID0gKHZvaWQgKilQQ00zNzMwX0RJQzsKIAotCXByaW50aygiXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJcbiIpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcGNtMzczMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKLQlwcmludGsoImNvbWVkaSVkOiBwY20zNzMwOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBwY20zNzMwOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOwogCiAJaWYgKGRldi0+aW9iYXNlKQogCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgUENNMzczMF9TSVpFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21hZC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWFkLmMKaW5kZXggYWNhYzY3MC4uZmFiODA5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWFkLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbWFkLmMKQEAgLTM0LDExICszNCwxMSBAQAogICBbMF0gLSBJL08gcG9ydCBiYXNlCiAgIFsxXSAtIHVudXNlZAogICBbMl0gLSBBbmFsb2cgaW5wdXQgcmVmZXJlbmNlCi0gICAgICAgICAgMCA9IHNpbmdsZSBlbmRlZAotICAgICAgICAgIDEgPSBkaWZmZXJlbnRpYWwKKwkwID0gc2luZ2xlIGVuZGVkCisJMSA9IGRpZmZlcmVudGlhbAogICBbM10gLSBBbmFsb2cgaW5wdXQgZW5jb2RpbmcgKG11c3QgbWF0Y2gganVtcGVycykKLSAgICAgICAgICAwID0gc3RyYWlnaHQgYmluYXJ5Ci0gICAgICAgICAgMSA9IHR3bydzIGNvbXBsZW1lbnQKKwkwID0gc3RyYWlnaHQgYmluYXJ5CisJMSA9IHR3bydzIGNvbXBsZW1lbnQKICovCiAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KQEAgLTExMyw5ICsxMTMsOCBAQAogCQlkYXRhW25dID0gaW5iKGRldi0+aW9iYXNlICsgUENNQURfTFNCKTsKIAkJZGF0YVtuXSB8PSAoaW5iKGRldi0+aW9iYXNlICsgUENNQURfTVNCKSA8PCA4KTsKIAotCQlpZiAoZGV2cHJpdi0+dHdvc19jb21wKSB7CisJCWlmIChkZXZwcml2LT50d29zX2NvbXApCiAJCQlkYXRhW25dIF49ICgxIDw8ICh0aGlzX2JvYXJkLT5uX2FpX2JpdHMgLSAxKSk7Ci0JCX0KIAl9CiAKIAlyZXR1cm4gbjsKQEAgLTEzNSwxMSArMTM0LDEyIEBACiAJdW5zaWduZWQgbG9uZyBpb2Jhc2U7CiAKIAlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKLQlwcmludGsoImNvbWVkaSVkOiBwY21hZDogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBwY21hZDogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOwogCWlmICghcmVxdWVzdF9yZWdpb24oaW9iYXNlLCBQQ01BRF9TSVpFLCAicGNtYWQiKSkgewotCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiSS9PIHBvcnQgY29uZmxpY3RcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CisJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKIAlkZXYtPmlvYmFzZSA9IGlvYmFzZTsKIAogCXJldCA9IGFsbG9jX3N1YmRldmljZXMoZGV2LCAxKTsKQEAgLTE2NiwxMSArMTY2LDExIEBACiAKIHN0YXRpYyBpbnQgcGNtYWRfZGV0YWNoKHN0cnVjdCBjb21lZGlfZGV2aWNlICpkZXYpCiB7Ci0JcHJpbnRrKCJjb21lZGklZDogcGNtYWQ6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IHBjbWFkOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOwogCi0JaWYgKGRldi0+aXJxKSB7CisJaWYgKGRldi0+aXJxKQogCQlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKLQl9CisKIAlpZiAoZGV2LT5pb2Jhc2UpCiAJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW9iYXNlLCBQQ01BRF9TSVpFKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbW1pby5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BjbW1pby5jCmluZGV4IDM1YmE5MzkuLjZjYTQxMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wY21taW8uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcGNtbWlvLmMKQEAgLTU1MCw3ICs1NTAsNyBAQAogCiAJaWYgKGlycVswXSkgewogCQlwcmludGsoImlycTogJXUgIiwgaXJxWzBdKTsKLQkJaWYgKGlycVsxXSAmJiB0aGlzYm9hcmQtPmRpb19udW1fYXNpY3MgPT0gMikKKwkJaWYgKHRoaXNib2FyZC0+ZGlvX251bV9hc2ljcyA9PSAyICYmIGlycVsxXSkKIAkJCXByaW50aygic2Vjb25kIEFTSUMgaXJxOiAldSAiLCBpcnFbMV0pOwogCX0gZWxzZSB7CiAJCXByaW50aygiKElSUSBtb2RlIGRpc2FibGVkKSAiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9wb2MuYwppbmRleCBkMjNlNTg4Li4xZWJjMzU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcG9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3BvYy5jCkBAIC0xMjIsMjIgKzEyMiwyMSBAQAogCXVuc2lnbmVkIGludCBpb3NpemU7CiAKIAlpb2Jhc2UgPSBpdC0+b3B0aW9uc1swXTsKLQlwcmludGsoImNvbWVkaSVkOiBwb2M6IHVzaW5nICVzIGlvYmFzZSAweCVseFxuIiwgZGV2LT5taW5vciwKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogcG9jOiB1c2luZyAlcyBpb2Jhc2UgMHglbHhcbiIsIGRldi0+bWlub3IsCiAJICAgICAgIHRoaXNfYm9hcmQtPm5hbWUsIGlvYmFzZSk7CiAKIAlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOwogCiAJaWYgKGlvYmFzZSA9PSAwKSB7Ci0JCXByaW50aygiaW8gYmFzZSBhZGRyZXNzIHJlcXVpcmVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJpbyBiYXNlIGFkZHJlc3MgcmVxdWlyZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpb3NpemUgPSB0aGlzX2JvYXJkLT5pb3NpemU7CiAJLyogY2hlY2sgaWYgaW8gYWRkcmVzc2VzIGFyZSBhdmFpbGFibGUgKi8KIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgaW9zaXplLCAiZGFjMDIiKSkgewotCQlwcmludGsKLQkJICAgICgiSS9PIHBvcnQgY29uZmxpY3Q6IGZhaWxlZCB0byBhbGxvY2F0ZSBwb3J0cyAweCVseCB0byAweCVseFxuIiwKLQkJICAgICBpb2Jhc2UsIGlvYmFzZSArIGlvc2l6ZSAtIDEpOworCQlwcmludGsoS0VSTl9FUlIgIkkvTyBwb3J0IGNvbmZsaWN0OiBmYWlsZWQgdG8gYWxsb2NhdGUgcG9ydHMgIgorCQkJIjB4JWx4IHRvIDB4JWx4XG4iLCBpb2Jhc2UsIGlvYmFzZSArIGlvc2l6ZSAtIDEpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CkBAIC0xNTYsOSArMTU1LDggQEAKIAlzLT5pbnNuX3dyaXRlID0gdGhpc19ib2FyZC0+d2luc247CiAJcy0+aW5zbl9yZWFkID0gdGhpc19ib2FyZC0+cmluc247CiAJcy0+aW5zbl9iaXRzID0gdGhpc19ib2FyZC0+aW5zbmJpdHM7Ci0JaWYgKHMtPnR5cGUgPT0gQ09NRURJX1NVQkRfQU8gfHwgcy0+dHlwZSA9PSBDT01FRElfU1VCRF9ETykgeworCWlmIChzLT50eXBlID09IENPTUVESV9TVUJEX0FPIHx8IHMtPnR5cGUgPT0gQ09NRURJX1NVQkRfRE8pCiAJCXMtPnN1YmRldl9mbGFncyA9IFNERl9XUklUQUJMRTsKLQl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2OSw3ICsxNjcsNyBAQAogCWlmIChkZXYtPmlvYmFzZSkKIAkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIHRoaXNfYm9hcmQtPmlvc2l6ZSk7CiAKLQlwcmludGsoImNvbWVkaSVkOiBkYWMwMjogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogZGFjMDI6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDAuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDAuYwppbmRleCAyYzlkMDViLi4wMjhlZDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRpODAwLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0aTgwMC5jCkBAIC0zMiwyMiArMzIsMjIgQEAKICAgWzBdIC0gSS9PIHBvcnQgYmFzZSBhZGRyZXNzCiAgIFsxXSAtIElSUQogICBbMl0gLSBBL0QgcmVmZXJlbmNlCi0gICAgICAgICAgMCA9IGRpZmZlcmVudGlhbAotICAgICAgICAgIDEgPSBwc2V1ZG9kaWZmZXJlbnRpYWwgKGNvbW1vbikKLSAgICAgICAgICAyID0gc2luZ2xlLWVuZGVkCisJMCA9IGRpZmZlcmVudGlhbAorCTEgPSBwc2V1ZG9kaWZmZXJlbnRpYWwgKGNvbW1vbikKKwkyID0gc2luZ2xlLWVuZGVkCiAgIFszXSAtIEEvRCByYW5nZQotICAgICAgICAgIDAgPSBbLTEwLDEwXQotICAgICAgICAgIDEgPSBbLTUsNV0KLSAgICAgICAgICAyID0gWzAsMTBdCisJMCA9IFstMTAsMTBdCisJMSA9IFstNSw1XQorCTIgPSBbMCwxMF0KICAgWzRdIC0gQS9EIGVuY29kaW5nCi0gICAgICAgICAgMCA9IHR3bydzIGNvbXBsZW1lbnQKLSAgICAgICAgICAxID0gc3RyYWlnaHQgYmluYXJ5CisJMCA9IHR3bydzIGNvbXBsZW1lbnQKKwkxID0gc3RyYWlnaHQgYmluYXJ5CiAgIFs1XSAtIERBQyAwIHJhbmdlCi0gICAgICAgICAgMCA9IFstMTAsMTBdCi0gICAgICAgICAgMSA9IFswLDEwXQorCTAgPSBbLTEwLDEwXQorCTEgPSBbMCwxMF0KICAgWzZdIC0gREFDIDAgZW5jb2RpbmcKLSAgICAgICAgICAwID0gdHdvJ3MgY29tcGxlbWVudAotICAgICAgICAgIDEgPSBzdHJhaWdodCBiaW5hcnkKKwkwID0gdHdvJ3MgY29tcGxlbWVudAorCTEgPSBzdHJhaWdodCBiaW5hcnkKICAgWzddIC0gREFDIDEgcmFuZ2UgKHNhbWUgYXMgREFDIDApCiAgIFs4XSAtIERBQyAxIGVuY29kaW5nIChzYW1lIGFzIERBQyAwKQogKi8KQEAgLTIyNSw3ICsyMjUsNyBAQAogCQlmb3IgKHQgPSBSVEk4MDBfVElNRU9VVDsgdDsgdC0tKSB7CiAJCQlzdGF0dXMgPSBpbmIoZGV2LT5pb2Jhc2UgKyBSVEk4MDBfQ1NSKTsKIAkJCWlmIChzdGF0dXMgJiBSVEk4MDBfT1ZFUlJVTikgewotCQkJCXByaW50aygicnRpODAwOiBhL2Qgb3ZlcnJ1blxuIik7CisJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAicnRpODAwOiBhL2Qgb3ZlcnJ1blxuIik7CiAJCQkJb3V0YigwLCBkZXYtPmlvYmFzZSArIFJUSTgwMF9DTFJGTEFHUyk7CiAJCQkJcmV0dXJuIC1FSU87CiAJCQl9CkBAIC0yMzQsMTUgKzIzNCwxNCBAQAogCQkJdWRlbGF5KDEpOwogCQl9CiAJCWlmICh0ID09IDApIHsKLQkJCXByaW50aygicnRpODAwOiB0aW1lb3V0XG4iKTsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgInJ0aTgwMDogdGltZW91dFxuIik7CiAJCQlyZXR1cm4gLUVUSU1FOwogCQl9CiAJCWRhdGFbaV0gPSBpbmIoZGV2LT5pb2Jhc2UgKyBSVEk4MDBfQURDTE8pOwogCQlkYXRhW2ldIHw9ICgweGYgJiBpbmIoZGV2LT5pb2Jhc2UgKyBSVEk4MDBfQURDSEkpKSA8PCA4OwogCi0JCWlmIChkZXZwcml2LT5hZGNfY29kaW5nID09IGFkY18yY29tcCkgeworCQlpZiAoZGV2cHJpdi0+YWRjX2NvZGluZyA9PSBhZGNfMmNvbXApCiAJCQlkYXRhW2ldIF49IDB4ODAwOwotCQl9CiAJfQogCiAJcmV0dXJuIGk7CkBAIC0yNzEsOSArMjcwLDkgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBpbnNuLT5uOyBpKyspIHsKIAkJZGV2cHJpdi0+YW9fcmVhZGJhY2tbY2hhbl0gPSBkID0gZGF0YVtpXTsKLQkJaWYgKGRldnByaXYtPmRhYzBfY29kaW5nID09IGRhY18yY29tcCkgeworCQlpZiAoZGV2cHJpdi0+ZGFjMF9jb2RpbmcgPT0gZGFjXzJjb21wKQogCQkJZCBePSAweDgwMDsKLQkJfQorCiAJCW91dGIoZCAmIDB4ZmYsCiAJCSAgICAgZGV2LT5pb2Jhc2UgKyAoY2hhbiA/IFJUSTgwMF9EQUMxTE8gOiBSVEk4MDBfREFDMExPKSk7CiAJCW91dGIoZCA+PiA4LApAQCAtMzE1LDE1ICszMTQsMTUgQEAKICAgIG9wdGlvbnNbMF0gLSBJL08gcG9ydAogICAgb3B0aW9uc1sxXSAtIGlycQogICAgb3B0aW9uc1syXSAtIGEvZCBtdXgKLSAgIAkwPWRpZmZlcmVudGlhbCwgMT1wc2V1ZG9kaWZmLCAyPXNpbmdsZQorCTA9ZGlmZmVyZW50aWFsLCAxPXBzZXVkb2RpZmYsIDI9c2luZ2xlCiAgICBvcHRpb25zWzNdIC0gYS9kIHJhbmdlCi0gICAJMD1iaXBvbGFyMTAsIDE9Ymlwb2xhcjUsIDI9dW5pcG9sYXIxMAorCTA9Ymlwb2xhcjEwLCAxPWJpcG9sYXI1LCAyPXVuaXBvbGFyMTAKICAgIG9wdGlvbnNbNF0gLSBhL2QgY29kaW5nCi0gICAJMD0yJ3MgY29tcCwgMT1zdHJhaWdodCBiaW5hcnkKKwkwPTIncyBjb21wLCAxPXN0cmFpZ2h0IGJpbmFyeQogICAgb3B0aW9uc1s1XSAtIGRhYzAgcmFuZ2UKLSAgIAkwPWJpcG9sYXIxMCwgMT11bmlwb2xhcjEwCisJMD1iaXBvbGFyMTAsIDE9dW5pcG9sYXIxMAogICAgb3B0aW9uc1s2XSAtIGRhYzAgY29kaW5nCi0gICAJMD0yJ3MgY29tcCwgMT1zdHJhaWdodCBiaW5hcnkKKwkwPTIncyBjb21wLCAxPXN0cmFpZ2h0IGJpbmFyeQogICAgb3B0aW9uc1s3XSAtIGRhYzEgcmFuZ2UKICAgIG9wdGlvbnNbOF0gLSBkYWMxIGNvZGluZwogICovCkBAIC0zMzYsMTUgKzMzNSwxNSBAQAogCXN0cnVjdCBjb21lZGlfc3ViZGV2aWNlICpzOwogCiAJaW9iYXNlID0gaXQtPm9wdGlvbnNbMF07Ci0JcHJpbnRrKCJjb21lZGklZDogcnRpODAwOiAweCUwNGx4ICIsIGRldi0+bWlub3IsIGlvYmFzZSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IHJ0aTgwMDogMHglMDRseFxuIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgUlRJODAwX1NJWkUsICJydGk4MDAiKSkgewotCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSS9PIHBvcnQgY29uZmxpY3RcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CiAKICNpZmRlZiBERUJVRwotCXByaW50aygiZmluZ2VycHJpbnQ9JXgsJXgsJXgsJXgsJXggIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiZmluZ2VycHJpbnQ9JXgsJXgsJXgsJXgsJXggIiwKIAkgICAgICAgaW5iKGRldi0+aW9iYXNlICsgMCksCiAJICAgICAgIGluYihkZXYtPmlvYmFzZSArIDEpLAogCSAgICAgICBpbmIoZGV2LT5pb2Jhc2UgKyAyKSwKQEAgLTM1NywxNSArMzU2LDE1IEBACiAKIAlpcnEgPSBpdC0+b3B0aW9uc1sxXTsKIAlpZiAoaXJxKSB7Ci0JCXByaW50aygiKCBpcnEgPSAldSApIiwgaXJxKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiKCBpcnEgPSAldSApXG4iLCBpcnEpOwogCQlyZXQgPSByZXF1ZXN0X2lycShpcnEsIHJ0aTgwMF9pbnRlcnJ1cHQsIDAsICJydGk4MDAiLCBkZXYpOwogCQlpZiAocmV0IDwgMCkgewotCQkJcHJpbnRrKCIgRmFpbGVkIHRvIGFsbG9jYXRlIElSUVxuIik7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIgRmFpbGVkIHRvIGFsbG9jYXRlIElSUVxuIik7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJCWRldi0+aXJxID0gaXJxOwogCX0gZWxzZSB7Ci0JCXByaW50aygiKCBubyBpcnEgKSIpOworCQlwcmludGsoS0VSTl9JTkZPICIoIG5vIGlycSApXG4iKTsKIAl9CiAKIAlkZXYtPmJvYXJkX25hbWUgPSB0aGlzX2JvYXJkLT5uYW1lOwpAQCAtNDYxLDE0ICs0NjAsMTIgQEAKIAlzLT50eXBlID0gQ09NRURJX1NVQkRfVElNRVI7CiAjZW5kaWYKIAotCXByaW50aygiXG4iKTsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHJ0aTgwMF9kZXRhY2goc3RydWN0IGNvbWVkaV9kZXZpY2UgKmRldikKIHsKLQlwcmludGsoImNvbWVkaSVkOiBydGk4MDA6IHJlbW92ZVxuIiwgZGV2LT5taW5vcik7CisJcHJpbnRrKEtFUk5fSU5GTyAiY29tZWRpJWQ6IHJ0aTgwMDogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKIAogCWlmIChkZXYtPmlvYmFzZSkKIAkJcmVsZWFzZV9yZWdpb24oZGV2LT5pb2Jhc2UsIFJUSTgwMF9TSVpFKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9ydGk4MDIuYwppbmRleCAyZjc1YzczLi4yMTU3ZWRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvcnRpODAyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3J0aTgwMi5jCkBAIC0xMDYsOSArMTA2LDkgQEAKIAl1bnNpZ25lZCBsb25nIGlvYmFzZTsKIAogCWlvYmFzZSA9IGl0LT5vcHRpb25zWzBdOwotCXByaW50aygiY29tZWRpJWQ6IHJ0aTgwMjogMHglMDRseCAiLCBkZXYtPm1pbm9yLCBpb2Jhc2UpOworCXByaW50ayhLRVJOX0lORk8gImNvbWVkaSVkOiBydGk4MDI6IDB4JTA0bHggIiwgZGV2LT5taW5vciwgaW9iYXNlKTsKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvYmFzZSwgUlRJODAyX1NJWkUsICJydGk4MDIiKSkgewotCQlwcmludGsoIkkvTyBwb3J0IGNvbmZsaWN0XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSS9PIHBvcnQgY29uZmxpY3RcbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJZGV2LT5pb2Jhc2UgPSBpb2Jhc2U7CkBAIC0xMzgsMTQgKzEzOCwxMiBAQAogCQkgICAgPyAmcmFuZ2VfdW5pcG9sYXIxMCA6ICZyYW5nZV9iaXBvbGFyMTA7CiAJfQogCi0JcHJpbnRrKCJcbiIpOwotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcnRpODAyX2RldGFjaChzdHJ1Y3QgY29tZWRpX2RldmljZSAqZGV2KQogewotCXByaW50aygiY29tZWRpJWQ6IHJ0aTgwMjogcmVtb3ZlXG4iLCBkZXYtPm1pbm9yKTsKKwlwcmludGsoS0VSTl9JTkZPICJjb21lZGklZDogcnRpODAyOiByZW1vdmVcbiIsIGRldi0+bWlub3IpOwogCiAJaWYgKGRldi0+aW9iYXNlKQogCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvYmFzZSwgUlRJODAyX1NJWkUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M2MjYuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zNjI2LmMKaW5kZXggZmRkN2FiOS4uYTNjYzkzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3M2MjYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvczYyNi5jCkBAIC0xNDAsNyArMTQwLDcgQEAKIAlzaG9ydCBhbGxvY2F0ZWRCdWY7CiAJdWludDhfdCBhaV9jbWRfcnVubmluZzsJLyogIGFpX2NtZCBpcyBydW5uaW5nICovCiAJdWludDhfdCBhaV9jb250aW5vdXM7CS8qICBjb250aW5vdXMgYXF1aXNpdGlvbiAqLwotCWludCBhaV9zYW1wbGVfY291bnQ7CS8qICBudW1iZXIgb2Ygc2FtcGxlcyB0byBhcXVpcmUgKi8KKwlpbnQgYWlfc2FtcGxlX2NvdW50OwkvKiAgbnVtYmVyIG9mIHNhbXBsZXMgdG8gYWNxdWlyZSAqLwogCXVuc2lnbmVkIGludCBhaV9zYW1wbGVfdGltZXI7CiAJLyogIHRpbWUgYmV0d2VlbiBzYW1wbGVzIGluICB1bml0cyBvZiB0aGUgdGltZXIgKi8KIAlpbnQgYWlfY29udmVydF9jb3VudDsJLyogIGNvbnZlcnNpb24gY291bnRlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NlcmlhbDIwMDIuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zZXJpYWwyMDAyLmMKaW5kZXggZGIzN2RjZC4uZGQyYjkwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3NlcmlhbDIwMDIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc2VyaWFsMjAwMi5jCkBAIC0zOTcsNyArMzk3LDcgQEAKIAljaGFyIHBvcnRbMjBdOwogCiAJc3ByaW50Zihwb3J0LCAiL2Rldi90dHlTJWQiLCBkZXZwcml2LT5wb3J0KTsKLQlkZXZwcml2LT50dHkgPSBmaWxwX29wZW4ocG9ydCwgMCwgT19SRFdSKTsKKwlkZXZwcml2LT50dHkgPSBmaWxwX29wZW4ocG9ydCwgT19SRFdSLCAwKTsKIAlpZiAoSVNfRVJSKGRldnByaXYtPnR0eSkpIHsKIAkJcHJpbnRrKCJzZXJpYWxfMjAwMjogZmlsZSBvcGVuIGVycm9yID0gJWxkXG4iLAogCQkgICAgICAgUFRSX0VSUihkZXZwcml2LT50dHkpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zc3ZfZG5wLmMgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvc3N2X2RucC5jCmluZGV4IDQ5MThmYmYuLjE3YzkyYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy9zc3ZfZG5wLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3Nzdl9kbnAuYwpAQCAtMzAwLDExICszMDAsMTEgQEAKIAogCS8qIHJlYWQgJ29sZCcgZGlyZWN0aW9uIG9mIHRoZSBwb3J0IGFuZCBzZXQgYml0cyAob3V0PTEsIGluPTApICAgICAgICAgICAgICovCiAJcmVnaXN0ZXJfYnVmZmVyID0gaW5iKENTQ0RSKTsKLQlpZiAoZGF0YVswXSA9PSBDT01FRElfT1VUUFVUKSB7CisJaWYgKGRhdGFbMF0gPT0gQ09NRURJX09VVFBVVCkKIAkJcmVnaXN0ZXJfYnVmZmVyIHw9ICgxIDw8IGNoYW4pOwotCX0gZWxzZSB7CisJZWxzZQogCQlyZWdpc3Rlcl9idWZmZXIgJj0gfigxIDw8IGNoYW4pOwotCX0KKwogCW91dGIocmVnaXN0ZXJfYnVmZmVyLCBDU0NEUik7CiAKIAlyZXR1cm4gMTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXguYwppbmRleCA5YTFiNTU5Li44OTQyYWU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eC5jCkBAIC05NSw3ICs5NSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KQEAgLTI4OSw3ICsyODgsNyBAQAogCS8qIGNvbnRpbm91cyBhcXVpc2l0aW9uICovCiAJc2hvcnQgaW50IGFpX2NvbnRpbm91czsKIAlzaG9ydCBpbnQgYW9fY29udGlub3VzOwotCS8qIG51bWJlciBvZiBzYW1wbGVzIHRvIGFxdWlyZSAqLworCS8qIG51bWJlciBvZiBzYW1wbGVzIHRvIGFjcXVpcmUgKi8KIAlpbnQgYWlfc2FtcGxlX2NvdW50OwogCWludCBhb19zYW1wbGVfY291bnQ7CiAJLyogdGltZSBiZXR3ZWVuIHNhbXBsZXMgaW4gdW5pdHMgb2YgdGhlIHRpbWVyICovCkBAIC0yODMzLDcgKzI4MzIsNyBAQAogfTsKIAogLyogVGFibGUgd2l0aCB0aGUgVVNCLWRldmljZXM6IGp1c3Qgbm93IG9ubHkgdGVzdGluZyBJRHMgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JkdXhzdWJfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JkdXhzdWJfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRSgweDEzZDgsIDB4MDAwMSl9LAogCXtVU0JfREVWSUNFKDB4MTNkOCwgMHgwMDAyKX0sCiAJe30JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eGZhc3QuYyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy91c2JkdXhmYXN0LmMKaW5kZXggMmU2NzVjYy4uZTg5YjgxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3VzYmR1eGZhc3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdXNiZHV4ZmFzdC5jCkBAIC00NCw3ICs0NCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9mY250bC5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSAiY29tZWRpX2ZjLmgiCkBAIC0xODIsNyArMTgxLDcgQEAKIAkJCQkJCSAgIGNvbnRleHQgKi8KIAlzaG9ydCBpbnQgYWlfY21kX3J1bm5pbmc7CS8qIGFzeW5jaHJvbm91cyBjb21tYW5kIGlzIHJ1bm5pbmcgKi8KIAlzaG9ydCBpbnQgYWlfY29udGlub3VzOwkvKiBjb250aW5vdXMgYXF1aXNpdGlvbiAqLwotCWxvbmcgaW50IGFpX3NhbXBsZV9jb3VudDsJLyogbnVtYmVyIG9mIHNhbXBsZXMgdG8gYXF1aXJlICovCisJbG9uZyBpbnQgYWlfc2FtcGxlX2NvdW50OwkvKiBudW1iZXIgb2Ygc2FtcGxlcyB0byBhY3F1aXJlICovCiAJdWludDhfdCAqZHV4X2NvbW1hbmRzOwkvKiBjb21tYW5kcyAqLwogCWludCBpZ25vcmU7CQkvKiBjb3VudGVyIHdoaWNoIGlnbm9yZXMgdGhlIGZpcnN0CiAJCQkJICAgYnVmZmVycyAqLwpAQCAtMTc2OSw3ICsxNzY4LDcgQEAKIC8qCiAgKiBUYWJsZSB3aXRoIHRoZSBVU0ItZGV2aWNlczoganVzdCBub3cgb25seSB0ZXN0aW5nIElEcwogICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiZHV4ZmFzdHN1Yl90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYmR1eGZhc3RzdWJfdGFibGVbXSA9IHsKIAkvKiB7IFVTQl9ERVZJQ0UoMHg0YjQsIDB4ODYxMykgfSwgdGVzdGluZyAqLwogCXtVU0JfREVWSUNFKDB4MTNkOCwgMHgwMDEwKX0sCS8qIHJlYWwgSUQgKi8KIAl7VVNCX0RFVklDRSgweDEzZDgsIDB4MDAxMSl9LAkvKiByZWFsIElEICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdm1rODB4eC5jIGIvZHJpdmVycy9zdGFnaW5nL2NvbWVkaS9kcml2ZXJzL3ZtazgweHguYwppbmRleCBjMzRhMGI5Li42NDc5YzM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY29tZWRpL2RyaXZlcnMvdm1rODB4eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jb21lZGkvZHJpdmVycy92bWs4MHh4LmMKQEAgLTc1LDcgKzc1LDcgQEAKIAlERVZJQ0VfVk1LODA2MQogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHZtazgweHhfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB2bWs4MHh4X2lkX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgxMGNmLCAweDU1MDApLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfVk1LODA1NX0sCiAJe1VTQl9ERVZJQ0UoMHgxMGNmLCAweDU1MDEpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfVk1LODA1NX0sCiAJe1VTQl9ERVZJQ0UoMHgxMGNmLCAweDU1MDIpLCAuZHJpdmVyX2luZm8gPSBERVZJQ0VfVk1LODA1NX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZiNDE0YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvS2NvbmZpZwpAQCAtMCwwICsxLDYgQEAKK2NvbmZpZyBDUllTVEFMSEQKKwl0cmlzdGF0ZSAiQnJvYWRjb20gQ3J5c3RhbCBIRCB2aWRlbyBkZWNvZGVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTdXBwb3J0IGZvciB0aGUgQnJvYWRjb20gQ3J5c3RhbCBIRCB2aWRlbyBkZWNvZGVyIGNoaXBzZXQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYWYwY2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorb2JqLSQoQ09ORklHX0NSWVNUQUxIRCkJKz0gY3J5c3RhbGhkLm8KKworY3J5c3RhbGhkLW9ianMJCTo9IGNyeXN0YWxoZF9jbWRzLm8JXAorCQkJICAgY3J5c3RhbGhkX2h3Lm8JXAorCQkJICAgY3J5c3RhbGhkX2xueC5vCVwKKwkJCSAgIGNyeXN0YWxoZF9taXNjLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvVE9ETwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWJlNWQwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9UT0RPCkBAIC0wLDAgKzEsMTYgQEAKKy0gVGVzdGluZworLSBDbGVhbnVwIHJldHVybiBjb2RlcworLSBDbGVhbnVwIHR5cGVkZWZzCistIENsZWFudXAgYWxsIFdJTiogcmVmZXJlbmNlcworLSBBbGxvY2F0ZSBhbiBBY2NlbGVyYXRvciBkZXZpY2UgY2xhc3Mgc3BlY2lmaWMgTWFqb3IgbnVtYmVyLAorICBzaW5jZSB3ZSBkb24ndCBoYXZlIGFueSBvdGhlciBvcGVuIHNvdXJjZWQgYWNjZWxlcmF0b3JzLCBpdCBpcyB0aGUgb25seQorICBvbmUgaW4gdGhhdCBjYXRlZ29yeSBmb3Igbm93LgorICBBIHNvbWV3aGF0IHNpbWlsYXIgZGV2aWNlIGlzIHRoZSBEWFIyLzMKKworUGxlYXNlIHNlbmQgcGF0Y2hlcyB0bzoKK0dyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CitOYXJlbiBTYW5rYXIgPG5zYW5rYXJAYnJvYWRjb20uY29tPgorSmFyb2QgV2lsc29uIDxqYXJvZEB3aWxzb25ldC5jb20+CitTY290dCBEYXZpbGxhIDxkYXZpbGxhQDRwaS5jb20+CitNYW51IEFicmFoYW0gPGFicmFoYW0ubWFudUBnbWFpbC5jb20+CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvYmNfZHRzX2RlZnMuaCBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvYmNfZHRzX2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzRjYzA3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9iY19kdHNfZGVmcy5oCkBAIC0wLDAgKzEsNDk4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodChjKSAyMDA2LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKgorICogIE5hbWU6IGJjX2R0c19kZWZzLmgKKyAqCisgKiAgRGVzY3JpcHRpb246IENvbW1vbiBkZWZpbml0aW9ucyBmb3IgYWxsIGNvbXBvbmVudHMuIE9ubHkgdHlwZXMKKyAqCQkgaXMgYWxsb3dlZCB0byBiZSBpbmNsdWRlZCBmcm9tIHRoaXMgZmlsZS4KKyAqCisgKiAgQVUKKyAqCisgKiAgSElTVE9SWToKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgaGVhZGVyIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgaGVhZGVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBoZWFkZXIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfQkNfRFRTX0RFRlNfSF8KKyNkZWZpbmUgX0JDX0RUU19ERUZTX0hfCisKKyNpbmNsdWRlICJiY19kdHNfdHlwZXMuaCIKKworLyogQklUIE1hc2sgKi8KKyNkZWZpbmUgQkNfQklUKF94KQkJKDEgPDwgKF94KSkKKwordHlwZWRlZiBlbnVtIF9CQ19TVEFUVVMgeworCUJDX1NUU19TVUNDRVNTCQk9IDAsCisJQkNfU1RTX0lOVl9BUkcJCT0gMSwKKwlCQ19TVFNfQlVTWQkJPSAyLAorCUJDX1NUU19OT1RfSU1QTAkJPSAzLAorCUJDX1NUU19QR01fUVVJVAkJPSA0LAorCUJDX1NUU19OT19BQ0NFU1MJPSA1LAorCUJDX1NUU19JTlNVRkZfUkVTCT0gNiwKKwlCQ19TVFNfSU9fRVJST1IJCT0gNywKKwlCQ19TVFNfTk9fREFUQQkJPSA4LAorCUJDX1NUU19WRVJfTUlTTUFUQ0gJPSA5LAorCUJDX1NUU19USU1FT1VUCQk9IDEwLAorCUJDX1NUU19GV19DTURfRVJSCT0gMTEsCisJQkNfU1RTX0RFQ19OT1RfT1BFTgk9IDEyLAorCUJDX1NUU19FUlJfVVNBR0UJPSAxMywKKwlCQ19TVFNfSU9fVVNFUl9BQk9SVAk9IDE0LAorCUJDX1NUU19JT19YRlJfRVJST1IJPSAxNSwKKwlCQ19TVFNfREVDX05PVF9TVEFSVEVECT0gMTYsCisJQkNfU1RTX0ZXSEVYX05PVF9GT1VORAk9IDE3LAorCUJDX1NUU19GTVRfQ0hBTkdFCT0gMTgsCisJQkNfU1RTX0hJRl9BQ0NFU1MJPSAxOSwKKwlCQ19TVFNfQ01EX0NBTkNFTExFRAk9IDIwLAorCUJDX1NUU19GV19BVVRIX0ZBSUxFRAk9IDIxLAorCUJDX1NUU19CT09UTE9BREVSX0ZBSUxFRCA9IDIyLAorCUJDX1NUU19DRVJUX1ZFUklGWV9FUlJPUiA9IDIzLAorCUJDX1NUU19ERUNfRVhJU1RfT1BFTgk9IDI0LAorCUJDX1NUU19QRU5ESU5HCQk9IDI1LAorCUJDX1NUU19DTEtfTk9DSEcJPSAyNiwKKworCS8qIE11c3QgYmUgdGhlIGxhc3Qgb25lLiovCisJQkNfU1RTX0VSUk9SCQk9IC0xCit9IEJDX1NUQVRVUzsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiAgICBSZWdpc3RyeSBLZXkgRGVmaW5pdGlvbnMJCQkJKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBCQ19SRUdfS0VZX01BSU5fUEFUSAkiU29mdHdhcmVcXEJyb2FkY29tXFxNZWRpYVBDXFw3MDAxMCIKKyNkZWZpbmUgQkNfUkVHX0tFWV9GV1BBVEgJCSJGaXJtd2FyZUZpbGVQYXRoIgorI2RlZmluZSBCQ19SRUdfS0VZX1NFQ19PUFQJCSJEYmdPcHRpb25zIgorCisvKgorICogT3B0aW9uczoKKyAqCisgKiAgYls1XSA9IEVuYWJsZSBSU0EgS0VZIGluIEVFUFJPTSBTdXBwb3J0CisgKiAgYls2XSA9IEVuYWJsZSBPbGQgUElCIHNjaGVtZS4gKDAgPSBVc2UgUElCIHdpdGggdmlkZW8gc2NoZW1lKQorICoKKyAqICBiWzEyXSA9IEVuYWJsZSBzZW5kIG1lc3NhZ2UgdG8gTm90aWZ5SWNvbgorICoKKyAqLworCit0eXBlZGVmIGVudW0gX0JDX1NXX09QVElPTlMgeworCUJDX09QVF9ET1NFUl9PVVRfRU5DUllQVAk9IEJDX0JJVCgzKSwKKwlCQ19PUFRfTElOS19PVVRfRU5DUllQVAkJPSBCQ19CSVQoMjkpLAorfSBCQ19TV19PUFRJT05TOworCit0eXBlZGVmIHN0cnVjdCBfQkNfUkVHX0NPTkZJR3sKKwl1aW50MzJfdAkJRGJnT3B0aW9uczsKK30gQkNfUkVHX0NPTkZJRzsKKworI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgZGVmaW5lZChfX0xJTlVYX1VTRVJfXykKKyNlbHNlCisvKiBBbGlnbiBkYXRhIHN0cnVjdHVyZXMgKi8KKyNkZWZpbmUgQUxJR04oeCkJX19kZWNsc3BlYyhhbGlnbih4KSkKKyNlbmRpZgorCisvKiBtb2RlCisgKiBiWzBdLi5iWzddCT0gX0R0c0RldmljZU9wZW5Nb2RlCisgKiBiWzhdCQk9ICBMb2FkIG5ldyBGVworICogYls5XQkJPSAgTG9hZCBmaWxlIHBsYXkgYmFjayBGVworICogYlsxMF0JPSAgRGlzayBmb3JtYXQgKDAgZm9yIEhEIERWRCBhbmQgMSBmb3IgQkxVIHJheSkKKyAqIGJbMTFdLWJbMTVdCT0gIGRlZmF1bHQgb3V0cHV0IHJlc29sdXRpb24KKyAqIGJbMTZdCT0gIFNraXAgVFggQ1BCIEJ1ZmZlciBDaGVjaworICogYlsxN10JPSAgQWRhcHRpdmUgT3V0cHV0IEVuY3J5cHQvU2NyYW1ibGUgU2NoZW1lCisgKiBiWzE4XS1iWzMxXQk9ICByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZQorICovCisKKy8qIFRvIGFsbG93IG11bHRpcGxlIGFwcHMgdG8gb3BlbiB0aGUgZGV2aWNlLiAqLworZW51bSBfRHRzRGV2aWNlT3Blbk1vZGUgeworCURUU19QTEFZQkFDS19NT0RFID0gMCwKKwlEVFNfRElBR19NT0RFLAorCURUU19NT05JVE9SX01PREUsCisJRFRTX0hXSU5JVF9NT0RFCit9OworCisvKiBUbyBlbmFibGUgdGhlIGZpbHRlciB0byBzZWxlY3RpdmVseSBlbmFibGUvZGlzYWJsZSBmaXhlcyBvciBlcnJhdGFzICovCitlbnVtIF9EdHNEZXZpY2VGaXhNb2RlIHsKKwlEVFNfTE9BRF9ORVdfRlcJCT0gQkNfQklUKDgpLAorCURUU19MT0FEX0ZJTEVfUExBWV9GVwk9IEJDX0JJVCg5KSwKKwlEVFNfRElTS19GTVRfQkQJCT0gQkNfQklUKDEwKSwKKwkvKiBiWzExXS1iWzE1XSA6IERlZmF1bHQgb3V0cHV0IHJlc29sdXRpb24gKi8KKwlEVFNfU0tJUF9UWF9DSEtfQ1BCCT0gQkNfQklUKDE2KSwKKwlEVFNfQURBUFRJVkVfT1VUUFVUX1BFUgk9IEJDX0JJVCgxNyksCisJRFRTX0lOVEVMTElNQVAJCT0gQkNfQklUKDE4KSwKKwkvKiBiWzE5XS1iWzIxXSA6IHNlbGVjdCBjbG9jayBmcmVxdWVuY3kgKi8KKwlEVFNfUExBWUJBQ0tfRFJPUF9SUFRfTU9ERSA9IEJDX0JJVCgyMikKK307CisKKyNkZWZpbmUgRFRTX0RGTFRfUkVTT0xVVElPTih4KQkoeDw8MTEpCisKKyNkZWZpbmUgRFRTX0RGTFRfQ0xPQ0soeCkgKHg8PDE5KQorCisvKiBGL1cgRmlsZSBWZXJzaW9uIGNvcnJlc3BvbmRpbmcgdG8gUy9XIFJlbGVhc2VzICovCitlbnVtIF9GV19GSUxFX1ZFUiB7CisJLyogUy9XIHJlbGVhc2U6IDAyLjA0LjAyCUYvVyByZWxlYXNlIDIuMTIuMi4wICovCisJQkNfRldfVkVSXzAyMDQwMiA9ICgoMTI8PDE2KSB8ICgyPDw4KSB8ICgwKSkKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogICAgU3RyZWFtIFR5cGVzIGZvciBEdHNPcGVuRGVjb2RlcigpCQkJKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworZW51bSBfRHRzT3BlbkRlY1N0cmVhbVR5cGVzIHsKKwlCQ19TVFJFQU1fVFlQRV9FUwkJPSAwLAorCUJDX1NUUkVBTV9UWVBFX1BFUwkJPSAxLAorCUJDX1NUUkVBTV9UWVBFX1RTCQk9IDIsCisJQkNfU1RSRUFNX1RZUEVfRVNfVFNUQU1QCT0gNiwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogICAgVmlkZW8gQWxnb3JpdGhtcyBmb3IgRHRzU2V0VmlkZW9QYXJhbXMoKQkJKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworZW51bSBfRHRzU2V0VmlkZW9QYXJhbXNBbGdvIHsKKwlCQ19WSURfQUxHT19IMjY0CQk9IDAsCisJQkNfVklEX0FMR09fTVBFRzIJCT0gMSwKKwlCQ19WSURfQUxHT19WQzEJCQk9IDQsCisJQkNfVklEX0FMR09fVkMxTVAJCT0gNywKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgorICogICAgTVBFRyBFeHRlbnNpb24gdG8gdGhlIFBQQgkJCQkqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIEJDX01QRUdfVkFMSURfUEFOU0NBTgkJKDEpCisKK3R5cGVkZWYgc3RydWN0IF9CQ19QSUJfRVhUX01QRUcgeworCXVpbnQzMl90CXZhbGlkOworCS8qIEFsd2F5cyB2YWxpZCwgIGRlZmF1bHRzIHRvIHBpY3R1cmUgc2l6ZSBpZiBubworCSAqIHNlcXVlbmNlIGRpc3BsYXkgZXh0ZW5zaW9uIGluIHRoZSBzdHJlYW0uICovCisJdWludDMyX3QJZGlzcGxheV9ob3Jpem9udGFsX3NpemU7CisJdWludDMyX3QJZGlzcGxheV92ZXJ0aWNhbF9zaXplOworCisJLyogTVBFR19WQUxJRF9QQU5TQ0FOCisJICogT2Zmc2V0cyBhcmUgYSBjb3B5IHZhbHVlcyBmcm9tIHRoZSBNUEVHIHN0cmVhbS4gKi8KKwl1aW50MzJfdAlvZmZzZXRfY291bnQ7CisJaW50MzJfdAkJaG9yaXpvbnRhbF9vZmZzZXRbM107CisJaW50MzJfdAkJdmVydGljYWxfb2Zmc2V0WzNdOworCit9IEJDX1BJQl9FWFRfTVBFRzsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiAgICBILjI2NCBFeHRlbnNpb24gdG8gdGhlIFBQQgkJCSoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIEJpdCBkZWZpbml0aW9ucyBmb3IgJ290aGVyLmgyNjQudmFsaWQnIGZpZWxkICovCisjZGVmaW5lIEgyNjRfVkFMSURfUEFOU0NBTgkJKDEpCisjZGVmaW5lIEgyNjRfVkFMSURfU1BTX0NST1AJCSgyKQorI2RlZmluZSBIMjY0X1ZBTElEX1ZVSQkJCSg0KQorCit0eXBlZGVmIHN0cnVjdCBfQkNfUElCX0VYVF9IMjY0IHsKKwkvKiAndmFsaWQnIHNwZWNpZmllcyB3aGljaCBmaWVsZHMgKG9yIHNldHMgb2YKKwkgKiBmaWVsZHMpIGJlbG93IGFyZSB2YWxpZC4gIElmIHRoZSBjb3JyZXNwb25kaW5nCisJICogYml0IGluICd2YWxpZCcgaXMgTk9UIHNldCB0aGVuIHRoYXQgZmllbGQocykKKwkgKiBpcyAoYXJlKSBub3QgaW5pdGlhbGl6ZWQuICovCisJdWludDMyX3QJdmFsaWQ7CisKKwkvKiBIMjY0X1ZBTElEX1BBTlNDQU4gKi8KKwl1aW50MzJfdAlwYW5fc2Nhbl9jb3VudDsKKwlpbnQzMl90CQlwYW5fc2Nhbl9sZWZ0WzNdOworCWludDMyX3QJCXBhbl9zY2FuX3JpZ2h0WzNdOworCWludDMyX3QJCXBhbl9zY2FuX3RvcFszXTsKKwlpbnQzMl90CQlwYW5fc2Nhbl9ib3R0b21bM107CisKKwkvKiBIMjY0X1ZBTElEX1NQU19DUk9QICovCisJaW50MzJfdAkJc3BzX2Nyb3BfbGVmdDsKKwlpbnQzMl90CQlzcHNfY3JvcF9yaWdodDsKKwlpbnQzMl90CQlzcHNfY3JvcF90b3A7CisJaW50MzJfdAkJc3BzX2Nyb3BfYm90dG9tOworCisJLyogSDI2NF9WQUxJRF9WVUkgKi8KKwl1aW50MzJfdAljaHJvbWFfdG9wOworCXVpbnQzMl90CWNocm9tYV9ib3R0b207CisKK30gQkNfUElCX0VYVF9IMjY0OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqICAgIFZDMSBFeHRlbnNpb24gdG8gdGhlIFBQQgkJCQkqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIFZDMV9WQUxJRF9QQU5TQ0FOCQkoMSkKKwordHlwZWRlZiBzdHJ1Y3QgX0JDX1BJQl9FWFRfVkMxIHsKKwl1aW50MzJfdAl2YWxpZDsKKworCS8qIEFsd2F5cyB2YWxpZCwgZGVmYXVsdHMgdG8gcGljdHVyZSBzaXplIGlmIG5vCisJICogc2VxdWVuY2UgZGlzcGxheSBleHRlbnNpb24gaW4gdGhlIHN0cmVhbS4gKi8KKwl1aW50MzJfdAlkaXNwbGF5X2hvcml6b250YWxfc2l6ZTsKKwl1aW50MzJfdAlkaXNwbGF5X3ZlcnRpY2FsX3NpemU7CisKKwkvKiBWQzEgcGFuIHNjYW4gd2luZG93cyAqLworCXVpbnQzMl90CW51bV9wYW5zY2FuX3dpbmRvd3M7CisJaW50MzJfdAkJcHNfaG9yaXpfb2Zmc2V0WzRdOworCWludDMyX3QJCXBzX3ZlcnRfb2Zmc2V0WzRdOworCWludDMyX3QJCXBzX3dpZHRoWzRdOworCWludDMyX3QJCXBzX2hlaWdodFs0XTsKKworfSBCQ19QSUJfRVhUX1ZDMTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqICAgIFBpY3R1cmUgSW5mb3JtYXRpb24gQmxvY2sJCQkJKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9XSU42NCkgfHwgZGVmaW5lZChfX0xJTlVYX1VTRVJfXykKKy8qIFZhbHVlcyBmb3IgJ3B1bGxkb3duJyBmaWVsZC4gICcwJyBtZWFucyBubyBwdWxsZG93biBpbmZvcm1hdGlvbgorICogd2FzIHByZXNlbnQgZm9yIHRoaXMgcGljdHVyZS4gKi8KK2VudW0geworCXZkZWNOb1B1bGxkb3duSW5mbwk9IDAsCisJdmRlY1RvcAkJCT0gMSwKKwl2ZGVjQm90dG9tCQk9IDIsCisJdmRlY1RvcEJvdHRvbQkJPSAzLAorCXZkZWNCb3R0b21Ub3AJCT0gNCwKKwl2ZGVjVG9wQm90dG9tVG9wCT0gNSwKKwl2ZGVjQm90dG9tVG9wQm90dG9tCT0gNiwKKwl2ZGVjRnJhbWVfWDIJCT0gNywKKwl2ZGVjRnJhbWVfWDMJCT0gOCwKKwl2ZGVjRnJhbWVfWDEJCT0gOSwKKwl2ZGVjRnJhbWVfWDQJCT0gMTAsCit9OworCisvKiBWYWx1ZXMgZm9yIHRoZSAnZnJhbWVfcmF0ZScgZmllbGQuICovCitlbnVtIHsKKwl2ZGVjRnJhbWVSYXRlVW5rbm93biA9IDAsCisJdmRlY0ZyYW1lUmF0ZTIzXzk3LAorCXZkZWNGcmFtZVJhdGUyNCwKKwl2ZGVjRnJhbWVSYXRlMjUsCisJdmRlY0ZyYW1lUmF0ZTI5Xzk3LAorCXZkZWNGcmFtZVJhdGUzMCwKKwl2ZGVjRnJhbWVSYXRlNTAsCisJdmRlY0ZyYW1lUmF0ZTU5Xzk0LAorCXZkZWNGcmFtZVJhdGU2MCwKK307CisKKy8qIFZhbHVlcyBmb3IgdGhlICdhc3BlY3RfcmF0aW8nIGZpZWxkLiAqLworZW51bSB7CisJdmRlY0FzcGVjdFJhdGlvVW5rbm93biA9IDAsCisJdmRlY0FzcGVjdFJhdGlvU3F1YXJlLAorCXZkZWNBc3BlY3RSYXRpbzEyXzExLAorCXZkZWNBc3BlY3RSYXRpbzEwXzExLAorCXZkZWNBc3BlY3RSYXRpbzE2XzExLAorCXZkZWNBc3BlY3RSYXRpbzQwXzMzLAorCXZkZWNBc3BlY3RSYXRpbzI0XzExLAorCXZkZWNBc3BlY3RSYXRpbzIwXzExLAorCXZkZWNBc3BlY3RSYXRpbzMyXzExLAorCXZkZWNBc3BlY3RSYXRpbzgwXzMzLAorCXZkZWNBc3BlY3RSYXRpbzE4XzExLAorCXZkZWNBc3BlY3RSYXRpbzE1XzExLAorCXZkZWNBc3BlY3RSYXRpbzY0XzMzLAorCXZkZWNBc3BlY3RSYXRpbzE2MF85OSwKKwl2ZGVjQXNwZWN0UmF0aW80XzMsCisJdmRlY0FzcGVjdFJhdGlvMTZfOSwKKwl2ZGVjQXNwZWN0UmF0aW8yMjFfMSwKKwl2ZGVjQXNwZWN0UmF0aW9PdGhlciA9IDI1NSwKK307CisKKy8qIFZhbHVlcyBmb3IgdGhlICdjb2xvdXJfcHJpbWFyaWVzJyBmaWVsZC4gKi8KK2VudW0geworCXZkZWNDb2xvdXJQcmltYXJpZXNVbmtub3duID0gMCwKKwl2ZGVjQ29sb3VyUHJpbWFyaWVzQlQ3MDksCisJdmRlY0NvbG91clByaW1hcmllc1Vuc3BlY2lmaWVkLAorCXZkZWNDb2xvdXJQcmltYXJpZXNSZXNlcnZlZCwKKwl2ZGVjQ29sb3VyUHJpbWFyaWVzQlQ0NzBfMk0gPSA0LAorCXZkZWNDb2xvdXJQcmltYXJpZXNCVDQ3MF8yQkcsCisJdmRlY0NvbG91clByaW1hcmllc1NNUFRFMTcwTSwKKwl2ZGVjQ29sb3VyUHJpbWFyaWVzU01QVEUyNDBNLAorCXZkZWNDb2xvdXJQcmltYXJpZXNHZW5lcmljRmlsbSwKK307CisKK2VudW0geworCXZkZWNSRVNPTFVUSU9OX0NVU1RPTQk9IDB4MDAwMDAwMDAsIC8qIGN1c3RvbSAqLworCXZkZWNSRVNPTFVUSU9OXzQ4MGkJPSAweDAwMDAwMDAxLCAvKiA0ODBpICovCisJdmRlY1JFU09MVVRJT05fMTA4MGkJPSAweDAwMDAwMDAyLCAvKiAxMDgwaSAoMTkyMHgxMDgwLCA2MGkpICovCisJdmRlY1JFU09MVVRJT05fTlRTQwk9IDB4MDAwMDAwMDMsIC8qIE5UU0MgKDcyMHg0ODMsIDYwaSkgKi8KKwl2ZGVjUkVTT0xVVElPTl80ODBwCT0gMHgwMDAwMDAwNCwgLyogNDgwcCAoNzIweDQ4MCwgNjBwKSAqLworCXZkZWNSRVNPTFVUSU9OXzcyMHAJPSAweDAwMDAwMDA1LCAvKiA3MjBwICgxMjgweDcyMCwgNjBwKSAqLworCXZkZWNSRVNPTFVUSU9OX1BBTDEJPSAweDAwMDAwMDA2LCAvKiBQQUxfMSAoNzIweDU3NiwgNTBpKSAqLworCXZkZWNSRVNPTFVUSU9OXzEwODBpMjUJPSAweDAwMDAwMDA3LCAvKiAxMDgwaTI1ICgxOTIweDEwODAsIDUwaSkgKi8KKwl2ZGVjUkVTT0xVVElPTl83MjBwNTAJPSAweDAwMDAwMDA4LCAvKiA3MjBwNTAgKDEyODB4NzIwLCA1MHApICovCisJdmRlY1JFU09MVVRJT05fNTc2cAk9IDB4MDAwMDAwMDksIC8qIDU3NnAgKDcyMHg1NzYsIDUwcCkgKi8KKwl2ZGVjUkVTT0xVVElPTl8xMDgwaTI5Xzk3ID0gMHgwMDAwMDAwQSwgLyogMTA4MGkgKDE5MjB4MTA4MCwgNTkuOTRpKSAqLworCXZkZWNSRVNPTFVUSU9OXzcyMHA1OV85NCAgPSAweDAwMDAwMDBCLCAvKiA3MjBwICgxMjgweDcyMCwgNTkuOTRwKSAqLworCXZkZWNSRVNPTFVUSU9OX1NEX0RWRAk9IDB4MDAwMDAwMEMsIC8qIFNEIERWRCAoNzIweDQ4MywgNjBpKSAqLworCXZkZWNSRVNPTFVUSU9OXzQ4MHA2NTYJPSAweDAwMDAwMDBELCAvKiA0ODBwICg3MjB4NDgwLCA2MHApLCBvdXRwdXQgYnVzIHdpZHRoIDggYml0LCBjbG9jayA3NC4yNU1IeiAqLworCXZkZWNSRVNPTFVUSU9OXzEwODBwMjNfOTc2ID0gMHgwMDAwMDAwRSwgLyogMTA4MHAyM185NzYgKDE5MjB4MTA4MCwgMjMuOTc2cCkgKi8KKwl2ZGVjUkVTT0xVVElPTl83MjBwMjNfOTc2ICA9IDB4MDAwMDAwMEYsIC8qIDcyMHAyM185NzYgKDEyODB4NzIwcCwgMjMuOTc2cCkgKi8KKwl2ZGVjUkVTT0xVVElPTl8yNDBwMjlfOTcgICA9IDB4MDAwMDAwMTAsIC8qIDI0MHAgKDE0NDB4MjQwLCAyOS45N3AgKSAqLworCXZkZWNSRVNPTFVUSU9OXzI0MHAzMAk9IDB4MDAwMDAwMTEsIC8qIDI0MHAgKDE0NDB4MjQwLCAzMHApICovCisJdmRlY1JFU09MVVRJT05fMjg4cDI1CT0gMHgwMDAwMDAxMiwgLyogMjg4cCAoMTQ0MHgyODhwLCAyNXApICovCisJdmRlY1JFU09MVVRJT05fMTA4MHAyOV85NyA9IDB4MDAwMDAwMTMsIC8qIDEwODBwMjlfOTcgKDE5MjB4MTA4MCwgMjkuOTdwKSAqLworCXZkZWNSRVNPTFVUSU9OXzEwODBwMzAJPSAweDAwMDAwMDE0LCAvKiAxMDgwcDMwICgxOTIweDEwODAsIDMwcCkgKi8KKwl2ZGVjUkVTT0xVVElPTl8xMDgwcDI0CT0gMHgwMDAwMDAxNSwgLyogMTA4MHAyNCAoMTkyMHgxMDgwLCAyNHApICovCisJdmRlY1JFU09MVVRJT05fMTA4MHAyNQk9IDB4MDAwMDAwMTYsIC8qIDEwODBwMjUgKDE5MjB4MTA4MCwgMjVwKSAqLworCXZkZWNSRVNPTFVUSU9OXzcyMHAyNAk9IDB4MDAwMDAwMTcsIC8qIDcyMHAyNCAoMTI4MHg3MjAsIDI1cCkgKi8KKwl2ZGVjUkVTT0xVVElPTl83MjBwMjlfOTcgID0gMHgwMDAwMDAxOCwgLyogNzIwcDI5Ljk3ICgxMjgweDcyMCwgMjkuOTdwKSAqLworCXZkZWNSRVNPTFVUSU9OXzQ4MHAyM185NzYgPSAweDAwMDAwMDE5LCAvKiA0ODBwMjMuOTc2ICg3MjAqNDgwLCAyMy45NzYpICovCisJdmRlY1JFU09MVVRJT05fNDgwcDI5Xzk3ICA9IDB4MDAwMDAwMUEsIC8qIDQ4MHAyOS45NzYgKDcyMCo0ODAsIDI5Ljk3cCkgKi8KKwl2ZGVjUkVTT0xVVElPTl81NzZwMjUJPSAweDAwMDAwMDFCLCAvKiA1NzZwMjUgKDcyMCo1NzYsIDI1cCkgKi8KKwkvKiBGb3IgWmVybyBGcmFtZSBSYXRlICovCisJdmRlY1JFU09MVVRJT05fNDgwcDAJPSAweDAwMDAwMDFDLCAvKiA0ODBwICg3MjB4NDgwLCAwcCkgKi8KKwl2ZGVjUkVTT0xVVElPTl80ODBpMAk9IDB4MDAwMDAwMUQsIC8qIDQ4MGkgKDcyMHg0ODAsIDBpKSAqLworCXZkZWNSRVNPTFVUSU9OXzU3NnAwCT0gMHgwMDAwMDAxRSwgLyogNTc2cCAoNzIweDU3NiwgMHApICovCisJdmRlY1JFU09MVVRJT05fNzIwcDAJPSAweDAwMDAwMDFGLCAvKiA3MjBwICgxMjgweDcyMCwgMHApICovCisJdmRlY1JFU09MVVRJT05fMTA4MHAwCT0gMHgwMDAwMDAyMCwgLyogMTA4MHAgKDE5MjB4MTA4MCwgMHApICovCisJdmRlY1JFU09MVVRJT05fMTA4MGkwCT0gMHgwMDAwMDAyMSwgLyogMTA4MGkgKDE5MjB4MTA4MCwgMGkpICovCit9OworCisvKiBCaXQgZGVmaW5pdGlvbnMgZm9yICdmbGFncycgZmllbGQgKi8KKyNkZWZpbmUgVkRFQ19GTEFHX0VPUwkJCQkoMHgwMDA0KQorCisjZGVmaW5lIFZERUNfRkxBR19GUkFNRQkJCQkoMHgwMDAwKQorI2RlZmluZSBWREVDX0ZMQUdfRklFTERQQUlSCQkJKDB4MDAwOCkKKyNkZWZpbmUgVkRFQ19GTEFHX1RPUEZJRUxECQkJKDB4MDAxMCkKKyNkZWZpbmUgVkRFQ19GTEFHX0JPVFRPTUZJRUxECQkJKDB4MDAxOCkKKworI2RlZmluZSBWREVDX0ZMQUdfUFJPR1JFU1NJVkVfU1JDCQkoMHgwMDAwKQorI2RlZmluZSBWREVDX0ZMQUdfSU5URVJMQUNFRF9TUkMJCSgweDAwMjApCisjZGVmaW5lIFZERUNfRkxBR19VTktOT1dOX1NSQwkJCSgweDAwNDApCisKKyNkZWZpbmUgVkRFQ19GTEFHX0JPVFRPTV9GSVJTVAkJCSgweDAwODApCisjZGVmaW5lIFZERUNfRkxBR19MQVNUX1BJQ1RVUkUJCQkoMHgwMTAwKQorCisjZGVmaW5lIFZERUNfRkxBR19QSUNUVVJFX01FVEFfREFUQV9QUkVTRU5UCSgweDQwMDAwKQorCisjZW5kaWYgLyogX1dJTjMyIHx8IF9XSU42NCAqLworCitlbnVtIF9CQ19PVVRQVVRfRk9STUFUIHsKKwlNT0RFNDIwCQkJCT0gMHgwLAorCU1PREU0MjJfWVVZMgkJCT0gMHgxLAorCU1PREU0MjJfVVlWWQkJCT0gMHgyLAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgX0JDX1BJQ19JTkZPX0JMT0NLIHsKKwkvKiBDb21tb24gZmllbGRzLiAqLworCXVpbnQ2NF90CXRpbWVTdGFtcDsJLyogVGltZXN0YW1wICovCisJdWludDMyX3QJcGljdHVyZV9udW1iZXI7CS8qIE9yZGluYWwgZGlzcGxheSBudW1iZXIgICovCisJdWludDMyX3QJd2lkdGg7CQkvKiBwaXhlbHMJICAgICovCisJdWludDMyX3QJaGVpZ2h0OwkJLyogcGl4ZWxzCSAgICAqLworCXVpbnQzMl90CWNocm9tYV9mb3JtYXQ7CS8qIDB4NDIwLCAweDQyMiBvciAweDQ0NCAqLworCXVpbnQzMl90CXB1bGxkb3duOworCXVpbnQzMl90CWZsYWdzOworCXVpbnQzMl90CWZyYW1lX3JhdGU7CisJdWludDMyX3QJYXNwZWN0X3JhdGlvOworCXVpbnQzMl90CWNvbG91cl9wcmltYXJpZXM7CisJdWludDMyX3QJcGljdHVyZV9tZXRhX3BheWxvYWQ7CisJdWludDMyX3QJc2Vzc19udW07CisJdWludDMyX3QJeWNvbTsKKwl1aW50MzJfdAljdXN0b21fYXNwZWN0X3JhdGlvX3dpZHRoX2hlaWdodDsKKwl1aW50MzJfdAluX2Ryb3A7CS8qIG51bWJlciBvZiBub24tcmVmZXJlbmNlIGZyYW1lcyByZW1haW5pbmcgdG8gYmUgZHJvcHBlZCAqLworCisJLyogUHJvdG9jb2wtc3BlY2lmaWMgZXh0ZW5zaW9ucy4gKi8KKwl1bmlvbiB7CisJCUJDX1BJQl9FWFRfSDI2NAloMjY0OworCQlCQ19QSUJfRVhUX01QRUcJbXBlZzsKKwkJQkNfUElCX0VYVF9WQzEJIHZjMTsKKwl9IG90aGVyOworCit9IEJDX1BJQ19JTkZPX0JMT0NLLCAqUEJDX1BJQ19JTkZPX0JMT0NLOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqICAgIFByb2NPdXQgSW5mbwkJCQkJKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogT3B0aW9uYWwgZmxhZ3MgZm9yIFByb2NPdXQgSW50ZXJmYWNlLiovCitlbnVtIF9QT1VUX09QVElPTkFMX0lOX0ZMQUdTX3sKKwkvKiBGbGFncyBmcm9tIEFwcCB0byBEZXZpY2UgKi8KKwlCQ19QT1VUX0ZMQUdTX1lWMTIJICA9IDB4MDEsCS8qIENvcHkgRGF0YSBpbiBZVjEyIGZvcm1hdCAqLworCUJDX1BPVVRfRkxBR1NfU1RSSURFCSAgPSAweDAyLAkvKiBTdHJpZGUgc2l6ZSBpcyB2YWxpZC4gKi8KKwlCQ19QT1VUX0ZMQUdTX1NJWkUJICA9IDB4MDQsCS8qIFRha2Ugc2l6ZSBpbmZvcm1hdGlvbiBmcm9tIEFwcGxpY2F0aW9uICovCisJQkNfUE9VVF9GTEFHU19JTlRFUkxBQ0VEICA9IDB4MDgsCS8qIGNvcHkgb25seSBoYWxmIHRoZSBieXRlcyAqLworCUJDX1BPVVRfRkxBR1NfSU5URVJMRUFWRUQgPSAweDEwLAkvKiBpbnRlcmxlYXZlZCBmcmFtZSAqLworCisJLyogRmxhZ3MgZnJvbSBEZXZpY2UgdG8gQVBQICovCisJQkNfUE9VVF9GTEFHU19GTVRfQ0hBTkdFICA9IDB4MTAwMDAsCS8qIERhdGEgaXMgbm90IFZBTElEIHdoZW4gdGhpcyBmbGFnIGlzIHNldCAqLworCUJDX1BPVVRfRkxBR1NfUElCX1ZBTElECSAgPSAweDIwMDAwLAkvKiBQSUIgSW5mb3JtYXRpb24gdmFsaWQgKi8KKwlCQ19QT1VUX0ZMQUdTX0VOQ1JZUFRFRAkgID0gMHg0MDAwMCwJLyogRGF0YSBpcyBlbmNyeXB0ZWQuICovCisJQkNfUE9VVF9GTEFHU19GTERfQk9UCSAgPSAweDgwMDAwLAkvKiBCb3R0b20gRmllbGQgZGF0YSAqLworfTsKKworI2lmIGRlZmluZWQoX19LRVJORUxfXykgfHwgZGVmaW5lZChfX0xJTlVYX1VTRVJfXykKK3R5cGVkZWYgQkNfU1RBVFVTKCpkdHNfcG91dF9jYWxsYmFjaykodm9pZCAgKnNobmQsIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsIHVpbnQzMl90IHN0cmlkZSwgdm9pZCAqcE91dCk7CisjZWxzZQordHlwZWRlZiBCQ19TVEFUVVMoKmR0c19wb3V0X2NhbGxiYWNrKSh2b2lkICAqc2huZCwgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwgdWludDMyX3Qgc3RyaWRlLCBzdHJ1Y3QgX0JDX0RUU19QUk9DX09VVCAqcE91dCk7CisjZW5kaWYKKworLyogTGluZSAyMSBDbG9zZWQgQ2FwdGlvbiAqLworLyogVXNlciBEYXRhICovCisjZGVmaW5lIE1BWF9VRF9TSVpFCQkxNzkyCS8qIDE5MjAgLSAxMjggKi8KKwordHlwZWRlZiBzdHJ1Y3QgX0JDX0RUU19QUk9DX09VVCB7CisJdWludDhfdAkJKllidWZmOwkJCS8qIENhbGxlciBTdXBwbGllZCBidWZmZXIgZm9yIFkgZGF0YSAqLworCXVpbnQzMl90CVlidWZmU3o7CQkvKiBDYWxsZXIgU3VwcGxpZWQgWSBidWZmZXIgc2l6ZSAqLworCXVpbnQzMl90CVlCdWZmRG9uZVN6OwkJLyogVHJhbnNmZXJyZWQgWSBkYXRhc2l6ZSAqLworCisJdWludDhfdAkJKlVWYnVmZjsJCS8qIENhbGxlciBTdXBwbGllZCBidWZmZXIgZm9yIFVWIGRhdGEgKi8KKwl1aW50MzJfdAlVVmJ1ZmZTejsJCS8qIENhbGxlciBTdXBwbGllZCBVViBidWZmZXIgc2l6ZSAqLworCXVpbnQzMl90CVVWQnVmZkRvbmVTejsJCS8qIFRyYW5zZmVycmVkIFVWIGRhdGEgc2l6ZSAqLworCisJdWludDMyX3QJU3RyaWRlU3o7CQkvKiBDYWxsZXIgc3VwcGxpZWQgU3RyaWRlIFNpemUgKi8KKwl1aW50MzJfdAlQb3V0RmxhZ3M7CQkvKiBDYWxsIElOIEZsYWdzICovCisKKwl1aW50MzJfdAlkaXNjQ250OwkJLyogUGljdHVyZSBkaXNjb250aW51aXR5IGNvdW50ICovCisKKwlCQ19QSUNfSU5GT19CTE9DSyBQaWNJbmZvOwkJLyogUGljdHVyZSBJbmZvcm1hdGlvbiBCbG9jayBEYXRhICovCisKKwkvKiBMaW5lIDIxIENsb3NlZCBDYXB0aW9uICovCisJLyogVXNlciBEYXRhICovCisJdWludDMyX3QJVXNlckRhdGFTejsKKwl1aW50OF90CQlVc2VyRGF0YVtNQVhfVURfU0laRV07CisKKwl2b2lkCQkqaG5kOworCWR0c19wb3V0X2NhbGxiYWNrIEFwcENhbGxCYWNrOworCXVpbnQ4X3QJCURyb3BGcmFtZXM7CisJdWludDhfdAkJYjQyMk1vZGU7CQkvKiBQaWN0dXJlIG91dHB1dCBNb2RlICovCisJdWludDhfdAkJYlBpYkVuYzsJCS8qIFBJQiBlbmNyeXB0ZWQgKi8KKwl1aW50OF90CQliUmV2ZXJ0U2NyYW1ibGU7CisKK30gQkNfRFRTX1BST0NfT1VUOworCit0eXBlZGVmIHN0cnVjdCBfQkNfRFRTX1NUQVRVUyB7CisJdWludDhfdAkJUmVhZHlMaXN0Q291bnQ7CS8qIE51bWJlciBvZiBmcmFtZXMgaW4gcmVhZHkgbGlzdCAocmVwb3J0ZWQgYnkgZHJpdmVyKSAqLworCXVpbnQ4X3QJCUZyZWVMaXN0Q291bnQ7CS8qIE51bWJlciBvZiBmcmFtZSBidWZmZXJzIGZyZWUuICAocmVwb3J0ZWQgYnkgZHJpdmVyKSAqLworCXVpbnQ4X3QJCVBvd2VyU3RhdGVDaGFuZ2U7IC8qIE51bWJlciBvZiBhY3RpdmUgc3RhdGUgcG93ZXIgdHJhbnNpdGlvbnMgKHJlcG9ydGVkIGJ5IGRyaXZlcikgKi8KKwl1aW50OF90CQlyZXNlcnZlZF9bMV07CisKKwl1aW50MzJfdAlGcmFtZXNEcm9wcGVkOwkvKiBOdW1iZXIgb2YgZnJhbWVzIGRyb3BwZWQuICAocmVwb3J0ZWQgYnkgRElMKSAqLworCXVpbnQzMl90CUZyYW1lc0NhcHR1cmVkOwkvKiBOdW1iZXIgb2YgZnJhbWVzIGNhcHR1cmVkLiAocmVwb3J0ZWQgYnkgRElMKSAqLworCXVpbnQzMl90CUZyYW1lc1JlcGVhdGVkOwkvKiBOdW1iZXIgb2YgZnJhbWVzIHJlcGVhdGVkLiAocmVwb3J0ZWQgYnkgRElMKSAqLworCisJdWludDMyX3QJSW5wdXRDb3VudDsJLyogVGltZXMgY29tcHJlc3NlZCB2aWRlbyBoYXMgYmVlbiBzZW50IHRvIHRoZSBIVy4KKwkJCQkJICogaS5lLiBTdWNjZXNzZnVsIER0c1Byb2NJbnB1dCgpIGNhbGxzIChyZXBvcnRlZCBieSBESUwpICovCisJdWludDY0X3QJSW5wdXRUb3RhbFNpemU7CS8qIEFtb3VudCBvZiBjb21wcmVzc2VkIHZpZGVvIHRoYXQgaGFzIGJlZW4gc2VudCB0byB0aGUgSFcuCisJCQkJCSAqIChyZXBvcnRlZCBieSBESUwpICovCisJdWludDMyX3QJSW5wdXRCdXN5Q291bnQ7CS8qIFRpbWVzIGNvbXByZXNzZWQgdmlkZW8gaGFzIGF0dGVtcHRlZCB0byBiZSBzZW50IHRvIHRoZSBIVworCQkJCQkgKiBidXQgdGhlIGlucHV0IEZJRk8gd2FzIGZ1bGwuIChyZXBvcnRlZCBieSBESUwpICovCisKKwl1aW50MzJfdAlQSUJNaXNzQ291bnQ7CS8qIEFtb3VudCBvZiB0aW1lcyBhIFBJQiBpcyBpbnZhbGlkLiAocmVwb3J0ZWQgYnkgRElMKSAqLworCisJdWludDMyX3QJY3BiRW1wdHlTaXplOwkvKiBzdXBwb3J0ZWQgb25seSBmb3IgSC4yNjQsIHNwZWNpZmljYWxseSBjaGFuZ2VkIGZvcgorCQkJCQkgKiBBZG9iZS4gUmVwb3J0IHNpemUgb2YgQ1BCIGJ1ZmZlciBhdmFpbGFibGUuCisJCQkJCSAqIFJlcG9ydGVkIGJ5IERJTCAqLworCXVpbnQ2NF90CU5leHRUaW1lU3RhbXA7CS8qIFRpbWVTdGFtcCBvZiB0aGUgbmV4dCBwaWN0dXJlIHRoYXQgd2lsbCBiZSByZXR1cm5lZAorCQkJCQkgKiBieSBhIGNhbGwgdG8gUHJvY091dHB1dC4gQWRkZWQgZm9yIEFkb2JlLiBSZXBvcnRlZAorCQkJCQkgKiBiYWNrIGZyb20gdGhlIGRyaXZlciAqLworCXVpbnQ4X3QJCXJlc2VydmVkX19bMTZdOworCit9IEJDX0RUU19TVEFUVVM7CisKKyNkZWZpbmUgQkNfU1dBUDMyKF92KQkJCVwKKwkoKCgoX3YpICYgMHhGRjAwMDAwMCk+PjI0KXwJXAorCSAgKCgoX3YpICYgMHgwMEZGMDAwMCk+PjgpfAlcCisJICAoKChfdikgJiAweDAwMDBGRjAwKTw8OCl8CVwKKwkgICgoKF92KSAmIDB4MDAwMDAwRkYpPDwyNCkpCisKKyNkZWZpbmUgV01fQUdFTlRfVFJBWUlDT05fREVDT0RFUl9PUEVOCTEwMDAxCisjZGVmaW5lIFdNX0FHRU5UX1RSQVlJQ09OX0RFQ09ERVJfQ0xPU0UJMTAwMDIKKyNkZWZpbmUgV01fQUdFTlRfVFJBWUlDT05fREVDT0RFUl9TVEFSVAkxMDAwMworI2RlZmluZSBXTV9BR0VOVF9UUkFZSUNPTl9ERUNPREVSX1NUT1AJMTAwMDQKKyNkZWZpbmUgV01fQUdFTlRfVFJBWUlDT05fREVDT0RFUl9SVU4JMTAwMDUKKyNkZWZpbmUgV01fQUdFTlRfVFJBWUlDT05fREVDT0RFUl9QQVVTRQkxMDAwNgorCisKKyNlbmRpZgkvKiBfQkNfRFRTX0RFRlNfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvYmNfZHRzX2dsb2JfbG54LmggYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2JjX2R0c19nbG9iX2xueC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzMTI1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2JjX2R0c19nbG9iX2xueC5oCkBAIC0wLDAgKzEsMjk5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodChjKSAyMDA2LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKgorICogIE5hbWU6IGJjX2R0c19nbG9iX2xueC5oCisgKgorICogIERlc2NyaXB0aW9uOiBXcmFwcGVyIHRvIFdpbmRvd3MgZHRzX2dsb2IuaCBmb3IgTGluay1MaW51eCB1c2FnZS4KKyAqCQkgVGhlIGlkZWEgaXMgdG8gZGVmaW5lIGFkZGl0aW9uYWwgTGludXggcmVsYXRlZCBkZWZzCisgKgkJIGluIHRoaXMgZmlsZSB0byBhdm9pZCBjaGFuZ2VzIHRvIGV4aXN0aW5nIFdpbmRvd3MKKyAqCQkgZ2xvYiBmaWxlLgorICoKKyAqICBBVQorICoKKyAqICBISVNUT1JZOgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBoZWFkZXIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBoZWFkZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGhlYWRlci4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9CQ19EVFNfR0xPQl9MTlhfSF8KKyNkZWZpbmUgX0JDX0RUU19HTE9CX0xOWF9IXworCisjaWZkZWYgX19MSU5VWF9VU0VSX18KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisKKyNkZWZpbmUgRFJWSUZMSUJfSU5UX0FQSQorCisjZW5kaWYKKworI2luY2x1ZGUgImJjX2R0c19kZWZzLmgiCisjaW5jbHVkZSAiYmNtXzcwMDEyX3JlZ3MuaCIJLyogTGluayBSZWdpc3RlciBkZWZzICovCisKKyNkZWZpbmUgQ1JZU1RBTEhEX0FQSV9OQU1FCSJjcnlzdGFsaGQiCisjZGVmaW5lIENSWVNUQUxIRF9BUElfREVWX05BTUUJIi9kZXYvY3J5c3RhbGhkIgorCisvKgorICogVGhlc2UgYXJlIFNXIHN0YWNrIHR1bmFibGUgcGFyYW1ldGVycyBzaGFyZWQKKyAqIGJldHdlZW4gdGhlIGRyaXZlciBhbmQgdGhlIGFwcGxpY2F0aW9uLgorICovCitlbnVtIF9CQ19EVFNfR0xPQkFMUyB7CisJQkNfTUFYX0ZXX0NNRF9CVUZGX1NaCT0gMHg0MCwJCS8qIEZXIHBhc3N0aHJvdWdoIGNtZC9yc3AgYnVmZmVyIHNpemUgKi8KKwlQQ0lfQ0ZHX1NJWkUJCT0gMjU2LAkJLyogUENJIGNvbmZpZyBzaXplIGJ1ZmZlciAqLworCUJDX0lPQ1RMX0RBVEFfUE9PTF9TSVpFCT0gOCwJCS8qIEJDX0lPQ1RMX0RBVEEgUG9vbCBzaXplICovCisJQkNfTElOS19NQVhfT1BFTlMJPSAzLAkJLyogTWF4aW11bSBzaW11bHRhbmVvdXMgb3BlbnMqLworCUJDX0xJTktfTUFYX1NHTFMJPSAxMDI0LAkJLyogTWF4aW11bSBTRyBlbGVtZW50cyA0TS80SyAqLworCUJDX1RYX0xJU1RfQ05UCQk9IDIsCQkvKiBNYXggVHggRE1BIFJpbmdzICovCisJQkNfUlhfTElTVF9DTlQJCT0gOCwJCS8qIE1heCBSeCBETUEgUmluZ3MqLworCUJDX1BST0NfT1VUUFVUX1RJTUVPVVQJPSAzMDAwLAkJLyogTWlsbGlzZWNvbmRzICovCisJQkNfSU5GSUZPX1RIUkVTSE9MRAk9IDB4MTAwMDAsCit9OworCit0eXBlZGVmIHN0cnVjdCBfQkNfQ01EX1JFR19BQ0MgeworCXVpbnQzMl90CQlPZmZzZXQ7CisJdWludDMyX3QJCVZhbHVlOworfSBCQ19DTURfUkVHX0FDQzsKKwordHlwZWRlZiBzdHJ1Y3QgX0JDX0NNRF9ERVZfTUVNIHsKKwl1aW50MzJfdAkJU3RhcnRPZmY7CisJdWludDMyX3QJCU51bUR3b3JkczsKKwl1aW50MzJfdAkJUnNyZDsKK30gQkNfQ01EX0RFVl9NRU07CisKKy8qIEZXIFBhc3N0aHJvdWdoIGNvbW1hbmQgc3RydWN0dXJlICovCitlbnVtIF9iY19md19jbWRfZmxhZ3MgeworCUJDX0ZXX0NNRF9GTEFHU19OT05FCT0gMCwKKwlCQ19GV19DTURfUElCX1FTCT0gMHgwMSwKK307CisKK3R5cGVkZWYgc3RydWN0IF9CQ19GV19DTUQgeworCXVpbnQzMl90CQljbWRbQkNfTUFYX0ZXX0NNRF9CVUZGX1NaXTsKKwl1aW50MzJfdAkJcnNwW0JDX01BWF9GV19DTURfQlVGRl9TWl07CisJdWludDMyX3QJCWZsYWdzOworCXVpbnQzMl90CQlhZGRfZGF0YTsKK30gQkNfRldfQ01ELCAqUEJDX0ZXX0NNRDsKKwordHlwZWRlZiBzdHJ1Y3QgX0JDX0hXX1RZUEUgeworCXVpbnQxNl90CQlQY2lEZXZJZDsKKwl1aW50MTZfdAkJUGNpVmVuSWQ7CisJdWludDhfdAkJCUh3UmV2OworCXVpbnQ4X3QJCQlBbGlnblszXTsKK30gQkNfSFdfVFlQRTsKKwordHlwZWRlZiBzdHJ1Y3QgX0JDX1BDSV9DRkcgeworCXVpbnQzMl90CQlTaXplOworCXVpbnQzMl90CQlPZmZzZXQ7CisJdWludDhfdAkJCXBjaV9jZmdfc3BhY2VbUENJX0NGR19TSVpFXTsKK30gQkNfUENJX0NGRzsKKwordHlwZWRlZiBzdHJ1Y3QgX0JDX1ZFUlNJT05fSU5GT18geworCXVpbnQ4X3QJCQlEcml2ZXJNYWpvcjsKKwl1aW50OF90CQkJRHJpdmVyTWlub3I7CisJdWludDE2X3QJCURyaXZlclJldmlzaW9uOworfSBCQ19WRVJTSU9OX0lORk87CisKK3R5cGVkZWYgc3RydWN0IF9CQ19TVEFSVF9SWF9DQVBfIHsKKwl1aW50MzJfdAkJUnNyZDsKKwl1aW50MzJfdAkJU3RhcnREZWxpdmVyeVRoc2g7CisJdWludDMyX3QJCVBhdXNlVGhzaDsKKwl1aW50MzJfdAkJUmVzdW1lVGhzaDsKK30gQkNfU1RBUlRfUlhfQ0FQOworCit0eXBlZGVmIHN0cnVjdCBfQkNfRkxVU0hfUlhfQ0FQXyB7CisJdWludDMyX3QJCVJzcmQ7CisJdWludDMyX3QJCWJEaXNjYXJkT25seTsKK30gQkNfRkxVU0hfUlhfQ0FQOworCit0eXBlZGVmIHN0cnVjdCBfQkNfRFRTX1NUQVRTIHsKKwl1aW50OF90CQkJZHJ2UkxMOworCXVpbnQ4X3QJCQlkcnZGTEw7CisJdWludDhfdAkJCWVvc0RldGVjdGVkOworCXVpbnQ4X3QJCQlwd3Jfc3RhdGVfY2hhbmdlOworCisJLyogU3RhdHMgZnJvbSBBcHAgKi8KKwl1aW50MzJfdAkJb3BGcmFtZURyb3BwZWQ7CisJdWludDMyX3QJCW9wRnJhbWVDYXB0dXJlZDsKKwl1aW50MzJfdAkJaXBTYW1wbGVDbnQ7CisJdWludDY0X3QJCWlwVG90YWxTaXplOworCXVpbnQzMl90CQlyZXB0ZEZyYW1lczsKKwl1aW50MzJfdAkJcGF1c2VDb3VudDsKKwl1aW50MzJfdAkJcGliTWlzc2VzOworCXVpbnQzMl90CQlkaXNjQ291bnRlcjsKKworCS8qIFN0YXRzIGZyb20gRHJpdmVyICovCisJdWludDMyX3QJCVR4Rmlmb0JzeUNudDsKKwl1aW50MzJfdAkJaW50Q291bnQ7CisJdWludDMyX3QJCURydklnbkludHJDbnQ7CisJdWludDMyX3QJCURydlRvdGFsRnJtRHJvcHBlZDsKKwl1aW50MzJfdAkJRHJ2VG90YWxIV0VycnM7CisJdWludDMyX3QJCURydlRvdGFsUElCRmx1c2hDbnQ7CisJdWludDMyX3QJCURydlRvdGFsRnJtQ2FwdHVyZWQ7CisJdWludDMyX3QJCURydlBJQk1pc3NlczsKKwl1aW50MzJfdAkJRHJ2UGF1c2VUaW1lOworCXVpbnQzMl90CQlEcnZSZXBlYXRlZEZybXM7CisJdWludDMyX3QJCXJlczFbMTNdOworCit9IEJDX0RUU19TVEFUUzsKKwordHlwZWRlZiBzdHJ1Y3QgX0JDX1BST0NfSU5QVVRfIHsKKwl1aW50OF90CQkJKnBEbWFCdWZmOworCXVpbnQzMl90CQlCdWZmU3o7CisJdWludDhfdAkJCU1hcHBlZDsKKwl1aW50OF90CQkJRW5jcnlwdGVkOworCXVpbnQ4X3QJCQlSc3JkWzJdOworCXVpbnQzMl90CQlEcmFtT2Zmc2V0OwkvKiBGb3IgZGVidWcgdXNlIG9ubHkgKi8KK30gQkNfUFJPQ19JTlBVVCwgKlBCQ19QUk9DX0lOUFVUOworCit0eXBlZGVmIHN0cnVjdCBfQkNfREVDX1lVVl9CVUZGUyB7CisJdWludDMyX3QJCWI0MjJNb2RlOworCXVpbnQ4X3QJCQkqWXV2QnVmZjsKKwl1aW50MzJfdAkJWXV2QnVmZlN6OworCXVpbnQzMl90CQlVVmJ1ZmZPZmZzZXQ7CisJdWludDMyX3QJCVlCdWZmRG9uZVN6OworCXVpbnQzMl90CQlVVkJ1ZmZEb25lU3o7CisJdWludDMyX3QJCVJlZkNudDsKK30gQkNfREVDX1lVVl9CVUZGUzsKKworZW51bSBfREVDT1VUX0NPTVBMRVRJT05fRkxBR1N7CisJQ09NUF9GTEFHX05PX0lORk8JPSAweDAwLAorCUNPTVBfRkxBR19GTVRfQ0hBTkdFCT0gMHgwMSwKKwlDT01QX0ZMQUdfUElCX1ZBTElECT0gMHgwMiwKKwlDT01QX0ZMQUdfREFUQV9WQUxJRAk9IDB4MDQsCisJQ09NUF9GTEFHX0RBVEFfRU5DCT0gMHgwOCwKKwlDT01QX0ZMQUdfREFUQV9CT1QJPSAweDEwLAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgX0JDX0RFQ19PVVRfQlVGRnsKKwlCQ19ERUNfWVVWX0JVRkZTCU91dFB1dEJ1ZmZzOworCUJDX1BJQ19JTkZPX0JMT0NLCVBpYkluZm87CisJdWludDMyX3QJCUZsYWdzOworCXVpbnQzMl90CQlCYWRGckNudDsKK30gQkNfREVDX09VVF9CVUZGOworCit0eXBlZGVmIHN0cnVjdCBfQkNfTk9USUZZX01PREUgeworCXVpbnQzMl90CQlNb2RlOworCXVpbnQzMl90CQlSc3ZyWzNdOworfSBCQ19OT1RJRllfTU9ERTsKKwordHlwZWRlZiBzdHJ1Y3QgX0JDX0NMT0NLIHsKKwl1aW50MzJfdAkJY2xrOworCXVpbnQzMl90CQlSc3ZyWzNdOworfSBCQ19DTE9DSzsKKwordHlwZWRlZiBzdHJ1Y3QgX0JDX0lPQ1RMX0RBVEEgeworCUJDX1NUQVRVUwkJUmV0U3RzOworCXVpbnQzMl90CQlJb2N0bERhdGFTejsKKwl1aW50MzJfdAkJVGltZW91dDsKKwl1bmlvbiB7CisJCUJDX0NNRF9SRUdfQUNDCQlyZWdBY2M7CisJCUJDX0NNRF9ERVZfTUVNCQlkZXZNZW07CisJCUJDX0ZXX0NNRAkJZndDbWQ7CisJCUJDX0hXX1RZUEUJCWh3VHlwZTsKKwkJQkNfUENJX0NGRwkJcGNpQ2ZnOworCQlCQ19WRVJTSU9OX0lORk8JCVZlckluZm87CisJCUJDX1BST0NfSU5QVVQJCVByb2NJbnB1dDsKKwkJQkNfREVDX1lVVl9CVUZGUwlSeEJ1ZmZzOworCQlCQ19ERUNfT1VUX0JVRkYJCURlY091dERhdGE7CisJCUJDX1NUQVJUX1JYX0NBUAkJUnhDYXA7CisJCUJDX0ZMVVNIX1JYX0NBUAkJRmx1c2hSeENhcDsKKwkJQkNfRFRTX1NUQVRTCQlkcnZTdGF0OworCQlCQ19OT1RJRllfTU9ERQkJTm90aWZ5TW9kZTsKKwkJQkNfQ0xPQ0sJCQljbG9ja1ZhbHVlOworCX0gdTsKKwlzdHJ1Y3QgX0JDX0lPQ1RMX0RBVEEJKm5leHQ7Cit9IEJDX0lPQ1RMX0RBVEE7CisKK3R5cGVkZWYgZW51bSBfQkNfRFJWX0NNRHsKKwlEUlZfQ01EX1ZFUlNJT04gPSAwLAkvKiBHZXQgU1cgdmVyc2lvbiAqLworCURSVl9DTURfR0VUX0hXVFlQRSwJLyogR2V0IEhXIHZlcnNpb24gYW5kIHR5cGUgRG96ZXIvVGFuayAqLworCURSVl9DTURfUkVHX1JELAkJLyogUmVhZCBEZXZpY2UgUmVnaXN0ZXIgKi8KKwlEUlZfQ01EX1JFR19XUiwJCS8qIFdyaXRlIERldmljZSBSZWdpc3RlciAqLworCURSVl9DTURfRlBHQV9SRCwJLyogUmVhZCBGUEdBIFJlZ2lzdGVyICovCisJRFJWX0NNRF9GUEdBX1dSLAkvKiBXcnRpZSBGUEdBIFJlaXN0ZXIgKi8KKwlEUlZfQ01EX01FTV9SRCwJCS8qIFJlYWQgRGV2aWNlIE1lbW9yeSAqLworCURSVl9DTURfTUVNX1dSLAkJLyogV3JpdGUgRGV2aWNlIE1lbW9yeSAqLworCURSVl9DTURfUkRfUENJX0NGRywJLyogUmVhZCBQQ0kgQ29uZmlnIFNwYWNlICovCisJRFJWX0NNRF9XUl9QQ0lfQ0ZHLAkvKiBXcml0ZSB0aGUgUENJIENvbmZpZ3VyYXRpb24gU3BhY2UqLworCURSVl9DTURfRldfRE9XTkxPQUQsCS8qIERvd25sb2FkIEZpcm13YXJlICovCisJRFJWX0lTU1VFX0ZXX0NNRCwJLyogSXNzdWUgRlcgQ21kIChwYXNzIHRocm91Z2ggbW9kZSkgKi8KKwlEUlZfQ01EX1BST0NfSU5QVVQsCS8qIFByb2Nlc3MgSW5wdXQgU2FtcGxlICovCisJRFJWX0NNRF9BRERfUlhCVUZGUywJLyogQWRkIFJ4IHNpZGUgYnVmZmVycyB0byBkcml2ZXIgcG9vbCAqLworCURSVl9DTURfRkVUQ0hfUlhCVUZGLAkvKiBHZXQgUnggRE1BZWQgYnVmZmVyICovCisJRFJWX0NNRF9TVEFSVF9SWF9DQVAsCS8qIFN0YXJ0IFJ4IEJ1ZmZlciBDYXB0dXJlICovCisJRFJWX0NNRF9GTFVTSF9SWF9DQVAsCS8qIFN0b3AgdGhlIGNhcHR1cmUgZm9yIG5vdy4uLndlIHdpbGwgZW5oYW5jZSB0aGlzIGxhdGVyKi8KKwlEUlZfQ01EX0dFVF9EUlZfU1RBVCwJLyogR2V0IERyaXZlciBJbnRlcm5hbCBTdGF0aXN0aWNzICovCisJRFJWX0NNRF9SU1RfRFJWX1NUQVQsCS8qIFJlc2V0IERyaXZlciBJbnRlcm5hbCBTdGF0aXN0aWNzICovCisJRFJWX0NNRF9OT1RJRllfTU9ERSwJLyogTm90aWZ5IHRoZSBNb2RlIHRvIGRyaXZlciBpbiB3aGljaCB0aGUgYXBwbGljYXRpb24gaXMgT3BlcmF0aW5nKi8KKwlEUlZfQ01EX0NIQU5HRV9DTE9DSywJLyogQ2hhbmdlIHRoZSBjb3JlIGNsb2NrIHRvIGVpdGhlciBzYXZlIHBvd2VyIG9yIGltcHJvdmUgcGVyZm9ybWFuY2UgKi8KKworCS8qIE1VU1QgYmUgdGhlIGxhc3Qgb25lLi4gKi8KKwlEUlZfQ01EX0VORCwJCQkvKiBFbmQgb2YgdGhlIExpc3QuLiAqLworfSBCQ19EUlZfQ01EOworCisjZGVmaW5lIEJDX0lPQ19CQVNFCQknYicKKyNkZWZpbmUgQkNfSU9DX1ZPSUQJCV9JT0NfTk9ORQorI2RlZmluZSBCQ19JT0NfSU9XUihuciwgdHlwZSkJX0lPV1IoQkNfSU9DX0JBU0UsIG5yLCB0eXBlKQorI2RlZmluZSBCQ19JT0NUTF9NQgkJQkNfSU9DVExfREFUQQorCisjZGVmaW5lCUJDTV9JT0NfR0VUX1ZFUlNJT04JQkNfSU9DX0lPV1IoRFJWX0NNRF9WRVJTSU9OLCBCQ19JT0NUTF9NQikKKyNkZWZpbmUJQkNNX0lPQ19HRVRfSFdUWVBFCUJDX0lPQ19JT1dSKERSVl9DTURfR0VUX0hXVFlQRSwgQkNfSU9DVExfTUIpCisjZGVmaW5lCUJDTV9JT0NfUkVHX1JECQlCQ19JT0NfSU9XUihEUlZfQ01EX1JFR19SRCwgQkNfSU9DVExfTUIpCisjZGVmaW5lCUJDTV9JT0NfUkVHX1dSCQlCQ19JT0NfSU9XUihEUlZfQ01EX1JFR19XUiwgQkNfSU9DVExfTUIpCisjZGVmaW5lCUJDTV9JT0NfTUVNX1JECQlCQ19JT0NfSU9XUihEUlZfQ01EX01FTV9SRCwgQkNfSU9DVExfTUIpCisjZGVmaW5lCUJDTV9JT0NfTUVNX1dSCQlCQ19JT0NfSU9XUihEUlZfQ01EX01FTV9XUiwgQkNfSU9DVExfTUIpCisjZGVmaW5lIEJDTV9JT0NfRlBHQV9SRAkJQkNfSU9DX0lPV1IoRFJWX0NNRF9GUEdBX1JELCBCQ19JT0NUTF9NQikKKyNkZWZpbmUgQkNNX0lPQ19GUEdBX1dSCQlCQ19JT0NfSU9XUihEUlZfQ01EX0ZQR0FfV1IsIEJDX0lPQ1RMX01CKQorI2RlZmluZQlCQ01fSU9DX1JEX1BDSV9DRkcJQkNfSU9DX0lPV1IoRFJWX0NNRF9SRF9QQ0lfQ0ZHLCBCQ19JT0NUTF9NQikKKyNkZWZpbmUJQkNNX0lPQ19XUl9QQ0lfQ0ZHCUJDX0lPQ19JT1dSKERSVl9DTURfV1JfUENJX0NGRywgQkNfSU9DVExfTUIpCisjZGVmaW5lIEJDTV9JT0NfUFJPQ19JTlBVVAlCQ19JT0NfSU9XUihEUlZfQ01EX1BST0NfSU5QVVQsIEJDX0lPQ1RMX01CKQorI2RlZmluZSBCQ01fSU9DX0FERF9SWEJVRkZTCUJDX0lPQ19JT1dSKERSVl9DTURfQUREX1JYQlVGRlMsIEJDX0lPQ1RMX01CKQorI2RlZmluZSBCQ01fSU9DX0ZFVENIX1JYQlVGRglCQ19JT0NfSU9XUihEUlZfQ01EX0ZFVENIX1JYQlVGRiwgQkNfSU9DVExfTUIpCisjZGVmaW5lCUJDTV9JT0NfRldfQ01ECQlCQ19JT0NfSU9XUihEUlZfSVNTVUVfRldfQ01ELCBCQ19JT0NUTF9NQikKKyNkZWZpbmUJQkNNX0lPQ19TVEFSVF9SWF9DQVAJQkNfSU9DX0lPV1IoRFJWX0NNRF9TVEFSVF9SWF9DQVAsIEJDX0lPQ1RMX01CKQorI2RlZmluZSBCQ01fSU9DX0ZMVVNIX1JYX0NBUAlCQ19JT0NfSU9XUihEUlZfQ01EX0ZMVVNIX1JYX0NBUCwgQkNfSU9DVExfTUIpCisjZGVmaW5lIEJDTV9JT0NfR0VUX0RSVl9TVEFUCUJDX0lPQ19JT1dSKERSVl9DTURfR0VUX0RSVl9TVEFULCBCQ19JT0NUTF9NQikKKyNkZWZpbmUgQkNNX0lPQ19SU1RfRFJWX1NUQVQJQkNfSU9DX0lPV1IoRFJWX0NNRF9SU1RfRFJWX1NUQVQsIEJDX0lPQ1RMX01CKQorI2RlZmluZSBCQ01fSU9DX05PVElGWV9NT0RFCUJDX0lPQ19JT1dSKERSVl9DTURfTk9USUZZX01PREUsIEJDX0lPQ1RMX01CKQorI2RlZmluZQlCQ01fSU9DX0ZXX0RPV05MT0FECUJDX0lPQ19JT1dSKERSVl9DTURfRldfRE9XTkxPQUQsIEJDX0lPQ1RMX01CKQorI2RlZmluZSBCQ01fSU9DX0NIR19DTEsJCUJDX0lPQ19JT1dSKERSVl9DTURfQ0hBTkdFX0NMT0NLLCBCQ19JT0NUTF9NQikKKyNkZWZpbmUJQkNNX0lPQ19FTkQJCUJDX0lPQ19WT0lECisKKy8qIFdyYXBwZXIgZm9yIG1haW4gSU9DVEwgZGF0YSAqLwordHlwZWRlZiBzdHJ1Y3QgX2NyeXN0YWxoZF9pb2N0bF9kYXRhIHsKKwlCQ19JT0NUTF9EQVRBCQl1ZGF0YTsJCS8qIElPQ1RMIGZyb20gQXBwLi4qLworCXVpbnQzMl90CQl1X2lkOwkJLyogRHJpdmVyIHNwZWNpZmljIHVzZXIgSUQgKi8KKwl1aW50MzJfdAkJY21kOwkJLyogQ21kIElEIGZvciBkcml2ZXIncyB1c2UuICovCisJdm9pZAkJCSphZGRfY2RhdGE7CS8qIEFkZGl0aW9uYWwgY29tbWFuZCBzcGVjaWZpYyBkYXRhLi4qLworCXVpbnQzMl90CQlhZGRfY2RhdGFfc3o7CS8qIEFkZGl0aW9uYWwgY29tbWFuZCBzcGVjaWZpYyBkYXRhIHNpemUgKi8KKwlzdHJ1Y3QgX2NyeXN0YWxoZF9pb2N0bF9kYXRhICpuZXh0OwkvKiBMaXN0L0ZpZm8gbWFuYWdlbWVudCAqLworfSBjcnlzdGFsaGRfaW9jdGxfZGF0YTsKKworCitlbnVtIF9jcnlzdGFsaGRfa21vZF92ZXJ7CisJY3J5c3RhbGhkX2ttb2RfbWFqb3IJPSAwLAorCWNyeXN0YWxoZF9rbW9kX21pbm9yCT0gOSwKKwljcnlzdGFsaGRfa21vZF9yZXYJPSAyNywKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9iY19kdHNfdHlwZXMuaCBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvYmNfZHRzX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWMwYzgxNwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvYmNfZHRzX3R5cGVzLmgKQEAgLTAsMCArMSwxMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0KGMpIDIwMDYtMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqCisgKiAgTmFtZTogYmNfZHRzX3R5cGVzLmgKKyAqCisgKiAgRGVzY3JpcHRpb246IERhdGEgdHlwZXMKKyAqCisgKiAgQVUKKyAqCisgKiAgSElTVE9SWToKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgaGVhZGVyIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgaGVhZGVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBoZWFkZXIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfQkNfRFRTX1RZUEVTX0hfCisjZGVmaW5lIF9CQ19EVFNfVFlQRVNfSF8KKworI2lmZGVmIF9fTElOVVhfVVNFUl9fICAvLyBEb24ndCBpbmNsdWRlIHRoZXNlIGZvciBLRVJORUwuLgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9XSU42NCkgfHwgZGVmaW5lZChfV0lOMzIpCit0eXBlZGVmIHVpbnQzMl90CQlVMzI7Cit0eXBlZGVmIGludDMyX3QJCQlTMzI7Cit0eXBlZGVmIHVpbnQxNl90CQlVMTY7Cit0eXBlZGVmIGludDE2X3QJCQlTMTY7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIJCVU4OwordHlwZWRlZiBjaGFyCQkJUzg7CisjZW5kaWYKKworI2lmbmRlZiBQVk9JRAordHlwZWRlZiB2b2lkCSpQVk9JRDsKKyNlbmRpZgorCisjaWZuZGVmIEJPT0wKK3R5cGVkZWYgaW50CUJPT0w7CisjZW5kaWYKKworI2lmZGVmIFdJTjMyCisgICAgdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0CVU2NDsKKyNlbGlmIGRlZmluZWQoX1dJTjY0KQorICAgIHR5cGVkZWYgdWludDY0X3QgVTY0OworI2VuZGlmCisKKyNpZmRlZiBfV0lONjQKKyNpZiAhKGRlZmluZWQoUE9JTlRFUl8zMikpCisjZGVmaW5lIFBPSU5URVJfMzIJX19wdHIzMgorI2VuZGlmCisjZWxzZQkvKiBfV0lOMzIgKi8KKyNkZWZpbmUgUE9JTlRFUl8zMgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fS0VSTkVMX18pIHx8IGRlZmluZWQoX19MSU5VWF9VU0VSX18pCisKKyNpZmRlZiBfX0xJTlVYX1VTRVJfXwkvKiBEb24ndCBpbmNsdWRlIHRoZXNlIGZvciBLRVJORUwgKi8KK3R5cGVkZWYgdWludDMyX3QJVUxPTkc7Cit0eXBlZGVmIGludDMyX3QJCUxPTkc7Cit0eXBlZGVmIHZvaWQJCSpIQU5ETEU7CisjaWZuZGVmIFZPSUQKK3R5cGVkZWYgdm9pZAkJVk9JRDsKKyNlbmRpZgordHlwZWRlZiB2b2lkCQkqTFBWT0lEOwordHlwZWRlZiB1aW50MzJfdAlEV09SRDsKK3R5cGVkZWYgdWludDMyX3QJVUlOVDMyOwordHlwZWRlZiB1aW50MzJfdAkqTFBEV09SRDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhcgkqUFVDSEFSOworCisjaWZuZGVmIFRSVUUKKwkjZGVmaW5lIFRSVUUJCTEKKyNlbmRpZgorCisjaWZuZGVmIEZBTFNFCisJI2RlZmluZSBGQUxTRQkJMAorI2VuZGlmCisKKyNkZWZpbmUgVEVYVAorCisjZWxzZQorCisvKiBGb3IgS2VybmVsIHVzYWdlLi4gKi8KK3R5cGVkZWYgYm9vbAliY19ib29sX3Q7CisjZW5kaWYKKworI2Vsc2UKKworI2lmbmRlZiB1aW50NjRfdAordHlwZWRlZiBzdHJ1Y3QgX3VpbnQ2NF90IHsKKwl1aW50MzJfdCBsb3dfZHc7CisJdWludDMyX3QgaGlfZHc7Cit9IHVpbnQ2NF90OworI2VuZGlmCisKKyNpZm5kZWYgaW50MzJfdAordHlwZWRlZiBzaWduZWQgbG9uZwkJaW50MzJfdDsKKyNlbmRpZgorCisjaWZuZGVmIHVpbnQzMl90Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJdWludDMyX3Q7CisjZW5kaWYKKworI2lmbmRlZiB1aW50MTZfdAordHlwZWRlZiB1bnNpZ25lZCBzaG9ydAl1aW50MTZfdDsKKyNlbmRpZgorCisjaWZuZGVmIHVpbnQ4X3QKK3R5cGVkZWYgdW5zaWduZWQgY2hhcgl1aW50OF90OworI2VuZGlmCisjZW5kaWYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvYmNtXzcwMDEyX3JlZ3MuaCBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvYmNtXzcwMDEyX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTIyZjU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9iY21fNzAwMTJfcmVncy5oCkBAIC0wLDAgKzEsNzU3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwOSwgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKgorICogIE5hbWU6IGJjbV83MDAxMl9yZWdzLmgKKyAqCisgKiAgRGVzY3JpcHRpb246IEJDTTcwMDEyIHJlZ2lzdGVycworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBoZWFkZXIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBoZWFkZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGhlYWRlci4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgTUFDRklMRV9IX18KKyNkZWZpbmUgTUFDRklMRV9IX18KKworLyoqCisgKiBtID0gbWVtb3J5LCBjID0gY29yZSwgciA9IHJlZ2lzdGVyLCBmID0gZmllbGQsIGQgPSBkYXRhLgorICovCisjaWYgIWRlZmluZWQoR0VUX0ZJRUxEKSAmJiAhZGVmaW5lZChTRVRfRklFTEQpCisjZGVmaW5lIEJSQ01fQUxJR04oYyxyLGYpICAgYyMjXyMjciMjXyMjZiMjX0FMSUdOCisjZGVmaW5lIEJSQ01fQklUUyhjLHIsZikgICAgYyMjXyMjciMjXyMjZiMjX0JJVFMKKyNkZWZpbmUgQlJDTV9NQVNLKGMscixmKSAgICBjIyNfIyNyIyNfIyNmIyNfTUFTSworI2RlZmluZSBCUkNNX1NISUZUKGMscixmKSAgIGMjI18jI3IjI18jI2YjI19TSElGVAorCisjZGVmaW5lIEdFVF9GSUVMRChtLGMscixmKSBcCisJKCgoKG0pICYgQlJDTV9NQVNLKGMscixmKSkgPj4gQlJDTV9TSElGVChjLHIsZikpIDw8IEJSQ01fQUxJR04oYyxyLGYpKQorCisjZGVmaW5lIFNFVF9GSUVMRChtLGMscixmLGQpIFwKKwkoKG0pID0gKCgobSkgJiB+QlJDTV9NQVNLKGMscixmKSkgfCAoKCgoZCkgPj4gQlJDTV9BTElHTihjLHIsZikpIDw8IFwKKwkgQlJDTV9TSElGVChjLHIsZikpICYgQlJDTV9NQVNLKGMscixmKSkpIFwKKwkpCisKKyNkZWZpbmUgU0VUX1RZUEVfRklFTEQobSxjLHIsZixkKSBTRVRfRklFTEQobSxjLHIsZixjIyNfIyNkKQorI2RlZmluZSBTRVRfTkFNRV9GSUVMRChtLGMscixmLGQpIFNFVF9GSUVMRChtLGMscixmLGMjI18jI3IjI18jI2YjI18jI2QpCisjZGVmaW5lIFNFVF9WQUxVRV9GSUVMRChtLGMscixmLGQpIFNFVF9GSUVMRChtLGMscixmLGQpCisKKyNlbmRpZiAvKiBHRVQgJiBTRVQgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcmUgRW51bXMuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVudW1zOiBBRVNfUkdSX0JSSURHRV9SRVNFVF9DVFJMCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBBRVNfUkdSX0JSSURHRV9SRVNFVF9DVFJMX0RFQVNTRVJUICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEFFU19SR1JfQlJJREdFX1JFU0VUX0NUUkxfQVNTRVJUICAgICAgICAgICAgICAgICAgIDEKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVudW1zOiBDQ0VfUkdSX0JSSURHRV9SRVNFVF9DVFJMCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBDQ0VfUkdSX0JSSURHRV9SRVNFVF9DVFJMX0RFQVNTRVJUICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIENDRV9SR1JfQlJJREdFX1JFU0VUX0NUUkxfQVNTRVJUICAgICAgICAgICAgICAgICAgIDEKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVudW1zOiBEQlVfUkdSX0JSSURHRV9SRVNFVF9DVFJMCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBEQlVfUkdSX0JSSURHRV9SRVNFVF9DVFJMX0RFQVNTRVJUICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIERCVV9SR1JfQlJJREdFX1JFU0VUX0NUUkxfQVNTRVJUICAgICAgICAgICAgICAgICAgIDEKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVudW1zOiBEQ0lfUkdSX0JSSURHRV9SRVNFVF9DVFJMCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBEQ0lfUkdSX0JSSURHRV9SRVNFVF9DVFJMX0RFQVNTRVJUICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIERDSV9SR1JfQlJJREdFX1JFU0VUX0NUUkxfQVNTRVJUICAgICAgICAgICAgICAgICAgIDEKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVudW1zOiBHSVNCX0FSQklURVJfREVBU1NFUlRfQVNTRVJUCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBHSVNCX0FSQklURVJfREVBU1NFUlRfQVNTRVJUX0RFQVNTRVJUICAgICAgICAgICAgICAwCisjZGVmaW5lIEdJU0JfQVJCSVRFUl9ERUFTU0VSVF9BU1NFUlRfQVNTRVJUICAgICAgICAgICAgICAgIDEKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVudW1zOiBHSVNCX0FSQklURVJfVU5NQVNLX01BU0sKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEdJU0JfQVJCSVRFUl9VTk1BU0tfTUFTS19VTk1BU0sgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgR0lTQl9BUkJJVEVSX1VOTUFTS19NQVNLX01BU0sgICAgICAgICAgICAgICAgICAgICAgMQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogRW51bXM6IEdJU0JfQVJCSVRFUl9ESVNBQkxFX0VOQUJMRQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgR0lTQl9BUkJJVEVSX0RJU0FCTEVfRU5BQkxFX0RJU0FCTEUgICAgICAgICAgICAgICAgMAorI2RlZmluZSBHSVNCX0FSQklURVJfRElTQUJMRV9FTkFCTEVfRU5BQkxFICAgICAgICAgICAgICAgICAxCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBFbnVtczogSTJDX0dSX0JSSURHRV9SRVNFVF9DVFJMCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBJMkNfR1JfQlJJREdFX1JFU0VUX0NUUkxfREVBU1NFUlQgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIEkyQ19HUl9CUklER0VfUkVTRVRfQ1RSTF9BU1NFUlQgICAgICAgICAgICAgICAgICAgIDEKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVudW1zOiBNSVNDX0dSX0JSSURHRV9SRVNFVF9DVFJMCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBNSVNDX0dSX0JSSURHRV9SRVNFVF9DVFJMX0RFQVNTRVJUICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1JU0NfR1JfQlJJREdFX1JFU0VUX0NUUkxfQVNTRVJUICAgICAgICAgICAgICAgICAgIDEKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEVudW1zOiBPVFBfR1JfQlJJREdFX1JFU0VUX0NUUkwKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIE9UUF9HUl9CUklER0VfUkVTRVRfQ1RSTF9ERUFTU0VSVCAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgT1RQX0dSX0JSSURHRV9SRVNFVF9DVFJMX0FTU0VSVCAgICAgICAgICAgICAgICAgICAgMQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQkNNNzAwMTJfVEdUX1RPUF9QQ0lFX0NGRworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUENJRV9DRkdfREVWSUNFX1ZFTkRPUl9JRCAgICAgIDB4MDAwMDAwMDAgLyogREVWSUNFX1ZFTkRPUl9JRCBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19TVEFUVVNfQ09NTUFORCAgICAgICAgMHgwMDAwMDAwNCAvKiBTVEFUVVNfQ09NTUFORCBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19QQ0lfQ0xBU1NDT0RFX0FORF9SRVZJU0lPTl9JRCAweDAwMDAwMDA4IC8qIFBDSV9DTEFTU0NPREVfQU5EX1JFVklTSU9OX0lEIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0JJU1RfSEVBREVSX1RZUEVfTEFURU5DWV9USU1FUl9DQUNIRV9MSU5FX1NJWkUgMHgwMDAwMDAwYyAvKiBCSVNUX0hFQURFUl9UWVBFX0xBVEVOQ1lfVElNRVJfQ0FDSEVfTElORV9TSVpFIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0JBU0VfQUREUkVTU18xICAgICAgICAweDAwMDAwMDEwIC8qIEJBU0VfQUREUkVTU18xIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0JBU0VfQUREUkVTU18yICAgICAgICAweDAwMDAwMDE0IC8qIEJBU0VfQUREUkVTU18yIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0JBU0VfQUREUkVTU18zICAgICAgICAweDAwMDAwMDE4IC8qIEJBU0VfQUREUkVTU18zIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0JBU0VfQUREUkVTU180ICAgICAgICAweDAwMDAwMDFjIC8qIEJBU0VfQUREUkVTU180IFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0NBUkRCVVNfQ0lTX1BPSU5URVIgICAweDAwMDAwMDI4IC8qIENBUkRCVVNfQ0lTX1BPSU5URVIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfU1VCU1lTVEVNX0RFVklDRV9WRU5ET1JfSUQgMHgwMDAwMDAyYyAvKiBTVUJTWVNURU1fREVWSUNFX1ZFTkRPUl9JRCBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19FWFBBTlNJT05fUk9NX0JBU0VfQUREUkVTUyAweDAwMDAwMDMwIC8qIEVYUEFOU0lPTl9ST01fQkFTRV9BRERSRVNTIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0NBUEFCSUxJVElFU19QT0lOVEVSICAweDAwMDAwMDM0IC8qIENBUEFCSUxJVElFU19QT0lOVEVSIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0lOVEVSUlVQVCAgICAgICAgICAgICAweDAwMDAwMDNjIC8qIElOVEVSUlVQVCBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19WUERfQ0FQQUJJTElUSUVTICAgICAgMHgwMDAwMDA0MCAvKiBWUERfQ0FQQUJJTElUSUVTIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1ZQRF9EQVRBICAgICAgICAgICAgICAweDAwMDAwMDQ0IC8qIFZQRF9EQVRBIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1BPV0VSX01BTkFHRU1FTlRfQ0FQQUJJTElUWSAweDAwMDAwMDQ4IC8qIFBPV0VSX01BTkFHRU1FTlRfQ0FQQUJJTElUWSBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19QT1dFUl9NQU5BR0VNRU5UX0NPTlRST0xfU1RBVFVTIDB4MDAwMDAwNGMgLyogUE9XRVJfTUFOQUdFTUVOVF9DT05UUk9MX1NUQVRVUyBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19NU0lfQ0FQQUJJTElUWV9IRUFERVIgMHgwMDAwMDA1MCAvKiBNU0lfQ0FQQUJJTElUWV9IRUFERVIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfTVNJX0xPV0VSX0FERFJFU1MgICAgIDB4MDAwMDAwNTQgLyogTVNJX0xPV0VSX0FERFJFU1MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfTVNJX1VQUEVSX0FERFJFU1NfUkVHSVNURVIgMHgwMDAwMDA1OCAvKiBNU0lfVVBQRVJfQUREUkVTU19SRUdJU1RFUiBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19NU0lfREFUQSAgICAgICAgICAgICAgMHgwMDAwMDA1YyAvKiBNU0lfREFUQSBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19CUk9BRENPTV9WRU5ET1JfU1BFQ0lGSUNfQ0FQQUJJTElUWV9IRUFERVIgMHgwMDAwMDA2MCAvKiBCUk9BRENPTV9WRU5ET1JfU1BFQ0lGSUNfQ0FQQUJJTElUWV9IRUFERVIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfUkVTRVRfQ09VTlRFUlNfSU5JVElBTF9WQUxVRVMgMHgwMDAwMDA2NCAvKiBSRVNFVF9DT1VOVEVSU19JTklUSUFMX1ZBTFVFUyBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19NSVNDRUxMQU5FT1VTX0hPU1RfQ09OVFJPTCAweDAwMDAwMDY4IC8qIE1JU0NFTExBTkVPVVNfSE9TVF9DT05UUk9MIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1NQQVJFICAgICAgICAgICAgICAgICAweDAwMDAwMDZjIC8qIFNQQVJFIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1BDSV9TVEFURSAgICAgICAgICAgICAweDAwMDAwMDcwIC8qIFBDSV9TVEFURSBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19DTE9DS19DT05UUk9MICAgICAgICAgMHgwMDAwMDA3NCAvKiBDTE9DS19DT05UUk9MIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1JFR0lTVEVSX0JBU0UgICAgICAgICAweDAwMDAwMDc4IC8qIFJFR0lTVEVSX0JBU0UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfTUVNT1JZX0JBU0UgICAgICAgICAgIDB4MDAwMDAwN2MgLyogTUVNT1JZX0JBU0UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfUkVHSVNURVJfREFUQSAgICAgICAgIDB4MDAwMDAwODAgLyogUkVHSVNURVJfREFUQSBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19NRU1PUllfREFUQSAgICAgICAgICAgMHgwMDAwMDA4NCAvKiBNRU1PUllfREFUQSBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19FWFBBTlNJT05fUk9NX0JBUl9TSVpFIDB4MDAwMDAwODggLyogRVhQQU5TSU9OX1JPTV9CQVJfU0laRSBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19FWFBBTlNJT05fUk9NX0FERFJFU1MgMHgwMDAwMDA4YyAvKiBFWFBBTlNJT05fUk9NX0FERFJFU1MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfRVhQQU5TSU9OX1JPTV9EQVRBICAgIDB4MDAwMDAwOTAgLyogRVhQQU5TSU9OX1JPTV9EQVRBIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1ZQRF9JTlRFUkZBQ0UgICAgICAgICAweDAwMDAwMDk0IC8qIFZQRF9JTlRFUkZBQ0UgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfVU5ESV9SRUNFSVZFX0JEX1NUQU5EQVJEX1BST0RVQ0VSX1JJTkdfUFJPRFVDRVJfSU5ERVhfTUFJTEJPWF9VUFBFUiAweDAwMDAwMDk4IC8qIFVORElfUkVDRUlWRV9CRF9TVEFOREFSRF9QUk9EVUNFUl9SSU5HX1BST0RVQ0VSX0lOREVYX01BSUxCT1hfVVBQRVIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfVU5ESV9SRUNFSVZFX0JEX1NUQU5EQVJEX1BST0RVQ0VSX1JJTkdfUFJPRFVDRVJfSU5ERVhfTUFJTEJPWF9MT1dFUiAweDAwMDAwMDljIC8qIFVORElfUkVDRUlWRV9CRF9TVEFOREFSRF9QUk9EVUNFUl9SSU5HX1BST0RVQ0VSX0lOREVYX01BSUxCT1hfTE9XRVIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfVU5ESV9SRUNFSVZFX1JFVFVSTl9SSU5HX0NPTlNVTUVSX0lOREVYX1VQUEVSIDB4MDAwMDAwYTAgLyogVU5ESV9SRUNFSVZFX1JFVFVSTl9SSU5HX0NPTlNVTUVSX0lOREVYX1VQUEVSIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1VORElfUkVDRUlWRV9SRVRVUk5fUklOR19DT05TVU1FUl9JTkRFWF9MT1dFUiAweDAwMDAwMGE0IC8qIFVORElfUkVDRUlWRV9SRVRVUk5fUklOR19DT05TVU1FUl9JTkRFWF9MT1dFUiBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19VTkRJX1NFTkRfQkRfUFJPRFVDRVJfSU5ERVhfTUFJTEJPWF9VUFBFUiAweDAwMDAwMGE4IC8qIFVORElfU0VORF9CRF9QUk9EVUNFUl9JTkRFWF9NQUlMQk9YX1VQUEVSIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1VORElfU0VORF9CRF9QUk9EVUNFUl9JTkRFWF9NQUlMQk9YX0xPV0VSIDB4MDAwMDAwYWMgLyogVU5ESV9TRU5EX0JEX1BST0RVQ0VSX0lOREVYX01BSUxCT1hfTE9XRVIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfSU5UX01BSUxCT1hfVVBQRVIgICAgIDB4MDAwMDAwYjAgLyogSU5UX01BSUxCT1hfVVBQRVIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfSU5UX01BSUxCT1hfTE9XRVIgICAgIDB4MDAwMDAwYjQgLyogSU5UX01BSUxCT1hfTE9XRVIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfUFJPRFVDVF9JRF9BTkRfQVNJQ19SRVZJU0lPTiAweDAwMDAwMGJjIC8qIFBST0RVQ1RfSURfQU5EX0FTSUNfUkVWSVNJT04gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfRlVOQ1RJT05fRVZFTlQgICAgICAgIDB4MDAwMDAwYzAgLyogRlVOQ1RJT05fRVZFTlQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfRlVOQ1RJT05fRVZFTlRfTUFTSyAgIDB4MDAwMDAwYzQgLyogRlVOQ1RJT05fRVZFTlRfTUFTSyBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19GVU5DVElPTl9QUkVTRU5UICAgICAgMHgwMDAwMDBjOCAvKiBGVU5DVElPTl9QUkVTRU5UIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1BDSUVfQ0FQQUJJTElUSUVTICAgICAweDAwMDAwMGNjIC8qIFBDSUVfQ0FQQUJJTElUSUVTIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0RFVklDRV9DQVBBQklMSVRJRVMgICAweDAwMDAwMGQwIC8qIERFVklDRV9DQVBBQklMSVRJRVMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfREVWSUNFX1NUQVRVU19DT05UUk9MIDB4MDAwMDAwZDQgLyogREVWSUNFX1NUQVRVU19DT05UUk9MIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0xJTktfQ0FQQUJJTElUWSAgICAgICAweDAwMDAwMGQ4IC8qIExJTktfQ0FQQUJJTElUWSBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19MSU5LX1NUQVRVU19DT05UUk9MICAgMHgwMDAwMDBkYyAvKiBMSU5LX1NUQVRVU19DT05UUk9MIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0RFVklDRV9DQVBBQklMSVRJRVNfMiAweDAwMDAwMGYwIC8qIERFVklDRV9DQVBBQklMSVRJRVNfMiBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19ERVZJQ0VfU1RBVFVTX0NPTlRST0xfMiAweDAwMDAwMGY0IC8qIERFVklDRV9TVEFUVVNfQ09OVFJPTF8yIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0xJTktfQ0FQQUJJTElUSUVTXzIgICAweDAwMDAwMGY4IC8qIExJTktfQ0FQQUJJTElUSUVTXzIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfTElOS19TVEFUVVNfQ09OVFJPTF8yIDB4MDAwMDAwZmMgLyogTElOS19TVEFUVVNfQ09OVFJPTF8yIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0FEVkFOQ0VEX0VSUk9SX1JFUE9SVElOR19FTkhBTkNFRF9DQVBBQklMSVRZX0hFQURFUiAweDAwMDAwMTAwIC8qIEFEVkFOQ0VEX0VSUk9SX1JFUE9SVElOR19FTkhBTkNFRF9DQVBBQklMSVRZX0hFQURFUiBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19VTkNPUlJFQ1RBQkxFX0VSUk9SX1NUQVRVUyAweDAwMDAwMTA0IC8qIFVOQ09SUkVDVEFCTEVfRVJST1JfU1RBVFVTIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1VOQ09SUkVDVEFCTEVfRVJST1JfTUFTSyAweDAwMDAwMTA4IC8qIFVOQ09SUkVDVEFCTEVfRVJST1JfTUFTSyBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19VTkNPUlJFQ1RBQkxFX0VSUk9SX1NFVkVSSVRZIDB4MDAwMDAxMGMgLyogVU5DT1JSRUNUQUJMRV9FUlJPUl9TRVZFUklUWSBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19DT1JSRUNUQUJMRV9FUlJPUl9TVEFUVVMgMHgwMDAwMDExMCAvKiBDT1JSRUNUQUJMRV9FUlJPUl9TVEFUVVMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfQ09SUkVDVEFCTEVfRVJST1JfTUFTSyAweDAwMDAwMTE0IC8qIENPUlJFQ1RBQkxFX0VSUk9SX01BU0sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfQURWQU5DRURfRVJST1JfQ0FQQUJJTElUSUVTX0FORF9DT05UUk9MIDB4MDAwMDAxMTggLyogQURWQU5DRURfRVJST1JfQ0FQQUJJTElUSUVTX0FORF9DT05UUk9MIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0hFQURFUl9MT0dfMSAgICAgICAgICAweDAwMDAwMTFjIC8qIEhFQURFUl9MT0dfMSBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19IRUFERVJfTE9HXzIgICAgICAgICAgMHgwMDAwMDEyMCAvKiBIRUFERVJfTE9HXzIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfSEVBREVSX0xPR18zICAgICAgICAgIDB4MDAwMDAxMjQgLyogSEVBREVSX0xPR18zIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0hFQURFUl9MT0dfNCAgICAgICAgICAweDAwMDAwMTI4IC8qIEhFQURFUl9MT0dfNCBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19WSVJUVUFMX0NIQU5ORUxfRU5IQU5DRURfQ0FQQUJJTElUWV9IRUFERVIgMHgwMDAwMDEzYyAvKiBWSVJUVUFMX0NIQU5ORUxfRU5IQU5DRURfQ0FQQUJJTElUWV9IRUFERVIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfUE9SVF9WQ19DQVBBQklMSVRZICAgIDB4MDAwMDAxNDAgLyogUE9SVF9WQ19DQVBBQklMSVRZIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1BPUlRfVkNfQ0FQQUJJTElUWV8yICAweDAwMDAwMTQ0IC8qIFBPUlRfVkNfQ0FQQUJJTElUWV8yIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1BPUlRfVkNfU1RBVFVTX0NPTlRST0wgMHgwMDAwMDE0OCAvKiBQT1JUX1ZDX1NUQVRVU19DT05UUk9MIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1ZDX1JFU09VUkNFX0NBUEFCSUxJVFkgMHgwMDAwMDE0YyAvKiBWQ19SRVNPVVJDRV9DQVBBQklMSVRZIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1ZDX1JFU09VUkNFX0NPTlRST0wgICAweDAwMDAwMTUwIC8qIFZDX1JFU09VUkNFX0NPTlRST0wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfVkNfUkVTT1VSQ0VfU1RBVFVTICAgIDB4MDAwMDAxNTQgLyogVkNfUkVTT1VSQ0VfU1RBVFVTIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0RFVklDRV9TRVJJQUxfTk9fRU5IQU5DRURfQ0FQQUJJTElUWV9IRUFERVIgMHgwMDAwMDE2MCAvKiBERVZJQ0VfU0VSSUFMX05PX0VOSEFOQ0VEX0NBUEFCSUxJVFlfSEVBREVSIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0RFVklDRV9TRVJJQUxfTk9fTE9XRVJfRFcgMHgwMDAwMDE2NCAvKiBERVZJQ0VfU0VSSUFMX05PX0xPV0VSX0RXIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX0RFVklDRV9TRVJJQUxfTk9fVVBQRVJfRFcgMHgwMDAwMDE2OCAvKiBERVZJQ0VfU0VSSUFMX05PX1VQUEVSX0RXIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfQ0ZHX1BPV0VSX0JVREdFVElOR19FTkhBTkNFRF9DQVBBQklMSVRZX0hFQURFUiAweDAwMDAwMTZjIC8qIFBPV0VSX0JVREdFVElOR19FTkhBTkNFRF9DQVBBQklMSVRZX0hFQURFUiBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19QT1dFUl9CVURHRVRJTkdfREFUQV9TRUxFQ1QgMHgwMDAwMDE3MCAvKiBQT1dFUl9CVURHRVRJTkdfREFUQV9TRUxFQ1QgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfUE9XRVJfQlVER0VUSU5HX0RBVEEgIDB4MDAwMDAxNzQgLyogUE9XRVJfQlVER0VUSU5HX0RBVEEgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgUENJRV9DRkdfUE9XRVJfQlVER0VUSU5HX0NBUEFCSUxJVFkgMHgwMDAwMDE3OCAvKiBQT1dFUl9CVURHRVRJTkdfQ0FQQUJJTElUWSBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19GSVJNV0FSRV9QT1dFUl9CVURHRVRJTkdfMl8xIDB4MDAwMDAxN2MgLyogRklSTVdBUkVfUE9XRVJfQlVER0VUSU5HXzJfMSBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19GSVJNV0FSRV9QT1dFUl9CVURHRVRJTkdfNF8zIDB4MDAwMDAxODAgLyogRklSTVdBUkVfUE9XRVJfQlVER0VUSU5HXzRfMyBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19GSVJNV0FSRV9QT1dFUl9CVURHRVRJTkdfNl81IDB4MDAwMDAxODQgLyogRklSTVdBUkVfUE9XRVJfQlVER0VUSU5HXzZfNSBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19GSVJNV0FSRV9QT1dFUl9CVURHRVRJTkdfOF83IDB4MDAwMDAxODggLyogRklSTVdBUkVfUE9XRVJfQlVER0VUSU5HXzhfNyBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX0NGR19QQ0lFXzFfMV9BRFZJU09SWV9OT05fRkFUQUxfRVJST1JfTUFTS0lORyAweDAwMDAwMThjIC8qIFBDSUVfMV8xX0FEVklTT1JZX05PTl9GQVRBTF9FUlJPUl9NQVNLSU5HIFJlZ2lzdGVyICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJDTTcwMDEyX1RHVF9UT1BfUENJRV9UTAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUENJRV9UTF9UTF9DT05UUk9MICAgICAgICAgICAgIDB4MDAwMDA0MDAgLyogVExfQ09OVFJPTCBSZWdpc3RlciAqLworI2RlZmluZSBQQ0lFX1RMX1RSQU5TQUNUSU9OX0NPTkZJR1VSQVRJT04gMHgwMDAwMDQwNCAvKiBUUkFOU0FDVElPTl9DT05GSUdVUkFUSU9OIFJlZ2lzdGVyICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJDTTcwMDEyX1RHVF9UT1BfUENJRV9ETEwKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBDSUVfRExMX0RBVEFfTElOS19DT05UUk9MICAgICAweDAwMDAwNTAwIC8qIERBVEFfTElOS19DT05UUk9MIFJlZ2lzdGVyICovCisjZGVmaW5lIFBDSUVfRExMX0RBVEFfTElOS19TVEFUVVMgICAgICAweDAwMDAwNTA0IC8qIERBVEFfTElOS19TVEFUVVMgUmVnaXN0ZXIgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQkNNNzAwMTJfVEdUX1RPUF9JTlRSCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTICAgICAgICAgICAgICAgMHgwMDAwMDcwMCAvKiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIElOVFJfSU5UUl9TRVQgICAgICAgICAgICAgICAgICAweDAwMDAwNzA0IC8qIEludGVycnVwdCBTZXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSU5UUl9JTlRSX0NMUl9SRUcgICAgICAgICAgICAgIDB4MDAwMDA3MDggLyogSW50ZXJydXB0IENsZWFyIFJlZ2lzdGVyICovCisjZGVmaW5lIElOVFJfSU5UUl9NU0tfU1RTX1JFRyAgICAgICAgICAweDAwMDAwNzBjIC8qIEludGVycnVwdCBNYXNrIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBJTlRSX0lOVFJfTVNLX1NFVF9SRUcgICAgICAgICAgMHgwMDAwMDcxMCAvKiBJbnRlcnJ1cHQgTWFzayBTZXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSU5UUl9JTlRSX01TS19DTFJfUkVHICAgICAgICAgIDB4MDAwMDA3MTQgLyogSW50ZXJydXB0IE1hc2sgQ2xlYXIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgSU5UUl9FT0lfQ1RSTCAgICAgICAgICAgICAgICAgIDB4MDAwMDA3MjAgLyogRW5kIG9mIGludGVycnVwdCBjb250cm9sIHJlZ2lzdGVyICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJDTTcwMDEyX01JU0NfVE9QX01JU0MxCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBNSVNDMV9UWF9GSVJTVF9ERVNDX0xfQUREUl9MSVNUMCAweDAwMDAwYzAwIC8qIFR4IERNQSBEZXNjcmlwdG9yIExpc3QwIEZpcnN0IERlc2NyaXB0b3IgbG93ZXIgQWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9UWF9GSVJTVF9ERVNDX1VfQUREUl9MSVNUMCAweDAwMDAwYzA0IC8qIFR4IERNQSBEZXNjcmlwdG9yIExpc3QwIEZpcnN0IERlc2NyaXB0b3IgVXBwZXIgQWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9UWF9GSVJTVF9ERVNDX0xfQUREUl9MSVNUMSAweDAwMDAwYzA4IC8qIFR4IERNQSBEZXNjcmlwdG9yIExpc3QxIEZpcnN0IERlc2NyaXB0b3IgTG93ZXIgQWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9UWF9GSVJTVF9ERVNDX1VfQUREUl9MSVNUMSAweDAwMDAwYzBjIC8qIFR4IERNQSBEZXNjcmlwdG9yIExpc3QxIEZpcnN0IERlc2NyaXB0b3IgVXBwZXIgQWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9UWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFMgMHgwMDAwMGMxMCAvKiBUeCBETUEgU29mdHdhcmUgRGVzY3JpcHRvciBMaXN0IENvbnRyb2wgYW5kIFN0YXR1cyAqLworI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTICAgICAgMHgwMDAwMGMxOCAvKiBUeCBETUEgRW5naW5lIEVycm9yIFN0YXR1cyAqLworI2RlZmluZSBNSVNDMV9UWF9ETUFfTElTVDBfQ1VSX0RFU0NfTF9BRERSIDB4MDAwMDBjMWMgLyogVHggRE1BIExpc3QwIEN1cnJlbnQgRGVzY3JpcHRvciBMb3dlciBBZGRyZXNzICovCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9MSVNUMF9DVVJfREVTQ19VX0FERFIgMHgwMDAwMGMyMCAvKiBUeCBETUEgTGlzdDAgQ3VycmVudCBEZXNjcmlwdG9yIFVwcGVyIEFkZHJlc3MgKi8KKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0xJU1QwX0NVUl9CWVRFX0NOVF9SRU0gMHgwMDAwMGMyNCAvKiBUeCBETUEgTGlzdDAgQ3VycmVudCBEZXNjcmlwdG9yIFVwcGVyIEFkZHJlc3MgKi8KKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0xJU1QxX0NVUl9ERVNDX0xfQUREUiAweDAwMDAwYzI4IC8qIFR4IERNQSBMaXN0MSBDdXJyZW50IERlc2NyaXB0b3IgTG93ZXIgQWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9UWF9ETUFfTElTVDFfQ1VSX0RFU0NfVV9BRERSIDB4MDAwMDBjMmMgLyogVHggRE1BIExpc3QxIEN1cnJlbnQgRGVzY3JpcHRvciBVcHBlciBBZGRyZXNzICovCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9MSVNUMV9DVVJfQllURV9DTlRfUkVNIDB4MDAwMDBjMzAgLyogVHggRE1BIExpc3QxIEN1cnJlbnQgRGVzY3JpcHRvciBVcHBlciBBZGRyZXNzICovCisjZGVmaW5lIE1JU0MxX1lfUlhfRklSU1RfREVTQ19MX0FERFJfTElTVDAgMHgwMDAwMGMzNCAvKiBZIFJ4IERlc2NyaXB0b3IgTGlzdDAgRmlyc3QgRGVzY3JpcHRvciBMb3dlciBBZGRyZXNzICovCisjZGVmaW5lIE1JU0MxX1lfUlhfRklSU1RfREVTQ19VX0FERFJfTElTVDAgMHgwMDAwMGMzOCAvKiBZIFJ4IERlc2NyaXB0b3IgTGlzdDAgRmlyc3QgRGVzY3JpcHRvciBVcHBlciBBZGRyZXNzICovCisjZGVmaW5lIE1JU0MxX1lfUlhfRklSU1RfREVTQ19MX0FERFJfTElTVDEgMHgwMDAwMGMzYyAvKiBZIFJ4IERlc2NyaXB0b3IgTGlzdDEgRmlyc3QgRGVzY3JpcHRvciBMb3dlciBBZGRyZXNzICovCisjZGVmaW5lIE1JU0MxX1lfUlhfRklSU1RfREVTQ19VX0FERFJfTElTVDEgMHgwMDAwMGM0MCAvKiBZIFJ4IERlc2NyaXB0b3IgTGlzdDEgRmlyc3QgRGVzY3JpcHRvciBVcHBlciBBZGRyZXNzICovCisjZGVmaW5lIE1JU0MxX1lfUlhfU1dfREVTQ19MSVNUX0NUUkxfU1RTIDB4MDAwMDBjNDQgLyogWSBSeCBTb2Z0d2FyZSBEZXNjcmlwdG9yIExpc3QgQ29udHJvbCBhbmQgU3RhdHVzICovCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTICAgICAgICAweDAwMDAwYzRjIC8qIFkgUnggRW5naW5lIEVycm9yIFN0YXR1cyAqLworI2RlZmluZSBNSVNDMV9ZX1JYX0xJU1QwX0NVUl9ERVNDX0xfQUREUiAweDAwMDAwYzUwIC8qIFkgUnggTGlzdDAgQ3VycmVudCBEZXNjcmlwdG9yIExvd2VyIEFkZHJlc3MgKi8KKyNkZWZpbmUgTUlTQzFfWV9SWF9MSVNUMF9DVVJfREVTQ19VX0FERFIgMHgwMDAwMGM1NCAvKiBZIFJ4IExpc3QwIEN1cnJlbnQgRGVzY3JpcHRvciBVcHBlciBBZGRyZXNzICovCisjZGVmaW5lIE1JU0MxX1lfUlhfTElTVDBfQ1VSX0JZVEVfQ05UICAweDAwMDAwYzU4IC8qIFkgUnggTGlzdDAgQ3VycmVudCBEZXNjcmlwdG9yIEJ5dGUgQ291bnQgKi8KKyNkZWZpbmUgTUlTQzFfWV9SWF9MSVNUMV9DVVJfREVTQ19MX0FERFIgMHgwMDAwMGM1YyAvKiBZIFJ4IExpc3QxIEN1cnJlbnQgRGVzY3JpcHRvciBMb3dlciBhZGRyZXNzICovCisjZGVmaW5lIE1JU0MxX1lfUlhfTElTVDFfQ1VSX0RFU0NfVV9BRERSIDB4MDAwMDBjNjAgLyogWSBSeCBMaXN0MSBDdXJyZW50IERlc2NyaXB0b3IgVXBwZXIgYWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9ZX1JYX0xJU1QxX0NVUl9CWVRFX0NOVCAgMHgwMDAwMGM2NCAvKiBZIFJ4IExpc3QxIEN1cnJlbnQgRGVzY3JpcHRvciBCeXRlIENvdW50ICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX0ZJUlNUX0RFU0NfTF9BRERSX0xJU1QwIDB4MDAwMDBjNjggLyogVVYgUnggRGVzY3JpcHRvciBMaXN0MCBGaXJzdCBEZXNjcmlwdG9yIGxvd2VyIEFkZHJlc3MgKi8KKyNkZWZpbmUgTUlTQzFfVVZfUlhfRklSU1RfREVTQ19VX0FERFJfTElTVDAgMHgwMDAwMGM2YyAvKiBVViBSeCBEZXNjcmlwdG9yIExpc3QwIEZpcnN0IERlc2NyaXB0b3IgVXBwZXIgQWRkcmVzcyAqLworI2RlZmluZSBNSVNDMV9VVl9SWF9GSVJTVF9ERVNDX0xfQUREUl9MSVNUMSAweDAwMDAwYzcwIC8qIFVWIFJ4IERlc2NyaXB0b3IgTGlzdDEgRmlyc3QgRGVzY3JpcHRvciBMb3dlciBBZGRyZXNzICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX0ZJUlNUX0RFU0NfVV9BRERSX0xJU1QxIDB4MDAwMDBjNzQgLyogVVYgUnggRGVzY3JpcHRvciBMaXN0MSBGaXJzdCBEZXNjcmlwdG9yIFVwcGVyIEFkZHJlc3MgKi8KKyNkZWZpbmUgTUlTQzFfVVZfUlhfU1dfREVTQ19MSVNUX0NUUkxfU1RTIDB4MDAwMDBjNzggLyogVVYgUnggU29mdHdhcmUgRGVzY3JpcHRvciBMaXN0IENvbnRyb2wgYW5kIFN0YXR1cyAqLworI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVMgICAgICAgMHgwMDAwMGM3YyAvKiBVViBSeCBFbmdpbmUgRXJyb3IgU3RhdHVzICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX0xJU1QwX0NVUl9ERVNDX0xfQUREUiAweDAwMDAwYzgwIC8qIFVWIFJ4IExpc3QwIEN1cnJlbnQgRGVzY3JpcHRvciBMb3dlciBBZGRyZXNzICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX0xJU1QwX0NVUl9ERVNDX1VfQUREUiAweDAwMDAwYzg0IC8qIFVWIFJ4IExpc3QwIEN1cnJlbnQgRGVzY3JpcHRvciBVcHBlciBBZGRyZXNzICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX0xJU1QwX0NVUl9CWVRFX0NOVCAweDAwMDAwYzg4IC8qIFVWIFJ4IExpc3QwIEN1cnJlbnQgRGVzY3JpcHRvciBCeXRlIENvdW50ICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX0xJU1QxX0NVUl9ERVNDX0xfQUREUiAweDAwMDAwYzhjIC8qIFVWIFJ4IExpc3QxIEN1cnJlbnQgRGVzY3JpcHRvciBMb3dlciBBZGRyZXNzICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX0xJU1QxX0NVUl9ERVNDX1VfQUREUiAweDAwMDAwYzkwIC8qIFVWIFJ4IExpc3QxIEN1cnJlbnQgRGVzY3JpcHRvciBVcHBlciBBZGRyZXNzICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX0xJU1QxX0NVUl9CWVRFX0NOVCAweDAwMDAwYzk0IC8qIFVWIFJ4IExpc3QxIEN1cnJlbnQgRGVzY3JpcHRvciBCeXRlIENvdW50ICovCisjZGVmaW5lIE1JU0MxX0RNQV9ERUJVR19PUFRJT05TX1JFRyAgICAweDAwMDAwYzk4IC8qIERNQSBEZWJ1ZyBPcHRpb25zIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JU0MxX1JFQURfQ0hBTk5FTF9FUlJPUl9TVEFUVVMgMHgwMDAwMGM5YyAvKiBSZWFkIENoYW5uZWwgRXJyb3IgU3RhdHVzICovCisjZGVmaW5lIE1JU0MxX1BDSUVfRE1BX0NUUkwgICAgICAgICAgICAweDAwMDAwY2EwIC8qIFBDSUUgRE1BIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQkNNNzAwMTJfTUlTQ19UT1BfTUlTQzIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIE1JU0MyX0dMT0JBTF9DVFJMICAgICAgICAgICAgICAweDAwMDAwZDAwIC8qIEdsb2JhbCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JU0MyX0lOVEVSTkFMX1NUQVRVUyAgICAgICAgICAweDAwMDAwZDA0IC8qIEludGVybmFsIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBNSVNDMl9JTlRFUk5BTF9TVEFUVVNfTVVYX0NUUkwgMHgwMDAwMGQwOCAvKiBJbnRlcm5hbCBEZWJ1ZyBNdXggQ29udHJvbCAqLworI2RlZmluZSBNSVNDMl9ERUJVR19GSUZPX0xFTkdUSCAgICAgICAgMHgwMDAwMGQwYyAvKiBEZWJ1ZyBGSUZPIExlbmd0aCAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCQ003MDAxMl9NSVNDX1RPUF9NSVNDMworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgTUlTQzNfUkVTRVRfQ1RSTCAgICAgICAgICAgICAgIDB4MDAwMDBlMDAgLyogUmVzZXQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNSVNDM19CSVNUX0NUUkwgICAgICAgICAgICAgICAgMHgwMDAwMGUwNCAvKiBCSVNUIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlTQzNfQklTVF9TVEFUVVMgICAgICAgICAgICAgIDB4MDAwMDBlMDggLyogQklTVCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlTQzNfUlhfQ0hFQ0tTVU0gICAgICAgICAgICAgIDB4MDAwMDBlMGMgLyogUmVjZWl2ZSBDaGVja3N1bSAqLworI2RlZmluZSBNSVNDM19UWF9DSEVDS1NVTSAgICAgICAgICAgICAgMHgwMDAwMGUxMCAvKiBUcmFuc21pdCBDaGVja3N1bSAqLworI2RlZmluZSBNSVNDM19FQ09fQ1RSTF9DT1JFICAgICAgICAgICAgMHgwMDAwMGUxNCAvKiBFQ08gQ29yZSBSZXNldCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JU0MzX0NTSV9URVNUX0NUUkwgICAgICAgICAgICAweDAwMDAwZTE4IC8qIENTSSBUZXN0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTUlTQzNfSERfRFZJX1RFU1RfQ1RSTCAgICAgICAgIDB4MDAwMDBlMWMgLyogSEQgRFZJIFRlc3QgQ29udHJvbCBSZWdpc3RlciAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBCQ003MDAxMl9NSVNDX1RPUF9NSVNDX1BFUlNUCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBNSVNDX1BFUlNUX0VDT19DVFJMX1BFUlNUICAgICAgMHgwMDAwMGU4MCAvKiBFQ08gUENJRSBSZXNldCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JU0NfUEVSU1RfREVDT0RFUl9DVFJMICAgICAgICAweDAwMDAwZTg0IC8qIERlY29kZXIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNSVNDX1BFUlNUX0NDRV9TVEFUVVMgICAgICAgICAgMHgwMDAwMGU4OCAvKiBDb25maWcgQ29weSBFbmdpbmUgU3RhdHVzICovCisjZGVmaW5lIE1JU0NfUEVSU1RfUENJRV9ERUJVRyAgICAgICAgICAweDAwMDAwZThjIC8qIFBDSUUgRGVidWcgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBNSVNDX1BFUlNUX1BDSUVfREVCVUdfU1RBVFVTICAgMHgwMDAwMGU5MCAvKiBQQ0lFIERlYnVnIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBNSVNDX1BFUlNUX1ZSRUdfQ1RSTCAgICAgICAgICAgMHgwMDAwMGU5NCAvKiBWb2x0YWdlIFJlZ3VsYXRvciBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JU0NfUEVSU1RfTUVNX0NUUkwgICAgICAgICAgICAweDAwMDAwZTk4IC8qIE1lbW9yeSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE1JU0NfUEVSU1RfQ0xPQ0tfQ1RSTCAgICAgICAgICAweDAwMDAwZTljIC8qIENsb2NrIENvbnRyb2wgUmVnaXN0ZXIgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQkNNNzAwMTJfTUlTQ19UT1BfR0lTQl9BUkJJVEVSCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBHSVNCX0FSQklURVJfUkVWSVNJT04gICAgICAgICAgMHgwMDAwMGYwMCAvKiBHSVNCIEFSQklURVIgUkVWSVNJT04gKi8KKyNkZWZpbmUgR0lTQl9BUkJJVEVSX1NDUkFUQ0ggICAgICAgICAgIDB4MDAwMDBmMDQgLyogR0lTQiBBUkJJVEVSIFNjcmF0Y2ggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0lTQl9BUkJJVEVSX1JFUV9NQVNLICAgICAgICAgIDB4MDAwMDBmMDggLyogR0lTQiBBUkJJVEVSIE1hc3RlciBSZXF1ZXN0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgR0lTQl9BUkJJVEVSX1RJTUVSICAgICAgICAgICAgIDB4MDAwMDBmMGMgLyogR0lTQiBBUkJJVEVSIFRpbWVyIFZhbHVlIFJlZ2lzdGVyICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJDTTcwMDEyX09UUF9UT1BfT1RQCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBPVFBfQ09ORklHX0lORk8gICAgICAgICAgICAgICAgMHgwMDAwMTQwMCAvKiBPVFAgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBPVFBfQ01EICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTQwNCAvKiBPVFAgQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmluZSBPVFBfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMTQwOCAvKiBPVFAgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIE9UUF9DT05URU5UX01JU0MgICAgICAgICAgICAgICAweDAwMDAxNDBjIC8qIENvbnRlbnQgOiBNaXNjZWxsYW5lb3VzIFJlZ2lzdGVyICovCisjZGVmaW5lIE9UUF9DT05URU5UX0FFU18wICAgICAgICAgICAgICAweDAwMDAxNDEwIC8qIENvbnRlbnQgOiBBRVMgS2V5IDAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1RQX0NPTlRFTlRfQUVTXzEgICAgICAgICAgICAgIDB4MDAwMDE0MTQgLyogQ29udGVudCA6IEFFUyBLZXkgMSBSZWdpc3RlciAqLworI2RlZmluZSBPVFBfQ09OVEVOVF9BRVNfMiAgICAgICAgICAgICAgMHgwMDAwMTQxOCAvKiBDb250ZW50IDogQUVTIEtleSAyIFJlZ2lzdGVyICovCisjZGVmaW5lIE9UUF9DT05URU5UX0FFU18zICAgICAgICAgICAgICAweDAwMDAxNDFjIC8qIENvbnRlbnQgOiBBRVMgS2V5IDMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1RQX0NPTlRFTlRfU0hBXzAgICAgICAgICAgICAgIDB4MDAwMDE0MjAgLyogQ29udGVudCA6IFNIQSBLZXkgMCBSZWdpc3RlciAqLworI2RlZmluZSBPVFBfQ09OVEVOVF9TSEFfMSAgICAgICAgICAgICAgMHgwMDAwMTQyNCAvKiBDb250ZW50IDogU0hBIEtleSAxIFJlZ2lzdGVyICovCisjZGVmaW5lIE9UUF9DT05URU5UX1NIQV8yICAgICAgICAgICAgICAweDAwMDAxNDI4IC8qIENvbnRlbnQgOiBTSEEgS2V5IDIgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1RQX0NPTlRFTlRfU0hBXzMgICAgICAgICAgICAgIDB4MDAwMDE0MmMgLyogQ29udGVudCA6IFNIQSBLZXkgMyBSZWdpc3RlciAqLworI2RlZmluZSBPVFBfQ09OVEVOVF9TSEFfNCAgICAgICAgICAgICAgMHgwMDAwMTQzMCAvKiBDb250ZW50IDogU0hBIEtleSA0IFJlZ2lzdGVyICovCisjZGVmaW5lIE9UUF9DT05URU5UX1NIQV81ICAgICAgICAgICAgICAweDAwMDAxNDM0IC8qIENvbnRlbnQgOiBTSEEgS2V5IDUgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1RQX0NPTlRFTlRfU0hBXzYgICAgICAgICAgICAgIDB4MDAwMDE0MzggLyogQ29udGVudCA6IFNIQSBLZXkgNiBSZWdpc3RlciAqLworI2RlZmluZSBPVFBfQ09OVEVOVF9TSEFfNyAgICAgICAgICAgICAgMHgwMDAwMTQzYyAvKiBDb250ZW50IDogU0hBIEtleSA3IFJlZ2lzdGVyICovCisjZGVmaW5lIE9UUF9DT05URU5UX0NIRUNLU1VNICAgICAgICAgICAweDAwMDAxNDQwIC8qIENvbnRlbnQgOiBDaGVja3N1bSAgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1RQX1BST0dfQ1RSTCAgICAgICAgICAgICAgICAgIDB4MDAwMDE0NDQgLyogUHJvZ3JhbW1pbmcgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBPVFBfUFJPR19TVEFUVVMgICAgICAgICAgICAgICAgMHgwMDAwMTQ0OCAvKiBQcm9ncmFtbWluZyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1RQX1BST0dfUFVMU0UgICAgICAgICAgICAgICAgIDB4MDAwMDE0NGMgLyogUHJvZ3JhbSBQdWxzZSBXaWR0aCBSZWdpc3RlciAqLworI2RlZmluZSBPVFBfVkVSSUZZX1BVTFNFICAgICAgICAgICAgICAgMHgwMDAwMTQ1MCAvKiBWZXJpZnkgUHVsc2UgV2lkdGggUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1RQX1BST0dfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDE0NTQgLyogUHJvZ3JhbSBNYXNrIFJlZ2lzdGVyICovCisjZGVmaW5lIE9UUF9EQVRBX0lOUFVUICAgICAgICAgICAgICAgICAweDAwMDAxNDU4IC8qIERhdGEgSW5wdXQgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgT1RQX0RBVEFfT1VUUFVUICAgICAgICAgICAgICAgIDB4MDAwMDE0NWMgLyogRGF0YSBPdXRwdXQgUmVnaXN0ZXIgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQkNNNzAwMTJfQUVTX1RPUF9BRVMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEFFU19DT05GSUdfSU5GTyAgICAgICAgICAgICAgICAweDAwMDAxODAwIC8qIEFFUyBDb25maWd1cmF0aW9uIEluZm9ybWF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIEFFU19DTUQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAxODA0IC8qIEFFUyBDb21tYW5kIFJlZ2lzdGVyICovCisjZGVmaW5lIEFFU19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAweDAwMDAxODA4IC8qIEFFUyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgQUVTX0VFUFJPTV9DT05GSUcgICAgICAgICAgICAgIDB4MDAwMDE4MGMgLyogQUVTIEVFUFJPTSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIEFFU19FRVBST01fREFUQV8wICAgICAgICAgICAgICAweDAwMDAxODEwIC8qIEFFUyBFRVBST00gRGF0YSBSZWdpc3RlciAwICovCisjZGVmaW5lIEFFU19FRVBST01fREFUQV8xICAgICAgICAgICAgICAweDAwMDAxODE0IC8qIEFFUyBFRVBST00gRGF0YSBSZWdpc3RlciAxICovCisjZGVmaW5lIEFFU19FRVBST01fREFUQV8yICAgICAgICAgICAgICAweDAwMDAxODE4IC8qIEFFUyBFRVBST00gRGF0YSBSZWdpc3RlciAyICovCisjZGVmaW5lIEFFU19FRVBST01fREFUQV8zICAgICAgICAgICAgICAweDAwMDAxODFjIC8qIEFFUyBFRVBST00gRGF0YSBSZWdpc3RlciAzICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEJDTTcwMDEyX0RDSV9UT1BfRENJCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBEQ0lfQ01EICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMWMwMCAvKiBEQ0kgQ29tbWFuZCBSZWdpc3RlciAqLworI2RlZmluZSBEQ0lfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMWMwNCAvKiBEQ0kgU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIERDSV9EUkFNX0JBU0VfQUREUiAgICAgICAgICAgICAweDAwMDAxYzA4IC8qIERSQU0gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisjZGVmaW5lIERDSV9GSVJNV0FSRV9BRERSICAgICAgICAgICAgICAweDAwMDAxYzBjIC8qIEZpcm13YXJlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgRENJX0ZJUk1XQVJFX0RBVEEgICAgICAgICAgICAgIDB4MDAwMDFjMTAgLyogRmlybXdhcmUgRGF0YSBSZWdpc3RlciAqLworI2RlZmluZSBEQ0lfU0lHTkFUVVJFX0RBVEFfMCAgICAgICAgICAgMHgwMDAwMWMxNCAvKiBTaWduYXR1cmUgRGF0YSBSZWdpc3RlciAwICovCisjZGVmaW5lIERDSV9TSUdOQVRVUkVfREFUQV8xICAgICAgICAgICAweDAwMDAxYzE4IC8qIFNpZ25hdHVyZSBEYXRhIFJlZ2lzdGVyIDEgKi8KKyNkZWZpbmUgRENJX1NJR05BVFVSRV9EQVRBXzIgICAgICAgICAgIDB4MDAwMDFjMWMgLyogU2lnbmF0dXJlIERhdGEgUmVnaXN0ZXIgMiAqLworI2RlZmluZSBEQ0lfU0lHTkFUVVJFX0RBVEFfMyAgICAgICAgICAgMHgwMDAwMWMyMCAvKiBTaWduYXR1cmUgRGF0YSBSZWdpc3RlciAzICovCisjZGVmaW5lIERDSV9TSUdOQVRVUkVfREFUQV80ICAgICAgICAgICAweDAwMDAxYzI0IC8qIFNpZ25hdHVyZSBEYXRhIFJlZ2lzdGVyIDQgKi8KKyNkZWZpbmUgRENJX1NJR05BVFVSRV9EQVRBXzUgICAgICAgICAgIDB4MDAwMDFjMjggLyogU2lnbmF0dXJlIERhdGEgUmVnaXN0ZXIgNSAqLworI2RlZmluZSBEQ0lfU0lHTkFUVVJFX0RBVEFfNiAgICAgICAgICAgMHgwMDAwMWMyYyAvKiBTaWduYXR1cmUgRGF0YSBSZWdpc3RlciA2ICovCisjZGVmaW5lIERDSV9TSUdOQVRVUkVfREFUQV83ICAgICAgICAgICAweDAwMDAxYzMwIC8qIFNpZ25hdHVyZSBEYXRhIFJlZ2lzdGVyIDcgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQkNNNzAwMTJfVEdUX1RPUF9JTlRSCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIElOVFIgOjogSU5UUl9TVEFUVVMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBJTlRSIDo6IElOVFJfU1RBVFVTIDo6IHJlc2VydmVkMCBbMzE6MjZdICovCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfcmVzZXJ2ZWQwX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmYzAwMDAwMAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX3Jlc2VydmVkMF9BTElHTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19yZXNlcnZlZDBfQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICA2CisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfcmVzZXJ2ZWQwX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYKKworLyogSU5UUiA6OiBJTlRSX1NUQVRVUyA6OiBQQ0lFX1RHVF9DQV9BVFROIFsyNToyNV0gKi8KKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19QQ0lFX1RHVF9DQV9BVFROX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAyMDAwMDAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfUENJRV9UR1RfQ0FfQVRUTl9BTElHTiAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX1BDSUVfVEdUX0NBX0FUVE5fQklUUyAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19QQ0lFX1RHVF9DQV9BVFROX1NISUZUICAgICAgICAgICAgICAgICAgICAyNQorCisvKiBJTlRSIDo6IElOVFJfU1RBVFVTIDo6IFBDSUVfVEdUX1VSX0FUVE4gWzI0OjI0XSAqLworI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX1BDSUVfVEdUX1VSX0FUVE5fTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19QQ0lFX1RHVF9VUl9BVFROX0FMSUdOICAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfUENJRV9UR1RfVVJfQVRUTl9CSVRTICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX1BDSUVfVEdUX1VSX0FUVE5fU0hJRlQgICAgICAgICAgICAgICAgICAgIDI0CisKKy8qIElOVFIgOjogSU5UUl9TVEFUVVMgOjogcmVzZXJ2ZWQxIFsyMzoxNF0gKi8KKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19yZXNlcnZlZDFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwZmZjMDAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfcmVzZXJ2ZWQxX0FMSUdOICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX3Jlc2VydmVkMV9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfcmVzZXJ2ZWQxX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQKKworLyogSU5UUiA6OiBJTlRSX1NUQVRVUyA6OiBMMV9VVl9SWF9ETUFfRVJSX0lOVFIgWzEzOjEzXSAqLworI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wxX1VWX1JYX0RNQV9FUlJfSU5UUl9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDIwMDAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMV9VVl9SWF9ETUFfRVJSX0lOVFJfQUxJR04gICAgICAgICAgICAgICAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDFfVVZfUlhfRE1BX0VSUl9JTlRSX0JJVFMgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wxX1VWX1JYX0RNQV9FUlJfSU5UUl9TSElGVCAgICAgICAgICAgICAgIDEzCisKKy8qIElOVFIgOjogSU5UUl9TVEFUVVMgOjogTDFfVVZfUlhfRE1BX0RPTkVfSU5UUiBbMTI6MTJdICovCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDFfVVZfUlhfRE1BX0RPTkVfSU5UUl9NQVNLICAgICAgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wxX1VWX1JYX0RNQV9ET05FX0lOVFJfQUxJR04gICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMV9VVl9SWF9ETUFfRE9ORV9JTlRSX0JJVFMgICAgICAgICAgICAgICAxCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDFfVVZfUlhfRE1BX0RPTkVfSU5UUl9TSElGVCAgICAgICAgICAgICAgMTIKKworLyogSU5UUiA6OiBJTlRSX1NUQVRVUyA6OiBMMV9ZX1JYX0RNQV9FUlJfSU5UUiBbMTE6MTFdICovCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDFfWV9SWF9ETUFfRVJSX0lOVFJfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wxX1lfUlhfRE1BX0VSUl9JTlRSX0FMSUdOICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMV9ZX1JYX0RNQV9FUlJfSU5UUl9CSVRTICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDFfWV9SWF9ETUFfRVJSX0lOVFJfU0hJRlQgICAgICAgICAgICAgICAgMTEKKworLyogSU5UUiA6OiBJTlRSX1NUQVRVUyA6OiBMMV9ZX1JYX0RNQV9ET05FX0lOVFIgWzEwOjEwXSAqLworI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wxX1lfUlhfRE1BX0RPTkVfSU5UUl9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMDA0MDAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMV9ZX1JYX0RNQV9ET05FX0lOVFJfQUxJR04gICAgICAgICAgICAgICAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDFfWV9SWF9ETUFfRE9ORV9JTlRSX0JJVFMgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wxX1lfUlhfRE1BX0RPTkVfSU5UUl9TSElGVCAgICAgICAgICAgICAgIDEwCisKKy8qIElOVFIgOjogSU5UUl9TVEFUVVMgOjogTDFfVFhfRE1BX0VSUl9JTlRSIFswOTowOV0gKi8KKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMV9UWF9ETUFfRVJSX0lOVFJfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDFfVFhfRE1BX0VSUl9JTlRSX0FMSUdOICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wxX1RYX0RNQV9FUlJfSU5UUl9CSVRTICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMV9UWF9ETUFfRVJSX0lOVFJfU0hJRlQgICAgICAgICAgICAgICAgICA5CisKKy8qIElOVFIgOjogSU5UUl9TVEFUVVMgOjogTDFfVFhfRE1BX0RPTkVfSU5UUiBbMDg6MDhdICovCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDFfVFhfRE1BX0RPTkVfSU5UUl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wxX1RYX0RNQV9ET05FX0lOVFJfQUxJR04gICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMV9UWF9ETUFfRE9ORV9JTlRSX0JJVFMgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDFfVFhfRE1BX0RPTkVfSU5UUl9TSElGVCAgICAgICAgICAgICAgICAgOAorCisvKiBJTlRSIDo6IElOVFJfU1RBVFVTIDo6IHJlc2VydmVkMiBbMDc6MDZdICovCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfcmVzZXJ2ZWQyX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBjMAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX3Jlc2VydmVkMl9BTElHTiAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19yZXNlcnZlZDJfQklUUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfcmVzZXJ2ZWQyX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgNgorCisvKiBJTlRSIDo6IElOVFJfU1RBVFVTIDo6IEwwX1VWX1JYX0RNQV9FUlJfSU5UUiBbMDU6MDVdICovCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDBfVVZfUlhfRE1BX0VSUl9JTlRSX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wwX1VWX1JYX0RNQV9FUlJfSU5UUl9BTElHTiAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMF9VVl9SWF9ETUFfRVJSX0lOVFJfQklUUyAgICAgICAgICAgICAgICAxCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDBfVVZfUlhfRE1BX0VSUl9JTlRSX1NISUZUICAgICAgICAgICAgICAgNQorCisvKiBJTlRSIDo6IElOVFJfU1RBVFVTIDo6IEwwX1VWX1JYX0RNQV9ET05FX0lOVFIgWzA0OjA0XSAqLworI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wwX1VWX1JYX0RNQV9ET05FX0lOVFJfTUFTSyAgICAgICAgICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMF9VVl9SWF9ETUFfRE9ORV9JTlRSX0FMSUdOICAgICAgICAgICAgICAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDBfVVZfUlhfRE1BX0RPTkVfSU5UUl9CSVRTICAgICAgICAgICAgICAgMQorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wwX1VWX1JYX0RNQV9ET05FX0lOVFJfU0hJRlQgICAgICAgICAgICAgIDQKKworLyogSU5UUiA6OiBJTlRSX1NUQVRVUyA6OiBMMF9ZX1JYX0RNQV9FUlJfSU5UUiBbMDM6MDNdICovCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDBfWV9SWF9ETUFfRVJSX0lOVFJfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wwX1lfUlhfRE1BX0VSUl9JTlRSX0FMSUdOICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMF9ZX1JYX0RNQV9FUlJfSU5UUl9CSVRTICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDBfWV9SWF9ETUFfRVJSX0lOVFJfU0hJRlQgICAgICAgICAgICAgICAgMworCisvKiBJTlRSIDo6IElOVFJfU1RBVFVTIDo6IEwwX1lfUlhfRE1BX0RPTkVfSU5UUiBbMDI6MDJdICovCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDBfWV9SWF9ETUFfRE9ORV9JTlRSX01BU0sgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wwX1lfUlhfRE1BX0RPTkVfSU5UUl9BTElHTiAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMF9ZX1JYX0RNQV9ET05FX0lOVFJfQklUUyAgICAgICAgICAgICAgICAxCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDBfWV9SWF9ETUFfRE9ORV9JTlRSX1NISUZUICAgICAgICAgICAgICAgMgorCisvKiBJTlRSIDo6IElOVFJfU1RBVFVTIDo6IEwwX1RYX0RNQV9FUlJfSU5UUiBbMDE6MDFdICovCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDBfVFhfRE1BX0VSUl9JTlRSX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wwX1RYX0RNQV9FUlJfSU5UUl9BTElHTiAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMF9UWF9ETUFfRVJSX0lOVFJfQklUUyAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDBfVFhfRE1BX0VSUl9JTlRSX1NISUZUICAgICAgICAgICAgICAgICAgMQorCisvKiBJTlRSIDo6IElOVFJfU1RBVFVTIDo6IEwwX1RYX0RNQV9ET05FX0lOVFIgWzAwOjAwXSAqLworI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wwX1RYX0RNQV9ET05FX0lOVFJfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgSU5UUl9JTlRSX1NUQVRVU19MMF9UWF9ETUFfRE9ORV9JTlRSX0FMSUdOICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIElOVFJfSU5UUl9TVEFUVVNfTDBfVFhfRE1BX0RPTkVfSU5UUl9CSVRTICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBJTlRSX0lOVFJfU1RBVFVTX0wwX1RYX0RNQV9ET05FX0lOVFJfU0hJRlQgICAgICAgICAgICAgICAgIDAKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogTUlTQzEgOjogVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogTUlTQzEgOjogVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTIDo6IHJlc2VydmVkMCBbMzE6MDRdICovCisjZGVmaW5lIE1JU0MxX1RYX1NXX0RFU0NfTElTVF9DVFJMX1NUU19yZXNlcnZlZDBfTUFTSyAgICAgICAgICAgICAgMHhmZmZmZmZmMAorI2RlZmluZSBNSVNDMV9UWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFNfcmVzZXJ2ZWQwX0FMSUdOICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTX3Jlc2VydmVkMF9CSVRTICAgICAgICAgICAgICAyOAorI2RlZmluZSBNSVNDMV9UWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFNfcmVzZXJ2ZWQwX1NISUZUICAgICAgICAgICAgIDQKKworLyogTUlTQzEgOjogVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTIDo6IERNQV9EQVRBX1NFUlZfUFRSIFswMzowM10gKi8KKyNkZWZpbmUgTUlTQzFfVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTX0RNQV9EQVRBX1NFUlZfUFRSX01BU0sgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIE1JU0MxX1RYX1NXX0RFU0NfTElTVF9DVFJMX1NUU19ETUFfREFUQV9TRVJWX1BUUl9BTElHTiAgICAgMAorI2RlZmluZSBNSVNDMV9UWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFNfRE1BX0RBVEFfU0VSVl9QVFJfQklUUyAgICAgIDEKKyNkZWZpbmUgTUlTQzFfVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTX0RNQV9EQVRBX1NFUlZfUFRSX1NISUZUICAgICAzCisKKy8qIE1JU0MxIDo6IFRYX1NXX0RFU0NfTElTVF9DVFJMX1NUUyA6OiBERVNDX1NFUlZfUFRSIFswMjowMl0gKi8KKyNkZWZpbmUgTUlTQzFfVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTX0RFU0NfU0VSVl9QVFJfTUFTSyAgICAgICAgICAweDAwMDAwMDA0CisjZGVmaW5lIE1JU0MxX1RYX1NXX0RFU0NfTElTVF9DVFJMX1NUU19ERVNDX1NFUlZfUFRSX0FMSUdOICAgICAgICAgMAorI2RlZmluZSBNSVNDMV9UWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFNfREVTQ19TRVJWX1BUUl9CSVRTICAgICAgICAgIDEKKyNkZWZpbmUgTUlTQzFfVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTX0RFU0NfU0VSVl9QVFJfU0hJRlQgICAgICAgICAyCisKKy8qIE1JU0MxIDo6IFRYX1NXX0RFU0NfTElTVF9DVFJMX1NUUyA6OiBUWF9ETUFfSEFMVF9PTl9FUlJPUiBbMDE6MDFdICovCisjZGVmaW5lIE1JU0MxX1RYX1NXX0RFU0NfTElTVF9DVFJMX1NUU19UWF9ETUFfSEFMVF9PTl9FUlJPUl9NQVNLICAgMHgwMDAwMDAwMgorI2RlZmluZSBNSVNDMV9UWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFNfVFhfRE1BX0hBTFRfT05fRVJST1JfQUxJR04gIDAKKyNkZWZpbmUgTUlTQzFfVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTX1RYX0RNQV9IQUxUX09OX0VSUk9SX0JJVFMgICAxCisjZGVmaW5lIE1JU0MxX1RYX1NXX0RFU0NfTElTVF9DVFJMX1NUU19UWF9ETUFfSEFMVF9PTl9FUlJPUl9TSElGVCAgMQorCisvKiBNSVNDMSA6OiBUWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFMgOjogVFhfRE1BX1JVTl9TVE9QIFswMDowMF0gKi8KKyNkZWZpbmUgTUlTQzFfVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTX1RYX0RNQV9SVU5fU1RPUF9NQVNLICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE1JU0MxX1RYX1NXX0RFU0NfTElTVF9DVFJMX1NUU19UWF9ETUFfUlVOX1NUT1BfQUxJR04gICAgICAgMAorI2RlZmluZSBNSVNDMV9UWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFNfVFhfRE1BX1JVTl9TVE9QX0JJVFMgICAgICAgIDEKKyNkZWZpbmUgTUlTQzFfVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTX1RYX0RNQV9SVU5fU1RPUF9TSElGVCAgICAgICAwCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE1JU0MxIDo6IFRYX0RNQV9FUlJPUl9TVEFUVVMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBNSVNDMSA6OiBUWF9ETUFfRVJST1JfU1RBVFVTIDo6IHJlc2VydmVkMCBbMzE6MTBdICovCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQwX01BU0sgICAgICAgICAgICAgICAgICAgMHhmZmZmZmMwMAorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX3Jlc2VydmVkMF9BTElHTiAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19yZXNlcnZlZDBfQklUUyAgICAgICAgICAgICAgICAgICAyMgorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX3Jlc2VydmVkMF9TSElGVCAgICAgICAgICAgICAgICAgIDEwCisKKy8qIE1JU0MxIDo6IFRYX0RNQV9FUlJPUl9TVEFUVVMgOjogVFhfTDFfREVTQ19UWF9BQk9SVF9FUlJPUlMgWzA5OjA5XSAqLworI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wxX0RFU0NfVFhfQUJPUlRfRVJST1JTX01BU0sgIDB4MDAwMDAyMDAKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMV9ERVNDX1RYX0FCT1JUX0VSUk9SU19BTElHTiAwCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDFfREVTQ19UWF9BQk9SVF9FUlJPUlNfQklUUyAgMQorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wxX0RFU0NfVFhfQUJPUlRfRVJST1JTX1NISUZUIDkKKworLyogTUlTQzEgOjogVFhfRE1BX0VSUk9SX1NUQVRVUyA6OiByZXNlcnZlZDEgWzA4OjA4XSAqLworI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX3Jlc2VydmVkMV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19yZXNlcnZlZDFfQUxJR04gICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQxX0JJVFMgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX3Jlc2VydmVkMV9TSElGVCAgICAgICAgICAgICAgICAgIDgKKworLyogTUlTQzEgOjogVFhfRE1BX0VSUk9SX1NUQVRVUyA6OiBUWF9MMF9ERVNDX1RYX0FCT1JUX0VSUk9SUyBbMDc6MDddICovCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDBfREVTQ19UWF9BQk9SVF9FUlJPUlNfTUFTSyAgMHgwMDAwMDA4MAorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wwX0RFU0NfVFhfQUJPUlRfRVJST1JTX0FMSUdOIDAKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMF9ERVNDX1RYX0FCT1JUX0VSUk9SU19CSVRTICAxCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDBfREVTQ19UWF9BQk9SVF9FUlJPUlNfU0hJRlQgNworCisvKiBNSVNDMSA6OiBUWF9ETUFfRVJST1JfU1RBVFVTIDo6IHJlc2VydmVkMiBbMDY6MDZdICovCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQyX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA0MAorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX3Jlc2VydmVkMl9BTElHTiAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19yZXNlcnZlZDJfQklUUyAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQyX1NISUZUICAgICAgICAgICAgICAgICAgNgorCisvKiBNSVNDMSA6OiBUWF9ETUFfRVJST1JfU1RBVFVTIDo6IFRYX0wxX0RNQV9EQVRBX1RYX0FCT1JUX0VSUk9SUyBbMDU6MDVdICovCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDFfRE1BX0RBVEFfVFhfQUJPUlRfRVJST1JTX01BU0sgMHgwMDAwMDAyMAorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wxX0RNQV9EQVRBX1RYX0FCT1JUX0VSUk9SU19BTElHTiAwCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDFfRE1BX0RBVEFfVFhfQUJPUlRfRVJST1JTX0JJVFMgMQorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wxX0RNQV9EQVRBX1RYX0FCT1JUX0VSUk9SU19TSElGVCA1CisKKy8qIE1JU0MxIDo6IFRYX0RNQV9FUlJPUl9TVEFUVVMgOjogVFhfTDFfRklGT19GVUxMX0VSUk9SUyBbMDQ6MDRdICovCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDFfRklGT19GVUxMX0VSUk9SU19NQVNLICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wxX0ZJRk9fRlVMTF9FUlJPUlNfQUxJR04gICAgIDAKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMV9GSUZPX0ZVTExfRVJST1JTX0JJVFMgICAgICAxCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDFfRklGT19GVUxMX0VSUk9SU19TSElGVCAgICAgNAorCisvKiBNSVNDMSA6OiBUWF9ETUFfRVJST1JfU1RBVFVTIDo6IHJlc2VydmVkMyBbMDM6MDNdICovCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQzX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX3Jlc2VydmVkM19BTElHTiAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19yZXNlcnZlZDNfQklUUyAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQzX1NISUZUICAgICAgICAgICAgICAgICAgMworCisvKiBNSVNDMSA6OiBUWF9ETUFfRVJST1JfU1RBVFVTIDo6IFRYX0wwX0RNQV9EQVRBX1RYX0FCT1JUX0VSUk9SUyBbMDI6MDJdICovCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDBfRE1BX0RBVEFfVFhfQUJPUlRfRVJST1JTX01BU0sgMHgwMDAwMDAwNAorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wwX0RNQV9EQVRBX1RYX0FCT1JUX0VSUk9SU19BTElHTiAwCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDBfRE1BX0RBVEFfVFhfQUJPUlRfRVJST1JTX0JJVFMgMQorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wwX0RNQV9EQVRBX1RYX0FCT1JUX0VSUk9SU19TSElGVCAyCisKKy8qIE1JU0MxIDo6IFRYX0RNQV9FUlJPUl9TVEFUVVMgOjogVFhfTDBfRklGT19GVUxMX0VSUk9SUyBbMDE6MDFdICovCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDBfRklGT19GVUxMX0VSUk9SU19NQVNLICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wwX0ZJRk9fRlVMTF9FUlJPUlNfQUxJR04gICAgIDAKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMF9GSUZPX0ZVTExfRVJST1JTX0JJVFMgICAgICAxCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDBfRklGT19GVUxMX0VSUk9SU19TSElGVCAgICAgMQorCisvKiBNSVNDMSA6OiBUWF9ETUFfRVJST1JfU1RBVFVTIDo6IHJlc2VydmVkNCBbMDA6MDBdICovCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQ0X01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX3Jlc2VydmVkNF9BTElHTiAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19yZXNlcnZlZDRfQklUUyAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQ0X1NISUZUICAgICAgICAgICAgICAgICAgMAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNSVNDMSA6OiBZX1JYX0VSUk9SX1NUQVRVUworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIE1JU0MxIDo6IFlfUlhfRVJST1JfU1RBVFVTIDo6IHJlc2VydmVkMCBbMzE6MTRdICovCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkMF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHhmZmZmYzAwMAorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDBfQUxJR04gICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQwX0JJVFMgICAgICAgICAgICAgICAgICAgICAxOAorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDBfU0hJRlQgICAgICAgICAgICAgICAgICAgIDE0CisKKy8qIE1JU0MxIDo6IFlfUlhfRVJST1JfU1RBVFVTIDo6IFJYX0wxX1VOREVSUlVOX0VSUk9SIFsxMzoxM10gKi8KKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfVU5ERVJSVU5fRVJST1JfTUFTSyAgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wxX1VOREVSUlVOX0VSUk9SX0FMSUdOICAgICAgICAgMAorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9VTkRFUlJVTl9FUlJPUl9CSVRTICAgICAgICAgIDEKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfVU5ERVJSVU5fRVJST1JfU0hJRlQgICAgICAgICAxMworCisvKiBNSVNDMSA6OiBZX1JYX0VSUk9SX1NUQVRVUyA6OiBSWF9MMV9PVkVSUlVOX0VSUk9SIFsxMjoxMl0gKi8KKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfT1ZFUlJVTl9FUlJPUl9NQVNLICAgICAgICAgICAweDAwMDAxMDAwCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wxX09WRVJSVU5fRVJST1JfQUxJR04gICAgICAgICAgMAorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9PVkVSUlVOX0VSUk9SX0JJVFMgICAgICAgICAgIDEKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfT1ZFUlJVTl9FUlJPUl9TSElGVCAgICAgICAgICAxMgorCisvKiBNSVNDMSA6OiBZX1JYX0VSUk9SX1NUQVRVUyA6OiBSWF9MMF9VTkRFUlJVTl9FUlJPUiBbMTE6MTFdICovCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wwX1VOREVSUlVOX0VSUk9SX01BU0sgICAgICAgICAgMHgwMDAwMDgwMAorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9VTkRFUlJVTl9FUlJPUl9BTElHTiAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfVU5ERVJSVU5fRVJST1JfQklUUyAgICAgICAgICAxCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wwX1VOREVSUlVOX0VSUk9SX1NISUZUICAgICAgICAgMTEKKworLyogTUlTQzEgOjogWV9SWF9FUlJPUl9TVEFUVVMgOjogUlhfTDBfT1ZFUlJVTl9FUlJPUiBbMTA6MTBdICovCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wwX09WRVJSVU5fRVJST1JfTUFTSyAgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9PVkVSUlVOX0VSUk9SX0FMSUdOICAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfT1ZFUlJVTl9FUlJPUl9CSVRTICAgICAgICAgICAxCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wwX09WRVJSVU5fRVJST1JfU0hJRlQgICAgICAgICAgMTAKKworLyogTUlTQzEgOjogWV9SWF9FUlJPUl9TVEFUVVMgOjogUlhfTDFfREVTQ19UWF9BQk9SVF9FUlJPUlMgWzA5OjA5XSAqLworI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9ERVNDX1RYX0FCT1JUX0VSUk9SU19NQVNLICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfREVTQ19UWF9BQk9SVF9FUlJPUlNfQUxJR04gICAwCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wxX0RFU0NfVFhfQUJPUlRfRVJST1JTX0JJVFMgICAgMQorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9ERVNDX1RYX0FCT1JUX0VSUk9SU19TSElGVCAgIDkKKworLyogTUlTQzEgOjogWV9SWF9FUlJPUl9TVEFUVVMgOjogcmVzZXJ2ZWQxIFswODowOF0gKi8KKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQxX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMTAwCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkMV9BTElHTiAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDFfQklUUyAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQxX1NISUZUICAgICAgICAgICAgICAgICAgICA4CisKKy8qIE1JU0MxIDo6IFlfUlhfRVJST1JfU1RBVFVTIDo6IFJYX0wwX0RFU0NfVFhfQUJPUlRfRVJST1JTIFswNzowN10gKi8KKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfREVTQ19UWF9BQk9SVF9FUlJPUlNfTUFTSyAgICAweDAwMDAwMDgwCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wwX0RFU0NfVFhfQUJPUlRfRVJST1JTX0FMSUdOICAgMAorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9ERVNDX1RYX0FCT1JUX0VSUk9SU19CSVRTICAgIDEKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfREVTQ19UWF9BQk9SVF9FUlJPUlNfU0hJRlQgICA3CisKKy8qIE1JU0MxIDo6IFlfUlhfRVJST1JfU1RBVFVTIDo6IHJlc2VydmVkMiBbMDY6MDVdICovCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkMl9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDA2MAorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDJfQUxJR04gICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQyX0JJVFMgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkMl9TSElGVCAgICAgICAgICAgICAgICAgICAgNQorCisvKiBNSVNDMSA6OiBZX1JYX0VSUk9SX1NUQVRVUyA6OiBSWF9MMV9GSUZPX0ZVTExfRVJST1JTIFswNDowNF0gKi8KKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfRklGT19GVUxMX0VSUk9SU19NQVNLICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wxX0ZJRk9fRlVMTF9FUlJPUlNfQUxJR04gICAgICAgMAorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9GSUZPX0ZVTExfRVJST1JTX0JJVFMgICAgICAgIDEKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfRklGT19GVUxMX0VSUk9SU19TSElGVCAgICAgICA0CisKKy8qIE1JU0MxIDo6IFlfUlhfRVJST1JfU1RBVFVTIDo6IHJlc2VydmVkMyBbMDM6MDJdICovCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkM19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYworI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDNfQUxJR04gICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQzX0JJVFMgICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkM19TSElGVCAgICAgICAgICAgICAgICAgICAgMgorCisvKiBNSVNDMSA6OiBZX1JYX0VSUk9SX1NUQVRVUyA6OiBSWF9MMF9GSUZPX0ZVTExfRVJST1JTIFswMTowMV0gKi8KKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfRklGT19GVUxMX0VSUk9SU19NQVNLICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wwX0ZJRk9fRlVMTF9FUlJPUlNfQUxJR04gICAgICAgMAorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9GSUZPX0ZVTExfRVJST1JTX0JJVFMgICAgICAgIDEKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfRklGT19GVUxMX0VSUk9SU19TSElGVCAgICAgICAxCisKKy8qIE1JU0MxIDo6IFlfUlhfRVJST1JfU1RBVFVTIDo6IHJlc2VydmVkNCBbMDA6MDBdICovCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkNF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDRfQUxJR04gICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQ0X0JJVFMgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkNF9TSElGVCAgICAgICAgICAgICAgICAgICAgMAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBNSVNDMSA6OiBVVl9SWF9FUlJPUl9TVEFUVVMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBNSVNDMSA6OiBVVl9SWF9FUlJPUl9TVEFUVVMgOjogcmVzZXJ2ZWQwIFszMToxNF0gKi8KKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkMF9NQVNLICAgICAgICAgICAgICAgICAgICAweGZmZmZjMDAwCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDBfQUxJR04gICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQwX0JJVFMgICAgICAgICAgICAgICAgICAgIDE4CisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDBfU0hJRlQgICAgICAgICAgICAgICAgICAgMTQKKworLyogTUlTQzEgOjogVVZfUlhfRVJST1JfU1RBVFVTIDo6IFJYX0wxX1VOREVSUlVOX0VSUk9SIFsxMzoxM10gKi8KKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wxX1VOREVSUlVOX0VSUk9SX01BU0sgICAgICAgICAweDAwMDAyMDAwCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9VTkRFUlJVTl9FUlJPUl9BTElHTiAgICAgICAgMAorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfVU5ERVJSVU5fRVJST1JfQklUUyAgICAgICAgIDEKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wxX1VOREVSUlVOX0VSUk9SX1NISUZUICAgICAgICAxMworCisvKiBNSVNDMSA6OiBVVl9SWF9FUlJPUl9TVEFUVVMgOjogUlhfTDFfT1ZFUlJVTl9FUlJPUiBbMTI6MTJdICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9PVkVSUlVOX0VSUk9SX01BU0sgICAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfT1ZFUlJVTl9FUlJPUl9BTElHTiAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wxX09WRVJSVU5fRVJST1JfQklUUyAgICAgICAgICAxCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9PVkVSUlVOX0VSUk9SX1NISUZUICAgICAgICAgMTIKKworLyogTUlTQzEgOjogVVZfUlhfRVJST1JfU1RBVFVTIDo6IFJYX0wwX1VOREVSUlVOX0VSUk9SIFsxMToxMV0gKi8KKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wwX1VOREVSUlVOX0VSUk9SX01BU0sgICAgICAgICAweDAwMDAwODAwCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9VTkRFUlJVTl9FUlJPUl9BTElHTiAgICAgICAgMAorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfVU5ERVJSVU5fRVJST1JfQklUUyAgICAgICAgIDEKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wwX1VOREVSUlVOX0VSUk9SX1NISUZUICAgICAgICAxMQorCisvKiBNSVNDMSA6OiBVVl9SWF9FUlJPUl9TVEFUVVMgOjogUlhfTDBfT1ZFUlJVTl9FUlJPUiBbMTA6MTBdICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9PVkVSUlVOX0VSUk9SX01BU0sgICAgICAgICAgMHgwMDAwMDQwMAorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfT1ZFUlJVTl9FUlJPUl9BTElHTiAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wwX09WRVJSVU5fRVJST1JfQklUUyAgICAgICAgICAxCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9PVkVSUlVOX0VSUk9SX1NISUZUICAgICAgICAgMTAKKworLyogTUlTQzEgOjogVVZfUlhfRVJST1JfU1RBVFVTIDo6IFJYX0wxX0RFU0NfVFhfQUJPUlRfRVJST1JTIFswOTowOV0gKi8KKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wxX0RFU0NfVFhfQUJPUlRfRVJST1JTX01BU0sgICAweDAwMDAwMjAwCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9ERVNDX1RYX0FCT1JUX0VSUk9SU19BTElHTiAgMAorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfREVTQ19UWF9BQk9SVF9FUlJPUlNfQklUUyAgIDEKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wxX0RFU0NfVFhfQUJPUlRfRVJST1JTX1NISUZUICA5CisKKy8qIE1JU0MxIDo6IFVWX1JYX0VSUk9SX1NUQVRVUyA6OiByZXNlcnZlZDEgWzA4OjA4XSAqLworI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQxX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkMV9BTElHTiAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDFfQklUUyAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQxX1NISUZUICAgICAgICAgICAgICAgICAgIDgKKworLyogTUlTQzEgOjogVVZfUlhfRVJST1JfU1RBVFVTIDo6IFJYX0wwX0RFU0NfVFhfQUJPUlRfRVJST1JTIFswNzowN10gKi8KKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wwX0RFU0NfVFhfQUJPUlRfRVJST1JTX01BU0sgICAweDAwMDAwMDgwCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9ERVNDX1RYX0FCT1JUX0VSUk9SU19BTElHTiAgMAorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfREVTQ19UWF9BQk9SVF9FUlJPUlNfQklUUyAgIDEKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wwX0RFU0NfVFhfQUJPUlRfRVJST1JTX1NISUZUICA3CisKKy8qIE1JU0MxIDo6IFVWX1JYX0VSUk9SX1NUQVRVUyA6OiByZXNlcnZlZDIgWzA2OjA1XSAqLworI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQyX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwNjAKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkMl9BTElHTiAgICAgICAgICAgICAgICAgICAwCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDJfQklUUyAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQyX1NISUZUICAgICAgICAgICAgICAgICAgIDUKKworLyogTUlTQzEgOjogVVZfUlhfRVJST1JfU1RBVFVTIDo6IFJYX0wxX0ZJRk9fRlVMTF9FUlJPUlMgWzA0OjA0XSAqLworI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfRklGT19GVUxMX0VSUk9SU19NQVNLICAgICAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wxX0ZJRk9fRlVMTF9FUlJPUlNfQUxJR04gICAgICAwCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9GSUZPX0ZVTExfRVJST1JTX0JJVFMgICAgICAgMQorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfRklGT19GVUxMX0VSUk9SU19TSElGVCAgICAgIDQKKworLyogTUlTQzEgOjogVVZfUlhfRVJST1JfU1RBVFVTIDo6IHJlc2VydmVkMyBbMDM6MDJdICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDNfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwYworI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQzX0FMSUdOICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkM19CSVRTICAgICAgICAgICAgICAgICAgICAyCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDNfU0hJRlQgICAgICAgICAgICAgICAgICAgMgorCisvKiBNSVNDMSA6OiBVVl9SWF9FUlJPUl9TVEFUVVMgOjogUlhfTDBfRklGT19GVUxMX0VSUk9SUyBbMDE6MDFdICovCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9GSUZPX0ZVTExfRVJST1JTX01BU0sgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfRklGT19GVUxMX0VSUk9SU19BTElHTiAgICAgIDAKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wwX0ZJRk9fRlVMTF9FUlJPUlNfQklUUyAgICAgICAxCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9GSUZPX0ZVTExfRVJST1JTX1NISUZUICAgICAgMQorCisvKiBNSVNDMSA6OiBVVl9SWF9FUlJPUl9TVEFUVVMgOjogcmVzZXJ2ZWQ0IFswMDowMF0gKi8KKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkNF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19yZXNlcnZlZDRfQUxJR04gICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfcmVzZXJ2ZWQ0X0JJVFMgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX3Jlc2VydmVkNF9TSElGVCAgICAgICAgICAgICAgICAgICAwCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBEYXRhdHlwZSBEZWZpbml0aW9ucy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZW5kaWYgLyogI2lmbmRlZiBNQUNGSUxFX0hfXyAqLworCisvKiBFbmQgb2YgRmlsZSAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9jbWRzLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9jbWRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYxNDVhOAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2NtZHMuYwpAQCAtMCwwICsxLDEwNTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5LCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqCisgKiAgTmFtZTogY3J5c3RhbGhkX2NtZHMgLiBjCisgKgorICogIERlc2NyaXB0aW9uOgorICoJCUJDTTcwMDEwIExpbnV4IGRyaXZlciB1c2VyIGNvbW1hbmQgaW50ZXJmYWNlcy4KKyAqCisgKiAgSElTVE9SWToKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGNyeXN0YWxoZCBkZXZpY2UgZHJpdmVyLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBkcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgZHJpdmVyLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJjcnlzdGFsaGRfY21kcy5oIgorI2luY2x1ZGUgImNyeXN0YWxoZF9ody5oIgorCitzdGF0aWMgc3RydWN0IGNyeXN0YWxoZF91c2VyICpiY19jcHJvY19nZXRfdWlkKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgpCit7CisJc3RydWN0IGNyeXN0YWxoZF91c2VyICp1c2VyID0gTlVMTDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBCQ19MSU5LX01BWF9PUEVOUzsgaSsrKSB7CisJCWlmICghY3R4LT51c2VyW2ldLmluX3VzZSkgeworCQkJdXNlciA9ICZjdHgtPnVzZXJbaV07CisJCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiB1c2VyOworfQorCitzdGF0aWMgaW50IGJjX2Nwcm9jX2dldF91c2VyX2NvdW50KHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgpCit7CisJaW50IGksIGNvdW50ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBCQ19MSU5LX01BWF9PUEVOUzsgaSsrKSB7CisJCWlmIChjdHgtPnVzZXJbaV0uaW5fdXNlKQorCQkJY291bnQrKzsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyB2b2lkIGJjX2Nwcm9jX21hcmtfcHdyX3N0YXRlKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQkNfTElOS19NQVhfT1BFTlM7IGkrKykgeworCQlpZiAoIWN0eC0+dXNlcltpXS5pbl91c2UpCisJCQljb250aW51ZTsKKwkJaWYgKGN0eC0+dXNlcltpXS5tb2RlID09IERUU19ESUFHX01PREUgfHwKKwkJICAgIGN0eC0+dXNlcltpXS5tb2RlID09IERUU19QTEFZQkFDS19NT0RFKSB7CisJCQljdHgtPnB3cl9zdGF0ZV9jaGFuZ2UgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2Nfbm90aWZ5X21vZGUoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwKKwkJCQkgICAgICBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqaWRhdGEpCit7CisJaW50IHJjID0gMCwgaSA9IDA7CisKKwlpZiAoIWN0eCB8fCAhaWRhdGEpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmchIVxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlpZiAoY3R4LT51c2VyW2lkYXRhLT51X2lkXS5tb2RlICE9IERUU19NT0RFX0lOVikgeworCQlCQ01MT0dfRVJSKCJDbG9zZSB0aGUgaGFuZGxlIGZpcnN0Li5cbiIpOworCQlyZXR1cm4gQkNfU1RTX0VSUl9VU0FHRTsKKwl9CisJaWYgKGlkYXRhLT51ZGF0YS51Lk5vdGlmeU1vZGUuTW9kZSA9PSBEVFNfTU9OSVRPUl9NT0RFKSB7CisJCWN0eC0+dXNlcltpZGF0YS0+dV9pZF0ubW9kZSA9IGlkYXRhLT51ZGF0YS51Lk5vdGlmeU1vZGUuTW9kZTsKKwkJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworCX0KKwlpZiAoY3R4LT5zdGF0ZSAhPSBCQ19MSU5LX0lOVkFMSUQpIHsKKwkJQkNNTE9HX0VSUigiTGluayBpbnZhbGlkIHN0YXRlICVkIFxuIiwgY3R4LT5zdGF0ZSk7CisJCXJldHVybiBCQ19TVFNfRVJSX1VTQUdFOworCX0KKwkvKiBDaGVjayBmb3IgZHVwbGljYXRlIHBsYXliYWNrIHNlc3Npb25zLi4qLworCWZvciAoaSA9IDA7IGkgPCBCQ19MSU5LX01BWF9PUEVOUzsgaSsrKSB7CisJCWlmIChjdHgtPnVzZXJbaV0ubW9kZSA9PSBEVFNfRElBR19NT0RFIHx8CisJCSAgICBjdHgtPnVzZXJbaV0ubW9kZSA9PSBEVFNfUExBWUJBQ0tfTU9ERSkgeworCQkJQkNNTE9HX0VSUigibXVsdGlwbGUgcGxheWJhY2sgc2Vzc2lvbnMgYXJlIG5vdCAiCisJCQkJICAgInN1cHBvcnRlZC4uXG4iKTsKKwkJCXJldHVybiBCQ19TVFNfRVJSX1VTQUdFOworCQl9CisJfQorCWN0eC0+Y2luX3dhaXRfZXhpdCA9IDA7CisJY3R4LT51c2VyW2lkYXRhLT51X2lkXS5tb2RlID0gaWRhdGEtPnVkYXRhLnUuTm90aWZ5TW9kZS5Nb2RlOworCS8qIFNldHVwIG1tYXAgcG9vbCBmb3IgdWFkZHIgc2dsIG1hcHBpbmcuLiovCisJcmMgPSBjcnlzdGFsaGRfY3JlYXRlX2Rpb19wb29sKGN0eC0+YWRwLCBCQ19MSU5LX01BWF9TR0xTKTsKKwlpZiAocmMpCisJCXJldHVybiBCQ19TVFNfRVJST1I7CisKKwkvKiBTZXR1cCBIYXJkd2FyZSBETUEgcmluZ3MgKi8KKwlyZXR1cm4gY3J5c3RhbGhkX2h3X3NldHVwX2RtYV9yaW5ncygmY3R4LT5od19jdHgpOworfQorCitzdGF0aWMgQkNfU1RBVFVTIGJjX2Nwcm9jX2dldF92ZXJzaW9uKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsCisJCQkJICAgICAgY3J5c3RhbGhkX2lvY3RsX2RhdGEgKmlkYXRhKQoreworCisJaWYgKCFjdHggfHwgIWlkYXRhKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJnISFcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCWlkYXRhLT51ZGF0YS51LlZlckluZm8uRHJpdmVyTWFqb3IgPSBjcnlzdGFsaGRfa21vZF9tYWpvcjsKKwlpZGF0YS0+dWRhdGEudS5WZXJJbmZvLkRyaXZlck1pbm9yID0gY3J5c3RhbGhkX2ttb2RfbWlub3I7CisJaWRhdGEtPnVkYXRhLnUuVmVySW5mby5Ecml2ZXJSZXZpc2lvbgk9IGNyeXN0YWxoZF9rbW9kX3JldjsKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKKworc3RhdGljIEJDX1NUQVRVUyBiY19jcHJvY19nZXRfaHd0eXBlKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppZGF0YSkKK3sKKwlpZiAoIWN0eCB8fCAhaWRhdGEpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmchIVxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwljcnlzdGFsaGRfcGNpX2NmZ19yZChjdHgtPmFkcCwgMCwgMiwKKwkJCSAgICh1aW50MzJfdCAqKSZpZGF0YS0+dWRhdGEudS5od1R5cGUuUGNpVmVuSWQpOworCWNyeXN0YWxoZF9wY2lfY2ZnX3JkKGN0eC0+YWRwLCAyLCAyLAorCQkJICAgKHVpbnQzMl90ICopJmlkYXRhLT51ZGF0YS51Lmh3VHlwZS5QY2lEZXZJZCk7CisJY3J5c3RhbGhkX3BjaV9jZmdfcmQoY3R4LT5hZHAsIDgsIDEsCisJCQkgICAodWludDMyX3QgKikmaWRhdGEtPnVkYXRhLnUuaHdUeXBlLkh3UmV2KTsKKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworc3RhdGljIEJDX1NUQVRVUyBiY19jcHJvY19yZWdfcmQoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwKKwkJCQkgY3J5c3RhbGhkX2lvY3RsX2RhdGEgKmlkYXRhKQoreworCWlmICghY3R4IHx8ICFpZGF0YSkKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCWlkYXRhLT51ZGF0YS51LnJlZ0FjYy5WYWx1ZSA9IGJjX2RlY19yZWdfcmQoY3R4LT5hZHAsCisJCQkJCWlkYXRhLT51ZGF0YS51LnJlZ0FjYy5PZmZzZXQpOworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworc3RhdGljIEJDX1NUQVRVUyBiY19jcHJvY19yZWdfd3Ioc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwKKwkJCQkgY3J5c3RhbGhkX2lvY3RsX2RhdGEgKmlkYXRhKQoreworCWlmICghY3R4IHx8ICFpZGF0YSkKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCisJYmNfZGVjX3JlZ193cihjdHgtPmFkcCwgaWRhdGEtPnVkYXRhLnUucmVnQWNjLk9mZnNldCwKKwkJICAgICAgaWRhdGEtPnVkYXRhLnUucmVnQWNjLlZhbHVlKTsKKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworc3RhdGljIEJDX1NUQVRVUyBiY19jcHJvY19saW5rX3JlZ19yZChzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LAorCQkJCSAgICAgIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppZGF0YSkKK3sKKwlpZiAoIWN0eCB8fCAhaWRhdGEpCisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKworCWlkYXRhLT51ZGF0YS51LnJlZ0FjYy5WYWx1ZSA9IGNyeXN0YWxoZF9yZWdfcmQoY3R4LT5hZHAsCisJCQkJCWlkYXRhLT51ZGF0YS51LnJlZ0FjYy5PZmZzZXQpOworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworc3RhdGljIEJDX1NUQVRVUyBiY19jcHJvY19saW5rX3JlZ193cihzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LAorCQkJCSAgICAgIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppZGF0YSkKK3sKKwlpZiAoIWN0eCB8fCAhaWRhdGEpCisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKworCWNyeXN0YWxoZF9yZWdfd3IoY3R4LT5hZHAsIGlkYXRhLT51ZGF0YS51LnJlZ0FjYy5PZmZzZXQsCisJCSAgICAgICBpZGF0YS0+dWRhdGEudS5yZWdBY2MuVmFsdWUpOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCitzdGF0aWMgQkNfU1RBVFVTIGJjX2Nwcm9jX21lbV9yZChzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LAorCQkJCSBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqaWRhdGEpCit7CisJQkNfU1RBVFVTIHN0cyA9IEJDX1NUU19TVUNDRVNTOworCisJaWYgKCFjdHggfHwgIWlkYXRhIHx8ICFpZGF0YS0+YWRkX2NkYXRhKQorCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisKKwlpZiAoaWRhdGEtPnVkYXRhLnUuZGV2TWVtLk51bUR3b3JkcyA+IChpZGF0YS0+YWRkX2NkYXRhX3N6IC8gNCkpIHsKKwkJQkNNTE9HX0VSUigiaW5zdWZmaWNpZW50IGJ1ZmZlclxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisJc3RzID0gY3J5c3RhbGhkX21lbV9yZChjdHgtPmFkcCwgaWRhdGEtPnVkYXRhLnUuZGV2TWVtLlN0YXJ0T2ZmLAorCQkJICAgICBpZGF0YS0+dWRhdGEudS5kZXZNZW0uTnVtRHdvcmRzLAorCQkJICAgICAodWludDMyX3QgKilpZGF0YS0+YWRkX2NkYXRhKTsKKwlyZXR1cm4gc3RzOworCit9CisKK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2NfbWVtX3dyKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsCisJCQkJIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppZGF0YSkKK3sKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisKKwlpZiAoIWN0eCB8fCAhaWRhdGEgfHwgIWlkYXRhLT5hZGRfY2RhdGEpCisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKworCWlmIChpZGF0YS0+dWRhdGEudS5kZXZNZW0uTnVtRHdvcmRzID4gKGlkYXRhLT5hZGRfY2RhdGFfc3ogLyA0KSkgeworCQlCQ01MT0dfRVJSKCJpbnN1ZmZpY2llbnQgYnVmZmVyXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCXN0cyA9IGNyeXN0YWxoZF9tZW1fd3IoY3R4LT5hZHAsIGlkYXRhLT51ZGF0YS51LmRldk1lbS5TdGFydE9mZiwKKwkJCSAgICAgaWRhdGEtPnVkYXRhLnUuZGV2TWVtLk51bUR3b3JkcywKKwkJCSAgICAgKHVpbnQzMl90ICopaWRhdGEtPmFkZF9jZGF0YSk7CisJcmV0dXJuIHN0czsKK30KKworc3RhdGljIEJDX1NUQVRVUyBiY19jcHJvY19jZmdfcmQoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwKKwkJCQkgY3J5c3RhbGhkX2lvY3RsX2RhdGEgKmlkYXRhKQoreworCXVpbnQzMl90IGl4LCBjbnQsIG9mZiwgbGVuOworCUJDX1NUQVRVUyBzdHMgPSBCQ19TVFNfU1VDQ0VTUzsKKwl1aW50MzJfdCAqdGVtcDsKKworCWlmICghY3R4IHx8ICFpZGF0YSkKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCisJdGVtcCA9ICh1aW50MzJfdCAqKSBpZGF0YS0+dWRhdGEudS5wY2lDZmcucGNpX2NmZ19zcGFjZTsKKwlvZmYgPSBpZGF0YS0+dWRhdGEudS5wY2lDZmcuT2Zmc2V0OworCWxlbiA9IGlkYXRhLT51ZGF0YS51LnBjaUNmZy5TaXplOworCisJaWYgKGxlbiA8PSA0KQorCQlyZXR1cm4gY3J5c3RhbGhkX3BjaV9jZmdfcmQoY3R4LT5hZHAsIG9mZiwgbGVuLCB0ZW1wKTsKKworCS8qIFRydW5jYXRlIHRvIGR3b3JkIGFsaWdubWVudC4uKi8KKwlsZW4gPSA0OworCWNudCA9IGlkYXRhLT51ZGF0YS51LnBjaUNmZy5TaXplIC8gbGVuOworCWZvciAoaXggPSAwOyBpeCA8IGNudDsgaXgrKykgeworCQlzdHMgPSBjcnlzdGFsaGRfcGNpX2NmZ19yZChjdHgtPmFkcCwgb2ZmLCBsZW4sICZ0ZW1wW2l4XSk7CisJCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpIHsKKwkJCUJDTUxPR19FUlIoImNvbmZpZyByZWFkIDogJWRcbiIsIHN0cyk7CisJCQlyZXR1cm4gc3RzOworCQl9CisJCW9mZiArPSBsZW47CisJfQorCisJcmV0dXJuIHN0czsKK30KKworc3RhdGljIEJDX1NUQVRVUyBiY19jcHJvY19jZmdfd3Ioc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwKKwkJCQkgY3J5c3RhbGhkX2lvY3RsX2RhdGEgKmlkYXRhKQoreworCXVpbnQzMl90IGl4LCBjbnQsIG9mZiwgbGVuOworCUJDX1NUQVRVUyBzdHMgPSBCQ19TVFNfU1VDQ0VTUzsKKwl1aW50MzJfdCAqdGVtcDsKKworCWlmICghY3R4IHx8ICFpZGF0YSkKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCisJdGVtcCA9ICh1aW50MzJfdCAqKSBpZGF0YS0+dWRhdGEudS5wY2lDZmcucGNpX2NmZ19zcGFjZTsKKwlvZmYgPSBpZGF0YS0+dWRhdGEudS5wY2lDZmcuT2Zmc2V0OworCWxlbiA9IGlkYXRhLT51ZGF0YS51LnBjaUNmZy5TaXplOworCisJaWYgKGxlbiA8PSA0KQorCQlyZXR1cm4gY3J5c3RhbGhkX3BjaV9jZmdfd3IoY3R4LT5hZHAsIG9mZiwgbGVuLCB0ZW1wWzBdKTsKKworCS8qIFRydW5jYXRlIHRvIGR3b3JkIGFsaWdubWVudC4uKi8KKwlsZW4gPSA0OworCWNudCA9IGlkYXRhLT51ZGF0YS51LnBjaUNmZy5TaXplIC8gbGVuOworCWZvciAoaXggPSAwOyBpeCA8IGNudDsgaXgrKykgeworCQlzdHMgPSBjcnlzdGFsaGRfcGNpX2NmZ193cihjdHgtPmFkcCwgb2ZmLCBsZW4sIHRlbXBbaXhdKTsKKwkJaWYgKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykgeworCQkJQkNNTE9HX0VSUigiY29uZmlnIHdyaXRlIDogJWRcbiIsIHN0cyk7CisJCQlyZXR1cm4gc3RzOworCQl9CisJCW9mZiArPSBsZW47CisJfQorCisJcmV0dXJuIHN0czsKK30KKworc3RhdGljIEJDX1NUQVRVUyBiY19jcHJvY19kb3dubG9hZF9mdyhzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LAorCQkJCSAgICAgIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppZGF0YSkKK3sKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisKKwlpZiAoIWN0eCB8fCAhaWRhdGEgfHwgIWlkYXRhLT5hZGRfY2RhdGEgfHwgIWlkYXRhLT5hZGRfY2RhdGFfc3opIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmchIVxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlpZiAoY3R4LT5zdGF0ZSAhPSBCQ19MSU5LX0lOVkFMSUQpIHsKKwkJQkNNTE9HX0VSUigiTGluayBpbnZhbGlkIHN0YXRlICVkIFxuIiwgY3R4LT5zdGF0ZSk7CisJCXJldHVybiBCQ19TVFNfRVJSX1VTQUdFOworCX0KKworCXN0cyA9IGNyeXN0YWxoZF9kb3dubG9hZF9mdyhjdHgtPmFkcCwgKHVpbnQ4X3QgKilpZGF0YS0+YWRkX2NkYXRhLAorCQkJCSAgaWRhdGEtPmFkZF9jZGF0YV9zeik7CisKKwlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKSB7CisJCUJDTUxPR19FUlIoIkZpcm13YXJlIERvd25sb2FkIEZhaWx1cmUhISAtICVkXG4iLCBzdHMpOworCX0gZWxzZQorCQljdHgtPnN0YXRlIHw9IEJDX0xJTktfSU5JVDsKKworCXJldHVybiBzdHM7Cit9CisKKy8qCisgKiBXZSB1c2UgdGhlIEZXX0NNRCBpbnRlcmZhY2UgdG8gc3luYyB1cCBwbGF5YmFjayBzdGF0ZSB3aXRoIGFwcGxpY2F0aW9uCisgKiBhbmQgIGZpcm13YXJlLiBUaGlzIGZ1bmN0aW9uIHdpbGwgcGVyZm9ybSB0aGUgcmVxdWlyZWQgcHJlIGFuZCBwb3N0CisgKiBwcm9jZXNzaW5nIG9mIHRoZSBGaXJtd2FyZSBjb21tYW5kcy4KKyAqCisgKiBQYXVzZSAtCisgKglEaXNhYmxlIGNhcHR1cmUgYWZ0ZXIgZGVjb2RlciBwYXVzZS4KKyAqIFJlc3VtZSAtCisgKglGaXJzdCBlbmFibGUgY2FwdHVyZSBhbmQgaXNzdWUgZGVjb2RlciByZXN1bWUgY29tbWFuZC4KKyAqIEZsdXNoIC0KKyAqCUFib3J0IHBlbmRpbmcgaW5wdXQgdHJhbnNmZXJzIGFuZCBpc3N1ZSBkZWNvZGVyIGZsdXNoIGNvbW1hbmQuCisgKgorICovCitzdGF0aWMgQkNfU1RBVFVTIGJjX2Nwcm9jX2RvX2Z3X2NtZChzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LCBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqaWRhdGEpCit7CisJQkNfU1RBVFVTIHN0czsKKwl1aW50MzJfdCAqY21kOworCisJaWYgKCEoY3R4LT5zdGF0ZSAmIEJDX0xJTktfSU5JVCkpIHsKKwkJQkNNTE9HX0VSUigiTGluayBpbnZhbGlkIHN0YXRlICVkIFxuIiwgY3R4LT5zdGF0ZSk7CisJCXJldHVybiBCQ19TVFNfRVJSX1VTQUdFOworCX0KKworCWNtZCA9IGlkYXRhLT51ZGF0YS51LmZ3Q21kLmNtZDsKKworCS8qIFByZS1Qcm9jZXNzICovCisJaWYgKGNtZFswXSA9PSBlQ01EX0MwMTFfREVDX0NIQU5fUEFVU0UpIHsKKwkJaWYgKCFjbWRbM10pIHsKKwkJCWN0eC0+c3RhdGUgJj0gfkJDX0xJTktfUEFVU0VEOworCQkJY3J5c3RhbGhkX2h3X3VucGF1c2UoJmN0eC0+aHdfY3R4KTsKKwkJfQorCX0gZWxzZSBpZiAoY21kWzBdID09IGVDTURfQzAxMV9ERUNfQ0hBTl9GTFVTSCkgeworCQlCQ01MT0coQkNNTE9HX0lORk8sICJGbHVzaCBpc3N1ZWRcbiIpOworCQlpZiAoY21kWzNdKQorCQkJY3R4LT5jaW5fd2FpdF9leGl0ID0gMTsKKwl9CisKKwlzdHMgPSBjcnlzdGFsaGRfZG9fZndfY21kKCZjdHgtPmh3X2N0eCwgJmlkYXRhLT51ZGF0YS51LmZ3Q21kKTsKKworCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpIHsKKwkJQkNNTE9HKEJDTUxPR19JTkZPLCAiZncgY21kICV4IGZhaWxlZFxuIiwgY21kWzBdKTsKKwkJcmV0dXJuIHN0czsKKwl9CisKKwkvKiBQb3N0LVByb2Nlc3MgKi8KKwlpZiAoY21kWzBdID09IGVDTURfQzAxMV9ERUNfQ0hBTl9QQVVTRSkgeworCQlpZiAoY21kWzNdKSB7CisJCQljdHgtPnN0YXRlIHw9IEJDX0xJTktfUEFVU0VEOworCQkJY3J5c3RhbGhkX2h3X3BhdXNlKCZjdHgtPmh3X2N0eCk7CisJCX0KKwl9CisKKwlyZXR1cm4gc3RzOworfQorCitzdGF0aWMgdm9pZCBiY19wcm9jX2luX2NvbXBsZXRpb24oY3J5c3RhbGhkX2Rpb19yZXEgKmRpb19obmQsCisJCQkJICB3YWl0X3F1ZXVlX2hlYWRfdCAqZXZlbnQsIEJDX1NUQVRVUyBzdHMpCit7CisJaWYgKCFkaW9faG5kIHx8ICFldmVudCkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZyEhXG4iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoc3RzID09IEJDX1NUU19JT19VU0VSX0FCT1JUKQorCQkgcmV0dXJuOworCisJZGlvX2huZC0+dWluZm8uY29tcF9zdHMgPSBzdHM7CisJZGlvX2huZC0+dWluZm8uZXZfc3RzID0gMTsKKwljcnlzdGFsaGRfc2V0X2V2ZW50KGV2ZW50KTsKK30KKworc3RhdGljIEJDX1NUQVRVUyBiY19jcHJvY19jb2RlaW5fc2xlZXAoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCkKK3sKKwl3YWl0X3F1ZXVlX2hlYWRfdCBzbGVlcF9ldjsKKwlpbnQgcmMgPSAwOworCisJaWYgKGN0eC0+c3RhdGUgJiBCQ19MSU5LX1NVU1BFTkQpCisJCXJldHVybiBCQ19TVFNfSU9fVVNFUl9BQk9SVDsKKworCWlmIChjdHgtPmNpbl93YWl0X2V4aXQpIHsKKwkJY3R4LT5jaW5fd2FpdF9leGl0ID0gMDsKKwkJcmV0dXJuIEJDX1NUU19DTURfQ0FOQ0VMTEVEOworCX0KKwljcnlzdGFsaGRfY3JlYXRlX2V2ZW50KCZzbGVlcF9ldik7CisJY3J5c3RhbGhkX3dhaXRfb25fZXZlbnQoJnNsZWVwX2V2LCAwLCAxMDAsIHJjLCAwKTsKKwlpZiAocmMgPT0gLUVJTlRSKQorCQlyZXR1cm4gQkNfU1RTX0lPX1VTRVJfQUJPUlQ7CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2NfaHdfdHhkbWEoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwKKwkJCQkgICBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqaWRhdGEsCisJCQkJICAgY3J5c3RhbGhkX2Rpb19yZXEgKmRpbykKK3sKKwl1aW50MzJfdCB0eF9saXN0aWQgPSAwOworCUJDX1NUQVRVUyBzdHMgPSBCQ19TVFNfU1VDQ0VTUzsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBldmVudDsKKwlpbnQgcmMgPSAwOworCisJaWYgKCFjdHggfHwgIWlkYXRhIHx8ICFkaW8pIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmchIVxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwljcnlzdGFsaGRfY3JlYXRlX2V2ZW50KCZldmVudCk7CisKKwljdHgtPnR4X2xpc3RfaWQgPSAwOworCS8qIG1zbGVlcF9pbnRlcnJ1cHRpYmxlKDIwMDApOyAqLworCXN0cyA9IGNyeXN0YWxoZF9od19wb3N0X3R4KCZjdHgtPmh3X2N0eCwgZGlvLCBiY19wcm9jX2luX2NvbXBsZXRpb24sCisJCQkJICZldmVudCwgJnR4X2xpc3RpZCwKKwkJCQkgaWRhdGEtPnVkYXRhLnUuUHJvY0lucHV0LkVuY3J5cHRlZCk7CisKKwl3aGlsZSAoc3RzID09IEJDX1NUU19CVVNZKSB7CisJCXN0cyA9IGJjX2Nwcm9jX2NvZGVpbl9zbGVlcChjdHgpOworCQlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKQorCQkJYnJlYWs7CisJCXN0cyA9IGNyeXN0YWxoZF9od19wb3N0X3R4KCZjdHgtPmh3X2N0eCwgZGlvLAorCQkJCQkgYmNfcHJvY19pbl9jb21wbGV0aW9uLAorCQkJCQkgJmV2ZW50LCAmdHhfbGlzdGlkLAorCQkJCQkgaWRhdGEtPnVkYXRhLnUuUHJvY0lucHV0LkVuY3J5cHRlZCk7CisJfQorCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpIHsKKwkJQkNNTE9HKEJDTUxPR19EQkcsICJfaHdfdHhkbWEgcmV0dXJuaW5nIHN0czolZFxuIiwgc3RzKTsKKwkJcmV0dXJuIHN0czsKKwl9CisJaWYgKGN0eC0+Y2luX3dhaXRfZXhpdCkKKwkJY3R4LT5jaW5fd2FpdF9leGl0ID0gMDsKKworCWN0eC0+dHhfbGlzdF9pZCA9IHR4X2xpc3RpZDsKKworCS8qIF9wb3N0KCkgc3VjY2VlZGVkLi4gd2FpdCBmb3IgdGhlIGNvbXBsZXRpb24uICovCisJY3J5c3RhbGhkX3dhaXRfb25fZXZlbnQoJmV2ZW50LCAoZGlvLT51aW5mby5ldl9zdHMpLCAzMDAwLCByYywgMCk7CisJY3R4LT50eF9saXN0X2lkID0gMDsKKwlpZiAoIXJjKSB7CisJCXJldHVybiBkaW8tPnVpbmZvLmNvbXBfc3RzOworCX0gZWxzZSBpZiAocmMgPT0gLUVCVVNZKSB7CisJCUJDTUxPRyhCQ01MT0dfREJHLCAiX3R4X3Bvc3QoKSBUL08gXG4iKTsKKwkJc3RzID0gQkNfU1RTX1RJTUVPVVQ7CisJfSBlbHNlIGlmIChyYyA9PSAtRUlOVFIpIHsKKwkJQkNNTE9HKEJDTUxPR19EQkcsICJUeCBXYWl0IFNpZ25hbCBpbnQuXG4iKTsKKwkJc3RzID0gQkNfU1RTX0lPX1VTRVJfQUJPUlQ7CisJfSBlbHNlIHsKKwkJc3RzID0gQkNfU1RTX0lPX0VSUk9SOworCX0KKworCS8qIFdlIGFyZSBjYW5jZWxsaW5nIHRoZSBJTyBmcm9tIHRoZSBzYW1lIGNvbnRleHQgYXMgdGhlIF9wb3N0KCkuCisJICogc28gbm8gbmVlZCB0byB3YWl0IG9uIHRoZSBldmVudCBhZ2Fpbi4uIHRoZSByZXR1cm4gaXRzZWxmCisJICogZW5zdXJlcyB0aGUgcmVsZWFzZSBvZiBvdXIgcmVzb3VyY2VzLgorCSAqLworCWNyeXN0YWxoZF9od19jYW5jZWxfdHgoJmN0eC0+aHdfY3R4LCB0eF9saXN0aWQpOworCisJcmV0dXJuIHN0czsKK30KKworLyogSGVscGVyIGZ1bmN0aW9uIHRvIGNoZWNrIG9uIHVzZXIgYnVmZmVycyAqLworc3RhdGljIEJDX1NUQVRVUyBiY19jcHJvY19jaGVja19pbmJ1ZmZzKGJvb2wgcGluLCB2b2lkICp1YnVmZiwgdWludDMyX3QgdWJfc3osCisJCQkJCXVpbnQzMl90IHV2X29mZiwgYm9vbCBlbl80MjIpCit7CisJaWYgKCF1YnVmZiB8fCAhdWJfc3opIHsKKwkJQkNNTE9HX0VSUigiJXMtPkludmFsaWQgQXJnICVwICV4XG4iLAorCQkJKChwaW4pID8gIlRYIiA6ICJSWCIpLCB1YnVmZiwgdWJfc3opOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJLyogQ2hlY2sgZm9yIGFsaWdubWVudCAqLworCWlmICgoKHVpbnRwdHJfdCl1YnVmZikgJiAweDAzKSB7CisJCUJDTUxPR19FUlIoIiVzLS0+VW4tYWxpZ25lZCBhZGRyZXNzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuLiAlcCBcbiIsCisJCQkJKChwaW4pID8gIlRYIiA6ICJSWCIpLCB1YnVmZik7CisJCXJldHVybiBCQ19TVFNfTk9UX0lNUEw7CisJfQorCWlmIChwaW4pCisJCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKKworCWlmICghZW5fNDIyICYmICF1dl9vZmYpIHsKKwkJQkNNTE9HX0VSUigiTmVlZCBVViBvZmZzZXQgZm9yIDQyMCBtb2RlLlxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlpZiAoZW5fNDIyICYmIHV2X29mZikgeworCQlCQ01MT0dfRVJSKCJVViBvZmZzZXQgaW4gNDIyIG1vZGUgPz9cbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCitzdGF0aWMgQkNfU1RBVFVTIGJjX2Nwcm9jX3Byb2NfaW5wdXQoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwgY3J5c3RhbGhkX2lvY3RsX2RhdGEgKmlkYXRhKQoreworCXZvaWQgKnVidWZmOworCXVpbnQzMl90IHViX3N6OworCWNyeXN0YWxoZF9kaW9fcmVxICpkaW9faG5kID0gTlVMTDsKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisKKwlpZiAoIWN0eCB8fCAhaWRhdGEpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmchIVxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwl1YnVmZiA9IGlkYXRhLT51ZGF0YS51LlByb2NJbnB1dC5wRG1hQnVmZjsKKwl1Yl9zeiA9IGlkYXRhLT51ZGF0YS51LlByb2NJbnB1dC5CdWZmU3o7CisKKwlzdHMgPSBiY19jcHJvY19jaGVja19pbmJ1ZmZzKDEsIHVidWZmLCB1Yl9zeiwgMCwgMCk7CisJaWYgKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykKKwkJcmV0dXJuIHN0czsKKworCXN0cyA9IGNyeXN0YWxoZF9tYXBfZGlvKGN0eC0+YWRwLCB1YnVmZiwgdWJfc3osIDAsIDAsIDEsICZkaW9faG5kKTsKKwlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKSB7CisJCUJDTUxPR19FUlIoImRpbyBtYXAgLSAlZCBcbiIsIHN0cyk7CisJCXJldHVybiBzdHM7CisJfQorCisJaWYgKCFkaW9faG5kKQorCQlyZXR1cm4gQkNfU1RTX0VSUk9SOworCisJc3RzID0gYmNfY3Byb2NfaHdfdHhkbWEoY3R4LCBpZGF0YSwgZGlvX2huZCk7CisKKwljcnlzdGFsaGRfdW5tYXBfZGlvKGN0eC0+YWRwLCBkaW9faG5kKTsKKworCXJldHVybiBzdHM7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2NfYWRkX2NhcF9idWZmKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsCisJCQkJICAgICAgIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppZGF0YSkKK3sKKwl2b2lkICp1YnVmZjsKKwl1aW50MzJfdCB1Yl9zeiwgdXZfb2ZmOworCWJvb2wgZW5fNDIyOworCWNyeXN0YWxoZF9kaW9fcmVxICpkaW9faG5kID0gTlVMTDsKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisKKwlpZiAoIWN0eCB8fCAhaWRhdGEpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmchIVxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwl1YnVmZiA9IGlkYXRhLT51ZGF0YS51LlJ4QnVmZnMuWXV2QnVmZjsKKwl1Yl9zeiA9IGlkYXRhLT51ZGF0YS51LlJ4QnVmZnMuWXV2QnVmZlN6OworCXV2X29mZiA9IGlkYXRhLT51ZGF0YS51LlJ4QnVmZnMuVVZidWZmT2Zmc2V0OworCWVuXzQyMiA9IGlkYXRhLT51ZGF0YS51LlJ4QnVmZnMuYjQyMk1vZGU7CisKKwlzdHMgPSBiY19jcHJvY19jaGVja19pbmJ1ZmZzKDAsIHVidWZmLCB1Yl9zeiwgdXZfb2ZmLCBlbl80MjIpOworCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpCisJCXJldHVybiBzdHM7CisKKwlzdHMgPSBjcnlzdGFsaGRfbWFwX2RpbyhjdHgtPmFkcCwgdWJ1ZmYsIHViX3N6LCB1dl9vZmYsCisJCQkgICAgICBlbl80MjIsIDAsICZkaW9faG5kKTsKKwlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKSB7CisJCUJDTUxPR19FUlIoImRpbyBtYXAgLSAlZCBcbiIsIHN0cyk7CisJCXJldHVybiBzdHM7CisJfQorCisJaWYgKCFkaW9faG5kKQorCQlyZXR1cm4gQkNfU1RTX0VSUk9SOworCisJc3RzID0gY3J5c3RhbGhkX2h3X2FkZF9jYXBfYnVmZmVyKCZjdHgtPmh3X2N0eCwgZGlvX2huZCwgKGN0eC0+c3RhdGUgPT0gQkNfTElOS19SRUFEWSkpOworCWlmICgoc3RzICE9IEJDX1NUU19TVUNDRVNTKSAmJiAoc3RzICE9IEJDX1NUU19CVVNZKSkgeworCQljcnlzdGFsaGRfdW5tYXBfZGlvKGN0eC0+YWRwLCBkaW9faG5kKTsKKwkJcmV0dXJuIHN0czsKKwl9CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2NfZm10X2NoYW5nZShzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LAorCQkJCSAgICAgY3J5c3RhbGhkX2Rpb19yZXEgKmRpbykKK3sKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisKKwlzdHMgPSBjcnlzdGFsaGRfaHdfYWRkX2NhcF9idWZmZXIoJmN0eC0+aHdfY3R4LCBkaW8sIDApOworCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpCisJCXJldHVybiBzdHM7CisKKwljdHgtPnN0YXRlIHw9IEJDX0xJTktfRk1UX0NIRzsKKwlpZiAoY3R4LT5zdGF0ZSA9PSBCQ19MSU5LX1JFQURZKQorCQlzdHMgPSBjcnlzdGFsaGRfaHdfc3RhcnRfY2FwdHVyZSgmY3R4LT5od19jdHgpOworCisJcmV0dXJuIHN0czsKK30KKworc3RhdGljIEJDX1NUQVRVUyBiY19jcHJvY19mZXRjaF9mcmFtZShzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LAorCQkJCSAgICAgIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppZGF0YSkKK3sKKwljcnlzdGFsaGRfZGlvX3JlcSAqZGlvID0gTlVMTDsKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisJQkNfREVDX09VVF9CVUZGICpmcmFtZTsKKworCWlmICghY3R4IHx8ICFpZGF0YSkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZyEhXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCWlmICghKGN0eC0+c3RhdGUgJiBCQ19MSU5LX0NBUF9FTikpIHsKKwkJQkNNTE9HKEJDTUxPR19EQkcsICJDYXB0dXJlIG5vdCBlbmFibGVkLi4leFxuIiwgY3R4LT5zdGF0ZSk7CisJCXJldHVybiBCQ19TVFNfRVJSX1VTQUdFOworCX0KKworCWZyYW1lID0gJmlkYXRhLT51ZGF0YS51LkRlY091dERhdGE7CisKKwlzdHMgPSBjcnlzdGFsaGRfaHdfZ2V0X2NhcF9idWZmZXIoJmN0eC0+aHdfY3R4LCAmZnJhbWUtPlBpYkluZm8sICZkaW8pOworCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpCisJCXJldHVybiAoY3R4LT5zdGF0ZSAmIEJDX0xJTktfU1VTUEVORCkgPyBCQ19TVFNfSU9fVVNFUl9BQk9SVCA6IHN0czsKKworCWZyYW1lLT5GbGFncyA9IGRpby0+dWluZm8uY29tcF9mbGFnczsKKworCWlmIChmcmFtZS0+RmxhZ3MgJiBDT01QX0ZMQUdfRk1UX0NIQU5HRSkKKwkJcmV0dXJuIGJjX2Nwcm9jX2ZtdF9jaGFuZ2UoY3R4LCBkaW8pOworCisJZnJhbWUtPk91dFB1dEJ1ZmZzLll1dkJ1ZmYgPSBkaW8tPnVpbmZvLnhmcl9idWZmOworCWZyYW1lLT5PdXRQdXRCdWZmcy5ZdXZCdWZmU3ogPSBkaW8tPnVpbmZvLnhmcl9sZW47CisJZnJhbWUtPk91dFB1dEJ1ZmZzLlVWYnVmZk9mZnNldCA9IGRpby0+dWluZm8udXZfb2Zmc2V0OworCWZyYW1lLT5PdXRQdXRCdWZmcy5iNDIyTW9kZSA9IGRpby0+dWluZm8uYjQyMm1vZGU7CisKKwlmcmFtZS0+T3V0UHV0QnVmZnMuWUJ1ZmZEb25lU3ogPSBkaW8tPnVpbmZvLnlfZG9uZV9zejsKKwlmcmFtZS0+T3V0UHV0QnVmZnMuVVZCdWZmRG9uZVN6ID0gZGlvLT51aW5mby51dl9kb25lX3N6OworCisJY3J5c3RhbGhkX3VubWFwX2RpbyhjdHgtPmFkcCwgZGlvKTsKKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworc3RhdGljIEJDX1NUQVRVUyBiY19jcHJvY19zdGFydF9jYXB0dXJlKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsCisJCQkJCWNyeXN0YWxoZF9pb2N0bF9kYXRhICppZGF0YSkKK3sKKwljdHgtPnN0YXRlIHw9IEJDX0xJTktfQ0FQX0VOOworCWlmIChjdHgtPnN0YXRlID09IEJDX0xJTktfUkVBRFkpCisJCXJldHVybiBjcnlzdGFsaGRfaHdfc3RhcnRfY2FwdHVyZSgmY3R4LT5od19jdHgpOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCitzdGF0aWMgQkNfU1RBVFVTIGJjX2Nwcm9jX2ZsdXNoX2NhcF9idWZmcyhzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LAorCQkJCQkgIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppZGF0YSkKK3sKKwljcnlzdGFsaGRfZGlvX3JlcSAqZGlvID0gTlVMTDsKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisJQkNfREVDX09VVF9CVUZGICpmcmFtZTsKKwl1aW50MzJfdCBjb3VudDsKKworCWlmICghY3R4IHx8ICFpZGF0YSkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZyEhXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCWlmICghKGN0eC0+c3RhdGUgJiBCQ19MSU5LX0NBUF9FTikpCisJCXJldHVybiBCQ19TVFNfRVJSX1VTQUdFOworCisJLyogV2Ugc2hvdWxkIGFjayBmbHVzaCBldmVuIHdoZW4gd2UgYXJlIGluIHBhdXNlZC9zdXNwZW5kIHN0YXRlICovCisJaWYgKCEoY3R4LT5zdGF0ZSAmIEJDX0xJTktfUkVBRFkpKQorCQlyZXR1cm4gY3J5c3RhbGhkX2h3X3N0b3BfY2FwdHVyZSgmY3R4LT5od19jdHgpOworCisJY3R4LT5zdGF0ZSAmPSB+KEJDX0xJTktfQ0FQX0VOfEJDX0xJTktfRk1UX0NIRyk7CisKKwlmcmFtZSA9ICZpZGF0YS0+dWRhdGEudS5EZWNPdXREYXRhOworCWZvciAoY291bnQgPSAwOyBjb3VudCA8IEJDX1JYX0xJU1RfQ05UOyBjb3VudCsrKSB7CisKKwkJc3RzID0gY3J5c3RhbGhkX2h3X2dldF9jYXBfYnVmZmVyKCZjdHgtPmh3X2N0eCwgJmZyYW1lLT5QaWJJbmZvLCAmZGlvKTsKKwkJaWYgKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykKKwkJCWJyZWFrOworCisJCWNyeXN0YWxoZF91bm1hcF9kaW8oY3R4LT5hZHAsIGRpbyk7CisJfQorCisJcmV0dXJuIGNyeXN0YWxoZF9od19zdG9wX2NhcHR1cmUoJmN0eC0+aHdfY3R4KTsKK30KKworc3RhdGljIEJDX1NUQVRVUyBiY19jcHJvY19nZXRfc3RhdHMoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwKKwkJCQkgICAgY3J5c3RhbGhkX2lvY3RsX2RhdGEgKmlkYXRhKQoreworCUJDX0RUU19TVEFUUyAqc3RhdHM7CisJc3RydWN0IGNyeXN0YWxoZF9od19zdGF0cwlod19zdGF0czsKKworCWlmICghY3R4IHx8ICFpZGF0YSkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZyEhXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCWNyeXN0YWxoZF9od19zdGF0cygmY3R4LT5od19jdHgsICZod19zdGF0cyk7CisKKwlzdGF0cyA9ICZpZGF0YS0+dWRhdGEudS5kcnZTdGF0OworCXN0YXRzLT5kcnZSTEwgPSBod19zdGF0cy5yZHlxX2NvdW50OworCXN0YXRzLT5kcnZGTEwgPSBod19zdGF0cy5mcmVlcV9jb3VudDsKKwlzdGF0cy0+RHJ2VG90YWxGcm1Ecm9wcGVkID0gaHdfc3RhdHMucnhfZXJyb3JzOworCXN0YXRzLT5EcnZUb3RhbEhXRXJycyA9IGh3X3N0YXRzLnJ4X2Vycm9ycyArIGh3X3N0YXRzLnR4X2Vycm9yczsKKwlzdGF0cy0+aW50Q291bnQgPSBod19zdGF0cy5udW1faW50ZXJydXB0czsKKwlzdGF0cy0+RHJ2SWduSW50ckNudCA9IGh3X3N0YXRzLm51bV9pbnRlcnJ1cHRzIC0KKwkJCQlod19zdGF0cy5kZXZfaW50ZXJydXB0czsKKwlzdGF0cy0+VHhGaWZvQnN5Q250ID0gaHdfc3RhdHMuY2luX2J1c3k7CisJc3RhdHMtPnBhdXNlQ291bnQgPSBod19zdGF0cy5wYXVzZV9jbnQ7CisKKwlpZiAoY3R4LT5wd3Jfc3RhdGVfY2hhbmdlKQorCQlzdGF0cy0+cHdyX3N0YXRlX2NoYW5nZSA9IDE7CisJaWYgKGN0eC0+c3RhdGUgJiBCQ19MSU5LX1BBVVNFRCkKKwkJc3RhdHMtPkRydlBhdXNlVGltZSA9IDE7CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2NfcmVzZXRfc3RhdHMoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwKKwkJCQkgICAgICBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqaWRhdGEpCit7CisJY3J5c3RhbGhkX2h3X3N0YXRzKCZjdHgtPmh3X2N0eCwgTlVMTCk7CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgYmNfY3Byb2NfY2hnX2NsayhzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LAorCQkJCSAgY3J5c3RhbGhkX2lvY3RsX2RhdGEgKmlkYXRhKQoreworCUJDX0NMT0NLICpjbG9jazsKKwl1aW50MzJfdCBvbGRDbGs7CisJQkNfU1RBVFVTIHN0cyA9IEJDX1NUU19TVUNDRVNTOworCisJaWYgKCFjdHggfHwgIWlkYXRhKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJnISFcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJY2xvY2sgPSAmaWRhdGEtPnVkYXRhLnUuY2xvY2tWYWx1ZTsKKwlvbGRDbGsgPSBjdHgtPmh3X2N0eC5jb3JlX2Nsb2NrX21oejsKKwljdHgtPmh3X2N0eC5jb3JlX2Nsb2NrX21oeiA9IGNsb2NrLT5jbGs7CisKKwlpZiAoY3R4LT5zdGF0ZSAmIEJDX0xJTktfUkVBRFkpIHsKKwkJc3RzID0gY3J5c3RhbGhkX2h3X3NldF9jb3JlX2Nsb2NrKCZjdHgtPmh3X2N0eCk7CisJCWlmIChzdHMgPT0gQkNfU1RTX0NMS19OT0NIRykKKwkJCWN0eC0+aHdfY3R4LmNvcmVfY2xvY2tfbWh6ID0gb2xkQ2xrOworCX0KKworCWNsb2NrLT5jbGsgPSBjdHgtPmh3X2N0eC5jb3JlX2Nsb2NrX21oejsKKworCXJldHVybiBzdHM7Cit9CisKKy8qPT09PT09PT09PT09PT09IENtZCBQcm9jIFRhYmxlLi4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworc3RhdGljIGNvbnN0IGNyeXN0YWxoZF9jbWRfdGJsX3QJZ19jcnlzdGFsaGRfY3Byb2NfdGJsW10gPSB7CisJeyBCQ01fSU9DX0dFVF9WRVJTSU9OLAkJYmNfY3Byb2NfZ2V0X3ZlcnNpb24sCTB9LAorCXsgQkNNX0lPQ19HRVRfSFdUWVBFLAkJYmNfY3Byb2NfZ2V0X2h3dHlwZSwJMH0sCisJeyBCQ01fSU9DX1JFR19SRCwJCWJjX2Nwcm9jX3JlZ19yZCwJMH0sCisJeyBCQ01fSU9DX1JFR19XUiwJCWJjX2Nwcm9jX3JlZ193ciwJMH0sCisJeyBCQ01fSU9DX0ZQR0FfUkQsCQliY19jcHJvY19saW5rX3JlZ19yZCwJMH0sCisJeyBCQ01fSU9DX0ZQR0FfV1IsCQliY19jcHJvY19saW5rX3JlZ193ciwJMH0sCisJeyBCQ01fSU9DX01FTV9SRCwJCWJjX2Nwcm9jX21lbV9yZCwJMH0sCisJeyBCQ01fSU9DX01FTV9XUiwJCWJjX2Nwcm9jX21lbV93ciwJMH0sCisJeyBCQ01fSU9DX1JEX1BDSV9DRkcsCQliY19jcHJvY19jZmdfcmQsCTB9LAorCXsgQkNNX0lPQ19XUl9QQ0lfQ0ZHLAkJYmNfY3Byb2NfY2ZnX3dyLAkxfSwKKwl7IEJDTV9JT0NfRldfRE9XTkxPQUQsCQliY19jcHJvY19kb3dubG9hZF9mdywJMX0sCisJeyBCQ01fSU9DX0ZXX0NNRCwJCWJjX2Nwcm9jX2RvX2Z3X2NtZCwJMX0sCisJeyBCQ01fSU9DX1BST0NfSU5QVVQsCQliY19jcHJvY19wcm9jX2lucHV0LAkxfSwKKwl7IEJDTV9JT0NfQUREX1JYQlVGRlMsCQliY19jcHJvY19hZGRfY2FwX2J1ZmYsCTF9LAorCXsgQkNNX0lPQ19GRVRDSF9SWEJVRkYsCQliY19jcHJvY19mZXRjaF9mcmFtZSwJMX0sCisJeyBCQ01fSU9DX1NUQVJUX1JYX0NBUCwJCWJjX2Nwcm9jX3N0YXJ0X2NhcHR1cmUsCTF9LAorCXsgQkNNX0lPQ19GTFVTSF9SWF9DQVAsCQliY19jcHJvY19mbHVzaF9jYXBfYnVmZnMsIDF9LAorCXsgQkNNX0lPQ19HRVRfRFJWX1NUQVQsCQliY19jcHJvY19nZXRfc3RhdHMsCTB9LAorCXsgQkNNX0lPQ19SU1RfRFJWX1NUQVQsCQliY19jcHJvY19yZXNldF9zdGF0cywJMH0sCisJeyBCQ01fSU9DX05PVElGWV9NT0RFLAkJYmNfY3Byb2Nfbm90aWZ5X21vZGUsCTB9LAorCXsgQkNNX0lPQ19DSEdfQ0xLLAkJYmNfY3Byb2NfY2hnX2NsaywgMH0sCisJeyBCQ01fSU9DX0VORCwJCQlOVUxMfSwKK307CisKKy8qPT09PT09PT09PT09PT09IENtZCBQcm9jIEZ1bmN0aW9ucy4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoqCisgKiBjcnlzdGFsaGRfc3VzcGVuZCAtIFBvd2VyIG1hbmFnZW1lbnQgc3VzcGVuZCByZXF1ZXN0LgorICogQGN0eDogQ29tbWFuZCBsYXllciBjb250ZXh0LgorICogQGlkYXRhOiBJb2RhdGEgLSByZXF1aXJlZCBmb3IgaW50ZXJuYWwgdXNlLgorICoKKyAqIFJldHVybjoKKyAqCXN0YXR1cworICoKKyAqIDEuIFNldCB0aGUgc3RhdGUgdG8gU3VzcGVuZC4KKyAqIDIuIEZsdXNoIHRoZSBSeCBCdWZmZXJzIGl0IHdpbGwgdW5tYXAgYWxsIHRoZSBidWZmZXJzIGFuZAorICogICAgc3RvcCB0aGUgUnhETUEgZW5naW5lLgorICogMy4gQ2FuY2VsIFRoZSBUWCBJbyBhbmQgU3RvcCBEbWEgRW5naW5lLgorICogNC4gUHV0IHRoZSBERFIgaW4gdG8gZGVlcCBzbGVlcC4KKyAqIDUuIFN0b3AgdGhlIGhhcmR3YXJlIHB1dHRpbmcgaXQgaW4gdG8gUmVzZXQgU3RhdGUuCisgKgorICogQ3VycmVudCBnc3RyZWFtZXIgZnJhbWUgd29yayBkb2VzIG5vdCBwcm92aWRlIGFueSBwb3dlciBtYW5hZ2VtZW50CisgKiByZWxhdGVkIG5vdGlmaWNhdGlvbiB0byB1c2VyIG1vZGUgZGVjb2RlciBwbHVnLWluLiBBcyBhIHdvcmstYXJvdW5kCisgKiB3ZSBwYXNzIG9uIHRoZSBwb3dlciBtYW5nZW1lbnQgbm90aWZpY2F0aW9uIHRvIG91ciBwbHVnLWluIGJ5IGNvbXBsZXRpbmcKKyAqIGFsbCBvdXRzdGFuZGluZyByZXF1ZXN0cyB3aXRoIEJDX1NUU19JT19VU0VSX0FCT1JUIHJldHVybiBjb2RlLgorICovCitCQ19TVEFUVVMgY3J5c3RhbGhkX3N1c3BlbmQoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwgY3J5c3RhbGhkX2lvY3RsX2RhdGEgKmlkYXRhKQoreworCUJDX1NUQVRVUyBzdHMgPSBCQ19TVFNfU1VDQ0VTUzsKKworCWlmICghY3R4IHx8ICFpZGF0YSkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIFBhcmFtZXRlcnNcbiIpOworCQlyZXR1cm4gQkNfU1RTX0VSUk9SOworCX0KKworCWlmIChjdHgtPnN0YXRlICYgQkNfTElOS19TVVNQRU5EKQorCQlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7CisKKwlpZiAoY3R4LT5zdGF0ZSA9PSBCQ19MSU5LX0lOVkFMSUQpIHsKKwkJQkNNTE9HKEJDTUxPR19EQkcsICJOb3RoaW5nIFRvIERvIFN1c3BlbmQgU3VjY2Vzc1xuIik7CisJCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKKwl9CisKKwljdHgtPnN0YXRlIHw9IEJDX0xJTktfU1VTUEVORDsKKworCWJjX2Nwcm9jX21hcmtfcHdyX3N0YXRlKGN0eCk7CisKKwlpZiAoY3R4LT5zdGF0ZSAmIEJDX0xJTktfQ0FQX0VOKSB7CisJCXN0cyA9IGJjX2Nwcm9jX2ZsdXNoX2NhcF9idWZmcyhjdHgsIGlkYXRhKTsKKwkJaWYgKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykKKwkJCXJldHVybiBzdHM7CisJfQorCisJaWYgKGN0eC0+dHhfbGlzdF9pZCkgeworCQlzdHMgPSBjcnlzdGFsaGRfaHdfY2FuY2VsX3R4KCZjdHgtPmh3X2N0eCwgY3R4LT50eF9saXN0X2lkKTsKKwkJaWYgKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykKKwkJCXJldHVybiBzdHM7CisJfQorCisJc3RzID0gY3J5c3RhbGhkX2h3X3N1c3BlbmQoJmN0eC0+aHdfY3R4KTsKKwlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKQorCQlyZXR1cm4gc3RzOworCisJQkNNTE9HKEJDTUxPR19EQkcsICJCQ003MDAxMiBzdXNwZW5kIHN1Y2Nlc3NcbiIpOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCisvKioKKyAqIGNyeXN0YWxoZF9yZXN1bWUgLSBSZXN1bWUgZnJhbWUgY2FwdHVyZS4KKyAqIEBjdHg6IENvbW1hbmQgbGF5ZXIgY29udGV4dHguCisgKgorICogUmV0dXJuOgorICoJc3RhdHVzCisgKgorICoKKyAqIFJlc3VtZSBmcmFtZSBjYXB0dXJlLgorICoKKyAqIFBNX1Jlc3VtZSBjYW4ndCByZXN1bWUgdGhlIHBsYXliYWNrIHN0YXRlIGJhY2sgdG8gcHJlLXN1c3BlbmQgc3RhdGUKKyAqIGJlY2F1c2Ugd2UgZG9uJ3Qga2VlcCB2aWRlbyBjbGlwIHJlbGF0ZWQgaW5mb3JtYXRpb24gd2l0aGluIGRyaXZlci4KKyAqIFRvIGdldCBiYWNrIHRvIHRoZSBwcmUtc3VzcGVuZCBzdGF0ZSBBcHAgd2lsbCByZS1vcGVuIHRoZSBkZXZpY2UgYW5kCisgKiBzdGFydCBhIG5ldyBwbGF5YmFjayBzZXNzaW9uIGZyb20gdGhlIHByZS1zdXNwZW5kIGNsaXAgcG9zaXRpb24uCisgKgorICovCitCQ19TVEFUVVMgY3J5c3RhbGhkX3Jlc3VtZShzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4KQoreworCUJDTUxPRyhCQ01MT0dfREJHLCAiY3J5c3RhbGhkX3Jlc3VtZSBTdWNjZXNzICV4XG4iLCBjdHgtPnN0YXRlKTsKKworCWJjX2Nwcm9jX21hcmtfcHdyX3N0YXRlKGN0eCk7CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKKy8qKgorICogY3J5c3RhbGhkX3VzZXJfb3BlbiAtIENyZWF0ZSBhcHBsaWNhdGlvbiBoYW5kbGUuCisgKiBAY3R4OiBDb21tYW5kIGxheWVyIGNvbnRleHR4LgorICogQHVzZXJfY3R4OiBVc2VyIElEIGNvbnRleHQuCisgKgorICogUmV0dXJuOgorICoJc3RhdHVzCisgKgorICogQ3JlYXRlcyBhbiBhcHBsaWNhdGlvbiBzcGVjaWZpYyBVSUQgYW5kIGFsbG9jYXRlcworICogYXBwbGljYXRpb24gc3BlY2lmaWMgcmVzb3VyY2VzLiBIVyBsYXllciBpbml0aWFsaXphdGlvbgorICogaXMgZG9uZSBmb3IgdGhlIGZpcnN0IG9wZW4gcmVxdWVzdC4KKyAqLworQkNfU1RBVFVTIGNyeXN0YWxoZF91c2VyX29wZW4oc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwKKwkJCSAgICBzdHJ1Y3QgY3J5c3RhbGhkX3VzZXIgKip1c2VyX2N0eCkKK3sKKwlzdHJ1Y3QgY3J5c3RhbGhkX3VzZXIgKnVjOworCisJaWYgKCFjdHggfHwgIXVzZXJfY3R4KSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgYXJnLi5cbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJdWMgPSBiY19jcHJvY19nZXRfdWlkKGN0eCk7CisJaWYgKCF1YykgeworCQlCQ01MT0coQkNNTE9HX0lORk8sICJObyBmcmVlIHVzZXIgY29udGV4dC4uLlxuIik7CisJCXJldHVybiBCQ19TVFNfQlVTWTsKKwl9CisKKwlCQ01MT0coQkNNTE9HX0lORk8sICJPcGVuaW5nIG5ldyB1c2VyWyV4XSBoYW5kbGVcbiIsIHVjLT51aWQpOworCisJY3J5c3RhbGhkX2h3X29wZW4oJmN0eC0+aHdfY3R4LCBjdHgtPmFkcCk7CisKKwl1Yy0+aW5fdXNlID0gMTsKKworCSp1c2VyX2N0eCA9IHVjOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCisvKioKKyAqIGNyeXN0YWxoZF91c2VyX2Nsb3NlIC0gQ2xvc2UgYXBwbGljYXRpb24gaGFuZGxlLgorICogQGN0eDogQ29tbWFuZCBsYXllciBjb250ZXh0eC4KKyAqIEB1YzogVXNlciBJRCBjb250ZXh0LgorICoKKyAqIFJldHVybjoKKyAqCXN0YXR1cworICoKKyAqIENsb3NlciBhcGxpY2F0aW9uIGhhbmRsZSBhbmQgcmVsZWFzZSBhcHAgc3BlY2lmaWMKKyAqIHJlc291cmNlcy4KKyAqLworQkNfU1RBVFVTIGNyeXN0YWxoZF91c2VyX2Nsb3NlKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsIHN0cnVjdCBjcnlzdGFsaGRfdXNlciAqdWMpCit7CisJdWludDMyX3QgbW9kZSA9IHVjLT5tb2RlOworCisJY3R4LT51c2VyW3VjLT51aWRdLm1vZGUgPSBEVFNfTU9ERV9JTlY7CisJY3R4LT51c2VyW3VjLT51aWRdLmluX3VzZSA9IDA7CisJY3R4LT5jaW5fd2FpdF9leGl0ID0gMTsKKwljdHgtPnB3cl9zdGF0ZV9jaGFuZ2UgPSAwOworCisJQkNNTE9HKEJDTUxPR19JTkZPLCAiQ2xvc2luZyB1c2VyWyV4XSBoYW5kbGVcbiIsIHVjLT51aWQpOworCisJaWYgKChtb2RlID09IERUU19ESUFHX01PREUpIHx8IChtb2RlID09IERUU19QTEFZQkFDS19NT0RFKSkgeworCQljcnlzdGFsaGRfaHdfZnJlZV9kbWFfcmluZ3MoJmN0eC0+aHdfY3R4KTsKKwkJY3J5c3RhbGhkX2Rlc3Ryb3lfZGlvX3Bvb2woY3R4LT5hZHApOworCX0gZWxzZSBpZiAoYmNfY3Byb2NfZ2V0X3VzZXJfY291bnQoY3R4KSkgeworCQlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7CisJfQorCisJY3J5c3RhbGhkX2h3X2Nsb3NlKCZjdHgtPmh3X2N0eCk7CisKKwljdHgtPnN0YXRlID0gQkNfTElOS19JTlZBTElEOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCisvKioKKyAqIGNyeXN0YWxoZF9zZXR1cF9jbWRfY29udGV4dCAtIFNldHVwIENvbW1hbmQgbGF5ZXIgcmVzb3VyY2VzLgorICogQGN0eDogQ29tbWFuZCBsYXllciBjb250ZXh0eC4KKyAqIEBhZHA6IEFkYXB0ZXIgY29udGV4dAorICoKKyAqIFJldHVybjoKKyAqCXN0YXR1cworICoKKyAqIENhbGxlZCBhdCB0aGUgdGltZSBvZiBkcml2ZXIgbG9hZC4KKyAqLworQkNfU1RBVFVTIF9fZGV2aW5pdCBjcnlzdGFsaGRfc2V0dXBfY21kX2NvbnRleHQoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwKKwkJCQkgICAgc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCkKK3sKKwlpbnQgaSA9IDA7CisKKwlpZiAoIWN0eCB8fCAhYWRwKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgYXJnISFcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJaWYgKGN0eC0+YWRwKQorCQlCQ01MT0coQkNNTE9HX0RCRywgIlJlc2V0dGluZyBDbWQgY29udGV4dCBkZWxldGUgbWlzc2luZy4uXG4iKTsKKworCWN0eC0+YWRwID0gYWRwOworCWZvciAoaSA9IDA7IGkgPCBCQ19MSU5LX01BWF9PUEVOUzsgaSsrKSB7CisJCWN0eC0+dXNlcltpXS51aWQgPSBpOworCQljdHgtPnVzZXJbaV0uaW5fdXNlID0gMDsKKwkJY3R4LT51c2VyW2ldLm1vZGUgPSBEVFNfTU9ERV9JTlY7CisJfQorCisJLypPcGVuIGFuZCBDbG9zZSB0aGUgSGFyZHdhcmUgdG8gcHV0IGl0IGluIHRvIHNsZWVwIHN0YXRlKi8KKwljcnlzdGFsaGRfaHdfb3BlbigmY3R4LT5od19jdHgsIGN0eC0+YWRwKTsKKwljcnlzdGFsaGRfaHdfY2xvc2UoJmN0eC0+aHdfY3R4KTsKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKKy8qKgorICogY3J5c3RhbGhkX2RlbGV0ZV9jbWRfY29udGV4dCAtIFJlbGVhc2UgQ29tbWFuZCBsYXllciByZXNvdXJjZXMuCisgKiBAY3R4OiBDb21tYW5kIGxheWVyIGNvbnRleHR4LgorICoKKyAqIFJldHVybjoKKyAqCXN0YXR1cworICoKKyAqIENhbGxlZCBhdCB0aGUgdGltZSBvZiBkcml2ZXIgdW4tbG9hZC4KKyAqLworQkNfU1RBVFVTIF9fZGV2ZXhpdCBjcnlzdGFsaGRfZGVsZXRlX2NtZF9jb250ZXh0KHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgpCit7CisJQkNNTE9HKEJDTUxPR19EQkcsICJEZWxldGluZyBDb21tYW5kIGNvbnRleHQuLlxuIik7CisKKwljdHgtPmFkcCA9IE5VTEw7CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKKy8qKgorICogY3J5c3RhbGhkX2dldF9jbWRfcHJvYyAgLSBDcHJvYyB0YWJsZSBsb29rdXAuCisgKiBAY3R4OiBDb21tYW5kIGxheWVyIGNvbnRleHR4LgorICogQGNtZDogSU9DVEwgY29tbWFuZCBjb2RlLgorICogQHVjOiBVc2VyIElEIGNvbnRleHQuCisgKgorICogUmV0dXJuOgorICoJY29tbWFuZCBwcm9jIGZ1bmN0aW9uIHBvaW50ZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyB0aGUgcHJvY2VzcyBjb250ZXh0LCBhcHBsaWNhdGlvbidzCisgKiBtb2RlIG9mIG9wZXJhdGlvbiBhbmQgcmV0dXJucyB0aGUgZnVuY3Rpb24gcG9pbnRlcgorICogZnJvbSB0aGUgY3Byb2MgdGFibGUuCisgKi8KK2NyeXN0YWxoZF9jbWRfcHJvYyBjcnlzdGFsaGRfZ2V0X2NtZF9wcm9jKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsIHVpbnQzMl90IGNtZCwKKwkJCQkgICAgICBzdHJ1Y3QgY3J5c3RhbGhkX3VzZXIgKnVjKQoreworCWNyeXN0YWxoZF9jbWRfcHJvYyBjcHJvYyA9IE5VTEw7CisJdW5zaWduZWQgaW50IGksIHRibF9zejsKKworCWlmICghY3R4KSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgYXJnLi4gQ21kWyVkXVxuIiwgY21kKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKChjbWQgIT0gQkNNX0lPQ19HRVRfRFJWX1NUQVQpICYmIChjdHgtPnN0YXRlICYgQkNfTElOS19TVVNQRU5EKSkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIFN0YXRlIFtzdXNwZW5kIFNldF0uLiBDbWRbJWRdXG4iLCBjbWQpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwl0Ymxfc3ogPSBzaXplb2YoZ19jcnlzdGFsaGRfY3Byb2NfdGJsKSAvIHNpemVvZihjcnlzdGFsaGRfY21kX3RibF90KTsKKwlmb3IgKGkgPSAwOyBpIDwgdGJsX3N6OyBpKyspIHsKKwkJaWYgKGdfY3J5c3RhbGhkX2Nwcm9jX3RibFtpXS5jbWRfaWQgPT0gY21kKSB7CisJCQlpZiAoKHVjLT5tb2RlID09IERUU19NT05JVE9SX01PREUpICYmCisJCQkgICAgKGdfY3J5c3RhbGhkX2Nwcm9jX3RibFtpXS5ibG9ja19tb24pKSB7CisJCQkJQkNNTE9HKEJDTUxPR19JTkZPLCAiQmxvY2tpbmcgY21kICVkIFxuIiwgY21kKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWNwcm9jID0gZ19jcnlzdGFsaGRfY3Byb2NfdGJsW2ldLmNtZF9wcm9jOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gY3Byb2M7Cit9CisKKy8qKgorICogY3J5c3RhbGhkX2NtZF9pbnRlcnJ1cHQgLSBJU1IgZW50cnkgcG9pbnQKKyAqIEBjdHg6IENvbW1hbmQgbGF5ZXIgY29udGV4dHguCisgKgorICogUmV0dXJuOgorICoJVFJVRTogSWYgaW50ZXJydXB0IGZyb20gYmNtNzAwMTIgZGV2aWNlLgorICoKKyAqCisgKiBJU1IgZW50cnkgcG9pbnQgZnJvbSBPUyBsYXllci4KKyAqLworYm9vbCBjcnlzdGFsaGRfY21kX2ludGVycnVwdChzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4KQoreworCWlmICghY3R4KSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgYXJnLi5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gY3J5c3RhbGhkX2h3X2ludGVycnVwdChjdHgtPmFkcCwgJmN0eC0+aHdfY3R4KTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2NtZHMuaCBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2NtZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjI5MGFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfY21kcy5oCkBAIC0wLDAgKzEsODggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5LCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqCisgKiAgTmFtZTogY3J5c3RhbGhkX2NtZHMgLiBoCisgKgorICogIERlc2NyaXB0aW9uOgorICoJCUJDTTcwMDEwIExpbnV4IGRyaXZlciB1c2VyIGNvbW1hbmQgaW50ZXJmYWNlcy4KKyAqCisgKiAgSElTVE9SWToKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGNyeXN0YWxoZCBkZXZpY2UgZHJpdmVyLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBkcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgZHJpdmVyLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0NSWVNUQUxIRF9DTURTX0hfCisjZGVmaW5lIF9DUllTVEFMSERfQ01EU19IXworCisvKgorICogTk9URTo6IFRoaXMgaXMgdGhlIG1haW4gaW50ZXJmYWNlIGZpbGUgYmV0d2VlbiB0aGUgTGludXggbGF5ZXIKKyAqICAgICAgICBhbmQgdGhlIGhhcndhcmUgbGF5ZXIuIFRoaXMgZmlsZSB3aWxsIHVzZSB0aGUgZGVmaW5pdGlvbnMKKyAqICAgICAgICBmcm9tIF9kdHNfZ2xvYiBhbmQgZHRzX2RlZnMgZXRjLi4gd2hpY2ggYXJlIGRlZmluZWQgZm9yCisgKiAgICAgICAgd2luZG93cy4KKyAqLworI2luY2x1ZGUgImNyeXN0YWxoZF9taXNjLmgiCisjaW5jbHVkZSAiY3J5c3RhbGhkX2h3LmgiCisKK2VudW0gX2NyeXN0YWxoZF9zdGF0ZXsKKwlCQ19MSU5LX0lOVkFMSUQJCT0gMHgwMCwKKwlCQ19MSU5LX0lOSVQJCT0gMHgwMSwKKwlCQ19MSU5LX0NBUF9FTgkJPSAweDAyLAorCUJDX0xJTktfRk1UX0NIRwkJPSAweDA0LAorCUJDX0xJTktfU1VTUEVORAkJPSAweDEwLAorCUJDX0xJTktfUEFVU0VECQk9IDB4MjAsCisJQkNfTElOS19SRUFEWQk9IChCQ19MSU5LX0lOSVQgfCBCQ19MSU5LX0NBUF9FTiB8IEJDX0xJTktfRk1UX0NIRyksCit9OworCitzdHJ1Y3QgY3J5c3RhbGhkX3VzZXIgeworCXVpbnQzMl90CXVpZDsKKwl1aW50MzJfdAlpbl91c2U7CisJdWludDMyX3QJbW9kZTsKK307CisKKyNkZWZpbmUgRFRTX01PREVfSU5WCSgtMSkKKworc3RydWN0IGNyeXN0YWxoZF9jbWQgeworCXVpbnQzMl90CQlzdGF0ZTsKKwlzdHJ1Y3QgY3J5c3RhbGhkX2FkcAkqYWRwOworCXN0cnVjdCBjcnlzdGFsaGRfdXNlcgl1c2VyW0JDX0xJTktfTUFYX09QRU5TXTsKKworCXNwaW5sb2NrX3QJCWN0eF9sb2NrOworCXVpbnQzMl90CQl0eF9saXN0X2lkOworCXVpbnQzMl90CQljaW5fd2FpdF9leGl0OworCXVpbnQzMl90CQlwd3Jfc3RhdGVfY2hhbmdlOworCXN0cnVjdCBjcnlzdGFsaGRfaHcJaHdfY3R4OworfTsKKwordHlwZWRlZiBCQ19TVEFUVVMgKCpjcnlzdGFsaGRfY21kX3Byb2MpKHN0cnVjdCBjcnlzdGFsaGRfY21kICosIGNyeXN0YWxoZF9pb2N0bF9kYXRhICopOworCit0eXBlZGVmIHN0cnVjdCBfY3J5c3RhbGhkX2NtZF90YmwgeworCXVpbnQzMl90CQljbWRfaWQ7CisJY29uc3QgY3J5c3RhbGhkX2NtZF9wcm9jCWNtZF9wcm9jOworCXVpbnQzMl90CQlibG9ja19tb247Cit9IGNyeXN0YWxoZF9jbWRfdGJsX3Q7CisKKworQkNfU1RBVFVTIGNyeXN0YWxoZF9zdXNwZW5kKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppZGF0YSk7CitCQ19TVEFUVVMgY3J5c3RhbGhkX3Jlc3VtZShzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4KTsKK2NyeXN0YWxoZF9jbWRfcHJvYyBjcnlzdGFsaGRfZ2V0X2NtZF9wcm9jKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsIHVpbnQzMl90IGNtZCwKKwkJCQkgICAgICBzdHJ1Y3QgY3J5c3RhbGhkX3VzZXIgKnVjKTsKK0JDX1NUQVRVUyBjcnlzdGFsaGRfdXNlcl9vcGVuKHN0cnVjdCBjcnlzdGFsaGRfY21kICpjdHgsIHN0cnVjdCBjcnlzdGFsaGRfdXNlciAqKnVzZXJfY3R4KTsKK0JDX1NUQVRVUyBjcnlzdGFsaGRfdXNlcl9jbG9zZShzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4LCBzdHJ1Y3QgY3J5c3RhbGhkX3VzZXIgKnVjKTsKK0JDX1NUQVRVUyBjcnlzdGFsaGRfc2V0dXBfY21kX2NvbnRleHQoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCwgc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCk7CitCQ19TVEFUVVMgY3J5c3RhbGhkX2RlbGV0ZV9jbWRfY29udGV4dChzdHJ1Y3QgY3J5c3RhbGhkX2NtZCAqY3R4KTsKK2Jvb2wgY3J5c3RhbGhkX2NtZF9pbnRlcnJ1cHQoc3RydWN0IGNyeXN0YWxoZF9jbWQgKmN0eCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfZndfaWYuaCBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2Z3X2lmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjYxY2QxOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2Z3X2lmLmgKQEAgLTAsMCArMSwzNjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA5LCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqCisgKiAgTmFtZTogY3J5c3RhbGhkX2Z3X2lmIC4gaAorICoKKyAqICBEZXNjcmlwdGlvbjoKKyAqCQlCQ003MDAxMiBGaXJtd2FyZSBpbnRlcmZhY2UgZGVmaW5pdGlvbnMuCisgKgorICogIEhJU1RPUlk6CisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBjcnlzdGFsaGQgZGV2aWNlIGRyaXZlci4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGRyaXZlci4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9DUllTVEFMSERfRldfSUZfSF8KKyNkZWZpbmUgX0NSWVNUQUxIRF9GV19JRl9IXworCisvKiBUQkQ6IFB1bGwgaW4gb25seSByZXF1aXJlZCBkZWZzIGludG8gdGhpcyBmaWxlLi4gKi8KKworCisKKy8qIFVzZXIgRGF0YSBIZWFkZXIgKi8KK3R5cGVkZWYgc3RydWN0IHVzZXJfZGF0YSB7CisgICBzdHJ1Y3QgdXNlcl9kYXRhCSpuZXh0OworICAgdWludDMyX3QJCXR5cGU7CisgICB1aW50MzJfdAkJc2l6ZTsKK30gVURfSERSOworCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiAgICBNUEVHIEV4dGVuc2lvbiB0byB0aGUgUFBCCQkJICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgIHVpbnQzMl90CQl0b19iZV9kZWZpbmVkOworICAgdWludDMyX3QJCXZhbGlkOworCisgICAvKiBBbHdheXMgdmFsaWQsIGRlZmF1bHRzIHRvIHBpY3R1cmUgc2l6ZSBpZiBubworICAgICAgc2VxdWVuY2UgZGlzcGxheSBleHRlbnNpb24gaW4gdGhlIHN0cmVhbS4gKi8KKyAgIHVpbnQzMl90CQlkaXNwbGF5X2hvcml6b250YWxfc2l6ZTsKKyAgIHVpbnQzMl90CQlkaXNwbGF5X3ZlcnRpY2FsX3NpemU7CisKKyAgIC8qIE1QRUdfVkFMSURfUEFOU0NBTgorICAgICAgT2Zmc2V0cyBhcmUgYSBjb3B5IHZhbHVlcyBmcm9tIHRoZSBNUEVHIHN0cmVhbS4gKi8KKyAgIHVpbnQzMl90CQlvZmZzZXRfY291bnQ7CisgICBpbnQzMl90CQlob3Jpem9udGFsX29mZnNldFszXTsKKyAgIGludDMyX3QJCXZlcnRpY2FsX29mZnNldFszXTsKKworICAgLyogTVBFR19WQUxJRF9VU0VSREFUQQorICAgICAgVXNlciBkYXRhIGlzIGluIHRoZSBmb3JtIG9mIGEgbGlua2VkIGxpc3QuICovCisgICBpbnQzMl90CQl1c2VyRGF0YVNpemU7CisgICBVRF9IRFIJCSp1c2VyRGF0YTsKKworfSBQUEJfTVBFRzsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSoKKyAqICAgIFZDMSBFeHRlbnNpb24gdG8gdGhlIFBQQgkJCSAgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordHlwZWRlZiBzdHJ1Y3QgeworICAgdWludDMyX3QJCXRvX2JlX2RlZmluZWQ7CisgICB1aW50MzJfdAkJdmFsaWQ7CisKKyAgIC8qIEFsd2F5cyB2YWxpZCwgZGVmYXVsdHMgdG8gcGljdHVyZSBzaXplIGlmIG5vCisgICAgICBzZXF1ZW5jZSBkaXNwbGF5IGV4dGVuc2lvbiBpbiB0aGUgc3RyZWFtLiAqLworICAgdWludDMyX3QJCWRpc3BsYXlfaG9yaXpvbnRhbF9zaXplOworICAgdWludDMyX3QJCWRpc3BsYXlfdmVydGljYWxfc2l6ZTsKKworICAvKiBWQzEgcGFuIHNjYW4gd2luZG93cyAqLworICAgdWludDMyX3QJCW51bV9wYW5zY2FuX3dpbmRvd3M7CisgICBpbnQzMl90CQlwc19ob3Jpel9vZmZzZXRbNF07CisgICBpbnQzMl90CQlwc192ZXJ0X29mZnNldFs0XTsKKyAgIGludDMyX3QJCXBzX3dpZHRoWzRdOworICAgaW50MzJfdAkJcHNfaGVpZ2h0WzRdOworCisgICAvKiBWQzFfVkFMSURfVVNFUkRBVEEKKyAgICAgIFVzZXIgZGF0YSBpcyBpbiB0aGUgZm9ybSBvZiBhIGxpbmtlZCBsaXN0LiAqLworICAgaW50MzJfdAkJdXNlckRhdGFTaXplOworICAgVURfSERSCQkqdXNlckRhdGE7CisKK30gUFBCX1ZDMTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCisgKiAgICBILjI2NCBFeHRlbnNpb24gdG8gdGhlIFBQQgkJCSoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworLyoqCisgKiBAYnJpZWYgRmlsbSBncmFpbiBTRUkgbWVzc2FnZS4KKyAqCisgKiBDb250ZW50IG9mIHRoZSBmaWxtIGdyYWluIFNFSSBtZXNzYWdlLgorICovCisKKy8qIG1heGltdW0gbnVtYmVyIG9mIG1vZGVsLXZhbHVlcyBhcyBmb3IgVGhvbXNvbiBzcGVjKHN0YW5kYXJkIHNheXMgNSkgKi8KKyNkZWZpbmUgTUFYX0ZHVF9NT0RFTF9WQUxVRQkgKDMpCisKKy8qIG1heGltdW0gbnVtYmVyIG9mIGludGVydmFscyhhcyBtYW55IGFzIDI1NiBpbnRlcnZhbHM/KSAqLworI2RlZmluZSBNQVhfRkdUX1ZBTFVFX0lOVEVSVkFMCSgyNTYpCisKK3R5cGVkZWYgc3RydWN0IEZHVF9TRUkgeworICAgIHN0cnVjdCBGR1RfU0VJICpuZXh0OworICAgIHVuc2lnbmVkIGNoYXIgbW9kZWxfdmFsdWVzWzNdW01BWF9GR1RfVkFMVUVfSU5URVJWQUxdW01BWF9GR1RfTU9ERUxfVkFMVUVdOworICAgIHVuc2lnbmVkIGNoYXIgdXBwZXJfYm91bmRbM11bTUFYX0ZHVF9WQUxVRV9JTlRFUlZBTF07CisgICAgdW5zaWduZWQgY2hhciBsb3dlcl9ib3VuZFszXVtNQVhfRkdUX1ZBTFVFX0lOVEVSVkFMXTsKKworICAgIHVuc2lnbmVkIGNoYXIgY2FuY2VsX2ZsYWc7CS8qIENhbmNlbCBmbGFnOiAxIG5vIGZpbG0gZ3JhaW4uICovCisgICAgdW5zaWduZWQgY2hhciBtb2RlbF9pZDsJLyogTW9kZWwgaWQuICovCisKKyAgICAvKiArdW51c2VkIFNFIGJhc2VkIG9uIFRob21zb24gc3BlYyAqLworICAgIHVuc2lnbmVkIGNoYXIgY29sb3JfZGVzY19mbGFnOwkvKiBTZXBhcmF0ZSBjb2xvciBkZXNjcml0aW9uIGZsYWcuICovCisgICAgdW5zaWduZWQgY2hhciBiaXRfZGVwdGhfbHVtYTsJLyogQml0IGRlcHRoIGx1bWEgbWludXMgOC4gKi8KKyAgICB1bnNpZ25lZCBjaGFyIGJpdF9kZXB0aF9jaHJvbWE7CS8qIEJpdCBkZXB0aCBjaHJvbWEgbWludXMgOC4gKi8KKyAgICB1bnNpZ25lZCBjaGFyIGZ1bGxfcmFuZ2VfZmxhZzsJLyogRnVsbCByYW5nZSBmbGFnLiAqLworICAgIHVuc2lnbmVkIGNoYXIgY29sb3JfcHJpbWFyaWVzOwkvKiBDb2xvciBwcmltYXJpZXMuICovCisgICAgdW5zaWduZWQgY2hhciB0cmFuc2Zlcl9jaGFyYWN0OwkvKiBUcmFuc2ZlciBjaGFyYWN0ZXJpc3RpY3MuICovCisgICAgdW5zaWduZWQgY2hhciBtYXRyaXhfY29lZmY7CQkvKjwgTWF0cml4IGNvZWZmaWNpZW50cy4gKi8KKyAgICAvKiAtdW51c2VkIFNFIGJhc2VkIG9uIFRob21zb24gc3BlYyAqLworCisgICAgdW5zaWduZWQgY2hhciBibGVuZGluZ19tb2RlX2lkOwkvKiBCbGVuZGluZyBtb2RlLiAqLworICAgIHVuc2lnbmVkIGNoYXIgbG9nMl9zY2FsZV9mYWN0b3I7CS8qIExvZzIgc2NhbGUgZmFjdG9yICgyLTcpLiAqLworICAgIHVuc2lnbmVkIGNoYXIgY29tcF9mbGFnWzNdOwkJLyogQ29tcG9uZW50cyBbMCwyXSBwYXJhbWV0ZXJzIHByZXNlbnQgZmxhZy4gKi8KKyAgICB1bnNpZ25lZCBjaGFyIG51bV9pbnRlcnZhbHNfbWludXMxWzNdOyAvKiBOdW1iZXIgb2YgaW50ZW5zaXR5IGxldmVsIGludGVydmFscy4gKi8KKyAgICB1bnNpZ25lZCBjaGFyIG51bV9tb2RlbF92YWx1ZXNbM107CS8qIE51bWJlciBvZiBtb2RlbCB2YWx1ZXMuICovCisgICAgdWludDE2X3QgICAgICByZXBldGl0aW9uX3BlcmlvZDsJLyogUmVwZXRpdGlvbiBwZXJpb2QgKDAtMTYzODQpICovCisKK30gRkdUX1NFSTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgLyogJ3ZhbGlkJyBzcGVjaWZpZXMgd2hpY2ggZmllbGRzIChvciBzZXRzIG9mCisgICAgKiBmaWVsZHMpIGJlbG93IGFyZSB2YWxpZC4gIElmIHRoZSBjb3JyZXNwb25kaW5nCisgICAgKiBiaXQgaW4gJ3ZhbGlkJyBpcyBOT1Qgc2V0IHRoZW4gdGhhdCBmaWVsZChzKQorICAgICogaXMgKGFyZSkgbm90IGluaXRpYWxpemVkLiAqLworICAgdWludDMyX3QJdmFsaWQ7CisKKyAgIGludDMyX3QJCXBvY190b3A7CS8qIFBPQyBmb3IgVG9wIEZpZWxkL0ZyYW1lICovCisgICBpbnQzMl90CQlwb2NfYm90dG9tOwkvKiBQT0MgZm9yIEJvdHRvbSBGaWVsZCAgICAqLworICAgdWludDMyX3QJCWlkcl9waWNfaWQ7CisKKyAgIC8qIEgyNjRfVkFMSURfUEFOU0NBTiAqLworICAgdWludDMyX3QJCXBhbl9zY2FuX2NvdW50OworICAgaW50MzJfdAkJcGFuX3NjYW5fbGVmdFszXTsKKyAgIGludDMyX3QJCXBhbl9zY2FuX3JpZ2h0WzNdOworICAgaW50MzJfdAkJcGFuX3NjYW5fdG9wWzNdOworICAgaW50MzJfdAkJcGFuX3NjYW5fYm90dG9tWzNdOworCisgICAvKiBIMjY0X1ZBTElEX0NUX1RZUEUgKi8KKyAgIHVpbnQzMl90CQljdF90eXBlX2NvdW50OworICAgdWludDMyX3QJCWN0X3R5cGVbM107CisKKyAgIC8qIEgyNjRfVkFMSURfU1BTX0NST1AgKi8KKyAgIGludDMyX3QJCXNwc19jcm9wX2xlZnQ7CisgICBpbnQzMl90CQlzcHNfY3JvcF9yaWdodDsKKyAgIGludDMyX3QJCXNwc19jcm9wX3RvcDsKKyAgIGludDMyX3QJCXNwc19jcm9wX2JvdHRvbTsKKworICAgLyogSDI2NF9WQUxJRF9WVUkgKi8KKyAgIHVpbnQzMl90CQljaHJvbWFfdG9wOworICAgdWludDMyX3QJCWNocm9tYV9ib3R0b207CisKKyAgIC8qIEgyNjRfVkFMSURfVVNFUiAqLworICAgdWludDMyX3QJCXVzZXJfZGF0YV9zaXplOworICAgVURfSERSCQkqdXNlcl9kYXRhOworCisgICAvKiBIMjY0IFZBTElEIEZHVCAqLworICAgRkdUX1NFSQkJKnBmZ3Q7CisKK30gUFBCX0gyNjQ7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIC8qIENvbW1vbiBmaWVsZHMuICovCisgICB1aW50MzJfdAlwaWN0dXJlX251bWJlcjsJLyogT3JkaW5hbCBkaXNwbGF5IG51bWJlciAqLworICAgdWludDMyX3QJdmlkZW9fYnVmZmVyOwkvKiBWaWRlbyAocGljYnVmKSBudW1iZXIgKi8KKyAgIHVpbnQzMl90CXZpZGVvX2FkZHJlc3M7CS8qIEFkZHJlc3Mgb2YgcGljYnVmIFkgKi8KKyAgIHVpbnQzMl90CXZpZGVvX2FkZHJlc3NfdXY7IC8qIEFkZHJlc3Mgb2YgcGljYnVmIFVWICovCisgICB1aW50MzJfdAl2aWRlb19zdHJpcGU7CS8qIFBpY2J1ZiBzdHJpcGUgKi8KKyAgIHVpbnQzMl90CXZpZGVvX3dpZHRoOwkvKiBQaWNidWYgd2lkdGggKi8KKyAgIHVpbnQzMl90CXZpZGVvX2hlaWdodDsJLyogUGljYnVmIGhlaWdodCAqLworCisgICB1aW50MzJfdAljaGFubmVsX2lkOwkvKiBEZWNvZGVyIGNoYW5uZWwgSUQgKi8KKyAgIHVpbnQzMl90CXN0YXR1czsJCS8qIHJlc2VydmVkICovCisgICB1aW50MzJfdAl3aWR0aDsJCS8qIHBpeGVscyAqLworICAgdWludDMyX3QJaGVpZ2h0OwkJLyogcGl4ZWxzICovCisgICB1aW50MzJfdAljaHJvbWFfZm9ybWF0OwkvKiBzZWUgYWJvdmUgKi8KKyAgIHVpbnQzMl90CXB1bGxkb3duOwkvKiBzZWUgYWJvdmUgKi8KKyAgIHVpbnQzMl90CWZsYWdzOwkJLyogc2VlIGFib3ZlICovCisgICB1aW50MzJfdAlwdHM7CQkvKiAzMiBMU0JzIG9mIFBUUyAqLworICAgdWludDMyX3QJcHJvdG9jb2w7CS8qIHByb3RvY29sWFhYIChhYm92ZSkgKi8KKworICAgdWludDMyX3QJZnJhbWVfcmF0ZTsJLyogc2VlIGFib3ZlICovCisgICB1aW50MzJfdAltYXRyaXhfY29lZmY7CS8qIHNlZSBhYm92ZSAqLworICAgdWludDMyX3QJYXNwZWN0X3JhdGlvOwkvKiBzZWUgYWJvdmUgKi8KKyAgIHVpbnQzMl90CWNvbG91cl9wcmltYXJpZXM7IC8qIHNlZSBhYm92ZSAqLworICAgdWludDMyX3QJdHJhbnNmZXJfY2hhcjsJLyogc2VlIGFib3ZlICovCisgICB1aW50MzJfdAlwY3Jfb2Zmc2V0OwkvKiA0NWtIeiBpZiBQQ1IgdHlwZTsgZWxzZSAyN01IeiAqLworICAgdWludDMyX3QJbl9kcm9wOwkJLyogTnVtYmVyIG9mIHBpY3R1cmVzIHRvIGJlIGRyb3BwZWQgKi8KKworICAgdWludDMyX3QJY3VzdG9tX2FzcGVjdF9yYXRpb193aWR0aF9oZWlnaHQ7CisJCQkvKiB1cHBlciAxNi1iaXRzIGlzIFkgYW5kIGxvd2VyIDE2LWJpdHMgaXMgWCAqLworCisgICB1aW50MzJfdAlwaWN0dXJlX3RhZzsJLyogSW5kZXhpbmcgdGFnIGZyb20gQlVEIHBhY2tldHMgKi8KKyAgIHVpbnQzMl90CXBpY3R1cmVfZG9uZV9wYXlsb2FkOworICAgdWludDMyX3QJcGljdHVyZV9tZXRhX3BheWxvYWQ7CisgICB1aW50MzJfdAlyZXNlcnZlZFsxXTsKKworICAgLyogUHJvdG9jb2wtc3BlY2lmaWMgZXh0ZW5zaW9ucy4gKi8KKyAgIHVuaW9uIHsKKyAgICAgIFBQQl9IMjY0CWgyNjQ7CisgICAgICBQUEJfTVBFRwltcGVnOworICAgICAgUFBCX1ZDMQkgdmMxOworICAgfSBvdGhlcjsKKworfSBQUEI7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgIHVpbnQzMl90CWJGb3JtYXRDaGFuZ2U7CisgICB1aW50MzJfdAlyZXNvbHV0aW9uOworICAgdWludDMyX3QJY2hhbm5lbElkOworICAgdWludDMyX3QJcHBiUHRyOworICAgaW50MzJfdAlwdHNTdGNPZmZzZXQ7CisgICB1aW50MzJfdAl6ZXJvUGFuc2NhblZhbGlkOworICAgdWludDMyX3QJZHJhbU91dEJ1ZkFkZHI7CisgICB1aW50MzJfdAl5Q29tcG9uZW50OworICAgUFBCCQkJcHBiOworCit9IEMwMTFfUElCOworCisKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVpbnQzMl90CWNvbW1hbmQ7CisgICAgdWludDMyX3QJc2VxdWVuY2U7CisgICAgdWludDMyX3QJc3RhdHVzOworICAgIHVpbnQzMl90CXBpY0J1ZjsKKyAgICB1aW50MzJfdAlwaWNSZWxCdWY7CisgICAgdWludDMyX3QJcGljSW5mb0RlbGl2ZXJ5UTsKKyAgICB1aW50MzJfdAlwaWNJbmZvUmVsZWFzZVE7CisgICAgdWludDMyX3QJY2hhbm5lbFN0YXR1czsKKyAgICB1aW50MzJfdAl1c2VyRGF0YURlbGl2ZXJ5UTsKKyAgICB1aW50MzJfdAl1c2VyRGF0YVJlbGVhc2VROworICAgIHVpbnQzMl90CXRyYW5zcG9ydFN0cmVhbUNhcHR1cmVBZGRyOworICAgIHVpbnQzMl90CWFzeW5jRXZlbnRROworCit9IERlY1JzcENoYW5uZWxTdGFydFZpZGVvOworCisjZGVmaW5lIGVDTURfQzAxMV9DTURfQkFTRQkgICgweDczNzYzMDAwKQorCisvKiBob3N0IGNvbW1hbmRzICovCit0eXBlZGVmIGVudW0geworICAgIGVDTURfVFNfR0VUX05FWFRfUElDCT0gMHg3Mzc2RjEwMCwgLyogZGVidWcgZ2V0IG5leHQgcGljdHVyZSAqLworICAgIGVDTURfVFNfR0VUX0xBU1RfUElDCT0gMHg3Mzc2RjEwMiwgLyogZGVidWcgZ2V0IGxhc3QgcGljIHN0YXR1cyAqLworICAgIGVDTURfVFNfUkVBRF9XUklURV9NRU0JPSAweDczNzZGMTA0LCAvKiBkZWJ1ZyByZWFkIHdyaXRlIG1lbW9yeSAqLworCisgICAgLyogTmV3IEFQSSBjb21tYW5kcyAqLworICAgIC8qIEdlbmVyYWwgY29tbWFuZHMgKi8KKyAgICBlQ01EX0MwMTFfSU5JVAkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDAxLAorICAgIGVDTURfQzAxMV9SRVNFVAkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDAyLAorICAgIGVDTURfQzAxMV9TRUxGX1RFU1QJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgwMywKKyAgICBlQ01EX0MwMTFfR0VUX1ZFUlNJT04JPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDA0LAorICAgIGVDTURfQzAxMV9HUElPCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MDUsCisgICAgZUNNRF9DMDExX0RFQlVHX1NFVFVQCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgwNiwKKworICAgIC8qIERlY29kaW5nIGNvbW1hbmRzICovCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX09QRU4JCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTAwLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9DTE9TRQkJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMDEsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX0FDVElWQVRFCQkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEwMiwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU1RBVFVTCQkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEwMywKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fRkxVU0gJCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTA0LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9UUklDS19QTEFZCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTA1LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9UU19QSURTCQkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEwNiwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fUFNfU1RSRUFNX0lECQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTA3LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9JTlBVVF9QQVJBTVMJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMDgsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1ZJREVPX09VVFBVVAkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEwOSwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fT1VUUFVUX0ZPUk1BVAkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEwQSwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU0NBTElOR19GSUxURVJTCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTBCLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9PU0RfTU9ERQkJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMEQsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX0RST1AJCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTBFLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9SRUxFQVNFCQkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEwRiwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU1RSRUFNX1NFVFRJTkdTCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTEwLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9QQVVTRV9PVVRQVVQJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMTEsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX0NIQU5HRQkJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMTIsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9TVEMJCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTEzLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfUFRTCQkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDExNCwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fQ0NfTU9ERQkJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMTUsCisgICAgZUNNRF9DMDExX0RFQ19DUkVBVEVfQVVESU9fQ09OVEVYVAkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDExNiwKKyAgICBlQ01EX0MwMTFfREVDX0NPUFlfQVVESU9fQ09OVEVYVAkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDExNywKKyAgICBlQ01EX0MwMTFfREVDX0RFTEVURV9BVURJT19DT05URVhUCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTE4LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfREVDWVBUSU9OCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTE5LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TVEFSVF9WSURFTwkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDExQSwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU1RPUF9WSURFTwkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDExQiwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fUElDX0NBUFRVUkUJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMUMsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1BBVVNFCQkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDExRCwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fUEFVU0VfU1RBVEUJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMUUsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9TTE9XTV9SQVRFCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTFGLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9HRVRfU0xPV01fUkFURQkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEyMCwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU0VUX0ZGX1JBVEUJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMjEsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX0dFVF9GRl9SQVRFCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTIyLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9GUkFNRV9BRFZBTkNFCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTIzLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfU0tJUF9QSUNfTU9ERQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTI0LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9HRVRfU0tJUF9QSUNfTU9ERQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTI1LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9GSUxMX1BJQ19CVUYJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMjYsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9DT05USU5VSVRZX0NIRUNLCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMjcsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX0dFVF9DT05USU5VSVRZX0NIRUNLCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMjgsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9CUkNNX1RSSUNLX01PREUJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEyOSwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fR0VUX0JSQ01fVFJJQ0tfTU9ERQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTJBLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9SRVZFUlNFX0ZJRUxEX1NUQVRVUwk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTJCLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9JX1BJQ1RVUkVfRk9VTkQJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMkMsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9QQVJBTUVURVIJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMkQsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9VU0VSX0RBVEFfTU9ERQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTJFLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfUEFVU0VfRElTUExBWV9NT0RFCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMkYsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9TTE9XX0RJU1BMQVlfTU9ERQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTMwLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfRkZfRElTUExBWV9NT0RFCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMzEsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9ESVNQTEFZX1RJTUlOR19NT0RFCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMzIsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9ESVNQTEFZX01PREUJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMzMsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX0dFVF9ESVNQTEFZX01PREUJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMzQsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9SRVZFUlNFX0ZJRUxECT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMzUsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NUUkVBTV9PUEVOCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTM2LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfUENSX1BJRAkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDEzNywKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU0VUX1ZJRF9QSUQJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMzgsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9QQU5fU0NBTl9NT0RFCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxMzksCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NUQVJUX0RJU1BMQVlfQVRfUFRTCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxNDAsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NUT1BfRElTUExBWV9BVF9QVFMJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDE0MSwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU0VUX0RJU1BMQVlfT1JERVIJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDE0MiwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fR0VUX0RJU1BMQVlfT1JERVIJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDE0MywKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU0VUX0hPU1RfVFJJQ0tfTU9ERQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTQ0LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfT1BFUkFUSU9OX01PREUJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDE0NSwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fRElTUExBWV9QQVVTRV9VTlRPX1BUUwk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTQ2LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfUFRTX1NUQ19ESUZGX1RIUkVTSE9MRCA9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTQ3LAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRU5EX0NPTVBSRVNTRURfQlVGCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxNDgsCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9DTElQUElORwkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDE0OSwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU0VUX1BBUkFNRVRFUlNfRk9SX0hBUkRfUkVTRVRfSU5URVJSVVBUX1RPX0hPU1QKKwkJCQkJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxNTAsCisKKyAgICAvKiBEZWNvZGVyIFJldkQgY29tbWFuZHMgKi8KKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fU0VUX0NTQwk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTgwLCAvKiBjb2xvciBzcGFjZSBjb252ZXJzaW9uICovCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9SQU5HRV9SRU1BUAk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTgxLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfRkdUCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTgyLAorICAgIC8qIE5vdGU6IDB4MTgzIG5vdCBpbXBsZW1lbnRlZCB5ZXQgaW4gUmV2IEQgbWFpbiAqLworICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfTEFTVFBJQ1RVUkVfUEFERElORyA9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTgzLAorCisgICAgLyogRGVjb2RlciA3NDEyIGNvbW1hbmRzICg3NDEyLW9ubHkpICovCisgICAgZUNNRF9DMDExX0RFQ19DSEFOX1NFVF9DT05URU5UX0tFWQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MTkwLAorICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9TRVRfU0VTU0lPTl9LRVkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDE5MSwKKyAgICBlQ01EX0MwMTFfREVDX0NIQU5fRk1UX0NIQU5HRV9BQ0sJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDE5MiwKKworICAgIGVDTURfQzAxMV9ERUNfQ0hBTl9DVVNUT01fVklET1VUICAgID0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgxRkYsCisKKyAgICAvKiBFbmNvZGluZyBjb21tYW5kcyAqLworICAgIGVDTURfQzAxMV9FTkNfQ0hBTl9PUEVOCQk9IGVDTURfQzAxMV9DTURfQkFTRSArIDB4MjAwLAorICAgIGVDTURfQzAxMV9FTkNfQ0hBTl9DTE9TRQkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDIwMSwKKyAgICBlQ01EX0MwMTFfRU5DX0NIQU5fQUNUSVZBVEUJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgyMDIsCisgICAgZUNNRF9DMDExX0VOQ19DSEFOX0NPTlRST0wJCT0gZUNNRF9DMDExX0NNRF9CQVNFICsgMHgyMDMsCisgICAgZUNNRF9DMDExX0VOQ19DSEFOX1NUQVRJU1RJQ1MJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDIwNCwKKworICAgIGVOT1RJRllfQzAxMV9FTkNfQ0hBTl9FVkVOVAkJPSBlQ01EX0MwMTFfQ01EX0JBU0UgKyAweDIxMCwKKworfSBlQzAxMV9UU19DTUQ7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfaHcuYyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2h3LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE4MTlkMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2h3LmMKQEAgLTAsMCArMSwyMzk1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSwgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKgorICogIE5hbWU6IGNyeXN0YWxoZF9odyAuIGMKKyAqCisgKiAgRGVzY3JpcHRpb246CisgKgkJQkNNNzAwMTAgTGludXggZHJpdmVyIEhXIGxheWVyLgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgY3J5c3RhbGhkIGRldmljZSBkcml2ZXIuCisgKgorICogVGhpcyBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBkcml2ZXIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSAiY3J5c3RhbGhkX2h3LmgiCisKKy8qIEZ1bmN0aW9ucyBpbnRlcm5hbCB0byB0aGlzIGZpbGUgKi8KKworc3RhdGljIHZvaWQgY3J5c3RhbGhkX2VuYWJsZV91YXJ0cyhzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwKQoreworCWJjX2RlY19yZWdfd3IoYWRwLCBVYXJ0U2VsZWN0QSwgQlNWU19VQVJUX1NUUkVBTSk7CisJYmNfZGVjX3JlZ193cihhZHAsIFVhcnRTZWxlY3RCLCBCU1ZTX1VBUlRfREVDX09VVEVSKTsKK30KKworCitzdGF0aWMgdm9pZCBjcnlzdGFsaGRfc3RhcnRfZHJhbShzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwKQoreworCWJjX2RlY19yZWdfd3IoYWRwLCBTRFJBTV9QQVJBTSwgKCg0MCAvIDUgLSAxKSA8PCAgMCkgfAorCS8qIHRyYXMgKDQwbnMgdHJhcykvKDVucyBwZXJpb2QpIC0xICgoMTUvNSAtIDEpIDw8ICA0KSB8IC8vIHRyY2QgKi8KKwkJICAgICAgKCgxNSAvIDUgLSAxKSA8PCAgNykgfAkvKiB0cnAgKi8KKwkJICAgICAgKCgxMCAvIDUgLSAxKSA8PCAxMCkgfAkvKiB0cnJkICovCisJCSAgICAgICgoMTUgLyA1ICsgMSkgPDwgMTIpIHwJLyogdHdyICovCisJCSAgICAgICgoMiArIDEpIDw8IDE2KSB8CQkvKiB0d3RyICovCisJCSAgICAgICgoNzAgLyA1IC0gMikgPDwgMTkpIHwJLyogdHJmYyAqLworCQkgICAgICAoMCA8PCAyMykpOworCisJYmNfZGVjX3JlZ193cihhZHAsIFNEUkFNX1BSRUNIQVJHRSwgMCk7CisJYmNfZGVjX3JlZ193cihhZHAsIFNEUkFNX0VYVF9NT0RFLCAyKTsKKwliY19kZWNfcmVnX3dyKGFkcCwgU0RSQU1fTU9ERSwgMHgxMzIpOworCWJjX2RlY19yZWdfd3IoYWRwLCBTRFJBTV9QUkVDSEFSR0UsIDApOworCWJjX2RlY19yZWdfd3IoYWRwLCBTRFJBTV9SRUZSRVNILCAwKTsKKwliY19kZWNfcmVnX3dyKGFkcCwgU0RSQU1fUkVGUkVTSCwgMCk7CisJYmNfZGVjX3JlZ193cihhZHAsIFNEUkFNX01PREUsIDB4MzIpOworCS8qIHNldHRpbmcgdGhlIHJlZnJlc2ggcmF0ZSBoZXJlICovCisJYmNfZGVjX3JlZ193cihhZHAsIFNEUkFNX1JFRl9QQVJBTSwgKCgxIDw8IDEyKSB8IDk2KSk7Cit9CisKKworc3RhdGljIGJvb2wgY3J5c3RhbGhkX2JyaW5nX291dF9vZl9yc3Qoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCkKK3sKKwlsaW5rX21pc2NfcGVyc3RfZGVjb19jdHJsIHJzdF9kZWNvX2NudHJsOworCWxpbmtfbWlzY19wZXJzdF9jbGtfY3RybCByc3RfY2xrX2NudHJsOworCXVpbnQzMl90IHRlbXA7CisKKwkvKgorCSAqIExpbmsgY2xvY2tzOiBNSVNDX1BFUlNUX0NMT0NLX0NUUkwgQ2xlYXIgUExMIHBvd2VyIGRvd24gYml0LAorCSAqIGRlbGF5IHRvIGFsbG93IFBMTCB0byBsb2NrIENsZWFyIGFsdGVybmF0ZSBjbG9jaywgc3RvcCBjbG9jayBiaXRzCisJICovCisJcnN0X2Nsa19jbnRybC53aG9sZV9yZWcgPSBjcnlzdGFsaGRfcmVnX3JkKGFkcCwgTUlTQ19QRVJTVF9DTE9DS19DVFJMKTsKKwlyc3RfY2xrX2NudHJsLnBsbF9wd3JfZG4gPSAwOworCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBNSVNDX1BFUlNUX0NMT0NLX0NUUkwsIHJzdF9jbGtfY250cmwud2hvbGVfcmVnKTsKKwltc2xlZXBfaW50ZXJydXB0aWJsZSg1MCk7CisKKwlyc3RfY2xrX2NudHJsLndob2xlX3JlZyA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBNSVNDX1BFUlNUX0NMT0NLX0NUUkwpOworCXJzdF9jbGtfY250cmwuc3RvcF9jb3JlX2NsayA9IDA7CisJcnN0X2Nsa19jbnRybC5zZWxfYWx0X2NsayA9IDA7CisKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgTUlTQ19QRVJTVF9DTE9DS19DVFJMLCByc3RfY2xrX2NudHJsLndob2xlX3JlZyk7CisJbXNsZWVwX2ludGVycnVwdGlibGUoNTApOworCisJLyoKKwkgKiBCdXMgQXJiaXRlciBUaW1lb3V0OiBHSVNCX0FSQklURVJfVElNRVIKKwkgKiBTZXQgaW50ZXJuYWwgYnVzIGFyYml0ZXIgdGltZW91dCB0byA0MHVzIGJhc2VkIG9uIGNvcmUgY2xvY2sgc3BlZWQKKwkgKiAoNjNNSHogKiA0MHVzID0gMHg5RDgpCisJICovCisJY3J5c3RhbGhkX3JlZ193cihhZHAsIEdJU0JfQVJCSVRFUl9USU1FUiwgMHg5RDgpOworCisJLyoKKwkgKiBEZWNvZGVyIGNsb2NrczogTUlTQ19QRVJTVF9ERUNPREVSX0NUUkwKKwkgKiBFbmFibGUgY2xvY2tzIHdoaWxlIDc0MTIgcmVzZXQgaXMgYXNzZXJ0ZWQsIGRlbGF5CisJICogRGUtYXNzZXJ0IDc0MTIgcmVzZXQKKwkgKi8KKwlyc3RfZGVjb19jbnRybC53aG9sZV9yZWcgPSBjcnlzdGFsaGRfcmVnX3JkKGFkcCwgTUlTQ19QRVJTVF9ERUNPREVSX0NUUkwpOworCXJzdF9kZWNvX2NudHJsLnN0b3BfYmNtXzc0MTJfY2xrID0gMDsKKwlyc3RfZGVjb19jbnRybC5iY203NDEyX3JzdCA9IDE7CisJY3J5c3RhbGhkX3JlZ193cihhZHAsIE1JU0NfUEVSU1RfREVDT0RFUl9DVFJMLCByc3RfZGVjb19jbnRybC53aG9sZV9yZWcpOworCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKKworCXJzdF9kZWNvX2NudHJsLndob2xlX3JlZyA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBNSVNDX1BFUlNUX0RFQ09ERVJfQ1RSTCk7CisJcnN0X2RlY29fY250cmwuYmNtNzQxMl9yc3QgPSAwOworCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBNSVNDX1BFUlNUX0RFQ09ERVJfQ1RSTCwgcnN0X2RlY29fY250cmwud2hvbGVfcmVnKTsKKwltc2xlZXBfaW50ZXJydXB0aWJsZSg1MCk7CisKKwkvKiBEaXNhYmxlIE9UUF9DT05URU5UX01JU0MgdG8gMCB0byBkaXNhYmxlIGFsbCBzZWN1cmUgbW9kZXMgKi8KKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgT1RQX0NPTlRFTlRfTUlTQywgMCk7CisKKwkvKiBDbGVhciBiaXQgMjkgb2YgMHg0MDQgKi8KKwl0ZW1wID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIFBDSUVfVExfVFJBTlNBQ1RJT05fQ09ORklHVVJBVElPTik7CisJdGVtcCAmPSB+QkNfQklUKDI5KTsKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgUENJRV9UTF9UUkFOU0FDVElPTl9DT05GSUdVUkFUSU9OLCB0ZW1wKTsKKworCS8qIDIuNVYgcmVndWxhdG9yIG11c3QgYmUgc2V0IHRvIDIuNiB2b2x0cyAoKzYlKSAqLworCS8qIEZJWE1FOiBqYXJvZDogd2hhdCdzIHRoZSBwb2ludCBvZiB0aGlzIHJlZyByZWFkPyAqLworCXRlbXAgPSBjcnlzdGFsaGRfcmVnX3JkKGFkcCwgTUlTQ19QRVJTVF9WUkVHX0NUUkwpOworCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBNSVNDX1BFUlNUX1ZSRUdfQ1RSTCwgMHhGMyk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgY3J5c3RhbGhkX3B1dF9pbl9yZXNldChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwKQoreworCWxpbmtfbWlzY19wZXJzdF9kZWNvX2N0cmwgcnN0X2RlY29fY250cmw7CisJbGlua19taXNjX3BlcnN0X2Nsa19jdHJsICByc3RfY2xrX2NudHJsOworCXVpbnQzMl90ICAgICAgICAgICAgICAgICAgdGVtcDsKKworCS8qCisJICogRGVjb2RlciBjbG9ja3M6IE1JU0NfUEVSU1RfREVDT0RFUl9DVFJMCisJICogQXNzZXJ0IDc0MTIgcmVzZXQsIGRlbGF5CisJICogQXNzZXJ0IDc0MTIgc3RvcCBjbG9jaworCSAqLworCXJzdF9kZWNvX2NudHJsLndob2xlX3JlZyA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBNSVNDX1BFUlNUX0RFQ09ERVJfQ1RSTCk7CisJcnN0X2RlY29fY250cmwuc3RvcF9iY21fNzQxMl9jbGsgPSAxOworCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBNSVNDX1BFUlNUX0RFQ09ERVJfQ1RSTCwgcnN0X2RlY29fY250cmwud2hvbGVfcmVnKTsKKwltc2xlZXBfaW50ZXJydXB0aWJsZSg1MCk7CisKKwkvKiBCdXMgQXJiaXRlciBUaW1lb3V0OiBHSVNCX0FSQklURVJfVElNRVIKKwkgKiBTZXQgaW50ZXJuYWwgYnVzIGFyYml0ZXIgdGltZW91dCB0byA0MHVzIGJhc2VkIG9uIGNvcmUgY2xvY2sgc3BlZWQKKwkgKiAoNi43NU1IWiAqIDQwdXMgPSAweDEwRSkKKwkgKi8KKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgR0lTQl9BUkJJVEVSX1RJTUVSLCAweDEwRSk7CisKKwkvKiBMaW5rIGNsb2NrczogTUlTQ19QRVJTVF9DTE9DS19DVFJMCisJICogU3RvcCBjb3JlIGNsaywgZGVsYXkKKwkgKiBTZXQgYWx0ZXJuYXRlIGNsaywgZGVsYXksIHNldCBQTEwgcG93ZXIgZG93bgorCSAqLworCXJzdF9jbGtfY250cmwud2hvbGVfcmVnID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIE1JU0NfUEVSU1RfQ0xPQ0tfQ1RSTCk7CisJcnN0X2Nsa19jbnRybC5zdG9wX2NvcmVfY2xrID0gMTsKKwlyc3RfY2xrX2NudHJsLnNlbF9hbHRfY2xrID0gMTsKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgTUlTQ19QRVJTVF9DTE9DS19DVFJMLCByc3RfY2xrX2NudHJsLndob2xlX3JlZyk7CisJbXNsZWVwX2ludGVycnVwdGlibGUoNTApOworCisJcnN0X2Nsa19jbnRybC53aG9sZV9yZWcgPSBjcnlzdGFsaGRfcmVnX3JkKGFkcCwgTUlTQ19QRVJTVF9DTE9DS19DVFJMKTsKKwlyc3RfY2xrX2NudHJsLnBsbF9wd3JfZG4gPSAxOworCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBNSVNDX1BFUlNUX0NMT0NLX0NUUkwsIHJzdF9jbGtfY250cmwud2hvbGVfcmVnKTsKKworCS8qCisJICogUmVhZCBhbmQgcmVzdG9yZSB0aGUgVHJhbnNhY3Rpb24gQ29uZmlndXJhdGlvbiBSZWdpc3RlcgorCSAqIGFmdGVyIGNvcmUgcmVzZXQKKwkgKi8KKwl0ZW1wID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIFBDSUVfVExfVFJBTlNBQ1RJT05fQ09ORklHVVJBVElPTik7CisKKwkvKgorCSAqIExpbmsgY29yZSBzb2Z0IHJlc2V0OiBNSVNDM19SRVNFVF9DVFJMCisJICogLSBXcml0ZSBCSVRbMF09MSBhbmQgcmVhZCBpdCBiYWNrIGZvciBjb3JlIHJlc2V0IHRvIHRha2UgcGxhY2UKKwkgKi8KKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgTUlTQzNfUkVTRVRfQ1RSTCwgMSk7CisJcnN0X2RlY29fY250cmwud2hvbGVfcmVnID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIE1JU0MzX1JFU0VUX0NUUkwpOworCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDUwKTsKKworCS8qIHJlc3RvcmUgdGhlIHRyYW5zYWN0aW9uIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgKi8KKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgUENJRV9UTF9UUkFOU0FDVElPTl9DT05GSUdVUkFUSU9OLCB0ZW1wKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBjcnlzdGFsaGRfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHApCit7CisJaW50cl9tYXNrX3JlZyAgIGludHJfbWFzazsKKwlpbnRyX21hc2sud2hvbGVfcmVnID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIElOVFJfSU5UUl9NU0tfU1RTX1JFRyk7CisJaW50cl9tYXNrLm1hc2tfcGNpZV9lcnIgPSAxOworCWludHJfbWFzay5tYXNrX3BjaWVfcmJ1c21hc3RfZXJyID0gMTsKKwlpbnRyX21hc2subWFza19wY2llX3Jncl9icmlkZ2UgICA9IDE7CisJaW50cl9tYXNrLm1hc2tfcnhfZG9uZSA9IDE7CisJaW50cl9tYXNrLm1hc2tfcnhfZXJyICA9IDE7CisJaW50cl9tYXNrLm1hc2tfdHhfZG9uZSA9IDE7CisJaW50cl9tYXNrLm1hc2tfdHhfZXJyICA9IDE7CisJY3J5c3RhbGhkX3JlZ193cihhZHAsIElOVFJfSU5UUl9NU0tfU0VUX1JFRywgaW50cl9tYXNrLndob2xlX3JlZyk7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGNyeXN0YWxoZF9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwKQoreworCWludHJfbWFza19yZWcgICBpbnRyX21hc2s7CisJaW50cl9tYXNrLndob2xlX3JlZyA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBJTlRSX0lOVFJfTVNLX1NUU19SRUcpOworCWludHJfbWFzay5tYXNrX3BjaWVfZXJyID0gMTsKKwlpbnRyX21hc2subWFza19wY2llX3JidXNtYXN0X2VyciA9IDE7CisJaW50cl9tYXNrLm1hc2tfcGNpZV9yZ3JfYnJpZGdlICAgPSAxOworCWludHJfbWFzay5tYXNrX3J4X2RvbmUgPSAxOworCWludHJfbWFzay5tYXNrX3J4X2VyciAgPSAxOworCWludHJfbWFzay5tYXNrX3R4X2RvbmUgPSAxOworCWludHJfbWFzay5tYXNrX3R4X2VyciAgPSAxOworCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBJTlRSX0lOVFJfTVNLX0NMUl9SRUcsIGludHJfbWFzay53aG9sZV9yZWcpOworCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBjcnlzdGFsaGRfY2xlYXJfZXJyb3JzKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHApCit7CisJdWludDMyX3QgcmVnOworCisJLyogRklYTUU6IGphcm9kOiB3b3VsZG4ndCB3ZSB3YW50IHRvIHdyaXRlIGEgMCB0byB0aGUgcmVnPyBPciBkb2VzIHRoZSB3cml0ZSBjbGVhciB0aGUgYml0cyBzcGVjaWZpZWQ/ICovCisJcmVnID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTKTsKKwlpZiAocmVnKQorCQljcnlzdGFsaGRfcmVnX3dyKGFkcCwgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVMsIHJlZyk7CisKKwlyZWcgPSBjcnlzdGFsaGRfcmVnX3JkKGFkcCwgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTKTsKKwlpZiAocmVnKQorCQljcnlzdGFsaGRfcmVnX3dyKGFkcCwgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTLCByZWcpOworCisJcmVnID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVMpOworCWlmIChyZWcpCisJCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTLCByZWcpOworfQorCitzdGF0aWMgdm9pZCBjcnlzdGFsaGRfY2xlYXJfaW50ZXJydXB0cyhzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwKQoreworCXVpbnQzMl90IGludHJfc3RzID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIElOVFJfSU5UUl9TVEFUVVMpOworCisJaWYgKGludHJfc3RzKSB7CisJCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBJTlRSX0lOVFJfQ0xSX1JFRywgaW50cl9zdHMpOworCisJCS8qIFdyaXRlIEVuZCBPZiBJbnRlcnJ1cHQgZm9yIFBDSUUgKi8KKwkJY3J5c3RhbGhkX3JlZ193cihhZHAsIElOVFJfRU9JX0NUUkwsIDEpOworCX0KK30KKworc3RhdGljIHZvaWQgY3J5c3RhbGhkX3NvZnRfcnN0KHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHApCit7CisJdWludDMyX3QgdmFsOworCisJLyogQXNzZXJ0IGMwMTEgc29mdCByZXNldCovCisJYmNfZGVjX3JlZ193cihhZHAsIERlY0h0X0hvc3RTd1Jlc2V0LCAweDAwMDAwMDAxKTsKKwltc2xlZXBfaW50ZXJydXB0aWJsZSg1MCk7CisKKwkvKiBSZWxlYXNlIGMwMTEgc29mdCByZXNldCovCisJYmNfZGVjX3JlZ193cihhZHAsIERlY0h0X0hvc3RTd1Jlc2V0LCAweDAwMDAwMDAwKTsKKworCS8qIERpc2FibGUgU3R1ZmZpbmcuLiovCisJdmFsID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIE1JU0MyX0dMT0JBTF9DVFJMKTsKKwl2YWwgfD0gQkNfQklUKDgpOworCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBNSVNDMl9HTE9CQUxfQ1RSTCwgdmFsKTsKK30KKworc3RhdGljIGJvb2wgY3J5c3RhbGhkX2xvYWRfZmlybXdhcmVfY29uZmlnKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHApCit7CisJdWludDMyX3QgaSA9IDAsIHJlZzsKKworCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBEQ0lfRFJBTV9CQVNFX0FERFIsIChCQ19EUkFNX0ZXX0NGR19BRERSID4+IDE5KSk7CisKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgQUVTX0NNRCwgMCk7CisJY3J5c3RhbGhkX3JlZ193cihhZHAsIEFFU19DT05GSUdfSU5GTywgKEJDX0RSQU1fRldfQ0ZHX0FERFIgJiAweDdGRkZGKSk7CisJY3J5c3RhbGhkX3JlZ193cihhZHAsIEFFU19DTUQsIDB4MSk7CisKKwkvKiBGSVhNRTogamFyb2Q6IEkndmUgc2VlbiB0aGlzIGZhaWwsIGFuZCBpbnRyb2R1Y2luZyBleHRyYSBkZWxheXMgaGVscHMuLi4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKwkJcmVnID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIEFFU19TVEFUVVMpOworCQlpZiAocmVnICYgMHgxKQorCQkJcmV0dXJuIHRydWU7CisJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKKworc3RhdGljIGJvb2wgY3J5c3RhbGhkX3N0YXJ0X2RldmljZShzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwKQoreworCXVpbnQzMl90IGRiZ19vcHRpb25zLCBnbGJfY250cmwgPSAwLCByZWdfcHdybWdtdCA9IDA7CisKKwlCQ01MT0coQkNNTE9HX0lORk8sICJTdGFydGluZyBCQ003MDAxMiBEZXZpY2VcbiIpOworCisJcmVnX3B3cm1nbXQgPSBjcnlzdGFsaGRfcmVnX3JkKGFkcCwgUENJRV9ETExfREFUQV9MSU5LX0NPTlRST0wpOworCXJlZ19wd3JtZ210ICY9IH5BU1BNX0wxX0VOQUJMRTsKKworCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBQQ0lFX0RMTF9EQVRBX0xJTktfQ09OVFJPTCwgcmVnX3B3cm1nbXQpOworCisJaWYgKCFjcnlzdGFsaGRfYnJpbmdfb3V0X29mX3JzdChhZHApKSB7CisJCUJDTUxPR19FUlIoIkZhaWxlZCBUbyBCcmluZyBMaW5rIE91dCBPZiBSZXNldFxuIik7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwljcnlzdGFsaGRfZGlzYWJsZV9pbnRlcnJ1cHRzKGFkcCk7CisKKwljcnlzdGFsaGRfY2xlYXJfZXJyb3JzKGFkcCk7CisKKwljcnlzdGFsaGRfY2xlYXJfaW50ZXJydXB0cyhhZHApOworCisJY3J5c3RhbGhkX2VuYWJsZV9pbnRlcnJ1cHRzKGFkcCk7CisKKwkvKiBFbmFibGUgdGhlIG9wdGlvbiBmb3IgZ2V0dGluZyB0aGUgdG90YWwgbm8uIG9mIERXT1JEUworCSAqIHRoYXQgaGF2ZSBiZWVuIHRyYW5zZmVyZWQgYnkgdGhlIFJYRE1BIGVuZ2luZQorCSAqLworCWRiZ19vcHRpb25zID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIE1JU0MxX0RNQV9ERUJVR19PUFRJT05TX1JFRyk7CisJZGJnX29wdGlvbnMgfD0gMHgxMDsKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgTUlTQzFfRE1BX0RFQlVHX09QVElPTlNfUkVHLCBkYmdfb3B0aW9ucyk7CisKKwkvKiBFbmFibGUgUENJIEdsb2JhbCBDb250cm9sIG9wdGlvbnMgKi8KKwlnbGJfY250cmwgPSBjcnlzdGFsaGRfcmVnX3JkKGFkcCwgTUlTQzJfR0xPQkFMX0NUUkwpOworCWdsYl9jbnRybCB8PSAweDEwMDsKKwlnbGJfY250cmwgfD0gMHg4MDAwOworCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBNSVNDMl9HTE9CQUxfQ1RSTCwgZ2xiX2NudHJsKTsKKworCWNyeXN0YWxoZF9lbmFibGVfaW50ZXJydXB0cyhhZHApOworCisJY3J5c3RhbGhkX3NvZnRfcnN0KGFkcCk7CisJY3J5c3RhbGhkX3N0YXJ0X2RyYW0oYWRwKTsKKwljcnlzdGFsaGRfZW5hYmxlX3VhcnRzKGFkcCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgY3J5c3RhbGhkX3N0b3BfZGV2aWNlKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHApCit7CisJdWludDMyX3QgcmVnOworCisJQkNNTE9HKEJDTUxPR19JTkZPLCAiU3RvcHBpbmcgQkNNNzAwMTIgRGV2aWNlXG4iKTsKKwkvKiBDbGVhciBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzICovCisJY3J5c3RhbGhkX2Rpc2FibGVfaW50ZXJydXB0cyhhZHApOworCWNyeXN0YWxoZF9jbGVhcl9lcnJvcnMoYWRwKTsKKwljcnlzdGFsaGRfY2xlYXJfaW50ZXJydXB0cyhhZHApOworCisJaWYgKCFjcnlzdGFsaGRfcHV0X2luX3Jlc2V0KGFkcCkpCisJCUJDTUxPR19FUlIoIkZhaWxlZCB0byBQdXQgTGluayBUbyBSZXNldCBTdGF0ZVxuIik7CisKKwlyZWcgPSBjcnlzdGFsaGRfcmVnX3JkKGFkcCwgUENJRV9ETExfREFUQV9MSU5LX0NPTlRST0wpOworCXJlZyB8PSBBU1BNX0wxX0VOQUJMRTsKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgUENJRV9ETExfREFUQV9MSU5LX0NPTlRST0wsIHJlZyk7CisKKwkvKiBTZXQgUENJIENsayBSZXEgKi8KKwlyZWcgPSBjcnlzdGFsaGRfcmVnX3JkKGFkcCwgUENJRV9DTEtfUkVRX1JFRyk7CisJcmVnIHw9IFBDSV9DTEtfUkVRX0VOQUJMRTsKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgUENJRV9DTEtfUkVRX1JFRywgcmVnKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgY3J5c3RhbGhkX3J4X2RtYV9wa3QgKmNyeXN0YWxoZF9od19hbGxvY19yeF9wa3Qoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJY3J5c3RhbGhkX3J4X2RtYV9wa3QgKnRlbXAgPSBOVUxMOworCisJaWYgKCFodykKKwkJcmV0dXJuIE5VTEw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmxvY2ssIGZsYWdzKTsKKwl0ZW1wID0gaHctPnJ4X3BrdF9wb29sX2hlYWQ7CisJaWYgKHRlbXApIHsKKwkJaHctPnJ4X3BrdF9wb29sX2hlYWQgPSBody0+cnhfcGt0X3Bvb2xfaGVhZC0+bmV4dDsKKwkJdGVtcC0+ZGlvX3JlcSA9IE5VTEw7CisJCXRlbXAtPnBrdF90YWcgPSAwOworCQl0ZW1wLT5mbGFncyA9IDA7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gdGVtcDsKK30KKworc3RhdGljIHZvaWQgY3J5c3RhbGhkX2h3X2ZyZWVfcnhfcGt0KHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LAorCQkJCSAgIGNyeXN0YWxoZF9yeF9kbWFfcGt0ICpwa3QpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwlpZiAoIWh3IHx8ICFwa3QpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZody0+bG9jaywgZmxhZ3MpOworCXBrdC0+bmV4dCA9IGh3LT5yeF9wa3RfcG9vbF9oZWFkOworCWh3LT5yeF9wa3RfcG9vbF9oZWFkID0gcGt0OworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5sb2NrLCBmbGFncyk7Cit9CisKKy8qCisgKiBDYWxsIGJhY2sgZnJvbSBUWCAtIElPUSBkZWxldGlvbi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgd2lsbCByZWxlYXNlIHRoZSBUWCBETUEgcmluZ3MgYWxsb2NhdGVkCisgKiBkcnVpbmcgc2V0dXBfZG1hIHJpbmdzIGludGVyZmFjZS4KKyAqCisgKiBNZW1vcnkgaXMgYWxsb2NhdGVkIHBlciBETUEgcmluZyBiYXNpcy4gVGhpcyBpcyBqdXN0CisgKiBhIHBsYWNlIGhvbGRlciB0byBiZSBhYmxlIHRvIGNyZWF0ZSB0aGUgZGlvIHF1ZXVlcy4KKyAqLworc3RhdGljIHZvaWQgY3J5c3RhbGhkX3R4X2Rlc2NfcmVsX2NhbGxfYmFjayh2b2lkICpjb250ZXh0LCB2b2lkICpkYXRhKQoreworfQorCisvKgorICogUnggUGFja2V0IHJlbGVhc2UgY2FsbGJhY2suLgorICoKKyAqIFJlbGVhc2UgQWxsIHVzZXIgbWFwcGVkIGNhcHR1cmUgYnVmZmVycyBhbmQgT3VyIERNQSBwYWNrZXRzCisgKiBiYWNrIHRvIG91ciBmcmVlIHBvb2wuIFRoZSBhY3R1YWwgY2xlYW51cCBvZiB0aGUgRE1BCisgKiByaW5nIGRlc2NyaXB0b3JzIGhhcHBlbiBkdXJpbmcgZG1hIHJpbmcgcmVsZWFzZS4KKyAqLworc3RhdGljIHZvaWQgY3J5c3RhbGhkX3J4X3BrdF9yZWxfY2FsbF9iYWNrKHZvaWQgKmNvbnRleHQsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGNyeXN0YWxoZF9odyAqaHcgPSAoc3RydWN0IGNyeXN0YWxoZF9odyAqKWNvbnRleHQ7CisJY3J5c3RhbGhkX3J4X2RtYV9wa3QgKnBrdCA9IChjcnlzdGFsaGRfcnhfZG1hX3BrdCAqKWRhdGE7CisKKwlpZiAoIXBrdCB8fCAhaHcpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBhcmcgLSAlcCAlcFxuIiwgaHcsIHBrdCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAocGt0LT5kaW9fcmVxKQorCQljcnlzdGFsaGRfdW5tYXBfZGlvKGh3LT5hZHAsIHBrdC0+ZGlvX3JlcSk7CisJZWxzZQorCQlCQ01MT0dfRVJSKCJNaXNzaW5nIGRpb19yZXE6IDB4JXhcbiIsIHBrdC0+cGt0X3RhZyk7CisKKwljcnlzdGFsaGRfaHdfZnJlZV9yeF9wa3QoaHcsIHBrdCk7Cit9CisKKyNkZWZpbmUgY3J5c3RhbGhkX2h3X2RlbGV0ZV9pb3EoYWRwLCBxKQkJXAorCWlmIChxKSB7CQkJCVwKKwkJY3J5c3RhbGhkX2RlbGV0ZV9kaW9xKGFkcCwgcSk7CVwKKwkJcSA9IE5VTEw7CQkJXAorCX0KKworc3RhdGljIHZvaWQgY3J5c3RhbGhkX2h3X2RlbGV0ZV9pb3FzKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3KQoreworCWlmICghaHcpCisJCXJldHVybjsKKworCUJDTUxPRyhCQ01MT0dfREJHLCAiRGVsZXRpbmcgSU9RcyBcbiIpOworCWNyeXN0YWxoZF9od19kZWxldGVfaW9xKGh3LT5hZHAsIGh3LT50eF9hY3RxKTsKKwljcnlzdGFsaGRfaHdfZGVsZXRlX2lvcShody0+YWRwLCBody0+dHhfZnJlZXEpOworCWNyeXN0YWxoZF9od19kZWxldGVfaW9xKGh3LT5hZHAsIGh3LT5yeF9hY3RxKTsKKwljcnlzdGFsaGRfaHdfZGVsZXRlX2lvcShody0+YWRwLCBody0+cnhfZnJlZXEpOworCWNyeXN0YWxoZF9od19kZWxldGVfaW9xKGh3LT5hZHAsIGh3LT5yeF9yZHlxKTsKK30KKworI2RlZmluZSBjcnlzdGFsaGRfaHdfY3JlYXRlX2lvcShzdHMsIGh3LCBxLCBjYikJCQlcCitkbyB7CQkJCQkJCQlcCisJc3RzID0gY3J5c3RhbGhkX2NyZWF0ZV9kaW9xKGh3LT5hZHAsICZxLCBjYiwgaHcpOwlcCisJaWYgKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykJCQkJXAorCQlnb3RvIGh3X2NyZWF0ZV9pb3FfZXJyOwkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogQ3JlYXRlIElPUXMuLgorICoKKyAqIFRYIC0gQWN0aXZlICYgRnJlZQorICogUlggLSBBY3RpdmUsIFJlYWR5IGFuZCBGcmVlLgorICovCitzdGF0aWMgQkNfU1RBVFVTIGNyeXN0YWxoZF9od19jcmVhdGVfaW9xcyhzdHJ1Y3QgY3J5c3RhbGhkX2h3ICAgKmh3KQoreworCUJDX1NUQVRVUyAgIHN0cyA9IEJDX1NUU19TVUNDRVNTOworCisJaWYgKCFodykgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZyEhXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCWNyeXN0YWxoZF9od19jcmVhdGVfaW9xKHN0cywgaHcsIGh3LT50eF9mcmVlcSwKKwkJCSAgICAgIGNyeXN0YWxoZF90eF9kZXNjX3JlbF9jYWxsX2JhY2spOworCWNyeXN0YWxoZF9od19jcmVhdGVfaW9xKHN0cywgaHcsIGh3LT50eF9hY3RxLAorCQkJICAgICAgY3J5c3RhbGhkX3R4X2Rlc2NfcmVsX2NhbGxfYmFjayk7CisKKwljcnlzdGFsaGRfaHdfY3JlYXRlX2lvcShzdHMsIGh3LCBody0+cnhfZnJlZXEsCisJCQkgICAgICBjcnlzdGFsaGRfcnhfcGt0X3JlbF9jYWxsX2JhY2spOworCWNyeXN0YWxoZF9od19jcmVhdGVfaW9xKHN0cywgaHcsIGh3LT5yeF9yZHlxLAorCQkJICAgICAgY3J5c3RhbGhkX3J4X3BrdF9yZWxfY2FsbF9iYWNrKTsKKwljcnlzdGFsaGRfaHdfY3JlYXRlX2lvcShzdHMsIGh3LCBody0+cnhfYWN0cSwKKwkJCSAgICAgIGNyeXN0YWxoZF9yeF9wa3RfcmVsX2NhbGxfYmFjayk7CisKKwlyZXR1cm4gc3RzOworCitod19jcmVhdGVfaW9xX2VycjoKKwljcnlzdGFsaGRfaHdfZGVsZXRlX2lvcXMoaHcpOworCisJcmV0dXJuIHN0czsKK30KKworCitzdGF0aWMgYm9vbCBjcnlzdGFsaGRfY29kZV9pbl9mdWxsKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIHVpbnQzMl90IG5lZWRlZF9zeiwKKwkJCQkgYm9vbCBiXzE4OF9ieXRlX3BrdHMsICB1aW50OF90IGZsYWdzKQoreworCXVpbnQzMl90IGJhc2UsIGVuZCwgd3JpdGVwLCByZWFkcDsKKwl1aW50MzJfdCBjcGJTaXplLCBjcGJGdWxsbmVzcywgZmlmb1NpemU7CisKKwlpZiAoZmxhZ3MgJiAweDAyKSB7IC8qIEFTRiBCaXQgaXMgc2V0ICovCisJCWJhc2UgICA9IGJjX2RlY19yZWdfcmQoYWRwLCBSRUdfRGVjX1RzQXVkQ0RCMkJhc2UpOworCQllbmQgICAgPSBiY19kZWNfcmVnX3JkKGFkcCwgUkVHX0RlY19Uc0F1ZENEQjJFbmQpOworCQl3cml0ZXAgPSBiY19kZWNfcmVnX3JkKGFkcCwgUkVHX0RlY19Uc0F1ZENEQjJXcnB0cik7CisJCXJlYWRwICA9IGJjX2RlY19yZWdfcmQoYWRwLCBSRUdfRGVjX1RzQXVkQ0RCMlJkcHRyKTsKKwl9IGVsc2UgaWYgKGJfMTg4X2J5dGVfcGt0cykgeyAvKkVuY3J5cHRlZCAxODggYnl0ZSBwYWNrZXRzKi8KKwkJYmFzZSAgID0gYmNfZGVjX3JlZ19yZChhZHAsIFJFR19EZWNfVHNVc2VyMEJhc2UpOworCQllbmQgICAgPSBiY19kZWNfcmVnX3JkKGFkcCwgUkVHX0RlY19Uc1VzZXIwRW5kKTsKKwkJd3JpdGVwID0gYmNfZGVjX3JlZ19yZChhZHAsIFJFR19EZWNfVHNVc2VyMFdycHRyKTsKKwkJcmVhZHAgID0gYmNfZGVjX3JlZ19yZChhZHAsIFJFR19EZWNfVHNVc2VyMFJkcHRyKTsKKwl9IGVsc2UgeworCQliYXNlICAgPSBiY19kZWNfcmVnX3JkKGFkcCwgUkVHX0RlY0NBX1JlZ0NpbkJhc2UpOworCQllbmQgICAgPSBiY19kZWNfcmVnX3JkKGFkcCwgUkVHX0RlY0NBX1JlZ0NpbkVuZCk7CisJCXdyaXRlcCA9IGJjX2RlY19yZWdfcmQoYWRwLCBSRUdfRGVjQ0FfUmVnQ2luV3JQdHIpOworCQlyZWFkcCAgPSBiY19kZWNfcmVnX3JkKGFkcCwgUkVHX0RlY0NBX1JlZ0NpblJkUHRyKTsKKwl9CisKKwljcGJTaXplID0gZW5kIC0gYmFzZTsKKwlpZiAod3JpdGVwID49IHJlYWRwKQorCQljcGJGdWxsbmVzcyA9IHdyaXRlcCAtIHJlYWRwOworCWVsc2UKKwkJY3BiRnVsbG5lc3MgPSAoZW5kIC0gYmFzZSkgLSAocmVhZHAgLSB3cml0ZXApOworCisJZmlmb1NpemUgPSBjcGJTaXplIC0gY3BiRnVsbG5lc3M7CisKKwlpZiAoZmlmb1NpemUgPCBCQ19JTkZJRk9fVEhSRVNIT0xEKQorCQlyZXR1cm4gdHJ1ZTsKKworCWlmIChuZWVkZWRfc3ogPiAoZmlmb1NpemUgLSBCQ19JTkZJRk9fVEhSRVNIT0xEKSkKKwkJcmV0dXJuIHRydWU7CisKKwlyZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X3R4X3JlcV9jb21wbGV0ZShzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodywKKwkJCQkJICAgIHVpbnQzMl90IGxpc3RfaWQsIEJDX1NUQVRVUyBjcykKK3sKKwl0eF9kbWFfcGt0ICp0eF9yZXE7CisKKwlpZiAoIWh3IHx8ICFsaXN0X2lkKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJnLi5cbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJaHctPnB3cl9sb2NrLS07CisKKwl0eF9yZXEgPSAodHhfZG1hX3BrdCAqKWNyeXN0YWxoZF9kaW9xX2ZpbmRfYW5kX2ZldGNoKGh3LT50eF9hY3RxLCBsaXN0X2lkKTsKKwlpZiAoIXR4X3JlcSkgeworCQlpZiAoY3MgIT0gQkNfU1RTX0lPX1VTRVJfQUJPUlQpCisJCQlCQ01MT0dfRVJSKCJGaW5kIGFuZCBGZXRjaCBEaWQgbm90IGZpbmQgcmVxXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19OT19EQVRBOworCX0KKworCWlmICh0eF9yZXEtPmNhbGxfYmFjaykgeworCQl0eF9yZXEtPmNhbGxfYmFjayh0eF9yZXEtPmRpb19yZXEsIHR4X3JlcS0+Y2JfZXZlbnQsIGNzKTsKKwkJdHhfcmVxLT5kaW9fcmVxICAgPSBOVUxMOworCQl0eF9yZXEtPmNiX2V2ZW50ICA9IE5VTEw7CisJCXR4X3JlcS0+Y2FsbF9iYWNrID0gTlVMTDsKKwl9IGVsc2UgeworCQlCQ01MT0coQkNNTE9HX0RCRywgIk1pc3NpbmcgVHggQ2FsbGJhY2sgLSAlWFxuIiwKKwkJICAgICAgIHR4X3JlcS0+bGlzdF90YWcpOworCX0KKworCS8qIE5vdyBwdXQgYmFjayB0aGUgdHhfbGlzdCBiYWNrIGluIEZyZWVRICovCisJdHhfcmVxLT5saXN0X3RhZyA9IDA7CisKKwlyZXR1cm4gY3J5c3RhbGhkX2Rpb3FfYWRkKGh3LT50eF9mcmVlcSwgdHhfcmVxLCBmYWxzZSwgMCk7Cit9CisKK3N0YXRpYyBib29sIGNyeXN0YWxoZF90eF9saXN0MF9oYW5kbGVyKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LCB1aW50MzJfdCBlcnJfc3RzKQoreworCXVpbnQzMl90IGVycl9tYXNrLCB0bXA7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwllcnJfbWFzayA9IE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDBfREVTQ19UWF9BQk9SVF9FUlJPUlNfTUFTSyB8CisJCU1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDBfRE1BX0RBVEFfVFhfQUJPUlRfRVJST1JTX01BU0sgfAorCQlNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wwX0ZJRk9fRlVMTF9FUlJPUlNfTUFTSzsKKworCWlmICghKGVycl9zdHMgJiBlcnJfbWFzaykpCisJCXJldHVybiBmYWxzZTsKKworCUJDTUxPR19FUlIoIkVycm9yIG9uIFR4LUwwICV4IFxuIiwgZXJyX3N0cyk7CisKKwl0bXAgPSBlcnJfbWFzazsKKworCWlmIChlcnJfc3RzICYgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMF9GSUZPX0ZVTExfRVJST1JTX01BU0spCisJCXRtcCAmPSB+TUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMF9GSUZPX0ZVTExfRVJST1JTX01BU0s7CisKKwlpZiAodG1wKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZody0+bG9jaywgZmxhZ3MpOworCQkvKiByZXNldCBsaXN0IGluZGV4LiovCisJCWh3LT50eF9saXN0X3Bvc3RfaW5kZXggPSAwOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+bG9jaywgZmxhZ3MpOworCX0KKworCXRtcCA9IGVycl9zdHMgJiBlcnJfbWFzazsKKwljcnlzdGFsaGRfcmVnX3dyKGh3LT5hZHAsIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVMsIHRtcCk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wgY3J5c3RhbGhkX3R4X2xpc3QxX2hhbmRsZXIoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcsIHVpbnQzMl90IGVycl9zdHMpCit7CisJdWludDMyX3QgZXJyX21hc2ssIHRtcDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworCWVycl9tYXNrID0gTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMV9ERVNDX1RYX0FCT1JUX0VSUk9SU19NQVNLIHwKKwkJTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVU19UWF9MMV9ETUFfREFUQV9UWF9BQk9SVF9FUlJPUlNfTUFTSyB8CisJCU1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVNfVFhfTDFfRklGT19GVUxMX0VSUk9SU19NQVNLOworCisJaWYgKCEoZXJyX3N0cyAmIGVycl9tYXNrKSkKKwkJcmV0dXJuIGZhbHNlOworCisJQkNNTE9HX0VSUigiRXJyb3Igb24gVHgtTDEgJXggXG4iLCBlcnJfc3RzKTsKKworCXRtcCA9IGVycl9tYXNrOworCisJaWYgKGVycl9zdHMgJiBNSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wxX0ZJRk9fRlVMTF9FUlJPUlNfTUFTSykKKwkJdG1wICY9IH5NSVNDMV9UWF9ETUFfRVJST1JfU1RBVFVTX1RYX0wxX0ZJRk9fRlVMTF9FUlJPUlNfTUFTSzsKKworCWlmICh0bXApIHsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5sb2NrLCBmbGFncyk7CisJCS8qIHJlc2V0IGxpc3QgaW5kZXguKi8KKwkJaHctPnR4X2xpc3RfcG9zdF9pbmRleCA9IDA7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5sb2NrLCBmbGFncyk7CisJfQorCisJdG1wID0gZXJyX3N0cyAmIGVycl9tYXNrOworCWNyeXN0YWxoZF9yZWdfd3IoaHctPmFkcCwgTUlTQzFfVFhfRE1BX0VSUk9SX1NUQVRVUywgdG1wKTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBjcnlzdGFsaGRfdHhfaXNyKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LCB1aW50MzJfdCBpbnRfc3RzKQoreworCXVpbnQzMl90IGVycl9zdHM7CisKKwlpZiAoaW50X3N0cyAmIElOVFJfSU5UUl9TVEFUVVNfTDBfVFhfRE1BX0RPTkVfSU5UUl9NQVNLKQorCQljcnlzdGFsaGRfaHdfdHhfcmVxX2NvbXBsZXRlKGh3LCBody0+dHhfaW9xX3RhZ19zZWVkICsgMCwKKwkJCQkJICAgQkNfU1RTX1NVQ0NFU1MpOworCisJaWYgKGludF9zdHMgJiBJTlRSX0lOVFJfU1RBVFVTX0wxX1RYX0RNQV9ET05FX0lOVFJfTUFTSykKKwkJY3J5c3RhbGhkX2h3X3R4X3JlcV9jb21wbGV0ZShodywgaHctPnR4X2lvcV90YWdfc2VlZCArIDEsCisJCQkJCSAgIEJDX1NUU19TVUNDRVNTKTsKKworCWlmICghKGludF9zdHMgJiAoSU5UUl9JTlRSX1NUQVRVU19MMF9UWF9ETUFfRVJSX0lOVFJfTUFTSyB8CisJCQkgSU5UUl9JTlRSX1NUQVRVU19MMV9UWF9ETUFfRVJSX0lOVFJfTUFTSykpKSB7CisJCQkgLyogTm8gZXJyb3IgbWFzayBzZXQuLiAqLworCQkJIHJldHVybjsKKwl9CisKKwkvKiBIYW5kbGUgVHggZXJyb3JzLiAqLworCWVycl9zdHMgPSBjcnlzdGFsaGRfcmVnX3JkKGh3LT5hZHAsIE1JU0MxX1RYX0RNQV9FUlJPUl9TVEFUVVMpOworCisJaWYgKGNyeXN0YWxoZF90eF9saXN0MF9oYW5kbGVyKGh3LCBlcnJfc3RzKSkKKwkJY3J5c3RhbGhkX2h3X3R4X3JlcV9jb21wbGV0ZShodywgaHctPnR4X2lvcV90YWdfc2VlZCArIDAsCisJCQkJCSAgIEJDX1NUU19FUlJPUik7CisKKwlpZiAoY3J5c3RhbGhkX3R4X2xpc3QxX2hhbmRsZXIoaHcsIGVycl9zdHMpKQorCQljcnlzdGFsaGRfaHdfdHhfcmVxX2NvbXBsZXRlKGh3LCBody0+dHhfaW9xX3RhZ19zZWVkICsgMSwKKwkJCQkJICAgQkNfU1RTX0VSUk9SKTsKKworCWh3LT5zdGF0cy50eF9lcnJvcnMrKzsKK30KKworc3RhdGljIHZvaWQgY3J5c3RhbGhkX2h3X2R1bXBfZGVzYyhwZG1hX2Rlc2NyaXB0b3IgcF9kbWFfZGVzYywKKwkJCQkgdWludDMyX3QgdWxfZGVzY19pbmRleCwgdWludDMyX3QgY250KQoreworCXVpbnQzMl90IGl4LCBsbCA9IDA7CisKKwlpZiAoIXBfZG1hX2Rlc2MgfHwgIWNudCkKKwkJcmV0dXJuOworCisJLyogRklYTUU6IGphcm9kOiBwZXJoYXBzIGEgbW9kcGFyYW0gZGVzY19kZWJ1ZyB0byBlbmFibGUgdGhpcywgcmF0aGVyIHRoYW4KKwkgKiBzZXR0aW5nIGxsIChsb2cgbGV2ZWwsIEkgcHJlc3VtZSkgdG8gbm9uLXplcm8/ICovCisJaWYgKCFsbCkKKwkJcmV0dXJuOworCisJZm9yIChpeCA9IHVsX2Rlc2NfaW5kZXg7IGl4IDwgKHVsX2Rlc2NfaW5kZXggKyBjbnQpOyBpeCsrKSB7CisJCUJDTUxPRyhsbCwgIiVzWyVkXSBCdWZmWyV4OiV4XSBOZXh0OlsleDoleF0gWGZlclN6OiV4IEludHI6JXgsTGFzdDoleFxuIiwKKwkJICAgICAgICgocF9kbWFfZGVzY1t1bF9kZXNjX2luZGV4XS5kbWFfZGlyKSA/ICJURGVzYyIgOiAiUkRlc2MiKSwKKwkJICAgICAgIHVsX2Rlc2NfaW5kZXgsCisJCSAgICAgICBwX2RtYV9kZXNjW3VsX2Rlc2NfaW5kZXhdLmJ1ZmZfYWRkcl9oaWdoLAorCQkgICAgICAgcF9kbWFfZGVzY1t1bF9kZXNjX2luZGV4XS5idWZmX2FkZHJfbG93LAorCQkgICAgICAgcF9kbWFfZGVzY1t1bF9kZXNjX2luZGV4XS5uZXh0X2Rlc2NfYWRkcl9oaWdoLAorCQkgICAgICAgcF9kbWFfZGVzY1t1bF9kZXNjX2luZGV4XS5uZXh0X2Rlc2NfYWRkcl9sb3csCisJCSAgICAgICBwX2RtYV9kZXNjW3VsX2Rlc2NfaW5kZXhdLnhmZXJfc2l6ZSwKKwkJICAgICAgIHBfZG1hX2Rlc2NbdWxfZGVzY19pbmRleF0uaW50cl9lbmFibGUsCisJCSAgICAgICBwX2RtYV9kZXNjW3VsX2Rlc2NfaW5kZXhdLmxhc3RfcmVjX2luZGljYXRvcik7CisJfQorCit9CisKK3N0YXRpYyBCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X2ZpbGxfZGVzYyhjcnlzdGFsaGRfZGlvX3JlcSAqaW9yZXEsCisJCQkJICAgICAgZG1hX2Rlc2NyaXB0b3IgKmRlc2MsCisJCQkJICAgICAgZG1hX2FkZHJfdCBkZXNjX3BhZGRyX2Jhc2UsCisJCQkJICAgICAgdWludDMyX3Qgc2dfY250LCB1aW50MzJfdCBzZ19zdF9peCwKKwkJCQkgICAgICB1aW50MzJfdCBzZ19zdF9vZmYsIHVpbnQzMl90IHhmcl9zeikKK3sKKwl1aW50MzJfdCBjb3VudCA9IDAsIGl4ID0gMCwgc2dfaXggPSAwLCBsZW4gPSAwLCBsYXN0X2Rlc2NfaXggPSAwOworCWRtYV9hZGRyX3QgZGVzY19waHlfYWRkciA9IGRlc2NfcGFkZHJfYmFzZTsKKwlhZGRyXzY0IGFkZHJfdGVtcDsKKworCWlmICghaW9yZXEgfHwgIWRlc2MgfHwgIWRlc2NfcGFkZHJfYmFzZSB8fCAheGZyX3N6IHx8CisJICAgICghc2dfY250ICYmICFpb3JlcS0+dWluZm8uZGlyX3R4KSkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZ3NcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJZm9yIChpeCA9IDA7IGl4IDwgc2dfY250OyBpeCsrKSB7CisKKwkJLyogU2V0dXAgU0dMRSBpbmRleC4gKi8KKwkJc2dfaXggPSBpeCArIHNnX3N0X2l4OworCisJCS8qIEdldCBTR0xFIGxlbmd0aCAqLworCQlsZW4gPSBjcnlzdGFsaGRfZ2V0X3NnbGVfbGVuKGlvcmVxLCBzZ19peCk7CisJCWlmIChsZW4gJSA0KSB7CisJCQlCQ01MT0dfRVJSKCIgbGVuIGluIHNnICVkICVkICVkXG4iLCBsZW4sIHNnX2l4LCBzZ19jbnQpOworCQkJcmV0dXJuIEJDX1NUU19OT1RfSU1QTDsKKwkJfQorCQkvKiBTZXR1cCBETUEgZGVzYyB3aXRoIFBoeSBhZGRyICYgTGVuZ3RoIGF0IGN1cnJlbnQgaW5kZXguICovCisJCWFkZHJfdGVtcC5mdWxsX2FkZHIgPSBjcnlzdGFsaGRfZ2V0X3NnbGVfcGFkZHIoaW9yZXEsIHNnX2l4KTsKKwkJaWYgKHNnX2l4ID09IHNnX3N0X2l4KSB7CisJCQlhZGRyX3RlbXAuZnVsbF9hZGRyICs9IHNnX3N0X29mZjsKKwkJCWxlbiAtPSBzZ19zdF9vZmY7CisJCX0KKwkJbWVtc2V0KCZkZXNjW2l4XSwgMCwgc2l6ZW9mKGRlc2NbaXhdKSk7CisJCWRlc2NbaXhdLmJ1ZmZfYWRkcl9sb3cgID0gYWRkcl90ZW1wLmxvd19wYXJ0OworCQlkZXNjW2l4XS5idWZmX2FkZHJfaGlnaCA9IGFkZHJfdGVtcC5oaWdoX3BhcnQ7CisJCWRlc2NbaXhdLmRtYV9kaXIgICAgICAgID0gaW9yZXEtPnVpbmZvLmRpcl90eDsKKworCQkvKiBDaGFpbiBETUEgZGVzY3JpcHRvci4gICovCisJCWFkZHJfdGVtcC5mdWxsX2FkZHIgPSBkZXNjX3BoeV9hZGRyICsgc2l6ZW9mKGRtYV9kZXNjcmlwdG9yKTsKKwkJZGVzY1tpeF0ubmV4dF9kZXNjX2FkZHJfbG93ID0gYWRkcl90ZW1wLmxvd19wYXJ0OworCQlkZXNjW2l4XS5uZXh0X2Rlc2NfYWRkcl9oaWdoID0gYWRkcl90ZW1wLmhpZ2hfcGFydDsKKworCQlpZiAoKGNvdW50ICsgbGVuKSA+IHhmcl9zeikKKwkJCWxlbiA9IHhmcl9zeiAtIGNvdW50OworCisJCS8qIERlYnVnLi4gKi8KKwkJaWYgKCghbGVuKSB8fCAobGVuID4gY3J5c3RhbGhkX2dldF9zZ2xlX2xlbihpb3JlcSwgc2dfaXgpKSkgeworCQkJQkNNTE9HX0VSUigiaW52LWxlbigleCkgSXgoJWQpIGNvdW50OiV4IHhmcl9zejoleCBzZ19jbnQ6JWRcbiIsCisJCQkJICAgbGVuLCBpeCwgY291bnQsIHhmcl9zeiwgc2dfY250KTsKKwkJCXJldHVybiBCQ19TVFNfRVJST1I7CisJCX0KKwkJLyogTGVuZ3RoIGV4cGVjdHMgTXVsdGlwbGUgb2YgNCAqLworCQlkZXNjW2l4XS54ZmVyX3NpemUgPSAobGVuIC8gNCk7CisKKwkJY3J5c3RhbGhkX2h3X2R1bXBfZGVzYyhkZXNjLCBpeCwgMSk7CisKKwkJY291bnQgKz0gbGVuOworCQlkZXNjX3BoeV9hZGRyICs9IHNpemVvZihkbWFfZGVzY3JpcHRvcik7CisJfQorCisJbGFzdF9kZXNjX2l4ID0gaXggLSAxOworCisJaWYgKGlvcmVxLT5mYl9zaXplKSB7CisJCW1lbXNldCgmZGVzY1tpeF0sIDAsIHNpemVvZihkZXNjW2l4XSkpOworCQlhZGRyX3RlbXAuZnVsbF9hZGRyICAgICA9IGlvcmVxLT5mYl9wYTsKKwkJZGVzY1tpeF0uYnVmZl9hZGRyX2xvdyAgPSBhZGRyX3RlbXAubG93X3BhcnQ7CisJCWRlc2NbaXhdLmJ1ZmZfYWRkcl9oaWdoID0gYWRkcl90ZW1wLmhpZ2hfcGFydDsKKwkJZGVzY1tpeF0uZG1hX2RpciAgICAgICAgPSBpb3JlcS0+dWluZm8uZGlyX3R4OworCQlkZXNjW2l4XS54ZmVyX3NpemUJPSAxOworCQlkZXNjW2l4XS5maWxsX2J5dGVzCT0gNCAtIGlvcmVxLT5mYl9zaXplOworCQljb3VudCArPSBpb3JlcS0+ZmJfc2l6ZTsKKwkJbGFzdF9kZXNjX2l4Kys7CisJfQorCisJLyogc2V0dXAgbGFzdCBkZXNjcmlwdG9yLi4qLworCWRlc2NbbGFzdF9kZXNjX2l4XS5sYXN0X3JlY19pbmRpY2F0b3IgID0gMTsKKwlkZXNjW2xhc3RfZGVzY19peF0ubmV4dF9kZXNjX2FkZHJfbG93ICA9IDA7CisJZGVzY1tsYXN0X2Rlc2NfaXhdLm5leHRfZGVzY19hZGRyX2hpZ2ggPSAwOworCWRlc2NbbGFzdF9kZXNjX2l4XS5pbnRyX2VuYWJsZSA9IDE7CisKKwljcnlzdGFsaGRfaHdfZHVtcF9kZXNjKGRlc2MsIGxhc3RfZGVzY19peCwgMSk7CisKKwlpZiAoY291bnQgIT0geGZyX3N6KSB7CisJCUJDTUxPR19FUlIoImludGVyYWwgZXJyb3Igc3ogY3VycjoleCBleHA6JXhcbiIsIGNvdW50LCB4ZnJfc3opOworCQlyZXR1cm4gQkNfU1RTX0VSUk9SOworCX0KKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworc3RhdGljIEJDX1NUQVRVUyBjcnlzdGFsaGRfeGxhdF9zZ2xfdG9fZG1hX2Rlc2MoY3J5c3RhbGhkX2Rpb19yZXEgKmlvcmVxLAorCQkJCQkgICAgICBwZG1hX2Rlc2NfbWVtIHBkZXNjX21lbSwKKwkJCQkJICAgICAgdWludDMyX3QgKnV2X2Rlc2NfaW5kZXgpCit7CisJZG1hX2Rlc2NyaXB0b3IgKmRlc2MgPSBOVUxMOworCWRtYV9hZGRyX3QgZGVzY19wYWRkcl9iYXNlID0gMDsKKwl1aW50MzJfdCBzZ19jbnQgPSAwLCBzZ19zdF9peCA9IDAsIHNnX3N0X29mZiA9IDA7CisJdWludDMyX3QgeGZyX3N6ID0gMDsKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisKKwkvKiBDaGVjayBwYXJhbXMuLiAqLworCWlmICghaW9yZXEgfHwgIXBkZXNjX21lbSB8fCAhdXZfZGVzY19pbmRleCkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZ3NcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJaWYgKCFwZGVzY19tZW0tPnN6IHx8ICFwZGVzY19tZW0tPnBkbWFfZGVzY19zdGFydCB8fAorCSAgICAhaW9yZXEtPnNnIHx8ICghaW9yZXEtPnNnX2NudCAmJiAhaW9yZXEtPnVpbmZvLmRpcl90eCkpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmdzXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCWlmICgoaW9yZXEtPnVpbmZvLmRpcl90eCkgJiYgKGlvcmVxLT51aW5mby51dl9vZmZzZXQpKSB7CisJCUJDTUxPR19FUlIoIlVWIG9mZnNldCBmb3IgVFg/P1xuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKworCX0KKworCWRlc2MgPSBwZGVzY19tZW0tPnBkbWFfZGVzY19zdGFydDsKKwlkZXNjX3BhZGRyX2Jhc2UgPSBwZGVzY19tZW0tPnBoeV9hZGRyOworCisJaWYgKGlvcmVxLT51aW5mby5kaXJfdHggfHwgKGlvcmVxLT51aW5mby51dl9vZmZzZXQgPT0gMCkpIHsKKwkJc2dfY250ID0gaW9yZXEtPnNnX2NudDsKKwkJeGZyX3N6ID0gaW9yZXEtPnVpbmZvLnhmcl9sZW47CisJfSBlbHNlIHsKKwkJc2dfY250ID0gaW9yZXEtPnVpbmZvLnV2X3NnX2l4ICsgMTsKKwkJeGZyX3N6ID0gaW9yZXEtPnVpbmZvLnV2X29mZnNldDsKKwl9CisKKwlzdHMgPSBjcnlzdGFsaGRfaHdfZmlsbF9kZXNjKGlvcmVxLCBkZXNjLCBkZXNjX3BhZGRyX2Jhc2UsIHNnX2NudCwKKwkJCQkgICBzZ19zdF9peCwgc2dfc3Rfb2ZmLCB4ZnJfc3opOworCisJaWYgKChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpIHx8ICFpb3JlcS0+dWluZm8udXZfb2Zmc2V0KQorCQlyZXR1cm4gc3RzOworCisJLyogUHJlcGFyZSBmb3IgVVYgbWFwcGluZy4uICovCisJZGVzYyA9ICZwZGVzY19tZW0tPnBkbWFfZGVzY19zdGFydFtzZ19jbnRdOworCWRlc2NfcGFkZHJfYmFzZSA9IHBkZXNjX21lbS0+cGh5X2FkZHIgKworCQkJICAoc2dfY250ICogc2l6ZW9mKGRtYV9kZXNjcmlwdG9yKSk7CisKKwkvKiBEb25lIHdpdGggZGVzYyBhZGRyLi4gbm93IHVwZGF0ZSBzZyBzdHVmZi4qLworCXNnX2NudCAgICA9IGlvcmVxLT5zZ19jbnQgLSBpb3JlcS0+dWluZm8udXZfc2dfaXg7CisJeGZyX3N6ICAgID0gaW9yZXEtPnVpbmZvLnhmcl9sZW4gLSBpb3JlcS0+dWluZm8udXZfb2Zmc2V0OworCXNnX3N0X2l4ICA9IGlvcmVxLT51aW5mby51dl9zZ19peDsKKwlzZ19zdF9vZmYgPSBpb3JlcS0+dWluZm8udXZfc2dfb2ZmOworCisJc3RzID0gY3J5c3RhbGhkX2h3X2ZpbGxfZGVzYyhpb3JlcSwgZGVzYywgZGVzY19wYWRkcl9iYXNlLCBzZ19jbnQsCisJCQkJICAgc2dfc3RfaXgsIHNnX3N0X29mZiwgeGZyX3N6KTsKKwlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKQorCQlyZXR1cm4gc3RzOworCisJKnV2X2Rlc2NfaW5kZXggPSBzZ19zdF9peDsKKworCXJldHVybiBzdHM7Cit9CisKK3N0YXRpYyB2b2lkIGNyeXN0YWxoZF9zdGFydF90eF9kbWFfZW5naW5lKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3KQoreworCXVpbnQzMl90IGRtYV9jbnRybDsKKworCWRtYV9jbnRybCA9IGNyeXN0YWxoZF9yZWdfcmQoaHctPmFkcCwgTUlTQzFfVFhfU1dfREVTQ19MSVNUX0NUUkxfU1RTKTsKKwlpZiAoIShkbWFfY250cmwgJiBETUFfU1RBUlRfQklUKSkgeworCQlkbWFfY250cmwgfD0gRE1BX1NUQVJUX0JJVDsKKwkJY3J5c3RhbGhkX3JlZ193cihody0+YWRwLCBNSVNDMV9UWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFMsCisJCQkgICAgICAgZG1hX2NudHJsKTsKKwl9CisKKwlyZXR1cm47Cit9CisKKy8qIF9DSEVDS19USElTXworICoKKyAqIFZlcmlmeSBpZiB0aGUgU3RvcCBnZW5lcmF0ZXMgYSBjb21wbGV0aW9uIGludGVycnVwdCBvciBub3QuCisgKiBpZiBpdCBkb2VzIG5vdCBnZW5lcmF0ZSBhbiBpbnRlcnJ1cHQsIHRoZW4gYWRkIHBvbGxpbmcgaGVyZS4KKyAqLworc3RhdGljIEJDX1NUQVRVUyBjcnlzdGFsaGRfc3RvcF90eF9kbWFfZW5naW5lKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3KQoreworCXVpbnQzMl90IGRtYV9jbnRybCwgY250ID0gMzA7CisJdWludDMyX3QgbDEgPSAxLCBsMiA9IDE7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwlkbWFfY250cmwgPSBjcnlzdGFsaGRfcmVnX3JkKGh3LT5hZHAsIE1JU0MxX1RYX1NXX0RFU0NfTElTVF9DVFJMX1NUUyk7CisKKwlCQ01MT0coQkNNTE9HX0RCRywgIlN0b3BwaW5nIFRYIERNQSBFbmdpbmUuLlxuIik7CisKKwkvKiBGSVhNRTogamFyb2Q6IGludmVydCBkbWFfY3RybCBhbmQgY2hlY2sgYml0PyBvciBhcmUgdGhlcmUgbWlzc2luZyBwYXJlbnM/ICovCisJaWYgKCFkbWFfY250cmwgJiBETUFfU1RBUlRfQklUKSB7CisJCUJDTUxPRyhCQ01MT0dfREJHLCAiQWxyZWFkeSBTdG9wcGVkXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworCX0KKworCWNyeXN0YWxoZF9kaXNhYmxlX2ludGVycnVwdHMoaHctPmFkcCk7CisKKwkvKiBJc3N1ZSBzdG9wIHRvIEhXICovCisJLyogVGhpcyBiaXQgd2hlbiBzZXQgZ2F2ZSBwcm9ibGVtcy4gUGxlYXNlIGNoZWNrKi8KKwlkbWFfY250cmwgJj0gfkRNQV9TVEFSVF9CSVQ7CisJY3J5c3RhbGhkX3JlZ193cihody0+YWRwLCBNSVNDMV9UWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFMsIGRtYV9jbnRybCk7CisKKwlCQ01MT0coQkNNTE9HX0RCRywgIkNsZWFyZWQgdGhlIERNQSBTdGFydCBiaXRcbiIpOworCisJLyogUG9sbCBmb3IgM3NlY29uZHMgKDMwICogMTAwbXMpIG9uIGJvdGggdGhlIGxpc3RzLi4qLworCXdoaWxlICgobDEgfHwgbDIpICYmIGNudCkgeworCisJCWlmIChsMSkgeworCQkJbDEgPSBjcnlzdGFsaGRfcmVnX3JkKGh3LT5hZHAsIE1JU0MxX1RYX0ZJUlNUX0RFU0NfTF9BRERSX0xJU1QwKTsKKwkJCWwxICY9IERNQV9TVEFSVF9CSVQ7CisJCX0KKworCQlpZiAobDIpIHsKKwkJCWwyID0gY3J5c3RhbGhkX3JlZ19yZChody0+YWRwLCBNSVNDMV9UWF9GSVJTVF9ERVNDX0xfQUREUl9MSVNUMSk7CisJCQlsMiAmPSBETUFfU1RBUlRfQklUOworCQl9CisKKwkJbXNsZWVwX2ludGVycnVwdGlibGUoMTAwKTsKKworCQljbnQtLTsKKwl9CisKKwlpZiAoIWNudCkgeworCQlCQ01MT0dfRVJSKCJGYWlsZWQgdG8gc3RvcCBUWCBETUEuLiBsMSAlZCwgbDIgJWRcbiIsIGwxLCBsMik7CisJCWNyeXN0YWxoZF9lbmFibGVfaW50ZXJydXB0cyhody0+YWRwKTsKKwkJcmV0dXJuIEJDX1NUU19FUlJPUjsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPmxvY2ssIGZsYWdzKTsKKwlody0+dHhfbGlzdF9wb3N0X2luZGV4ID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+bG9jaywgZmxhZ3MpOworCUJDTUxPRyhCQ01MT0dfREJHLCAic3RvcHBlZCBUWCBETUEuLlxuIik7CisJY3J5c3RhbGhkX2VuYWJsZV9pbnRlcnJ1cHRzKGh3LT5hZHApOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCitzdGF0aWMgdWludDMyX3QgY3J5c3RhbGhkX2dldF9waWJfYXZhaWxfY250KHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3KQoreworCS8qCisJKiBQb3NpdGlvbiBvZiB0aGUgUElCIEVudHJpZXMgY2FuIGJlIGZvdW5kIGF0CisJKiAwdGggYW5kIHRoZSAxc3QgbG9jYXRpb24gb2YgdGhlIENpcmN1bGFyIGxpc3QuCisJKi8KKwl1aW50MzJfdCBRX2FkZHI7CisJdWludDMyX3QgcGliX2NudCwgcl9vZmZzZXQsIHdfb2Zmc2V0OworCisJUV9hZGRyID0gaHctPnBpYl9kZWxfUV9hZGRyOworCisJLyogR2V0IHRoZSBSZWFkIFBvaW50ZXIgKi8KKwljcnlzdGFsaGRfbWVtX3JkKGh3LT5hZHAsIFFfYWRkciwgMSwgJnJfb2Zmc2V0KTsKKworCS8qIEdldCB0aGUgV3JpdGUgUG9pbnRlciAqLworCWNyeXN0YWxoZF9tZW1fcmQoaHctPmFkcCwgUV9hZGRyICsgc2l6ZW9mKHVpbnQzMl90KSwgMSwgJndfb2Zmc2V0KTsKKworCWlmIChyX29mZnNldCA9PSB3X29mZnNldCkKKwkJcmV0dXJuIDA7CS8qIFF1ZXVlIGlzIGVtcHR5ICovCisKKwlpZiAod19vZmZzZXQgPiByX29mZnNldCkKKwkJcGliX2NudCA9IHdfb2Zmc2V0IC0gcl9vZmZzZXQ7CisJZWxzZQorCQlwaWJfY250ID0gKHdfb2Zmc2V0ICsgTUFYX1BJQl9RX0RFUFRIKSAtCisJCQkgIChyX29mZnNldCArIE1JTl9QSUJfUV9ERVBUSCk7CisKKwlpZiAocGliX2NudCA+IE1BWF9QSUJfUV9ERVBUSCkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIFBJQiBDb3VudCAoJXUpXG4iLCBwaWJfY250KTsKKwkJcmV0dXJuIDA7CisJfQorCisJcmV0dXJuIHBpYl9jbnQ7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBjcnlzdGFsaGRfZ2V0X2FkZHJfZnJvbV9waWJfUShzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodykKK3sKKwl1aW50MzJfdCBRX2FkZHI7CisJdWludDMyX3QgYWRkcl9lbnRyeSwgcl9vZmZzZXQsIHdfb2Zmc2V0OworCisJUV9hZGRyID0gaHctPnBpYl9kZWxfUV9hZGRyOworCisJLyogR2V0IHRoZSBSZWFkIFBvaW50ZXIgMFRoIExvY2F0aW9uIGlzIFJlYWQgUG9pbnRlciAqLworCWNyeXN0YWxoZF9tZW1fcmQoaHctPmFkcCwgUV9hZGRyLCAxLCAmcl9vZmZzZXQpOworCisJLyogR2V0IHRoZSBXcml0ZSBQb2ludGVyIDFzdCBMb2NhdGlvbiBpcyBXcml0ZSBwb2ludGVyICovCisJY3J5c3RhbGhkX21lbV9yZChody0+YWRwLCBRX2FkZHIgKyBzaXplb2YodWludDMyX3QpLCAxLCAmd19vZmZzZXQpOworCisJLyogUXVldWUgaXMgZW1wdHkgKi8KKwlpZiAocl9vZmZzZXQgPT0gd19vZmZzZXQpCisJCXJldHVybiAwOworCisJaWYgKChyX29mZnNldCA8IE1JTl9QSUJfUV9ERVBUSCkgfHwgKHJfb2Zmc2V0ID49IE1BWF9QSUJfUV9ERVBUSCkpCisJCXJldHVybiAwOworCisJLyogR2V0IHRoZSBBY3R1YWwgQWRkcmVzcyBvZiB0aGUgUElCICovCisJY3J5c3RhbGhkX21lbV9yZChody0+YWRwLCBRX2FkZHIgKyAocl9vZmZzZXQgKiBzaXplb2YodWludDMyX3QpKSwKKwkJICAgICAgIDEsICZhZGRyX2VudHJ5KTsKKworCS8qIEluY3JlbWVudCB0aGUgUmVhZCBQb2ludGVyICovCisJcl9vZmZzZXQrKzsKKworCWlmIChNQVhfUElCX1FfREVQVEggPT0gcl9vZmZzZXQpCisJCXJfb2Zmc2V0ID0gTUlOX1BJQl9RX0RFUFRIOworCisJLyogV3JpdGUgYmFjayB0aGUgcmVhZCBwb2ludGVyIHRvIEl0J3MgTG9jYXRpb24gKi8KKwljcnlzdGFsaGRfbWVtX3dyKGh3LT5hZHAsIFFfYWRkciwgMSwgJnJfb2Zmc2V0KTsKKworCXJldHVybiBhZGRyX2VudHJ5OworfQorCitzdGF0aWMgYm9vbCBjcnlzdGFsaGRfcmVsX2FkZHJfdG9fcGliX1Eoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcsIHVpbnQzMl90IGFkZHJfdG9fcmVsKQoreworCXVpbnQzMl90IFFfYWRkcjsKKwl1aW50MzJfdCByX29mZnNldCwgd19vZmZzZXQsIG5fb2Zmc2V0OworCisJUV9hZGRyID0gaHctPnBpYl9yZWxfUV9hZGRyOworCisJLyogR2V0IHRoZSBSZWFkIFBvaW50ZXIgKi8KKwljcnlzdGFsaGRfbWVtX3JkKGh3LT5hZHAsIFFfYWRkciwgMSwgJnJfb2Zmc2V0KTsKKworCS8qIEdldCB0aGUgV3JpdGUgUG9pbnRlciAqLworCWNyeXN0YWxoZF9tZW1fcmQoaHctPmFkcCwgUV9hZGRyICsgc2l6ZW9mKHVpbnQzMl90KSwgMSwgJndfb2Zmc2V0KTsKKworCWlmICgocl9vZmZzZXQgPCBNSU5fUElCX1FfREVQVEgpIHx8CisJICAgIChyX29mZnNldCA+PSBNQVhfUElCX1FfREVQVEgpKQorCQlyZXR1cm4gZmFsc2U7CisKKwluX29mZnNldCA9IHdfb2Zmc2V0ICsgMTsKKworCWlmIChNQVhfUElCX1FfREVQVEggPT0gbl9vZmZzZXQpCisJCW5fb2Zmc2V0ID0gTUlOX1BJQl9RX0RFUFRIOworCisJaWYgKHJfb2Zmc2V0ID09IG5fb2Zmc2V0KQorCQlyZXR1cm4gZmFsc2U7IC8qIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKworCS8qIFdyaXRlIHRoZSBEUkFNIEFERFIgdG8gdGhlIFF1ZXVlIGF0IE5leHQgT2Zmc2V0ICovCisJY3J5c3RhbGhkX21lbV93cihody0+YWRwLCBRX2FkZHIgKyAod19vZmZzZXQgKiBzaXplb2YodWludDMyX3QpKSwKKwkJICAgICAgIDEsICZhZGRyX3RvX3JlbCk7CisKKwkvKiBQdXQgdGhlIE5ldyB2YWx1ZSBvZiB0aGUgd3JpdGUgcG9pbnRlciBpbiBRdWV1ZSAqLworCWNyeXN0YWxoZF9tZW1fd3IoaHctPmFkcCwgUV9hZGRyICsgc2l6ZW9mKHVpbnQzMl90KSwgMSwgJm5fb2Zmc2V0KTsKKworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBjcHlfcGliX3RvX2FwcChDMDExX1BJQiAqc3JjX3BpYiwgQkNfUElDX0lORk9fQkxPQ0sgKmRzdF9waWIpCit7CisJaWYgKCFzcmNfcGliIHx8ICFkc3RfcGliKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWRzdF9waWItPnRpbWVTdGFtcCAgICAgICAgICAgPSAwOworCWRzdF9waWItPnBpY3R1cmVfbnVtYmVyICAgICAgPSBzcmNfcGliLT5wcGIucGljdHVyZV9udW1iZXI7CisJZHN0X3BpYi0+d2lkdGggICAgICAgICAgICAgICA9IHNyY19waWItPnBwYi53aWR0aDsKKwlkc3RfcGliLT5oZWlnaHQgICAgICAgICAgICAgID0gc3JjX3BpYi0+cHBiLmhlaWdodDsKKwlkc3RfcGliLT5jaHJvbWFfZm9ybWF0ICAgICAgID0gc3JjX3BpYi0+cHBiLmNocm9tYV9mb3JtYXQ7CisJZHN0X3BpYi0+cHVsbGRvd24gICAgICAgICAgICA9IHNyY19waWItPnBwYi5wdWxsZG93bjsKKwlkc3RfcGliLT5mbGFncyAgICAgICAgICAgICAgID0gc3JjX3BpYi0+cHBiLmZsYWdzOworCWRzdF9waWItPnNlc3NfbnVtICAgICAgICAgICAgPSBzcmNfcGliLT5wdHNTdGNPZmZzZXQ7CisJZHN0X3BpYi0+YXNwZWN0X3JhdGlvICAgICAgICA9IHNyY19waWItPnBwYi5hc3BlY3RfcmF0aW87CisJZHN0X3BpYi0+Y29sb3VyX3ByaW1hcmllcyAgICAgPSBzcmNfcGliLT5wcGIuY29sb3VyX3ByaW1hcmllczsKKwlkc3RfcGliLT5waWN0dXJlX21ldGFfcGF5bG9hZCA9IHNyY19waWItPnBwYi5waWN0dXJlX21ldGFfcGF5bG9hZDsKKwlkc3RfcGliLT5mcmFtZV9yYXRlCQk9IHNyY19waWItPnJlc29sdXRpb24gOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgY3J5c3RhbGhkX2h3X3Byb2NfcGliKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3KQoreworCXVuc2lnbmVkIGludCBjbnQ7CisJQzAxMV9QSUIgc3JjX3BpYjsKKwl1aW50MzJfdCBwaWJfYWRkciwgcGliX2NudDsKKwlCQ19QSUNfSU5GT19CTE9DSyAqQXBwUGliOworCWNyeXN0YWxoZF9yeF9kbWFfcGt0ICpyeF9wa3QgPSBOVUxMOworCisJcGliX2NudCA9IGNyeXN0YWxoZF9nZXRfcGliX2F2YWlsX2NudChodyk7CisKKwlpZiAoIXBpYl9jbnQpCisJCXJldHVybjsKKworCWZvciAoY250ID0gMDsgY250IDwgcGliX2NudDsgY250KyspIHsKKworCQlwaWJfYWRkciA9IGNyeXN0YWxoZF9nZXRfYWRkcl9mcm9tX3BpYl9RKGh3KTsKKwkJY3J5c3RhbGhkX21lbV9yZChody0+YWRwLCBwaWJfYWRkciwgc2l6ZW9mKEMwMTFfUElCKSAvIDQsCisJCQkgICAgICAgKHVpbnQzMl90ICopJnNyY19waWIpOworCisJCWlmIChzcmNfcGliLmJGb3JtYXRDaGFuZ2UpIHsKKwkJCXJ4X3BrdCA9IChjcnlzdGFsaGRfcnhfZG1hX3BrdCAqKWNyeXN0YWxoZF9kaW9xX2ZldGNoKGh3LT5yeF9mcmVlcSk7CisJCQlpZiAoIXJ4X3BrdCkKKwkJCQlyZXR1cm47CisJCQlyeF9wa3QtPmZsYWdzID0gMDsKKwkJCXJ4X3BrdC0+ZmxhZ3MgfD0gQ09NUF9GTEFHX1BJQl9WQUxJRCB8IENPTVBfRkxBR19GTVRfQ0hBTkdFOworCQkJQXBwUGliID0gJnJ4X3BrdC0+cGliOworCQkJY3B5X3BpYl90b19hcHAoJnNyY19waWIsIEFwcFBpYik7CisKKwkJCUJDTUxPRyhCQ01MT0dfREJHLAorCQkJICAgICAgICJBcHAgUElCOiV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4ICV4XG4iLAorCQkJICAgICAgIHJ4X3BrdC0+cGliLnBpY3R1cmVfbnVtYmVyLAorCQkJICAgICAgIHJ4X3BrdC0+cGliLmFzcGVjdF9yYXRpbywKKwkJCSAgICAgICByeF9wa3QtPnBpYi5jaHJvbWFfZm9ybWF0LAorCQkJICAgICAgIHJ4X3BrdC0+cGliLmNvbG91cl9wcmltYXJpZXMsCisJCQkgICAgICAgcnhfcGt0LT5waWIuZnJhbWVfcmF0ZSwKKwkJCSAgICAgICByeF9wa3QtPnBpYi5oZWlnaHQsCisJCQkgICAgICAgcnhfcGt0LT5waWIuaGVpZ2h0LAorCQkJICAgICAgIHJ4X3BrdC0+cGliLm5fZHJvcCwKKwkJCSAgICAgICByeF9wa3QtPnBpYi5wdWxsZG93biwKKwkJCSAgICAgICByeF9wa3QtPnBpYi55Y29tKTsKKworCQkJY3J5c3RhbGhkX2Rpb3FfYWRkKGh3LT5yeF9yZHlxLCAodm9pZCAqKXJ4X3BrdCwgdHJ1ZSwgcnhfcGt0LT5wa3RfdGFnKTsKKworCQl9CisKKwkJY3J5c3RhbGhkX3JlbF9hZGRyX3RvX3BpYl9RKGh3LCBwaWJfYWRkcik7CisJfQorfQorCitzdGF0aWMgdm9pZCBjcnlzdGFsaGRfc3RhcnRfcnhfZG1hX2VuZ2luZShzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodykKK3sKKwl1aW50MzJfdCAgICAgICAgZG1hX2NudHJsOworCisJZG1hX2NudHJsID0gY3J5c3RhbGhkX3JlZ19yZChody0+YWRwLCBNSVNDMV9ZX1JYX1NXX0RFU0NfTElTVF9DVFJMX1NUUyk7CisJaWYgKCEoZG1hX2NudHJsICYgRE1BX1NUQVJUX0JJVCkpIHsKKwkJZG1hX2NudHJsIHw9IERNQV9TVEFSVF9CSVQ7CisJCWNyeXN0YWxoZF9yZWdfd3IoaHctPmFkcCwgTUlTQzFfWV9SWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFMsIGRtYV9jbnRybCk7CisJfQorCisJZG1hX2NudHJsID0gY3J5c3RhbGhkX3JlZ19yZChody0+YWRwLCBNSVNDMV9VVl9SWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFMpOworCWlmICghKGRtYV9jbnRybCAmIERNQV9TVEFSVF9CSVQpKSB7CisJCWRtYV9jbnRybCB8PSBETUFfU1RBUlRfQklUOworCQljcnlzdGFsaGRfcmVnX3dyKGh3LT5hZHAsIE1JU0MxX1VWX1JYX1NXX0RFU0NfTElTVF9DVFJMX1NUUywgZG1hX2NudHJsKTsKKwl9CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGNyeXN0YWxoZF9zdG9wX3J4X2RtYV9lbmdpbmUoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcpCit7CisJdWludDMyX3QgZG1hX2NudHJsID0gMCwgY291bnQgPSAzMDsKKwl1aW50MzJfdCBsMHkgPSAxLCBsMHV2ID0gMSwgbDF5ID0gMSwgbDF1diA9IDE7CisKKwlkbWFfY250cmwgPSBjcnlzdGFsaGRfcmVnX3JkKGh3LT5hZHAsIE1JU0MxX1lfUlhfU1dfREVTQ19MSVNUX0NUUkxfU1RTKTsKKwlpZiAoKGRtYV9jbnRybCAmIERNQV9TVEFSVF9CSVQpKSB7CisJCWRtYV9jbnRybCAmPSB+RE1BX1NUQVJUX0JJVDsKKwkJY3J5c3RhbGhkX3JlZ193cihody0+YWRwLCBNSVNDMV9ZX1JYX1NXX0RFU0NfTElTVF9DVFJMX1NUUywgZG1hX2NudHJsKTsKKwl9CisKKwlkbWFfY250cmwgPSBjcnlzdGFsaGRfcmVnX3JkKGh3LT5hZHAsIE1JU0MxX1VWX1JYX1NXX0RFU0NfTElTVF9DVFJMX1NUUyk7CisJaWYgKChkbWFfY250cmwgJiBETUFfU1RBUlRfQklUKSkgeworCQlkbWFfY250cmwgJj0gfkRNQV9TVEFSVF9CSVQ7CisJCWNyeXN0YWxoZF9yZWdfd3IoaHctPmFkcCwgTUlTQzFfVVZfUlhfU1dfREVTQ19MSVNUX0NUUkxfU1RTLCBkbWFfY250cmwpOworCX0KKworCS8qIFBvbGwgZm9yIDNzZWNvbmRzICgzMCAqIDEwMG1zKSBvbiBib3RoIHRoZSBsaXN0cy4uKi8KKwl3aGlsZSAoKGwweSB8fCBsMHV2IHx8IGwxeSB8fCBsMXV2KSAmJiBjb3VudCkgeworCisJCWlmIChsMHkpIHsKKwkJCWwweSA9IGNyeXN0YWxoZF9yZWdfcmQoaHctPmFkcCwgTUlTQzFfWV9SWF9GSVJTVF9ERVNDX0xfQUREUl9MSVNUMCk7CisJCQlsMHkgJj0gRE1BX1NUQVJUX0JJVDsKKwkJCWlmICghbDB5KSB7CisJCQkJaHctPnJ4X2xpc3Rfc3RzWzBdICY9IH5yeF93YWl0aW5nX3lfaW50cjsKKwkJCX0KKwkJfQorCisJCWlmIChsMXkpIHsKKwkJCWwxeSA9IGNyeXN0YWxoZF9yZWdfcmQoaHctPmFkcCwgTUlTQzFfWV9SWF9GSVJTVF9ERVNDX0xfQUREUl9MSVNUMSk7CisJCQlsMXkgJj0gRE1BX1NUQVJUX0JJVDsKKwkJCWlmICghbDF5KSB7CisJCQkJaHctPnJ4X2xpc3Rfc3RzWzFdICY9IH5yeF93YWl0aW5nX3lfaW50cjsKKwkJCX0KKwkJfQorCisJCWlmIChsMHV2KSB7CisJCQlsMHV2ID0gY3J5c3RhbGhkX3JlZ19yZChody0+YWRwLCBNSVNDMV9VVl9SWF9GSVJTVF9ERVNDX0xfQUREUl9MSVNUMCk7CisJCQlsMHV2ICY9IERNQV9TVEFSVF9CSVQ7CisJCQlpZiAoIWwwdXYpIHsKKwkJCQlody0+cnhfbGlzdF9zdHNbMF0gJj0gfnJ4X3dhaXRpbmdfdXZfaW50cjsKKwkJCX0KKwkJfQorCisJCWlmIChsMXV2KSB7CisJCQlsMXV2ID0gY3J5c3RhbGhkX3JlZ19yZChody0+YWRwLCBNSVNDMV9VVl9SWF9GSVJTVF9ERVNDX0xfQUREUl9MSVNUMSk7CisJCQlsMXV2ICY9IERNQV9TVEFSVF9CSVQ7CisJCQlpZiAoIWwxdXYpIHsKKwkJCQlody0+cnhfbGlzdF9zdHNbMV0gJj0gfnJ4X3dhaXRpbmdfdXZfaW50cjsKKwkJCX0KKwkJfQorCQltc2xlZXBfaW50ZXJydXB0aWJsZSgxMDApOworCQljb3VudC0tOworCX0KKworCWh3LT5yeF9saXN0X3Bvc3RfaW5kZXggPSAwOworCisJQkNNTE9HKEJDTUxPR19TU1RFUCwgIkNhcHR1cmUgU3RvcDogJWQgTGlzdDA6U3RzOiV4IExpc3QxOlN0czoleFxuIiwKKwkgICAgICAgY291bnQsIGh3LT5yeF9saXN0X3N0c1swXSwgaHctPnJ4X2xpc3Rfc3RzWzFdKTsKK30KKworc3RhdGljIEJDX1NUQVRVUyBjcnlzdGFsaGRfaHdfcHJvZ19yeGRtYShzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodywgY3J5c3RhbGhkX3J4X2RtYV9wa3QgKnJ4X3BrdCkKK3sKKwl1aW50MzJfdCB5X2xvd19hZGRyX3JlZywgeV9oaWdoX2FkZHJfcmVnOworCXVpbnQzMl90IHV2X2xvd19hZGRyX3JlZywgdXZfaGlnaF9hZGRyX3JlZzsKKwlhZGRyXzY0IGRlc2NfYWRkcjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKCFodyB8fCAhcnhfcGt0KSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCWlmIChody0+cnhfbGlzdF9wb3N0X2luZGV4ID49IERNQV9FTkdJTkVfQ05UKSB7CisJCUJDTUxPR19FUlIoIkxpc3QgT3V0IE9mIGJvdW5kcyAleFxuIiwgaHctPnJ4X2xpc3RfcG9zdF9pbmRleCk7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHctPnJ4X2xvY2ssIGZsYWdzKTsKKwkvKiBGSVhNRTogamFyb2Q6IHN0c19mcmVlIGlzIGFuIGVudW0gZm9yIDAsIGluIGNyeXN0YWxoZF9ody5oLi4uIHl1ay4uLiAqLworCWlmIChzdHNfZnJlZSAhPSBody0+cnhfbGlzdF9zdHNbaHctPnJ4X2xpc3RfcG9zdF9pbmRleF0pIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPnJ4X2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIEJDX1NUU19CVVNZOworCX0KKworCWlmICghaHctPnJ4X2xpc3RfcG9zdF9pbmRleCkgeworCQl5X2xvd19hZGRyX3JlZyAgID0gTUlTQzFfWV9SWF9GSVJTVF9ERVNDX0xfQUREUl9MSVNUMDsKKwkJeV9oaWdoX2FkZHJfcmVnICA9IE1JU0MxX1lfUlhfRklSU1RfREVTQ19VX0FERFJfTElTVDA7CisJCXV2X2xvd19hZGRyX3JlZyAgPSBNSVNDMV9VVl9SWF9GSVJTVF9ERVNDX0xfQUREUl9MSVNUMDsKKwkJdXZfaGlnaF9hZGRyX3JlZyA9IE1JU0MxX1VWX1JYX0ZJUlNUX0RFU0NfVV9BRERSX0xJU1QwOworCX0gZWxzZSB7CisJCXlfbG93X2FkZHJfcmVnICAgPSBNSVNDMV9ZX1JYX0ZJUlNUX0RFU0NfTF9BRERSX0xJU1QxOworCQl5X2hpZ2hfYWRkcl9yZWcgID0gTUlTQzFfWV9SWF9GSVJTVF9ERVNDX1VfQUREUl9MSVNUMTsKKwkJdXZfbG93X2FkZHJfcmVnICA9IE1JU0MxX1VWX1JYX0ZJUlNUX0RFU0NfTF9BRERSX0xJU1QxOworCQl1dl9oaWdoX2FkZHJfcmVnID0gTUlTQzFfVVZfUlhfRklSU1RfREVTQ19VX0FERFJfTElTVDE7CisJfQorCXJ4X3BrdC0+cGt0X3RhZyA9IGh3LT5yeF9wa3RfdGFnX3NlZWQgKyBody0+cnhfbGlzdF9wb3N0X2luZGV4OworCWh3LT5yeF9saXN0X3N0c1tody0+cnhfbGlzdF9wb3N0X2luZGV4XSB8PSByeF93YWl0aW5nX3lfaW50cjsKKwlpZiAocnhfcGt0LT51dl9waHlfYWRkcikKKwkJaHctPnJ4X2xpc3Rfc3RzW2h3LT5yeF9saXN0X3Bvc3RfaW5kZXhdIHw9IHJ4X3dhaXRpbmdfdXZfaW50cjsKKwlody0+cnhfbGlzdF9wb3N0X2luZGV4ID0gKGh3LT5yeF9saXN0X3Bvc3RfaW5kZXggKyAxKSAlIERNQV9FTkdJTkVfQ05UOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5yeF9sb2NrLCBmbGFncyk7CisKKwljcnlzdGFsaGRfZGlvcV9hZGQoaHctPnJ4X2FjdHEsICh2b2lkICopcnhfcGt0LCBmYWxzZSwgcnhfcGt0LT5wa3RfdGFnKTsKKworCWNyeXN0YWxoZF9zdGFydF9yeF9kbWFfZW5naW5lKGh3KTsKKwkvKiBQcm9ncmFtIHRoZSBZIGRlc2NyaXB0b3IgKi8KKwlkZXNjX2FkZHIuZnVsbF9hZGRyID0gcnhfcGt0LT5kZXNjX21lbS5waHlfYWRkcjsKKwljcnlzdGFsaGRfcmVnX3dyKGh3LT5hZHAsIHlfaGlnaF9hZGRyX3JlZywgZGVzY19hZGRyLmhpZ2hfcGFydCk7CisJY3J5c3RhbGhkX3JlZ193cihody0+YWRwLCB5X2xvd19hZGRyX3JlZywgZGVzY19hZGRyLmxvd19wYXJ0IHwgMHgwMSk7CisKKwlpZiAocnhfcGt0LT51dl9waHlfYWRkcikgeworCQkvKiBQcm9ncmFtIHRoZSBVViBkZXNjcmlwdG9yICovCisJCWRlc2NfYWRkci5mdWxsX2FkZHIgPSByeF9wa3QtPnV2X3BoeV9hZGRyOworCQljcnlzdGFsaGRfcmVnX3dyKGh3LT5hZHAsIHV2X2hpZ2hfYWRkcl9yZWcsIGRlc2NfYWRkci5oaWdoX3BhcnQpOworCQljcnlzdGFsaGRfcmVnX3dyKGh3LT5hZHAsIHV2X2xvd19hZGRyX3JlZywgZGVzY19hZGRyLmxvd19wYXJ0IHwgMHgwMSk7CisJfQorCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCitzdGF0aWMgQkNfU1RBVFVTIGNyeXN0YWxoZF9od19wb3N0X2NhcF9idWZmKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LAorCQkJCQkgIGNyeXN0YWxoZF9yeF9kbWFfcGt0ICpyeF9wa3QpCit7CisJQkNfU1RBVFVTIHN0cyA9IGNyeXN0YWxoZF9od19wcm9nX3J4ZG1hKGh3LCByeF9wa3QpOworCisJaWYgKHN0cyA9PSBCQ19TVFNfQlVTWSkKKwkJY3J5c3RhbGhkX2Rpb3FfYWRkKGh3LT5yeF9mcmVlcSwgKHZvaWQgKilyeF9wa3QsCisJCQkJIGZhbHNlLCByeF9wa3QtPnBrdF90YWcpOworCisJcmV0dXJuIHN0czsKK30KKworc3RhdGljIHZvaWQgY3J5c3RhbGhkX2dldF9kbnN6KHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LCB1aW50MzJfdCBsaXN0X2luZGV4LAorCQkJICAgICB1aW50MzJfdCAqeV9kd19kbnN6LCB1aW50MzJfdCAqdXZfZHdfZG5zeikKK3sKKwl1aW50MzJfdCB5X2RuX3N6X3JlZywgdXZfZG5fc3pfcmVnOworCisJaWYgKCFsaXN0X2luZGV4KSB7CisJCXlfZG5fc3pfcmVnICA9IE1JU0MxX1lfUlhfTElTVDBfQ1VSX0JZVEVfQ05UOworCQl1dl9kbl9zel9yZWcgPSBNSVNDMV9VVl9SWF9MSVNUMF9DVVJfQllURV9DTlQ7CisJfSBlbHNlIHsKKwkJeV9kbl9zel9yZWcgID0gTUlTQzFfWV9SWF9MSVNUMV9DVVJfQllURV9DTlQ7CisJCXV2X2RuX3N6X3JlZyA9IE1JU0MxX1VWX1JYX0xJU1QxX0NVUl9CWVRFX0NOVDsKKwl9CisKKwkqeV9kd19kbnN6ICA9IGNyeXN0YWxoZF9yZWdfcmQoaHctPmFkcCwgeV9kbl9zel9yZWcpOworCSp1dl9kd19kbnN6ID0gY3J5c3RhbGhkX3JlZ19yZChody0+YWRwLCB1dl9kbl9zel9yZWcpOworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgbWFraW5nIHN1cmUgdGhhdCB0aGUgdHdvIERNQQorICogbGlzdHMgYXJlIGZyZWUuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgY2hlY2sgaWYgRE1BJ3MgYXJlIGFjdGl2ZSwgYmVmb3JlCisgKiB0dXJuaW5nIG9mZiB0aGUgRE1BLgorICovCitzdGF0aWMgdm9pZCBjcnlzdGFsaGRfaHdfZmluYWxpemVfcGF1c2Uoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcpCit7CisJdWludDMyX3QgZG1hX2NudHJsLCBhc3BtOworCisJaHctPnN0b3BfcGVuZGluZyA9IDA7CisKKwlkbWFfY250cmwgPSBjcnlzdGFsaGRfcmVnX3JkKGh3LT5hZHAsIE1JU0MxX1lfUlhfU1dfREVTQ19MSVNUX0NUUkxfU1RTKTsKKwlpZiAoZG1hX2NudHJsICYgRE1BX1NUQVJUX0JJVCkgeworCQlkbWFfY250cmwgJj0gfkRNQV9TVEFSVF9CSVQ7CisJCWNyeXN0YWxoZF9yZWdfd3IoaHctPmFkcCwgTUlTQzFfWV9SWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFMsIGRtYV9jbnRybCk7CisJfQorCisJZG1hX2NudHJsID0gY3J5c3RhbGhkX3JlZ19yZChody0+YWRwLCBNSVNDMV9VVl9SWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFMpOworCWlmIChkbWFfY250cmwgJiBETUFfU1RBUlRfQklUKSB7CisJCWRtYV9jbnRybCAmPSB+RE1BX1NUQVJUX0JJVDsKKwkJY3J5c3RhbGhkX3JlZ193cihody0+YWRwLCBNSVNDMV9VVl9SWF9TV19ERVNDX0xJU1RfQ1RSTF9TVFMsIGRtYV9jbnRybCk7CisJfQorCWh3LT5yeF9saXN0X3Bvc3RfaW5kZXggPSAwOworCisJYXNwbSA9IGNyeXN0YWxoZF9yZWdfcmQoaHctPmFkcCwgUENJRV9ETExfREFUQV9MSU5LX0NPTlRST0wpOworCWFzcG0gfD0gQVNQTV9MMV9FTkFCTEU7CisJLyogTkFSRU4gQkNNTE9HKEJDTUxPR19JTkZPLCAiYXNwbSBvblxuIik7ICovCisJY3J5c3RhbGhkX3JlZ193cihody0+YWRwLCBQQ0lFX0RMTF9EQVRBX0xJTktfQ09OVFJPTCwgYXNwbSk7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgY3J5c3RhbGhkX3J4X3BrdF9kb25lKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LCB1aW50MzJfdCBsaXN0X2luZGV4LAorCQkJCSAgICAgQkNfU1RBVFVTIGNvbXBfc3RzKQoreworCWNyeXN0YWxoZF9yeF9kbWFfcGt0ICpyeF9wa3QgPSBOVUxMOworCXVpbnQzMl90IHlfZHdfZG5zeiwgdXZfZHdfZG5zejsKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisKKwlpZiAoIWh3IHx8IGxpc3RfaW5kZXggPj0gRE1BX0VOR0lORV9DTlQpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmd1bWVudHNcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJcnhfcGt0ID0gY3J5c3RhbGhkX2Rpb3FfZmluZF9hbmRfZmV0Y2goaHctPnJ4X2FjdHEsCisJCQkJCSAgICAgaHctPnJ4X3BrdF90YWdfc2VlZCArIGxpc3RfaW5kZXgpOworCWlmICghcnhfcGt0KSB7CisJCUJDTUxPR19FUlIoIkFjdC1ROlBvc3RJeDoleCBMMFN0czoleCBMMVN0czoleCBjdXJyZW50IEw6JXggdGFnOiV4IGNvbXA6JXhcbiIsCisJCQkgICBody0+cnhfbGlzdF9wb3N0X2luZGV4LCBody0+cnhfbGlzdF9zdHNbMF0sCisJCQkgICBody0+cnhfbGlzdF9zdHNbMV0sIGxpc3RfaW5kZXgsCisJCQkgICBody0+cnhfcGt0X3RhZ19zZWVkICsgbGlzdF9pbmRleCwgY29tcF9zdHMpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJaWYgKGNvbXBfc3RzID09IEJDX1NUU19TVUNDRVNTKSB7CisJCWNyeXN0YWxoZF9nZXRfZG5zeihodywgbGlzdF9pbmRleCwgJnlfZHdfZG5zeiwgJnV2X2R3X2Ruc3opOworCQlyeF9wa3QtPmRpb19yZXEtPnVpbmZvLnlfZG9uZV9zeiA9IHlfZHdfZG5zejsKKwkJcnhfcGt0LT5mbGFncyA9IENPTVBfRkxBR19EQVRBX1ZBTElEOworCQlpZiAocnhfcGt0LT51dl9waHlfYWRkcikKKwkJCXJ4X3BrdC0+ZGlvX3JlcS0+dWluZm8udXZfZG9uZV9zeiA9IHV2X2R3X2Ruc3o7CisJCWNyeXN0YWxoZF9kaW9xX2FkZChody0+cnhfcmR5cSwgcnhfcGt0LCB0cnVlLAorCQkJCWh3LT5yeF9wa3RfdGFnX3NlZWQgKyBsaXN0X2luZGV4KTsKKwkJcmV0dXJuIHN0czsKKwl9CisKKwkvKiBDaGVjayBpZiB3ZSBjYW4gcG9zdCB0aGlzIERJTyBhZ2Fpbi4gKi8KKwlyZXR1cm4gY3J5c3RhbGhkX2h3X3Bvc3RfY2FwX2J1ZmYoaHcsIHJ4X3BrdCk7Cit9CisKK3N0YXRpYyBib29sIGNyeXN0YWxoZF9yeF9saXN0MF9oYW5kbGVyKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LCB1aW50MzJfdCBpbnRfc3RzLAorCQkJCSAgICAgdWludDMyX3QgeV9lcnJfc3RzLCB1aW50MzJfdCB1dl9lcnJfc3RzKQoreworCXVpbnQzMl90IHRtcDsKKwlsaXN0X3N0cyB0bXBfbHN0czsKKworCWlmICghKHlfZXJyX3N0cyAmIEdFVF9ZMF9FUlJfTVNLKSAmJiAhKHV2X2Vycl9zdHMgJiBHRVRfVVYwX0VSUl9NU0spKQorCQlyZXR1cm4gZmFsc2U7CisKKwl0bXBfbHN0cyA9IGh3LT5yeF9saXN0X3N0c1swXTsKKworCS8qIFkwIC0gRE1BICovCisJdG1wID0geV9lcnJfc3RzICYgR0VUX1kwX0VSUl9NU0s7CisJaWYgKGludF9zdHMgJiBJTlRSX0lOVFJfU1RBVFVTX0wwX1lfUlhfRE1BX0RPTkVfSU5UUl9NQVNLKQorCQlody0+cnhfbGlzdF9zdHNbMF0gJj0gfnJ4X3dhaXRpbmdfeV9pbnRyOworCisJaWYgKHlfZXJyX3N0cyAmIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wwX1VOREVSUlVOX0VSUk9SX01BU0spIHsKKwkJaHctPnJ4X2xpc3Rfc3RzWzBdICY9IH5yeF93YWl0aW5nX3lfaW50cjsKKwkJdG1wICY9IH5NSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9VTkRFUlJVTl9FUlJPUl9NQVNLOworCX0KKworCWlmICh5X2Vycl9zdHMgJiBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9GSUZPX0ZVTExfRVJST1JTX01BU0spIHsKKwkJaHctPnJ4X2xpc3Rfc3RzWzBdICY9IH5yeF95X21hc2s7CisJCWh3LT5yeF9saXN0X3N0c1swXSB8PSByeF95X2Vycm9yOworCQl0bXAgJj0gfk1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wwX0ZJRk9fRlVMTF9FUlJPUlNfTUFTSzsKKwl9CisKKwlpZiAodG1wKSB7CisJCWh3LT5yeF9saXN0X3N0c1swXSAmPSB+cnhfeV9tYXNrOworCQlody0+cnhfbGlzdF9zdHNbMF0gfD0gcnhfeV9lcnJvcjsKKwkJaHctPnJ4X2xpc3RfcG9zdF9pbmRleCA9IDA7CisJfQorCisJLyogVVYwIC0gRE1BICovCisJdG1wID0gdXZfZXJyX3N0cyAmIEdFVF9VVjBfRVJSX01TSzsKKwlpZiAoaW50X3N0cyAmIElOVFJfSU5UUl9TVEFUVVNfTDBfVVZfUlhfRE1BX0RPTkVfSU5UUl9NQVNLKQorCQlody0+cnhfbGlzdF9zdHNbMF0gJj0gfnJ4X3dhaXRpbmdfdXZfaW50cjsKKworCWlmICh1dl9lcnJfc3RzICYgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wwX1VOREVSUlVOX0VSUk9SX01BU0spIHsKKwkJaHctPnJ4X2xpc3Rfc3RzWzBdICY9IH5yeF93YWl0aW5nX3V2X2ludHI7CisJCXRtcCAmPSB+TUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wwX1VOREVSUlVOX0VSUk9SX01BU0s7CisJfQorCisJaWYgKHV2X2Vycl9zdHMgJiBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfRklGT19GVUxMX0VSUk9SU19NQVNLKSB7CisJCWh3LT5yeF9saXN0X3N0c1swXSAmPSB+cnhfdXZfbWFzazsKKwkJaHctPnJ4X2xpc3Rfc3RzWzBdIHw9IHJ4X3V2X2Vycm9yOworCQl0bXAgJj0gfk1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9GSUZPX0ZVTExfRVJST1JTX01BU0s7CisJfQorCisJaWYgKHRtcCkgeworCQlody0+cnhfbGlzdF9zdHNbMF0gJj0gfnJ4X3V2X21hc2s7CisJCWh3LT5yeF9saXN0X3N0c1swXSB8PSByeF91dl9lcnJvcjsKKwkJaHctPnJ4X2xpc3RfcG9zdF9pbmRleCA9IDA7CisJfQorCisJaWYgKHlfZXJyX3N0cyAmIEdFVF9ZMF9FUlJfTVNLKSB7CisJCXRtcCA9IHlfZXJyX3N0cyAmIEdFVF9ZMF9FUlJfTVNLOworCQljcnlzdGFsaGRfcmVnX3dyKGh3LT5hZHAsIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTLCB0bXApOworCX0KKworCWlmICh1dl9lcnJfc3RzICYgR0VUX1VWMF9FUlJfTVNLKSB7CisJCXRtcCA9IHV2X2Vycl9zdHMgJiBHRVRfVVYwX0VSUl9NU0s7CisJCWNyeXN0YWxoZF9yZWdfd3IoaHctPmFkcCwgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTLCB0bXApOworCX0KKworCXJldHVybiAodG1wX2xzdHMgIT0gaHctPnJ4X2xpc3Rfc3RzWzBdKTsKK30KKworc3RhdGljIGJvb2wgY3J5c3RhbGhkX3J4X2xpc3QxX2hhbmRsZXIoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcsIHVpbnQzMl90IGludF9zdHMsCisJCQkJICAgICB1aW50MzJfdCB5X2Vycl9zdHMsIHVpbnQzMl90IHV2X2Vycl9zdHMpCit7CisJdWludDMyX3QgdG1wOworCWxpc3Rfc3RzIHRtcF9sc3RzOworCisJaWYgKCEoeV9lcnJfc3RzICYgR0VUX1kxX0VSUl9NU0spICYmICEodXZfZXJyX3N0cyAmIEdFVF9VVjFfRVJSX01TSykpCisJCXJldHVybiBmYWxzZTsKKworCXRtcF9sc3RzID0gaHctPnJ4X2xpc3Rfc3RzWzFdOworCisJLyogWTEgLSBETUEgKi8KKwl0bXAgPSB5X2Vycl9zdHMgJiBHRVRfWTFfRVJSX01TSzsKKwlpZiAoaW50X3N0cyAmIElOVFJfSU5UUl9TVEFUVVNfTDFfWV9SWF9ETUFfRE9ORV9JTlRSX01BU0spCisJCWh3LT5yeF9saXN0X3N0c1sxXSAmPSB+cnhfd2FpdGluZ195X2ludHI7CisKKwlpZiAoeV9lcnJfc3RzICYgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfVU5ERVJSVU5fRVJST1JfTUFTSykgeworCQlody0+cnhfbGlzdF9zdHNbMV0gJj0gfnJ4X3dhaXRpbmdfeV9pbnRyOworCQl0bXAgJj0gfk1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wxX1VOREVSUlVOX0VSUk9SX01BU0s7CisJfQorCisJaWYgKHlfZXJyX3N0cyAmIE1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wxX0ZJRk9fRlVMTF9FUlJPUlNfTUFTSykgeworCQkvKiBBZGQgcmV0cnktc3VwcG9ydC4uKi8KKwkJaHctPnJ4X2xpc3Rfc3RzWzFdICY9IH5yeF95X21hc2s7CisJCWh3LT5yeF9saXN0X3N0c1sxXSB8PSByeF95X2Vycm9yOworCQl0bXAgJj0gfk1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wxX0ZJRk9fRlVMTF9FUlJPUlNfTUFTSzsKKwl9CisKKwlpZiAodG1wKSB7CisJCWh3LT5yeF9saXN0X3N0c1sxXSAmPSB+cnhfeV9tYXNrOworCQlody0+cnhfbGlzdF9zdHNbMV0gfD0gcnhfeV9lcnJvcjsKKwkJaHctPnJ4X2xpc3RfcG9zdF9pbmRleCA9IDA7CisJfQorCisJLyogVVYxIC0gRE1BICovCisJdG1wID0gdXZfZXJyX3N0cyAmIEdFVF9VVjFfRVJSX01TSzsKKwlpZiAoaW50X3N0cyAmIElOVFJfSU5UUl9TVEFUVVNfTDFfVVZfUlhfRE1BX0RPTkVfSU5UUl9NQVNLKSB7CisJCWh3LT5yeF9saXN0X3N0c1sxXSAmPSB+cnhfd2FpdGluZ191dl9pbnRyOworCX0KKworCWlmICh1dl9lcnJfc3RzICYgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wxX1VOREVSUlVOX0VSUk9SX01BU0spIHsKKwkJaHctPnJ4X2xpc3Rfc3RzWzFdICY9IH5yeF93YWl0aW5nX3V2X2ludHI7CisJCXRtcCAmPSB+TUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wxX1VOREVSUlVOX0VSUk9SX01BU0s7CisJfQorCisJaWYgKHV2X2Vycl9zdHMgJiBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfRklGT19GVUxMX0VSUk9SU19NQVNLKSB7CisJCS8qIEFkZCByZXRyeS1zdXBwb3J0Ki8KKwkJaHctPnJ4X2xpc3Rfc3RzWzFdICY9IH5yeF91dl9tYXNrOworCQlody0+cnhfbGlzdF9zdHNbMV0gfD0gcnhfdXZfZXJyb3I7CisJCXRtcCAmPSB+TUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wxX0ZJRk9fRlVMTF9FUlJPUlNfTUFTSzsKKwl9CisKKwlpZiAodG1wKSB7CisJCWh3LT5yeF9saXN0X3N0c1sxXSAmPSB+cnhfdXZfbWFzazsKKwkJaHctPnJ4X2xpc3Rfc3RzWzFdIHw9IHJ4X3V2X2Vycm9yOworCQlody0+cnhfbGlzdF9wb3N0X2luZGV4ID0gMDsKKwl9CisKKwlpZiAoeV9lcnJfc3RzICYgR0VUX1kxX0VSUl9NU0spIHsKKwkJdG1wID0geV9lcnJfc3RzICYgR0VUX1kxX0VSUl9NU0s7CisJCWNyeXN0YWxoZF9yZWdfd3IoaHctPmFkcCwgTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVMsIHRtcCk7CisJfQorCisJaWYgKHV2X2Vycl9zdHMgJiBHRVRfVVYxX0VSUl9NU0spIHsKKwkJdG1wID0gdXZfZXJyX3N0cyAmIEdFVF9VVjFfRVJSX01TSzsKKwkJY3J5c3RhbGhkX3JlZ193cihody0+YWRwLCBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVMsIHRtcCk7CisJfQorCisJcmV0dXJuICh0bXBfbHN0cyAhPSBody0+cnhfbGlzdF9zdHNbMV0pOworfQorCisKK3N0YXRpYyB2b2lkIGNyeXN0YWxoZF9yeF9pc3Ioc3RydWN0IGNyeXN0YWxoZF9odyAqaHcsIHVpbnQzMl90IGludHJfc3RzKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdWludDMyX3QgaSwgbGlzdF9hdmFpbCA9IDA7CisJQkNfU1RBVFVTIGNvbXBfc3RzID0gQkNfU1RTX05PX0RBVEE7CisJdWludDMyX3QgeV9lcnJfc3RzLCB1dl9lcnJfc3RzLCB5X2RuX3N6ID0gMCwgdXZfZG5fc3ogPSAwOworCWJvb2wgcmV0ID0gMDsKKworCWlmICghaHcpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmd1bWVudHNcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKCEoaW50cl9zdHMgJiBHRVRfUlhfSU5UUl9NQVNLKSkKKwkJcmV0dXJuOworCisJeV9lcnJfc3RzID0gY3J5c3RhbGhkX3JlZ19yZChody0+YWRwLCBNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVUyk7CisJdXZfZXJyX3N0cyA9IGNyeXN0YWxoZF9yZWdfcmQoaHctPmFkcCwgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTKTsKKworCWZvciAoaSA9IDA7IGkgPCBETUFfRU5HSU5FX0NOVDsgaSsrKSB7CisJCS8qIFVwZGF0ZSBTdGF0ZXMuLiovCisJCXNwaW5fbG9ja19pcnFzYXZlKCZody0+cnhfbG9jaywgZmxhZ3MpOworCQlpZiAoaSA9PSAwKQorCQkJcmV0ID0gY3J5c3RhbGhkX3J4X2xpc3QwX2hhbmRsZXIoaHcsIGludHJfc3RzLCB5X2Vycl9zdHMsIHV2X2Vycl9zdHMpOworCQllbHNlCisJCQlyZXQgPSBjcnlzdGFsaGRfcnhfbGlzdDFfaGFuZGxlcihodywgaW50cl9zdHMsIHlfZXJyX3N0cywgdXZfZXJyX3N0cyk7CisJCWlmIChyZXQpIHsKKwkJCXN3aXRjaCAoaHctPnJ4X2xpc3Rfc3RzW2ldKSB7CisJCQljYXNlIHN0c19mcmVlOgorCQkJCWNvbXBfc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisJCQkJbGlzdF9hdmFpbCA9IDE7CisJCQkJYnJlYWs7CisJCQljYXNlIHJ4X3lfZXJyb3I6CisJCQljYXNlIHJ4X3V2X2Vycm9yOgorCQkJY2FzZSByeF9zdHNfZXJyb3I6CisJCQkJLyogV2UgZ290IGVycm9yIG9uIGJvdGggb3IgWSBvciB1di4gKi8KKwkJCQlody0+c3RhdHMucnhfZXJyb3JzKys7CisJCQkJY3J5c3RhbGhkX2dldF9kbnN6KGh3LCBpLCAmeV9kbl9zeiwgJnV2X2RuX3N6KTsKKwkJCQkvKiBGSVhNRTogamFyb2Q6IHRoaXMgaXMgd2hlcmUgbXkgbWluaSBwY2ktZSBjYXJkIGlzIHRyaXBwaW5nIHVwICovCisJCQkJQkNNTE9HKEJDTUxPR19EQkcsICJsaXN0X2luZGV4OiV4IHJ4WyVkXSBZOiV4ICIKKwkJCQkgICAgICAgIlVWOiV4IEludDoleCBZRG5TejoleCBVVkRuU3o6JXhcbiIsCisJCQkJICAgICAgIGksIGh3LT5zdGF0cy5yeF9lcnJvcnMsIHlfZXJyX3N0cywKKwkJCQkgICAgICAgdXZfZXJyX3N0cywgaW50cl9zdHMsIHlfZG5fc3osIHV2X2RuX3N6KTsKKwkJCQlody0+cnhfbGlzdF9zdHNbaV0gPSBzdHNfZnJlZTsKKwkJCQljb21wX3N0cyA9IEJDX1NUU19FUlJPUjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJLyogV2FpdCBmb3IgY29tcGxldGlvbi4uKi8KKwkJCQljb21wX3N0cyA9IEJDX1NUU19OT19EQVRBOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3LT5yeF9sb2NrLCBmbGFncyk7CisKKwkJLyogaGFuZGxlIGNvbXBsZXRpb24uLi4qLworCQlpZiAoY29tcF9zdHMgIT0gQkNfU1RTX05PX0RBVEEpIHsKKwkJCWNyeXN0YWxoZF9yeF9wa3RfZG9uZShodywgaSwgY29tcF9zdHMpOworCQkJY29tcF9zdHMgPSBCQ19TVFNfTk9fREFUQTsKKwkJfQorCX0KKworCWlmIChsaXN0X2F2YWlsKSB7CisJCWlmIChody0+c3RvcF9wZW5kaW5nKSB7CisJCQlpZiAoKGh3LT5yeF9saXN0X3N0c1swXSA9PSBzdHNfZnJlZSkgJiYKKwkJCSAgICAoaHctPnJ4X2xpc3Rfc3RzWzFdID09IHN0c19mcmVlKSkKKwkJCQljcnlzdGFsaGRfaHdfZmluYWxpemVfcGF1c2UoaHcpOworCQl9IGVsc2UgeworCQkJY3J5c3RhbGhkX2h3X3N0YXJ0X2NhcHR1cmUoaHcpOworCQl9CisJfQorfQorCitzdGF0aWMgQkNfU1RBVFVTIGNyeXN0YWxoZF9md19jbWRfcG9zdF9wcm9jKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LAorCQkJCQkgIEJDX0ZXX0NNRCAqZndfY21kKQoreworCUJDX1NUQVRVUyBzdHMgPSBCQ19TVFNfU1VDQ0VTUzsKKwlEZWNSc3BDaGFubmVsU3RhcnRWaWRlbyAqc3RfcnNwID0gTlVMTDsKKworCXN3aXRjaCAoZndfY21kLT5jbWRbMF0pIHsKKwljYXNlIGVDTURfQzAxMV9ERUNfQ0hBTl9TVEFSVF9WSURFTzoKKwkJc3RfcnNwID0gKERlY1JzcENoYW5uZWxTdGFydFZpZGVvICopZndfY21kLT5yc3A7CisJCWh3LT5waWJfZGVsX1FfYWRkciA9IHN0X3JzcC0+cGljSW5mb0RlbGl2ZXJ5UTsKKwkJaHctPnBpYl9yZWxfUV9hZGRyID0gc3RfcnNwLT5waWNJbmZvUmVsZWFzZVE7CisJCUJDTUxPRyhCQ01MT0dfREJHLCAiRGVsUUFkZHI6JXggUmVsUUFkZHI6JXhcbiIsCisJCSAgICAgICBody0+cGliX2RlbF9RX2FkZHIsIGh3LT5waWJfcmVsX1FfYWRkcik7CisJCWJyZWFrOworCWNhc2UgZUNNRF9DMDExX0lOSVQ6CisJCWlmICghKGNyeXN0YWxoZF9sb2FkX2Zpcm13YXJlX2NvbmZpZyhody0+YWRwKSkpIHsKKwkJCUJDTUxPR19FUlIoIkludmFsaWQgUGFyYW1zLlxuIik7CisJCQlzdHMgPSBCQ19TVFNfRldfQVVUSF9GQUlMRUQ7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiBzdHM7Cit9CisKK3N0YXRpYyBCQ19TVEFUVVMgY3J5c3RhbGhkX3B1dF9kZHIyc2xlZXAoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcpCit7CisJdWludDMyX3QgcmVnOworCWxpbmtfbWlzY19wZXJzdF9kZWNvZGVyX2N0cmwgcnN0X2NudHJsX3JlZzsKKworCS8qIFB1bHNlIHJlc2V0IHBpbiBvZiA3NDEyIChNSVNDX1BFUlNUX0RFQ09ERVJfQ1RSTCkgKi8KKwlyc3RfY250cmxfcmVnLndob2xlX3JlZyA9IGNyeXN0YWxoZF9yZWdfcmQoaHctPmFkcCwgTUlTQ19QRVJTVF9ERUNPREVSX0NUUkwpOworCisJcnN0X2NudHJsX3JlZy5iY21fNzQxMl9yc3QgPSAxOworCWNyeXN0YWxoZF9yZWdfd3IoaHctPmFkcCwgTUlTQ19QRVJTVF9ERUNPREVSX0NUUkwsIHJzdF9jbnRybF9yZWcud2hvbGVfcmVnKTsKKwltc2xlZXBfaW50ZXJydXB0aWJsZSg1MCk7CisKKwlyc3RfY250cmxfcmVnLmJjbV83NDEyX3JzdCA9IDA7CisJY3J5c3RhbGhkX3JlZ193cihody0+YWRwLCBNSVNDX1BFUlNUX0RFQ09ERVJfQ1RSTCwgcnN0X2NudHJsX3JlZy53aG9sZV9yZWcpOworCisJLyogQ2xvc2UgYWxsIGJhbmtzLCBwdXQgRERSIGluIGlkbGUgKi8KKwliY19kZWNfcmVnX3dyKGh3LT5hZHAsIFNEUkFNX1BSRUNIQVJHRSwgMCk7CisKKwkvKiBTZXQgYml0IDI1IChkcm9wIENLRSBwaW4gb2YgRERSKSAqLworCXJlZyA9IGJjX2RlY19yZWdfcmQoaHctPmFkcCwgU0RSQU1fUEFSQU0pOworCXJlZyB8PSAweDAyMDAwMDAwOworCWJjX2RlY19yZWdfd3IoaHctPmFkcCwgU0RSQU1fUEFSQU0sIHJlZyk7CisKKwkvKiBSZXNldCB0aGUgYXVkaW8gYmxvY2sgKi8KKwliY19kZWNfcmVnX3dyKGh3LT5hZHAsIEFVRF9EU1BfTUlTQ19TT0ZUX1JFU0VULCAweDEpOworCisJLyogUG93ZXIgZG93biBSYXB0b3IgUExMICovCisJcmVnID0gYmNfZGVjX3JlZ19yZChody0+YWRwLCBEZWNIdF9QbGxDQ3RsKTsKKwlyZWcgfD0gMHgwMDAwODAwMDsKKwliY19kZWNfcmVnX3dyKGh3LT5hZHAsIERlY0h0X1BsbENDdGwsIHJlZyk7CisKKwkvKiBQb3dlciBkb3duIGFsbCBBdWRpbyBQTEwgKi8KKwliY19kZWNfcmVnX3dyKGh3LT5hZHAsIEFJT19NSVNDX1BMTF9SRVNFVCwgMHgxKTsKKworCS8qIFBvd2VyIGRvd24gdmlkZW8gY2xvY2sgKDc1TUh6KSAqLworCXJlZyA9IGJjX2RlY19yZWdfcmQoaHctPmFkcCwgRGVjSHRfUGxsRUN0bCk7CisJcmVnIHw9IDB4MDAwMDgwMDA7CisJYmNfZGVjX3JlZ193cihody0+YWRwLCBEZWNIdF9QbGxFQ3RsLCByZWcpOworCisJLyogUG93ZXIgZG93biB2aWRlbyBjbG9jayAoNzVNSHopICovCisJcmVnID0gYmNfZGVjX3JlZ19yZChody0+YWRwLCBEZWNIdF9QbGxEQ3RsKTsKKwlyZWcgfD0gMHgwMDAwODAwMDsKKwliY19kZWNfcmVnX3dyKGh3LT5hZHAsIERlY0h0X1BsbERDdGwsIHJlZyk7CisKKwkvKiBQb3dlciBkb3duIGNvcmUgY2xvY2sgKDIwME1IeikgKi8KKwlyZWcgPSBiY19kZWNfcmVnX3JkKGh3LT5hZHAsIERlY0h0X1BsbEFDdGwpOworCXJlZyB8PSAweDAwMDA4MDAwOworCWJjX2RlY19yZWdfd3IoaHctPmFkcCwgRGVjSHRfUGxsQUN0bCwgcmVnKTsKKworCS8qIFBvd2VyIGRvd24gY29yZSBjbG9jayAoMjAwTUh6KSAqLworCXJlZyA9IGJjX2RlY19yZWdfcmQoaHctPmFkcCwgRGVjSHRfUGxsQkN0bCk7CisJcmVnIHw9IDB4MDAwMDgwMDA7CisJYmNfZGVjX3JlZ193cihody0+YWRwLCBEZWNIdF9QbGxCQ3RsLCByZWcpOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQkNfU1RBVFVTIGNyeXN0YWxoZF9kb3dubG9hZF9mdyhzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLCB2b2lkICpidWZmZXIsIHVpbnQzMl90IHN6KQoreworCXVpbnQzMl90IHJlZ19kYXRhLCBjbnQsICp0ZW1wX2J1ZmY7CisJdWludDMyX3QgZndfc2lnX2xlbiA9IDM2OworCXVpbnQzMl90IGRyYW1fb2Zmc2V0ID0gQkNfRldJTUdfU1RfQUREUiwgc2lnX3JlZzsKKworCUJDTUxPR19FTlRFUjsKKworCWlmICghYWRwIHx8ICFidWZmZXIgfHwgIXN6KSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgUGFyYW1zLlxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlyZWdfZGF0YSA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBPVFBfQ01EKTsKKwlpZiAoIShyZWdfZGF0YSAmIDB4MDIpKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgaHcgY29uZmlnLi4gb3RwIG5vdCBwcm9ncmFtbWVkXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19FUlJPUjsKKwl9CisKKwlyZWdfZGF0YSA9IDA7CisJY3J5c3RhbGhkX3JlZ193cihhZHAsIERDSV9DTUQsIDApOworCXJlZ19kYXRhIHw9IEJDX0JJVCgwKTsKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgRENJX0NNRCwgcmVnX2RhdGEpOworCisJcmVnX2RhdGEgPSAwOworCWNudCA9IDEwMDA7CisJbXNsZWVwX2ludGVycnVwdGlibGUoMTApOworCisJd2hpbGUgKHJlZ19kYXRhICE9IEJDX0JJVCg0KSkgeworCQlyZWdfZGF0YSA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBEQ0lfU1RBVFVTKTsKKwkJcmVnX2RhdGEgJj0gQkNfQklUKDQpOworCQlpZiAoLS1jbnQgPT0gMCkgeworCQkJQkNNTE9HX0VSUigiRmlybXdhcmUgRG93bmxvYWQgUkRZIFRpbWVvdXQuXG4iKTsKKwkJCXJldHVybiBCQ19TVFNfVElNRU9VVDsKKwkJfQorCX0KKworCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKKwkvKiAgTG9hZCB0aGUgRlcgdG8gdGhlIEZXX0FERFIgZmllbGQgaW4gdGhlIERDSV9GSVJNV0FSRV9BRERSICovCisJY3J5c3RhbGhkX3JlZ193cihhZHAsIERDSV9GSVJNV0FSRV9BRERSLCBkcmFtX29mZnNldCk7CisJdGVtcF9idWZmID0gKHVpbnQzMl90ICopYnVmZmVyOworCWZvciAoY250ID0gMDsgY250IDwgKHN6IC0gZndfc2lnX2xlbik7IGNudCArPSA0KSB7CisJCWNyeXN0YWxoZF9yZWdfd3IoYWRwLCBEQ0lfRFJBTV9CQVNFX0FERFIsIChkcmFtX29mZnNldCA+PiAxOSkpOworCQljcnlzdGFsaGRfcmVnX3dyKGFkcCwgRENJX0ZJUk1XQVJFX0RBVEEsICp0ZW1wX2J1ZmYpOworCQlkcmFtX29mZnNldCArPSA0OworCQl0ZW1wX2J1ZmYrKzsKKwl9CisJbXNsZWVwX2ludGVycnVwdGlibGUoMTApOworCisJdGVtcF9idWZmKys7CisKKwlzaWdfcmVnID0gKHVpbnQzMl90KURDSV9TSUdOQVRVUkVfREFUQV83OworCWZvciAoY250ID0gMDsgY250IDwgODsgY250KyspIHsKKwkJdWludDMyX3Qgc3dhcHBlZF9kYXRhID0gKnRlbXBfYnVmZjsKKwkJc3dhcHBlZF9kYXRhID0gYnN3YXBfMzJfMShzd2FwcGVkX2RhdGEpOworCQljcnlzdGFsaGRfcmVnX3dyKGFkcCwgc2lnX3JlZywgc3dhcHBlZF9kYXRhKTsKKwkJc2lnX3JlZyAtPSA0OworCQl0ZW1wX2J1ZmYrKzsKKwl9CisJbXNsZWVwX2ludGVycnVwdGlibGUoMTApOworCisJcmVnX2RhdGEgPSAwOworCXJlZ19kYXRhIHw9IEJDX0JJVCgxKTsKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgRENJX0NNRCwgcmVnX2RhdGEpOworCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKKworCXJlZ19kYXRhID0gMDsKKwlyZWdfZGF0YSA9IGNyeXN0YWxoZF9yZWdfcmQoYWRwLCBEQ0lfU1RBVFVTKTsKKworCWlmICgocmVnX2RhdGEgJiBCQ19CSVQoOSkpID09IEJDX0JJVCg5KSkgeworCQljbnQgPSAxMDAwOworCQl3aGlsZSAoKHJlZ19kYXRhICYgQkNfQklUKDApKSAhPSBCQ19CSVQoMCkpIHsKKwkJCXJlZ19kYXRhID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIERDSV9TVEFUVVMpOworCQkJcmVnX2RhdGEgJj0gQkNfQklUKDApOworCQkJaWYgKCEoLS1jbnQpKQorCQkJCWJyZWFrOworCQkJbXNsZWVwX2ludGVycnVwdGlibGUoMTApOworCQl9CisJCXJlZ19kYXRhID0gMDsKKwkJcmVnX2RhdGEgPSBjcnlzdGFsaGRfcmVnX3JkKGFkcCwgRENJX0NNRCk7CisJCXJlZ19kYXRhIHw9IEJDX0JJVCg0KTsKKwkJY3J5c3RhbGhkX3JlZ193cihhZHAsIERDSV9DTUQsIHJlZ19kYXRhKTsKKworCX0gZWxzZSB7CisJCUJDTUxPR19FUlIoIkYvdyBTaWduYXR1cmUgbWlzbWF0Y2hcbiIpOworCQlyZXR1cm4gQkNfU1RTX0ZXX0FVVEhfRkFJTEVEOworCX0KKworCUJDTUxPRyhCQ01MT0dfSU5GTywgIkZpcm13YXJlIERvd25sb2FkZWQgU3VjY2Vzc2Z1bGx5XG4iKTsKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7OworfQorCitCQ19TVEFUVVMgY3J5c3RhbGhkX2RvX2Z3X2NtZChzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodywgQkNfRldfQ01EICpmd19jbWQpCit7CisJdWludDMyX3QgY250ID0gMCwgY21kX3Jlc19hZGRyOworCXVpbnQzMl90ICpjbWRfYnVmZiwgKnJlc19idWZmOworCXdhaXRfcXVldWVfaGVhZF90IGZ3X2NtZF9ldmVudDsKKwlpbnQgcmMgPSAwOworCUJDX1NUQVRVUyBzdHM7CisKKwljcnlzdGFsaGRfY3JlYXRlX2V2ZW50KCZmd19jbWRfZXZlbnQpOworCisJQkNNTE9HX0VOVEVSOworCisJaWYgKCFodyB8fCAhZndfY21kKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCWNtZF9idWZmID0gZndfY21kLT5jbWQ7CisJcmVzX2J1ZmYgPSBmd19jbWQtPnJzcDsKKworCWlmICghY21kX2J1ZmYgfHwgIXJlc19idWZmKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgUGFyYW1ldGVycyBmb3IgRi9XIENvbW1hbmQgXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCWh3LT5wd3JfbG9jaysrOworCisJaHctPmZ3Y21kX2V2dF9zdHMgPSAwOworCWh3LT5wZndfY21kX2V2ZW50ID0gJmZ3X2NtZF9ldmVudDsKKworCS8qV3JpdGUgdGhlIGNvbW1hbmQgdG8gdGhlIG1lbW9yeSovCisJY3J5c3RhbGhkX21lbV93cihody0+YWRwLCBUU19Ib3N0MkNwdVNuZCwgRldfQ01EX0JVRkZfU1osIGNtZF9idWZmKTsKKworCS8qTWVtb3J5IFJlYWQgZm9yIG1lbW9yeSBhcmJpdHJhdG9yIGZsdXNoKi8KKwljcnlzdGFsaGRfbWVtX3JkKGh3LT5hZHAsIFRTX0hvc3QyQ3B1U25kLCAxLCAmY250KTsKKworCS8qIFdyaXRlIHRoZSBjb21tYW5kIGFkZHJlc3MgdG8gbWFpbGJveCAqLworCWJjX2RlY19yZWdfd3IoaHctPmFkcCwgSHN0MkNwdU1ieDEsIFRTX0hvc3QyQ3B1U25kKTsKKwltc2xlZXBfaW50ZXJydXB0aWJsZSg1MCk7CisKKwljcnlzdGFsaGRfd2FpdF9vbl9ldmVudCgmZndfY21kX2V2ZW50LCBody0+ZndjbWRfZXZ0X3N0cywgMjAwMDAsIHJjLCAwKTsKKworCWlmICghcmMpIHsKKwkJc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisJfSBlbHNlIGlmIChyYyA9PSAtRUJVU1kpIHsKKwkJQkNNTE9HX0VSUigiRmlybXdhcmUgY29tbWFuZCBUL09cbiIpOworCQlzdHMgPSBCQ19TVFNfVElNRU9VVDsKKwl9IGVsc2UgaWYgKHJjID09IC1FSU5UUikgeworCQlCQ01MT0coQkNNTE9HX0RCRywgIkZ3Q21kIFdhaXQgU2lnbmFsIGludC5cbiIpOworCQlzdHMgPSBCQ19TVFNfSU9fVVNFUl9BQk9SVDsKKwl9IGVsc2UgeworCQlCQ01MT0dfRVJSKCJGd0NtZCBJTyBFcnJvci5cbiIpOworCQlzdHMgPSBCQ19TVFNfSU9fRVJST1I7CisJfQorCisJaWYgKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykgeworCQlCQ01MT0dfRVJSKCJGd0NtZCBGYWlsZWQuXG4iKTsKKwkJaHctPnB3cl9sb2NrLS07CisJCXJldHVybiBzdHM7CisJfQorCisJLypHZXQgdGhlIFJlc3BvbmNlIEFkZHJlc3MqLworCWNtZF9yZXNfYWRkciA9IGJjX2RlY19yZWdfcmQoaHctPmFkcCwgQ3B1MkhzdE1ieDEpOworCisJLypSZWFkIHRoZSBSZXNwb25zZSovCisJY3J5c3RhbGhkX21lbV9yZChody0+YWRwLCBjbWRfcmVzX2FkZHIsIEZXX0NNRF9CVUZGX1NaLCByZXNfYnVmZik7CisKKwlody0+cHdyX2xvY2stLTsKKworCWlmIChyZXNfYnVmZlsyXSAhPSBDMDExX1JFVF9TVUNDRVNTKSB7CisJCUJDTUxPR19FUlIoInJlc19idWZmWzJdICE9IEMwMTFfUkVUX1NVQ0NFU1NcbiIpOworCQlyZXR1cm4gQkNfU1RTX0ZXX0NNRF9FUlI7CisJfQorCisJc3RzID0gY3J5c3RhbGhkX2Z3X2NtZF9wb3N0X3Byb2MoaHcsIGZ3X2NtZCk7CisJaWYgKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykKKwkJQkNNTE9HX0VSUigiY3J5c3RhbGhkX2Z3X2NtZF9wb3N0X3Byb2MgRmFpbGVkLlxuIik7CisKKwlyZXR1cm4gc3RzOworfQorCitib29sIGNyeXN0YWxoZF9od19pbnRlcnJ1cHQoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwgc3RydWN0IGNyeXN0YWxoZF9odyAqaHcpCit7CisJdWludDMyX3QgaW50cl9zdHMgPSAwOworCXVpbnQzMl90IGRlY29faW50ciA9IDA7CisJYm9vbCByYyA9IDA7CisKKwlpZiAoIWFkcCB8fCAhaHctPmRldl9zdGFydGVkKQorCQlyZXR1cm4gcmM7CisKKwlody0+c3RhdHMubnVtX2ludGVycnVwdHMrKzsKKwlody0+cHdyX2xvY2srKzsKKworCWRlY29faW50ciA9IGJjX2RlY19yZWdfcmQoYWRwLCBTdHJlYW0ySG9zdF9JbnRyX1N0cyk7CisJaW50cl9zdHMgID0gY3J5c3RhbGhkX3JlZ19yZChhZHAsIElOVFJfSU5UUl9TVEFUVVMpOworCisJaWYgKGludHJfc3RzKSB7CisJCS8qIGxldCBzeXN0ZW0ga25vdyB3ZSBwcm9jZXNzZWQgaW50ZXJydXB0Li4qLworCQlyYyA9IDE7CisJCWh3LT5zdGF0cy5kZXZfaW50ZXJydXB0cysrOworCX0KKworCWlmIChkZWNvX2ludHIgJiYgKGRlY29faW50ciAhPSAweGRlYWRkZWFkKSkgeworCisJCWlmIChkZWNvX2ludHIgJiAweDgwMDAwMDAwKSB7CisJCQkvKlNldCB0aGUgRXZlbnQgYW5kIHRoZSBzdGF0dXMgZmxhZyovCisJCQlpZiAoaHctPnBmd19jbWRfZXZlbnQpIHsKKwkJCQlody0+ZndjbWRfZXZ0X3N0cyA9IDE7CisJCQkJY3J5c3RhbGhkX3NldF9ldmVudChody0+cGZ3X2NtZF9ldmVudCk7CisJCQl9CisJCX0KKworCQlpZiAoZGVjb19pbnRyICYgQkNfQklUKDEpKQorCQkJY3J5c3RhbGhkX2h3X3Byb2NfcGliKGh3KTsKKworCQliY19kZWNfcmVnX3dyKGFkcCwgU3RyZWFtMkhvc3RfSW50cl9TdHMsIGRlY29faW50cik7CisJCS8qIEZJWE1FOiBqYXJvZDogTm8gdWRlbGF5PyBtaWdodCB0aGlzIGJlIHRoZSByZWFsIHJlYXNvbiBtaW5pIHBjaS1lIGNhcmRzIHdlcmUgc3RhbGxpbmcgb3V0PyAqLworCQliY19kZWNfcmVnX3dyKGFkcCwgU3RyZWFtMkhvc3RfSW50cl9TdHMsIDApOworCQlyYyA9IDE7CisJfQorCisJLyogUnggaW50ZXJydXB0cyAqLworCWNyeXN0YWxoZF9yeF9pc3IoaHcsIGludHJfc3RzKTsKKworCS8qIFR4IGludGVycnVwdHMqLworCWNyeXN0YWxoZF90eF9pc3IoaHcsIGludHJfc3RzKTsKKworCS8qIENsZWFyIGludGVycnVwdHMgKi8KKwlpZiAocmMpIHsKKwkJaWYgKGludHJfc3RzKQorCQkJY3J5c3RhbGhkX3JlZ193cihhZHAsIElOVFJfSU5UUl9DTFJfUkVHLCBpbnRyX3N0cyk7CisKKwkJY3J5c3RhbGhkX3JlZ193cihhZHAsIElOVFJfRU9JX0NUUkwsIDEpOworCX0KKworCWh3LT5wd3JfbG9jay0tOworCisJcmV0dXJuIHJjOworfQorCitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X29wZW4oc3RydWN0IGNyeXN0YWxoZF9odyAqaHcsIHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHApCit7CisJaWYgKCFodyB8fCAhYWRwKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCWlmIChody0+ZGV2X3N0YXJ0ZWQpCisJCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKKworCW1lbXNldChodywgMCwgc2l6ZW9mKHN0cnVjdCBjcnlzdGFsaGRfaHcpKTsKKworCWh3LT5hZHAgPSBhZHA7CisJc3Bpbl9sb2NrX2luaXQoJmh3LT5sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmaHctPnJ4X2xvY2spOworCS8qIEZJWE1FOiBqYXJvZDogd2hhdCBhcmUgdGhlc2UgbWFnaWMgbnVtYmVycz8hPyAqLworCWh3LT50eF9pb3FfdGFnX3NlZWQgPSAweDcwMDIzMDcwOworCWh3LT5yeF9wa3RfdGFnX3NlZWQgPSAweDcwMDI5MDcwOworCisJaHctPnN0b3BfcGVuZGluZyA9IDA7CisJY3J5c3RhbGhkX3N0YXJ0X2RldmljZShody0+YWRwKTsKKwlody0+ZGV2X3N0YXJ0ZWQgPSB0cnVlOworCisJLyogc2V0IGluaXRpYWwgY29yZSBjbG9jayAgKi8KKwlody0+Y29yZV9jbG9ja19taHogPSBDTE9DS19QUkVTRVQ7CisJaHctPnByZXZfbiA9IDA7CisJaHctPnB3cl9sb2NrID0gMDsKKwljcnlzdGFsaGRfaHdfc2V0X2NvcmVfY2xvY2soaHcpOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X2Nsb3NlKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3KQoreworCWlmICghaHcpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmd1bWVudHNcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJaWYgKCFody0+ZGV2X3N0YXJ0ZWQpCisJCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKKworCS8qIFN0b3AgYW5kIEREUiBzbGVlcCB3aWxsIGhhcHBlbiBpbiBoZXJlICovCisJY3J5c3RhbGhkX2h3X3N1c3BlbmQoaHcpOworCWh3LT5kZXZfc3RhcnRlZCA9IGZhbHNlOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X3NldHVwX2RtYV9yaW5ncyhzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodykKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwl2b2lkICptZW07CisJc2l6ZV90IG1lbV9sZW47CisJZG1hX2FkZHJfdCBwaHlfYWRkcjsKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisJY3J5c3RhbGhkX3J4X2RtYV9wa3QgKnJwa3Q7CisKKwlpZiAoIWh3IHx8ICFody0+YWRwKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCXN0cyA9IGNyeXN0YWxoZF9od19jcmVhdGVfaW9xcyhodyk7CisJaWYgKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykgeworCQlCQ01MT0dfRVJSKCJGYWlsZWQgdG8gY3JlYXRlIElPUXMuLlxuIik7CisJCXJldHVybiBzdHM7CisJfQorCisJbWVtX2xlbiA9IEJDX0xJTktfTUFYX1NHTFMgKiBzaXplb2YoZG1hX2Rlc2NyaXB0b3IpOworCisJZm9yIChpID0gMDsgaSA8IEJDX1RYX0xJU1RfQ05UOyBpKyspIHsKKwkJbWVtID0gYmNfa2Vybl9kbWFfYWxsb2MoaHctPmFkcCwgbWVtX2xlbiwgJnBoeV9hZGRyKTsKKwkJaWYgKG1lbSkgeworCQkJbWVtc2V0KG1lbSwgMCwgbWVtX2xlbik7CisJCX0gZWxzZSB7CisJCQlCQ01MT0dfRVJSKCJJbnN1ZmZpY2llbnQgTWVtb3J5IEZvciBUWFxuIik7CisJCQljcnlzdGFsaGRfaHdfZnJlZV9kbWFfcmluZ3MoaHcpOworCQkJcmV0dXJuIEJDX1NUU19JTlNVRkZfUkVTOworCQl9CisJCS8qIHJ4X3BrdF9wb29sIC0tIHN0YXRpYyBtZW1vcnkgYWxsb2NhdGlvbiAgKi8KKwkJaHctPnR4X3BrdF9wb29sW2ldLmRlc2NfbWVtLnBkbWFfZGVzY19zdGFydCA9IG1lbTsKKwkJaHctPnR4X3BrdF9wb29sW2ldLmRlc2NfbWVtLnBoeV9hZGRyID0gcGh5X2FkZHI7CisJCWh3LT50eF9wa3RfcG9vbFtpXS5kZXNjX21lbS5zeiA9IEJDX0xJTktfTUFYX1NHTFMgKgorCQkJCQkJIHNpemVvZihkbWFfZGVzY3JpcHRvcik7CisJCWh3LT50eF9wa3RfcG9vbFtpXS5saXN0X3RhZyA9IDA7CisKKwkJLyogQWRkIFRYIGRtYSByZXF1ZXN0cyB0byBGcmVlIFF1ZXVlLi4qLworCQlzdHMgPSBjcnlzdGFsaGRfZGlvcV9hZGQoaHctPnR4X2ZyZWVxLAorCQkJCSAgICAgICAmaHctPnR4X3BrdF9wb29sW2ldLCBmYWxzZSwgMCk7CisJCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpIHsKKwkJCWNyeXN0YWxoZF9od19mcmVlX2RtYV9yaW5ncyhodyk7CisJCQlyZXR1cm4gc3RzOworCQl9CisJfQorCisJZm9yIChpID0gMDsgaSA8IEJDX1JYX0xJU1RfQ05UOyBpKyspIHsKKwkJcnBrdCA9IGt6YWxsb2Moc2l6ZW9mKCpycGt0KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcnBrdCkgeworCQkJQkNNTE9HX0VSUigiSW5zdWZmaWNpZW50IE1lbW9yeSBGb3IgUlhcbiIpOworCQkJY3J5c3RhbGhkX2h3X2ZyZWVfZG1hX3JpbmdzKGh3KTsKKwkJCXJldHVybiBCQ19TVFNfSU5TVUZGX1JFUzsKKwkJfQorCisJCW1lbSA9IGJjX2tlcm5fZG1hX2FsbG9jKGh3LT5hZHAsIG1lbV9sZW4sICZwaHlfYWRkcik7CisJCWlmIChtZW0pIHsKKwkJCW1lbXNldChtZW0sIDAsIG1lbV9sZW4pOworCQl9IGVsc2UgeworCQkJQkNNTE9HX0VSUigiSW5zdWZmaWNpZW50IE1lbW9yeSBGb3IgUlhcbiIpOworCQkJY3J5c3RhbGhkX2h3X2ZyZWVfZG1hX3JpbmdzKGh3KTsKKwkJCXJldHVybiBCQ19TVFNfSU5TVUZGX1JFUzsKKwkJfQorCQlycGt0LT5kZXNjX21lbS5wZG1hX2Rlc2Nfc3RhcnQgPSBtZW07CisJCXJwa3QtPmRlc2NfbWVtLnBoeV9hZGRyID0gcGh5X2FkZHI7CisJCXJwa3QtPmRlc2NfbWVtLnN6ICA9IEJDX0xJTktfTUFYX1NHTFMgKiBzaXplb2YoZG1hX2Rlc2NyaXB0b3IpOworCQlycGt0LT5wa3RfdGFnID0gaHctPnJ4X3BrdF90YWdfc2VlZCArIGk7CisJCWNyeXN0YWxoZF9od19mcmVlX3J4X3BrdChodywgcnBrdCk7CisJfQorCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X2ZyZWVfZG1hX3JpbmdzKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3KQoreworCXVuc2lnbmVkIGludCBpOworCWNyeXN0YWxoZF9yeF9kbWFfcGt0ICpycGt0ID0gTlVMTDsKKworCWlmICghaHcgfHwgIWh3LT5hZHApIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmd1bWVudHNcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJLyogRGVsZXRlIGFsbCBJT1FzLi4gKi8KKwljcnlzdGFsaGRfaHdfZGVsZXRlX2lvcXMoaHcpOworCisJZm9yIChpID0gMDsgaSA8IEJDX1RYX0xJU1RfQ05UOyBpKyspIHsKKwkJaWYgKGh3LT50eF9wa3RfcG9vbFtpXS5kZXNjX21lbS5wZG1hX2Rlc2Nfc3RhcnQpIHsKKwkJCWJjX2tlcm5fZG1hX2ZyZWUoaHctPmFkcCwKKwkJCQlody0+dHhfcGt0X3Bvb2xbaV0uZGVzY19tZW0uc3osCisJCQkJaHctPnR4X3BrdF9wb29sW2ldLmRlc2NfbWVtLnBkbWFfZGVzY19zdGFydCwKKwkJCQlody0+dHhfcGt0X3Bvb2xbaV0uZGVzY19tZW0ucGh5X2FkZHIpOworCisJCQlody0+dHhfcGt0X3Bvb2xbaV0uZGVzY19tZW0ucGRtYV9kZXNjX3N0YXJ0ID0gTlVMTDsKKwkJfQorCX0KKworCUJDTUxPRyhCQ01MT0dfREJHLCAiUmVsZWFzaW5nIFJYIFBrdCBwb29sXG4iKTsKKwlkbyB7CisJCXJwa3QgPSBjcnlzdGFsaGRfaHdfYWxsb2NfcnhfcGt0KGh3KTsKKwkJaWYgKCFycGt0KQorCQkJYnJlYWs7CisJCWJjX2tlcm5fZG1hX2ZyZWUoaHctPmFkcCwgcnBrdC0+ZGVzY19tZW0uc3osCisJCQkJIHJwa3QtPmRlc2NfbWVtLnBkbWFfZGVzY19zdGFydCwKKwkJCQkgcnBrdC0+ZGVzY19tZW0ucGh5X2FkZHIpOworCQlrZnJlZShycGt0KTsKKwl9IHdoaWxlIChycGt0KTsKKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworQkNfU1RBVFVTIGNyeXN0YWxoZF9od19wb3N0X3R4KHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LCBjcnlzdGFsaGRfZGlvX3JlcSAqaW9yZXEsCisJCQkgICAgIGh3X2NvbXBfY2FsbGJhY2sgY2FsbF9iYWNrLAorCQkJICAgICB3YWl0X3F1ZXVlX2hlYWRfdCAqY2JfZXZlbnQsIHVpbnQzMl90ICpsaXN0X2lkLAorCQkJICAgICB1aW50OF90IGRhdGFfZmxhZ3MpCit7CisJdHhfZG1hX3BrdCAqdHhfZG1hX3BhY2tldCA9IE5VTEw7CisJdWludDMyX3QgZmlyc3RfZGVzY191X2FkZHIsIGZpcnN0X2Rlc2NfbF9hZGRyOworCXVpbnQzMl90IGxvd19hZGRyLCBoaWdoX2FkZHI7CisJYWRkcl82NCBkZXNjX2FkZHI7CisJQkNfU1RBVFVTIHN0cywgYWRkX3N0czsKKwl1aW50MzJfdCBkdW1teV9pbmRleCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlib29sIHJjOworCisJaWYgKCFodyB8fCAhaW9yZXEgfHwgIWNhbGxfYmFjayB8fCAhY2JfZXZlbnQgfHwgIWxpc3RfaWQpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmd1bWVudHNcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJLyoKKwkgKiBTaW5jZSB3ZSBoaXQgY29kZSBpbiBidXN5IGNvbmRpdGlvbiB2ZXJ5IGZyZXF1ZW50bHksCisJICogd2Ugd2lsbCBjaGVjayB0aGUgY29kZSBpbiBzdGF0dXMgZmlyc3QgYmVmb3JlCisJICogY2hlY2tpbmcgdGhlIGF2YWlsYWJpbGl0eSBvZiBmcmVlIGVsZW0uCisJICoKKwkgKiBUaGlzIHdpbGwgYXZvaWQgdGhlIFEgZmV0Y2gvYWRkIGluIG5vcm1hbCBjb25kaXRpb24uCisJICovCisJcmMgPSBjcnlzdGFsaGRfY29kZV9pbl9mdWxsKGh3LT5hZHAsIGlvcmVxLT51aW5mby54ZnJfbGVuLAorCQkJCSAgZmFsc2UsIGRhdGFfZmxhZ3MpOworCWlmIChyYykgeworCQlody0+c3RhdHMuY2luX2J1c3krKzsKKwkJcmV0dXJuIEJDX1NUU19CVVNZOworCX0KKworCS8qIEdldCBhIGxpc3QgZnJvbSBUeEZyZWVRICovCisJdHhfZG1hX3BhY2tldCA9ICh0eF9kbWFfcGt0ICopY3J5c3RhbGhkX2Rpb3FfZmV0Y2goaHctPnR4X2ZyZWVxKTsKKwlpZiAoIXR4X2RtYV9wYWNrZXQpIHsKKwkJQkNNTE9HX0VSUigiTm8gZW1wdHkgZWxlbWVudHMuLlxuIik7CisJCXJldHVybiBCQ19TVFNfRVJSX1VTQUdFOworCX0KKworCXN0cyA9IGNyeXN0YWxoZF94bGF0X3NnbF90b19kbWFfZGVzYyhpb3JlcSwKKwkJCQkJICAgJnR4X2RtYV9wYWNrZXQtPmRlc2NfbWVtLAorCQkJCQkgICAmZHVtbXlfaW5kZXgpOworCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpIHsKKwkJYWRkX3N0cyA9IGNyeXN0YWxoZF9kaW9xX2FkZChody0+dHhfZnJlZXEsIHR4X2RtYV9wYWNrZXQsCisJCQkJCSAgIGZhbHNlLCAwKTsKKwkJaWYgKGFkZF9zdHMgIT0gQkNfU1RTX1NVQ0NFU1MpCisJCQlCQ01MT0dfRVJSKCJkb3VibGUgZmF1bHQuLlxuIik7CisKKwkJcmV0dXJuIHN0czsKKwl9CisKKwlody0+cHdyX2xvY2srKzsKKworCWRlc2NfYWRkci5mdWxsX2FkZHIgPSB0eF9kbWFfcGFja2V0LT5kZXNjX21lbS5waHlfYWRkcjsKKwlsb3dfYWRkciA9IGRlc2NfYWRkci5sb3dfcGFydDsKKwloaWdoX2FkZHIgPSBkZXNjX2FkZHIuaGlnaF9wYXJ0OworCisJdHhfZG1hX3BhY2tldC0+Y2FsbF9iYWNrID0gY2FsbF9iYWNrOworCXR4X2RtYV9wYWNrZXQtPmNiX2V2ZW50ICA9IGNiX2V2ZW50OworCXR4X2RtYV9wYWNrZXQtPmRpb19yZXEgICA9IGlvcmVxOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmh3LT5sb2NrLCBmbGFncyk7CisKKwlpZiAoaHctPnR4X2xpc3RfcG9zdF9pbmRleCA9PSAwKSB7CisJCWZpcnN0X2Rlc2NfdV9hZGRyID0gTUlTQzFfVFhfRklSU1RfREVTQ19VX0FERFJfTElTVDA7CisJCWZpcnN0X2Rlc2NfbF9hZGRyID0gTUlTQzFfVFhfRklSU1RfREVTQ19MX0FERFJfTElTVDA7CisJfSBlbHNlIHsKKwkJZmlyc3RfZGVzY191X2FkZHIgPSBNSVNDMV9UWF9GSVJTVF9ERVNDX1VfQUREUl9MSVNUMTsKKwkJZmlyc3RfZGVzY19sX2FkZHIgPSBNSVNDMV9UWF9GSVJTVF9ERVNDX0xfQUREUl9MSVNUMTsKKwl9CisKKwkqbGlzdF9pZCA9IHR4X2RtYV9wYWNrZXQtPmxpc3RfdGFnID0gaHctPnR4X2lvcV90YWdfc2VlZCArCisJCQkJCSAgICAgaHctPnR4X2xpc3RfcG9zdF9pbmRleDsKKworCWh3LT50eF9saXN0X3Bvc3RfaW5kZXggPSAoaHctPnR4X2xpc3RfcG9zdF9pbmRleCArIDEpICUgRE1BX0VOR0lORV9DTlQ7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZody0+bG9jaywgZmxhZ3MpOworCisKKwkvKiBJbnNlcnQgaW4gQWN0aXZlIFEuLiovCisJY3J5c3RhbGhkX2Rpb3FfYWRkKGh3LT50eF9hY3RxLCB0eF9kbWFfcGFja2V0LCBmYWxzZSwKKwkJCSB0eF9kbWFfcGFja2V0LT5saXN0X3RhZyk7CisKKwkvKgorCSAqIEludGVycnVwdCB3aWxsIGNvbWUgYXMgc29vbiBhcyB5b3Ugd3JpdGUKKwkgKiB0aGUgdmFsaWQgYml0LiBTbyBiZSByZWFkeSBmb3IgdGhhdC4gQWxsCisJICogdGhlIGluaXRpYWxpemF0aW9uIHNob3VsZCBoYXBwZW4gYmVmb3JlIHRoYXQuCisJICovCisJY3J5c3RhbGhkX3N0YXJ0X3R4X2RtYV9lbmdpbmUoaHcpOworCWNyeXN0YWxoZF9yZWdfd3IoaHctPmFkcCwgZmlyc3RfZGVzY191X2FkZHIsIGRlc2NfYWRkci5oaWdoX3BhcnQpOworCisJY3J5c3RhbGhkX3JlZ193cihody0+YWRwLCBmaXJzdF9kZXNjX2xfYWRkciwgZGVzY19hZGRyLmxvd19wYXJ0IHwgMHgwMSk7CisJCQkJCS8qIEJlIHN1cmUgd2Ugc2V0IHRoZSB2YWxpZCBiaXQgXl5eXiAqLworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCisvKgorICogVGhpcyBpcyBhIGZvcmNlIGNhbmNlbCBhbmQgd2UgYXJlIHJhY2luZyB3aXRoIElTUi4KKyAqCisgKiBXaWxsIHRyeSB0byByZW1vdmUgdGhlIHJlcSBmcm9tIEFjdFEgYmVmb3JlIElTUiBnZXRzIGl0LgorICogSWYgSVNSIGdldHMgaXQgZmlyc3QgdGhlbiB0aGUgY29tcGxldGlvbiBoYXBwZW5zIGluIHRoZQorICogbm9ybWFsIHBhdGggYW5kIHdlIHdpbGwgcmV0dXJuIF9TVFNfTk9fREFUQSBmcm9tIGhlcmUuCisgKgorICogRklYX01FOiBOb3QgVGVzdGVkIHRoZSBhY3R1YWwgY29uZGl0aW9uLi4KKyAqLworQkNfU1RBVFVTIGNyeXN0YWxoZF9od19jYW5jZWxfdHgoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcsIHVpbnQzMl90IGxpc3RfaWQpCit7CisJaWYgKCFodyB8fCAhbGlzdF9pZCkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZ3VtZW50c1xuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwljcnlzdGFsaGRfc3RvcF90eF9kbWFfZW5naW5lKGh3KTsKKwljcnlzdGFsaGRfaHdfdHhfcmVxX2NvbXBsZXRlKGh3LCBsaXN0X2lkLCBCQ19TVFNfSU9fVVNFUl9BQk9SVCk7CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKK0JDX1NUQVRVUyBjcnlzdGFsaGRfaHdfYWRkX2NhcF9idWZmZXIoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcsCisJCQkJICAgIGNyeXN0YWxoZF9kaW9fcmVxICppb3JlcSwgYm9vbCBlbl9wb3N0KQoreworCWNyeXN0YWxoZF9yeF9kbWFfcGt0ICpycGt0OworCXVpbnQzMl90IHRhZywgdXZfZGVzY19peCA9IDA7CisJQkNfU1RBVFVTIHN0czsKKworCWlmICghaHcgfHwgIWlvcmVxKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJndW1lbnRzXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCXJwa3QgPSBjcnlzdGFsaGRfaHdfYWxsb2NfcnhfcGt0KGh3KTsKKwlpZiAoIXJwa3QpIHsKKwkJQkNNTE9HX0VSUigiSW5zdWZmaWNpZW50IHJlc291cmNlc1xuIik7CisJCXJldHVybiBCQ19TVFNfSU5TVUZGX1JFUzsKKwl9CisKKwlycGt0LT5kaW9fcmVxID0gaW9yZXE7CisJdGFnID0gcnBrdC0+cGt0X3RhZzsKKworCXN0cyA9IGNyeXN0YWxoZF94bGF0X3NnbF90b19kbWFfZGVzYyhpb3JlcSwgJnJwa3QtPmRlc2NfbWVtLCAmdXZfZGVzY19peCk7CisJaWYgKHN0cyAhPSBCQ19TVFNfU1VDQ0VTUykKKwkJcmV0dXJuIHN0czsKKworCXJwa3QtPnV2X3BoeV9hZGRyID0gMDsKKworCS8qIFN0b3JlIHRoZSBhZGRyZXNzIG9mIFVWIGluIHRoZSByeCBwYWNrZXQgZm9yIHBvc3QqLworCWlmICh1dl9kZXNjX2l4KQorCQlycGt0LT51dl9waHlfYWRkciA9IHJwa3QtPmRlc2NfbWVtLnBoeV9hZGRyICsKKwkJCQkgICAgKHNpemVvZihkbWFfZGVzY3JpcHRvcikgKiAodXZfZGVzY19peCArIDEpKTsKKworCWlmIChlbl9wb3N0KQorCQlzdHMgPSBjcnlzdGFsaGRfaHdfcG9zdF9jYXBfYnVmZihodywgcnBrdCk7CisJZWxzZQorCQlzdHMgPSBjcnlzdGFsaGRfZGlvcV9hZGQoaHctPnJ4X2ZyZWVxLCBycGt0LCBmYWxzZSwgdGFnKTsKKworCXJldHVybiBzdHM7Cit9CisKK0JDX1NUQVRVUyBjcnlzdGFsaGRfaHdfZ2V0X2NhcF9idWZmZXIoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcsCisJCQkJICAgIEJDX1BJQ19JTkZPX0JMT0NLICpwaWIsCisJCQkJICAgIGNyeXN0YWxoZF9kaW9fcmVxICoqaW9yZXEpCit7CisJY3J5c3RhbGhkX3J4X2RtYV9wa3QgKnJwa3Q7CisJdWludDMyX3QgdGltZW91dCA9IEJDX1BST0NfT1VUUFVUX1RJTUVPVVQgLyAxMDAwOworCXVpbnQzMl90IHNpZ19wZW5kaW5nID0gMDsKKworCisJaWYgKCFodyB8fCAhaW9yZXEgfHwgIXBpYikgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZ3VtZW50c1xuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlycGt0ID0gY3J5c3RhbGhkX2Rpb3FfZmV0Y2hfd2FpdChody0+cnhfcmR5cSwgdGltZW91dCwgJnNpZ19wZW5kaW5nKTsKKwlpZiAoIXJwa3QpIHsKKwkJaWYgKHNpZ19wZW5kaW5nKSB7CisJCQlCQ01MT0coQkNNTE9HX0lORk8sICJ3YWl0IG9uIGZyYW1lIHRpbWUgb3V0ICVkXG4iLCBzaWdfcGVuZGluZyk7CisJCQlyZXR1cm4gQkNfU1RTX0lPX1VTRVJfQUJPUlQ7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gQkNfU1RTX1RJTUVPVVQ7CisJCX0KKwl9CisKKwlycGt0LT5kaW9fcmVxLT51aW5mby5jb21wX2ZsYWdzID0gcnBrdC0+ZmxhZ3M7CisKKwlpZiAocnBrdC0+ZmxhZ3MgJiBDT01QX0ZMQUdfUElCX1ZBTElEKQorCQltZW1jcHkocGliLCAmcnBrdC0+cGliLCBzaXplb2YoKnBpYikpOworCisJKmlvcmVxID0gcnBrdC0+ZGlvX3JlcTsKKworCWNyeXN0YWxoZF9od19mcmVlX3J4X3BrdChodywgcnBrdCk7CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKK0JDX1NUQVRVUyBjcnlzdGFsaGRfaHdfc3RhcnRfY2FwdHVyZShzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodykKK3sKKwljcnlzdGFsaGRfcnhfZG1hX3BrdCAqcnhfcGt0OworCUJDX1NUQVRVUyBzdHM7CisJdWludDMyX3QgaTsKKworCWlmICghaHcpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmd1bWVudHNcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJLyogVGhpcyBpcyBzdGFydCBvZiBjYXB0dXJlLi4gUG9zdCB0byBib3RoIHRoZSBsaXN0cy4uICovCisJZm9yIChpID0gMDsgaSA8IERNQV9FTkdJTkVfQ05UOyBpKyspIHsKKwkJcnhfcGt0ID0gY3J5c3RhbGhkX2Rpb3FfZmV0Y2goaHctPnJ4X2ZyZWVxKTsKKwkJaWYgKCFyeF9wa3QpCisJCQlyZXR1cm4gQkNfU1RTX05PX0RBVEE7CisJCXN0cyA9IGNyeXN0YWxoZF9od19wb3N0X2NhcF9idWZmKGh3LCByeF9wa3QpOworCQlpZiAoQkNfU1RTX1NVQ0NFU1MgIT0gc3RzKQorCQkJYnJlYWs7CisKKwl9CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKK0JDX1NUQVRVUyBjcnlzdGFsaGRfaHdfc3RvcF9jYXB0dXJlKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3KQoreworCXZvaWQgKnRlbXAgPSBOVUxMOworCisJaWYgKCFodykgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZ3VtZW50c1xuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwljcnlzdGFsaGRfc3RvcF9yeF9kbWFfZW5naW5lKGh3KTsKKworCWRvIHsKKwkJdGVtcCA9IGNyeXN0YWxoZF9kaW9xX2ZldGNoKGh3LT5yeF9mcmVlcSk7CisJCWlmICh0ZW1wKQorCQkJY3J5c3RhbGhkX3J4X3BrdF9yZWxfY2FsbF9iYWNrKGh3LCB0ZW1wKTsKKwl9IHdoaWxlICh0ZW1wKTsKKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworQkNfU1RBVFVTIGNyeXN0YWxoZF9od19wYXVzZShzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodykKK3sKKwlody0+c3RhdHMucGF1c2VfY250Kys7CisJaHctPnN0b3BfcGVuZGluZyA9IDE7CisKKwlpZiAoKGh3LT5yeF9saXN0X3N0c1swXSA9PSBzdHNfZnJlZSkgJiYKKwkgICAgKGh3LT5yeF9saXN0X3N0c1sxXSA9PSBzdHNfZnJlZSkpCisJCWNyeXN0YWxoZF9od19maW5hbGl6ZV9wYXVzZShodyk7CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKK0JDX1NUQVRVUyBjcnlzdGFsaGRfaHdfdW5wYXVzZShzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodykKK3sKKwlCQ19TVEFUVVMgc3RzOworCXVpbnQzMl90IGFzcG07CisKKwlody0+c3RvcF9wZW5kaW5nID0gMDsKKworCWFzcG0gPSBjcnlzdGFsaGRfcmVnX3JkKGh3LT5hZHAsIFBDSUVfRExMX0RBVEFfTElOS19DT05UUk9MKTsKKwlhc3BtICY9IH5BU1BNX0wxX0VOQUJMRTsKKy8qIE5BUkVOIEJDTUxPRyhCQ01MT0dfSU5GTywgImFzcG0gb2ZmXG4iKTsgKi8KKwljcnlzdGFsaGRfcmVnX3dyKGh3LT5hZHAsIFBDSUVfRExMX0RBVEFfTElOS19DT05UUk9MLCBhc3BtKTsKKworCXN0cyA9IGNyeXN0YWxoZF9od19zdGFydF9jYXB0dXJlKGh3KTsKKwlyZXR1cm4gc3RzOworfQorCitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X3N1c3BlbmQoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcpCit7CisJQkNfU1RBVFVTIHN0czsKKworCWlmICghaHcpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmd1bWVudHNcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJc3RzID0gY3J5c3RhbGhkX3B1dF9kZHIyc2xlZXAoaHcpOworCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpIHsKKwkJQkNNTE9HX0VSUigiRmFpbGVkIHRvIFB1dCBERFIgVG8gU2xlZXAhIVxuIik7CisJCXJldHVybiBCQ19TVFNfRVJST1I7CisJfQorCisJaWYgKCFjcnlzdGFsaGRfc3RvcF9kZXZpY2UoaHctPmFkcCkpIHsKKwkJQkNNTE9HX0VSUigiRmFpbGVkIHRvIFN0b3AgRGV2aWNlISFcbiIpOworCQlyZXR1cm4gQkNfU1RTX0VSUk9SOworCX0KKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKwordm9pZCBjcnlzdGFsaGRfaHdfc3RhdHMoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcsIHN0cnVjdCBjcnlzdGFsaGRfaHdfc3RhdHMgKnN0YXRzKQoreworCWlmICghaHcpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmd1bWVudHNcbiIpOworCQlyZXR1cm47CisJfQorCisJLyogaWYgY2FsbGVkIHcvTlVMTCBzdGF0cywgaXRzIGEgcmVxIHRvIHplcm8gb3V0IHRoZSBzdGF0cyAqLworCWlmICghc3RhdHMpIHsKKwkJbWVtc2V0KCZody0+c3RhdHMsIDAsIHNpemVvZihody0+c3RhdHMpKTsKKwkJcmV0dXJuOworCX0KKworCWh3LT5zdGF0cy5mcmVlcV9jb3VudCA9IGNyeXN0YWxoZF9kaW9xX2NvdW50KGh3LT5yeF9mcmVlcSk7CisJaHctPnN0YXRzLnJkeXFfY291bnQgID0gY3J5c3RhbGhkX2Rpb3FfY291bnQoaHctPnJ4X3JkeXEpOworCW1lbWNweShzdGF0cywgJmh3LT5zdGF0cywgc2l6ZW9mKCpzdGF0cykpOworfQorCitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X3NldF9jb3JlX2Nsb2NrKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3KQoreworCXVpbnQzMl90IHJlZywgbiwgaTsKKwl1aW50MzJfdCB2Y29fbWcsIHJlZnJlc2hfcmVnOworCisJaWYgKCFodykgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZ3VtZW50c1xuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwkvKiBGSVhNRTogamFyb2Q6IHdoYT8gKi8KKwkvKm4gPSAoaHctPmNvcmVfY2xvY2tfbWh6ICogMykgLyAyMCArIDE7ICovCisJbiA9IGh3LT5jb3JlX2Nsb2NrX21oei81OworCisJaWYgKG4gPT0gaHctPnByZXZfbikKKwkJcmV0dXJuIEJDX1NUU19DTEtfTk9DSEc7CisKKwlpZiAoaHctPnB3cl9sb2NrID4gMCkgeworCQkvKiBCQ01MT0coQkNNTE9HX0lORk8sInB3cl9sb2NrIGlzICV1XG4iLCBody0+cHdyX2xvY2spICovCisJCXJldHVybiBCQ19TVFNfQ0xLX05PQ0hHOworCX0KKworCWkgPSBuICogMjc7CisJaWYgKGkgPCA1NjApCisJCXZjb19tZyA9IDA7CisJZWxzZSBpZiAoaSA8IDkwMCkKKwkJdmNvX21nID0gMTsKKwllbHNlIGlmIChpIDwgMTAzMCkKKwkJdmNvX21nID0gMjsKKwllbHNlCisJCXZjb19tZyA9IDM7CisKKwlyZWcgPSBiY19kZWNfcmVnX3JkKGh3LT5hZHAsIERlY0h0X1BsbEFDdGwpOworCisJcmVnICY9IDB4RkZGRkNGQzA7CisJcmVnIHw9IG47CisJcmVnIHw9IHZjb19tZyA8PCAxMjsKKworCUJDTUxPRyhCQ01MT0dfSU5GTywgImNsb2NrIGlzIG1vdmluZyB0byAlZCB3aXRoIG4gJWQgd2l0aCB2Y29fbWcgJWRcbiIsCisJICAgICAgIGh3LT5jb3JlX2Nsb2NrX21oeiwgbiwgdmNvX21nKTsKKworCS8qIENoYW5nZSB0aGUgRFJBTSByZWZyZXNoIHJhdGUgdG8gYWNjb21vZGF0ZSB0aGUgbmV3IGZyZXF1ZW5jeSAqLworCS8qIHJlZnJlc2ggcmVnID0gKChyZWZyZXNoX3JhdGUgKiBjbG9ja19yYXRlKS8xNikgLSAxOyByb3VuZGluZyB1cCovCisJcmVmcmVzaF9yZWcgPSAoNyAqIGh3LT5jb3JlX2Nsb2NrX21oeiAvIDE2KTsKKwliY19kZWNfcmVnX3dyKGh3LT5hZHAsIFNEUkFNX1JFRl9QQVJBTSwgKCgxIDw8IDEyKSB8IHJlZnJlc2hfcmVnKSk7CisKKwliY19kZWNfcmVnX3dyKGh3LT5hZHAsIERlY0h0X1BsbEFDdGwsIHJlZyk7CisKKwlpID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCXJlZyA9IGJjX2RlY19yZWdfcmQoaHctPmFkcCwgRGVjSHRfUGxsQUN0bCk7CisKKwkJaWYgKHJlZyAmIDB4MDAwMjAwMDApIHsKKwkJCWh3LT5wcmV2X24gPSBuOworCQkJLyogRklYTUU6IGphcm9kOiBvdXRwdXR0aW5nIGEgcmFuZG9tICJDIiBpcy4uLiBjb25mdXNpbmcuLi4gKi8KKwkJCUJDTUxPRyhCQ01MT0dfSU5GTywgIkMiKTsKKwkJCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKKwkJfSBlbHNlIHsKKwkJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwKTsKKwkJfQorCX0KKwlCQ01MT0coQkNNTE9HX0lORk8sICJjbGsgY2hhbmdlIGZhaWxlZFxuIik7CisJcmV0dXJuIEJDX1NUU19DTEtfTk9DSEc7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9ody5oIGIvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfaHcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzYzMThlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfaHcuaApAQCAtMCwwICsxLDM5OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDksIEJyb2FkY29tIENvcnBvcmF0aW9uLgorICoKKyAqICBOYW1lOiBjcnlzdGFsaGRfaHcgLiBoCisgKgorICogIERlc2NyaXB0aW9uOgorICoJCUJDTTcwMDEyIExpbnV4IGRyaXZlciBoYXJkd2FyZSBsYXllci4KKyAqCisgKiAgSElTVE9SWToKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGNyeXN0YWxoZCBkZXZpY2UgZHJpdmVyLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBkcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgZHJpdmVyLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0NSWVNUQUxIRF9IV19IXworI2RlZmluZSBfQ1JZU1RBTEhEX0hXX0hfCisKKyNpbmNsdWRlICJjcnlzdGFsaGRfbWlzYy5oIgorI2luY2x1ZGUgImNyeXN0YWxoZF9md19pZi5oIgorCisvKiBIVyBjb25zdGFudHMuLiovCisjZGVmaW5lIERNQV9FTkdJTkVfQ05UCQkyCisjZGVmaW5lIE1BWF9QSUJfUV9ERVBUSAkJNjQKKyNkZWZpbmUgTUlOX1BJQl9RX0RFUFRICQkyCisjZGVmaW5lIFdSX1BPSU5URVJfT0ZGCQk0CisKKyNkZWZpbmUgQVNQTV9MMV9FTkFCTEUJCShCQ19CSVQoMjcpKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICA3NDEyIERlY29kZXIgIFJlZ2lzdGVycy4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBGV19DTURfQlVGRl9TWgkJNjQKKyNkZWZpbmUgVFNfSG9zdDJDcHVTbmQJCTB4MDAwMDAxMDAKKyNkZWZpbmUgSHN0MkNwdU1ieDEJCTB4MDAxMDBGMDAKKyNkZWZpbmUgQ3B1MkhzdE1ieDEJCTB4MDAxMDBGMDQKKyNkZWZpbmUgTWJ4U3RhdDEJCTB4MDAxMDBGMDgKKyNkZWZpbmUgU3RyZWFtMkhvc3RfSW50cl9TdHMJMHgwMDEwMEYyNAorI2RlZmluZSBDMDExX1JFVF9TVUNDRVNTCTB4MAkvKiBSZXV0cm4gc3RhdHVzIG9mIGZpcm13YXJlIGNvbW1hbmQuICovCisKKy8qIFRTIGlucHV0IHN0YXR1cyByZWdpc3RlciAqLworI2RlZmluZSBUU19TdHJlYW1BRklGT1N0YXR1cwkweDAwMTAwNDRDCisjZGVmaW5lIFRTX1N0cmVhbUJGSUZPU3RhdHVzCTB4MDAxMDA4NEMKKworLypVQVJUIFNlbGVjdGlvbiBkZWZpbml0aW9ucyovCisjZGVmaW5lIFVhcnRTZWxlY3RBCQkweDAwMTAwMzAwCisjZGVmaW5lIFVhcnRTZWxlY3RCCQkweDAwMTAwMzA0CisKKyNkZWZpbmUgQlNWU19VQVJUX0RFQ19OT05FCTB4MDAKKyNkZWZpbmUgQlNWU19VQVJUX0RFQ19PVVRFUgkweDAxCisjZGVmaW5lIEJTVlNfVUFSVF9ERUNfSU5ORVIJMHgwMgorI2RlZmluZSBCU1ZTX1VBUlRfU1RSRUFNCTB4MDMKKworLyogQ29kZS1JbiBmaWZvICovCisjZGVmaW5lIFJFR19EZWNDQV9SZWdDaW5DVEwJMHhhMDAKKyNkZWZpbmUgUkVHX0RlY0NBX1JlZ0NpbkJhc2UJMHhhMGMKKyNkZWZpbmUgUkVHX0RlY0NBX1JlZ0NpbkVuZAkweGExMAorI2RlZmluZSBSRUdfRGVjQ0FfUmVnQ2luV3JQdHIJMHhhMDQKKyNkZWZpbmUgUkVHX0RlY0NBX1JlZ0NpblJkUHRyCTB4YTA4CisKKyNkZWZpbmUgUkVHX0RlY19Uc1VzZXIwQmFzZQkweDEwMDg2NAorI2RlZmluZSBSRUdfRGVjX1RzVXNlcjBSZHB0cgkweDEwMDg2OAorI2RlZmluZSBSRUdfRGVjX1RzVXNlcjBXcnB0cgkweDEwMDg2QworI2RlZmluZSBSRUdfRGVjX1RzVXNlcjBFbmQJMHgxMDA4NzQKKworLyogQVNGIENhc2UgLi4uKi8KKyNkZWZpbmUgUkVHX0RlY19Uc0F1ZENEQjJCYXNlCTB4MTAwMzZjCisjZGVmaW5lIFJFR19EZWNfVHNBdWRDREIyUmRwdHIgIDB4MTAwMzc4CisjZGVmaW5lIFJFR19EZWNfVHNBdWRDREIyV3JwdHIgIDB4MTAwMzc0CisjZGVmaW5lIFJFR19EZWNfVHNBdWRDREIyRW5kCTB4MTAwMzcwCisKKy8qIERSQU0gYnJpbmd1cCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgU0RSQU1fUEFSQU0JCTB4MDAwNDA4MDQKKyNkZWZpbmUgU0RSQU1fUFJFQ0hBUkdFCQkweDAwMDQwOEIwCisjZGVmaW5lIFNEUkFNX0VYVF9NT0RFCQkweDAwMDQwOEE0CisjZGVmaW5lIFNEUkFNX01PREUJCTB4MDAwNDA4QTAKKyNkZWZpbmUgU0RSQU1fUkVGUkVTSAkJMHgwMDA0MDg5MAorI2RlZmluZSBTRFJBTV9SRUZfUEFSQU0JCTB4MDAwNDA4MDgKKworI2RlZmluZSBEZWNIdF9QbGxBQ3RsCQkweDM0MDAwQworI2RlZmluZSBEZWNIdF9QbGxCQ3RsCQkweDM0MDAxMAorI2RlZmluZSBEZWNIdF9QbGxDQ3RsCQkweDM0MDAxNAorI2RlZmluZSBEZWNIdF9QbGxEQ3RsCQkweDM0MDAzNAorI2RlZmluZSBEZWNIdF9QbGxFQ3RsCQkweDM0MDAzOAorI2RlZmluZSBBVURfRFNQX01JU0NfU09GVF9SRVNFVAkweDAwMjQwMTA0CisjZGVmaW5lIEFJT19NSVNDX1BMTF9SRVNFVAkweDAwMjYwMDBDCisjZGVmaW5lIFBDSUVfQ0xLX1JFUV9SRUcJMHhEQworI2RlZmluZQlQQ0lfQ0xLX1JFUV9FTkFCTEUJKEJDX0JJVCg4KSkKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgRi9XIENvcHkgZW5naW5lIGRlZmluaXRpb25zLi4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBCQ19GV0lNR19TVF9BRERSCTB4MDAwMDAwMDAKKy8qIEZJWE1FOiBqYXJvZDogdGhlcmUncyBhIGtlcm5lbCBmdW5jdGlvbiB0aGF0J2xsIGRvIHRoaXMgZm9yIHVzLi4uICovCisjZGVmaW5lIHJvdHIzMl8xKHgsIG4pCQkoKCh4KSA+PiBuKSB8ICgoeCkgPDwgKDMyIC0gbikpKQorI2RlZmluZSBic3dhcF8zMl8xKHgpCQkoKHJvdHIzMl8xKCh4KSwgMjQpICYgMHgwMGZmMDBmZikgfCAocm90cjMyXzEoKHgpLCA4KSAmIDB4ZmYwMGZmMDApKQorCisjZGVmaW5lIERlY0h0X0hvc3RTd1Jlc2V0CTB4MzQwMDAwCisjZGVmaW5lIEJDX0RSQU1fRldfQ0ZHX0FERFIJMHgwMDFjMjAwMAorCit0eXBlZGVmIHVuaW9uIF9hZGRyXzY0XyB7CisJc3RydWN0IHsKKwkJdWludDMyX3QJbG93X3BhcnQ7CisJCXVpbnQzMl90CWhpZ2hfcGFydDsKKwl9OworCisJdWludDY0X3QJZnVsbF9hZGRyOworCit9IGFkZHJfNjQ7CisKK3R5cGVkZWYgdW5pb24gX2ludHJfbWFza19yZWdfIHsKKwlzdHJ1Y3QgeworCQl1aW50MzJfdAltYXNrX3R4X2RvbmU6MTsKKwkJdWludDMyX3QJbWFza190eF9lcnI6MTsKKwkJdWludDMyX3QJbWFza19yeF9kb25lOjE7CisJCXVpbnQzMl90CW1hc2tfcnhfZXJyOjE7CisJCXVpbnQzMl90CW1hc2tfcGNpZV9lcnI6MTsKKwkJdWludDMyX3QJbWFza19wY2llX3JidXNtYXN0X2VycjoxOworCQl1aW50MzJfdAltYXNrX3BjaWVfcmdyX2JyaWRnZToxOworCQl1aW50MzJfdAlyZXNlcnZlZDoyNTsKKwl9OworCisJdWludDMyX3QJd2hvbGVfcmVnOworCit9IGludHJfbWFza19yZWc7CisKK3R5cGVkZWYgdW5pb24gX2xpbmtfbWlzY19wZXJzdF9kZWNvX2N0cmxfIHsKKwlzdHJ1Y3QgeworCQl1aW50MzJfdAliY203NDEyX3JzdDoxOwkJLyogMSAtPiBCQ003NDEyIGlzIGhlbGQgaW4gcmVzZXQuIFJlc2V0IHZhbHVlIDEuKi8KKwkJdWludDMyX3QJcmVzZXJ2ZWQwOjM7CQkvKiBSZXNlcnZlZC5ObyBFZmZlY3QqLworCQl1aW50MzJfdAlzdG9wX2JjbV83NDEyX2NsazoxOwkvKiAxIC0+U3RvcHMgYnJhbmNoIG9mIDI3TUh6IGNsayB1c2VkIHRvIGNsayBCQ003NDEyKi8KKwkJdWludDMyX3QJcmVzZXJ2ZWQxOjI3OwkJLyogUmVzZXZlZC4gTm8gRWZmZWN0Ki8KKwl9OworCisJdWludDMyX3QJd2hvbGVfcmVnOworCit9IGxpbmtfbWlzY19wZXJzdF9kZWNvX2N0cmw7CisKK3R5cGVkZWYgdW5pb24gX2xpbmtfbWlzY19wZXJzdF9jbGtfY3RybF8geworCXN0cnVjdCB7CisJCXVpbnQzMl90CXNlbF9hbHRfY2xrOjE7CSAgLyogV2hlbiBzZXQsIHNlbGVjdHMgYSA2Ljc1TUh6IGNsb2NrIGFzIHRoZSBzb3VyY2Ugb2YgY29yZV9jbGsgKi8KKwkJdWludDMyX3QJc3RvcF9jb3JlX2NsazoxOyAgLyogV2hlbiBzZXQsIHN0b3BzIHRoZSBicmFuY2ggb2YgY29yZV9jbGsgdGhhdCBpcyBub3QgbmVlZGVkIGZvciBsb3cgcG93ZXIgb3BlcmF0aW9uICovCisJCXVpbnQzMl90CXBsbF9wd3JfZG46MTsJICAvKiBXaGVuIHNldCwgcG93ZXJzIGRvd24gdGhlIG1haW4gUExMLiBUaGUgYWx0ZXJuYXRlIGNsb2NrIGJpdCBzaG91bGQgYmUgc2V0CisJCQkJCQkgICAgIHRvIHNlbGVjdCBhbiBhbHRlcm5hdGUgY2xvY2sgYmVmb3JlIHNldHRpbmcgdGhpcyBiaXQuKi8KKwkJdWludDMyX3QJcmVzZXJ2ZWQwOjU7CSAgLyogUmVzZXJ2ZWQgKi8KKwkJdWludDMyX3QJcGxsX211bHQ6ODsJICAvKiBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIG11bHRpcGxpZXIgZm9yIHRoZSBQTEwuICovCisJCXVpbnQzMl90CXBsbF9kaXY6NDsJICAvKiBUaGlzIHNldHRpbmcgY29udHJvbHMgdGhlIGRpdmlkZXIgZm9yIHRoZSBQTEwuICovCisJCXVpbnQzMl90CXJlc2VydmVkMToxMjsJICAvKiBSZXNlcnZlZCAqLworCX07CisKKwl1aW50MzJfdAl3aG9sZV9yZWc7CisKK30gbGlua19taXNjX3BlcnN0X2Nsa19jdHJsOworCisKK3R5cGVkZWYgdW5pb24gX2xpbmtfbWlzY19wZXJzdF9kZWNvZGVyX2N0cmxfIHsKKwlzdHJ1Y3QgeworCQl1aW50MzJfdAliY21fNzQxMl9yc3Q6MTsgLyogMSAtPiBCQ003NDEyIGlzIGhlbGQgaW4gcmVzZXQuIFJlc2V0IHZhbHVlIDEuKi8KKwkJdWludDMyX3QJcmVzMDozOyAvKiBSZXNlcnZlZC5ObyBFZmZlY3QqLworCQl1aW50MzJfdAlzdG9wXzc0MTJfY2xrOjE7IC8qIDEgLT5TdG9wcyBicmFuY2ggb2YgMjdNSHogY2xrIHVzZWQgdG8gY2xrIEJDTTc0MTIqLworCQl1aW50MzJfdAlyZXMxOjI3OyAvKiBSZXNldmVkLiBObyBFZmZlY3QgKi8KKwl9OworCisJdWludDMyX3QJd2hvbGVfcmVnOworCit9IGxpbmtfbWlzY19wZXJzdF9kZWNvZGVyX2N0cmw7CisKKwordHlwZWRlZiB1bmlvbiBfZGVzY19sb3dfYWRkcl9yZWdfIHsKKwlzdHJ1Y3QgeworCQl1aW50MzJfdAlsaXN0X3ZhbGlkOjE7CisJCXVpbnQzMl90CXJlc2VydmVkOjQ7CisJCXVpbnQzMl90CWxvd19hZGRyOjI3OworCX07CisKKwl1aW50MzJfdAl3aG9sZV9yZWc7CisKK30gZGVzY19sb3dfYWRkcl9yZWc7CisKK3R5cGVkZWYgc3RydWN0IF9kbWFfZGVzY3JpcHRvcl8gewkvKiA4IDMyLWJpdCB2YWx1ZXMgKi8KKwkvKiAwdGggdTMyICovCisJdWludDMyX3Qgc2RyYW1fYnVmZl9hZGRyOjI4OwkvKiBiaXRzIDAtMjc6ICBTRFJBTSBBZGRyZXNzICovCisJdWludDMyX3QgcmVzMDo0OwkJLyogYml0cyAyOC0zMTogUmVzZXJ2ZWQgKi8KKworCS8qIDFzdCB1MzIgKi8KKwl1aW50MzJfdCBidWZmX2FkZHJfbG93OwkJLyogMSBidWZmZXIgYWRkcmVzcyBsb3cgKi8KKwl1aW50MzJfdCBidWZmX2FkZHJfaGlnaDsJLyogMiBidWZmZXIgYWRkcmVzcyBoaWdoICovCisKKwkvKiAzcmQgdTMyICovCisJdWludDMyX3QgcmVzMjoyOwkJLyogMC0xIC0gUmVzZXJ2ZWQgKi8KKwl1aW50MzJfdCB4ZmVyX3NpemU6MjM7CQkvKiAyLTI0ID0gWGZlciBzaXplIGluIHdvcmRzICovCisJdWludDMyX3QgcmVzMzo2OwkJLyogMjUtMzAgcmVzZXJ2ZWQgKi8KKwl1aW50MzJfdCBpbnRyX2VuYWJsZToxOwkJLyogMzEgLSBJbnRlcnJ1cHQgQWZ0ZXIgdGhpcyBkZXNjICovCisKKwkvKiA0dGggdTMyICovCisJdWludDMyX3QgZW5kaWFuX3hsYXRfYWxpZ246MjsJLyogMC0xIEVuZGlhbiBUcmFuc2xhdGlvbiAqLworCXVpbnQzMl90IG5leHRfZGVzY19jb250OjE7CS8qIDIgLSBOZXh0IGRlc2MgaXMgaW4gY29udGlnIG1lbW9yeSAqLworCXVpbnQzMl90IHJlczQ6MjU7CQkvKiAzIC0gMjcgUmVzZXJ2ZWQgYml0cyAqLworCXVpbnQzMl90IGZpbGxfYnl0ZXM6MjsJCS8qIDI4LTI5IEJpdHMgRmlsbCBCeXRlcyAqLworCXVpbnQzMl90IGRtYV9kaXI6MTsJCS8qIDMwIGJpdCBETUEgRGlyZWN0aW9uICovCisJdWludDMyX3QgbGFzdF9yZWNfaW5kaWNhdG9yOjE7CS8qIDMxIGJpdCBMYXN0IFJlY29yZCBJbmRpY2F0b3IgKi8KKworCS8qIDV0aCB1MzIgKi8KKwl1aW50MzJfdCBuZXh0X2Rlc2NfYWRkcl9sb3c7CS8qIDMyLWJpdHMgTmV4dCBEZXNjIEFkZHIgbG93ZXIgKi8KKworCS8qIDZ0aCB1MzIgKi8KKwl1aW50MzJfdCBuZXh0X2Rlc2NfYWRkcl9oaWdoOwkvKiAzMi1iaXRzIE5leHQgRGVzYyBBZGRyIEhpZ2hlciAqLworCisJLyogN3RoIHUzMiAqLworCXVpbnQzMl90IHJlczg7CQkJLyogTGFzdCAzMmJpdHMgcmVzZXJ2ZWQgKi8KKworfSBkbWFfZGVzY3JpcHRvciwgKnBkbWFfZGVzY3JpcHRvcjsKKworLyoKKyAqIFdlIHdpbGwgYWxsb2NhdGUgdGhlIG1lbW9yeSBpbiA0SyBwYWdlcworICogdGhlIGxpbmtlZCBsaXN0IHdpbGwgYmUgYSBsaXN0IG9mIDMyIGJ5dGUgZGVzY3JpcHRvcnMuCisgKiBUaGUgIHZpcnR1YWwgYWRkcmVzcyB3aWxsIGRldGVybWluZSB3aGF0IHNob3VsZCBiZSBmcmVlZC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgX2RtYV9kZXNjX21lbV8geworCXBkbWFfZGVzY3JpcHRvcgkJcGRtYV9kZXNjX3N0YXJ0OyAvKiAzMi1ieXRlcyBmb3IgZG1hIGRlc2NyaXB0b3IuIHNob3VsZCBiZSBmaXJzdCBlbGVtZW50ICovCisJZG1hX2FkZHJfdAkJcGh5X2FkZHI7CS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZWFjaCBETUEgZGVzYyAqLworCXVpbnQzMl90CQlzejsKKwlzdHJ1Y3QgX2RtYV9kZXNjX21lbV8JKk5leHQ7CQkvKiBwb2ludHMgdG8gTmV4dCBEZXNjcmlwdG9yIGluIGNoYWluICovCisKK30gZG1hX2Rlc2NfbWVtLCAqcGRtYV9kZXNjX21lbTsKKworCisKK3R5cGVkZWYgZW51bSBfbGlzdF9zdHNfIHsKKwlzdHNfZnJlZSA9IDAsCisKKwkvKiBSWC1ZIEJpdHMgMDo3ICovCisJcnhfd2FpdGluZ195X2ludHIJPSAweDAwMDAwMDAxLAorCXJ4X3lfZXJyb3IJCT0gMHgwMDAwMDAwNCwKKworCS8qIFJYLVVWIEJpdHMgODoxNiAqLworCXJ4X3dhaXRpbmdfdXZfaW50cgk9IDB4MDAwMDEwMCwKKwlyeF91dl9lcnJvcgkJPSAweDAwMDA0MDAsCisKKwlyeF9zdHNfd2FpdGluZwkJPSAocnhfd2FpdGluZ195X2ludHJ8cnhfd2FpdGluZ191dl9pbnRyKSwKKwlyeF9zdHNfZXJyb3IJCT0gKHJ4X3lfZXJyb3J8cnhfdXZfZXJyb3IpLAorCisJcnhfeV9tYXNrCQk9IDB4MDAwMDAwRkYsCisJcnhfdXZfbWFzawkJPSAweDAwMDBGRjAwLAorCit9IGxpc3Rfc3RzOworCit0eXBlZGVmIHN0cnVjdCBfdHhfZG1hX3BrdF8geworCWRtYV9kZXNjX21lbQkJZGVzY19tZW07CisJaHdfY29tcF9jYWxsYmFjawljYWxsX2JhY2s7CisJY3J5c3RhbGhkX2Rpb19yZXEJCSpkaW9fcmVxOworCXdhaXRfcXVldWVfaGVhZF90CSpjYl9ldmVudDsKKwl1aW50MzJfdAkJbGlzdF90YWc7CisKK30gdHhfZG1hX3BrdDsKKwordHlwZWRlZiBzdHJ1Y3QgX2NyeXN0YWxoZF9yeF9kbWFfcGt0IHsKKwlkbWFfZGVzY19tZW0JCQlkZXNjX21lbTsKKwljcnlzdGFsaGRfZGlvX3JlcQkJCSpkaW9fcmVxOworCXVpbnQzMl90CQkJcGt0X3RhZzsKKwl1aW50MzJfdAkJCWZsYWdzOworCUJDX1BJQ19JTkZPX0JMT0NLCQlwaWI7CisJZG1hX2FkZHJfdAkJCXV2X3BoeV9hZGRyOworCXN0cnVjdCAgX2NyeXN0YWxoZF9yeF9kbWFfcGt0CSpuZXh0OworCit9IGNyeXN0YWxoZF9yeF9kbWFfcGt0OworCitzdHJ1Y3QgY3J5c3RhbGhkX2h3X3N0YXRzeworCXVpbnQzMl90CXJ4X2Vycm9yczsKKwl1aW50MzJfdAl0eF9lcnJvcnM7CisJdWludDMyX3QJZnJlZXFfY291bnQ7CisJdWludDMyX3QJcmR5cV9jb3VudDsKKwl1aW50MzJfdAludW1faW50ZXJydXB0czsKKwl1aW50MzJfdAlkZXZfaW50ZXJydXB0czsKKwl1aW50MzJfdAljaW5fYnVzeTsKKwl1aW50MzJfdAlwYXVzZV9jbnQ7Cit9OworCitzdHJ1Y3QgY3J5c3RhbGhkX2h3IHsKKwl0eF9kbWFfcGt0CQl0eF9wa3RfcG9vbFtETUFfRU5HSU5FX0NOVF07CisJc3BpbmxvY2tfdAkJbG9jazsKKworCXVpbnQzMl90CQl0eF9pb3FfdGFnX3NlZWQ7CisJdWludDMyX3QJCXR4X2xpc3RfcG9zdF9pbmRleDsKKworCWNyeXN0YWxoZF9yeF9kbWFfcGt0CSpyeF9wa3RfcG9vbF9oZWFkOworCXVpbnQzMl90CQlyeF9wa3RfdGFnX3NlZWQ7CisKKwlib29sCQkJZGV2X3N0YXJ0ZWQ7CisJdm9pZAkJCSphZHA7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdAkqcGZ3X2NtZF9ldmVudDsKKwlpbnQJCQlmd2NtZF9ldnRfc3RzOworCisJdWludDMyX3QJCXBpYl9kZWxfUV9hZGRyOworCXVpbnQzMl90CQlwaWJfcmVsX1FfYWRkcjsKKworCWNyeXN0YWxoZF9kaW9xX3QJCSp0eF9mcmVlcTsKKwljcnlzdGFsaGRfZGlvcV90CQkqdHhfYWN0cTsKKworCS8qIFJ4IERNQSBFbmdpbmUgU3BlY2lmaWMgTG9ja3MgKi8KKwlzcGlubG9ja190CQlyeF9sb2NrOworCXVpbnQzMl90CQlyeF9saXN0X3Bvc3RfaW5kZXg7CisJbGlzdF9zdHMJCXJ4X2xpc3Rfc3RzW0RNQV9FTkdJTkVfQ05UXTsKKwljcnlzdGFsaGRfZGlvcV90CQkqcnhfcmR5cTsKKwljcnlzdGFsaGRfZGlvcV90CQkqcnhfZnJlZXE7CisJY3J5c3RhbGhkX2Rpb3FfdAkJKnJ4X2FjdHE7CisJdWludDMyX3QJCXN0b3BfcGVuZGluZzsKKworCS8qIEhXIGNvdW50ZXJzLi4gKi8KKwlzdHJ1Y3QgY3J5c3RhbGhkX2h3X3N0YXRzCXN0YXRzOworCisJLyogQ29yZSBjbG9jayBpbiBNSHogKi8KKwl1aW50MzJfdAkJY29yZV9jbG9ja19taHo7CisJdWludDMyX3QJCXByZXZfbjsKKwl1aW50MzJfdAkJcHdyX2xvY2s7Cit9OworCisvKiBDbG9jayBkZWZpbmVzIGZvciBwb3dlciBjb250cm9sICovCisjZGVmaW5lIENMT0NLX1BSRVNFVCAxNzUKKworLyogRE1BIGVuZ2luZSByZWdpc3RlciBCSVQgbWFzayB3cmFwcGVycy4uICovCisjZGVmaW5lIERNQV9TVEFSVF9CSVQJCU1JU0MxX1RYX1NXX0RFU0NfTElTVF9DVFJMX1NUU19UWF9ETUFfUlVOX1NUT1BfTUFTSworCisjZGVmaW5lIEdFVF9SWF9JTlRSX01BU0sgKElOVFJfSU5UUl9TVEFUVVNfTDFfVVZfUlhfRE1BX0VSUl9JTlRSX01BU0sgfAkJXAorCQkJICBJTlRSX0lOVFJfU1RBVFVTX0wxX1VWX1JYX0RNQV9ET05FX0lOVFJfTUFTSyB8CVwKKwkJCSAgSU5UUl9JTlRSX1NUQVRVU19MMV9ZX1JYX0RNQV9FUlJfSU5UUl9NQVNLIHwJCVwKKwkJCSAgSU5UUl9JTlRSX1NUQVRVU19MMV9ZX1JYX0RNQV9ET05FX0lOVFJfTUFTSyB8CQlcCisJCQkgIElOVFJfSU5UUl9TVEFUVVNfTDBfVVZfUlhfRE1BX0VSUl9JTlRSX01BU0sgfAkJXAorCQkJICBJTlRSX0lOVFJfU1RBVFVTX0wwX1VWX1JYX0RNQV9ET05FX0lOVFJfTUFTSyB8CVwKKwkJCSAgSU5UUl9JTlRSX1NUQVRVU19MMF9ZX1JYX0RNQV9FUlJfSU5UUl9NQVNLIHwJCVwKKwkJCSAgSU5UUl9JTlRSX1NUQVRVU19MMF9ZX1JYX0RNQV9ET05FX0lOVFJfTUFTSykKKworI2RlZmluZSBHRVRfWTBfRVJSX01TSyAoTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfT1ZFUlJVTl9FUlJPUl9NQVNLIHwJCVwKKwkJCU1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wwX1VOREVSUlVOX0VSUk9SX01BU0sgfAkJXAorCQkJTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfREVTQ19UWF9BQk9SVF9FUlJPUlNfTUFTSyB8CVwKKwkJCU1JU0MxX1lfUlhfRVJST1JfU1RBVFVTX1JYX0wwX0ZJRk9fRlVMTF9FUlJPUlNfTUFTSykKKworI2RlZmluZSBHRVRfVVYwX0VSUl9NU0sgKE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9PVkVSUlVOX0VSUk9SX01BU0sgfAkJXAorCQkJIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMF9VTkRFUlJVTl9FUlJPUl9NQVNLIHwJCVwKKwkJCSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfREVTQ19UWF9BQk9SVF9FUlJPUlNfTUFTSyB8CVwKKwkJCSBNSVNDMV9VVl9SWF9FUlJPUl9TVEFUVVNfUlhfTDBfRklGT19GVUxMX0VSUk9SU19NQVNLKQorCisjZGVmaW5lIEdFVF9ZMV9FUlJfTVNLIChNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9PVkVSUlVOX0VSUk9SX01BU0sgfAkJXAorCQkJTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfVU5ERVJSVU5fRVJST1JfTUFTSyB8CQlcCisJCQlNSVNDMV9ZX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9ERVNDX1RYX0FCT1JUX0VSUk9SU19NQVNLIHwJXAorCQkJTUlTQzFfWV9SWF9FUlJPUl9TVEFUVVNfUlhfTDFfRklGT19GVUxMX0VSUk9SU19NQVNLKQorCisjZGVmaW5lIEdFVF9VVjFfRVJSX01TSwkoTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wxX09WRVJSVU5fRVJST1JfTUFTSyB8CQlcCisJCQkgTUlTQzFfVVZfUlhfRVJST1JfU1RBVFVTX1JYX0wxX1VOREVSUlVOX0VSUk9SX01BU0sgfAkJXAorCQkJIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9ERVNDX1RYX0FCT1JUX0VSUk9SU19NQVNLIHwJXAorCQkJIE1JU0MxX1VWX1JYX0VSUk9SX1NUQVRVU19SWF9MMV9GSUZPX0ZVTExfRVJST1JTX01BU0spCisKKworLyoqKiogQVBJIEV4cG9zZWQgdG8gdGhlIG90aGVyIGxheWVycyAqKioqLworQkNfU1RBVFVTIGNyeXN0YWxoZF9kb3dubG9hZF9mdyhzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLAorCQkJICAgICAgdm9pZCAqYnVmZmVyLCB1aW50MzJfdCBzeik7CitCQ19TVEFUVVMgY3J5c3RhbGhkX2RvX2Z3X2NtZChzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodywgQkNfRldfQ01EICpmd19jbWQpOworYm9vbCBjcnlzdGFsaGRfaHdfaW50ZXJydXB0KHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3KTsKK0JDX1NUQVRVUyBjcnlzdGFsaGRfaHdfb3BlbihzdHJ1Y3QgY3J5c3RhbGhkX2h3ICosIHN0cnVjdCBjcnlzdGFsaGRfYWRwICopOworQkNfU1RBVFVTIGNyeXN0YWxoZF9od19jbG9zZShzdHJ1Y3QgY3J5c3RhbGhkX2h3ICopOworQkNfU1RBVFVTIGNyeXN0YWxoZF9od19zZXR1cF9kbWFfcmluZ3Moc3RydWN0IGNyeXN0YWxoZF9odyAqKTsKK0JDX1NUQVRVUyBjcnlzdGFsaGRfaHdfZnJlZV9kbWFfcmluZ3Moc3RydWN0IGNyeXN0YWxoZF9odyAqKTsKKworCitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X3Bvc3RfdHgoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcsIGNyeXN0YWxoZF9kaW9fcmVxICppb3JlcSwKKwkJCSAgICAgaHdfY29tcF9jYWxsYmFjayBjYWxsX2JhY2ssCisJCQkgICAgIHdhaXRfcXVldWVfaGVhZF90ICpjYl9ldmVudCwKKwkJCSAgICAgdWludDMyX3QgKmxpc3RfaWQsIHVpbnQ4X3QgZGF0YV9mbGFncyk7CisKK0JDX1NUQVRVUyBjcnlzdGFsaGRfaHdfcGF1c2Uoc3RydWN0IGNyeXN0YWxoZF9odyAqaHcpOworQkNfU1RBVFVTIGNyeXN0YWxoZF9od191bnBhdXNlKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3KTsKK0JDX1NUQVRVUyBjcnlzdGFsaGRfaHdfc3VzcGVuZChzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodyk7CitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X2NhbmNlbF90eChzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodywgdWludDMyX3QgbGlzdF9pZCk7CitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X2FkZF9jYXBfYnVmZmVyKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LAorCQkJCSAgICBjcnlzdGFsaGRfZGlvX3JlcSAqaW9yZXEsIGJvb2wgZW5fcG9zdCk7CitCQ19TVEFUVVMgY3J5c3RhbGhkX2h3X2dldF9jYXBfYnVmZmVyKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3LAorCQkJCSAgICBCQ19QSUNfSU5GT19CTE9DSyAqcGliLAorCQkJCSAgICBjcnlzdGFsaGRfZGlvX3JlcSAqKmlvcmVxKTsKK0JDX1NUQVRVUyBjcnlzdGFsaGRfaHdfc3RvcF9jYXB0dXJlKHN0cnVjdCBjcnlzdGFsaGRfaHcgKmh3KTsKK0JDX1NUQVRVUyBjcnlzdGFsaGRfaHdfc3RhcnRfY2FwdHVyZShzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodyk7Cit2b2lkIGNyeXN0YWxoZF9od19zdGF0cyhzdHJ1Y3QgY3J5c3RhbGhkX2h3ICpodywgc3RydWN0IGNyeXN0YWxoZF9od19zdGF0cyAqc3RhdHMpOworCisvKiBBUEkgdG8gcHJvZ3JhbSB0aGUgY29yZSBjbG9jayBvbiB0aGUgZGVjb2RlciAqLworQkNfU1RBVFVTIGNyeXN0YWxoZF9od19zZXRfY29yZV9jbG9jayhzdHJ1Y3QgY3J5c3RhbGhkX2h3ICopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2xueC5jIGIvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfbG54LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VhYzcwYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX2xueC5jCkBAIC0wLDAgKzEsNzY1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgIEJDTTcwMDEwIExpbnV4IGRyaXZlcgorICBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOSwgQnJvYWRjb20gQ29ycG9yYXRpb24uCisKKyAgVGhpcyBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisKKyAgVGhpcyBkcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgIGFsb25nIHdpdGggdGhpcyBkcml2ZXIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisKKyNpbmNsdWRlICJjcnlzdGFsaGRfbG54LmgiCisKK3N0YXRpYyBzdHJ1Y3QgY2xhc3MgKmNyeXN0YWxoZF9jbGFzczsKKworc3RhdGljIHN0cnVjdCBjcnlzdGFsaGRfYWRwICpnX2FkcF9pbmZvOworCitzdGF0aWMgaXJxcmV0dXJuX3QgY2hkX2RlY19pc3IoaW50IGlycSwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAgPSAoc3RydWN0IGNyeXN0YWxoZF9hZHAgKikgYXJnOworCWludCByYyA9IDA7CisJaWYgKGFkcCkKKwkJcmMgPSBjcnlzdGFsaGRfY21kX2ludGVycnVwdCgmYWRwLT5jbWRzKTsKKworCXJldHVybiBJUlFfUkVUVkFMKHJjKTsKK30KKworc3RhdGljIGludCBjaGRfZGVjX2VuYWJsZV9pbnQoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCkKK3sKKwlpbnQgcmMgPSAwOworCisJaWYgKCFhZHAgfHwgIWFkcC0+cGRldikgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIGFyZyEhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGFkcC0+cGRldi0+bXNpX2VuYWJsZWQpCisJCWFkcC0+bXNpID0gMTsKKwllbHNlCisJCWFkcC0+bXNpID0gcGNpX2VuYWJsZV9tc2koYWRwLT5wZGV2KTsKKworCXJjID0gcmVxdWVzdF9pcnEoYWRwLT5wZGV2LT5pcnEsIGNoZF9kZWNfaXNyLCBJUlFGX1NIQVJFRCwKKwkJCSBhZHAtPm5hbWUsICh2b2lkICopYWRwKTsKKwlpZiAocmMpIHsKKwkJQkNNTE9HX0VSUigiSW50ZXJydXB0IHJlcXVlc3QgZmFpbGVkLi4gXG4iKTsKKwkJcGNpX2Rpc2FibGVfbXNpKGFkcC0+cGRldik7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGNoZF9kZWNfZGlzYWJsZV9pbnQoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCkKK3sKKwlpZiAoIWFkcCB8fCAhYWRwLT5wZGV2KSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgYXJnISFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlmcmVlX2lycShhZHAtPnBkZXYtPmlycSwgYWRwKTsKKworCWlmIChhZHAtPm1zaSkKKwkJcGNpX2Rpc2FibGVfbXNpKGFkcC0+cGRldik7CisKKwlyZXR1cm4gMDsKK30KKworY3J5c3RhbGhkX2lvY3RsX2RhdGEgKmNoZF9kZWNfYWxsb2NfaW9kYXRhKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIGJvb2wgaXNyKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCWNyeXN0YWxoZF9pb2N0bF9kYXRhICp0ZW1wOworCisJaWYgKCFhZHApCisJCXJldHVybiBOVUxMOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkcC0+bG9jaywgZmxhZ3MpOworCisJdGVtcCA9IGFkcC0+aWRhdGFfZnJlZV9oZWFkOworCWlmICh0ZW1wKSB7CisJCWFkcC0+aWRhdGFfZnJlZV9oZWFkID0gYWRwLT5pZGF0YV9mcmVlX2hlYWQtPm5leHQ7CisJCW1lbXNldCh0ZW1wLCAwLCBzaXplb2YoKnRlbXApKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZHAtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gdGVtcDsKK30KKwordm9pZCBjaGRfZGVjX2ZyZWVfaW9kYXRhKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIGNyeXN0YWxoZF9pb2N0bF9kYXRhICppb2RhdGEsCisJCQkgYm9vbCBpc3IpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwlpZiAoIWFkcCB8fCAhaW9kYXRhKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRwLT5sb2NrLCBmbGFncyk7CisJaW9kYXRhLT5uZXh0ID0gYWRwLT5pZGF0YV9mcmVlX2hlYWQ7CisJYWRwLT5pZGF0YV9mcmVlX2hlYWQgPSBpb2RhdGE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRwLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGNyeXN0YWxoZF91c2VyX2RhdGEodW5zaWduZWQgbG9uZyB1ZCwgdm9pZCAqZHIsIGludCBzaXplLCBpbnQgc2V0KQoreworCWludCByYzsKKworCWlmICghdWQgfHwgIWRyKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgYXJnIFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChzZXQpCisJCXJjID0gY29weV90b191c2VyKCh2b2lkICopdWQsIGRyLCBzaXplKTsKKwllbHNlCisJCXJjID0gY29weV9mcm9tX3VzZXIoZHIsICh2b2lkICopdWQsIHNpemUpOworCisJaWYgKHJjKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgYXJncyBmb3IgY29tbWFuZCBcbiIpOworCQlyYyA9IC1FRkFVTFQ7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGNoZF9kZWNfZmV0Y2hfY2RhdGEoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwgY3J5c3RhbGhkX2lvY3RsX2RhdGEgKmlvLAorCQkJICAgICAgIHVpbnQzMl90IG1fc3osIHVuc2lnbmVkIGxvbmcgdWEpCit7CisJdW5zaWduZWQgbG9uZyB1YV9vZmY7CisJaW50IHJjID0gMDsKKworCWlmICghYWRwIHx8ICFpbyB8fCAhdWEgfHwgIW1fc3opIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmchIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlvLT5hZGRfY2RhdGEgPSB2bWFsbG9jKG1fc3opOworCWlmICghaW8tPmFkZF9jZGF0YSkgeworCQlCQ01MT0dfRVJSKCJrYWxsb2MgZmFpbCBmb3Igc3o6JXhcbiIsIG1fc3opOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlpby0+YWRkX2NkYXRhX3N6ID0gbV9zejsKKwl1YV9vZmYgPSB1YSArIHNpemVvZihpby0+dWRhdGEpOworCXJjID0gY3J5c3RhbGhkX3VzZXJfZGF0YSh1YV9vZmYsIGlvLT5hZGRfY2RhdGEsIGlvLT5hZGRfY2RhdGFfc3osIDApOworCWlmIChyYykgeworCQlCQ01MT0dfRVJSKCJmYWlsZWQgdG8gcHVsbCBhZGRfY2RhdGEgc3o6JXggdWFfb2ZmOiV4XG4iLAorCQkJICAgaW8tPmFkZF9jZGF0YV9zeiwgKHVuc2lnbmVkIGludCl1YV9vZmYpOworCQlpZiAoaW8tPmFkZF9jZGF0YSkgeworCQkJa2ZyZWUoaW8tPmFkZF9jZGF0YSk7CisJCQlpby0+YWRkX2NkYXRhID0gTlVMTDsKKwkJfQorCQlyZXR1cm4gLUVOT0RBVEE7CisJfQorCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IGNoZF9kZWNfcmVsZWFzZV9jZGF0YShzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLAorCQkJCSBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqaW8sIHVuc2lnbmVkIGxvbmcgdWEpCit7CisJdW5zaWduZWQgbG9uZyB1YV9vZmY7CisJaW50IHJjOworCisJaWYgKCFhZHAgfHwgIWlvIHx8ICF1YSkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZyEhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGlvLT5jbWQgIT0gQkNNX0lPQ19GV19ET1dOTE9BRCkgeworCQl1YV9vZmYgPSB1YSArIHNpemVvZihpby0+dWRhdGEpOworCQlyYyA9IGNyeXN0YWxoZF91c2VyX2RhdGEodWFfb2ZmLCBpby0+YWRkX2NkYXRhLAorCQkJCQlpby0+YWRkX2NkYXRhX3N6LCAxKTsKKwkJaWYgKHJjKSB7CisJCQlCQ01MT0dfRVJSKCJmYWlsZWQgdG8gcHVzaCBhZGRfY2RhdGEgc3o6JXggdWFfb2ZmOiV4XG4iLAorCQkJCSAgIGlvLT5hZGRfY2RhdGFfc3osICh1bnNpZ25lZCBpbnQpdWFfb2ZmKTsKKwkJCXJldHVybiAtRU5PREFUQTsKKwkJfQorCX0KKworCWlmIChpby0+YWRkX2NkYXRhKSB7CisJCXZmcmVlKGlvLT5hZGRfY2RhdGEpOworCQlpby0+YWRkX2NkYXRhID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGRfZGVjX3Byb2NfdXNlcl9kYXRhKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsCisJCQkJICBjcnlzdGFsaGRfaW9jdGxfZGF0YSAqaW8sCisJCQkJICB1bnNpZ25lZCBsb25nIHVhLCBpbnQgc2V0KQoreworCWludCByYzsKKwl1aW50MzJfdCBtX3N6ID0gMDsKKworCWlmICghYWRwIHx8ICFpbyB8fCAhdWEpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmchIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJjID0gY3J5c3RhbGhkX3VzZXJfZGF0YSh1YSwgJmlvLT51ZGF0YSwgc2l6ZW9mKGlvLT51ZGF0YSksIHNldCk7CisJaWYgKHJjKSB7CisJCUJDTUxPR19FUlIoImZhaWxlZCB0byAlcyBpb2RhdGEgXG4iLCAoc2V0ID8gInNldCIgOiAiZ2V0IikpOworCQlyZXR1cm4gcmM7CisJfQorCisJc3dpdGNoIChpby0+Y21kKSB7CisJY2FzZSBCQ01fSU9DX01FTV9SRDoKKwljYXNlIEJDTV9JT0NfTUVNX1dSOgorCWNhc2UgQkNNX0lPQ19GV19ET1dOTE9BRDoKKwkJbV9zeiA9IGlvLT51ZGF0YS51LmRldk1lbS5OdW1Ed29yZHMgKiA0OworCQlpZiAoc2V0KQorCQkJcmMgPSBjaGRfZGVjX3JlbGVhc2VfY2RhdGEoYWRwLCBpbywgdWEpOworCQllbHNlCisJCQlyYyA9IGNoZF9kZWNfZmV0Y2hfY2RhdGEoYWRwLCBpbywgbV9zeiwgdWEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgY2hkX2RlY19hcGlfY21kKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIHVuc2lnbmVkIGxvbmcgdWEsCisJCQkgICB1aW50MzJfdCB1aWQsIHVpbnQzMl90IGNtZCwgY3J5c3RhbGhkX2NtZF9wcm9jIGZ1bmMpCit7CisJaW50IHJjOworCWNyeXN0YWxoZF9pb2N0bF9kYXRhICp0ZW1wOworCUJDX1NUQVRVUyBzdHMgPSBCQ19TVFNfU1VDQ0VTUzsKKworCXRlbXAgPSBjaGRfZGVjX2FsbG9jX2lvZGF0YShhZHAsIDApOworCWlmICghdGVtcCkgeworCQlCQ01MT0dfRVJSKCJGYWlsZWQgdG8gZ2V0IGlvZGF0YS4uXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdGVtcC0+dV9pZCA9IHVpZDsKKwl0ZW1wLT5jbWQgID0gY21kOworCisJcmMgPSBjaGRfZGVjX3Byb2NfdXNlcl9kYXRhKGFkcCwgdGVtcCwgdWEsIDApOworCWlmICghcmMpIHsKKwkJc3RzID0gZnVuYygmYWRwLT5jbWRzLCB0ZW1wKTsKKwkJaWYgKHN0cyA9PSBCQ19TVFNfUEVORElORykKKwkJCXN0cyA9IEJDX1NUU19OT1RfSU1QTDsKKwkJdGVtcC0+dWRhdGEuUmV0U3RzID0gc3RzOworCQlyYyA9IGNoZF9kZWNfcHJvY191c2VyX2RhdGEoYWRwLCB0ZW1wLCB1YSwgMSk7CisJfQorCisJaWYgKHRlbXApIHsKKwkJY2hkX2RlY19mcmVlX2lvZGF0YShhZHAsIHRlbXAsIDApOworCQl0ZW1wID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gcmM7Cit9CisKKy8qIEFQSSBpbnRlcmZhY2VzICovCitzdGF0aWMgaW50IGNoZF9kZWNfaW9jdGwoc3RydWN0IGlub2RlICppbiwgc3RydWN0IGZpbGUgKmZkLAorCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgdWEpCit7CisJc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCA9IGNoZF9nZXRfYWRwKCk7CisJY3J5c3RhbGhkX2NtZF9wcm9jIGNwcm9jOworCXN0cnVjdCBjcnlzdGFsaGRfdXNlciAqdWM7CisKKwlpZiAoIWFkcCB8fCAhZmQpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBhZHBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl1YyA9IChzdHJ1Y3QgY3J5c3RhbGhkX3VzZXIgKilmZC0+cHJpdmF0ZV9kYXRhOworCWlmICghdWMpIHsKKwkJQkNNTE9HX0VSUigiRmFpbGVkIHRvIGdldCB1Y1xuIik7CisJCXJldHVybiAtRU5PREFUQTsKKwl9CisKKwljcHJvYyA9IGNyeXN0YWxoZF9nZXRfY21kX3Byb2MoJmFkcC0+Y21kcywgY21kLCB1Yyk7CisJaWYgKCFjcHJvYykgeworCQlCQ01MT0dfRVJSKCJVbmhhbmRsZWQgY29tbWFuZDogJWRcbiIsIGNtZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBjaGRfZGVjX2FwaV9jbWQoYWRwLCB1YSwgdWMtPnVpZCwgY21kLCBjcHJvYyk7Cit9CisKK3N0YXRpYyBpbnQgY2hkX2RlY19vcGVuKHN0cnVjdCBpbm9kZSAqaW4sIHN0cnVjdCBmaWxlICpmZCkKK3sKKwlzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwID0gY2hkX2dldF9hZHAoKTsKKwlpbnQgcmMgPSAwOworCUJDX1NUQVRVUyBzdHMgPSBCQ19TVFNfU1VDQ0VTUzsKKwlzdHJ1Y3QgY3J5c3RhbGhkX3VzZXIgKnVjID0gTlVMTDsKKworCUJDTUxPR19FTlRFUjsKKwlpZiAoIWFkcCkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIGFkcFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChhZHAtPmNmZ191c2VycyA+PSBCQ19MSU5LX01BWF9PUEVOUykgeworCQlCQ01MT0coQkNNTE9HX0lORk8sICJBbHJlYWR5IGluIHVzZS4lZFxuIiwgYWRwLT5jZmdfdXNlcnMpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXN0cyA9IGNyeXN0YWxoZF91c2VyX29wZW4oJmFkcC0+Y21kcywgJnVjKTsKKwlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKSB7CisJCUJDTUxPR19FUlIoImNtZF91c2VyX29wZW4gLSAlZCBcbiIsIHN0cyk7CisJCXJjID0gLUVCVVNZOworCX0KKworCWFkcC0+Y2ZnX3VzZXJzKys7CisKKwlmZC0+cHJpdmF0ZV9kYXRhID0gdWM7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgY2hkX2RlY19jbG9zZShzdHJ1Y3QgaW5vZGUgKmluLCBzdHJ1Y3QgZmlsZSAqZmQpCit7CisJc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCA9IGNoZF9nZXRfYWRwKCk7CisJc3RydWN0IGNyeXN0YWxoZF91c2VyICp1YzsKKworCUJDTUxPR19FTlRFUjsKKwlpZiAoIWFkcCkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIGFkcCBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwl1YyA9IChzdHJ1Y3QgY3J5c3RhbGhkX3VzZXIgKilmZC0+cHJpdmF0ZV9kYXRhOworCWlmICghdWMpIHsKKwkJQkNNTE9HX0VSUigiRmFpbGVkIHRvIGdldCB1Y1xuIik7CisJCXJldHVybiAtRU5PREFUQTsKKwl9CisKKwljcnlzdGFsaGRfdXNlcl9jbG9zZSgmYWRwLT5jbWRzLCB1Yyk7CisKKwlhZHAtPmNmZ191c2Vycy0tOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNoZF9kZWNfZm9wcyA9IHsKKwkub3duZXIgICA9IFRISVNfTU9EVUxFLAorCS5pb2N0bCAgID0gY2hkX2RlY19pb2N0bCwKKwkub3BlbiAgICA9IGNoZF9kZWNfb3BlbiwKKwkucmVsZWFzZSA9IGNoZF9kZWNfY2xvc2UsCit9OworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjaGRfZGVjX2luaXRfY2hkZXYoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCkKK3sKKwljcnlzdGFsaGRfaW9jdGxfZGF0YSAqdGVtcDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJaW50IHJjID0gLUVOT0RFViwgaSA9IDA7CisKKwlpZiAoIWFkcCkKKwkJZ290byBmYWlsOworCisJYWRwLT5jaGRfZGVjX21ham9yID0gcmVnaXN0ZXJfY2hyZGV2KDAsIENSWVNUQUxIRF9BUElfTkFNRSwKKwkJCQkJICAgICAmY2hkX2RlY19mb3BzKTsKKwlpZiAoYWRwLT5jaGRfZGVjX21ham9yIDwgMCkgeworCQlCQ01MT0dfRVJSKCJGYWlsZWQgdG8gY3JlYXRlIGNvbmZpZyBkZXZcbiIpOworCQlyYyA9IGFkcC0+Y2hkX2RlY19tYWpvcjsKKwkJZ290byBmYWlsOworCX0KKworCS8qIHJlZ2lzdGVyIGNyeXN0YWxoZCBjbGFzcyAqLworCWNyeXN0YWxoZF9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImNyeXN0YWxoZCIpOworCWlmIChJU19FUlIoY3J5c3RhbGhkX2NsYXNzKSkgeworCQlCQ01MT0dfRVJSKCJmYWlsZWQgdG8gY3JlYXRlIGNsYXNzXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCWRldiA9IGRldmljZV9jcmVhdGUoY3J5c3RhbGhkX2NsYXNzLCBOVUxMLCBNS0RFVihhZHAtPmNoZF9kZWNfbWFqb3IsIDApLAorCQkJICAgIE5VTEwsICJjcnlzdGFsaGQiKTsKKwlpZiAoIWRldikgeworCQlCQ01MT0dfRVJSKCJmYWlsZWQgdG8gY3JlYXRlIGRldmljZVxuIik7CisJCWdvdG8gZGV2aWNlX2NyZWF0ZV9mYWlsOworCX0KKworCXJjID0gY3J5c3RhbGhkX2NyZWF0ZV9lbGVtX3Bvb2woYWRwLCBCQ19MSU5LX0VMRU1fUE9PTF9TWik7CisJaWYgKHJjKSB7CisJCUJDTUxPR19FUlIoImZhaWxlZCB0byBjcmVhdGUgZGV2aWNlXG4iKTsKKwkJZ290byBlbGVtX3Bvb2xfZmFpbDsKKwl9CisKKwkvKiBBbGxvY2F0ZSBnZW5lcmFsIHB1cnBvc2UgaW9jdGwgcG9vbC4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgQ0hEX0lPREFUQV9QT09MX1NaOyBpKyspIHsKKwkJLyogRklYTUU6IGphcm9kOiB3aHkgYXRvbWljPyAqLworCQl0ZW1wID0ga3phbGxvYyhzaXplb2YoY3J5c3RhbGhkX2lvY3RsX2RhdGEpLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCF0ZW1wKSB7CisJCQlCQ01MT0dfRVJSKCJpb2N0bCBkYXRhIHBvb2wga3phbGxvYyBmYWlsZWRcbiIpOworCQkJcmMgPSAtRU5PTUVNOworCQkJZ290byBremFsbG9jX2ZhaWw7CisJCX0KKwkJLyogQWRkIHRvIGdsb2JhbCBwb29sLi4gKi8KKwkJY2hkX2RlY19mcmVlX2lvZGF0YShhZHAsIHRlbXAsIDApOworCX0KKworCXJldHVybiAwOworCitremFsbG9jX2ZhaWw6CisJY3J5c3RhbGhkX2RlbGV0ZV9lbGVtX3Bvb2woYWRwKTsKK2VsZW1fcG9vbF9mYWlsOgorCWRldmljZV9kZXN0cm95KGNyeXN0YWxoZF9jbGFzcywgTUtERVYoYWRwLT5jaGRfZGVjX21ham9yLCAwKSk7CitkZXZpY2VfY3JlYXRlX2ZhaWw6CisJY2xhc3NfZGVzdHJveShjcnlzdGFsaGRfY2xhc3MpOworZmFpbDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBjaGRfZGVjX3JlbGVhc2VfY2hkZXYoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCkKK3sKKwljcnlzdGFsaGRfaW9jdGxfZGF0YSAqdGVtcCA9IE5VTEw7CisJaWYgKCFhZHApCisJCXJldHVybjsKKworCWlmIChhZHAtPmNoZF9kZWNfbWFqb3IgPiAwKSB7CisJCS8qIHVucmVnaXN0ZXIgY3J5c3RhbGhkIGNsYXNzICovCisJCWRldmljZV9kZXN0cm95KGNyeXN0YWxoZF9jbGFzcywgTUtERVYoYWRwLT5jaGRfZGVjX21ham9yLCAwKSk7CisJCXVucmVnaXN0ZXJfY2hyZGV2KGFkcC0+Y2hkX2RlY19tYWpvciwgQ1JZU1RBTEhEX0FQSV9OQU1FKTsKKwkJQkNNTE9HKEJDTUxPR19JTkZPLCAicmVsZWFzZWQgYXBpIGRldmljZSAtICVkXG4iLAorCQkgICAgICAgYWRwLT5jaGRfZGVjX21ham9yKTsKKwkJY2xhc3NfZGVzdHJveShjcnlzdGFsaGRfY2xhc3MpOworCX0KKwlhZHAtPmNoZF9kZWNfbWFqb3IgPSAwOworCisJLyogQ2xlYXIgaW9kYXRhIHBvb2wuLiAqLworCWRvIHsKKwkJdGVtcCA9IGNoZF9kZWNfYWxsb2NfaW9kYXRhKGFkcCwgMCk7CisJCWlmICh0ZW1wKQorCQkJa2ZyZWUodGVtcCk7CisJfSB3aGlsZSAodGVtcCk7CisKKwljcnlzdGFsaGRfZGVsZXRlX2VsZW1fcG9vbChhZHApOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjaGRfcGNpX3Jlc2VydmVfbWVtKHN0cnVjdCBjcnlzdGFsaGRfYWRwICpwaW5mbykKK3sKKwlpbnQgcmM7CisJdW5zaWduZWQgbG9uZyBiYXIyID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBpbmZvLT5wZGV2LCAyKTsKKwl1aW50MzJfdCBtZW1fbGVuICAgPSBwY2lfcmVzb3VyY2VfbGVuKHBpbmZvLT5wZGV2LCAyKTsKKwl1bnNpZ25lZCBsb25nIGJhcjAgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGluZm8tPnBkZXYsIDApOworCXVpbnQzMl90IGkyb19sZW4gICA9IHBjaV9yZXNvdXJjZV9sZW4ocGluZm8tPnBkZXYsIDApOworCisJQkNNTE9HKEJDTUxPR19TU1RFUCwgImJhcjI6MHglbHgtMHglMDh4ICBiYXIwOjB4JWx4LTB4JTA4eFxuIiwKKwkgICAgICAgYmFyMiwgbWVtX2xlbiwgYmFyMCwgaTJvX2xlbik7CisKKwlyYyA9IGNoZWNrX21lbV9yZWdpb24oYmFyMiwgbWVtX2xlbik7CisJaWYgKHJjKSB7CisJCUJDTUxPR19FUlIoIk5vIHZhbGlkIG1lbSByZWdpb24uLi5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwaW5mby0+YWRkciA9IGlvcmVtYXBfbm9jYWNoZShiYXIyLCBtZW1fbGVuKTsKKwlpZiAoIXBpbmZvLT5hZGRyKSB7CisJCUJDTUxPR19FUlIoIkZhaWxlZCB0byByZW1hcCBtZW0gcmVnaW9uLi4uXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcGluZm8tPnBjaV9tZW1fc3RhcnQgPSBiYXIyOworCXBpbmZvLT5wY2lfbWVtX2xlbiAgID0gbWVtX2xlbjsKKworCXJjID0gY2hlY2tfbWVtX3JlZ2lvbihiYXIwLCBpMm9fbGVuKTsKKwlpZiAocmMpIHsKKwkJQkNNTE9HX0VSUigiTm8gdmFsaWQgbWVtIHJlZ2lvbi4uLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBpbmZvLT5pMm9fYWRkciA9IGlvcmVtYXBfbm9jYWNoZShiYXIwLCBpMm9fbGVuKTsKKwlpZiAoIXBpbmZvLT5pMm9fYWRkcikgeworCQlCQ01MT0dfRVJSKCJGYWlsZWQgdG8gcmVtYXAgbWVtIHJlZ2lvbi4uLlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBpbmZvLT5wY2lfaTJvX3N0YXJ0ID0gYmFyMDsKKwlwaW5mby0+cGNpX2kyb19sZW4gICA9IGkyb19sZW47CisKKwlyYyA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGluZm8tPnBkZXYsIHBpbmZvLT5uYW1lKTsKKwlpZiAocmMgPCAwKSB7CisJCUJDTUxPR19FUlIoIlJlZ2lvbiByZXF1ZXN0IGZhaWxlZDogJWRcbiIsIHJjKTsKKwkJcmV0dXJuIHJjOworCX0KKworCUJDTUxPRyhCQ01MT0dfU1NURVAsICJNYXBwZWQgYWRkcjoweCUwOGx4ICBpMm9fYWRkcjoweCUwOGx4XG4iLAorCSAgICAgICAodW5zaWduZWQgbG9uZylwaW5mby0+YWRkciwgKHVuc2lnbmVkIGxvbmcpcGluZm8tPmkyb19hZGRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgY2hkX3BjaV9yZWxlYXNlX21lbShzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqcGluZm8pCit7CisJaWYgKCFwaW5mbykKKwkJcmV0dXJuOworCisJaWYgKHBpbmZvLT5hZGRyKQorCQlpb3VubWFwKHBpbmZvLT5hZGRyKTsKKworCWlmIChwaW5mby0+aTJvX2FkZHIpCisJCWlvdW5tYXAocGluZm8tPmkyb19hZGRyKTsKKworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGluZm8tPnBkZXYpOworfQorCisKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBjaGRfZGVjX3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IGNyeXN0YWxoZF9hZHAgKnBpbmZvOworCUJDX1NUQVRVUyBzdHMgPSBCQ19TVFNfU1VDQ0VTUzsKKworCUJDTUxPR19FTlRFUjsKKworCXBpbmZvID0gKHN0cnVjdCBjcnlzdGFsaGRfYWRwICopIHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlpZiAoIXBpbmZvKSB7CisJCUJDTUxPR19FUlIoImNvdWxkIG5vdCBnZXQgYWRwXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXN0cyA9IGNyeXN0YWxoZF9kZWxldGVfY21kX2NvbnRleHQoJnBpbmZvLT5jbWRzKTsKKwlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKQorCQlCQ01MT0dfRVJSKCJjbWQgZGVsZXRlIDolZCBcbiIsIHN0cyk7CisKKwljaGRfZGVjX3JlbGVhc2VfY2hkZXYocGluZm8pOworCisJY2hkX2RlY19kaXNhYmxlX2ludChwaW5mbyk7CisKKwljaGRfcGNpX3JlbGVhc2VfbWVtKHBpbmZvKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGluZm8tPnBkZXYpOworCisJa2ZyZWUocGluZm8pOworCWdfYWRwX2luZm8gPSBOVUxMOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjaGRfZGVjX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCSAgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudHJ5KQoreworCXN0cnVjdCBjcnlzdGFsaGRfYWRwICpwaW5mbzsKKwlpbnQgcmM7CisJQkNfU1RBVFVTIHN0cyA9IEJDX1NUU19TVUNDRVNTOworCisJQkNNTE9HKEJDTUxPR19EQkcsICJQQ0lfSU5GTzogVmVuZG9yOjB4JTA0eCBEZXZpY2U6MHglMDR4ICIKKwkgICAgICAgInNfdmVuZG9yOjB4JTA0eCBzX2RldmljZTogMHglMDR4XG4iLAorCSAgICAgICBwZGV2LT52ZW5kb3IsIHBkZXYtPmRldmljZSwgcGRldi0+c3Vic3lzdGVtX3ZlbmRvciwKKwkgICAgICAgcGRldi0+c3Vic3lzdGVtX2RldmljZSk7CisKKwkvKiBGSVhNRTogamFyb2Q6IHdoeSBhdG9taWM/ICovCisJcGluZm8gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3J5c3RhbGhkX2FkcCksIEdGUF9BVE9NSUMpOworCWlmICghcGluZm8pIHsKKwkJQkNNTE9HX0VSUigiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBpbmZvLT5wZGV2ID0gcGRldjsKKworCXJjID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CisJaWYgKHJjKSB7CisJCUJDTUxPR19FUlIoIkZhaWxlZCB0byBlbmFibGUgUENJIGRldmljZVxuIik7CisJCXJldHVybiByYzsKKwl9CisKKwlzbnByaW50ZihwaW5mby0+bmFtZSwgMzEsICJjcnlzdGFsaGRfcGNpX2U6JWQ6JWQ6JWQiLAorCQkgcGRldi0+YnVzLT5udW1iZXIsIFBDSV9TTE9UKHBkZXYtPmRldmZuKSwKKwkJIFBDSV9GVU5DKHBkZXYtPmRldmZuKSk7CisKKwlyYyA9IGNoZF9wY2lfcmVzZXJ2ZV9tZW0ocGluZm8pOworCWlmIChyYykgeworCQlCQ01MT0dfRVJSKCJGYWlsZWQgdG8gc2V0dXAgbWVtb3J5IHJlZ2lvbnMuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcGluZm8tPnByZXNlbnQJPSAxOworCXBpbmZvLT5kcnZfZGF0YSA9IGVudHJ5LT5kcml2ZXJfZGF0YTsKKworCS8qIFNldHVwIGFkYXB0ZXIgbGV2ZWwgbG9jay4uICovCisJc3Bpbl9sb2NrX2luaXQoJnBpbmZvLT5sb2NrKTsKKworCS8qIHNldHVwIGFwaSBzdHVmZi4uICovCisJY2hkX2RlY19pbml0X2NoZGV2KHBpbmZvKTsKKwlyYyA9IGNoZF9kZWNfZW5hYmxlX2ludChwaW5mbyk7CisJaWYgKHJjKSB7CisJCUJDTUxPR19FUlIoIl9lbmFibGVfaW50IGVycjolZCBcbiIsIHJjKTsKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBTZXQgZG1hIG1hc2suLi4gKi8KKwlpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDY0KSkpIHsKKwkJcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSyg2NCkpOworCQlwaW5mby0+ZG1hYml0cyA9IDY0OworCX0gZWxzZSBpZiAoIXBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKKwkJcGNpX3NldF9jb25zaXN0ZW50X2RtYV9tYXNrKHBkZXYsIERNQV9CSVRfTUFTSygzMikpOworCQlwaW5mby0+ZG1hYml0cyA9IDMyOworCX0gZWxzZSB7CisJCUJDTUxPR19FUlIoIlVuYWJsZWQgdG8gc2V0dXAgRE1BICVkXG4iLCByYyk7CisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc3RzID0gY3J5c3RhbGhkX3NldHVwX2NtZF9jb250ZXh0KCZwaW5mby0+Y21kcywgcGluZm8pOworCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpIHsKKwkJQkNNTE9HX0VSUigiY21kIHNldHVwIDolZCBcbiIsIHN0cyk7CisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgcGluZm8pOworCisJZ19hZHBfaW5mbyA9IHBpbmZvOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK2ludCBjaGRfZGVjX3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcDsKKwljcnlzdGFsaGRfaW9jdGxfZGF0YSAqdGVtcDsKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisKKwlhZHAgPSAoc3RydWN0IGNyeXN0YWxoZF9hZHAgKilwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaWYgKCFhZHApIHsKKwkJQkNNTE9HX0VSUigiY291bGQgbm90IGdldCBhZHBcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwl0ZW1wID0gY2hkX2RlY19hbGxvY19pb2RhdGEoYWRwLCBmYWxzZSk7CisJaWYgKCF0ZW1wKSB7CisJCUJDTUxPR19FUlIoImNvdWxkIG5vdCBnZXQgaW9jdGwgZGF0YVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCXN0cyA9IGNyeXN0YWxoZF9zdXNwZW5kKCZhZHAtPmNtZHMsIHRlbXApOworCWlmIChzdHMgIT0gQkNfU1RTX1NVQ0NFU1MpIHsKKwkJQkNNTE9HX0VSUigiQkNNNzAwMTIgU3VzcGVuZCAlZFxuIiwgc3RzKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJY2hkX2RlY19mcmVlX2lvZGF0YShhZHAsIHRlbXAsIGZhbHNlKTsKKwljaGRfZGVjX2Rpc2FibGVfaW50KGFkcCk7CisJcGNpX3NhdmVfc3RhdGUocGRldik7CisKKwkvKiBEaXNhYmxlIElPL2J1cyBtYXN0ZXIvaXJxIHJvdXRlciAqLworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIHBjaV9jaG9vc2Vfc3RhdGUocGRldiwgc3RhdGUpKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGNoZF9kZWNfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwOworCUJDX1NUQVRVUyBzdHMgPSBCQ19TVFNfU1VDQ0VTUzsKKwlpbnQgcmM7CisKKwlhZHAgPSAoc3RydWN0IGNyeXN0YWxoZF9hZHAgKilwY2lfZ2V0X2RydmRhdGEocGRldik7CisJaWYgKCFhZHApIHsKKwkJQkNNTE9HX0VSUigiY291bGQgbm90IGdldCBhZHBcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CisJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7CisKKwkvKiBkZXZpY2UncyBpcnEgcG9zc2libHkgaXMgY2hhbmdlZCwgZHJpdmVyIHNob3VsZCB0YWtlIGNhcmUgKi8KKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKKwkJQkNNTE9HX0VSUigiRmFpbGVkIHRvIGVuYWJsZSBQQ0kgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisKKwlyYyA9IGNoZF9kZWNfZW5hYmxlX2ludChhZHApOworCWlmIChyYykgeworCQlCQ01MT0dfRVJSKCJfZW5hYmxlX2ludCBlcnI6JWQgXG4iLCByYyk7CisJCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJc3RzID0gY3J5c3RhbGhkX3Jlc3VtZSgmYWRwLT5jbWRzKTsKKwlpZiAoc3RzICE9IEJDX1NUU19TVUNDRVNTKSB7CisJCUJDTUxPR19FUlIoIkJDTTcwMDEyIFJlc3VtZSAlZFxuIiwgc3RzKTsKKwkJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoY2hkX2RlY19wY2lfaWRfdGFibGUpID0geworCXsgUENJX1ZERVZJQ0UoQlJPQURDT00sIDB4MTYxMiksIDggfSwKKwl7IDAsIH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIGNoZF9kZWNfcGNpX2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGJjX2NoZF83MDAxMl9kcml2ZXIgPSB7CisJLm5hbWUgICAgID0gIkJyb2FkY29tIDcwMDEyIERlY29kZXIiLAorCS5wcm9iZSAgICA9IGNoZF9kZWNfcGNpX3Byb2JlLAorCS5yZW1vdmUgICA9IF9fZGV2ZXhpdF9wKGNoZF9kZWNfcGNpX3JlbW92ZSksCisJLmlkX3RhYmxlID0gY2hkX2RlY19wY2lfaWRfdGFibGUsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgID0gY2hkX2RlY19wY2lfc3VzcGVuZCwKKwkucmVzdW1lICAgPSBjaGRfZGVjX3BjaV9yZXN1bWUKKyNlbmRpZgorfTsKKwordm9pZCBjaGRfc2V0X2xvZ19sZXZlbChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLCBjaGFyICphcmcpCit7CisJaWYgKCghYXJnKSB8fCAoc3RybGVuKGFyZykgPCAzKSkKKwkJZ19saW5rbG9nX2xldmVsID0gQkNNTE9HX0VSUk9SIHwgQkNNTE9HX0RBVEE7CisJZWxzZSBpZiAoIXN0cm5jbXAoYXJnLCAic3N0ZXAiLCA1KSkKKwkJZ19saW5rbG9nX2xldmVsID0gQkNNTE9HX0lORk8gfCBCQ01MT0dfREFUQSB8IEJDTUxPR19EQkcgfAorCQkJCSAgQkNNTE9HX1NTVEVQIHwgQkNNTE9HX0VSUk9SOworCWVsc2UgaWYgKCFzdHJuY21wKGFyZywgImluZm8iLCA0KSkKKwkJZ19saW5rbG9nX2xldmVsID0gQkNNTE9HX0VSUk9SIHwgQkNNTE9HX0RBVEEgfCBCQ01MT0dfSU5GTzsKKwllbHNlIGlmICghc3RybmNtcChhcmcsICJkZWJ1ZyIsIDUpKQorCQlnX2xpbmtsb2dfbGV2ZWwgPSBCQ01MT0dfRVJST1IgfCBCQ01MT0dfREFUQSB8IEJDTUxPR19JTkZPIHwKKwkJCQkgIEJDTUxPR19EQkc7CisJZWxzZSBpZiAoIXN0cm5jbXAoYXJnLCAicGJhbGwiLCA1KSkKKwkJZ19saW5rbG9nX2xldmVsID0gMHhGRkZGRkZGRiAmIH4oQkNNTE9HX1NQSU5MT0NLKTsKKwllbHNlIGlmICghc3RybmNtcChhcmcsICJzaWxlbnQiLCA2KSkKKwkJZ19saW5rbG9nX2xldmVsID0gMDsKKwllbHNlCisJCWdfbGlua2xvZ19sZXZlbCA9IDA7Cit9CisKK3N0cnVjdCBjcnlzdGFsaGRfYWRwICpjaGRfZ2V0X2FkcCh2b2lkKQoreworCXJldHVybiBnX2FkcF9pbmZvOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjaGRfZGVjX21vZHVsZV9pbml0KHZvaWQpCit7CisJaW50IHJjOworCisJY2hkX3NldF9sb2dfbGV2ZWwoTlVMTCwgImRlYnVnIik7CisJQkNNTE9HKEJDTUxPR19EQVRBLCAiTG9hZGluZyBjcnlzdGFsaGQgJWQuJWQuJWQgXG4iLAorCSAgICAgICBjcnlzdGFsaGRfa21vZF9tYWpvciwgY3J5c3RhbGhkX2ttb2RfbWlub3IsIGNyeXN0YWxoZF9rbW9kX3Jldik7CisKKwlyYyA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmJjX2NoZF83MDAxMl9kcml2ZXIpOworCisJaWYgKHJjIDwgMCkKKwkJQkNNTE9HX0VSUigiQ291bGQgbm90IGZpbmQgYW55IGRldmljZXMuIGVycjolZCBcbiIsIHJjKTsKKworCXJldHVybiByYzsKK30KK21vZHVsZV9pbml0KGNoZF9kZWNfbW9kdWxlX2luaXQpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgY2hkX2RlY19tb2R1bGVfY2xlYW51cCh2b2lkKQoreworCUJDTUxPRyhCQ01MT0dfREFUQSwgInVubG9hZGluZyBjcnlzdGFsaGQgJWQuJWQuJWQgXG4iLAorCSAgICAgICBjcnlzdGFsaGRfa21vZF9tYWpvciwgY3J5c3RhbGhkX2ttb2RfbWlub3IsIGNyeXN0YWxoZF9rbW9kX3Jldik7CisKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmJjX2NoZF83MDAxMl9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoY2hkX2RlY19tb2R1bGVfY2xlYW51cCk7CisKK01PRFVMRV9BVVRIT1IoIk5hcmVuIFNhbmthciA8bnNhbmthckBicm9hZGNvbS5jb20+Iik7CitNT0RVTEVfQVVUSE9SKCJQcmFzYWQgQm9saXNldHR5IDxwcmFzYWRiQGJyb2FkY29tLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTihDUllTVEFMX0hEX05BTUUpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJiY203MDAxMiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfbG54LmggYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9sbnguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzM4YWU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2NyeXN0YWxoZC9jcnlzdGFsaGRfbG54LmgKQEAgLTAsMCArMSw5NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDksIEJyb2FkY29tIENvcnBvcmF0aW9uLgorICoKKyAqICBOYW1lOiBjcnlzdGFsaGRfbG54IC4gYworICoKKyAqICBEZXNjcmlwdGlvbjoKKyAqCQlCQ003MDAxMiBMaW51eCBkcml2ZXIKKyAqCisgKiAgSElTVE9SWToKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIGNyeXN0YWxoZCBkZXZpY2UgZHJpdmVyLgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCisgKgorICogVGhpcyBkcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgZHJpdmVyLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgX0NSWVNUQUxIRF9MTlhfSF8KKyNkZWZpbmUgX0NSWVNUQUxIRF9MTlhfSF8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJjcnlzdGFsaGRfY21kcy5oIgorCisjZGVmaW5lIENSWVNUQUxfSERfTkFNRQkJIkJyb2FkY29tIENyeXN0YWwgSEQgRGVjb2RlciAoQkNNNzAwMTIpIERyaXZlciIKKworCisvKiBPUyBzcGVjaWZpYyBQQ0kgaW5mb3JtYXRpb24gc3RydWN0dXJlIGFuZCBhZGFwdGVyIGluZm9ybWF0aW9uLiAqLworc3RydWN0IGNyeXN0YWxoZF9hZHAgeworCS8qIEhhcmR3YXJlIGJvcmFkL1BDSSBzcGVjaWZpY3MgKi8KKwljaGFyCQkJbmFtZVszMl07CisJc3RydWN0IHBjaV9kZXYJCSpwZGV2OworCisJdW5zaWduZWQgbG9uZwkJcGNpX21lbV9zdGFydDsKKwl1aW50MzJfdAkJcGNpX21lbV9sZW47CisJdm9pZAkJCSphZGRyOworCisJdW5zaWduZWQgbG9uZwkJcGNpX2kyb19zdGFydDsKKwl1aW50MzJfdAkJcGNpX2kyb19sZW47CisJdm9pZAkJCSppMm9fYWRkcjsKKworCXVuc2lnbmVkIGludAkJZHJ2X2RhdGE7CisJdW5zaWduZWQgaW50CQlkbWFiaXRzOwkvKiAzMiB8IDY0ICovCisJdW5zaWduZWQgaW50CQlyZWdpc3RlcmVkOworCXVuc2lnbmVkIGludAkJcHJlc2VudDsKKwl1bnNpZ25lZCBpbnQJCW1zaTsKKworCXNwaW5sb2NrX3QJCWxvY2s7CisKKwkvKiBBUEkgUmVsYXRlZCAqLworCXVuc2lnbmVkIGludAkJY2hkX2RlY19tYWpvcjsKKwl1bnNpZ25lZCBpbnQJCWNmZ191c2VyczsKKworCWNyeXN0YWxoZF9pb2N0bF9kYXRhCSppZGF0YV9mcmVlX2hlYWQ7CS8qIGlvY3RsIGRhdGEgcG9vbCAqLworCWNyeXN0YWxoZF9lbGVtX3QJCSplbGVtX3Bvb2xfaGVhZDsJLyogUXVldWUgZWxlbWVudCBwb29sICovCisKKwlzdHJ1Y3QgY3J5c3RhbGhkX2NtZAljbWRzOworCisJY3J5c3RhbGhkX2Rpb19yZXEJCSp1YV9tYXBfZnJlZV9oZWFkOworCXN0cnVjdCBwY2lfcG9vbAkJKmZpbGxfYnl0ZV9wb29sOworfTsKKworCitzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqY2hkX2dldF9hZHAodm9pZCk7Cit2b2lkIGNoZF9zZXRfbG9nX2xldmVsKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIGNoYXIgKmFyZyk7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9taXNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9taXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg3ZGNjNAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX21pc2MuYwpAQCAtMCwwICsxLDEwMzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCSAgIENvcHlyaWdodCAoYykgMjAwNS0yMDA5LCBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KKyAqCisgKiAgTmFtZTogY3J5c3RhbGhkX21pc2MgLiBjCisgKgorICogIERlc2NyaXB0aW9uOgorICoJCUJDTTcwMDEyIExpbnV4IGRyaXZlciBtaXNjIHJvdXRpbmVzLgorICoKKyAqICBISVNUT1JZOgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgY3J5c3RhbGhkIGRldmljZSBkcml2ZXIuCisgKgorICogVGhpcyBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBkcml2ZXIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImNyeXN0YWxoZF9taXNjLmgiCisjaW5jbHVkZSAiY3J5c3RhbGhkX2xueC5oIgorCit1aW50MzJfdCBnX2xpbmtsb2dfbGV2ZWw7CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgY3J5c3RhbGhkX2RyYW1fcmQoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwgdWludDMyX3QgbWVtX29mZikKK3sKKwljcnlzdGFsaGRfcmVnX3dyKGFkcCwgRENJX0RSQU1fQkFTRV9BRERSLCAobWVtX29mZiA+PiAxOSkpOworCXJldHVybiBiY19kZWNfcmVnX3JkKGFkcCwgKDB4MDAzODAwMDAgfCAobWVtX29mZiAmIDB4MDAwN0ZGRkYpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlzdGFsaGRfZHJhbV93cihzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLCB1aW50MzJfdCBtZW1fb2ZmLCB1aW50MzJfdCB2YWwpCit7CisJY3J5c3RhbGhkX3JlZ193cihhZHAsIERDSV9EUkFNX0JBU0VfQUREUiwgKG1lbV9vZmYgPj4gMTkpKTsKKwliY19kZWNfcmVnX3dyKGFkcCwgKDB4MDAzODAwMDAgfCAobWVtX29mZiAmIDB4MDAwN0ZGRkYpKSwgdmFsKTsKK30KKworc3RhdGljIGlubGluZSBCQ19TVEFUVVMgYmNfY2hrX2RyYW1fcmFuZ2Uoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwgdWludDMyX3Qgc3RhcnRfb2ZmLCB1aW50MzJfdCBjbnQpCit7CisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCitzdGF0aWMgY3J5c3RhbGhkX2Rpb19yZXEgKmNyeXN0YWxoZF9hbGxvY19kaW8oc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwljcnlzdGFsaGRfZGlvX3JlcSAqdGVtcCA9IE5VTEw7CisKKwlpZiAoIWFkcCkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIEFyZyEhXG4iKTsKKwkJcmV0dXJuIHRlbXA7CisJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmFkcC0+bG9jaywgZmxhZ3MpOworCXRlbXAgPSBhZHAtPnVhX21hcF9mcmVlX2hlYWQ7CisJaWYgKHRlbXApCisJCWFkcC0+dWFfbWFwX2ZyZWVfaGVhZCA9IGFkcC0+dWFfbWFwX2ZyZWVfaGVhZC0+bmV4dDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhZHAtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiB0ZW1wOworfQorCitzdGF0aWMgdm9pZCBjcnlzdGFsaGRfZnJlZV9kaW8oc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwgY3J5c3RhbGhkX2Rpb19yZXEgKmRpbykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKworCWlmICghYWRwIHx8ICFkaW8pCisJCXJldHVybjsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRwLT5sb2NrLCBmbGFncyk7CisJZGlvLT5zaWcgPSBjcnlzdGFsaGRfZGlvX2ludjsKKwlkaW8tPnBhZ2VfY250ID0gMDsKKwlkaW8tPmZiX3NpemUgPSAwOworCW1lbXNldCgmZGlvLT51aW5mbywgMCwgc2l6ZW9mKGRpby0+dWluZm8pKTsKKwlkaW8tPm5leHQgPSBhZHAtPnVhX21hcF9mcmVlX2hlYWQ7CisJYWRwLT51YV9tYXBfZnJlZV9oZWFkID0gZGlvOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkcC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgY3J5c3RhbGhkX2VsZW1fdCAqY3J5c3RhbGhkX2FsbG9jX2VsZW0oc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwljcnlzdGFsaGRfZWxlbV90ICp0ZW1wID0gTlVMTDsKKworCWlmICghYWRwKQorCQlyZXR1cm4gdGVtcDsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmYWRwLT5sb2NrLCBmbGFncyk7CisJdGVtcCA9IGFkcC0+ZWxlbV9wb29sX2hlYWQ7CisJaWYgKHRlbXApIHsKKwkJYWRwLT5lbGVtX3Bvb2xfaGVhZCA9IGFkcC0+ZWxlbV9wb29sX2hlYWQtPmZsaW5rOworCQltZW1zZXQodGVtcCwgMCwgc2l6ZW9mKCp0ZW1wKSk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFkcC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHRlbXA7Cit9CitzdGF0aWMgdm9pZCBjcnlzdGFsaGRfZnJlZV9lbGVtKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIGNyeXN0YWxoZF9lbGVtX3QgKmVsZW0pCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisKKwlpZiAoIWFkcCB8fCAhZWxlbSkKKwkJcmV0dXJuOworCXNwaW5fbG9ja19pcnFzYXZlKCZhZHAtPmxvY2ssIGZsYWdzKTsKKwllbGVtLT5mbGluayA9IGFkcC0+ZWxlbV9wb29sX2hlYWQ7CisJYWRwLT5lbGVtX3Bvb2xfaGVhZCA9IGVsZW07CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYWRwLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjcnlzdGFsaGRfc2V0X3NnKHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgdW5zaWduZWQgaW50IGxlbiwgdW5zaWduZWQgaW50IG9mZnNldCkKK3sKKwlzZ19zZXRfcGFnZShzZywgcGFnZSwgbGVuLCBvZmZzZXQpOworI2lmZGVmIENPTkZJR19YODZfNjQKKwlzZy0+ZG1hX2xlbmd0aCA9IGxlbjsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3J5c3RhbGhkX2luaXRfc2coc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgdW5zaWduZWQgaW50IGVudHJpZXMpCit7CisJLyogaHR0cDovL2xrbWwub3JnL2xrbWwvMjAwNy8xMS8yNy82OCAqLworCXNnX2luaXRfdGFibGUoc2csIGVudHJpZXMpOworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09IEV4dGVybiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qKgorICogYmNfZGVjX3JlZ19yZCAtIFJlYWQgNzQxMidzIGRldmljZSByZWdpc3Rlci4KKyAqIEBhZHA6IEFkYXB0ZXIgaW5zdGFuY2UKKyAqIEByZWdfb2ZmOiBSZWdpc3RlciBvZmZzZXQuCisgKgorICogUmV0dXJuOgorICoJMzJiaXQgdmFsdWUgcmVhZAorICoKKyAqIDc0MTIncyBkZXZpY2UgcmVnaXN0ZXIgcmVhZCByb3V0aW5lLiBUaGlzIGludGVyZmFjZSB1c2UKKyAqIDc0MTIncyBkZXZpY2UgYWNjZXNzIHJhbmdlIG1hcHBlZCBmcm9tIEJBUi0yICg0TSkgb2YgUENJZQorICogY29uZmlndXJhdGlvbiBzcGFjZS4KKyAqLwordWludDMyX3QgYmNfZGVjX3JlZ19yZChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLCB1aW50MzJfdCByZWdfb2ZmKQoreworCWlmICghYWRwIHx8IChyZWdfb2ZmID4gYWRwLT5wY2lfbWVtX2xlbikpIHsKKwkJQkNNTE9HX0VSUigiZGVjX3JkX3JlZ19vZmYgb3V0b2YgcmFuZ2U6IDB4JTA4eFxuIiwgcmVnX29mZik7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiByZWFkbChhZHAtPmFkZHIgKyByZWdfb2ZmKTsKK30KKworLyoqCisgKiBiY19kZWNfcmVnX3dyIC0gV3JpdGUgNzQxMidzIGRldmljZSByZWdpc3RlcgorICogQGFkcDogQWRhcHRlciBpbnN0YW5jZQorICogQHJlZ19vZmY6IFJlZ2lzdGVyIG9mZnNldC4KKyAqIEB2YWw6IER3b3JkIHZhbHVlIHRvIGJlIHdyaXR0ZW4uCisgKgorICogUmV0dXJuOgorICoJbm9uZS4KKyAqCisgKiA3NDEyJ3MgZGV2aWNlIHJlZ2lzdGVyIHdyaXRlIHJvdXRpbmUuIFRoaXMgaW50ZXJmYWNlIHVzZQorICogNzQxMidzIGRldmljZSBhY2Nlc3MgcmFuZ2UgbWFwcGVkIGZyb20gQkFSLTIgKDRNKSBvZiBQQ0llCisgKiBjb25maWd1cmF0aW9uIHNwYWNlLgorICovCit2b2lkIGJjX2RlY19yZWdfd3Ioc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwgdWludDMyX3QgcmVnX29mZiwgdWludDMyX3QgdmFsKQoreworCWlmICghYWRwIHx8IChyZWdfb2ZmID4gYWRwLT5wY2lfbWVtX2xlbikpIHsKKwkJQkNNTE9HX0VSUigiZGVjX3dyX3JlZ19vZmYgb3V0b2YgcmFuZ2U6IDB4JTA4eFxuIiwgcmVnX29mZik7CisJCXJldHVybjsKKwl9CisJd3JpdGVsKHZhbCwgYWRwLT5hZGRyICsgcmVnX29mZik7CisJdWRlbGF5KDgpOworfQorCisvKioKKyAqIGNyeXN0YWxoZF9yZWdfcmQgLSBSZWFkIExpbmsncyBkZXZpY2UgcmVnaXN0ZXIuCisgKiBAYWRwOiBBZGFwdGVyIGluc3RhbmNlCisgKiBAcmVnX29mZjogUmVnaXN0ZXIgb2Zmc2V0LgorICoKKyAqIFJldHVybjoKKyAqCTMyYml0IHZhbHVlIHJlYWQKKyAqCisgKiBMaW5rIGRldmljZSByZWdpc3RlciAgcmVhZCByb3V0aW5lLiBUaGlzIGludGVyZmFjZSB1c2UKKyAqIExpbmsncyBkZXZpY2UgYWNjZXNzIHJhbmdlIG1hcHBlZCBmcm9tIEJBUi0xICg2NEspIG9mIFBDSWUKKyAqIGNvbmZpZ3VyYXRpb24gc3BhY2UuCisgKgorICovCit1aW50MzJfdCBjcnlzdGFsaGRfcmVnX3JkKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIHVpbnQzMl90IHJlZ19vZmYpCit7CisJaWYgKCFhZHAgfHwgKHJlZ19vZmYgPiBhZHAtPnBjaV9pMm9fbGVuKSkgeworCQlCQ01MT0dfRVJSKCJsaW5rX3JkX3JlZ19vZmYgb3V0b2YgcmFuZ2U6IDB4JTA4eFxuIiwgcmVnX29mZik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gcmVhZGwoYWRwLT5pMm9fYWRkciArIHJlZ19vZmYpOworfQorCisvKioKKyAqIGNyeXN0YWxoZF9yZWdfd3IgLSBXcml0ZSBMaW5rJ3MgZGV2aWNlIHJlZ2lzdGVyCisgKiBAYWRwOiBBZGFwdGVyIGluc3RhbmNlCisgKiBAcmVnX29mZjogUmVnaXN0ZXIgb2Zmc2V0LgorICogQHZhbDogRHdvcmQgdmFsdWUgdG8gYmUgd3JpdHRlbi4KKyAqCisgKiBSZXR1cm46CisgKglub25lLgorICoKKyAqIExpbmsgZGV2aWNlIHJlZ2lzdGVyICB3cml0ZSByb3V0aW5lLiBUaGlzIGludGVyZmFjZSB1c2UKKyAqIExpbmsncyBkZXZpY2UgYWNjZXNzIHJhbmdlIG1hcHBlZCBmcm9tIEJBUi0xICg2NEspIG9mIFBDSWUKKyAqIGNvbmZpZ3VyYXRpb24gc3BhY2UuCisgKgorICovCit2b2lkIGNyeXN0YWxoZF9yZWdfd3Ioc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwgdWludDMyX3QgcmVnX29mZiwgdWludDMyX3QgdmFsKQoreworCWlmICghYWRwIHx8IChyZWdfb2ZmID4gYWRwLT5wY2lfaTJvX2xlbikpIHsKKwkJQkNNTE9HX0VSUigibGlua193cl9yZWdfb2ZmIG91dG9mIHJhbmdlOiAweCUwOHhcbiIsIHJlZ19vZmYpOworCQlyZXR1cm47CisJfQorCXdyaXRlbCh2YWwsIGFkcC0+aTJvX2FkZHIgKyByZWdfb2ZmKTsKK30KKworLyoqCisgKiBjcnlzdGFsaGRfbWVtX3JkIC0gUmVhZCBkYXRhIGZyb20gNzQxMidzIERSQU0gYXJlYS4KKyAqIEBhZHA6IEFkYXB0ZXIgaW5zdGFuY2UKKyAqIEBzdGFydF9vZmY6IFN0YXJ0IG9mZnNldC4KKyAqIEBkd19jbnQ6IENvdW50IGluIGR3b3Jkcy4KKyAqIEByZF9idWZmOiBCdWZmZXIgdG8gY29weSB0aGUgZGF0YSBmcm9tIGRyYW0uCisgKgorICogUmV0dXJuOgorICoJU3RhdHVzLgorICoKKyAqIDc0MTIncyBEcmFtIHJlYWQgcm91dGluZS4KKyAqLworQkNfU1RBVFVTIGNyeXN0YWxoZF9tZW1fcmQoc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwgdWludDMyX3Qgc3RhcnRfb2ZmLAorCQkJIHVpbnQzMl90IGR3X2NudCwgdWludDMyX3QgKnJkX2J1ZmYpCit7CisJdWludDMyX3QgaXggPSAwOworCisJaWYgKCFhZHAgfHwgIXJkX2J1ZmYgfHwKKwkgICAgKGJjX2Noa19kcmFtX3JhbmdlKGFkcCwgc3RhcnRfb2ZmLCBkd19jbnQpICE9IEJDX1NUU19TVUNDRVNTKSkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIGFyZyBcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCWZvciAoaXggPSAwOyBpeCA8IGR3X2NudDsgaXgrKykKKwkJcmRfYnVmZltpeF0gPSBjcnlzdGFsaGRfZHJhbV9yZChhZHAsIChzdGFydF9vZmYgKyAoaXggKiA0KSkpOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCisvKioKKyAqIGNyeXN0YWxoZF9tZW1fd3IgLSBXcml0ZSBkYXRhIHRvIDc0MTIncyBEUkFNIGFyZWEuCisgKiBAYWRwOiBBZGFwdGVyIGluc3RhbmNlCisgKiBAc3RhcnRfb2ZmOiBTdGFydCBvZmZzZXQuCisgKiBAZHdfY250OiBDb3VudCBpbiBkd29yZHMuCisgKiBAd3JfYnVmZjogRGF0YSBCdWZmZXIgdG8gYmUgd3JpdHRlbi4KKyAqCisgKiBSZXR1cm46CisgKglTdGF0dXMuCisgKgorICogNzQxMidzIERyYW0gd3JpdGUgcm91dGluZS4KKyAqLworQkNfU1RBVFVTIGNyeXN0YWxoZF9tZW1fd3Ioc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwgdWludDMyX3Qgc3RhcnRfb2ZmLAorCQkJIHVpbnQzMl90IGR3X2NudCwgdWludDMyX3QgKndyX2J1ZmYpCit7CisJdWludDMyX3QgaXggPSAwOworCisJaWYgKCFhZHAgfHwgIXdyX2J1ZmYgfHwKKwkgICAgKGJjX2Noa19kcmFtX3JhbmdlKGFkcCwgc3RhcnRfb2ZmLCBkd19jbnQpICE9IEJDX1NUU19TVUNDRVNTKSkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIGFyZyBcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJZm9yIChpeCA9IDA7IGl4IDwgZHdfY250OyBpeCsrKQorCQljcnlzdGFsaGRfZHJhbV93cihhZHAsIChzdGFydF9vZmYgKyAoaXggKiA0KSksIHdyX2J1ZmZbaXhdKTsKKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKy8qKgorICogY3J5c3RhbGhkX3BjaV9jZmdfcmQgLSBQQ0llIGNvbmZpZyByZWFkCisgKiBAYWRwOiBBZGFwdGVyIGluc3RhbmNlCisgKiBAb2ZmOiBQQ0kgY29uZmlnIHNwYWNlIG9mZnNldC4KKyAqIEBsZW46IFNpemUgLS0gQnl0ZSwgV29yZCAmIGR3b3JkLgorICogQHZhbDogVmFsdWUgcmVhZAorICoKKyAqIFJldHVybjoKKyAqCVN0YXR1cy4KKyAqCisgKiBHZXQgdmFsdWUgZnJvbSBMaW5rJ3MgUENJZSBjb25maWcgc3BhY2UuCisgKi8KK0JDX1NUQVRVUyBjcnlzdGFsaGRfcGNpX2NmZ19yZChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLCB1aW50MzJfdCBvZmYsCisJCQkgICAgIHVpbnQzMl90IGxlbiwgdWludDMyX3QgKnZhbCkKK3sKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisJaW50IHJjID0gMDsKKworCWlmICghYWRwIHx8ICF2YWwpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBhcmcgXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCXN3aXRjaCAobGVuKSB7CisJY2FzZSAxOgorCQlyYyA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKGFkcC0+cGRldiwgb2ZmLCAodTggKil2YWwpOworCQlicmVhazsKKwljYXNlIDI6CisJCXJjID0gcGNpX3JlYWRfY29uZmlnX3dvcmQoYWRwLT5wZGV2LCBvZmYsICh1MTYgKil2YWwpOworCQlicmVhazsKKwljYXNlIDQ6CisJCXJjID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKGFkcC0+cGRldiwgb2ZmLCAodTMyICopdmFsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmMgPSAtRUlOVkFMOworCQlzdHMgPSBCQ19TVFNfSU5WX0FSRzsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBsZW46JWRcbiIsIGxlbik7CisJfTsKKworCWlmIChyYyAmJiAoc3RzID09IEJDX1NUU19TVUNDRVNTKSkKKwkJc3RzID0gQkNfU1RTX0VSUk9SOworCisJcmV0dXJuIHN0czsKK30KKworLyoqCisgKiBjcnlzdGFsaGRfcGNpX2NmZ193ciAtIFBDSWUgY29uZmlnIHdyaXRlCisgKiBAYWRwOiBBZGFwdGVyIGluc3RhbmNlCisgKiBAb2ZmOiBQQ0kgY29uZmlnIHNwYWNlIG9mZnNldC4KKyAqIEBsZW46IFNpemUgLS0gQnl0ZSwgV29yZCAmIGR3b3JkLgorICogQHZhbDogVmFsdWUgdG8gYmUgd3JpdHRlbgorICoKKyAqIFJldHVybjoKKyAqCVN0YXR1cy4KKyAqCisgKiBTZXQgdmFsdWUgdG8gTGluaydzIFBDSWUgY29uZmlnIHNwYWNlLgorICovCitCQ19TVEFUVVMgY3J5c3RhbGhkX3BjaV9jZmdfd3Ioc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwgdWludDMyX3Qgb2ZmLAorCQkJICAgICB1aW50MzJfdCBsZW4sIHVpbnQzMl90IHZhbCkKK3sKKwlCQ19TVEFUVVMgc3RzID0gQkNfU1RTX1NVQ0NFU1M7CisJaW50IHJjID0gMDsKKworCWlmICghYWRwIHx8ICF2YWwpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBhcmcgXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCXN3aXRjaCAobGVuKSB7CisJY2FzZSAxOgorCQlyYyA9IHBjaV93cml0ZV9jb25maWdfYnl0ZShhZHAtPnBkZXYsIG9mZiwgKHU4KXZhbCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcmMgPSBwY2lfd3JpdGVfY29uZmlnX3dvcmQoYWRwLT5wZGV2LCBvZmYsICh1MTYpdmFsKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlyYyA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQoYWRwLT5wZGV2LCBvZmYsIHZhbCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJjID0gLUVJTlZBTDsKKwkJc3RzID0gQkNfU1RTX0lOVl9BUkc7CisJCUJDTUxPR19FUlIoIkludmFsaWQgbGVuOiVkXG4iLCBsZW4pOworCX07CisKKwlpZiAocmMgJiYgKHN0cyA9PSBCQ19TVFNfU1VDQ0VTUykpCisJCXN0cyA9IEJDX1NUU19FUlJPUjsKKworCXJldHVybiBzdHM7Cit9CisKKy8qKgorICogYmNfa2Vybl9kbWFfYWxsb2MgLSBBbGxvY2F0ZSBtZW1vcnkgZm9yIERtYSByaW5ncworICogQGFkcDogQWRhcHRlciBpbnN0YW5jZQorICogQHN6OiBTaXplIG9mIHRoZSBtZW1vcnkgdG8gYWxsb2NhdGUuCisgKiBAcGh5X2FkZHI6IFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSBhbGxvY2F0ZWQuCisgKgkgICBUeXBlZGVmIHRvIHN5c3RlbSdzIGRtYV9hZGRyX3QgKHU2NCkKKyAqCisgKiBSZXR1cm46CisgKiAgUG9pbnRlciB0byBhbGxvY2F0ZWQgbWVtb3J5Li4KKyAqCisgKiBXcmFwcGVyIHRvIExpbnV4IGtlcm5lbCBpbnRlcmZhY2UuCisgKgorICovCit2b2lkICpiY19rZXJuX2RtYV9hbGxvYyhzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLCB1aW50MzJfdCBzeiwKKwkJCWRtYV9hZGRyX3QgKnBoeV9hZGRyKQoreworCXZvaWQgKnRlbXAgPSBOVUxMOworCisJaWYgKCFhZHAgfHwgIXN6IHx8ICFwaHlfYWRkcikgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkZSBBcmcuLlxuIik7CisJCXJldHVybiB0ZW1wOworCX0KKworCXRlbXAgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZHAtPnBkZXYsIHN6LCBwaHlfYWRkcik7CisJaWYgKHRlbXApCisJCW1lbXNldCh0ZW1wLCAwLCBzeik7CisKKwlyZXR1cm4gdGVtcDsKK30KKworLyoqCisgKiBiY19rZXJuX2RtYV9mcmVlIC0gUmVsZWFzZSBEbWEgcmluZyBtZW1vcnkuCisgKiBAYWRwOiBBZGFwdGVyIGluc3RhbmNlCisgKiBAc3o6IFNpemUgb2YgdGhlIG1lbW9yeSB0byBhbGxvY2F0ZS4KKyAqIEBrYTogS2VybmVsIHZpcnR1YWwgYWRkcmVzcyByZXR1cm5lZCBkdXJpbmcgX2Rpb19hbGxvYygpCisgKiBAcGh5X2FkZHI6IFBoeXNpY2FsIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSBhbGxvY2F0ZWQuCisgKgkgICBUeXBlZGVmIHRvIHN5c3RlbSdzIGRtYV9hZGRyX3QgKHU2NCkKKyAqCisgKiBSZXR1cm46CisgKiAgICAgbm9uZS4KKyAqLwordm9pZCBiY19rZXJuX2RtYV9mcmVlKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIHVpbnQzMl90IHN6LCB2b2lkICprYSwKKwkJICAgICAgZG1hX2FkZHJfdCBwaHlfYWRkcikKK3sKKwlpZiAoIWFkcCB8fCAha2EgfHwgIXN6IHx8ICFwaHlfYWRkcikgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkZSBBcmcuLlxuIik7CisJCXJldHVybjsKKwl9CisKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGFkcC0+cGRldiwgc3osIGthLCBwaHlfYWRkcik7Cit9CisKKy8qKgorICogY3J5c3RhbGhkX2NyZWF0ZV9kaW9xIC0gQ3JlYXRlIEdlbmVyaWMgRElPIHF1ZXVlCisgKiBAYWRwOiBBZGFwdGVyIGluc3RhbmNlCisgKiBAZGlvcV9obmQ6IEhhbmRsZSB0byB0aGUgZGlvIHF1ZXVlIGNyZWF0ZWQKKyAqIEBjYgk6IE9wdGlvbmFsIC0gQ2FsbCBiYWNrIFRvIGZyZWUgdGhlIGVsZW1lbnQuCisgKiBAY2JjdHg6IENvbnRleHQgdG8gcGFzcyB0byBjYWxsYmFjay4KKyAqCisgKiBSZXR1cm46CisgKiAgc3RhdHVzCisgKgorICogSW5pdGlhbGl6ZSBHZW5lcmljIERJTyBxdWV1ZSB0byBob2xkIGFueSBkYXRhLiBDYWxsYmFjaworICogd2lsbCBiZSB1c2VkIHRvIGZyZWUgZWxlbWVudHMgd2hpbGUgZGVsZXRpbmcgdGhlIHF1ZXVlLgorICovCitCQ19TVEFUVVMgY3J5c3RhbGhkX2NyZWF0ZV9kaW9xKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsCisJCQkgICAgICBjcnlzdGFsaGRfZGlvcV90ICoqZGlvcV9obmQsCisJCQkgICAgICBjcnlzdGFsaGRfZGF0YV9mcmVlX2NiIGNiLCB2b2lkICpjYmN0eCkKK3sKKwljcnlzdGFsaGRfZGlvcV90ICpkaW9xID0gTlVMTDsKKworCWlmICghYWRwIHx8ICFkaW9xX2huZCkgeworCQlCQ01MT0dfRVJSKCJJbnZhbGlkIGFyZyEhXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCWRpb3EgPSBremFsbG9jKHNpemVvZigqZGlvcSksIEdGUF9LRVJORUwpOworCWlmICghZGlvcSkKKwkJcmV0dXJuIEJDX1NUU19JTlNVRkZfUkVTOworCisJc3Bpbl9sb2NrX2luaXQoJmRpb3EtPmxvY2spOworCWRpb3EtPnNpZyA9IEJDX0xJTktfRElPUV9TSUc7CisJZGlvcS0+aGVhZCA9IChjcnlzdGFsaGRfZWxlbV90ICopJmRpb3EtPmhlYWQ7CisJZGlvcS0+dGFpbCA9IChjcnlzdGFsaGRfZWxlbV90ICopJmRpb3EtPmhlYWQ7CisJY3J5c3RhbGhkX2NyZWF0ZV9ldmVudCgmZGlvcS0+ZXZlbnQpOworCWRpb3EtPmFkcCA9IGFkcDsKKwlkaW9xLT5kYXRhX3JlbF9jYiA9IGNiOworCWRpb3EtPmNiX2NvbnRleHQgPSBjYmN0eDsKKwkqZGlvcV9obmQgPSBkaW9xOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCisvKioKKyAqIGNyeXN0YWxoZF9kZWxldGVfZGlvcSAtIERlbGV0ZSBHZW5lcmljIERJTyBxdWV1ZQorICogQGFkcDogQWRhcHRlciBpbnN0YW5jZQorICogQGRpb3E6IERJT1EgaW5zdGFuY2UuLgorICoKKyAqIFJldHVybjoKKyAqICBOb25lLgorICoKKyAqIFJlbGVhc2UgR2VuZXJpYyBESU8gcXVldWUuIFRoaXMgZnVuY3Rpb24gd2lsbCByZW1vdmUKKyAqIGFsbCB0aGUgZW50cmllcyBmcm9tIHRoZSBRdWV1ZSBhbmQgd2lsbCByZWxlYXNlIGRhdGEKKyAqIGJ5IGNhbGxpbmcgdGhlIGNhbGwgYmFjayBwcm92aWRlZCBkdXJpbmcgY3JlYXRpb24uCisgKgorICovCit2b2lkIGNyeXN0YWxoZF9kZWxldGVfZGlvcShzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLCBjcnlzdGFsaGRfZGlvcV90ICpkaW9xKQoreworCXZvaWQgKnRlbXA7CisKKwlpZiAoIWRpb3EgfHwgKGRpb3EtPnNpZyAhPSBCQ19MSU5LX0RJT1FfU0lHKSkKKwkJcmV0dXJuOworCisJZG8geworCQl0ZW1wID0gY3J5c3RhbGhkX2Rpb3FfZmV0Y2goZGlvcSk7CisJCWlmICh0ZW1wICYmIGRpb3EtPmRhdGFfcmVsX2NiKQorCQkJZGlvcS0+ZGF0YV9yZWxfY2IoZGlvcS0+Y2JfY29udGV4dCwgdGVtcCk7CisJfSB3aGlsZSAodGVtcCk7CisJZGlvcS0+c2lnID0gMDsKKwlrZnJlZShkaW9xKTsKK30KKworLyoqCisgKiBjcnlzdGFsaGRfZGlvcV9hZGQgLSBBZGQgbmV3IERJTyByZXF1ZXN0IGVsZW1lbnQuCisgKiBAaW9xOiBESU8gcXVldWUgaW5zdGFuY2UKKyAqIEB0OiBESU8gcmVxdWVzdCB0byBiZSBhZGRlZC4KKyAqIEB3YWtlOiBUcnVlIC0gV2FrZSB1cCBzdXNwZW5kZWQgcHJvY2Vzcy4KKyAqIEB0YWc6IFNwZWNpYWwgdGFnIHRvIGFzc2lnbiAtIEZvciBzZWFyY2ggYW5kIGdldC4KKyAqCisgKiBSZXR1cm46CisgKiAgU3RhdHVzLgorICoKKyAqIEluc2VydCBuZXcgZWxlbWVudCB0byBRIHRhaWwuCisgKi8KK0JDX1NUQVRVUyBjcnlzdGFsaGRfZGlvcV9hZGQoY3J5c3RhbGhkX2Rpb3FfdCAqaW9xLCB2b2lkICpkYXRhLAorCQkJICAgYm9vbCB3YWtlLCB1aW50MzJfdCB0YWcpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJY3J5c3RhbGhkX2VsZW1fdCAqdG1wOworCisJaWYgKCFpb3EgfHwgKGlvcS0+c2lnICE9IEJDX0xJTktfRElPUV9TSUcpIHx8ICFkYXRhKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgYXJnISFcbiIpOworCQlyZXR1cm4gQkNfU1RTX0lOVl9BUkc7CisJfQorCisJdG1wID0gY3J5c3RhbGhkX2FsbG9jX2VsZW0oaW9xLT5hZHApOworCWlmICghdG1wKSB7CisJCUJDTUxPR19FUlIoIk5vIGZyZWUgZWxlbWVudHMuXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlNVRkZfUkVTOworCX0KKworCXRtcC0+ZGF0YSA9IGRhdGE7CisJdG1wLT50YWcgPSB0YWc7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvcS0+bG9jaywgZmxhZ3MpOworCXRtcC0+ZmxpbmsgPSAoY3J5c3RhbGhkX2VsZW1fdCAqKSZpb3EtPmhlYWQ7CisJdG1wLT5ibGluayA9IGlvcS0+dGFpbDsKKwl0bXAtPmZsaW5rLT5ibGluayA9IHRtcDsKKwl0bXAtPmJsaW5rLT5mbGluayA9IHRtcDsKKwlpb3EtPmNvdW50Kys7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9xLT5sb2NrLCBmbGFncyk7CisKKwlpZiAod2FrZSkKKwkJY3J5c3RhbGhkX3NldF9ldmVudCgmaW9xLT5ldmVudCk7CisKKwlyZXR1cm4gQkNfU1RTX1NVQ0NFU1M7Cit9CisKKy8qKgorICogY3J5c3RhbGhkX2Rpb3FfZmV0Y2ggLSBGZXRjaCBlbGVtZW50IGZyb20gaGVhZC4KKyAqIEBpb3E6IERJTyBxdWV1ZSBpbnN0YW5jZQorICoKKyAqIFJldHVybjoKKyAqCWRhdGEgZWxlbWVudCBmcm9tIHRoZSBoZWFkLi4KKyAqCisgKiBSZW1vdmUgYW4gZWxlbWVudCBmcm9tIFF1ZXVlLgorICovCit2b2lkICpjcnlzdGFsaGRfZGlvcV9mZXRjaChjcnlzdGFsaGRfZGlvcV90ICppb3EpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJY3J5c3RhbGhkX2VsZW1fdCAqdG1wOworCWNyeXN0YWxoZF9lbGVtX3QgKnJldCA9IE5VTEw7CisJdm9pZCAqZGF0YSA9IE5VTEw7CisKKwlpZiAoIWlvcSB8fCAoaW9xLT5zaWcgIT0gQkNfTElOS19ESU9RX1NJRykpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBhcmchIVxuIik7CisJCXJldHVybiBkYXRhOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb3EtPmxvY2ssIGZsYWdzKTsKKwl0bXAgPSBpb3EtPmhlYWQ7CisJaWYgKHRtcCAhPSAoY3J5c3RhbGhkX2VsZW1fdCAqKSZpb3EtPmhlYWQpIHsKKwkJcmV0ID0gdG1wOworCQl0bXAtPmZsaW5rLT5ibGluayA9IHRtcC0+Ymxpbms7CisJCXRtcC0+YmxpbmstPmZsaW5rID0gdG1wLT5mbGluazsKKwkJaW9xLT5jb3VudC0tOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb3EtPmxvY2ssIGZsYWdzKTsKKwlpZiAocmV0KSB7CisJCWRhdGEgPSByZXQtPmRhdGE7CisJCWNyeXN0YWxoZF9mcmVlX2VsZW0oaW9xLT5hZHAsIHJldCk7CisJfQorCisJcmV0dXJuIGRhdGE7Cit9CisvKioKKyAqIGNyeXN0YWxoZF9kaW9xX2ZpbmRfYW5kX2ZldGNoIC0gU2VhcmNoIHRoZSB0YWcgYW5kIEZldGNoIGVsZW1lbnQKKyAqIEBpb3E6IERJTyBxdWV1ZSBpbnN0YW5jZQorICogQHRhZzogVGFnIHRvIHNlYXJjaCBmb3IuCisgKgorICogUmV0dXJuOgorICoJZWxlbWVudCBmcm9tIHRoZSBoZWFkLi4KKyAqCisgKiBTZWFyY2ggVEFHIGFuZCByZW1vdmUgdGhlIGVsZW1lbnQuCisgKi8KK3ZvaWQgKmNyeXN0YWxoZF9kaW9xX2ZpbmRfYW5kX2ZldGNoKGNyeXN0YWxoZF9kaW9xX3QgKmlvcSwgdWludDMyX3QgdGFnKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCWNyeXN0YWxoZF9lbGVtX3QgKnRtcDsKKwljcnlzdGFsaGRfZWxlbV90ICpyZXQgPSBOVUxMOworCXZvaWQgKmRhdGEgPSBOVUxMOworCisJaWYgKCFpb3EgfHwgKGlvcS0+c2lnICE9IEJDX0xJTktfRElPUV9TSUcpKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgYXJnISFcbiIpOworCQlyZXR1cm4gZGF0YTsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9xLT5sb2NrLCBmbGFncyk7CisJdG1wID0gaW9xLT5oZWFkOworCXdoaWxlICh0bXAgIT0gKGNyeXN0YWxoZF9lbGVtX3QgKikmaW9xLT5oZWFkKSB7CisJCWlmICh0bXAtPnRhZyA9PSB0YWcpIHsKKwkJCXJldCA9IHRtcDsKKwkJCXRtcC0+ZmxpbmstPmJsaW5rID0gdG1wLT5ibGluazsKKwkJCXRtcC0+YmxpbmstPmZsaW5rID0gdG1wLT5mbGluazsKKwkJCWlvcS0+Y291bnQtLTsKKwkJCWJyZWFrOworCQl9CisJCXRtcCA9IHRtcC0+Zmxpbms7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvcS0+bG9jaywgZmxhZ3MpOworCisJaWYgKHJldCkgeworCQlkYXRhID0gcmV0LT5kYXRhOworCQljcnlzdGFsaGRfZnJlZV9lbGVtKGlvcS0+YWRwLCByZXQpOworCX0KKworCXJldHVybiBkYXRhOworfQorCisvKioKKyAqIGNyeXN0YWxoZF9kaW9xX2ZldGNoX3dhaXQgLSBGZXRjaCBlbGVtZW50IGZyb20gSGVhZC4KKyAqIEBpb3E6IERJTyBxdWV1ZSBpbnN0YW5jZQorICogQHRvX3NlY3M6IFdhaXQgdGltZW91dCBpbiBzZWNvbmRzLi4KKyAqCisgKiBSZXR1cm46CisgKgllbGVtZW50IGZyb20gdGhlIGhlYWQuLgorICoKKyAqIFJldHVybiBlbGVtZW50IGZyb20gaGVhZCBpZiBRIGlzIG5vdCBlbXB0eS4gV2FpdCBmb3IgbmV3IGVsZW1lbnQKKyAqIGlmIFEgaXMgZW1wdHkgZm9yIFRpbWVvdXQgc2Vjb25kcy4KKyAqLwordm9pZCAqY3J5c3RhbGhkX2Rpb3FfZmV0Y2hfd2FpdChjcnlzdGFsaGRfZGlvcV90ICppb3EsIHVpbnQzMl90IHRvX3NlY3MsCisJCQkgICAgICB1aW50MzJfdCAqc2lnX3BlbmQpCit7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CisJaW50IHJjID0gMCwgY291bnQ7CisJdm9pZCAqdG1wID0gTlVMTDsKKworCWlmICghaW9xIHx8IChpb3EtPnNpZyAhPSBCQ19MSU5LX0RJT1FfU0lHKSB8fCAhdG9fc2VjcyB8fCAhc2lnX3BlbmQpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBhcmchIVxuIik7CisJCXJldHVybiB0bXA7CisJfQorCisJY291bnQgPSB0b19zZWNzOworCXNwaW5fbG9ja19pcnFzYXZlKCZpb3EtPmxvY2ssIGZsYWdzKTsKKwl3aGlsZSAoKGlvcS0+Y291bnQgPT0gMCkgJiYgY291bnQpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9xLT5sb2NrLCBmbGFncyk7CisKKwkJY3J5c3RhbGhkX3dhaXRfb25fZXZlbnQoJmlvcS0+ZXZlbnQsIChpb3EtPmNvdW50ID4gMCksIDEwMDAsIHJjLCAwKTsKKwkJaWYgKHJjID09IDApIHsKKwkJCWdvdG8gb3V0OworCQl9IGVsc2UgaWYgKHJjID09IC1FSU5UUikgeworCQkJQkNNTE9HKEJDTUxPR19JTkZPLCAiQ2FuY2VsbGluZyBmZXRjaCB3YWl0XG4iKTsKKwkJCSpzaWdfcGVuZCA9IDE7CisJCQlyZXR1cm4gdG1wOworCQl9CisJCXNwaW5fbG9ja19pcnFzYXZlKCZpb3EtPmxvY2ssIGZsYWdzKTsKKwkJY291bnQtLTsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9xLT5sb2NrLCBmbGFncyk7CisKK291dDoKKwlyZXR1cm4gY3J5c3RhbGhkX2Rpb3FfZmV0Y2goaW9xKTsKK30KKworLyoqCisgKiBjcnlzdGFsaGRfbWFwX2RpbyAtIE1hcCB1c2VyIGFkZHJlc3MgZm9yIERNQQorICogQGFkcDoJQWRhcHRlciBpbnN0YW5jZQorICogQHVidWZmOglVc2VyIGJ1ZmZlciB0byBtYXAuCisgKiBAdWJ1ZmZfc3o6CVVzZXIgYnVmZmVyIHNpemUuCisgKiBAdXZfb2Zmc2V0OglVViBidWZmZXIgb2Zmc2V0LgorICogQGVuXzQyMm1vZGU6IFRSVUU6NDIyIEZBTFNFOjQyMCBDYXB0dXJlIG1vZGUuCisgKiBAZGlyX3R4OglUUlVFIGZvciBUeCAoVG8gZGV2aWNlIGZyb20gaG9zdCkKKyAqIEBkaW9faG5kOglIYW5kbGUgdG8gbWFwcGVkIERJTyByZXF1ZXN0LgorICoKKyAqIFJldHVybjoKKyAqCVN0YXR1cy4KKyAqCisgKiBUaGlzIHJvdXRpbmUgbWFwcyB1c2VyIGFkZHJlc3MgYW5kIGxvY2sgcGFnZXMgZm9yIERNQS4KKyAqCisgKi8KK0JDX1NUQVRVUyBjcnlzdGFsaGRfbWFwX2RpbyhzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwLCB2b2lkICp1YnVmZiwKKwkJCSAgdWludDMyX3QgdWJ1ZmZfc3osIHVpbnQzMl90IHV2X29mZnNldCwKKwkJCSAgYm9vbCBlbl80MjJtb2RlLCBib29sIGRpcl90eCwKKwkJCSAgY3J5c3RhbGhkX2Rpb19yZXEgKipkaW9faG5kKQoreworCWNyeXN0YWxoZF9kaW9fcmVxCSpkaW87CisJLyogRklYTUU6IGphcm9kOiBzaG91bGQgc29tZSBvZiB0aGVzZSB1bnNpZ25lZCBsb25ncyBiZSB1aW50MzJfdCBvciB1aW50cHRyX3Q/ICovCisJdW5zaWduZWQgbG9uZyBzdGFydCA9IDAsIGVuZCA9IDAsIHVhZGRyID0gMCwgY291bnQgPSAwOworCXVuc2lnbmVkIGxvbmcgc3BzeiA9IDAsIHV2X3N0YXJ0ID0gMDsKKwlpbnQgaSA9IDAsIHJ3ID0gMCwgcmVzID0gMCwgbnJfcGFnZXMgPSAwLCBza2lwX2ZiX3NnID0gMDsKKworCWlmICghYWRwIHx8ICF1YnVmZiB8fCAhdWJ1ZmZfc3ogfHwgIWRpb19obmQpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBhcmcgXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKwkvKiBDb21wdXRlIHBhZ2VzICovCisJdWFkZHIgPSAodW5zaWduZWQgbG9uZyl1YnVmZjsKKwljb3VudCA9ICh1bnNpZ25lZCBsb25nKXVidWZmX3N6OworCWVuZCA9ICh1YWRkciArIGNvdW50ICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKKwlzdGFydCA9IHVhZGRyID4+IFBBR0VfU0hJRlQ7CisJbnJfcGFnZXMgPSBlbmQgLSBzdGFydDsKKworCWlmICghY291bnQgfHwgKCh1YWRkciArIGNvdW50KSA8IHVhZGRyKSkgeworCQlCQ01MT0dfRVJSKCJVc2VyIGFkZHIgb3ZlcmZsb3chIVxuIik7CisJCXJldHVybiBCQ19TVFNfSU5WX0FSRzsKKwl9CisKKwlkaW8gPSBjcnlzdGFsaGRfYWxsb2NfZGlvKGFkcCk7CisJaWYgKCFkaW8pIHsKKwkJQkNNTE9HX0VSUigiZGlvIHBvb2wgZW1wdHkuLlxuIik7CisJCXJldHVybiBCQ19TVFNfSU5TVUZGX1JFUzsKKwl9CisKKwlpZiAoZGlyX3R4KSB7CisJCXJ3ID0gV1JJVEU7CisJCWRpby0+ZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKKwl9IGVsc2UgeworCQlydyA9IFJFQUQ7CisJCWRpby0+ZGlyZWN0aW9uID0gRE1BX0ZST01fREVWSUNFOworCX0KKworCWlmIChucl9wYWdlcyA+IGRpby0+bWF4X3BhZ2VzKSB7CisJCUJDTUxPR19FUlIoIm1heF9wYWdlcyglZCkgZXhjZWVkZWQoJWQpISFcbiIsCisJCQkgICBkaW8tPm1heF9wYWdlcywgbnJfcGFnZXMpOworCQljcnlzdGFsaGRfdW5tYXBfZGlvKGFkcCwgZGlvKTsKKwkJcmV0dXJuIEJDX1NUU19JTlNVRkZfUkVTOworCX0KKworCWlmICh1dl9vZmZzZXQpIHsKKwkJdXZfc3RhcnQgPSAodWFkZHIgKyAodW5zaWduZWQgbG9uZyl1dl9vZmZzZXQpICA+PiBQQUdFX1NISUZUOworCQlkaW8tPnVpbmZvLnV2X3NnX2l4ID0gdXZfc3RhcnQgLSBzdGFydDsKKwkJZGlvLT51aW5mby51dl9zZ19vZmYgPSAoKHVhZGRyICsgKHVuc2lnbmVkIGxvbmcpdXZfb2Zmc2V0KSAmIH5QQUdFX01BU0spOworCX0KKworCWRpby0+ZmJfc2l6ZSA9IHVidWZmX3N6ICYgMHgwMzsKKwlpZiAoZGlvLT5mYl9zaXplKSB7CisJCXJlcyA9IGNvcHlfZnJvbV91c2VyKGRpby0+ZmJfdmEsCisJCQkJICAgICAodm9pZCAqKSh1YWRkciArIGNvdW50IC0gZGlvLT5mYl9zaXplKSwKKwkJCQkgICAgIGRpby0+ZmJfc2l6ZSk7CisJCWlmIChyZXMpIHsKKwkJCUJDTUxPR19FUlIoImZhaWxlZCAlZCB0byBjb3B5ICV1IGZpbGwgYnl0ZXMgZnJvbSAlcFxuIiwKKwkJCQkgICByZXMsIGRpby0+ZmJfc2l6ZSwKKwkJCQkgICAodm9pZCAqKSh1YWRkciArIGNvdW50LWRpby0+ZmJfc2l6ZSkpOworCQkJY3J5c3RhbGhkX3VubWFwX2RpbyhhZHAsIGRpbyk7CisJCQlyZXR1cm4gQkNfU1RTX0lOU1VGRl9SRVM7CisJCX0KKwl9CisKKwlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisJcmVzID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sIHVhZGRyLCBucl9wYWdlcywgcncgPT0gUkVBRCwKKwkJCSAgICAgMCwgZGlvLT5wYWdlcywgTlVMTCk7CisJdXBfcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKworCS8qIFNhdmUgZm9yIHJlbGVhc2UuLiovCisJZGlvLT5zaWcgPSBjcnlzdGFsaGRfZGlvX2xvY2tlZDsKKwlpZiAocmVzIDwgbnJfcGFnZXMpIHsKKwkJQkNNTE9HX0VSUigiZ2V0IHBhZ2VzIGZhaWxlZDogJWQtJWRcbiIsIG5yX3BhZ2VzLCByZXMpOworCQlkaW8tPnBhZ2VfY250ID0gcmVzOworCQljcnlzdGFsaGRfdW5tYXBfZGlvKGFkcCwgZGlvKTsKKwkJcmV0dXJuIEJDX1NUU19FUlJPUjsKKwl9CisKKwlkaW8tPnBhZ2VfY250ID0gbnJfcGFnZXM7CisJLyogR2V0IHNjYXR0ZXIvZ2F0aGVyICovCisJY3J5c3RhbGhkX2luaXRfc2coZGlvLT5zZywgZGlvLT5wYWdlX2NudCk7CisJY3J5c3RhbGhkX3NldF9zZygmZGlvLT5zZ1swXSwgZGlvLT5wYWdlc1swXSwgMCwgdWFkZHIgJiB+UEFHRV9NQVNLKTsKKwlpZiAobnJfcGFnZXMgPiAxKSB7CisJCWRpby0+c2dbMF0ubGVuZ3RoID0gUEFHRV9TSVpFIC0gZGlvLT5zZ1swXS5vZmZzZXQ7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJCWRpby0+c2dbMF0uZG1hX2xlbmd0aCA9IGRpby0+c2dbMF0ubGVuZ3RoOworI2VuZGlmCisJCWNvdW50IC09IGRpby0+c2dbMF0ubGVuZ3RoOworCQlmb3IgKGkgPSAxOyBpIDwgbnJfcGFnZXM7IGkrKykgeworCQkJaWYgKGNvdW50IDwgNCkgeworCQkJCXNwc3ogPSBjb3VudDsKKwkJCQlza2lwX2ZiX3NnID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJc3BzeiA9IChjb3VudCA8IFBBR0VfU0laRSkgPworCQkJCQkoY291bnQgJiB+MHgwMykgOiBQQUdFX1NJWkU7CisJCQl9CisJCQljcnlzdGFsaGRfc2V0X3NnKCZkaW8tPnNnW2ldLCBkaW8tPnBhZ2VzW2ldLCBzcHN6LCAwKTsKKwkJCWNvdW50IC09IHNwc3o7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoY291bnQgPCA0KSB7CisJCQlkaW8tPnNnWzBdLmxlbmd0aCA9IGNvdW50OworCQkJc2tpcF9mYl9zZyA9IDE7CisJCX0gZWxzZSB7CisJCQlkaW8tPnNnWzBdLmxlbmd0aCA9IGNvdW50IC0gZGlvLT5mYl9zaXplOworCQl9CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCQlkaW8tPnNnWzBdLmRtYV9sZW5ndGggPSBkaW8tPnNnWzBdLmxlbmd0aDsKKyNlbmRpZgorCX0KKwlkaW8tPnNnX2NudCA9IHBjaV9tYXBfc2coYWRwLT5wZGV2LCBkaW8tPnNnLAorCQkJCSBkaW8tPnBhZ2VfY250LCBkaW8tPmRpcmVjdGlvbik7CisJaWYgKGRpby0+c2dfY250IDw9IDApIHsKKwkJQkNNTE9HX0VSUigic2cgbWFwICVkLSVkIFxuIiwgZGlvLT5zZ19jbnQsIGRpby0+cGFnZV9jbnQpOworCQljcnlzdGFsaGRfdW5tYXBfZGlvKGFkcCwgZGlvKTsKKwkJcmV0dXJuIEJDX1NUU19FUlJPUjsKKwl9CisJaWYgKGRpby0+c2dfY250ICYmIHNraXBfZmJfc2cpCisJCWRpby0+c2dfY250IC09IDE7CisJZGlvLT5zaWcgPSBjcnlzdGFsaGRfZGlvX3NnX21hcHBlZDsKKwkvKiBGaWxsIGluIFVzZXIgaW5mby4uICovCisJZGlvLT51aW5mby54ZnJfbGVuICAgPSB1YnVmZl9zejsKKwlkaW8tPnVpbmZvLnhmcl9idWZmICA9IHVidWZmOworCWRpby0+dWluZm8udXZfb2Zmc2V0ID0gdXZfb2Zmc2V0OworCWRpby0+dWluZm8uYjQyMm1vZGUgID0gZW5fNDIybW9kZTsKKwlkaW8tPnVpbmZvLmRpcl90eCAgICA9IGRpcl90eDsKKworCSpkaW9faG5kID0gZGlvOworCisJcmV0dXJuIEJDX1NUU19TVUNDRVNTOworfQorCisvKioKKyAqIGNyeXN0YWxoZF91bm1hcF9zZ2wgLSBSZWxlYXNlIG1hcHBlZCByZXNvdXJjZXMKKyAqIEBhZHA6IEFkYXB0ZXIgaW5zdGFuY2UKKyAqIEBkaW86IERJTyByZXF1ZXN0IGluc3RhbmNlCisgKgorICogUmV0dXJuOgorICoJU3RhdHVzLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyB0byB1bm1hcCB0aGUgdXNlciBidWZmZXIgcGFnZXMuCisgKi8KK0JDX1NUQVRVUyBjcnlzdGFsaGRfdW5tYXBfZGlvKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsIGNyeXN0YWxoZF9kaW9fcmVxICpkaW8pCit7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOworCWludCBqID0gMDsKKworCWlmICghYWRwIHx8ICFkaW8pIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBhcmcgXG4iKTsKKwkJcmV0dXJuIEJDX1NUU19JTlZfQVJHOworCX0KKworCWlmICgoZGlvLT5wYWdlX2NudCA+IDApICYmIChkaW8tPnNpZyAhPSBjcnlzdGFsaGRfZGlvX2ludikpIHsKKwkJZm9yIChqID0gMDsgaiA8IGRpby0+cGFnZV9jbnQ7IGorKykgeworCQkJcGFnZSA9IGRpby0+cGFnZXNbal07CisJCQlpZiAocGFnZSkgeworCQkJCWlmICghUGFnZVJlc2VydmVkKHBhZ2UpICYmCisJCQkJICAgIChkaW8tPmRpcmVjdGlvbiA9PSBETUFfRlJPTV9ERVZJQ0UpKQorCQkJCQlTZXRQYWdlRGlydHkocGFnZSk7CisJCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQkJfQorCQl9CisJfQorCWlmIChkaW8tPnNpZyA9PSBjcnlzdGFsaGRfZGlvX3NnX21hcHBlZCkKKwkJcGNpX3VubWFwX3NnKGFkcC0+cGRldiwgZGlvLT5zZywgZGlvLT5wYWdlX2NudCwgZGlvLT5kaXJlY3Rpb24pOworCisJY3J5c3RhbGhkX2ZyZWVfZGlvKGFkcCwgZGlvKTsKKworCXJldHVybiBCQ19TVFNfU1VDQ0VTUzsKK30KKworLyoqCisgKiBjcnlzdGFsaGRfY3JlYXRlX2Rpb19wb29sIC0gQWxsb2NhdGUgbWVtIHBvb2wgZm9yIERJTyBtYW5hZ2VtZW50LgorICogQGFkcDogQWRhcHRlciBpbnN0YW5jZQorICogQG1heF9wYWdlczogTWF4IHBhZ2VzIGZvciBzaXplIGNhbGN1bGF0aW9uLgorICoKKyAqIFJldHVybjoKKyAqCXN5c3RlbSBlcnJvci4KKyAqCisgKiBUaGlzIHJvdXRpbmUgY3JlYXRlcyBhIG1lbW9yeSBwb29sIHRvIGhvbGQgZGlvIGNvbnRleHQgZm9yCisgKiBmb3IgSFcgRGlyZWN0IElPIG9wZXJhdGlvbi4KKyAqLworaW50IGNyeXN0YWxoZF9jcmVhdGVfZGlvX3Bvb2woc3RydWN0IGNyeXN0YWxoZF9hZHAgKmFkcCwgdWludDMyX3QgbWF4X3BhZ2VzKQoreworCXVpbnQzMl90IGFzeiA9IDAsIGkgPSAwOworCXVpbnQ4X3QJKnRlbXA7CisJY3J5c3RhbGhkX2Rpb19yZXEgKmRpbzsKKworCWlmICghYWRwIHx8ICFtYXhfcGFnZXMpIHsKKwkJQkNNTE9HX0VSUigiSW52YWxpZCBBcmchIVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEdldCBkbWEgbWVtb3J5IGZvciBmaWxsIGJ5dGUgaGFuZGxpbmcuLiovCisJYWRwLT5maWxsX2J5dGVfcG9vbCA9IHBjaV9wb29sX2NyZWF0ZSgiY3J5c3RhbGhkX2ZieXRlIiwKKwkJCQkJICAgICAgYWRwLT5wZGV2LCA4LCA4LCAwKTsKKwlpZiAoIWFkcC0+ZmlsbF9ieXRlX3Bvb2wpIHsKKwkJQkNNTE9HX0VSUigiZmFpbGVkIHRvIGNyZWF0ZSBmaWxsIGJ5dGUgcG9vbFxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEdldCB0aGUgbWF4IHNpemUgZnJvbSB1c2VyIGJhc2VkIG9uIDQyMC80MjIgbW9kZXMgKi8KKwlhc3ogPSAgKHNpemVvZigqZGlvLT5wYWdlcykgKiBtYXhfcGFnZXMpICsKKwkgICAgICAgKHNpemVvZigqZGlvLT5zZykgKiBtYXhfcGFnZXMpICsgc2l6ZW9mKCpkaW8pOworCisJQkNNTE9HKEJDTUxPR19EQkcsICJJbml0aWFsaXppbmcgRGlvIHBvb2wgJWQgJWQgJXggJXBcbiIsCisJICAgICAgIEJDX0xJTktfU0dfUE9PTF9TWiwgbWF4X3BhZ2VzLCBhc3osIGFkcC0+ZmlsbF9ieXRlX3Bvb2wpOworCisJZm9yIChpID0gMDsgaSA8IEJDX0xJTktfU0dfUE9PTF9TWjsgaSsrKSB7CisJCXRlbXAgPSAodWludDhfdCAqKWt6YWxsb2MoYXN6LCBHRlBfS0VSTkVMKTsKKwkJaWYgKCh0ZW1wKSA9PSBOVUxMKSB7CisJCQlCQ01MT0dfRVJSKCJGYWlsZWQgdG8gYWxsb2MgJWQgbWVtXG4iLCBhc3opOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQlkaW8gPSAoY3J5c3RhbGhkX2Rpb19yZXEgKil0ZW1wOworCQl0ZW1wICs9IHNpemVvZigqZGlvKTsKKwkJZGlvLT5wYWdlcyA9IChzdHJ1Y3QgcGFnZSAqKil0ZW1wOworCQl0ZW1wICs9IChzaXplb2YoKmRpby0+cGFnZXMpICogbWF4X3BhZ2VzKTsKKwkJZGlvLT5zZyA9IChzdHJ1Y3Qgc2NhdHRlcmxpc3QgKil0ZW1wOworCQlkaW8tPm1heF9wYWdlcyA9IG1heF9wYWdlczsKKwkJZGlvLT5mYl92YSA9IHBjaV9wb29sX2FsbG9jKGFkcC0+ZmlsbF9ieXRlX3Bvb2wsIEdGUF9LRVJORUwsCisJCQkJCSAgICAmZGlvLT5mYl9wYSk7CisJCWlmICghZGlvLT5mYl92YSkgeworCQkJQkNNTE9HX0VSUigiZmlsbCBieXRlIGFsbG9jIGZhaWxlZC5cbiIpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKworCQljcnlzdGFsaGRfZnJlZV9kaW8oYWRwLCBkaW8pOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGNyeXN0YWxoZF9kZXN0cm95X2Rpb19wb29sIC0gUmVsZWFzZSBESU8gbWVtIHBvb2wuCisgKiBAYWRwOiBBZGFwdGVyIGluc3RhbmNlCisgKgorICogUmV0dXJuOgorICoJbm9uZS4KKyAqCisgKiBUaGlzIHJvdXRpbmUgcmVsZWFzZXMgZGlvIG1lbW9yeSBwb29sIGR1cmluZyBjbG9zZS4KKyAqLwordm9pZCBjcnlzdGFsaGRfZGVzdHJveV9kaW9fcG9vbChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwKQoreworCWNyeXN0YWxoZF9kaW9fcmVxICpkaW87CisJaW50IGNvdW50ID0gMDsKKworCWlmICghYWRwKSB7CisJCUJDTUxPR19FUlIoIkludmFsaWQgQXJnISFcbiIpOworCQlyZXR1cm47CisJfQorCisJZG8geworCQlkaW8gPSBjcnlzdGFsaGRfYWxsb2NfZGlvKGFkcCk7CisJCWlmIChkaW8pIHsKKwkJCWlmIChkaW8tPmZiX3ZhKQorCQkJCXBjaV9wb29sX2ZyZWUoYWRwLT5maWxsX2J5dGVfcG9vbCwKKwkJCQkJICAgICAgZGlvLT5mYl92YSwgZGlvLT5mYl9wYSk7CisJCQljb3VudCsrOworCQkJa2ZyZWUoZGlvKTsKKwkJfQorCX0gd2hpbGUgKGRpbyk7CisKKwlpZiAoYWRwLT5maWxsX2J5dGVfcG9vbCkgeworCQlwY2lfcG9vbF9kZXN0cm95KGFkcC0+ZmlsbF9ieXRlX3Bvb2wpOworCQlhZHAtPmZpbGxfYnl0ZV9wb29sID0gTlVMTDsKKwl9CisKKwlCQ01MT0coQkNNTE9HX0RCRywgIlJlbGVhc2VkIGRpbyBwb29sICVkIFxuIiwgY291bnQpOworfQorCisvKioKKyAqIGNyeXN0YWxoZF9jcmVhdGVfZWxlbV9wb29sIC0gTGlzdCBlbGVtZW50IHBvb2wgY3JlYXRpb24uCisgKiBAYWRwOiBBZGFwdGVyIGluc3RhbmNlCisgKiBAcG9vbF9zaXplOiBOdW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIHBvb2wuCisgKgorICogUmV0dXJuOgorICoJMCAtIHN1Y2Nlc3MsIDwwIGVycm9yCisgKgorICogQ3JlYXRlIGdlbmVyYWwgcHVycG9zZSBsaXN0IGVsZW1lbnQgcG9vbCB0byBob2xkIHBlbmRpbmcsCisgKiBhbmQgYWN0aXZlIHJlcXVlc3RzLgorICovCitpbnQgX19kZXZpbml0IGNyeXN0YWxoZF9jcmVhdGVfZWxlbV9wb29sKHN0cnVjdCBjcnlzdGFsaGRfYWRwICphZHAsCisJCXVpbnQzMl90IHBvb2xfc2l6ZSkKK3sKKwl1aW50MzJfdCBpOworCWNyeXN0YWxoZF9lbGVtX3QgKnRlbXA7CisKKwlpZiAoIWFkcCB8fCAhcG9vbF9zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCBwb29sX3NpemU7IGkrKykgeworCQl0ZW1wID0ga3phbGxvYyhzaXplb2YoKnRlbXApLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF0ZW1wKSB7CisJCQlCQ01MT0dfRVJSKCJrYWxsb2MgZmFpbGVkIFxuIik7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQljcnlzdGFsaGRfZnJlZV9lbGVtKGFkcCwgdGVtcCk7CisJfQorCUJDTUxPRyhCQ01MT0dfREJHLCAiYWxsb2NhdGVkICVkIGVsZW1cbiIsIHBvb2xfc2l6ZSk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogY3J5c3RhbGhkX2RlbGV0ZV9lbGVtX3Bvb2wgLSBMaXN0IGVsZW1lbnQgcG9vbCBkZWxldGlvbi4KKyAqIEBhZHA6IEFkYXB0ZXIgaW5zdGFuY2UKKyAqCisgKiBSZXR1cm46CisgKglub25lCisgKgorICogRGVsZXRlIGdlbmVyYWwgcHVycG9zZSBsaXN0IGVsZW1lbnQgcG9vbC4KKyAqLwordm9pZCBjcnlzdGFsaGRfZGVsZXRlX2VsZW1fcG9vbChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqYWRwKQoreworCWNyeXN0YWxoZF9lbGVtX3QgKnRlbXA7CisJaW50IGRiZ19jbnQgPSAwOworCisJaWYgKCFhZHApCisJCXJldHVybjsKKworCWRvIHsKKwkJdGVtcCA9IGNyeXN0YWxoZF9hbGxvY19lbGVtKGFkcCk7CisJCWlmICh0ZW1wKSB7CisJCQlrZnJlZSh0ZW1wKTsKKwkJCWRiZ19jbnQrKzsKKwkJfQorCX0gd2hpbGUgKHRlbXApOworCisJQkNNTE9HKEJDTUxPR19EQkcsICJyZWxlYXNlZCAlZCBlbGVtXG4iLCBkYmdfY250KTsKK30KKworLyo9PT09PT09PT09PT09PT09IERlYnVnIHN1cHBvcnQgcm91dGluZXMuLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCit2b2lkIGNyeXN0YWxoZF9zaG93X2J1ZmZlcih1aW50MzJfdCBvZmYsIHVpbnQ4X3QgKmJ1ZmYsIHVpbnQzMl90IGR3Y291bnQpCit7CisJdWludDMyX3QgaSwgayA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgZHdjb3VudDsgaSsrKSB7CisJCWlmIChrID09IDEpCisJCQlCQ01MT0coQkNNTE9HX0RBVEEsICIweCUwOFggOiAiLCBvZmYpOworCisJCUJDTUxPRyhCQ01MT0dfREFUQSwgIiAweCUwOFggIiwgKigodWludDMyX3QgKilidWZmKSk7CisKKwkJYnVmZiArPSBzaXplb2YodWludDMyX3QpOworCQlvZmYgICs9IHNpemVvZih1aW50MzJfdCk7CisJCWsrKzsKKwkJaWYgKChpID09IGR3Y291bnQgLSAxKSB8fCAoayA+IDQpKSB7CisJCQlCQ01MT0coQkNNTE9HX0RBVEEsICJcbiIpOworCQkJayA9IDE7CisJCX0KKwl9Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9taXNjLmggYi9kcml2ZXJzL3N0YWdpbmcvY3J5c3RhbGhkL2NyeXN0YWxoZF9taXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJhYTZhZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jcnlzdGFsaGQvY3J5c3RhbGhkX21pc2MuaApAQCAtMCwwICsxLDIyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDksIEJyb2FkY29tIENvcnBvcmF0aW9uLgorICoKKyAqICBOYW1lOiBjcnlzdGFsaGRfbWlzYyAuIGgKKyAqCisgKiAgRGVzY3JpcHRpb246CisgKgkJQkNNNzAwMTIgTGludXggZHJpdmVyIGdlbmVyYWwgcHVycG9zZSByb3V0aW5lcy4KKyAqCQlJbmNsdWRlcyByZWcvbWVtIHJlYWQgYW5kIHdyaXRlIHJvdXRpbmVzLgorICoKKyAqICBISVNUT1JZOgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgY3J5c3RhbGhkIGRldmljZSBkcml2ZXIuCisgKgorICogVGhpcyBkcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZS4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBkcml2ZXIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfQ1JZU1RBTEhEX01JU0NfSF8KKyNkZWZpbmUgX0NSWVNUQUxIRF9NSVNDX0hfCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSAiYmNfZHRzX2dsb2JfbG54LmgiCisKKy8qIEdsb2JhbCBsb2cgbGV2ZWwgdmFyaWFibGUgZGVmaW5lZCBpbiBjcnlzdGFsX21pc2MuYyBmaWxlICovCitleHRlcm4gdWludDMyX3QgZ19saW5rbG9nX2xldmVsOworCisvKiBHbG9iYWwgZWxlbWVudCBwb29sIGZvciBhbGwgUXVldWUgbWFuYWdlbWVudC4KKyAqIFRYOiBBY3RpdmUgPSBCQ19UWF9MSVNUX0NOVCwgRnJlZSA9IEJDX1RYX0xJU1RfQ05ULgorICogUlg6IEZyZWUgPSBCQ19SWF9MSVNUX0NOVCwgQWN0aXZlID0gMgorICogRlctQ01EOiA0CisgKi8KKyNkZWZpbmUJQkNfTElOS19FTEVNX1BPT0xfU1oJKChCQ19UWF9MSVNUX0NOVCAqIDIpICsgQkNfUlhfTElTVF9DTlQgKyAyICsgNCkKKworLyogRHJpdmVyJ3MgSU9EQVRBIHBvb2wgY291bnQgKi8KKyNkZWZpbmUJQ0hEX0lPREFUQV9QT09MX1NaICAgIChCQ19JT0NUTF9EQVRBX1BPT0xfU0laRSAqIEJDX0xJTktfTUFYX09QRU5TKQorCisvKiBTY2F0dGVyIEdhdGhlciBtZW1vcnkgcG9vbCBzaXplIGZvciBUeCBhbmQgUnggKi8KKyNkZWZpbmUgQkNfTElOS19TR19QT09MX1NaICAgIChCQ19UWF9MSVNUX0NOVCArIEJDX1JYX0xJU1RfQ05UKQorCitlbnVtIF9jcnlzdGFsaGRfZGlvX3NpZyB7CisJY3J5c3RhbGhkX2Rpb19pbnYgPSAwLAorCWNyeXN0YWxoZF9kaW9fbG9ja2VkLAorCWNyeXN0YWxoZF9kaW9fc2dfbWFwcGVkLAorfTsKKworc3RydWN0IGNyeXN0YWxoZF9kaW9fdXNlcl9pbmZvIHsKKwl2b2lkCQkJKnhmcl9idWZmOworCXVpbnQzMl90CQl4ZnJfbGVuOworCXVpbnQzMl90CQl1dl9vZmZzZXQ7CisJYm9vbAkJCWRpcl90eDsKKworCXVpbnQzMl90CQl1dl9zZ19peDsKKwl1aW50MzJfdAkJdXZfc2dfb2ZmOworCWludAkJCWNvbXBfc3RzOworCWludAkJCWV2X3N0czsKKwl1aW50MzJfdAkJeV9kb25lX3N6OworCXVpbnQzMl90CQl1dl9kb25lX3N6OworCXVpbnQzMl90CQljb21wX2ZsYWdzOworCWJvb2wJCQliNDIybW9kZTsKK307CisKK3R5cGVkZWYgc3RydWN0IF9jcnlzdGFsaGRfZGlvX3JlcSB7CisJdWludDMyX3QJCQlzaWc7CisJdWludDMyX3QJCQltYXhfcGFnZXM7CisJc3RydWN0IHBhZ2UJCQkqKnBhZ2VzOworCXN0cnVjdCBzY2F0dGVybGlzdAkJKnNnOworCWludAkJCQlzZ19jbnQ7CisJaW50CQkJCXBhZ2VfY250OworCWludAkJCQlkaXJlY3Rpb247CisJc3RydWN0IGNyeXN0YWxoZF9kaW9fdXNlcl9pbmZvCXVpbmZvOworCXZvaWQJCQkJKmZiX3ZhOworCXVpbnQzMl90CQkJZmJfc2l6ZTsKKwlkbWFfYWRkcl90CQkJZmJfcGE7CisJc3RydWN0IF9jcnlzdGFsaGRfZGlvX3JlcQkJKm5leHQ7Cit9IGNyeXN0YWxoZF9kaW9fcmVxOworCisjZGVmaW5lIEJDX0xJTktfRElPUV9TSUcJKDB4MDkyMjMyODApCisKK3R5cGVkZWYgc3RydWN0IF9jcnlzdGFsaGRfZWxlbV9zIHsKKwlzdHJ1Y3QgX2NyeXN0YWxoZF9lbGVtX3MJKmZsaW5rOworCXN0cnVjdCBfY3J5c3RhbGhkX2VsZW1fcwkqYmxpbms7CisJdm9pZAkJCSpkYXRhOworCXVpbnQzMl90CQl0YWc7Cit9IGNyeXN0YWxoZF9lbGVtX3Q7CisKK3R5cGVkZWYgdm9pZCAoKmNyeXN0YWxoZF9kYXRhX2ZyZWVfY2IpKHZvaWQgKmNvbnRleHQsIHZvaWQgKmRhdGEpOworCit0eXBlZGVmIHN0cnVjdCBfY3J5c3RhbGhkX2Rpb3FfcyB7CisJdWludDMyX3QJCXNpZzsKKwlzdHJ1Y3QgY3J5c3RhbGhkX2FkcAkqYWRwOworCWNyeXN0YWxoZF9lbGVtX3QJCSpoZWFkOworCWNyeXN0YWxoZF9lbGVtX3QJCSp0YWlsOworCXVpbnQzMl90CQljb3VudDsKKwlzcGlubG9ja190CQlsb2NrOworCXdhaXRfcXVldWVfaGVhZF90CWV2ZW50OworCWNyeXN0YWxoZF9kYXRhX2ZyZWVfY2IJZGF0YV9yZWxfY2I7CisJdm9pZAkJCSpjYl9jb250ZXh0OworfSBjcnlzdGFsaGRfZGlvcV90OworCit0eXBlZGVmIHZvaWQgKCpod19jb21wX2NhbGxiYWNrKShjcnlzdGFsaGRfZGlvX3JlcSAqLAorCQkJCSB3YWl0X3F1ZXVlX2hlYWRfdCAqZXZlbnQsIEJDX1NUQVRVUyBzdHMpOworCisvKj09PT09PT09PSBEZWNvZGVyICg3NDEyKSByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMuPT09PT09PT09PT09PT09PT0gKi8KK3VpbnQzMl90IGJjX2RlY19yZWdfcmQoc3RydWN0IGNyeXN0YWxoZF9hZHAgKiwgdWludDMyX3QpOwordm9pZCBiY19kZWNfcmVnX3dyKHN0cnVjdCBjcnlzdGFsaGRfYWRwICosIHVpbnQzMl90LCB1aW50MzJfdCk7CisKKy8qPT09PT09PT09IExpbmsgKDcwMDEyKSByZWdpc3RlciBhY2Nlc3Mgcm91dGluZXMuLiA9PT09PT09PT09PT09PT09PSovCit1aW50MzJfdCBjcnlzdGFsaGRfcmVnX3JkKHN0cnVjdCBjcnlzdGFsaGRfYWRwICosIHVpbnQzMl90KTsKK3ZvaWQgY3J5c3RhbGhkX3JlZ193cihzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqLCB1aW50MzJfdCwgdWludDMyX3QpOworCisvKj09PT09PT09PSBEZWNvZGVyICg3NDEyKSBtZW1vcnkgYWNjZXNzIHJvdXRpbmVzLi49PT09PT09PT09PT09PT09PSovCitCQ19TVEFUVVMgY3J5c3RhbGhkX21lbV9yZChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqLCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90ICopOworQkNfU1RBVFVTIGNyeXN0YWxoZF9tZW1fd3Ioc3RydWN0IGNyeXN0YWxoZF9hZHAgKiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCAqKTsKKworLyo9PT09PT09PT09TGluayAoNzAwMTIpIFBDSWUgQ29uZmlnIGFjY2VzcyByb3V0aW5lcy49PT09PT09PT09PT09PT09Ki8KK0JDX1NUQVRVUyBjcnlzdGFsaGRfcGNpX2NmZ19yZChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqLCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90ICopOworQkNfU1RBVFVTIGNyeXN0YWxoZF9wY2lfY2ZnX3dyKHN0cnVjdCBjcnlzdGFsaGRfYWRwICosIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QpOworCisvKj09PT09PT09PSBMaW51eCBLZXJuZWwgSW50ZXJmYWNlIHJvdXRpbmVzLiA9PT09PT09PT09PT09PT09PT09PT09PSAqLwordm9pZCAqYmNfa2Vybl9kbWFfYWxsb2Moc3RydWN0IGNyeXN0YWxoZF9hZHAgKiwgdWludDMyX3QsIGRtYV9hZGRyX3QgKik7Cit2b2lkIGJjX2tlcm5fZG1hX2ZyZWUoc3RydWN0IGNyeXN0YWxoZF9hZHAgKiwgdWludDMyX3QsCisJCSAgICAgIHZvaWQgKiwgZG1hX2FkZHJfdCk7CisjZGVmaW5lIGNyeXN0YWxoZF9jcmVhdGVfZXZlbnQoX2V2KQlpbml0X3dhaXRxdWV1ZV9oZWFkKF9ldikKKyNkZWZpbmUgY3J5c3RhbGhkX3NldF9ldmVudChfZXYpCQl3YWtlX3VwX2ludGVycnVwdGlibGUoX2V2KQorI2RlZmluZSBjcnlzdGFsaGRfd2FpdF9vbl9ldmVudChldiwgY29uZGl0aW9uLCB0aW1lb3V0LCByZXQsIG5vc2lnKQlcCitkbyB7CQkJCQkJCQkJXAorCURFQ0xBUkVfV0FJVFFVRVVFKGVudHJ5LCBjdXJyZW50KTsJCQkJXAorCXVuc2lnbmVkIGxvbmcgZW5kID0gamlmZmllcyArICgodGltZW91dCAqIEhaKSAvIDEwMDApOwkJXAorCQlyZXQgPSAwOwkJCQkJCVwKKwlhZGRfd2FpdF9xdWV1ZShldiwgJmVudHJ5KTsJCQkJCVwKKwlmb3IgKDs7KSB7CQkJCQkJCVwKKwkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwkJXAorCQlpZiAoY29uZGl0aW9uKSB7CQkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJCX0JCQkJCQkJXAorCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBlbmQpKSB7CQkJXAorCQkJcmV0ID0gLUVCVVNZOwkJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQl9CQkJCQkJCVwKKwkJc2NoZWR1bGVfdGltZW91dCgoSFogLyAxMDAgPiAxKSA/IEhaIC8gMTAwIDogMSk7CVwKKwkJaWYgKCFub3NpZyAmJiBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewkJXAorCQkJcmV0ID0gLUVJTlRSOwkJCQkJXAorCQkJYnJlYWs7CQkJCQkJXAorCQl9CQkJCQkJCVwKKwl9CQkJCQkJCQlcCisJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOwkJCQlcCisJcmVtb3ZlX3dhaXRfcXVldWUoZXYsICZlbnRyeSk7CQkJCQlcCit9IHdoaWxlICgwKQorCisvKj09PT09PT09PT09PT09PT0gRGlyZWN0IElPIG1hcHBpbmcgcm91dGluZXMgPT09PT09PT09PT09PT09PT09Ki8KK2V4dGVybiBpbnQgY3J5c3RhbGhkX2NyZWF0ZV9kaW9fcG9vbChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqLCB1aW50MzJfdCk7CitleHRlcm4gdm9pZCBjcnlzdGFsaGRfZGVzdHJveV9kaW9fcG9vbChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqKTsKK2V4dGVybiBCQ19TVEFUVVMgY3J5c3RhbGhkX21hcF9kaW8oc3RydWN0IGNyeXN0YWxoZF9hZHAgKiwgdm9pZCAqLCB1aW50MzJfdCwKKwkJCQkgICB1aW50MzJfdCwgYm9vbCwgYm9vbCwgY3J5c3RhbGhkX2Rpb19yZXEqKik7CisKK2V4dGVybiBCQ19TVEFUVVMgY3J5c3RhbGhkX3VubWFwX2RpbyhzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqLCBjcnlzdGFsaGRfZGlvX3JlcSopOworI2RlZmluZSBjcnlzdGFsaGRfZ2V0X3NnbGVfcGFkZHIoX2RpbywgX2l4KSAoY3B1X3RvX2xlNjQoc2dfZG1hX2FkZHJlc3MoJl9kaW8tPnNnW19peF0pKSkKKyNkZWZpbmUgY3J5c3RhbGhkX2dldF9zZ2xlX2xlbihfZGlvLCBfaXgpIChjcHVfdG9fbGUzMihzZ19kbWFfbGVuKCZfZGlvLT5zZ1tfaXhdKSkpCisKKy8qPT09PT09PT09PT09PT09PSBHZW5lcmFsIFB1cnBvc2UgUXVldWVzID09PT09PT09PT09PT09PT09PSovCitleHRlcm4gQkNfU1RBVFVTIGNyeXN0YWxoZF9jcmVhdGVfZGlvcShzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqLCBjcnlzdGFsaGRfZGlvcV90ICoqLCBjcnlzdGFsaGRfZGF0YV9mcmVlX2NiICwgdm9pZCAqKTsKK2V4dGVybiB2b2lkIGNyeXN0YWxoZF9kZWxldGVfZGlvcShzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqLCBjcnlzdGFsaGRfZGlvcV90ICopOworZXh0ZXJuIEJDX1NUQVRVUyBjcnlzdGFsaGRfZGlvcV9hZGQoY3J5c3RhbGhkX2Rpb3FfdCAqaW9xLCB2b2lkICpkYXRhLCBib29sIHdha2UsIHVpbnQzMl90IHRhZyk7CitleHRlcm4gdm9pZCAqY3J5c3RhbGhkX2Rpb3FfZmV0Y2goY3J5c3RhbGhkX2Rpb3FfdCAqaW9xKTsKK2V4dGVybiB2b2lkICpjcnlzdGFsaGRfZGlvcV9maW5kX2FuZF9mZXRjaChjcnlzdGFsaGRfZGlvcV90ICppb3EsIHVpbnQzMl90IHRhZyk7CitleHRlcm4gdm9pZCAqY3J5c3RhbGhkX2Rpb3FfZmV0Y2hfd2FpdChjcnlzdGFsaGRfZGlvcV90ICppb3EsIHVpbnQzMl90IHRvX3NlY3MsIHVpbnQzMl90ICpzaWdfcGVuZCk7CisKKyNkZWZpbmUgY3J5c3RhbGhkX2Rpb3FfY291bnQoX2lvcSkJKChfaW9xKSA/IF9pb3EtPmNvdW50IDogMCkKKworZXh0ZXJuIGludCBjcnlzdGFsaGRfY3JlYXRlX2VsZW1fcG9vbChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqLCB1aW50MzJfdCk7CitleHRlcm4gdm9pZCBjcnlzdGFsaGRfZGVsZXRlX2VsZW1fcG9vbChzdHJ1Y3QgY3J5c3RhbGhkX2FkcCAqKTsKKworCisvKj09PT09PT09PT09PT09PT0gRGVidWcgcm91dGluZXMvbWFjcm9zIC4uID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KK2V4dGVybiB2b2lkIGNyeXN0YWxoZF9zaG93X2J1ZmZlcih1aW50MzJfdCBvZmYsIHVpbnQ4X3QgKmJ1ZmYsIHVpbnQzMl90IGR3Y291bnQpOworCitlbnVtIF9jaGRfbG9nX2xldmVscyB7CisJQkNNTE9HX0VSUk9SCQk9IDB4ODAwMDAwMDAsCS8qIERvbid0IGRpc2FibGUgdGhpcyBvcHRpb24gKi8KKwlCQ01MT0dfREFUQQkJPSAweDQwMDAwMDAwLAkvKiBEYXRhLCBlbmFibGUgYnkgZGVmYXVsdCAqLworCUJDTUxPR19TUElOTE9DSwkJPSAweDIwMDAwMDAwLAkvKiBTcGNpYWwgY2FzZSBmb3IgU3BpbiBsb2NrcyovCisKKwkvKiBGb2xsb3dpbmcgYXJlIGFsbG93ZWQgb25seSBpbiBkZWJ1ZyBtb2RlICovCisJQkNNTE9HX0lORk8JCT0gMHgwMDAwMDAwMSwJLyogR2VuZXJpYyBpbmZvcm1hdGlvbmFsICovCisJQkNNTE9HX0RCRwkJPSAweDAwMDAwMDAyLAkvKiBGaXJzdCBsZXZlbCBEZWJ1ZyBpbmZvICovCisJQkNNTE9HX1NTVEVQCQk9IDB4MDAwMDAwMDQsCS8qIFN0ZXBwaW5nIGluZm9ybWF0aW9uICovCisJQkNNTE9HX0VOVEVSX0xFQVZFCT0gMHgwMDAwMDAwOCwJLyogc3RhY2sgdHJhY2tpbmcgKi8KK307CisKKyNkZWZpbmUgQkNNTE9HX0VOVEVSCQkJCVwKK2lmIChnX2xpbmtsb2dfbGV2ZWwgJiBCQ01MT0dfRU5URVJfTEVBVkUpIHsJXAorCXByaW50aygiRW50ZXJlZCAlc1xuIiwgX19mdW5jX18pOwlcCit9CisKKyNkZWZpbmUgQkNNTE9HX0xFQVZFCQkJCVwKK2lmIChnX2xpbmtsb2dfbGV2ZWwgJiBCQ01MT0dfRU5URVJfTEVBVkUpIHsJXAorCXByaW50aygiTGVhdmluZyAlc1xuIiwgX19mdW5jX18pOwlcCit9CisKKyNkZWZpbmUgQkNNTE9HKHRyYWNlLCBmbXQsIGFyZ3MuLi4pCQlcCitpZiAoZ19saW5rbG9nX2xldmVsICYgdHJhY2UpIHsJCQlcCisJcHJpbnRrKGZtdCwgIyNhcmdzKTsJCQlcCit9CisKKyNkZWZpbmUgQkNNTE9HX0VSUihmbXQsIGFyZ3MuLi4pCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCWlmIChnX2xpbmtsb2dfbGV2ZWwgJiBCQ01MT0dfRVJST1IpIHsJCQkJXAorCQlwcmludGsoIipFUlIqOiVzOiVkOiAiZm10LCBfX0ZJTEVfXywgX19MSU5FX18sICMjYXJncyk7CVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWF1ZHVwczExLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLWF1ZHVwczExLmMKaW5kZXggODljOGZlMi4uNDZjN2Y3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1hdWR1cHMxMS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtYXVkdXBzMTEuYwpAQCAtMzQzLDEwICszNDMsMTEgQEAKIAkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdGwpCiB7CiAJc3RydWN0IGN4MjU4MjFfZmggKmZoID0gcHJpdjsKLQlzdHJ1Y3QgY3gyNTgyMV9kZXYgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGN4MjU4MjFfZGV2ICpkZXY7CiAJaW50IGVycjsKIAogCWlmIChmaCkgeworCQlkZXYgPSBmaC0+ZGV2OwogCQllcnIgPSB2NGwyX3ByaW9fY2hlY2soJmRldi0+cHJpbywgJmZoLT5wcmlvKTsKIAkJaWYgKDAgIT0gZXJyKQogCQkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtbWVkdXNhLXZpZGVvLmMgYi9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLW1lZHVzYS12aWRlby5jCmluZGV4IDFlYjA3OWIuLmQ2MDE2MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtbWVkdXNhLXZpZGVvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS1tZWR1c2EtdmlkZW8uYwpAQCAtNzk1LDEwICs3OTUsOCBAQAogCXZhbHVlICY9IDB4RkZGRkZGREY7CiAJcmV0X3ZhbCA9IGN4MjU4MjFfaTJjX3dyaXRlKCZkZXYtPmkyY19idXNbMF0sIE1PTl9BX0NUUkwsIHZhbHVlKTsKIAotCWlmIChyZXRfdmFsIDwgMCkgewotCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJaWYgKHJldF92YWwgPCAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8uYyBiL2RyaXZlcnMvc3RhZ2luZy9jeDI1ODIxL2N4MjU4MjEtdmlkZW8uYwppbmRleCBjN2MxNGM3Li44Y2QzOTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvY3gyNTgyMS9jeDI1ODIxLXZpZGVvLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2N4MjU4MjEvY3gyNTgyMS12aWRlby5jCkBAIC04NzYsNyArODc2LDcgQEAKIAlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAluID0gaS0+aW5kZXg7Ci0JaWYgKG4gPiAyKQorCWlmIChuID49IDIpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKDAgPT0gSU5QVVQobiktPnR5cGUpCkBAIC05NjMsMTAgKzk2MywxMSBAQAogaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewogCXN0cnVjdCBjeDI1ODIxX2ZoICpmaCA9IHByaXY7Ci0Jc3RydWN0IGN4MjU4MjFfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBjeDI1ODIxX2RldiAqZGV2OwogCWludCBlcnI7CiAKIAlpZiAoZmgpIHsKKwkJZGV2ID0gZmgtPmRldjsKIAkJZXJyID0gdjRsMl9wcmlvX2NoZWNrKCZkZXYtPnByaW8sICZmaC0+cHJpbyk7CiAJCWlmICgwICE9IGVycikKIAkJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vY2FtZXJhL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vY2FtZXJhL0tjb25maWcKaW5kZXggMGEzZTkwMy4uYmZiNmQyNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2NhbWVyYS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9jYW1lcmEvS2NvbmZpZwpAQCAtMTUsNyArMTUsNyBAQAogCiBjb25maWcgTVNNX0NBTUVSQV9GTEFTSAogCWJvb2wgIlF1YWxjb21tIE1TTSBjYW1lcmEgZmxhc2ggc3VwcG9ydCIKLQlkZXBlbmRzIG9uIE1TTV9DQU1FUkEKKwlkZXBlbmRzIG9uIE1TTV9DQU1FUkEgJiYgQlJPS0VOCiAJLS0taGVscC0tLQogCSAgRW5hYmxlIHN1cHBvcnQgZm9yIExFRCBmbGFzaCBmb3IgbXNtIGNhbWVyYQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vY2FtZXJhL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2NhbWVyYS9NYWtlZmlsZQppbmRleCA0NDI5YWU1Li5kYjIyOGQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vY2FtZXJhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9jYW1lcmEvTWFrZWZpbGUKQEAgLTEsMyArMSw0IEBACitFWFRSQV9DRkxBR1M9LUlkcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZQogb2JqLSQoQ09ORklHX01UOVQwMTMpICs9IG10OXQwMTMubyBtdDl0MDEzX3JlZy5vCiBvYmotJChDT05GSUdfTVQ5RDExMikgKz0gbXQ5ZDExMi5vIG10OWQxMTJfcmVnLm8KIG9iai0kKENPTkZJR19NVDlQMDEyKSArPSBtdDlwMDEyX2ZveC5vIG10OXAwMTJfcmVnLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9jYW1lcmEvbXNtX2NhbWVyYS5jIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2NhbWVyYS9tc21fY2FtZXJhLmMKaW5kZXggN2Q5Mzg3Ny4uZGM3YzYwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2NhbWVyYS9tc21fY2FtZXJhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2NhbWVyYS9tc21fY2FtZXJhLmMKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDgtMjAwOSBRVUFMQ09NTSBJbmNvcnBvcmF0ZWQuCiAgKi8KIAotLy9GSVhNRTogbW9zdCBhbGxvY2F0aW9ucyBuZWVkIG5vdCBiZSBHRlBfQVRPTUlDCisvKiBGSVhNRTogbW9zdCBhbGxvY2F0aW9ucyBuZWVkIG5vdCBiZSBHRlBfQVRPTUlDICovCiAvKiBGSVhNRTogbWFuYWdlbWVudCBvZiBtdXRleGVzICovCiAvKiBGSVhNRTogbXNtX3BtZW1fcmVnaW9uX2xvb2t1cCByZXR1cm4gdmFsdWVzICovCiAvKiBGSVhNRTogd2F5IHRvbyBtYW55IGNvcHkgdG8vZnJvbSB1c2VyICovCkBAIC03NiwxNCArNzYsMTQgQEAKIAkJbGlzdF9kZWxfaW5pdCgmcWNtZC0+bGlzdCk7CQkJXAogCQlrZnJlZShxY21kKTsJCQkJCVwKIAl9OwkJCQkJCQlcCi19IHdoaWxlKDApCit9IHdoaWxlICgwKQogCiAjZGVmaW5lIE1TTV9EUkFJTl9RVUVVRShzeW5jLCBuYW1lKSBkbyB7CQkJXAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQkJCQlcCiAJc3Bpbl9sb2NrX2lycXNhdmUoJihzeW5jKS0+bmFtZSMjX2xvY2ssIGZsYWdzKTsJCVwKIAlNU01fRFJBSU5fUVVFVUVfTk9TWU5DKHN5bmMsIG5hbWUpOwkJCVwKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCYoc3luYyktPm5hbWUjI19sb2NrLCBmbGFncyk7CVwKLX0gd2hpbGUoMCkKK30gd2hpbGUgKDApCiAKIHN0YXRpYyBpbnQgY2hlY2tfb3ZlcmxhcChzdHJ1Y3QgaGxpc3RfaGVhZCAqcHR5cGUsCiAJCQl1bnNpZ25lZCBsb25nIHBhZGRyLApAQCAtMzYxLDcgKzM2MSw3IEBACiAJaWYgKCFmcmFtZS0+YnVmZmVyKSB7CiAJCXByX2VycigiJXM6IGNhbm5vdCBnZXQgZnJhbWUsIGludmFsaWQgbG9va3VwIGFkZHJlc3MgIgogCQkJInk9JXggY2Jjcj0leCBvZmZzZXQ9JWRcbiIsCi0JCQlfX0ZVTkNUSU9OX18sCisJCQlfX2Z1bmNfXywKIAkJCXBwaHktPnlfcGh5LAogCQkJcHBoeS0+Y2Jjcl9waHksCiAJCQlmcmFtZS0+eV9vZmYpOwpAQCAtNDU1LDcgKzQ1NSw3IEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgc3RydWN0IG1zbV9xdWV1ZV9jbWQqIF9fbXNtX2NvbnRyb2woc3RydWN0IG1zbV9zeW5jICpzeW5jLAorc3RhdGljIHN0cnVjdCBtc21fcXVldWVfY21kICpfX21zbV9jb250cm9sKHN0cnVjdCBtc21fc3luYyAqc3luYywKIAkJc3RydWN0IG1zbV9jb250cm9sX2RldmljZV9xdWV1ZSAqcXVldWUsCiAJCXN0cnVjdCBtc21fcXVldWVfY21kICpxY21kLAogCQlpbnQgdGltZW91dCkKQEAgLTU5Miw4ICs1OTIsNyBAQAogCSAqIGEgcmVzdWx0IG9mIGEgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uLCB3ZSBhcmUgZnJlZWluZyB0aGUgcWNtZCB0aGF0CiAJICogd2UgZGVxdWV1ZWQgZnJvbSBxdWV1ZS0+Y3RybF9zdGF0dXNfcS4KIAkgKi8KLQlpZiAocWNtZCkKLQkJa2ZyZWUocWNtZCk7CisJa2ZyZWUocWNtZCk7CiAKIAlDREJHKCJtc21fY29udHJvbDogZW5kIHJjID0gJWRcbiIsIHJjKTsKIAlyZXR1cm4gcmM7CkBAIC02NzAsNyArNjY5LDcgQEAKIAkJCQkJJihzdGF0cy5mZCkpOwogCQkJaWYgKCFzdGF0cy5idWZmZXIpIHsKIAkJCQlwcl9lcnIoIiVzOiBtc21fcG1lbV9zdGF0c19wdG92X2xvb2t1cCBlcnJvclxuIiwKLQkJCQkJX19GVU5DVElPTl9fKTsKKwkJCQkJX19mdW5jX18pOwogCQkJCXJjID0gLUVJTlZBTDsKIAkJCQlnb3RvIGZhaWx1cmU7CiAJCQl9CkBAIC03MTgsOCArNzE3LDcgQEAKIAkJCQkJYnVmLmZtYWluLmJ1ZmZlciA9CiAJCQkJCQkodW5zaWduZWQgbG9uZylyZWdpb24udmFkZHI7CiAJCQkJCWJ1Zi5mbWFpbi5mZCA9IHJlZ2lvbi5mZDsKLQkJCQl9Ci0JCQkJZWxzZSB7CisJCQkJfSBlbHNlIHsKIAkJCQkJcHJfZXJyKCIlczogcG1lbSBsb29rdXAgZmFpbGVkXG4iLAogCQkJCQkJX19mdW5jX18pOwogCQkJCQlyYyA9IC1FSU5WQUw7CkBAIC03OTYsOCArNzk0LDcgQEAKIAl9CiAKIGZhaWx1cmU6Ci0JaWYgKHFjbWQpCi0JCWtmcmVlKHFjbWQpOworCWtmcmVlKHFjbWQpOwogCiAJQ0RCRygibXNtX2dldF9zdGF0czogJWRcbiIsIHJjKTsKIAlyZXR1cm4gcmM7CkBAIC04MzgsOCArODM1LDggQEAKIAkJCWtmcmVlKHFjbWQpOwogCQkJZ290byBlbmQ7CiAJCX0KLQl9Ci0JZWxzZSBjdHJsY21kLT52YWx1ZSA9IE5VTEw7CisJfSBlbHNlCisJCWN0cmxjbWQtPnZhbHVlID0gTlVMTDsKIAogZW5kOgogCUNEQkcoIm1zbV9jdHJsX2NtZF9kb25lOiBlbmQgcmMgPSAlZFxuIiwgcmMpOwpAQCAtODY5LDE0ICs4NjYsMTQgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0Jc3dpdGNoKGNmZ2NtZC5jbWRfdHlwZSkgeworCXN3aXRjaCAoY2ZnY21kLmNtZF90eXBlKSB7CiAJY2FzZSBDTURfU1RBVFNfRU5BQkxFOgogCQlheGlfZGF0YS5idWZudW0xID0KIAkJCW1zbV9wbWVtX3JlZ2lvbl9sb29rdXAoJnN5bmMtPnN0YXRzLAogCQkJCQlNU01fUE1FTV9BRUNfQVdCLCAmcmVnaW9uWzBdLAogCQkJCQlOVU1fV0JfRVhQX1NUQVRfT1VUUFVUX0JVRkZFUlMpOwogCQlpZiAoIWF4aV9kYXRhLmJ1Zm51bTEpIHsKLQkJCXByX2VycigiJXM6IHBtZW0gcmVnaW9uIGxvb2t1cCBlcnJvclxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXByX2VycigiJXM6IHBtZW0gcmVnaW9uIGxvb2t1cCBlcnJvclxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYXhpX2RhdGEucmVnaW9uID0gJnJlZ2lvblswXTsKQEAgLTg4OCw3ICs4ODUsNyBAQAogCQkJCQlNU01fUE1FTV9BRiwgJnJlZ2lvblswXSwKIAkJCQkJTlVNX0FGX1NUQVRfT1VUUFVUX0JVRkZFUlMpOwogCQlpZiAoIWF4aV9kYXRhLmJ1Zm51bTEpIHsKLQkJCXByX2VycigiJXM6IHBtZW0gcmVnaW9uIGxvb2t1cCBlcnJvclxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXByX2VycigiJXM6IHBtZW0gcmVnaW9uIGxvb2t1cCBlcnJvclxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYXhpX2RhdGEucmVnaW9uID0gJnJlZ2lvblswXTsKQEAgLTg5OSw3ICs4OTYsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcl9lcnIoIiVzOiB1bmtub3duIGNvbW1hbmQgdHlwZSAlZFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgY2ZnY21kLmNtZF90eXBlKTsKKwkJCV9fZnVuY19fLCBjZmdjbWQuY21kX3R5cGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTkyOCw3ICs5MjUsNyBAQAogCQkJbXNtX3BtZW1fcmVnaW9uX2xvb2t1cCgmc3luYy0+ZnJhbWUsIHBtZW1fdHlwZSwKIAkJCQkmcmVnaW9uWzBdLCA4KTsKIAkJaWYgKCFheGlfZGF0YS5idWZudW0xKSB7Ci0JCQlwcl9lcnIoIiVzOiBwbWVtIHJlZ2lvbiBsb29rdXAgZXJyb3JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlwcl9lcnIoIiVzOiBwbWVtIHJlZ2lvbiBsb29rdXAgZXJyb3JcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOwpAQCAtOTM5LDcgKzkzNiw3IEBACiAJCQltc21fcG1lbV9yZWdpb25fbG9va3VwKCZzeW5jLT5mcmFtZSwgcG1lbV90eXBlLAogCQkJCSZyZWdpb25bMF0sIDgpOwogCQlpZiAoIWF4aV9kYXRhLmJ1Zm51bTIpIHsKLQkJCXByX2VycigiJXM6IHBtZW0gcmVnaW9uIGxvb2t1cCBlcnJvclxuIiwgX19GVU5DVElPTl9fKTsKKwkJCXByX2VycigiJXM6IHBtZW0gcmVnaW9uIGxvb2t1cCBlcnJvclxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJYnJlYWs7CkBAIC05NTAsNyArOTQ3LDcgQEAKIAkJCW1zbV9wbWVtX3JlZ2lvbl9sb29rdXAoJnN5bmMtPmZyYW1lLCBwbWVtX3R5cGUsCiAJCQkJJnJlZ2lvblswXSwgOCk7CiAJCWlmICghYXhpX2RhdGEuYnVmbnVtMSkgewotCQkJcHJfZXJyKCIlczogcG1lbSByZWdpb24gbG9va3VwIGVycm9yXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJcHJfZXJyKCIlczogcG1lbSByZWdpb24gbG9va3VwIGVycm9yXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCkBAIC05NTksNyArOTU2LDcgQEAKIAkJCW1zbV9wbWVtX3JlZ2lvbl9sb29rdXAoJnN5bmMtPmZyYW1lLCBwbWVtX3R5cGUsCiAJCQkJJnJlZ2lvbltheGlfZGF0YS5idWZudW0xXSwgOCk7CiAJCWlmICghYXhpX2RhdGEuYnVmbnVtMikgewotCQkJcHJfZXJyKCIlczogcG1lbSByZWdpb24gbG9va3VwIGVycm9yXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJcHJfZXJyKCIlczogcG1lbSByZWdpb24gbG9va3VwIGVycm9yXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlicmVhazsKQEAgLTk3MCw3ICs5NjcsNyBAQAogCQkJbXNtX3BtZW1fcmVnaW9uX2xvb2t1cCgmc3luYy0+ZnJhbWUsIHBtZW1fdHlwZSwKIAkJCQkmcmVnaW9uWzBdLCA4KTsKIAkJaWYgKCFheGlfZGF0YS5idWZudW0yKSB7Ci0JCQlwcl9lcnIoIiVzOiBwbWVtIHJlZ2lvbiBsb29rdXAgZXJyb3JcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlwcl9lcnIoIiVzOiBwbWVtIHJlZ2lvbiBsb29rdXAgZXJyb3JcbiIsIF9fZnVuY19fKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWJyZWFrOwpAQCAtOTgxLDcgKzk3OCw3IEBACiAKIAlkZWZhdWx0OgogCQlwcl9lcnIoIiVzOiB1bmtub3duIGNvbW1hbmQgdHlwZSAlZFxuIiwKLQkJCV9fRlVOQ1RJT05fXywgY2ZnY21kLT5jbWRfdHlwZSk7CisJCQlfX2Z1bmNfXywgY2ZnY21kLT5jbWRfdHlwZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTA0Nyw3ICsxMDQ0LDcgQEAKIAkJCXJjID0gc3luYy0+dmZlZm4udmZlX2NvbmZpZygmY2ZnY21kLCAmcHBoeSk7CiAJfSBlbHNlIHsKIAkJcHJfZXJyKCIlczogbXNtX3BtZW1fZnJhbWVfdnRvcF9sb29rdXAgZmFpbGVkXG4iLAotCQkJX19GVU5DVElPTl9fKTsKKwkJCV9fZnVuY19fKTsKIAkJcmMgPSAtRUlOVkFMOwogCX0KIApAQCAtMTEzMSw3ICsxMTI4LDcgQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJfZXJyKCIlczogdW5rbm93biBjb21tYW5kIHR5cGUgJWRcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIGNmZ2NtZC0+Y21kX3R5cGUpOworCQkJX19mdW5jX18sIGNmZ2NtZC0+Y21kX3R5cGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTExNDAsNyArMTEzNyw3IEBACiAJCQltc21fcG1lbV9yZWdpb25fbG9va3VwKCZzeW5jLT5zdGF0cywgcG1lbV90eXBlLAogCQkJCSZyZWdpb25bMF0sIE5VTV9XQl9FWFBfU1RBVF9PVVRQVVRfQlVGRkVSUyk7CiAJCWlmICghYXhpX2RhdGEuYnVmbnVtMSkgewotCQkJcHJfZXJyKCIlczogcG1lbSByZWdpb24gbG9va3VwIGVycm9yXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJcHJfZXJyKCIlczogcG1lbSByZWdpb24gbG9va3VwIGVycm9yXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlheGlfZGF0YS5yZWdpb24gPSAmcmVnaW9uWzBdOwpAQCAtMTE3Nyw3ICsxMTc0LDcgQEAKIAkJCWNmZ2NtZC5jbWRfdHlwZSA9IENNRF9TVEFUU19BRl9CVUZfUkVMRUFTRTsKIAkJZWxzZSB7CiAJCQlwcl9lcnIoIiVzOiBpbnZhbGlkIGJ1ZiB0eXBlICVkXG4iLAotCQkJCV9fRlVOQ1RJT05fXywKKwkJCQlfX2Z1bmNfXywKIAkJCQlidWYudHlwZSk7CiAJCQlyYyA9IC1FSU5WQUw7CiAJCQlnb3RvIHB1dF9kb25lOwpAQCAtMTIyMyw3ICsxMjIwLDcgQEAKIAogCWRlZmF1bHQ6CiAJCXByX2VycigiJXM6IHVua25vd24gY29tbWFuZCB0eXBlICVkXG4iLAotCQkJX19GVU5DVElPTl9fLAorCQkJX19mdW5jX18sCiAJCQljZmdjbWQuY21kX3R5cGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xNjIyLDcgKzE2MTksOCBAQAogCWludCByYzsKIAlzdHJ1Y3QgbXNtX2NvbnRyb2xfZGV2aWNlICpjdHJsX3Btc20gPSBmaWxlcC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBtc21fZGV2aWNlICpwbXNtID0gY3RybF9wbXNtLT5wbXNtOwotCXByaW50aygibXNtX2NhbWVyYTogUkVMRUFTRSAlc1xuIiwgZmlsZXAtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPICJtc21fY2FtZXJhOiBSRUxFQVNFICVzXG4iLAorCQkJCQlmaWxlcC0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCXJjID0gX19tc21fcmVsZWFzZShwbXNtLT5zeW5jKTsKIAlpZiAoIXJjKSB7CiAJCU1TTV9EUkFJTl9RVUVVRSgmY3RybF9wbXNtLT5jdHJsX3EsIGN0cmxfc3RhdHVzX3EpOwpAQCAtMTYzNiw3ICsxNjM0LDggQEAKIHsKIAlpbnQgcmM7CiAJc3RydWN0IG1zbV9kZXZpY2UgKnBtc20gPSBmaWxlcC0+cHJpdmF0ZV9kYXRhOwotCXByaW50aygibXNtX2NhbWVyYTogUkVMRUFTRSAlc1xuIiwgZmlsZXAtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lKTsKKwlwcmludGsoS0VSTl9JTkZPICJtc21fY2FtZXJhOiBSRUxFQVNFICVzXG4iLAorCQkJCQlmaWxlcC0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCXJjID0gX19tc21fcmVsZWFzZShwbXNtLT5zeW5jKTsKIAlpZiAoIXJjKSB7CiAJCU1TTV9EUkFJTl9RVUVVRShwbXNtLT5zeW5jLCBwcmV2X2ZyYW1lX3EpOwpAQCAtMTcyMCw3ICsxNzE5LDcgQEAKIAlxY21kLT50eXBlID0gcXR5cGU7CiAKIAlpZiAocXR5cGUgPT0gTVNNX0NBTV9RX1ZGRV9NU0cpIHsKLQkJc3dpdGNoKHZkYXRhLT50eXBlKSB7CisJCXN3aXRjaCAodmRhdGEtPnR5cGUpIHsKIAkJY2FzZSBWRkVfTVNHX09VVFBVVDE6CiAJCWNhc2UgVkZFX01TR19PVVRQVVQyOgogCQkJcWNtZF9mcmFtZSA9CkBAIC0xODg1LDggKzE4ODQsMTAgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlyYyA9IG1zbV9vcGVuX2NvbW1vbihpbm9kZSwgZmlsZXAsIDApOwotCWlmIChyYyA8IDApCisJaWYgKHJjIDwgMCkgeworCQlrZnJlZShjdHJsX3Btc20pOwogCQlyZXR1cm4gcmM7CisJfQogCiAJY3RybF9wbXNtLT5wbXNtID0gZmlsZXAtPnByaXZhdGVfZGF0YTsKIAlmaWxlcC0+cHJpdmF0ZV9kYXRhID0gY3RybF9wbXNtOwpAQCAtMTkyOSw3ICsxOTMwLDcgQEAKIAltZW1jcHkob3V0LT52YWx1ZSwgY3RybC0+dmFsdWUsIGN0cmwtPmxlbmd0aCk7CiAKIGVuZDoKLQlpZiAocmNtZCkga2ZyZWUocmNtZCk7CisJa2ZyZWUocmNtZCk7CiAJQ0RCRygiX19tc21fdjRsMl9jb250cm9sOiBlbmQgcmMgPSAlZFxuIiwgcmMpOwogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9jYW1lcmEvbXNtX3ZmZTd4LmMgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vY2FtZXJhL21zbV92ZmU3eC5jCmluZGV4IDMzYWIzYWMuLjYyZmQyNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9jYW1lcmEvbXNtX3ZmZTd4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2NhbWVyYS9tc21fdmZlN3guYwpAQCAtMjU1LDggKzI1NSw3IEBACiAKIAlleHRsZW4gPSBzaXplb2Yoc3RydWN0IHZmZV9mcmFtZV9leHRyYSk7CiAKLQlleHRkYXRhID0KLQkJa21hbGxvYyhzaXplb2YoZXh0bGVuKSwgR0ZQX0FUT01JQyk7CisJZXh0ZGF0YSA9IGttYWxsb2MoZXh0bGVuLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWV4dGRhdGEpIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlnb3RvIGluaXRfZmFpbDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9jYW1lcmEvczVrM2UyZnguYyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9jYW1lcmEvczVrM2UyZnguYwppbmRleCBlZGJhMTk4Li44NDE3OTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vY2FtZXJhL3M1azNlMmZ4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2NhbWVyYS9zNWszZTJmeC5jCkBAIC03NDMsMTIgKzc0MywxMiBAQAogCX0KIAogCS8qIGluaXRpYWxpemUgQUYgKi8KLQlpZiAoKHJjID0gczVrM2UyZnhfaTJjX3dyaXRlX2IoczVrM2UyZnhfY2xpZW50LT5hZGRyLAotCQkJMHgzMTQ2LCAweDNBKSkgPCAwKQorCXJjID0gczVrM2UyZnhfaTJjX3dyaXRlX2IoczVrM2UyZnhfY2xpZW50LT5hZGRyLCAweDMxNDYsIDB4M0EpOworCWlmIChyYyA8IDApCiAJCWdvdG8gaW5pdF9mYWlsMTsKIAotCWlmICgocmMgPSBzNWszZTJmeF9pMmNfd3JpdGVfYihzNWszZTJmeF9jbGllbnQtPmFkZHIsCi0JCQkweDMxMzAsIDB4MDMpKSA8IDApCisJcmMgPSBzNWszZTJmeF9pMmNfd3JpdGVfYihzNWszZTJmeF9jbGllbnQtPmFkZHIsIDB4MzEzMCwgMHgwMyk7CisJaWYgKHJjIDwgMCkKIAkJZ290byBpbml0X2ZhaWwxOwogCiAJZ290byBpbml0X2RvbmU7CkBAIC04MTQsMjAgKzgxNCwyMCBAQAogCiBzdGF0aWMgdWludDE2X3QgczVrM2UyZnhfZ2V0X3ByZXZfcGl4ZWxzX3BsKHZvaWQpCiB7Ci0JcmV0dXJuIChzNWszZTJmeF9yZWdfcGF0W1NfUkVTX1BSRVZJRVddLnNpemVfdyArCi0JCXM1azNlMmZ4X3JlZ19wYXRbU19SRVNfUFJFVklFV10uYmxrX3ApOworCXJldHVybiBzNWszZTJmeF9yZWdfcGF0W1NfUkVTX1BSRVZJRVddLnNpemVfdyArCisJCXM1azNlMmZ4X3JlZ19wYXRbU19SRVNfUFJFVklFV10uYmxrX3A7CiB9CiAKIHN0YXRpYyB1aW50MTZfdCBzNWszZTJmeF9nZXRfcGljdF9saW5lc19wZih2b2lkKQogewotCXJldHVybiAoczVrM2UyZnhfcmVnX3BhdFtTX1JFU19DQVBUVVJFXS5zaXplX2ggKwotCQlzNWszZTJmeF9yZWdfcGF0W1NfUkVTX0NBUFRVUkVdLmJsa19sKTsKKwlyZXR1cm4gczVrM2UyZnhfcmVnX3BhdFtTX1JFU19DQVBUVVJFXS5zaXplX2ggKworCQlzNWszZTJmeF9yZWdfcGF0W1NfUkVTX0NBUFRVUkVdLmJsa19sOwogfQogCiBzdGF0aWMgdWludDE2X3QgczVrM2UyZnhfZ2V0X3BpY3RfcGl4ZWxzX3BsKHZvaWQpCiB7Ci0JcmV0dXJuIChzNWszZTJmeF9yZWdfcGF0W1NfUkVTX0NBUFRVUkVdLnNpemVfdyArCi0JCXM1azNlMmZ4X3JlZ19wYXRbU19SRVNfQ0FQVFVSRV0uYmxrX3ApOworCXJldHVybiBzNWszZTJmeF9yZWdfcGF0W1NfUkVTX0NBUFRVUkVdLnNpemVfdyArCisJCXM1azNlMmZ4X3JlZ19wYXRbU19SRVNfQ0FQVFVSRV0uYmxrX3A7CiB9CiAKIHN0YXRpYyB1aW50MzJfdCBzNWszZTJmeF9nZXRfcGljdF9tYXhfZXhwX2xjKHZvaWQpCkBAIC0xMDkzLDE0ICsxMDkzLDEwIEBACiAKIAlhY3R1YWxfc3RlcCA9IHN0ZXBfZGlyZWN0aW9uICogKGludDE2X3QpbnVtX3N0ZXBzOwogCXBvc19vZmZzZXQgPSBpbml0X2NvZGUgKyBzNWszZTJmeF9jdHJsLT5jdXJyX2xlbnNfcG9zOwotCWdhaW4gPSBhY3R1YWxfc3RlcCAqIDB4NDAwIC8gNTsKKwlnYWluID0gKChhY3R1YWxfc3RlcCA8PCAxMCkgLyA1KSA+PiAxMDsKIAotCWZvciAoaSA9IDA7IGkgPD0gNDsgaSsrKSB7Ci0JCWlmIChhY3R1YWxfc3RlcCA+PSAwKQotCQkJc19tb3ZlW2ldID0gKCgoKGkrMSkqZ2FpbisweDIwMCkgLSAoaSpnYWluKzB4MjAwKSkvMHg0MDApOwotCQllbHNlCi0JCQlzX21vdmVbaV0gPSAoKCgoaSsxKSpnYWluLTB4MjAwKSAtIChpKmdhaW4tMHgyMDApKS8weDQwMCk7Ci0JfQorCWZvciAoaSA9IDA7IGkgPD0gNDsgaSsrKQorCQlzX21vdmVbaV0gPSBnYWluOwogCiAJLyogUmluZyBEYW1waW5nIENvZGUgKi8KIAlmb3IgKGkgPSAwOyBpIDw9IDQ7IGkrKykgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvYW5kcm9pZF9wbWVtLmggYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9saW51eC9hbmRyb2lkX3BtZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmMwNWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvYW5kcm9pZF9wbWVtLmgKQEAgLTAsMCArMSw4MCBAQAorLyogZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvYW5kcm9pZF9wbWVtLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgR29vZ2xlLCBJbmMuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfQU5EUk9JRF9QTUVNX0hfCisjZGVmaW5lIF9BTkRST0lEX1BNRU1fSF8KKworI2RlZmluZSBQTUVNX0lPQ1RMX01BR0lDICdwJworI2RlZmluZSBQTUVNX0dFVF9QSFlTCQlfSU9XKFBNRU1fSU9DVExfTUFHSUMsIDEsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgUE1FTV9NQVAJCV9JT1coUE1FTV9JT0NUTF9NQUdJQywgMiwgdW5zaWduZWQgaW50KQorI2RlZmluZSBQTUVNX0dFVF9TSVpFCQlfSU9XKFBNRU1fSU9DVExfTUFHSUMsIDMsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgUE1FTV9VTk1BUAkJX0lPVyhQTUVNX0lPQ1RMX01BR0lDLCA0LCB1bnNpZ25lZCBpbnQpCisvKiBUaGlzIGlvY3RsIHdpbGwgYWxsb2NhdGUgcG1lbSBzcGFjZSwgYmFja2luZyB0aGUgZmlsZSwgaXQgd2lsbCBmYWlsCisgKiBpZiB0aGUgZmlsZSBhbHJlYWR5IGhhcyBhbiBhbGxvY2F0aW9uLCBwYXNzIGl0IHRoZSBsZW4gYXMgdGhlIGFyZ3VtZW50CisgKiB0byB0aGUgaW9jdGwgKi8KKyNkZWZpbmUgUE1FTV9BTExPQ0FURQkJX0lPVyhQTUVNX0lPQ1RMX01BR0lDLCA1LCB1bnNpZ25lZCBpbnQpCisvKiBUaGlzIHdpbGwgY29ubmVjdCBhIG9uZSBwbWVtIGZpbGUgdG8gYW5vdGhlciwgcGFzcyB0aGUgZmlsZSB0aGF0IGlzIGFscmVhZHkKKyAqIGJhY2tlZCBpbiBtZW1vcnkgYXMgdGhlIGFyZ3VtZW50IHRvIHRoZSBpb2N0bAorICovCisjZGVmaW5lIFBNRU1fQ09OTkVDVAkJX0lPVyhQTUVNX0lPQ1RMX01BR0lDLCA2LCB1bnNpZ25lZCBpbnQpCisvKiBSZXR1cm5zIHRoZSB0b3RhbCBzaXplIG9mIHRoZSBwbWVtIHJlZ2lvbiBpdCBpcyBzZW50IHRvIGFzIGEgcG1lbV9yZWdpb24KKyAqIHN0cnVjdCAod2l0aCBvZmZzZXQgc2V0IHRvIDApLgorICovCisjZGVmaW5lIFBNRU1fR0VUX1RPVEFMX1NJWkUJX0lPVyhQTUVNX0lPQ1RMX01BR0lDLCA3LCB1bnNpZ25lZCBpbnQpCisvKiBSZXZva2VzIGdwdSByZWdpc3RlcnMgYW5kIHJlc2V0cyB0aGUgZ3B1LiAgUGFzcyBhIHBvaW50ZXIgdG8gdGhlCisgKiBzdGFydCBvZiB0aGUgbWFwcGVkIGdwdSByZWdzICh0aGUgdmFkZHIgcmV0dXJuZWQgYnkgbW1hcCkgYXMgdGhlIGFyZ3VtZW50LgorICovCisjZGVmaW5lIEhXM0RfUkVWT0tFX0dQVQkJX0lPVyhQTUVNX0lPQ1RMX01BR0lDLCA4LCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIEhXM0RfR1JBTlRfR1BVCQlfSU9XKFBNRU1fSU9DVExfTUFHSUMsIDksIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgSFczRF9XQUlUX0ZPUl9JTlRFUlJVUFQJX0lPVyhQTUVNX0lPQ1RMX01BR0lDLCAxMCwgdW5zaWduZWQgaW50KQorCitpbnQgZ2V0X3BtZW1fZmlsZShpbnQgZmQsIHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICp2c3RhcnQsCisJCSAgdW5zaWduZWQgbG9uZyAqZW5kLCBzdHJ1Y3QgZmlsZSAqKmZpbHApOworaW50IGdldF9wbWVtX3VzZXJfYWRkcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyAqc3RhcnQsCisJCSAgICAgICB1bnNpZ25lZCBsb25nICplbmQpOwordm9pZCBwdXRfcG1lbV9maWxlKHN0cnVjdCBmaWxlKiBmaWxlKTsKK3ZvaWQgZmx1c2hfcG1lbV9maWxlKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGxlbik7CisKK3N0cnVjdCBhbmRyb2lkX3BtZW1fcGxhdGZvcm1fZGF0YQoreworCWNvbnN0IGNoYXIqIG5hbWU7CisJLyogc3RhcnRpbmcgcGh5c2ljYWwgYWRkcmVzcyBvZiBtZW1vcnkgcmVnaW9uICovCisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwkvKiBzaXplIG9mIG1lbW9yeSByZWdpb24gKi8KKwl1bnNpZ25lZCBsb25nIHNpemU7CisJLyogc2V0IHRvIGluZGljYXRlIHRoZSByZWdpb24gc2hvdWxkIG5vdCBiZSBtYW5hZ2VkIHdpdGggYW4gYWxsb2NhdG9yICovCisJdW5zaWduZWQgbm9fYWxsb2NhdG9yOworCS8qIHNldCB0byBpbmRpY2F0ZSBtYXBzIG9mIHRoaXMgcmVnaW9uIHNob3VsZCBiZSBjYWNoZWQsIGlmIGEgbWl4IG9mCisJICogY2FjaGVkIGFuZCB1bmNhY2hlZCBpcyBkZXNpcmVkLCBzZXQgdGhpcyBhbmQgb3BlbiB0aGUgZGV2aWNlIHdpdGgKKwkgKiBPX1NZTkMgdG8gZ2V0IGFuIHVuY2FjaGVkIHJlZ2lvbiAqLworCXVuc2lnbmVkIGNhY2hlZDsKKwkvKiBUaGUgTVNNN2sgaGFzIGJpdHMgdG8gZW5hYmxlIGEgd3JpdGUgYnVmZmVyIGluIHRoZSBidXMgY29udHJvbGxlciovCisJdW5zaWduZWQgYnVmZmVyZWQ7Cit9OworCitzdHJ1Y3QgcG1lbV9yZWdpb24geworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworCXVuc2lnbmVkIGxvbmcgbGVuOworfTsKKworaW50IHBtZW1fc2V0dXAoc3RydWN0IGFuZHJvaWRfcG1lbV9wbGF0Zm9ybV9kYXRhICpwZGF0YSwKKwkgICAgICAgbG9uZyAoKmlvY3RsKShzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpLAorCSAgICAgICBpbnQgKCpyZWxlYXNlKShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKikpOworCitpbnQgcG1lbV9yZW1hcChzdHJ1Y3QgcG1lbV9yZWdpb24gKnJlZ2lvbiwgc3RydWN0IGZpbGUgKmZpbGUsCisJICAgICAgIHVuc2lnbmVkIG9wZXJhdGlvbik7CisKKyNlbmRpZiAvL19BTkRST0lEX1BQUF9IXworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9saW51eC9ncGlvX2V2ZW50LmggYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9saW51eC9ncGlvX2V2ZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZjNWRhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL2xpbnV4L2dwaW9fZXZlbnQuaApAQCAtMCwwICsxLDE1NCBAQAorLyogZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvZ3Bpb19ldmVudC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEdvb2dsZSwgSW5jLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX0xJTlVYX0dQSU9fRVZFTlRfSAorI2RlZmluZSBfTElOVVhfR1BJT19FVkVOVF9ICisKKyNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgorCitlbnVtIHsKKwlHUElPX0VWRU5UX0ZVTkNfVU5JTklUICA9IDB4MCwKKwlHUElPX0VWRU5UX0ZVTkNfSU5JVCAgICA9IDB4MSwKKwlHUElPX0VWRU5UX0ZVTkNfU1VTUEVORCA9IDB4MiwKKwlHUElPX0VWRU5UX0ZVTkNfUkVTVU1FICA9IDB4MywKK307CitzdHJ1Y3QgZ3Bpb19ldmVudF9pbmZvIHsKKwlpbnQgKCpmdW5jKShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsCisJCSAgICBzdHJ1Y3QgZ3Bpb19ldmVudF9pbmZvICppbmZvLAorCQkgICAgdm9pZCAqKmRhdGEsIGludCBmdW5jKTsKKwlpbnQgKCpldmVudCkoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LAorCQkgICAgIHN0cnVjdCBncGlvX2V2ZW50X2luZm8gKmluZm8sCisJCSAgICAgdm9pZCAqKmRhdGEsIHVuc2lnbmVkIGludCB0eXBlLAorCQkgICAgIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpOyAvKiBvdXQgZXZlbnRzICovCit9OworCitzdHJ1Y3QgZ3Bpb19ldmVudF9wbGF0Zm9ybV9kYXRhIHsKKwljb25zdCBjaGFyICpuYW1lOworCXN0cnVjdCBncGlvX2V2ZW50X2luZm8gKippbmZvOworCXNpemVfdCBpbmZvX2NvdW50OworCWludCAoKnBvd2VyKShjb25zdCBzdHJ1Y3QgZ3Bpb19ldmVudF9wbGF0Zm9ybV9kYXRhICpwZGF0YSwgYm9vbCBvbik7Cit9OworCisjZGVmaW5lIEdQSU9fRVZFTlRfREVWX05BTUUgImdwaW8tZXZlbnQiCisKKy8qIEtleSBtYXRyaXggKi8KKworZW51bSBncGlvX2V2ZW50X21hdHJpeF9mbGFncyB7CisJLyogdW5zZXQ6IGRyaXZlIGFjdGl2ZSBvdXRwdXQgbG93LCBzZXQ6IGRyaXZlIGFjdGl2ZSBvdXRwdXQgaGlnaCAqLworCUdQSU9LUEZfQUNUSVZFX0hJR0ggICAgICAgICAgICAgID0gMVUgPDwgMCwKKwlHUElPS1BGX0RFQk9VTkNFICAgICAgICAgICAgICAgICA9IDFVIDw8IDEsCisJR1BJT0tQRl9SRU1PVkVfU09NRV9QSEFOVE9NX0tFWVMgPSAxVSA8PCAyLAorCUdQSU9LUEZfUkVNT1ZFX1BIQU5UT01fS0VZUyAgICAgID0gR1BJT0tQRl9SRU1PVkVfU09NRV9QSEFOVE9NX0tFWVMgfAorCQkJCQkgICBHUElPS1BGX0RFQk9VTkNFLAorCUdQSU9LUEZfRFJJVkVfSU5BQ1RJVkUgICAgICAgICAgID0gMVUgPDwgMywKKwlHUElPS1BGX0xFVkVMX1RSSUdHRVJFRF9JUlEgICAgICA9IDFVIDw8IDQsCisJR1BJT0tQRl9QUklOVF9VTk1BUFBFRF9LRVlTICAgICAgPSAxVSA8PCAxNiwKKwlHUElPS1BGX1BSSU5UX01BUFBFRF9LRVlTICAgICAgICA9IDFVIDw8IDE3LAorCUdQSU9LUEZfUFJJTlRfUEhBTlRPTV9LRVlTICAgICAgID0gMVUgPDwgMTgsCit9OworCitleHRlcm4gaW50IGdwaW9fZXZlbnRfbWF0cml4X2Z1bmMoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LAorCQkJc3RydWN0IGdwaW9fZXZlbnRfaW5mbyAqaW5mbywgdm9pZCAqKmRhdGEsIGludCBmdW5jKTsKK3N0cnVjdCBncGlvX2V2ZW50X21hdHJpeF9pbmZvIHsKKwkvKiBpbml0aWFsaXplIHRvIGdwaW9fZXZlbnRfbWF0cml4X2Z1bmMgKi8KKwlzdHJ1Y3QgZ3Bpb19ldmVudF9pbmZvIGluZm87CisJLyogc2l6ZSBtdXN0IGJlIG5pbnB1dHMgKiBub3V0cHV0cyAqLworCWNvbnN0IHVuc2lnbmVkIHNob3J0ICprZXltYXA7CisJdW5zaWduZWQgaW50ICppbnB1dF9ncGlvczsKKwl1bnNpZ25lZCBpbnQgKm91dHB1dF9ncGlvczsKKwl1bnNpZ25lZCBpbnQgbmlucHV0czsKKwl1bnNpZ25lZCBpbnQgbm91dHB1dHM7CisJLyogdGltZSB0byB3YWl0IGJlZm9yZSByZWFkaW5nIGlucHV0cyBhZnRlciBkcml2aW5nIGVhY2ggb3V0cHV0ICovCisJa3RpbWVfdCBzZXR0bGVfdGltZTsKKwkvKiB0aW1lIHRvIHdhaXQgYmVmb3JlIHNjYW5uaW5nIHRoZSBrZXlwYWQgYSBzZWNvbmQgdGltZSAqLworCWt0aW1lX3QgZGVib3VuY2VfZGVsYXk7CisJa3RpbWVfdCBwb2xsX3RpbWU7CisJdW5zaWduZWQgZmxhZ3M7Cit9OworCisvKiBEaXJlY3RseSBjb25uZWN0ZWQgaW5wdXRzIGFuZCBvdXRwdXRzICovCisKK2VudW0gZ3Bpb19ldmVudF9kaXJlY3RfZmxhZ3MgeworCUdQSU9FREZfQUNUSVZFX0hJR0ggICAgICAgICA9IDFVIDw8IDAsCisvKglHUElPRURGX1VTRV9ET1dOX0lSUSAgICAgICAgPSAxVSA8PCAxLCAqLworLyoJR1BJT0VERl9VU0VfSVJRICAgICAgICAgICAgID0gKDFVIDw8IDIpIHwgR1BJT0lERl9VU0VfRE9XTl9JUlEsICovCisJR1BJT0VERl9QUklOVF9LRVlTICAgICAgICAgID0gMVUgPDwgOCwKKwlHUElPRURGX1BSSU5UX0tFWV9ERUJPVU5DRSAgPSAxVSA8PCA5LAorfTsKKworc3RydWN0IGdwaW9fZXZlbnRfZGlyZWN0X2VudHJ5IHsKKwl1aW50MzJfdCBncGlvOjIzOworCXVpbnQzMl90IGNvZGU6OTsKK307CisKKy8qIGlucHV0cyAqLworZXh0ZXJuIGludCBncGlvX2V2ZW50X2lucHV0X2Z1bmMoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LAorCQkJc3RydWN0IGdwaW9fZXZlbnRfaW5mbyAqaW5mbywgdm9pZCAqKmRhdGEsIGludCBmdW5jKTsKK3N0cnVjdCBncGlvX2V2ZW50X2lucHV0X2luZm8geworCS8qIGluaXRpYWxpemUgdG8gZ3Bpb19ldmVudF9pbnB1dF9mdW5jICovCisJc3RydWN0IGdwaW9fZXZlbnRfaW5mbyBpbmZvOworCWt0aW1lX3QgZGVib3VuY2VfdGltZTsKKwlrdGltZV90IHBvbGxfdGltZTsKKwl1aW50MTZfdCBmbGFnczsKKwl1aW50MTZfdCB0eXBlOworCWNvbnN0IHN0cnVjdCBncGlvX2V2ZW50X2RpcmVjdF9lbnRyeSAqa2V5bWFwOworCXNpemVfdCBrZXltYXBfc2l6ZTsKK307CisKKy8qIG91dHB1dHMgKi8KK2V4dGVybiBpbnQgZ3Bpb19ldmVudF9vdXRwdXRfZnVuYyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsCisJCQlzdHJ1Y3QgZ3Bpb19ldmVudF9pbmZvICppbmZvLCB2b2lkICoqZGF0YSwgaW50IGZ1bmMpOworZXh0ZXJuIGludCBncGlvX2V2ZW50X291dHB1dF9ldmVudChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsCisJCQlzdHJ1Y3QgZ3Bpb19ldmVudF9pbmZvICppbmZvLCB2b2lkICoqZGF0YSwKKwkJCXVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKTsKK3N0cnVjdCBncGlvX2V2ZW50X291dHB1dF9pbmZvIHsKKwkvKiBpbml0aWFsaXplIHRvIGdwaW9fZXZlbnRfb3V0cHV0X2Z1bmMgYW5kIGdwaW9fZXZlbnRfb3V0cHV0X2V2ZW50ICovCisJc3RydWN0IGdwaW9fZXZlbnRfaW5mbyBpbmZvOworCXVpbnQxNl90IGZsYWdzOworCXVpbnQxNl90IHR5cGU7CisJY29uc3Qgc3RydWN0IGdwaW9fZXZlbnRfZGlyZWN0X2VudHJ5ICprZXltYXA7CisJc2l6ZV90IGtleW1hcF9zaXplOworfTsKKworCisvKiBheGVzICovCisKK2VudW0gZ3Bpb19ldmVudF9heGlzX2ZsYWdzIHsKKwlHUElPRUFGX1BSSU5UX1VOS05PV05fRElSRUNUSU9OICA9IDFVIDw8IDE2LAorCUdQSU9FQUZfUFJJTlRfUkFXICAgICAgICAgICAgICAgID0gMVUgPDwgMTcsCisJR1BJT0VBRl9QUklOVF9FVkVOVCAgICAgICAgICAgICAgPSAxVSA8PCAxOCwKK307CisKK2V4dGVybiBpbnQgZ3Bpb19ldmVudF9heGlzX2Z1bmMoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LAorCQkJc3RydWN0IGdwaW9fZXZlbnRfaW5mbyAqaW5mbywgdm9pZCAqKmRhdGEsIGludCBmdW5jKTsKK3N0cnVjdCBncGlvX2V2ZW50X2F4aXNfaW5mbyB7CisJLyogaW5pdGlhbGl6ZSB0byBncGlvX2V2ZW50X2F4aXNfZnVuYyAqLworCXN0cnVjdCBncGlvX2V2ZW50X2luZm8gaW5mbzsKKwl1aW50OF90ICBjb3VudDsKKwl1aW50OF90ICB0eXBlOyAvKiBFVl9SRUwgb3IgRVZfQUJTICovCisJdWludDE2X3QgY29kZTsKKwl1aW50MTZfdCBkZWNvZGVkX3NpemU7CisJdWludDE2X3QgKCptYXApKHN0cnVjdCBncGlvX2V2ZW50X2F4aXNfaW5mbyAqaW5mbywgdWludDE2X3QgaW4pOworCXVpbnQzMl90ICpncGlvOworCXVpbnQzMl90IGZsYWdzOworfTsKKyNkZWZpbmUgZ3Bpb19heGlzXzJiaXRfZ3JheV9tYXAgZ3Bpb19heGlzXzRiaXRfZ3JheV9tYXAKKyNkZWZpbmUgZ3Bpb19heGlzXzNiaXRfZ3JheV9tYXAgZ3Bpb19heGlzXzRiaXRfZ3JheV9tYXAKK3VpbnQxNl90IGdwaW9fYXhpc180Yml0X2dyYXlfbWFwKAorCQkJc3RydWN0IGdwaW9fZXZlbnRfYXhpc19pbmZvICppbmZvLCB1aW50MTZfdCBpbik7Cit1aW50MTZfdCBncGlvX2F4aXNfNWJpdF9zaW5nbGV0cmFja19tYXAoCisJCQlzdHJ1Y3QgZ3Bpb19ldmVudF9heGlzX2luZm8gKmluZm8sIHVpbnQxNl90IGluKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9saW51eC9tc21fYWRzcC5oIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvbXNtX2Fkc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzc1ZjNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvbXNtX2Fkc3AuaApAQCAtMCwwICsxLDg0IEBACisvKiBkcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9saW51eC9tc21fYWRzcC5oCisgKgorICogQ29weXJpZ2h0IChjKSBRVUFMQ09NTSBJbmNvcnBvcmF0ZWQKKyAqIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUsIEluYy4KKyAqIEF1dGhvcjogSWxpeWFuIE1hbGNoZXYgPGlibUBhbmRyb2lkLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworI2lmbmRlZiBfX0xJTlVYX01TTV9BRFNQX0gKKyNkZWZpbmUgX19MSU5VWF9NU01fQURTUF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgQURTUF9JT0NUTF9NQUdJQyAncScKKworLyogQURTUF9JT0NUTF9XUklURV9DT01NQU5EICovCitzdHJ1Y3QgYWRzcF9jb21tYW5kX3QgeworCXVpbnQxNl90IHF1ZXVlOworCXVpbnQzMl90IGxlbjsJCS8qIGJ5dGVzICovCisJdWludDhfdCAqZGF0YTsKK307CisKKy8qIEFEU1BfSU9DVExfR0VUX0VWRU5UICovCitzdHJ1Y3QgYWRzcF9ldmVudF90IHsKKwl1aW50MTZfdCB0eXBlOwkJLyogMSA9PSBldmVudCAoUlBDKSwgMCA9PSBtZXNzYWdlIChhZHNwKSAqLworCXVpbnQzMl90IHRpbWVvdXRfbXM7CS8qIC0xIGZvciBpbmZpbml0ZSwgMCBmb3IgaW1tZWRpYXRlIHJldHVybiAqLworCXVpbnQxNl90IG1zZ19pZDsKKwl1aW50MTZfdCBmbGFnczsJCS8qIDEgPT0gMTYtLWJpdCBldmVudCwgMCA9PSAzMi1iaXQgZXZlbnQgKi8KKwl1aW50MzJfdCBsZW47CQkvKiBzaXplIGluLCBudW1iZXIgb2YgYnl0ZXMgb3V0ICovCisJdWludDhfdCAqZGF0YTsKK307CisKKyNkZWZpbmUgQURTUF9JT0NUTF9FTkFCTEUgXAorCV9JT1IoQURTUF9JT0NUTF9NQUdJQywgMSwgdW5zaWduZWQpCisKKyNkZWZpbmUgQURTUF9JT0NUTF9ESVNBQkxFIFwKKwlfSU9SKEFEU1BfSU9DVExfTUFHSUMsIDIsIHVuc2lnbmVkKQorCisjZGVmaW5lIEFEU1BfSU9DVExfRElTQUJMRV9BQ0sgXAorCV9JT1IoQURTUF9JT0NUTF9NQUdJQywgMywgdW5zaWduZWQpCisKKyNkZWZpbmUgQURTUF9JT0NUTF9XUklURV9DT01NQU5EIFwKKwlfSU9SKEFEU1BfSU9DVExfTUFHSUMsIDQsIHN0cnVjdCBhZHNwX2NvbW1hbmRfdCAqKQorCisjZGVmaW5lIEFEU1BfSU9DVExfR0VUX0VWRU5UIFwKKwlfSU9XUihBRFNQX0lPQ1RMX01BR0lDLCA1LCBzdHJ1Y3QgYWRzcF9ldmVudF9kYXRhX3QgKikKKworI2RlZmluZSBBRFNQX0lPQ1RMX1NFVF9DTEtSQVRFIFwKKwlfSU9SKEFEU1BfSU9DVExfTUFHSUMsIDYsIHVuc2lnbmVkKQorCisjZGVmaW5lIEFEU1BfSU9DVExfRElTQUJMRV9FVkVOVF9SU1AgXAorCV9JT1IoQURTUF9JT0NUTF9NQUdJQywgMTAsIHVuc2lnbmVkKQorCitzdHJ1Y3QgYWRzcF9wbWVtX2luZm8geworICAgICAgICBpbnQgZmQ7CisgICAgICAgIHZvaWQgKnZhZGRyOworfTsKKworI2RlZmluZSBBRFNQX0lPQ1RMX1JFR0lTVEVSX1BNRU0gXAorCV9JT1coQURTUF9JT0NUTF9NQUdJQywgMTMsIHVuc2lnbmVkKQorCisjZGVmaW5lIEFEU1BfSU9DVExfVU5SRUdJU1RFUl9QTUVNIFwKKwlfSU9XKEFEU1BfSU9DVExfTUFHSUMsIDE0LCB1bnNpZ25lZCkKKworLyogQ2F1c2UgYW55IGZ1cnRoZXIgR0VUX0VWRU5UIGlvY3RscyB0byBmYWlsICgtRU5PREVWKQorICogdW50aWwgdGhlIGRldmljZSBpcyBjbG9zZWQgYW5kIHJlb3BlbmVkLiAgVXNlZnVsIGZvcgorICogdGVybWluYXRpbmcgZXZlbnQgZGlzcGF0Y2ggdGhyZWFkcworICovCisjZGVmaW5lIEFEU1BfSU9DVExfQUJPUlRfRVZFTlRfUkVBRCBcCisJX0lPVyhBRFNQX0lPQ1RMX01BR0lDLCAxNSwgdW5zaWduZWQpCisKKyNkZWZpbmUgQURTUF9JT0NUTF9MSU5LX1RBU0sgXAorCV9JT1coQURTUF9JT0NUTF9NQUdJQywgMTYsIHVuc2lnbmVkKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL2xpbnV4L21zbV9hdWRpby5oIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvbXNtX2F1ZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZiZGFhMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL2xpbnV4L21zbV9hdWRpby5oCkBAIC0wLDAgKzEsMTE1IEBACisvKiBkcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9saW51eC9tc21fYXVkaW8uaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fTElOVVhfTVNNX0FVRElPX0gKKyNkZWZpbmUgX19MSU5VWF9NU01fQVVESU9fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorCisvKiBQQ00gQXVkaW8gKi8KKworI2RlZmluZSBBVURJT19JT0NUTF9NQUdJQyAnYScKKworI2RlZmluZSBBVURJT19TVEFSVCAgICAgICAgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgMCwgdW5zaWduZWQpCisjZGVmaW5lIEFVRElPX1NUT1AgICAgICAgICBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCAxLCB1bnNpZ25lZCkKKyNkZWZpbmUgQVVESU9fRkxVU0ggICAgICAgIF9JT1coQVVESU9fSU9DVExfTUFHSUMsIDIsIHVuc2lnbmVkKQorI2RlZmluZSBBVURJT19HRVRfQ09ORklHICAgX0lPUihBVURJT19JT0NUTF9NQUdJQywgMywgdW5zaWduZWQpCisjZGVmaW5lIEFVRElPX1NFVF9DT05GSUcgICBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCA0LCB1bnNpZ25lZCkKKyNkZWZpbmUgQVVESU9fR0VUX1NUQVRTICAgIF9JT1IoQVVESU9fSU9DVExfTUFHSUMsIDUsIHVuc2lnbmVkKQorI2RlZmluZSBBVURJT19FTkFCTEVfQVVEUFAgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgNiwgdW5zaWduZWQpCisjZGVmaW5lIEFVRElPX1NFVF9BRFJDICAgICBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCA3LCB1bnNpZ25lZCkKKyNkZWZpbmUgQVVESU9fU0VUX0VRICAgICAgIF9JT1coQVVESU9fSU9DVExfTUFHSUMsIDgsIHVuc2lnbmVkKQorI2RlZmluZSBBVURJT19TRVRfUlhfSUlSICAgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgOSwgdW5zaWduZWQpCisjZGVmaW5lIEFVRElPX1NFVF9WT0xVTUUgICBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCAxMCwgdW5zaWduZWQpCisjZGVmaW5lIEFVRElPX0VOQUJMRV9BVURQUkUgIF9JT1coQVVESU9fSU9DVExfTUFHSUMsIDExLCB1bnNpZ25lZCkKKyNkZWZpbmUgQVVESU9fU0VUX0FHQyAgICAgICAgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgMTIsIHVuc2lnbmVkKQorI2RlZmluZSBBVURJT19TRVRfTlMgICAgICAgICBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCAxMywgdW5zaWduZWQpCisjZGVmaW5lIEFVRElPX1NFVF9UWF9JSVIgICAgIF9JT1coQVVESU9fSU9DVExfTUFHSUMsIDE0LCB1bnNpZ25lZCkKKyNkZWZpbmUgQVVESU9fUEFVU0UJICAgICBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCAxNSwgdW5zaWduZWQpCisjZGVmaW5lIEFVRElPX0dFVF9QQ01fQ09ORklHIF9JT1IoQVVESU9fSU9DVExfTUFHSUMsIDMwLCB1bnNpZ25lZCkKKyNkZWZpbmUgQVVESU9fU0VUX1BDTV9DT05GSUcgX0lPVyhBVURJT19JT0NUTF9NQUdJQywgMzEsIHVuc2lnbmVkKQorI2RlZmluZSBBVURJT19TV0lUQ0hfREVWSUNFICBfSU9XKEFVRElPX0lPQ1RMX01BR0lDLCAzMiwgdW5zaWduZWQpCisKKyNkZWZpbmUJQVVESU9fTUFYX0NPTU1PTl9JT0NUTF9OVU0JMTAwCisKKyNkZWZpbmUJQVVESU9fTUFYX0NPTU1PTl9JT0NUTF9OVU0JMTAwCisKK3N0cnVjdCBtc21fYXVkaW9fY29uZmlnIHsKKwl1aW50MzJfdCBidWZmZXJfc2l6ZTsKKwl1aW50MzJfdCBidWZmZXJfY291bnQ7CisJdWludDMyX3QgY2hhbm5lbF9jb3VudDsKKwl1aW50MzJfdCBzYW1wbGVfcmF0ZTsKKwl1aW50MzJfdCB0eXBlOworCXVpbnQzMl90IHVudXNlZFszXTsKK307CisKK3N0cnVjdCBtc21fYXVkaW9fc3RhdHMgeworCXVpbnQzMl90IGJ5dGVfY291bnQ7CisJdWludDMyX3Qgc2FtcGxlX2NvdW50OworCXVpbnQzMl90IHVudXNlZFsyXTsKK307CisKKy8qIEF1ZGlvIHJvdXRpbmcgKi8KKworI2RlZmluZSBTTkRfSU9DVExfTUFHSUMgJ3MnCisKKyNkZWZpbmUgU05EX01VVEVfVU5NVVRFRCAwCisjZGVmaW5lIFNORF9NVVRFX01VVEVEICAgMQorCitzdHJ1Y3QgbXNtX3NuZF9kZXZpY2VfY29uZmlnIHsKKwl1aW50MzJfdCBkZXZpY2U7CisJdWludDMyX3QgZWFyX211dGU7CisJdWludDMyX3QgbWljX211dGU7Cit9OworCisjZGVmaW5lIFNORF9TRVRfREVWSUNFIF9JT1coU05EX0lPQ1RMX01BR0lDLCAyLCBzdHJ1Y3QgbXNtX2RldmljZV9jb25maWcgKikKKworI2RlZmluZSBTTkRfTUVUSE9EX1ZPSUNFIDAKKworc3RydWN0IG1zbV9zbmRfdm9sdW1lX2NvbmZpZyB7CisJdWludDMyX3QgZGV2aWNlOworCXVpbnQzMl90IG1ldGhvZDsKKwl1aW50MzJfdCB2b2x1bWU7Cit9OworCisjZGVmaW5lIFNORF9TRVRfVk9MVU1FIF9JT1coU05EX0lPQ1RMX01BR0lDLCAzLCBzdHJ1Y3QgbXNtX3NuZF92b2x1bWVfY29uZmlnICopCisKKy8qIFJldHVybnMgdGhlIG51bWJlciBvZiBTTkQgZW5kcG9pbnRzIHN1cHBvcnRlZC4gKi8KKworI2RlZmluZSBTTkRfR0VUX05VTV9FTkRQT0lOVFMgX0lPUihTTkRfSU9DVExfTUFHSUMsIDQsIHVuc2lnbmVkICopCisKK3N0cnVjdCBtc21fc25kX2VuZHBvaW50IHsKKwlpbnQgaWQ7IC8qIGlucHV0IGFuZCBvdXRwdXQgKi8KKwljaGFyIG5hbWVbNjRdOyAvKiBvdXRwdXQgb25seSAqLworfTsKKworLyogVGFrZXMgYW4gaW5kZXggYmV0d2VlbiAwIGFuZCBvbmUgbGVzcyB0aGFuIHRoZSBudW1iZXIgcmV0dXJuZWQgYnkKKyAqIFNORF9HRVRfTlVNX0VORFBPSU5UUywgYW5kIHJldHVybnMgdGhlIFNORCBpbmRleCBhbmQgbmFtZSBvZiBhCisgKiBTTkQgZW5kcG9pbnQuICBPbiBpbnB1dCwgdGhlIC5pZCBmaWVsZCBjb250YWlucyB0aGUgbnVtYmVyIG9mIHRoZQorICogZW5kcG9pbnQsIGFuZCBvbiBleGl0IGl0IGNvbnRhaW5zIHRoZSBTTkQgaW5kZXgsIHdoaWxlIC5uYW1lIGNvbnRhaW5zCisgKiB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGVuZHBvaW50LgorICovCisKKyNkZWZpbmUgU05EX0dFVF9FTkRQT0lOVCBfSU9XUihTTkRfSU9DVExfTUFHSUMsIDUsIHN0cnVjdCBtc21fc25kX2VuZHBvaW50ICopCisKK3N0cnVjdCBtc21fYXVkaW9fcGNtX2NvbmZpZyB7CisJdWludDMyX3QgcGNtX2ZlZWRiYWNrOwkvKiAwIC0gZGlzYWJsZSA+IDAgLSBlbmFibGUgKi8KKwl1aW50MzJfdCBidWZmZXJfY291bnQ7CS8qIE51bWJlciBvZiBidWZmZXJzIHRvIGFsbG9jYXRlICovCisJdWludDMyX3QgYnVmZmVyX3NpemU7CS8qIFNpemUgb2YgYnVmZmVyIGZvciBjYXB0dXJpbmcgb2YKKwkJCQkgICBQQ00gc2FtcGxlcyAqLworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvbXNtX3JwY3JvdXRlci5oIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvbXNtX3JwY3JvdXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ODQ1ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9saW51eC9tc21fcnBjcm91dGVyLmgKQEAgLTAsMCArMSw0NyBAQAorLyogZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvbXNtX3JwY3JvdXRlci5oCisgKgorICogQ29weXJpZ2h0IChjKSBRVUFMQ09NTSBJbmNvcnBvcmF0ZWQKKyAqIENvcHlyaWdodCAoQykgMjAwNyBHb29nbGUsIEluYy4KKyAqIEF1dGhvcjogU2FuIE1laGF0IDxzYW5AYW5kcm9pZC5jb20+CisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKyNpZm5kZWYgX19MSU5VWF9NU01fUlBDUk9VVEVSX0gKKyNkZWZpbmUgX19MSU5VWF9NU01fUlBDUk9VVEVSX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2RlZmluZSBSUENfUk9VVEVSX1ZFUlNJT05fVjEgMHgwMDAxMDAwMAorCitzdHJ1Y3QgcnBjcm91dGVyX2lvY3RsX3NlcnZlcl9hcmdzIHsKKwl1aW50MzJfdCBwcm9nOworCXVpbnQzMl90IHZlcnM7Cit9OworCisjZGVmaW5lIFJQQ19ST1VURVJfSU9DVExfTUFHSUMgKDB4QzEpCisKKyNkZWZpbmUgUlBDX1JPVVRFUl9JT0NUTF9HRVRfVkVSU0lPTiBcCisJX0lPUihSUENfUk9VVEVSX0lPQ1RMX01BR0lDLCAwLCB1bnNpZ25lZCBpbnQpCisKKyNkZWZpbmUgUlBDX1JPVVRFUl9JT0NUTF9HRVRfTVRVIFwKKwlfSU9SKFJQQ19ST1VURVJfSU9DVExfTUFHSUMsIDEsIHVuc2lnbmVkIGludCkKKworI2RlZmluZSBSUENfUk9VVEVSX0lPQ1RMX1JFR0lTVEVSX1NFUlZFUiBcCisJX0lPV1IoUlBDX1JPVVRFUl9JT0NUTF9NQUdJQywgMiwgdW5zaWduZWQgaW50KQorCisjZGVmaW5lIFJQQ19ST1VURVJfSU9DVExfVU5SRUdJU1RFUl9TRVJWRVIgXAorCV9JT1dSKFJQQ19ST1VURVJfSU9DVExfTUFHSUMsIDMsIHVuc2lnbmVkIGludCkKKworI2RlZmluZSBSUENfUk9VVEVSX0lPQ1RMX0dFVF9NSU5PUl9WRVJTSU9OIFwKKwlfSU9XKFJQQ19ST1VURVJfSU9DVExfTUFHSUMsIDQsIHVuc2lnbmVkIGludCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9saW51eC93YWtlbG9jay5oIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvd2FrZWxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2MzMWE0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbGludXgvd2FrZWxvY2suaApAQCAtMCwwICsxLDkxIEBACisvKiBkcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9saW51eC93YWtlbG9jay5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggR29vZ2xlLCBJbmMuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKKyAqIG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2lmbmRlZiBfTElOVVhfV0FLRUxPQ0tfSAorI2RlZmluZSBfTElOVVhfV0FLRUxPQ0tfSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CisKKy8qIEEgd2FrZV9sb2NrIHByZXZlbnRzIHRoZSBzeXN0ZW0gZnJvbSBlbnRlcmluZyBzdXNwZW5kIG9yIG90aGVyIGxvdyBwb3dlcgorICogc3RhdGVzIHdoZW4gYWN0aXZlLiBJZiB0aGUgdHlwZSBpcyBzZXQgdG8gV0FLRV9MT0NLX1NVU1BFTkQsIHRoZSB3YWtlX2xvY2sKKyAqIHByZXZlbnRzIGEgZnVsbCBzeXN0ZW0gc3VzcGVuZC4gSWYgdGhlIHR5cGUgaXMgV0FLRV9MT0NLX0lETEUsIGxvdyBwb3dlcgorICogc3RhdGVzIHRoYXQgY2F1c2UgbGFyZ2UgaW50ZXJydXB0IGxhdGVuY2llcyBvciB0aGF0IGRpc2FibGUgYSBzZXQgb2YKKyAqIGludGVycnVwdHMgd2lsbCBub3QgZW50ZXJlZCBmcm9tIGlkbGUgdW50aWwgdGhlIHdha2VfbG9ja3MgYXJlIHJlbGVhc2VkLgorICovCisKK2VudW0geworCVdBS0VfTE9DS19TVVNQRU5ELCAvKiBQcmV2ZW50IHN1c3BlbmQgKi8KKwlXQUtFX0xPQ0tfSURMRSwgICAgLyogUHJldmVudCBsb3cgcG93ZXIgaWRsZSAqLworCVdBS0VfTE9DS19UWVBFX0NPVU5UCit9OworCitzdHJ1Y3Qgd2FrZV9sb2NrIHsKKyNpZmRlZiBDT05GSUdfSEFTX1dBS0VMT0NLCisJc3RydWN0IGxpc3RfaGVhZCAgICBsaW5rOworCWludCAgICAgICAgICAgICAgICAgZmxhZ3M7CisJY29uc3QgY2hhciAgICAgICAgICpuYW1lOworCXVuc2lnbmVkIGxvbmcgICAgICAgZXhwaXJlczsKKyNpZmRlZiBDT05GSUdfV0FLRUxPQ0tfU1RBVAorCXN0cnVjdCB7CisJCWludCAgICAgICAgICAgICBjb3VudDsKKwkJaW50ICAgICAgICAgICAgIGV4cGlyZV9jb3VudDsKKwkJaW50ICAgICAgICAgICAgIHdha2V1cF9jb3VudDsKKwkJa3RpbWVfdCAgICAgICAgIHRvdGFsX3RpbWU7CisJCWt0aW1lX3QgICAgICAgICBwcmV2ZW50X3N1c3BlbmRfdGltZTsKKwkJa3RpbWVfdCAgICAgICAgIG1heF90aW1lOworCQlrdGltZV90ICAgICAgICAgbGFzdF90aW1lOworCX0gc3RhdDsKKyNlbmRpZgorI2VuZGlmCit9OworCisjaWZkZWYgQ09ORklHX0hBU19XQUtFTE9DSworCit2b2lkIHdha2VfbG9ja19pbml0KHN0cnVjdCB3YWtlX2xvY2sgKmxvY2ssIGludCB0eXBlLCBjb25zdCBjaGFyICpuYW1lKTsKK3ZvaWQgd2FrZV9sb2NrX2Rlc3Ryb3koc3RydWN0IHdha2VfbG9jayAqbG9jayk7Cit2b2lkIHdha2VfbG9jayhzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrKTsKK3ZvaWQgd2FrZV9sb2NrX3RpbWVvdXQoc3RydWN0IHdha2VfbG9jayAqbG9jaywgbG9uZyB0aW1lb3V0KTsKK3ZvaWQgd2FrZV91bmxvY2soc3RydWN0IHdha2VfbG9jayAqbG9jayk7CisKKy8qIHdha2VfbG9ja19hY3RpdmUgcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlIGlmIHRoZSB3YWtlX2xvY2sgaXMgY3VycmVudGx5CisgKiBsb2NrZWQuIElmIHRoZSB3YWtlX2xvY2sgaGFzIGEgdGltZW91dCwgaXQgZG9lcyBub3QgY2hlY2sgdGhlIHRpbWVvdXQKKyAqIGJ1dCBpZiB0aGUgdGltZW91dCBoYWQgYXJlYWR5IGJlZW4gY2hlY2tlZCBpdCB3aWxsIHJldHVybiAwLgorICovCitpbnQgd2FrZV9sb2NrX2FjdGl2ZShzdHJ1Y3Qgd2FrZV9sb2NrICpsb2NrKTsKKworLyogaGFzX3dha2VfbG9jayByZXR1cm5zIDAgaWYgbm8gd2FrZSBsb2NrcyBvZiB0aGUgc3BlY2lmaWVkIHR5cGUgYXJlIGFjdGl2ZSwKKyAqIGFuZCBub24temVybyBpZiBvbmUgb3IgbW9yZSB3YWtlIGxvY2tzIGFyZSBoZWxkLiBTcGVjaWZpY2FsbHkgaXQgcmV0dXJucworICogLTEgaWYgb25lIG9yIG1vcmUgd2FrZSBsb2NrcyB3aXRoIG5vIHRpbWVvdXQgYXJlIGFjdGl2ZSBvciB0aGUKKyAqIG51bWJlciBvZiBqaWZmaWVzIHVudGlsIGFsbCBhY3RpdmUgd2FrZSBsb2NrcyB0aW1lIG91dC4KKyAqLworbG9uZyBoYXNfd2FrZV9sb2NrKGludCB0eXBlKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSB2b2lkIHdha2VfbG9ja19pbml0KHN0cnVjdCB3YWtlX2xvY2sgKmxvY2ssIGludCB0eXBlLAorCQkJCQljb25zdCBjaGFyICpuYW1lKSB7fQorc3RhdGljIGlubGluZSB2b2lkIHdha2VfbG9ja19kZXN0cm95KHN0cnVjdCB3YWtlX2xvY2sgKmxvY2spIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgd2FrZV9sb2NrKHN0cnVjdCB3YWtlX2xvY2sgKmxvY2spIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgd2FrZV9sb2NrX3RpbWVvdXQoc3RydWN0IHdha2VfbG9jayAqbG9jaywgbG9uZyB0aW1lb3V0KSB7fQorc3RhdGljIGlubGluZSB2b2lkIHdha2VfdW5sb2NrKHN0cnVjdCB3YWtlX2xvY2sgKmxvY2spIHt9CisKK3N0YXRpYyBpbmxpbmUgaW50IHdha2VfbG9ja19hY3RpdmUoc3RydWN0IHdha2VfbG9jayAqbG9jaykgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBsb25nIGhhc193YWtlX2xvY2soaW50IHR5cGUpIHsgcmV0dXJuIDA7IH0KKworI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL2NhbWVyYS5oIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9jYW1lcmEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjBmMDQyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9jYW1lcmEuaApAQCAtMCwwICsxLDI3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IFFVQUxDT01NIEluY29ycG9yYXRlZC4KKyAqLworCisjaWZuZGVmIF9fQVNNX19BUkNIX0NBTUVSQV9ICisjZGVmaW5lIF9fQVNNX19BUkNIX0NBTUVSQV9ICisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlICJsaW51eC90eXBlcy5oIgorCisjaW5jbHVkZSA8bWFjaC9ib2FyZC5oPgorI2luY2x1ZGUgPG1lZGlhL21zbV9jYW1lcmEuaD4KKworI2lmZGVmIENPTkZJR19NU01fQ0FNRVJBX0RFQlVHCisjZGVmaW5lIENEQkcoZm10LCBhcmdzLi4uKSBwcmludGsoS0VSTl9JTkZPICJtc21fY2FtZXJhOiAiIGZtdCwgIyNhcmdzKQorI2Vsc2UKKyNkZWZpbmUgQ0RCRyhmbXQsIGFyZ3MuLi4pIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIE1TTV9DQU1FUkFfTVNHIDAKKyNkZWZpbmUgTVNNX0NBTUVSQV9FVlQgMQorI2RlZmluZSBOVU1fV0JfRVhQX05FVVRSQUxfUkVHSU9OX0xJTkVTIDQKKyNkZWZpbmUgTlVNX1dCX0VYUF9TVEFUX09VVFBVVF9CVUZGRVJTICAzCisjZGVmaW5lIE5VTV9BVVRPRk9DVVNfTVVMVElfV0lORE9XX0dSSURTIDE2CisjZGVmaW5lIE5VTV9BRl9TVEFUX09VVFBVVF9CVUZGRVJTICAgICAgMworCitlbnVtIG1zbV9xdWV1ZSB7CisJTVNNX0NBTV9RX0NUUkwsICAgICAvKiBjb250cm9sIGNvbW1hbmQgb3IgY29udHJvbCBjb21tYW5kIHN0YXR1cyAqLworCU1TTV9DQU1fUV9WRkVfRVZULCAgLyogYWRzcCBldmVudCAqLworCU1TTV9DQU1fUV9WRkVfTVNHLCAgLyogYWRzcCBtZXNzYWdlICovCisJTVNNX0NBTV9RX1Y0TDJfUkVRLCAvKiB2NGwyIHJlcXVlc3QgKi8KK307CisKK2VudW0gdmZlX3Jlc3BfbXNnIHsKKwlWRkVfRVZFTlQsCisJVkZFX01TR19HRU5FUkFMLAorCVZGRV9NU0dfU05BUFNIT1QsCisJVkZFX01TR19PVVRQVVQxLAorCVZGRV9NU0dfT1VUUFVUMiwKKwlWRkVfTVNHX1NUQVRTX0FGLAorCVZGRV9NU0dfU1RBVFNfV0UsCit9OworCitzdHJ1Y3QgbXNtX3ZmZV9waHlfaW5mbyB7CisJdWludDMyX3Qgc2J1Zl9waHk7CisJdWludDMyX3QgeV9waHk7CisJdWludDMyX3QgY2Jjcl9waHk7Cit9OworCitzdHJ1Y3QgbXNtX3ZmZV9yZXNwIHsKKwllbnVtIHZmZV9yZXNwX21zZyB0eXBlOworCXN0cnVjdCBtc21fdmZlX2V2dF9tc2cgZXZ0X21zZzsKKwlzdHJ1Y3QgbXNtX3ZmZV9waHlfaW5mbyBwaHk7CisJdm9pZCAgICAqZXh0ZGF0YTsKKwlpbnQzMl90IGV4dGxlbjsKK307CisKK3N0cnVjdCBtc21fdmZlX2NhbGxiYWNrIHsKKwl2b2lkICgqdmZlX3Jlc3ApKHN0cnVjdCBtc21fdmZlX3Jlc3AgKiwKKwkJZW51bSBtc21fcXVldWUsIHZvaWQgKnN5bmNkYXRhKTsKKwl2b2lkKiAoKnZmZV9hbGxvYykoaW50LCB2b2lkICpzeW5jZGF0YSk7Cit9OworCitzdHJ1Y3QgbXNtX2NhbXZmZV9mbiB7CisJaW50ICgqdmZlX2luaXQpKHN0cnVjdCBtc21fdmZlX2NhbGxiYWNrICosIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CisJaW50ICgqdmZlX2VuYWJsZSkoc3RydWN0IGNhbWVyYV9lbmFibGVfY21kICopOworCWludCAoKnZmZV9jb25maWcpKHN0cnVjdCBtc21fdmZlX2NmZ19jbWQgKiwgdm9pZCAqKTsKKwlpbnQgKCp2ZmVfZGlzYWJsZSkoc3RydWN0IGNhbWVyYV9lbmFibGVfY21kICosCisJCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldik7CisJdm9pZCAoKnZmZV9yZWxlYXNlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworfTsKKworc3RydWN0IG1zbV9zZW5zb3JfY3RybCB7CisJaW50ICgqc19pbml0KShjb25zdCBzdHJ1Y3QgbXNtX2NhbWVyYV9zZW5zb3JfaW5mbyAqKTsKKwlpbnQgKCpzX3JlbGVhc2UpKHZvaWQpOworCWludCAoKnNfY29uZmlnKSh2b2lkIF9fdXNlciAqKTsKK307CisKK3N0cnVjdCBtc21fc3luYyB7CisJLyogVGhlc2UgdHdvIHF1ZXVlcyBhcmUgYWNjZXNzZWQgZnJvbSBhIHByb2Nlc3MgY29udGV4dCBvbmx5LiAqLworCXN0cnVjdCBobGlzdF9oZWFkIGZyYW1lOyAvKiBtb3N0LWZyZXF1ZW50bHkgYWNjZXNzZWQgKi8KKwlzdHJ1Y3QgaGxpc3RfaGVhZCBzdGF0czsKKworCS8qIFRoZSBtZXNzYWdlIHF1ZXVlIGlzIHVzZWQgYnkgdGhlIGNvbnRyb2wgdGhyZWFkIHRvIHNlbmQgY29tbWFuZHMKKwkgKiB0byB0aGUgY29uZmlnIHRocmVhZCwgYW5kIGFsc28gYnkgdGhlIERTUCB0byBzZW5kIG1lc3NhZ2VzIHRvIHRoZQorCSAqIGNvbmZpZyB0aHJlYWQuICBUaHVzIGl0IGlzIHRoZSBvbmx5IHF1ZXVlIHRoYXQgaXMgYWNjZXNzZWQgZnJvbQorCSAqIGJvdGggaW50ZXJydXB0IGFuZCBwcm9jZXNzIGNvbnRleHQuCisJICovCisJc3BpbmxvY2tfdCBtc2dfZXZlbnRfcV9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgbXNnX2V2ZW50X3E7CisJd2FpdF9xdWV1ZV9oZWFkX3QgbXNnX2V2ZW50X3dhaXQ7CisKKwkvKiBUaGlzIHF1ZXVlIGNvbnRhaW5zIHByZXZpZXcgZnJhbWVzLiBJdCBpcyBhY2Nlc3NlZCBieSB0aGUgRFNQIChpbgorCSAqIGluIGludGVycnVwdCBjb250ZXh0LCBhbmQgYnkgdGhlIGZyYW1lIHRocmVhZC4KKwkgKi8KKwlzcGlubG9ja190IHByZXZfZnJhbWVfcV9sb2NrOworCXN0cnVjdCBsaXN0X2hlYWQgcHJldl9mcmFtZV9xOworCXdhaXRfcXVldWVfaGVhZF90IHByZXZfZnJhbWVfd2FpdDsKKwlpbnQgdW5ibG9ja19wb2xsX2ZyYW1lOworCisJLyogVGhpcyBxdWV1ZSBjb250YWlucyBzbmFwc2hvdCBmcmFtZXMuICBJdCBpcyBhY2Nlc3NlZCBieSB0aGUgRFNQIChpbgorCSAqIGludGVycnVwdCBjb250ZXh0LCBhbmQgYnkgdGhlIGNvbnRyb2wgdGhyZWFkLgorCSAqLworCXNwaW5sb2NrX3QgcGljdF9mcmFtZV9xX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBwaWN0X2ZyYW1lX3E7CisJd2FpdF9xdWV1ZV9oZWFkX3QgcGljdF9mcmFtZV93YWl0OworCisJc3RydWN0IG1zbV9jYW1lcmFfc2Vuc29yX2luZm8gKnNkYXRhOworCXN0cnVjdCBtc21fY2FtdmZlX2ZuIHZmZWZuOworCXN0cnVjdCBtc21fc2Vuc29yX2N0cmwgc2N0cmw7CisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKwl1aW50OF90IG9wZW5jbnQ7CisJdm9pZCAqY3JvcGluZm87CisJaW50ICBjcm9wbGVuOworCXVuc2lnbmVkIHBpY3RfcHA7CisKKwljb25zdCBjaGFyICphcHBzX2lkOworCisJc3RydWN0IG11dGV4IGxvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKKworI2RlZmluZSBNU01fQVBQU19JRF9WNEwyICJtc21fdjRsMiIKKyNkZWZpbmUgTVNNX0FQUFNfSURfUFJPUCAibXNtX3FjdCIKKworc3RydWN0IG1zbV9kZXZpY2UgeworCXN0cnVjdCBtc21fc3luYyAqc3luYzsgLyogbW9zdC1mcmVxdWVudGx5IGFjY2Vzc2VkICovCisJc3RydWN0IGRldmljZSAqZGV2aWNlOworCXN0cnVjdCBjZGV2IGNkZXY7CisJLyogb3BlbmVkIGlzIG1lYW5pbmdmdWwgb25seSBmb3IgdGhlIGNvbmZpZyBhbmQgZnJhbWUgbm9kZXMsCisJICogd2hpY2ggbWF5IGJlIG9wZW5lZCBvbmx5IG9uY2UuCisJICovCisJYXRvbWljX3Qgb3BlbmVkOworfTsKKworc3RydWN0IG1zbV9jb250cm9sX2RldmljZV9xdWV1ZSB7CisJc3BpbmxvY2tfdCBjdHJsX3N0YXR1c19xX2xvY2s7CisJc3RydWN0IGxpc3RfaGVhZCBjdHJsX3N0YXR1c19xOworCXdhaXRfcXVldWVfaGVhZF90IGN0cmxfc3RhdHVzX3dhaXQ7Cit9OworCitzdHJ1Y3QgbXNtX2NvbnRyb2xfZGV2aWNlIHsKKwlzdHJ1Y3QgbXNtX2RldmljZSAqcG1zbTsKKworCS8qIFRoaXMgcXVldWUgdXNlZCBieSB0aGUgY29uZmlnIHRocmVhZCB0byBzZW5kIHJlc3BvbnNlcyBiYWNrIHRvIHRoZQorCSAqIGNvbnRyb2wgdGhyZWFkLiAgSXQgaXMgYWNjZXNzZWQgb25seSBmcm9tIGEgcHJvY2VzcyBjb250ZXh0LgorCSAqLworCXN0cnVjdCBtc21fY29udHJvbF9kZXZpY2VfcXVldWUgY3RybF9xOworfTsKKworLyogdGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBpbiBrZXJuZWwgKi8KK3N0cnVjdCBtc21fcXVldWVfY21kIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJZW51bSBtc21fcXVldWUgdHlwZTsKKwl2b2lkICpjb21tYW5kOworfTsKKworc3RydWN0IHJlZ2lzdGVyX2FkZHJlc3NfdmFsdWVfcGFpciB7CisJdWludDE2X3QgcmVnaXN0ZXJfYWRkcmVzczsKKwl1aW50MTZfdCByZWdpc3Rlcl92YWx1ZTsKK307CisKK3N0cnVjdCBtc21fcG1lbV9yZWdpb24geworCXN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7CisJaW50IHR5cGU7CisJdm9pZCAqdmFkZHI7CisJdW5zaWduZWQgbG9uZyBwYWRkcjsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwl1aW50MzJfdCB5X29mZjsKKwl1aW50MzJfdCBjYmNyX29mZjsKKwlpbnQgZmQ7CisJdWludDhfdCAgYWN0aXZlOworfTsKKworc3RydWN0IGF4aWRhdGEgeworCXVpbnQzMl90IGJ1Zm51bTE7CisJdWludDMyX3QgYnVmbnVtMjsKKwlzdHJ1Y3QgbXNtX3BtZW1fcmVnaW9uICpyZWdpb247Cit9OworCisjaWZkZWYgQ09ORklHX01TTV9DQU1FUkFfRkxBU0gKK2ludCBtc21fY2FtZXJhX2ZsYXNoX3NldF9sZWRfc3RhdGUodW5zaWduZWQgbGVkX3N0YXRlKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBtc21fY2FtZXJhX2ZsYXNoX3NldF9sZWRfc3RhdGUodW5zaWduZWQgbGVkX3N0YXRlKQoreworCXJldHVybiAtRU5PVFNVUFA7Cit9CisjZW5kaWYKKworLyogQmVsb3cgZnVuY3Rpb25zIGFyZSBhZGRlZCBmb3IgVjRMMiBrZXJuZWwgQVBJcyAqLworc3RydWN0IG1zbV92NGwyX2RyaXZlciB7CisJc3RydWN0IG1zbV9zeW5jICpzeW5jOworCWludCAoKm9wZW4pKHN0cnVjdCBtc21fc3luYyAqLCBjb25zdCBjaGFyICphcHBzX2lkKTsKKwlpbnQgKCpyZWxlYXNlKShzdHJ1Y3QgbXNtX3N5bmMgKik7CisJaW50ICgqY3RybCkoc3RydWN0IG1zbV9zeW5jICosIHN0cnVjdCBtc21fY3RybF9jbWQgKik7CisJaW50ICgqcmVnX3BtZW0pKHN0cnVjdCBtc21fc3luYyAqLCBzdHJ1Y3QgbXNtX3BtZW1faW5mbyAqKTsKKwlpbnQgKCpnZXRfZnJhbWUpIChzdHJ1Y3QgbXNtX3N5bmMgKiwgc3RydWN0IG1zbV9mcmFtZSAqKTsKKwlpbnQgKCpwdXRfZnJhbWUpIChzdHJ1Y3QgbXNtX3N5bmMgKiwgc3RydWN0IG1zbV9mcmFtZSAqKTsKKwlpbnQgKCpnZXRfcGljdCkgKHN0cnVjdCBtc21fc3luYyAqLCBzdHJ1Y3QgbXNtX2N0cmxfY21kICopOworCXVuc2lnbmVkIGludCAoKmRydl9wb2xsKSAoc3RydWN0IG1zbV9zeW5jICosIHN0cnVjdCBmaWxlICosCisJCQkJc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOworfTsKKworaW50IG1zbV92NGwyX3JlZ2lzdGVyKHN0cnVjdCBtc21fdjRsMl9kcml2ZXIgKik7CitpbnQgbXNtX3Y0bDJfdW5yZWdpc3RlcihzdHJ1Y3QgbXNtX3Y0bDJfZHJpdmVyICopOworCit2b2lkIG1zbV9jYW12ZmVfaW5pdCh2b2lkKTsKK2ludCBtc21fY2FtdmZlX2NoZWNrKHZvaWQgKik7Cit2b2lkIG1zbV9jYW12ZmVfZm5faW5pdChzdHJ1Y3QgbXNtX2NhbXZmZV9mbiAqLCB2b2lkICopOworaW50IG1zbV9jYW1lcmFfZHJ2X3N0YXJ0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwKKwkJaW50ICgqc2Vuc29yX3Byb2JlKShjb25zdCBzdHJ1Y3QgbXNtX2NhbWVyYV9zZW5zb3JfaW5mbyAqLAorCQkJCQlzdHJ1Y3QgbXNtX3NlbnNvcl9jdHJsICopKTsKKworZW51bSBtc21fY2FtaW9fY2xrX3R5cGUgeworCUNBTUlPX1ZGRV9NRENfQ0xLLAorCUNBTUlPX01EQ19DTEssCisJQ0FNSU9fVkZFX0NMSywKKwlDQU1JT19WRkVfQVhJX0NMSywKKworCUNBTUlPX01BWF9DTEsKK307CisKK2VudW0gbXNtX2NhbWlvX2Nsa19zcmNfdHlwZSB7CisJTVNNX0NBTUlPX0NMS19TUkNfSU5URVJOQUwsCisJTVNNX0NBTUlPX0NMS19TUkNfRVhURVJOQUwsCisJTVNNX0NBTUlPX0NMS19TUkNfTUFYCit9OworCitlbnVtIG1zbV9zX3Rlc3RfbW9kZSB7CisJU19URVNUX09GRiwKKwlTX1RFU1RfMSwKKwlTX1RFU1RfMiwKKwlTX1RFU1RfMworfTsKKworZW51bSBtc21fc19yZXNvbHV0aW9uIHsKKwlTX1FUUl9TSVpFLAorCVNfRlVMTF9TSVpFLAorCVNfSU5WQUxJRF9TSVpFCit9OworCitlbnVtIG1zbV9zX3JlZ191cGRhdGUgeworCS8qIFNlbnNvciBlZ2lzdGVycyB0aGF0IG5lZWQgdG8gYmUgdXBkYXRlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gKi8KKwlTX1JFR19JTklULAorCS8qIFNlbnNvciBlZ2lzdGVycyB0aGF0IG5lZWRzIHBlcmlvZGljIEkyQyB3cml0ZXMgKi8KKwlTX1VQREFURV9QRVJJT0RJQywKKwkvKiBBbGwgdGhlIHNlbnNvciBSZWdpc3RlcnMgd2lsbCBiZSB1cGRhdGVkICovCisJU19VUERBVEVfQUxMLAorCS8qIE5vdCB2YWxpZCB1cGRhdGUgKi8KKwlTX1VQREFURV9JTlZBTElECit9OworCitlbnVtIG1zbV9zX3NldHRpbmcgeworCVNfUkVTX1BSRVZJRVcsCisJU19SRVNfQ0FQVFVSRQorfTsKKworaW50IG1zbV9jYW1pb19lbmFibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KTsKKworaW50ICBtc21fY2FtaW9fY2xrX2VuYWJsZShlbnVtIG1zbV9jYW1pb19jbGtfdHlwZSBjbGspOworaW50ICBtc21fY2FtaW9fY2xrX2Rpc2FibGUoZW51bSBtc21fY2FtaW9fY2xrX3R5cGUgY2xrKTsKK2ludCAgbXNtX2NhbWlvX2Nsa19jb25maWcodWludDMyX3QgZnJlcSk7Cit2b2lkIG1zbV9jYW1pb19jbGtfcmF0ZV9zZXQoaW50IHJhdGUpOwordm9pZCBtc21fY2FtaW9fY2xrX2F4aV9yYXRlX3NldChpbnQgcmF0ZSk7CisKK3ZvaWQgbXNtX2NhbWlvX2NhbWlmX3BhZF9yZWdfcmVzZXQodm9pZCk7Cit2b2lkIG1zbV9jYW1pb19jYW1pZl9wYWRfcmVnX3Jlc2V0XzIodm9pZCk7CisKK3ZvaWQgbXNtX2NhbWlvX3ZmZV9ibGtfcmVzZXQodm9pZCk7CisKK3ZvaWQgbXNtX2NhbWlvX2Nsa19zZWwoZW51bSBtc21fY2FtaW9fY2xrX3NyY190eXBlKTsKK3ZvaWQgbXNtX2NhbWlvX2Rpc2FibGUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKK2ludCBtc21fY2FtaW9fcHJvYmVfb24oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKK2ludCBtc21fY2FtaW9fcHJvYmVfb2ZmKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvbXNtX2Fkc3AuaCBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvbXNtX2Fkc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDgxNjgzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9tc21fYWRzcC5oCkBAIC0wLDAgKzEsMTEyIEBACisvKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1tc20vbXNtX2Fkc3AuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBHb29nbGUsIEluYy4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCSBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX19BUkNIX01TTV9BRFNQX0gKKyNkZWZpbmUgX19BU01fX0FSQ0hfTVNNX0FEU1BfSAorCitzdHJ1Y3QgbXNtX2Fkc3BfbW9kdWxlOworCitzdHJ1Y3QgbXNtX2Fkc3Bfb3BzIHsKKwkvKiBldmVudCBpcyBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCB3aGVuIGEgbWVzc2FnZQorCSAqIGFycml2ZXMgZnJvbSB0aGUgRFNQLiAgVXNlIHRoZSBwcm92aWRlZCBmdW5jdGlvbiBwb2ludGVyCisJICogdG8gY29weSB0aGUgbWVzc2FnZSBpbnRvIGEgbG9jYWwgYnVmZmVyLiAgRG8gTk9UIGNhbGwKKwkgKiBpdCBtdWx0aXBsZSB0aW1lcy4KKwkgKi8KKwl2b2lkICgqZXZlbnQpKHZvaWQgKmRyaXZlcl9kYXRhLCB1bnNpZ25lZCBpZCwgc2l6ZV90IGxlbiwKKwkJICAgICAgdm9pZCAoKmdldGV2ZW50KSh2b2lkICpwdHIsIHNpemVfdCBsZW4pKTsKK307CisKKy8qIEdldCwgUHV0LCBFbmFibGUsIGFuZCBEaXNhYmxlIGFyZSBzeW5jaHJvbm91cyBhbmQgbXVzdCBvbmx5CisgKiBiZSBjYWxsZWQgZnJvbSB0aHJlYWQgY29udGV4dC4gIEVuYWJsZSBhbmQgRGlzYWJsZSB3aWxsIGJsb2NrCisgKiB1cCB0byBvbmUgc2Vjb25kIGluIHRoZSBldmVudCBvZiBhIGZhdGFsIERTUCBlcnJvciBidXQgYXJlCisgKiBtdWNoIGZhc3RlciBvdGhlcndpc2UuCisgKi8KK2ludCBtc21fYWRzcF9nZXQoY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IG1zbV9hZHNwX21vZHVsZSAqKm1vZHVsZSwKKwkJIHN0cnVjdCBtc21fYWRzcF9vcHMgKm9wcywgdm9pZCAqZHJpdmVyX2RhdGEpOwordm9pZCBtc21fYWRzcF9wdXQoc3RydWN0IG1zbV9hZHNwX21vZHVsZSAqbW9kdWxlKTsKK2ludCBtc21fYWRzcF9lbmFibGUoc3RydWN0IG1zbV9hZHNwX21vZHVsZSAqbW9kdWxlKTsKK2ludCBtc21fYWRzcF9kaXNhYmxlKHN0cnVjdCBtc21fYWRzcF9tb2R1bGUgKm1vZHVsZSk7CitpbnQgYWRzcF9zZXRfY2xrcmF0ZShzdHJ1Y3QgbXNtX2Fkc3BfbW9kdWxlICptb2R1bGUsIHVuc2lnbmVkIGxvbmcgY2xrX3JhdGUpOworCisvKiBXcml0ZSBpcyBzYWZlIHRvIGNhbGwgZnJvbSBpbnRlcnJ1cHQgY29udGV4dC4KKyAqLworaW50IG1zbV9hZHNwX3dyaXRlKHN0cnVjdCBtc21fYWRzcF9tb2R1bGUgKm1vZHVsZSwKKwkJICAgdW5zaWduZWQgcXVldWVfaWQsCisJCSAgIHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworCisjaWYgQ09ORklHX01TTV9BTVNTX1ZFUlNJT04gPj0gNjM1MAorLyogQ29tbWFuZCBRdWV1ZSBJbmRleGVzICovCisjZGVmaW5lIFFEU1BfbHBtQ29tbWFuZFF1ZXVlICAgICAgICAgICAgICAwCisjZGVmaW5lIFFEU1BfbXB1QWZlUXVldWUgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFFEU1BfbXB1R3JhcGhpY3NDbWRRdWV1ZSAgICAgICAgICAyCisjZGVmaW5lIFFEU1BfbXB1TW9kbWF0aENtZFF1ZXVlICAgICAgICAgICAzCisjZGVmaW5lIFFEU1BfbXB1VkRlY0NtZFF1ZXVlICAgICAgICAgICAgICA0CisjZGVmaW5lIFFEU1BfbXB1VkRlY1BrdFF1ZXVlICAgICAgICAgICAgICA1CisjZGVmaW5lIFFEU1BfbXB1VkVuY0NtZFF1ZXVlICAgICAgICAgICAgICA2CisjZGVmaW5lIFFEU1BfcnhNcHVEZWNDbWRRdWV1ZSAgICAgICAgICAgICA3CisjZGVmaW5lIFFEU1BfcnhNcHVEZWNQa3RRdWV1ZSAgICAgICAgICAgICA4CisjZGVmaW5lIFFEU1BfdHhNcHVFbmNRdWV1ZSAgICAgICAgICAgICAgICA5CisjZGVmaW5lIFFEU1BfdVBBdWRQUENtZDFRdWV1ZSAgICAgICAgICAgICAxMAorI2RlZmluZSBRRFNQX3VQQXVkUFBDbWQyUXVldWUgICAgICAgICAgICAgMTEKKyNkZWZpbmUgUURTUF91UEF1ZFBQQ21kM1F1ZXVlICAgICAgICAgICAgIDEyCisjZGVmaW5lIFFEU1BfdVBBdWRQbGF5MEJpdFN0cmVhbUN0cmxRdWV1ZSAxMworI2RlZmluZSBRRFNQX3VQQXVkUGxheTFCaXRTdHJlYW1DdHJsUXVldWUgMTQKKyNkZWZpbmUgUURTUF91UEF1ZFBsYXkyQml0U3RyZWFtQ3RybFF1ZXVlIDE1CisjZGVmaW5lIFFEU1BfdVBBdWRQbGF5M0JpdFN0cmVhbUN0cmxRdWV1ZSAxNgorI2RlZmluZSBRRFNQX3VQQXVkUGxheTRCaXRTdHJlYW1DdHJsUXVldWUgMTcKKyNkZWZpbmUgUURTUF91UEF1ZFByZVByb2NDbWRRdWV1ZSAgICAgICAgIDE4CisjZGVmaW5lIFFEU1BfdVBBdWRSZWNCaXRTdHJlYW1RdWV1ZSAgICAgICAxOQorI2RlZmluZSBRRFNQX3VQQXVkUmVjQ21kUXVldWUgICAgICAgICAgICAgMjAKKyNkZWZpbmUgUURTUF91UERpYWdRdWV1ZSAgICAgICAgICAgICAgICAgIDIxCisjZGVmaW5lIFFEU1BfdVBKcGVnQWN0aW9uQ21kUXVldWUgICAgICAgICAyMgorI2RlZmluZSBRRFNQX3VQSnBlZ0NmZ0NtZFF1ZXVlICAgICAgICAgICAgMjMKKyNkZWZpbmUgUURTUF91UFZvY1Byb2NRdWV1ZSAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIFFEU1BfdmZlQ29tbWFuZFF1ZXVlICAgICAgICAgICAgICAyNQorI2RlZmluZSBRRFNQX3ZmZUNvbW1hbmRTY2FsZVF1ZXVlICAgICAgICAgMjYKKyNkZWZpbmUgUURTUF92ZmVDb21tYW5kVGFibGVRdWV1ZSAgICAgICAgIDI3CisjZGVmaW5lIFFEU1BfTUFYX05VTV9RVUVVRVMgICAgICAgICAgICAgICAyOAorI2Vsc2UKKy8qIENvbW1hbmQgUXVldWUgSW5kZXhlcyAqLworI2RlZmluZSBRRFNQX2xwbUNvbW1hbmRRdWV1ZSAgICAgICAgICAgICAgMAorI2RlZmluZSBRRFNQX21wdUFmZVF1ZXVlICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBRRFNQX21wdUdyYXBoaWNzQ21kUXVldWUgICAgICAgICAgMgorI2RlZmluZSBRRFNQX21wdU1vZG1hdGhDbWRRdWV1ZSAgICAgICAgICAgMworI2RlZmluZSBRRFNQX21wdVZEZWNDbWRRdWV1ZSAgICAgICAgICAgICAgNAorI2RlZmluZSBRRFNQX21wdVZEZWNQa3RRdWV1ZSAgICAgICAgICAgICAgNQorI2RlZmluZSBRRFNQX21wdVZFbmNDbWRRdWV1ZSAgICAgICAgICAgICAgNgorI2RlZmluZSBRRFNQX3J4TXB1RGVjQ21kUXVldWUgICAgICAgICAgICAgNworI2RlZmluZSBRRFNQX3J4TXB1RGVjUGt0UXVldWUgICAgICAgICAgICAgOAorI2RlZmluZSBRRFNQX3R4TXB1RW5jUXVldWUgICAgICAgICAgICAgICAgOQorI2RlZmluZSBRRFNQX3VQQXVkUFBDbWQxUXVldWUgICAgICAgICAgICAgMTAKKyNkZWZpbmUgUURTUF91UEF1ZFBQQ21kMlF1ZXVlICAgICAgICAgICAgIDExCisjZGVmaW5lIFFEU1BfdVBBdWRQUENtZDNRdWV1ZSAgICAgICAgICAgICAxMgorI2RlZmluZSBRRFNQX3VQQXVkUGxheTBCaXRTdHJlYW1DdHJsUXVldWUgMTMKKyNkZWZpbmUgUURTUF91UEF1ZFBsYXkxQml0U3RyZWFtQ3RybFF1ZXVlIDE0CisjZGVmaW5lIFFEU1BfdVBBdWRQbGF5MkJpdFN0cmVhbUN0cmxRdWV1ZSAxNQorI2RlZmluZSBRRFNQX3VQQXVkUGxheTNCaXRTdHJlYW1DdHJsUXVldWUgMTYKKyNkZWZpbmUgUURTUF91UEF1ZFBsYXk0Qml0U3RyZWFtQ3RybFF1ZXVlIDE3CisjZGVmaW5lIFFEU1BfdVBBdWRQcmVQcm9jQ21kUXVldWUgICAgICAgICAxOAorI2RlZmluZSBRRFNQX3VQQXVkUmVjQml0U3RyZWFtUXVldWUgICAgICAgMTkKKyNkZWZpbmUgUURTUF91UEF1ZFJlY0NtZFF1ZXVlICAgICAgICAgICAgIDIwCisjZGVmaW5lIFFEU1BfdVBKcGVnQWN0aW9uQ21kUXVldWUgICAgICAgICAyMQorI2RlZmluZSBRRFNQX3VQSnBlZ0NmZ0NtZFF1ZXVlICAgICAgICAgICAgMjIKKyNkZWZpbmUgUURTUF91UFZvY1Byb2NRdWV1ZSAgICAgICAgICAgICAgIDIzCisjZGVmaW5lIFFEU1BfdmZlQ29tbWFuZFF1ZXVlICAgICAgICAgICAgICAyNAorI2RlZmluZSBRRFNQX3ZmZUNvbW1hbmRTY2FsZVF1ZXVlICAgICAgICAgMjUKKyNkZWZpbmUgUURTUF92ZmVDb21tYW5kVGFibGVRdWV1ZSAgICAgICAgIDI2CisjZGVmaW5lIFFEU1BfUVVFVUVfTUFYICAgICAgICAgICAgICAgICAgICAyNgorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9tc21fcnBjcm91dGVyLmggYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL21zbV9ycGNyb3V0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzI0ZWNlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9tc21fcnBjcm91dGVyLmgKQEAgLTAsMCArMSwxNzkgQEAKKy8qKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1tc20vbXNtX3JwY3JvdXRlci5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEdvb2dsZSwgSW5jLgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgUVVBTENPTU0gSW5jb3Jwb3JhdGVkCisgKiBBdXRob3I6IFNhbiBNZWhhdCA8c2FuQGFuZHJvaWQuY29tPgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCisgKiBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpZm5kZWYgX19BU01fX0FSQ0hfTVNNX1JQQ1JPVVRFUl9ICisjZGVmaW5lIF9fQVNNX19BUkNIX01TTV9SUENST1VURVJfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpZiBDT05GSUdfTVNNX0FNU1NfVkVSU0lPTiA+PSA2MzUwCisvKiBSUEMgQVBJIHZlcnNpb24gc3RydWN0dXJlCisgKiBWZXJzaW9uIGJpdCAzMSA6IDEtPmhhc2hrZXkgdmVyc2lvbmluZywKKyAqICAgICAgICAgICAgICAgICAgMC0+bWFqb3ItbWlub3IgKGJhY2t3YXJkIGNvbXBhdGlibGUpIHZlcnNpb25pbmcKKyAqIGhhc2hrZXkgdmVyc2lvbmluZzoKKyAqICAgVmVyc2lvbiBiaXRzIDMxLTAgaGFzaGtleQorICogbWFqb3ItbWlub3IgKGJhY2t3YXJkIGNvbXBhdGlibGUpIHZlcnNpb25pbmcKKyAqICAgVmVyc2lvbiBiaXRzIDMwLTI4IHJlc2VydmVkIChubyBtYXRjaCkKKyAqICAgVmVyc2lvbiBiaXRzIDI3LTE2IG1ham9yIChtdXN0IG1hdGNoKQorICogICBWZXJzaW9uIGJpdHMgMTUtMCAgbWlub3IgKGdyZWF0ZXIgb3IgZXF1YWwpCisgKi8KKyNkZWZpbmUgUlBDX1ZFUlNJT05fTU9ERV9NQVNLICAweDgwMDAwMDAwCisjZGVmaW5lIFJQQ19WRVJTSU9OX01BSk9SX01BU0sgMHgwZmZmMDAwMAorI2RlZmluZSBSUENfVkVSU0lPTl9NQUpPUl9PRkZTRVQgMTYKKyNkZWZpbmUgUlBDX1ZFUlNJT05fTUlOT1JfTUFTSyAweDAwMDBmZmZmCisKKyNkZWZpbmUgTVNNX1JQQ19WRVJTKG1ham9yLCBtaW5vcikJCQkJCVwKKwkoKHVpbnQzMl90KSgoKChtYWpvcikgPDwgUlBDX1ZFUlNJT05fTUFKT1JfT0ZGU0VUKSAmCQlcCisJCVJQQ19WRVJTSU9OX01BSk9SX01BU0spIHwJCQkJXAorCSgobWlub3IpICYgUlBDX1ZFUlNJT05fTUlOT1JfTUFTSykpKQorI2RlZmluZSBNU01fUlBDX0dFVF9NQUpPUih2ZXJzKSAoKCh2ZXJzKSAmIFJQQ19WRVJTSU9OX01BSk9SX01BU0spID4+CVwKKwkJCQkJUlBDX1ZFUlNJT05fTUFKT1JfT0ZGU0VUKQorI2RlZmluZSBNU01fUlBDX0dFVF9NSU5PUih2ZXJzKSAoKHZlcnMpICYgUlBDX1ZFUlNJT05fTUlOT1JfTUFTSykKKyNlbHNlCisjZGVmaW5lIE1TTV9SUENfVkVSUyhtYWpvciwgbWlub3IpIChtYWpvcikKKyNkZWZpbmUgTVNNX1JQQ19HRVRfTUFKT1IodmVycykgKHZlcnMpCisjZGVmaW5lIE1TTV9SUENfR0VUX01JTk9SKHZlcnMpIDAKKyNlbmRpZgorCitzdHJ1Y3QgbXNtX3JwY19lbmRwb2ludDsKKworc3RydWN0IHJwY3N2cl9wbGF0Zm9ybV9kZXZpY2UKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGJhc2U7CisJdWludDMyX3QgcHJvZzsKKwl1aW50MzJfdCB2ZXJzOworfTsKKworI2RlZmluZSBSUENfREFUQV9JTgkwCisvKgorICogU3RydWN0dXJlcyBmb3Igc2VuZGluZyAvIHJlY2VpdmluZyBkaXJlY3QgUlBDIHJlcXVlc3RzCisgKiBYWFg6IEFueSBjcmVkL3ZlcmlmIGxlbmd0aHMgPiAwIG5vdCBzdXBwb3J0ZWQKKyAqLworCitzdHJ1Y3QgcnBjX3JlcXVlc3RfaGRyCit7CisJdWludDMyX3QgeGlkOworCXVpbnQzMl90IHR5cGU7CS8qIDAgKi8KKwl1aW50MzJfdCBycGNfdmVyczsgLyogMiAqLworCXVpbnQzMl90IHByb2c7CisJdWludDMyX3QgdmVyczsKKwl1aW50MzJfdCBwcm9jZWR1cmU7CisJdWludDMyX3QgY3JlZF9mbGF2b3I7CisJdWludDMyX3QgY3JlZF9sZW5ndGg7CisJdWludDMyX3QgdmVyZl9mbGF2b3I7CisJdWludDMyX3QgdmVyZl9sZW5ndGg7Cit9OworCit0eXBlZGVmIHN0cnVjdAoreworCXVpbnQzMl90IGxvdzsKKwl1aW50MzJfdCBoaWdoOworfSBycGNfcmVwbHlfcHJvZ21pc21hdGNoX2RhdGE7CisKK3R5cGVkZWYgc3RydWN0Cit7Cit9IHJwY19kZW5pZWRfcmVwbHlfaGRyOworCit0eXBlZGVmIHN0cnVjdAoreworCXVpbnQzMl90IHZlcmZfZmxhdm9yOworCXVpbnQzMl90IHZlcmZfbGVuZ3RoOworCXVpbnQzMl90IGFjY2VwdF9zdGF0OworI2RlZmluZSBSUENfQUNDRVBUU1RBVF9TVUNDRVNTIDAKKyNkZWZpbmUgUlBDX0FDQ0VQVFNUQVRfUFJPR19VTkFWQUlMIDEKKyNkZWZpbmUgUlBDX0FDQ0VQVFNUQVRfUFJPR19NSVNNQVRDSCAyCisjZGVmaW5lIFJQQ19BQ0NFUFRTVEFUX1BST0NfVU5BVkFJTCAzCisjZGVmaW5lIFJQQ19BQ0NFUFRTVEFUX0dBUkJBR0VfQVJHUyA0CisjZGVmaW5lIFJQQ19BQ0NFUFRTVEFUX1NZU1RFTV9FUlIgNQorI2RlZmluZSBSUENfQUNDRVBUU1RBVF9QUk9HX0xPQ0tFRCA2CisJLyoKKwkgKiBGb2xsb3dpbmcgZGF0YSBpcyBkZXBlbmRhbnQgb24gYWNjZXB0X3N0YXQKKwkgKiBJZiBBQ0NFUFRTVEFUID09IFBST0dfTUlTTUFUQ0ggdGhlbiB0aGVyZSBpcyBhCisJICogJ3JwY19yZXBseV9wcm9nbWlzbWF0Y2hfZGF0YScgc3RydWN0dXJlIGZvbGxvd2luZyB0aGUgaGVhZGVyLgorCSAqIE90aGVyd2lzZSB0aGUgZGF0YSBpcyBwcm9jZWR1cmUgc3BlY2lmaWMKKwkgKi8KK30gcnBjX2FjY2VwdGVkX3JlcGx5X2hkcjsKKworc3RydWN0IHJwY19yZXBseV9oZHIKK3sKKwl1aW50MzJfdCB4aWQ7CisJdWludDMyX3QgdHlwZTsKKwl1aW50MzJfdCByZXBseV9zdGF0OworI2RlZmluZSBSUENNU0dfUkVQTFlTVEFUX0FDQ0VQVEVEIDAKKyNkZWZpbmUgUlBDTVNHX1JFUExZU1RBVF9ERU5JRUQgMQorCXVuaW9uIHsKKwkJcnBjX2FjY2VwdGVkX3JlcGx5X2hkciBhY2NfaGRyOworCQlycGNfZGVuaWVkX3JlcGx5X2hkciBkbnlfaGRyOworCX0gZGF0YTsKK307CisKKy8qIGZsYWdzIGZvciBtc21fcnBjX2Nvbm5lY3QoKSAqLworI2RlZmluZSBNU01fUlBDX1VOSU5URVJSVVBUSUJMRSAweDAwMDEKKworLyogdXNlIElTX0VSUigpIHRvIGNoZWNrIGZvciBmYWlsdXJlICovCitzdHJ1Y3QgbXNtX3JwY19lbmRwb2ludCAqbXNtX3JwY19vcGVuKHZvaWQpOworLyogQ29ubmVjdCB3aXRoIHRoZSBzcGVjaWZpZWQgc2VydmVyIHZlcnNpb24gKi8KK3N0cnVjdCBtc21fcnBjX2VuZHBvaW50ICptc21fcnBjX2Nvbm5lY3QodWludDMyX3QgcHJvZywgdWludDMyX3QgdmVycywgdW5zaWduZWQgZmxhZ3MpOwordWludDMyX3QgbXNtX3JwY19nZXRfdmVycyhzdHJ1Y3QgbXNtX3JwY19lbmRwb2ludCAqZXB0KTsKKy8qIGNoZWNrIGlmIHNlcnZlciB2ZXJzaW9uIGNhbiBoYW5kbGUgY2xpZW50IHJlcXVlc3RlZCB2ZXJzaW9uICovCitpbnQgbXNtX3JwY19pc19jb21wYXRpYmxlX3ZlcnNpb24odWludDMyX3Qgc2VydmVyX3ZlcnNpb24sCisJCQkJICB1aW50MzJfdCBjbGllbnRfdmVyc2lvbik7CisKK2ludCBtc21fcnBjX2Nsb3NlKHN0cnVjdCBtc21fcnBjX2VuZHBvaW50ICplcHQpOworaW50IG1zbV9ycGNfd3JpdGUoc3RydWN0IG1zbV9ycGNfZW5kcG9pbnQgKmVwdCwKKwkJICB2b2lkICpkYXRhLCBpbnQgbGVuKTsKK2ludCBtc21fcnBjX3JlYWQoc3RydWN0IG1zbV9ycGNfZW5kcG9pbnQgKmVwdCwKKwkJIHZvaWQgKipkYXRhLCB1bnNpZ25lZCBsZW4sIGxvbmcgdGltZW91dCk7Cit2b2lkIG1zbV9ycGNfc2V0dXBfcmVxKHN0cnVjdCBycGNfcmVxdWVzdF9oZHIgKmhkciwKKwkJICAgICAgIHVpbnQzMl90IHByb2csIHVpbnQzMl90IHZlcnMsIHVpbnQzMl90IHByb2MpOworaW50IG1zbV9ycGNfcmVnaXN0ZXJfc2VydmVyKHN0cnVjdCBtc21fcnBjX2VuZHBvaW50ICplcHQsCisJCQkgICAgdWludDMyX3QgcHJvZywgdWludDMyX3QgdmVycyk7CitpbnQgbXNtX3JwY191bnJlZ2lzdGVyX3NlcnZlcihzdHJ1Y3QgbXNtX3JwY19lbmRwb2ludCAqZXB0LAorCQkJICAgICAgdWludDMyX3QgcHJvZywgdWludDMyX3QgdmVycyk7CisKKy8qIHNpbXBsZSBibG9ja2luZyBycGMgY2FsbAorICoKKyAqIHJlcXVlc3QgaXMgbWFuZGF0b3J5IGFuZCBtdXN0IGhhdmUgYSBycGNfcmVxdWVzdF9oZHIKKyAqIGF0IHRoZSBzdGFydC4gIFRoZSBoZWFkZXIgd2lsbCBiZSBmaWxsZWQgb3V0IGZvciB5b3UuCisgKgorICogcmVwbHkgcHJvdmlkZXMgYSBidWZmZXIgZm9yIHJlcGxpZXMgb2YgcmVwbHlfbWF4X3NpemUKKyAqLworaW50IG1zbV9ycGNfY2FsbF9yZXBseShzdHJ1Y3QgbXNtX3JwY19lbmRwb2ludCAqZXB0LCB1aW50MzJfdCBwcm9jLAorCQkgICAgICAgdm9pZCAqcmVxdWVzdCwgaW50IHJlcXVlc3Rfc2l6ZSwKKwkJICAgICAgIHZvaWQgKnJlcGx5LCBpbnQgcmVwbHlfbWF4X3NpemUsCisJCSAgICAgICBsb25nIHRpbWVvdXQpOworaW50IG1zbV9ycGNfY2FsbChzdHJ1Y3QgbXNtX3JwY19lbmRwb2ludCAqZXB0LCB1aW50MzJfdCBwcm9jLAorCQkgdm9pZCAqcmVxdWVzdCwgaW50IHJlcXVlc3Rfc2l6ZSwKKwkJIGxvbmcgdGltZW91dCk7CisKK3N0cnVjdCBtc21fcnBjX3NlcnZlcgoreworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1aW50MzJfdCBmbGFnczsKKworCXVpbnQzMl90IHByb2c7CisJdWludDMyX3QgdmVyczsKKworCWludCAoKnJwY19jYWxsKShzdHJ1Y3QgbXNtX3JwY19zZXJ2ZXIgKnNlcnZlciwKKwkJCXN0cnVjdCBycGNfcmVxdWVzdF9oZHIgKnJlcSwgdW5zaWduZWQgbGVuKTsKK307CisKK2ludCBtc21fcnBjX2NyZWF0ZV9zZXJ2ZXIoc3RydWN0IG1zbV9ycGNfc2VydmVyICpzZXJ2ZXIpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvbXNtX3NtZC5oIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9tc21fc21kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRmNzczMQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvbXNtX3NtZC5oCkBAIC0wLDAgKzEsMTA3IEBACisvKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1tc20vbXNtX3NtZC5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA3IEdvb2dsZSwgSW5jLgorICogQXV0aG9yOiBCcmlhbiBTd2V0bGFuZCA8c3dldGxhbmRAZ29vZ2xlLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorICogbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfTVNNX1NNRF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTVNNX1NNRF9ICisKK3R5cGVkZWYgc3RydWN0IHNtZF9jaGFubmVsIHNtZF9jaGFubmVsX3Q7CisKKy8qIHdhcm5pbmc6IG5vdGlmeSgpIG1heSBiZSBjYWxsZWQgYmVmb3JlIG9wZW4gcmV0dXJucyAqLworaW50IHNtZF9vcGVuKGNvbnN0IGNoYXIgKm5hbWUsIHNtZF9jaGFubmVsX3QgKipjaCwgdm9pZCAqcHJpdiwKKwkgICAgIHZvaWQgKCpub3RpZnkpKHZvaWQgKnByaXYsIHVuc2lnbmVkIGV2ZW50KSk7CisKKyNkZWZpbmUgU01EX0VWRU5UX0RBVEEgMQorI2RlZmluZSBTTURfRVZFTlRfT1BFTiAyCisjZGVmaW5lIFNNRF9FVkVOVF9DTE9TRSAzCisKK2ludCBzbWRfY2xvc2Uoc21kX2NoYW5uZWxfdCAqY2gpOworCisvKiBwYXNzaW5nIGEgbnVsbCBwb2ludGVyIGZvciBkYXRhIHJlYWRzIGFuZCBkaXNjYXJkcyAqLworaW50IHNtZF9yZWFkKHNtZF9jaGFubmVsX3QgKmNoLCB2b2lkICpkYXRhLCBpbnQgbGVuKTsKKworLyogV3JpdGUgdG8gc3RyZWFtIGNoYW5uZWxzIG1heSBkbyBhIHBhcnRpYWwgd3JpdGUgYW5kIHJldHVybgorKiogdGhlIGxlbmd0aCBhY3R1YWxseSB3cml0dGVuLgorKiogV3JpdGUgdG8gcGFja2V0IGNoYW5uZWxzIHdpbGwgbmV2ZXIgZG8gYSBwYXJ0aWFsIHdyaXRlIC0tCisqKiBpdCB3aWxsIHJldHVybiB0aGUgcmVxdWVzdGVkIGxlbmd0aCB3cml0dGVuIG9yIGFuIGVycm9yLgorKi8KK2ludCBzbWRfd3JpdGUoc21kX2NoYW5uZWxfdCAqY2gsIGNvbnN0IHZvaWQgKmRhdGEsIGludCBsZW4pOworCitpbnQgc21kX3dyaXRlX2F2YWlsKHNtZF9jaGFubmVsX3QgKmNoKTsKK2ludCBzbWRfcmVhZF9hdmFpbChzbWRfY2hhbm5lbF90ICpjaCk7CisKKy8qIFJldHVybnMgdGhlIHRvdGFsIHNpemUgb2YgdGhlIGN1cnJlbnQgcGFja2V0IGJlaW5nIHJlYWQuCisqKiBSZXR1cm5zIDAgaWYgbm8gcGFja2V0cyBhdmFpbGFibGUgb3IgYSBzdHJlYW0gY2hhbm5lbC4KKyovCitpbnQgc21kX2N1cl9wYWNrZXRfc2l6ZShzbWRfY2hhbm5lbF90ICpjaCk7CisKKy8qIHVzZWQgZm9yIHR0eSB1bnRocm90dGxpbmcgYW5kIHRoZSBsaWtlIC0tIGNhdXNlcyB0aGUgbm90aWZ5KCkKKyoqIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCBmcm9tIHRoZSBzYW1lIGxvY2sgY29udGV4dCBhcyBpcyB1c2VkCisqKiB3aGVuIGl0IGlzIGNhbGxlZCBmcm9tIGNoYW5uZWwgdXBkYXRlcworKi8KK3ZvaWQgc21kX2tpY2soc21kX2NoYW5uZWxfdCAqY2gpOworCisKKyNpZiAwCisvKiB0aGVzZSBhcmUgaW50ZXJydXB0YWJsZSB3YWl0cyB3aGljaCB3aWxsIGJsb2NrIHlvdSB1bnRpbCB0aGUgc3BlY2lmaWVkCisqKiBudW1iZXIgb2YgYnl0ZXMgYXJlIHJlYWRhYmxlIG9yIHdyaXRhYmxlLgorKi8KK2ludCBzbWRfd2FpdF91bnRpbF9yZWFkYWJsZShzbWRfY2hhbm5lbF90ICpjaCwgaW50IGJ5dGVzKTsKK2ludCBzbWRfd2FpdF91bnRpbF93cml0YWJsZShzbWRfY2hhbm5lbF90ICpjaCwgaW50IGJ5dGVzKTsKKyNlbmRpZgorCit0eXBlZGVmIGVudW0KK3sKKwlTTURfUE9SVF9EUyA9IDAsCisJU01EX1BPUlRfRElBRywKKwlTTURfUE9SVF9SUENfQ0FMTCwKKwlTTURfUE9SVF9SUENfUkVQTFksCisJU01EX1BPUlRfQlQsCisJU01EX1BPUlRfQ09OVFJPTCwKKwlTTURfUE9SVF9NRU1DUFlfU1BBUkUxLAorCVNNRF9QT1JUX0RBVEExLAorCVNNRF9QT1JUX0RBVEEyLAorCVNNRF9QT1JUX0RBVEEzLAorCVNNRF9QT1JUX0RBVEE0LAorCVNNRF9QT1JUX0RBVEE1LAorCVNNRF9QT1JUX0RBVEE2LAorCVNNRF9QT1JUX0RBVEE3LAorCVNNRF9QT1JUX0RBVEE4LAorCVNNRF9QT1JUX0RBVEE5LAorCVNNRF9QT1JUX0RBVEExMCwKKwlTTURfUE9SVF9EQVRBMTEsCisJU01EX1BPUlRfREFUQTEyLAorCVNNRF9QT1JUX0RBVEExMywKKwlTTURfUE9SVF9EQVRBMTQsCisJU01EX1BPUlRfREFUQTE1LAorCVNNRF9QT1JUX0RBVEExNiwKKwlTTURfUE9SVF9EQVRBMTcsCisJU01EX1BPUlRfREFUQTE4LAorCVNNRF9QT1JUX0RBVEExOSwKKwlTTURfUE9SVF9EQVRBMjAsCisJU01EX1BPUlRfR1BTX05NRUEsCisJU01EX1BPUlRfQlJJREdFXzEsCisJU01EX1BPUlRfQlJJREdFXzIsCisJU01EX1BPUlRfQlJJREdFXzMsCisJU01EX1BPUlRfQlJJREdFXzQsCisJU01EX1BPUlRfQlJJREdFXzUsCisJU01EX1BPUlRfTE9PUEJBQ0ssCisJU01EX1BPUlRfQ1NfQVBQU19NT0RFTSwKKwlTTURfUE9SVF9DU19BUFBTX0RTUCwKKwlTTURfUE9SVF9DU19NT0RFTV9EU1AsCisJU01EX05VTV9QT1JUUywKK30gc21kX3BvcnRfaWRfdHlwZTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1YXVkcGxheWNtZGkuaCBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVhdWRwbGF5Y21kaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiNmEzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1YXVkcGxheWNtZGkuaApAQCAtMCwwICsxLDk0IEBACisjaWZuZGVmIFFEU1A1QVVEUExBWUNNRElfSAorI2RlZmluZSBRRFNQNUFVRFBMQVlDTURJX0gKKworLyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSoKKworICAgICAgIFEgRCBTIFAgNSAgQSBVIEQgSSBPICAgUCBMIEEgWSAgVCBBIFMgSyAgIEMgTyBNIE0gQSBOIEQgUworCitHRU5FUkFMIERFU0NSSVBUSU9OCisgIENvbW1hbmQgSW50ZXJmYWNlIGZvciBBVURQTEFZVEFTSyBvbiBRRFNQNQorCitSRUZFUkVOQ0VTCisgIE5vbmUKKworRVhURVJOQUxJWkVEIEZVTkNUSU9OUworCisgIGF1ZHBsYXlfY21kX2RlY19kYXRhX2F2YWlsCisgICAgU2VuZCBidWZmZXIgdG8gQVVEUExBWSB0YXNrCisKKworQ29weXJpZ2h0KGMpIDE5OTIgLSAyMDA5IGJ5IFFVQUxDT01NLCBJbmNvcnBvcmF0ZWQuCisKK1RoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCittYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisqPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICAgICAgICAgICAgICAgIEVESVQgSElTVE9SWSBGT1IgRklMRQorCitUaGlzIHNlY3Rpb24gY29udGFpbnMgY29tbWVudHMgZGVzY3JpYmluZyBjaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlLgorTm90aWNlIHRoYXQgY2hhbmdlcyBhcmUgbGlzdGVkIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlci4KKworJEhlYWRlcjogLy9zb3VyY2UvcWNvbS9xY3QvbXVsdGltZWRpYTIvQXVkaW8vZHJpdmVycy9RRFNQNURyaXZlci9RRFNQNUludGVyZmFjZS9tYWluL2xhdGVzdC9xZHNwNWF1ZHBsYXljbWRpLmgjMiAkCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyNkZWZpbmUgQVVEUExBWV9DTURfQklUU1RSRUFNX0RBVEFfQVZBSUwJCTB4MDAwMAorI2RlZmluZSBBVURQTEFZX0NNRF9CSVRTVFJFQU1fREFUQV9BVkFJTF9MRU4JXAorCXNpemVvZihhdWRwbGF5X2NtZF9iaXRzdHJlYW1fZGF0YV9hdmFpbCkKKworLyogVHlwZSBzcGVjaWZpY2F0aW9uIG9mIGRlY19kYXRhX2F2YWlsIG1lc3NhZ2Ugc2VudCB0byBBVURQTEFZVEFTSworKi8KK3R5cGVkZWYgc3RydWN0IHsKKwkvKmNvbW1hbmQgSUQqLworCXVuc2lnbmVkIGludCBjbWRfaWQ7CisKKwkvKiBEZWNvZGVyIElEIGZvciB3aGljaCBtZXNzYWdlIGlzIGJlaW5nIHNlbnQgKi8KKwl1bnNpZ25lZCBpbnQgZGVjb2Rlcl9pZDsKKworCS8qIFN0YXJ0IGFkZHJlc3Mgb2YgZGF0YSBpbiBBUk0gZ2xvYmFsIG1lbW9yeSAqLworCXVuc2lnbmVkIGludCBidWZfcHRyOworCisJLyogTnVtYmVyIG9mIDE2LWJpdCB3b3JkcyBvZiBiaXQtc3RyZWFtIGRhdGEgY29udGlndW91c2x5IGF2YWlsYWJsZSBhdCB0aGUKKwkgKiBhYm92ZS1tZW50aW9uZWQgYWRkcmVzcy4gKi8KKwl1bnNpZ25lZCBpbnQgYnVmX3NpemU7CisKKwkvKiBQYXJ0aXRpb24gbnVtYmVyIHVzZWQgYnkgYXVkUGxheVRhc2sgdG8gY29tbXVuaWNhdGUgd2l0aCBEU1AncyBSVE9TCisJICoga2VybmVsICovCisJdW5zaWduZWQgaW50IHBhcnRpdGlvbl9udW1iZXI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBsYXlfY21kX2JpdHN0cmVhbV9kYXRhX2F2YWlsOworCisjZGVmaW5lIEFVRFBMQVlfQ01EX0hQQ01fQlVGX0NGRyAweDAwMDMKKyNkZWZpbmUgQVVEUExBWV9DTURfSFBDTV9CVUZfQ0ZHX0xFTiBcCisJc2l6ZW9mKHN0cnVjdCBhdWRwbGF5X2NtZF9ocGNtX2J1Zl9jZmcpCisKK3N0cnVjdCBhdWRwbGF5X2NtZF9ocGNtX2J1Zl9jZmcgeworCXVuc2lnbmVkIGludCBjbWRfaWQ7CisJdW5zaWduZWQgaW50IGhvc3RwY21fY29uZmlnOworCXVuc2lnbmVkIGludCBmZWVkYmFja19mcmVxdWVuY3k7CisJdW5zaWduZWQgaW50IGJ5dGVfc3dhcDsKKwl1bnNpZ25lZCBpbnQgbWF4X2J1ZmZlcnM7CisJdW5zaWduZWQgaW50IHBhcnRpdGlvbl9udW1iZXI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCisjZGVmaW5lIEFVRFBMQVlfQ01EX0JVRkZFUl9SRUZSRVNIIDB4MDAwNAorI2RlZmluZSBBVURQTEFZX0NNRF9CVUZGRVJfUkVGUkVTSF9MRU4gXAorCXNpemVvZihzdHJ1Y3QgYXVkcGxheV9jbWRfYnVmZmVyX3VwZGF0ZSkKKworc3RydWN0IGF1ZHBsYXlfY21kX2J1ZmZlcl9yZWZyZXNoIHsKKwl1bnNpZ25lZCBpbnQgY21kX2lkOworCXVuc2lnbmVkIGludCBudW1fYnVmZmVyczsKKwl1bnNpZ25lZCBpbnQgYnVmX3JlYWRfY291bnQ7CisJdW5zaWduZWQgaW50IGJ1ZjBfYWRkcmVzczsKKwl1bnNpZ25lZCBpbnQgYnVmMF9sZW5ndGg7CisJdW5zaWduZWQgaW50IGJ1ZjFfYWRkcmVzczsKKwl1bnNpZ25lZCBpbnQgYnVmMV9sZW5ndGg7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworI2VuZGlmIC8qIFFEU1A1QVVEUExBWUNNRF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1YXVkcGxheW1zZy5oIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWF1ZHBsYXltc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjMwMzRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWF1ZHBsYXltc2cuaApAQCAtMCwwICsxLDcwIEBACisjaWZuZGVmIFFEU1A1QVVEUExBWU1TR19ICisjZGVmaW5lIFFEU1A1QVVEUExBWU1TR19ICisKKy8qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qCisKKyAgICAgICBRIEQgUyBQIDUgIEEgVSBEIEkgTyAgIFAgTCBBIFkgIFQgQSBTIEsgICBNIFMgRworCitHRU5FUkFMIERFU0NSSVBUSU9OCisgIE1lc3NhZ2Ugc2VudCBieSBBVURQTEFZIHRhc2sKKworUkVGRVJFTkNFUworICBOb25lCisKKworQ29weXJpZ2h0KGMpIDE5OTIgLSAyMDA5IGJ5IFFVQUxDT01NLCBJbmNvcnBvcmF0ZWQuCisKK1RoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCittYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisqPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICAgICAgICAgICAgICAgIEVESVQgSElTVE9SWSBGT1IgRklMRQorCitUaGlzIHNlY3Rpb24gY29udGFpbnMgY29tbWVudHMgZGVzY3JpYmluZyBjaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlLgorTm90aWNlIHRoYXQgY2hhbmdlcyBhcmUgbGlzdGVkIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlci4KKworJEhlYWRlcjogLy9zb3VyY2UvcWNvbS9xY3QvbXVsdGltZWRpYTIvQXVkaW8vZHJpdmVycy9RRFNQNURyaXZlci9RRFNQNUludGVyZmFjZS9tYWluL2xhdGVzdC9xZHNwNWF1ZHBsYXltc2cuaCMzICQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKyNkZWZpbmUgQVVEUExBWV9NU0dfREVDX05FRURTX0RBVEEJCTB4MDAwMQorI2RlZmluZSBBVURQTEFZX01TR19ERUNfTkVFRFNfREFUQV9NU0dfTEVOCVwKKwlzaXplb2YoYXVkcGxheV9tc2dfZGVjX25lZWRzX2RhdGEpCisKK3R5cGVkZWYgc3RydWN0eworCS8qIHJlc2VydmVkKi8KKwl1bnNpZ25lZCBpbnQgZGVjX2lkOworCisJLyogVGhlIHJlYWQgcG9pbnRlciBvZmZzZXQgb2YgZXh0ZXJuYWwgbWVtb3J5IHVudGlsIHdoaWNoIHRoZQorCSAqIGJpdHN0cmVhbSBoYXMgYmVlbiBETUFlZCBpbi4gKi8KKwl1bnNpZ25lZCBpbnQgYWRlY0RhdGFSZWFkUHRyT2Zmc2V0OworCisJLyogVGhlIGJ1ZmZlciBzaXplIG9mIGV4dGVybmFsIG1lbW9yeS4gKi8KKwl1bnNpZ25lZCBpbnQgYWRlY0RhdGFCdWZTaXplOworCisJdW5zaWduZWQgaW50IGJpdHN0cmVhbV9mcmVlX2xlbjsKKwl1bnNpZ25lZCBpbnQgYml0c3RyZWFtX3dyaXRlX3B0cjsKKwl1bnNpZ25lZCBpbnQgYml0c3RhcmVtX2J1Zl9zdGFydDsKKwl1bnNpZ25lZCBpbnQgYml0c3RyZWFtX2J1Zl9sZW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBsYXlfbXNnX2RlY19uZWVkc19kYXRhOworCisjZGVmaW5lIEFVRFBMQVlfTVNHX0JVRkZFUl9VUERBVEUgMHgwMDA0CisjZGVmaW5lIEFVRFBMQVlfTVNHX0JVRkZFUl9VUERBVEVfTEVOIFwKKwlzaXplb2Yoc3RydWN0IGF1ZHBsYXlfbXNnX2J1ZmZlcl91cGRhdGUpCisKK3N0cnVjdCBhdWRwbGF5X21zZ19idWZmZXJfdXBkYXRlIHsKKwl1bnNpZ25lZCBpbnQgYnVmZmVyX3dyaXRlX2NvdW50OworCXVuc2lnbmVkIGludCBudW1fb2ZfYnVmZmVyOworCXVuc2lnbmVkIGludCBidWYwX2FkZHJlc3M7CisJdW5zaWduZWQgaW50IGJ1ZjBfbGVuZ3RoOworCXVuc2lnbmVkIGludCBidWYxX2FkZHJlc3M7CisJdW5zaWduZWQgaW50IGJ1ZjFfbGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKyNlbmRpZiAvKiBRRFNQNUFVRFBMQVlNU0dfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWF1ZHBwY21kaS5oIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWF1ZHBwY21kaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZWU5YzYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1YXVkcHBjbWRpLmgKQEAgLTAsMCArMSw5MTQgQEAKKyNpZm5kZWYgUURTUDVBVURQUENNRElfSAorI2RlZmluZSBRRFNQNUFVRFBQQ01ESV9ICisKKy8qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qCisKKyAgICBBIFUgRCBJIE8gICBQIE8gUyBUICAgUCBSIE8gQyBFIFMgUyBJIE4gRyAgSSBOIFQgRSBSIE4gQSBMICBDIE8gTSBNIEEgTiBEIFMKKworR0VORVJBTCBERVNDUklQVElPTgorICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW50aW9ucyBvZiBmb3JtYXQgYmxvY2tzIG9mIGNvbW1hbmRzCisgIHRoYXQgYXJlIGFjY2VwdGVkIGJ5IEFVRFBQIFRhc2sKKworUkVGRVJFTkNFUworICBOb25lCisKK0VYVEVSTkFMSVpFRCBGVU5DVElPTlMKKyAgTm9uZQorCitDb3B5cmlnaHQoYykgMTk5MiAtIDIwMDggYnkgUVVBTENPTU0sIEluY29ycG9yYXRlZC4KKworVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKK21heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgICAgICAgICAgICAgICAgRURJVCBISVNUT1JZIEZPUiBGSUxFCisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBjb21tZW50cyBkZXNjcmliaW5nIGNoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUuCitOb3RpY2UgdGhhdCBjaGFuZ2VzIGFyZSBsaXN0ZWQgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyLgorCiskSGVhZGVyOiAvL3NvdXJjZS9xY29tL3FjdC9tdWx0aW1lZGlhMi9BdWRpby9kcml2ZXJzL1FEU1A1RHJpdmVyL1FEU1A1SW50ZXJmYWNlL21haW4vbGF0ZXN0L3Fkc3A1YXVkcHBjbWRpLmgjMiAkCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qCisgKiBBUk0gdG8gQVVEUFBUQVNLIENvbW1hbmRzCisgKgorICogQVJNIHVzZXMgdGhyZWUgY29tbWFuZCBxdWV1ZXMgdG8gY29tbXVuaWNhdGUgd2l0aCBBVURQUFRBU0sKKyAqIDEpdVBBdWRQUENtZDFRdWV1ZSA6IFVzZWQgZm9yIG1vcmUgZnJlcXVlbnQgYW5kIHNob3J0ZXIgbGVuZ3RoIGNvbW1hbmRzCisgKiAJTG9jYXRpb24gOiBNRU1BCisgKiAJQnVmZmVyIFNpemUgOiA2IHdvcmRzCisgKiAJTm8gb2YgYnVmZmVycyBpbiBhIHF1ZXVlIDogMjAgZm9yIGdhbWluZyBhdWRpbyBhbmQgNSBmb3Igb3RoZXIgaW1hZ2VzCisgKiAyKXVQQXVkUFBDbWQyUXVldWUgOiBVc2VkIGZvciBjb21tYW5kcyB3aGljaCBhcmUgbm90IG11Y2ggbGVuZ3RoaWVyCisgKiAJTG9jYXRpb24gOiBNRU1BCisgKiAJQnVmZmVyIFNpemUgOiAyMworICogCU5vIG9mIGJ1ZmZlcnMgaW4gYSBxdWV1ZSA6IDIKKyAqIDMpdVBBdWRPT0NtZDNRdWV1ZSA6IFVzZWQgZm9yIGxlbmd0aGllciBhbmQgbW9yZSBmcmVxdWVudCBjb21tYW5kcworICogCUxvY2F0aW9uIDogTUVNQQorICogCUJ1ZmZlciBTaXplIDogMTQ1CisgKiAJTm8gb2YgYnVmZmVycyBpbiBhIHF1ZXVlIDogMworICovCisKKy8qCisgKiBDb21tYW5kcyBSZWxhdGVkIHRvIHVQQXVkUFBDbWQxUXVldWUKKyAqLworCisvKgorICogQ29tbWFuZCBTdHJ1Y3R1cmUgdG8gZW5hYmxlIG9yIGRpc2FibGUgdGhlIGFjdGl2ZSBkZWNvZGVycworICovCisKKyNkZWZpbmUgQVVEUFBfQ01EX0NGR19ERUNfVFlQRSAJCTB4MDAwMQorI2RlZmluZSBBVURQUF9DTURfQ0ZHX0RFQ19UWVBFX0xFTiAJc2l6ZW9mKGF1ZHBwX2NtZF9jZmdfZGVjX3R5cGUpCisKKy8qIEVuYWJsZSB0aGUgZGVjb2RlciAqLworI2RlZmluZSBBVURQUF9DTURfREVDX1RZUEVfTSAgICAgICAgICAgCTB4MDAwRgorCisjZGVmaW5lIEFVRFBQX0NNRF9FTkFfREVDX1YgICAgICAgICAJMHg0MDAwCisjZGVmaW5lIEFVRFBQX0NNRF9ESVNfREVDX1YgICAgICAgIAkweDAwMDAKKyNkZWZpbmUgQVVEUFBfQ01EX0RFQ19TVEFURV9NICAgICAgICAgIAkweDQwMDAKKworI2RlZmluZSBBVURQUF9DTURfVVBEQVRERV9DRkdfREVDCTB4ODAwMAorI2RlZmluZSBBVURQUF9DTURfRE9OVF9VUERBVEVfQ0ZHX0RFQwkweDAwMDAKKworCisvKiBUeXBlIHNwZWNpZmljYXRpb24gb2YgY21kX2NmZ19kZWMgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IGNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydCBkZWMwX2NmZzsKKwl1bnNpZ25lZCBzaG9ydCBkZWMxX2NmZzsKKwl1bnNpZ25lZCBzaG9ydCBkZWMyX2NmZzsKKwl1bnNpZ25lZCBzaG9ydCBkZWMzX2NmZzsKKwl1bnNpZ25lZCBzaG9ydCBkZWM0X2NmZzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfY21kX2NmZ19kZWNfdHlwZTsKKworLyoKKyAqIENvbW1hbmQgU3RydWN0dXJlIHRvIFBhdXNlICwgUmVzdW1lIGFuZCBmbHVzaGVzIHRoZSBzZWxlY3RlZCBhdWRpbyBkZWNvZGVycworICovCisKKyNkZWZpbmUgQVVEUFBfQ01EX0RFQ19DVFJMCQkweDAwMDIKKyNkZWZpbmUgQVVEUFBfQ01EX0RFQ19DVFJMX0xFTgkJc2l6ZW9mKGF1ZHBwX2NtZF9kZWNfY3RybCkKKworLyogRGVjb2RlciBjb250cm9sIGNvbW1hbmRzIGZvciBwYXVzZSwgcmVzdW1lIGFuZCBmbHVzaCAqLworI2RlZmluZSBBVURQUF9DTURfRkxVU0hfViAgICAgICAgIAkJMHgyMDAwCisKKyNkZWZpbmUgQVVEUFBfQ01EX1BBVVNFX1YJCSAgICAgICAgMHg0MDAwCisjZGVmaW5lIEFVRFBQX0NNRF9SRVNVTUVfVgkJICAgICAgICAweDAwMDAKKworI2RlZmluZSBBVURQUF9DTURfVVBEQVRFX1YJCSAgICAgICAgMHg4MDAwCisjZGVmaW5lIEFVRFBQX0NNRF9JR05PUkVfVgkJICAgICAgICAweDAwMDAKKworCisvKiBUeXBlIFNwZWMgZm9yIGRlY29kZXIgY29udHJvbCBjb21tYW5kKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IGNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydCBkZWMwX2N0cmw7CisJdW5zaWduZWQgc2hvcnQgZGVjMV9jdHJsOworCXVuc2lnbmVkIHNob3J0IGRlYzJfY3RybDsKKwl1bnNpZ25lZCBzaG9ydCBkZWMzX2N0cmw7CisJdW5zaWduZWQgc2hvcnQgZGVjNF9jdHJsOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfZGVjX2N0cmw7CisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBDb25maWd1cmUgdGhlIEFWU3luYyBGZWVkQmFjayBNZWNoYW5pc20KKyAqLworCisjZGVmaW5lIEFVRFBQX0NNRF9BVlNZTkMJMHgwMDAzCisjZGVmaW5lIEFVRFBQX0NNRF9BVlNZTkNfTEVOCXNpemVvZihhdWRwcF9jbWRfYXZzeW5jKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgY21kX2lkOworCXVuc2lnbmVkIHNob3J0IG9iamVjdF9udW1iZXI7CisJdW5zaWduZWQgc2hvcnQgaW50ZXJydXB0X2ludGVydmFsX2xzdzsKKwl1bnNpZ25lZCBzaG9ydCBpbnRlcnJ1cHRfaW50ZXJ2YWxfbXN3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfYXZzeW5jOworCisvKgorICogQ29tbWFuZCBTdHJ1Y3R1cmUgdG8gZW5hYmxlIG9yIGRpc2FibGUoc2xlZXApIHRoZSAgIEFVRFBQVEFTSworICovCisKKyNkZWZpbmUgQVVEUFBfQ01EX0NGRwkweDAwMDQKKyNkZWZpbmUgQVVEUFBfQ01EX0NGR19MRU4Jc2l6ZW9mKGF1ZHBwX2NtZF9jZmcpCisKKyNkZWZpbmUgQVVEUFBfQ01EX0NGR19TTEVFUCAgIAkJCQkweDAwMDAKKyNkZWZpbmUgQVVEUFBfQ01EX0NGR19FTkFCTEUgIAkJCQkweEZGRkYKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IGNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydCBjZmc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX2NtZF9jZmc7CisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBJbmplY3Qgb3IgZHJvcCB0aGUgc3BlY2lmaWVkIG5vIG9mIHNhbXBsZXMKKyAqLworCisjZGVmaW5lIEFVRFBQX0NNRF9BREpVU1RfU0FNUAkJMHgwMDA1CisjZGVmaW5lIEFVRFBQX0NNRF9BREpVU1RfU0FNUF9MRU4Jc2l6ZW9mKGF1ZHBwX2NtZF9hZGp1c3Rfc2FtcCkKKworI2RlZmluZSBBVURQUF9DTURfU0FNUF9EUk9QCQktMQorI2RlZmluZSBBVURQUF9DTURfU0FNUF9JTlNFUlQJCTB4MDAwMQorCisjZGVmaW5lIEFVRFBQX0NNRF9OVU1fU0FNUExFUwkJMHgwMDAxCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBjbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQgb2JqZWN0X25vOworCXNpZ25lZCBzaG9ydCBzYW1wbGVfaW5zZXJ0X29yX2Ryb3A7CisJdW5zaWduZWQgc2hvcnQgbnVtX3NhbXBsZXM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX2NtZF9hZGp1c3Rfc2FtcDsKKworLyoKKyAqIENvbW1hbmQgU3RydWN0dXJlIHRvIENvbmZpZ3VyZSBBVlN5bmMgRmVlZGJhY2sgTWVjaGFuaXNtCisgKi8KKworI2RlZmluZSBBVURQUF9DTURfQVZTWU5DX0NNRF8yCQkweDAwMDYKKyNkZWZpbmUgQVVEUFBfQ01EX0FWU1lOQ19DTURfMl9MRU4Jc2l6ZW9mKGF1ZHBwX2NtZF9hdnN5bmNfY21kXzIpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBjbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQgb2JqZWN0X251bWJlcjsKKwl1bnNpZ25lZCBzaG9ydCBpbnRlcnJ1cHRfaW50ZXJ2YWxfbHN3OworCXVuc2lnbmVkIHNob3J0IGludGVycnVwdF9pbnRlcnZhbF9tc3c7CisJdW5zaWduZWQgc2hvcnQgc2FtcGxlX2NvdW50ZXJfZGxzdzsKKwl1bnNpZ25lZCBzaG9ydCBzYW1wbGVfY291bnRlcl9kbXN3OworCXVuc2lnbmVkIHNob3J0IHNhbXBsZV9jb3VudGVyX21zdzsKKwl1bnNpZ25lZCBzaG9ydCBieXRlX2NvdW50ZXJfZGxzdzsKKwl1bnNpZ25lZCBzaG9ydCBieXRlX2NvdW50ZXJfZG1zdzsKKwl1bnNpZ25lZCBzaG9ydCBieXRlX2NvdW50ZXJfbXN3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfYXZzeW5jX2NtZF8yOworCisvKgorICogQ29tbWFuZCBTdHJ1Y3R1cmUgdG8gQ29uZmlndXJlIEFWU3luYyBGZWVkYmFjayBNZWNoYW5pc20KKyAqLworCisjZGVmaW5lIEFVRFBQX0NNRF9BVlNZTkNfQ01EXzMJCTB4MDAwNworI2RlZmluZSBBVURQUF9DTURfQVZTWU5DX0NNRF8zX0xFTglzaXplb2YoYXVkcHBfY21kX2F2c3luY19jbWRfMykKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IGNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydCBvYmplY3RfbnVtYmVyOworCXVuc2lnbmVkIHNob3J0IGludGVycnVwdF9pbnRlcnZhbF9sc3c7CisJdW5zaWduZWQgc2hvcnQgaW50ZXJydXB0X2ludGVydmFsX21zdzsKKwl1bnNpZ25lZCBzaG9ydCBzYW1wbGVfY291bnRlcl9kbHN3OworCXVuc2lnbmVkIHNob3J0IHNhbXBsZV9jb3VudGVyX2Rtc3c7CisJdW5zaWduZWQgc2hvcnQgc2FtcGxlX2NvdW50ZXJfbXN3OworCXVuc2lnbmVkIHNob3J0IGJ5dGVfY291bnRlcl9kbHN3OworCXVuc2lnbmVkIHNob3J0IGJ5dGVfY291bnRlcl9kbXN3OworCXVuc2lnbmVkIHNob3J0IGJ5dGVfY291bnRlcl9tc3c7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX2NtZF9hdnN5bmNfY21kXzM7CisKKyNkZWZpbmUgQVVEUFBfQ01EX1JPVVRJTkdfTU9ERSAgICAgIDB4MDAwOAorI2RlZmluZSBBVURQUF9DTURfUk9VVElOR19NT0RFX0xFTiAgXAorc2l6ZW9mKHN0cnVjdCBhdWRwcF9jbWRfcm91dGluZ19tb2RlKQorCitzdHJ1Y3QgYXVkcHBfY21kX3JvdXRpbmdfbW9kZSB7CisJdW5zaWduZWQgc2hvcnQgY21kX2lkOworCXVuc2lnbmVkIHNob3J0IG9iamVjdF9udW1iZXI7CisJdW5zaWduZWQgc2hvcnQgcm91dGluZ19tb2RlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworLyoKKyAqIENvbW1hbmRzIFJlbGF0ZWQgdG8gdVBBdWRQUENtZDJRdWV1ZQorICovCisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBjb25maWd1cmUgUGVyIGRlY29kZXIgUGFyYW1ldGVycyAoQ29tbW9uKQorICovCisKKyNkZWZpbmUgQVVEUFBfQ01EX0NGR19BREVDX1BBUkFNUyAJCTB4MDAwMAorI2RlZmluZSBBVURQUF9DTURfQ0ZHX0FERUNfUEFSQU1TX0NPTU1PTl9MRU4JXAorCXNpemVvZihhdWRwcF9jbWRfY2ZnX2FkZWNfcGFyYW1zX2NvbW1vbikKKworI2RlZmluZSBBVURQUF9DTURfU1RBVFVTX01TR19GTEFHX0VOQV9GQ00JMHg0MDAwCisjZGVmaW5lIEFVRFBQX0NNRF9TVEFUVVNfTVNHX0ZMQUdfRElTX0ZDTQkweDAwMDAKKworI2RlZmluZSBBVURQUF9DTURfU1RBVFVTX01TR19GTEFHX0VOQV9EQ00JMHg4MDAwCisjZGVmaW5lIEFVRFBQX0NNRF9TVEFUVVNfTVNHX0ZMQUdfRElTX0RDTQkweDAwMDAKKworLyogU2FtcGxpbmcgZnJlcXVlbmN5Ki8KKyNkZWZpbmUgIEFVRFBQX0NNRF9TQU1QX1JBVEVfOTYwMDAgCTB4MDAwMAorI2RlZmluZSAgQVVEUFBfQ01EX1NBTVBfUkFURV84ODIwMCAJMHgwMDAxCisjZGVmaW5lICBBVURQUF9DTURfU0FNUF9SQVRFXzY0MDAwIAkweDAwMDIKKyNkZWZpbmUgIEFVRFBQX0NNRF9TQU1QX1JBVEVfNDgwMDAgCTB4MDAwMworI2RlZmluZSAgQVVEUFBfQ01EX1NBTVBfUkFURV80NDEwMCAJMHgwMDA0CisjZGVmaW5lICBBVURQUF9DTURfU0FNUF9SQVRFXzMyMDAwIAkweDAwMDUKKyNkZWZpbmUgIEFVRFBQX0NNRF9TQU1QX1JBVEVfMjQwMDAgCTB4MDAwNgorI2RlZmluZSAgQVVEUFBfQ01EX1NBTVBfUkFURV8yMjA1MCAJMHgwMDA3CisjZGVmaW5lICBBVURQUF9DTURfU0FNUF9SQVRFXzE2MDAwIAkweDAwMDgKKyNkZWZpbmUgIEFVRFBQX0NNRF9TQU1QX1JBVEVfMTIwMDAgCTB4MDAwOQorI2RlZmluZSAgQVVEUFBfQ01EX1NBTVBfUkFURV8xMTAyNSAJMHgwMDBBCisjZGVmaW5lICBBVURQUF9DTURfU0FNUF9SQVRFXzgwMDAgIAkweDAwMEIKKworCisvKgorICogVHlwZSBzcGVjaWZpY2F0aW9uIG9mIGNtZF9hZGVjX2NmZyBzZW50IHRvIGFsbCBkZWNvZGVyCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworICB1bnNpZ25lZCBzaG9ydCBjbWRfaWQ7CisgIHVuc2lnbmVkIHNob3J0ICBsZW5ndGg7CisgIHVuc2lnbmVkIHNob3J0ICBkZWNfaWQ7CisgIHVuc2lnbmVkIHNob3J0ICBzdGF0dXNfbXNnX2ZsYWc7CisgIHVuc2lnbmVkIHNob3J0ICBkZWNvZGVyX2ZyYW1lX2NvdW50ZXJfbXNnX3BlcmlvZDsKKyAgdW5zaWduZWQgc2hvcnQgIGlucHV0X3NhbXBsaW5nX2ZyZXF1ZW5jeTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfY21kX2NmZ19hZGVjX3BhcmFtc19jb21tb247CisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBjb25maWd1cmUgUGVyIGRlY29kZXIgUGFyYW1ldGVycyAoV2F2KQorICovCisKKyNkZWZpbmUgQVVEUFBfQ01EX0NGR19BREVDX1BBUkFNU19XQVZfTEVOCVwKKwlzaXplb2YoYXVkcHBfY21kX2NmZ19hZGVjX3BhcmFtc193YXYpCisKKworI2RlZmluZSBBVURQUF9DTURfV0FWX1NURVJFT19DRkdfTU9OTwkweDAwMDEKKyNkZWZpbmUgQVVEUFBfQ01EX1dBVl9TVEVSRU9fQ0ZHX1NURVJFTwkweDAwMDIKKworI2RlZmluZSBBVURQUF9DTURfV0FWX1BDTV9XSURUSF84CTB4MDAwMAorI2RlZmluZSBBVURQUF9DTURfV0FWX1BDTV9XSURUSF8xNgkweDAwMDEKKyNkZWZpbmUgQVVEUFBfQ01EX1dBVl9QQ01fV0lEVEhfMzIJMHgwMDAyCisKK3R5cGVkZWYgc3RydWN0IHsKKwlhdWRwcF9jbWRfY2ZnX2FkZWNfcGFyYW1zX2NvbW1vbgkJY29tbW9uOworCXVuc2lnbmVkIHNob3J0CQkJCQlzdGVyZW9fY2ZnOworCXVuc2lnbmVkIHNob3J0CQkJCQlwY21fd2lkdGg7CisJdW5zaWduZWQgc2hvcnQgCQkJCQlzaWduOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfY2ZnX2FkZWNfcGFyYW1zX3dhdjsKKworLyoKKyAqIENvbW1hbmQgU3RydWN0dXJlIHRvIGNvbmZpZ3VyZSBQZXIgZGVjb2RlciBQYXJhbWV0ZXJzIChBRFBDTSkKKyAqLworCisjZGVmaW5lIEFVRFBQX0NNRF9DRkdfQURFQ19QQVJBTVNfQURQQ01fTEVOCVwKKwlzaXplb2YoYXVkcHBfY21kX2NmZ19hZGVjX3BhcmFtc19hZHBjbSkKKworCisjZGVmaW5lCUFVRFBQX0NNRF9BRFBDTV9TVEVSRU9fQ0ZHX01PTk8JCTB4MDAwMQorI2RlZmluZSBBVURQUF9DTURfQURQQ01fU1RFUkVPX0NGR19TVEVSRU8JMHgwMDAyCisKK3R5cGVkZWYgc3RydWN0IHsKKwlhdWRwcF9jbWRfY2ZnX2FkZWNfcGFyYW1zX2NvbW1vbgkJY29tbW9uOworCXVuc2lnbmVkIHNob3J0CQkJCQlzdGVyZW9fY2ZnOworCXVuc2lnbmVkIHNob3J0IAkJCQkJYmxvY2tfc2l6ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfY21kX2NmZ19hZGVjX3BhcmFtc19hZHBjbTsKKworLyoKKyAqIENvbW1hbmQgU3RydWN0dXJlIHRvIGNvbmZpZ3VyZSBQZXIgZGVjb2RlciBQYXJhbWV0ZXJzIChNUDMpCisgKi8KKworI2RlZmluZSBBVURQUF9DTURfQ0ZHX0FERUNfUEFSQU1TX01QM19MRU4JXAorCXNpemVvZihhdWRwcF9jbWRfY2ZnX2FkZWNfcGFyYW1zX21wMykKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgYXVkcHBfY21kX2NmZ19hZGVjX3BhcmFtc19jb21tb24gICAgY29tbW9uOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfY2ZnX2FkZWNfcGFyYW1zX21wMzsKKworCisvKgorICogQ29tbWFuZCBTdHJ1Y3R1cmUgdG8gY29uZmlndXJlIFBlciBkZWNvZGVyIFBhcmFtZXRlcnMgKEFBQykKKyAqLworCisjZGVmaW5lIEFVRFBQX0NNRF9DRkdfQURFQ19QQVJBTVNfQUFDX0xFTglcCisJc2l6ZW9mKGF1ZHBwX2NtZF9jZmdfYWRlY19wYXJhbXNfYWFjKQorCisKKyNkZWZpbmUgQVVEUFBfQ01EX0FBQ19GT1JNQVRfQURUUwkJLTEKKyNkZWZpbmUJQVVEUFBfQ01EX0FBQ19GT1JNQVRfUkFXCQkweDAwMDAKKyNkZWZpbmUJQVVEUFBfQ01EX0FBQ19GT1JNQVRfUFNVRURPX1JBVwkJMHgwMDAxCisjZGVmaW5lCUFVRFBQX0NNRF9BQUNfRk9STUFUX0xPQVMJCTB4MDAwMgorCisjZGVmaW5lIEFVRFBQX0NNRF9BQUNfQVVESU9fT0JKRUNUX0xDCQkweDAwMDIKKyNkZWZpbmUgQVVEUFBfQ01EX0FBQ19BVURJT19PQkpFQ1RfTFRQCQkweDAwMDQKKyNkZWZpbmUgQVVEUFBfQ01EX0FBQ19BVURJT19PQkpFQ1RfRVJMQwkweDAwMTEKKworI2RlZmluZSBBVURQUF9DTURfQUFDX1NCUl9PTl9GTEFHX09OCQkweDAwMDEKKyNkZWZpbmUgQVVEUFBfQ01EX0FBQ19TQlJfT05fRkxBR19PRkYJCTB4MDAwMAorCisjZGVmaW5lIEFVRFBQX0NNRF9BQUNfU0JSX1BTX09OX0ZMQUdfT04JCTB4MDAwMQorI2RlZmluZSBBVURQUF9DTURfQUFDX1NCUl9QU19PTl9GTEFHX09GRgkweDAwMDAKKwordHlwZWRlZiBzdHJ1Y3QgeworICBhdWRwcF9jbWRfY2ZnX2FkZWNfcGFyYW1zX2NvbW1vbgljb21tb247CisgIHNpZ25lZCBzaG9ydAkJCQlmb3JtYXQ7CisgIHVuc2lnbmVkIHNob3J0CQkJYXVkaW9fb2JqZWN0OworICB1bnNpZ25lZCBzaG9ydAkJCWVwX2NvbmZpZzsKKyAgdW5zaWduZWQgc2hvcnQgICAgICAgICAgICAgICAgICAgICAgICBhYWNfc2VjdGlvbl9kYXRhX3Jlc2lsaWVuY2VfZmxhZzsKKyAgdW5zaWduZWQgc2hvcnQgICAgICAgICAgICAgICAgICAgICAgICBhYWNfc2NhbGVmYWN0b3JfZGF0YV9yZXNpbGllbmNlX2ZsYWc7CisgIHVuc2lnbmVkIHNob3J0ICAgICAgICAgICAgICAgICAgICAgICAgYWFjX3NwZWN0cmFsX2RhdGFfcmVzaWxpZW5jZV9mbGFnOworICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICAgICAgICAgICAgICAgIHNicl9vbl9mbGFnOworICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICAgICAgICAgICAgICAgIHNicl9wc19vbl9mbGFnOworICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICAgICAgICAgICAgICAgIGR1YWxfbW9ub19tb2RlOworICB1bnNpZ25lZCBzaG9ydCAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5uZWxfY29uZmlndXJhdGlvbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfY21kX2NmZ19hZGVjX3BhcmFtc19hYWM7CisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBjb25maWd1cmUgUGVyIGRlY29kZXIgUGFyYW1ldGVycyAoVjEzSykKKyAqLworCisjZGVmaW5lIEFVRFBQX0NNRF9DRkdfQURFQ19QQVJBTVNfVjEzS19MRU4JXAorCXNpemVvZihzdHJ1Y3QgYXVkcHBfY21kX2NmZ19hZGVjX3BhcmFtc192MTNrKQorCisKKyNkZWZpbmUgQVVEUFBfQ01EX1NURVJFT19DRkdfTU9OTwkJMHgwMDAxCisjZGVmaW5lIEFVRFBQX0NNRF9TVEVSRU9fQ0ZHX1NURVJFTwkJMHgwMDAyCisKK3N0cnVjdCBhdWRwcF9jbWRfY2ZnX2FkZWNfcGFyYW1zX3YxM2sgeworICAgYXVkcHBfY21kX2NmZ19hZGVjX3BhcmFtc19jb21tb24gICAgCWNvbW1vbjsKKyAgIHVuc2lnbmVkIHNob3J0CQkJc3RlcmVvX2NmZzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgQVVEUFBfQ01EX0NGR19BREVDX1BBUkFNU19FVlJDX0xFTiBcCisJc2l6ZW9mKHN0cnVjdCBhdWRwcF9jbWRfY2ZnX2FkZWNfcGFyYW1zX2V2cmMpCisKK3N0cnVjdCBhdWRwcF9jbWRfY2ZnX2FkZWNfcGFyYW1zX2V2cmMgeworCWF1ZHBwX2NtZF9jZmdfYWRlY19wYXJhbXNfY29tbW9uIGNvbW1vbjsKKwl1bnNpZ25lZCBzaG9ydCBzdGVyZW9fY2ZnOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBjb25maWd1cmUgdGhlICBIT1NUIFBDTSBpbnRlcmZhY2UKKyAqLworCisjZGVmaW5lIEFVRFBQX0NNRF9QQ01fSU5URgkweDAwMDEKKyNkZWZpbmUgQVVEUFBfQ01EX1BDTV9JTlRGXzIJMHgwMDAyCisjZGVmaW5lIEFVRFBQX0NNRF9QQ01fSU5URl9MRU4Jc2l6ZW9mKGF1ZHBwX2NtZF9wY21faW50ZikKKworI2RlZmluZSBBVURQUF9DTURfUENNX0lOVEZfTU9OT19WCQkgICAgICAgIDB4MDAwMQorI2RlZmluZSBBVURQUF9DTURfUENNX0lOVEZfU1RFUkVPX1YgICAgICAgICAJMHgwMDAyCisKKy8qIFRoZXNlIHR3byB2YWx1ZXMgZGlmZmVyZW50aWF0ZSB0aGUgdHdvIHR5cGVzIG9mIGNvbW1hbmRzIHRoYXQgY291bGQgYmUgaXNzdWVkCisgKiBJbnRlcmZhY2UgY29uZmlndXJhdGlvbiBjb21tYW5kIGFuZCBCdWZmZXIgdXBkYXRlIGNvbW1hbmQgKi8KKworI2RlZmluZSBBVURQUF9DTURfUENNX0lOVEZfQ09ORklHX0NNRF9WCSAgICAgICAJMHgwMDAwCisjZGVmaW5lIEFVRFBQX0NNRF9QQ01fSU5URl9CVUZGRVJfQ01EX1YJICAgICAgICAtMQorCisjZGVmaW5lIEFVRFBQX0NNRF9QQ01fSU5URl9SWF9FTkFfTSAgICAgICAgICAgICAgMHgwMDBGCisjZGVmaW5lIEFVRFBQX0NNRF9QQ01fSU5URl9SWF9FTkFfQVJNVE9EU1BfViAgICAgMHgwMDA4CisjZGVmaW5lIEFVRFBQX0NNRF9QQ01fSU5URl9SWF9FTkFfRFNQVE9BUk1fViAgICAgMHgwMDA0CisKKy8qIFRoZXNlIGZsYWdzIGNvbnRyb2wgdGhlIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgb2YgdGhlIGludGVyZmFjZSB0b2dldGhlcgorICogIHdpdGggaG9zdCBpbnRlcmZhY2UgYml0IG1hc2suICovCisKKyNkZWZpbmUgQVVEUFBfQ01EX1BDTV9JTlRGX0VOQV9WICAgICAgICAgICAgLTEKKyNkZWZpbmUgQVVEUFBfQ01EX1BDTV9JTlRGX0RJU19WICAgICAgICAgICAgMHgwMDAwCisKKworI2RlZmluZSAgQVVEUFBfQ01EX1BDTV9JTlRGX0ZVTExfRFVQTEVYICAgICAgICAgICAweDAKKyNkZWZpbmUgIEFVRFBQX0NNRF9QQ01fSU5URl9IQUxGX0RVUExFWF9UT0RTUCAgICAgMHgxCisKKworI2RlZmluZSAgQVVEUFBfQ01EX1BDTV9JTlRGX09CSkVDVF9OVU0gICAgICAgICAgIDB4NQorI2RlZmluZSAgQVVEUFBfQ01EX1BDTV9JTlRGX0NPTU1PTl9PQkpFQ1RfTlVNICAgIDB4NgorCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCAgY21kX2lkOworCXVuc2lnbmVkIHNob3J0ICBvYmplY3RfbnVtOworCXNpZ25lZCBzaG9ydCAgY29uZmlnOworCXVuc2lnbmVkIHNob3J0ICBpbnRmX3R5cGU7CisKKwkvKiBEU1AgLT4gQVJNIENvbmZpZ3VyYXRpb24gKi8KKwl1bnNpZ25lZCBzaG9ydCAgcmVhZF9idWYxTFNXOworCXVuc2lnbmVkIHNob3J0ICByZWFkX2J1ZjFNU1c7CisJdW5zaWduZWQgc2hvcnQgIHJlYWRfYnVmMV9sZW47CisKKwl1bnNpZ25lZCBzaG9ydCAgcmVhZF9idWYyTFNXOworCXVuc2lnbmVkIHNob3J0ICByZWFkX2J1ZjJNU1c7CisJdW5zaWduZWQgc2hvcnQgIHJlYWRfYnVmMl9sZW47CisJLyogICAwOkhPU1RfUENNX0lOVEYgZGlzYWJsZQorCSoqICAweEZGRkY6IEhPU1RfUENNX0lOVEYgZW5hYmxlCisJKi8KKwlzaWduZWQgc2hvcnQgIGRzcF90b19hcm1fZmxhZzsKKwl1bnNpZ25lZCBzaG9ydCAgcGFydGl0aW9uX251bWJlcjsKKworCS8qIEFSTSAtPiBEU1AgQ29uZmlndXJhdGlvbiAqLworCXVuc2lnbmVkIHNob3J0ICB3cml0ZV9idWYxTFNXOworCXVuc2lnbmVkIHNob3J0ICB3cml0ZV9idWYxTVNXOworCXVuc2lnbmVkIHNob3J0ICB3cml0ZV9idWYxX2xlbjsKKworCXVuc2lnbmVkIHNob3J0ICB3cml0ZV9idWYyTFNXOworCXVuc2lnbmVkIHNob3J0ICB3cml0ZV9idWYyTVNXOworCXVuc2lnbmVkIHNob3J0ICB3cml0ZV9idWYyX2xlbjsKKworCS8qICAgMDpIT1NUX1BDTV9JTlRGIGRpc2FibGUKKwkqKiAgMHhGRkZGOiBIT1NUX1BDTV9JTlRGIGVuYWJsZQorCSovCisJc2lnbmVkIHNob3J0ICBhcm1fdG9fcnhfZmxhZzsKKwl1bnNpZ25lZCBzaG9ydCAgd2VpZ2h0X2RlY29kZXJfdG9fcng7CisJdW5zaWduZWQgc2hvcnQgIHdlaWdodF9hcm1fdG9fcng7CisKKwl1bnNpZ25lZCBzaG9ydCAgcGFydGl0aW9uX251bWJlcl9hcm1fdG9fZHNwOworCXVuc2lnbmVkIHNob3J0ICBzYW1wbGVfcmF0ZTsKKwl1bnNpZ25lZCBzaG9ydCAgY2hhbm5lbF9tb2RlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfcGNtX2ludGY7CisKKy8qCisgKiogIEJVRkZFUiBVUERBVEUgQ09NTUFORAorICovCisjZGVmaW5lIEFVRFBQX0NNRF9QQ01fSU5URl9TRU5EX0JVRl9QQVJBTVNfTEVOCVwKKwlzaXplb2YoYXVkcHBfY21kX3BjbV9pbnRmX3NlbmRfYnVmZmVyKQorCit0eXBlZGVmIHN0cnVjdCB7CisgIHVuc2lnbmVkIHNob3J0ICBjbWRfaWQ7CisgIHVuc2lnbmVkIHNob3J0ICBob3N0X3BjbV9vYmplY3Q7CisgIC8qIHNldCBjb25maWcgPSAweEZGRkYgZm9yIGNvbmZpZ3VyYXRpb24qLworICBzaWduZWQgc2hvcnQgIGNvbmZpZzsKKyAgdW5zaWduZWQgc2hvcnQgIGludGZfdHlwZTsKKyAgdW5zaWduZWQgc2hvcnQgIGRzcF90b19hcm1fYnVmX2lkOworICB1bnNpZ25lZCBzaG9ydCAgYXJtX3RvX2RzcF9idWZfaWQ7CisgIHVuc2lnbmVkIHNob3J0ICBhcm1fdG9fZHNwX2J1Zl9sZW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX2NtZF9wY21faW50Zl9zZW5kX2J1ZmZlcjsKKworCisvKgorICogQ29tbWFuZHMgUmVsYXRlZCB0byB1UEF1ZFBQQ21kM1F1ZXVlCisgKi8KKworLyoKKyAqIENvbW1hbmQgU3RydWN0dXJlIHRvIGNvbmZpZ3VyZSBwb3N0IHByb2Nlc3NpbmcgcGFyYW1zIChDb21tbW9uKQorICovCisKKyNkZWZpbmUgQVVEUFBfQ01EX0NGR19PQkpFQ1RfUEFSQU1TCQkweDAwMDAKKyNkZWZpbmUgQVVEUFBfQ01EX0NGR19PQkpFQ1RfUEFSQU1TX0NPTU1PTl9MRU4JCVwKKwlzaXplb2YoYXVkcHBfY21kX2NmZ19vYmplY3RfcGFyYW1zX2NvbW1vbikKKworI2RlZmluZSBBVURQUF9DTURfT0JKMF9VUERBVEUJCTB4ODAwMAorI2RlZmluZSBBVURQUF9DTURfT0JKMF9ET05UX1VQREFURQkweDAwMDAKKworI2RlZmluZSBBVURQUF9DTURfT0JKMV9VUERBVEUJCTB4ODAwMAorI2RlZmluZSBBVURQUF9DTURfT0JKMV9ET05UX1VQREFURQkweDAwMDAKKworI2RlZmluZSBBVURQUF9DTURfT0JKMl9VUERBVEUJCTB4ODAwMAorI2RlZmluZSBBVURQUF9DTURfT0JKMl9ET05UX1VQREFURQkweDAwMDAKKworI2RlZmluZSBBVURQUF9DTURfT0JKM19VUERBVEUJCTB4ODAwMAorI2RlZmluZSBBVURQUF9DTURfT0JKM19ET05UX1VQREFURQkweDAwMDAKKworI2RlZmluZSBBVURQUF9DTURfT0JKNF9VUERBVEUJCTB4ODAwMAorI2RlZmluZSBBVURQUF9DTURfT0JKNF9ET05UX1VQREFURQkweDAwMDAKKworI2RlZmluZSBBVURQUF9DTURfSFBDTV9VUERBVEUJCTB4ODAwMAorI2RlZmluZSBBVURQUF9DTURfSFBDTV9ET05UX1VQREFURQkweDAwMDAKKworI2RlZmluZSBBVURQUF9DTURfQ09NTU9OX0NGR19VUERBVEUJCTB4ODAwMAorI2RlZmluZSBBVURQUF9DTURfQ09NTU9OX0NGR19ET05UX1VQREFURQkweDAwMDAKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0ICBjbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQJb2JqMF9jZmc7CisJdW5zaWduZWQgc2hvcnQJb2JqMV9jZmc7CisJdW5zaWduZWQgc2hvcnQJb2JqMl9jZmc7CisJdW5zaWduZWQgc2hvcnQJb2JqM19jZmc7CisJdW5zaWduZWQgc2hvcnQJb2JqNF9jZmc7CisJdW5zaWduZWQgc2hvcnQJaG9zdF9wY21fb2JqX2NmZzsKKwl1bnNpZ25lZCBzaG9ydAljb21tYW5fY2ZnOworCXVuc2lnbmVkIHNob3J0ICBjb21tYW5kX3R5cGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc19jb21tb247CisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBjb25maWd1cmUgcG9zdCBwcm9jZXNzaW5nIHBhcmFtcyAoVm9sdW1lKQorICovCisKKyNkZWZpbmUgQVVEUFBfQ01EX0NGR19PQkpFQ1RfUEFSQU1TX1ZPTFVNRV9MRU4JCVwKKwlzaXplb2YoYXVkcHBfY21kX2NmZ19vYmplY3RfcGFyYW1zX3ZvbHVtZSkKKwordHlwZWRlZiBzdHJ1Y3QgeworCWF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc19jb21tb24gCWNvbW1vbjsKKwl1bnNpZ25lZCBzaG9ydAkJCQkJdm9sdW1lOworCXVuc2lnbmVkIHNob3J0CQkJCQlwYW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc192b2x1bWU7CisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBjb25maWd1cmUgcG9zdCBwcm9jZXNzaW5nIHBhcmFtcyAoUENNIEZpbHRlcikgLS1ET1VCVAorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAkJCW51bWVyYXRvcl9iMF9maWx0ZXJfbHN3OworCXVuc2lnbmVkIHNob3J0CQkJbnVtZXJhdG9yX2IwX2ZpbHRlcl9tc3c7CisJdW5zaWduZWQgc2hvcnQJCQludW1lcmF0b3JfYjFfZmlsdGVyX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAkJCW51bWVyYXRvcl9iMV9maWx0ZXJfbXN3OworCXVuc2lnbmVkIHNob3J0CQkJbnVtZXJhdG9yX2IyX2ZpbHRlcl9sc3c7CisJdW5zaWduZWQgc2hvcnQJCQludW1lcmF0b3JfYjJfZmlsdGVyX21zdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbnVtZXJhdG9yOworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJCQlkZW5vbWluYXRvcl9hMF9maWx0ZXJfbHN3OworCXVuc2lnbmVkIHNob3J0CQkJZGVub21pbmF0b3JfYTBfZmlsdGVyX21zdzsKKwl1bnNpZ25lZCBzaG9ydAkJCWRlbm9taW5hdG9yX2ExX2ZpbHRlcl9sc3c7CisJdW5zaWduZWQgc2hvcnQJCQlkZW5vbWluYXRvcl9hMV9maWx0ZXJfbXN3OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBkZW5vbWluYXRvcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CQkJc2hpZnRfZmFjdG9yXzA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHNoaWZ0X2ZhY3RvcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CQkJcGFuX2ZpbHRlcl8wOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBwYW47CisKK3R5cGVkZWYgc3RydWN0IHsKKwkJbnVtZXJhdG9yCQludW1lcmF0b3JfZmlsdGVyOworCQlkZW5vbWluYXRvcgkJZGVub21pbmF0b3JfZmlsdGVyOworCQlzaGlmdF9mYWN0b3IJCXNoaWZ0X2ZhY3Rvcl9maWx0ZXI7CisJCXBhbgkJCXBhbl9maWx0ZXI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGZpbHRlcl8xOworCit0eXBlZGVmIHN0cnVjdCB7CisJCW51bWVyYXRvcgkJbnVtZXJhdG9yX2ZpbHRlclsyXTsKKwkJZGVub21pbmF0b3IJCWRlbm9taW5hdG9yX2ZpbHRlclsyXTsKKwkJc2hpZnRfZmFjdG9yCQlzaGlmdF9mYWN0b3JfZmlsdGVyWzJdOworCQlwYW4JCQlwYW5fZmlsdGVyWzJdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBmaWx0ZXJfMjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCQludW1lcmF0b3IJCW51bWVyYXRvcl9maWx0ZXJbM107CisJCWRlbm9taW5hdG9yCQlkZW5vbWluYXRvcl9maWx0ZXJbM107CisJCXNoaWZ0X2ZhY3RvcgkJc2hpZnRfZmFjdG9yX2ZpbHRlclszXTsKKwkJcGFuCQkJcGFuX2ZpbHRlclszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZmlsdGVyXzM7CisKK3R5cGVkZWYgc3RydWN0IHsKKwkJbnVtZXJhdG9yCQludW1lcmF0b3JfZmlsdGVyWzRdOworCQlkZW5vbWluYXRvcgkJZGVub21pbmF0b3JfZmlsdGVyWzRdOworCQlzaGlmdF9mYWN0b3IJCXNoaWZ0X2ZhY3Rvcl9maWx0ZXJbNF07CisJCXBhbgkJCXBhbl9maWx0ZXJbNF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGZpbHRlcl80OworCisjZGVmaW5lIEFVRFBQX0NNRF9DRkdfT0JKRUNUX1BBUkFNU19QQ01fTEVOCQlcCisJc2l6ZW9mKGF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc19wY20pCisKKwordHlwZWRlZiBzdHJ1Y3QgeworCWF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc19jb21tb24gCWNvbW1vbjsKKwl1bnNpZ25lZCBzaG9ydAkJCQlhY3RpdmVfZmxhZzsKKwl1bnNpZ25lZCBzaG9ydCAJCQkJbnVtX2JhbmRzOworCXVuaW9uIHsKKwkJZmlsdGVyXzEJCQlmaWx0ZXJfMV9wYXJhbXM7CisJCWZpbHRlcl8yCQkJZmlsdGVyXzJfcGFyYW1zOworCQlmaWx0ZXJfMwkJCWZpbHRlcl8zX3BhcmFtczsKKwkJZmlsdGVyXzQJCQlmaWx0ZXJfNF9wYXJhbXM7CisJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBwYXJhbXNfZmlsdGVyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfcGNtOworCisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBjb25maWd1cmUgcG9zdCBwcm9jZXNzaW5nIHBhcmFtZXRlcnMgKGVxdWFsaXplcikKKyAqLworCisjZGVmaW5lIEFVRFBQX0NNRF9DRkdfT0JKRUNUX1BBUkFNU19FUUFMSVpFUl9MRU4JCVwKKwlzaXplb2YoYXVkcHBfY21kX2NmZ19vYmplY3RfcGFyYW1zX2VxYWxpemVyKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJCQludW1lcmF0b3JfY29lZmZfMF9sc3c7CisJdW5zaWduZWQgc2hvcnQJCQludW1lcmF0b3JfY29lZmZfMF9tc3c7CisJdW5zaWduZWQgc2hvcnQJCQludW1lcmF0b3JfY29lZmZfMV9sc3c7CisJdW5zaWduZWQgc2hvcnQJCQludW1lcmF0b3JfY29lZmZfMV9tc3c7CisJdW5zaWduZWQgc2hvcnQJCQludW1lcmF0b3JfY29lZmZfMl9sc3c7CisJdW5zaWduZWQgc2hvcnQJCQludW1lcmF0b3JfY29lZmZfMl9tc3c7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGVxX251bWVyYXRvcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CQkJZGVub21pbmF0b3JfY29lZmZfMF9sc3c7CisJdW5zaWduZWQgc2hvcnQJCQlkZW5vbWluYXRvcl9jb2VmZl8wX21zdzsKKwl1bnNpZ25lZCBzaG9ydAkJCWRlbm9taW5hdG9yX2NvZWZmXzFfbHN3OworCXVuc2lnbmVkIHNob3J0CQkJZGVub21pbmF0b3JfY29lZmZfMV9tc3c7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGVxX2Rlbm9taW5hdG9yOworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJCQlzaGlmdF9mYWN0b3I7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGVxX3NoaWZ0ZmFjdG9yOworCit0eXBlZGVmIHN0cnVjdCB7CisJZXFfbnVtZXJhdG9yCW51bWVyYXRvcjsKKwllcV9kZW5vbWluYXRvcglkZW5vbWluYXRvcjsKKwllcV9zaGlmdGZhY3RvcglzaGlmdGZhY3RvcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZXFfY29lZmZfMTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWVxX251bWVyYXRvcgludW1lcmF0b3JbMl07CisJZXFfZGVub21pbmF0b3IJZGVub21pbmF0b3JbMl07CisJZXFfc2hpZnRmYWN0b3IJc2hpZnRmYWN0b3JbMl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGVxX2NvZWZmXzI7CisKK3R5cGVkZWYgc3RydWN0IHsKKwllcV9udW1lcmF0b3IJbnVtZXJhdG9yWzNdOworCWVxX2Rlbm9taW5hdG9yCWRlbm9taW5hdG9yWzNdOworCWVxX3NoaWZ0ZmFjdG9yCXNoaWZ0ZmFjdG9yWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBlcV9jb2VmZl8zOworCit0eXBlZGVmIHN0cnVjdCB7CisJZXFfbnVtZXJhdG9yCW51bWVyYXRvcls0XTsKKwllcV9kZW5vbWluYXRvcglkZW5vbWluYXRvcls0XTsKKwllcV9zaGlmdGZhY3RvcglzaGlmdGZhY3Rvcls0XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZXFfY29lZmZfNDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWVxX251bWVyYXRvcgludW1lcmF0b3JbNV07CisJZXFfZGVub21pbmF0b3IJZGVub21pbmF0b3JbNV07CisJZXFfc2hpZnRmYWN0b3IJc2hpZnRmYWN0b3JbNV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGVxX2NvZWZmXzU7CisKK3R5cGVkZWYgc3RydWN0IHsKKwllcV9udW1lcmF0b3IJbnVtZXJhdG9yWzZdOworCWVxX2Rlbm9taW5hdG9yCWRlbm9taW5hdG9yWzZdOworCWVxX3NoaWZ0ZmFjdG9yCXNoaWZ0ZmFjdG9yWzZdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBlcV9jb2VmZl82OworCit0eXBlZGVmIHN0cnVjdCB7CisJZXFfbnVtZXJhdG9yCW51bWVyYXRvcls3XTsKKwllcV9kZW5vbWluYXRvcglkZW5vbWluYXRvcls3XTsKKwllcV9zaGlmdGZhY3RvcglzaGlmdGZhY3Rvcls3XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZXFfY29lZmZfNzsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWVxX251bWVyYXRvcgludW1lcmF0b3JbOF07CisJZXFfZGVub21pbmF0b3IJZGVub21pbmF0b3JbOF07CisJZXFfc2hpZnRmYWN0b3IJc2hpZnRmYWN0b3JbOF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGVxX2NvZWZmXzg7CisKK3R5cGVkZWYgc3RydWN0IHsKKwllcV9udW1lcmF0b3IJbnVtZXJhdG9yWzldOworCWVxX2Rlbm9taW5hdG9yCWRlbm9taW5hdG9yWzldOworCWVxX3NoaWZ0ZmFjdG9yCXNoaWZ0ZmFjdG9yWzldOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBlcV9jb2VmZl85OworCit0eXBlZGVmIHN0cnVjdCB7CisJZXFfbnVtZXJhdG9yCW51bWVyYXRvclsxMF07CisJZXFfZGVub21pbmF0b3IJZGVub21pbmF0b3JbMTBdOworCWVxX3NoaWZ0ZmFjdG9yCXNoaWZ0ZmFjdG9yWzEwXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZXFfY29lZmZfMTA7CisKK3R5cGVkZWYgc3RydWN0IHsKKwllcV9udW1lcmF0b3IJbnVtZXJhdG9yWzExXTsKKwllcV9kZW5vbWluYXRvcglkZW5vbWluYXRvclsxMV07CisJZXFfc2hpZnRmYWN0b3IJc2hpZnRmYWN0b3JbMTFdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBlcV9jb2VmZl8xMTsKKwordHlwZWRlZiBzdHJ1Y3QgeworCWVxX251bWVyYXRvcgludW1lcmF0b3JbMTJdOworCWVxX2Rlbm9taW5hdG9yCWRlbm9taW5hdG9yWzEyXTsKKwllcV9zaGlmdGZhY3RvcglzaGlmdGZhY3RvclsxMl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGVxX2NvZWZmXzEyOworCisKK3R5cGVkZWYgc3RydWN0IHsKKwlhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfY29tbW9uIAljb21tb247CisJdW5zaWduZWQgc2hvcnQJCQkJZXFfZmxhZzsKKwl1bnNpZ25lZCBzaG9ydAkJCQludW1fYmFuZHM7CisJdW5pb24geworCQllcV9jb2VmZl8xCWVxX2NvZWZmc18xOworCQllcV9jb2VmZl8yCWVxX2NvZWZmc18yOworCQllcV9jb2VmZl8zCWVxX2NvZWZmc18zOworCQllcV9jb2VmZl80CWVxX2NvZWZmc180OworCQllcV9jb2VmZl81CWVxX2NvZWZmc181OworCQllcV9jb2VmZl82CWVxX2NvZWZmc182OworCQllcV9jb2VmZl83CWVxX2NvZWZmc183OworCQllcV9jb2VmZl84CWVxX2NvZWZmc184OworCQllcV9jb2VmZl85CWVxX2NvZWZmc185OworCQllcV9jb2VmZl8xMAllcV9jb2VmZnNfMTA7CisJCWVxX2NvZWZmXzExCWVxX2NvZWZmc18xMTsKKwkJZXFfY29lZmZfMTIJZXFfY29lZmZzXzEyOworCX0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgZXFfY29lZmY7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc19lcWFsaXplcjsKKworCisvKgorICogQ29tbWFuZCBTdHJ1Y3R1cmUgdG8gY29uZmlndXJlIHBvc3QgcHJvY2Vzc2luZyBwYXJhbWV0ZXJzIChBRFJDKQorICovCisKKyNkZWZpbmUgQVVEUFBfQ01EX0NGR19PQkpFQ1RfUEFSQU1TX0FEUkNfTEVOCQlcCisJc2l6ZW9mKGF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc19hZHJjKQorCisKKyNkZWZpbmUgQVVEUFBfQ01EX0FEUkNfRkxBR19ESVMJCTB4MDAwMAorI2RlZmluZSBBVURQUF9DTURfQURSQ19GTEFHX0VOQQkJLTEKKwordHlwZWRlZiBzdHJ1Y3QgeworCWF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc19jb21tb24gCWNvbW1vbjsKKwlzaWduZWQgc2hvcnQJCQkJYWRyY19mbGFnOworCXVuc2lnbmVkIHNob3J0CQkJCWNvbXByZXNzaW9uX3RoOworCXVuc2lnbmVkIHNob3J0CQkJCWNvbXByZXNzaW9uX3Nsb3BlOworCXVuc2lnbmVkIHNob3J0CQkJCXJtc190aW1lOworCXVuc2lnbmVkIHNob3J0CQkJCWF0dGFja19jb25zdF9sc3c7CisJdW5zaWduZWQgc2hvcnQJCQkJYXR0YWNrX2NvbnN0X21zdzsKKwl1bnNpZ25lZCBzaG9ydAkJCQlyZWxlYXNlX2NvbnN0X2xzdzsKKwl1bnNpZ25lZCBzaG9ydAkJCQlyZWxlYXNlX2NvbnN0X21zdzsKKwl1bnNpZ25lZCBzaG9ydAkJCQlhZHJjX3N5c3RlbV9kZWxheTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfY21kX2NmZ19vYmplY3RfcGFyYW1zX2FkcmM7CisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBjb25maWd1cmUgcG9zdCBwcm9jZXNzaW5nIHBhcmFtZXRlcnMoU3BlY3RydW0gQW5hbGl6ZXIpCisgKi8KKworI2RlZmluZSBBVURQUF9DTURfQ0ZHX09CSkVDVF9QQVJBTVNfU1BFQ1RSQU1fTEVOCQlcCisJc2l6ZW9mKGF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc19zcGVjdHJhbSkKKworCit0eXBlZGVmIHN0cnVjdCB7CisJYXVkcHBfY21kX2NmZ19vYmplY3RfcGFyYW1zX2NvbW1vbiAJY29tbW9uOworCXVuc2lnbmVkIHNob3J0CQkJCXNhbXBsZV9pbnRlcnZhbDsKKwl1bnNpZ25lZCBzaG9ydAkJCQludW1fY29lZmY7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc19zcGVjdHJhbTsKKworLyoKKyAqIENvbW1hbmQgU3RydWN0dXJlIHRvIGNvbmZpZ3VyZSBwb3N0IHByb2Nlc3NpbmcgcGFyYW1ldGVycyAoUUNvbmNlcnQpCisgKi8KKworI2RlZmluZSBBVURQUF9DTURfQ0ZHX09CSkVDVF9QQVJBTVNfUUNPTkNFUlRfTEVOCQlcCisJc2l6ZW9mKGF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc19xY29uY2VydCkKKworCisjZGVmaW5lIEFVRFBQX0NNRF9RQ09OX0VOQV9GTEFHX0VOQQkJLTEKKyNkZWZpbmUgQVVEUFBfQ01EX1FDT05fRU5BX0ZMQUdfRElTCQkweDAwMDAKKworI2RlZmluZSBBVURQUF9DTURfUUNPTl9PUF9NT0RFX0hFQURQSE9ORQktMQorI2RlZmluZSBBVURQUF9DTURfUUNPTl9PUF9NT0RFX1NQRUFLRVJfRlJPTlQJMHgwMDAwCisjZGVmaW5lIEFVRFBQX0NNRF9RQ09OX09QX01PREVfU1BFQUtFUl9TSURFCTB4MDAwMQorI2RlZmluZSBBVURQUF9DTURfUUNPTl9PUF9NT0RFX1NQRUFLRVJfREVTS1RPUAkweDAwMDIKKworI2RlZmluZSBBVURQUF9DTURfUUNPTl9HQUlOX1VOSVQJCQkweDdGRkYKKyNkZWZpbmUgQVVEUFBfQ01EX1FDT05fR0FJTl9TSVhfREIJCQkweDQwMjcKKworCisjZGVmaW5lIEFVRFBQX0NNRF9RQ09OX0VYUEFOU0lPTl9NQVgJCTB4N0ZGRgorCisKK3R5cGVkZWYgc3RydWN0IHsKKwlhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfY29tbW9uIAljb21tb247CisJc2lnbmVkIHNob3J0CQkJCWVuYWJsZV9mbGFnOworCXNpZ25lZCBzaG9ydAkJCQlvdXRwdXRfbW9kZTsKKwlzaWduZWQgc2hvcnQJCQkJZ2FpbjsKKwlzaWduZWQgc2hvcnQJCQkJZXhwYW5zaW9uOworCXNpZ25lZCBzaG9ydAkJCQlkZWxheTsKKwl1bnNpZ25lZCBzaG9ydAkJCQlzdGFnZXNfcGVyX21vZGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc19xY29uY2VydDsKKworLyoKKyAqIENvbW1hbmQgU3RydWN0dXJlIHRvIGNvbmZpZ3VyZSBwb3N0IHByb2Nlc3NpbmcgcGFyYW1ldGVycyAoU2lkZSBDaGFpbikKKyAqLworCisjZGVmaW5lIEFVRFBQX0NNRF9DRkdfT0JKRUNUX1BBUkFNU19TSURFQ0hBSU5fTEVOCQlcCisJc2l6ZW9mKGF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc19zaWRlY2hhaW4pCisKKworI2RlZmluZSBBVURQUF9DTURfU0lERUNIQUlOX0FDVElWRV9GTEFHX0RJUwkweDAwMDAKKyNkZWZpbmUgQVVEUFBfQ01EX1NJREVDSEFJTl9BQ1RJVkVfRkxBR19FTkEJLTEKKwordHlwZWRlZiBzdHJ1Y3QgeworCWF1ZHBwX2NtZF9jZmdfb2JqZWN0X3BhcmFtc19jb21tb24gCWNvbW1vbjsKKwlzaWduZWQgc2hvcnQJCQkJYWN0aXZlX2ZsYWc7CisJdW5zaWduZWQgc2hvcnQJCQkJbnVtX2JhbmRzOworCXVuaW9uIHsKKwkJZmlsdGVyXzEJCQlmaWx0ZXJfMV9wYXJhbXM7CisJCWZpbHRlcl8yCQkJZmlsdGVyXzJfcGFyYW1zOworCQlmaWx0ZXJfMwkJCWZpbHRlcl8zX3BhcmFtczsKKwkJZmlsdGVyXzQJCQlmaWx0ZXJfNF9wYXJhbXM7CisJfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBwYXJhbXNfZmlsdGVyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfc2lkZWNoYWluOworCisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBjb25maWd1cmUgcG9zdCBwcm9jZXNzaW5nIHBhcmFtZXRlcnMgKFFBRlgpCisgKi8KKworI2RlZmluZSBBVURQUF9DTURfQ0ZHX09CSkVDVF9QQVJBTVNfUUFGWF9MRU4JCVwKKwlzaXplb2YoYXVkcHBfY21kX2NmZ19vYmplY3RfcGFyYW1zX3FhZngpCisKKyNkZWZpbmUgQVVEUFBfQ01EX1FBRlhfRU5BX0RJU0EJCTB4MDAwMAorI2RlZmluZSBBVURQUF9DTURfUUFGWF9FTkFfRU5BX0NGRwktMQorI2RlZmluZSBBVURQUF9DTURfUUFGWF9FTkFfRElTX0NGRwkweDAwMDEKKworI2RlZmluZSBBVURQUF9DTURfUUFGWF9DTURfVFlQRV9FTlYJMHgwMTAwCisjZGVmaW5lIEFVRFBQX0NNRF9RQUZYX0NNRF9UWVBFX09CSgkweDAwMTAKKyNkZWZpbmUgQVVEUFBfQ01EX1FBRlhfQ01EX1RZUEVfUVVFUlkJMHgxMDAwCisKKyNkZWZpbmUgQVVEUFBfQ01EX1FBRlhfQ01EU19FTlZfT1BfTU9ERQkweDAxMDAKKyNkZWZpbmUgQVVEUFBfQ01EX1FBRlhfQ01EU19FTlZfTElTX1BPUwkweDAxMDEKKyNkZWZpbmUgQVVEUFBfQ01EX1FBRlhfQ01EU19FTlZfTElTX09SSQkweDAxMDIKKyNkZWZpbmUgQVVEUFBfQ01EX1FBRlhfQ01EU19FTlZfTElTX1ZFTAkwWDAxMDMKKyNkZWZpbmUgQVVEUFBfQ01EX1FBRlhfQ01EU19FTlZfRU5WX1JFUwkweDAxMDcKKworI2RlZmluZSBBVURQUF9DTURfUUFGWF9DTURTX09CSl9TQU1QX0ZSRVEJMHgwMDEwCisjZGVmaW5lIEFVRFBQX0NNRF9RQUZYX0NNRFNfT0JKX1ZPTAkJMHgwMDExCisjZGVmaW5lIEFVRFBQX0NNRF9RQUZYX0NNRFNfT0JKX0RJU1QJCTB4MDAxMgorI2RlZmluZSBBVURQUF9DTURfUUFGWF9DTURTX09CSl9QT1MJCTB4MDAxMworI2RlZmluZSBBVURQUF9DTURfUUFGWF9DTURTX09CSl9WRUwJCTB4MDAxNAorCisKK3R5cGVkZWYgc3RydWN0IHsKKwlhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfY29tbW9uIAljb21tb247CisJc2lnbmVkIHNob3J0CQkJCWVuYWJsZTsKKwl1bnNpZ25lZCBzaG9ydAkJCQljb21tYW5kX3R5cGU7CisJdW5zaWduZWQgc2hvcnQJCQkJbnVtX2NvbW1hbmRzOworCXVuc2lnbmVkIHNob3J0CQkJCWNvbW1hbmRzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfY2ZnX29iamVjdF9wYXJhbXNfcWFmeDsKKworLyoKKyAqIENvbW1hbmQgU3RydWN0dXJlIHRvIGVuYWJsZSAsIGRpc2FibGUgb3IgY29uZmlndXJlIHRoZSByZXZlcmJlcmF0aW9uIGVmZmVjdAorICogKENvbW1vbikKKyAqLworCisjZGVmaW5lIEFVRFBQX0NNRF9SRVZFUkJfQ09ORklHCQkweDAwMDEKKyNkZWZpbmUJQVVEUFBfQ01EX1JFVkVSQl9DT05GSUdfQ09NTU9OX0xFTglcCisJc2l6ZW9mKGF1ZHBwX2NtZF9yZXZlcmJfY29uZmlnX2NvbW1vbikKKworI2RlZmluZSBBVURQUF9DTURfRU5BX0VOQQkweEZGRkYKKyNkZWZpbmUgQVVEUFBfQ01EX0VOQV9ESVMJMHgwMDAwCisjZGVmaW5lIEFVRFBQX0NNRF9FTkFfQ0ZHCTB4MDAwMQorCisjZGVmaW5lIEFVRFBQX0NNRF9DTURfVFlQRV9FTlYJCTB4MDEwNAorI2RlZmluZSBBVURQUF9DTURfQ01EX1RZUEVfT0JKCQkweDAwMTUKKyNkZWZpbmUgQVVEUFBfQ01EX0NNRF9UWVBFX1FVRVJZCTB4MTAwMAorCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAkJCWNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydAkJCWVuYWJsZTsKKwl1bnNpZ25lZCBzaG9ydAkJCWNtZF90eXBlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcF9jbWRfcmV2ZXJiX2NvbmZpZ19jb21tb247CisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBlbmFibGUgLCBkaXNhYmxlIG9yIGNvbmZpZ3VyZSB0aGUgcmV2ZXJiZXJhdGlvbiBlZmZlY3QKKyAqIChFTlYtMHgwMTA0KQorICovCisKKyNkZWZpbmUJQVVEUFBfQ01EX1JFVkVSQl9DT05GSUdfRU5WXzEwNF9MRU4JXAorCXNpemVvZihhdWRwcF9jbWRfcmV2ZXJiX2NvbmZpZ19lbnZfMTA0KQorCit0eXBlZGVmIHN0cnVjdCB7CisJYXVkcHBfY21kX3JldmVyYl9jb25maWdfY29tbW9uCWNvbW1vbjsKKwl1bnNpZ25lZCBzaG9ydAkJCWVudl9nYWluOworCXVuc2lnbmVkIHNob3J0CQkJZGVjYXlfbXN3OworCXVuc2lnbmVkIHNob3J0CQkJZGVjYXlfbHN3OworCXVuc2lnbmVkIHNob3J0CQkJZGVjYXlfdGltZXJhdGlvX21zdzsKKwl1bnNpZ25lZCBzaG9ydAkJCWRlY2F5X3RpbWVyYXRpb19sc3c7CisJdW5zaWduZWQgc2hvcnQJCQlkZWxheV90aW1lOworCXVuc2lnbmVkIHNob3J0CQkJcmV2ZXJiX2dhaW47CisJdW5zaWduZWQgc2hvcnQJCQlyZXZlcmJfZGVsYXk7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX2NtZF9yZXZlcmJfY29uZmlnX2Vudl8xMDQ7CisKKy8qCisgKiBDb21tYW5kIFN0cnVjdHVyZSB0byBlbmFibGUgLCBkaXNhYmxlIG9yIGNvbmZpZ3VyZSB0aGUgcmV2ZXJiZXJhdGlvbiBlZmZlY3QKKyAqIChFTlYtMHgwMDE1KQorICovCisKKyNkZWZpbmUJQVVEUFBfQ01EX1JFVkVSQl9DT05GSUdfRU5WXzE1X0xFTglcCisJc2l6ZW9mKGF1ZHBwX2NtZF9yZXZlcmJfY29uZmlnX2Vudl8xNSkKKwordHlwZWRlZiBzdHJ1Y3QgeworCWF1ZHBwX2NtZF9yZXZlcmJfY29uZmlnX2NvbW1vbgljb21tb247CisJdW5zaWduZWQgc2hvcnQJCQlvYmplY3RfbnVtOworCXVuc2lnbmVkIHNob3J0CQkJYWJzb2x1dGVfZ2FpbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfY21kX3JldmVyYl9jb25maWdfZW52XzE1OworCisKKyNlbmRpZiAvKiBRRFNQNUFVRFBQQ01ESV9IICovCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVhdWRwcG1zZy5oIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWF1ZHBwbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRmZWEyMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVhdWRwcG1zZy5oCkBAIC0wLDAgKzEsMzE4IEBACisjaWZuZGVmIFFEU1A1QVVEUFBNU0dfSAorI2RlZmluZSBRRFNQNUFVRFBQTVNHX0gKKworLyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSoKKworICAgICAgIFEgRCBTIFAgNSAgQSBVIEQgSSBPICAgUCBPIFMgVCAgIFAgUiBPIEMgRSBTIFMgSSBOIEcgICBNIFMgRworCitHRU5FUkFMIERFU0NSSVBUSU9OCisgIE1lc3NhZ2VzIHNlbnQgYnkgQVVEUFBUQVNLIHRvIEFSTQorCitSRUZFUkVOQ0VTCisgIE5vbmUKKworRVhURVJOQUxJWkVEIEZVTkNUSU9OUworICBOb25lCisKK0NvcHlyaWdodChjKSAxOTkyIC0gMjAwOSBieSBRVUFMQ09NTSwgSW5jb3Jwb3JhdGVkLgorCitUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Ki8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgICAgICAgICAgICAgICBFRElUIEhJU1RPUlkgRk9SIEZJTEUKKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGNvbW1lbnRzIGRlc2NyaWJpbmcgY2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZS4KK05vdGljZSB0aGF0IGNoYW5nZXMgYXJlIGxpc3RlZCBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuCisKKyAkSGVhZGVyOiAvL3NvdXJjZS9xY29tL3FjdC9tdWx0aW1lZGlhMi9BdWRpby9kcml2ZXJzL1FEU1A1RHJpdmVyL1FEU1A1SW50ZXJmYWNlL21haW4vbGF0ZXN0L3Fkc3A1YXVkcHBtc2cuaCM0ICQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoKKyAqIEFVRFBQVEFTSyB1c2VzIGF1ZFBQdVBSbGlzdCB0byBzZW5kIG1lc3NhZ2VzIHRvIHRoZSBBUk0KKyAqIExvY2F0aW9uIDogTUVNQQorICogQnVmZmVyIFNpemUgOiA0NQorICogTm8gb2YgQnVmZmVycyBpbiBhIHF1ZXVlIDogNSBmb3IgZ2FtaW5nIGF1ZGlvIGFuZCAxIGZvciBvdGhlciBpbWFnZXMKKyAqLworCisvKgorICogTVNHIHRvIEluZm9ybXMgdGhlIEFSTSBvcyBTdWNjZXNzL0ZhaWx1cmUgb2YgYnJpbmdpbmcgdXAgdGhlIGRlY29kZXIKKyAqLworCisjZGVmaW5lIEFVRFBQX01TR19TVEFUVVNfTVNHCQkweDAwMDEKKyNkZWZpbmUgQVVEUFBfTVNHX1NUQVRVU19NU0dfTEVOCVwKKwlzaXplb2YoYXVkcHBfbXNnX3N0YXR1c19tc2cpCisKKyNkZWZpbmUgQVVEUFBfTVNHX1NUQVRVU19TTEVFUAkJMHgwMDAwCisjZGVmaW5lIEFVRFBQX01TR19fU1RBVFVTX0lOSVQJCTB4MDAwMQorI2RlZmluZSBBVURQUF9NU0dfTVNHX1NUQVRVU19DRkcJMHgwMDAyCisjZGVmaW5lIEFVRFBQX01TR19TVEFUVVNfUExBWQkJMHgwMDAzCisKKyNkZWZpbmUgQVVEUFBfTVNHX1JFQVNPTl9NSVBTCTB4MDAwMAorI2RlZmluZSBBVURQUF9NU0dfUkVBU09OX01FTQkweDAwMDEKKwordHlwZWRlZiBzdHJ1Y3R7CisJdW5zaWduZWQgc2hvcnQgZGVjX2lkOworCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKKwl1bnNpZ25lZCBzaG9ydCByZWFzb247Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX21zZ19zdGF0dXNfbXNnOworCisvKgorICogTVNHIHRvIGNvbW11bmljYXRlIHRoZSBzcGVjdHJ1bSBhbmFseXplciBvdXRwdXQgYmFuZHMgdG8gdGhlIEFSTQorICovCisjZGVmaW5lIEFVRFBQX01TR19TUEFfQkFORFMJCTB4MDAwMgorI2RlZmluZSBBVURQUF9NU0dfU1BBX0JBTkRTX0xFTglcCisJc2l6ZW9mKGF1ZHBwX21zZ19zcGFfYmFuZHMpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAkJCWN1cnJlbnRfb2JqZWN0OworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfMTsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzI7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF8zOworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfNDsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzU7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF82OworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfNzsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzg7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF85OworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfMTA7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF8xMTsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzEyOworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfMTM7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF8xNDsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzE1OworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfMTY7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF8xNzsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzE4OworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfMTk7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF8yMDsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzIxOworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfMjI7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF8yMzsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzI0OworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfMjU7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF8yNjsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzI3OworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfMjg7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF8yOTsKKwl1bnNpZ25lZCBzaG9ydAkJCXNwYV9iYW5kXzMwOworCXVuc2lnbmVkIHNob3J0CQkJc3BhX2JhbmRfMzE7CisJdW5zaWduZWQgc2hvcnQJCQlzcGFfYmFuZF8zMjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfbXNnX3NwYV9iYW5kczsKKworLyoKKyAqIE1TRyB0byBjb21tdW5pY2F0ZSB0aGUgUENNIEkvTyBidWZmZXIgc3RhdHVzIHRvIEFSTQorICovCisjZGVmaW5lICBBVURQUF9NU0dfSE9TVF9QQ01fSU5URl9NU0cJCTB4MDAwMworI2RlZmluZSAgQVVEUFBfTVNHX0hPU1RfUENNX0lOVEZfTVNHX0xFTglcCisJc2l6ZW9mKGF1ZHBwX21zZ19ob3N0X3BjbV9pbnRmX21zZykKKworI2RlZmluZSBBVURQUF9NU0dfSE9TVFBDTV9JRF9UWF9BUk0JMHgwMDAwCisjZGVmaW5lIEFVRFBQX01TR19IT1NUUENNX0lEX0FSTV9UWAkweDAwMDEKKyNkZWZpbmUgQVVEUFBfTVNHX0hPU1RQQ01fSURfUlhfQVJNCTB4MDAwMgorI2RlZmluZSBBVURQUF9NU0dfSE9TVFBDTV9JRF9BUk1fUlgJMHgwMDAzCisKKyNkZWZpbmUgQVVEUFBfTVNHX1NBTVBfRlJFUV9JTkRYXzk2MDAwCTB4MDAwMAorI2RlZmluZSBBVURQUF9NU0dfU0FNUF9GUkVRX0lORFhfODgyMDAJMHgwMDAxCisjZGVmaW5lIEFVRFBQX01TR19TQU1QX0ZSRVFfSU5EWF82NDAwMAkweDAwMDIKKyNkZWZpbmUgQVVEUFBfTVNHX1NBTVBfRlJFUV9JTkRYXzQ4MDAwCTB4MDAwMworI2RlZmluZSBBVURQUF9NU0dfU0FNUF9GUkVRX0lORFhfNDQxMDAJMHgwMDA0CisjZGVmaW5lIEFVRFBQX01TR19TQU1QX0ZSRVFfSU5EWF8zMjAwMAkweDAwMDUKKyNkZWZpbmUgQVVEUFBfTVNHX1NBTVBfRlJFUV9JTkRYXzI0MDAwCTB4MDAwNgorI2RlZmluZSBBVURQUF9NU0dfU0FNUF9GUkVRX0lORFhfMjIwNTAJMHgwMDA3CisjZGVmaW5lIEFVRFBQX01TR19TQU1QX0ZSRVFfSU5EWF8xNjAwMAkweDAwMDgKKyNkZWZpbmUgQVVEUFBfTVNHX1NBTVBfRlJFUV9JTkRYXzEyMDAwCTB4MDAwOQorI2RlZmluZSBBVURQUF9NU0dfU0FNUF9GUkVRX0lORFhfMTEwMjUJMHgwMDBBCisjZGVmaW5lIEFVRFBQX01TR19TQU1QX0ZSRVFfSU5EWF84MDAwCTB4MDAwQgorCisjZGVmaW5lIEFVRFBQX01TR19DSEFOTkVMX01PREVfTU9OTwkJMHgwMDAxCisjZGVmaW5lIEFVRFBQX01TR19DSEFOTkVMX01PREVfU1RFUkVPCTB4MDAwMgorCit0eXBlZGVmIHN0cnVjdHsKKwl1bnNpZ25lZCBzaG9ydCBvYmpfbnVtOworCXVuc2lnbmVkIHNob3J0IG51bWJlcnNfb2Zfc2FtcGxlczsKKwl1bnNpZ25lZCBzaG9ydCBob3N0X3BjbV9pZDsKKwl1bnNpZ25lZCBzaG9ydCBidWZfaW5keDsKKwl1bnNpZ25lZCBzaG9ydCBzYW1wX2ZyZXFfaW5keDsKKwl1bnNpZ25lZCBzaG9ydCBjaGFubmVsX21vZGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX21zZ19ob3N0X3BjbV9pbnRmX21zZzsKKworCisvKgorICogTVNHIHRvIGNvbW11bmljYXRlIDNEIHBvc2l0aW9uIG9mIHRoZSBzb3VyY2UgYW5kIGxpc3RlbmVyICwgc291cmNlIHZvbHVtZQorICogc291cmNlIHJvbGxvZmYsIHNvdXJjZSBvcmllbnRhdGlvbgorICovCisKKyNkZWZpbmUgQVVEUFBfTVNHX1FBRlhfUE9TCQkweDAwMDQKKyNkZWZpbmUgQVVEUFBfTVNHX1FBRlhfUE9TX0xFTgkJXAorCXNpemVvZihhdWRwcF9tc2dfcWFmeF9wb3MpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAljdXJyZW50X29iamVjdDsKKwl1bnNpZ25lZCBzaG9ydAl4X3Bvc19saXNfbXN3OworCXVuc2lnbmVkIHNob3J0CXhfcG9zX2xpc19sc3c7CisJdW5zaWduZWQgc2hvcnQJeV9wb3NfbGlzX21zdzsKKwl1bnNpZ25lZCBzaG9ydAl5X3Bvc19saXNfbHN3OworCXVuc2lnbmVkIHNob3J0CXpfcG9zX2xpc19tc3c7CisJdW5zaWduZWQgc2hvcnQJel9wb3NfbGlzX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAl4X2Z3ZF9tc3c7CisJdW5zaWduZWQgc2hvcnQJeF9md2RfbHN3OworCXVuc2lnbmVkIHNob3J0CXlfZndkX21zdzsKKwl1bnNpZ25lZCBzaG9ydAl5X2Z3ZF9sc3c7CisJdW5zaWduZWQgc2hvcnQJel9md2RfbXN3OworCXVuc2lnbmVkIHNob3J0CXpfZndkX2xzdzsKKwl1bnNpZ25lZCBzaG9ydCAJeF91cF9tc3c7CisJdW5zaWduZWQgc2hvcnQJeF91cF9sc3c7CisJdW5zaWduZWQgc2hvcnQgCXlfdXBfbXN3OworCXVuc2lnbmVkIHNob3J0CXlfdXBfbHN3OworCXVuc2lnbmVkIHNob3J0IAl6X3VwX21zdzsKKwl1bnNpZ25lZCBzaG9ydAl6X3VwX2xzdzsKKwl1bnNpZ25lZCBzaG9ydCAJeF92ZWxfbGlzX21zdzsKKwl1bnNpZ25lZCBzaG9ydCAJeF92ZWxfbGlzX2xzdzsKKwl1bnNpZ25lZCBzaG9ydCAJeV92ZWxfbGlzX21zdzsKKwl1bnNpZ25lZCBzaG9ydCAJeV92ZWxfbGlzX2xzdzsKKwl1bnNpZ25lZCBzaG9ydCAJel92ZWxfbGlzX21zdzsKKwl1bnNpZ25lZCBzaG9ydCAJel92ZWxfbGlzX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAl0aHJlZWRfZW5hYmxlX2ZsYWc7CisJdW5zaWduZWQgc2hvcnQgCXZvbHVtZTsKKwl1bnNpZ25lZCBzaG9ydAl4X3Bvc19zb3VyY2VfbXN3OworCXVuc2lnbmVkIHNob3J0CXhfcG9zX3NvdXJjZV9sc3c7CisJdW5zaWduZWQgc2hvcnQJeV9wb3Nfc291cmNlX21zdzsKKwl1bnNpZ25lZCBzaG9ydAl5X3Bvc19zb3VyY2VfbHN3OworCXVuc2lnbmVkIHNob3J0CXpfcG9zX3NvdXJjZV9tc3c7CisJdW5zaWduZWQgc2hvcnQJel9wb3Nfc291cmNlX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAltYXhfZGlzdF8wX21zdzsKKwl1bnNpZ25lZCBzaG9ydAltYXhfZGlzdF8wX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAltaW5fZGlzdF8wX21zdzsKKwl1bnNpZ25lZCBzaG9ydAltaW5fZGlzdF8wX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAlyb2xsX29mZl9mYWN0b3I7CisJdW5zaWduZWQgc2hvcnQJbXV0ZV9hZnRlcl9tYXhfZmxhZzsKKwl1bnNpZ25lZCBzaG9ydAl4X3ZlbF9zb3VyY2VfbXN3OworCXVuc2lnbmVkIHNob3J0CXhfdmVsX3NvdXJjZV9sc3c7CisJdW5zaWduZWQgc2hvcnQJeV92ZWxfc291cmNlX21zdzsKKwl1bnNpZ25lZCBzaG9ydAl5X3ZlbF9zb3VyY2VfbHN3OworCXVuc2lnbmVkIHNob3J0CXpfdmVsX3NvdXJjZV9tc3c7CisJdW5zaWduZWQgc2hvcnQJel92ZWxfc291cmNlX2xzdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfbXNnX3FhZnhfcG9zOworCisvKgorICogTVNHIHRvIHByb3ZpZGUgQVZTWU5DIGZlZWRiYWNrIGZyb20gRFNQIHRvIEFSTQorICovCisKKyNkZWZpbmUgQVVEUFBfTVNHX0FWU1lOQ19NU0cJCTB4MDAwNQorI2RlZmluZSBBVURQUF9NU0dfQVZTWU5DX01TR19MRU4JXAorCXNpemVvZihhdWRwcF9tc2dfYXZzeW5jX21zZykKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CWFjdGl2ZV9mbGFnOworCXVuc2lnbmVkIHNob3J0CW51bV9zYW1wbGVzX2NvdW50ZXIwX0hTVzsKKwl1bnNpZ25lZCBzaG9ydAludW1fc2FtcGxlc19jb3VudGVyMF9NU1c7CisJdW5zaWduZWQgc2hvcnQJbnVtX3NhbXBsZXNfY291bnRlcjBfTFNXOworCXVuc2lnbmVkIHNob3J0CW51bV9ieXRlc19jb3VudGVyMF9IU1c7CisJdW5zaWduZWQgc2hvcnQJbnVtX2J5dGVzX2NvdW50ZXIwX01TVzsKKwl1bnNpZ25lZCBzaG9ydAludW1fYnl0ZXNfY291bnRlcjBfTFNXOworCXVuc2lnbmVkIHNob3J0CXNhbXBfZnJlcV9vYmpfMDsKKwl1bnNpZ25lZCBzaG9ydAlzYW1wX2ZyZXFfb2JqXzE7CisJdW5zaWduZWQgc2hvcnQJc2FtcF9mcmVxX29ial8yOworCXVuc2lnbmVkIHNob3J0CXNhbXBfZnJlcV9vYmpfMzsKKwl1bnNpZ25lZCBzaG9ydAlzYW1wX2ZyZXFfb2JqXzQ7CisJdW5zaWduZWQgc2hvcnQJc2FtcF9mcmVxX29ial81OworCXVuc2lnbmVkIHNob3J0CXNhbXBfZnJlcV9vYmpfNjsKKwl1bnNpZ25lZCBzaG9ydAlzYW1wX2ZyZXFfb2JqXzc7CisJdW5zaWduZWQgc2hvcnQJc2FtcF9mcmVxX29ial84OworCXVuc2lnbmVkIHNob3J0CXNhbXBfZnJlcV9vYmpfOTsKKwl1bnNpZ25lZCBzaG9ydAlzYW1wX2ZyZXFfb2JqXzEwOworCXVuc2lnbmVkIHNob3J0CXNhbXBfZnJlcV9vYmpfMTE7CisJdW5zaWduZWQgc2hvcnQJc2FtcF9mcmVxX29ial8xMjsKKwl1bnNpZ25lZCBzaG9ydAlzYW1wX2ZyZXFfb2JqXzEzOworCXVuc2lnbmVkIHNob3J0CXNhbXBfZnJlcV9vYmpfMTQ7CisJdW5zaWduZWQgc2hvcnQJc2FtcF9mcmVxX29ial8xNTsKKwl1bnNpZ25lZCBzaG9ydAludW1fc2FtcGxlc19jb3VudGVyNF9IU1c7CisJdW5zaWduZWQgc2hvcnQJbnVtX3NhbXBsZXNfY291bnRlcjRfTVNXOworCXVuc2lnbmVkIHNob3J0CW51bV9zYW1wbGVzX2NvdW50ZXI0X0xTVzsKKwl1bnNpZ25lZCBzaG9ydAludW1fYnl0ZXNfY291bnRlcjRfSFNXOworCXVuc2lnbmVkIHNob3J0CW51bV9ieXRlc19jb3VudGVyNF9NU1c7CisJdW5zaWduZWQgc2hvcnQJbnVtX2J5dGVzX2NvdW50ZXI0X0xTVzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfbXNnX2F2c3luY19tc2c7CisKKy8qCisgKiBNU0cgdG8gcHJvdmlkZSBQQ00gRE1BIE1pc3NlZCBmZWVkYmFjayBmcm9tIHRoZSBEU1AgdG8gQVJNCisgKi8KKworI2RlZmluZSAgQVVEUFBfTVNHX1BDTURNQU1JU1NFRAkweDAwMDYKKyNkZWZpbmUgIEFVRFBQX01TR19QQ01ETUFNSVNTRURfTEVOCVwKKwlzaXplb2YoYXVkcHBfbXNnX3BjbWRtYW1pc3NlZCk7CisKK3R5cGVkZWYgc3RydWN0eworCS8qCisJKiogQml0IDAJMCA9IFBDTSBETUEgbm90IG1pc3NlZCBmb3Igb2JqZWN0IDAKKwkqKiAgICAgICAgMSA9IFBDTSBETUEgbWlzc2VkIGZvciBvYmplY3QwCisJKiogQml0IDEJMCA9IFBDTSBETUEgbm90IG1pc3NlZCBmb3Igb2JqZWN0IDEKKwkqKiAgICAgICAgMSA9IFBDTSBETUEgbWlzc2VkIGZvciBvYmplY3QxCisJKiogQml0IDIJMCA9IFBDTSBETUEgbm90IG1pc3NlZCBmb3Igb2JqZWN0IDIKKwkqKiAgICAgICAgMSA9IFBDTSBETUEgbWlzc2VkIGZvciBvYmplY3QyCisJKiogQml0IDMJMCA9IFBDTSBETUEgbm90IG1pc3NlZCBmb3Igb2JqZWN0IDMKKwkqKiAgICAgICAgMSA9IFBDTSBETUEgbWlzc2VkIGZvciBvYmplY3QzCisJKiogQml0IDQJMCA9IFBDTSBETUEgbm90IG1pc3NlZCBmb3Igb2JqZWN0IDQKKwkqKiAgICAgICAgMSA9IFBDTSBETUEgbWlzc2VkIGZvciBvYmplY3Q0CisJKi8KKwl1bnNpZ25lZCBzaG9ydCBwY21kbWFtaXNzZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHBwX21zZ19wY21kbWFtaXNzZWQ7CisKKy8qCisgKiBNU0cgdG8gQVVEUFAgZW5hYmxlIG9yIGRpc2FibGUgZmVlZGJhY2sgZm9ybSBEU1AgdG8gQVJNCisgKi8KKworI2RlZmluZSBBVURQUF9NU0dfQ0ZHX01TRwkweDAwMDcKKyNkZWZpbmUgQVVEUFBfTVNHX0NGR19NU0dfTEVOCVwKKyAgICBzaXplb2YoYXVkcHBfbXNnX2NmZ19tc2cpCisKKyNkZWZpbmUgQVVEUFBfTVNHX0VOQV9FTkEJMHhGRkZGCisjZGVmaW5lIEFVRFBQX01TR19FTkFfRElTCTB4MDAwMAorCit0eXBlZGVmIHN0cnVjdHsKKwkvKiAgIEVuYWJsZWQgIC0gMHhmZmZmCisJKiogIERpc2FibGVkIC0gMAorCSovCisJdW5zaWduZWQgc2hvcnQgZW5hYmxlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfbXNnX2NmZ19tc2c7CisKKy8qCisgKiBNU0cgdG8gY29tbXVuaWNhdGUgdGhlIHJldmVyYiAgcGVyIG9iamVjdCB2b2x1bWUKKyAqLworCisjZGVmaW5lIEFVRFBQX01TR19RUkVWRVJCX1ZPTFVNRQkweDAwMDgKKyNkZWZpbmUgQVVEUFBfTVNHX1FSRVZFUkJfVk9MVU1FX0xFTglcCisJc2l6ZW9mKGF1ZHBwX21zZ19xcmV2ZXJiX3ZvbHVtZSkKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJb2JqXzBfZ2FpbjsKKwl1bnNpZ25lZCBzaG9ydAlvYmpfMV9nYWluOworCXVuc2lnbmVkIHNob3J0CW9ial8yX2dhaW47CisJdW5zaWduZWQgc2hvcnQJb2JqXzNfZ2FpbjsKKwl1bnNpZ25lZCBzaG9ydAlvYmpfNF9nYWluOworCXVuc2lnbmVkIHNob3J0CWhwY21fb2JqX3ZvbHVtZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHBfbXNnX3FyZXZlcmJfdm9sdW1lOworCisjZGVmaW5lIEFVRFBQX01TR19ST1VUSU5HX0FDSyAweDAwMDkKKyNkZWZpbmUgQVVEUFBfTVNHX1JPVVRJTkdfQUNLX0xFTiBcCisgIHNpemVvZihzdHJ1Y3QgYXVkcHBfbXNnX3JvdXRpbmdfYWNrKQorCitzdHJ1Y3QgYXVkcHBfbXNnX3JvdXRpbmdfYWNrIHsKKwl1bnNpZ25lZCBzaG9ydCBkZWNfaWQ7CisJdW5zaWduZWQgc2hvcnQgcm91dGluZ19tb2RlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBBVURQUF9NU0dfRkxVU0hfQUNLIDB4MDAwQQorCisjZW5kaWYgLyogUURTUDVBVURQUE1TR19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1YXVkcHJlcHJvY2NtZGkuaCBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVhdWRwcmVwcm9jY21kaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2ZDMzZDUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1YXVkcHJlcHJvY2NtZGkuaApAQCAtMCwwICsxLDI1NiBAQAorI2lmbmRlZiBRRFNQNUFVRFBSRVBST0NDTURJX0gKKyNkZWZpbmUgUURTUDVBVURQUkVQUk9DQ01ESV9ICisKKy8qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qCisKKyAgICBBIFUgRCBJIE8gICBQIFIgRSAgIFAgUiBPIEMgRSBTIFMgSSBOIEcgIEkgTiBUIEUgUiBOIEEgTCAgQyBPIE0gTSBBIE4gRCBTCisKK0dFTkVSQUwgREVTQ1JJUFRJT04KKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmludGlvbnMgb2YgZm9ybWF0IGJsb2NrcyBvZiBjb21tYW5kcworICB0aGF0IGFyZSBhY2NlcHRlZCBieSBBVURQUkVQUk9DIFRhc2sKKworUkVGRVJFTkNFUworICBOb25lCisKK0VYVEVSTkFMSVpFRCBGVU5DVElPTlMKKyAgTm9uZQorCitDb3B5cmlnaHQoYykgMTk5MiAtIDIwMDggYnkgUVVBTENPTU0sIEluY29ycG9yYXRlZC4KKworVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKK21heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgICAgICAgICAgICAgICAgRURJVCBISVNUT1JZIEZPUiBGSUxFCisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBjb21tZW50cyBkZXNjcmliaW5nIGNoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUuCitOb3RpY2UgdGhhdCBjaGFuZ2VzIGFyZSBsaXN0ZWQgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyLgorCiskSGVhZGVyOiAvL3NvdXJjZS9xY29tL3FjdC9tdWx0aW1lZGlhMi9BdWRpby9kcml2ZXJzL1FEU1A1RHJpdmVyL1FEU1A1SW50ZXJmYWNlL21haW4vbGF0ZXN0L3Fkc3A1YXVkcHJlcHJvY2NtZGkuaCMyICQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoKKyAqIEFVRElPUFJFUFJPQyBDT01NQU5EUzoKKyAqIEFSTSB1c2VzIHVQQXVkUHJlUHJvY0NtZFF1ZXVlIHRvIGNvbW11bmljYXRlIHdpdGggQVVEUFJFUFJPQ1RBU0sKKyAqIExvY2F0aW9uIDogTUVNQgorICogQnVmZmVyIHNpemUgOiA1MQorICogTnVtYmVyIG9mIGJ1ZmZlcnMgaW4gYSBxdWV1ZSA6IDMKKyAqLworCisvKgorICogQ29tbWFuZCB0byBjb25maWd1cmUgdGhlIHBhcmFtZXRlcnMgb2YgQUdDCisgKi8KKworI2RlZmluZQlBVURQUkVQUk9DX0NNRF9DRkdfQUdDX1BBUkFNUwkweDAwMDAKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfQ0ZHX0FHQ19QQVJBTVNfTEVOCVwKKwlzaXplb2YoYXVkcHJlcHJvY19jbWRfY2ZnX2FnY19wYXJhbXMpCisKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfVFhfQUdDX1BBUkFNX01BU0tfQ09NUF9TTE9QRQkweDAwMDkKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfVFhfQUdDX1BBUkFNX01BU0tfQ09NUF9USAkweDAwMEEKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfVFhfQUdDX1BBUkFNX01BU0tfRVhQX1NMT1BFCTB4MDAwQgorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9UWF9BR0NfUEFSQU1fTUFTS19FWFBfVEgJCTB4MDAwQworI2RlZmluZQlBVURQUkVQUk9DX0NNRF9UWF9BR0NfUEFSQU1fTUFTS19DT01QX0FJR19GTEFHCQkweDAwMEQKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfVFhfQUdDX1BBUkFNX01BU0tfQ09NUF9TVEFUSUNfR0FJTgkweDAwMEUKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfVFhfQUdDX1BBUkFNX01BU0tfVFhfQUdDX0VOQV9GTEFHCTB4MDAwRgorCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX1RYX0FHQ19FTkFfRkxBR19FTkEJLTEKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfVFhfQUdDX0VOQV9GTEFHX0RJUwkweDAwMDAKKworI2RlZmluZQlBVURQUkVQUk9DX0NNRF9BRFBfR0FJTl9GTEFHX0VOQV9BRFBfR0FJTgktMQorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9BRFBfR0FJTl9GTEFHX0VOQV9TVEFUSUNfR0FJTgkweDAwMDAKKworI2RlZmluZQlBVURQUkVQUk9DX0NNRF9QQVJBTV9NQVNLX1JNU19UQVkJMHgwMDA0CisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX1BBUkFNX01BU0tfUkVMRUFTRUsJMHgwMDA1CisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX1BBUkFNX01BU0tfREVMQVkJCTB4MDAwNgorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9QQVJBTV9NQVNLX0FUVEFDS0sJMHgwMDA3CisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX1BBUkFNX01BU0tfTEVBS1JBVEVfU0xPVwkweDAwMDgKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfUEFSQU1fTUFTS19MRUFLUkFURV9GQVNUCTB4MDAwOQorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9QQVJBTV9NQVNLX0FJR19SRUxFQVNFSyAJMHgwMDBBCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX1BBUkFNX01BU0tfQUlHX01JTgkweDAwMEIKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfUEFSQU1fTUFTS19BSUdfTUFYCTB4MDAwQworI2RlZmluZQlBVURQUkVQUk9DX0NNRF9QQVJBTV9NQVNLX0xFQUtfVVAJMHgwMDBECisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX1BBUkFNX01BU0tfTEVBS19ET1dOCTB4MDAwRQorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9QQVJBTV9NQVNLX0FJR19BVFRBQ0tLCTB4MDAwRgorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJY21kX2lkOworCXVuc2lnbmVkIHNob3J0CXR4X2FnY19wYXJhbV9tYXNrOworCXVuc2lnbmVkIHNob3J0CXR4X2FnY19lbmFibGVfZmxhZzsKKwl1bnNpZ25lZCBzaG9ydAlzdGF0aWNfZ2FpbjsKKwlzaWduZWQgc2hvcnQJYWRhcHRpdmVfZ2Fpbl9mbGFnOworCXVuc2lnbmVkIHNob3J0CWV4cGFuZGVyX3RoOworCXVuc2lnbmVkIHNob3J0CWV4cGFuZGVyX3Nsb3BlOworCXVuc2lnbmVkIHNob3J0CWNvbXByZXNzb3JfdGg7CisJdW5zaWduZWQgc2hvcnQJY29tcHJlc3Nvcl9zbG9wZTsKKwl1bnNpZ25lZCBzaG9ydAlwYXJhbV9tYXNrOworCXVuc2lnbmVkIHNob3J0CWFpZ19hdHRhY2trOworCXVuc2lnbmVkIHNob3J0CWFpZ19sZWFrX2Rvd247CisJdW5zaWduZWQgc2hvcnQJYWlnX2xlYWtfdXA7CisJdW5zaWduZWQgc2hvcnQJYWlnX21heDsKKwl1bnNpZ25lZCBzaG9ydAlhaWdfbWluOworCXVuc2lnbmVkIHNob3J0CWFpZ19yZWxlYXNlazsKKwl1bnNpZ25lZCBzaG9ydAlhaWdfbGVha3JhdGVfZmFzdDsKKwl1bnNpZ25lZCBzaG9ydAlhaWdfbGVha3JhdGVfc2xvdzsKKwl1bnNpZ25lZCBzaG9ydAlhdHRhY2trX21zdzsKKwl1bnNpZ25lZCBzaG9ydAlhdHRhY2trX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAlkZWxheTsKKwl1bnNpZ25lZCBzaG9ydAlyZWxlYXNla19tc3c7CisJdW5zaWduZWQgc2hvcnQJcmVsZWFzZWtfbHN3OworCXVuc2lnbmVkIHNob3J0CXJtc190YXY7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHByZXByb2NfY21kX2NmZ19hZ2NfcGFyYW1zOworCisKKy8qCisgKiBDb21tYW5kIHRvIGNvbmZpZ3VyZSB0aGUgcGFyYW1zIG9mIEFkdmFudmVkIEFHQworICovCisKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfQ0ZHX0FHQ19QQVJBTVNfMgkJMHgwMDAxCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0NGR19BR0NfUEFSQU1TXzJfTEVOCQlcCisJc2l6ZW9mKGF1ZHByZXByb2NfY21kX2NmZ19hZ2NfcGFyYW1zXzIpCisKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfMl9UWF9BR0NfRU5BX0ZMQUdfRU5BCS0xOworI2RlZmluZQlBVURQUkVQUk9DX0NNRF8yX1RYX0FHQ19FTkFfRkxBR19ESVMJMHgwMDAwOworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJY21kX2lkOworCXVuc2lnbmVkIHNob3J0CWFnY19wYXJhbV9tYXNrOworCXNpZ25lZCBzaG9ydAl0eF9hZ2NfZW5hYmxlX2ZsYWc7CisJdW5zaWduZWQgc2hvcnQJY29tcF9zdGF0aWNfZ2FpbjsKKwl1bnNpZ25lZCBzaG9ydAlleHBfdGg7CisJdW5zaWduZWQgc2hvcnQJZXhwX3Nsb3BlOworCXVuc2lnbmVkIHNob3J0CWNvbXBfdGg7CisJdW5zaWduZWQgc2hvcnQJY29tcF9zbG9wZTsKKwl1bnNpZ25lZCBzaG9ydAljb21wX3Jtc190YXY7CisJdW5zaWduZWQgc2hvcnQJY29tcF9zYW1wX21hc2s7CisJdW5zaWduZWQgc2hvcnQJY29tcF9hdHRhY2trX21zdzsKKwl1bnNpZ25lZCBzaG9ydAljb21wX2F0dGFja2tfbHN3OworCXVuc2lnbmVkIHNob3J0CWNvbXBfcmVsZWFzZWtfbXN3OworCXVuc2lnbmVkIHNob3J0CWNvbXBfcmVsZWFzZWtfbHN3OworCXVuc2lnbmVkIHNob3J0CWNvbXBfZGVsYXk7CisJdW5zaWduZWQgc2hvcnQJY29tcF9tYWtldXBfZ2FpbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcHJlcHJvY19jbWRfY2ZnX2FnY19wYXJhbXNfMjsKKworLyoKKyAqIENvbW1hbmQgdG8gY29uZmlndXJlIHBhcmFtcyBmb3IgbnMKKyAqLworCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0NGR19OU19QQVJBTVMJCTB4MDAwMgorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9DRkdfTlNfUEFSQU1TX0xFTglcCisJc2l6ZW9mKGF1ZHByZXByb2NfY21kX2NmZ19uc19wYXJhbXMpCisKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfRUNfTU9ERV9ORVdfTkxNU19FTkEJMHgwMDAxCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0VDX01PREVfTkVXX05MTVNfRElTIAkweDAwMDAKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfRUNfTU9ERV9ORVdfREVTX0VOQQkweDAwMDIKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfRUNfTU9ERV9ORVdfREVTX0RJUwkweDAwMDAKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfRUNfTU9ERV9ORVdfTlNfRU5BCTB4MDAwNAorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9FQ19NT0RFX05FV19OU19ESVMJMHgwMDAwCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0VDX01PREVfTkVXX0NOSV9FTkEJMHgwMDA4CisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0VDX01PREVfTkVXX0NOSV9ESVMJMHgwMDAwCisKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfRUNfTU9ERV9ORVdfTkxFU19FTkEJMHgwMDEwCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0VDX01PREVfTkVXX05MRVNfRElTCTB4MDAwMAorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9FQ19NT0RFX05FV19IQl9FTkEJMHgwMDIwCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0VDX01PREVfTkVXX0hCX0RJUwkweDAwMDAKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfRUNfTU9ERV9ORVdfVkFfRU5BCTB4MDA0MAorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9FQ19NT0RFX05FV19WQV9ESVMJMHgwMDAwCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0VDX01PREVfTkVXX1BDRF9FTkEJMHgwMDgwCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0VDX01PREVfTkVXX1BDRF9ESVMJMHgwMDAwCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0VDX01PREVfTkVXX0ZFSElfRU5BCTB4MDEwMAorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9FQ19NT0RFX05FV19GRUhJX0RJUyAJMHgwMDAwCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0VDX01PREVfTkVXX05FSElfRU5BCTB4MDIwMAorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9FQ19NT0RFX05FV19ORUhJX0RJUyAJMHgwMDAwCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0VDX01PREVfTkVXX05MUFBfRU5BCTB4MDQwMAorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9FQ19NT0RFX05FV19OTFBQX0RJUwkweDAwMDAKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfRUNfTU9ERV9ORVdfRk5FX0VOQQkweDA4MDAKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfRUNfTU9ERV9ORVdfRk5FX0RJUwkweDAwMDAKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfRUNfTU9ERV9ORVdfUFJFTkxNU19FTkEgCTB4MTAwMAorI2RlZmluZQlBVURQUkVQUk9DX0NNRF9FQ19NT0RFX05FV19QUkVOTE1TX0RJUyAJMHgwMDAwCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAljbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQJZWNfbW9kZV9uZXc7CisJdW5zaWduZWQgc2hvcnQJZGVuc19nYW1tYV9uOworCXVuc2lnbmVkIHNob3J0CWRlbnNfbmZlX2Jsb2NrX3NpemU7CisJdW5zaWduZWQgc2hvcnQJZGVuc19saW1pdF9uczsKKwl1bnNpZ25lZCBzaG9ydAlkZW5zX2xpbWl0X25zX2Q7CisJdW5zaWduZWQgc2hvcnQJd2JfZ2FtbWFfZTsKKwl1bnNpZ25lZCBzaG9ydAl3Yl9nYW1tYV9uOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcmVwcm9jX2NtZF9jZmdfbnNfcGFyYW1zOworCisvKgorICogQ29tbWFuZCB0byBjb25maWd1cmUgcGFyYW1ldGVycyBmb3IgSUlSIHR1bmluZyBmaWx0ZXIKKyAqLworCisjZGVmaW5lCUFVRFBSRVBST0NfQ01EX0NGR19JSVJfVFVOSU5HX0ZJTFRFUl9QQVJBTVMJCTB4MDAwMworI2RlZmluZQlBVURQUkVQUk9DX0NNRF9DRkdfSUlSX1RVTklOR19GSUxURVJfUEFSQU1TX0xFTglcCisJc2l6ZW9mKGF1ZHByZXByb2NfY21kX2NmZ19paXJfdHVuaW5nX2ZpbHRlcl9wYXJhbXMpCisKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfSUlSX0FDVElWRV9GTEFHX0RJUwkweDAwMDAKKyNkZWZpbmUJQVVEUFJFUFJPQ19DTURfSUlSX0FDVElWRV9GTEFHX0VOQQkweDAwMDEKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CWNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydAlhY3RpdmVfZmxhZzsKKwl1bnNpZ25lZCBzaG9ydAludW1fYmFuZHM7CisJdW5zaWduZWQgc2hvcnQJbnVtZXJhdG9yX2NvZWZmX2IwX2ZpbHRlcjBfbHN3OworCXVuc2lnbmVkIHNob3J0CW51bWVyYXRvcl9jb2VmZl9iMF9maWx0ZXIwX21zdzsKKwl1bnNpZ25lZCBzaG9ydAludW1lcmF0b3JfY29lZmZfYjFfZmlsdGVyMF9sc3c7CisJdW5zaWduZWQgc2hvcnQJbnVtZXJhdG9yX2NvZWZmX2IxX2ZpbHRlcjBfbXN3OworCXVuc2lnbmVkIHNob3J0CW51bWVyYXRvcl9jb2VmZl9iMl9maWx0ZXIwX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAludW1lcmF0b3JfY29lZmZfYjJfZmlsdGVyMF9tc3c7CisJdW5zaWduZWQgc2hvcnQJbnVtZXJhdG9yX2NvZWZmX2IwX2ZpbHRlcjFfbHN3OworCXVuc2lnbmVkIHNob3J0CW51bWVyYXRvcl9jb2VmZl9iMF9maWx0ZXIxX21zdzsKKwl1bnNpZ25lZCBzaG9ydAludW1lcmF0b3JfY29lZmZfYjFfZmlsdGVyMV9sc3c7CisJdW5zaWduZWQgc2hvcnQJbnVtZXJhdG9yX2NvZWZmX2IxX2ZpbHRlcjFfbXN3OworCXVuc2lnbmVkIHNob3J0CW51bWVyYXRvcl9jb2VmZl9iMl9maWx0ZXIxX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAludW1lcmF0b3JfY29lZmZfYjJfZmlsdGVyMV9tc3c7CisJdW5zaWduZWQgc2hvcnQJbnVtZXJhdG9yX2NvZWZmX2IwX2ZpbHRlcjJfbHN3OworCXVuc2lnbmVkIHNob3J0CW51bWVyYXRvcl9jb2VmZl9iMF9maWx0ZXIyX21zdzsKKwl1bnNpZ25lZCBzaG9ydAludW1lcmF0b3JfY29lZmZfYjFfZmlsdGVyMl9sc3c7CisJdW5zaWduZWQgc2hvcnQJbnVtZXJhdG9yX2NvZWZmX2IxX2ZpbHRlcjJfbXN3OworCXVuc2lnbmVkIHNob3J0CW51bWVyYXRvcl9jb2VmZl9iMl9maWx0ZXIyX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAludW1lcmF0b3JfY29lZmZfYjJfZmlsdGVyMl9tc3c7CisJdW5zaWduZWQgc2hvcnQJbnVtZXJhdG9yX2NvZWZmX2IwX2ZpbHRlcjNfbHN3OworCXVuc2lnbmVkIHNob3J0CW51bWVyYXRvcl9jb2VmZl9iMF9maWx0ZXIzX21zdzsKKwl1bnNpZ25lZCBzaG9ydAludW1lcmF0b3JfY29lZmZfYjFfZmlsdGVyM19sc3c7CisJdW5zaWduZWQgc2hvcnQJbnVtZXJhdG9yX2NvZWZmX2IxX2ZpbHRlcjNfbXN3OworCXVuc2lnbmVkIHNob3J0CW51bWVyYXRvcl9jb2VmZl9iMl9maWx0ZXIzX2xzdzsKKwl1bnNpZ25lZCBzaG9ydAludW1lcmF0b3JfY29lZmZfYjJfZmlsdGVyM19tc3c7CisJdW5zaWduZWQgc2hvcnQgCWRlbm9taW5hdG9yX2NvZWZmX2EwX2ZpbHRlcjBfbHN3OworCXVuc2lnbmVkIHNob3J0IAlkZW5vbWluYXRvcl9jb2VmZl9hMF9maWx0ZXIwX21zdzsKKwl1bnNpZ25lZCBzaG9ydCAJZGVub21pbmF0b3JfY29lZmZfYTFfZmlsdGVyMF9sc3c7CisJdW5zaWduZWQgc2hvcnQgCWRlbm9taW5hdG9yX2NvZWZmX2ExX2ZpbHRlcjBfbXN3OworCXVuc2lnbmVkIHNob3J0IAlkZW5vbWluYXRvcl9jb2VmZl9hMF9maWx0ZXIxX2xzdzsKKwl1bnNpZ25lZCBzaG9ydCAJZGVub21pbmF0b3JfY29lZmZfYTBfZmlsdGVyMV9tc3c7CisJdW5zaWduZWQgc2hvcnQgCWRlbm9taW5hdG9yX2NvZWZmX2ExX2ZpbHRlcjFfbHN3OworCXVuc2lnbmVkIHNob3J0IAlkZW5vbWluYXRvcl9jb2VmZl9hMV9maWx0ZXIxX21zdzsKKyAgdW5zaWduZWQgc2hvcnQgCWRlbm9taW5hdG9yX2NvZWZmX2EwX2ZpbHRlcjJfbHN3OworCXVuc2lnbmVkIHNob3J0IAlkZW5vbWluYXRvcl9jb2VmZl9hMF9maWx0ZXIyX21zdzsKKwl1bnNpZ25lZCBzaG9ydCAJZGVub21pbmF0b3JfY29lZmZfYTFfZmlsdGVyMl9sc3c7CisJdW5zaWduZWQgc2hvcnQgCWRlbm9taW5hdG9yX2NvZWZmX2ExX2ZpbHRlcjJfbXN3OworICB1bnNpZ25lZCBzaG9ydCAJZGVub21pbmF0b3JfY29lZmZfYTBfZmlsdGVyM19sc3c7CisJdW5zaWduZWQgc2hvcnQgCWRlbm9taW5hdG9yX2NvZWZmX2EwX2ZpbHRlcjNfbXN3OworCXVuc2lnbmVkIHNob3J0IAlkZW5vbWluYXRvcl9jb2VmZl9hMV9maWx0ZXIzX2xzdzsKKwl1bnNpZ25lZCBzaG9ydCAJZGVub21pbmF0b3JfY29lZmZfYTFfZmlsdGVyM19tc3c7CisKKwl1bnNpZ25lZCBzaG9ydAlzaGlmdF9mYWN0b3JfZmlsdGVyMDsKKwl1bnNpZ25lZCBzaG9ydAlzaGlmdF9mYWN0b3JfZmlsdGVyMTsKKwl1bnNpZ25lZCBzaG9ydAlzaGlmdF9mYWN0b3JfZmlsdGVyMjsKKwl1bnNpZ25lZCBzaG9ydAlzaGlmdF9mYWN0b3JfZmlsdGVyMzsKKworCXVuc2lnbmVkIHNob3J0CWNoYW5uZWxfc2VsZWN0ZWQwOworCXVuc2lnbmVkIHNob3J0CWNoYW5uZWxfc2VsZWN0ZWQxOworCXVuc2lnbmVkIHNob3J0CWNoYW5uZWxfc2VsZWN0ZWQyOworCXVuc2lnbmVkIHNob3J0CWNoYW5uZWxfc2VsZWN0ZWQzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKWF1ZHByZXByb2NfY21kX2NmZ19paXJfdHVuaW5nX2ZpbHRlcl9wYXJhbXM7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWF1ZHByZXByb2Ntc2cuaCBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVhdWRwcmVwcm9jbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQwZTQxZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVhdWRwcmVwcm9jbXNnLmgKQEAgLTAsMCArMSw4NSBAQAorI2lmbmRlZiBRRFNQNUFVRFBSRVBST0NNU0dfSAorI2RlZmluZSBRRFNQNUFVRFBSRVBST0NNU0dfSAorCisvKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09KgorCisgICAgQSBVIEQgSSBPICAgUCBSIEUgICBQIFIgTyBDIEUgUyBTIEkgTiBHICBNIEUgUyBTIEEgRyBFIFMKKworR0VORVJBTCBERVNDUklQVElPTgorICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW50aW9ucyBvZiBmb3JtYXQgYmxvY2tzIG9mIG1lc3NhZ2VzCisgIHRoYXQgYXJlIHJjdmQgYnkgQVVEUFJFUFJPQyBUYXNrCisKK1JFRkVSRU5DRVMKKyAgTm9uZQorCitFWFRFUk5BTElaRUQgRlVOQ1RJT05TCisgIE5vbmUKKworQ29weXJpZ2h0KGMpIDE5OTIgLSAyMDA4IGJ5IFFVQUxDT01NLCBJbmNvcnBvcmF0ZWQuCisKK1RoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCittYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisqPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICAgICAgICAgICAgICAgIEVESVQgSElTVE9SWSBGT1IgRklMRQorCitUaGlzIHNlY3Rpb24gY29udGFpbnMgY29tbWVudHMgZGVzY3JpYmluZyBjaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlLgorTm90aWNlIHRoYXQgY2hhbmdlcyBhcmUgbGlzdGVkIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlci4KKworICRIZWFkZXI6IC8vc291cmNlL3Fjb20vcWN0L211bHRpbWVkaWEyL0F1ZGlvL2RyaXZlcnMvUURTUDVEcml2ZXIvUURTUDVJbnRlcmZhY2UvbWFpbi9sYXRlc3QvcWRzcDVhdWRwcmVwcm9jbXNnLmgjMyAkCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qCisgKiBBRFNQUkVQUk9DVEFTSyBNZXNzYWdlcworICogQVVEUFJFUFJPQ1RBU0sgdXNlcyBhdWRQcmVQcm9jVXBSbGlzdCB0byBjb21tdW5pY2F0ZSB3aXRoIEFSTQorICogTG9jYXRpb24JOiBNRU1BCisgKiBNZXNzYWdlIExlbmd0aCAgOiAyCisgKi8KKworLyoKKyAqIE1lc3NhZ2UgdG8gaW5kaWNhdGUgcGFydGljdWxhciBmZWF0dXJlIGhhcyBiZWVuIGVuYWJsZWQgb3IgZGlzYWJsZWQKKyAqLworCisKKyNkZWZpbmUJQVVEUFJFUFJPQ19NU0dfQ01EX0NGR19ET05FX01TRwkweDAwMDAKKyNkZWZpbmUJQVVEUFJFUFJPQ19NU0dfQ01EX0NGR19ET05FX01TR19MRU4JXAorCXNpemVvZihhdWRwcmVwcm9jX21zZ19jbWRfY2ZnX2RvbmVfbXNnKQorCisjZGVmaW5lCUFVRFBSRVBST0NfTVNHX1RZUEVfQUdDCQkJMHgwMDAwCisjZGVmaW5lCUFVRFBSRVBST0NfTVNHX1RZUEVfTk9JU0VfUkVEVUNUSU9OCTB4MDAwMQorI2RlZmluZQlBVURQUkVQUk9DX01TR19UWVBFX0lJUl9GSUxURVIJCTB4MDAwMgorCisKKyNkZWZpbmUJQVVEUFJFUFJPQ19NU0dfU1RBVFVTX0ZMQUdfRU5BCQktMQorI2RlZmluZQlBVURQUkVQUk9DX01TR19TVEFUVVNfRkxBR19ESVMJCTB4MDAwMAorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJdHlwZTsKKwlzaWduZWQgc2hvcnQJc3RhdHVzX2ZsYWc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGF1ZHByZXByb2NfbXNnX2NtZF9jZmdfZG9uZV9tc2c7CisKKworLyoKKyAqIE1lc3NhZ2UgdG8gaW5kaWNhdGUgcGFydGljdWxhciBmZWF0dXJlIGhhcyBzZWxlY3RlZCBmb3Igd3Jvbmcgc2FtcCBmcmVxCisgKi8KKworI2RlZmluZQlBVURQUkVQUk9DX01TR19FUlJPUl9NU0dfSUQJCTB4MDAwMQorI2RlZmluZQlBVURQUkVQUk9DX01TR19FUlJPUl9NU0dfSURfTEVOCVwKKwlzaXplb2YoYXVkcHJlcHJvY19tc2dfZXJyb3JfbXNnX2lkKQorCisjZGVmaW5lCUFVRFBSRVBST0NfTVNHX0VSUl9JTkRFWF9OUwkJMHgwMDAwCisKK3R5cGVkZWYgc3RydWN0IHsKKwkgdW5zaWduZWQgc2hvcnQJZXJyX2luZGV4OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRwcmVwcm9jX21zZ19lcnJvcl9tc2dfaWQ7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWF1ZHJlY2NtZGkuaCBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVhdWRyZWNjbWRpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAzZWUwMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVhdWRyZWNjbWRpLmgKQEAgLTAsMCArMSwxNzYgQEAKKyNpZm5kZWYgUURTUDVBVURSRUNDTURJX0gKKyNkZWZpbmUgUURTUDVBVURSRUNDTURJX0gKKworLyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSoKKworICAgIEEgVSBEIEkgTyAgIFIgRSBDIE8gUiBEICBJIE4gVCBFIFIgTiBBIEwgIEMgTyBNIE0gQSBOIEQgUworCitHRU5FUkFMIERFU0NSSVBUSU9OCisgIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbnRpb25zIG9mIGZvcm1hdCBibG9ja3Mgb2YgY29tbWFuZHMKKyAgdGhhdCBhcmUgYWNjZXB0ZWQgYnkgQVVEUkVDIFRhc2sKKworUkVGRVJFTkNFUworICBOb25lCisKK0VYVEVSTkFMSVpFRCBGVU5DVElPTlMKKyAgTm9uZQorCitDb3B5cmlnaHQoYykgMTk5MiAtIDIwMDggYnkgUVVBTENPTU0sIEluY29ycG9yYXRlZC4KKworVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKK21heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSovCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgICAgICAgICAgICAgICBFRElUIEhJU1RPUlkgRk9SIEZJTEUKKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGNvbW1lbnRzIGRlc2NyaWJpbmcgY2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZS4KK05vdGljZSB0aGF0IGNoYW5nZXMgYXJlIGxpc3RlZCBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuCisKKyAkSGVhZGVyOiAvL3NvdXJjZS9xY29tL3FjdC9tdWx0aW1lZGlhMi9BdWRpby9kcml2ZXJzL1FEU1A1RHJpdmVyL1FEU1A1SW50ZXJmYWNlL21haW4vbGF0ZXN0L3Fkc3A1YXVkcmVjY21kaS5oIzMgJAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworLyoKKyAqIEFVRFJFQ1RBU0sgQ09NTUFORFMKKyAqIEFSTSB1c2VzIDIgcXVldWVzIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIEFVRFJFQ1RBU0sKKyAqIDEudVBBdWRSZWNDbWRRdWV1ZQorICogTG9jYXRpb24gOk1FTUMKKyAqIEJ1ZmZlciBTaXplIDogOAorICogTm8gb2YgQnVmZmVycyBpbiBhIHF1ZXVlIDogMworICogMi5hdWRSZWNVcEJpdFN0cmVhbVF1ZXVlCisgKiBMb2NhdGlvbiA6IE1FTUMKKyAqIEJ1ZmZlciBTaXplIDogNAorICogTm8gb2YgYnVmZmVycyBpbiBhIHF1ZXVlIDogMgorICovCisKKy8qCisgKiBDb21tYW5kcyBvbiB1UEF1ZFJlY0NtZFF1ZXVlCisgKi8KKworLyoKKyAqIENvbW1hbmQgdG8gaW5pdGlhdGUgYW5kIHRlcm1pbmF0ZSB0aGUgYXVkaW8gcmVjb3JkaW5nIHNlY3Rpb24KKyAqLworCisjZGVmaW5lIEFVRFJFQ19DTURfQ0ZHCQkweDAwMDAKKyNkZWZpbmUJQVVEUkVDX0NNRF9DRkdfTEVOCXNpemVvZihhdWRyZWNfY21kX2NmZykKKworI2RlZmluZQlBVURSRUNfQ01EX1RZUEVfMF9JTkRFWF9XQVYJMHgwMDAwCisjZGVmaW5lCUFVRFJFQ19DTURfVFlQRV8wX0lOREVYX0FBQwkweDAwMDEKKworI2RlZmluZSBBVURSRUNfQ01EX1RZUEVfMF9FTkEJCTB4NDAwMAorI2RlZmluZSBBVURSRUNfQ01EX1RZUEVfMF9ESVMJCTB4MDAwMAorCisjZGVmaW5lIEFVRFJFQ19DTURfVFlQRV8wX05PVVBEQVRFCTB4MDAwMAorI2RlZmluZSBBVURSRUNfQ01EX1RZUEVfMF9VUERBVEUJMHg4MDAwCisKKyNkZWZpbmUJQVVEUkVDX0NNRF9UWVBFXzFfSU5ERVhfU0JDCTB4MDAwMgorCisjZGVmaW5lIEFVRFJFQ19DTURfVFlQRV8xX0VOQQkJMHg0MDAwCisjZGVmaW5lIEFVRFJFQ19DTURfVFlQRV8xX0RJUwkJMHgwMDAwCisKKyNkZWZpbmUgQVVEUkVDX0NNRF9UWVBFXzFfTk9VUERBVEUJMHgwMDAwCisjZGVmaW5lIEFVRFJFQ19DTURfVFlQRV8xX1VQREFURQkweDgwMDAKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0IAljbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQJdHlwZV8wOworCXVuc2lnbmVkIHNob3J0CXR5cGVfMTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcmVjX2NtZF9jZmc7CisKKworLyoKKyAqIENvbW1hbmQgdG8gY29uZmlndXJlIHRoZSByZWNvcmRpbmcgcGFyYW1ldGVycyBmb3IgUmVjVHlwZTAoQUFDL1dBVikgZW5jb2RlcgorICovCisKKyNkZWZpbmUJQVVEUkVDX0NNRF9BUkVDMFBBUkFNX0NGRwkweDAwMDEKKyNkZWZpbmUJQVVEUkVDX0NNRF9BUkVDMFBBUkFNX0NGR19MRU4JXAorCXNpemVvZihhdWRyZWNfY21kX2FyZWMwcGFyYW1fY2ZnKQorCisjZGVmaW5lCUFVRFJFQ19DTURfU0FNUF9SQVRFX0lORFhfODAwMAkJMHgwMDBCCisjZGVmaW5lCUFVRFJFQ19DTURfU0FNUF9SQVRFX0lORFhfMTEwMjUJCTB4MDAwQQorI2RlZmluZQlBVURSRUNfQ01EX1NBTVBfUkFURV9JTkRYXzEyMDAwCQkweDAwMDkKKyNkZWZpbmUJQVVEUkVDX0NNRF9TQU1QX1JBVEVfSU5EWF8xNjAwMAkJMHgwMDA4CisjZGVmaW5lCUFVRFJFQ19DTURfU0FNUF9SQVRFX0lORFhfMjIwNTAJCTB4MDAwNworI2RlZmluZQlBVURSRUNfQ01EX1NBTVBfUkFURV9JTkRYXzI0MDAwCQkweDAwMDYKKyNkZWZpbmUJQVVEUkVDX0NNRF9TQU1QX1JBVEVfSU5EWF8zMjAwMAkJMHgwMDA1CisjZGVmaW5lCUFVRFJFQ19DTURfU0FNUF9SQVRFX0lORFhfNDQxMDAJCTB4MDAwNAorI2RlZmluZQlBVURSRUNfQ01EX1NBTVBfUkFURV9JTkRYXzQ4MDAwCQkweDAwMDMKKworI2RlZmluZSBBVURSRUNfQ01EX1NURVJFT19NT0RFX01PTk8JCTB4MDAwMAorI2RlZmluZSBBVURSRUNfQ01EX1NURVJFT19NT0RFX1NURVJFTwkJMHgwMDAxCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCAJY21kX2lkOworCXVuc2lnbmVkIHNob3J0CXB0cl90b19leHRwa3RfYnVmZmVyX21zdzsKKwl1bnNpZ25lZCBzaG9ydAlwdHJfdG9fZXh0cGt0X2J1ZmZlcl9sc3c7CisJdW5zaWduZWQgc2hvcnQJYnVmX2xlbjsKKwl1bnNpZ25lZCBzaG9ydAlzYW1wX3JhdGVfaW5kZXg7CisJdW5zaWduZWQgc2hvcnQJc3RlcmVvX21vZGU7CisJdW5zaWduZWQgc2hvcnQgCXJlY19xdWFsaXR5OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRyZWNfY21kX2FyZWMwcGFyYW1fY2ZnOworCisvKgorICogQ29tbWFuZCB0byBjb25maWd1cmUgdGhlIHJlY29yZGluZyBwYXJhbWV0ZXJzIGZvciBSZWNUeXBlMShTQkMpIGVuY29kZXIKKyAqLworCisjZGVmaW5lIEFVRFJFQ19DTURfQVJFQzFQQVJBTV9DRkcJMHgwMDAyCisjZGVmaW5lIEFVRFJFQ19DTURfQVJFQzFQQVJBTV9DRkdfTEVOCVwKKwlzaXplb2YoYXVkcmVjX2NtZF9hcmVjMXBhcmFtX2NmZykKKworI2RlZmluZSBBVURSRUNfQ01EX1BBUkFNX0JVRl9CTE9DS1NfNAkweDAwMDAKKyNkZWZpbmUgQVVEUkVDX0NNRF9QQVJBTV9CVUZfQkxPQ0tTXzgJMHgwMDAxCisjZGVmaW5lIEFVRFJFQ19DTURfUEFSQU1fQlVGX0JMT0NLU18xMgkweDAwMDIKKyNkZWZpbmUgQVVEUkVDX0NNRF9QQVJBTV9CVUZfQkxPQ0tTXzE2CTB4MDAwMworCisjZGVmaW5lIEFVRFJFQ19DTURfUEFSQU1fQlVGX1NVQl9CQU5EU184CTB4MDAxMAorI2RlZmluZSBBVURSRUNfQ01EX1BBUkFNX0JVRl9NT0RFX01PTk8JCTB4MDAwMAorI2RlZmluZSBBVURSRUNfQ01EX1BBUkFNX0JVRl9NT0RFX0RVQUwJCTB4MDA0MAorI2RlZmluZSBBVURSRUNfQ01EX1BBUkFNX0JVRl9NT0RFX1NURVJFTwkweDAwNTAKKyNkZWZpbmUgQVVEUkVDX0NNRF9QQVJBTV9CVUZfTU9ERV9KU1RFUkVPCTB4MDA2MAorI2RlZmluZSBBVURSRUNfQ01EX1BBUkFNX0JVRl9MT1VETkVTUwkJMHgwMDAwCisjZGVmaW5lIEFVRFJFQ19DTURfUEFSQU1fQlVGX1NOUgkJMHgwMTAwCisjZGVmaW5lIEFVRFJFQ19DTURfUEFSQU1fQlVGX0JBU0lDX1ZFUgkJMHgwMDAwCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCAJY21kX2lkOworCXVuc2lnbmVkIHNob3J0CXB0cl90b19leHRwa3RfYnVmZmVyX21zdzsKKwl1bnNpZ25lZCBzaG9ydAlwdHJfdG9fZXh0cGt0X2J1ZmZlcl9sc3c7CisJdW5zaWduZWQgc2hvcnQJYnVmX2xlbjsKKwl1bnNpZ25lZCBzaG9ydAlwYXJhbV9idWY7CisJdW5zaWduZWQgc2hvcnQJYml0X3JhdGVfMDsKKwl1bnNpZ25lZCBzaG9ydAliaXRfcmF0ZV8xOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBhdWRyZWNfY21kX2FyZWMxcGFyYW1fY2ZnOworCisKKy8qCisgKiBDb21tYW5kcyBvbiBhdWRSZWNVcEJpdFN0cmVhbVF1ZXVlCisgKi8KKworLyoKKyAqIENvbW1hbmQgdG8gaW5kaWNhdGUgdGhlIGN1cnJlbnQgcGFja2V0IHJlYWQgY291bnQKKyAqLworCisjZGVmaW5lIEFVRFJFQ19DTURfUEFDS0VUX0VYVF9QVFIJCTB4MDAwMAorI2RlZmluZSBBVURSRUNfQ01EX1BBQ0tFVF9FWFRfUFRSX0xFTglcCisJc2l6ZW9mKGF1ZHJlY19jbWRfcGFja2V0X2V4dF9wdHIpCisKKyNkZWZpbmUgQVVEUkVDX0NNRF9UWVBFXzAJMHgwMDAwCisjZGVmaW5lIEFVRFJFQ19DTURfVFlQRV8xCTB4MDAwMQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgIGNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydAl0eXBlOworCXVuc2lnbmVkIHNob3J0IAljdXJyX3JlY19jb3VudF9tc3c7CisJdW5zaWduZWQgc2hvcnQgCWN1cnJfcmVjX2NvdW50X2xzdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgYXVkcmVjX2NtZF9wYWNrZXRfZXh0X3B0cjsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1YXVkcmVjbXNnLmggYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1YXVkcmVjbXNnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI2ZWI1MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVhdWRyZWNtc2cuaApAQCAtMCwwICsxLDEyNyBAQAorI2lmbmRlZiBRRFNQNUFVRFJFQ01TR0lfSAorI2RlZmluZSBRRFNQNUFVRFJFQ01TR0lfSAorCisvKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09KgorCisgICAgQSBVIEQgSSBPICAgUiBFIEMgTyBSIEQgIE0gRSBTIFMgQSBHIEUgUworCitHRU5FUkFMIERFU0NSSVBUSU9OCisgIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbnRpb25zIG9mIGZvcm1hdCBibG9ja3Mgb2YgbWVzc2FnZXMKKyAgdGhhdCBhcmUgc2VudCBieSBBVURSRUMgVGFzaworCitSRUZFUkVOQ0VTCisgIE5vbmUKKworRVhURVJOQUxJWkVEIEZVTkNUSU9OUworICBOb25lCisKK0NvcHlyaWdodChjKSAxOTkyIC0gMjAwOCBieSBRVUFMQ09NTSwgSW5jb3Jwb3JhdGVkLgorCitUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Ki8KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICAgICAgICAgICAgICAgIEVESVQgSElTVE9SWSBGT1IgRklMRQorCitUaGlzIHNlY3Rpb24gY29udGFpbnMgY29tbWVudHMgZGVzY3JpYmluZyBjaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlLgorTm90aWNlIHRoYXQgY2hhbmdlcyBhcmUgbGlzdGVkIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlci4KKworICRIZWFkZXI6IC8vc291cmNlL3Fjb20vcWN0L211bHRpbWVkaWEyL0F1ZGlvL2RyaXZlcnMvUURTUDVEcml2ZXIvUURTUDVJbnRlcmZhY2UvbWFpbi9sYXRlc3QvcWRzcDVhdWRyZWNtc2cuaCMzICQKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qCisgKiBBVURSRUNUQVNLIE1FU1NBR0VTCisgKiBBVURSRUNUQVNLIHVzZXMgYXVkUmVjVXBSbGlzdCB0byBjb21tdW5pY2F0ZSB3aXRoIEFSTQorICogTG9jYXRpb24gOiBNRU1DCisgKiBCdWZmZXIgc2l6ZSA6IDQKKyAqIE5vIG9mIGJ1ZmZlcnMgaW4gYSBxdWV1ZSA6IDIKKyAqLworCisvKgorICogTWVzc2FnZSB0byBub3RpZnkgdGhhdCBjb25maWcgY29tbWFuZCBpcyBkb25lCisgKi8KKworI2RlZmluZSBBVURSRUNfTVNHX0NNRF9DRkdfRE9ORV9NU0cJMHgwMDAyCisjZGVmaW5lIEFVRFJFQ19NU0dfQ01EX0NGR19ET05FX01TR19MRU4JXAorCXNpemVvZihhdWRyZWNfbXNnX2NtZF9jZmdfZG9uZV9tc2cpCisKKworI2RlZmluZSBBVURSRUNfTVNHX0NGR19ET05FX1RZUEVfMF9FTkEJCTB4NDAwMAorI2RlZmluZSBBVURSRUNfTVNHX0NGR19ET05FX1RZUEVfMF9ESVMJCTB4MDAwMAorCisjZGVmaW5lIEFVRFJFQ19NU0dfQ0ZHX0RPTkVfVFlQRV8wX05PX1VQREFURQkweDAwMDAKKyNkZWZpbmUgQVVEUkVDX01TR19DRkdfRE9ORV9UWVBFXzBfVVBEQVRFCTB4ODAwMAorCisjZGVmaW5lIEFVRFJFQ19NU0dfQ0ZHX0RPTkVfVFlQRV8xX0VOQQkJMHg0MDAwCisjZGVmaW5lIEFVRFJFQ19NU0dfQ0ZHX0RPTkVfVFlQRV8xX0RJUwkJMHgwMDAwCisKKyNkZWZpbmUgQVVEUkVDX01TR19DRkdfRE9ORV9UWVBFXzFfTk9fVVBEQVRFCTB4MDAwMAorI2RlZmluZSBBVURSRUNfTVNHX0NGR19ET05FX1RZUEVfMV9VUERBVEUJMHg4MDAwCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAl0eXBlXzA7CisJdW5zaWduZWQgc2hvcnQJdHlwZV8xOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKWF1ZHJlY19tc2dfY21kX2NmZ19kb25lX21zZzsKKworCisvKgorICogTWVzc2FnZSB0byBub3RpZnkgYXJlYzAvMSBjZmcgZG9uZSBhbmQgcmVjb3JkaW5nIHBhcmFtcyByZXZkIGJ5IHRhc2sKKyAqLworCisjZGVmaW5lCUFVRFJFQ19NU0dfQ01EX0FSRUNfUEFSQU1fQ0ZHX0RPTkVfTVNHCQkweDAwMDMKKyNkZWZpbmUJQVVEUkVDX01TR19DTURfQVJFQ19QQVJBTV9DRkdfRE9ORV9NU0dfTEVOCVwKKwlzaXplb2YoYXVkcmVjX21zZ19jbWRfYXJlY19wYXJhbV9jZmdfZG9uZV9tc2cpCisKKyNkZWZpbmUJQVVEUkVDX01TR19BUkVDX1BBUkFNX1RZUEVfMAkweDAwMDAKKyNkZWZpbmUJQVVEUkVDX01TR19BUkVDX1BBUkFNX1RZUEVfMQkweDAwMDEKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CXR5cGU7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpYXVkcmVjX21zZ19jbWRfYXJlY19wYXJhbV9jZmdfZG9uZV9tc2c7CisKKworLyoKKyAqIE1lc3NhZ2UgdG8gbm90aWZ5IG5vIG1vcmUgYnVmZmVycyBhcmUgYXZhaWxhYmxlIGluIGV4dCBtZW0gdG8gRE1FCisgKi8KKworI2RlZmluZSBBVURSRUNfTVNHX0ZBVEFMX0VSUl9NU0cJCTB4MDAwNAorI2RlZmluZSBBVURSRUNfTVNHX0ZBVEFMX0VSUl9NU0dfTEVOCVwKKwlzaXplb2YoYXVkcmVjX21zZ19mYXRhbF9lcnJfbXNnKQorCisjZGVmaW5lIEFVRFJFQ19NU0dfRkFUQUxfRVJSX1RZUEVfMAkweDAwMDAKKyNkZWZpbmUgQVVEUkVDX01TR19GQVRBTF9FUlJfVFlQRV8xCTB4MDAwMQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJdHlwZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSlhdWRyZWNfbXNnX2ZhdGFsX2Vycl9tc2c7CisKKy8qCisgKiBNZXNzYWdlIHRvIG5vdGlmeSBETUUgZGVsaXZlcmQgdGhlIGVuY29kZWQgcGt0IHRvIGV4dCBwa3QgYnVmZmVyCisgKi8KKworI2RlZmluZSBBVURSRUNfTVNHX1BBQ0tFVF9SRUFEWV9NU0cJCTB4MDAwNQorI2RlZmluZSBBVURSRUNfTVNHX1BBQ0tFVF9SRUFEWV9NU0dfTEVOCVwKKwlzaXplb2YoYXVkcmVjX21zZ19wYWNrZXRfcmVhZHlfbXNnKQorCisjZGVmaW5lIEFVRFJFQ19NU0dfUEFDS0VUX1JFQURZX1RZUEVfMAkweDAwMDAKKyNkZWZpbmUgQVVEUkVDX01TR19QQUNLRVRfUkVBRFlfVFlQRV8xCTB4MDAwMQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJdHlwZTsKKwl1bnNpZ25lZCBzaG9ydAlwa3RfY291bnRlcl9tc3c7CisJdW5zaWduZWQgc2hvcnQJcGt0X2NvdW50ZXJfbHN3OworCXVuc2lnbmVkIHNob3J0CXBrdF9yZWFkX2NudF9tc3c7CisJdW5zaWduZWQgc2hvcnQJcGt0X3JlYWRfY250X2xzdzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSlhdWRyZWNfbXNnX3BhY2tldF9yZWFkeV9tc2c7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWpwZWdjbWRpLmggYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1anBlZ2NtZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzRhZDZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWpwZWdjbWRpLmgKQEAgLTAsMCArMSwzNzYgQEAKKyNpZm5kZWYgUURTUDVWSURKUEVHQ01ESV9ICisjZGVmaW5lIFFEU1A1VklESlBFR0NNRElfSAorCisvKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09KgorCisgICAgSiBQIEUgRyAgSSBOIFQgRSBSIE4gQSBMICBDIE8gTSBNIEEgTiBEIFMKKworR0VORVJBTCBERVNDUklQVElPTgorICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW50aW9ucyBvZiBmb3JtYXQgYmxvY2tzIG9mIGNvbW1hbmRzCisgIHRoYXQgYXJlIGFjY2VwdGVkIGJ5IEpQRUcgVGFzaworCitSRUZFUkVOQ0VTCisgIE5vbmUKKworRVhURVJOQUxJWkVEIEZVTkNUSU9OUworICBOb25lCisKK0NvcHlyaWdodChjKSAxOTkyIC0gMjAwOCBieSBRVUFMQ09NTSwgSW5jb3Jwb3JhdGVkLgorCitUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Ki8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgICAgICAgICAgICAgICBFRElUIEhJU1RPUlkgRk9SIEZJTEUKKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGNvbW1lbnRzIGRlc2NyaWJpbmcgY2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZS4KK05vdGljZSB0aGF0IGNoYW5nZXMgYXJlIGxpc3RlZCBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuCisKKyRIZWFkZXI6IC8vc291cmNlL3Fjb20vcWN0L211bHRpbWVkaWEyL0Fkc3BTdmMvN1hYWC9xZHNwNWNtZC92aWRlby9xZHNwNWpwZWdjbWRpLmgjMiAkICREYXRlVGltZTogMjAwOC8wNy8zMCAxMDo1MDoyMyAkICRBdXRob3I6IHBhdmFuciAkCitSZXZpc2lvbiBIaXN0b3J5Ogord2hlbiAgICAgICB3aG8gICAgIHdoYXQsIHdoZXJlLCB3aHkKKy0tLS0tLS0tICAgLS0tICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswNi8wOS8wOCAgIHN2ICAgICAgaW5pdGlhbCB2ZXJzaW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKgorICogQVJNIHRvIEpQRUcgY29uZmlndXJhdGlvbiBjb21tYW5kcyBhcmUgcGFzc2VkIHRocm91Z2ggdGhlCisgKiB1UEpwZWdDZmdDbWRRdWV1ZQorICovCisKKy8qCisgKiBDb21tYW5kIHRvIGNvbmZpZ3VyZSBKUEVHIEVuY29kZXIKKyAqLworCisjZGVmaW5lCUpQRUdfQ01EX0VOQ19DRkcJCTB4MDAwMAorI2RlZmluZQlKUEVHX0NNRF9FTkNfQ0ZHX0xFTglzaXplb2YoanBlZ19jbWRfZW5jX2NmZykKKworI2RlZmluZQlKUEVHX0NNRF9FTkNfUFJPQ0VTU19DRkdfT1BfUk9UQVRJT05fMAkJMHgwMDAwCisjZGVmaW5lCUpQRUdfQ01EX0VOQ19QUk9DRVNTX0NGR19PUF9ST1RBVElPTl85MAkJMHgwMTAwCisjZGVmaW5lCUpQRUdfQ01EX0VOQ19QUk9DRVNTX0NGR19PUF9ST1RBVElPTl8xODAJMHgwMjAwCisjZGVmaW5lCUpQRUdfQ01EX0VOQ19QUk9DRVNTX0NGR19PUF9ST1RBVElPTl8yNzAJMHgwMzAwCisjZGVmaW5lCUpQRUdfQ01EX0VOQ19QUk9DRVNTX0NGR19JUF9EQVRBX0ZPUk1BVF9NCTB4MDAwMworI2RlZmluZQlKUEVHX0NNRF9FTkNfUFJPQ0VTU19DRkdfSVBfREFUQV9GT1JNQVRfSDJWMgkweDAwMDAKKyNkZWZpbmUJSlBFR19DTURfRU5DX1BST0NFU1NfQ0ZHX0lQX0RBVEFfRk9STUFUX0gyVjEJMHgwMDAxCisjZGVmaW5lCUpQRUdfQ01EX0VOQ19QUk9DRVNTX0NGR19JUF9EQVRBX0ZPUk1BVF9IMVYyCTB4MDAwMgorCisjZGVmaW5lCUpQRUdfQ01EX0lQX1NJWkVfQ0ZHX0xVTUFfSEVJR0hUX00JCTB4MDAwMEZGRkYKKyNkZWZpbmUJSlBFR19DTURfSVBfU0laRV9DRkdfTFVNQV9XSURUSF9NCQkweEZGRkYwMDAwCisjZGVmaW5lCUpQRUdfQ01EX0VOQ19VUFNBTVBfSVBfU0laRV9DRkdfRU5BCQkweDAwMDEKKyNkZWZpbmUJSlBFR19DTURfRU5DX1VQU0FNUF9JUF9TSVpFX0NGR19ESVMJCTB4MDAwMAorCisjZGVmaW5lCUpQRUdfQ01EX0ZSQUdfU0laRV9MVU1BX0hFSUdIVF9NCQkweEZGRkYKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CXByb2Nlc3NfY2ZnOworCXVuc2lnbmVkIGludAlpcF9zaXplX2NmZzsKKwl1bnNpZ25lZCBpbnQJb3Bfc2l6ZV9jZmc7CisJdW5zaWduZWQgaW50CWZyYWdfY2ZnOworCXVuc2lnbmVkIGludAlmcmFnX2NmZ19wYXJ0WzE2XTsKKworCXVuc2lnbmVkIGludCAgICBwYXJ0X251bTsKKworCXVuc2lnbmVkIGludAlvcF9idWZfMF9jZmdfcGFydDE7CisJdW5zaWduZWQgaW50CW9wX2J1Zl8wX2NmZ19wYXJ0MjsKKwl1bnNpZ25lZCBpbnQJb3BfYnVmXzFfY2ZnX3BhcnQxOworCXVuc2lnbmVkIGludAlvcF9idWZfMV9jZmdfcGFydDI7CisKKwl1bnNpZ25lZCBpbnQJbHVtYV9xdW50X3RhYmxlWzMyXTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX3F1bnRfdGFibGVbMzJdOworCisJdW5zaWduZWQgaW50CXVwc2FtcF9pcF9zaXplX2NmZzsKKwl1bnNpZ25lZCBpbnQJdXBzYW1wX2lwX2ZyYW1lX29mZjsKKwl1bnNpZ25lZCBpbnQJdXBzYW1wX3BwX2ZpbHRlcl9jb2VmZls2NF07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGpwZWdfY21kX2VuY19jZmc7CisKKy8qCisgKiBDb21tYW5kIHRvIGNvbmZpZ3VyZSBKUEVHIERlY29kZXIKKyAqLworCisjZGVmaW5lCUpQRUdfQ01EX0RFQ19DRkcJCTB4MDAwMQorI2RlZmluZQlKUEVHX0NNRF9ERUNfQ0ZHX0xFTgkJc2l6ZW9mKGpwZWdfY21kX2RlY19jZmcpCisKKyNkZWZpbmUJSlBFR19DTURfREVDX09QX0RBVEFfRk9STUFUX00JCTB4MDAwMQorI2RlZmluZSBKUEVHX0NNRF9ERUNfT1BfREFUQV9GT1JNQVRfSDJWMgkweDAwMDAKKyNkZWZpbmUgSlBFR19DTURfREVDX09QX0RBVEFfRk9STUFUX0gyVjEJMHgwMDAxCisKKyNkZWZpbmUgSlBFR19DTURfREVDX09QX0RBVEFfRk9STUFUX1NDQUxFX0ZBQ1RPUl84CTB4MDAwMDAwCisjZGVmaW5lIEpQRUdfQ01EX0RFQ19PUF9EQVRBX0ZPUk1BVF9TQ0FMRV9GQUNUT1JfNAkweDAxMDAwMAorI2RlZmluZSBKUEVHX0NNRF9ERUNfT1BfREFUQV9GT1JNQVRfU0NBTEVfRkFDVE9SXzIJMHgwMjAwMDAKKyNkZWZpbmUgSlBFR19DTURfREVDX09QX0RBVEFfRk9STUFUX1NDQUxFX0ZBQ1RPUl8xCTB4MDMwMDAwCisKKyNkZWZpbmUJSlBFR19DTURfREVDX0lQX1NUUkVBTV9CVUZfQ0ZHX1BBUlQzX05PVF9GSU5BTAkweDAwMDAKKyNkZWZpbmUJSlBFR19DTURfREVDX0lQX1NUUkVBTV9CVUZfQ0ZHX1BBUlQzX0ZJTkFMCTB4MDAwMQorCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAlpbWdfZGltZW5zaW9uX2NmZzsKKwl1bnNpZ25lZCBpbnQJb3BfZGF0YV9mb3JtYXQ7CisJdW5zaWduZWQgaW50CXJlc3RhcnRfaW50ZXJ2YWw7CisJdW5zaWduZWQgaW50CWlwX2J1Zl9wYXJ0aXRpb25fbnVtOworCXVuc2lnbmVkIGludAlpcF9zdHJlYW1fYnVmX2NmZ19wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJaXBfc3RyZWFtX2J1Zl9jZmdfcGFydDI7CisJdW5zaWduZWQgaW50CWlwX3N0cmVhbV9idWZfY2ZnX3BhcnQzOworCXVuc2lnbmVkIGludAlvcF9zdHJlYW1fYnVmXzBfY2ZnX3BhcnQxOworCXVuc2lnbmVkIGludAlvcF9zdHJlYW1fYnVmXzBfY2ZnX3BhcnQyOworCXVuc2lnbmVkIGludAlvcF9zdHJlYW1fYnVmXzBfY2ZnX3BhcnQzOworCXVuc2lnbmVkIGludAlvcF9zdHJlYW1fYnVmXzFfY2ZnX3BhcnQxOworCXVuc2lnbmVkIGludAlvcF9zdHJlYW1fYnVmXzFfY2ZnX3BhcnQyOworCXVuc2lnbmVkIGludAlvcF9zdHJlYW1fYnVmXzFfY2ZnX3BhcnQzOworCXVuc2lnbmVkIGludAlsdW1hX3F1bnRfdGFibGVfMF8zOworCXVuc2lnbmVkIGludAlsdW1hX3F1bnRfdGFibGVfNF83OworCXVuc2lnbmVkIGludAlsdW1hX3F1bnRfdGFibGVfOF8xMTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9xdW50X3RhYmxlXzEyXzE1OworCXVuc2lnbmVkIGludAlsdW1hX3F1bnRfdGFibGVfMTZfMTk7CisJdW5zaWduZWQgaW50CWx1bWFfcXVudF90YWJsZV8yMF8yMzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9xdW50X3RhYmxlXzI0XzI3OworCXVuc2lnbmVkIGludAlsdW1hX3F1bnRfdGFibGVfMjhfMzE7CisJdW5zaWduZWQgaW50CWx1bWFfcXVudF90YWJsZV8zMl8zNTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9xdW50X3RhYmxlXzM2XzM5OworCXVuc2lnbmVkIGludAlsdW1hX3F1bnRfdGFibGVfNDBfNDM7CisJdW5zaWduZWQgaW50CWx1bWFfcXVudF90YWJsZV80NF80NzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9xdW50X3RhYmxlXzQ4XzUxOworCXVuc2lnbmVkIGludAlsdW1hX3F1bnRfdGFibGVfNTJfNTU7CisJdW5zaWduZWQgaW50CWx1bWFfcXVudF90YWJsZV81Nl81OTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9xdW50X3RhYmxlXzYwXzYzOworCXVuc2lnbmVkIGludAljaHJvbWFfcXVudF90YWJsZV8wXzM7CisJdW5zaWduZWQgaW50CWNocm9tYV9xdW50X3RhYmxlXzRfNzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX3F1bnRfdGFibGVfOF8xMTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX3F1bnRfdGFibGVfMTJfMTU7CisJdW5zaWduZWQgaW50CWNocm9tYV9xdW50X3RhYmxlXzE2XzE5OworCXVuc2lnbmVkIGludAljaHJvbWFfcXVudF90YWJsZV8yMF8yMzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX3F1bnRfdGFibGVfMjRfMjc7CisJdW5zaWduZWQgaW50CWNocm9tYV9xdW50X3RhYmxlXzI4XzMxOworCXVuc2lnbmVkIGludAljaHJvbWFfcXVudF90YWJsZV8zMl8zNTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX3F1bnRfdGFibGVfMzZfMzk7CisJdW5zaWduZWQgaW50CWNocm9tYV9xdW50X3RhYmxlXzQwXzQzOworCXVuc2lnbmVkIGludAljaHJvbWFfcXVudF90YWJsZV80NF80NzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX3F1bnRfdGFibGVfNDhfNTE7CisJdW5zaWduZWQgaW50CWNocm9tYV9xdW50X3RhYmxlXzUyXzU1OworCXVuc2lnbmVkIGludAljaHJvbWFfcXVudF90YWJsZV81Nl81OTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX3F1bnRfdGFibGVfNjBfNjM7CisJdW5zaWduZWQgaW50CWx1bWFfZGNfaG1fY29kZV9jbnRfdGFibGVfMF8zOworCXVuc2lnbmVkIGludAlsdW1hX2RjX2htX2NvZGVfY250X3RhYmxlXzRfNzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9kY19obV9jb2RlX2NudF90YWJsZV84XzExOworCXVuc2lnbmVkIGludAlsdW1hX2RjX2htX2NvZGVfY250X3RhYmxlXzEyXzE1OworCXVuc2lnbmVkIGludAlsdW1hX2RjX2htX2NvZGVfdmFsX3RhYmxlXzBfMzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9kY19obV9jb2RlX3ZhbF90YWJsZV80Xzc7CisJdW5zaWduZWQgaW50CWx1bWFfZGNfaG1fY29kZV92YWxfdGFibGVfOF8xMTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2RjX2htX2NvZGVfY250X3RhYmxlXzBfMzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2RjX2htX2NvZGVfY250X3RhYmxlXzRfNzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2RjX2htX2NvZGVfY250X3RhYmxlXzhfMTE7CisJdW5zaWduZWQgaW50CWNocm9tYV9kY19obV9jb2RlX2NudF90YWJsZV8xMl8xNTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2RjX2htX2NvZGVfdmFsX3RhYmxlXzBfMzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2RjX2htX2NvZGVfdmFsX3RhYmxlXzRfNzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2RjX2htX2NvZGVfdmFsX3RhYmxlXzhfMTE7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV9jbnRfdGFibGVfMF8zOworCXVuc2lnbmVkIGludAlsdW1hX2FjX2htX2NvZGVfY250X3RhYmxlXzRfNzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX2NudF90YWJsZV84XzExOworCXVuc2lnbmVkIGludAlsdW1hX2FjX2htX2NvZGVfY250X3RhYmxlXzEyXzE1OworCXVuc2lnbmVkIGludAlsdW1hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzBfMzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV80Xzc7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfOF8xMTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xMl8xNTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xNl8xOTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV8yMF8yMzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV8yNF8yNzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV8yOF8zMTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV8zMl8zNTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV8zNl8zOTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV80MF80MzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV80NF80NzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV80OF81MTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV81Ml81NTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV81Nl81OTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV82MF82MzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV82NF82NzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV82OF83MTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV83Ml83NTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV83Nl83OTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV84MF84MzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV84NF84NzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV84OF85MTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV85Ml85NTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV85Nl85OTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xMDBfMTAzOworCXVuc2lnbmVkIGludAlsdW1hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzEwNF8xMDc7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTA4XzExMTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xMTJfMTE1OworCXVuc2lnbmVkIGludAlsdW1hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzExNl8xMTk7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTIwXzEyMzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xMjRfMTI3OworCXVuc2lnbmVkIGludAlsdW1hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzEyOF8xMzE7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTMyXzEzNTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xMzZfMTM5OworCXVuc2lnbmVkIGludAlsdW1hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzE0MF8xNDM7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTQ0XzE0NzsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xNDhfMTUxOworCXVuc2lnbmVkIGludAlsdW1hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzE1Ml8xNTU7CisJdW5zaWduZWQgaW50CWx1bWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTU2XzE1OTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xNjBfMTYxOworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV9jbnRfdGFibGVfMF8zOworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV9jbnRfdGFibGVfNF83OworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV9jbnRfdGFibGVfOF8xMTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfY250X3RhYmxlXzEyXzE1OworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfMF8zOworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfNF83OworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfOF8xMTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzEyXzE1OworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTZfMTk7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV8yMF8yMzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzI0XzI3OworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfMjhfMzE7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV8zMl8zNTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzM2XzM5OworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfNDBfNDM7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV80NF80NzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzQ4XzUxOworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfNTJfNTU7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV81Nl81OTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzYwXzYzOworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfNjRfNjc7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV82OF83MTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzcyXzc1OworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfNzZfNzk7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV84MF84MzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzg0Xzg3OworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfODhfOTE7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV85Ml85NTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzk2Xzk5OworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTAwXzEwMzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzEwNF8xMDc7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xMDhfMTExOworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTEyXzExNTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzExNl8xMTk7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xMjBfMTIzOworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTI0XzEyNzsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzEyOF8xMzE7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xMzJfMTM1OworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTM2XzEzOTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzE0MF8xNDM7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xNDRfMTQ3OworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTQ4XzE1MTsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2FjX2htX2NvZGVfdmFsX3RhYmxlXzE1Ml8xNTU7CisJdW5zaWduZWQgaW50CWNocm9tYV9hY19obV9jb2RlX3ZhbF90YWJsZV8xNTZfMTU5OworCXVuc2lnbmVkIGludAljaHJvbWFfYWNfaG1fY29kZV92YWxfdGFibGVfMTYwXzE2MTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkganBlZ19jbWRfZGVjX2NmZzsKKworCisvKgorICogQVJNIHRvIEpQRUcgY29uZmlndXJhdGlvbiBjb21tYW5kcyBhcmUgcGFzc2VkIHRocm91Z2ggdGhlCisgKiB1UEpwZWdBY3Rpb25DbWRRdWV1ZQorICovCisKKy8qCisgKiBDb21tYW5kIHRvIHN0YXJ0IHRoZSBlbmNvZGUgcHJvY2VzcworICovCisKKyNkZWZpbmUJSlBFR19DTURfRU5DX0VOQ09ERQkJMHgwMDAwCisjZGVmaW5lCUpQRUdfQ01EX0VOQ19FTkNPREVfTEVOCQlzaXplb2YoanBlZ19jbWRfZW5jX2VuY29kZSkKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJY21kX2lkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqcGVnX2NtZF9lbmNfZW5jb2RlOworCisKKy8qCisgKiBDb21tYW5kIHRvIHRyYW5zaXRpb24gZnJvbSBjdXJyZW50IHN0YXRlIG9mIGVuY29kZXIgdG8gSURMRSBzdGF0ZQorICovCisKKyNkZWZpbmUJSlBFR19DTURfRU5DX0lETEUJCTB4MDAwMQorI2RlZmluZQlKUEVHX0NNRF9FTkNfSURMRV9MRU4JCXNpemVvZihqcGVnX2NtZF9lbmNfaWRsZSkKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJY21kX2lkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqcGVnX2NtZF9lbmNfaWRsZTsKKworCisvKgorICogQ29tbWFuZCB0byBpbmZvcm0gdGhlIGVuY29kZXIgdGhhdCBhbm90aGVyIGJ1ZmZlciBpcyByZWFkeQorICovCisKKyNkZWZpbmUJSlBFR19DTURfRU5DX09QX0NPTlNVTUVECTB4MDAwMgorI2RlZmluZQlKUEVHX0NNRF9FTkNfT1BfQ09OU1VNRURfTEVOCXNpemVvZihqcGVnX2NtZF9lbmNfb3BfY29uc3VtZWQpCisKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CW9wX2J1Zl9hZGRyOworCXVuc2lnbmVkIGludAlvcF9idWZfc2l6ZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkganBlZ19jbWRfZW5jX29wX2NvbnN1bWVkOworCisKKy8qCisgKiBDb21tYW5kIHRvIHN0YXJ0IHRoZSBkZWNvZGluZyBwcm9jZXNzCisgKi8KKworI2RlZmluZQlKUEVHX0NNRF9ERUNfREVDT0RFCQkweDAwMDMKKyNkZWZpbmUJSlBFR19DTURfREVDX0RFQ09ERV9MRU4Jc2l6ZW9mKGpwZWdfY21kX2RlY19kZWNvZGUpCisKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CWNtZF9pZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkganBlZ19jbWRfZGVjX2RlY29kZTsKKworCisvKgorICogQ29tbWFuZCB0byB0cmFuc2l0aW9uIGZyb20gdGhlIGN1cnJlbnQgc3RhdGUgb2YgZGVjb2RlciB0byBJRExFCisgKi8KKworI2RlZmluZQlKUEVHX0NNRF9ERUNfSURMRQkweDAwMDQKKyNkZWZpbmUJSlBFR19DTURfREVDX0lETEVfTEVOCXNpemVvZihqcGVnX2NtZF9kZWNfaWRsZSkKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJY21kX2lkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqcGVnX2NtZF9kZWNfaWRsZTsKKworCisvKgorICogQ29tbWFuZCB0byBpbmZvcm0gdGhhdCBhbiBvcCBidWZmZXIgaXMgcmVhZHkgZm9yIHVzZQorICovCisKKyNkZWZpbmUJSlBFR19DTURfREVDX09QX0NPTlNVTUVECTB4MDAwNQorI2RlZmluZQlKUEVHX0NNRF9ERUNfT1BfQ09OU1VNRURfTEVOCXNpemVvZihqcGVnX2NtZF9kZWNfb3BfY29uc3VtZWQpCisKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CWx1bWFfb3BfYnVmX2FkZHI7CisJdW5zaWduZWQgaW50CWx1bWFfb3BfYnVmX3NpemU7CisJdW5zaWduZWQgaW50CWNocm9tYV9vcF9idWZfYWRkcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkganBlZ19jbWRfZGVjX29wX2NvbnN1bWVkOworCisKKy8qCisgKiBDb21tYW5kIHRvIHBhc3MgYSBuZXcgaXAgYnVmZmVyIHRvIHRoZSBqcGVnIGRlY29kZXIKKyAqLworCisjZGVmaW5lCUpQRUdfQ01EX0RFQ19JUAkweDAwMDYKKyNkZWZpbmUJSlBFR19DTURfREVDX0lQX0xFTglzaXplb2YoanBlZ19jbWRfZGVjX2lwX2xlbikKKworI2RlZmluZQlKUEVHX0NNRF9FT0lfSU5ESUNBVE9SX05PVF9FTkQJMHgwMDAwCisjZGVmaW5lCUpQRUdfQ01EX0VPSV9JTkRJQ0FUT1JfRU5ECTB4MDAwMQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJaXBfYnVmX2FkZHI7CisJdW5zaWduZWQgaW50CWlwX2J1Zl9zaXplOworCXVuc2lnbmVkIGludAllb2lfaW5kaWNhdG9yOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqcGVnX2NtZF9kZWNfaXA7CisKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVqcGVnbXNnLmggYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1anBlZ21zZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMWFhM2YKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1anBlZ21zZy5oCkBAIC0wLDAgKzEsMTc3IEBACisjaWZuZGVmIFFEU1A1VklESlBFR01TR0lfSAorI2RlZmluZSBRRFNQNVZJREpQRUdNU0dJX0gKKworLyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSoKKworICAgSiBQIEUgRyAgSSBOIFQgRSBSIE4gQSBMICBNIEUgUyBTIEEgRyBFIFMKKworR0VORVJBTCBERVNDUklQVElPTgorICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW50aW9ucyBvZiBmb3JtYXQgYmxvY2tzIG9mIG1lc3NhZ2VzCisgIHRoYXQgYXJlIHNlbnQgYnkgSlBFRyBUYXNrCisKK1JFRkVSRU5DRVMKKyAgTm9uZQorCitFWFRFUk5BTElaRUQgRlVOQ1RJT05TCisgIE5vbmUKKworQ29weXJpZ2h0KGMpIDE5OTIgLSAyMDA4IGJ5IFFVQUxDT01NLCBJbmNvcnBvcmF0ZWQuCisKK1RoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCittYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisqPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICAgICAgICAgICAgICAgIEVESVQgSElTVE9SWSBGT1IgRklMRQorCitUaGlzIHNlY3Rpb24gY29udGFpbnMgY29tbWVudHMgZGVzY3JpYmluZyBjaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlLgorTm90aWNlIHRoYXQgY2hhbmdlcyBhcmUgbGlzdGVkIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlci4KKworJEhlYWRlcjogLy9zb3VyY2UvcWNvbS9xY3QvbXVsdGltZWRpYTIvQWRzcFN2Yy83WFhYL3Fkc3A1Y21kL3ZpZGVvL3Fkc3A1anBlZ21zZy5oIzIgJCAkRGF0ZVRpbWU6IDIwMDgvMDcvMzAgMTA6NTA6MjMgJCAkQXV0aG9yOiBwYXZhbnIgJAorUmV2aXNpb24gSGlzdG9yeToKKword2hlbiAgICAgICB3aG8gICAgIHdoYXQsIHdoZXJlLCB3aHkKKy0tLS0tLS0tICAgLS0tICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswNS8xMC8wOCAgIHN2ICAgICAgaW5pdGlhbCB2ZXJzaW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKgorICogTWVzc2FnZXMgZnJvbSBKUEVHIHRhc2sgdG8gQVJNIHRocm91Z2gganBlZ3VQTXNnUXVldWUKKyAqLworCisvKgorICogTWVzc2FnZSBpcyBBQ0sgZm9yIENNRF9KUEVHRV9FTkNPREUgY21kCisgKi8KKworI2RlZmluZQlKUEVHX01TR19FTkNfRU5DT0RFX0FDSwkweDAwMDAKKyNkZWZpbmUJSlBFR19NU0dfRU5DX0VOQ09ERV9BQ0tfTEVOCVwKKwlzaXplb2YoanBlZ19tc2dfZW5jX2VuY29kZV9hY2spCisKK3R5cGVkZWYgc3RydWN0IHsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkganBlZ19tc2dfZW5jX2VuY29kZV9hY2s7CisKKworLyoKKyAqIE1lc3NhZ2UgaW5mb3JtcyB0aGUgdXAgd2hlbiBvcCBidWZmZXIgaXMgcmVhZHkgZm9yIGNvbnN1bXB0aW9uIGFuZAorICogd2hlbiBlbmNvZGluZyBpcyBjb21wbGV0ZSBvciBlcnJvcnMKKyAqLworCisjZGVmaW5lCUpQRUdfTVNHX0VOQ19PUF9QUk9EVUNFRAkweDAwMDEKKyNkZWZpbmUJSlBFR19NU0dfRU5DX09QX1BST0RVQ0VEX0xFTglcCisJc2l6ZW9mKGpwZWdfbXNnX2VuY19vcF9wcm9kdWNlZCkKKworI2RlZmluZQlKUEVHX01TR09QX09QX0JVRl9TVEFUVVNfRU5DX0RPTkVfUFJPR1JFU1MJMHgwMDAwCisjZGVmaW5lCUpQRUdfTVNHT1BfT1BfQlVGX1NUQVRVU19FTkNfRE9ORV9DT01QTEVURQkweDAwMDEKKyNkZWZpbmUJSlBFR19NU0dPUF9PUF9CVUZfU1RBVFVTX0VOQ19FUlIJCTB4MTAwMDAKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAlvcF9idWZfYWRkcjsKKwl1bnNpZ25lZCBpbnQJb3BfYnVmX3NpemU7CisJdW5zaWduZWQgaW50CW9wX2J1Zl9zdGF0dXM7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGpwZWdfbXNnX2VuY19vcF9wcm9kdWNlZDsKKworCisvKgorICogTWVzc2FnZSB0byBhY2sgQ01EX0pQRUdFX0lETEUKKyAqLworCisjZGVmaW5lCUpQRUdfTVNHX0VOQ19JRExFX0FDSwkweDAwMDIKKyNkZWZpbmUJSlBFR19NU0dfRU5DX0lETEVfQUNLX0xFTglzaXplb2YoanBlZ19tc2dfZW5jX2lkbGVfYWNrKQorCisKK3R5cGVkZWYgc3RydWN0IHsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGpwZWdfbXNnX2VuY19pZGxlX2FjazsKKworCisvKgorICogTWVzc2FnZSB0byBpbmRpY2F0ZSB0aGUgaWxsZWdhbCBjb21tYW5kCisgKi8KKworI2RlZmluZQlKUEVHX01TR19FTkNfSUxMRUdBTF9DT01NQU5ECTB4MDAwMworI2RlZmluZQlKUEVHX01TR19FTkNfSUxMRUdBTF9DT01NQU5EX0xFTglcCisJc2l6ZW9mKGpwZWdfbXNnX2VuY19pbGxlZ2FsX2NvbW1hbmQpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJc3RhdHVzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqcGVnX21zZ19lbmNfaWxsZWdhbF9jb21tYW5kOworCisKKy8qCisgKiBNZXNzYWdlIHRvIEFDSyBDTURfSlBFR0RfREVDT0RFCisgKi8KKworI2RlZmluZQlKUEVHX01TR19ERUNfREVDT0RFX0FDSwkJMHgwMDA0CisjZGVmaW5lCUpQRUdfTVNHX0RFQ19ERUNPREVfQUNLX0xFTglcCisJc2l6ZW9mKGpwZWdfbXNnX2RlY19kZWNvZGVfYWNrKQorCisKK3R5cGVkZWYgc3RydWN0IHsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkganBlZ19tc2dfZGVjX2RlY29kZV9hY2s7CisKKworLyoKKyAqIE1lc3NhZ2UgdG8gaW5mb3JtIHVwIHRoYXQgYW4gb3AgYnVmZmVyIGlzIHJlYWR5IGZvciBjb25zdW1wdGlvbiBhbmQgd2hlbgorICogZGVjb2RpbmcgaXMgY29tcGxldGUgb3IgYW4gZXJyb3Igb2NjdXJzCisgKi8KKworI2RlZmluZQlKUEVHX01TR19ERUNfT1BfUFJPRFVDRUQJCTB4MDAwNQorI2RlZmluZQlKUEVHX01TR19ERUNfT1BfUFJPRFVDRURfTEVOCVwKKwlzaXplb2YoanBlZ19tc2dfZGVjX29wX3Byb2R1Y2VkKQorCisjZGVmaW5lCUpQRUdfTVNHX0RFQ19PUF9CVUZfU1RBVFVTX1BST0dSRVNTCTB4MDAwMAorI2RlZmluZQlKUEVHX01TR19ERUNfT1BfQlVGX1NUQVRVU19ET05FCQkweDAwMDEKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAlsdW1hX29wX2J1Zl9hZGRyOworCXVuc2lnbmVkIGludAljaHJvbWFfb3BfYnVmX2FkZHI7CisJdW5zaWduZWQgaW50CW51bV9tY3VzOworCXVuc2lnbmVkIGludAlvcF9idWZfc3RhdHVzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqcGVnX21zZ19kZWNfb3BfcHJvZHVjZWQ7CisKKy8qCisgKiBNZXNzYWdlIHRvIGFjayBDTURfSlBFR0RfSURMRSBjbWQKKyAqLworCisjZGVmaW5lCUpQRUdfTVNHX0RFQ19JRExFX0FDSwkweDAwMDYKKyNkZWZpbmUJSlBFR19NU0dfREVDX0lETEVfQUNLX0xFTglzaXplb2YoanBlZ19tc2dfZGVjX2lkbGVfYWNrKQorCisKK3R5cGVkZWYgc3RydWN0IHsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkganBlZ19tc2dfZGVjX2lkbGVfYWNrOworCisKKy8qCisgKiBNZXNzYWdlIHRvIGluZGljYXRlIGlsbGVnYWwgY21kIHdhcyByZWNlaXZlZAorICovCisKKyNkZWZpbmUJSlBFR19NU0dfREVDX0lMTEVHQUxfQ09NTUFORAkweDAwMDcKKyNkZWZpbmUJSlBFR19NU0dfREVDX0lMTEVHQUxfQ09NTUFORF9MRU4JXAorCXNpemVvZihqcGVnX21zZ19kZWNfaWxsZWdhbF9jb21tYW5kKQorCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJc3RhdHVzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqcGVnX21zZ19kZWNfaWxsZWdhbF9jb21tYW5kOworCisvKgorICogTWVzc2FnZSB0byByZXF1ZXN0IHVwIGZvciB0aGUgbmV4dCBzZWdtZW50IG9mIGlwIGJpdCBzdHJlYW0KKyAqLworCisjZGVmaW5lCUpQRUdfTVNHX0RFQ19JUF9SRVFVRVNUCQkweDAwMDgKKyNkZWZpbmUJSlBFR19NU0dfREVDX0lQX1JFUVVFU1RfTEVOCVwKKwlzaXplb2YoanBlZ19tc2dfZGVjX2lwX3JlcXVlc3QpCisKKwordHlwZWRlZiBzdHJ1Y3QgeworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBqcGVnX21zZ19kZWNfaXBfcmVxdWVzdDsKKworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWxwbWNtZGkuaCBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVscG1jbWRpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM3NmUyYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVscG1jbWRpLmgKQEAgLTAsMCArMSw4MiBAQAorI2lmbmRlZiBRRFNQNUxQTUNNRElfSAorI2RlZmluZSBRRFNQNUxQTUNNRElfSAorCisvKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09KgorCisgICAgTCBQIE0gICBJIE4gVCBFIFIgTiBBIEwgICBDIE8gTSBNIEEgTiBEIFMKKworR0VORVJBTCBERVNDUklQVElPTgorICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW50aW9ucyBvZiBmb3JtYXQgYmxvY2tzIG9mIGNvbW1hbmRzCisgIHRoYXQgYXJlIGFjY2VwdGVkIGJ5IExQTSBUYXNrCisKK1JFRkVSRU5DRVMKKyAgTm9uZQorCitFWFRFUk5BTElaRUQgRlVOQ1RJT05TCisgIE5vbmUKKworQ29weXJpZ2h0KGMpIDE5OTIgLSAyMDA4IGJ5IFFVQUxDT01NLCBJbmNvcnBvcmF0ZWQuCisKK1RoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCittYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisqPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICAgICAgICAgICAgICAgIEVESVQgSElTVE9SWSBGT1IgRklMRQorCitUaGlzIHNlY3Rpb24gY29udGFpbnMgY29tbWVudHMgZGVzY3JpYmluZyBjaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlLgorTm90aWNlIHRoYXQgY2hhbmdlcyBhcmUgbGlzdGVkIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlci4KKworCiskSGVhZGVyOiAvL3NvdXJjZS9xY29tL3FjdC9tdWx0aW1lZGlhMi9BZHNwU3ZjLzdYWFgvcWRzcDVjbWQvdmlkZW8vcWRzcDVscG1jbWRpLmgjMiAkICREYXRlVGltZTogMjAwOC8wNy8zMCAxMDo1MDoyMyAkICRBdXRob3I6IHBhdmFuciAkCitSZXZpc2lvbiBIaXN0b3J5OgorCit3aGVuICAgICAgIHdobyAgICAgd2hhdCwgd2hlcmUsIHdoeQorLS0tLS0tLS0gICAtLS0gICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzA2LzEyLzA4ICAgc3YgICAgICBpbml0aWFsIHZlcnNpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKworLyoKKyAqIENvbW1hbmQgdG8gc3RhcnQgTFBNIHByb2Nlc3NpbmcgYmFzZWQgb24gdGhlIGNvbmZpZyBwYXJhbXMKKyAqLworCisjZGVmaW5lCUxQTV9DTURfU1RBUlQJCTB4MDAwMAorI2RlZmluZQlMUE1fQ01EX1NUQVJUX0xFTglzaXplb2YobHBtX2NtZF9zdGFydCkKKworI2RlZmluZQlMUE1fQ01EX1NQQVRJQUxfRklMVEVSX1BBUlRfT1BNT0RFXzAJMHgwMDAwMDAwMAorI2RlZmluZQlMUE1fQ01EX1NQQVRJQUxfRklMVEVSX1BBUlRfT1BNT0RFXzEJMHgwMDAxMDAwMAordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CWlwX2RhdGFfY2ZnX3BhcnQxOworCXVuc2lnbmVkIGludAlpcF9kYXRhX2NmZ19wYXJ0MjsKKwl1bnNpZ25lZCBpbnQJaXBfZGF0YV9jZmdfcGFydDM7CisJdW5zaWduZWQgaW50CWlwX2RhdGFfY2ZnX3BhcnQ0OworCXVuc2lnbmVkIGludAlvcF9kYXRhX2NmZ19wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJb3BfZGF0YV9jZmdfcGFydDI7CisJdW5zaWduZWQgaW50CW9wX2RhdGFfY2ZnX3BhcnQzOworCXVuc2lnbmVkIGludAlzcGF0aWFsX2ZpbHRlcl9wYXJ0WzMyXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbHBtX2NtZF9zdGFydDsKKworCisKKy8qCisgKiBDb21tYW5kIHRvIHN0b3AgTFBNIHByb2Nlc3NpbmcKKyAqLworCisjZGVmaW5lCUxQTV9DTURfSURMRQkJMHgwMDAxCisjZGVmaW5lCUxQTV9DTURfSURMRV9MRU4Jc2l6ZW9mKGxwbV9jbWRfaWRsZSkKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIGxwbV9jbWRfaWRsZTsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVscG1tc2cuaCBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDVscG1tc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDEwMzlkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNWxwbW1zZy5oCkBAIC0wLDAgKzEsODAgQEAKKyNpZm5kZWYgUURTUDVMUE1NU0dJX0gKKyNkZWZpbmUgUURTUDVMUE1NU0dJX0gKKworLyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSoKKworICAgIEwgUCBNICAgSSBOIFQgRSBSIE4gQSBMICAgTSBFIFMgUyBBIEcgRSBTCisKK0dFTkVSQUwgREVTQ1JJUFRJT04KKyAgVGhpcyBmaWxlIGNvbnRhaW5zIGRlZmludGlvbnMgb2YgZm9ybWF0IGJsb2NrcyBvZiBjb21tYW5kcworICB0aGF0IGFyZSBhY2NlcHRlZCBieSBMUE0gVGFzaworCitSRUZFUkVOQ0VTCisgIE5vbmUKKworRVhURVJOQUxJWkVEIEZVTkNUSU9OUworICBOb25lCisKK0NvcHlyaWdodChjKSAxOTkyIC0gMjAwOCBieSBRVUFMQ09NTSwgSW5jb3Jwb3JhdGVkLgorCitUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Ki8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgICAgICAgICAgICAgICBFRElUIEhJU1RPUlkgRk9SIEZJTEUKKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGNvbW1lbnRzIGRlc2NyaWJpbmcgY2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZS4KK05vdGljZSB0aGF0IGNoYW5nZXMgYXJlIGxpc3RlZCBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuCisKKyRIZWFkZXI6IC8vc291cmNlL3Fjb20vcWN0L211bHRpbWVkaWEyL0Fkc3BTdmMvN1hYWC9xZHNwNWNtZC92aWRlby9xZHNwNWxwbW1zZy5oIzIgJCAkRGF0ZVRpbWU6IDIwMDgvMDcvMzAgMTA6NTA6MjMgJCAkQXV0aG9yOiBwYXZhbnIgJAorUmV2aXNpb24gSGlzdG9yeToKKword2hlbiAgICAgICB3aG8gICAgIHdoYXQsIHdoZXJlLCB3aHkKKy0tLS0tLS0tICAgLS0tICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswNi8xMi8wOCAgIHN2ICAgICAgaW5pdGlhbCB2ZXJzaW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisvKgorICogTWVzc2FnZSB0byBhY2tub3dsZWRnZSBDTURfTFBNX0lETEUgY29tbWFuZAorICovCisKKyNkZWZpbmUJTFBNX01TR19JRExFX0FDSwkweDAwMDAKKyNkZWZpbmUJTFBNX01TR19JRExFX0FDS19MRU4Jc2l6ZW9mKGxwbV9tc2dfaWRsZV9hY2spCisKK3R5cGVkZWYgc3RydWN0IHsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbHBtX21zZ19pZGxlX2FjazsKKworCisvKgorICogTWVzc2FnZSB0byBhY2tub3dsZWRnZSBDTURfTFBNX1NUQVJUIGNvbW1hbmQKKyAqLworCisKKyNkZWZpbmUJTFBNX01TR19TVEFSVF9BQ0sJMHgwMDAxCisjZGVmaW5lCUxQTV9NU0dfU1RBUlRfQUNLX0xFTglzaXplb2YobHBtX21zZ19zdGFydF9hY2spCisKKwordHlwZWRlZiBzdHJ1Y3QgeworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSBscG1fbXNnX3N0YXJ0X2FjazsKKworCisvKgorICogTWVzc2FnZSB0byBub3RpZnkgdGhlIEFSTSB0aGF0IExQTSBwcm9jZXNzaW5nIGlzIGNvbXBsZXRlCisgKi8KKworI2RlZmluZQlMUE1fTVNHX0RPTkUJCTB4MDAwMgorI2RlZmluZQlMUE1fTVNHX0RPTkVfTEVOCXNpemVvZihscG1fbXNnX2RvbmUpCisKK3R5cGVkZWYgc3RydWN0IHsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgbHBtX21zZ19kb25lOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNXZkZWNjbWRpLmggYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1dmRlY2NtZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTMyZWU5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNXZkZWNjbWRpLmgKQEAgLTAsMCArMSwyMzUgQEAKKyNpZm5kZWYgUURTUDVWSURERUNDTURJX0gKKyNkZWZpbmUgUURTUDVWSURERUNDTURJX0gKKworLyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSoKKworICAgIFYgSSBEIEUgTyAgRCBFIEMgTyBEIEUgUiAgSSBOIFQgRSBSIE4gQSBMICBDIE8gTSBNIEEgTiBEIFMKKworR0VORVJBTCBERVNDUklQVElPTgorICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW50aW9ucyBvZiBmb3JtYXQgYmxvY2tzIG9mIGNvbW1hbmRzCisgIHRoYXQgYXJlIGFjY2VwdGVkIGJ5IFZJRERFQyBUYXNrCisKK1JFRkVSRU5DRVMKKyAgTm9uZQorCitFWFRFUk5BTElaRUQgRlVOQ1RJT05TCisgIE5vbmUKKworQ29weXJpZ2h0KGMpIDE5OTIgLSAyMDA4IGJ5IFFVQUxDT01NLCBJbmNvcnBvcmF0ZWQuCisKK1RoaXMgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgYW5kCittYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkIHVuZGVyIHRob3NlIHRlcm1zLgorCitUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisqPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qLworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgICAgICAgICAgICAgICAgICAgIEVESVQgSElTVE9SWSBGT1IgRklMRQorCitUaGlzIHNlY3Rpb24gY29udGFpbnMgY29tbWVudHMgZGVzY3JpYmluZyBjaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlLgorTm90aWNlIHRoYXQgY2hhbmdlcyBhcmUgbGlzdGVkIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlci4KKworJEhlYWRlcjogLy9zb3VyY2UvcWNvbS9xY3QvbXVsdGltZWRpYTIvQWRzcFN2Yy83WFhYL3Fkc3A1Y21kL3ZpZGVvL3Fkc3A1dmRlY2NtZGkuaCMyICQgJERhdGVUaW1lOiAyMDA4LzA3LzMwIDEwOjUwOjIzICQgJEF1dGhvcjogcGF2YW5yICQKK1JldmlzaW9uIEhpc3Rvcnk6CisKK3doZW4gICAgICAgd2hvICAgICB3aGF0LCB3aGVyZSwgd2h5CistLS0tLS0tLSAgIC0tLSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMDUvMTAvMDggICBhYyAgICAgIGluaXRpYWwgdmVyc2lvbgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworCisvKgorICogQ29tbWFuZCB0byBpbmZvcm0gVklEREVDIHRoYXQgbmV3IHN1YmZyYW1lIHBhY2tldCBpcyByZWFkeQorICovCisKKyNkZWZpbmUJVklEREVDX0NNRF9TVUJGUkFNRV9QS1QJCTB4MDAwMAorI2RlZmluZQlWSURERUNfQ01EX1NVQkZSQU1FX1BLVF9MRU4gXAorCXNpemVvZih2aWRkZWNfY21kX3N1YmZyYW1lX3BrdCkKKworI2RlZmluZQlWSURERUNfQ01EX1NGX0lORk9fMV9ETV9ETUFfU1RBVFNfRVhDSEFOR0VfRkxBR19ETQkJMHgwMDAwCisjZGVmaW5lCVZJRERFQ19DTURfU0ZfSU5GT18xX0RNX0RNQV9TVEFUU19FWENIQU5HRV9GTEFHX0RNQSAJMHgwMDAxCisKKyNkZWZpbmUJVklEREVDX0NNRF9TRl9JTkZPXzBfU1VCRlJBTUVfQ09OVEkJCTB4MDAwMAorI2RlZmluZQlWSURERUNfQ01EX1NGX0lORk9fMF9TVUJGUkFNRV9GSVJTVAkJMHgwMDAxCisjZGVmaW5lCVZJRERFQ19DTURfU0ZfSU5GT18wX1NVQkZSQU1FX0xBU1QJCTB4MDAwMgorI2RlZmluZQlWSURERUNfQ01EX1NGX0lORk9fMF9TVUJGUkFNRV9GSVJTVF9BTkRfTEFTVCAJMHgwMDAzCisKKyNkZWZpbmUJVklEREVDX0NNRF9DT0RFQ19TRUxFQ1RJT05fV09SRF9NUEVHXzQJCTB4MDAwMAorI2RlZmluZQlWSURERUNfQ01EX0NPREVDX1NFTEVDVElPTl9XT1JEX0hfMjYzX1AwCTB4MDAwMQorI2RlZmluZQlWSURERUNfQ01EX0NPREVDX1NFTEVDVElPTl9XT1JEX0hfMjY0CQkweDAwMDIKKyNkZWZpbmUJVklEREVDX0NNRF9DT0RFQ19TRUxFQ1RJT05fV09SRF9IXzI2M19wMwkweDAwMDMKKyNkZWZpbmUJVklEREVDX0NNRF9DT0RFQ19TRUxFQ1RJT05fV09SRF9SVjkJCTB4MDAwNAorI2RlZmluZQlWSURERUNfQ01EX0NPREVDX1NFTEVDVElPTl9XT1JEX1dNVjkJCTB4MDAwNQorI2RlZmluZQlWSURERUNfQ01EX0NPREVDX1NFTEVDVElPTl9XT1JEX1NNQ0RCCQkweDAwMDYKKyNkZWZpbmUJVklEREVDX0NNRF9DT0RFQ19TRUxFQ1RJT05fV09SRF9RRlJFCQkweDAwMDcKKyNkZWZpbmUJVklEREVDX0NNRF9DT0RFQ19TRUxFQ1RJT05fV09SRF9WTEQJCTB4MDAwOAorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJY21kX2lkOworCXVuc2lnbmVkIHNob3J0CXBhY2tldF9zZXFfbnVtYmVyOworCXVuc2lnbmVkIHNob3J0CWNvZGVjX2luc3RhbmNlX2lkOworCXVuc2lnbmVkIHNob3J0CXN1YmZyYW1lX3BhY2tldF9zaXplX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJc3ViZnJhbWVfcGFja2V0X3NpemVfbG93OworCXVuc2lnbmVkIHNob3J0CXN1YmZyYW1lX3BhY2tldF9oaWdoOworCXVuc2lnbmVkIHNob3J0CXN1YmZyYW1lX3BhY2tldF9sb3c7CisJdW5zaWduZWQgc2hvcnQJc3ViZnJhbWVfcGFja2V0X3BhcnRpdGlvbjsKKwl1bnNpZ25lZCBzaG9ydAlzdGF0aXN0aWNzX3BhY2tldF9zaXplX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJc3RhdGlzdGljc19wYWNrZXRfc2l6ZV9sb3c7CisJdW5zaWduZWQgc2hvcnQJc3RhdGlzdGljc19wYWNrZXRfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlzdGF0aXN0aWNzX3BhY2tldF9sb3c7CisJdW5zaWduZWQgc2hvcnQJc3RhdGlzdGljc19wYXJ0aXRpb247CisJdW5zaWduZWQgc2hvcnQJc3ViZnJhbWVfaW5mb18xOworCXVuc2lnbmVkIHNob3J0CXN1YmZyYW1lX2luZm9fMDsKKwl1bnNpZ25lZCBzaG9ydAljb2RlY19zZWxlY3Rpb25fd29yZDsKKwl1bnNpZ25lZCBzaG9ydAludW1fbWJzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2aWRkZWNfY21kX3N1YmZyYW1lX3BrdDsKKworCisvKgorICogQ29tbWFuZCB0byBpbmZvcm0gVklEREVDIHRhc2sgdGhhdCBwb3N0IHByb2Nlc3NpbmcgaXMgcmVxdWlyZWQgZm9yIHRoZSBmcmFtZQorICovCisKKyNkZWZpbmUJVklEREVDX0NNRF9QUF9FTkFCTEUJCTB4MDAwMQorI2RlZmluZQlWSURERUNfQ01EX1BQX0VOQUJMRV9MRU4gXAorCXNpemVvZih2aWRkZWNfY21kX3BwX2VuYWJsZSkKKworI2RlZmluZQlWSURERUNfQ01EX1BQX0lORk9fMF9ETV9ETUFfTFNfRVhDSEFOR0VfRkxBR19ETQkJMHgwMDAwCisjZGVmaW5lCVZJRERFQ19DTURfUFBfSU5GT18wX0RNX0RNQV9MU19FWENIQU5HRV9GTEFHX0RNQQkweDAwMDEKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CWNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydAlwYWNrZXRfc2VxX251bTsKKwl1bnNpZ25lZCBzaG9ydAljb2RlY19pbnN0YW5jZV9pZDsKKwl1bnNpZ25lZCBzaG9ydAlwb3N0cHJvY19pbmZvXzA7CisJdW5zaWduZWQgc2hvcnQJY29kZWNfc2VsZWN0aW9uX3dvcmQ7CisJdW5zaWduZWQgc2hvcnQJcHBfb3V0cHV0X2FkZHJfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlwcF9vdXRwdXRfYWRkcl9sb3c7CisJdW5zaWduZWQgc2hvcnQJcG9zdHByb2NfaW5mb18xOworCXVuc2lnbmVkIHNob3J0CWxvYWRfc2hhcmluZ19wYWNrZXRfc2l6ZV9oaWdoOworCXVuc2lnbmVkIHNob3J0CWxvYWRfc2hhcmluZ19wYWNrZXRfc2l6ZV9sb3c7CisJdW5zaWduZWQgc2hvcnQJbG9hZF9zaGFyaW5nX3BhY2tldF9oaWdoOworCXVuc2lnbmVkIHNob3J0CWxvYWRfc2hhcmluZ19wYWNrZXRfbG93OworCXVuc2lnbmVkIHNob3J0CWxvYWRfc2hhcmluZ19wYXJ0aXRpb247CisJdW5zaWduZWQgc2hvcnQJcHBfcGFyYW1fMDsKKwl1bnNpZ25lZCBzaG9ydAlwcF9wYXJhbV8xOworCXVuc2lnbmVkIHNob3J0CXBwX3BhcmFtXzI7CisJdW5zaWduZWQgc2hvcnQJcHBfcGFyYW1fMzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmlkZGVjX2NtZF9wcF9lbmFibGU7CisKKworLyoKKyAqIEZSQU1FIEhlYWRlciBQYWNrZXQgOiBJdCBpcyBhdCB0aGUgc3RhcnQgb2YgbmV3IGZyYW1lCisgKi8KKworI2RlZmluZQlWSURERUNfQ01EX0ZSQU1FX0hFQURFUl9QQUNLRVQJMHgwMDAyCisjZGVmaW5lCVZJRERFQ19DTURfRlJBTUVfSEVBREVSX1BBQ0tFVF9MRU4JXAorCXNpemVvZih2aWRkZWNfY21kX2ZyYW1lX2hlYWRlcl9wYWNrZXQpCisKKyNkZWZpbmUJVklEREVDX0NNRF9GUkFNRV9JTkZPXzBfRVJST1JfU0tJUAkweDAwMDAKKyNkZWZpbmUJVklEREVDX0NNRF9GUkFNRV9JTkZPXzBfRVJST1JfQkxBQ0sJMHgwODAwCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAlwYWNrZXRfaWQ7CisJdW5zaWduZWQgc2hvcnQJeF9kaW1lbnNpb247CisJdW5zaWduZWQgc2hvcnQJeV9kaW1lbnNpb247CisJdW5zaWduZWQgc2hvcnQJbGluZV93aWR0aDsKKwl1bnNpZ25lZCBzaG9ydAlmcmFtZV9pbmZvXzA7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzBfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlmcmFtZV9idWZmZXJfMF9sb3c7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzFfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlmcmFtZV9idWZmZXJfMV9sb3c7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzJfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlmcmFtZV9idWZmZXJfMl9sb3c7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzNfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlmcmFtZV9idWZmZXJfM19sb3c7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzRfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlmcmFtZV9idWZmZXJfNF9sb3c7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzVfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlmcmFtZV9idWZmZXJfNV9sb3c7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzZfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlmcmFtZV9idWZmZXJfNl9sb3c7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzdfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlmcmFtZV9idWZmZXJfN19sb3c7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzhfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlmcmFtZV9idWZmZXJfOF9sb3c7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzlfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlmcmFtZV9idWZmZXJfOV9sb3c7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzEwX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzEwX2xvdzsKKwl1bnNpZ25lZCBzaG9ydAlmcmFtZV9idWZmZXJfMTFfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlmcmFtZV9idWZmZXJfMTFfbG93OworCXVuc2lnbmVkIHNob3J0CWZyYW1lX2J1ZmZlcl8xMl9oaWdoOworCXVuc2lnbmVkIHNob3J0CWZyYW1lX2J1ZmZlcl8xMl9sb3c7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzEzX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQJZnJhbWVfYnVmZmVyXzEzX2xvdzsKKwl1bnNpZ25lZCBzaG9ydAlmcmFtZV9idWZmZXJfMTRfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAlmcmFtZV9idWZmZXJfMTRfbG93OworCXVuc2lnbmVkIHNob3J0CWZyYW1lX2J1ZmZlcl8xNV9oaWdoOworCXVuc2lnbmVkIHNob3J0CWZyYW1lX2J1ZmZlcl8xNV9sb3c7CisJdW5zaWduZWQgc2hvcnQJb3V0cHV0X2ZyYW1lX2J1ZmZlcl9oaWdoOworCXVuc2lnbmVkIHNob3J0CW91dHB1dF9mcmFtZV9idWZmZXJfbG93OworCXVuc2lnbmVkIHNob3J0CWVuZF9vZl9wYWNrZXRfbWFya2VyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2aWRkZWNfY21kX2ZyYW1lX2hlYWRlcl9wYWNrZXQ7CisKKworLyoKKyAqIFNMSUNFIEhFQURFUiBQQUNLRVQKKyAqIEktU2xpY2UgYW5kIFAtU2xpY2UKKyAqLworCisjZGVmaW5lCVZJRERFQ19DTURfU0xJQ0VfSEVBREVSX1BLVF9JU0xJQ0UJCTB4MDAwMworI2RlZmluZQlWSURERUNfQ01EX1NMSUNFX0hFQURFUl9QS1RfSVNMSUNFX0xFTglcCisJc2l6ZW9mKHZpZGRlY19jbWRfc2xpY2VfaGVhZGVyX3BrdF9pc2xpY2UpCisKKyNkZWZpbmUJVklEREVDX0NNRF9JU0xJQ0VfSU5GT18xX01PRF9TTElDRV9UWVBFX1BTTElDRQkweDAwMDAKKyNkZWZpbmUJVklEREVDX0NNRF9JU0xJQ0VfSU5GT18xX01PRF9TTElDRV9UWVBFX0JTTElDRQkweDAxMDAKKyNkZWZpbmUJVklEREVDX0NNRF9JU0xJQ0VfSU5GT18xX01PRF9TTElDRV9UWVBFX0lTTElDRQkweDAyMDAKKyNkZWZpbmUJVklEREVDX0NNRF9JU0xJQ0VfSU5GT18xX01PRF9TTElDRV9UWVBFX1NQU0xJQ0UJMHgwMzAwCisjZGVmaW5lCVZJRERFQ19DTURfSVNMSUNFX0lORk9fMV9NT0RfU0xJQ0VfVFlQRV9TSVNMSUNFCTB4MDQwMAorI2RlZmluZQlWSURERUNfQ01EX0lTTElDRV9JTkZPXzFfTk9QQURESU5HCTB4MDAwMAorI2RlZmluZQlWSURERUNfQ01EX0lTTElDRV9JTkZPXzFfUEFERElORwkweDA4MDAKKworI2RlZmluZQlWSURERUNfQ01EX0lTTElDRV9FT1BfTUFSS0VSCQkweDdGRkYKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CWNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydAlwYWNrZXRfaWQ7CisJdW5zaWduZWQgc2hvcnQJc2xpY2VfaW5mb18wOworCXVuc2lnbmVkIHNob3J0CXNsaWNlX2luZm9fMTsKKwl1bnNpZ25lZCBzaG9ydAlzbGljZV9pbmZvXzI7CisJdW5zaWduZWQgc2hvcnQJbnVtX2J5dGVzX2luX3Jic3BfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAludW1fYnl0ZXNfaW5fcmJzcF9sb3c7CisJdW5zaWduZWQgc2hvcnQJbnVtX2J5dGVzX2luX3Jic3BfY29uc3VtZWQ7CisJdW5zaWduZWQgc2hvcnQJZW5kX29mX3BhY2tldF9tYXJrZXI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZpZGRlY19jbWRfc2xpY2VfaGVhZGVyX3BrdF9pc2xpY2U7CisKKworI2RlZmluZQlWSURERUNfQ01EX1NMSUNFX0hFQURFUl9QS1RfUFNMSUNFCQkweDAwMDMKKyNkZWZpbmUJVklEREVDX0NNRF9TTElDRV9IRUFERVJfUEtUX1BTTElDRV9MRU4JXAorCXNpemVvZih2aWRkZWNfY21kX3NsaWNlX2hlYWRlcl9wa3RfcHNsaWNlKQorCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAljbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQJcGFja2V0X2lkOworCXVuc2lnbmVkIHNob3J0CXNsaWNlX2luZm9fMDsKKwl1bnNpZ25lZCBzaG9ydAlzbGljZV9pbmZvXzE7CisJdW5zaWduZWQgc2hvcnQJc2xpY2VfaW5mb18yOworCXVuc2lnbmVkIHNob3J0CXNsaWNlX2luZm9fMzsKKwl1bnNpZ25lZCBzaG9ydAlyZWZpZHhfbDBfbWFwX3RhYl9pbmZvXzA7CisJdW5zaWduZWQgc2hvcnQJcmVmaWR4X2wwX21hcF90YWJfaW5mb18xOworCXVuc2lnbmVkIHNob3J0CXJlZmlkeF9sMF9tYXBfdGFiX2luZm9fMjsKKwl1bnNpZ25lZCBzaG9ydAlyZWZpZHhfbDBfbWFwX3RhYl9pbmZvXzM7CisJdW5zaWduZWQgc2hvcnQJbnVtX2J5dGVzX2luX3Jic3BfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydAludW1fYnl0ZXNfaW5fcmJzcF9sb3c7CisJdW5zaWduZWQgc2hvcnQJbnVtX2J5dGVzX2luX3Jic3BfY29uc3VtZWQ7CisJdW5zaWduZWQgc2hvcnQJZW5kX29mX3BhY2tldF9tYXJrZXI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZpZGRlY19jbWRfc2xpY2VfaGVhZGVyX3BrdF9wc2xpY2U7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1dmRlY21zZy5oIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNXZkZWNtc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTc0NGMxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNXZkZWNtc2cuaApAQCAtMCwwICsxLDEwNyBAQAorI2lmbmRlZiBRRFNQNVZJRERFQ01TR0lfSAorI2RlZmluZSBRRFNQNVZJRERFQ01TR0lfSAorCisvKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09KgorCisgICAgViBJIEQgRSBPICBEIEUgQyBPIEQgRSBSICAgSSBOIFQgRSBSIE4gQSBMICBNIEUgUyBTIEEgRyBFIFMKKworR0VORVJBTCBERVNDUklQVElPTgorICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW50aW9ucyBvZiBmb3JtYXQgYmxvY2tzIG9mIG1lc3NhZ2VzCisgIHRoYXQgYXJlIHNlbnQgYnkgVklEREVDIFRhc2sKKworUkVGRVJFTkNFUworICBOb25lCisKK0VYVEVSTkFMSVpFRCBGVU5DVElPTlMKKyAgTm9uZQorCitDb3B5cmlnaHQoYykgMTk5MiAtIDIwMDggYnkgUVVBTENPTU0sIEluY29ycG9yYXRlZC4KKworVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKK21heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgICAgICAgICAgICAgICAgRURJVCBISVNUT1JZIEZPUiBGSUxFCisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBjb21tZW50cyBkZXNjcmliaW5nIGNoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUuCitOb3RpY2UgdGhhdCBjaGFuZ2VzIGFyZSBsaXN0ZWQgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyLgorCiskSGVhZGVyOiAvL3NvdXJjZS9xY29tL3FjdC9tdWx0aW1lZGlhMi9BZHNwU3ZjLzdYWFgvcWRzcDVjbWQvdmlkZW8vcWRzcDV2ZGVjbXNnLmgjMiAkICREYXRlVGltZTogMjAwOC8wNy8zMCAxMDo1MDoyMyAkICRBdXRob3I6IHBhdmFuciAkCitSZXZpc2lvbiBIaXN0b3J5OgorCit3aGVuICAgICAgIHdobyAgICAgd2hhdCwgd2hlcmUsIHdoeQorLS0tLS0tLS0gICAtLS0gICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzA1LzEwLzA4ICAgYWMgICAgICBpbml0aWFsIHZlcnNpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qCisgKiBNZXNzYWdlIHRvIGluZm9ybSBBUk0gd2hpY2ggVkRFQ19TVUJGUkFNRV9QS1RfQ01EIHByb2Nlc3NlZCBieSBWSURERUMgVEFTSworICovCisKKyNkZWZpbmUJVklEREVDX01TR19TVUJGX0RPTkUJMHgwMDAwCisjZGVmaW5lCVZJRERFQ19NU0dfU1VCRl9ET05FX0xFTglcCisJc2l6ZW9mKHZpZGRlY19tc2dfc3ViZl9kb25lKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQJcGFja2V0X3NlcV9udW1iZXI7CisJdW5zaWduZWQgc2hvcnQJY29kZWNfaW5zdGFuY2VfaWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZpZGRlY19tc2dfc3ViZl9kb25lOworCisKKy8qCisgKiBNZXNzYWdlIHRvIGluZm9ybSBBUk0gb25lIGZyYW1lIGhhcyBiZWVuIGRlY29kZWQKKyAqLworCisjZGVmaW5lCVZJRERFQ19NU0dfRlJBTUVfRE9ORQkweDAwMDEKKyNkZWZpbmUJVklEREVDX01TR19GUkFNRV9ET05FX0xFTglcCisJc2l6ZW9mKHZpZGRlY19tc2dfZnJhbWVfZG9uZSkKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0CXBhY2tldF9zZXFfbnVtYmVyOworCXVuc2lnbmVkIHNob3J0CWNvZGVjX2luc3RhbmNlX2lkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2aWRkZWNfbXNnX2ZyYW1lX2RvbmU7CisKKworLyoKKyAqIE1lc3NhZ2UgdG8gaW5mb3JtIEFSTSB0aGF0IHBvc3QgcHJvY2Vzc2luZyBmcmFtZSBoYXMgYmVlbiBkZWNvZGVkCisgKi8KKworI2RlZmluZQlWSURERUNfTVNHX1BQX0VOQUJMRV9DTURfRE9ORQkweDAwMDIKKyNkZWZpbmUJVklEREVDX01TR19QUF9FTkFCTEVfQ01EX0RPTkVfTEVOCVwKKwlzaXplb2YodmlkZGVjX21zZ19wcF9lbmFibGVfY21kX2RvbmUpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAlwYWNrZXRfc2VxX251bWJlcjsKKwl1bnNpZ25lZCBzaG9ydAljb2RlY19pbnN0YW5jZV9pZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmlkZGVjX21zZ19wcF9lbmFibGVfY21kX2RvbmU7CisKKworLyoKKyAqIE1lc3NhZ2UgdG8gaW5mb3JtIEFSTSB0aGF0IG9uZSBwb3N0IHByb2Nlc3NpbmcgZnJhbWUgaGFzIGJlZW4gZGVjb2RlZAorICovCisKKworI2RlZmluZQlWSURERUNfTVNHX1BQX0ZSQU1FX0RPTkUJCTB4MDAwMworI2RlZmluZQlWSURERUNfTVNHX1BQX0ZSQU1FX0RPTkVfTEVOCVwKKwlzaXplb2YodmlkZGVjX21zZ19wcF9mcmFtZV9kb25lKQorCisjZGVmaW5lCVZJRERFQ19NU0dfRElTUF9XT1JUSFlfRElTUAkJMHgwMDAwCisjZGVmaW5lCVZJRERFQ19NU0dfRElTUF9XT1JUSFlfRElTUF9OT05FCTB4RkZGRgorCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAlwYWNrZXRfc2VxX251bWJlcjsKKwl1bnNpZ25lZCBzaG9ydAljb2RlY19pbnN0YW5jZV9pZDsKKwl1bnNpZ25lZCBzaG9ydAlkaXNwbGF5X3dvcnRoeTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmlkZGVjX21zZ19wcF9mcmFtZV9kb25lOworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNXZlbmNjbWRpLmggYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1dmVuY2NtZGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTk1NDRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNXZlbmNjbWRpLmgKQEAgLTAsMCArMSwyMTIgQEAKKyNpZm5kZWYgUURTUDVWSURFTkNDTURJX0gKKyNkZWZpbmUgUURTUDVWSURFTkNDTURJX0gKKworLyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSoKKworICAgIFYgSSBEIEUgTyAgRSBOIEMgTyBEIEUgUiAgSSBOIFQgRSBSIE4gQSBMICBDIE8gTSBNIEEgTiBEIFMKKworR0VORVJBTCBERVNDUklQVElPTgorICBUaGlzIGZpbGUgY29udGFpbnMgZGVmaW50aW9ucyBvZiBmb3JtYXQgYmxvY2tzIG9mIGNvbW1hbmRzCisgIHRoYXQgYXJlIGFjY2VwdGVkIGJ5IFZJREVOQyBUYXNrCisKK1JFRkVSRU5DRVMKKyAgTm9uZQorCitFWFRFUk5BTElaRUQgRlVOQ1RJT05TCisgIE5vbmUKKworQ29weXJpZ2h0KGMpIDIwMDggYnkgUVVBTENPTU0sIEluY29ycG9yYXRlZC4KKyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisJCQlFRElUIEhJU1RPUlkgRk9SIEZJTEUKKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGNvbW1lbnRzIGRlc2NyaWJpbmcgY2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZS4KK05vdGljZSB0aGF0IGNoYW5nZXMgYXJlIGxpc3RlZCBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuCisKK1JldmlzaW9uIEhpc3Rvcnk6CisKK3doZW4gICAgICAgd2hvICAgICB3aGF0LCB3aGVyZSwgd2h5CistLS0tLS0tLSAgIC0tLSAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorMDkvMjUvMDggICB1bWVzaHAgICAgICBpbml0aWFsIHZlcnNpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKyAgI2RlZmluZSBWSURFTkNfQ01EX0NGRyAgICAgICAgICAgMHgwMDAwCisgICNkZWZpbmUgVklERU5DX0NNRF9BQ1RJVkUgICAgICAgIDB4MDAwMQorICAjZGVmaW5lIFZJREVOQ19DTURfSURMRSAgICAgICAgICAweDAwMDIKKyAgI2RlZmluZSBWSURFTkNfQ01EX0ZSQU1FX1NUQVJUICAgMHgwMDAzCisgICNkZWZpbmUgVklERU5DX0NNRF9TVEFUVVNfUVVFUlkgIDB4MDAwNAorICAjZGVmaW5lIFZJREVOQ19DTURfUkNfQ0ZHICAgICAgICAweDAwMDUKKyAgI2RlZmluZSBWSURFTkNfQ01EX0RJU19DRkcgICAgICAgMHgwMDA2CisgICNkZWZpbmUgVklERU5DX0NNRF9ESVMgICAgICAgICAgIDB4MDAwNworICAjZGVmaW5lIFZJREVOQ19DTURfSU5UUkFfUkVGUkVTSCAweDAwMDgKKyAgI2RlZmluZSBWSURFTkNfQ01EX0RJR0lUQUxfWk9PTSAgMHgwMDA5CisKKworLyoKKyAqIENvbW1hbmQgdG8gcGFzcyB0aGUgZnJhbWUgbWVzc2FnZSBpbmZvcm1hdGlvbiB0byBWSURFTkMKKyAqLworCisKKyNkZWZpbmUgVklERU5DX0NNRF9GUkFNRV9TVEFSVF9MRU4gXAorCXNpemVvZih2aWRlbmNfY21kX2ZyYW1lX3N0YXJ0KQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgIGNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydCAgZnJhbWVfaW5mbzsKKwl1bnNpZ25lZCBzaG9ydCAgZnJhbWVfcmhvX2J1ZGdldF93b3JkX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQgIGZyYW1lX3Job19idWRnZXRfd29yZF9sb3c7CisJdW5zaWduZWQgc2hvcnQgIGlucHV0X2x1bWFfYWRkcl9oaWdoOworCXVuc2lnbmVkIHNob3J0ICBpbnB1dF9sdW1hX2FkZHJfbG93OworCXVuc2lnbmVkIHNob3J0ICBpbnB1dF9jaHJvbWFfYWRkcl9oaWdoOworCXVuc2lnbmVkIHNob3J0ICBpbnB1dF9jaHJvbWFfYWRkcl9sb3c7CisJdW5zaWduZWQgc2hvcnQgIHJlZl92b3BfYnVmX3B0cl9oaWdoOworCXVuc2lnbmVkIHNob3J0ICByZWZfdm9wX2J1Zl9wdHJfbG93OworCXVuc2lnbmVkIHNob3J0ICBlbmNfcGt0X2J1Zl9wdHJfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydCAgZW5jX3BrdF9idWZfcHRyX2xvdzsKKwl1bnNpZ25lZCBzaG9ydCAgZW5jX3BrdF9idWZfc2l6ZV9oaWdoOworCXVuc2lnbmVkIHNob3J0ICBlbmNfcGt0X2J1Zl9zaXplX2xvdzsKKwl1bnNpZ25lZCBzaG9ydCAgdW5maWx0X3JlY29uX3ZvcF9idWZfcHRyX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQgIHVuZmlsdF9yZWNvbl92b3BfYnVmX3B0cl9sb3c7CisJdW5zaWduZWQgc2hvcnQgIGZpbHRfcmVjb25fdm9wX2J1Zl9wdHJfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydCAgZmlsdF9yZWNvbl92b3BfYnVmX3B0cl9sb3c7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZpZGVuY19jbWRfZnJhbWVfc3RhcnQ7CisKKy8qCisgKiBDb21tYW5kIHRvIHBhc3MgdGhlIGZyYW1lLWxldmVsIGRpZ2l0YWwgc3RhYmlsaXphdGlvbiBwYXJhbWV0ZXJzIHRvIFZJREVOQworICovCisKKworI2RlZmluZSBWSURFTkNfQ01EX0RJU19MRU4gXAorICAgIHNpemVvZih2aWRlbmNfY21kX2RpcykKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0ICBjbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQgIHZmZV9vdXRfcHJldl9sdW1hX2FkZHJfaGlnaDsKKwl1bnNpZ25lZCBzaG9ydCAgdmZlX291dF9wcmV2X2x1bWFfYWRkcl9sb3c7CisJdW5zaWduZWQgc2hvcnQgIHN0YWJpbGl6YXRpb25faW5mbzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmlkZW5jX2NtZF9kaXM7CisKKy8qCisgKiBDb21tYW5kIHRvIHBhc3MgdGhlIGNvZGVjIHJlbGF0ZWQgcGFyYW1ldGVycyB0byBWSURFTkMKKyAqLworCisKKyNkZWZpbmUgVklERU5DX0NNRF9DRkdfTEVOIFwKKyAgICBzaXplb2YodmlkZW5jX2NtZF9jZmcpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCAgY21kX2lkOworCXVuc2lnbmVkIHNob3J0ICBjZmdfaW5mb18wOworCXVuc2lnbmVkIHNob3J0ICBjZmdfaW5mb18xOworCXVuc2lnbmVkIHNob3J0ICBmb3VyX212X3RocmVzaG9sZDsKKwl1bnNpZ25lZCBzaG9ydCAgaXNlX2ZzZV9tdl9jb3N0X2ZhYzsKKwl1bnNpZ25lZCBzaG9ydCAgdmVuY19mcmFtZV9kaW07CisJdW5zaWduZWQgc2hvcnQgIHZlbmNfRE1fcGFydGl0aW9uOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2aWRlbmNfY21kX2NmZzsKKworLyoKKyAqIENvbW1hbmQgdG8gc3RhcnQgdGhlIHZpZGVvIGVuY29kaW5nCisgKi8KKworCisjZGVmaW5lIFZJREVOQ19DTURfQUNUSVZFX0xFTiBcCisgICAgc2l6ZW9mKHZpZGVuY19jbWRfYWN0aXZlKQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdW5zaWduZWQgc2hvcnQgIGNtZF9pZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmlkZW5jX2NtZF9hY3RpdmU7CisKKy8qCisgKiBDb21tYW5kIHRvIHN0b3AgdGhlIHZpZGVvIGVuY29kaW5nCisgKi8KKworCisjZGVmaW5lIFZJREVOQ19DTURfSURMRV9MRU4gXAorICAgIHNpemVvZih2aWRlbmNfY21kX2lkbGUpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCAgY21kX2lkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2aWRlbmNfY21kX2lkbGU7CisKKy8qCisgKiBDb21tYW5kIHRvIHF1ZXJ5IHN0YXVzIG9mIFZJREVOQworICovCisKKworI2RlZmluZSBWSURFTkNfQ01EX1NUQVRVU19RVUVSWV9MRU4gXAorICAgIHNpemVvZih2aWRlbmNfY21kX3N0YXR1c19xdWVyeSkKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0ICBjbWRfaWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZpZGVuY19jbWRfc3RhdHVzX3F1ZXJ5OworCisvKgorICogQ29tbWFuZCB0byBzZXQgcmF0ZSBjb250cm9sIGZvciBhIGZyYW1lCisgKi8KKworCisjZGVmaW5lIFZJREVOQ19DTURfUkNfQ0ZHX0xFTiBcCisgICAgc2l6ZW9mKHZpZGVuY19jbWRfcmNfY2ZnKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgIGNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydCAgbWF4X2ZyYW1lX3FwX2RlbHRhOworCXVuc2lnbmVkIHNob3J0ICBtYXhfbWluX2ZyYW1lX3FwOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2aWRlbmNfY21kX3JjX2NmZzsKKworLyoKKyAqIENvbW1hbmQgdG8gc2V0IGludHJhLXJlZnJlc2hpbmcKKyAqLworCisKKyNkZWZpbmUgVklERU5DX0NNRF9JTlRSQV9SRUZSRVNIX0xFTiBcCisgICAgc2l6ZW9mKHZpZGVuY19jbWRfaW50cmFfcmVmcmVzaCkKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIHNob3J0ICBjbWRfaWQ7CisJdW5zaWduZWQgc2hvcnQgIG51bV9tYl9yZWZyZXNoOworCXVuc2lnbmVkIHNob3J0ICBtYl9pbmRleFsxNV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZpZGVuY19jbWRfaW50cmFfcmVmcmVzaDsKKworLyoKKyAqIENvbW1hbmQgdG8gcGFzcyBkaWdpdGFsIHpvb20gaW5mb3JtYXRpb24gdG8gdGhlIFZJREVOQworICovCisjZGVmaW5lIFZJREVOQ19DTURfRElHSVRBTF9aT09NX0xFTiBcCisgICAgc2l6ZW9mKHZpZGVuY19jbWRfZGlnaXRhbF96b29tKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgIGNtZF9pZDsKKwl1bnNpZ25lZCBzaG9ydCAgZGlnaXRhbF96b29tX2VuOworCXVuc2lnbmVkIHNob3J0ICBsdW1hX2ZyYW1lX3NoaWZ0X1g7CisJdW5zaWduZWQgc2hvcnQgIGx1bWFfZnJhbWVfc2hpZnRfWTsKKwl1bnNpZ25lZCBzaG9ydCAgdXBfaXBfbHVtYV9yb3dzOworCXVuc2lnbmVkIHNob3J0ICB1cF9pcF9sdW1hX2NvbHM7CisJdW5zaWduZWQgc2hvcnQgIHVwX2lwX2Nocm9tYV9yb3dzOworCXVuc2lnbmVkIHNob3J0ICB1cF9pcF9jaHJvbWFfY29sczsKKwl1bnNpZ25lZCBzaG9ydCAgbHVtYV9waF9pbmNyX1ZfbG93OworCXVuc2lnbmVkIHNob3J0ICBsdW1hX3BoX2luY3JfVl9oaWdoOworCXVuc2lnbmVkIHNob3J0ICBsdW1hX3BoX2luY3JfSF9sb3c7CisJdW5zaWduZWQgc2hvcnQgIGx1bWFfcGhfaW5jcl9IX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQgIGNocm9tYV9waF9pbmNyX1ZfbG93OworCXVuc2lnbmVkIHNob3J0ICBjaHJvbWFfcGhfaW5jcl9WX2hpZ2g7CisJdW5zaWduZWQgc2hvcnQgIGNocm9tYV9waF9pbmNyX0hfbG93OworCXVuc2lnbmVkIHNob3J0ICBjaHJvbWFfcGhfaW5jcl9IX2hpZ2g7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZpZGVuY19jbWRfZGlnaXRhbF96b29tOworCisvKgorICogQ29tbWFuZCB0byBjb25maWd1cmUgZGlnaXRhbCBzdGFiaWxpemF0aW9uIHBhcmFtZXRlcnMKKyAqLworCisjZGVmaW5lIFZJREVOQ19DTURfRElTX0NGR19MRU4gXAorICAgIHNpemVvZih2aWRlbmNfY21kX2Rpc19jZmcpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCAgY21kX2lkOworCXVuc2lnbmVkIHNob3J0ICBpbWFnZV9zdGFiX3N1YmZfc3RhcnRfcm93X2NvbDsKKwl1bnNpZ25lZCBzaG9ydCAgaW1hZ2Vfc3RhYl9zdWJmX2RpbTsKKwl1bnNpZ25lZCBzaG9ydCAgaW1hZ2Vfc3RhYl9pbmZvXzA7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZpZGVuY19jbWRfZGlzX2NmZzsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDV2ZmVjbWRpLmggYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1dmZlY21kaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZThmYzIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZS9tYWNoL3Fkc3A1L3Fkc3A1dmZlY21kaS5oCkBAIC0wLDAgKzEsOTEwIEBACisjaWZuZGVmIFFEU1A1VkZFQ01ESV9ICisjZGVmaW5lIFFEU1A1VkZFQ01ESV9ICisKKy8qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qCisKKyAgICBWIEYgRSAgIEkgTiBUIEUgUiBOIEEgTCAgIEMgTyBNIE0gQSBOIEQgUworCitHRU5FUkFMIERFU0NSSVBUSU9OCisgIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbnRpb25zIG9mIGZvcm1hdCBibG9ja3Mgb2YgY29tbWFuZHMKKyAgdGhhdCBhcmUgYWNjZXB0ZWQgYnkgVkZFIFRhc2sKKworUkVGRVJFTkNFUworICBOb25lCisKK0VYVEVSTkFMSVpFRCBGVU5DVElPTlMKKyAgTm9uZQorCitDb3B5cmlnaHQoYykgMTk5MiAtIDIwMDggYnkgUVVBTENPTU0sIEluY29ycG9yYXRlZC4KKworVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBhbmQKK21heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkLCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhvc2UgdGVybXMuCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSovCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICAgICAgICAgICAgICAgICAgICAgRURJVCBISVNUT1JZIEZPUiBGSUxFCisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBjb21tZW50cyBkZXNjcmliaW5nIGNoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUuCitOb3RpY2UgdGhhdCBjaGFuZ2VzIGFyZSBsaXN0ZWQgaW4gcmV2ZXJzZSBjaHJvbm9sb2dpY2FsIG9yZGVyLgorCiskSGVhZGVyOiAvL3NvdXJjZS9xY29tL3FjdC9tdWx0aW1lZGlhMi9BZHNwU3ZjLzdYWFgvcWRzcDVjbWQvdmlkZW8vcWRzcDV2ZmVjbWRpLmgjMiAkICREYXRlVGltZTogMjAwOC8wNy8zMCAxMDo1MDoyMyAkICRBdXRob3I6IHBhdmFuciAkCitSZXZpc2lvbiBIaXN0b3J5OgorCit3aGVuICAgICAgIHdobyAgICAgd2hhdCwgd2hlcmUsIHdoeQorLS0tLS0tLS0gICAtLS0gICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzA2LzEyLzA4ICAgc3YgICAgICBpbml0aWFsIHZlcnNpb24KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbW1hbmRzIHRocm91Z2ggdmZlQ29tbWFuZFNjYWxlUXVldWUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENvbW1hbmQgdG8gcHJvZ3JhbSBzY2FsZXIgZm9yIG9wMSAuIG1heCBvcCBvZiBzY2FsZXIgaXMgVkdBCisgKi8KKworCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AxX0NGRwkJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AxX0NGR19MRU4JXAorCXNpemVvZih2ZmVfY21kX3NjYWxlX29wMV9jZmcpCisKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDFfU0VMX0lQX1NFTF9ZX1NUQU5EQVJECTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMV9TRUxfSVBfU0VMX1lfQ0FTQ0FERUQJMHgwMDAxCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AxX1NFTF9IX1lfU0NBTEVSX0RJUwkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDFfU0VMX0hfWV9TQ0FMRVJfRU5BCTB4MDAwMgorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMV9TRUxfSF9QUF9ZX1NDQUxFUl9ESVMJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AxX1NFTF9IX1BQX1lfU0NBTEVSX0VOQQkweDAwMDQKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDFfU0VMX1ZfWV9TQ0FMRVJfRElTCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMV9TRUxfVl9ZX1NDQUxFUl9FTkEJMHgwMDA4CisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AxX1NFTF9WX1BQX1lfU0NBTEVSX0RJUwkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDFfU0VMX1ZfUFBfWV9TQ0FMRVJfRU5BCTB4MDAxMAorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMV9TRUxfSVBfU0VMX0NCQ1JfU1RBTkRBUkQJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AxX1NFTF9JUF9TRUxfQ0JDUl9DQVNDQURFRAkweDAwMjAKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDFfU0VMX0hfQ0JDUl9TQ0FMRVJfRElTCQkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDFfU0VMX0hfQ0JDUl9TQ0FMRVJfRU5BCQkweDAwNDAKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDFfU0VMX1ZfQ0JDUl9TQ0FMRVJfRElTCQkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDFfU0VMX1ZfQ0JDUl9TQ0FMRVJfRU5BCQkweDAwODAKKworI2RlZmluZQlWRkVfQ01EX09QMV9QUF9ZX1NDQUxFUl9DRkdfUEFSVDFfRE9OVF9MT0FEX0NPRUZGUwkweDgwMDAwMDAwCisjZGVmaW5lCVZGRV9DTURfT1AxX1BQX1lfU0NBTEVSX0NGR19QQVJUMV9MT0FEX0NPRUZGUwkweDgwMDAwMDAwCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAlzY2FsZV9vcDFfc2VsOworCXVuc2lnbmVkIGludAl5X3NjYWxlcl9jZmdfcGFydDE7CisJdW5zaWduZWQgaW50CXlfc2NhbGVyX2NmZ19wYXJ0MjsKKwl1bnNpZ25lZCBpbnQJY2Jjcl9zY2FsZXJfY2ZnX3BhcnQxOworCXVuc2lnbmVkIGludAljYmNyX3NjYWxlcl9jZmdfcGFydDI7CisJdW5zaWduZWQgaW50CWNiY3Jfc2NhbGVyX2NmZ19wYXJ0MzsKKwl1bnNpZ25lZCBpbnQJcHBfeV9zY2FsZXJfY2ZnX3BhcnQxOworCXVuc2lnbmVkIGludAlwcF95X3NjYWxlcl9jZmdfcGFydDI7CisJdW5zaWduZWQgaW50CXlfc2NhbGVyX3ZfY29lZmZfYmFua19wYXJ0MVsxNl07CisJdW5zaWduZWQgaW50CXlfc2NhbGVyX3ZfY29lZmZfYmFua19wYXJ0MlsxNl07CisJdW5zaWduZWQgaW50CXlfc2NhbGVyX2hfY29lZmZfYmFua19wYXJ0MVsxNl07CisJdW5zaWduZWQgaW50CXlfc2NhbGVyX2hfY29lZmZfYmFua19wYXJ0MlsxNl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfc2NhbGVfb3AxX2NmZzsKKworCisvKgorICogQ29tbWFuZCB0byBwcm9ncmFtIHNjYWxlciBmb3Igb3AyCisgKi8KKworI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMl9DRkcJCTB4MDAwMQorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMl9DRkdfTEVOCVwKKwlzaXplb2YodmZlX2NtZF9zY2FsZV9vcDJfY2ZnKQorCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AyX1NFTF9JUF9TRUxfWV9TVEFOREFSRAkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDJfU0VMX0lQX1NFTF9ZX0NBU0NBREVECTB4MDAwMQorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMl9TRUxfSF9ZX1NDQUxFUl9ESVMJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AyX1NFTF9IX1lfU0NBTEVSX0VOQQkweDAwMDIKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDJfU0VMX0hfUFBfWV9TQ0FMRVJfRElTCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMl9TRUxfSF9QUF9ZX1NDQUxFUl9FTkEJMHgwMDA0CisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AyX1NFTF9WX1lfU0NBTEVSX0RJUwkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDJfU0VMX1ZfWV9TQ0FMRVJfRU5BCTB4MDAwOAorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMl9TRUxfVl9QUF9ZX1NDQUxFUl9ESVMJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AyX1NFTF9WX1BQX1lfU0NBTEVSX0VOQQkweDAwMTAKKyNkZWZpbmUJVkZFX0NNRF9TQ0FMRV9PUDJfU0VMX0lQX1NFTF9DQkNSX1NUQU5EQVJECTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1NDQUxFX09QMl9TRUxfSVBfU0VMX0NCQ1JfQ0FTQ0FERUQJMHgwMDIwCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AyX1NFTF9IX0NCQ1JfU0NBTEVSX0RJUwkJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AyX1NFTF9IX0NCQ1JfU0NBTEVSX0VOQQkJMHgwMDQwCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AyX1NFTF9WX0NCQ1JfU0NBTEVSX0RJUwkJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfU0NBTEVfT1AyX1NFTF9WX0NCQ1JfU0NBTEVSX0VOQQkJMHgwMDgwCisKKyNkZWZpbmUJVkZFX0NNRF9PUDJfUFBfWV9TQ0FMRVJfQ0ZHX1BBUlQxX0RPTlRfTE9BRF9DT0VGRlMJMHg4MDAwMDAwMAorI2RlZmluZQlWRkVfQ01EX09QMl9QUF9ZX1NDQUxFUl9DRkdfUEFSVDFfTE9BRF9DT0VGRlMJCTB4ODAwMDAwMDAKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CXNjYWxlX29wMl9zZWw7CisJdW5zaWduZWQgaW50CXlfc2NhbGVyX2NmZ19wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJeV9zY2FsZXJfY2ZnX3BhcnQyOworCXVuc2lnbmVkIGludAljYmNyX3NjYWxlcl9jZmdfcGFydDE7CisJdW5zaWduZWQgaW50CWNiY3Jfc2NhbGVyX2NmZ19wYXJ0MjsKKwl1bnNpZ25lZCBpbnQJY2Jjcl9zY2FsZXJfY2ZnX3BhcnQzOworCXVuc2lnbmVkIGludAlwcF95X3NjYWxlcl9jZmdfcGFydDE7CisJdW5zaWduZWQgaW50CXBwX3lfc2NhbGVyX2NmZ19wYXJ0MjsKKwl1bnNpZ25lZCBpbnQJeV9zY2FsZXJfdl9jb2VmZl9iYW5rX3BhcnQxWzE2XTsKKwl1bnNpZ25lZCBpbnQJeV9zY2FsZXJfdl9jb2VmZl9iYW5rX3BhcnQyWzE2XTsKKwl1bnNpZ25lZCBpbnQJeV9zY2FsZXJfaF9jb2VmZl9iYW5rX3BhcnQxWzE2XTsKKwl1bnNpZ25lZCBpbnQJeV9zY2FsZXJfaF9jb2VmZl9iYW5rX3BhcnQyWzE2XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9zY2FsZV9vcDJfY2ZnOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbW1hbmRzIHRocm91Z2ggdmZlQ29tbWFuZFRhYmxlUXVldWUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIENvbW1hbmQgdG8gcHJvZ3JhbSB0aGUgQVhJIGlwIHBhdGhzCisgKi8KKworI2RlZmluZQlWRkVfQ01EX0FYSV9JUF9DRkcJCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0FYSV9JUF9DRkdfTEVOCQlzaXplb2YodmZlX2NtZF9heGlfaXBfY2ZnKQorCisjZGVmaW5lCVZGRV9DTURfSVBfU0VMX0lQX0ZPUk1BVF84CTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0lQX1NFTF9JUF9GT1JNQVRfMTAJMHgwMDAxCisjZGVmaW5lCVZGRV9DTURfSVBfU0VMX0lQX0ZPUk1BVF8xMgkweDAwMDIKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CWlwX3NlbDsKKwl1bnNpZ25lZCBpbnQJaXBfY2ZnX3BhcnQxOworCXVuc2lnbmVkIGludAlpcF9jZmdfcGFydDI7CisJdW5zaWduZWQgaW50CWlwX3VucGFja19jZmdfcGFydFs2XTsKKwl1bnNpZ25lZCBpbnQJaXBfYnVmX2FkZHJbOF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSB2ZmVfY21kX2F4aV9pcF9jZmc7CisKKworLyoKKyAqIENvbW1hbmQgdG8gcHJvZ3JhbSBheGkgb3AgcGF0aHMKKyAqLworCisjZGVmaW5lCVZGRV9DTURfQVhJX09QX0NGRwkweDAwMDEKKyNkZWZpbmUJVkZFX0NNRF9BWElfT1BfQ0ZHX0xFTglzaXplb2YodmZlX2NtZF9heGlfb3BfY2ZnKQorCisjZGVmaW5lCVZGRV9DTURfT1BfU0VMX09QMQkJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfT1BfU0VMX09QMgkJMHgwMDAxCisjZGVmaW5lCVZGRV9DTURfT1BfU0VMX09QMV9PUDIJCTB4MDAwMgorI2RlZmluZQlWRkVfQ01EX09QX1NFTF9DVE9BCQkweDAwMDMKKyNkZWZpbmUJVkZFX0NNRF9PUF9TRUxfQ1RPQV9PUDEJCTB4MDAwNAorI2RlZmluZQlWRkVfQ01EX09QX1NFTF9DVE9BX09QMgkJMHgwMDA1CisjZGVmaW5lCVZGRV9DTURfT1BfU0VMX09QX0ZPUk1BVF84CTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX09QX1NFTF9PUF9GT1JNQVRfMTAJMHgwMDA4CisjZGVmaW5lCVZGRV9DTURfT1BfU0VMX09QX0ZPUk1BVF8xMgkweDAwMTAKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJb3Bfc2VsOworCXVuc2lnbmVkIGludAlvcDFfeV9jZmdfcGFydDE7CisJdW5zaWduZWQgaW50CW9wMV95X2NmZ19wYXJ0MjsKKwl1bnNpZ25lZCBpbnQJb3AxX2NiY3JfY2ZnX3BhcnQxOworCXVuc2lnbmVkIGludAlvcDFfY2Jjcl9jZmdfcGFydDI7CisJdW5zaWduZWQgaW50CW9wMl95X2NmZ19wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJb3AyX3lfY2ZnX3BhcnQyOworCXVuc2lnbmVkIGludAlvcDJfY2Jjcl9jZmdfcGFydDE7CisJdW5zaWduZWQgaW50CW9wMl9jYmNyX2NmZ19wYXJ0MjsKKwl1bnNpZ25lZCBpbnQJb3AxX2J1ZjFfYWRkclsxNl07CisJdW5zaWduZWQgaW50CW9wMl9idWYxX2FkZHJbMTZdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX2F4aV9vcF9jZmc7CisKKworCisKKy8qCisgKiBDb21tYW5kIHRvIHByb2dyYW0gdGhlIHJvbGwgb2ZmIGNvcnJlY3Rpb24gbW9kdWxlCisgKi8KKworI2RlZmluZQlWRkVfQ01EX1JPTExPRkZfQ0ZHCTB4MDAwMgorI2RlZmluZQlWRkVfQ01EX1JPTExPRkZfQ0ZHX0xFTglcCisJc2l6ZW9mKHZmZV9jbWRfcm9sbG9mZl9jZmcpCisKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CWNvcnJlY3Rpb25fb3B0X2NlbnRlcl9wb3M7CisJdW5zaWduZWQgaW50CXJhZGl1c19zcXVhcmVfZW50cnlbMzJdOworCXVuc2lnbmVkIGludAlyZWRfdGFibGVfZW50cnlbMzJdOworCXVuc2lnbmVkIGludAlncmVlbl90YWJsZV9lbnRyeVszMl07CisJdW5zaWduZWQgaW50CWJsdWVfdGFibGVfZW50cnlbMzJdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX3JvbGxvZmZfY2ZnOworCisvKgorICogQ29tbWFuZCB0byBwcm9ncmFtIFJHQiBnYW1tYSB0YWJsZQorICovCisKKyNkZWZpbmUJVkZFX0NNRF9SR0JfR0FNTUFfQ0ZHCQkweDAwMDMKKyNkZWZpbmUJVkZFX0NNRF9SR0JfR0FNTUFfQ0ZHX0xFTglcCisJc2l6ZW9mKHZmZV9jbWRfcmdiX2dhbW1hX2NmZykKKworI2RlZmluZQlWRkVfQ01EX1JHQl9HQU1NQV9TRUxfTElORUFSCQkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9SR0JfR0FNTUFfU0VMX1BXX0xJTkVBUgkJMHgwMDAxCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJcmdiX2dhbW1hX3NlbDsKKwl1bnNpZ25lZCBpbnQJcmdiX2dhbW1hX2VudHJ5WzI1Nl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfcmdiX2dhbW1hX2NmZzsKKworCisvKgorICogQ29tbWFuZCB0byBwcm9ncmFtIGx1bWEgZ2FtbWEgdGFibGUgZm9yIHRoZSBub2lzZSByZWR1Y3Rpb24gcGF0aAorICovCisKKyNkZWZpbmUJVkZFX0NNRF9ZX0dBTU1BX0NGRwkJMHgwMDA0CisjZGVmaW5lCVZGRV9DTURfWV9HQU1NQV9DRkdfTEVOCQlcCisJc2l6ZW9mKHZmZV9jbWRfeV9nYW1tYV9jZmcpCisKKyNkZWZpbmUJVkZFX0NNRF9ZX0dBTU1BX1NFTF9MSU5FQVIJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfWV9HQU1NQV9TRUxfUFdfTElORUFSCTB4MDAwMQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJeV9nYW1tYV9zZWw7CisJdW5zaWduZWQgaW50CXlfZ2FtbWFfZW50cnlbMjU2XTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF95X2dhbW1hX2NmZzsKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIENvbW1hbmRzIHRocm91Z2ggdmZlQ29tbWFuZFF1ZXVlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBDb21tYW5kIHRvIHJlc2V0IHRoZSBWRkUgdG8gYSBrbm93biBnb29kIHN0YXRlLkFsbCBwcmV2aW91c2x5IHByb2dyYW1tZWQKKyAqIFBhcmFtcyB3aWxsIGJlIGxvc3QKKyAqLworCisKKyNkZWZpbmUJVkZFX0NNRF9SRVNFVAkJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfUkVTRVRfTEVOCXNpemVvZih2ZmVfY21kX3Jlc2V0KQorCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAljbWRfaWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfcmVzZXQ7CisKKworLyoKKyAqIENvbW1hbmQgdG8gc3RhcnQgVkZFIHByb2Nlc3NpbmcgYmFzZWQgb24gdGhlIGNvbmZpZyBwYXJhbXMKKyAqLworCisKKyNkZWZpbmUJVkZFX0NNRF9TVEFSVAkJMHgwMDAxCisjZGVmaW5lCVZGRV9DTURfU1RBUlRfTEVOCXNpemVvZih2ZmVfY21kX3N0YXJ0KQorCisjZGVmaW5lCVZGRV9DTURfU1RBUlRVUF9QQVJBTVNfU1JDX0NBTUlGCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1NUQVJUVVBfUEFSQU1TX1NSQ19BWEkJCTB4MDAwMQorI2RlZmluZQlWRkVfQ01EX1NUQVJUVVBfUEFSQU1TX01PREVfQ09OVElOVU9VUwkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9TVEFSVFVQX1BBUkFNU19NT0RFX1NOQVBTSE9UCTB4MDAwMgorCisjZGVmaW5lCVZGRV9DTURfSU1BR0VfUExfQkxBQ0tfTFZMX0NPUlJfRElTCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0lNQUdFX1BMX0JMQUNLX0xWTF9DT1JSX0VOQQkweDAwMDEKKyNkZWZpbmUJVkZFX0NNRF9JTUFHRV9QTF9ST0xMT0ZGX0NPUlJfRElTCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0lNQUdFX1BMX1JPTExPRkZfQ09SUl9FTkEJMHgwMDAyCisjZGVmaW5lCVZGRV9DTURfSU1BR0VfUExfV0hJVEVfQkFMX0RJUwkJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfSU1BR0VfUExfV0hJVEVfQkFMX0VOQQkJMHgwMDA0CisjZGVmaW5lCVZGRV9DTURfSU1BR0VfUExfUkdCX0dBTU1BX0RJUwkJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfSU1BR0VfUExfUkdCX0dBTU1BX0VOQQkJMHgwMDA4CisjZGVmaW5lCVZGRV9DTURfSU1BR0VfUExfTFVNQV9OT0lTRV9SRURfUEFUSF9ESVMJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfSU1BR0VfUExfTFVNQV9OT0lTRV9SRURfUEFUSF9FTkEJMHgwMDEwCisjZGVmaW5lCVZGRV9DTURfSU1BR0VfUExfQURQX0ZJTFRFUl9ESVMJCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0lNQUdFX1BMX0FEUF9GSUxURVJfRU5BCQkweDAwMjAKKyNkZWZpbmUJVkZFX0NNRF9JTUFHRV9QTF9DSFJPTUFfU0FNUF9ESVMJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfSU1BR0VfUExfQ0hST01BX1NBTVBfRU5BCTB4MDA0MAorCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAlzdGFydHVwX3BhcmFtczsKKwl1bnNpZ25lZCBpbnQJaW1hZ2VfcGlwZWxpbmU7CisJdW5zaWduZWQgaW50CWZyYW1lX2RpbWVuc2lvbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9zdGFydDsKKworCisvKgorICogQ29tbWFuZCB0byBoYWx0IGFsbCBwcm9jZXNzaW5nCisgKi8KKworI2RlZmluZQlWRkVfQ01EX1NUT1AJCTB4MDAwMgorI2RlZmluZQlWRkVfQ01EX1NUT1BfTEVOCXNpemVvZih2ZmVfY21kX3N0b3ApCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAljbWRfaWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfc3RvcDsKKworCisvKgorICogQ29tbWFuZCB0byBjb21taXQgdGhlIHBhcmFtcyB0aGF0IGhhdmUgYmVlbiBwcm9ncmFtbWVkIHRvIHRha2UKKyAqIGVmZmVjdCBvbiB0aGUgbmV4dCBmcmFtZQorICovCisKKyNkZWZpbmUJVkZFX0NNRF9VUERBVEUJCTB4MDAwMworI2RlZmluZQlWRkVfQ01EX1VQREFURV9MRU4Jc2l6ZW9mKHZmZV9jbWRfdXBkYXRlKQorCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydAljbWRfaWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfdXBkYXRlOworCisKKy8qCisgKiBDb21tYW5kIHRvIHByb2dyYW0gQ0FNSUYgbW9kdWxlCisgKi8KKworI2RlZmluZQlWRkVfQ01EX0NBTUlGX0NGRwkweDAwMDQKKyNkZWZpbmUJVkZFX0NNRF9DQU1JRl9DRkdfTEVOCXNpemVvZih2ZmVfY21kX2NhbWlmX2NmZykKKworI2RlZmluZQlWRkVfQ01EX0NGR19WU1lOQ19TWU5DX0VER0VfSElHSAkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9DRkdfVlNZTkNfU1lOQ19FREdFX0xPVwkJMHgwMDAyCisjZGVmaW5lCVZGRV9DTURfQ0ZHX0hTWU5DX1NZTkNfRURHRV9ISUdICTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0NGR19IU1lOQ19TWU5DX0VER0VfTE9XCQkweDAwMDQKKyNkZWZpbmUJVkZFX0NNRF9DRkdfU1lOQ19NT0RFX0FQUwkJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfQ0ZHX1NZTkNfTU9ERV9FRlMJCTBYMDAwOAorI2RlZmluZQlWRkVfQ01EX0NGR19TWU5DX01PREVfRUxTCQkweDAwMTAKKyNkZWZpbmUJVkZFX0NNRF9DRkdfU1lOQ19NT0RFX1JWRAkJMHgwMDE4CisjZGVmaW5lCVZGRV9DTURfQ0ZHX1ZGRV9TVUJTQU1QX0VOX0RJUwkJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfQ0ZHX1ZGRV9TVUJTQU1QX0VOX0VOQQkJMHgwMDIwCisjZGVmaW5lCVZGRV9DTURfQ0ZHX0JVU19TVUJTQU1QX0VOX0RJUwkJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfQ0ZHX0JVU19TVUJTQU1QX0VOX0VOQQkJMHgwMDgwCisjZGVmaW5lCVZGRV9DTURfQ0ZHX0lSUV9TVUJTQU1QX0VOX0RJUwkJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfQ0ZHX0lSUV9TVUJTQU1QX0VOX0VOQQkJMHgwODAwCisKKyNkZWZpbmUJVkZFX0NNRF9TVUJTQU1QMl9DRkdfUElYRUxfU0tJUF8xNgkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9TVUJTQU1QMl9DRkdfUElYRUxfU0tJUF8xMgkweDAwMTAKKworI2RlZmluZQlWRkVfQ01EX0VQT0NIX0lSUV8xX0RJUwkJCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0VQT0NIX0lSUV8xX0VOQQkJCTB4NDAwMAorI2RlZmluZQlWRkVfQ01EX0VQT0NIX0lSUV8yX0RJUwkJCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0VQT0NIX0lSUV8yX0VOQQkJCTB4ODAwMAorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJY2ZnOworCXVuc2lnbmVkIGludAllZnNfY2ZnOworCXVuc2lnbmVkIGludAlmcmFtZV9jZmc7CisJdW5zaWduZWQgaW50CXdpbmRvd193aWR0aF9jZmc7CisJdW5zaWduZWQgaW50CXdpbmRvd19oZWlnaHRfY2ZnOworCXVuc2lnbmVkIGludAlzdWJzYW1wMV9jZmc7CisJdW5zaWduZWQgaW50CXN1YnNhbXAyX2NmZzsKKwl1bnNpZ25lZCBpbnQJZXBvY2hfaXJxOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX2NhbWlmX2NmZzsKKworCisKKy8qCisgKiBDb21tYW5kIHRvIHByb2dyYW0gdGhlIGJsYWNrIGxldmVsIG1vZHVsZQorICovCisKKyNkZWZpbmUJVkZFX0NNRF9CTEFDS19MVkxfQ0ZHCQkweDAwMDUKKyNkZWZpbmUJVkZFX0NNRF9CTEFDS19MVkxfQ0ZHX0xFTglzaXplb2YodmZlX2NtZF9ibGFja19sdmxfY2ZnKQorCisjZGVmaW5lCVZGRV9DTURfQkxfU0VMX01BTlVBTAkJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfQkxfU0VMX0FVVE8JCTB4MDAwMQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJYmxhY2tfbHZsX3NlbDsKKwl1bnNpZ25lZCBpbnQJY2ZnX3BhcnRbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfYmxhY2tfbHZsX2NmZzsKKworCisvKgorICogQ29tbWFuZCB0byBwcm9ncmFtIHRoZSBhY3RpdmUgcmVnaW9uIGJ5IGNyb3BwaW5nIHRoZSByZWdpb24gb2YgaW50ZXJlc3QKKyAqLworCisjZGVmaW5lCVZGRV9DTURfQUNUSVZFX1JFR0lPTl9DRkcJMHgwMDA2CisjZGVmaW5lCVZGRV9DTURfQUNUSVZFX1JFR0lPTl9DRkdfTEVOCVwKKwlzaXplb2YodmZlX2NtZF9hY3RpdmVfcmVnaW9uX2NmZykKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJY2ZnX3BhcnQxOworCXVuc2lnbmVkIGludAljZmdfcGFydDI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfYWN0aXZlX3JlZ2lvbl9jZmc7CisKKworCisvKgorICogQ29tbWFuZCB0byBwcm9ncmFtIHRoZSBkZWZlY3RpdmUgcGl4ZWwgY29ycmVjdGlvbihEUEMpICwKKyAqIGFkYXB0aXZlIGJheWVyIGZpbHRlciAoQUJGKSBhbmQgZGVtb3NhaWMgbW9kdWxlcworICovCisKKyNkZWZpbmUJVkZFX0NNRF9ERU1PU0FJQ19DRkcJCTB4MDAwNworI2RlZmluZQlWRkVfQ01EX0RFTU9TQUlDX0NGR19MRU4Jc2l6ZW9mKHZmZV9jbWRfZGVtb3NhaWNfY2ZnKQorCisjZGVmaW5lCVZGRV9DTURfREVNT1NBSUNfUEFSVDFfQUJGX0VOX0RJUwkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9ERU1PU0FJQ19QQVJUMV9BQkZfRU5fRU5BCTB4MDAwMQorI2RlZmluZQlWRkVfQ01EX0RFTU9TQUlDX1BBUlQxX0RQQ19FTl9ESVMJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfREVNT1NBSUNfUEFSVDFfRFBDX0VOX0VOQQkweDAwMDIKKyNkZWZpbmUJVkZFX0NNRF9ERU1PU0FJQ19QQVJUMV9GT1JDRV9BQkZfT0ZGCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0RFTU9TQUlDX1BBUlQxX0ZPUkNFX0FCRl9PTgkweDAwMDQKKyNkZWZpbmUJVkZFX0NNRF9ERU1PU0FJQ19QQVJUMV9TTE9QRV9TSElGVF8xCTB4MDAwMDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9ERU1PU0FJQ19QQVJUMV9TTE9QRV9TSElGVF8yCTB4MTAwMDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9ERU1PU0FJQ19QQVJUMV9TTE9QRV9TSElGVF80CTB4MjAwMDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9ERU1PU0FJQ19QQVJUMV9TTE9QRV9TSElGVF84CTB4MzAwMDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9ERU1PU0FJQ19QQVJUMV9TTE9QRV9TSElGVF8xXzIJMHg1MDAwMDAwMAorI2RlZmluZQlWRkVfQ01EX0RFTU9TQUlDX1BBUlQxX1NMT1BFX1NISUZUXzFfNAkweDYwMDAwMDAwCisjZGVmaW5lCVZGRV9DTURfREVNT1NBSUNfUEFSVDFfU0xPUEVfU0hJRlRfMV84CTB4NzAwMDAwMDAKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CWRlbW9zYWljX3BhcnQxOworCXVuc2lnbmVkIGludAlkZW1vc2FpY19wYXJ0MjsKKwl1bnNpZ25lZCBpbnQJZGVtb3NhaWNfcGFydDM7CisJdW5zaWduZWQgaW50CWRlbW9zYWljX3BhcnQ0OworCXVuc2lnbmVkIGludAlkZW1vc2FpY19wYXJ0NTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9kZW1vc2FpY19jZmc7CisKKworLyoKKyAqIENvbW1hbmQgdG8gcHJvZ3JhbSB0aGUgaXAgZm9ybWF0CisgKi8KKworI2RlZmluZQlWRkVfQ01EX0lQX0ZPUk1BVF9DRkcJCTB4MDAwOAorI2RlZmluZQlWRkVfQ01EX0lQX0ZPUk1BVF9DRkdfTEVOCVwKKwlzaXplb2YodmZlX2NtZF9pcF9mb3JtYXRfY2ZnKQorCisjZGVmaW5lCVZGRV9DTURfSVBfRk9STUFUX1NFTF9SR1JHCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0lQX0ZPUk1BVF9TRUxfR1JHUgkweDAwMDEKKyNkZWZpbmUJVkZFX0NNRF9JUF9GT1JNQVRfU0VMX0JHQkcJMHgwMDAyCisjZGVmaW5lCVZGRV9DTURfSVBfRk9STUFUX1NFTF9HQkdCCTB4MDAwMworI2RlZmluZQlWRkVfQ01EX0lQX0ZPUk1BVF9TRUxfWUNCWUNSCTB4MDAwNAorI2RlZmluZQlWRkVfQ01EX0lQX0ZPUk1BVF9TRUxfWUNSWUNCCTB4MDAwNQorI2RlZmluZQlWRkVfQ01EX0lQX0ZPUk1BVF9TRUxfQ0JZQ1JZCTB4MDAwNgorI2RlZmluZQlWRkVfQ01EX0lQX0ZPUk1BVF9TRUxfQ1JZQ0JZCTB4MDAwNworI2RlZmluZQlWRkVfQ01EX0lQX0ZPUk1BVF9TRUxfTk9fQ0hST01BCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0lQX0ZPUk1BVF9TRUxfQ0hST01BCTB4MDAwOAorCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAlpcF9mb3JtYXRfc2VsOworCXVuc2lnbmVkIGludAliYWxhbmNlX2dhaW5zX3BhcnQxOworCXVuc2lnbmVkIGludAliYWxhbmNlX2dhaW5zX3BhcnQyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX2lwX2Zvcm1hdF9jZmc7CisKKworCisvKgorICogQ29tbWFuZCB0byBwcm9ncmFtIG1heCBhbmQgbWluIGFsbG93ZWQgb3AgdmFsdWVzCisgKi8KKworI2RlZmluZQlWRkVfQ01EX09QX0NMQU1QX0NGRwkJMHgwMDA5CisjZGVmaW5lCVZGRV9DTURfT1BfQ0xBTVBfQ0ZHX0xFTglcCisJc2l6ZW9mKHZmZV9jbWRfb3BfY2xhbXBfY2ZnKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJb3BfY2xhbXBfbWF4OworCXVuc2lnbmVkIGludAlvcF9jbGFtcF9taW47Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfb3BfY2xhbXBfY2ZnOworCisKKy8qCisgKiBDb21tYW5kIHRvIHByb2dyYW0gY2hyb21hIHN1YiBzYW1wbGUgbW9kdWxlCisgKi8KKworI2RlZmluZQlWRkVfQ01EX0NIUk9NQV9TVUJTQU1QTEVfQ0ZHCQkweDAwMEEKKyNkZWZpbmUJVkZFX0NNRF9DSFJPTUFfU1VCU0FNUExFX0NGR19MRU4JXAorCXNpemVvZih2ZmVfY21kX2Nocm9tYV9zdWJzYW1wbGVfY2ZnKQorCisjZGVmaW5lCVZGRV9DTURfQ0hST01BX1NVQlNBTVBfU0VMX0hfSU5URVJFU1RJQUxfU0FNUFMJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfQ0hST01BX1NVQlNBTVBfU0VMX0hfQ09TSVRFRF9TQU1QUwkweDAwMDEKKyNkZWZpbmUJVkZFX0NNRF9DSFJPTUFfU1VCU0FNUF9TRUxfVl9JTlRFUkVTVElBTF9TQU1QUwkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9DSFJPTUFfU1VCU0FNUF9TRUxfVl9DT1NJVEVEX1NBTVBTCTB4MDAwMgorI2RlZmluZQlWRkVfQ01EX0NIUk9NQV9TVUJTQU1QX1NFTF9IX1NVQlNBTVBfRElTCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0NIUk9NQV9TVUJTQU1QX1NFTF9IX1NVQlNBTVBfRU5BCTB4MDAwNAorI2RlZmluZQlWRkVfQ01EX0NIUk9NQV9TVUJTQU1QX1NFTF9WX1NVQlNBTVBfRElTCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0NIUk9NQV9TVUJTQU1QX1NFTF9WX1NVQlNBTVBfRU5BCTB4MDAwOAorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX3N1YnNhbXBfc2VsOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX2Nocm9tYV9zdWJzYW1wbGVfY2ZnOworCisKKy8qCisgKiBDb21tYW5kIHRvIHByb2dyYW0gdGhlIHdoaXRlIGJhbGFuY2UgbW9kdWxlCisgKi8KKworI2RlZmluZQlWRkVfQ01EX1dISVRFX0JBTEFOQ0VfQ0ZHCTB4MDAwQgorI2RlZmluZQlWRkVfQ01EX1dISVRFX0JBTEFOQ0VfQ0ZHX0xFTglcCisJc2l6ZW9mKHZmZV9jbWRfd2hpdGVfYmFsYW5jZV9jZmcpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAl3aGl0ZV9iYWxhbmNlX2dhaW5zOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX3doaXRlX2JhbGFuY2VfY2ZnOworCisKKy8qCisgKiBDb21tYW5kIHRvIHByb2dyYW0gdGhlIGNvbG9yIHByb2Nlc3NpbmcgbW9kdWxlCisgKi8KKworI2RlZmluZQlWRkVfQ01EX0NPTE9SX1BST0NFU1NfQ0ZHCTB4MDAwQworI2RlZmluZQlWRkVfQ01EX0NPTE9SX1BST0NFU1NfQ0ZHX0xFTglcCisJc2l6ZW9mKHZmZV9jbWRfY29sb3JfcHJvY2Vzc19jZmcpCisKKyNkZWZpbmUJVkZFX0NNRF9DT0xPUl9DT1JSRV9QQVJUN19RN19GQUNUT1JTCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0NPTE9SX0NPUlJFX1BBUlQ3X1E4X0ZBQ1RPUlMJMHgwMDAxCisjZGVmaW5lCVZGRV9DTURfQ09MT1JfQ09SUkVfUEFSVDdfUTlfRkFDVE9SUwkweDAwMDIKKyNkZWZpbmUJVkZFX0NNRF9DT0xPUl9DT1JSRV9QQVJUN19RMTBfRkFDVE9SUwkweDAwMDMKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CWNvbG9yX2NvcnJlY3Rpb25fcGFydDE7CisJdW5zaWduZWQgaW50CWNvbG9yX2NvcnJlY3Rpb25fcGFydDI7CisJdW5zaWduZWQgaW50CWNvbG9yX2NvcnJlY3Rpb25fcGFydDM7CisJdW5zaWduZWQgaW50CWNvbG9yX2NvcnJlY3Rpb25fcGFydDQ7CisJdW5zaWduZWQgaW50CWNvbG9yX2NvcnJlY3Rpb25fcGFydDU7CisJdW5zaWduZWQgaW50CWNvbG9yX2NvcnJlY3Rpb25fcGFydDY7CisJdW5zaWduZWQgaW50CWNvbG9yX2NvcnJlY3Rpb25fcGFydDc7CisJdW5zaWduZWQgaW50CWNocm9tYV9lbmhhbmNlX3BhcnQxOworCXVuc2lnbmVkIGludAljaHJvbWFfZW5oYW5jZV9wYXJ0MjsKKwl1bnNpZ25lZCBpbnQJY2hyb21hX2VuaGFuY2VfcGFydDM7CisJdW5zaWduZWQgaW50CWNocm9tYV9lbmhhbmNlX3BhcnQ0OworCXVuc2lnbmVkIGludAljaHJvbWFfZW5oYW5jZV9wYXJ0NTsKKwl1bnNpZ25lZCBpbnQJbHVtYV9jYWxjX3BhcnQxOworCXVuc2lnbmVkIGludAlsdW1hX2NhbGNfcGFydDI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfY29sb3JfcHJvY2Vzc19jZmc7CisKKworLyoKKyAqIENvbW1hbmQgdG8gcHJvZ3JhbSBhZGFwdGl2ZSBmaWx0ZXIgbW9kdWxlCisgKi8KKworI2RlZmluZQlWRkVfQ01EX0FEUF9GSUxURVJfQ0ZHCQkweDAwMEQKKyNkZWZpbmUJVkZFX0NNRF9BRFBfRklMVEVSX0NGR19MRU4JXAorCXNpemVvZih2ZmVfY21kX2FkcF9maWx0ZXJfY2ZnKQorCisjZGVmaW5lCVZGRV9DTURfQVNGX0NGR19QQVJUX1NNT09USF9GSUxURVJfRElTCQkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9BU0ZfQ0ZHX1BBUlRfU01PT1RIX0ZJTFRFUl9FTkEJCTB4MDAwMQorI2RlZmluZQlWRkVfQ01EX0FTRl9DRkdfUEFSVF9OT19TSEFSUF9NT0RFCQkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9BU0ZfQ0ZHX1BBUlRfU0lOR0xFX0ZJTFRFUgkJMHgwMDAyCisjZGVmaW5lCVZGRV9DTURfQVNGX0NGR19QQVJUX0RVQUxfRklMVEVSCQkweDAwMDQKKyNkZWZpbmUJVkZFX0NNRF9BU0ZfQ0ZHX1BBUlRfU0hBUlBfTU9ERQkJCTB4MDAwNworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJYXNmX2NmZ19wYXJ0WzddOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX2FkcF9maWx0ZXJfY2ZnOworCisKKy8qCisgKiBDb21tYW5kIHRvIHByb2dyYW0gZm9yIGZyYW1lIHNraXAgcGF0dGVybiBmb3Igb3AxIGFuZCBvcDIKKyAqLworCisjZGVmaW5lCVZGRV9DTURfRlJBTUVfU0tJUF9DRkcJCTB4MDAwRQorI2RlZmluZQlWRkVfQ01EX0ZSQU1FX1NLSVBfQ0ZHX0xFTglcCisJc2l6ZW9mKHZmZV9jbWRfZnJhbWVfc2tpcF9jZmcpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAlmcmFtZV9za2lwX3BhdHRlcm5fb3AxOworCXVuc2lnbmVkIGludAlmcmFtZV9za2lwX3BhdHRlcm5fb3AyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX2ZyYW1lX3NraXBfY2ZnOworCisKKy8qCisgKiBDb21tYW5kIHRvIHByb2dyYW0gZmllbGQtb2YtdmlldyBjcm9wIGZvciBkaWdpdGFsIHpvb20KKyAqLworCisjZGVmaW5lCVZGRV9DTURfRk9WX0NST1AJMHgwMDBGCisjZGVmaW5lCVZGRV9DTURfRk9WX0NST1BfTEVOCXNpemVvZih2ZmVfY21kX2Zvdl9jcm9wKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJZm92X2Nyb3BfcGFydDE7CisJdW5zaWduZWQgaW50CWZvdl9jcm9wX3BhcnQyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX2Zvdl9jcm9wOworCisKKworLyoKKyAqIENvbW1hbmQgdG8gcHJvZ3JhbSBhdXRvIGZvY3VzKEFGKSBzdGF0aXN0aWNzIG1vZHVsZQorICovCisKKyNkZWZpbmUJVkZFX0NNRF9TVEFUU19BVVRPRk9DVVNfQ0ZHCTB4MDAxMAorI2RlZmluZQlWRkVfQ01EX1NUQVRTX0FVVE9GT0NVU19DRkdfTEVOCVwKKwlzaXplb2YodmZlX2NtZF9zdGF0c19hdXRvZm9jdXNfY2ZnKQorCisjZGVmaW5lCVZGRV9DTURfQUZfU1RBVFNfU0VMX1NUQVRTX0RJUwkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9BRl9TVEFUU19TRUxfU1RBVFNfRU5BCTB4MDAwMQorI2RlZmluZQlWRkVfQ01EX0FGX1NUQVRTX1NFTF9QUklfRklYRUQJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfQUZfU1RBVFNfU0VMX1BSSV9WQVIJMHgwMDAyCisjZGVmaW5lCVZGRV9DTURfQUZfU1RBVFNfQ0ZHX1BBUlRfTUVUUklDX1NVTQkweDAwMDAwMDAwCisjZGVmaW5lCVZGRV9DTURfQUZfU1RBVFNfQ0ZHX1BBUlRfTUVUUklDX01BWAkweDAwMjAwMDAwCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAlhZl9zdGF0c19zZWw7CisJdW5zaWduZWQgaW50CWFmX3N0YXRzX2NmZ19wYXJ0WzhdOworCXVuc2lnbmVkIGludAlhZl9zdGF0c19vcF9idWZfaGRyOworCXVuc2lnbmVkIGludAlhZl9zdGF0c19vcF9idWZbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfc3RhdHNfYXV0b2ZvY3VzX2NmZzsKKworCisvKgorICogQ29tbWFuZCB0byBwcm9ncmFtIFdoaXRlIGJhbGFuY2Uod2IpIGFuZCBleHBvc3VyZSAoZXhwKQorICogc3RhdGlzdGljcyBtb2R1bGUKKyAqLworCisjZGVmaW5lCVZGRV9DTURfU1RBVFNfV0JfRVhQX0NGRwkweDAwMTEKKyNkZWZpbmUJVkZFX0NNRF9TVEFUU19XQl9FWFBfQ0ZHX0xFTglcCisJc2l6ZW9mKHZmZV9jbWRfc3RhdHNfd2JfZXhwX2NmZykKKworI2RlZmluZQlWRkVfQ01EX1dCX0VYUF9TVEFUU19TRUxfU1RBVFNfRElTCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1dCX0VYUF9TVEFUU19TRUxfU1RBVFNfRU5BCTB4MDAwMQorI2RlZmluZQlWRkVfQ01EX1dCX0VYUF9TVEFUU19TRUxfUFJJX0ZJWEVECTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1dCX0VYUF9TVEFUU19TRUxfUFJJX1ZBUgkweDAwMDIKKworI2RlZmluZQlWRkVfQ01EX1dCX0VYUF9TVEFUU19DRkdfUEFSVDFfRVhQX1JFR184XzgJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfV0JfRVhQX1NUQVRTX0NGR19QQVJUMV9FWFBfUkVHXzE2XzE2CTB4MDAwMQorI2RlZmluZQlWRkVfQ01EX1dCX0VYUF9TVEFUU19DRkdfUEFSVDFfRVhQX1NSRUdfOF84CTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1dCX0VYUF9TVEFUU19DRkdfUEFSVDFfRVhQX1NSRUdfNF80CTB4MDAwMgorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJd2JfZXhwX3N0YXRzX3NlbDsKKwl1bnNpZ25lZCBpbnQJd2JfZXhwX3N0YXRzX2NmZ19wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJd2JfZXhwX3N0YXRzX2NmZ19wYXJ0MjsKKwl1bnNpZ25lZCBpbnQJd2JfZXhwX3N0YXRzX2NmZ19wYXJ0MzsKKwl1bnNpZ25lZCBpbnQJd2JfZXhwX3N0YXRzX2NmZ19wYXJ0NDsKKwl1bnNpZ25lZCBpbnQJd2JfZXhwX3N0YXRzX29wX2J1Zl9oZHI7CisJdW5zaWduZWQgaW50CXdiX2V4cF9zdGF0c19vcF9idWZbM107Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfc3RhdHNfd2JfZXhwX2NmZzsKKworCisvKgorICogQ29tbWFuZCB0byBwcm9ncmFtIGhpc3RvZ3JhbShoZykgc3RhdHMgbW9kdWxlCisgKi8KKworI2RlZmluZQlWRkVfQ01EX1NUQVRTX0hHX0NGRwkJMHgwMDEyCisjZGVmaW5lCVZGRV9DTURfU1RBVFNfSEdfQ0ZHX0xFTglcCisJc2l6ZW9mKHZmZV9jbWRfc3RhdHNfaGdfY2ZnKQorCisjZGVmaW5lCVZGRV9DTURfSEdfU1RBVFNfU0VMX1BSSV9GSVhFRAkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9IR19TVEFUU19TRUxfUFJJX1ZBUgkweDAwMDIKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CWhnX3N0YXRzX3NlbDsKKwl1bnNpZ25lZCBpbnQJaGdfc3RhdHNfY2ZnX3BhcnQxOworCXVuc2lnbmVkIGludAloZ19zdGF0c19jZmdfcGFydDI7CisJdW5zaWduZWQgaW50CWhnX3N0YXRzX29wX2J1Zl9oZHI7CisJdW5zaWduZWQgaW50CWhnX3N0YXRzX29wX2J1ZjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9zdGF0c19oZ19jZmc7CisKKworLyoKKyAqIENvbW1hbmQgdG8gYWNrbm93bGVkZ2UgbGFzdCBNU0dfVkZFX09QMSBtZXNzYWdlCisgKi8KKworI2RlZmluZQlWRkVfQ01EX09QMV9BQ0sJCTB4MDAxMworI2RlZmluZQlWRkVfQ01EX09QMV9BQ0tfTEVOCXNpemVvZih2ZmVfY21kX29wMV9hY2spCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAlvcDFfYnVmX3lfYWRkcjsKKwl1bnNpZ25lZCBpbnQJb3AxX2J1Zl9jYmNyX2FkZHI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfb3AxX2FjazsKKworCisKKy8qCisgKiBDb21tYW5kIHRvIGFja25vd2xlZGdlIGxhc3QgTVNHX1ZGRV9PUDIgbWVzc2FnZQorICovCisKKyNkZWZpbmUJVkZFX0NNRF9PUDJfQUNLCQkweDAwMTQKKyNkZWZpbmUJVkZFX0NNRF9PUDJfQUNLX0xFTglzaXplb2YodmZlX2NtZF9vcDJfYWNrKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJb3AyX2J1Zl95X2FkZHI7CisJdW5zaWduZWQgaW50CW9wMl9idWZfY2Jjcl9hZGRyOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX29wMl9hY2s7CisKKworCisvKgorICogQ29tbWFuZCB0byBhY2tub3dsZWRnZSBNU0dfVkZFX1NUQVRTX0FVVE9GT0NVUyBtc2cKKyAqLworCisjZGVmaW5lCVZGRV9DTURfU1RBVFNfQUZfQUNLCQkweDAwMTUKKyNkZWZpbmUJVkZFX0NNRF9TVEFUU19BRl9BQ0tfTEVOCXNpemVvZih2ZmVfY21kX3N0YXRzX2FmX2FjaykKKworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJYWZfc3RhdHNfb3BfYnVmOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX3N0YXRzX2FmX2FjazsKKworCisvKgorICogQ29tbWFuZCB0byBhY2tub3dsZWRnZSBNU0dfVkZFX1NUQVRTX1dCX0VYUCBtc2cKKyAqLworCisjZGVmaW5lCVZGRV9DTURfU1RBVFNfV0JfRVhQX0FDSwkweDAwMTYKKyNkZWZpbmUJVkZFX0NNRF9TVEFUU19XQl9FWFBfQUNLX0xFTglzaXplb2YodmZlX2NtZF9zdGF0c193Yl9leHBfYWNrKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJd2JfZXhwX3N0YXRzX29wX2J1ZjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9zdGF0c193Yl9leHBfYWNrOworCisKKy8qCisgKiBDb21tYW5kIHRvIGFja25vd2xlZGdlIE1TR19WRkVfRVBPQ0gxIG1lc3NhZ2UKKyAqLworCisjZGVmaW5lCVZGRV9DTURfRVBPQ0gxX0FDSwkweDAwMTcKKyNkZWZpbmUJVkZFX0NNRF9FUE9DSDFfQUNLX0xFTglzaXplb2YodmZlX2NtZF9lcG9jaDFfYWNrKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgc2hvcnQgY21kX2lkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX2Vwb2NoMV9hY2s7CisKKworLyoKKyAqIENvbW1hbmQgdG8gYWNrbm93bGVkZ2UgTVNHX1ZGRV9FUE9DSDIgbWVzc2FnZQorICovCisKKyNkZWZpbmUJVkZFX0NNRF9FUE9DSDJfQUNLCTB4MDAxOAorI2RlZmluZQlWRkVfQ01EX0VQT0NIMl9BQ0tfTEVOCXNpemVvZih2ZmVfY21kX2Vwb2NoMl9hY2spCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBzaG9ydCBjbWRfaWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfZXBvY2gyX2FjazsKKworCisKKy8qCisgKiBDb21tYW5kIHRvIGNvbmZpZ3VyZSwgZW5hYmxlIG9yIGRpc2FibGUgc3luY2hyb25vdXMgdGltZXIxCisgKi8KKworI2RlZmluZQlWRkVfQ01EX1NZTkNfVElNRVIxX0NGRwkJMHgwMDE5CisjZGVmaW5lCVZGRV9DTURfU1lOQ19USU1FUjFfQ0ZHX0xFTglcCisJc2l6ZW9mKHZmZV9jbWRfc3luY190aW1lcjFfY2ZnKQorCisjZGVmaW5lCVZGRV9DTURfU1lOQ19UMV9DRkdfUEFSVDFfVElNRVJfRElTCTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1NZTkNfVDFfQ0ZHX1BBUlQxX1RJTUVSX0VOQQkweDAwMDEKKyNkZWZpbmUJVkZFX0NNRF9TWU5DX1QxX0NGR19QQVJUMV9QT0xfSElHSAkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9TWU5DX1QxX0NGR19QQVJUMV9QT0xfTE9XCTB4MDAwMgorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWNtZF9pZDsKKwl1bnNpZ25lZCBpbnQJc3luY190MV9jZmdfcGFydDE7CisJdW5zaWduZWQgaW50CXN5bmNfdDFfaF9zeW5jX2NvdW50ZG93bjsKKwl1bnNpZ25lZCBpbnQJc3luY190MV9wY2xrX2NvdW50ZG93bjsKKwl1bnNpZ25lZCBpbnQJc3luY190MV9kdXJhdGlvbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9zeW5jX3RpbWVyMV9jZmc7CisKKworLyoKKyAqIENvbW1hbmQgdG8gY29uZmlndXJlLCBlbmFibGUgb3IgZGlzYWJsZSBzeW5jaHJvbm91cyB0aW1lcjEKKyAqLworCisjZGVmaW5lCVZGRV9DTURfU1lOQ19USU1FUjJfQ0ZHCQkweDAwMUEKKyNkZWZpbmUJVkZFX0NNRF9TWU5DX1RJTUVSMl9DRkdfTEVOCVwKKwlzaXplb2YodmZlX2NtZF9zeW5jX3RpbWVyMl9jZmcpCisKKyNkZWZpbmUJVkZFX0NNRF9TWU5DX1QyX0NGR19QQVJUMV9USU1FUl9ESVMJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfU1lOQ19UMl9DRkdfUEFSVDFfVElNRVJfRU5BCTB4MDAwMQorI2RlZmluZQlWRkVfQ01EX1NZTkNfVDJfQ0ZHX1BBUlQxX1BPTF9ISUdICTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX1NZTkNfVDJfQ0ZHX1BBUlQxX1BPTF9MT1cJMHgwMDAyCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAlzeW5jX3QyX2NmZ19wYXJ0MTsKKwl1bnNpZ25lZCBpbnQJc3luY190Ml9oX3N5bmNfY291bnRkb3duOworCXVuc2lnbmVkIGludAlzeW5jX3QyX3BjbGtfY291bnRkb3duOworCXVuc2lnbmVkIGludAlzeW5jX3QyX2R1cmF0aW9uOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX3N5bmNfdGltZXIyX2NmZzsKKworCisvKgorICogQ29tbWFuZCB0byBjb25maWd1cmUgYW5kIHN0YXJ0IGFzeW5jaHJvbm91cyB0aW1lcjEKKyAqLworCisjZGVmaW5lCVZGRV9DTURfQVNZTkNfVElNRVIxX1NUQVJUCTB4MDAxQgorI2RlZmluZQlWRkVfQ01EX0FTWU5DX1RJTUVSMV9TVEFSVF9MRU4JXAorCXNpemVvZih2ZmVfY21kX2FzeW5jX3RpbWVyMV9zdGFydCkKKworI2RlZmluZQlWRkVfQ01EX0FTWU5DX1QxX1BPTEFSSVRZX0FfSElHSAkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9BU1lOQ19UMV9QT0xBUklUWV9BX0xPVwkJMHgwMDAxCisjZGVmaW5lCVZGRV9DTURfQVNZTkNfVDFfUE9MQVJJVFlfQl9ISUdICTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0FTWU5DX1QxX1BPTEFSSVRZX0JfTE9XCQkweDAwMDIKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CWFzeW5jX3QxYV9jZmc7CisJdW5zaWduZWQgaW50CWFzeW5jX3QxYl9jZmc7CisJdW5zaWduZWQgaW50CWFzeW5jX3QxX3BvbGFyaXR5OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX2FzeW5jX3RpbWVyMV9zdGFydDsKKworCisvKgorICogQ29tbWFuZCB0byBjb25maWd1cmUgYW5kIHN0YXJ0IGFzeW5jaHJvbm91cyB0aW1lcjIKKyAqLworCisjZGVmaW5lCVZGRV9DTURfQVNZTkNfVElNRVIyX1NUQVJUCTB4MDAxQworI2RlZmluZQlWRkVfQ01EX0FTWU5DX1RJTUVSMl9TVEFSVF9MRU4JXAorCXNpemVvZih2ZmVfY21kX2FzeW5jX3RpbWVyMl9zdGFydCkKKworI2RlZmluZQlWRkVfQ01EX0FTWU5DX1QyX1BPTEFSSVRZX0FfSElHSAkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9BU1lOQ19UMl9QT0xBUklUWV9BX0xPVwkJMHgwMDAxCisjZGVmaW5lCVZGRV9DTURfQVNZTkNfVDJfUE9MQVJJVFlfQl9ISUdICTB4MDAwMAorI2RlZmluZQlWRkVfQ01EX0FTWU5DX1QyX1BPTEFSSVRZX0JfTE9XCQkweDAwMDIKKwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGludAljbWRfaWQ7CisJdW5zaWduZWQgaW50CWFzeW5jX3QyYV9jZmc7CisJdW5zaWduZWQgaW50CWFzeW5jX3QyYl9jZmc7CisJdW5zaWduZWQgaW50CWFzeW5jX3QyX3BvbGFyaXR5OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX2FzeW5jX3RpbWVyMl9zdGFydDsKKworCisvKgorICogQ29tbWFuZCB0byBwcm9ncmFtIHBhcnRpYWwgY29uZmlndXJhdGlvbnMgb2YgYXV0byBmb2N1cyhhZikKKyAqLworCisjZGVmaW5lCVZGRV9DTURfU1RBVFNfQUZfVVBEQVRFCQkweDAwMUQKKyNkZWZpbmUJVkZFX0NNRF9TVEFUU19BRl9VUERBVEVfTEVOCVwKKwlzaXplb2YodmZlX2NtZF9zdGF0c19hZl91cGRhdGUpCisKKyNkZWZpbmUJVkZFX0NNRF9BRl9VUERBVEVfUEFSVDFfV0lORE9XX09ORQkweDAwMDAwMDAwCisjZGVmaW5lCVZGRV9DTURfQUZfVVBEQVRFX1BBUlQxX1dJTkRPV19NVUxUSQkweDgwMDAwMDAwCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAlhZl91cGRhdGVfcGFydDE7CisJdW5zaWduZWQgaW50CWFmX3VwZGF0ZV9wYXJ0MjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX2NtZF9zdGF0c19hZl91cGRhdGU7CisKKworLyoKKyAqIENvbW1hbmQgdG8gcHJvZ3JhbSBwYXJ0aWFsIGNmZyBvZiB3YiBhbmQgZXhwCisgKi8KKworI2RlZmluZQlWRkVfQ01EX1NUQVRTX1dCX0VYUF9VUERBVEUJMHgwMDFFCisjZGVmaW5lCVZGRV9DTURfU1RBVFNfV0JfRVhQX1VQREFURV9MRU4JXAorCXNpemVvZih2ZmVfY21kX3N0YXRzX3diX2V4cF91cGRhdGUpCisKKyNkZWZpbmUJVkZFX0NNRF9XQl9FWFBfVVBEQVRFX1BBUlQxX1JFR0lPTlNfOF84CQkweDAwMDAKKyNkZWZpbmUJVkZFX0NNRF9XQl9FWFBfVVBEQVRFX1BBUlQxX1JFR0lPTlNfMTZfMTYJMHgwMDAxCisjZGVmaW5lCVZGRV9DTURfV0JfRVhQX1VQREFURV9QQVJUMV9TUkVHSU9OU184XzgJMHgwMDAwCisjZGVmaW5lCVZGRV9DTURfV0JfRVhQX1VQREFURV9QQVJUMV9TUkVHSU9OU180XzQJMHgwMDAyCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAl3Yl9leHBfdXBkYXRlX3BhcnQxOworCXVuc2lnbmVkIGludAl3Yl9leHBfdXBkYXRlX3BhcnQyOworCXVuc2lnbmVkIGludAl3Yl9leHBfdXBkYXRlX3BhcnQzOworCXVuc2lnbmVkIGludAl3Yl9leHBfdXBkYXRlX3BhcnQ0OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfY21kX3N0YXRzX3diX2V4cF91cGRhdGU7CisKKworCisvKgorICogQ29tbWFuZCB0byByZSBwcm9ncmFtIHRoZSBDQU1JRiBGUkFNRSBDT05GSUcgc2V0dGluZ3MKKyAqLworCisjZGVmaW5lCVZGRV9DTURfVVBEQVRFX0NBTUlGX0ZSQU1FX0NGRwkJMHgwMDFGCisjZGVmaW5lCVZGRV9DTURfVVBEQVRFX0NBTUlGX0ZSQU1FX0NGR19MRU4JXAorCXNpemVvZih2ZmVfY21kX3VwZGF0ZV9jYW1pZl9mcmFtZV9jZmcpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJY21kX2lkOworCXVuc2lnbmVkIGludAljYW1pZl9mcmFtZV9jZmc7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9jbWRfdXBkYXRlX2NhbWlmX2ZyYW1lX2NmZzsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDV2ZmVtc2cuaCBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21hY2gvcWRzcDUvcWRzcDV2ZmVtc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDUzY2ZiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWFjaC9xZHNwNS9xZHNwNXZmZW1zZy5oCkBAIC0wLDAgKzEsMjkwIEBACisjaWZuZGVmIFFEU1A1VkZFTVNHSV9ICisjZGVmaW5lIFFEU1A1VkZFTVNHSV9ICisKKy8qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qCisKKyAgICBWIEYgRSAgIEkgTiBUIEUgUiBOIEEgTCAgIE0gRSBTIFMgQSBHIEUgUworCitHRU5FUkFMIERFU0NSSVBUSU9OCisgIFRoaXMgZmlsZSBjb250YWlucyBkZWZpbnRpb25zIG9mIGZvcm1hdCBibG9ja3Mgb2YgY29tbWFuZHMKKyAgdGhhdCBhcmUgc2VudCBieSBWRkUgVGFzaworCitSRUZFUkVOQ0VTCisgIE5vbmUKKworRVhURVJOQUxJWkVEIEZVTkNUSU9OUworICBOb25lCisKK0NvcHlyaWdodChjKSAxOTkyIC0gMjAwOCBieSBRVUFMQ09NTSwgSW5jb3Jwb3JhdGVkLgorCitUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGFuZAorbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQsIGFuZCBtb2RpZmllZCB1bmRlciB0aG9zZSB0ZXJtcy4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworKj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Kj09PT0qPT09PSo9PT09Ki8KKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgICAgICAgICAgICAgICAgICAgICBFRElUIEhJU1RPUlkgRk9SIEZJTEUKKworVGhpcyBzZWN0aW9uIGNvbnRhaW5zIGNvbW1lbnRzIGRlc2NyaWJpbmcgY2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZS4KK05vdGljZSB0aGF0IGNoYW5nZXMgYXJlIGxpc3RlZCBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXIuCisKKyRIZWFkZXI6IC8vc291cmNlL3Fjb20vcWN0L211bHRpbWVkaWEyL0Fkc3BTdmMvN1hYWC9xZHNwNWNtZC92aWRlby9xZHNwNXZmZW1zZy5oIzIgJCAkRGF0ZVRpbWU6IDIwMDgvMDcvMzAgMTA6NTA6MjMgJCAkQXV0aG9yOiBwYXZhbnIgJAorUmV2aXNpb24gSGlzdG9yeToKKword2hlbiAgICAgICB3aG8gICAgIHdoYXQsIHdoZXJlLCB3aHkKKy0tLS0tLS0tICAgLS0tICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiswNi8xMi8wOCAgIHN2ICAgICAgaW5pdGlhbCB2ZXJzaW9uCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworCisKKy8qCisgKiBNZXNzYWdlIHRvIGFja25vd2xlZGdlIENNRF9WRkVfUkVTVCBjb21tYW5kCisgKi8KKworI2RlZmluZQlWRkVfTVNHX1JFU0VUX0FDSwkweDAwMDAKKyNkZWZpbmUJVkZFX01TR19SRVNFVF9BQ0tfTEVOCXNpemVvZih2ZmVfbXNnX3Jlc2V0X2FjaykKKwordHlwZWRlZiBzdHJ1Y3QgeworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfbXNnX3Jlc2V0X2FjazsKKworCisvKgorICogTWVzc2FnZSB0byBhY2tub3dsZWRnZSBDTURfVkZFX1NUQVJUIGNvbW1hbmQKKyAqLworCisjZGVmaW5lCVZGRV9NU0dfU1RBUlRfQUNLCTB4MDAwMQorI2RlZmluZQlWRkVfTVNHX1NUQVJUX0FDS19MRU4Jc2l6ZW9mKHZmZV9tc2dfc3RhcnRfYWNrKQorCit0eXBlZGVmIHN0cnVjdCB7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9tc2dfc3RhcnRfYWNrOworCisvKgorICogTWVzc2FnZSB0byBhY2tub3dsZWRnZSBDTURfVkZFX1NUT1AJY29tbWFuZAorICovCisKKyNkZWZpbmUJVkZFX01TR19TVE9QX0FDSwkweDAwMDIKKyNkZWZpbmUJVkZFX01TR19TVE9QX0FDS19MRU4Jc2l6ZW9mKHZmZV9tc2dfc3RvcF9hY2spCisKK3R5cGVkZWYgc3RydWN0IHsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX21zZ19zdG9wX2FjazsKKworCisvKgorICogTWVzc2FnZSB0byBhY2tub3dsZWRnZSBDTURfVkZFX1VQREFURSBjb21tYW5kCisgKi8KKworI2RlZmluZQlWRkVfTVNHX1VQREFURV9BQ0sJMHgwMDAzCisjZGVmaW5lCVZGRV9NU0dfVVBEQVRFX0FDS19MRU4Jc2l6ZW9mKHZmZV9tc2dfdXBkYXRlX2FjaykKKwordHlwZWRlZiBzdHJ1Y3QgeworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfbXNnX3VwZGF0ZV9hY2s7CisKKworLyoKKyAqIE1lc3NhZ2UgdG8gbm90aWZ5IHRoZSBBUk0gdGhhdCBzbmFwc2hvdCBwcm9jZXNzaW5nIGlzIGNvbXBsZXRlCisgKiBhbmQgdGhhdCB0aGUgVkZFIGlzIG5vdyBTVEFURV9WRkVfSURMRQorICovCisKKyNkZWZpbmUJVkZFX01TR19TTkFQU0hPVF9ET05FCQkweDAwMDQKKyNkZWZpbmUJVkZFX01TR19TTkFQU0hPVF9ET05FX0xFTglcCisJc2l6ZW9mKHZmZV9tc2dfc25hcHNob3RfZG9uZSkKKwordHlwZWRlZiBzdHJ1Y3QgeworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfbXNnX3NuYXBzaG90X2RvbmU7CisKKworCisvKgorICogTWVzc2FnZSB0byBub3RpZnkgQVJNIHRoYXQgaWxsZWdhbCBjbWQgd2FzIHJlY2VpdmVkIGFuZAorICogc3lzdGVtIGlzIGluIHRoZSBJRExFIHN0YXRlCisgKi8KKworI2RlZmluZQlWRkVfTVNHX0lMTEVHQUxfQ01ECTB4MDAwNQorI2RlZmluZQlWRkVfTVNHX0lMTEVHQUxfQ01EX0xFTglcCisJc2l6ZW9mKHZmZV9tc2dfaWxsZWdhbF9jbWQpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJc3RhdHVzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfbXNnX2lsbGVnYWxfY21kOworCisKKy8qCisgKiBNZXNzYWdlIHRvIG5vdGlmeSBBUk0gdGhhdCBvcDEgYnVmIGlzIGZ1bGwgYW5kIHJlYWR5CisgKi8KKworI2RlZmluZQlWRkVfTVNHX09QMQkJMHgwMDA2CisjZGVmaW5lCVZGRV9NU0dfT1AxX0xFTgkJc2l6ZW9mKHZmZV9tc2dfb3AxKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CW9wMV9idWZfeV9hZGRyOworCXVuc2lnbmVkIGludAlvcDFfYnVmX2NiY3JfYWRkcjsKKwl1bnNpZ25lZCBpbnQJYmxhY2tfbGV2ZWxfZXZlbl9jb2w7CisJdW5zaWduZWQgaW50CWJsYWNrX2xldmVsX29kZF9jb2w7CisJdW5zaWduZWQgaW50CWRlZmVjdF9waXhlbHNfZGV0ZWN0ZWQ7CisJdW5zaWduZWQgaW50CWFzZl9tYXhfZWRnZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX21zZ19vcDE7CisKKworLyoKKyAqIE1lc3NhZ2UgdG8gbm90aWZ5IEFSTSB0aGF0IG9wMiBidWYgaXMgZnVsbCBhbmQgcmVhZHkKKyAqLworCisjZGVmaW5lCVZGRV9NU0dfT1AyCQkweDAwMDcKKyNkZWZpbmUJVkZFX01TR19PUDJfTEVOCQlzaXplb2YodmZlX21zZ19vcDIpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJb3AyX2J1Zl95X2FkZHI7CisJdW5zaWduZWQgaW50CW9wMl9idWZfY2Jjcl9hZGRyOworCXVuc2lnbmVkIGludAlibGFja19sZXZlbF9ldmVuX2NvbDsKKwl1bnNpZ25lZCBpbnQJYmxhY2tfbGV2ZWxfb2RkX2NvbDsKKwl1bnNpZ25lZCBpbnQJZGVmZWN0X3BpeGVsc19kZXRlY3RlZDsKKwl1bnNpZ25lZCBpbnQJYXNmX21heF9lZGdlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfbXNnX29wMjsKKworCisvKgorICogTWVzc2FnZSB0byBub3RpZnkgQVJNIHRoYXQgYXV0b2ZvY3VzKGFmKSBzdGF0cyBhcmUgcmVhZHkKKyAqLworCisjZGVmaW5lCVZGRV9NU0dfU1RBVFNfQUYJMHgwMDA4CisjZGVmaW5lCVZGRV9NU0dfU1RBVFNfQUZfTEVOCXNpemVvZih2ZmVfbXNnX3N0YXRzX2FmKQorCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWFmX3N0YXRzX29wX2J1ZmZlcjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX21zZ19zdGF0c19hZjsKKworCisvKgorICogTWVzc2FnZSB0byBub3RpZnkgQVJNIHRoYXQgd2hpdGUgYmFsYW5jZSh3YikgYW5kIGV4cG9zdXJlIChleHApCisgKiBzdGF0cyBhcmUgcmVhZHkKKyAqLworCisjZGVmaW5lCVZGRV9NU0dfU1RBVFNfV0JfRVhQCQkweDAwMDkKKyNkZWZpbmUJVkZFX01TR19TVEFUU19XQl9FWFBfTEVOCVwKKwlzaXplb2YodmZlX21zZ19zdGF0c193Yl9leHApCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJd2JfZXhwX3N0YXRzX29wX2J1ZjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX21zZ19zdGF0c193Yl9leHA7CisKKworLyoKKyAqIE1lc3NhZ2UgdG8gbm90aWZ5IHRoZSBBUk0gdGhhdCBoaXN0b2dyYW0oaGcpIHN0YXRzIGFyZSByZWFkeQorICovCisKKyNkZWZpbmUJVkZFX01TR19TVEFUU19IRwkweDAwMEEKKyNkZWZpbmUJVkZFX01TR19TVEFUU19IR19MRU4Jc2l6ZW9mKHZmZV9tc2dfc3RhdHNfaGcpCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJaGdfc3RhdHNfb3BfYnVmOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfbXNnX3N0YXRzX2hnOworCisKKy8qCisgKiBNZXNzYWdlIHRvIG5vdGlmeSB0aGUgQVJNIHRoYXQgZXBvY2gxIGV2ZW50IG9jY3VycmVkIGluIHRoZSBDQU1JRgorICovCisKKyNkZWZpbmUJVkZFX01TR19FUE9DSDEJCTB4MDAwQgorI2RlZmluZQlWRkVfTVNHX0VQT0NIMV9MRU4Jc2l6ZW9mKHZmZV9tc2dfZXBvY2gxKQorCit0eXBlZGVmIHN0cnVjdCB7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9tc2dfZXBvY2gxOworCisKKy8qCisgKiBNZXNzYWdlIHRvIG5vdGlmeSB0aGUgQVJNIHRoYXQgZXBvY2gyIGV2ZW50IG9jY3VycmVkIGluIHRoZSBDQU1JRgorICovCisKKyNkZWZpbmUJVkZFX01TR19FUE9DSDIJCTB4MDAwQworI2RlZmluZQlWRkVfTVNHX0VQT0NIMl9MRU4Jc2l6ZW9mKHZmZV9tc2dfZXBvY2gyKQorCit0eXBlZGVmIHN0cnVjdCB7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHZmZV9tc2dfZXBvY2gyOworCisKKy8qCisgKiBNZXNzYWdlIHRvIG5vdGlmeSB0aGUgQVJNIHRoYXQgc3luYyB0aW1lcjEgb3AgaXMgY29tcGxldGVkCisgKi8KKworI2RlZmluZQlWRkVfTVNHX1NZTkNfVDFfRE9ORQkJMHgwMDBECisjZGVmaW5lCVZGRV9NU0dfU1lOQ19UMV9ET05FX0xFTglzaXplb2YodmZlX21zZ19zeW5jX3QxX2RvbmUpCisKK3R5cGVkZWYgc3RydWN0IHsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX21zZ19zeW5jX3QxX2RvbmU7CisKKworLyoKKyAqIE1lc3NhZ2UgdG8gbm90aWZ5IHRoZSBBUk0gdGhhdCBzeW5jIHRpbWVyMiBvcCBpcyBjb21wbGV0ZWQKKyAqLworCisjZGVmaW5lCVZGRV9NU0dfU1lOQ19UMl9ET05FCQkweDAwMEUKKyNkZWZpbmUJVkZFX01TR19TWU5DX1QyX0RPTkVfTEVOCXNpemVvZih2ZmVfbXNnX3N5bmNfdDJfZG9uZSkKKwordHlwZWRlZiBzdHJ1Y3QgeworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfbXNnX3N5bmNfdDJfZG9uZTsKKworCisvKgorICogTWVzc2FnZSB0byBub3RpZnkgdGhlIEFSTSB0aGF0IGFzeW5jIHQxIG9wZXJhdGlvbiBjb21wbGV0ZWQKKyAqLworCisjZGVmaW5lCVZGRV9NU0dfQVNZTkNfVDFfRE9ORQkJMHgwMDBGCisjZGVmaW5lCVZGRV9NU0dfQVNZTkNfVDFfRE9ORV9MRU4Jc2l6ZW9mKHZmZV9tc2dfYXN5bmNfdDFfZG9uZSkKKwordHlwZWRlZiBzdHJ1Y3QgeworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfbXNnX2FzeW5jX3QxX2RvbmU7CisKKworCisvKgorICogTWVzc2FnZSB0byBub3RpZnkgdGhlIEFSTSB0aGF0IGFzeW5jIHQyIG9wZXJhdGlvbiBjb21wbGV0ZWQKKyAqLworCisjZGVmaW5lCVZGRV9NU0dfQVNZTkNfVDJfRE9ORQkJMHgwMDEwCisjZGVmaW5lCVZGRV9NU0dfQVNZTkNfVDJfRE9ORV9MRU4Jc2l6ZW9mKHZmZV9tc2dfYXN5bmNfdDJfZG9uZSkKKwordHlwZWRlZiBzdHJ1Y3QgeworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB2ZmVfbXNnX2FzeW5jX3QyX2RvbmU7CisKKworCisvKgorICogTWVzc2FnZSB0byBub3RpZnkgdGhlIEFSTSB0aGF0IGFuIGVycm9yIGhhcyBvY2N1cnJlZAorICovCisKKyNkZWZpbmUJVkZFX01TR19FUlJPUgkJMHgwMDExCisjZGVmaW5lCVZGRV9NU0dfRVJST1JfTEVOCXNpemVvZih2ZmVfbXNnX2Vycm9yKQorCisjZGVmaW5lCVZGRV9NU0dfRVJSX0NPTkRfTk9fQ0FNSUZfRVJSCQkweDAwMDAKKyNkZWZpbmUJVkZFX01TR19FUlJfQ09ORF9DQU1JRl9FUlIJCTB4MDAwMQorI2RlZmluZQlWRkVfTVNHX0VSUl9DT05EX09QMV9ZX05PX0JVU19PRgkweDAwMDAKKyNkZWZpbmUJVkZFX01TR19FUlJfQ09ORF9PUDFfWV9CVVNfT0YJCTB4MDAwMgorI2RlZmluZQlWRkVfTVNHX0VSUl9DT05EX09QMV9DQkNSX05PX0JVU19PRgkweDAwMDAKKyNkZWZpbmUJVkZFX01TR19FUlJfQ09ORF9PUDFfQ0JDUl9CVVNfT0YJMHgwMDA0CisjZGVmaW5lCVZGRV9NU0dfRVJSX0NPTkRfT1AyX1lfTk9fQlVTX09GCTB4MDAwMAorI2RlZmluZQlWRkVfTVNHX0VSUl9DT05EX09QMl9ZX0JVU19PRgkJMHgwMDA4CisjZGVmaW5lCVZGRV9NU0dfRVJSX0NPTkRfT1AyX0NCQ1JfTk9fQlVTX09GCTB4MDAwMAorI2RlZmluZQlWRkVfTVNHX0VSUl9DT05EX09QMl9DQkNSX0JVU19PRgkweDAwMTAKKyNkZWZpbmUJVkZFX01TR19FUlJfQ09ORF9BRl9OT19CVVNfT0YJCTB4MDAwMAorI2RlZmluZQlWRkVfTVNHX0VSUl9DT05EX0FGX0JVU19PRgkJMHgwMDIwCisjZGVmaW5lCVZGRV9NU0dfRVJSX0NPTkRfV0JfRVhQX05PX0JVU19PRgkweDAwMDAKKyNkZWZpbmUJVkZFX01TR19FUlJfQ09ORF9XQl9FWFBfQlVTX09GCQkweDAwNDAKKyNkZWZpbmUJVkZFX01TR19FUlJfQ09ORF9OT19BWElfRVJSCQkweDAwMDAKKyNkZWZpbmUJVkZFX01TR19FUlJfQ09ORF9BWElfRVJSCQkweDAwODAKKworI2RlZmluZQlWRkVfTVNHX0NBTUlGX1NUU19JRExFCQkJMHgwMDAwCisjZGVmaW5lCVZGRV9NU0dfQ0FNSUZfU1RTX0NBUFRVUkVfREFUQQkJMHgwMDAxCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBpbnQJZXJyX2NvbmQ7CisJdW5zaWduZWQgaW50CWNhbWlmX3N0czsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgdmZlX21zZ19lcnJvcjsKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21lZGlhL21zbV9jYW1lcmEuaCBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlL21lZGlhL21zbV9jYW1lcmEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTgxMmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL2luY2x1ZGUvbWVkaWEvbXNtX2NhbWVyYS5oCkBAIC0wLDAgKzEsMzg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMDkgUVVBTENPTU0gSW5jb3Jwb3JhdGVkLgorICovCisjaWZuZGVmIF9fTElOVVhfTVNNX0NBTUVSQV9ICisjZGVmaW5lIF9fTElOVVhfTVNNX0NBTUVSQV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgTVNNX0NBTV9JT0NUTF9NQUdJQyAnbScKKworI2RlZmluZSBNU01fQ0FNX0lPQ1RMX0dFVF9TRU5TT1JfSU5GTyBcCisJX0lPUihNU01fQ0FNX0lPQ1RMX01BR0lDLCAxLCBzdHJ1Y3QgbXNtX2NhbXNlbnNvcl9pbmZvICopCisKKyNkZWZpbmUgTVNNX0NBTV9JT0NUTF9SRUdJU1RFUl9QTUVNIFwKKwlfSU9XKE1TTV9DQU1fSU9DVExfTUFHSUMsIDIsIHN0cnVjdCBtc21fcG1lbV9pbmZvICopCisKKyNkZWZpbmUgTVNNX0NBTV9JT0NUTF9VTlJFR0lTVEVSX1BNRU0gXAorCV9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMywgdW5zaWduZWQpCisKKyNkZWZpbmUgTVNNX0NBTV9JT0NUTF9DVFJMX0NPTU1BTkQgXAorCV9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgNCwgc3RydWN0IG1zbV9jdHJsX2NtZCAqKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfQ09ORklHX1ZGRSAgXAorCV9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgNSwgc3RydWN0IG1zbV9jYW1lcmFfdmZlX2NmZ19jbWQgKikKKworI2RlZmluZSBNU01fQ0FNX0lPQ1RMX0dFVF9TVEFUUyBcCisJX0lPUihNU01fQ0FNX0lPQ1RMX01BR0lDLCA2LCBzdHJ1Y3QgbXNtX2NhbWVyYV9zdGF0c19ldmVudF9jdHJsICopCisKKyNkZWZpbmUgTVNNX0NBTV9JT0NUTF9HRVRGUkFNRSBcCisJX0lPUihNU01fQ0FNX0lPQ1RMX01BR0lDLCA3LCBzdHJ1Y3QgbXNtX2NhbWVyYV9nZXRfZnJhbWUgKikKKworI2RlZmluZSBNU01fQ0FNX0lPQ1RMX0VOQUJMRV9WRkUgXAorCV9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgOCwgc3RydWN0IGNhbWVyYV9lbmFibGVfY21kICopCisKKyNkZWZpbmUgTVNNX0NBTV9JT0NUTF9DVFJMX0NNRF9ET05FIFwKKwlfSU9XKE1TTV9DQU1fSU9DVExfTUFHSUMsIDksIHN0cnVjdCBjYW1lcmFfY21kICopCisKKyNkZWZpbmUgTVNNX0NBTV9JT0NUTF9DT05GSUdfQ01EIFwKKwlfSU9XKE1TTV9DQU1fSU9DVExfTUFHSUMsIDEwLCBzdHJ1Y3QgY2FtZXJhX2NtZCAqKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfRElTQUJMRV9WRkUgXAorCV9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMTEsIHN0cnVjdCBjYW1lcmFfZW5hYmxlX2NtZCAqKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfUEFEX1JFR19SRVNFVDIgXAorCV9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMTIsIHN0cnVjdCBjYW1lcmFfZW5hYmxlX2NtZCAqKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfVkZFX0FQUFNfUkVTRVQgXAorCV9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMTMsIHN0cnVjdCBjYW1lcmFfZW5hYmxlX2NtZCAqKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfUkVMRUFTRV9GUkFNRV9CVUZGRVIgXAorCV9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMTQsIHN0cnVjdCBjYW1lcmFfZW5hYmxlX2NtZCAqKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfUkVMRUFTRV9TVEFUU19CVUZGRVIgXAorCV9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMTUsIHN0cnVjdCBtc21fc3RhdHNfYnVmICopCisKKyNkZWZpbmUgTVNNX0NBTV9JT0NUTF9BWElfQ09ORklHIFwKKwlfSU9XKE1TTV9DQU1fSU9DVExfTUFHSUMsIDE2LCBzdHJ1Y3QgbXNtX2NhbWVyYV92ZmVfY2ZnX2NtZCAqKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfR0VUX1BJQ1RVUkUgXAorCV9JT1coTVNNX0NBTV9JT0NUTF9NQUdJQywgMTcsIHN0cnVjdCBtc21fY2FtZXJhX2N0cmxfY21kICopCisKKyNkZWZpbmUgTVNNX0NBTV9JT0NUTF9TRVRfQ1JPUCBcCisJX0lPVyhNU01fQ0FNX0lPQ1RMX01BR0lDLCAxOCwgc3RydWN0IGNyb3BfaW5mbyAqKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfUElDVF9QUCBcCisJX0lPVyhNU01fQ0FNX0lPQ1RMX01BR0lDLCAxOSwgdWludDhfdCAqKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfUElDVF9QUF9ET05FIFwKKwlfSU9XKE1TTV9DQU1fSU9DVExfTUFHSUMsIDIwLCBzdHJ1Y3QgbXNtX3NuYXBzaG90X3BwX3N0YXR1cyAqKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfU0VOU09SX0lPX0NGRyBcCisJX0lPVyhNU01fQ0FNX0lPQ1RMX01BR0lDLCAyMSwgc3RydWN0IHNlbnNvcl9jZmdfZGF0YSAqKQorCisjZGVmaW5lIE1TTV9DQU1FUkFfTEVEX09GRiAgMAorI2RlZmluZSBNU01fQ0FNRVJBX0xFRF9MT1cgIDEKKyNkZWZpbmUgTVNNX0NBTUVSQV9MRURfSElHSCAyCisKKyNkZWZpbmUgTVNNX0NBTV9JT0NUTF9GTEFTSF9MRURfQ0ZHIFwKKwlfSU9XKE1TTV9DQU1fSU9DVExfTUFHSUMsIDIyLCB1bnNpZ25lZCAqKQorCisjZGVmaW5lIE1TTV9DQU1fSU9DVExfVU5CTE9DS19QT0xMX0ZSQU1FIFwKKwlfSU8oTVNNX0NBTV9JT0NUTF9NQUdJQywgMjMpCisKKyNkZWZpbmUgTVNNX0NBTV9JT0NUTF9DVFJMX0NPTU1BTkRfMiBcCisJX0lPVyhNU01fQ0FNX0lPQ1RMX01BR0lDLCAyNCwgc3RydWN0IG1zbV9jdHJsX2NtZCAqKQorCisjZGVmaW5lIE1BWF9TRU5TT1JfTlVNICAzCisjZGVmaW5lIE1BWF9TRU5TT1JfTkFNRSAzMgorCisjZGVmaW5lIE1TTV9DQU1fQ1RSTF9DTURfRE9ORSAgMAorI2RlZmluZSBNU01fQ0FNX1NFTlNPUl9WRkVfQ01EIDEKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgc3RydWN0dXJlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIGRlZmluZSBmaXZlIHR5cGUgb2Ygc3RydWN0dXJlcyBmb3IgdXNlcnNwYWNlIDw9PT4ga2VybmVsCisgKiBzcGFjZSBjb21tdW5pY2F0aW9uOgorICogY29tbWFuZCAxIC0gMiBhcmUgZnJvbSB1c2Vyc3BhY2UgPT0+IGtlcm5lbAorICogY29tbWFuZCAzIC0gNCBhcmUgZnJvbSBrZXJuZWwgPT0+IHVzZXJzcGFjZQorICoKKyAqIDEuIGNvbnRyb2wgY29tbWFuZDogY29udHJvbCBjb21tYW5kKGZyb20gY29udHJvbCB0aHJlYWQpLAorICogICAgICAgICAgICAgICAgICAgICBjb250cm9sIHN0YXR1cyAoZnJvbSBjb25maWcgdGhyZWFkKTsKKyAqLworc3RydWN0IG1zbV9jdHJsX2NtZCB7CisJdWludDE2X3QgdHlwZTsKKwl1aW50MTZfdCBsZW5ndGg7CisJdm9pZCAqdmFsdWU7CisJdWludDE2X3Qgc3RhdHVzOworCXVpbnQzMl90IHRpbWVvdXRfbXM7CisJaW50IHJlc3BfZmQ7IC8qIEZJWE1FOiB0byBiZSB1c2VkIGJ5IHRoZSBrZXJuZWwsIHBhc3MtdGhyb3VnaCBmb3Igbm93ICovCit9OworCitzdHJ1Y3QgbXNtX3ZmZV9ldnRfbXNnIHsKKwl1bnNpZ25lZCBzaG9ydCB0eXBlOyAvKiAxID09IGV2ZW50IChSUEMpLCAwID09IG1lc3NhZ2UgKGFkc3ApICovCisJdW5zaWduZWQgc2hvcnQgbXNnX2lkOworCXVuc2lnbmVkIGludCBsZW47IC8qIHNpemUgaW4sIG51bWJlciBvZiBieXRlcyBvdXQgKi8KKwl2b2lkICpkYXRhOworfTsKKworI2RlZmluZSBNU01fQ0FNX1JFU1BfQ1RSTCAgICAgICAgIDAKKyNkZWZpbmUgTVNNX0NBTV9SRVNQX1NUQVRfRVZUX01TRyAxCisjZGVmaW5lIE1TTV9DQU1fUkVTUF9WNEwyICAgICAgICAgMgorI2RlZmluZSBNU01fQ0FNX1JFU1BfTUFYICAgICAgICAgIDMKKworLyogdGhpcyBvbmUgaXMgdXNlZCB0byBzZW5kIGN0cmwvc3RhdHVzIHVwIHRvIGNvbmZpZyB0aHJlYWQgKi8KK3N0cnVjdCBtc21fc3RhdHNfZXZlbnRfY3RybCB7CisJLyogMCAtIGN0cmxfY21kIGZyb20gY29udHJvbCB0aHJlYWQsCisJICogMSAtIHN0YXRzL2V2ZW50IGtlcm5lbCwKKwkgKiAyIC0gVjRMIGNvbnRyb2wgb3IgcmVhZCByZXF1ZXN0ICovCisJaW50IHJlc3B0eXBlOworCWludCB0aW1lb3V0X21zOworCXN0cnVjdCBtc21fY3RybF9jbWQgY3RybF9jbWQ7CisJLyogc3RydWN0ICB2ZmVfZXZlbnRfdCAgc3RhdHNfZXZlbnQ7ICovCisJc3RydWN0IG1zbV92ZmVfZXZ0X21zZyBzdGF0c19ldmVudDsKK307CisKKy8qIDIuIGNvbmZpZyBjb21tYW5kOiBjb25maWcgY29tbWFuZChmcm9tIGNvbmZpZyB0aHJlYWQpOyAqLworc3RydWN0IG1zbV9jYW1lcmFfY2ZnX2NtZCB7CisJLyogd2hhdCB0byBjb25maWc6CisJICogMSAtIHNlbnNvciBjb25maWcsIDIgLSB2ZmUgY29uZmlnICovCisJdWludDE2X3QgY2ZnX3R5cGU7CisKKwkvKiBzZW5zb3IgY29uZmlnIHR5cGUgKi8KKwl1aW50MTZfdCBjbWRfdHlwZTsKKwl1aW50MTZfdCBxdWV1ZTsKKwl1aW50MTZfdCBsZW5ndGg7CisJdm9pZCAqdmFsdWU7Cit9OworCisjZGVmaW5lIENNRF9HRU5FUkFMCQkJMAorI2RlZmluZSBDTURfQVhJX0NGR19PVVQxCQkxCisjZGVmaW5lIENNRF9BWElfQ0ZHX1NOQVBfTzFfQU5EX08yCTIKKyNkZWZpbmUgQ01EX0FYSV9DRkdfT1VUMgkJMworI2RlZmluZSBDTURfUElDVF9UX0FYSV9DRkcJCTQKKyNkZWZpbmUgQ01EX1BJQ1RfTV9BWElfQ0ZHCQk1CisjZGVmaW5lIENNRF9SQVdfUElDVF9BWElfQ0ZHCQk2CisjZGVmaW5lIENNRF9TVEFUU19BWElfQ0ZHCQk3CisjZGVmaW5lIENNRF9TVEFUU19BRl9BWElfQ0ZHCQk4CisjZGVmaW5lIENNRF9GUkFNRV9CVUZfUkVMRUFTRQkJOQorI2RlZmluZSBDTURfUFJFVl9CVUZfQ0ZHCQkxMAorI2RlZmluZSBDTURfU05BUF9CVUZfUkVMRUFTRQkJMTEKKyNkZWZpbmUgQ01EX1NOQVBfQlVGX0NGRwkJMTIKKyNkZWZpbmUgQ01EX1NUQVRTX0RJU0FCTEUJCTEzCisjZGVmaW5lIENNRF9TVEFUU19FTkFCTEUJCTE0CisjZGVmaW5lIENNRF9TVEFUU19BRl9FTkFCTEUJCTE1CisjZGVmaW5lIENNRF9TVEFUU19CVUZfUkVMRUFTRQkJMTYKKyNkZWZpbmUgQ01EX1NUQVRTX0FGX0JVRl9SRUxFQVNFCTE3CisjZGVmaW5lIFVQREFURV9TVEFUU19JTlZBTElECQkxOAorCisvKiB2ZmUgY29uZmlnIGNvbW1hbmQ6IGNvbmZpZyBjb21tYW5kKGZyb20gY29uZmlnIHRocmVhZCkqLworc3RydWN0IG1zbV92ZmVfY2ZnX2NtZCB7CisJaW50IGNtZF90eXBlOworCXVpbnQxNl90IGxlbmd0aDsKKwl2b2lkICp2YWx1ZTsKK307CisKKyNkZWZpbmUgTUFYX0NBTUVSQV9FTkFCTEVfTkFNRV9MRU4gMzIKK3N0cnVjdCBjYW1lcmFfZW5hYmxlX2NtZCB7CisJY2hhciBuYW1lW01BWF9DQU1FUkFfRU5BQkxFX05BTUVfTEVOXTsKK307CisKKyNkZWZpbmUgTVNNX1BNRU1fT1VUUFVUMQkJMAorI2RlZmluZSBNU01fUE1FTV9PVVRQVVQyCQkxCisjZGVmaW5lIE1TTV9QTUVNX09VVFBVVDFfT1VUUFVUMgkyCisjZGVmaW5lIE1TTV9QTUVNX1RIVU1CQUlMCQkzCisjZGVmaW5lIE1TTV9QTUVNX01BSU5JTUcJCTQKKyNkZWZpbmUgTVNNX1BNRU1fUkFXX01BSU5JTUcJCTUKKyNkZWZpbmUgTVNNX1BNRU1fQUVDX0FXQgkJNgorI2RlZmluZSBNU01fUE1FTV9BRgkJCTcKKyNkZWZpbmUgTVNNX1BNRU1fTUFYCQkJOAorCisjZGVmaW5lIEZSQU1FX1BSRVZJRVdfT1VUUFVUMQkJMAorI2RlZmluZSBGUkFNRV9QUkVWSUVXX09VVFBVVDIJCTEKKyNkZWZpbmUgRlJBTUVfU05BUFNIT1QJCQkyCisjZGVmaW5lIEZSQU1FX1RIVU1CQUlMCQkJMworI2RlZmluZSBGUkFNRV9SQVdfU05BUFNIT1QJCTQKKyNkZWZpbmUgRlJBTUVfTUFYCQkJNQorCitzdHJ1Y3QgbXNtX3BtZW1faW5mbyB7CisJaW50IHR5cGU7CisJaW50IGZkOworCXZvaWQgKnZhZGRyOworCXVpbnQzMl90IHlfb2ZmOworCXVpbnQzMl90IGNiY3Jfb2ZmOworCXVpbnQ4X3QgYWN0aXZlOworfTsKKworc3RydWN0IG91dHB1dENmZyB7CisJdWludDMyX3QgaGVpZ2h0OworCXVpbnQzMl90IHdpZHRoOworCisJdWludDMyX3Qgd2luZG93X2hlaWdodF9maXJzdGxpbmU7CisJdWludDMyX3Qgd2luZG93X2hlaWdodF9sYXN0bGluZTsKK307CisKKyNkZWZpbmUgT1VUUFVUXzEJMAorI2RlZmluZSBPVVRQVVRfMgkxCisjZGVmaW5lIE9VVFBVVF8xX0FORF8yCTIKKyNkZWZpbmUgQ0FNSUZfVE9fQVhJX1ZJQV9PVVRQVVRfMgkJMworI2RlZmluZSBPVVRQVVRfMV9BTkRfQ0FNSUZfVE9fQVhJX1ZJQV9PVVRQVVRfMgk0CisjZGVmaW5lIE9VVFBVVF8yX0FORF9DQU1JRl9UT19BWElfVklBX09VVFBVVF8xCTUKKyNkZWZpbmUgTEFTVF9BWElfT1VUUFVUX01PREVfRU5VTSA9IE9VVFBVVF8yX0FORF9DQU1JRl9UT19BWElfVklBX09VVFBVVF8xIDYKKworI2RlZmluZSBNU01fRlJBTUVfUFJFVl8xCTAKKyNkZWZpbmUgTVNNX0ZSQU1FX1BSRVZfMgkxCisjZGVmaW5lIE1TTV9GUkFNRV9FTkMJCTIKKworc3RydWN0IG1zbV9mcmFtZSB7CisJaW50IHBhdGg7CisJdW5zaWduZWQgbG9uZyBidWZmZXI7CisJdWludDMyX3QgeV9vZmY7CisJdWludDMyX3QgY2Jjcl9vZmY7CisJaW50IGZkOworCisJdm9pZCAqY3JvcGluZm87CisJaW50IGNyb3BsZW47Cit9OworCisjZGVmaW5lIFNUQVRfQUVBVwkwCisjZGVmaW5lIFNUQVRfQUYJCTEKKyNkZWZpbmUgU1RBVF9NQVgJMgorCitzdHJ1Y3QgbXNtX3N0YXRzX2J1ZiB7CisJaW50IHR5cGU7CisJdW5zaWduZWQgbG9uZyBidWZmZXI7CisJaW50IGZkOworfTsKKworI2RlZmluZSBNU01fVjRMMl9WSURfQ0FQX1RZUEUJMAorI2RlZmluZSBNU01fVjRMMl9TVFJFQU1fT04JMQorI2RlZmluZSBNU01fVjRMMl9TVFJFQU1fT0ZGCTIKKyNkZWZpbmUgTVNNX1Y0TDJfU05BUFNIT1QJMworI2RlZmluZSBNU01fVjRMMl9RVUVSWV9DVFJMCTQKKyNkZWZpbmUgTVNNX1Y0TDJfR0VUX0NUUkwJNQorI2RlZmluZSBNU01fVjRMMl9TRVRfQ1RSTAk2CisjZGVmaW5lIE1TTV9WNEwyX1FVRVJZCQk3CisjZGVmaW5lIE1TTV9WNEwyX01BWAkJOAorCitzdHJ1Y3QgY3JvcF9pbmZvIHsKKwl2b2lkICppbmZvOworCWludCBsZW47Cit9OworCitzdHJ1Y3QgbXNtX3Bvc3Rwcm9jIHsKKwlpbnQgZnRudW07CisJc3RydWN0IG1zbV9mcmFtZSBmdGh1bW5haWw7CisJaW50IGZtbnVtOworCXN0cnVjdCBtc21fZnJhbWUgZm1haW47Cit9OworCitzdHJ1Y3QgbXNtX3NuYXBzaG90X3BwX3N0YXR1cyB7CisJdm9pZCAqc3RhdHVzOworfTsKKworI2RlZmluZSBDRkdfU0VUX01PREUJCQkwCisjZGVmaW5lIENGR19TRVRfRUZGRUNUCQkJMQorI2RlZmluZSBDRkdfU1RBUlQJCQkyCisjZGVmaW5lIENGR19QV1JfVVAJCQkzCisjZGVmaW5lIENGR19QV1JfRE9XTgkJCTQKKyNkZWZpbmUgQ0ZHX1dSSVRFX0VYUE9TVVJFX0dBSU4JCTUKKyNkZWZpbmUgQ0ZHX1NFVF9ERUZBVUxUX0ZPQ1VTCQk2CisjZGVmaW5lIENGR19NT1ZFX0ZPQ1VTCQkJNworI2RlZmluZSBDRkdfUkVHSVNURVJfVE9fUkVBTF9HQUlOCTgKKyNkZWZpbmUgQ0ZHX1JFQUxfVE9fUkVHSVNURVJfR0FJTgk5CisjZGVmaW5lIENGR19TRVRfRlBTCQkJMTAKKyNkZWZpbmUgQ0ZHX1NFVF9QSUNUX0ZQUwkJMTEKKyNkZWZpbmUgQ0ZHX1NFVF9CUklHSFRORVNTCQkxMgorI2RlZmluZSBDRkdfU0VUX0NPTlRSQVNUCQkxMworI2RlZmluZSBDRkdfU0VUX1pPT00JCQkxNAorI2RlZmluZSBDRkdfU0VUX0VYUE9TVVJFX01PREUJCTE1CisjZGVmaW5lIENGR19TRVRfV0IJCQkxNgorI2RlZmluZSBDRkdfU0VUX0FOVElCQU5ESU5HCQkxNworI2RlZmluZSBDRkdfU0VUX0VYUF9HQUlOCQkxOAorI2RlZmluZSBDRkdfU0VUX1BJQ1RfRVhQX0dBSU4JCTE5CisjZGVmaW5lIENGR19TRVRfTEVOU19TSEFESU5HCQkyMAorI2RlZmluZSBDRkdfR0VUX1BJQ1RfRlBTCQkyMQorI2RlZmluZSBDRkdfR0VUX1BSRVZfTF9QRgkJMjIKKyNkZWZpbmUgQ0ZHX0dFVF9QUkVWX1BfUEwJCTIzCisjZGVmaW5lIENGR19HRVRfUElDVF9MX1BGCQkyNAorI2RlZmluZSBDRkdfR0VUX1BJQ1RfUF9QTAkJMjUKKyNkZWZpbmUgQ0ZHX0dFVF9BRl9NQVhfU1RFUFMJCTI2CisjZGVmaW5lIENGR19HRVRfUElDVF9NQVhfRVhQX0xDCQkyNworI2RlZmluZSBDRkdfTUFYCQkJCTI4CisKKyNkZWZpbmUgTU9WRV9ORUFSCTAKKyNkZWZpbmUgTU9WRV9GQVIJMQorCisjZGVmaW5lIFNFTlNPUl9QUkVWSUVXX01PREUJCTAKKyNkZWZpbmUgU0VOU09SX1NOQVBTSE9UX01PREUJCTEKKyNkZWZpbmUgU0VOU09SX1JBV19TTkFQU0hPVF9NT0RFCTIKKworI2RlZmluZSBTRU5TT1JfUVRSX1NJWkUJCQkwCisjZGVmaW5lIFNFTlNPUl9GVUxMX1NJWkUJCTEKKyNkZWZpbmUgU0VOU09SX0lOVkFMSURfU0laRQkJMgorCisjZGVmaW5lIENBTUVSQV9FRkZFQ1RfT0ZGCQkwCisjZGVmaW5lIENBTUVSQV9FRkZFQ1RfTU9OTwkJMQorI2RlZmluZSBDQU1FUkFfRUZGRUNUX05FR0FUSVZFCQkyCisjZGVmaW5lIENBTUVSQV9FRkZFQ1RfU09MQVJJWkUJCTMKKyNkZWZpbmUgQ0FNRVJBX0VGRkVDVF9QQVNURUwJCTQKKyNkZWZpbmUgQ0FNRVJBX0VGRkVDVF9NT1NBSUMJCTUKKyNkZWZpbmUgQ0FNRVJBX0VGRkVDVF9SRVNJWkUJCTYKKyNkZWZpbmUgQ0FNRVJBX0VGRkVDVF9TRVBJQQkJNworI2RlZmluZSBDQU1FUkFfRUZGRUNUX1BPU1RFUklaRQkJOAorI2RlZmluZSBDQU1FUkFfRUZGRUNUX1dISVRFQk9BUkQJOQorI2RlZmluZSBDQU1FUkFfRUZGRUNUX0JMQUNLQk9BUkQJMTAKKyNkZWZpbmUgQ0FNRVJBX0VGRkVDVF9BUVVBCQkxMQorI2RlZmluZSBDQU1FUkFfRUZGRUNUX01BWAkJMTIKKworc3RydWN0IHNlbnNvcl9waWN0X2ZwcyB7CisJdWludDE2X3QgcHJldmZwczsKKwl1aW50MTZfdCBwaWN0ZnBzOworfTsKKworc3RydWN0IGV4cF9nYWluX2NmZyB7CisJdWludDE2X3QgZ2FpbjsKKwl1aW50MzJfdCBsaW5lOworfTsKKworc3RydWN0IGZvY3VzX2NmZyB7CisJaW50MzJfdCBzdGVwczsKKwlpbnQgZGlyOworfTsKKworc3RydWN0IGZwc19jZmcgeworCXVpbnQxNl90IGZfbXVsdDsKKwl1aW50MTZfdCBmcHNfZGl2OworCXVpbnQzMl90IHBpY3RfZnBzX2RpdjsKK307CisKK3N0cnVjdCBzZW5zb3JfY2ZnX2RhdGEgeworCWludCBjZmd0eXBlOworCWludCBtb2RlOworCWludCByczsKKwl1aW50OF90IG1heF9zdGVwczsKKworCXVuaW9uIHsKKwkJaW50OF90IGVmZmVjdDsKKwkJdWludDhfdCBsZW5zX3NoYWRpbmc7CisJCXVpbnQxNl90IHByZXZsX3BmOworCQl1aW50MTZfdCBwcmV2cF9wbDsKKwkJdWludDE2X3QgcGljdGxfcGY7CisJCXVpbnQxNl90IHBpY3RwX3BsOworCQl1aW50MzJfdCBwaWN0X21heF9leHBfbGM7CisJCXVpbnQxNl90IHBfZnBzOworCQlzdHJ1Y3Qgc2Vuc29yX3BpY3RfZnBzIGdmcHM7CisJCXN0cnVjdCBleHBfZ2Fpbl9jZmcgZXhwX2dhaW47CisJCXN0cnVjdCBmb2N1c19jZmcgZm9jdXM7CisJCXN0cnVjdCBmcHNfY2ZnIGZwczsKKwl9IGNmZzsKK307CisKKyNkZWZpbmUgR0VUX05BTUUJCQkwCisjZGVmaW5lIEdFVF9QUkVWSUVXX0xJTkVfUEVSX0ZSQU1FCTEKKyNkZWZpbmUgR0VUX1BSRVZJRVdfUElYRUxTX1BFUl9MSU5FCTIKKyNkZWZpbmUgR0VUX1NOQVBTSE9UX0xJTkVfUEVSX0ZSQU1FCTMKKyNkZWZpbmUgR0VUX1NOQVBTSE9UX1BJWEVMU19QRVJfTElORQk0CisjZGVmaW5lIEdFVF9TTkFQU0hPVF9GUFMJCTUKKyNkZWZpbmUgR0VUX1NOQVBTSE9UX01BWF9FUF9MSU5FX0NOVAk2CisKK3N0cnVjdCBtc21fY2Ftc2Vuc29yX2luZm8geworCWNoYXIgbmFtZVtNQVhfU0VOU09SX05BTUVdOworCXVpbnQ4X3QgZmxhc2hfZW5hYmxlZDsKK307CisjZW5kaWYgLyogX19MSU5VWF9NU01fQ0FNRVJBX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9wbWVtLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vcG1lbS5jCmluZGV4IGRlZjY0NjguLjUwM2JhMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9wbWVtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL3BtZW0uYwpAQCAtMzcsMTcgKzM3LDE3IEBACiAgKiB0aGUgZmlsZSBzaG91bGQgbm90IGJlIHJlbGVhc2VkIHVudGlsIHB1dF9wbWVtX2ZpbGUgaXMgY2FsbGVkICovCiAjZGVmaW5lIFBNRU1fRkxBR1NfQlVTWSAweDEKIC8qIGluZGljYXRlcyB0aGF0IHRoaXMgaXMgYSBzdWJhbGxvY2F0aW9uIG9mIGEgbGFyZ2VyIG1hc3RlciByYW5nZSAqLwotI2RlZmluZSBQTUVNX0ZMQUdTX0NPTk5FQ1RFRCAweDEgPDwgMQorI2RlZmluZSBQTUVNX0ZMQUdTX0NPTk5FQ1RFRCAoIDB4MSA8PCAxICkKIC8qIGluZGljYXRlcyB0aGlzIGlzIGEgbWFzdGVyIGFuZCBub3QgYSBzdWIgYWxsb2NhdGlvbiBhbmQgdGhhdCBpdCBpcyBtbWFwZWQgKi8KLSNkZWZpbmUgUE1FTV9GTEFHU19NQVNURVJNQVAgMHgxIDw8IDIKKyNkZWZpbmUgUE1FTV9GTEFHU19NQVNURVJNQVAgKCAweDEgPDwgMiApCiAvKiBzdWJtYXAgYW5kIHVuc3VibWFwIGZsYWdzIGluZGljYXRlOgogICogMDA6IHN1YnJlZ2lvbiBoYXMgbmV2ZXIgYmVlbiBtbWFwZWQKICAqIDEwOiBzdWJyZWdpb24gaGFzIGJlZW4gbW1hcGVkLCByZWZlcmVuY2UgdG8gdGhlIG1tIHdhcyB0YWtlbgogICogMTE6IHN1YnJldGlvbiBoYXMgYmVuIHJlbGVhc2VkLCByZWZlcm5lY2UgdG8gdGhlIG1tIHN0aWxsIGhlbGQKICAqIDAxOiBzdWJyZXRpb24gaGFzIGJlZW4gcmVsZWFzZWQsIHJlZmVyZW5jZSB0byB0aGUgbW0gaGFzIGJlZW4gcmVsZWFzZWQKICAqLwotI2RlZmluZSBQTUVNX0ZMQUdTX1NVQk1BUCAweDEgPDwgMwotI2RlZmluZSBQTUVNX0ZMQUdTX1VOU1VCTUFQIDB4MSA8PCA0CisjZGVmaW5lIFBNRU1fRkxBR1NfU1VCTUFQICggMHgxIDw8IDMgKQorI2RlZmluZSBQTUVNX0ZMQUdTX1VOU1VCTUFQICggMHgxIDw8IDQgKQogCiAKIHN0cnVjdCBwbWVtX2RhdGEgewpAQCAtOTEsNyArOTEsNyBAQAogCiAjZGVmaW5lIFBNRU1fREVCVUdfTVNHUyAwCiAjaWYgUE1FTV9ERUJVR19NU0dTCi0jZGVmaW5lIERMT0coZm10LGFyZ3MuLi4pIFwKKyNkZWZpbmUgRExPRyhmbXQsIGFyZ3MuLi4pIFwKIAlkbyB7IHByaW50ayhLRVJOX0lORk8gIlslczolczolZF0gImZtdCwgX19GSUxFX18sIF9fZnVuY19fLCBfX0xJTkVfXywgXAogCQkgICAgIyNhcmdzKTsgfSBcCiAJd2hpbGUgKDApCkBAIC0xNTIsNyArMTUyLDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcG1lbV9pbmZvIHBtZW1bUE1FTV9NQVhfREVWSUNFU107CiBzdGF0aWMgaW50IGlkX2NvdW50OwogCi0jZGVmaW5lIFBNRU1fSVNfRlJFRShpZCwgaW5kZXgpICEocG1lbVtpZF0uYml0bWFwW2luZGV4XS5hbGxvY2F0ZWQpCisjZGVmaW5lIFBNRU1fSVNfRlJFRShpZCwgaW5kZXgpICggIShwbWVtW2lkXS5iaXRtYXBbaW5kZXhdLmFsbG9jYXRlZCkgKQogI2RlZmluZSBQTUVNX09SREVSKGlkLCBpbmRleCkgcG1lbVtpZF0uYml0bWFwW2luZGV4XS5vcmRlcgogI2RlZmluZSBQTUVNX0JVRERZX0lOREVYKGlkLCBpbmRleCkgKGluZGV4IF4gKDEgPDwgUE1FTV9PUkRFUihpZCwgaW5kZXgpKSkKICNkZWZpbmUgUE1FTV9ORVhUX0lOREVYKGlkLCBpbmRleCkgKGluZGV4ICsgKDEgPDwgUE1FTV9PUkRFUihpZCwgaW5kZXgpKSkKQEAgLTcwOCw5ICs3MDgsOCBAQAogCXN0cnVjdCBwbWVtX2RhdGEgKmRhdGE7CiAJaW50IGlkOwogCi0JaWYgKCFpc19wbWVtX2ZpbGUoZmlsZSkgfHwgIWhhc19hbGxvY2F0aW9uKGZpbGUpKSB7CisJaWYgKCFpc19wbWVtX2ZpbGUoZmlsZSkgfHwgIWhhc19hbGxvY2F0aW9uKGZpbGUpKQogCQlyZXR1cm4gLTE7Ci0JfQogCiAJZGF0YSA9IChzdHJ1Y3QgcG1lbV9kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhOwogCWlmIChkYXRhLT5pbmRleCA9PSAtMSkgewpAQCAtNzg5LDkgKzc4OCw4IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqZWx0OwogCXZvaWQgKmZsdXNoX3N0YXJ0LCAqZmx1c2hfZW5kOwogCi0JaWYgKCFpc19wbWVtX2ZpbGUoZmlsZSkgfHwgIWhhc19hbGxvY2F0aW9uKGZpbGUpKSB7CisJaWYgKCFpc19wbWVtX2ZpbGUoZmlsZSkgfHwgIWhhc19hbGxvY2F0aW9uKGZpbGUpKQogCQlyZXR1cm47Ci0JfQogCiAJaWQgPSBnZXRfaWQoZmlsZSk7CiAJZGF0YSA9IChzdHJ1Y3QgcG1lbV9kYXRhICopZmlsZS0+cHJpdmF0ZV9kYXRhOwpAQCAtODMzLDcgKzgzMSw3IEBACiAJc3JjX2ZpbGUgPSBmZ2V0X2xpZ2h0KGNvbm5lY3QsICZwdXRfbmVlZGVkKTsKIAlETE9HKCJjb25uZWN0ICVwIHRvICVwXG4iLCBmaWxlLCBzcmNfZmlsZSk7CiAJaWYgKCFzcmNfZmlsZSkgewotCQlwcmludGsoInBtZW06IHNyYyBmaWxlIG5vdCBmb3VuZCFcbiIpOworCQlwcmludGsoS0VSTl9JTkZPICJwbWVtOiBzcmMgZmlsZSBub3QgZm91bmQhXG4iKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlcnJfbm9fZmlsZTsKIAl9CkBAIC04NDYsNyArODQ0LDcgQEAKIAlzcmNfZGF0YSA9IChzdHJ1Y3QgcG1lbV9kYXRhICopc3JjX2ZpbGUtPnByaXZhdGVfZGF0YTsKIAogCWlmIChoYXNfYWxsb2NhdGlvbihmaWxlKSAmJiAoZGF0YS0+aW5kZXggIT0gc3JjX2RhdGEtPmluZGV4KSkgewotCQlwcmludGsoInBtZW06IGZpbGUgaXMgYWxyZWFkeSBtYXBwZWQgYnV0IGRvZXNuJ3QgbWF0Y2ggdGhpcyIKKwkJcHJpbnRrKEtFUk5fSU5GTyAicG1lbTogZmlsZSBpcyBhbHJlYWR5IG1hcHBlZCBidXQgZG9lc24ndCBtYXRjaCB0aGlzIgogCQkgICAgICAgIiBzcmNfZmlsZSFcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGVycl9iYWRfZmlsZTsKQEAgLTg4NSw3ICs4ODMsNyBAQAogCQltbSA9IGdldF90YXNrX21tKGRhdGEtPnRhc2spOwogCQlpZiAoIW1tKSB7CiAjaWYgUE1FTV9ERUJVRwotCQkJcHJpbnRrKCJwbWVtOiBjYW4ndCByZW1hcCB0YXNrIGlzIGdvbmUhXG4iKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJwbWVtOiBjYW4ndCByZW1hcCB0YXNrIGlzIGdvbmUhXG4iKTsKICNlbmRpZgogCQkJdXBfcmVhZCgmZGF0YS0+c2VtKTsKIAkJCXJldHVybiAtMTsKQEAgLTkzNiw3ICs5MzQsNyBAQAogCWlmICh1bmxpa2VseSghUE1FTV9JU19QQUdFX0FMSUdORUQocmVnaW9uLT5vZmZzZXQpIHx8CiAJCSAhUE1FTV9JU19QQUdFX0FMSUdORUQocmVnaW9uLT5sZW4pKSkgewogI2lmIFBNRU1fREVCVUcKLQkJcHJpbnRrKCJwbWVtOiByZXF1ZXN0IGZvciB1bmFsaWduZWQgcG1lbSBzdWJhbGxvY2F0aW9uICIKKwkJcHJpbnRrKEtFUk5fREVCVUcgInBtZW06IHJlcXVlc3QgZm9yIHVuYWxpZ25lZCBwbWVtIHN1YmFsbG9jYXRpb24gIgogCQkgICAgICAgIiVseCAlbHhcbiIsIHJlZ2lvbi0+b2Zmc2V0LCByZWdpb24tPmxlbik7CiAjZW5kaWYKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vcWRzcDUvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vcWRzcDUvTWFrZWZpbGUKaW5kZXggOTkxZDRhNy4uYmVlZGFhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL3Fkc3A1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9xZHNwNS9NYWtlZmlsZQpAQCAtMSwzICsxLDQgQEAKK0VYVFJBX0NGTEFHUz0tSWRyaXZlcnMvc3RhZ2luZy9kcmVhbS9pbmNsdWRlCiBvYmoteSArPSBhZHNwLm8KIGlmZXEgKCQoQ09ORklHX01TTV9BTVNTX1ZFUlNJT05fNjM1MCkseSkKIG9iai15ICs9IGFkc3BfaW5mby5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vcWRzcDUvYXVkaW9fbXAzLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vcWRzcDUvYXVkaW9fbXAzLmMKaW5kZXggYjk1NTc0Zi4uN2VkNmUyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2RyZWFtL3Fkc3A1L2F1ZGlvX21wMy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9xZHNwNS9hdWRpb19tcDMuYwpAQCAtNjUwLDggKzY1MCw3IEBACiAJCQkJCQkgICAgICAgJmF1ZGlvLT5yZWFkX3BoeXMsCiAJCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CiAJCQkJaWYgKCFhdWRpby0+cmVhZF9kYXRhKSB7Ci0JCQkJCXByX2VycigiYXVkaW9fbXAzOiBtYWxsb2MgcGNtIFwKLQkJCQkJYnVmIGZhaWxlZFxuIik7CisJCQkJCXByX2VycigiYXVkaW9fbXAzOiBtYWxsb2MgcGNtIGJ1ZiBmYWlsZWRcbiIpOwogCQkJCQlyYyA9IC0xOwogCQkJCX0gZWxzZSB7CiAJCQkJCXVpbnQ4X3QgaW5kZXg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vc21kL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL2RyZWFtL3NtZC9NYWtlZmlsZQppbmRleCA4OTJjNzQxLi4xYzg3NjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vc21kL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9zbWQvTWFrZWZpbGUKQEAgLTEsMyArMSw0IEBACitFWFRSQV9DRkxBR1M9LUlkcml2ZXJzL3N0YWdpbmcvZHJlYW0vaW5jbHVkZQogb2JqLSQoQ09ORklHX01TTV9TTUQpICs9IHNtZC5vIHNtZF90dHkubyBzbWRfcW1pLm8KIG9iai0kKENPTkZJR19NU01fT05DUlBDUk9VVEVSKSArPSBzbWRfcnBjcm91dGVyLm8KIG9iai0kKENPTkZJR19NU01fT05DUlBDUk9VVEVSKSArPSBzbWRfcnBjcm91dGVyX2RldmljZS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHJlYW0vc21kL3NtZF9ycGNyb3V0ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9zbWQvc21kX3JwY3JvdXRlci5jCmluZGV4IDVhYzJjZDQuLjY5OTExYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9zbWQvc21kX3JwY3JvdXRlci5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kcmVhbS9zbWQvc21kX3JwY3JvdXRlci5jCkBAIC0zOCw4ICszOCw2IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotCiAjaW5jbHVkZSA8bWFjaC9tc21fc21kLmg+CiAjaW5jbHVkZSAic21kX3JwY3JvdXRlci5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEzMjkzYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvS2NvbmZpZwpAQCAtMCwwICsxLDQgQEAKK2NvbmZpZyBEVDMxNTUKKwl0cmlzdGF0ZSAiRFQzMTU1IERpZ2l0aXplciBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNmYyMWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L01ha2VmaWxlCkBAIC0wLDAgKzEsNiBAQAorb2JqLSQoQ09ORklHX0RUMzE1NSkJKz0gZHQzMTU1Lm8KK2R0MzE1NS1vYmpzIDo9CVwKKwkJZHQzMTU1X2Rydi5vCVwKKwkJZHQzMTU1X2lzci5vCVwKKwkJZHQzMTU1X2lvLm8JXAorCQlhbGxvY2F0b3IubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9UT0RPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiYWEzYjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L1RPRE8KQEAgLTAsMCArMSwxMCBAQAorVE9ETzoKKwktIGZpeCBjaGVja3BhdGNoLnBsIGlzc3VlcworCS0gcmVtb3ZlIG9sZCBrZXJuZWwgc3VwcG9ydCwgaXQgaXMgbm90IG5lZWRlZAorCS0gY29udmVydCB0byBwcm9wZXIgUENJIGRldmljZSBBUEkKKwktIGZpeCBzcGFyc2Ugd2FybmluZ3MKKwktIGF1ZGl0IGZvciBjb3JyZWN0IHN1YnN5c3RlbSBpbnRlcmFjdGlvbgorCS0gcmV2aWV3IHJldmlldyByZXZpZXchCisKK1BsZWFzZSBzZW5kIHBhdGNoZXMgdG8gR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KK2FuZCBTY290dCBTbWVkbGV5IDxzc0BhYW8uZ292LmF1PgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9hbGxvY2F0b3IuUkVBRE1FIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9hbGxvY2F0b3IuUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NzAwYjYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2FsbG9jYXRvci5SRUFETUUKQEAgLTAsMCArMSw5OCBAQAorCitUaGUgYWxsb2NhdG9yIHNob3duIGhlcmUgIGV4cGxvaXRzIGhpZ2ggbWVtb3J5LiBUaGlzIGRvY3VtZW50IGV4cGxhaW5zCitob3cgIGEgdXNlciBjYW4gIGRlYWwgICB3aXRoIGRyaXZlcnMgdXNlcyAgIHRoaXMgIGFsbG9jYXRvciBhbmQgaG93ICBhCitwcm9ncmFtbWVyIGNhbiBsaW5rIGluIHRoZSBtb2R1bGUuCisKK1RoZSBtb2R1bGUgaXMgYmVpbmcgdXNlZCBieSBteSBweGMgYW5kIHB4ZHJ2IGRldmljZSBkcml2ZXJzIChhcyB3ZWxsIGFzCitvdGhlciBvbmVzKSwgYXZhaWxhYmxlIGZyb20gZnRwLnN5c3RlbXkuaXQvcHViL2RldmVsb3AgYW5kCitmdHAubGludXguaXQvcHViL1Blb3BsZS9SdWJpbmkKKworCVVzZXIncyBtYW51YWwKKwk9PT09PT09PT09PT09CisKKworT25lIG9mIHRoZSBtb3N0IGNvbXBlbGxpbmcgcHJvYmxlbXMgd2l0aCBhbnkgRE1BLWNhcGFibGUgZGV2aWNlIGlzIHRoZQorYWxsb2NhdGlvbiAgb2YgYSBzdWl0YWJsZSAgbWVtb3J5IGJ1ZmZlci4gVGhlICJhbGxvY2F0b3IiIG1vZHVsZSB0cmllcwordG8gZGVhbCB3aXRoICB0aGUgcHJvYmxlbSBpbiAgYSBjbGVhbiB3YXkuICBUaGUgbW9kdWxlIGlzICBhYmxlIHRvIHVzZQoraGlnaCAgIG1lbW9yeSAgKGFib3ZlIHRoZSAgb25lICAgdXNlZCBpbiAgbm9ybWFsICAgb3BlcmF0aW9uKSAgZm9yIERNQQorYWxsb2NhdGlvbi4KKworVG8gcHJldmVudCAgdGhlICBrZXJuZWwgZm9yIHVzaW5nICAgaGlnaCBtZW1vcnksICBzbyAgdGhhdCBpdCAgcmVtYWlucworYXZhaWxhYmxlIGZvciAgRE1BLCB5b3Ugc2hvdWxkICBwYXNzIGEgIGNvbW1hbmQgIGxpbmUgYXJndW1lbnQgdG8gIHRoZQora2VybmVsLiAgQ29tbWFuZCBsaW5lIGFyZ3VtZW50cyAgY2FuIGJlIHBhc3NlZCB0byAgTGlsbywgdG8gTG9hZGxpbiBvcgordG8gd2hpY2hldmVyIGxvYWRlciAgeW91IGFyZSB1c2luZyAgKHVubGVzcyBpdCdzIHZlcnkgcG9vciBpbiBkZXNpZ24pLgorRm9yIExpbG8sIGVpdGhlciB1c2UgICJhcHBlbmQ9IiBpbiAgL2V0Yy9saWxvLmNvbmYgb3IgYWRkICBjb21tYW5kbGluZQorYXJndW1lbnRzIHRvIHRoZSAgaW50ZXJhY3RpdmUgcHJvbXB0LiBGb3IgIGV4YW1wbGUsIEkgaGF2ZSBhIDMyTUIgIGJveAorYW5kIHJlc2VydmUgdHdvIG1lZ3MgZm9yIERNQToKKworSW4gbGlsby5jb25mOgorCWltYWdlID0gL3pJbWFnZQorCWxhYmVsID0gbGludXgKKwlhcHBlbmQgPSAibWVtPTMwTSIKKworT3IsIGludGVyYWN0aXZlbHk6CisJTElMTzogbGludXggbWVtPTMwTQorCitPbmNlICB0aGUga2VybmVsIGlzIGJvb3RlZCAgd2l0aCB0aGUgIHJpZ2h0IGNvbW1hbmQtbGluZSBhcmd1bWVudCwgYW55Citkcml2ZXIgIGxpbmtlZCAgIHdpdGggIHRoZSAgYWxsb2NhdG9yICAgbW9kdWxlICB3aWxsICBiZSBhYmxlICAgdG8gZ2V0CitETUEtY2FwYWJsZSBtZW1vcnkgd2l0aG91dCAgbXVjaCAgdHJvdWJsZSAodW5sZXNzIHRoZSAgdmFyaW91cyBkcml2ZXJzCituZWVkIG1vcmUgbWVtb3J5IHRoYW4gYXZhaWxhYmxlKS4KKworVGhlIG1vZHVsZSBpbXBsZW1lbnRzIGFuIGFsbG9jL2ZyZWUgIG1lY2hhbmlzbSwgIHNvIHRoYXQgaXQgY2FuICBzZXJ2ZQorbXVsdGlwbGUgZHJpdmVycyAgYXQgdGhlICBzYW1lIHRpbWUuIE5vdGUgIGhvd2V2ZXIgdGhhdCAgdGhlIGFsbG9jYXRvcgordXNlcyBhbGwgb2YgIGhpZ2ggbWVtb3J5IGFuZCBhc3N1bWVzIHRvICBiZSB0aGUgb25seSBwaWVjZSBvZiBzb2Z0d2FyZQordXNpbmcgc3VjaCBtZW1vcnkuCisKKworCVByb2dyYW1tZXIncyBtYW51YWwKKwk9PT09PT09PT09PT09PT09PT09CisKK1RoZSBhbGxvY2F0b3IsICBhcyAgcmVsZWFzZWQsIGlzIGRlc2lnbmVkICB0byAgYmUgbGlua2VkICB0byAgYSBkZXZpY2UKK2RyaXZlci4gIEluIHRoaXMgIGNhc2UsIHRoZSBkcml2ZXIgIG11c3QgY2FsbCBhbGxvY2F0b3JfaW5pdCgpICBiZWZvcmUKK3VzaW5nICAgdGhlICBhbGxvY2F0b3IgICBhbmQgIG11c3QgIGNhbGwgICBhbGxvY2F0b3JfY2xlYW51cCgpICBiZWZvcmUKK3VubG9hZGluZy4gIFRoaXMgaXMgIHVzdWFsbHkgIGRvbmUgICBmcm9tIHdpdGhpbiAgaW5pdF9tb2R1bGUoKSAgICBhbmQKK2NsZWFudXBfbW9kdWxlKCkuIElmIHRoZSBhbGxvY2F0b3IgaXMgbGlua2VkIHRvICBhIGRyaXZlciwgaXQgd29uJ3QgYmUKK3Bvc3NpYmxlIGZvciBzZXZlcmFsIGRyaXZlcnMgdG8gYWxsb2NhdGUgaGlnaCBETUEgbWVtb3J5LCBhcyBleHBsYWluZWQKK2Fib3ZlLgorCitJdCBpcyBwb3NzaWJsZSwgb24gdGhlIG90aGVyIGhhbmQsIHRvIGNvbXBpbGUgdGhlIG1vZHVsZSBhcyBhIHN0YW5kYWxvbmUKK21vZHVsZSwgc28gdGhhdCBzZXZlcmFsIG1vZHVsZXMgY2FuIHJlbHkgb24gdGhlIGFsbG9jYXRvciBmb3IgdGhleSBETUEKK2J1ZmZlcnMuIFRvIGNvbXBpbGUgdGhlIGFsbG9jYXRvciBhcyBhIHN0YW5kYWxvbmUgbW9kdWxlLCBkbyB0aGUKK2ZvbGxvd2luZyBpbiB0aGlzIGRpcmVjdG9yeSAob3IgcHJvdmlkZSBhIHN1aXRhYmxlIE1ha2VmaWxlLCBvciBlZGl0Cit0aGUgc291cmNlIGNvZGUpOgorCisJbWFrZSBhbGxvY2F0b3IubyBDQz0iZ2NjIC1EYWxsb2NhdG9yX2luaXQ9aW5pdF9tb2R1bGUgLURhbGxvY2F0b3JfY2xlYW51cD1jbGVhbnVwX21vZHVsZSAtaW5jbHVkZSAvdXNyL2luY2x1ZGUvbGludXgvbW9kdWxlLmgiCisKK1RoZSBwcmV2aW91cyBjb21tYW5kbGluZSAgdGVsbHMgICB0byBpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4gIGluICB0aGUKK2ZpcnN0IHBsYWNlLCAgYW5kIHRvIHJlbmFtZSB0aGUgaW5pdCAgYW5kIGNsZWFudXAgZnVuY3Rpb24gdG8gdGhlIG9uZXMKK25lZWRlZCBmb3IgIG1vZHVsZSBsb2FkaW5nIGFuZCAgdW5sb2FkaW5nLiAgRHJpdmVycyB1c2luZyBhIHN0YW5kYWxvbmUKK2FsbG9jYXRvciB3b24ndCBuZWVkIHRvIGNhbGwgYWxsb2NhdG9yX2luaXQoKSBub3IgYWxsb2NhdG9yX2NsZWFudXAoKS4KKworVGhlIGFsbG9jYXRvciBleHBvcnRzIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIChkZWNsYXJlZCBpbiBhbGxvY2F0b3IuaCk6CisKKyAgIHVuc2lnbmVkIGxvbmcgYWxsb2NhdG9yX2FsbG9jYXRlX2RtYSAodW5zaWduZWQgbG9uZyBraWxvYnl0ZXMsCisJCQkJCSBpbnQgcHJpb3JpdHkpOworCisJVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcGh5c2ljYWwgYWRkcmVzcywgb3ZlciBoaWdoX21lbW9yeSwKKwl3aGljaCBjb3JyZXNwb25kcyB0byBhbiBhcmVhIG9mIGF0IGxlYXN0ICJraWxvYnl0ZXMiIGtpbG9ieXRlcy4KKwlUaGUgYXJlYSB3aWxsIGJlIG93bmVkIGJ5IHRoZSBtb2R1bGUgY2FsbGluZyB0aGUgZnVuY3Rpb24uCisJVGhlIHJldHVybmVkIGFkZHJlc3MgY2FuIGJlIHBhc3NlZCB0byBkZXZpY2UgYm9hcmRzLCB0byBpbnN0cnVjdAorCXRoZWlyIERNQSBjb250cm9sbGVycywgdmlhIHBoeXNfdG9fYnVzKCkuIFRoZSBhZGRyZXNzIGNhbiBiZSB1c2VkCisJYnkgQyBjb2RlIGFmdGVyIHZyZW1hcCgpL2lvcmVtYXAoKS4gVGhlICJwcmlvcml0eSIgYXJndW1lbnQgc2hvdWxkCisJYmUgR0ZQX0tFUk5FTCBvciBHRlBfQVRPTUlDLCBhY2NvcmRpbmcgdG8gdGhlIGNvbnRleHQgb2YgdGhlCisJY2FsbGVyOyBpdCBpcyB1c2VkIHRvIGNhbGwga21hbGxvYygpLCBhcyB0aGUgYWxsb2NhdG9yIG11c3Qga2VlcAorCXRyYWNrIG9mIGFueSByZWdpb24gaXQgZ2l2ZXMgYXdheS4gSW4gY2FzZSBvZiBlcnJvciB0aGUgZnVuY3Rpb24KKwlyZXR1cm5zIDAsIGFuZCB0aGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGlzc3VlIGEgLUVOT01FTSBlcnJvci4KKworCisgICB2b2lkIGFsbG9jYXRvcl9mcmVlX2RtYSAodW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKKworCVRoaXMgZnVuY3Rpb24gaXMgdGhlIHJldmVyc2Ugb2YgdGhlIHByZXZpb3VzIG9uZS4gSWYgYSBkcml2ZXIKKwlkb2Vzbid0IGZyZWUgdGhlIERNQSBtZW1vcnkgaXQgYWxsb2NhdGVkLCB0aGUgYWxsb2NhdG9yIHdpbGwKKwljb25zaWRlciBzdWNoIG1lbW9yeSBhcyBidXN5LiBOb3RlLCBob3dldmVyLCB0aGF0CisJYWxsb2NhdG9yX2NsZWFudXAoKSBjYWxscyBrZnJlZSgpIG9uIGV2ZXJ5IHJlZ2lvbiBpdCByZWNsYWltZWQsCisJc28gdGhhdCBhIGRyaXZlciB3aXRoIHRoZSBhbGxvY2F0b3IgbGlua2VkIGluIGNhbiBhdm9pZCBjYWxsaW5nCisJYWxsb2NhdG9yX2ZyZWVfZG1hKCkgYXQgdW5sb2FkIHRpbWUuCisKKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2FsbG9jYXRvci5jIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9hbGxvY2F0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzQyMzRjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9hbGxvY2F0b3IuYwpAQCAtMCwwICsxLDI5NSBAQAorLyoKKyAqIGFsbG9jYXRvci5jIC0tIGFsbG9jYXRlIGFmdGVyIGhpZ2hfbWVtb3J5LCBpZiBhdmFpbGFibGUKKyAqCisgKiBOT1RFOiB0aGlzIGlzIGRpZmZlcmVudCBmcm9tIG15IHByZXZpb3VzIGFsbG9jYXRvciwgdGhlIG9uZSB0aGF0CisgKiAgICAgICBhc3NlbWJsZXMgcGFnZXMsIHdoaWNoIHJldmVhbGVkIGl0c2VsZiBib3RoIHNsb3cgYW5kIHVucmVsaWFibGUuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTk4ICAgcnViaW5pQGxpbnV4Lml0IChBbGVzc2FuZHJvIFJ1YmluaSkKKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorCistLSBDaGFuZ2VzIC0tCisKKyAgRGF0ZQkgICAgICBQcm9ncmFtbWVyICBEZXNjcmlwdGlvbiBvZiBjaGFuZ2VzIG1hZGUKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwMi1BdWctMjAwMiBOSkMgICAgICAgICBhbGxvY2F0b3Igbm93IHN0ZXBzIGluIDFNQiBpbmNyZW1lbnRzLCByYXRoZXIKKwkJCSAgdGhhbiBkb3VibGluZyBpdHMgc2l6ZSBlYWNoIHRpbWUuCisJCQkgIEFsc28sIGFsbG9jYXRvcl9pbml0KHUzMiAqKSBub3cgcmV0dXJucworCQkJICAoaW4gdGhlIGZpcnN0IGFyZykgdGhlIHNpemUgb2YgdGhlIGZyZWUKKwkJCSAgc3BhY2UuICBUaGlzIGlzIG5vIGxvbmdlciBjb25zaXN0ZW50IHdpdGgKKwkJCSAgdXNpbmcgdGhlIGFsbG9jYXRvciBhcyBhIG1vZHVsZSwgYW5kIHNvbWUgY2hhbmdlcworCQkJICBtYXkgYmUgbmVjZXNzYXJ5IGZvciB0aGF0IHB1cnBvc2UuICBUaGlzIHdhcworCQkJICBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIERUMzE1NSBkcml2ZXIsIGluCisJCQkgIHN0YW5kIGFsb25lIG1vZGUgb25seSEhIQorICAyNi1PY3QtMjAwOSBTUwkgIFBvcnQgdG8gMi42LjMwIGtlcm5lbC4KKyAqLworCisKKyNpZm5kZWYgX19LRVJORUxfXworIyAgZGVmaW5lIF9fS0VSTkVMX18KKyNlbmRpZgorI2lmbmRlZiBNT0RVTEUKKyMgIGRlZmluZSBNT0RVTEUKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4JLyogUEFHRV9BTElHTigpICovCisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKy8qI2RlZmluZSBBTExfREVCVUcqLworI2RlZmluZSBBTExfTVNHICJhbGxvY2F0b3I6ICIKKworI3VuZGVmIFBERUJVRyAgICAgICAgICAgICAvKiB1bmRlZiBpdCwganVzdCBpbiBjYXNlICovCisjaWZkZWYgQUxMX0RFQlVHCisjICBkZWZpbmUgX19zdGF0aWMKKyMgIGRlZmluZSBEVU1QX0xJU1QoKSBkdW1wX2xpc3QoKQorIyAgaWZkZWYgX19LRVJORUxfXworICAgICAvKiBUaGlzIG9uZSBpZiBkZWJ1Z2dpbmcgaXMgb24sIGFuZCBrZXJuZWwgc3BhY2UgKi8KKyMgICAgZGVmaW5lIFBERUJVRyhmbXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0RFQlVHIEFMTF9NU0cgZm10LCAjIyBhcmdzKQorIyAgZWxzZQorICAgICAvKiBUaGlzIG9uZSBmb3IgdXNlciBzcGFjZSAqLworIyAgICBkZWZpbmUgUERFQlVHKGZtdCwgYXJncy4uLikgZnByaW50ZihzdGRlcnIsIGZtdCwgIyMgYXJncykKKyMgIGVuZGlmCisjZWxzZQorIyAgZGVmaW5lIFBERUJVRyhmbXQsIGFyZ3MuLi4pIC8qIG5vdCBkZWJ1Z2dpbmc6IG5vdGhpbmcgKi8KKyMgIGRlZmluZSBEVU1QX0xJU1QoKQorIyAgZGVmaW5lIF9fc3RhdGljIHN0YXRpYworI2VuZGlmCisKKyN1bmRlZiBQREVCVUdHCisjZGVmaW5lIFBERUJVR0coZm10LCBhcmdzLi4uKQorLyojZGVmaW5lIFBERUJVR0coZm10LCBhcmdzLi4uKSBwcmludGsoIEtFUk5fREVCVUcgQUxMX01TRyBmbXQsICMjIGFyZ3MpKi8KKworCitpbnQgYWxsb2NhdG9yX2hpbWVtID0gMTsgLyogMCA9IHByb2JlLCBwb3MuID0gbWVncywgbmVnLiA9IGRpc2FibGUgICAqLworaW50IGFsbG9jYXRvcl9zdGVwID0gMTsgIC8qIFRoaXMgaXMgdGhlIHN0ZXAgc2l6ZSBpbiBNQiAgICAgICAgICAgICAgKi8KK2ludCBhbGxvY2F0b3JfcHJvYmUgPSAxOyAvKiBUaGlzIGlzIGEgZmxhZyAtLSAxPXByb2JlLCAwPWRvbid0IHByb2JlICovCisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGFsbG9jYXRvcl9idWZmZXI7CQkvKiBwaHlzaWNhbCBhZGRyZXNzICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBhbGxvY2F0b3JfYnVmZmVyX3NpemU7CS8qIGtpbG9ieXRlcyAqLworCisvKgorICogVGhlIGFsbG9jYXRvciBrZWVwcyBhIGxpc3Qgb2YgRE1BIGFyZWFzLCBzbyBtdWx0aXBsZSBkZXZpY2VzCisgKiBjYW4gY29leGlzdC4gVGhlIGxpc3QgaXMga2VwdCBzb3J0ZWQgYnkgYWRkcmVzcworICovCisKK3N0cnVjdCBhbGxvY2F0b3Jfc3RydWN0IHsKKwl1bnNpZ25lZCBsb25nIGFkZHJlc3M7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXN0cnVjdCBhbGxvY2F0b3Jfc3RydWN0ICpuZXh0OworfTsKKworc3RydWN0IGFsbG9jYXRvcl9zdHJ1Y3QgKmFsbG9jYXRvcl9saXN0OworCisKKyNpZmRlZiBBTExfREVCVUcKK3N0YXRpYyBpbnQgZHVtcF9saXN0KHZvaWQpCit7CisJc3RydWN0IGFsbG9jYXRvcl9zdHJ1Y3QgKnB0cjsKKworCVBERUJVRygiQ3VycmVudCBsaXN0OlxuIik7CisJZm9yIChwdHIgPSBhbGxvY2F0b3JfbGlzdDsgcHRyOyBwdHIgPSBwdHItPm5leHQpCisJCVBERUJVRygiMHglMDhseCAoc2l6ZSAlbGlrQilcbiIsIHB0ci0+YWRkcmVzcywgcHRyLT5zaXplPj4xMCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBUaGlzIGZ1bmN0aW9uIGlzIHRoZSBhY3R1YWwgYWxsb2NhdG9yLgorICoKKyAqIElmIHNwYWNlIGlzIGF2YWlsYWJsZSBpbiBoaWdoIG1lbW9yeSAoYXMgZGV0ZWN0ZWQgYXQgbG9hZCB0aW1lKSwgdGhhdAorICogb25lIGlzIHJldHVybmVkLiBUaGUgcmV0dXJuIHZhbHVlIGlzIGEgcGh5c2ljYWwgYWRkcmVzcyAoaS5lLiwgaXQgY2FuCisgKiBiZSB1c2VkIHN0cmFpZ2h0IGFoZWFkIGZvciBETUEsIGJ1dCBuZWVkcyByZW1hcHBpbmcgZm9yIHByb2dyYW0gdXNlKS4KKyAqLworCit1bnNpZ25lZCBsb25nIGFsbG9jYXRvcl9hbGxvY2F0ZV9kbWEodW5zaWduZWQgbG9uZyBraWxvYnl0ZXMsIGludCBwcmlvKQoreworCXN0cnVjdCBhbGxvY2F0b3Jfc3RydWN0ICpwdHIgPSBhbGxvY2F0b3JfbGlzdCwgKm5ld3B0cjsKKwl1bnNpZ25lZCBsb25nIGJ5dGVzID0ga2lsb2J5dGVzIDw8IDEwOworCisJLyogY2hlY2sgaWYgaGlnaCBtZW1vcnkgaXMgYXZhaWxhYmxlICovCisJaWYgKCFhbGxvY2F0b3JfYnVmZmVyKQorCQlyZXR1cm4gMDsKKworCS8qIFJvdW5kIGl0IHRvIGEgbXVsdGlwbGUgb2YgdGhlIHBhZ2VzaXplICovCisJYnl0ZXMgPSBQQUdFX0FMSUdOKGJ5dGVzKTsKKwlQREVCVUcoInJlcXVlc3QgZm9yICVsaSBieXRlc1xuIiwgYnl0ZXMpOworCisJd2hpbGUgKHB0ciAmJiBwdHItPm5leHQpIHsKKwkJaWYgKHB0ci0+bmV4dC0+YWRkcmVzcyAtIChwdHItPmFkZHJlc3MgKyBwdHItPnNpemUpID49IGJ5dGVzKQorCQkJYnJlYWs7IC8qIGVub3VnaCBzcGFjZSAqLworCQlwdHIgPSBwdHItPm5leHQ7CisJfQorCWlmICghcHRyLT5uZXh0KSB7CisJCURVTVBfTElTVCgpOworCQlQREVCVUcoImFsbG9jIGZhaWxlZFxuIik7CisJCXJldHVybiAwOyAvKiBlbmQgb2YgbGlzdCAqLworCX0KKwluZXdwdHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgYWxsb2NhdG9yX3N0cnVjdCksIHByaW8pOworCWlmICghbmV3cHRyKQorCQlyZXR1cm4gMDsKKworCS8qIG9rLCBub3cgc3RpY2sgaXQgYWZ0ZXIgcHRyICovCisJbmV3cHRyLT5hZGRyZXNzID0gcHRyLT5hZGRyZXNzICsgcHRyLT5zaXplOworCW5ld3B0ci0+c2l6ZSA9IGJ5dGVzOworCW5ld3B0ci0+bmV4dCA9IHB0ci0+bmV4dDsKKwlwdHItPm5leHQgPSBuZXdwdHI7CisKKwlEVU1QX0xJU1QoKTsKKwlQREVCVUcoInJldHVybmluZyAweCUwOGx4XG4iLCBuZXdwdHItPmFkZHJlc3MpOworCXJldHVybiBuZXdwdHItPmFkZHJlc3M7Cit9CisKK2ludCBhbGxvY2F0b3JfZnJlZV9kbWEodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXN0cnVjdCBhbGxvY2F0b3Jfc3RydWN0ICpwdHIgPSBhbGxvY2F0b3JfbGlzdCwgKnByZXY7CisKKwl3aGlsZSAocHRyICYmIHB0ci0+bmV4dCkgeworCQlpZiAocHRyLT5uZXh0LT5hZGRyZXNzID09IGFkZHJlc3MpCisJCQlicmVhazsKKwkJcHRyID0gcHRyLT5uZXh0OworCX0KKwkvKiB0aGUgb25lIGJlaW5nIGZyZWVkIGlzIHB0ci0+bmV4dCAqLworCXByZXYgPSBwdHI7IHB0ciA9IHB0ci0+bmV4dDsKKworCWlmICghcHRyKSB7CisJCXByaW50ayhLRVJOX0VSUiBBTExfTVNHCisJCQkiZnJlZV9kbWEoMHglMDhseCkgYnV0IGFkZC4gbm90IGFsbG9jYXRlZFxuIiwKKwkJCXB0ci0+YWRkcmVzcyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlQREVCVUdHKCJmcmVlaW5nOiAlMDhseCAoJWxpKSBuZXh0ICUwOGx4XG4iLCBwdHItPmFkZHJlc3MsIHB0ci0+c2l6ZSwKKwkJcHRyLT5uZXh0LT5hZGRyZXNzKTsKKwlwcmV2LT5uZXh0ID0gcHRyLT5uZXh0OworCWtmcmVlKHB0cik7CisKKwkvKiBkdW1wX2xpc3QoKTsgKi8KKwlyZXR1cm4gMDsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBJbml0IGFuZCBjbGVhbnVwCisgKgorICogT24gY2xlYW51cCBldmVyeXRoaW5nIGlzIHJlbGVhc2VkLiBJZiB0aGUgbGlzdCBpcyBub3QgZW1wdHksIHRoYXQgYQorICogcHJvYmxlbSBvZiBvdXIgY2xpZW50cworICovCitpbnQgYWxsb2NhdG9yX2luaXQodTMyICphbGxvY2F0b3JfbWF4KQoreworCS8qIGNoZWNrIGhvdyBtdWNoIGZyZWUgbWVtb3J5IGlzIHRoZXJlICovCisJdm9pZCAqcmVtYXBwZWQ7CisJdW5zaWduZWQgbG9uZyBtYXg7CisJdW5zaWduZWQgbG9uZyB0cmlhbF9zaXplID0gYWxsb2NhdG9yX2hpbWVtPDwyMDsKKwl1bnNpZ25lZCBsb25nIGxhc3RfdHJpYWwgPSAwOworCXVuc2lnbmVkIGxvbmcgc3RlcCA9IGFsbG9jYXRvcl9zdGVwPDwyMDsKKwl1bnNpZ25lZCBsb25nIGkgPSAwOworCXN0cnVjdCBhbGxvY2F0b3Jfc3RydWN0ICpoZWFkLCAqdGFpbDsKKwljaGFyIHRlc3Rfc3RyaW5nW10gPSAiMDEyMzQ1Njc4OWFiY2RlIjsgLyogMTYgYnl0ZXMgKi8KKworCVBERUJVR0coImhpbWVtID0gJWlcbiIsIGFsbG9jYXRvcl9oaW1lbSk7CisJaWYgKGFsbG9jYXRvcl9oaW1lbSA8IDApIC8qIGRvbid0IGV2ZW4gdHJ5ICovCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCF0cmlhbF9zaXplKQorCQl0cmlhbF9zaXplID0gMTw8MjA7IC8qIG5vdCBzcGVjaWZpZWQ6IHRyeSBvbmUgbWVnICovCisKKwl3aGlsZSAoMSkgeworCQlyZW1hcHBlZCA9IGlvcmVtYXAoX19wYShoaWdoX21lbW9yeSksIHRyaWFsX3NpemUpOworCQlpZiAoIXJlbWFwcGVkKSB7CisJCQlQREVCVUdHKCIlbGkgbWVncyBmYWlsZWQhXG4iLCB0cmlhbF9zaXplPj4yMCk7CisJCQlicmVhazsKKwkJfQorCQlQREVCVUdHKCJUcnlpbmcgJWxpIG1lZ3MgKGF0ICVwLCAlcClcbiIsIHRyaWFsX3NpemU+PjIwLAorCQkJKHZvaWQgKilfX3BhKGhpZ2hfbWVtb3J5KSwgcmVtYXBwZWQpOworCQlmb3IgKGkgPSBsYXN0X3RyaWFsOyBpIDwgdHJpYWxfc2l6ZTsgaSArPSAxNikgeworCQkJc3RyY3B5KChjaGFyICopKHJlbWFwcGVkKStpLCB0ZXN0X3N0cmluZyk7CisJCQlpZiAoc3RyY21wKChjaGFyICopKHJlbWFwcGVkKStpLCB0ZXN0X3N0cmluZykpCisJCQkJYnJlYWs7CisJCQl9CisJCWlvdW5tYXAoKHZvaWQgKilyZW1hcHBlZCk7CisJCXNjaGVkdWxlKCk7CisJCWxhc3RfdHJpYWwgPSB0cmlhbF9zaXplOworCQlpZiAoaSA9PSB0cmlhbF9zaXplKQorCQkJdHJpYWxfc2l6ZSArPSBzdGVwOyAvKiBpbmNyZW1lbnQsIGlmIGFsbCB3ZW50IHdlbGwgKi8KKwkJZWxzZSB7CisJCQlQREVCVUdHKCIlbGkgbWVncyBjb3B5IHRlc3QgZmFpbGVkIVxuIiwgdHJpYWxfc2l6ZT4+MjApOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFhbGxvY2F0b3JfcHJvYmUpCisJCQlicmVhazsKKwl9CisJUERFQlVHKCIlbGkgbWVncyAoJWxpIGssICVsaSBiKVxuIiwgaT4+MjAsIGk+PjEwLCBpKTsKKwlhbGxvY2F0b3JfYnVmZmVyX3NpemUgPSBpPj4xMDsgLyoga2lsb2J5dGVzICovCisJYWxsb2NhdG9yX2J1ZmZlciA9IF9fcGEoaGlnaF9tZW1vcnkpOworCWlmICghYWxsb2NhdG9yX2J1ZmZlcl9zaXplKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgQUxMX01TRyAibm8gZnJlZSBoaWdoIG1lbW9yeSB0byB1c2VcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKgorCSogdG8gc2ltcGxpZnkgdGhpbmdzLCBhbHdheXMgaGF2ZSB0d28gY2VsbHMgaW4gdGhlIGxpc3Q6CisJKiB0aGUgZmlyc3QgYW5kIHRoZSBsYXN0LiBUaGlzIGF2b2lkcyBzb21lIGNvbmRpdGlvbmFscyBhbmQKKwkqIGV4dHJhIGNvZGUgd2hlbiBhbGxvY2F0aW5nIGFuZCBkZWFsbG9jYXRpbmc6IHdlIG9ubHkgcGxheQorCSogaW4gdGhlIG1pZGRsZSBvZiB0aGUgbGlzdAorCSovCisJaGVhZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhbGxvY2F0b3Jfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFoZWFkKQorCQlyZXR1cm4gLUVOT01FTTsKKwl0YWlsID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFsbG9jYXRvcl9zdHJ1Y3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRhaWwpIHsKKwkJa2ZyZWUoaGVhZCk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCW1heCA9IGFsbG9jYXRvcl9idWZmZXJfc2l6ZTw8MTA7CisKKwloZWFkLT5zaXplID0gdGFpbC0+c2l6ZSA9IDA7CisJaGVhZC0+YWRkcmVzcyA9IGFsbG9jYXRvcl9idWZmZXI7CisJdGFpbC0+YWRkcmVzcyA9IGFsbG9jYXRvcl9idWZmZXIgKyBtYXg7CisJaGVhZC0+bmV4dCA9IHRhaWw7CisJdGFpbC0+bmV4dCA9IE5VTEw7CisJYWxsb2NhdG9yX2xpc3QgPSBoZWFkOworCisJLyogQmFjayB0byB0aGUgdXNlciBjb2RlLCBpbiBLQiAqLworCSphbGxvY2F0b3JfbWF4ID0gYWxsb2NhdG9yX2J1ZmZlcl9zaXplOworCisJcmV0dXJuIDA7IC8qIG9rLCByZWFkeSAqLworfQorCit2b2lkIGFsbG9jYXRvcl9jbGVhbnVwKHZvaWQpCit7CisJc3RydWN0IGFsbG9jYXRvcl9zdHJ1Y3QgKnB0ciwgKm5leHQ7CisKKwlmb3IgKHB0ciA9IGFsbG9jYXRvcl9saXN0OyBwdHI7IHB0ciA9IG5leHQpIHsKKwkJbmV4dCA9IHB0ci0+bmV4dDsKKwkJUERFQlVHKCJmcmVlaW5nIGxpc3Q6IDB4JTA4bHhcbiIsIHB0ci0+YWRkcmVzcyk7CisJCWtmcmVlKHB0cik7CisJfQorCisJYWxsb2NhdG9yX2J1ZmZlciAgICAgID0gMDsKKwlhbGxvY2F0b3JfYnVmZmVyX3NpemUgPSAwOworCWFsbG9jYXRvcl9saXN0ID0gTlVMTDsKK30KKworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2FsbG9jYXRvci5oIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9hbGxvY2F0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZGYzMjY4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9hbGxvY2F0b3IuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogYWxsb2NhdG9yLmggLS0gcHJvdG90eXBlcyBmb3IgYWxsb2NhdGluZyBoaWdoIG1lbW9yeQorICoKKyAqIE5PVEU6IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gbXkgcHJldmlvdXMgYWxsb2NhdG9yLCB0aGUgb25lIHRoYXQKKyAqICAgICAgIGFzc2VtYmxlcyBwYWdlcywgd2hpY2ggcmV2ZWFsZWQgaXRzZWxmIGJvdGggc2xvdyBhbmQgdW5yZWxpYWJsZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTggICBydWJpbmlAbGludXguaXQgKEFsZXNzYW5kcm8gUnViaW5pKQorICoKKyAqICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKwordm9pZCBhbGxvY2F0b3JfZnJlZV9kbWEodW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKK3Vuc2lnbmVkIGxvbmcgYWxsb2NhdG9yX2FsbG9jYXRlX2RtYSh1bnNpZ25lZCBsb25nIGtpbG9ieXRlcywgaW50IHByaW9yaXR5KTsKK2ludCBhbGxvY2F0b3JfaW5pdCh1MzIgKik7Cit2b2lkIGFsbG9jYXRvcl9jbGVhbnVwKHZvaWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTUuaCBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJmNzg2MwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1LmgKQEAgLTAsMCArMSwxNzEgQEAKKy8qCisKK0NvcHlyaWdodCAxOTk2LDIwMDIsMjAwNSBHcmVnb3J5IEQuIEhhZ2VyLCBBbGZyZWQgQS4gUml6emksIE5vYWggSi4gQ293YW4sCisJCQkgSmFzb24gTGFwZW50YSwgU2NvdHQgU21lZGxleQorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRFQzMTU1IERldmljZSBEcml2ZXIuCisKK1RoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdAorYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCitwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKK0xpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKK3VzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKK29mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBEVDMxNTUgRGV2aWNlIERyaXZlcjsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKK01BIDAyMTExLTEzMDcgVVNBCisKKy0tIENoYW5nZXMgLS0KKworICBEYXRlICAgICBQcm9ncmFtbWVyICBEZXNjcmlwdGlvbiBvZiBjaGFuZ2VzIG1hZGUKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwMy1KdWwtMjAwMCBKTUwgICAgIG4vYQorICAxMC1PY3QtMjAwMSBTUyAgICAgIHBvcnQgdG8gMi40IGtlcm5lbC4KKyAgMjQtSnVsLTIwMDIgU1MgICAgICByZW1vdmUgdW51c2VkIGNvZGUgJiBhZGRlZCBHUEwgbGljZW5jZS4KKyAgMDUtQXVnLTIwMDUgU1MgICAgICBwb3J0IHRvIDIuNiBrZXJuZWw7IG1ha2UgQ0NJUiBtb2RlIGRlZmF1bHQuCisKKyovCisKKyNpZm5kZWYgX0RUMzE1NV9JTkMKKyNkZWZpbmUgX0RUMzE1NV9JTkMKKworI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4JCS8qIHN0cnVjdCB0aW1ldmFsICovCisjZWxzZQorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworCisjZGVmaW5lIFRSVUUgIDEKKyNkZWZpbmUgRkFMU0UgMAorCisvKiBVbmNvbW1lbnQgdGhpcyBmb3IgNTBIeiBDQ0lSICovCisjZGVmaW5lIENDSVIgMQorCisvKiBDYW4gYmUgMSBvciAyICovCisjZGVmaW5lIE1BWEJPQVJEUyAxCisKKyNkZWZpbmUgQk9BUkRfTUFYX0JVRkZTCTMKKyNkZWZpbmUgTUFYQlVGRkVSUwkoQk9BUkRfTUFYX0JVRkZTKk1BWEJPQVJEUykKKworI2RlZmluZSBQQ0lfUEFHRV9TSVpFCSgxIDw8IDEyKQorCisjaWZkZWYgQ0NJUgorI2RlZmluZSBEVDMxNTVfTUFYX1JPV1MJNTc2CisjZGVmaW5lIERUMzE1NV9NQVhfQ09MUwk3NjgKKyNkZWZpbmUgRk9STUFUNTBIWglUUlVFCisjZWxzZQorI2RlZmluZSBEVDMxNTVfTUFYX1JPV1MJNDgwCisjZGVmaW5lIERUMzE1NV9NQVhfQ09MUwk2NDAKKyNkZWZpbmUgRk9STUFUNTBIWglGQUxTRQorI2VuZGlmCisKKy8qIENvbmZpZ3VyYXRpb24gc3RydWN0dXJlICovCitzdHJ1Y3QgZHQzMTU1X2NvbmZpZ19zIHsKKwl1MzIgYWNxX21vZGU7CisJdTMyIGNvbHMsIHJvd3M7CisJdTMyIGNvbnRpbnVvdXM7Cit9OworCisKKy8qIGhvbGQgZGF0YSBmb3IgZWFjaCBmcmFtZSAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXUzMiBhZGRyOwkJLyogYWRkcmVzcyBvZiB0aGUgYnVmZmVyIHdpdGggdGhlIGZyYW1lICovCisJdTMyIHRhZzsJCS8qIHVuaXF1ZSBudW1iZXIgZm9yIHRoZSBmcmFtZSAqLworCXN0cnVjdCB0aW1ldmFsIHRpbWU7CS8qIHRpbWUgdGhhdCBjYXB0dXJlIHRvb2sgcGxhY2UgKi8KK30gZnJhbWVfaW5mb190OworCisvKgorICogU3RydWN0dXJlIGZvciBpbnRlcnJ1cHQgYW5kIGJ1ZmZlciBoYW5kbGluZy4KKyAqIFRoaXMgaXMgdGhlIHNldHVwIGZvciAxIGNhcmQKKyAqLworc3RydWN0IGR0MzE1NV9mYnVmZmVyX3MgeworCWludCAgICBuYnVmZmVyczsKKworCWZyYW1lX2luZm9fdCBmcmFtZV9pbmZvW0JPQVJEX01BWF9CVUZGU107CisKKwlpbnQgZW1wdHlfYnVmZmVyc1tCT0FSRF9NQVhfQlVGRlNdOwkvKiBpbmRleGVzIGVtcHR5IGZyYW1lcyAqLworCWludCBlbXB0eV9sZW47CQkJCS8qIE51bWJlciBvZiBlbXB0eSBidWZmZXJzICovCisJCQkJCQkvKiBaZXJvIG1lYW5zIGVtcHR5ICovCisKKwlpbnQgYWN0aXZlX2J1ZjsJCQkvKiBXaGVyZSBkYXRhIGlzIGN1cnJlbnRseSBkbWEnaW5nICovCisJaW50IGxvY2tlZF9idWY7CQkJLyogQnVmZmVycyB1c2VkIGJ5IHVzZXIgKi8KKworCWludCByZWFkeV9xdWVbQk9BUkRfTUFYX0JVRkZTXTsKKwl1MzIgcmVhZHlfaGVhZDsJLyogVGhlIG1vc3QgcmVjZW50IGJ1ZmZlciBsb2NhdGVkIGhlcmUgKi8KKwl1MzIgcmVhZHlfbGVuOwkvKiBUaGUgbnVtYmVyIG9mIHJlYWR5IGJ1ZmZlcnMgKi8KKworCWludCBldmVuX2hhcHBlbmVkOworCWludCBldmVuX3N0b3BwZWQ7CisKKwlpbnQgc3RvcF9hY3F1aXJlOwkvKiBGbGFnIHRvIHN0b3AgaW50ZXJydXB0cyAqLworCXUzMiBmcmFtZV9jb3VudDsJLyogQ291bnRlciBmb3IgZnJhbWVzIGFjcXVpcmVkIGJ5IHRoaXMgY2FyZCAqLworfTsKKworCisKKyNkZWZpbmUgRFQzMTU1X01PREVfRlJBTUUJMQorI2RlZmluZSBEVDMxNTVfTU9ERV9GSUVMRAkyCisKKyNkZWZpbmUgRFQzMTU1X1NOQVAJCTEKKyNkZWZpbmUgRFQzMTU1X0FDUQkJMgorCisvKiBUaGVyZSBpcyBvbmUgc3RhdHVzIHN0cnVjdHVyZSBmb3IgZWFjaCBjYXJkLiAqLwordHlwZWRlZiBzdHJ1Y3QgZHQzMTU1X3N0YXR1c19zIHsKKwlpbnQgZml4ZWRfbW9kZTsJCS8qIGlmIDEsIHdlIGFyZSBpbiBmaXhlZCBmcmFtZSBtb2RlICovCisJdTMyIHJlZ19hZGRyOwkvKiBSZWdpc3RlciBhZGRyZXNzIGZvciBhIHNpbmdsZSBjYXJkICovCisJdTMyIG1lbV9hZGRyOwkvKiBCdWZmZXIgc3RhcnQgYWRkciBmb3IgdGhpcyBjYXJkICovCisJdTMyIG1lbV9zaXplOwkvKiBUaGlzIGlzIHRoZSBhbW91bnQgb2YgbWVtIGF2YWlsYWJsZSAgKi8KKwl1MzIgaXJxOwkJLyogdGhpcyBjYXJkJ3MgaXJxICovCisJc3RydWN0IGR0MzE1NV9jb25maWdfcyBjb25maWc7CQkvKiBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworCXN0cnVjdCBkdDMxNTVfZmJ1ZmZlcl9zIGZidWZmZXI7CS8qIGZyYW1lIGJ1ZmZlciBzdGF0ZSBzdHJ1Y3QgKi8KKwl1MzIgc3RhdGU7CQkvKiB0aGlzIGNhcmQncyBzdGF0ZSAqLworCXUzMiBkZXZpY2VfaW5zdGFsbGVkOwkvKiBGbGFnIGlmIGluc3RhbGxlZC4gMT1pbnN0YWxsZWQgKi8KK30gZHQzMTU1X3N0YXR1c190OworCisvKiBSZWZlcmVuY2UgdG8gZ2xvYmFsIHN0YXR1cyBzdHJ1Y3R1cmUgKi8KK2V4dGVybiBzdHJ1Y3QgZHQzMTU1X3N0YXR1c19zIGR0MzE1NV9zdGF0dXNbTUFYQk9BUkRTXTsKKworI2RlZmluZSBEVDMxNTVfU1RBVEVfSURMRQkweDAwCisjZGVmaW5lIERUMzE1NV9TVEFURV9GUkFNRQkweDAxCisjZGVmaW5lIERUMzE1NV9TVEFURV9GTEQJMHgwMgorI2RlZmluZSBEVDMxNTVfU1RBVEVfU1RPUAkweDEwMAorI2RlZmluZSBEVDMxNTVfU1RBVEVfRVJST1IJMHgyMDAKKyNkZWZpbmUgRFQzMTU1X1NUQVRFX01PREUJMHgwZmYKKworI2RlZmluZSBEVDMxNTVfSU9DX01BR0lDCSchJworCisjZGVmaW5lIERUMzE1NV9TRVRfQ09ORklHCV9JT1coRFQzMTU1X0lPQ19NQUdJQywgMSwgc3RydWN0IGR0MzE1NV9jb25maWdfcykKKyNkZWZpbmUgRFQzMTU1X0dFVF9DT05GSUcJX0lPUihEVDMxNTVfSU9DX01BR0lDLCAyLCBzdHJ1Y3QgZHQzMTU1X3N0YXR1c19zKQorI2RlZmluZSBEVDMxNTVfU1RPUAkJX0lPKERUMzE1NV9JT0NfTUFHSUMsIDMpCisjZGVmaW5lIERUMzE1NV9TVEFSVAkJX0lPKERUMzE1NV9JT0NfTUFHSUMsIDQpCisjZGVmaW5lIERUMzE1NV9GTFVTSAkJX0lPKERUMzE1NV9JT0NfTUFHSUMsIDUpCisjZGVmaW5lIERUMzE1NV9JT0NfTUFYTlIJNQorCisvKiBFcnJvciBjb2RlcyAqLworCisjZGVmaW5lIERUX0VSUl9OT19CVUZGRVJTCTB4MTAwMDAJLyogbm90IHVzZWQgYnV0IGl0IG1pZ2h0IGJlIG9uZSBkYXkgKi8KKyNkZWZpbmUgRFRfRVJSX0NPUlJVUFQJCTB4MjAwMDAKKyNkZWZpbmUgRFRfRVJSX09WRVJSVU4JCTB4MzAwMDAKKyNkZWZpbmUgRFRfRVJSX0kyQ19USU1FT1VUCTB4NDAwMDAKKyNkZWZpbmUgRFRfRVJSX01BU0sJCTB4ZmYwMDAwLyogbm90IHVzZWQgYnV0IGl0IG1pZ2h0IGJlIG9uZSBkYXkgKi8KKworLyogVXNlciBjb2RlIHdpbGwgcHJvYmFibHkgd2FudCB0byBkZWNsYXJlIG9uZSBvZiB0aGVzZSBmb3IgZWFjaCBjYXJkICovCit0eXBlZGVmIHN0cnVjdCBkdDMxNTVfcmVhZF9zIHsKKwl1MzIgb2Zmc2V0OworCXUzMiBmcmFtZV9zZXE7CisJdTMyIHN0YXRlOworCisJZnJhbWVfaW5mb190IGZyYW1lX2luZm87Cit9IGR0MzE1NV9yZWFkX3Q7CisKKyNlbmRpZiAvKiBfRFQzMTU1X2luYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTUuc3lzdmluaXQgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NS5zeXN2aW5pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmVjMDkzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTUuc3lzdmluaXQKQEAgLTAsMCArMSw2MCBAQAorIyEgL2Jpbi9zaAorIworIyBNb2R1bGUgbG9hZC91bmxvYWQgc2NyaXB0IGZvciB1c2Ugd2l0aCBTeXNWLXN0eWxlIC9ldGMvaW5pdC5kLyBzeXN0ZW1zLgorIyBPbiBhIERlYmlhbiBzeXN0ZW0sIGNvcHkgdGhpcyB0byAvZXRjL2luaXQuZC9kdDMxNTUgYW5kIHRoZW4gcnVuCisjIAkvdXNyL3NiaW4vdXBkYXRlLXJjLmQgZHQzMTU1IGRlZmF1bHRzIDU1CisjIHRvIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgL2V0Yy9yYz8uZC9bU0tdNTVkdDMxNTUgc3RhcnQvc3RvcCBsaW5rcy4KKyMgKFRoZSAiNTUiIGlzIGFyYml0cmFyeSBidXQgaXMgd2hhdCBJIHVzZSB0byBsb2FkIHRoaXMgcmF0aGVyIGxhdGUuKQorIworIyAgICBBbmR5IERvdWdoZXJ0eSAgIEZlYiAyMiAyMDAwCWRvdWdoZXJhQGxhZmF5ZXR0ZS5lZHUKKyMgICAgRGVwdC4gb2YgUGh5c2ljcworIyAgICBMYWZheWV0dGUgQ29sbGVnZSwgRWFzdG9uIFBBIDE4MDQyCisjCisKK1BBVEg9L3Vzci9sb2NhbC9zYmluOi91c3IvbG9jYWwvYmluOi9zYmluOi9iaW46L3Vzci9zYmluOi91c3IvYmluCisKKyMgRWRpdCB0byBwb2ludCB0byB5b3VyIGxvY2FsIGNvcHkuCitGSUxFPS91c3IvbG9jYWwvbGliL21vZHVsZXMvZHQzMTU1L2R0MzE1NS5vCitOQU1FPSJkdDMxNTUiCitERVNDPSJkdDMxNTUgRnJhbWUgR3JhYmJlciBtb2R1bGUiCitERVY9ImR0MzE1NSIKKworaWYgdGVzdCAhIC1mICRGSUxFOyB0aGVuCisgICAgZWNobyAiVW5hYmxlIHRvIGxvY2F0ZSAkRklMRSIKKyAgICBleGl0IDAKK2ZpCisKK3NldCAtZQorCitjYXNlICIkMSIgaW4KKyAgc3RhcnQpCisgICAgZWNobyAtbiAiTG9hZGluZyAkREVTQyAiCisgICAgaWYgL3NiaW4vaW5zbW9kIC12IC1mICRGSUxFOyB0aGVuCisJbWFqb3I9YGdyZXAgJERFViAvcHJvYy9kZXZpY2VzIHwgYXdrICJ7cHJpbnQgXFwkMX0iYAorCXJtIC1mIC9kZXYvZHQzMTU1PworCW1rbm9kIC9kZXYvZHQzMTU1YSBjICRtYWpvciAwCisJbWtub2QgL2Rldi9kdDMxNTViIGMgJG1ham9yIDEKKwljaG1vZCBnbytydyAvZGV2L2R0MzE1NT8KKwllY2hvCisgICAgZWxzZQorCWVjaG8gIiRGSUxFIG5vdCBsb2FkZWQuIgorICAgIGZpCisgICAgOzsKKyAgc3RvcCkKKyAgICBlY2hvIC1uICJVbmxvYWRpbmcgJERFU0M6ICIKKyAgICBpZiAvc2Jpbi9ybW1vZCAkTkFNRSA7IHRoZW4KKwllY2hvCisgICAgZWxzZQorCWVjaG8gIiRERVYgbm90IHJlbW92ZWQiCisJZXhpdCAwCisgICAgZmkKKyAgICBybSAtZiAvZGV2L2R0MzE1NT8KKyAgICA7OworICAqKQorICAgIGVjaG8gIlVzYWdlOiAvZXRjL2luaXQuZC8kTkFNRSB7c3RhcnR8c3RvcH0iCisgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKKworZXhpdCAwCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1X2Rydi5jIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfZHJ2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY3YzYyMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1X2Rydi5jCkBAIC0wLDAgKzEsMTA5NSBAQAorLyoKKworQ29weXJpZ2h0IDE5OTYsMjAwMiwyMDA1IEdyZWdvcnkgRC4gSGFnZXIsIEFsZnJlZCBBLiBSaXp6aSwgTm9haCBKLiBDb3dhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBKYXNvbiBMYXBlbnRhLCBTY290dCBTbWVkbGV5LCBHcmVnIFNoYXJwCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBEVDMxNTUgRGV2aWNlIERyaXZlci4KKworVGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0CithbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKK3B1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQordXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorTUEgMDIxMTEtMTMwNyBVU0EKKworLS0gQ2hhbmdlcyAtLQorCisgIERhdGUgICAgIFByb2dyYW1tZXIJRGVzY3JpcHRpb24gb2YgY2hhbmdlcyBtYWRlCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMDMtSnVsLTIwMDAgSk1MICAgICAgIG4vYQorICAxMC1PY3QtMjAwMSBTUyAgICAgICAgcG9ydCB0byAyLjQga2VybmVsCisgIDAyLUFwci0yMDAyIFNTICAgICAgICBNb2RzIHRvIHVzZSBhbGxvY2F0b3IgYXMgYSBzdGFuZGFsb25lIG1vZHVsZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1lcmdlZCBKb2huIFJvbGwncyBjaGFuZ2VzIChqb2huQGNmYS5oYXJ2YXJkLmVkdSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvIG1ha2Ugd29yayB3aXRoIG11bHRpcGxlIGJvYXJkcy4KKyAgMDItSnVsLTIwMDIgU1MgICAgICAgIE1lcmdlZCBKYW1lcyBSb3NlJ3MgY2hhZ2VzIChyb3NlanJAcHVyZHVlLmVkdSkgdG86CisgICAgICAgICAgICAgICAgICAgICAgICAgKiBmaXggc3VjY2Vzc2l2ZSBpbnRlcnJ1cHQtZHJpdmVuIGNhcHR1cmVzCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBhZGQgc2VsZWN0L3BvbGwgc3VwcG9ydC4KKyAgMTAtSnVsLTIwMDIgR0NTICAgICAgIEFkZCBlcnJvciBjaGVjayB3aGVuIG5kZXZpY2VzID4gTUFYQk9BUkRTLgorICAwMi1BdWctMjAwMiBHQ1MgICAgICAgRml4IGZpZWxkIG1vZGUgc28gdGhhdCBvZGQgKGxvd2VyKSBmaWVsZCBpcyBzdG9yZWQKKyAgICAgICAgICAgICAgICAgICAgICAgIGluIGxvd2VyIGhhbGYgb2YgYnVmZmVyLgorICAwNS1BdWctMjAwNSBTUyAgICAgICAgcG9ydCB0byAyLjYga2VybmVsLgorICAyNi1PY3QtMjAwOSBTUwlwb3J0IHRvIDIuNi4zMCBrZXJuZWwuCisKKy0tIE5vdGVzIC0tCisKKyoqIGFwcGVuZGVkICJtZW09MTI0IiBpbiBsaWxvLmNvbmYgdG8gYWxsb3cgZm9yIDRtZWdzIGZyZWUgb24gbXkgMTI4bWVnIHN5c3RlbS4KKyAqIHVzaW5nIGFsbG9jYXRvci5jIGFuZCBhbGxvY2F0b3IuaCBmcm9tIG8ncmVpbGx5IGJvb2sgKGFsZXNzYW5kcm8gcnViaW5pKQorICAgIGZ0cDovL2Z0cC5zeXN0ZW15Lml0L3B1Yi9kZXZlbG9wIChzZWUgUkVBRE1FLmFsbG9jYXRvcikKKworICsgbWlnaHQgd2FudCB0byBnZXQgcmlkIG9mIE1BWGJvYXJkcyBmb3IgYWxsb2NhdGluZyBpbml0aWFsIGJ1ZmZlci4KKyAgICBjb25mdXNpbmcgYW5kIG5vdCBuZWNlc3NhcnkKKworICsgaW4gY2xlYW51cF9tb2R1bGUgdGhlIE1PRF9JTl9VU0UgbG9va3MgbGlrZSBpdCBpcyBjaGVjayBhZnRlciBpdCBzaG91bGQKKworICogR0ZQX0RNQSBzaG91bGQgbm90IGJlIHNldCB3aXRoIGEgUENJIHN5c3RlbSAocGcgMjkxKQorCisgLSBOSkMgd2h5IGFyZSBvbmx5IHR3byBidWZmZXJzIGFsbG93ZWQ/IChzZWUgaXNyLCBhcHByb3ggbGluZSAzNTgpCisKKyovCisKK2V4dGVybiB2b2lkIHByaW50cXVlcyhpbnQpOworCisjaWZkZWYgTU9EVUxFCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjZW5kaWYKKworI2lmbmRlZiBDT05GSUdfUENJCisjZXJyb3IgICJEVDMxNTUgOiAgS2VybmVsIFBDSSBzdXBwb3J0IG5vdCBlbmFibGVkIChEVDMxNTUgZHJpdmUgcmVxdWlyZXMgUENJKSIKKyNlbmRpZgorCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpbmNsdWRlICJkdDMxNTUuaCIKKyNpbmNsdWRlICJkdDMxNTVfZHJ2LmgiCisjaW5jbHVkZSAiZHQzMTU1X2lzci5oIgorI2luY2x1ZGUgImR0MzE1NV9pby5oIgorI2luY2x1ZGUgImFsbG9jYXRvci5oIgorCisvKiBFcnJvciB2YXJpYWJsZS4gIFplcm8gbWVhbnMgbm8gZXJyb3IuICovCitpbnQgZHQzMTU1X2Vycm5vID0gMDsKKworI2lmbmRlZiBQQ0lfREVWSUNFX0lEX0lOVEVMXzcxMTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF83MTE2IDB4MTIyMworI2VuZGlmCisKKyNkZWZpbmUgRFQzMTU1X1ZFTkRPUklEICAgIFBDSV9WRU5ET1JfSURfSU5URUwKKyNkZWZpbmUgRFQzMTU1X0RFVklDRUlEICAgIFBDSV9ERVZJQ0VfSURfSU5URUxfNzExNgorI2RlZmluZSBNQVhQQ0kgICAgMTYKKworI2lmZGVmIERUX0RFQlVHCisjZGVmaW5lIERUXzMxNTVfREVCVUdfTVNHKHgseSkgcHJpbnRrKHgseSkKKyNlbHNlCisjZGVmaW5lIERUXzMxNTVfREVCVUdfTVNHKHgseSkKKyNlbmRpZgorCisvKiB3YWl0IHF1ZXVlIGZvciBpbnRlcnJ1cHRzICovCit3YWl0X3F1ZXVlX2hlYWRfdCBkdDMxNTVfcmVhZF93YWl0X3F1ZXVlWyBNQVhCT0FSRFMgXTsKKworI2RlZmluZSBEVF8zMTU1X1NVQ0NFU1MgMAorI2RlZmluZSBEVF8zMTU1X0ZBSUxVUkUgLUVJTworCisvKiBzZXQgdG8gZHluYW1pY2FseSBhbGxvY2F0ZSwgYnV0IGl0IGlzIHR1bmFibGU6ICovCisvKiBpbnNtb2QgRFRfMzE1NSBkdDMxNTUgZHQzMTU1X21ham9yPVhYICovCitpbnQgZHQzMTU1X21ham9yID0gMDsKKworLyogVGhlIG1pbm9yIG51bWJlcnMgYXJlIDAgYW5kIDEgLi4uIHRoZXkgYXJlIG5vdCB0dW5hYmxlLgorICogVGhleSBhcmUgdXNlZCBhcyB0aGUgaW5kaWNlcyBmb3IgdGhlIHN0cnVjdHVyZSB2ZWN0b3JzLAorICogYW5kIHJlZ2lzdGVyIGFkZHJlc3MgdmVjdG9ycworICovCisKKy8qIEdsb2JhbCBzdHJ1Y3R1cmVzIGFuZCB2YXJpYWJsZXMgKi8KKworLyogU3RhdHVzIG9mIGVhY2ggZGV2aWNlICovCitzdHJ1Y3QgZHQzMTU1X3N0YXR1c19zIGR0MzE1NV9zdGF0dXNbIE1BWEJPQVJEUyBdOworCisvKiBrZXJuZWwgbG9naWNhbCBhZGRyZXNzIG9mIHRoZSBib2FyZCAqLwordTggKmR0MzE1NV9sYmFzZVsgTUFYQk9BUkRTIF0gPSB7IE5VTEwKKyNpZiBNQVhCT0FSRFMgPT0gMgorCQkJCSAgICAgICwgTlVMTAorI2VuZGlmCit9OworLyogRFQzMTU1IHJlZ2lzdGVycyAgICAgICAgICAgICAgKi8KK3U4ICpkdDMxNTVfYmJhc2UgPSBOVUxMOwkJICAvKiBrZXJuZWwgbG9naWNhbCBhZGRyZXNzIG9mIHRoZSAqCisJCQkJCSAgICogYnVmZmVyIHJlZ2lvbiAgICAgICAgICAgICAgICAgKi8KK3UzMiAgZHQzMTU1X2Rldl9vcGVuWyBNQVhCT0FSRFMgXSA9IHswCisjaWYgTUFYQk9BUkRTID09IDIKKwkJCQkgICAgICAgLCAwCisjZW5kaWYKK307CisKK3UzMiAgbmRldmljZXMgPSAwOwordTMyIHVuaXF1ZV90YWcgPSAwOzsKKworCisvKgorICogU3RvcHMgaW50ZXJydXB0IGdlbmVyYXRpb24gcmlnaHQgYXdheSBhbmQgcmVzZXRzIHRoZSBzdGF0dXMKKyAqIHRvIGlkbGUuICBJIGRvbid0IGtub3cgd2h5IHRoaXMgd29ya3MgYW5kIHRoZSBvdGhlciB3YXkgZG9lc24ndC4KKyAqIChKYW1lcyBSb3NlKQorICovCitzdGF0aWMgdm9pZCBxdWlja19zdG9wIChpbnQgbWlub3IpCit7CisgIC8vIFRPRE86IHNjb3R0IHdhcyBoZXJlCisjaWYgMQorICBSZWFkTVJlZygoZHQzMTU1X2xiYXNlWyBtaW5vciBdICsgSU5UX0NTUiksIGludF9jc3Jfci5yZWcpOworICAvKiBkaXNhYmxlIGludGVycnVwdHMgKi8KKyAgaW50X2Nzcl9yLmZsZC5GTERfRU5EX0VWRV9FTiA9IDA7CisgIGludF9jc3Jfci5mbGQuRkxEX0VORF9PRERfRU4gPSAwOworICBXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVsgbWlub3IgXSArIElOVF9DU1IpLCBpbnRfY3NyX3IucmVnICk7CisKKyAgZHQzMTU1X3N0YXR1c1sgbWlub3IgXS5zdGF0ZSAmPSB+KERUMzE1NV9TVEFURV9TVE9QfDB4ZmYpOworICAvKiBtYXJrIHRoZSBzeXN0ZW0gc3RvcHBlZDogKi8KKyAgZHQzMTU1X3N0YXR1c1sgbWlub3IgXS5zdGF0ZSB8PSBEVDMxNTVfU1RBVEVfSURMRTsKKyAgZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPnN0b3BfYWNxdWlyZSA9IDA7CisgIGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT5ldmVuX3N0b3BwZWQgPSAwOworI2Vsc2UKKyAgZHQzMTU1X3N0YXR1c1ttaW5vcl0uc3RhdGUgfD0gRFQzMTU1X1NUQVRFX1NUT1A7CisgIGR0MzE1NV9zdGF0dXNbbWlub3JdLmZidWZmZXIuc3RvcF9hY3F1aXJlID0gMTsKKyNlbmRpZgorCit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgZHQzMTU1X2lzcigpIEludGVycnVwdCBzZXJ2aWNlIHJvdXRpZW4KKyAqCisgKiAtIGxvb2tzIGxpa2UgdGhpcyBpc3Igc3VwcG9ydHMgSVJRIHNoYXJpbmcgKG9yIGNvdWxkKSBKTUwKKyAqIC0gQXNzdW1lcyBpcnEncyBhcmUgZGlzYWJsZWQsIHZpYSBTQV9JTlRFUlJVUFQgZmxhZworICogYmVpbmcgc2V0IGluIHJlcXVlc3RfaXJxKCkgY2FsbCBmcm9tIGluaXRfbW9kdWxlKCkKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBkdDMxNTVfaXNyKCBpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzICkKK3sKKyAgaW50ICAgIG1pbm9yID0gLTE7CisgIGludCAgICBpbmRleDsKKyAgdW5zaWduZWQgbG9uZyBmbGFnczsKKyAgdTMyIGJ1ZmZlcl9hZGRyOworCisgIC8qIGZpbmQgb3V0IHdobyBpc3N1ZWQgdGhlIGludGVycnVwdCAqLworICBmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbmRldmljZXM7IGluZGV4KysgKSB7CisgICAgaWYoIGRldl9pZCA9PSAodm9pZCopICZkdDMxNTVfc3RhdHVzWyBpbmRleCBdKQorICAgICAgeworCW1pbm9yID0gaW5kZXg7CisJYnJlYWs7CisgICAgICB9CisgIH0KKworICAvKiBob3BlZnVsbHkgd2Ugc2hvdWxkIG5vdCBnZXQgaGVyZSAqLworICBpZiAoIG1pbm9yIDwgMCB8fCBtaW5vciA+PSBNQVhCT0FSRFMgKSB7CisgICAgcHJpbnRrKEtFUk5fRVJSICJkdDMxNTVfaXNyIGNhbGxlZCB3aXRoIGludmFsaWQgZGV2X2lkXG4iKTsKKyAgICByZXR1cm47CisgIH0KKworICAvKiBDaGVjayBmb3IgY29ycnVwdGlvbiBhbmQgc2V0IGEgZmxhZyBpZiBzbyAqLworICBSZWFkTVJlZyggKGR0MzE1NV9sYmFzZVsgbWlub3IgXSArIENTUjEpLCBjc3IxX3IucmVnICk7CisKKyAgaWYgKCAoY3NyMV9yLmZsZC5GTERfQ1JQVF9FVkUpIHx8IChjc3IxX3IuZmxkLkZMRF9DUlBUX09ERCkgKQorICAgIHsKKyAgICAgIC8qIFRPRE86IHRoaXMgc2hvdWxkIHByb2JhYmx5IHN0b3AgYWNxdWlzaXRpb24gKi8KKyAgICAgIC8qIGFuZCBzZXQgc29tZSBmbGFncyBzbyB0aGF0IGR0MzE1NV9yZWFkICAgICAgKi8KKyAgICAgIC8qIHJldHVybnMgYW4gZXJyb3IgbmV4dCB0aW1lIGl0IGlzIGNhbGxlZCAgICAgKi8KKyAgICAgIGR0MzE1NV9lcnJubyA9IERUX0VSUl9DT1JSVVBUOworICAgICAgcHJpbnRrKCJkdDMxNTU6ICBjb3JydXB0IGZpZWxkXG4iKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgUmVhZE1SZWcoKGR0MzE1NV9sYmFzZVsgbWlub3IgXSArIElOVF9DU1IpLCBpbnRfY3NyX3IucmVnKTsKKworICAvKiBIYW5kbGUgdGhlIGV2ZW4gZmllbGQgLi4uICovCisgIGlmIChpbnRfY3NyX3IuZmxkLkZMRF9FTkRfRVZFKQorICAgIHsKKyAgICAgIGlmICggKGR0MzE1NV9zdGF0dXNbIG1pbm9yIF0uc3RhdGUgJiBEVDMxNTVfU1RBVEVfTU9ERSkgPT0KKwkgICBEVDMxNTVfU1RBVEVfRkxEICkKKwl7CisJICBkdDMxNTVfZmJ1ZmZlclsgbWlub3IgXS0+ZnJhbWVfY291bnQrKzsKKwl9CisKKyAgICAgIFJlYWRJMkMoZHQzMTU1X2xiYXNlWyBtaW5vciBdLCBFVkVOX0NTUiwgJmkyY19ldmVuX2Nzci5yZWcpOworCisgICAgICAvKiBDbGVhciB0aGUgaW50ZXJydXB0PyAqLworICAgICAgaW50X2Nzcl9yLmZsZC5GTERfRU5EX0VWRSA9IDE7CisKKyAgICAgIC8qIGRpc2FibGUgdGhlIGludGVycnVwdCBpZiBsYXN0IGZpZWxkICovCisgICAgICBpZiAoZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPnN0b3BfYWNxdWlyZSkKKwl7CisJICBwcmludGsoImR0MzE1NTogIGV2ZW4gc3RvcHBlZC5cbiIpOworCSAgZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPmV2ZW5fc3RvcHBlZCA9IDE7CisJICBpZiAoaTJjX2V2ZW5fY3NyLmZsZC5TTkdMX0VWRSkKKwkgICAgeworCSAgICAgIGludF9jc3Jfci5mbGQuRkxEX0VORF9FVkVfRU4gPSAwOworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICBpMmNfZXZlbl9jc3IuZmxkLlNOR0xfRVZFICA9IDE7CisJICAgIH0KKwl9CisKKyAgICAgIFdyaXRlTVJlZyggKGR0MzE1NV9sYmFzZVsgbWlub3IgXSArIElOVF9DU1IpLCBpbnRfY3NyX3IucmVnICk7CisKKyAgICAgIC8qIFNldCB1cCBuZXh0IERNQSBpZiB3ZSBhcmUgZG9pbmcgRklFTERTICovCisgICAgICBpZiAoIChkdDMxNTVfc3RhdHVzWyBtaW5vciBdLnN0YXRlICYgRFQzMTU1X1NUQVRFX01PREUgKSA9PQorCSAgIERUMzE1NV9TVEFURV9GTEQpCisJeworCSAgLyogR0NTIChBdWcgMiwgMjAwMikgLS0gSW4gZmllbGQgbW9kZSwgZG1hIHRoZSBvZGQgZmllbGQKKwkgICAgIGludG8gdGhlIGxvd2VyIGhhbGYgb2YgdGhlIGJ1ZmZlciAqLworCSAgY29uc3QgdTMyIHN0cmlkZSA9ICBkdDMxNTVfc3RhdHVzWyBtaW5vciBdLmNvbmZpZy5jb2xzOworCSAgYnVmZmVyX2FkZHIgPSBkdDMxNTVfZmJ1ZmZlclsgbWlub3IgXS0+CisJICAgIGZyYW1lX2luZm9bIGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT5hY3RpdmVfYnVmIF0uYWRkcgorCSAgICArIChEVDMxNTVfTUFYX1JPV1MgLyAyKSAqIHN0cmlkZTsKKwkgIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOworCSAgbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwkgIHdha2VfdXBfaW50ZXJydXB0aWJsZSggJmR0MzE1NV9yZWFkX3dhaXRfcXVldWVbIG1pbm9yIF0gKTsKKworCSAgLyogU2V0IHVwIHRoZSBETUEgYWRkcmVzcyBmb3IgdGhlIG5leHQgZmllbGQgKi8KKwkgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkgIFdyaXRlTVJlZygoZHQzMTU1X2xiYXNlWyBtaW5vciBdICsgT0REX0RNQV9TVEFSVCksIGJ1ZmZlcl9hZGRyKTsKKwl9CisKKyAgICAgIC8qIENoZWNrIGZvciBlcnJvcnMuICovCisgICAgICBpMmNfZXZlbl9jc3IuZmxkLkRPTkVfRVZFID0gMTsKKyAgICAgIGlmICggaTJjX2V2ZW5fY3NyLmZsZC5FUlJPUl9FVkUgKQorCWR0MzE1NV9lcnJubyA9IERUX0VSUl9PVkVSUlVOOworCisgICAgICBXcml0ZUkyQyggZHQzMTU1X2xiYXNlWyBtaW5vciBdLCBFVkVOX0NTUiwgaTJjX2V2ZW5fY3NyLnJlZyApOworCisgICAgICAvKiBOb3RlIHRoYXQgd2UgYWN0dWFsbHkgc2F3IGFuIGV2ZW4gZmllbGQgbWVhbmluZyAgKi8KKyAgICAgIC8qIHRoYXQgc3Vic2VxdWVudCBvZGQgZmllbGQgY29tcGxldGUgdGhlIGZyYW1lICAgICAqLworICAgICAgZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPmV2ZW5faGFwcGVuZWQgPSAxOworCisgICAgICAvKiByZWNvcmRpbmcgdGhlIHRpbWUgdGhhdCB0aGUgZXZlbiBmaWVsZCBmaW5pc2hlZCwgdGhpcyBzaG91bGQgYmUgKi8KKyAgICAgIC8qIGFib3V0IHRpbWUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgZnJhbWUgKi8KKyAgICAgIGRvX2dldHRpbWVvZmRheSggJihkdDMxNTVfZmJ1ZmZlclsgbWlub3IgXS0+CisJCQkgZnJhbWVfaW5mb1sgZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPgorCQkJCSAgICAgYWN0aXZlX2J1ZiBdLnRpbWUpICk7CisgICAgICByZXR1cm47CisgICAgfQorCisgIC8qIC4uLiBub3cgaGFuZGxlIHRoZSBvZGQgZmllbGQgKi8KKyAgaWYgKCBpbnRfY3NyX3IuZmxkLkZMRF9FTkRfT0REICkKKyAgICB7CisgICAgICBSZWFkSTJDKCBkdDMxNTVfbGJhc2VbIG1pbm9yIF0sIE9ERF9DU1IsICZpMmNfb2RkX2Nzci5yZWcgKTsKKworICAgICAgLyogQ2xlYXIgdGhlIGludGVycnVwdD8gKi8KKyAgICAgIGludF9jc3Jfci5mbGQuRkxEX0VORF9PREQgPSAxOworCisgICAgICBpZiAoZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPmV2ZW5faGFwcGVuZWQgfHwKKwkgIChkdDMxNTVfc3RhdHVzWyBtaW5vciBdLnN0YXRlICYgRFQzMTU1X1NUQVRFX01PREUpID09CisJICBEVDMxNTVfU1RBVEVfRkxEKQorCXsKKwkgIGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT5mcmFtZV9jb3VudCsrOworCX0KKworICAgICAgaWYgKCBkdDMxNTVfZmJ1ZmZlclsgbWlub3IgXS0+c3RvcF9hY3F1aXJlICYmCisJICAgZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPmV2ZW5fc3RvcHBlZCApCisJeworCSAgcHJpbnRrKEtFUk5fREVCVUcgImR0MzE1NTogIHN0b3BwaW5nIG9kZC4uXG4iKTsKKwkgIGlmICggaTJjX29kZF9jc3IuZmxkLlNOR0xfT0REICkKKwkgICAgeworCSAgICAgIC8qIGRpc2FibGUgaW50ZXJydXB0cyAqLworCSAgICAgIGludF9jc3Jfci5mbGQuRkxEX0VORF9PRERfRU4gPSAwOworCSAgICAgIGR0MzE1NV9zdGF0dXNbIG1pbm9yIF0uc3RhdGUgJj0gfihEVDMxNTVfU1RBVEVfU1RPUHwweGZmKTsKKworCSAgICAgIC8qIG1hcmsgdGhlIHN5c3RlbSBzdG9wcGVkOiAqLworCSAgICAgIGR0MzE1NV9zdGF0dXNbIG1pbm9yIF0uc3RhdGUgfD0gRFQzMTU1X1NUQVRFX0lETEU7CisJICAgICAgZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPnN0b3BfYWNxdWlyZSA9IDA7CisJICAgICAgZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPmV2ZW5fc3RvcHBlZCA9IDA7CisKKwkgICAgICBwcmludGsoS0VSTl9ERUJVRyAiZHQzMTU1OiAgc3RhdGUgaXMgbm93ICV4XG4iLAorCQkgICAgIGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlKTsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgaTJjX29kZF9jc3IuZmxkLlNOR0xfT0REICA9IDE7CisJICAgIH0KKwl9CisKKyAgICAgIFdyaXRlTVJlZyggKGR0MzE1NV9sYmFzZVsgbWlub3IgXSArIElOVF9DU1IpLCBpbnRfY3NyX3IucmVnICk7CisKKyAgICAgIC8qIGlmIHRoZSBvZGQgZmllbGQgaGFzIGJlZW4gYWNxdWlyZWQsIHRoZW4gICAgICovCisgICAgICAvKiBjaGFuZ2UgdGhlIG5leHQgZG1hIGxvY2F0aW9uIGZvciBib3RoIGZpZWxkcyAqLworICAgICAgLyogYW5kIHdha2UgdXAgdGhlIHByb2Nlc3MgaWYgc2xlZXBpbmcgICAgICAgICAgKi8KKyAgICAgIGlmICggZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPmV2ZW5faGFwcGVuZWQgfHwKKwkgICAoZHQzMTU1X3N0YXR1c1sgbWlub3IgXS5zdGF0ZSAmIERUMzE1NV9TVEFURV9NT0RFKSA9PQorCSAgIERUMzE1NV9TVEFURV9GTEQgKQorCXsKKworCSAgbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CisJICBsb2NhbF9pcnFfZGlzYWJsZSgpOworCisjaWZkZWYgREVCVUdfUVVFU19CCisJICBwcmludHF1ZXMoIG1pbm9yICk7CisjZW5kaWYKKwkgIGlmICggZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPm5idWZmZXJzID4gMiApCisJICAgIHsKKwkgICAgICBpZiAoICFhcmVfZW1wdHlfYnVmZmVycyggbWlub3IgKSApCisJCXsKKwkJICAvKiBUaGUgbnVtYmVyIG9mIGFjdGl2ZSArIGxvY2tlZCBidWZmZXJzIGlzCisJCSAgICogYXQgbW9zdCAyLCBhbmQgc2luY2UgdGhlcmUgYXJlIG5vbmUgZW1wdHksIHRoZXJlCisJCSAgICogbXVzdCBiZSBhdCBsZWFzdCBuYnVmZmVycy0yIHJlYWR5IGJ1ZmZlcnMuCisJCSAgICogVGhpcyBpcyB3aGVyZSB3ZSAnZHJvcCBmcmFtZXMnLCBvbGRlc3QgZmlyc3QuICovCisJCSAgcHVzaF9lbXB0eSggcG9wX3JlYWR5KCBtaW5vciApLCAgbWlub3IgKTsKKwkJfQorCisJICAgICAgLyogVGhlIHJlYWR5X3F1ZSBjYW4ndCBiZSBmdWxsLCBzaW5jZSB3ZSBrbm93CisJICAgICAgICogdGhlcmUgaXMgb25lIGFjdGl2ZSBidWZmZXIgcmlnaHQgbm93LCBzbyBpdCdzIHNhZmUKKwkgICAgICAgKiB0byBwdXNoIHRoZSBhY3RpdmUgYnVmIG9uIHRoZSByZWFkeV9xdWUuICovCisJICAgICAgcHVzaF9yZWFkeSggbWlub3IsIGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT5hY3RpdmVfYnVmICk7CisJICAgICAgLyogVGhlcmUncyBhdCBsZWFzdCAxIGVtcHR5IC0tIG1ha2UgaXQgYWN0aXZlICovCisJICAgICAgZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPmFjdGl2ZV9idWYgPSBwb3BfZW1wdHkoIG1pbm9yICk7CisJICAgICAgZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPgorCQlmcmFtZV9pbmZvWyBkdDMxNTVfZmJ1ZmZlclsgbWlub3IgXS0+CisJCQkgICAgYWN0aXZlX2J1ZiBdLnRhZyA9ICsrdW5pcXVlX3RhZzsKKwkgICAgfQorCSAgZWxzZSAvKiBuYnVmZmVycyA9PSAyLCBzcGVjaWFsIGNhc2UgKi8KKwkgICAgeyAvKiBUaGVyZSBpcyAxIGFjdGl2ZSBidWZmZXIuCisJICAgICAgICogSWYgdGhlcmUgaXMgYSBsb2NrZWQgYnVmZmVyLCBrZWVwIHRoZSBhY3RpdmUgYnVmZmVyCisJICAgICAgICogdGhlIHNhbWUgLS0gdGhhdCBtZWFucyB3ZSBkcm9wIGEgZnJhbWUuCisJICAgICAgICovCisJICAgICAgaWYgKCBkdDMxNTVfZmJ1ZmZlclsgbWlub3IgXS0+bG9ja2VkX2J1ZiA8IDAgKQorCQl7CisJCSAgcHVzaF9yZWFkeSggbWlub3IsCisJCQkgICAgICBkdDMxNTVfZmJ1ZmZlclsgbWlub3IgXS0+YWN0aXZlX2J1ZiApOworCQkgIGlmIChhcmVfZW1wdHlfYnVmZmVycyggbWlub3IgKSApCisJCSAgICB7CisJCSAgICAgIGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT5hY3RpdmVfYnVmID0KKwkJCXBvcF9lbXB0eSggbWlub3IgKTsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7IC8qIG5vIGVtcHR5IG9yIGxvY2tlZCBidWZmZXJzLCBzbyB1c2UgYSByZWFkeWJ1ZiAqLworCQkgICAgICBkdDMxNTVfZmJ1ZmZlclsgbWlub3IgXS0+YWN0aXZlX2J1ZiA9CisJCQlwb3BfcmVhZHkoIG1pbm9yICk7CisJCSAgICB9CisJCX0KKwkgICAgfQorCisjaWZkZWYgREVCVUdfUVVFU19CCisJICBwcmludHF1ZXMoIG1pbm9yICk7CisjZW5kaWYKKworCSAgZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPmV2ZW5faGFwcGVuZWQgPSAwOworCisJICB3YWtlX3VwX2ludGVycnVwdGlibGUoICZkdDMxNTVfcmVhZF93YWl0X3F1ZXVlWyBtaW5vciBdICk7CisKKwkgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9CisKKworICAgICAgLyogU2V0IHVwIHRoZSBETUEgYWRkcmVzcyBmb3IgdGhlIG5leHQgZnJhbWUvZmllbGQgKi8KKyAgICAgIGJ1ZmZlcl9hZGRyID0gZHQzMTU1X2ZidWZmZXJbIG1pbm9yIF0tPgorCWZyYW1lX2luZm9bIGR0MzE1NV9mYnVmZmVyWyBtaW5vciBdLT5hY3RpdmVfYnVmIF0uYWRkcjsKKyAgICAgIGlmICggKGR0MzE1NV9zdGF0dXNbIG1pbm9yIF0uc3RhdGUgJiBEVDMxNTVfU1RBVEVfTU9ERSkgPT0KKwkgICBEVDMxNTVfU1RBVEVfRkxEICkKKwl7CisJICBXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVsgbWlub3IgXSArIEVWRU5fRE1BX1NUQVJUKSwgYnVmZmVyX2FkZHIpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVsgbWlub3IgXSArIEVWRU5fRE1BX1NUQVJUKSwgYnVmZmVyX2FkZHIpOworCisJICBXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVsgbWlub3IgXSArIE9ERF9ETUFfU1RBUlQpLCBidWZmZXJfYWRkcgorCQkgICAgKyBkdDMxNTVfc3RhdHVzWyBtaW5vciBdLmNvbmZpZy5jb2xzKTsKKwl9CisKKyAgICAgIC8qIERvIGVycm9yIGNoZWNraW5nICovCisgICAgICBpMmNfb2RkX2Nzci5mbGQuRE9ORV9PREQgPSAxOworICAgICAgaWYgKCBpMmNfb2RkX2Nzci5mbGQuRVJST1JfT0REICkKKwlkdDMxNTVfZXJybm8gPSBEVF9FUlJfT1ZFUlJVTjsKKworICAgICAgV3JpdGVJMkMoZHQzMTU1X2xiYXNlWyBtaW5vciBdLCBPRERfQ1NSLCBpMmNfb2RkX2Nzci5yZWcgKTsKKworICAgICAgcmV0dXJuOworICAgIH0KKyAgLyogSWYgd2UgZ2V0IGhlcmUsIHRoZSBPZGQgRmllbGQgd2Fzbid0IGl0IGVpdGhlci4uLiAqLworICBwcmludGsoICJuZWl0aGVyIGV2ZW4gbm9yIG9kZC4gIHNoYXJlZCBwZXJoYXBzP1xuIik7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaW5pdF9pc3IoaW50IG1pbm9yKQorICogICB0dXJucyBvbiBpbnRlcnVwdCBnZW5lcmF0aW9uIGZvciB0aGUgY2FyZAorICogICBkZXNpZ25hdGVkIGJ5ICJtaW5vciIuCisgKiAgIEl0IGlzIGNhbGxlZCAqb25seSogZnJvbSBpbnNpZGUgaW9jdGwoKS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIGR0MzE1NV9pbml0X2lzcihpbnQgbWlub3IpCit7CisgIGNvbnN0IHUzMiBzdHJpZGUgPSAgZHQzMTU1X3N0YXR1c1sgbWlub3IgXS5jb25maWcuY29sczsKKworICBzd2l0Y2ggKGR0MzE1NV9zdGF0dXNbIG1pbm9yIF0uc3RhdGUgJiBEVDMxNTVfU1RBVEVfTU9ERSkKKyAgICB7CisgICAgY2FzZSBEVDMxNTVfU1RBVEVfRkxEOgorICAgICAgeworCWV2ZW5fZG1hX3N0YXJ0X3IgID0gZHQzMTU1X3N0YXR1c1sgbWlub3IgXS4KKwkgIGZidWZmZXIuZnJhbWVfaW5mb1sgZHQzMTU1X3N0YXR1c1sgbWlub3IgXS5mYnVmZmVyLmFjdGl2ZV9idWYgXS5hZGRyOworCWV2ZW5fZG1hX3N0cmlkZV9yID0gMDsKKwlvZGRfZG1hX3N0cmlkZV9yICA9IDA7CisKKwlXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVsgbWlub3IgXSArIEVWRU5fRE1BX1NUQVJUKSwKKwkJICBldmVuX2RtYV9zdGFydF9yKTsKKwlXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVsgbWlub3IgXSArIEVWRU5fRE1BX1NUUklERSksCisJCSAgZXZlbl9kbWFfc3RyaWRlX3IpOworCVdyaXRlTVJlZygoZHQzMTU1X2xiYXNlWyBtaW5vciBdICsgT0REX0RNQV9TVFJJREUpLAorCQkgIG9kZF9kbWFfc3RyaWRlX3IpOworCWJyZWFrOworICAgICAgfQorCisgICAgY2FzZSBEVDMxNTVfU1RBVEVfRlJBTUU6CisgICAgZGVmYXVsdDoKKyAgICAgIHsKKwlldmVuX2RtYV9zdGFydF9yICA9IGR0MzE1NV9zdGF0dXNbIG1pbm9yIF0uCisJICBmYnVmZmVyLmZyYW1lX2luZm9bIGR0MzE1NV9zdGF0dXNbIG1pbm9yIF0uZmJ1ZmZlci5hY3RpdmVfYnVmIF0uYWRkcjsKKwlvZGRfZG1hX3N0YXJ0X3IgICA9ICBldmVuX2RtYV9zdGFydF9yICsgc3RyaWRlOworCWV2ZW5fZG1hX3N0cmlkZV9yID0gIHN0cmlkZTsKKwlvZGRfZG1hX3N0cmlkZV9yICA9ICBzdHJpZGU7CisKKwlXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVsgbWlub3IgXSArIEVWRU5fRE1BX1NUQVJUKSwKKwkJICBldmVuX2RtYV9zdGFydF9yKTsKKwlXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVsgbWlub3IgXSArIE9ERF9ETUFfU1RBUlQpLAorCQkgIG9kZF9kbWFfc3RhcnRfcik7CisJV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbIG1pbm9yIF0gKyBFVkVOX0RNQV9TVFJJREUpLAorCQkgIGV2ZW5fZG1hX3N0cmlkZV9yKTsKKwlXcml0ZU1SZWcoKGR0MzE1NV9sYmFzZVsgbWlub3IgXSArIE9ERF9ETUFfU1RSSURFKSwKKwkJICBvZGRfZG1hX3N0cmlkZV9yKTsKKwlicmVhazsKKyAgICAgIH0KKyAgICB9CisKKyAgLyogNTAvNjAgSHogc2hvdWxkIGJlIHNldCBiZWZvcmUgdGhpcyBwb2ludCBidXQgbGV0J3MgbWFrZSBzdXJlIGl0IGlzICovCisgIC8qIHJpZ2h0IGFueXdheSAqLworCisgIFJlYWRJMkMoZHQzMTU1X2xiYXNlWyBtaW5vciBdLCBDT05GSUcsICZpMmNfY3NyMi5yZWcpOworICBpMmNfY3NyMi5mbGQuSFo1MCA9IEZPUk1BVDUwSFo7CisgIFdyaXRlSTJDKGR0MzE1NV9sYmFzZVsgbWlub3IgXSwgQ09ORklHLCBpMmNfY29uZmlnLnJlZyk7CisKKyAgLyogZW5hYmxlIGJ1c21hc3RlciBjaGlwLCBjbGVhciBmbGFncyAqLworCisgIC8qCisgICAqIFRPRE86CisgICAqIHNob3VsZG4ndCB3ZSBiZSBjb25jZXJlZCB3aXRoIGNvbnRpbnVvdXMgdmFsdWVzIG9mCisgICAqIERUMzE1NV9TTkFQICYgRFQzMTU1X0FDUSBoZXJlPyAoU1MpCisgICAqLworCisgIGNzcjFfci5yZWcgICAgICAgICAgICAgICAgPSAwOworICBjc3IxX3IuZmxkLkNBUF9DT05UX0VWRSAgID0gMTsgLyogdXNlIGNvbnRpbnVvdXMgY2FwdHVyZSBiaXRzIHRvICovCisgIGNzcjFfci5mbGQuQ0FQX0NPTlRfT0REICAgPSAxOyAvKiBlbmFibGUgKi8KKyAgY3NyMV9yLmZsZC5GTERfRE5fRVZFICAgICA9IDE7IC8qIHdyaXRpbmcgYSAxIGNsZWFycyBmbGFncyAqLworICBjc3IxX3IuZmxkLkZMRF9ETl9PREQgICAgID0gMTsKKyAgY3NyMV9yLmZsZC5TUlNUICAgICAgICAgICA9IDE7IC8qIHJlc2V0ICAgICAgICAtIG11c3QgYmUgMSAqLworICBjc3IxX3IuZmxkLkZJRk9fRU4gICAgICAgID0gMTsgLyogZmlmbyBjb250cm9sIC0gbXVzdCBiZSAxICovCisgIGNzcjFfci5mbGQuRkxEX0NSUFRfRVZFICAgPSAxOyAvKiB3cml0aW5nIGEgMSBjbGVhcnMgZmxhZ3MgKi8KKyAgY3NyMV9yLmZsZC5GTERfQ1JQVF9PREQgICA9IDE7CisKKyAgV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbIG1pbm9yIF0gKyBDU1IxKSxjc3IxX3IucmVnKTsKKworICAvKiBFbmFibGUgaW50ZXJydXB0cyBhdCB0aGUgZW5kIG9mIGVhY2ggZmllbGQgKi8KKworICBpbnRfY3NyX3IucmVnID0gMDsKKyAgaW50X2Nzcl9yLmZsZC5GTERfRU5EX0VWRV9FTiA9IDE7CisgIGludF9jc3Jfci5mbGQuRkxEX0VORF9PRERfRU4gPSAxOworICBpbnRfY3NyX3IuZmxkLkZMRF9TVEFSVF9FTiA9IDA7CisKKyAgV3JpdGVNUmVnKChkdDMxNTVfbGJhc2VbIG1pbm9yIF0gKyBJTlRfQ1NSKSwgaW50X2Nzcl9yLnJlZyk7CisKKyAgLyogc3RhcnQgaW50ZXJuYWwgQlVTWSBiaXRzICovCisKKyAgUmVhZEkyQyhkdDMxNTVfbGJhc2VbIG1pbm9yIF0sIENTUjIsICZpMmNfY3NyMi5yZWcpOworICBpMmNfY3NyMi5mbGQuQlVTWV9PREQgID0gMTsKKyAgaTJjX2NzcjIuZmxkLkJVU1lfRVZFICA9IDE7CisgIFdyaXRlSTJDKGR0MzE1NV9sYmFzZVsgbWlub3IgXSwgQ1NSMiwgaTJjX2NzcjIucmVnKTsKKworICAvKiBOb3cgaXRzIHVwIHRvIHRoZSBpbnRlcnJ1cHQgcm91dGluZSEhICovCisKKyAgcmV0dXJuOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaW9jdGwoKQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgZHQzMTU1X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQlzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCXVuc2lnbmVkIGludCBjbWQsCisJCQl1bnNpZ25lZCBsb25nIGFyZykKK3sKKyAgaW50IG1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldik7IC8qIFdoYXQgZGV2aWNlIGFyZSB3ZSBpb2N0bCgpJ2luZz8gKi8KKworICBpZiAoIG1pbm9yID49IE1BWEJPQVJEUyB8fCBtaW5vciA8IDAgKQorICAgIHJldHVybiAtRU5PREVWOworCisgIC8qIG1ha2Ugc3VyZSBpdCBpcyB2YWxpZCBjb21tYW5kICovCisgIGlmIChfSU9DX05SKGNtZCkgPiBEVDMxNTVfSU9DX01BWE5SKQorICAgIHsKKyAgICAgIHByaW50aygiRFQzMTU1OiBpbnZhbGlkIElPQ1RMKDB4JXgpXG4iLGNtZCk7CisgICAgICBwcmludGsoIkRUMzE1NTogVmFsaWQgY29tbWFuZHMgKDB4JXgpLCAoMHgleCksICgweCV4KSwgKDB4JXgpLCAoMHgleClcbiIsCisJICAgICAodW5zaWduZWQgaW50KURUMzE1NV9HRVRfQ09ORklHLAorCSAgICAgKHVuc2lnbmVkIGludClEVDMxNTVfU0VUX0NPTkZJRywKKwkgICAgICh1bnNpZ25lZCBpbnQpRFQzMTU1X1NUQVJULAorCSAgICAgKHVuc2lnbmVkIGludClEVDMxNTVfU1RPUCwKKwkgICAgICh1bnNpZ25lZCBpbnQpRFQzMTU1X0ZMVVNIKTsKKyAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICBzd2l0Y2ggKGNtZCkKKyAgICB7CisgICAgY2FzZSBEVDMxNTVfU0VUX0NPTkZJRzoKKyAgICAgIHsKKwlpZiAoZHQzMTU1X3N0YXR1c1ttaW5vcl0uc3RhdGUgIT0gRFQzMTU1X1NUQVRFX0lETEUpCisJICByZXR1cm4gLUVCVVNZOworCisJeworCSAgc3RydWN0IGR0MzE1NV9jb25maWdfcyB0bXA7CisJICBpZiAoY29weV9mcm9tX3VzZXIoKHZvaWQgKikmdG1wLCAodm9pZCAqKSBhcmcsIHNpemVvZih0bXApKSkKKwkgICAgICByZXR1cm4gLUVGQVVMVDsKKwkgIC8qIGNoZWNrIGZvciB2YWxpZCBzZXR0aW5ncyAqLworCSAgaWYgKHRtcC5yb3dzID4gRFQzMTU1X01BWF9ST1dTIHx8CisJICAgICAgdG1wLmNvbHMgPiBEVDMxNTVfTUFYX0NPTFMgfHwKKwkgICAgICAodG1wLmFjcV9tb2RlICE9IERUMzE1NV9NT0RFX0ZSQU1FICYmCisJICAgICAgIHRtcC5hY3FfbW9kZSAhPSBEVDMxNTVfTU9ERV9GSUVMRCkgfHwKKwkgICAgICAodG1wLmNvbnRpbnVvdXMgIT0gRFQzMTU1X1NOQVAgJiYKKwkgICAgICAgdG1wLmNvbnRpbnVvdXMgIT0gRFQzMTU1X0FDUSkpCisJICAgIHsKKwkgICAgICByZXR1cm4gLUVJTlZBTDsKKwkgICAgfQorCSAgZHQzMTU1X3N0YXR1c1ttaW5vcl0uY29uZmlnID0gdG1wOworCX0KKwlyZXR1cm4gMDsKKyAgICAgIH0KKyAgICBjYXNlIERUMzE1NV9HRVRfQ09ORklHOgorICAgICAgeworCWlmIChjb3B5X3RvX3VzZXIoKHZvaWQgKikgYXJnLCAodm9pZCAqKSAmZHQzMTU1X3N0YXR1c1ttaW5vcl0sCisJCSAgICAgc2l6ZW9mKGR0MzE1NV9zdGF0dXNfdCkgKSkKKwkgICAgcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7CisgICAgICB9CisgICAgY2FzZSBEVDMxNTVfRkxVU0g6IC8qIEZsdXNoZXMgdGhlIGJ1ZmZlcnMgLS0gZW5zdXJlcyBmcmVzaCBkYXRhICovCisgICAgICB7CisJaWYgKGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlICE9IERUMzE1NV9TVEFURV9JRExFKQorCSAgcmV0dXJuIC1FQlVTWTsKKwlyZXR1cm4gZHQzMTU1X2ZsdXNoKG1pbm9yKTsKKyAgICAgIH0KKyAgICBjYXNlIERUMzE1NV9TVE9QOgorICAgICAgeworCWlmIChkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSAmIERUMzE1NV9TVEFURV9TVE9QIHx8CisJICAgIGR0MzE1NV9zdGF0dXNbbWlub3JdLmZidWZmZXIuc3RvcF9hY3F1aXJlKQorCSAgcmV0dXJuIC1FQlVTWTsKKworCWlmIChkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSA9PSBEVDMxNTVfU1RBVEVfSURMRSkKKwkgIHJldHVybiAwOworCisJcXVpY2tfc3RvcChtaW5vcik7CisJaWYgKGNvcHlfdG9fdXNlcigodm9pZCAqKSBhcmcsICh2b2lkICopICZkdDMxNTVfc3RhdHVzW21pbm9yXSwKKwkJICAgICBzaXplb2YoZHQzMTU1X3N0YXR1c190KSkpCisJICAgIHJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworICAgICAgfQorICAgIGNhc2UgRFQzMTU1X1NUQVJUOgorICAgICAgeworCWlmIChkdDMxNTVfc3RhdHVzW21pbm9yXS5zdGF0ZSAhPSBEVDMxNTVfU1RBVEVfSURMRSkKKwkgIHJldHVybiAtRUJVU1k7CisKKwlkdDMxNTVfc3RhdHVzW21pbm9yXS5mYnVmZmVyLnN0b3BfYWNxdWlyZSA9IDA7CisJZHQzMTU1X3N0YXR1c1ttaW5vcl0uZmJ1ZmZlci5mcmFtZV9jb3VudCA9IDA7CisKKwkvKiBTZXQgdGhlIE1PREUgaW4gdGhlIHN0YXR1cyAtLSB3ZSBkZWZhdWx0IHRvIEZSQU1FICovCisJaWYgKGR0MzE1NV9zdGF0dXNbbWlub3JdLmNvbmZpZy5hY3FfbW9kZSA9PSBEVDMxNTVfTU9ERV9GSUVMRCkKKwkgIHsKKwkgICAgZHQzMTU1X3N0YXR1c1ttaW5vcl0uc3RhdGUgPSBEVDMxNTVfU1RBVEVfRkxEOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgZHQzMTU1X3N0YXR1c1ttaW5vcl0uc3RhdGUgPSBEVDMxNTVfU1RBVEVfRlJBTUU7CisJICB9CisKKwlkdDMxNTVfaW5pdF9pc3IobWlub3IpOworCWlmIChjb3B5X3RvX3VzZXIoICh2b2lkICopIGFyZywgKHZvaWQgKikgJmR0MzE1NV9zdGF0dXNbbWlub3JdLAorCQkgICAgICBzaXplb2YoZHQzMTU1X3N0YXR1c190KSkpCisJICAgIHJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworICAgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICB7CisJcHJpbnRrKCJEVDMxNTU6IGludmFsaWQgSU9DVEwoMHgleClcbiIsY21kKTsKKyAgICAgIHByaW50aygiRFQzMTU1OiBWYWxpZCBjb21tYW5kcyAoMHgleCksICgweCV4KSwgKDB4JXgpLCAoMHgleCksICgweCV4KVxuIiwKKwkgICAgICh1bnNpZ25lZCBpbnQpRFQzMTU1X0dFVF9DT05GSUcsCisJICAgICAodW5zaWduZWQgaW50KURUMzE1NV9TRVRfQ09ORklHLAorCSAgICAgRFQzMTU1X1NUQVJULCBEVDMxNTVfU1RPUCwgRFQzMTU1X0ZMVVNIKTsKKwlyZXR1cm4gLUVOT1NZUzsKKyAgICAgIH0KKyAgICB9CisgIHJldHVybiAtRU5PU1lTOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIG1tYXAoKQorICoKKyAqIG9ubHkgYWxsb3cgdGhlIHVzZXIgdG8gbW1hcCB0aGUgcmVnaXN0ZXJzIGFuZCBidWZmZXIKKyAqIEl0IGlzIHF1aXRlIHBvc3NpYmxlIHRoYXQgdGhpcyBpcyBicm9rZW4sIHNpbmNlIHRoZQorICogYWRkaXRpb24gb2Ygb2YgdGhlIGNhcGFjaXR5IGZvciB0d28gY2FyZHMhISEhISEhIQorICogSXQgKmxvb2tzKiBsaWtlIGl0IHNob3VsZCB3b3JrIGJ1dCBzaW5jZSBJJ20gbm90CisgKiBzdXJlIGhvdyB0byB1c2UgaXQsIEknbSBub3QgYWN0dWFsbHkgc3VyZS4gKE5KQz8gZGl0dG8gYnkgU1MpCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgaW50IGR0MzE1NV9tbWFwIChzdHJ1Y3QgZmlsZSAqIGZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSkKK3sKKyAgLyogd2hpY2ggZGV2aWNlIGFyZSB3ZSBtbWFwcGluZz8gKi8KKyAgaW50CQkJCW1pbm9yID0gTUlOT1IoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcmRldik7CisgIHVuc2lnbmVkIGxvbmcJb2Zmc2V0OworICBvZmZzZXQgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CisKKyAgaWYgKG9mZnNldCA+PSBfX3BhKGhpZ2hfbWVtb3J5KSB8fCAoZmlsZS0+Zl9mbGFncyAmIE9fU1lOQykpCisgICAgdm1hLT52bV9mbGFncyB8PSBWTV9JTzsKKworICAvKiBEb24ndCB0cnkgdG8gc3dhcCBvdXQgcGh5c2ljYWwgcGFnZXMuLiAqLworICB2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEOworCisgIC8qIHRoZXkgYXJlIG1hcHBpbmcgdGhlIHJlZ2lzdGVycyBvciB0aGUgYnVmZmVyICovCisgIGlmICgob2Zmc2V0ID09IGR0MzE1NV9zdGF0dXNbbWlub3JdLnJlZ19hZGRyICYmCisgICAgICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0ID09IFBDSV9QQUdFX1NJWkUpIHx8CisgICAgICAob2Zmc2V0ID09IGR0MzE1NV9zdGF0dXNbbWlub3JdLm1lbV9hZGRyICYmCisgICAgICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0ID09IGR0MzE1NV9zdGF0dXNbbWlub3JdLm1lbV9zaXplKSkKKyAgICB7CisgICAgICBpZiAocmVtYXBfcGZuX3JhbmdlKHZtYSwKKwkJCXZtYS0+dm1fc3RhcnQsCisJCQlvZmZzZXQgPj4gUEFHRV9TSElGVCwKKwkJCXZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwKKwkJCXZtYS0+dm1fcGFnZV9wcm90KSkgeworCSAgcHJpbnRrKCJEVDMxNTU6IHJlbWFwX3BhZ2VfcmFuZ2UoKSBmYWlsZWQuXG4iKTsKKwkgIHJldHVybiAtRUFHQUlOOworCX0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICBwcmludGsoIkRUMzE1NTogZHQzMTU1X21tYXAoKSBiYWQgY2FsbC5cbiIpOworICAgICAgcmV0dXJuIC1FTlhJTzsKKyAgICB9CisKKyAgcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBvcGVuKCkKKyAqCisgKiBPdXIgc3BlY2lhbCBvcGVuIGNvZGUuCisgKiBNT0RfSU5DX1VTRV9DT1VOVCBtYWtlIHN1cmUgdGhhdCB0aGUgZHJpdmVyIG1lbW9yeSBpcyBub3QgZnJlZWQKKyAqIHdoaWxlIHRoZSBkZXZpY2UgaXMgaW4gdXNlLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBkdDMxNTVfb3Blbiggc3RydWN0IGlub2RlKiBpbm9kZSwgc3RydWN0IGZpbGUqIGZpbGVwKQoreworICBpbnQgbWlub3IgPSBNSU5PUihpbm9kZS0+aV9yZGV2KTsgLyogd2hhdCBkZXZpY2UgYXJlIHdlIG9wZW5pbmc/ICovCisgIGlmIChkdDMxNTVfZGV2X29wZW5bIG1pbm9yIF0pIHsKKyAgICBwcmludGsgKCJEVDMxNTU6ICBBbHJlYWR5IG9wZW5lZCBieSBhbm90aGVyIHByb2Nlc3MuXG4iKTsKKyAgICByZXR1cm4gLUVCVVNZOworICB9CisKKyAgaWYgKGR0MzE1NV9zdGF0dXNbIG1pbm9yIF0uZGV2aWNlX2luc3RhbGxlZD09MCkKKyAgICB7CisgICAgICBwcmludGsoIkRUMzE1NSBPcGVuIEVycm9yOiBObyBzdWNoIGRldmljZSBkdDMxNTUgbWlub3IgbnVtYmVyICVkXG4iLAorCSAgICAgbWlub3IpOworICAgICAgcmV0dXJuIC1FSU87CisgICAgfQorCisgIGlmIChkdDMxNTVfc3RhdHVzWyBtaW5vciBdLnN0YXRlICE9IERUMzE1NV9TVEFURV9JRExFKSB7CisgICAgcHJpbnRrICgiRFQzMTU1OiAgTm90IGluIGlkbGUgc3RhdGUgKHN0YXRlID0gJXgpXG4iLAorCSAgICBkdDMxNTVfc3RhdHVzWyBtaW5vciBdLnN0YXRlKTsKKyAgICByZXR1cm4gLUVCVVNZOworICB9CisKKyAgcHJpbnRrKCJEVDMxNTU6IERldmljZSBvcGVuZWQuXG4iKTsKKworICBkdDMxNTVfZGV2X29wZW5bIG1pbm9yIF0gPSAxIDsKKworICBkdDMxNTVfZmx1c2goIG1pbm9yICk7CisKKyAgLyogRGlzYWJsZSBBTEwgaW50ZXJydXB0cyAqLworICBpbnRfY3NyX3IucmVnID0gMDsKKyAgV3JpdGVNUmVnKCAoZHQzMTU1X2xiYXNlWyBtaW5vciBdICsgSU5UX0NTUiksIGludF9jc3Jfci5yZWcgKTsKKworICBpbml0X3dhaXRxdWV1ZV9oZWFkKCYoZHQzMTU1X3JlYWRfd2FpdF9xdWV1ZVttaW5vcl0pKTsKKworICByZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGNsb3NlKCkKKyAqCisgKiBOb3cgZGVjcmVtZW50IHRoZSB1c2UgY291bnQuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBkdDMxNTVfY2xvc2UoIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlcCkKK3sKKyAgaW50IG1pbm9yOworCisgIG1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldik7IC8qIHdoaWNoIGRldmljZSBhcmUgd2UgY2xvc2luZyAqLworICBpZiAoIWR0MzE1NV9kZXZfb3BlblsgbWlub3IgXSkKKyAgICB7CisgICAgICBwcmludGsoIkRUMzE1NTogYXR0ZW1wdCB0byBDTE9TRSBhIG5vdCBPUEVOIGRldmljZVxuIik7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgZHQzMTU1X2Rldl9vcGVuWyBtaW5vciBdID0gMDsKKworICAgICAgaWYgKGR0MzE1NV9zdGF0dXNbIG1pbm9yIF0uc3RhdGUgIT0gRFQzMTU1X1NUQVRFX0lETEUpCisJeworCSAgcXVpY2tfc3RvcChtaW5vcik7CisJfQorICAgIH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcmVhZCgpCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHNzaXplX3QgZHQzMTU1X3JlYWQoc3RydWN0IGZpbGUgKmZpbGVwLCBjaGFyIF9fdXNlciAqYnVmLAorCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisgIC8qIHdoaWNoIGRldmljZSBhcmUgd2UgcmVhZGluZyBmcm9tPyAqLworICBpbnQJCW1pbm9yID0gTUlOT1IoZmlsZXAtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3JkZXYpOworICB1MzIJCW9mZnNldDsKKyAgaW50CQlmcmFtZV9pbmRleDsKKyAgZnJhbWVfaW5mb190CSpmcmFtZV9pbmZvX3A7CisKKyAgLyogVE9ETzogdGhpcyBzaG91bGQgY2hlY2sgdGhlIGVycm9yIGZsYWcgYW5kICovCisgIC8qICAgcmV0dXJuIGFuIGVycm9yIG9uIGhhcmR3YXJlIGZhaWx1cmVzICovCisgIGlmIChjb3VudCAhPSBzaXplb2YoZHQzMTU1X3JlYWRfdCkpCisgICAgeworICAgICAgcHJpbnRrKCJEVDMxNTUgRVJST1IgKE5KQyk6IGNvdW50IGlzIG5vdCByaWdodFxuIik7CisgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKworICAvKiBIYWNrIGhlcmUgLS0gSSdtIGdvaW5nIHRvIGFsbG93IHJlYWRpbmcgZXZlbiB3aGVuIGlkbGUuCisgICAqIHRoaXMgaXMgc28gdGhhdCB0aGUgZnJhbWVzIGNhbiBiZSByZWFkIGFmdGVyIFNUT1AgaGFzCisgICAqIGJlZW4gY2FsbGVkLiAgTGVhdmluZyBpdCBoZXJlLCBjb21tZW50ZWQgb3V0LCBhcyBhIHJlbWluZGVyCisgICAqIGZvciBhIHNob3J0IHdoaWxlIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gcHJvYmxlbXMuCisgICAqIE5vdGUgdGhhdCBpZiB0aGUgZHJpdmVyIGlzIG5vdCBvcGVuZWQgaW4gbm9uX2Jsb2NraW5nIG1vZGUsCisgICAqIGFuZCB0aGUgZGV2aWNlIGlzIGlkbGUsIHRoZW4gaXQgY291bGQgc2l0IGhlcmUgZm9yZXZlciEgKi8KKworICAvKiAgaWYgKGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlID09IERUMzE1NV9TVEFURV9JRExFKSovCisgIC8qICAgIHJldHVybiAtRUJVU1k7Ki8KKworICAvKiBub24tYmxvY2tpbmcgcmVhZHMgc2hvdWxkIHJldHVybiBpZiBubyBkYXRhICovCisgIGlmIChmaWxlcC0+Zl9mbGFncyAmIE9fTkRFTEFZKQorICAgIHsKKyAgICAgIGlmICgoZnJhbWVfaW5kZXggPSBkdDMxNTVfZ2V0X3JlYWR5X2J1ZmZlcihtaW5vcikpIDwgMCkgeworCS8qcHJpbnRrKCAiZHQzMTU1OiAgbm8gYnVmZmVycyBhdmFpbGFibGUgKD8pXG4iKTsqLworCS8qIAkJcHJpbnRxdWVzKG1pbm9yKTsgKi8KKwlyZXR1cm4gLUVBR0FJTjsKKyAgICAgIH0KKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICAvKgorICAgICAgICogc2xlZXAgdGlsbCBkYXRhIGFycml2ZXMgLCBvciB3ZSBnZXQgaW50ZXJydXB0ZWQuCisgICAgICAgKiBOb3RlIHRoYXQgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCkgZG9lcyBub3QgYWN0dWFsbHkKKyAgICAgICAqIHNsZWVwL3dhaXQgaWYgaXQncyBjb25kaXRpb24gZXZhbHVhdGVzIHRvIHRydWUgdXBvbiBlbnRyeS4KKyAgICAgICAqLworICAgICAgd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGR0MzE1NV9yZWFkX3dhaXRfcXVldWVbbWlub3JdLAorCQkJICAgICAgIChmcmFtZV9pbmRleCA9IGR0MzE1NV9nZXRfcmVhZHlfYnVmZmVyKG1pbm9yKSkKKwkJCSAgICAgICA+PSAwKTsKKworICAgICAgaWYgKGZyYW1lX2luZGV4IDwgMCkKKwl7CisJICBwcmludGsgKCJEVDMxNTU6IHJlYWQ6IGludGVycnVwdGVkXG4iKTsKKwkgIHF1aWNrX3N0b3AgKG1pbm9yKTsKKwkgIHByaW50cXVlcyhtaW5vcik7CisJICByZXR1cm4gLUVJTlRSOworCX0KKyAgICB9CisKKyAgZnJhbWVfaW5mb19wID0gJmR0MzE1NV9zdGF0dXNbbWlub3JdLmZidWZmZXIuZnJhbWVfaW5mb1tmcmFtZV9pbmRleF07CisKKyAgLyogbWFrZSB0aGlzIGFuIG9mZnNldCAqLworICBvZmZzZXQgPSBmcmFtZV9pbmZvX3AtPmFkZHIgLSBkdDMxNTVfc3RhdHVzW21pbm9yXS5tZW1fYWRkcjsKKworICBwdXRfdXNlcihvZmZzZXQsICh1bnNpZ25lZCBpbnQgKikgYnVmKTsKKyAgYnVmICs9IHNpemVvZih1MzIpOworICBwdXRfdXNlciggZHQzMTU1X3N0YXR1c1ttaW5vcl0uZmJ1ZmZlci5mcmFtZV9jb3VudCwgKHVuc2lnbmVkIGludCAqKSBidWYpOworICBidWYgKz0gc2l6ZW9mKHUzMik7CisgIHB1dF91c2VyKGR0MzE1NV9zdGF0dXNbbWlub3JdLnN0YXRlLCAodW5zaWduZWQgaW50ICopIGJ1Zik7CisgIGJ1ZiArPSBzaXplb2YodTMyKTsKKyAgaWYgKGNvcHlfdG9fdXNlcihidWYsIGZyYW1lX2luZm9fcCwgc2l6ZW9mKGZyYW1lX2luZm9fdCkpKQorICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgcmV0dXJuIHNpemVvZihkdDMxNTVfcmVhZF90KTsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBkdDMxNTVfcG9sbCAoc3RydWN0IGZpbGUgKiBmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQoreworICBpbnQgbWlub3IgPSBNSU5PUihmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2KTsKKworICBpZiAoIWlzX3JlYWR5X2J1Zl9lbXB0eShtaW5vcikpCisgICAgcmV0dXJuIFBPTExJTiB8IFBPTExSRE5PUk07CisKKyAgcG9sbF93YWl0IChmaWxwLCAmZHQzMTU1X3JlYWRfd2FpdF9xdWV1ZVttaW5vcl0sIHdhaXQpOworCisgIHJldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZmlsZSBvcGVyYXRpb25zIHN1cHBvcnRlZCBieSBEVDMxNTUgZHJpdmVyCisgKiAgbmVlZGVkIGJ5IGluaXRfbW9kdWxlCisgKiAgcmVnaXN0ZXJfY2hyZGV2CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdDMxNTVfZm9wcyA9IHsKKyAgcmVhZDoJCWR0MzE1NV9yZWFkLAorICBpb2N0bDoJCWR0MzE1NV9pb2N0bCwKKyAgbW1hcDoJCWR0MzE1NV9tbWFwLAorICBwb2xsOiAgICAgICAgICAgZHQzMTU1X3BvbGwsCisgIG9wZW46CQlkdDMxNTVfb3BlbiwKKyAgcmVsZWFzZToJZHQzMTU1X2Nsb3NlCit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZmluZF9QQ0koKTsKKyAqCisgKiBQQ0kgaGFzIGJlZW4gdG90YWxseSByZXdvcmtlZCBpbiAyLjEuLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludCBmaW5kX1BDSSAodm9pZCkKK3sKKyAgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBOVUxMOworICBpbnQgZXJyb3IsIHBjaV9pbmRleCA9IDA7CisgIHVuc2lnbmVkIHNob3J0IHJldl9kZXZpY2U7CisgIHVuc2lnbmVkIGxvbmcgYmFzZTsKKyAgdW5zaWduZWQgY2hhciBpcnE7CisKKyAgd2hpbGUgKChwY2lfZGV2ID0gcGNpX2dldF9kZXZpY2UKKwkgIChEVDMxNTVfVkVORE9SSUQsIERUMzE1NV9ERVZJQ0VJRCwgcGNpX2RldikpICE9IE5VTEwpCisgICAgeworICAgICAgcGNpX2luZGV4ICsrOworCisgICAgICAvKiBJcyBpdCByZWFsbHkgdGhlcmU/ICovCisgICAgICBpZiAoKGVycm9yID0KKwkgICBwY2lfcmVhZF9jb25maWdfd29yZChwY2lfZGV2LCBQQ0lfQ0xBU1NfREVWSUNFLCAmcmV2X2RldmljZSkpKQorCWNvbnRpbnVlOworCisgICAgICAvKiBGb3VuZCBhIGJvYXJkICovCisgICAgICBEVF8zMTU1X0RFQlVHX01TRygiRFQzMTU1OiBEZXZpY2UgbnVtYmVyICVkIFxuIiwgcGNpX2luZGV4KTsKKworICAgICAgLyogTWFrZSBzdXJlIHRoZSBkcml2ZXIgd2FzIGNvbXBpbGVkIHdpdGggZW5vdWdoIGJ1ZmZlcnMgdG8gaGFuZGxlCisJIHRoaXMgbWFueSBib2FyZHMgKi8KKyAgICAgIGlmIChwY2lfaW5kZXggPiBNQVhCT0FSRFMpIHsKKwlwcmludGsoIkRUMzE1NTogRVJST1IgLSBmb3VuZCAlZCBkZXZpY2VzLCBidXQgZHJpdmVyIG9ubHkgY29uZmlndXJlZCAiCisJICAgICAgICJmb3IgJWQgZGV2aWNlc1xuIgorCSAgICAgICAiRFQzMTU1OiBQbGVhc2UgY2hhbmdlIE1BWEJPQVJEUyBpbiBkdDMxNTUuaFxuIiwKKwkgICAgICAgcGNpX2luZGV4LCBNQVhCT0FSRFMpOworCWdvdG8gZXJyOworICAgICAgfQorCisgICAgICAvKiBOb3csIGp1c3QgZ28gb3V0IGFuZCBtYWtlIHN1cmUgdGhhdCB0aGlzL3RoZXNlIGRldmljZShzKSBpcy9hcmUKKwkgYWN0dWFsbHkgbWFwcGVkIGludG8gdGhlIGtlcm5lbCBhZGRyZXNzIHNwYWNlICovCisgICAgICBpZiAoKGVycm9yID0gcGNpX3JlYWRfY29uZmlnX2R3b3JkKCBwY2lfZGV2LCBQQ0lfQkFTRV9BRERSRVNTXzAsCisJCQkJCSAgKHUzMiAqKSAmYmFzZSkpKQorCXsKKwkgIHByaW50aygiRFQzMTU1OiBXYXMgbm90IGFibGUgdG8gZmluZCBkZXZpY2UgXG4iKTsKKwkgIGdvdG8gZXJyOworCX0KKworICAgICAgRFRfMzE1NV9ERUJVR19NU0coIkRUMzE1NTogQmFzZSBhZGRyZXNzIDAgZm9yIGRldmljZSBpcyAlbHggXG4iLCBiYXNlKTsKKyAgICAgIGR0MzE1NV9zdGF0dXNbcGNpX2luZGV4LTFdLnJlZ19hZGRyID0gYmFzZTsKKworICAgICAgLyogUmVtYXAgdGhlIGJhc2UgYWRkcmVzcyB0byBhIGxvZ2ljYWwgYWRkcmVzcyB0aHJvdWdoIHdoaWNoIHdlCisgICAgICAgKiBjYW4gYWNjZXNzIGl0LiAqLworICAgICAgZHQzMTU1X2xiYXNlWyBwY2lfaW5kZXggLSAxIF0gPSBpb3JlbWFwKGJhc2UsUENJX1BBR0VfU0laRSk7CisgICAgICBkdDMxNTVfc3RhdHVzWyBwY2lfaW5kZXggLSAxIF0ucmVnX2FkZHIgPSBiYXNlOworICAgICAgRFRfMzE1NV9ERUJVR19NU0coIkRUMzE1NTogTmV3IGxvZ2ljYWwgYWRkcmVzcyBpcyAlcCBcbiIsCisJCQlkdDMxNTVfbGJhc2VbcGNpX2luZGV4LTFdKTsKKyAgICAgIGlmICggIWR0MzE1NV9sYmFzZVtwY2lfaW5kZXgtMV0gKQorCXsKKwkgIHByaW50aygiRFQzMTU1OiBVbmFibGUgdG8gcmVtYXAgY29udHJvbCByZWdpc3RlcnNcbiIpOworCSAgZ290byBlcnI7CisJfQorCisgICAgICBpZiAoIChlcnJvciA9IHBjaV9yZWFkX2NvbmZpZ19ieXRlKCBwY2lfZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsICZpcnEpKSApCisJeworCSAgcHJpbnRrKCJEVDMxNTU6IFdhcyBub3QgYWJsZSB0byBmaW5kIGRldmljZSBcbiIpOworCSAgZ290byBlcnI7CisJfQorCisgICAgICBEVF8zMTU1X0RFQlVHX01TRygiRFQzMTU1OiBJUlEgaXMgJWQgXG4iLGlycSk7CisgICAgICBkdDMxNTVfc3RhdHVzWyBwY2lfaW5kZXgtMSBdLmlycSA9IGlycTsKKyAgICAgIC8qIFNldCBmbGFnOiBrdGggZGV2aWNlIGZvdW5kISAqLworICAgICAgZHQzMTU1X3N0YXR1c1sgcGNpX2luZGV4LTEgXS5kZXZpY2VfaW5zdGFsbGVkID0gMTsKKyAgICAgIHByaW50aygiRFQzMTU1OiBJbnN0YWxsaW5nIGRldmljZSAlZCB3L2lycSAlZCBhbmQgYWRkcmVzcyAlcFxuIiwKKwkgICAgIHBjaV9pbmRleCwKKwkgICAgIGR0MzE1NV9zdGF0dXNbcGNpX2luZGV4LTFdLmlycSwKKwkgICAgIGR0MzE1NV9sYmFzZVtwY2lfaW5kZXgtMV0pOworCisgICAgfQorICBuZGV2aWNlcyA9IHBjaV9pbmRleDsKKworICByZXR1cm4gRFRfMzE1NV9TVUNDRVNTOworCitlcnI6CisgIHBjaV9kZXZfcHV0KHBjaV9kZXYpOworICByZXR1cm4gRFRfMzE1NV9GQUlMVVJFOworfQorCit1MzIgYWxsb2NhdG9yQWRkciA9IDA7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaW5pdF9tb2R1bGUoKQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IGluaXRfbW9kdWxlKHZvaWQpCit7CisgIGludCBpbmRleDsKKyAgaW50IHJjb2RlID0gMDsKKyAgY2hhciAqZGV2bmFtZVsgTUFYQk9BUkRTIF07CisKKyAgZGV2bmFtZVsgMCBdID0gImR0MzE1NWEiOworI2lmIE1BWEJPQVJEUyA9PSAyCisgIGRldm5hbWVbIDEgXSA9ICJkdDMxNTViIjsKKyNlbmRpZgorCisgIHByaW50aygiRFQzMTU1OiBMb2FkaW5nIG1vZHVsZS4uLlxuIik7CisKKyAgLyogUmVnaXN0ZXIgdGhlIGRldmljZSBkcml2ZXIgKi8KKyAgcmNvZGUgPSByZWdpc3Rlcl9jaHJkZXYoIGR0MzE1NV9tYWpvciwgImR0MzE1NSIsICZkdDMxNTVfZm9wcyApOworICBpZiggcmNvZGUgPCAwICkKKyAgICB7CisgICAgICBwcmludGsoIEtFUk5fSU5GTyAiRFQzMTU1OiByZWdpc3Rlcl9jaHJkZXYgZmFpbGVkIFxuIik7CisgICAgICByZXR1cm4gcmNvZGU7CisgICAgfQorCisgIGlmKCBkdDMxNTVfbWFqb3IgPT0gMCApCisgICAgZHQzMTU1X21ham9yID0gcmNvZGU7IC8qIGR5bmFtaWMgKi8KKworCisgIC8qIGluaXQgdGhlIHN0YXR1cyB2YXJpYWJsZXMuICAgICAgICAgICAgICAgICAgICAgKi8KKyAgLyogRE1BIG1lbW9yeSBpcyB0YWtlbiBjYXJlIG9mIGluIHNldHVwX2J1ZmZlcnMoKSAqLworICBmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgTUFYQk9BUkRTOyBpbmRleCsrICkKKyAgICB7CisgICAgICBkdDMxNTVfc3RhdHVzWyBpbmRleCBdLmNvbmZpZy5hY3FfbW9kZSAgID0gRFQzMTU1X01PREVfRlJBTUU7CisgICAgICBkdDMxNTVfc3RhdHVzWyBpbmRleCBdLmNvbmZpZy5jb250aW51b3VzID0gRFQzMTU1X0FDUTsKKyAgICAgIGR0MzE1NV9zdGF0dXNbIGluZGV4IF0uY29uZmlnLmNvbHMgICAgICAgPSBEVDMxNTVfTUFYX0NPTFM7CisgICAgICBkdDMxNTVfc3RhdHVzWyBpbmRleCBdLmNvbmZpZy5yb3dzICAgICAgID0gRFQzMTU1X01BWF9ST1dTOworICAgICAgZHQzMTU1X3N0YXR1c1sgaW5kZXggXS5zdGF0ZSA9IERUMzE1NV9TVEFURV9JRExFOworCisgICAgICAvKiBmaW5kX1BDSSgpIHdpbGwgY2hlY2sgaWYgZGV2aWNlcyBhcmUgaW5zdGFsbGVkOyAqLworICAgICAgLyogZmlyc3QgYXNzdW1lIHRoZXkncmUgbm90OiAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgIGR0MzE1NV9zdGF0dXNbIGluZGV4IF0ubWVtX2FkZHIgICAgICAgICAgPSAwOworICAgICAgZHQzMTU1X3N0YXR1c1sgaW5kZXggXS5tZW1fc2l6ZSAgICAgICAgICA9IDA7CisgICAgICBkdDMxNTVfc3RhdHVzWyBpbmRleCBdLnN0YXRlICAgICAgICAgICAgID0gRFQzMTU1X1NUQVRFX0lETEU7CisgICAgICBkdDMxNTVfc3RhdHVzWyBpbmRleCBdLmRldmljZV9pbnN0YWxsZWQgID0gMDsKKyAgICB9CisKKyAgLyogTm93IGxldCdzIGZpbmQgdGhlIGhhcmR3YXJlLiAgZmluZF9QQ0koKSB3aWxsIHNldCBuZGV2aWNlcyB0byB0aGUKKyAgICogbnVtYmVyIG9mIGNhcmRzIGZvdW5kIGluIHRoaXMgbWFjaGluZS4gKi8KKyAgICB7CisgICAgICBpZiAoIChyY29kZSA9IGZpbmRfUENJKCkpICE9ICBEVF8zMTU1X1NVQ0NFU1MgKQorCXsKKwkgIHByaW50aygiRFQzMTU1IGVycm9yOiBmaW5kX1BDSSgpIGZhaWxlZCB0byBmaW5kIGR0MzE1NSBib2FyZChzKVxuIik7CisJICB1bnJlZ2lzdGVyX2NocmRldiggZHQzMTU1X21ham9yLCAiZHQzMTU1IiApOworCSAgcmV0dXJuIHJjb2RlOworCX0KKyAgICB9CisKKyAgLyogT2ssIHRpbWUgdG8gc2V0dXAgdGhlIGZyYW1lIGJ1ZmZlcnMgKi8KKyAgaWYoIChyY29kZSA9IGR0MzE1NV9zZXR1cF9idWZmZXJzKCZhbGxvY2F0b3JBZGRyKSkgPCAwICkKKyAgICB7CisgICAgICBwcmludGsoIkRUMzE1NTogRXJyb3I6IHNldHRpbmcgdXAgYnVmZmVyIG5vdCBsYXJnZSBlbm91Z2guIik7CisgICAgICB1bnJlZ2lzdGVyX2NocmRldiggZHQzMTU1X21ham9yLCAiZHQzMTU1IiApOworICAgICAgcmV0dXJuIHJjb2RlOworICAgIH0KKworICAvKiBJZiB3ZSBhcmUgdGhpcyBmYXIsIHRoZW4gdGhlcmUgaXMgZW5vdWdoIFJBTSAqLworICAvKiBmb3IgdGhlIGJ1ZmZlcnM6IFByaW50IHRoZSBjb25maWd1cmF0aW9uLiAgICAqLworICBmb3IoICBpbmRleCA9IDA7ICBpbmRleCA8IG5kZXZpY2VzOyAgaW5kZXgrKyApCisgICAgeworICAgICAgcHJpbnRrKCJEVDMxNTU6IERldmljZSA9ICVkOyBhY3FfbW9kZSA9ICVkOyAiCisJICAgICAiY29udGludW91cyA9ICVkOyBjb2xzID0gJWQ7IHJvd3MgPSAlZDtcbiIsCisJICAgICBpbmRleCAsCisJICAgICBkdDMxNTVfc3RhdHVzWyBpbmRleCBdLmNvbmZpZy5hY3FfbW9kZSwKKwkgICAgIGR0MzE1NV9zdGF0dXNbIGluZGV4IF0uY29uZmlnLmNvbnRpbnVvdXMsCisJICAgICBkdDMxNTVfc3RhdHVzWyBpbmRleCBdLmNvbmZpZy5jb2xzLAorCSAgICAgZHQzMTU1X3N0YXR1c1sgaW5kZXggXS5jb25maWcucm93cyk7CisgICAgICBwcmludGsoIkRUMzE1NTogbV9hZGRyID0gMHgleDsgbV9zaXplID0gJWxkOyAiCisJICAgICAic3RhdGUgPSAlZDsgZGV2aWNlX2luc3RhbGxlZCA9ICVkXG4iLAorCSAgICAgZHQzMTU1X3N0YXR1c1sgaW5kZXggXS5tZW1fYWRkciwKKwkgICAgIChsb25nIGludClkdDMxNTVfc3RhdHVzWyBpbmRleCBdLm1lbV9zaXplLAorCSAgICAgZHQzMTU1X3N0YXR1c1sgaW5kZXggXS5zdGF0ZSwKKwkgICAgIGR0MzE1NV9zdGF0dXNbIGluZGV4IF0uZGV2aWNlX2luc3RhbGxlZCk7CisgICAgfQorCisgIC8qIERpc2FibGUgQUxMIGludGVycnVwdHMgKi8KKyAgaW50X2Nzcl9yLnJlZyA9IDA7CisgIGZvciggIGluZGV4ID0gMDsgIGluZGV4IDwgbmRldmljZXM7ICBpbmRleCsrICkKKyAgICB7CisgICAgICBXcml0ZU1SZWcoIChkdDMxNTVfbGJhc2VbIGluZGV4IF0gKyBJTlRfQ1NSKSwgaW50X2Nzcl9yLnJlZyApOworICAgICAgaWYoIGR0MzE1NV9zdGF0dXNbIGluZGV4IF0uZGV2aWNlX2luc3RhbGxlZCApCisJeworCSAgLyoKKwkgICAqIFRoaXMgZHJpdmVyICpsb29rcyogbGlrZSBpdCBjYW4gaGFuZGxlIHNoYXJpbmcgaW50ZXJydXB0cywKKwkgICAqIGJ1dCBJIGNhbid0IGFjdHVhbGx5IHRlc3QgbXlzZWxmLiBJJ3ZlIGhhZCByZXBvcnRzIHRoYXQgaXQKKwkgICAqIERPRVMgd29yayBzbyBJJ2xsIGVuYWJsZSBpdCBmb3Igbm93LiBUaGlzIGNvbW1lbnQgd2lsbCByZW1haW4KKwkgICAqIGFzIGEgcmVtaW5kZXIgaW4gY2FzZSBhbnkgcHJvYmxlbXMgYXJpc2UuIChTUykKKwkgICAqLworCSAgLyogaW4gb2xkZXIga2VybmVscyBmbGFncyBhcmU6IFNBX1NISVJRIHwgU0FfSU5URVJSVVBUICovCisJICByY29kZSA9IHJlcXVlc3RfaXJxKCBkdDMxNTVfc3RhdHVzWyBpbmRleCBdLmlycSwgKHZvaWQgKilkdDMxNTVfaXNyLAorCQkJICAgICAgIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgZGV2bmFtZVsgaW5kZXggXSwKKwkJCSAgICAgICAodm9pZCopICZkdDMxNTVfc3RhdHVzW2luZGV4XSk7CisJICBpZiggcmNvZGUgPCAwICkKKwkgICAgeworCSAgICAgIHByaW50aygiRFQzMTU1OiBtaW5vciAlZCByZXF1ZXN0X2lycSBmYWlsZWQgZm9yIElSUSAlZFxuIiwKKwkJICAgICBpbmRleCwgZHQzMTU1X3N0YXR1c1tpbmRleF0uaXJxKTsKKwkgICAgICB1bnJlZ2lzdGVyX2NocmRldiggZHQzMTU1X21ham9yLCAiZHQzMTU1IiApOworCSAgICAgIHJldHVybiByY29kZTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgcHJpbnRrKCJEVDMxNTU6IGZpbmlzaGVkIGxvYWRpbmdcbiIpOworCisgIHJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGNsZWFudXBfbW9kdWxlKHZvaWQpCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwordm9pZCBjbGVhbnVwX21vZHVsZSh2b2lkKQoreworICBpbnQgaW5kZXg7CisKKyAgcHJpbnRrKCJEVDMxNTU6ICBjbGVhbnVwX21vZHVsZSBjYWxsZWRcbiIpOworCisgIC8qIHJlbW92ZWQgRE1BIGFsbG9jYXRlZCB3aXRoIHRoZSBhbGxvY2F0b3IgKi8KKyNpZmRlZiBTVEFOREFMT05FX0FMTE9DQVRPUgorICBpZiAoYWxsb2NhdG9yQWRkciAhPSAwKQorICAgIGFsbG9jYXRvcl9mcmVlX2RtYShhbGxvY2F0b3JBZGRyKTsKKyNlbHNlCisgIGFsbG9jYXRvcl9jbGVhbnVwKCk7CisjZW5kaWYKKworICB1bnJlZ2lzdGVyX2NocmRldiggZHQzMTU1X21ham9yLCAiZHQzMTU1IiApOworCisgIGZvciggaW5kZXggPSAwOyBpbmRleCA8IG5kZXZpY2VzOyBpbmRleCsrICkKKyAgICB7CisgICAgICBpZiggZHQzMTU1X3N0YXR1c1sgaW5kZXggXS5kZXZpY2VfaW5zdGFsbGVkID09IDEgKQorCXsKKwkgIHByaW50ayggIkRUMzE1NTogRnJlZWluZyBpcnEgJWQgZm9yIGRldmljZSAlZFxuIiwKKwkJICBkdDMxNTVfc3RhdHVzWyBpbmRleCBdLmlycSwgaW5kZXggKTsKKwkgIGZyZWVfaXJxKCBkdDMxNTVfc3RhdHVzWyBpbmRleCBdLmlycSwgKHZvaWQqKSZkdDMxNTVfc3RhdHVzW2luZGV4XSApOworCX0KKyAgICB9Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1X2Rydi5oIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfZHJ2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVlNjhjMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1X2Rydi5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisKK0NvcHlyaWdodCAxOTk2LDIwMDIgR3JlZ29yeSBELiBIYWdlciwgQWxmcmVkIEEuIFJpenppLCBOb2FoIEouIENvd2FuLAorCQkgICAgU2NvdHQgU21lZGxleQorCitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRFQzMTU1IERldmljZSBEcml2ZXIuCisKK1RoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdAorYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCitwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKK0xpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoZSBEVDMxNTUgRGV2aWNlIERyaXZlciBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUKK3VzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKK29mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBEVDMxNTUgRGV2aWNlIERyaXZlcjsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwKK01BIDAyMTExLTEzMDcgVVNBCisqLworCisjaWZuZGVmIERUMzE1NV9EUlZfSU5DCisjZGVmaW5lIERUMzE1NV9EUlZfSU5DCisKKy8qIGtlcm5lbCBsb2dpY2FsIGFkZHJlc3Mgb2YgdGhlIGZyYW1lIGdyYWJiZXJzICovCitleHRlcm4gdTggKmR0MzE1NV9sYmFzZVtNQVhCT0FSRFNdOworCisvKiBrZXJuZWwgbG9naWNhbCBhZGRyZXNzIG9mIHJhbSBidWZmZXIgKi8KK2V4dGVybiB1OCAqZHQzMTU1X2JiYXNlOworCisjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworLyogd2FpdCBxdWV1ZSBmb3IgcmVhZHMgKi8KK2V4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCBkdDMxNTVfcmVhZF93YWl0X3F1ZXVlW01BWEJPQVJEU107CisjZW5kaWYKKworLyogbnVtYmVyIG9mIGRldmljZXMgKi8KK2V4dGVybiB1MzIgbmRldmljZXM7CisKK2V4dGVybiBpbnQgZHQzMTU1X2Vycm5vOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1X2lvLmMgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiOWM2ODUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pby5jCkBAIC0wLDAgKzEsMTc1IEBACisvKgorICogQ29weXJpZ2h0IDE5OTYsMjAwMiwyMDA1IEdyZWdvcnkgRC4gSGFnZXIsIEFsZnJlZCBBLiBSaXp6aSwgTm9haCBKLiBDb3dhbiwKKyAqCQkJICAgIEphc29uIExhcGVudGEsIFNjb3R0IFNtZWRsZXkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRFQzMTU1IERldmljZSBEcml2ZXIuCisgKgorICogVGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGUgRFQzMTU1IERldmljZSBEcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKy8qCisgKiBUaGlzIGZpbGUgcHJvdmlkZXMgc29tZSBiYXNpYyByZWdpc3RlciBpbyByb3V0aW5lcy4gIEl0IGlzIG1vZGlmaWVkIGZyb20KKyAqIGRlbW8gY29kZSBwcm92aWRlZCBieSBEYXRhIFRyYW5zbGF0aW9ucy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlICJkdDMxNTUuaCIKKyNpbmNsdWRlICJkdDMxNTVfaW8uaCIKKyNpbmNsdWRlICJkdDMxNTVfZHJ2LmgiCisKKworLyoqKioqKiBsb2NhbCBjb3BpZXMgb2YgYm9hcmQncyAzMiBiaXQgcmVnaXN0ZXJzICoqKioqKi8KK3UzMiBldmVuX2RtYV9zdGFydF9yOwkvKiAgYml0IDAgc2hvdWxkIGFsd2F5cyBiZSAwICovCit1MzIgb2RkX2RtYV9zdGFydF9yOwkvKiAgICAgICAgICAgICAgIC4uICovCit1MzIgZXZlbl9kbWFfc3RyaWRlX3I7CS8qICBiaXRzIDAmMSBzaG91bGQgYWx3YXlzIGJlIDAgKi8KK3UzMiBvZGRfZG1hX3N0cmlkZV9yOwkvKiAgICAgICAgICAgICAgIC4uICovCit1MzIgZXZlbl9waXhlbF9mbXRfcjsKK3UzMiBvZGRfcGl4ZWxfZm10X3I7CisKK0ZJRk9fVFJJR0dFUl9SCQlmaWZvX3RyaWdnZXJfcjsKK1hGRVJfTU9ERV9SCQl4ZmVyX21vZGVfcjsKK0NTUjFfUgkJCWNzcjFfcjsKK1JFVFJZX1dBSVRfQ05UX1IJcmV0cnlfd2FpdF9jbnRfcjsKK0lOVF9DU1JfUgkJaW50X2Nzcl9yOworCit1MzIgZXZlbl9mbGRfbWFza19yOwordTMyIG9kZF9mbGRfbWFza19yOworCitNQVNLX0xFTkdUSF9SCQltYXNrX2xlbmd0aF9yOworRklGT19GTEFHX0NOVF9SCQlmaWZvX2ZsYWdfY250X3I7CitJSUNfQ0xLX0RVUl9SCQlpaWNfY2xrX2R1cl9yOworSUlDX0NTUjFfUgkJaWljX2NzcjFfcjsKK0lJQ19DU1IyX1IJCWlpY19jc3IyX3I7CitETUFfVVBQRVJfTE1UX1IJCWV2ZW5fZG1hX3VwcGVyX2xtdF9yOworRE1BX1VQUEVSX0xNVF9SCQlvZGRfZG1hX3VwcGVyX2xtdF9yOworCisKKworLyoqKioqKioqIGxvY2FsIGNvcGllcyBvZiBib2FyZCdzIDggYml0IEkyQyByZWdpc3RlcnMgKioqKioqLworSTJDX0NTUjIgaTJjX2NzcjI7CitJMkNfRVZFTl9DU1IgaTJjX2V2ZW5fY3NyOworSTJDX09ERF9DU1IgaTJjX29kZF9jc3I7CitJMkNfQ09ORklHIGkyY19jb25maWc7Cit1OCBpMmNfZHRfaWQ7Cit1OCBpMmNfeF9jbGlwX3N0YXJ0OwordTggaTJjX3lfY2xpcF9zdGFydDsKK3U4IGkyY194X2NsaXBfZW5kOwordTggaTJjX3lfY2xpcF9lbmQ7Cit1OCBpMmNfYWRfYWRkcjsKK3U4IGkyY19hZF9sdXQ7CitJMkNfQURfQ01EIGkyY19hZF9jbWQ7Cit1OCBpMmNfZGlnX291dDsKK3U4IGkyY19wbV9sdXRfYWRkcjsKK3U4IGkyY19wbV9sdXRfZGF0YTsKKworLyoKKyAqIHdhaXRfaWJzeWNscigpCisgKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHJlYWQvd3JpdGUgdGltaW5nIGFuZCByL3cgdGltZW91dCBlcnJvcgorICoKKyAqIFJldHVybnMgVFJVRSAgaWYgTkVXX0NZQ0xFIGNsZWFycworICogUmV0dXJucyBGQUxTRSBpZiBORVdfQ1lDTEUgZG9lc24ndCBjbGVhciBpbiByb3VnaGx5IDMgbXNlY3MsIG90aGVyd2lzZQorICogcmV0dXJucyAwCisgKi8KK3N0YXRpYyBpbnQgd2FpdF9pYnN5Y2xyKHU4ICpscFJlZykKK3sKKwkvKiB3YWl0IDEwMCBtaWNyb3NlY29uZHMgKi8KKwl1ZGVsYXkoMTAwTCk7CisJLyogX19kZWxheShsb29wc19wZXJfc2VjLzEwMDAwKTsgKi8KKwlpZiAoaWljX2NzcjJfci5mbGQuTkVXX0NZQ0xFKSB7CisJCS8qIGlmIE5FV19DWUNMRSBkaWRuJ3QgY2xlYXIgKi8KKwkJLyogVElNRU9VVCBFUlJPUiAqLworCQlkdDMxNTVfZXJybm8gPSBEVF9FUlJfSTJDX1RJTUVPVVQ7CisJCXJldHVybiBGQUxTRTsKKwl9IGVsc2UKKwkJcmV0dXJuIFRSVUU7CS8qIG5vIGVycm9yICovCit9CisKKy8qCisgKiBXcml0ZUkyQygpCisgKgorICogVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHdyaXRpbmcgdG8gOC1iaXQgRFQzMTU1IHJlZ2lzdGVycworICoKKyAqIDFzdCBwYXJhbWV0ZXIgaXMgcG9pbnRlciB0byAzMi1iaXQgcmVnaXN0ZXIgYmFzZSBhZGRyZXNzCisgKiAybmQgcGFyYW1ldGVyIGlzIHJlZy4gaW5kZXg7CisgKiAzcmQgaXMgdmFsdWUgdG8gYmUgd3JpdHRlbgorICoKKyAqIFJldHVybnMgVFJVRSAgIC0gIFN1Y2Nlc3NmdWwgY29tcGxldGlvbgorICogICAgICAgICBGQUxTRSAgLSAgVGltZW91dCBlcnJvciAtIGN5Y2xlIGRpZCBub3QgY29tcGxldGUhCisgKi8KK2ludCBXcml0ZUkyQyh1OCAqbHBSZWcsIHVfc2hvcnQgd0lyZWdJbmRleCwgdTggYnlWYWwpCit7CisJaW50IHdyaXRlc3RhdDsJLyogc3RhdHVzIGZvciByZXR1cm4gKi8KKworCS8qIHJlYWQgMzIgYml0IElJQ19DU1IyIHJlZ2lzdGVyIGRhdGEgaW50byB1bmlvbiAqLworCisJUmVhZE1SZWcoKGxwUmVnICsgSUlDX0NTUjIpLCBpaWNfY3NyMl9yLnJlZyk7CisKKwkvKiBmb3Igd3JpdGUgb3BlcmF0aW9uICovCisJaWljX2NzcjJfci5mbGQuRElSX1JEICAgICAgPSAwOworCS8qIEkyQyBhZGRyZXNzIG9mIEkyQyByZWdpc3RlcjogKi8KKwlpaWNfY3NyMl9yLmZsZC5ESVJfQUREUiAgICA9IHdJcmVnSW5kZXg7CisJLyogOCBiaXQgZGF0YSB0byBiZSB3cml0dGVuIHRvIEkyQyByZWcgKi8KKwlpaWNfY3NyMl9yLmZsZC5ESVJfV1JfREFUQSA9IGJ5VmFsOworCS8qIHdpbGwgc3RhcnQgYSBkaXJlY3QgSTJDIGN5Y2xlOiAqLworCWlpY19jc3IyX3IuZmxkLk5FV19DWUNMRSAgID0gMTsKKworCS8qIHhmZXIgdW5pb24gZGF0YSBpbnRvIDMyIGJpdCBJSUNfQ1NSMiByZWdpc3RlciAqLworCVdyaXRlTVJlZygobHBSZWcgKyBJSUNfQ1NSMiksIGlpY19jc3IyX3IucmVnKTsKKworCS8qIHdhaXQgZm9yIElJQyBjeWNsZSB0byBmaW5pc2ggKi8KKwl3cml0ZXN0YXQgPSB3YWl0X2lic3ljbHIobHBSZWcpOworCXJldHVybiB3cml0ZXN0YXQ7Cit9CisKKy8qCisgKiBSZWFkSTJDKCkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGhhbmRsZXMgcmVhZGluZyBmcm9tIDgtYml0IERUMzE1NSByZWdpc3RlcnMKKyAqCisgKiAxc3QgcGFyYW1ldGVyIGlzIHBvaW50ZXIgdG8gMzItYml0IHJlZ2lzdGVyIGJhc2UgYWRkcmVzcworICogMm5kIHBhcmFtZXRlciBpcyByZWcuIGluZGV4OworICogM3JkIGlzIGFkcnMgb2YgdmFsdWUgdG8gYmUgcmVhZAorICoKKyAqIFJldHVybnMgVFJVRSAgIC0gIFN1Y2Nlc3NmdWwgY29tcGxldGlvbgorICogICAgICAgICBGQUxTRSAgLSAgVGltZW91dCBlcnJvciAtIGN5Y2xlIGRpZCBub3QgY29tcGxldGUhCisgKi8KK2ludCBSZWFkSTJDKHU4ICpscFJlZywgdV9zaG9ydCB3SXJlZ0luZGV4LCB1OCAqYnlWYWwpCit7CisJaW50IHdyaXRlc3RhdDsJLyogc3RhdHVzIGZvciByZXR1cm4gKi8KKworCS8qICByZWFkIDMyIGJpdCBJSUNfQ1NSMiByZWdpc3RlciBkYXRhIGludG8gdW5pb24gKi8KKwlSZWFkTVJlZygobHBSZWcgKyBJSUNfQ1NSMiksIGlpY19jc3IyX3IucmVnKTsKKworCS8qICBmb3IgcmVhZCBvcGVyYXRpb24gKi8KKwlpaWNfY3NyMl9yLmZsZC5ESVJfUkQgICAgID0gMTsKKworCS8qICBJMkMgYWRkcmVzcyBvZiBJMkMgcmVnaXN0ZXI6ICovCisJaWljX2NzcjJfci5mbGQuRElSX0FERFIgICA9IHdJcmVnSW5kZXg7CisKKwkvKiAgd2lsbCBzdGFydCBhIGRpcmVjdCBJMkMgY3ljbGU6ICovCisJaWljX2NzcjJfci5mbGQuTkVXX0NZQ0xFICA9IDE7CisKKwkvKiAgeGZlciB1bmlvbidzIGRhdGEgaW50byAzMiBiaXQgSUlDX0NTUjIgcmVnaXN0ZXIgKi8KKwlXcml0ZU1SZWcoKGxwUmVnICsgSUlDX0NTUjIpLCBpaWNfY3NyMl9yLnJlZyk7CisKKwkvKiB3YWl0IGZvciBJSUMgY3ljbGUgdG8gZmluaXNoICovCisJd3JpdGVzdGF0ID0gd2FpdF9pYnN5Y2xyKGxwUmVnKTsKKworCS8qIE5leHQgMiBjb21tYW5kcyByZWFkIDMyIGJpdCBJSUNfQ1NSMSByZWdpc3RlcidzIGRhdGEgaW50byB1bmlvbiAqLworCS8qIGZpcnN0IHJlYWQgZGF0YSBpcyBpbiBJSUNfQ1NSMSAqLworCVJlYWRNUmVnKChscFJlZyArIElJQ19DU1IxKSwgaWljX2NzcjFfci5yZWcpOworCisJLyogbm93IGdldCBkYXRhIHU4IG91dCBvZiByZWdpc3RlciAqLworCSpieVZhbCA9ICh1OCkgaWljX2NzcjFfci5mbGQuUkRfREFUQTsKKworCXJldHVybiB3cml0ZXN0YXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pby5oIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWEyNTEwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL2R0MzE1NS9kdDMxNTVfaW8uaApAQCAtMCwwICsxLDM1OCBAQAorLyoKKworQ29weXJpZ2h0IDE5OTYsMjAwMiBHcmVnb3J5IEQuIEhhZ2VyLCBBbGZyZWQgQS4gUml6emksIE5vYWggSi4gQ293YW4sCisJCSAgICBKYXNvbiBMYXBlbnRhLCBTY290dCBTbWVkbGV5CisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBEVDMxNTUgRGV2aWNlIERyaXZlci4KKworVGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0CithbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKK3B1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQordXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorTUEgMDIxMTEtMTMwNyBVU0EKKworCistLSBDaGFuZ2VzIC0tCisKKyAgRGF0ZSAgICAgUHJvZ3JhbW1lciAgRGVzY3JpcHRpb24gb2YgY2hhbmdlcyBtYWRlCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMjQtSnVsLTIwMDIgU1MgICAgICAgR1BMIGxpY2VuY2UuCisKKyovCisKKy8qIFRoaXMgY29kZSBpcyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgZXhhbXBsZXMgcHJvdmlkZWQgYnkgRGF0YSBUcmFuc2xhdGlvbnMuKi8KKworI2lmbmRlZiBEVDMxNTVfSU9fSU5DCisjZGVmaW5lIERUMzE1NV9JT19JTkMKKworLyogbWFjcm9zIHRvIGFjY2VzcyByZWdpc3RlcnMgKi8KKworI2RlZmluZSBXcml0ZU1SZWcoQWRkcmVzcywgRGF0YSkJKCooKHUzMiAqKShBZGRyZXNzKSkgPSBEYXRhKQorI2RlZmluZSBSZWFkTVJlZyhBZGRyZXNzLCBEYXRhKQkJKERhdGEgPSAqKCh1MzIgKikoQWRkcmVzcykpKQorCisvKioqKioqKioqKioqKioqKiogMzIgYml0IHJlZ2lzdGVyIGdsb2JhbHMgICoqKioqKioqKioqKioqLworCisvKiAgb2Zmc2V0cyBmb3IgMzItYml0IG1lbW9yeSBtYXBwZWQgcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgRVZFTl9ETUFfU1RBUlQJCTB4MDAwCisjZGVmaW5lIE9ERF9ETUFfU1RBUlQJCTB4MDBDCisjZGVmaW5lIEVWRU5fRE1BX1NUUklERQkJMHgwMTgKKyNkZWZpbmUgT0REX0RNQV9TVFJJREUJCTB4MDI0CisjZGVmaW5lIEVWRU5fUElYRUxfRk1UCQkweDAzMAorI2RlZmluZSBPRERfUElYRUxfRk1UCQkweDAzNAorI2RlZmluZSBGSUZPX1RSSUdHRVIJCTB4MDM4CisjZGVmaW5lIFhGRVJfTU9ERQkJMHgwM0MKKyNkZWZpbmUgQ1NSMQkJCTB4MDQwCisjZGVmaW5lIFJFVFJZX1dBSVRfQ05UCQkweDA0NAorI2RlZmluZSBJTlRfQ1NSCQkJMHgwNDgKKyNkZWZpbmUgRVZFTl9GTERfTUFTSwkJMHgwNEMKKyNkZWZpbmUgT0REX0ZMRF9NQVNLCQkweDA1MAorI2RlZmluZSBNQVNLX0xFTkdUSAkJMHgwNTQKKyNkZWZpbmUgRklGT19GTEFHX0NOVAkJMHgwNTgKKyNkZWZpbmUgSUlDX0NMS19EVVIJCTB4MDVDCisjZGVmaW5lIElJQ19DU1IxCQkweDA2MAorI2RlZmluZSBJSUNfQ1NSMgkJMHgwNjQKKyNkZWZpbmUgRVZFTl9ETUFfVVBQUl9MTVQJMHgwOEMKKyNkZWZpbmUgT0REX0RNQV9VUFBSX0xNVAkweDA5MAorCisjZGVmaW5lIENMS19EVVJfVkFMCQkweDAxMDEwMTAxCisKKworCisvKioqKioqKiogQXNzaWdubWVudHMgYW5kIFR5cGVkZWZzIGZvciAzMiBiaXQgTWVtb3J5IE1hcHBlZCBSZWdpc3RlcnMgKioqKioqKiovCisKK3R5cGVkZWYgdW5pb24gZmlmb190cmlnZ2VyX3RhZyB7CisJdTMyICAgcmVnOworCXN0cnVjdCB7CisJCXUzMiBQQUNLRUQ6NjsKKwkJdTMyICAgICAgIDo5OworCQl1MzIgUExBTkVSOjc7CisJCXUzMiAgICAgICA6OTsKKwl9IGZsZDsKK30gRklGT19UUklHR0VSX1I7CisKK3R5cGVkZWYgdW5pb24geGZlcl9tb2RlX3RhZyB7CisJdTMyICAgcmVnOworCXN0cnVjdCB7CisJCXUzMiAgICAgICAgICAgICA6MjsKKwkJdTMyIEZJRUxEX1RPR0dMRToxOworCQl1MzIgICAgICAgICAgICAgOjU7CisJCXUzMiAgICAgICAgICAgICA6MjsKKwkJdTMyICAgICAgICAgICAgIDoyMjsKKwl9IGZsZDsKK30gWEZFUl9NT0RFX1I7CisKK3R5cGVkZWYgdW5pb24gY3NyMV90YWcgeworCXUzMiAgIHJlZzsKKwlzdHJ1Y3QgeworCQl1MzIgQ0FQX0NPTlRfRVZFOjE7CisJCXUzMiBDQVBfQ09OVF9PREQ6MTsKKwkJdTMyIENBUF9TTkdMX0VWRToxOworCQl1MzIgQ0FQX1NOR0xfT0REOjE7CisJCXUzMiBGTERfRE5fRVZFICA6MTsKKwkJdTMyIEZMRF9ETl9PREQgIDoxOworCQl1MzIgU1JTVCAgICAgICAgOjE7CisJCXUzMiBGSUZPX0VOICAgICA6MTsKKwkJdTMyIEZMRF9DUlBUX0VWRToxOworCQl1MzIgRkxEX0NSUFRfT0REOjE7CisJCXUzMiBBRERSX0VSUl9FVkU6MTsKKwkJdTMyIEFERFJfRVJSX09ERDoxOworCQl1MzIgQ1JQVF9ESVMgICAgOjE7CisJCXUzMiBSQU5HRV9FTiAgICA6MTsKKwkJdTMyICAgICAgICAgICAgIDoxNjsKKwl9IGZsZDsKK30gQ1NSMV9SOworCit0eXBlZGVmIHVuaW9uIHJldHJ5X3dhaXRfY250X3RhZyB7CisJdTMyICAgcmVnOworCXN0cnVjdCB7CisJCXUzMiBSVFJZX1dBSVRfQ05UOjg7CisJCXUzMiAgICAgICAgICAgICAgOjI0OworCX0gZmxkOworfSBSRVRSWV9XQUlUX0NOVF9SOworCit0eXBlZGVmIHVuaW9uIGludF9jc3JfdGFnIHsKKwl1MzIgICByZWc7CisJc3RydWN0IHsKKwkJdTMyIEZMRF9FTkRfRVZFICAgOjE7CisJCXUzMiBGTERfRU5EX09ERCAgIDoxOworCQl1MzIgRkxEX1NUQVJUICAgICA6MTsKKwkJdTMyICAgICAgICAgICAgICAgOjU7CisJCXUzMiBGTERfRU5EX0VWRV9FTjoxOworCQl1MzIgRkxEX0VORF9PRERfRU46MTsKKwkJdTMyIEZMRF9TVEFSVF9FTiAgOjE7CisJCXUzMiAgICAgICAgICAgICAgIDoyMTsKKwl9IGZsZDsKK30gSU5UX0NTUl9SOworCit0eXBlZGVmIHVuaW9uIG1hc2tfbGVuZ3RoX3RhZyB7CisJdTMyICAgcmVnOworCXN0cnVjdCB7CisJCXUzMiBNQVNLX0xFTl9FVkU6NTsKKwkJdTMyICAgICAgICAgICAgIDoxMTsKKwkJdTMyIE1BU0tfTEVOX09ERDo1OworCQl1MzIgICAgICAgICAgICAgOjExOworCX0gZmxkOworfSBNQVNLX0xFTkdUSF9SOworCit0eXBlZGVmIHVuaW9uIGZpZm9fZmxhZ19jbnRfdGFnIHsKKwl1MzIgICByZWc7CisJc3RydWN0IHsKKwkJdTMyIEFGX0NPVU5UOjc7CisJCXUzMiAgICAgICAgIDo5OworCQl1MzIgQUVfQ09VTlQ6NzsKKwkJdTMyICAgICAgICAgOjk7CisJfSBmbGQ7Cit9IEZJRk9fRkxBR19DTlRfUjsKKwordHlwZWRlZiB1bmlvbiBpaWNfY2xrX2R1ciB7CisJdTMyICAgcmVnOworCXN0cnVjdCB7CisJCXUzMiBQSEFTRV8xOjg7CisJCXUzMiBQSEFTRV8yOjg7CisJCXUzMiBQSEFTRV8zOjg7CisJCXUzMiBQSEFTRV80Ojg7CisJfSBmbGQ7Cit9IElJQ19DTEtfRFVSX1I7CisKK3R5cGVkZWYgdW5pb24gaWljX2NzcjFfdGFnIHsKKwl1MzIgICByZWc7CisJc3RydWN0IHsKKwkJdTMyIEFVVE9fRU4gICAgIDoxOworCQl1MzIgQllQQVNTICAgICAgOjE7CisJCXUzMiBTREFfT1VUICAgICA6MTsKKwkJdTMyIFNDTF9PVVQgICAgIDoxOworCQl1MzIgICAgICAgICAgICAgOjQ7CisJCXUzMiBBVVRPX0FCT1JUICA6MTsKKwkJdTMyIERJUkVDVF9BQk9SVDoxOworCQl1MzIgU0RBX0lOICAgICAgOjE7CisJCXUzMiBTQ0xfSU4gICAgICA6MTsKKwkJdTMyICAgICAgICAgICAgIDo0OworCQl1MzIgQVVUT19BRERSICAgOjg7CisJCXUzMiBSRF9EQVRBICAgICA6ODsKKwl9IGZsZDsKK30gSUlDX0NTUjFfUjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGlpY19jc3IyX3RhZworICovCit0eXBlZGVmIHVuaW9uIGlpY19jc3IyX3RhZyB7CisJdTMyICAgcmVnOworCXN0cnVjdCB7CisJCXUzMiBESVJfV1JfREFUQSA6ODsKKwkJdTMyIERJUl9TVUJfQUREUjo4OworCQl1MzIgRElSX1JEICAgICAgOjE7CisJCXUzMiBESVJfQUREUiAgICA6NzsKKwkJdTMyIE5FV19DWUNMRSAgIDoxOworCQl1MzIgICAgICAgICAgICAgOjc7CisJfSBmbGQ7Cit9ICBJSUNfQ1NSMl9SOworCisvKiB1c2UgZm9yIGJvdGggRVZFTiBhbmQgT0REIERNQSBVUFBFUiBMSU1JVFMgKi8KKworLyoKKyAqIGRtYV91cHBlcl9sbXRfdGFnCisgKi8KK3R5cGVkZWYgdW5pb24gZG1hX3VwcGVyX2xtdF90YWcgICB7CisJdTMyIHJlZzsKKwlzdHJ1Y3QgeworCQl1MzIgRE1BX1VQUEVSX0xNVF9WQUw6MjQ7CisJCXUzMiAgICAgICAgICAgICAgICAgIDo4OworCX0gZmxkOworfSBETUFfVVBQRVJfTE1UX1I7CisKKworLyoKKyAqIEdsb2JhbCBkZWNsYXJhdGlvbnMgb2YgbG9jYWwgY29waWVzIG9mIGJvYXJkcycgMzIgYml0IHJlZ2lzdGVycworICovCitleHRlcm4gdTMyIGV2ZW5fZG1hX3N0YXJ0X3I7CQkvKiAgYml0IDAgc2hvdWxkIGFsd2F5cyBiZSAwICovCitleHRlcm4gdTMyIG9kZF9kbWFfc3RhcnRfcjsJCS8qICAgICAgICAgICAgICAgLi4gICAgICAgICAgKi8KK2V4dGVybiB1MzIgZXZlbl9kbWFfc3RyaWRlX3I7CS8qICBiaXRzIDAmMSBzaG91bGQgYWx3YXlzIGJlIDAgKi8KK2V4dGVybiB1MzIgb2RkX2RtYV9zdHJpZGVfcjsJCS8qICAgICAgICAgICAgICAgLi4gICAgICAgICAgICAgKi8KK2V4dGVybiB1MzIgZXZlbl9waXhlbF9mbXRfcjsKK2V4dGVybiB1MzIgb2RkX3BpeGVsX2ZtdF9yOworCitleHRlcm4gRklGT19UUklHR0VSX1IJCWZpZm9fdHJpZ2dlcl9yOworZXh0ZXJuIFhGRVJfTU9ERV9SCQl4ZmVyX21vZGVfcjsKK2V4dGVybiBDU1IxX1IJCQljc3IxX3I7CitleHRlcm4gUkVUUllfV0FJVF9DTlRfUgkJcmV0cnlfd2FpdF9jbnRfcjsKK2V4dGVybiBJTlRfQ1NSX1IJCWludF9jc3JfcjsKKworZXh0ZXJuIHUzMiBldmVuX2ZsZF9tYXNrX3I7CitleHRlcm4gdTMyIG9kZF9mbGRfbWFza19yOworCitleHRlcm4gTUFTS19MRU5HVEhfUgkJbWFza19sZW5ndGhfcjsKK2V4dGVybiBGSUZPX0ZMQUdfQ05UX1IJCWZpZm9fZmxhZ19jbnRfcjsKK2V4dGVybiBJSUNfQ0xLX0RVUl9SCQlpaWNfY2xrX2R1cl9yOworZXh0ZXJuIElJQ19DU1IxX1IJCWlpY19jc3IxX3I7CitleHRlcm4gSUlDX0NTUjJfUgkJaWljX2NzcjJfcjsKK2V4dGVybiBETUFfVVBQRVJfTE1UX1IJCWV2ZW5fZG1hX3VwcGVyX2xtdF9yOworZXh0ZXJuIERNQV9VUFBFUl9MTVRfUgkJb2RkX2RtYV91cHBlcl9sbXRfcjsKKworCisKKy8qKioqKioqKioqKioqKioqKiA4IGJpdCBJMkMgcmVnaXN0ZXIgZ2xvYmFscyAgKioqKioqKioqKiovCisjZGVmaW5lIENTUjIJCTB4MDEwCS8qIGluZGljZXMgb2YgOC1iaXQgSTJDIG1hcHBlZCByZWcncyovCisjZGVmaW5lIEVWRU5fQ1NSCTB4MDExCisjZGVmaW5lIE9ERF9DU1IJCTB4MDEyCisjZGVmaW5lIENPTkZJRwkJMHgwMTMKKyNkZWZpbmUgRFRfSUQJCTB4MDFGCisjZGVmaW5lIFhfQ0xJUF9TVEFSVAkweDAyMAorI2RlZmluZSBZX0NMSVBfU1RBUlQJMHgwMjIKKyNkZWZpbmUgWF9DTElQX0VORAkweDAyNAorI2RlZmluZSBZX0NMSVBfRU5ECTB4MDI2CisjZGVmaW5lIEFEX0FERFIJCTB4MDMwCisjZGVmaW5lIEFEX0xVVAkJMHgwMzEKKyNkZWZpbmUgQURfQ01ECQkweDAzMgorI2RlZmluZSBESUdfT1VUCQkweDA0MAorI2RlZmluZSBQTV9MVVRfQUREUgkweDA1MAorI2RlZmluZSBQTV9MVVRfREFUQQkweDA1MQorCisKKy8qKioqKioqKiBBc3NpZ25tZW50cyBhbmQgVHlwZWRlZnMgZm9yIDggYml0IEkyQyBSZWdpc3RlcnMqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiB1bmlvbiBpMmNfY3NyMl90YWcgeworCXU4IHJlZzsKKwlzdHJ1Y3QgeworCQl1OCBDSFJPTV9GSUw6MTsKKwkJdTggU1lOQ19TTlRMOjE7CisJCXU4IEhaNTA6MTsKKwkJdTggU1lOQ19QUkVTRU5UOjE7CisJCXU4IEJVU1lfRVZFOjE7CisJCXU4IEJVU1lfT0REOjE7CisJCXU4IERJU1BfUEFTUzoxOworCX0gZmxkOworfSBJMkNfQ1NSMjsKKwordHlwZWRlZiB1bmlvbiBpMmNfZXZlbl9jc3JfdGFnIHsKKwl1OCAgICByZWc7CisJc3RydWN0IHsKKwkJdTggRE9ORV9FVkUgOjE7CisJCXU4IFNOR0xfRVZFIDoxOworCQl1OCBFUlJPUl9FVkU6MTsKKwkJdTggICAgICAgICAgOjU7CisJfSBmbGQ7Cit9IEkyQ19FVkVOX0NTUjsKKwordHlwZWRlZiB1bmlvbiBpMmNfb2RkX2Nzcl90YWcgeworCXU4IHJlZzsKKwlzdHJ1Y3QgeworCQl1OCBET05FX09ERDoxOworCQl1OCBTTkdMX09ERDoxOworCQl1OCBFUlJPUl9PREQ6MTsKKwkJdTggOjU7CisJfSBmbGQ7Cit9IEkyQ19PRERfQ1NSOworCit0eXBlZGVmIHVuaW9uIGkyY19jb25maWdfdGFnIHsKKwl1OCByZWc7CisJc3RydWN0IHsKKwkJdTggQUNRX01PREU6MjsKKwkJdTggRVhUX1RSSUdfRU46MTsKKwkJdTggRVhUX1RSSUdfUE9MOjE7CisJCXU4IEhfU0NBTEU6MTsKKwkJdTggQ0xJUDoxOworCQl1OCBQTV9MVVRfU0VMOjE7CisJCXU4IFBNX0xVVF9QR006MTsKKwl9IGZsZDsKK30gSTJDX0NPTkZJRzsKKworCit0eXBlZGVmIHVuaW9uIGkyY19hZF9jbWRfdGFnIHsKKwkvKiBiaXRzIGNhbiBoYXZlIDMgZGlmZmVyZW50IG1lYW5pbmdzIGRlcGVuZGluZyBvbiB2YWx1ZSBvZiBBRF9BRERSICovCisJdTggcmVnOworCS8qIEJ0MjUyIENvbW1hbmQgUmVnaXN0ZXIgaWYgQURfQUREUiA9IDAwaCAqLworCXN0cnVjdCB7CisJCXU4ICAgICAgICAgICAgIDoyOworCQl1OCBTWU5DX0xWTF9TRUw6MjsKKwkJdTggU1lOQ19DTkxfU0VMOjI7CisJCXU4IERJR0lUSVpFX0NOTF9TRUwxOjI7CisJCX0gYnQyNTJfY29tbWFuZDsKKworCS8qIEJ0MjUyIElPVVQwIHJlZ2lzdGVyIGlmIEFEX0FERFIgPSAwMWggKi8KKwlzdHJ1Y3QgeworCQl1OCBJT1VUX0RBVEE6ODsKKwl9IGJ0MjUyX2lvdXQwOworCisJLyogQlQyNTIgSU9VVDEgcmVnaXN0ZXIgaWYgQURfQUREUiA9IDAyaCAqLworCXN0cnVjdCB7CisJCXU4IElPVVRfREFUQTo4OworCX0gYnQyNTJfaW91dDE7Cit9IEkyQ19BRF9DTUQ7CisKKworLyoqKioqIEdsb2JhbCBkZWNsYXJhdGlvbnMgb2YgbG9jYWwgY29waWVzIG9mIGJvYXJkcycgOCBiaXQgSTJDIHJlZ2lzdGVycyAqKiovCisKK2V4dGVybiBJMkNfQ1NSMgkJCWkyY19jc3IyOworZXh0ZXJuIEkyQ19FVkVOX0NTUgkJaTJjX2V2ZW5fY3NyOworZXh0ZXJuIEkyQ19PRERfQ1NSCQlpMmNfb2RkX2NzcjsKK2V4dGVybiBJMkNfQ09ORklHCQlpMmNfY29uZmlnOworZXh0ZXJuIHU4CQkJaTJjX2R0X2lkOworZXh0ZXJuIHU4CQkJaTJjX3hfY2xpcF9zdGFydDsKK2V4dGVybiB1OAkJCWkyY195X2NsaXBfc3RhcnQ7CitleHRlcm4gdTgJCQlpMmNfeF9jbGlwX2VuZDsKK2V4dGVybiB1OAkJCWkyY195X2NsaXBfZW5kOworZXh0ZXJuIHU4CQkJaTJjX2FkX2FkZHI7CitleHRlcm4gdTgJCQlpMmNfYWRfbHV0OworZXh0ZXJuIEkyQ19BRF9DTUQJCWkyY19hZF9jbWQ7CitleHRlcm4gdTgJCQlpMmNfZGlnX291dDsKK2V4dGVybiB1OAkJCWkyY19wbV9sdXRfYWRkcjsKK2V4dGVybiB1OAkJCWkyY19wbV9sdXRfZGF0YTsKKworLyogRnVuY3Rpb25zIGZvciBHbG9iYWwgdXNlICovCisKKy8qIGFjY2VzcyA4LWJpdCBJSUMgcmVnaXN0ZXJzICovCisKK2V4dGVybiBpbnQgUmVhZEkyQyh1OCAqbHBSZWcsIHVfc2hvcnQgd0lyZWdJbmRleCwgdTggKmJ5VmFsKTsKK2V4dGVybiBpbnQgV3JpdGVJMkModTggKmxwUmVnLCB1X3Nob3J0IHdJcmVnSW5kZXgsIHU4IGJ5VmFsKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pc3IuYyBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1X2lzci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkN2Y5M2QKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pc3IuYwpAQCAtMCwwICsxLDUxNiBAQAorLyoKKworQ29weXJpZ2h0IDE5OTYsMjAwMiwyMDA1IEdyZWdvcnkgRC4gSGFnZXIsIEFsZnJlZCBBLiBSaXp6aSwgTm9haCBKLiBDb3dhbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBKYXNvbiBMYXBlbnRhLCBTY290dCBTbWVkbGV5LCBHcmVnIFNoYXJwCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBEVDMxNTUgRGV2aWNlIERyaXZlci4KKworVGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0CithbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKK3B1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQordXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eQorb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAorTUEgMDIxMTEtMTMwNyBVU0EKKworICAgRmlsZTogZHQzMTU1X2lzci5jCitQdXJwb3NlOiBCdWZmZXIgbWFuYWdlbWVudCByb3V0aW5lcywgYW5kIG90aGVyIHJvdXRpbmVzIGZvciB0aGUgSVNSCisgICAgICAgICAodGhlIGFjdHVhbCBpc3IgaXMgaW4gZHQzMTU1X2Rydi5jKQorCistLSBDaGFuZ2VzIC0tCisKKyAgRGF0ZSAgICAgICBQcm9ncmFtbWVyICBEZXNjcmlwdGlvbiBvZiBjaGFuZ2VzIG1hZGUKKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAwMy1KdWwtMjAwMCBKTUwgICAgICAgbi9hCisgIDAyLUFwci0yMDAyIFNTICAgICAgICBNb2RzIHRvIG1ha2Ugd29yayB3aXRoIHNlcGFyYXRlIGFsbG9jYXRvcgorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlOyBNZXJnZWQgSm9obiBSb2xsJ3MgbW9kcyB0byBtYWtlIHdvcmsgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgYm9hcmRzLgorICAxMC1KdWwtMjAwMiBHQ1MgICAgICAgQ29tcGxldGUgcmV3cml0ZSBvZiBzZXR1cF9idWZmZXJzIHRvIGRpc2FsbG93CisgICAgICAgICAgICAgICAgICAgICAgICBidWZmZXJzIHdoaWNoIHNwYW4gYSA0TUIgYm91bmRhcnkuCisgIDI0LUp1bC0yMDAyIFNTICAgICAgICBHUEwgbGljZW5jZS4KKyAgMzAtSnVsLTIwMDIgTkpDICAgICAgIEFkZGVkIHN1cHBvcnQgZm9yIGJ1ZmZlciBsb29wLgorICAzMS1KdWwtMjAwMiBOSkMgICAgICAgQ29tcGxldGUgcmV3cml0ZSBvZiBidWZmZXIgbWFuYWdlbWVudAorICAwMi1BdWctMjAwMiBOSkMgICAgICAgSW5jbHVkaW5nIHNsYWIuaCBpbnN0ZWFkIG9mIG1hbGxvYy5oIChubyB3YXJuaW5nKS4KKyAgICAgICAgICAgICAgICAgICAgICAgIEFsc28sIGFsbG9jYXRvcl9pbml0KCkgbm93IHJldHVybnMgYWxsb2NhdG9yX21heAorICAgICAgICAgICAgICAgICAgICAgICAgc28gY2xlYW5lZCB1cCBhbGxvY2F0ZV9idWZmZXJzKCkgYWNjb3JkaW5nbHkuCisgIDA4LUF1Zy0yMDA1IFNTICAgICAgICBwb3J0IHRvIDIuNiBrZXJuZWwuCisKKyovCisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgImR0MzE1NS5oIgorI2luY2x1ZGUgImR0MzE1NV9kcnYuaCIKKyNpbmNsdWRlICJkdDMxNTVfaW8uaCIKKyNpbmNsdWRlICJkdDMxNTVfaXNyLmgiCisjaW5jbHVkZSAiYWxsb2NhdG9yLmgiCisKKyNkZWZpbmUgRk9VUl9NQiAgICAgICAgICgweDA0MDAwMDApICAvKiBDYW4ndCBETUEgYWNjcm9zcyBhIDRNQiBib3VuZGFyeSEqLworI2RlZmluZSBVUFBFUl8xMF9CSVRTICAgKDB4M0ZGPDwyMikgIC8qIENhbid0IERNQSBhY2Nyb3NzIGEgNE1CIGJvdW5kYXJ5ISovCisKKworLyogUG9pbnRlciBpbnRvIGdsb2JhbCBzdHJ1Y3R1cmUgZm9yIGhhbmRsaW5nIGJ1ZmZlcnMgKi8KK3N0cnVjdCBkdDMxNTVfZmJ1ZmZlcl9zICpkdDMxNTVfZmJ1ZmZlcltNQVhCT0FSRFNdID0ge05VTEwKKyNpZiBNQVhCT0FSRFMgPT0gMgorCQkJCQkJICAgICAgLCBOVUxMCisjZW5kaWYKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNpbXBsZSBhcnJheSBiYXNlZCBxdWUgc3RydWN0CisgKgorICogU29tZSBoYW5keSBmdW5jdGlvbnMgdXNpbmcgdGhlIGJ1ZmZlcmluZyBzdHJ1Y3R1cmUuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogYXJlX2VtcHR5X2J1ZmZlcnMKKyAqIG0gaXMgbWlub3IgIyBvZiBkZXZpY2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbmxpbmUgYm9vbCBhcmVfZW1wdHlfYnVmZmVycyggaW50IG0gKQoreworICByZXR1cm4gKCBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5lbXB0eV9sZW4gKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBwdXNoX2VtcHR5CisgKiBtIGlzIG1pbm9yICMgb2YgZGV2aWNlCisgKgorICogVGhpcyBpcyBzbGlnaHRseSBjb25mdXNpbmcuICBUaGUgbnVtYmVyIGVtcHR5X2xlbiBpcyB0aGUgbGl0ZXJhbCAjCisgKiBvZiBlbXB0eSBidWZmZXJzLiAgQWZ0ZXIgY2FsbGluZywgZW1wdHlfbGVuLTEgaXMgdGhlIGluZGV4IGludG8gdGhlCisgKiBlbXB0eSBidWZmZXIgc3RhY2suICBTbywgaWYgZW1wdHlfbGVuID09IDEsIHRoZXJlIGlzIG9uZSBlbXB0eSBidWZmZXIsCisgKiBnaXZlbiBieSBkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfYnVmZmVyc1swXS4KKyAqIGVtcHR5X2J1ZmZlcnMgc2hvdWxkIG5ldmVyIGZpbGwgdXAsIHRob3VnaCB0aGlzIGlzIG5vdCBjaGVja2VkLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqLworaW5saW5lIHZvaWQgcHVzaF9lbXB0eSggaW50IGluZGV4LCBpbnQgbSApCit7CisgIGR0MzE1NV9mYnVmZmVyW21dLT5lbXB0eV9idWZmZXJzWyBkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfbGVuIF0gPSBpbmRleDsKKyAgZHQzMTU1X2ZidWZmZXJbbV0tPmVtcHR5X2xlbisrOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHBvcF9lbXB0eSggbSApCisgKiBtIGlzIG1pbm9yICMgb2YgZGV2aWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbmxpbmUgaW50IHBvcF9lbXB0eSggaW50IG0gKQoreworICBkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfbGVuLS07CisgIHJldHVybiBkdDMxNTVfZmJ1ZmZlclttXS0+ZW1wdHlfYnVmZmVyc1sgZHQzMTU1X2ZidWZmZXJbbV0tPmVtcHR5X2xlbiBdOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKgorICogaXNfcmVhZHlfYnVmX2VtcHR5KCBtICkKKyAqIG0gaXMgbWlub3IgIyBvZiBkZXZpY2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqLworaW5saW5lIGJvb2wgaXNfcmVhZHlfYnVmX2VtcHR5KCBpbnQgbSApCit7CisgIHJldHVybiAoKGR0MzE1NV9mYnVmZmVyWyBtIF0tPnJlYWR5X2xlbikgPT0gMCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBpc19yZWFkeV9idWZfZnVsbCggbSApCisgKiBtIGlzIG1pbm9yICMgb2YgZGV2aWNlCisgKiB0aGlzIHNob3VsZCAqbmV2ZXIqIGJlIHRydWUgaWYgdGhlcmUgYXJlIGFueSBhY3RpdmUsIGxvY2tlZCBvciBlbXB0eQorICogYnVmZmVycywgc2luY2UgaXQgY29ycmVzcG9uZHMgdG8gbmJ1ZmZlcnMgcmVhZHkgYnVmZmVycyEhCisgKiA3LzMxLzAyOiB0b3RhbCByZXdyaXRlLiAtLU5KQworICoqKioqKioqKioqKioqKioqKioqKioqKiovCitpbmxpbmUgYm9vbCBpc19yZWFkeV9idWZfZnVsbCggaW50IG0gKQoreworICByZXR1cm4gKCBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5yZWFkeV9sZW4gPT0gZHQzMTU1X2ZidWZmZXJbIG0gXS0+bmJ1ZmZlcnMgKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBwdXNoX3JlYWR5KCBtLCBidWZmZXIgKQorICogbSBpcyBtaW5vciAjIG9mIGRldmljZQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2lubGluZSB2b2lkIHB1c2hfcmVhZHkoIGludCBtLCBpbnQgaW5kZXggKQoreworICBpbnQgaGVhZCA9IGR0MzE1NV9mYnVmZmVyW21dLT5yZWFkeV9oZWFkOworCisgIGR0MzE1NV9mYnVmZmVyWyBtIF0tPnJlYWR5X3F1ZVsgaGVhZCBdID0gaW5kZXg7CisgIGR0MzE1NV9mYnVmZmVyWyBtIF0tPnJlYWR5X2hlYWQgPSAoIChoZWFkICsgMSkgJQorCQkJCSAgICAgIChkdDMxNTVfZmJ1ZmZlclsgbSBdLT5uYnVmZmVycykgKTsKKyAgZHQzMTU1X2ZidWZmZXJbIG0gXS0+cmVhZHlfbGVuKys7CisKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBnZXRfdGFpbCgpCisgKiBtIGlzIG1pbm9yICMgb2YgZGV2aWNlCisgKgorICogU2ltcGx5IGNvbXB0dXRlcyB0aGUgdGFpbCBnaXZlbiB0aGUgaGVhZCBhbmQgdGhlIGxlbmd0aC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgaW50IGdldF90YWlsKCBpbnQgbSApCit7CisgIHJldHVybiAoKGR0MzE1NV9mYnVmZmVyWyBtIF0tPnJlYWR5X2hlYWQgLQorCSAgIGR0MzE1NV9mYnVmZmVyWyBtIF0tPnJlYWR5X2xlbiArCisJICAgZHQzMTU1X2ZidWZmZXJbIG0gXS0+bmJ1ZmZlcnMpJQorCSAgKGR0MzE1NV9mYnVmZmVyWyBtIF0tPm5idWZmZXJzKSk7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIHBvcF9yZWFkeSgpCisgKiBtIGlzIG1pbm9yICMgb2YgZGV2aWNlCisgKgorICogVGhpcyBhc3N1bWVzIHRoYXQgdGhlcmUgaXMgYSByZWFkeSBidWZmZXIgcmVhZHkuLi4gc2hvdWxkCisgKiBiZSBjaGVja2VkIChlLmcuIHdpdGggaXNfcmVhZHlfYnVmX2VtcHR5KCkgIHByaW9yIHRvIGNhbGwuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbmxpbmUgaW50IHBvcF9yZWFkeSggaW50IG0gKQoreworICBpbnQgdGFpbDsKKyAgdGFpbCA9IGdldF90YWlsKG0pOworICBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5yZWFkeV9sZW4tLTsKKyAgcmV0dXJuIGR0MzE1NV9mYnVmZmVyWyBtIF0tPnJlYWR5X3F1ZVsgdGFpbCBdOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogcHJpbnRxdWVzCisgKiBtIGlzIG1pbm9yICMgb2YgZGV2aWNlCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbmxpbmUgdm9pZCBwcmludHF1ZXMoIGludCBtICkKK3sKKyAgaW50IGhlYWQgPSBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5yZWFkeV9oZWFkOworICBpbnQgdGFpbDsKKyAgaW50IG51bSA9IGR0MzE1NV9mYnVmZmVyWyBtIF0tPm5idWZmZXJzOworICBpbnQgZnJhbWVfaW5kZXg7CisgIGludCBpbmRleDsKKworICB0YWlsID0gZ2V0X3RhaWwobSk7CisKKyAgcHJpbnRrKCJcbiBSOiIpOworICBmb3IgKCBpbmRleCA9IHRhaWw7IGluZGV4ICE9IGhlYWQ7IGluZGV4KyssIGluZGV4ID0gaW5kZXggJSAobnVtKSApCisgICAgeworICAgICAgZnJhbWVfaW5kZXggPSBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5yZWFkeV9xdWVbIGluZGV4IF07CisgICAgICBwcmludGsoIiAlZCAiLCBmcmFtZV9pbmRleCApOworICAgIH0KKworICBwcmludGsoIlxuIEU6Iik7CisgIGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5lbXB0eV9sZW47IGluZGV4KysgKQorICAgIHsKKyAgICAgIGZyYW1lX2luZGV4ID0gZHQzMTU1X2ZidWZmZXJbIG0gXS0+ZW1wdHlfYnVmZmVyc1sgaW5kZXggXTsKKyAgICAgIHByaW50aygiICVkICIsIGZyYW1lX2luZGV4ICk7CisgICAgfQorCisgIGZyYW1lX2luZGV4ID0gZHQzMTU1X2ZidWZmZXJbIG0gXS0+YWN0aXZlX2J1ZjsKKyAgcHJpbnRrKCJcbiBBOiAlZCIsIGZyYW1lX2luZGV4KTsKKworICBmcmFtZV9pbmRleCA9IGR0MzE1NV9mYnVmZmVyWyBtIF0tPmxvY2tlZF9idWY7CisgIHByaW50aygiXG4gTDogJWQgXG4iLCBmcmFtZV9pbmRleCApOworCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogYWRqdXN0XzRNQgorICoKKyAqICBJZiBhIGJ1ZmZlciBpbnRlcnNlY3RzIHRoZSA0TUIgYm91bmRhcnksIHB1c2gKKyAqICB0aGUgc3RhcnQgYWRkcmVzcyB1cCB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZQorICogIG5leHQgNE1CIGNodW5rIChhc3N1bWluZyBidWZzaXplIDwgNE1CKS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMiBhZGp1c3RfNE1CICh1MzIgYnVmX2FkZHIsIHUzMiBidWZzaXplKSB7CisgIGlmICgoKGJ1Zl9hZGRyK2J1ZnNpemUpICYgVVBQRVJfMTBfQklUUykgIT0gKGJ1Zl9hZGRyICYgVVBQRVJfMTBfQklUUykpCisgICAgcmV0dXJuIChidWZfYWRkcitidWZzaXplKSAmIFVQUEVSXzEwX0JJVFM7CisgIGVsc2UKKyAgICByZXR1cm4gYnVmX2FkZHI7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBhbGxvY2F0ZV9idWZmZXJzCisgKgorICogIFRyeSB0byBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5IGZvciBhbGwgcmVxdWVzdGVkCisgKiAgYnVmZmVycy4gIElmIHRoZXJlIGlzIG5vdCBlbm91Z2ggZnJlZSBzcGFjZQorICogIHRyeSBmb3IgbGVzcyBtZW1vcnkuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCit2b2lkIGFsbG9jYXRlX2J1ZmZlcnMgKHUzMiAqYnVmX2FkZHIsIHUzMiogdG90YWxfc2l6ZV9rYnMsCisJCSAgICAgICB1MzIgYnVmc2l6ZSkKK3sKKyAgLyogQ29tcHV0ZSB0aGUgbWluaW11bSBhbW91bnQgb2YgbWVtb3J5IGd1YXJhbnRlZWQgdG8gaG9sZCBhbGwKKyAgICAgTUFYQlVGRkVSUyBzdWNoIHRoYXQgbm8gYnVmZmVyIGNyb3NzZXMgdGhlIDRNQiBib3VuZGFyeS4KKyAgICAgU3RvcmUgdGhpcyB2YWx1ZSBpbiB0aGUgdmFyaWFibGUgImZ1bGxfc2l6ZSIgKi8KKworICB1MzIgYWxsb2NhdG9yX21heDsKKyAgdTMyIGJ1ZnNfcGVyX2NodW5rID0gKEZPVVJfTUIgLyBidWZzaXplKTsKKyAgdTMyIGZpbGxlZF9jaHVua3MgPSAoTUFYQlVGRkVSUy0xKSAvIGJ1ZnNfcGVyX2NodW5rOworICB1MzIgbGVmdG92ZXJfYnVmcyA9IE1BWEJVRkZFUlMgLSBmaWxsZWRfY2h1bmtzICogYnVmc19wZXJfY2h1bms7CisKKyAgdTMyIGZ1bGxfc2l6ZSA9IGJ1ZnNpemUgICAgICAvKiBwb3NzaWJseSB1bnVzYWJsZSBwYXJ0IG9mIDFzdCBjaHVuayAqLworICAgICsgZmlsbGVkX2NodW5rcyAqIEZPVVJfTUIgICAvKiBtYXggIyBvZiBjb21wbGV0ZWx5IGZpbGxlZCA0bWIgY2h1bmtzICovCisgICAgKyBsZWZ0b3Zlcl9idWZzICogYnVmc2l6ZTsgIC8qIHRoZXNlIGJ1ZmZzIHdpbGwgYmUgaW4gYSBwYXJ0bHkgZmlsbGVkCisJCQkJICAgY2h1bmsgYXQgYmVnaW5uaW5nIG9yIGVuZCAqLworCisgIHUzMiBmdWxsX3NpemVfa2JzID0gMSArIChmdWxsX3NpemUtMSkgLyAxMDI0OworICB1MzIgbWluX3NpemVfa2JzID0gMipuZGV2aWNlcypidWZzaXplIC8gMTAyNDsKKyAgdTMyIHNpemVfa2JzOworCisgIC8qIE5vdywgdHJ5IHRvIGFsbG9jYXRlIGZ1bGxfc2l6ZS4gIElmIHRoaXMgZmFpbHMsIGtlZXAgdHJ5aW5nIGZvcgorICAgICBsZXNzICYgbGVzcyBtZW1vcnkgdW50aWwgaXQgc3VjY2VlZHMuICovCisjaWZuZGVmIFNUQU5EQUxPTkVfQUxMT0NBVE9SCisgIC8qIGluaXRpYWxpemUgdGhlIGFsbG9jYXRvciAgICAgICAgICAgICovCisgIGFsbG9jYXRvcl9pbml0KCZhbGxvY2F0b3JfbWF4KTsKKyNlbmRpZgorICBzaXplX2ticyA9IGZ1bGxfc2l6ZV9rYnM7CisgICpidWZfYWRkciA9IDA7CisgIHByaW50aygiRFQzMTU1OiBXZSB3b3VsZCBsaWtlIHRvIGdldDogJWQgS0JcbiIsIGZ1bGxfc2l6ZV9rYnMpOworICBwcmludGsoIkRUMzE1NTogLi4uYnV0IG5lZWQgYXQgbGVhc3Q6ICVkIEtCXG4iLCBtaW5fc2l6ZV9rYnMpOworICBwcmludGsoIkRUMzE1NTogLi4udGhlIGFsbG9jYXRvciBoYXM6ICVkIEtCXG4iLCBhbGxvY2F0b3JfbWF4KTsKKyAgc2l6ZV9rYnMgPSAoZnVsbF9zaXplX2ticyA8PSBhbGxvY2F0b3JfbWF4ID8gZnVsbF9zaXplX2ticyA6IGFsbG9jYXRvcl9tYXgpOworICBpZiAoc2l6ZV9rYnMgPiBtaW5fc2l6ZV9rYnMpIHsKKyAgICBpZiAoKCpidWZfYWRkciA9IGFsbG9jYXRvcl9hbGxvY2F0ZV9kbWEgKHNpemVfa2JzLCBHRlBfS0VSTkVMKSkgIT0gMCkgeworICAgICAgcHJpbnRrKCJEVDMxNTU6ICBNYW5hZ2VkIHRvIGFsbG9jYXRlOiAlZCBLQlxuIiwgc2l6ZV9rYnMpOworICAgICAgKnRvdGFsX3NpemVfa2JzID0gc2l6ZV9rYnM7CisgICAgICByZXR1cm47CisgICAgfQorICB9CisgIC8qIElmIHdlIGdvdCBoZXJlLCB0aGUgYWxsb2NhdGlvbiBmYWlsZWQgKi8KKyAgcHJpbnRrICgiRFQzMTU1OiBBbGxvY2F0b3IgZmFpbGVkIVxuIik7CisgICpidWZfYWRkciA9IDA7CisgICp0b3RhbF9zaXplX2ticyA9IDA7CisgIHJldHVybjsKKworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZHQzMTU1X3NldHVwX2J1ZmZlcnMKKyAqCisgKiAgc2V0dXBfYnVmZmVycyBqdXN0IHB1dHMgdGhlIGJ1ZmZlcmluZyBzeXN0ZW0gaW50bworICogIGEgY29uc2lzdGVudCBzdGF0ZSBiZWZvcmUgdGhlIHN0YXJ0IG9mIGludGVycnVwdHMKKyAqCisgKiBKTUwgOiBpdCBsb29rcyBsaWtlIGFsbCB0aGUgYnVmZmVycyBuZWVkIHRvIGJlCisgKiBjb250aW51b3VzLiBTbyBJJ20gZ29pbmcgdG8gdHJ5IGFuZCBhbGxvY2F0ZSBvbmUKKyAqIGNvbnRpbnVvdXMgYnVmZmVyLgorICoKKyAqIEdDUyA6IEZpeCBETUEgcHJvYmxlbXMgd2hlbiBidWZmZXIgc3BhbnMKKyAqIDRNQiBib3VuZGFyeS4gIEFsc28sIGFkZCBlcnJvciBjaGVja2luZy4gIFRoaXMKKyAqIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIC1FTk9NRU0gd2hlbiBub3QgZW5vdWdoIG1lbW9yeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3UzMiBkdDMxNTVfc2V0dXBfYnVmZmVycyh1MzIgKmFsbG9jYXRvckFkZHIpCisKK3sKKyAgdTMyIGluZGV4OworICB1MzIgcmFtYnVmZl9hZGRyOyAvKiBzdGFydCBvZiBhbGxvY2F0aW9uICovCisgIHUzMiByYW1idWZmX3NpemU7IC8qIHRvdGFsIHNpemUgYWxsb2NhdGVkIHRvIGRyaXZlciAqLworICB1MzIgcmFtYnVmZl9hY207ICAvKiBhY2N1bWxhdG9yLCBrZWVwIHRyYWNrIG9mIGhvdyBtdWNoCisJCQkgIGlzIGxlZnQgYWZ0ZXIgYmVpbmcgc3BsaXQgdXAqLworICB1MzIgcmFtYnVmZl9lbmQ7ICAvKiBlbmQgb2YgcmFtYnVmZiAqLworICB1MzIgbnVtYnVmczsgICAgICAvKiBudW1iZXIgb2YgdXNlZnVsIGJ1ZmZlcnMgYWxsb2NhdGVkIChwZXIgZGV2aWNlKSAqLworICB1MzIgYnVmc2l6ZSAgICAgID0gRFQzMTU1X01BWF9ST1dTICogRFQzMTU1X01BWF9DT0xTOworICBpbnQgbTsgICAgICAgICAgICAgICAvKiBtaW5vciAjIG9mIGRldmljZSwgbG9vcGVkIGZvciBhbGwgZGV2cyAqLworCisgIC8qIHplcm8gdGhlIGZidWZmZXIgc3RhdHVzIGFuZCBhZGRyZXNzIHN0cnVjdHVyZSAqLworICBmb3IgKCBtID0gMDsgbSA8IG5kZXZpY2VzOyBtKyspCisgICAgeworICAgICAgZHQzMTU1X2ZidWZmZXJbIG0gXSA9ICYoZHQzMTU1X3N0YXR1c1sgbSBdLmZidWZmZXIpOworCisgICAgICAvKiBNYWtlIHN1cmUgdGhlIGJ1ZmZlcmluZyB2YXJpYWJsZXMgYXJlIGNvbnNpc3RlbnQgKi8KKyAgICAgIHsKKwl1OCAqcHRyID0gKHU4ICopIGR0MzE1NV9mYnVmZmVyWyBtIF07CisJZm9yKCBpbmRleCA9IDA7IGluZGV4IDwgc2l6ZW9mKHN0cnVjdCBkdDMxNTVfZmJ1ZmZlcl9zKTsgaW5kZXgrKykKKwkgICoocHRyKyspPTA7CisgICAgICB9CisgICAgfQorCisgIC8qIGFsbG9jYXRlIGEgbGFyZ2UgY29udGlndW91cyBjaHVuayBvZiBSQU0gKi8KKyAgYWxsb2NhdGVfYnVmZmVycyAoJnJhbWJ1ZmZfYWRkciwgJnJhbWJ1ZmZfc2l6ZSwgYnVmc2l6ZSk7CisgIHByaW50aygiRFQzMTU1OiBtZW0gaW5mb1xuIik7CisgIHByaW50aygiICAtIHJhbWJ1Zl9hZGRyID0gMHgleCBcbiIsIHJhbWJ1ZmZfYWRkcik7CisgIHByaW50aygiICAtIGxlbmd0aCAoa2IpID0gJXUgXG4iLCByYW1idWZmX3NpemUpOworICBpZiggcmFtYnVmZl9hZGRyID09IDAgKQorICAgIHsKKyAgICAgIHByaW50ayggS0VSTl9JTkZPCisJICAgICAgIkRUMzE1NTogRXJyb3Igc2V0dXBfYnVmZmVycygpIGFsbG9jYXRvciBkbWEgZmFpbGVkIFxuIiApOworICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgfQorICAqYWxsb2NhdG9yQWRkciA9IHJhbWJ1ZmZfYWRkcjsKKyAgcmFtYnVmZl9lbmQgPSByYW1idWZmX2FkZHIgKyAxMDI0ICogcmFtYnVmZl9zaXplOworCisgIC8qIGFmdGVyIGFsbG9jYXRpb24sIHdlIG5lZWQgdG8gY291bnQgaG93IG1hbnkgdXNlZnVsIGJ1ZmZlcnMgdGhlcmUKKyAgICAgYXJlIHNvIHdlIGNhbiBnaXZlIGFuIGVxdWFsIG51bWJlciB0byBlYWNoIGRldmljZSAqLworICByYW1idWZmX2FjbSA9IHJhbWJ1ZmZfYWRkcjsKKyAgZm9yICggaW5kZXggPSAwOyBpbmRleCA8IE1BWEJVRkZFUlM7IGluZGV4KyspIHsKKyAgICByYW1idWZmX2FjbSA9IGFkanVzdF80TUIgKHJhbWJ1ZmZfYWNtLCBidWZzaXplKTsvKmF2b2lkIHNwYW5uaW5nIDRNQiBiZHJ5Ki8KKyAgICBpZiAocmFtYnVmZl9hY20gKyBidWZzaXplID4gcmFtYnVmZl9lbmQpCisgICAgICBicmVhazsKKyAgICByYW1idWZmX2FjbSArPSBidWZzaXplOworICB9CisgIC8qIEZvbGxvd2luZyBsaW5lIGlzIE9LLCB3aWxsIHdhc3RlIGJ1ZmZlcnMgaWYgaW5kZXgKKyAgICogbm90IGV2ZW5seSBkaXZpc2libGUgYnkgbmRldmljZXMgLU5KQyovCisgIG51bWJ1ZnMgPSBpbmRleCAvIG5kZXZpY2VzOworICBwcmludGsoIiAgLSBudW1idWZzID0gJXVcbiIsIG51bWJ1ZnMpOworICBpZiAobnVtYnVmcyA8IDIpIHsKKyAgICBwcmludGsoIEtFUk5fSU5GTworCSAgICAiRFQzMTU1OiBFcnJvciBzZXR1cF9idWZmZXJzKCkgY291bGRuJ3QgYWxsb2NhdGUgMiBidWZzL2JvYXJkXG4iICk7CisgICAgcmV0dXJuIC1FTk9NRU07CisgIH0KKworICAvKiBub3cgdGhhdCB3ZSBoYXZlIGJvYXJkIG1lbW9yeSB3ZSBzcGl0IGl0IHVwICovCisgIC8qIGJldHdlZW4gdGhlIGJvYXJkcyBhbmQgdGhlIGJ1ZmZlcnMgICAgICAgICAgKi8KKyAgcmFtYnVmZl9hY20gPSByYW1idWZmX2FkZHI7CisgIGZvciAoIG0gPSAwOyBtIDwgbmRldmljZXM7IG0gKyspCisgICAgeworICAgICAgcmFtYnVmZl9hY20gPSBhZGp1c3RfNE1CIChyYW1idWZmX2FjbSwgYnVmc2l6ZSk7CisKKyAgICAgIC8qIFNhdmUgdGhlIHN0YXJ0IG9mIHRoaXMgYm9hcmRzIGJ1ZmZlciBzcGFjZSAoZm9yIG1tYXApLiAgKi8KKyAgICAgIGR0MzE1NV9zdGF0dXNbIG0gXS5tZW1fYWRkciA9IHJhbWJ1ZmZfYWNtOworCisgICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBudW1idWZzOyBpbmRleCsrKQorCXsKKwkgIHJhbWJ1ZmZfYWNtID0gYWRqdXN0XzRNQiAocmFtYnVmZl9hY20sIGJ1ZnNpemUpOworCSAgaWYgKHJhbWJ1ZmZfYWNtICsgYnVmc2l6ZSA+IHJhbWJ1ZmZfZW5kKSB7CisJICAgIC8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwkgICAgcHJpbnRrICgiRFQzMTU1IFBST0dSQU0gRVJST1IgKEdDUylcbiIKKwkJICAgICJFcnJvciBkaXN0cmlidXRpbmcgYWxsb2NhdGVkIGJ1ZmZlcnNcbiIpOworCSAgICByZXR1cm4gLUVOT01FTTsKKwkgIH0KKworCSAgZHQzMTU1X2ZidWZmZXJbIG0gXS0+ZnJhbWVfaW5mb1sgaW5kZXggXS5hZGRyID0gcmFtYnVmZl9hY207CisJICBwdXNoX2VtcHR5KCBpbmRleCwgbSApOworCSAgLyogcHJpbnRrKCIgIC0gQnVmZmVyIDogJWx4XG4iLAorCSAgICogZHQzMTU1X2ZidWZmZXJbIG0gXS0+ZnJhbWVfaW5mb1sgaW5kZXggXS5hZGRyICk7CisJICAgKi8KKwkgIGR0MzE1NV9mYnVmZmVyWyBtIF0tPm5idWZmZXJzICs9IDE7CisJICByYW1idWZmX2FjbSArPSBidWZzaXplOworCX0KKworICAgICAgLyogTWFrZSBzdXJlIHRoZXJlIGlzIGFuIGFjdGl2ZSBidWZmZXIgdGhlcmUuICovCisgICAgICBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5hY3RpdmVfYnVmICAgID0gcG9wX2VtcHR5KCBtICk7CisgICAgICBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5ldmVuX2hhcHBlbmVkID0gMDsKKyAgICAgIGR0MzE1NV9mYnVmZmVyWyBtIF0tPmV2ZW5fc3RvcHBlZCAgPSAwOworCisgICAgICAvKiBtYWtlIHN1cmUgdGhlcmUgaXMgbm8gbG9ja2VkX2J1ZiBKTUwgMi8yOC8wMCAqLworICAgICAgZHQzMTU1X2ZidWZmZXJbIG0gXS0+bG9ja2VkX2J1ZiA9IC0xOworCisgICAgICBkdDMxNTVfc3RhdHVzWyBtIF0ubWVtX3NpemUgPQorCXJhbWJ1ZmZfYWNtIC0gZHQzMTU1X3N0YXR1c1sgbSBdLm1lbV9hZGRyOworCisgICAgICAvKiBzZXR1cCB0aGUgcmVhZHkgcXVldWUgKi8KKyAgICAgIGR0MzE1NV9mYnVmZmVyWyBtIF0tPnJlYWR5X2hlYWQgPSAwOworICAgICAgZHQzMTU1X2ZidWZmZXJbIG0gXS0+cmVhZHlfbGVuID0gMDsKKyAgICAgIHByaW50aygiQXZhaWxhYmxlIGJ1ZmZlcnMgZm9yIGRldmljZSAlZDogJWRcbiIsCisJICAgICBtLCBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5uYnVmZmVycyk7CisgICAgfQorCisgIHJldHVybiAxOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGludGVybmFsX3JlbGVhc2VfbG9ja2VkX2J1ZmZlcgorICoKKyAqIFRoZSBpbnRlcm5hbCBmdW5jdGlvbiBmb3IgcmVsZWFzaW5nIGEgbG9ja2VkIGJ1ZmZlci4KKyAqIEl0IGFzc3VtZXMgaW50ZXJydXB0cyBhcmUgdHVybmVkIG9mZi4KKyAqCisgKiBtIGlzIG1pbm9yIG51bWJlciBvZiBkZXZpY2UKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnRlcm5hbF9yZWxlYXNlX2xvY2tlZF9idWZmZXIoIGludCBtICkKK3sKKyAgLyogUG9pbnRlciBpbnRvIGdsb2JhbCBzdHJ1Y3R1cmUgZm9yIGhhbmRsaW5nIGJ1ZmZlcnMgKi8KKyAgaWYgKCBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5sb2NrZWRfYnVmID49IDAgKQorICAgIHsKKyAgICAgIHB1c2hfZW1wdHkoIGR0MzE1NV9mYnVmZmVyWyBtIF0tPmxvY2tlZF9idWYsIG0gKTsKKyAgICAgIGR0MzE1NV9mYnVmZmVyWyBtIF0tPmxvY2tlZF9idWYgPSAtMTsKKyAgICB9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBkdDMxNTVfcmVsZWFzZV9sb2NrZWRfYnVmZmVyKCkKKyAqIG0gaXMgbWlub3IgIyBvZiBkZXZpY2UKKyAqCisgKiBUaGUgdXNlciBmdW5jdGlvbiBvZiB0aGUgYWJvdmUuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW5saW5lIHZvaWQgZHQzMTU1X3JlbGVhc2VfbG9ja2VkX2J1ZmZlciggaW50IG0gKQoreworCXVuc2lnbmVkIGxvbmcgaW50IGZsYWdzOworCWxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJaW50ZXJuYWxfcmVsZWFzZV9sb2NrZWRfYnVmZmVyKG0pOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGR0MzE1NV9mbHVzaCgpCisgKiBtIGlzIG1pbm9yICMgb2YgZGV2aWNlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW5saW5lIGludCBkdDMxNTVfZmx1c2goIGludCBtICkKK3sKKyAgaW50IGluZGV4OworICB1bnNpZ25lZCBsb25nIGludCBmbGFnczsKKyAgbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CisgIGxvY2FsX2lycV9kaXNhYmxlKCk7CisKKyAgaW50ZXJuYWxfcmVsZWFzZV9sb2NrZWRfYnVmZmVyKCBtICk7CisgIGR0MzE1NV9mYnVmZmVyWyBtIF0tPmVtcHR5X2xlbiA9IDA7CisKKyAgZm9yICggaW5kZXggPSAwOyBpbmRleCA8IGR0MzE1NV9mYnVmZmVyWyBtIF0tPm5idWZmZXJzOyBpbmRleCsrICkKKyAgICBwdXNoX2VtcHR5KCBpbmRleCwgIG0gKTsKKworICAvKiBNYWtlIHN1cmUgdGhlcmUgaXMgYW4gYWN0aXZlIGJ1ZmZlciB0aGVyZS4gKi8KKyAgZHQzMTU1X2ZidWZmZXJbIG0gXS0+YWN0aXZlX2J1ZiA9IHBvcF9lbXB0eSggbSApOworCisgIGR0MzE1NV9mYnVmZmVyWyBtIF0tPmV2ZW5faGFwcGVuZWQgPSAwOworICBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5ldmVuX3N0b3BwZWQgID0gMDsKKworICAvKiBzZXR1cCB0aGUgcmVhZHkgcXVldWUgICovCisgIGR0MzE1NV9mYnVmZmVyWyBtIF0tPnJlYWR5X2hlYWQgPSAwOworICBkdDMxNTVfZmJ1ZmZlclsgbSBdLT5yZWFkeV9sZW4gPSAwOworCisgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworICByZXR1cm4gMDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBkdDMxNTVfZ2V0X3JlYWR5X2J1ZmZlcigpCisgKiBtIGlzIG1pbm9yICMgb2YgZGV2aWNlCisgKgorICogZ2V0X3JlYWR5X2J1ZmZlciB3aWxsIGdyYWIgdGhlIG5leHQgY2h1bmsgb2YgZGF0YQorICogaWYgaXQgaXMgYWxyZWFkeSB0aGVyZSwgb3RoZXJ3aXNlIGl0IHJldHVybnMgMC4KKyAqIElmIHRoZSB1c2VyIGhhcyBhIGJ1ZmZlciBsb2NrZWQgaXQgd2lsbCB1bmxvY2sKKyAqIHRoYXQgYnVmZmVyIGJlZm9yZSByZXR1cm5pbmcgdGhlIG5ldyBvbmUuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitpbmxpbmUgaW50IGR0MzE1NV9nZXRfcmVhZHlfYnVmZmVyKCBpbnQgbSApCit7CisgIGludCBmcmFtZV9pbmRleDsKKyAgdW5zaWduZWQgbG9uZyBpbnQgZmxhZ3M7CisgIGxvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOworICBsb2NhbF9pcnFfZGlzYWJsZSgpOworCisjaWZkZWYgREVCVUdfUVVFU19BCisgIHByaW50cXVlcyggbSApOworI2VuZGlmCisKKyAgaW50ZXJuYWxfcmVsZWFzZV9sb2NrZWRfYnVmZmVyKCBtICk7CisKKyAgaWYgKGlzX3JlYWR5X2J1Zl9lbXB0eSggbSApKQorICAgIGZyYW1lX2luZGV4ID0gLTE7CisgIGVsc2UKKyAgICB7CisgICAgICBmcmFtZV9pbmRleCA9IHBvcF9yZWFkeSggbSApOworICAgICAgZHQzMTU1X2ZidWZmZXJbIG0gXS0+bG9ja2VkX2J1ZiA9IGZyYW1lX2luZGV4OworICAgIH0KKworI2lmZGVmIERFQlVHX1FVRVNfQgorICBwcmludHF1ZXMoIG0gKTsKKyNlbmRpZgorCisgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKworICByZXR1cm4gZnJhbWVfaW5kZXg7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pc3IuaCBiL2RyaXZlcnMvc3RhZ2luZy9kdDMxNTUvZHQzMTU1X2lzci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1OTVjYjEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZHQzMTU1L2R0MzE1NV9pc3IuaApAQCAtMCwwICsxLDc3IEBACisvKgorCitDb3B5cmlnaHQgMTk5NiwyMDAyIEdyZWdvcnkgRC4gSGFnZXIsIEFsZnJlZCBBLiBSaXp6aSwgTm9haCBKLiBDb3dhbiwKKwkJICAgIEphc29uIExhcGVudGEsIFNjb3R0IFNtZWRsZXkKKworVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERUMzE1NSBEZXZpY2UgRHJpdmVyLgorCitUaGUgRFQzMTU1IERldmljZSBEcml2ZXIgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQKK2FuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCitMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCitUaGUgRFQzMTU1IERldmljZSBEcml2ZXIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlCit1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5CitvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgRFQzMTU1IERldmljZSBEcml2ZXI7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCitNQSAwMjExMS0xMzA3IFVTQQorCisKKy0tIENoYW5nZXMgLS0KKworICBEYXRlICAgICBQcm9ncmFtbWVyICAgRGVzY3JpcHRpb24gb2YgY2hhbmdlcyBtYWRlCisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgMDMtSnVsLTIwMDAgSk1MICAgICAgIG4vYQorICAyNC1KdWwtMjAwMiBTUyAgICAgICAgR1BMIGxpY2VuY2UuCisgIDI2LU9jdC0yMDA5IFNTCVBvcnRpbmcgdG8gMi42LjMwIGtlcm5lbC4KKworLS0gbm90ZXMgLS0KKworKi8KKworI2lmbmRlZiBEVDMxNTVfSVNSX0gKKyNkZWZpbmUgRFQzMTU1X0lTUl9ICisKK2V4dGVybiBzdHJ1Y3QgZHQzMTU1X2ZidWZmZXJfcyAqZHQzMTU1X2ZidWZmZXJbTUFYQk9BUkRTXTsKKworLyogVXNlciBmdW5jdGlvbnMgZm9yIGJ1ZmZlcmluZyAqLworLyogSW5pdGlhbGl6ZSB0aGUgYnVmZmVyaW5nIHN5c3RlbS4gIFRoaXMgc2hvdWxkICovCisvKiBiZSBjYWxsZWQgcHJpb3IgdG8gZW5hYmxpbmcgaW50ZXJydXB0cyAqLworCit1MzIgZHQzMTU1X3NldHVwX2J1ZmZlcnModTMyICphbGxvY2F0b3JBZGRyKTsKKworLyogR2V0IHRoZSBuZXh0IGZyYW1lIG9mIGRhdGEgaWYgaXQgaXMgcmVhZHkuICBSZXR1cm5zICovCisvKiB6ZXJvIGlmIG5vIGRhdGEgaXMgcmVhZHkuICBJZiB0aGVyZSBpcyBkYXRhIGJ1dCAqLworLyogdGhlIHVzZXIgaGFzIGEgbG9ja2VkIGJ1ZmZlciwgaXQgd2lsbCB1bmxvY2sgdGhhdCAqLworLyogYnVmZmVyIGFuZCByZXR1cm4gaXQgdG8gdGhlIGZyZWUgbGlzdC4gKi8KKworaW50IGR0MzE1NV9nZXRfcmVhZHlfYnVmZmVyKGludCBtaW5vcik7CisKKy8qIFJldHVybiBhIGxvY2tlZCBidWZmZXIgdG8gdGhlIGZyZWUgbGlzdCAqLworCit2b2lkIGR0MzE1NV9yZWxlYXNlX2xvY2tlZF9idWZmZXIoaW50IG1pbm9yKTsKKworLyogRmx1c2ggdGhlIGJ1ZmZlciBzeXN0ZW0gKi8KK2ludCBkdDMxNTVfZmx1c2goaW50IG1pbm9yKTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIFNpbXBsZSBhcnJheSBiYXNlZCBxdWUgc3RydWN0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYm9vbCBhcmVfZW1wdHlfYnVmZmVycyhpbnQgbWlub3IpOwordm9pZCBwdXNoX2VtcHR5KGludCBpbmRleCwgaW50IG1pbm9yKTsKKworaW50ICBwb3BfZW1wdHkoaW50IG1pbm9yKTsKKworYm9vbCBpc19yZWFkeV9idWZfZW1wdHkoaW50IG1pbm9yKTsKK2Jvb2wgaXNfcmVhZHlfYnVmX2Z1bGwoaW50IG1pbm9yKTsKKwordm9pZCBwdXNoX3JlYWR5KGludCBtaW5vciwgaW50IGluZGV4KTsKK2ludCAgcG9wX3JlYWR5KGludCBtaW5vcik7CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfYWRkcmVzc19tYXAuaAppbmRleCBlNzE1ZTRkLi5lYTc0NmJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9hZGRyZXNzX21hcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX2FkZHJlc3NfbWFwLmgKQEAgLTE0OSw3ICsxNDksNyBAQAogICogR0xPQkFMIE1vZHVsZSBvZiBKQUdDb3JlIEFkZHJlc3MgTWFwcGluZwogICogTG9jYXRlZCBhdCBhZGRyZXNzIDB4MDAwMAogICovCi10eXBlZGVmIHN0cnVjdCBfR0xPQkFMX3QgewkJCS8qIExvY2F0aW9uOiAqLworc3RydWN0IGdsb2JhbF9yZWdzIHsJCQkvKiBMb2NhdGlvbjogKi8KIAl1MzIgdHhxX3N0YXJ0X2FkZHI7CQkJLyogIDB4MDAwMCAqLwogCXUzMiB0eHFfZW5kX2FkZHI7CQkJLyogIDB4MDAwNCAqLwogCXUzMiByeHFfc3RhcnRfYWRkcjsJCQkvKiAgMHgwMDA4ICovCkBAIC0xNjUsOSArMTY1LDcgQEAKIAl1MzIgbXNpX2NvbmZpZzsJCQkJLyogIDB4MDAzMCAqLwogCXUzMiBsb29wYmFjazsJCQkvKiAgMHgwMDM0ICovCiAJdTMyIHdhdGNoZG9nX3RpbWVyOwkJCS8qICAweDAwMzggKi8KLX0gR0xPQkFMX3QsICpQR0xPQkFMX3Q7Ci0KLS8qIEVORCBPRiBHTE9CQUwgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KK307CiAKIAogLyogU1RBUlQgT0YgVFhETUEgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KQEAgLTI1NSw3ICsyNTMsNyBAQAogICogVHggRE1BIE1vZHVsZSBvZiBKQUdDb3JlIEFkZHJlc3MgTWFwcGluZwogICogTG9jYXRlZCBhdCBhZGRyZXNzIDB4MTAwMAogICovCi10eXBlZGVmIHN0cnVjdCBfVFhETUFfdCB7CQkvKiBMb2NhdGlvbjogKi8KK3N0cnVjdCB0eGRtYV9yZWdzIHsJCQkvKiBMb2NhdGlvbjogKi8KIAl1MzIgY3NyOwkJCS8qICAweDEwMDAgKi8KIAl1MzIgcHJfYmFzZV9oaTsJCQkvKiAgMHgxMDA0ICovCiAJdTMyIHByX2Jhc2VfbG87CQkJLyogIDB4MTAwOCAqLwpAQCAtMjgyLDcgKzI4MCw3IEBACiAJdTMyIERyb3BwZWRUTFBDb3VudDsJCS8qICAweDEwNWMgKi8KIAl1MzIgTmV3U2VydmljZUNvbXBsZXRlOwkJLyogIDB4MTA2MCAqLwogCXUzMiBFdGhlcm5ldFBhY2tldENvdW50OwkvKiAgMHgxMDY0ICovCi19IFRYRE1BX3QsICpQVFhETUFfdDsKK307CiAKIC8qIEVORCBPRiBUWERNQSBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLwogCkBAIC0yOTIsNDUgKzI5MCwyNSBAQAogLyoKICAqIHN0cnVjdHVyZSBmb3IgY29udHJvbCBzdGF0dXMgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCiAgKiBMb2NhdGVkIGF0IGFkZHJlc3MgMHgyMDAwCisgKgorICogQ1NSCisgKiAwOiBoYWx0CisgKiAxLTM6IHRjCisgKiA0OiBmYnJfYmlnX2VuZGlhbgorICogNTogcHNyX2JpZ19lbmRpYW4KKyAqIDY6IHBrdF9iaWdfZW5kaWFuCisgKiA3OiBkbWFfYmlnX2VuZGlhbgorICogOC05OiBmYnIwX3NpemUKKyAqIDEwOiBmYnIwX2VuYWJsZQorICogMTEtMTI6IGZicjFfc2l6ZQorICogMTM6IGZicjFfZW5hYmxlCisgKiAxNDogdW51c2VkCisgKiAxNTogcGt0X2Ryb3BfZGlzYWJsZQorICogMTY6IHBrdF9kb25lX2ZsdXNoCisgKiAxNzogaGFsdF9zdGF0dXMKKyAqIDE4LTMxOiB1bnVzZWQKICAqLwotdHlwZWRlZiB1bmlvbiBfUlhETUFfQ1NSX3QgewotCXUzMiB2YWx1ZTsKLQlzdHJ1Y3QgewotI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKLQkJdTMyIHVudXNlZDI6MTQ7CQkvKiBiaXRzIDE4LTMxICovCi0JCXUzMiBoYWx0X3N0YXR1czoxOwkvKiBiaXQgMTcgKi8KLQkJdTMyIHBrdF9kb25lX2ZsdXNoOjE7CS8qIGJpdCAxNiAqLwotCQl1MzIgcGt0X2Ryb3BfZGlzYWJsZToxOwkvKiBiaXQgMTUgKi8KLQkJdTMyIHVudXNlZDE6MTsJCS8qIGJpdCAxNCAqLwotCQl1MzIgZmJyMV9lbmFibGU6MTsJLyogYml0IDEzICovCi0JCXUzMiBmYnIxX3NpemU6MjsJLyogYml0cyAxMS0xMiAqLwotCQl1MzIgZmJyMF9lbmFibGU6MTsJLyogYml0IDEwICovCi0JCXUzMiBmYnIwX3NpemU6MjsJLyogYml0cyA4LTkgKi8KLQkJdTMyIGRtYV9iaWdfZW5kaWFuOjE7CS8qIGJpdCA3ICovCi0JCXUzMiBwa3RfYmlnX2VuZGlhbjoxOwkvKiBiaXQgNiAqLwotCQl1MzIgcHNyX2JpZ19lbmRpYW46MTsJLyogYml0IDUgKi8KLQkJdTMyIGZicl9iaWdfZW5kaWFuOjE7CS8qIGJpdCA0ICovCi0JCXUzMiB0YzozOwkJLyogYml0cyAxLTMgKi8KLQkJdTMyIGhhbHQ6MTsJCS8qIGJpdCAwICovCi0jZWxzZQotCQl1MzIgaGFsdDoxOwkJLyogYml0IDAgKi8KLQkJdTMyIHRjOjM7CQkvKiBiaXRzIDEtMyAqLwotCQl1MzIgZmJyX2JpZ19lbmRpYW46MTsJLyogYml0IDQgKi8KLQkJdTMyIHBzcl9iaWdfZW5kaWFuOjE7CS8qIGJpdCA1ICovCi0JCXUzMiBwa3RfYmlnX2VuZGlhbjoxOwkvKiBiaXQgNiAqLwotCQl1MzIgZG1hX2JpZ19lbmRpYW46MTsJLyogYml0IDcgKi8KLQkJdTMyIGZicjBfc2l6ZToyOwkvKiBiaXRzIDgtOSAqLwotCQl1MzIgZmJyMF9lbmFibGU6MTsJLyogYml0IDEwICovCi0JCXUzMiBmYnIxX3NpemU6MjsJLyogYml0cyAxMS0xMiAqLwotCQl1MzIgZmJyMV9lbmFibGU6MTsJLyogYml0IDEzICovCi0JCXUzMiB1bnVzZWQxOjE7CQkvKiBiaXQgMTQgKi8KLQkJdTMyIHBrdF9kcm9wX2Rpc2FibGU6MTsJLyogYml0IDE1ICovCi0JCXUzMiBwa3RfZG9uZV9mbHVzaDoxOwkvKiBiaXQgMTYgKi8KLQkJdTMyIGhhbHRfc3RhdHVzOjE7CS8qIGJpdCAxNyAqLwotCQl1MzIgdW51c2VkMjoxNDsJCS8qIGJpdHMgMTgtMzEgKi8KLSNlbmRpZgotCX0gYml0czsKLX0gUlhETUFfQ1NSX3QsICpQUlhETUFfQ1NSX3Q7CisKIAogLyoKICAqIHN0cnVjdHVyZSBmb3IgZG1hIHdyaXRlYmFjayBsbyByZWcgaW4gcnhkbWEgYWRkcmVzcyBtYXAKQEAgLTQ1MSwxOCArNDI5LDYgQEAKICAqIDMxLTEwOiB1bnVzZWQKICAqIDktMDogZmJyIG5kZXNjCiAgKi8KLXR5cGVkZWYgdW5pb24gX1JYRE1BX0ZCUl9OVU1fREVTX3QgewotCXUzMiB2YWx1ZTsKLQlzdHJ1Y3QgewotI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKLQkJdTMyIHVudXNlZDoyMjsJCS8qIGJpdHMgMTAtMzEgKi8KLQkJdTMyIGZicl9uZGVzYzoxMDsJLyogYml0cyAwLTkgKi8KLSNlbHNlCi0JCXUzMiBmYnJfbmRlc2M6MTA7CS8qIGJpdHMgMC05ICovCi0JCXUzMiB1bnVzZWQ6MjI7CQkvKiBiaXRzIDEwLTMxICovCi0jZW5kaWYKLQl9IGJpdHM7Ci19IFJYRE1BX0ZCUl9OVU1fREVTX3QsICpQUlhETUFfRkJSX05VTV9ERVNfdDsKIAogLyoKICAqIHN0cnVjdHVyZSBmb3IgZnJlZSBidWZmZXIgcmluZyAwIGF2YWlsYWJsZSBvZmZzZXQgcmVnIGluIHJ4ZG1hIGFkZHJlc3MgbWFwCkBAIC01MzIsOCArNDk4LDggQEAKICAqIFJ4IERNQSBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKICAqIExvY2F0ZWQgYXQgYWRkcmVzcyAweDIwMDAKICAqLwotdHlwZWRlZiBzdHJ1Y3QgX1JYRE1BX3QgewkJCQkvKiBMb2NhdGlvbjogKi8KLQlSWERNQV9DU1JfdCBjc3I7CQkJCS8qICAweDIwMDAgKi8KK3N0cnVjdCByeGRtYV9yZWdzIHsJCQkJCS8qIExvY2F0aW9uOiAqLworCXUzMiBjc3I7CQkJCQkvKiAgMHgyMDAwICovCiAJdTMyIGRtYV93Yl9iYXNlX2xvOwkJCQkvKiAgMHgyMDA0ICovCiAJdTMyIGRtYV93Yl9iYXNlX2hpOwkJCQkvKiAgMHgyMDA4ICovCiAJdTMyIG51bV9wa3RfZG9uZTsJCQkJLyogIDB4MjAwQyAqLwpAQCAtNTYyLDcgKzUyOCw3IEBACiAJdTMyIGZicjFfZnVsbF9vZmZzZXQ7CQkJCS8qICAweDIwNjggKi8KIAl1MzIgZmJyMV9yZF9pbmRleDsJCQkJLyogIDB4MjA2QyAqLwogCXUzMiBmYnIxX21pbl9kZXM7CQkJCS8qICAweDIwNzAgKi8KLX0gUlhETUFfdCwgKlBSWERNQV90OworfTsKIAogLyogRU5EIE9GIFJYRE1BIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCiAKQEAgLTU3MiwzMyArNTM4LDE4IEBACiAvKgogICogc3RydWN0dXJlIGZvciBjb250cm9sIHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAogICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAwMAorICoKKyAqIGJpdHMKKyAqIDMxLTg6IHVudXNlZAorICogNzogY2tsc2VnX2Rpc2FibGUKKyAqIDY6IGNrYmNudF9kaXNhYmxlCisgKiA1OiBja3NlZ251bQorICogNDogYXN5bmNfZGlzYWJsZQorICogMzogZmNfZGlzYWJsZQorICogMjogbWNpZl9kaXNhYmxlCisgKiAxOiBtaWZfZGlzYWJsZQorICogMDogdHhtYWNfZW4KICAqLwotdHlwZWRlZiB1bmlvbiBfVFhNQUNfQ1RMX3QgewotCXUzMiB2YWx1ZTsKLQlzdHJ1Y3QgewotI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKLQkJdTMyIHVudXNlZDoyNDsJCS8qIGJpdHMgOC0zMSAqLwotCQl1MzIgY2tsc2VnX2RpYWJsZToxOwkvKiBiaXQgNyAqLwotCQl1MzIgY2tiY250X2Rpc2FibGU6MTsJLyogYml0IDYgKi8KLQkJdTMyIGNrc2VnbnVtOjE7CQkvKiBiaXQgNSAqLwotCQl1MzIgYXN5bmNfZGlzYWJsZToxOwkvKiBiaXQgNCAqLwotCQl1MzIgZmNfZGlzYWJsZToxOwkvKiBiaXQgMyAqLwotCQl1MzIgbWNpZl9kaXNhYmxlOjE7CS8qIGJpdCAyICovCi0JCXUzMiBtaWZfZGlzYWJsZToxOwkvKiBiaXQgMSAqLwotCQl1MzIgdHhtYWNfZW46MTsJCS8qIGJpdCAwICovCi0jZWxzZQotCQl1MzIgdHhtYWNfZW46MTsJCS8qIGJpdCAwICovCi0JCXUzMiBtaWZfZGlzYWJsZToxOwkvKiBiaXQgMSBtYWMgaW50ZXJmYWNlICovCi0JCXUzMiBtY2lmX2Rpc2FibGU6MTsJLyogYml0IDIgbWVtLiBjb250ci4gaW50ZXJmYWNlICovCi0JCXUzMiBmY19kaXNhYmxlOjE7CS8qIGJpdCAzICovCi0JCXUzMiBhc3luY19kaXNhYmxlOjE7CS8qIGJpdCA0ICovCi0JCXUzMiBja3NlZ251bToxOwkJLyogYml0IDUgKi8KLQkJdTMyIGNrYmNudF9kaXNhYmxlOjE7CS8qIGJpdCA2ICovCi0JCXUzMiBja2xzZWdfZGlhYmxlOjE7CS8qIGJpdCA3ICovCi0JCXUzMiB1bnVzZWQ6MjQ7CQkvKiBiaXRzIDgtMzEgKi8KLSNlbmRpZgotCX0gYml0czsKLX0gVFhNQUNfQ1RMX3QsICpQVFhNQUNfQ1RMX3Q7CiAKIC8qCiAgKiBzdHJ1Y3R1cmUgZm9yIHNoYWRvdyBwb2ludGVyIHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcApAQCAtNjEyLDIzICs1NjMsMTIgQEAKIC8qCiAgKiBzdHJ1Y3R1cmUgZm9yIGVycm9yIGNvdW50IHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAogICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAwOAorICoKKyAqIDMxLTEyOiB1bnVzZWQKKyAqIDExLTg6IHJlc2VydmVkCisgKiA3LTQ6IHR4cV91bmRlcnJ1bgorICogMy0wOiBmaWZvX3VuZGVycnVuCiAgKi8KLXR5cGVkZWYgdW5pb24gX1RYTUFDX0VSUl9DTlRfdCB7Ci0JdTMyIHZhbHVlOwotCXN0cnVjdCB7Ci0jaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAotCQl1MzIgdW51c2VkOjIwOwkJLyogYml0cyAxMi0zMSAqLwotCQl1MzIgcmVzZXJ2ZWQ6NDsJCS8qIGJpdHMgOC0xMSAqLwotCQl1MzIgdHhxX3VuZGVycnVuOjQ7CS8qIGJpdHMgNC03ICovCi0JCXUzMiBmaWZvX3VuZGVycnVuOjQ7CS8qIGJpdHMgMC0zICovCi0jZWxzZQotCQl1MzIgZmlmb191bmRlcnJ1bjo0OwkvKiBiaXRzIDAtMyAqLwotCQl1MzIgdHhxX3VuZGVycnVuOjQ7CS8qIGJpdHMgNC03ICovCi0JCXUzMiByZXNlcnZlZDo0OwkJLyogYml0cyA4LTExICovCi0JCXUzMiB1bnVzZWQ6MjA7CQkvKiBiaXRzIDEyLTMxICovCi0jZW5kaWYKLQl9IGJpdHM7Ci19IFRYTUFDX0VSUl9DTlRfdCwgKlBUWE1BQ19FUlJfQ05UX3Q7CiAKIC8qCiAgKiBzdHJ1Y3R1cmUgZm9yIG1heCBmaWxsIHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcApAQCAtNjU3LDY0ICs1OTcsMzIgQEAKIC8qCiAgKiBzdHJ1Y3R1cmUgZm9yIGVycm9yIHJlZyBpbiB0eG1hYyBhZGRyZXNzIG1hcAogICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4MzAxOAorICoKKyAqIDMxLTk6IHVudXNlZAorICogODogZmlmb191bmRlcnJ1bgorICogNy02OiB1bnVzZWQKKyAqIDU6IGN0cmwyX2VycgorICogNDogdHhxX3VuZGVycnVuCisgKiAzOiBiY250X2VycgorICogMjogbHNlZ19lcnIKKyAqIDE6IHNlZ251bV9lcnIKKyAqIDA6IHNlZzBfZXJyCiAgKi8KLXR5cGVkZWYgdW5pb24gX1RYTUFDX0VSUl90IHsKLQl1MzIgdmFsdWU7Ci0Jc3RydWN0IHsKLSNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCi0JCXUzMiB1bnVzZWQyOjIzOwkJLyogYml0cyA5LTMxICovCi0JCXUzMiBmaWZvX3VuZGVycnVuOjE7CS8qIGJpdCA4ICovCi0JCXUzMiB1bnVzZWQxOjI7CQkvKiBiaXRzIDYtNyAqLwotCQl1MzIgY3RybDJfZXJyOjE7CS8qIGJpdCA1ICovCi0JCXUzMiB0eHFfdW5kZXJydW46MTsJLyogYml0IDQgKi8KLQkJdTMyIGJjbnRfZXJyOjE7CQkvKiBiaXQgMyAqLwotCQl1MzIgbHNlZ19lcnI6MTsJCS8qIGJpdCAyICovCi0JCXUzMiBzZWdudW1fZXJyOjE7CS8qIGJpdCAxICovCi0JCXUzMiBzZWcwX2VycjoxOwkJLyogYml0IDAgKi8KLSNlbHNlCi0JCXUzMiBzZWcwX2VycjoxOwkJLyogYml0IDAgKi8KLQkJdTMyIHNlZ251bV9lcnI6MTsJLyogYml0IDEgKi8KLQkJdTMyIGxzZWdfZXJyOjE7CQkvKiBiaXQgMiAqLwotCQl1MzIgYmNudF9lcnI6MTsJCS8qIGJpdCAzICovCi0JCXUzMiB0eHFfdW5kZXJydW46MTsJLyogYml0IDQgKi8KLQkJdTMyIGN0cmwyX2VycjoxOwkvKiBiaXQgNSAqLwotCQl1MzIgdW51c2VkMToyOwkJLyogYml0cyA2LTcgKi8KLQkJdTMyIGZpZm9fdW5kZXJydW46MTsJLyogYml0IDggKi8KLQkJdTMyIHVudXNlZDI6MjM7CQkvKiBiaXRzIDktMzEgKi8KLSNlbmRpZgotCX0gYml0czsKLX0gVFhNQUNfRVJSX3QsICpQVFhNQUNfRVJSX3Q7CiAKIC8qCiAgKiBzdHJ1Y3R1cmUgZm9yIGVycm9yIGludGVycnVwdCByZWcgaW4gdHhtYWMgYWRkcmVzcyBtYXAKICAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDMwMUMKKyAqCisgKiAzMS05OiB1bnVzZWQKKyAqIDg6IGZpZm9fdW5kZXJydW4KKyAqIDctNjogdW51c2VkCisgKiA1OiBjdHJsMl9lcnIKKyAqIDQ6IHR4cV91bmRlcnJ1bgorICogMzogYmNudF9lcnIKKyAqIDI6IGxzZWdfZXJyCisgKiAxOiBzZWdudW1fZXJyCisgKiAwOiBzZWcwX2VycgogICovCi10eXBlZGVmIHVuaW9uIF9UWE1BQ19FUlJfSU5UX3QgewotCXUzMiB2YWx1ZTsKLQlzdHJ1Y3QgewotI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKLQkJdTMyIHVudXNlZDI6MjM7CQkvKiBiaXRzIDktMzEgKi8KLQkJdTMyIGZpZm9fdW5kZXJydW46MTsJLyogYml0IDggKi8KLQkJdTMyIHVudXNlZDE6MjsJCS8qIGJpdHMgNi03ICovCi0JCXUzMiBjdHJsMl9lcnI6MTsJLyogYml0IDUgKi8KLQkJdTMyIHR4cV91bmRlcnJ1bjoxOwkvKiBiaXQgNCAqLwotCQl1MzIgYmNudF9lcnI6MTsJCS8qIGJpdCAzICovCi0JCXUzMiBsc2VnX2VycjoxOwkJLyogYml0IDIgKi8KLQkJdTMyIHNlZ251bV9lcnI6MTsJLyogYml0IDEgKi8KLQkJdTMyIHNlZzBfZXJyOjE7CQkvKiBiaXQgMCAqLwotI2Vsc2UKLQkJdTMyIHNlZzBfZXJyOjE7CQkvKiBiaXQgMCAqLwotCQl1MzIgc2VnbnVtX2VycjoxOwkvKiBiaXQgMSAqLwotCQl1MzIgbHNlZ19lcnI6MTsJCS8qIGJpdCAyICovCi0JCXUzMiBiY250X2VycjoxOwkJLyogYml0IDMgKi8KLQkJdTMyIHR4cV91bmRlcnJ1bjoxOwkvKiBiaXQgNCAqLwotCQl1MzIgY3RybDJfZXJyOjE7CS8qIGJpdCA1ICovCi0JCXUzMiB1bnVzZWQxOjI7CQkvKiBiaXRzIDYtNyAqLwotCQl1MzIgZmlmb191bmRlcnJ1bjoxOwkvKiBiaXQgOCAqLwotCQl1MzIgdW51c2VkMjoyMzsJCS8qIGJpdHMgOS0zMSAqLwotI2VuZGlmCi0JfSBiaXRzOwotfSBUWE1BQ19FUlJfSU5UX3QsICpQVFhNQUNfRVJSX0lOVF90OwogCiAvKgogICogc3RydWN0dXJlIGZvciBlcnJvciBpbnRlcnJ1cHQgcmVnIGluIHR4bWFjIGFkZHJlc3MgbWFwCkBAIC03MjgsMTcgKzYzNiwxNyBAQAogLyoKICAqIFR4IE1BQyBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKICAqLwotdHlwZWRlZiBzdHJ1Y3QgX1RYTUFDX3QgewkJLyogTG9jYXRpb246ICovCi0JVFhNQUNfQ1RMX3QgY3RsOwkJLyogIDB4MzAwMCAqLworc3RydWN0IHR4bWFjX3JlZ3MgewkJCS8qIExvY2F0aW9uOiAqLworCXUzMiBjdGw7CQkJLyogIDB4MzAwMCAqLwogCXUzMiBzaGFkb3dfcHRyOwkJCS8qICAweDMwMDQgKi8KLQlUWE1BQ19FUlJfQ05UX3QgZXJyX2NudDsJLyogIDB4MzAwOCAqLworCXUzMiBlcnJfY250OwkJCS8qICAweDMwMDggKi8KIAl1MzIgbWF4X2ZpbGw7CQkJLyogIDB4MzAwQyAqLwogCXUzMiBjZl9wYXJhbTsJCQkvKiAgMHgzMDEwICovCiAJdTMyIHR4X3Rlc3Q7CQkJLyogIDB4MzAxNCAqLwotCVRYTUFDX0VSUl90IGVycjsJCS8qICAweDMwMTggKi8KLQlUWE1BQ19FUlJfSU5UX3QgZXJyX2ludDsJLyogIDB4MzAxQyAqLworCXUzMiBlcnI7CQkJLyogIDB4MzAxOCAqLworCXUzMiBlcnJfaW50OwkJCS8qICAweDMwMUMgKi8KIAl1MzIgYnBfY3RybDsJCQkvKiAgMHgzMDIwICovCi19IFRYTUFDX3QsICpQVFhNQUNfdDsKK307CiAKIC8qIEVORCBPRiBUWE1BQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLwogCkBAIC03NDcsMTA2ICs2NTUsNDcgQEAKIC8qCiAgKiBzdHJ1Y3R1cmUgZm9yIHJ4bWFjIGNvbnRyb2wgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwCiAgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDAwCisgKgorICogMzEtNzogcmVzZXJ2ZWQKKyAqIDY6IHJ4bWFjX2ludF9kaXNhYmxlCisgKiA1OiBhc3luY19kaXNhYmxlCisgKiA0OiBtaWZfZGlzYWJsZQorICogMzogd29sX2Rpc2FibGUKKyAqIDI6IHBrdF9maWx0ZXJfZGlzYWJsZQorICogMTogbWNpZl9kaXNhYmxlCisgKiAwOiByeG1hY19lbgogICovCi10eXBlZGVmIHVuaW9uIF9SWE1BQ19DVFJMX3QgewotCXUzMiB2YWx1ZTsKLQlzdHJ1Y3QgewotI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKLQkJdTMyIHJlc2VydmVkOjI1OwkJLyogYml0cyA3LTMxICovCi0JCXUzMiByeG1hY19pbnRfZGlzYWJsZToxOwkvKiBiaXQgNiAqLwotCQl1MzIgYXN5bmNfZGlzYWJsZToxOwkJLyogYml0IDUgKi8KLQkJdTMyIG1pZl9kaXNhYmxlOjE7CQkvKiBiaXQgNCAqLwotCQl1MzIgd29sX2Rpc2FibGU6MTsJCS8qIGJpdCAzICovCi0JCXUzMiBwa3RfZmlsdGVyX2Rpc2FibGU6MTsJLyogYml0IDIgKi8KLQkJdTMyIG1jaWZfZGlzYWJsZToxOwkJLyogYml0IDEgKi8KLQkJdTMyIHJ4bWFjX2VuOjE7CQkJLyogYml0IDAgKi8KLSNlbHNlCi0JCXUzMiByeG1hY19lbjoxOwkJCS8qIGJpdCAwICovCi0JCXUzMiBtY2lmX2Rpc2FibGU6MTsJCS8qIGJpdCAxICovCi0JCXUzMiBwa3RfZmlsdGVyX2Rpc2FibGU6MTsJLyogYml0IDIgKi8KLQkJdTMyIHdvbF9kaXNhYmxlOjE7CQkvKiBiaXQgMyAqLwotCQl1MzIgbWlmX2Rpc2FibGU6MTsJCS8qIGJpdCA0ICovCi0JCXUzMiBhc3luY19kaXNhYmxlOjE7CQkvKiBiaXQgNSAqLwotCQl1MzIgcnhtYWNfaW50X2Rpc2FibGU6MTsJLyogYml0IDYgKi8KLQkJdTMyIHJlc2VydmVkOjI1OwkJLyogYml0cyA3LTMxICovCi0jZW5kaWYKLQl9IGJpdHM7Ci19IFJYTUFDX0NUUkxfdCwgKlBSWE1BQ19DVFJMX3Q7CiAKIC8qCiAgKiBzdHJ1Y3R1cmUgZm9yIFdha2UgT24gTGFuIENvbnRyb2wgYW5kIENSQyAwIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAogICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDAwNAorICogMzEtMTY6IGNyYworICogMTUtMTI6IHJlc2VydmVkCisgKiAxMTogaWdub3JlX3BwCisgKiAxMDogaWdub3JlX21wCisgKiA5OiBjbHJfaW50cgorICogODogaWdub3JlX2xpbmtfY2hnCisgKiA3OiBpZ25vcmVfdW5pCisgKiA2OiBpZ25vcmVfbXVsdGkKKyAqIDU6IGlnbm9yZV9icm9hZAorICogNC0wOiB2YWxpZF9jcmMgNC0wCiAgKi8KLXR5cGVkZWYgdW5pb24gX1JYTUFDX1dPTF9DVExfQ1JDMF90IHsKLQl1MzIgdmFsdWU7Ci0Jc3RydWN0IHsKLSNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCi0JCXUzMiBjcmMwOjE2OwkJLyogYml0cyAxNi0zMSAqLwotCQl1MzIgcmVzZXJ2ZTo0OwkJLyogYml0cyAxMi0xNSAqLwotCQl1MzIgaWdub3JlX3BwOjE7CS8qIGJpdCAxMSAqLwotCQl1MzIgaWdub3JlX21wOjE7CS8qIGJpdCAxMCAqLwotCQl1MzIgY2xyX2ludHI6MTsJCS8qIGJpdCA5ICovCi0JCXUzMiBpZ25vcmVfbGlua19jaGc6MTsJLyogYml0IDggKi8KLQkJdTMyIGlnbm9yZV91bmk6MTsJLyogYml0IDcgKi8KLQkJdTMyIGlnbm9yZV9tdWx0aToxOwkvKiBiaXQgNiAqLwotCQl1MzIgaWdub3JlX2Jyb2FkOjE7CS8qIGJpdCA1ICovCi0JCXUzMiB2YWxpZF9jcmM0OjE7CS8qIGJpdCA0ICovCi0JCXUzMiB2YWxpZF9jcmMzOjE7CS8qIGJpdCAzICovCi0JCXUzMiB2YWxpZF9jcmMyOjE7CS8qIGJpdCAyICovCi0JCXUzMiB2YWxpZF9jcmMxOjE7CS8qIGJpdCAxICovCi0JCXUzMiB2YWxpZF9jcmMwOjE7CS8qIGJpdCAwICovCi0jZWxzZQotCQl1MzIgdmFsaWRfY3JjMDoxOwkvKiBiaXQgMCAqLwotCQl1MzIgdmFsaWRfY3JjMToxOwkvKiBiaXQgMSAqLwotCQl1MzIgdmFsaWRfY3JjMjoxOwkvKiBiaXQgMiAqLwotCQl1MzIgdmFsaWRfY3JjMzoxOwkvKiBiaXQgMyAqLwotCQl1MzIgdmFsaWRfY3JjNDoxOwkvKiBiaXQgNCAqLwotCQl1MzIgaWdub3JlX2Jyb2FkOjE7CS8qIGJpdCA1ICovCi0JCXUzMiBpZ25vcmVfbXVsdGk6MTsJLyogYml0IDYgKi8KLQkJdTMyIGlnbm9yZV91bmk6MTsJLyogYml0IDcgKi8KLQkJdTMyIGlnbm9yZV9saW5rX2NoZzoxOwkvKiBiaXQgOCAqLwotCQl1MzIgY2xyX2ludHI6MTsJCS8qIGJpdCA5ICovCi0JCXUzMiBpZ25vcmVfbXA6MTsJLyogYml0IDEwICovCi0JCXUzMiBpZ25vcmVfcHA6MTsJLyogYml0IDExICovCi0JCXUzMiByZXNlcnZlOjQ7CQkvKiBiaXRzIDEyLTE1ICovCi0JCXUzMiBjcmMwOjE2OwkJLyogYml0cyAxNi0zMSAqLwotI2VuZGlmCi0JfSBiaXRzOwotfSBSWE1BQ19XT0xfQ1RMX0NSQzBfdCwgKlBSWE1BQ19XT0xfQ1RMX0NSQzBfdDsKIAogLyoKICAqIHN0cnVjdHVyZSBmb3IgQ1JDIDEgYW5kIENSQyAyIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAogICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDAwOAorICoKKyAqIDMxLTE2OiBjcmMyCisgKiAxNS0wOiBjcmMxCiAgKi8KLXR5cGVkZWYgdW5pb24gX1JYTUFDX1dPTF9DUkMxMl90IHsKLQl1MzIgdmFsdWU7Ci0Jc3RydWN0IHsKLSNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCi0JCXUzMiBjcmMyOjE2OwkvKiBiaXRzIDE2LTMxICovCi0JCXUzMiBjcmMxOjE2OwkvKiBiaXRzIDAtMTUgKi8KLSNlbHNlCi0JCXUzMiBjcmMxOjE2OwkvKiBiaXRzIDAtMTUgKi8KLQkJdTMyIGNyYzI6MTY7CS8qIGJpdHMgMTYtMzEgKi8KLSNlbmRpZgotCX0gYml0czsKLX0gUlhNQUNfV09MX0NSQzEyX3QsICpQUlhNQUNfV09MX0NSQzEyX3Q7CiAKIC8qCiAgKiBzdHJ1Y3R1cmUgZm9yIENSQyAzIGFuZCBDUkMgNCByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKICAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwMEMKKyAqCisgKiAzMS0xNjogY3JjNAorICogMTUtMDogY3JjMwogICovCi10eXBlZGVmIHVuaW9uIF9SWE1BQ19XT0xfQ1JDMzRfdCB7Ci0JdTMyIHZhbHVlOwotCXN0cnVjdCB7Ci0jaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAotCQl1MzIgY3JjNDoxNjsJLyogYml0cyAxNi0zMSAqLwotCQl1MzIgY3JjMzoxNjsJLyogYml0cyAwLTE1ICovCi0jZWxzZQotCQl1MzIgY3JjMzoxNjsJLyogYml0cyAwLTE1ICovCi0JCXUzMiBjcmM0OjE2OwkvKiBiaXRzIDE2LTMxICovCi0jZW5kaWYKLQl9IGJpdHM7Ci19IFJYTUFDX1dPTF9DUkMzNF90LCAqUFJYTUFDX1dPTF9DUkMzNF90OwogCiAvKgogICogc3RydWN0dXJlIGZvciBXYWtlIE9uIExhbiBTb3VyY2UgQWRkcmVzcyBMbyByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAKQEAgLTk2NiwxNjQgKzgxNSw4NCBAQAogLyoKICAqIHN0cnVjdHVyZSBmb3IgUGFja2V0IEZpbHRlciBDb250cm9sIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcAogICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA4NAorICoKKyAqIDMxLTIzOiB1bnVzZWQKKyAqIDIyLTE2OiBtaW5fcGt0X3NpemUKKyAqIDE1LTQ6IHVudXNlZAorICogMzogZmlsdGVyX2ZyYWdfZW4KKyAqIDI6IGZpbHRlcl91bmlfZW4KKyAqIDE6IGZpbHRlcl9tdWx0aV9lbgorICogMDogZmlsdGVyX2Jyb2FkX2VuCiAgKi8KLXR5cGVkZWYgdW5pb24gX1JYTUFDX1BGX0NUUkxfdCB7Ci0JdTMyIHZhbHVlOwotCXN0cnVjdCB7Ci0jaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAotCQl1MzIgdW51c2VkMjo5OwkJLyogYml0cyAyMy0zMSAqLwotCQl1MzIgbWluX3BrdF9zaXplOjc7CS8qIGJpdHMgMTYtMjIgKi8KLQkJdTMyIHVudXNlZDE6MTI7CQkvKiBiaXRzIDQtMTUgKi8KLQkJdTMyIGZpbHRlcl9mcmFnX2VuOjE7CS8qIGJpdCAzICovCi0JCXUzMiBmaWx0ZXJfdW5pX2VuOjE7CS8qIGJpdCAyICovCi0JCXUzMiBmaWx0ZXJfbXVsdGlfZW46MTsJLyogYml0IDEgKi8KLQkJdTMyIGZpbHRlcl9icm9hZF9lbjoxOwkvKiBiaXQgMCAqLwotI2Vsc2UKLQkJdTMyIGZpbHRlcl9icm9hZF9lbjoxOwkvKiBiaXQgMCAqLwotCQl1MzIgZmlsdGVyX211bHRpX2VuOjE7CS8qIGJpdCAxICovCi0JCXUzMiBmaWx0ZXJfdW5pX2VuOjE7CS8qIGJpdCAyICovCi0JCXUzMiBmaWx0ZXJfZnJhZ19lbjoxOwkvKiBiaXQgMyAqLwotCQl1MzIgdW51c2VkMToxMjsJCS8qIGJpdHMgNC0xNSAqLwotCQl1MzIgbWluX3BrdF9zaXplOjc7CS8qIGJpdHMgMTYtMjIgKi8KLQkJdTMyIHVudXNlZDI6OTsJCS8qIGJpdHMgMjMtMzEgKi8KLSNlbmRpZgotCX0gYml0czsKLX0gUlhNQUNfUEZfQ1RSTF90LCAqUFJYTUFDX1BGX0NUUkxfdDsKIAogLyoKICAqIHN0cnVjdHVyZSBmb3IgTWVtb3J5IENvbnRyb2xsZXIgSW50ZXJmYWNlIENvbnRyb2wgTWF4IFNlZ21lbnQgcmVnIGluIHJ4bWFjCiAgKiBhZGRyZXNzIG1hcC4gIExvY2F0ZWQgYXQgYWRkcmVzcyAweDQwODgKKyAqCisgKiAzMS0xMDogcmVzZXJ2ZWQKKyAqIDktMjogbWF4X3NpemUKKyAqIDE6IGZjX2VuCisgKiAwOiBzZWdfZW4KICAqLwotdHlwZWRlZiB1bmlvbiBfUlhNQUNfTUNJRl9DVFJMX01BWF9TRUdfdCB7Ci0JdTMyIHZhbHVlOwotCXN0cnVjdCB7Ci0jaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAotCQl1MzIgcmVzZXJ2ZWQ6MjI7CS8qIGJpdHMgMTAtMzEgKi8KLQkJdTMyIG1heF9zaXplOjg7CS8qIGJpdHMgMi05ICovCi0JCXUzMiBmY19lbjoxOwkvKiBiaXQgMSAqLwotCQl1MzIgc2VnX2VuOjE7CS8qIGJpdCAwICovCi0jZWxzZQotCQl1MzIgc2VnX2VuOjE7CS8qIGJpdCAwICovCi0JCXUzMiBmY19lbjoxOwkvKiBiaXQgMSAqLwotCQl1MzIgbWF4X3NpemU6ODsJLyogYml0cyAyLTkgKi8KLQkJdTMyIHJlc2VydmVkOjIyOwkvKiBiaXRzIDEwLTMxICovCi0jZW5kaWYKLQl9IGJpdHM7Ci19IFJYTUFDX01DSUZfQ1RSTF9NQVhfU0VHX3QsICpQUlhNQUNfTUNJRl9DVFJMX01BWF9TRUdfdDsKIAogLyoKICAqIHN0cnVjdHVyZSBmb3IgTWVtb3J5IENvbnRyb2xsZXIgSW50ZXJmYWNlIFdhdGVyIE1hcmsgcmVnIGluIHJ4bWFjIGFkZHJlc3MKICAqIG1hcC4gIExvY2F0ZWQgYXQgYWRkcmVzcyAweDQwOEMKKyAqCisgKiAzMS0yNjogdW51c2VkCisgKiAyNS0xNjogbWFya19oaQorICogMTUtMTA6IHVudXNlZAorICogOS0wOiBtYXJrX2xvCiAgKi8KLXR5cGVkZWYgdW5pb24gX1JYTUFDX01DSUZfV0FURVJfTUFSS190IHsKLQl1MzIgdmFsdWU7Ci0Jc3RydWN0IHsKLSNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCi0JCXUzMiByZXNlcnZlZDI6NjsJLyogYml0cyAyNi0zMSAqLwotCQl1MzIgbWFya19oaToxMDsJLyogYml0cyAxNi0yNSAqLwotCQl1MzIgcmVzZXJ2ZWQxOjY7CS8qIGJpdHMgMTAtMTUgKi8KLQkJdTMyIG1hcmtfbG86MTA7CS8qIGJpdHMgMC05ICovCi0jZWxzZQotCQl1MzIgbWFya19sbzoxMDsJLyogYml0cyAwLTkgKi8KLQkJdTMyIHJlc2VydmVkMTo2OwkvKiBiaXRzIDEwLTE1ICovCi0JCXUzMiBtYXJrX2hpOjEwOwkvKiBiaXRzIDE2LTI1ICovCi0JCXUzMiByZXNlcnZlZDI6NjsJLyogYml0cyAyNi0zMSAqLwotI2VuZGlmCi0JfSBiaXRzOwotfSBSWE1BQ19NQ0lGX1dBVEVSX01BUktfdCwgKlBSWE1BQ19NQ0lGX1dBVEVSX01BUktfdDsKIAogLyoKICAqIHN0cnVjdHVyZSBmb3IgUnggUXVldWUgRGlhbG9nIHJlZyBpbiByeG1hYyBhZGRyZXNzIG1hcC4KICAqIGxvY2F0ZWQgYXQgYWRkcmVzcyAweDQwOTAKKyAqCisgKiAzMS0yNjogcmVzZXJ2ZWQKKyAqIDI1LTE2OiByZF9wdHIKKyAqIDE1LTEwOiByZXNlcnZlZAorICogOS0wOiB3cl9wdHIKICAqLwotdHlwZWRlZiB1bmlvbiBfUlhNQUNfUlhRX0RJQUdfdCB7Ci0JdTMyIHZhbHVlOwotCXN0cnVjdCB7Ci0jaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAotCQl1MzIgcmVzZXJ2ZWQyOjY7CS8qIGJpdHMgMjYtMzEgKi8KLQkJdTMyIHJkX3B0cjoxMDsJLyogYml0cyAxNi0yNSAqLwotCQl1MzIgcmVzZXJ2ZWQxOjY7CS8qIGJpdHMgMTAtMTUgKi8KLQkJdTMyIHdyX3B0cjoxMDsJLyogYml0cyAwLTkgKi8KLSNlbHNlCi0JCXUzMiB3cl9wdHI6MTA7CS8qIGJpdHMgMC05ICovCi0JCXUzMiByZXNlcnZlZDE6NjsJLyogYml0cyAxMC0xNSAqLwotCQl1MzIgcmRfcHRyOjEwOwkvKiBiaXRzIDE2LTI1ICovCi0JCXUzMiByZXNlcnZlZDI6NjsJLyogYml0cyAyNi0zMSAqLwotI2VuZGlmCi0JfSBiaXRzOwotfSBSWE1BQ19SWFFfRElBR190LCAqUFJYTUFDX1JYUV9ESUFHX3Q7CiAKIC8qCiAgKiBzdHJ1Y3R1cmUgZm9yIHNwYWNlIGF2YWlsaWFibGUgcmVnIGluIHJ4bWFjIGFkZHJlc3MgbWFwLgogICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NDA5NAorICoKKyAqIDMxLTE3OiByZXNlcnZlZAorICogMTY6IHNwYWNlX2F2YWlsX2VuCisgKiAxNS0xMDogcmVzZXJ2ZWQKKyAqIDktMDogc3BhY2VfYXZhaWwKICAqLwotdHlwZWRlZiB1bmlvbiBfUlhNQUNfU1BBQ0VfQVZBSUxfdCB7Ci0JdTMyIHZhbHVlOwotCXN0cnVjdCB7Ci0jaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAotCQl1MzIgcmVzZXJ2ZWQyOjE1OwkJLyogYml0cyAxNy0zMSAqLwotCQl1MzIgc3BhY2VfYXZhaWxfZW46MTsJLyogYml0IDE2ICovCi0JCXUzMiByZXNlcnZlZDE6NjsJCS8qIGJpdHMgMTAtMTUgKi8KLQkJdTMyIHNwYWNlX2F2YWlsOjEwOwkvKiBiaXRzIDAtOSAqLwotI2Vsc2UKLQkJdTMyIHNwYWNlX2F2YWlsOjEwOwkvKiBiaXRzIDAtOSAqLwotCQl1MzIgcmVzZXJ2ZWQxOjY7CQkvKiBiaXRzIDEwLTE1ICovCi0JCXUzMiBzcGFjZV9hdmFpbF9lbjoxOwkvKiBiaXQgMTYgKi8KLQkJdTMyIHJlc2VydmVkMjoxNTsJCS8qIGJpdHMgMTctMzEgKi8KLSNlbmRpZgotCX0gYml0czsKLX0gUlhNQUNfU1BBQ0VfQVZBSUxfdCwgKlBSWE1BQ19TUEFDRV9BVkFJTF90OwogCiAvKgogICogc3RydWN0dXJlIGZvciBtYW5hZ2VtZW50IGludGVyZmFjZSByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAuCiAgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDk4CisgKgorICogMzEtMTg6IHJlc2VydmVkCisgKiAxNzogZHJvcF9wa3RfZW4KKyAqIDE2LTA6IGRyb3BfcGt0X21hc2sKICAqLwotdHlwZWRlZiB1bmlvbiBfUlhNQUNfTUlGX0NUTF90IHsKLQl1MzIgdmFsdWU7Ci0Jc3RydWN0IHsKLSNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCi0JCXUzMiByZXNlcnZlOjE0OwkJLyogYml0cyAxOC0zMSAqLwotCQl1MzIgZHJvcF9wa3RfZW46MTsJCS8qIGJpdCAxNyAqLwotCQl1MzIgZHJvcF9wa3RfbWFzazoxNzsJLyogYml0cyAwLTE2ICovCi0jZWxzZQotCQl1MzIgZHJvcF9wa3RfbWFzazoxNzsJLyogYml0cyAwLTE2ICovCi0JCXUzMiBkcm9wX3BrdF9lbjoxOwkJLyogYml0IDE3ICovCi0JCXUzMiByZXNlcnZlOjE0OwkJLyogYml0cyAxOC0zMSAqLwotI2VuZGlmCi0JfSBiaXRzOwotfSBSWE1BQ19NSUZfQ1RMX3QsICpQUlhNQUNfTUlGX0NUTF90OwogCiAvKgogICogc3RydWN0dXJlIGZvciBFcnJvciByZWcgaW4gcnhtYWMgYWRkcmVzcyBtYXAuCiAgKiBsb2NhdGVkIGF0IGFkZHJlc3MgMHg0MDlDCisgKgorICogMzEtNDogdW51c2VkCisgKiAzOiBtaWYKKyAqIDI6IGFzeW5jCisgKiAxOiBwa3RfZmlsdGVyCisgKiAwOiBtY2lmCiAgKi8KLXR5cGVkZWYgdW5pb24gX1JYTUFDX0VSUk9SX1JFR190IHsKLQl1MzIgdmFsdWU7Ci0Jc3RydWN0IHsKLSNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCi0JCXUzMiByZXNlcnZlOjI4OwkvKiBiaXRzIDQtMzEgKi8KLQkJdTMyIG1pZjoxOwkJLyogYml0IDMgKi8KLQkJdTMyIGFzeW5jOjE7CS8qIGJpdCAyICovCi0JCXUzMiBwa3RfZmlsdGVyOjE7CS8qIGJpdCAxICovCi0JCXUzMiBtY2lmOjE7CS8qIGJpdCAwICovCi0jZWxzZQotCQl1MzIgbWNpZjoxOwkvKiBiaXQgMCAqLwotCQl1MzIgcGt0X2ZpbHRlcjoxOwkvKiBiaXQgMSAqLwotCQl1MzIgYXN5bmM6MTsJLyogYml0IDIgKi8KLQkJdTMyIG1pZjoxOwkJLyogYml0IDMgKi8KLQkJdTMyIHJlc2VydmU6Mjg7CS8qIGJpdHMgNC0zMSAqLwotI2VuZGlmCi0JfSBiaXRzOwotfSBSWE1BQ19FUlJPUl9SRUdfdCwgKlBSWE1BQ19FUlJPUl9SRUdfdDsKIAogLyoKICAqIFJ4IE1BQyBNb2R1bGUgb2YgSkFHQ29yZSBBZGRyZXNzIE1hcHBpbmcKICAqLwogdHlwZWRlZiBzdHJ1Y3QgX1JYTUFDX3QgewkJCQkvKiBMb2NhdGlvbjogKi8KLQlSWE1BQ19DVFJMX3QgY3RybDsJCQkJLyogIDB4NDAwMCAqLwotCVJYTUFDX1dPTF9DVExfQ1JDMF90IGNyYzA7CQkJLyogIDB4NDAwNCAqLwotCVJYTUFDX1dPTF9DUkMxMl90IGNyYzEyOwkJCS8qICAweDQwMDggKi8KLQlSWE1BQ19XT0xfQ1JDMzRfdCBjcmMzNDsJCQkvKiAgMHg0MDBDICovCisJdTMyIGN0cmw7CQkJCQkvKiAgMHg0MDAwICovCisJdTMyIGNyYzA7CQkJCQkvKiAgMHg0MDA0ICovCisJdTMyIGNyYzEyOwkJCQkJLyogIDB4NDAwOCAqLworCXUzMiBjcmMzNDsJCQkJCS8qICAweDQwMEMgKi8KIAlSWE1BQ19XT0xfU0FfTE9fdCBzYV9sbzsJCQkvKiAgMHg0MDEwICovCiAJUlhNQUNfV09MX1NBX0hJX3Qgc2FfaGk7CQkJLyogIDB4NDAxNCAqLwogCXUzMiBtYXNrMF93b3JkMDsJCQkJLyogIDB4NDAxOCAqLwpAQCAtMTE1MywxNyArOTIyLDE3IEBACiAJdTMyIG11bHRpX2hhc2gyOwkJCQkvKiAgMHg0MDc4ICovCiAJdTMyIG11bHRpX2hhc2gzOwkJCQkvKiAgMHg0MDdDICovCiAJdTMyIG11bHRpX2hhc2g0OwkJCQkvKiAgMHg0MDgwICovCi0JUlhNQUNfUEZfQ1RSTF90IHBmX2N0cmw7CQkJLyogIDB4NDA4NCAqLwotCVJYTUFDX01DSUZfQ1RSTF9NQVhfU0VHX3QgbWNpZl9jdHJsX21heF9zZWc7CS8qICAweDQwODggKi8KLQlSWE1BQ19NQ0lGX1dBVEVSX01BUktfdCBtY2lmX3dhdGVyX21hcms7CS8qICAweDQwOEMgKi8KLQlSWE1BQ19SWFFfRElBR190IHJ4cV9kaWFnOwkJCS8qICAweDQwOTAgKi8KLQlSWE1BQ19TUEFDRV9BVkFJTF90IHNwYWNlX2F2YWlsOwkJLyogIDB4NDA5NCAqLworCXUzMiBwZl9jdHJsOwkJCQkJLyogIDB4NDA4NCAqLworCXUzMiBtY2lmX2N0cmxfbWF4X3NlZzsJCQkJLyogIDB4NDA4OCAqLworCXUzMiBtY2lmX3dhdGVyX21hcms7CQkJCS8qICAweDQwOEMgKi8KKwl1MzIgcnhxX2RpYWc7CQkJCQkvKiAgMHg0MDkwICovCisJdTMyIHNwYWNlX2F2YWlsOwkJCQkvKiAgMHg0MDk0ICovCiAKLQlSWE1BQ19NSUZfQ1RMX3QgbWlmX2N0cmw7CQkJLyogIDB4NDA5OCAqLwotCVJYTUFDX0VSUk9SX1JFR190IGVycl9yZWc7CQkJLyogIDB4NDA5QyAqLworCXUzMiBtaWZfY3RybDsJCQkJCS8qICAweDQwOTggKi8KKwl1MzIgZXJyX3JlZzsJCQkJCS8qICAweDQwOUMgKi8KIH0gUlhNQUNfdCwgKlBSWE1BQ190OwogCi0vKiBFTkQgT0YgVFhNQUMgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KKy8qIEVORCBPRiBSWE1BQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLwogCiAKIC8qIFNUQVJUIE9GIE1BQyBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLwpAQCAtMTMzNywzNyArMTEwNiwxOSBAQAogLyoKICAqIHN0cnVjdHVyZSBmb3IgSW50ZXJmYWNlIFN0YXR1cyByZWcgaW4gbWFjIGFkZHJlc3MgbWFwLgogICogbG9jYXRlZCBhdCBhZGRyZXNzIDB4NTAzQworICoKKyAqIDMxLTEwOiByZXNlcnZlZAorICogOTogZXhjZXNzX2RlZmVyCisgKiA4OiBjbGFzaAorICogNzogcGh5X2phYmJlcgorICogNjogcGh5X2xpbmtfb2sKKyAqIDU6IHBoeV9mdWxsX2R1cGxleAorICogNDogcGh5X3NwZWVkCisgKiAzOiBwZTEwMHhfbGlua19mYWlsCisgKiAyOiBwZTEwdF9sb3NzX2NhcnJpZXIKKyAqIDE6IHBlMTB0X3NxZV9lcnJvcgorICogMDogcGUxMHRfamFiYmVyCiAgKi8KLXR5cGVkZWYgdW5pb24gX01BQ19JRl9TVEFUX3QgewotCXUzMiB2YWx1ZTsKLQlzdHJ1Y3QgewotI2lmZGVmIF9CSVRfRklFTERTX0hUT0wKLQkJdTMyIHJlc2VydmVkOjIyOwkJLyogYml0cyAxMC0zMSAqLwotCQl1MzIgZXhjZXNzX2RlZmVyOjE7CS8qIGJpdCA5ICovCi0JCXUzMiBjbGFzaDoxOwkJLyogYml0IDggKi8KLQkJdTMyIHBoeV9qYWJiZXI6MTsJCS8qIGJpdCA3ICovCi0JCXUzMiBwaHlfbGlua19vazoxOwkJLyogYml0IDYgKi8KLQkJdTMyIHBoeV9mdWxsX2R1cGxleDoxOwkvKiBiaXQgNSAqLwotCQl1MzIgcGh5X3NwZWVkOjE7CQkvKiBiaXQgNCAqLwotCQl1MzIgcGUxMDB4X2xpbmtfZmFpbDoxOwkvKiBiaXQgMyAqLwotCQl1MzIgcGUxMHRfbG9zc19jYXJyaWU6MTsJLyogYml0IDIgKi8KLQkJdTMyIHBlMTB0X3NxZV9lcnJvcjoxOwkvKiBiaXQgMSAqLwotCQl1MzIgcGUxMHRfamFiYmVyOjE7CS8qIGJpdCAwICovCi0jZWxzZQotCQl1MzIgcGUxMHRfamFiYmVyOjE7CS8qIGJpdCAwICovCi0JCXUzMiBwZTEwdF9zcWVfZXJyb3I6MTsJLyogYml0IDEgKi8KLQkJdTMyIHBlMTB0X2xvc3NfY2FycmllOjE7CS8qIGJpdCAyICovCi0JCXUzMiBwZTEwMHhfbGlua19mYWlsOjE7CS8qIGJpdCAzICovCi0JCXUzMiBwaHlfc3BlZWQ6MTsJCS8qIGJpdCA0ICovCi0JCXUzMiBwaHlfZnVsbF9kdXBsZXg6MTsJLyogYml0IDUgKi8KLQkJdTMyIHBoeV9saW5rX29rOjE7CQkvKiBiaXQgNiAqLwotCQl1MzIgcGh5X2phYmJlcjoxOwkJLyogYml0IDcgKi8KLQkJdTMyIGNsYXNoOjE7CQkvKiBiaXQgOCAqLwotCQl1MzIgZXhjZXNzX2RlZmVyOjE7CS8qIGJpdCA5ICovCi0JCXUzMiByZXNlcnZlZDoyMjsJCS8qIGJpdHMgMTAtMzEgKi8KLSNlbmRpZgotCX0gYml0czsKLX0gTUFDX0lGX1NUQVRfdCwgKlBNQUNfSUZfU1RBVF90OwogCiAvKgogICogc3RydWN0dXJlIGZvciBNYWMgU3RhdGlvbiBBZGRyZXNzLCBQYXJ0IDEgcmVnIGluIG1hYyBhZGRyZXNzIG1hcC4KQEAgLTE0MjgsNyArMTE3OSw3IEBACiAJdTMyIG1paV9tZ210X3N0YXQ7CQkJCS8qICAweDUwMzAgKi8KIAl1MzIgbWlpX21nbXRfaW5kaWNhdG9yOwkJCQkvKiAgMHg1MDM0ICovCiAJdTMyIGlmX2N0cmw7CQkJCQkvKiAgMHg1MDM4ICovCi0JTUFDX0lGX1NUQVRfdCBpZl9zdGF0OwkJCQkvKiAgMHg1MDNDICovCisJdTMyIGlmX3N0YXQ7CQkJCQkvKiAgMHg1MDNDICovCiAJTUFDX1NUQVRJT05fQUREUjFfdCBzdGF0aW9uX2FkZHJfMTsJCS8qICAweDUwNDAgKi8KIAlNQUNfU1RBVElPTl9BRERSMl90IHN0YXRpb25fYWRkcl8yOwkJLyogIDB4NTA0NCAqLwogfSBNQUNfdCwgKlBNQUNfdDsKQEAgLTE0OTgsOCArMTI0OSw5IEBACiAvKgogICogTUFDIFNUQVRTIE1vZHVsZSBvZiBKQUdDb3JlIEFkZHJlc3MgTWFwcGluZwogICovCi10eXBlZGVmIHN0cnVjdCBfTUFDX1NUQVRfdCB7CQkvKiBMb2NhdGlvbjogKi8KLQl1MzIgcGFkWzMyXTsJCS8qICAweDYwMDAgLSA2MDdDICovCitzdHJ1Y3QgbWFjc3RhdF9yZWdzCit7CQkJCQkvKiBMb2NhdGlvbjogKi8KKwl1MzIgcGFkWzMyXTsJCQkvKiAgMHg2MDAwIC0gNjA3QyAqLwogCiAJLyogVHgvUnggMC02NCBCeXRlIEZyYW1lIENvdW50ZXIgKi8KIAl1MzIgVFI2NDsJCQkvKiAgMHg2MDgwICovCkBAIC0xNjQ0LDcgKzEzOTYsNyBAQAogCiAJLyogQ2FycnkgUmVnaXN0ZXIgVHdvIE1hc2sgUmVnaXN0ZXIgKi8KIAl1MzIgQ2FycnkyTTsJCQkvKiAgMHg2MTNDICovCi19IE1BQ19TVEFUX3QsICpQTUFDX1NUQVRfdDsKK307CiAKIC8qIEVORCBPRiBNQUMgU1RBVCBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLwogCkBAIC0xNjgyLDcwICsxNDM0LDQ5IEBACiAvKgogICogTWVtb3J5IENvbnRyb2wgTW9kdWxlIG9mIEpBR0NvcmUgQWRkcmVzcyBNYXBwaW5nCiAgKi8KLXR5cGVkZWYgc3RydWN0IF9NTUNfdCB7CQkJLyogTG9jYXRpb246ICovCitzdHJ1Y3QgbW1jX3JlZ3MgewkJLyogTG9jYXRpb246ICovCiAJdTMyIG1tY19jdHJsOwkJLyogIDB4NzAwMCAqLwogCXUzMiBzcmFtX2FjY2VzczsJLyogIDB4NzAwNCAqLwogCXUzMiBzcmFtX3dvcmQxOwkJLyogIDB4NzAwOCAqLwogCXUzMiBzcmFtX3dvcmQyOwkJLyogIDB4NzAwQyAqLwogCXUzMiBzcmFtX3dvcmQzOwkJLyogIDB4NzAxMCAqLwogCXUzMiBzcmFtX3dvcmQ0OwkJLyogIDB4NzAxNCAqLwotfSBNTUNfdCwgKlBNTUNfdDsKK307CiAKIC8qIEVORCBPRiBNTUMgUkVHSVNURVIgQUREUkVTUyBNQVAgKi8KIAogCi0vKiBTVEFSVCBPRiBFWFAgUk9NIFJFR0lTVEVSIEFERFJFU1MgTUFQICovCi0KLS8qCi0gKiBFeHBhbnNpb24gUk9NIE1vZHVsZSBvZiBKQUdDb3JlIEFkZHJlc3MgTWFwcGluZwotICovCi0KLS8qIFRha2UgdGhpcyBvdXQgdW50aWwgaXQgaXMgbm90IGVtcHR5ICovCi0jaWYgMAotdHlwZWRlZiBzdHJ1Y3QgX0VYUF9ST01fdCB7Ci0KLX0gRVhQX1JPTV90LCAqUEVYUF9ST01fdDsKLSNlbmRpZgotCi0vKiBFTkQgT0YgRVhQIFJPTSBSRUdJU1RFUiBBRERSRVNTIE1BUCAqLwotCi0KIC8qCiAgKiBKQUdDb3JlIEFkZHJlc3MgTWFwcGluZwogICovCiB0eXBlZGVmIHN0cnVjdCBfQUREUkVTU19NQVBfdCB7Ci0JR0xPQkFMX3QgZ2xvYmFsOworCXN0cnVjdCBnbG9iYWxfcmVncyBnbG9iYWw7CiAJLyogdW51c2VkIHNlY3Rpb24gb2YgZ2xvYmFsIGFkZHJlc3MgbWFwICovCi0JdTggdW51c2VkX2dsb2JhbFs0MDk2IC0gc2l6ZW9mKEdMT0JBTF90KV07Ci0JVFhETUFfdCB0eGRtYTsKKwl1OCB1bnVzZWRfZ2xvYmFsWzQwOTYgLSBzaXplb2Yoc3RydWN0IGdsb2JhbF9yZWdzKV07CisJc3RydWN0IHR4ZG1hX3JlZ3MgdHhkbWE7CiAJLyogdW51c2VkIHNlY3Rpb24gb2YgdHhkbWEgYWRkcmVzcyBtYXAgKi8KLQl1OCB1bnVzZWRfdHhkbWFbNDA5NiAtIHNpemVvZihUWERNQV90KV07Ci0JUlhETUFfdCByeGRtYTsKKwl1OCB1bnVzZWRfdHhkbWFbNDA5NiAtIHNpemVvZihzdHJ1Y3QgdHhkbWFfcmVncyldOworCXN0cnVjdCByeGRtYV9yZWdzIHJ4ZG1hOwogCS8qIHVudXNlZCBzZWN0aW9uIG9mIHJ4ZG1hIGFkZHJlc3MgbWFwICovCi0JdTggdW51c2VkX3J4ZG1hWzQwOTYgLSBzaXplb2YoUlhETUFfdCldOwotCVRYTUFDX3QgdHhtYWM7CisJdTggdW51c2VkX3J4ZG1hWzQwOTYgLSBzaXplb2Yoc3RydWN0IHJ4ZG1hX3JlZ3MpXTsKKwlzdHJ1Y3QgdHhtYWNfcmVncyB0eG1hYzsKIAkvKiB1bnVzZWQgc2VjdGlvbiBvZiB0eG1hYyBhZGRyZXNzIG1hcCAqLwotCXU4IHVudXNlZF90eG1hY1s0MDk2IC0gc2l6ZW9mKFRYTUFDX3QpXTsKKwl1OCB1bnVzZWRfdHhtYWNbNDA5NiAtIHNpemVvZihzdHJ1Y3QgdHhtYWNfcmVncyldOwogCVJYTUFDX3QgcnhtYWM7CiAJLyogdW51c2VkIHNlY3Rpb24gb2YgcnhtYWMgYWRkcmVzcyBtYXAgKi8KIAl1OCB1bnVzZWRfcnhtYWNbNDA5NiAtIHNpemVvZihSWE1BQ190KV07CiAJTUFDX3QgbWFjOwogCS8qIHVudXNlZCBzZWN0aW9uIG9mIG1hYyBhZGRyZXNzIG1hcCAqLwogCXU4IHVudXNlZF9tYWNbNDA5NiAtIHNpemVvZihNQUNfdCldOwotCU1BQ19TVEFUX3QgbWFjU3RhdDsKKwlzdHJ1Y3QgbWFjc3RhdF9yZWdzIG1hY3N0YXQ7CiAJLyogdW51c2VkIHNlY3Rpb24gb2YgbWFjIHN0YXQgYWRkcmVzcyBtYXAgKi8KLQl1OCB1bnVzZWRfbWFjX3N0YXRbNDA5NiAtIHNpemVvZihNQUNfU1RBVF90KV07Ci0JTU1DX3QgbW1jOworCXU4IHVudXNlZF9tYWNfc3RhdFs0MDk2IC0gc2l6ZW9mKHN0cnVjdCBtYWNzdGF0X3JlZ3MpXTsKKwlzdHJ1Y3QgbW1jX3JlZ3MgbW1jOwogCS8qIHVudXNlZCBzZWN0aW9uIG9mIG1tYyBhZGRyZXNzIG1hcCAqLwotCXU4IHVudXNlZF9tbWNbNDA5NiAtIHNpemVvZihNTUNfdCldOworCXU4IHVudXNlZF9tbWNbNDA5NiAtIHNpemVvZihzdHJ1Y3QgbW1jX3JlZ3MpXTsKIAkvKiB1bnVzZWQgc2VjdGlvbiBvZiBhZGRyZXNzIG1hcCAqLwogCXU4IHVudXNlZF9bMTAxNTgwOF07CiAKLS8qIFRha2UgdGhpcyBvdXQgdW50aWwgaXQgaXMgbm90IGVtcHR5ICovCi0jaWYgMAotCUVYUF9ST01fdCBleHBfcm9tOwotI2VuZGlmCi0KIAl1OCB1bnVzZWRfZXhwX3JvbVs0MDk2XTsJLyogTUdTLXNpemUgVEJEICovCiAJdTggdW51c2VkX19bNTI0Mjg4XTsJLyogdW51c2VkIHNlY3Rpb24gb2YgYWRkcmVzcyBtYXAgKi8KIH0gQUREUkVTU19NQVBfdCwgKlBBRERSRVNTX01BUF90OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfZWVwcm9tLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9lZXByb20uYwppbmRleCBiY2NhMWY4Li4zY2EyNTM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9lZXByb20uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9lZXByb20uYwpAQCAtODQsMTcgKzg0LDQyIEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAKICNpbmNsdWRlICJldDEzMTBfcGh5LmgiCi0jaW5jbHVkZSAiZXQxMzEwX3BtLmgiCi0jaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKLSNpbmNsdWRlICJldDEzMTBfZWVwcm9tLmgiCi0KICNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgotI2luY2x1ZGUgImV0MTMxeF9pbml0cGNpLmgiCi0jaW5jbHVkZSAiZXQxMzF4X2lzci5oIgorI2luY2x1ZGUgImV0MTMxeC5oIgogCi0jaW5jbHVkZSAiZXQxMzEwX3R4LmgiCisvKgorICogRUVQUk9NIERlZmluZXMKKyAqLwogCisvKiBMQkNJRiBSZWdpc3RlciBHcm91cHMgKGFkZHJlc3NlZCB2aWEgMzItYml0IG9mZnNldHMpICovCisjZGVmaW5lIExCQ0lGX0RXT1JEMF9HUk9VUCAgICAgICAweEFDCisjZGVmaW5lIExCQ0lGX0RXT1JEMV9HUk9VUCAgICAgICAweEIwCiAKKy8qIExCQ0lGIFJlZ2lzdGVycyAoYWRkcmVzc2VkIHZpYSA4LWJpdCBvZmZzZXRzKSAqLworI2RlZmluZSBMQkNJRl9BRERSRVNTX1JFR0lTVEVSICAgMHhBQworI2RlZmluZSBMQkNJRl9EQVRBX1JFR0lTVEVSICAgICAgMHhCMAorI2RlZmluZSBMQkNJRl9DT05UUk9MX1JFR0lTVEVSICAgMHhCMQorI2RlZmluZSBMQkNJRl9TVEFUVVNfUkVHSVNURVIgICAgMHhCMgorCisvKiBMQkNJRiBDb250cm9sIFJlZ2lzdGVyIEJpdHMgKi8KKyNkZWZpbmUgTEJDSUZfQ09OVFJPTF9TRVFVRU5USUFMX1JFQUQgICAweDAxCisjZGVmaW5lIExCQ0lGX0NPTlRST0xfUEFHRV9XUklURSAgICAgICAgMHgwMgorI2RlZmluZSBMQkNJRl9DT05UUk9MX0VFUFJPTV9SRUxPQUQgICAgIDB4MDgKKyNkZWZpbmUgTEJDSUZfQ09OVFJPTF9UV09fQllURV9BRERSICAgICAweDIwCisjZGVmaW5lIExCQ0lGX0NPTlRST0xfSTJDX1dSSVRFICAgICAgICAgMHg0MAorI2RlZmluZSBMQkNJRl9DT05UUk9MX0xCQ0lGX0VOQUJMRSAgICAgIDB4ODAKKworLyogTEJDSUYgU3RhdHVzIFJlZ2lzdGVyIEJpdHMgKi8KKyNkZWZpbmUgTEJDSUZfU1RBVFVTX1BIWV9RVUVVRV9BVkFJTCAgICAweDAxCisjZGVmaW5lIExCQ0lGX1NUQVRVU19JMkNfSURMRSAgICAgICAgICAgMHgwMgorI2RlZmluZSBMQkNJRl9TVEFUVVNfQUNLX0VSUk9SICAgICAgICAgIDB4MDQKKyNkZWZpbmUgTEJDSUZfU1RBVFVTX0dFTkVSQUxfRVJST1IgICAgICAweDA4CisjZGVmaW5lIExCQ0lGX1NUQVRVU19DSEVDS1NVTV9FUlJPUiAgICAgMHg0MAorI2RlZmluZSBMQkNJRl9TVEFUVVNfRUVQUk9NX1BSRVNFTlQgICAgIDB4ODAKKworLyogTWlzY2VsbGFuZW91cyBDb25zdHJhaW50cyAqLworI2RlZmluZSBNQVhfTlVNX1JFR0lTVEVSX1BPTExTICAgICAgICAgIDEwMDAKKyNkZWZpbmUgTUFYX05VTV9XUklURV9SRVRSSUVTICAgICAgICAgICAyCiAKIHN0YXRpYyBpbnQgZWVwcm9tX3dhaXRfcmVhZHkoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHUzMiAqc3RhdHVzKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfZWVwcm9tLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9lZXByb20uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmE2YzZhNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9lZXByb20uaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMyArMCwwIEBACi0vKgotICogQWdlcmUgU3lzdGVtcyBJbmMuCi0gKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKLSAqCi0gKiBDb3B5cmlnaHQgwqkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBldDEzMTBfZWVwcm9tLmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiB1c2VkIGZvciBFRVBST00KLSAqICAgICAgICAgICAgICAgICAgIGFjY2VzcyByb3V0aW5lcwotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogU09GVFdBUkUgTElDRU5TRQotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAotICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcwotICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbwotICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgotICoKLSAqIENvcHlyaWdodCDCqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCi0gKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcwotICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBEaXNjbGFpbWVyCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCi0gKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCi0gKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgotICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFHRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfX0VUMTMxMF9FRVBST01fSF9fCi0jZGVmaW5lIF9fRVQxMzEwX0VFUFJPTV9IX18KLQotI2luY2x1ZGUgImV0MTMxMF9hZGRyZXNzX21hcC5oIgotCi0vKgotICogRUVQUk9NIERlZmluZXMKLSAqLwotCi0vKiBMQkNJRiBSZWdpc3RlciBHcm91cHMgKGFkZHJlc3NlZCB2aWEgMzItYml0IG9mZnNldHMpICovCi0jZGVmaW5lIExCQ0lGX0RXT1JEMF9HUk9VUCAgICAgICAweEFDCi0jZGVmaW5lIExCQ0lGX0RXT1JEMV9HUk9VUCAgICAgICAweEIwCi0KLS8qIExCQ0lGIFJlZ2lzdGVycyAoYWRkcmVzc2VkIHZpYSA4LWJpdCBvZmZzZXRzKSAqLwotI2RlZmluZSBMQkNJRl9BRERSRVNTX1JFR0lTVEVSICAgMHhBQwotI2RlZmluZSBMQkNJRl9EQVRBX1JFR0lTVEVSICAgICAgMHhCMAotI2RlZmluZSBMQkNJRl9DT05UUk9MX1JFR0lTVEVSICAgMHhCMQotI2RlZmluZSBMQkNJRl9TVEFUVVNfUkVHSVNURVIgICAgMHhCMgotCi0vKiBMQkNJRiBDb250cm9sIFJlZ2lzdGVyIEJpdHMgKi8KLSNkZWZpbmUgTEJDSUZfQ09OVFJPTF9TRVFVRU5USUFMX1JFQUQgICAweDAxCi0jZGVmaW5lIExCQ0lGX0NPTlRST0xfUEFHRV9XUklURSAgICAgICAgMHgwMgotI2RlZmluZSBMQkNJRl9DT05UUk9MX0VFUFJPTV9SRUxPQUQgICAgIDB4MDgKLSNkZWZpbmUgTEJDSUZfQ09OVFJPTF9UV09fQllURV9BRERSICAgICAweDIwCi0jZGVmaW5lIExCQ0lGX0NPTlRST0xfSTJDX1dSSVRFICAgICAgICAgMHg0MAotI2RlZmluZSBMQkNJRl9DT05UUk9MX0xCQ0lGX0VOQUJMRSAgICAgIDB4ODAKLQotLyogTEJDSUYgU3RhdHVzIFJlZ2lzdGVyIEJpdHMgKi8KLSNkZWZpbmUgTEJDSUZfU1RBVFVTX1BIWV9RVUVVRV9BVkFJTCAgICAweDAxCi0jZGVmaW5lIExCQ0lGX1NUQVRVU19JMkNfSURMRSAgICAgICAgICAgMHgwMgotI2RlZmluZSBMQkNJRl9TVEFUVVNfQUNLX0VSUk9SICAgICAgICAgIDB4MDQKLSNkZWZpbmUgTEJDSUZfU1RBVFVTX0dFTkVSQUxfRVJST1IgICAgICAweDA4Ci0jZGVmaW5lIExCQ0lGX1NUQVRVU19DSEVDS1NVTV9FUlJPUiAgICAgMHg0MAotI2RlZmluZSBMQkNJRl9TVEFUVVNfRUVQUk9NX1BSRVNFTlQgICAgIDB4ODAKLQotLyogTWlzY2VsbGFuZW91cyBDb25zdHJhaW50cyAqLwotI2RlZmluZSBNQVhfTlVNX1JFR0lTVEVSX1BPTExTICAgICAgICAgIDEwMDAKLSNkZWZpbmUgTUFYX05VTV9XUklURV9SRVRSSUVTICAgICAgICAgICAyCi0KLS8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KLXN0cnVjdCBldDEzMXhfYWRhcHRlcjsKLQotaW50IGV0MTMxeF9pbml0X2VlcHJvbShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmV0ZGV2KTsKLQotI2VuZGlmIC8qIF9FVDEzMTBfRUVQUk9NX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9qYWdjb3JlLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9qYWdjb3JlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4MDdhMDEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfamFnY29yZS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSAqIEFnZXJlIFN5c3RlbXMgSW5jLgotICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCi0gKgotICogQ29weXJpZ2h0IMKpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogZXQxMzEwX2phZ2NvcmUuaCAtIERlZmluZXMsIHN0cnVjdHMsIGVudW1zLCBwcm90b3R5cGVzLCBldGMuIHBlcnRhaW5pbmcgdG8KLSAqICAgICAgICAgICAgICAgICAgICB0aGUgSkFHQ29yZQotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogU09GVFdBUkUgTElDRU5TRQotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAotICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcwotICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbwotICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgotICoKLSAqIENvcHlyaWdodCDCqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCi0gKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcwotICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBEaXNjbGFpbWVyCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCi0gKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCi0gKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgotICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFHRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfX0VUMTMxMF9KQUdDT1JFX0hfXwotI2RlZmluZSBfX0VUMTMxMF9KQUdDT1JFX0hfXwotCi0jaW5jbHVkZSAiZXQxMzEwX2FkZHJlc3NfbWFwLmgiCi0KLQotI2RlZmluZSBJTlRFUk5BTF9NRU1fU0laRSAgICAgICAweDQwMAkvKiAxMDI0IG9mIGludGVybmFsIG1lbW9yeSAqLwotI2RlZmluZSBJTlRFUk5BTF9NRU1fUlhfT0ZGU0VUICAweDFGRgkvKiA1MCUgICBUeCwgNTAlICAgUnggKi8KLQotLyoKLSAqIEZvciBpbnRlcnJ1cHRzLCBub3JtYWwgcnVubmluZyBpczoKLSAqICAgICAgIHJ4ZG1hX3hmcl9kb25lLCBwaHlfaW50ZXJydXB0LCBtYWNfc3RhdF9pbnRlcnJ1cHQsCi0gKiAgICAgICB3YXRjaGRvZ19pbnRlcnJ1cHQgJiB0eGRtYV94ZmVyX2RvbmUKLSAqCi0gKiBJbiBib3RoIGNhc2VzLCB3aGVuIGZsb3cgY29udHJvbCBpcyBlbmFibGVkIGZvciBlaXRoZXIgVHggb3IgYmktZGlyZWN0aW9uLAotICogd2UgYWRkaXRpb25hbCBlbmFibGUgcnhfZmJyMF9sb3cgYW5kIHJ4X2ZicjFfbG93LCBzbyB3ZSBrbm93IHdoZW4gdGhlCi0gKiBidWZmZXIgcmluZ3MgYXJlIHJ1bm5pbmcgbG93LgotICovCi0jZGVmaW5lIElOVF9NQVNLX0RJU0FCTEUgICAgICAgICAgICAweGZmZmZmZmZmCi0KLS8qIE5PVEU6IE1hc2tpbmcgb3V0IE1BQ19TVEFUIEludGVycnVwdCBmb3Igbm93Li4uCi0gKiAjZGVmaW5lIElOVF9NQVNLX0VOQUJMRSAgICAgICAgICAgICAweGZmZjZiZjE3Ci0gKiAjZGVmaW5lIElOVF9NQVNLX0VOQUJMRV9OT19GTE9XICAgICAweGZmZjZiZmQ3Ci0gKi8KLSNkZWZpbmUgSU5UX01BU0tfRU5BQkxFICAgICAgICAgICAgIDB4ZmZmZWJmMTcKLSNkZWZpbmUgSU5UX01BU0tfRU5BQkxFX05PX0ZMT1cgICAgIDB4ZmZmZWJmZDcKLQotLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLwotc3RydWN0IGV0MTMxeF9hZGFwdGVyOwotCi12b2lkIENvbmZpZ0dsb2JhbFJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7Ci12b2lkIENvbmZpZ01NQ1JlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlcik7Ci12b2lkIGV0MTMxeF9lbmFibGVfaW50ZXJydXB0cyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBldDEzMXhfZGlzYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci0KLSNlbmRpZiAvKiBfX0VUMTMxMF9KQUdDT1JFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfbWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9tYWMuYwppbmRleCBiOGExZjIwLi5hMjkyYjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9tYWMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9tYWMuYwpAQCAtODUsMTIgKzg1LDE5IEBACiAjaW5jbHVkZSA8bGludXgvY3JjMzIuaD4KIAogI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKLSNpbmNsdWRlICJldDEzMTBfcG0uaCIKLSNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgotI2luY2x1ZGUgImV0MTMxMF9tYWMuaCIKLQogI2luY2x1ZGUgImV0MTMxeF9hZGFwdGVyLmgiCi0jaW5jbHVkZSAiZXQxMzF4X2luaXRwY2kuaCIKKyNpbmNsdWRlICJldDEzMXguaCIKKworCisjZGVmaW5lIENPVU5URVJfV1JBUF8yOF9CSVQgMHgxMDAwMDAwMAorI2RlZmluZSBDT1VOVEVSX1dSQVBfMjJfQklUIDB4NDAwMDAwCisjZGVmaW5lIENPVU5URVJfV1JBUF8xNl9CSVQgMHgxMDAwMAorI2RlZmluZSBDT1VOVEVSX1dSQVBfMTJfQklUIDB4MTAwMAorCisjZGVmaW5lIENPVU5URVJfTUFTS18yOF9CSVQgKENPVU5URVJfV1JBUF8yOF9CSVQgLSAxKQorI2RlZmluZSBDT1VOVEVSX01BU0tfMjJfQklUIChDT1VOVEVSX1dSQVBfMjJfQklUIC0gMSkKKyNkZWZpbmUgQ09VTlRFUl9NQVNLXzE2X0JJVCAoQ09VTlRFUl9XUkFQXzE2X0JJVCAtIDEpCisjZGVmaW5lIENPVU5URVJfTUFTS18xMl9CSVQgKENPVU5URVJfV1JBUF8xMl9CSVQgLSAxKQogCiAvKioKICAqIENvbmZpZ01hY1JlZ3MxIC0gSW5pdGlhbGl6ZSB0aGUgZmlyc3QgcGFydCBvZiBNQUMgcmVncwpAQCAtMTYzLDkgKzE3MCw5IEBACiAJdTMyIGNmZzE7CiAJdTMyIGNmZzI7CiAJdTMyIGlmY3RybDsKLQlUWE1BQ19DVExfdCBjdGw7CisJdTMyIGN0bDsKIAotCWN0bC52YWx1ZSA9IHJlYWRsKCZldGRldi0+cmVncy0+dHhtYWMuY3RsLnZhbHVlKTsKKwljdGwgPSByZWFkbCgmZXRkZXYtPnJlZ3MtPnR4bWFjLmN0bCk7CiAJY2ZnMSA9IHJlYWRsKCZwTWFjLT5jZmcxKTsKIAljZmcyID0gcmVhZGwoJnBNYWMtPmNmZzIpOwogCWlmY3RybCA9IHJlYWRsKCZwTWFjLT5pZl9jdHJsKTsKQEAgLTIxOSw5ICsyMjYsOCBAQAogCX0KIAogCS8qIEVuYWJsZSBUWE1BQyAqLwotCWN0bC5iaXRzLnR4bWFjX2VuID0gMHgxOwotCWN0bC5iaXRzLmZjX2Rpc2FibGUgPSAweDE7Ci0Jd3JpdGVsKGN0bC52YWx1ZSwgJmV0ZGV2LT5yZWdzLT50eG1hYy5jdGwudmFsdWUpOworCWN0bCB8PSAweDA1OwkvKiBUWCBtYWMgZW5hYmxlLCBGQyBkaXNhYmxlICovCisJd3JpdGVsKGN0bCwgJmV0ZGV2LT5yZWdzLT50eG1hYy5jdGwpOwogCiAJLyogUmVhZHkgdG8gc3RhcnQgdGhlIFJYRE1BL1RYRE1BIGVuZ2luZSAqLwogCWlmIChldGRldi0+RmxhZ3MgJiBmTVBfQURBUFRFUl9MT1dFUl9QT1dFUikgewpAQCAtMjM1LDE1ICsyNDEsMTUgQEAKIAlzdHJ1Y3QgX1JYTUFDX3QgX19pb21lbSAqcFJ4TWFjID0gJmV0ZGV2LT5yZWdzLT5yeG1hYzsKIAlSWE1BQ19XT0xfU0FfTE9fdCBzYV9sbzsKIAlSWE1BQ19XT0xfU0FfSElfdCBzYV9oaTsKLQlSWE1BQ19QRl9DVFJMX3QgcGZfY3RybCA9IHsgMCB9OworCXUzMiBwZl9jdHJsID0gMDsKIAogCS8qIERpc2FibGUgdGhlIE1BQyB3aGlsZSBpdCBpcyBiZWluZyBjb25maWd1cmVkIChhbHNvIGRpc2FibGUgV09MKSAqLwotCXdyaXRlbCgweDgsICZwUnhNYWMtPmN0cmwudmFsdWUpOworCXdyaXRlbCgweDgsICZwUnhNYWMtPmN0cmwpOwogCiAJLyogSW5pdGlhbGl6ZSBXT0wgdG8gZGlzYWJsZWQuICovCi0Jd3JpdGVsKDAsICZwUnhNYWMtPmNyYzAudmFsdWUpOwotCXdyaXRlbCgwLCAmcFJ4TWFjLT5jcmMxMi52YWx1ZSk7Ci0Jd3JpdGVsKDAsICZwUnhNYWMtPmNyYzM0LnZhbHVlKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+Y3JjMCk7CisJd3JpdGVsKDAsICZwUnhNYWMtPmNyYzEyKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+Y3JjMzQpOwogCiAJLyogV2UgbmVlZCB0byBzZXQgdGhlIFdPTCBtYXNrMCAtIG1hc2s0IG5leHQuICBXZSBpbml0aWFsaXplIGl0IHRvCiAJICogaXRzIGRlZmF1bHQgVmFsdWVzIG9mIDB4MDAwMDAwMDAgYmVjYXVzZSB0aGVyZSBhcmUgbm90IFdPTCBtYXNrcwpAQCAtMjg2LDEyICsyOTIsMTIgQEAKIAl3cml0ZWwoc2FfaGkudmFsdWUsICZwUnhNYWMtPnNhX2hpLnZhbHVlKTsKIAogCS8qIERpc2FibGUgYWxsIFBhY2tldCBGaWx0ZXJpbmcgKi8KLQl3cml0ZWwoMCwgJnBSeE1hYy0+cGZfY3RybC52YWx1ZSk7CisJd3JpdGVsKDAsICZwUnhNYWMtPnBmX2N0cmwpOwogCiAJLyogTGV0J3MgaW5pdGlhbGl6ZSB0aGUgVW5pY2FzdCBQYWNrZXQgZmlsdGVyaW5nIGFkZHJlc3MgKi8KIAlpZiAoZXRkZXYtPlBhY2tldEZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9ESVJFQ1RFRCkgewogCQlTZXR1cERldmljZUZvclVuaWNhc3QoZXRkZXYpOwotCQlwZl9jdHJsLmJpdHMuZmlsdGVyX3VuaV9lbiA9IDE7CisJCXBmX2N0cmwgfD0gNDsJLyogVW5pY2FzdCBmaWx0ZXIgKi8KIAl9IGVsc2UgewogCQl3cml0ZWwoMCwgJnBSeE1hYy0+dW5pX3BmX2FkZHIxLnZhbHVlKTsKIAkJd3JpdGVsKDAsICZwUnhNYWMtPnVuaV9wZl9hZGRyMi52YWx1ZSk7CkBAIC0yOTksMjAgKzMwNSwxNiBAQAogCX0KIAogCS8qIExldCdzIGluaXRpYWxpemUgdGhlIE11bHRpY2FzdCBoYXNoICovCi0JaWYgKGV0ZGV2LT5QYWNrZXRGaWx0ZXIgJiBFVDEzMVhfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVCkgewotCQlwZl9jdHJsLmJpdHMuZmlsdGVyX211bHRpX2VuID0gMDsKLQl9IGVsc2UgewotCQlwZl9jdHJsLmJpdHMuZmlsdGVyX211bHRpX2VuID0gMTsKKwlpZiAoIShldGRldi0+UGFja2V0RmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QpKSB7CisJCXBmX2N0cmwgfD0gMjsJLyogTXVsdGljYXN0IGZpbHRlciAqLwogCQlTZXR1cERldmljZUZvck11bHRpY2FzdChldGRldik7CiAJfQogCiAJLyogUnVudCBwYWNrZXQgZmlsdGVyaW5nLiAgRGlkbid0IHdvcmsgaW4gdmVyc2lvbiBBIHNpbGljb24uICovCi0JcGZfY3RybC5iaXRzLm1pbl9wa3Rfc2l6ZSA9IE5JQ19NSU5fUEFDS0VUX1NJWkUgKyA0OwotCXBmX2N0cmwuYml0cy5maWx0ZXJfZnJhZ19lbiA9IDE7CisJcGZfY3RybCB8PSAoTklDX01JTl9QQUNLRVRfU0laRSArIDQpIDw8IDE2OworCXBmX2N0cmwgfD0gODsJLyogRnJhZ21lbnQgZmlsdGVyICovCiAKLQlpZiAoZXRkZXYtPlJlZ2lzdHJ5SnVtYm9QYWNrZXQgPiA4MTkyKSB7Ci0JCVJYTUFDX01DSUZfQ1RSTF9NQVhfU0VHX3QgbWNpZl9jdHJsX21heF9zZWc7Ci0KKwlpZiAoZXRkZXYtPlJlZ2lzdHJ5SnVtYm9QYWNrZXQgPiA4MTkyKQogCQkvKiBJbiBvcmRlciB0byB0cmFuc21pdCBqdW1ibyBwYWNrZXRzIGdyZWF0ZXIgdGhhbiA4aywgdGhlCiAJCSAqIEZJRk8gYmV0d2VlbiBSeE1BQyBhbmQgUnhETUEgbmVlZHMgdG8gYmUgcmVkdWNlZCBpbiBzaXplCiAJCSAqIHRvICgxNmsgLSBKdW1ibyBwYWNrZXQgc2l6ZSkuICBJbiBvcmRlciB0byBpbXBsZW1lbnQgdGhpcywKQEAgLTMyMCwyNSArMzIyLDIxIEBACiAJCSAqIHBhY2tldHMgZG93biBpbnRvIHNlZ21lbnRzIHdoaWNoIGFyZSAobWF4X3NpemUgKiAxNikuICBJbgogCQkgKiB0aGlzIGNhc2Ugd2Ugc2VsZWN0ZWQgMjU2IGJ5dGVzLCBzaW5jZSB0aGlzIGlzIHRoZSBzaXplIG9mCiAJCSAqIHRoZSBQQ0ktRXhwcmVzcyBUTFAncyB0aGF0IHRoZSAxMzEwIHVzZXMuCisJCSAqCisJCSAqIHNlZ19lbiBvbiwgZmNfZW4gb2ZmLCBzaXplIDB4MTAKIAkJICovCi0JCW1jaWZfY3RybF9tYXhfc2VnLmJpdHMuc2VnX2VuID0gMHgxOwotCQltY2lmX2N0cmxfbWF4X3NlZy5iaXRzLmZjX2VuID0gMHgwOwotCQltY2lmX2N0cmxfbWF4X3NlZy5iaXRzLm1heF9zaXplID0gMHgxMDsKLQotCQl3cml0ZWwobWNpZl9jdHJsX21heF9zZWcudmFsdWUsCi0JCSAgICAgICAmcFJ4TWFjLT5tY2lmX2N0cmxfbWF4X3NlZy52YWx1ZSk7Ci0JfSBlbHNlIHsKLQkJd3JpdGVsKDAsICZwUnhNYWMtPm1jaWZfY3RybF9tYXhfc2VnLnZhbHVlKTsKLQl9CisJCXdyaXRlbCgweDQxLCAmcFJ4TWFjLT5tY2lmX2N0cmxfbWF4X3NlZyk7CisJZWxzZQorCQl3cml0ZWwoMCwgJnBSeE1hYy0+bWNpZl9jdHJsX21heF9zZWcpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgTUNJRiB3YXRlciBtYXJrcyAqLwotCXdyaXRlbCgwLCAmcFJ4TWFjLT5tY2lmX3dhdGVyX21hcmsudmFsdWUpOworCXdyaXRlbCgwLCAmcFJ4TWFjLT5tY2lmX3dhdGVyX21hcmspOwogCiAJLyogIEluaXRpYWxpemUgdGhlIE1JRiBjb250cm9sICovCi0Jd3JpdGVsKDAsICZwUnhNYWMtPm1pZl9jdHJsLnZhbHVlKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+bWlmX2N0cmwpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgU3BhY2UgQXZhaWxhYmxlIFJlZ2lzdGVyICovCi0Jd3JpdGVsKDAsICZwUnhNYWMtPnNwYWNlX2F2YWlsLnZhbHVlKTsKKwl3cml0ZWwoMCwgJnBSeE1hYy0+c3BhY2VfYXZhaWwpOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgdGhlIG1pZl9jdHJsIHJlZ2lzdGVyCiAJICogYml0IDM6ICBSZWNlaXZlIGNvZGUgZXJyb3IuIE9uZSBvciBtb3JlIG5pYmJsZXMgd2VyZSBzaWduYWxlZCBhcwpAQCAtMzU0LDkgKzM1Miw5IEBACiAJICogYml0IDE3OiBEcm9wIHBhY2tldCBlbmFibGUKIAkgKi8KIAlpZiAoZXRkZXYtPmxpbmtzcGVlZCA9PSBUUlVFUEhZX1NQRUVEXzEwME1CUFMpCi0JCXdyaXRlbCgweDMwMDM4LCAmcFJ4TWFjLT5taWZfY3RybC52YWx1ZSk7CisJCXdyaXRlbCgweDMwMDM4LCAmcFJ4TWFjLT5taWZfY3RybCk7CiAJZWxzZQotCQl3cml0ZWwoMHgzMDAzMCwgJnBSeE1hYy0+bWlmX2N0cmwudmFsdWUpOworCQl3cml0ZWwoMHgzMDAzMCwgJnBSeE1hYy0+bWlmX2N0cmwpOwogCiAJLyogRmluYWxseSB3ZSBpbml0aWFsaXplIFJ4TWFjIHRvIGJlIGVuYWJsZWQgJiBXT0wgZGlzYWJsZWQuICBQYWNrZXQKIAkgKiBmaWx0ZXIgaXMgYWx3YXlzIGVuYWJsZWQgc2luY2UgaXQgaXMgd2hlcmUgdGhlIHJ1bnQgcGFja2V0cyBhcmUKQEAgLTM2NCwyOCArMzYyLDI4IEBACiAJICogZHJvcHBpbmcgZG9lc24ndCB3b3JrLCBzbyBpdCBpcyBkaXNhYmxlZCBpbiB0aGUgcGZfY3RybCByZWdpc3RlciwKIAkgKiBidXQgd2Ugc3RpbGwgbGVhdmUgdGhlIHBhY2tldCBmaWx0ZXIgb24uCiAJICovCi0Jd3JpdGVsKHBmX2N0cmwudmFsdWUsICZwUnhNYWMtPnBmX2N0cmwudmFsdWUpOwotCXdyaXRlbCgweDksICZwUnhNYWMtPmN0cmwudmFsdWUpOworCXdyaXRlbChwZl9jdHJsLCAmcFJ4TWFjLT5wZl9jdHJsKTsKKwl3cml0ZWwoMHg5LCAmcFJ4TWFjLT5jdHJsKTsKIH0KIAogdm9pZCBDb25maWdUeE1hY1JlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpldGRldikKIHsKLQlzdHJ1Y3QgX1RYTUFDX3QgX19pb21lbSAqcFR4TWFjID0gJmV0ZGV2LT5yZWdzLT50eG1hYzsKKwlzdHJ1Y3QgdHhtYWNfcmVncyAqdHhtYWMgPSAmZXRkZXYtPnJlZ3MtPnR4bWFjOwogCiAJLyogV2UgbmVlZCB0byB1cGRhdGUgdGhlIENvbnRyb2wgRnJhbWUgUGFyYW1ldGVycwogCSAqIGNmcHQgLSBjb250cm9sIGZyYW1lIHBhdXNlIHRpbWVyIHNldCB0byA2NCAoMHg0MCkKIAkgKiBjZmVwIC0gY29udHJvbCBmcmFtZSBleHRlbmRlZCBwYXVzZSB0aW1lciBzZXQgdG8gMHgwCiAJICovCiAJaWYgKGV0ZGV2LT5GbG93Q29udHJvbCA9PSBOb25lKQotCQl3cml0ZWwoMCwgJnBUeE1hYy0+Y2ZfcGFyYW0pOworCQl3cml0ZWwoMCwgJnR4bWFjLT5jZl9wYXJhbSk7CiAJZWxzZQotCQl3cml0ZWwoMHg0MCwgJnBUeE1hYy0+Y2ZfcGFyYW0pOworCQl3cml0ZWwoMHg0MCwgJnR4bWFjLT5jZl9wYXJhbSk7CiB9CiAKIHZvaWQgQ29uZmlnTWFjU3RhdFJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpldGRldikKIHsKLQlzdHJ1Y3QgX01BQ19TVEFUX3QgX19pb21lbSAqbWFjc3RhdCA9Ci0JCSZldGRldi0+cmVncy0+bWFjU3RhdDsKKwlzdHJ1Y3QgbWFjc3RhdF9yZWdzIF9faW9tZW0gKm1hY3N0YXQgPQorCQkmZXRkZXYtPnJlZ3MtPm1hY3N0YXQ7CiAKIAkvKiBOZXh0IHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBhbGwgdGhlIE1BQ19TVEFUIHJlZ2lzdGVycyB0byB6ZXJvIG9uCiAJICogdGhlIGRldmljZS4KQEAgLTQ1Niw4ICs0NTQsOCBAQAogdm9pZCBVcGRhdGVNYWNTdGF0SG9zdENvdW50ZXJzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqZXRkZXYpCiB7CiAJc3RydWN0IF9jZV9zdGF0c190ICpzdGF0cyA9ICZldGRldi0+U3RhdHM7Ci0Jc3RydWN0IF9NQUNfU1RBVF90IF9faW9tZW0gKm1hY3N0YXQgPQotCQkmZXRkZXYtPnJlZ3MtPm1hY1N0YXQ7CisJc3RydWN0IG1hY3N0YXRfcmVncyBfX2lvbWVtICptYWNzdGF0ID0KKwkJJmV0ZGV2LT5yZWdzLT5tYWNzdGF0OwogCiAJc3RhdHMtPmNvbGxpc2lvbnMgKz0gcmVhZGwoJm1hY3N0YXQtPlROY2wpOwogCXN0YXRzLT5maXJzdF9jb2xsaXNpb24gKz0gcmVhZGwoJm1hY3N0YXQtPlRTY2wpOwpAQCAtNDkzLDExICs0OTEsMTEgQEAKIAkvKiBSZWFkIHRoZSBpbnRlcnJ1cHQgYml0cyBmcm9tIHRoZSByZWdpc3RlcihzKS4gIFRoZXNlIGFyZSBDbGVhciBPbgogCSAqIFdyaXRlLgogCSAqLwotCUNhcnJ5MSA9IHJlYWRsKCZldGRldi0+cmVncy0+bWFjU3RhdC5DYXJyeTEpOwotCUNhcnJ5MiA9IHJlYWRsKCZldGRldi0+cmVncy0+bWFjU3RhdC5DYXJyeTIpOworCUNhcnJ5MSA9IHJlYWRsKCZldGRldi0+cmVncy0+bWFjc3RhdC5DYXJyeTEpOworCUNhcnJ5MiA9IHJlYWRsKCZldGRldi0+cmVncy0+bWFjc3RhdC5DYXJyeTIpOwogCi0Jd3JpdGVsKENhcnJ5MSwgJmV0ZGV2LT5yZWdzLT5tYWNTdGF0LkNhcnJ5MSk7Ci0Jd3JpdGVsKENhcnJ5MiwgJmV0ZGV2LT5yZWdzLT5tYWNTdGF0LkNhcnJ5Mik7CisJd3JpdGVsKENhcnJ5MSwgJmV0ZGV2LT5yZWdzLT5tYWNzdGF0LkNhcnJ5MSk7CisJd3JpdGVsKENhcnJ5MiwgJmV0ZGV2LT5yZWdzLT5tYWNzdGF0LkNhcnJ5Mik7CiAKIAkvKiBXZSBuZWVkIHRvIGRvIHVwZGF0ZSB0aGUgaG9zdCBjb3B5IG9mIGFsbCB0aGUgTUFDX1NUQVQgY291bnRlcnMuCiAJICogRm9yIGVhY2ggY291bnRlciwgY2hlY2sgaXQncyBvdmVyZmxvdyBiaXQuICBJZiB0aGUgb3ZlcmZsb3cgYml0IGlzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9tYWMuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX21hYy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyYzM4NTk1Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX21hYy5oCisrKyAvZGV2L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIEFnZXJlIFN5c3RlbXMgSW5jLgotICogMTAvMTAwLzEwMDAgQmFzZS1UIEV0aGVybmV0IERyaXZlciBmb3IgdGhlIEVUMTMwMSBhbmQgRVQxMzF4IHNlcmllcyBNQUNzCi0gKgotICogQ29weXJpZ2h0IMKpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogICBodHRwOi8vd3d3LmFnZXJlLmNvbQotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogZXQxMzEwX21hYy5oIC0gIERlZmluZXMsIHN0cnVjdHMsIGVudW1zLCBwcm90b3R5cGVzLCBldGMuIHBlcnRhaW5pbmcgdG8gdGhlCi0gKiAgICAgICAgICAgICAgICAgTUFDLgotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogU09GVFdBUkUgTElDRU5TRQotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAotICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcwotICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbwotICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgotICoKLSAqIENvcHlyaWdodCDCqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCi0gKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcwotICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBEaXNjbGFpbWVyCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCi0gKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCi0gKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgotICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFHRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfRVQxMzEwX01BQ19IXwotI2RlZmluZSBfRVQxMzEwX01BQ19IXwotCi0KLSNpbmNsdWRlICJldDEzMTBfYWRkcmVzc19tYXAuaCIKLQotCi0jZGVmaW5lIENPVU5URVJfV1JBUF8yOF9CSVQgMHgxMDAwMDAwMAotI2RlZmluZSBDT1VOVEVSX1dSQVBfMjJfQklUIDB4NDAwMDAwCi0jZGVmaW5lIENPVU5URVJfV1JBUF8xNl9CSVQgMHgxMDAwMAotI2RlZmluZSBDT1VOVEVSX1dSQVBfMTJfQklUIDB4MTAwMAotCi0jZGVmaW5lIENPVU5URVJfTUFTS18yOF9CSVQgKENPVU5URVJfV1JBUF8yOF9CSVQgLSAxKQotI2RlZmluZSBDT1VOVEVSX01BU0tfMjJfQklUIChDT1VOVEVSX1dSQVBfMjJfQklUIC0gMSkKLSNkZWZpbmUgQ09VTlRFUl9NQVNLXzE2X0JJVCAoQ09VTlRFUl9XUkFQXzE2X0JJVCAtIDEpCi0jZGVmaW5lIENPVU5URVJfTUFTS18xMl9CSVQgKENPVU5URVJfV1JBUF8xMl9CSVQgLSAxKQotCi0jZGVmaW5lIFVQREFURV9DT1VOVEVSKEhvc3RDbnQsIERldkNudCkgXAotICAgIEhvc3RDbnQgPSBIb3N0Q250ICsgRGV2Q250OwotCi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlICovCi1zdHJ1Y3QgZXQxMzF4X2FkYXB0ZXI7Ci0KLXZvaWQgQ29uZmlnTUFDUmVnczEoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgQ29uZmlnTUFDUmVnczIoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgQ29uZmlnUnhNYWNSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIENvbmZpZ1R4TWFjUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBDb25maWdNYWNTdGF0UmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBDb25maWdGbG93Q29udHJvbChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBVcGRhdGVNYWNTdGF0SG9zdENvdW50ZXJzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIEhhbmRsZU1hY1N0YXRJbnRlcnJ1cHQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgU2V0dXBEZXZpY2VGb3JNdWx0aWNhc3Qoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgU2V0dXBEZXZpY2VGb3JVbmljYXN0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci0KLSNlbmRpZiAvKiBfRVQxMzEwX01BQ19IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcGh5LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuYwppbmRleCA2ZWNhZDYxLi40YTU1ZmJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuYwpAQCAtODUsMTcgKzg1LDE0IEBACiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAKICNpbmNsdWRlICJldDEzMTBfcGh5LmgiCi0jaW5jbHVkZSAiZXQxMzEwX3BtLmgiCi0jaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKIAogI2luY2x1ZGUgImV0MTMxeF9hZGFwdGVyLmgiCi0jaW5jbHVkZSAiZXQxMzF4X25ldGRldi5oIgotI2luY2x1ZGUgImV0MTMxeF9pbml0cGNpLmgiCiAKICNpbmNsdWRlICJldDEzMTBfYWRkcmVzc19tYXAuaCIKICNpbmNsdWRlICJldDEzMTBfdHguaCIKICNpbmNsdWRlICJldDEzMTBfcnguaCIKLSNpbmNsdWRlICJldDEzMTBfbWFjLmgiCisKKyNpbmNsdWRlICJldDEzMXguaCIKIAogLyogUHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIHdpdGggbG9jYWwgc2NvcGUgKi8KIHN0YXRpYyB2b2lkIGV0MTMxeF94Y3ZyX2luaXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpldGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9waHkuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5oCmluZGV4IDc1OGI5YjIuLjQ3OTA3YmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BoeS5oCkBAIC03MzYsMzIgKzczNiw4IEBACiAKIC8qIE1JIFJlZ2lzdGVyIDI5IC0gMzE6IFJlc2VydmVkIFJlZygweDFEIC0gMHgxRSkgKi8KIAotLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLwotc3RydWN0IGV0MTMxeF9hZGFwdGVyOwogCiAvKiBQcm90b3R5cGVzIGZvciBFVDEzMTBfcGh5LmMgKi8KLWludCBldDEzMXhfeGN2cl9maW5kKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIGV0MTMxeF9zZXRwaHlfbm9ybWFsKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci0KLS8qIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb24gZG9lcyBub3Qgd29yayBiZWNhdXNlIGV0MTMxeF9hZGFwdGVyIGlzIG5vdCBhbHdheXMKLSAqIGRlZmluZWQKLSAqLwotaW50IFBoeU1pUmVhZChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsIHU4IHhjdnJBZGRyLAotCSAgICAgIHU4IHhjdnJSZWcsIHUxNiAqdmFsdWUpOwotI2RlZmluZSBNaVJlYWQoYWRhcHRlciwgeGN2clJlZywgdmFsdWUpIFwKLQlQaHlNaVJlYWQoKGFkYXB0ZXIpLCAoYWRhcHRlciktPlN0YXRzLnhjdnJfYWRkciwgKHhjdnJSZWcpLCAodmFsdWUpKQotCi1pbnQzMl90IE1pV3JpdGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAotCQl1OCB4Y3ZSZWcsIHUxNiB2YWx1ZSk7Ci12b2lkIGV0MTMxeF9NaWlfY2hlY2soc3RydWN0IGV0MTMxeF9hZGFwdGVyICpwQWRhcHRlciwKLQkJICAgICAgTUlfQk1TUl90IGJtc3IsIE1JX0JNU1JfdCBibXNyX2ludHMpOwotCi0vKiBUaGlzIGxhc3QgaXMgbm90IHN0cmljdGx5IHJlcXVpcmVkICh0aGUgZHJpdmVyIGNvdWxkIGNhbGwgdGhlIFRQQUwKLSAqIHZlcnNpb24gaW5zdGVhZCksIGJ1dCB0aGlzIHNldHMgdGhlIGFkYXB0ZXIgdXAgY29ycmVjdGx5LCBhbmQgY2FsbHMgdGhlCi0gKiBhY2Nlc3Mgcm91dGluZSBpbmRpcmVjdGx5LiAgVGhpcyBwcm90ZWN0cyB0aGUgZHJpdmVyIGZyb20gY2hhbmdlcyBpbiBUUEFMLgotICovCi12b2lkIFNldFBoeV8xMEJhc2VUSGFsZkR1cGxleChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotCiAvKiBEZWZpbmVzIGZvciBQSFkgYWNjZXNzIHJvdXRpbmVzICovCiAKIC8qIERlZmluZSBiaXQgb3BlcmF0aW9uIGZsYWdzICovCkBAIC04NDMsMTQgKzgxOSw0IEBACiAJCQkJCS8qICNkZWZpbmUgVFJVX1ZNSV9MSU5LX0NPTlRST0xfUkVHSVNURVIgICAgICAgICAgIDI5ICovCiAJCQkJCS8qICNkZWZpbmUgVFJVX1ZNSV9USU1JTkdfQ09OVFJPTF9SRUdJU1RFUiAqLwogCi0vKiBQcm90b3R5cGVzIGZvciBQSFkgYWNjZXNzIHJvdXRpbmVzICovCi12b2lkIEVUMTMxMF9QaHlJbml0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIEVUMTMxMF9QaHlSZXNldChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBFVDEzMTBfUGh5UG93ZXJEb3duKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwgYm9vbCBkb3duKTsKLXZvaWQgRVQxMzEwX1BoeUFkdmVydGlzZTEwMDBCYXNlVChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkJICB1MTYgZHVwbGV4KTsKLXZvaWQgRVQxMzEwX1BoeUFjY2Vzc01pQml0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKLQkJCSAgIHUxNiBhY3Rpb24sCi0JCQkgICB1MTYgcmVnbnVtLCB1MTYgYml0bnVtLCB1OCAqdmFsdWUpOwotCiAjZW5kaWYgLyogX0VUMTMxMF9QSFlfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BtLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9wbS5jCmluZGV4IDdkMDc3MjMuLjQxMDE5ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcG0uYwpAQCAtODMsMTMgKzgzLDkgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KIAogI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKLSNpbmNsdWRlICJldDEzMTBfcG0uaCIKLSNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgotI2luY2x1ZGUgImV0MTMxMF9tYWMuaCIKICNpbmNsdWRlICJldDEzMTBfcnguaCIKLQogI2luY2x1ZGUgImV0MTMxeF9hZGFwdGVyLmgiCi0jaW5jbHVkZSAiZXQxMzF4X2luaXRwY2kuaCIKKyNpbmNsdWRlICJldDEzMXguaCIKIAogLyoqCiAgKiBFbmFibGVQaHlDb21hIC0gY2FsbGVkIHdoZW4gbmV0d29yayBjYWJsZSBpcyB1bnBsdWdnZWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BtLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9wbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTVmM2FiLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3BtLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4NSArMCwwIEBACi0vKgotICogQWdlcmUgU3lzdGVtcyBJbmMuCi0gKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKLSAqCi0gKiBDb3B5cmlnaHQgwqkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBldDEzMTBfcG0uaCAtIERlZmluZXMsIHN0cnVjdHMsIGVudW1zLCBwcm90b3R5cGVzLCBldGMuIHBlcnRhaW5pbmcgdG8gcG93ZXIKLSAqICAgICAgICAgICAgICAgbWFuYWdlbWVudC4KLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIFNPRlRXQVJFIExJQ0VOU0UKLSAqCi0gKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucywKLSAqIHdoaWNoIHlvdSBzaG91bGQgcmVhZCBjYXJlZnVsbHkgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4gIFVzaW5nIHRoaXMKLSAqIHNvZnR3YXJlIGluZGljYXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBJZiB5b3UgZG8KLSAqIG5vdCBhZ3JlZSB3aXRoIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBkbyBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KLSAqCi0gKiBDb3B5cmlnaHQgwqkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbnMsIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwotICogICAgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgYXMgY29tbWVudHMgaW4gdGhlIGNvZGUgYXMKLSAqICAgIHdlbGwgYXMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogICAgZGlzdHJpYnV0aW9uLgotICoKLSAqIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgotICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEFnZXJlIFN5c3RlbXMgSW5jLiBub3IgdGhlIG5hbWVzIG9mIHRoZSBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogRGlzY2xhaW1lcgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLAotICogSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElORlJJTkdFTUVOVCBBTkQgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIEFOWQotICogVVNFLCBNT0RJRklDQVRJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgSVMgU09MRUxZIEFUIFRIRSBVU0VSUyBPV04KLSAqIFJJU0suIElOIE5PIEVWRU5UIFNIQUxMIEFHRVJFIFNZU1RFTVMgSU5DLiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKLSAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICi0gKiBEQU1BR0UuCi0gKgotICovCi0KLSNpZm5kZWYgX0VUMTMxMF9QTV9IXwotI2RlZmluZSBfRVQxMzEwX1BNX0hfCi0KLSNpbmNsdWRlICJldDEzMTBfYWRkcmVzc19tYXAuaCIKLQotdHlwZWRlZiBzdHJ1Y3QgX01QX1BPV0VSX01HTVQgewotCS8qIHZhcmlhYmxlIHB1dHRpbmcgdGhlIHBoeSBpbnRvIGNvbWEgbW9kZSB3aGVuIGJvb3QgdXAgd2l0aCBubyBjYWJsZQotCSAqIHBsdWdnZWQgaW4gYWZ0ZXIgNSBzZWNvbmRzCi0JICovCi0JdTggVHJhbnNQaHlDb21hTW9kZU9uQm9vdDsKLQotCS8qIE5leHQgdHdvIHVzZWQgdG8gc2F2ZSBwb3dlciBpbmZvcm1hdGlvbiBhdCBwb3dlciBkb3duLiBUaGlzCi0JICogaW5mb3JtYXRpb24gd2lsbCBiZSB1c2VkIGR1cmluZyBwb3dlciB1cCB0byBzZXQgdXAgcGFydHMgb2YgUG93ZXIKLQkgKiBNYW5hZ2VtZW50IGluIEpBR0NvcmUKLQkgKi8KLQl1MTYgUG93ZXJEb3duU3BlZWQ7Ci0JdTggUG93ZXJEb3duRHVwbGV4OwotfSBNUF9QT1dFUl9NR01ULCAqUE1QX1BPV0VSX01HTVQ7Ci0KLS8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKLSAqLwotc3RydWN0IGV0MTMxeF9hZGFwdGVyOwotCi12b2lkIEVuYWJsZVBoeUNvbWEoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgRGlzYWJsZVBoeUNvbWEoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLQotI2VuZGlmIC8qIF9FVDEzMTBfUE1fSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5jCmluZGV4IDgxYzFhNzQuLjU0Njg2ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguYwpAQCAtODQsMTQgKzg0LDkgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KIAogI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKLSNpbmNsdWRlICJldDEzMTBfcG0uaCIKLSNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgotCiAjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKLSNpbmNsdWRlICJldDEzMXhfaW5pdHBjaS5oIgotCiAjaW5jbHVkZSAiZXQxMzEwX3J4LmgiCi0KKyNpbmNsdWRlICJldDEzMXguaCIKIAogdm9pZCBuaWNfcmV0dXJuX3JmZChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmV0ZGV2LCBQTVBfUkZEIHBNcFJmZCk7CiAKQEAgLTEwOSwxNyArMTA0LDE2IEBACiAJdTMyIGksIGo7CiAJdTMyIGJ1ZnNpemU7CiAJdTMyIHBrdFN0YXRSaW5nU2l6ZSwgRkJSQ2h1bmtTaXplOwotCVJYX1JJTkdfdCAqcnhfcmluZzsKKwlzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZzsKIAogCS8qIFNldHVwIHNvbWUgY29udmVuaWVuY2UgcG9pbnRlcnMgKi8KLQlyeF9yaW5nID0gKFJYX1JJTkdfdCAqKSAmYWRhcHRlci0+UnhSaW5nOworCXJ4X3JpbmcgPSAmYWRhcHRlci0+cnhfcmluZzsKIAogCS8qIEFsbG9jIG1lbW9yeSBmb3IgdGhlIGxvb2t1cCB0YWJsZSAqLwogI2lmZGVmIFVTRV9GQlIwCi0JcnhfcmluZy0+RmJyWzBdID0ga21hbGxvYyhzaXplb2YoRkJSTE9PS1VQVEFCTEUpLCBHRlBfS0VSTkVMKTsKKwlyeF9yaW5nLT5mYnJbMF0gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZmJyX2xvb2t1cCksIEdGUF9LRVJORUwpOwogI2VuZGlmCi0KLQlyeF9yaW5nLT5GYnJbMV0gPSBrbWFsbG9jKHNpemVvZihGQlJMT09LVVBUQUJMRSksIEdGUF9LRVJORUwpOworCXJ4X3JpbmctPmZiclsxXSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBmYnJfbG9va3VwKSwgR0ZQX0tFUk5FTCk7CiAKIAkvKiBUaGUgZmlyc3QgdGhpbmcgd2Ugd2lsbCBkbyBpcyBjb25maWd1cmUgdGhlIHNpemVzIG9mIHRoZSBidWZmZXIKIAkgKiByaW5ncy4gVGhlc2Ugd2lsbCBjaGFuZ2UgYmFzZWQgb24ganVtYm8gcGFja2V0IHN1cHBvcnQuICBMYXJnZXIKQEAgLTE2MywxNCArMTU3LDE0IEBACiAJfQogCiAjaWZkZWYgVVNFX0ZCUjAKLQlhZGFwdGVyLT5SeFJpbmcuUHNyTnVtRW50cmllcyA9IGFkYXB0ZXItPlJ4UmluZy5GYnIwTnVtRW50cmllcyArCi0JICAgIGFkYXB0ZXItPlJ4UmluZy5GYnIxTnVtRW50cmllczsKKwlhZGFwdGVyLT5yeF9yaW5nLlBzck51bUVudHJpZXMgPSBhZGFwdGVyLT5yeF9yaW5nLkZicjBOdW1FbnRyaWVzICsKKwkgICAgYWRhcHRlci0+cnhfcmluZy5GYnIxTnVtRW50cmllczsKICNlbHNlCi0JYWRhcHRlci0+UnhSaW5nLlBzck51bUVudHJpZXMgPSBhZGFwdGVyLT5SeFJpbmcuRmJyMU51bUVudHJpZXM7CisJYWRhcHRlci0+cnhfcmluZy5Qc3JOdW1FbnRyaWVzID0gYWRhcHRlci0+cnhfcmluZy5GYnIxTnVtRW50cmllczsKICNlbmRpZgogCiAJLyogQWxsb2NhdGUgYW4gYXJlYSBvZiBtZW1vcnkgZm9yIEZyZWUgQnVmZmVyIFJpbmcgMSAqLwotCWJ1ZnNpemUgPSAoc2l6ZW9mKEZCUl9ERVNDX3QpICogcnhfcmluZy0+RmJyMU51bUVudHJpZXMpICsgMHhmZmY7CisJYnVmc2l6ZSA9IChzaXplb2Yoc3RydWN0IGZicl9kZXNjKSAqIHJ4X3JpbmctPkZicjFOdW1FbnRyaWVzKSArIDB4ZmZmOwogCXJ4X3JpbmctPnBGYnIxUmluZ1ZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKIAkJCQkJCSAgICBidWZzaXplLAogCQkJCQkJICAgICZyeF9yaW5nLT5wRmJyMVJpbmdQYSk7CkBAIC0xOTQsMTIgKzE4OCwxMiBAQAogCQkJCSAgICAgICZyeF9yaW5nLT5GYnIxUmVhbHBhLAogCQkJCSAgICAgICZyeF9yaW5nLT5GYnIxb2Zmc2V0LCAweDBGRkYpOwogCi0JcnhfcmluZy0+cEZicjFSaW5nVmEgPSAodm9pZCAqKSgodWludDhfdCAqKSByeF9yaW5nLT5wRmJyMVJpbmdWYSArCisJcnhfcmluZy0+cEZicjFSaW5nVmEgPSAodm9pZCAqKSgodTggKikgcnhfcmluZy0+cEZicjFSaW5nVmEgKwogCQkJCQlyeF9yaW5nLT5GYnIxb2Zmc2V0KTsKIAogI2lmZGVmIFVTRV9GQlIwCiAJLyogQWxsb2NhdGUgYW4gYXJlYSBvZiBtZW1vcnkgZm9yIEZyZWUgQnVmZmVyIFJpbmcgMCAqLwotCWJ1ZnNpemUgPSAoc2l6ZW9mKEZCUl9ERVNDX3QpICogcnhfcmluZy0+RmJyME51bUVudHJpZXMpICsgMHhmZmY7CisJYnVmc2l6ZSA9IChzaXplb2Yoc3RydWN0IGZicl9kZXNjKSAqIHJ4X3JpbmctPkZicjBOdW1FbnRyaWVzKSArIDB4ZmZmOwogCXJ4X3JpbmctPnBGYnIwUmluZ1ZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKIAkJCQkJCSAgICBidWZzaXplLAogCQkJCQkJICAgICZyeF9yaW5nLT5wRmJyMFJpbmdQYSk7CkBAIC0yMjMsNyArMjE3LDcgQEAKIAkJCQkgICAgICAmcnhfcmluZy0+RmJyMFJlYWxwYSwKIAkJCQkgICAgICAmcnhfcmluZy0+RmJyMG9mZnNldCwgMHgwRkZGKTsKIAotCXJ4X3JpbmctPnBGYnIwUmluZ1ZhID0gKHZvaWQgKikoKHVpbnQ4X3QgKikgcnhfcmluZy0+cEZicjBSaW5nVmEgKworCXJ4X3JpbmctPnBGYnIwUmluZ1ZhID0gKHZvaWQgKikoKHU4ICopIHJ4X3JpbmctPnBGYnIwUmluZ1ZhICsKIAkJCQkJcnhfcmluZy0+RmJyMG9mZnNldCk7CiAjZW5kaWYKIApAQCAtMjcwLDIzICsyNjQsMjMgQEAKIAkJCS8qIFNhdmUgdGhlIFZpcnR1YWwgYWRkcmVzcyBvZiB0aGlzIGluZGV4IGZvciBxdWljawogCQkJICogYWNjZXNzIGxhdGVyCiAJCQkgKi8KLQkJCXJ4X3JpbmctPkZiclsxXS0+VmFbaW5kZXhdID0KLQkJCSAgICAodWludDhfdCAqKSByeF9yaW5nLT5GYnIxTWVtVmFbaV0gKworCQkJcnhfcmluZy0+ZmJyWzFdLT52aXJ0W2luZGV4XSA9CisJCQkgICAgKHU4ICopIHJ4X3JpbmctPkZicjFNZW1WYVtpXSArCiAJCQkgICAgKGogKiByeF9yaW5nLT5GYnIxQnVmZmVyU2l6ZSkgKyBGYnIxT2Zmc2V0OwogCiAJCQkvKiBub3cgc3RvcmUgdGhlIHBoeXNpY2FsIGFkZHJlc3MgaW4gdGhlIGRlc2NyaXB0b3IKIAkJCSAqIHNvIHRoZSBkZXZpY2UgY2FuIGFjY2VzcyBpdAogCQkJICovCi0JCQlyeF9yaW5nLT5GYnJbMV0tPlBBSGlnaFtpbmRleF0gPQorCQkJcnhfcmluZy0+ZmJyWzFdLT5idXNfaGlnaFtpbmRleF0gPQogCQkJICAgICh1MzIpIChGYnIxVGVtcFBhID4+IDMyKTsKLQkJCXJ4X3JpbmctPkZiclsxXS0+UEFMb3dbaW5kZXhdID0gKHUzMikgRmJyMVRlbXBQYTsKKwkJCXJ4X3JpbmctPmZiclsxXS0+YnVzX2xvd1tpbmRleF0gPSAodTMyKSBGYnIxVGVtcFBhOwogCiAJCQlGYnIxVGVtcFBhICs9IHJ4X3JpbmctPkZicjFCdWZmZXJTaXplOwogCi0JCQlyeF9yaW5nLT5GYnJbMV0tPkJ1ZmZlcjFbaW5kZXhdID0KLQkJCSAgICByeF9yaW5nLT5GYnJbMV0tPlZhW2luZGV4XTsKLQkJCXJ4X3JpbmctPkZiclsxXS0+QnVmZmVyMltpbmRleF0gPQotCQkJICAgIHJ4X3JpbmctPkZiclsxXS0+VmFbaW5kZXhdIC0gNDsKKwkJCXJ4X3JpbmctPmZiclsxXS0+YnVmZmVyMVtpbmRleF0gPQorCQkJICAgIHJ4X3JpbmctPmZiclsxXS0+dmlydFtpbmRleF07CisJCQlyeF9yaW5nLT5mYnJbMV0tPmJ1ZmZlcjJbaW5kZXhdID0KKwkJCSAgICByeF9yaW5nLT5mYnJbMV0tPnZpcnRbaW5kZXhdIC0gNDsKIAkJfQogCX0KIApAQCAtMzE5LDI3ICszMTMsMjcgQEAKIAkJZm9yIChqID0gMDsgaiA8IEZCUl9DSFVOS1M7IGorKykgewogCQkJdTMyIGluZGV4ID0gKGkgKiBGQlJfQ0hVTktTKSArIGo7CiAKLQkJCXJ4X3JpbmctPkZiclswXS0+VmFbaW5kZXhdID0KLQkJCSAgICAodWludDhfdCAqKSByeF9yaW5nLT5GYnIwTWVtVmFbaV0gKworCQkJcnhfcmluZy0+ZmJyWzBdLT52aXJ0W2luZGV4XSA9CisJCQkgICAgKHU4ICopIHJ4X3JpbmctPkZicjBNZW1WYVtpXSArCiAJCQkgICAgKGogKiByeF9yaW5nLT5GYnIwQnVmZmVyU2l6ZSkgKyBGYnIwT2Zmc2V0OwogCi0JCQlyeF9yaW5nLT5GYnJbMF0tPlBBSGlnaFtpbmRleF0gPQorCQkJcnhfcmluZy0+ZmJyWzBdLT5idXNfaGlnaFtpbmRleF0gPQogCQkJICAgICh1MzIpIChGYnIwVGVtcFBhID4+IDMyKTsKLQkJCXJ4X3JpbmctPkZiclswXS0+UEFMb3dbaW5kZXhdID0gKHUzMikgRmJyMFRlbXBQYTsKKwkJCXJ4X3JpbmctPmZiclswXS0+YnVzX2xvd1tpbmRleF0gPSAodTMyKSBGYnIwVGVtcFBhOwogCiAJCQlGYnIwVGVtcFBhICs9IHJ4X3JpbmctPkZicjBCdWZmZXJTaXplOwogCi0JCQlyeF9yaW5nLT5GYnJbMF0tPkJ1ZmZlcjFbaW5kZXhdID0KLQkJCSAgICByeF9yaW5nLT5GYnJbMF0tPlZhW2luZGV4XTsKLQkJCXJ4X3JpbmctPkZiclswXS0+QnVmZmVyMltpbmRleF0gPQotCQkJICAgIHJ4X3JpbmctPkZiclswXS0+VmFbaW5kZXhdIC0gNDsKKwkJCXJ4X3JpbmctPmZiclswXS0+YnVmZmVyMVtpbmRleF0gPQorCQkJICAgIHJ4X3JpbmctPmZiclswXS0+dmlydFtpbmRleF07CisJCQlyeF9yaW5nLT5mYnJbMF0tPmJ1ZmZlcjJbaW5kZXhdID0KKwkJCSAgICByeF9yaW5nLT5mYnJbMF0tPnZpcnRbaW5kZXhdIC0gNDsKIAkJfQogCX0KICNlbmRpZgogCiAJLyogQWxsb2NhdGUgYW4gYXJlYSBvZiBtZW1vcnkgZm9yIEZJRk8gb2YgUGFja2V0IFN0YXR1cyByaW5nIGVudHJpZXMgKi8KIAlwa3RTdGF0UmluZ1NpemUgPQotCSAgICBzaXplb2YoUEtUX1NUQVRfREVTQ190KSAqIGFkYXB0ZXItPlJ4UmluZy5Qc3JOdW1FbnRyaWVzOworCSAgICBzaXplb2Yoc3RydWN0IHBrdF9zdGF0X2Rlc2MpICogYWRhcHRlci0+cnhfcmluZy5Qc3JOdW1FbnRyaWVzOwogCiAJcnhfcmluZy0+cFBTUmluZ1ZhID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKIAkJCQkJCSAgcGt0U3RhdFJpbmdTaXplLApAQCAtMzYwLDE2ICszNTQsMTYgQEAKIAkgKi8KIAogCS8qIEFsbG9jYXRlIGFuIGFyZWEgb2YgbWVtb3J5IGZvciB3cml0ZWJhY2sgb2Ygc3RhdHVzIGluZm9ybWF0aW9uICovCi0JcnhfcmluZy0+cFJ4U3RhdHVzVmEgPSBwY2lfYWxsb2NfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAotCQkJCQkJICAgIHNpemVvZihSWF9TVEFUVVNfQkxPQ0tfdCksCi0JCQkJCQkgICAgJnJ4X3JpbmctPnBSeFN0YXR1c1BhKTsKLQlpZiAoIXJ4X3JpbmctPnBSeFN0YXR1c1ZhKSB7CisJcnhfcmluZy0+cnhfc3RhdHVzX2Jsb2NrID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKKwkJCQkJICAgIHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzX2Jsb2NrKSwKKwkJCQkJICAgICZyeF9yaW5nLT5yeF9zdGF0dXNfYnVzKTsKKwlpZiAoIXJ4X3JpbmctPnJ4X3N0YXR1c19ibG9jaykgewogCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCiAJCQkgICJDYW5ub3QgYWxsb2MgbWVtb3J5IGZvciBTdGF0dXMgQmxvY2tcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJcnhfcmluZy0+TnVtUmZkID0gTklDX0RFRkFVTFRfTlVNX1JGRDsKLQlwcmludGsoIlBSUyAlbHhcbiIsICh1bnNpZ25lZCBsb25nKXJ4X3JpbmctPnBSeFN0YXR1c1BhKTsKKwlwcmludGsoIlBSUyAlbHhcbiIsICh1bnNpZ25lZCBsb25nKXJ4X3JpbmctPnJ4X3N0YXR1c19idXMpOwogCiAJLyogUmVjdgogCSAqIHBjaV9wb29sX2NyZWF0ZSBpbml0aWFsaXplcyBhIGxvb2thc2lkZSBsaXN0LiBBZnRlciBzdWNjZXNzZnVsCkBAIC00MDMsMTAgKzM5NywxMCBAQAogCXUzMiBidWZzaXplOwogCXUzMiBwa3RTdGF0UmluZ1NpemU7CiAJUE1QX1JGRCByZmQ7Ci0JUlhfUklOR190ICpyeF9yaW5nOworCXN0cnVjdCByeF9yaW5nICpyeF9yaW5nOwogCiAJLyogU2V0dXAgc29tZSBjb252ZW5pZW5jZSBwb2ludGVycyAqLwotCXJ4X3JpbmcgPSAoUlhfUklOR190ICopICZhZGFwdGVyLT5SeFJpbmc7CisJcnhfcmluZyA9ICZhZGFwdGVyLT5yeF9yaW5nOwogCiAJLyogRnJlZSBSRkRzIGFuZCBhc3NvY2lhdGVkIHBhY2tldCBkZXNjcmlwdG9ycyAqLwogCVdBUk5fT04ocnhfcmluZy0+blJlYWR5UmVjdiAhPSByeF9yaW5nLT5OdW1SZmQpOwpAQCAtNDE3LDcgKzQxMSw3IEBACiAKIAkJbGlzdF9kZWwoJnJmZC0+bGlzdF9ub2RlKTsKIAkJcmZkLT5QYWNrZXQgPSBOVUxMOwotCQlrbWVtX2NhY2hlX2ZyZWUoYWRhcHRlci0+UnhSaW5nLlJlY3ZMb29rYXNpZGUsIHJmZCk7CisJCWttZW1fY2FjaGVfZnJlZShhZGFwdGVyLT5yeF9yaW5nLlJlY3ZMb29rYXNpZGUsIHJmZCk7CiAJfQogCiAJLyogRnJlZSBGcmVlIEJ1ZmZlciBSaW5nIDEgKi8KQEAgLTQ0NywxNSArNDQxLDE0IEBACiAJCX0KIAogCQkvKiBOb3cgdGhlIEZJRk8gaXRzZWxmICovCi0JCXJ4X3JpbmctPnBGYnIxUmluZ1ZhID0gKHZvaWQgKikoKHVpbnQ4X3QgKikKKwkJcnhfcmluZy0+cEZicjFSaW5nVmEgPSAodm9pZCAqKSgodTggKikKIAkJCQlyeF9yaW5nLT5wRmJyMVJpbmdWYSAtIHJ4X3JpbmctPkZicjFvZmZzZXQpOwogCi0JCWJ1ZnNpemUgPQotCQkgICAgKHNpemVvZihGQlJfREVTQ190KSAqIHJ4X3JpbmctPkZicjFOdW1FbnRyaWVzKSArIDB4ZmZmOworCQlidWZzaXplID0gKHNpemVvZihzdHJ1Y3QgZmJyX2Rlc2MpICogcnhfcmluZy0+RmJyMU51bUVudHJpZXMpCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIDB4ZmZmOwogCi0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwKLQkJCQkgICAgYnVmc2l6ZSwKLQkJCQkgICAgcnhfcmluZy0+cEZicjFSaW5nVmEsIHJ4X3JpbmctPnBGYnIxUmluZ1BhKTsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LCBidWZzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByeF9yaW5nLT5wRmJyMVJpbmdWYSwgcnhfcmluZy0+cEZicjFSaW5nUGEpOwogCiAJCXJ4X3JpbmctPnBGYnIxUmluZ1ZhID0gTlVMTDsKIAl9CkBAIC00ODEsMTEgKzQ3NCwxMSBAQAogCQl9CiAKIAkJLyogTm93IHRoZSBGSUZPIGl0c2VsZiAqLwotCQlyeF9yaW5nLT5wRmJyMFJpbmdWYSA9ICh2b2lkICopKCh1aW50OF90ICopCisJCXJ4X3JpbmctPnBGYnIwUmluZ1ZhID0gKHZvaWQgKikoKHU4ICopCiAJCQkJcnhfcmluZy0+cEZicjBSaW5nVmEgLSByeF9yaW5nLT5GYnIwb2Zmc2V0KTsKIAotCQlidWZzaXplID0KLQkJICAgIChzaXplb2YoRkJSX0RFU0NfdCkgKiByeF9yaW5nLT5GYnIwTnVtRW50cmllcykgKyAweGZmZjsKKwkJYnVmc2l6ZSA9IChzaXplb2Yoc3RydWN0IGZicl9kZXNjKSAqIHJ4X3JpbmctPkZicjBOdW1FbnRyaWVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMHhmZmY7CiAKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAogCQkJCSAgICBidWZzaXplLApAQCAtNDk4LDcgKzQ5MSw3IEBACiAJLyogRnJlZSBQYWNrZXQgU3RhdHVzIFJpbmcgKi8KIAlpZiAocnhfcmluZy0+cFBTUmluZ1ZhKSB7CiAJCXBrdFN0YXRSaW5nU2l6ZSA9Ci0JCSAgICBzaXplb2YoUEtUX1NUQVRfREVTQ190KSAqIGFkYXB0ZXItPlJ4UmluZy5Qc3JOdW1FbnRyaWVzOworCQkgICAgc2l6ZW9mKHN0cnVjdCBwa3Rfc3RhdF9kZXNjKSAqIGFkYXB0ZXItPnJ4X3JpbmcuUHNyTnVtRW50cmllczsKIAogCQlwY2lfZnJlZV9jb25zaXN0ZW50KGFkYXB0ZXItPnBkZXYsIHBrdFN0YXRSaW5nU2l6ZSwKIAkJCQkgICAgcnhfcmluZy0+cFBTUmluZ1ZhLCByeF9yaW5nLT5wUFNSaW5nUGEpOwpAQCAtNTA3LDEyICs1MDAsMTEgQEAKIAl9CiAKIAkvKiBGcmVlIGFyZWEgb2YgbWVtb3J5IGZvciB0aGUgd3JpdGViYWNrIG9mIHN0YXR1cyBpbmZvcm1hdGlvbiAqLwotCWlmIChyeF9yaW5nLT5wUnhTdGF0dXNWYSkgeworCWlmIChyeF9yaW5nLT5yeF9zdGF0dXNfYmxvY2spIHsKIAkJcGNpX2ZyZWVfY29uc2lzdGVudChhZGFwdGVyLT5wZGV2LAotCQkJCXNpemVvZihSWF9TVEFUVVNfQkxPQ0tfdCksCi0JCQkJcnhfcmluZy0+cFJ4U3RhdHVzVmEsIHJ4X3JpbmctPnBSeFN0YXR1c1BhKTsKLQotCQlyeF9yaW5nLT5wUnhTdGF0dXNWYSA9IE5VTEw7CisJCQlzaXplb2Yoc3RydWN0IHJ4X3N0YXR1c19ibG9jayksCisJCQlyeF9yaW5nLT5yeF9zdGF0dXNfYmxvY2ssIHJ4X3JpbmctPnJ4X3N0YXR1c19idXMpOworICAgICAgICAJcnhfcmluZy0+cnhfc3RhdHVzX2Jsb2NrID0gTlVMTDsKIAl9CiAKIAkvKiBGcmVlIHJlY2VpdmUgYnVmZmVyIHBvb2wgKi8KQEAgLTUyNywxMCArNTE5LDEwIEBACiAKIAkvKiBGcmVlIHRoZSBGQlIgTG9va3VwIFRhYmxlICovCiAjaWZkZWYgVVNFX0ZCUjAKLQlrZnJlZShyeF9yaW5nLT5GYnJbMF0pOworCWtmcmVlKHJ4X3JpbmctPmZiclswXSk7CiAjZW5kaWYKIAotCWtmcmVlKHJ4X3JpbmctPkZiclsxXSk7CisJa2ZyZWUocnhfcmluZy0+ZmJyWzFdKTsKIAogCS8qIFJlc2V0IENvdW50ZXJzICovCiAJcnhfcmluZy0+blJlYWR5UmVjdiA9IDA7CkBAIC01NDgsMTAgKzU0MCwxMCBAQAogCVBNUF9SRkQgcmZkID0gTlVMTDsKIAl1MzIgcmZkY3Q7CiAJdTMyIG51bXJmZCA9IDA7Ci0JUlhfUklOR190ICpyeF9yaW5nID0gTlVMTDsKKwlzdHJ1Y3QgcnhfcmluZyAqcnhfcmluZzsKIAogCS8qIFNldHVwIHNvbWUgY29udmVuaWVuY2UgcG9pbnRlcnMgKi8KLQlyeF9yaW5nID0gKFJYX1JJTkdfdCAqKSAmYWRhcHRlci0+UnhSaW5nOworCXJ4X3JpbmcgPSAmYWRhcHRlci0+cnhfcmluZzsKIAogCS8qIFNldHVwIGVhY2ggUkZEICovCiAJZm9yIChyZmRjdCA9IDA7IHJmZGN0IDwgcnhfcmluZy0+TnVtUmZkOyByZmRjdCsrKSB7CkBAIC01OTQsOSArNTg2LDkgQEAKICAqLwogdm9pZCBDb25maWdSeERtYVJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICpldGRldikKIHsKLQlzdHJ1Y3QgX1JYRE1BX3QgX19pb21lbSAqcnhfZG1hID0gJmV0ZGV2LT5yZWdzLT5yeGRtYTsKLQlzdHJ1Y3QgX3J4X3JpbmdfdCAqcnhfbG9jYWwgPSAmZXRkZXYtPlJ4UmluZzsKLQlQRkJSX0RFU0NfdCBmYnJfZW50cnk7CisJc3RydWN0IHJ4ZG1hX3JlZ3MgX19pb21lbSAqcnhfZG1hID0gJmV0ZGV2LT5yZWdzLT5yeGRtYTsKKwlzdHJ1Y3QgcnhfcmluZyAqcnhfbG9jYWwgPSAmZXRkZXYtPnJ4X3Jpbmc7CisJc3RydWN0IGZicl9kZXNjICpmYnJfZW50cnk7CiAJdTMyIGVudHJ5OwogCXUzMiBwc3JfbnVtX2RlczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjExLDExICs2MDMsMTEgQEAKIAkgKiBhcmUgZXZlciByZXR1cm5lZCwgbWFrZSBzdXJlIHRoZSBoaWdoIHBhcnQgaXMgcmV0cmlldmVkIGhlcmUKIAkgKiBiZWZvcmUgc3RvcmluZyB0aGUgYWRqdXN0ZWQgYWRkcmVzcy4KIAkgKi8KLQl3cml0ZWwoKHUzMikgKCh1NjQpcnhfbG9jYWwtPnBSeFN0YXR1c1BhID4+IDMyKSwKKwl3cml0ZWwoKHUzMikgKCh1NjQpcnhfbG9jYWwtPnJ4X3N0YXR1c19idXMgPj4gMzIpLAogCSAgICAgICAmcnhfZG1hLT5kbWFfd2JfYmFzZV9oaSk7Ci0Jd3JpdGVsKCh1MzIpIHJ4X2xvY2FsLT5wUnhTdGF0dXNQYSwgJnJ4X2RtYS0+ZG1hX3diX2Jhc2VfbG8pOworCXdyaXRlbCgodTMyKSByeF9sb2NhbC0+cnhfc3RhdHVzX2J1cywgJnJ4X2RtYS0+ZG1hX3diX2Jhc2VfbG8pOwogCi0JbWVtc2V0KHJ4X2xvY2FsLT5wUnhTdGF0dXNWYSwgMCwgc2l6ZW9mKFJYX1NUQVRVU19CTE9DS190KSk7CisJbWVtc2V0KHJ4X2xvY2FsLT5yeF9zdGF0dXNfYmxvY2ssIDAsIHNpemVvZihzdHJ1Y3Qgcnhfc3RhdHVzX2Jsb2NrKSk7CiAKIAkvKiBTZXQgdGhlIGFkZHJlc3MgYW5kIHBhcmFtZXRlcnMgb2YgdGhlIHBhY2tldCBzdGF0dXMgcmluZyBpbnRvIHRoZQogCSAqIDEzMTAncyByZWdpc3RlcnMKQEAgLTYzNiwxMSArNjI4LDExIEBACiAJcnhfbG9jYWwtPmxvY2FsX3Bzcl9mdWxsID0gMDsKIAogCS8qIE5vdydzIHRoZSBiZXN0IHRpbWUgdG8gaW5pdGlhbGl6ZSBGQlIxIGNvbnRlbnRzICovCi0JZmJyX2VudHJ5ID0gKFBGQlJfREVTQ190KSByeF9sb2NhbC0+cEZicjFSaW5nVmE7CisJZmJyX2VudHJ5ID0gKHN0cnVjdCBmYnJfZGVzYyAqKSByeF9sb2NhbC0+cEZicjFSaW5nVmE7CiAJZm9yIChlbnRyeSA9IDA7IGVudHJ5IDwgcnhfbG9jYWwtPkZicjFOdW1FbnRyaWVzOyBlbnRyeSsrKSB7Ci0JCWZicl9lbnRyeS0+YWRkcl9oaSA9IHJ4X2xvY2FsLT5GYnJbMV0tPlBBSGlnaFtlbnRyeV07Ci0JCWZicl9lbnRyeS0+YWRkcl9sbyA9IHJ4X2xvY2FsLT5GYnJbMV0tPlBBTG93W2VudHJ5XTsKLQkJZmJyX2VudHJ5LT53b3JkMi5iaXRzLmJpID0gZW50cnk7CisJCWZicl9lbnRyeS0+YWRkcl9oaSA9IHJ4X2xvY2FsLT5mYnJbMV0tPmJ1c19oaWdoW2VudHJ5XTsKKwkJZmJyX2VudHJ5LT5hZGRyX2xvID0gcnhfbG9jYWwtPmZiclsxXS0+YnVzX2xvd1tlbnRyeV07CisJCWZicl9lbnRyeS0+d29yZDIgPSBlbnRyeTsKIAkJZmJyX2VudHJ5Kys7CiAJfQogCkBAIC02NjEsMTEgKzY1MywxMSBAQAogCiAjaWZkZWYgVVNFX0ZCUjAKIAkvKiBOb3cncyB0aGUgYmVzdCB0aW1lIHRvIGluaXRpYWxpemUgRkJSMCBjb250ZW50cyAqLwotCWZicl9lbnRyeSA9IChQRkJSX0RFU0NfdCkgcnhfbG9jYWwtPnBGYnIwUmluZ1ZhOworCWZicl9lbnRyeSA9IChzdHJ1Y3QgZmJyX2Rlc2MgKikgcnhfbG9jYWwtPnBGYnIwUmluZ1ZhOwogCWZvciAoZW50cnkgPSAwOyBlbnRyeSA8IHJ4X2xvY2FsLT5GYnIwTnVtRW50cmllczsgZW50cnkrKykgewotCQlmYnJfZW50cnktPmFkZHJfaGkgPSByeF9sb2NhbC0+RmJyWzBdLT5QQUhpZ2hbZW50cnldOwotCQlmYnJfZW50cnktPmFkZHJfbG8gPSByeF9sb2NhbC0+RmJyWzBdLT5QQUxvd1tlbnRyeV07Ci0JCWZicl9lbnRyeS0+d29yZDIuYml0cy5iaSA9IGVudHJ5OworCQlmYnJfZW50cnktPmFkZHJfaGkgPSByeF9sb2NhbC0+ZmJyWzBdLT5idXNfaGlnaFtlbnRyeV07CisJCWZicl9lbnRyeS0+YWRkcl9sbyA9IHJ4X2xvY2FsLT5mYnJbMF0tPmJ1c19sb3dbZW50cnldOworCQlmYnJfZW50cnktPndvcmQyID0gZW50cnk7CiAJCWZicl9lbnRyeSsrOwogCX0KIApAQCAtNzIxLDE4ICs3MTMsMTcgQEAKICAqLwogdm9pZCBldDEzMXhfcnhfZG1hX2Rpc2FibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpldGRldikKIHsKLQlSWERNQV9DU1JfdCBjc3I7Ci0KKyAgICAgICAgdTMyIGNzcjsKIAkvKiBTZXR1cCB0aGUgcmVjZWl2ZSBkbWEgY29uZmlndXJhdGlvbiByZWdpc3RlciAqLwotCXdyaXRlbCgweDAwMDAyMDAxLCAmZXRkZXYtPnJlZ3MtPnJ4ZG1hLmNzci52YWx1ZSk7Ci0JY3NyLnZhbHVlID0gcmVhZGwoJmV0ZGV2LT5yZWdzLT5yeGRtYS5jc3IudmFsdWUpOwotCWlmIChjc3IuYml0cy5oYWx0X3N0YXR1cyAhPSAxKSB7CisJd3JpdGVsKDB4MDAwMDIwMDEsICZldGRldi0+cmVncy0+cnhkbWEuY3NyKTsKKwljc3IgPSByZWFkbCgmZXRkZXYtPnJlZ3MtPnJ4ZG1hLmNzcik7CisJaWYgKChjc3IgJiAweDAwMDIwMDAwKSAhPSAxKSB7CS8qIENoZWNrIGhhbHQgc3RhdHVzIChiaXQgMTcpICovCiAJCXVkZWxheSg1KTsKLQkJY3NyLnZhbHVlID0gcmVhZGwoJmV0ZGV2LT5yZWdzLT5yeGRtYS5jc3IudmFsdWUpOwotCQlpZiAoY3NyLmJpdHMuaGFsdF9zdGF0dXMgIT0gMSkKKwkJY3NyID0gcmVhZGwoJmV0ZGV2LT5yZWdzLT5yeGRtYS5jc3IpOworCQlpZiAoKGNzciAmIDB4MDAwMjAwMDApICE9IDEpCiAJCQlkZXZfZXJyKCZldGRldi0+cGRldi0+ZGV2LAotCQkJCSJSWCBEbWEgZmFpbGVkIHRvIGVudGVyIGhhbHQgc3RhdGUuIENTUiAweCUwOHhcbiIsCi0JCQkJY3NyLnZhbHVlKTsKKwkJCSJSWCBEbWEgZmFpbGVkIHRvIGVudGVyIGhhbHQgc3RhdGUuIENTUiAweCUwOHhcbiIsCisJCQkJY3NyKTsKIAl9CiB9CiAKQEAgLTc0MywzNCArNzM0LDMzIEBACiB2b2lkIGV0MTMxeF9yeF9kbWFfZW5hYmxlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqZXRkZXYpCiB7CiAJLyogU2V0dXAgdGhlIHJlY2VpdmUgZG1hIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgZm9yIG5vcm1hbCBvcGVyYXRpb24gKi8KLQlSWERNQV9DU1JfdCBjc3IgPSB7IDAgfTsKKwl1MzIgY3NyID0gIDB4MjAwMDsJLyogRkJSMSBlbmFibGUgKi8KIAotCWNzci5iaXRzLmZicjFfZW5hYmxlID0gMTsKLQlpZiAoZXRkZXYtPlJ4UmluZy5GYnIxQnVmZmVyU2l6ZSA9PSA0MDk2KQotCQljc3IuYml0cy5mYnIxX3NpemUgPSAxOwotCWVsc2UgaWYgKGV0ZGV2LT5SeFJpbmcuRmJyMUJ1ZmZlclNpemUgPT0gODE5MikKLQkJY3NyLmJpdHMuZmJyMV9zaXplID0gMjsKLQllbHNlIGlmIChldGRldi0+UnhSaW5nLkZicjFCdWZmZXJTaXplID09IDE2Mzg0KQotCQljc3IuYml0cy5mYnIxX3NpemUgPSAzOworCWlmIChldGRldi0+cnhfcmluZy5GYnIxQnVmZmVyU2l6ZSA9PSA0MDk2KQorCQljc3IgfD0gMHgwODAwOworCWVsc2UgaWYgKGV0ZGV2LT5yeF9yaW5nLkZicjFCdWZmZXJTaXplID09IDgxOTIpCisJCWNzciB8PSAweDEwMDA7CisJZWxzZSBpZiAoZXRkZXYtPnJ4X3JpbmcuRmJyMUJ1ZmZlclNpemUgPT0gMTYzODQpCisJCWNzciB8PSAweDE4MDA7CiAjaWZkZWYgVVNFX0ZCUjAKLQljc3IuYml0cy5mYnIwX2VuYWJsZSA9IDE7Ci0JaWYgKGV0ZGV2LT5SeFJpbmcuRmJyMEJ1ZmZlclNpemUgPT0gMjU2KQotCQljc3IuYml0cy5mYnIwX3NpemUgPSAxOwotCWVsc2UgaWYgKGV0ZGV2LT5SeFJpbmcuRmJyMEJ1ZmZlclNpemUgPT0gNTEyKQotCQljc3IuYml0cy5mYnIwX3NpemUgPSAyOwotCWVsc2UgaWYgKGV0ZGV2LT5SeFJpbmcuRmJyMEJ1ZmZlclNpemUgPT0gMTAyNCkKLQkJY3NyLmJpdHMuZmJyMF9zaXplID0gMzsKKyAgICAgICAgY3NyIHw9IDB4MDQwMDsJCS8qIEZCUjAgZW5hYmxlICovCisJaWYgKGV0ZGV2LT5yeF9yaW5nLkZicjBCdWZmZXJTaXplID09IDI1NikKKwkgICAgICAgIGNzciB8PSAweDAxMDA7CisJZWxzZSBpZiAoZXRkZXYtPnJ4X3JpbmcuRmJyMEJ1ZmZlclNpemUgPT0gNTEyKQorCQljc3IgfD0gMHgwMjAwOworCWVsc2UgaWYgKGV0ZGV2LT5yeF9yaW5nLkZicjBCdWZmZXJTaXplID09IDEwMjQpCisJCWNzciB8PSAweDAzMDA7CiAjZW5kaWYKLQl3cml0ZWwoY3NyLnZhbHVlLCAmZXRkZXYtPnJlZ3MtPnJ4ZG1hLmNzci52YWx1ZSk7CisJd3JpdGVsKGNzciwgJmV0ZGV2LT5yZWdzLT5yeGRtYS5jc3IpOwogCi0JY3NyLnZhbHVlID0gcmVhZGwoJmV0ZGV2LT5yZWdzLT5yeGRtYS5jc3IudmFsdWUpOwotCWlmIChjc3IuYml0cy5oYWx0X3N0YXR1cyAhPSAwKSB7CisJY3NyID0gcmVhZGwoJmV0ZGV2LT5yZWdzLT5yeGRtYS5jc3IpOworCWlmICgoY3NyICYgMHgwMDAyMDAwMCkgIT0gMCkgewogCQl1ZGVsYXkoNSk7Ci0JCWNzci52YWx1ZSA9IHJlYWRsKCZldGRldi0+cmVncy0+cnhkbWEuY3NyLnZhbHVlKTsKLQkJaWYgKGNzci5iaXRzLmhhbHRfc3RhdHVzICE9IDApIHsKKwkJY3NyID0gcmVhZGwoJmV0ZGV2LT5yZWdzLT5yeGRtYS5jc3IpOworICAgICAgICAJaWYgKChjc3IgJiAweDAwMDIwMDAwKSAhPSAwKSB7CiAJCQlkZXZfZXJyKCZldGRldi0+cGRldi0+ZGV2LAogCQkJICAgICJSWCBEbWEgZmFpbGVkIHRvIGV4aXQgaGFsdCBzdGF0ZS4gIENTUiAweCUwOHhcbiIsCi0JCQkJY3NyLnZhbHVlKTsKKwkJCQljc3IpOwogCQl9CiAJfQogfQpAQCAtNzg4LDQ2ICs3NzgsNDQgQEAKICAqLwogUE1QX1JGRCBuaWNfcnhfcGt0cyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmV0ZGV2KQogewotCXN0cnVjdCBfcnhfcmluZ190ICpyeF9sb2NhbCA9ICZldGRldi0+UnhSaW5nOwotCVBSWF9TVEFUVVNfQkxPQ0tfdCBzdGF0dXM7Ci0JUFBLVF9TVEFUX0RFU0NfdCBwc3I7CisJc3RydWN0IHJ4X3JpbmcgKnJ4X2xvY2FsID0gJmV0ZGV2LT5yeF9yaW5nOworCXN0cnVjdCByeF9zdGF0dXNfYmxvY2sgKnN0YXR1czsKKwlzdHJ1Y3QgcGt0X3N0YXRfZGVzYyAqcHNyOwogCVBNUF9SRkQgcmZkOwogCXUzMiBpOwotCXVpbnQ4X3QgKmJ1ZjsKKwl1OCAqYnVmOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxpc3RfaGVhZCAqZWxlbWVudDsKLQl1aW50OF90IHJpbmRleDsKLQl1aW50MTZfdCBiaW5kZXg7CisJdTggcmluZGV4OworCXUxNiBiaW5kZXg7CiAJdTMyIGxlbjsKLQlQS1RfU1RBVF9ERVNDX1dPUkQwX3QgV29yZDA7CisJdTMyIHdvcmQwOworCXUzMiB3b3JkMTsKIAogCS8qIFJYIFN0YXR1cyBibG9jayBpcyB3cml0dGVuIGJ5IHRoZSBETUEgZW5naW5lIHByaW9yIHRvIGV2ZXJ5CiAJICogaW50ZXJydXB0LiBJdCBjb250YWlucyB0aGUgbmV4dCB0byBiZSB1c2VkIGVudHJ5IGluIHRoZSBQYWNrZXQKIAkgKiBTdGF0dXMgUmluZywgYW5kIGFsc28gdGhlIHR3byBGcmVlIEJ1ZmZlciByaW5ncy4KIAkgKi8KLQlzdGF0dXMgPSAoUFJYX1NUQVRVU19CTE9DS190KSByeF9sb2NhbC0+cFJ4U3RhdHVzVmE7CisJc3RhdHVzID0gcnhfbG9jYWwtPnJ4X3N0YXR1c19ibG9jazsKKwl3b3JkMSA9IHN0YXR1cy0+V29yZDEgPj4gMTY7CS8qIEdldCB0aGUgdXNlZnVsIGJpdHMgKi8KIAotCS8qIEZJWE1FOiB0aWR5IGxhdGVyIHdoZW4gY29udmVyc2lvbnMgY29tcGxldGUgKi8KLQlpZiAoc3RhdHVzLT5Xb3JkMS5iaXRzLlBTUm9mZnNldCA9PQotCQkJKHJ4X2xvY2FsLT5sb2NhbF9wc3JfZnVsbCAmIDB4RkZGKSAmJgotCQkJc3RhdHVzLT5Xb3JkMS5iaXRzLlBTUndyYXAgPT0KLQkJCSgocnhfbG9jYWwtPmxvY2FsX3Bzcl9mdWxsID4+IDEyKSAmIDEpKSB7CisJLyogQ2hlY2sgdGhlIFBTUiBhbmQgd3JhcCBiaXRzIGRvIG5vdCBtYXRjaCAqLworCWlmICgod29yZDEgJiAweDFGRkYpID09IChyeF9sb2NhbC0+bG9jYWxfcHNyX2Z1bGwgJiAweDFGRkYpKQogCQkvKiBMb29rcyBsaWtlIHRoaXMgcmluZyBpcyBub3QgdXBkYXRlZCB5ZXQgKi8KIAkJcmV0dXJuIE5VTEw7Ci0JfQogCiAJLyogVGhlIHBhY2tldCBzdGF0dXMgcmluZyBpbmRpY2F0ZXMgdGhhdCBkYXRhIGlzIGF2YWlsYWJsZS4gKi8KLQlwc3IgPSAoUFBLVF9TVEFUX0RFU0NfdCkgKHJ4X2xvY2FsLT5wUFNSaW5nVmEpICsKKwlwc3IgPSAoc3RydWN0IHBrdF9zdGF0X2Rlc2MgKikgKHJ4X2xvY2FsLT5wUFNSaW5nVmEpICsKIAkJCShyeF9sb2NhbC0+bG9jYWxfcHNyX2Z1bGwgJiAweEZGRik7CiAKIAkvKiBHcmFiIGFueSBpbmZvcm1hdGlvbiB0aGF0IGlzIHJlcXVpcmVkIG9uY2UgdGhlIFBTUiBpcwogCSAqIGFkdmFuY2VkLCBzaW5jZSB3ZSBjYW4gbm8gbG9uZ2VyIHJlbHkgb24gdGhlIG1lbW9yeSBiZWluZwogCSAqIGFjY3VyYXRlCiAJICovCi0JbGVuID0gcHNyLT53b3JkMS5iaXRzLmxlbmd0aDsKLQlyaW5kZXggPSAodWludDhfdCkgcHNyLT53b3JkMS5iaXRzLnJpOwotCWJpbmRleCA9ICh1aW50MTZfdCkgcHNyLT53b3JkMS5iaXRzLmJpOwotCVdvcmQwID0gcHNyLT53b3JkMDsKKwlsZW4gPSBwc3ItPndvcmQxICYgMHhGRkZGOworCXJpbmRleCA9IChwc3ItPndvcmQxID4+IDI2KSAmIDB4MDM7CisJYmluZGV4ID0gKHBzci0+d29yZDEgPj4gMTYpICYgMHgzRkY7CisJd29yZDAgPSBwc3ItPndvcmQwOwogCiAJLyogSW5kaWNhdGUgdGhhdCB3ZSBoYXZlIHVzZWQgdGhpcyBQU1IgZW50cnkuICovCiAJLyogRklYTUUgd3JhcCAxMiAqLwpAQCAtODQyLDkgKzgzMCw4IEBACiAJICAgICAgICZldGRldi0+cmVncy0+cnhkbWEucHNyX2Z1bGxfb2Zmc2V0KTsKIAogI2lmbmRlZiBVU0VfRkJSMAotCWlmIChyaW5kZXggIT0gMSkgeworCWlmIChyaW5kZXggIT0gMSkKIAkJcmV0dXJuIE5VTEw7Ci0JfQogI2VuZGlmCiAKICNpZmRlZiBVU0VfRkJSMApAQCAtODk5LDcgKzg4Niw3IEBACiAKIAlpZiAobGVuKSB7CiAJCWlmIChldGRldi0+UmVwbGljYVBoeUxvb3BiayA9PSAxKSB7Ci0JCQlidWYgPSByeF9sb2NhbC0+RmJyW3JpbmRleF0tPlZhW2JpbmRleF07CisJCQlidWYgPSByeF9sb2NhbC0+ZmJyW3JpbmRleF0tPnZpcnRbYmluZGV4XTsKIAogCQkJaWYgKG1lbWNtcCgmYnVmWzZdLCAmZXRkZXYtPkN1cnJlbnRBZGRyZXNzWzBdLAogCQkJCSAgIEVUSF9BTEVOKSA9PSAwKSB7CkBAIC05MTEsOCArODk4LDggQEAKIAkJfQogCiAJCS8qIERldGVybWluZSBpZiB0aGlzIGlzIGEgbXVsdGljYXN0IHBhY2tldCBjb21pbmcgaW4gKi8KLQkJaWYgKChXb3JkMC52YWx1ZSAmIEFMQ0FURUxfTVVMVElDQVNUX1BLVCkgJiYKLQkJICAgICEoV29yZDAudmFsdWUgJiBBTENBVEVMX0JST0FEQ0FTVF9QS1QpKSB7CisJCWlmICgod29yZDAgJiBBTENBVEVMX01VTFRJQ0FTVF9QS1QpICYmCisJCSAgICAhKHdvcmQwICYgQUxDQVRFTF9CUk9BRENBU1RfUEtUKSkgewogCQkJLyogUHJvbWlzY3VvdXMgbW9kZSBhbmQgTXVsdGljYXN0IG1vZGUgYXJlCiAJCQkgKiBub3QgbXV0dWFsbHkgZXhjbHVzaXZlIGFzIHdhcyBmaXJzdAogCQkJICogdGhvdWdodC4gIEkgZ3Vlc3MgUHJvbWlzY3VvdXMgaXMganVzdApAQCAtOTIzLDggKzkxMCw4IEBACiAJCQlpZiAoKGV0ZGV2LT5QYWNrZXRGaWx0ZXIgJiBFVDEzMVhfUEFDS0VUX1RZUEVfTVVMVElDQVNUKQogCQkJICAgICYmICEoZXRkZXYtPlBhY2tldEZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9QUk9NSVNDVU9VUykKIAkJCSAgICAmJiAhKGV0ZGV2LT5QYWNrZXRGaWx0ZXIgJiBFVDEzMVhfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVCkpIHsKLQkJCQlidWYgPSByeF9sb2NhbC0+RmJyW3JpbmRleF0tPgotCQkJCQkJVmFbYmluZGV4XTsKKwkJCQlidWYgPSByeF9sb2NhbC0+ZmJyW3JpbmRleF0tPgorCQkJCQkJdmlydFtiaW5kZXhdOwogCiAJCQkJLyogTG9vcCB0aHJvdWdoIG91ciBsaXN0IHRvIHNlZSBpZiB0aGUKIAkJCQkgKiBkZXN0aW5hdGlvbiBhZGRyZXNzIG9mIHRoaXMgcGFja2V0CkBAIC05NjMsNyArOTUwLDcgQEAKIAogCQkJaWYgKGxlbiA+IDApCiAJCQkJZXRkZXYtPlN0YXRzLm11bHRpcmN2Kys7Ci0JCX0gZWxzZSBpZiAoV29yZDAudmFsdWUgJiBBTENBVEVMX0JST0FEQ0FTVF9QS1QpCisJCX0gZWxzZSBpZiAod29yZDAgJiBBTENBVEVMX0JST0FEQ0FTVF9QS1QpCiAJCQlldGRldi0+U3RhdHMuYnJkY3N0cmN2Kys7CiAJCWVsc2UKIAkJCS8qIE5vdCBzdXJlIHdoYXQgdGhpcyBjb3VudGVyIG1lYXN1cmVzIGluCkBAIC05OTAsNyArOTc3LDcgQEAKIAkJZXRkZXYtPm5ldF9zdGF0cy5yeF9ieXRlcyArPSByZmQtPlBhY2tldFNpemU7CiAKIAkJbWVtY3B5KHNrYl9wdXQoc2tiLCByZmQtPlBhY2tldFNpemUpLAotCQkgICAgICAgcnhfbG9jYWwtPkZicltyaW5kZXhdLT5WYVtiaW5kZXhdLAorCQkgICAgICAgcnhfbG9jYWwtPmZicltyaW5kZXhdLT52aXJ0W2JpbmRleF0sCiAJCSAgICAgICByZmQtPlBhY2tldFNpemUpOwogCiAJCXNrYi0+ZGV2ID0gZXRkZXYtPm5ldGRldjsKQEAgLTEwMTQsNyArMTAwMSw3IEBACiAgKi8KIHZvaWQgZXQxMzF4X3Jlc2V0X3JlY3Yoc3RydWN0IGV0MTMxeF9hZGFwdGVyICpldGRldikKIHsKLQlXQVJOX09OKGxpc3RfZW1wdHkoJmV0ZGV2LT5SeFJpbmcuUmVjdkxpc3QpKTsKKwlXQVJOX09OKGxpc3RfZW1wdHkoJmV0ZGV2LT5yeF9yaW5nLlJlY3ZMaXN0KSk7CiAKIH0KIApAQCAtMTAzMiw4ICsxMDE5LDggQEAKIAogCS8qIFByb2Nlc3MgdXAgdG8gYXZhaWxhYmxlIFJGRCdzICovCiAJd2hpbGUgKGNvdW50IDwgTlVNX1BBQ0tFVFNfSEFORExFRCkgewotCQlpZiAobGlzdF9lbXB0eSgmZXRkZXYtPlJ4UmluZy5SZWN2TGlzdCkpIHsKLQkJCVdBUk5fT04oZXRkZXYtPlJ4UmluZy5uUmVhZHlSZWN2ICE9IDApOworCQlpZiAobGlzdF9lbXB0eSgmZXRkZXYtPnJ4X3JpbmcuUmVjdkxpc3QpKSB7CisJCQlXQVJOX09OKGV0ZGV2LT5yeF9yaW5nLm5SZWFkeVJlY3YgIT0gMCk7CiAJCQlkb25lID0gZmFsc2U7CiAJCQlicmVhazsKIAkJfQpAQCAtMTA1OCw3ICsxMDQ1LDcgQEAKIAkJZXRkZXYtPlN0YXRzLmlwYWNrZXRzKys7CiAKIAkJLyogU2V0IHRoZSBzdGF0dXMgb24gdGhlIHBhY2tldCwgZWl0aGVyIHJlc291cmNlcyBvciBzdWNjZXNzICovCi0JCWlmIChldGRldi0+UnhSaW5nLm5SZWFkeVJlY3YgPCBSRkRfTE9XX1dBVEVSX01BUkspIHsKKwkJaWYgKGV0ZGV2LT5yeF9yaW5nLm5SZWFkeVJlY3YgPCBSRkRfTE9XX1dBVEVSX01BUkspIHsKIAkJCWRldl93YXJuKCZldGRldi0+cGRldi0+ZGV2LAogCQkJCSAgICAiUkZEJ3MgYXJlIHJ1bm5pbmcgb3V0XG4iKTsKIAkJfQpAQCAtMTA2NiwxMiArMTA1MywxMiBAQAogCX0KIAogCWlmIChjb3VudCA9PSBOVU1fUEFDS0VUU19IQU5ETEVEIHx8ICFkb25lKSB7Ci0JCWV0ZGV2LT5SeFJpbmcuVW5maW5pc2hlZFJlY2VpdmVzID0gdHJ1ZTsKKwkJZXRkZXYtPnJ4X3JpbmcuVW5maW5pc2hlZFJlY2VpdmVzID0gdHJ1ZTsKIAkJd3JpdGVsKFBBUk1fVFhfVElNRV9JTlRfREVGICogTkFOT19JTl9BX01JQ1JPLAogCQkgICAgICAgJmV0ZGV2LT5yZWdzLT5nbG9iYWwud2F0Y2hkb2dfdGltZXIpOwogCX0gZWxzZQogCQkvKiBXYXRjaGRvZyB0aW1lciB3aWxsIGRpc2FibGUgaXRzZWxmIGlmIGFwcHJvcHJpYXRlLiAqLwotCQlldGRldi0+UnhSaW5nLlVuZmluaXNoZWRSZWNlaXZlcyA9IGZhbHNlOworCQlldGRldi0+cnhfcmluZy5VbmZpbmlzaGVkUmVjZWl2ZXMgPSBmYWxzZTsKIH0KIAogc3RhdGljIGlubGluZSB1MzIgYnVtcF9mYnIodTMyICpmYnIsIHUzMiBsaW1pdCkKQEAgLTEwOTksMTAgKzEwODYsMTAgQEAKICAqLwogdm9pZCBuaWNfcmV0dXJuX3JmZChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmV0ZGV2LCBQTVBfUkZEIHJmZCkKIHsKLQlzdHJ1Y3QgX3J4X3JpbmdfdCAqcnhfbG9jYWwgPSAmZXRkZXYtPlJ4UmluZzsKLQlzdHJ1Y3QgX1JYRE1BX3QgX19pb21lbSAqcnhfZG1hID0gJmV0ZGV2LT5yZWdzLT5yeGRtYTsKLQl1aW50MTZfdCBiaSA9IHJmZC0+YnVmZmVyaW5kZXg7Ci0JdWludDhfdCByaSA9IHJmZC0+cmluZ2luZGV4OworCXN0cnVjdCByeF9yaW5nICpyeF9sb2NhbCA9ICZldGRldi0+cnhfcmluZzsKKwlzdHJ1Y3QgcnhkbWFfcmVncyBfX2lvbWVtICpyeF9kbWEgPSAmZXRkZXYtPnJlZ3MtPnJ4ZG1hOworCXUxNiBiaSA9IHJmZC0+YnVmZmVyaW5kZXg7CisJdTggcmkgPSByZmQtPnJpbmdpbmRleDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogV2UgZG9uJ3QgdXNlIGFueSBvZiB0aGUgT09CIGRhdGEgYmVzaWRlcyBzdGF0dXMuIE90aGVyd2lzZSwgd2UKQEAgLTExMTYsMTcgKzExMDMsMTcgQEAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmV0ZGV2LT5GYnJMb2NrLCBmbGFncyk7CiAKIAkJaWYgKHJpID09IDEpIHsKLQkJCVBGQlJfREVTQ190IG5leHQgPQotCQkJICAgIChQRkJSX0RFU0NfdCkgKHJ4X2xvY2FsLT5wRmJyMVJpbmdWYSkgKwotCQkJICAgIElOREVYMTAocnhfbG9jYWwtPmxvY2FsX0ZicjFfZnVsbCk7CisJCQlzdHJ1Y3QgZmJyX2Rlc2MgKm5leHQgPQorCQkJICAgIChzdHJ1Y3QgZmJyX2Rlc2MgKikgKHJ4X2xvY2FsLT5wRmJyMVJpbmdWYSkgKworICAgICAgICAgICAgICAgIAkJICAgICAgICAgICAgSU5ERVgxMChyeF9sb2NhbC0+bG9jYWxfRmJyMV9mdWxsKTsKIAogCQkJLyogSGFuZGxlIHRoZSBGcmVlIEJ1ZmZlciBSaW5nIGFkdmFuY2VtZW50IGhlcmUuIFdyaXRlCiAJCQkgKiB0aGUgUEEgLyBCdWZmZXIgSW5kZXggZm9yIHRoZSByZXR1cm5lZCBidWZmZXIgaW50bwogCQkJICogdGhlIG9sZGVzdCAobmV4dCB0byBiZSBmcmVlZClGQlIgZW50cnkKIAkJCSAqLwotCQkJbmV4dC0+YWRkcl9oaSA9IHJ4X2xvY2FsLT5GYnJbMV0tPlBBSGlnaFtiaV07Ci0JCQluZXh0LT5hZGRyX2xvID0gcnhfbG9jYWwtPkZiclsxXS0+UEFMb3dbYmldOwotCQkJbmV4dC0+d29yZDIudmFsdWUgPSBiaTsKKwkJCW5leHQtPmFkZHJfaGkgPSByeF9sb2NhbC0+ZmJyWzFdLT5idXNfaGlnaFtiaV07CisJCQluZXh0LT5hZGRyX2xvID0gcnhfbG9jYWwtPmZiclsxXS0+YnVzX2xvd1tiaV07CisJCQluZXh0LT53b3JkMiA9IGJpOwogCiAJCQl3cml0ZWwoYnVtcF9mYnIoJnJ4X2xvY2FsLT5sb2NhbF9GYnIxX2Z1bGwsCiAJCQkJcnhfbG9jYWwtPkZicjFOdW1FbnRyaWVzIC0gMSksCkBAIC0xMTM0LDE3ICsxMTIxLDE3IEBACiAJCX0KICNpZmRlZiBVU0VfRkJSMAogCQllbHNlIHsKLQkJCVBGQlJfREVTQ190IG5leHQgPQotCQkJICAgIChQRkJSX0RFU0NfdCkgcnhfbG9jYWwtPnBGYnIwUmluZ1ZhICsKLQkJCSAgICBJTkRFWDEwKHJ4X2xvY2FsLT5sb2NhbF9GYnIwX2Z1bGwpOworCQkJc3RydWN0IGZicl9kZXNjICpuZXh0ID0gKHN0cnVjdCBmYnJfZGVzYyAqKQorCQkJCXJ4X2xvY2FsLT5wRmJyMFJpbmdWYSArCisJCQkJCUlOREVYMTAocnhfbG9jYWwtPmxvY2FsX0ZicjBfZnVsbCk7CiAKIAkJCS8qIEhhbmRsZSB0aGUgRnJlZSBCdWZmZXIgUmluZyBhZHZhbmNlbWVudCBoZXJlLiBXcml0ZQogCQkJICogdGhlIFBBIC8gQnVmZmVyIEluZGV4IGZvciB0aGUgcmV0dXJuZWQgYnVmZmVyIGludG8KIAkJCSAqIHRoZSBvbGRlc3QgKG5leHQgdG8gYmUgZnJlZWQpIEZCUiBlbnRyeQogCQkJICovCi0JCQluZXh0LT5hZGRyX2hpID0gcnhfbG9jYWwtPkZiclswXS0+UEFIaWdoW2JpXTsKLQkJCW5leHQtPmFkZHJfbG8gPSByeF9sb2NhbC0+RmJyWzBdLT5QQUxvd1tiaV07Ci0JCQluZXh0LT53b3JkMi52YWx1ZSA9IGJpOworCQkJbmV4dC0+YWRkcl9oaSA9IHJ4X2xvY2FsLT5mYnJbMF0tPmJ1c19oaWdoW2JpXTsKKwkJCW5leHQtPmFkZHJfbG8gPSByeF9sb2NhbC0+ZmJyWzBdLT5idXNfbG93W2JpXTsKKwkJCW5leHQtPndvcmQyID0gYmk7CiAKIAkJCXdyaXRlbChidW1wX2ZicigmcnhfbG9jYWwtPmxvY2FsX0ZicjBfZnVsbCwKIAkJCQkJcnhfbG9jYWwtPkZicjBOdW1FbnRyaWVzIC0gMSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfcnguaAppbmRleCA2OTUxNDU5Li5jYTg0YTkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF9yeC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3J4LmgKQEAgLTkxLDEyMCArOTEsNjAgQEAKICNkZWZpbmUgQUxDQVRFTF9CUk9BRENBU1RfUEtUCTB4MDIwMDAwMDAKIAogLyogdHlwZWRlZnMgZm9yIEZyZWUgQnVmZmVyIERlc2NyaXB0b3JzICovCi10eXBlZGVmIHVuaW9uIF9GQlJfV09SRDJfdCB7Ci0JdTMyIHZhbHVlOwotCXN0cnVjdCB7Ci0jaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAotCQl1MzIgcmVzZXJ2ZWQ6MjI7CS8qIGJpdHMgMTAtMzEgKi8KLQkJdTMyIGJpOjEwOwkJLyogYml0cyAwLTkoQnVmZmVyIEluZGV4KSAqLwotI2Vsc2UKLQkJdTMyIGJpOjEwOwkJLyogYml0cyAwLTkoQnVmZmVyIEluZGV4KSAqLwotCQl1MzIgcmVzZXJ2ZWQ6MjI7CS8qIGJpdCAxMC0zMSAqLwotI2VuZGlmCi0JfSBiaXRzOwotfSBGQlJfV09SRDJfdCwgKlBGQlJfV09SRDJfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgX0ZCUl9ERVNDX3Qgeworc3RydWN0IGZicl9kZXNjCit7CiAJdTMyIGFkZHJfbG87CiAJdTMyIGFkZHJfaGk7Ci0JRkJSX1dPUkQyX3Qgd29yZDI7Ci19IEZCUl9ERVNDX3QsICpQRkJSX0RFU0NfdDsKKwl1MzIgd29yZDI7CQkvKiBCaXRzIDEwLTMxIHJlc2VydmVkLCAwLTkgZGVzY3JpcHRvciAqLworfTsKIAotLyogVHlwZWRlZnMgZm9yIFBhY2tldCBTdGF0dXMgUmluZyBEZXNjcmlwdG9ycyAqLwotdHlwZWRlZiB1bmlvbiBfUEtUX1NUQVRfREVTQ19XT1JEMF90IHsKLQl1MzIgdmFsdWU7Ci0Jc3RydWN0IHsKLSNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCi0JCS8qIHRvcCAxNiBiaXRzIGFyZSBmcm9tIHRoZSBBbGNhdGVsIFN0YXR1cyBXb3JkIGFzIGVudW1lcmF0ZWQgaW4gKi8KLQkJLyogUEUtTUNYTUFDIERhdGEgU2hlZXQgSVBEIERTNTQgMDIxMC0xIChhbHNvIElQRC1EUzgwIDAyMDUtMikgKi8KLSNpZiAwCi0JCXUzMiBhc3dfdHJ1bmM6MTsJCS8qIGJpdCAzMShSeCBmcmFtZSB0cnVuY2F0ZWQpICovCi0jZW5kaWYKLQkJdTMyIGFzd19sb25nX2V2dDoxOwkvKiBiaXQgMzEoUnggbG9uZyBldmVudCkgKi8KLQkJdTMyIGFzd19WTEFOX3RhZzoxOwkvKiBiaXQgMzAoVkxBTiB0YWcgZGV0ZWN0ZWQpICovCi0JCXUzMiBhc3dfdW5zdXBwb3J0ZWRfb3A6MTsJLyogYml0IDI5KHVuc3VwcG9ydGVkIE9QIGNvZGUpICovCi0JCXUzMiBhc3dfcGF1c2VfZnJhbWU6MTsJLyogYml0IDI4KGlzIGEgcGF1c2UgZnJhbWUpICovCi0JCXUzMiBhc3dfY29udHJvbF9mcmFtZToxOwkvKiBiaXQgMjcoaXMgYSBjb250cm9sIGZyYW1lKSAqLwotCQl1MzIgYXN3X2RyaWJibGVfbmliYmxlOjE7CS8qIGJpdCAyNihzcHVyaW91cyBiaXRzIGFmdGVyIEVPUCkgKi8KLQkJdTMyIGFzd19icm9hZGNhc3Q6MTsJLyogYml0IDI1KGhhcyBhIGJyb2FkY2FzdCBhZGRyZXNzKSAqLwotCQl1MzIgYXN3X211bHRpY2FzdDoxOwkvKiBiaXQgMjQoaGFzIGEgbXVsdGljYXN0IGFkZHJlc3MpICovCi0JCXUzMiBhc3dfT0s6MTsJCS8qIGJpdCAyMyh2YWxpZCBDUkMgKyBubyBjb2RlIGVycm9yKSAqLwotCQl1MzIgYXN3X3Rvb19sb25nOjE7CS8qIGJpdCAyMihmcmFtZSBsZW5ndGggPiAxNTE4IGJ5dGVzKSAqLwotCQl1MzIgYXN3X2xlbl9jaGtfZXJyOjE7CS8qIGJpdCAyMShmcmFtZSBsZW5ndGggZmllbGQgaW5jb3JyZWN0KSAqLwotCQl1MzIgYXN3X0NSQ19lcnI6MTsJCS8qIGJpdCAyMChDUkMgZXJyb3IpICovCi0JCXUzMiBhc3dfY29kZV9lcnI6MTsJLyogYml0IDE5KG9uZSBvciBtb3JlIG5pYmJsZXMgc2lnbmFsbGVkIGFzIGVycm9ycykgKi8KLQkJdTMyIGFzd19mYWxzZV9jYXJyaWVyX2V2ZW50OjE7CS8qIGJpdCAxOChiYWQgY2FycmllciBzaW5jZSBsYXN0IGdvb2QgcGFja2V0KSAqLwotCQl1MzIgYXN3X1JYX0RWX2V2ZW50OjE7CS8qIGJpdCAxNyhzaG9ydCByZWNlaXZlIGV2ZW50IGRldGVjdGVkKSAqLwotCQl1MzIgYXN3X3ByZXZfcGt0X2Ryb3BwZWQ6MTsvKiBiaXQgMTYoZS5nLiBJRkcgdG9vIHNtYWxsIG9uIHByZXZpb3VzKSAqLwotCQl1MzIgdW51c2VkOjU7CQkvKiBiaXRzIDExLTE1ICovCi0JCXUzMiB2cDoxOwkJCS8qIGJpdCAxMChWTEFOIFBhY2tldCkgKi8KLQkJdTMyIGpwOjE7CQkJLyogYml0IDkoSnVtYm8gUGFja2V0KSAqLwotCQl1MzIgZnQ6MTsJCQkvKiBiaXQgOChGcmFtZSBUcnVuY2F0ZWQpICovCi0JCXUzMiBkcm9wOjE7CQkvKiBiaXQgNyhEcm9wIHBhY2tldCkgKi8KLQkJdTMyIHJ4bWFjX2Vycm9yOjE7CQkvKiBiaXQgNihSWE1BQyBFcnJvciBJbmRpY2F0b3IpICovCi0JCXUzMiB3b2w6MTsJCQkvKiBiaXQgNShXT0wgRXZlbnQpICovCi0JCXUzMiB0Y3BwOjE7CQkvKiBiaXQgNChUQ1AgY2hlY2tzdW0gcGFzcykgKi8KLQkJdTMyIHRjcGE6MTsJCS8qIGJpdCAzKFRDUCBjaGVja3N1bSBhc3Npc3QpICovCi0JCXUzMiBpcHA6MTsJCQkvKiBiaXQgMihJUCBjaGVja3N1bSBwYXNzKSAqLwotCQl1MzIgaXBhOjE7CQkJLyogYml0IDEoSVAgY2hlY2tzdW0gYXNzaXN0KSAqLwotCQl1MzIgaHA6MTsJCQkvKiBiaXQgMChoYXNoIHBhc3MpICovCi0jZWxzZQotCQl1MzIgaHA6MTsJCQkvKiBiaXQgMChoYXNoIHBhc3MpICovCi0JCXUzMiBpcGE6MTsJCQkvKiBiaXQgMShJUCBjaGVja3N1bSBhc3Npc3QpICovCi0JCXUzMiBpcHA6MTsJCQkvKiBiaXQgMihJUCBjaGVja3N1bSBwYXNzKSAqLwotCQl1MzIgdGNwYToxOwkJLyogYml0IDMoVENQIGNoZWNrc3VtIGFzc2lzdCkgKi8KLQkJdTMyIHRjcHA6MTsJCS8qIGJpdCA0KFRDUCBjaGVja3N1bSBwYXNzKSAqLwotCQl1MzIgd29sOjE7CQkJLyogYml0IDUoV09MIEV2ZW50KSAqLwotCQl1MzIgcnhtYWNfZXJyb3I6MTsJCS8qIGJpdCA2KFJYTUFDIEVycm9yIEluZGljYXRvcikgKi8KLQkJdTMyIGRyb3A6MTsJCS8qIGJpdCA3KERyb3AgcGFja2V0KSAqLwotCQl1MzIgZnQ6MTsJCQkvKiBiaXQgOChGcmFtZSBUcnVuY2F0ZWQpICovCi0JCXUzMiBqcDoxOwkJCS8qIGJpdCA5KEp1bWJvIFBhY2tldCkgKi8KLQkJdTMyIHZwOjE7CQkJLyogYml0IDEwKFZMQU4gUGFja2V0KSAqLwotCQl1MzIgdW51c2VkOjU7CQkvKiBiaXRzIDExLTE1ICovCi0JCXUzMiBhc3dfcHJldl9wa3RfZHJvcHBlZDoxOy8qIGJpdCAxNihlLmcuIElGRyB0b28gc21hbGwgb24gcHJldmlvdXMpICovCi0JCXUzMiBhc3dfUlhfRFZfZXZlbnQ6MTsJLyogYml0IDE3KHNob3J0IHJlY2VpdmUgZXZlbnQgZGV0ZWN0ZWQpICovCi0JCXUzMiBhc3dfZmFsc2VfY2Fycmllcl9ldmVudDoxOwkvKiBiaXQgMTgoYmFkIGNhcnJpZXIgc2luY2UgbGFzdCBnb29kIHBhY2tldCkgKi8KLQkJdTMyIGFzd19jb2RlX2VycjoxOwkvKiBiaXQgMTkob25lIG9yIG1vcmUgbmliYmxlcyBzaWduYWxsZWQgYXMgZXJyb3JzKSAqLwotCQl1MzIgYXN3X0NSQ19lcnI6MTsJCS8qIGJpdCAyMChDUkMgZXJyb3IpICovCi0JCXUzMiBhc3dfbGVuX2Noa19lcnI6MTsJLyogYml0IDIxKGZyYW1lIGxlbmd0aCBmaWVsZCBpbmNvcnJlY3QpICovCi0JCXUzMiBhc3dfdG9vX2xvbmc6MTsJLyogYml0IDIyKGZyYW1lIGxlbmd0aCA+IDE1MTggYnl0ZXMpICovCi0JCXUzMiBhc3dfT0s6MTsJCS8qIGJpdCAyMyh2YWxpZCBDUkMgKyBubyBjb2RlIGVycm9yKSAqLwotCQl1MzIgYXN3X211bHRpY2FzdDoxOwkvKiBiaXQgMjQoaGFzIGEgbXVsdGljYXN0IGFkZHJlc3MpICovCi0JCXUzMiBhc3dfYnJvYWRjYXN0OjE7CS8qIGJpdCAyNShoYXMgYSBicm9hZGNhc3QgYWRkcmVzcykgKi8KLQkJdTMyIGFzd19kcmliYmxlX25pYmJsZToxOwkvKiBiaXQgMjYoc3B1cmlvdXMgYml0cyBhZnRlciBFT1ApICovCi0JCXUzMiBhc3dfY29udHJvbF9mcmFtZToxOwkvKiBiaXQgMjcoaXMgYSBjb250cm9sIGZyYW1lKSAqLwotCQl1MzIgYXN3X3BhdXNlX2ZyYW1lOjE7CS8qIGJpdCAyOChpcyBhIHBhdXNlIGZyYW1lKSAqLwotCQl1MzIgYXN3X3Vuc3VwcG9ydGVkX29wOjE7CS8qIGJpdCAyOSh1bnN1cHBvcnRlZCBPUCBjb2RlKSAqLwotCQl1MzIgYXN3X1ZMQU5fdGFnOjE7CS8qIGJpdCAzMChWTEFOIHRhZyBkZXRlY3RlZCkgKi8KLQkJdTMyIGFzd19sb25nX2V2dDoxOwkvKiBiaXQgMzEoUnggbG9uZyBldmVudCkgKi8KLSNpZiAwCi0JCXUzMiBhc3dfdHJ1bmM6MTsJCS8qIGJpdCAzMShSeCBmcmFtZSB0cnVuY2F0ZWQpICovCi0jZW5kaWYKLSNlbmRpZgotCX0gYml0czsKLX0gUEtUX1NUQVRfREVTQ19XT1JEMF90LCAqUFBLVF9TVEFUX1dPUkQwX3Q7CisvKiBQYWNrZXQgU3RhdHVzIFJpbmcgRGVzY3JpcHRvcnMKKyAqCisgKiBXb3JkIDA6CisgKgorICogdG9wIDE2IGJpdHMgYXJlIGZyb20gdGhlIEFsY2F0ZWwgU3RhdHVzIFdvcmQgYXMgZW51bWVyYXRlZCBpbgorICogUEUtTUNYTUFDIERhdGEgU2hlZXQgSVBEIERTNTQgMDIxMC0xIChhbHNvIElQRC1EUzgwIDAyMDUtMikKKyAqCisgKiAwOiBocAkJCWhhc2ggcGFzcworICogMTogaXBhCQkJSVAgY2hlY2tzdW0gYXNzaXN0CisgKiAyOiBpcHAJCQlJUCBjaGVja3N1bSBwYXNzCisgKiAzOiB0Y3BhCQkJVENQIGNoZWNrc3VtIGFzc2lzdAorICogNDogdGNwcAkJCVRDUCBjaGVja3N1bSBwYXNzCisgKiA1OiB3b2wJCQlXT0wgRXZlbnQKKyAqIDY6IHJ4bWFjX2Vycm9yCQlSWE1BQyBFcnJvciBJbmRpY2F0b3IKKyAqIDc6IGRyb3AJCQlEcm9wIHBhY2tldAorICogODogZnQJCQlGcmFtZSBUcnVuY2F0ZWQKKyAqIDk6IGpwCQkJSnVtYm8gUGFja2V0CisgKiAxMDogdnAJCQlWTEFOIFBhY2tldAorICogMTEtMTU6IHVudXNlZAorICogMTY6IGFzd19wcmV2X3BrdF9kcm9wcGVkIAllLmcuIElGRyB0b28gc21hbGwgb24gcHJldmlvdXMKKyAqIDE3OiBhc3dfUlhfRFZfZXZlbnQJCXNob3J0IHJlY2VpdmUgZXZlbnQgZGV0ZWN0ZWQKKyAqIDE4OiBhc3dfZmFsc2VfY2Fycmllcl9ldmVudAliYWQgY2FycmllciBzaW5jZSBsYXN0IGdvb2QgcGFja2V0CisgKiAxOTogYXN3X2NvZGVfZXJyCQlvbmUgb3IgbW9yZSBuaWJibGVzIHNpZ25hbGxlZCBhcyBlcnJvcnMKKyAqIDIwOiBhc3dfQ1JDX2VycgkJQ1JDIGVycm9yCisgKiAyMTogYXN3X2xlbl9jaGtfZXJyCQlmcmFtZSBsZW5ndGggZmllbGQgaW5jb3JyZWN0CisgKiAyMjogYXN3X3Rvb19sb25nCQlmcmFtZSBsZW5ndGggPiAxNTE4IGJ5dGVzCisgKiAyMzogYXN3X09LCQkJdmFsaWQgQ1JDICsgbm8gY29kZSBlcnJvcgorICogMjQ6IGFzd19tdWx0aWNhc3QJCWhhcyBhIG11bHRpY2FzdCBhZGRyZXNzCisgKiAyNTogYXN3X2Jyb2FkY2FzdAkJaGFzIGEgYnJvYWRjYXN0IGFkZHJlc3MKKyAqIDI2OiBhc3dfZHJpYmJsZV9uaWJibGUJc3B1cmlvdXMgYml0cyBhZnRlciBFT1AKKyAqIDI3OiBhc3dfY29udHJvbF9mcmFtZQlpcyBhIGNvbnRyb2wgZnJhbWUKKyAqIDI4OiBhc3dfcGF1c2VfZnJhbWUJCWlzIGEgcGF1c2UgZnJhbWUKKyAqIDI5OiBhc3dfdW5zdXBwb3J0ZWRfb3AJdW5zdXBwb3J0ZWQgT1AgY29kZQorICogMzA6IGFzd19WTEFOX3RhZwkJVkxBTiB0YWcgZGV0ZWN0ZWQKKyAqIDMxOiBhc3dfbG9uZ19ldnQJCVJ4IGxvbmcgZXZlbnQKKyAqCisgKiBXb3JkIDE6CisgKiAwLTE1OiBsZW5ndGgJCQlsZW5ndGggaW4gYnl0ZXMKKyAqIDE2LTI1OiBiaQkJCUJ1ZmZlciBJbmRleAorICogMjYtMjc6IHJpCQkJUmluZyBJbmRleAorICogMjgtMzE6IHJlc2VydmVkCisgKi8KIAotdHlwZWRlZiB1bmlvbiBfUEtUX1NUQVRfREVTQ19XT1JEMV90IHsKLQl1MzIgdmFsdWU7Ci0Jc3RydWN0IHsKLSNpZmRlZiBfQklUX0ZJRUxEU19IVE9MCi0JCXUzMiB1bnVzZWQ6NDsJLyogYml0cyAyOC0zMSAqLwotCQl1MzIgcmk6MjsJCS8qIGJpdHMgMjYtMjcoUmluZyBJbmRleCkgKi8KLQkJdTMyIGJpOjEwOwkJLyogYml0cyAxNi0yNShCdWZmZXIgSW5kZXgpICovCi0JCXUzMiBsZW5ndGg6MTY7CS8qIGJpdCAwLTE1KGxlbmd0aCBpbiBieXRlcykgKi8KLSNlbHNlCi0JCXUzMiBsZW5ndGg6MTY7CS8qIGJpdCAwLTE1KGxlbmd0aCBpbiBieXRlcykgKi8KLQkJdTMyIGJpOjEwOwkJLyogYml0cyAxNi0yNShCdWZmZXIgSW5kZXgpICovCi0JCXUzMiByaToyOwkJLyogYml0cyAyNi0yNyhSaW5nIEluZGV4KSAqLwotCQl1MzIgdW51c2VkOjQ7CS8qIGJpdHMgMjgtMzEgKi8KLSNlbmRpZgotCX0gYml0czsKLX0gUEtUX1NUQVRfREVTQ19XT1JEMV90LCAqUFBLVF9TVEFUX1dPUkQxX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IF9QS1RfU1RBVF9ERVNDX3QgewotCVBLVF9TVEFUX0RFU0NfV09SRDBfdCB3b3JkMDsKLQlQS1RfU1RBVF9ERVNDX1dPUkQxX3Qgd29yZDE7Ci19IFBLVF9TVEFUX0RFU0NfdCwgKlBQS1RfU1RBVF9ERVNDX3Q7CitzdHJ1Y3QgcGt0X3N0YXRfZGVzYyB7CisJdTMyIHdvcmQwOworCXUzMiB3b3JkMTsKK307CiAKIC8qIFR5cGVkZWZzIGZvciB0aGUgUlggRE1BIHN0YXR1cyB3b3JkICovCiAKQEAgLTIyMyw1OSArMTYzLDM4IEBACiAgKiBSWFNUQVRfV09SRDFfdCBzdHJ1Y3R1cmUgaG9sZHMgcGFydCBvZiB0aGUgc3RhdHVzIGJpdHMgb2YgdGhlIFJ4IERNQSBlbmdpbmUKICAqIHRoYXQgZ2V0IGNvcGllZCBvdXQgdG8gbWVtb3J5IGJ5IHRoZSBFVC0xMzEwLiAgV29yZCAzIGlzIGEgMzIgYml0IHdvcmQKICAqIHdoaWNoIGNvbnRhaW5zIHRoZSBQYWNrZXQgU3RhdHVzIFJpbmcgYXZhaWxhYmxlIG9mZnNldC4KKyAqCisgKiBiaXQgMC0xNSByZXNlcnZlZAorICogYml0IDE2LTI3IFBTUm9mZnNldAorICogYml0IDI4IFBTUndyYXAKKyAqIGJpdCAyOS0zMSB1bnVzZWQKICAqLwogCi0jZGVmaW5lIFJYU1RBVDFfT0ZGU0VUCTE2Ci0jZGVmaW5lIFJYU1RBVDFfTUFTSwkweEZGRgotI2RlZmluZSBSWFNUQVQxX1dSQVAJMHgxMDAwMDAwMAotCi10eXBlZGVmIHVuaW9uIF9yeHN0YXRfd29yZDFfdCB7Ci0JdTMyIHZhbHVlOwotCXN0cnVjdCB7Ci0jaWZkZWYgX0JJVF9GSUVMRFNfSFRPTAotCQl1MzIgUFNSdW51c2VkOjM7CS8qIGJpdHMgMjktMzEgKi8KLQkJdTMyIFBTUndyYXA6MTsJLyogYml0IDI4ICovCi0JCXUzMiBQU1JvZmZzZXQ6MTI7CS8qIGJpdHMgMTYtMjcgKi8KLQkJdTMyIHJlc2VydmVkOjE2OwkvKiBiaXRzIDAtMTUgKi8KLSNlbHNlCi0JCXUzMiByZXNlcnZlZDoxNjsJLyogYml0cyAwLTE1ICovCi0JCXUzMiBQU1JvZmZzZXQ6MTI7CS8qIGJpdHMgMTYtMjcgKi8KLQkJdTMyIFBTUndyYXA6MTsJLyogYml0IDI4ICovCi0JCXUzMiBQU1J1bnVzZWQ6MzsJLyogYml0cyAyOS0zMSAqLwotI2VuZGlmCi0JfSBiaXRzOwotfSBSWFNUQVRfV09SRDFfdCwgKlBSWFNUQVRfV09SRDFfdDsKLQogLyoKLSAqIFJYX1NUQVRVU19CTE9DS190IGlzIHNydWN0dXJlIHJlcHJlc2VudGluZyB0aGUgc3RhdHVzIG9mIHRoZSBSeCBETUEgZW5naW5lCi0gKiBpdCBzaXRzIGluIGZyZWUgbWVtb3J5LCBhbmQgaXMgcG9pbnRlZCB0byBieSAweDEwMWMgLyAweDEwMjAKKyAqIHN0cnVjdCByeF9zdGF0dXNfYmxvY2sgaXMgYSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBzdGF0dXMgb2YgdGhlIFJ4CisgKiBETUEgZW5naW5lIGl0IHNpdHMgaW4gZnJlZSBtZW1vcnksIGFuZCBpcyBwb2ludGVkIHRvIGJ5IDB4MTAxYyAvIDB4MTAyMAogICovCi10eXBlZGVmIHN0cnVjdCBfcnhfc3RhdHVzX2Jsb2NrX3Qgeworc3RydWN0IHJ4X3N0YXR1c19ibG9jayB7CiAJdTMyIFdvcmQwOwotCVJYU1RBVF9XT1JEMV90IFdvcmQxOwotfSBSWF9TVEFUVVNfQkxPQ0tfdCwgKlBSWF9TVEFUVVNfQkxPQ0tfdDsKKwl1MzIgV29yZDE7Cit9OwogCiAvKgogICogU3RydWN0dXJlIGZvciBsb29rLXVwIHRhYmxlIGhvbGRpbmcgZnJlZSBidWZmZXIgcmluZyBwb2ludGVycwogICovCi10eXBlZGVmIHN0cnVjdCBfRmJyTG9va3VwVGFibGUgewotCXZvaWQgKlZhW01BWF9ERVNDX1BFUl9SSU5HX1JYXTsKLQl2b2lkICpCdWZmZXIxW01BWF9ERVNDX1BFUl9SSU5HX1JYXTsKLQl2b2lkICpCdWZmZXIyW01BWF9ERVNDX1BFUl9SSU5HX1JYXTsKLQl1MzIgUEFIaWdoW01BWF9ERVNDX1BFUl9SSU5HX1JYXTsKLQl1MzIgUEFMb3dbTUFYX0RFU0NfUEVSX1JJTkdfUlhdOwotfSBGQlJMT09LVVBUQUJMRSwgKlBGQlJMT09LVVBUQUJMRTsKLQotdHlwZWRlZiBlbnVtIHsKLQlPTkVfUEFDS0VUX0lOVEVSUlVQVCwKLQlGT1VSX1BBQ0tFVF9JTlRFUlJVUFQKLX0gZVJYX0lOVEVSUlVQVF9TVEFURV90LCAqUGVSWF9JTlRFUlJVUFRfU1RBVEVfdDsKK3N0cnVjdCBmYnJfbG9va3VwIHsKKwl2b2lkICp2aXJ0W01BWF9ERVNDX1BFUl9SSU5HX1JYXTsKKwl2b2lkICpidWZmZXIxW01BWF9ERVNDX1BFUl9SSU5HX1JYXTsKKwl2b2lkICpidWZmZXIyW01BWF9ERVNDX1BFUl9SSU5HX1JYXTsKKwl1MzIgYnVzX2hpZ2hbTUFYX0RFU0NfUEVSX1JJTkdfUlhdOworCXUzMiBidXNfbG93W01BWF9ERVNDX1BFUl9SSU5HX1JYXTsKK307CiAKIC8qCi0gKiBSWF9SSU5HX3QgaXMgc3J1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBhZGFwdG9yJ3MgbG9jYWwgcmVmZXJlbmNlKHMpIHRvIHRoZQotICogcmluZ3MKKyAqIHN0cnVjdCByeF9yaW5nIGlzIHRoZSBzc3J1Y3R1cmUgcmVwcmVzZW50aW5nIHRoZSBhZGFwdG9yJ3MgbG9jYWwKKyAqIHJlZmVyZW5jZShzKSB0byB0aGUgcmluZ3MKICAqLwotdHlwZWRlZiBzdHJ1Y3QgX3J4X3JpbmdfdCB7CitzdHJ1Y3QgcnhfcmluZyB7CiAjaWZkZWYgVVNFX0ZCUjAKIAl2b2lkICpwRmJyMFJpbmdWYTsKIAlkbWFfYWRkcl90IHBGYnIwUmluZ1BhOwpAQCAtMjkzLDcgKzIxMiw3IEBACiAJZG1hX2FkZHJfdCBGYnIxTWVtUGFbTUFYX0RFU0NfUEVSX1JJTkdfUlggLyBGQlJfQ0hVTktTXTsKIAl1aW50NjRfdCBGYnIxUmVhbHBhOwogCXVpbnQ2NF90IEZicjFvZmZzZXQ7Ci0JRkJSTE9PS1VQVEFCTEUgKkZiclsyXTsKKwlzdHJ1Y3QgZmJyX2xvb2t1cCAqZmJyWzJdOwkvKiBPbmUgcGVyIHJpbmcgKi8KIAl1MzIgbG9jYWxfRmJyMV9mdWxsOwogCXUzMiBGYnIxTnVtRW50cmllczsKIAl1MzIgRmJyMUJ1ZmZlclNpemU7CkBAIC0zMDMsOCArMjIyLDggQEAKIAl1MzIgbG9jYWxfcHNyX2Z1bGw7CiAJdTMyIFBzck51bUVudHJpZXM7CiAKLQl2b2lkICpwUnhTdGF0dXNWYTsKLQlkbWFfYWRkcl90IHBSeFN0YXR1c1BhOworCXN0cnVjdCByeF9zdGF0dXNfYmxvY2sgKnJ4X3N0YXR1c19ibG9jazsKKwlkbWFfYWRkcl90IHJ4X3N0YXR1c19idXM7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIFJlY3ZCdWZmZXJQb29sOwogCkBAIC0zMjAsMzAgKzIzOSw2IEBACiAKIAkvKiBsb29rYXNpZGUgbGlzdHMgKi8KIAlzdHJ1Y3Qga21lbV9jYWNoZSAqUmVjdkxvb2thc2lkZTsKLX0gUlhfUklOR190LCAqUFJYX1JJTkdfdDsKLQotLyogRm9yd2FyZCByZWZlcmVuY2Ugb2YgUkZEICovCi1zdHJ1Y3QgX01QX1JGRDsKLQotLyogRm9yd2FyZCBkZWNsYXJhdGlvbiBvZiB0aGUgcHJpdmF0ZSBhZGFwdGVyIHN0cnVjdHVyZSAqLwotc3RydWN0IGV0MTMxeF9hZGFwdGVyOwotCi0vKiBQUk9UT1RZUEVTIGZvciBJbml0aWFsaXphdGlvbiAqLwotaW50IGV0MTMxeF9yeF9kbWFfbWVtb3J5X2FsbG9jKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIGV0MTMxeF9yeF9kbWFfbWVtb3J5X2ZyZWUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLWludCBldDEzMXhfcmZkX3Jlc291cmNlc19hbGxvYyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCi0JCQkgICAgICAgc3RydWN0IF9NUF9SRkQgKnBNcFJmZCk7Ci12b2lkIGV0MTMxeF9yZmRfcmVzb3VyY2VzX2ZyZWUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAotCQkJICAgICAgIHN0cnVjdCBfTVBfUkZEICpwTXBSZmQpOwotaW50IGV0MTMxeF9pbml0X3JlY3Yoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLQotdm9pZCBDb25maWdSeERtYVJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgU2V0UnhEbWFUaW1lcihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBldDEzMXhfcnhfZG1hX2Rpc2FibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgZXQxMzF4X3J4X2RtYV9lbmFibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLQotdm9pZCBldDEzMXhfcmVzZXRfcmVjdihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotCi12b2lkIGV0MTMxeF9oYW5kbGVfcmVjdl9pbnRlcnJ1cHQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK307CiAKICNlbmRpZiAvKiBfX0VUMTMxMF9SWF9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3R4LmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF90eC5jCmluZGV4IDk3N2U4YjMuLmI2ZmYyMGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3R4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfdHguYwpAQCAtODQsMTUgKzg0LDkgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KIAogI2luY2x1ZGUgImV0MTMxMF9waHkuaCIKLSNpbmNsdWRlICJldDEzMTBfcG0uaCIKLSNpbmNsdWRlICJldDEzMTBfamFnY29yZS5oIgotCiAjaW5jbHVkZSAiZXQxMzF4X2FkYXB0ZXIuaCIKLSNpbmNsdWRlICJldDEzMXhfaW5pdHBjaS5oIgotI2luY2x1ZGUgImV0MTMxeF9pc3IuaCIKLQogI2luY2x1ZGUgImV0MTMxMF90eC5oIgotCisjaW5jbHVkZSAiZXQxMzF4LmgiCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBldDEzMXhfZnJlZV9zZW5kX3BhY2tldChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmV0ZGV2LAogCQkJCQkgICBzdHJ1Y3QgdGNiICp0Y2IpOwpAQCAtMjAwLDcgKzE5NCw3IEBACiAgKi8KIHZvaWQgQ29uZmlnVHhEbWFSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqZXRkZXYpCiB7Ci0Jc3RydWN0IF9UWERNQV90IF9faW9tZW0gKnR4ZG1hID0gJmV0ZGV2LT5yZWdzLT50eGRtYTsKKwlzdHJ1Y3QgdHhkbWFfcmVncyBfX2lvbWVtICp0eGRtYSA9ICZldGRldi0+cmVncy0+dHhkbWE7CiAKIAkvKiBMb2FkIHRoZSBoYXJkd2FyZSB3aXRoIHRoZSBzdGFydCBvZiB0aGUgdHJhbnNtaXQgZGVzY3JpcHRvciByaW5nLiAqLwogCXdyaXRlbCgodTMyKSAoKHU2NClldGRldi0+dHhfcmluZy50eF9kZXNjX3JpbmdfcGEgPj4gMzIpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfdHguaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzEwX3R4LmgKaW5kZXggNGYwZWE4MS4uODJkMDZlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMTBfdHguaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxMF90eC5oCkBAIC0xNDcsMTggKzE0Nyw0IEBACiAJaW50IHNpbmNlX2lycTsKIH07CiAKLS8qIEZvcndhcmQgZGVjbGFyYXRpb24gb2YgdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KLXN0cnVjdCBldDEzMXhfYWRhcHRlcjsKLQotLyogUFJPVE9UWVBFUyBmb3IgZXQxMzEwX3R4LmMgKi8KLWludCBldDEzMXhfdHhfZG1hX21lbW9yeV9hbGxvYyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBldDEzMXhfdHhfZG1hX21lbW9yeV9mcmVlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIENvbmZpZ1R4RG1hUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBldDEzMXhfaW5pdF9zZW5kKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIGV0MTMxeF90eF9kbWFfZGlzYWJsZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBldDEzMXhfdHhfZG1hX2VuYWJsZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotdm9pZCBldDEzMXhfaGFuZGxlX3NlbmRfaW50ZXJydXB0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIGV0MTMxeF9mcmVlX2J1c3lfc2VuZF9wYWNrZXRzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci1pbnQgZXQxMzF4X3NlbmRfcGFja2V0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKLQogI2VuZGlmIC8qIF9fRVQxMzEwX1RYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXguaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThhYmZlNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4LmgKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBNZXJnZWQgZnJvbSBmaWxlcworICoKKyAqIENvcHlyaWdodCDCqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KKyAqCisgKiBTT0ZUV0FSRSBMSUNFTlNFCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMsCisgKiB3aGljaCB5b3Ugc2hvdWxkIHJlYWQgY2FyZWZ1bGx5IGJlZm9yZSB1c2luZyB0aGUgc29mdHdhcmUuICBVc2luZyB0aGlzCisgKiBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgSWYgeW91IGRvCisgKiBub3QgYWdyZWUgd2l0aCB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgZG8gbm90IHVzZSB0aGUgc29mdHdhcmUuCisgKgorICogQ29weXJpZ2h0IMKpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKKyAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCisgKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIERpc2NsYWltZXIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKKyAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCisgKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICogREFNQUdFLgorICoKKyAqLworCisvKiBldDEzMXhfZWVwcm9tLmMgKi8KK2ludCBldDEzMXhfaW5pdF9lZXByb20oc3RydWN0IGV0MTMxeF9hZGFwdGVyICpldGRldik7CisKKy8qIGV0MTMxeF9pbml0cGNpLmMgKi8KK3ZvaWQgQ29uZmlnR2xvYmFsUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKK3ZvaWQgQ29uZmlnTU1DUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKnBBZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X2VuYWJsZV9pbnRlcnJ1cHRzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGV0MTMxeF9kaXNhYmxlX2ludGVycnVwdHMoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X2FsaWduX2FsbG9jYXRlZF9tZW1vcnkoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQkJCSAgIHU2NCAqcGh5c19hZGRyLAorCQkJCSAgIHU2NCAqb2Zmc2V0LCB1NjQgbWFzayk7CisKK2ludCBldDEzMXhfYWRhcHRlcl9zZXR1cChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworaW50IGV0MTMxeF9hZGFwdGVyX21lbW9yeV9hbGxvYyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfYWRhcHRlcl9tZW1vcnlfZnJlZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfaHdhZGRyX2luaXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X3NvZnRfcmVzZXQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKworLyogZXQxMzF4X2lzci5jICovCitpcnFyZXR1cm5fdCBldDEzMXhfaXNyKGludCBpcnEsIHZvaWQgKmRldl9pZCk7Cit2b2lkIGV0MTMxeF9pc3JfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCisvKiBldDEzMTBfbWFjLmMgKi8KK3ZvaWQgQ29uZmlnTUFDUmVnczEoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgQ29uZmlnTUFDUmVnczIoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgQ29uZmlnUnhNYWNSZWdzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIENvbmZpZ1R4TWFjUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBDb25maWdNYWNTdGF0UmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBDb25maWdGbG93Q29udHJvbChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBVcGRhdGVNYWNTdGF0SG9zdENvdW50ZXJzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIEhhbmRsZU1hY1N0YXRJbnRlcnJ1cHQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgU2V0dXBEZXZpY2VGb3JNdWx0aWNhc3Qoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgU2V0dXBEZXZpY2VGb3JVbmljYXN0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CisKKy8qIGV0MTMxeF9uZXRkZXYuYyAqLworc3RydWN0IG5ldF9kZXZpY2UgKmV0MTMxeF9kZXZpY2VfYWxsb2Modm9pZCk7CisKKy8qIGV0MTMxeF9wbS5jICovCit2b2lkIEVuYWJsZVBoeUNvbWEoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgRGlzYWJsZVBoeUNvbWEoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKworLyogZXQxMzF4X3BoeS5jICovCit2b2lkIEVUMTMxMF9QaHlJbml0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIEVUMTMxMF9QaHlSZXNldChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBFVDEzMTBfUGh5UG93ZXJEb3duKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwgYm9vbCBkb3duKTsKK3ZvaWQgRVQxMzEwX1BoeUFkdmVydGlzZTEwMDBCYXNlVChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJICB1MTYgZHVwbGV4KTsKK3ZvaWQgRVQxMzEwX1BoeUFjY2Vzc01pQml0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgIHUxNiBhY3Rpb24sCisJCQkgICB1MTYgcmVnbnVtLCB1MTYgYml0bnVtLCB1OCAqdmFsdWUpOworCitpbnQgZXQxMzF4X3hjdnJfZmluZChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfc2V0cGh5X25vcm1hbChzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCisvKiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9uIGRvZXMgbm90IHdvcmsgYmVjYXVzZSBldDEzMXhfYWRhcHRlciBpcyBub3QgYWx3YXlzCisgKiBkZWZpbmVkCisgKi8KK2ludCBQaHlNaVJlYWQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLCB1OCB4Y3ZyQWRkciwKKwkgICAgICB1OCB4Y3ZyUmVnLCB1MTYgKnZhbHVlKTsKKyNkZWZpbmUgTWlSZWFkKGFkYXB0ZXIsIHhjdnJSZWcsIHZhbHVlKSBcCisJUGh5TWlSZWFkKChhZGFwdGVyKSwgKGFkYXB0ZXIpLT5TdGF0cy54Y3ZyX2FkZHIsICh4Y3ZyUmVnKSwgKHZhbHVlKSkKKworaW50MzJfdCBNaVdyaXRlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKKwkJdTggeGN2UmVnLCB1MTYgdmFsdWUpOwordm9pZCBldDEzMXhfTWlpX2NoZWNrKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqcEFkYXB0ZXIsCisJCSAgICAgIE1JX0JNU1JfdCBibXNyLCBNSV9CTVNSX3QgYm1zcl9pbnRzKTsKKworLyogVGhpcyBsYXN0IGlzIG5vdCBzdHJpY3RseSByZXF1aXJlZCAodGhlIGRyaXZlciBjb3VsZCBjYWxsIHRoZSBUUEFMCisgKiB2ZXJzaW9uIGluc3RlYWQpLCBidXQgdGhpcyBzZXRzIHRoZSBhZGFwdGVyIHVwIGNvcnJlY3RseSwgYW5kIGNhbGxzIHRoZQorICogYWNjZXNzIHJvdXRpbmUgaW5kaXJlY3RseS4gIFRoaXMgcHJvdGVjdHMgdGhlIGRyaXZlciBmcm9tIGNoYW5nZXMgaW4gVFBBTC4KKyAqLwordm9pZCBTZXRQaHlfMTBCYXNlVEhhbGZEdXBsZXgoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKworCisvKiBldDEzMTBfcnguYyAqLworaW50IGV0MTMxeF9yeF9kbWFfbWVtb3J5X2FsbG9jKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGV0MTMxeF9yeF9kbWFfbWVtb3J5X2ZyZWUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK2ludCBldDEzMXhfcmZkX3Jlc291cmNlc19hbGxvYyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgICAgICAgc3RydWN0IF9NUF9SRkQgKnBNcFJmZCk7Cit2b2lkIGV0MTMxeF9yZmRfcmVzb3VyY2VzX2ZyZWUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICAgIHN0cnVjdCBfTVBfUkZEICpwTXBSZmQpOworaW50IGV0MTMxeF9pbml0X3JlY3Yoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKwordm9pZCBDb25maWdSeERtYVJlZ3Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgU2V0UnhEbWFUaW1lcihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfcnhfZG1hX2Rpc2FibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKK3ZvaWQgZXQxMzF4X3J4X2RtYV9lbmFibGUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKwordm9pZCBldDEzMXhfcmVzZXRfcmVjdihzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOworCit2b2lkIGV0MTMxeF9oYW5kbGVfcmVjdl9pbnRlcnJ1cHQoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKKworLyogZXQxMzF4X3R4LmMgKi8KK2ludCBldDEzMXhfdHhfZG1hX21lbW9yeV9hbGxvYyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfdHhfZG1hX21lbW9yeV9mcmVlKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIENvbmZpZ1R4RG1hUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfaW5pdF9zZW5kKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGV0MTMxeF90eF9kbWFfZGlzYWJsZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfdHhfZG1hX2VuYWJsZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwordm9pZCBldDEzMXhfaGFuZGxlX3NlbmRfaW50ZXJydXB0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Cit2b2lkIGV0MTMxeF9mcmVlX2J1c3lfc2VuZF9wYWNrZXRzKHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7CitpbnQgZXQxMzF4X3NlbmRfcGFja2V0cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfYWRhcHRlci5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfYWRhcHRlci5oCmluZGV4IDNmN2YzN2EuLjY0YTY3OGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2FkYXB0ZXIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9hZGFwdGVyLmgKQEAgLTc3LDM4ICs3NywxMSBAQAogICovCiAjZGVmaW5lIE5VTV9UUkFGRklDX0NMQVNTRVMgICAgICAgICAgMQogCi0vKgotICogVGhlcmUgYXJlIHRocmVlIHdheXMgb2YgY291bnRpbmcgZXJyb3JzIC0gaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBYIGVycm9ycwotICogaW4gWSBwYWNrZXRzIChyZXByZXNlbnRlZCBieSB0aGUgIlNBTVBMRSIgbWFjcm9zKSwgaWYgdGhlcmUgYXJlIG1vcmUgdGhhbgotICogTiBlcnJvcnMgaW4gYSBTIG1TZWMgdGltZSBwZXJpb2QgKHRoZSAiUEVSSU9EIiBtYWNyb3MpLCBvciBpZiB0aGVyZSBhcmUKLSAqIGNvbnNlY3V0aXZlIHBhY2tldHMgd2l0aCBlcnJvcnMgKENPTlNFQ19FUlJPUkVEX1RIUkVTSCkuICBUaGlzIGxhc3QgY292ZXJzCi0gKiBmb3IgIkJ1cnN0eSIgZXJyb3JzLCBhbmQgdGhlIGVycm9yZWQgcGFja2V0cyBtYXkgd2VsbCBub3QgYmUgY29udGlndW91cywKLSAqIGJ1dCBzZXZlcmFsIGVycm9ycyB3aGVyZSB0aGUgcGFja2V0IGNvdW50ZXIgaGFzIGNoYW5nZWQgYnkgbGVzcyB0aGFuIGEKLSAqIHNtYWxsIGFtb3VudCB3aWxsIGNhdXNlIHRoaXMgY291bnQgdG8gaW5jcmVtZW50LgotICovCi0jZGVmaW5lIFRYX1BBQ0tFVFNfSU5fU0FNUExFICAgICAgICAxMDAwMAotI2RlZmluZSBUWF9NQVhfRVJST1JTX0lOX1NBTVBMRSAgICAgNTAKLQogI2RlZmluZSBUWF9FUlJPUl9QRVJJT0QgICAgICAgICAgICAgMTAwMAotI2RlZmluZSBUWF9NQVhfRVJST1JTX0lOX1BFUklPRCAgICAgMTAKLQotI2RlZmluZSBMSU5LX0RFVEVDVElPTl9USU1FUiAgICAgICAgNTAwMAotCi0jZGVmaW5lIFRYX0NPTlNFQ19SQU5HRSAgICAgICAgICAgICA1Ci0jZGVmaW5lIFRYX0NPTlNFQ19FUlJPUkVEX1RIUkVTSCAgICAxMAogCiAjZGVmaW5lIExPX01BUktfUEVSQ0VOVF9GT1JfUFNSICAgICAxNQogI2RlZmluZSBMT19NQVJLX1BFUkNFTlRfRk9SX1JYICAgICAgMTUKIAotLyogQ291bnRlcnMgZm9yIGVycm9yIHJhdGUgbW9uaXRvcmluZyAqLwotdHlwZWRlZiBzdHJ1Y3QgX01QX0VSUl9DT1VOVEVSUyB7Ci0JdTMyIFBrdENvdW50VHhQYWNrZXRzOwotCXUzMiBQa3RDb3VudFR4RXJyb3JzOwotCXUzMiBUaW1lckJhc2VkVHhFcnJvcnM7Ci0JdTMyIFBrdENvdW50TGFzdEVycm9yOwotCXUzMiBFcnJlZENvbnNlY1BhY2tldHM7Ci19IE1QX0VSUl9DT1VOVEVSUywgKlBNUF9FUlJfQ09VTlRFUlM7Ci0KIC8qIFJGRCAoUmVjZWl2ZSBGcmFtZSBEZXNjcmlwdG9yKSAqLwogdHlwZWRlZiBzdHJ1Y3QgX01QX1JGRCB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0X25vZGU7CkBAIC0xNzQsNiArMTQ3LDIwIEBACiAJdTMyIEludGVycnVwdFN0YXR1czsKIH0gQ0VfU1RBVFNfdCwgKlBDRV9TVEFUU190OwogCit0eXBlZGVmIHN0cnVjdCBfTVBfUE9XRVJfTUdNVCB7CisJLyogdmFyaWFibGUgcHV0dGluZyB0aGUgcGh5IGludG8gY29tYSBtb2RlIHdoZW4gYm9vdCB1cCB3aXRoIG5vIGNhYmxlCisJICogcGx1Z2dlZCBpbiBhZnRlciA1IHNlY29uZHMKKwkgKi8KKwl1OCBUcmFuc1BoeUNvbWFNb2RlT25Cb290OworCisJLyogTmV4dCB0d28gdXNlZCB0byBzYXZlIHBvd2VyIGluZm9ybWF0aW9uIGF0IHBvd2VyIGRvd24uIFRoaXMKKwkgKiBpbmZvcm1hdGlvbiB3aWxsIGJlIHVzZWQgZHVyaW5nIHBvd2VyIHVwIHRvIHNldCB1cCBwYXJ0cyBvZiBQb3dlcgorCSAqIE1hbmFnZW1lbnQgaW4gSkFHQ29yZQorCSAqLworCXUxNiBQb3dlckRvd25TcGVlZDsKKwl1OCBQb3dlckRvd25EdXBsZXg7Cit9IE1QX1BPV0VSX01HTVQsICpQTVBfUE9XRVJfTUdNVDsKKwogLyogVGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUgKi8KIHN0cnVjdCBldDEzMXhfYWRhcHRlciB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKQEAgLTI0OCw3ICsyMzUsNyBAQAogCXN0cnVjdCB0eF9yaW5nIHR4X3Jpbmc7CiAKIAkvKiBSeCBNZW1vcnkgVmFyaWFibGVzICovCi0JUlhfUklOR190IFJ4UmluZzsKKwlzdHJ1Y3QgcnhfcmluZyByeF9yaW5nOwogCiAJLyogTG9vcGJhY2sgc3BlY2lmaWNzICovCiAJdTggUmVwbGljYVBoeUxvb3BiazsJLyogUmVwbGljYSBFbmFibGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2NvbmZpZy5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfY29uZmlnLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY0MmMwZjYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfY29uZmlnLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogQWdlcmUgU3lzdGVtcyBJbmMuCi0gKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKLSAqCi0gKiBDb3B5cmlnaHQgqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIGV0MTMxeF9jb25maWcuaCAtIERlZmluZXMsIHN0cnVjdHMsIGVudW1zLCBwcm90b3R5cGVzLCBldGMuIHRvIHN1cHBvcnQKLSAqICAgICAgICAgICAgICAgICAgIGV0MTMxeF9jb25maWcuYwotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogU09GVFdBUkUgTElDRU5TRQotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAotICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcwotICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbwotICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgotICoKLSAqIENvcHlyaWdodCCpIDIwMDUgQWdlcmUgU3lzdGVtcyBJbmMuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIG9yIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb25zLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKLSAqICAgIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFzIGNvbW1lbnRzIGluIHRoZSBjb2RlIGFzCi0gKiAgICB3ZWxsIGFzIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqICAgIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIERpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KLSAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIC4gTmVpdGhlciB0aGUgbmFtZSBvZiBBZ2VyZSBTeXN0ZW1zIEluYy4gbm9yIHRoZSBuYW1lcyBvZiB0aGUgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIERpc2NsYWltZXIKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIJNBUyBJU5QgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKLSAqIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTkZSSU5HRU1FTlQgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBBTlkKLSAqIFVTRSwgTU9ESUZJQ0FUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSElTIFNPRlRXQVJFIElTIFNPTEVMWSBBVCBUSEUgVVNFUlMgT1dOCi0gKiBSSVNLLiBJTiBOTyBFVkVOVCBTSEFMTCBBR0VSRSBTWVNURU1TIElOQy4gT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCi0gKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAotICogREFNQUdFLgotICoKLSAqLwotCi0jaWZuZGVmIF9fRVQxMzFYX0NPTkZJR19IX18KLSNkZWZpbmUgX19FVDEzMVhfQ09ORklHX0hfXwotCi0vKiBGb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHRoZSBwcml2YXRlIGFkYXB0ZXIgc3RydWN0dXJlICovCi1zdHJ1Y3QgZXQxMzF4X2FkYXB0ZXI7Ci0KLXZvaWQgZXQxMzF4X2NvbmZpZ19wYXJzZShzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmFkYXB0ZXIpOwotCi0jZW5kaWYgLyogX19FVDEzMVhfQ09ORklHX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaW5pdHBjaS5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaW5pdHBjaS5jCmluZGV4IDA4OTJiNmEuLjVhZDdlNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2luaXRwY2kuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pbml0cGNpLmMKQEAgLTg3LDIwICs4NywxNiBAQAogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogCiAjaW5jbHVkZSAiZXQxMzEwX3BoeS5oIgotI2luY2x1ZGUgImV0MTMxMF9wbS5oIgotI2luY2x1ZGUgImV0MTMxMF9qYWdjb3JlLmgiCiAKICNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgotI2luY2x1ZGUgImV0MTMxeF9uZXRkZXYuaCIKLSNpbmNsdWRlICJldDEzMXhfY29uZmlnLmgiCi0jaW5jbHVkZSAiZXQxMzF4X2lzci5oIgogCiAjaW5jbHVkZSAiZXQxMzEwX2FkZHJlc3NfbWFwLmgiCiAjaW5jbHVkZSAiZXQxMzEwX3R4LmgiCiAjaW5jbHVkZSAiZXQxMzEwX3J4LmgiCi0jaW5jbHVkZSAiZXQxMzEwX21hYy5oIgotI2luY2x1ZGUgImV0MTMxMF9lZXByb20uaCIKKyNpbmNsdWRlICJldDEzMXguaCIKIAorI2RlZmluZSBJTlRFUk5BTF9NRU1fU0laRSAgICAgICAweDQwMAkvKiAxMDI0IG9mIGludGVybmFsIG1lbW9yeSAqLworI2RlZmluZSBJTlRFUk5BTF9NRU1fUlhfT0ZGU0VUICAweDFGRgkvKiA1MCUgICBUeCwgNTAlICAgUnggKi8KIAogLyogRGVmaW5lcyBmb3IgUGFyYW1ldGVyIERlZmF1bHQvTWluL01heCB2YXVsZXMgKi8KICNkZWZpbmUgUEFSTV9TUEVFRF9EVVBMRVhfTUlOICAgMApAQCAtMzI3LDcgKzMyMyw3IEBACiAgKi8KIHZvaWQgQ29uZmlnR2xvYmFsUmVncyhzdHJ1Y3QgZXQxMzF4X2FkYXB0ZXIgKmV0ZGV2KQogewotCXN0cnVjdCBfR0xPQkFMX3QgX19pb21lbSAqcmVncyA9ICZldGRldi0+cmVncy0+Z2xvYmFsOworCXN0cnVjdCBnbG9iYWxfcmVncyBfX2lvbWVtICpyZWdzID0gJmV0ZGV2LT5yZWdzLT5nbG9iYWw7CiAKIAl3cml0ZWwoMCwgJnJlZ3MtPnJ4cV9zdGFydF9hZGRyKTsKIAl3cml0ZWwoSU5URVJOQUxfTUVNX1NJWkUgLSAxLCAmcmVncy0+dHhxX2VuZF9hZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2luaXRwY2kuaCBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X2luaXRwY2kuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzI2OTU2OS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pbml0cGNpLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0vKgotICogQWdlcmUgU3lzdGVtcyBJbmMuCi0gKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKLSAqCi0gKiBDb3B5cmlnaHQgwqkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBldDEzMXhfaW5pdHBjaS5oIC0gSGVhZGVyIHdoaWNoIGluY2x1ZGVzIGNvbW1vbiBkYXRhIGFuZCBmdW5jdGlvbiBwcm90b3R5cGVzCi0gKiAgICAgICAgICAgICAgICAgICAgcmVsYXRlZCB0byB0aGUgZHJpdmVyJ3MgUENJIChhbmQgUENJIEV4cHJlc3MpIGluZm9ybWF0aW9uLgotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogU09GVFdBUkUgTElDRU5TRQotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAotICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcwotICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbwotICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgotICoKLSAqIENvcHlyaWdodCDCqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCi0gKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcwotICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBEaXNjbGFpbWVyCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCi0gKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCi0gKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgotICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFHRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfX0VUMTMxWF9JTklUUENJX0hfXwotI2RlZmluZSBfX0VUMTMxWF9JTklUUENJX0hfXwotCi0vKiBGdW5jdGlvbiBQcm90b3R5cGVzICovCi12b2lkIGV0MTMxeF9hbGlnbl9hbGxvY2F0ZWRfbWVtb3J5KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlciwKLQkJCQkgICB1NjQgKnBoeXNfYWRkciwKLQkJCQkgICB1NjQgKm9mZnNldCwgdTY0IG1hc2spOwotCi1pbnQgZXQxMzF4X2FkYXB0ZXJfc2V0dXAoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLWludCBldDEzMXhfYWRhcHRlcl9tZW1vcnlfYWxsb2Moc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgZXQxMzF4X2FkYXB0ZXJfbWVtb3J5X2ZyZWUoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKTsKLXZvaWQgZXQxMzF4X2h3YWRkcl9pbml0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci12b2lkIGV0MTMxeF9zb2Z0X3Jlc2V0KHN0cnVjdCBldDEzMXhfYWRhcHRlciAqYWRhcHRlcik7Ci0KLSNlbmRpZiAvKiBfX0VUMTMxWF9JTklUUENJX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaXNyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pc3IuYwppbmRleCBmNmQ0NTJkLi44YjZlMGI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pc3IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pc3IuYwpAQCAtODUsMTEgKzg1LDI3IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAKICNpbmNsdWRlICJldDEzMTBfcGh5LmgiCi0jaW5jbHVkZSAiZXQxMzEwX3BtLmgiCi0jaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKLSNpbmNsdWRlICJldDEzMTBfbWFjLmgiCi0KICNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgorI2luY2x1ZGUgImV0MTMxeC5oIgorCisvKgorICogRm9yIGludGVycnVwdHMsIG5vcm1hbCBydW5uaW5nIGlzOgorICogICAgICAgcnhkbWFfeGZyX2RvbmUsIHBoeV9pbnRlcnJ1cHQsIG1hY19zdGF0X2ludGVycnVwdCwKKyAqICAgICAgIHdhdGNoZG9nX2ludGVycnVwdCAmIHR4ZG1hX3hmZXJfZG9uZQorICoKKyAqIEluIGJvdGggY2FzZXMsIHdoZW4gZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgZm9yIGVpdGhlciBUeCBvciBiaS1kaXJlY3Rpb24sCisgKiB3ZSBhZGRpdGlvbmFsIGVuYWJsZSByeF9mYnIwX2xvdyBhbmQgcnhfZmJyMV9sb3csIHNvIHdlIGtub3cgd2hlbiB0aGUKKyAqIGJ1ZmZlciByaW5ncyBhcmUgcnVubmluZyBsb3cuCisgKi8KKyNkZWZpbmUgSU5UX01BU0tfRElTQUJMRSAgICAgICAgICAgIDB4ZmZmZmZmZmYKKworLyogTk9URTogTWFza2luZyBvdXQgTUFDX1NUQVQgSW50ZXJydXB0IGZvciBub3cuLi4KKyAqICNkZWZpbmUgSU5UX01BU0tfRU5BQkxFICAgICAgICAgICAgIDB4ZmZmNmJmMTcKKyAqICNkZWZpbmUgSU5UX01BU0tfRU5BQkxFX05PX0ZMT1cgICAgIDB4ZmZmNmJmZDcKKyAqLworI2RlZmluZSBJTlRfTUFTS19FTkFCTEUgICAgICAgICAgICAgMHhmZmZlYmYxNworI2RlZmluZSBJTlRfTUFTS19FTkFCTEVfTk9fRkxPVyAgICAgMHhmZmZlYmZkNworCiAKIC8qKgogICoJZXQxMzF4X2VuYWJsZV9pbnRlcnJ1cHRzCS0JZW5hYmxlIGludGVycnVwdApAQCAtMTg1LDcgKzIwMSw3IEBACiAJCQlpZiAoKyt0Y2ItPnN0YWxlID4gMSkKIAkJCQlzdGF0dXMgfD0gRVRfSU5UUl9UWERNQV9JU1I7CiAKLQkJaWYgKGFkYXB0ZXItPlJ4UmluZy5VbmZpbmlzaGVkUmVjZWl2ZXMpCisJCWlmIChhZGFwdGVyLT5yeF9yaW5nLlVuZmluaXNoZWRSZWNlaXZlcykKIAkJCXN0YXR1cyB8PSBFVF9JTlRSX1JYRE1BX1hGUl9ET05FOwogCQllbHNlIGlmICh0Y2IgPT0gTlVMTCkKIAkJCXdyaXRlbCgwLCAmYWRhcHRlci0+cmVncy0+Z2xvYmFsLndhdGNoZG9nX3RpbWVyKTsKQEAgLTM5MCw3ICs0MDYsNyBAQAogCiAJCS8qIExldCdzIG1vdmUgb24gdG8gdGhlIFR4TWFjICovCiAJCWlmIChzdGF0dXMgJiBFVF9JTlRSX1RYTUFDKSB7Ci0JCQl1MzIgZXJyID0gcmVhZGwoJmlvbWVtLT50eG1hYy5lcnIudmFsdWUpOworCQkJdTMyIGVyciA9IHJlYWRsKCZpb21lbS0+dHhtYWMuZXJyKTsKIAogCQkJLyoKIAkJCSAqIFdoZW4gYW55IG9mIHRoZSBlcnJvcnMgb2NjdXIgYW5kIFRYTUFDIGdlbmVyYXRlcwpAQCAtNDI1LDEyICs0NDEsMTIgQEAKIAogCQkJZGV2X3dhcm4oJmV0ZGV2LT5wZGV2LT5kZXYsCiAJCQkgICJSWE1BQyBpbnRlcnJ1cHQsIGVycm9yIDB4JTA4eC4gIFJlcXVlc3RpbmcgcmVzZXRcbiIsCi0JCQkJICAgIHJlYWRsKCZpb21lbS0+cnhtYWMuZXJyX3JlZy52YWx1ZSkpOworCQkJCSAgICByZWFkbCgmaW9tZW0tPnJ4bWFjLmVycl9yZWcpKTsKIAogCQkJZGV2X3dhcm4oJmV0ZGV2LT5wZGV2LT5kZXYsCiAJCQkJICAgICJFbmFibGUgMHglMDh4LCBEaWFnIDB4JTA4eFxuIiwKLQkJCQkgICAgcmVhZGwoJmlvbWVtLT5yeG1hYy5jdHJsLnZhbHVlKSwKLQkJCQkgICAgcmVhZGwoJmlvbWVtLT5yeG1hYy5yeHFfZGlhZy52YWx1ZSkpOworCQkJCSAgICByZWFkbCgmaW9tZW0tPnJ4bWFjLmN0cmwpLAorCQkJCSAgICByZWFkbCgmaW9tZW0tPnJ4bWFjLnJ4cV9kaWFnKSk7CiAKIAkJCS8qCiAJCQkgKiBJZiB3ZSBhcmUgZGVidWdnaW5nLCB3ZSB3YW50IHRvIHNlZSB0aGlzIGVycm9yLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfaXNyLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pc3IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTA2ZDU3Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF9pc3IuaAorKysgL2Rldi9udWxsCkBAIC0xLDY1ICswLDAgQEAKLS8qCi0gKiBBZ2VyZSBTeXN0ZW1zIEluYy4KLSAqIDEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIgZm9yIHRoZSBFVDEzMDEgYW5kIEVUMTMxeCBzZXJpZXMgTUFDcwotICoKLSAqIENvcHlyaWdodCDCqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqICAgaHR0cDovL3d3dy5hZ2VyZS5jb20KLSAqCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICoKLSAqIGV0MTMxeF9pc3IuaCAtIERlZmluZXMsIHN0cnVjdHMsIGVudW1zLCBwcm90b3R5cGVzLCBldGMuIHBlcnRhaW5pbmcgdG8gdGhlCi0gKiAgICAgICAgICAgICAgICBJU1IgcHJvY2Vzc2luZyBjb2RlLgotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogU09GVFdBUkUgTElDRU5TRQotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAotICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcwotICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbwotICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgotICoKLSAqIENvcHlyaWdodCDCqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCi0gKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcwotICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBEaXNjbGFpbWVyCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCi0gKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCi0gKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgotICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFHRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfX0VUMTMxWF9JU1JfSF9fCi0jZGVmaW5lIF9fRVQxMzFYX0lTUl9IX18KLQotaXJxcmV0dXJuX3QgZXQxMzF4X2lzcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwotdm9pZCBldDEzMXhfaXNyX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLQotI2VuZGlmIC8qIF9fRVQxMzFYX0lTUl9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X25ldGRldi5jIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfbmV0ZGV2LmMKaW5kZXggMjRkOTdiNC4uNDBmODk1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfbmV0ZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfbmV0ZGV2LmMKQEAgLTg1LDE0ICs4NSw5IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAKICNpbmNsdWRlICJldDEzMTBfcGh5LmgiCi0jaW5jbHVkZSAiZXQxMzEwX3BtLmgiCi0jaW5jbHVkZSAiZXQxMzEwX2phZ2NvcmUuaCIKLSNpbmNsdWRlICJldDEzMTBfbWFjLmgiCiAjaW5jbHVkZSAiZXQxMzEwX3R4LmgiCi0KICNpbmNsdWRlICJldDEzMXhfYWRhcHRlci5oIgotI2luY2x1ZGUgImV0MTMxeF9pc3IuaCIKLSNpbmNsdWRlICJldDEzMXhfaW5pdHBjaS5oIgorI2luY2x1ZGUgImV0MTMxeC5oIgogCiBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqZXQxMzF4X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogaW50IGV0MTMxeF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwpAQCAtMzM5LDY2ICszMzQsNjQgQEAKICAqIGV0MTMxeF9zZXRfcGFja2V0X2ZpbHRlciAtIENvbmZpZ3VyZXMgdGhlIFJ4IFBhY2tldCBmaWx0ZXJpbmcgb24gdGhlIGRldmljZQogICogQGFkYXB0ZXI6IHBvaW50ZXIgdG8gb3VyIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3R1cmUKICAqCisgKiBGSVhNRTogbG90IG9mIGR1cHMgd2l0aCBNQUMgY29kZQorICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJubyBvbiBmYWlsdXJlCiAgKi8KIGludCBldDEzMXhfc2V0X3BhY2tldF9maWx0ZXIoc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyKQogewogCWludCBzdGF0dXMgPSAwOwogCXVpbnQzMl90IGZpbHRlciA9IGFkYXB0ZXItPlBhY2tldEZpbHRlcjsKLQlSWE1BQ19DVFJMX3QgY3RybDsKLQlSWE1BQ19QRl9DVFJMX3QgcGZfY3RybDsKKwl1MzIgY3RybDsKKwl1MzIgcGZfY3RybDsKIAotCWN0cmwudmFsdWUgPSByZWFkbCgmYWRhcHRlci0+cmVncy0+cnhtYWMuY3RybC52YWx1ZSk7Ci0JcGZfY3RybC52YWx1ZSA9IHJlYWRsKCZhZGFwdGVyLT5yZWdzLT5yeG1hYy5wZl9jdHJsLnZhbHVlKTsKKwljdHJsID0gcmVhZGwoJmFkYXB0ZXItPnJlZ3MtPnJ4bWFjLmN0cmwpOworCXBmX2N0cmwgPSByZWFkbCgmYWRhcHRlci0+cmVncy0+cnhtYWMucGZfY3RybCk7CiAKIAkvKiBEZWZhdWx0IHRvIGRpc2FibGVkIHBhY2tldCBmaWx0ZXJpbmcuICBFbmFibGUgaXQgaW4gdGhlIGluZGl2aWR1YWwKIAkgKiBjYXNlIHN0YXRlbWVudHMgdGhhdCByZXF1aXJlIHRoZSBkZXZpY2UgdG8gZmlsdGVyIHNvbWV0aGluZwogCSAqLwotCWN0cmwuYml0cy5wa3RfZmlsdGVyX2Rpc2FibGUgPSAxOworCWN0cmwgfD0gMHgwNDsKIAogCS8qIFNldCB1cyB0byBiZSBpbiBwcm9taXNjdW91cyBtb2RlIHNvIHdlIHJlY2VpdmUgZXZlcnl0aGluZywgdGhpcwogCSAqIGlzIGFsc28gdHJ1ZSB3aGVuIHdlIGdldCBhIHBhY2tldCBmaWx0ZXIgb2YgMAogCSAqLwotCWlmICgoZmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTKSB8fCBmaWx0ZXIgPT0gMCkgewotCQlwZl9jdHJsLmJpdHMuZmlsdGVyX2Jyb2FkX2VuID0gMDsKLQkJcGZfY3RybC5iaXRzLmZpbHRlcl9tdWx0aV9lbiA9IDA7Ci0JCXBmX2N0cmwuYml0cy5maWx0ZXJfdW5pX2VuID0gMDsKLQl9IGVsc2UgeworCWlmICgoZmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX1BST01JU0NVT1VTKSB8fCBmaWx0ZXIgPT0gMCkKKwkJcGZfY3RybCAmPSB+NzsJLyogQ2xlYXIgZmlsdGVyIGJpdHMgKi8KKwllbHNlIHsKIAkJLyoKIAkJICogU2V0IHVzIHVwIHdpdGggTXVsdGljYXN0IHBhY2tldCBmaWx0ZXJpbmcuICBUaHJlZSBjYXNlcyBhcmUKIAkJICogcG9zc2libGUgLSAoMSkgd2UgaGF2ZSBhIG11bHRpLWNhc3QgbGlzdCwgKDIpIHdlIHJlY2VpdmUgQUxMCiAJCSAqIG11bHRpY2FzdCBlbnRyaWVzIG9yICgzKSB3ZSByZWNlaXZlIG5vbmUuCiAJCSAqLwotCQlpZiAoZmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QpIHsKLQkJCXBmX2N0cmwuYml0cy5maWx0ZXJfbXVsdGlfZW4gPSAwOwotCQl9IGVsc2UgeworCQlpZiAoZmlsdGVyICYgRVQxMzFYX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1QpCisJCQlwZl9jdHJsICY9IH4yOwkvKiBNdWx0aWNhc3QgZmlsdGVyIGJpdCAqLworCQllbHNlIHsKIAkJCVNldHVwRGV2aWNlRm9yTXVsdGljYXN0KGFkYXB0ZXIpOwotCQkJcGZfY3RybC5iaXRzLmZpbHRlcl9tdWx0aV9lbiA9IDE7Ci0JCQljdHJsLmJpdHMucGt0X2ZpbHRlcl9kaXNhYmxlID0gMDsKKwkJCXBmX2N0cmwgfD0gMjsKKwkJCWN0cmwgJj0gfjB4MDQ7CiAJCX0KIAogCQkvKiBTZXQgdXMgdXAgd2l0aCBVbmljYXN0IHBhY2tldCBmaWx0ZXJpbmcgKi8KIAkJaWYgKGZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9ESVJFQ1RFRCkgewogCQkJU2V0dXBEZXZpY2VGb3JVbmljYXN0KGFkYXB0ZXIpOwotCQkJcGZfY3RybC5iaXRzLmZpbHRlcl91bmlfZW4gPSAxOwotCQkJY3RybC5iaXRzLnBrdF9maWx0ZXJfZGlzYWJsZSA9IDA7CisJCQlwZl9jdHJsIHw9IDQ7CisJCQljdHJsICY9IH4weDA0OwogCQl9CiAKIAkJLyogU2V0IHVzIHVwIHdpdGggQnJvYWRjYXN0IHBhY2tldCBmaWx0ZXJpbmcgKi8KIAkJaWYgKGZpbHRlciAmIEVUMTMxWF9QQUNLRVRfVFlQRV9CUk9BRENBU1QpIHsKLQkJCXBmX2N0cmwuYml0cy5maWx0ZXJfYnJvYWRfZW4gPSAxOwotCQkJY3RybC5iaXRzLnBrdF9maWx0ZXJfZGlzYWJsZSA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlwZl9jdHJsLmJpdHMuZmlsdGVyX2Jyb2FkX2VuID0gMDsKLQkJfQorCQkJcGZfY3RybCB8PSAxOwkvKiBCcm9hZGNhc3QgZmlsdGVyIGJpdCAqLworCQkJY3RybCAmPSB+MHgwNDsKKwkJfSBlbHNlCisJCQlwZl9jdHJsICY9IH4xOwogCiAJCS8qIFNldHVwIHRoZSByZWNlaXZlIG1hYyBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyAtIFBhY2tldAogCQkgKiBGaWx0ZXIgY29udHJvbCArIHRoZSBlbmFibGUgLyBkaXNhYmxlIGZvciBwYWNrZXQgZmlsdGVyCiAJCSAqIGluIHRoZSBjb250cm9sIHJlZy4KIAkJICovCi0JCXdyaXRlbChwZl9jdHJsLnZhbHVlLAotCQkgICAgICAgJmFkYXB0ZXItPnJlZ3MtPnJ4bWFjLnBmX2N0cmwudmFsdWUpOwotCQl3cml0ZWwoY3RybC52YWx1ZSwgJmFkYXB0ZXItPnJlZ3MtPnJ4bWFjLmN0cmwudmFsdWUpOworCQl3cml0ZWwocGZfY3RybCwgJmFkYXB0ZXItPnJlZ3MtPnJ4bWFjLnBmX2N0cmwpOworCQl3cml0ZWwoY3RybCwgJmFkYXB0ZXItPnJlZ3MtPnJ4bWFjLmN0cmwpOwogCX0KIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtNDExLDkgKzQwNCw5IEBACiB7CiAJc3RydWN0IGV0MTMxeF9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAl1aW50MzJfdCBQYWNrZXRGaWx0ZXIgPSAwOwotCXVpbnQzMl90IGNvdW50OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGRldl9tY19saXN0ICptY2xpc3QgPSBuZXRkZXYtPm1jX2xpc3Q7CisJc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CisJaW50IGk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRhcHRlci0+TG9jaywgZmxhZ3MpOwogCkBAIC00NDQsMTEgKzQzNywxMSBAQAogCQlhZGFwdGVyLT5QYWNrZXRGaWx0ZXIgfD0gRVQxMzFYX1BBQ0tFVF9UWVBFX0FMTF9NVUxUSUNBU1Q7CiAJfQogCi0JaWYgKG5ldGRldi0+bWNfY291bnQgPiBOSUNfTUFYX01DQVNUX0xJU1QpIHsKKwlpZiAobmV0ZGV2X21jX2NvdW50KG5ldGRldikgPiBOSUNfTUFYX01DQVNUX0xJU1QpIHsKIAkJYWRhcHRlci0+UGFja2V0RmlsdGVyIHw9IEVUMTMxWF9QQUNLRVRfVFlQRV9BTExfTVVMVElDQVNUOwogCX0KIAotCWlmIChuZXRkZXYtPm1jX2NvdW50IDwgMSkgeworCWlmIChuZXRkZXZfbWNfY291bnQobmV0ZGV2KSA8IDEpIHsKIAkJYWRhcHRlci0+UGFja2V0RmlsdGVyICY9IH5FVDEzMVhfUEFDS0VUX1RZUEVfQUxMX01VTFRJQ0FTVDsKIAkJYWRhcHRlci0+UGFja2V0RmlsdGVyICY9IH5FVDEzMVhfUEFDS0VUX1RZUEVfTVVMVElDQVNUOwogCX0gZWxzZSB7CkBAIC00NTYsMTIgKzQ0OSwxMyBAQAogCX0KIAogCS8qIFNldCB2YWx1ZXMgaW4gdGhlIHByaXZhdGUgYWRhcHRlciBzdHJ1Y3QgKi8KLQlhZGFwdGVyLT5NQ0FkZHJlc3NDb3VudCA9IG5ldGRldi0+bWNfY291bnQ7Ci0KLQlpZiAobmV0ZGV2LT5tY19jb3VudCkgewotCQljb3VudCA9IG5ldGRldi0+bWNfY291bnQgLSAxOwotCQltZW1jcHkoYWRhcHRlci0+TUNMaXN0W2NvdW50XSwgbWNsaXN0LT5kbWlfYWRkciwgRVRIX0FMRU4pOworCWkgPSAwOworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgbmV0ZGV2KSB7CisJCWlmIChpID09IE5JQ19NQVhfTUNBU1RfTElTVCkKKwkJCWJyZWFrOworCQltZW1jcHkoYWRhcHRlci0+TUNMaXN0W2krK10sIG1jbGlzdC0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKIAl9CisJYWRhcHRlci0+TUNBZGRyZXNzQ291bnQgPSBpOwogCiAJLyogQXJlIHRoZSBuZXcgZmxhZ3MgZGlmZmVyZW50IGZyb20gdGhlIHByZXZpb3VzIG9uZXM/IElmIG5vdCwgdGhlbiBubwogCSAqIGFjdGlvbiBpcyByZXF1aXJlZApAQCAtNjc0LDEyICs2NjgsOCBAQAogCiAJbWVtY3B5KG5ldGRldi0+ZGV2X2FkZHIsIGFkZHJlc3MtPnNhX2RhdGEsIG5ldGRldi0+YWRkcl9sZW4pOwogCi0JcHJpbnRrKEtFUk5fSU5GTwotCQkiJXM6IFNldHRpbmcgTUFDIGFkZHJlc3MgdG8gJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCi0JCQluZXRkZXYtPm5hbWUsCi0JCQluZXRkZXYtPmRldl9hZGRyWzBdLCBuZXRkZXYtPmRldl9hZGRyWzFdLAotCQkJbmV0ZGV2LT5kZXZfYWRkclsyXSwgbmV0ZGV2LT5kZXZfYWRkclszXSwKLQkJCW5ldGRldi0+ZGV2X2FkZHJbNF0sIG5ldGRldi0+ZGV2X2FkZHJbNV0pOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBTZXR0aW5nIE1BQyBhZGRyZXNzIHRvICVwTVxuIiwKKwkJCW5ldGRldi0+bmFtZSwgbmV0ZGV2LT5kZXZfYWRkcik7CiAKIAkvKiBGcmVlIFJ4IERNQSBtZW1vcnkgKi8KIAlldDEzMXhfYWRhcHRlcl9tZW1vcnlfZnJlZShhZGFwdGVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X25ldGRldi5oIGIvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfbmV0ZGV2LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlYjRhOTIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfbmV0ZGV2LmgKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQWdlcmUgU3lzdGVtcyBJbmMuCi0gKiAxMC8xMDAvMTAwMCBCYXNlLVQgRXRoZXJuZXQgRHJpdmVyIGZvciB0aGUgRVQxMzAxIGFuZCBFVDEzMXggc2VyaWVzIE1BQ3MKLSAqCi0gKiBDb3B5cmlnaHQgwqkgMjAwNSBBZ2VyZSBTeXN0ZW1zIEluYy4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiAgIGh0dHA6Ly93d3cuYWdlcmUuY29tCi0gKgotICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqCi0gKiBldDEzMXhfbmV0ZGV2LmggLSBEZWZpbmVzLCBzdHJ1Y3RzLCBlbnVtcywgcHJvdG90eXBlcywgZXRjLiByZWxhdGVkIHRvIHRoZQotICogICAgICAgICAgICAgICAgICAgZHJpdmVyJ3MgbmV0X2RldmljZSBzdXBwb3J0LgotICoKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKgotICogU09GVFdBUkUgTElDRU5TRQotICoKLSAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLAotICogd2hpY2ggeW91IHNob3VsZCByZWFkIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLiAgVXNpbmcgdGhpcwotICogc29mdHdhcmUgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIElmIHlvdSBkbwotICogbm90IGFncmVlIHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGRvIG5vdCB1c2UgdGhlIHNvZnR3YXJlLgotICoKLSAqIENvcHlyaWdodCDCqSAyMDA1IEFnZXJlIFN5c3RlbXMgSW5jLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9ucywgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzCi0gKiAgICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhcyBjb21tZW50cyBpbiB0aGUgY29kZSBhcwotICogICAgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiAgICBkaXN0cmlidXRpb24uCi0gKgotICogLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCi0gKiAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAuIE5laXRoZXIgdGhlIG5hbWUgb2YgQWdlcmUgU3lzdGVtcyBJbmMuIG5vciB0aGUgbmFtZXMgb2YgdGhlIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBEaXNjbGFpbWVyCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCi0gKiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU5GUklOR0VNRU5UIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgQU5ZCi0gKiBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhJUyBTT0ZUV0FSRSBJUyBTT0xFTFkgQVQgVEhFIFVTRVJTIE9XTgotICogUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgQUdFUkUgU1lTVEVNUyBJTkMuIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAotICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSAqIERBTUFHRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfX0VUMTMxWF9ORVRERVZfSF9fCi0jZGVmaW5lIF9fRVQxMzFYX05FVERFVl9IX18KLQotc3RydWN0IG5ldF9kZXZpY2UgKmV0MTMxeF9kZXZpY2VfYWxsb2Modm9pZCk7Ci0KLSNlbmRpZiAvKiBfX0VUMTMxWF9ORVRERVZfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF92ZXJzaW9uLmggYi9kcml2ZXJzL3N0YWdpbmcvZXQxMzF4L2V0MTMxeF92ZXJzaW9uLmgKaW5kZXggNTY4ZjZjOC4uMmFhOWJkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2V0MTMxeC9ldDEzMXhfdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ldDEzMXgvZXQxMzF4X3ZlcnNpb24uaApAQCAtNjIsMjAgKzYyLDEzIEBACiAjZGVmaW5lIERSSVZFUl9MSUNFTlNFCQkiRHVhbCBCU0QvR1BMIgogI2RlZmluZSBEUklWRVJfREVWSUNFX1NUUklORwkiRVQxMzEwIgogI2RlZmluZSBEUklWRVJfTkFNRQkJImV0MTMxeCIKLSNkZWZpbmUgRFJJVkVSX01BSk9SX1ZFUlNJT04JMQotI2RlZmluZSBEUklWRVJfTUlOT1JfVkVSU0lPTgkyCi0jZGVmaW5lIERSSVZFUl9QQVRDSF9WRVJTSU9OCTMKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fU1RSSU5HCSIxLjIuMyIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT05fU1RSSU5HCSIxLjIuMy1sayIKICNkZWZpbmUgRFJJVkVSX1ZFTkRPUgkJIkFnZXJlIFN5c3RlbXMsIGh0dHA6Ly93d3cuYWdlcmUuY29tIgogI2RlZmluZSBEUklWRVJfREVTQwkJIjEwLzEwMC8xMDAwIEJhc2UtVCBFdGhlcm5ldCBEcml2ZXIiCiAKLSNkZWZpbmUgU1RSVUNUX01PRFVMRQkJIm5ldCIJLyogYmx1eDogbWlzc2VkIGJ5IHRoZSBrZXJuZWwgKi8KLQogI2RlZmluZSBEUklWRVJfSU5GTwkJRFJJVkVSX0RFU0MgIiBmb3IgdGhlICJcCiAJCQkJRFJJVkVSX0RFVklDRV9TVFJJTkcgIiwgdiIgXAogCQkJCURSSVZFUl9WRVJTSU9OX1NUUklORyAiIGJ5ICIgXAogCQkJCURSSVZFUl9WRU5ET1IKIAotI2RlZmluZSBEUklWRVJfTkFNRV9FWFQJCSJldDEzMXgua28iCi0KICNlbmRpZiAvKiBfX0VUMTMxWF9WRVJTSU9OX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL2FscGhhdHJhY2suYyBiL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci9hbHBoYXRyYWNrLmMKaW5kZXggMTVhZWQ4Ny4uYTUwYTIxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL2FscGhhdHJhY2suYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvYWxwaGF0cmFjay5jCkBAIC01OCw3ICs1OCw3IEBACiAjZW5kaWYKIAogLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl9hbHBoYXRyYWNrX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2FscGhhdHJhY2tfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRShWRU5ET1JfSUQsIFBST0RVQ1RfSUQpfSwKIAl7fQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL3RyYW56cG9ydC5jIGIvZHJpdmVycy9zdGFnaW5nL2Zyb250aWVyL3RyYW56cG9ydC5jCmluZGV4IGVmOGZjYzguLjJmMDNmNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9mcm9udGllci90cmFuenBvcnQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZnJvbnRpZXIvdHJhbnpwb3J0LmMKQEAgLTU1LDcgKzU1LDcgQEAKICNlbmRpZgogCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX3RyYW56cG9ydF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVzYl90cmFuenBvcnRfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRShWRU5ET1JfSUQsIFBST0RVQ1RfSUQpfSwKIAl7fQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctZHJpdmVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1kcml2ZXIuYwppbmRleCBmYjEzNDVmLi5kNDJiYTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1kcml2ZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy1kcml2ZXIuYwpAQCAtMTI4LDYgKzEyOCw4IEBACiAJcmV0dXJuIHJ2OwogfQogCitNT0RVTEVfRklSTVdBUkUoImdvNzAwN2Z3LmJpbiIpOworCiAvKgogICogQm9vdCB0aGUgZW5jb2RlciBhbmQgcmVnaXN0ZXIgdGhlIEkyQyBhZGFwdGVyIGlmIHJlcXVlc3RlZC4gIERvIHRoZQogICogbWluaW11bSBpbml0aWFsaXphdGlvbiBuZWNlc3NhcnksIHNpbmNlIHRoZSBib2FyZC1zcGVjaWZpYyBjb2RlIG1heQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9nbzcwMDctdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy11c2IuYwppbmRleCAxZTg5ZGMwLi5lZTI3OGY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy11c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L2dvNzAwNy11c2IuYwpAQCAtNDQ0LDcgKzQ0NCw5IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBnbzcwMDdfdXNiX2lkX3RhYmxlW10gPSB7CitNT0RVTEVfRklSTVdBUkUoImdvNzAwN3R2LmJpbiIpOworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZ283MDA3X3VzYl9pZF90YWJsZVtdID0gewogCXsKIAkJLm1hdGNoX2ZsYWdzCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0VfQU5EX1ZFUlNJT04gfAogCQkJCQlVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1ib2FyZC5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1ib2FyZC5jCmluZGV4IGMzMjRmNmUuLmRjODk1MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtYm9hcmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWJvYXJkLmMKQEAgLTY2Nyw3ICs2NjcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19kZXZpY2VfaWQgczIyNTBfaWRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzMjI1MF9pZFtdID0gewogCXsgInMyMjUwIiwgMCB9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtbG9hZGVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3MyMjUwLWxvYWRlci5jCmluZGV4IGMxNTJhYjkuLjFkZTJkZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvczIyNTAtbG9hZGVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zMjI1MC1sb2FkZXIuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAKIHN0YXRpYyB2b2lkIHMyMjUwbG9hZGVyX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKIHsKLQlwZGV2aWNlX2V4dGVuc2lvbl90IHMgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJcGRldmljZV9leHRlbnNpb25fdCBzOwogCXByaW50ayhLRVJOX0lORk8gInMyMjUwOiBkaXNjb25uZWN0XG4iKTsKIAlsb2NrX2tlcm5lbCgpOwogCXMgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CkBAIC0xNDgsNyArMTQ4LDcgQEAKIAl1bmxvY2tfa2VybmVsKCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzMjI1MGxvYWRlcl9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzMjI1MGxvYWRlcl9pZHNbXSA9IHsKIAl7VVNCX0RFVklDRSgweDE5NDMsIDB4YTI1MCl9LAogCXt9ICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvc2FhNzEzNC1nbzcwMDcuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvc2FhNzEzNC1nbzcwMDcuYwppbmRleCA2NjViYmY1Li5iMjVkN2QyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3NhYTcxMzQtZ283MDA3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy9zYWE3MTM0LWdvNzAwNy5jCkBAIC04NCw2ICs4NCw3IEBACiAJCX0sCiAJfSwKIH07CitNT0RVTEVfRklSTVdBUkUoImdvNzAwN3R2LmJpbiIpOwogCiAvKioqKioqKioqKioqKioqKioqKioqIERyaXZlciBmb3IgR1BJTyBIUEkgaW50ZXJmYWNlICoqKioqKioqKioqKioqKioqKioqKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtb3Y3NjQwLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1vdjc2NDAuYwppbmRleCAwNGQ2ZDNhLi40ZjBjYmRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1vdjc2NDAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1vdjc2NDAuYwpAQCAtNzcsNyArNzcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19kZXZpY2VfaWQgd2lzX292NzY0MF9pZFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdpc19vdjc2NDBfaWRbXSA9IHsKIAl7ICJ3aXNfb3Y3NjQwIiwgMCB9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNhYTcxMTMuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNhYTcxMTMuYwppbmRleCA5YWI4OTNiLi5kMTk2ZTE2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtc2FhNzExMy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNhYTcxMTMuYwpAQCAtMzA0LDcgKzMwNCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3aXNfc2FhNzExM19pZFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdpc19zYWE3MTEzX2lkW10gPSB7CiAJeyAid2lzX3NhYTcxMTMiLCAwIH0sCiAJeyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtc2FhNzExNS5jIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtc2FhNzExNS5jCmluZGV4IDg2ODdhZDIuLjBmMmI0YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNhYTcxMTUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zYWE3MTE1LmMKQEAgLTQzNyw3ICs0MzcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19kZXZpY2VfaWQgd2lzX3NhYTcxMTVfaWRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3aXNfc2FhNzExNV9pZFtdID0gewogCXsgIndpc19zYWE3MTE1IiwgMCB9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNvbnktdHVuZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXNvbnktdHVuZXIuYwppbmRleCAwODY4OTZjLi5jNzIzZTRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy1zb255LXR1bmVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtc29ueS10dW5lci5jCkBAIC02ODgsNyArNjg4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdpc19zb255X3R1bmVyX2lkW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgd2lzX3NvbnlfdHVuZXJfaWRbXSA9IHsKIAl7ICJ3aXNfc29ueV90dW5lciIsIDAgfSwKIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzI4MDQuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXR3MjgwNC5jCmluZGV4IGUxNTc5NGEuLjE5ODM4MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXR3MjgwNC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXR3MjgwNC5jCkBAIC0zMjcsNyArMzI3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdpc190dzI4MDRfaWRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3aXNfdHcyODA0X2lkW10gPSB7CiAJeyAid2lzX3R3MjgwNCIsIDAgfSwKIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy10dzk5MDMuYyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXR3OTkwMy5jCmluZGV4IDUwNmRjYTYuLmY5N2UyYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXR3OTkwMy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXR3OTkwMy5jCkBAIC0zMDksNyArMzA5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfZGV2aWNlX2lkIHdpc190dzk5MDNfaWRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3aXNfdHc5OTAzX2lkW10gPSB7CiAJeyAid2lzX3R3OTkwMyIsIDAgfSwKIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy11ZGExMzQyLmMgYi9kcml2ZXJzL3N0YWdpbmcvZ283MDA3L3dpcy11ZGExMzQyLmMKaW5kZXggNzM5YzdhZS4uNWM0ZWI0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2dvNzAwNy93aXMtdWRhMTM0Mi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9nbzcwMDcvd2lzLXVkYTEzNDIuYwpAQCAtODIsNyArODIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19kZXZpY2VfaWQgd2lzX3VkYTEzNDJfaWRbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB3aXNfdWRhMTM0Ml9pZFtdID0gewogCXsgIndpc191ZGExMzQyIiwgMCB9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9DaGFubmVsLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvQ2hhbm5lbC5jCmluZGV4IDc0NjM3MGUuLmQ0NmViMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9DaGFubmVsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L0NoYW5uZWwuYwpAQCAtOTkxLDkgKzk5MSw4IEBACiB7CiAJc3RydWN0IHZtYnVzX2NoYW5uZWwgKmNoYW5uZWwgPSAoc3RydWN0IHZtYnVzX2NoYW5uZWwgKilkYXRhOwogCi0JaWYgKGNoYW5uZWwtPk9uQ2hhbm5lbENhbGxiYWNrKSB7CisJaWYgKGNoYW5uZWwtPk9uQ2hhbm5lbENhbGxiYWNrKQogCQljaGFubmVsLT5PbkNoYW5uZWxDYWxsYmFjayhjaGFubmVsLT5DaGFubmVsQ2FsbGJhY2tDb250ZXh0KTsKLQl9CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L0h2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvSHYuYwppbmRleCBjMjgwOWYyLi41MTE0OWU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvSHYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvSHYuYwpAQCAtMjA4LDUwICsyMDgsNTEgQEAKIAkvKiBIdlF1ZXJ5SHlwZXJ2aXNvckZlYXR1cmVzKG1heExlYWYpOyAqLwogCiAJLyoKLQkgKiBEZXRlcm1pbmUgaWYgd2UgYXJlIHJ1bm5pbmcgb24geGVubGludXggKGllIHgydiBzaGltKSBvciBuYXRpdmUKLQkgKiBsaW51eAorCSAqIFdlIG9ubHkgc3VwcG9ydCBydW5uaW5nIG9uIHRvcCBvZiBIeXBlci1WCiAJICovCiAJcmRtc3JsKEhWX1g2NF9NU1JfR1VFU1RfT1NfSUQsIGdIdkNvbnRleHQuR3Vlc3RJZCk7Ci0JaWYgKGdIdkNvbnRleHQuR3Vlc3RJZCA9PSAwKSB7Ci0JCS8qIFdyaXRlIG91ciBPUyBpbmZvICovCi0JCXdybXNybChIVl9YNjRfTVNSX0dVRVNUX09TX0lELCBIVl9MSU5VWF9HVUVTVF9JRCk7Ci0JCWdIdkNvbnRleHQuR3Vlc3RJZCA9IEhWX0xJTlVYX0dVRVNUX0lEOwotCX0KIAotCS8qIFNlZSBpZiB0aGUgaHlwZXJjYWxsIHBhZ2UgaXMgYWxyZWFkeSBzZXQgKi8KLQlyZG1zcmwoSFZfWDY0X01TUl9IWVBFUkNBTEwsIGh5cGVyY2FsbE1zci5Bc1VJTlQ2NCk7Ci0JaWYgKGdIdkNvbnRleHQuR3Vlc3RJZCA9PSBIVl9MSU5VWF9HVUVTVF9JRCkgewotCQkvKiBBbGxvY2F0ZSB0aGUgaHlwZXJjYWxsIHBhZ2UgbWVtb3J5ICovCi0JCS8qIHZpcnRBZGRyID0gb3NkX1BhZ2VBbGxvYygxKTsgKi8KLQkJdmlydEFkZHIgPSBvc2RfVmlydHVhbEFsbG9jRXhlYyhQQUdFX1NJWkUpOwotCi0JCWlmICghdmlydEFkZHIpIHsKLQkJCURQUklOVF9FUlIoVk1CVVMsCi0JCQkJICAgInVuYWJsZSB0byBhbGxvY2F0ZSBoeXBlcmNhbGwgcGFnZSEhIik7Ci0JCQlnb3RvIENsZWFudXA7Ci0JCX0KLQotCQloeXBlcmNhbGxNc3IuRW5hYmxlID0gMTsKLQkJLyogaHlwZXJjYWxsTXNyLkd1ZXN0UGh5c2ljYWxBZGRyZXNzID0KLQkJICogCQl2aXJ0X3RvX3BoeXModmlydEFkZHIpID4+IFBBR0VfU0hJRlQ7ICovCi0JCWh5cGVyY2FsbE1zci5HdWVzdFBoeXNpY2FsQWRkcmVzcyA9IHZtYWxsb2NfdG9fcGZuKHZpcnRBZGRyKTsKLQkJd3Jtc3JsKEhWX1g2NF9NU1JfSFlQRVJDQUxMLCBoeXBlcmNhbGxNc3IuQXNVSU5UNjQpOwotCi0JCS8qIENvbmZpcm0gdGhhdCBoeXBlcmNhbGwgcGFnZSBkaWQgZ2V0IHNldHVwLiAqLwotCQloeXBlcmNhbGxNc3IuQXNVSU5UNjQgPSAwOwotCQlyZG1zcmwoSFZfWDY0X01TUl9IWVBFUkNBTEwsIGh5cGVyY2FsbE1zci5Bc1VJTlQ2NCk7Ci0JCWlmICghaHlwZXJjYWxsTXNyLkVuYWJsZSkgewotCQkJRFBSSU5UX0VSUihWTUJVUywgInVuYWJsZSB0byBzZXQgaHlwZXJjYWxsIHBhZ2UhISIpOwotCQkJZ290byBDbGVhbnVwOwotCQl9Ci0KLQkJZ0h2Q29udGV4dC5IeXBlcmNhbGxQYWdlID0gdmlydEFkZHI7Ci0JfSBlbHNlIHsKKwlpZiAoZ0h2Q29udGV4dC5HdWVzdElkICE9IDApIHsKIAkJRFBSSU5UX0VSUihWTUJVUywgIlVua25vd24gZ3Vlc3QgaWQgKDB4JWxseCkhISIsCiAJCQkJZ0h2Q29udGV4dC5HdWVzdElkKTsKIAkJZ290byBDbGVhbnVwOwogCX0KIAorCS8qIFdyaXRlIG91ciBPUyBpbmZvICovCisJd3Jtc3JsKEhWX1g2NF9NU1JfR1VFU1RfT1NfSUQsIEhWX0xJTlVYX0dVRVNUX0lEKTsKKwlnSHZDb250ZXh0Lkd1ZXN0SWQgPSBIVl9MSU5VWF9HVUVTVF9JRDsKKworCS8qIFNlZSBpZiB0aGUgaHlwZXJjYWxsIHBhZ2UgaXMgYWxyZWFkeSBzZXQgKi8KKwlyZG1zcmwoSFZfWDY0X01TUl9IWVBFUkNBTEwsIGh5cGVyY2FsbE1zci5Bc1VJTlQ2NCk7CisKKwkvKgorCSogQWxsb2NhdGUgdGhlIGh5cGVyY2FsbCBwYWdlIG1lbW9yeQorCSogdmlydEFkZHIgPSBvc2RfUGFnZUFsbG9jKDEpOworCSovCisJdmlydEFkZHIgPSBvc2RfVmlydHVhbEFsbG9jRXhlYyhQQUdFX1NJWkUpOworCisJaWYgKCF2aXJ0QWRkcikgeworCQlEUFJJTlRfRVJSKFZNQlVTLAorCQkJICAgInVuYWJsZSB0byBhbGxvY2F0ZSBoeXBlcmNhbGwgcGFnZSEhIik7CisJCWdvdG8gQ2xlYW51cDsKKwl9CisKKwloeXBlcmNhbGxNc3IuRW5hYmxlID0gMTsKKworCWh5cGVyY2FsbE1zci5HdWVzdFBoeXNpY2FsQWRkcmVzcyA9IHZtYWxsb2NfdG9fcGZuKHZpcnRBZGRyKTsKKwl3cm1zcmwoSFZfWDY0X01TUl9IWVBFUkNBTEwsIGh5cGVyY2FsbE1zci5Bc1VJTlQ2NCk7CisKKwkvKiBDb25maXJtIHRoYXQgaHlwZXJjYWxsIHBhZ2UgZGlkIGdldCBzZXR1cC4gKi8KKwloeXBlcmNhbGxNc3IuQXNVSU5UNjQgPSAwOworCXJkbXNybChIVl9YNjRfTVNSX0hZUEVSQ0FMTCwgaHlwZXJjYWxsTXNyLkFzVUlOVDY0KTsKKworCWlmICghaHlwZXJjYWxsTXNyLkVuYWJsZSkgeworCQlEUFJJTlRfRVJSKFZNQlVTLCAidW5hYmxlIHRvIHNldCBoeXBlcmNhbGwgcGFnZSEhIik7CisJCWdvdG8gQ2xlYW51cDsKKwl9CisKKwlnSHZDb250ZXh0Lkh5cGVyY2FsbFBhZ2UgPSB2aXJ0QWRkcjsKKwogCURQUklOVF9JTkZPKFZNQlVTLCAiSHlwZXJjYWxsIHBhZ2UgVkE9JXAsIFBBPTB4JTBsbHgiLAogCQkgICAgZ0h2Q29udGV4dC5IeXBlcmNhbGxQYWdlLAogCQkgICAgKHU2NCloeXBlcmNhbGxNc3IuR3Vlc3RQaHlzaWNhbEFkZHJlc3MgPDwgUEFHRV9TSElGVCk7CkBAIC0yNzMsOCArMjc0LDYgQEAKIAlnSHZDb250ZXh0LlNpZ25hbEV2ZW50UGFyYW0tPkZsYWdOdW1iZXIgPSAwOwogCWdIdkNvbnRleHQuU2lnbmFsRXZlbnRQYXJhbS0+UnN2ZFogPSAwOwogCi0JLyogRFBSSU5UX0RCRyhWTUJVUywgIk15IGlkICVsbHUiLCBIdkdldEN1cnJlbnRQYXJ0aXRpb25JZCgpKTsgKi8KLQogCURQUklOVF9FWElUKFZNQlVTKTsKIAogCXJldHVybiByZXQ7CkBAIC0zMTEsMTcgKzMxMCwxNCBAQAogCQlrZnJlZShnSHZDb250ZXh0LlNpZ25hbEV2ZW50QnVmZmVyKTsKIAl9CiAKLQlpZiAoZ0h2Q29udGV4dC5HdWVzdElkID09IEhWX0xJTlVYX0dVRVNUX0lEKSB7Ci0JCWlmIChnSHZDb250ZXh0Lkh5cGVyY2FsbFBhZ2UpIHsKLQkJCWh5cGVyY2FsbE1zci5Bc1VJTlQ2NCA9IDA7Ci0JCQl3cm1zcmwoSFZfWDY0X01TUl9IWVBFUkNBTEwsIGh5cGVyY2FsbE1zci5Bc1VJTlQ2NCk7Ci0JCQl2ZnJlZShnSHZDb250ZXh0Lkh5cGVyY2FsbFBhZ2UpOwotCQkJZ0h2Q29udGV4dC5IeXBlcmNhbGxQYWdlID0gTlVMTDsKLQkJfQorCWlmIChnSHZDb250ZXh0Lkh5cGVyY2FsbFBhZ2UpIHsKKwkJaHlwZXJjYWxsTXNyLkFzVUlOVDY0ID0gMDsKKwkJd3Jtc3JsKEhWX1g2NF9NU1JfSFlQRVJDQUxMLCBoeXBlcmNhbGxNc3IuQXNVSU5UNjQpOworCQl2ZnJlZShnSHZDb250ZXh0Lkh5cGVyY2FsbFBhZ2UpOworCQlnSHZDb250ZXh0Lkh5cGVyY2FsbFBhZ2UgPSBOVUxMOwogCX0KIAogCURQUklOVF9FWElUKFZNQlVTKTsKLQogfQogCiAvKioKQEAgLTM5Myw3ICszODksNyBAQAogCXVuaW9uIGh2X3N5bmljX3NpZWZwIHNpZWZwOwogCXVuaW9uIGh2X3N5bmljX3NpbnQgc2hhcmVkU2ludDsKIAl1bmlvbiBodl9zeW5pY19zY29udHJvbCBzY3RybDsKLQl1NjQgZ3Vlc3RJRDsKKwogCXUzMiBpcnFWZWN0b3IgPSAqKCh1MzIgKikoaXJxYXJnKSk7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIApAQCAtNDA5LDcyICs0MDUsNDIgQEAKIAogCURQUklOVF9JTkZPKFZNQlVTLCAiU3luSUMgdmVyc2lvbjogJWxseCIsIHZlcnNpb24pOwogCi0JLyogVE9ETzogSGFuZGxlIFNNUCAqLwotCWlmIChnSHZDb250ZXh0Lkd1ZXN0SWQgPT0gSFZfWEVOTElOVVhfR1VFU1RfSUQpIHsKLQkJRFBSSU5UX0lORk8oVk1CVVMsICJTa2lwcGluZyBTSU1QIGFuZCBTSUVGUCBzZXR1cCBzaW5jZSAiCi0JCQkJIml0IGlzIGFscmVhZHkgc2V0LiIpOworCWdIdkNvbnRleHQuc3luSUNNZXNzYWdlUGFnZVtjcHVdID0gKHZvaWQgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CiAKLQkJcmRtc3JsKEhWX1g2NF9NU1JfU0lNUCwgc2ltcC5Bc1VJTlQ2NCk7Ci0JCXJkbXNybChIVl9YNjRfTVNSX1NJRUZQLCBzaWVmcC5Bc1VJTlQ2NCk7Ci0KLQkJRFBSSU5UX0RCRyhWTUJVUywgIlNpbXA6ICVsbHgsIFNpZmVwOiAlbGx4IiwKLQkJCSAgIHNpbXAuQXNVSU5UNjQsIHNpZWZwLkFzVUlOVDY0KTsKLQotCQkvKgotCQkgKiBEZXRlcm1pbmUgaWYgd2UgYXJlIHJ1bm5pbmcgb24geGVubGludXggKGllIHgydiBzaGltKSBvcgotCQkgKiBuYXRpdmUgbGludXgKLQkJICovCi0JCXJkbXNybChIVl9YNjRfTVNSX0dVRVNUX09TX0lELCBndWVzdElEKTsKLQkJaWYgKGd1ZXN0SUQgPT0gSFZfTElOVVhfR1VFU1RfSUQpIHsKLQkJCWdIdkNvbnRleHQuc3luSUNNZXNzYWdlUGFnZVtjcHVdID0KLQkJCQlwaHlzX3RvX3ZpcnQoc2ltcC5CYXNlU2ltcEdwYSA8PCBQQUdFX1NISUZUKTsKLQkJCWdIdkNvbnRleHQuc3luSUNFdmVudFBhZ2VbY3B1XSA9Ci0JCQkJcGh5c190b192aXJ0KHNpZWZwLkJhc2VTaWVmcEdwYSA8PCBQQUdFX1NISUZUKTsKLQkJfSBlbHNlIHsKLQkJCURQUklOVF9FUlIoVk1CVVMsICJ1bmtub3duIGd1ZXN0IGlkISEiKTsKLQkJCWdvdG8gQ2xlYW51cDsKLQkJfQotCQlEUFJJTlRfREJHKFZNQlVTLCAiTUFQUEVEOiBTaW1wOiAlcCwgU2lmZXA6ICVwIiwKLQkJCSAgIGdIdkNvbnRleHQuc3luSUNNZXNzYWdlUGFnZVtjcHVdLAotCQkJICAgZ0h2Q29udGV4dC5zeW5JQ0V2ZW50UGFnZVtjcHVdKTsKLQl9IGVsc2UgewotCQlnSHZDb250ZXh0LnN5bklDTWVzc2FnZVBhZ2VbY3B1XSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOwotCQlpZiAoZ0h2Q29udGV4dC5zeW5JQ01lc3NhZ2VQYWdlW2NwdV0gPT0gTlVMTCkgewotCQkJRFBSSU5UX0VSUihWTUJVUywKLQkJCQkgICAidW5hYmxlIHRvIGFsbG9jYXRlIFNZTklDIG1lc3NhZ2UgcGFnZSEhIik7Ci0JCQlnb3RvIENsZWFudXA7Ci0JCX0KLQotCQlnSHZDb250ZXh0LnN5bklDRXZlbnRQYWdlW2NwdV0gPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKLQkJaWYgKGdIdkNvbnRleHQuc3luSUNFdmVudFBhZ2VbY3B1XSA9PSBOVUxMKSB7Ci0JCQlEUFJJTlRfRVJSKFZNQlVTLAotCQkJCSAgICJ1bmFibGUgdG8gYWxsb2NhdGUgU1lOSUMgZXZlbnQgcGFnZSEhIik7Ci0JCQlnb3RvIENsZWFudXA7Ci0JCX0KLQotCQkvKiBTZXR1cCB0aGUgU3luaWMncyBtZXNzYWdlIHBhZ2UgKi8KLQkJcmRtc3JsKEhWX1g2NF9NU1JfU0lNUCwgc2ltcC5Bc1VJTlQ2NCk7Ci0JCXNpbXAuU2ltcEVuYWJsZWQgPSAxOwotCQlzaW1wLkJhc2VTaW1wR3BhID0gdmlydF90b19waHlzKGdIdkNvbnRleHQuc3luSUNNZXNzYWdlUGFnZVtjcHVdKQotCQkJCQk+PiBQQUdFX1NISUZUOwotCi0JCURQUklOVF9EQkcoVk1CVVMsICJIVl9YNjRfTVNSX1NJTVAgbXNyIHNldCB0bzogJWxseCIsCi0JCQkJc2ltcC5Bc1VJTlQ2NCk7Ci0KLQkJd3Jtc3JsKEhWX1g2NF9NU1JfU0lNUCwgc2ltcC5Bc1VJTlQ2NCk7Ci0KLQkJLyogU2V0dXAgdGhlIFN5bmljJ3MgZXZlbnQgcGFnZSAqLwotCQlyZG1zcmwoSFZfWDY0X01TUl9TSUVGUCwgc2llZnAuQXNVSU5UNjQpOwotCQlzaWVmcC5TaWVmcEVuYWJsZWQgPSAxOwotCQlzaWVmcC5CYXNlU2llZnBHcGEgPSB2aXJ0X3RvX3BoeXMoZ0h2Q29udGV4dC5zeW5JQ0V2ZW50UGFnZVtjcHVdKQotCQkJCQk+PiBQQUdFX1NISUZUOwotCi0JCURQUklOVF9EQkcoVk1CVVMsICJIVl9YNjRfTVNSX1NJRUZQIG1zciBzZXQgdG86ICVsbHgiLAotCQkJCXNpZWZwLkFzVUlOVDY0KTsKLQotCQl3cm1zcmwoSFZfWDY0X01TUl9TSUVGUCwgc2llZnAuQXNVSU5UNjQpOworCWlmIChnSHZDb250ZXh0LnN5bklDTWVzc2FnZVBhZ2VbY3B1XSA9PSBOVUxMKSB7CisJCURQUklOVF9FUlIoVk1CVVMsCisJCQkgICAidW5hYmxlIHRvIGFsbG9jYXRlIFNZTklDIG1lc3NhZ2UgcGFnZSEhIik7CisJCWdvdG8gQ2xlYW51cDsKIAl9CiAKKwlnSHZDb250ZXh0LnN5bklDRXZlbnRQYWdlW2NwdV0gPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKTsKKworCWlmIChnSHZDb250ZXh0LnN5bklDRXZlbnRQYWdlW2NwdV0gPT0gTlVMTCkgeworCQlEUFJJTlRfRVJSKFZNQlVTLAorCQkJICAgInVuYWJsZSB0byBhbGxvY2F0ZSBTWU5JQyBldmVudCBwYWdlISEiKTsKKwkJZ290byBDbGVhbnVwOworCX0KKworCS8qIFNldHVwIHRoZSBTeW5pYydzIG1lc3NhZ2UgcGFnZSAqLworCXJkbXNybChIVl9YNjRfTVNSX1NJTVAsIHNpbXAuQXNVSU5UNjQpOworCXNpbXAuU2ltcEVuYWJsZWQgPSAxOworCXNpbXAuQmFzZVNpbXBHcGEgPSB2aXJ0X3RvX3BoeXMoZ0h2Q29udGV4dC5zeW5JQ01lc3NhZ2VQYWdlW2NwdV0pCisJCT4+IFBBR0VfU0hJRlQ7CisKKwlEUFJJTlRfREJHKFZNQlVTLCAiSFZfWDY0X01TUl9TSU1QIG1zciBzZXQgdG86ICVsbHgiLCBzaW1wLkFzVUlOVDY0KTsKKworCXdybXNybChIVl9YNjRfTVNSX1NJTVAsIHNpbXAuQXNVSU5UNjQpOworCisJLyogU2V0dXAgdGhlIFN5bmljJ3MgZXZlbnQgcGFnZSAqLworCXJkbXNybChIVl9YNjRfTVNSX1NJRUZQLCBzaWVmcC5Bc1VJTlQ2NCk7CisJc2llZnAuU2llZnBFbmFibGVkID0gMTsKKwlzaWVmcC5CYXNlU2llZnBHcGEgPSB2aXJ0X3RvX3BoeXMoZ0h2Q29udGV4dC5zeW5JQ0V2ZW50UGFnZVtjcHVdKQorCQk+PiBQQUdFX1NISUZUOworCisJRFBSSU5UX0RCRyhWTUJVUywgIkhWX1g2NF9NU1JfU0lFRlAgbXNyIHNldCB0bzogJWxseCIsIHNpZWZwLkFzVUlOVDY0KTsKKworCXdybXNybChIVl9YNjRfTVNSX1NJRUZQLCBzaWVmcC5Bc1VJTlQ2NCk7CisKIAkvKiBTZXR1cCB0aGUgaW50ZXJjZXB0aW9uIFNJTlQuICovCiAJLyogd3Jtc3JsKChIVl9YNjRfTVNSX1NJTlQwICsgSFZfU1lOSUNfSU5URVJDRVBUSU9OX1NJTlRfSU5ERVgpLCAqLwogCS8qCSAgaW50ZXJjZXB0aW9uU2ludC5Bc1VJTlQ2NCk7ICovCkBAIC01MDUsMTMgKzQ3MSwxMSBAQAogCXJldHVybjsKIAogQ2xlYW51cDoKLQlpZiAoZ0h2Q29udGV4dC5HdWVzdElkID09IEhWX0xJTlVYX0dVRVNUX0lEKSB7Ci0JCWlmIChnSHZDb250ZXh0LnN5bklDRXZlbnRQYWdlW2NwdV0pCi0JCQlvc2RfUGFnZUZyZWUoZ0h2Q29udGV4dC5zeW5JQ0V2ZW50UGFnZVtjcHVdLCAxKTsKKwlpZiAoZ0h2Q29udGV4dC5zeW5JQ0V2ZW50UGFnZVtjcHVdKQorCQlvc2RfUGFnZUZyZWUoZ0h2Q29udGV4dC5zeW5JQ0V2ZW50UGFnZVtjcHVdLCAxKTsKIAotCQlpZiAoZ0h2Q29udGV4dC5zeW5JQ01lc3NhZ2VQYWdlW2NwdV0pCi0JCQlvc2RfUGFnZUZyZWUoZ0h2Q29udGV4dC5zeW5JQ01lc3NhZ2VQYWdlW2NwdV0sIDEpOwotCX0KKwlpZiAoZ0h2Q29udGV4dC5zeW5JQ01lc3NhZ2VQYWdlW2NwdV0pCisJCW9zZF9QYWdlRnJlZShnSHZDb250ZXh0LnN5bklDTWVzc2FnZVBhZ2VbY3B1XSwgMSk7CiAKIAlEUFJJTlRfRVhJVChWTUJVUyk7CiAJcmV0dXJuOwpAQCAtNTQyLDI3ICs1MDYsMjAgQEAKIAkvKiBEaXNhYmxlIHRoZSBpbnRlcnJ1cHQgKi8KIAl3cm1zcmwoSFZfWDY0X01TUl9TSU5UMCArIFZNQlVTX01FU1NBR0VfU0lOVCwgc2hhcmVkU2ludC5Bc1VJTlQ2NCk7CiAKLQkvKgotCSAqIERpc2FibGUgYW5kIGZyZWUgdGhlIHJlc291cmNlcyBvbmx5IGlmIHdlIGFyZSBydW5uaW5nIGFzCi0JICogbmF0aXZlIGxpbnV4IHNpbmNlIGluIHhlbmxpbnV4LCB3ZSBhcmUgc2hhcmluZyB0aGUKLQkgKiByZXNvdXJjZXMgd2l0aCB0aGUgeDJ2IHNoaW0KLQkgKi8KLQlpZiAoZ0h2Q29udGV4dC5HdWVzdElkID09IEhWX0xJTlVYX0dVRVNUX0lEKSB7Ci0JCXJkbXNybChIVl9YNjRfTVNSX1NJTVAsIHNpbXAuQXNVSU5UNjQpOwotCQlzaW1wLlNpbXBFbmFibGVkID0gMDsKLQkJc2ltcC5CYXNlU2ltcEdwYSA9IDA7CisJcmRtc3JsKEhWX1g2NF9NU1JfU0lNUCwgc2ltcC5Bc1VJTlQ2NCk7CisJc2ltcC5TaW1wRW5hYmxlZCA9IDA7CisJc2ltcC5CYXNlU2ltcEdwYSA9IDA7CiAKLQkJd3Jtc3JsKEhWX1g2NF9NU1JfU0lNUCwgc2ltcC5Bc1VJTlQ2NCk7CisJd3Jtc3JsKEhWX1g2NF9NU1JfU0lNUCwgc2ltcC5Bc1VJTlQ2NCk7CiAKLQkJcmRtc3JsKEhWX1g2NF9NU1JfU0lFRlAsIHNpZWZwLkFzVUlOVDY0KTsKLQkJc2llZnAuU2llZnBFbmFibGVkID0gMDsKLQkJc2llZnAuQmFzZVNpZWZwR3BhID0gMDsKKwlyZG1zcmwoSFZfWDY0X01TUl9TSUVGUCwgc2llZnAuQXNVSU5UNjQpOworCXNpZWZwLlNpZWZwRW5hYmxlZCA9IDA7CisJc2llZnAuQmFzZVNpZWZwR3BhID0gMDsKIAotCQl3cm1zcmwoSFZfWDY0X01TUl9TSUVGUCwgc2llZnAuQXNVSU5UNjQpOworCXdybXNybChIVl9YNjRfTVNSX1NJRUZQLCBzaWVmcC5Bc1VJTlQ2NCk7CiAKLQkJb3NkX1BhZ2VGcmVlKGdIdkNvbnRleHQuc3luSUNNZXNzYWdlUGFnZVtjcHVdLCAxKTsKLQkJb3NkX1BhZ2VGcmVlKGdIdkNvbnRleHQuc3luSUNFdmVudFBhZ2VbY3B1XSwgMSk7Ci0JfQorCW9zZF9QYWdlRnJlZShnSHZDb250ZXh0LnN5bklDTWVzc2FnZVBhZ2VbY3B1XSwgMSk7CisJb3NkX1BhZ2VGcmVlKGdIdkNvbnRleHQuc3luSUNFdmVudFBhZ2VbY3B1XSwgMSk7CiAKIAlEUFJJTlRfRVhJVChWTUJVUyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvSHYuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi9Idi5oCmluZGV4IGZjZTRiNWMuLjQxZjVlYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9Idi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9Idi5oCkBAIC00MSwxMSArNDEsNiBAQAogCiAjZGVmaW5lIEhWX1BSRVNFTlRfQklUCQkJMHg4MDAwMDAwMAogCi0jZGVmaW5lIEhWX1hFTkxJTlVYX0dVRVNUX0lEX0xPCQkweDAwMDAwMDAwCi0jZGVmaW5lIEhWX1hFTkxJTlVYX0dVRVNUX0lEX0hJCQkweDBCMDBCMTM1Ci0jZGVmaW5lIEhWX1hFTkxJTlVYX0dVRVNUX0lECQkoKCh1NjQpSFZfWEVOTElOVVhfR1VFU1RfSURfSEkgPDwgMzIpIFwKLQkJCQkJICB8IEhWX1hFTkxJTlVYX0dVRVNUX0lEX0xPKQotCiAjZGVmaW5lIEhWX0xJTlVYX0dVRVNUX0lEX0xPCQkweDAwMDAwMDAwCiAjZGVmaW5lIEhWX0xJTlVYX0dVRVNUX0lEX0hJCQkweEIxNkIwMEI1CiAjZGVmaW5lIEhWX0xJTlVYX0dVRVNUX0lECQkoKCh1NjQpSFZfTElOVVhfR1VFU1RfSURfSEkgPDwgMzIpIHwgXApAQCAtMTAyLDggKzk3LDkgQEAKIH07CiAKIHN0cnVjdCBodl9jb250ZXh0IHsKLQkvKiBYZW5MaW51eCBvciBuYXRpdmUgTGludXguIElmIFhlbkxpbnV4LCB0aGUgaHlwZXJjYWxsIGFuZCBzeW5pYyBwYWdlcwotCSAqIGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQgKi8KKwkvKiBXZSBvbmx5IHN1cHBvcnQgcnVubmluZyBvbiB0b3Agb2YgSHlwZXItVgorCSogU28gYXQgdGhpcyBwb2ludCB0aGlzIHJlYWxseSBjYW4gb25seSBjb250YWluIHRoZSBIeXBlci1WIElECisJKi8KIAl1NjQgR3Vlc3RJZDsKIAogCXZvaWQgKkh5cGVyY2FsbFBhZ2U7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvTmV0VnNjQXBpLmggYi9kcml2ZXJzL3N0YWdpbmcvaHYvTmV0VnNjQXBpLmgKaW5kZXggMWNlMmI3NC4uOTVkN2EzMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L05ldFZzY0FwaS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9OZXRWc2NBcGkuaApAQCAtMTA1LDggKzEwNSw2IEBACiAJdm9pZCAoKk9uTGlua1N0YXR1c0NoYW5nZWQpKHN0cnVjdCBodl9kZXZpY2UgKmRldiwgdTMyIFN0YXR1cyk7CiAKIAkvKiBTcGVjaWZpYyB0byB0aGlzIGRyaXZlciAqLwotCWludCAoKk9uT3Blbikoc3RydWN0IGh2X2RldmljZSAqZGV2KTsKLQlpbnQgKCpPbkNsb3NlKShzdHJ1Y3QgaHZfZGV2aWNlICpkZXYpOwogCWludCAoKk9uU2VuZCkoc3RydWN0IGh2X2RldmljZSAqZGV2LCBzdHJ1Y3QgaHZfbmV0dnNjX3BhY2tldCAqcGFja2V0KTsKIAogCXZvaWQgKkNvbnRleHQ7CkBAIC0xMTksNSArMTE3LDcgQEAKIAogLyogSW50ZXJmYWNlICovCiBpbnQgTmV0VnNjSW5pdGlhbGl6ZShzdHJ1Y3QgaHZfZHJpdmVyICpkcnYpOworaW50IFJuZGlzRmlsdGVyT25PcGVuKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSk7CitpbnQgUm5kaXNGaWx0ZXJPbkNsb3NlKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSk7CiAKICNlbmRpZiAvKiBfTkVUVlNDX0FQSV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L1JpbmdCdWZmZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9SaW5nQnVmZmVyLmMKaW5kZXggZjY5YWUzMy4uODBiOGEyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L1JpbmdCdWZmZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvUmluZ0J1ZmZlci5jCkBAIC00OCw3ICs0OCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIEdldFJpbmdCdWZmZXJBdmFpbEJ5dGVzKFJJTkdfQlVGRkVSX0lORk8gKnJiaSwgdTMyICpyZWFkLCB1MzIgKndyaXRlKQogewotCXUzMiByZWFkX2xvYyx3cml0ZV9sb2M7CisJdTMyIHJlYWRfbG9jLCB3cml0ZV9sb2M7CiAKIAkvKiBDYXB0dXJlIHRoZSByZWFkL3dyaXRlIGluZGljZXMgYmVmb3JlIHRoZXkgY2hhbmdlZCAqLwogCXJlYWRfbG9jID0gcmJpLT5SaW5nQnVmZmVyLT5SZWFkSW5kZXg7CkBAIC02OCw3ICs2OCw3IEBACiAKIC0tKi8KIHN0YXRpYyBpbmxpbmUgdTMyCi1HZXROZXh0V3JpdGVMb2NhdGlvbihSSU5HX0JVRkZFUl9JTkZPKiBSaW5nSW5mbykKK0dldE5leHRXcml0ZUxvY2F0aW9uKFJJTkdfQlVGRkVSX0lORk8gKlJpbmdJbmZvKQogewogCXUzMiBuZXh0ID0gUmluZ0luZm8tPlJpbmdCdWZmZXItPldyaXRlSW5kZXg7CiAKQEAgLTg3LDcgKzg3LDcgQEAKIAogLS0qLwogc3RhdGljIGlubGluZSB2b2lkCi1TZXROZXh0V3JpdGVMb2NhdGlvbihSSU5HX0JVRkZFUl9JTkZPKiBSaW5nSW5mbywgdTMyIE5leHRXcml0ZUxvY2F0aW9uKQorU2V0TmV4dFdyaXRlTG9jYXRpb24oUklOR19CVUZGRVJfSU5GTyAqUmluZ0luZm8sIHUzMiBOZXh0V3JpdGVMb2NhdGlvbikKIHsKIAlSaW5nSW5mby0+UmluZ0J1ZmZlci0+V3JpdGVJbmRleCA9IE5leHRXcml0ZUxvY2F0aW9uOwogfQpAQCAtMTAyLDcgKzEwMiw3IEBACiAKIC0tKi8KIHN0YXRpYyBpbmxpbmUgdTMyCi1HZXROZXh0UmVhZExvY2F0aW9uKFJJTkdfQlVGRkVSX0lORk8qIFJpbmdJbmZvKQorR2V0TmV4dFJlYWRMb2NhdGlvbihSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbykKIHsKIAl1MzIgbmV4dCA9IFJpbmdJbmZvLT5SaW5nQnVmZmVyLT5SZWFkSW5kZXg7CiAKQEAgLTEyMiw3ICsxMjIsNyBAQAogCiAtLSovCiBzdGF0aWMgaW5saW5lIHUzMgotR2V0TmV4dFJlYWRMb2NhdGlvbldpdGhPZmZzZXQoUklOR19CVUZGRVJfSU5GTyogUmluZ0luZm8sIHUzMiBPZmZzZXQpCitHZXROZXh0UmVhZExvY2F0aW9uV2l0aE9mZnNldChSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbywgdTMyIE9mZnNldCkKIHsKIAl1MzIgbmV4dCA9IFJpbmdJbmZvLT5SaW5nQnVmZmVyLT5SZWFkSW5kZXg7CiAKQEAgLTE0Myw3ICsxNDMsNyBAQAogCiAtLSovCiBzdGF0aWMgaW5saW5lIHZvaWQKLVNldE5leHRSZWFkTG9jYXRpb24oUklOR19CVUZGRVJfSU5GTyogUmluZ0luZm8sIHUzMiBOZXh0UmVhZExvY2F0aW9uKQorU2V0TmV4dFJlYWRMb2NhdGlvbihSSU5HX0JVRkZFUl9JTkZPICpSaW5nSW5mbywgdTMyIE5leHRSZWFkTG9jYXRpb24pCiB7CiAJUmluZ0luZm8tPlJpbmdCdWZmZXItPlJlYWRJbmRleCA9IE5leHRSZWFkTG9jYXRpb247CiB9CkBAIC0xNTksNyArMTU5LDcgQEAKIAogLS0qLwogc3RhdGljIGlubGluZSB2b2lkICoKLUdldFJpbmdCdWZmZXIoUklOR19CVUZGRVJfSU5GTyogUmluZ0luZm8pCitHZXRSaW5nQnVmZmVyKFJJTkdfQlVGRkVSX0lORk8gKlJpbmdJbmZvKQogewogCXJldHVybiAodm9pZCAqKVJpbmdJbmZvLT5SaW5nQnVmZmVyLT5CdWZmZXI7CiB9CkBAIC0xNzUsNyArMTc1LDcgQEAKIAogLS0qLwogc3RhdGljIGlubGluZSB1MzIKLUdldFJpbmdCdWZmZXJTaXplKFJJTkdfQlVGRkVSX0lORk8qIFJpbmdJbmZvKQorR2V0UmluZ0J1ZmZlclNpemUoUklOR19CVUZGRVJfSU5GTyAqUmluZ0luZm8pCiB7CiAJcmV0dXJuIFJpbmdJbmZvLT5SaW5nRGF0YVNpemU7CiB9CkBAIC0xOTAsOSArMTkwLDEwIEBACiAKIC0tKi8KIHN0YXRpYyBpbmxpbmUgdTY0Ci1HZXRSaW5nQnVmZmVySW5kaWNlcyhSSU5HX0JVRkZFUl9JTkZPKiBSaW5nSW5mbykKK0dldFJpbmdCdWZmZXJJbmRpY2VzKFJJTkdfQlVGRkVSX0lORk8gKlJpbmdJbmZvKQogewotCXJldHVybiAoKHU2NClSaW5nSW5mby0+UmluZ0J1ZmZlci0+V3JpdGVJbmRleCA8PCAzMikgfHwgUmluZ0luZm8tPlJpbmdCdWZmZXItPlJlYWRJbmRleDsKKwlyZXR1cm4gKCh1NjQpUmluZ0luZm8tPlJpbmdCdWZmZXItPldyaXRlSW5kZXggPDwgMzIpCisJfHwgUmluZ0luZm8tPlJpbmdCdWZmZXItPlJlYWRJbmRleDsKIH0KIAogCkBAIC0yMTAsOSArMjExLDE0IEBACiAJdTMyIGJ5dGVzQXZhaWxUb1dyaXRlOwogCXUzMiBieXRlc0F2YWlsVG9SZWFkOwogCi0JR2V0UmluZ0J1ZmZlckF2YWlsQnl0ZXMoUmluZ0luZm8sICZieXRlc0F2YWlsVG9SZWFkLCAmYnl0ZXNBdmFpbFRvV3JpdGUpOworCUdldFJpbmdCdWZmZXJBdmFpbEJ5dGVzKFJpbmdJbmZvLAorCSZieXRlc0F2YWlsVG9SZWFkLAorCSZieXRlc0F2YWlsVG9Xcml0ZSk7CiAKLQlEUFJJTlQoVk1CVVMsIERFQlVHX1JJTkdfTFZMLCAiJXMgPDxyaW5naW5mbyAlcCBidWZmZXIgJXAgYXZhaWwgd3JpdGUgJXUgYXZhaWwgcmVhZCAldSByZWFkIGlkeCAldSB3cml0ZSBpZHggJXU+PiIsCisJRFBSSU5UKFZNQlVTLAorCQlERUJVR19SSU5HX0xWTCwKKwkJIiVzIDw8cmluZ2luZm8gJXAgYnVmZmVyICVwIGF2YWlsIHdyaXRlICV1ICIKKwkJImF2YWlsIHJlYWQgJXUgcmVhZCBpZHggJXUgd3JpdGUgaWR4ICV1Pj4iLAogCQlQcmVmaXgsCiAJCVJpbmdJbmZvLAogCQlSaW5nSW5mby0+UmluZ0J1ZmZlci0+QnVmZmVyLApAQCAtMjI5LDEzICsyMzUsMTMgQEAKIENvcHlUb1JpbmdCdWZmZXIoCiAJUklOR19CVUZGRVJfSU5GTwkqUmluZ0luZm8sCiAJdTMyCQkJCVN0YXJ0V3JpdGVPZmZzZXQsCi0Jdm9pZCAqCQkJCVNyYywKKwl2b2lkCQkJCSpTcmMsCiAJdTMyCQkJCVNyY0xlbik7CiAKIHN0YXRpYyB1MzIKIENvcHlGcm9tUmluZ0J1ZmZlcigKIAlSSU5HX0JVRkZFUl9JTkZPCSpSaW5nSW5mbywKLQl2b2lkICoJCQkJRGVzdCwKKwl2b2lkCQkJCSpEZXN0LAogCXUzMgkJCQlEZXN0TGVuLAogCXUzMgkJCQlTdGFydFJlYWRPZmZzZXQpOwogCkBAIC0yNTYsMTUgKzI2MiwxNSBAQAogCXUzMiBieXRlc0F2YWlsVG9Xcml0ZTsKIAl1MzIgYnl0ZXNBdmFpbFRvUmVhZDsKIAotCWlmIChSaW5nSW5mby0+UmluZ0J1ZmZlcikKLQl7Ci0JCUdldFJpbmdCdWZmZXJBdmFpbEJ5dGVzKFJpbmdJbmZvLCAmYnl0ZXNBdmFpbFRvUmVhZCwgJmJ5dGVzQXZhaWxUb1dyaXRlKTsKKwlpZiAoUmluZ0luZm8tPlJpbmdCdWZmZXIpIHsKKwkJR2V0UmluZ0J1ZmZlckF2YWlsQnl0ZXMoUmluZ0luZm8sCisJCQkJCSZieXRlc0F2YWlsVG9SZWFkLAorCQkJCQkmYnl0ZXNBdmFpbFRvV3JpdGUpOwogCiAJCURlYnVnSW5mby0+Qnl0ZXNBdmFpbFRvUmVhZCA9IGJ5dGVzQXZhaWxUb1JlYWQ7CiAJCURlYnVnSW5mby0+Qnl0ZXNBdmFpbFRvV3JpdGUgPSBieXRlc0F2YWlsVG9Xcml0ZTsKIAkJRGVidWdJbmZvLT5DdXJyZW50UmVhZEluZGV4ID0gUmluZ0luZm8tPlJpbmdCdWZmZXItPlJlYWRJbmRleDsKIAkJRGVidWdJbmZvLT5DdXJyZW50V3JpdGVJbmRleCA9IFJpbmdJbmZvLT5SaW5nQnVmZmVyLT5Xcml0ZUluZGV4OwotCiAJCURlYnVnSW5mby0+Q3VycmVudEludGVycnVwdE1hc2sgPSBSaW5nSW5mby0+UmluZ0J1ZmZlci0+SW50ZXJydXB0TWFzazsKIAl9CiB9CkBAIC0yOTksNyArMzA1LDcgQEAKIAogCW1lbXNldChSaW5nSW5mbywgMCwgc2l6ZW9mKFJJTkdfQlVGRkVSX0lORk8pKTsKIAotCVJpbmdJbmZvLT5SaW5nQnVmZmVyID0gKFJJTkdfQlVGRkVSKilCdWZmZXI7CisJUmluZ0luZm8tPlJpbmdCdWZmZXIgPSAoUklOR19CVUZGRVIgKilCdWZmZXI7CiAJUmluZ0luZm8tPlJpbmdCdWZmZXItPlJlYWRJbmRleCA9IFJpbmdJbmZvLT5SaW5nQnVmZmVyLT5Xcml0ZUluZGV4ID0gMDsKIAogCVJpbmdJbmZvLT5SaW5nU2l6ZSA9IEJ1ZmZlckxlbjsKQEAgLTMxOSw3ICszMjUsNyBAQAogCUNsZWFudXAgdGhlIHJpbmcgYnVmZmVyCiAKIC0tKi8KLXZvaWQgUmluZ0J1ZmZlckNsZWFudXAoUklOR19CVUZGRVJfSU5GTyogUmluZ0luZm8pCit2b2lkIFJpbmdCdWZmZXJDbGVhbnVwKFJJTkdfQlVGRkVSX0lORk8gKlJpbmdJbmZvKQogewogfQogCkBAIC0zMzUsMTQgKzM0MSwxNCBAQAogaW50IFJpbmdCdWZmZXJXcml0ZShSSU5HX0JVRkZFUl9JTkZPICpPdXRSaW5nSW5mbywKIAkJICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCB1MzIgc2djb3VudCkKIHsKLQlpbnQgaT0wOworCWludCBpID0gMDsKIAl1MzIgYnl0ZUF2YWlsVG9Xcml0ZTsKIAl1MzIgYnl0ZUF2YWlsVG9SZWFkOwotCXUzMiB0b3RhbEJ5dGVzVG9Xcml0ZT0wOworCXUzMiB0b3RhbEJ5dGVzVG9Xcml0ZSA9IDA7CiAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCXZvbGF0aWxlIHUzMiBuZXh0V3JpdGVMb2NhdGlvbjsKLQl1NjQgcHJldkluZGljZXM9MDsKKwl1NjQgcHJldkluZGljZXMgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlEUFJJTlRfRU5URVIoVk1CVVMpOwpAQCAtMzU2LDE3ICszNjIsMjMgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZPdXRSaW5nSW5mby0+cmluZ19sb2NrLCBmbGFncyk7CiAKLQlHZXRSaW5nQnVmZmVyQXZhaWxCeXRlcyhPdXRSaW5nSW5mbywgJmJ5dGVBdmFpbFRvUmVhZCwgJmJ5dGVBdmFpbFRvV3JpdGUpOworCUdldFJpbmdCdWZmZXJBdmFpbEJ5dGVzKE91dFJpbmdJbmZvLAorCQkJCSZieXRlQXZhaWxUb1JlYWQsCisJCQkJJmJ5dGVBdmFpbFRvV3JpdGUpOwogCiAJRFBSSU5UX0RCRyhWTUJVUywgIldyaXRpbmcgJXUgYnl0ZXMuLi4iLCB0b3RhbEJ5dGVzVG9Xcml0ZSk7CiAKIAkvKiBEdW1wUmluZ0luZm8oT3V0UmluZ0luZm8sICJCRUZPUkUgIik7ICovCiAKLQkvKiBJZiB0aGVyZSBpcyBvbmx5IHJvb20gZm9yIHRoZSBwYWNrZXQsIGFzc3VtZSBpdCBpcyBmdWxsLiBPdGhlcndpc2UsIHRoZSBuZXh0IHRpbWUgYXJvdW5kLCB3ZSB0aGluayB0aGUgcmluZyBidWZmZXIgKi8KKwkvKiBJZiB0aGVyZSBpcyBvbmx5IHJvb20gZm9yIHRoZSBwYWNrZXQsIGFzc3VtZSBpdCBpcyBmdWxsLiAqLworCS8qIE90aGVyd2lzZSwgdGhlIG5leHQgdGltZSBhcm91bmQsIHdlIHRoaW5rIHRoZSByaW5nIGJ1ZmZlciAqLwogCS8qIGlzIGVtcHR5IHNpbmNlIHRoZSByZWFkIGluZGV4ID09IHdyaXRlIGluZGV4ICovCi0JaWYgKGJ5dGVBdmFpbFRvV3JpdGUgPD0gdG90YWxCeXRlc1RvV3JpdGUpCi0JewotCQlEUFJJTlRfREJHKFZNQlVTLCAiTm8gbW9yZSBzcGFjZSBsZWZ0IG9uIG91dGJvdW5kIHJpbmcgYnVmZmVyIChuZWVkZWQgJXUsIGF2YWlsICV1KSIsIHRvdGFsQnl0ZXNUb1dyaXRlLCBieXRlQXZhaWxUb1dyaXRlKTsKKwlpZiAoYnl0ZUF2YWlsVG9Xcml0ZSA8PSB0b3RhbEJ5dGVzVG9Xcml0ZSkgeworCQlEUFJJTlRfREJHKFZNQlVTLAorCQkJIk5vIG1vcmUgc3BhY2UgbGVmdCBvbiBvdXRib3VuZCByaW5nIGJ1ZmZlciAiCisJCQkiKG5lZWRlZCAldSwgYXZhaWwgJXUpIiwKKwkJCXRvdGFsQnl0ZXNUb1dyaXRlLAorCQkJYnl0ZUF2YWlsVG9Xcml0ZSk7CiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmT3V0UmluZ0luZm8tPnJpbmdfbG9jaywgZmxhZ3MpOwogCkBAIC00MjMsMTcgKzQzNSwyMiBAQAogewogCXUzMiBieXRlc0F2YWlsVG9Xcml0ZTsKIAl1MzIgYnl0ZXNBdmFpbFRvUmVhZDsKLQl1MzIgbmV4dFJlYWRMb2NhdGlvbj0wOworCXUzMiBuZXh0UmVhZExvY2F0aW9uID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJkluUmluZ0luZm8tPnJpbmdfbG9jaywgZmxhZ3MpOwogCi0JR2V0UmluZ0J1ZmZlckF2YWlsQnl0ZXMoSW5SaW5nSW5mbywgJmJ5dGVzQXZhaWxUb1JlYWQsICZieXRlc0F2YWlsVG9Xcml0ZSk7CisJR2V0UmluZ0J1ZmZlckF2YWlsQnl0ZXMoSW5SaW5nSW5mbywKKwkJCQkmYnl0ZXNBdmFpbFRvUmVhZCwKKwkJCQkmYnl0ZXNBdmFpbFRvV3JpdGUpOwogCiAJLyogTWFrZSBzdXJlIHRoZXJlIGlzIHNvbWV0aGluZyB0byByZWFkICovCi0JaWYgKGJ5dGVzQXZhaWxUb1JlYWQgPCBCdWZmZXJMZW4gKQotCXsKLQkJLyogRFBSSU5UX0RCRyhWTUJVUywgImdvdCBjYWxsYmFjayBidXQgbm90IGVub3VnaCB0byByZWFkIDxhdmFpbCB0byByZWFkICVkIHJlYWQgc2l6ZSAlZD4hISIsIGJ5dGVzQXZhaWxUb1JlYWQsIEJ1ZmZlckxlbik7ICovCisJaWYgKGJ5dGVzQXZhaWxUb1JlYWQgPCBCdWZmZXJMZW4pIHsKKwkJLyogRFBSSU5UX0RCRyhWTUJVUywKKwkJCSJnb3QgY2FsbGJhY2sgYnV0IG5vdCBlbm91Z2ggdG8gcmVhZCAiCisJCQkiPGF2YWlsIHRvIHJlYWQgJWQgcmVhZCBzaXplICVkPiEhIiwKKwkJCWJ5dGVzQXZhaWxUb1JlYWQsCisJCQlCdWZmZXJMZW4pOyAqLwogCiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJkluUmluZ0luZm8tPnJpbmdfbG9jaywgZmxhZ3MpOwogCkBAIC00NDQsOSArNDYxLDkgQEAKIAluZXh0UmVhZExvY2F0aW9uID0gR2V0TmV4dFJlYWRMb2NhdGlvbihJblJpbmdJbmZvKTsKIAogCW5leHRSZWFkTG9jYXRpb24gPSBDb3B5RnJvbVJpbmdCdWZmZXIoSW5SaW5nSW5mbywKLQkJCQkJCQkJCQkJQnVmZmVyLAotCQkJCQkJCQkJCQlCdWZmZXJMZW4sCi0JCQkJCQkJCQkJCW5leHRSZWFkTG9jYXRpb24pOworCQkJCQkJQnVmZmVyLAorCQkJCQkJQnVmZmVyTGVuLAorCQkJCQkJbmV4dFJlYWRMb2NhdGlvbik7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZJblJpbmdJbmZvLT5yaW5nX2xvY2ssIGZsYWdzKTsKIApAQCAtNDY4LDI0ICs0ODUsMjkgQEAKIHsKIAl1MzIgYnl0ZXNBdmFpbFRvV3JpdGU7CiAJdTMyIGJ5dGVzQXZhaWxUb1JlYWQ7Ci0JdTMyIG5leHRSZWFkTG9jYXRpb249MDsKLQl1NjQgcHJldkluZGljZXM9MDsKKwl1MzIgbmV4dFJlYWRMb2NhdGlvbiA9IDA7CisJdTY0IHByZXZJbmRpY2VzID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJQVNTRVJUKEJ1ZmZlckxlbiA+IDApOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJkluUmluZ0luZm8tPnJpbmdfbG9jaywgZmxhZ3MpOwogCi0JR2V0UmluZ0J1ZmZlckF2YWlsQnl0ZXMoSW5SaW5nSW5mbywgJmJ5dGVzQXZhaWxUb1JlYWQsICZieXRlc0F2YWlsVG9Xcml0ZSk7CisJR2V0UmluZ0J1ZmZlckF2YWlsQnl0ZXMoSW5SaW5nSW5mbywKKwkJCQkmYnl0ZXNBdmFpbFRvUmVhZCwKKwkJCQkmYnl0ZXNBdmFpbFRvV3JpdGUpOwogCiAJRFBSSU5UX0RCRyhWTUJVUywgIlJlYWRpbmcgJXUgYnl0ZXMuLi4iLCBCdWZmZXJMZW4pOwogCiAJLyogRHVtcFJpbmdJbmZvKEluUmluZ0luZm8sICJCRUZPUkUgIik7ICovCiAKIAkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgc29tZXRoaW5nIHRvIHJlYWQgKi8KLQlpZiAoYnl0ZXNBdmFpbFRvUmVhZCA8IEJ1ZmZlckxlbiApCi0JewotCQlEUFJJTlRfREJHKFZNQlVTLCAiZ290IGNhbGxiYWNrIGJ1dCBub3QgZW5vdWdoIHRvIHJlYWQgPGF2YWlsIHRvIHJlYWQgJWQgcmVhZCBzaXplICVkPiEhIiwgYnl0ZXNBdmFpbFRvUmVhZCwgQnVmZmVyTGVuKTsKKwlpZiAoYnl0ZXNBdmFpbFRvUmVhZCA8IEJ1ZmZlckxlbikgeworCQlEUFJJTlRfREJHKFZNQlVTLAorCQkJImdvdCBjYWxsYmFjayBidXQgbm90IGVub3VnaCB0byByZWFkICIKKwkJCSI8YXZhaWwgdG8gcmVhZCAlZCByZWFkIHNpemUgJWQ+ISEiLAorCQkJYnl0ZXNBdmFpbFRvUmVhZCwKKwkJCUJ1ZmZlckxlbik7CiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmSW5SaW5nSW5mby0+cmluZ19sb2NrLCBmbGFncyk7CiAKQEAgLTQ5NSwxNyArNTE3LDE4IEBACiAJbmV4dFJlYWRMb2NhdGlvbiA9IEdldE5leHRSZWFkTG9jYXRpb25XaXRoT2Zmc2V0KEluUmluZ0luZm8sIE9mZnNldCk7CiAKIAluZXh0UmVhZExvY2F0aW9uID0gQ29weUZyb21SaW5nQnVmZmVyKEluUmluZ0luZm8sCi0JCQkJCQkJCQkJCUJ1ZmZlciwKLQkJCQkJCQkJCQkJQnVmZmVyTGVuLAotCQkJCQkJCQkJCQluZXh0UmVhZExvY2F0aW9uKTsKKwkJCQkJCUJ1ZmZlciwKKwkJCQkJCUJ1ZmZlckxlbiwKKwkJCQkJCW5leHRSZWFkTG9jYXRpb24pOwogCiAJbmV4dFJlYWRMb2NhdGlvbiA9IENvcHlGcm9tUmluZ0J1ZmZlcihJblJpbmdJbmZvLAotCQkJCQkJCQkJCQkmcHJldkluZGljZXMsCi0JCQkJCQkJCQkJCXNpemVvZih1NjQpLAotCQkJCQkJCQkJCQluZXh0UmVhZExvY2F0aW9uKTsKKwkJCQkJCSZwcmV2SW5kaWNlcywKKwkJCQkJCXNpemVvZih1NjQpLAorCQkJCQkJbmV4dFJlYWRMb2NhdGlvbik7CiAKIAkvKiBNYWtlIHN1cmUgYWxsIHJlYWRzIGFyZSBkb25lIGJlZm9yZSB3ZSB1cGRhdGUgdGhlIHJlYWQgaW5kZXggc2luY2UgKi8KLQkvKiB0aGUgd3JpdGVyIG1heSBzdGFydCB3cml0aW5nIHRvIHRoZSByZWFkIGFyZWEgb25jZSB0aGUgcmVhZCBpbmRleCBpcyB1cGRhdGVkICovCisJLyogdGhlIHdyaXRlciBtYXkgc3RhcnQgd3JpdGluZyB0byB0aGUgcmVhZCBhcmVhIG9uY2UgdGhlIHJlYWQgaW5kZXggKi8KKwkvKmlzIHVwZGF0ZWQgKi8KIAltYigpOwogCiAJLyogVXBkYXRlIHRoZSByZWFkIGluZGV4ICovCkBAIC01MzMsMjUgKzU1NiwyMiBAQAogQ29weVRvUmluZ0J1ZmZlcigKIAlSSU5HX0JVRkZFUl9JTkZPCSpSaW5nSW5mbywKIAl1MzIJCQkJU3RhcnRXcml0ZU9mZnNldCwKLQl2b2lkICoJCQkJU3JjLAorCXZvaWQJCQkJKlNyYywKIAl1MzIJCQkJU3JjTGVuKQogewotCXZvaWQgKiByaW5nQnVmZmVyPUdldFJpbmdCdWZmZXIoUmluZ0luZm8pOwotCXUzMiByaW5nQnVmZmVyU2l6ZT1HZXRSaW5nQnVmZmVyU2l6ZShSaW5nSW5mbyk7CisJdm9pZCAqcmluZ0J1ZmZlciA9IEdldFJpbmdCdWZmZXIoUmluZ0luZm8pOworCXUzMiByaW5nQnVmZmVyU2l6ZSA9IEdldFJpbmdCdWZmZXJTaXplKFJpbmdJbmZvKTsKIAl1MzIgZnJhZ0xlbjsKIAotCWlmIChTcmNMZW4gPiByaW5nQnVmZmVyU2l6ZSAtIFN0YXJ0V3JpdGVPZmZzZXQpIC8qIHdyYXAtYXJvdW5kIGRldGVjdGVkISAqLwotCXsKKwkvKiB3cmFwLWFyb3VuZCBkZXRlY3RlZCEgKi8KKwlpZiAoU3JjTGVuID4gcmluZ0J1ZmZlclNpemUgLSBTdGFydFdyaXRlT2Zmc2V0KSB7CiAJCURQUklOVF9EQkcoVk1CVVMsICJ3cmFwLWFyb3VuZCBkZXRlY3RlZCEiKTsKIAogCQlmcmFnTGVuID0gcmluZ0J1ZmZlclNpemUgLSBTdGFydFdyaXRlT2Zmc2V0OwogCQltZW1jcHkocmluZ0J1ZmZlciArIFN0YXJ0V3JpdGVPZmZzZXQsIFNyYywgZnJhZ0xlbik7CiAJCW1lbWNweShyaW5nQnVmZmVyLCBTcmMgKyBmcmFnTGVuLCBTcmNMZW4gLSBmcmFnTGVuKTsKLQl9Ci0JZWxzZQotCXsKKwl9IGVsc2UKIAkJbWVtY3B5KHJpbmdCdWZmZXIgKyBTdGFydFdyaXRlT2Zmc2V0LCBTcmMsIFNyY0xlbik7Ci0JfQogCiAJU3RhcnRXcml0ZU9mZnNldCArPSBTcmNMZW47CiAJU3RhcnRXcml0ZU9mZnNldCAlPSByaW5nQnVmZmVyU2l6ZTsKQEAgLTU3MywyOCArNTkzLDI3IEBACiBzdGF0aWMgdTMyCiBDb3B5RnJvbVJpbmdCdWZmZXIoCiAJUklOR19CVUZGRVJfSU5GTwkqUmluZ0luZm8sCi0Jdm9pZCAqCQkJCURlc3QsCisJdm9pZAkJCQkqRGVzdCwKIAl1MzIJCQkJRGVzdExlbiwKIAl1MzIJCQkJU3RhcnRSZWFkT2Zmc2V0KQogewotCXZvaWQgKiByaW5nQnVmZmVyPUdldFJpbmdCdWZmZXIoUmluZ0luZm8pOwotCXUzMiByaW5nQnVmZmVyU2l6ZT1HZXRSaW5nQnVmZmVyU2l6ZShSaW5nSW5mbyk7CisJdm9pZCAqcmluZ0J1ZmZlciA9IEdldFJpbmdCdWZmZXIoUmluZ0luZm8pOworCXUzMiByaW5nQnVmZmVyU2l6ZSA9IEdldFJpbmdCdWZmZXJTaXplKFJpbmdJbmZvKTsKIAogCXUzMiBmcmFnTGVuOwogCi0JaWYgKERlc3RMZW4gPiByaW5nQnVmZmVyU2l6ZSAtIFN0YXJ0UmVhZE9mZnNldCkgLyogd3JhcC1hcm91bmQgZGV0ZWN0ZWQgYXQgdGhlIHNyYyAqLwotCXsKKwkvKiB3cmFwLWFyb3VuZCBkZXRlY3RlZCBhdCB0aGUgc3JjICovCisJaWYgKERlc3RMZW4gPiByaW5nQnVmZmVyU2l6ZSAtIFN0YXJ0UmVhZE9mZnNldCkgewogCQlEUFJJTlRfREJHKFZNQlVTLCAic3JjIHdyYXAtYXJvdW5kIGRldGVjdGVkISIpOwogCiAJCWZyYWdMZW4gPSByaW5nQnVmZmVyU2l6ZSAtIFN0YXJ0UmVhZE9mZnNldDsKIAogCQltZW1jcHkoRGVzdCwgcmluZ0J1ZmZlciArIFN0YXJ0UmVhZE9mZnNldCwgZnJhZ0xlbik7CiAJCW1lbWNweShEZXN0ICsgZnJhZ0xlbiwgcmluZ0J1ZmZlciwgRGVzdExlbiAtIGZyYWdMZW4pOwotCX0KLQllbHNlCi0JeworCX0gZWxzZQorCiAJCW1lbWNweShEZXN0LCByaW5nQnVmZmVyICsgU3RhcnRSZWFkT2Zmc2V0LCBEZXN0TGVuKTsKLQl9CisKIAogCVN0YXJ0UmVhZE9mZnNldCArPSBEZXN0TGVuOwogCVN0YXJ0UmVhZE9mZnNldCAlPSByaW5nQnVmZmVyU2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9SbmRpc0ZpbHRlci5jIGIvZHJpdmVycy9zdGFnaW5nL2h2L1JuZGlzRmlsdGVyLmMKaW5kZXggMjZkNzk5Ny4uMWFiN2ZhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L1JuZGlzRmlsdGVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L1JuZGlzRmlsdGVyLmMKQEAgLTg1LDEwICs4NSw2IEBACiAKIHN0YXRpYyB2b2lkIFJuZGlzRmlsdGVyT25DbGVhbnVwKHN0cnVjdCBodl9kcml2ZXIgKkRyaXZlcik7CiAKLXN0YXRpYyBpbnQgUm5kaXNGaWx0ZXJPbk9wZW4oc3RydWN0IGh2X2RldmljZSAqRGV2aWNlKTsKLQotc3RhdGljIGludCBSbmRpc0ZpbHRlck9uQ2xvc2Uoc3RydWN0IGh2X2RldmljZSAqRGV2aWNlKTsKLQogc3RhdGljIGludCBSbmRpc0ZpbHRlck9uU2VuZChzdHJ1Y3QgaHZfZGV2aWNlICpEZXZpY2UsCiAJCQkgICAgIHN0cnVjdCBodl9uZXR2c2NfcGFja2V0ICpQYWNrZXQpOwogCkBAIC02NTQsOCArNjUwLDYgQEAKIAlEcml2ZXItPkJhc2UuT25EZXZpY2VSZW1vdmUgPSBSbmRpc0ZpbHRlck9uRGV2aWNlUmVtb3ZlOwogCURyaXZlci0+QmFzZS5PbkNsZWFudXAgPSBSbmRpc0ZpbHRlck9uQ2xlYW51cDsKIAlEcml2ZXItPk9uU2VuZCA9IFJuZGlzRmlsdGVyT25TZW5kOwotCURyaXZlci0+T25PcGVuID0gUm5kaXNGaWx0ZXJPbk9wZW47Ci0JRHJpdmVyLT5PbkNsb3NlID0gUm5kaXNGaWx0ZXJPbkNsb3NlOwogCS8qIERyaXZlci0+UXVlcnlMaW5rU3RhdHVzID0gUm5kaXNGaWx0ZXJRdWVyeURldmljZUxpbmtTdGF0dXM7ICovCiAJRHJpdmVyLT5PblJlY2VpdmVDYWxsYmFjayA9IFJuZGlzRmlsdGVyT25SZWNlaXZlOwogCkBAIC04ODgsNyArODgyLDcgQEAKIAlEUFJJTlRfRVhJVChORVRWU0MpOwogfQogCi1zdGF0aWMgaW50IFJuZGlzRmlsdGVyT25PcGVuKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSkKK2ludCBSbmRpc0ZpbHRlck9uT3BlbihzdHJ1Y3QgaHZfZGV2aWNlICpEZXZpY2UpCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgbmV0dnNjX2RldmljZSAqbmV0RGV2aWNlID0gRGV2aWNlLT5FeHRlbnNpb247CkBAIC05MDMsNyArODk3LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IFJuZGlzRmlsdGVyT25DbG9zZShzdHJ1Y3QgaHZfZGV2aWNlICpEZXZpY2UpCitpbnQgUm5kaXNGaWx0ZXJPbkNsb3NlKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSkKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBuZXR2c2NfZGV2aWNlICpuZXREZXZpY2UgPSBEZXZpY2UtPkV4dGVuc2lvbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9TdG9yVnNjLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvU3RvclZzYy5jCmluZGV4IDJmN2M0MjUuLjM4ZWExNDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9TdG9yVnNjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L1N0b3JWc2MuYwpAQCAtNjI1LDcgKzYyNSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgU3RvclZzY09uSG9zdFJlc2V0KHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSkKK2ludCBTdG9yVnNjT25Ib3N0UmVzZXQoc3RydWN0IGh2X2RldmljZSAqRGV2aWNlKQogewogCXN0cnVjdCBzdG9ydnNjX2RldmljZSAqc3RvckRldmljZTsKIAlzdHJ1Y3Qgc3RvcnZzY19yZXF1ZXN0X2V4dGVuc2lvbiAqcmVxdWVzdDsKQEAgLTg0Miw3ICs4NDIsNiBAQAogCXN0b3JEcml2ZXItPkJhc2UuT25DbGVhbnVwCT0gU3RvclZzY09uQ2xlYW51cDsKIAogCXN0b3JEcml2ZXItPk9uSU9SZXF1ZXN0CQk9IFN0b3JWc2NPbklPUmVxdWVzdDsKLQlzdG9yRHJpdmVyLT5Pbkhvc3RSZXNldAkJPSBTdG9yVnNjT25Ib3N0UmVzZXQ7CiAKIAlEUFJJTlRfRVhJVChTVE9SVlNDKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L1N0b3JWc2NBcGkuaCBiL2RyaXZlcnMvc3RhZ2luZy9odi9TdG9yVnNjQXBpLmgKaW5kZXggNjljMTQwNi4uMTI2YTg1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L1N0b3JWc2NBcGkuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvU3RvclZzY0FwaS5oCkBAIC05MSwxMyArOTEsOSBAQAogCS8qIE1heGltdW0gIyBvZiByZXF1ZXN0cyBpbiBmbGlnaHQgcGVyIGNoYW5uZWwvZGV2aWNlICovCiAJdTMyIE1heE91dHN0YW5kaW5nUmVxdWVzdHNQZXJDaGFubmVsOwogCi0JLyogU2V0IGJ5IHRoZSBjYWxsZXIgdG8gYWxsb3cgdXMgdG8gcmUtZW51bWVyYXRlIHRoZSBidXMgb24gdGhlIGhvc3QgKi8KLQl2b2lkICgqT25Ib3N0UmVzY2FuKShzdHJ1Y3QgaHZfZGV2aWNlICpEZXZpY2UpOwotCiAJLyogU3BlY2lmaWMgdG8gdGhpcyBkcml2ZXIgKi8KIAlpbnQgKCpPbklPUmVxdWVzdCkoc3RydWN0IGh2X2RldmljZSAqRGV2aWNlLAogCQkJICAgc3RydWN0IGh2X3N0b3J2c2NfcmVxdWVzdCAqUmVxdWVzdCk7Ci0JaW50ICgqT25Ib3N0UmVzZXQpKHN0cnVjdCBodl9kZXZpY2UgKkRldmljZSk7CiB9OwogCiBzdHJ1Y3Qgc3RvcnZzY19kZXZpY2VfaW5mbyB7CkBAIC0xMDgsNiArMTA0LDcgQEAKIAogLyogSW50ZXJmYWNlICovCiBpbnQgU3RvclZzY0luaXRpYWxpemUoc3RydWN0IGh2X2RyaXZlciAqZHJpdmVyKTsKK2ludCBTdG9yVnNjT25Ib3N0UmVzZXQoc3RydWN0IGh2X2RldmljZSAqRGV2aWNlKTsKIGludCBCbGtWc2NJbml0aWFsaXplKHN0cnVjdCBodl9kcml2ZXIgKmRyaXZlcik7CiAKICNlbmRpZiAvKiBfU1RPUlZTQ19BUElfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9WZXJzaW9uSW5mby5oIGIvZHJpdmVycy9zdGFnaW5nL2h2L1ZlcnNpb25JbmZvLmgKaW5kZXggOWMzNjQxZC4uMTBkN2IxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L1ZlcnNpb25JbmZvLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L1ZlcnNpb25JbmZvLmgKQEAgLTI0LDggKzI0LDI0IEBACiAjaWZuZGVmIF9fSFZfVkVSU0lPTl9JTkZPCiAjZGVmaW5lIF9fSFZfVkVSU0lPTl9JTkZPCiAKLXN0YXRpYyBjb25zdCBjaGFyIFZlcnNpb25EYXRlW10gPSBfX0RBVEVfXzsKLXN0YXRpYyBjb25zdCBjaGFyIFZlcnNpb25UaW1lW10gPSBfX1RJTUVfXzsKLXN0YXRpYyBjb25zdCBjaGFyIFZlcnNpb25EZXNjW10gPSAiVmVyc2lvbiAyLjAiOworLyoKKyAqIFdlIHVzZSB0aGUgc2FtZSB2ZXJzaW9uIG51bWJlcmluZyBmb3IgYWxsIEh5cGVyLVYgbW9kdWxlcy4KKyAqCisgKiBEZWZpbml0aW9uIG9mIHZlcnNpb25pbmcgaXMgYXMgZm9sbG93czsKKyAqCisgKiAJTWFqb3IgTnVtYmVyIAlDaGFuZ2VzIGZvciB0aGVzZSBzY2VuYXJpb3M7CisgKgkJCTEuCVdoZW4gYSBuZXcgdmVyc2lvbiBvZiBXaW5kb3dzIEh5cGVyLVYKKyAqCQkJCWlzIHJlbGVhc2VkLgorICoJCQkyLglBIE1ham9yIGNoYW5nZSBoYXMgb2NjdXJyZWQgaW4gdGhlCisgKgkJCSAgICAgICAJTGludXggSUMncy4KKyAqCQkJKEZvciBleGFtcGxlIHRoZSBtZXJnZSBmb3IgdGhlIGZpcnN0IHRpbWUKKyAqCQkJaW50byB0aGUga2VybmVsKSBFdmVyeSB0aW1lIHRoZSBNYWpvciBOdW1iZXIKKyAqCQkJY2hhbmdlcywgdGhlIFJldmlzaW9uIG51bWJlciBpcyByZXNldCB0byAwLgorICoJTWlub3IgTnVtYmVyCUNoYW5nZXMgd2hlbiBuZXcgZnVuY3Rpb25hbGl0eSBpcyBhZGRlZAorICoJCQl0byB0aGUgTGludXggSUMncyB0aGF0IGlzIG5vdCBhIGJ1ZyBmaXguCisgKgorICovCisjZGVmaW5lIEhWX0RSVl9WRVJTSU9OICAgICAgICAgICAiMy4wIgorCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L1ZtYnVzLmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvVm1idXMuYwppbmRleCAzNWEwMjNlLi4zZDBhMjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvVm1idXMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvVm1idXMuYwpAQCAtMjczLDEwICsyNzMsOCBAQAogCiAJRFBSSU5UX0VOVEVSKFZNQlVTKTsKIAotCURQUklOVF9JTkZPKFZNQlVTLCAiKysrKysrKyBCdWlsZCBEYXRlPSVzICVzICsrKysrKysiLAotCQkJVmVyc2lvbkRhdGUsIFZlcnNpb25UaW1lKTsKLQlEUFJJTlRfSU5GTyhWTUJVUywgIisrKysrKysgQnVpbGQgRGVzY3JpcHRpb249JXMgKysrKysrKyIsCi0JCQlWZXJzaW9uRGVzYyk7CisJRFBSSU5UX0lORk8oVk1CVVMsICIrKysrKysrIEhWIERyaXZlciB2ZXJzaW9uID0gJXMgKysrKysrKyIsCisJCSAgICBIVl9EUlZfVkVSU0lPTik7CiAJRFBSSU5UX0lORk8oVk1CVVMsICIrKysrKysrIFZtYnVzIHN1cHBvcnRlZCB2ZXJzaW9uID0gJWQgKysrKysrKyIsCiAJCQlWTUJVU19SRVZJU0lPTl9OVU1CRVIpOwogCURQUklOVF9JTkZPKFZNQlVTLCAiKysrKysrKyBWbWJ1cyB1c2luZyBTSU5UICVkICsrKysrKysiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9ibGt2c2NfZHJ2LmMKaW5kZXggNDVkOTA4MS4uYWJlYWMxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L2Jsa3ZzY19kcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvYmxrdnNjX2Rydi5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RiZy5oPgogI2luY2x1ZGUgIm9zZC5oIgogI2luY2x1ZGUgImxvZ2dpbmcuaCIKKyNpbmNsdWRlICJWZXJzaW9uSW5mby5oIgogI2luY2x1ZGUgInZtYnVzLmgiCiAjaW5jbHVkZSAiU3RvclZzY0FwaS5oIgogCkBAIC05Miw3ICs5Myw3IEBACiAvKiBQZXIgZGV2aWNlIHN0cnVjdHVyZSAqLwogc3RydWN0IGJsb2NrX2RldmljZV9jb250ZXh0IHsKIAkvKiBwb2ludCBiYWNrIHRvIG91ciBkZXZpY2UgY29udGV4dCAqLwotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqZGV2aWNlX2N0eDsKKwlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZpY2VfY3R4OwogCXN0cnVjdCBrbWVtX2NhY2hlICpyZXF1ZXN0X3Bvb2w7CiAJc3BpbmxvY2tfdCBsb2NrOwogCXN0cnVjdCBnZW5kaXNrICpnZDsKQEAgLTI1NCw3ICsyNTUsNyBAQAogCQkJCShzdHJ1Y3QgYmxrdnNjX2RyaXZlcl9jb250ZXh0ICopZHJpdmVyX2N0eDsKIAlzdHJ1Y3Qgc3RvcnZzY19kcml2ZXJfb2JqZWN0ICpzdG9ydnNjX2Rydl9vYmogPQogCQkJCSZibGt2c2NfZHJ2X2N0eC0+ZHJ2X29iajsKLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHggPSBkZXZpY2VfdG9fZGV2aWNlX2NvbnRleHQoZGV2aWNlKTsKKwlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZpY2VfY3R4ID0gZGV2aWNlX3RvX3ZtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmogPSAmZGV2aWNlX2N0eC0+ZGV2aWNlX29iajsKIAogCXN0cnVjdCBibG9ja19kZXZpY2VfY29udGV4dCAqYmxrZGV2ID0gTlVMTDsKQEAgLTc0Miw3ICs3NDMsNyBAQAogCQkJCShzdHJ1Y3QgYmxrdnNjX2RyaXZlcl9jb250ZXh0ICopZHJpdmVyX2N0eDsKIAlzdHJ1Y3Qgc3RvcnZzY19kcml2ZXJfb2JqZWN0ICpzdG9ydnNjX2Rydl9vYmogPQogCQkJCSZibGt2c2NfZHJ2X2N0eC0+ZHJ2X29iajsKLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHggPSBkZXZpY2VfdG9fZGV2aWNlX2NvbnRleHQoZGV2aWNlKTsKKwlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZpY2VfY3R4ID0gZGV2aWNlX3RvX3ZtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmogPSAmZGV2aWNlX2N0eC0+ZGV2aWNlX29iajsKIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlX2NvbnRleHQgKmJsa2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXZpY2UpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC04NjIsNyArODYzLDcgQEAKIAkJCXZvaWQgKCpyZXF1ZXN0X2NvbXBsZXRpb24pKHN0cnVjdCBodl9zdG9ydnNjX3JlcXVlc3QgKikpCiB7CiAJc3RydWN0IGJsb2NrX2RldmljZV9jb250ZXh0ICpibGtkZXYgPSBibGt2c2NfcmVxLT5kZXY7Ci0Jc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfY3R4ID0gYmxrZGV2LT5kZXZpY2VfY3R4OworCXN0cnVjdCB2bV9kZXZpY2UgKmRldmljZV9jdHggPSBibGtkZXYtPmRldmljZV9jdHg7CiAJc3RydWN0IGRyaXZlcl9jb250ZXh0ICpkcml2ZXJfY3R4ID0KIAkJCWRyaXZlcl90b19kcml2ZXJfY29udGV4dChkZXZpY2VfY3R4LT5kZXZpY2UuZHJpdmVyKTsKIAlzdHJ1Y3QgYmxrdnNjX2RyaXZlcl9jb250ZXh0ICpibGt2c2NfZHJ2X2N0eCA9CkBAIC0xNTA0LDYgKzE1MDUsNyBAQAogfQogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihIVl9EUlZfVkVSU0lPTik7CiBtb2R1bGVfcGFyYW0oYmxrdnNjX3JpbmdidWZmZXJfc2l6ZSwgaW50LCBTX0lSVUdPKTsKIG1vZHVsZV9pbml0KGJsa3ZzY19pbml0KTsKIG1vZHVsZV9leGl0KGJsa3ZzY19leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvbmV0dnNjX2Rydi5jCmluZGV4IDBkNzQ1OWUuLjFhZjNkY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9uZXR2c2NfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2h2L25ldHZzY19kcnYuYwpAQCAtMzUsMTQgKzM1LDEzIEBACiAjaW5jbHVkZSA8bmV0L3BrdF9zY2hlZC5oPgogI2luY2x1ZGUgIm9zZC5oIgogI2luY2x1ZGUgImxvZ2dpbmcuaCIKKyNpbmNsdWRlICJWZXJzaW9uSW5mby5oIgogI2luY2x1ZGUgInZtYnVzLmgiCiAjaW5jbHVkZSAiTmV0VnNjQXBpLmgiCiAKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQogc3RydWN0IG5ldF9kZXZpY2VfY29udGV4dCB7CiAJLyogcG9pbnQgYmFjayB0byBvdXIgZGV2aWNlIGNvbnRleHQgKi8KLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHg7CisJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eDsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKIH07CiAKQEAgLTcyLDExICs3MSw2IEBACiBzdGF0aWMgaW50IG5ldHZzY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2VfY29udGV4dCAqbmV0X2RldmljZV9jdHggPSBuZXRkZXZfcHJpdihuZXQpOwotCXN0cnVjdCBkcml2ZXJfY29udGV4dCAqZHJpdmVyX2N0eCA9Ci0JICAgIGRyaXZlcl90b19kcml2ZXJfY29udGV4dChuZXRfZGV2aWNlX2N0eC0+ZGV2aWNlX2N0eC0+ZGV2aWNlLmRyaXZlcik7Ci0Jc3RydWN0IG5ldHZzY19kcml2ZXJfY29udGV4dCAqbmV0X2Rydl9jdHggPQotCQkoc3RydWN0IG5ldHZzY19kcml2ZXJfY29udGV4dCAqKWRyaXZlcl9jdHg7Ci0Jc3RydWN0IG5ldHZzY19kcml2ZXIgKm5ldF9kcnZfb2JqID0gJm5ldF9kcnZfY3R4LT5kcnZfb2JqOwogCXN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmogPSAmbmV0X2RldmljZV9jdHgtPmRldmljZV9jdHgtPmRldmljZV9vYmo7CiAJaW50IHJldCA9IDA7CiAKQEAgLTg3LDcgKzgxLDcgQEAKIAkJICAgICAgIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOwogCiAJCS8qIE9wZW4gdXAgdGhlIGRldmljZSAqLwotCQlyZXQgPSBuZXRfZHJ2X29iai0+T25PcGVuKGRldmljZV9vYmopOworCQlyZXQgPSBSbmRpc0ZpbHRlck9uT3BlbihkZXZpY2Vfb2JqKTsKIAkJaWYgKHJldCAhPSAwKSB7CiAJCQlEUFJJTlRfRVJSKE5FVFZTQ19EUlYsCiAJCQkJICAgInVuYWJsZSB0byBvcGVuIGRldmljZSAocmV0ICVkKS4iLCByZXQpOwpAQCAtMTA2LDExICsxMDAsNiBAQAogc3RhdGljIGludCBuZXR2c2NfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZV9jb250ZXh0ICpuZXRfZGV2aWNlX2N0eCA9IG5ldGRldl9wcml2KG5ldCk7Ci0Jc3RydWN0IGRyaXZlcl9jb250ZXh0ICpkcml2ZXJfY3R4ID0KLQkgICAgZHJpdmVyX3RvX2RyaXZlcl9jb250ZXh0KG5ldF9kZXZpY2VfY3R4LT5kZXZpY2VfY3R4LT5kZXZpY2UuZHJpdmVyKTsKLQlzdHJ1Y3QgbmV0dnNjX2RyaXZlcl9jb250ZXh0ICpuZXRfZHJ2X2N0eCA9Ci0JCShzdHJ1Y3QgbmV0dnNjX2RyaXZlcl9jb250ZXh0ICopZHJpdmVyX2N0eDsKLQlzdHJ1Y3QgbmV0dnNjX2RyaXZlciAqbmV0X2Rydl9vYmogPSAmbmV0X2Rydl9jdHgtPmRydl9vYmo7CiAJc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX29iaiA9ICZuZXRfZGV2aWNlX2N0eC0+ZGV2aWNlX2N0eC0+ZGV2aWNlX29iajsKIAlpbnQgcmV0OwogCkBAIC0xMTgsNyArMTA3LDcgQEAKIAogCW5ldGlmX3N0b3BfcXVldWUobmV0KTsKIAotCXJldCA9IG5ldF9kcnZfb2JqLT5PbkNsb3NlKGRldmljZV9vYmopOworCXJldCA9IFJuZGlzRmlsdGVyT25DbG9zZShkZXZpY2Vfb2JqKTsKIAlpZiAocmV0ICE9IDApCiAJCURQUklOVF9FUlIoTkVUVlNDX0RSViwgInVuYWJsZSB0byBjbG9zZSBkZXZpY2UgKHJldCAlZCkuIiwgcmV0KTsKIApAQCAtMjgyLDcgKzI3MSw3IEBACiBzdGF0aWMgdm9pZCBuZXR2c2NfbGlua3N0YXR1c19jYWxsYmFjayhzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2Vfb2JqLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgc3RhdHVzKQogewotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqZGV2aWNlX2N0eCA9IHRvX2RldmljZV9jb250ZXh0KGRldmljZV9vYmopOworCXN0cnVjdCB2bV9kZXZpY2UgKmRldmljZV9jdHggPSB0b192bV9kZXZpY2UoZGV2aWNlX29iaik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldCA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2aWNlX2N0eC0+ZGV2aWNlKTsKIAogCURQUklOVF9FTlRFUihORVRWU0NfRFJWKTsKQEAgLTMwOSw3ICsyOTgsNyBAQAogc3RhdGljIGludCBuZXR2c2NfcmVjdl9jYWxsYmFjayhzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2Vfb2JqLAogCQkJCXN0cnVjdCBodl9uZXR2c2NfcGFja2V0ICpwYWNrZXQpCiB7Ci0Jc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfY3R4ID0gdG9fZGV2aWNlX2NvbnRleHQoZGV2aWNlX29iaik7CisJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9IHRvX3ZtX2RldmljZShkZXZpY2Vfb2JqKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0gZGV2X2dldF9kcnZkYXRhKCZkZXZpY2VfY3R4LT5kZXZpY2UpOwogCXN0cnVjdCBuZXRfZGV2aWNlX2NvbnRleHQgKm5ldF9kZXZpY2VfY3R4OwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC00MDEsNyArMzkwLDcgQEAKIAlzdHJ1Y3QgbmV0dnNjX2RyaXZlcl9jb250ZXh0ICpuZXRfZHJ2X2N0eCA9CiAJCShzdHJ1Y3QgbmV0dnNjX2RyaXZlcl9jb250ZXh0ICopZHJpdmVyX2N0eDsKIAlzdHJ1Y3QgbmV0dnNjX2RyaXZlciAqbmV0X2Rydl9vYmogPSAmbmV0X2Rydl9jdHgtPmRydl9vYmo7Ci0Jc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfY3R4ID0gZGV2aWNlX3RvX2RldmljZV9jb250ZXh0KGRldmljZSk7CisJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9IGRldmljZV90b192bV9kZXZpY2UoZGV2aWNlKTsKIAlzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2Vfb2JqID0gJmRldmljZV9jdHgtPmRldmljZV9vYmo7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldCA9IE5VTEw7CiAJc3RydWN0IG5ldF9kZXZpY2VfY29udGV4dCAqbmV0X2RldmljZV9jdHg7CkBAIC00NzMsNyArNDYyLDcgQEAKIAlzdHJ1Y3QgbmV0dnNjX2RyaXZlcl9jb250ZXh0ICpuZXRfZHJ2X2N0eCA9CiAJCShzdHJ1Y3QgbmV0dnNjX2RyaXZlcl9jb250ZXh0ICopZHJpdmVyX2N0eDsKIAlzdHJ1Y3QgbmV0dnNjX2RyaXZlciAqbmV0X2Rydl9vYmogPSAmbmV0X2Rydl9jdHgtPmRydl9vYmo7Ci0Jc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfY3R4ID0gZGV2aWNlX3RvX2RldmljZV9jb250ZXh0KGRldmljZSk7CisJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9IGRldmljZV90b192bV9kZXZpY2UoZGV2aWNlKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ID0gZGV2X2dldF9kcnZkYXRhKCZkZXZpY2VfY3R4LT5kZXZpY2UpOwogCXN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmogPSAmZGV2aWNlX2N0eC0+ZGV2aWNlX29iajsKIAlpbnQgcmV0OwpAQCAtNjEzLDYgKzYwMiw4IEBACiAJRFBSSU5UX0VYSVQoTkVUVlNDX0RSVik7CiB9CiAKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKEhWX0RSVl9WRVJTSU9OKTsKIG1vZHVsZV9wYXJhbShuZXR2c2NfcmluZ2J1ZmZlcl9zaXplLCBpbnQsIFNfSVJVR08pOwogCiBtb2R1bGVfaW5pdChuZXR2c2NfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvc3RvcnZzY19kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9odi9zdG9ydnNjX2Rydi5jCmluZGV4IGQ0OWRjMjEuLjM5ODhmNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9odi9zdG9ydnNjX2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi9zdG9ydnNjX2Rydi5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RiZy5oPgogI2luY2x1ZGUgIm9zZC5oIgogI2luY2x1ZGUgImxvZ2dpbmcuaCIKKyNpbmNsdWRlICJWZXJzaW9uSW5mby5oIgogI2luY2x1ZGUgInZtYnVzLmgiCiAjaW5jbHVkZSAiU3RvclZzY0FwaS5oIgogCkBAIC0zOSwxMCArNDAsOCBAQAogc3RydWN0IGhvc3RfZGV2aWNlX2NvbnRleHQgewogCS8qIG11c3QgYmUgMXN0IGZpZWxkCiAJICogRklYTUUgdGhpcyBpcyBhIGJ1ZyAqLwotCXN0cnVjdCB3b3JrX3N0cnVjdCBob3N0X3Jlc2Nhbl93b3JrOwotCiAJLyogcG9pbnQgYmFjayB0byBvdXIgZGV2aWNlIGNvbnRleHQgKi8KLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHg7CisJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eDsKIAlzdHJ1Y3Qga21lbV9jYWNoZSAqcmVxdWVzdF9wb29sOwogCXVuc2lnbmVkIGludCBwb3J0OwogCXVuc2lnbmVkIGNoYXIgcGF0aDsKQEAgLTc3LDggKzc2LDYgQEAKIHN0YXRpYyBpbnQgc3RvcnZzY19kZXZpY2VfYWxsb2Moc3RydWN0IHNjc2lfZGV2aWNlICopOwogc3RhdGljIGludCBzdG9ydnNjX2RldmljZV9jb25maWd1cmUoc3RydWN0IHNjc2lfZGV2aWNlICopOwogc3RhdGljIGludCBzdG9ydnNjX2hvc3RfcmVzZXRfaGFuZGxlcihzdHJ1Y3Qgc2NzaV9jbW5kICpzY21uZCk7Ci1zdGF0aWMgdm9pZCBzdG9ydnNjX2hvc3RfcmVzY2FuX2NhbGxiYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1zdGF0aWMgdm9pZCBzdG9ydnNjX2hvc3RfcmVzY2FuKHN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmopOwogc3RhdGljIGludCBzdG9ydnNjX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgc3RydWN0IHNjYXR0ZXJsaXN0ICpjcmVhdGVfYm91bmNlX2J1ZmZlcihzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKQEAgLTk0LDggKzkxLDYgQEAKIAkJCQkJICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmJvdW5jZV9zZ2wsCiAJCQkJCSAgdW5zaWduZWQgaW50IG9yaWdfc2dsX2NvdW50KTsKIAotc3RhdGljIGludCBzdG9ydnNjX3JlcG9ydF9sdW5zKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldiwgdW5zaWduZWQgaW50IGx1bnNbXSwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmx1bl9jb3VudCk7CiBzdGF0aWMgaW50IHN0b3J2c2NfZ2V0X2NocyhzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCiAJCQkgICBzZWN0b3JfdCBjYXBhY2l0eSwgaW50ICppbmZvKTsKIApAQCAtMTQ4LDcgKzE0Myw2IEBACiAJdm1idXNfZ2V0X2ludGVyZmFjZSgmc3RvcnZzY19kcnZfb2JqLT5CYXNlLlZtYnVzQ2hhbm5lbEludGVyZmFjZSk7CiAKIAlzdG9ydnNjX2Rydl9vYmotPlJpbmdCdWZmZXJTaXplID0gc3RvcnZzY19yaW5nYnVmZmVyX3NpemU7Ci0Jc3RvcnZzY19kcnZfb2JqLT5Pbkhvc3RSZXNjYW4gPSBzdG9ydnNjX2hvc3RfcmVzY2FuOwogCiAJLyogQ2FsbGJhY2sgdG8gY2xpZW50IGRyaXZlciB0byBjb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gKi8KIAlkcnZfaW5pdCgmc3RvcnZzY19kcnZfb2JqLT5CYXNlKTsKQEAgLTI0MCw3ICsyMzQsNyBAQAogCQkJCShzdHJ1Y3Qgc3RvcnZzY19kcml2ZXJfY29udGV4dCAqKWRyaXZlcl9jdHg7CiAJc3RydWN0IHN0b3J2c2NfZHJpdmVyX29iamVjdCAqc3RvcnZzY19kcnZfb2JqID0KIAkJCQkmc3RvcnZzY19kcnZfY3R4LT5kcnZfb2JqOwotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqZGV2aWNlX2N0eCA9IGRldmljZV90b19kZXZpY2VfY29udGV4dChkZXZpY2UpOworCXN0cnVjdCB2bV9kZXZpY2UgKmRldmljZV9jdHggPSBkZXZpY2VfdG9fdm1fZGV2aWNlKGRldmljZSk7CiAJc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX29iaiA9ICZkZXZpY2VfY3R4LT5kZXZpY2Vfb2JqOwogCXN0cnVjdCBTY3NpX0hvc3QgKmhvc3Q7CiAJc3RydWN0IGhvc3RfZGV2aWNlX2NvbnRleHQgKmhvc3RfZGV2aWNlX2N0eDsKQEAgLTI2Niw5ICsyNjAsNiBAQAogCWhvc3RfZGV2aWNlX2N0eC0+cG9ydCA9IGhvc3QtPmhvc3Rfbm87CiAJaG9zdF9kZXZpY2VfY3R4LT5kZXZpY2VfY3R4ID0gZGV2aWNlX2N0eDsKIAotCUlOSVRfV09SSygmaG9zdF9kZXZpY2VfY3R4LT5ob3N0X3Jlc2Nhbl93b3JrLAotCQkgIHN0b3J2c2NfaG9zdF9yZXNjYW5fY2FsbGJhY2spOwotCiAJaG9zdF9kZXZpY2VfY3R4LT5yZXF1ZXN0X3Bvb2wgPQogCQkJCWttZW1fY2FjaGVfY3JlYXRlKGRldl9uYW1lKCZkZXZpY2VfY3R4LT5kZXZpY2UpLAogCQkJCQlzaXplb2Yoc3RydWN0IHN0b3J2c2NfY21kX3JlcXVlc3QpICsKQEAgLTMzOSw3ICszMzAsNyBAQAogCQkJKHN0cnVjdCBzdG9ydnNjX2RyaXZlcl9jb250ZXh0ICopZHJpdmVyX2N0eDsKIAlzdHJ1Y3Qgc3RvcnZzY19kcml2ZXJfb2JqZWN0ICpzdG9ydnNjX2Rydl9vYmogPQogCQkJJnN0b3J2c2NfZHJ2X2N0eC0+ZHJ2X29iajsKLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHggPSBkZXZpY2VfdG9fZGV2aWNlX2NvbnRleHQoZGV2aWNlKTsKKwlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZpY2VfY3R4ID0gZGV2aWNlX3RvX3ZtX2RldmljZShkZXZpY2UpOwogCXN0cnVjdCBodl9kZXZpY2UgKmRldmljZV9vYmogPSAmZGV2aWNlX2N0eC0+ZGV2aWNlX29iajsKIAlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKGRldmljZSk7CiAJc3RydWN0IGhvc3RfZGV2aWNlX2NvbnRleHQgKmhvc3RfZGV2aWNlX2N0eCA9CkBAIC02NDAsNyArNjMxLDcgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCBob3N0X2RldmljZV9jb250ZXh0ICpob3N0X2RldmljZV9jdHggPQogCQkoc3RydWN0IGhvc3RfZGV2aWNlX2NvbnRleHQgKilzY21uZC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YTsKLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHggPSBob3N0X2RldmljZV9jdHgtPmRldmljZV9jdHg7CisJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9IGhvc3RfZGV2aWNlX2N0eC0+ZGV2aWNlX2N0eDsKIAlzdHJ1Y3QgZHJpdmVyX2NvbnRleHQgKmRyaXZlcl9jdHggPQogCQlkcml2ZXJfdG9fZHJpdmVyX2NvbnRleHQoZGV2aWNlX2N0eC0+ZGV2aWNlLmRyaXZlcik7CiAJc3RydWN0IHN0b3J2c2NfZHJpdmVyX2NvbnRleHQgKnN0b3J2c2NfZHJ2X2N0eCA9CkBAIC04NzksMTQgKzg3MCw3IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgaG9zdF9kZXZpY2VfY29udGV4dCAqaG9zdF9kZXZpY2VfY3R4ID0KIAkJKHN0cnVjdCBob3N0X2RldmljZV9jb250ZXh0ICopc2NtbmQtPmRldmljZS0+aG9zdC0+aG9zdGRhdGE7Ci0Jc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfY3R4ID0gaG9zdF9kZXZpY2VfY3R4LT5kZXZpY2VfY3R4OwotCXN0cnVjdCBkcml2ZXJfY29udGV4dCAqZHJpdmVyX2N0eCA9Ci0JCQlkcml2ZXJfdG9fZHJpdmVyX2NvbnRleHQoZGV2aWNlX2N0eC0+ZGV2aWNlLmRyaXZlcik7Ci0Jc3RydWN0IHN0b3J2c2NfZHJpdmVyX2NvbnRleHQgKnN0b3J2c2NfZHJ2X2N0eCA9Ci0JCQkoc3RydWN0IHN0b3J2c2NfZHJpdmVyX2NvbnRleHQgKilkcml2ZXJfY3R4OwotCi0Jc3RydWN0IHN0b3J2c2NfZHJpdmVyX29iamVjdCAqc3RvcnZzY19kcnZfb2JqID0KLQkJCSZzdG9ydnNjX2Rydl9jdHgtPmRydl9vYmo7CisJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9IGhvc3RfZGV2aWNlX2N0eC0+ZGV2aWNlX2N0eDsKIAogCURQUklOVF9FTlRFUihTVE9SVlNDX0RSVik7CiAKQEAgLTg5NCw4ICs4NzgsNyBAQAogCQkgICAgc2NtbmQtPmRldmljZSwgJmRldmljZV9jdHgtPmRldmljZV9vYmopOwogCiAJLyogSW52b2tlcyB0aGUgdnNjIHRvIHJlc2V0IHRoZSBob3N0L2J1cyAqLwotCUFTU0VSVChzdG9ydnNjX2Rydl9vYmotPk9uSG9zdFJlc2V0KTsKLQlyZXQgPSBzdG9ydnNjX2Rydl9vYmotPk9uSG9zdFJlc2V0KCZkZXZpY2VfY3R4LT5kZXZpY2Vfb2JqKTsKKwlyZXQgPSBTdG9yVnNjT25Ib3N0UmVzZXQoJmRldmljZV9jdHgtPmRldmljZV9vYmopOwogCWlmIChyZXQgIT0gMCkgewogCQlEUFJJTlRfRVhJVChTVE9SVlNDX0RSVik7CiAJCXJldHVybiByZXQ7CkBAIC05MDksMjAxICs4OTIsNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qKgotICogc3RvcnZzY19ob3N0X3Jlc2NhbiAtIFJlc2NhbiB0aGUgc2NzaSBIQkEKLSAqLwotc3RhdGljIHZvaWQgc3RvcnZzY19ob3N0X3Jlc2Nhbl9jYWxsYmFjayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX29iaiA9Ci0JICAgICYoKHN0cnVjdCBob3N0X2RldmljZV9jb250ZXh0ICopd29yayktPmRldmljZV9jdHgtPmRldmljZV9vYmo7Ci0Jc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfY3R4ID0gdG9fZGV2aWNlX2NvbnRleHQoZGV2aWNlX29iaik7Ci0Jc3RydWN0IFNjc2lfSG9zdCAqaG9zdCA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2aWNlX2N0eC0+ZGV2aWNlKTsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXY7Ci0Jc3RydWN0IGhvc3RfZGV2aWNlX2NvbnRleHQgKmhvc3RfZGV2aWNlX2N0eDsKLQlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKipzZGV2c19yZW1vdmVfbGlzdDsKLQl1bnNpZ25lZCBpbnQgc2RldnNfY291bnQgPSAwOwotCXVuc2lnbmVkIGludCBmb3VuZDsKLQl1bnNpZ25lZCBpbnQgaTsKLQl1bnNpZ25lZCBpbnQgbHVuX2NvdW50ID0gMDsKLQl1bnNpZ25lZCBpbnQgKmx1bl9saXN0OwotCi0JRFBSSU5UX0VOVEVSKFNUT1JWU0NfRFJWKTsKLQotCWhvc3RfZGV2aWNlX2N0eCA9IChzdHJ1Y3QgaG9zdF9kZXZpY2VfY29udGV4dCAqKWhvc3QtPmhvc3RkYXRhOwotCWx1bl9saXN0ID0ga2NhbGxvYyhTVE9SVlNDX01BWF9MVU5TX1BFUl9UQVJHRVQsIHNpemVvZih1bnNpZ25lZCBpbnQpLAotCQkJICAgR0ZQX0FUT01JQyk7Ci0JaWYgKCFsdW5fbGlzdCkgewotCQlEUFJJTlRfRVJSKFNUT1JWU0NfRFJWLCAidW5hYmxlIHRvIGFsbG9jYXRlIGx1biBsaXN0Iik7Ci0JCXJldHVybjsKLQl9Ci0KLQlzZGV2c19yZW1vdmVfbGlzdCA9IGtjYWxsb2MoU1RPUlZTQ19NQVhfTFVOU19QRVJfVEFSR0VULAotCQkJCSAgICBzaXplb2Yodm9pZCAqKSwgR0ZQX0FUT01JQyk7Ci0JaWYgKCFzZGV2c19yZW1vdmVfbGlzdCkgewotCQlrZnJlZShsdW5fbGlzdCk7Ci0JCURQUklOVF9FUlIoU1RPUlZTQ19EUlYsICJ1bmFibGUgdG8gYWxsb2NhdGUgbHVuIHJlbW92ZSBsaXN0Iik7Ci0JCXJldHVybjsKLQl9Ci0KLQlEUFJJTlRfSU5GTyhTVE9SVlNDX0RSViwgInJlc2Nhbm5pbmcgaG9zdCBmb3IgbmV3IHNjc2kgZGV2aWNlcy4uLiIpOwotCi0JLyogUmVzY2FuIGZvciBuZXcgZGV2aWNlICovCi0Jc2NzaV9zY2FuX3RhcmdldCgmaG9zdC0+c2hvc3RfZ2VuZGV2LCBob3N0X2RldmljZV9jdHgtPnBhdGgsCi0JCQkgaG9zdF9kZXZpY2VfY3R4LT50YXJnZXQsIFNDQU5fV0lMRF9DQVJELCAxKTsKLQotCURQUklOVF9JTkZPKFNUT1JWU0NfRFJWLCAicmVzY2FubmluZyBob3N0IGZvciByZW1vdmVkIHNjc2kgZGV2aWNlLi4uIik7Ci0KLQkvKiBVc2UgdGhlIDFzdCBkZXZpY2UgdG8gc2VuZCB0aGUgcmVwb3J0IGx1bnMgY21kICovCi0Jc2hvc3RfZm9yX2VhY2hfZGV2aWNlKHNkZXYsIGhvc3QpIHsKLQkJbHVuX2NvdW50ID0gU1RPUlZTQ19NQVhfTFVOU19QRVJfVEFSR0VUOwotCQlzdG9ydnNjX3JlcG9ydF9sdW5zKHNkZXYsIGx1bl9saXN0LCAmbHVuX2NvdW50KTsKLQotCQlEUFJJTlRfSU5GTyhTVE9SVlNDX0RSViwKLQkJCSAgICAicmVwb3J0IGx1bnMgb24gc2NzaSBkZXZpY2UgKCVwKSBmb3VuZCAldSBsdW5zICIsCi0JCQkgICAgc2RldiwgbHVuX2NvdW50KTsKLQkJRFBSSU5UX0lORk8oU1RPUlZTQ19EUlYsCi0JCQkgICAgImV4aXN0aW5nIGx1bnMgb24gc2NzaSBkZXZpY2UgKCVwKSBob3N0ICglZCkiLAotCQkJICAgIHNkZXYsIGhvc3QtPmhvc3Rfbm8pOwotCi0JCXNjc2lfZGV2aWNlX3B1dChzZGV2KTsKLQkJYnJlYWs7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGx1bl9jb3VudDsgaSsrKQotCQlEUFJJTlRfSU5GTyhTVE9SVlNDX0RSViwgIiVkKSBsdW4gJXUiLCBpLCBsdW5fbGlzdFtpXSk7Ci0KLQkvKiBSZXNjYW4gZm9yIGRldmljZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIHJlbW92ZWQuCi0JICogV2UgZG8gbm90IGhhdmUgdG8gd29ycnkgdGhhdCBuZXcgZGV2aWNlcyBtYXkgaGF2ZSBiZWVuIGFkZGVkIHNpbmNlCi0JICogdGhpcyBjYWxsYmFjayBpcyBzZXJpYWxpemVkIGJ5IHRoZSB3b3JrcXVldWUgaWUgYWRkL3JlbW92ZSBhcmUgZG9uZQotCSAqIGhlcmUuCi0JICovCi0Jc2hvc3RfZm9yX2VhY2hfZGV2aWNlKHNkZXYsIGhvc3QpIHsKLQkJLyogU2VlIGlmIHRoaXMgZGV2aWNlIGlzIHN0aWxsIGhlcmUgKi8KLQkJZm91bmQgPSAwOwotCQlmb3IgKGkgPSAwOyBpIDwgbHVuX2NvdW50OyBpKyspIHsKLQkJCWlmIChzZGV2LT5sdW4gPT0gbHVuX2xpc3RbaV0pIHsKLQkJCQlmb3VuZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKCFmb3VuZCkgewotCQkJRFBSSU5UX0lORk8oU1RPUlZTQ19EUlYsICJsdW4gKCV1KSBkb2VzIG5vdCBleGlzdHMiLAotCQkJCSAgICBzZGV2LT5sdW4pOwotCQkJc2RldnNfcmVtb3ZlX2xpc3Rbc2RldnNfY291bnQrK10gPSBzZGV2OwotCQl9Ci0JfQotCi0JLyogTm93IHJlbW92ZSB0aGUgZGV2aWNlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBzZGV2c19jb3VudDsgaSsrKSB7Ci0JCURQUklOVF9JTkZPKFNUT1JWU0NfRFJWLAotCQkJICAgICJyZW1vdmluZyBzY3NpIGRldmljZSAoJXApIGx1biAoJXUpLi4uIiwKLQkJCSAgICBzZGV2c19yZW1vdmVfbGlzdFtpXSwgc2RldnNfcmVtb3ZlX2xpc3RbaV0tPmx1bik7Ci0KLQkJLyogbWFrZSBzdXJlIGl0IGlzIG5vdCByZW1vdmVkIGZyb20gdW5kZXJuZWF0aCB1cyAqLwotCQlpZiAoIXNjc2lfZGV2aWNlX2dldChzZGV2c19yZW1vdmVfbGlzdFtpXSkpIHsKLQkJCXNjc2lfcmVtb3ZlX2RldmljZShzZGV2c19yZW1vdmVfbGlzdFtpXSk7Ci0JCQlzY3NpX2RldmljZV9wdXQoc2RldnNfcmVtb3ZlX2xpc3RbaV0pOwotCQl9Ci0JfQotCi0JRFBSSU5UX0lORk8oU1RPUlZTQ19EUlYsICJyZXNjYW4gY29tcGxldGVkIG9uIGRldiBvYmogKCVwKSAiCi0JCSAgICAidGFyZ2V0ICgldSkgYnVzICgldSkiLCBkZXZpY2Vfb2JqLAotCQkgICAgaG9zdF9kZXZpY2VfY3R4LT50YXJnZXQsIGhvc3RfZGV2aWNlX2N0eC0+cGF0aCk7Ci0KLQlrZnJlZShsdW5fbGlzdCk7Ci0Ja2ZyZWUoc2RldnNfcmVtb3ZlX2xpc3QpOwotCi0JRFBSSU5UX0VYSVQoU1RPUlZTQ19EUlYpOwotfQotCi1zdGF0aWMgaW50IHN0b3J2c2NfcmVwb3J0X2x1bnMoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCB1bnNpZ25lZCBpbnQgbHVuc1tdLAotCQkJICAgICAgIHVuc2lnbmVkIGludCAqbHVuX2NvdW50KQotewotCWludCBpLCBqOwotCXVuc2lnbmVkIGludCBsdW4gPSAwOwotCXVuc2lnbmVkIGludCBudW1fbHVuczsKLQlpbnQgcmVzdWx0OwotCXVuc2lnbmVkIGNoYXIgKmRhdGE7Ci0Jc3RydWN0IHNjc2lfc2Vuc2VfaGRyIHNzaGRyOwotCXVuc2lnbmVkIGNoYXIgY21kWzE2XSA9IHswfTsKLQkvKiBBZGQgMSB0byBjb3ZlciB0aGUgcmVwb3J0X2x1biBoZWFkZXIgKi8KLQl1bnNpZ25lZCBpbnQgcmVwb3J0X2xlbiA9IDggKiAoU1RPUlZTQ19NQVhfTFVOU19QRVJfVEFSR0VUKzEpOwotCXVuc2lnbmVkIGxvbmcgbG9uZyAqcmVwb3J0X2x1bnM7Ci0JY29uc3QgdW5zaWduZWQgaW50IGluX2x1bl9jb3VudCA9ICpsdW5fY291bnQ7Ci0KLQkqbHVuX2NvdW50ID0gMDsKLQotCXJlcG9ydF9sdW5zID0ga3phbGxvYyhyZXBvcnRfbGVuLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXJlcG9ydF9sdW5zKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWNtZFswXSA9IFJFUE9SVF9MVU5TOwotCi0JLyogY21kIGxlbmd0aCAqLwotCSoodW5zaWduZWQgaW50ICopJmNtZFs2XSA9IGNwdV90b19iZTMyKHJlcG9ydF9sZW4pOwotCi0JcmVzdWx0ID0gc2NzaV9leGVjdXRlX3JlcShzZGV2LCBjbWQsIERNQV9GUk9NX0RFVklDRSwKLQkJCQkgICh1bnNpZ25lZCBjaGFyICopcmVwb3J0X2x1bnMsIHJlcG9ydF9sZW4sCi0JCQkJICAmc3NoZHIsIDMwICogSFosIDMsIE5VTEwpOwotCWlmIChyZXN1bHQgIT0gMCkgewotCQlrZnJlZShyZXBvcnRfbHVucyk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JLyogZ2V0IHRoZSBsZW5ndGggZnJvbSB0aGUgZmlyc3QgZm91ciBieXRlcyAqLwotCXJlcG9ydF9sZW4gPSBiZTMyX3RvX2NwdSgqKHVuc2lnbmVkIGludCAqKSZyZXBvcnRfbHVuc1swXSk7Ci0KLQludW1fbHVucyA9IChyZXBvcnRfbGVuIC8gc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykpOwotCWlmIChudW1fbHVucyA+IGluX2x1bl9jb3VudCkgewotCQlrZnJlZShyZXBvcnRfbHVucyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCSpsdW5fY291bnQgPSBudW1fbHVuczsKLQotCURQUklOVF9EQkcoU1RPUlZTQ19EUlYsCi0JCSAgICJyZXBvcnQgbHVucyBvbiBzY3NpIGRldmljZSAoJXApIGZvdW5kICV1IGx1bnMgIiwKLQkJICAgc2RldiwgbnVtX2x1bnMpOwotCi0JLyogbHVuIGlkIHN0YXJ0cyBhdCAxICovCi0JZm9yIChpID0gMTsgaSA8IG51bV9sdW5zICsgMTsgaSsrKSB7Ci0JCWx1biA9IDA7Ci0JCWRhdGEgPSAodW5zaWduZWQgY2hhciAqKSZyZXBvcnRfbHVuc1tpXTsKLQkJZm9yIChqID0gMDsgaiA8IHNpemVvZihsdW4pOyBqICs9IDIpIHsKLQkJCWx1biA9IGx1biB8ICgoKGRhdGFbal0gPDwgOCkgfCBkYXRhW2ogKyAxXSkgPDwKLQkJCQkoaiAqIDgpKTsKLQkJfQotCi0JCWx1bnNbaS0xXSA9IGx1bjsKLQl9Ci0KLQlrZnJlZShyZXBvcnRfbHVucyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0b3J2c2NfaG9zdF9yZXNjYW4oc3RydWN0IGh2X2RldmljZSAqZGV2aWNlX29iaikKLXsKLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHggPSB0b19kZXZpY2VfY29udGV4dChkZXZpY2Vfb2JqKTsKLQlzdHJ1Y3QgU2NzaV9Ib3N0ICpob3N0ID0gZGV2X2dldF9kcnZkYXRhKCZkZXZpY2VfY3R4LT5kZXZpY2UpOwotCXN0cnVjdCBob3N0X2RldmljZV9jb250ZXh0ICpob3N0X2RldmljZV9jdHg7Ci0KLQlEUFJJTlRfRU5URVIoU1RPUlZTQ19EUlYpOwotCi0JaG9zdF9kZXZpY2VfY3R4ID0gKHN0cnVjdCBob3N0X2RldmljZV9jb250ZXh0ICopaG9zdC0+aG9zdGRhdGE7Ci0KLQlEUFJJTlRfSU5GTyhTVE9SVlNDX0RSViwgImluaXRpYXRpbmcgcmVzY2FuIG9uIGRldiBvYmogKCVwKSAiCi0JCSAgICAidGFyZ2V0ICgldSkgYnVzICgldSkuLi4iLCBkZXZpY2Vfb2JqLAotCQkgICAgaG9zdF9kZXZpY2VfY3R4LT50YXJnZXQsIGhvc3RfZGV2aWNlX2N0eC0+cGF0aCk7Ci0KLQkvKgotCSAqIFdlIG5lZWQgdG8gcXVldWUgdGhpcyBzaW5jZSB0aGUgc2Nhbm5pbmcgbWF5IGJsb2NrIGFuZCB0aGUgY2FsbGVyCi0JICogbWF5IGJlIGluIGFuIGludHIgY29udGV4dAotCSAqLwotCS8qIHNjc2lfcXVldWVfd29yayhob3N0LCAmaG9zdF9kZXZpY2VfY3R4LT5ob3N0X3Jlc2Nhbl93b3JrKTsgKi8KLQlzY2hlZHVsZV93b3JrKCZob3N0X2RldmljZV9jdHgtPmhvc3RfcmVzY2FuX3dvcmspOwotCURQUklOVF9FWElUKFNUT1JWU0NfRFJWKTsKLX0KLQogc3RhdGljIGludCBzdG9ydnNjX2dldF9jaHMoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2LCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICogYmRldiwKIAkJCSAgIHNlY3Rvcl90IGNhcGFjaXR5LCBpbnQgKmluZm8pCiB7CkBAIC0xMjAzLDYgKzk5MSw3IEBACiB9CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKEhWX0RSVl9WRVJTSU9OKTsKIG1vZHVsZV9wYXJhbShzdG9ydnNjX3JpbmdidWZmZXJfc2l6ZSwgaW50LCBTX0lSVUdPKTsKIG1vZHVsZV9pbml0KHN0b3J2c2NfaW5pdCk7CiBtb2R1bGVfZXhpdChzdG9ydnNjX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzLmggYi9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXMuaAppbmRleCBhZTBhODk2Li42NDA0Yjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXMuaApAQCAtNDMsMjMgKzQzLDIzIEBACiAJdm9pZCAoKnNodXRkb3duKShzdHJ1Y3QgZGV2aWNlICopOwogfTsKIAotc3RydWN0IGRldmljZV9jb250ZXh0IHsKK3N0cnVjdCB2bV9kZXZpY2UgewogCXN0cnVjdCB3b3JrX3N0cnVjdCBwcm9iZV9mYWlsZWRfd29ya19pdGVtOwogCXN0cnVjdCBodl9ndWlkIGNsYXNzX2lkOwogCXN0cnVjdCBodl9ndWlkIGRldmljZV9pZDsKIAlpbnQgcHJvYmVfZXJyb3I7Ci0Jc3RydWN0IGRldmljZSBkZXZpY2U7CiAJc3RydWN0IGh2X2RldmljZSBkZXZpY2Vfb2JqOworCXN0cnVjdCBkZXZpY2UgZGV2aWNlOwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKnRvX2RldmljZV9jb250ZXh0KHN0cnVjdCBodl9kZXZpY2UgKmQpCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2bV9kZXZpY2UgKnRvX3ZtX2RldmljZShzdHJ1Y3QgaHZfZGV2aWNlICpkKQogewotCXJldHVybiBjb250YWluZXJfb2YoZCwgc3RydWN0IGRldmljZV9jb250ZXh0LCBkZXZpY2Vfb2JqKTsKKwlyZXR1cm4gY29udGFpbmVyX29mKGQsIHN0cnVjdCB2bV9kZXZpY2UsIGRldmljZV9vYmopOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2VfY29udGV4dCAqZGV2aWNlX3RvX2RldmljZV9jb250ZXh0KHN0cnVjdCBkZXZpY2UgKmQpCitzdGF0aWMgaW5saW5lIHN0cnVjdCB2bV9kZXZpY2UgKmRldmljZV90b192bV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZCkKIHsKLQlyZXR1cm4gY29udGFpbmVyX29mKGQsIHN0cnVjdCBkZXZpY2VfY29udGV4dCwgZGV2aWNlKTsKKwlyZXR1cm4gY29udGFpbmVyX29mKGQsIHN0cnVjdCB2bV9kZXZpY2UsIGRldmljZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRyaXZlcl9jb250ZXh0ICpkcml2ZXJfdG9fZHJpdmVyX2NvbnRleHQoc3RydWN0IGRldmljZV9kcml2ZXIgKmQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvaHYvdm1idXNfZHJ2LmMKaW5kZXggODk0ZWVjZi4uMmM5MDYxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2h2L3ZtYnVzX2Rydi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9odi92bWJ1c19kcnYuYwpAQCAtMjQsNiArMjQsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgorI2luY2x1ZGUgIlZlcnNpb25JbmZvLmgiCiAjaW5jbHVkZSAib3NkLmgiCiAjaW5jbHVkZSAibG9nZ2luZy5oIgogI2luY2x1ZGUgInZtYnVzLmgiCkBAIC00Nyw3ICs1MCw3IEBACiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IGV2ZW50X2RwYzsKIAogCS8qIFRoZSBidXMgcm9vdCBkZXZpY2UgKi8KLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgZGV2aWNlX2N0eDsKKwlzdHJ1Y3Qgdm1fZGV2aWNlIGRldmljZV9jdHg7CiB9OwogCiBzdGF0aWMgaW50IHZtYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlcik7CkBAIC0xMzUsNyArMTM4LDcgQEAKIAkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2X2F0dHIsCiAJCQkJICAgICAgY2hhciAqYnVmKQogewotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqZGV2aWNlX2N0eCA9IGRldmljZV90b19kZXZpY2VfY29udGV4dChkZXYpOworCXN0cnVjdCB2bV9kZXZpY2UgKmRldmljZV9jdHggPSBkZXZpY2VfdG9fdm1fZGV2aWNlKGRldik7CiAJc3RydWN0IGh2X2RldmljZV9pbmZvIGRldmljZV9pbmZvOwogCiAJbWVtc2V0KCZkZXZpY2VfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBodl9kZXZpY2VfaW5mbykpOwpAQCAtMjQ1LDcgKzI0OCw3IEBACiB7CiAJc3RydWN0IHZtYnVzX2RyaXZlcl9jb250ZXh0ICp2bWJ1c19kcnZfY3R4ID0gJmdfdm1idXNfZHJ2OwogCXN0cnVjdCB2bWJ1c19kcml2ZXIgKnZtYnVzX2Rydl9vYmogPSAmZ192bWJ1c19kcnYuZHJ2X29iajsKLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldl9jdHggPSAmZ192bWJ1c19kcnYuZGV2aWNlX2N0eDsKKwlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZfY3R4ID0gJmdfdm1idXNfZHJ2LmRldmljZV9jdHg7CiAJaW50IHJldDsKIAl1bnNpZ25lZCBpbnQgdmVjdG9yOwogCkBAIC0zMDcsNyArMzEwLDcgQEAKIAlEUFJJTlRfSU5GTyhWTUJVU19EUlYsICJpcnEgMHgleCB2ZWN0b3IgMHgleCIsIHZtYnVzX2lycSwgdmVjdG9yKTsKIAogCS8qIENhbGwgdG8gYnVzIGRyaXZlciB0byBhZGQgdGhlIHJvb3QgZGV2aWNlICovCi0JbWVtc2V0KGRldl9jdHgsIDAsIHNpemVvZihzdHJ1Y3QgZGV2aWNlX2NvbnRleHQpKTsKKwltZW1zZXQoZGV2X2N0eCwgMCwgc2l6ZW9mKHN0cnVjdCB2bV9kZXZpY2UpKTsKIAogCXJldCA9IHZtYnVzX2Rydl9vYmotPkJhc2UuT25EZXZpY2VBZGQoJmRldl9jdHgtPmRldmljZV9vYmosICZ2ZWN0b3IpOwogCWlmIChyZXQgIT0gMCkgewpAQCAtMzY4LDcgKzM3MSw3IEBACiAJc3RydWN0IHZtYnVzX2RyaXZlciAqdm1idXNfZHJ2X29iaiA9ICZnX3ZtYnVzX2Rydi5kcnZfb2JqOwogCXN0cnVjdCB2bWJ1c19kcml2ZXJfY29udGV4dCAqdm1idXNfZHJ2X2N0eCA9ICZnX3ZtYnVzX2RydjsKIAotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqZGV2X2N0eCA9ICZnX3ZtYnVzX2Rydi5kZXZpY2VfY3R4OworCXN0cnVjdCB2bV9kZXZpY2UgKmRldl9jdHggPSAmZ192bWJ1c19kcnYuZGV2aWNlX2N0eDsKIAogCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwogCkBAIC00NzEsMTMgKzQ3NCwxMyBAQAogCQkJCQkJICAgc3RydWN0IGh2X2d1aWQgKmluc3RhbmNlLAogCQkJCQkJICAgdm9pZCAqY29udGV4dCkKIHsKLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmNoaWxkX2RldmljZV9jdHg7CisJc3RydWN0IHZtX2RldmljZSAqY2hpbGRfZGV2aWNlX2N0eDsKIAlzdHJ1Y3QgaHZfZGV2aWNlICpjaGlsZF9kZXZpY2Vfb2JqOwogCiAJRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7CiAKIAkvKiBBbGxvY2F0ZSB0aGUgbmV3IGNoaWxkIGRldmljZSAqLwotCWNoaWxkX2RldmljZV9jdHggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGV2aWNlX2NvbnRleHQpLCBHRlBfS0VSTkVMKTsKKwljaGlsZF9kZXZpY2VfY3R4ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZtX2RldmljZSksIEdGUF9LRVJORUwpOwogCWlmICghY2hpbGRfZGV2aWNlX2N0eCkgewogCQlEUFJJTlRfRVJSKFZNQlVTX0RSViwKIAkJCSJ1bmFibGUgdG8gYWxsb2NhdGUgZGV2aWNlX2NvbnRleHQgZm9yIGNoaWxkIGRldmljZSIpOwpAQCAtNTI2LDEwICs1MjksMTAgQEAKIAkJCQkgICAgICAgc3RydWN0IGh2X2RldmljZSAqY2hpbGRfZGV2aWNlX29iaikKIHsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKnJvb3RfZGV2aWNlX2N0eCA9Ci0JCQkJdG9fZGV2aWNlX2NvbnRleHQocm9vdF9kZXZpY2Vfb2JqKTsKLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmNoaWxkX2RldmljZV9jdHggPQotCQkJCXRvX2RldmljZV9jb250ZXh0KGNoaWxkX2RldmljZV9vYmopOworCXN0cnVjdCB2bV9kZXZpY2UgKnJvb3RfZGV2aWNlX2N0eCA9CisJCQkJdG9fdm1fZGV2aWNlKHJvb3RfZGV2aWNlX29iaik7CisJc3RydWN0IHZtX2RldmljZSAqY2hpbGRfZGV2aWNlX2N0eCA9CisJCQkJdG9fdm1fZGV2aWNlKGNoaWxkX2RldmljZV9vYmopOwogCXN0YXRpYyBhdG9taWNfdCBkZXZpY2VfbnVtID0gQVRPTUlDX0lOSVQoMCk7CiAKIAlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKQEAgLTU3Miw3ICs1NzUsNyBAQAogICovCiBzdGF0aWMgdm9pZCB2bWJ1c19jaGlsZF9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgaHZfZGV2aWNlICpkZXZpY2Vfb2JqKQogewotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqZGV2aWNlX2N0eCA9IHRvX2RldmljZV9jb250ZXh0KGRldmljZV9vYmopOworCXN0cnVjdCB2bV9kZXZpY2UgKmRldmljZV9jdHggPSB0b192bV9kZXZpY2UoZGV2aWNlX29iaik7CiAKIAlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKIApAQCAtNjEwLDcgKzYxMyw3IEBACiAgKi8KIHN0YXRpYyBpbnQgdm1idXNfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldmljZSwgc3RydWN0IGtvYmpfdWV2ZW50X2VudiAqZW52KQogewotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqZGV2aWNlX2N0eCA9IGRldmljZV90b19kZXZpY2VfY29udGV4dChkZXZpY2UpOworCXN0cnVjdCB2bV9kZXZpY2UgKmRldmljZV9jdHggPSBkZXZpY2VfdG9fdm1fZGV2aWNlKGRldmljZSk7CiAJaW50IHJldDsKIAogCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwpAQCAtNjg3LDcgKzY5MCw3IEBACiB7CiAJaW50IG1hdGNoID0gMDsKIAlzdHJ1Y3QgZHJpdmVyX2NvbnRleHQgKmRyaXZlcl9jdHggPSBkcml2ZXJfdG9fZHJpdmVyX2NvbnRleHQoZHJpdmVyKTsKLQlzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKmRldmljZV9jdHggPSBkZXZpY2VfdG9fZGV2aWNlX2NvbnRleHQoZGV2aWNlKTsKKwlzdHJ1Y3Qgdm1fZGV2aWNlICpkZXZpY2VfY3R4ID0gZGV2aWNlX3RvX3ZtX2RldmljZShkZXZpY2UpOwogCiAJRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7CiAKQEAgLTcyNCw3ICs3MjcsNyBAQAogICovCiBzdGF0aWMgdm9pZCB2bWJ1c19wcm9iZV9mYWlsZWRfY2Ioc3RydWN0IHdvcmtfc3RydWN0ICpjb250ZXh0KQogewotCXN0cnVjdCBkZXZpY2VfY29udGV4dCAqZGV2aWNlX2N0eCA9IChzdHJ1Y3QgZGV2aWNlX2NvbnRleHQgKiljb250ZXh0OworCXN0cnVjdCB2bV9kZXZpY2UgKmRldmljZV9jdHggPSAoc3RydWN0IHZtX2RldmljZSAqKWNvbnRleHQ7CiAKIAlEUFJJTlRfRU5URVIoVk1CVVNfRFJWKTsKIApAQCAtNzQ2LDggKzc0OSw4IEBACiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGRyaXZlcl9jb250ZXh0ICpkcml2ZXJfY3R4ID0KIAkJCWRyaXZlcl90b19kcml2ZXJfY29udGV4dChjaGlsZF9kZXZpY2UtPmRyaXZlcik7Ci0Jc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfY3R4ID0KLQkJCWRldmljZV90b19kZXZpY2VfY29udGV4dChjaGlsZF9kZXZpY2UpOworCXN0cnVjdCB2bV9kZXZpY2UgKmRldmljZV9jdHggPQorCQkJZGV2aWNlX3RvX3ZtX2RldmljZShjaGlsZF9kZXZpY2UpOwogCiAJRFBSSU5UX0VOVEVSKFZNQlVTX0RSVik7CiAKQEAgLTg3MSw3ICs4NzQsNyBAQAogICovCiBzdGF0aWMgdm9pZCB2bWJ1c19kZXZpY2VfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiB7Ci0Jc3RydWN0IGRldmljZV9jb250ZXh0ICpkZXZpY2VfY3R4ID0gZGV2aWNlX3RvX2RldmljZV9jb250ZXh0KGRldmljZSk7CisJc3RydWN0IHZtX2RldmljZSAqZGV2aWNlX2N0eCA9IGRldmljZV90b192bV9kZXZpY2UoZGV2aWNlKTsKIAogCURQUklOVF9FTlRFUihWTUJVU19EUlYpOwogCkBAIC05NDYsNiArOTQ5LDE5IEBACiAJfQogfQogCitzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0ZGF0YSBtaWNyb3NvZnRfaHZfZG1pX3RhYmxlW10gPSB7CisJeworCQkuaWRlbnQgPSAiSHlwZXItViIsCisJCS5tYXRjaGVzID0geworCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiTWljcm9zb2Z0IENvcnBvcmF0aW9uIiksCisJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIlZpcnR1YWwgTWFjaGluZSIpLAorCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiVmlydHVhbCBNYWNoaW5lIiksCisJCX0sCisJfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShkbWksIG1pY3Jvc29mdF9odl9kbWlfdGFibGUpOworCiBzdGF0aWMgaW50IF9faW5pdCB2bWJ1c19pbml0KHZvaWQpCiB7CiAJaW50IHJldCA9IDA7CkBAIC05NTcsNiArOTczLDkgQEAKIAkJdm1idXNfbG9nbGV2ZWwsIEhJV09SRCh2bWJ1c19sb2dsZXZlbCksIExPV09SRCh2bWJ1c19sb2dsZXZlbCkpOwogCS8qIFRvZG86IGl0IGlzIHVzZWQgZm9yIGxvZ2xldmVsLCB0byBiZSBwb3J0ZWQgdG8gbmV3IGtlcm5lbC4gKi8KIAorCWlmICghZG1pX2NoZWNrX3N5c3RlbShtaWNyb3NvZnRfaHZfZG1pX3RhYmxlKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlyZXQgPSB2bWJ1c19idXNfaW5pdChWbWJ1c0luaXRpYWxpemUpOwogCiAJRFBSSU5UX0VYSVQoVk1CVVNfRFJWKTsKQEAgLTk3Myw3ICs5OTIsMjAgQEAKIAlyZXR1cm47CiB9CiAKKy8qCisgKiBXZSB1c2UgYSBQQ0kgdGFibGUgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3VsZCBhdXRvbG9hZCB0aGlzIGRyaXZlciAgVGhpcyBpcworICogbmVlZGVkIGJ5IGRpc3RybyB0b29scyB0byBkZXRlcm1pbmUgaWYgdGhlIGh5cGVydiBkcml2ZXJzIHNob3VsZCBiZQorICogaW5zdGFsbGVkIGFuZC9vciBjb25maWd1cmVkLiAgV2UgZG9uJ3QgZG8gYW55dGhpbmcgZWxzZSB3aXRoIHRoZSB0YWJsZSwgYnV0CisgKiBpdCBuZWVkcyB0byBiZSBwcmVzZW50LgorICovCitjb25zdCBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWljcm9zb2Z0X2h2X3BjaV90YWJsZVtdID0geworCXsgUENJX0RFVklDRSgweDE0MTQsIDB4NTM1MykgfSwJLyogVkdBIGNvbXBhdGlibGUgY29udHJvbGxlciAqLworCXsgMCB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG1pY3Jvc29mdF9odl9wY2lfdGFibGUpOworCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihIVl9EUlZfVkVSU0lPTik7CiBtb2R1bGVfcGFyYW0odm1idXNfaXJxLCBpbnQsIFNfSVJVR08pOwogbW9kdWxlX3BhcmFtKHZtYnVzX2xvZ2xldmVsLCBpbnQsIFNfSVJVR08pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvaWlvL2luZHVzdHJpYWxpby1jb3JlLmMKaW5kZXggNzY4ZjQ0OC4uYjQ1NmRmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL2lpby9pbmR1c3RyaWFsaW8tY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vaW5kdXN0cmlhbGlvLWNvcmUuYwpAQCAtNzksMTEgKzc5LDE0IEBACiAJLyogRG9lcyBhbnlvbmUgY2FyZT8gKi8KIAltdXRleF9sb2NrKCZldl9pbnQtPmV2ZW50X2xpc3RfbG9jayk7CiAJaWYgKHRlc3RfYml0KElJT19CVVNZX0JJVF9QT1MsICZldl9pbnQtPmhhbmRsZXIuZmxhZ3MpKSB7Ci0JCWlmIChldl9pbnQtPmN1cnJlbnRfZXZlbnRzID09IGV2X2ludC0+bWF4X2V2ZW50cykKKwkJaWYgKGV2X2ludC0+Y3VycmVudF9ldmVudHMgPT0gZXZfaW50LT5tYXhfZXZlbnRzKSB7CisJCQltdXRleF91bmxvY2soJmV2X2ludC0+ZXZlbnRfbGlzdF9sb2NrKTsKIAkJCXJldHVybiAwOworCQl9CiAJCWV2ID0ga21hbGxvYyhzaXplb2YoKmV2KSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChldiA9PSBOVUxMKSB7CiAJCQlyZXQgPSAtRU5PTUVNOworCQkJbXV0ZXhfdW5sb2NrKCZldl9pbnQtPmV2ZW50X2xpc3RfbG9jayk7CiAJCQlnb3RvIGVycm9yX3JldDsKIAkJfQogCQlldi0+ZXYuaWQgPSBldl9jb2RlOwpAQCAtMTE1LDcgKzExOCw3IEBACiBFWFBPUlRfU1lNQk9MKGlpb19wdXNoX2V2ZW50KTsKIAogLyogR2VuZXJpYyBpbnRlcnJ1cHQgbGluZSBpbnRlcnJ1cHQgaGFuZGxlciAqLwotaXJxcmV0dXJuX3QgaWlvX2ludGVycnVwdF9oYW5kbGVyKGludCBpcnEsIHZvaWQgKl9pbnRfaW5mbykKK3N0YXRpYyBpcnFyZXR1cm5fdCBpaW9faW50ZXJydXB0X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqX2ludF9pbmZvKQogewogCXN0cnVjdCBpaW9faW50ZXJydXB0ICppbnRfaW5mbyA9IF9pbnRfaW5mbzsKIAlzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8gPSBpbnRfaW5mby0+ZGV2X2luZm87CkBAIC0yNDksMTAgKzI1MiwxMCBAQAogfQogRVhQT1JUX1NZTUJPTChpaW9fcmVtb3ZlX2V2ZW50X2Zyb21fbGlzdCk7CiAKLXNzaXplX3QgaWlvX2V2ZW50X2NocmRldl9yZWFkKHN0cnVjdCBmaWxlICpmaWxlcCwKLQkJCSAgICAgIGNoYXIgKmJ1ZiwKLQkJCSAgICAgIHNpemVfdCBjb3VudCwKLQkJCSAgICAgIGxvZmZfdCAqZl9wcykKK3N0YXRpYyBzc2l6ZV90IGlpb19ldmVudF9jaHJkZXZfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZXAsCisJCQkJICAgICBjaGFyIF9fdXNlciAqYnVmLAorCQkJCSAgICAgc2l6ZV90IGNvdW50LAorCQkJCSAgICAgbG9mZl90ICpmX3BzKQogewogCXN0cnVjdCBpaW9fZXZlbnRfaW50ZXJmYWNlICpldl9pbnQgPSBmaWxlcC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBpaW9fZGV0ZWN0ZWRfZXZlbnRfbGlzdCAqZWw7CkBAIC0yODksMTYgKzI5MiwxNiBAQAogCW11dGV4X3VubG9jaygmZXZfaW50LT5ldmVudF9saXN0X2xvY2spOwogCS8qCiAJICogUG9zc2libGUgY29uY3VyZW5jeSBpc3N1ZSBpZiBhbiB1cGRhdGUgb2YgdGhpcyBldmVudCBpcyBvbiBpdHMgd2F5Ci0JICogdGhyb3VnaC4gTWF5IGxlYWQgdG8gbmV3IGV2ZW4gYmVpbmcgcmVtb3ZlZCB3aGlsc3QgdGhlIHJlcG9ydGVkIGV2ZW50Ci0JICogd2FzIHRoZSB1bmVzY2FsYXRlZCBldmVudC4gSW4gdHlwaWNhbCB1c2UgY2FzZSB0aGlzIGlzIG5vdCBhIHByb2JsZW0KLQkgKiBhcyB1c2Vyc3BhY2Ugd2lsbCBzYXkgcmVhZCBoYWxmIHRoZSBidWZmZXIgZHVlIHRvIGEgNTAlIGZ1bGwgZXZlbnQKLQkgKiB3aGljaCB3b3VsZCBtYWtlIHRoZSBjb3JyZWN0IDEwMCUgZnVsbCBpbmNvcnJlY3QgYW55d2F5LgorCSAqIHRocm91Z2guIE1heSBsZWFkIHRvIG5ldyBldmVudCBiZWluZyByZW1vdmVkIHdoaWxzdCB0aGUgcmVwb3J0ZWQKKwkgKiBldmVudCB3YXMgdGhlIHVuZXNjYWxhdGVkIGV2ZW50LiBJbiB0eXBpY2FsIHVzZSBjYXNlIHRoaXMgaXMgbm90IGEKKwkgKiBwcm9ibGVtIGFzIHVzZXJzcGFjZSB3aWxsIHNheSByZWFkIGhhbGYgdGhlIGJ1ZmZlciBkdWUgdG8gYSA1MCUKKwkgKiBmdWxsIGV2ZW50IHdoaWNoIHdvdWxkIG1ha2UgdGhlIGNvcnJlY3QgMTAwJSBmdWxsIGluY29ycmVjdCBhbnl3YXkuCiAJICovCi0Jc3Bpbl9sb2NrKCZlbC0+c2hhcmVkX3BvaW50ZXItPmxvY2spOwotCWlmIChlbC0+c2hhcmVkX3BvaW50ZXIpCisJaWYgKGVsLT5zaGFyZWRfcG9pbnRlcikgeworCQlzcGluX2xvY2soJmVsLT5zaGFyZWRfcG9pbnRlci0+bG9jayk7CiAJCShlbC0+c2hhcmVkX3BvaW50ZXItPmV2X3ApID0gTlVMTDsKLQlzcGluX3VubG9jaygmZWwtPnNoYXJlZF9wb2ludGVyLT5sb2NrKTsKLQorCQlzcGluX3VubG9jaygmZWwtPnNoYXJlZF9wb2ludGVyLT5sb2NrKTsKKwl9CiAJa2ZyZWUoZWwpOwogCiAJcmV0dXJuIGxlbjsKQEAgLTMxMCw3ICszMTMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBpaW9fZXZlbnRfY2hyZGV2X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKQorc3RhdGljIGludCBpaW9fZXZlbnRfY2hyZGV2X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGVwKQogewogCXN0cnVjdCBpaW9faGFuZGxlciAqaGFuZCA9IGlpb19jZGV2X3RvX2hhbmRsZXIoaW5vZGUtPmlfY2Rldik7CiAJc3RydWN0IGlpb19ldmVudF9pbnRlcmZhY2UgKmV2X2ludCA9IGhhbmQtPnByaXZhdGU7CkBAIC0zMzIsNyArMzM1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IGlpb19ldmVudF9jaHJkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCitzdGF0aWMgaW50IGlpb19ldmVudF9jaHJkZXZfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZXApCiB7CiAJc3RydWN0IGlpb19oYW5kbGVyICpoYW5kID0gaWlvX2NkZXZfdG9faGFuZGxlcihpbm9kZS0+aV9jZGV2KTsKIAlzdHJ1Y3QgaWlvX2V2ZW50X2ludGVyZmFjZSAqZXZfaW50ID0gaGFuZC0+cHJpdmF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19nZW5lcmljLmggYi9kcml2ZXJzL3N0YWdpbmcvaWlvL3JpbmdfZ2VuZXJpYy5oCmluZGV4IDkzYjkxYjIuLjA5MDQ0YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19nZW5lcmljLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL2lpby9yaW5nX2dlbmVyaWMuaApAQCAtMTQ2LDggKzE0Niw3IEBACiAJcmluZy0+bGVuZ3RoID0gbGVuZ3RoOwogCXJpbmctPmxvb3Bjb3VudCA9IDA7CiAJcmluZy0+c2hhcmVkX2V2X3BvaW50ZXIuZXZfcCA9IDA7Ci0JcmluZy0+c2hhcmVkX2V2X3BvaW50ZXIubG9jayA9Ci0JCV9fU1BJTl9MT0NLX1VOTE9DS0VEKHJpbmctPnNoYXJlZF9ldl9wb2ludGVyLT5sb2MpOworCXNwaW5fbG9ja19pbml0KCZyaW5nLT5zaGFyZWRfZXZfcG9pbnRlci5sb2NrKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL3Jpbmdfc3cuYyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19zdy5jCmluZGV4IDM1OWZmOTIuLjZmN2Y0ZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19zdy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vcmluZ19zdy5jCkBAIC04LDcgKzgsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KQEAgLTIxLDcgKzIwLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlfX2lpb19pbml0X3JpbmdfYnVmZmVyKCZyaW5nLT5idWYsIGJ5dGVzX3Blcl9kYXR1bSwgbGVuZ3RoKTsKLQlyaW5nLT51c2VfbG9jayA9IF9fU1BJTl9MT0NLX1VOTE9DS0VEKChyaW5nKS0+dXNlX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZyaW5nLT51c2VfbG9jayk7CiAJcmluZy0+ZGF0YSA9IGttYWxsb2MobGVuZ3RoKnJpbmctPmJ1Zi5icGQsIEdGUF9LRVJORUwpOwogCXJpbmctPnJlYWRfcCA9IDA7CiAJcmluZy0+d3JpdGVfcCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvaWlvL3RyaWdnZXJfY29uc3VtZXIuaCBiL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlcl9jb25zdW1lci5oCmluZGV4IGEwMmQ3MGIuLjlkNTJkOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlcl9jb25zdW1lci5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9paW8vdHJpZ2dlcl9jb25zdW1lci5oCkBAIC0yNyw3ICsyNyw3IEBACiAgKiBpaW9fZGV2aWNlX3JlZ2lzdGVyX3RyaWdnZXJfY29uc3VtZXIoKSAtIHNldCB1cCBhbiBpaW9fZGV2IHRvIHVzZSB0cmlnZ2VycwogICogQGRldl9pbmZvOiBpaW9fZGV2IGFzc29jaWF0ZWQgd2l0aCB0aGUgZGV2aWNlIHRoYXQgd2lsbCBjb25zdW1lIHRoZSB0cmlnZ2VyCiAgKiovCi1pbnQgaWlvX2RldmljZV9yZWdpc3Rlcl90cmlnZ2VyX2NvbnN1bWVyKHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbykKK3N0YXRpYyBpbnQgaWlvX2RldmljZV9yZWdpc3Rlcl90cmlnZ2VyX2NvbnN1bWVyKHN0cnVjdCBpaW9fZGV2ICpkZXZfaW5mbykKIHsKIAlyZXR1cm4gMDsKIH07CkBAIC0zNiw3ICszNiw3IEBACiAgKiBpaW9fZGV2aWNlX3VucmVnaXN0ZXJfdHJpZ2dlcl9jb25zdW1lcigpIC0gcmV2ZXJzZSB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MKICAqIEBkZXZfaW5mbzogaWlvX2RldiBhc3NvY2lhdGVkIHdpdGggdGhlIGRldmljZSB0aGF0IGNvbnN1bWVkIHRoZSB0cmlnZ2VyCiAgKiovCi1pbnQgaWlvX2RldmljZV91bnJlZ2lzdGVyX3RyaWdnZXJfY29uc3VtZXIoc3RydWN0IGlpb19kZXYgKmRldl9pbmZvKQorc3RhdGljIGludCBpaW9fZGV2aWNlX3VucmVnaXN0ZXJfdHJpZ2dlcl9jb25zdW1lcihzdHJ1Y3QgaWlvX2RldiAqZGV2X2luZm8pCiB7CiAJcmV0dXJuIDA7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2RyaXZlci5jIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L2RyaXZlci5jCmluZGV4IGU0MDc4YTkuLjAzOTJhNGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi9kcml2ZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbGluZTYvZHJpdmVyLmMKQEAgLTMzLDcgKzMzLDcgQEAKIAogCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgbGluZTZfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBsaW5lNl9pZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX0JBU1NQT0RYVCkgfSwKIAl7IFVTQl9ERVZJQ0UoTElORTZfVkVORE9SX0lELCBMSU5FNl9ERVZJRF9CQVNTUE9EWFRMSVZFKSB9LAogCXsgVVNCX0RFVklDRShMSU5FNl9WRU5ET1JfSUQsIExJTkU2X0RFVklEX0JBU1NQT0RYVFBSTykgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9saW5lNi92YXJpYXguYyBiL2RyaXZlcnMvc3RhZ2luZy9saW5lNi92YXJpYXguYwppbmRleCA0OGQ4MzRiLi41OGZlZjgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbGluZTYvdmFyaWF4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2xpbmU2L3ZhcmlheC5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JdmFyaWF4LT5idWZmZXJfYWN0aXZhdGVbVkFSSUFYX09GRlNFVF9BQ1RJVkFURV0gPSB2YWx1ZSA/IDE6IDA7CisJdmFyaWF4LT5idWZmZXJfYWN0aXZhdGVbVkFSSUFYX09GRlNFVF9BQ1RJVkFURV0gPSB2YWx1ZSA/IDEgOiAwOwogCWxpbmU2X3NlbmRfcmF3X21lc3NhZ2VfYXN5bmMoJnZhcmlheC0+bGluZTYsIHZhcmlheC0+YnVmZmVyX2FjdGl2YXRlLAogCQkJCSAgICAgc2l6ZW9mKHZhcmlheF9hY3RpdmF0ZSkpOwogCXJldHVybiBjb3VudDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9taW1pby9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL21pbWlvL0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUwNWRjYjIuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL21pbWlvL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi1jb25maWcgSU5QVVRfTUlNSU8KLQl0cmlzdGF0ZSAiTWltaW8gWGkgaW50ZXJhY3RpdmUgd2hpdGVib2FyZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVVNCICYmIElOUFVUCi0JZGVmYXVsdCBOCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgYSBNaW1pbyBYaSBpbnRlcmFjdGl2ZQotCSAgd2hpdGVib2FyZCBkZXZpY2UuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1pbWlvLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21pbWlvL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL21pbWlvL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3NzgwN2VlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9taW1pby9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLW9iai0kKENPTkZJR19JTlBVVF9NSU1JTykJKz0gbWltaW8ubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL21pbWlvL21pbWlvLmMgYi9kcml2ZXJzL3N0YWdpbmcvbWltaW8vbWltaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJhODEwMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvbWltaW8vbWltaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDkxNCArMCwwIEBACi0vKgotICogSGFyZHdhcmUgZXZlbnQgPT4gaW5wdXQgZXZlbnQgbWFwcGluZzoKLSAqCi0gKgotICoKLSBpbnB1dC5oOiNkZWZpbmUgQlROX1RPT0xfUEVOICAgICAgICAgICAgMHgxNDAgYmxhY2sKLSBpbnB1dC5oOiNkZWZpbmUgQlROX1RPT0xfUlVCQkVSICAgICAgICAgMHgxNDEgYmx1ZQotIGlucHV0Lmg6I2RlZmluZSBCVE5fVE9PTF9CUlVTSCAgICAgICAgICAweDE0MiBncmVlbgotIGlucHV0Lmg6I2RlZmluZSBCVE5fVE9PTF9QRU5DSUwgICAgICAgICAweDE0MyByZWQKLSBpbnB1dC5oOiNkZWZpbmUgQlROX1RPT0xfQUlSQlJVU0ggICAgICAgMHgxNDQgZXJhc2VyCi0gaW5wdXQuaDojZGVmaW5lIEJUTl9UT09MX0ZJTkdFUiAgICAgICAgIDB4MTQ1IHNtYWxsIGVyYXNlcgotIGlucHV0Lmg6I2RlZmluZSBCVE5fVE9PTF9NT1VTRSAgICAgICAgICAweDE0NiBtaW1pbyBpbnRlcmFjdGl2ZQotIGlucHV0Lmg6I2RlZmluZSBCVE5fVE9PTF9MRU5TICAgICAgICAgICAweDE0NyBtaW1pbyBpbnRlcmFjdGl2ZSBidXQxCi0gaW5wdXQuaDojZGVmaW5lIExPQ0FMQlROX1RPT0xfRVhUUkExICAgIDB4MTRhIG1pbWlvIGludGVyYWN0aXZlIGJ1dDIgPT0gQlROX1RPVUNICi0gaW5wdXQuaDojZGVmaW5lIExPQ0FMQlROX1RPT0xfRVhUUkEyICAgIDB4MTRiIG1pbWlvIGV4dHJhIHBlbnMgKG9yYW5nZSwgYnJvd24sIHllbGxvdywgcHVycGxlKSA9PSBCVE5fU1RZTFVTCi0gaW5wdXQuaDojZGVmaW5lIExPQ0FMQlROX1RPT0xfRVhUUkEzICAgIDB4MTRjIHVudXNlZCA9PSBCVE5fU1RZTFVTMgotIGlucHV0Lmg6I2RlZmluZSBCVE5fVE9PTF9ET1VCTEVUQVAgICAgICAweDE0ZCB1bnVzZWQKLSBpbnB1dC5oOiNkZWZpbmUgQlROX1RPT0xfVFJJUExFVEFQICAgICAgMHgxNGUgdW51c2VkCi0gKgotICogTUlNSU9fRVZfUEVORE9XTihNSU1JT19QRU5fSykgICAgID0+IEVWX0tFWSBCSVQoQlROX1RPT0xfUEVOKQotICogTUlNSU9fRVZfUEVORE9XTihNSU1JT19QRU5fQikgICAgID0+IEVWX0tFWSBCSVQoQlROX1RPT0xfUlVCQkVSKQotICogTUlNSU9fRVZfUEVORE9XTihNSU1JT19QRU5fRykgICAgID0+IEVWX0tFWSBCSVQoQlROX1RPT0xfQlJVU0gpCi0gKiBNSU1JT19FVl9QRU5ET1dOKE1JTUlPX1BFTl9SKSAgICAgPT4gRVZfS0VZIEJJVChCVE5fVE9PTF9QRU5DSUwpCi0gKiBNSU1JT19FVl9QRU5ET1dOKE1JTUlPX1BFTl9FKSAgICAgPT4gRVZfS0VZIEJJVChCVE5fVE9PTF9BSVJCUlVTSCkKLSAqIE1JTUlPX0VWX1BFTkRPV04oTUlNSU9fUEVOX0VTKSAgICA9PiBFVl9LRVkgQklUKEJUTl9UT09MX0ZJTkdFUikKLSAqIE1JTUlPX0VWX1BFTkRPV04oTUlNSU9fUEVOX0kpICAgICA9PiBFVl9LRVkgQklUKEJUTl9UT09MX01PVVNFKQotICogTUlNSU9fRVZfUEVORE9XTihNSU1JT19QRU5fSUwpICAgID0+IEVWX0tFWSBCSVQoQlROX1RPT0xfTEVOUykKLSAqIE1JTUlPX0VWX1BFTkRPV04oTUlNSU9fUEVOX0lSKSAgICA9PiBFVl9LRVkgQklUKEJUTl9UT09MX0RPVUJMRVRBUCkKLSAqIE1JTUlPX0VWX1BFTkRPV04oTUlNSU9fUEVOX0VYKSAgICA9PiBFVl9LRVkgQklUKEJUTl9UT09MX1RSSVBMRVRBUCkKLSAqIE1JTUlPX0VWX1BFTkRBVEEgICAgICAgICAgICAgICAgID0+IEVWX0FCUyBCSVQoQUJTX1gpLCBCSVQoQUJTX1kpCi0gKiBNSU1JT19FVl9NRU1SRVNFVCAgICAgICAgICAgICAgPT4gRVZfS0VZIEJJVChCVE5fMCkKLSAqIE1JTUlPX0VWX0FDQyhBQ0NfTkVXUEFHRSkgICAgICAgPT4gRVZfS0VZIEJJVChCVE5fMSkKLSAqIE1JTUlPX0VWX0FDQyhBQ0NfVEFHUEFHRSkgICAgICA9PiBFVl9LRVkgQklUKEJUTl8yKQotICogTUlNSU9fRVZfQUNDKEFDQ19QUklOVFBBR0UpICAgICAgPT4gRVZfS0VZIEJJVChCVE5fMykKLSAqIE1JTUlPX0VWX0FDQyhBQ0NfTUFYSU1JWkUpICAgICAgPT4gRVZfS0VZIEJJVChCVE5fNCkKLSAqIE1JTUlPX0VWX0FDQyhBQ0NfRklORENUTFBOTCkgICAgICA9PiBFVl9LRVkgQklUKEJUTl81KQotICoKLSAqCi0gKiBvcGVuIGlzc3VlczoKLSAqICAgICAgLSBjb2xkLWxvYWQgb2YgZGF0YSBjYXB0dXJlZCB3aGVuIG1pbWlvIGluIHN0YW5kYWxvbmUgbW9kZSBub3QgeWV0Ci0gKiAgICAgICAgIHN1cHBvcnRlZDsgbmVlZCB0byBzbm9vcCBXaW4zMiBib3ggdG8gc2VlIGRhdGFzdHJlYW0gZm9yIHRoaXMuCi0gKiAgICAgICAtIG1pbWlvIG1vdXNlIG5vdCB5ZXQgc3VwcG9ydGVkOyBuZWVkIHRvIHNub29wIFdpbjMyIGJveCB0byBzZWUgdGhlCi0gKiAgICAgICAgIGRhdGFzdHJlYW0gZm9yIHRoaXMuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLQotI2RlZmluZSBEUklWRVJfVkVSU0lPTgkJInYwLjAzMSIKLSNkZWZpbmUgRFJJVkVSX0FVVEhPUgkJIm13aWxkZXJAY3Mubm1zdS5lZHUiCi0jZGVmaW5lIERSSVZFUl9ERVNDCQkiVVNCIG1pbWlvLXhpIGRyaXZlciIKLQotZW51bSB7VVBWQUxVRSwgRE9XTlZBTFVFLCBNT1ZFVkFMVUV9OwotCi0jZGVmaW5lIE1JTUlPX1hSQU5HRV9NQVgJOTYwMAotI2RlZmluZSBNSU1JT19ZUkFOR0VfTUFYCTQ4MDAKLQotI2RlZmluZSBMT0NBTEJUTl9UT09MX0VYVFJBMQlCVE5fVE9VQ0gKLSNkZWZpbmUgTE9DQUxCVE5fVE9PTF9FWFRSQTIJQlROX1NUWUxVUwotI2RlZmluZSBMT0NBTEJUTl9UT09MX0VYVFJBMwlCVE5fU1RZTFVTMgotCi0jZGVmaW5lIE1JTUlPX1ZFTkRPUl9JRAkJMHgwOGQzCi0jZGVmaW5lIE1JTUlPX1BST0RVQ1RfSUQJMHgwMDAxCi0jZGVmaW5lIE1JTUlPX01BWFBBWUxPQUQJKDgpCi0jZGVmaW5lIE1JTUlPX01BWE5BTUVMRU4JKDY0KQotI2RlZmluZSBNSU1JT19UWFdBSVQJCSgxKQotI2RlZmluZSBNSU1JT19UWERPTkUJCSgyKQotCi0jZGVmaW5lIE1JTUlPX0VWX1BFTkRPV04JKDB4MjIpCi0jZGVmaW5lIE1JTUlPX0VWX1BFTkRBVEEJKDB4MjQpCi0jZGVmaW5lIE1JTUlPX0VWX1BFTlVQCQkoMHg1MSkKLSNkZWZpbmUgTUlNSU9fRVZfTUVNUkVTRVQJKDB4NDUpCi0jZGVmaW5lIE1JTUlPX0VWX0FDQwkJKDB4YjIpCi0KLSNkZWZpbmUgTUlNSU9fUEVOX0sJCSgxKQkvKiBibGFjayBwZW4gKi8KLSNkZWZpbmUgTUlNSU9fUEVOX0IJCSgyKQkvKiBibHVlIHBlbiAqLwotI2RlZmluZSBNSU1JT19QRU5fRwkJKDMpCS8qIGdyZWVuIHBlbiAqLwotI2RlZmluZSBNSU1JT19QRU5fUgkJKDQpCS8qIHJlZCBwZW4gKi8KLS8qIDUsIDYsIDcsIDggYXJlIGV4dHJhIHBlbnMgKi8KLSNkZWZpbmUgTUlNSU9fUEVOX0UJCSg5KQkvKiBiaWcgZXJhc2VyICovCi0jZGVmaW5lIE1JTUlPX1BFTl9FUwkJKDEwKQkvKiBsaWwgZXJhc2VyICovCi0jZGVmaW5lIE1JTUlPX1BFTkpVTVBfU1RBUlQJKDEwKQotI2RlZmluZSBNSU1JT19QRU5KVU1QCQkoNikKLSNkZWZpbmUgTUlNSU9fUEVOX0kJCSgxNykJLyogbWltaW8gaW50ZXJhY3RpdmUgKi8KLSNkZWZpbmUgTUlNSU9fUEVOX0lMCQkoMTgpCS8qIG1pbWlvIGludGVyYWN0aXZlIGJ1dHRvbiAxICovCi0jZGVmaW5lIE1JTUlPX1BFTl9JUgkJKDE5KQkvKiBtaW1pbyBpbnRlcmFjdGl2ZSBidXR0b24gMiAqLwotCi0jZGVmaW5lIE1JTUlPX1BFTl9NQVgJCShNSU1JT19QRU5fSVIpCi0KLSNkZWZpbmUgQUNDX0RPTkUJCSgwKQotI2RlZmluZSBBQ0NfTkVXUEFHRQkJKDEpCi0jZGVmaW5lIEFDQ19UQUdQQUdFCQkoMikKLSNkZWZpbmUgQUNDX1BSSU5UUEFHRQkJKDQpCi0jZGVmaW5lIEFDQ19NQVhJTUlaRQkJKDgpCi0jZGVmaW5lIEFDQ19GSU5EQ1RMUE5MCQkoMTYpCi0KLSNkZWZpbmUgaXN2YWxpZHR4c2l6ZShuKQkoKG4pID4gMCAmJiAobikgPD0gTUlNSU9fTUFYUEFZTE9BRCkKLQotCi1zdHJ1Y3QgcGt0YnVmIHsKLQl1bnNpZ25lZCBjaGFyIGluc3RyOwotCXVuc2lnbmVkIGNoYXIgYnVmWzE2XTsKLQl1bnNpZ25lZCBjaGFyICpwOwotCXVuc2lnbmVkIGNoYXIgKnE7Ci19OwotCi1zdHJ1Y3QgdXNiaW50ZW5kcHQgewotCWRtYV9hZGRyX3QgZG1hOwotCXN0cnVjdCB1cmIgKnVyYjsKLQl1bnNpZ25lZCBjaGFyICpidWY7Ci0Jc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICpkZXNjOwotfTsKLQotc3RydWN0IG1pbWlvIHsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OwotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICp1aWZjOwotCWludCBvcGVuOwotCWludCBwcmVzZW50OwotCWludCBncmVldGVkOwotCWludCB0eGZsYWdzOwotCWNoYXIgcGh5c1tNSU1JT19NQVhOQU1FTEVOXTsKLQlzdHJ1Y3QgdXNiaW50ZW5kcHQgaW47Ci0Jc3RydWN0IHVzYmludGVuZHB0IG91dDsKLQlzdHJ1Y3QgcGt0YnVmIHBrdGJ1ZjsKLQl1bnNpZ25lZCBjaGFyIG1pbm9yOwotCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxOwotCXNwaW5sb2NrX3QgdHhsb2NrOwotCXZvaWQgKCpyeGhhbmRsZXIpKHN0cnVjdCBtaW1pbyAqLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGludCk7Ci0JaW50IGxhc3RfcGVuX2Rvd247Ci19OwotCi1zdGF0aWMgdm9pZCBtaW1pb19jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICopOwotc3RhdGljIHZvaWQgbWltaW9fZGVhbGxvYyhzdHJ1Y3QgbWltaW8gKik7Ci1zdGF0aWMgdm9pZCBtaW1pb19kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICopOwotc3RhdGljIGludCBtaW1pb19ncmVldChzdHJ1Y3QgbWltaW8gKik7Ci1zdGF0aWMgdm9pZCBtaW1pb19pcnFfaW4oc3RydWN0IHVyYiAqKTsKLXN0YXRpYyB2b2lkIG1pbWlvX2lycV9vdXQoc3RydWN0IHVyYiAqKTsKLXN0YXRpYyBpbnQgbWltaW9fb3BlbihzdHJ1Y3QgaW5wdXRfZGV2ICopOwotc3RhdGljIGludCBtaW1pb19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqKTsKLXN0YXRpYyB2b2lkIG1pbWlvX3J4X2hhbmRsZXIoc3RydWN0IG1pbWlvICosIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgaW50KTsKLXN0YXRpYyBpbnQgbWltaW9fdHgoc3RydWN0IG1pbWlvICosIGNvbnN0IGNoYXIgKiwgaW50KTsKLQotc3RhdGljIGNoYXIgbWltaW9fbmFtZVtdID0gIlZpcnR1YWxJbmsgbWltaW8tWGkiOwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG1pbWlvX3RhYmxlIFtdID0gewotCXsgVVNCX0RFVklDRShNSU1JT19WRU5ET1JfSUQsIE1JTUlPX1BST0RVQ1RfSUQpIH0sCi0JeyBVU0JfREVWSUNFKDB4MDUyNSwgMHhhNGEwKSB9LCAvKiBnYWRnZXQgemVybyBmaXJtd2FyZSAqLwotCXsgfQotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIG1pbWlvX3RhYmxlKTsKLQotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1pbWlvX2RyaXZlciA9IHsKLQkubmFtZSA9ICJtaW1pbyIsCi0JLnByb2JlID0gbWltaW9fcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPSBtaW1pb19kaXNjb25uZWN0LAotCS5pZF90YWJsZSA9IG1pbWlvX3RhYmxlLAotfTsKLQotc3RhdGljIERFQ0xBUkVfTVVURVgoZGlzY29ubmVjdF9zZW0pOwotCi1zdGF0aWMgdm9pZCBtaW1pb19jbG9zZShzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2KQotewotCXN0cnVjdCBtaW1pbyAqbWltaW87Ci0KLQltaW1pbyA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpOwotCWlmICghbWltaW8pIHsKLQkJZGV2X2VycigmaWRldi0+ZGV2LCAibnVsbCBtaW1pbyBhdHRhY2hlZCB0byBpbnB1dCBkZXZpY2VcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKG1pbWlvLT5vcGVuIDw9IDApCi0JCWRldl9lcnIoJmlkZXYtPmRldiwgIm1pbWlvIG5vdCBvcGVuLlxuIik7Ci0JZWxzZQotCQltaW1pby0+b3Blbi0tOwotCi0JaWYgKG1pbWlvLT5wcmVzZW50ID09IDAgJiYgbWltaW8tPm9wZW4gPT0gMCkKLQkJbWltaW9fZGVhbGxvYyhtaW1pbyk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1pbWlvX2RlYWxsb2Moc3RydWN0IG1pbWlvICptaW1pbykKLXsKLQlpZiAobWltaW8gPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JdXNiX2tpbGxfdXJiKG1pbWlvLT5pbi51cmIpOwotCi0JdXNiX2tpbGxfdXJiKG1pbWlvLT5vdXQudXJiKTsKLQotCWlmIChtaW1pby0+aWRldikgewotCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShtaW1pby0+aWRldik7Ci0JCWlmIChtaW1pby0+aWRldi0+Z3JhYikKLQkJCWlucHV0X2Nsb3NlX2RldmljZShtaW1pby0+aWRldi0+Z3JhYik7Ci0JCWVsc2UKLQkJCWRldl9kYmcoJm1pbWlvLT5pZGV2LT5kZXYsICJtaW1pby0+aWRldi0+Z3JhYiA9PSBOVUxMIgotCQkJCSIgLS0gZGlkbid0IGNhbGwgaW5wdXRfY2xvc2VfZGV2aWNlXG4iKTsKLQl9Ci0KLQl1c2JfZnJlZV91cmIobWltaW8tPmluLnVyYik7Ci0KLQl1c2JfZnJlZV91cmIobWltaW8tPm91dC51cmIpOwotCi0JaWYgKG1pbWlvLT5pbi5idWYpIHsKLQkJdXNiX2J1ZmZlcl9mcmVlKG1pbWlvLT51ZGV2LCBNSU1JT19NQVhQQVlMT0FELCBtaW1pby0+aW4uYnVmLAotCQkJCW1pbWlvLT5pbi5kbWEpOwotCX0KLQotCWlmIChtaW1pby0+b3V0LmJ1ZikKLQkJdXNiX2J1ZmZlcl9mcmVlKG1pbWlvLT51ZGV2LCBNSU1JT19NQVhQQVlMT0FELCBtaW1pby0+b3V0LmJ1ZiwKLQkJCQltaW1pby0+b3V0LmRtYSk7Ci0KLQlpZiAobWltaW8tPmlkZXYpCi0JCWlucHV0X2ZyZWVfZGV2aWNlKG1pbWlvLT5pZGV2KTsKLQotCWtmcmVlKG1pbWlvKTsKLX0KLQotc3RhdGljIHZvaWQgbWltaW9fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZjKQotewotCXN0cnVjdCBtaW1pbyAqbWltaW87Ci0KLQlkb3duKCZkaXNjb25uZWN0X3NlbSk7Ci0KLQltaW1pbyA9IHVzYl9nZXRfaW50ZmRhdGEoaWZjKTsKLQl1c2Jfc2V0X2ludGZkYXRhKGlmYywgTlVMTCk7Ci0JZGV2X2RiZygmbWltaW8tPmlkZXYtPmRldiwgImRpc2Nvbm5lY3RcbiIpOwotCi0JaWYgKG1pbWlvKSB7Ci0JCW1pbWlvLT5wcmVzZW50ID0gMDsKLQotCQlpZiAobWltaW8tPm9wZW4gPD0gMCkKLQkJCW1pbWlvX2RlYWxsb2MobWltaW8pOwotCX0KLQotCXVwKCZkaXNjb25uZWN0X3NlbSk7Ci19Ci0KLXN0YXRpYyBpbnQgbWltaW9fZ3JlZXQoc3RydWN0IG1pbWlvICptaW1pbykKLXsKLQljb25zdCBzdHJ1Y3QgZ3J0cGt0IHsKLQkJaW50IG5ieXRlczsKLQkJdW5zaWduZWQgZGVsYXk7Ci0JCWNoYXIgZGF0YVs4XTsKLQl9IGdydHBrdHNbXSA9IHsKLQkJeyAzLCAwLCB7IDB4MTEsIDB4NTUsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSB9LAotCQl7IDUsIDAsIHsgMHg1MywgMHg1NSwgMHgwMCwgMHgwMCwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCB9IH0sCi0JCXsgNSwgMCwgeyAweDQzLCAweDU1LCAweDAwLCAweDAwLCAweDE2LCAweDAwLCAweDAwLCAweDAwIH0gfSwKLQkJeyA1LCAwLCB7IDB4MzMsIDB4NTUsIDB4MDAsIDB4MDAsIDB4NjYsIDB4MDAsIDB4MDAsIDB4MDAgfSB9LAotCQl7IDUsIDAsIHsgMHgxMywgMHgwMCwgMHg1ZSwgMHgwMiwgMHg0ZiwgMHgwMCwgMHgwMCwgMHgwMCB9IH0sCi0JCXsgNSwgMCwgeyAweDEzLCAweDAwLCAweDA0LCAweDAzLCAweDE0LCAweDAwLCAweDAwLCAweDAwIH0gfSwKLQkJeyA1LCAyLCB7IDB4MTMsIDB4MDAsIDB4MDAsIDB4MDQsIDB4MTcsIDB4MDAsIDB4MDAsIDB4MDAgfSB9LAotCQl7IDUsIDAsIHsgMHgxMywgMHgwMCwgMHgwZCwgMHgwOCwgMHgxNiwgMHgwMCwgMHgwMCwgMHgwMCB9IH0sCi0JCXsgNSwgMCwgeyAweDEzLCAweDAwLCAweDRkLCAweDAxLCAweDVmLCAweDAwLCAweDAwLCAweDAwIH0gfSwKLQkJeyAzLCAwLCB7IDB4ZjEsIDB4NTUsIDB4YTQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAgfSB9LAotCQl7IDcsIDIsIHsgMHg1MiwgMHg1NSwgMHgwMCwgMHgwNywgMHgzMSwgMHg1NSwgMHg2NCwgMHgwMCB9IH0sCi0JCXsgMCwgMCwgeyAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwIH0gfSwKLQl9OwotCWludCByc2x0OwotCWNvbnN0IHN0cnVjdCBncnRwa3QgKnBrdDsKLQotCWZvciAocGt0ID0gZ3J0cGt0czsgcGt0LT5uYnl0ZXM7IHBrdCsrKSB7Ci0JCXJzbHQgPSBtaW1pb190eChtaW1pbywgcGt0LT5kYXRhLCBwa3QtPm5ieXRlcyk7Ci0JCWlmIChyc2x0KQotCQkJcmV0dXJuIHJzbHQ7Ci0JCWlmIChwa3QtPmRlbGF5KQotCQkJbXNsZWVwKHBrdC0+ZGVsYXkpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBtaW1pb19pcnFfaW4oc3RydWN0IHVyYiAqdXJiKQotewotCWludCByc2x0OwotCWNoYXIgKmRhdGE7Ci0JY29uc3QgY2hhciAqcmVhc29uID0gImdvaW5nIGRvd24iOwotCXN0cnVjdCBtaW1pbyAqbWltaW87Ci0KLQltaW1pbyA9IHVyYi0+Y29udGV4dDsKLQotCWlmIChtaW1pbyA9PSBOVUxMKQotCQkvKiBwYXJhbm9pYSAqLwotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7Ci0JY2FzZSAwOgotCQkvKiBzdWNjZXNzICovCi0JCWJyZWFrOwotCWNhc2UgLUVUSU1FRE9VVDoKLQkJcmVhc29uID0gInRpbWVvdXQgLS0gdW5wbHVnZ2VkPyI7Ci0JY2FzZSAtRUNPTk5SRVNFVDoKLQljYXNlIC1FTk9FTlQ6Ci0JY2FzZSAtRVNIVVRET1dOOgotCQlkZXZfZGJnKCZtaW1pby0+aWRldi0+ZGV2LCAiJXMuXG4iLCByZWFzb24pOwotCQlyZXR1cm47Ci0JZGVmYXVsdDoKLQkJZGV2X2RiZygmbWltaW8tPmlkZXYtPmRldiwgInVua25vd24gdXJiLXN0YXR1czogJWQuXG4iLAotCQkJdXJiLT5zdGF0dXMpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCWRhdGEgPSBtaW1pby0+aW4uYnVmOwotCi0JaWYgKG1pbWlvLT5yeGhhbmRsZXIpCi0JCW1pbWlvLT5yeGhhbmRsZXIobWltaW8sIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci1leGl0OgotCS8qCi0JICogS2VlcCBsaXN0ZW5pbmcgdG8gZGV2aWNlIG9uIHNhbWUgdXJiLgotCSAqLwotCXJzbHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyc2x0KQotCQlkZXZfZXJyKCZtaW1pby0+aWRldi0+ZGV2LCAidXNiX3N1Ym1pdF91cmIgZmFpbHVyZTogJWQuXG4iLAotCQkJcnNsdCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1pbWlvX2lycV9vdXQoc3RydWN0IHVyYiAqdXJiKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IG1pbWlvICptaW1pbzsKLQotCW1pbWlvID0gdXJiLT5jb250ZXh0OwotCi0JaWYgKHVyYi0+c3RhdHVzKQotCQlkZXZfZGJnKCZtaW1pby0+aWRldi0+ZGV2LCAidXJiLXN0YXR1czogJWQuXG4iLCB1cmItPnN0YXR1cyk7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbWltaW8tPnR4bG9jaywgZmxhZ3MpOwotCW1pbWlvLT50eGZsYWdzIHw9IE1JTUlPX1RYRE9ORTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtaW1pby0+dHhsb2NrLCBmbGFncyk7Ci0Jd21iKCk7Ci0Jd2FrZV91cCgmbWltaW8tPndhaXRxKTsKLX0KLQotc3RhdGljIGludCBtaW1pb19vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmlkZXYpCi17Ci0JaW50IHJzbHQ7Ci0Jc3RydWN0IG1pbWlvICptaW1pbzsKLQotCXJzbHQgPSAwOwotCWRvd24oJmRpc2Nvbm5lY3Rfc2VtKTsKLQltaW1pbyA9IGlucHV0X2dldF9kcnZkYXRhKGlkZXYpOwotCWRldl9kYmcoJmlkZXYtPmRldiwgIm1pbWlvX29wZW5cbiIpOwotCi0JaWYgKG1pbWlvID09IE5VTEwpIHsKLQkJZGV2X2VycigmaWRldi0+ZGV2LCAibnVsbCBtaW1pby5cbiIpOwotCQlyc2x0ID0gLUVOT0RFVjsKLQkJZ290byBleGl0OwotCX0KLQotCWlmIChtaW1pby0+b3BlbisrKQotCQlnb3RvIGV4aXQ7Ci0KLQlpZiAobWltaW8tPnByZXNlbnQgJiYgIW1pbWlvLT5ncmVldGVkKSB7Ci0JCXN0cnVjdCB1cmIgKnVyYiA9IG1pbWlvLT5pbi51cmI7Ci0JCW1pbWlvLT5pbi51cmItPmRldiA9IG1pbWlvLT51ZGV2OwotCQlyc2x0ID0gdXNiX3N1Ym1pdF91cmIobWltaW8tPmluLnVyYiwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChyc2x0KSB7Ci0JCQlkZXZfZXJyKCZpZGV2LT5kZXYsICJ1c2Jfc3VibWl0X3VyYiBmYWlsdXJlICIKLQkJCQkiKHJlcyA9ICVkOiAlcykuIE5vdCBncmVldGluZy5cbiIsCi0JCQkJcnNsdCwKLQkJCQkoIXVyYiA/ICJ1cmIgaXMgTlVMTCIgOgotCQkJCSAodXJiLT5oY3ByaXYgPyAidXJiLT5oY3ByaXYgaXMgbm9uLU5VTEwiIDoKLQkJCQkgICghdXJiLT5jb21wbGV0ZSA/ICJ1cmIgaXMgbm90IGNvbXBsZXRlIiA6Ci0JCQkJICAgKHVyYi0+bnVtYmVyX29mX3BhY2tldHMgPD0gMCA/ICJ1cmIgaGFzIG5vIHBhY2tldHMiIDoKLQkJCQkgICAgKHVyYi0+aW50ZXJ2YWwgPD0gMCA/ICJ1cmIgaW50ZXJ2YWwgdG9vIHNtYWxsIiA6Ci0JCQkJICAgICAidXJiIGludGVydmFsIHRvbyBsYXJnZSBvciBzb21lIG90aGVyIGVycm9yIikpKSkpKTsKLQkJCXJzbHQgPSAtRUlPOwotCQkJZ290byBleGl0OwotCQl9Ci0JCXJzbHQgPSBtaW1pb19ncmVldChtaW1pbyk7Ci0JCWlmIChyc2x0ID09IDApIHsKLQkJCWRldl9kYmcoJmlkZXYtPmRldiwgIk1pbWlvIGdyZWV0ZWQgT0suXG4iKTsKLQkJCW1pbWlvLT5ncmVldGVkID0gMTsKLQkJfSBlbHNlIHsKLQkJCWRldl9kYmcoJmlkZXYtPmRldiwgIk1pbWlvIGdyZWV0IEZhaWx1cmUgKCVkKVxuIiwKLQkJCQlyc2x0KTsKLQkJfQotCX0KLQotZXhpdDoKLQl1cCgmZGlzY29ubmVjdF9zZW0pOwotCXJldHVybiByc2x0OwotfQotCi1zdGF0aWMgaW50IG1pbWlvX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmMsCi0JCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCi17Ci0JY2hhciBwYXRoWzY0XTsKLQlpbnQgcGlwZSwgbWF4cDsKLQlzdHJ1Y3QgbWltaW8gKm1pbWlvOwotCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwotCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmhvc3RpZmM7Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwotCWludCByZXMgPSAwOwotCWludCBpOwotCi0JdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaWZjKTsKLQotCW1pbWlvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1pbWlvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFtaW1pbykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKLQlpZiAoIWlucHV0X2RldikgewotCQltaW1pb19kZWFsbG9jKG1pbWlvKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JbWltaW8tPnVpZmMgPSBpZmM7Ci0JbWltaW8tPnVkZXYgPSB1ZGV2OwotCW1pbWlvLT5wa3RidWYucCA9IG1pbWlvLT5wa3RidWYuYnVmOwotCW1pbWlvLT5wa3RidWYucSA9IG1pbWlvLT5wa3RidWYuYnVmOwotCS8qIGluaXRfaW5wdXRfZGV2KG1pbWlvLT5pZGV2KTsgKi8KLQltaW1pby0+aWRldiA9IGlucHV0X2RldjsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtaW1pby0+d2FpdHEpOwotCXNwaW5fbG9ja19pbml0KCZtaW1pby0+dHhsb2NrKTsKLQlob3N0aWZjID0gaWZjLT5jdXJfYWx0c2V0dGluZzsKLQotCWlmIChob3N0aWZjLT5kZXNjLmJOdW1FbmRwb2ludHMgIT0gMikgewotCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJVbmV4cGVjdGVkIGVuZHBvaW50IGNvdW50OiAlZC5cbiIsCi0JCQlob3N0aWZjLT5kZXNjLmJOdW1FbmRwb2ludHMpOwotCQltaW1pb19kZWFsbG9jKG1pbWlvKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JbWltaW8tPmluLmRlc2MgPSAmKGhvc3RpZmMtPmVuZHBvaW50WzBdLmRlc2MpOwotCW1pbWlvLT5vdXQuZGVzYyA9ICYoaG9zdGlmYy0+ZW5kcG9pbnRbMV0uZGVzYyk7Ci0KLQltaW1pby0+aW4uYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCBNSU1JT19NQVhQQVlMT0FELCBHRlBfS0VSTkVMLAotCQkJCQkgJm1pbWlvLT5pbi5kbWEpOwotCW1pbWlvLT5vdXQuYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyh1ZGV2LCBNSU1JT19NQVhQQVlMT0FELCBHRlBfS0VSTkVMLAotCQkJCQkgICZtaW1pby0+b3V0LmRtYSk7Ci0KLQlpZiAobWltaW8tPmluLmJ1ZiA9PSBOVUxMIHx8IG1pbWlvLT5vdXQuYnVmID09IE5VTEwpIHsKLQkJZGV2X2VycigmdWRldi0+ZGV2LCAidXNiX2J1ZmZlcl9hbGxvYyBmYWlsdXJlLlxuIik7Ci0JCW1pbWlvX2RlYWxsb2MobWltaW8pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQltaW1pby0+aW4udXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQltaW1pby0+b3V0LnVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0KLQlpZiAobWltaW8tPmluLnVyYiA9PSBOVUxMIHx8IG1pbWlvLT5vdXQudXJiID09IE5VTEwpIHsKLQkJZGV2X2VycigmdWRldi0+ZGV2LCAidXNiX2FsbG9jX3VyYiBmYWlsdXJlLlxuIik7Ci0JCW1pbWlvX2RlYWxsb2MobWltaW8pOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQkvKgotCSAqIEJ1aWxkIHRoZSBpbnB1dCB1cmIuCi0JICovCi0JcGlwZSA9IHVzYl9yY3ZpbnRwaXBlKHVkZXYsIG1pbWlvLT5pbi5kZXNjLT5iRW5kcG9pbnRBZGRyZXNzKTsKLQltYXhwID0gdXNiX21heHBhY2tldCh1ZGV2LCBwaXBlLCB1c2JfcGlwZW91dChwaXBlKSk7Ci0JaWYgKG1heHAgPiBNSU1JT19NQVhQQVlMT0FEKQotCQltYXhwID0gTUlNSU9fTUFYUEFZTE9BRDsKLQl1c2JfZmlsbF9pbnRfdXJiKG1pbWlvLT5pbi51cmIsIHVkZXYsIHBpcGUsIG1pbWlvLT5pbi5idWYsIG1heHAsCi0JCQkgbWltaW9faXJxX2luLCBtaW1pbywgbWltaW8tPmluLmRlc2MtPmJJbnRlcnZhbCk7Ci0JbWltaW8tPmluLnVyYi0+dHJhbnNmZXJfZG1hID0gbWltaW8tPmluLmRtYTsKLQltaW1pby0+aW4udXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKLQotCS8qCi0JICogQnVpbGQgdGhlIG91dHB1dCB1cmIuCi0JICovCi0JcGlwZSA9IHVzYl9zbmRpbnRwaXBlKHVkZXYsIG1pbWlvLT5vdXQuZGVzYy0+YkVuZHBvaW50QWRkcmVzcyk7Ci0JbWF4cCA9IHVzYl9tYXhwYWNrZXQodWRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOwotCWlmIChtYXhwID4gTUlNSU9fTUFYUEFZTE9BRCkKLQkJbWF4cCA9IE1JTUlPX01BWFBBWUxPQUQ7Ci0JdXNiX2ZpbGxfaW50X3VyYihtaW1pby0+b3V0LnVyYiwgdWRldiwgcGlwZSwgbWltaW8tPm91dC5idWYsIG1heHAsCi0JCQkgbWltaW9faXJxX291dCwgbWltaW8sIG1pbWlvLT5vdXQuZGVzYy0+YkludGVydmFsKTsKLQltaW1pby0+b3V0LnVyYi0+dHJhbnNmZXJfZG1hID0gbWltaW8tPm91dC5kbWE7Ci0JbWltaW8tPm91dC51cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwotCi0JLyoKLQkgKiBCdWlsZCBpbnB1dCBkZXZpY2UgaW5mbwotCSAqLwotCXVzYl9tYWtlX3BhdGgodWRldiwgcGF0aCwgNjQpOwotCXNucHJpbnRmKG1pbWlvLT5waHlzLCBNSU1JT19NQVhOQU1FTEVOLCAiJXMvaW5wdXQwIiwgcGF0aCk7Ci0JaW5wdXRfc2V0X2RydmRhdGEoaW5wdXRfZGV2LCBtaW1pbyk7Ci0JLyogaW5wdXRfZGV2LT5kZXYgPSAmaWZjLT5kZXY7ICovCi0JaW5wdXRfZGV2LT5vcGVuID0gbWltaW9fb3BlbjsKLQlpbnB1dF9kZXYtPmNsb3NlID0gbWltaW9fY2xvc2U7Ci0JaW5wdXRfZGV2LT5uYW1lID0gbWltaW9fbmFtZTsKLQlpbnB1dF9kZXYtPnBoeXMgPSBtaW1pby0+cGh5czsKLQlpbnB1dF9kZXYtPmRldi5wYXJlbnQgPSAmaWZjLT5kZXY7Ci0KLQlpbnB1dF9kZXYtPmlkLmJ1c3R5cGUgPSBCVVNfVVNCOwotCWlucHV0X2Rldi0+aWQudmVuZG9yID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7Ci0JaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpOwotCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKTsKLQotCWlucHV0X2Rldi0+ZXZiaXRbMF0gfD0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKLQlmb3IgKGkgPSBCVE5fVE9PTF9QRU47IGkgPD0gTE9DQUxCVE5fVE9PTF9FWFRSQTI7ICsraSkKLQkJc2V0X2JpdChpLCBpbnB1dF9kZXYtPmtleWJpdCk7Ci0KLQlpbnB1dF9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fTUlTQyldIHw9IEJJVF9NQVNLKEJUTl8wKSB8Ci0JCQkJCQkgQklUX01BU0soQlROXzEpIHwKLQkJCQkJCSBCSVRfTUFTSyhCVE5fMikgfAotCQkJCQkJIEJJVF9NQVNLKEJUTl8zKSB8Ci0JCQkJCQkgQklUX01BU0soQlROXzQpIHwKLQkJCQkJCSBCSVRfTUFTSyhCVE5fNSk7Ci0JLyogICBpbnB1dF9kZXYtPmtleWJpdFtCVE5fTU9VU0VdIHw9IEJJVChCVE5fTEVGVCk7ICovCi0JaW5wdXRfZGV2LT5hYnNiaXRbMF0gfD0gQklUX01BU0soQUJTX1gpIHwgQklUX01BU0soQUJTX1kpOwotCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1gsIDAsIE1JTUlPX1hSQU5HRV9NQVgsIDAsIDApOwotCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1ksIDAsIE1JTUlPX1lSQU5HRV9NQVgsIDAsIDApOwotCWlucHV0X2Rldi0+YWJzYml0W0JJVF9XT1JEKEFCU19NSVNDKV0gfD0gQklUX01BU0soQUJTX01JU0MpOwotCi0jaWYgMAotCWlucHV0X2Rldi0+YWJzbWluW0FCU19YXSA9IDA7Ci0JaW5wdXRfZGV2LT5hYnNtaW5bQUJTX1ldID0gMDsKLQlpbnB1dF9kZXYtPmFic21heFtBQlNfWF0gPSA5NjAwOwotCWlucHV0X2Rldi0+YWJzbWF4W0FCU19ZXSA9IDQ4MDA7Ci0JaW5wdXRfZGV2LT5hYnNmdXp6W0FCU19YXSA9IDA7Ci0JaW5wdXRfZGV2LT5hYnNmdXp6W0FCU19ZXSA9IDA7Ci0JaW5wdXRfZGV2LT5hYnNmbGF0W0FCU19YXSA9IDA7Ci0JaW5wdXRfZGV2LT5hYnNmbGF0W0FCU19ZXSA9IDA7Ci0jZW5kaWYKLQotI2lmIDAKLQkvKiB0aGlzIHdpbGwganVzdCByZWR1Y2UgdGhlIHByZWNpc2lvbiAqLwotCWlucHV0X2Rldi0+YWJzZnV6eltBQlNfWF0gPSA4OyAvKiBleHBlcmltZW50YWw7IG1heSBuZWVkIHRvIGNoYW5nZSAqLwotCWlucHV0X2Rldi0+YWJzZnV6eltBQlNfWV0gPSA4OyAvKiBleHBlcmltZW50YWw7IG1heSBuZWVkIHRvIGNoYW5nZSAqLwotI2VuZGlmCi0KLQkvKgotCSAqIFJlZ2lzdGVyIHRoZSBpbnB1dCBkZXZpY2UuCi0JICovCi0JcmVzID0gaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKG1pbWlvLT5pZGV2KTsKLQlpZiAocmVzKSB7Ci0JCWRldl9lcnIoJnVkZXYtPmRldiwgImlucHV0X3JlZ2lzdGVyX2RldmljZSBmYWlsdXJlICglZClcbiIsCi0JCQlyZXMpOwotCQltaW1pb19kZWFsbG9jKG1pbWlvKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCWRldl9kYmcoJm1pbWlvLT5pZGV2LT5kZXYsICJpbnB1dDogJXMgb24gJXMgKHJlcyA9ICVkKS5cbiIsCi0JCWlucHV0X2Rldi0+bmFtZSwgaW5wdXRfZGV2LT5waHlzLCByZXMpOwotCi0JdXNiX3NldF9pbnRmZGF0YShpZmMsIG1pbWlvKTsKLQltaW1pby0+cHJlc2VudCA9IDE7Ci0KLQkvKgotCSAqIFN1Ym1pdCB0aGUgaW5wdXQgdXJiIHRvIHRoZSB1c2Igc3Vic3lzdGVtLgotCSAqLwotCW1pbWlvLT5pbi51cmItPmRldiA9IG1pbWlvLT51ZGV2OwotCXJlcyA9IHVzYl9zdWJtaXRfdXJiKG1pbWlvLT5pbi51cmIsIEdGUF9LRVJORUwpOwotCWlmIChyZXMpIHsKLQkJZGV2X2VycigmbWltaW8tPmlkZXYtPmRldiwgInVzYl9zdWJtaXRfdXJiIGZhaWx1cmUgKCVkKVxuIiwKLQkJCXJlcyk7Ci0JCW1pbWlvX2RlYWxsb2MobWltaW8pOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQkvKgotCSAqIEF0dGVtcHQgdG8gZ3JlZXQgdGhlIG1pbWlvIGFmdGVyIGdpdmluZwotCSAqIGl0IHNvbWUgcG9zdC1pbml0IHNldHRsaW5nIHRpbWUuCi0JICoKLQkgKiBub3RlOiBzb21ldGltZXMgdGhpcyBzbGVlcCBpbnRlcnZhbCBpc24ndAotCSAqIGxvbmcgZW5vdWdoIHRvIHBlcm1pdCB0aGUgZGV2aWNlIHRvIHJlLWluaXQKLQkgKiBhZnRlciBhIGhvdC1zd2FwOyBtYXliZSBuZWVkIHRvIGJ1bXAgaXQgdXAuCi0JICoKLQkgKiBBcyBpdCBpcywgdGhpcyBwcm9iYWJseSBicmVha3MgbW9kdWxlIHVubG9hZGluZyBzdXBwb3J0IQotCSAqLwotCW1zbGVlcCgxMDI0KTsKLQotCXJlcyA9IG1pbWlvX2dyZWV0KG1pbWlvKTsKLQlpZiAocmVzID09IDApIHsKLQkJZGV2X2RiZygmbWltaW8tPmlkZXYtPmRldiwgIk1pbWlvIGdyZWV0ZWQgT0suXG4iKTsKLQkJbWltaW8tPmdyZWV0ZWQgPSAxOwotCQltaW1pby0+cnhoYW5kbGVyID0gbWltaW9fcnhfaGFuZGxlcjsKLQl9IGVsc2UgewotCQlkZXZfZGJnKCZtaW1pby0+aWRldi0+ZGV2LCAiTWltaW8gZ3JlZXQgRmFpbHVyZSAoJWQpXG4iLCByZXMpOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGhhbmRsZV9taW1pb19yeF9wZW51cGRvd24oc3RydWN0IG1pbWlvICptaW1pbywKLQkJCQkgICAgIGludCBkb3duLAotCQkJCSAgICAgY29uc3QgY2hhciAqY29uc3QgaW5zdHJbXSwKLQkJCQkgICAgIGNvbnN0IGludCBpbnN0cl9vZnN0W10pCi17Ci0JaW50IHBlbmlkLCB4OwotCWlmIChtaW1pby0+cGt0YnVmLnEgLSBtaW1pby0+cGt0YnVmLnAgPCAoZG93biA/IDQgOiAzKSkKLQkJcmV0dXJuIDE7IAkJLyogcGFydGlhbCBwa3QgKi8KLQotCWlmIChkb3duKSB7Ci0JCXggPSAqbWltaW8tPnBrdGJ1Zi5wIF4gKihtaW1pby0+cGt0YnVmLnAgKyAxKSBeCi0JCQkqKG1pbWlvLT5wa3RidWYucCArIDIpOwotCQlpZiAoeCAhPSAqKG1pbWlvLT5wa3RidWYucCArIDMpKSB7Ci0JCQlkZXZfZGJnKCZtaW1pby0+aWRldi0+ZGV2LCAiRVZfUEVOJXM6IGJhZCB4c3VtLlxuIiwKLQkJCQlkb3duID8gIkRPV04iOiJVUCIpOwotCQkJLyogc2tpcCB0aGlzIGV2ZW50IGRhdGEgKi8KLQkJCW1pbWlvLT5wa3RidWYucCArPSA0OwotCQkJLyogZGVjb2RlIGFueSByZW1haW5pbmcgZXZlbnRzICovCi0JCQlyZXR1cm4gMDsKLQkJfQotCQlwZW5pZCA9IG1pbWlvLT5wa3RidWYuaW5zdHIgPSAqKG1pbWlvLT5wa3RidWYucCArIDIpOwotCQlpZiAocGVuaWQgPiBNSU1JT19QRU5fTUFYKSB7Ci0JCQlkZXZfZGJnKCZtaW1pby0+aWRldi0+ZGV2LAotCQkJCSJVbm1hcHBlZCBwZW5JRCAobm90IGluIFswLCAlZF0pOiAlZFxuIiwKLQkJCQlNSU1JT19QRU5fTUFYLCAoaW50KW1pbWlvLT5wa3RidWYuaW5zdHIpOwotCQkJcGVuaWQgPSBtaW1pby0+cGt0YnVmLmluc3RyID0gMDsKLQkJfQotCQltaW1pby0+bGFzdF9wZW5fZG93biA9IHBlbmlkOwotCX0gZWxzZSB7Ci0JCXBlbmlkID0gbWltaW8tPmxhc3RfcGVuX2Rvd247Ci0JfQotCWRldl9kYmcoJm1pbWlvLT5pZGV2LT5kZXYsICIlcyAoaWQgJWQsIGNvZGUgJWQpICVzLlxuIiwgaW5zdHJbcGVuaWRdLAotCQlpbnN0cl9vZnN0W3BlbmlkXSwgcGVuaWQsIGRvd24gPyAiZG93biIgOiAidXAiKTsKLQotCWlmIChpbnN0cl9vZnN0W3BlbmlkXSA+PSAwKSB7Ci0JCWludCBjb2RlID0gQlROX1RPT0xfUEVOICsgaW5zdHJfb2ZzdFtwZW5pZF07Ci0JCWludCB2YWx1ZSA9IGRvd24gPyBET1dOVkFMVUUgOiBVUFZBTFVFOwotCQlpZiAoY29kZSA+IEtFWV9NQVgpCi0JCQlkZXZfZGJnKCZtaW1pby0+aWRldi0+ZGV2LCAiaW5wdXRfZXZlbnQgd2lsbCBpZ25vcmUgIgotCQkJCSItLSBjb2RlICglZCkgPiBLRVlfTUFYXG4iLCBjb2RlKTsKLQkJaWYgKCF0ZXN0X2JpdChjb2RlLCBtaW1pby0+aWRldi0+a2V5Yml0KSkKLQkJCWRldl9kYmcoJm1pbWlvLT5pZGV2LT5kZXYsICJpbnB1dF9ldmVudCB3aWxsIGlnbm9yZSAiCi0JCQkJIi0tIGJpdCBmb3IgY29kZSAoJWQpIG5vdCBlbmFibGVkXG4iLCBjb2RlKTsKLQkJaWYgKCEhdGVzdF9iaXQoY29kZSwgbWltaW8tPmlkZXYtPmtleSkgPT0gdmFsdWUpCi0JCQlkZXZfZGJnKCZtaW1pby0+aWRldi0+ZGV2LCAiaW5wdXRfZXZlbnQgd2lsbCBpZ25vcmUgIgotCQkJCSItLSBiaXQgZm9yIGNvZGUgKCVkKSBhbHJlYWR5IHNldCB0byAlZFxuIiwKLQkJCQljb2RlLCB2YWx1ZSk7Ci0JCWlmICh2YWx1ZSAhPSBET1dOVkFMVUUpIHsKLQkJCS8qIGlucHV0X3JlZ3MobWltaW8tPmlkZXYsIHJlZ3MpOyAqLwotCQkJaW5wdXRfcmVwb3J0X2tleShtaW1pby0+aWRldiwgY29kZSwgdmFsdWUpOwotCQkJaW5wdXRfc3luYyhtaW1pby0+aWRldik7Ci0JCX0gZWxzZSB7Ci0JCQkvKiB3YWl0IHVudGlsIHdlIGdldCBzb21lIGNvb3JkaW5hdGVzICovCi0JCX0KLQl9IGVsc2UgewotCQlkZXZfZGJnKCZtaW1pby0+aWRldi0+ZGV2LCAicGVuSUQgb2Zmc2V0WyVkXSA9PSAlZCBpcyA8IDAgIgotCQkJIi0gbm90IHNlbmRpbmdcbiIsIHBlbmlkLCBpbnN0cl9vZnN0W3BlbmlkXSk7Ci0JfQotCW1pbWlvLT5wa3RidWYucCArPSBkb3duID8gNCA6IDM7IC8qIDMgZm9yIHVwLCA0IGZvciBkb3duICovCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTdGF5IHR1bmVkIGZvciBwYXJ0aWFsLXBhY2tldCBleGNpdGVtZW50LgotICoKLSAqIFRoaXMgcm91dGluZSBidWZmZXJzIGRhdGEgcGFja2V0cyByZWNlaXZlZCBmcm9tIHRoZSBtaW1pbyBkZXZpY2UKLSAqIGluIHRoZSBtaW1pbydzIGRhdGEgc3BhY2UuICBUaGlzIGJ1ZmZlcmluZyBpcyBuZWNlc3NhcnkgYmVjYXVzZQotICogdGhlIG1pbWlvJ3MgaW4gZW5kcG9pbnQgY2FuIHNlcnZlIHVzIHBhcnRpYWwgcGFja2V0cyBvZiBkYXRhLCBhbmQKLSAqIHdlIHdhbnQgdGhlIGRyaXZlciB0byBzdXBwb3J0IHRoZSBzZXJ2aWNpbmcgb2YgbXVsdGlwbGUgbWltaW9zLgotICogRW1waXJpY2FsIGV2aWRlbmNlIGdhdGhlcmVkIHNvIGZhciBzdWdnZXN0cyB0aGF0IHRoZSBtZXRob2Qgb2YKLSAqIGJ1ZmZlcmluZyBwYWNrZXQgZGF0YSBpbiB0aGUgbWltaW8ncyBkYXRhIHNwYWNlIHdvcmtzLiAgUHJldmlvdXMKLSAqIHZlcnNpb25zIG9mIHRoaXMgZHJpdmVyIGRpZCBub3QgYnVmZmVyIHBhY2tldCBkYXRhIGluIGVhY2ggbWltaW8ncwotICogZGF0YS1zcGFjZSwgYW5kIHdlcmUgdGhlcmVmb3JlIG5vdCBhYmxlIHRvIHNlcnZpY2UgbXVsdGlwbGUgbWltaW9zLgotICogTm90ZSB0aGF0IHNpbmNlIHRoZSBjYWxsZXIgb2YgdGhpcyByb3V0aW5lIGlzIHJ1bm5pbmcgaW4gaW50ZXJydXB0Ci0gKiBjb250ZXh0LCBjYXJlIG5lZWRzIHRvIGJlIHRha2VuIHRvIGVuc3VyZSB0aGF0IHRoaXMgcm91dGluZSBkb2VzIG5vdAotICogYmVjb21lIGJsb2F0ZWQsIGFuZCBpdCBtYXkgYmUgdGhhdCBhbm90aGVyIHNwaW5sb2NrIGlzIG5lZWRlZCBpbiBlYWNoCi0gKiBtaW1pbyB0byBndWFyZCB0aGUgYnVmZmVyZWQgcGFja2V0IGRhdGEgcHJvcGVybHkuCi0gKi8KLXN0YXRpYyB2b2lkIG1pbWlvX3J4X2hhbmRsZXIoc3RydWN0IG1pbWlvICptaW1pbywKLQkJCSAgICAgdW5zaWduZWQgY2hhciAqZGF0YSwKLQkJCSAgICAgdW5zaWduZWQgaW50IG5ieXRlcykKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmbWltaW8tPmlkZXYtPmRldjsKLQl1bnNpZ25lZCBpbnQgeDsKLQl1bnNpZ25lZCBpbnQgeTsKLQlzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGluc3RyW10gPSB7Ci0JCSI/MCIsCi0JCSJibGFjayBwZW4iLCAiYmx1ZSBwZW4iLCAiZ3JlZW4gcGVuIiwgInJlZCBwZW4iLAotCQkiYnJvd24gcGVuIiwgIm9yYW5nZSBwZW4iLCAicHVycGxlIHBlbiIsICJ5ZWxsb3cgcGVuIiwKLQkJImJpZyBlcmFzZXIiLCAibGlsIGVyYXNlciIsCi0JCSI/MTEiLCAiPzEyIiwgIj8xMyIsICI/MTQiLCAiPzE1IiwgIj8xNiIsCi0JCSJtaW1pbyBpbnRlcmFjdGl2ZSIsICJpbnRlcmFjdGl2ZSBidXR0b24xIiwKLQkJImludGVyYWN0aXZlIGJ1dHRvbjIiCi0JfTsKLQotCS8qIE1pbWlvIEludGVyYWN0aXZlIGdpdmVzOgotCSAqIGRvd246IFsweDIyIDB4MDEgMHgxMSAweDMyIDB4MjRdCi0JICogYjEgIDogWzB4MjIgMHgwMSAweDEyIDB4MzEgMHgyNF0KLQkgKiBiMiAgOiBbMHgyMiAweDAxIDB4MTMgMHgzMCAweDI0XQotCSAqLwotCXN0YXRpYyBjb25zdCBpbnQgaW5zdHJfb2ZzdFtdID0gewotCQktMSwKLQkJMCwgMSwgMiwgMywKLQkJOSwgOSwgOSwgOSwKLQkJNCwgNSwKLQkJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKLQkJNiwgNywgOCwKLQl9OwotCi0JbWVtY3B5KG1pbWlvLT5wa3RidWYucSwgZGF0YSwgbmJ5dGVzKTsKLQltaW1pby0+cGt0YnVmLnEgKz0gbmJ5dGVzOwotCi0Jd2hpbGUgKG1pbWlvLT5wa3RidWYucCA8IG1pbWlvLT5wa3RidWYucSkgewotCQlpbnQgdCA9ICptaW1pby0+cGt0YnVmLnA7Ci0JCXN3aXRjaCAodCkgewotCQljYXNlIE1JTUlPX0VWX1BFTlVQOgotCQljYXNlIE1JTUlPX0VWX1BFTkRPV046Ci0JCQlpZiAoaGFuZGxlX21pbWlvX3J4X3BlbnVwZG93bihtaW1pbywKLQkJCQkJCSAgICAgIHQgPT0gTUlNSU9fRVZfUEVORE9XTiwKLQkJCQkJCSAgICAgIGluc3RyLCBpbnN0cl9vZnN0KSkKLQkJCQlyZXR1cm47IC8qIHBhcnRpYWwgcGFja2V0ICovCi0JCQlicmVhazsKLQotCQljYXNlIE1JTUlPX0VWX1BFTkRBVEE6Ci0JCQlpZiAobWltaW8tPnBrdGJ1Zi5xIC0gbWltaW8tPnBrdGJ1Zi5wIDwgNikKLQkJCQkvKiBwYXJ0aWFsIHBrdCAqLwotCQkJCXJldHVybjsKLQkJCXggPSAqbWltaW8tPnBrdGJ1Zi5wIF4gKihtaW1pby0+cGt0YnVmLnAgKyAxKSBeCi0JCQkJKihtaW1pby0+cGt0YnVmLnAgKyAyKSBeCi0JCQkJKihtaW1pby0+cGt0YnVmLnAgKyAzKSBeCi0JCQkJKihtaW1pby0+cGt0YnVmLnAgKyA0KTsKLQkJCWlmICh4ICE9ICoobWltaW8tPnBrdGJ1Zi5wICsgNSkpIHsKLQkJCQlkZXZfZGJnKGRldiwgIkVWX1BFTkRBVEE6IGJhZCB4c3VtLlxuIik7Ci0JCQkJbWltaW8tPnBrdGJ1Zi5wICs9IDY7IC8qIHNraXAgdGhpcyBldmVudCBkYXRhICovCi0JCQkJYnJlYWs7IC8qIGRlY29kZSBhbnkgcmVtYWluaW5nIGV2ZW50cyAqLwotCQkJfQotCQkJeCA9ICoobWltaW8tPnBrdGJ1Zi5wICsgMSk7Ci0JCQl4IDw8PSA4OwotCQkJeCB8PSAqKG1pbWlvLT5wa3RidWYucCArIDIpOwotCQkJeSA9ICoobWltaW8tPnBrdGJ1Zi5wICsgMyk7Ci0JCQl5IDw8PSA4OwotCQkJeSB8PSAqKG1pbWlvLT5wa3RidWYucCArIDQpOwotCQkJZGV2X2RiZyhkZXYsICJjb29yZDogKCVkLCAlZClcbiIsIHgsIHkpOwotCQkJaWYgKGluc3RyX29mc3RbbWltaW8tPnBrdGJ1Zi5pbnN0cl0gPj0gMCkgewotCQkJCWludCBjb2RlID0gQlROX1RPT0xfUEVOICsKLQkJCQkJICAgaW5zdHJfb2ZzdFttaW1pby0+bGFzdF9wZW5fZG93bl07Ci0jaWYgMAotCQkJCS8qIFV0dGVyIGhhY2sgdG8gZW5zdXJlIHdlIGdldCBmb3J3YXJkZWQgX0FORF8KLQkJCQkgKiBzbyB3ZSBjYW4gaWRlbnRpZnkgd2hlbiBhIGNvbXBsZXRlIHNpZ25hbCBpcwotCQkJCSAqIHJlY2VpdmVkICovCi0JCQkJbWltaW8tPmlkZXYtPmFic1tBQlNfWV0gPSAtMTsKLQkJCQltaW1pby0+aWRldi0+YWJzW0FCU19YXSA9IC0xOwotI2VuZGlmCi0JCQkJLyogaW5wdXRfcmVncyhtaW1pby0+aWRldiwgcmVncyk7ICovCi0JCQkJaW5wdXRfcmVwb3J0X2FicyhtaW1pby0+aWRldiwgQUJTX1gsIHgpOwotCQkJCWlucHV0X3JlcG9ydF9hYnMobWltaW8tPmlkZXYsIEFCU19ZLCB5KTsKLQkJCQkvKiBmYWtlIGEgcGVudXAgKi8KLQkJCQljaGFuZ2VfYml0KGNvZGUsIG1pbWlvLT5pZGV2LT5rZXkpOwotCQkJCWlucHV0X3JlcG9ydF9rZXkobWltaW8tPmlkZXYsCi0JCQkJCQkgY29kZSwKLQkJCQkJCSBET1dOVkFMVUUpOwotCQkJCS8qIGFsd2F5cyBzeW5jIGhlcmUgKi8KLQkJCQltaW1pby0+aWRldi0+c3luYyA9IDA7Ci0JCQkJaW5wdXRfc3luYyhtaW1pby0+aWRldik7Ci0JCQl9Ci0JCQltaW1pby0+cGt0YnVmLnAgKz0gNjsKLQkJCWJyZWFrOwotCQljYXNlIE1JTUlPX0VWX01FTVJFU0VUOgotCQkJaWYgKG1pbWlvLT5wa3RidWYucSAtIG1pbWlvLT5wa3RidWYucCA8IDcpCi0JCQkJLyogcGFydGlhbCBwa3QgKi8KLQkJCQlyZXR1cm47Ci0JCQlkZXZfZGJnKGRldiwgIm1lbS1yZXNldC5cbiIpOwotCQkJLyogaW5wdXRfcmVncyhtaW1pby0+aWRldiwgcmVncyk7ICovCi0JCQlpbnB1dF9ldmVudChtaW1pby0+aWRldiwgRVZfS0VZLCBCVE5fMCwgMSk7Ci0JCQlpbnB1dF9ldmVudChtaW1pby0+aWRldiwgRVZfS0VZLCBCVE5fMCwgMCk7Ci0JCQlpbnB1dF9zeW5jKG1pbWlvLT5pZGV2KTsKLQkJCW1pbWlvLT5wa3RidWYucCArPSA3OwotCQkJYnJlYWs7Ci0JCWNhc2UgTUlNSU9fRVZfQUNDOgotCQkJaWYgKG1pbWlvLT5wa3RidWYucSAtIG1pbWlvLT5wa3RidWYucCA8IDQpCi0JCQkJLyogcGFydGlhbCBwa3QgKi8KLQkJCQlyZXR1cm47Ci0JCQl4ID0gKm1pbWlvLT5wa3RidWYucCBeICoobWltaW8tPnBrdGJ1Zi5wICsgMSkgXgotCQkJCSoobWltaW8tPnBrdGJ1Zi5wICsgMik7Ci0JCQlpZiAoeCAhPSAqKG1pbWlvLT5wa3RidWYucCArIDMpKSB7Ci0JCQkJZGV2X2RiZyhkZXYsICJFVl9BQ0M6IGJhZCB4c3VtLlxuIik7Ci0JCQkJbWltaW8tPnBrdGJ1Zi5wICs9IDQ7IC8qIHNraXAgdGhpcyBldmVudCBkYXRhICovCi0JCQkJYnJlYWs7IC8qIGRlY29kZSBhbnkgcmVtYWluaW5nIGV2ZW50cyAqLwotCQkJfQotCQkJc3dpdGNoICgqKG1pbWlvLT5wa3RidWYucCArIDIpKSB7Ci0JCQljYXNlIEFDQ19ORVdQQUdFOgotCQkJCWRldl9kYmcoJm1pbWlvLT5pZGV2LT5kZXYsICJuZXctcGFnZS5cbiIpOwotCQkJCS8qIGlucHV0X3JlZ3MobWltaW8tPmlkZXYsIHJlZ3MpOyAqLwotCQkJCWlucHV0X2V2ZW50KG1pbWlvLT5pZGV2LCBFVl9LRVksIEJUTl8xLCAxKTsKLQkJCQlpbnB1dF9ldmVudChtaW1pby0+aWRldiwgRVZfS0VZLCBCVE5fMSwgMCk7Ci0JCQkJaW5wdXRfc3luYyhtaW1pby0+aWRldik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFDQ19UQUdQQUdFOgotCQkJCWRldl9kYmcoJm1pbWlvLT5pZGV2LT5kZXYsICJ0YWctcGFnZS5cbiIpOwotCQkJCS8qIGlucHV0X3JlZ3MobWltaW8tPmlkZXYsIHJlZ3MpOyAqLwotCQkJCWlucHV0X2V2ZW50KG1pbWlvLT5pZGV2LCBFVl9LRVksIEJUTl8yLCAxKTsKLQkJCQlpbnB1dF9ldmVudChtaW1pby0+aWRldiwgRVZfS0VZLCBCVE5fMiwgMCk7Ci0JCQkJaW5wdXRfc3luYyhtaW1pby0+aWRldik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFDQ19QUklOVFBBR0U6Ci0JCQkJZGV2X2RiZygmbWltaW8tPmlkZXYtPmRldiwgInByaW50LXBhZ2UuXG4iKTsKLQkJCQkvKiBpbnB1dF9yZWdzKG1pbWlvLT5pZGV2LCByZWdzKTsqLwotCQkJCWlucHV0X2V2ZW50KG1pbWlvLT5pZGV2LCBFVl9LRVksIEJUTl8zLCAxKTsKLQkJCQlpbnB1dF9ldmVudChtaW1pby0+aWRldiwgRVZfS0VZLCBCVE5fMywgMCk7Ci0JCQkJaW5wdXRfc3luYyhtaW1pby0+aWRldik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEFDQ19NQVhJTUlaRToKLQkJCQlkZXZfZGJnKCZtaW1pby0+aWRldi0+ZGV2LAotCQkJCQkibWF4aW1pemUtd2luZG93LlxuIik7Ci0JCQkJLyogaW5wdXRfcmVncyhtaW1pby0+aWRldiwgcmVncyk7ICovCi0JCQkJaW5wdXRfZXZlbnQobWltaW8tPmlkZXYsIEVWX0tFWSwgQlROXzQsIDEpOwotCQkJCWlucHV0X2V2ZW50KG1pbWlvLT5pZGV2LCBFVl9LRVksIEJUTl80LCAwKTsKLQkJCQlpbnB1dF9zeW5jKG1pbWlvLT5pZGV2KTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUNDX0ZJTkRDVExQTkw6Ci0JCQkJZGV2X2RiZygmbWltaW8tPmlkZXYtPmRldiwgImZpbmQtY3RsLXBhbmVsLlxuIik7Ci0JCQkJLyogaW5wdXRfcmVncyhtaW1pby0+aWRldiwgcmVncyk7ICovCi0JCQkJaW5wdXRfZXZlbnQobWltaW8tPmlkZXYsIEVWX0tFWSwgQlROXzUsIDEpOwotCQkJCWlucHV0X2V2ZW50KG1pbWlvLT5pZGV2LCBFVl9LRVksIEJUTl81LCAwKTsKLQkJCQlpbnB1dF9zeW5jKG1pbWlvLT5pZGV2KTsKLQkJCQlicmVhazsKLQkJCWNhc2UgQUNDX0RPTkU6Ci0JCQkJZGV2X2RiZygmbWltaW8tPmlkZXYtPmRldiwgImFjYy1kb25lLlxuIik7Ci0JCQkJLyogbm8gZXZlbnQgaXMgZGlzcGF0Y2hlZCB0byB0aGUgaW5wdXQKLQkJCQkgKiBzdWJzeXN0ZW0gZm9yIHRoaXMgZGV2aWNlIGV2ZW50LgotCQkJCSAqLwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlkZXZfZGJnKGRldiwgInVua25vd24gYWNjIGV2ZW50LlxuIik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQltaW1pby0+cGt0YnVmLnAgKz0gNDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJbWltaW8tPnBrdGJ1Zi5wKys7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qCi0JICogTm8gcGFydGlhbCBldmVudCB3YXMgcmVjZWl2ZWQsIHNvIHJlc2V0IG1pbWlvJ3MgcGt0YnVmIHB0cnMuCi0JICovCi0JbWltaW8tPnBrdGJ1Zi5wID0gbWltaW8tPnBrdGJ1Zi5xID0gbWltaW8tPnBrdGJ1Zi5idWY7Ci19Ci0KLXN0YXRpYyBpbnQgbWltaW9fdHgoc3RydWN0IG1pbWlvICptaW1pbywgY29uc3QgY2hhciAqYnVmLCBpbnQgbmJ5dGVzKQotewotCWludCByc2x0OwotCWludCB0aW1lb3V0OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7Ci0KLQlpZiAoIShpc3ZhbGlkdHhzaXplKG5ieXRlcykpKSB7Ci0JCWRldl9lcnIoJm1pbWlvLT5pZGV2LT5kZXYsICJpbnZhbGlkIGFyZzogbmJ5dGVzOiAlZC5cbiIsCi0JCQluYnl0ZXMpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKgotCSAqIEluaXQgdGhlIG91dCB1cmIgYW5kIGNvcHkgdGhlIGRhdGEgdG8gc2VuZC4KLQkgKi8KLQltaW1pby0+b3V0LnVyYi0+ZGV2ID0gbWltaW8tPnVkZXY7Ci0JbWltaW8tPm91dC51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBuYnl0ZXM7Ci0JbWVtY3B5KG1pbWlvLT5vdXQudXJiLT50cmFuc2Zlcl9idWZmZXIsIGJ1ZiwgbmJ5dGVzKTsKLQotCS8qCi0JICogU2VuZCB0aGUgZGF0YS4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbWltaW8tPnR4bG9jaywgZmxhZ3MpOwotCW1pbWlvLT50eGZsYWdzID0gTUlNSU9fVFhXQUlUOwotCXJzbHQgPSB1c2Jfc3VibWl0X3VyYihtaW1pby0+b3V0LnVyYiwgR0ZQX0FUT01JQyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWltaW8tPnR4bG9jaywgZmxhZ3MpOwotCWRldl9kYmcoJm1pbWlvLT5pZGV2LT5kZXYsICJyc2x0OiAlZC5cbiIsIHJzbHQpOwotCi0JaWYgKHJzbHQpIHsKLQkJZGV2X2VycigmbWltaW8tPmlkZXYtPmRldiwgInVzYl9zdWJtaXRfdXJiIGZhaWx1cmU6ICVkLlxuIiwKLQkJCXJzbHQpOwotCQlyZXR1cm4gcnNsdDsKLQl9Ci0KLQkvKgotCSAqIFdhaXQgZm9yIGNvbXBsZXRpb24gdG8gYmUgc2lnbmFsbGVkICh0aGUgbWltaW9faXJxX291dAotCSAqIGNvbXBsZXRpb24gcm91dGluZSB3aWxsIG9yIE1JTUlPX1RYRE9ORSBpbiB3aXRoIHR4ZmxhZ3MpLgotCSAqLwotCXRpbWVvdXQgPSBIWjsKLQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwotCWFkZF93YWl0X3F1ZXVlKCZtaW1pby0+d2FpdHEsICZ3YWl0KTsKLQotCXdoaWxlICh0aW1lb3V0ICYmICgobWltaW8tPnR4ZmxhZ3MgJiBNSU1JT19UWERPTkUpID09IDApKSB7Ci0JCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOwotCQlybWIoKTsKLQl9Ci0KLQlpZiAoKG1pbWlvLT50eGZsYWdzICYgTUlNSU9fVFhET05FKSA9PSAwKQotCQlkZXZfZGJnKCZtaW1pby0+aWRldi0+ZGV2LCAidHggdGltZWQgb3V0LlxuIik7Ci0KLQkvKgotCSAqIE5vdyB0aGF0IGNvbXBsZXRpb24gaGFzIGJlZW4gc2lnbmFsbGVkLAotCSAqIHVubGluayB0aGUgdXJiIHNvIHRoYXQgaXQgY2FuIGJlIHJlY3ljbGVkLgotCSAqLwotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJm1pbWlvLT53YWl0cSwgJndhaXQpOwotCXVzYl91bmxpbmtfdXJiKG1pbWlvLT5vdXQudXJiKTsKLQotCXJldHVybiByc2x0OwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBtaW1pb19pbml0KHZvaWQpCi17Ci0JaW50IHJzbHQ7Ci0KLQlyc2x0ID0gdXNiX3JlZ2lzdGVyKCZtaW1pb19kcml2ZXIpOwotCWlmIChyc2x0ICE9IDApIHsKLQkJZXJyKCIlczogdXNiX3JlZ2lzdGVyIGZhaWx1cmU6ICVkIiwgX19mdW5jX18sIHJzbHQpOwotCQlyZXR1cm4gcnNsdDsKLQl9Ci0KLQlwcmludGsoS0VSTl9JTkZPIEtCVUlMRF9NT0ROQU1FICI6IgotCSAgICAgICBEUklWRVJfREVTQyAiICIgRFJJVkVSX1ZFUlNJT04gIlxuIik7Ci0JcmV0dXJuIHJzbHQ7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBtaW1pb19leGl0KHZvaWQpCi17Ci0JdXNiX2RlcmVnaXN0ZXIoJm1pbWlvX2RyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KG1pbWlvX2luaXQpOwotbW9kdWxlX2V4aXQobWltaW9fZXhpdCk7Ci0KLU1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL25ldHdhdmUvbmV0d2F2ZV9jcy5jIGIvZHJpdmVycy9zdGFnaW5nL25ldHdhdmUvbmV0d2F2ZV9jcy5jCmluZGV4IGU2MWU2YjkuLmU5MzY3MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9uZXR3YXZlL25ldHdhdmVfY3MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvbmV0d2F2ZS9uZXR3YXZlX2NzLmMKQEAgLTEzNDEsMTUgKzEzNDEsMTUgQEAKICNpZmRlZiBQQ01DSUFfREVCVUcKICAgICB7CiAJeHN0YXRpYyBpbnQgb2xkOwotCWlmIChvbGQgIT0gZGV2LT5tY19jb3VudCkgewotCSAgICBvbGQgPSBkZXYtPm1jX2NvdW50OworCWlmIChvbGQgIT0gbmV0ZGV2X21jX2NvdW50KGRldikpIHsKKwkgICAgb2xkID0gbmV0ZGV2X21jX2NvdW50KGRldik7CiAJICAgIHByX2RlYnVnKCIlczogc2V0dGluZyBSeCBtb2RlIHRvICVkIGFkZHJlc3Nlcy5cbiIsCi0JCSAgZGV2LT5uYW1lLCBkZXYtPm1jX2NvdW50KTsKKwkJICBkZXYtPm5hbWUsIG5ldGRldl9tY19jb3VudChkZXYpKTsKIAl9CiAgICAgfQogI2VuZGlmCiAJCi0gICAgaWYgKGRldi0+bWNfY291bnQgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CisgICAgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSB8fCAoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkpIHsKIAkvKiBNdWx0aWNhc3QgTW9kZSAqLwogCXJjdk1vZGUgPSByeENvbmZSeEVuYSArIHJ4Q29uZkFNUCArIHJ4Q29uZkJjYXN0OwogICAgIH0gZWxzZSBpZiAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LmMgYi9kcml2ZXJzL3N0YWdpbmcvb2N0ZW9uL2V0aGVybmV0LmMKaW5kZXggMDJiNjM2Ny4uNGEyMTYxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL29jdGVvbi9ldGhlcm5ldC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vY3Rlb24vZXRoZXJuZXQuYwpAQCAtMzUwLDcgKzM1MCw3IEBACiAJCWNvbnRyb2wudTY0ID0gMDsKIAkJY29udHJvbC5zLmJjc3QgPSAxOwkvKiBBbGxvdyBicm9hZGNhc3QgTUFDIGFkZHJlc3NlcyAqLwogCi0JCWlmIChkZXYtPm1jX2xpc3QgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8CisJCWlmICghbmV0ZGV2X21jX2VtcHR5KGRldikgfHwgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8CiAJCSAgICAoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSkKIAkJCS8qIEZvcmNlIGFjY2VwdCBtdWx0aWNhc3QgcGFja2V0cyAqLwogCQkJY29udHJvbC5zLm1jc3QgPSAyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NhZ2cuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jYWdnLmMKaW5kZXggZGJkMGE1Zi4uZjk1MTRjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NhZ2cuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY2FnZy5jCkBAIC0xODMyLDE0ICsxODMyLDEyIEBACiAKIHN0cnVjdCBhZ2dfdGlkX3J4KiB6ZkFnZ1J4RW5hYmxlZCh6ZGV2X3QqIGRldiwgemJ1Zl90KiBidWYpCiB7Ci0gICAgdTE2X3QgICBkc3QwLCBzcmNbM10sIGFjLCBhaWQsIGZyYWdPZmY7Ci0gICAgdThfdCAgICB1cDsKKyAgICB1MTZfdCAgIGRzdDAsIHNyY1szXSwgYWlkOwogICAgIHUxNl90ICAgb2Zmc2V0ID0gMDsKICAgICB1MTZfdCAgIHNlcV9ubzsKICAgICB1MTZfdCBmcmFtZVR5cGU7CiAgICAgdTE2X3QgZnJhbWVDdHJsOwogICAgIHUxNl90IGZyYW1lU3VidHlwZTsKLSAgICB1MzJfdCB0Y3Bfc2VxOwogICAgIC8vc3RydWN0IGFnZ1N0YSAqYWdnX3N0YTsKICNpZiBaTV9BR0dfRlBHQV9SRU9SREVSSU5HCiAgICAgc3RydWN0IGFnZ190aWRfcnggKnRpZF9yeDsKQEAgLTE4NjQsMTMgKzE4NjIsMTcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogI2lmZGVmIFpNX0VOQUJMRV9QRVJGT1JNQU5DRV9FVkFMVUFUSU9OCi0gICAgdGNwX3NlcSA9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDIyKzM2KSA8PCAyNDsKLSAgICB0Y3Bfc2VxICs9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDIyKzM3KSA8PCAxNjsKLSAgICB0Y3Bfc2VxICs9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDIyKzM4KSA8PCA4OwotICAgIHRjcF9zZXEgKz0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMjIrMzkpOworICAgIHsKKyAgICAgICAgdTMyX3QgdGNwX3NlcTsKKworICAgICAgICB0Y3Bfc2VxID0gem13X3J4X2J1Zl9yZWFkYihkZXYsIGJ1ZiwgMjIrMzYpIDw8IDI0OworICAgICAgICB0Y3Bfc2VxICs9IHptd19yeF9idWZfcmVhZGIoZGV2LCBidWYsIDIyKzM3KSA8PCAxNjsKKyAgICAgICAgdGNwX3NlcSArPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAyMiszOCkgPDwgODsKKyAgICAgICAgdGNwX3NlcSArPSB6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAyMiszOSk7CisgICAgICAgIFpNX1NFUV9ERUJVRygiSW4gICAgICAgICAgICAgICAgICAgJTVkLCAlMTJ1XG4iLCBzZXFfbm8sIHRjcF9zZXEpOworICAgIH0KICNlbmRpZgogCi0gICAgWk1fU0VRX0RFQlVHKCJJbiAgICAgICAgICAgICAgICAgICAlNWQsICUxMnVcbiIsIHNlcV9ubywgdGNwX3NlcSk7CiAgICAgZHN0MCA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIG9mZnNldCs0KTsKIAogICAgIHNyY1swXSA9IHptd19yeF9idWZfcmVhZGgoZGV2LCBidWYsIG9mZnNldCsxMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY2NtZC5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NjbWQuYwppbmRleCA4ZGEyOGVlLi4zZTNkOWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY2NtZC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jY21kLmMKQEAgLTE2NTksNyArMTY1OSw3IEBACiAJaWYgKHNldFZhbHVlKSB7CiAJCS8qIHdyaXRlIHJlZ2lzdGVyIGZvciBzbmlmZmVyIG1vZGUgKi8KIAkJemZIcFNldFNuaWZmZXJNb2RlKGRldiwgMSk7Ci0JCXptX21zZzBfbW0oWk1fTFZfMSwgImVuYWxiZSBzbmlmZmVyIG1vZGUiKTsKKwkJem1fbXNnMF9tbShaTV9MVl8xLCAiZW5hYmxlIHNuaWZmZXIgbW9kZSIpOwogCX0gZWxzZSB7CiAJCXpmSHBTZXRTbmlmZmVyTW9kZShkZXYsIDApOwogCQl6bV9tc2cwX21tKFpNX0xWXzAsICJkaXNhbGJlIHNuaWZmZXIgbW9kZSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NmdW5jLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY2Z1bmMuYwppbmRleCBkN2M0OWQ3Li5lMGE5ZjM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY2Z1bmMuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY2Z1bmMuYwpAQCAtMTE5NCw4ICsxMTk0LDYgQEAKICAgICB1OF90ICAgaTsKICAgICB1MTZfdCAgdGVtcE1pbkluZGV4LCB0ZW1wTWluVmFsdWU7CiAKLSAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0KICAgICBpID0gMTsKICAgICB0ZW1wTWluSW5kZXggPSAwOwogICAgIHRlbXBNaW5WYWx1ZSA9IGFycmF5W3RlbXBNaW5JbmRleF07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY21tLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY21tLmMKaW5kZXggYTZjMWI0MS4uNDg0ZTc1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NtbS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jbW0uYwpAQCAtMzQ2LDggKzM0Niw2IEBACiAgICAgdThfdCBzdXBlcl9mZWF0dXJlOwogICAgIHU4X3Qgb3VpU3VwZXJHWzZdID0gezB4MDAsMHgwMywweDdmLDB4MDEsIDB4MDEsIDB4MDB9OwogCi0gICAgem13X2dldF93bGFuX2RldihkZXYpOwotCiAgICAgLyogR2V0IG9mZnNldCBvZiBmaXJzdCBlbGVtZW50ICovCiAgICAgc3ViVHlwZSA9ICh6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAwKSA+PiA0KTsKICAgICBpZiAoKG9mZnNldCA9IHpnRWxlbWVudE9mZnNldFRhYmxlW3N1YlR5cGVdKSA9PSAweGZmKQpAQCAtNDExLDggKzQwOSw2IEBACiAgICAgdThfdCBpZDsKICAgICB1OF90IG91aXhyWzZdID0gezB4MDAsMHgwMywweDdmLDB4MDMsIDB4MDEsIDB4MDB9OwogCi0gICAgem13X2dldF93bGFuX2RldihkZXYpOwotCiAgICAgLyogR2V0IG9mZnNldCBvZiBmaXJzdCBlbGVtZW50ICovCiAgICAgc3ViVHlwZSA9ICh6bXdfcnhfYnVmX3JlYWRiKGRldiwgYnVmLCAwKSA+PiA0KTsKICAgICBpZiAoKG9mZnNldCA9IHpnRWxlbWVudE9mZnNldFRhYmxlW3N1YlR5cGVdKSA9PSAweGZmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NtbXN0YS5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NtbXN0YS5jCmluZGV4IGExMWQ1NTkuLmMzZmQ0NzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jbW1zdGEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY21tc3RhLmMKQEAgLTI4MDgsNyArMjgwOCw3IEBACiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwogCiAgICAgLyogY2hlY2sgbW9kZSA6IEFQL0lCU1MgKi8KLSAgICBpZiAoKHdkLT53bGFuTW9kZSAhPSBaTV9NT0RFX0FQKSB8fCAod2QtPndsYW5Nb2RlICE9IFpNX01PREVfSUJTUykpCisgICAgaWYgKCh3ZC0+d2xhbk1vZGUgIT0gWk1fTU9ERV9BUCkgJiYgKHdkLT53bGFuTW9kZSAhPSBaTV9NT0RFX0lCU1MpKQogICAgIHsKICAgICAgICAgem1fbXNnMF9tbShaTV9MVl8zLCAiSWdub3JlIHByb2JlIHJlcSIpOwogICAgICAgICByZXR1cm47CkBAIC00ODQ4LDggKzQ4NDgsNiBAQAogICAgIHU4X3QgTWF4VHhQb3dlcjsKICAgICB1OF90IE1pblR4UG93ZXI7CiAKLSAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7Ci0KICAgICAvKiBFbGVtZW50IElEICovCiAgICAgem13X3R4X2J1Zl93cml0ZWIoZGV2LCBidWYsIG9mZnNldCsrLCBaTV9XTEFOX0VJRF9QT1dFUl9DQVBBQklMSVRZKTsKIApAQCAtNTI3Niw3ICs1Mjc0LDYgQEAKICAgICB1OF90ICAgZGEwOwogICAgIC8vdTE2X3QgIHNhWzNdOwogICAgIHUxNl90ICByZXQ7Ci0gICAgdTE2X3QgIGk7CiAgICAgLy91OF90ICAgIHNhMDsKIAogICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKQEAgLTU3MzgsOCArNTczNSw2IEBACiAJdThfdCAgd2VpZ2h0T2ZONDBCZWxvd1RociA9IDE2OwogCXU4X3QgIHdlaWdodE9mTjQwVXBUaHIgICAgPSAzMjsKIAotICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLQogICAgIGlmKCBpc0JNb2RlID09IDAgKQogICAgICAgICByZXR1cm4gKHNpZ25hbFN0cmVuZ3RoICsgd2VpZ2h0T2ZCKTsgICAgLy8gcHVyZSBiIG1vZGUgLCBkbyBub3QgYWRkIHRoZSB3ZWlnaHQgdmFsdWUgZm9yIHRoaXMgQVAgIQogICAgIGVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jcHNtZ3IuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jcHNtZ3IuYwppbmRleCBjZjczY2FjLi45OGUxZjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3BzbWdyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2Nwc21nci5jCkBAIC0zODEsOCArMzgxLDYgQEAKIAogc3RhdGljIHZvaWQgemZQb3dlclNhdmluZ01nckRpc2Nvbm5lY3RNYWluKHpkZXZfdCogZGV2KQogewotICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKLQogI2lmZGVmIFpNX0VOQUJMRV9ESVNDT05ORUNUX1BTCiAgICAgc3dpdGNoKHdkLT5zdGEucHNNZ3Iuc3RhdGUpCiAgICAgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2NzY2FubWdyLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3NjYW5tZ3IuYwppbmRleCBiMzI4MzVjLi5iZTdkOGViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3NjYW5tZ3IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3NjYW5tZ3IuYwpAQCAtMjg5LDggKzI4OSw2IEBACiAKIHN0YXRpYyB2b2lkIHpmU2Nhbk1nckV2ZW50U2NhbkNvbXBsZXRlQ2IoemRldl90KiBkZXYpCiB7Ci0gICAgem13X2dldF93bGFuX2RldihkZXYpOwotCiAgICAgaWYgKCh6ZlN0YUlzQ29ubmVjdGVkKGRldikpICYmICghemZQb3dlclNhdmluZ01ncklzU2xlZXBpbmcoZGV2KSkpCiAgICAgewogICAgICAgICB6ZlNlbmROdWxsRGF0YShkZXYsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2N0a2lwLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3RraXAuYwppbmRleCBiZTQyZjdhLi5jYTA3NDAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3RraXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3RraXAuYwpAQCAtMjU1LDcgKzI1NSw4IEBACiAgICAgemZNZW1vcnlDb3B5KHBTZWVkLT50YSwgdGEsIDYpOwogICAgIHpmTWVtb3J5Q29weShwU2VlZC0+dGssIGtleSwgMTYpOwogCi0gICAgaXYxNiA9ICppbml0SXYrKzsKKyAgICBpdjE2ID0gKmluaXRJdjsKKyAgICBpbml0SXYrKzsKICAgICBpdjE2ICs9ICppbml0SXY8PDg7CiAgICAgaW5pdEl2Kys7CiAKQEAgLTI2NCw3ICsyNjUsNyBAQAogICAgIGZvcihpPTA7IGk8NDsgaSsrKSAgICAgIC8vIGluaXRpdiBpcyBsaXR0bGUgZW5kaWFuCiAgICAgewogICAgICAgICBpdjMyICs9ICppbml0SXY8PChpKjgpOwotICAgICAgICAqaW5pdEl2Kys7CisgICAgICAgIGluaXRJdisrOwogICAgIH0KIAogICAgIHBTZWVkLT5pdjMyID0gaXYzMisxOyAvLyBGb3JjZSBSZWNhbGN1bGF0aW5nIG9uIFRraXAgUGhhc2UxCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvY3R4cnguYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jdHhyeC5jCmluZGV4IGFjNTRkNWEuLjRlN2Y0YmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jdHhyeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9jdHhyeC5jCkBAIC01MzYsOCArNTM2LDcgQEAKICAgICAgICAgem1fbXNnMl9yeChaTV9MVl8yLCAiaXAxPSIsIGRpcFsxXSk7CiAKICAgICAgICAgLy9BUlAgcmVxdWVzdCB0byAxOTIuMTY4LjEuMTUKLSAgICAgICAgaWYgKChhcnBPcCA9PSAweDAxMDApICYmIChkaXBbMF0gPT0gMHhhOGMwKSAmJiAoZGlwWzFdID09IDB4MGYwMSkpOwotICAgICAgICB7CisgICAgICAgIGlmICgoYXJwT3AgPT0gMHgwMTAwKSAmJiAoZGlwWzBdID09IDB4YThjMCkgJiYgKGRpcFsxXSA9PSAweDBmMDEpKSB7CiAgICAgICAgICAgICB6bV9tc2cwX3J4KFpNX0xWXzIsICJBUlAiKTsKICAgICAgICAgICAgIC8qIEFSUCByZXNwb25zZSAqLwogICAgICAgICAgICAgem13X3J4X2J1Zl93cml0ZWgoZGV2LCBidWYsIDIwLCAweDAyMDApOwpAQCAtODgzLDcgKzg4Miw2IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogdTE2X3QgemZUeFNlbmRFdGgoemRldl90KiBkZXYsIHpidWZfdCogYnVmLCB1MTZfdCBwb3J0LCB1MTZfdCBidWZUeXBlLCB1MTZfdCBmbGFnKQogewotICAgIHUxNl90IGVycjsKICAgICAvL3UxNl90IGFkZHJUYmxTaXplOwogICAgIC8vc3RydWN0IHpzQWRkclRibCBhZGRyVGJsOwogICAgIHUxNl90IHJlbW92ZUxlbjsKQEAgLTkwNSw3ICs5MDMsNiBAQAogICAgIHU4X3QgcW9zVHlwZSwga2V5SWR4ID0gMDsKICAgICB1MTZfdCBmcmFnT2ZmOwogICAgIHUxNl90IG5ld0ZsYWc7Ci0gICAgc3RydWN0IHpzTWljVmFyKiAgcE1pY0tleTsKICAgICB1OF90IHRraXBGcmFtZU9mZnNldCA9IDA7CiAKICAgICB6bXdfZ2V0X3dsYW5fZGV2KGRldik7CkBAIC0xNjkzLDggKzE2OTAsNiBAQAogICAgIHUxNl90ICBwYWNrZXRMZW4sIGtleUluZm8sIGtleUxlbiwga2V5RGF0YUxlbiwgbGVuZ3RoLCBPcF9Db2RlOwogICAgIHUzMl90ICByZXBsYXlDb3VudGVySCwgcmVwbGF5Q291bnRlckwsIHZlbmRvcklkLCBWZW5kb3JUeXBlOwogCi0gICAgem13X2dldF93bGFuX2RldihkZXYpOwotCiAgICAgem1fZGVidWdfbXNnMSgiRUFQT0wgUGFja2V0IHNpemUgPSAiLCB6ZndCdWZHZXRTaXplKGRldiwgYnVmKSk7CiAKICAgICAvKiBFQVBPTCBwYWNrZXQgdHlwZSAqLwpAQCAtMjQzNyw3ICsyNDMyLDYgQEAKICAgICAgICAgICAgICAgICAgICAgdTE2X3QgSXZPZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgIHU4X3Qga2V5TGVuID0gNTsKICAgICAgICAgICAgICAgICAgICAgdThfdCBpdlszXTsKLSAgICAgICAgICAgICAgICAgICAgdThfdCAqd2VwS2V5OwogICAgICAgICAgICAgICAgICAgICB1OF90IGtleUlkeDsKIAogICAgICAgICAgICAgICAgICAgICBJdk9mZnNldCA9IG9mZnNldCArIFpNX1NJWkVfT0ZfV0xBTl9EQVRBX0hFQURFUjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9sZWRtZ3IuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9sZWRtZ3IuYwppbmRleCAxZTEwNGE5Li5lYWZjZTBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvbGVkbWdyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL2xlZG1nci5jCkBAIC0xODcsNyArMTg3LDYgQEAKIAogdm9pZCB6ZkxlZEN0cmxUeXBlMih6ZGV2X3QqIGRldikKIHsKLSAgICB1MzJfdCB0b24sIHRvZmYsIHRtcCwgcGVyaW9kOwogICAgIHUxNl90IE9wZXJhdGVMRUQ7CiAgICAgem13X2dldF93bGFuX2RldihkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvcHViX3pmaS5oIGIvZHJpdmVycy9zdGFnaW5nL290dXMvODAyMTFjb3JlL3B1Yl96ZmkuaAppbmRleCBiN2I3ZjQ1Li41MjAyZTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy84MDIxMWNvcmUvcHViX3pmaS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzLzgwMjExY29yZS9wdWJfemZpLmgKQEAgLTgxNCw3ICs4MTQsNiBAQAogI2RlZmluZSBaTV9QRVJGT1JNQU5DRV9SWF9BTVNEVShkZXYsIGJ1ZiwgbGVuKQogI2RlZmluZSBaTV9QRVJGT1JNQU5DRV9SWF9GTFVTSChkZXYpCiAjZGVmaW5lIFpNX1BFUkZPUk1BTkNFX1JYX0NMRUFSKGRldikKLSNkZWZpbmUgWk1fU0VRX0RFQlVHCiAjZGVmaW5lIFpNX1BFUkZPUk1BTkNFX1JYX1JFT1JERVIoZGV2KQogI2VuZGlmCiAvKioqKiogRW5kIG9mIHNlY3Rpb24gMyAqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9LY29uZmlnCmluZGV4IGY2Y2MyNjIuLmU5MTgxMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvS2NvbmZpZwpAQCAtMSw2ICsxLDggQEAKIGNvbmZpZyBPVFVTCiAJdHJpc3RhdGUgIkF0aGVyb3MgT1RVUyA4MDIuMTFuIFVTQiB3aXJlbGVzcyBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCICYmIFdMQU4gJiYgTUFDODAyMTEKKwlzZWxlY3QgV0lSRUxFU1NfRVhUCisJc2VsZWN0IFdFWFRfUFJJVgogCWRlZmF1bHQgTgogCS0tLWhlbHAtLS0KIAkgIEVuYWJsZSBzdXBwb3J0IGZvciBBdGhlcm9zIDgwMi4xMW4gVVNCIGhhcmR3YXJlOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvYXBkYmcuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2FwZGJnLmMKaW5kZXggMGViOTNmMS4uYjU5MDI4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvYXBkYmcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9hcGRiZy5jCkBAIC05MCw4ICs5MCwyNyBAQAogCiAjZW5kaWYKIAotY2hhciBoZXgoY2hhcik7Ci11bnNpZ25lZCBjaGFyIGFzY3RvaGV4KGNoYXIgKnN0cik7CitzdGF0aWMgY2hhciBoZXgoY2hhciB2KQoreworCWlmIChpc2RpZ2l0KHYpKQorCQlyZXR1cm4gdiAtICcwJzsKKwllbHNlIGlmIChpc3hkaWdpdCh2KSkKKwkJcmV0dXJuIHRvbG93ZXIodikgLSAnYScgKyAxMDsKKwllbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgY2hhciBhc2N0b2hleChjaGFyICpzdHIpCit7CisJdW5zaWduZWQgY2hhciB2YWx1ZTsKKworCXZhbHVlID0gaGV4KCpzdHIpICYgMHgwZjsKKwl2YWx1ZSA9IHZhbHVlIDw8IDQ7CisJc3RyKys7CisJdmFsdWUgfD0gaGV4KCpzdHIpICYgMHgwZjsKKworCXJldHVybiB2YWx1ZTsKK30KIAogY2hhciAqcHJnbmFtZTsKIApAQCAtMTA5LDEwICsxMjgsMTAgQEAKIAogaW50IHJlYWRfcmVnKGludCBzb2NrLCBzdHJ1Y3QgaWZyZXEgKnJlcSkKIHsKLQlzdHJ1Y3QgemRhcF9pb2N0bCAqemRyZXEgPSAwOworCXN0cnVjdCB6ZGFwX2lvY3RsICp6ZHJlcSA9IE5VTEw7CiAKIAlpZiAoIXNldF9pb2N0bChzb2NrLCByZXEpKQotCQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLTE7CiAKIAkvKgogCSAqIHpkcmVxID0gKHN0cnVjdCB6ZGFwX2lvY3RsICopcmVxLT5pZnJfZGF0YTsKQEAgLTEyNSw3ICsxNDQsNyBAQAogCiBpbnQgcmVhZF9tZW0oaW50IHNvY2ssIHN0cnVjdCBpZnJlcSAqcmVxKQogewotCXN0cnVjdCB6ZGFwX2lvY3RsICp6ZHJlcSA9IDA7CisJc3RydWN0IHpkYXBfaW9jdGwgKnpkcmVxID0gTlVMTDsKIAlpbnQgaTsKIAogCWlmICghc2V0X2lvY3RsKHNvY2ssIHJlcSkpCkBAIC0zNjgsNyArMzg3LDcgQEAKIAogCQl6ZHJlcS5hZGRyID0gYWRkcjsKIAkJemRyZXEuY21kID0gWk1fSU9DVExfU0VUX1BJQlNTX01PREU7Ci0JfSBlbHNlIAl7CisJfSBlbHNlIHsKIAkJZnByaW50ZihzdGRlcnIsICJlcnJvciBhY3Rpb25cbiIpOwogCQlleGl0KDEpOwogCX0KQEAgLTM4MCwyNSArMzk5LDMgQEAKIAlleGl0KDApOwogfQogCi11bnNpZ25lZCBjaGFyIGFzY3RvaGV4KGNoYXIgKnN0cikKLXsKLQl1bnNpZ25lZCBjaGFyIHZhbHVlOwotCi0JdmFsdWUgPSBoZXgoKnN0cikgJiAweDBmOwotCXZhbHVlID0gdmFsdWUgPDwgNDsKLQlzdHIrKzsKLQl2YWx1ZSB8PSBoZXgoKnN0cikgJiAweDBmOwotCi0JcmV0dXJuIHZhbHVlOwotfQotCi1jaGFyIGhleChjaGFyIHYpCi17Ci0JaWYgKGlzZGlnaXQodikpCi0JCXJldHVybiB2IC0gJzAnOwotCWVsc2UgaWYgKGlzeGRpZ2l0KHYpKQotCQlyZXR1cm4gdG9sb3dlcih2KSAtICdhJyArIDEwOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocG1haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocG1haW4uYwppbmRleCA5NGY5Y2JiLi44ZGZmNWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBtYWluLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwbWFpbi5jCkBAIC0xMzE2LDcgKzEzMTYsNiBAQAogICAgICAgICB1OF90IGV4dE9mZnNldCwgdThfdCBpbml0UkYpCiB7CiAgICAgdTMyX3QgY21kWzldOwotICAgIHUzMl90IGNtZEJbM107CiAgICAgdTE2X3QgcmV0OwogICAgIHU4X3Qgb2xkX2JhbmQ7CiAgICAgdThfdCBuZXdfYmFuZDsKQEAgLTM0MzQsNyArMzQzMyw2IEBACiAgICAgLyogV3JpdGUgUEhZIHJlZ3MgNjcyLTcwMyAqLwogICAgIGZvciAoaT0wOyBpPDEyODsgaSs9NCkKICAgICB7Ci0gICAgICAgIHUzMl90IHJlZ0FkZHIgPSAweDk4MDAgKyAoNjcyICogNCk7CiAgICAgICAgIHUzMl90IHZhbDsKIAogICAgICAgICB2YWwgPSAoKHUzMl90KXZwZF9jaGFpbjFbaSszXTw8MjQpIHwKQEAgLTM0ODUsNyArMzQ4Myw2IEBACiAgICAgLyogV3JpdGUgUEhZIHJlZ3MgNjcyLTcwMyArIDB4MTAwMCAqLwogICAgIGZvciAoaT0wOyBpPDEyODsgaSs9NCkKICAgICB7Ci0gICAgICAgIHUzMl90IHJlZ0FkZHIgPSAweDk4MDAgKyAoNjcyICogNCkgKyAweDEwMDA7CiAgICAgICAgIHUzMl90IHZhbDsKIAogICAgICAgICB2YWwgPSAoKHUzMl90KXZwZF9jaGFpbjNbaSszXTw8MjQpIHwKQEAgLTQ1ODQsNyArNDU4MSw2IEBACiB2b2lkIHpmSHBTZXRUVFNJRlNUaW1lKHpkZXZfdCogZGV2LCB1OF90IHNpZnNfdGltZSkKIHsKICAgICB1MzJfdCByZWdfdmFsdWUgPSAwOwotICAgIHptd19nZXRfd2xhbl9kZXYoZGV2KTsKIAogICAgIHNpZnNfdGltZSAmPSAweDNmOwogICAgIHJlZ192YWx1ZSA9IDB4MTQ0MDBiIHwgKCgodTMyX3Qpc2lmc190aW1lKTw8MjQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwcmVnLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHByZWcuYwppbmRleCBkOTg5NGZlLi4xNzg3NzdjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHByZWcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHByZWcuYwpAQCAtNzg2LDQ1ICs3ODYsNiBAQAogCVdUMV81NzYwXzU4MDAsCiB9OwogCi1zdGF0aWMgUkVHX0RNTl9GUkVRX0JBTkQgcmVnRG1uNUdoelR1cmJvRnJlcVtdID0gewotCXsgNTEzMCwgNTIxMCwgNSwgIDYsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFQxXzUxMzBfNTIxMCAqLwotCXsgNTI1MCwgNTMzMCwgNSwgIDYsIDQwLCA0MCwgREZTX0ZDQzMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVDFfNTI1MF81MzMwICovCi0JeyA1MzcwLCA1NDkwLCA1LCAgNiwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVDFfNTM3MF81NDkwICovCi0JeyA1NTMwLCA1NjUwLCA1LCAgNiwgNDAsIDQwLCBERlNfRkNDMywgTk9fUFNDQU4sIDAsIDB9LAkvKiBUMV81NTMwXzU2NTAgKi8KLQotCXsgNTE1MCwgNTE5MCwgNSwgIDYsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFQxXzUxNTBfNTE5MCAqLwotCXsgNTIzMCwgNTMxMCwgNSwgIDYsIDQwLCA0MCwgREZTX0ZDQzMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVDFfNTIzMF81MzEwICovCi0JeyA1MzUwLCA1NDcwLCA1LCAgNiwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVDFfNTM1MF81NDcwICovCi0JeyA1NTEwLCA1NjcwLCA1LCAgNiwgNDAsIDQwLCBERlNfRkNDMywgTk9fUFNDQU4sIDAsIDB9LAkvKiBUMV81NTEwXzU2NzAgKi8KLQotCXsgNTIwMCwgNTI0MCwgMTcsIDYsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFQxXzUyMDBfNTI0MCAqLwotCXsgNTIwMCwgNTI0MCwgMjMsIDYsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFQyXzUyMDBfNTI0MCAqLwotCXsgNTIxMCwgNTIxMCwgMTcsIDYsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFQxXzUyMTBfNTIxMCAqLwotCXsgNTIxMCwgNTIxMCwgMjMsIDAsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFQyXzUyMTBfNTIxMCAqLwotCi0JeyA1MjgwLCA1MjgwLCAyMywgNiwgNDAsIDQwLCBERlNfRkNDMywgUFNDQU5fRkNDX1QsIDAsIDB9LAkvKiBUMV81MjgwXzUyODAgKi8KLQl7IDUyODAsIDUyODAsIDIwLCA2LCA0MCwgNDAsIERGU19GQ0MzLCBQU0NBTl9GQ0NfVCwgMCwgMH0sCS8qIFQyXzUyODBfNTI4MCAqLwotCXsgNTI1MCwgNTI1MCwgMTcsIDAsIDQwLCA0MCwgREZTX0ZDQzMsIFBTQ0FOX0ZDQ19ULCAwLCAwfSwJLyogVDFfNTI1MF81MjUwICovCi0JeyA1MjkwLCA1MjkwLCAyMCwgMCwgNDAsIDQwLCBERlNfRkNDMywgUFNDQU5fRkNDX1QsIDAsIDB9LAkvKiBUMV81MjkwXzUyOTAgKi8KLQl7IDUyNTAsIDUyOTAsIDIwLCAwLCA0MCwgNDAsIERGU19GQ0MzLCBQU0NBTl9GQ0NfVCwgMCwgMH0sCS8qIFQxXzUyNTBfNTI5MCAqLwotCXsgNTI1MCwgNTI5MCwgMjMsIDYsIDQwLCA0MCwgREZTX0ZDQzMsIFBTQ0FOX0ZDQ19ULCAwLCAwfSwJLyogVDJfNTI1MF81MjkwICovCi0KLQl7IDU1NDAsIDU2NjAsIDIwLCA2LCA0MCwgNDAsIERGU19GQ0MzLCBQU0NBTl9GQ0NfVCwgMCwgMH0sCS8qIFQxXzU1NDBfNTY2MCAqLwotCXsgNTc2MCwgNTgwMCwgMjAsIDAsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFQxXzU3NjBfNTgwMCAqLwotCXsgNTc2MCwgNTgwMCwgMzAsIDYsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFQyXzU3NjBfNTgwMCAqLwotCi0JeyA1NzY1LCA1ODA1LCAzMCwgNiwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVDFfNTc2NV81ODA1ICovCi0KLQkvKgotCSAqIEJlbG93IGFyZSB0aGUgV1dSIGZyZXF1ZW5jaWVzCi0JICovCi0KLQl7IDUyMTAsIDUyNTAsIDE1LCAwLCA0MCwgNDAsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgMCwgMH0sIC8qIFdUMV81MjEwXzUyNTAgKi8KLQl7IDUyOTAsIDUyOTAsIDE4LCAwLCA0MCwgNDAsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgMCwgMH0sIC8qIFdUMV81MjkwXzUyOTAgKi8KLQl7IDU1NDAsIDU2NjAsIDIwLCAwLCA0MCwgNDAsIERGU19GQ0MzIHwgREZTX0VUU0ksIFBTQ0FOX1dXUiwgMCwgMH0sIC8qIFdUMV81NTQwXzU2NjAgKi8KLQl7IDU3NjAsIDU4MDAsIDIwLCAwLCA0MCwgNDAsIE5PX0RGUywgUFNDQU5fV1dSLCAwLCAwfSwJLyogV1QxXzU3NjBfNTgwMCAqLwotfTsKLQogLyoKICAqIDJHSHogMTFiIGNoYW5uZWwgdGFncwogICovCkBAIC04NjQsNDUgKzgyNSw2IEBACiAJVzJfMjQ4NF8yNDg0LAogfTsKIAotc3RhdGljIFJFR19ETU5fRlJFUV9CQU5EIHJlZ0RtbjJHaHpGcmVxW10gPSB7Ci0JeyAyMzEyLCAyMzcyLCA1LCAgNiwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBGMV8yMzEyXzIzNzIgKi8KLQl7IDIzMTIsIDIzNzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIEYyXzIzMTJfMjM3MiAqLwotCi0JeyAyNDEyLCAyNDcyLCA1LCAgNiwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBGMV8yNDEyXzI0NzIgKi8KLQl7IDI0MTIsIDI0NzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBQU0NBTl9NS0tBLCAwLCAwfSwJLyogRjJfMjQxMl8yNDcyICovCi0JeyAyNDEyLCAyNDcyLCAzMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBGM18yNDEyXzI0NzIgKi8KLQotCXsgMjQxMiwgMjQ2MiwgMjcsIDYsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogRjFfMjQxMl8yNDYyICovCi0JeyAyNDEyLCAyNDYyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fTUtLQSwgMCwgMH0sCS8qIEYyXzI0MTJfMjQ2MiAqLwotCXsgMjQzMiwgMjQ0MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogRjFfMjQzMl8yNDQyICovCi0KLQl7IDI0NTcsIDI0NzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIEYxXzI0NTdfMjQ3MiAqLwotCi0JeyAyNDY3LCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgUFNDQU5fTUtLQTIgfCBQU0NBTl9NS0tBLCAwLCAwfSwgLyogRjFfMjQ2N18yNDcyICovCi0KLQl7IDI0ODQsIDI0ODQsIDUsICA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIEYxXzI0ODRfMjQ4NCAqLwotCXsgMjQ4NCwgMjQ4NCwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX01LS0EgfCBQU0NBTl9NS0tBMSB8IFBTQ0FOX01LS0EyLCAwLCAwfSwJLyogRjJfMjQ4NF8yNDg0ICovCi0KLQl7IDI1MTIsIDI3MzIsIDUsICA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIEYxXzI1MTJfMjczMiAqLwotCi0JLyoKLQkgKiBXV1IgaGF2ZSBwb3dlcnMgb3BlbmVkIHVwIHRvIDIwZEJtLiAgTGltaXRzIHNob3VsZCBvZnRlbiBjb21lIGZyb20gQ1RML01heCBwb3dlcnMKLQkgKi8KLQotCXsgMjMxMiwgMjM3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVzFfMjMxMl8yMzcyICovCi0JeyAyNDEyLCAyNDEyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBXMV8yNDEyXzI0MTIgKi8KLQl7IDI0MTcsIDI0MzIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFcxXzI0MTdfMjQzMiAqLwotCXsgMjQzNywgMjQ0MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogVzFfMjQzN18yNDQyICovCi0JeyAyNDQ3LCAyNDU3LCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBXMV8yNDQ3XzI0NTcgKi8KLQl7IDI0NjIsIDI0NjIsIDIwLCAwLCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCS8qIFcxXzI0NjJfMjQ2MiAqLwotCXsgMjQ2NywgMjQ2NywgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX1dXUiB8IElTX0VDTV9DSEFOLCAwLCAwfSwgLyogVzFfMjQ2N18yNDY3ICovCi0JeyAyNDY3LCAyNDY3LCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4gfCBJU19FQ01fQ0hBTiwgMCwgMH0sCS8qIFcyXzI0NjdfMjQ2NyAqLwotCXsgMjQ3MiwgMjQ3MiwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX1dXUiB8IElTX0VDTV9DSEFOLCAwLCAwfSwgLyogVzFfMjQ3Ml8yNDcyICovCi0JeyAyNDcyLCAyNDcyLCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4gfCBJU19FQ01fQ0hBTiwgMCwgMH0sCS8qIFcyXzI0NzJfMjQ3MiAqLwotCXsgMjQ4NCwgMjQ4NCwgMjAsIDAsIDIwLCA1LCBOT19ERlMsIFBTQ0FOX1dXUiB8IElTX0VDTV9DSEFOLCAwLCAwfSwgLyogVzFfMjQ4NF8yNDg0ICovCi0JeyAyNDg0LCAyNDg0LCAyMCwgMCwgMjAsIDUsIE5PX0RGUywgTk9fUFNDQU4gfCBJU19FQ01fQ0hBTiwgMCwgMH0sCS8qIFcyXzI0ODRfMjQ4NCAqLwotfTsKLQogCiAvKgogICogMkdIeiAxMWcgY2hhbm5lbCB0YWdzCkBAIC05ODQsMTYgKzkwNiw2IEBACiAJVDFfMjUxMl8yNzMyCiB9OwogCi1zdGF0aWMgUkVHX0RNTl9GUkVRX0JBTkQgcmVnRG1uMkdoejExZ1R1cmJvRnJlcVtdID0gewotCXsgMjMxMiwgMjM3MiwgNSwgIDYsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sICAvKiBUMV8yMzEyXzIzNzIgKi8KLQl7IDI0MzcsIDI0MzcsIDUsICA2LCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LCAgLyogVDFfMjQzN18yNDM3ICovCi0JeyAyNDM3LCAyNDM3LCAyMCwgNiwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwgIC8qIFQyXzI0MzdfMjQzNyAqLwotCXsgMjQzNywgMjQzNywgMTgsIDYsIDQwLCA0MCwgTk9fREZTLCBQU0NBTl9XV1IsIDAsIDB9LCAvKiBUM18yNDM3XzI0MzcgKi8KLQl7IDI1MTIsIDI3MzIsIDUsICA2LCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LCAgLyogVDFfMjUxMl8yNzMyICovCi19OwotCi0KLQogLyoKICAqIDJHSHogMTFuIGZyZXF1ZW5jeSB0YWdzCiAgKi8KQEAgLTEwMDUsMTUgKzkxNyw2IEBACiAgICAgTkdfREVNT19BTExfQ0hBTk5FTFMsCiB9OwogCi1zdGF0aWMgUkVHX0RNTl9GUkVRX0JBTkQgcmVnRG1uMkdoejExbmdGcmVxW10gPSB7Ci0gICAgeyAyNDIyLCAyNDUyLCAyMCwgMCwgNDAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LCAgICAvKiBORzFfMjQyMl8yNDUyICovCi0gICAgeyAyNDIyLCAyNDUyLCAyNywgMCwgNDAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LCAgICAvKiBORzJfMjQyMl8yNDUyICovCi0gICAgeyAyNDIyLCAyNDUyLCAzMCwgMCwgNDAsIDUsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LCAgICAvKiBORzNfMjQyMl8yNDUyICovCi0KLQl7IDIzMTIsIDI3MzIsIDI3LCA2LCAyMCwgNSwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sICAgIC8qIE5HX0RFTU9fQUxMX0NIQU5ORUxTICovCi19OwotCi0KIC8qCiAgKiA1R0h6IDExbiBmcmVxdWVuY3kgdGFncwogICovCkBAIC0xMDUwLDQyICs5NTMsNiBAQAogICAgIE5BX0RFTU9fQUxMX0NIQU5ORUxTLAogfTsKIAotc3RhdGljIFJFR19ETU5fRlJFUV9CQU5EIHJlZ0RtbjVHaHoxMW5hRnJlcVtdID0gewotICAgIC8qCi0gICAgICogVG9EbzogVGhpcyB0YWJsZSBuZWVkcyB0byBiZSBjb21wbGV0ZWx5IHBvcHVsYXRlZCB3aXRoIDVHSHogMTFuIHByb3BlcnRpZXMKLSAgICAgKi8KLQl7IDUxOTAsIDUyMzAsIDE1LCAgMCwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJICAgIC8qIE5BMV81MTkwXzUyMzAgKi8KLQl7IDUxOTAsIDUyMzAsIDE3LCAgNiwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogTkEyXzUxOTBfNTIzMCAqLwotCXsgNTE5MCwgNTIzMCwgMTgsICA2LCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkgICAgLyogTkEzXzUxOTBfNTIzMCAqLwotCXsgNTE5MCwgNTIzMCwgMjAsICAwLCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkvKiBOQTRfNTE5MF81MjMwICovCi0JeyA1MTkwLCA1MjMwLCAyMywgIDYsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCSAgICAvKiBOQTVfNTE5MF81MjMwICovCi0KLQl7IDUyNzAsIDUyNzAsIDIzLCAgNiwgNDAsIDQwLCBERlNfRkNDM3xERlNfRVRTSSwgTk9fUFNDQU4sIDAsIDF9LCAgLyogTkExXzUyNzBfNTI3MCAqLwotCi0JeyA1MjcwLCA1MzEwLCAxOCwgIDYsIDQwLCA0MCwgREZTX0ZDQzN8REZTX0VUU0ksIE5PX1BTQ0FOLCAwLCAxfSwgIC8qIE5BMV81MjcwXzUzMTAgKi8KLQl7IDUyNzAsIDUzMTAsIDIwLCAgMCwgNDAsIDQwLCBERlNfRkNDM3xERlNfRVRTSXxERlNfTUtLNCwgTk9fUFNDQU4sIDAsIDF9LCAgLyogTkEyXzUyNzBfNTMxMCAqLwotCXsgNTI3MCwgNTMxMCwgMjMsICA2LCA0MCwgNDAsIERGU19GQ0MzfERGU19FVFNJLCBOT19QU0NBTiwgMCwgMX0sICAvKiBOQTNfNTI3MF81MzEwICovCi0JeyA1MjcwLCA1MzEwLCAzMCwgIDYsIDQwLCA0MCwgREZTX0ZDQzN8REZTX0VUU0ksIE5PX1BTQ0FOLCAwLCAxfSwgIC8qIE5BNF81MjcwXzUzMTAgKi8KLQotCXsgNTMxMCwgNTMxMCwgMTcsICA2LCA0MCwgNDAsIERGU19GQ0MzfERGU19FVFNJLCBOT19QU0NBTiwgMCwgMX0sICAvKiBOQTFfNTMxMF81MzEwICovCi0KLQl7IDU1MTAsIDU2MzAsIDMwLCAgNiwgNDAsIDQwLCBERlNfRkNDM3xERlNfRVRTSSwgTk9fUFNDQU4sIDAsIDF9LCAgLyogTkExXzU1MTBfNTYzMCAqLwotCi0JeyA1NTEwLCA1NjcwLCAyMCwgIDYsIDQwLCA0MCwgREZTX0ZDQzN8REZTX0VUU0l8REZTX01LSzQsIE5PX1BTQ0FOLCAwLCAxfSwgIC8qIE5BMV81NTEwXzU2NzAgKi8KLQl7IDU1MTAsIDU2NzAsIDI3LCAgMCwgNDAsIDQwLCBERlNfRkNDM3xERlNfRVRTSSwgTk9fUFNDQU4sIDAsIDF9LCAgLyogTkEyXzU1MTBfNTY3MCAqLwotCXsgNTUxMCwgNTY3MCwgMzAsICA2LCA0MCwgNDAsIERGU19GQ0MzLCBOT19QU0NBTiwgMCwgMX0sICAgLyogTkEzXzU1MTBfNTY3MCAqLwotCi0JeyA1NzU1LCA1Nzk1LCAxNywgIDAsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCSAgICAvKiBOQTFfNTc1NV81Nzk1ICovCi0JeyA1NzU1LCA1Nzk1LCAyMCwgIDYsIDQwLCA0MCwgREZTX0VUU0ksIE5PX1BTQ0FOLCAwLCAwfSwJICAgIC8qIE5BMl81NzU1XzU3OTUgKi8KLQl7IDU3NTUsIDU3OTUsIDIzLCAgMCwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJICAgIC8qIE5BM181NzU1XzU3OTUgKi8KLQl7IDU3NTUsIDU3OTUsIDMwLCAgMCwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogTkE0XzU3NTVfNTc5NSAqLwotCXsgNTc1NSwgNTc5NSwgMzAsICA2LCA0MCwgNDAsIE5PX0RGUywgTk9fUFNDQU4sIDAsIDB9LAkgICAgLyogTkE1XzU3NTVfNTc5NSAqLwotCi0JeyA1Nzk1LCA1Nzk1LCAzMCwgIDYsIDQwLCA0MCwgTk9fREZTLCBOT19QU0NBTiwgMCwgMH0sCSAgICAvKiBOQTFfNTc5NV81Nzk1ICovCi0KLSAgICB7IDQ5MjAsIDYxMDAsIDMwLCAgNiwgNDAsIDQwLCBOT19ERlMsIE5PX1BTQ0FOLCAwLCAwfSwJLyogTkFfREVNT19BTExfQ0hBTk5FTFMgKi8KLX07Ci0KIHR5cGVkZWYgc3RydWN0IHJlZ0RvbWFpbiB7CiAJdTE2X3QgcmVnRG1uRW51bTsJLyogdmFsdWUgZnJvbSBFbnVtUmQgdGFibGUgKi8KIAl1OF90IGNvbmZvcm1hbmNlVGVzdExpbWl0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwcncuYyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2hhbC9ocHJ3LmMKaW5kZXggZDlmYWQ0Ny4uNGRiZDVmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL290dXMvaGFsL2hwcncuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9oYWwvaHBydy5jCkBAIC0yODIsNyArMjgyLDYgQEAKICAgICBlbHNlIGlmIChzcmMgPT0gWk1fT0lEX0ZMQVNIX1JFQUQpCiAgICAgewogICAgICAgICB1MzJfdCAgZGF0YWxlbjsKLSAgICAgICAgdTE2X3QgaTsKIAogICAgICAgICBkYXRhbGVuID0gKHJzcFswXSAmIDI1NSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2lvY3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy9pb2N0bC5jCmluZGV4IDY4MDhlNjkuLjhjNDdiMWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9vdHVzL2lvY3RsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL290dXMvaW9jdGwuYwpAQCAtODY2LDE1ICs4NjYsMTUgQEAKIAljaGFyICpjdXJyZW50X2V2ID0gZXh0cmE7CiAJY2hhciAqZW5kX2J1ZjsKIAlpbnQgaTsKLQkvKiBzdHJ1Y3QgenNCc3NMaXN0IEJzc0xpc3Q7ICovCi0Jc3RydWN0IHpzQnNzTGlzdFYxICpwQnNzTGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6c0Jzc0xpc3RWMSksCi0JCQkJCQkJCUdGUF9LRVJORUwpOwogCS8qIEJzc0xpc3QgPSB3ZC0+c3RhLnBCc3NMaXN0OyAqLwogCS8qIHptd19nZXRfd2xhbl9kZXYoZGV2KTsgKi8KIAogCWlmIChtYWNwLT5EZXZpY2VPcGVuZWQgIT0gMSkKIAkJcmV0dXJuIDA7CiAKKwkvKiBzdHJ1Y3QgenNCc3NMaXN0IEJzc0xpc3Q7ICovCisJc3RydWN0IHpzQnNzTGlzdFYxICpwQnNzTGlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6c0Jzc0xpc3RWMSksCisJCQkJCQkJCUdGUF9LRVJORUwpOwogCWlmIChkYXRhLT5sZW5ndGggPT0gMCkKIAkJZW5kX2J1ZiA9IGV4dHJhICsgSVdfU0NBTl9NQVhfREFUQTsKIAllbHNlCkBAIC05MzAsNyArOTMwLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoZXNzaWQtPmZsYWdzID09IDEpIHsKLQkJaWYgKGVzc2lkLT5sZW5ndGggPiAoSVdfRVNTSURfTUFYX1NJWkUgKyAxKSkKKwkJaWYgKGVzc2lkLT5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSkKIAkJCXJldHVybiAtRTJCSUc7CiAKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZFc3NpZEJ1ZiwgZXNzaWQtPnBvaW50ZXIsIGVzc2lkLT5sZW5ndGgpKQpAQCAtMjIyNyw3ICsyMjI3LDggQEAKIAljYXNlIFpEX0NNRF9TQ0FOX1JFUToKIAkJcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnZfd3BhX2lvY3RsOiBaRF9DTURfU0NBTl9SRVFcbiIpOwogCQlicmVhazsKLQljYXNlIFpEX0NNRF9TRVRfR0VORVJJQ19FTEVNRU5UOgorCWNhc2UgWkRfQ01EX1NFVF9HRU5FUklDX0VMRU1FTlQ6IHsKKwkJdThfdCBsZW4sICp3cGFpZTsKIAkJcHJpbnRrKEtFUk5fRVJSICJ1c2JkcnZfd3BhX2lvY3RsOiIKIAkJCQkJIiBaRF9DTURfU0VUX0dFTkVSSUNfRUxFTUVOVFxuIik7CiAKQEAgLTIyNTAsOCArMjI1MSw4IEBACiAJCS8qIHpmaVdsYW5TZXRXcGFJZShkZXYsIHpkcGFybS0+dS5nZW5lcmljX2VsZW0uZGF0YSwKIAkJKiB6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmxlbik7CiAJCSovCi0JCXU4X3QgbGVuID0gemRwYXJtLT51LmdlbmVyaWNfZWxlbS5sZW47Ci0JCXU4X3QgKndwYWllID0gKHU4X3QgKil6ZHBhcm0tPnUuZ2VuZXJpY19lbGVtLmRhdGE7CisJCWxlbiA9IHpkcGFybS0+dS5nZW5lcmljX2VsZW0ubGVuOworCQl3cGFpZSA9IHpkcGFybS0+dS5nZW5lcmljX2VsZW0uZGF0YTsKIAogCQlwcmludGsoS0VSTl9FUlIgIndkLT5hcC53cGFMZW4gOiAlIGRcbiIsIGxlbik7CiAKQEAgLTIyNzMsNiArMjI3NCw3IEBACiAJCSogI2VuZGlmCiAJCSovCiAJCWJyZWFrOworCX0KIAogCS8qICNpZmRlZiBaTV9IT1NUQVBEX1NVUFBPUlQgKi8KIAljYXNlIFpEX0NNRF9HRVRfVFNDOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL290dXMvdXNiZHJ2LmMgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy91c2JkcnYuYwppbmRleCBiMGFkYmM4Li41ZTZhMTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy91c2JkcnYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvb3R1cy91c2JkcnYuYwpAQCAtODI5LDcgKzgyOSw3IEBACiB7CiAgICAgLyogQWxsb2NhdGUgbmV0IGRldmljZSBzdHJ1Y3R1cmUgKi8KICAgICB2YXBbdmFwSWRdLmRldiA9IGFsbG9jX2V0aGVyZGV2KDApOwotICAgIHByaW50aygiUmVnaXN0ZXIgdmFwIGRldj0leFxuIiwgKHUzMl90KXZhcFt2YXBJZF0uZGV2KTsKKyAgICBwcmludGsoIlJlZ2lzdGVyIHZhcCBkZXY9JXBcbiIsIHZhcFt2YXBJZF0uZGV2KTsKIAogICAgIGlmKHZhcFt2YXBJZF0uZGV2ID09IE5VTEwpIHsKICAgICAgICAgcHJpbnRrKCJhbGxvY19ldGhlcmRldiBmYWlsXG4iKTsKQEAgLTg4Myw3ICs4ODMsNyBAQAogICAgIHByaW50aygiVW5yZWdpc3RlciBWQVAgZGV2IDogJXNcbiIsIHZhcFt2YXBJZF0uZGV2LT5uYW1lKTsKIAogICAgIGlmKHZhcFt2YXBJZF0uZGV2ICE9IE5VTEwpIHsKLSAgICAgICAgcHJpbnRrKCJVbnJlZ2lzdGVyIHZhcCBkZXY9JXhcbiIsICh1MzJfdCl2YXBbdmFwSWRdLmRldik7CisgICAgICAgIHByaW50aygiVW5yZWdpc3RlciB2YXAgZGV2PSVwXG4iLCB2YXBbdmFwSWRdLmRldik7CiAgICAgICAgIC8vCiAgICAgICAgIC8vdW5yZWdpc3Rlcl9uZXRkZXZpY2Uod2RzW3dkc0lkXS5kZXYpOwogICAgICAgICB1bnJlZ2lzdGVyX25ldGRldih2YXBbdmFwSWRdLmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy93cmFwX3BrdC5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvd3JhcF9wa3QuYwppbmRleCA3NWJiOTUyLi5hMmY1Y2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy93cmFwX3BrdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3dyYXBfcGt0LmMKQEAgLTU4LDcgKzU4LDcgQEAKIAkJCXNrYjEgPSBza2JfY29weShidWYsIEdGUF9BVE9NSUMpOwogCQkJaWYgKHNrYjEgIT0gTlVMTCkgewogCQkJCXNrYjEtPmRldiA9IGRldjsKLQkJCQlza2IxLT5tYWNfaGVhZGVyID0gc2tiMS0+ZGF0YTsKKwkJCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IxKTsKIAkJCQlza2IxLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9OT05FOwogCQkJCXNrYjEtPnBrdF90eXBlID0gUEFDS0VUX09USEVSSE9TVDsKIAkJCQkvKiBFVEhfUF84MDIxMV9SQVcgKi8KQEAgLTg1LDEzICs4NSw3IEBACiAJLyogbmV3X2J1ZiA9IGRldl9hbGxvY19za2IoMjA0OCk7CSovCiAJbmV3X2J1ZiA9IGRldl9hbGxvY19za2IoYnVmLT5sZW4pOwogCi0jaWZkZWYgTkVUX1NLQlVGRl9EQVRBX1VTRVNfT0ZGU0VUCi0JbmV3X2J1Zi0+dGFpbCA9IDA7Ci0JbmV3X2J1Zi0+bGVuID0gMDsKLSNlbHNlCi0JbmV3X2J1Zi0+dGFpbCA9IG5ld19idWYtPmRhdGE7Ci0JbmV3X2J1Zi0+bGVuID0gMDsKLSNlbmRpZgorCXNrYl9yZXNldF90YWlsX3BvaW50ZXIobmV3X2J1Zik7CiAKIAlza2JfcHV0KG5ld19idWYsIGJ1Zi0+bGVuKTsKIAltZW1jcHkobmV3X2J1Zi0+ZGF0YSwgYnVmLT5kYXRhLCBidWYtPmxlbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy96ZHVzYi5jIGIvZHJpdmVycy9zdGFnaW5nL290dXMvemR1c2IuYwppbmRleCAyYTZkOTM3Li40Y2Q5YjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvb3R1cy96ZHVzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9vdHVzL3pkdXNiLmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIHN0YXRpYyBjb25zdCBjaGFyIGRyaXZlcl9uYW1lW10gPSAiT3R1cyI7CiAKIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB6ZDEyMjFfaWRzIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHpkMTIyMV9pZHNbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVkVORE9SX0FUSFIsIFBST0RVQ1RfQVI5MTcwKSB9LAogICAgICAgICB7IFVTQl9ERVZJQ0UoVkVORE9SX0RMSU5LLCBQUk9EVUNUX0RXQTE2MEEpIH0sCiAJeyBVU0JfREVWSUNFKFZFTkRPUl9ORVRHRUFSLCBQUk9EVUNUX1dOREEzMTAwKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9LY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWM2NmQyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wOWF1dGgvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDkgKzAsMCBAQAotY29uZmlnIFBMQU45QVVUSAotCXRyaXN0YXRlICJQbGFuIDkgc3R5bGUgY2FwYWJpbGl0eSBkZXZpY2UgaW1wbGVtZW50YXRpb24iCi0JZGVmYXVsdCBuCi0JZGVwZW5kcyBvbiBDUllQVE8KLQloZWxwCi0JICBUaGlzIG1vZHVsZSBpbXBsZW1lbnRzIHRoZSBQbGFuIDkgc3R5bGUgY2FwYWJpbGl0eSBkZXZpY2UuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZQotCSAgTSBoZXJlOiB0aGUgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHA5YXV0aC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9wOWF1dGgvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvcDlhdXRoL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzZWJmNmZmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wOWF1dGgvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi1vYmotJChDT05GSUdfUExBTjlBVVRIKQkrPSBwOWF1dGgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9wOWF1dGguYyBiL2RyaXZlcnMvc3RhZ2luZy9wOWF1dGgvcDlhdXRoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiNzk2MjYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3A5YXV0aC9wOWF1dGguYworKysgL2Rldi9udWxsCkBAIC0xLDQwOCArMCwwIEBACi0vKgotICogUGxhbiA5IHN0eWxlIGNhcGFiaWxpdHkgZGV2aWNlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgTGludXggS2VybmVsCi0gKgotICogQ29weXJpZ2h0IDIwMDgsIDIwMDkgQXNod2luIEdhbnRpIDxhc2h3aW4uZ2FudGlAZ21haWwuY29tPgotICoKLSAqIFJlbGVhc2VkIHVuZGVyIHRoZSBHUEx2MgotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvZmNudGwuaD4KLSNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgotI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvY3JlZC5oPgotCi0jaWZuZGVmIENBUF9NQUpPUgotI2RlZmluZSBDQVBfTUFKT1IgMAotI2VuZGlmCi0KLSNpZm5kZWYgQ0FQX05SX0RFVlMKLSNkZWZpbmUgQ0FQX05SX0RFVlMgMgkJLyogY2FwaGFzaCBhbmQgY2FwdXNlICovCi0jZW5kaWYKLQotI2lmbmRlZiBDQVBfTk9ERV9TSVpFCi0jZGVmaW5lIENBUF9OT0RFX1NJWkUgMjAKLSNlbmRpZgotCi0jZGVmaW5lIE1BWF9ESUdFU1RfU0laRSAgMjAKLQotc3RydWN0IGNhcF9ub2RlIHsKLQljaGFyIGRhdGFbQ0FQX05PREVfU0laRV07Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotfTsKLQotc3RydWN0IGNhcF9kZXYgewotCXN0cnVjdCBjYXBfbm9kZSAqaGVhZDsKLQlpbnQgbm9kZV9zaXplOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKLQlzdHJ1Y3QgY2RldiBjZGV2OwotfTsKLQotc3RhdGljIGludCBjYXBfbWFqb3IgPSBDQVBfTUFKT1I7Ci1zdGF0aWMgaW50IGNhcF9taW5vcjsKLXN0YXRpYyBpbnQgY2FwX25yX2RldnMgPSBDQVBfTlJfREVWUzsKLXN0YXRpYyBpbnQgY2FwX25vZGVfc2l6ZSA9IENBUF9OT0RFX1NJWkU7Ci0KLW1vZHVsZV9wYXJhbShjYXBfbWFqb3IsIGludCwgU19JUlVHTyk7Ci1tb2R1bGVfcGFyYW0oY2FwX21pbm9yLCBpbnQsIFNfSVJVR08pOwotbW9kdWxlX3BhcmFtKGNhcF9ucl9kZXZzLCBpbnQsIFNfSVJVR08pOwotCi1NT0RVTEVfQVVUSE9SKCJBc2h3aW4gR2FudGkiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIHN0cnVjdCBjYXBfZGV2ICpjYXBfZGV2aWNlczsKLQotc3RhdGljIHZvaWQgaGV4ZHVtcCh1bnNpZ25lZCBjaGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0Jd2hpbGUgKGxlbi0tKQotCQlwcmludGsoIiUwMngiLCAqYnVmKyspOwotCXByaW50aygiXG4iKTsKLX0KLQotc3RhdGljIGNoYXIgKmNhcF9oYXNoKGNoYXIgKnBsYWluX3RleHQsIHVuc2lnbmVkIGludCBwbGFpbl90ZXh0X3NpemUsCi0JCSAgICAgIGNoYXIgKmtleSwgdW5zaWduZWQgaW50IGtleV9zaXplKQotewotCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKLQljaGFyICpyZXN1bHQ7Ci0Jc3RydWN0IGNyeXB0b19oYXNoICp0Zm07Ci0Jc3RydWN0IGhhc2hfZGVzYyBkZXNjOwotCWludCByZXQ7Ci0KLQl0Zm0gPSBjcnlwdG9fYWxsb2NfaGFzaCgiaG1hYyhzaGExKSIsIDAsIENSWVBUT19BTEdfQVNZTkMpOwotCWlmIChJU19FUlIodGZtKSkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJmYWlsZWQgdG8gbG9hZCB0cmFuc2Zvcm0gZm9yIGhtYWMoc2hhMSk6ICVsZFxuIiwKLQkJICAgICAgIFBUUl9FUlIodGZtKSk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWRlc2MudGZtID0gdGZtOwotCWRlc2MuZmxhZ3MgPSAwOwotCi0JcmVzdWx0ID0ga3phbGxvYyhNQVhfRElHRVNUX1NJWkUsIEdGUF9LRVJORUwpOwotCWlmICghcmVzdWx0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAib3V0IG9mIG1lbW9yeSFcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlzZ19zZXRfYnVmKCZzZywgcGxhaW5fdGV4dCwgcGxhaW5fdGV4dF9zaXplKTsKLQotCXJldCA9IGNyeXB0b19oYXNoX3NldGtleSh0Zm0sIGtleSwga2V5X3NpemUpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJzZXRrZXkoKSBmYWlsZWQgcmV0PSVkXG4iLCByZXQpOwotCQlrZnJlZShyZXN1bHQpOwotCQlyZXN1bHQgPSBOVUxMOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlyZXQgPSBjcnlwdG9faGFzaF9kaWdlc3QoJmRlc2MsICZzZywgcGxhaW5fdGV4dF9zaXplLCByZXN1bHQpOwotCWlmIChyZXQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJkaWdlc3QgKCkgZmFpbGVkIHJldD0lZFxuIiwgcmV0KTsKLQkJa2ZyZWUocmVzdWx0KTsKLQkJcmVzdWx0ID0gTlVMTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcHJpbnRrKEtFUk5fREVCVUcgImNyeXB0byBoYXNoIGRpZ2VzdCBzaXplICVkXG4iLAotCSAgICAgICBjcnlwdG9faGFzaF9kaWdlc3RzaXplKHRmbSkpOwotCWhleGR1bXAocmVzdWx0LCBNQVhfRElHRVNUX1NJWkUpOwotCi1vdXQ6Ci0JY3J5cHRvX2ZyZWVfaGFzaCh0Zm0pOwotCXJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbnQgY2FwX3RyaW0oc3RydWN0IGNhcF9kZXYgKmRldikKLXsKLQlzdHJ1Y3QgY2FwX25vZGUgKnRtcDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICpxOwotCWlmIChkZXYtPmhlYWQgIT0gTlVMTCkgewotCQlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBxLCAmKGRldi0+aGVhZC0+bGlzdCkpIHsKLQkJCXRtcCA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgY2FwX25vZGUsIGxpc3QpOwotCQkJbGlzdF9kZWwocG9zKTsKLQkJCWtmcmVlKHRtcCk7Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY2FwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IGNhcF9kZXYgKmRldjsKLQlkZXYgPSBjb250YWluZXJfb2YoaW5vZGUtPmlfY2Rldiwgc3RydWN0IGNhcF9kZXYsIGNkZXYpOwotCWZpbHAtPnByaXZhdGVfZGF0YSA9IGRldjsKLQotCS8qIHRyaW0gdG8gMCB0aGUgbGVuZ3RoIG9mIHRoZSBkZXZpY2UgaWYgb3BlbiB3YXMgd3JpdGUtb25seSAqLwotCWlmICgoZmlscC0+Zl9mbGFncyAmIE9fQUNDTU9ERSkgPT0gT19XUk9OTFkpIHsKLQkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZGV2LT5zZW0pKQotCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJY2FwX3RyaW0oZGV2KTsKLQkJdXAoJmRldi0+c2VtKTsKLQl9Ci0JLyogaW5pdGlhbGlzZSB0aGUgaGVhZCBpZiBpdCBpcyBOVUxMICovCi0JaWYgKGRldi0+aGVhZCA9PSBOVUxMKSB7Ci0JCWRldi0+aGVhZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjYXBfbm9kZSksIEdGUF9LRVJORUwpOwotCQlJTklUX0xJU1RfSEVBRCgmKGRldi0+aGVhZC0+bGlzdCkpOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBjYXBfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHNzaXplX3QgY2FwX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAotCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpmX3BvcykKLXsKLQlzdHJ1Y3QgY2FwX25vZGUgKm5vZGVfcHRyLCAqdG1wOwotCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKLQlzdHJ1Y3QgY2FwX2RldiAqZGV2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwotCXNzaXplX3QgcmV0dmFsID0gLUVOT01FTTsKLQlzdHJ1Y3QgY3JlZCAqbmV3OwotCWludCBsZW4sIHRhcmdldF9pbnQsIHNvdXJjZV9pbnQsIGZsYWcgPSAwOwotCWNoYXIgKnVzZXJfYnVmLCAqdXNlcl9idWZfcnVubmluZywgKnNvdXJjZV91c2VyLCAqdGFyZ2V0X3VzZXIsCi0JICAgICpyYW5kX3N0ciwgKmhhc2hfc3RyLCAqcmVzdWx0OwotCi0JaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZGV2LT5zZW0pKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCi0JdXNlcl9idWZfcnVubmluZyA9IE5VTEw7Ci0JaGFzaF9zdHIgPSBOVUxMOwotCW5vZGVfcHRyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGNhcF9ub2RlKSwgR0ZQX0tFUk5FTCk7Ci0JdXNlcl9idWYgPSBremFsbG9jKGNvdW50KzEsIEdGUF9LRVJORUwpOwotCWlmICghbm9kZV9wdHIgfHwgIXVzZXJfYnVmKQotCQlnb3RvIG91dDsKLQotCWlmIChjb3B5X2Zyb21fdXNlcih1c2VyX2J1ZiwgYnVmLCBjb3VudCkpIHsKLQkJcmV0dmFsID0gLUVGQVVMVDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JLyoKLQkgKiBJZiB0aGUgbWlub3IgbnVtYmVyIGlzIDAgKCAvZGV2L2NhcGhhc2ggKSB0aGVuIHNpbXBseSBhZGQgdGhlCi0JICogaGFzaGVkIGNhcGFiaWxpdHkgc3VwcGxpZWQgYnkgdGhlIHVzZXIgdG8gdGhlIGxpc3Qgb2YgaGFzaGVzCi0JICovCi0JaWYgKDAgPT0gaW1pbm9yKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKSkgewotCQlpZiAoY291bnQgPiBDQVBfTk9ERV9TSVpFKSB7Ci0JCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiQ2FwYWJpbGl0eSBiZWluZyB3cml0dGVuIHRvIC9kZXYvY2FwaGFzaCA6IFxuIik7Ci0JCWhleGR1bXAodXNlcl9idWYsIGNvdW50KTsKLQkJbWVtY3B5KG5vZGVfcHRyLT5kYXRhLCB1c2VyX2J1ZiwgY291bnQpOwotCQlsaXN0X2FkZCgmKG5vZGVfcHRyLT5saXN0KSwgJihkZXYtPmhlYWQtPmxpc3QpKTsKLQkJbm9kZV9wdHIgPSBOVUxMOwotCX0gZWxzZSB7Ci0JCWNoYXIgKnRtcHU7Ci0JCWlmICghY2FwX2RldmljZXNbMF0uaGVhZCB8fAotCQkJCWxpc3RfZW1wdHkoJihjYXBfZGV2aWNlc1swXS5oZWFkLT5saXN0KSkpIHsKLQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQkvKgotCQkgKiBicmVhayB0aGUgc3VwcGxpZWQgc3RyaW5nIGludG8gdG9rZW5zIHdpdGggQCBhcyB0aGUKLQkJICogZGVsaW1pdGVyIElmIHRoZSBzdHJpbmcgaXMgInVzZXIxQHVzZXIyQHJhbmRvbXN0cmluZyIgd2UKLQkJICogbmVlZCB0byBzcGxpdCBpdCBhbmQgaGFzaCAndXNlcjFAdXNlcjInIHVzaW5nICdyYW5kb21zdHJpbmcnCi0JCSAqIGFzIHRoZSBrZXkuCi0JCSAqLwotCQl0bXB1ID0gdXNlcl9idWZfcnVubmluZyA9IGtzdHJkdXAodXNlcl9idWYsIEdGUF9LRVJORUwpOwotCQlzb3VyY2VfdXNlciA9IHN0cnNlcCgmdG1wdSwgIkAiKTsKLQkJdGFyZ2V0X3VzZXIgPSBzdHJzZXAoJnRtcHUsICJAIik7Ci0JCXJhbmRfc3RyID0gdG1wdTsKLQkJaWYgKCFzb3VyY2VfdXNlciB8fCAhdGFyZ2V0X3VzZXIgfHwgIXJhbmRfc3RyKSB7Ci0JCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQkvKiBoYXNoIHRoZSBzdHJpbmcgdXNlcjFAdXNlcjIgd2l0aCByYW5kX3N0ciBhcyB0aGUga2V5ICovCi0JCWxlbiA9IHN0cmxlbihzb3VyY2VfdXNlcikgKyBzdHJsZW4odGFyZ2V0X3VzZXIpICsgMTsKLQkJLyogc3JjLCBALCBsZW4sIFwwICovCi0JCWhhc2hfc3RyID0ga3phbGxvYyhsZW4rMSwgR0ZQX0tFUk5FTCk7Ci0JCXN0cmNhdChoYXNoX3N0ciwgc291cmNlX3VzZXIpOwotCQlzdHJjYXQoaGFzaF9zdHIsICJAIik7Ci0JCXN0cmNhdChoYXNoX3N0ciwgdGFyZ2V0X3VzZXIpOwotCi0JCXByaW50ayhLRVJOX0FMRVJUICJ0aGUgc291cmNlIHVzZXIgaXMgJXMgXG4iLCBzb3VyY2VfdXNlcik7Ci0JCXByaW50ayhLRVJOX0FMRVJUICJ0aGUgdGFyZ2V0IHVzZXIgaXMgJXMgXG4iLCB0YXJnZXRfdXNlcik7Ci0KLQkJcmVzdWx0ID0gY2FwX2hhc2goaGFzaF9zdHIsIGxlbiwgcmFuZF9zdHIsIHN0cmxlbihyYW5kX3N0cikpOwotCQlpZiAoTlVMTCA9PSByZXN1bHQpIHsKLQkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQltZW1jcHkobm9kZV9wdHItPmRhdGEsIHJlc3VsdCwgQ0FQX05PREVfU0laRSk7ICAvKiB3aHk/ICovCi0JCS8qIENoYW5nZSB0aGUgcHJvY2VzcydzIHVpZCBpZiB0aGUgaGFzaCBpcyBwcmVzZW50IGluIHRoZQotCQkgKiBsaXN0IG9mIGhhc2hlcwotCQkgKi8KLQkJbGlzdF9mb3JfZWFjaChwb3MsICYoY2FwX2RldmljZXMtPmhlYWQtPmxpc3QpKSB7Ci0JCQkvKgotCQkJICogQ2hhbmdlIHRoZSB1c2VyIGlkIG9mIHRoZSBwcm9jZXNzIGlmIHRoZSBoYXNoZXMKLQkJCSAqIG1hdGNoCi0JCQkgKi8KLQkJCWlmICgwID09Ci0JCQkgICAgbWVtY21wKHJlc3VsdCwKLQkJCQkgICBsaXN0X2VudHJ5KHBvcywgc3RydWN0IGNhcF9ub2RlLAotCQkJCQkgICAgICBsaXN0KS0+ZGF0YSwKLQkJCQkgICBDQVBfTk9ERV9TSVpFKSkgewotCQkJCXRhcmdldF9pbnQgPSAodW5zaWduZWQgaW50KQotCQkJCSAgICBzaW1wbGVfc3RydG9sKHRhcmdldF91c2VyLCBOVUxMLCAwKTsKLQkJCQlzb3VyY2VfaW50ID0gKHVuc2lnbmVkIGludCkKLQkJCQkgICAgc2ltcGxlX3N0cnRvbChzb3VyY2VfdXNlciwgTlVMTCwgMCk7Ci0JCQkJZmxhZyA9IDE7Ci0KLQkJCQkvKgotCQkJCSAqIENoZWNrIHdoZXRoZXIgdGhlIHByb2Nlc3Mgd3JpdGluZyB0byBjYXB1c2UKLQkJCQkgKiBpcyBhY3R1YWxseSBvd25lZCBieSB0aGUgc291cmNlIG93bmVyCi0JCQkJICovCi0JCQkJaWYgKHNvdXJjZV9pbnQgIT0gY3VycmVudF91aWQoKSkgewotCQkJCQlwcmludGsoS0VSTl9BTEVSVAotCQkJCQkgICAgICAgIlByb2Nlc3MgaXMgbm90IG93bmVkIGJ5IHRoZSBzb3VyY2UgdXNlciBvZiB0aGUgY2FwYWJpbGl0eS5cbiIpOwotCQkJCQlyZXR2YWwgPSAtRUZBVUxUOwotCQkJCQlnb3RvIG91dDsKLQkJCQl9Ci0JCQkJLyoKLQkJCQkgKiBXaGF0IGFsbCBpZCdzIG5lZWQgdG8gYmUgY2hhbmdlZCBoZXJlPyB1aWQsCi0JCQkJICogZXVpZCwgZnNpZCwgc2F2ZWRpZHMgPz8gIEN1cnJlbnRseSBJIGFtCi0JCQkJICogY2hhbmdpbmcgdGhlIGVmZmVjdGl2ZSB1c2VyIGlkIHNpbmNlIG1vc3Qgb2YKLQkJCQkgKiB0aGUgYXV0aG9yaXNhdGlvbiBkZWNpc2lvbnMgYXJlIGJhc2VkIG9uIGl0Ci0JCQkJICovCi0JCQkJbmV3ID0gcHJlcGFyZV9jcmVkcygpOwotCQkJCWlmICghbmV3KSB7Ci0JCQkJCXJldHZhbCA9IC1FTk9NRU07Ci0JCQkJCWdvdG8gb3V0OwotCQkJCX0KLQkJCQluZXctPnVpZCA9ICh1aWRfdCkgdGFyZ2V0X2ludDsKLQkJCQluZXctPmV1aWQgPSAodWlkX3QpIHRhcmdldF9pbnQ7Ci0JCQkJcmV0dmFsID0gY29tbWl0X2NyZWRzKG5ldyk7Ci0JCQkJaWYgKHJldHZhbCkKLQkJCQkJZ290byBvdXQ7Ci0KLQkJCQkvKgotCQkJCSAqIFJlbW92ZSB0aGUgY2FwYWJpbGl0eSBmcm9tIHRoZSBsaXN0IGFuZAotCQkJCSAqIGJyZWFrCi0JCQkJICovCi0JCQkJdG1wID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBjYXBfbm9kZSwgbGlzdCk7Ci0JCQkJbGlzdF9kZWwocG9zKTsKLQkJCQlrZnJlZSh0bXApOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmICgwID09IGZsYWcpIHsKLQkJCS8qCi0JCQkgKiBUaGUgY2FwYWJpbGl0eSBpcyBub3QgcHJlc2VudCBpbiB0aGUgbGlzdCBvZiB0aGUKLQkJCSAqIGhhc2hlcyBzdG9yZWQsIGhlbmNlIHJldHVybiBmYWlsdXJlCi0JCQkgKi8KLQkJCXByaW50ayhLRVJOX0FMRVJUCi0JCQkgICAgICAgIkludmFsaWQgY2FwYWJpbGl5IHdyaXR0ZW4gdG8gL2Rldi9jYXB1c2UgXG4iKTsKLQkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQkqZl9wb3MgKz0gY291bnQ7Ci0JcmV0dmFsID0gY291bnQ7Ci0JLyogdXBkYXRlIHRoZSBzaXplICovCi0JaWYgKGRldi0+c2l6ZSA8ICpmX3BvcykKLQkJZGV2LT5zaXplID0gKmZfcG9zOwotCi1vdXQ6Ci0Ja2ZyZWUobm9kZV9wdHIpOwotCWtmcmVlKHVzZXJfYnVmKTsKLQlrZnJlZSh1c2VyX2J1Zl9ydW5uaW5nKTsKLQlrZnJlZShoYXNoX3N0cik7Ci0JdXAoJmRldi0+c2VtKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjYXBfZm9wcyA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkud3JpdGUgPSBjYXBfd3JpdGUsCi0JLm9wZW4gPSBjYXBfb3BlbiwKLQkucmVsZWFzZSA9IGNhcF9yZWxlYXNlLAotfTsKLQotLyogbm8gX19leGl0IGhlcmUgYmVjYXVzZSBpdCBjYW4gYmUgY2FsbGVkIGJ5IHRoZSBpbml0IGZ1bmN0aW9uICovCi1zdGF0aWMgdm9pZCBjYXBfY2xlYW51cF9tb2R1bGUodm9pZCkKLXsKLQlpbnQgaTsKLQlkZXZfdCBkZXZubyA9IE1LREVWKGNhcF9tYWpvciwgY2FwX21pbm9yKTsKLQlpZiAoY2FwX2RldmljZXMpIHsKLQkJZm9yIChpID0gMDsgaSA8IGNhcF9ucl9kZXZzOyBpKyspIHsKLQkJCWNhcF90cmltKGNhcF9kZXZpY2VzICsgaSk7Ci0JCQljZGV2X2RlbCgmY2FwX2RldmljZXNbaV0uY2Rldik7Ci0JCX0KLQkJa2ZyZWUoY2FwX2RldmljZXMpOwotCX0KLQl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2bm8sIGNhcF9ucl9kZXZzKTsKLQotfQotCi1zdGF0aWMgdm9pZCBjYXBfc2V0dXBfY2RldihzdHJ1Y3QgY2FwX2RldiAqZGV2LCBpbnQgaW5kZXgpCi17Ci0JaW50IGVyciwgZGV2bm8gPSBNS0RFVihjYXBfbWFqb3IsIGNhcF9taW5vciArIGluZGV4KTsKLQljZGV2X2luaXQoJmRldi0+Y2RldiwgJmNhcF9mb3BzKTsKLQlkZXYtPmNkZXYub3duZXIgPSBUSElTX01PRFVMRTsKLQlkZXYtPmNkZXYub3BzID0gJmNhcF9mb3BzOwotCWVyciA9IGNkZXZfYWRkKCZkZXYtPmNkZXYsIGRldm5vLCAxKTsKLQlpZiAoZXJyKQotCQlwcmludGsoS0VSTl9OT1RJQ0UgIkVycm9yICVkIGFkZGluZyBjYXAlZCIsIGVyciwgaW5kZXgpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBjYXBfaW5pdF9tb2R1bGUodm9pZCkKLXsKLQlpbnQgcmVzdWx0LCBpOwotCWRldl90IGRldiA9IDA7Ci0KLQlpZiAoY2FwX21ham9yKSB7Ci0JCWRldiA9IE1LREVWKGNhcF9tYWpvciwgY2FwX21pbm9yKTsKLQkJcmVzdWx0ID0gcmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihkZXYsIGNhcF9ucl9kZXZzLCAiY2FwIik7Ci0JfSBlbHNlIHsKLQkJcmVzdWx0ID0gYWxsb2NfY2hyZGV2X3JlZ2lvbigmZGV2LCBjYXBfbWlub3IsIGNhcF9ucl9kZXZzLAotCQkJCQkgICAgICJjYXAiKTsKLQkJY2FwX21ham9yID0gTUFKT1IoZGV2KTsKLQl9Ci0KLQlpZiAocmVzdWx0IDwgMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjYXA6IGNhbid0IGdldCBtYWpvciAlZFxuIiwKLQkJICAgICAgIGNhcF9tYWpvcik7Ci0JCXJldHVybiByZXN1bHQ7Ci0JfQotCi0JY2FwX2RldmljZXMgPSBremFsbG9jKGNhcF9ucl9kZXZzICogc2l6ZW9mKHN0cnVjdCBjYXBfZGV2KSwKLQkJCSAgICAgIEdGUF9LRVJORUwpOwotCWlmICghY2FwX2RldmljZXMpIHsKLQkJcmVzdWx0ID0gLUVOT01FTTsKLQkJZ290byBmYWlsOwotCX0KLQotCS8qIEluaXRpYWxpemUgZWFjaCBkZXZpY2UuICovCi0JZm9yIChpID0gMDsgaSA8IGNhcF9ucl9kZXZzOyBpKyspIHsKLQkJY2FwX2RldmljZXNbaV0ubm9kZV9zaXplID0gY2FwX25vZGVfc2l6ZTsKLQkJaW5pdF9NVVRFWCgmY2FwX2RldmljZXNbaV0uc2VtKTsKLQkJY2FwX3NldHVwX2NkZXYoJmNhcF9kZXZpY2VzW2ldLCBpKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotZmFpbDoKLQljYXBfY2xlYW51cF9tb2R1bGUoKTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi1tb2R1bGVfaW5pdChjYXBfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQoY2FwX2NsZWFudXBfbW9kdWxlKTsKLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcGFuZWwvcGFuZWwuYyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCmluZGV4IDk1YzkzZTguLjM3Nzg4NGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wYW5lbC9wYW5lbC5jCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9waGlzb24vcGhpc29uLmMgYi9kcml2ZXJzL3N0YWdpbmcvcGhpc29uL3BoaXNvbi5jCmluZGV4IGZjYmE3OGQuLjBjNDk1ZWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9waGlzb24vcGhpc29uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3BoaXNvbi9waGlzb24uYwpAQCAtNjksNyArNjksNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwaGlzb25fcGNpX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBoaXNvbl9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfVkVORE9SX0lEX1BISVNPTiwgUENJX0RFVklDRV9JRF9QUzUwMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsCiAJICBQQ0lfQ0xBU1NfU1RPUkFHRV9JREUgPDwgOCwgMHhmZmZmMDAsIDAgfSwKIAl7IDAsIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvaW5vZGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9pbm9kZS5jCmluZGV4IGY2OWI3NzguLjYzMjc1NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9pbm9kZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9wb2htZWxmcy9pbm9kZS5jCkBAIC0zNiw2ICszNiw3IEBACiAjZGVmaW5lIFBPSE1FTEZTX01BR0lDX05VTQkweDUwNGY0ODJlCiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqcG9obWVsZnNfaW5vZGVfY2FjaGU7CitzdGF0aWMgYXRvbWljX3QgcHNiX2JkaV9udW0gPSBBVE9NSUNfSU5JVCgwKTsKIAogLyoKICAqIFJlbW92ZXMgaW5vZGUgZnJvbSBhbGwgdHJlZXMsIGRyb3BzIGxvY2FsIG5hbWUgY2FjaGUgYW5kIHJlbW92ZXMgYWxsIHF1ZXVlZApAQCAtMzIyLDcgKzMyMyw3IEBACiAJdCA9IG5ldGZzX3RyYW5zX2FsbG9jKHBzYiwgZXJyICsgMSwgMCwgMCk7CiAJaWYgKCF0KSB7CiAJCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX291dF9wdXQ7CisJCWdvdG8gZXJyX291dF9leGl0OwogCX0KIAl0LT5jb21wbGV0ZSA9IHBvaG1lbGZzX3dyaXRlX2lub2RlX2NvbXBsZXRlOwogCXQtPnByaXZhdGUgPSBpZ3JhYihpbm9kZSk7CkBAIC0zOTUsNyArMzk2LDggQEAKIC8qCiAgKiBXcml0ZWJhY2sgZm9yIGdpdmVuIGlub2RlLgogICovCi1zdGF0aWMgaW50IHBvaG1lbGZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBzeW5jKQorc3RhdGljIGludCBwb2htZWxmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewogCXN0cnVjdCBwb2htZWxmc19pbm9kZSAqcGkgPSBQT0hNRUxGU19JKGlub2RlKTsKIApAQCAtOTY5LDcgKzk3MSw3IEBACiAKIAlpZiAoKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9VSUQgJiYgYXR0ci0+aWFfdWlkICE9IGlub2RlLT5pX3VpZCkgfHwKIAkgICAgKGF0dHItPmlhX3ZhbGlkICYgQVRUUl9HSUQgJiYgYXR0ci0+aWFfZ2lkICE9IGlub2RlLT5pX2dpZCkpIHsKLQkJZXJyID0gdmZzX2RxX3RyYW5zZmVyKGlub2RlLCBhdHRyKSA/IC1FRFFVT1QgOiAwOworCQllcnIgPSBkcXVvdF90cmFuc2Zlcihpbm9kZSwgYXR0cik7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGVycl9vdXRfZXhpdDsKIAl9CkBAIC0xMzMxLDYgKzEzMzMsOCBAQAogCXBvaG1lbGZzX2NyeXB0b19leGl0KHBzYik7CiAJcG9obWVsZnNfc3RhdGVfZXhpdChwc2IpOwogCisJYmRpX2Rlc3Ryb3koJnBzYi0+YmRpKTsKKwogCWtmcmVlKHBzYik7CiAJc2ItPnNfZnNfaW5mbyA9IE5VTEw7CiB9CkBAIC0xNzY3LDggKzE3NzEsNyBAQAogCQlzZXFfcHJpbnRmKG0sICIldSAiLCBjdGwtPmlkeCk7CiAJCWlmIChjdGwtPmFkZHIuc2FfZmFtaWx5ID09IEFGX0lORVQpIHsKIAkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZzdC0+Y3RsLmFkZHI7Ci0JCQkvKiBzZXFfcHJpbnRmKG0sICIlcGk0OiV1IiwgJnNpbi0+c2luX2FkZHIuc19hZGRyLCBudG9ocyhzaW4tPnNpbl9wb3J0KSk7ICovCi0JCQlzZXFfcHJpbnRmKG0sICIldS4ldS4ldS4ldToldSIsIE5JUFFVQUQoc2luLT5zaW5fYWRkci5zX2FkZHIpLCBudG9ocyhzaW4tPnNpbl9wb3J0KSk7CisJCQlzZXFfcHJpbnRmKG0sICIlcEk0OiV1IiwgJnNpbi0+c2luX2FkZHIuc19hZGRyLCBudG9ocyhzaW4tPnNpbl9wb3J0KSk7CiAJCX0gZWxzZSBpZiAoY3RsLT5hZGRyLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgewogCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmc3QtPmN0bC5hZGRyOwogCQkJc2VxX3ByaW50ZihtLCAiJXBpNjoldSIsICZzaW4tPnNpbjZfYWRkciwgbnRvaHMoc2luLT5zaW42X3BvcnQpKTsKQEAgLTE4MTUsMTEgKzE4MTgsMjIgQEAKIAlpZiAoIXBzYikKIAkJZ290byBlcnJfb3V0X2V4aXQ7CiAKKwllcnIgPSBiZGlfaW5pdCgmcHNiLT5iZGkpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX291dF9mcmVlX3NiOworCisJZXJyID0gYmRpX3JlZ2lzdGVyKCZwc2ItPmJkaSwgTlVMTCwgInBmcy0lZCIsIGF0b21pY19pbmNfcmV0dXJuKCZwc2JfYmRpX251bSkpOworCWlmIChlcnIpIHsKKwkJYmRpX2Rlc3Ryb3koJnBzYi0+YmRpKTsKKwkJZ290byBlcnJfb3V0X2ZyZWVfc2I7CisJfQorCiAJc2ItPnNfZnNfaW5mbyA9IHBzYjsKIAlzYi0+c19vcCA9ICZwb2htZWxmc19zYl9vcHM7CiAJc2ItPnNfbWFnaWMgPSBQT0hNRUxGU19NQUdJQ19OVU07CiAJc2ItPnNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFOwogCXNiLT5zX2Jsb2Nrc2l6ZSA9IFBBR0VfU0laRTsKKwlzYi0+c19iZGkgPSAmcHNiLT5iZGk7CiAKIAlwc2ItPnNiID0gc2I7CiAKQEAgLTE4NjMsMTEgKzE4NzcsMTEgQEAKIAogCWVyciA9IHBvaG1lbGZzX3BhcnNlX29wdGlvbnMoKGNoYXIgKikgZGF0YSwgcHNiLCAwKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZnJlZV9zYjsKKwkJZ290byBlcnJfb3V0X2ZyZWVfYmRpOwogCiAJZXJyID0gcG9obWVsZnNfY29weV9jcnlwdG8ocHNiKTsKIAlpZiAoZXJyKQotCQlnb3RvIGVycl9vdXRfZnJlZV9zYjsKKwkJZ290byBlcnJfb3V0X2ZyZWVfYmRpOwogCiAJZXJyID0gcG9obWVsZnNfc3RhdGVfaW5pdChwc2IpOwogCWlmIChlcnIpCkBAIC0xOTE2LDYgKzE5MzAsOCBAQAogZXJyX291dF9mcmVlX3N0cmluZ3M6CiAJa2ZyZWUocHNiLT5jaXBoZXJfc3RyaW5nKTsKIAlrZnJlZShwc2ItPmhhc2hfc3RyaW5nKTsKK2Vycl9vdXRfZnJlZV9iZGk6CisJYmRpX2Rlc3Ryb3koJnBzYi0+YmRpKTsKIGVycl9vdXRfZnJlZV9zYjoKIAlrZnJlZShwc2IpOwogZXJyX291dF9leGl0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3BvaG1lbGZzL25ldGZzLmggYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbmV0ZnMuaAppbmRleCA2MjNhMDdkLi4wMWNiYTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbmV0ZnMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcG9obWVsZnMvbmV0ZnMuaApAQCAtMTgsNiArMTgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9jb25uZWN0b3IuaD4KKyNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogCiAjZGVmaW5lIFBPSE1FTEZTX0NOX0lEWAkJCTUKICNkZWZpbmUgUE9ITUVMRlNfQ05fVkFMCQkJMApAQCAtNjI0LDYgKzYyNSw4IEBACiAKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiOwogCisJc3RydWN0IGJhY2tpbmdfZGV2X2luZm8JYmRpOworCiAJLyoKIAkgKiBBbGdvcml0aG0gc3RyaW5ncy4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9xdWF0ZWNoX3VzYjIvcXVhdGVjaF91c2IyLmMgYi9kcml2ZXJzL3N0YWdpbmcvcXVhdGVjaF91c2IyL3F1YXRlY2hfdXNiMi5jCmluZGV4IGY3NzI2ZjEuLjE1NjFmNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9xdWF0ZWNoX3VzYjIvcXVhdGVjaF91c2IyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3F1YXRlY2hfdXNiMi9xdWF0ZWNoX3VzYjIuYwpAQCAtMTE2LDcgKzExNiw3IEBACiAjZGVmaW5lIEZPVVJUSENIQVIJKCh1bnNpZ25lZCBjaGFyICopKHVyYi0+dHJhbnNmZXJfYnVmZmVyKSlbaSArIDNdCiAjZGVmaW5lIEZJRlRIQ0hBUgkoKHVuc2lnbmVkIGNoYXIgKikodXJiLT50cmFuc2Zlcl9idWZmZXIpKVtpICsgNF0KIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHF1YXVzYjJfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBxdWF1c2IyX2lkX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBRVUFURUNIX1NTVTJfMTAwKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBRVUFURUNIX0RTVTJfMTAwKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBRVUFURUNIX0RTVTJfNDAwKX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9LY29uZmlnCmluZGV4IDI0ZTI1NjkuLjEyN2IzYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9LY29uZmlnCkBAIC01LDcgKzUsNyBAQAogCXNlbGVjdCBMWk9fREVDT01QUkVTUwogCWRlZmF1bHQgbgogCWhlbHAKLQkgIENyZWF0ZXMgdmlydHVhbCBibG9jayBkZXZpY2VzIHdoaWNoIGNhbiBiZSB1c2VkIChvbmx5KSBhcyBhIHN3YXAKKwkgIENyZWF0ZXMgdmlydHVhbCBibG9jayBkZXZpY2VzIHdoaWNoIGNhbiAob25seSkgYmUgdXNlZCBhcyBzd2FwCiAJICBkaXNrcy4gUGFnZXMgc3dhcHBlZCB0byB0aGVzZSBkaXNrcyBhcmUgY29tcHJlc3NlZCBhbmQgc3RvcmVkIGluCiAJICBtZW1vcnkgaXRzZWxmLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXAudHh0IGIvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwLnR4dAppbmRleCBlOWYxNjE5Li45Njk0YWNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXAudHh0CisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcC50eHQKQEAgLTUsOSArNSw5IEBACiAKICogSW50cm9kdWN0aW9uCiAKLUl0IGNyZWF0ZXMgUkFNIGJhc2VkIGJsb2NrIGRldmljZXMgd2hpY2ggY2FuIGJlIHVzZWQgKG9ubHkpIGFzIHN3YXAgZGlza3MuCi1QYWdlcyBzd2FwcGVkIHRvIHRoZXNlIGRldmljZXMgYXJlIGNvbXByZXNzZWQgYW5kIHN0b3JlZCBpbiBtZW1vcnkgaXRzZWxmLgotU2VlIHByb2plY3QgaG9tZSBmb3IgdXNlIGNhc2VzLCBwZXJmb3JtYW5jZSBudW1iZXJzIGFuZCBhIGxvdCBtb3JlLgorVGhlIHJhbXpzd2FwIG1vZHVsZSBjcmVhdGVzIFJBTSBiYXNlZCBibG9jayBkZXZpY2VzIHdoaWNoIGNhbiAob25seSkgYmUgdXNlZCBhcworc3dhcCBkaXNrcy4gUGFnZXMgc3dhcHBlZCB0byB0aGVzZSBkZXZpY2VzIGFyZSBjb21wcmVzc2VkIGFuZCBzdG9yZWQgaW4gbWVtb3J5CitpdHNlbGYuIFNlZSBwcm9qZWN0IGhvbWUgZm9yIHVzZSBjYXNlcywgcGVyZm9ybWFuY2UgbnVtYmVycyBhbmQgYSBsb3QgbW9yZS4KIAogSW5kaXZpZHVhbCByYW16c3dhcCBkZXZpY2VzIGFyZSBjb25maWd1cmVkIGFuZCBpbml0aWFsaXplZCB1c2luZyByenNjb250cm9sCiB1c2Vyc3BhY2UgdXRpbGl0eSBhcyBzaG93biBpbiBleGFtcGxlcyBiZWxvdy4gU2VlIHJ6c2NvbnRyb2wgbWFuIHBhZ2UgZm9yIG1vcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9kcnYuYyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9kcnYuYwppbmRleCA5ODlmYWM1Li41ZTQyMmUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXBfZHJ2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwX2Rydi5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvbXByZXNzZWQgUkFNIGJhc2VkIHN3YXAgZGV2aWNlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBOaXRpbiBHdXB0YQorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwICBOaXRpbiBHdXB0YQogICoKICAqIFRoaXMgY29kZSBpcyByZWxlYXNlZCB1c2luZyBhIGR1YWwgbGljZW5zZSBzdHJhdGVneTogQlNEL0dQTAogICogWW91IGNhbiBjaG9vc2UgdGhlIGxpY2VuY2UgdGhhdCBiZXR0ZXIgZml0cyB5b3VyIHJlcXVpcmVtZW50cy4KQEAgLTI0LDEyICsyNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2dlbmhkLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2x6by5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc3dhcC5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXBvcHMuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCiAjaW5jbHVkZSAicmFtenN3YXBfZHJ2LmgiCiAKQEAgLTIyMiw3ICsyMjAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXZvaWQgcmFtenN3YXBfaW9jdGxfZ2V0X3N0YXRzKHN0cnVjdCByYW16c3dhcCAqcnpzLAorc3RhdGljIHZvaWQgcmFtenN3YXBfaW9jdGxfZ2V0X3N0YXRzKHN0cnVjdCByYW16c3dhcCAqcnpzLAogCQkJc3RydWN0IHJhbXpzd2FwX2lvY3RsX3N0YXRzICpzKQogewogCXN0cm5jcHkocy0+YmFja2luZ19zd2FwX25hbWUsIHJ6cy0+YmFja2luZ19zd2FwX25hbWUsCkBAIC0yNDAsNyArMjM4LDggQEAKIAogCW1lbV91c2VkID0geHZfZ2V0X3RvdGFsX3NpemVfYnl0ZXMocnpzLT5tZW1fcG9vbCkKIAkJCSsgKHJzLT5wYWdlc19leHBhbmQgPDwgUEFHRV9TSElGVCk7Ci0Jc3VjY193cml0ZXMgPSBycy0+bnVtX3dyaXRlcyAtIHJzLT5mYWlsZWRfd3JpdGVzOworCXN1Y2Nfd3JpdGVzID0gcnpzX3N0YXQ2NF9yZWFkKHJ6cywgJnJzLT5udW1fd3JpdGVzKSAtCisJCQlyenNfc3RhdDY0X3JlYWQocnpzLCAmcnMtPmZhaWxlZF93cml0ZXMpOwogCiAJaWYgKHN1Y2Nfd3JpdGVzICYmIHJzLT5wYWdlc19zdG9yZWQpIHsKIAkJZ29vZF9jb21wcmVzc19wZXJjID0gcnMtPmdvb2RfY29tcHJlc3MgKiAxMDAKQEAgLTI0OSwxMSArMjQ4LDEyIEBACiAJCQkJCS8gcnMtPnBhZ2VzX3N0b3JlZDsKIAl9CiAKLQlzLT5udW1fcmVhZHMgPSBycy0+bnVtX3JlYWRzOwotCXMtPm51bV93cml0ZXMgPSBycy0+bnVtX3dyaXRlczsKLQlzLT5mYWlsZWRfcmVhZHMgPSBycy0+ZmFpbGVkX3JlYWRzOwotCXMtPmZhaWxlZF93cml0ZXMgPSBycy0+ZmFpbGVkX3dyaXRlczsKLQlzLT5pbnZhbGlkX2lvID0gcnMtPmludmFsaWRfaW87CisJcy0+bnVtX3JlYWRzID0gcnpzX3N0YXQ2NF9yZWFkKHJ6cywgJnJzLT5udW1fcmVhZHMpOworCXMtPm51bV93cml0ZXMgPSByenNfc3RhdDY0X3JlYWQocnpzLCAmcnMtPm51bV93cml0ZXMpOworCXMtPmZhaWxlZF9yZWFkcyA9IHJ6c19zdGF0NjRfcmVhZChyenMsICZycy0+ZmFpbGVkX3JlYWRzKTsKKwlzLT5mYWlsZWRfd3JpdGVzID0gcnpzX3N0YXQ2NF9yZWFkKHJ6cywgJnJzLT5mYWlsZWRfd3JpdGVzKTsKKwlzLT5pbnZhbGlkX2lvID0gcnpzX3N0YXQ2NF9yZWFkKHJ6cywgJnJzLT5pbnZhbGlkX2lvKTsKKwlzLT5ub3RpZnlfZnJlZSA9IHJ6c19zdGF0NjRfcmVhZChyenMsICZycy0+bm90aWZ5X2ZyZWUpOwogCXMtPnBhZ2VzX3plcm8gPSBycy0+cGFnZXNfemVybzsKIAogCXMtPmdvb2RfY29tcHJlc3NfcGN0ID0gZ29vZF9jb21wcmVzc19wZXJjOwpAQCAtMjY1LDggKzI2NSw4IEBACiAJcy0+Y29tcHJfZGF0YV9zaXplID0gcnMtPmNvbXByX3NpemU7CiAJcy0+bWVtX3VzZWRfdG90YWwgPSBtZW1fdXNlZDsKIAotCXMtPmJkZXZfbnVtX3JlYWRzID0gcnMtPmJkZXZfbnVtX3JlYWRzOwotCXMtPmJkZXZfbnVtX3dyaXRlcyA9IHJzLT5iZGV2X251bV93cml0ZXM7CisJcy0+YmRldl9udW1fcmVhZHMgPSByenNfc3RhdDY0X3JlYWQocnpzLCAmcnMtPmJkZXZfbnVtX3JlYWRzKTsKKwlzLT5iZGV2X251bV93cml0ZXMgPSByenNfc3RhdDY0X3JlYWQocnpzLCAmcnMtPmJkZXZfbnVtX3dyaXRlcyk7CiAJfQogI2VuZGlmIC8qIENPTkZJR19SQU1aU1dBUF9TVEFUUyAqLwogfQpAQCAtNTAyLDYgKzUwMiwxNCBAQAogCQkJZ290byBiYWRfcGFyYW07CiAJCX0KIAkJZGlza3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7CisJCS8qCisJCSAqIENhbiBoYXBwZW4gaWYgdXNlciBnaXZlcyBhbiBleHRlbmRlZCBwYXJ0aXRpb24gYXMKKwkJICogYmFja2luZyBzd2FwIG9yIHNpbXBseSBhIGJhZCBkaXNrLgorCQkgKi8KKwkJaWYgKCFkaXNrc2l6ZSkgeworCQkJcHJfZXJyKCJFcnJvciByZWFkaW5nIGJhY2tpbmcgc3dhcCBzaXplLlxuIik7CisJCQlnb3RvIGJhZF9wYXJhbTsKKwkJfQogCX0gZWxzZSBpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewogCQliZGV2ID0gaW5vZGUtPmlfc2ItPnNfYmRldjsKIAkJaWYgKElTX1NXQVBGSUxFKGlub2RlKSkgewpAQCAtNTE5LDcgKzUyNyw2IEBACiAJcnpzLT5zd2FwX2ZpbGUgPSBzd2FwX2ZpbGU7CiAJcnpzLT5iYWNraW5nX3N3YXAgPSBiZGV2OwogCXJ6cy0+ZGlza3NpemUgPSBkaXNrc2l6ZTsKLQlCVUdfT04oIXJ6cy0+ZGlza3NpemUpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTUzNyw3ICs1NDQsNyBAQAogICogTWFwIGxvZ2ljYWwgcGFnZSBudW1iZXIgJ3BhZ2VudW0nIHRvIHBoeXNpY2FsIHBhZ2UgbnVtYmVyCiAgKiBvbiBiYWNraW5nIHN3YXAgZGV2aWNlLiBGb3IgYmxvY2sgZGV2aWNlLCB0aGlzIGlzIGEgbm9wLgogICovCi11MzIgbWFwX2JhY2tpbmdfc3dhcF9wYWdlKHN0cnVjdCByYW16c3dhcCAqcnpzLCB1MzIgcGFnZW51bSkKK3N0YXRpYyB1MzIgbWFwX2JhY2tpbmdfc3dhcF9wYWdlKHN0cnVjdCByYW16c3dhcCAqcnpzLCB1MzIgcGFnZW51bSkKIHsKIAl1MzIgc2tpcF9wYWdlcywgZW50cmllc19wZXJfcGFnZTsKIAlzaXplX3QgZGVsdGEsIHNlX29mZnNldCwgc2tpcHBlZDsKQEAgLTU5Myw5ICs2MDAsMTMgQEAKIAl1MzIgb2Zmc2V0ID0gcnpzLT50YWJsZVtpbmRleF0ub2Zmc2V0OwogCiAJaWYgKHVubGlrZWx5KCFwYWdlKSkgeworCQkvKgorCQkgKiBObyBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciB6ZXJvIGZpbGxlZCBwYWdlcy4KKwkJICogU2ltcGx5IGNsZWFyIHplcm8gcGFnZSBmbGFnLgorCQkgKi8KIAkJaWYgKHJ6c190ZXN0X2ZsYWcocnpzLCBpbmRleCwgUlpTX1pFUk8pKSB7CiAJCQlyenNfY2xlYXJfZmxhZyhyenMsIGluZGV4LCBSWlNfWkVSTyk7Ci0JCQlzdGF0X2RlYyhyenMtPnN0YXRzLnBhZ2VzX3plcm8pOworCQkJcnpzX3N0YXRfZGVjKCZyenMtPnN0YXRzLnBhZ2VzX3plcm8pOwogCQl9CiAJCXJldHVybjsKIAl9CkBAIC02MDQsNyArNjE1LDcgQEAKIAkJY2xlbiA9IFBBR0VfU0laRTsKIAkJX19mcmVlX3BhZ2UocGFnZSk7CiAJCXJ6c19jbGVhcl9mbGFnKHJ6cywgaW5kZXgsIFJaU19VTkNPTVBSRVNTRUQpOwotCQlzdGF0X2RlYyhyenMtPnN0YXRzLnBhZ2VzX2V4cGFuZCk7CisJCXJ6c19zdGF0X2RlYygmcnpzLT5zdGF0cy5wYWdlc19leHBhbmQpOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTYxNCwxMSArNjI1LDExIEBACiAKIAl4dl9mcmVlKHJ6cy0+bWVtX3Bvb2wsIHBhZ2UsIG9mZnNldCk7CiAJaWYgKGNsZW4gPD0gUEFHRV9TSVpFIC8gMikKLQkJc3RhdF9kZWMocnpzLT5zdGF0cy5nb29kX2NvbXByZXNzKTsKKwkJcnpzX3N0YXRfZGVjKCZyenMtPnN0YXRzLmdvb2RfY29tcHJlc3MpOwogCiBvdXQ6CiAJcnpzLT5zdGF0cy5jb21wcl9zaXplIC09IGNsZW47Ci0Jc3RhdF9kZWMocnpzLT5zdGF0cy5wYWdlc19zdG9yZWQpOworCXJ6c19zdGF0X2RlYygmcnpzLT5zdGF0cy5wYWdlc19zdG9yZWQpOwogCiAJcnpzLT50YWJsZVtpbmRleF0ucGFnZSA9IE5VTEw7CiAJcnpzLT50YWJsZVtpbmRleF0ub2Zmc2V0ID0gMDsKQEAgLTY2NCw3ICs2NzUsNiBAQAogCXJldHVybiAwOwogfQogCi0KIC8qCiAgKiBDYWxsZWQgd2hlbiByZXF1ZXN0IHBhZ2UgaXMgbm90IHByZXNlbnQgaW4gcmFtenN3YXAuCiAgKiBJdHMgZWl0aGVyIGluIGJhY2tpbmcgc3dhcCBkZXZpY2UgKGlmIHByZXNlbnQpIG9yCkBAIC02ODAsOCArNjkwLDggQEAKIAkgKi8KIAlpZiAocnpzLT5iYWNraW5nX3N3YXApIHsKIAkJdTMyIHBhZ2VudW07Ci0JCXN0YXRfZGVjKHJ6cy0+c3RhdHMubnVtX3JlYWRzKTsKLQkJc3RhdF9pbmMocnpzLT5zdGF0cy5iZGV2X251bV9yZWFkcyk7CisJCXJ6c19zdGF0NjRfZGVjKHJ6cywgJnJ6cy0+c3RhdHMubnVtX3JlYWRzKTsKKwkJcnpzX3N0YXQ2NF9pbmMocnpzLCAmcnpzLT5zdGF0cy5iZGV2X251bV9yZWFkcyk7CiAJCWJpby0+YmlfYmRldiA9IHJ6cy0+YmFja2luZ19zd2FwOwogCiAJCS8qCkBAIC03MTksNyArNzI5LDcgQEAKIAlzdHJ1Y3Qgem9ial9oZWFkZXIgKnpoZWFkZXI7CiAJdW5zaWduZWQgY2hhciAqdXNlcl9tZW0sICpjbWVtOwogCi0Jc3RhdF9pbmMocnpzLT5zdGF0cy5udW1fcmVhZHMpOworCXJ6c19zdGF0NjRfaW5jKHJ6cywgJnJ6cy0+c3RhdHMubnVtX3JlYWRzKTsKIAogCXBhZ2UgPSBiaW8tPmJpX2lvX3ZlY1swXS5idl9wYWdlOwogCWluZGV4ID0gYmlvLT5iaV9zZWN0b3IgPj4gU0VDVE9SU19QRVJfUEFHRV9TSElGVDsKQEAgLTczMSw3ICs3NDEsNyBAQAogCWlmICghcnpzLT50YWJsZVtpbmRleF0ucGFnZSkKIAkJcmV0dXJuIGhhbmRsZV9yYW16c3dhcF9mYXVsdChyenMsIGJpbyk7CiAKLQkvKiBQYWdlIGlzIHN0b3JlZCB1bmNvbXByZXNzZWQgc2luY2UgaXRzIGluY29tcHJlc3NpYmxlICovCisJLyogUGFnZSBpcyBzdG9yZWQgdW5jb21wcmVzc2VkIHNpbmNlIGl0J3MgaW5jb21wcmVzc2libGUgKi8KIAlpZiAodW5saWtlbHkocnpzX3Rlc3RfZmxhZyhyenMsIGluZGV4LCBSWlNfVU5DT01QUkVTU0VEKSkpCiAJCXJldHVybiBoYW5kbGVfdW5jb21wcmVzc2VkX3BhZ2UocnpzLCBiaW8pOwogCkBAIC03NTMsNyArNzYzLDcgQEAKIAlpZiAodW5saWtlbHkocmV0ICE9IExaT19FX09LKSkgewogCQlwcl9lcnIoIkRlY29tcHJlc3Npb24gZmFpbGVkISBlcnI9JWQsIHBhZ2U9JXVcbiIsCiAJCQlyZXQsIGluZGV4KTsKLQkJc3RhdF9pbmMocnpzLT5zdGF0cy5mYWlsZWRfcmVhZHMpOworCQlyenNfc3RhdDY0X2luYyhyenMsICZyenMtPnN0YXRzLmZhaWxlZF9yZWFkcyk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtNzc3LDcgKzc4Nyw3IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2UsICpwYWdlX3N0b3JlOwogCXVuc2lnbmVkIGNoYXIgKnVzZXJfbWVtLCAqY21lbSwgKnNyYzsKIAotCXN0YXRfaW5jKHJ6cy0+c3RhdHMubnVtX3dyaXRlcyk7CisJcnpzX3N0YXQ2NF9pbmMocnpzLCAmcnpzLT5zdGF0cy5udW1fd3JpdGVzKTsKIAogCXBhZ2UgPSBiaW8tPmJpX2lvX3ZlY1swXS5idl9wYWdlOwogCWluZGV4ID0gYmlvLT5iaV9zZWN0b3IgPj4gU0VDVE9SU19QRVJfUEFHRV9TSElGVDsKQEAgLTc4OSwyNSArNzk5LDE2IEBACiAJICogaXMgbm8gbG9uZ2VyIHJlZmVyZW5jZWQgYnkgYW55IHByb2Nlc3MuIFNvLCBpdHMgbm93IHNhZmUKIAkgKiB0byBmcmVlIHRoZSBtZW1vcnkgdGhhdCB3YXMgYWxsb2NhdGVkIGZvciB0aGlzIHBhZ2UuCiAJICovCi0JaWYgKHJ6cy0+dGFibGVbaW5kZXhdLnBhZ2UpCisJaWYgKHJ6cy0+dGFibGVbaW5kZXhdLnBhZ2UgfHwgcnpzX3Rlc3RfZmxhZyhyenMsIGluZGV4LCBSWlNfWkVSTykpCiAJCXJhbXpzd2FwX2ZyZWVfcGFnZShyenMsIGluZGV4KTsKIAotCS8qCi0JICogTm8gbWVtb3J5IGlhIGFsbG9jYXRlZCBmb3IgemVybyBmaWxsZWQgcGFnZXMuCi0JICogU2ltcGx5IGNsZWFyIHplcm8gcGFnZSBmbGFnLgotCSAqLwotCWlmIChyenNfdGVzdF9mbGFnKHJ6cywgaW5kZXgsIFJaU19aRVJPKSkgewotCQlzdGF0X2RlYyhyenMtPnN0YXRzLnBhZ2VzX3plcm8pOwotCQlyenNfY2xlYXJfZmxhZyhyenMsIGluZGV4LCBSWlNfWkVSTyk7Ci0JfQotCiAJbXV0ZXhfbG9jaygmcnpzLT5sb2NrKTsKIAogCXVzZXJfbWVtID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwogCWlmIChwYWdlX3plcm9fZmlsbGVkKHVzZXJfbWVtKSkgewogCQlrdW5tYXBfYXRvbWljKHVzZXJfbWVtLCBLTV9VU0VSMCk7CiAJCW11dGV4X3VubG9jaygmcnpzLT5sb2NrKTsKLQkJc3RhdF9pbmMocnpzLT5zdGF0cy5wYWdlc196ZXJvKTsKKwkJcnpzX3N0YXRfaW5jKCZyenMtPnN0YXRzLnBhZ2VzX3plcm8pOwogCQlyenNfc2V0X2ZsYWcocnpzLCBpbmRleCwgUlpTX1pFUk8pOwogCiAJCXNldF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncyk7CkBAIC04MzEsNyArODMyLDcgQEAKIAlpZiAodW5saWtlbHkocmV0ICE9IExaT19FX09LKSkgewogCQltdXRleF91bmxvY2soJnJ6cy0+bG9jayk7CiAJCXByX2VycigiQ29tcHJlc3Npb24gZmFpbGVkISBlcnI9JWRcbiIsIHJldCk7Ci0JCXN0YXRfaW5jKHJ6cy0+c3RhdHMuZmFpbGVkX3dyaXRlcyk7CisJCXJ6c19zdGF0NjRfaW5jKHJ6cywgJnJ6cy0+c3RhdHMuZmFpbGVkX3dyaXRlcyk7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtODU0LDEzICs4NTUsMTMgQEAKIAkJCW11dGV4X3VubG9jaygmcnpzLT5sb2NrKTsKIAkJCXByX2luZm8oIkVycm9yIGFsbG9jYXRpbmcgbWVtb3J5IGZvciBpbmNvbXByZXNzaWJsZSAiCiAJCQkJInBhZ2U6ICV1XG4iLCBpbmRleCk7Ci0JCQlzdGF0X2luYyhyenMtPnN0YXRzLmZhaWxlZF93cml0ZXMpOworCQkJcnpzX3N0YXQ2NF9pbmMocnpzLCAmcnpzLT5zdGF0cy5mYWlsZWRfd3JpdGVzKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAKIAkJb2Zmc2V0ID0gMDsKIAkJcnpzX3NldF9mbGFnKHJ6cywgaW5kZXgsIFJaU19VTkNPTVBSRVNTRUQpOwotCQlzdGF0X2luYyhyenMtPnN0YXRzLnBhZ2VzX2V4cGFuZCk7CisJCXJ6c19zdGF0X2luYygmcnpzLT5zdGF0cy5wYWdlc19leHBhbmQpOwogCQlyenMtPnRhYmxlW2luZGV4XS5wYWdlID0gcGFnZV9zdG9yZTsKIAkJc3JjID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwogCQlnb3RvIG1lbXN0b3JlOwpAQCAtODcyLDcgKzg3Myw3IEBACiAJCW11dGV4X3VubG9jaygmcnpzLT5sb2NrKTsKIAkJcHJfaW5mbygiRXJyb3IgYWxsb2NhdGluZyBtZW1vcnkgZm9yIGNvbXByZXNzZWQgIgogCQkJInBhZ2U6ICV1LCBzaXplPSV6dVxuIiwgaW5kZXgsIGNsZW4pOwotCQlzdGF0X2luYyhyenMtPnN0YXRzLmZhaWxlZF93cml0ZXMpOworCQlyenNfc3RhdDY0X2luYyhyenMsICZyenMtPnN0YXRzLmZhaWxlZF93cml0ZXMpOwogCQlpZiAocnpzLT5iYWNraW5nX3N3YXApCiAJCQlmd2Rfd3JpdGVfcmVxdWVzdCA9IDE7CiAJCWdvdG8gb3V0OwpAQCAtOTAxLDkgKzkwMiw5IEBACiAKIAkvKiBVcGRhdGUgc3RhdHMgKi8KIAlyenMtPnN0YXRzLmNvbXByX3NpemUgKz0gY2xlbjsKLQlzdGF0X2luYyhyenMtPnN0YXRzLnBhZ2VzX3N0b3JlZCk7CisJcnpzX3N0YXRfaW5jKCZyenMtPnN0YXRzLnBhZ2VzX3N0b3JlZCk7CiAJaWYgKGNsZW4gPD0gUEFHRV9TSVpFIC8gMikKLQkJc3RhdF9pbmMocnpzLT5zdGF0cy5nb29kX2NvbXByZXNzKTsKKwkJcnpzX3N0YXRfaW5jKCZyenMtPnN0YXRzLmdvb2RfY29tcHJlc3MpOwogCiAJbXV0ZXhfdW5sb2NrKCZyenMtPmxvY2spOwogCkBAIC05MTMsNyArOTE0LDcgQEAKIAogb3V0OgogCWlmIChmd2Rfd3JpdGVfcmVxdWVzdCkgewotCQlzdGF0X2luYyhyenMtPnN0YXRzLmJkZXZfbnVtX3dyaXRlcyk7CisJCXJ6c19zdGF0NjRfaW5jKHJ6cywgJnJ6cy0+c3RhdHMuYmRldl9udW1fd3JpdGVzKTsKIAkJYmlvLT5iaV9iZGV2ID0gcnpzLT5iYWNraW5nX3N3YXA7CiAjaWYgMAogCQkvKgpAQCAtOTQxLDcgKzk0Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogLyoKICAqIENoZWNrIGlmIHJlcXVlc3QgaXMgd2l0aGluIGJvdW5kcyBhbmQgcGFnZSBhbGlnbmVkLgogICovCkBAIC05NzUsNyArOTc1LDcgQEAKIAl9CiAKIAlpZiAoIXZhbGlkX3N3YXBfcmVxdWVzdChyenMsIGJpbykpIHsKLQkJc3RhdF9pbmMocnpzLT5zdGF0cy5pbnZhbGlkX2lvKTsKKwkJcnpzX3N0YXQ2NF9pbmMocnpzLCAmcnpzLT5zdGF0cy5pbnZhbGlkX2lvKTsKIAkJYmlvX2lvX2Vycm9yKGJpbyk7CiAJCXJldHVybiAwOwogCX0KQEAgLTEwMDAsNiArMTAwMCw5IEBACiAJdW5zaWduZWQgZW50cmllc19wZXJfcGFnZTsKIAl1bnNpZ25lZCBsb25nIG51bV90YWJsZV9wYWdlcywgZW50cnkgPSAwOwogCisJLyogRG8gbm90IGFjY2VwdCBhbnkgbmV3IEkvTyByZXF1ZXN0ICovCisJcnpzLT5pbml0X2RvbmUgPSAwOworCiAJaWYgKHJ6cy0+YmFja2luZ19zd2FwICYmICFyenMtPm51bV9leHRlbnRzKQogCQlpc19iYWNraW5nX2Jsa2RldiA9IDE7CiAKQEAgLTEwNjYsNiArMTA2OSw3IEBACiAJCQliZF9yZWxlYXNlKHJ6cy0+YmFja2luZ19zd2FwKTsKIAkJZmlscF9jbG9zZShyenMtPnN3YXBfZmlsZSwgTlVMTCk7CiAJCXJ6cy0+YmFja2luZ19zd2FwID0gTlVMTDsKKwkJbWVtc2V0KHJ6cy0+YmFja2luZ19zd2FwX25hbWUsIDAsIE1BWF9TV0FQX05BTUVfTEVOKTsKIAl9CiAKIAkvKiBSZXNldCBzdGF0cyAqLwpAQCAtMTA3Myw5ICsxMDc3LDYgQEAKIAogCXJ6cy0+ZGlza3NpemUgPSAwOwogCXJ6cy0+bWVtbGltaXQgPSAwOwotCi0JLyogQmFjayB0byB1bmluaXRpYWxpemVkIHN0YXRlICovCi0JcnpzLT5pbml0X2RvbmUgPSAwOwogfQogCiBzdGF0aWMgaW50IHJhbXpzd2FwX2lvY3RsX2luaXRfZGV2aWNlKHN0cnVjdCByYW16c3dhcCAqcnpzKQpAQCAtMTI3Niw2ICsxMjc3LDExIEBACiAJCQlyZXQgPSAtRUJVU1k7CiAJCQlnb3RvIG91dDsKIAkJfQorCisJCS8qIE1ha2Ugc3VyZSBhbGwgcGVuZGluZyBJL08gaXMgZmluaXNoZWQgKi8KKwkJaWYgKGJkZXYpCisJCQlmc3luY19iZGV2KGJkZXYpOworCiAJCXJldCA9IHJhbXpzd2FwX2lvY3RsX3Jlc2V0X2RldmljZShyenMpOwogCQlicmVhazsKIApAQCAtMTI5MywxNiArMTI5OSwyMCBAQAogCS5vd25lciA9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIHZvaWQgY3JlYXRlX2RldmljZShzdHJ1Y3QgcmFtenN3YXAgKnJ6cywgaW50IGRldmljZV9pZCkKK3N0YXRpYyBpbnQgY3JlYXRlX2RldmljZShzdHJ1Y3QgcmFtenN3YXAgKnJ6cywgaW50IGRldmljZV9pZCkKIHsKKwlpbnQgcmV0ID0gMDsKKwogCW11dGV4X2luaXQoJnJ6cy0+bG9jayk7CisJc3Bpbl9sb2NrX2luaXQoJnJ6cy0+c3RhdDY0X2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZyenMtPmJhY2tpbmdfc3dhcF9leHRlbnRfbGlzdCk7CiAKIAlyenMtPnF1ZXVlID0gYmxrX2FsbG9jX3F1ZXVlKEdGUF9LRVJORUwpOwogCWlmICghcnpzLT5xdWV1ZSkgewogCQlwcl9lcnIoIkVycm9yIGFsbG9jYXRpbmcgZGlzayBxdWV1ZSBmb3IgZGV2aWNlICVkXG4iLAogCQkJZGV2aWNlX2lkKTsKLQkJcmV0dXJuOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKIAl9CiAKIAlibGtfcXVldWVfbWFrZV9yZXF1ZXN0KHJ6cy0+cXVldWUsIHJhbXpzd2FwX21ha2VfcmVxdWVzdCk7CkBAIC0xMzE0LDcgKzEzMjQsOCBAQAogCQlibGtfY2xlYW51cF9xdWV1ZShyenMtPnF1ZXVlKTsKIAkJcHJfd2FybmluZygiRXJyb3IgYWxsb2NhdGluZyBkaXNrIHN0cnVjdHVyZSBmb3IgZGV2aWNlICVkXG4iLAogCQkJZGV2aWNlX2lkKTsKLQkJcmV0dXJuOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKIAl9CiAKIAlyenMtPmRpc2stPm1ham9yID0gcmFtenN3YXBfbWFqb3I7CkBAIC0xMzI5LDkgKzEzNDAsMTYgQEAKIAkgKiBvciBzZXQgZXF1YWwgdG8gYmFja2luZyBzd2FwIGRldmljZSAoaWYgcHJvdmlkZWQpCiAJICovCiAJc2V0X2NhcGFjaXR5KHJ6cy0+ZGlzaywgMCk7CisKKwlibGtfcXVldWVfcGh5c2ljYWxfYmxvY2tfc2l6ZShyenMtPmRpc2stPnF1ZXVlLCBQQUdFX1NJWkUpOworCWJsa19xdWV1ZV9sb2dpY2FsX2Jsb2NrX3NpemUocnpzLT5kaXNrLT5xdWV1ZSwgUEFHRV9TSVpFKTsKKwogCWFkZF9kaXNrKHJ6cy0+ZGlzayk7CiAKIAlyenMtPmluaXRfZG9uZSA9IDA7CisKK291dDoKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBkZXN0cm95X2RldmljZShzdHJ1Y3QgcmFtenN3YXAgKnJ6cykKQEAgLTEzNDcsMTggKzEzNjUsMjAgQEAKIAogc3RhdGljIGludCBfX2luaXQgcmFtenN3YXBfaW5pdCh2b2lkKQogewotCWludCBpLCByZXQ7CisJaW50IHJldCwgZGV2X2lkOwogCiAJaWYgKG51bV9kZXZpY2VzID4gbWF4X251bV9kZXZpY2VzKSB7CiAJCXByX3dhcm5pbmcoIkludmFsaWQgdmFsdWUgZm9yIG51bV9kZXZpY2VzOiAldVxuIiwKIAkJCQludW1fZGV2aWNlcyk7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKIAl9CiAKIAlyYW16c3dhcF9tYWpvciA9IHJlZ2lzdGVyX2Jsa2RldigwLCAicmFtenN3YXAiKTsKIAlpZiAocmFtenN3YXBfbWFqb3IgPD0gMCkgewogCQlwcl93YXJuaW5nKCJVbmFibGUgdG8gZ2V0IG1ham9yIG51bWJlclxuIik7Ci0JCXJldHVybiAtRUJVU1k7CisJCXJldCA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CiAJfQogCiAJaWYgKCFudW1fZGV2aWNlcykgewpAQCAtMTM3MSwxNSArMTM5MSwyMyBAQAogCWRldmljZXMgPSBremFsbG9jKG51bV9kZXZpY2VzICogc2l6ZW9mKHN0cnVjdCByYW16c3dhcCksIEdGUF9LRVJORUwpOwogCWlmICghZGV2aWNlcykgewogCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIG91dDsKKwkJZ290byB1bnJlZ2lzdGVyOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBudW1fZGV2aWNlczsgaSsrKQotCQljcmVhdGVfZGV2aWNlKCZkZXZpY2VzW2ldLCBpKTsKKwlmb3IgKGRldl9pZCA9IDA7IGRldl9pZCA8IG51bV9kZXZpY2VzOyBkZXZfaWQrKykgeworCQlyZXQgPSBjcmVhdGVfZGV2aWNlKCZkZXZpY2VzW2Rldl9pZF0sIGRldl9pZCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZyZWVfZGV2aWNlczsKKwl9CiAKIAlyZXR1cm4gMDsKLW91dDoKKworZnJlZV9kZXZpY2VzOgorCXdoaWxlIChkZXZfaWQpCisJCWRlc3Ryb3lfZGV2aWNlKCZkZXZpY2VzWy0tZGV2X2lkXSk7Cit1bnJlZ2lzdGVyOgogCXVucmVnaXN0ZXJfYmxrZGV2KHJhbXpzd2FwX21ham9yLCAicmFtenN3YXAiKTsKK291dDoKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXBfZHJ2LmggYi9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXBfZHJ2LmgKaW5kZXggYTZlYTI0MC4uYzdlMGU3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3JhbXpzd2FwX2Rydi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9kcnYuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb21wcmVzc2VkIFJBTSBiYXNlZCBzd2FwIGRldmljZQogICoKLSAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSAgTml0aW4gR3VwdGEKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSwgMjAxMCAgTml0aW4gR3VwdGEKICAqCiAgKiBUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdXNpbmcgYSBkdWFsIGxpY2Vuc2Ugc3RyYXRlZ3k6IEJTRC9HUEwKICAqIFlvdSBjYW4gY2hvb3NlIHRoZSBsaWNlbmNlIHRoYXQgYmV0dGVyIGZpdHMgeW91ciByZXF1aXJlbWVudHMuCkBAIC0xNSw2ICsxNSw5IEBACiAjaWZuZGVmIF9SQU1aU1dBUF9EUlZfSF8KICNkZWZpbmUgX1JBTVpTV0FQX0RSVl9IXwogCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCiAjaW5jbHVkZSAicmFtenN3YXBfaW9jdGwuaCIKICNpbmNsdWRlICJ4dm1hbGxvYy5oIgogCkBAIC03MSwxNSArNzQsNiBAQAogI2RlZmluZSBTRUNUT1JTX1BFUl9QQUdFX1NISUZUCShQQUdFX1NISUZUIC0gU0VDVE9SX1NISUZUKQogI2RlZmluZSBTRUNUT1JTX1BFUl9QQUdFCSgxIDw8IFNFQ1RPUlNfUEVSX1BBR0VfU0hJRlQpCiAKLS8qIERlYnVnZ2luZyBhbmQgU3RhdHMgKi8KLSNpZiBkZWZpbmVkKENPTkZJR19SQU1aU1dBUF9TVEFUUykKLSNkZWZpbmUgc3RhdF9pbmMoc3RhdCkJKChzdGF0KSsrKQotI2RlZmluZSBzdGF0X2RlYyhzdGF0KQkoKHN0YXQpLS0pCi0jZWxzZQotI2RlZmluZSBzdGF0X2luYyh4KQotI2RlZmluZSBzdGF0X2RlYyh4KQotI2VuZGlmCi0KIC8qIEZsYWdzIGZvciByYW16c3dhcCBwYWdlcyAodGFibGVbcGFnZV9ub10uZmxhZ3MpICovCiBlbnVtIHJ6c19wYWdlZmxhZ3MgewogCS8qIFBhZ2UgaXMgc3RvcmVkIHVuY29tcHJlc3NlZCAqLwpAQCAtMTAyLDcgKzk2LDcgQEAKIAl1MTYgb2Zmc2V0OwogCXU4IGNvdW50OwkvKiBvYmplY3QgcmVmIGNvdW50IChub3QgeWV0IHVzZWQpICovCiAJdTggZmxhZ3M7Ci19IF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKTs7Cit9IF9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKTsKIAogLyoKICAqIFN3YXAgZXh0ZW50IGluZm9ybWF0aW9uIGluIGNhc2UgYmFja2luZyBzd2FwIGlzIGEgcmVndWxhcgpAQCAtMTIxLDkgKzExNSwxMCBAQAogI2lmIGRlZmluZWQoQ09ORklHX1JBTVpTV0FQX1NUQVRTKQogCXU2NCBudW1fcmVhZHM7CQkvKiBmYWlsZWQgKyBzdWNjZXNzZnVsICovCiAJdTY0IG51bV93cml0ZXM7CQkvKiAtLWRvLS0gKi8KLQl1NjQgZmFpbGVkX3JlYWRzOwkvKiBjYW4gaGFwcGVuIHdoZW4gbWVtb3J5IGlzIHRvbyBsb3cgKi8KLQl1NjQgZmFpbGVkX3dyaXRlczsJLyogc2hvdWxkIE5FVkVSISBoYXBwZW4gKi8KKwl1NjQgZmFpbGVkX3JlYWRzOwkvKiBzaG91bGQgTkVWRVIhIGhhcHBlbiAqLworCXU2NCBmYWlsZWRfd3JpdGVzOwkvKiBjYW4gaGFwcGVuIHdoZW4gbWVtb3J5IGlzIHRvbyBsb3cgKi8KIAl1NjQgaW52YWxpZF9pbzsJCS8qIG5vbi1zd2FwIEkvTyByZXF1ZXN0cyAqLworCXU2NCBub3RpZnlfZnJlZTsJLyogbm8uIG9mIHN3YXAgc2xvdCBmcmVlIG5vdGlmaWNhdGlvbnMgKi8KIAl1MzIgcGFnZXNfemVybzsJCS8qIG5vLiBvZiB6ZXJvIGZpbGxlZCBwYWdlcyAqLwogCXUzMiBwYWdlc19zdG9yZWQ7CS8qIG5vLiBvZiBwYWdlcyBjdXJyZW50bHkgc3RvcmVkICovCiAJdTMyIGdvb2RfY29tcHJlc3M7CS8qICUgb2YgcGFnZXMgd2l0aCBjb21wcmVzc2lvbiByYXRpbzw9NTAlICovCkBAIC0xMzgsNiArMTMzLDcgQEAKIAl2b2lkICpjb21wcmVzc193b3JrbWVtOwogCXZvaWQgKmNvbXByZXNzX2J1ZmZlcjsKIAlzdHJ1Y3QgdGFibGUgKnRhYmxlOworCXNwaW5sb2NrX3Qgc3RhdDY0X2xvY2s7CS8qIHByb3RlY3QgNjQtYml0IHN0YXRzICovCiAJc3RydWN0IG11dGV4IGxvY2s7CiAJc3RydWN0IHJlcXVlc3RfcXVldWUgKnF1ZXVlOwogCXN0cnVjdCBnZW5kaXNrICpkaXNrOwpAQCAtMTY3LDUgKzE2Myw0OCBAQAogCiAvKi0tICovCiAKLSNlbmRpZgorLyogRGVidWdnaW5nIGFuZCBTdGF0cyAqLworI2lmIGRlZmluZWQoQ09ORklHX1JBTVpTV0FQX1NUQVRTKQorc3RhdGljIHZvaWQgcnpzX3N0YXRfaW5jKHUzMiAqdikKK3sKKwkqdiA9ICp2ICsgMTsKK30KIAorc3RhdGljIHZvaWQgcnpzX3N0YXRfZGVjKHUzMiAqdikKK3sKKwkqdiA9ICp2IC0gMTsKK30KKworc3RhdGljIHZvaWQgcnpzX3N0YXQ2NF9pbmMoc3RydWN0IHJhbXpzd2FwICpyenMsIHU2NCAqdikKK3sKKwlzcGluX2xvY2soJnJ6cy0+c3RhdDY0X2xvY2spOworCSp2ID0gKnYgKyAxOworCXNwaW5fdW5sb2NrKCZyenMtPnN0YXQ2NF9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgcnpzX3N0YXQ2NF9kZWMoc3RydWN0IHJhbXpzd2FwICpyenMsIHU2NCAqdikKK3sKKwlzcGluX2xvY2soJnJ6cy0+c3RhdDY0X2xvY2spOworCSp2ID0gKnYgLSAxOworCXNwaW5fdW5sb2NrKCZyenMtPnN0YXQ2NF9sb2NrKTsKK30KKworc3RhdGljIHU2NCByenNfc3RhdDY0X3JlYWQoc3RydWN0IHJhbXpzd2FwICpyenMsIHU2NCAqdikKK3sKKwl1NjQgdmFsOworCisJc3Bpbl9sb2NrKCZyenMtPnN0YXQ2NF9sb2NrKTsKKwl2YWwgPSAqdjsKKwlzcGluX3VubG9jaygmcnpzLT5zdGF0NjRfbG9jayk7CisKKwlyZXR1cm4gdmFsOworfQorI2Vsc2UKKyNkZWZpbmUgcnpzX3N0YXRfaW5jKHYpCisjZGVmaW5lIHJ6c19zdGF0X2RlYyh2KQorI2RlZmluZSByenNfc3RhdDY0X2luYyhyLCB2KQorI2RlZmluZSByenNfc3RhdDY0X2RlYyhyLCB2KQorI2RlZmluZSByenNfc3RhdDY0X3JlYWQociwgdikKKyNlbmRpZiAvKiBDT05GSUdfUkFNWlNXQVBfU1RBVFMgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAvcmFtenN3YXBfaW9jdGwuaCBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9pb2N0bC5oCmluZGV4IGM3MTNhMDkuLmQyNjA3NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9pb2N0bC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC9yYW16c3dhcF9pb2N0bC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvbXByZXNzZWQgUkFNIGJhc2VkIHN3YXAgZGV2aWNlCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBOaXRpbiBHdXB0YQorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwICBOaXRpbiBHdXB0YQogICoKICAqIFRoaXMgY29kZSBpcyByZWxlYXNlZCB1c2luZyBhIGR1YWwgbGljZW5zZSBzdHJhdGVneTogQlNEL0dQTAogICogWW91IGNhbiBjaG9vc2UgdGhlIGxpY2VuY2UgdGhhdCBiZXR0ZXIgZml0cyB5b3VyIHJlcXVpcmVtZW50cy4KQEAgLTI0LDkgKzI0LDEwIEBACiAJCQkJICogc2l6ZSAoaWYgcHJlc2VudCkgKi8KIAl1NjQgbnVtX3JlYWRzOwkJLyogZmFpbGVkICsgc3VjY2Vzc2Z1bCAqLwogCXU2NCBudW1fd3JpdGVzOwkJLyogLS1kby0tICovCi0JdTY0IGZhaWxlZF9yZWFkczsJLyogY2FuIGhhcHBlbiB3aGVuIG1lbW9yeSBpcyB0b28gbG93ICovCi0JdTY0IGZhaWxlZF93cml0ZXM7CS8qIHNob3VsZCBORVZFUiEgaGFwcGVuICovCisJdTY0IGZhaWxlZF9yZWFkczsJLyogc2hvdWxkIE5FVkVSISBoYXBwZW4gKi8KKwl1NjQgZmFpbGVkX3dyaXRlczsJLyogY2FuIGhhcHBlbiB3aGVuIG1lbW9yeSBpcyB0b28gbG93ICovCiAJdTY0IGludmFsaWRfaW87CQkvKiBub24tc3dhcCBJL08gcmVxdWVzdHMgKi8KKwl1NjQgbm90aWZ5X2ZyZWU7CS8qIG5vLiBvZiBzd2FwIHNsb3QgZnJlZSBub3RpZmljYXRpb25zICovCiAJdTMyIHBhZ2VzX3plcm87CQkvKiBuby4gb2YgemVybyBmaWxsZWQgcGFnZXMgKi8KIAl1MzIgZ29vZF9jb21wcmVzc19wY3Q7CS8qIG5vLiBvZiBwYWdlcyB3aXRoIGNvbXByZXNzaW9uIHJhdGlvPD01MCUgKi8KIAl1MzIgcGFnZXNfZXhwYW5kX3BjdDsJLyogbm8uIG9mIGluY29tcHJlc3NpYmxlIHBhZ2VzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAveHZtYWxsb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC94dm1hbGxvYy5jCmluZGV4IGIzZTk4NmMuLjNmZGJiOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC94dm1hbGxvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC94dm1hbGxvYy5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIHh2bWFsbG9jIG1lbW9yeSBhbGxvY2F0b3IKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgIE5pdGluIEd1cHRhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgIE5pdGluIEd1cHRhCiAgKgogICogVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVzaW5nIGEgZHVhbCBsaWNlbnNlIHN0cmF0ZWd5OiBCU0QvR1BMCiAgKiBZb3UgY2FuIGNob29zZSB0aGUgbGljZW5jZSB0aGF0IGJldHRlciBmaXRzIHlvdXIgcmVxdWlyZW1lbnRzLgpAQCAtMjczLDcgKzI3Myw3IEBACiB9CiAKIC8qCi0gKiBBbGxvY2F0ZSBhIHBhZ2UgYW5kIGFkZCBpdCBmcmVlbGlzdCBvZiBnaXZlbiBwb29sLgorICogQWxsb2NhdGUgYSBwYWdlIGFuZCBhZGQgaXQgdG8gZnJlZWxpc3Qgb2YgZ2l2ZW4gcG9vbC4KICAqLwogc3RhdGljIGludCBncm93X3Bvb2woc3RydWN0IHh2X3Bvb2wgKnBvb2wsIGdmcF90IGZsYWdzKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3h2bWFsbG9jLmggYi9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAveHZtYWxsb2MuaAppbmRleCAwMTBjNmZlLi41YjFhODFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAveHZtYWxsb2MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAveHZtYWxsb2MuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiB4dm1hbGxvYyBtZW1vcnkgYWxsb2NhdG9yCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5ICBOaXRpbiBHdXB0YQorICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5LCAyMDEwICBOaXRpbiBHdXB0YQogICoKICAqIFRoaXMgY29kZSBpcyByZWxlYXNlZCB1c2luZyBhIGR1YWwgbGljZW5zZSBzdHJhdGVneTogQlNEL0dQTAogICogWW91IGNhbiBjaG9vc2UgdGhlIGxpY2VuY2UgdGhhdCBiZXR0ZXIgZml0cyB5b3VyIHJlcXVpcmVtZW50cy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC94dm1hbGxvY19pbnQuaCBiL2RyaXZlcnMvc3RhZ2luZy9yYW16c3dhcC94dm1hbGxvY19pbnQuaAppbmRleCAwM2MxYTY1Li5lMjNlZDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcmFtenN3YXAveHZtYWxsb2NfaW50LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3JhbXpzd2FwL3h2bWFsbG9jX2ludC5oCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIHh2bWFsbG9jIG1lbW9yeSBhbGxvY2F0b3IKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgIE5pdGluIEd1cHRhCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDksIDIwMTAgIE5pdGluIEd1cHRhCiAgKgogICogVGhpcyBjb2RlIGlzIHJlbGVhc2VkIHVzaW5nIGEgZHVhbCBsaWNlbnNlIHN0cmF0ZWd5OiBCU0QvR1BMCiAgKiBZb3UgY2FuIGNob29zZSB0aGUgbGljZW5jZSB0aGF0IGJldHRlciBmaXRzIHlvdXIgcmVxdWlyZW1lbnRzLgpAQCAtNjIsNyArNjIsNyBAQAogCiBzdHJ1Y3QgYmxvY2tfaGVhZGVyIHsKIAl1bmlvbiB7Ci0JCS8qIFRoaXMgY29tbW9uIGhlYWRlciBtdXN0IGJlIEFMSUdOIGJ5dGVzICovCisJCS8qIFRoaXMgY29tbW9uIGhlYWRlciBtdXN0IGJlIFhWX0FMSUdOIGJ5dGVzICovCiAJCXU4IGNvbW1vbltYVl9BTElHTl07CiAJCXN0cnVjdCB7CiAJCQl1MTYgc2l6ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9yYXIvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9yYXIvS2NvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTdmOGJmMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcmFyL0tjb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwxNyArMCwwIEBACi0jCi0jIFJBUiBkZXZpY2UgY29uZmlndXJhdGlvbgotIwotCi1tZW51ICJSQVIgUmVnaXN0ZXIgRHJpdmVyIgotIwotIwlSZXN0cmljdGVkIEFjY2VzcyBSZWdpc3RlciBNYW5hZ2VyCi0jCi1jb25maWcgUkFSX1JFR0lTVEVSCi0JdHJpc3RhdGUgIlJlc3RyaWN0ZWQgQWNjZXNzIFJlZ2lvbiBSZWdpc3RlciBEcml2ZXIiCi0JZGVmYXVsdCBuCi0JLS0taGVscC0tLQotCQlUaGlzIGRyaXZlciBhbGxvd3Mgb3RoZXIga2VybmVsIGRyaXZlcnMgYWNjZXNzIHRvIHRoZQotCQljb250ZW50cyBvZiB0aGUgcmVzdHJpY3RlZCBhY2Nlc3MgcmVnaW9uIGNvbnRyb2wKLQkJcmVnaXN0ZXJzLgotCi1lbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFyL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3Jhci9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQyMmVkMC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcmFyL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsMiArMCwwIEBACi1FWFRSQV9DRkxBR1MgKz0gLURMSVRUTEVfX0VORElBTgotb2JqLSQoQ09ORklHX1JBUl9SRUdJU1RFUikgKz0gcmFyX2RyaXZlci5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFyL3Jhcl9kcml2ZXIuYyBiL2RyaXZlcnMvc3RhZ2luZy9yYXIvcmFyX2RyaXZlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkODVkMTg5Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9yYXIvcmFyX2RyaXZlci5jCisrKyAvZGV2L251bGwKQEAgLTEsNDQ0ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgva2Rldl90Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvd2FpdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgInJhcl9kcml2ZXIuaCIKLQotLyogVGhlIGZvbGxvd2luZyBkZWZpbmVzIGFyZSBmb3IgdGhlIElQQyBwcm9jZXNzIHRvIHJldHJpZXZlIFJBUiBpbiAqLwotCi0vKiA9PT0gTGluY3JvZnQgTWVzc2FnZSBCdXMgSW50ZXJmYWNlID09PSAqLwotLyogTWVzc2FnZSBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIExOQ19NQ1JfT0ZGU0VUIDB4RDAKLQotLyogTWVzc2FnZSBEYXRhIFJlZ2lzdGVyICovCi0jZGVmaW5lIExOQ19NRFJfT0ZGU0VUIDB4RDQKLQotLyogTWVzc2FnZSBPcGNvZGVzICovCi0jZGVmaW5lIExOQ19NRVNTQUdFX1JFQURfT1BDT0RFICAweEQwCi0jZGVmaW5lIExOQ19NRVNTQUdFX1dSSVRFX09QQ09ERSAweEUwCi0KLS8qIE1lc3NhZ2UgV3JpdGUgQnl0ZSBFbmFibGVzICovCi0jZGVmaW5lIExOQ19NRVNTQUdFX0JZVEVfV1JJVEVfRU5BQkxFUyAweEYKLQotLyogQi11bml0IFBvcnQgKi8KLSNkZWZpbmUgTE5DX0JVTklUX1BPUlQgMHgzCi0KLS8qID09PSBMaW5jcm9mdCBCLVVuaXQgUmVnaXN0ZXJzIC0gUHJvZ3JhbW1lZCBieSBJQTMyIGZpcm13YXJlID09PSAqLwotI2RlZmluZSBMTkNfQlJBUjBMICAweDEwCi0jZGVmaW5lIExOQ19CUkFSMEggIDB4MTEKLSNkZWZpbmUgTE5DX0JSQVIxTCAgMHgxMgotI2RlZmluZSBMTkNfQlJBUjFIICAweDEzCi0KLS8qIFJlc2VydmVkIGZvciBTZVAgKi8KLSNkZWZpbmUgTE5DX0JSQVIyTCAgMHgxNAotI2RlZmluZSBMTkNfQlJBUjJIICAweDE1Ci0KLQotLyogVGhpcyBzdHJ1Y3R1cmUgaXMgb25seSB1c2VkIGR1cmluZyBtb2R1bGUgaW5pdGlhbGl6YXRpb24uICovCi1zdHJ1Y3QgUkFSX29mZnNldHMgewotCWludCBsb3c7IC8qIFJlZ2lzdGVyIG9mZnNldCBmb3IgbG93IFJBUiBwaHlzaWNhbCBhZGRyZXNzLiAqLwotCWludCBoaWdoOyAvKiBSZWdpc3RlciBvZmZzZXQgZm9yIGhpZ2ggUkFSIHBoeXNpY2FsIGFkZHJlc3MuICovCi19OwotCi1zdHJ1Y3QgcGNpX2RldiAqcmFyX2RldjsKLXN0YXRpYyB1aW50MzJfdCByZWdpc3RlcmVkOwotCi0vKiBNb29yZXN0b3duIHN1cHBvcnRzIHRocmVlIHJlc3RyaWN0ZWQgYWNjZXNzIHJlZ2lvbnMuICovCi0jZGVmaW5lIE1SU1RfTlVNX1JBUiAzCi0KLXN0cnVjdCBSQVJfYWRkcmVzc19zdHJ1Y3QgcmFyX2FkZHJbTVJTVF9OVU1fUkFSXTsKLQotLyogcHJvdG90eXBlIGZvciBpbml0ICovCi1zdGF0aWMgaW50IF9faW5pdCByYXJfaW5pdF9oYW5kbGVyKHZvaWQpOwotc3RhdGljIHZvaWQgX19leGl0IHJhcl9leGl0X2hhbmRsZXIodm9pZCk7Ci0KLS8qCi0gIGZ1bmN0aW9uIHRoYXQgaXMgYWN0aXZhdGVkIG9uIHRoZSBzdWNjZXNzZnVsbCBwcm9iZSBvZiB0aGUgUkFSIGRldmljZQotKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHJhcl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCByYXJfcGNpX2lkX3RibFtdID0gewotCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCAweDQxMTApIH0sCi0JeyAwIH0KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCByYXJfcGNpX2lkX3RibCk7Ci0KLS8qIGZpZWxkIGZvciByZWdpc3RlcmluZyBkcml2ZXIgdG8gUENJIGRldmljZSAqLwotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJhcl9wY2lfZHJpdmVyID0gewotCS5uYW1lID0gInJhcl9kcml2ZXIiLAotCS5pZF90YWJsZSA9IHJhcl9wY2lfaWRfdGJsLAotCS5wcm9iZSA9IHJhcl9wcm9iZQotfTsKLQotLyogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHJldHJpZXZlZCBSQVIgaW5mbyB1c2luZyB0aGUgSVBDIG1lc3NhZ2UKLSAgIGJ1cyBpbnRlcmZhY2UgKi8KLXN0YXRpYyBpbnQgbWVtcmFyX2dldF9yYXJfYWRkcihzdHJ1Y3QgcGNpX2RldiogcGRldiwKLQkgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwKLQkgICAgICAgICAgICAgICAgICAgICAgdTMyICphZGRyKQotewotCS8qCi0JICogPT09PT09PT0gVGhlIExpbmNyb2Z0IE1lc3NhZ2UgQnVzIEludGVyZmFjZSA9PT09PT09PQotCSAqIExpbmNyb2Z0IHJlZ2lzdGVycyBtYXkgYmUgb2J0YWluZWQgZnJvbSB0aGUgUENJCi0JICogKHRoZSBIb3N0IEJyaWRnZSkgdXNpbmcgdGhlIExpbmNyb2Z0IE1lc3NhZ2UgQnVzCi0JICogSW50ZXJmYWNlLiAgVGhhdCBtZXNzYWdlIGJ1cyBpbnRlcmZhY2UgaXMgZ2VuZXJhbGx5Ci0JICogY29tcHJpc2VkIG9mIHR3byByZWdpc3RlcnM6IGEgY29udHJvbCByZWdpc3RlciAoTUNSLCAweERPKQotCSAqIGFuZCBhIGRhdGEgcmVnaXN0ZXIgKE1EUiwgMHhENCkuCi0JICoKLQkgKiBUaGUgTUNSIChtZXNzYWdlIGNvbnRyb2wgcmVnaXN0ZXIpIGZvcm1hdCBpcyB0aGUgZm9sbG93aW5nOgotCSAqICAgMS4gIFszMToyNF06IE9wY29kZQotCSAqICAgMi4gIFsyMzoxNl06IFBvcnQKLQkgKiAgIDMuICBbMTU6OF06IFJlZ2lzdGVyIE9mZnNldAotCSAqICAgNC4gIFs3OjRdOiBCeXRlIEVuYWJsZXMgKHVzZSAweEYgdG8gc2V0IGFsbCBvZiB0aGVzZSBiaXRzCi0JICogICAgICAgICAgICAgIHRvIDEpCi0JICogICA1LiAgWzM6MF06IHJlc2VydmVkCi0JICoKLQkgKiAgUmVhZCAoMHhEMCkgYW5kIHdyaXRlICgweEUwKSBvcGNvZGVzIGFyZSB3cml0dGVuIHRvIHRoZQotCSAqICBjb250cm9sIHJlZ2lzdGVyIHdoZW4gcmVhZGluZyBhbmQgd3JpdGluZyB0byBMaW5jcm9mdAotCSAqICByZWdpc3RlcnMsIHJlc3BlY3RpdmVseS4KLQkgKgotCSAqICBXZSdyZSBpbnRlcmVzdGVkIGluIHJlZ2lzdGVycyBmb3VuZCBpbiB0aGUgTGluY3JvZnQKLQkgKiAgQi11bml0LiAgVGhlIEItdW5pdCBwb3J0IGlzIDB4My4KLQkgKgotCSAqICBUaGUgc2l4IEItdW5pdCBSQVIgcmVnaXN0ZXIgb2Zmc2V0cyB3ZSB1c2UgYXJlIGxpc3RlZAotCSAqICBlYXJsaWVyIGluIHRoaXMgZmlsZS4KLQkgKgotCSAqICBMYXN0bHkgd3JpdGluZyB0byB0aGUgTUNSIHJlZ2lzdGVyIHJlcXVpcmVzIHRoZSAiQnl0ZQotCSAqICBlbmFibGVzIiBiaXRzIHRvIGJlIHNldCB0byAxLiAgVGhpcyBtYXkgYmUgYWNoaWV2ZWQgYnkKLQkgKiAgd3JpdGluZyAweEYgYXQgYml0IDQuCi0JICoKLQkgKiBUaGUgTURSIChtZXNzYWdlIGRhdGEgcmVnaXN0ZXIpIGZvcm1hdCBpcyB0aGUgZm9sbG93aW5nOgotCSAqICAgMS4gWzMxOjBdOiBSZWFkL1dyaXRlIERhdGEKLQkgKgotCSAqICBEYXRhIGJlaW5nIHJlYWQgZnJvbSB0aGlzIHJlZ2lzdGVyIGlzIG9ubHkgYXZhaWxhYmxlIGFmdGVyCi0JICogIHdyaXRpbmcgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2wgbWVzc2FnZSB0byB0aGUgTUNSCi0JICogIHJlZ2lzdGVyLgotCSAqCi0JICogIERhdGEgYmVpbmcgd3JpdHRlbiB0byB0aGlzIHJlZ2lzdGVyIG11c3QgYmUgd3JpdHRlbiBiZWZvcmUKLQkgKiAgd3JpdGluZyB0aGUgYXBwcm9wcmlhdGUgY29udHJvbCBtZXNzYWdlIHRvIHRoZSBNQ1IKLQkgKiAgcmVnaXN0ZXIuCi0JICovCi0KLQlpbnQgcmVzdWx0ID0gMDsgLyogcmVzdWx0ICovCi0JLyogQ29uc3RydWN0IGNvbnRyb2wgbWVzc2FnZSAqLwotCXUzMiBjb25zdCBtZXNzYWdlID0KLQkgICAgICAgKExOQ19NRVNTQUdFX1JFQURfT1BDT0RFIDw8IDI0KQotCSAgICAgICB8IChMTkNfQlVOSVRfUE9SVCA8PCAxNikKLQkgICAgICAgfCAob2Zmc2V0IDw8IDgpCi0JICAgICAgIHwgKExOQ19NRVNTQUdFX0JZVEVfV1JJVEVfRU5BQkxFUyA8PCA0KTsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgInJhci0gb2Zmc2V0IHRvIExOQyBNU0cgaXMgJXhcbiIsb2Zmc2V0KTsKLQotCWlmIChhZGRyID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogU2VuZCB0aGUgY29udHJvbCBtZXNzYWdlICovCi0JcmVzdWx0ID0gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgTE5DX01DUl9PRkZTRVQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlKTsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgInJhci0gcmVzdWx0IGZyb20gc2VuZCBjdGwgcmVnaXN0ZXIgaXMgJXhcbiIKLQkgICxyZXN1bHQpOwotCi0JaWYgKCFyZXN1bHQpCi0JCXJlc3VsdCA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMTkNfTURSX09GRlNFVCwKLQkJCQkgICAgICAgICAgICAgIGFkZHIpOwotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAicmFyLSByZXN1bHQgZnJvbSByZWFkIGRhdGEgcmVnaXN0ZXIgaXMgJXhcbiIsCi0JICByZXN1bHQpOwotCi0JcHJpbnRrKEtFUk5fV0FSTklORyAicmFyLSB2YWx1ZSByZWFkIGZyb20gZGF0YSByZWdpc3RlciBpcyAleFxuIiwKLQkgICphZGRyKTsKLQotCWlmIChyZXN1bHQpCi0JCXJldHVybiAtMTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IG1lbXJhcl9zZXRfcmFyX2FkZHIoc3RydWN0IHBjaV9kZXYqIHBkZXYsCi0JICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQsCi0JICAgICAgICAgICAgICAgICAgICAgIHUzMiBhZGRyKQotewotCS8qCi0JICogPT09PT09PT0gVGhlIExpbmNyb2Z0IE1lc3NhZ2UgQnVzIEludGVyZmFjZSA9PT09PT09PQotCSAqIExpbmNyb2Z0IHJlZ2lzdGVycyBtYXkgYmUgb2J0YWluZWQgZnJvbSB0aGUgUENJCi0JICogKHRoZSBIb3N0IEJyaWRnZSkgdXNpbmcgdGhlIExpbmNyb2Z0IE1lc3NhZ2UgQnVzCi0JICogSW50ZXJmYWNlLiAgVGhhdCBtZXNzYWdlIGJ1cyBpbnRlcmZhY2UgaXMgZ2VuZXJhbGx5Ci0JICogY29tcHJpc2VkIG9mIHR3byByZWdpc3RlcnM6IGEgY29udHJvbCByZWdpc3RlciAoTUNSLCAweERPKQotCSAqIGFuZCBhIGRhdGEgcmVnaXN0ZXIgKE1EUiwgMHhENCkuCi0JICoKLQkgKiBUaGUgTUNSIChtZXNzYWdlIGNvbnRyb2wgcmVnaXN0ZXIpIGZvcm1hdCBpcyB0aGUgZm9sbG93aW5nOgotCSAqICAgMS4gIFszMToyNF06IE9wY29kZQotCSAqICAgMi4gIFsyMzoxNl06IFBvcnQKLQkgKiAgIDMuICBbMTU6OF06IFJlZ2lzdGVyIE9mZnNldAotCSAqICAgNC4gIFs3OjRdOiBCeXRlIEVuYWJsZXMgKHVzZSAweEYgdG8gc2V0IGFsbCBvZiB0aGVzZSBiaXRzCi0JICogICAgICAgICAgICAgIHRvIDEpCi0JICogICA1LiAgWzM6MF06IHJlc2VydmVkCi0JICoKLQkgKiAgUmVhZCAoMHhEMCkgYW5kIHdyaXRlICgweEUwKSBvcGNvZGVzIGFyZSB3cml0dGVuIHRvIHRoZQotCSAqICBjb250cm9sIHJlZ2lzdGVyIHdoZW4gcmVhZGluZyBhbmQgd3JpdGluZyB0byBMaW5jcm9mdAotCSAqICByZWdpc3RlcnMsIHJlc3BlY3RpdmVseS4KLQkgKgotCSAqICBXZSdyZSBpbnRlcmVzdGVkIGluIHJlZ2lzdGVycyBmb3VuZCBpbiB0aGUgTGluY3JvZnQKLQkgKiAgQi11bml0LiAgVGhlIEItdW5pdCBwb3J0IGlzIDB4My4KLQkgKgotCSAqICBUaGUgc2l4IEItdW5pdCBSQVIgcmVnaXN0ZXIgb2Zmc2V0cyB3ZSB1c2UgYXJlIGxpc3RlZAotCSAqICBlYXJsaWVyIGluIHRoaXMgZmlsZS4KLQkgKgotCSAqICBMYXN0bHkgd3JpdGluZyB0byB0aGUgTUNSIHJlZ2lzdGVyIHJlcXVpcmVzIHRoZSAiQnl0ZQotCSAqICBlbmFibGVzIiBiaXRzIHRvIGJlIHNldCB0byAxLiAgVGhpcyBtYXkgYmUgYWNoaWV2ZWQgYnkKLQkgKiAgd3JpdGluZyAweEYgYXQgYml0IDQuCi0JICoKLQkgKiBUaGUgTURSIChtZXNzYWdlIGRhdGEgcmVnaXN0ZXIpIGZvcm1hdCBpcyB0aGUgZm9sbG93aW5nOgotCSAqICAgMS4gWzMxOjBdOiBSZWFkL1dyaXRlIERhdGEKLQkgKgotCSAqICBEYXRhIGJlaW5nIHJlYWQgZnJvbSB0aGlzIHJlZ2lzdGVyIGlzIG9ubHkgYXZhaWxhYmxlIGFmdGVyCi0JICogIHdyaXRpbmcgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2wgbWVzc2FnZSB0byB0aGUgTUNSCi0JICogIHJlZ2lzdGVyLgotCSAqCi0JICogIERhdGEgYmVpbmcgd3JpdHRlbiB0byB0aGlzIHJlZ2lzdGVyIG11c3QgYmUgd3JpdHRlbiBiZWZvcmUKLQkgKiAgd3JpdGluZyB0aGUgYXBwcm9wcmlhdGUgY29udHJvbCBtZXNzYWdlIHRvIHRoZSBNQ1IKLQkgKiAgcmVnaXN0ZXIuCi0JICovCi0KLQlpbnQgcmVzdWx0ID0gMDsgLyogcmVzdWx0ICovCi0KLQkvKiBDb25zdHJ1Y3QgY29udHJvbCBtZXNzYWdlICovCi0JdTMyIGNvbnN0IG1lc3NhZ2UgPQotCSAgICAgICAoTE5DX01FU1NBR0VfV1JJVEVfT1BDT0RFIDw8IDI0KQotCSAgICAgICB8IChMTkNfQlVOSVRfUE9SVCA8PCAxNikKLQkgICAgICAgfCAob2Zmc2V0IDw8IDgpCi0JICAgICAgIHwgKExOQ19NRVNTQUdFX0JZVEVfV1JJVEVfRU5BQkxFUyA8PCA0KTsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgInJhci0gb2Zmc2V0IHRvIExOQyBNU0cgaXMgJXhcbiIsb2Zmc2V0KTsKLQotCWlmIChhZGRyID09IDApCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogU2VuZCB0aGUgY29udHJvbCBtZXNzYWdlICovCi0JcmVzdWx0ID0gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgTE5DX01EUl9PRkZTRVQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyKTsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgInJhci0gcmVzdWx0IGZyb20gc2VuZCBjdGwgcmVnaXN0ZXIgaXMgJXhcbiIKLQkgICxyZXN1bHQpOwotCi0JaWYgKCFyZXN1bHQpCi0JCXJlc3VsdCA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTE5DX01DUl9PRkZTRVQsCi0JCQkJICAgICAgICAgICAgICBtZXNzYWdlKTsKLQotCXByaW50ayhLRVJOX1dBUk5JTkcgInJhci0gcmVzdWx0IGZyb20gd3JpdGUgZGF0YSByZWdpc3RlciBpcyAleFxuIiwKLQkgIHJlc3VsdCk7Ci0KLQlwcmludGsoS0VSTl9XQVJOSU5HICJyYXItIHZhbHVlIHJlYWQgdG8gZGF0YSByZWdpc3RlciBpcyAleFxuIiwKLQkgIGFkZHIpOwotCi0JaWYgKHJlc3VsdCkKLQkJcmV0dXJuIC0xOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLS8qCi0KLSAqIEluaXRpYWxpemUgUkFSIHBhcmFtZXRlcnMsIHN1Y2ggYXMgcGh5c2ljYWwgYWRkcmVzc2VzLCBldGMuCi0KLSAqLwotc3RhdGljIGludCBtZW1yYXJfaW5pdF9yYXJfcGFyYW1zKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBSQVJfb2Zmc2V0cyBjb25zdCBvZmZzZXRzW10gPSB7Ci0JICAgICAgIHsgTE5DX0JSQVIwTCwgTE5DX0JSQVIwSCB9LAotCSAgICAgICB7IExOQ19CUkFSMUwsIExOQ19CUkFSMUggfSwKLQkgICAgICAgeyBMTkNfQlJBUjJMLCBMTkNfQlJBUjJIIH0KLQl9OwotCi0Jc2l6ZV90IGNvbnN0IG51bV9vZmZzZXRzID0gc2l6ZW9mKG9mZnNldHMpIC8gc2l6ZW9mKG9mZnNldHNbMF0pOwotCXN0cnVjdCBSQVJfb2Zmc2V0cyBjb25zdCAqZW5kID0gb2Zmc2V0cyArIG51bV9vZmZzZXRzOwotCXN0cnVjdCBSQVJfb2Zmc2V0cyBjb25zdCAqaTsKLQl1bnNpZ25lZCBpbnQgbiA9IDA7Ci0JaW50IHJlc3VsdCA9IDA7Ci0KLQkvKiBSZXRyaWV2ZSBSQVIgc3RhcnQgYW5kIGVuZCBwaHlzaWNhbCBhZGRyZXNzZXMuICovCi0KLQkvKgotCSAqIEFjY2VzcyB0aGUgUkFSIHJlZ2lzdGVycyB0aHJvdWdoIHRoZSBMaW5jcm9mdCBNZXNzYWdlIEJ1cwotCSAqIEludGVyZmFjZSBvbiBQQ0kgZGV2aWNlOiAwMDowMC4wIEhvc3QgYnJpZGdlLgotCSAqLwotCi0JLyogc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdCgwLCBQQ0lfREVWRk4oMCwwKSk7ICovCi0KLQlpZiAocGRldiA9PSBOVUxMKQotCSAgICAgICByZXR1cm4gLUVOT0RFVjsKLQotCWZvciAoaSA9IG9mZnNldHM7IGkgIT0gZW5kOyArK2ksICsrbikgewotCSAgICAgICBpZiAobWVtcmFyX2dldF9yYXJfYWRkciAocGRldiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAoKmkpLmxvdywKLQkJICAgICAgICAgICAgICAgICAgICAgICAmKHJhcl9hZGRyW25dLmxvdykpICE9IDAKLQkJICAgfHwgbWVtcmFyX2dldF9yYXJfYWRkciAocGRldiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAoKmkpLmhpZ2gsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgJihyYXJfYWRkcltuXS5oaWdoKSkgIT0gMCkgewotCQkgICAgICAgcmVzdWx0ID0gLTE7Ci0JCSAgICAgICBicmVhazsKLQkgICAgICAgfQotCX0KLQotCS8qIERvbmUgYWNjZXNzaW5nIHRoZSBkZXZpY2UuICovCi0JLyogcGNpX2Rldl9wdXQocGRldik7ICovCi0KLQlpZiAocmVzdWx0ID09IDApIHsKLQlpZigxKSB7Ci0JICAgICAgIHNpemVfdCB6OwotCSAgICAgICBmb3IgKHogPSAwOyB6ICE9IE1SU1RfTlVNX1JBUjsgKyt6KSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJyYXIgLSBCUkFSWyVaZF0gcGh5c2ljYWwgYWRkcmVzcyBsb3dcbiIKLQkJCSAgICAgIlx0bG93OiAgMHglMDh4XG4iCi0JCQkgICAgICJcdGhpZ2g6IDB4JTA4eFxuIiwKLQkJCSAgICAgeiwKLQkJCSAgICAgcmFyX2FkZHJbel0ubG93LAotCQkJICAgICByYXJfYWRkclt6XS5oaWdoKTsKLQkJCX0KLQkgICAgICAgfQotCX0KLQotCXJldHVybiByZXN1bHQ7Ci19Ci0KLS8qCi0gIGZ1bmN0aW9uIHRoYXQgaXMgYWN0aXZhdGVkIG9uIHRoZSBzdWNjZXNzZnVsbCBwcm9iZSBvZiB0aGUgUkFSIGRldmljZQotKi8KLXN0YXRpYyBpbnQgX19kZXZpbml0IHJhcl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKLXsKLQkvKiBlcnJvciAqLwotCWludCBlcnJvcjsKLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JQ09ERQotCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0KLQlERUJVR19QUklOVF8wKFJBUl9ERUJVR19MRVZFTF9FWFRFTkRFRCwKLQkgICJSYXIgcGNpIHByb2JlIHN0YXJ0aW5nXG4iKTsKLQllcnJvciA9IDA7Ci0KLQkvKiBlbmFibGUgdGhlIGRldmljZSAqLwotCWVycm9yID0gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0JaWYgKGVycm9yKSB7Ci0JCURFQlVHX1BSSU5UXzAoUkFSX0RFQlVHX0xFVkVMX0VYVEVOREVELAotCQkgICJlcnJvciBlbmFibGluZyBwY2kgZGV2aWNlXG4iKTsKLQkJZ290byBlbmRfZnVuY3Rpb247Ci0JfQotCi0JcmFyX2RldiA9IHBkZXY7Ci0JcmVnaXN0ZXJlZCA9IDE7Ci0KLQkvKiBJbml0aWFsaXplIHRoZSBSQVIgcGFyYW1ldGVycywgd2hpY2ggaGF2ZSB0byBiZSByZXRyaWV2ZWQgKi8KLQkvKiB2aWEgdGhlIG1lc3NhZ2UgYnVzIHNlcnZpY2UgKi8KLQllcnJvcj1tZW1yYXJfaW5pdF9yYXJfcGFyYW1zKHJhcl9kZXYpOwotCi0JaWYgKGVycm9yKSB7Ci0JCURFQlVHX1BSSU5UXzAoUkFSX0RFQlVHX0xFVkVMX0VYVEVOREVELAotCQkgICJlcnJvciBnZXR0aW5nIFJBUiBhZGRyZXNzZXMgZGV2aWNlXG4iKTsKLQkJcmVnaXN0ZXJlZCA9IDA7Ci0JCWdvdG8gZW5kX2Z1bmN0aW9uOwotCQl9Ci0KLWVuZF9mdW5jdGlvbjoKLQotCXJldHVybiBlcnJvcjsKLX0KLQotLyoKLSAgdGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgdGggZHJpdmVyIHRvCi0gIHRoZSBkZXZpY2Ugc3Vic3lzdGVtKCBlaXRoZXIgUENJLCBVU0IsIGV0YykKLSovCi1zdGF0aWMgaW50IF9faW5pdCByYXJfaW5pdF9oYW5kbGVyKHZvaWQpCi17Ci0JcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnJhcl9wY2lfZHJpdmVyKTsKLX0KLQotc3RhdGljIHZvaWQgX19leGl0IHJhcl9leGl0X2hhbmRsZXIodm9pZCkKLXsKLQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnJhcl9wY2lfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQocmFyX2luaXRfaGFuZGxlcik7Ci1tb2R1bGVfZXhpdChyYXJfZXhpdF9oYW5kbGVyKTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi0KLS8qIFRoZSBnZXRfcmFyX2FkZHJlc3MgZnVuY3Rpb24gaXMgdXNlZCBieSBvdGhlciBkZXZpY2UgZHJpdmVycwotICogdG8gb2J0YWluIFJBUiBhZGRyZXNzIGluZm9ybWF0aW9uIG9uIGEgUkFSLiBJdCB0YWtlcyB0d28KLSAqIHBhcmFtZXRlcjoKLSAqCi0gKiBpbnQgcmFyX2luZGV4Ci0gKiBUaGUgcmFyX2luZGV4IGlzIGFuIGluZGV4IHRvIHRoZSByYXIgZm9yIHdoaWNoIHlvdSB3aXNoIHRvIHJldHJpZXZlCi0gKiB0aGUgYWRkcmVzcyBpbmZvcm1hdGlvbi4KLSAqIFZhbHVlcyBjYW4gYmUgMCwxLCBvciAyLgotICoKLSAqIHN0cnVjdCBSQVJfYWRkcmVzc19zdHJ1Y3QgaXMgYSBwb2ludGVyIHRvIGEgcGxhY2UgdG8gd2hpY2ggdGhlIGZ1bmN0aW9uCi0gKiBjYW4gcmV0dXJuIHRoZSBhZGRyZXNzIHN0cnVjdHVyZSBmb3IgdGhlIFJBUi4KLSAqCi0gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIDAgdXBvbiBzdWNjZXNzIG9yIGEgLTEgaWYgdGhlcmUgaXMgbm8gUkFSCi0gKiBmYWNpbGl0eSBvbiB0aGlzIHN5c3RlbS4KLSAqLwotaW50IGdldF9yYXJfYWRkcmVzcyhpbnQgcmFyX2luZGV4LHN0cnVjdCBSQVJfYWRkcmVzc19zdHJ1Y3QgKmFkZHJlc3NlcykKLXsKLQlpZiAocmVnaXN0ZXJlZCAmJiAocmFyX2luZGV4IDwgMykgJiYgKHJhcl9pbmRleCA+PSAwKSkgewotCQkqYWRkcmVzc2VzPXJhcl9hZGRyW3Jhcl9pbmRleF07Ci0JCS8qIHN0cmlwIG9mZiBsb2NrIGJpdCBpbmZvcm1hdGlvbiAgKi8KLQkJYWRkcmVzc2VzLT5sb3cgPSBhZGRyZXNzZXMtPmxvdyAmIDB4ZmZmZmZmZjA7Ci0JCWFkZHJlc3Nlcy0+aGlnaCA9IGFkZHJlc3Nlcy0+aGlnaCAmIDB4ZmZmZmZmZjA7Ci0JCXJldHVybiAwOwotCQl9Ci0KLQllbHNlIHsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLX0KLQotCi1FWFBPUlRfU1lNQk9MKGdldF9yYXJfYWRkcmVzcyk7Ci0KLS8qIFRoZSBsb2NrX3JhciBmdW5jdGlvbiBpcyB1ZWQgYnkgb3RoZXIgZGV2aWNlIGRyaXZlcnMgdG8gbG9jayBhbiBSQVIuCi0gKiBvbmNlIGFuIFJBUiBpcyBsb2NrZWQsIGl0IHN0YXlzIGxvY2tlZCB1bnRpbCB0aGUgbmV4dCBzeXN0ZW0gcmVib290LgotICogVGhlIGZ1bmN0aW9uIHRha2VzIG9uZSBwYXJhbWV0ZXI6Ci0gKgotICogaW50IHJhcl9pbmRleAotICogVGhlIHJhcl9pbmRleCBpcyBhbiBpbmRleCB0byB0aGUgcmFyIHRoYXQgeW91IHdhbnQgdG8gbG9jay4KLSAqIFZhbHVlcyBjYW4gYmUgMCwxLCBvciAyLgotICoKLSAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgMCB1cG9uIHN1Y2Nlc3Mgb3IgYSAtMSBpZiB0aGVyZSBpcyBubyBSQVIKLSAqIGZhY2lsaXR5IG9uIHRoaXMgc3lzdGVtLgotICovCi1pbnQgbG9ja19yYXIoaW50IHJhcl9pbmRleCkKLXsKLQl1MzIgd29ya2luZ19hZGRyOwotCWludCByZXN1bHQ7Ci1pZiAocmVnaXN0ZXJlZCAmJiAocmFyX2luZGV4IDwgMykgJiYgKHJhcl9pbmRleCA+PSAwKSkgewotCS8qIGZpcnN0IG1ha2Ugc3VyZSB0aGF0IGxvY2sgYml0cyBhcmUgY2xlYXIgKHRoaXMgZG9lcyBsb2NrKSAqLwotCXdvcmtpbmdfYWRkcj1yYXJfYWRkcltyYXJfaW5kZXhdLmxvdyAmIDB4ZmZmZmZmZjA7Ci0KLQkvKiBub3cgc2VuZCB0aGF0IHZhbHVlIHRvIHRoZSByZWdpc3RlciB1c2luZyB0aGUgSVBDICovCi0gICAgICAgIHJlc3VsdD1tZW1yYXJfc2V0X3Jhcl9hZGRyKHJhcl9kZXYscmFyX2luZGV4LHdvcmtpbmdfYWRkcik7Ci0JcmV0dXJuIHJlc3VsdDsKLQl9Ci0KLWVsc2UgewotCXJldHVybiAtRU5PREVWOwotCX0KLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9yYXIvcmFyX2RyaXZlci5oIGIvZHJpdmVycy9zdGFnaW5nL3Jhci9yYXJfZHJpdmVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2OTBmOTguLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Jhci9yYXJfZHJpdmVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSw5OSArMCwwIEBACi0vKiA9PT0gUkFSIFBoeXNpY2FsIEFkZHJlc3NlcyA9PT0gKi8KLXN0cnVjdCBSQVJfYWRkcmVzc19zdHJ1Y3QgewotICAgICAgICB1MzIgbG93OwotICAgICAgICB1MzIgaGlnaDsKLX07Ci0KLS8qIFRoZSBnZXRfcmFyX2FkZHJlc3MgZnVuY3Rpb24gaXMgdXNlZCBieSBvdGhlciBkZXZpY2UgZHJpdmVycwotICogdG8gb2J0YWluIFJBUiBhZGRyZXNzIGluZm9ybWF0aW9uIG9uIGEgUkFSLiBJdCB0YWtlcyB0d28KLSAqIHBhcmFtZXRlcjoKLSAqCi0gKiBpbnQgcmFyX2luZGV4Ci0gKiBUaGUgcmFyX2luZGV4IGlzIGFuIGluZGV4IHRvIHRoZSByYXIgZm9yIHdoaWNoIHlvdSB3aXNoIHRvIHJldHJpZXZlCi0gKiB0aGUgYWRkcmVzcyBpbmZvcm1hdGlvbi4KLSAqIFZhbHVlcyBjYW4gYmUgMCwxLCBvciAyLgotICoKLSAqIHN0cnVjdCBSQVJfYWRkcmVzc19zdHJ1Y3QgaXMgYSBwb2ludGVyIHRvIGEgcGxhY2UgdG8gd2hpY2ggdGhlIGZ1bmN0aW9uCi0gKiBjYW4gcmV0dXJuIHRoZSBhZGRyZXNzIHN0cnVjdHVyZSBmb3IgdGhlIFJBUi4KLSAqCi0gKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIDAgdXBvbiBzdWNjZXNzIG9yIGEgLTEgaWYgdGhlcmUgaXMgbm8gUkFSCi0gKiBmYWNpbGl0eSBvbiB0aGlzIHN5c3RlbS4KLSAqLwotaW50IGdldF9yYXJfYWRkcmVzcyhpbnQgcmFyX2luZGV4LHN0cnVjdCBSQVJfYWRkcmVzc19zdHJ1Y3QgKmFkZHJlc3Nlcyk7Ci0KLQotLyogVGhlIGxvY2tfcmFyIGZ1bmN0aW9uIGlzIHVlZCBieSBvdGhlciBkZXZpY2UgZHJpdmVycyB0byBsb2NrIGFuIFJBUi4KLSAqIG9uY2UgYW4gUkFSIGlzIGxvY2tlZCwgaXQgc3RheXMgbG9ja2VkIHVudGlsIHRoZSBuZXh0IHN5c3RlbSByZWJvb3QuCi0gKiBUaGUgZnVuY3Rpb24gdGFrZXMgb25lIHBhcmFtZXRlcjoKLSAqCi0gKiBpbnQgcmFyX2luZGV4Ci0gKiBUaGUgcmFyX2luZGV4IGlzIGFuIGluZGV4IHRvIHRoZSByYXIgdGhhdCB5b3Ugd2FudCB0byBsb2NrLgotICogVmFsdWVzIGNhbiBiZSAwLDEsIG9yIDIuCi0gKgotICogVGhlIGZ1bmN0aW9uIHJldHVybnMgYSAwIHVwb24gc3VjY2VzcyBvciBhIC0xIGlmIHRoZXJlIGlzIG5vIFJBUgotICogZmFjaWxpdHkgb24gdGhpcyBzeXN0ZW0uCi0gKi8KLWludCBsb2NrX3JhcihpbnQgcmFyX2luZGV4KTsKLQotCi0vKiBERUJVRyBMRVZFTCBNQVNLUyAqLwotI2RlZmluZSBSQVJfREVCVUdfTEVWRUxfQkFTSUMgICAgICAgMHgxCi0KLSNkZWZpbmUgUkFSX0RFQlVHX0xFVkVMX1JFR0lTVEVSUyAgIDB4MgotCi0jZGVmaW5lIFJBUl9ERUJVR19MRVZFTF9FWFRFTkRFRCAgICAweDQKLQotI2RlZmluZSBERUJVR19MRVZFTAkweDcKLQotLyogRlVOQ1RJT05BTCBNQUNST1MgKi8KLQotLyogZGVidWcgbWFjcm8gd2l0aG91dCBwYXJhbWF0ZXJzICovCi0jZGVmaW5lIERFQlVHX1BSSU5UXzAoREVCVUdfTEVWRUwgLCBpbmZvKSBcCi1kbyBcCi17IFwKLSAgaWYoREVCVUdfTEVWRUwpIFwKLSAgeyBcCi0gICAgcHJpbnRrKEtFUk5fV0FSTklORyBpbmZvKTsgXAotICB9IFwKLX13aGlsZSgwKQotCi0vKiBkZWJ1ZyBtYWNybyB3aXRoIDEgcGFyYW1hdGVyICovCi0jZGVmaW5lIERFQlVHX1BSSU5UXzEoREVCVUdfTEVWRUwgLCBpbmZvICwgcGFyYW0xKSBcCi1kbyBcCi17IFwKLSAgaWYoREVCVUdfTEVWRUwpIFwKLSAgeyBcCi0gICAgcHJpbnRrKEtFUk5fV0FSTklORyBpbmZvICwgcGFyYW0xKTsgXAotICB9IFwKLX13aGlsZSgwKQotCi0vKiBkZWJ1ZyBtYWNybyB3aXRoIDIgcGFyYW1hdGVycyAqLwotI2RlZmluZSBERUJVR19QUklOVF8yKERFQlVHX0xFVkVMICwgaW5mbyAsIHBhcmFtMSwgcGFyYW0yKSBcCi1kbyBcCi17IFwKLSAgaWYoREVCVUdfTEVWRUwpIFwKLSAgeyBcCi0gICAgcHJpbnRrKEtFUk5fV0FSTklORyBpbmZvICwgcGFyYW0xLCBwYXJhbTIpOyBcCi0gIH0gXAotfXdoaWxlKDApCi0KLS8qIGRlYnVnIG1hY3JvIHdpdGggMyBwYXJhbWF0ZXJzICovCi0jZGVmaW5lIERFQlVHX1BSSU5UXzMoREVCVUdfTEVWRUwgLCBpbmZvICwgcGFyYW0xLCBwYXJhbTIgLCBwYXJhbTMpIFwKLWRvIFwKLXsgXAotICBpZihERUJVR19MRVZFTCkgXAotICB7IFwKLSAgICBwcmludGsoS0VSTl9XQVJOSU5HIGluZm8gLCBwYXJhbTEsIHBhcmFtMiAsIHBhcmFtMyk7IFwKLSAgfSBcCi19d2hpbGUoMCkKLQotLyogZGVidWcgbWFjcm8gd2l0aCA0IHBhcmFtYXRlcnMgKi8KLSNkZWZpbmUgREVCVUdfUFJJTlRfNChERUJVR19MRVZFTCAsIGluZm8gLCBwYXJhbTEsIHBhcmFtMiAsIHBhcmFtMyAsIHBhcmFtNCkgXAotZG8gXAoteyBcCi0gIGlmKERFQlVHX0xFVkVMKSBcCi0gIHsgXAotICAgIHByaW50ayhLRVJOX1dBUk5JTkcgaW5mbyAsIHBhcmFtMSwgcGFyYW0yICwgcGFyYW0zICwgcGFyYW00KTsgXAotICB9IFwKLX13aGlsZSgwKQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFyX3JlZ2lzdGVyL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcmFyX3JlZ2lzdGVyL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y3MzgzOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yYXJfcmVnaXN0ZXIvS2NvbmZpZwpAQCAtMCwwICsxLDMwIEBACisjCisjIFJBUiBkZXZpY2UgY29uZmlndXJhdGlvbgorIworCittZW51ICJSQVIgUmVnaXN0ZXIgRHJpdmVyIgorIworIwlSZXN0cmljdGVkIEFjY2VzcyBSZWdpc3RlciBNYW5hZ2VyCisjCitjb25maWcgUkFSX1JFR0lTVEVSCisJdHJpc3RhdGUgIlJlc3RyaWN0ZWQgQWNjZXNzIFJlZ2lvbiBSZWdpc3RlciBEcml2ZXIiCisJZGVmYXVsdCBuCisJLS0taGVscC0tLQorCQlUaGlzIGRyaXZlciBhbGxvd3Mgb3RoZXIga2VybmVsIGRyaXZlcnMgYWNjZXNzIHRvIHRoZQorCQljb250ZW50cyBvZiB0aGUgcmVzdHJpY3RlZCBhY2Nlc3MgcmVnaW9uIGNvbnRyb2wKKwkJcmVnaXN0ZXJzLgorCisJCVRoZSByZXN0cmljdGVkIGFjY2VzcyByZWdpb24gY29udHJvbCByZWdpc3RlcnMKKwkJKHJhcl9yZWdpc3RlcnMpIGFyZSB1c2VkIHRvIHBhc3MgYWRkcmVzcyBhbmQKKwkJbG9ja2luZyBpbmZvcm1hdGlvbiBvbiByZXN0cmljdGVkIGFjY2VzcyByZWdpb25zCisJCXRvIG90aGVyIGRyaXZlcnMgdGhhdCB1c2UgcmVzdHJpY3RlZCBhY2Nlc3MgcmVnaW9ucworCisJCVRoZSByZXN0cmljdGVkIGFjY2VzcyByZWdpb25zIGFyZSByZWdpb25zIG9mIG1lbW9yeQorCQlvbiB0aGUgSW50ZWwgTUlEIFBsYXRmb3JtIHRoYXQgYXJlIG5vdCBhY2Nlc3NpYmxlIHRvCisJCXRoZSB4ODYgcHJvY2Vzc29yLCBidXQgYXJlIGFjY2Vzc2libGUgdG8gZGVkaWNhdGVkCisJCXByb2Nlc3NvcnMgb24gYm9hcmQgcGVyaXBoZXJhbCBkZXZpY2VzLgorCisJCVRoZSBwdXJwb3NlIG9mIHRoZSByZXN0cmljdGVkIGFjY2VzcyByZWdpb25zIGlzIHRvCisJCXByb3RlY3Qgc2Vuc2l0aXZlIGRhdGEgZnJvbSBjb21wcm9taXNlIGJ5IHVuYXV0aG9yaXplZAorCQlwcm9ncmFtcyBydW5uaW5nIG9uIHRoZSB4ODYgcHJvY2Vzc29yLgorZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Jhcl9yZWdpc3Rlci9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9yYXJfcmVnaXN0ZXIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5NTRjYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9yYXJfcmVnaXN0ZXIvTWFrZWZpbGUKQEAgLTAsMCArMSwyIEBACitFWFRSQV9DRkxBR1MgKz0gLURMSVRUTEVfX0VORElBTgorb2JqLSQoQ09ORklHX1JBUl9SRUdJU1RFUikgKz0gcmFyX3JlZ2lzdGVyLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9yYXJfcmVnaXN0ZXIvcmFyX3JlZ2lzdGVyLmMgYi9kcml2ZXJzL3N0YWdpbmcvcmFyX3JlZ2lzdGVyL3Jhcl9yZWdpc3Rlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYzBlMzEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcmFyX3JlZ2lzdGVyL3Jhcl9yZWdpc3Rlci5jCkBAIC0wLDAgKzEsNjE1IEBACisvKgorICogIHJhcl9yZWdpc3Rlci5jIC0gQW4gSW50ZWwgUmVzdHJpY3RlZCBBY2Nlc3MgUmVnaW9uIHJlZ2lzdGVyIGRyaXZlcgorICoKKyAqICBDb3B5cmlnaHQoYykgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCisgKiAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQQorICogIDAyMTExLTEzMDcsIFVTQS4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgMjAwOTEyMDQgTWFyayBBbGx5biA8bWFyay5hLmFsbHluQGludGVsLmNvbT4KKyAqCSAgICAgT3NzYW1hIE90aG1hbiA8b3NzYW1hLm90aG1hbkBpbnRlbC5jb20+CisgKglDbGVhbnVwIHBlciBmZWVkYmFjayBmcm9tIEFsYW4gQ294IGFuZCBBcmphbiBWYW4gRGUgVmVuCisgKgorICogIDIwMDkwODA2IE9zc2FtYSBPdGhtYW4gPG9zc2FtYS5vdGhtYW5AaW50ZWwuY29tPgorICogICAgICBSZXR1cm4gemVybyBoaWdoIGFkZHJlc3MgaWYgdXBwZXIgMjIgYml0cyBpcyB6ZXJvLgorICogICAgICBDbGVhbmVkIHVwIGNoZWNrcGF0Y2ggZXJyb3JzLgorICogICAgICBDbGFyaWZpZWQgdGhhdCBkcml2ZXIgaXMgZGVhbGluZyB3aXRoIGJ1cyBhZGRyZXNzZXMuCisgKgorICogIDIwMDkwNzAyIE9zc2FtYSBPdGhtYW4gPG9zc2FtYS5vdGhtYW5AaW50ZWwuY29tPgorICogICAgICBSZW1vdmVkIHVubmVjZXNzYXJ5IGluY2x1ZGUgZGlyZWN0aXZlcworICogICAgICBDbGVhbmVkIHVwIHNwaW5sb2Nrcy4KKyAqICAgICAgQ2xlYW5lZCB1cCBsb2dnaW5nLgorICogICAgICBJbXByb3ZlZCBpbnZhbGlkIHBhcmFtZXRlciBjaGVja3MuCisgKiAgICAgIEZpeGVkIGFuZCBzaW1wbGlmaWVkIFJBUiBhZGRyZXNzIHJldHJpZXZhbCBhbmQgUkFSIGxvY2tpbmcKKyAqICAgICAgY29kZS4KKyAqCisgKiAgMjAwOTA2MjYgTWFyayBBbGx5biA8bWFyay5hLmFsbHluQGludGVsLmNvbT4KKyAqICAgICAgSW5pdGlhbCBwdWJsaXNoCisgKi8KKworI2RlZmluZSBERUJVRyAxCisKKyNpbmNsdWRlICJyYXJfcmVnaXN0ZXIuaCIKKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKKy8qID09PSBMaW5jcm9mdCBNZXNzYWdlIEJ1cyBJbnRlcmZhY2UgPT09ICovCisvKiBNZXNzYWdlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTE5DX01DUl9PRkZTRVQgMHhEMAorCisvKiBNYXhpbXVtIG51bWJlciBvZiBjbGllbnRzIChvdGhlciBkcml2ZXJzIHVzaW5nIHRoaXMgZHJpdmVyKSAqLworI2RlZmluZSBNQVhfUkFSX0NMSUVOVFMgMTAKKworLyogTWVzc2FnZSBEYXRhIFJlZ2lzdGVyICovCisjZGVmaW5lIExOQ19NRFJfT0ZGU0VUIDB4RDQKKworLyogTWVzc2FnZSBPcGNvZGVzICovCisjZGVmaW5lIExOQ19NRVNTQUdFX1JFQURfT1BDT0RFIDB4RDAKKyNkZWZpbmUgTE5DX01FU1NBR0VfV1JJVEVfT1BDT0RFIDB4RTAKKworLyogTWVzc2FnZSBXcml0ZSBCeXRlIEVuYWJsZXMgKi8KKyNkZWZpbmUgTE5DX01FU1NBR0VfQllURV9XUklURV9FTkFCTEVTIDB4RgorCisvKiBCLXVuaXQgUG9ydCAqLworI2RlZmluZSBMTkNfQlVOSVRfUE9SVCAweDMKKworLyogPT09IExpbmNyb2Z0IEItVW5pdCBSZWdpc3RlcnMgLSBQcm9ncmFtbWVkIGJ5IElBMzIgZmlybXdhcmUgPT09ICovCisjZGVmaW5lIExOQ19CUkFSMEwgMHgxMAorI2RlZmluZSBMTkNfQlJBUjBIIDB4MTEKKyNkZWZpbmUgTE5DX0JSQVIxTCAweDEyCisjZGVmaW5lIExOQ19CUkFSMUggMHgxMworCisvKiBSZXNlcnZlZCBmb3IgU2VQICovCisjZGVmaW5lIExOQ19CUkFSMkwgMHgxNAorI2RlZmluZSBMTkNfQlJBUjJIIDB4MTUKKworLyogTW9vcmVzdG93biBzdXBwb3J0cyB0aHJlZSByZXN0cmljdGVkIGFjY2VzcyByZWdpb25zLiAqLworI2RlZmluZSBNUlNUX05VTV9SQVIgMworCisKKy8qIFJBUiBCdXMgQWRkcmVzcyBSYW5nZSAqLworc3RydWN0IFJBUl9hZGRyZXNzX3JhbmdlIHsKKwlkbWFfYWRkcl90IGxvdzsKKwlkbWFfYWRkcl90IGhpZ2g7Cit9OworCisvKiBTdHJ1Y3R1cmUgY29udGFpbmluZyBsb3cgYW5kIGhpZ2ggUkFSIHJlZ2lzdGVyIG9mZnNldHMuICovCitzdHJ1Y3QgUkFSX29mZnNldHMgeworCXUzMiBsb3c7ICAvKiBSZWdpc3RlciBvZmZzZXQgZm9yIGxvdyAgUkFSIGJ1cyBhZGRyZXNzLiAqLworCXUzMiBoaWdoOyAvKiBSZWdpc3RlciBvZmZzZXQgZm9yIGhpZ2ggUkFSIGJ1cyBhZGRyZXNzLiAqLworfTsKKworc3RydWN0IGNsaWVudCB7CisJaW50ICgqY2xpZW50X2NhbGxiYWNrKSh2b2lkICpjbGllbnRfZGF0YSk7CisJdm9pZCAqY3VzdG9tZXJfZGF0YTsKKwlpbnQgY2xpZW50X2NhbGxlZDsKKwl9OworCitzdGF0aWMgREVGSU5FX01VVEVYKHJhcl9tdXRleCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGxuY19yZWdfbXV0ZXgpOworCitzdHJ1Y3QgUkFSX2RldmljZSB7CisJc3RydWN0IFJBUl9vZmZzZXRzIGNvbnN0IHJhcl9vZmZzZXRzW01SU1RfTlVNX1JBUl07CisJc3RydWN0IFJBUl9hZGRyZXNzX3JhbmdlIHJhcl9hZGRyW01SU1RfTlVNX1JBUl07CisJc3RydWN0IHBjaV9kZXYgKnJhcl9kZXY7CisJYm9vbCByZWdpc3RlcmVkOworCX07CisKKy8qIHRoaXMgcGxhdGZvcm0gaGFzIG9ubHkgb25lIHJhcl9kZXZpY2UgZm9yIDMgcmFyIHJlZ2lvbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgUkFSX2RldmljZSBteV9yYXJfZGV2aWNlID0geworCS5yYXJfb2Zmc2V0cyA9IHsKKwkJWzBdLmxvdyA9IExOQ19CUkFSMEwsCisJCVswXS5oaWdoID0gTE5DX0JSQVIwSCwKKwkJWzFdLmxvdyA9IExOQ19CUkFSMUwsCisJCVsxXS5oaWdoID0gTE5DX0JSQVIxSCwKKwkJWzJdLmxvdyA9IExOQ19CUkFSMkwsCisJCVsyXS5oaWdoID0gTE5DX0JSQVIySAorCX0KK307CisKKy8qIHRoaXMgZGF0YSBpcyBmb3IgaGFuZGxpbmcgcmVxdWVzdHMgZnJvbSBvdGhlciBkcml2ZXJzIHdoaWNoIGFycml2ZQorICogcHJpb3IgdG8gdGhpcyBkcml2ZXIgaW5pdGlhbGl6aW5nCisgKi8KKworc3RhdGljIHN0cnVjdCBjbGllbnQgY2xpZW50c1tNQVhfUkFSX0NMSUVOVFNdOworc3RhdGljIGludCBudW1fY2xpZW50czsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byByZXRyaWV2ZWQgUkFSIGluZm8gdXNpbmcgdGhlIExpbmNyb2Z0CisgKiBtZXNzYWdlIGJ1cyBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyBpbnQgcmV0cmlldmVfcmFyX2FkZHIoc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJaW50IG9mZnNldCwKKwlkbWFfYWRkcl90ICphZGRyKQoreworCS8qCisJICogPT09PT09PT0gVGhlIExpbmNyb2Z0IE1lc3NhZ2UgQnVzIEludGVyZmFjZSA9PT09PT09PQorCSAqIExpbmNyb2Z0IHJlZ2lzdGVycyBtYXkgYmUgb2J0YWluZWQgZnJvbSB0aGUgUENJCisJICogKHRoZSBIb3N0IEJyaWRnZSkgdXNpbmcgdGhlIExpbmNyb2Z0IE1lc3NhZ2UgQnVzCisJICogSW50ZXJmYWNlLiAgVGhhdCBtZXNzYWdlIGJ1cyBpbnRlcmZhY2UgaXMgZ2VuZXJhbGx5CisJICogY29tcHJpc2VkIG9mIHR3byByZWdpc3RlcnM6IGEgY29udHJvbCByZWdpc3RlciAoTUNSLCAweERPKQorCSAqIGFuZCBhIGRhdGEgcmVnaXN0ZXIgKE1EUiwgMHhENCkuCisJICoKKwkgKiBUaGUgTUNSIChtZXNzYWdlIGNvbnRyb2wgcmVnaXN0ZXIpIGZvcm1hdCBpcyB0aGUgZm9sbG93aW5nOgorCSAqICAgMS4gIFszMToyNF06IE9wY29kZQorCSAqICAgMi4gIFsyMzoxNl06IFBvcnQKKwkgKiAgIDMuICBbMTU6OF06IFJlZ2lzdGVyIE9mZnNldAorCSAqICAgNC4gIFs3OjRdOiBCeXRlIEVuYWJsZXMgKHVzZSAweEYgdG8gc2V0IGFsbCBvZiB0aGVzZSBiaXRzCisJICogICAgICAgICAgICAgIHRvIDEpCisJICogICA1LiAgWzM6MF06IHJlc2VydmVkCisJICoKKwkgKiAgUmVhZCAoMHhEMCkgYW5kIHdyaXRlICgweEUwKSBvcGNvZGVzIGFyZSB3cml0dGVuIHRvIHRoZQorCSAqICBjb250cm9sIHJlZ2lzdGVyIHdoZW4gcmVhZGluZyBhbmQgd3JpdGluZyB0byBMaW5jcm9mdAorCSAqICByZWdpc3RlcnMsIHJlc3BlY3RpdmVseS4KKwkgKgorCSAqICBXZSdyZSBpbnRlcmVzdGVkIGluIHJlZ2lzdGVycyBmb3VuZCBpbiB0aGUgTGluY3JvZnQKKwkgKiAgQi11bml0LiAgVGhlIEItdW5pdCBwb3J0IGlzIDB4My4KKwkgKgorCSAqICBUaGUgc2l4IEItdW5pdCBSQVIgcmVnaXN0ZXIgb2Zmc2V0cyB3ZSB1c2UgYXJlIGxpc3RlZAorCSAqICBlYXJsaWVyIGluIHRoaXMgZmlsZS4KKwkgKgorCSAqICBMYXN0bHkgd3JpdGluZyB0byB0aGUgTUNSIHJlZ2lzdGVyIHJlcXVpcmVzIHRoZSAiQnl0ZQorCSAqICBlbmFibGVzIiBiaXRzIHRvIGJlIHNldCB0byAxLiAgVGhpcyBtYXkgYmUgYWNoaWV2ZWQgYnkKKwkgKiAgd3JpdGluZyAweEYgYXQgYml0IDQuCisJICoKKwkgKiBUaGUgTURSIChtZXNzYWdlIGRhdGEgcmVnaXN0ZXIpIGZvcm1hdCBpcyB0aGUgZm9sbG93aW5nOgorCSAqICAgMS4gWzMxOjBdOiBSZWFkL1dyaXRlIERhdGEKKwkgKgorCSAqICBEYXRhIGJlaW5nIHJlYWQgZnJvbSB0aGlzIHJlZ2lzdGVyIGlzIG9ubHkgYXZhaWxhYmxlIGFmdGVyCisJICogIHdyaXRpbmcgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2wgbWVzc2FnZSB0byB0aGUgTUNSCisJICogIHJlZ2lzdGVyLgorCSAqCisJICogIERhdGEgYmVpbmcgd3JpdHRlbiB0byB0aGlzIHJlZ2lzdGVyIG11c3QgYmUgd3JpdHRlbiBiZWZvcmUKKwkgKiAgd3JpdGluZyB0aGUgYXBwcm9wcmlhdGUgY29udHJvbCBtZXNzYWdlIHRvIHRoZSBNQ1IKKwkgKiAgcmVnaXN0ZXIuCisJKi8KKworCWludCByZXN1bHQ7CisKKwkvKiBDb25zdHJ1Y3QgY29udHJvbCBtZXNzYWdlICovCisJdTMyIGNvbnN0IG1lc3NhZ2UgPQorCQkgKExOQ19NRVNTQUdFX1JFQURfT1BDT0RFIDw8IDI0KQorCQkgfCAoTE5DX0JVTklUX1BPUlQgPDwgMTYpCisJCSB8IChvZmZzZXQgPDwgOCkKKwkJIHwgKExOQ19NRVNTQUdFX0JZVEVfV1JJVEVfRU5BQkxFUyA8PCA0KTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgIk9mZnNldCBmb3IgJ2dldCcgTE5DIE1TRyBpcyAleFxuIiwgb2Zmc2V0KTsKKworCWlmIChhZGRyID09IDApIHsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyoKKwkqIFdlIHN5bmNocm9uaXplIGFjY2VzcyB0byB0aGUgTGluY3JvZnQgTUNSIGFuZCBNRFIgcmVnaXN0ZXJzCisJKiB1bnRpbCBCT1RIIHRoZSBjb21tYW5kIGlzIGlzc3VlZCB0aHJvdWdoIHRoZSBNQ1IgcmVnaXN0ZXIKKwkqIGFuZCB0aGUgY29ycmVzcG9uZGluZyBkYXRhIGlzIHJlYWQgZnJvbSB0aGUgTURSIHJlZ2lzdGVyLgorCSogT3RoZXJ3aXNlIGEgcmFjZSBjb25kaXRpb24gd291bGQgZXhpc3QgYmV0d2VlbiBhY2Nlc3NlcyB0bworCSogYm90aCByZWdpc3RlcnMuCisJKi8KKworCW11dGV4X2xvY2soJmxuY19yZWdfbXV0ZXgpOworCisJLyogU2VuZCB0aGUgY29udHJvbCBtZXNzYWdlICovCisJcmVzdWx0ID0gcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBMTkNfTUNSX09GRlNFVCwgbWVzc2FnZSk7CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJSZXN1bHQgZnJvbSBzZW5kIGN0bCByZWdpc3RlciBpcyAleFxuIiwgcmVzdWx0KTsKKworCWlmICghcmVzdWx0KSB7CisJCXJlc3VsdCA9IHBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBMTkNfTURSX09GRlNFVCwKKwkJCSh1MzIgKilhZGRyKTsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LAorCQkJIlJlc3VsdCBmcm9tIHJlYWQgZGF0YSByZWdpc3RlciBpcyAleFxuIiwgcmVzdWx0KTsKKworCQlkZXZfZGJnKCZwZGV2LT5kZXYsCisJCQkiVmFsdWUgcmVhZCBmcm9tIGRhdGEgcmVnaXN0ZXIgaXMgJWx4XG4iLAorCQkJICh1bnNpZ25lZCBsb25nKSphZGRyKTsKKwl9CisKKwltdXRleF91bmxvY2soJmxuY19yZWdfbXV0ZXgpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGludCBzZXRfcmFyX2FkZHJlc3Moc3RydWN0IHBjaV9kZXYgKnBkZXYsCisJaW50IG9mZnNldCwKKwlkbWFfYWRkcl90IGFkZHIpCit7CisJLyoKKwkqIERhdGEgYmVpbmcgd3JpdHRlbiB0byB0aGlzIHJlZ2lzdGVyIG11c3QgYmUgd3JpdHRlbiBiZWZvcmUKKwkqIHdyaXRpbmcgdGhlIGFwcHJvcHJpYXRlIGNvbnRyb2wgbWVzc2FnZSB0byB0aGUgTUNSCisJKiByZWdpc3Rlci4KKwkqIEBub3RlIFNlZSByYXJfZ2V0X2FkZHJlc3MoKSBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUKKwkqIG1lc3NhZ2UgYnVzIGludGVyZmFjZSBiZWluZyB1c2VkIGhlcmUuCisJKi8KKworCWludCByZXN1bHQgPSAwOworCisJLyogQ29uc3RydWN0IGNvbnRyb2wgbWVzc2FnZSAqLworCXUzMiBjb25zdCBtZXNzYWdlID0gKExOQ19NRVNTQUdFX1dSSVRFX09QQ09ERSA8PCAyNCkKKwkJfCAoTE5DX0JVTklUX1BPUlQgPDwgMTYpCisJCXwgKG9mZnNldCA8PCA4KQorCQl8IChMTkNfTUVTU0FHRV9CWVRFX1dSSVRFX0VOQUJMRVMgPDwgNCk7CisKKwlpZiAoYWRkciA9PSAwKSB7CisJCVdBUk5fT04oMSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9kYmcoJnBkZXYtPmRldiwgIk9mZnNldCBmb3IgJ3NldCcgTE5DIE1TRyBpcyAleFxuIiwgb2Zmc2V0KTsKKworCS8qCisJKiBXZSBzeW5jaHJvbml6ZSBhY2Nlc3MgdG8gdGhlIExpbmNyb2Z0IE1DUiBhbmQgTURSIHJlZ2lzdGVycworCSogdW50aWwgQk9USCB0aGUgY29tbWFuZCBpcyBpc3N1ZWQgdGhyb3VnaCB0aGUgTUNSIHJlZ2lzdGVyCisJKiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgZGF0YSBpcyByZWFkIGZyb20gdGhlIE1EUiByZWdpc3Rlci4KKwkqIE90aGVyd2lzZSBhIHJhY2UgY29uZGl0aW9uIHdvdWxkIGV4aXN0IGJldHdlZW4gYWNjZXNzZXMgdG8KKwkqIGJvdGggcmVnaXN0ZXJzLgorCSovCisKKwltdXRleF9sb2NrKCZsbmNfcmVnX211dGV4KTsKKworCS8qIFNlbmQgdGhlIGNvbnRyb2wgbWVzc2FnZSAqLworCXJlc3VsdCA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgTE5DX01EUl9PRkZTRVQsIGFkZHIpOworCisJZGV2X2RiZygmcGRldi0+ZGV2LCAiUmVzdWx0IGZyb20gd3JpdGUgZGF0YSByZWdpc3RlciBpcyAleFxuIiwgcmVzdWx0KTsKKworCWlmICghcmVzdWx0KSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwKKwkJCSJWYWx1ZSB3cml0dGVuIHRvIGRhdGEgcmVnaXN0ZXIgaXMgJWx4XG4iLAorCQkJICh1bnNpZ25lZCBsb25nKWFkZHIpOworCisJCXJlc3VsdCA9IHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgTE5DX01DUl9PRkZTRVQsIG1lc3NhZ2UpOworCisJCWRldl9kYmcoJnBkZXYtPmRldiwgIlJlc3VsdCBmcm9tIHNlbmQgY3RsIHJlZ2lzdGVyIGlzICV4XG4iLAorCQkJcmVzdWx0KTsKKwl9CisKKwltdXRleF91bmxvY2soJmxuY19yZWdfbXV0ZXgpOworCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyogSW5pdGlhbGl6ZSBSQVIgcGFyYW1ldGVycywgc3VjaCBhcyBidXMgYWRkcmVzc2VzLCBldGMuCisqLworc3RhdGljIGludCBpbml0X3Jhcl9wYXJhbXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJlc3VsdCA9IDA7CisKKwkvKiBSZXRyaWV2ZSBSQVIgc3RhcnQgYW5kIGVuZCBidXMgYWRkcmVzc2VzLgorCSogQWNjZXNzIHRoZSBSQVIgcmVnaXN0ZXJzIHRocm91Z2ggdGhlIExpbmNyb2Z0IE1lc3NhZ2UgQnVzCisJKiBJbnRlcmZhY2Ugb24gUENJIGRldmljZTogMDA6MDAuMCBIb3N0IGJyaWRnZS4KKwkqLworCisJZm9yIChpID0gMDsgaSA8IE1SU1RfTlVNX1JBUjsgKytpKSB7CisJCXN0cnVjdCBSQVJfb2Zmc2V0cyBjb25zdCAqb2Zmc2V0ID0KKwkJCSZteV9yYXJfZGV2aWNlLnJhcl9vZmZzZXRzW2ldOworCQlzdHJ1Y3QgUkFSX2FkZHJlc3NfcmFuZ2UgKmFkZHIgPSAmbXlfcmFyX2RldmljZS5yYXJfYWRkcltpXTsKKworCWlmICgocmV0cmlldmVfcmFyX2FkZHIocGRldiwgb2Zmc2V0LT5sb3csICZhZGRyLT5sb3cpICE9IDApCisJCXx8IChyZXRyaWV2ZV9yYXJfYWRkcihwZGV2LCBvZmZzZXQtPmhpZ2gsICZhZGRyLT5oaWdoKSAhPSAwKSkgeworCQlyZXN1bHQgPSAtMTsKKwkJYnJlYWs7CisJCX0KKworCQkvKgorCQkqIE9ubHkgdGhlIHVwcGVyIDIyIGJpdHMgb2YgdGhlIFJBUiBhZGRyZXNzZXMgYXJlCisJCSogc3RvcmVkIGluIHRoZWlyIGNvcnJlc3BvbmRpbmcgUkFSIHJlZ2lzdGVycyBzbyB3ZQorCQkqIG11c3Qgc2V0IHRoZSBsb3dlciAxMCBiaXRzIGFjY29yZGluZ2x5LgorCisJCSogVGhlIGxvdyBhZGRyZXNzIGhhcyBpdHMgbG93ZXIgMTAgYml0cyBjbGVhcmVkLCBhbmQKKwkJKiB0aGUgaGlnaCBhZGRyZXNzIGhhcyBhbGwgaXRzIGxvd2VyIDEwIGJpdHMgc2V0LAorCQkqIGUuZy46CisJCSogbG93ID0gMHgyZmZmZmMwMAorCQkqLworCisJCWFkZHItPmxvdyAmPSAoZG1hX2FkZHJfdCkweGZmZmZmYzAwdTsKKworCQkvKgorCQkqIFNldCBiaXRzIDk6MCBvbiB1cHBzZXIgYWRkcmVzcyBpZiBiaXRzIDMxOjEwIGFyZSBub24KKwkJKiB6ZXJvOyBvdGhlcndpemUgY2xlYXIgYWxsIGJpdHMKKwkJKi8KKworCQlpZiAoKGFkZHItPmhpZ2ggJiAweGZmZmZmYzAwdSkgPT0gMCkKKwkJCWFkZHItPmhpZ2ggPSAwOworCQllbHNlCisJCQlhZGRyLT5oaWdoIHw9IDB4M2ZmdTsKKwl9CisJLyogRG9uZSBhY2Nlc3NpbmcgdGhlIGRldmljZS4gKi8KKworCWlmIChyZXN1bHQgPT0gMCkgeworCQlpbnQgejsKKwkJZm9yICh6ID0gMDsgeiAhPSBNUlNUX05VTV9SQVI7ICsreikgeworCQkJLyoKKwkJCSogIkJSQVIiIHJlZmVycyB0byB0aGUgUkFSIHJlZ2lzdGVycyBpbiB0aGUKKwkJCSogTGluY3JvZnQgQi11bml0LgorCQkJKi8KKwkJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJCUkFSWyV1XSBidXMgYWRkcmVzcyByYW5nZSA9ICIKKwkJCSAgIlslbHgsICVseF1cbiIsIHosCisJCQkgICh1bnNpZ25lZCBsb25nKW15X3Jhcl9kZXZpY2UucmFyX2FkZHJbel0ubG93LAorCQkJICAodW5zaWduZWQgbG9uZylteV9yYXJfZGV2aWNlLnJhcl9hZGRyW3pdLmhpZ2gpOworCQl9CisJfQorCisJcmV0dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIFRoZSByYXJfZ2V0X2FkZHJlc3MgZnVuY3Rpb24gaXMgdXNlZCBieSBvdGhlciBkZXZpY2UgZHJpdmVycworICogdG8gb2J0YWluIFJBUiBhZGRyZXNzIGluZm9ybWF0aW9uIG9uIGEgUkFSLiBJdCB0YWtlcyB0aHJlZQorICogcGFyYW1ldGVyczoKKyAqCisgKiBpbnQgcmFyX2luZGV4CisgKiBUaGUgcmFyX2luZGV4IGlzIGFuIGluZGV4IHRvIHRoZSByYXIgZm9yIHdoaWNoIHlvdSB3aXNoIHRvIHJldHJpZXZlCisgKiB0aGUgYWRkcmVzcyBpbmZvcm1hdGlvbi4KKyAqIFZhbHVlcyBjYW4gYmUgMCwxLCBvciAyLgorICoKKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEgMCB1cG9uIHN1Y2Nlc3Mgb3IgYSAtMSBpZiB0aGVyZSBpcyBubyBSQVIKKyAqIGZhY2lsaXR5IG9uIHRoaXMgc3lzdGVtLgorICovCitpbnQgcmFyX2dldF9hZGRyZXNzKGludCByYXJfaW5kZXgsCisJZG1hX2FkZHJfdCAqc3RhcnRfYWRkcmVzcywKKwlkbWFfYWRkcl90ICplbmRfYWRkcmVzcykKK3sKKwlpbnQgcmVzdWx0ID0gLUVOT0RFVjsKKworCWlmIChteV9yYXJfZGV2aWNlLnJlZ2lzdGVyZWQpIHsKKwkJaWYgKHN0YXJ0X2FkZHJlc3MgPT0gMCB8fCBlbmRfYWRkcmVzcyA9PSAwCisJCQl8fCByYXJfaW5kZXggPj0gTVJTVF9OVU1fUkFSIHx8IHJhcl9pbmRleCA8IDApIHsKKwkJCXJlc3VsdCA9IC1FSU5WQUw7CisJCX0gZWxzZSB7CisJCQkqc3RhcnRfYWRkcmVzcyA9CisJCQkJbXlfcmFyX2RldmljZS5yYXJfYWRkcltyYXJfaW5kZXhdLmxvdzsKKwkJCSplbmRfYWRkcmVzcyA9CisJCQkJbXlfcmFyX2RldmljZS5yYXJfYWRkcltyYXJfaW5kZXhdLmhpZ2g7CisKKwkJCXJlc3VsdCA9IDA7CisJCX0KKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTChyYXJfZ2V0X2FkZHJlc3MpOworCisvKgorICogVGhlIHJhcl9sb2NrIGZ1bmN0aW9uIGlzIHVlZCBieSBvdGhlciBkZXZpY2UgZHJpdmVycyB0byBsb2NrIGFuIFJBUi4KKyAqIG9uY2UgYW4gUkFSIGlzIGxvY2tlZCwgaXQgc3RheXMgbG9ja2VkIHVudGlsIHRoZSBuZXh0IHN5c3RlbSByZWJvb3QuCisgKiBUaGUgZnVuY3Rpb24gdGFrZXMgb25lIHBhcmFtZXRlcjoKKyAqCisgKiBpbnQgcmFyX2luZGV4CisgKiBUaGUgcmFyX2luZGV4IGlzIGFuIGluZGV4IHRvIHRoZSByYXIgdGhhdCB5b3Ugd2FudCB0byBsb2NrLgorICogVmFsdWVzIGNhbiBiZSAwLDEsIG9yIDIuCisgKgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgYSAwIHVwb24gc3VjY2VzcyBvciBhIC0xIGlmIHRoZXJlIGlzIG5vIFJBUgorICogZmFjaWxpdHkgb24gdGhpcyBzeXN0ZW0uCisgKi8KK2ludCByYXJfbG9jayhpbnQgcmFyX2luZGV4KQoreworCWludCByZXN1bHQgPSAtRU5PREVWOworCisJaWYgKHJhcl9pbmRleCA+PSBNUlNUX05VTV9SQVIgfHwgcmFyX2luZGV4IDwgMCkgeworCQlyZXN1bHQgPSAtRUlOVkFMOworCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWRldl9kYmcoJm15X3Jhcl9kZXZpY2UucmFyX2Rldi0+ZGV2LCAicmFyX2xvY2sgbXV0ZXggbG9ja2luZ1xuIik7CisJbXV0ZXhfbG9jaygmcmFyX211dGV4KTsKKworCWlmIChteV9yYXJfZGV2aWNlLnJlZ2lzdGVyZWQpIHsKKworCQlkbWFfYWRkcl90IGxvdyA9IG15X3Jhcl9kZXZpY2UucmFyX2FkZHJbcmFyX2luZGV4XS5sb3cgJgorCQkJMHhmZmZmZmMwMHU7CisKKwkJZG1hX2FkZHJfdCBoaWdoID0gbXlfcmFyX2RldmljZS5yYXJfYWRkcltyYXJfaW5kZXhdLmhpZ2ggJgorCQkJMHhmZmZmZmMwMHU7CisKKwkJLyoKKwkJKiBPbmx5IGFsbG93IEkvTyBmcm9tIHRoZSBncmFwaGljcyBhbmQgTGFuZ3dlbGw7CisJCSogTm90IGZyb20gdGhlIHg5NiBwcm9jZXNzb3IKKwkJKi8KKwkJaWYgKHJhcl9pbmRleCA9PSAoaW50KVJBUl9UWVBFX1ZJREVPKSB7CisJCQlsb3cgfD0gMHgwMDAwMDAwOTsKKwkJCWhpZ2ggfD0gMHgwMDAwMDAxNTsKKwkJfQorCisJCWVsc2UgaWYgKHJhcl9pbmRleCA9PSAoaW50KVJBUl9UWVBFX0FVRElPKSB7CisJCQkvKiBPbmx5IGFsbG93IEkvTyBmcm9tIExhbmd3ZWxsOyBub3RoaW5nIGZyb20geDg2ICovCisJCQlsb3cgfD0gMHgwMDAwMDAwODsKKwkJCWhpZ2ggfD0gMHgwMDAwMDAxODsKKwkJfQorCisJCWVsc2UKKwkJCS8qIFJlYWQtb25seSBmcm9tIGFsbCBhZ2VudHMgKi8KKwkJCWhpZ2ggfD0gMHgwMDAwMDAxODsKKworCQkvKgorCQkqIE5vdyBwcm9ncmFtIHRoZSByZWdpc3RlciB1c2luZyB0aGUgTGluY3JvZnQgbWVzc2FnZQorCQkqIGJ1cyBpbnRlcmZhY2UuCisJCSovCisJCXJlc3VsdCA9IHNldF9yYXJfYWRkcmVzcyhteV9yYXJfZGV2aWNlLnJhcl9kZXYsCisJCQlteV9yYXJfZGV2aWNlLnJhcl9vZmZzZXRzW3Jhcl9pbmRleF0ubG93LAorCQkJbG93KTsKKworCQlpZiAocmVzdWx0ID09IDApCisJCQlyZXN1bHQgPSBzZXRfcmFyX2FkZHJlc3MoCisJCQlteV9yYXJfZGV2aWNlLnJhcl9kZXYsCisJCQlteV9yYXJfZGV2aWNlLnJhcl9vZmZzZXRzW3Jhcl9pbmRleF0uaGlnaCwKKwkJCWhpZ2gpOworCX0KKworCWRldl9kYmcoJm15X3Jhcl9kZXZpY2UucmFyX2Rldi0+ZGV2LCAicmFyX2xvY2sgbXV0ZXggdW5sb2NraW5nXG4iKTsKKwltdXRleF91bmxvY2soJnJhcl9tdXRleCk7CisJcmV0dXJuIHJlc3VsdDsKK30KK0VYUE9SVF9TWU1CT0wocmFyX2xvY2spOworCisvKiBUaGUgcmVnaXN0ZXJfcmFyIGZ1bmN0aW9uIGlzIHRvIHVzZWQgYnkgb3RoZXIgZGV2aWNlIGRyaXZlcnMKKyAqIHRvIGVuc3VyZSB0aGF0IHRoaXMgZHJpdmVyIGlzIHJlYWR5LiBBcyB3ZSBjYW5ub3QgYmUgc3VyZSBvZgorICogdGhlIGNvbXBpbGUvZXhlY3V0ZSBvcmRlciBvZiBkaXJ2ZXJzIGluIHRoZXIga2VybmVsLCBpdCBpcworICogYmVzdCB0byBnaXZlIHRoaXMgZHJpdmVyIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB3aGVuCisgKiBpdCBpcyByZWFkeSB0byBnaXZlIG91dCBhZGRyZXNzZXMuIFRoZSBjYWxsYmFjayBmdW5jdGlvbgorICogd291bGQgaGF2ZSB0aG9zZSBzdGVwcyB0aGF0IGNvbnRpbnVlIHRoZSBpbml0aWFsaXphdGlvbiBvZgorICogYSBkcml2ZXIgdGhhdCBkbyByZXF1aXJlIGEgdmFsaWQgUkFSIGFkZHJlc3MuIE9uZSBvZiB0aG9zZQorICogc3RlcHMgd291bGQgYmUgdG8gY2FsbCByYXJfZ2V0X2FkZHJlc3MoKQorICogVGhpcyBmdW5jdGlvbiByZXR1cm4gMCBvbiBzdWNjZXNzIGFuIC0xIG9uIGZhaWx1cmUuCisqLworaW50IHJlZ2lzdGVyX3JhcihpbnQgKCpjYWxsYmFjaykodm9pZCAqeW91cnBhcmFtZXRlciksIHZvaWQgKnlvdXJwYXJhbWV0ZXIpCit7CisKKwlpbnQgcmVzdWx0ID0gLUVOT0RFVjsKKworCWlmIChjYWxsYmFjayA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnJhcl9tdXRleCk7CisKKwlpZiAobXlfcmFyX2RldmljZS5yZWdpc3RlcmVkKSB7CisKKwkJbXV0ZXhfdW5sb2NrKCZyYXJfbXV0ZXgpOworCQkvKgorCQkqIGlmIHRoZSBkcml2ZXIgYWxyZWFkeSByZWdpc3RlcmVkLCB0aGVuIHdlIGNhbiBzaW1wbHkKKwkJKiBjYWxsIHRoZSBjYWxsYmFjayByaWdodCBub3cKKwkJKi8KKworCQlyZXR1cm4gKCpjYWxsYmFjaykoeW91cnBhcmFtZXRlcik7CisJfQorCisJaWYgKG51bV9jbGllbnRzIDwgTVJTVF9OVU1fUkFSKSB7CisKKwkJY2xpZW50c1tudW1fY2xpZW50c10uY2xpZW50X2NhbGxiYWNrID0gY2FsbGJhY2s7CisJCWNsaWVudHNbbnVtX2NsaWVudHNdLmN1c3RvbWVyX2RhdGEgPSB5b3VycGFyYW1ldGVyOworCQludW1fY2xpZW50cyArPSAxOworCQlyZXN1bHQgPSAwOworCX0KKworCW11dGV4X3VubG9jaygmcmFyX211dGV4KTsKKwlyZXR1cm4gcmVzdWx0OworCit9CitFWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX3Jhcik7CisKKy8qIFN1c3BlbmQgLSByZXR1cm5zIC1FTk9TWVMgKi8KK3N0YXRpYyBpbnQgcmFyX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXJldHVybiAtRU5PU1lTOworfQorCitzdGF0aWMgaW50IHJhcl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlyZXR1cm4gLUVOT1NZUzsKK30KKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIHRoZSBkcml2ZXIgd2l0aCB0aGUgZGV2aWNlIHN1YnN5c3RlbSAoCisgKiBlaXRoZXIgUENJLCBVU0IsIGV0YykuCisgKiBGdW5jdGlvbiB0aGF0IGlzIGFjdGl2YWVkIG9uIHRoZSBzdWNjZXNmdWwgcHJvYmUgb2YgdGhlIFJBUiBkZXZpY2UKKyAqIChNb29yZXN0b3duIGhvc3QgY29udHJvbGxlcikuCisgKi8KK3N0YXRpYyBpbnQgcmFyX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgZXJyb3I7CisJaW50IGNvdW50ZXI7CisKKwlkZXZfZGJnKCZkZXYtPmRldiwgIlBDSSBwcm9iZSBzdGFydGluZ1xuIik7CisKKwkvKiBlbmFibGUgdGhlIGRldmljZSAqLworCWVycm9yID0gcGNpX2VuYWJsZV9kZXZpY2UoZGV2KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmZGV2LT5kZXYsCisJCQkiRXJyb3IgZW5hYmxpbmcgUkFSIHJlZ2lzdGVyIFBDSSBkZXZpY2VcbiIpOworCQlnb3RvIGVuZF9mdW5jdGlvbjsKKwl9CisKKwkvKiB3ZSBoYXZlIG9ubHkgb25lIGRldmljZTsgZmlsbCBpbiB0aGUgcmFyX2RldmljZSBzdHJ1Y3R1cmUgKi8KKwlteV9yYXJfZGV2aWNlLnJhcl9kZXYgPSBkZXY7CisKKwkvKgorCSogSW5pdGlhbGl6ZSB0aGUgUkFSIHBhcmFtZXRlcnMsIHdoaWNoIGhhdmUgdG8gYmUgcmV0cmlldmVkCisJKiB2aWEgdGhlIG1lc3NhZ2UgYnVzIGludGVyZmFjZS4KKwkqLworCWVycm9yID0gaW5pdF9yYXJfcGFyYW1zKGRldik7CisJaWYgKGVycm9yKSB7CisJCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworCisJCWRldl9lcnIoJmRldi0+ZGV2LAorCQkJIkVycm9yIHJldHJpZXZpbmcgUkFSIGFkZHJlc3Nlc1xuIik7CisKKwkJZ290byBlbmRfZnVuY3Rpb247CisJfQorCisJZGV2X2RiZygmZGV2LT5kZXYsICJQQ0kgcHJvYmUgbG9ja2luZ1xuIik7CisJbXV0ZXhfbG9jaygmcmFyX211dGV4KTsKKwlteV9yYXJfZGV2aWNlLnJlZ2lzdGVyZWQgPSAxOworCisJLyogbm93IGNhbGwgYW55b25lIHdobyBoYXMgcmVnaXN0ZXJlZCAodXNpbmcgY2FsbGJhY2tzKSAqLworCWZvciAoY291bnRlciA9IDA7IGNvdW50ZXIgPCBudW1fY2xpZW50czsgY291bnRlciArPSAxKSB7CisJCWlmIChjbGllbnRzW2NvdW50ZXJdLmNsaWVudF9jYWxsYmFjaykgeworCQkJZXJyb3IgPSAoKmNsaWVudHNbY291bnRlcl0uY2xpZW50X2NhbGxiYWNrKSgKKwkJCQljbGllbnRzW2NvdW50ZXJdLmN1c3RvbWVyX2RhdGEpOworCQkJLyogc2V0IGNhbGxiYWNrIHRvIE5VTEwgdG8gaW5kaWNhdGUgaXQgaGFzIGJlZW4gZG9uZSAqLworCQkJY2xpZW50c1tjb3VudGVyXS5jbGllbnRfY2FsbGJhY2sgPSBOVUxMOworCQkJCWRldl9kYmcoJm15X3Jhcl9kZXZpY2UucmFyX2Rldi0+ZGV2LAorCQkJCSJDYWxsYmFjayBjYWxsZWQgZm9yICVkXG4iLAorCQkJY291bnRlcik7CisJCX0KKwl9CisKKwlkZXZfZGJnKCZkZXYtPmRldiwgIlBDSSBwcm9iZSB1bmxvY2tpbmdcbiIpOworCW11dGV4X3VubG9jaygmcmFyX211dGV4KTsKKworZW5kX2Z1bmN0aW9uOgorCisJcmV0dXJuIGVycm9yOworfQorCitjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCByYXJfcGNpX2lkX3RibFtdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfUkFSX0RFVklDRV9JRCkgfSwKKwl7IDAgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHJhcl9wY2lfaWRfdGJsKTsKKworY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKm15X2lkX3RhYmxlID0gcmFyX3BjaV9pZF90Ymw7CisKKy8qIGZpZWxkIGZvciByZWdpc3RlcmluZyBkcml2ZXIgdG8gUENJIGRldmljZSAqLworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJhcl9wY2lfZHJpdmVyID0geworCS5uYW1lID0gInJhcl9yZWdpc3Rlcl9kcml2ZXIiLAorCS5pZF90YWJsZSA9IHJhcl9wY2lfaWRfdGJsLAorCS5wcm9iZSA9IHJhcl9wcm9iZSwKKwkuc3VzcGVuZCA9IHJhcl9zdXNwZW5kLAorCS5yZXN1bWUgPSByYXJfcmVzdW1lCit9OworCitzdGF0aWMgaW50IF9faW5pdCByYXJfaW5pdF9oYW5kbGVyKHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJnJhcl9wY2lfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHJhcl9leGl0X2hhbmRsZXIodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnJhcl9wY2lfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQocmFyX2luaXRfaGFuZGxlcik7Cittb2R1bGVfZXhpdChyYXJfZXhpdF9oYW5kbGVyKTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJJbnRlbCBSZXN0cmljdGVkIEFjY2VzcyBSZWdpb24gUmVnaXN0ZXIgRHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcmFyX3JlZ2lzdGVyL3Jhcl9yZWdpc3Rlci5oIGIvZHJpdmVycy9zdGFnaW5nL3Jhcl9yZWdpc3Rlci9yYXJfcmVnaXN0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWFkZTBmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Jhcl9yZWdpc3Rlci9yYXJfcmVnaXN0ZXIuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdmVyc2lvbiAyIG9mIHRoZSBHTlUgR2VuZXJhbAorICogUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorICogdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZAorICogd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAgMDIxMTEtMTMwNywgVVNBLgorICogVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcworICogZGlzdHJpYnV0aW9uIGluIHRoZSBmaWxlIGNhbGxlZCBDT1BZSU5HLgorICovCisKKworI2lmbmRlZiBfUkFSX1JFR0lTVEVSX0gKKyNkZWZpbmUgX1JBUl9SRUdJU1RFUl9ICisKKyMgaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworLyogZm9sbG93aW5nIGFyZSB1c2VkIGJvdGggaW4gZHJpdmVycyBhcyB3ZWxsIGFzIHVzZXIgc3BhY2UgYXBwcyAqLworZW51bSBSQVJfdHlwZSB7CisJUkFSX1RZUEVfVklERU8gPSAwLAorCVJBUl9UWVBFX0FVRElPLAorCVJBUl9UWVBFX0lNQUdFLAorCVJBUl9UWVBFX0RBVEEKK307CisKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qIFBDSSBkZXZpY2UgaWQgZm9yIGNvbnRyb2xsZXIgKi8KKyNkZWZpbmUgUENJX1JBUl9ERVZJQ0VfSUQgMHg0MTEwCisKKy8qIFRoZSByZWdpc3Rlcl9yYXIgZnVuY3Rpb24gaXMgdG8gdXNlZCBieSBvdGhlciBkZXZpY2UgZHJpdmVycworICogdG8gZW5zdXJlIHRoYXQgdGhpcyBkcml2ZXIgaXMgcmVhZHkuIEFzIHdlIGNhbm5vdCBiZSBzdXJlIG9mCisgKiB0aGUgY29tcGlsZS9leGVjdXRlIG9yZGVyIG9mIGRpcnZlcnMgaW4gdGhlciBrZXJuZWwsIGl0IGlzCisgKiBiZXN0IHRvIGdpdmUgdGhpcyBkcml2ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdoZW4KKyAqIGl0IGlzIHJlYWR5IHRvIGdpdmUgb3V0IGFkZHJlc3Nlcy4gVGhlIGNhbGxiYWNrIGZ1bmN0aW9uCisgKiB3b3VsZCBoYXZlIHRob3NlIHN0ZXBzIHRoYXQgY29udGludWUgdGhlIGluaXRpYWxpemF0aW9uIG9mCisgKiBhIGRyaXZlciB0aGF0IGRvIHJlcXVpcmUgYSB2YWxpZCBSQVIgYWRkcmVzcy4gT25lIG9mIHRob3NlCisgKiBzdGVwcyB3b3VsZCBiZSB0byBjYWxsIGdldF9yYXJfYWRkcmVzcygpCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybiAwIG9uIHN1Y2Nlc3MgYW4gLTEgb24gZmFpbHVyZS4KKyAqLworaW50IHJlZ2lzdGVyX3JhcihpbnQgKCpjYWxsYmFjaykodm9pZCAqeW91cnBhcmFtZXRlciksIHZvaWQgKnlvdXJwYXJhbWV0ZXIpOworCisvKiBUaGUgZ2V0X3Jhcl9hZGRyZXNzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgb3RoZXIgZGV2aWNlIGRyaXZlcnMKKyAqIHRvIG9idGFpbiBSQVIgYWRkcmVzcyBpbmZvcm1hdGlvbiBvbiBhIFJBUi4gSXQgdGFrZXMgdHdvCisgKiBwYXJhbWV0ZXI6CisgKgorICogaW50IHJhcl9pbmRleAorICogVGhlIHJhcl9pbmRleCBpcyBhbiBpbmRleCB0byB0aGUgcmFyIGZvciB3aGljaCB5b3Ugd2lzaCB0byByZXRyaWV2ZQorICogdGhlIGFkZHJlc3MgaW5mb3JtYXRpb24uCisgKiBWYWx1ZXMgY2FuIGJlIDAsMSwgb3IgMi4KKyAqCisgKiBzdHJ1Y3QgUkFSX2FkZHJlc3Nfc3RydWN0IGlzIGEgcG9pbnRlciB0byBhIHBsYWNlIHRvIHdoaWNoIHRoZSBmdW5jdGlvbgorICogY2FuIHJldHVybiB0aGUgYWRkcmVzcyBzdHJ1Y3R1cmUgZm9yIHRoZSBSQVIuCisgKgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgYSAwIHVwb24gc3VjY2VzcyBvciBhIC0xIGlmIHRoZXJlIGlzIG5vIFJBUgorICogZmFjaWxpdHkgb24gdGhpcyBzeXN0ZW0uCisgKi8KK2ludCByYXJfZ2V0X2FkZHJlc3MoaW50IHJhcl9pbmRleCwKKwkJZG1hX2FkZHJfdCAqc3RhcnRfYWRkcmVzcywKKwkJZG1hX2FkZHJfdCAqZW5kX2FkZHJlc3MpOworCisvKiBUaGUgbG9ja19yYXIgZnVuY3Rpb24gaXMgdWVkIGJ5IG90aGVyIGRldmljZSBkcml2ZXJzIHRvIGxvY2sgYW4gUkFSLgorICogb25jZSBhbiBSQVIgaXMgbG9ja2VkLCBpdCBzdGF5cyBsb2NrZWQgdW50aWwgdGhlIG5leHQgc3lzdGVtIHJlYm9vdC4KKyAqIFRoZSBmdW5jdGlvbiB0YWtlcyBvbmUgcGFyYW1ldGVyOgorICoKKyAqIGludCByYXJfaW5kZXgKKyAqIFRoZSByYXJfaW5kZXggaXMgYW4gaW5kZXggdG8gdGhlIHJhciB0aGF0IHlvdSB3YW50IHRvIGxvY2suCisgKiBWYWx1ZXMgY2FuIGJlIDAsMSwgb3IgMi4KKyAqCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIDAgdXBvbiBzdWNjZXNzIG9yIGEgLTEgaWYgdGhlcmUgaXMgbm8gUkFSCisgKiBmYWNpbGl0eSBvbiB0aGlzIHN5c3RlbS4KKyAqLworaW50IHJhcl9sb2NrKGludCByYXJfaW5kZXgpOworCisjZW5kaWYgIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAgLyogX1JBUl9SRUdJU1RFUl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL0tjb25maWcKaW5kZXggZjk5NjJiNi4uZjNhN2U0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvS2NvbmZpZwpAQCAtMyw2ICszLDggQEAKIAlkZXBlbmRzIG9uIFBDSSAmJiBYODYgJiYgV0xBTgogCXNlbGVjdCBXSVJFTEVTU19FWFQKIAlzZWxlY3QgV0VYVF9QUklWCisJc2VsZWN0IENSQ19DQ0lUVAorCXNlbGVjdCBGV19MT0FERVIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIHRoZSBSYWxpbmsgMjg2MCBhbmQgMzA5MAogCSAgd2lyZWxlc3MgY2hpcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9maXJtd2FyZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vZmlybXdhcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZlY2QzMi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9maXJtd2FyZS5oCisrKyAvZGV2L251bGwKQEAgLTEsNTU4ICswLDAgQEAKLS8qCi0gQ29weXJpZ2h0IChjKSAyMDA3LCBSYWxpbmsgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbgotIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0KLSBSZWRpc3RyaWJ1dGlvbi4gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gYmluYXJ5IGZvcm0sIHdpdGhvdXQKLSBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gbWV0OgotCi0gCSogUmVkaXN0cmlidXRpb25zIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUKLSAJZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscwotIAlwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gCSogTmVpdGhlciB0aGUgbmFtZSBvZiBSYWxpbmsgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cwotIAlzdXBwbGllcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCi0gCXNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIAkqIE5vIHJldmVyc2UgZW5naW5lZXJpbmcsIGRlY29tcGlsYXRpb24sIG9yIGRpc2Fzc2VtYmx5IG9mIHRoaXMgc29mdHdhcmUKLSAJaXMgcGVybWl0dGVkLgotCi0gTGltaXRlZCBwYXRlbnQgbGljZW5zZS4gUmFsaW5rIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gZ3JhbnRzIGEgd29ybGQtd2lkZSwKLSByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSB1bmRlciBwYXRlbnRzIGl0IG5vdyBvciBoZXJlYWZ0ZXIKLSBvd25zIG9yIGNvbnRyb2xzIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBpbXBvcnQsIG9mZmVyIHRvIHNlbGwgYW5kCi0gc2VsbCAoIlV0aWxpemUiKSB0aGlzIHNvZnR3YXJlLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkKLSBzdWNoIHBhdGVudCBpcyBuZWNlc3NhcnkgdG8gVXRpbGl6ZSB0aGUgc29mdHdhcmUgYWxvbmUsIG9yIGluCi0gY29tYmluYXRpb24gd2l0aCBhbiBvcGVyYXRpbmcgc3lzdGVtIGxpY2Vuc2VkIHVuZGVyIGFuIGFwcHJvdmVkIE9wZW4KLSBTb3VyY2UgbGljZW5zZSBhcyBsaXN0ZWQgYnkgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUgYXQKLSBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMuICBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCi0gYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoaXMgc29mdHdhcmUuICBObyBoYXJkd2FyZSBwZXIKLSBzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuCi0KLSBESVNDTEFJTUVSLiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECi0gQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLAotIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECi0gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQotIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAotIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUwotIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKLSBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCi0gVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAotIERBTUFHRS4KLSovCi0vKiBBVVRPIEdFTiBQTEVBU0UgRE8gTk9UIE1PRElGWSBJVCAqLwotLyogQVVUTyBHRU4gUExFQVNFIERPIE5PVCBNT0RJRlkgSVQgKi8KLQotCi11OCBGaXJtd2FyZUltYWdlXzI4NjAgW10gPSB7Ci0weDAyLCAweDAzLCAweDVlLCAweDAyLCAweDAyLCAweGIxLCAweDIyLCAweDIyLCAweGZmLCAweGZmLCAweGZmLCAweDAyLCAweDAxLCAweDgyLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHgwMiwgMHgwMCwgMHgxZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMiwgMHgwMSwgMHgzMywgMHhjMCwgMHhlMCwKLTB4YzAsIDB4ZjAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ZDAsIDB4NzUsIDB4ZDAsIDB4MTgsIDB4YzIsIDB4YWYsIDB4MzAsIDB4NDUsIDB4MDMsCi0weDEyLCAweDEwLCAweDA5LCAweDkwLCAweDA0LCAweDE2LCAweGUwLCAweDMwLCAweGUzLCAweDAzLCAweDc0LCAweDA4LCAweGYwLCAweDkwLCAweDA0LCAweDE0LAotMHhlMCwgMHgyMCwgMHhlNywgMHgwMywgMHgwMiwgMHgwMCwgMHhjYiwgMHg3NCwgMHg4MCwgMHhmMCwgMHg5MCwgMHg3MCwgMHgxMiwgMHhlMCwgMHhmNSwgMHgyZiwKLTB4OTAsIDB4MDQsIDB4MDQsIDB4ZTAsIDB4MjQsIDB4Y2YsIDB4NjAsIDB4MzAsIDB4MTQsIDB4NjAsIDB4NDIsIDB4MjQsIDB4ZTIsIDB4NjAsIDB4NDcsIDB4MTQsCi0weDYwLCAweDU1LCAweDI0LCAweDIxLCAweDcwLCAweDYwLCAweGU1LCAweDU1LCAweDI0LCAweGZlLCAweDYwLCAweDA3LCAweDE0LCAweDYwLCAweDA4LCAweDI0LAotMHgwMiwgMHg3MCwgMHgwOCwgMHg3ZCwgMHgwMSwgMHg4MCwgMHgyOCwgMHg3ZCwgMHgwMiwgMHg4MCwgMHgyNCwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmNSwKLTB4NTAsIDB4ODUsIDB4MmYsIDB4NDAsIDB4ZDIsIDB4MDEsIDB4ODAsIDB4M2UsIDB4ZTUsIDB4NTUsIDB4NjQsIDB4MDMsIDB4NjAsIDB4MDQsIDB4ZTUsIDB4NTUsCi0weDcwLCAweDA0LCAweDdkLCAweDAyLCAweDgwLCAweDA5LCAweDg1LCAweDJmLCAweDQxLCAweGQyLCAweDAyLCAweDgwLCAweDI5LCAweGFkLCAweDU1LCAweGFmLAotMHgyZiwgMHgxMiwgMHgwMiwgMHg4ZCwgMHg4MCwgMHgyMCwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmNSwgMHg0NywgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwKLTB4ZjUsIDB4NDQsIDB4MTIsIDB4MTAsIDB4MjUsIDB4ODAsIDB4MDYsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4ZjUsIDB4NDUsIDB4ZTQsIDB4ZmQsIDB4YWYsCi0weDJmLCAweDEyLCAweDAyLCAweDhkLCAweGQyLCAweDA0LCAweDkwLCAweDcwLCAweDEzLCAweGU0LCAweGYwLCAweGQyLCAweGFmLCAweGQwLCAweGQwLCAweGQwLAotMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhmMCwgMHhkMCwgMHhlMCwgMHgzMiwgMHg5MCwgMHg3MCwgMHgyYSwgMHhlMCwgMHgzMCwgMHhlMSwgMHg1MywgMHhjMiwKLTB4YWYsIDB4OTAsIDB4NzAsIDB4MjgsIDB4ZTAsIDB4OTAsIDB4MTAsIDB4MWMsIDB4ZjAsIDB4OTAsIDB4NzAsIDB4MjksIDB4ZTAsIDB4OTAsIDB4MTAsIDB4MWQsCi0weGYwLCAweDkwLCAweDcwLCAweDJhLCAweGUwLCAweDkwLCAweDEwLCAweDFlLCAweGYwLCAweDkwLCAweDEwLCAweDFjLCAweGUwLCAweGY1LCAweDMwLCAweDkwLAotMHgxMCwgMHgxZSwgMHhlMCwgMHgyMCwgMHhlMSwgMHhmMywgMHg5MCwgMHgxMCwgMHgxYywgMHhlMCwgMHg5MCwgMHg3MCwgMHgyOCwgMHhmMCwgMHg5MCwgMHgxMCwKLTB4MWQsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4MjksIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MWUsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4MmEsIDB4ZjAsIDB4MzAsIDB4NGEsCi0weDBkLCAweDkwLCAweDcwLCAweDI0LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDkwLCAweDAyLCAweDJjLCAweDc0LCAweGZmLCAweGYwLCAweGMyLCAweDA1LAotMHhkMiwgMHhhZiwgMHgyMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHhmMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHhkMCwgMHhlOCwgMHhjMCwgMHhlMCwKLTB4ZTksIDB4YzAsIDB4ZTAsIDB4ZWEsIDB4YzAsIDB4ZTAsIDB4ZWIsIDB4YzAsIDB4ZTAsIDB4ZWMsIDB4YzAsIDB4ZTAsIDB4ZWQsIDB4YzAsIDB4ZTAsIDB4ZWUsCi0weGMwLCAweGUwLCAweGVmLCAweGMwLCAweGUwLCAweGMyLCAweGFmLCAweDMwLCAweDQ1LCAweDAzLCAweDEyLCAweDEwLCAweDEyLCAweGQyLCAweGFmLCAweGQwLAotMHhlMCwgMHhmZiwgMHhkMCwgMHhlMCwgMHhmZSwgMHhkMCwgMHhlMCwgMHhmZCwgMHhkMCwgMHhlMCwgMHhmYywgMHhkMCwgMHhlMCwgMHhmYiwgMHhkMCwgMHhlMCwKLTB4ZmEsIDB4ZDAsIDB4ZTAsIDB4ZjksIDB4ZDAsIDB4ZTAsIDB4ZjgsIDB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZjAsIDB4ZDAsCi0weGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweGYwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweGQwLCAweDc1LCAweGQwLCAweDEwLCAweGMyLAotMHhhZiwgMHgzMCwgMHg0NSwgMHgwMywgMHgxMiwgMHgxMCwgMHgwYywgMHgzMCwgMHg1OCwgMHgwYSwgMHhlNSwgMHg1NCwgMHg2MCwgMHgwNCwgMHgxNSwgMHg1NCwKLTB4ODAsIDB4MDIsIDB4YzIsIDB4NTgsIDB4MzAsIDB4NTksIDB4MGEsIDB4ZTUsIDB4NTAsIDB4NjAsIDB4MDQsIDB4MTUsIDB4NTAsIDB4ODAsIDB4MDIsIDB4YzIsCi0weDU5LCAweGQ1LCAweDUzLCAweDA3LCAweDMwLCAweDYwLCAweDA0LCAweDE1LCAweDQ2LCAweGQyLCAweDA0LCAweDMwLCAweDQ1LCAweDAzLCAweDEyLCAweDEwLAotMHgwZiwgMHhjMiwgMHg4ZCwgMHhkMiwgMHhhZiwgMHhkMCwgMHhkMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhmMCwgMHhkMCwgMHhlMCwgMHgzMiwKLTB4MTIsIDB4MDIsIDB4ZDMsIDB4MzAsIDB4NDUsIDB4MDMsIDB4MTIsIDB4MTAsIDB4MDMsIDB4MzAsIDB4MDEsIDB4MDYsIDB4MjAsIDB4MDksIDB4MDMsIDB4MTIsCi0weDEwLCAweDFjLCAweDMwLCAweDAyLCAweDA2LCAweDIwLCAweDBhLCAweDAzLCAweDEyLCAweDEwLCAweDFmLCAweDMwLCAweDAzLCAweDA2LCAweDIwLCAweDBiLAotMHgwMywgMHgxMiwgMHgxMCwgMHgxZiwgMHgzMCwgMHgwNCwgMHgwNiwgMHgyMCwgMHgwYywgMHgwMywgMHgxMiwgMHgxMCwgMHgyMiwgMHgyMCwgMHgxMywgMHgwOSwKLTB4MjAsIDB4MTEsIDB4MDYsIDB4ZTUsIDB4MmIsIDB4NDUsIDB4MmMsIDB4NjAsIDB4MDMsIDB4ZDMsIDB4ODAsIDB4MDEsIDB4YzMsIDB4OTIsIDB4YTksIDB4MTIsCi0weDAyLCAweGVjLCAweDgwLCAweGJmLCAweGMyLCAweDQzLCAweGQyLCAweDQ1LCAweGU0LCAweGY1LCAweDIwLCAweGY1LCAweDIxLCAweGY1LCAweDUzLCAweGY1LAotMHg0NiwgMHhmNSwgMHgyYiwgMHhmNSwgMHgyYywgMHhjMiwgMHg0MiwgMHhmNSwgMHg1MSwgMHhmNSwgMHg1MiwgMHhmNSwgMHg1NSwgMHg5MCwgMHgwNCwgMHgxOCwKLTB4NzQsIDB4ODAsIDB4ZjAsIDB4OTAsIDB4MDQsIDB4MWEsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4YzIsIDB4MTksIDB4YzIsIDB4MTgsIDB4YzIsIDB4MWEsIDB4MjIsCi0weGM4LCAweGVmLCAweGM4LCAweGU2LCAweGZhLCAweDA4LCAweGU2LCAweDRhLCAweDYwLCAweDBjLCAweGM4LCAweGVmLCAweGM4LCAweDA4LCAweGU2LCAweDE2LAotMHgxOCwgMHg3MCwgMHgwMSwgMHgxNiwgMHhjMywgMHgyMiwgMHhlZCwgMHgyNCwgMHhmZiwgMHhmZCwgMHhlYywgMHgzNCwgMHhmZiwgMHhjOCwgMHhlZiwgMHhjOCwKLTB4ZjYsIDB4MDgsIDB4YzYsIDB4ZWQsIDB4YzYsIDB4ZDMsIDB4MjIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ODIsIDB4ZjgsIDB4ZTQsIDB4OTMsIDB4NzAsIDB4MTIsCi0weDc0LCAweDAxLCAweDkzLCAweDcwLCAweDBkLCAweGEzLCAweGEzLCAweDkzLCAweGY4LCAweDc0LCAweDAxLCAweDkzLCAweGY1LCAweDgyLCAweDg4LCAweDgzLAotMHhlNCwgMHg3MywgMHg3NCwgMHgwMiwgMHg5MywgMHg2OCwgMHg2MCwgMHhlZiwgMHhhMywgMHhhMywgMHhhMywgMHg4MCwgMHhkZiwgMHhlZiwgMHhmNCwgMHg2MCwKLTB4MWYsIDB4ZTQsIDB4ZmUsIDB4MTIsIDB4MDMsIDB4NmEsIDB4ZTAsIDB4YjQsIDB4ZmYsIDB4MTIsIDB4MTIsIDB4MDMsIDB4NmEsIDB4ZWYsIDB4ZjAsIDB4NzQsCi0weDFjLCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweGVkLCAweGYwLCAweDIyLCAweDBlLCAweGJlLCAweDA0LCAweGUzLAotMHgyMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHhmMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwgMHhjMCwgMHhkMCwgMHg3NSwgMHhkMCwgMHgwOCwgMHhjMiwgMHhhZiwKLTB4MzAsIDB4NDUsIDB4MDMsIDB4MTIsIDB4MTAsIDB4MDYsIDB4ZDIsIDB4YWYsIDB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODIsIDB4ZDAsIDB4ODMsIDB4ZDAsIDB4ZjAsCi0weGQwLCAweGUwLCAweDMyLCAweGMyLCAweGFmLCAweDEyLCAweDAwLCAweDA2LCAweDEyLCAweDAyLCAweDE0LCAweDEyLCAweDAzLCAweDFjLCAweGU0LCAweGY1LAotMHgyMiwgMHhmNSwgMHg0NywgMHg5MCwgMHgwNCwgMHgwMCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhkMiwgMHhhZiwgMHgyMiwgMHgzMCwgMHg0NSwgMHgwMywgMHgxMiwKLTB4MTAsIDB4MTUsIDB4ZTUsIDB4MjAsIDB4NzAsIDB4MDMsIDB4MjAsIDB4MTAsIDB4MDMsIDB4MzAsIDB4MTEsIDB4MDMsIDB4NDMsIDB4ODcsIDB4MDEsIDB4MjIsCi0weGMwLCAweDJhLCAweDc0LCAweDAzLCAweGMwLCAweGUwLCAweGMwLCAweDgyLCAweGMwLCAweDgzLCAweDc1LCAweDJhLCAweDBhLCAweDIyLCAweGMwLCAweDJhLAotMHg3NCwgMHgwMywgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MiwgMHhjMCwgMHg4MywgMHg3NSwgMHgyYSwgMHgxOCwgMHgyMiwgMHg3NSwgMHg4OSwgMHgwMiwgMHhlNCwKLTB4ZjUsIDB4OGMsIDB4ZjUsIDB4OGEsIDB4ZjUsIDB4ODgsIDB4ZjUsIDB4YjgsIDB4ZjUsIDB4ZTgsIDB4NzUsIDB4OTAsIDB4MTgsIDB4ZDIsIDB4OGMsIDB4NzUsCi0weGE4LCAweDA1LCAweDIyLCAweGNlLCAweGVmLCAweGNlLCAweGVlLCAweDYwLCAweDA4LCAweDdmLCAweGZmLCAweDEyLCAweDAzLCAweDgwLCAweDFlLCAweDgwLAotMHhmNSwgMHgyMiwgMHhjOCwgMHhlZiwgMHhjOCwgMHhlNiwgMHg2MCwgMHgwMywgMHgxNiwgMHhjMywgMHgyMiwgMHhlZCwgMHgxNCwgMHhmNiwgMHhkMywgMHgyMiwKLTB4YzgsIDB4ZWYsIDB4YzgsIDB4ZTYsIDB4NjAsIDB4MDYsIDB4MTYsIDB4ZTYsIDB4MjQsIDB4ZmYsIDB4YjMsIDB4MjIsIDB4YzMsIDB4MjIsIDB4NzgsIDB4N2YsCi0weGU0LCAweGY2LCAweGQ4LCAweGZkLCAweDc1LCAweDgxLCAweDVmLCAweDAyLCAweDAxLCAweGQwLCAweDc0LCAweDE0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LAotMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHgyMiwgMHhlZiwgMHg5MCwgMHgwMywgMHg3ZSwgMHg5MywgMHg5MCwgMHgwMywgMHgwMCwgMHg3MywgMHgwYSwgMHgxOCwKLTB4ZWYsIDB4NjAsIDB4MDMsIDB4MWYsIDB4ODAsIDB4ZmEsIDB4MjIsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHgwMiwgMHgxMCwgMHgyOCwgMHgwMiwgMHgxMCwgMHgzYiwgMHgwMiwgMHgxMCwgMHgzYywgMHgwMiwgMHgxMiwgMHhiOCwgMHgwMiwKLTB4MTIsIDB4YjksIDB4MDIsIDB4MTMsIDB4M2UsIDB4MDIsIDB4MTMsIDB4M2YsIDB4YzMsIDB4MjIsIDB4ZmYsIDB4ZmYsIDB4MDIsIDB4MTYsIDB4NTYsIDB4MDIsCi0weDE3LCAweDZiLCAweDAyLCAweDE0LCAweDJhLCAweDAyLCAweDEzLCAweDQwLCAweDMwLCAweDA1LCAweDA2LCAweDIwLCAweDBkLCAweDAzLCAweDEyLCAweDAwLAotMHhkOCwgMHgzMCwgMHgwNiwgMHgwNiwgMHgyMCwgMHgwZSwgMHgwMywgMHgxMiwgMHgxOCwgMHg1ZSwgMHgyMiwgMHgyMiwgMHg5MCwgMHgwNCwgMHgxNCwgMHhlMCwKLTB4MjAsIDB4ZTcsIDB4MDMsIDB4MDIsIDB4MTIsIDB4YjcsIDB4OTAsIDB4NzAsIDB4MTIsIDB4ZTAsIDB4ZjUsIDB4NTYsIDB4OTAsIDB4MDQsIDB4MDQsIDB4ZTAsCi0weDEyLCAweDAyLCAweDY3LCAweDExLCAweDRlLCAweDMwLCAweDExLCAweDI1LCAweDMxLCAweDEwLCAweDg3LCAweDMzLCAweDEwLCAweGFhLCAweDM0LCAweDEwLAotMHhjMywgMHgzNSwgMHgxMSwgMHg1NywgMHg1MCwgMHgxMSwgMHg3YiwgMHg1MSwgMHgxMSwgMHg4NCwgMHg1MiwgMHgxMSwgMHg4NCwgMHg1MywgMHgxMSwgMHg4NCwKLTB4NTQsIDB4MTEsIDB4YzUsIDB4NTUsIDB4MTEsIDB4ZGMsIDB4NzAsIDB4MTIsIDB4MDcsIDB4NzEsIDB4MTIsIDB4MzQsIDB4NzIsIDB4MTIsIDB4NWUsIDB4ODAsCi0weDEyLCAweDgxLCAweDgzLCAweDAwLCAweDAwLCAweDEyLCAweGI3LCAweDc1LCAweDI0LCAweDA1LCAweDc1LCAweDI1LCAweGRjLCAweDkwLCAweDcwLCAweDlmLAotMHg3NCwgMHgxMiwgMHhmMCwgMHhkMiwgMHgxOCwgMHhkMiwgMHg2MSwgMHg3NSwgMHgzNSwgMHgwZCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwKLTB4NTYsIDB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTIsIDB4YjcsIDB4MDIsIDB4MTIsIDB4YWEsIDB4YzIsIDB4MTgsIDB4OTAsIDB4MDEsIDB4MTQsIDB4ZTAsCi0weDU0LCAweGZkLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEyLCAweGI3LAotMHgwMiwgMHgxMiwgMHhhYSwgMHhlNSwgMHg1NSwgMHg2NCwgMHgwMiwgMHg3MCwgMHgzNywgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHg2MCwgMHgwOCwgMHg5MCwKLTB4MDEsIDB4MGQsIDB4NzQsIDB4MDksIDB4ZjAsIDB4ODAsIDB4MjUsIDB4ZTUsIDB4MzQsIDB4MTQsIDB4NjAsIDB4MGEsIDB4MTQsIDB4NjAsIDB4MGYsIDB4MTQsCi0weDYwLCAweDE0LCAweDI0LCAweDAzLCAweDcwLCAweDE2LCAweDkwLCAweDAxLCAweDBkLCAweDc0LCAweDA4LCAweGYwLCAweDgwLCAweDBlLCAweDkwLCAweDAxLAotMHgwZCwgMHg3NCwgMHgwYiwgMHhmMCwgMHg4MCwgMHgwNiwgMHg5MCwgMHgwMSwgMHgwZCwgMHg3NCwgMHgxYiwgMHhmMCwgMHg3ZCwgMHgwMSwgMHg4MCwgMHgwMiwKLTB4N2QsIDB4MDIsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MDIsIDB4OGQsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MWIsIDB4OTAsCi0weDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDcwLCAweDAzLCAweDAyLAotMHgxMiwgMHhiNywgMHgwMiwgMHgxMiwgMHhhYSwgMHgyMCwgMHgwMiwgMHgwMywgMHgzMCwgMHgwMywgMHgxZCwgMHg3ZCwgMHgwMiwgMHhhZiwgMHg1NiwgMHgxMiwKLTB4MDIsIDB4OGQsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsCi0weDcwLCAweDAzLCAweDAyLCAweDEyLCAweGI3LCAweDAyLCAweDEyLCAweGFhLCAweDg1LCAweDU2LCAweDQxLCAweGQyLCAweDAyLCAweDIyLCAweDkwLCAweDcwLAotMHgxMSwgMHhlMCwgMHgyNCwgMHhmZiwgMHg5MiwgMHgxYiwgMHgyMiwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHg2NCwgMHgwMiwgMHg2MCwKLTB4MDMsIDB4MDIsIDB4MTIsIDB4YjcsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MDgsIDB4ZTAsIDB4NjQsIDB4MjAsIDB4NjAsCi0weDAzLCAweDAyLCAweDEyLCAweGI3LCAweDc1LCAweDRlLCAweDAzLCAweDc1LCAweDRmLCAweDIwLCAweDIyLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweDI0LAotMHhmZiwgMHg5MiwgMHg0NywgMHgyMiwgMHg5MCwgMHgwNCwgMHgwNCwgMHhlMCwgMHgyNSwgMHhlMCwgMHgyNCwgMHg1ZCwgMHhmNSwgMHg1NywgMHg5MCwgMHg3MCwKLTB4MTAsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4NDcsIDB4MjUsIDB4NTcsIDB4ZjgsIDB4YzYsIDB4ZWYsIDB4YzYsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZmYsCi0weDc0LCAweDQ4LCAweDI1LCAweDU3LCAweGY4LCAweGM2LCAweGVmLCAweGM2LCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDhkLCAweDkwLAotMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg3MCwgMHgwMywgMHgwMiwKLTB4MTIsIDB4YjcsIDB4MDIsIDB4MTIsIDB4YWEsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDcsIDB4MDgsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4NTQsIDB4MDcsCi0weGY1LCAweDI2LCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDhkLCAweGQyLCAweDA0LCAweDIyLCAweDkwLCAweDcwLCAweDEwLCAweGUwLAotMHhmZSwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHhmZCwgMHhlZCwgMHhmOCwgMHhlNiwgMHhmNSwgMHg1NywgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwMiwKLTB4OGQsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NzAsCi0weDAzLCAweDAyLCAweDEyLCAweGI3LCAweDAyLCAweDEyLCAweGFhLCAweDkwLCAweDcwLCAweDEwLCAweGUwLCAweGZlLCAweDkwLCAweDcwLCAweDExLCAweGUwLAotMHhmZCwgMHhlZCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHhmNSwgMHg1NywgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwMiwgMHg4ZCwgMHg5MCwKLTB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsCi0weDEyLCAweGI3LCAweDgwLCAweDc2LCAweGU0LCAweGY1LCAweDRlLCAweGY1LCAweDRmLCAweDc1LCAweDI2LCAweGZmLCAweGMyLCAweDE5LCAweGMyLCAweDE4LAotMHhjMiwgMHgxYSwgMHg3NSwgMHgzNCwgMHhmZiwgMHhhZCwgMHg1NywgMHhhZiwgMHg1NiwgMHgxMiwgMHgwMiwgMHg4ZCwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwKLTB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NjAsIDB4NWIsIDB4ODAsIDB4NGMsIDB4OTAsIDB4NzAsCi0weDEwLCAweGUwLCAweDI0LCAweGZmLCAweDkyLCAweDRhLCAweGQyLCAweDA1LCAweGFkLCAweDU3LCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDhkLCAweDkwLAotMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg2MCwgMHgzOCwgMHg4MCwKLTB4MjksIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4ZjUsIDB4MzQsIDB4ZDMsIDB4OTQsIDB4MDAsIDB4NDAsIDB4MDcsIDB4OTAsIDB4MDEsIDB4MGQsIDB4ZTAsCi0weDU0LCAweGZiLCAweGYwLCAweGFkLCAweDU3LCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDhkLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLAotMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg2MCwgMHgwZCwgMHg5MCwgMHg3MCwgMHgyNSwgMHhlMCwgMHg0NCwgMHgwMSwKLTB4ZjAsIDB4OTAsIDB4MDIsIDB4MmMsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4MjIsIDB4MjIsIDB4ZTUsIDB4NTMsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTMsIDB4M2QsCi0weGU1LCAweDRmLCAweDQ1LCAweDRlLCAweDYwLCAweDA4LCAweGU1LCAweDRmLCAweDE1LCAweDRmLCAweDcwLCAweDAyLCAweDE1LCAweDRlLCAweGEyLCAweDE5LAotMHhlNCwgMHgzMywgMHg5MCwgMHg3MCwgMHg5MCwgMHhmMCwgMHhhMiwgMHgxOCwgMHhlNCwgMHgzMywgMHhhMywgMHhmMCwgMHgzMCwgMHgxOSwgMHg0ZCwgMHg5MCwKLTB4NzAsIDB4OTgsIDB4NzQsIDB4MjMsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4MjUsIDB4ZjAsIDB4ZTUsIDB4MjQsIDB4YTMsIDB4ZjAsIDB4N2YsIDB4MzUsIDB4N2QsCi0weDMyLCAweDEyLCAweDAzLCAweDQyLCAweDUwLCAweDA5LCAweDkwLCAweDEwLCAweDA0LCAweGUwLCAweDU0LCAweGY3LCAweGYwLCAweGQyLCAweDA2LCAweGU1LAotMHgzNSwgMHhkMywgMHg5NCwgMHgxMCwgMHg0MCwgMHgxZSwgMHgzMCwgMHgxYSwgMHgxYiwgMHhjMiwgMHgxYSwgMHhhMiwgMHgxOCwgMHg5MiwgMHgxOSwgMHgyMCwKLTB4MTksIDB4MTIsIDB4OTAsIDB4MDQsIDB4MDksIDB4ZTAsIDB4NTQsIDB4ZGQsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MDQsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsCi0weGMyLCAweDYxLCAweGQyLCAweDAzLCAweGU1LCAweDM1LCAweGI0LCAweDBiLCAweDE0LCAweGQyLCAweDAzLCAweDIyLCAweGU0LCAweGY1LCAweDM1LCAweGEyLAotMHgxOCwgMHg5MiwgMHgxOSwgMHgzMCwgMHgxOSwgMHgwNywgMHg5MCwgMHgwNCwgMHgwOSwgMHhlMCwgMHg0NCwgMHgyMiwgMHhmMCwgMHgyMiwgMHgyMiwgMHgyMiwKLTB4YzIsIDB4NGIsIDB4YzIsIDB4NGMsIDB4ZTUsIDB4NDQsIDB4MTIsIDB4MDIsIDB4NjcsIDB4MTMsIDB4NjIsIDB4MDAsIDB4MTMsIDB4ZjUsIDB4MDQsIDB4MTMsCi0weGYxLCAweDA4LCAweDEzLCAweGNjLCAweDEwLCAweDEzLCAweDc2LCAweDIwLCAweDEzLCAweDk2LCAweDYwLCAweDEzLCAweGE3LCAweGEwLCAweDAwLCAweDAwLAotMHgxMywgMHhmNywgMHg4NSwgMHg0OCwgMHg0MywgMHg4NSwgMHg0YSwgMHg0MiwgMHg4NSwgMHg0YywgMHg1ZSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwgMHg2MCwKLTB4MDMsIDB4MDIsIDB4MTMsIDB4ZjcsIDB4ODAsIDB4MWIsIDB4ZTUsIDB4NDgsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDMsIDB4ZTUsIDB4NGEsIDB4YzQsCi0weDU0LCAweDBmLCAweGY1LCAweDQyLCAweGU1LCAweDRjLCAweGM0LCAweDU0LCAweDBmLCAweGY1LCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDcwLAotMHg2NiwgMHg1MywgMHg0MywgMHgwZiwgMHg4MCwgMHg2MSwgMHg4NSwgMHg0OSwgMHg0MywgMHg4NSwgMHg0YiwgMHg0MiwgMHg4NSwgMHg0ZCwgMHg1ZSwgMHhlNSwKLTB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4NTIsIDB4ODAsIDB4MWIsIDB4ZTUsIDB4NDksIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDMsIDB4ZTUsIDB4NGIsCi0weGM0LCAweDU0LCAweDBmLCAweGY1LCAweDQyLCAweGU1LCAweDRkLCAweGM0LCAweDU0LCAweDBmLCAweGY1LCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LAotMHg3MCwgMHgzNSwgMHhlNSwgMHg0MywgMHg1NCwgMHgwZiwgMHg0NCwgMHgxMCwgMHhmNSwgMHg0MywgMHg4MCwgMHgyYiwgMHhlNSwgMHg0NywgMHhiNCwgMHgwNCwKLTB4MDYsIDB4NTMsIDB4NWUsIDB4ZmIsIDB4NzUsIDB4NDIsIDB4MDksIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDUsIDB4MDYsIDB4NDMsIDB4NWUsIDB4MDQsIDB4NzUsCi0weDQyLCAweDA5LCAweGU1LCAweDQ3LCAweGI0LCAweDA2LCAweDEwLCAweGU1LCAweDQzLCAweDU0LCAweDBmLCAweDQ0LCAweDMwLCAweGY1LCAweDQzLCAweDgwLAotMHgwNiwgMHhkMiwgMHg0YiwgMHg4MCwgMHgwMiwgMHhkMiwgMHg0YywgMHhlNCwgMHhmNSwgMHgzOCwgMHhlNSwgMHg0MiwgMHhjNCwgMHg1NCwgMHhmMCwgMHhmZiwKLTB4ZTUsIDB4NDMsIDB4NTQsIDB4MGYsIDB4NGYsIDB4ZjUsIDB4NWYsIDB4OTAsIDB4NzAsIDB4NDQsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NWUsIDB4ZjAsIDB4YTMsCi0weGU1LCAweDRhLCAweGYwLCAweGEzLCAweGU1LCAweDQ4LCAweGYwLCAweGEzLCAweGU1LCAweDRjLCAweGYwLCAweGEzLCAweGU1LCAweDQ0LCAweGYwLCAweGEzLAotMHhlNSwgMHg0MiwgMHhmMCwgMHhhMywgMHhlNSwgMHg0MywgMHhmMCwgMHhkMiwgMHg2MCwgMHgyMiwgMHhlNSwgMHg0NywgMHg2MCwgMHgxMCwgMHgyNCwgMHhjMCwKLTB4NzAsIDB4MDMsIDB4MTIsIDB4MTYsIDB4MzYsIDB4MTIsIDB4MTQsIDB4M2YsIDB4YzIsIDB4YWYsIDB4YzIsIDB4MDQsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4YzIsCi0weGFmLCAweDkwLCAweDA0LCAweDE0LCAweGUwLCAweDU0LCAweDBlLCAweDYwLCAweDA0LCAweGQyLCAweDFjLCAweDgwLCAweDA4LCAweGU1LCAweDRlLCAweDQ1LAotMHg0ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHgxYywgMHhkMiwgMHhhZiwgMHg5MCwgMHgwNCwgMHgxNCwgMHhlMCwgMHhhMiwgMHhlNCwgMHg5MiwgMHgxZCwgMHg3NCwKLTB4MWUsIDB4ZjAsIDB4ZTUsIDB4NWYsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4MmQsIDB4ZTUsIDB4MzgsIDB4NzAsIDB4MTMsIDB4MzAsIDB4MWMsIDB4MDUsIDB4ZTUsCi0weDVmLCAweDIwLCAweGU1LCAweDBiLCAweDMwLCAweDFkLCAweDE5LCAweGU1LCAweDVmLCAweDU0LCAweDMwLCAweGZmLCAweGJmLCAweDMwLCAweDExLCAweGU1LAotMHgzOCwgMHg3MCwgMHgwNSwgMHg3NSwgMHgzOCwgMHgwYywgMHg4MCwgMHgwMiwgMHgxNSwgMHgzOCwgMHhkMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgwZiwKLTB4ZTUsIDB4NWYsIDB4MzAsIDB4ZTYsIDB4MDYsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MDQsIDB4ZDIsIDB4NmMsIDB4YzIsIDB4NmQsIDB4ZTUsCi0weDQ3LCAweDY0LCAweDAzLCAweDcwLCAweDIxLCAweDMwLCAweDRiLCAweDA2LCAweGMyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDE4LCAweGU1LCAweDM4LAotMHg3MCwgMHgwMywgMHgzMCwgMHg0YywgMHgxMSwgMHhjMiwgMHg0YywgMHhlNSwgMHgzOCwgMHg3MCwgMHgwNSwgMHg3NSwgMHgzOCwgMHgwNywgMHg4MCwgMHgwMiwKLTB4MTUsIDB4MzgsIDB4ZDIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4OTAsIDB4NzAsIDB4NDYsIDB4ZTUsIDB4MmQsIDB4ZjAsIDB4MjAsIDB4NjksIDB4MDcsIDB4ZTUsCi0weDVlLCAweDIwLCAweGUwLCAweDAyLCAweGIyLCAweDY4LCAweDIwLCAweDZiLCAweDA3LCAweGU1LCAweDVlLCAweDIwLCAweGUxLCAweDAyLCAweGIyLCAweDZhLAotMHgyMCwgMHg2ZCwgMHgwNywgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMiwgMHgwMiwgMHhiMiwgMHg2YywgMHg5MCwgMHg3MCwgMHg0NywgMHhlNSwgMHgyZCwgMHhmMCwKLTB4NzUsIDB4MmUsIDB4NDAsIDB4MjAsIDB4NjksIDB4MDQsIDB4YTIsIDB4NjgsIDB4ODAsIDB4MTUsIDB4MzAsIDB4NjgsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsCi0weGUzLCAweDgwLCAweDBjLCAweGU1LCAweDQ2LCAweDU0LCAweGYwLCAweGZmLCAweGJmLCAweGYwLCAweDAzLCAweGQzLCAweDgwLCAweDAxLCAweGMzLCAweDkyLAotMHg3MywgMHg5MiwgMHg3MiwgMHgyMCwgMHg2YiwgMHgwNCwgMHhhMiwgMHg2YSwgMHg4MCwgMHgxNSwgMHgzMCwgMHg2YSwgMHgwNiwgMHhlNSwgMHg0NiwgMHhhMiwKLTB4ZTMsIDB4ODAsIDB4MGMsIDB4ZTUsIDB4NDYsIDB4NTQsIDB4ZjAsIDB4ZmYsIDB4YmYsIDB4ZjAsIDB4MDMsIDB4ZDMsIDB4ODAsIDB4MDEsIDB4YzMsIDB4OTIsCi0weDc1LCAweDkyLCAweDc0LCAweDIwLCAweDZkLCAweDA0LCAweGEyLCAweDZjLCAweDgwLCAweDE1LCAweDMwLCAweDZjLCAweDA2LCAweGU1LCAweDQ2LCAweGEyLAotMHhlMywgMHg4MCwgMHgwYywgMHhlNSwgMHg0NiwgMHg1NCwgMHhmMCwgMHhmZiwgMHhiZiwgMHhmMCwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHg5MiwKLTB4NzEsIDB4OTIsIDB4NzAsIDB4OTAsIDB4MTAsIDB4MmYsIDB4ZTUsIDB4MmUsIDB4ZjAsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4NDYsIDB4OTAsCi0weDAyLCAweDI5LCAweGUwLCAweDU0LCAweGZlLCAweGYwLCAweGU1LCAweDQzLCAweGM0LCAweDU0LCAweDBmLCAweDE0LCAweDYwLCAweDE0LCAweDI0LCAweGZlLAotMHg2MCwgMHgxZiwgMHgyNCwgMHgwMywgMHg2MCwgMHgwMywgMHgwMiwgMHgxNiwgMHgzNSwgMHg5MCwgMHgwMiwgMHgyOCwgMHhlMCwgMHgzMCwgMHg0NywgMHgwZCwKLTB4ODAsIDB4MDcsIDB4OTAsIDB4MDIsIDB4MjgsIDB4ZTAsIDB4MjAsIDB4NDcsIDB4MDQsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4MjIsIDB4NDQsIDB4MDEsIDB4ZjAsCi0weDIyLCAweGU1LCAweDQ2LCAweDMwLCAweGUzLCAweDA0LCAweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweDkwLCAweDAyLCAweDI4LCAweGUwLAotMHg1NCwgMHhmZSwgMHg0ZiwgMHhmMCwgMHgyMiwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNywgMHg2MCwgMHgwMywgMHgwMiwgMHgxNiwgMHgzNSwgMHhmNSwgMHgyNywKLTB4OTAsIDB4MDIsIDB4MjksIDB4ZTAsIDB4NTQsIDB4ZmMsIDB4ZjAsIDB4ZTUsIDB4MjYsIDB4MTQsIDB4NjAsIDB4MjYsIDB4MTQsIDB4NjAsIDB4MmUsIDB4MTQsCi0weDYwLCAweDM2LCAweDI0LCAweDAzLCAweDcwLCAweDVmLCAweGU1LCAweDQ2LCAweDEzLCAweDEzLCAweDEzLCAweDU0LCAweDFmLCAweDc1LCAweGYwLCAweDAzLAotMHg4NCwgMHhhZiwgMHhmMCwgMHgyMCwgMHg0NywgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZiwgMHg2ZSwgMHgyNCwgMHhmZiwKLTB4ODAsIDB4MDIsIDB4YTIsIDB4NDcsIDB4OTIsIDB4MzksIDB4YTIsIDB4NDcsIDB4YjMsIDB4OTIsIDB4MzgsIDB4ODAsIDB4M2YsIDB4ZTUsIDB4NDYsIDB4MzAsCi0weGUzLCAweDAzLCAweGQzLCAweDgwLCAweDI3LCAweGMzLCAweDgwLCAweDI0LCAweGU1LCAweDQ2LCAweDMwLCAweGUzLCAweDBkLCAweDU0LCAweDcwLCAweGMzLAotMHg5NCwgMHg2MCwgMHg1MCwgMHgwNiwgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwMSwgMHg4MCwgMHgwNCwgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgyMCwgMHg0NywKLTB4MDQsIDB4N2QsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2QsIDB4MDAsIDB4ZWYsIDB4NmQsIDB4NGUsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MzgsIDB4YTIsIDB4NDcsCi0weGIzLCAweDkyLCAweDM5LCAweDgwLCAweDA3LCAweGEyLCAweDQ3LCAweGIzLCAweDkyLCAweDM4LCAweDkyLCAweDM5LCAweDkwLCAweDAyLCAweDI4LCAweGUwLAotMHg1NCwgMHhmYywgMHg0NSwgMHgyNywgMHhmMCwgMHgyMiwgMHhlNCwgMHg5MCwgMHgwMiwgMHgyOSwgMHhmMCwgMHgzMCwgMHg0NywgMHgwNCwgMHhhZiwgMHg0NSwKLTB4ODAsIDB4MDQsIDB4ZTUsIDB4NDUsIDB4ZjQsIDB4ZmYsIDB4OTAsIDB4MDIsIDB4MjgsIDB4ZWYsIDB4ZjAsIDB4MjIsIDB4OGYsIDB4NTAsIDB4ZDIsIDB4NTksCi0weDIyLCAweDhmLCAweDU0LCAweGQyLCAweDU4LCAweDIyLCAweGU0LCAweGY1LCAweDMwLCAweGMyLCAweGFmLCAweGU1LCAweDUxLCAweDE0LCAweDYwLCAweDRhLAotMHgxNCwgMHg2MCwgMHg2YSwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxNywgMHg0YywgMHhkMiwgMHg1OSwgMHg3NSwgMHg1NSwgMHgwMSwgMHgyMCwKLTB4MTksIDB4MWMsIDB4OTAsIDB4MDIsIDB4MDgsIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4MjMsIDB4OTAsIDB4MDQsIDB4MzQsCi0weGUwLCAweGI0LCAweDAyLCAweDFjLCAweGEzLCAweGUwLCAweGI0LCAweDAyLCAweDE3LCAweGEzLCAweGUwLCAweGI0LCAweDAyLCAweDEyLCAweDdmLCAweDIwLAotMHgxMiwgMHgxNiwgMHg0YywgMHg5MCwgMHgxMCwgMHgwNCwgMHhlMCwgMHg1NCwgMHhmMywgMHhmMCwgMHg3NSwgMHg1MSwgMHgwMSwgMHgwMiwgMHgxNywgMHg0YywKLTB4ZTUsIDB4NTAsIDB4NzAsIDB4MDYsIDB4NzUsIDB4MzAsIDB4MDMsIDB4MDIsIDB4MTcsIDB4NGMsIDB4OTAsIDB4MTIsIDB4MDAsIDB4ZTAsIDB4NTQsIDB4MDMsCi0weDcwLCAweDE1LCAweDdmLCAweDIwLCAweDEyLCAweDE2LCAweDRjLCAweDIwLCAweDE5LCAweDA3LCAweDkwLCAweDAyLCAweDA4LCAweGUwLCAweDU0LCAweGZiLAotMHhmMCwgMHg3NSwgMHg1MSwgMHgwMiwgMHgwMiwgMHgxNywgMHg0YywgMHhlNSwgMHg1MCwgMHg3MCwgMHgwMiwgMHg4MCwgMHg3YSwgMHgyMCwgMHgxOSwgMHgwZiwKLTB4OTAsIDB4MDIsIDB4MDgsIDB4ZTAsIDB4MjAsIDB4ZTMsIDB4NmMsIDB4OTAsIDB4MDQsIDB4MzcsIDB4ZTAsIDB4NjQsIDB4MjIsIDB4NzAsIDB4NjQsIDB4OTAsCi0weDEyLCAweDA0LCAweDc0LCAweDBhLCAweGYwLCAweDMwLCAweDFiLCAweDExLCAweDkwLCAweDEzLCAweDI4LCAweGUwLCAweDU0LCAweGYwLCAweGYwLCAweGEzLAotMHhlMCwgMHg1NCwgMHhmMCwgMHhmMCwgMHhhMywgMHhlMCwgMHg1NCwgMHhmYSwgMHhmMCwgMHgyMCwgMHgxOSwgMHgwNywgMHg5MCwgMHgwNCwgMHgwMSwgMHhlMCwKLTB4NDQsIDB4MTAsIDB4ZjAsIDB4ZTUsIDB4MzQsIDB4ZjQsIDB4OTAsIDB4MDQsIDB4MDEsIDB4NjAsIDB4MDYsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4ODAsCi0weDA0LCAweGUwLCAweDU0LCAweGY5LCAweGYwLCAweDIwLCAweDE5LCAweDA3LCAweDkwLCAweDEyLCAweDA0LCAweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweGU1LAotMHgzNCwgMHhmNCwgMHg2MCwgMHgxNCwgMHg5MCwgMHgwMSwgMHgwZCwgMHhlMCwgMHhmNSwgMHgzMywgMHhlNSwgMHgzNCwgMHhkMywgMHg5NCwgMHgwMiwgMHg0MCwKLTB4MDcsIDB4OTAsIDB4MTIsIDB4MDQsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4NzUsIDB4MzAsIDB4MDEsIDB4NzUsIDB4NTUsIDB4MDIsIDB4ZTQsIDB4ZjUsCi0weDUxLCAweDgwLCAweDA5LCAweGU1LCAweDUwLCAweDcwLCAweDA1LCAweDc1LCAweDMwLCAweDAzLCAweGY1LCAweDUxLCAweGU1LCAweDMwLCAweDYwLCAweDE4LAotMHhjMiwgMHgwMSwgMHhlNCwgMHhmNSwgMHg1MSwgMHhjMiwgMHg1OSwgMHgyMCwgMHgxOSwgMHgwZSwgMHhhZCwgMHgzMCwgMHhhZiwgMHg0MCwgMHgxMiwgMHgxOCwKLTB4MmEsIDB4ZTUsIDB4MzAsIDB4YjQsIDB4MDMsIDB4MDIsIDB4ZDIsIDB4MDMsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4YzIsIDB4YWYsIDB4MzAsIDB4MDEsIDB4MGUsCi0weGU0LCAweGY1LCAweDUxLCAweGMyLCAweDU5LCAweGMyLCAweDAxLCAweDdkLCAweDAyLCAweGFmLCAweDQwLCAweDEyLCAweDE4LCAweDJhLCAweGU1LCAweDUyLAotMHgxNCwgMHg2MCwgMHg1NSwgMHgxNCwgMHg2MCwgMHgyZiwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxOCwgMHgyNywgMHhlNSwgMHgzNCwgMHhmNCwKLTB4NjAsIDB4MjMsIDB4ZTUsIDB4MzQsIDB4ZDMsIDB4OTQsIDB4MDIsIDB4NDAsIDB4MTYsIDB4OTAsIDB4MTIsIDB4MDQsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsCi0weDkwLCAweDAxLCAweDBkLCAweGUwLCAweDIwLCAweGUzLCAweDAzLCAweDAyLCAweDE4LCAweDI3LCAweDdmLCAweDUwLCAweDEyLCAweDE2LCAweDUxLCAweDc1LAotMHg1MiwgMHgwMiwgMHg3NSwgMHg1NSwgMHgwMywgMHhlNSwgMHgzNCwgMHhmNCwgMHg2MCwgMHgwYSwgMHhlNSwgMHg1NCwgMHg3MCwgMHg2OSwgMHg5MCwgMHgwMSwKLTB4MGQsIDB4ZTUsIDB4MzMsIDB4ZjAsIDB4OTAsIDB4MTIsIDB4MDQsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4N2YsIDB4MjAsIDB4MTIsIDB4MTYsIDB4NTEsCi0weDc1LCAweDUyLCAweDAxLCAweDc1LCAweDU1LCAweDAzLCAweDgwLCAweDRmLCAweGU1LCAweDU0LCAweDcwLCAweDRiLCAweDkwLCAweDA0LCAweDAxLCAweGUwLAotMHg0NCwgMHgwZSwgMHhmMCwgMHgyMCwgMHgxOSwgMHgwNCwgMHhlMCwgMHg1NCwgMHhlZiwgMHhmMCwgMHg5MCwgMHgxMywgMHgyOCwgMHhlMCwgMHg0NCwgMHgwZiwKLTB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MGYsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MDUsIDB4ZjAsIDB4OTAsIDB4MTIsIDB4MDQsIDB4NzQsIDB4MDMsCi0weGYwLCAweDIwLCAweDE5LCAweDA3LCAweDkwLCAweDAyLCAweDA4LCAweGUwLCAweDQ0LCAweDA1LCAweGYwLCAweDkwLCAweDEwLCAweDA0LCAweGUwLCAweDQ0LAotMHgwYywgMHhmMCwgMHhlNCwgMHhmNSwgMHg1MiwgMHhmNSwgMHg1NSwgMHgzMCwgMHgwMiwgMHgwYiwgMHhjMiwgMHgwMiwgMHg3ZCwgMHgwMSwgMHhhZiwgMHg0MSwKLTB4MTIsIDB4MTgsIDB4MmEsIDB4ODAsIDB4MDIsIDB4YzIsIDB4MDMsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4ZWYsIDB4ZjQsIDB4NjAsIDB4MmQsIDB4ZTQsIDB4ZmUsCi0weDc0LCAweDE0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweGUwLCAweGI0LCAweGZmLCAweDE5LCAweDc0LCAweDE0LAotMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHg3NCwgMHgxYywgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwKLTB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MGUsIDB4YmUsIDB4MDQsIDB4ZDUsIDB4MjIsIDB4MjIsIDB4MjIsIDB4MjAsIDB4MTksCi0weDAzLCAweDAyLCAweDE5LCAweDBmLCAweDkwLCAweDcwLCAweDgwLCAweGUwLCAweDA0LCAweGYwLCAweDkwLCAweDA0LCAweDM3LCAweGUwLCAweDMwLCAweGU1LAotMHgwMywgMHgwMiwgMHgxOSwgMHgwYiwgMHg5MCwgMHgwNCwgMHgyOCwgMHhlMCwgMHhmNSwgMHgzMSwgMHhhMywgMHhlMCwgMHhmNSwgMHgzMCwgMHhmNSwgMHgzMiwKLTB4ZTQsIDB4ZjUsIDB4MzcsIDB4OTAsIDB4NzAsIDB4ODEsIDB4ZTAsIDB4MDQsIDB4ZjAsIDB4OTAsIDB4NzAsIDB4ODIsIDB4ZTAsIDB4MDQsIDB4ZjAsIDB4ZTUsCi0weDMyLCAweDc1LCAweGYwLCAweDgwLCAweGE0LCAweDI0LCAweDAwLCAweGZmLCAweGU1LCAweGYwLCAweDM0LCAweDgwLCAweGZlLCAweGU1LCAweDMwLCAweDY1LAotMHgzMiwgMHg3MCwgMHgwNSwgMHhmYywgMHg3ZCwgMHgxOCwgMHg4MCwgMHgwNCwgMHg3YywgMHgwMCwgMHg3ZCwgMHgwMCwgMHhlZiwgMHgyZCwgMHhmZiwgMHhlZSwKLTB4M2MsIDB4ZmUsIDB4MTIsIDB4MTksIDB4MTAsIDB4NTAsIDB4MjUsIDB4OTAsIDB4NzAsIDB4ODMsIDB4ZTAsIDB4MDQsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4MTQsCi0weGUwLCAweDQ0LCAweDAyLCAweGYwLCAweGUwLCAweDMwLCAweGUxLCAweDA2LCAweDkwLCAweDcwLCAweDkyLCAweDc0LCAweDQ1LCAweGYwLCAweDkwLCAweDcwLAotMHg5MywgMHhlMCwgMHgwNCwgMHhmMCwgMHg5MCwgMHgwNCwgMHgwMSwgMHhlMCwgMHg5MCwgMHg3MCwgMHg5NCwgMHhmMCwgMHhlNSwgMHgzMiwgMHg2NSwgMHgzMSwKLTB4NjAsIDB4MTAsIDB4ZTQsIDB4MjUsIDB4MzIsIDB4ZmYsIDB4ZTQsIDB4MzQsIDB4ODAsIDB4OGYsIDB4ODIsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MzIsCi0weDgwLCAweDk3LCAweDkwLCAweDA0LCAweDEwLCAweDc0LCAweDAxLCAweGYwLCAweDkwLCAweDA0LCAweDI4LCAweGU1LCAweDMxLCAweGYwLCAweGEzLCAweGU1LAotMHgzMCwgMHhmMCwgMHg5MCwgMHgwNCwgMHgxMSwgMHg3NCwgMHgwMSwgMHhmMCwgMHgwMiwgMHgxOCwgMHg2YSwgMHhjMiwgMHgwNiwgMHhkMiwgMHgxYSwgMHgyMiwKLTB4OTAsIDB4NzAsIDB4ODQsIDB4ZTUsIDB4MzcsIDB4ZjAsIDB4YzMsIDB4OTQsIDB4MDYsIDB4NTAsIDB4MTksIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsCi0weGI0LCAweGZmLCAweDA3LCAweDA1LCAweDM3LCAweGU0LCAweGY1LCAweDM2LCAweDgwLCAweDU5LCAweGU0LCAweGY1LCAweDM3LCAweDhmLCAweDgyLCAweDhlLAotMHg4MywgMHhmMCwgMHg4MCwgMHg0ZiwgMHhlNSwgMHgzNiwgMHg3NSwgMHhmMCwgMHgwNiwgMHg4NCwgMHg3NCwgMHgwOCwgMHgyNSwgMHhmMCwgMHhmNSwgMHg4MiwKLTB4ZTQsIDB4MzQsIDB4MTAsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZmQsIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4ZmMsIDB4NmQsIDB4NzAsIDB4MzAsCi0weDkwLCAweDcwLCAweDg4LCAweGUwLCAweDA0LCAweGYwLCAweGEzLCAweGUwLCAweGZkLCAweGQzLCAweDk1LCAweDM3LCAweDQwLCAweDAyLCAweDgwLCAweDAyLAotMHhhZCwgMHgzNywgMHg5MCwgMHg3MCwgMHg4OSwgMHhlZCwgMHhmMCwgMHgwNSwgMHgzNywgMHgwNSwgMHgzNiwgMHhlNSwgMHgzNiwgMHg3NSwgMHhmMCwgMHgwNiwKLTB4ODQsIDB4NzQsIDB4OGEsIDB4MjUsIDB4ZjAsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZWMsIDB4ZjAsIDB4ODAsIDB4MDMsCi0weGU0LCAweGY1LCAweDM3LCAweDBmLCAweGJmLCAweDAwLCAweDAxLCAweDBlLCAweGVmLCAweDU0LCAweDdmLCAweDYwLCAweDBhLCAweGU1LCAweDM3LCAweGMzLAotMHg5NCwgMHg0ZSwgMHg1MCwgMHgwMywgMHgwMiwgMHgxOSwgMHgxMCwgMHhlNSwgMHgzNywgMHhiNCwgMHg0ZSwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywKLTB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYiwgMHg5NCwgMHhlYiwgfSA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9maXJtd2FyZV8zMDcwLmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9maXJtd2FyZV8zMDcwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI3MTBkNDAuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vZmlybXdhcmVfMzA3MC5oCisrKyAvZGV2L251bGwKQEAgLTEsNTE3ICswLDAgQEAKLS8qIEFVVE8gR0VOIFBMRUFTRSBETyBOT1QgTU9ESUZZIElUICovCi0vKiBBVVRPIEdFTiBQTEVBU0UgRE8gTk9UIE1PRElGWSBJVCAqLwotCi0KLXU4IEZpcm13YXJlSW1hZ2VfMzA3MCBbXSA9IHsKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDIsIDB4MTAsIDB4MjgsIDB4MDIsIDB4MTAsIDB4MzIsIDB4MDIsIDB4MTAsIDB4NzgsIDB4MDIsIDB4MTMsIDB4MWYsIDB4MDIsCi0weDEzLCAweDIwLCAweDAyLCAweDEzLCAweDNmLCAweDAyLCAweDEzLCAweDQ0LCAweDEyLCAweDEzLCAweDQwLCAweDIyLCAweDAyLCAweDE3LCAweGFlLCAweDAyLAotMHgxOCwgMHhkMiwgMHgwMiwgMHgxNCwgMHgzZCwgMHgwMiwgMHgxMywgMHg3OCwgMHgzMCwgMHgwNSwgMHgwNiwgMHgyMCwgMHgwZCwgMHgwMywgMHgxMiwgMHgxOSwKLTB4OTUsIDB4MjIsIDB4OTAsIDB4MDEsIDB4OGMsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MWIsIDB4ZTUsIDB4NGMsIDB4MzAsIDB4ZTAsIDB4MDQsIDB4N2YsIDB4NDAsCi0weDgwLCAweDAyLCAweDdmLCAweDAwLCAweDkwLCAweDEwLCAweDJmLCAweGVmLCAweGYwLCAweDkwLCAweDAxLCAweDhjLCAweDc0LCAweDA4LCAweGYwLCAweGU0LAotMHg5MCwgMHgwMSwgMHhhNywgMHhmMCwgMHg5MCwgMHgwMSwgMHg4YywgMHhlMCwgMHgzMCwgMHhlMCwgMHgxYywgMHg5MCwgMHgwMSwgMHg4MCwgMHhlMCwgMHhiNCwKLTB4MDIsIDB4MTUsIDB4YTMsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MTAsIDB4OTAsIDB4MDEsIDB4ODQsIDB4ZTAsIDB4YjQsIDB4ODEsIDB4MDksIDB4OTAsIDB4MDEsCi0weDhjLCAweDc0LCAweDAxLCAweGYwLCAweDEyLCAweDBkLCAweGM4LCAweDIyLCAweDkwLCAweDA0LCAweDE0LCAweGUwLCAweDIwLCAweGU3LCAweDAzLCAweDAyLAotMHgxMywgMHgxZSwgMHg5MCwgMHg3MCwgMHgxMiwgMHhlMCwgMHhmNSwgMHg1NiwgMHg5MCwgMHgwNCwgMHgwNCwgMHhlMCwgMHgxMiwgMHgwYSwgMHg5ZCwgMHgxMCwKLTB4ZDksIDB4MzEsIDB4MTAsIDB4YmQsIDB4MzYsIDB4MTEsIDB4MDIsIDB4NTAsIDB4MTEsIDB4MzksIDB4NTEsIDB4MTEsIDB4NDIsIDB4NTIsIDB4MTEsIDB4NDIsCi0weDUzLCAweDExLCAweDQyLCAweDU0LCAweDExLCAweDgzLCAweDU1LCAweDExLCAweGQyLCAweDU2LCAweDEyLCAweDI1LCAweDcwLCAweDEyLCAweDUwLCAweDcxLAotMHgxMiwgMHg3ZSwgMHg3MiwgMHgxMiwgMHhkNSwgMHg3MywgMHgxMiwgMHhmNiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMywgMHgxZSwgMHg5MCwgMHg3MCwgMHgxMSwKLTB4ZTAsIDB4ZjUsIDB4M2MsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTUsIDB4NTYsCi0weGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEzLCAweDFlLCAweDAyLCAweDEzLCAweDE3LCAweDIwLCAweDAyLCAweDAzLCAweDMwLCAweDAzLCAweDFkLCAweDdkLAotMHgwMiwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHg5MSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywKLTB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTMsIDB4MWUsIDB4MDIsIDB4MTMsIDB4MTcsIDB4ODUsIDB4NTYsIDB4NDEsIDB4ZDIsCi0weDAyLCAweDIyLCAweDkwLCAweDcwLCAweDEwLCAweGUwLCAweDU0LCAweDdmLCAweGZmLCAweGJmLCAweDBhLCAweDBkLCAweDkwLCAweDcwLCAweDExLCAweGUwLAotMHhiNCwgMHgwOCwgMHgwNiwgMHg3NSwgMHg0ZSwgMHgwMSwgMHg3NSwgMHg0ZiwgMHg4NCwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmZiwKLTB4YmYsIDB4MDIsIDB4MTIsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MDQsIDB4ZTAsIDB4YjQsIDB4MjAsIDB4MDYsIDB4NzUsCi0weDRlLCAweDAzLCAweDc1LCAweDRmLCAweDIwLCAweGU0LCAweGY1LCAweDI3LCAweDIyLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweDI0LCAweGZmLCAweDkyLAotMHg0NywgMHgyMiwgMHg5MCwgMHgwNCwgMHgwNCwgMHhlMCwgMHgyNSwgMHhlMCwgMHgyNCwgMHg1ZCwgMHhmNSwgMHg1NywgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwKLTB4ZmYsIDB4NzQsIDB4NDcsIDB4MjUsIDB4NTcsIDB4ZjgsIDB4YzYsIDB4ZWYsIDB4YzYsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4NDgsCi0weDI1LCAweDU3LCAweGY4LCAweGM2LCAweGVmLCAweGM2LCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweDkxLCAweDkwLCAweDA0LCAweDE0LAotMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgxMywgMHgxZSwKLTB4MDIsIDB4MTMsIDB4MTcsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDcsIDB4NjAsIDB4MWQsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MTcsIDB4ZTUsCi0weDQ3LCAweDY0LCAweDA5LCAweDYwLCAweDExLCAweGU1LCAweDQ3LCAweDY0LCAweDBhLCAweDYwLCAweDBiLCAweGU1LCAweDQ3LCAweDY0LCAweDBiLCAweDYwLAotMHgwNSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwYywgMHgwOCwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHg1NCwgMHgwZiwgMHhmNSwgMHgzYSwgMHhlNSwgMHg0NywKLTB4YjQsIDB4MDksIDB4MDgsIDB4ZTUsIDB4M2EsIDB4YjQsIDB4MDMsIDB4MDMsIDB4ZTQsIDB4ZjUsIDB4NDYsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MGEsIDB4MDgsCi0weGU1LCAweDNhLCAweGI0LCAweDAxLCAweDAzLCAweGU0LCAweGY1LCAweDQ2LCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweDkxLCAweGQyLAotMHgwNCwgMHgyMiwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHhmNCwgMHhmZiwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHg1ZiwgMHhmZiwgMHg5MCwgMHg3MCwKLTB4MTEsIDB4ZTAsIDB4NTUsIDB4MjcsIDB4NGYsIDB4OTAsIDB4NzAsIDB4MTgsIDB4ZjAsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4MTksCi0weGYwLCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweDkxLCAweDMwLCAweDE1LCAweDAzLCAweGQyLCAweDE0LCAweDIyLCAweDkwLCAweDcwLAotMHgxOCwgMHhlMCwgMHhmNSwgMHgyNywgMHg5MCwgMHgwMiwgMHgyOSwgMHhlMCwgMHhmZiwgMHg5MCwgMHg3MCwgMHgxOSwgMHhlMCwgMHhmZSwgMHhlZiwgMHg1ZSwKLTB4OTAsIDB4MDIsIDB4MjksIDB4ZjAsIDB4MzAsIDB4NDcsIDB4MDQsIDB4YWYsIDB4MjcsIDB4ODAsIDB4MDQsIDB4ZTUsIDB4MjcsIDB4ZjQsIDB4ZmYsIDB4OTAsCi0weDAyLCAweDI4LCAweGVmLCAweGYwLCAweDIyLCAweDkwLCAweDcwLCAweDEwLCAweGUwLCAweGZlLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweGZkLCAweGVkLAotMHhmOCwgMHhlNiwgMHhmNSwgMHg1NywgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHg5MSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwKLTB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTMsIDB4MWUsIDB4MDIsIDB4MTMsIDB4MTcsCi0weDkwLCAweDcwLCAweDEwLCAweGUwLCAweGZlLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweGZkLCAweGVkLCAweGY1LCAweDgyLCAweDhlLCAweDgzLCAweGUwLAotMHhmNSwgMHg1NywgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHg5MSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwKLTB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTMsIDB4MWUsIDB4MDIsIDB4MTMsIDB4MTcsIDB4OTAsIDB4MTAsCi0weDAwLCAweGUwLCAweGY1LCAweDU3LCAweDkwLCAweDEwLCAweDAyLCAweGUwLCAweGY1LCAweDU4LCAweGEzLCAweGUwLCAweGY1LCAweDU5LCAweGU1LCAweDU4LAotMHhiNCwgMHg3MCwgMHgxZSwgMHhlNSwgMHg1OSwgMHhiNCwgMHgzMCwgMHgxOSwgMHg5MCwgMHgwNSwgMHgwOCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHhmZCwKLTB4OTAsIDB4MDUsIDB4MDUsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4ZWQsIDB4NTQsIDB4ZmUsIDB4OTAsIDB4MDUsIDB4MDgsCi0weGYwLCAweGU0LCAweGY1LCAweDRlLCAweGY1LCAweDRmLCAweDc1LCAweDNhLCAweGZmLCAweDc1LCAweDNjLCAweGZmLCAweGFkLCAweDU3LCAweGFmLCAweDU2LAotMHgxMiwgMHgwYiwgMHg5MSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwKLTB4ZjQsIDB4NjAsIDB4NGIsIDB4ODAsIDB4NDIsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4OTMsIDB4ZTQsIDB4ZmQsIDB4YWYsCi0weDU2LCAweDEyLCAweDBiLCAweDkxLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LAotMHg1NiwgMHhmNCwgMHg2MCwgMHgyYSwgMHg4MCwgMHgyMSwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHgyNCwgMHhmZiwgMHg5MiwgMHg0YSwgMHhkMiwgMHgwNSwKLTB4YWQsIDB4NTcsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4OTEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsCi0weDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDYwLCAweDA3LCAweDkwLCAweDcwLCAweDI1LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDIyLCAweDIyLAotMHhlNSwgMHg1MywgMHg3MCwgMHgxYSwgMHgzMCwgMHg2MCwgMHgwOSwgMHhiMiwgMHg0ZCwgMHgzMCwgMHg0ZCwgMHgwNCwgMHgwNSwgMHg0NiwgMHhjMiwgMHgwNCwKLTB4ZTUsIDB4NGYsIDB4NDUsIDB4NGUsIDB4NjAsIDB4MDgsIDB4ZTUsIDB4NGYsIDB4MTUsIDB4NGYsIDB4NzAsIDB4MDIsIDB4MTUsIDB4NGUsIDB4MjIsIDB4MjIsCi0weGMyLCAweDQyLCAweGQzLCAweDIyLCAweDMwLCAweDE0LCAweDMwLCAweDkwLCAweDcwLCAweDE5LCAweGUwLCAweDU1LCAweDI3LCAweGZmLCAweDkwLCAweDcwLAotMHgxOCwgMHhlMCwgMHg0ZiwgMHhmNSwgMHgyNywgMHg5MCwgMHgwMiwgMHgyOSwgMHhlMCwgMHhmZiwgMHg5MCwgMHg3MCwgMHgxOSwgMHhlMCwgMHhmZSwgMHhlZiwKLTB4NWUsIDB4OTAsIDB4MDIsIDB4MjksIDB4ZjAsIDB4MzAsIDB4NDcsIDB4MDQsIDB4YWYsIDB4MjcsIDB4ODAsIDB4MDQsIDB4ZTUsIDB4MjcsIDB4ZjQsIDB4ZmYsCi0weDkwLCAweDAyLCAweDI4LCAweGVmLCAweGYwLCAweGMyLCAweDE0LCAweDIyLCAweGMyLCAweDRiLCAweGMyLCAweDRjLCAweGU1LCAweDQ0LCAweDEyLCAweDBhLAotMHg5ZCwgMHgxMywgMHg5YSwgMHgwMCwgMHgxNCwgMHgyOCwgMHgwNCwgMHgxNCwgMHgyNCwgMHgwOCwgMHgxNCwgMHgwNCwgMHgxMCwgMHgxMywgMHhhZSwgMHgyMCwKLTB4MTMsIDB4Y2UsIDB4NjAsIDB4MTMsIDB4ZGYsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MTQsIDB4MmEsIDB4ODUsIDB4NDgsIDB4NDMsIDB4ODUsIDB4NGEsIDB4NDIsCi0weDg1LCAweDRjLCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDYwLCAweDAzLCAweDAyLCAweDE0LCAweDJhLCAweDgwLCAweDFiLCAweGU1LCAweDQ4LAotMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MywgMHhlNSwgMHg0YSwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MiwgMHhlNSwgMHg0YywgMHhjNCwgMHg1NCwKLTB4MGYsIDB4ZjUsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4NjEsIDB4NTMsIDB4NDMsIDB4MGYsIDB4ODAsIDB4NWMsIDB4ODUsIDB4NDksCi0weDQzLCAweDg1LCAweDRiLCAweDQyLCAweDg1LCAweDRkLCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDcwLCAweDRkLCAweDgwLCAweDFiLCAweGU1LAotMHg0OSwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MywgMHhlNSwgMHg0YiwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MiwgMHhlNSwgMHg0ZCwgMHhjNCwKLTB4NTQsIDB4MGYsIDB4ZjUsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4MzAsIDB4ZTUsIDB4NDMsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MTAsCi0weGY1LCAweDQzLCAweDgwLCAweDI2LCAweGU1LCAweDQ3LCAweDY0LCAweDA0LCAweDYwLCAweDA1LCAweGU1LCAweDQ3LCAweGI0LCAweDA1LCAweDA2LCAweDQzLAotMHg1ZSwgMHgwNCwgMHg3NSwgMHg0MiwgMHgwOSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwNiwgMHgxMCwgMHhlNSwgMHg0MywgMHg1NCwgMHgwZiwgMHg0NCwgMHgzMCwKLTB4ZjUsIDB4NDMsIDB4ODAsIDB4MDYsIDB4ZDIsIDB4NGIsIDB4ODAsIDB4MDIsIDB4ZDIsIDB4NGMsIDB4ZTQsIDB4ZjUsIDB4MjUsIDB4ZTUsIDB4NDIsIDB4YzQsCi0weDU0LCAweGYwLCAweGZmLCAweGU1LCAweDQzLCAweDU0LCAweDBmLCAweDRmLCAweGY1LCAweDVmLCAweGQyLCAweDYwLCAweDIyLCAweGQyLCAweDE1LCAweGU1LAotMHg0NywgMHgyNCwgMHhmNSwgMHg2MCwgMHgwYiwgMHgyNCwgMHhjYiwgMHg2MCwgMHgwNywgMHgyNCwgMHg0MCwgMHg3MCwgMHgwNiwgMHhjMiwgMHgxNSwgMHgyMiwKLTB4MTIsIDB4MTcsIDB4NzksIDB4MTIsIDB4MTQsIDB4NWYsIDB4YzIsIDB4MTUsIDB4YzIsIDB4YWYsIDB4YzIsIDB4MDQsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4YzIsCi0weGFmLCAweDkwLCAweDA0LCAweDE0LCAweGUwLCAweDU0LCAweDBlLCAweDYwLCAweDA0LCAweGQyLCAweDE4LCAweDgwLCAweDA4LCAweGU1LCAweDRlLCAweDQ1LAotMHg0ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHgxOCwgMHhkMiwgMHhhZiwgMHg5MCwgMHgwNCwgMHgxNCwgMHhlMCwgMHhhMiwgMHhlNCwgMHg5MiwgMHgxOSwgMHg3NCwKLTB4MWUsIDB4ZjAsIDB4ZTUsIDB4NWYsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4MmQsIDB4ZTUsIDB4MjUsIDB4NzAsIDB4MTMsIDB4MzAsIDB4MTgsIDB4MDUsIDB4ZTUsCi0weDVmLCAweDIwLCAweGU1LCAweDBiLCAweDMwLCAweDE5LCAweDE5LCAweGU1LCAweDVmLCAweDU0LCAweDMwLCAweGZmLCAweGJmLCAweDMwLCAweDExLCAweGU1LAotMHgyNSwgMHg3MCwgMHgwNSwgMHg3NSwgMHgyNSwgMHgwYywgMHg4MCwgMHgwMiwgMHgxNSwgMHgyNSwgMHhkMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgwZiwKLTB4ZTUsIDB4NWYsIDB4MzAsIDB4ZTYsIDB4MDYsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MDQsIDB4ZDIsIDB4NmMsIDB4YzIsIDB4NmQsIDB4ZTUsCi0weDQ3LCAweDY0LCAweDAzLCAweDcwLCAweDIxLCAweDMwLCAweDRiLCAweDA2LCAweGMyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDE4LCAweGU1LCAweDI1LAotMHg3MCwgMHgwMywgMHgzMCwgMHg0YywgMHgxMSwgMHhjMiwgMHg0YywgMHhlNSwgMHgyNSwgMHg3MCwgMHgwNSwgMHg3NSwgMHgyNSwgMHgwNywgMHg4MCwgMHgwMiwKLTB4MTUsIDB4MjUsIDB4ZDIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDksIDB4MTQsIDB4ZTUsIDB4NDQsIDB4MjAsIDB4ZTMsIDB4MGIsCi0weGU1LCAweDNhLCAweDY0LCAweDAyLCAweDYwLCAweDA1LCAweGU1LCAweDNhLCAweGI0LCAweDAzLCAweDA0LCAweGMyLCAweDZjLCAweGQyLCAweDZkLCAweGU1LAotMHg0NywgMHhiNCwgMHgwYSwgMHgxMywgMHhlNSwgMHgzYSwgMHhiNCwgMHgwMSwgMHgwNiwgMHhjMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgwOCwgMHhlNSwKLTB4M2EsIDB4NzAsIDB4MDQsIDB4ZDIsIDB4NmMsIDB4YzIsIDB4NmQsIDB4MjAsIDB4NjksIDB4MDcsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTAsIDB4MDIsIDB4YjIsCi0weDY4LCAweDIwLCAweDZiLCAweDA3LCAweGU1LCAweDVlLCAweDIwLCAweGUxLCAweDAyLCAweGIyLCAweDZhLCAweDIwLCAweDZkLCAweDA3LCAweGU1LCAweDVlLAotMHgyMCwgMHhlMiwgMHgwMiwgMHhiMiwgMHg2YywgMHg3NSwgMHgyZSwgMHg0MCwgMHgyMCwgMHg2OSwgMHgwNCwgMHhhMiwgMHg2OCwgMHg4MCwgMHgyNiwgMHgzMCwKLTB4NjgsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTIsIDB4ODAsIDB4MWQsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTIsIDB4MDQsIDB4N2YsIDB4MDEsIDB4ODAsCi0weDAyLCAweDdmLCAweDAwLCAweGU1LCAweDQ2LCAweDU0LCAweGYwLCAweGZlLCAweGJlLCAweGYwLCAweDA0LCAweDdlLCAweDAxLCAweDgwLCAweDAyLCAweDdlLAotMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHg3MywgMHg5MiwgMHg3MiwgMHgyMCwgMHg2YiwgMHgwNCwgMHhhMiwgMHg2YSwgMHg4MCwgMHgyNiwKLTB4MzAsIDB4NmEsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTIsIDB4ODAsIDB4MWQsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTAsIDB4MDQsIDB4N2YsIDB4MDEsCi0weDgwLCAweDAyLCAweDdmLCAweDAwLCAweGU1LCAweDQ2LCAweDU0LCAweGYwLCAweGZlLCAweGJlLCAweGYwLCAweDA0LCAweDdlLCAweDAxLCAweDgwLCAweDAyLAotMHg3ZSwgMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHg3NSwgMHg5MiwgMHg3NCwgMHgyMCwgMHg2ZCwgMHgwNCwgMHhhMiwgMHg2YywgMHg4MCwKLTB4MjYsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MGEsIDB4NzAsIDB4MjIsIDB4MzAsIDB4NmMsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTMsIDB4ODAsIDB4MTcsCi0weGU1LCAweDNhLCAweGI0LCAweDAxLCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUzLCAweDgwLCAweDM0LCAweGU1LCAweDQ2LCAweDIwLCAweGU0LCAweDAzLAotMHgzMCwgMHhlNSwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHg4MCwgMHgyNiwgMHgzMCwgMHg2YywgMHgwNiwgMHhlNSwgMHg0NiwgMHhhMiwgMHhlMiwKLTB4ODAsIDB4MWQsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTEsIDB4MDQsIDB4N2YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4NTQsCi0weGYwLCAweGZlLCAweGJlLCAweGYwLCAweDA0LCAweDdlLCAweDAxLCAweDgwLCAweDAyLCAweDdlLCAweDAwLCAweGVlLCAweDZmLCAweDI0LCAweGZmLCAweDkyLAotMHg3MSwgMHg5MiwgMHg3MCwgMHg5MCwgMHgxMCwgMHgwMCwgMHhlMCwgMHg5MCwgMHgxMCwgMHgyYywgMHhmMCwgMHg5MCwgMHgxMCwgMHgwMywgMHhlMCwgMHhjMywKLTB4OTQsIDB4MzAsIDB4NDAsIDB4MTQsIDB4YTIsIDB4NzEsIDB4OTIsIDB4NzcsIDB4YTIsIDB4NzAsIDB4OTIsIDB4NzYsIDB4ZTUsIDB4MmUsIDB4MTMsIDB4MTMsCi0weDU0LCAweDNmLCAweGY1LCAweDJlLCAweGMyLCAweDc3LCAweGQyLCAweDc2LCAweDkwLCAweDEwLCAweDJmLCAweGU1LCAweDJlLCAweGYwLCAweGU1LCAweDQ3LAotMHg2NCwgMHgwNiwgMHg3MCwgMHgzOSwgMHg5MCwgMHgwMiwgMHgyOSwgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHhlNSwgMHg0MywgMHhjNCwgMHg1NCwgMHgwZiwKLTB4MTQsIDB4NjAsIDB4MGMsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MGMsIDB4MjQsIDB4MDMsIDB4NzAsIDB4MTMsIDB4YzIsIDB4MzgsIDB4ODAsIDB4MGYsIDB4ZDIsCi0weDM4LCAweDgwLCAweDBiLCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDAzLCAweGQzLCAweDgwLCAweDAxLCAweGMzLCAweDkyLCAweDM4LCAweDMwLCAweDQ3LAotMHgwNSwgMHhhZiwgMHgyNywgMHgwMiwgMHgxNywgMHg3MywgMHhlNSwgMHgyNywgMHhmNCwgMHhmZiwgMHgwMiwgMHgxNywgMHg3MywgMHhlNSwgMHg0NywgMHg2NCwKLTB4MDcsIDB4NjAsIDB4MGYsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MDksIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDksIDB4NjAsIDB4MDMsIDB4MDIsCi0weDE2LCAweGYyLCAweDkwLCAweDAyLCAweDI5LCAweGUwLCAweDU0LCAweGZjLCAweGYwLCAweGU1LCAweDNhLCAweDE0LCAweDYwLCAweDIyLCAweDE0LCAweDYwLAotMHgyNSwgMHgxNCwgMHg2MCwgMHgyZCwgMHgyNCwgMHhmYywgMHg2MCwgMHg0OSwgMHgyNCwgMHhmOSwgMHg2MCwgMHgxNCwgMHgyNCwgMHgwZSwgMHg3MCwgMHg1MCwKLTB4ZTUsIDB4NDYsIDB4MTMsIDB4MTMsIDB4NTQsIDB4M2YsIDB4NzUsIDB4ZjAsIDB4MDMsIDB4ODQsIDB4ZTUsIDB4ZjAsIDB4MjQsIDB4ZmYsIDB4ODAsIDB4M2EsCi0weGQyLCAweDM5LCAweGMyLCAweDM4LCAweDgwLCAweDNlLCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDAzLCAweGQzLCAweDgwLCAweDFkLCAweGMzLCAweDgwLAotMHgxYSwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwZCwgMHg1NCwgMHgzOCwgMHhjMywgMHg5NCwgMHgzMCwgMHg1MCwgMHgwNiwgMHg3ZSwgMHgwMCwgMHg3ZiwKLTB4MDEsIDB4ODAsIDB4MDQsIDB4N2UsIDB4MDAsIDB4N2YsIDB4MDAsIDB4ZWUsIDB4NGYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MzgsIDB4YzIsIDB4MzksIDB4ODAsCi0weDEzLCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDAzLCAweGQzLCAweDgwLCAweDAxLCAweGMzLCAweDkyLCAweDM5LCAweGMyLCAweDM4LCAweDgwLCAweDA0LAotMHhjMiwgMHgzOCwgMHhjMiwgMHgzOSwgMHgzMCwgMHg0NywgMHgwNCwgMHhhZiwgMHgyNywgMHg4MCwgMHgwNCwgMHhlNSwgMHgyNywgMHhmNCwgMHhmZiwgMHgwMiwKLTB4MTcsIDB4NzMsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MGMsIDB4NjAsIDB4MDYsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MGIsIDB4NzAsIDB4N2EsIDB4OTAsIDB4MDIsCi0weDI5LCAweGUwLCAweDU0LCAweGZkLCAweGYwLCAweGU1LCAweDNhLCAweDE0LCAweDYwLCAweDIwLCAweDE0LCAweDYwLCAweDIxLCAweDE0LCAweDYwLCAweDJiLAotMHgyNCwgMHhmYywgMHg2MCwgMHg0NSwgMHgyNCwgMHhmOSwgMHg2MCwgMHgxMiwgMHgyNCwgMHgwZSwgMHg3MCwgMHg0YSwgMHhlNSwgMHg0NiwgMHgxMywgMHgxMywKLTB4NTQsIDB4M2YsIDB4NzUsIDB4ZjAsIDB4MDMsIDB4ODQsIDB4ZTUsIDB4ZjAsIDB4ODAsIDB4MjksIDB4ZDIsIDB4MzksIDB4ODAsIDB4M2EsIDB4ZTUsIDB4NDYsCi0weDMwLCAweGUyLCAweDAzLCAweGQzLCAweDgwLCAweDAxLCAweGMzLCAweDkyLCAweDM5LCAweDgwLCAweDJkLCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDBkLAotMHg1NCwgMHgzOCwgMHhjMywgMHg5NCwgMHgzMCwgMHg1MCwgMHgwNiwgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwMSwgMHg4MCwgMHgwNCwgMHg3ZSwgMHgwMCwgMHg3ZiwKLTB4MDAsIDB4ZWUsIDB4NGYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MzksIDB4ODAsIDB4MGYsIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MDMsIDB4ZDMsIDB4ODAsCi0weDAxLCAweGMzLCAweDkyLCAweDM5LCAweDgwLCAweDAyLCAweGMyLCAweDM5LCAweDMwLCAweDQ3LCAweDA0LCAweGFmLCAweDI3LCAweDgwLCAweDA0LCAweGU1LAotMHgyNywgMHhmNCwgMHhmZiwgMHg5MCwgMHgwMiwgMHgyOCwgMHhlZiwgMHhmMCwgMHgyMiwgMHhlNSwgMHg0NywgMHhiNCwgMHgwYiwgMHgxMCwgMHg5MCwgMHgwMiwKLTB4MjksIDB4ZTAsIDB4NTQsIDB4ZWIsIDB4ZjAsIDB4ZTUsIDB4MjcsIDB4NTQsIDB4ZWIsIDB4NDUsIDB4NDUsIDB4ZjUsIDB4MjcsIDB4MjIsIDB4ZTQsIDB4OTAsCi0weDAyLCAweDI5LCAweGYwLCAweDMwLCAweDQ3LCAweDA0LCAweGFmLCAweDQ1LCAweDgwLCAweDA0LCAweGU1LCAweDQ1LCAweGY0LCAweGZmLCAweDkwLCAweDAyLAotMHgyOCwgMHhlZiwgMHhmMCwgMHgyMiwgMHg4ZiwgMHg1MCwgMHhkMiwgMHg1OSwgMHgyMiwgMHg4ZiwgMHg1NCwgMHhkMiwgMHg1OCwgMHgyMiwgMHhlNCwgMHhmNSwKLTB4NjIsIDB4YzIsIDB4YWYsIDB4ZTUsIDB4NTEsIDB4MTQsIDB4NjAsIDB4NDgsIDB4MTQsIDB4NjAsIDB4NjYsIDB4MjQsIDB4MDIsIDB4NjAsIDB4MDMsIDB4MDIsCi0weDE4LCAweGI2LCAweGQyLCAweDU5LCAweDc1LCAweDU1LCAweDAxLCAweDkwLCAweDAyLCAweGEyLCAweGUwLCAweDU0LCAweDdmLCAweGYwLCAweGEzLCAweGUwLAotMHgyMCwgMHhlNywgMHgyMywgMHg5MCwgMHgwNCwgMHgzNCwgMHhlMCwgMHhiNCwgMHgwMiwgMHgxYywgMHhhMywgMHhlMCwgMHhiNCwgMHgwMiwgMHgxNywgMHhhMywKLTB4ZTAsIDB4YjQsIDB4MDIsIDB4MTIsIDB4N2YsIDB4MjAsIDB4MTIsIDB4MTcsIDB4YTQsIDB4OTAsIDB4MTAsIDB4MDQsIDB4ZTAsIDB4NTQsIDB4ZjMsIDB4ZjAsCi0weDc1LCAweDUxLCAweDAxLCAweDAyLCAweDE4LCAweGI2LCAweGU1LCAweDUwLCAweDcwLCAweDA2LCAweDc1LCAweDYyLCAweDAzLCAweDAyLCAweDE4LCAweGI2LAotMHg5MCwgMHgxMiwgMHgwMCwgMHhlMCwgMHg1NCwgMHgwMywgMHg3MCwgMHgxMiwgMHg3ZiwgMHgyMCwgMHgxMiwgMHgxNywgMHhhNCwgMHg5MCwgMHgwMiwgMHhhMiwKLTB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4NzUsIDB4NTEsIDB4MDIsIDB4MDIsIDB4MTgsIDB4YjYsIDB4ZTUsIDB4NTAsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTgsCi0weGIxLCAweDkwLCAweDAyLCAweGEzLCAweGUwLCAweDMwLCAweGU2LCAweDAzLCAweDAyLCAweDE4LCAweGFkLCAweDkwLCAweDA0LCAweDM3LCAweGUwLCAweDY0LAotMHgyMiwgMHg3MCwgMHg3YSwgMHg5MCwgMHgwMSwgMHg4YSwgMHg3NCwgMHg3ZSwgMHhmMCwgMHg5MCwgMHgwMSwgMHg5NiwgMHhmMCwgMHg5MCwgMHgxMiwgMHgwNCwKLTB4NzQsIDB4MGEsIDB4ZjAsIDB4ZTUsIDB4NTgsIDB4YjQsIDB4NzIsIDB4MTUsIDB4ZTUsIDB4NTksIDB4YjQsIDB4MzUsIDB4MTAsIDB4ZTQsIDB4OTAsIDB4MDUsCi0weDAwLCAweGYwLCAweGEzLCAweDc0LCAweDA4LCAweGYwLCAweGEzLCAweDc0LCAweDAxLCAweGYwLCAweDc0LCAweDAzLCAweGYwLCAweDdmLCAweDAxLCAweDEyLAotMHgwZCwgMHgyYSwgMHg5MCwgMHgxMywgMHgyOCwgMHhlMCwgMHg1NCwgMHhmMCwgMHhmMCwgMHhhMywgMHhlMCwgMHg1NCwgMHhmMCwgMHhmMCwgMHhlNSwgMHg1OSwKLTB4YjQsIDB4MzUsIDB4MTQsIDB4ZTUsIDB4M2MsIDB4ZjQsIDB4NjAsIDB4MDYsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4ZjMsIDB4ODAsIDB4MTQsIDB4OTAsIDB4MTMsCi0weDJhLCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDgwLCAweDE0LCAweGU1LCAweDNjLCAweGY0LCAweDkwLCAweDEzLCAweDJhLCAweDYwLCAweDA4LCAweGUwLAotMHg1NCwgMHhmMiwgMHg0NSwgMHgzYywgMHhmMCwgMHg4MCwgMHgwNCwgMHhlMCwgMHg1NCwgMHhmYSwgMHhmMCwgMHg5MCwgMHgwNCwgMHgwMSwgMHhlMCwgMHg1NCwKLTB4ZmQsIDB4ZjAsIDB4NzUsIDB4NjIsIDB4MDEsIDB4NzUsIDB4NTUsIDB4MDIsIDB4ZTQsIDB4ZjUsIDB4NTEsIDB4ODAsIDB4MDksIDB4ZTUsIDB4NTAsIDB4NzAsCi0weDA1LCAweDc1LCAweDYyLCAweDAzLCAweGY1LCAweDUxLCAweGU1LCAweDYyLCAweDYwLCAweDE1LCAweGMyLCAweDAxLCAweGU0LCAweGY1LCAweDUxLCAweGMyLAotMHg1OSwgMHhhZCwgMHg2MiwgMHhhZiwgMHg0MCwgMHgxMiwgMHgxOSwgMHg2MSwgMHhlNSwgMHg2MiwgMHhiNCwgMHgwMywgMHgwMiwgMHhkMiwgMHgwMywgMHhkMiwKLTB4YWYsIDB4MjIsIDB4YzIsIDB4YWYsIDB4MzAsIDB4MDEsIDB4MTIsIDB4ZTQsIDB4OTAsIDB4MDEsIDB4OTYsIDB4ZjAsIDB4ZjUsIDB4NTEsIDB4YzIsIDB4NTksCi0weGMyLCAweDAxLCAweDdkLCAweDAyLCAweGFmLCAweDQwLCAweDEyLCAweDE5LCAweDYxLCAweGU1LCAweDUyLCAweDE0LCAweDYwLCAweDA5LCAweDA0LCAweDcwLAotMHg2ZCwgMHg3NSwgMHg1MiwgMHgwMSwgMHg3NSwgMHg1NSwgMHgwMywgMHg5MCwgMHgwNCwgMHgwMSwgMHhlMCwgMHg0NCwgMHgwZSwgMHhmMCwgMHg5MCwgMHgxMywKLTB4MjgsIDB4ZTAsIDB4NDQsIDB4MGYsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MGYsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MDUsIDB4ZjAsIDB4OTAsCi0weDEyLCAweDA0LCAweDc0LCAweDAzLCAweGYwLCAweGU1LCAweDU4LCAweGI0LCAweDcyLCAweDE2LCAweGU1LCAweDU5LCAweGI0LCAweDM1LCAweDExLCAweDkwLAotMHgwNSwgMHgwMCwgMHg3NCwgMHhlMiwgMHhmMCwgMHhhMywgMHg3NCwgMHgwOCwgMHhmMCwgMHhhMywgMHg3NCwgMHgwMSwgMHhmMCwgMHg3NCwgMHgwMywgMHhmMCwKLTB4N2YsIDB4MDEsIDB4MTIsIDB4MGQsIDB4MmEsIDB4OTAsIDB4MDIsIDB4YTIsIDB4ZTAsIDB4NDQsIDB4YzAsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MDQsIDB4ZTAsCi0weDQ0LCAweDBjLCAweGYwLCAweGU0LCAweGY1LCAweDUyLCAweGY1LCAweDU1LCAweDMwLCAweDAyLCAweDA5LCAweGMyLCAweDAyLCAweDdkLCAweDAxLCAweGFmLAotMHg0MSwgMHgxMiwgMHgxOSwgMHg2MSwgMHgzMCwgMHgwMywgMHgwMiwgMHhjMiwgMHgwMywgMHhlNCwgMHg5MCwgMHgwMSwgMHg5NiwgMHhmMCwgMHhkMiwgMHhhZiwKLTB4MjIsIDB4ZWYsIDB4ZjQsIDB4NjAsIDB4MmQsIDB4ZTQsIDB4ZmUsIDB4NzQsIDB4MTQsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsCi0weDgzLCAweGUwLCAweGI0LCAweGZmLCAweDE5LCAweDc0LCAweDE0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweGVmLAotMHhmMCwgMHg3NCwgMHgxYywgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHhlZCwgMHhmMCwgMHgyMiwgMHgwZSwgMHhiZSwKLTB4MDQsIDB4ZDUsIDB4MjIsIDB4MjIsIDB4MjIsIDB4OTAsIDB4NzAsIDB4MmEsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4NGQsIDB4YzIsIDB4YWYsIDB4OTAsIDB4NzAsCi0weDI4LCAweGUwLCAweDkwLCAweDEwLCAweDFjLCAweGYwLCAweDkwLCAweDcwLCAweDI5LCAweGUwLCAweDkwLCAweDEwLCAweDFkLCAweGYwLCAweDkwLCAweDcwLAotMHgyYSwgMHhlMCwgMHg5MCwgMHgxMCwgMHgxZSwgMHhmMCwgMHg5MCwgMHgxMCwgMHgxYywgMHhlMCwgMHhmNSwgMHg2MiwgMHg5MCwgMHgxMCwgMHgxZSwgMHhlMCwKLTB4MjAsIDB4ZTEsIDB4ZjMsIDB4OTAsIDB4MTAsIDB4MWMsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4MjgsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MWQsIDB4ZTAsIDB4OTAsCi0weDcwLCAweDI5LCAweGYwLCAweDkwLCAweDEwLCAweDFlLCAweGUwLCAweDkwLCAweDcwLCAweDJhLCAweGYwLCAweDMwLCAweDRhLCAweDA3LCAweDkwLCAweDcwLAotMHgyNCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHhjMiwgMHgwNSwgMHhkMiwgMHhhZiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTEsIDB4N2IsIDB4YzQsCi0weGZmLCAweGZmLCAweGZmLCAweDAyLCAweDEwLCAweDI4LCAweDAyLCAweDEwLCAweDMyLCAweDAyLCAweDEwLCAweDc4LCAweDAyLCAweDEzLCAweDFmLCAweDAyLAotMHgxMywgMHgyMCwgMHgwMiwgMHgxMywgMHgzZiwgMHgwMiwgMHgxMywgMHg0NCwgMHgxMiwgMHgxMywgMHg0MCwgMHgyMiwgMHgwMiwgMHgxNywgMHhhZSwgMHgwMiwKLTB4MTgsIDB4ZDIsIDB4MDIsIDB4MTQsIDB4M2QsIDB4MDIsIDB4MTMsIDB4NzgsIDB4MzAsIDB4MDUsIDB4MDYsIDB4MjAsIDB4MGQsIDB4MDMsIDB4MTIsIDB4MTksCi0weDk1LCAweDIyLCAweDkwLCAweDAxLCAweDhjLCAweGUwLCAweDMwLCAweGUzLCAweDFiLCAweGU1LCAweDRjLCAweDMwLCAweGUwLCAweDA0LCAweDdmLCAweDQwLAotMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHg5MCwgMHgxMCwgMHgyZiwgMHhlZiwgMHhmMCwgMHg5MCwgMHgwMSwgMHg4YywgMHg3NCwgMHgwOCwgMHhmMCwgMHhlNCwKLTB4OTAsIDB4MDEsIDB4YTcsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4OGMsIDB4ZTAsIDB4MzAsIDB4ZTAsIDB4MWMsIDB4OTAsIDB4MDEsIDB4ODAsIDB4ZTAsIDB4YjQsCi0weDAyLCAweDE1LCAweGEzLCAweGUwLCAweGI0LCAweDAxLCAweDEwLCAweDkwLCAweDAxLCAweDg0LCAweGUwLCAweGI0LCAweDgxLCAweDA5LCAweDkwLCAweDAxLAotMHg4YywgMHg3NCwgMHgwMSwgMHhmMCwgMHgxMiwgMHgwZCwgMHhkZCwgMHgyMiwgMHg5MCwgMHgwNCwgMHgxNCwgMHhlMCwgMHgyMCwgMHhlNywgMHgwMywgMHgwMiwKLTB4MTMsIDB4MWUsIDB4OTAsIDB4NzAsIDB4MTIsIDB4ZTAsIDB4ZjUsIDB4NTYsIDB4OTAsIDB4MDQsIDB4MDQsIDB4ZTAsIDB4MTIsIDB4MGEsIDB4YjYsIDB4MTAsCi0weGQ5LCAweDMxLCAweDEwLCAweGJkLCAweDM2LCAweDExLCAweDAyLCAweDUwLCAweDExLCAweDM5LCAweDUxLCAweDExLCAweDQyLCAweDUyLCAweDExLCAweDQyLAotMHg1MywgMHgxMSwgMHg0MiwgMHg1NCwgMHgxMSwgMHg4MywgMHg1NSwgMHgxMSwgMHhkMiwgMHg1NiwgMHgxMiwgMHgyNSwgMHg3MCwgMHgxMiwgMHg1MCwgMHg3MSwKLTB4MTIsIDB4N2UsIDB4NzIsIDB4MTIsIDB4ZDUsIDB4NzMsIDB4MTIsIDB4ZjYsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4MWUsIDB4OTAsIDB4NzAsIDB4MTEsCi0weGUwLCAweGY1LCAweDNjLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU1LCAweDU2LAotMHhmNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgxMywgMHgxZSwgMHgwMiwgMHgxMywgMHgxNywgMHgyMCwgMHgwMiwgMHgwMywgMHgzMCwgMHgwMywgMHgxZCwgMHg3ZCwKLTB4MDIsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsCi0weGYwLCAweGU1LCAweDU2LCAweGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEzLCAweDFlLCAweDAyLCAweDEzLCAweDE3LCAweDg1LCAweDU2LCAweDQxLCAweGQyLAotMHgwMiwgMHgyMiwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmZiwgMHhiZiwgMHgwYSwgMHgwZCwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwKLTB4YjQsIDB4MDgsIDB4MDYsIDB4NzUsIDB4NGUsIDB4MDEsIDB4NzUsIDB4NGYsIDB4ODQsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4ZmYsCi0weGJmLCAweDAyLCAweDEyLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweDY0LCAweDA4LCAweDYwLCAweDA0LCAweGUwLCAweGI0LCAweDIwLCAweDA2LCAweDc1LAotMHg0ZSwgMHgwMywgMHg3NSwgMHg0ZiwgMHgyMCwgMHhlNCwgMHhmNSwgMHgyNywgMHgyMiwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHgyNCwgMHhmZiwgMHg5MiwKLTB4NDcsIDB4MjIsIDB4OTAsIDB4MDQsIDB4MDQsIDB4ZTAsIDB4MjUsIDB4ZTAsIDB4MjQsIDB4NWQsIDB4ZjUsIDB4NTcsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsCi0weGZmLCAweDc0LCAweDQ3LCAweDI1LCAweDU3LCAweGY4LCAweGM2LCAweGVmLCAweGM2LCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweGZmLCAweDc0LCAweDQ4LAotMHgyNSwgMHg1NywgMHhmOCwgMHhjNiwgMHhlZiwgMHhjNiwgMHhlNCwgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHhhYSwgMHg5MCwgMHgwNCwgMHgxNCwKLTB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTMsIDB4MWUsCi0weDAyLCAweDEzLCAweDE3LCAweGU1LCAweDQ3LCAweDY0LCAweDA3LCAweDYwLCAweDFkLCAweGU1LCAweDQ3LCAweDY0LCAweDA4LCAweDYwLCAweDE3LCAweGU1LAotMHg0NywgMHg2NCwgMHgwOSwgMHg2MCwgMHgxMSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwYSwgMHg2MCwgMHgwYiwgMHhlNSwgMHg0NywgMHg2NCwgMHgwYiwgMHg2MCwKLTB4MDUsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MGMsIDB4MDgsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4M2EsIDB4ZTUsIDB4NDcsCi0weGI0LCAweDA5LCAweDA4LCAweGU1LCAweDNhLCAweGI0LCAweDAzLCAweDAzLCAweGU0LCAweGY1LCAweDQ2LCAweGU1LCAweDQ3LCAweGI0LCAweDBhLCAweDA4LAotMHhlNSwgMHgzYSwgMHhiNCwgMHgwMSwgMHgwMywgMHhlNCwgMHhmNSwgMHg0NiwgMHhlNCwgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHhhYSwgMHhkMiwKLTB4MDQsIDB4MjIsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZjQsIDB4ZmYsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4NWYsIDB4ZmYsIDB4OTAsIDB4NzAsCi0weDExLCAweGUwLCAweDU1LCAweDI3LCAweDRmLCAweDkwLCAweDcwLCAweDE4LCAweGYwLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweDkwLCAweDcwLCAweDE5LAotMHhmMCwgMHhlNCwgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHhhYSwgMHgzMCwgMHgxNSwgMHgwMywgMHhkMiwgMHgxNCwgMHgyMiwgMHg5MCwgMHg3MCwKLTB4MTgsIDB4ZTAsIDB4ZjUsIDB4MjcsIDB4OTAsIDB4MDIsIDB4MjksIDB4ZTAsIDB4ZmYsIDB4OTAsIDB4NzAsIDB4MTksIDB4ZTAsIDB4ZmUsIDB4ZWYsIDB4NWUsCi0weDkwLCAweDAyLCAweDI5LCAweGYwLCAweDMwLCAweDQ3LCAweDA0LCAweGFmLCAweDI3LCAweDgwLCAweDA0LCAweGU1LCAweDI3LCAweGY0LCAweGZmLCAweDkwLAotMHgwMiwgMHgyOCwgMHhlZiwgMHhmMCwgMHgyMiwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmZSwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHhmZCwgMHhlZCwKLTB4ZjgsIDB4ZTYsIDB4ZjUsIDB4NTcsIDB4ZmQsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsCi0weGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEzLCAweDFlLCAweDAyLCAweDEzLCAweDE3LAotMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmZSwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHhmZCwgMHhlZCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwKLTB4ZjUsIDB4NTcsIDB4ZmQsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsCi0weDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEzLCAweDFlLCAweDAyLCAweDEzLCAweDE3LCAweDkwLCAweDEwLAotMHgwMCwgMHhlMCwgMHhmNSwgMHg1NywgMHg5MCwgMHgxMCwgMHgwMiwgMHhlMCwgMHhmNSwgMHg1OCwgMHhhMywgMHhlMCwgMHhmNSwgMHg1OSwgMHhlNSwgMHg1OCwKLTB4YjQsIDB4NzAsIDB4MWUsIDB4ZTUsIDB4NTksIDB4YjQsIDB4MzAsIDB4MTksIDB4OTAsIDB4MDUsIDB4MDgsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ZmQsCi0weDkwLCAweDA1LCAweDA1LCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDQ0LCAweDA0LCAweGYwLCAweGVkLCAweDU0LCAweGZlLCAweDkwLCAweDA1LCAweDA4LAotMHhmMCwgMHhlNCwgMHhmNSwgMHg0ZSwgMHhmNSwgMHg0ZiwgMHg3NSwgMHgzYSwgMHhmZiwgMHg3NSwgMHgzYywgMHhmZiwgMHhhZCwgMHg1NywgMHhhZiwgMHg1NiwKLTB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsCi0weGY0LCAweDYwLCAweDRiLCAweDgwLCAweDQyLCAweDkwLCAweDcwLCAweDEwLCAweGUwLCAweDI0LCAweGZmLCAweDkyLCAweDkzLCAweGU0LCAweGZkLCAweGFmLAotMHg1NiwgMHgxMiwgMHgwYiwgMHhhYSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwKLTB4NTYsIDB4ZjQsIDB4NjAsIDB4MmEsIDB4ODAsIDB4MjEsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NGEsIDB4ZDIsIDB4MDUsCi0weGFkLCAweDU3LCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweGFhLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLAotMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg2MCwgMHgwNywgMHg5MCwgMHg3MCwgMHgyNSwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgyMiwgMHgyMiwKLTB4ZTUsIDB4NTMsIDB4NzAsIDB4MWEsIDB4MzAsIDB4NjAsIDB4MDksIDB4YjIsIDB4NGQsIDB4MzAsIDB4NGQsIDB4MDQsIDB4MDUsIDB4NDYsIDB4YzIsIDB4MDQsCi0weGU1LCAweDRmLCAweDQ1LCAweDRlLCAweDYwLCAweDA4LCAweGU1LCAweDRmLCAweDE1LCAweDRmLCAweDcwLCAweDAyLCAweDE1LCAweDRlLCAweDIyLCAweDIyLAotMHhjMiwgMHg0MiwgMHhkMywgMHgyMiwgMHgzMCwgMHgxNCwgMHgzMCwgMHg5MCwgMHg3MCwgMHgxOSwgMHhlMCwgMHg1NSwgMHgyNywgMHhmZiwgMHg5MCwgMHg3MCwKLTB4MTgsIDB4ZTAsIDB4NGYsIDB4ZjUsIDB4MjcsIDB4OTAsIDB4MDIsIDB4MjksIDB4ZTAsIDB4ZmYsIDB4OTAsIDB4NzAsIDB4MTksIDB4ZTAsIDB4ZmUsIDB4ZWYsCi0weDVlLCAweDkwLCAweDAyLCAweDI5LCAweGYwLCAweDMwLCAweDQ3LCAweDA0LCAweGFmLCAweDI3LCAweDgwLCAweDA0LCAweGU1LCAweDI3LCAweGY0LCAweGZmLAotMHg5MCwgMHgwMiwgMHgyOCwgMHhlZiwgMHhmMCwgMHhjMiwgMHgxNCwgMHgyMiwgMHhjMiwgMHg0YiwgMHhjMiwgMHg0YywgMHhlNSwgMHg0NCwgMHgxMiwgMHgwYSwKLTB4YjYsIDB4MTMsIDB4OWEsIDB4MDAsIDB4MTQsIDB4MjgsIDB4MDQsIDB4MTQsIDB4MjQsIDB4MDgsIDB4MTQsIDB4MDQsIDB4MTAsIDB4MTMsIDB4YWUsIDB4MjAsCi0weDEzLCAweGNlLCAweDYwLCAweDEzLCAweGRmLCAweGEwLCAweDAwLCAweDAwLCAweDE0LCAweDJhLCAweDg1LCAweDQ4LCAweDQzLCAweDg1LCAweDRhLCAweDQyLAotMHg4NSwgMHg0YywgMHg1ZSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxNCwgMHgyYSwgMHg4MCwgMHgxYiwgMHhlNSwgMHg0OCwKLTB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDMsIDB4ZTUsIDB4NGEsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDIsIDB4ZTUsIDB4NGMsIDB4YzQsIDB4NTQsCi0weDBmLCAweGY1LCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDcwLCAweDYxLCAweDUzLCAweDQzLCAweDBmLCAweDgwLCAweDVjLCAweDg1LCAweDQ5LAotMHg0MywgMHg4NSwgMHg0YiwgMHg0MiwgMHg4NSwgMHg0ZCwgMHg1ZSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwgMHg3MCwgMHg0ZCwgMHg4MCwgMHgxYiwgMHhlNSwKLTB4NDksIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDMsIDB4ZTUsIDB4NGIsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDIsIDB4ZTUsIDB4NGQsIDB4YzQsCi0weDU0LCAweDBmLCAweGY1LCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDcwLCAweDMwLCAweGU1LCAweDQzLCAweDU0LCAweDBmLCAweDQ0LCAweDEwLAotMHhmNSwgMHg0MywgMHg4MCwgMHgyNiwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNCwgMHg2MCwgMHgwNSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwNSwgMHgwNiwgMHg0MywKLTB4NWUsIDB4MDQsIDB4NzUsIDB4NDIsIDB4MDksIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDYsIDB4MTAsIDB4ZTUsIDB4NDMsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MzAsCi0weGY1LCAweDQzLCAweDgwLCAweDA2LCAweGQyLCAweDRiLCAweDgwLCAweDAyLCAweGQyLCAweDRjLCAweGU0LCAweGY1LCAweDI1LCAweGU1LCAweDQyLCAweGM0LAotMHg1NCwgMHhmMCwgMHhmZiwgMHhlNSwgMHg0MywgMHg1NCwgMHgwZiwgMHg0ZiwgMHhmNSwgMHg1ZiwgMHhkMiwgMHg2MCwgMHgyMiwgMHhkMiwgMHgxNSwgMHhlNSwKLTB4NDcsIDB4MjQsIDB4ZjUsIDB4NjAsIDB4MGIsIDB4MjQsIDB4Y2IsIDB4NjAsIDB4MDcsIDB4MjQsIDB4NDAsIDB4NzAsIDB4MDYsIDB4YzIsIDB4MTUsIDB4MjIsCi0weDEyLCAweDE3LCAweDc5LCAweDEyLCAweDE0LCAweDVmLCAweGMyLCAweDE1LCAweGMyLCAweGFmLCAweGMyLCAweDA0LCAweGQyLCAweGFmLCAweDIyLCAweGMyLAotMHhhZiwgMHg5MCwgMHgwNCwgMHgxNCwgMHhlMCwgMHg1NCwgMHgwZSwgMHg2MCwgMHgwNCwgMHhkMiwgMHgxOCwgMHg4MCwgMHgwOCwgMHhlNSwgMHg0ZSwgMHg0NSwKLTB4NGYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MTgsIDB4ZDIsIDB4YWYsIDB4OTAsIDB4MDQsIDB4MTQsIDB4ZTAsIDB4YTIsIDB4ZTQsIDB4OTIsIDB4MTksIDB4NzQsCi0weDFlLCAweGYwLCAweGU1LCAweDVmLCAweDU0LCAweDBmLCAweGY1LCAweDJkLCAweGU1LCAweDI1LCAweDcwLCAweDEzLCAweDMwLCAweDE4LCAweDA1LCAweGU1LAotMHg1ZiwgMHgyMCwgMHhlNSwgMHgwYiwgMHgzMCwgMHgxOSwgMHgxOSwgMHhlNSwgMHg1ZiwgMHg1NCwgMHgzMCwgMHhmZiwgMHhiZiwgMHgzMCwgMHgxMSwgMHhlNSwKLTB4MjUsIDB4NzAsIDB4MDUsIDB4NzUsIDB4MjUsIDB4MGMsIDB4ODAsIDB4MDIsIDB4MTUsIDB4MjUsIDB4ZDIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MGYsCi0weGU1LCAweDVmLCAweDMwLCAweGU2LCAweDA2LCAweGMyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDA0LCAweGQyLCAweDZjLCAweGMyLCAweDZkLCAweGU1LAotMHg0NywgMHg2NCwgMHgwMywgMHg3MCwgMHgyMSwgMHgzMCwgMHg0YiwgMHgwNiwgMHhjMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgxOCwgMHhlNSwgMHgyNSwKLTB4NzAsIDB4MDMsIDB4MzAsIDB4NGMsIDB4MTEsIDB4YzIsIDB4NGMsIDB4ZTUsIDB4MjUsIDB4NzAsIDB4MDUsIDB4NzUsIDB4MjUsIDB4MDcsIDB4ODAsIDB4MDIsCi0weDE1LCAweDI1LCAweGQyLCAweDZjLCAweGQyLCAweDZkLCAweGU1LCAweDQ3LCAweGI0LCAweDA5LCAweDE0LCAweGU1LCAweDQ0LCAweDIwLCAweGUzLCAweDBiLAotMHhlNSwgMHgzYSwgMHg2NCwgMHgwMiwgMHg2MCwgMHgwNSwgMHhlNSwgMHgzYSwgMHhiNCwgMHgwMywgMHgwNCwgMHhjMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHhlNSwKLTB4NDcsIDB4YjQsIDB4MGEsIDB4MTMsIDB4ZTUsIDB4M2EsIDB4YjQsIDB4MDEsIDB4MDYsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MDgsIDB4ZTUsCi0weDNhLCAweDcwLCAweDA0LCAweGQyLCAweDZjLCAweGMyLCAweDZkLCAweDIwLCAweDY5LCAweDA3LCAweGU1LCAweDVlLCAweDIwLCAweGUwLCAweDAyLCAweGIyLAotMHg2OCwgMHgyMCwgMHg2YiwgMHgwNywgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMSwgMHgwMiwgMHhiMiwgMHg2YSwgMHgyMCwgMHg2ZCwgMHgwNywgMHhlNSwgMHg1ZSwKLTB4MjAsIDB4ZTIsIDB4MDIsIDB4YjIsIDB4NmMsIDB4NzUsIDB4MmUsIDB4NDAsIDB4MjAsIDB4NjksIDB4MDQsIDB4YTIsIDB4NjgsIDB4ODAsIDB4MjYsIDB4MzAsCi0weDY4LCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLCAweDgwLCAweDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUyLCAweDA0LCAweDdmLCAweDAxLCAweDgwLAotMHgwMiwgMHg3ZiwgMHgwMCwgMHhlNSwgMHg0NiwgMHg1NCwgMHhmMCwgMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZSwKLTB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NzMsIDB4OTIsIDB4NzIsIDB4MjAsIDB4NmIsIDB4MDQsIDB4YTIsIDB4NmEsIDB4ODAsIDB4MjYsCi0weDMwLCAweDZhLCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLCAweDgwLCAweDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUwLCAweDA0LCAweDdmLCAweDAxLAotMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHhlNSwgMHg0NiwgMHg1NCwgMHhmMCwgMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwgMHgwMiwKLTB4N2UsIDB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NzUsIDB4OTIsIDB4NzQsIDB4MjAsIDB4NmQsIDB4MDQsIDB4YTIsIDB4NmMsIDB4ODAsCi0weDI2LCAweGU1LCAweDQ3LCAweDY0LCAweDBhLCAweDcwLCAweDIyLCAweDMwLCAweDZjLCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUzLCAweDgwLCAweDE3LAotMHhlNSwgMHgzYSwgMHhiNCwgMHgwMSwgMHgwNiwgMHhlNSwgMHg0NiwgMHhhMiwgMHhlMywgMHg4MCwgMHgzNCwgMHhlNSwgMHg0NiwgMHgyMCwgMHhlNCwgMHgwMywKLTB4MzAsIDB4ZTUsIDB4MDMsIDB4ZDMsIDB4ODAsIDB4MDEsIDB4YzMsIDB4ODAsIDB4MjYsIDB4MzAsIDB4NmMsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTIsCi0weDgwLCAweDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUxLCAweDA0LCAweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweGU1LCAweDQ2LCAweDU0LAotMHhmMCwgMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg5MiwKLTB4NzEsIDB4OTIsIDB4NzAsIDB4OTAsIDB4MTAsIDB4MDAsIDB4ZTAsIDB4OTAsIDB4MTAsIDB4MmMsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MDMsIDB4ZTAsIDB4YzMsCi0weDk0LCAweDMwLCAweDQwLCAweDE0LCAweGEyLCAweDcxLCAweDkyLCAweDc3LCAweGEyLCAweDcwLCAweDkyLCAweDc2LCAweGU1LCAweDJlLCAweDEzLCAweDEzLAotMHg1NCwgMHgzZiwgMHhmNSwgMHgyZSwgMHhjMiwgMHg3NywgMHhkMiwgMHg3NiwgMHg5MCwgMHgxMCwgMHgyZiwgMHhlNSwgMHgyZSwgMHhmMCwgMHhlNSwgMHg0NywKLTB4NjQsIDB4MDYsIDB4NzAsIDB4MzksIDB4OTAsIDB4MDIsIDB4MjksIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4ZTUsIDB4NDMsIDB4YzQsIDB4NTQsIDB4MGYsCi0weDE0LCAweDYwLCAweDBjLCAweDI0LCAweGZlLCAweDYwLCAweDBjLCAweDI0LCAweDAzLCAweDcwLCAweDEzLCAweGMyLCAweDM4LCAweDgwLCAweDBmLCAweGQyLAotMHgzOCwgMHg4MCwgMHgwYiwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHg5MiwgMHgzOCwgMHgzMCwgMHg0NywKLTB4MDUsIDB4YWYsIDB4MjcsIDB4MDIsIDB4MTcsIDB4NzMsIDB4ZTUsIDB4MjcsIDB4ZjQsIDB4ZmYsIDB4MDIsIDB4MTcsIDB4NzMsIDB4ZTUsIDB4NDcsIDB4NjQsCi0weDA3LCAweDYwLCAweDBmLCAweGU1LCAweDQ3LCAweDY0LCAweDA4LCAweDYwLCAweDA5LCAweGU1LCAweDQ3LCAweDY0LCAweDA5LCAweDYwLCAweDAzLCAweDAyLAotMHgxNiwgMHhmMiwgMHg5MCwgMHgwMiwgMHgyOSwgMHhlMCwgMHg1NCwgMHhmYywgMHhmMCwgMHhlNSwgMHgzYSwgMHgxNCwgMHg2MCwgMHgyMiwgMHgxNCwgMHg2MCwKLTB4MjUsIDB4MTQsIDB4NjAsIDB4MmQsIDB4MjQsIDB4ZmMsIDB4NjAsIDB4NDksIDB4MjQsIDB4ZjksIDB4NjAsIDB4MTQsIDB4MjQsIDB4MGUsIDB4NzAsIDB4NTAsCi0weGU1LCAweDQ2LCAweDEzLCAweDEzLCAweDU0LCAweDNmLCAweDc1LCAweGYwLCAweDAzLCAweDg0LCAweGU1LCAweGYwLCAweDI0LCAweGZmLCAweDgwLCAweDNhLAotMHhkMiwgMHgzOSwgMHhjMiwgMHgzOCwgMHg4MCwgMHgzZSwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwMywgMHhkMywgMHg4MCwgMHgxZCwgMHhjMywgMHg4MCwKLTB4MWEsIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MGQsIDB4NTQsIDB4MzgsIDB4YzMsIDB4OTQsIDB4MzAsIDB4NTAsIDB4MDYsIDB4N2UsIDB4MDAsIDB4N2YsCi0weDAxLCAweDgwLCAweDA0LCAweDdlLCAweDAwLCAweDdmLCAweDAwLCAweGVlLCAweDRmLCAweDI0LCAweGZmLCAweDkyLCAweDM4LCAweGMyLCAweDM5LCAweDgwLAotMHgxMywgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHg5MiwgMHgzOSwgMHhjMiwgMHgzOCwgMHg4MCwgMHgwNCwKLTB4YzIsIDB4MzgsIDB4YzIsIDB4MzksIDB4MzAsIDB4NDcsIDB4MDQsIDB4YWYsIDB4MjcsIDB4ODAsIDB4MDQsIDB4ZTUsIDB4MjcsIDB4ZjQsIDB4ZmYsIDB4MDIsCi0weDE3LCAweDczLCAweGU1LCAweDQ3LCAweDY0LCAweDBjLCAweDYwLCAweDA2LCAweGU1LCAweDQ3LCAweDY0LCAweDBiLCAweDcwLCAweDdhLCAweDkwLCAweDAyLAotMHgyOSwgMHhlMCwgMHg1NCwgMHhmZCwgMHhmMCwgMHhlNSwgMHgzYSwgMHgxNCwgMHg2MCwgMHgyMCwgMHgxNCwgMHg2MCwgMHgyMSwgMHgxNCwgMHg2MCwgMHgyYiwKLTB4MjQsIDB4ZmMsIDB4NjAsIDB4NDUsIDB4MjQsIDB4ZjksIDB4NjAsIDB4MTIsIDB4MjQsIDB4MGUsIDB4NzAsIDB4NGEsIDB4ZTUsIDB4NDYsIDB4MTMsIDB4MTMsCi0weDU0LCAweDNmLCAweDc1LCAweGYwLCAweDAzLCAweDg0LCAweGU1LCAweGYwLCAweDgwLCAweDI5LCAweGQyLCAweDM5LCAweDgwLCAweDNhLCAweGU1LCAweDQ2LAotMHgzMCwgMHhlMiwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHg5MiwgMHgzOSwgMHg4MCwgMHgyZCwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwZCwKLTB4NTQsIDB4MzgsIDB4YzMsIDB4OTQsIDB4MzAsIDB4NTAsIDB4MDYsIDB4N2UsIDB4MDAsIDB4N2YsIDB4MDEsIDB4ODAsIDB4MDQsIDB4N2UsIDB4MDAsIDB4N2YsCi0weDAwLCAweGVlLCAweDRmLCAweDI0LCAweGZmLCAweDkyLCAweDM5LCAweDgwLCAweDBmLCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDAzLCAweGQzLCAweDgwLAotMHgwMSwgMHhjMywgMHg5MiwgMHgzOSwgMHg4MCwgMHgwMiwgMHhjMiwgMHgzOSwgMHgzMCwgMHg0NywgMHgwNCwgMHhhZiwgMHgyNywgMHg4MCwgMHgwNCwgMHhlNSwKLTB4MjcsIDB4ZjQsIDB4ZmYsIDB4OTAsIDB4MDIsIDB4MjgsIDB4ZWYsIDB4ZjAsIDB4MjIsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MGIsIDB4MTAsIDB4OTAsIDB4MDIsCi0weDI5LCAweGUwLCAweDU0LCAweGViLCAweGYwLCAweGU1LCAweDI3LCAweDU0LCAweGViLCAweDQ1LCAweDQ1LCAweGY1LCAweDI3LCAweDIyLCAweGU0LCAweDkwLAotMHgwMiwgMHgyOSwgMHhmMCwgMHgzMCwgMHg0NywgMHgwNCwgMHhhZiwgMHg0NSwgMHg4MCwgMHgwNCwgMHhlNSwgMHg0NSwgMHhmNCwgMHhmZiwgMHg5MCwgMHgwMiwKLTB4MjgsIDB4ZWYsIDB4ZjAsIDB4MjIsIDB4OGYsIDB4NTAsIDB4ZDIsIDB4NTksIDB4MjIsIDB4OGYsIDB4NTQsIDB4ZDIsIDB4NTgsIDB4MjIsIDB4ZTQsIDB4ZjUsCi0weDYyLCAweGMyLCAweGFmLCAweGU1LCAweDUxLCAweDE0LCAweDYwLCAweDQ4LCAweDE0LCAweDYwLCAweDY2LCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLAotMHgxOCwgMHhiNiwgMHhkMiwgMHg1OSwgMHg3NSwgMHg1NSwgMHgwMSwgMHg5MCwgMHgwMiwgMHhhMiwgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHhhMywgMHhlMCwKLTB4MjAsIDB4ZTcsIDB4MjMsIDB4OTAsIDB4MDQsIDB4MzQsIDB4ZTAsIDB4YjQsIDB4MDIsIDB4MWMsIDB4YTMsIDB4ZTAsIDB4YjQsIDB4MDIsIDB4MTcsIDB4YTMsCi0weGUwLCAweGI0LCAweDAyLCAweDEyLCAweDdmLCAweDIwLCAweDEyLCAweDE3LCAweGE0LCAweDkwLCAweDEwLCAweDA0LCAweGUwLCAweDU0LCAweGYzLCAweGYwLAotMHg3NSwgMHg1MSwgMHgwMSwgMHgwMiwgMHgxOCwgMHhiNiwgMHhlNSwgMHg1MCwgMHg3MCwgMHgwNiwgMHg3NSwgMHg2MiwgMHgwMywgMHgwMiwgMHgxOCwgMHhiNiwKLTB4OTAsIDB4MTIsIDB4MDAsIDB4ZTAsIDB4NTQsIDB4MDMsIDB4NzAsIDB4MTIsIDB4N2YsIDB4MjAsIDB4MTIsIDB4MTcsIDB4YTQsIDB4OTAsIDB4MDIsIDB4YTIsCi0weGUwLCAweDU0LCAweGJmLCAweGYwLCAweDc1LCAweDUxLCAweDAyLCAweDAyLCAweDE4LCAweGI2LCAweGU1LCAweDUwLCAweDcwLCAweDAzLCAweDAyLCAweDE4LAotMHhiMSwgMHg5MCwgMHgwMiwgMHhhMywgMHhlMCwgMHgzMCwgMHhlNiwgMHgwMywgMHgwMiwgMHgxOCwgMHhhZCwgMHg5MCwgMHgwNCwgMHgzNywgMHhlMCwgMHg2NCwKLTB4MjIsIDB4NzAsIDB4N2EsIDB4OTAsIDB4MDEsIDB4OGEsIDB4NzQsIDB4N2UsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4OTYsIDB4ZjAsIDB4OTAsIDB4MTIsIDB4MDQsCi0weDc0LCAweDBhLCAweGYwLCAweGU1LCAweDU4LCAweGI0LCAweDcyLCAweDE1LCAweGU1LCAweDU5LCAweGI0LCAweDM1LCAweDEwLCAweGU0LCAweDkwLCAweDA1LAotMHgwMCwgMHhmMCwgMHhhMywgMHg3NCwgMHgwOCwgMHhmMCwgMHhhMywgMHg3NCwgMHgwMSwgMHhmMCwgMHg3NCwgMHgwMywgMHhmMCwgMHg3ZiwgMHgwMSwgMHgxMiwKLTB4MGQsIDB4NDgsIDB4OTAsIDB4MTMsIDB4MjgsIDB4ZTAsIDB4NTQsIDB4ZjAsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4ZjAsIDB4ZjAsIDB4ZTUsIDB4NTksCi0weGI0LCAweDM1LCAweDE0LCAweGU1LCAweDNjLCAweGY0LCAweDYwLCAweDA2LCAweGEzLCAweGUwLCAweDU0LCAweGYzLCAweDgwLCAweDE0LCAweDkwLCAweDEzLAotMHgyYSwgMHhlMCwgMHg1NCwgMHhmYiwgMHhmMCwgMHg4MCwgMHgxNCwgMHhlNSwgMHgzYywgMHhmNCwgMHg5MCwgMHgxMywgMHgyYSwgMHg2MCwgMHgwOCwgMHhlMCwKLTB4NTQsIDB4ZjIsIDB4NDUsIDB4M2MsIDB4ZjAsIDB4ODAsIDB4MDQsIDB4ZTAsIDB4NTQsIDB4ZmEsIDB4ZjAsIDB4OTAsIDB4MDQsIDB4MDEsIDB4ZTAsIDB4NTQsCi0weGZkLCAweGYwLCAweDc1LCAweDYyLCAweDAxLCAweDc1LCAweDU1LCAweDAyLCAweGU0LCAweGY1LCAweDUxLCAweDgwLCAweDA5LCAweGU1LCAweDUwLCAweDcwLAotMHgwNSwgMHg3NSwgMHg2MiwgMHgwMywgMHhmNSwgMHg1MSwgMHhlNSwgMHg2MiwgMHg2MCwgMHgxNSwgMHhjMiwgMHgwMSwgMHhlNCwgMHhmNSwgMHg1MSwgMHhjMiwKLTB4NTksIDB4YWQsIDB4NjIsIDB4YWYsIDB4NDAsIDB4MTIsIDB4MTksIDB4NjEsIDB4ZTUsIDB4NjIsIDB4YjQsIDB4MDMsIDB4MDIsIDB4ZDIsIDB4MDMsIDB4ZDIsCi0weGFmLCAweDIyLCAweGMyLCAweGFmLCAweDMwLCAweDAxLCAweDEyLCAweGU0LCAweDkwLCAweDAxLCAweDk2LCAweGYwLCAweGY1LCAweDUxLCAweGMyLCAweDU5LAotMHhjMiwgMHgwMSwgMHg3ZCwgMHgwMiwgMHhhZiwgMHg0MCwgMHgxMiwgMHgxOSwgMHg2MSwgMHhlNSwgMHg1MiwgMHgxNCwgMHg2MCwgMHgwOSwgMHgwNCwgMHg3MCwKLTB4NmQsIDB4NzUsIDB4NTIsIDB4MDEsIDB4NzUsIDB4NTUsIDB4MDMsIDB4OTAsIDB4MDQsIDB4MDEsIDB4ZTAsIDB4NDQsIDB4MGUsIDB4ZjAsIDB4OTAsIDB4MTMsCi0weDI4LCAweGUwLCAweDQ0LCAweDBmLCAweGYwLCAweGEzLCAweGUwLCAweDQ0LCAweDBmLCAweGYwLCAweGEzLCAweGUwLCAweDQ0LCAweDA1LCAweGYwLCAweDkwLAotMHgxMiwgMHgwNCwgMHg3NCwgMHgwMywgMHhmMCwgMHhlNSwgMHg1OCwgMHhiNCwgMHg3MiwgMHgxNiwgMHhlNSwgMHg1OSwgMHhiNCwgMHgzNSwgMHgxMSwgMHg5MCwKLTB4MDUsIDB4MDAsIDB4NzQsIDB4ZTIsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4NzQsIDB4MDMsIDB4ZjAsCi0weDdmLCAweDAxLCAweDEyLCAweDBkLCAweDQ4LCAweDkwLCAweDAyLCAweGEyLCAweGUwLCAweDQ0LCAweGMwLCAweGYwLCAweDkwLCAweDEwLCAweDA0LCAweGUwLAotMHg0NCwgMHgwYywgMHhmMCwgMHhlNCwgMHhmNSwgMHg1MiwgMHhmNSwgMHg1NSwgMHgzMCwgMHgwMiwgMHgwOSwgMHhjMiwgMHgwMiwgMHg3ZCwgMHgwMSwgMHhhZiwKLTB4NDEsIDB4MTIsIDB4MTksIDB4NjEsIDB4MzAsIDB4MDMsIDB4MDIsIDB4YzIsIDB4MDMsIDB4ZTQsIDB4OTAsIDB4MDEsIDB4OTYsIDB4ZjAsIDB4ZDIsIDB4YWYsCi0weDIyLCAweGVmLCAweGY0LCAweDYwLCAweDJkLCAweGU0LCAweGZlLCAweDc0LCAweDE0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LAotMHg4MywgMHhlMCwgMHhiNCwgMHhmZiwgMHgxOSwgMHg3NCwgMHgxNCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHhlZiwKLTB4ZjAsIDB4NzQsIDB4MWMsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MGUsIDB4YmUsCi0weDA0LCAweGQ1LCAweDIyLCAweDIyLCAweDIyLCAweDkwLCAweDcwLCAweDJhLCAweGUwLCAweDMwLCAweGUxLCAweDRkLCAweGMyLCAweGFmLCAweDkwLCAweDcwLAotMHgyOCwgMHhlMCwgMHg5MCwgMHgxMCwgMHgxYywgMHhmMCwgMHg5MCwgMHg3MCwgMHgyOSwgMHhlMCwgMHg5MCwgMHgxMCwgMHgxZCwgMHhmMCwgMHg5MCwgMHg3MCwKLTB4MmEsIDB4ZTAsIDB4OTAsIDB4MTAsIDB4MWUsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MWMsIDB4ZTAsIDB4ZjUsIDB4NjIsIDB4OTAsIDB4MTAsIDB4MWUsIDB4ZTAsCi0weDIwLCAweGUxLCAweGYzLCAweDkwLCAweDEwLCAweDFjLCAweGUwLCAweDkwLCAweDcwLCAweDI4LCAweGYwLCAweDkwLCAweDEwLCAweDFkLCAweGUwLCAweDkwLAotMHg3MCwgMHgyOSwgMHhmMCwgMHg5MCwgMHgxMCwgMHgxZSwgMHhlMCwgMHg5MCwgMHg3MCwgMHgyYSwgMHhmMCwgMHgzMCwgMHg0YSwgMHgwNywgMHg5MCwgMHg3MCwKLTB4MjQsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4YzIsIDB4MDUsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4MjIsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDExLCAweDY1LCAweGQzLCB9IDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3J0bXBfbWN1LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL2NvbW1vbi9ydG1wX21jdS5jCmluZGV4IDlmMDM5MDEuLjg0NGQ0YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvY29tbW9uL3J0bXBfbWN1LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9jb21tb24vcnRtcF9tY3UuYwpAQCAtMzcsMzUgKzM3LDM4IEBACiAKICNpbmNsdWRlCSIuLi9ydF9jb25maWcuaCIKIAotI2lmIGRlZmluZWQoUlQyODYwKSB8fCBkZWZpbmVkKFJUMzA5MCkKLSNpbmNsdWRlICJmaXJtd2FyZS5oIgotI2luY2x1ZGUgIi4uLy4uL3J0MzA5MC9maXJtd2FyZS5oIgotI2VuZGlmCi0jaWZkZWYgUlQyODcwCi0jaW5jbHVkZSAiLi4vLi4vcnQzMDcwL2Zpcm13YXJlLmgiCi0jaW5jbHVkZSAiZmlybXdhcmVfMzA3MC5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDxsaW51eC9iaXRyZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMtY2NpdHQuaD4KKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogCiAjaWZkZWYgUlRNUF9NQUNfVVNCCi0vKiAqLwotLyogUlQyODcwIEZpcm13YXJlIFNwZWMgb25seSB1c2VkIDEgb2N0IGZvciB2ZXJzaW9uIGV4cHJlc3Npb24gKi8KLS8qICovCi0jZGVmaW5lIEZJUk1XQVJFX01JTk9SX1ZFUlNJT04JNwotI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwogCi0vKiBOZXcgOGsgYnl0ZSBmaXJtd2FyZSBzaXplIGZvciBSVDMwNzEvUlQzMDcyICovCi0jZGVmaW5lIEZJUk1XQVJFSU1BR0VfTUFYX0xFTkdUSAkweDIwMDAKLSNkZWZpbmUgRklSTVdBUkVJTUFHRV9MRU5HVEgJCQkoc2l6ZW9mIChGaXJtd2FyZUltYWdlKSAvIHNpemVvZih1OCkpCi0jZGVmaW5lIEZJUk1XQVJFX01BSk9SX1ZFUlNJT04JCTAKKyNkZWZpbmUgRklSTVdBUkVJTUFHRV9MRU5HVEgJCTB4MTAwMAogCi0jZGVmaW5lIEZJUk1XQVJFSU1BR0VWMV9MRU5HVEgJCTB4MTAwMAotI2RlZmluZSBGSVJNV0FSRUlNQUdFVjJfTEVOR1RICQkweDEwMDAKKyNkZWZpbmUgRklSTVdBUkVfMjg3MF9NSU5fVkVSU0lPTgkxMgorI2RlZmluZSBGSVJNV0FSRV8yODcwX0ZJTEVOQU1FCQkicnQyODcwLmJpbiIKK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV8yODcwX0ZJTEVOQU1FKTsKIAotI2lmZGVmIFJUTVBfTUFDX1BDSQotI2RlZmluZSBGSVJNV0FSRV9NSU5PUl9WRVJTSU9OCQkyCi0jZW5kaWYgLyogUlRNUF9NQUNfUENJIC8vICovCisjZGVmaW5lIEZJUk1XQVJFXzMwNzBfTUlOX1ZFUlNJT04JMTcKKyNkZWZpbmUgRklSTVdBUkVfMzA3MF9GSUxFTkFNRQkJInJ0MzA3MC5iaW4iCitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfMzA3MF9GSUxFTkFNRSk7CisKKyNkZWZpbmUgRklSTVdBUkVfMzA3MV9NSU5fVkVSU0lPTgkxNworI2RlZmluZSBGSVJNV0FSRV8zMDcxX0ZJTEVOQU1FCQkicnQzMDcxLmJpbiIJLyogZm9yIFJUMzA3MS9SVDMwNzIgKi8KK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV8zMDcxX0ZJTEVOQU1FKTsKKworI2Vsc2UgLyogUlRNUF9NQUNfUENJICovCisKKyNkZWZpbmUgRklSTVdBUkVJTUFHRV9MRU5HVEgJCTB4MjAwMAorCisjZGVmaW5lIEZJUk1XQVJFXzI4NjBfTUlOX1ZFUlNJT04JMTEKKyNkZWZpbmUgRklSTVdBUkVfMjg2MF9GSUxFTkFNRQkJInJ0Mjg2MC5iaW4iCitNT0RVTEVfRklSTVdBUkUoRklSTVdBUkVfMjg2MF9GSUxFTkFNRSk7CisKKyNkZWZpbmUgRklSTVdBUkVfMzA5MF9NSU5fVkVSU0lPTgkxOQorI2RlZmluZSBGSVJNV0FSRV8zMDkwX0ZJTEVOQU1FCQkicnQzMDkwLmJpbiIJLyogZm9yIFJUMzA5MC9SVDMzOTAgKi8KK01PRFVMRV9GSVJNV0FSRShGSVJNV0FSRV8zMDkwX0ZJTEVOQU1FKTsKKworI2VuZGlmCiAKIC8qCiAJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC05MCw2ICs5Myw3OCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpcm13YXJlICpydG1wX2dldF9maXJtd2FyZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICphZGFwdGVyKQoreworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5VTEw7CisJdTggbWluX3ZlcnNpb247CisJc3RydWN0IGRldmljZSAqZGV2OworCWludCBlcnI7CisKKwlpZiAoYWRhcHRlci0+ZmlybXdhcmUpCisJCXJldHVybiBhZGFwdGVyLT5maXJtd2FyZTsKKworI2lmZGVmIFJUTVBfTUFDX1VTQgorCWlmIChJU19SVDMwNzEoYWRhcHRlcikpIHsKKwkJbmFtZSA9IEZJUk1XQVJFXzMwNzFfRklMRU5BTUU7CisJCW1pbl92ZXJzaW9uID0gRklSTVdBUkVfMzA3MV9NSU5fVkVSU0lPTjsKKwl9IGVsc2UgaWYgKElTX1JUMzA3MChhZGFwdGVyKSkgeworCQluYW1lID0gRklSTVdBUkVfMzA3MF9GSUxFTkFNRTsKKwkJbWluX3ZlcnNpb24gPSBGSVJNV0FSRV8zMDcwX01JTl9WRVJTSU9OOworCX0gZWxzZSB7CisJCW5hbWUgPSBGSVJNV0FSRV8yODcwX0ZJTEVOQU1FOworCQltaW5fdmVyc2lvbiA9IEZJUk1XQVJFXzI4NzBfTUlOX1ZFUlNJT047CisJfQorCWRldiA9ICYoKHN0cnVjdCBvc19jb29raWUgKilhZGFwdGVyLT5PU19Db29raWUpLT5wVXNiX0Rldi0+ZGV2OworI2Vsc2UgLyogUlRNUF9NQUNfUENJICovCisJaWYgKElTX1JUMzA5MChhZGFwdGVyKSB8fCBJU19SVDMzOTAoYWRhcHRlcikpIHsKKwkJbmFtZSA9IEZJUk1XQVJFXzMwOTBfRklMRU5BTUU7CisJCW1pbl92ZXJzaW9uID0gRklSTVdBUkVfMzA5MF9NSU5fVkVSU0lPTjsKKwl9IGVsc2UgeworCQluYW1lID0gRklSTVdBUkVfMjg2MF9GSUxFTkFNRTsKKwkJbWluX3ZlcnNpb24gPSBGSVJNV0FSRV8yODYwX01JTl9WRVJTSU9OOworCX0KKwlkZXYgPSAmKChzdHJ1Y3Qgb3NfY29va2llICopYWRhcHRlci0+T1NfQ29va2llKS0+cGNpX2Rldi0+ZGV2OworI2VuZGlmCisKKwllcnIgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgbmFtZSwgZGV2KTsKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoZGV2LCAiZmlybXdhcmUgZmlsZSAlcyByZXF1ZXN0IGZhaWxlZCAoJWQpXG4iLAorCQkJbmFtZSwgZXJyKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKGZ3LT5zaXplIDwgRklSTVdBUkVJTUFHRV9MRU5HVEgpIHsKKwkJZGV2X2VycihkZXYsICJmaXJtd2FyZSBmaWxlICVzIHNpemUgaXMgaW52YWxpZFxuIiwgbmFtZSk7CisJCWdvdG8gaW52YWxpZDsKKwl9CisKKwkvKiBpcyBpdCBuZXcgZW5vdWdoPyAqLworCWFkYXB0ZXItPkZpcm13YXJlVmVyc2lvbiA9IGZ3LT5kYXRhW0ZJUk1XQVJFSU1BR0VfTEVOR1RIIC0gM107CisJaWYgKGFkYXB0ZXItPkZpcm13YXJlVmVyc2lvbiA8IG1pbl92ZXJzaW9uKSB7CisJCWRldl9lcnIoZGV2LAorCQkJImZpcm13YXJlIGZpbGUgJXMgaXMgdG9vIG9sZDsiCisJCQkiIGRyaXZlciByZXF1aXJlcyB2JWQgb3IgbGF0ZXJcbiIsCisJCQluYW1lLCBtaW5fdmVyc2lvbik7CisJCWdvdG8gaW52YWxpZDsKKwl9CisKKwkvKiBpcyB0aGUgaW50ZXJuYWwgQ1JDIGNvcnJlY3Q/ICovCisJaWYgKGNyY19jY2l0dCgweGZmZmYsIGZ3LT5kYXRhLCBGSVJNV0FSRUlNQUdFX0xFTkdUSCAtIDIpICE9CisJICAgIChmdy0+ZGF0YVtGSVJNV0FSRUlNQUdFX0xFTkdUSCAtIDJdIHwKKwkgICAgIChmdy0+ZGF0YVtGSVJNV0FSRUlNQUdFX0xFTkdUSCAtIDFdIDw8IDgpKSkgeworCQlkZXZfZXJyKGRldiwgImZpcm13YXJlIGZpbGUgJXMgZmFpbGVkIGludGVybmFsIENSQ1xuIiwgbmFtZSk7CisJCWdvdG8gaW52YWxpZDsKKwl9CisKKwlhZGFwdGVyLT5maXJtd2FyZSA9IGZ3OworCXJldHVybiBmdzsKKworaW52YWxpZDoKKwlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKKwlyZXR1cm4gTlVMTDsKK30KKwogLyoKIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtMTA5LDQ2ICsxODQsMTYgQEAKICovCiBpbnQgUnRtcEFzaWNMb2FkRmlybXdhcmUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKQogewotCisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKIAlpbnQgU3RhdHVzID0gTkRJU19TVEFUVVNfU1VDQ0VTUzsKLQl1OCAqcEZpcm13YXJlSW1hZ2UgPSBOVUxMOwotCXVuc2lnbmVkIGxvbmcgRmlsZUxlbmd0aCwgSW5kZXg7CisJdW5zaWduZWQgbG9uZyBJbmRleDsKIAl1MzIgTWFjUmVnID0gMDsKLSNpZmRlZiBSVE1QX01BQ19VU0IKLQl1MzIgVmVyc2lvbiA9IChwQWQtPk1BQ1ZlcnNpb24gPj4gMTYpOwotI2VuZGlmCiAKLQkvKiBOZXcgOGsgYnl0ZSBmaXJtd2FyZSBzaXplIGZvciBSVDMwNzEvUlQzMDcyICovCi0JewotI2lmZGVmIFJUTVBfTUFDX1BDSQotCQlpZiAoSVNfUlQzMDkwKHBBZCkgfHwgSVNfUlQzMzkwKHBBZCkpIHsKLQkJCXBGaXJtd2FyZUltYWdlID0gRmlybXdhcmVJbWFnZV8zMDkwOwotCQkJRmlsZUxlbmd0aCA9IEZJUk1XQVJFSU1BR0VfTUFYX0xFTkdUSDsKLQkJfSBlbHNlIHsKLQkJCXBGaXJtd2FyZUltYWdlID0gRmlybXdhcmVJbWFnZV8yODYwOwotCQkJRmlsZUxlbmd0aCA9IEZJUk1XQVJFSU1BR0VfTUFYX0xFTkdUSDsKLQkJfQotI2VuZGlmIC8qIFJUTVBfTUFDX1BDSSAvLyAqLwotI2lmZGVmIFJUTVBfTUFDX1VTQgotCQkvKiB0aGUgZmlybXdhcmUgaW1hZ2UgY29uc2lzdHMgb2YgdHdvIHBhcnRzICovCi0JCWlmICgoVmVyc2lvbiAhPSAweDI4NjApICYmIChWZXJzaW9uICE9IDB4Mjg3MikgJiYgKFZlcnNpb24gIT0gMHgzMDcwKSkgewkvKiB1c2UgdGhlIHNlY29uZCBwYXJ0ICovCi0JCQkvKnByaW50aygiS0g6VXNlIE5ldyBWZXJzaW9uLHBhcnQyXG4iKTsgKi8KLQkJCXBGaXJtd2FyZUltYWdlID0KLQkJCSAgICAodTggKikmCi0JCQkgICAgRmlybXdhcmVJbWFnZV8zMDcwW0ZJUk1XQVJFSU1BR0VWMV9MRU5HVEhdOwotCQkJRmlsZUxlbmd0aCA9IEZJUk1XQVJFSU1BR0VWMl9MRU5HVEg7Ci0JCX0gZWxzZSB7Ci0JCQkvKnByaW50aygiS0g6VXNlIE5ldyBWZXJzaW9uLHBhcnQxXG4iKTsgKi8KLQkJCWlmIChWZXJzaW9uID09IDB4MzA3MCkKLQkJCQlwRmlybXdhcmVJbWFnZSA9IEZpcm13YXJlSW1hZ2VfMzA3MDsKLQkJCWVsc2UKLQkJCQlwRmlybXdhcmVJbWFnZSA9IEZpcm13YXJlSW1hZ2VfMjg3MDsKLQkJCUZpbGVMZW5ndGggPSBGSVJNV0FSRUlNQUdFVjFfTEVOR1RIOwotCQl9Ci0jZW5kaWYgLyogUlRNUF9NQUNfVVNCIC8vICovCi0JfQorCWZ3ID0gcnRtcF9nZXRfZmlybXdhcmUocEFkKTsKKwlpZiAoIWZ3KQorCQlyZXR1cm4gTkRJU19TVEFUVVNfRkFJTFVSRTsKIAotCVJUTVBfV1JJVEVfRklSTVdBUkUocEFkLCBwRmlybXdhcmVJbWFnZSwgRmlsZUxlbmd0aCk7CisJUlRNUF9XUklURV9GSVJNV0FSRShwQWQsIGZ3LT5kYXRhLCBGSVJNV0FSRUlNQUdFX0xFTkdUSCk7CiAKIAkvKiBjaGVjayBpZiBNQ1UgaXMgcmVhZHkgKi8KIAlJbmRleCA9IDA7CkBAIC0yMjEsNyArMjY2LDcgQEAKIAkJCQkgKCJBc2ljU2VuZENvbW1hblRvTWN1OjpNYWlsIGJveCBpcyBidXN5XG4iKSk7CiAJCX0gd2hpbGUgKGkrKyA8IDEwMCk7CiAKLQkJaWYgKGkgPj0gMTAwKSB7CisJCWlmIChpID4gMTAwKSB7CiAJCQlEQkdQUklOVF9FUlIoKCJIMk1fTUFJTEJPWCBzdGlsbCBob2xkIGJ5IE1DVS4gY29tbWFuZCBmYWlsXG4iKSk7CiAJCQlyZXR1cm4gRkFMU0U7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguYwppbmRleCA5MzU3ZmIyLi5iNWM3OGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5jCkBAIC0yNSw2ICsyNSw3IEBACiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9maXJtd2FyZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSAicnRfY29uZmlnLmgiCiAKQEAgLTI2MCw2ICsyNjEsOCBAQAogCiAJTmRpc0ZyZWVTcGluTG9jaygmcEFkLT5pcnFfbG9jayk7CiAKKwlyZWxlYXNlX2Zpcm13YXJlKHBBZC0+ZmlybXdhcmUpOworCiAJdmZyZWUocEFkKTsJCS8qIHBjaV9mcmVlX2NvbnNpc3RlbnQob3NfY29va2llLT5wY2lfZGV2LHNpemVvZihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyKSxwQWQsb3NfY29va2llLT5wQWRfcGEpOyAqLwogCWlmIChvc19jb29raWUpCiAJCWtmcmVlKG9zX2Nvb2tpZSk7CkBAIC00NjIsOSArNDY1LDkgQEAKIAlpZiAoKHNrYiA9CiAJICAgICBfX2Rldl9hbGxvY19za2IoSGRyTGVuICsgRGF0YVNpemUgKyAyLCBNRU1fQUxMT0NfRkxBRykpICE9IE5VTEwpIHsKIAkJc2tiX3Jlc2VydmUoc2tiLCAyKTsKLQkJTmRpc01vdmVNZW1vcnkoc2tiLT50YWlsLCBwSGVhZGVyODAyXzMsIEhkckxlbik7CisJCU5kaXNNb3ZlTWVtb3J5KHNrYl90YWlsX3BvaW50ZXIoc2tiKSwgcEhlYWRlcjgwMl8zLCBIZHJMZW4pOwogCQlza2JfcHV0KHNrYiwgSGRyTGVuKTsKLQkJTmRpc01vdmVNZW1vcnkoc2tiLT50YWlsLCBwRGF0YSwgRGF0YVNpemUpOworCQlOZGlzTW92ZU1lbW9yeShza2JfdGFpbF9wb2ludGVyKHNrYiksIHBEYXRhLCBEYXRhU2l6ZSk7CiAJCXNrYl9wdXQoc2tiLCBEYXRhU2l6ZSk7CiAJCXNrYi0+ZGV2ID0gZ2V0X25ldGRldl9mcm9tX2Jzc2lkKHBBZCwgRnJvbVdoaWNoQlNTSUQpOwogCQlwUGFja2V0ID0gT1NQS1RfVE9fUlRQS1Qoc2tiKTsKQEAgLTUxNSw3ICs1MTgsNyBAQAogCQlwQ2xvbmVkUGt0LT5kZXYgPSBwUnhQa3QtPmRldjsKIAkJcENsb25lZFBrdC0+ZGF0YSA9IHBEYXRhOwogCQlwQ2xvbmVkUGt0LT5sZW4gPSBEYXRhU2l6ZTsKLQkJcENsb25lZFBrdC0+dGFpbCA9IHBDbG9uZWRQa3QtPmRhdGEgKyBwQ2xvbmVkUGt0LT5sZW47CisJCXNrYl9zZXRfdGFpbF9wb2ludGVyKHBDbG9uZWRQa3QsIERhdGFTaXplKQogCQlBU1NFUlQoRGF0YVNpemUgPCAxNTMwKTsKIAl9CiAJcmV0dXJuIHBDbG9uZWRQa3Q7CkBAIC01MzUsNyArNTM4LDcgQEAKIAlwT1NQa3QtPmRldiA9IGdldF9uZXRkZXZfZnJvbV9ic3NpZChwQWQsIEZyb21XaGljaEJTU0lEKTsKIAlwT1NQa3QtPmRhdGEgPSBwUnhCbGstPnBEYXRhOwogCXBPU1BrdC0+bGVuID0gcFJ4QmxrLT5EYXRhU2l6ZTsKLQlwT1NQa3QtPnRhaWwgPSBwT1NQa3QtPmRhdGEgKyBwT1NQa3QtPmxlbjsKKwlza2Jfc2V0X3RhaWxfcG9pbnRlcihwT1NQa3QsIHBPU1BrdC0+bGVuKTsKIH0KIAogdm9pZCB3bGFuXzgwMl8xMV90b184MDJfM19wYWNrZXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLApAQCAtNTUzLDcgKzU1Niw3IEBACiAJcE9TUGt0LT5kZXYgPSBnZXRfbmV0ZGV2X2Zyb21fYnNzaWQocEFkLCBGcm9tV2hpY2hCU1NJRCk7CiAJcE9TUGt0LT5kYXRhID0gcFJ4QmxrLT5wRGF0YTsKIAlwT1NQa3QtPmxlbiA9IHBSeEJsay0+RGF0YVNpemU7Ci0JcE9TUGt0LT50YWlsID0gcE9TUGt0LT5kYXRhICsgcE9TUGt0LT5sZW47CisJc2tiX3NldF90YWlsX3BvaW50ZXIocE9TUGt0LCBwT1NQa3QtPmxlbik7CiAKIAkvKiAqLwogCS8qIGNvcHkgODAyLjMgaGVhZGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmggYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X2xpbnV4LmgKaW5kZXggZjg1NTA4ZC4uYTdjNTQwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9saW51eC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRfbGludXguaApAQCAtNjU4LDkgKzY1OCw5IEBACiAJCShSVFBLVF9UT19PU1BLVChfcGt0KS0+bGVuKSA9IChfbGVuKQogCiAjZGVmaW5lIEdFVF9PU19QS1RfREFUQVRBSUwoX3BrdCkgXAotCQkoUlRQS1RfVE9fT1NQS1QoX3BrdCktPnRhaWwpCisJCShza2JfdGFpbF9wb2ludGVyKFJUUEtUX1RPX09TUEtUKF9wa3QpKQogI2RlZmluZSBTRVRfT1NfUEtUX0RBVEFUQUlMKF9wa3QsIF9zdGFydCwgX2xlbikJXAotCQkoKFJUUEtUX1RPX09TUEtUKF9wa3QpKS0+dGFpbCkgPSAodTggKikoKF9zdGFydCkgKyAoX2xlbikpCisJCShza2Jfc2V0X3RhaWxfcG9pbnRlcihSVFBLVF9UT19PU1BLVChfcGt0KSwgX2xlbikpCiAKICNkZWZpbmUgR0VUX09TX1BLVF9IRUFEKF9wa3QpIFwKIAkJKFJUUEtUX1RPX09TUEtUKF9wa3QpLT5oZWFkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jCmluZGV4IGMzZDkyODAyLi5mYmRkYjAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0X21haW5fZGV2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9ydF9tYWluX2Rldi5jCkBAIC0yMTYsNyArMjE2LDcgQEAKIAl1MzIgaSA9IDA7CiAKICNpZmRlZiBSVE1QX01BQ19VU0IKLQlERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh1bmxpbmtfd2FrZXVwKTsKKwlERUNMQVJFX1dBSVRfUVVFVUVfSEVBRF9PTlNUQUNLKHVubGlua193YWtldXApOwogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogI2VuZGlmIC8qIFJUTVBfTUFDX1VTQiAvLyAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3J0bXAuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCmluZGV4IGM1MGFiZjQuLjQ0MDFhNTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvcnRtcC5oCkBAIC0xNzE5LDYgKzE3MTksNyBAQAogCXZvaWQgKk9TX0Nvb2tpZTsJLyogc2F2ZSBzcGVjaWZpYyBzdHJ1Y3R1cmUgcmVsYXRpdmUgdG8gT1MgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldjsKIAl1bnNpZ25lZCBsb25nIFZpcnR1YWxJZkNudDsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZpcm13YXJlOwogCiAJc3RydWN0IHJ0X3J0bXBfY2hpcF9vcCBjaGlwT3BzOwogCXUxNiBUaGlzVGJ0dE51bVRvTmV4dFdha2VVcDsKQEAgLTQwNDMsMTAgKzQwNDQsMTAgQEAKIAkJCXUxNiBPZmZzZXQsIHU4ICpwRGF0YSwgdTE2IGxlbmd0aCk7CiAKIGludCBSVFVTQk11bHRpV3JpdGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJIHUxNiBPZmZzZXQsIHU4ICpwRGF0YSwgdTE2IGxlbmd0aCk7CisJCSAgICB1MTYgT2Zmc2V0LCBjb25zdCB1OCAqcERhdGEsIHUxNiBsZW5ndGgpOwogCiBpbnQgUlRVU0JNdWx0aVdyaXRlX09uZUJ5dGUoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkLAotCQkJCSB1MTYgT2Zmc2V0LCB1OCAqcERhdGEpOworCQkJICAgIHUxNiBPZmZzZXQsIGNvbnN0IHU4ICpwRGF0YSk7CiAKIGludCBSVFVTQlJlYWRCQlBSZWdpc3RlcihzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCiAJCQkgICAgICB1OCBJZCwgdTggKnBWYWx1ZSk7CkBAIC00MTEyLDcgKzQxMTMsNyBAQAogCQkJICB1MTYgT2Zmc2V0LCB1MTYgVmFsdWUpOwogCiBpbnQgUlRVU0JGaXJtd2FyZVdyaXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICB1OCAqcEZ3SW1hZ2UsIHVuc2lnbmVkIGxvbmcgRndMZW4pOworCQkgICAgICAgY29uc3QgdTggKnBGd0ltYWdlLCB1bnNpZ25lZCBsb25nIEZ3TGVuKTsKIAogaW50IFJUVVNCVmVuZGVyUmVzZXQoc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvY29ubmVjdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGEvY29ubmVjdC5jCmluZGV4IDE3ZTU5YmEuLjU1NzMyYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhL2Nvbm5lY3QuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YS9jb25uZWN0LmMKQEAgLTYyLDggKzYyLDggQEAKIHU4IENpcGhlclN1aXRlV3BhTm9uZUFlc0xlbiA9CiAgICAgKHNpemVvZihDaXBoZXJTdWl0ZVdwYU5vbmVBZXMpIC8gc2l6ZW9mKHU4KSk7CiAKLS8qIFRoZSBmb2xsb3dpbmcgTUFDUk8gaXMgY2FsbGVkIGFmdGVyIDEuIHN0YXJ0aW5nIGFuIG5ldyBJQlNTLCAyLiBzdWNjZXNmdWxseSBKT0lOIGFuIElCU1MsICovCi0vKiBvciAzLiBzdWNjZXNmdWxseSBBU1NPQ0lBVEUgdG8gYSBCU1MsIDQuIHN1Y2Nlc3NmdWxseSBSRV9BU1NPQ0lBVEUgdG8gYSBCU1MgKi8KKy8qIFRoZSBmb2xsb3dpbmcgTUFDUk8gaXMgY2FsbGVkIGFmdGVyIDEuIHN0YXJ0aW5nIGFuIG5ldyBJQlNTLCAyLiBzdWNjZXNzZnVsbHkgSk9JTiBhbiBJQlNTLCAqLworLyogb3IgMy4gc3VjY2Vzc2Z1bGx5IEFTU09DSUFURSB0byBhIEJTUywgNC4gc3VjY2Vzc2Z1bGx5IFJFX0FTU09DSUFURSB0byBhIEJTUyAqLwogLyogQWxsIHNldHRpbmdzIHN1Y2Nlc3NmdWx5IG5lZ290aWF0ZWQgZnVyaW5nIE1MTUUgc3RhdGUgbWFjaGluZXMgYmVjb21lIGZpbmFsIHNldHRpbmdzICovCiAvKiBhbmQgYXJlIGNvcGllZCB0byBwQWQtPlN0YUFjdGl2ZSAqLwogI2RlZmluZSBDT1BZX1NFVFRJTkdTX0ZST01fTUxNRV9BVVhfVE9fQUNUSVZFX0NGRyhfcEFkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhX2lvY3RsLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3N0YV9pb2N0bC5jCmluZGV4IGQ4ZmJlNmMuLmRlNGI2MjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvc3RhX2lvY3RsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC9zdGFfaW9jdGwuYwpAQCAtOTc1LDEwICs5NzUsNyBAQAogCQkvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAJCW1lbXNldCgmaXdlLCAwLCBzaXplb2YoaXdlKSk7CiAJCWl3ZS5jbWQgPSBTSU9DR0lXRlJFUTsKLQkJaWYgKElORlJBX09OKHBBZGFwdGVyKSB8fCBBREhPQ19PTihwQWRhcHRlcikpCi0JCQlpd2UudS5mcmVxLm0gPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5DaGFubmVsOwotCQllbHNlCi0JCQlpd2UudS5mcmVxLm0gPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5DaGFubmVsOworCQlpd2UudS5mcmVxLm0gPSBwQWRhcHRlci0+U2NhblRhYi5Cc3NFbnRyeVtpXS5DaGFubmVsOwogCQlpd2UudS5mcmVxLmUgPSAwOwogCQlpd2UudS5mcmVxLmkgPSAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3VzYl9tYWluX2Rldi5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg2MC91c2JfbWFpbl9kZXYuYwppbmRleCA5MjVhMjM2Li4xODczYTc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODYwL3VzYl9tYWluX2Rldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NjAvdXNiX21haW5fZGV2LmMKQEAgLTIxNiwxMCArMjE2LDYgQEAKIHN0YXRpYyBpbnQgcnQyODcwX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CiAjZW5kaWYgLyogQ09ORklHX1BNIC8vICovCiAKLXN0YXRpYyBpbnQgcnR1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwotc3RhdGljIHZvaWQgcnR1c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7Ci0KIHN0YXRpYyBCT09MRUFOIFVTQkRldkNvbmZpZ0luaXQoSU4gc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKIAkJCQlJTiBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKIAkJCQlzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQpCkBAIC0yOTYsNyArMjkyLDcgQEAKIAogfQogCi1zdGF0aWMgaW50IHJ0dXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorc3RhdGljIGludCBfX2RldmluaXQgcnR1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHJ0X3J0bXBfYWRhcHRlciAqcEFkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9LY29uZmlnCmluZGV4IGZkM2JhM2EuLjZlYTE3MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL0tjb25maWcKQEAgLTMsNSArMyw3IEBACiAJZGVwZW5kcyBvbiBVU0IgJiYgWDg2ICYmIFdMQU4KIAlzZWxlY3QgV0lSRUxFU1NfRVhUCiAJc2VsZWN0IFdFWFRfUFJJVgorCXNlbGVjdCBDUkNfQ0NJVFQKKwlzZWxlY3QgRldfTE9BREVSCiAJLS0taGVscC0tLQogCSAgVGhpcyBpcyBhbiBleHBlcmltZW50YWwgZHJpdmVyIGZvciB0aGUgUmFsaW5rIHh4NzAgd2lyZWxlc3MgY2hpcHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9pby5jIGIvZHJpdmVycy9zdGFnaW5nL3J0Mjg3MC9jb21tb24vcnR1c2JfaW8uYwppbmRleCAzNDQ0M2YyLi5jZjBkMmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnQyODcwL2NvbW1vbi9ydHVzYl9pby5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydDI4NzAvY29tbW9uL3J0dXNiX2lvLmMKQEAgLTg0LDcgKzg0LDcgQEAKIAk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICovCiBpbnQgUlRVU0JGaXJtd2FyZVdyaXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCSAgICB1OCAqcEZ3SW1hZ2UsIHVuc2lnbmVkIGxvbmcgRndMZW4pCisJCSAgICAgICBjb25zdCB1OCAqcEZ3SW1hZ2UsIHVuc2lnbmVkIGxvbmcgRndMZW4pCiB7CiAJdTMyIE1hY1JlZzsKIAlpbnQgU3RhdHVzOwpAQCAtMTY3LDcgKzE2Nyw3IEBACiAJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAqLwogaW50IFJUVVNCTXVsdGlXcml0ZV9PbmVCeXRlKHN0cnVjdCBydF9ydG1wX2FkYXB0ZXIgKnBBZCwKLQkJCQkgdTE2IE9mZnNldCwgdTggKnBEYXRhKQorCQkJICAgIHUxNiBPZmZzZXQsIGNvbnN0IHU4ICpwRGF0YSkKIHsKIAlpbnQgU3RhdHVzOwogCkBAIC0xNzUsMTggKzE3NSwxOCBAQAogCVN0YXR1cyA9IFJUVVNCX1ZlbmRvclJlcXVlc3QocEFkLAogCQkJCSAgICAgVVNCRF9UUkFOU0ZFUl9ESVJFQ1RJT05fT1VULAogCQkJCSAgICAgREVWSUNFX1ZFTkRPUl9SRVFVRVNUX09VVCwKLQkJCQkgICAgIDB4NiwgMCwgT2Zmc2V0LCBwRGF0YSwgMSk7CisJCQkJICAgICAweDYsIDAsIE9mZnNldCwgKHU4ICopcERhdGEsIDEpOwogCiAJcmV0dXJuIFN0YXR1czsKIH0KIAogaW50IFJUVVNCTXVsdGlXcml0ZShzdHJ1Y3QgcnRfcnRtcF9hZGFwdGVyICpwQWQsCi0JCQkgdTE2IE9mZnNldCwgdTggKnBEYXRhLCB1MTYgbGVuZ3RoKQorCQkgICAgdTE2IE9mZnNldCwgY29uc3QgdTggKnBEYXRhLCB1MTYgbGVuZ3RoKQogewogCWludCBTdGF0dXM7CiAKIAl1MTYgaW5kZXggPSAwLCBWYWx1ZTsKLQl1OCAqcFNyYyA9IHBEYXRhOworCWNvbnN0IHU4ICpwU3JjID0gcERhdGE7CiAJdTE2IHJlc3VkZSA9IDA7CiAKIAlyZXN1ZGUgPSBsZW5ndGggJSAyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9maXJtd2FyZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9maXJtd2FyZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1Y2Y5Y2JjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvZmlybXdhcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDU1OCArMCwwIEBACi0vKgotIENvcHlyaWdodCAoYykgMjAwNywgUmFsaW5rIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24KLSBBbGwgcmlnaHRzIHJlc2VydmVkLgotCi0gUmVkaXN0cmlidXRpb24uICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIGJpbmFyeSBmb3JtLCB3aXRob3V0Ci0gbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotIG1ldDoKLQotIAkqIFJlZGlzdHJpYnV0aW9ucyBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlCi0gCWZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKLSAJcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIAkqIE5laXRoZXIgdGhlIG5hbWUgb2YgUmFsaW5rIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAJc3VwcGxpZXJzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcwotIAlzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAJKiBObyByZXZlcnNlIGVuZ2luZWVyaW5nLCBkZWNvbXBpbGF0aW9uLCBvciBkaXNhc3NlbWJseSBvZiB0aGlzIHNvZnR3YXJlCi0gCWlzIHBlcm1pdHRlZC4KLQotIExpbWl0ZWQgcGF0ZW50IGxpY2Vuc2UuIFJhbGluayBUZWNobm9sb2d5IENvcnBvcmF0aW9uIGdyYW50cyBhIHdvcmxkLXdpZGUsCi0gcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UgdW5kZXIgcGF0ZW50cyBpdCBub3cgb3IgaGVyZWFmdGVyCi0gb3ducyBvciBjb250cm9scyB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgaW1wb3J0LCBvZmZlciB0byBzZWxsIGFuZAotIHNlbGwgKCJVdGlsaXplIikgdGhpcyBzb2Z0d2FyZSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55Ci0gc3VjaCBwYXRlbnQgaXMgbmVjZXNzYXJ5IHRvIFV0aWxpemUgdGhlIHNvZnR3YXJlIGFsb25lLCBvciBpbgotIGNvbWJpbmF0aW9uIHdpdGggYW4gb3BlcmF0aW5nIHN5c3RlbSBsaWNlbnNlZCB1bmRlciBhbiBhcHByb3ZlZCBPcGVuCi0gU291cmNlIGxpY2Vuc2UgYXMgbGlzdGVkIGJ5IHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlIGF0Ci0gaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzLiAgVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0bwotIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGlzIHNvZnR3YXJlLiAgTm8gaGFyZHdhcmUgcGVyCi0gc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgotCi0gRElTQ0xBSU1FUi4gIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORAotIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywKLSBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAotIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKLSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCi0gSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKLSBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKLSBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCi0gVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQotIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKLSBEQU1BR0UuCi0qLwotLyogQVVUTyBHRU4gUExFQVNFIERPIE5PVCBNT0RJRlkgSVQgKi8KLS8qIEFVVE8gR0VOIFBMRUFTRSBETyBOT1QgTU9ESUZZIElUICovCi0KLQotdTggRmlybXdhcmVJbWFnZV8yODcwIFtdID0gewotMHhmZiwgMHhmZiwgMHhmZiwgMHgwMiwgMHgxMCwgMHgyOCwgMHgwMiwgMHgxMCwgMHgzMiwgMHgwMiwgMHgxMCwgMHg3OCwgMHgwMiwgMHgxMiwgMHg2NywgMHgwMiwKLTB4MTIsIDB4NjgsIDB4MDIsIDB4MTIsIDB4ODcsIDB4MDIsIDB4MTIsIDB4OGMsIDB4MTIsIDB4MTIsIDB4ODgsIDB4MjIsIDB4MDIsIDB4MTYsIDB4NDksIDB4MDIsCi0weDE3LCAweDFmLCAweDAyLCAweDEzLCAweDc3LCAweDAyLCAweDEyLCAweDhkLCAweDMwLCAweDA1LCAweDA2LCAweDIwLCAweDBkLCAweDAzLCAweDEyLCAweDE3LAotMHhjMSwgMHgyMiwgMHg5MCwgMHgwMSwgMHg4YywgMHhlMCwgMHgzMCwgMHhlMywgMHgxYiwgMHhlNSwgMHg0YywgMHgzMCwgMHhlMCwgMHgwNCwgMHg3ZiwgMHg0MCwKLTB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4OTAsIDB4MTAsIDB4MmYsIDB4ZWYsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4OGMsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4ZTQsCi0weDkwLCAweDAxLCAweGE3LCAweGYwLCAweDkwLCAweDAxLCAweDhjLCAweGUwLCAweDMwLCAweGUwLCAweDFjLCAweDkwLCAweDAxLCAweDgwLCAweGUwLCAweGI0LAotMHgwMiwgMHgxNSwgMHhhMywgMHhlMCwgMHhiNCwgMHgwMSwgMHgxMCwgMHg5MCwgMHgwMSwgMHg4NCwgMHhlMCwgMHhiNCwgMHg4MSwgMHgwOSwgMHg5MCwgMHgwMSwKLTB4OGMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4MTIsIDB4MGQsIDB4YzgsIDB4MjIsIDB4OTAsIDB4MDQsIDB4MTQsIDB4ZTAsIDB4MjAsIDB4ZTcsIDB4MDMsIDB4MDIsCi0weDEyLCAweDY2LCAweDkwLCAweDcwLCAweDEyLCAweGUwLCAweGY1LCAweDU2LCAweDkwLCAweDA0LCAweDA0LCAweGUwLCAweDEyLCAweDBhLCAweDlkLCAweDEwLAotMHhiNywgMHgzMSwgMHgxMCwgMHhlMCwgMHg1MCwgMHgxMSwgMHgwNCwgMHg1MSwgMHgxMSwgMHgwZCwgMHg1MiwgMHgxMSwgMHgwZCwgMHg1MywgMHgxMSwgMHgwZCwKLTB4NTQsIDB4MTEsIDB4NGUsIDB4NTUsIDB4MTEsIDB4N2UsIDB4NzAsIDB4MTEsIDB4YTksIDB4NzEsIDB4MTEsIDB4ZDcsIDB4NzIsIDB4MTIsIDB4MWQsIDB4NzMsCi0weDEyLCAweDNlLCAweDgwLCAweDAwLCAweDAwLCAweDEyLCAweDY2LCAweDIwLCAweDAyLCAweDAzLCAweDMwLCAweDAzLCAweDFkLCAweDdkLCAweDAyLCAweGFmLAotMHg1NiwgMHgxMiwgMHgwYiwgMHg5MSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwKLTB4NTYsIDB4ZjQsIDB4NzAsIDB4MDMsIDB4MDIsIDB4MTIsIDB4NjYsIDB4MDIsIDB4MTIsIDB4NWYsIDB4ODUsIDB4NTYsIDB4NDEsIDB4ZDIsIDB4MDIsIDB4MjIsCi0weDkwLCAweDcwLCAweDEwLCAweGUwLCAweDU0LCAweDdmLCAweDY0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDEyLCAweDY2LCAweDkwLCAweDcwLCAweDExLAotMHhlMCwgMHg2NCwgMHgwOCwgMHg2MCwgMHgwOCwgMHhlMCwgMHg2NCwgMHgyMCwgMHg2MCwgMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHg3NSwgMHg0ZSwgMHgwMywKLTB4NzUsIDB4NGYsIDB4MjAsIDB4MjIsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NDcsIDB4MjIsIDB4OTAsIDB4MDQsIDB4MDQsCi0weGUwLCAweDI1LCAweGUwLCAweDI0LCAweDVkLCAweGY1LCAweDU3LCAweDkwLCAweDcwLCAweDEwLCAweGUwLCAweGZmLCAweDc0LCAweDQ3LCAweDI1LCAweDU3LAotMHhmOCwgMHhjNiwgMHhlZiwgMHhjNiwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHhmZiwgMHg3NCwgMHg0OCwgMHgyNSwgMHg1NywgMHhmOCwgMHhjNiwgMHhlZiwKLTB4YzYsIDB4ZTQsIDB4ZmQsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4OTEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsCi0weDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEyLCAweDY2LCAweDAyLCAweDEyLCAweDVmLCAweGU1LCAweDQ3LAotMHg2NCwgMHgwNywgMHg2MCwgMHgwYiwgMHhlNSwgMHg0NywgMHg2NCwgMHgwOCwgMHg2MCwgMHgwNSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwOSwgMHgwOCwgMHg5MCwKLTB4NzAsIDB4MTEsIDB4ZTAsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4M2EsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDksIDB4MDgsIDB4ZTUsIDB4M2EsIDB4YjQsIDB4MDMsCi0weDAzLCAweGU0LCAweGY1LCAweDQ2LCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweDkxLCAweGQyLCAweDA0LCAweDIyLCAweDkwLCAweDcwLAotMHgxMCwgMHhlMCwgMHhmZSwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHhmZCwgMHhlZCwgMHhmOCwgMHhlNiwgMHhmNSwgMHg1NywgMHhmZCwgMHhhZiwgMHg1NiwKLTB4MTIsIDB4MGIsIDB4OTEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsCi0weGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEyLCAweDY2LCAweDAyLCAweDEyLCAweDVmLCAweDkwLCAweDcwLCAweDEwLCAweGUwLCAweGZlLCAweDkwLCAweDcwLAotMHgxMSwgMHhlMCwgMHhmZCwgMHhlZCwgMHhmNSwgMHg4MiwgMHg4ZSwgMHg4MywgMHhlMCwgMHhmNSwgMHg1NywgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwKLTB4OTEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NzAsCi0weDAzLCAweDAyLCAweDEyLCAweDY2LCAweDAyLCAweDEyLCAweDVmLCAweDkwLCAweDEwLCAweDAyLCAweGUwLCAweGI0LCAweDcwLCAweDFlLCAweGEzLCAweGUwLAotMHhiNCwgMHgzMCwgMHgxOSwgMHg5MCwgMHgwNSwgMHgwOCwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHhmZCwgMHg5MCwgMHgwNSwgMHgwNSwgMHhlMCwgMHg1NCwKLTB4ZmIsIDB4ZjAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4ZWQsIDB4NTQsIDB4ZmUsIDB4OTAsIDB4MDUsIDB4MDgsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4NGUsIDB4ZjUsCi0weDRmLCAweDc1LCAweDNhLCAweGZmLCAweGFkLCAweDU3LCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweDkxLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLAotMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg2MCwgMHg0YiwgMHg4MCwgMHg0MiwgMHg5MCwgMHg3MCwgMHgxMCwKLTB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4OTMsIDB4ZTQsIDB4ZmQsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4OTEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsCi0weDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDYwLCAweDJhLCAweDgwLCAweDIxLCAweDkwLCAweDcwLAotMHgxMCwgMHhlMCwgMHgyNCwgMHhmZiwgMHg5MiwgMHg0YSwgMHhkMiwgMHgwNSwgMHhhZCwgMHg1NywgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHg5MSwgMHg5MCwKLTB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NjAsIDB4MDcsIDB4OTAsCi0weDcwLCAweDI1LCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweDIyLCAweDIyLCAweGU1LCAweDUzLCAweDcwLCAweDFhLCAweDMwLCAweDYwLCAweDA5LCAweGIyLAotMHg0ZCwgMHgzMCwgMHg0ZCwgMHgwNCwgMHgwNSwgMHg0NiwgMHhjMiwgMHgwNCwgMHhlNSwgMHg0ZiwgMHg0NSwgMHg0ZSwgMHg2MCwgMHgwOCwgMHhlNSwgMHg0ZiwKLTB4MTUsIDB4NGYsIDB4NzAsIDB4MDIsIDB4MTUsIDB4NGUsIDB4MjIsIDB4MjIsIDB4YzIsIDB4NDIsIDB4ZDMsIDB4MjIsIDB4MjIsIDB4YzIsIDB4NGIsIDB4YzIsCi0weDRjLCAweGU1LCAweDQ0LCAweDEyLCAweDBhLCAweDlkLCAweDEyLCAweGFmLCAweDAwLCAweDEzLCAweDQyLCAweDA0LCAweDEzLCAweDNlLCAweDA4LCAweDEzLAotMHgxOSwgMHgxMCwgMHgxMiwgMHhjMywgMHgyMCwgMHgxMiwgMHhlMywgMHg2MCwgMHgxMiwgMHhmNCwgMHhhMCwgMHgwMCwgMHgwMCwgMHgxMywgMHg0NCwgMHg4NSwKLTB4NDgsIDB4NDMsIDB4ODUsIDB4NGEsIDB4NDIsIDB4ODUsIDB4NGMsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTMsCi0weDQ0LCAweDgwLCAweDFiLCAweGU1LCAweDQ4LCAweGM0LCAweDU0LCAweDBmLCAweGY1LCAweDQzLCAweGU1LCAweDRhLCAweGM0LCAweDU0LCAweDBmLCAweGY1LAotMHg0MiwgMHhlNSwgMHg0YywgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg1ZSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwgMHg3MCwgMHg2NiwgMHg1MywgMHg0MywKLTB4MGYsIDB4ODAsIDB4NjEsIDB4ODUsIDB4NDksIDB4NDMsIDB4ODUsIDB4NGIsIDB4NDIsIDB4ODUsIDB4NGQsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsCi0weDcwLCAweDUyLCAweDgwLCAweDFiLCAweGU1LCAweDQ5LCAweGM0LCAweDU0LCAweDBmLCAweGY1LCAweDQzLCAweGU1LCAweDRiLCAweGM0LCAweDU0LCAweDBmLAotMHhmNSwgMHg0MiwgMHhlNSwgMHg0ZCwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg1ZSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwgMHg3MCwgMHgzNSwgMHhlNSwKLTB4NDMsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MTAsIDB4ZjUsIDB4NDMsIDB4ODAsIDB4MmIsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDQsIDB4MDYsIDB4NTMsIDB4NWUsCi0weGZiLCAweDc1LCAweDQyLCAweDA5LCAweGU1LCAweDQ3LCAweGI0LCAweDA1LCAweDA2LCAweDQzLCAweDVlLCAweDA0LCAweDc1LCAweDQyLCAweDA5LCAweGU1LAotMHg0NywgMHhiNCwgMHgwNiwgMHgxMCwgMHhlNSwgMHg0MywgMHg1NCwgMHgwZiwgMHg0NCwgMHgzMCwgMHhmNSwgMHg0MywgMHg4MCwgMHgwNiwgMHhkMiwgMHg0YiwKLTB4ODAsIDB4MDIsIDB4ZDIsIDB4NGMsIDB4ZTQsIDB4ZjUsIDB4MjUsIDB4ZTUsIDB4NDIsIDB4YzQsIDB4NTQsIDB4ZjAsIDB4ZmYsIDB4ZTUsIDB4NDMsIDB4NTQsCi0weDBmLCAweDRmLCAweGY1LCAweDVmLCAweDkwLCAweDcwLCAweDQ0LCAweGYwLCAweGEzLCAweGU1LCAweDVlLCAweGYwLCAweGEzLCAweGU1LCAweDRhLCAweGYwLAotMHhhMywgMHhlNSwgMHg0OCwgMHhmMCwgMHhhMywgMHhlNSwgMHg0YywgMHhmMCwgMHhhMywgMHhlNSwgMHg0NCwgMHhmMCwgMHhhMywgMHhlNSwgMHg0MiwgMHhmMCwKLTB4YTMsIDB4ZTUsIDB4NDMsIDB4ZjAsIDB4ZDIsIDB4NjAsIDB4MjIsIDB4ZTUsIDB4NDcsIDB4NjAsIDB4MTAsIDB4MjQsIDB4YzAsIDB4NzAsIDB4MDMsIDB4MTIsCi0weDE2LCAweDI5LCAweDEyLCAweDEzLCAweDhjLCAweGMyLCAweGFmLCAweGMyLCAweDA0LCAweGQyLCAweGFmLCAweDIyLCAweGMyLCAweGFmLCAweDkwLCAweDA0LAotMHgxNCwgMHhlMCwgMHg1NCwgMHgwZSwgMHg2MCwgMHgwNCwgMHhkMiwgMHgxOCwgMHg4MCwgMHgwOCwgMHhlNSwgMHg0ZSwgMHg0NSwgMHg0ZiwgMHgyNCwgMHhmZiwKLTB4OTIsIDB4MTgsIDB4ZDIsIDB4YWYsIDB4OTAsIDB4MDQsIDB4MTQsIDB4ZTAsIDB4YTIsIDB4ZTQsIDB4OTIsIDB4MTksIDB4NzQsIDB4MWUsIDB4ZjAsIDB4ZTUsCi0weDVmLCAweDU0LCAweDBmLCAweGY1LCAweDJkLCAweGU1LCAweDI1LCAweDcwLCAweDEzLCAweDMwLCAweDE4LCAweDA1LCAweGU1LCAweDVmLCAweDIwLCAweGU1LAotMHgwYiwgMHgzMCwgMHgxOSwgMHgxOSwgMHhlNSwgMHg1ZiwgMHg1NCwgMHgzMCwgMHhmZiwgMHhiZiwgMHgzMCwgMHgxMSwgMHhlNSwgMHgyNSwgMHg3MCwgMHgwNSwKLTB4NzUsIDB4MjUsIDB4MGMsIDB4ODAsIDB4MDIsIDB4MTUsIDB4MjUsIDB4ZDIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MGYsIDB4ZTUsIDB4NWYsIDB4MzAsCi0weGU2LCAweDA2LCAweGMyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDA0LCAweGQyLCAweDZjLCAweGMyLCAweDZkLCAweGU1LCAweDQ3LCAweDY0LCAweDAzLAotMHg3MCwgMHgyMSwgMHgzMCwgMHg0YiwgMHgwNiwgMHhjMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgxOCwgMHhlNSwgMHgyNSwgMHg3MCwgMHgwMywgMHgzMCwKLTB4NGMsIDB4MTEsIDB4YzIsIDB4NGMsIDB4ZTUsIDB4MjUsIDB4NzAsIDB4MDUsIDB4NzUsIDB4MjUsIDB4MDcsIDB4ODAsIDB4MDIsIDB4MTUsIDB4MjUsIDB4ZDIsCi0weDZjLCAweGQyLCAweDZkLCAweGU1LCAweDQ3LCAweGI0LCAweDA5LCAweDE0LCAweGU1LCAweDQ0LCAweDIwLCAweGUzLCAweDBiLCAweGU1LCAweDNhLCAweDY0LAotMHgwMiwgMHg2MCwgMHgwNSwgMHhlNSwgMHgzYSwgMHhiNCwgMHgwMywgMHgwNCwgMHhjMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg5MCwgMHg3MCwgMHg0NiwgMHhlNSwKLTB4MmQsIDB4ZjAsIDB4MjAsIDB4NjksIDB4MDcsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTAsIDB4MDIsIDB4YjIsIDB4NjgsIDB4MjAsIDB4NmIsIDB4MDcsIDB4ZTUsCi0weDVlLCAweDIwLCAweGUxLCAweDAyLCAweGIyLCAweDZhLCAweDIwLCAweDZkLCAweDA3LCAweGU1LCAweDVlLCAweDIwLCAweGUyLCAweDAyLCAweGIyLCAweDZjLAotMHg5MCwgMHg3MCwgMHg0NywgMHhlNSwgMHgyZCwgMHhmMCwgMHg3NSwgMHgyZSwgMHg0MCwgMHgyMCwgMHg2OSwgMHgwNCwgMHhhMiwgMHg2OCwgMHg4MCwgMHgyNiwKLTB4MzAsIDB4NjgsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTIsIDB4ODAsIDB4MWQsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTIsIDB4MDQsIDB4N2YsIDB4MDEsCi0weDgwLCAweDAyLCAweDdmLCAweDAwLCAweGU1LCAweDQ2LCAweDU0LCAweGYwLCAweGZlLCAweGJlLCAweGYwLCAweDA0LCAweDdlLCAweDAxLCAweDgwLCAweDAyLAotMHg3ZSwgMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHg3MywgMHg5MiwgMHg3MiwgMHgyMCwgMHg2YiwgMHgwNCwgMHhhMiwgMHg2YSwgMHg4MCwKLTB4MjYsIDB4MzAsIDB4NmEsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTIsIDB4ODAsIDB4MWQsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTAsIDB4MDQsIDB4N2YsCi0weDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweGU1LCAweDQ2LCAweDU0LCAweGYwLCAweGZlLCAweGJlLCAweGYwLCAweDA0LCAweDdlLCAweDAxLCAweDgwLAotMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHg3NSwgMHg5MiwgMHg3NCwgMHgyMCwgMHg2ZCwgMHgwNCwgMHhhMiwgMHg2YywKLTB4ODAsIDB4MjYsIDB4MzAsIDB4NmMsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTIsIDB4ODAsIDB4MWQsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTEsIDB4MDQsCi0weDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweGU1LCAweDQ2LCAweDU0LCAweGYwLCAweGZlLCAweGJlLCAweGYwLCAweDA0LCAweDdlLCAweDAxLAotMHg4MCwgMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHg3MSwgMHg5MiwgMHg3MCwgMHg5MCwgMHgxMCwgMHgwMCwgMHhlMCwKLTB4OTAsIDB4MTAsIDB4MmYsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MDMsIDB4ZTAsIDB4YzMsIDB4OTQsIDB4MzAsIDB4NDAsIDB4MTQsIDB4YTIsIDB4NzEsIDB4OTIsCi0weDc3LCAweGEyLCAweDcwLCAweDkyLCAweDc2LCAweGU1LCAweDJlLCAweDEzLCAweDEzLCAweDU0LCAweDNmLCAweGY1LCAweDJlLCAweGMyLCAweDc3LCAweGQyLAotMHg3NiwgMHg5MCwgMHgxMCwgMHgyZiwgMHhlNSwgMHgyZSwgMHhmMCwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwgMHg3MCwgMHg0YywgMHg5MCwgMHgwMiwgMHgyOSwKLTB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4ZTUsIDB4NDMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4MTQsIDB4NjAsIDB4MTQsIDB4MjQsIDB4ZmUsIDB4NjAsIDB4MjMsCi0weDI0LCAweDAzLCAweDYwLCAweDAzLCAweDAyLCAweDE2LCAweDE4LCAweDkwLCAweDAyLCAweDI4LCAweGUwLCAweDMwLCAweDQ3LCAweDBmLCAweDgwLCAweDA3LAotMHg5MCwgMHgwMiwgMHgyOCwgMHhlMCwgMHgyMCwgMHg0NywgMHgwNiwgMHg1NCwgMHhmZSwgMHhmMCwgMHgwMiwgMHgxNiwgMHgxOCwgMHg0NCwgMHgwMSwgMHhmMCwKLTB4MDIsIDB4MTYsIDB4MTgsIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MDQsIDB4N2YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4OTAsIDB4MDIsCi0weDI4LCAweGUwLCAweDU0LCAweGZlLCAweDRmLCAweGYwLCAweDAyLCAweDE2LCAweDE4LCAweGU1LCAweDQ3LCAweDY0LCAweDA3LCAweDYwLCAweDBmLCAweGU1LAotMHg0NywgMHg2NCwgMHgwOCwgMHg2MCwgMHgwOSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwOSwgMHg2MCwgMHgwMywgMHgwMiwgMHgxNiwgMHgxOCwgMHhlNCwgMHhmNSwKLTB4MjcsIDB4OTAsIDB4MDIsIDB4MjksIDB4ZTAsIDB4NTQsIDB4ZmMsIDB4ZjAsIDB4ZTUsIDB4M2EsIDB4MTQsIDB4NjAsIDB4MmQsIDB4MTQsIDB4NjAsIDB4MmUsCi0weDE0LCAweDYwLCAweDM2LCAweDI0LCAweGZjLCAweDYwLCAweDVmLCAweDI0LCAweGY5LCAweDYwLCAweDFmLCAweDI0LCAweDBlLCAweDcwLCAweDY5LCAweGU1LAotMHg0NiwgMHgxMywgMHgxMywgMHg1NCwgMHgzZiwgMHg3NSwgMHhmMCwgMHgwMywgMHg4NCwgMHhhZiwgMHhmMCwgMHgyMCwgMHg0NywgMHgwNCwgMHg3ZSwgMHgwMSwKLTB4ODAsIDB4MDIsIDB4N2UsIDB4MDAsIDB4ZWYsIDB4NmUsIDB4MjQsIDB4ZmYsIDB4ODAsIDB4NDUsIDB4YTIsIDB4NDcsIDB4ODAsIDB4NDEsIDB4ZTUsIDB4NDYsCi0weDMwLCAweGUyLCAweDAzLCAweGQzLCAweDgwLCAweDI3LCAweGMzLCAweDgwLCAweDI0LCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDBkLCAweDU0LCAweDM4LAotMHhjMywgMHg5NCwgMHgzMCwgMHg1MCwgMHgwNiwgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwMSwgMHg4MCwgMHgwNCwgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgyMCwKLTB4NDcsIDB4MDQsIDB4N2QsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2QsIDB4MDAsIDB4ZWYsIDB4NmQsIDB4NGUsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MzgsIDB4YTIsCi0weDQ3LCAweGIzLCAweDkyLCAweDM5LCAweDgwLCAweDE5LCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDAzLCAweGQzLCAweDgwLCAweDAxLCAweGMzLCAweDkyLAotMHgzOSwgMHhhMiwgMHg0NywgMHhiMywgMHg5MiwgMHgzOCwgMHg4MCwgMHgwNywgMHhhMiwgMHg0NywgMHhiMywgMHg5MiwgMHgzOCwgMHg5MiwgMHgzOSwgMHg5MCwKLTB4MDIsIDB4MjgsIDB4ZTAsIDB4NTQsIDB4ZmMsIDB4NDUsIDB4MjcsIDB4ZjAsIDB4OTAsIDB4NzAsIDB4OWMsIDB4ZTUsIDB4M2EsIDB4ZjAsIDB4YTMsIDB4ZTUsCi0weDQ3LCAweGYwLCAweDkwLCAweDcwLCAweDQxLCAweGU1LCAweDNhLCAweGYwLCAweDIyLCAweGU0LCAweDkwLCAweDAyLCAweDI5LCAweGYwLCAweDMwLCAweDQ3LAotMHgwNCwgMHhhZiwgMHg0NSwgMHg4MCwgMHgwNCwgMHhlNSwgMHg0NSwgMHhmNCwgMHhmZiwgMHg5MCwgMHgwMiwgMHgyOCwgMHhlZiwgMHhmMCwgMHgyMiwgMHg4ZiwKLTB4NTAsIDB4ZDIsIDB4NTksIDB4MjIsIDB4OGYsIDB4NTQsIDB4ZDIsIDB4NTgsIDB4MjIsIDB4ZTQsIDB4ZjUsIDB4NjIsIDB4YzIsIDB4YWYsIDB4ZTUsIDB4NTEsCi0weDE0LCAweDYwLCAweDQ2LCAweDE0LCAweDYwLCAweDYyLCAweDI0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDE3LCAweDAzLCAweGQyLCAweDU5LCAweDc1LAotMHg1NSwgMHgwMSwgMHg5MCwgMHgwMiwgMHhhMiwgMHhlMCwgMHg1NCwgMHg3ZiwgMHhmMCwgMHhhMywgMHhlMCwgMHgyMCwgMHhlNywgMHgyMiwgMHg5MCwgMHgwNCwKLTB4MzQsIDB4ZTAsIDB4YjQsIDB4MDIsIDB4MWIsIDB4YTMsIDB4ZTAsIDB4YjQsIDB4MDIsIDB4MTYsIDB4YTMsIDB4ZTAsIDB4YjQsIDB4MDIsIDB4MTEsIDB4N2YsCi0weDIwLCAweDEyLCAweDE2LCAweDNmLCAweDkwLCAweDEwLCAweDA0LCAweGUwLCAweDU0LCAweGYzLCAweGYwLCAweDc1LCAweDUxLCAweDAxLCAweDgwLCAweDczLAotMHhlNSwgMHg1MCwgMHg3MCwgMHgwNSwgMHg3NSwgMHg2MiwgMHgwMywgMHg4MCwgMHg2YSwgMHg5MCwgMHgxMiwgMHgwMCwgMHhlMCwgMHg1NCwgMHgwMywgMHg3MCwKLTB4MTEsIDB4N2YsIDB4MjAsIDB4MTIsIDB4MTYsIDB4M2YsIDB4OTAsIDB4MDIsIDB4YTIsIDB4ZTAsIDB4NTQsIDB4YmYsIDB4ZjAsIDB4NzUsIDB4NTEsIDB4MDIsCi0weDgwLCAweDUxLCAweGU1LCAweDUwLCAweDcwLCAweDAyLCAweDgwLCAweDQ2LCAweDkwLCAweDAyLCAweGEzLCAweGUwLCAweDIwLCAweGU2LCAweDNiLCAweDkwLAotMHgwNCwgMHgzNywgMHhlMCwgMHg2NCwgMHgyMiwgMHg3MCwgMHgzMywgMHg5MCwgMHgwMSwgMHg4YSwgMHg3NCwgMHg3ZSwgMHhmMCwgMHg5MCwgMHgwMSwgMHg5NiwKLTB4ZjAsIDB4OTAsIDB4MTIsIDB4MDQsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4OTAsIDB4MTMsIDB4MjgsIDB4ZTAsIDB4NTQsIDB4ZjAsIDB4ZjAsIDB4YTMsIDB4ZTAsCi0weDU0LCAweGYwLCAweGYwLCAweGEzLCAweGUwLCAweDU0LCAweGZhLCAweGYwLCAweDkwLCAweDA0LCAweDAxLCAweGUwLCAweDU0LCAweGY5LCAweGYwLCAweDc1LAotMHg2MiwgMHgwMSwgMHg3NSwgMHg1NSwgMHgwMiwgMHhlNCwgMHhmNSwgMHg1MSwgMHg4MCwgMHgwOSwgMHhlNSwgMHg1MCwgMHg3MCwgMHgwNSwgMHg3NSwgMHg2MiwKLTB4MDMsIDB4ZjUsIDB4NTEsIDB4ZTUsIDB4NjIsIDB4NjAsIDB4MTUsIDB4YzIsIDB4MDEsIDB4ZTQsIDB4ZjUsIDB4NTEsIDB4YzIsIDB4NTksIDB4YWQsIDB4NjIsCi0weGFmLCAweDQwLCAweDEyLCAweDE3LCAweDhkLCAweGU1LCAweDYyLCAweGI0LCAweDAzLCAweDAyLCAweGQyLCAweDAzLCAweGQyLCAweGFmLCAweDIyLCAweGMyLAotMHhhZiwgMHgzMCwgMHgwMSwgMHgxMiwgMHhlNCwgMHg5MCwgMHgwMSwgMHg5NiwgMHhmMCwgMHhmNSwgMHg1MSwgMHhjMiwgMHg1OSwgMHhjMiwgMHgwMSwgMHg3ZCwKLTB4MDIsIDB4YWYsIDB4NDAsIDB4MTIsIDB4MTcsIDB4OGQsIDB4ZTUsIDB4NTIsIDB4MTQsIDB4NjAsIDB4MDksIDB4MDQsIDB4NzAsIDB4NGMsIDB4NzUsIDB4NTIsCi0weDAxLCAweDc1LCAweDU1LCAweDAzLCAweDkwLCAweDA0LCAweDAxLCAweGUwLCAweDQ0LCAweDBlLCAweGYwLCAweDkwLCAweDEzLCAweDI4LCAweGUwLCAweDQ0LAotMHgwZiwgMHhmMCwgMHhhMywgMHhlMCwgMHg0NCwgMHgwZiwgMHhmMCwgMHhhMywgMHhlMCwgMHg0NCwgMHgwNSwgMHhmMCwgMHg5MCwgMHgxMiwgMHgwNCwgMHg3NCwKLTB4MDMsIDB4ZjAsIDB4OTAsIDB4MDIsIDB4YTIsIDB4ZTAsIDB4NDQsIDB4YzAsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MDQsIDB4ZTAsIDB4NDQsIDB4MGMsIDB4ZjAsCi0weGU0LCAweGY1LCAweDUyLCAweGY1LCAweDU1LCAweDMwLCAweDAyLCAweDBiLCAweGMyLCAweDAyLCAweDdkLCAweDAxLCAweGFmLCAweDQxLCAweDEyLCAweDE3LAotMHg4ZCwgMHg4MCwgMHgwMiwgMHhjMiwgMHgwMywgMHhlNCwgMHg5MCwgMHgwMSwgMHg5NiwgMHhmMCwgMHhkMiwgMHhhZiwgMHgyMiwgMHhlZiwgMHhmNCwgMHg2MCwKLTB4MmQsIDB4ZTQsIDB4ZmUsIDB4NzQsIDB4MTQsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4YjQsIDB4ZmYsCi0weDE5LCAweDc0LCAweDE0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweGVmLCAweGYwLCAweDc0LCAweDFjLCAweDJlLAotMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHhlZCwgMHhmMCwgMHgyMiwgMHgwZSwgMHhiZSwgMHgwNCwgMHhkNSwgMHgyMiwgMHgyMiwKLTB4MjIsIDB4OTAsIDB4NzAsIDB4MmEsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4NGQsIDB4YzIsIDB4YWYsIDB4OTAsIDB4NzAsIDB4MjgsIDB4ZTAsIDB4OTAsIDB4MTAsCi0weDFjLCAweGYwLCAweDkwLCAweDcwLCAweDI5LCAweGUwLCAweDkwLCAweDEwLCAweDFkLCAweGYwLCAweDkwLCAweDcwLCAweDJhLCAweGUwLCAweDkwLCAweDEwLAotMHgxZSwgMHhmMCwgMHg5MCwgMHgxMCwgMHgxYywgMHhlMCwgMHhmNSwgMHg2MiwgMHg5MCwgMHgxMCwgMHgxZSwgMHhlMCwgMHgyMCwgMHhlMSwgMHhmMywgMHg5MCwKLTB4MTAsIDB4MWMsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4MjgsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MWQsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4MjksIDB4ZjAsIDB4OTAsCi0weDEwLCAweDFlLCAweGUwLCAweDkwLCAweDcwLCAweDJhLCAweGYwLCAweDMwLCAweDRhLCAweDA3LCAweDkwLCAweDcwLCAweDI0LCAweGUwLCAweDQ0LCAweDAxLAotMHhmMCwgMHhjMiwgMHgwNSwgMHhkMiwgMHhhZiwgMHgyMiwgMHgyMiwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwYywgMHg5NCwgMHgzZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4MDIsIDB4MTAsIDB4MjgsIDB4MDIsIDB4MTAsIDB4MzIsIDB4MDIsIDB4MTAsIDB4NzgsIDB4MDIsIDB4MTIsIDB4NjcsIDB4MDIsCi0weDEyLCAweDY4LCAweDAyLCAweDEyLCAweDg3LCAweDAyLCAweDEyLCAweDhjLCAweDEyLCAweDEyLCAweDg4LCAweDIyLCAweDAyLCAweDE2LCAweDQ5LCAweDAyLAotMHgxNywgMHgxZiwgMHgwMiwgMHgxMywgMHg3NywgMHgwMiwgMHgxMiwgMHg4ZCwgMHgzMCwgMHgwNSwgMHgwNiwgMHgyMCwgMHgwZCwgMHgwMywgMHgxMiwgMHgxNywKLTB4YzEsIDB4MjIsIDB4OTAsIDB4MDEsIDB4OGMsIDB4ZTAsIDB4MzAsIDB4ZTMsIDB4MWIsIDB4ZTUsIDB4NGMsIDB4MzAsIDB4ZTAsIDB4MDQsIDB4N2YsIDB4NDAsCi0weDgwLCAweDAyLCAweDdmLCAweDAwLCAweDkwLCAweDEwLCAweDJmLCAweGVmLCAweGYwLCAweDkwLCAweDAxLCAweDhjLCAweDc0LCAweDA4LCAweGYwLCAweGU0LAotMHg5MCwgMHgwMSwgMHhhNywgMHhmMCwgMHg5MCwgMHgwMSwgMHg4YywgMHhlMCwgMHgzMCwgMHhlMCwgMHgxYywgMHg5MCwgMHgwMSwgMHg4MCwgMHhlMCwgMHhiNCwKLTB4MDIsIDB4MTUsIDB4YTMsIDB4ZTAsIDB4YjQsIDB4MDEsIDB4MTAsIDB4OTAsIDB4MDEsIDB4ODQsIDB4ZTAsIDB4YjQsIDB4ODEsIDB4MDksIDB4OTAsIDB4MDEsCi0weDhjLCAweDc0LCAweDAxLCAweGYwLCAweDEyLCAweDBkLCAweGRkLCAweDIyLCAweDkwLCAweDA0LCAweDE0LCAweGUwLCAweDIwLCAweGU3LCAweDAzLCAweDAyLAotMHgxMiwgMHg2NiwgMHg5MCwgMHg3MCwgMHgxMiwgMHhlMCwgMHhmNSwgMHg1NiwgMHg5MCwgMHgwNCwgMHgwNCwgMHhlMCwgMHgxMiwgMHgwYSwgMHhiNiwgMHgxMCwKLTB4YjcsIDB4MzEsIDB4MTAsIDB4ZTAsIDB4NTAsIDB4MTEsIDB4MDQsIDB4NTEsIDB4MTEsIDB4MGQsIDB4NTIsIDB4MTEsIDB4MGQsIDB4NTMsIDB4MTEsIDB4MGQsCi0weDU0LCAweDExLCAweDRlLCAweDU1LCAweDExLCAweDdlLCAweDcwLCAweDExLCAweGE5LCAweDcxLCAweDExLCAweGQ3LCAweDcyLCAweDEyLCAweDFkLCAweDczLAotMHgxMiwgMHgzZSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxMiwgMHg2NiwgMHgyMCwgMHgwMiwgMHgwMywgMHgzMCwgMHgwMywgMHgxZCwgMHg3ZCwgMHgwMiwgMHhhZiwKLTB4NTYsIDB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsCi0weDU2LCAweGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEyLCAweDY2LCAweDAyLCAweDEyLCAweDVmLCAweDg1LCAweDU2LCAweDQxLCAweGQyLCAweDAyLCAweDIyLAotMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHg1NCwgMHg3ZiwgMHg2NCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHg5MCwgMHg3MCwgMHgxMSwKLTB4ZTAsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MDgsIDB4ZTAsIDB4NjQsIDB4MjAsIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTIsIDB4NjYsIDB4NzUsIDB4NGUsIDB4MDMsCi0weDc1LCAweDRmLCAweDIwLCAweDIyLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweDI0LCAweGZmLCAweDkyLCAweDQ3LCAweDIyLCAweDkwLCAweDA0LCAweDA0LAotMHhlMCwgMHgyNSwgMHhlMCwgMHgyNCwgMHg1ZCwgMHhmNSwgMHg1NywgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmZiwgMHg3NCwgMHg0NywgMHgyNSwgMHg1NywKLTB4ZjgsIDB4YzYsIDB4ZWYsIDB4YzYsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4NDgsIDB4MjUsIDB4NTcsIDB4ZjgsIDB4YzYsIDB4ZWYsCi0weGM2LCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweGFhLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLAotMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHgwMiwgMHgxMiwgMHg1ZiwgMHhlNSwgMHg0NywKLTB4NjQsIDB4MDcsIDB4NjAsIDB4MGIsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MDUsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDksIDB4MDgsIDB4OTAsCi0weDcwLCAweDExLCAweGUwLCAweDU0LCAweDBmLCAweGY1LCAweDNhLCAweGU1LCAweDQ3LCAweGI0LCAweDA5LCAweDA4LCAweGU1LCAweDNhLCAweGI0LCAweDAzLAotMHgwMywgMHhlNCwgMHhmNSwgMHg0NiwgMHhlNCwgMHhmZCwgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHhhYSwgMHhkMiwgMHgwNCwgMHgyMiwgMHg5MCwgMHg3MCwKLTB4MTAsIDB4ZTAsIDB4ZmUsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZmQsIDB4ZWQsIDB4ZjgsIDB4ZTYsIDB4ZjUsIDB4NTcsIDB4ZmQsIDB4YWYsIDB4NTYsCi0weDEyLCAweDBiLCAweGFhLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LAotMHhmNCwgMHg3MCwgMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHgwMiwgMHgxMiwgMHg1ZiwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmZSwgMHg5MCwgMHg3MCwKLTB4MTEsIDB4ZTAsIDB4ZmQsIDB4ZWQsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4NTcsIDB4ZmQsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsCi0weGFhLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDcwLAotMHgwMywgMHgwMiwgMHgxMiwgMHg2NiwgMHgwMiwgMHgxMiwgMHg1ZiwgMHg5MCwgMHgxMCwgMHgwMiwgMHhlMCwgMHhiNCwgMHg3MCwgMHgxZSwgMHhhMywgMHhlMCwKLTB4YjQsIDB4MzAsIDB4MTksIDB4OTAsIDB4MDUsIDB4MDgsIDB4ZTAsIDB4NDQsIDB4MDEsIDB4ZjAsIDB4ZmQsIDB4OTAsIDB4MDUsIDB4MDUsIDB4ZTAsIDB4NTQsCi0weGZiLCAweGYwLCAweDQ0LCAweDA0LCAweGYwLCAweGVkLCAweDU0LCAweGZlLCAweDkwLCAweDA1LCAweDA4LCAweGYwLCAweGU0LCAweGY1LCAweDRlLCAweGY1LAotMHg0ZiwgMHg3NSwgMHgzYSwgMHhmZiwgMHhhZCwgMHg1NywgMHhhZiwgMHg1NiwgMHgxMiwgMHgwYiwgMHhhYSwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwKLTB4ZjAsIDB4ZTQsIDB4OTAsIDB4NzAsIDB4MTMsIDB4ZjAsIDB4ZTUsIDB4NTYsIDB4ZjQsIDB4NjAsIDB4NGIsIDB4ODAsIDB4NDIsIDB4OTAsIDB4NzAsIDB4MTAsCi0weGUwLCAweDI0LCAweGZmLCAweDkyLCAweDkzLCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDBiLCAweGFhLCAweDkwLCAweDA0LCAweDE0LCAweDc0LAotMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHhlNSwgMHg1NiwgMHhmNCwgMHg2MCwgMHgyYSwgMHg4MCwgMHgyMSwgMHg5MCwgMHg3MCwKLTB4MTAsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NGEsIDB4ZDIsIDB4MDUsIDB4YWQsIDB4NTcsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MGIsIDB4YWEsIDB4OTAsCi0weDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweGU1LCAweDU2LCAweGY0LCAweDYwLCAweDA3LCAweDkwLAotMHg3MCwgMHgyNSwgMHhlMCwgMHg0NCwgMHgwMSwgMHhmMCwgMHgyMiwgMHgyMiwgMHhlNSwgMHg1MywgMHg3MCwgMHgxYSwgMHgzMCwgMHg2MCwgMHgwOSwgMHhiMiwKLTB4NGQsIDB4MzAsIDB4NGQsIDB4MDQsIDB4MDUsIDB4NDYsIDB4YzIsIDB4MDQsIDB4ZTUsIDB4NGYsIDB4NDUsIDB4NGUsIDB4NjAsIDB4MDgsIDB4ZTUsIDB4NGYsCi0weDE1LCAweDRmLCAweDcwLCAweDAyLCAweDE1LCAweDRlLCAweDIyLCAweDIyLCAweGMyLCAweDQyLCAweGQzLCAweDIyLCAweDIyLCAweGMyLCAweDRiLCAweGMyLAotMHg0YywgMHhlNSwgMHg0NCwgMHgxMiwgMHgwYSwgMHhiNiwgMHgxMiwgMHhhZiwgMHgwMCwgMHgxMywgMHg0MiwgMHgwNCwgMHgxMywgMHgzZSwgMHgwOCwgMHgxMywKLTB4MTksIDB4MTAsIDB4MTIsIDB4YzMsIDB4MjAsIDB4MTIsIDB4ZTMsIDB4NjAsIDB4MTIsIDB4ZjQsIDB4YTAsIDB4MDAsIDB4MDAsIDB4MTMsIDB4NDQsIDB4ODUsCi0weDQ4LCAweDQzLCAweDg1LCAweDRhLCAweDQyLCAweDg1LCAweDRjLCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDYwLCAweDAzLCAweDAyLCAweDEzLAotMHg0NCwgMHg4MCwgMHgxYiwgMHhlNSwgMHg0OCwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MywgMHhlNSwgMHg0YSwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwKLTB4NDIsIDB4ZTUsIDB4NGMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4NjYsIDB4NTMsIDB4NDMsCi0weDBmLCAweDgwLCAweDYxLCAweDg1LCAweDQ5LCAweDQzLCAweDg1LCAweDRiLCAweDQyLCAweDg1LCAweDRkLCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LAotMHg3MCwgMHg1MiwgMHg4MCwgMHgxYiwgMHhlNSwgMHg0OSwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MywgMHhlNSwgMHg0YiwgMHhjNCwgMHg1NCwgMHgwZiwKLTB4ZjUsIDB4NDIsIDB4ZTUsIDB4NGQsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4MzUsIDB4ZTUsCi0weDQzLCAweDU0LCAweDBmLCAweDQ0LCAweDEwLCAweGY1LCAweDQzLCAweDgwLCAweDJiLCAweGU1LCAweDQ3LCAweGI0LCAweDA0LCAweDA2LCAweDUzLCAweDVlLAotMHhmYiwgMHg3NSwgMHg0MiwgMHgwOSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwNSwgMHgwNiwgMHg0MywgMHg1ZSwgMHgwNCwgMHg3NSwgMHg0MiwgMHgwOSwgMHhlNSwKLTB4NDcsIDB4YjQsIDB4MDYsIDB4MTAsIDB4ZTUsIDB4NDMsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MzAsIDB4ZjUsIDB4NDMsIDB4ODAsIDB4MDYsIDB4ZDIsIDB4NGIsCi0weDgwLCAweDAyLCAweGQyLCAweDRjLCAweGU0LCAweGY1LCAweDI1LCAweGU1LCAweDQyLCAweGM0LCAweDU0LCAweGYwLCAweGZmLCAweGU1LCAweDQzLCAweDU0LAotMHgwZiwgMHg0ZiwgMHhmNSwgMHg1ZiwgMHg5MCwgMHg3MCwgMHg0NCwgMHhmMCwgMHhhMywgMHhlNSwgMHg1ZSwgMHhmMCwgMHhhMywgMHhlNSwgMHg0YSwgMHhmMCwKLTB4YTMsIDB4ZTUsIDB4NDgsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NGMsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NDQsIDB4ZjAsIDB4YTMsIDB4ZTUsIDB4NDIsIDB4ZjAsCi0weGEzLCAweGU1LCAweDQzLCAweGYwLCAweGQyLCAweDYwLCAweDIyLCAweGU1LCAweDQ3LCAweDYwLCAweDEwLCAweDI0LCAweGMwLCAweDcwLCAweDAzLCAweDEyLAotMHgxNiwgMHgyOSwgMHgxMiwgMHgxMywgMHg4YywgMHhjMiwgMHhhZiwgMHhjMiwgMHgwNCwgMHhkMiwgMHhhZiwgMHgyMiwgMHhjMiwgMHhhZiwgMHg5MCwgMHgwNCwKLTB4MTQsIDB4ZTAsIDB4NTQsIDB4MGUsIDB4NjAsIDB4MDQsIDB4ZDIsIDB4MTgsIDB4ODAsIDB4MDgsIDB4ZTUsIDB4NGUsIDB4NDUsIDB4NGYsIDB4MjQsIDB4ZmYsCi0weDkyLCAweDE4LCAweGQyLCAweGFmLCAweDkwLCAweDA0LCAweDE0LCAweGUwLCAweGEyLCAweGU0LCAweDkyLCAweDE5LCAweDc0LCAweDFlLCAweGYwLCAweGU1LAotMHg1ZiwgMHg1NCwgMHgwZiwgMHhmNSwgMHgyZCwgMHhlNSwgMHgyNSwgMHg3MCwgMHgxMywgMHgzMCwgMHgxOCwgMHgwNSwgMHhlNSwgMHg1ZiwgMHgyMCwgMHhlNSwKLTB4MGIsIDB4MzAsIDB4MTksIDB4MTksIDB4ZTUsIDB4NWYsIDB4NTQsIDB4MzAsIDB4ZmYsIDB4YmYsIDB4MzAsIDB4MTEsIDB4ZTUsIDB4MjUsIDB4NzAsIDB4MDUsCi0weDc1LCAweDI1LCAweDBjLCAweDgwLCAweDAyLCAweDE1LCAweDI1LCAweGQyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDBmLCAweGU1LCAweDVmLCAweDMwLAotMHhlNiwgMHgwNiwgMHhjMiwgMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgwNCwgMHhkMiwgMHg2YywgMHhjMiwgMHg2ZCwgMHhlNSwgMHg0NywgMHg2NCwgMHgwMywKLTB4NzAsIDB4MjEsIDB4MzAsIDB4NGIsIDB4MDYsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MTgsIDB4ZTUsIDB4MjUsIDB4NzAsIDB4MDMsIDB4MzAsCi0weDRjLCAweDExLCAweGMyLCAweDRjLCAweGU1LCAweDI1LCAweDcwLCAweDA1LCAweDc1LCAweDI1LCAweDA3LCAweDgwLCAweDAyLCAweDE1LCAweDI1LCAweGQyLAotMHg2YywgMHhkMiwgMHg2ZCwgMHhlNSwgMHg0NywgMHhiNCwgMHgwOSwgMHgxNCwgMHhlNSwgMHg0NCwgMHgyMCwgMHhlMywgMHgwYiwgMHhlNSwgMHgzYSwgMHg2NCwKLTB4MDIsIDB4NjAsIDB4MDUsIDB4ZTUsIDB4M2EsIDB4YjQsIDB4MDMsIDB4MDQsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4OTAsIDB4NzAsIDB4NDYsIDB4ZTUsCi0weDJkLCAweGYwLCAweDIwLCAweDY5LCAweDA3LCAweGU1LCAweDVlLCAweDIwLCAweGUwLCAweDAyLCAweGIyLCAweDY4LCAweDIwLCAweDZiLCAweDA3LCAweGU1LAotMHg1ZSwgMHgyMCwgMHhlMSwgMHgwMiwgMHhiMiwgMHg2YSwgMHgyMCwgMHg2ZCwgMHgwNywgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMiwgMHgwMiwgMHhiMiwgMHg2YywKLTB4OTAsIDB4NzAsIDB4NDcsIDB4ZTUsIDB4MmQsIDB4ZjAsIDB4NzUsIDB4MmUsIDB4NDAsIDB4MjAsIDB4NjksIDB4MDQsIDB4YTIsIDB4NjgsIDB4ODAsIDB4MjYsCi0weDMwLCAweDY4LCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLCAweDgwLCAweDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUyLCAweDA0LCAweDdmLCAweDAxLAotMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHhlNSwgMHg0NiwgMHg1NCwgMHhmMCwgMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwgMHgwMiwKLTB4N2UsIDB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NzMsIDB4OTIsIDB4NzIsIDB4MjAsIDB4NmIsIDB4MDQsIDB4YTIsIDB4NmEsIDB4ODAsCi0weDI2LCAweDMwLCAweDZhLCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLCAweDgwLCAweDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUwLCAweDA0LCAweDdmLAotMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHhlNSwgMHg0NiwgMHg1NCwgMHhmMCwgMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwKLTB4MDIsIDB4N2UsIDB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NzUsIDB4OTIsIDB4NzQsIDB4MjAsIDB4NmQsIDB4MDQsIDB4YTIsIDB4NmMsCi0weDgwLCAweDI2LCAweDMwLCAweDZjLCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLCAweDgwLCAweDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUxLCAweDA0LAotMHg3ZiwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHhlNSwgMHg0NiwgMHg1NCwgMHhmMCwgMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwKLTB4ODAsIDB4MDIsIDB4N2UsIDB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NzEsIDB4OTIsIDB4NzAsIDB4OTAsIDB4MTAsIDB4MDAsIDB4ZTAsCi0weDkwLCAweDEwLCAweDJmLCAweGYwLCAweDkwLCAweDEwLCAweDAzLCAweGUwLCAweGMzLCAweDk0LCAweDMwLCAweDQwLCAweDE0LCAweGEyLCAweDcxLCAweDkyLAotMHg3NywgMHhhMiwgMHg3MCwgMHg5MiwgMHg3NiwgMHhlNSwgMHgyZSwgMHgxMywgMHgxMywgMHg1NCwgMHgzZiwgMHhmNSwgMHgyZSwgMHhjMiwgMHg3NywgMHhkMiwKLTB4NzYsIDB4OTAsIDB4MTAsIDB4MmYsIDB4ZTUsIDB4MmUsIDB4ZjAsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsIDB4NGMsIDB4OTAsIDB4MDIsIDB4MjksCi0weGUwLCAweDU0LCAweGZlLCAweGYwLCAweGU1LCAweDQzLCAweGM0LCAweDU0LCAweDBmLCAweDE0LCAweDYwLCAweDE0LCAweDI0LCAweGZlLCAweDYwLCAweDIzLAotMHgyNCwgMHgwMywgMHg2MCwgMHgwMywgMHgwMiwgMHgxNiwgMHgxOCwgMHg5MCwgMHgwMiwgMHgyOCwgMHhlMCwgMHgzMCwgMHg0NywgMHgwZiwgMHg4MCwgMHgwNywKLTB4OTAsIDB4MDIsIDB4MjgsIDB4ZTAsIDB4MjAsIDB4NDcsIDB4MDYsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4MDIsIDB4MTYsIDB4MTgsIDB4NDQsIDB4MDEsIDB4ZjAsCi0weDAyLCAweDE2LCAweDE4LCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDA0LCAweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweDkwLCAweDAyLAotMHgyOCwgMHhlMCwgMHg1NCwgMHhmZSwgMHg0ZiwgMHhmMCwgMHgwMiwgMHgxNiwgMHgxOCwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNywgMHg2MCwgMHgwZiwgMHhlNSwKLTB4NDcsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MDksIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDksIDB4NjAsIDB4MDMsIDB4MDIsIDB4MTYsIDB4MTgsIDB4ZTQsIDB4ZjUsCi0weDI3LCAweDkwLCAweDAyLCAweDI5LCAweGUwLCAweDU0LCAweGZjLCAweGYwLCAweGU1LCAweDNhLCAweDE0LCAweDYwLCAweDJkLCAweDE0LCAweDYwLCAweDJlLAotMHgxNCwgMHg2MCwgMHgzNiwgMHgyNCwgMHhmYywgMHg2MCwgMHg1ZiwgMHgyNCwgMHhmOSwgMHg2MCwgMHgxZiwgMHgyNCwgMHgwZSwgMHg3MCwgMHg2OSwgMHhlNSwKLTB4NDYsIDB4MTMsIDB4MTMsIDB4NTQsIDB4M2YsIDB4NzUsIDB4ZjAsIDB4MDMsIDB4ODQsIDB4YWYsIDB4ZjAsIDB4MjAsIDB4NDcsIDB4MDQsIDB4N2UsIDB4MDEsCi0weDgwLCAweDAyLCAweDdlLCAweDAwLCAweGVmLCAweDZlLCAweDI0LCAweGZmLCAweDgwLCAweDQ1LCAweGEyLCAweDQ3LCAweDgwLCAweDQxLCAweGU1LCAweDQ2LAotMHgzMCwgMHhlMiwgMHgwMywgMHhkMywgMHg4MCwgMHgyNywgMHhjMywgMHg4MCwgMHgyNCwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwZCwgMHg1NCwgMHgzOCwKLTB4YzMsIDB4OTQsIDB4MzAsIDB4NTAsIDB4MDYsIDB4N2UsIDB4MDAsIDB4N2YsIDB4MDEsIDB4ODAsIDB4MDQsIDB4N2UsIDB4MDAsIDB4N2YsIDB4MDAsIDB4MjAsCi0weDQ3LCAweDA0LCAweDdkLCAweDAxLCAweDgwLCAweDAyLCAweDdkLCAweDAwLCAweGVmLCAweDZkLCAweDRlLCAweDI0LCAweGZmLCAweDkyLCAweDM4LCAweGEyLAotMHg0NywgMHhiMywgMHg5MiwgMHgzOSwgMHg4MCwgMHgxOSwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHg5MiwKLTB4MzksIDB4YTIsIDB4NDcsIDB4YjMsIDB4OTIsIDB4MzgsIDB4ODAsIDB4MDcsIDB4YTIsIDB4NDcsIDB4YjMsIDB4OTIsIDB4MzgsIDB4OTIsIDB4MzksIDB4OTAsCi0weDAyLCAweDI4LCAweGUwLCAweDU0LCAweGZjLCAweDQ1LCAweDI3LCAweGYwLCAweDkwLCAweDcwLCAweDljLCAweGU1LCAweDNhLCAweGYwLCAweGEzLCAweGU1LAotMHg0NywgMHhmMCwgMHg5MCwgMHg3MCwgMHg0MSwgMHhlNSwgMHgzYSwgMHhmMCwgMHgyMiwgMHhlNCwgMHg5MCwgMHgwMiwgMHgyOSwgMHhmMCwgMHgzMCwgMHg0NywKLTB4MDQsIDB4YWYsIDB4NDUsIDB4ODAsIDB4MDQsIDB4ZTUsIDB4NDUsIDB4ZjQsIDB4ZmYsIDB4OTAsIDB4MDIsIDB4MjgsIDB4ZWYsIDB4ZjAsIDB4MjIsIDB4OGYsCi0weDUwLCAweGQyLCAweDU5LCAweDIyLCAweDhmLCAweDU0LCAweGQyLCAweDU4LCAweDIyLCAweGU0LCAweGY1LCAweDYyLCAweGMyLCAweGFmLCAweGU1LCAweDUxLAotMHgxNCwgMHg2MCwgMHg0NiwgMHgxNCwgMHg2MCwgMHg2MiwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxNywgMHgwMywgMHhkMiwgMHg1OSwgMHg3NSwKLTB4NTUsIDB4MDEsIDB4OTAsIDB4MDIsIDB4YTIsIDB4ZTAsIDB4NTQsIDB4N2YsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4MjAsIDB4ZTcsIDB4MjIsIDB4OTAsIDB4MDQsCi0weDM0LCAweGUwLCAweGI0LCAweDAyLCAweDFiLCAweGEzLCAweGUwLCAweGI0LCAweDAyLCAweDE2LCAweGEzLCAweGUwLCAweGI0LCAweDAyLCAweDExLCAweDdmLAotMHgyMCwgMHgxMiwgMHgxNiwgMHgzZiwgMHg5MCwgMHgxMCwgMHgwNCwgMHhlMCwgMHg1NCwgMHhmMywgMHhmMCwgMHg3NSwgMHg1MSwgMHgwMSwgMHg4MCwgMHg3MywKLTB4ZTUsIDB4NTAsIDB4NzAsIDB4MDUsIDB4NzUsIDB4NjIsIDB4MDMsIDB4ODAsIDB4NmEsIDB4OTAsIDB4MTIsIDB4MDAsIDB4ZTAsIDB4NTQsIDB4MDMsIDB4NzAsCi0weDExLCAweDdmLCAweDIwLCAweDEyLCAweDE2LCAweDNmLCAweDkwLCAweDAyLCAweGEyLCAweGUwLCAweDU0LCAweGJmLCAweGYwLCAweDc1LCAweDUxLCAweDAyLAotMHg4MCwgMHg1MSwgMHhlNSwgMHg1MCwgMHg3MCwgMHgwMiwgMHg4MCwgMHg0NiwgMHg5MCwgMHgwMiwgMHhhMywgMHhlMCwgMHgyMCwgMHhlNiwgMHgzYiwgMHg5MCwKLTB4MDQsIDB4MzcsIDB4ZTAsIDB4NjQsIDB4MjIsIDB4NzAsIDB4MzMsIDB4OTAsIDB4MDEsIDB4OGEsIDB4NzQsIDB4N2UsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4OTYsCi0weGYwLCAweDkwLCAweDEyLCAweDA0LCAweDc0LCAweDBhLCAweGYwLCAweDkwLCAweDEzLCAweDI4LCAweGUwLCAweDU0LCAweGYwLCAweGYwLCAweGEzLCAweGUwLAotMHg1NCwgMHhmMCwgMHhmMCwgMHhhMywgMHhlMCwgMHg1NCwgMHhmYSwgMHhmMCwgMHg5MCwgMHgwNCwgMHgwMSwgMHhlMCwgMHg1NCwgMHhmOSwgMHhmMCwgMHg3NSwKLTB4NjIsIDB4MDEsIDB4NzUsIDB4NTUsIDB4MDIsIDB4ZTQsIDB4ZjUsIDB4NTEsIDB4ODAsIDB4MDksIDB4ZTUsIDB4NTAsIDB4NzAsIDB4MDUsIDB4NzUsIDB4NjIsCi0weDAzLCAweGY1LCAweDUxLCAweGU1LCAweDYyLCAweDYwLCAweDE1LCAweGMyLCAweDAxLCAweGU0LCAweGY1LCAweDUxLCAweGMyLCAweDU5LCAweGFkLCAweDYyLAotMHhhZiwgMHg0MCwgMHgxMiwgMHgxNywgMHg4ZCwgMHhlNSwgMHg2MiwgMHhiNCwgMHgwMywgMHgwMiwgMHhkMiwgMHgwMywgMHhkMiwgMHhhZiwgMHgyMiwgMHhjMiwKLTB4YWYsIDB4MzAsIDB4MDEsIDB4MTIsIDB4ZTQsIDB4OTAsIDB4MDEsIDB4OTYsIDB4ZjAsIDB4ZjUsIDB4NTEsIDB4YzIsIDB4NTksIDB4YzIsIDB4MDEsIDB4N2QsCi0weDAyLCAweGFmLCAweDQwLCAweDEyLCAweDE3LCAweDhkLCAweGU1LCAweDUyLCAweDE0LCAweDYwLCAweDA5LCAweDA0LCAweDcwLCAweDRjLCAweDc1LCAweDUyLAotMHgwMSwgMHg3NSwgMHg1NSwgMHgwMywgMHg5MCwgMHgwNCwgMHgwMSwgMHhlMCwgMHg0NCwgMHgwZSwgMHhmMCwgMHg5MCwgMHgxMywgMHgyOCwgMHhlMCwgMHg0NCwKLTB4MGYsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MGYsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MDUsIDB4ZjAsIDB4OTAsIDB4MTIsIDB4MDQsIDB4NzQsCi0weDAzLCAweGYwLCAweDkwLCAweDAyLCAweGEyLCAweGUwLCAweDQ0LCAweGMwLCAweGYwLCAweDkwLCAweDEwLCAweDA0LCAweGUwLCAweDQ0LCAweDBjLCAweGYwLAotMHhlNCwgMHhmNSwgMHg1MiwgMHhmNSwgMHg1NSwgMHgzMCwgMHgwMiwgMHgwYiwgMHhjMiwgMHgwMiwgMHg3ZCwgMHgwMSwgMHhhZiwgMHg0MSwgMHgxMiwgMHgxNywKLTB4OGQsIDB4ODAsIDB4MDIsIDB4YzIsIDB4MDMsIDB4ZTQsIDB4OTAsIDB4MDEsIDB4OTYsIDB4ZjAsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4ZWYsIDB4ZjQsIDB4NjAsCi0weDJkLCAweGU0LCAweGZlLCAweDc0LCAweDE0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweGUwLCAweGI0LCAweGZmLAotMHgxOSwgMHg3NCwgMHgxNCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHg3NCwgMHgxYywgMHgyZSwKLTB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MGUsIDB4YmUsIDB4MDQsIDB4ZDUsIDB4MjIsIDB4MjIsCi0weDIyLCAweDkwLCAweDcwLCAweDJhLCAweGUwLCAweDMwLCAweGUxLCAweDRkLCAweGMyLCAweGFmLCAweDkwLCAweDcwLCAweDI4LCAweGUwLCAweDkwLCAweDEwLAotMHgxYywgMHhmMCwgMHg5MCwgMHg3MCwgMHgyOSwgMHhlMCwgMHg5MCwgMHgxMCwgMHgxZCwgMHhmMCwgMHg5MCwgMHg3MCwgMHgyYSwgMHhlMCwgMHg5MCwgMHgxMCwKLTB4MWUsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MWMsIDB4ZTAsIDB4ZjUsIDB4NjIsIDB4OTAsIDB4MTAsIDB4MWUsIDB4ZTAsIDB4MjAsIDB4ZTEsIDB4ZjMsIDB4OTAsCi0weDEwLCAweDFjLCAweGUwLCAweDkwLCAweDcwLCAweDI4LCAweGYwLCAweDkwLCAweDEwLCAweDFkLCAweGUwLCAweDkwLCAweDcwLCAweDI5LCAweGYwLCAweDkwLAotMHgxMCwgMHgxZSwgMHhlMCwgMHg5MCwgMHg3MCwgMHgyYSwgMHhmMCwgMHgzMCwgMHg0YSwgMHgwNywgMHg5MCwgMHg3MCwgMHgyNCwgMHhlMCwgMHg0NCwgMHgwMSwKLTB4ZjAsIDB4YzIsIDB4MDUsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4MjIsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDIsIDB4OWIsIDB4YzAsIH0gOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9tZDQuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydDMwNzAvbWQ0LmgKaW5kZXggYTljYzdiMC4uYjNmYjYzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0MzA3MC9tZDQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnQzMDcwL21kNC5oCkBAIC0zNSw4ICszNSw4IEBACiAJdTgJYnVmZmVyWzY0XTsgICAgICAvKiBpbnB1dCBidWZmZXIgKi8KIH0JTUQ0X0NUWDsKIAotdm9pZCBNRDRJbml0IChNRDRfQ1RYICopOwotdm9pZCBNRDRVcGRhdGUgKE1ENF9DVFggKiwgdTggKiwgVUlOVCk7Ci12b2lkIE1ENEZpbmFsICh1OCBbMTZdLCBNRDRfQ1RYICopOwordm9pZCBNRDRJbml0KE1ENF9DVFggKik7Cit2b2lkIE1ENFVwZGF0ZShNRDRfQ1RYICosIHU4ICosIFVJTlQpOwordm9pZCBNRDRGaW5hbCh1OCBbMTZdLCBNRDRfQ1RYICopOwogCi0jZW5kaWYgLy9fX01ENF9IX18KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCisjZW5kaWYgLypfX01ENF9IX18qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9maXJtd2FyZS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0MzA5MC9maXJtd2FyZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNzA1NmUyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydDMwOTAvZmlybXdhcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxNyArMCwwIEBACi0vKiBBVVRPIEdFTiBQTEVBU0UgRE8gTk9UIE1PRElGWSBJVCAqLwotLyogQVVUTyBHRU4gUExFQVNFIERPIE5PVCBNT0RJRlkgSVQgKi8KLQotCi11OCBGaXJtd2FyZUltYWdlXzMwOTAgW10gPSB7Ci0weDAyLCAweDAyLCAweGYzLCAweDAyLCAweDAyLCAweGExLCAweDIyLCAweDIyLCAweGZmLCAweGZmLCAweGZmLCAweDAyLCAweDAxLCAweDI3LCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHgwMiwgMHgwMCwgMHgxZSwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHgwMiwgMHgwMCwgMHhkOCwgMHhjMCwgMHhlMCwKLTB4YzAsIDB4ZjAsIDB4YzAsIDB4ODMsIDB4YzAsIDB4ODIsIDB4YzAsIDB4ZDAsIDB4NzUsIDB4ZDAsIDB4MTgsIDB4YzIsIDB4YWYsIDB4MzAsIDB4NDUsIDB4MDMsCi0weDEyLCAweDEwLCAweDA5LCAweDkwLCAweDA0LCAweDE2LCAweGUwLCAweDMwLCAweGUzLCAweDAzLCAweDc0LCAweDA4LCAweGYwLCAweDkwLCAweDA0LCAweDE0LAotMHhlMCwgMHgyMCwgMHhlNywgMHgwMywgMHgwMiwgMHgwMCwgMHhjYiwgMHg3NCwgMHg4MCwgMHhmMCwgMHg5MCwgMHg3MCwgMHgxMiwgMHhlMCwgMHhmNSwgMHgzNiwKLTB4OTAsIDB4MDQsIDB4MDQsIDB4ZTAsIDB4MjQsIDB4Y2YsIDB4NjAsIDB4MzAsIDB4MTQsIDB4NjAsIDB4NDIsIDB4MjQsIDB4ZTIsIDB4NjAsIDB4NDcsIDB4MTQsCi0weDYwLCAweDU1LCAweDI0LCAweDIxLCAweDcwLCAweDYwLCAweGU1LCAweDU1LCAweDI0LCAweGZlLCAweDYwLCAweDA3LCAweDE0LCAweDYwLCAweDA4LCAweDI0LAotMHgwMiwgMHg3MCwgMHgwOCwgMHg3ZCwgMHgwMSwgMHg4MCwgMHgyOCwgMHg3ZCwgMHgwMiwgMHg4MCwgMHgyNCwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmNSwKLTB4NTAsIDB4ODUsIDB4MzYsIDB4NDAsIDB4ZDIsIDB4MDEsIDB4ODAsIDB4M2UsIDB4ZTUsIDB4NTUsIDB4NjQsIDB4MDMsIDB4NjAsIDB4MDQsIDB4ZTUsIDB4NTUsCi0weDcwLCAweDA0LCAweDdkLCAweDAyLCAweDgwLCAweDA5LCAweDg1LCAweDM2LCAweDQxLCAweGQyLCAweDAyLCAweDgwLCAweDI5LCAweGFkLCAweDU1LCAweGFmLAotMHgzNiwgMHgxMiwgMHgwMiwgMHg3ZCwgMHg4MCwgMHgyMCwgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmNSwgMHg0NywgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwKLTB4ZjUsIDB4NDQsIDB4MTIsIDB4MTAsIDB4MjUsIDB4ODAsIDB4MDYsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4ZjUsIDB4NDUsIDB4ZTQsIDB4ZmQsIDB4YWYsCi0weDM2LCAweDEyLCAweDAyLCAweDdkLCAweGQyLCAweDA0LCAweDkwLCAweDcwLCAweDEzLCAweGU0LCAweGYwLCAweGQyLCAweGFmLCAweGQwLCAweGQwLCAweGQwLAotMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhmMCwgMHhkMCwgMHhlMCwgMHgzMiwgMHhjMCwgMHhlMCwgMHhjMCwgMHhmMCwgMHhjMCwgMHg4MywgMHhjMCwgMHg4MiwKLTB4YzAsIDB4ZDAsIDB4ZTgsIDB4YzAsIDB4ZTAsIDB4ZTksIDB4YzAsIDB4ZTAsIDB4ZWEsIDB4YzAsIDB4ZTAsIDB4ZWIsIDB4YzAsIDB4ZTAsIDB4ZWMsIDB4YzAsCi0weGUwLCAweGVkLCAweGMwLCAweGUwLCAweGVlLCAweGMwLCAweGUwLCAweGVmLCAweGMwLCAweGUwLCAweGMyLCAweGFmLCAweDMwLCAweDQ1LCAweDAzLCAweDEyLAotMHgxMCwgMHgxMiwgMHhkMiwgMHhhZiwgMHhkMCwgMHhlMCwgMHhmZiwgMHhkMCwgMHhlMCwgMHhmZSwgMHhkMCwgMHhlMCwgMHhmZCwgMHhkMCwgMHhlMCwgMHhmYywKLTB4ZDAsIDB4ZTAsIDB4ZmIsIDB4ZDAsIDB4ZTAsIDB4ZmEsIDB4ZDAsIDB4ZTAsIDB4ZjksIDB4ZDAsIDB4ZTAsIDB4ZjgsIDB4ZDAsIDB4ZDAsIDB4ZDAsIDB4ODIsCi0weGQwLCAweDgzLCAweGQwLCAweGYwLCAweGQwLCAweGUwLCAweDMyLCAweGMwLCAweGUwLCAweGMwLCAweGYwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLAotMHhkMCwgMHg3NSwgMHhkMCwgMHgxMCwgMHhjMiwgMHhhZiwgMHgzMCwgMHg0NSwgMHgwMywgMHgxMiwgMHgxMCwgMHgwYywgMHgzMCwgMHg1OCwgMHgwYSwgMHhlNSwKLTB4NTQsIDB4NjAsIDB4MDQsIDB4MTUsIDB4NTQsIDB4ODAsIDB4MDIsIDB4YzIsIDB4NTgsIDB4MzAsIDB4NTksIDB4MGEsIDB4ZTUsIDB4NTAsIDB4NjAsIDB4MDQsCi0weDE1LCAweDUwLCAweDgwLCAweDAyLCAweGMyLCAweDU5LCAweGQ1LCAweDUzLCAweDA3LCAweDMwLCAweDYwLCAweDA0LCAweDE1LCAweDQ2LCAweGQyLCAweDA0LAotMHgzMCwgMHg0NSwgMHgwMywgMHgxMiwgMHgxMCwgMHgwZiwgMHhjMiwgMHg4ZCwgMHhkMiwgMHhhZiwgMHhkMCwgMHhkMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywKLTB4ZDAsIDB4ZjAsIDB4ZDAsIDB4ZTAsIDB4MzIsIDB4OTAsIDB4NzAsIDB4MmEsIDB4ZTAsIDB4MzAsIDB4ZTEsIDB4NDMsIDB4YzIsIDB4YWYsIDB4OTAsIDB4NzAsCi0weDI4LCAweGUwLCAweDkwLCAweDEwLCAweDFjLCAweGYwLCAweDkwLCAweDcwLCAweDI5LCAweGUwLCAweDkwLCAweDEwLCAweDFkLCAweGYwLCAweDkwLCAweDcwLAotMHgyYSwgMHhlMCwgMHg5MCwgMHgxMCwgMHgxZSwgMHhmMCwgMHg5MCwgMHgxMCwgMHgxYywgMHhlMCwgMHhmNSwgMHgzNywgMHg5MCwgMHgxMCwgMHgxZSwgMHhlMCwKLTB4MjAsIDB4ZTEsIDB4ZjMsIDB4OTAsIDB4MTAsIDB4MWMsIDB4ZTAsIDB4OTAsIDB4NzAsIDB4MjgsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MWQsIDB4ZTAsIDB4OTAsCi0weDcwLCAweDI5LCAweGYwLCAweDkwLCAweDEwLCAweDFlLCAweGUwLCAweDkwLCAweDcwLCAweDJhLCAweGYwLCAweGMyLCAweDA1LCAweGQyLCAweGFmLCAweDIyLAotMHgxMiwgMHgwMiwgMHhjMywgMHgzMCwgMHg0NSwgMHgwMywgMHgxMiwgMHgxMCwgMHgwMywgMHgzMCwgMHgwMSwgMHgwNiwgMHgyMCwgMHgwOSwgMHgwMywgMHgxMiwKLTB4MTAsIDB4MWMsIDB4MzAsIDB4MDIsIDB4MDYsIDB4MjAsIDB4MGEsIDB4MDMsIDB4MTIsIDB4MTAsIDB4MWYsIDB4MzAsIDB4MDMsIDB4MDYsIDB4MjAsIDB4MGIsCi0weDAzLCAweDEyLCAweDEwLCAweDFmLCAweDMwLCAweDA0LCAweDA2LCAweDIwLCAweDBjLCAweDAzLCAweDEyLCAweDEwLCAweDIyLCAweDIwLCAweDEzLCAweDA5LAotMHgyMCwgMHgxMSwgMHgwNiwgMHhlNSwgMHgyYiwgMHg0NSwgMHgyYywgMHg2MCwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHg5MiwgMHhhOSwgMHgxMiwKLTB4MDMsIDB4MWMsIDB4ODAsIDB4YmYsIDB4YzIsIDB4NDMsIDB4ZDIsIDB4NDUsIDB4ZTQsIDB4ZjUsIDB4MjAsIDB4ZjUsIDB4MjEsIDB4ZjUsIDB4NTMsIDB4ZjUsCi0weDQ2LCAweGY1LCAweDJiLCAweGY1LCAweDJjLCAweGMyLCAweDQyLCAweGY1LCAweDUxLCAweGY1LCAweDUyLCAweGY1LCAweDU1LCAweDkwLCAweDA0LCAweDE4LAotMHg3NCwgMHg4MCwgMHhmMCwgMHg5MCwgMHgwNCwgMHgxYSwgMHg3NCwgMHgwOCwgMHhmMCwgMHhjMiwgMHgxYSwgMHhjMiwgMHgxOCwgMHhjMiwgMHgxYiwgMHgyMiwKLTB4YzgsIDB4ZWYsIDB4YzgsIDB4ZTYsIDB4ZmEsIDB4MDgsIDB4ZTYsIDB4NGEsIDB4NjAsIDB4MGMsIDB4YzgsIDB4ZWYsIDB4YzgsIDB4MDgsIDB4ZTYsIDB4MTYsCi0weDE4LCAweDcwLCAweDAxLCAweDE2LCAweGMzLCAweDIyLCAweGVkLCAweDI0LCAweGZmLCAweGZkLCAweGVjLCAweDM0LCAweGZmLCAweGM4LCAweGVmLCAweGM4LAotMHhmNiwgMHgwOCwgMHhjNiwgMHhlZCwgMHhjNiwgMHhkMywgMHgyMiwgMHhkMCwgMHg4MywgMHhkMCwgMHg4MiwgMHhmOCwgMHhlNCwgMHg5MywgMHg3MCwgMHgxMiwKLTB4NzQsIDB4MDEsIDB4OTMsIDB4NzAsIDB4MGQsIDB4YTMsIDB4YTMsIDB4OTMsIDB4ZjgsIDB4NzQsIDB4MDEsIDB4OTMsIDB4ZjUsIDB4ODIsIDB4ODgsIDB4ODMsCi0weGU0LCAweDczLCAweDc0LCAweDAyLCAweDkzLCAweDY4LCAweDYwLCAweGVmLCAweGEzLCAweGEzLCAweGEzLCAweDgwLCAweGRmLCAweGVmLCAweGY0LCAweDYwLAotMHgxZiwgMHhlNCwgMHhmZSwgMHgxMiwgMHgwMywgMHg1YiwgMHhlMCwgMHhiNCwgMHhmZiwgMHgxMiwgMHgxMiwgMHgwMywgMHg1YiwgMHhlZiwgMHhmMCwgMHg3NCwKLTB4MWMsIDB4MmUsIDB4ZjUsIDB4ODIsIDB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MGUsIDB4YmUsIDB4MDQsIDB4ZTMsCi0weDIyLCAweGMwLCAweGUwLCAweGMwLCAweGYwLCAweGMwLCAweDgzLCAweGMwLCAweDgyLCAweGMwLCAweGQwLCAweDc1LCAweGQwLCAweDA4LCAweGMyLCAweGFmLAotMHgzMCwgMHg0NSwgMHgwMywgMHgxMiwgMHgxMCwgMHgwNiwgMHhkMiwgMHhhZiwgMHhkMCwgMHhkMCwgMHhkMCwgMHg4MiwgMHhkMCwgMHg4MywgMHhkMCwgMHhmMCwKLTB4ZDAsIDB4ZTAsIDB4MzIsIDB4YzIsIDB4YWYsIDB4MTIsIDB4MDAsIDB4MDYsIDB4MTIsIDB4MDIsIDB4MDQsIDB4MTIsIDB4MDIsIDB4ZGMsIDB4ZTQsIDB4ZjUsCi0weDIyLCAweGY1LCAweDQ3LCAweDkwLCAweDA0LCAweDAwLCAweDc0LCAweDgwLCAweGYwLCAweGQyLCAweGFmLCAweDIyLCAweDc1LCAweDg5LCAweDAyLCAweGU0LAotMHhmNSwgMHg4YywgMHhmNSwgMHg4YSwgMHhmNSwgMHg4OCwgMHhmNSwgMHhiOCwgMHhmNSwgMHhlOCwgMHg3NSwgMHg5MCwgMHgxOCwgMHhkMiwgMHg4YywgMHg3NSwKLTB4YTgsIDB4MDUsIDB4MjIsIDB4NzgsIDB4N2YsIDB4ZTQsIDB4ZjYsIDB4ZDgsIDB4ZmQsIDB4NzUsIDB4ODEsIDB4NWYsIDB4MDIsIDB4MDEsIDB4YzAsIDB4ZmYsCi0weGMwLCAweDI2LCAweDc0LCAweDAzLCAweGMwLCAweGUwLCAweGMwLCAweDgyLCAweGMwLCAweDgzLCAweDc1LCAweDI2LCAweDBhLCAweDIyLCAweGMwLCAweDI2LAotMHg3NCwgMHgwMywgMHhjMCwgMHhlMCwgMHhjMCwgMHg4MiwgMHhjMCwgMHg4MywgMHg3NSwgMHgyNiwgMHgxOCwgMHgyMiwgMHgzMCwgMHg0NSwgMHgwMywgMHgxMiwKLTB4MTAsIDB4MTUsIDB4ZTUsIDB4MjAsIDB4NzAsIDB4MDMsIDB4MjAsIDB4MTAsIDB4MDMsIDB4MzAsIDB4MTEsIDB4MDMsIDB4NDMsIDB4ODcsIDB4MDEsIDB4MjIsCi0weGNlLCAweGVmLCAweGNlLCAweGVlLCAweDYwLCAweDA4LCAweDdmLCAweGZmLCAweDEyLCAweDAzLCAweDcxLCAweDFlLCAweDgwLCAweGY1LCAweDIyLCAweGM4LAotMHhlZiwgMHhjOCwgMHhlNiwgMHg2MCwgMHgwMywgMHgxNiwgMHhjMywgMHgyMiwgMHhlZCwgMHgxNCwgMHhmNiwgMHhkMywgMHgyMiwgMHhjOCwgMHhlZiwgMHhjOCwKLTB4ZTYsIDB4NjAsIDB4MDYsIDB4MTYsIDB4ZTYsIDB4MjQsIDB4ZmYsIDB4YjMsIDB4MjIsIDB4YzMsIDB4MjIsIDB4NzQsIDB4MTQsIDB4MmUsIDB4ZjUsIDB4ODIsCi0weGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweDIyLCAweGVmLCAweDkwLCAweDAzLCAweDZmLCAweDkzLCAweDkwLCAweDAzLCAweDAwLCAweDczLCAweDBhLAotMHgxOCwgMHhlZiwgMHg2MCwgMHgwMywgMHgxZiwgMHg4MCwgMHhmYSwgMHgyMiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwKLTB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsIDB4ZmYsCi0weGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLAotMHhmZiwgMHhmZiwgMHhmZiwgMHgwMiwgMHgxMCwgMHgyOCwgMHgwMiwgMHgxMCwgMHgzYiwgMHgwMiwgMHgxMCwgMHgzYywgMHgwMiwgMHgxMywgMHg2OCwgMHgwMiwKLTB4MTMsIDB4NjksIDB4MDIsIDB4MTQsIDB4MWUsIDB4MDIsIDB4MTQsIDB4MWYsIDB4YzMsIDB4MjIsIDB4ZmYsIDB4ZmYsIDB4MDIsIDB4MTksIDB4YTEsIDB4MDIsCi0weDFiLCAweDMxLCAweDAyLCAweDE0LCAweGVhLCAweDAyLCAweDE0LCAweDIwLCAweDMwLCAweDA1LCAweDA2LCAweDIwLCAweDBkLCAweDAzLCAweDEyLCAweDAxLAotMHg3NSwgMHgzMCwgMHgwNiwgMHgwNiwgMHgyMCwgMHgwZSwgMHgwMywgMHgxMiwgMHgxYywgMHg0ZiwgMHgyMiwgMHgyMiwgMHg5MCwgMHgwNCwgMHgxNCwgMHhlMCwKLTB4MjAsIDB4ZTcsIDB4MDMsIDB4MDIsIDB4MTMsIDB4NjcsIDB4OTAsIDB4NzAsIDB4MTIsIDB4ZTAsIDB4ZjUsIDB4NTYsIDB4OTAsIDB4MDQsIDB4MDQsIDB4ZTAsCi0weDEyLCAweDAyLCAweDU3LCAweDExLCAweDExLCAweDMwLCAweDEwLCAweGUyLCAweDMxLCAweDEwLCAweDkwLCAweDMzLCAweDEwLCAweGEwLCAweDM0LCAweDEwLAotMHhiZSwgMHgzNSwgMHgxMCwgMHhhYywgMHgzNiwgMHgxMSwgMHgxZiwgMHg1MCwgMHgxMSwgMHg2OCwgMHg1MSwgMHgxMSwgMHg3MSwgMHg1MiwgMHgxMSwgMHg3MSwKLTB4NTMsIDB4MTEsIDB4NzEsIDB4NTQsIDB4MTEsIDB4YjMsIDB4NTUsIDB4MTIsIDB4MTYsIDB4NzAsIDB4MTIsIDB4NDIsIDB4NzEsIDB4MTIsIDB4NzEsIDB4NzIsCi0weDEyLCAweGRhLCAweDczLCAweDEyLCAweGZlLCAweDgwLCAweDEzLCAweDI5LCAweDgzLCAweDEzLCAweDQ3LCAweDg0LCAweDAwLCAweDAwLCAweDEzLCAweDY3LAotMHhkMiwgMHgxOCwgMHhkMiwgMHg2MSwgMHg3NSwgMHgzNSwgMHgyYSwgMHg3NSwgMHgzMiwgMHgwYiwgMHg3NSwgMHgzMywgMHhiOCwgMHgwMiwgMHgxMywgMHg2MiwKLTB4YzIsIDB4MTgsIDB4OTAsIDB4MDEsIDB4MTQsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4MDIsIDB4MTMsIDB4NjIsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsCi0weGY1LCAweDNjLCAweGU0LCAweDkwLCAweDcwLCAweDEzLCAweGYwLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweDIyLCAweGU1LCAweDU1LAotMHhiNCwgMHgwMiwgMHgwZiwgMHhlNSwgMHg1OSwgMHhiNCwgMHgyOCwgMHgwNiwgMHg5MCwgMHgwMSwgMHgwZCwgMHg3NCwgMHgwOCwgMHhmMCwgMHg3ZCwgMHgwMSwKLTB4ODAsIDB4MDIsIDB4N2QsIDB4MDIsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MDIsIDB4N2QsIDB4OTAsIDB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4MDIsCi0weDEzLCAweDYyLCAweDIwLCAweDAyLCAweDAzLCAweDMwLCAweDAzLCAweDEwLCAweDdkLCAweDAyLCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDdkLCAweDkwLAotMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHgwMiwgMHgxMywgMHg2MiwgMHhlNSwgMHgzNCwgMHhjMywgMHg5NCwgMHgwMywgMHg0MCwgMHgwYywgMHg5MCwKLTB4MDEsIDB4MGMsIDB4ZTAsIDB4NDQsIDB4MDIsIDB4ZjAsIDB4YTMsIDB4ZTAsIDB4NDQsIDB4MDQsIDB4ZjAsIDB4ODUsIDB4NTYsIDB4NDEsIDB4ZDIsIDB4MDIsCi0weDIyLCAweDkwLCAweDcwLCAweDExLCAweGUwLCAweGY0LCAweDcwLCAweDAzLCAweDAyLCAweDEzLCAweDY3LCAweGUwLCAweGY1LCAweDMwLCAweDIyLCAweGU1LAotMHgzNCwgMHhjMywgMHg5NCwgMHgwMywgMHg0MCwgMHgwNywgMHhlNSwgMHg1NSwgMHg2MCwgMHgwMywgMHgwMiwgMHgxMywgMHg2NywgMHg5MCwgMHg3MCwgMHgxMCwKLTB4ZTAsIDB4NTQsIDB4N2YsIDB4ZmYsIDB4YmYsIDB4MGEsIDB4MGQsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4YjQsIDB4MDgsIDB4MDYsIDB4NzUsIDB4NGUsCi0weDAxLCAweDc1LCAweDRmLCAweDg0LCAweDkwLCAweDcwLCAweDEwLCAweGUwLCAweDU0LCAweDdmLCAweDY0LCAweDAyLCAweDYwLCAweDAzLCAweDAyLCAweDEzLAotMHg2NywgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHg2NCwgMHgwOCwgMHg2MCwgMHgwOCwgMHhlMCwgMHg2NCwgMHgyMCwgMHg2MCwgMHgwMywgMHgwMiwgMHgxMywKLTB4NjcsIDB4NzUsIDB4NGUsIDB4MDMsIDB4NzUsIDB4NGYsIDB4MjAsIDB4MjIsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NDcsCi0weDIyLCAweGU1LCAweDM0LCAweGMzLCAweDk0LCAweDAzLCAweDQwLCAweDA3LCAweGU1LCAweDU1LCAweDYwLCAweDAzLCAweDAyLCAweDEzLCAweDA5LCAweDkwLAotMHgwNCwgMHgwNCwgMHhlMCwgMHgyNSwgMHhlMCwgMHgyNCwgMHg1ZCwgMHhmNSwgMHg1NywgMHg5MCwgMHg3MCwgMHgxMCwgMHhlMCwgMHhmZiwgMHg3NCwgMHg0NywKLTB4MjUsIDB4NTcsIDB4ZjgsIDB4YzYsIDB4ZWYsIDB4YzYsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZmYsIDB4NzQsIDB4NDgsIDB4MjUsIDB4NTcsIDB4ZjgsCi0weGM2LCAweGVmLCAweGM2LCAweGU0LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDdkLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLAotMHgwMiwgMHgxMywgMHg2MiwgMHhlNSwgMHgzNCwgMHhjMywgMHg5NCwgMHgwMywgMHg0MCwgMHgwNywgMHhlNSwgMHg1NSwgMHg2MCwgMHgwMywgMHgwMiwgMHgxMywKLTB4MDksIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDcsIDB4NjAsIDB4MjMsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDgsIDB4NjAsIDB4MWQsIDB4ZTUsIDB4NDcsIDB4NjQsCi0weDA5LCAweDYwLCAweDE3LCAweGU1LCAweDQ3LCAweDY0LCAweDBhLCAweDYwLCAweDExLCAweGU1LCAweDQ3LCAweDY0LCAweDBiLCAweDYwLCAweDBiLCAweGU1LAotMHg0NywgMHg2NCwgMHgwZCwgMHg2MCwgMHgwNSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwZCwgMHgwOCwgMHg5MCwgMHg3MCwgMHgxMSwgMHhlMCwgMHg1NCwgMHgwZiwKLTB4ZjUsIDB4M2EsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDksIDB4MDgsIDB4ZTUsIDB4M2EsIDB4YjQsIDB4MDMsIDB4MDMsIDB4ZTQsIDB4ZjUsIDB4NDYsIDB4ZTUsCi0weDQ3LCAweGI0LCAweDBhLCAweDA4LCAweGU1LCAweDNhLCAweGI0LCAweDAxLCAweDAzLCAweGU0LCAweGY1LCAweDQ2LCAweGU0LCAweGZkLCAweGFmLCAweDU2LAotMHgxMiwgMHgwMiwgMHg3ZCwgMHhkMiwgMHgwNCwgMHgyMiwgMHhlNSwgMHgzNCwgMHhjMywgMHg5NCwgMHgwMywgMHg0MCwgMHgwNywgMHhlNSwgMHg1NSwgMHg2MCwKLTB4MDMsIDB4MDIsIDB4MTMsIDB4MDksIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4ZmUsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZmQsIDB4ZWQsIDB4ZjgsCi0weGU2LCAweGY1LCAweDU3LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDdkLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweDAyLAotMHgxMywgMHg2MiwgMHhlNSwgMHgzNCwgMHhjMywgMHg5NCwgMHgwMywgMHg0MCwgMHgwNywgMHhlNSwgMHg1NSwgMHg2MCwgMHgwMywgMHgwMiwgMHgxMywgMHgwOSwKLTB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4ZmUsIDB4OTAsIDB4NzAsIDB4MTEsIDB4ZTAsIDB4ZmQsIDB4ZWQsIDB4ZjUsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsCi0weGY1LCAweDU3LCAweGZkLCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDdkLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweDAyLCAweDEzLAotMHg2MiwgMHg5MCwgMHgxMCwgMHgwMCwgMHhlMCwgMHhmNSwgMHg1NywgMHg5MCwgMHgxMCwgMHgwMiwgMHhlMCwgMHhmNSwgMHg1OCwgMHhhMywgMHhlMCwgMHhmNSwKLTB4NTksIDB4ZTUsIDB4NTgsIDB4YjQsIDB4NzAsIDB4MWUsIDB4ZTUsIDB4NTksIDB4YjQsIDB4MzAsIDB4MTksIDB4OTAsIDB4MDUsIDB4MDgsIDB4ZTAsIDB4NDQsCi0weDAxLCAweGYwLCAweGZkLCAweDkwLCAweDA1LCAweDA1LCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDQ0LCAweDA0LCAweGYwLCAweGVkLCAweDU0LCAweGZlLAotMHg5MCwgMHgwNSwgMHgwOCwgMHhmMCwgMHhlNCwgMHhmNSwgMHg0ZSwgMHhmNSwgMHg0ZiwgMHg3NSwgMHgzYSwgMHhmZiwgMHhjMiwgMHgxYSwgMHhjMiwgMHgxOCwKLTB4YzIsIDB4MWIsIDB4ZjUsIDB4MzQsIDB4OTAsIDB4MDUsIDB4YTQsIDB4NzQsIDB4MTEsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4ZmYsIDB4ZjAsIDB4YTMsIDB4NzQsCi0weDAzLCAweGYwLCAweGU0LCAweGY1LCAweDMwLCAweGMyLCAweDE5LCAweDc1LCAweDNjLCAweGZmLCAweGFkLCAweDU3LCAweGFmLCAweDU2LCAweDEyLCAweDAyLAotMHg3ZCwgMHg5MCwgMHgwNCwgMHgxNCwgMHg3NCwgMHg4MCwgMHhmMCwgMHgwMiwgMHgxMywgMHg2MiwgMHhlNSwgMHgzNCwgMHhjMywgMHg5NCwgMHgwMywgMHg0MCwKLTB4MDYsIDB4ZTUsIDB4NTUsIDB4NjAsIDB4MDIsIDB4ODAsIDB4MjIsIDB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4OTMsIDB4ZTQsCi0weGZkLCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDdkLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweDgwLCAweDY0LCAweGU1LCAweDM0LAotMHhjMywgMHg5NCwgMHgwMywgMHg0MCwgMHgwYiwgMHhlNSwgMHg1NSwgMHg2MCwgMHgwNywgMHg3ZCwgMHgwMywgMHhhZiwgMHg1NiwgMHgwMiwgMHgwMiwgMHg3ZCwKLTB4OTAsIDB4NzAsIDB4MTAsIDB4ZTAsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4NGEsIDB4ZDIsIDB4MDUsIDB4YWQsIDB4NTcsIDB4YWYsIDB4NTYsIDB4MTIsIDB4MDIsCi0weDdkLCAweDkwLCAweDA0LCAweDE0LCAweDc0LCAweDgwLCAweGYwLCAweDgwLCAweDM5LCAweGU0LCAweGY1LCAweDM0LCAweGY1LCAweDMwLCAweDkwLCAweDcwLAotMHgxMCwgMHhlMCwgMHhmNCwgMHg2MCwgMHgwMywgMHhlMCwgMHhmNSwgMHgzNCwgMHhhZCwgMHg1NywgMHhhZiwgMHg1NiwgMHgxMiwgMHgwMiwgMHg3ZCwgMHg5MCwKLTB4MDQsIDB4MTQsIDB4NzQsIDB4ODAsIDB4ZjAsIDB4ODAsIDB4MWIsIDB4ZDIsIDB4MTksIDB4MDUsIDB4MmYsIDB4ZTUsIDB4MmYsIDB4YjQsIDB4MWEsIDB4MDMsCi0weGU0LCAweGY1LCAweDJmLCAweGQyLCAweDA0LCAweGFkLCAweDU3LCAweGFmLCAweDU2LCAweDEyLCAweDAyLCAweDdkLCAweDkwLCAweDA0LCAweDE0LCAweDc0LAotMHg4MCwgMHhmMCwgMHhlNCwgMHg5MCwgMHg3MCwgMHgxMywgMHhmMCwgMHgyMiwgMHgyMiwgMHhlNSwgMHgzNCwgMHhjMywgMHg5NCwgMHgwMywgMHg0MCwgMHgxNywKLTB4ZTUsIDB4NTUsIDB4YjQsIDB4MDIsIDB4MTIsIDB4ZTUsIDB4MzAsIDB4NjAsIDB4MGUsIDB4MzAsIDB4NjAsIDB4MGIsIDB4NzQsIDB4ZmQsIDB4MjUsIDB4NDYsCi0weGY1LCAweDQ2LCAweGQyLCAweDA0LCAweGU0LCAweGY1LCAweDUzLCAweGU1LCAweDUzLCAweDYwLCAweDAzLCAweDAyLCAweDE0LCAweDFkLCAweDMwLCAweDYwLAotMHgyMSwgMHhiMiwgMHg0ZCwgMHgzMCwgMHg0ZCwgMHgxYywgMHhlNSwgMHgzNCwgMHhjMywgMHg5NCwgMHgwMywgMHg0MCwgMHgxMSwgMHhlNSwgMHg1NSwgMHhiNCwKLTB4MDIsIDB4MGMsIDB4ZTUsIDB4MzAsIDB4NjAsIDB4MDgsIDB4NzQsIDB4MDMsIDB4MjUsIDB4NDYsIDB4ZjUsIDB4NDYsIDB4ODAsIDB4MDIsIDB4MDUsIDB4NDYsCi0weGMyLCAweDA0LCAweGU1LCAweDRmLCAweDQ1LCAweDRlLCAweDYwLCAweDA4LCAweGU1LCAweDRmLCAweDE1LCAweDRmLCAweDcwLCAweDAyLCAweDE1LCAweDRlLAotMHgzMCwgMHgxYSwgMHg0OSwgMHg3ZiwgMHgzMiwgMHg3ZCwgMHhiOCwgMHg3YywgMHgwYiwgMHgxMiwgMHgwMiwgMHgzMCwgMHg1MCwgMHgwNiwgMHg5MCwgMHgwNCwKLTB4MTAsIDB4NzQsIDB4NDAsIDB4ZjAsIDB4N2YsIDB4MzUsIDB4N2QsIDB4MzIsIDB4MTIsIDB4MDMsIDB4M2YsIDB4NTAsIDB4MDksIDB4OTAsIDB4MTAsIDB4MDQsCi0weGUwLCAweDU0LCAweGY3LCAweGYwLCAweGQyLCAweDA2LCAweGU1LCAweDM1LCAweGQzLCAweDk0LCAweDJkLCAweDQwLCAweDMwLCAweDMwLCAweDFiLCAweDJkLAotMHhjMiwgMHgxYiwgMHhhMiwgMHgxOCwgMHg5MiwgMHgxYSwgMHgyMCwgMHgxYSwgMHgyNCwgMHg5MCwgMHgwNCwgMHgwOSwgMHhlMCwgMHg1NCwgMHhkZCwgMHhmMCwKLTB4OTAsIDB4MTAsIDB4MDQsIDB4ZTAsIDB4NDQsIDB4MDgsIDB4ZjAsIDB4YzIsIDB4NjEsIDB4ZDIsIDB4MDMsIDB4MjIsIDB4ZTQsIDB4ZjUsIDB4MzUsIDB4YTIsCi0weDE4LCAweDkyLCAweDFhLCAweDMwLCAweDFhLCAweDA3LCAweDkwLCAweDA0LCAweDA5LCAweGUwLCAweDQ0LCAweDIyLCAweGYwLCAweDIyLCAweDIyLCAweDIyLAotMHhjMiwgMHg0YiwgMHhjMiwgMHg0YywgMHhlNSwgMHg0NCwgMHgxMiwgMHgwMiwgMHg1NywgMHgxNCwgMHg0MiwgMHgwMCwgMHgxNCwgMHhkNSwgMHgwNCwgMHgxNCwKLTB4ZDEsIDB4MDgsIDB4MTQsIDB4YWMsIDB4MTAsIDB4MTQsIDB4NTYsIDB4MjAsIDB4MTQsIDB4NzYsIDB4NjAsIDB4MTQsIDB4ODcsIDB4YTAsIDB4MDAsIDB4MDAsCi0weDE0LCAweGQ3LCAweDg1LCAweDQ4LCAweDQzLCAweDg1LCAweDRhLCAweDQyLCAweDg1LCAweDRjLCAweDVlLCAweGU1LCAweDQ3LCAweDY0LCAweDA2LCAweDYwLAotMHgwMywgMHgwMiwgMHgxNCwgMHhkNywgMHg4MCwgMHgxYiwgMHhlNSwgMHg0OCwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MywgMHhlNSwgMHg0YSwgMHhjNCwKLTB4NTQsIDB4MGYsIDB4ZjUsIDB4NDIsIDB4ZTUsIDB4NGMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsIDB4NzAsCi0weDY2LCAweDUzLCAweDQzLCAweDBmLCAweDgwLCAweDYxLCAweDg1LCAweDQ5LCAweDQzLCAweDg1LCAweDRiLCAweDQyLCAweDg1LCAweDRkLCAweDVlLCAweGU1LAotMHg0NywgMHg2NCwgMHgwNiwgMHg3MCwgMHg1MiwgMHg4MCwgMHgxYiwgMHhlNSwgMHg0OSwgMHhjNCwgMHg1NCwgMHgwZiwgMHhmNSwgMHg0MywgMHhlNSwgMHg0YiwKLTB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NDIsIDB4ZTUsIDB4NGQsIDB4YzQsIDB4NTQsIDB4MGYsIDB4ZjUsIDB4NWUsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MDYsCi0weDcwLCAweDM1LCAweGU1LCAweDQzLCAweDU0LCAweDBmLCAweDQ0LCAweDEwLCAweGY1LCAweDQzLCAweDgwLCAweDJiLCAweGU1LCAweDQ3LCAweGI0LCAweDA0LAotMHgwNiwgMHg1MywgMHg1ZSwgMHhmYiwgMHg3NSwgMHg0MiwgMHgwOSwgMHhlNSwgMHg0NywgMHhiNCwgMHgwNSwgMHgwNiwgMHg0MywgMHg1ZSwgMHgwNCwgMHg3NSwKLTB4NDIsIDB4MDksIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MDYsIDB4MTAsIDB4ZTUsIDB4NDMsIDB4NTQsIDB4MGYsIDB4NDQsIDB4MzAsIDB4ZjUsIDB4NDMsIDB4ODAsCi0weDA2LCAweGQyLCAweDRiLCAweDgwLCAweDAyLCAweGQyLCAweDRjLCAweGU0LCAweGY1LCAweDJhLCAweGU1LCAweDQyLCAweGM0LCAweDU0LCAweGYwLCAweGZmLAotMHhlNSwgMHg0MywgMHg1NCwgMHgwZiwgMHg0ZiwgMHhmNSwgMHg1ZiwgMHhkMiwgMHg2MCwgMHgyMiwgMHhlNSwgMHg0NywgMHg2MCwgMHgxYSwgMHgyNCwgMHhjMCwKLTB4NjAsIDB4MGEsIDB4MjQsIDB4MzUsIDB4NzAsIDB4MDksIDB4MTIsIDB4MTksIDB4NWYsIDB4MTIsIDB4MTUsIDB4MDksIDB4MTIsIDB4MTksIDB4NWYsIDB4MTIsCi0weDE1LCAweDA5LCAweGMyLCAweGFmLCAweGMyLCAweDA0LCAweGQyLCAweGFmLCAweDIyLCAweGMyLCAweGFmLCAweDkwLCAweDA0LCAweDE0LCAweGUwLCAweDU0LAotMHgwZSwgMHg2MCwgMHgwNCwgMHhkMiwgMHgxYywgMHg4MCwgMHgwOCwgMHhlNSwgMHg0ZSwgMHg0NSwgMHg0ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHgxYywgMHhkMiwKLTB4YWYsIDB4OTAsIDB4MDQsIDB4MTQsIDB4ZTAsIDB4YTIsIDB4ZTQsIDB4OTIsIDB4MWQsIDB4NzQsIDB4MWUsIDB4ZjAsIDB4ZTUsIDB4NWYsIDB4NTQsIDB4MGYsCi0weGY1LCAweDJkLCAweGU1LCAweDJhLCAweDcwLCAweDEzLCAweDMwLCAweDFjLCAweDA1LCAweGU1LCAweDVmLCAweDIwLCAweGU1LCAweDBiLCAweDMwLCAweDFkLAotMHgyOSwgMHhlNSwgMHg1ZiwgMHg1NCwgMHgzMCwgMHg2NCwgMHgzMCwgMHg3MCwgMHgyMSwgMHhlNSwgMHgyYSwgMHg3MCwgMHgxNSwgMHhlNSwgMHgzNCwgMHhjMywKLTB4OTQsIDB4MDMsIDB4NDAsIDB4MDksIDB4ZTUsIDB4MzAsIDB4NjAsIDB4MDUsIDB4NzUsIDB4MmEsIDB4MDUsIDB4ODAsIDB4MDcsIDB4NzUsIDB4MmEsIDB4MGMsCi0weDgwLCAweDAyLCAweDE1LCAweDJhLCAweGQyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDBmLCAweGU1LCAweDVmLCAweDMwLCAweGU2LCAweDA2LCAweGMyLAotMHg2YywgMHhkMiwgMHg2ZCwgMHg4MCwgMHgwNCwgMHhkMiwgMHg2YywgMHhjMiwgMHg2ZCwgMHhlNSwgMHg0NywgMHg2NCwgMHgwMywgMHg3MCwgMHgyMSwgMHgzMCwKLTB4NGIsIDB4MDYsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ODAsIDB4MTgsIDB4ZTUsIDB4MmEsIDB4NzAsIDB4MDMsIDB4MzAsIDB4NGMsIDB4MTEsIDB4YzIsCi0weDRjLCAweGU1LCAweDJhLCAweDcwLCAweDA1LCAweDc1LCAweDJhLCAweDA3LCAweDgwLCAweDAyLCAweDE1LCAweDJhLCAweGQyLCAweDZjLCAweGQyLCAweDZkLAotMHhlNSwgMHg0NywgMHhiNCwgMHgwOSwgMHgxNCwgMHhlNSwgMHg0NCwgMHgyMCwgMHhlMywgMHgwYiwgMHhlNSwgMHgzYSwgMHg2NCwgMHgwMiwgMHg2MCwgMHgwNSwKLTB4ZTUsIDB4M2EsIDB4YjQsIDB4MDMsIDB4MDQsIDB4YzIsIDB4NmMsIDB4ZDIsIDB4NmQsIDB4ZTUsIDB4NDcsIDB4YjQsIDB4MGEsIDB4MTMsIDB4ZTUsIDB4M2EsCi0weGI0LCAweDAxLCAweDA2LCAweGMyLCAweDZjLCAweGQyLCAweDZkLCAweDgwLCAweDA4LCAweGU1LCAweDNhLCAweDcwLCAweDA0LCAweGQyLCAweDZjLCAweGMyLAotMHg2ZCwgMHgyMCwgMHg2OSwgMHgwNywgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMCwgMHgwMiwgMHhiMiwgMHg2OCwgMHgyMCwgMHg2YiwgMHgwNywgMHhlNSwgMHg1ZSwKLTB4MjAsIDB4ZTEsIDB4MDIsIDB4YjIsIDB4NmEsIDB4MjAsIDB4NmQsIDB4MDcsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTIsIDB4MDIsIDB4YjIsIDB4NmMsIDB4NzUsCi0weDJlLCAweDQwLCAweDIwLCAweDY5LCAweDA0LCAweGEyLCAweDY4LCAweDgwLCAweDQ1LCAweDMwLCAweDY4LCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLAotMHg4MCwgMHgzYywgMHgzMCwgMHgxOSwgMHgxYywgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMiwgMHgwNCwgMHg3ZiwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwKLTB4ZTUsIDB4MmYsIDB4YjQsIDB4MTksIDB4MDQsIDB4N2UsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2UsIDB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4ODAsCi0weDFkLCAweGU1LCAweDVlLCAweDIwLCAweGUyLCAweDA0LCAweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweGU1LCAweDQ2LCAweDU0LCAweGYwLAotMHhmZSwgMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHg3MywKLTB4OTIsIDB4NzIsIDB4MjAsIDB4NmIsIDB4MDQsIDB4YTIsIDB4NmEsIDB4ODAsIDB4NDUsIDB4MzAsIDB4NmEsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTIsCi0weDgwLCAweDNjLCAweDMwLCAweDE5LCAweDFjLCAweGU1LCAweDVlLCAweDIwLCAweGUwLCAweDA0LCAweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLAotMHhlNSwgMHgyZiwgMHhiNCwgMHgxOSwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg4MCwKLTB4MWQsIDB4ZTUsIDB4NWUsIDB4MjAsIDB4ZTAsIDB4MDQsIDB4N2YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4ZTUsIDB4NDYsIDB4NTQsIDB4ZjAsCi0weGZlLCAweGJlLCAweGYwLCAweDA0LCAweDdlLCAweDAxLCAweDgwLCAweDAyLCAweDdlLCAweDAwLCAweGVlLCAweDZmLCAweDI0LCAweGZmLCAweDkyLCAweDc1LAotMHg5MiwgMHg3NCwgMHgyMCwgMHg2ZCwgMHgwNCwgMHhhMiwgMHg2YywgMHg4MCwgMHg2NCwgMHhlNSwgMHg0NywgMHg2NCwgMHgwYSwgMHg3MCwgMHgxOSwgMHhlNSwKLTB4M2EsIDB4YjQsIDB4MDEsIDB4MDYsIDB4ZTUsIDB4NDYsIDB4YTIsIDB4ZTMsIDB4ODAsIDB4NTMsIDB4ZTUsIDB4NDYsIDB4MjAsIDB4ZTQsIDB4MDMsIDB4MzAsCi0weGU1LCAweDAzLCAweGQzLCAweDgwLCAweDAxLCAweGMzLCAweDgwLCAweDQ1LCAweDMwLCAweDZjLCAweDA2LCAweGU1LCAweDQ2LCAweGEyLCAweGUyLCAweDgwLAotMHgzYywgMHgzMCwgMHgxOSwgMHgxYywgMHhlNSwgMHg1ZSwgMHgyMCwgMHhlMSwgMHgwNCwgMHg3ZiwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZiwgMHgwMCwgMHhlNSwKLTB4MmYsIDB4YjQsIDB4MTksIDB4MDQsIDB4N2UsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2UsIDB4MDAsIDB4ZWUsIDB4NmYsIDB4MjQsIDB4ZmYsIDB4ODAsIDB4MWQsCi0weGU1LCAweDVlLCAweDIwLCAweGUxLCAweDA0LCAweDdmLCAweDAxLCAweDgwLCAweDAyLCAweDdmLCAweDAwLCAweGU1LCAweDQ2LCAweDU0LCAweGYwLCAweGZlLAotMHhiZSwgMHhmMCwgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZSwgMHg2ZiwgMHgyNCwgMHhmZiwgMHg5MiwgMHg3MSwgMHg5MiwKLTB4NzAsIDB4OTAsIDB4MTAsIDB4MDAsIDB4ZTAsIDB4OTAsIDB4MTAsIDB4MmMsIDB4ZjAsIDB4OTAsIDB4MTAsIDB4MDMsIDB4ZTAsIDB4YzMsIDB4OTQsIDB4MzAsCi0weDQwLCAweDE0LCAweGEyLCAweDcxLCAweDkyLCAweDc3LCAweGEyLCAweDcwLCAweDkyLCAweDc2LCAweGU1LCAweDJlLCAweDEzLCAweDEzLCAweDU0LCAweDNmLAotMHhmNSwgMHgyZSwgMHhjMiwgMHg3NywgMHhkMiwgMHg3NiwgMHg5MCwgMHgxMCwgMHgyZiwgMHhlNSwgMHgyZSwgMHhmMCwgMHhlNSwgMHg0NywgMHg2NCwgMHgwNiwKLTB4NzAsIDB4NDYsIDB4OTAsIDB4MDIsIDB4MjksIDB4ZTAsIDB4NTQsIDB4ZmUsIDB4ZjAsIDB4ZTUsIDB4NDMsIDB4YzQsIDB4NTQsIDB4MGYsIDB4MTQsIDB4NjAsCi0weDE0LCAweDI0LCAweGZlLCAweDYwLCAweDFmLCAweDI0LCAweDAzLCAweDYwLCAweDAzLCAweDAyLCAweDE5LCAweDVlLCAweDkwLCAweDAyLCAweDI4LCAweGUwLAotMHgzMCwgMHg0NywgMHgwZCwgMHg4MCwgMHgwNywgMHg5MCwgMHgwMiwgMHgyOCwgMHhlMCwgMHgyMCwgMHg0NywgMHgwNCwgMHg1NCwgMHhmZSwgMHhmMCwgMHgyMiwKLTB4NDQsIDB4MDEsIDB4ZjAsIDB4MjIsIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MDQsIDB4N2YsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2YsIDB4MDAsIDB4OTAsCi0weDAyLCAweDI4LCAweGUwLCAweDU0LCAweGZlLCAweDRmLCAweGYwLCAweDIyLCAweGU1LCAweDQ3LCAweDY0LCAweDA3LCAweDYwLCAweDBmLCAweGU1LCAweDQ3LAotMHg2NCwgMHgwOCwgMHg2MCwgMHgwOSwgMHhlNSwgMHg0NywgMHg2NCwgMHgwOSwgMHg2MCwgMHgwMywgMHgwMiwgMHgxOCwgMHgyNywgMHhlNCwgMHhmNSwgMHgyNywKLTB4OTAsIDB4MDIsIDB4MjksIDB4ZTAsIDB4NTQsIDB4ZmMsIDB4ZjAsIDB4ZTUsIDB4M2EsIDB4MTQsIDB4NjAsIDB4MmQsIDB4MTQsIDB4NjAsIDB4MmUsIDB4MTQsCi0weDYwLCAweDM2LCAweDI0LCAweGZjLCAweDYwLCAweDVmLCAweDI0LCAweGY5LCAweDYwLCAweDFmLCAweDI0LCAweDBlLCAweDcwLCAweDY5LCAweGU1LCAweDQ2LAotMHgxMywgMHgxMywgMHg1NCwgMHgzZiwgMHg3NSwgMHhmMCwgMHgwMywgMHg4NCwgMHhhZiwgMHhmMCwgMHgyMCwgMHg0NywgMHgwNCwgMHg3ZSwgMHgwMSwgMHg4MCwKLTB4MDIsIDB4N2UsIDB4MDAsIDB4ZWYsIDB4NmUsIDB4MjQsIDB4ZmYsIDB4ODAsIDB4NDUsIDB4YTIsIDB4NDcsIDB4ODAsIDB4NDEsIDB4ZTUsIDB4NDYsIDB4MzAsCi0weGUyLCAweDAzLCAweGQzLCAweDgwLCAweDI3LCAweGMzLCAweDgwLCAweDI0LCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDBkLCAweDU0LCAweDM4LCAweGMzLAotMHg5NCwgMHgzMCwgMHg1MCwgMHgwNiwgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwMSwgMHg4MCwgMHgwNCwgMHg3ZSwgMHgwMCwgMHg3ZiwgMHgwMCwgMHgyMCwgMHg0NywKLTB4MDQsIDB4N2QsIDB4MDEsIDB4ODAsIDB4MDIsIDB4N2QsIDB4MDAsIDB4ZWYsIDB4NmQsIDB4NGUsIDB4MjQsIDB4ZmYsIDB4OTIsIDB4MzgsIDB4YTIsIDB4NDcsCi0weGIzLCAweDkyLCAweDM5LCAweDgwLCAweDE5LCAweGU1LCAweDQ2LCAweDMwLCAweGUyLCAweDAzLCAweGQzLCAweDgwLCAweDAxLCAweGMzLCAweDkyLCAweDM5LAotMHhhMiwgMHg0NywgMHhiMywgMHg5MiwgMHgzOCwgMHg4MCwgMHgwNywgMHhhMiwgMHg0NywgMHhiMywgMHg5MiwgMHgzOCwgMHg5MiwgMHgzOSwgMHg5MCwgMHgwMiwKLTB4MjgsIDB4ZTAsIDB4NTQsIDB4ZmMsIDB4MDIsIDB4MTksIDB4NWIsIDB4ZTUsIDB4NDcsIDB4NjQsIDB4MGMsIDB4NjAsIDB4MDksIDB4ZTUsIDB4NDcsIDB4NjQsCi0weDBiLCAweDYwLCAweDAzLCAweDAyLCAweDE4LCAweGM2LCAweGU0LCAweGY1LCAweDI3LCAweDkwLCAweDAyLCAweDI5LCAweGUwLCAweDU0LCAweGZkLCAweGYwLAotMHhlNSwgMHgzYSwgMHgxNCwgMHg2MCwgMHgyYiwgMHgxNCwgMHg2MCwgMHgyZSwgMHgxNCwgMHg2MCwgMHgzOCwgMHgyNCwgMHhmYywgMHg2MCwgMHg1YywgMHgyNCwKLTB4ZjksIDB4NjAsIDB4MWQsIDB4MjQsIDB4MGUsIDB4NzAsIDB4NjEsIDB4ZTUsIDB4NDYsIDB4MTMsIDB4MTMsIDB4NTQsIDB4M2YsIDB4NzUsIDB4ZjAsIDB4MDMsCi0weDg0LCAweGFmLCAweGYwLCAweDIwLCAweDQ3LCAweDA0LCAweDdlLCAweDAxLCAweDgwLCAweDAyLCAweDdlLCAweDAwLCAweGVmLCAweDZlLCAweDgwLCAweDM1LAotMHhhMiwgMHg0NywgMHg5MiwgMHgzOSwgMHg4MCwgMHg0NywgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHg5MiwKLTB4MzksIDB4ODAsIDB4M2EsIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MGQsIDB4NTQsIDB4MzgsIDB4YzMsIDB4OTQsIDB4MzAsIDB4NTAsIDB4MDYsIDB4N2UsCi0weDAwLCAweDdmLCAweDAxLCAweDgwLCAweDA0LCAweDdlLCAweDAwLCAweDdmLCAweDAwLCAweDIwLCAweDQ3LCAweDA0LCAweDdkLCAweDAxLCAweDgwLCAweDAyLAotMHg3ZCwgMHgwMCwgMHhlZiwgMHg2ZCwgMHg0ZSwgMHgyNCwgMHhmZiwgMHg5MiwgMHgzOSwgMHg4MCwgMHgxMiwgMHhlNSwgMHg0NiwgMHgzMCwgMHhlMiwgMHgwMywKLTB4ZDMsIDB4ODAsIDB4MDEsIDB4YzMsIDB4OTIsIDB4MzksIDB4ODAsIDB4MDUsIDB4YTIsIDB4NDcsIDB4YjMsIDB4OTIsIDB4MzksIDB4OTAsIDB4MDIsIDB4MjgsCi0weGUwLCAweDU0LCAweGZkLCAweDAyLCAweDE5LCAweDViLCAweGU1LCAweDQ3LCAweDY0LCAweDBkLCAweDYwLCAweDAzLCAweDAyLCAweDE5LCAweDVlLCAweGY1LAotMHgyNywgMHg5MCwgMHgwMiwgMHgyOSwgMHhlMCwgMHg1NCwgMHhlZiwgMHhmMCwgMHhlNSwgMHgzYSwgMHgxNCwgMHg2MCwgMHgyYiwgMHgxNCwgMHg2MCwgMHgyZSwKLTB4MTQsIDB4NjAsIDB4MzgsIDB4MjQsIDB4ZmMsIDB4NjAsIDB4NWMsIDB4MjQsIDB4ZjksIDB4NjAsIDB4MWQsIDB4MjQsIDB4MGUsIDB4NzAsIDB4NjEsIDB4ZTUsCi0weDQ2LCAweDEzLCAweDEzLCAweDU0LCAweDNmLCAweDc1LCAweGYwLCAweDAzLCAweDg0LCAweGFmLCAweGYwLCAweDIwLCAweDQ3LCAweDA0LCAweDdlLCAweDAxLAotMHg4MCwgMHgwMiwgMHg3ZSwgMHgwMCwgMHhlZiwgMHg2ZSwgMHg4MCwgMHgzNSwgMHhhMiwgMHg0NywgMHg5MiwgMHgzYywgMHg4MCwgMHg0NywgMHhlNSwgMHg0NiwKLTB4MzAsIDB4ZTIsIDB4MDMsIDB4ZDMsIDB4ODAsIDB4MDEsIDB4YzMsIDB4OTIsIDB4M2MsIDB4ODAsIDB4M2EsIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MGQsCi0weDU0LCAweDM4LCAweGMzLCAweDk0LCAweDMwLCAweDUwLCAweDA2LCAweDdlLCAweDAwLCAweDdmLCAweDAxLCAweDgwLCAweDA0LCAweDdlLCAweDAwLCAweDdmLAotMHgwMCwgMHgyMCwgMHg0NywgMHgwNCwgMHg3ZCwgMHgwMSwgMHg4MCwgMHgwMiwgMHg3ZCwgMHgwMCwgMHhlZiwgMHg2ZCwgMHg0ZSwgMHgyNCwgMHhmZiwgMHg5MiwKLTB4M2MsIDB4ODAsIDB4MTIsIDB4ZTUsIDB4NDYsIDB4MzAsIDB4ZTIsIDB4MDMsIDB4ZDMsIDB4ODAsIDB4MDEsIDB4YzMsIDB4OTIsIDB4M2MsIDB4ODAsIDB4MDUsCi0weGEyLCAweDQ3LCAweGIzLCAweDkyLCAweDNjLCAweDkwLCAweDAyLCAweDI4LCAweGUwLCAweDU0LCAweGVmLCAweDQ1LCAweDI3LCAweGYwLCAweDIyLCAweGU1LAotMHg0NywgMHg2NCwgMHgwYiwgMHg3MCwgMHgxYywgMHg5MCwgMHgwMiwgMHgyOSwgMHhlMCwgMHg1NCwgMHhlYiwgMHhmMCwgMHgzMCwgMHg0NywgMHgwNCwgMHhhZiwKLTB4NDUsIDB4ODAsIDB4MDUsIDB4ZTUsIDB4NDUsIDB4NjQsIDB4MTQsIDB4ZmYsIDB4OTAsIDB4MDIsIDB4MjgsIDB4ZTAsIDB4NTQsIDB4ZWIsIDB4NGYsIDB4ZjAsCi0weDIyLCAweGU0LCAweDkwLCAweDAyLCAweDI5LCAweGYwLCAweDMwLCAweDQ3LCAweDA0LCAweGFmLCAweDQ1LCAweDgwLCAweDA0LCAweGU1LCAweDQ1LCAweGY0LAotMHhmZiwgMHg5MCwgMHgwMiwgMHgyOCwgMHhlZiwgMHhmMCwgMHgyMiwgMHg4ZiwgMHg1MCwgMHhkMiwgMHg1OSwgMHgyMiwgMHg4ZiwgMHg1NCwgMHhkMiwgMHg1OCwKLTB4MjIsIDB4ZTQsIDB4ZjUsIDB4MzcsIDB4YzIsIDB4YWYsIDB4ZTUsIDB4NTEsIDB4MTQsIDB4NjAsIDB4NGEsIDB4MTQsIDB4NjAsIDB4NmIsIDB4MjQsIDB4MDIsCi0weDYwLCAweDAzLCAweDAyLCAweDFiLCAweDEyLCAweGQyLCAweDU5LCAweDc1LCAweDU1LCAweDAxLCAweDIwLCAweDFhLCAweDFjLCAweDkwLCAweDAyLCAweDA4LAotMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwgMHhlMCwgMHgyMCwgMHhlMSwgMHgyMywgMHg5MCwgMHgwNCwgMHgzNCwgMHhlMCwgMHhiNCwgMHgwMiwgMHgxYywgMHhhMywKLTB4ZTAsIDB4YjQsIDB4MDIsIDB4MTcsIDB4YTMsIDB4ZTAsIDB4YjQsIDB4MDIsIDB4MTIsIDB4N2YsIDB4MjAsIDB4MTIsIDB4MTksIDB4OTcsIDB4OTAsIDB4MTAsCi0weDA0LCAweGUwLCAweDU0LCAweGYzLCAweGYwLCAweDc1LCAweDUxLCAweDAxLCAweDAyLCAweDFiLCAweDEyLCAweGU1LCAweDUwLCAweDcwLCAweDA2LCAweDc1LAotMHgzNywgMHgwMywgMHgwMiwgMHgxYiwgMHgxMiwgMHg5MCwgMHgxMiwgMHgwMCwgMHhlMCwgMHg1NCwgMHgwMywgMHg3MCwgMHgxNSwgMHg3ZiwgMHgyMCwgMHgxMiwKLTB4MTksIDB4OTcsIDB4MjAsIDB4MWEsIDB4MDcsIDB4OTAsIDB4MDIsIDB4MDgsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4NzUsIDB4NTEsIDB4MDIsIDB4MDIsCi0weDFiLCAweDEyLCAweGU1LCAweDUwLCAweDcwLCAweDAzLCAweDAyLCAweDFiLCAweDBkLCAweDIwLCAweDFhLCAweDE1LCAweDkwLCAweDAyLCAweDA4LCAweGUwLAotMHgzMCwgMHhlMywgMHgwMywgMHgwMiwgMHgxYiwgMHgwOSwgMHg5MCwgMHgwNCwgMHgzNywgMHhlMCwgMHg2NCwgMHgyMiwgMHg2MCwgMHgwMywgMHgwMiwgMHgxYiwKLTB4MDksIDB4OTAsIDB4MTIsIDB4MDQsIDB4NzQsIDB4MGEsIDB4ZjAsIDB4ZTUsIDB4NTgsIDB4YjQsIDB4NzIsIDB4MTUsIDB4ZTUsIDB4NTksIDB4YjQsIDB4MzUsCi0weDEwLCAweGU0LCAweDkwLCAweDA1LCAweDAwLCAweGYwLCAweGEzLCAweDc0LCAweDA4LCAweGYwLCAweGEzLCAweDc0LCAweDAxLCAweGYwLCAweDc0LCAweDAzLAotMHhmMCwgMHg3ZiwgMHgwMSwgMHgxMiwgMHgwMywgMHgzMCwgMHg5MCwgMHgxMywgMHgyOCwgMHhlMCwgMHg1NCwgMHhmMCwgMHhmMCwgMHhhMywgMHhlMCwgMHg1NCwKLTB4ZjAsIDB4ZjAsIDB4ZTUsIDB4NTksIDB4YjQsIDB4MzUsIDB4MTQsIDB4ZTUsIDB4M2MsIDB4ZjQsIDB4NjAsIDB4MDYsIDB4YTMsIDB4ZTAsIDB4NTQsIDB4ZjMsCi0weDgwLCAweDE0LCAweDkwLCAweDEzLCAweDJhLCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDgwLCAweDE0LCAweGU1LCAweDNjLCAweGY0LCAweDkwLCAweDEzLAotMHgyYSwgMHg2MCwgMHgwOCwgMHhlMCwgMHg1NCwgMHhmMiwgMHg0NSwgMHgzYywgMHhmMCwgMHg4MCwgMHgwNCwgMHhlMCwgMHg1NCwgMHhmYSwgMHhmMCwgMHgyMCwKLTB4MWEsIDB4MDcsIDB4OTAsIDB4MDQsIDB4MDEsIDB4ZTAsIDB4NDQsIDB4MTAsIDB4ZjAsIDB4ZTUsIDB4MzQsIDB4YzMsIDB4OTQsIDB4MDMsIDB4NDAsIDB4MDksCi0weGU1LCAweDMwLCAweDcwLCAweDA1LCAweDc1LCAweDhjLCAweDQwLCAweDgwLCAweDAzLCAweDc1LCAweDhjLCAweDgwLCAweDkwLCAweDA0LCAweDAxLCAweGUwLAotMHg1NCwgMHhmZCwgMHhmMCwgMHgyMCwgMHgxYSwgMHgwNywgMHg5MCwgMHgxMiwgMHgwNCwgMHhlMCwgMHg0NCwgMHgwNCwgMHhmMCwgMHhlNSwgMHg1OSwgMHhiNCwKLTB4MjgsIDB4MDYsIDB4OTAsIDB4MDEsIDB4MGQsIDB4ZTAsIDB4ZjUsIDB4MzEsIDB4ZTUsIDB4MzQsIDB4YzMsIDB4OTQsIDB4MDIsIDB4NDAsIDB4MTQsIDB4OTAsCi0weDAxLCAweDBkLCAweGUwLCAweDQ0LCAweDAxLCAweGYwLCAweGU1LCAweDU5LCAweDY0LCAweDM1LCAweDYwLCAweDA3LCAweDkwLCAweDEyLCAweDA0LCAweGUwLAotMHg1NCwgMHhmZCwgMHhmMCwgMHhlNSwgMHgzNCwgMHhjMywgMHg5NCwgMHgwMywgMHg0MCwgMHgxNCwgMHgyMCwgMHgwMiwgMHgxMSwgMHgyMCwgMHgwMywgMHgwZSwKLTB4OTAsIDB4MDEsIDB4MGQsIDB4ZTAsIDB4NTQsIDB4ZmIsIDB4ZjAsIDB4OTAsIDB4MDEsIDB4MGMsIDB4ZTAsIDB4NTQsIDB4ZmQsIDB4ZjAsIDB4NzUsIDB4MzcsCi0weDAxLCAweDc1LCAweDU1LCAweDAyLCAweGU0LCAweGY1LCAweDUxLCAweDgwLCAweDA5LCAweGU1LCAweDUwLCAweDcwLCAweDA1LCAweDc1LCAweDM3LCAweDAzLAotMHhmNSwgMHg1MSwgMHhlNSwgMHgzNywgMHg2MCwgMHgxOCwgMHhjMiwgMHgwMSwgMHhlNCwgMHhmNSwgMHg1MSwgMHhjMiwgMHg1OSwgMHgyMCwgMHgxYSwgMHgwZSwKLTB4YWQsIDB4MzcsIDB4YWYsIDB4NDAsIDB4MTIsIDB4MWMsIDB4MWIsIDB4ZTUsIDB4MzcsIDB4YjQsIDB4MDMsIDB4MDIsIDB4ZDIsIDB4MDMsIDB4ZDIsIDB4YWYsCi0weDIyLCAweGMyLCAweGFmLCAweDMwLCAweDAxLCAweDBlLCAweGU0LCAweGY1LCAweDUxLCAweGMyLCAweDU5LCAweGMyLCAweDAxLCAweDdkLCAweDAyLCAweGFmLAotMHg0MCwgMHgxMiwgMHgxYywgMHgxYiwgMHhlNSwgMHg1MiwgMHgxNCwgMHg2MCwgMHg1YywgMHgxNCwgMHg2MCwgMHgzYSwgMHgyNCwgMHgwMiwgMHg2MCwgMHgwMywKLTB4MDIsIDB4MWMsIDB4MTgsIDB4ZTUsIDB4MzQsIDB4YzMsIDB4OTQsIDB4MDMsIDB4NDAsIDB4MGMsIDB4OTAsIDB4MDEsIDB4MGMsIDB4ZTAsIDB4NDQsIDB4MDIsCi0weGYwLCAweGEzLCAweGUwLCAweDQ0LCAweDA0LCAweGYwLCAweGU1LCAweDM0LCAweGMzLCAweDk0LCAweDAyLCAweDQwLCAweDEzLCAweDkwLCAweDEyLCAweDA0LAotMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHg3ZiwgMHgzMiwgMHgxMiwgMHgwMywgMHgzMCwgMHg5MCwgMHgwMSwgMHgwZCwgMHhlMCwgMHg1NCwgMHhmZSwgMHhmMCwKLTB4NzUsIDB4NTIsIDB4MDIsIDB4NzUsIDB4NTUsIDB4MDMsIDB4ZTUsIDB4NTksIDB4YjQsIDB4MjgsIDB4MDYsIDB4OTAsIDB4MDEsIDB4MGQsIDB4ZTUsIDB4MzEsCi0weGYwLCAweDkwLCAweDEyLCAweDA0LCAweGUwLCAweDU0LCAweGZiLCAweGYwLCAweDdmLCAweDIwLCAweDEyLCAweDE5LCAweDljLCAweDc1LCAweDUyLCAweDAxLAotMHg3NSwgMHg1NSwgMHgwMywgMHg4MCwgMHg3MywgMHhlNSwgMHg1NCwgMHg3MCwgMHg2ZiwgMHg5MCwgMHgwNCwgMHgwMSwgMHhlMCwgMHg0NCwgMHgwZSwgMHhmMCwKLTB4MjAsIDB4MWEsIDB4MDQsIDB4ZTAsIDB4NTQsIDB4ZWYsIDB4ZjAsIDB4ZTQsIDB4ZjUsIDB4OGMsIDB4OTAsIDB4MTMsIDB4MjgsIDB4ZTAsIDB4NDQsIDB4MGYsCi0weGYwLCAweGEzLCAweGUwLCAweDQ0LCAweDBmLCAweGYwLCAweGEzLCAweGUwLCAweDQ0LCAweDA1LCAweGYwLCAweDkwLCAweDEyLCAweDA0LCAweDc0LCAweDAzLAotMHhmMCwgMHhlNSwgMHg1OCwgMHhiNCwgMHg3MiwgMHgxNiwgMHhlNSwgMHg1OSwgMHhiNCwgMHgzNSwgMHgxMSwgMHg5MCwgMHgwNSwgMHgwMCwgMHg3NCwgMHhlMiwKLTB4ZjAsIDB4YTMsIDB4NzQsIDB4MDgsIDB4ZjAsIDB4YTMsIDB4NzQsIDB4MDEsIDB4ZjAsIDB4NzQsIDB4MDMsIDB4ZjAsIDB4N2YsIDB4MDEsIDB4MTIsIDB4MDMsCi0weDMwLCAweDIwLCAweDFhLCAweDA3LCAweDkwLCAweDAyLCAweDA4LCAweGUwLCAweDQ0LCAweDA1LCAweGYwLCAweDkwLCAweDEwLCAweDA0LCAweGUwLCAweDQ0LAotMHgwYywgMHhmMCwgMHhlNCwgMHhmNSwgMHg1MiwgMHhmNSwgMHg1NSwgMHgzMCwgMHgwMiwgMHgwOSwgMHhjMiwgMHgwMiwgMHg3ZCwgMHgwMSwgMHhhZiwgMHg0MSwKLTB4MTIsIDB4MWMsIDB4MWIsIDB4MzAsIDB4MDMsIDB4MDIsIDB4YzIsIDB4MDMsIDB4ZDIsIDB4YWYsIDB4MjIsIDB4ZWYsIDB4ZjQsIDB4NjAsIDB4MmQsIDB4ZTQsCi0weGZlLCAweDc0LCAweDE0LCAweDJlLCAweGY1LCAweDgyLCAweGU0LCAweDM0LCAweDcwLCAweGY1LCAweDgzLCAweGUwLCAweGI0LCAweGZmLCAweDE5LCAweDc0LAotMHgxNCwgMHgyZSwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHg3MCwgMHhmNSwgMHg4MywgMHhlZiwgMHhmMCwgMHg3NCwgMHgxYywgMHgyZSwgMHhmNSwgMHg4MiwKLTB4ZTQsIDB4MzQsIDB4NzAsIDB4ZjUsIDB4ODMsIDB4ZWQsIDB4ZjAsIDB4MjIsIDB4MGUsIDB4YmUsIDB4MDQsIDB4ZDUsIDB4MjIsIDB4MjIsIDB4MjIsIDB4MzAsCi0weDFhLCAweDc3LCAweDkwLCAweDA0LCAweDM3LCAweGUwLCAweDIwLCAweGU1LCAweDZjLCAweDkwLCAweDA0LCAweDI4LCAweGUwLCAweGY1LCAweDM4LCAweGEzLAotMHhlMCwgMHhmNSwgMHgzNywgMHhmNSwgMHgzOSwgMHhlNCwgMHhmNSwgMHgyNSwgMHhlNSwgMHgzOSwgMHg3NSwgMHhmMCwgMHg4MCwgMHhhNCwgMHgyNCwgMHgwMCwKLTB4ZmYsIDB4ZTUsIDB4ZjAsIDB4MzQsIDB4ODAsIDB4ZmUsIDB4ZTUsIDB4MzcsIDB4NjUsIDB4MzksIDB4NzAsIDB4MDUsIDB4ZmMsIDB4N2QsIDB4MjgsIDB4ODAsCi0weDA0LCAweDdjLCAweDAwLCAweDdkLCAweDAwLCAweGVmLCAweDJkLCAweGZmLCAweGVlLCAweDNjLCAweGZlLCAweDEyLCAweDFjLCAweGNhLCAweDUwLCAweDA3LAotMHg5MCwgMHgwMSwgMHgxNCwgMHhlMCwgMHg0NCwgMHgwMiwgMHhmMCwgMHhlNSwgMHgzOSwgMHg2NSwgMHgzOCwgMHg2MCwgMHgxMCwgMHhlNCwgMHgyNSwgMHgzOSwKLTB4ZmYsIDB4ZTQsIDB4MzQsIDB4ODAsIDB4OGYsIDB4ODIsIDB4ZjUsIDB4ODMsIDB4ZTAsIDB4ZjUsIDB4MzksIDB4ODAsIDB4YmIsIDB4OTAsIDB4MDQsIDB4MTAsCi0weDc0LCAweDAxLCAweGYwLCAweDkwLCAweDA0LCAweDI4LCAweGU1LCAweDM4LCAweGYwLCAweGEzLCAweGU1LCAweDM3LCAweGYwLCAweDkwLCAweDA0LCAweDExLAotMHg3NCwgMHgwMSwgMHhmMCwgMHg4MCwgMHg4ZCwgMHhjMiwgMHgwNiwgMHhkMiwgMHgxYiwgMHgyMiwgMHhlNSwgMHgyNSwgMHhjMywgMHg5NCwgMHgwNiwgMHg1MCwKLTB4MTksIDB4OGYsIDB4ODIsIDB4OGUsIDB4ODMsIDB4ZTAsIDB4YjQsIDB4ZmYsIDB4MDcsIDB4MDUsIDB4MjUsIDB4ZTQsIDB4ZjUsIDB4MjQsIDB4ODAsIDB4MmUsCi0weGU0LCAweGY1LCAweDI1LCAweDhmLCAweDgyLCAweDhlLCAweDgzLCAweGYwLCAweDgwLCAweDI0LCAweGU1LCAweDI0LCAweDc1LCAweGYwLCAweDA2LCAweDg0LAotMHg3NCwgMHgwOCwgMHgyNSwgMHhmMCwgMHhmNSwgMHg4MiwgMHhlNCwgMHgzNCwgMHgxMCwgMHhmNSwgMHg4MywgMHhlMCwgMHhmZCwgMHg4ZiwgMHg4MiwgMHg4ZSwKLTB4ODMsIDB4ZTAsIDB4NmQsIDB4NzAsIDB4MDYsIDB4MDUsIDB4MjUsIDB4MDUsIDB4MjQsIDB4ODAsIDB4MDMsIDB4ZTQsIDB4ZjUsIDB4MjUsIDB4MGYsIDB4YmYsCi0weDAwLCAweDAxLCAweDBlLCAweGVmLCAweDU0LCAweDdmLCAweDYwLCAweDA3LCAweGU1LCAweDI1LCAweGMzLCAweDk0LCAweDJhLCAweDQwLCAweGFiLCAweGU1LAotMHgyNSwgMHhiNCwgMHgyYSwgMHgwMywgMHhkMywgMHg4MCwgMHgwMSwgMHhjMywgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwKLTB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCi0weDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLAotMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMywgMHhlMywgMHgzNCwgfSA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL0tjb25maWcKaW5kZXggZTI0YTZmNy4uMTU1YTc4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvS2NvbmZpZwpAQCAtMyw2ICszLDcgQEAKIAlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOCiAJc2VsZWN0IFdJUkVMRVNTX0VYVAogCXNlbGVjdCBXRVhUX1BSSVYKKwlzZWxlY3QgRUVQUk9NXzkzQ1g2CiAJZGVmYXVsdCBOCiAJLS0taGVscC0tLQogCSAgSWYgYnVpbHQgYXMgYSBtb2R1bGUsIGl0IHdpbGwgYmUgY2FsbGVkIHI4MTg3c2Uua28uCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL01ha2VmaWxlIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9NYWtlZmlsZQppbmRleCBiMzk1YWNmLi5lNmFkZjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvTWFrZWZpbGUKQEAgLTE4LDcgKzE4LDYgQEAKIAogcjgxODdzZS1vYmpzIDo9CQkJXAogCQlyODE4MF9jb3JlLm8JCVwKLQkJcjgxODBfOTNjeDYubwkJXAogCQlyODE4MF93eC5vCQlcCiAJCXI4MTgwX3J0bDgyMjV6Mi5vCVwKIAkJcjgxODViX2luaXQubwkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9UT0RPIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9UT0RPCmluZGV4IGE3NjJlNzkuLjcwNDk0OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvVE9ETworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL1RPRE8KQEAgLTUsNyArNSw2IEBACiAtIHN3aXRjaCB0byB1c2Ugc2hhcmVkICJsaWJydGwiIGluc3RlYWQgb2YgcHJpdmF0ZSBpZWVlODAyMTEgc3RhY2sKIC0gc3dpdGNoIHRvIHVzZSBMSUI4MDIxMQogLSBzd2l0Y2ggdG8gdXNlIE1BQzgwMjExCi0tIHN3aXRjaCB0byB1c2UgRUVQUk9NXzkzQ1g2CiAtIHVzZSBrZXJuZWwgY29kaW5nIHN0eWxlCiAtIGNoZWNrcGF0Y2gucGwgZml4ZXMKIC0gc3BhcnNlIGZpeGVzCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTEuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMS5oCmluZGV4IDBkNDkwYzEuLjRjZDk1YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2llZWU4MDIxMS5oPgogCkBAIC0xNjEsMTAgKzE2Miw2IEBACiAjZGVmaW5lIElFRUU4MDIxMV9ERUJVRyhsZXZlbCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgkvKiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCiAKLSNkZWZpbmUgTUFDX0ZNVCAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiCi0jZGVmaW5lIE1BQ19BUkcoeCkgKCh1OCAqKSh4KSlbMF0sICgodTggKikoeCkpWzFdLCAoKHU4ICopKHgpKVsyXSwgXAotCQkgICAoKHU4ICopKHgpKVszXSwgKCh1OCAqKSh4KSlbNF0sICgodTggKikoeCkpWzVdCi0KIC8qCiAgKiBUbyB1c2UgdGhlIGRlYnVnIHN5c3RlbTsKICAqCkBAIC00ODIsMTUgKzQ3OSw2IEBACiAJdTE2IHNlcV9jdHJsOwogfTsKIAotc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgewotCXUxNiBmcmFtZV9jdGw7Ci0JdTE2IGR1cmF0aW9uX2lkOwotCXU4IGFkZHIxW0VUSF9BTEVOXTsKLQl1OCBhZGRyMltFVEhfQUxFTl07Ci0JdTggYWRkcjNbRVRIX0FMRU5dOwotCXUxNiBzZXFfY3RsOwotfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7Ci0KIHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyIHsKIAl1MTYgZnJhbWVfY3RsOwogCXUxNiBkdXJhdGlvbl9pZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF9jY21wLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jCmluZGV4IDE3MmU4ZjMuLjQwZjFiOTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF9jY21wLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYwpAQCAtMjg1LDcgKzI4NSw3IEBACiAJaWYgKCEoa2V5aWR4ICYgKDEgPDwgNSkpKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJDQ01QOiByZWNlaXZlZCBwYWNrZXQgd2l0aG91dCBFeHRJViIKLQkJCSAgICAgICAiIGZsYWcgZnJvbSAiIE1BQ19GTVQgIlxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkgICAgICAgIiBmbGFnIGZyb20gJXBNXG4iLCBoZHItPmFkZHIyKTsKIAkJfQogCQlrZXktPmRvdDExUlNOQVN0YXRzQ0NNUEZvcm1hdEVycm9ycysrOwogCQlyZXR1cm4gLTI7CkBAIC0yOTgsOSArMjk4LDkgQEAKIAl9CiAJaWYgKCFrZXktPmtleV9zZXQpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIkNDTVA6IHJlY2VpdmVkIHBhY2tldCBmcm9tICIgTUFDX0ZNVAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIkNDTVA6IHJlY2VpdmVkIHBhY2tldCBmcm9tICVwTSIKIAkJCSAgICAgICAiIHdpdGgga2V5aWQ9JWQgdGhhdCBkb2VzIG5vdCBoYXZlIGEgY29uZmlndXJlZCIKLQkJCSAgICAgICAiIGtleVxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSwga2V5aWR4KTsKKwkJCSAgICAgICAiIGtleVxuIiwgaGRyLT5hZGRyMiwga2V5aWR4KTsKIAkJfQogCQlyZXR1cm4gLTM7CiAJfQpAQCAtMzE1LDExICszMTUsOSBAQAogCiAJaWYgKG1lbWNtcChwbiwga2V5LT5yeF9wbiwgQ0NNUF9QTl9MRU4pIDw9IDApIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIkNDTVA6IHJlcGxheSBkZXRlY3RlZDogU1RBPSIgTUFDX0ZNVAotCQkJICAgICAgICIgcHJldmlvdXMgUE4gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKLQkJCSAgICAgICAicmVjZWl2ZWQgUE4gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4XG4iLAotCQkJICAgICAgIE1BQ19BUkcoaGRyLT5hZGRyMiksIE1BQ19BUkcoa2V5LT5yeF9wbiksCi0JCQkgICAgICAgTUFDX0FSRyhwbikpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIkNDTVA6IHJlcGxheSBkZXRlY3RlZDogU1RBPSVwTSIKKwkJCSAgICAgICAiIHByZXZpb3VzIFBOICVwbSByZWNlaXZlZCBQTiAlcG1cbiIsCisJCQkgICAgICAgaGRyLT5hZGRyMiwga2V5LT5yeF9wbiwgcG4pOwogCQl9CiAJCWtleS0+ZG90MTFSU05BU3RhdHNDQ01QUmVwbGF5cysrOwogCQlyZXR1cm4gLTQ7CkBAIC0zNDcsNyArMzQ1LDcgQEAKIAlpZiAobWVtY21wKG1pYywgYSwgQ0NNUF9NSUNfTEVOKSAhPSAwKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJDQ01QOiBkZWNyeXB0IGZhaWxlZDogU1RBPSIKLQkJCSAgICAgICBNQUNfRk1UICJcbiIsIE1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJICAgICAgICIlcE1cbiIsIGhkci0+YWRkcjIpOwogCQl9CiAJCWtleS0+ZG90MTFSU05BU3RhdHNDQ01QRGVjcnlwdEVycm9ycysrOwogCQlyZXR1cm4gLTU7CkBAIC00MjMsMTEgKzQyMSwxMCBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfY2NtcF9kYXRhICpjY21wID0gcHJpdjsKIAlwICs9IHNwcmludGYocCwgImtleVslZF0gYWxnPUNDTVAga2V5X3NldD0lZCAiCi0JCSAgICAgInR4X3BuPSUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiCi0JCSAgICAgInJ4X3BuPSUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCAiCisJCSAgICAgInR4X3BuPSVwbSByeF9wbj0lcG0gIgogCQkgICAgICJmb3JtYXRfZXJyb3JzPSVkIHJlcGxheXM9JWQgZGVjcnlwdF9lcnJvcnM9JWRcbiIsCiAJCSAgICAgY2NtcC0+a2V5X2lkeCwgY2NtcC0+a2V5X3NldCwKLQkJICAgICBNQUNfQVJHKGNjbXAtPnR4X3BuKSwgTUFDX0FSRyhjY21wLT5yeF9wbiksCisJCSAgICAgY2NtcC0+dHhfcG4sIGNjbXAtPnJ4X3BuLAogCQkgICAgIGNjbXAtPmRvdDExUlNOQVN0YXRzQ0NNUEZvcm1hdEVycm9ycywKIAkJICAgICBjY21wLT5kb3QxMVJTTkFTdGF0c0NDTVBSZXBsYXlzLAogCQkgICAgIGNjbXAtPmRvdDExUlNOQVN0YXRzQ0NNUERlY3J5cHRFcnJvcnMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKaW5kZXggZTZkODM4NS4uYTUyNTQxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCkBAIC0zODUsNyArMzg1LDcgQEAKIAlpZiAoIShrZXlpZHggJiAoMSA8PCA1KSkpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVA6IHJlY2VpdmVkIHBhY2tldCB3aXRob3V0IEV4dElWIgotCQkJICAgICAgICIgZmxhZyBmcm9tICIgTUFDX0ZNVCAiXG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCSAgICAgICAiIGZsYWcgZnJvbSAlcE1cbiIsIGhkci0+YWRkcjIpOwogCQl9CiAJCXJldHVybiAtMjsKIAl9CkBAIC0zOTcsOSArMzk3LDkgQEAKIAl9CiAJaWYgKCF0a2V5LT5rZXlfc2V0KSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiByZWNlaXZlZCBwYWNrZXQgZnJvbSAiIE1BQ19GTVQKKwkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiByZWNlaXZlZCBwYWNrZXQgZnJvbSAlcE0iCiAJCQkgICAgICAgIiB3aXRoIGtleWlkPSVkIHRoYXQgZG9lcyBub3QgaGF2ZSBhIGNvbmZpZ3VyZWQiCi0JCQkgICAgICAgIiBrZXlcbiIsIE1BQ19BUkcoaGRyLT5hZGRyMiksIGtleWlkeCk7CisJCQkgICAgICAgIiBrZXlcbiIsIGhkci0+YWRkcjIsIGtleWlkeCk7CiAJCX0KIAkJcmV0dXJuIC0zOwogCX0KQEAgLTQxMCw5ICs0MTAsOSBAQAogCWlmIChpdjMyIDwgdGtleS0+cnhfaXYzMiB8fAogCSAgICAoaXYzMiA9PSB0a2V5LT5yeF9pdjMyICYmIGl2MTYgPD0gdGtleS0+cnhfaXYxNikpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVA6IHJlcGxheSBkZXRlY3RlZDogU1RBPSIgTUFDX0ZNVAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVA6IHJlcGxheSBkZXRlY3RlZDogU1RBPSVwTSIKIAkJCSAgICAgICAiIHByZXZpb3VzIFRTQyAlMDh4JTA0eCByZWNlaXZlZCBUU0MgIgotCQkJICAgICAgICIlMDh4JTA0eFxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSwKKwkJCSAgICAgICAiJTA4eCUwNHhcbiIsIGhkci0+YWRkcjIsCiAJCQkgICAgICAgdGtleS0+cnhfaXYzMiwgdGtleS0+cnhfaXYxNiwgaXYzMiwgaXYxNik7CiAJCX0KIAkJdGtleS0+ZG90MTFSU05BU3RhdHNUS0lQUmVwbGF5cysrOwpAQCAtNDMxLDggKzQzMSw4IEBACiAJaWYgKGNyeXB0b19ibGtjaXBoZXJfZGVjcnlwdCgmZGVzYywgJnNnLCAmc2csIHBsZW4gKyA0KSkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiOiBUS0lQOiBmYWlsZWQgdG8gZGVjcnlwdCAiCi0JCQkgICAgICAgInJlY2VpdmVkIHBhY2tldCBmcm9tICIgTUFDX0ZNVCAiXG4iLAotCQkJICAgICAgIE1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJICAgICAgICJyZWNlaXZlZCBwYWNrZXQgZnJvbSAlcE1cbiIsCisJCQkgICAgICAgaGRyLT5hZGRyMik7CiAJCX0KIAkJcmV0dXJuIC03OwogCX0KQEAgLTQ1MCw3ICs0NTAsNyBAQAogCQl9CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiBJQ1YgZXJyb3IgZGV0ZWN0ZWQ6IFNUQT0iCi0JCQkgICAgICAgTUFDX0ZNVCAiXG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCSAgICAgICAiJXBNXG4iLCBoZHItPmFkZHIyKTsKIAkJfQogCQl0a2V5LT5kb3QxMVJTTkFTdGF0c1RLSVBJQ1ZFcnJvcnMrKzsKIAkJcmV0dXJuIC01OwpAQCAtNjA0LDggKzYwNCw4IEBACiAJCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CiAJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKXNrYi0+ZGF0YTsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBNaWNoYWVsIE1JQyB2ZXJpZmljYXRpb24gZmFpbGVkIGZvciAiCi0JCSAgICAgICAiTVNEVSBmcm9tICIgTUFDX0ZNVCAiIGtleWlkeD0lZFxuIiwKLQkJICAgICAgIHNrYi0+ZGV2ID8gc2tiLT5kZXYtPm5hbWUgOiAiTi9BIiwgTUFDX0FSRyhoZHItPmFkZHIyKSwKKwkJICAgICAgICJNU0RVIGZyb20gJXBNIGtleWlkeD0lZFxuIiwKKwkJICAgICAgIHNrYi0+ZGV2ID8gc2tiLT5kZXYtPm5hbWUgOiAiTi9BIiwgaGRyLT5hZGRyMiwKIAkJICAgICAgIGtleWlkeCk7CiAJCWlmIChza2ItPmRldikKIAkJCWllZWU4MDIxMV9taWNoYWVsX21pY19mYWlsdXJlKHNrYi0+ZGV2LCBoZHIsIGtleWlkeCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCmluZGV4IDkxMjhjMTguLjJiNzA4MGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCkBAIC0zMTEsOCArMzExLDggQEAKIAkgICAgc3RyY21wKGNyeXB0LT5vcHMtPm5hbWUsICJUS0lQIikgPT0gMCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRLSVAgY291bnRlcm1lYXN1cmVzOiBkcm9wcGVkICIKLQkJCSAgICAgICAicmVjZWl2ZWQgcGFja2V0IGZyb20gIiBNQUNfRk1UICJcbiIsCi0JCQkgICAgICAgaWVlZS0+ZGV2LT5uYW1lLCBNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCSAgICAgICAicmVjZWl2ZWQgcGFja2V0IGZyb20gJXBNXG4iLAorCQkJICAgICAgIGllZWUtPmRldi0+bmFtZSwgaGRyLT5hZGRyMik7CiAJCX0KIAkJcmV0dXJuIC0xOwogCX0KQEAgLTMyMyw4ICszMjMsOCBAQAogCWF0b21pY19kZWMoJmNyeXB0LT5yZWZjbnQpOwogCWlmIChyZXMgPCAwKSB7CiAJCUlFRUU4MDIxMV9ERUJVR19EUk9QKAotCQkJImRlY3J5cHRpb24gZmFpbGVkIChTQT0iIE1BQ19GTVQKLQkJCSIpIHJlcz0lZFxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSwgcmVzKTsKKwkJCSJkZWNyeXB0aW9uIGZhaWxlZCAoU0E9JXBNIgorCQkJIikgcmVzPSVkXG4iLCBoZHItPmFkZHIyLCByZXMpOwogCQlpZiAocmVzID09IC0yKQogCQkJSUVFRTgwMjExX0RFQlVHX0RST1AoIkRlY3J5cHRpb24gZmFpbGVkIElDViAiCiAJCQkJCSAgICAgIm1pc21hdGNoIChrZXkgJWQpXG4iLApAQCAtMzU2LDggKzM1Niw4IEBACiAJYXRvbWljX2RlYygmY3J5cHQtPnJlZmNudCk7CiAJaWYgKHJlcyA8IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBNU0RVIGRlY3J5cHRpb24vTUlDIHZlcmlmaWNhdGlvbiBmYWlsZWQiCi0JCSAgICAgICAiIChTQT0iIE1BQ19GTVQgIiBrZXlpZHg9JWQpXG4iLAotCQkgICAgICAgaWVlZS0+ZGV2LT5uYW1lLCBNQUNfQVJHKGhkci0+YWRkcjIpLCBrZXlpZHgpOworCQkgICAgICAgIiAoU0E9JXBNIGtleWlkeD0lZClcbiIsCisJCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIGhkci0+YWRkcjIsIGtleWlkeCk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTU1MCw4ICs1NTAsOCBAQAogCQkJICogZnJhbWVzIHNpbGVudGx5IGluc3RlYWQgb2YgZmlsbGluZyBzeXN0ZW0gbG9nIHdpdGgKIAkJCSAqIHRoZXNlIHJlcG9ydHMuICovCiAJCQlJRUVFODAyMTFfREVCVUdfRFJPUCgiRGVjcnlwdGlvbiBmYWlsZWQgKG5vdCBzZXQpIgotCQkJCQkgICAgICIgKFNBPSIgTUFDX0ZNVCAiKVxuIiwKLQkJCQkJICAgICBNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCQkJICAgICAiIChTQT0lcE0pXG4iLAorCQkJCQkgICAgIGhkci0+YWRkcjIpOwogCQkJaWVlZS0+aWVlZV9zdGF0cy5yeF9kaXNjYXJkc191bmRlY3J5cHRhYmxlKys7CiAJCQlnb3RvIHJ4X2Ryb3BwZWQ7CiAJCX0KQEAgLTcwOSw4ICs3MDksOCBAQAogCQl9IGVsc2UgewogCQkJSUVFRTgwMjExX0RFQlVHX0RST1AoCiAJCQkJImVuY3J5cHRpb24gY29uZmlndXJlZCwgYnV0IFJYICIKLQkJCQkiZnJhbWUgbm90IGVuY3J5cHRlZCAoU0E9IiBNQUNfRk1UICIpXG4iLAotCQkJCU1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJCSJmcmFtZSBub3QgZW5jcnlwdGVkIChTQT0lcE0pXG4iLAorCQkJCWhkci0+YWRkcjIpOwogCQkJZ290byByeF9kcm9wcGVkOwogCQl9CiAJfQpAQCAtNzI5LDkgKzcyOSw5IEBACiAJICAgICFpZWVlODAyMTFfaXNfZWFwb2xfZnJhbWUoaWVlZSwgc2tiLCBoZHJsZW4pKSB7CiAJCUlFRUU4MDIxMV9ERUJVR19EUk9QKAogCQkJImRyb3BwZWQgdW5lbmNyeXB0ZWQgUlggZGF0YSAiCi0JCQkiZnJhbWUgZnJvbSAiIE1BQ19GTVQKKwkJCSJmcmFtZSBmcm9tICVwTSIKIAkJCSIgKGRyb3BfdW5lbmNyeXB0ZWQ9MSlcbiIsCi0JCQlNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCWhkci0+YWRkcjIpOwogCQlnb3RvIHJ4X2Ryb3BwZWQ7CiAJfQogLyoKQEAgLTExOTYsMTEgKzExOTYsMTEgQEAKIAl9CiAKIAlpZiAobmV0d29yay0+bW9kZSA9PSAwKSB7Ci0JCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJGaWx0ZXJlZCBvdXQgJyVzICgiIE1BQ19GTVQgIiknICIKKwkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkZpbHRlcmVkIG91dCAnJXMgKCVwTSknICIKIAkJCQkgICAgICJuZXR3b3JrLlxuIiwKIAkJCQkgICAgIGVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLAogCQkJCQkJICBuZXR3b3JrLT5zc2lkX2xlbiksCi0JCQkJICAgICBNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSk7CisJCQkJICAgICBuZXR3b3JrLT5ic3NpZCk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMTM0MSw5ICsxMzQxLDkgQEAKIAltZW1zZXQoJm5ldHdvcmssIDAsIHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmspKTsKIAogCUlFRUU4MDIxMV9ERUJVR19TQ0FOKAotCQkiJyVzJyAoIiBNQUNfRk1UICIpOiAlYyVjJWMlYyAlYyVjJWMlYy0lYyVjJWMlYyAlYyVjJWMlY1xuIiwKKwkJIiclcycgKCVwTSk6ICVjJWMlYyVjICVjJWMlYyVjLSVjJWMlYyVjICVjJWMlYyVjXG4iLAogCQllc2NhcGVfZXNzaWQoaW5mb19lbGVtZW50LT5kYXRhLCBpbmZvX2VsZW1lbnQtPmxlbiksCi0JCU1BQ19BUkcoYmVhY29uLT5oZWFkZXIuYWRkcjMpLAorCQliZWFjb24tPmhlYWRlci5hZGRyMywKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweGYpKSA/ICcxJyA6ICcwJywKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweGUpKSA/ICcxJyA6ICcwJywKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweGQpKSA/ICcxJyA6ICcwJywKQEAgLTEzNjIsMTAgKzEzNjIsMTAgQEAKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweDApKSA/ICcxJyA6ICcwJyk7CiAKIAlpZiAoaWVlZTgwMjExX25ldHdvcmtfaW5pdChpZWVlLCBiZWFjb24sICZuZXR3b3JrLCBzdGF0cykpIHsKLQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkRyb3BwZWQgJyVzJyAoIiBNQUNfRk1UICIpIHZpYSAlcy5cbiIsCisJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJEcm9wcGVkICclcycgKCVwTSkgdmlhICVzLlxuIiwKIAkJCQkgICAgIGVzY2FwZV9lc3NpZChpbmZvX2VsZW1lbnQtPmRhdGEsCiAJCQkJCQkgIGluZm9fZWxlbWVudC0+bGVuKSwKLQkJCQkgICAgIE1BQ19BUkcoYmVhY29uLT5oZWFkZXIuYWRkcjMpLAorCQkJCSAgICAgYmVhY29uLT5oZWFkZXIuYWRkcjMsCiAJCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShiZWFjb24tPmhlYWRlci5mcmFtZV9jdGwpID09CiAJCQkJICAgICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCA/CiAJCQkJICAgICAiUFJPQkUgUkVTUE9OU0UiIDogIkJFQUNPTiIpOwpAQCAtMTQ2NCwxMSArMTQ2NCwxMSBAQAogCQkJLyogSWYgdGhlcmUgYXJlIG5vIG1vcmUgc2xvdHMsIGV4cGlyZSB0aGUgb2xkZXN0ICovCiAJCQlsaXN0X2RlbCgmb2xkZXN0LT5saXN0KTsKIAkJCXRhcmdldCA9IG9sZGVzdDsKLQkJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJFeHBpcmVkICclcycgKCIgTUFDX0ZNVCAiKSBmcm9tICIKKwkJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJFeHBpcmVkICclcycgKCVwTSkgZnJvbSAiCiAJCQkJCSAgICAgIm5ldHdvcmsgbGlzdC5cbiIsCiAJCQkJCSAgICAgZXNjYXBlX2Vzc2lkKHRhcmdldC0+c3NpZCwKIAkJCQkJCQkgIHRhcmdldC0+c3NpZF9sZW4pLAotCQkJCQkgICAgIE1BQ19BUkcodGFyZ2V0LT5ic3NpZCkpOworCQkJCQkgICAgIHRhcmdldC0+YnNzaWQpOwogCQl9IGVsc2UgewogCQkJLyogT3RoZXJ3aXNlIGp1c3QgcHVsbCBmcm9tIHRoZSBmcmVlIGxpc3QgKi8KIAkJCXRhcmdldCA9IGxpc3RfZW50cnkoaWVlZS0+bmV0d29ya19mcmVlX2xpc3QubmV4dCwKQEAgLTE0NzgsMTAgKzE0NzgsMTAgQEAKIAogCiAjaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRwotCQlJRUVFODAyMTFfREVCVUdfU0NBTigiQWRkaW5nICclcycgKCIgTUFDX0ZNVCAiKSB2aWEgJXMuXG4iLAorCQlJRUVFODAyMTFfREVCVUdfU0NBTigiQWRkaW5nICclcycgKCVwTSkgdmlhICVzLlxuIiwKIAkJCQkgICAgIGVzY2FwZV9lc3NpZChuZXR3b3JrLnNzaWQsCiAJCQkJCQkgIG5ldHdvcmsuc3NpZF9sZW4pLAotCQkJCSAgICAgTUFDX0FSRyhuZXR3b3JrLmJzc2lkKSwKKwkJCQkgICAgIG5ldHdvcmsuYnNzaWQsCiAJCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShiZWFjb24tPmhlYWRlci5mcmFtZV9jdGwpID09CiAJCQkJICAgICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCA/CiAJCQkJICAgICAiUFJPQkUgUkVTUE9OU0UiIDogIkJFQUNPTiIpOwpAQCAtMTQ5MiwxMCArMTQ5MiwxMCBAQAogCQlpZihpZWVlLT5zb2Z0bWFjX2ZlYXR1cmVzICYgSUVFRV9TT0ZUTUFDX0FTU09DSUFURSkKIAkJCWllZWU4MDIxMV9zb2Z0bWFjX25ld19uZXQoaWVlZSwmbmV0d29yayk7CiAJfSBlbHNlIHsKLQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIlVwZGF0aW5nICclcycgKCIgTUFDX0ZNVCAiKSB2aWEgJXMuXG4iLAorCQlJRUVFODAyMTFfREVCVUdfU0NBTigiVXBkYXRpbmcgJyVzJyAoJXBNKSB2aWEgJXMuXG4iLAogCQkJCSAgICAgZXNjYXBlX2Vzc2lkKHRhcmdldC0+c3NpZCwKIAkJCQkJCSAgdGFyZ2V0LT5zc2lkX2xlbiksCi0JCQkJICAgICBNQUNfQVJHKHRhcmdldC0+YnNzaWQpLAorCQkJCSAgICAgdGFyZ2V0LT5ic3NpZCwKIAkJCQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGJlYWNvbi0+aGVhZGVyLmZyYW1lX2N0bCkgPT0KIAkJCQkgICAgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQID8KIAkJCQkgICAgICJQUk9CRSBSRVNQT05TRSIgOiAiQkVBQ09OIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwppbmRleCBjN2M2NDVhLi5jMmY0NzJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKQEAgLTIwMyw3ICsyMDMsNyBAQAogCiAJCQllbnF1ZXVlX21nbXQoaWVlZSxza2IpOwogCQl9ZWxzZXsKLQkJCWhlYWRlci0+c2VxX2N0bCA9IGNwdV90b19sZTE2KGllZWUtPnNlcV9jdHJsWzBdPDw0KTsKKwkJCWhlYWRlci0+c2VxX2N0cmwgPSBjcHVfdG9fbGUxNihpZWVlLT5zZXFfY3RybFswXTw8NCk7CiAKIAkJCWlmIChpZWVlLT5zZXFfY3RybFswXSA9PSAweEZGRikKIAkJCQlpZWVlLT5zZXFfY3RybFswXSA9IDA7CkBAIC0yMjAsNyArMjIwLDcgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bG9jaywgZmxhZ3MpOwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmaWVlZS0+bWdtdF90eF9sb2NrLCBmbGFncyk7CiAKLQkJaGVhZGVyLT5zZXFfY3RsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF0gPDwgNCk7CisJCWhlYWRlci0+c2VxX2N0cmwgPSBjcHVfdG9fbGUxNihpZWVlLT5zZXFfY3RybFswXSA8PCA0KTsKIAogCQlpZiAoaWVlZS0+c2VxX2N0cmxbMF0gPT0gMHhGRkYpCiAJCQlpZWVlLT5zZXFfY3RybFswXSA9IDA7CkBAIC0yNDYsNyArMjQ2LDcgQEAKIAogCWlmKHNpbmdsZSl7CiAKLQkJaGVhZGVyLT5zZXFfY3RsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF0gPDwgNCk7CisJCWhlYWRlci0+c2VxX2N0cmwgPSBjcHVfdG9fbGUxNihpZWVlLT5zZXFfY3RybFswXSA8PCA0KTsKIAogCQlpZiAoaWVlZS0+c2VxX2N0cmxbMF0gPT0gMHhGRkYpCiAJCQlpZWVlLT5zZXFfY3RybFswXSA9IDA7CkBAIC0yNTksNyArMjU5LDcgQEAKIAogCX1lbHNlewogCi0JCWhlYWRlci0+c2VxX2N0bCA9IGNwdV90b19sZTE2KGllZWUtPnNlcV9jdHJsWzBdIDw8IDQpOworCQloZWFkZXItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF0gPDwgNCk7CiAKIAkJaWYgKGllZWUtPnNlcV9jdHJsWzBdID09IDB4RkZGKQogCQkJaWVlZS0+c2VxX2N0cmxbMF0gPSAwOwpAQCAtMjg3LDcgKzI4Nyw3IEBACiAJCXJldHVybiBOVUxMOwogCiAJZGlzYXNzID0gKHN0cnVjdCBpZWVlODAyMTFfZGlzYXNzb2NfZnJhbWUgKikgc2tiX3B1dChza2Isc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfZGlzYXNzb2NfZnJhbWUpKTsKLQlkaXNhc3MtPmhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfRElTQVNTT0MpOworCWRpc2Fzcy0+aGVhZGVyLmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfRElTQVNTT0MpOwogCWRpc2Fzcy0+aGVhZGVyLmR1cmF0aW9uX2lkID0gMDsKIAogCW1lbWNweShkaXNhc3MtPmhlYWRlci5hZGRyMSwgYmVhY29uLT5ic3NpZCwgRVRIX0FMRU4pOwpAQCAtOTA1LDcgKzkwNSw3IEBACiAJYXNzb2MgPSAoc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXNwb25zZV9mcmFtZSAqKQogCQlza2JfcHV0KHNrYixzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXNwb25zZV9mcmFtZSkpOwogCi0JYXNzb2MtPmhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUCk7CisJYXNzb2MtPmhlYWRlci5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1ApOwogCW1lbWNweShhc3NvYy0+aGVhZGVyLmFkZHIxLCBkZXN0LEVUSF9BTEVOKTsKIAltZW1jcHkoYXNzb2MtPmhlYWRlci5hZGRyMywgaWVlZS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShhc3NvYy0+aGVhZGVyLmFkZHIyLCBpZWVlLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CkBAIC05ODEsNyArOTgxLDcgQEAKIAltZW1jcHkoaGRyLT5hZGRyMiwgaWVlZS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShoZHItPmFkZHIzLCBpZWVlLT5jdXJyZW50X25ldHdvcmsuYnNzaWQsIEVUSF9BTEVOKTsKIAotCWhkci0+ZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfAorCWhkci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9EQVRBIHwKIAkJSUVFRTgwMjExX1NUWVBFX05VTExGVU5DIHwgSUVFRTgwMjExX0ZDVExfVE9EUyB8CiAJCShwd3IgPyBJRUVFODAyMTFfRkNUTF9QTTowKSk7CiAKQEAgLTEwODQsNyArMTA4NCw3IEBACiAJCXNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXF1ZXN0X2ZyYW1lKSk7CiAKIAotCWhkci0+aGVhZGVyLmZyYW1lX2N0bCA9IElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVE7CisJaGRyLT5oZWFkZXIuZnJhbWVfY29udHJvbCA9IElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVE7CiAJaGRyLT5oZWFkZXIuZHVyYXRpb25faWQ9IDM3OyAvL0ZJWE1FCiAJbWVtY3B5KGhkci0+aGVhZGVyLmFkZHIxLCBiZWFjb24tPmJzc2lkLCBFVEhfQUxFTik7CiAJbWVtY3B5KGhkci0+aGVhZGVyLmFkZHIyLCBpZWVlLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CkBAIC0xNTczLDcgKzE1NzMsNyBAQAogCQlpZWVlODAyMTFfcmVzcF90b19hc3NvY19ycShpZWVlLCBkZXN0KTsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPIk5ldyBjbGllbnQgYXNzb2NpYXRlZDogIk1BQ19GTVQiXG4iLCBNQUNfQVJHKGRlc3QpKTsKKwlwcmludGsoS0VSTl9JTkZPIk5ldyBjbGllbnQgYXNzb2NpYXRlZDogJXBNXG4iLCBkZXN0KTsKIH0KIAogCkBAIC0xNzg2LDExICsxNzg2LDExIEBACiAKIAkJdGFza2xldF9zY2hlZHVsZSgmaWVlZS0+cHNfdGFzayk7CiAKLQlpZihXTEFOX0ZDX0dFVF9TVFlQRShoZWFkZXItPmZyYW1lX2N0bCkgIT0gSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1AgJiYKLQkJV0xBTl9GQ19HRVRfU1RZUEUoaGVhZGVyLT5mcmFtZV9jdGwpICE9IElFRUU4MDIxMV9TVFlQRV9CRUFDT04pCisJaWYgKFdMQU5fRkNfR0VUX1NUWVBFKGhlYWRlci0+ZnJhbWVfY29udHJvbCkgIT0gSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1AgJiYKKwkJV0xBTl9GQ19HRVRfU1RZUEUoaGVhZGVyLT5mcmFtZV9jb250cm9sKSAhPSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKQogCQlpZWVlLT5sYXN0X3J4X3BzX3RpbWUgPSBqaWZmaWVzOwogCi0Jc3dpdGNoIChXTEFOX0ZDX0dFVF9TVFlQRShoZWFkZXItPmZyYW1lX2N0bCkpIHsKKwlzd2l0Y2ggKFdMQU5fRkNfR0VUX1NUWVBFKGhlYWRlci0+ZnJhbWVfY29udHJvbCkpIHsKIAogCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgogCQljYXNlIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1A6CkBAIC0yMDY0LDcgKzIwNjQsNyBAQAogCiAJCQloZWFkZXIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgICopIHNrYi0+ZGF0YTsKIAotCQkJaGVhZGVyLT5zZXFfY3RsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF0gPDwgNCk7CisJCQloZWFkZXItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF0gPDwgNCk7CiAKIAkJCWlmIChpZWVlLT5zZXFfY3RybFswXSA9PSAweEZGRikKIAkJCQlpZWVlLT5zZXFfY3RybFswXSA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hY193eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWNfd3guYwppbmRleCBmMWQ2Y2I0Li5hZDQyYmNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hY193eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjX3d4LmMKQEAgLTQ4Miw4ICs0ODIsNyBAQAogCQkoIWllZWUtPmVudGVyX3NsZWVwX3N0YXRlKSB8fAogCQkoIWllZWUtPnBzX2lzX3F1ZXVlX2VtcHR5KSl7CiAKLQkJcHJpbnRrKCJFUlJPUi4gUFMgbW9kZSBpcyB0cnlpZWQgdG8gYmUgdXNlIGJ1dFwKLWRyaXZlciBtaXNzZWQgYSBjYWxsYmFja1xuXG4iKTsKKwkJcHJpbnRrKCJFUlJPUi4gUFMgbW9kZSB0cmllZCB0byBiZSB1c2UgYnV0IGRyaXZlciBtaXNzZWQgYSBjYWxsYmFja1xuXG4iKTsKIAogCQlyZXR1cm4gLTE7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwppbmRleCA2OWJkMDIxLi42Y2IzMWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwpAQCAtMTk4LDggKzE5OCw4IEBACiAJCWhlYWRlciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKWZyYWctPmRhdGE7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVEtJUCBjb3VudGVybWVhc3VyZXM6IGRyb3BwZWQgIgotCQkJICAgICAgICJUWCBwYWNrZXQgdG8gIiBNQUNfRk1UICJcbiIsCi0JCQkgICAgICAgaWVlZS0+ZGV2LT5uYW1lLCBNQUNfQVJHKGhlYWRlci0+YWRkcjEpKTsKKwkJCSAgICAgICAiVFggcGFja2V0IHRvICVwTVxuIiwKKwkJCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIGhlYWRlci0+YWRkcjEpOwogCQl9CiAJCXJldHVybiAtMTsKIAl9CkBAIC00MDcsNyArNDA3LDcgQEAKIAkJCW1lbWNweSgmaGVhZGVyLmFkZHIyLCBzcmMsIEVUSF9BTEVOKTsKIAkJCW1lbWNweSgmaGVhZGVyLmFkZHIzLCBpZWVlLT5jdXJyZW50X25ldHdvcmsuYnNzaWQsIEVUSF9BTEVOKTsKIAkJfQotCS8vCXByaW50ayhLRVJOX1dBUk5JTkcgImVzc2lkIE1BQyBhZGRyZXNzIGlzICJNQUNfRk1ULCBNQUNfQVJHKCZoZWFkZXIuYWRkcjEpKTsKKwkvLwlwcmludGsoS0VSTl9XQVJOSU5HICJlc3NpZCBNQUMgYWRkcmVzcyBpcyAlcE0iLCAmaGVhZGVyLmFkZHIxKTsKIAkJaGVhZGVyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KGZjKTsKIAkJLy9oZHJfbGVuID0gSUVFRTgwMjExXzNBRERSX0xFTjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwppbmRleCA2YWFkNDhmLi5iZDVlNzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwpAQCAtMjM0LDEwICsyMzQsMTAgQEAKIAkJCWVsc2UKIAkJCQlJRUVFODAyMTFfREVCVUdfU0NBTigKIAkJCQkJIk5vdCBzaG93aW5nIG5ldHdvcmsgJyVzICgiCi0JCQkJCU1BQ19GTVQgIiknIGR1ZSB0byBhZ2UgKCVsdW1zKS5cbiIsCisJCQkJCSIlcE0pJyBkdWUgdG8gYWdlICglbHVtcykuXG4iLAogCQkJCQllc2NhcGVfZXNzaWQobmV0d29yay0+c3NpZCwKIAkJCQkJCSAgICAgbmV0d29yay0+c3NpZF9sZW4pLAotCQkJCQlNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSwKKwkJCQkJbmV0d29yay0+YnNzaWQsCiAJCQkJCShqaWZmaWVzIC0gbmV0d29yay0+bGFzdF9zY2FubmVkKSAvIChIWiAvIDEwMCkpOwogCQl9CiAJfQpAQCAtNjk0LDcgKzY5NCw3IEBACiAjaWYgMQogCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKIAkJaWVlZS0+d3BhX2VuYWJsZWQgPSAoZGF0YS0+dmFsdWUpPzE6MDsKLQkJLy9wcmludGsoImVuYWxiZSB3cGE6JWRcbiIsIGllZWUtPndwYV9lbmFibGVkKTsKKwkJLy9wcmludGsoImVuYWJsZSB3cGE6JWRcbiIsIGllZWUtPndwYV9lbmFibGVkKTsKIAkJYnJlYWs7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MC5oCmluZGV4IGNlODI4ODguLmQxNWJkZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODAuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwLmgKQEAgLTM2Niw3ICszNjYsNiBAQAogCXNob3J0IGRpdmVyc2l0eTsKIAl1OCBjc190cmVzaG9sZDsKIAlzaG9ydCByY3JfY3NlbnNlOwotCXNob3J0IHJmX2NoaXA7CiAJdTMyIGtleTBbNF07CiAJc2hvcnQgKCpyZl9zZXRfc2Vucykoc3RydWN0IG5ldF9kZXZpY2UgKmRldixzaG9ydCBzZW5zKTsKIAl2b2lkICgqcmZfc2V0X2NoYW4pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsc2hvcnQgY2gpOwpAQCAtNDc5LDkgKzQ3OCw2IEBACiAJdTggcmV0cnlfcnRzOwogCXUxNiBydHM7CiAKLS8vYWRkIGZvciBSRiBwb3dlciBvbiBwb3dlciBvZmYgYnkgbGl6aGFvbWluZyAwODA1MTIKLQl1OAkgUmVnVGhyZWVXaXJlTW9kZTsgLy8gU2VlICJUaHJlZSB3aXJlIG1vZGUiIGRlZmluZWQgYWJvdmUsIDIwMDYuMDUuMzEsIGJ5IHJjbmprby4KLQogLy9ieSBhbXkgZm9yIGxlZAogCUxFRF9TVFJBVEVHWV84MTg1IExlZFN0cmF0ZWd5OwogLy9ieSBhbXkgZm9yIGxlZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF85M2N4Ni5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF85M2N4Ni5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTQ3MTFmLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfOTNjeDYuYworKysgL2Rldi9udWxsCkBAIC0xLDE0NiArMCwwIEBACi0vKgotICAgVGhpcyBmaWxlcyBjb250YWlucyBjYXJkIGVlcHJvbSAoOTNjNDYgb3IgOTNjNTYpIHByb2dyYW1taW5nIHJvdXRpbmVzLAotICAgbWVtb3J5IGlzIGFkZHJlc3NlZCBieSAxNiBiaXRzIHdvcmRzLgotCi0gICBUaGlzIGlzIHBhcnQgb2YgcnRsODE4MCBPcGVuU291cmNlIGRyaXZlci4KLSAgIENvcHlyaWdodCAoQykgQW5kcmVhIE1lcmVsbG8gMjAwNCAgPGFuZHJlYW1ybEB0aXNjYWxpLml0PgotICAgUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEdQTCAoR2VuZXJhbCBQdWJsaWMgTGljZW5jZSkKLQotICAgUGFydHMgb2YgdGhpcyBkcml2ZXIgYXJlIGJhc2VkIG9uIHRoZSBHUEwgcGFydCBvZiB0aGUKLSAgIG9mZmljaWFsIHJlYWx0ZWsgZHJpdmVyLgotCi0gICBQYXJ0cyBvZiB0aGlzIGRyaXZlciBhcmUgYmFzZWQgb24gdGhlIHJ0bDgxODAgZHJpdmVyIHNrZWxldG9uCi0gICBmcm9tIFBhdHJpYyBTY2hlbmtlICYgQW5kcmVzIFNhbG9tb24uCi0KLSAgIFBhcnRzIG9mIHRoaXMgZHJpdmVyIGFyZSBiYXNlZCBvbiB0aGUgSW50ZWwgUHJvIFdpcmVsZXNzIDIxMDAgR1BMIGRyaXZlci4KLQotICAgV2Ugd2FudCB0byB0YW5rcyB0aGUgQXV0aG9ycyBvZiB0aG9zZSBwcm9qZWN0cyBhbmQgdGhlIE5kaXN3cmFwcGVyCi0gICBwcm9qZWN0IEF1dGhvcnMuCi0qLwotCi0jaW5jbHVkZSAicjgxODBfOTNjeDYuaCIKLQotdm9pZCBlcHJvbV9jcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzaG9ydCBiaXQpCi17Ci0JaWYoYml0KQotCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCwKLQkJCSAgICAgICAoMTw8RVBST01fQ1NfU0hJRlQpIHwgXAotCQkJICAgICAgIHJlYWRfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQpKTsgLy9lbmFibGUgRVBST00KLQllbHNlCi0JCXdyaXRlX25pY19ieXRlKGRldiwgRVBST01fQ01ELCByZWFkX25pY19ieXRlKGRldiwgRVBST01fQ01EKVwKLQkJCSAgICAgICAmfigxPDxFUFJPTV9DU19TSElGVCkpOyAvL2Rpc2FibGUgRVBST00KLQotCWZvcmNlX3BjaV9wb3N0aW5nKGRldik7Ci0JdWRlbGF5KEVQUk9NX0RFTEFZKTsKLX0KLQotCi12b2lkIGVwcm9tX2NrX2N5Y2xlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCi17Ci0Jd3JpdGVfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQsCi0JCSAgICAgICAoMTw8RVBST01fQ0tfU0hJRlQpIHwgcmVhZF9uaWNfYnl0ZShkZXYsRVBST01fQ01EKSk7Ci0JZm9yY2VfcGNpX3Bvc3RpbmcoZGV2KTsKLQl1ZGVsYXkoRVBST01fREVMQVkpOwotCXdyaXRlX25pY19ieXRlKGRldiwgRVBST01fQ01ELAotCQkgICAgICAgcmVhZF9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCkgJn4gKDE8PEVQUk9NX0NLX1NISUZUKSk7Ci0JZm9yY2VfcGNpX3Bvc3RpbmcoZGV2KTsKLQl1ZGVsYXkoRVBST01fREVMQVkpOwotfQotCi0KLXZvaWQgZXByb21fdyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LHNob3J0IGJpdCkKLXsKLQlpZihiaXQpCi0JCXdyaXRlX25pY19ieXRlKGRldiwgRVBST01fQ01ELCAoMTw8RVBST01fV19TSElGVCkgfCBcCi0JCQkgICAgICAgcmVhZF9uaWNfYnl0ZShkZXYsRVBST01fQ01EKSk7Ci0JZWxzZQotCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCwgcmVhZF9uaWNfYnl0ZShkZXYsRVBST01fQ01EKVwKLQkJCSAgICAgICAmfigxPDxFUFJPTV9XX1NISUZUKSk7Ci0KLQlmb3JjZV9wY2lfcG9zdGluZyhkZXYpOwotCXVkZWxheShFUFJPTV9ERUxBWSk7Ci19Ci0KLQotc2hvcnQgZXByb21fcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQotewotCXNob3J0IGJpdDsKLQotCWJpdD0ocmVhZF9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCkgJiAoMTw8RVBST01fUl9TSElGVCkgKTsKLQl1ZGVsYXkoRVBST01fREVMQVkpOwotCi0JaWYoYml0KSByZXR1cm4gMTsKLQlyZXR1cm4gMDsKLX0KLQotCi12b2lkIGVwcm9tX3NlbmRfYml0c19zdHJpbmcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc2hvcnQgYltdLCBpbnQgbGVuKQotewotCWludCBpOwotCi0JZm9yKGk9MDsgaTxsZW47IGkrKyl7Ci0JCWVwcm9tX3coZGV2LCBiW2ldKTsKLQkJZXByb21fY2tfY3ljbGUoZGV2KTsKLQl9Ci19Ci0KLQotdTMyIGVwcm9tX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGFkZHIpCi17Ci0Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXNob3J0IHJlYWRfY21kW109ezEsMSwwfTsKLQlzaG9ydCBhZGRyX3N0cls4XTsKLQlpbnQgaTsKLQlpbnQgYWRkcl9sZW47Ci0JdTMyIHJldDsKLQotCXJldD0wOwotICAgICAgICAvL2VuYWJsZSBFUFJPTSBwcm9ncmFtbWluZwotCXdyaXRlX25pY19ieXRlKGRldiwgRVBST01fQ01ELAotCQkgICAgICAgKEVQUk9NX0NNRF9QUk9HUkFNPDxFUFJPTV9DTURfT1BFUkFUSU5HX01PREVfU0hJRlQpKTsKLQlmb3JjZV9wY2lfcG9zdGluZyhkZXYpOwotCXVkZWxheShFUFJPTV9ERUxBWSk7Ci0KLQlpZiAocHJpdi0+ZXByb210eXBlPT1FUFJPTV85M2M1Nil7Ci0JCWFkZHJfc3RyWzddPWFkZHIgJiAxOwotCQlhZGRyX3N0cls2XT1hZGRyICYgKDE8PDEpOwotCQlhZGRyX3N0cls1XT1hZGRyICYgKDE8PDIpOwotCQlhZGRyX3N0cls0XT1hZGRyICYgKDE8PDMpOwotCQlhZGRyX3N0clszXT1hZGRyICYgKDE8PDQpOwotCQlhZGRyX3N0clsyXT1hZGRyICYgKDE8PDUpOwotCQlhZGRyX3N0clsxXT1hZGRyICYgKDE8PDYpOwotCQlhZGRyX3N0clswXT1hZGRyICYgKDE8PDcpOwotCQlhZGRyX2xlbj04OwotCX1lbHNlewotCQlhZGRyX3N0cls1XT1hZGRyICYgMTsKLQkJYWRkcl9zdHJbNF09YWRkciAmICgxPDwxKTsKLQkJYWRkcl9zdHJbM109YWRkciAmICgxPDwyKTsKLQkJYWRkcl9zdHJbMl09YWRkciAmICgxPDwzKTsKLQkJYWRkcl9zdHJbMV09YWRkciAmICgxPDw0KTsKLQkJYWRkcl9zdHJbMF09YWRkciAmICgxPDw1KTsKLQkJYWRkcl9sZW49NjsKLQl9Ci0JZXByb21fY3MoZGV2LCAxKTsKLQllcHJvbV9ja19jeWNsZShkZXYpOwotCWVwcm9tX3NlbmRfYml0c19zdHJpbmcoZGV2LCByZWFkX2NtZCwgMyk7Ci0JZXByb21fc2VuZF9iaXRzX3N0cmluZyhkZXYsIGFkZHJfc3RyLCBhZGRyX2xlbik7Ci0KLQkvL2tlZXAgY2hpcCBwaW4gRCB0byBsb3cgc3RhdGUgd2hpbGUgcmVhZGluZy4KLQkvL0knbSB1bnN1cmUgaWYgaXQgaXMgbmVjZXNzYXJ5LCBidXQgYW55d2F5IHNob3VsZG4ndCBodXJ0Ci0JZXByb21fdyhkZXYsIDApOwotCi0JZm9yKGk9MDtpPDE2O2krKyl7Ci0JCS8vZWVwcm9tIG5lZWRzIGEgY2xrIGN5Y2xlIGJldHdlZW4gd3JpdGluZyBvcGNvZGUmYWRyCi0JCS8vYW5kIHJlYWRpbmcgZGF0YS4gKGVlcHJvbSBvdXRzIGEgZHVtbXkgMCkKLQkJZXByb21fY2tfY3ljbGUoZGV2KTsKLQkJcmV0IHw9IChlcHJvbV9yKGRldik8PCgxNS1pKSk7Ci0JfQotCi0JZXByb21fY3MoZGV2LCAwKTsKLQllcHJvbV9ja19jeWNsZShkZXYpOwotCi0JLy9kaXNhYmxlIEVQUk9NIHByb2dyYW1taW5nCi0Jd3JpdGVfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQsCi0JCSAgICAgICAoRVBST01fQ01EX05PUk1BTDw8RVBST01fQ01EX09QRVJBVElOR19NT0RFX1NISUZUKSk7Ci0JcmV0dXJuIHJldDsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfOTNjeDYuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfOTNjeDYuaAppbmRleCAzNmFlMTAwLi43OWU3MzkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwXzkzY3g2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF85M2N4Ni5oCkBAIC00NSwxMyArNDUsMTAgQEAKIAogI2RlZmluZQlFUFJPTV9UWFBXX09GRE1fQ0gxXzIgMHgyMAogCi0vLyNkZWZpbmUJRVBST01fVFhQV19DSDFfMiAweDEwCi0jZGVmaW5lICBFUFJPTV9UWFBXX0NIMV8yIDB4MzAKLSNkZWZpbmUJRVBST01fVFhQV19DSDNfNCAweDExCi0jZGVmaW5lCUVQUk9NX1RYUFdfQ0g1XzYgMHgxMgotI2RlZmluZQlFUFJPTV9UWFBXX0NIN184IDB4MTMKLSNkZWZpbmUJRVBST01fVFhQV19DSDlfMTAgMHgxNAotI2RlZmluZQlFUFJPTV9UWFBXX0NIMTFfMTIgMHgxNQotI2RlZmluZQlFUFJPTV9UWFBXX0NIMTNfMTQgMHgxNgorI2RlZmluZQlFUFJPTV9UWFBXX0NIMV8yIDB4MzAKIAotdTMyIGVwcm9tX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldix1MzIgYWRkcik7IC8vcmVhZHMgYSAxNiBiaXRzIHdvcmQKKyNkZWZpbmUgUlRMODE4WF9FRVBST01fQ01EX1JFQUQJCSgxIDw8IDApCisjZGVmaW5lIFJUTDgxOFhfRUVQUk9NX0NNRF9XUklURQkoMSA8PCAxKQorI2RlZmluZSBSVEw4MThYX0VFUFJPTV9DTURfQ0sJCSgxIDw8IDIpCisjZGVmaW5lIFJUTDgxOFhfRUVQUk9NX0NNRF9DUwkJKDEgPDwgMykKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYwppbmRleCBlMGYxM2VmLi5iMTc1N2FjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2NvcmUuYwpAQCAtMzEsNiArMzEsNyBAQAogI3VuZGVmIERVTU1ZX1JYCiAKICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2VlcHJvbV85M2N4Ni5oPgogCiAjaW5jbHVkZSAicjgxODBfaHcuaCIKICNpbmNsdWRlICJyODE4MC5oIgpAQCAtNDEsMTMgKzQyLDYgQEAKIAogI2luY2x1ZGUgImllZWU4MDIxMS9kb3QxMWQuaCIKIAotI2lmbmRlZiBQQ0lfVkVORE9SX0lEX0JFTEtJTgotCSNkZWZpbmUgUENJX1ZFTkRPUl9JRF9CRUxLSU4gMHgxNzk5Ci0jZW5kaWYKLSNpZm5kZWYgUENJX1ZFTkRPUl9JRF9ETElOSwotCSNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ETElOSyAweDExODYKLSNlbmRpZgotCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcnRsODE4MF9wY2lfaWRfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKICAgICAgICAgewogICAgICAgICAgICAgICAgIC52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1JFQUxURUssCkBAIC02NjksMTEgKzY2Myw4IEBACiAKIHZvaWQgcnRsODE4MF9SU1NJX2NhbGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKnJzc2ksIHU4ICpxdWFsKQogewotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKIAl1MzIgdGVtcDsKIAl1MzIgdGVtcDI7Ci0JdTMyIHRlbXAzOwotCXUzMiBsc2I7CiAJdTMyIHE7CiAJdTMyIG9yaWdfcXVhbDsKIAl1OCAgX3Jzc2k7CkBAIC02OTUsODggKzY4Niw2IEBACiAJKnF1YWwgPSB0ZW1wOwogCXRlbXAyID0gKnJzc2k7CiAKLQlzd2l0Y2gocHJpdi0+cmZfY2hpcCl7Ci0JY2FzZSBSRkNISVBJRF9SRk1EOgotCQlsc2IgPSB0ZW1wMiAmIDE7Ci0JCXRlbXAyICY9IDB4N2U7Ci0JCWlmICggIWxzYiB8fCAhKHRlbXAyIDw9IDB4M2MpICkgewotCQkJdGVtcDIgPSAweDY0OwotCQl9IGVsc2UgewotCQkJdGVtcDIgPSAxMDAgKiB0ZW1wMiAvIDB4M2M7Ci0JCX0KLQkJKnJzc2kgPSB0ZW1wMiAmIDB4ZmY7Ci0JCV9yc3NpID0gdGVtcDIgJiAweGZmOwotCQlicmVhazsKLQljYXNlIFJGQ0hJUElEX0lOVEVSU0lMOgotCQlsc2IgPSB0ZW1wMjsKLQkJdGVtcDIgJj0gMHhmZmZmZmZmZTsKLQkJdGVtcDIgKj0gMjUxOwotCQl0ZW1wMyA9IHRlbXAyOwotCQl0ZW1wMiA8PD0gNjsKLQkJdGVtcDMgKz0gdGVtcDI7Ci0JCXRlbXAzIDw8PSAxOwotCQl0ZW1wMiA9IDB4NDk1MGRmOwotCQl0ZW1wMiAtPSB0ZW1wMzsKLQkJbHNiICY9IDE7Ci0JCWlmICggdGVtcDIgPD0gMHgzZTAwMDAgKSB7Ci0JCQlpZiAoIHRlbXAyIDwgMHhmZmVmMDAwMCApCi0JCQkJdGVtcDIgPSAweGZmZWYwMDAwOwotCQl9IGVsc2UgewotCQkJdGVtcDIgPSAweDNlMDAwMDsKLQkJfQotCQlpZiAoICFsc2IgKSB7Ci0JCQl0ZW1wMiAtPSAweGYwMDAwOwotCQl9IGVsc2UgewotCQkJdGVtcDIgKz0gMHhmMDAwMDsKLQkJfQotCi0JCXRlbXAzID0gMHg0ZDAwMDA7Ci0JCXRlbXAzIC09IHRlbXAyOwotCQl0ZW1wMyAqPSAxMDA7Ci0JCXRlbXAzID0gdGVtcDMgLyAweDZkOwotCQl0ZW1wMyA+Pj0gMHgxMDsKLQkJX3Jzc2kgPSB0ZW1wMyAmIDB4ZmY7Ci0JCSpyc3NpID0gdGVtcDMgJiAweGZmOwotCQlicmVhazsKLQljYXNlIFJGQ0hJUElEX0dDVDoKLQkgICAgICAgIGxzYiA9IHRlbXAyICYgMTsKLQkJdGVtcDIgJj0gMHg3ZTsKLQkJaWYgKCAhIGxzYiB8fCAhKHRlbXAyIDw9IDB4M2MpICl7Ci0JCQl0ZW1wMiA9IDB4NjQ7Ci0JCX0gZWxzZSB7Ci0JCQl0ZW1wMiA9ICgxMDAgKiB0ZW1wMikgLyAweDNjOwotCQl9Ci0JCSpyc3NpID0gdGVtcDIgJiAweGZmOwotCQlfcnNzaSA9IHRlbXAyICYgMHhmZjsKLQkJYnJlYWs7Ci0JY2FzZSBSRkNISVBJRF9QSElMSVBTOgotCQlpZiggb3JpZ19xdWFsIDw9IDB4NGUgKXsKLQkJCV9yc3NpID0gU1RSRU5HVEhfTUFQW29yaWdfcXVhbF07Ci0JCQkqcnNzaSA9IF9yc3NpOwotCQl9IGVsc2UgewotCQkJb3JpZ19xdWFsIC09IDB4ODA7Ci0JCQlpZiAoICFvcmlnX3F1YWwgKXsKLQkJCQlfcnNzaSA9IDE7Ci0JCQkJKnJzc2kgPSAxOwotCQkJfSBlbHNlIHsKLQkJCQlfcnNzaSA9IDB4MzI7Ci0JCQkJKnJzc2kgPSAweDMyOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCWNhc2UgUkZDSElQSURfTUFYSU06Ci0JCWxzYiA9IHRlbXAyICYgMTsKLQkJdGVtcDIgJj0gMHg3ZTsKLQkJdGVtcDIgPj49IDE7Ci0JCXRlbXAyICs9IDB4NDI7Ci0JCWlmKCBsc2IgIT0gMCApewotCQkJdGVtcDIgKz0gMHhhOwotCQl9Ci0JCSpyc3NpID0gdGVtcDIgJiAweGZmOwotCQlfcnNzaSA9IHRlbXAyICYgMHhmZjsKLQkJYnJlYWs7Ci0JfQotCiAJaWYgKCBfcnNzaSA8IDB4NjQgKXsKIAkJaWYgKCBfcnNzaSA9PSAwICkgewogCQkJKnJzc2kgPSAxOwpAQCAtMTQyMSwxMSArMTMzMCw5IEBACiAJcmV0dXJuIE5fREJQUzsKIH0KIAotLy97YnkgYW15IDA4MDMxMgogLy8KIC8vCURlc2NyaXB0aW9uOgogLy8gCUZvciBOZXRnZWFyIGNhc2UsIHRoZXkgd2FudCBnb29kLWxvb2tpbmcgc2luZ2FsIHN0cmVuZ3RoLgotLy8JCTIwMDQuMTIuMDUsIGJ5IHJjbmprby4KIC8vCiBsb25nIE5ldGdlYXJTaWduYWxTdHJlbmd0aFRyYW5zbGF0ZShsb25nIExhc3RTUywgbG9uZyBDdXJyU1MpCiB7CkBAIC0xNDgxLDcgKzEzODgsNiBAQAogLy8JCVRoaXMgaXMgZGlmZmVyZW50IHdpdGggUGVyZm9ybVNpZ25hbFNtb290aGluZzgxODUgaW4gc21vb3RoaW5nIGZvbXVsYS4KIC8vCQlObyBkcmFtYXRpYyBhZGp1c3Rpb24gaXMgYXBwbHkgYmVjYXVzZSBkeW5hbWljIG1lY2hhbmlzbSBuZWVkIHNvbWUgZGVncmVlCiAvLwkJb2YgY29ycmVjdG5lc3MuIFBvcnRlZCBmcm9tIDgxODdCLgotLy8JMjAwNy0wMi0yNiwgYnkgQnJ1Y2UuCiAvLwogdm9pZCBQZXJmb3JtVW5kZWNvcmF0ZWRTaWduYWxTbW9vdGhpbmc4MTg1KHN0cnVjdCByODE4MF9wcml2ICpwcml2LAogCQkJCQkgICBib29sIGJDY2tSYXRlKQpAQCAtMTUwMiw3ICsxNDA4LDYgQEAKIAkJcHJpdi0+Q3VyQ0NLUlNTSSA9IDA7CiB9CiAKLS8vYnkgYW15IDA4MDMxMn0KIAogLyogVGhpcyBpcyByb3VnaCBSWCBpc3IgaGFuZGxpbmcgcm91dGluZSovCiB2b2lkIHJ0bDgxODBfcngoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTE2MzgsNyArMTU0Myw3IEBACiAJCX0KIAogCQlzaWduYWw9KHVuc2lnbmVkIGNoYXIpKCgoKihwcml2LT5yeHJpbmd0YWlsKzMpKSYgKDB4MDBmZjAwMDApKT4+MTYpOwotCQlzaWduYWw9KHNpZ25hbCYweGZlKT4+MTsJLy8gTW9kaWZ5IGJ5IGhpa2FydSA2LjYKKwkJc2lnbmFsID0gKHNpZ25hbCAmIDB4ZmUpID4+IDE7CiAKIAkJcXVhbGl0eT0odW5zaWduZWQgY2hhcikoKCoocHJpdi0+cnhyaW5ndGFpbCszKSkgJiAoMHhmZikpOwogCkBAIC0xNjUyLDcgKzE1NTcsNiBAQAogCiAJCXN0YXRzLnJhdGUgPSBydGw4MTgwX3JhdGUycmF0ZShyYXRlKTsKIAkJQW50ZW5uYSA9ICgoKCoocHJpdi0+cnhyaW5ndGFpbCArMykpJiAoMHgwMDAwODAwMCkpID09IDAgKT8gMDoxIDsKLS8vYnkgYW15IGZvciBhbnRlbm5hCiAJCWlmKCFydGw4MTgwX0lzV2lyZWxlc3NCTW9kZShzdGF0cy5yYXRlKSkKIAkJeyAvLyBPRkRNIHJhdGUuCiAKQEAgLTE2OTEsMTEgKzE1OTUsMTAgQEAKIAkJCVJYQUdDPSg5NS1SWEFHQykqMTAwLzY1OwogCQl9CiAJCXByaXYtPlNpZ25hbFN0cmVuZ3RoID0gKHU4KVJYQUdDOwotCQlwcml2LT5SZWN2U2lnbmFsUG93ZXIgPSBSeEFHQ19kQm0gOyAgLy8gSXQgY2FuIHVzZSBkaXJlY3RseSBieSBTRDMgQ01MaW4KKwkJcHJpdi0+UmVjdlNpZ25hbFBvd2VyID0gUnhBR0NfZEJtOwogCQlwcml2LT5SeFBvd2VyID0gcnhwb3dlcjsKIAkJcHJpdi0+UlNTSSA9IFJTU0k7Ci0vL3tieSBhbXkgMDgwMzEyCi0JCS8vIFNRIHRyYW5zbGF0aW9uIGZvcm11bGFyIGlzIHByb3ZpZGVkIGJ5IFNEMyBEWi4gMjAwNi4wNi4yNywgYnkgcmNuamtvLgorCQkvKiBTUSB0cmFuc2xhdGlvbiBmb3JtdWxhIGlzIHByb3ZpZGVkIGJ5IFNEMyBEWi4gMjAwNi4wNi4yNyAqLwogCQlpZihxdWFsaXR5ID49IDEyNykKIAkJCXF1YWxpdHkgPSAxOy8vMDsgLy8wIHdpbGwgY2F1c2UgZXBjIHRvIHNob3cgc2lnbmFsIHplcm8gLCB3YWxrIGFyb3VkIG5vdzsKIAkJZWxzZSBpZihxdWFsaXR5IDwgMjcpCkBAIC0xNzEyLDcgKzE2MTUsNiBAQAogCS8vCXByaW50aygiPT09PT09PT09PT09PT09PT09PT09PT09PT0+cnggOiBSWEFHQyBpcyAlZCxzaWduYWxzdHJlbmd0aCBpcyAlZFxuIixSWEFHQyxzdGF0cy5zaWduYWxzdHJlbmd0aCk7CiAJCXN0YXRzLnJzc2kgPSBwcml2LT53c3RhdHMucXVhbC5xdWFsID0gcHJpdi0+U2lnbmFsUXVhbGl0eTsKIAkJc3RhdHMubm9pc2UgPSBwcml2LT53c3RhdHMucXVhbC5ub2lzZSA9IDEwMCAtIHByaXYgLT53c3RhdHMucXVhbC5xdWFsOwotLy9ieSBhbXkgMDgwMzEyfQogCQliSHdFcnJvciA9ICgoKCoocHJpdi0+cnhyaW5ndGFpbCkpJiAoMHgwMDAwMGZmZikpID09IDQwODApfCAoKCgqKHByaXYtPnJ4cmluZ3RhaWwpKSYgKDB4MDQwMDAwMDApKSAhPSAwICkKIAkJCXwgKCgoKihwcml2LT5yeHJpbmd0YWlsKSkmICgweDA4MDAwMDAwKSkgIT0gMCApfCAoKCh+KCoocHJpdi0+cnhyaW5ndGFpbCkpKSYgKDB4MTAwMDAwMDApKSAhPSAwICl8ICgoKH4oKihwcml2LT5yeHJpbmd0YWlsKSkpJiAoMHgyMDAwMDAwMCkpICE9IDAgKTsKIAkJYkNSQyA9ICgoKihwcml2LT5yeHJpbmd0YWlsKSkgJiAoMHgwMDAwMjAwMCkpID4+IDEzOwpAQCAtMTcyNSwxMSArMTYyNywxMiBAQAogCQkJCShlcU1hY0FkZHIocHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuYnNzaWQsIChmYyAmIElFRUU4MDIxMV9GQ1RMX1RPRFMpPyBoZHItPmFkZHIxIDogKGZjICYgSUVFRTgwMjExX0ZDVExfRlJPTURTICk/IGhkci0+YWRkcjIgOiBoZHItPmFkZHIzKSkKIAkJCQkgJiYgKCFiSHdFcnJvcikgJiYgKCFiQ1JDKSYmICghYklDVikpCiAJCQl7Ci0vL2J5IGFteSAwODAzMTIKLQkJCQkvLyBQZXJmb3JtIHNpZ25hbCBzbW9vdGhpbmcgZm9yIGR5bmFtaWMgbWVjaGFuaXNtIG9uIGRlbWFuZC4KLQkJCQkvLyBUaGlzIGlzIGRpZmZlcmVudCB3aXRoIFBlcmZvcm1TaWduYWxTbW9vdGhpbmc4MTg1IGluIHNtb290aGluZyBmb211bGEuCi0JCQkJLy8gTm8gZHJhbWF0aWMgYWRqdXN0aW9uIGlzIGFwcGx5IGJlY2F1c2UgZHluYW1pYyBtZWNoYW5pc20gbmVlZCBzb21lIGRlZ3JlZQotCQkJCS8vIG9mIGNvcnJlY3RuZXNzLiAyMDA3LjAxLjIzLCBieSBzaGllbiBjaGFuZy4KKwkJCQkvKiBQZXJmb3JtIHNpZ25hbCBzbW9vdGhpbmcgZm9yIGR5bmFtaWMKKwkJCQkgKiBtZWNoYW5pc20gb24gZGVtYW5kLiBUaGlzIGlzIGRpZmZlcmVudAorCQkJCSAqIHdpdGggUGVyZm9ybVNpZ25hbFNtb290aGluZzgxODUgaW4gc21vb3RoaW5nCisJCQkJICogZm9tdWxhLiBObyBkcmFtYXRpYyBhZGp1c3Rpb24gaXMgYXBwbHkKKwkJCQkgKiBiZWNhdXNlIGR5bmFtaWMgbWVjaGFuaXNtIG5lZWQgc29tZSBkZWdyZWUKKwkJCQkgKiBvZiBjb3JyZWN0bmVzcy4gKi8KIAkJCQlQZXJmb3JtVW5kZWNvcmF0ZWRTaWduYWxTbW9vdGhpbmc4MTg1KHByaXYsYkNja1JhdGUpOwogCQkJCS8vCiAJCQkJLy8gRm9yIGdvb2QtbG9va2luZyBzaW5nYWwgc3RyZW5ndGguCkBAIC0xNzQ5LDEyICsxNjUyLDkgQEAKIAogCQkvLyBGaWd1cmUgb3V0IHdoaWNoIGFudGVubmEgdGhhdCByZWNlaXZlZCB0aGUgbGFzdGVkIHBhY2tldC4KIAkJCQlwcml2LT5MYXN0UnhQa3RBbnRlbm5hID0gQW50ZW5uYSA/IDEgOiAwOyAvLyAwOiBhdXgsIDE6IG1haW4uCi0vL2J5IGFteSAwODAzMTIKIAkJCSAgICBTd0FudGVubmFEaXZlcnNpdHlSeE9rODE4NShkZXYsIHByaXYtPlNpZ25hbFN0cmVuZ3RoKTsKIAkJCX0KIAotLy9ieSBhbXkgZm9yIGFudGVubmEKLSNpZm5kZWYgRFVNTVlfUlgKIAkJaWYoZmlyc3QpewogCQkJaWYoIXByaXYtPnJ4X3NrYl9jb21wbGV0ZSl7CiAJCQkJLyogc2VlbXMgdGhhdCBIVyBzb21ldGltZXMgZmFpbHMgdG8gcmVpY2V2ZSBhbmQKQEAgLTE4MTAsMTkgKzE3MTAsMTIgQEAKIAkJaWYobGFzdCAmJiAhcHJpdi0+cnhfc2tiX2NvbXBsZXRlKXsKIAkJCWlmKHByaXYtPnJ4X3NrYi0+bGVuID4gNCkKIAkJCQlza2JfdHJpbShwcml2LT5yeF9za2IscHJpdi0+cnhfc2tiLT5sZW4tNCk7Ci0jaWZuZGVmIFJYX0RPTlRfUEFTU19VTAogCQkJaWYoIWllZWU4MDIxMV9ydGxfcngocHJpdi0+aWVlZTgwMjExLAotCQkJCQkgcHJpdi0+cnhfc2tiLCAmc3RhdHMpKXsKLSNlbmRpZiAvLyBSWF9ET05UX1BBU1NfVUwKLQorCQkJCQkgcHJpdi0+cnhfc2tiLCAmc3RhdHMpKQogCQkJCWRldl9rZnJlZV9za2JfYW55KHByaXYtPnJ4X3NrYik7Ci0jaWZuZGVmIFJYX0RPTlRfUEFTU19VTAotCQkJfQotI2VuZGlmCiAJCQlwcml2LT5yeF9za2JfY29tcGxldGU9MTsKIAkJfQogCi0jZW5kaWYgLy9EVU1NWV9SWAogCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UocHJpdi0+cGRldiwKIAkJCQkgICAgcHJpdi0+cnhidWZmZXItPmRtYSwKIAkJCQkgICAgcHJpdi0+cnhidWZmZXJzaXplICogXApAQCAtMTg5MCw3ICsxNzgzLDcgQEAKIAlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CiAJaW50IG1vZGU7CiAJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgICpoID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICAqKSBza2ItPmRhdGE7Ci0Jc2hvcnQgbW9yZWZyYWcgPSAoaC0+ZnJhbWVfY3RsKSAmIElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUzsKKwlzaG9ydCBtb3JlZnJhZyA9IChoLT5mcmFtZV9jb250cm9sKSAmIElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBwcmlvcml0eTsKIApAQCAtMjA1Niw3ICsxOTQ5LDcgQEAKIAl1MTYJCQlSdHNEdXIgPSAwOwogCXUxNgkJCVRoaXNGcmFtZVRpbWUgPSAwOwogCXUxNgkJCVR4RGVzY0R1cmF0aW9uID0gMDsKLQl1OCAJCQlvd25iaXRfZmxhZyA9IGZhbHNlOyAvL2FkZGVkIGJ5IGRhdmlkIHdvbyBmb3Igc3luYyBUeCwgMjAwNy4xMi4xNAorCXU4IAkJCW93bmJpdF9mbGFnID0gZmFsc2U7CiAKIAlzd2l0Y2gocHJpb3JpdHkpIHsKIAljYXNlIE1BTkFHRV9QUklPUklUWToKQEAgLTIxMjMsNyArMjAxNiw4IEBACiAJCQkvL1lKLGFkZCwwODA4MjgsZm9yIEtlZXAgYWxpdmUKIAkJCXByaXYtPk51bVR4VW5pY2FzdCsrOwogCi0JCQkvLyBGaWd1cmUgb3V0IEFDSyByYXRlIGFjY29yZGluZyB0byBCU1MgYmFzaWMgcmF0ZSBhbmQgVHggcmF0ZSwgMjAwNi4wMy4wOCBieSByY25qa28uCisJCQkvKiBGaWd1cmUgb3V0IEFDSyByYXRlIGFjY29yZGluZyB0byBCU1MgYmFzaWMgcmF0ZQorCQkJICogYW5kIFR4IHJhdGUuICovCiAJCQlBY2tUaW1lID0gQ29tcHV0ZVR4VGltZSgxNCwgMTAsMCwgMCk7CS8vIEFja0NUU0xuZyA9IDE0IHVzZSAxTSBicHMgc2VuZAogCiAJCQlpZiAoICgobGVuICsgc0NyY0xuZykgPiBwcml2LT5ydHMpICYmIHByaXYtPnJ0cyApCkBAIC0yMTU4LDcgKzIwNTIsNyBAQAogCQkJCVR4RGVzY0R1cmF0aW9uID0gVGhpc0ZyYW1lVGltZSArIGFTaWZzVGltZSArIEFja1RpbWU7CiAJCQl9CiAKLQkJCWlmKCEoZnJhZ19oZHItPmZyYW1lX2N0bCAmIElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUykpIHsgLy9ubyBtb3JlIGZyYWdtZW50CisJCQlpZiAoIShmcmFnX2hkci0+ZnJhbWVfY29udHJvbCAmIElFRUU4MDIxMV9GQ1RMX01PUkVGUkFHUykpIHsKIAkJCQkvLyBUaGlzRnJhbWUtQUNLLgogCQkJCUR1cmF0aW9uID0gYVNpZnNUaW1lICsgQWNrVGltZTsKIAkJCX0gZWxzZSB7IC8vIE9uZSBvciBtb3JlIGZyYWdtZW50cyByZW1haW5lZC4KQEAgLTIyMDYsNyArMjEwMCw3IEBACiAJCSp0YWlsIHw9ICgxPDwxNSk7IC8qIG5vIGVuY3J5cHQgKi8KIAogCQlpZihyZW1haW49PWxlbiAmJiAhZGVzY2ZyYWcpIHsKLQkJCW93bmJpdF9mbGFnID0gZmFsc2U7CS8vYWRkZWQgYnkgZGF2aWQgd29vLDIwMDcuMTIuMTQKKwkJCW93bmJpdF9mbGFnID0gZmFsc2U7CiAJCQkqdGFpbCA9ICp0YWlsfCAoMTw8MjkpIDsgLy9maXN0IHNlZ21lbnQgb2YgdGhlIHBhY2tldAogCQkJKnRhaWwgPSAqdGFpbCB8KGxlbik7CiAJCX0gZWxzZSB7CkBAIC0yNTU2LDI3ICsyNDUwLDE2IEBACiAJfQogCiAJLy8gVHggSGlnaCBQb3dlciBNZWNoYW5pc20uCi0jaWZkZWYgSElHSF9QT1dFUgogCWlmKENoZWNrSGlnaFBvd2VyKChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGEpKQotCXsKIAkJcXVldWVfd29yayhwcml2LT5pZWVlODAyMTEtPndxLCAodm9pZCAqKSZwcml2LT5pZWVlODAyMTEtPnR4X3B3X3dxKTsKLQl9Ci0jZW5kaWYKIAogCS8vIFR4IFBvd2VyIFRyYWNraW5nIG9uIDg3U0UuCi0jaWZkZWYgVFhfVFJBQ0sKLQkvL2lmKCBwcml2LT5iVHhQb3dlclRyYWNrICkJLy9sem0gbW9kIDA4MDgyNgotCWlmKCBDaGVja1R4UHdyVHJhY2tpbmcoKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YSkpOworCWlmIChDaGVja1R4UHdyVHJhY2tpbmcoKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YSkpCiAJCVR4UHdyVHJhY2tpbmc4N1NFKChzdHJ1Y3QgbmV0X2RldmljZSAqKWRhdGEpOwotI2VuZGlmCiAKIAkvLyBQZXJmb3JtIERJRyBpbW1lZGlhdGVseS4KLSNpZmRlZiBTV19ESUcKIAlpZihDaGVja0RpZygoc3RydWN0IG5ldF9kZXZpY2UgKilkYXRhKSA9PSB0cnVlKQotCXsKIAkJcXVldWVfd29yayhwcml2LT5pZWVlODAyMTEtPndxLCAodm9pZCAqKSZwcml2LT5pZWVlODAyMTEtPmh3X2RpZ193cSk7Ci0JfQotI2VuZGlmCiAgICAJcnRsODE4MF93YXRjaF9kb2coKHN0cnVjdCBuZXRfZGV2aWNlICopZGF0YSk7CiAKIAlxdWV1ZV93b3JrKHByaXYtPmllZWU4MDIxMS0+d3EsICh2b2lkICopJnByaXYtPmllZWU4MDIxMS0+R1BJT0NoYW5nZVJGV29ya0l0ZW0pOwpAQCAtMjY3NSw2ICsyNTU4LDM2IEBACiB9CiAvL1lKLGFkZCwwODA4MjgsZW5kCiAKK3N0YXRpYyB2b2lkIHJ0bDgxODdzZV9lZXByb21fcmVnaXN0ZXJfcmVhZChzdHJ1Y3QgZWVwcm9tXzkzY3g2ICplZXByb20pCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGVlcHJvbS0+ZGF0YTsKKwl1OCByZWcgPSByZWFkX25pY19ieXRlKGRldiwgRVBST01fQ01EKTsKKworCWVlcHJvbS0+cmVnX2RhdGFfaW4gPSByZWcgJiBSVEw4MThYX0VFUFJPTV9DTURfV1JJVEU7CisJZWVwcm9tLT5yZWdfZGF0YV9vdXQgPSByZWcgJiBSVEw4MThYX0VFUFJPTV9DTURfUkVBRDsKKwllZXByb20tPnJlZ19kYXRhX2Nsb2NrID0gcmVnICYgUlRMODE4WF9FRVBST01fQ01EX0NLOworCWVlcHJvbS0+cmVnX2NoaXBfc2VsZWN0ID0gcmVnICYgUlRMODE4WF9FRVBST01fQ01EX0NTOworfQorCitzdGF0aWMgdm9pZCBydGw4MTg3c2VfZWVwcm9tX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBlZXByb21fOTNjeDYgKmVlcHJvbSkKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZWVwcm9tLT5kYXRhOworCXU4IHJlZyA9IDIgPDwgNjsKKworCWlmIChlZXByb20tPnJlZ19kYXRhX2luKQorCQlyZWcgfD0gUlRMODE4WF9FRVBST01fQ01EX1dSSVRFOworCWlmIChlZXByb20tPnJlZ19kYXRhX291dCkKKwkJcmVnIHw9IFJUTDgxOFhfRUVQUk9NX0NNRF9SRUFEOworCWlmIChlZXByb20tPnJlZ19kYXRhX2Nsb2NrKQorCQlyZWcgfD0gUlRMODE4WF9FRVBST01fQ01EX0NLOworCWlmIChlZXByb20tPnJlZ19jaGlwX3NlbGVjdCkKKwkJcmVnIHw9IFJUTDgxOFhfRUVQUk9NX0NNRF9DUzsKKworCXdyaXRlX25pY19ieXRlKGRldiwgRVBST01fQ01ELCByZWcpOworCXJlYWRfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQpOworCXVkZWxheSgxMCk7Cit9CisKIHNob3J0IHJ0bDgxODBfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKQEAgLTI2ODMsOCArMjU5NiwxNiBAQAogCXUzMiB1c1ZhbHVlOwogCXUxNiB0bXB1MTY7CiAJaW50IGksIGo7CisJc3RydWN0IGVlcHJvbV85M2N4NiBlZXByb207CisJdTE2IGVlcHJvbV92YWw7CiAKLQlwcml2LT5jaGFubmVsX3BsYW4gPSBlcHJvbV9yZWFkKGRldiwgRUVQUk9NX0NPVU5UUllfQ09ERT4+MSkgJiAweEZGOworCWVlcHJvbS5kYXRhID0gZGV2OworCWVlcHJvbS5yZWdpc3Rlcl9yZWFkID0gcnRsODE4N3NlX2VlcHJvbV9yZWdpc3Rlcl9yZWFkOworCWVlcHJvbS5yZWdpc3Rlcl93cml0ZSA9IHJ0bDgxODdzZV9lZXByb21fcmVnaXN0ZXJfd3JpdGU7CisJZWVwcm9tLndpZHRoID0gUENJX0VFUFJPTV9XSURUSF85M0M0NjsKKworCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIEVFUFJPTV9DT1VOVFJZX0NPREU+PjEsICZlZXByb21fdmFsKTsKKwlwcml2LT5jaGFubmVsX3BsYW4gPSBlZXByb21fdmFsICYgMHhGRjsKIAlpZihwcml2LT5jaGFubmVsX3BsYW4gPiBDT1VOVFJZX0NPREVfR0xPQkFMX0RPTUFJTil7CiAJCXByaW50aygicnRsODE4MF9pbml0OkVycm9yIGNoYW5uZWwgcGxhbiEgU2V0IHRvIGRlZmF1bHQuXG4iKTsKIAkJcHJpdi0+Y2hhbm5lbF9wbGFuID0gMDsKQEAgLTI3MDEsOCArMjYyMiw2IEBACiAJcHJpdi0+dHhiZWFjb25jb3VudCA9IDI7CiAJcHJpdi0+cnhfc2tiX2NvbXBsZXRlID0gMTsKIAotCXByaXYtPlJlZ1RocmVlV2lyZU1vZGUgPSBIV19USFJFRV9XSVJFX1NJOwotCiAJcHJpdi0+UkZDaGFuZ2VJblByb2dyZXNzID0gZmFsc2U7CiAJcHJpdi0+U2V0UkZQb3dlclN0YXRlSW5Qcm9ncmVzcyA9IGZhbHNlOwogCXByaXYtPlJGUHJvZ1R5cGUgPSAwOwpAQCAtMjc0NywxMCArMjY2Niw4IEBACiAJcHJpdi0+VHhQb2xsaW5nVGltZXMgPSAwOy8vbHptIGFkZCAwODA4MjYKIAlwcml2LT5iTGVpc3VyZVBzID0gdHJ1ZTsKIAlwcml2LT5kb3QxMVBvd2VyU2F2ZU1vZGUgPSBlQWN0aXZlOwotLy9ieSBhbXkgZm9yIGFudGVubmEKIAlwcml2LT5BZE1pbkNoZWNrUGVyaW9kID0gNTsKIAlwcml2LT5BZE1heENoZWNrUGVyaW9kID0gMTA7Ci0vLyBMb3dlciBzaWduYWwgc3RyZW5ndGggdGhyZXNob2xkIHRvIGZpdCB0aGUgSFcgcGFydGljaXBhdGlvbiBpbiBhbnRlbm5hIGRpdmVyc2l0eS4gK2J5IGFteSAwODAzMTIKIAlwcml2LT5BZE1heFJ4U3NUaHJlc2hvbGQgPSAzMDsvLzYwLT4zMAogCXByaXYtPkFkUnhTc1RocmVzaG9sZCA9IDIwOy8vNTAtPjIwCiAJcHJpdi0+QWRDaGVja1BlcmlvZCA9IHByaXYtPkFkTWluQ2hlY2tQZXJpb2Q7CkBAIC0yNzY1LDggKzI2ODIsNiBAQAogCWluaXRfdGltZXIoJnByaXYtPlN3QW50ZW5uYURpdmVyc2l0eVRpbWVyKTsKIAlwcml2LT5Td0FudGVubmFEaXZlcnNpdHlUaW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2OwogCXByaXYtPlN3QW50ZW5uYURpdmVyc2l0eVRpbWVyLmZ1bmN0aW9uID0gKHZvaWQgKilTd0FudGVubmFEaXZlcnNpdHlUaW1lckNhbGxiYWNrOwotLy9ieSBhbXkgZm9yIGFudGVubmEKLS8ve2J5IGFteSAwODAzMTIKIAlwcml2LT5iRGlnTWVjaGFuaXNtID0gMTsKIAlwcml2LT5Jbml0aWFsR2FpbiA9IDY7CiAJcHJpdi0+Ylh0YWxDYWxpYnJhdGlvbiA9IGZhbHNlOwpAQCAtMjgwMyw1OCArMjcxOCw2MyBAQAogCXByaXYtPk51bVR4VW5pY2FzdCA9IDA7CiAJcHJpdi0+a2VlcEFsaXZlTGV2ZWwgPSBERUZBVUxUX0tFRVBfQUxJVkVfTEVWRUw7CiAJcHJpdi0+UG93ZXJQcm9maWxlID0gUE9XRVJfUFJPRklMRV9BQzsKLSAgICBwcml2LT5DdXJyUmV0cnlDbnQ9MDsKLSAgICBwcml2LT5MYXN0UmV0cnlDbnQ9MDsKLSAgICBwcml2LT5MYXN0VHhva0NudD0wOwotICAgIHByaXYtPkxhc3RSeG9rQ250PTA7Ci0gICAgcHJpdi0+TGFzdFJldHJ5UmF0ZT0wOwotICAgIHByaXYtPmJUcnl1cGluZz0wOwotICAgIHByaXYtPkN1cnJUeFJhdGU9MDsKLSAgICBwcml2LT5DdXJyUmV0cnlSYXRlPTA7Ci0gICAgcHJpdi0+VHJ5dXBpbmdDb3VudD0wOwotICAgIHByaXYtPlRyeXVwaW5nQ291bnROb0RhdGE9MDsKLSAgICBwcml2LT5UcnlEb3duQ291bnRMb3dEYXRhPTA7Ci0gICAgcHJpdi0+TGFzdFR4T0tCeXRlcz0wOwotICAgIHByaXYtPkxhc3RGYWlsVHhSYXRlPTA7Ci0gICAgcHJpdi0+TGFzdEZhaWxUeFJhdGVTUz0wOwotICAgIHByaXYtPkZhaWxUeFJhdGVDb3VudD0wOwotICAgIHByaXYtPkxhc3RUeFRocm91Z2hwdXQ9MDsKLSAgICBwcml2LT5OdW1UeE9rQnl0ZXNUb3RhbD0wOworCXByaXYtPkN1cnJSZXRyeUNudCA9IDA7CisJcHJpdi0+TGFzdFJldHJ5Q250ID0gMDsKKwlwcml2LT5MYXN0VHhva0NudCA9IDA7CisJcHJpdi0+TGFzdFJ4b2tDbnQgPSAwOworCXByaXYtPkxhc3RSZXRyeVJhdGUgPSAwOworCXByaXYtPmJUcnl1cGluZyA9IDA7CisJcHJpdi0+Q3VyclR4UmF0ZSA9IDA7CisJcHJpdi0+Q3VyclJldHJ5UmF0ZSA9IDA7CisJcHJpdi0+VHJ5dXBpbmdDb3VudCA9IDA7CisJcHJpdi0+VHJ5dXBpbmdDb3VudE5vRGF0YSA9IDA7CisJcHJpdi0+VHJ5RG93bkNvdW50TG93RGF0YSA9IDA7CisJcHJpdi0+TGFzdFR4T0tCeXRlcyA9IDA7CisJcHJpdi0+TGFzdEZhaWxUeFJhdGUgPSAwOworCXByaXYtPkxhc3RGYWlsVHhSYXRlU1MgPSAwOworCXByaXYtPkZhaWxUeFJhdGVDb3VudCA9IDA7CisJcHJpdi0+TGFzdFR4VGhyb3VnaHB1dCA9IDA7CisJcHJpdi0+TnVtVHhPa0J5dGVzVG90YWwgPSAwOwogCXByaXYtPkZvcmNlZERhdGFSYXRlID0gMDsKIAlwcml2LT5SZWdCTW9kZUdhaW5TdGFnZSA9IDE7CiAKLQlwcml2LT5wcm9taXNjID0gKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgPyAxOjA7CisJcHJpdi0+cHJvbWlzYyA9IChkZXYtPmZsYWdzICYgSUZGX1BST01JU0MpID8gMSA6IDA7CiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmlycV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+aXJxX3RoX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZwcml2LT50eF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcHJpdi0+cHNfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnJmX3BzX2xvY2spOwotCXNlbWFfaW5pdCgmcHJpdi0+d3hfc2VtLDEpOwotCXNlbWFfaW5pdCgmcHJpdi0+cmZfc3RhdGUsMSk7Ci0JSU5JVF9XT1JLKCZwcml2LT5yZXNldF93cSwodm9pZCopIHJ0bDgxODBfcmVzdGFydF93cSk7Ci0JSU5JVF9XT1JLKCZwcml2LT50eF9pcnFfd3EsKHZvaWQqKSBydGw4MTgwX3R4X2lycV93cSk7Ci0JSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmllZWU4MDIxMS0+aHdfd2FrZXVwX3dxLCh2b2lkKikgcnRsODE4MF9od193YWtldXBfd3EpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5pZWVlODAyMTEtPmh3X3NsZWVwX3dxLCh2b2lkKikgcnRsODE4MF9od19zbGVlcF93cSk7Ci0JSU5JVF9XT1JLKCZwcml2LT5pZWVlODAyMTEtPndtbV9wYXJhbV91cGRhdGVfd3EsKHZvaWQqKSBydGw4MTgwX3dtbV9wYXJhbV91cGRhdGUpOwotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5pZWVlODAyMTEtPnJhdGVfYWRhcHRlcl93cSwodm9pZCopcnRsODE4MF9yYXRlX2FkYXB0ZXIpOy8vK2J5IGFteSAwODAzMTIKLQlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+aWVlZTgwMjExLT5od19kaWdfd3EsKHZvaWQqKXJ0bDgxODBfaHdfZGlnX3dxKTsvLytieSBhbXkgMDgwMzEyCi0JSU5JVF9ERUxBWUVEX1dPUksoJnByaXYtPmllZWU4MDIxMS0+dHhfcHdfd3EsKHZvaWQqKXJ0bDgxODBfdHhfcHdfd3EpOy8vK2J5IGFteSAwODAzMTIKLQotCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5pZWVlODAyMTEtPkdQSU9DaGFuZ2VSRldvcmtJdGVtLCh2b2lkKikgR1BJT0NoYW5nZVJGV29ya0l0ZW1DYWxsQmFjayk7Ci0KKwlzZW1hX2luaXQoJnByaXYtPnd4X3NlbSwgMSk7CisJc2VtYV9pbml0KCZwcml2LT5yZl9zdGF0ZSwgMSk7CisJSU5JVF9XT1JLKCZwcml2LT5yZXNldF93cSwgKHZvaWQgKilydGw4MTgwX3Jlc3RhcnRfd3EpOworCUlOSVRfV09SSygmcHJpdi0+dHhfaXJxX3dxLCAodm9pZCAqKXJ0bDgxODBfdHhfaXJxX3dxKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+aWVlZTgwMjExLT5od193YWtldXBfd3EsCisJCQkgICh2b2lkICopcnRsODE4MF9od193YWtldXBfd3EpOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5pZWVlODAyMTEtPmh3X3NsZWVwX3dxLAorCQkJICAodm9pZCAqKXJ0bDgxODBfaHdfc2xlZXBfd3EpOworCUlOSVRfV09SSygmcHJpdi0+aWVlZTgwMjExLT53bW1fcGFyYW1fdXBkYXRlX3dxLAorCQkgICh2b2lkICopcnRsODE4MF93bW1fcGFyYW1fdXBkYXRlKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+aWVlZTgwMjExLT5yYXRlX2FkYXB0ZXJfd3EsCisJCQkgICh2b2lkICopcnRsODE4MF9yYXRlX2FkYXB0ZXIpOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5pZWVlODAyMTEtPmh3X2RpZ193cSwKKwkJCSAodm9pZCAqKXJ0bDgxODBfaHdfZGlnX3dxKTsKKwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+aWVlZTgwMjExLT50eF9wd193cSwKKwkJCSAodm9pZCAqKXJ0bDgxODBfdHhfcHdfd3EpOworCUlOSVRfREVMQVlFRF9XT1JLKCZwcml2LT5pZWVlODAyMTEtPkdQSU9DaGFuZ2VSRldvcmtJdGVtLAorCQkJICh2b2lkICopIEdQSU9DaGFuZ2VSRldvcmtJdGVtQ2FsbEJhY2spOwogCXRhc2tsZXRfaW5pdCgmcHJpdi0+aXJxX3J4X3Rhc2tsZXQsCiAJCSAgICAgKHZvaWQoKikodW5zaWduZWQgbG9uZykpIHJ0bDgxODBfaXJxX3J4X3Rhc2tsZXQsCiAJCSAgICAgKHVuc2lnbmVkIGxvbmcpcHJpdik7CiAKLSAgICBpbml0X3RpbWVyKCZwcml2LT53YXRjaF9kb2dfdGltZXIpOworCWluaXRfdGltZXIoJnByaXYtPndhdGNoX2RvZ190aW1lcik7CiAJcHJpdi0+d2F0Y2hfZG9nX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7CiAJcHJpdi0+d2F0Y2hfZG9nX3RpbWVyLmZ1bmN0aW9uID0gd2F0Y2hfZG9nX2FkYXB0aXZlOwogCi0gICAgaW5pdF90aW1lcigmcHJpdi0+cmF0ZWFkYXB0ZXJfdGltZXIpOwotICAgICAgICBwcml2LT5yYXRlYWRhcHRlcl90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2OwotICAgICAgICBwcml2LT5yYXRlYWRhcHRlcl90aW1lci5mdW5jdGlvbiA9IHRpbWVyX3JhdGVfYWRhcHRpdmU7Ci0JCXByaXYtPlJhdGVBZGFwdGl2ZVBlcmlvZD0gUkFURV9BREFQVElWRV9USU1FUl9QRVJJT0Q7Ci0JCXByaXYtPmJFbmhhbmNlVHhQd3I9ZmFsc2U7CisJaW5pdF90aW1lcigmcHJpdi0+cmF0ZWFkYXB0ZXJfdGltZXIpOworCXByaXYtPnJhdGVhZGFwdGVyX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7CisJcHJpdi0+cmF0ZWFkYXB0ZXJfdGltZXIuZnVuY3Rpb24gPSB0aW1lcl9yYXRlX2FkYXB0aXZlOworCXByaXYtPlJhdGVBZGFwdGl2ZVBlcmlvZCA9IFJBVEVfQURBUFRJVkVfVElNRVJfUEVSSU9EOworCXByaXYtPmJFbmhhbmNlVHhQd3IgPSBmYWxzZTsKIAogCXByaXYtPmllZWU4MDIxMS0+c29mdG1hY19oYXJkX3N0YXJ0X3htaXQgPSBydGw4MTgwX2hhcmRfc3RhcnRfeG1pdDsKIAlwcml2LT5pZWVlODAyMTEtPnNldF9jaGFuID0gcnRsODE4MF9zZXRfY2hhbjsKQEAgLTI4NzcsMzAgKzI3OTcsMjggQEAKIAogCXByaXYtPkNTTWV0aG9kID0gKDB4MDEgPDwgMjkpOwogCi0JcHJpdi0+VHJhbnNtaXRDb25maWcJPQotCQkJCQkJCQkJMTw8VENSX0R1clByb2NNb2RlX09GRlNFVCB8CQkvL2ZvciBSVEw4MTg1QiwgZHVyYXRpb24gc2V0dGluZyBieSBIVwotCQkJCQkJCQkJKDc8PFRDUl9NWERNQV9PRkZTRVQpIHwJLy8gTWF4IERNQSBCdXJzdCBTaXplIHBlciBUeCBETUEgQnVyc3QsIDc6IHJlc2VydmllZC4KLQkJCQkJCQkJCShwcml2LT5TaG9ydFJldHJ5TGltaXQ8PFRDUl9TUkxfT0ZGU0VUKSB8CS8vIFNob3J0IHJldHJ5IGxpbWl0Ci0JCQkJCQkJCQkocHJpdi0+TG9uZ1JldHJ5TGltaXQ8PFRDUl9MUkxfT0ZGU0VUKSB8CS8vIExvbmcgcmV0cnkgbGltaXQKLQkJCQkJCQkJCSgwID8gVENSX1NBVCA6IDApOwkvLyBGQUxTRTogSFcgcHJvdmllcyBQTENQIGxlbmd0aCBhbmQgTEVOR0VYVCwgVFVSRTogU1cgcHJvaXZlZHMgdGhlbQorCXByaXYtPlRyYW5zbWl0Q29uZmlnID0JVENSX0R1clByb2NNb2RlX09GRlNFVCB8CisJCQkJKDc8PFRDUl9NWERNQV9PRkZTRVQpIHwKKwkJCQkocHJpdi0+U2hvcnRSZXRyeUxpbWl0PDxUQ1JfU1JMX09GRlNFVCkgfAorCQkJCShwcml2LT5Mb25nUmV0cnlMaW1pdDw8VENSX0xSTF9PRkZTRVQpIHwKKwkJCQkoMCA/IFRDUl9TQVQgOiAwKTsKIAotCXByaXYtPlJlY2VpdmVDb25maWcJPQotCQkJCQkJCQlSQ1JfQU1GIHwgUkNSX0FERiB8CQkJCS8vYWNjZXB0IG1hbmFnZW1lbnQvZGF0YQotCQkJCQkJCQlSQ1JfQUNGIHwJCQkJCQkvL2FjY2VwdCBjb250cm9sIGZyYW1lIGZvciBTVyBBUCBuZWVkcyBQUy1wb2xsLCAyMDA1LjA3LjA3LCBieSByY25qa28uCi0JCQkJCQkJCVJDUl9BQiB8IFJDUl9BTSB8IFJDUl9BUE0gfAkJLy9hY2NlcHQgQkMvTUMvVUMKLQkJCQkJCQkJKDc8PFJDUl9NWERNQV9PRkZTRVQpIHwgLy8gTWF4IERNQSBCdXJzdCBTaXplIHBlciBSeCBETUEgQnVyc3QsIDc6IHVubGltaXRlZC4KLQkJCQkJCQkJKHByaXYtPkVhcmx5UnhUaHJlc2hvbGQ8PFJDUl9GSUZPX09GRlNFVCkgfCAvLyBSeCBGSUZPIFRocmVzaG9sZCwgNzogTm8gUnggdGhyZXNob2xkLgotCQkJCQkJCQkocHJpdi0+RWFybHlSeFRocmVzaG9sZCA9PSA3ID8gUkNSX09OTFlFUkxQS1Q6MCk7CisJcHJpdi0+UmVjZWl2ZUNvbmZpZyA9CVJDUl9BTUYgfCBSQ1JfQURGIHwgUkNSX0FDRiB8CisJCQkJUkNSX0FCIHwgUkNSX0FNIHwgUkNSX0FQTSB8CisJCQkJKDc8PFJDUl9NWERNQV9PRkZTRVQpIHwKKwkJCQkocHJpdi0+RWFybHlSeFRocmVzaG9sZDw8UkNSX0ZJRk9fT0ZGU0VUKSB8CisJCQkJKHByaXYtPkVhcmx5UnhUaHJlc2hvbGQgPT0gNyA/CisJCQkJCSBSQ1JfT05MWUVSTFBLVCA6IDApOwogCiAJcHJpdi0+SW50ck1hc2sJCT0gSU1SX1RNR0RPSyB8IElNUl9UQkRFUiB8IElNUl9USFBERVIgfAotCQkJCQkJCQlJTVJfVEhQREVSIHwgSU1SX1RIUERPSyB8Ci0JCQkJCQkJCUlNUl9UVk9ERVIgfCBJTVJfVFZPRE9LIHwKLQkJCQkJCQkJSU1SX1RWSURFUiB8IElNUl9UVklET0sgfAotCQkJCQkJCQlJTVJfVEJFREVSIHwgSU1SX1RCRURPSyB8Ci0JCQkJCQkJCUlNUl9UQktERVIgfCBJTVJfVEJLRE9LIHwKLQkJCQkJCQkJSU1SX1JEVSB8CQkJCQkJLy8gVG8gaGFuZGxlIHRoZSBkZWZyYWdtZW50YXRpb24gbm90IGVub3VnaCBSeCBkZXNjcmlwdG9ycyBjYXNlLiBBbm5pZSwgMjAwNi0wMy0yNy4KLQkJCQkJCQkJSU1SX1JFUiB8IElNUl9ST0sgfAotCQkJCQkJCQlJTVJfUlFvU09LOyAvLyA8Tk9URT4gUk9LIGFuZCBSUW9TT0sgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgc28sIHdlIG11c3QgaGFuZGxlIFJRb1NPSyBpbnRlcnJ1cHQgdG8gcmVjZWl2ZSBRb1MgZnJhbWVzLCAyMDA1LjEyLjA5LCBieSByY25qa28uCisJCQkJICBJTVJfVEhQREVSIHwgSU1SX1RIUERPSyB8CisJCQkJICBJTVJfVFZPREVSIHwgSU1SX1RWT0RPSyB8CisJCQkJICBJTVJfVFZJREVSIHwgSU1SX1RWSURPSyB8CisJCQkJICBJTVJfVEJFREVSIHwgSU1SX1RCRURPSyB8CisJCQkJICBJTVJfVEJLREVSIHwgSU1SX1RCS0RPSyB8CisJCQkJICBJTVJfUkRVIHwKKwkJCQkgIElNUl9SRVIgfCBJTVJfUk9LIHwKKwkJCQkgIElNUl9SUW9TT0s7CiAKIAlwcml2LT5Jbml0aWFsR2FpbiA9IDY7CiAKQEAgLTI5MTMsNyArMjgzMSw4IEBACiAJLy8ganVzdCBmb3Igc3luYyA4NQogCXByaXYtPmVuYWJsZV9ncGlvMCA9IDA7CiAKLQl1c1ZhbHVlID0gZXByb21fcmVhZChkZXYsIEVFUFJPTV9TV19SRVZEX09GRlNFVCk7CisJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgRUVQUk9NX1NXX1JFVkRfT0ZGU0VULCAmZWVwcm9tX3ZhbCk7CisJdXNWYWx1ZSA9IGVlcHJvbV92YWw7CiAJRE1FU0coInVzVmFsdWUgaXMgMHgleFxuIix1c1ZhbHVlKTsKIAkvLzNSZWFkIEFudGVubmFEaXZlcnNpdHkKIApAQCAtMjk1Myw1NCArMjg3Miw0NiBAQAogCWVsc2UKIAkJcHJpdi0+ZXByb210eXBlPUVQUk9NXzkzYzQ2OwogCi0JZGV2LT5kZXZfYWRkclswXT1lcHJvbV9yZWFkKGRldixNQUNfQURSKSAmIDB4ZmY7Ci0JZGV2LT5kZXZfYWRkclsxXT0oZXByb21fcmVhZChkZXYsTUFDX0FEUikgJiAweGZmMDApPj44OwotCWRldi0+ZGV2X2FkZHJbMl09ZXByb21fcmVhZChkZXYsTUFDX0FEUisxKSAmIDB4ZmY7Ci0JZGV2LT5kZXZfYWRkclszXT0oZXByb21fcmVhZChkZXYsTUFDX0FEUisxKSAmIDB4ZmYwMCk+Pjg7Ci0JZGV2LT5kZXZfYWRkcls0XT1lcHJvbV9yZWFkKGRldixNQUNfQURSKzIpICYgMHhmZjsKLQlkZXYtPmRldl9hZGRyWzVdPShlcHJvbV9yZWFkKGRldixNQUNfQURSKzIpICYgMHhmZjAwKT4+ODsKKwllZXByb21fOTNjeDZfbXVsdGlyZWFkKCZlZXByb20sIDB4NywgKF9fbGUxNiAqKQorCQkJICAgICAgIGRldi0+ZGV2X2FkZHIsIDMpOwogCiAJZm9yKGk9MSxqPTA7IGk8MTQ7IGkrPTIsaisrKXsKLQkJd29yZCA9IGVwcm9tX3JlYWQoZGV2LEVQUk9NX1RYUFdfQ0gxXzIgKyBqKTsKKwkJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgRVBST01fVFhQV19DSDFfMiArIGosICZ3b3JkKTsKIAkJcHJpdi0+Y2h0eHB3cltpXT13b3JkICYgMHhmZjsKIAkJcHJpdi0+Y2h0eHB3cltpKzFdPSh3b3JkICYgMHhmZjAwKT4+ODsKIAl9CiAJZm9yIChpID0gMSwgaiA9IDA7IGkgPCAxNDsgaSArPSAyLCBqKyspIHsKLQkJd29yZCA9IGVwcm9tX3JlYWQoZGV2LCBFUFJPTV9UWFBXX09GRE1fQ0gxXzIgKyBqKTsKKwkJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgRVBST01fVFhQV19PRkRNX0NIMV8yICsgaiwgJndvcmQpOwogCQlwcml2LT5jaHR4cHdyX29mZG1baV0gPSB3b3JkICYgMHhmZjsKLQkJcHJpdi0+Y2h0eHB3cl9vZmRtW2krMV0gPSAod29yZCAmIDB4ZmYwMCk+Pjg7CisJCXByaXYtPmNodHhwd3Jfb2ZkbVtpKzFdID0gKHdvcmQgJiAweGZmMDApID4+IDg7CiAJfQogCi0JLy8zUmVhZCBjcnlzdGFsIGNhbGlidHJhdGlvbiBhbmQgdGhlcm1hbCBtZXRlciBpbmRpY2F0aW9uIG9uIDg3U0UuCisJLyogM1JlYWQgY3J5c3RhbCBjYWxpYnRyYXRpb24gYW5kIHRoZXJtYWwgbWV0ZXIgaW5kaWNhdGlvbiBvbiA4N1NFLiAqLworCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIEVFUFJPTV9SU1Y+PjEsICZ0bXB1MTYpOwogCi0JLy8gQnkgU0QzIFNZJ3MgcmVxdWVzdC4gQWRkZWQgYnkgUm9nZXIsIDIwMDcuMTIuMTEuCisJLyogQ3J5c3RhbCBjYWxpYnJhdGlvbiBmb3IgWGluIGFuZCBYb3V0IHJlc3AuICovCisJcHJpdi0+WHRhbENhbF9Yb3V0ID0gdG1wdTE2ICYgRUVQUk9NX1hUQUxfQ0FMX1hPVVRfTUFTSzsKKwlwcml2LT5YdGFsQ2FsX1hpbiA9ICh0bXB1MTYgJiBFRVBST01fWFRBTF9DQUxfWElOX01BU0spID4+IDQ7CisJaWYgKCh0bXB1MTYgJiBFRVBST01fWFRBTF9DQUxfRU5BQkxFKSA+PiAxMikKKwkJcHJpdi0+Ylh0YWxDYWxpYnJhdGlvbiA9IHRydWU7CiAKLQl0bXB1MTYgPSBlcHJvbV9yZWFkKGRldiwgRUVQUk9NX1JTVj4+MSk7CisJLyogVGhlcm1hbCBtZXRlciByZWZlcmVuY2UgaW5kaWNhdGlvbi4gKi8KKwlwcml2LT5UaGVybWFsTWV0ZXIgPSAgKHU4KSgodG1wdTE2ICYgRUVQUk9NX1RIRVJNQUxfTUVURVJfTUFTSykgPj4gOCk7CisJaWYgKCh0bXB1MTYgJiBFRVBST01fVEhFUk1BTF9NRVRFUl9FTkFCTEUpID4+IDEzKQorCQlwcml2LT5iVHhQb3dlclRyYWNrID0gdHJ1ZTsKIAotCQkvLyBDcnlzdGFsIGNhbGlicmF0aW9uIGZvciBYaW4gYW5kIFhvdXQgcmVzcC4KLQkJcHJpdi0+WHRhbENhbF9Yb3V0ID0gdG1wdTE2ICYgRUVQUk9NX1hUQUxfQ0FMX1hPVVRfTUFTSzsgLy8gMH43LjVwRgotCQlwcml2LT5YdGFsQ2FsX1hpbiA9ICh0bXB1MTYgJiBFRVBST01fWFRBTF9DQUxfWElOX01BU0spPj40OyAvLyAwfjcuNXBGCi0JCWlmKCh0bXB1MTYgJiBFRVBST01fWFRBTF9DQUxfRU5BQkxFKT4+MTIpCi0JCQlwcml2LT5iWHRhbENhbGlicmF0aW9uID0gdHJ1ZTsKLQotCQkvLyBUaGVybWFsIG1ldGVyIHJlZmVyZW5jZSBpbmRpY2F0aW9uLgotCQlwcml2LT5UaGVybWFsTWV0ZXIgPSAgKHU4KSgodG1wdTE2ICYgRUVQUk9NX1RIRVJNQUxfTUVURVJfTUFTSyk+PjgpOwotCQlpZigodG1wdTE2ICYgRUVQUk9NX1RIRVJNQUxfTUVURVJfRU5BQkxFKT4+MTMpCi0JCQlwcml2LT5iVHhQb3dlclRyYWNrID0gdHJ1ZTsKLQotCXdvcmQgPSBlcHJvbV9yZWFkKGRldixFUFJPTV9UWFBXX0JBU0UpOworCWVlcHJvbV85M2N4Nl9yZWFkKCZlZXByb20sIEVQUk9NX1RYUFdfQkFTRSwgJndvcmQpOwogCXByaXYtPmNja190eHB3cl9iYXNlID0gd29yZCAmIDB4ZjsKIAlwcml2LT5vZmRtX3R4cHdyX2Jhc2UgPSAod29yZD4+NCkgJiAweGY7CiAKLQl2ZXJzaW9uID0gZXByb21fcmVhZChkZXYsRVBST01fVkVSU0lPTik7CisJZWVwcm9tXzkzY3g2X3JlYWQoJmVlcHJvbSwgRVBST01fVkVSU0lPTiwgJnZlcnNpb24pOwogCURNRVNHKCJFRVBST00gdmVyc2lvbiAleCIsdmVyc2lvbik7CiAJcHJpdi0+cmNyX2NzZW5zZSA9IDM7CiAKLQlwcml2LT5jc190cmVzaG9sZCA9IChlcHJvbV9yZWFkKGRldiwgRU5FUkdZX1RSRVNIT0xEKSAmIDB4ZmYwMCkgPj4gODsKKwllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCBFTkVSR1lfVFJFU0hPTEQsICZlZXByb21fdmFsKTsKKwlwcml2LT5jc190cmVzaG9sZCA9IChlZXByb21fdmFsICYgMHhmZjAwKSA+PiA4OwogCi0JcHJpdi0+cmZfY2hpcCA9IDB4ZmYgJiBlcHJvbV9yZWFkKGRldiwgUkZDSElQSUQpOwotCi0JcHJpdi0+cmZfY2hpcCA9IFJGX1pFQlJBNDsKKwllZXByb21fOTNjeDZfcmVhZCgmZWVwcm9tLCBSRkNISVBJRCwgJmVlcHJvbV92YWwpOwogCXByaXYtPnJmX3NsZWVwID0gcnRsODIyNXo0X3JmX3NsZWVwOwogCXByaXYtPnJmX3dha2V1cCA9IHJ0bDgyMjV6NF9yZl93YWtldXA7CiAJRE1FU0dXKCIqKlBMRUFTRSoqIFJFUE9SVCBTVUNDRVNTRlVML1VOU1VDQ0VTU0ZVTCBUTyBSZWFsdGVrISIpOwpAQCAtMzAxMCw3ICsyOTIxLDYgQEAKIAlwcml2LT5yZl9zZXRfY2hhbiA9IHJ0bDgyMjV6Ml9yZl9zZXRfY2hhbjsKIAlwcml2LT5yZl9zZXRfc2VucyA9IE5VTEw7CiAKLQogCWlmICgwIT1hbGxvY19yeF9kZXNjX3JpbmcoZGV2LCBwcml2LT5yeGJ1ZmZlcnNpemUsIHByaXYtPnJ4cmluZ2NvdW50KSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTMwNDIsMTEgKzI5NTIsNyBAQAogCQkJCSAgVFhfQkVBQ09OX1JJTkdfQUREUikpCiAJCXJldHVybiAtRU5PTUVNOwogCi0jaWYgIWRlZmluZWQoU0FfU0hJUlEpCiAgICAgICAgIGlmKHJlcXVlc3RfaXJxKGRldi0+aXJxLCAodm9pZCAqKXJ0bDgxODBfaW50ZXJydXB0LCBJUlFGX1NIQVJFRCwgZGV2LT5uYW1lLCBkZXYpKXsKLSNlbHNlCi0gICAgICAgIGlmKHJlcXVlc3RfaXJxKGRldi0+aXJxLCAodm9pZCAqKXJ0bDgxODBfaW50ZXJydXB0LCBTQV9TSElSUSwgZGV2LT5uYW1lLCBkZXYpKXsKLSNlbmRpZgogICAgICAgICAgICAgICAgIERNRVNHRSgiRXJyb3IgYWxsb2NhdGluZyBJUlEgJWQiLGRldi0+aXJxKTsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAJfWVsc2V7CkBAIC0zMTY5LDQzICszMDc1LDYgQEAKIAlydGw4MTg1X3dyaXRlX3BoeShkZXYsIGFkciwgZGF0YSB8IDB4MTAwMDApOwogfQogCi0vKiA3MCozID0gMjEwIG1zCi0gKiBJIGhvcGUgdGhpcyBpcyBlbm91Z3RoCi0gKi8KLSNkZWZpbmUgTUFYX1BIWSA3MAotdm9pZCB3cml0ZV9waHkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggYWRyLCB1OCBkYXRhKQotewotCXUzMiBwaHk7Ci0JaW50IGk7Ci0KLQlwaHkgPSAweGZmMDAwMDsKLQlwaHkgfD0gYWRyOwotCXBoeSB8PSAweDgwOyAvKiB0aGlzIHNob3VsZCBlbmFibGUgd3JpdGluZyAqLwotCXBoeSB8PSAoZGF0YTw8OCk7Ci0KLQkvL1BIWV9BRFIsIFBIWV9SIGFuZCBQSFlfVyAgYXJlIGNvbnRpZyBhbmQgdHJlYXRlZCBhcyBvbmUgZHdvcmQKLQl3cml0ZV9uaWNfZHdvcmQoZGV2LFBIWV9BRFIsIHBoeSk7Ci0KLQlwaHk9IDB4ZmZmZjAwOwotCXBoeSB8PSBhZHI7Ci0KLQl3cml0ZV9uaWNfZHdvcmQoZGV2LFBIWV9BRFIsIHBoeSk7Ci0JZm9yKGk9MDtpPE1BWF9QSFk7aSsrKXsKLQkJcGh5PXJlYWRfbmljX2R3b3JkKGRldixQSFlfQURSKTsKLQkJcGh5PSBwaHkgJiAweGZmMDAwMDsKLQkJcGh5PSBwaHkgPj4gMTY7Ci0JCWlmKHBoeSA9PSBkYXRhKXsgLy9TVUNDRVNTIQotCQkJZm9yY2VfcGNpX3Bvc3RpbmcoZGV2KTsKLQkJCW1kZWxheSgzKTsgLy9yYW5kb20gdmFsdWUKLQkJCXJldHVybjsKLQkJfWVsc2V7Ci0JCQlmb3JjZV9wY2lfcG9zdGluZyhkZXYpOwotCQkJbWRlbGF5KDMpOyAvL3JhbmRvbSB2YWx1ZQotCQl9Ci0JfQotCURNRVNHVyAoIlBoeSB3cml0aW5nICV4ICV4IGZhaWxlZCEiLCBhZHIsZGF0YSk7Ci19Ci0KIHZvaWQgcnRsODE4NV9zZXRfcmF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWludCBpOwpAQCAtMzMzNSw3ICszMjA0LDYgQEAKIH0KIC8vCiAvLyBDaGFuZ2UgY3VycmVudCBhbmQgZGVmYXVsdCBwcmVhbWJsZSBtb2RlLgotLy8gMjAwNS4wMS4wNiwgYnkgcmNuamtvLgogLy8KIGJvb2wKIE1nbnRBY3RTZXRfODAyXzExX1Bvd2VyU2F2ZU1vZGUoCkBAIC0zNDU0LDcgKzMzMjIsNiBAQAogCU1nbnRMaW5rS2VlcEFsaXZlKHByaXYpOwogCiAJLy9ZSixhZGQsMDgwODI4LGZvciBMUFMKLSNpZmRlZiBFTkFCTEVfTFBTCiAJaWYgKHByaXYtPlBvd2VyUHJvZmlsZSA9PSBQT1dFUl9QUk9GSUxFX0JBVFRFUlkpCiAJCXByaXYtPmJMZWlzdXJlUHMgPSB0cnVlOwogCWVsc2UgaWYgKHByaXYtPlBvd2VyUHJvZmlsZSA9PSBQT1dFUl9QUk9GSUxFX0FDKSB7CkBAIC0zNDY0LDcgKzMzMzEsNiBAQAogCiAJaWYocHJpdi0+aWVlZTgwMjExLT5zdGF0ZSA9PSBJRUVFODAyMTFfTElOS0VEKXsKIAkJcHJpdi0+bGlua19kZXRlY3QuTnVtUnhPa0luUGVyaW9kID0gcHJpdi0+aWVlZTgwMjExLT5OdW1SeERhdGFJblBlcmlvZDsKLQkJLy9wcmludGsoIlR4T2s9JWQgUnhPaz0lZFxuIiwgcHJpdi0+bGlua19kZXRlY3QuTnVtVHhPa0luUGVyaW9kLCBwcml2LT5saW5rX2RldGVjdC5OdW1SeE9rSW5QZXJpb2QpOwogCQlpZigJcHJpdi0+bGlua19kZXRlY3QuTnVtUnhPa0luUGVyaW9kPiA2NjYgfHwKIAkJCXByaXYtPmxpbmtfZGV0ZWN0Lk51bVR4T2tJblBlcmlvZD4gNjY2ICkgewogCQkJYkJ1c3lUcmFmZmljID0gdHJ1ZTsKQEAgLTM0ODEsNyArMzM0Nyw2IEBACiAJCQlMZWlzdXJlUFNMZWF2ZShwcml2KTsKIAl9IGVsc2UKIAkJTGVpc3VyZVBTTGVhdmUocHJpdik7Ci0jZW5kaWYKIAlwcml2LT5saW5rX2RldGVjdC5iQnVzeVRyYWZmaWMgPSBiQnVzeVRyYWZmaWM7CiAJcHJpdi0+bGlua19kZXRlY3QuTnVtUnhPa0luUGVyaW9kID0gMDsKIAlwcml2LT5saW5rX2RldGVjdC5OdW1UeE9rSW5QZXJpb2QgPSAwOwpAQCAtMzUwMywxNiArMzM2OCwxMSBAQAogCQlpZihwcml2LT5pZWVlODAyMTEtPml3X21vZGUgPT0gSVdfTU9ERV9BREhPQykKIAkJCUlQU0xlYXZlKGRldik7CiAJfQotI2lmZGVmIFJBVEVfQURBUFQKICAgICAgICB0aW1lcl9yYXRlX2FkYXB0aXZlKCh1bnNpZ25lZCBsb25nKWRldik7Ci0jZW5kaWYKIAl3YXRjaF9kb2dfYWRhcHRpdmUoKHVuc2lnbmVkIGxvbmcpZGV2KTsKLSNpZmRlZiBTV19BTlRFCiAgICAgICAgIGlmKHByaXYtPmJTd0FudGVubmFEaXZlcml0eSkKIAkJCVN3QW50ZW5uYURpdmVyc2l0eVRpbWVyQ2FsbGJhY2soZGV2KTsKLSNlbmRpZgogCWllZWU4MDIxMV9zb2Z0bWFjX3N0YXJ0X3Byb3RvY29sKHByaXYtPmllZWU4MDIxMSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtMzc0OCw3ICszNjA4LDcgQEAKIAlkZXYtPndpcmVsZXNzX2hhbmRsZXJzID0gJnI4MTgwX3d4X2hhbmRsZXJzX2RlZjsKIAogCWRldi0+dHlwZT1BUlBIUkRfRVRIRVI7Ci0JZGV2LT53YXRjaGRvZ190aW1lbyA9IEhaKjM7IC8vYWRkZWQgYnkgZGF2aWQgd29vLCAyMDA3LjEyLjEzCisJZGV2LT53YXRjaGRvZ190aW1lbyA9IEhaKjM7CiAKIAlpZiAoZGV2X2FsbG9jX25hbWUoZGV2LCBpZm5hbWUpIDwgMCl7CiAgICAgICAgICAgICAgICAgRE1FU0coIk9vcHM6IGRldm5hbWUgYWxyZWFkeSB0YWtlbiEgVHJ5aW5nIHdsYW4lJWQuLi5cbiIpOwpAQCAtMzg2NCw4ICszNzI0LDcgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJcbkxpbnV4IGtlcm5lbCBkcml2ZXIgZm9yIFJUTDgxODAgXAotLyBSVEw4MTg1IGJhc2VkIFdMQU4gY2FyZHNcbiIpOworCXByaW50ayhLRVJOX0lORk8gIlxuTGludXgga2VybmVsIGRyaXZlciBmb3IgUlRMODE4MCAvIFJUTDgxODUgYmFzZWQgV0xBTiBjYXJkc1xuIik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiQ29weXJpZ2h0IChjKSAyMDA0LTIwMDUsIEFuZHJlYSBNZXJlbGxvXG4iKTsKIAlETUVTRygiSW5pdGlhbGl6aW5nIG1vZHVsZSIpOwogCURNRVNHKCJXaXJlbGVzcyBleHRlbnNpb25zIHZlcnNpb24gJWQiLCBXSVJFTEVTU19FWFQpOwpAQCAtNDIzNiw2MCArNDA5NSw1MSBAQAogICAgICAgICBzdGF0aWMgY2hhciAqZW52cFtdID0geyJIT01FPS8iLCAiVEVSTT1saW51eCIsICJQQVRIPS91c3IvYmluOi9iaW4iLCBOVUxMfTsKIAlzdGF0aWMgaW50IHJlYWRmX2NvdW50ID0gMDsKIAotI2lmZGVmIEVOQUJMRV9MUFMKIAlpZihyZWFkZl9jb3VudCAlIDEwID09IDApCiAJCXByaXYtPlBvd2VyUHJvZmlsZSA9IHJlYWRfYWNhZGFwdGVyX2ZpbGUoIi9wcm9jL2FjcGkvYWNfYWRhcHRlci9BQzAvc3RhdGUiKTsKIAogCXJlYWRmX2NvdW50ID0gKHJlYWRmX2NvdW50KzEpJTB4ZmZmZjsKLSNlbmRpZgotCQl7Ci0JCQkvLyBXZSBzaG91bGQgdHVybiBvZmYgTEVEIGJlZm9yZSBwb2xsaW5nIEZGNTFbNF0uCisJLyogV2Ugc2hvdWxkIHR1cm4gb2ZmIExFRCBiZWZvcmUgcG9sbGluZyBGRjUxWzRdLiAqLwogCi0JCQkvL1R1cm4gb2ZmIExFRC4KLQkJCWJ0UFNSID0gcmVhZF9uaWNfYnl0ZShkZXYsIFBTUik7Ci0JCQl3cml0ZV9uaWNfYnl0ZShkZXYsIFBTUiwgKGJ0UFNSICYgfkJJVDMpKTsKKwkvKiBUdXJuIG9mZiBMRUQuICovCisJYnRQU1IgPSByZWFkX25pY19ieXRlKGRldiwgUFNSKTsKKwl3cml0ZV9uaWNfYnl0ZShkZXYsIFBTUiwgKGJ0UFNSICYgfkJJVDMpKTsKIAotCQkJLy9JdCBuZWVkIHRvIGRlbGF5IDR1cyBzdWdnZXN0ZWQgYnkgSm9uZywgMjAwOC0wMS0xNgotCQkJdWRlbGF5KDQpOworCS8qIEl0IG5lZWQgdG8gZGVsYXkgNHVzIHN1Z2dlc3RlZCBieSBKb25nLCAyMDA4LTAxLTE2ICovCisJdWRlbGF5KDQpOwogCi0JCQkvL0hXIHJhZGlvIE9uL09mZiBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mIEZGNTFbNF0oY29uZmlnMCkKLQkJCWJ0Q29uZmlnMCA9IGJ0UFNSID0gcmVhZF9uaWNfYnl0ZShkZXYsIENPTkZJRzApOworCS8qIEhXIHJhZGlvIE9uL09mZiBhY2NvcmRpbmcgdG8gdGhlIHZhbHVlIG9mIEZGNTFbNF0oY29uZmlnMCkgKi8KKwlidENvbmZpZzAgPSBidFBTUiA9IHJlYWRfbmljX2J5dGUoZGV2LCBDT05GSUcwKTsKIAotCQkJLy9UdXJuIG9uIExFRC4KLQkJCXdyaXRlX25pY19ieXRlKGRldiwgUFNSLCBidFBTUnwgQklUMyk7CisJZVJmUG93ZXJTdGF0ZVRvU2V0ID0gKGJ0Q29uZmlnMCAmIEJJVDQpID8gIGVSZk9uIDogZVJmT2ZmOwogCi0JCQllUmZQb3dlclN0YXRlVG9TZXQgPSAoYnRDb25maWcwICYgQklUNCkgPyAgZVJmT24gOiBlUmZPZmY7CisJLyogVHVybiBMRUQgYmFjayBvbiB3aGVuIHJhZGlvIGVuYWJsZWQgKi8KKwlpZiAoZVJmUG93ZXJTdGF0ZVRvU2V0ID09IGVSZk9uKQorCQl3cml0ZV9uaWNfYnl0ZShkZXYsIFBTUiwgYnRQU1IgfCBCSVQzKTsKIAotCQkJaWYoKHByaXYtPmllZWU4MDIxMS0+Ykh3UmFkaW9PZmYgPT0gdHJ1ZSkgJiYgKGVSZlBvd2VyU3RhdGVUb1NldCA9PSBlUmZPbikpCi0JCQl7Ci0JCQkJcHJpdi0+aWVlZTgwMjExLT5iSHdSYWRpb09mZiA9IGZhbHNlOwotCQkJCWJBY3R1YWxseVNldCA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlIGlmKChwcml2LT5pZWVlODAyMTEtPmJId1JhZGlvT2ZmID09IGZhbHNlKSAmJiAoZVJmUG93ZXJTdGF0ZVRvU2V0ID09IGVSZk9mZikpCi0JCQl7Ci0JCQkJcHJpdi0+aWVlZTgwMjExLT5iSHdSYWRpb09mZiA9IHRydWU7Ci0JCQkJYkFjdHVhbGx5U2V0ID0gdHJ1ZTsKLQkJCX0KKwlpZiAoKHByaXYtPmllZWU4MDIxMS0+Ykh3UmFkaW9PZmYgPT0gdHJ1ZSkgJiYKKwkgICAoZVJmUG93ZXJTdGF0ZVRvU2V0ID09IGVSZk9uKSkgeworCQlwcml2LT5pZWVlODAyMTEtPmJId1JhZGlvT2ZmID0gZmFsc2U7CisJCWJBY3R1YWxseVNldCA9IHRydWU7CisJfSBlbHNlIGlmICgocHJpdi0+aWVlZTgwMjExLT5iSHdSYWRpb09mZiA9PSBmYWxzZSkgJiYKKwkJICAoZVJmUG93ZXJTdGF0ZVRvU2V0ID09IGVSZk9mZikpIHsKKwkJcHJpdi0+aWVlZTgwMjExLT5iSHdSYWRpb09mZiA9IHRydWU7CisJCWJBY3R1YWxseVNldCA9IHRydWU7CisJfQogCi0JCQlpZihiQWN0dWFsbHlTZXQpCi0JCQl7Ci0JCQkJTWdudEFjdFNldF9SRl9TdGF0ZShkZXYsIGVSZlBvd2VyU3RhdGVUb1NldCwgUkZfQ0hBTkdFX0JZX0hXKTsKKwlpZiAoYkFjdHVhbGx5U2V0KSB7CisJCU1nbnRBY3RTZXRfUkZfU3RhdGUoZGV2LCBlUmZQb3dlclN0YXRlVG9TZXQsIFJGX0NIQU5HRV9CWV9IVyk7CiAKLQkJCQkvKiBUbyB1cGRhdGUgdGhlIFVJIHN0YXR1cyBmb3IgUG93ZXIgc3RhdHVzIGNoYW5nZWQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJpdi0+aWVlZTgwMjExLT5iSHdSYWRpb09mZiA9PSB0cnVlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMV0gPSAiUkZPRkYiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYoIXByaXYtPlJmT2ZmUmVhc29uKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndlsxXSA9ICJSRk9OIjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2Vsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgIGFyZ3ZbMV0gPSAiUkZPRkYiOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZbMF0gPSBSYWRpb1Bvd2VyUGF0aDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndlsyXSA9IE5VTEw7CisJCS8qIFRvIHVwZGF0ZSB0aGUgVUkgc3RhdHVzIGZvciBQb3dlciBzdGF0dXMgY2hhbmdlZCAqLworCQlpZiAocHJpdi0+aWVlZTgwMjExLT5iSHdSYWRpb09mZiA9PSB0cnVlKQorCQkJYXJndlsxXSA9ICJSRk9GRiI7CisJCWVsc2UKKwkJCWFyZ3ZbMV0gPSAiUkZPTiI7CisJCWFyZ3ZbMF0gPSBSYWRpb1Bvd2VyUGF0aDsKKwkJYXJndlsyXSA9IE5VTEw7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbF91c2VybW9kZWhlbHBlcihSYWRpb1Bvd2VyUGF0aCxhcmd2LGVudnAsMSk7Ci0JCQl9Ci0JCX0KKwkJY2FsbF91c2VybW9kZWhlbHBlcihSYWRpb1Bvd2VyUGF0aCwgYXJndiwgZW52cCwgMSk7CisJfQogfQogCiBzdGF0aWMgdTggcmVhZF9hY2FkYXB0ZXJfZmlsZShjaGFyICpmaWxlbmFtZSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfZG0uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfZG0uYwppbmRleCBjYmNhNThkLi5mYzQ5MDc4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX2RtLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9kbS5jCkBAIC0yODIsMzAgKzI4MiwxMyBAQAogLy8JCURpc3BhdGNoIERJRyBpbXBsZW1lbnRhdGlvbiBhY2NvcmRpbmcgdG8gUkYuCiAvLwogdm9pZAotRHluYW1pY0luaXRHYWluKAotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYKLQkpCitEeW5hbWljSW5pdEdhaW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0KLQlzd2l0Y2gocHJpdi0+cmZfY2hpcCkKLQl7Ci0JCWNhc2UgUkZfWkVCUkEyOiAgLy8gW0FubmllV29ya2Fyb3VuZF0gRm9yIFplYnJhMiwgMjAwNS0wOC0wMS4KLQkJY2FzZSBSRl9aRUJSQTQ6Ci0JCQlESUdfWmVicmEoIGRldiApOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXByaW50aygiRHluYW1pY0luaXRHYWluKCk6IHVua25vd24gUkZDaGlwSUQoJWQpICEhIVxuIiwgcHJpdi0+cmZfY2hpcCk7Ci0JCQlicmVhazsKLQl9CisJRElHX1plYnJhKGRldik7CiB9CiAKIHZvaWQgcnRsODE4MF9od19kaWdfd3EgKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLS8vICAgICAgc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHI4MTgwX3ByaXYsIHdhdGNoX2RvZ193cSk7Ci0vLyAgICAgIHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogaWVlZSA9IChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSopCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSwgd2F0Y2hfZG9nX3dxKTsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrICpkd29yayA9IHRvX2RlbGF5ZWRfd29yayh3b3JrKTsKICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBjb250YWluZXJfb2YoZHdvcmssc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsaHdfZGlnX3dxKTsKICAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGllZWUtPmRldjsKQEAgLTEzMTAsNDQgKzEyOTMsMjQgQEAKIAlzd2l0Y2godTFiQW50ZW5uYUluZGV4KQogCXsKIAljYXNlIDA6Ci0JCXN3aXRjaChwcml2LT5yZl9jaGlwKQotCQl7Ci0JCWNhc2UgUkZfWkVCUkEyOgotCQljYXNlIFJGX1pFQlJBNDoKLQkJCS8vIE1hYyByZWdpc3RlciwgbWFpbiBhbnRlbm5hCi0JCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEFOVFNFTCwgMHgwMyk7Ci0JCQkvL2Jhc2UgYmFuZAotCQkJd3JpdGVfcGh5X2NjayhkZXYsMHgxMSwgMHg5Yik7IC8vIENvbmZpZyBDQ0sgUlggYW50ZW5uYS4KLQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwZCwgMHg1Yyk7IC8vIENvbmZpZyBPRkRNIFJYIGFudGVubmEuCisJCS8qIE1hYyByZWdpc3RlciwgbWFpbiBhbnRlbm5hICovCisJCXdyaXRlX25pY19ieXRlKGRldiwgQU5UU0VMLCAweDAzKTsKKwkJLyogYmFzZSBiYW5kICovCisJCXdyaXRlX3BoeV9jY2soZGV2LCAweDExLCAweDliKTsgLyogQ29uZmlnIENDSyBSWCBhbnRlbm5hLiAqLworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MGQsIDB4NWMpOyAvKiBDb25maWcgT0ZETSBSWCBhbnRlbm5hLiAqLwogCi0KLQkJCWJBbnRlbm5hU3dpdGNoZWQgPSB0cnVlOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXByaW50aygiU2V0QW50ZW5uYTgxODU6IHVua25vd24gUkZDaGlwSUQoJWQpXG4iLCBwcml2LT5yZl9jaGlwKTsKLQkJCWJyZWFrOwotCQl9CisJCWJBbnRlbm5hU3dpdGNoZWQgPSB0cnVlOwogCQlicmVhazsKIAogCWNhc2UgMToKLQkJc3dpdGNoKHByaXYtPnJmX2NoaXApCi0JCXsKLQkJY2FzZSBSRl9aRUJSQTI6Ci0JCWNhc2UgUkZfWkVCUkE0OgotCQkJLy8gTWFjIHJlZ2lzdGVyLCBhdXggYW50ZW5uYQotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBBTlRTRUwsIDB4MDApOwotCQkJLy9iYXNlIGJhbmQKLQkJCXdyaXRlX3BoeV9jY2soZGV2LCAweDExLCAweGJiKTsgLy8gQ29uZmlnIENDSyBSWCBhbnRlbm5hLgotCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDBkLCAweDU0KTsgLy8gQ29uZmlnIE9GRE0gUlggYW50ZW5uYS4KKwkJLyogTWFjIHJlZ2lzdGVyLCBhdXggYW50ZW5uYSAqLworCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEFOVFNFTCwgMHgwMCk7CisJCS8qIGJhc2UgYmFuZCAqLworCQl3cml0ZV9waHlfY2NrKGRldiwgMHgxMSwgMHhiYik7IC8qIENvbmZpZyBDQ0sgUlggYW50ZW5uYS4gKi8KKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDBkLCAweDU0KTsgLyogQ29uZmlnIE9GRE0gUlggYW50ZW5uYS4gKi8KIAotCQkJYkFudGVubmFTd2l0Y2hlZCA9IHRydWU7Ci0JCQlicmVhazsKKwkJYkFudGVubmFTd2l0Y2hlZCA9IHRydWU7CiAKLQkJZGVmYXVsdDoKLQkJCXByaW50aygiU2V0QW50ZW5uYTgxODU6IHVua25vd24gUkZDaGlwSUQoJWQpXG4iLCBwcml2LT5yZl9jaGlwKTsKLQkJCWJyZWFrOwotCQl9CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfcnRsODIyNXoyLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTgwX3J0bDgyMjV6Mi5jCmluZGV4IGFmZTEwZjAuLjZlZGY1YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODBfcnRsODIyNXoyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4MF9ydGw4MjI1ejIuYwpAQCAtODU0LDEzNCArODU0LDQ4IEBACiAJYnRDb25maWczID0gcmVhZF9uaWNfYnl0ZShkZXYsIENPTkZJRzMpOwogCXdyaXRlX25pY19ieXRlKGRldiwgQ09ORklHMywgKGJ0Q29uZmlnMyB8IENPTkZJRzNfUEFSTV9FbikpOwogCi0Jc3dpdGNoIChwcml2LT5yZl9jaGlwKSB7Ci0JY2FzZSBSRl9aRUJSQTI6Ci0JCXN3aXRjaCAoZVJGUG93ZXJTdGF0ZSkgewotCQljYXNlIGVSZk9uOgotCQkJUkZfV3JpdGVSZWcoZGV2LDB4NCwweDlGRik7CisJc3dpdGNoIChlUkZQb3dlclN0YXRlKSB7CisJY2FzZSBlUmZPbjoKKwkJd3JpdGVfbmljX3dvcmQoZGV2LCAweDM3QywgMHgwMEVDKTsKIAotCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgQU5BUEFSQU0sIEFOQVBBUk1fT04pOwotCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgQU5BUEFSQU0yLCBBTkFQQVJNMl9PTik7CisJCS8qIHR1cm4gb24gQUZFICovCisJCXdyaXRlX25pY19ieXRlKGRldiwgMHg1NCwgMHgwMCk7CisJCXdyaXRlX25pY19ieXRlKGRldiwgMHg2MiwgMHgwMCk7CiAKLQkJCXdyaXRlX25pY19ieXRlKGRldiwgQ09ORklHNCwgcHJpdi0+UkZQcm9nVHlwZSk7CisJCS8qIHR1cm4gb24gUkYgKi8KKwkJUkZfV3JpdGVSZWcoZGV2LCAweDAsIDB4MDA5Zik7IHVkZWxheSg1MDApOworCQlSRl9Xcml0ZVJlZyhkZXYsIDB4NCwgMHgwOTcyKTsgdWRlbGF5KDUwMCk7CiAKLQkJCS8qIHR1cm4gb24gQ0NLIGFuZCBPRkRNICovCi0JCQl1MWJUbXAgPSByZWFkX25pY19ieXRlKGRldiwgMHgyNEUpOwotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCAweDI0RSwgKHUxYlRtcCAmICh+KEJJVDUgfCBCSVQ2KSkpKTsKLQkJCWJyZWFrOwotCQljYXNlIGVSZlNsZWVwOgotCQkJYnJlYWs7Ci0JCWNhc2UgZVJmT2ZmOgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQliUmVzdWx0ID0gZmFsc2U7Ci0JCQlicmVhazsKLQkJfQorCQkvKiB0dXJuIG9uIFJGIGFnYWluICovCisJCVJGX1dyaXRlUmVnKGRldiwgMHgwLCAweDAwOWYpOyB1ZGVsYXkoNTAwKTsKKwkJUkZfV3JpdGVSZWcoZGV2LCAweDQsIDB4MDk3Mik7IHVkZWxheSg1MDApOworCisJCS8qIHR1cm4gb24gQkIgKi8KKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDEwLCAweDQwKTsKKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDEyLCAweDQwKTsKKworCQkvKiBBdm9pZCBwb3dlciBkb3duIGF0IGluaXQgdGltZS4gKi8KKwkJd3JpdGVfbmljX2J5dGUoZGV2LCBDT05GSUc0LCBwcml2LT5SRlByb2dUeXBlKTsKKworCQl1MWJUbXAgPSByZWFkX25pY19ieXRlKGRldiwgMHgyNEUpOworCQl3cml0ZV9uaWNfYnl0ZShkZXYsIDB4MjRFLCAodTFiVG1wICYgKH4oQklUNSB8IEJJVDYpKSkpOwogCQlicmVhazsKLQljYXNlIFJGX1pFQlJBNDoKLQkJc3dpdGNoIChlUkZQb3dlclN0YXRlKSB7Ci0JCWNhc2UgZVJmT246Ci0JCQl3cml0ZV9uaWNfd29yZChkZXYsIDB4MzdDLCAweDAwRUMpOwotCi0JCQkvKiB0dXJuIG9uIEFGRSAqLwotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCAweDU0LCAweDAwKTsKLQkJCXdyaXRlX25pY19ieXRlKGRldiwgMHg2MiwgMHgwMCk7Ci0KLQkJCS8qIHR1cm4gb24gUkYgKi8KLQkJCVJGX1dyaXRlUmVnKGRldiwgMHgwLCAweDAwOWYpOyB1ZGVsYXkoNTAwKTsKLQkJCVJGX1dyaXRlUmVnKGRldiwgMHg0LCAweDA5NzIpOyB1ZGVsYXkoNTAwKTsKLQotCQkJLyogdHVybiBvbiBSRiBhZ2FpbiAqLwotCQkJUkZfV3JpdGVSZWcoZGV2LCAweDAsIDB4MDA5Zik7IHVkZWxheSg1MDApOwotCQkJUkZfV3JpdGVSZWcoZGV2LCAweDQsIDB4MDk3Mik7IHVkZWxheSg1MDApOwotCi0JCQkvKiB0dXJuIG9uIEJCICovCi0JCQl3cml0ZV9waHlfb2ZkbShkZXYsMHgxMCwweDQwKTsKLQkJCXdyaXRlX3BoeV9vZmRtKGRldiwweDEyLDB4NDApOwotCi0JCQkvKiBBdm9pZCBwb3dlciBkb3duIGF0IGluaXQgdGltZS4gKi8KLQkJCXdyaXRlX25pY19ieXRlKGRldiwgQ09ORklHNCwgcHJpdi0+UkZQcm9nVHlwZSk7Ci0KLQkJCXUxYlRtcCA9IHJlYWRfbmljX2J5dGUoZGV2LCAweDI0RSk7Ci0JCQl3cml0ZV9uaWNfYnl0ZShkZXYsIDB4MjRFLCAodTFiVG1wICYgKH4oQklUNSB8IEJJVDYpKSkpOwotCQkJYnJlYWs7Ci0JCWNhc2UgZVJmU2xlZXA6Ci0JCQlmb3IgKFF1ZXVlSUQgPSAwLCBpID0gMDsgUXVldWVJRCA8IDY7KSB7Ci0JCQkJaWYgKGdldF9jdXJyX3R4X2ZyZWVfZGVzYyhkZXYsIFF1ZXVlSUQpID09IHByaXYtPnR4cmluZ2NvdW50KSB7Ci0JCQkJCVF1ZXVlSUQrKzsKLQkJCQkJY29udGludWU7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcHJpdi0+VHhQb2xsaW5nVGltZXMgKys7Ci0JCQkJCWlmIChwcml2LT5UeFBvbGxpbmdUaW1lcyA+PSBMUFNfTUFYX1NMRUVQX1dBSVRJTkdfVElNRVNfODdTRSkgewotCQkJCQkJYkFjdGlvbkFsbG93ZWQgPSBmYWxzZTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9IGVsc2UKLQkJCQkJCXVkZWxheSgxMCk7Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoYkFjdGlvbkFsbG93ZWQpIHsKLQkJCQkvKiB0dXJuIG9mZiBCQiBSWElRIG1hdHJpeCB0byBjdXQgb2ZmIHJ4IHNpZ25hbCAqLwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxMCwgMHgwMCk7Ci0JCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDEyLCAweDAwKTsKLQotCQkJCS8qIHR1cm4gb2ZmIFJGICovCi0JCQkJUkZfV3JpdGVSZWcoZGV2LCAweDQsIDB4MDAwMCk7Ci0JCQkJUkZfV3JpdGVSZWcoZGV2LCAweDAsIDB4MDAwMCk7Ci0KLQkJCQkvKiB0dXJuIG9mZiBBRkUgZXhjZXB0IFBMTCAqLwotCQkJCXdyaXRlX25pY19ieXRlKGRldiwgMHg2MiwgMHhmZik7Ci0JCQkJd3JpdGVfbmljX2J5dGUoZGV2LCAweDU0LCAweGVjKTsKLQotCQkJCW1kZWxheSgxKTsKLQotCQkJCXsKLQkJCQkJaW50IGkgPSAwOwotCQkJCQl3aGlsZSAodHJ1ZSkgewotCQkJCQkJdTggdG1wMjRGID0gcmVhZF9uaWNfYnl0ZShkZXYsIDB4MjRmKTsKLQotCQkJCQkJaWYgKCh0bXAyNEYgPT0gMHgwMSkgfHwgKHRtcDI0RiA9PSAweDA5KSkgewotCQkJCQkJCWJUdXJuT2ZmQkIgPSB0cnVlOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQl1ZGVsYXkoMTApOwotCQkJCQkJCWkrKzsKLQkJCQkJCQlwcml2LT5UeFBvbGxpbmdUaW1lcysrOwotCi0JCQkJCQkJaWYgKHByaXYtPlR4UG9sbGluZ1RpbWVzID49IExQU19NQVhfU0xFRVBfV0FJVElOR19USU1FU184N1NFKSB7Ci0JCQkJCQkJCWJUdXJuT2ZmQkIgPSBmYWxzZTsKLQkJCQkJCQkJYnJlYWs7Ci0JCQkJCQkJfSBlbHNlCi0JCQkJCQkJCXVkZWxheSgxMCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQlpZiAoYlR1cm5PZmZCQikgewotCQkJCQkvKiB0dXJuIG9mZiBCQiAqLwotCQkJCQl1MWJUbXAgPSByZWFkX25pY19ieXRlKGRldiwgMHgyNEUpOwotCQkJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIDB4MjRFLCAodTFiVG1wIHwgQklUNSB8IEJJVDYpKTsKLQotCQkJCQkvKiB0dXJuIG9mZiBBRkUgUExMICovCi0JCQkJCXdyaXRlX25pY19ieXRlKGRldiwgMHg1NCwgMHhGQyk7Ci0JCQkJCXdyaXRlX25pY193b3JkKGRldiwgMHgzN0MsIDB4MDBGQyk7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgZVJmT2ZmOgotCQkJZm9yIChRdWV1ZUlEID0gMCwgaSA9IDA7IFF1ZXVlSUQgPCA2OykgewotCQkJCWlmIChnZXRfY3Vycl90eF9mcmVlX2Rlc2MoZGV2LCBRdWV1ZUlEKSA9PSBwcml2LT50eHJpbmdjb3VudCkgewotCQkJCQlRdWV1ZUlEKys7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXVkZWxheSgxMCk7Ci0JCQkJCWkrKzsKLQkJCQl9Ci0KLQkJCQlpZiAoaSA+PSBNQVhfRE9aRV9XQUlUSU5HX1RJTUVTXzg1QikKKwljYXNlIGVSZlNsZWVwOgorCQlmb3IgKFF1ZXVlSUQgPSAwLCBpID0gMDsgUXVldWVJRCA8IDY7KSB7CisJCQlpZiAoZ2V0X2N1cnJfdHhfZnJlZV9kZXNjKGRldiwgUXVldWVJRCkgPT0gcHJpdi0+dHhyaW5nY291bnQpIHsKKwkJCQlRdWV1ZUlEKys7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCXByaXYtPlR4UG9sbGluZ1RpbWVzKys7CisJCQkJaWYgKHByaXYtPlR4UG9sbGluZ1RpbWVzID49IExQU19NQVhfU0xFRVBfV0FJVElOR19USU1FU184N1NFKSB7CisJCQkJCWJBY3Rpb25BbGxvd2VkID0gZmFsc2U7CiAJCQkJCWJyZWFrOworCQkJCX0gZWxzZQorCQkJCQl1ZGVsYXkoMTApOwogCQkJfQorCQl9CiAKKwkJaWYgKGJBY3Rpb25BbGxvd2VkKSB7CiAJCQkvKiB0dXJuIG9mZiBCQiBSWElRIG1hdHJpeCB0byBjdXQgb2ZmIHJ4IHNpZ25hbCAqLwogCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDEwLCAweDAwKTsKIAkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxMiwgMHgwMCk7CkBAIC05OTgsMjIgKzkxMiwyMyBAQAogCiAJCQl7CiAJCQkJaW50IGkgPSAwOwotCi0JCQkJd2hpbGUgKHRydWUpCi0JCQkJeworCQkJCXdoaWxlICh0cnVlKSB7CiAJCQkJCXU4IHRtcDI0RiA9IHJlYWRfbmljX2J5dGUoZGV2LCAweDI0Zik7CiAKIAkJCQkJaWYgKCh0bXAyNEYgPT0gMHgwMSkgfHwgKHRtcDI0RiA9PSAweDA5KSkgewogCQkJCQkJYlR1cm5PZmZCQiA9IHRydWU7CiAJCQkJCQlicmVhazsKIAkJCQkJfSBlbHNlIHsKLQkJCQkJCWJUdXJuT2ZmQkIgPSBmYWxzZTsKIAkJCQkJCXVkZWxheSgxMCk7CiAJCQkJCQlpKys7Ci0JCQkJCX0KKwkJCQkJCXByaXYtPlR4UG9sbGluZ1RpbWVzKys7CiAKLQkJCQkJaWYgKGkgPiBNQVhfUE9MTElOR18yNEZfVElNRVNfODdTRSkKLQkJCQkJCWJyZWFrOworCQkJCQkJaWYgKHByaXYtPlR4UG9sbGluZ1RpbWVzID49IExQU19NQVhfU0xFRVBfV0FJVElOR19USU1FU184N1NFKSB7CisJCQkJCQkJYlR1cm5PZmZCQiA9IGZhbHNlOworCQkJCQkJCWJyZWFrOworCQkJCQkJfSBlbHNlCisJCQkJCQkJdWRlbGF5KDEwKTsKKwkJCQkJfQogCQkJCX0KIAkJCX0KIApAQCAtMTAyMiwxNSArOTM3LDY4IEBACiAJCQkJdTFiVG1wID0gcmVhZF9uaWNfYnl0ZShkZXYsIDB4MjRFKTsKIAkJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIDB4MjRFLCAodTFiVG1wIHwgQklUNSB8IEJJVDYpKTsKIAotCQkJCS8qIHR1cm4gb2ZmIEFGRSBQTEwgKDgwTSkgKi8KKwkJCQkvKiB0dXJuIG9mZiBBRkUgUExMICovCiAJCQkJd3JpdGVfbmljX2J5dGUoZGV2LCAweDU0LCAweEZDKTsKIAkJCQl3cml0ZV9uaWNfd29yZChkZXYsIDB4MzdDLCAweDAwRkMpOwogCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQliUmVzdWx0ID0gZmFsc2U7Ci0JCQlwcmludGsoIlNldFplYnJhUkZQb3dlclN0YXRlODE4NSgpOiB1bmtub3duIHN0YXRlIHRvIHNldDogMHglWCEhIVxuIiwgZVJGUG93ZXJTdGF0ZSk7Ci0JCQlicmVhazsKKwkJfQorCQlicmVhazsKKwljYXNlIGVSZk9mZjoKKwkJZm9yIChRdWV1ZUlEID0gMCwgaSA9IDA7IFF1ZXVlSUQgPCA2OykgeworCQkJaWYgKGdldF9jdXJyX3R4X2ZyZWVfZGVzYyhkZXYsIFF1ZXVlSUQpID09IHByaXYtPnR4cmluZ2NvdW50KSB7CisJCQkJUXVldWVJRCsrOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIHsKKwkJCQl1ZGVsYXkoMTApOworCQkJCWkrKzsKKwkJCX0KKworCQkJaWYgKGkgPj0gTUFYX0RPWkVfV0FJVElOR19USU1FU184NUIpCisJCQkJYnJlYWs7CisJCX0KKworCQkvKiB0dXJuIG9mZiBCQiBSWElRIG1hdHJpeCB0byBjdXQgb2ZmIHJ4IHNpZ25hbCAqLworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MTAsIDB4MDApOworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MTIsIDB4MDApOworCisJCS8qIHR1cm4gb2ZmIFJGICovCisJCVJGX1dyaXRlUmVnKGRldiwgMHg0LCAweDAwMDApOworCQlSRl9Xcml0ZVJlZyhkZXYsIDB4MCwgMHgwMDAwKTsKKworCQkvKiB0dXJuIG9mZiBBRkUgZXhjZXB0IFBMTCAqLworCQl3cml0ZV9uaWNfYnl0ZShkZXYsIDB4NjIsIDB4ZmYpOworCQl3cml0ZV9uaWNfYnl0ZShkZXYsIDB4NTQsIDB4ZWMpOworCisJCW1kZWxheSgxKTsKKworCQl7CisJCQlpbnQgaSA9IDA7CisKKwkJCXdoaWxlICh0cnVlKSB7CisJCQkJdTggdG1wMjRGID0gcmVhZF9uaWNfYnl0ZShkZXYsIDB4MjRmKTsKKworCQkJCWlmICgodG1wMjRGID09IDB4MDEpIHx8ICh0bXAyNEYgPT0gMHgwOSkpIHsKKwkJCQkJYlR1cm5PZmZCQiA9IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSB7CisJCQkJCWJUdXJuT2ZmQkIgPSBmYWxzZTsKKwkJCQkJdWRlbGF5KDEwKTsKKwkJCQkJaSsrOworCQkJCX0KKworCQkJCWlmIChpID4gTUFYX1BPTExJTkdfMjRGX1RJTUVTXzg3U0UpCisJCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKGJUdXJuT2ZmQkIpIHsKKwkJCS8qIHR1cm4gb2ZmIEJCICovCisJCQl1MWJUbXAgPSByZWFkX25pY19ieXRlKGRldiwgMHgyNEUpOworCQkJd3JpdGVfbmljX2J5dGUoZGV2LCAweDI0RSwgKHUxYlRtcCB8IEJJVDUgfCBCSVQ2KSk7CisKKwkJCS8qIHR1cm4gb2ZmIEFGRSBQTEwgKDgwTSkgKi8KKwkJCXdyaXRlX25pY19ieXRlKGRldiwgMHg1NCwgMHhGQyk7CisJCQl3cml0ZV9uaWNfd29yZChkZXYsIDB4MzdDLCAweDAwRkMpOwogCQl9CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODViX2luaXQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTg3c2UvcjgxODViX2luaXQuYwppbmRleCA1MDMwOWYyLi5hMGVjZTFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE4N3NlL3I4MTg1Yl9pbml0LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxODdzZS9yODE4NWJfaW5pdC5jCkBAIC0yMzgsMTAwICsyMzgsMTIgQEAKIAlyZXR1cm4gZGF0YTsKIH0KIAotdm9pZAotU2V0T3V0cHV0RW5hYmxlT2ZSZlBpbnMoCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldgotCSkKK3ZvaWQgU2V0T3V0cHV0RW5hYmxlT2ZSZlBpbnMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7Ci0KLQlzd2l0Y2gocHJpdi0+cmZfY2hpcCkKLQl7Ci0JY2FzZSBSRkNISVBJRF9SVEw4MjI1OgotCWNhc2UgUkZfWkVCUkEyOgotCWNhc2UgUkZfWkVCUkE0OgotCQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc0VuYWJsZSwgMHgxYmZmKTsKLQkJLy93cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc0VuYWJsZSwgMHgxZmZmKTsKLQkJYnJlYWs7Ci0JfQorCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zRW5hYmxlLCAweDFiZmYpOwogfQogCi12b2lkCi1aRUJSQV9SRlNlcmlhbFdyaXRlKAotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JdTMyCQkJZGF0YTJXcml0ZSwKLQl1OAkJCXRvdGFsTGVuZ3RoLAotCXU4CQkJbG93MmhpZ2gKLQkpCi17Ci0JVGhyZWVXaXJlUmVnCQl0d3JlZzsKLQlpbnQgCQkJCWk7Ci0JdTE2CQkJCW92YWwsb3ZhbDIsb3ZhbDM7Ci0JdTMyCQkJCW1hc2s7Ci0JdTE2CQkJCVVzaG9ydEJ1ZmZlcjsKLQotCXU4CQkJdTFiVG1wOwotCS8vIFJUTDgxODdTIEhTU0kgUmVhZC9Xcml0ZSBGdW5jdGlvbgotCXUxYlRtcCA9IHJlYWRfbmljX2J5dGUoZGV2LCBSRl9TV19DT05GSUcpOwotCXUxYlRtcCB8PSAgIFJGX1NXX0NGR19TSTsgICAvL3JlZzA4WzFdPTEgU2VyaWFsIEludGVyZmFjZShTSSkKLQl3cml0ZV9uaWNfYnl0ZShkZXYsIFJGX1NXX0NPTkZJRywgdTFiVG1wKTsKLQlVc2hvcnRCdWZmZXIgPSByZWFkX25pY193b3JkKGRldiwgUkZQaW5zT3V0cHV0KTsKLQlvdmFsID0gVXNob3J0QnVmZmVyICYgMHhmZmY4OyAvLyBXZSBzaGFsbCBjbGVhciBiaXQwLCAxLCAyIGZpcnN0LCAyMDA1LjEwLjI4LCBieSByY25qa28uCi0KLQlvdmFsMiA9IHJlYWRfbmljX3dvcmQoZGV2LCBSRlBpbnNFbmFibGUpOwotCW92YWwzID0gcmVhZF9uaWNfd29yZChkZXYsIFJGUGluc1NlbGVjdCk7Ci0KLQkvLyA8UkpfTk9URT4gMy13aXJlIHNob3VsZCBiZSBjb250cm9sZWQgYnkgSFcgd2hlbiB3ZSBmaW5pc2ggU1cgMy13aXJlIHByb2dyYW1taW5nLiAyMDA1LjA4LjEwLCBieSByY25qa28uCi0Jb3ZhbDMgJj0gMHhmZmY4OwotCi0Jd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNFbmFibGUsIChvdmFsMnwweDAwMDcpKTsgLy8gU2V0IFRvIE91dHB1dCBFbmFibGUKLQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc1NlbGVjdCwgKG92YWwzfDB4MDAwNykpOyAvLyBTZXQgVG8gU1cgU3dpdGNoCi0JdWRlbGF5KDEwKTsKLQotCS8vIEFkZCB0aGlzIHRvIGF2b2lkIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSAzLXdpcmUgY29uZmxpY3QuCi0JLy8gMjAwNS4wMy4wMSwgYnkgcmNuamtvLgotCXR3cmVnLmxvbmdEYXRhID0gMDsKLQl0d3JlZy5zdHJ1Yy5lbmFibGVCID0gMTsKLQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgKHR3cmVnLmxvbmdEYXRhfG92YWwpKTsgLy8gU2V0IFNJX0VOIChSRkxFKQotCXVkZWxheSgyKTsKLQl0d3JlZy5zdHJ1Yy5lbmFibGVCID0gMDsKLQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgKHR3cmVnLmxvbmdEYXRhfG92YWwpKTsgLy8gQ2xlYXIgU0lfRU4gKFJGTEUpCi0JdWRlbGF5KDEwKTsKLQotCW1hc2sgPSAobG93MmhpZ2gpPzB4MDE6KCh1MzIpMHgwMTw8KHRvdGFsTGVuZ3RoLTEpKTsKLQotCWZvcihpPTA7IGk8dG90YWxMZW5ndGgvMjsgaSsrKQotCXsKLQkJdHdyZWcuc3RydWMuZGF0YSA9ICgoZGF0YTJXcml0ZSZtYXNrKSE9MCkgPyAxIDogMDsKLQkJd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsICh0d3JlZy5sb25nRGF0YXxvdmFsKSk7Ci0JCXR3cmVnLnN0cnVjLmNsayA9IDE7Ci0JCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zT3V0cHV0LCAodHdyZWcubG9uZ0RhdGF8b3ZhbCkpOwotCQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgKHR3cmVnLmxvbmdEYXRhfG92YWwpKTsKLQotCQltYXNrID0gKGxvdzJoaWdoKT8obWFzazw8MSk6KG1hc2s+PjEpOwotCQl0d3JlZy5zdHJ1Yy5kYXRhID0gKChkYXRhMldyaXRlJm1hc2spIT0wKSA/IDEgOiAwOwotCQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgKHR3cmVnLmxvbmdEYXRhfG92YWwpKTsKLQkJd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsICh0d3JlZy5sb25nRGF0YXxvdmFsKSk7Ci0JCXR3cmVnLnN0cnVjLmNsayA9IDA7Ci0JCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zT3V0cHV0LCAodHdyZWcubG9uZ0RhdGF8b3ZhbCkpOwotCQltYXNrID0gKGxvdzJoaWdoKT8obWFzazw8MSk6KG1hc2s+PjEpOwotCX0KLQotCXR3cmVnLnN0cnVjLmVuYWJsZUIgPSAxOwotCXR3cmVnLnN0cnVjLmNsayA9IDA7Ci0JdHdyZWcuc3RydWMuZGF0YSA9IDA7Ci0Jd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsIHR3cmVnLmxvbmdEYXRhfG92YWwpOwotCXVkZWxheSgxMCk7Ci0KLQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgb3ZhbHwweDAwMDQpOwotCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zU2VsZWN0LCBvdmFsM3wweDAwMDApOwotCi0JU2V0T3V0cHV0RW5hYmxlT2ZSZlBpbnMoZGV2KTsKLX0KLS8vYnkgYW15Ci0KLQotaW50CitzdGF0aWMgaW50CiBId0hTU0lUaHJlZVdpcmUoCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAl1OAkJCSpwRGF0YUJ1ZiwKQEAgLTQ2OSw0MjAgKzM4MSwzMCBAQAogCiAJcmV0dXJuIGJSZXN1bHQ7CiB9Ci0vL2J5IGFteQotCi1pbnQKLUh3VGhyZWVXaXJlKAotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JdTgJCQkqcERhdGFCdWYsCi0JdTgJCQluRGF0YUJ1ZkJpdENudCwKLQlpbnQJCQliSG9sZCwKLQlpbnQJCQliV3JpdGUKLQkpCi17Ci0JaW50CWJSZXN1bHQgPSAxOwotCXU4CVRyeUNudDsKLQl1OAl1MWJUbXA7Ci0KLQlkbwotCXsKLQkJLy8gQ2hlY2sgaWYgV0UgYW5kIFJFIGFyZSBjbGVhcmVkLgotCQlmb3IoVHJ5Q250ID0gMDsgVHJ5Q250IDwgVENfM1dfUE9MTF9NQVhfVFJZX0NOVDsgVHJ5Q250KyspCi0JCXsKLQkJCXUxYlRtcCA9IHJlYWRfbmljX2J5dGUoZGV2LCBTV18zV19DTUQxKTsKLQkJCWlmKCAodTFiVG1wICYgKFNXXzNXX0NNRDFfUkV8U1dfM1dfQ01EMV9XRSkpID09IDAgKQotCQkJewotCQkJCWJyZWFrOwotCQkJfQotCQkJdWRlbGF5KDEwKTsKLQkJfQotCQlpZiAoVHJ5Q250ID09IFRDXzNXX1BPTExfTUFYX1RSWV9DTlQpCi0JCQlwYW5pYygiSHdUaHJlZVdpcmUoKTogQ21kUmVnOiAlI1ggUkV8V0UgYml0cyBhcmUgbm90IGNsZWFyISFcbiIsIHUxYlRtcCk7Ci0KLQkJLy8gRmlsbCB1cCBkYXRhIGJ1ZmZlciBmb3Igd3JpdGUgb3BlcmF0aW9uLgotCQlpZihuRGF0YUJ1ZkJpdENudCA9PSAxNikKLQkJewotCQkJd3JpdGVfbmljX3dvcmQoZGV2LCBTV18zV19EQjAsICooKHUxNiAqKXBEYXRhQnVmKSk7Ci0JCX0KLQkJZWxzZSBpZihuRGF0YUJ1ZkJpdENudCA9PSA2NCkKLQkJewotCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgU1dfM1dfREIwLCAqKCh1MzIgKilwRGF0YUJ1ZikpOwotCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgU1dfM1dfREIxLCAqKCh1MzIgKikocERhdGFCdWYgKyA0KSkpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJaW50IGlkeDsKLQkJCWludCBCeXRlQ250ID0gbkRhdGFCdWZCaXRDbnQgLyA4OwotCi0JCQlpZiAoKG5EYXRhQnVmQml0Q250ICUgOCkgIT0gMCkKLQkJCQlwYW5pYygiSHdUaHJlZVdpcmUoKTogbkRhdGFCdWZCaXRDbnQoJWQpIHNob3VsZCBiZSBtdWx0aXBsZSBvZiA4ISEhXG4iLAotCQkJCW5EYXRhQnVmQml0Q250KTsKLQotCQkJaWYgKG5EYXRhQnVmQml0Q250ID4gNjQpCi0JCQkJcGFuaWMoIkh3VGhyZWVXaXJlKCk6IG5EYXRhQnVmQml0Q250KCVkKSBzaG91bGQgPD0gNjQhISFcbiIsCi0JCQkJbkRhdGFCdWZCaXRDbnQpOwotCi0JCQlmb3IoaWR4ID0gMDsgaWR4IDwgQnl0ZUNudDsgaWR4KyspCi0JCQl7Ci0JCQkJd3JpdGVfbmljX2J5dGUoZGV2LCAoU1dfM1dfREIwK2lkeCksICoocERhdGFCdWYraWR4KSk7Ci0JCQl9Ci0JCX0KLQotCQkvLyBGaWxsIHVwIGxlbmd0aCBmaWVsZC4KLQkJdTFiVG1wID0gKHU4KShuRGF0YUJ1ZkJpdENudCAtIDEpOyAvLyBOdW1iZXIgb2YgYml0cyAtIDEuCi0JCWlmKGJIb2xkKQotCQkJdTFiVG1wIHw9IFNXXzNXX0NNRDBfSE9MRDsKLQkJd3JpdGVfbmljX2J5dGUoZGV2LCBTV18zV19DTUQwLCB1MWJUbXApOwotCi0JCS8vIFNldCB1cCBjb21tYW5kOiBXRSBvciBSRS4KLQkJaWYoYldyaXRlKQotCQl7Ci0JCQl3cml0ZV9uaWNfYnl0ZShkZXYsIFNXXzNXX0NNRDEsIFNXXzNXX0NNRDFfV0UpOwotCQl9Ci0JCWVsc2UKLQkJewotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBTV18zV19DTUQxLCBTV18zV19DTUQxX1JFKTsKLQkJfQotCi0JCS8vIENoZWNrIGlmIFdFIGFuZCBSRSBhcmUgY2xlYXJlZCBhbmQgRE9ORSBpcyBzZXQuCi0JCWZvcihUcnlDbnQgPSAwOyBUcnlDbnQgPCBUQ18zV19QT0xMX01BWF9UUllfQ05UOyBUcnlDbnQrKykKLQkJewotCQkJdTFiVG1wID0gcmVhZF9uaWNfYnl0ZShkZXYsIFNXXzNXX0NNRDEpOwotCQkJaWYoICh1MWJUbXAgJiAoU1dfM1dfQ01EMV9SRXxTV18zV19DTUQxX1dFKSkgPT0gMCAmJgotCQkJCSh1MWJUbXAgJiBTV18zV19DTUQxX0RPTkUpICE9IDAgKQotCQkJewotCQkJCWJyZWFrOwotCQkJfQotCQkJdWRlbGF5KDEwKTsKLQkJfQotCQlpZihUcnlDbnQgPT0gVENfM1dfUE9MTF9NQVhfVFJZX0NOVCkKLQkJewotCQkJLy9SVF9BU1NFUlQoVHJ5Q250ICE9IFRDXzNXX1BPTExfTUFYX1RSWV9DTlQsCi0JCQkvLwkoIkh3VGhyZWVXaXJlKCk6IENtZFJlZzogJSNYIFJFfFdFIGJpdHMgYXJlIG5vdCBjbGVhciBvciBET05FIGlzIG5vdCBzZXQhIVxuIiwgdTFiVG1wKSk7Ci0JCQkvLyBXb3JrYXJvdW5kIHN1Z2dlc3RlZCBieSB3Y2NodTogY2xlYXIgV0UgaGVyZS4gMjAwNi4wNy4wNywgYnkgcmNuamtvLgotCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBTV18zV19DTUQxLCAwKTsKLQkJfQotCi0JCS8vIFJlYWQgYmFjayBkYXRhIGZvciByZWFkIG9wZXJhdGlvbi4KLQkJLy8gPFJKX1RPRE8+IEkgYW0gbm90IHN1cmUgaWYgdGhpcyBpcyBjb3JyZWN0IG91dHB1dCBmb3JtYXQgb2YgYSByZWFkIG9wZXJhdGlvbi4KLQkJaWYoYldyaXRlID09IDApCi0JCXsKLQkJCWlmKG5EYXRhQnVmQml0Q250ID09IDE2KQotCQkJewotCQkJCSooKHUxNiAqKXBEYXRhQnVmKSA9IHJlYWRfbmljX3dvcmQoZGV2LCBTV18zV19EQjApOwotCQkJfQotCQkJZWxzZSBpZihuRGF0YUJ1ZkJpdENudCA9PSA2NCkKLQkJCXsKLQkJCQkqKCh1MzIgKilwRGF0YUJ1ZikgPSByZWFkX25pY19kd29yZChkZXYsIFNXXzNXX0RCMCk7Ci0JCQkJKigodTMyICopKHBEYXRhQnVmICsgNCkpID0gcmVhZF9uaWNfZHdvcmQoZGV2LCBTV18zV19EQjEpOwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCWludCBpZHg7Ci0JCQkJaW50IEJ5dGVDbnQgPSBuRGF0YUJ1ZkJpdENudCAvIDg7Ci0KLQkJCQlpZiAoKG5EYXRhQnVmQml0Q250ICUgOCkgIT0gMCkKLQkJCQkJcGFuaWMoIkh3VGhyZWVXaXJlKCk6IG5EYXRhQnVmQml0Q250KCVkKSBzaG91bGQgYmUgbXVsdGlwbGUgb2YgOCEhIVxuIiwKLQkJCQkJbkRhdGFCdWZCaXRDbnQpOwotCi0JCQkJaWYgKG5EYXRhQnVmQml0Q250ID4gNjQpCi0JCQkJCXBhbmljKCJId1RocmVlV2lyZSgpOiBuRGF0YUJ1ZkJpdENudCglZCkgc2hvdWxkIDw9IDY0ISEhXG4iLAotCQkJCQluRGF0YUJ1ZkJpdENudCk7Ci0KLQkJCQlmb3IoaWR4ID0gMDsgaWR4IDwgQnl0ZUNudDsgaWR4KyspCi0JCQkJewotCQkJCQkqKHBEYXRhQnVmK2lkeCkgPSByZWFkX25pY19ieXRlKGRldiwgKFNXXzNXX0RCMCtpZHgpKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCX13aGlsZSgwKTsKLQotCXJldHVybiBiUmVzdWx0OwotfQotCiAKIHZvaWQKLVJGX1dyaXRlUmVnKAotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JdTgJCW9mZnNldCwKLQl1MzIJCWRhdGEKLQkpCitSRl9Xcml0ZVJlZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBvZmZzZXQsIHUzMiBkYXRhKQogewotCS8vUkZSZWcJCQlyZWc7Ci0JdTMyCQkJZGF0YTJXcml0ZTsKLQl1OAkJCWxlbjsKLQl1OAkJCWxvdzJoaWdoOwotCS8vdTMyCQkJUkZfUmVhZCA9IDA7Ci0Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOworCXUzMiBkYXRhMldyaXRlOworCXU4IGxlbjsKIAorCS8qIFB1cmUgSFcgMy13aXJlLiAqLworCWRhdGEyV3JpdGUgPSAoZGF0YSA8PCA0KSB8ICh1MzIpKG9mZnNldCAmIDB4MGYpOworCWxlbiA9IDE2OwogCi0Jc3dpdGNoKHByaXYtPnJmX2NoaXApCi0JewotCWNhc2UgUkZDSElQSURfUlRMODIyNToKLQljYXNlIFJGX1pFQlJBMjoJCS8vIEFubmllIDIwMDYtMDUtMTIuCi0JY2FzZSBSRl9aRUJSQTQ6ICAgICAgICAvL2J5IGFteQotCQlzd2l0Y2gocHJpdi0+UmVnVGhyZWVXaXJlTW9kZSkKLQkJewotCQljYXNlIFNXX1RIUkVFX1dJUkU6Ci0JCQl7IC8vIFBlcmZvcm0gU1cgMy13aXJlIHByb2dyYW1taW5nIGJ5IGRyaXZlci4KLQkJCQlkYXRhMldyaXRlID0gKGRhdGEgPDwgNCkgfCAodTMyKShvZmZzZXQgJiAweDBmKTsKLQkJCQlsZW4gPSAxNjsKLQkJCQlsb3cyaGlnaCA9IDA7Ci0JCQkJWkVCUkFfUkZTZXJpYWxXcml0ZShkZXYsIGRhdGEyV3JpdGUsIGxlbiwgbG93MmhpZ2gpOwotICAgICAgIAkJCX0KLQkJCWJyZWFrOwotCi0gCQljYXNlIEhXX1RIUkVFX1dJUkU6Ci0JCQl7IC8vIFB1cmUgSFcgMy13aXJlLgotCQkJCWRhdGEyV3JpdGUgPSAoZGF0YSA8PCA0KSB8ICh1MzIpKG9mZnNldCAmIDB4MGYpOwotCQkJCWxlbiA9IDE2OwotCQkJCUh3VGhyZWVXaXJlKAotCQkJCQlkZXYsCi0JCQkJCSh1OCAqKSgmZGF0YTJXcml0ZSksCS8vIHBEYXRhQnVmLAotCQkJCQlsZW4sCQkJCS8vIG5EYXRhQnVmQml0Q250LAotCQkJCQkwLAkJCQkJLy8gYkhvbGQsCi0JCQkJCTEpOwkJCQkJLy8gYldyaXRlCi0gICAgICAgICAJCX0KLQkJCWJyZWFrOwotCQkJY2FzZSBIV19USFJFRV9XSVJFX1BJOiAvL1BhcmFsbGVsIEludGVyZmFjZQotCQkJeyAvLyBQdXJlIEhXIDMtd2lyZS4KLQkJCQlkYXRhMldyaXRlID0gKGRhdGEgPDwgNCkgfCAodTMyKShvZmZzZXQgJiAweDBmKTsKLQkJCQlsZW4gPSAxNjsKLQkJCQkJSHdIU1NJVGhyZWVXaXJlKAotCQkJCQkJZGV2LAotCQkJCQkJKHU4KikoJmRhdGEyV3JpdGUpLAkvLyBwRGF0YUJ1ZiwKLQkJCQkJCWxlbiwJCQkJCQkvLyBuRGF0YUJ1ZkJpdENudCwKLQkJCQkJCTAsIAkJCQkJLy8gYlNJCi0JCQkJCQkxKTsgCQkJCQkvLyBiV3JpdGUKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3ByaW50aygiMzMzMzNcbiIpOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJCWNhc2UgSFdfVEhSRUVfV0lSRV9TSTogLy9TZXJpYWwgSW50ZXJmYWNlCi0JCQl7IC8vIFB1cmUgSFcgMy13aXJlLgotCQkJCWRhdGEyV3JpdGUgPSAoZGF0YSA8PCA0KSB8ICh1MzIpKG9mZnNldCAmIDB4MGYpOwotCQkJCWxlbiA9IDE2OwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiIGVudGVyICBaRUJSQV9SRlNlcmlhbFdyaXRlXG4gIik7Ci0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93MmhpZ2ggPSAwOwotLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFpFQlJBX1JGU2VyaWFsV3JpdGUoZGV2LCBkYXRhMldyaXRlLCBsZW4sIGxvdzJoaWdoKTsKLQotCQkJCUh3SFNTSVRocmVlV2lyZSgKLQkJCQkJZGV2LAotCQkJCQkodTgqKSgmZGF0YTJXcml0ZSksCS8vIHBEYXRhQnVmLAotCQkJCQlsZW4sCQkJCQkJLy8gbkRhdGFCdWZCaXRDbnQsCi0JCQkJCTEsIAkJCQkJLy8gYlNJCi0JCQkJCTEpOyAJCQkJCS8vIGJXcml0ZQotCi0vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50aygiIGV4aXQgWkVCUkFfUkZTZXJpYWxXcml0ZVxuICIpOwotCQkJfQotCQkJYnJlYWs7Ci0KLQotCQlkZWZhdWx0OgotCQkJRE1FU0dFKCJSRl9Xcml0ZVJlZygpOiBpbnZhbGlkIFJlZ1RocmVlV2lyZU1vZGUoJWQpICEhISIsIHByaXYtPlJlZ1RocmVlV2lyZU1vZGUpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0KLQlkZWZhdWx0OgotCQlETUVTR0UoIlJGX1dyaXRlUmVnKCk6IHVua25vd24gUkZDaGlwSUQ6ICUjWCIsIHByaXYtPnJmX2NoaXApOwotCQlicmVhazsKLQl9CisJSHdIU1NJVGhyZWVXaXJlKGRldiwgKHU4ICopKCZkYXRhMldyaXRlKSwgbGVuLCAxLCAxKTsKIH0KIAotCi12b2lkCi1aRUJSQV9SRlNlcmlhbFJlYWQoCi0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQl1MzIJCWRhdGEyV3JpdGUsCi0JdTgJCXdMZW5ndGgsCi0JdTMyCQkqZGF0YTJSZWFkLAotCXU4CQlyTGVuZ3RoLAotCXU4CQlsb3cyaGlnaAotCSkKK3UzMiBSRl9SZWFkUmVnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IG9mZnNldCkKIHsKLQlUaHJlZVdpcmVSZWcJdHdyZWc7Ci0JaW50CQkJCWk7Ci0JdTE2CQkJb3ZhbCxvdmFsMixvdmFsMyx0bXAsIHdSZWc4MDsKLQl1MzIJCQltYXNrOwotCXU4CQkJdTFiVG1wOwotCVRocmVlV2lyZVJlZwl0ZGF0YTsKLQkvL1BIQUxfREFUQV84MTg3CXBIYWxEYXRhID0gR2V0SGFsRGF0YTgxODcocEFkYXB0ZXIpOwotCXsgLy8gUlRMODE4N1MgSFNTSSBSZWFkL1dyaXRlIEZ1bmN0aW9uCi0JCXUxYlRtcCA9IHJlYWRfbmljX2J5dGUoZGV2LCBSRl9TV19DT05GSUcpOwotCQl1MWJUbXAgfD0gICBSRl9TV19DRkdfU0k7ICAgLy9yZWcwOFsxXT0xIFNlcmlhbCBJbnRlcmZhY2UoU0kpCi0JCXdyaXRlX25pY19ieXRlKGRldiwgUkZfU1dfQ09ORklHLCB1MWJUbXApOwotCX0KKwl1MzIgZGF0YTJXcml0ZTsKKwl1OCB3bGVuOworCXUzMiBkYXRhUmVhZDsKIAotCXdSZWc4MCA9IG92YWwgPSByZWFkX25pY193b3JkKGRldiwgUkZQaW5zT3V0cHV0KTsKLQlvdmFsMiA9IHJlYWRfbmljX3dvcmQoZGV2LCBSRlBpbnNFbmFibGUpOwotCW92YWwzID0gcmVhZF9uaWNfd29yZChkZXYsIFJGUGluc1NlbGVjdCk7Ci0KLQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc0VuYWJsZSwgb3ZhbDJ8MHhmKTsKLQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc1NlbGVjdCwgb3ZhbDN8MHhmKTsKLQotCSpkYXRhMlJlYWQgPSAwOwotCi0JLy8gV2UgbXVzdCBjbGVhciBCSVQwLTMgaGVyZSwgb3RoZXJ3aXNlLAotCS8vIFNXX0VuYWxiZSB3aWxsIGJlIHRydWUgd2hlbiB3ZSBmaXJzdCBjYWxsIFpFQlJBX1JGU2VyaWFsUmVhZCgpIGFmdGVyIDgxODdNUFZDIG9wZW4sCi0JLy8gd2hpY2ggd2lsbCBjYXVzZSB0aGUgdmFsdWUgcmVhZCBiZWNvbWUgMC4gMjAwNS4wNC4xMSwgYnkgcmNuamtvLgotCW92YWwgJj0gfjB4ZjsKLQotCS8vIEF2b2lkIGNvbGxpc2lvbiB3aXRoIGhhcmR3YXJlIHRocmVlLXdpcmUuCi0JdHdyZWcubG9uZ0RhdGEgPSAwOwotCXR3cmVnLnN0cnVjLmVuYWJsZUIgPSAxOwotCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zT3V0cHV0LCB0d3JlZy5sb25nRGF0YXxvdmFsKTsgdWRlbGF5KDQpOwotCi0JdHdyZWcubG9uZ0RhdGEgPSAwOwotCXR3cmVnLnN0cnVjLmVuYWJsZUIgPSAwOwotCXR3cmVnLnN0cnVjLmNsayA9IDA7Ci0JdHdyZWcuc3RydWMucmVhZF93cml0ZSA9IDA7Ci0Jd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsIHR3cmVnLmxvbmdEYXRhfG92YWwpOyB1ZGVsYXkoNSk7Ci0KLQltYXNrID0gKGxvdzJoaWdoKSA/IDB4MDEgOiAoKHUzMikweDAxPDwoMzItMSkpOwotCWZvcihpID0gMDsgaSA8IHdMZW5ndGgvMjsgaSsrKQotCXsKLQkJdHdyZWcuc3RydWMuZGF0YSA9ICgoZGF0YTJXcml0ZSZtYXNrKSAhPSAwKSA/IDEgOiAwOwotCQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgdHdyZWcubG9uZ0RhdGF8b3ZhbCk7IHVkZWxheSgxKTsKLQkJdHdyZWcuc3RydWMuY2xrID0gMTsKLQkJd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsIHR3cmVnLmxvbmdEYXRhfG92YWwpOyB1ZGVsYXkoMik7Ci0JCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zT3V0cHV0LCB0d3JlZy5sb25nRGF0YXxvdmFsKTsgdWRlbGF5KDIpOwotCi0JCW1hc2sgPSAobG93MmhpZ2gpID8gKG1hc2s8PDEpOiAobWFzaz4+MSk7Ci0KLQkJaWYoaSA9PSAyKQotCQl7Ci0JCQkvLyBDb21tZW50ZWQgb3V0IGJ5IEphY2tpZSwgMjAwNC4wOC4yNi4gPFJKX05PVEU+IFdlIG11c3QgY29tbWVudCBvdXQgdGhlIGZvbGxvd2luZyB0d28gbGluZXMgZm9yIHdlIGNhbm5vdCBwdWxsIGRvd24gVkNPUEROIGR1cmluZyBSRiBTZXJhaWwgUmVhZC4KLQkJCS8vUGxhdGZvcm1FRklPV3JpdGUyQnl0ZShwQWRhcHRlciwgUkZQaW5zRW5hYmxlLCAweGUpOyAgICAgLy8gdHVybiBvZmYgZGF0YSBlbmFibGUKLQkJCS8vUGxhdGZvcm1FRklPV3JpdGUyQnl0ZShwQWRhcHRlciwgUkZQaW5zU2VsZWN0LCAweGUpOwotCi0JCQl0d3JlZy5zdHJ1Yy5yZWFkX3dyaXRlPTE7Ci0JCQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgdHdyZWcubG9uZ0RhdGF8b3ZhbCk7IHVkZWxheSgyKTsKLQkJCXR3cmVnLnN0cnVjLmNsayA9IDA7Ci0JCQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgdHdyZWcubG9uZ0RhdGF8b3ZhbCk7IHVkZWxheSgyKTsKLQkJCWJyZWFrOwotCQl9Ci0JCXR3cmVnLnN0cnVjLmRhdGEgPSAoKGRhdGEyV3JpdGUmbWFzaykgIT0gMCkgPyAxOiAwOwotCQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgdHdyZWcubG9uZ0RhdGF8b3ZhbCk7IHVkZWxheSgyKTsKLQkJd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsIHR3cmVnLmxvbmdEYXRhfG92YWwpOyB1ZGVsYXkoMik7Ci0KLQkJdHdyZWcuc3RydWMuY2xrID0gMDsKLQkJd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsIHR3cmVnLmxvbmdEYXRhfG92YWwpOyB1ZGVsYXkoMSk7Ci0KLQkJbWFzayA9IChsb3cyaGlnaCkgPyAobWFzazw8MSkgOiAobWFzaz4+MSk7Ci0JfQotCi0JdHdyZWcuc3RydWMuY2xrID0gMDsKLQl0d3JlZy5zdHJ1Yy5kYXRhID0gMDsKLQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgdHdyZWcubG9uZ0RhdGF8b3ZhbCk7IHVkZWxheSgyKTsKLQltYXNrID0gKGxvdzJoaWdoKSA/IDB4MDEgOiAoKHUzMikweDAxIDw8ICgxMi0xKSk7Ci0KLQkvLwotCS8vIDA2MTAxNiwgYnkgcmNuamtvOgotCS8vIFdlIG11c3Qgc2V0IGRhdGEgcGluIHRvIEhXIGNvbnRyb2xlZCwgb3RoZXJ3aXNlIFJGIGNhbid0IGRyaXZlciBpdCBhbmQKLQkvLyB2YWx1ZSBSRiByZWdpc3RlciB3b24ndCBiZSBhYmxlIHRvIHJlYWQgYmFjayBwcm9wZXJseS4KLQkvLwotCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zRW5hYmxlLCAoICgob3ZhbDJ8MHgwRSkgJiAofjB4MDEpKSkgKTsKLQotCWZvcihpID0gMDsgaSA8IHJMZW5ndGg7IGkrKykKLQl7Ci0JCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zT3V0cHV0LCB0d3JlZy5sb25nRGF0YXxvdmFsKTsgdWRlbGF5KDEpOwotCQl0d3JlZy5zdHJ1Yy5jbGsgPSAxOwotCQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgdHdyZWcubG9uZ0RhdGF8b3ZhbCk7IHVkZWxheSgyKTsKLQkJd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNPdXRwdXQsIHR3cmVnLmxvbmdEYXRhfG92YWwpOyB1ZGVsYXkoMik7Ci0JCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zT3V0cHV0LCB0d3JlZy5sb25nRGF0YXxvdmFsKTsgdWRlbGF5KDIpOwotCQl0bXAgPSByZWFkX25pY193b3JkKGRldiwgUkZQaW5zSW5wdXQpOwotCQl0ZGF0YS5sb25nRGF0YSA9IHRtcDsKLQkJKmRhdGEyUmVhZCB8PSB0ZGF0YS5zdHJ1Yy5jbGsgPyBtYXNrIDogMDsKLQotCQl0d3JlZy5zdHJ1Yy5jbGsgPSAwOwotCQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgdHdyZWcubG9uZ0RhdGF8b3ZhbCk7IHVkZWxheSgyKTsKLQotCQltYXNrID0gKGxvdzJoaWdoKSA/IChtYXNrPDwxKSA6IChtYXNrPj4xKTsKLQl9Ci0JdHdyZWcuc3RydWMuZW5hYmxlQiA9IDE7Ci0JdHdyZWcuc3RydWMuY2xrID0gMDsKLQl0d3JlZy5zdHJ1Yy5kYXRhID0gMDsKLQl0d3JlZy5zdHJ1Yy5yZWFkX3dyaXRlID0gMTsKLQl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgdHdyZWcubG9uZ0RhdGF8b3ZhbCk7IHVkZWxheSgyKTsKLQotCS8vUGxhdGZvcm1FRklPV3JpdGUyQnl0ZShwQWRhcHRlciwgUkZQaW5zRW5hYmxlLCBvdmFsMnwweDgpOyAgIC8vIFNldCBUbyBPdXRwdXQgRW5hYmxlCi0Jd3JpdGVfbmljX3dvcmQoZGV2LCBSRlBpbnNFbmFibGUsIG92YWwyKTsgICAvLyBTZXQgVG8gT3V0cHV0IEVuYWJsZSwgPFJKX05PVEU+IFdlIGNhbm5vdCBlbmFibGUgQklUMyBoZXJlLCBvdGhlcndpc2UsIHdlIHdpbGwgZmFpbGVkIHRvIHN3aXRjaCBjaGFubmVsLiAyMDA1LjA0LjEyLgotCS8vUGxhdGZvcm1FRklPV3JpdGUyQnl0ZShwQWRhcHRlciwgUkZQaW5zRW5hYmxlLCAweDFiZmYpOwotCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zU2VsZWN0LCBvdmFsMyk7ICAgLy8gU2V0IFRvIFNXIFN3aXRjaAotCS8vUGxhdGZvcm1FRklPV3JpdGUyQnl0ZShwQWRhcHRlciwgUkZQaW5zU2VsZWN0LCAweDA0ODgpOwotCXdyaXRlX25pY193b3JkKGRldiwgUkZQaW5zT3V0cHV0LCAweDNhMCk7Ci0JLy9QbGF0Zm9ybUVGSU9Xcml0ZTJCeXRlKHBBZGFwdGVyLCBSRlBpbnNPdXRwdXQsIDB4MDQ4MCk7Ci19Ci0KLQotdTMyCi1SRl9SZWFkUmVnKAotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCi0JdTgJCW9mZnNldAotCSkKLXsKLQlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7Ci0JdTMyCQkJZGF0YTJXcml0ZTsKLQl1OAkJCXdsZW47Ci0JdTgJCQlybGVuOwotCXU4CQkJbG93MmhpZ2g7Ci0JdTMyCQkJZGF0YVJlYWQ7Ci0KLQlzd2l0Y2gocHJpdi0+cmZfY2hpcCkKLQl7Ci0JY2FzZSBSRkNISVBJRF9SVEw4MjI1OgotCWNhc2UgUkZfWkVCUkEyOgotCWNhc2UgUkZfWkVCUkE0OgotCQlzd2l0Y2gocHJpdi0+UmVnVGhyZWVXaXJlTW9kZSkKLQkJewotCQkJY2FzZSBIV19USFJFRV9XSVJFX1BJOiAvLyBGb3IgODdTICBQYXJhbGxlbCBJbnRlcmZhY2UuCi0JCQl7Ci0JCQkJZGF0YTJXcml0ZSA9ICgodTMyKShvZmZzZXQmMHgwZikpOwotCQkJCXdsZW49MTY7Ci0JCQkJSHdIU1NJVGhyZWVXaXJlKAotCQkJCQlkZXYsCi0JCQkJCSh1OCopKCZkYXRhMldyaXRlKSwJLy8gcERhdGFCdWYsCi0JCQkJCXdsZW4sCQkJCQkvLyBuRGF0YUJ1ZkJpdENudCwKLQkJCQkJMCwgCQkJCQkvLyBiU0kKLQkJCQkJMCk7IAkJCQkJLy8gYldyaXRlCi0JCQkJZGF0YVJlYWQ9IGRhdGEyV3JpdGU7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQkJY2FzZSBIV19USFJFRV9XSVJFX1NJOiAvLyBGb3IgODdTIFNlcmlhbCBJbnRlcmZhY2UuCi0JCQl7Ci0JCQkJZGF0YTJXcml0ZSA9ICgodTMyKShvZmZzZXQmMHgwZikpIDsKLQkJCQl3bGVuPTE2OwotCQkJCUh3SFNTSVRocmVlV2lyZSgKLQkJCQkJZGV2LAotCQkJCQkodTgqKSgmZGF0YTJXcml0ZSksCS8vIHBEYXRhQnVmLAotCQkJCQl3bGVuLAkJCQkJLy8gbkRhdGFCdWZCaXRDbnQsCi0JCQkJCTEsIAkJCQkJLy8gYlNJCi0JCQkJCTAJCQkJCS8vIGJXcml0ZQotCQkJCQkpOwotCQkJCWRhdGFSZWFkPSBkYXRhMldyaXRlOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJCS8vIFBlcmZvcm0gU1cgMy13aXJlIHByb2dyYW1taW5nIGJ5IGRyaXZlci4KLQkJCWRlZmF1bHQ6Ci0JCQl7Ci0JCQkJZGF0YTJXcml0ZSA9ICgodTMyKShvZmZzZXQmMHgxZikpIDw8IDI3OyAvLyBGb3IgWmVicmEgRS1jdXQuIDIwMDUuMDQuMTEsIGJ5IHJjbmprby4KLQkJCQl3bGVuID0gNjsKLQkJCQlybGVuID0gMTI7Ci0JCQkJbG93MmhpZ2ggPSAwOwotCQkJCVpFQlJBX1JGU2VyaWFsUmVhZChkZXYsIGRhdGEyV3JpdGUsIHdsZW4sJmRhdGFSZWFkLHJsZW4sIGxvdzJoaWdoKTsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWRhdGFSZWFkID0gMDsKLQkJYnJlYWs7Ci0JfQorCWRhdGEyV3JpdGUgPSAoKHUzMikob2Zmc2V0ICYgMHgwZikpOworCXdsZW4gPSAxNjsKKwlId0hTU0lUaHJlZVdpcmUoZGV2LCAodTggKikoJmRhdGEyV3JpdGUpLCB3bGVuLCAxLCAwKTsKKwlkYXRhUmVhZCA9IGRhdGEyV3JpdGU7CiAKIAlyZXR1cm4gZGF0YVJlYWQ7CiB9CkBAIC0xMDQzLDE1ICs1NjUsMTIgQEAKIAogCS8vIFBhZ2UwIDogcmVnMC1yZWcxNQogCi0vLwlSRl9Xcml0ZVJlZyhkZXYsIDB4MDAsIDB4MDAzZik7CQkJbWRlbGF5KDEpOy8vMQogCVJGX1dyaXRlUmVnKGRldiwgMHgwMCwgMHgwMDlmKTsgICAgICAJbWRlbGF5KDEpOy8vIDEKIAogCVJGX1dyaXRlUmVnKGRldiwgMHgwMSwgMHgwNmUwKTsJCQltZGVsYXkoMSk7CiAKLS8vCVJGX1dyaXRlUmVnKGRldiwgMHgwMiwgMHgwMDRjKTsJCQltZGVsYXkoMSk7Ly8yCiAJUkZfV3JpdGVSZWcoZGV2LCAweDAyLCAweDAwNGQpOwkJCW1kZWxheSgxKTsvLyAyCiAKLS8vCVJGX1dyaXRlUmVnKGRldiwgMHgwMywgMHgwMDAwKTsJCQltZGVsYXkoMSk7Ly8zCiAJUkZfV3JpdGVSZWcoZGV2LCAweDAzLCAweDA3ZjEpOwkJCW1kZWxheSgxKTsvLyAzCiAKIAlSRl9Xcml0ZVJlZyhkZXYsIDB4MDQsIDB4MDk3NSk7CQkJbWRlbGF5KDEpOwpAQCAtMTA4MCw4ICs1OTksNiBAQAogCiAJUkZfV3JpdGVSZWcoZGV2LCAweDA3LCAweDAxQTApOwkJCW1kZWxheSgxKTsKIC8vIERvbid0IHdyaXRlIFJGMjMvUkYyNCB0byBtYWtlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIDg3UyBDIGN1dCBhbmQgRCBjdXQuIGFza2VkIGJ5IFNEMyBzdGV2ZW5sLgotLy8JUkZfV3JpdGVSZWcoZGV2LCAweDA4LCAweDA1OTcpOwkJCW1kZWxheSgxKTsKLS8vCVJGX1dyaXRlUmVnKGRldiwgMHgwOSwgMHgwNTBhKTsJCQltZGVsYXkoMSk7CiAJUkZfV3JpdGVSZWcoZGV2LCAweDBhLCAweDAwMDEpOwkJCW1kZWxheSgxKTsKIAlSRl9Xcml0ZVJlZyhkZXYsIDB4MGIsIDB4MDQxOCk7CQkJbWRlbGF5KDEpOwogCkBAIC0xMDk3LDcgKzYxNCw2IEBACiAKIAlSRl9Xcml0ZVJlZyhkZXYsIDB4MGYsIDB4MGFjYyk7CQkJbWRlbGF5KDEpOwogCi0vLwlSRl9Xcml0ZVJlZyhkZXYsIDB4MDAsIDB4MDE3Zik7CQkJbWRlbGF5KDEpOy8vNgogCVJGX1dyaXRlUmVnKGRldiwgMHgwMCwgMHgwMWQ3KTsJCQltZGVsYXkoMSk7Ly8gNgogCiAJUkZfV3JpdGVSZWcoZGV2LCAweDAzLCAweDBlMDApOwkJCW1kZWxheSgxKTsKQEAgLTExMDYsMjAgKzYyMiwxNCBAQAogCXsKIAkJUkZfV3JpdGVSZWcoZGV2LCAweDAxLCBpKTsgICAgICAgICAgICAgICAgICAgICBtZGVsYXkoMSk7CiAJCVJGX1dyaXRlUmVnKGRldiwgMHgwMiwgWkVCUkFfUkZfUlhfR0FJTl9UQUJMRVtpXSk7IG1kZWxheSgxKTsKLQkJLy9EYmdQcmludCgiUkYgLSAweCV4ID0gMHgleCIsIGksIFpFQlJBX1JGX1JYX0dBSU5fVEFCTEVbaV0pOwogCX0KIAogCVJGX1dyaXRlUmVnKGRldiwgMHgwNSwgMHgwMjAzKTsJCQltZGVsYXkoMSk7IAkvLy8gMjAzLCAzNDMKLQkvL1JGX1dyaXRlUmVnKGRldiwgMHgwNiwgMHgwMzAwKTsJCQltZGVsYXkoMSk7CS8vIDQwMAogCVJGX1dyaXRlUmVnKGRldiwgMHgwNiwgMHgwMjAwKTsJCQltZGVsYXkoMSk7CS8vIDQwMAogCiAJUkZfV3JpdGVSZWcoZGV2LCAweDAwLCAweDAxMzcpOwkJCW1kZWxheSgxKTsJLy8gc3dpdGNoIHRvIHJlZzE2LXJlZzMwLCBhbmQgSFNTSSBkaXNhYmxlIDEzNwogCW1kZWxheSgxMCk7IAkvLyBEZWF5IDEwIG1zLiAvLzB4ZmQKIAotLy8JUkZfV3JpdGVSZWcoZGV2LCAweDBjLCAweDA5YmUpOwkJCW1kZWxheSgxKTsJLy8gNwotCS8vUkZfV3JpdGVSZWcoZGV2LCAweDBjLCAweDA3YmUpOwkJCW1kZWxheSgxKTsKLQkvL21kZWxheSgxMCk7IAkvLyBEZWF5IDEwIG1zLiAvLzB4ZmQKLQogCVJGX1dyaXRlUmVnKGRldiwgMHgwZCwgMHgwMDA4KTsJCQltZGVsYXkoMSk7CS8vIFo0IHN5bnRoZXNpemVyIGxvb3AgZmlsdGVyIHNldHRpbmcsIDM5MgogCW1kZWxheSgxMCk7IAkvLyBEZWF5IDEwIG1zLiAvLzB4ZmQKIApAQCAtMTE2NSwxMCArNjc1LDggQEAKIAkJUkZfV3JpdGVSZWcoZGV2LCAweDBmLCAweDBhY2MpOwkJCW1kZWxheSgxKTsKIAl9CiAvL2J5IGFteSAwODAzMTIKLS8vCVJGX1dyaXRlUmVnKGRldiwgMHgwZiwgMHgwYWNjKTsJCQltZGVsYXkoMSk7ICAvLy1ieSBhbXkgMDgwMzEyCiAKIAlSRl9Xcml0ZVJlZyhkZXYsIDB4MDAsIDB4MDBiZik7CQkJbWRlbGF5KDEpOyAvLyBzd2l0Y2ggdG8gcmVnMC1yZWcxNSwgYW5kIEhTU0kgZW5hYmxlCi0vLwlSRl9Xcml0ZVJlZyhkZXYsIDB4MGQsIDB4MDA5Zik7CQkJbWRlbGF5KDEpOyAvLyBSeCBCQiBzdGFydCBjYWxpYnJhdGlvbiwgMDBjLy8tZWR3YXJkCiAJUkZfV3JpdGVSZWcoZGV2LCAweDBkLCAweDA4ZGYpOwkJCW1kZWxheSgxKTsgLy8gUnggQkIgc3RhcnQgY2FsaWJyYXRpb24sIDAwYy8vK2Vkd2FyZAogCVJGX1dyaXRlUmVnKGRldiwgMHgwMiwgMHgwMDRkKTsJCQltZGVsYXkoMSk7IC8vIHRlbXBlcmF0dXJlIG1ldGVyIG9mZgogCVJGX1dyaXRlUmVnKGRldiwgMHgwNCwgMHgwOTc1KTsJCQltZGVsYXkoMSk7IC8vIFJ4IG1vZGUKQEAgLTEyMTcsMTMgKzcyNSwxMCBAQAogCS8vIEFHQy50eHQKIAkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKLS8vCVBsYXRmb3JtSU9Xcml0ZTRCeXRlKCBkZXYsIFBoeUFkZHIsIDB4MDAwMDEyODApOwkvLyBBbm5pZSwgMjAwNi0wNS0wNQogCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwMCwgMHgxMik7Ci0JLy9Xcml0ZUJCUG9ydFVjaGFyKGRldiwgMHgwMDAwMTI4MCk7CiAKIAlmb3IgKGk9MDsgaTwxMjg7IGkrKykKIAl7Ci0JCS8vRGJnUHJpbnQoIkFHQyAtIFsleCsxXSA9IDB4JXhcbiIsIGksIFpFQlJBX0FHQ1tpKzFdKTsKIAogCQlkYXRhID0gWkVCUkFfQUdDW2krMV07CiAJCWRhdGEgPSBkYXRhIDw8IDg7CkBAIC0xMjM5LDcgKzc0NCw2IEBACiAJfQogCiAJUGxhdGZvcm1JT1dyaXRlNEJ5dGUoIGRldiwgUGh5QWRkciwgMHgwMDAwMTA4MCk7CS8vIEFubmllLCAyMDA2LTA1LTA1Ci0JLy9Xcml0ZUJCUG9ydFVjaGFyKGRldiwgMHgwMDAwMTA4MCk7CiAKIAkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKQEAgLTEyNTIsOCArNzU2LDYgQEAKIAkJdTRiUmVnT2Zmc2V0PWk7CiAJCXU0YlJlZ1ZhbHVlPU9GRE1fQ09ORklHW2ldOwogCi0JCS8vRGJnUHJpbnQoIk9GRE0gLSAweCV4ID0gMHgleFxuIiwgdTRiUmVnT2Zmc2V0LCB1NGJSZWdWYWx1ZSk7Ci0KIAkJV3JpdGVCQlBvcnRVY2hhcihkZXYsCiAJCQkJCQkoMHgwMDAwMDA4MCB8CiAJCQkJCQkodTRiUmVnT2Zmc2V0ICYgMHg3ZikgfApAQCAtMTI3Nyw5ICs3NzksNiBAQAogCSkKIHsKIAlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7Ci0JLy91bnNpZ25lZCBjaGFyKiBJR1RhYmxlOwotCS8vdTgJCQlESUdfQ3VycmVudEluaXRpYWxHYWluID0gNDsKLQkvL3Vuc2lnbmVkIGNoYXIgdTFUbXA7CiAKIAkvL2x6bSBhZGQgMDgwODI2CiAJaWYocHJpdi0+ZVJGUG93ZXJTdGF0ZSAhPSBlUmZPbikKQEAgLTEyOTEsODEgKzc5MCw1OSBAQAogCQlyZXR1cm47CiAJfQogCi0Jc3dpdGNoKHByaXYtPnJmX2NoaXApCi0JewotCWNhc2UgUkZfWkVCUkE0OgotCQkvLyBEeW5hbWljIHNldCBpbml0aWFsIGdhaW4sIGZvbGxvdyA4N0IKLQkJc3dpdGNoKHByaXYtPkluaXRpYWxHYWluKQotCQl7Ci0JCQljYXNlIDE6IC8vbTg2MWRCbQotCQkJCS8vRE1FU0coIlJUTDgxODcgKyA4MjI1IEluaXRpYWwgR2FpbiBTdGF0ZSAxOiAtODIgZEJtIFxuIik7Ci0JCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDE3LCAweDI2KTsJbWRlbGF5KDEpOwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgyNCwgMHg4Nik7CW1kZWxheSgxKTsKLQkJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MDUsIDB4ZmEpOwltZGVsYXkoMSk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMjogLy9tODYyZEJtCi0JCQkJLy9ETUVTRygiUlRMODE4NyArIDgyMjUgSW5pdGlhbCBHYWluIFN0YXRlIDI6IC04MiBkQm0gXG4iKTsKLQkJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MTcsIDB4MzYpOwltZGVsYXkoMSk7Ci0JCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweDg2KTsJbWRlbGF5KDEpOwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHhmYSk7CW1kZWxheSgxKTsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAzOiAvL204NjNkQm0KLQkJCQkvL0RNRVNHKCJSVEw4MTg3ICsgODIyNSBJbml0aWFsIEdhaW4gU3RhdGUgMzogLTgyIGRCbSBcbiIpOwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHgzNik7CW1kZWxheSgxKTsKLQkJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MjQsIDB4ODYpOwltZGVsYXkoMSk7Ci0JCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDA1LCAweGZiKTsJbWRlbGF5KDEpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDQ6IC8vbTg2NGRCbQotCQkJCS8vRE1FU0coIlJUTDgxODcgKyA4MjI1IEluaXRpYWwgR2FpbiBTdGF0ZSA0OiAtNzggZEJtIFxuIik7Ci0JCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDE3LCAweDQ2KTsJbWRlbGF5KDEpOwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgyNCwgMHg4Nik7CW1kZWxheSgxKTsKLQkJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MDUsIDB4ZmIpOwltZGVsYXkoMSk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgNTogLy9tODJkQm0KLQkJCQkvL0RNRVNHKCJSVEw4MTg3ICsgODIyNSBJbml0aWFsIEdhaW4gU3RhdGUgNTogLTc0IGRCbSBcbiIpOwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHg0Nik7CW1kZWxheSgxKTsKLQkJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MjQsIDB4OTYpOwltZGVsYXkoMSk7Ci0JCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDA1LCAweGZiKTsJbWRlbGF5KDEpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDY6IC8vbTc4ZEJtCi0JCQkJLy9ETUVTRyAoIlJUTDgxODcgKyA4MjI1IEluaXRpYWwgR2FpbiBTdGF0ZSA2OiAtNzAgZEJtIFxuIik7Ci0JCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDE3LCAweDU2KTsJbWRlbGF5KDEpOwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgyNCwgMHg5Nik7CW1kZWxheSgxKTsKLQkJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MDUsIDB4ZmMpOwltZGVsYXkoMSk7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgNzogLy9tNzRkQm0KLQkJCQkvL0RNRVNHKCJSVEw4MTg3ICsgODIyNSBJbml0aWFsIEdhaW4gU3RhdGUgNzogLTY2IGRCbSBcbiIpOwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHg1Nik7CW1kZWxheSgxKTsKLQkJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MjQsIDB4YTYpOwltZGVsYXkoMSk7Ci0JCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDA1LCAweGZjKTsJbWRlbGF5KDEpOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDg6Ci0JCQkJLy9ETUVTRygiUlRMODE4NyArIDgyMjUgSW5pdGlhbCBHYWluIFN0YXRlIDg6XG4iKTsKLQkJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MTcsIDB4NjYpOwltZGVsYXkoMSk7Ci0JCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweGI2KTsJbWRlbGF5KDEpOwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHhmYyk7CW1kZWxheSgxKTsKLQkJCQlicmVhazsKLQotCi0JCQlkZWZhdWx0OgkvL01QCi0JCQkJLy9ETUVTRygiUlRMODE4NyArIDgyMjUgSW5pdGlhbCBHYWluIFN0YXRlIDE6IC04MiBkQm0gKGRlZmF1bHQpXG4iKTsKLQkJCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MTcsIDB4MjYpOwltZGVsYXkoMSk7Ci0JCQkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweDg2KTsJbWRlbGF5KDEpOwotCQkJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHhmYSk7CW1kZWxheSgxKTsKLQkJCQlicmVhazsKLQkJfQorCXN3aXRjaCAocHJpdi0+SW5pdGlhbEdhaW4pIHsKKwljYXNlIDE6IC8qIG04NjFkQm0gKi8KKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDE3LCAweDI2KTsJbWRlbGF5KDEpOworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MjQsIDB4ODYpOwltZGVsYXkoMSk7CisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHhmYSk7CW1kZWxheSgxKTsKIAkJYnJlYWs7CiAKKwljYXNlIDI6IC8qIG04NjJkQm0gKi8KKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDE3LCAweDM2KTsJbWRlbGF5KDEpOworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MjQsIDB4ODYpOwltZGVsYXkoMSk7CisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHhmYSk7CW1kZWxheSgxKTsKKwkJYnJlYWs7CiAKLQlkZWZhdWx0OgotCQlETUVTRygiVXBkYXRlSW5pdGlhbEdhaW4oKTogdW5rbm93biBSRkNoaXBJRDogJSNYXG4iLCBwcml2LT5yZl9jaGlwKTsKKwljYXNlIDM6IC8qIG04NjNkQm0gKi8KKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDE3LCAweDM2KTsJbWRlbGF5KDEpOworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MjQsIDB4ODYpOwltZGVsYXkoMSk7CisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHhmYik7CW1kZWxheSgxKTsKKwkJYnJlYWs7CisKKwljYXNlIDQ6IC8qIG04NjRkQm0gKi8KKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDE3LCAweDQ2KTsJbWRlbGF5KDEpOworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MjQsIDB4ODYpOwltZGVsYXkoMSk7CisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHhmYik7CW1kZWxheSgxKTsKKwkJYnJlYWs7CisKKwljYXNlIDU6IC8qIG04MmRCbSAqLworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MTcsIDB4NDYpOwltZGVsYXkoMSk7CisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgyNCwgMHg5Nik7CW1kZWxheSgxKTsKKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDA1LCAweGZiKTsJbWRlbGF5KDEpOworCQlicmVhazsKKworCWNhc2UgNjogLyogbTc4ZEJtICovCisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHg1Nik7CW1kZWxheSgxKTsKKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweDk2KTsJbWRlbGF5KDEpOworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MDUsIDB4ZmMpOwltZGVsYXkoMSk7CisJCWJyZWFrOworCisJY2FzZSA3OiAvKiBtNzRkQm0gKi8KKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDE3LCAweDU2KTsJbWRlbGF5KDEpOworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MjQsIDB4YTYpOwltZGVsYXkoMSk7CisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHhmYyk7CW1kZWxheSgxKTsKKwkJYnJlYWs7CisKKwljYXNlIDg6CisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgxNywgMHg2Nik7CW1kZWxheSgxKTsKKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDI0LCAweGI2KTsJbWRlbGF5KDEpOworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MDUsIDB4ZmMpOwltZGVsYXkoMSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoJLyogTVAgKi8KKwkJd3JpdGVfcGh5X29mZG0oZGV2LCAweDE3LCAweDI2KTsJbWRlbGF5KDEpOworCQl3cml0ZV9waHlfb2ZkbShkZXYsIDB4MjQsIDB4ODYpOwltZGVsYXkoMSk7CisJCXdyaXRlX3BoeV9vZmRtKGRldiwgMHgwNSwgMHhmYSk7CW1kZWxheSgxKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMTM3OSwxMyArODU2LDExIEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldgogKQogewotCS8vc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOwogCXUzMgl1NGJSZlJlZzsKIAogCXU0YlJmUmVnID0gUkZfUmVhZFJlZyhkZXYsIDB4MDIpOwogCiAJLy8gRW5hYmxlIFRoZXJtYWwgbWV0ZXIgaW5kaWNhdGlvbi4KLQkvL3ByaW50aygiSW5pdFR4UHdyVHJhY2tpbmc4N1NFKCk6IEVuYWJsZSB0aGVybWFsIG1ldGVyIGluZGljYXRpb24sIFdyaXRlIFJGWzB4MDJdID0gJSN4IiwgdTRiUmZSZWd8UFdSX01FVEVSX0VOKTsKIAlSRl9Xcml0ZVJlZyhkZXYsIDB4MDIsIHU0YlJmUmVnfFBXUl9NRVRFUl9FTik7CQkJbWRlbGF5KDEpOwogfQogCkBAIC0xMzk3LDIxICs4NzIsMTQgQEAKIAlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CiAgICAgICAgd3JpdGVfbmljX2R3b3JkKGRldiwgUkNSLCBwcml2LT5SZWNlaXZlQ29uZmlnKTsKIAkgICBwcml2LT5SRlByb2dUeXBlID0gcmVhZF9uaWNfYnl0ZShkZXYsIENPTkZJRzQpICYgMHgwMzsKLSAgICAgCS8vIFJGIGNvbmZpZwotCXN3aXRjaChwcml2LT5yZl9jaGlwKQotCXsKLQljYXNlIFJGX1pFQlJBMjoKLQljYXNlIFJGX1pFQlJBNDoKLQkJWkVCUkFfQ29uZmlnXzg1QkFTSUNfSGFyZENvZGUoIGRldik7Ci0JCWJyZWFrOwotCX0KKwkvKiAgUkYgY29uZmlnICovCisJWkVCUkFfQ29uZmlnXzg1QkFTSUNfSGFyZENvZGUoZGV2KTsKIC8ve2J5IGFteSAwODAzMTIKIAkvLyBTZXQgZGVmYXVsdCBpbml0aWFsIGdhaW4gc3RhdGUgdG8gNCwgYXBwcm92ZWQgYnkgU0QzIERaLCBieSBCcnVjZSwgMjAwNy0wNi0wNi4KIAlpZihwcml2LT5iRGlnTWVjaGFuaXNtKQogCXsKIAkJaWYocHJpdi0+SW5pdGlhbEdhaW4gPT0gMCkKIAkJCXByaXYtPkluaXRpYWxHYWluID0gNDsKLQkJLy9wcmludGsoIlBoeUNvbmZpZzgxODUoKTogRElHIGlzIGVuYWJsZWQsIHNldCBkZWZhdWx0IGluaXRpYWwgZ2FpbiBpbmRleCB0byAlZFxuIiwgcHJpdi0+SW5pdGlhbEdhaW4pOwogCX0KIAogCS8vCkBAIC0xNDI5LDM0ICs4OTcsMTcgQEAKIAlyZXR1cm47CiB9CiAKLQotCi0KIHZvaWQKIEh3Q29uZmlndXJlUlRMODE4NSgKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldgogCQkpCiB7CiAJLy9SVEw4MTg1X1RPRE86IERldGVybWluZSBSZXRyeWxpbWl0LCBUeEFHQywgQXV0b1JhdGVGYWxsYmFjayBjb250cm9sLgotLy8JdTgJCWJVTklWRVJTQUxfQ09OVFJPTF9STCA9IDE7CiAgICAgICAgIHU4ICAgICAgICAgICAgICBiVU5JVkVSU0FMX0NPTlRST0xfUkwgPSAwOwotCiAJdTgJCWJVTklWRVJTQUxfQ09OVFJPTF9BR0MgPSAxOwogCXU4CQliVU5JVkVSU0FMX0NPTlRST0xfQU5UID0gMTsKIAl1OAkJYkFVVE9fUkFURV9GQUxMQkFDS19DVEwgPSAxOwogCXU4CQl2YWw4OwotCS8vc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOwotCS8vc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlODAyMTE7Ci0gICAgICAJLy9pZihJU19XSVJFTEVTU19NT0RFX0EoZGV2KSB8fCBJU19XSVJFTEVTU19NT0RFX0coZGV2KSkKLS8ve2J5IGFteSAwODAzMTIJaWYoKGllZWUtPm1vZGUgPT0gSUVFRV9HKXx8KGllZWUtPm1vZGUgPT0gSUVFRV9BKSkKLS8vCXsKLS8vCQl3cml0ZV9uaWNfd29yZChkZXYsIEJSU1IsIDB4ZmZmZik7Ci0vLwl9Ci0vLwllbHNlCi0vLwl7Ci0vLwkJd3JpdGVfbmljX3dvcmQoZGV2LCBCUlNSLCAweDAwMGYpOwotLy8JfQotLy9ieSBhbXkgMDgwMzEyfQogICAgICAgICB3cml0ZV9uaWNfd29yZChkZXYsIEJSU1IsIDB4MGZmZik7CiAJLy8gUmV0cnkgbGltaXQKIAl2YWw4ID0gcmVhZF9uaWNfYnl0ZShkZXYsIENXX0NPTkYpOwpAQCAtMTUwNywyMCArOTU4LDExIEBACiAJCXZhbDggfD0gUkFURV9GQUxMQkFDS19DVExfRU5BQkxFIHwgUkFURV9GQUxMQkFDS19DVExfQVVUT19TVEVQMTsKIAogCQkvLyA8UkpfVE9ET184MTg1Qj4gV2Ugc2hhbGwgc2V0IHVwIHRoZSBBUkZSIGFjY29yZGluZyB0byB1c2VyJ3Mgc2V0dGluZy4KLQkJLy93cml0ZV9uaWNfd29yZChkZXYsIEFSRlIsIDB4MGZmZik7IC8vIHNldCAxTSB+IDU0TQotLy9ieSBhbXkKLQkgICAgICAgIC8vIEFhZGRlZCBieSBSb2dlciwgMjAwNy4xMS4xNS4KIAkgICAgICAgIFBsYXRmb3JtSU9Xcml0ZTJCeXRlKGRldiwgQVJGUiwgMHgwZmZmKTsgLy9zZXQgMU0gfiA1NE1icHMuCi0vL2J5IGFteQotCX0KLQllbHNlCi0JewogCX0KIAl3cml0ZV9uaWNfYnl0ZShkZXYsIFJBVEVfRkFMTEJBQ0ssIHZhbDgpOwogfQogCi0KLQogc3RhdGljIHZvaWQKIE1hY0NvbmZpZ184NUJBU0lDX0hhcmRDb2RlKAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC0xNTQ4LDE0ICs5OTAsMTEgQEAKICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHU0YlJlZ09mZnNldCB8PSAodTRiUGFnZUluZGV4IDw8IDgpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvL0RiZ1ByaW50KCJNQUMgLSAweCV4ID0gMHgleFxuIiwgdTRiUmVnT2Zmc2V0LCB1NGJSZWdWYWx1ZSk7CiAJCXdyaXRlX25pY19ieXRlKGRldiwgdTRiUmVnT2Zmc2V0LCAodTgpdTRiUmVnVmFsdWUpOwogCX0KIAkvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIH0KIAotCi0KIHN0YXRpYyB2b2lkCiBNYWNDb25maWdfODVCQVNJQygKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMTU3OCw4ICsxMDE3LDYgQEAKIAlQbGF0Zm9ybUlPV3JpdGUxQnl0ZShkZXYsIDB4MUY4LCAweDAwKTsKIAogCS8vIEFza2VkIGZvciBieSBTRDMgQ00gTGluLCAyMDA2LjA2LjI3LCBieSByY25qa28uCi0JLy9QbGF0Zm9ybUlPV3JpdGU0Qnl0ZShkZXYsIFJGVGltaW5nLCAweDAwMDA0MDAxKTsKLS8vYnkgYW15CiAJLy8gcG93ZXIgc2F2ZSBwYXJhbWV0ZXIgYmFzZWQgb24gIjg3U0UgcG93ZXIgc2F2ZSBwYXJhbWV0ZXJzIDIwMDcxMTI3LmRvYyIsIGFzIGZvbGxvdy4KIAogCS8vRW5hYmxlIERBMTAgVFggcG93ZXIgc2F2aW5nCkBAIC0xNTk4LDM1ICsxMDM1LDE4IEBACiAJd3JpdGVfbmljX3dvcmQoZGV2LCAweDM3OCwgMHgwNTYwKTsKIAl3cml0ZV9uaWNfd29yZChkZXYsIDB4MzdBLCAweDA1NjApOwogCXdyaXRlX25pY193b3JkKGRldiwgMHgzN0MsIDB4MDBFQyk7Ci0vLwl3cml0ZV9uaWNfd29yZChkZXYsIDB4MzdFLCAweDAwRkUpOy8vLWVkd2FyZAogCXdyaXRlX25pY193b3JkKGRldiwgMHgzN0UsIDB4MDBFQyk7Ly8rZWR3YXJkCiAgICAgICAgd3JpdGVfbmljX2J5dGUoZGV2LCAweDI0RSwweDAxKTsKLS8vYnkgYW15Ci0KIH0KIAotCi0KLQogdTgKIEdldFN1cHBvcnRlZFdpcmVsZXNzTW9kZTgxODUoCiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldgogKQogewogCXU4CQkJYnRTdXBwb3J0ZWRXaXJlbGVzc01vZGUgPSAwOwotCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKIAotCXN3aXRjaChwcml2LT5yZl9jaGlwKQotCXsKLQljYXNlIFJGX1pFQlJBMjoKLQljYXNlIFJGX1pFQlJBNDoKLQkJYnRTdXBwb3J0ZWRXaXJlbGVzc01vZGUgPSAoV0lSRUxFU1NfTU9ERV9CIHwgV0lSRUxFU1NfTU9ERV9HKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnRTdXBwb3J0ZWRXaXJlbGVzc01vZGUgPSBXSVJFTEVTU19NT0RFX0I7Ci0JCWJyZWFrOwotCX0KLQorCWJ0U3VwcG9ydGVkV2lyZWxlc3NNb2RlID0gKFdJUkVMRVNTX01PREVfQiB8IFdJUkVMRVNTX01PREVfRyk7CiAJcmV0dXJuIGJ0U3VwcG9ydGVkV2lyZWxlc3NNb2RlOwogfQogCkBAIC0xNjQxLDcgKzEwNjEsNiBAQAogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTgwMjExOwogCUFDX0NPRElORwllQUNJOwogCUFDX1BBUkFNCUFjUGFyYW07Ci0JLy9QU1RBX1FPUwlwU3RhUW9zID0gQWRhcHRlci0+TWdudEluZm8ucFN0YVFvczsKIAl1OAliRm9sbG93TGVnYWN5U2V0dGluZyA9IDA7CiAJdTggICB1MWJBSUZTOwogCkBAIC0xNjYzLDQwICsxMDgyLDE0IEBACiAJQ2hubEFjY2Vzc1NldHRpbmctPkNXbWF4SW5kZXggPSA3OyAvLyAyMDA2LjA2LjAyLCBieSByY25qa28uCiAKIAl3cml0ZV9uaWNfYnl0ZShkZXYsIFNJRlMsIENobmxBY2Nlc3NTZXR0aW5nLT5TSUZTX1RpbWVyKTsKLQkvL0FkYXB0ZXItPkhhbEZ1bmMuU2V0SHdSZWdIYW5kbGVyKCBBZGFwdGVyLCBIV19WQVJfU0xPVF9USU1FLCAmQ2hubEFjY2Vzc1NldHRpbmctPlNsb3RUaW1lVGltZXIgKTsJLy8gUmV3cml0ZWQgZnJvbSBkaXJlY3RseSB1c2UgUGxhdGZvcm1FRklPV3JpdGUxQnl0ZSgpLCBieSBBbm5pZSwgMjAwNi0wMy0yOS4KIAl3cml0ZV9uaWNfYnl0ZShkZXYsIFNMT1QsIENobmxBY2Nlc3NTZXR0aW5nLT5TbG90VGltZVRpbWVyKTsJLy8gUmV3cml0ZWQgZnJvbSBkaXJlY3RseSB1c2UgUGxhdGZvcm1FRklPV3JpdGUxQnl0ZSgpLCBieSBBbm5pZSwgMjAwNi0wMy0yOS4KIAogCXUxYkFJRlMgPSBhU2lmc1RpbWUgKyAoMiAqIENobmxBY2Nlc3NTZXR0aW5nLT5TbG90VGltZVRpbWVyICk7CiAKLQkvL3dyaXRlX25pY19ieXRlKGRldiwgQUNfVk9fUEFSQU0sIHUxYkFJRlMpOwotCS8vd3JpdGVfbmljX2J5dGUoZGV2LCBBQ19WSV9QQVJBTSwgdTFiQUlGUyk7Ci0JLy93cml0ZV9uaWNfYnl0ZShkZXYsIEFDX0JFX1BBUkFNLCB1MWJBSUZTKTsKLQkvL3dyaXRlX25pY19ieXRlKGRldiwgQUNfQktfUEFSQU0sIHUxYkFJRlMpOwotCiAJd3JpdGVfbmljX2J5dGUoZGV2LCBFSUZTLCBDaG5sQWNjZXNzU2V0dGluZy0+RUlGU19UaW1lcik7CiAKIAl3cml0ZV9uaWNfYnl0ZShkZXYsIEFja1RpbWVPdXRSZWcsIDB4NUIpOyAvLyA8UkpfRVhQUl9RT1M+IFN1Z2dlc3RlZCBieSB3Y2NodSwgaXQgaXMgdGhlIGRlZmF1bHQgdmFsdWUgb2YgRUlGUyByZWdpc3RlciwgMjAwNS4xMi4wOC4KIAotI2lmZGVmIFRPRE8KLQkvLyA8UkpfVE9ET19OT1dfODE4NUI+IFVwZGF0ZSBFQ1dtaW4vRUNXbWF4LCBBSUZTLCBUWE9QIExpbWl0IG9mIGVhY2ggQUMgdG8gdGhlIHZhbHVlIGRlZmluZWQgYnkgU1BFQy4KLQlpZiggcFN0YVFvcy0+Q3VycmVudFFvc01vZGUgPiBRT1NfRElTQUJMRSApCi0JeyAvLyBRb1MgbW9kZS4KLQkJaWYocFN0YVFvcy0+UUJzc1dpcmVsZXNzTW9kZSA9PSBXaXJlbGVzc01vZGUpCi0JCXsKLQkJCS8vIEZvbGxvdyBBQyBQYXJhbWV0ZXJzIG9mIHRoZSBRQlNTLgotCQkJZm9yKGVBQ0kgPSAwOyBlQUNJIDwgQUNfTUFYOyBlQUNJKyspCi0JCQl7Ci0JCQkJQWRhcHRlci0+SGFsRnVuYy5TZXRId1JlZ0hhbmRsZXIoQWRhcHRlciwgSFdfVkFSX0FDX1BBUkFNLCAocHUxQnl0ZSkoJihwU3RhUW9zLT5XTU1QYXJhbUVsZS5BY1BhcmFtW2VBQ0ldKSkgKTsKLQkJCX0KLQkJfQotCQllbHNlCi0JCXsKLQkJCS8vIEZvbGxvdyBEZWZhdWx0IFdNTSBBQyBQYXJhbWV0ZXJzLgotCQkJYkZvbGxvd0xlZ2FjeVNldHRpbmcgPSAxOwotCQl9Ci0JfQotCWVsc2UKLSNlbmRpZgogCXsgLy8gTGVnYWN5IDgwMi4xMS4KIAkJYkZvbGxvd0xlZ2FjeVNldHRpbmcgPSAxOwogCkBAIC0xNzE5LDE0ICsxMTEyLDEyIEBACiAJCUFjUGFyYW0uZi5UWE9QTGltaXQgPSAwOwogCiAJCS8vbHptIHJlc2VydmVkIDA4MDgyNgotI2lmIDEKIAkJLy8gRm9yIHR1cmJvIG1vZGUgc2V0dGluZy4gcG9ydCBmcm9tIDg3QiBieSBJc2FpYWggMjAwOC0wOC0wMQogCQlpZiggaWVlZS0+Y3VycmVudF9uZXR3b3JrLlR1cmJvX0VuYWJsZSA9PSAxICkKIAkJCUFjUGFyYW0uZi5UWE9QTGltaXQgPSAweDAxRkY7CiAJCS8vIEZvciA4N1NFIHdpdGggSW50ZWwgNDk2NSAgQWQtSG9jIG1vZGUgaGF2ZSBwb29yIHRocm91Z2hwdXQgKDE5TUIpCiAJCWlmIChpZWVlLT5pd19tb2RlID09IElXX01PREVfQURIT0MpCiAJCQlBY1BhcmFtLmYuVFhPUExpbWl0ID0gMHgwMDIwOwotI2VuZGlmCiAKIAkJZm9yKGVBQ0kgPSAwOyBlQUNJIDwgQUNfTUFYOyBlQUNJKyspCiAJCXsKQEAgLTE3NzAsMTggKzExNjEsMTMgQEAKIAogCQkJCS8vIENlaGNrIEFDTSBiaXQuCiAJCQkJLy8gSWYgaXQgaXMgc2V0LCBpbW1lZGlhdGVseSBzZXQgQUNNIGNvbnRyb2wgYml0IHRvIGRvd25ncmFkaW5nIEFDIGZvciBwYXNzaW5nIFdNTSB0ZXN0cGxhbi4gQW5uaWUsIDIwMDUtMTItMTMuCi0JCQkJLy93cml0ZV9uaWNfYnl0ZShkZXYsIEFDTV9DT05UUk9MLCBwQWNQYXJhbS0+Zi5BY2lBaWZzbik7CiAJCQkJewogCQkJCQlQQUNJX0FJRlNOCXBBY2lBaWZzbiA9IChQQUNJX0FJRlNOKSgmcEFjUGFyYW0tPmYuQWNpQWlmc24pOwogCQkJCQlBQ19DT0RJTkcJZUFDSSA9IHBBY2lBaWZzbi0+Zi5BQ0k7CiAKIAkJCQkJLy9tb2RpZmllZCBKb3NlcGgKIAkJCQkJLy9mb3IgODE4N0IgQXN5bklPUmVhZCBpc3N1ZQotI2lmZGVmIFRPRE8KLQkJCQkJdTgJQWNtQ3RybCA9IHBIYWxEYXRhLT5BY21Db250cm9sOwotI2Vsc2UKIAkJCQkJdTgJQWNtQ3RybCA9IDA7Ci0jZW5kaWYKIAkJCQkJaWYoIHBBY2lBaWZzbi0+Zi5BQ00gKQogCQkJCQl7IC8vIEFDTSBiaXQgaXMgMS4KIAkJCQkJCXN3aXRjaChlQUNJKQpAQCAtMTgyMywxOSArMTIwOSwxMCBAQAogCQkJCQkJCQlicmVhazsKIAkJCQkJCX0KIAkJCQkJfQotCi0JCQkJCS8vcHJpbnRrKEtFUk5fV0FSTklORyAiU2V0SHdSZWc4MTg1KCk6IFtIV19WQVJfQUNNX0NUUkxdIFdyaXRlIDB4JVhcbiIsIEFjbUN0cmwpOwotCi0jaWZkZWYgVE9fRE8KLQkJCQkJcEhhbERhdGEtPkFjbUNvbnRyb2wgPSBBY21DdHJsOwotI2VuZGlmCi0JCQkJCS8vd3JpdGVfbmljX2J5dGUoZGV2LCBBQ01fQ09OVFJPTCwgQWNtQ3RybCk7CiAJCQkJCXdyaXRlX25pY19ieXRlKGRldiwgQUNNX0NPTlRST0wsIDApOwogCQkJCX0KIAkJCX0KIAkJfQotCi0KIAl9CiB9CiAKQEAgLTE4NDcsNyArMTIyNCw2IEBACiB7CiAJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTgwMjExOwotCS8vUE1HTlRfSU5GTwkJcE1nbnRJbmZvID0gJihBZGFwdGVyLT5NZ250SW5mbyk7CiAJdTgJYnRTdXBwb3J0ZWRXaXJlbGVzc01vZGUgPSBHZXRTdXBwb3J0ZWRXaXJlbGVzc01vZGU4MTg1KGRldik7CiAKIAlpZiggKGJ0V2lyZWxlc3NNb2RlICYgYnRTdXBwb3J0ZWRXaXJlbGVzc01vZGUpID09IDAgKQpAQCAtMTg4MCwyNCArMTI1NiwxMSBAQAogCQl9CiAJfQogCi0KLQkvLyAyLiBTd3RpY2ggYmFuZDogUkYgb3IgQkIgc3BlY2lmaWMgYWN0aW9ucywKLQkvLyBmb3IgZXhhbXBsZSwgcmVmcmVzaCB0YWJsZXMgaW4gb21jODI1NSwgb3IgY2hhbmdlIGluaXRpYWwgZ2FpbiBpZiBuZWNlc3NhcnkuCi0Jc3dpdGNoKHByaXYtPnJmX2NoaXApCi0JewotCWNhc2UgUkZfWkVCUkEyOgotCWNhc2UgUkZfWkVCUkE0OgotCQl7Ci0JCQkvLyBOb3RoaW5nIHRvIGRvIGZvciBaZWJyYSB0byBzd2l0Y2ggYmFuZC4KLQkJCS8vIFVwZGF0ZSBjdXJyZW50IHdpcmVsZXNzIG1vZGUgaWYgd2Ugc3d0aWNoIHRvIHNwZWNpZmllZCBiYW5kIHN1Y2Nlc3NmdWxseS4KLQkJCWllZWUtPm1vZGUgPSAoV0lSRUxFU1NfTU9ERSlidFdpcmVsZXNzTW9kZTsKLQkJfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCURNRVNHVygiQWN0U2V0V2lyZWxlc3NNb2RlODE4NSgpOiB1bnN1cHBvcnRlZCBSRjogMHglWCAhISFcbiIsIHByaXYtPnJmX2NoaXApOwotCQlicmVhazsKLQl9CisJLyogMi4gU3d0aWNoIGJhbmQ6IFJGIG9yIEJCIHNwZWNpZmljIGFjdGlvbnMsCisJICogZm9yIGV4YW1wbGUsIHJlZnJlc2ggdGFibGVzIGluIG9tYzgyNTUsIG9yIGNoYW5nZSBpbml0aWFsIGdhaW4gaWYgbmVjZXNzYXJ5LgorCSAqIE5vdGhpbmcgdG8gZG8gZm9yIFplYnJhIHRvIHN3aXRjaCBiYW5kLgorCSAqIFVwZGF0ZSBjdXJyZW50IHdpcmVsZXNzIG1vZGUgaWYgd2Ugc3d0aWNoIHRvIHNwZWNpZmllZCBiYW5kIHN1Y2Nlc3NmdWxseS4gKi8KKwlpZWVlLT5tb2RlID0gKFdJUkVMRVNTX01PREUpYnRXaXJlbGVzc01vZGU7CiAKIAkvLyAzLiBDaGFuZ2UgcmVsYXRlZCBzZXR0aW5nLgogCWlmKCBpZWVlLT5tb2RlID09IFdJUkVMRVNTX01PREVfQSApewpAQCAtMTkwOSw3ICsxMjcyLDYgQEAKIAllbHNlIGlmKCBpZWVlLT5tb2RlID09IFdJUkVMRVNTX01PREVfRyApewogCQlETUVTRygiV0lSRUxFU1NfTU9ERV9HXG4iKTsKIAl9Ci0KIAlBY3RVcGRhdGVDaGFubmVsQWNjZXNzU2V0dGluZyggZGV2LCBpZWVlLT5tb2RlLCAmcHJpdi0+Q2hhbm5lbEFjY2Vzc1NldHRpbmcpOwogfQogCkBAIC0xOTI3LDExICsxMjg5LDcgQEAKIAl1MTYJCQlyZWFzb24KIAkpCiB7Ci0JLy9wcmludGsoIj09PiBEcnZJRkluZGljYXRlRGlzYXNzb2NpYXRpb24oKVxuIik7Ci0KIAkvLyBub3RoaW5nIGlzIG5lZWRlZCBhZnRlciBkaXNhc3NvY2lhdGlvbiByZXF1ZXN0LgotCi0JLy9wcmludGsoIjw9PSBEcnZJRkluZGljYXRlRGlzYXNzb2NpYXRpb24oKVxuIik7CiB9CiB2b2lkCiBNZ250RGlzY29ubmVjdElCU1MoCkBAIC0xOTQxLDExICsxMjk5LDcgQEAKIAlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CiAJdTgJCQlpOwogCi0JLy9wcmludGsoIlhYWFhYWFhYWFggTWdudERpc2Nvbm5lY3QgSUJTU1xuIik7Ci0KIAlEcnZJRkluZGljYXRlRGlzYXNzb2NpYXRpb24oZGV2LCB1bnNwZWNfcmVhc29uKTsKLQotLy8JUGxhdGZvcm1aZXJvTWVtb3J5KCBwTWdudEluZm8tPkJzc2lkLCA2ICk7CiAJZm9yKGk9MDtpPDY7aSsrKSAgcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuYnNzaWRbaV0gPSAweDU1OwogCiAJcHJpdi0+aWVlZTgwMjExLT5zdGF0ZSA9IElFRUU4MDIxMV9OT0xJTks7CkBAIC0xOTU3LDE2ICsxMzExLDEwIEBACiAJLy8gQmVjYXVzZSBCY24gRE1BIGlzbid0IGNvbXBsZXRlLCBtZ250IHF1ZXVlIHdvdWxkIHN0dWNrIHVudGlsIEJjbiBwYWNrZXQgc2VuZC4KIAogCS8vIERpc2FibGUgQmVhY29uIFF1ZXVlIE93biBiaXQsIHN1Z2dlc3RlZCBieSBqb25nCi0vLwlBZGFwdGVyLT5IYWxGdW5jLlNldFR4RGVzY09XTkhhbmRsZXIoQWRhcHRlciwgQkVBQ09OX1FVRVVFLCAwLCAwKTsKIAlpZWVlODAyMTFfc3RvcF9zZW5kX2JlYWNvbnMocHJpdi0+aWVlZTgwMjExKTsKIAogCXByaXYtPmllZWU4MDIxMS0+bGlua19jaGFuZ2UoZGV2KTsKIAlub3RpZnlfd3hfYXNzb2NfZXZlbnQocHJpdi0+aWVlZTgwMjExKTsKLQotCS8vIFN0b3AgU1cgQmVhY29uLlVzZSBodyBiZWFjb24gc28gZG8gbm90IG5lZWQgdG8gZG8gc28uYnkgYW15Ci0KLS8vCQlNZ250SW5kaWNhdGVNZWRpYVN0YXR1cyggQWRhcHRlciwgUlRfTUVESUFfRElTQ09OTkVDVCwgR0VORVJBTF9JTkRJQ0FURSApOwotCiB9CiB2b2lkCiBNbG1lRGlzYXNzb2NpYXRlUmVxdWVzdCgKQEAgLTE5ODYsMTQgKzEzMzQsOCBAQAogCQlEcnZJRkluZGljYXRlRGlzYXNzb2NpYXRpb24oZGV2LCB1bnNwZWNfcmVhc29uKTsKIAogCi0JLy8JcE1nbnRJbmZvLT5Bc29jVGltZXN0YW1wID0gMDsKIAkJZm9yKGk9MDtpPDY7aSsrKSAgcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuYnNzaWRbaV0gPSAweDIyOwotLy8JCXBNZ250SW5mby0+bUJyYXRlcy5MZW5ndGggPSAwOwotLy8JCUFkYXB0ZXItPkhhbEZ1bmMuU2V0SHdSZWdIYW5kbGVyKCBBZGFwdGVyLCBIV19WQVJfQkFTSUNfUkFURSwgKHB1MUJ5dGUpKCZwTWdudEluZm8tPm1CcmF0ZXMpICk7Ci0KIAkJaWVlZTgwMjExX2Rpc2Fzc29jaWF0ZShwcml2LT5pZWVlODAyMTEpOwotCi0KIAl9CiAKIH0KQEAgLTIwMTEsMjMgKzEzNTMsMTIgQEAKIC8vIEkgbW92ZSBTZWNDbGVhckFsbEtleXMoKSB0byBNZ250QWN0U2V0XzgwMl8xMV9ESVNBU1NPQ0lBVEUoKS4KIC8vCiAvLwkvLzIwMDQvMDkvMTUsIGtjd3UsIHRoZSBrZXkgc2hvdWxkIGJlIGNsZWFyZWQsIG9yIHRoZSBuZXcgaGFuZHNoYWtpbmcgd2lsbCBub3Qgc3VjY2VzcwotLy8JU2VjQ2xlYXJBbGxLZXlzKEFkYXB0ZXIpOwogCiAJLy8gSW4gV1BBIFdQQTIgbmVlZCB0byBDbGVhciBhbGwga2V5IC4uLiBiZWNhdXNlIG5ldyBrZXkgd2lsbCBzZXQgYWZ0ZXIgbmV3IGhhbmRzaGFraW5nLgotI2lmZGVmIFRPRE8KLQlpZiggICBwTWdudEluZm8tPlNlY3VyaXR5SW5mby5BdXRoTW9kZSA+IFJUXzgwMl8xMUF1dGhNb2RlQXV0b1N3aXRjaCB8fAotCQkocE1nbnRJbmZvLT5iQVBTdXBvcnRDQ0tNICYmIHBNZ250SW5mby0+YkNDWDgwMjF4ZW5hYmxlKSApICAvLyBJbiBDQ0tNIG1vZGUgd2lsbCBDbGVhciBrZXkKLQl7Ci0JCVNlY0NsZWFyQWxsS2V5cyhBZGFwdGVyKTsKLQkJUlRfVFJBQ0UoQ09NUF9TRUMsIERCR19MT1VELCgiPT09PT09PkNDS00gY2xlYXIga2V5Li4uIikpCi0JfQotI2VuZGlmCiAJLy8gMjAwNC4xMC4xMSwgYnkgcmNuamtvLgotCS8vTWxtZURpc2Fzc29jaWF0ZVJlcXVlc3QoIEFkYXB0ZXIsIHBNZ250SW5mby0+QnNzaWQsIGRpc2FzX2x2X3NzICk7CiAJTWxtZURpc2Fzc29jaWF0ZVJlcXVlc3QoIGRldiwgcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuYnNzaWQsIGFzUnNuICk7CiAKIAlwcml2LT5pZWVlODAyMTEtPnN0YXRlID0gSUVFRTgwMjExX05PTElOSzsKLS8vCXBNZ250SW5mby0+QXNvY1RpbWVzdGFtcCA9IDA7CiB9CiBib29sCiBNZ250RGlzY29ubmVjdCgKQEAgLTIwMzksMjAgKzEzNzAsNyBAQAogCS8vCiAJLy8gU2NoZWR1bGUgYW4gd29ya2l0ZW0gdG8gd2FrZSB1cCBmb3IgcHMgbW9kZSwgMDcwMTA5LCBieSByY25qa28uCiAJLy8KLSNpZmRlZiBUT0RPCi0JaWYocE1nbnRJbmZvLT5tUHNzICE9IGVBd2FrZSkKLQl7Ci0JCS8vCi0JCS8vIFVzaW5nIEF3a2FlVGltZXIgdG8gcHJldmVudCBtaXNtYXRjaCBwcyBzdGF0ZS4KLQkJLy8gSW4gdGhlIHRpbWVyIHRoZSBzdGF0ZSB3aWxsIGJlIGNoYW5nZWQgYWNjb3JkaW5nIHRvIHRoZSBSRiBpcyBiZWluZyBhd29rZSBvciBub3QuIEJ5IEJydWNlLCAyMDA3LTEwLTMxLgotCQkvLwotCQkvLyBQbGF0Zm9ybVNjaGVkdWxlV29ya0l0ZW0oICYocE1nbnRJbmZvLT5Bd2FrZVdvcmtJdGVtKSApOwotCQlQbGF0Zm9ybVNldFRpbWVyKCBBZGFwdGVyLCAmKHBNZ250SW5mby0+QXdha2VUaW1lciksIDAgKTsKLQl9Ci0jZW5kaWYKIAotCS8vIEluZGljYXRpb24gb2YgZGlzYXNzb2NpYXRpb24gZXZlbnQuCi0JLy9EcnZJRkluZGljYXRlRGlzYXNzb2NpYXRpb24oQWRhcHRlciwgYXNSc24pOwogCWlmKElTX0RPVDExRF9FTkFCTEUocHJpdi0+aWVlZTgwMjExKSkKIAkJRG90MTFkX1Jlc2V0KHByaXYtPmllZWU4MDIxMSk7CiAJLy8gSW4gYWRob2MgbW9kZSwgdXBkYXRlIGJlYWNvbiBmcmFtZS4KQEAgLTIwNjAsOCArMTM3OCw2IEBACiAJewogCQlpZiggcHJpdi0+aWVlZTgwMjExLT5pd19tb2RlID09IElXX01PREVfQURIT0MgKQogCQl7Ci0vLwkJCVJUX1RSQUNFKENPTVBfTUxNRSwgREJHX0xPVUQsICgiTWdudERpc2Nvbm5lY3QoKSA9PT0+IE1nbnREaXNjb25uZWN0SUJTU1xuIikpOwotCQkJLy9wcmludGsoIk1nbnREaXNjb25uZWN0KCkgPT09PiBNZ250RGlzY29ubmVjdElCU1NcbiIpOwogCQkJTWdudERpc2Nvbm5lY3RJQlNTKGRldik7CiAJCX0KIAkJaWYoIHByaXYtPmllZWU4MDIxMS0+aXdfbW9kZSA9PSBJV19NT0RFX0lORlJBICkKQEAgLTIwNzEsMTcgKzEzODcsMTAgQEAKIAkJCS8vIGUuZy4gT0lEXzgwMl8xMV9ESVNBU1NPQ0lBVEUgaW4gV2luZG93cyB3aGlsZSBhcyBNZ250RGlzY29ubmVjdEFQKCkgaXMKIAkJCS8vIHVzZWQgdG8gaGFuZGxlIGRpc2Fzc29jaWF0aW9uIHJlbGF0ZWQgdGhpbmdzIHRvIEFQLCBlLmcuIHNlbmQgRGlzYXNzb2MKIAkJCS8vIGZyYW1lIHRvIEFQLiAgMjAwNS4wMS4yNywgYnkgcmNuamtvLgotLy8JCQlTZWNDbGVhckFsbEtleXMoQWRhcHRlcik7Ci0KLS8vCQkJUlRfVFJBQ0UoQ09NUF9NTE1FLCBEQkdfTE9VRCwgKCJNZ250RGlzY29ubmVjdCgpID09PT4gTWdudERpc2Nvbm5lY3RBUFxuIikpOwotCQkJLy9wcmludGsoIk1nbnREaXNjb25uZWN0KCkgPT09PiBNZ250RGlzY29ubmVjdEFQXG4iKTsKIAkJCU1nbnREaXNjb25uZWN0QVAoZGV2LCBhc1Jzbik7CiAJCX0KLQogCQkvLyBJbmlkaWNhdGUgRGlzY29ubmVjdCwgMjAwNS4wMi4yMywgYnkgcmNuamtvLgotLy8JCU1nbnRJbmRpY2F0ZU1lZGlhU3RhdHVzKCBBZGFwdGVyLCBSVF9NRURJQV9ESVNDT05ORUNULCBHRU5FUkFMX0lORElDQVRFKTsKIAl9Ci0KIAlyZXR1cm4gdHJ1ZTsKIH0KIC8vCkBAIC0yMTAxLDI1ICsxNDEwLDEyIEBACiAJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOwogCWJvb2wJCQliUmVzdWx0ID0gZmFsc2U7CiAKLS8vCXByaW50aygiLS0tLS0tLS0tPiBTZXRSRlBvd2VyU3RhdGUoKTogZVJGUG93ZXJTdGF0ZSglZClcbiIsIGVSRlBvd2VyU3RhdGUpOwogCWlmKGVSRlBvd2VyU3RhdGUgPT0gcHJpdi0+ZVJGUG93ZXJTdGF0ZSkKIAl7Ci0vLwkJcHJpbnRrKCI8LS0tLS0tLS0tIFNldFJGUG93ZXJTdGF0ZSgpOiBkaXNjYXJkIHRoZSByZXF1ZXN0IGZvciBlUkZQb3dlclN0YXRlKCVkKSBpcyB0aGUgc2FtZS5cbiIsIGVSRlBvd2VyU3RhdGUpOwogCQlyZXR1cm4gYlJlc3VsdDsKIAl9CiAKLQlzd2l0Y2gocHJpdi0+cmZfY2hpcCkKLQl7Ci0JCWNhc2UgUkZfWkVCUkEyOgotCQljYXNlIFJGX1pFQlJBNDoKLQkJCSBiUmVzdWx0ID0gU2V0WmVicmFSRlBvd2VyU3RhdGU4MTg1KGRldiwgZVJGUG93ZXJTdGF0ZSk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcHJpbnRrKCJTZXRSRlBvd2VyU3RhdGU4MTg1KCk6IHVua25vd24gUkZDaGlwSUQ6IDB4JVghISFcbiIsIHByaXYtPnJmX2NoaXApOwotCQkJYnJlYWs7OwotfQotLy8JcHJpbnRrKCI8LS0tLS0tLS0tIFNldFJGUG93ZXJTdGF0ZSgpOiBiUmVzdWx0KCVkKVxuIiwgYlJlc3VsdCk7CisJIGJSZXN1bHQgPSBTZXRaZWJyYVJGUG93ZXJTdGF0ZTgxODUoZGV2LCBlUkZQb3dlclN0YXRlKTsKIAogCXJldHVybiBiUmVzdWx0OwogfQpAQCAtMjE0OSwzMyArMTQ0NSwyNSBAQAogCVJUX1JGX1BPV0VSX1NUQVRFIAlydFN0YXRlOwogCXUxNgkJCQlSRldhaXRDb3VudGVyID0gMDsKIAl1bnNpZ25lZCBsb25nIGZsYWc7Ci0vLwkgcHJpbnRrKCI9PT0+TWdudEFjdFNldF9SRl9TdGF0ZSgpOiBTdGF0ZVRvU2V0KCVkKSwgQ2hhbmdlU291cmNlKDB4JXgpXG4iLFN0YXRlVG9TZXQsIENoYW5nZVNvdXJjZSk7CiAJLy8KIAkvLyBQcmV2ZW50IHRoZSByYWNlIGNvbmRpdGlvbiBvZiBSRiBzdGF0ZSBjaGFuZ2UuIEJ5IEJydWNlLCAyMDA3LTExLTI4LgogCS8vIE9ubHkgb25lIHRocmVhZCBjYW4gY2hhbmdlIHRoZSBSRiBzdGF0ZSBhdCBvbmUgdGltZSwgYW5kIG90aGVycyBzaG91bGQgd2FpdCB0byBiZSBleGVjdXRlZC4KIAkvLwotI2lmIDEKIAl3aGlsZSh0cnVlKQogCXsKLS8vCQlkb3duKCZwcml2LT5yZl9zdGF0ZSk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5yZl9wc19sb2NrLGZsYWcpOwogCQlpZihwcml2LT5SRkNoYW5nZUluUHJvZ3Jlc3MpCiAJCXsKLS8vCQkJcHJpbnRrKCI9PT09PT09PT09PT09PT09PT09PT5oYWhhMTExMTExMTExXG4iKTsKLS8vCQkJdXAoJnByaXYtPnJmX3N0YXRlKTsKLS8vCQkJUlRfVFJBQ0UoQ09NUF9SRiwgREJHX0xPVUQsICgiTWdudEFjdFNldF9SRl9TdGF0ZSgpOiBSRiBDaGFuZ2UgaW4gcHJvZ3Jlc3MhIFdhaXQgdG8gc2V0Li5TdGF0ZVRvU2V0KCVkKS5cbiIsIFN0YXRlVG9TZXQpKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJmX3BzX2xvY2ssZmxhZyk7CiAJCQkvLyBTZXQgUkYgYWZ0ZXIgdGhlIHByZXZpb3VzIGFjdGlvbiBpcyBkb25lLgogCQkJd2hpbGUocHJpdi0+UkZDaGFuZ2VJblByb2dyZXNzKQogCQkJewogCQkJCVJGV2FpdENvdW50ZXIgKys7Ci0vLwkJCQlSVF9UUkFDRShDT01QX1JGLCBEQkdfTE9VRCwgKCJNZ250QWN0U2V0X1JGX1N0YXRlKCk6IFdhaXQgMSBtcyAoJWQgdGltZXMpLi4uXG4iLCBSRldhaXRDb3VudGVyKSk7CiAJCQkJdWRlbGF5KDEwMDApOyAvLyAxIG1zCiAKIAkJCQkvLyBXYWl0IHRvbyBsb25nLCByZXR1cm4gRkFMU0UgdG8gYXZvaWQgdG8gYmUgc3R1Y2sgaGVyZS4KIAkJCQlpZihSRldhaXRDb3VudGVyID4gMTAwMCkgLy8gMXNlYwogCQkJCXsKLS8vCQkJCQlSVF9BU1NFUlQoRkFMU0UsICgiTWdudEFjdFNldF9SRl9TdGF0ZSgpOiBXYWl0IHRvbyBsb2duIHRvIHNldCBSRlxuIikpOwogCQkJCQlwcmludGsoIk1nbnRBY3RTZXRfUkZfU3RhdGUoKTogV2FpdCB0b28gbG9uZyB0byBzZXQgUkZcbiIpOwogCQkJCQkvLyBUT0RPOiBSZXNldCBSRiBzdGF0ZT8KIAkJCQkJcmV0dXJuIGZhbHNlOwpAQCAtMjE4NCwxNyArMTQ3MiwxMyBAQAogCQl9CiAJCWVsc2UKIAkJewotLy8JCQlwcmludGsoIj09PT09PT09PT09PT09PT09PT09PT09PT5oYWhhMlxuIik7CiAJCQlwcml2LT5SRkNoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlOwotLy8JCQl1cCgmcHJpdi0+cmZfc3RhdGUpOwogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmZfcHNfbG9jayxmbGFnKTsKIAkJCWJyZWFrOwogCQl9CiAJfQotI2VuZGlmCiAJcnRTdGF0ZSA9IHByaXYtPmVSRlBvd2VyU3RhdGU7CiAKLQogCXN3aXRjaChTdGF0ZVRvU2V0KQogCXsKIAljYXNlIGVSZk9uOgpAQCAtMjIxNSw3ICsxNDk5LDYgQEAKIAkJCX0KIAkJfQogCQllbHNlCi0vLwkJCVJUX1RSQUNFKENPTVBfUkYsIERCR19MT1VELCAoIk1nbnRBY3RTZXRfUkZfU3RhdGUgLSBlUmZvbiByZWplY3QgcE1nbnRJbmZvLT5SZk9mZlJlYXNvbj0gMHgleCwgQ2hhbmdlU291cmNlPTB4JVhcbiIsIHBNZ250SW5mby0+UmZPZmZSZWFzb24sIENoYW5nZVNvdXJjZSkpOwogCQkJOwogCQlicmVhazsKIApAQCAtMjIzMiwzOCArMTUxNSwyNiBAQAogCQkJCS8vCiAJCQkJLy8gQ2FsbGluZyBNZ250RGlzY29ubmVjdCgpIGluc3RlYWQgb2YgTWdudEFjdFNldF84MDJfMTFfRElTQVNTT0NJQVRFKCksCiAJCQkJLy8gYmVjYXVzZSB3ZSBkbyBOT1QgbmVlZCB0byBzZXQgc3NpZCB0byBkdW1teSBvbmVzLgotCQkJCS8vIFJldmlzZWQgYnkgUm9nZXIsIDIwMDcuMTIuMDQuCiAJCQkJLy8KIAkJCQlNZ250RGlzY29ubmVjdCggZGV2LCBkaXNhc19sdl9zcyApOwogCiAJCQkJLy8gQ2xlYXIgY29udGVudCBvZiBic3NEZXNjW10gYW5kIGJzc0Rlc2M0UXVlcnlbXSB0byBhdm9pZCByZXBvcnRpbmcgb2xkIGJzcyB0byBVSS4KLQkJCQkvLyAyMDA3LjA1LjI4LCBieSBzaGllbiBjaGFuZy4KLS8vCQkJCVBsYXRmb3JtWmVyb01lbW9yeSggcE1nbnRJbmZvLT5ic3NEZXNjLCBzaXplb2YoUlRfV0xBTl9CU1MpKk1BWF9CU1NfREVTQyApOwotLy8JCQkJcE1nbnRJbmZvLT5OdW1Cc3NEZXNjID0gMDsKLS8vCQkJCVBsYXRmb3JtWmVyb01lbW9yeSggcE1nbnRJbmZvLT5ic3NEZXNjNFF1ZXJ5LCBzaXplb2YoUlRfV0xBTl9CU1MpKk1BWF9CU1NfREVTQyApOwotLy8JCQkJcE1nbnRJbmZvLT5OdW1Cc3NEZXNjNFF1ZXJ5ID0gMDsKIAkJCX0KIAotCi0KIAkJcHJpdi0+UmZPZmZSZWFzb24gfD0gQ2hhbmdlU291cmNlOwogCQliQWN0aW9uQWxsb3dlZCA9IHRydWU7CiAJCWJyZWFrOwotCiAJY2FzZSBlUmZTbGVlcDoKIAkJcHJpdi0+UmZPZmZSZWFzb24gfD0gQ2hhbmdlU291cmNlOwogCQliQWN0aW9uQWxsb3dlZCA9IHRydWU7CiAJCWJyZWFrOwotCiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQogCiAJaWYoYkFjdGlvbkFsbG93ZWQpCiAJewotLy8JCVJUX1RSQUNFKENPTVBfUkYsIERCR19MT1VELCAoIk1nbnRBY3RTZXRfUkZfU3RhdGUoKTogQWN0aW9uIGlzIGFsbG93ZWQuLi4uIFN0YXRlVG9TZXQoJWQpLCBSZk9mZlJlYXNvbiglI1gpXG4iLCBTdGF0ZVRvU2V0LCBwTWdudEluZm8tPlJmT2ZmUmVhc29uKSk7CiAgICAgICAgICAgICAgICAgLy8gQ29uZmlnIEhXIHRvIHRoZSBzcGVjaWZpZWQgbW9kZS4KLS8vCQlwcmludGsoIk1nbnRBY3RTZXRfUkZfU3RhdGUoKTogQWN0aW9uIGlzIGFsbG93ZWQuLi4uIFN0YXRlVG9TZXQoJWQpLCBSZk9mZlJlYXNvbiglI1gpXG4iLCBTdGF0ZVRvU2V0LCBwcml2LT5SZk9mZlJlYXNvbik7CiAJCVNldFJGUG93ZXJTdGF0ZShkZXYsIFN0YXRlVG9TZXQpOwogCiAJCS8vIFR1cm4gb24gUkYuCkBAIC0yMjczLDcgKzE1NDQsNiBAQAogCQkJaWYoYkNvbm5lY3RCeVNTSUQpCiAJCQl7CiAJCQkvLyBieSBhbXkgbm90IHN1cHBvcnRlZAotLy8JCQkJTWdudEFjdFNldF84MDJfMTFfU1NJRChBZGFwdGVyLCBBZGFwdGVyLT5NZ250SW5mby5Tc2lkLk9jdGV0LCBBZGFwdGVyLT5NZ250SW5mby5Tc2lkLkxlbmd0aCwgVFJVRSApOwogCQkJfQogCQl9CiAJCS8vIFR1cm4gb2ZmIFJGLgpAQCAtMjI4MiwxOCArMTU1MiwxMSBAQAogCQkJSGFsRGlzYWJsZVJ4ODE4NUR1bW15KGRldik7CiAJCX0KIAl9Ci0JZWxzZQotCXsKLQkvLwlwcmludGsoIk1nbnRBY3RTZXRfUkZfU3RhdGUoKTogQWN0aW9uIGlzIHJlamVjdGVkLi4uLiBTdGF0ZVRvU2V0KCVkKSwgQ2hhbmdlU291cmNlKCUjWCksIFJmT2ZmUmVhc29uKCUjWClcbiIsIFN0YXRlVG9TZXQsIENoYW5nZVNvdXJjZSwgcHJpdi0+UmZPZmZSZWFzb24pOwotCX0KIAogCS8vIFJlbGVhc2UgUkYgc3BpbmxvY2sKLS8vCWRvd24oJnByaXYtPnJmX3N0YXRlKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cmZfcHNfbG9jayxmbGFnKTsKIAlwcml2LT5SRkNoYW5nZUluUHJvZ3Jlc3MgPSBmYWxzZTsKLS8vCXVwKCZwcml2LT5yZl9zdGF0ZSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmZfcHNfbG9jayxmbGFnKTsKLS8vCXByaW50aygiPD09PU1nbnRBY3RTZXRfUkZfU3RhdGUoKVxuIik7CiAJcmV0dXJuIGJBY3Rpb25BbGxvd2VkOwogfQogdm9pZApAQCAtMjMwMiwxNSArMTU2NSwxMiBAQAogCSkKIHsKIAlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7Ci0JLy91OCBpbmRleCA9IDA7Ci0KIAkvLwogCS8vIFRoaXMgZmxhZyAiYlN3UmZQcm9jZXNzaW5nIiwgaW5kaWNhdGVzIHRoZSBzdGF0dXMgb2YgSVBTIHByb2NlZHVyZSwgc2hvdWxkIGJlIHNldCBpZiB0aGUgSVBTIHdvcmtpdGVtCiAJLy8gaXMgcmVhbGx5IHNjaGVkdWxlZC4KIAkvLyBUaGUgb2xkIGNvZGUsIHNldHMgdGhpcyBmbGFnIGJlZm9yZSBzY2hlZHVsaW5nIHRoZSBJUFMgd29ya2l0ZW0gYW5kIGhvd2V2ZXIsIGF0IHRoZSBzYW1lIHRpbWUgdGhlCiAJLy8gcHJldmlvdXMgSVBTIHdvcmtpdGVtIGRpZCBub3QgZW5kIHlldCwgZmFpbHMgdG8gc2NoZWR1bGUgdGhlIGN1cnJlbnQgd29ya2l0ZW0uIFRodXMsIGJTd1JmUHJvY2Vzc2luZwogCS8vIGJsb2NrcyB0aGUgSVBTIHByb2NlZHVyZSBvZiBzd2l0Y2hpbmcgUkYuCi0JLy8gQnkgQnJ1Y2UsIDIwMDctMTItMjUuCiAJLy8KIAlwcml2LT5iU3dSZlByb2Nlc3NpbmcgPSB0cnVlOwogCkBAIC0yMzI2LDcgKzE1ODYsNiBAQAogLy8KIC8vCURlc2NyaXB0aW9uOgogLy8JCUVudGVyIHRoZSBpbmFjdGl2ZSBwb3dlciBzYXZlIG1vZGUuIFJGIHdpbGwgYmUgb2ZmCi0vLwkyMDA3LjA4LjE3LCBieSBzaGllbiBjaGFuZy4KIC8vCiB2b2lkCiBJUFNFbnRlcigKQEAgLTIzMzUsMTMgKzE1OTQsMTEgQEAKIHsKIAlzdHJ1Y3QgcjgxODBfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgcjgxODBfcHJpdiAqKWllZWU4MDIxMV9wcml2KGRldik7CiAJUlRfUkZfUE9XRVJfU1RBVEUgcnRTdGF0ZTsKLQkvL3ByaW50aygiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PmVudGVyIElQU1xuIik7CiAJaWYgKHByaXYtPmJJbmFjdGl2ZVBzKQogCXsKIAkJcnRTdGF0ZSA9IHByaXYtPmVSRlBvd2VyU3RhdGU7CiAKIAkJLy8KLQkJLy8gQWRkZWQgYnkgQnJ1Y2UsIDIwMDctMTItMjUuCiAJCS8vIERvIG5vdCBlbnRlciBJUFMgaW4gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgogCQkvLyAoMSkgUkYgaXMgYWxyZWFkeSBPRkYgb3IgU2xlZXAKIAkJLy8gKDIpIGJTd1JmUHJvY2Vzc2luZyAoaW5kaWNhdGVzIHRoZSBJUFMgaXMgc3RpbGwgdW5kZXIgZ29pbmcpCkBAIC0yMzUyLDEyICsxNjA5LDEwIEBACiAJCWlmIChydFN0YXRlID09IGVSZk9uICYmICFwcml2LT5iU3dSZlByb2Nlc3NpbmcKIAkJCSYmIChwcml2LT5pZWVlODAyMTEtPnN0YXRlICE9IElFRUU4MDIxMV9MSU5LRUQgKSkKIAkJewotCS8vCQlwcmludGsoIklQU0VudGVyKCk6IFR1cm4gb2ZmIFJGLlxuIik7CiAJCQlwcml2LT5lSW5hY3RpdmVQb3dlclN0YXRlID0gZVJmT2ZmOwogCQkJSW5hY3RpdmVQb3dlclNhdmUoZGV2KTsKIAkJfQogCX0KLS8vCXByaW50aygicHJpdi0+ZVJGUG93ZXJTdGF0ZSBpcyAlZFxuIixwcml2LT5lUkZQb3dlclN0YXRlKTsKIH0KIHZvaWQKIElQU0xlYXZlKApAQCAtMjM2NiwyMCArMTYyMSwxNyBAQAogewogCXN0cnVjdCByODE4MF9wcml2ICpwcml2ID0gKHN0cnVjdCByODE4MF9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKIAlSVF9SRl9QT1dFUl9TVEFURSBydFN0YXRlOwotCS8vcHJpbnRrKCI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT5sZWF2ZSBJUFNcbiIpOwogCWlmIChwcml2LT5iSW5hY3RpdmVQcykKIAl7CiAJCXJ0U3RhdGUgPSBwcml2LT5lUkZQb3dlclN0YXRlOwogCQlpZiAoKHJ0U3RhdGUgPT0gZVJmT2ZmIHx8IHJ0U3RhdGUgPT0gZVJmU2xlZXApICYmICghcHJpdi0+YlN3UmZQcm9jZXNzaW5nKSAmJiBwcml2LT5SZk9mZlJlYXNvbiA8PSBSRl9DSEFOR0VfQllfSVBTKQogCQl7Ci0vLwkJCXByaW50aygiSVBTTGVhdmUoKTogVHVybiBvbiBSRi5cbiIpOwogCQkJcHJpdi0+ZUluYWN0aXZlUG93ZXJTdGF0ZSA9IGVSZk9uOwogCQkJSW5hY3RpdmVQb3dlclNhdmUoZGV2KTsKIAkJfQogCX0KLS8vCXByaW50aygicHJpdi0+ZVJGUG93ZXJTdGF0ZSBpcyAlZFxuIixwcml2LT5lUkZQb3dlclN0YXRlKTsKIH0KLS8vYnkgYW15IGZvciBwb3dlciBzYXZlCisKIHZvaWQgcnRsODE4NWJfYWRhcHRlcl9zdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogICAgICAgc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwpAQCAtMjM4OCw3NSArMTY0MCw0NSBAQAogCXU4IFN1cHBvcnRlZFdpcmVsZXNzTW9kZTsKIAl1OAkJCUluaXRXaXJlbGVzc01vZGU7CiAJdTgJCQliSW52YWxpZFdpcmVsZXNzTW9kZSA9IDA7Ci0JLy9pbnQgaTsKIAl1OCB0bXB1ODsKLSAgICAJLy91OCB1MXRtcCx1MnRtcDsKIAl1OCBidENSOTM0NjsKIAl1OCBUbXBVMWI7CiAJdTggYnRQU1I7CiAKLQkvL3J0bDgxODBfcnR4X2Rpc2FibGUoZGV2KTsKLS8ve2J5IGFteSAwODAzMTIKIAl3cml0ZV9uaWNfYnl0ZShkZXYsMHgyNGUsIChCSVQ1fEJJVDZ8QklUMCkpOwotLy9ieSBhbXkgMDgwMzEyfQogCXJ0bDgxODBfcmVzZXQoZGV2KTsKIAogCXByaXYtPmRtYV9wb2xsX21hc2sgPSAwOwogCXByaXYtPmRtYV9wb2xsX3N0b3BfbWFzayA9IDA7CiAKLQkvL3J0bDgxODBfYmVhY29uX3R4X2Rpc2FibGUoZGV2KTsKLQogCUh3Q29uZmlndXJlUlRMODE4NShkZXYpOwotCiAJd3JpdGVfbmljX2R3b3JkKGRldiwgTUFDMCwgKCh1MzIqKWRldi0+ZGV2X2FkZHIpWzBdKTsKIAl3cml0ZV9uaWNfd29yZChkZXYsIE1BQzQsICgodTMyKilkZXYtPmRldl9hZGRyKVsxXSAmIDB4ZmZmZiApOwotCiAJd3JpdGVfbmljX2J5dGUoZGV2LCBNU1IsIHJlYWRfbmljX2J5dGUoZGV2LCBNU1IpICYgMHhmMyk7CS8vIGRlZmF1bHQgbmV0d29yayB0eXBlIHRvICdObwlMaW5rJwotCi0JLy93cml0ZV9uaWNfYnl0ZShkZXYsIEJSU1IsIDB4MCk7CQkvLyBTZXQgQlJTUj0gMU0KLQogCXdyaXRlX25pY193b3JkKGRldiwgQmNuSXR2LCAxMDApOwogCXdyaXRlX25pY193b3JkKGRldiwgQXRpbVduZCwgMik7Ci0KLQkvL1BsYXRmb3JtRUZJT1dyaXRlMkJ5dGUoZGV2LCBGRU1SLCAweEZGRkYpOwogCVBsYXRmb3JtSU9Xcml0ZTJCeXRlKGRldiwgRkVNUiwgMHhGRkZGKTsKLQogCXdyaXRlX25pY19ieXRlKGRldiwgV1BBX0NPTkZJRywgMCk7Ci0KIAlNYWNDb25maWdfODVCQVNJQyhkZXYpOwotCiAJLy8gT3ZlcnJpZGUgdGhlIFJGU1dfQ1RSTCAoTUFDIG9mZnNldCAweDI3Mi0weDI3MyksIDIwMDYuMDYuMDcsIGJ5IHJjbmprby4KIAkvLyBCVF9ERU1PX0JPQVJEIHR5cGUKIAlQbGF0Zm9ybUlPV3JpdGUyQnl0ZShkZXYsIFJGU1dfQ1RSTCwgMHg1NjlhKTsKLS8vYnkgYW15Ci0vLyNpZmRlZiBDT05GSUdfUlRMODE4WF9TCi0JCS8vIGZvciBqb25nIHJlcXVpcmVkCi0vLwlQbGF0Zm9ybUlPV3JpdGUyQnl0ZShkZXYsIFJGU1dfQ1RSTCwgMHg5YTU2KTsKLS8vI2VuZGlmCi0vL2J5IGFteQotCS8vQlRfUUFfQk9BUkQKLQkvL1BsYXRmb3JtSU9Xcml0ZTJCeXRlKGRldiwgUkZTV19DVFJMLCAweDlhNTYpOwogCiAJLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCS8vIFNldCB1cCBQSFkgcmVsYXRlZC4KIAkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAJLy8gRW5hYmxlIENvbmZpZzMuUEFSQU1fRW4gdG8gcmV2aXNlIEFuYWFQYXJtLgogCXdyaXRlX25pY19ieXRlKGRldiwgQ1I5MzQ2LCAweGMwKTsJLy8gZW5hYmxlIGNvbmZpZyByZWdpc3RlciB3cml0ZQotLy9ieSBhbXkKIAl0bXB1OCA9IHJlYWRfbmljX2J5dGUoZGV2LCBDT05GSUczKTsKIAl3cml0ZV9uaWNfYnl0ZShkZXYsIENPTkZJRzMsICh0bXB1OCB8Q09ORklHM19QQVJNX0VuKSApOwotLy9ieSBhbXkKIAkvLyBUdXJuIG9uIEFuYWxvZyBwb3dlci4KIAkvLyBBc2tlZCBmb3IgYnkgV2lsbGlhbSwgb3RoZXJ3aXNlLCBNQUMgMy13aXJlIGNhbid0IHdvcmssIDIwMDYuMDYuMjcsIGJ5IHJjbmprby4KIAl3cml0ZV9uaWNfZHdvcmQoZGV2LCBBTkFQQVJBTTIsIEFOQVBBUk0yX0FTSUNfT04pOwogCXdyaXRlX25pY19kd29yZChkZXYsIEFOQVBBUkFNLCBBTkFQQVJNX0FTSUNfT04pOwotLy9ieSBhbXkKIAl3cml0ZV9uaWNfd29yZChkZXYsIEFOQVBBUkFNMywgMHgwMDEwKTsKLS8vYnkgYW15CiAKIAl3cml0ZV9uaWNfYnl0ZShkZXYsIENPTkZJRzMsIHRtcHU4KTsKIAl3cml0ZV9uaWNfYnl0ZShkZXYsIENSOTM0NiwgMHgwMCk7Ci0vL3tieSBhbXkgMDgwMzEyIGZvciBsZWQKIAkvLyBlbmFibGUgRUVNMCBhbmQgRUVNMSBpbiA5MzQ2Q1IKIAlidENSOTM0NiA9IHJlYWRfbmljX2J5dGUoZGV2LCBDUjkzNDYpOwogCXdyaXRlX25pY19ieXRlKGRldiwgQ1I5MzQ2LCAoYnRDUjkzNDZ8MHhDMCkgKTsKQEAgLTI0NzQsNyArMTY5Niw2IEBACiAJLy8gQi1jdXQgUkYgUmFkaW8gb24vb2ZmICA1ZVszXT0wCiAJYnRQU1IgPSByZWFkX25pY19ieXRlKGRldiwgUFNSKTsKIAl3cml0ZV9uaWNfYnl0ZShkZXYsIFBTUiwgKGJ0UFNSIHwgQklUMykpOwotLy9ieSBhbXkgMDgwMzEyIGZvciBsZWR9CiAJLy8gc2V0dXAgaW5pdGlhbCB0aW1pbmcgZm9yIFJGRS4KIAl3cml0ZV9uaWNfd29yZChkZXYsIFJGUGluc091dHB1dCwgMHgwNDgwKTsKIAlTZXRPdXRwdXRFbmFibGVPZlJmUGlucyhkZXYpOwpAQCAtMjUzNyw1NSArMTc1OCwxOSBAQAogCQlJbml0V2lyZWxlc3NNb2RlID0gaWVlZS0+bW9kZTsKIAl9CiAvL2J5IGFteSBmb3IgcG93ZXIgc2F2ZQotLy8JcHJpbnRrKCJpbml0aWFsaXplIEVOQUJMRV9JUFNcbiIpOwogCXByaXYtPmVSRlBvd2VyU3RhdGUgPSBlUmZPZmY7CiAJcHJpdi0+UmZPZmZSZWFzb24gPSAwOwogCXsKLQkvLwl1MzIgdG1wMjsKLQkvLwl1MzIgdG1wID0gamlmZmllczsKIAkJTWdudEFjdFNldF9SRl9TdGF0ZShkZXYsIGVSZk9uLCAwKTsKLQkvLwl0bXAyID0gamlmZmllczsKLQkvLwlwcmludGsoInJmIG9uIGNvc3QgamlmZmllczolbHhcbiIsICh0bXAyLXRtcCkqMTAwMC9IWik7CiAJfQotLy8JRHJ2SUZJbmRpY2F0ZUN1cnJlbnRQaHlTdGF0dXMocHJpdik7CiAJCS8vCiAJCS8vIElmIGluYWN0aXZlIHBvd2VyIG1vZGUgaXMgZW5hYmxlZCwgZGlzYWJsZSByZiB3aGlsZSBpbiBkaXNjb25uZWN0ZWQgc3RhdGUuCi0JCS8vIDIwMDcuMDcuMTYsIGJ5IHNoaWVuIGNoYW5nLgogCQkvLwogCWlmIChwcml2LT5iSW5hY3RpdmVQcykKIAl7Ci0JLy8JdTMyIHRtcDI7Ci0JLy8JdTMyIHRtcCA9IGppZmZpZXM7CiAJCU1nbnRBY3RTZXRfUkZfU3RhdGUoZGV2LGVSZk9mZiwgUkZfQ0hBTkdFX0JZX0lQUyk7Ci0JLy8JdG1wMiA9IGppZmZpZXM7Ci0JLy8JcHJpbnRrKCJyZiBvZmYgY29zdCBqaWZmaWVzOiVseFxuIiwgKHRtcDItdG1wKSoxMDAwL0haKTsKLQogCX0KLS8vCUlQU0VudGVyKGRldik7CiAvL2J5IGFteSBmb3IgcG93ZXIgc2F2ZQotI2lmZGVmIFRPRE8KLQkvLyBUdXJuIG9mZiBSRiBpZiBuZWNlc3NhcnkuIDIwMDUuMDguMjMsIGJ5IHJjbmprby4KLQkvLyBXZSBzaGFsbCB0dXJuIG9mZiBSRiBhZnRlciBzZXR0aW5nIENNRFIsIG90aGVyd2lzZSwKLQkvLyBSRiB3aWxsIGJlIHR1cm5uZWQgb24gYWZ0ZXIgd2UgZW5hYmxlIE1BQyBUeC9SeC4KLQlpZihBZGFwdGVyLT5NZ250SW5mby5SZWdSZk9mZiA9PSBUUlVFKQotCXsKLQkJU2V0UkZQb3dlclN0YXRlODE4NShBZGFwdGVyLCBSRl9PRkYpOwotCX0KLQllbHNlCi0JewotCQlTZXRSRlBvd2VyU3RhdGU4MTg1KEFkYXB0ZXIsIFJGX09OKTsKLQl9Ci0jZW5kaWYKLQotLyogICAvL3RoZXNlIGlzIGVxdWFsIHdpdGggYWJvdmUgVE9ETy4KLQl3cml0ZV9uaWNfYnl0ZShkZXYsIENSOTM0NiwgMHhjMCk7CS8vIGVuYWJsZSBjb25maWcgcmVnaXN0ZXIgd3JpdGUKLQl3cml0ZV9uaWNfYnl0ZShkZXYsIENPTkZJRzMsIHJlYWRfbmljX2J5dGUoZGV2LCBDT05GSUczKSB8IENPTkZJRzNfUEFSTV9Fbik7Ci0JUkZfV3JpdGVSZWcoZGV2LCAweDQsIDB4OUZGKTsKLQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBBTkFQQVJBTTIsIEFOQVBBUk0yX0FTSUNfT04pOwotCXdyaXRlX25pY19kd29yZChkZXYsIEFOQVBBUkFNLCBBTkFQQVJNX0FTSUNfT04pOwotCXdyaXRlX25pY19ieXRlKGRldiwgQ09ORklHMywgKHJlYWRfbmljX2J5dGUoZGV2LCBDT05GSUczKSYofkNPTkZJRzNfUEFSTV9FbikpKTsKLQl3cml0ZV9uaWNfYnl0ZShkZXYsIENSOTM0NiwgMHgwMCk7Ci0qLwogCiAJQWN0U2V0V2lyZWxlc3NNb2RlODE4NShkZXYsICh1OCkoSW5pdFdpcmVsZXNzTW9kZSkpOwogCkBAIC0yNTk0LDE0ICsxNzc5LDExIEBACiAJcnRsODE4NWJfaXJxX2VuYWJsZShkZXYpOwogCiAJbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsKLQogIH0KIAotCiB2b2lkIHJ0bDgxODViX3J4X2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXU4IGNtZDsKLQkvL3UzMiByeGNvbmY7CiAJLyogZm9yIG5vdyB3ZSBhY2NlcHQgZGF0YSwgbWFuYWdlbWVudCAmIGN0bCBmcmFtZSovCiAJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOwogCkBAIC0yNjEzLDExICsxNzk1LDYgQEAKIAkJcHJpdi0+UmVjZWl2ZUNvbmZpZyA9IHByaXYtPlJlY2VpdmVDb25maWcgfCBSQ1JfQUFQOwogCX0KIAotCS8qaWYocHJpdi0+aWVlZTgwMjExLT5pd19tb2RlID09IElXX01PREVfTUFTVEVSKXsKLQkJcnhjb25mID0gcnhjb25mIHwgKDE8PEFDQ0VQVF9BTExNQUNfRlJBTUVfU0hJRlQpOwotCQlyeGNvbmYgPSByeGNvbmYgfCAoMTw8UlhfQ0hFQ0tfQlNTSURfU0hJRlQpOwotCX0qLwotCiAJaWYocHJpdi0+aWVlZTgwMjExLT5pd19tb2RlID09IElXX01PREVfTU9OSVRPUil7CiAJCXByaXYtPlJlY2VpdmVDb25maWcgPSBwcml2LT5SZWNlaXZlQ29uZmlnIHwgUkNSX0FDRiB8IFJDUl9BUFdSTUdUIHwgUkNSX0FJQ1Y7CiAJfQpAQCAtMjYyOSw5ICsxODA2LDYgQEAKIAogCWZpeF9yeF9maWZvKGRldik7CiAKLSNpZmRlZiBERUJVR19SWAotCURNRVNHKCJyeGNvbmY6ICV4ICV4Iixwcml2LT5SZWNlaXZlQ29uZmlnICxyZWFkX25pY19kd29yZChkZXYsUkNSKSk7Ci0jZW5kaWYKIAljbWQ9cmVhZF9uaWNfYnl0ZShkZXYsQ01EKTsKIAl3cml0ZV9uaWNfYnl0ZShkZXYsQ01ELGNtZCB8ICgxPDxDTURfUlhfRU5BQkxFX1NISUZUKSk7CiAKQEAgLTI2NDAsOSArMTgxNCw3IEBACiB2b2lkIHJ0bDgxODViX3R4X2VuYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXU4IGNtZDsKLQkvL3U4IHR4X2FnY19jdGw7CiAJdTggYnl0ZTsKLQkvL3UzMiB0eGNvbmY7CiAJc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTgwX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOwogCiAJd3JpdGVfbmljX2R3b3JkKGRldiwgVENSLCBwcml2LT5UcmFuc21pdENvbmZpZyk7CkBAIC0yNjUyLDIxICsxODI0LDcgQEAKIAogCWZpeF90eF9maWZvKGRldik7CiAKLSNpZmRlZiBERUJVR19UWAotCURNRVNHKCJ0eGNvbmY6ICV4ICV4Iixwcml2LT5UcmFuc21pdENvbmZpZyxyZWFkX25pY19kd29yZChkZXYsVENSKSk7Ci0jZW5kaWYKLQogCWNtZD1yZWFkX25pY19ieXRlKGRldixDTUQpOwogCXdyaXRlX25pY19ieXRlKGRldixDTUQsY21kIHwgKDE8PENNRF9UWF9FTkFCTEVfU0hJRlQpKTsKLQotCS8vd3JpdGVfbmljX2R3b3JkKGRldixUWF9DT05GLHR4Y29uZik7Ci0KLQotLyoKLQlydGw4MTgwX3NldF9tb2RlKGRldixFUFJPTV9DTURfQ09ORklHKTsKLQl3cml0ZV9uaWNfYnl0ZShkZXYsIFRYX0RNQV9QT0xMSU5HLCBwcml2LT5kbWFfcG9sbF9tYXNrKTsKLQlydGw4MTgwX3NldF9tb2RlKGRldixFUFJPTV9DTURfTk9STUFMKTsKLQkqLwogfQogCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9NYWtlZmlsZSBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9NYWtlZmlsZQppbmRleCA1ZTRhYTk1Li5lMDMyYzNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL01ha2VmaWxlCkBAIC0xLDEzICsxLDE1IEBACiBOSUNfU0VMRUNUID0gUlRMODE5MkUKIAotCiBFWFRSQV9DRkxBR1MgKz0gLURSVEw4MTkyRQogRVhUUkFfQ0ZMQUdTICs9IC1zdGQ9Z251ODkKIEVYVFJBX0NGTEFHUyArPSAtTzIKIEVYVFJBX0NGTEFHUyArPSAtRFRIT01BU19UVVJCTwogRVhUUkFfQ0ZMQUdTICs9IC1ERU5BQkxFX0RPVDExRAogCi1yODE5Ml9wY2ktb2JqcyA6PQkJXAorRVhUUkFfQ0ZMQUdTICs9IC1ERU5BQkxFX0lQUworRVhUUkFfQ0ZMQUdTICs9IC1ERU5BQkxFX0xQUworCityODE5MmVfcGNpLW9ianMgOj0JCVwKIAlyODE5MkVfY29yZS5vCQlcCiAJcjgxODBfOTNjeDYubwkJXAogCXI4MTkyRV93eC5vCQlcCkBAIC0zMSw0ICszMyw1IEBACiAJaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF9jY21wLm8JXAogCWllZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfd2VwLm8KIAotb2JqLSQoQ09ORklHX1JUTDgxOTJFKSArPSByODE5Ml9wY2kubworb2JqLSQoQ09ORklHX1JUTDgxOTJFKSArPSByODE5MmVfcGNpLm8KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2RvdDExZC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2RvdDExZC5oCmluZGV4IDE1YjdhNGIuLjViMGUyZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9kb3QxMWQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvZG90MTFkLmgKQEAgLTEsMTAyICsxLDk2IEBACi0jaWZuZGVmIF9fSU5DX0RPVDExRF9ICi0jZGVmaW5lIF9fSU5DX0RPVDExRF9ICisjaWZuZGVmIElOQ19ET1QxMURfSAorI2RlZmluZSBJTkNfRE9UMTFEX0gKIAogI2lmZGVmIEVOQUJMRV9ET1QxMUQKICNpbmNsdWRlICJpZWVlODAyMTEuaCIKIAotLy8jZGVmaW5lIEVOQUJMRV9ET1QxMUQKLQotLy8jZGVmaW5lIERPVDExRF9NQVhfQ0hOTF9OVU0gODMKLQogdHlwZWRlZiBzdHJ1Y3QgX0NITkxfVFhQT1dFUl9UUklQTEUgewogCXU4IEZpcnN0Q2hubDsKIAl1OCAgTnVtQ2hubHM7CiAJdTggIE1heFR4UG93ZXJJbkRibTsKLX1DSE5MX1RYUE9XRVJfVFJJUExFLCAqUENITkxfVFhQT1dFUl9UUklQTEU7Cit9IENITkxfVFhQT1dFUl9UUklQTEUsICpQQ0hOTF9UWFBPV0VSX1RSSVBMRTsKIAogdHlwZWRlZiBlbnVtIF9ET1QxMURfU1RBVEUgewogCURPVDExRF9TVEFURV9OT05FID0gMCwKIAlET1QxMURfU1RBVEVfTEVBUk5FRCwKIAlET1QxMURfU1RBVEVfRE9ORSwKLX1ET1QxMURfU1RBVEU7Cit9IERPVDExRF9TVEFURTsKKworLyoqCisgKiBzdHJ1Y3QgX1JUX0RPVDExRF9JTkZPCisgKiBAQ291bnRyeUllTGVuOiB2YWx1ZSBncmVhdGVyIHRoYW4gMCBpZiBAQ291bnRyeUllQnVmIGNvbnRhaW5zCisgKiAJICAgICAgICAgIHZhbGlkIGNvdW50cnkgaW5mb3JtYXRpb24gZWxlbWVudC4KKyAqIEBjaGFuZWxsX21hcDogaG9sZHMgY2hhbm5lbCB2YWx1ZXMKKyAqCQkwIC0gaW52YWxpZCwKKyAqCQkxIC0gdmFsaWQgKGFjdGl2ZSBzY2FuKSwKKyAqCSAJMiAtIHZhbGlkIChwYXNzaXZlIHNjYW4pCisgKiBAQ291bnRyeUllU3JjQWRkciAtIFNvdXJjZSBBUCBvZiB0aGUgY291bnRyeSBJRQorICovCiAKIHR5cGVkZWYgc3RydWN0IF9SVF9ET1QxMURfSU5GTyB7Ci0JLy9ERUNMQVJFX1JUX09CSkVDVChSVF9ET1QxMURfSU5GTyk7CisJYm9vbCBiRW5hYmxlZDsKIAotCWJvb2wgYkVuYWJsZWQ7IC8vIGRvdDExTXVsdGlEb21haW5DYXBhYmlsaXR5RW5hYmxlZAorCXUxNiBDb3VudHJ5SWVMZW47CisJdTggQ291bnRyeUllQnVmW01BWF9JRV9MRU5dOworCXU4IENvdW50cnlJZVNyY0FkZHJbNl07CisJdTggQ291bnRyeUllV2F0Y2hkb2c7CiAKLQl1MTYgQ291bnRyeUllTGVuOyAvLyA+IDAgaWYgQ291bnRyeUllQnVmW10gY29udGFpbnMgdmFsaWQgY291bnRyeSBpbmZvcm1hdGlvbiBlbGVtZW50LgotCXU4ICBDb3VudHJ5SWVCdWZbTUFYX0lFX0xFTl07Ci0JdTggIENvdW50cnlJZVNyY0FkZHJbNl07IC8vIFNvdXJjZSBBUCBvZiB0aGUgY291bnRyeSBJRS4KLQl1OCAgQ291bnRyeUllV2F0Y2hkb2c7Ci0KLQl1OCAgY2hhbm5lbF9tYXBbTUFYX0NIQU5ORUxfTlVNQkVSKzFdOyAgLy8hISFWYWx1ZSAwOiBJbnZhbGlkLCAxOiBWYWxpZCAoYWN0aXZlIHNjYW4pLCAyOiBWYWxpZCAocGFzc2l2ZSBzY2FuKQotCS8vdTggIENobmxMaXN0TGVuOyAvLyAjQnl0ZXMgdmFsaWQgaW4gQ2hubExpc3RbXS4KLQkvL3U4ICBDaG5sTGlzdFtET1QxMURfTUFYX0NITkxfTlVNXTsKLQl1OCAgTWF4VHhQd3JEYm1MaXN0W01BWF9DSEFOTkVMX05VTUJFUisxXTsKKwl1OCBjaGFubmVsX21hcFtNQVhfQ0hBTk5FTF9OVU1CRVIrMV07CisJdTggTWF4VHhQd3JEYm1MaXN0W01BWF9DSEFOTkVMX05VTUJFUisxXTsKIAogCURPVDExRF9TVEFURSBTdGF0ZTsKLX1SVF9ET1QxMURfSU5GTywgKlBSVF9ET1QxMURfSU5GTzsKLSNkZWZpbmUgZXFNYWNBZGRyKGEsYikJCSggKChhKVswXT09KGIpWzBdICYmIChhKVsxXT09KGIpWzFdICYmIChhKVsyXT09KGIpWzJdICYmIChhKVszXT09KGIpWzNdICYmIChhKVs0XT09KGIpWzRdICYmIChhKVs1XT09KGIpWzVdKSA/IDE6MCApCi0jZGVmaW5lIGNwTWFjQWRkcihkZXMsc3JjKQkgICAgICAoKGRlcylbMF09KHNyYylbMF0sKGRlcylbMV09KHNyYylbMV0sKGRlcylbMl09KHNyYylbMl0sKGRlcylbM109KHNyYylbM10sKGRlcylbNF09KHNyYylbNF0sKGRlcylbNV09KHNyYylbNV0pCi0jZGVmaW5lIEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KSAoKFBSVF9ET1QxMURfSU5GTykoKF9fcEllZWVEZXYpLT5wRG90MTFkSW5mbykpCit9IFJUX0RPVDExRF9JTkZPLCAqUFJUX0RPVDExRF9JTkZPOworCisjZGVmaW5lIGVxTWFjQWRkcihhLCBiKSAoKChhKVswXSA9PSAoYilbMF0gJiYgKGEpWzFdID09IChiKVsxXSAmJiAoYSlbMl0gPT0gXAorCQkJKGIpWzJdICYmIChhKVszXSA9PSAoYilbM10gJiYgKGEpWzRdID09IChiKVs0XSAmJiBcCisJCQkoYSlbNV0gPT0gKGIpWzVdKSA/IDEgOiAwKQorCisjZGVmaW5lIGNwTWFjQWRkcihkZXMsIHNyYykgKChkZXMpWzBdID0gKHNyYylbMF0sIChkZXMpWzFdID0gKHNyYylbMV0sIFwKKwkJCShkZXMpWzJdID0gKHNyYylbMl0sIChkZXMpWzNdID0gKHNyYylbM10sIFwKKwkJCShkZXMpWzRdID0gKHNyYylbNF0sIChkZXMpWzVdID0gKHNyYylbNV0pCisKKyNkZWZpbmUgR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpICgoUFJUX0RPVDExRF9JTkZPKSBcCisJCQkoKF9fcEllZWVEZXYpLT5wRG90MTFkSW5mbykpCiAKICNkZWZpbmUgSVNfRE9UMTFEX0VOQUJMRShfX3BJZWVlRGV2KSBHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPmJFbmFibGVkCi0jZGVmaW5lIElTX0NPVU5UUllfSUVfVkFMSUQoX19wSWVlZURldikgKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllTGVuID4gMCkKKyNkZWZpbmUgSVNfQ09VTlRSWV9JRV9WQUxJRChfX3BJZWVlRGV2KSBcCisJCQkoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVMZW4gPiAwKQogCi0jZGVmaW5lIElTX0VRVUFMX0NJRV9TUkMoX19wSWVlZURldiwgX19wVGEpIGVxTWFjQWRkcihHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZVNyY0FkZHIsIF9fcFRhKQotI2RlZmluZSBVUERBVEVfQ0lFX1NSQyhfX3BJZWVlRGV2LCBfX3BUYSkgY3BNYWNBZGRyKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllU3JjQWRkciwgX19wVGEpCisjZGVmaW5lIElTX0VRVUFMX0NJRV9TUkMoX19wSWVlZURldiwgX19wVGEpIFwKKwkJZXFNYWNBZGRyKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllU3JjQWRkciwgX19wVGEpCisKKyNkZWZpbmUgVVBEQVRFX0NJRV9TUkMoX19wSWVlZURldiwgX19wVGEpIFwKKwkJY3BNYWNBZGRyKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllU3JjQWRkciwgX19wVGEpCiAKICNkZWZpbmUgSVNfQ09VTlRSWV9JRV9DSEFOR0VEKF9fcEllZWVEZXYsIF9fSWUpIFwKLQkoKChfX0llKS5MZW5ndGggPT0gMCB8fCAoX19JZSkuTGVuZ3RoICE9IEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllTGVuKSA/IFwKLQlGQUxTRSA6IFwKLQkoIW1lbWNtcChHRVRfRE9UMTFEX0lORk8oX19wSWVlZURldiktPkNvdW50cnlJZUJ1ZiwgKF9fSWUpLk9jdGV0LCAoX19JZSkuTGVuZ3RoKSkpCisJKCgoX19JZSkuTGVuZ3RoID09IDAgfHwgKF9fSWUpLkxlbmd0aCAhPSBcCisJR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVMZW4pID8gRkFMU0UgOiBcCisJKCFtZW1jbXAoR0VUX0RPVDExRF9JTkZPKF9fcEllZWVEZXYpLT5Db3VudHJ5SWVCdWYsIFwKKwkoX19JZSkuT2N0ZXQsIChfX0llKS5MZW5ndGgpKSkKIAogI2RlZmluZSBDSUVfV0FUQ0hET0dfVEggMQogI2RlZmluZSBHRVRfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpIEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+Q291bnRyeUllV2F0Y2hkb2cKICNkZWZpbmUgUkVTRVRfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpIEdFVF9DSUVfV0FUQ0hET0coX19wSWVlZURldikgPSAwCiAjZGVmaW5lIFVQREFURV9DSUVfV0FUQ0hET0coX19wSWVlZURldikgKytHRVRfQ0lFX1dBVENIRE9HKF9fcEllZWVEZXYpCiAKLSNkZWZpbmUgSVNfRE9UMTFEX1NUQVRFX0RPTkUoX19wSWVlZURldikgKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+U3RhdGUgPT0gRE9UMTFEX1NUQVRFX0RPTkUpCisjZGVmaW5lIElTX0RPVDExRF9TVEFURV9ET05FKF9fcEllZWVEZXYpIFwKKwkJKEdFVF9ET1QxMURfSU5GTyhfX3BJZWVlRGV2KS0+U3RhdGUgPT0gRE9UMTFEX1NUQVRFX0RPTkUpCiAKIAotdm9pZAotRG90MTFkX0luaXQoCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldgotCSk7Cit2b2lkIERvdDExZF9Jbml0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYpOwogCi12b2lkCi1Eb3QxMWRfUmVzZXQoCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldgotCSk7Cit2b2lkIERvdDExZF9SZXNldChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2KTsKIAotdm9pZAotRG90MTFkX1VwZGF0ZUNvdW50cnlJZSgKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2LAotCXU4ICoJCXBUYWRkciwKLQl1MTYJQ291dHJ5SWVMZW4sCi0JdTggKiBwQ291dHJ5SWUKLQkpOwordm9pZCBEb3QxMWRfVXBkYXRlQ291bnRyeUllKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYsIHU4ICpwVGFkZHIsCisJCXUxNiBDb3V0cnlJZUxlbiwgdTggKnBDb3V0cnlJZSk7CiAKLXU4Ci1ET1QxMURfR2V0TWF4VHhQd3JJbkRibSgKLQlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2LAotCXU4IENoYW5uZWwKLQkpOwordTggRE9UMTFEX0dldE1heFR4UHdySW5EYm0oc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmRldiwgdTggY2hhbm5lbCk7CiAKLXZvaWQKLURPVDExRF9TY2FuQ29tcGxldGUoCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYKLQkpOwordm9pZCBET1QxMURfU2NhbkNvbXBsZXRlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYpOwogCi1pbnQgSXNMZWdhbENoYW5uZWwoCi0Jc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKiBkZXYsCi0JdTggY2hhbm5lbAotKTsKK2ludCBJc0xlZ2FsQ2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqZGV2LCB1OCBjaGFubmVsKTsKIAotaW50IFRvTGVnYWxDaGFubmVsKAotCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICogZGV2LAotCXU4IGNoYW5uZWwKLSk7Ci0jZW5kaWYgLy9FTkFCTEVfRE9UMTFECi0jZW5kaWYgLy8gI2lmbmRlZiBfX0lOQ19ET1QxMURfSAoraW50IFRvTGVnYWxDaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICpkZXYsIHU4IGNoYW5uZWwpOworCisjZW5kaWYgLyogRU5BQkxFX0RPVDExRCAqLworI2VuZGlmIC8qIElOQ19ET1QxMURfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS5oCmluZGV4IDNiYTllOWUuLmMzOTI0OWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExLmgKQEAgLTU0Nyw5ICs1NDcsNiBAQAogCiAvKiBkZWJ1ZyBtYWNyb3Mgbm90IGRlcGVuZGVudCBvbiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCiAKLSNkZWZpbmUgTUFDX0ZNVCAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiCi0jZGVmaW5lIE1BQ19BUkcoeCkgKCh1OCopKHgpKVswXSwoKHU4KikoeCkpWzFdLCgodTgqKSh4KSlbMl0sKCh1OCopKHgpKVszXSwoKHU4KikoeCkpWzRdLCgodTgqKSh4KSlbNV0KLQogLyoKICAqIFRvIHVzZSB0aGUgZGVidWcgc3lzdGVtOwogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMS5oCmluZGV4IGFhNzYzOTAuLjFmNjEzYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTEuaApAQCAtMzUsNiArMzUsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgpAQCAtMTgwLDYgKzE4MSw4IEBACiAgICAgICAgIHU4IERydkFnZ3JOdW07CiAJdTE2IHBrdF9zaXplOwogICAgICAgICB1OCByZXNlcnZlZDEyOworCisJdTggYmRoY3A7CiB9Y2JfZGVzYywgKnBjYl9kZXNjOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRGVmaW5lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNjE1LDkgKzYxOCw2IEBACiAKIC8qIGRlYnVnIG1hY3JvcyBub3QgZGVwZW5kZW50IG9uIENPTkZJR19JRUVFODAyMTFfREVCVUcgKi8KIAotI2RlZmluZSBNQUNfRk1UICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCIKLSNkZWZpbmUgTUFDX0FSRyh4KSAoKHU4KikoeCkpWzBdLCgodTgqKSh4KSlbMV0sKCh1OCopKHgpKVsyXSwoKHU4KikoeCkpWzNdLCgodTgqKSh4KSlbNF0sKCh1OCopKHgpKVs1XQotCiAvKgogICogVG8gdXNlIHRoZSBkZWJ1ZyBzeXN0ZW07CiAgKgpAQCAtNzQzLDYgKzc0Myw4IEBACiAjZGVmaW5lIFdMQU5fRkNfR0VUX1ZFUlMoZmMpICgoZmMpICYgSUVFRTgwMjExX0ZDVExfVkVSUykKICNkZWZpbmUgV0xBTl9GQ19HRVRfVFlQRShmYykgKChmYykgJiBJRUVFODAyMTFfRkNUTF9GVFlQRSkKICNkZWZpbmUgV0xBTl9GQ19HRVRfU1RZUEUoZmMpICgoZmMpICYgSUVFRTgwMjExX0ZDVExfU1RZUEUpCisjZGVmaW5lIFdMQU5fRkNfTU9SRV9EQVRBKGZjKSAoKGZjKSAmIElFRUU4MDIxMV9GQ1RMX01PUkVEQVRBKQorCiAKICNkZWZpbmUgV0xBTl9GQ19HRVRfRlJBTUVUWVBFKGZjKSAoKGZjKSAmIElFRUU4MDIxMV9GQ1RMX0ZSQU1FVFlQRSkKICNkZWZpbmUgV0xBTl9HRVRfU0VRX0ZSQUcoc2VxKSAoKHNlcSkgJiBJRUVFODAyMTFfU0NUTF9GUkFHKQpAQCAtMTA1NSw3ICsxMDU3LDcgQEAKICNkZWZpbmUgU0VDX0FMR19OT05FICAgICAgICAgICAgMAogI2RlZmluZSBTRUNfQUxHX1dFUCAgICAgICAgICAgICAxCiAjZGVmaW5lIFNFQ19BTEdfVEtJUCAgICAgICAgICAgIDIKLSNkZWZpbmUgU0VDX0FMR19DQ01QICAgICAgICAgICAgMworI2RlZmluZSBTRUNfQUxHX0NDTVAgICAgICAgICAgICA0CiAKICNkZWZpbmUgV0VQX0tFWVMgCQk0CiAjZGVmaW5lIFdFUF9LRVlfTEVOCQkxMwpAQCAtMTEyNCw2ICsxMTI2LDE0IEBACiAvKiBNaW5pbWFsIGhlYWRlcjsgY2FuIGJlIHVzZWQgZm9yIHBhc3NpbmcgODAyLjExIGZyYW1lcyB3aXRoIHN1ZmZpY2llbnQKICAqIGluZm9ybWF0aW9uIHRvIGRldGVybWluZSB3aGF0IHR5cGUgb2YgdW5kZXJseWluZyBkYXRhIHR5cGUgaXMgYWN0dWFsbHkKICAqIHN0b3JlZCBpbiB0aGUgZGF0YS4gKi8KKyBzdHJ1Y3QgaWVlZTgwMjExX3BzcG9sbF9oZHIgeworICAgICAgICBfX2xlMTYgZnJhbWVfY3RsOworICAgICAgICBfX2xlMTYgYWlkOworCXU4IGJzc2lkW0VUSF9BTEVOXTsKKyAgICAgICAgdTggdGFbRVRIX0FMRU5dOworICAgICAgICAvL3U4IHBheWxvYWRbMF07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKwogc3RydWN0IGllZWU4MDIxMV9oZHIgewogICAgICAgICBfX2xlMTYgZnJhbWVfY3RsOwogICAgICAgICBfX2xlMTYgZHVyYXRpb25faWQ7CkBAIC0xNjYwLDYgKzE2NzAsNyBAQAogCWJvb2wgcmFsaW5rX2NhcF9leGlzdDsKIAlib29sIGF0aGVyb3NfY2FwX2V4aXN0OwogCWJvb2wgY2lzY29fY2FwX2V4aXN0OworCWJvb2wgbWFydmVsbF9jYXBfZXhpc3Q7CiAJYm9vbCB1bmtub3duX2NhcF9leGlzdDsKIC8vCXU4CWJlcnBfaW5mbzsKIAlib29sCWJlcnBfaW5mb192YWxpZDsKQEAgLTE4NjUsNiArMTg3NiwxOSBAQAogCS8vIExlaXNyZSBQb3N3ZXIgU2F2ZSA6IERpc2FibGUgUkYgaWYgY29ubmVjdGVkIGJ1dCB0cmFmZmljIGlzIG5vdCBidXN5CiAJLy8KIAlib29sCQkJCWJMZWlzdXJlUHM7CisJdTMyCQkJCVBvd2VyUHJvZmlsZTsKKwl1OAkJCQlMcHNJZGxlQ291bnQ7CisJdTgJCQkJUmVnTWF4TFBTQXdha2VJbnR2bDsKKwl1OAkJCQlMUFNBd2FrZUludHZsOworCisJdTMyCQkJCUN1clBzTGV2ZWw7CisJdTMyCQkJCVJlZ1JmUHNMZXZlbDsKKworCWJvb2wJCQkJYkZ3Q3RybExQUzsKKwl1OAkJCQlGV0N0cmxQU01vZGU7CisKKwlib29sCQkJCUxpbmtSZXFJbklQU1JGT2ZmUGdzOworCWJvb2wJCQkJQnVmQ29ubmVjdGluZm9CZWZvcmU7CiAKIH1SVF9QT1dFUl9TQVZFX0NPTlRST0wsKlBSVF9QT1dFUl9TQVZFX0NPTlRST0w7CiAKQEAgLTE5MDUsMTQgKzE5MjksMTIxIEBACiAKIAl1MzIJCQkJTnVtVHhPa0luUGVyaW9kOwogCXUzMgkJCQlOdW1SeE9rSW5QZXJpb2Q7CisJdTMyCQkJCU51bVJ4VW5pY2FzdE9rSW5QZXJpb2Q7CiAJYm9vbAkJCQliQnVzeVRyYWZmaWM7CiB9UlRfTElOS19ERVRFQ1RfVCwgKlBSVF9MSU5LX0RFVEVDVF9UOwogCisvL2FkZGVkIGJ5IGFteSAwOTAzMzAKK3R5cGVkZWYgZW51bSBfSFdfVkFSSUFCTEVTeworCUhXX1ZBUl9FVEhFUl9BRERSLAorCUhXX1ZBUl9NVUxUSUNBU1RfUkVHLAorCUhXX1ZBUl9CQVNJQ19SQVRFLAorCUhXX1ZBUl9CU1NJRCwKKwlIV19WQVJfTUVESUFfU1RBVFVTLAorCUhXX1ZBUl9TRUNVUklUWV9DT05GLAorCUhXX1ZBUl9CRUFDT05fSU5URVJWQUwsCisJSFdfVkFSX0FUSU1fV0lORE9XLAorCUhXX1ZBUl9MSVNURU5fSU5URVJWQUwsCisJSFdfVkFSX0NTX0NPVU5URVIsCisJSFdfVkFSX0RFRkFVTFRLRVkwLAorCUhXX1ZBUl9ERUZBVUxUS0VZMSwKKwlIV19WQVJfREVGQVVMVEtFWTIsCisJSFdfVkFSX0RFRkFVTFRLRVkzLAorCUhXX1ZBUl9TSUZTLAorCUhXX1ZBUl9ESUZTLAorCUhXX1ZBUl9FSUZTLAorCUhXX1ZBUl9TTE9UX1RJTUUsCisJSFdfVkFSX0FDS19QUkVBTUJMRSwKKwlIV19WQVJfQ1dfQ09ORklHLAorCUhXX1ZBUl9DV19WQUxVRVMsCisJSFdfVkFSX1JBVEVfRkFMTEJBQ0tfQ09OVFJPTCwKKwlIV19WQVJfQ09OVEVOVElPTl9XSU5ET1csCisJSFdfVkFSX1JFVFJZX0NPVU5ULAorCUhXX1ZBUl9UUl9TV0lUQ0gsCisJSFdfVkFSX0NPTU1BTkQsCQkJLy8gRm9yIENvbW1hbmQgUmVnaXN0ZXIsIEFubmllLCAyMDA2LTA0LTA3LgorCUhXX1ZBUl9XUEFfQ09ORklHLAkJLy8yMDA0LzA4LzIzLCBrY3d1LCBmb3IgODE4NyBTZWN1cml0eSBjb25maWcKKwlIV19WQVJfQU1QRFVfTUlOX1NQQUNFLAkvLyBUaGUgc3BhY2luZyBiZXR3ZWVuIHN1Yi1mcmFtZS4gUm9nZXIsIDIwMDguMDcuMDQuCisJSFdfVkFSX1NIT1JUR0lfREVOU0lUWSwJLy8gVGhlIGRlbnNpdHkgZm9yIHNob3J0R0kuIFJvZ2VyLCAyMDA4LjA3LjA0LgorCUhXX1ZBUl9BTVBEVV9GQUNUT1IsCisJSFdfVkFSX01DU19SQVRFX0FWQUlMQUJMRSwKKwlIV19WQVJfQUNfUEFSQU0sCQkJLy8gRm9yIEFDIFBhcmFtZXRlcnMsIDIwMDUuMTIuMDEsIGJ5IHJjbmprby4KKwlIV19WQVJfQUNNX0NUUkwsCQkJLy8gRm9yIEFDTSBDb250cm9sLCBBbm5pZSwgMjAwNS0xMi0xMy4KKwlIV19WQVJfRElTX1JlcV9Rc2l6ZSwJCS8vIEZvciBESVNfUmVnX1FzaXplLCBKb3NlcGgKKwlIV19WQVJfQ0NYX0NITkxfTE9BRCwJCS8vIEZvciBDQ1ggMiBjaGFubmVsIGxvYWQgcmVxdWVzdCwgMjAwNi4wNS4wNC4KKwlIV19WQVJfQ0NYX05PSVNFX0hJU1RPR1JBTSwJLy8gRm9yIENDWCAyIG5vaXNlIGhpc3RvZ3JhbSByZXF1ZXN0LCAyMDA2LjA1LjA0LgorCUhXX1ZBUl9DQ1hfQ0xNX05ITSwJCQkvLyBGb3IgQ0NYIDIgcGFyYWxsZWwgY2hhbm5lbCBsb2FkIHJlcXVlc3QgYW5kIG5vaXNlIGhpc3RvZ3JhbSByZXF1ZXN0LCAyMDA2LjA1LjEyLgorCUhXX1ZBUl9UeE9QTGltaXQsCQkJCS8vIEZvciB0dXJibyBtb2RlIHJlbGF0ZWQgc2V0dGluZ3MsIGFkZGVkIGJ5IFJvZ2VyLCAyMDA2LjEyLjA3CisJSFdfVkFSX1RVUkJPX01PREUsCQkJLy8gRm9yIHR1cmJvIG1vZGUgcmVsYXRlZCBzZXR0aW5ncywgYWRkZWQgYnkgUm9nZXIsIDIwMDYuMTIuMTUuCisJSFdfVkFSX1JGX1NUQVRFLCAJCQkvLyBGb3IgY2hhbmdlIG9yIHF1ZXJ5IFJGIHBvd2VyIHN0YXRlLCAwNjEyMTQsIHJjbmprby4KKwlIV19WQVJfUkZfT0ZGX0JZX0hXLAkJLy8gRm9yIFVJIHRvIHF1ZXJ5IGlmIGV4dGVybmFsIEhXIHNpZ25hbCBkaXNhYmxlIFJGLCAwNjEyMjksIHJjbmprby4KKwlIV19WQVJfQlVTX1NQRUVELCAJCS8vIEluIHVuaXQgb2YgYnBzLiAyMDA2LjA3LjAzLCBieSByY25qa28uCisgICAgICAgIEhXX1ZBUl9TRVRfREVWX1BPV0VSLAkvLyBTZXQgdG8gbG93IHBvd2VyLCBhZGRlZCBieSBMYW5Ic2luLCAyMDA3LgorCisJLy8xISEhISEhISEhISEhISEhISEhISEhISEhISEhCisJLy8xQXR0ZW50aW9uIFBsZWFzZSEhITwxMW4gb3IgODE5MCBzcGVjaWZpYyBjb2RlIHNob3VsZCBiZSBwdXQgYmVsb3cgdGhpcyBsaW5lPgorCS8vMSEhISEhISEhISEhISEhISEhISEhISEhISEhIQorCUhXX1ZBUl9SQ1IsCQkJCS8vZm9yIFJDUiwgRGF2aWQgMjAwNiwwNSwxMQorCUhXX1ZBUl9SQVRSXzAsCisJSFdfVkFSX1JSU1IsCisJSFdfVkFSX0NQVV9SU1QsCisJSFdfVkFSX0NFQ0hLX0JTU0lELAorICAgICAgICBIV19WQVJfTEJLX01PREUsCQkJLy8gU2V0IGxvb2tiYWNrIG1vZGUsIDIwMDguMDYuMTEuIGFkZGVkIGJ5IFJvZ2VyLgorCS8vIFNldCBIVyByZWxhdGVkIHNldHRpbmcgZm9yIDExTiBBRVMgYnVnLgorCUhXX1ZBUl9BRVNfMTFOX0ZJWCwKKwkvLyBTZXQgVXNiIFJ4IEFnZ3JlZ2F0aW9uCisJSFdfVkFSX1VTQl9SWF9BR0dSLAorCUhXX1ZBUl9VU0VSX0NPTlRST0xfVFVSQk9fTU9ERSwKKwlIV19WQVJfUkVUUllfTElNSVQsCisjaWZuZGVmIF9SVEw4MTkyX0VYVF9QQVRDSF8KKwlIV19WQVJfSU5JVF9UWF9SQVRFLCAgLy9HZXQgQ3VycmVudCBUeCByYXRlIHJlZ2lzdGVyLiAyMDA4LjEyLjEwLiBBZGRlZCBieSB0eW5saQorI2VuZGlmCisJSFdfVkFSX1RYX1JBVEVfUkVHLCAgLy9HZXQgQ3VycmVudCBUeCByYXRlIHJlZ2lzdGVyLiAyMDA4LjEyLjEwLiBBZGRlZCBieSB0eW5saQorCUhXX1ZBUl9FRlVTRV9VU0FHRSwgLy9HZXQgY3VycmVudCBFRlVTRSB1dGlsaXphdGlvbi4gMjAwOC4xMi4xOS4gQWRkZWQgYnkgUm9nZXIuCisJSFdfVkFSX0VGVVNFX0JZVEVTLAorCUhXX1ZBUl9BVVRPTE9BRF9TVEFUVVMsIC8vR2V0IGN1cnJlbnQgYXV0b2xvYWQgc3RhdHVzLCAwOiBhdXRvbG9hZCBzdWNjZXNzLCAxOiBhdXRvbG9hZCBmYWlsLiAyMDA4LjEyLjE5LiBBZGRlZCBieSBSb2dlci4KKwlIV19WQVJfUkZfMlJfRElTQUJMRSwgLy8gMlIgZGlzYWJsZQorCUhXX1ZBUl9TRVRfUlBXTSwKKwlIV19WQVJfSDJDX0ZXX1BXUk1PREUsIC8vIEZvciBzZXR0aW5nIEZXIHJlbGF0ZWQgSDJDIGNtZCBzdHJ1Y3R1cmUuIGJ5IHR5bmxpLiAyMDA5LjIuMTgKKwlIV19WQVJfSDJDX0ZXX0pPSU5CU1NSUFQsIC8vIEZvciBzZXR0aW5nIEZXIHJlbGF0ZWQgSDJDIGNtZCBzdHJ1Y3R1cmUuIGJ5IHR5bmxpLiAyMDA5LjIuMTgKKwlIV19WQVJfMVgxX1JFQ1ZfQ09NQklORSwJLy8gRm9yIDFUMlIgYnV0IG9ubHkgMVNTLCBBZGQgYnkgaHBmYW4gMjAwOS4wNC4xNiBocGZhbgorCUhXX1ZBUl9TVE9QX1NFTkRfQkVBQ09OLAorCUhXX1ZBUl9UU0ZfVElNRVIsCQkJLy8gUmVhZCBmcm9tIFRTRiByZWdpc3RlciB0byBnZXQgdGhlIGN1cnJlbnQgVFNGIHRpbWVyLCBieSBCcnVjZSwgMjAwOS0wNy0yMi4KKwlIV19WQVJfSU9fQ01ELAorCUhXX1ZBUl9IQU5ETEVfRldfQzJILAkJLy9BZGRlZCBieSB0eW5saS4gRm9yIGhhbmRsaW5nIEZXIEMySCBjb21tYW5kLiAyMDA5LjEwLjA3LgorCUhXX1ZBUl9ETF9GV19SU1ZEX1BBR0UsIAkJLy9BZGRlZCBieSB0eW5saS4gRG93bmxvYWQgdGhlIHBhY2tldHMgdGhhdCBGVyB3aWxsIHVzZSB0byBSU1ZEIHBhZ2UuIDIwMDkuMTAuMTQuCisJSFdfVkFSX0FJRCwJCQkJLy9BZGRlZCBieSB0eW5saS4KKwlIV19WQVJfSFdfU0VRX0VOQUJMRSwJCS8vQWRkZWQgYnkgdHlubGkuIDIwMDkuMTAuMjAuCisJSFdfVkFSX1VQREFURV9UU0YsCQkJLy9BZGRlZCBieSB0eW5saS4gMjAwOS4xMC4yMi4gRm9yIEh3IGNvdW50IFRCVFQgdGltZS4KKwlIV19WQVJfQkNOX1ZBTElELAkJCQkvL0FkZGVkIGJ5IHR5bmxpLgorCUhXX1ZBUl9GV0xQU19SRl9PTgkJCS8vQWRkZWQgYnkgdHlubGkuIDIwMDkuMTEuMDkuIEZvciBjaGVja2luZyBpZiBGdyBmaW5pc2hzIFJGIG9uIHNlcXVlbmNlLgorfUhXX1ZBUklBQkxFUzsKKworI2RlZmluZSBSVF9DSEVDS19GT1JfSEFOR19QRVJJT0QgMgogCiBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9zZWN1cml0eSBzZWM7CiAKKwlib29sCW5lZWRfc3dfZW5jOworI2lmZGVmIEVOQUJMRV9MUFMKKwlib29sIGJBd2FrZVBrdFNlbnQ7CisJdTggIExQU0RlbGF5Q250OworCWJvb2wgYklzQWdncmVnYXRlRnJhbWU7CisJYm9vbCBwb2xsaW5nOworCXZvaWQgKCpMZWlzdXJlUFNMZWF2ZSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisjZW5kaWYKKworI2lmZGVmIEVOQUJMRV9JUFMKKwlib29sIHByb3RvX3N0b3BwcGluZzsKKwlib29sIHd4X3NldF9lbmM7CisJc3RydWN0IHNlbWFwaG9yZSBpcHNfc2VtOworCXN0cnVjdCB3b3JrX3N0cnVjdCBpcHNfbGVhdmVfd3E7CisgICAgICAgIHZvaWQgKCppZWVlODAyMTFfaXBzX2xlYXZlX3dxKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisgICAgICAgIHZvaWQgKCppZWVlODAyMTFfaXBzX2xlYXZlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKyNlbmRpZgorCXZvaWQgKCpTZXRId1JlZ0hhbmRsZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsdTggdmFyaWFibGUsdTgqIHZhbCk7CisJdTggICAoKnJ0bGxpYl9hcF9zZWNfdHlwZSkoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOworCiAJLy9odyBzZWN1cml0eSByZWxhdGVkCiAvLwl1OCBod3NlY19zdXBwb3J0OyAvL3N1cHBvcnQ/CiAJdTggaHdzZWNfYWN0aXZlOyAgLy9odyBzZWN1cml0eSBhY3RpdmUuCkBAIC0yMzE5LDcgKzI0NTAsNyBAQAogCSAqIHN0b3Bfc2VuZF9iYWNvbnMgaXMgTk9UIGd1YXJhbnRlZWQgdG8gYmUgY2FsbGVkIG9ubHkKIAkgKiBhZnRlciBzdGFydF9zZW5kX2JlYWNvbnMuCiAJICovCi0Jdm9pZCAoKnN0YXJ0X3NlbmRfYmVhY29ucykgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsdTE2IHR4X3JhdGUpOworCXZvaWQgKCpzdGFydF9zZW5kX2JlYWNvbnMpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAl2b2lkICgqc3RvcF9zZW5kX2JlYWNvbnMpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogCS8qIHBvd2VyIHNhdmUgbW9kZSByZWxhdGVkICovCkBAIC0yMzczLDYgKzI1MDQsMTkgQEAKIAl1OCBwcml2WzBdOwogfTsKIAorI2RlZmluZQlSVF9SRl9PRkZfTEVWTF9BU1BNCQkJQklUMAkvLyBQQ0kgQVNQTQorI2RlZmluZQlSVF9SRl9PRkZfTEVWTF9DTEtfUkVRCQlCSVQxCS8vIFBDSSBjbG9jayByZXF1ZXN0CisjZGVmaW5lCVJUX1JGX09GRl9MRVZMX1BDSV9EMwkJCUJJVDIJLy8gUENJIEQzIG1vZGUKKyNkZWZpbmUJUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMJCUJJVDMJLy8gTklDIGhhbHQsIHJlLWluaXRpYWxpemUgaHcgcGFyYW1ldGVycworI2RlZmluZQlSVF9SRl9PRkZfTEVWTF9GUkVFX0ZXCQlCSVQ0CS8vIEZXIGZyZWUsIHJlLWRvd25sb2FkIHRoZSBGVworI2RlZmluZQlSVF9SRl9PRkZfTEVWTF9GV18zMksJCUJJVDUJLy8gRlcgaW4gMzJrCisjZGVmaW5lCVJUX1JGX1BTX0xFVkVMX0FMV0FZU19BU1BNCUJJVDYJLy8gQWx3YXlzIGVuYWJsZSBBU1BNIGFuZCBDbG9jayBSZXEgaW4gaW5pdGlhbGl6YXRpb24uCisjZGVmaW5lCVJUX1JGX0xQU19ESVNBTEJFXzJSCQkJQklUMzAJLy8gV2hlbiBMUFMgaXMgb24sIGRpc2FibGUgMlIgaWYgbm8gcGFja2V0IGlzIHJlY2VpdmVkIG9yIHRyYW5zbWl0dGQuCisjZGVmaW5lCVJUX1JGX0xQU19MRVZFTF9BU1BNCQkJQklUMzEJLy8gTFBTIHdpdGggQVNQTQorI2RlZmluZQlSVF9JTl9QU19MRVZFTChwUFNDLCBfUFNfRkxBRykJKChwUFNDLT5DdXJQc0xldmVsICYgX1BTX0ZMQUcpID8gdHJ1ZSA6IGZhbHNlKQorI2RlZmluZQlSVF9DTEVBUl9QU19MRVZFTChwUFNDLCBfUFNfRkxBRykJKHBQU0MtPkN1clBzTGV2ZWwgJj0gKH4oX1BTX0ZMQUcpKSkKKyNkZWZpbmUJUlRfU0VUX1BTX0xFVkVMKHBQU0MsIF9QU19GTEFHKQkocFBTQy0+Q3VyUHNMZXZlbCB8PSBfUFNfRkxBRykKKwogI2RlZmluZSBJRUVFX0EgICAgICAgICAgICAoMTw8MCkKICNkZWZpbmUgSUVFRV9CICAgICAgICAgICAgKDE8PDEpCiAjZGVmaW5lIElFRUVfRyAgICAgICAgICAgICgxPDwyKQpAQCAtMjYwOSw5ICsyNzUzLDkgQEAKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zdGFydF9zY2FuX3N5bmNybyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfY2hlY2tfYWxsX25ldHMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3N0YXJ0X3Byb3RvY29sKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9zdG9wX3Byb3RvY29sKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKK2V4dGVybiB2b2lkIGllZWU4MDIxMV9zdG9wX3Byb3RvY29sKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLHU4IHNodXRkb3duKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3N0YXJ0X3Byb3RvY29sKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKLWV4dGVybiB2b2lkIGllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOworZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSx1OCBzaHV0ZG93bik7CiBleHRlcm4gdm9pZCBpZWVlODAyMTFfcmVzZXRfcXVldWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogZXh0ZXJuIHZvaWQgaWVlZTgwMjExX3J0bF93YWtlX3F1ZXVlKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIGV4dGVybiB2b2lkIGllZWU4MDIxMV9ydGxfc3RvcF9xdWV1ZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSk7CkBAIC0yNzk4LDUgKzI5NDIsNyBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXRzICpzdGF0cyk7CiAKIHZvaWQgaWVlZTgwMjExX2luZGljYXRlX3BhY2tldHMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHN0cnVjdCBpZWVlODAyMTFfcnhiKiogcHJ4YkluZGljYXRlQXJyYXksdTggIGluZGV4KTsKK3ZvaWQgaWVlZTgwMjExX3N0YV9wc19zZW5kX251bGxfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUsIHNob3J0IHB3cik7Cit2b2lkIGllZWU4MDIxMV9zdGFfcHNfc2VuZF9wc3BvbGxfZnJhbWUoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpOwogI2RlZmluZSBSVF9BU09DX1JFVFJZX0xJTUlUCTUKICNlbmRpZiAvKiBJRUVFODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0LmMKaW5kZXggYjFjNTQ5My4uYjNjOWJmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCkBAIC0yMjUsNyArMjI1LDcgQEAKIH0KIAogCi12b2lkIF9fZXhpdCBpZWVlODAyMTFfY3J5cHRvX2RlaW5pdCh2b2lkKQordm9pZCBpZWVlODAyMTFfY3J5cHRvX2RlaW5pdCh2b2lkKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnB0ciwgKm47CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYwppbmRleCBhYjg3MWIzLi4xNzc2ZjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF9jY21wLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jCkBAIC0zMzEsNyArMzMxLDcgQEAKIAlpZiAoIShrZXlpZHggJiAoMSA8PCA1KSkpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIkNDTVA6IHJlY2VpdmVkIHBhY2tldCB3aXRob3V0IEV4dElWIgotCQkJICAgICAgICIgZmxhZyBmcm9tICIgTUFDX0ZNVCAiXG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCSAgICAgICAiIGZsYWcgZnJvbSAlcE1cbiIsIGhkci0+YWRkcjIpOwogCQl9CiAJCWtleS0+ZG90MTFSU05BU3RhdHNDQ01QRm9ybWF0RXJyb3JzKys7CiAJCXJldHVybiAtMjsKQEAgLTM0NCw5ICszNDQsOSBAQAogCX0KIAlpZiAoIWtleS0+a2V5X3NldCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVjZWl2ZWQgcGFja2V0IGZyb20gIiBNQUNfRk1UCisJCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVjZWl2ZWQgcGFja2V0IGZyb20gJXBNIgogCQkJICAgICAgICIgd2l0aCBrZXlpZD0lZCB0aGF0IGRvZXMgbm90IGhhdmUgYSBjb25maWd1cmVkIgotCQkJICAgICAgICIga2V5XG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpLCBrZXlpZHgpOworCQkJICAgICAgICIga2V5XG4iLCBoZHItPmFkZHIyLCBrZXlpZHgpOwogCQl9CiAJCXJldHVybiAtMzsKIAl9CkBAIC0zNjEsMTEgKzM2MSw5IEBACiAKIAlpZiAobWVtY21wKHBuLCBrZXktPnJ4X3BuLCBDQ01QX1BOX0xFTikgPD0gMCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVwbGF5IGRldGVjdGVkOiBTVEE9IiBNQUNfRk1UCi0JCQkgICAgICAgIiBwcmV2aW91cyBQTiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIgotCQkJICAgICAgICJyZWNlaXZlZCBQTiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCi0JCQkgICAgICAgTUFDX0FSRyhoZHItPmFkZHIyKSwgTUFDX0FSRyhrZXktPnJ4X3BuKSwKLQkJCSAgICAgICBNQUNfQVJHKHBuKSk7CisJCQkvL3ByaW50ayhLRVJOX0RFQlVHICJDQ01QOiByZXBsYXkgZGV0ZWN0ZWQ6IFNUQT0lcE0iCisJCQkvLyAgICAgICAiIHByZXZpb3VzIFBOICVwbSByZWNlaXZlZCBQTiAlcG1cbiIsCisJCQkvLyAgICAgICBoZHItPmFkZHIyLCBrZXktPnJ4X3BuLCBwbik7CiAJCX0KIAkJa2V5LT5kb3QxMVJTTkFTdGF0c0NDTVBSZXBsYXlzKys7CiAJCXJldHVybiAtNDsKQEAgLTQwMiw3ICs0MDAsNyBAQAogCQlpZiAobWVtY21wKG1pYywgYSwgQ0NNUF9NSUNfTEVOKSAhPSAwKSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIkNDTVA6IGRlY3J5cHQgZmFpbGVkOiBTVEE9IgotCQkJCU1BQ19GTVQgIlxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkJIiVwTVxuIiwgaGRyLT5hZGRyMik7CiAJCQl9CiAJCQlrZXktPmRvdDExUlNOQVN0YXRzQ0NNUERlY3J5cHRFcnJvcnMrKzsKIAkJCXJldHVybiAtNTsKQEAgLTQ3NywxMiArNDc1LDE5IEBACiBzdGF0aWMgY2hhciAqIGllZWU4MDIxMV9jY21wX3ByaW50X3N0YXRzKGNoYXIgKnAsIHZvaWQgKnByaXYpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9jY21wX2RhdGEgKmNjbXAgPSBwcml2OwotCXAgKz0gc3ByaW50ZihwLCAia2V5WyVkXSBhbGc9Q0NNUCBrZXlfc2V0PSVkICIKLQkJICAgICAidHhfcG49JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKLQkJICAgICAicnhfcG49JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKLQkJICAgICAiZm9ybWF0X2Vycm9ycz0lZCByZXBsYXlzPSVkIGRlY3J5cHRfZXJyb3JzPSVkXG4iLAotCQkgICAgIGNjbXAtPmtleV9pZHgsIGNjbXAtPmtleV9zZXQsCi0JCSAgICAgTUFDX0FSRyhjY21wLT50eF9wbiksIE1BQ19BUkcoY2NtcC0+cnhfcG4pLAorCWludCBpOworCisJcCArPSBzcHJpbnRmKHAsICJrZXlbJWRdIGFsZz1DQ01QIGtleV9zZXQ9JWQgdHhfcG49IiwKKwkJICAgICBjY21wLT5rZXlfaWR4LCBjY21wLT5rZXlfc2V0KTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNjbXAtPnR4X3BuKTsgaSsrKQorCQlwICs9IHNwcmludGYocCwgIiUwMngiLCBjY21wLT50eF9wbltpXSk7CisKKwlzcHJpbnRmKHAsICIgcnhfcG49Iik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2NtcC0+cnhfcG4pOyBpKyspCisJCXAgKz0gc3ByaW50ZihwLCAiJTAyeCIsIGNjbXAtPnR4X3BuW2ldKTsKKworCXAgKz0gc3ByaW50ZihwLCAiIGZvcm1hdF9lcnJvcnM9JWQgcmVwbGF5cz0lZCBkZWNyeXB0X2Vycm9ycz0lZFxuIiwKIAkJICAgICBjY21wLT5kb3QxMVJTTkFTdGF0c0NDTVBGb3JtYXRFcnJvcnMsCiAJCSAgICAgY2NtcC0+ZG90MTFSU05BU3RhdHNDQ01QUmVwbGF5cywKIAkJICAgICBjY21wLT5kb3QxMVJTTkFTdGF0c0NDTVBEZWNyeXB0RXJyb3JzKTsKQEAgLTUxOSw3ICs1MjQsNyBAQAogfQogCiAKLXZvaWQgX19leGl0IGllZWU4MDIxMV9jcnlwdG9fY2NtcF9leGl0KHZvaWQpCit2b2lkIGllZWU4MDIxMV9jcnlwdG9fY2NtcF9leGl0KHZvaWQpCiB7CiAJaWVlZTgwMjExX3VucmVnaXN0ZXJfY3J5cHRvX29wcygmaWVlZTgwMjExX2NyeXB0X2NjbXApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCmluZGV4IDdhMTc5N2UuLjAzY2IyMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKQEAgLTUyMCw3ICs1MjAsNyBAQAogCWlmICghKGtleWlkeCAmICgxIDw8IDUpKSkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUDogcmVjZWl2ZWQgcGFja2V0IHdpdGhvdXQgRXh0SVYiCi0JCQkgICAgICAgIiBmbGFnIGZyb20gIiBNQUNfRk1UICJcbiIsIE1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJICAgICAgICIgZmxhZyBmcm9tICVwTVxuIiwgaGRyLT5hZGRyMik7CiAJCX0KIAkJcmV0dXJuIC0yOwogCX0KQEAgLTUzMiw5ICs1MzIsOSBAQAogCX0KIAlpZiAoIXRrZXktPmtleV9zZXQpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVA6IHJlY2VpdmVkIHBhY2tldCBmcm9tICIgTUFDX0ZNVAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVA6IHJlY2VpdmVkIHBhY2tldCBmcm9tICVwTSIKIAkJCSAgICAgICAiIHdpdGgga2V5aWQ9JWQgdGhhdCBkb2VzIG5vdCBoYXZlIGEgY29uZmlndXJlZCIKLQkJCSAgICAgICAiIGtleVxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSwga2V5aWR4KTsKKwkJCSAgICAgICAiIGtleVxuIiwgaGRyLT5hZGRyMiwga2V5aWR4KTsKIAkJfQogCQlyZXR1cm4gLTM7CiAJfQpAQCAtNTQ3LDkgKzU0Nyw5IEBACiAJCWlmIChpdjMyIDwgdGtleS0+cnhfaXYzMiB8fAogCQkoaXYzMiA9PSB0a2V5LT5yeF9pdjMyICYmIGl2MTYgPD0gdGtleS0+cnhfaXYxNikpIHsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUDogcmVwbGF5IGRldGVjdGVkOiBTVEE9IiBNQUNfRk1UCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVA6IHJlcGxheSBkZXRlY3RlZDogU1RBPSVwTSIKIAkJCQkiIHByZXZpb3VzIFRTQyAlMDh4JTA0eCByZWNlaXZlZCBUU0MgIgotCQkJCSIlMDh4JTA0eFxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSwKKwkJCQkiJTA4eCUwNHhcbiIsIGhkci0+YWRkcjIsCiAJCQkJdGtleS0+cnhfaXYzMiwgdGtleS0+cnhfaXYxNiwgaXYzMiwgaXYxNik7CiAJCQl9CiAJCQl0a2V5LT5kb3QxMVJTTkFTdGF0c1RLSVBSZXBsYXlzKys7CkBAIC01ODIsOCArNTgyLDggQEAKIAkJaWYgKGNyeXB0b19ibGtjaXBoZXJfZGVjcnlwdCgmZGVzYywgJnNnLCAmc2csIHBsZW4gKyA0KSkgewogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJCXByaW50ayhLRVJOX0RFQlVHICI6IFRLSVA6IGZhaWxlZCB0byBkZWNyeXB0ICIKLQkJCQkJCSJyZWNlaXZlZCBwYWNrZXQgZnJvbSAiIE1BQ19GTVQgIlxuIiwKLQkJCQkJCU1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJCQkJInJlY2VpdmVkIHBhY2tldCBmcm9tICVwTVxuIiwKKwkJCQkJCWhkci0+YWRkcjIpOwogCQkJfQogCQkJcmV0dXJuIC03OwogCQl9CkBAIC02MDYsOCArNjA2LDkgQEAKIAkJCQl0a2V5LT5yeF9waGFzZTFfZG9uZSA9IDA7CiAJCQl9CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVA6IElDViBlcnJvciBkZXRlY3RlZDogU1RBPSIKLQkJCQlNQUNfRk1UICJcbiIsIE1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkJICAgICAgICJUS0lQOiBJQ1YgZXJyb3IgZGV0ZWN0ZWQ6IFNUQT0lcE1cbiIsCisJCQkJICAgICAgIGhkci0+YWRkcjIpOwogCQkJfQogCQkJdGtleS0+ZG90MTFSU05BU3RhdHNUS0lQSUNWRXJyb3JzKys7CiAJCQlyZXR1cm4gLTU7CkBAIC04MTYsOCArODE3LDggQEAKIAogCS8qIFRPRE86IG5lZWRlZCBwYXJhbWV0ZXJzOiBjb3VudCwga2V5aWQsIGtleSB0eXBlLCBUU0MgKi8KIAlzcHJpbnRmKGJ1ZiwgIk1MTUUtTUlDSEFFTE1JQ0ZBSUxVUkUuaW5kaWNhdGlvbihrZXlpZD0lZCAlc2Nhc3QgYWRkcj0iCi0JCU1BQ19GTVQgIikiLCBrZXlpZHgsIGhkci0+YWRkcjFbMF0gJiAweDAxID8gImJyb2FkIiA6ICJ1bmkiLAotCQlNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJIiVwTSkiLCBrZXlpZHgsIGhkci0+YWRkcjFbMF0gJiAweDAxID8gImJyb2FkIiA6ICJ1bmkiLAorCQloZHItPmFkZHIyKTsKIAltZW1zZXQoJndycXUsIDAsIHNpemVvZih3cnF1KSk7CiAJd3JxdS5kYXRhLmxlbmd0aCA9IHN0cmxlbihidWYpOwogCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBJV0VWQ1VTVE9NLCAmd3JxdSwgYnVmKTsKQEAgLTg2Miw4ICs4NjMsOCBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOwogCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1pY2hhZWwgTUlDIHZlcmlmaWNhdGlvbiBmYWlsZWQgZm9yICIKLQkJICAgICAgICJNU0RVIGZyb20gIiBNQUNfRk1UICIga2V5aWR4PSVkXG4iLAotCQkgICAgICAgc2tiLT5kZXYgPyBza2ItPmRldi0+bmFtZSA6ICJOL0EiLCBNQUNfQVJHKGhkci0+YWRkcjIpLAorCQkgICAgICAgIk1TRFUgZnJvbSAlcE0ga2V5aWR4PSVkXG4iLAorCQkgICAgICAgc2tiLT5kZXYgPyBza2ItPmRldi0+bmFtZSA6ICJOL0EiLCBoZHItPmFkZHIyLAogCQkgICAgICAga2V5aWR4KTsKIAkJaWYgKHNrYi0+ZGV2KQogCQkJaWVlZTgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUoc2tiLT5kZXYsIGhkciwga2V5aWR4KTsKQEAgLTEwMTEsNyArMTAxMiw3IEBACiB9CiAKIAotdm9pZCBfX2V4aXQgaWVlZTgwMjExX2NyeXB0b190a2lwX2V4aXQodm9pZCkKK3ZvaWQgaWVlZTgwMjExX2NyeXB0b190a2lwX2V4aXQodm9pZCkKIHsKIAlpZWVlODAyMTFfdW5yZWdpc3Rlcl9jcnlwdG9fb3BzKCZpZWVlODAyMTFfY3J5cHRfdGtpcCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwppbmRleCAwNmQ5MTcxLi5jZTI2NWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKQEAgLTMxMiw2ICszMTIsMTcgQEAKIAlpZiAoc2tiLT5sZW4gPCAyNCkKIAkJcmV0dXJuIDA7CiAKKyNpZiAxCisgICAgICAgIGlmIChpZWVlLT5od3NlY19hY3RpdmUpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYl9kZXNjICp0Y2JfZGVzYyA9IChjYl9kZXNjICopKHNrYi0+Y2IrIE1BWF9ERVZfQUREUl9TSVpFKTsKKyAgICAgICAgICAgICAgICB0Y2JfZGVzYy0+Ykh3U2VjID0gMTsKKworICAgICAgICAgICAgICAgIGlmKGllZWUtPm5lZWRfc3dfZW5jKQorICAgICAgICAgICAgICAgICAgICAgICAgdGNiX2Rlc2MtPmJId1NlYyA9IDA7CisgICAgICAgIH0KKyNlbmRpZgorCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICopIHNrYi0+ZGF0YTsKIAlmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY3RsKTsKIApAQCAtMzY2LDggKzM3Nyw4IEBACiAJICAgIHN0cmNtcChjcnlwdC0+b3BzLT5uYW1lLCAiVEtJUCIpID09IDApIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUS0lQIGNvdW50ZXJtZWFzdXJlczogZHJvcHBlZCAiCi0JCQkgICAgICAgInJlY2VpdmVkIHBhY2tldCBmcm9tICIgTUFDX0ZNVCAiXG4iLAotCQkJICAgICAgIGllZWUtPmRldi0+bmFtZSwgTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkgICAgICAgInJlY2VpdmVkIHBhY2tldCBmcm9tICVwTVxuIiwKKwkJCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIGhkci0+YWRkcjIpOwogCQl9CiAJCXJldHVybiAtMTsKIAl9CkBAIC0zNzgsOCArMzg5LDggQEAKIAlhdG9taWNfZGVjKCZjcnlwdC0+cmVmY250KTsKIAlpZiAocmVzIDwgMCkgewogCQlJRUVFODAyMTFfREVCVUdfRFJPUCgKLQkJCSJkZWNyeXB0aW9uIGZhaWxlZCAoU0E9IiBNQUNfRk1UCi0JCQkiKSByZXM9JWRcbiIsIE1BQ19BUkcoaGRyLT5hZGRyMiksIHJlcyk7CisJCQkiZGVjcnlwdGlvbiBmYWlsZWQgKFNBPSVwTSIKKwkJCSIpIHJlcz0lZFxuIiwgaGRyLT5hZGRyMiwgcmVzKTsKIAkJaWYgKHJlcyA9PSAtMikKIAkJCUlFRUU4MDIxMV9ERUJVR19EUk9QKCJEZWNyeXB0aW9uIGZhaWxlZCBJQ1YgIgogCQkJCQkgICAgICJtaXNtYXRjaCAoa2V5ICVkKVxuIiwKQEAgLTQwNiw2ICs0MTcsMTAgQEAKIAl7CiAJCWNiX2Rlc2MgKnRjYl9kZXNjID0gKGNiX2Rlc2MgKikoc2tiLT5jYisgTUFYX0RFVl9BRERSX1NJWkUpOwogCQl0Y2JfZGVzYy0+Ykh3U2VjID0gMTsKKworICAgICAgICAgICAgICAgIGlmKGllZWUtPm5lZWRfc3dfZW5jKQorICAgICAgICAgICAgICAgICAgICAgICAgdGNiX2Rlc2MtPmJId1NlYyA9IDA7CisKIAl9CiAKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwpAQCAtNDE2LDggKzQzMSw4IEBACiAJYXRvbWljX2RlYygmY3J5cHQtPnJlZmNudCk7CiAJaWYgKHJlcyA8IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBNU0RVIGRlY3J5cHRpb24vTUlDIHZlcmlmaWNhdGlvbiBmYWlsZWQiCi0JCSAgICAgICAiIChTQT0iIE1BQ19GTVQgIiBrZXlpZHg9JWQpXG4iLAotCQkgICAgICAgaWVlZS0+ZGV2LT5uYW1lLCBNQUNfQVJHKGhkci0+YWRkcjIpLCBrZXlpZHgpOworCQkgICAgICAgIiAoU0E9JXBNIGtleWlkeD0lZClcbiIsCisJCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIGhkci0+YWRkcjIsIGtleWlkeCk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTc5OSw3ICs4MTQsNyBAQAogI2VuZGlmCiB9CiAKLXU4IHBhcnNlX3N1YmZyYW1lKHN0cnVjdCBza19idWZmICpza2IsCit1OCBwYXJzZV9zdWJmcmFtZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSogaWVlZSxzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgICAgICAgICAgICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqcnhfc3RhdHMsCiAJCSAgc3RydWN0IGllZWU4MDIxMV9yeGIgKnJ4Yix1OCogc3JjLHU4KiBkc3QpCiB7CkBAIC04MzksNiArODU0LDcgQEAKIAl9CiAKIAlza2JfcHVsbChza2IsIExMQ09mZnNldCk7CisJaWVlZS0+YklzQWdncmVnYXRlRnJhbWUgPSBiSXNBZ2dyZWdhdGVGcmFtZTsvL2FkZGVkIGJ5IGFteSBmb3IgTGVpc3VyZSBQUwogCiAJaWYoIWJJc0FnZ3JlZ2F0ZUZyYW1lKSB7CiAJCXJ4Yi0+bnJfc3ViZnJhbWVzID0gMTsKQEAgLTk0MCw2ICs5NTYsNyBAQAogCXU4CVRJRCA9IDA7CiAJdTE2CVNlcU51bSA9IDA7CiAJUFJYX1RTX1JFQ09SRCBwVFMgPSBOVUxMOworCWJvb2wgdW5pY2FzdF9wYWNrZXQgPSBmYWxzZTsKIAkvL2Jvb2wgYklzQWdncmVnYXRlRnJhbWUgPSBmYWxzZTsKIAkvL2FkZGVkIGJ5IGFteSBmb3IgcmVvcmRlcgogI2lmZGVmIE5PVF9ZRVQKQEAgLTEwNDUsOCArMTA2Miw4IEBACiAJCQkgKiBmcmFtZXMgc2lsZW50bHkgaW5zdGVhZCBvZiBmaWxsaW5nIHN5c3RlbSBsb2cgd2l0aAogCQkJICogdGhlc2UgcmVwb3J0cy4gKi8KIAkJCUlFRUU4MDIxMV9ERUJVR19EUk9QKCJEZWNyeXB0aW9uIGZhaWxlZCAobm90IHNldCkiCi0JCQkJCSAgICAgIiAoU0E9IiBNQUNfRk1UICIpXG4iLAotCQkJCQkgICAgIE1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJCQkgICAgICIgKFNBPSVwTSlcbiIsCisJCQkJCSAgICAgaGRyLT5hZGRyMik7CiAJCQlpZWVlLT5pZWVlX3N0YXRzLnJ4X2Rpc2NhcmRzX3VuZGVjcnlwdGFibGUrKzsKIAkJCWdvdG8gcnhfZHJvcHBlZDsKIAkJfQpAQCAtMTExNCw4ICsxMTMxLDggQEAKIAkJICAgIChrZXlpZHggPSBob3N0YXBfcnhfZnJhbWVfZGVjcnlwdChpZWVlLCBza2IsIGNyeXB0KSkgPCAwKQogCQl7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBkZWNyeXB0IG1nbXQ6OmF1dGggIgotCQkJICAgICAgICJmcm9tICIgTUFDX0ZNVCAiXG4iLCBkZXYtPm5hbWUsCi0JCQkgICAgICAgTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkgICAgICAgImZyb20gJXBNXG4iLCBkZXYtPm5hbWUsCisJCQkgICAgICAgaGRyLT5hZGRyMik7CiAJCQkvKiBUT0RPOiBjb3VsZCBpbmZvcm0gaG9zdGFwZCBhYm91dCB0aGlzIHNvIHRoYXQgaXQKIAkJCSAqIGNvdWxkIHNlbmQgYXV0aCBmYWlsdXJlIHJlcG9ydCAqLwogCQkJZ290byByeF9kcm9wcGVkOwpAQCAtMTIxNSw2ICsxMjMyLDI0IEBACiAgICAgICAgIGlmIChtZW1jbXAoYnNzaWQsIGllZWUtPmN1cnJlbnRfbmV0d29yay5ic3NpZCwgRVRIX0FMRU4pKQogICAgICAgICAgICAgICAgIGdvdG8gcnhfZHJvcHBlZDsKIAorI2lmZGVmIEVOQUJMRV9MUFMKKwlpZiAoKGllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9JTkZSQSkgICYmIChpZWVlLT5zdGFfc2xlZXAgPT0gMSkKKwkJJiYgKGllZWUtPnBvbGxpbmcpKSB7CisJCWlmIChXTEFOX0ZDX01PUkVfREFUQShmYykpIHsKKwkJCS8qIG1vcmUgZGF0YSBiaXQgaXMgc2V0LCBsZXQncyByZXF1ZXN0IGEgbmV3IGZyYW1lIGZyb20gdGhlIEFQICovCisJCQlpZWVlODAyMTFfc3RhX3BzX3NlbmRfcHNwb2xsX2ZyYW1lKGllZWUpOworCQl9IGVsc2UgeworCQkJaWVlZS0+cG9sbGluZyA9ICBmYWxzZTsKKwkJfQorCX0KKyNlbmRpZgorCisJaWVlZS0+bmVlZF9zd19lbmMgPSAwOworCisgICAgICAgIGlmKCghcnhfc3RhdHMtPkRlY3J5cHRlZCkpeworICAgICAgICAgICAgICAgIGllZWUtPm5lZWRfc3dfZW5jID0gMTsKKyAgICAgICAgfQorCiAJLyogc2tiOiBoZHIgKyAocG9zc2libHkgZnJhZ21lbnRlZCwgcG9zc2libHkgZW5jcnlwdGVkKSBwYXlsb2FkICovCiAKIAlpZiAoaWVlZS0+aG9zdF9kZWNyeXB0ICYmIChmYyAmIElFRUU4MDIxMV9GQ1RMX1dFUCkgJiYKQEAgLTEyOTYsNiArMTMzMSw5IEBACiAJaWVlZS0+TGlua0RldGVjdEluZm8uTnVtUnhPa0luUGVyaW9kKys7CiAKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOworCWlmKCghaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpICYmICghaXNfYnJvYWRjYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkpKQorCQl1bmljYXN0X3BhY2tldCA9IHRydWU7CisKIAlpZiAoY3J5cHQgJiYgIShmYyAmIElFRUU4MDIxMV9GQ1RMX1dFUCkgJiYgIWllZWUtPm9wZW5fd2VwKSB7CiAJCWlmICgvKmllZWUtPmllZWU4MDJfMXggJiYqLwogCQkgICAgaWVlZTgwMjExX2lzX2VhcG9sX2ZyYW1lKGllZWUsIHNrYiwgaGRybGVuKSkgewpAQCAtMTMxMSw4ICsxMzQ5LDggQEAKIAkJfSBlbHNlIHsKIAkJCUlFRUU4MDIxMV9ERUJVR19EUk9QKAogCQkJCSJlbmNyeXB0aW9uIGNvbmZpZ3VyZWQsIGJ1dCBSWCAiCi0JCQkJImZyYW1lIG5vdCBlbmNyeXB0ZWQgKFNBPSIgTUFDX0ZNVCAiKVxuIiwKLQkJCQlNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCQkiZnJhbWUgbm90IGVuY3J5cHRlZCAoU0E9JXBNKVxuIiwKKwkJCQloZHItPmFkZHIyKTsKIAkJCWdvdG8gcnhfZHJvcHBlZDsKIAkJfQogCX0KQEAgLTEzMzEsOSArMTM2OSw5IEBACiAJICAgICFpZWVlODAyMTFfaXNfZWFwb2xfZnJhbWUoaWVlZSwgc2tiLCBoZHJsZW4pKSB7CiAJCUlFRUU4MDIxMV9ERUJVR19EUk9QKAogCQkJImRyb3BwZWQgdW5lbmNyeXB0ZWQgUlggZGF0YSAiCi0JCQkiZnJhbWUgZnJvbSAiIE1BQ19GTVQKKwkJCSJmcmFtZSBmcm9tICVwTSIKIAkJCSIgKGRyb3BfdW5lbmNyeXB0ZWQ9MSlcbiIsCi0JCQlNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCWhkci0+YWRkcjIpOwogCQlnb3RvIHJ4X2Ryb3BwZWQ7CiAJfQogLyoKQEAgLTEzNjcsNyArMTQwNSw3IEBACiAJfQogCS8qIHRvIHBhcnNlIGFtc2R1IHBhY2tldHMgKi8KIAkvKiBxb3MgZGF0YSBwYWNrZXRzICYgcmVzZXJ2ZWQgYml0IGlzIDEgKi8KLQlpZihwYXJzZV9zdWJmcmFtZShza2Iscnhfc3RhdHMscnhiLHNyYyxkc3QpID09IDApIHsKKwlpZihwYXJzZV9zdWJmcmFtZShpZWVlLCBza2Iscnhfc3RhdHMscnhiLHNyYyxkc3QpID09IDApIHsKIAkJLyogb25seSB0byBmcmVlIHJ4YiwgYW5kIG5vdCBzdWJtaXQgdGhlIHBhY2tldHMgdG8gdXBwZXIgbGF5ZXIgKi8KIAkJZm9yKGkgPTA7IGkgPCByeGItPm5yX3N1YmZyYW1lczsgaSsrKSB7CiAJCQlkZXZfa2ZyZWVfc2tiKHJ4Yi0+c3ViZnJhbWVzW2ldKTsKQEAgLTEzNzcsNiArMTQxNSwzMiBAQAogCQlnb3RvIHJ4X2Ryb3BwZWQ7CiAJfQogCisjaWZkZWYgRU5BQkxFX0xQUworCQlpZih1bmljYXN0X3BhY2tldCkKKwkJeworCQkJaWYgKHR5cGUgPT0gSUVFRTgwMjExX0ZUWVBFX0RBVEEpCisJCQl7CisKKwkJCQlpZihpZWVlLT5iSXNBZ2dyZWdhdGVGcmFtZSkKKwkJCQkJaWVlZS0+TGlua0RldGVjdEluZm8uTnVtUnhVbmljYXN0T2tJblBlcmlvZCs9cnhiLT5ucl9zdWJmcmFtZXM7CisJCQkJZWxzZQorCQkJCQlpZWVlLT5MaW5rRGV0ZWN0SW5mby5OdW1SeFVuaWNhc3RPa0luUGVyaW9kKys7CisKKwkJCQkvLyAyMDA5LjAzLjAzIExlYXZlIERDIG1vZGUgaW1tZWRpYXRlbHkgd2hlbiBkZXRlY3QgaGlnaCB0cmFmZmljCisJCQkJLy8gRGJnUHJpbnQoImVuZGluZyBTZXEgJWRcbiIsIEZyYW1lX1NlcU51bShwZHVPUykpOworCQkJCWlmKChpZWVlLT5zdGF0ZSA9PSBJRUVFODAyMTFfTElOS0VEKSAvKiYmICFNZ250SW5pdEFkYXB0ZXJJblByb2dyZXNzKHBNZ250SW5mbykqLykKKwkJCQl7CisJCQkJCWlmKAkoKGllZWUtPkxpbmtEZXRlY3RJbmZvLk51bVJ4VW5pY2FzdE9rSW5QZXJpb2QgK2llZWUtPkxpbmtEZXRlY3RJbmZvLk51bVR4T2tJblBlcmlvZCkgPiA4ICkgfHwKKwkJCQkJCShpZWVlLT5MaW5rRGV0ZWN0SW5mby5OdW1SeFVuaWNhc3RPa0luUGVyaW9kID4gMikgKQorCQkJCQl7CisJCQkJCQlpZihpZWVlLT5MZWlzdXJlUFNMZWF2ZSkKKwkJCQkJCQlpZWVlLT5MZWlzdXJlUFNMZWF2ZShkZXYpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisjZW5kaWYKKwogCWllZWUtPmxhc3RfcnhfcHNfdGltZSA9IGppZmZpZXM7CiAvL2FkZGVkIGJ5IGFteSBmb3IgcmVvcmRlcgogCWlmKGllZWUtPnBIVEluZm8tPmJDdXJSeFJlb3JkZXJFbmFibGUgPT0gZmFsc2UgfHxwVFMgPT0gTlVMTCl7CkBAIC0yMDEzLDEyICsyMDc3LDIyIEBACiAJCQkJaW5mb19lbGVtZW50LT5kYXRhWzFdID09IDB4MTMgJiYKIAkJCQlpbmZvX2VsZW1lbnQtPmRhdGFbMl0gPT0gMHg3NCkpCiAJCQl7Ci0JCQkJcHJpbnRrKCI9PT09PT09PT4lcygpOiBhdGhyb3MgQVAgaXMgZXhpc3RcbiIsX19GVU5DVElPTl9fKTsKKwkJCQkvL3ByaW50aygiPT09PT09PT0+JXMoKTogYXRocm9zIEFQIGlzIGV4aXN0XG4iLF9fRlVOQ1RJT05fXyk7CiAJCQkJbmV0d29yay0+YXRoZXJvc19jYXBfZXhpc3QgPSB0cnVlOwogCQkJfQogCQkJZWxzZQogCQkJCW5ldHdvcmstPmF0aGVyb3NfY2FwX2V4aXN0ID0gZmFsc2U7CiAKKwkJCWlmICgoaW5mb19lbGVtZW50LT5sZW4gPj0gMyAmJgorCQkJCQkJaW5mb19lbGVtZW50LT5kYXRhWzBdID09IDB4MDAgJiYKKwkJCQkJCWluZm9fZWxlbWVudC0+ZGF0YVsxXSA9PSAweDUwICYmCisJCQkJCQlpbmZvX2VsZW1lbnQtPmRhdGFbMl0gPT0gMHg0MykgKQorCQkJeworCQkJCW5ldHdvcmstPm1hcnZlbGxfY2FwX2V4aXN0ID0gdHJ1ZTsKKwkJCQkvL3ByaW50aygiPT09PT09PT0+JXMoKTogbWFydmVsIEFQIGlzIGV4aXN0XG4iLF9fRlVOQ1RJT05fXyk7CisJCQl9CisKKwogCQkJaWYoaW5mb19lbGVtZW50LT5sZW4gPj0gMyAmJgogCQkJCWluZm9fZWxlbWVudC0+ZGF0YVswXSA9PSAweDAwICYmCiAJCQkJaW5mb19lbGVtZW50LT5kYXRhWzFdID09IDB4NDAgJiYKQEAgLTIyMTksNyArMjI5Myw4IEBACiAJfQogCiAJaWYoIW5ldHdvcmstPmF0aGVyb3NfY2FwX2V4aXN0ICYmICFuZXR3b3JrLT5icm9hZGNvbV9jYXBfZXhpc3QgJiYKLQkJIW5ldHdvcmstPmNpc2NvX2NhcF9leGlzdCAmJiAhbmV0d29yay0+cmFsaW5rX2NhcF9leGlzdCAmJiAhbmV0d29yay0+YnNzaHQuYmRSVDJSVEFnZ3JlZ2F0aW9uKQorCQkhbmV0d29yay0+Y2lzY29fY2FwX2V4aXN0ICYmICFuZXR3b3JrLT5yYWxpbmtfY2FwX2V4aXN0ICYmICFuZXR3b3JrLT5ic3NodC5iZFJUMlJUQWdncmVnYXRpb24gJiYKKwkJIW5ldHdvcmstPm1hcnZlbGxfY2FwX2V4aXN0KQogCXsKIAkJbmV0d29yay0+dW5rbm93bl9jYXBfZXhpc3QgPSB0cnVlOwogCX0KQEAgLTIzMzMsNiArMjQwOCw3IEBACiAgICAgICAgIG5ldHdvcmstPmJyb2FkY29tX2NhcF9leGlzdCA9IGZhbHNlOwogCW5ldHdvcmstPnJhbGlua19jYXBfZXhpc3QgPSBmYWxzZTsKIAluZXR3b3JrLT5hdGhlcm9zX2NhcF9leGlzdCA9IGZhbHNlOworCW5ldHdvcmstPm1hcnZlbGxfY2FwX2V4aXN0ID0gZmFsc2U7CiAJbmV0d29yay0+Y2lzY29fY2FwX2V4aXN0ID0gZmFsc2U7CiAJbmV0d29yay0+dW5rbm93bl9jYXBfZXhpc3QgPSBmYWxzZTsKICNpZmRlZiBUSE9NQVNfVFVSQk8KQEAgLTIzNjksMTEgKzI0NDUsMTEgQEAKIAl9CiAKIAlpZiAobmV0d29yay0+bW9kZSA9PSAwKSB7Ci0JCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJGaWx0ZXJlZCBvdXQgJyVzICgiIE1BQ19GTVQgIiknICIKKwkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkZpbHRlcmVkIG91dCAnJXMgKCVwTSknICIKIAkJCQkgICAgICJuZXR3b3JrLlxuIiwKIAkJCQkgICAgIGVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLAogCQkJCQkJICBuZXR3b3JrLT5zc2lkX2xlbiksCi0JCQkJICAgICBNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSk7CisJCQkJICAgICBuZXR3b3JrLT5ic3NpZCk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMjQ2Myw2ICsyNTM5LDcgQEAKIAlkc3QtPmJyb2FkY29tX2NhcF9leGlzdCA9IHNyYy0+YnJvYWRjb21fY2FwX2V4aXN0OwogCWRzdC0+cmFsaW5rX2NhcF9leGlzdCA9IHNyYy0+cmFsaW5rX2NhcF9leGlzdDsKIAlkc3QtPmF0aGVyb3NfY2FwX2V4aXN0ID0gc3JjLT5hdGhlcm9zX2NhcF9leGlzdDsKKwlkc3QtPm1hcnZlbGxfY2FwX2V4aXN0ID0gc3JjLT5tYXJ2ZWxsX2NhcF9leGlzdDsKIAlkc3QtPmNpc2NvX2NhcF9leGlzdCA9IHNyYy0+Y2lzY29fY2FwX2V4aXN0OwogCWRzdC0+dW5rbm93bl9jYXBfZXhpc3QgPSBzcmMtPnVua25vd25fY2FwX2V4aXN0OwogCW1lbWNweShkc3QtPndwYV9pZSwgc3JjLT53cGFfaWUsIHNyYy0+d3BhX2llX2xlbik7CkBAIC0yNTU3LDkgKzI2MzQsOSBAQAogCiAJbWVtc2V0KCZuZXR3b3JrLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrKSk7CiAJSUVFRTgwMjExX0RFQlVHX1NDQU4oCi0JCSInJXMnICgiIE1BQ19GTVQgIik6ICVjJWMlYyVjICVjJWMlYyVjLSVjJWMlYyVjICVjJWMlYyVjXG4iLAorCQkiJyVzJyAoJXBNKTogJWMlYyVjJWMgJWMlYyVjJWMtJWMlYyVjJWMgJWMlYyVjJWNcbiIsCiAJCWVzY2FwZV9lc3NpZChpbmZvX2VsZW1lbnQtPmRhdGEsIGluZm9fZWxlbWVudC0+bGVuKSwKLQkJTUFDX0FSRyhiZWFjb24tPmhlYWRlci5hZGRyMyksCisJCWJlYWNvbi0+aGVhZGVyLmFkZHIzLAogCQkoYmVhY29uLT5jYXBhYmlsaXR5ICYgKDE8PDB4ZikpID8gJzEnIDogJzAnLAogCQkoYmVhY29uLT5jYXBhYmlsaXR5ICYgKDE8PDB4ZSkpID8gJzEnIDogJzAnLAogCQkoYmVhY29uLT5jYXBhYmlsaXR5ICYgKDE8PDB4ZCkpID8gJzEnIDogJzAnLApAQCAtMjU3OCwxMCArMjY1NSwxMCBAQAogCQkoYmVhY29uLT5jYXBhYmlsaXR5ICYgKDE8PDB4MCkpID8gJzEnIDogJzAnKTsKIAogCWlmIChpZWVlODAyMTFfbmV0d29ya19pbml0KGllZWUsIGJlYWNvbiwgJm5ldHdvcmssIHN0YXRzKSkgewotCQlJRUVFODAyMTFfREVCVUdfU0NBTigiRHJvcHBlZCAnJXMnICgiIE1BQ19GTVQgIikgdmlhICVzLlxuIiwKKwkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkRyb3BwZWQgJyVzJyAoJXBNKSB2aWEgJXMuXG4iLAogCQkJCSAgICAgZXNjYXBlX2Vzc2lkKGluZm9fZWxlbWVudC0+ZGF0YSwKIAkJCQkJCSAgaW5mb19lbGVtZW50LT5sZW4pLAotCQkJCSAgICAgTUFDX0FSRyhiZWFjb24tPmhlYWRlci5hZGRyMyksCisJCQkJICAgICBiZWFjb24tPmhlYWRlci5hZGRyMywKIAkJCQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGJlYWNvbi0+aGVhZGVyLmZyYW1lX2N0bCkgPT0KIAkJCQkgICAgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQID8KIAkJCQkgICAgICJQUk9CRSBSRVNQT05TRSIgOiAiQkVBQ09OIik7CkBAIC0yNjkyLDExICsyNzY5LDExIEBACiAJCQkvKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBzbG90cywgZXhwaXJlIHRoZSBvbGRlc3QgKi8KIAkJCWxpc3RfZGVsKCZvbGRlc3QtPmxpc3QpOwogCQkJdGFyZ2V0ID0gb2xkZXN0OwotCQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkV4cGlyZWQgJyVzJyAoIiBNQUNfRk1UICIpIGZyb20gIgorCQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkV4cGlyZWQgJyVzJyAoJXBNKSBmcm9tICIKIAkJCQkJICAgICAibmV0d29yayBsaXN0LlxuIiwKIAkJCQkJICAgICBlc2NhcGVfZXNzaWQodGFyZ2V0LT5zc2lkLAogCQkJCQkJCSAgdGFyZ2V0LT5zc2lkX2xlbiksCi0JCQkJCSAgICAgTUFDX0FSRyh0YXJnZXQtPmJzc2lkKSk7CisJCQkJCSAgICAgdGFyZ2V0LT5ic3NpZCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBPdGhlcndpc2UganVzdCBwdWxsIGZyb20gdGhlIGZyZWUgbGlzdCAqLwogCQkJdGFyZ2V0ID0gbGlzdF9lbnRyeShpZWVlLT5uZXR3b3JrX2ZyZWVfbGlzdC5uZXh0LApAQCAtMjcwNiwxMCArMjc4MywxMCBAQAogCiAKICNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCi0JCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJBZGRpbmcgJyVzJyAoIiBNQUNfRk1UICIpIHZpYSAlcy5cbiIsCisJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJBZGRpbmcgJyVzJyAoJXBNKSB2aWEgJXMuXG4iLAogCQkJCSAgICAgZXNjYXBlX2Vzc2lkKG5ldHdvcmsuc3NpZCwKIAkJCQkJCSAgbmV0d29yay5zc2lkX2xlbiksCi0JCQkJICAgICBNQUNfQVJHKG5ldHdvcmsuYnNzaWQpLAorCQkJCSAgICAgbmV0d29yay5ic3NpZCwKIAkJCQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGJlYWNvbi0+aGVhZGVyLmZyYW1lX2N0bCkgPT0KIAkJCQkgICAgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQID8KIAkJCQkgICAgICJQUk9CRSBSRVNQT05TRSIgOiAiQkVBQ09OIik7CkBAIC0yNzE5LDEwICsyNzk2LDEwIEBACiAJCWlmKGllZWUtPnNvZnRtYWNfZmVhdHVyZXMgJiBJRUVFX1NPRlRNQUNfQVNTT0NJQVRFKQogCQkJaWVlZTgwMjExX3NvZnRtYWNfbmV3X25ldChpZWVlLCZuZXR3b3JrKTsKIAl9IGVsc2UgewotCQlJRUVFODAyMTFfREVCVUdfU0NBTigiVXBkYXRpbmcgJyVzJyAoIiBNQUNfRk1UICIpIHZpYSAlcy5cbiIsCisJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJVcGRhdGluZyAnJXMnICglcE0pIHZpYSAlcy5cbiIsCiAJCQkJICAgICBlc2NhcGVfZXNzaWQodGFyZ2V0LT5zc2lkLAogCQkJCQkJICB0YXJnZXQtPnNzaWRfbGVuKSwKLQkJCQkgICAgIE1BQ19BUkcodGFyZ2V0LT5ic3NpZCksCisJCQkJICAgICB0YXJnZXQtPmJzc2lkLAogCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUoYmVhY29uLT5oZWFkZXIuZnJhbWVfY3RsKSA9PQogCQkJCSAgICAgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1AgPwogCQkJCSAgICAgIlBST0JFIFJFU1BPTlNFIiA6ICJCRUFDT04iKTsKQEAgLTI3NjEsMTIgKzI4MzgsMTQgQEAKIAkJICAgICAgc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKmhlYWRlciwKIAkJICAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0cyAqc3RhdHMpCiB7CisjaWYgMAogCWlmKGllZWUtPnN0YV9zbGVlcCB8fCAoaWVlZS0+cHMgIT0gSUVFRTgwMjExX1BTX0RJU0FCTEVEICYmCiAJCQkJaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0lORlJBICYmCiAJCQkJaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX0xJTktFRCkpCiAJewogCQl0YXNrbGV0X3NjaGVkdWxlKCZpZWVlLT5wc190YXNrKTsKIAl9CisjZW5kaWYKIAogCWlmKFdMQU5fRkNfR0VUX1NUWVBFKGhlYWRlci0+ZnJhbWVfY3RsKSAhPSBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCAmJgogCQlXTEFOX0ZDX0dFVF9TVFlQRShoZWFkZXItPmZyYW1lX2N0bCkgIT0gSUVFRTgwMjExX1NUWVBFX0JFQUNPTikKQEAgLTI3ODAsNiArMjg1OSwxNSBAQAogCQlJRUVFODAyMTFfREVCVUdfU0NBTigiQmVhY29uXG4iKTsKIAkJaWVlZTgwMjExX3Byb2Nlc3NfcHJvYmVfcmVzcG9uc2UoCiAJCQlpZWVlLCAoc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZSAqKWhlYWRlciwgc3RhdHMpOworCisJCS8vcHJpbnRrKCItLS0tLS0tLS0tLT4lcygpXG4iLCBfX2Z1bmNfXyk7CisJCWlmKGllZWUtPnN0YV9zbGVlcCB8fCAoaWVlZS0+cHMgIT0gSUVFRTgwMjExX1BTX0RJU0FCTEVEICYmCisJCQkJCWllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9JTkZSQSAmJgorCQkJCQlpZWVlLT5zdGF0ZSA9PSBJRUVFODAyMTFfTElOS0VEKSkKKwkJeworCQkJdGFza2xldF9zY2hlZHVsZSgmaWVlZS0+cHNfdGFzayk7CisJCX0KKwogCQlicmVhazsKIAogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1A6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKaW5kZXggNmQxZGRlYy4uZWE5NmM0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtNjQ2LDcgKzY0Niw3IEBACiB2b2lkIGllZWU4MDIxMV9zdGFydF9zZW5kX2JlYWNvbnMoc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCiB7CiAJaWYoaWVlZS0+c3RhcnRfc2VuZF9iZWFjb25zKQotCQlpZWVlLT5zdGFydF9zZW5kX2JlYWNvbnMoaWVlZS0+ZGV2LGllZWUtPmJhc2ljX3JhdGUpOworCQlpZWVlLT5zdGFydF9zZW5kX2JlYWNvbnMoaWVlZS0+ZGV2KTsKIAlpZihpZWVlLT5zb2Z0bWFjX2ZlYXR1cmVzICYgSUVFRV9TT0ZUTUFDX0JFQUNPTlMpCiAJCWllZWU4MDIxMV9iZWFjb25zX3N0YXJ0KGllZWUpOwogfQpAQCAtNjg2LDYgKzY4NiwxMSBAQAogLyogY2FsbGVkIHdpdGggaWVlZS0+bG9jayBoZWxkICovCiB2b2lkIGllZWU4MDIxMV9ydGxfc3RhcnRfc2NhbihzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKIHsKKyNpZmRlZiBFTkFCTEVfSVBTCisJaWYoaWVlZS0+aWVlZTgwMjExX2lwc19sZWF2ZV93cSAhPSBOVUxMKQorCQlpZWVlLT5pZWVlODAyMTFfaXBzX2xlYXZlX3dxKGllZWUtPmRldik7CisjZW5kaWYKKwogI2lmZGVmIEVOQUJMRV9ET1QxMUQKIAlpZihJU19ET1QxMURfRU5BQkxFKGllZWUpICkKIAl7CkBAIC0xMDkzLDYgKzEwOTgsNDAgQEAKIAogfQogCitzdHJ1Y3Qgc2tfYnVmZiogaWVlZTgwMjExX3BzcG9sbF9mdW5jKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9wc3BvbGxfaGRyKiBoZHI7CisKKyNpZmRlZiBVU0JfVVNFX0FMSUdOTUVOVAorICAgICAgICB1MzIgVG1wYWRkcj0wOworICAgICAgICBpbnQgYWxpZ25tZW50PTA7CisgICAgICAgIHNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcHNwb2xsX2hkcikgKyBpZWVlLT50eF9oZWFkcm9vbSArIFVTQl81MTJCX0FMSUdOTUVOVF9TSVpFKTsKKyNlbHNlCisJc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9wc3BvbGxfaGRyKStpZWVlLT50eF9oZWFkcm9vbSk7CisjZW5kaWYKKwlpZiAoIXNrYikKKwkJcmV0dXJuIE5VTEw7CisKKyNpZmRlZiBVU0JfVVNFX0FMSUdOTUVOVAorICAgICAgICBUbXBhZGRyID0gKHUzMilza2ItPmRhdGE7CisgICAgICAgIGFsaWdubWVudCA9IFRtcGFkZHIgJiAweDFmZjsKKyAgICAgICAgc2tiX3Jlc2VydmUoc2tiLChVU0JfNTEyQl9BTElHTk1FTlRfU0laRSAtIGFsaWdubWVudCkpOworI2VuZGlmCisJc2tiX3Jlc2VydmUoc2tiLCBpZWVlLT50eF9oZWFkcm9vbSk7CisKKwloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9wc3BvbGxfaGRyKilza2JfcHV0KHNrYixzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9wc3BvbGxfaGRyKSk7CisKKwltZW1jcHkoaGRyLT5ic3NpZCwgaWVlZS0+Y3VycmVudF9uZXR3b3JrLmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KGhkci0+dGEsIGllZWUtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKworCWhkci0+YWlkID0gY3B1X3RvX2xlMTYoaWVlZS0+YXNzb2NfaWQgfCAweGMwMDApOworCWhkci0+ZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8SUVFRTgwMjExX1NUWVBFX1BTUE9MTCB8IElFRUU4MDIxMV9GQ1RMX1BNKTsKKworCXJldHVybiBza2I7CisKK30KKwogCiB2b2lkIGllZWU4MDIxMV9yZXNwX3RvX2Fzc29jX3JxKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCogZGVzdCkKIHsKQEAgLTE1ODIsNiArMTYyMSwxMSBAQAogewogI2VuZGlmCiAJaWVlZS0+c3luY19zY2FuX2h1cnJ5dXAgPSAxOworI2lmZGVmIEVOQUJMRV9JUFMKKwlpZihpZWVlLT5pZWVlODAyMTFfaXBzX2xlYXZlICE9IE5VTEwpCisgICAgICAgIAlpZWVlLT5pZWVlODAyMTFfaXBzX2xlYXZlKGllZWUtPmRldik7CisjZW5kaWYKKwogCWRvd24oJmllZWUtPnd4X3NlbSk7CiAKIAlpZiAoaWVlZS0+ZGF0YV9oYXJkX3N0b3ApCkBAIC0xNTkyLDYgKzE2MzYsMTcgQEAKIAkvL2llZWUtPnNldF9jaGFuKGllZWUtPmRldiwgaWVlZS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWwpOwogCUhUU2V0Q29ubmVjdEJ3TW9kZShpZWVlLCBIVF9DSEFOTkVMX1dJRFRIXzIwLCBIVF9FWFRDSE5MX09GRlNFVF9OT19FWFQpOwogCisjaWZkZWYgRU5BQkxFX0lQUworCWlmKGllZWUtPmVSRlBvd2VyU3RhdGUgPT0gZVJmT2ZmKQorCXsKKwkJaWYoaWVlZS0+aWVlZTgwMjExX2lwc19sZWF2ZV93cSAhPSBOVUxMKQorCQkJaWVlZS0+aWVlZTgwMjExX2lwc19sZWF2ZV93cShpZWVlLT5kZXYpOworCisJCXVwKCZpZWVlLT53eF9zZW0pOworCQlyZXR1cm47CisJfQorI2VuZGlmCisKIAlpZWVlLT5hc3NvY2lhdGVfc2VxID0gMTsKIAlpZWVlODAyMTFfYXNzb2NpYXRlX3N0ZXAxKGllZWUpOwogCkBAIC0xODk3LDcgKzE5NTIsNyBAQAogCQlpZWVlODAyMTFfcmVzcF90b19hc3NvY19ycShpZWVlLCBkZXN0KTsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPIk5ldyBjbGllbnQgYXNzb2NpYXRlZDogIk1BQ19GTVQiXG4iLCBNQUNfQVJHKGRlc3QpKTsKKwlwcmludGsoS0VSTl9JTkZPIk5ldyBjbGllbnQgYXNzb2NpYXRlZDogJXBNXG4iLCBkZXN0KTsKIAkvL0ZJWE1FCiAJI2lmIDAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaWVlZS0+bG9jayxmbGFncyk7CkBAIC0xOTE4LDQzICsxOTczLDkyIEBACiAKIH0KIAordm9pZCBpZWVlODAyMTFfc3RhX3BzX3NlbmRfcHNwb2xsX2ZyYW1lKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKQoreworCisJc3RydWN0IHNrX2J1ZmYgKmJ1ZiA9IGllZWU4MDIxMV9wc3BvbGxfZnVuYyhpZWVlKTsKKworCWlmIChidWYpCisJCXNvZnRtYWNfcHNfbWdtdF94bWl0KGJ1ZiwgaWVlZSk7CisKK30KIAogc2hvcnQgaWVlZTgwMjExX3N0YV9wc19zbGVlcChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTMyICp0aW1lX2gsIHUzMiAqdGltZV9sKQogewogCWludCB0aW1lb3V0ID0gaWVlZS0+cHNfdGltZW91dDsKIAl1OCBkdGltOwotCS8qaWYoaWVlZS0+cHMgPT0gSUVFRTgwMjExX1BTX0RJU0FCTEVEIHx8Ci0JCWllZWUtPml3X21vZGUgIT0gSVdfTU9ERV9JTkZSQSB8fAotCQlpZWVlLT5zdGF0ZSAhPSBJRUVFODAyMTFfTElOS0VEKQorCVBSVF9QT1dFUl9TQVZFX0NPTlRST0wJcFBTQyA9IChQUlRfUE9XRVJfU0FWRV9DT05UUk9MKSgmKGllZWUtPlBvd2VyU2F2ZUNvbnRyb2wpKTsKIAorCWlmKGllZWUtPkxQU0RlbGF5Q250KQorCXsKKwkJLy9wcmludGsoIj09PT09PT09PT09PT09PT5EZWxheSBlbnRlciBMUFMgZm9yIERIQ1AgYW5kIEFSUCBwYWNrZXRzLi4uXG4iKTsKKwkJaWVlZS0+TFBTRGVsYXlDbnQgLS07CiAJCXJldHVybiAwOwotCSovCisJfQorCiAJZHRpbSA9IGllZWUtPmN1cnJlbnRfbmV0d29yay5kdGltX2RhdGE7Ci0JLy9wcmludGsoIkRUSU1cbiIpOworLy8JcHJpbnRrKCIlcygpOkRUSU06JWRcbiIsX19GVU5DVElPTl9fLGR0aW0pOwogCWlmKCEoZHRpbSAmIElFRUU4MDIxMV9EVElNX1ZBTElEKSkKIAkJcmV0dXJuIDA7CiAJdGltZW91dCA9IGllZWUtPmN1cnJlbnRfbmV0d29yay5iZWFjb25faW50ZXJ2YWw7IC8vc2hvdWxkIHdlIHVzZSBwc190aW1lb3V0IHZhbHVlIG9yIGJlYWNvbl9pbnRlcnZhbAogCS8vcHJpbnRrKCJWQUxJRFxuIik7CiAJaWVlZS0+Y3VycmVudF9uZXR3b3JrLmR0aW1fZGF0YSA9IElFRUU4MDIxMV9EVElNX0lOVkFMSUQ7Ci0KLQlpZihkdGltICYgKChJRUVFODAyMTFfRFRJTV9VQ0FTVCB8IElFRUU4MDIxMV9EVElNX01CQ0FTVCkmIGllZWUtPnBzKSkKKwkvKiB0aGVyZSdzIG5vIG5lZWQgdG8gbm9maXR5IEFQIHRoYXQgSSBmaW5kIHlvdSBidWZmZXJlZCB3aXRoIGJyb2FkY2FzdCBwYWNrZXQgKi8KKwlpZihkdGltICYgKElFRUU4MDIxMV9EVElNX1VDQVNUICYgaWVlZS0+cHMpKQogCQlyZXR1cm4gMjsKIAotCWlmKCF0aW1lX2FmdGVyKGppZmZpZXMsIGllZWUtPmRldi0+dHJhbnNfc3RhcnQgKyBNU0VDUyh0aW1lb3V0KSkpCisJaWYoIXRpbWVfYWZ0ZXIoamlmZmllcywgaWVlZS0+ZGV2LT50cmFuc19zdGFydCArIE1TRUNTKHRpbWVvdXQpKSl7CisvLwkJcHJpbnRrKCIlcygpOjExMU9oIE9oICxpdCBpcyBub3QgdGltZSBvdXQgcmV0dXJuIDBcbiIsX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIDA7Ci0KLQlpZighdGltZV9hZnRlcihqaWZmaWVzLCBpZWVlLT5sYXN0X3J4X3BzX3RpbWUgKyBNU0VDUyh0aW1lb3V0KSkpCisJfQorCWlmKCF0aW1lX2FmdGVyKGppZmZpZXMsIGllZWUtPmxhc3RfcnhfcHNfdGltZSArIE1TRUNTKHRpbWVvdXQpKSl7CisvLwkJcHJpbnRrKCIlcygpOjIyMk9oIE9oICxpdCBpcyBub3QgdGltZSBvdXQgcmV0dXJuIDBcbiIsX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIDA7Ci0KKwl9CiAJaWYoKGllZWUtPnNvZnRtYWNfZmVhdHVyZXMgJiBJRUVFX1NPRlRNQUNfU0lOR0xFX1FVRVVFICkgJiYKIAkJKGllZWUtPm1nbXRfcXVldWVfdGFpbCAhPSBpZWVlLT5tZ210X3F1ZXVlX2hlYWQpKQogCQlyZXR1cm4gMDsKIAogCWlmKHRpbWVfbCl7CisJCWlmKGllZWUtPmJBd2FrZVBrdFNlbnQgPT0gdHJ1ZSkgeworCQkJcFBTQy0+TFBTQXdha2VJbnR2bCA9IDE7Ly90eCB3YWtlIG9uZSBiZWFjb24KKwkJfSBlbHNlIHsKKwkJCXU4CQlNYXhQZXJpb2QgPSAxOworCisJCQlpZihwUFNDLT5MUFNBd2FrZUludHZsID09IDApCisJCQkJcFBTQy0+TFBTQXdha2VJbnR2bCA9IDE7CisJCQkvL3BOZGlzQ29tbW9uLT5SZWdMUFNNYXhJbnR2bCAvLy8gMHgwIC0gZUZhc3RQcywgMHhGRiAtRFRJTSwgMHhOTiAtIDB4Tk4gKiBCZWFjb25JbnR2bAorCQkJaWYocFBTQy0+UmVnTWF4TFBTQXdha2VJbnR2bCA9PSAwKSAvLyBEZWZhdWx0ICgweDAgLSBlRmFzdFBzLCAweEZGIC1EVElNLCAweE5OIC0gMHhOTiAqIEJlYWNvbkludHZsKQorCQkJCU1heFBlcmlvZCA9IDE7IC8vIDEgQmVhY29uIGludGVydmFsCisJCQllbHNlIGlmKHBQU0MtPlJlZ01heExQU0F3YWtlSW50dmwgPT0gMHhGRikgLy8gRFRJTQorCQkJCU1heFBlcmlvZCA9IGllZWUtPmN1cnJlbnRfbmV0d29yay5kdGltX3BlcmlvZDsKKwkJCWVsc2UKKwkJCQlNYXhQZXJpb2QgPSBwUFNDLT5SZWdNYXhMUFNBd2FrZUludHZsOworCQkJcFBTQy0+TFBTQXdha2VJbnR2bCA9IChwUFNDLT5MUFNBd2FrZUludHZsID49IE1heFBlcmlvZCkgPyBNYXhQZXJpb2QgOiAocFBTQy0+TFBTQXdha2VJbnR2bCArIDEpOworCQl9CisJCXsKKwkJCXU4IExQU0F3YWtlSW50dmxfdG1wID0gMDsKKwkJCXU4IHBlcmlvZCA9IGllZWUtPmN1cnJlbnRfbmV0d29yay5kdGltX3BlcmlvZDsKKwkJCXU4IGNvdW50ID0gaWVlZS0+Y3VycmVudF9uZXR3b3JrLnRpbS50aW1fY291bnQ7CisJCQlpZihjb3VudCA9PSAwICkgeworCQkJCWlmKHBQU0MtPkxQU0F3YWtlSW50dmwgPiBwZXJpb2QpCisJCQkJCUxQU0F3YWtlSW50dmxfdG1wID0gcGVyaW9kICsgKHBQU0MtPkxQU0F3YWtlSW50dmwgLSBwZXJpb2QpIC0oKHBQU0MtPkxQU0F3YWtlSW50dmwtcGVyaW9kKSVwZXJpb2QpOworCQkJCWVsc2UKKwkJCQkJTFBTQXdha2VJbnR2bF90bXAgPSBwUFNDLT5MUFNBd2FrZUludHZsOworCisJCQl9IGVsc2UgeworCQkJCWlmKHBQU0MtPkxQU0F3YWtlSW50dmwgPiBpZWVlLT5jdXJyZW50X25ldHdvcmsudGltLnRpbV9jb3VudCkKKwkJCQkJTFBTQXdha2VJbnR2bF90bXAgPSBjb3VudCArIChwUFNDLT5MUFNBd2FrZUludHZsIC0gY291bnQpIC0oKHBQU0MtPkxQU0F3YWtlSW50dmwtY291bnQpJXBlcmlvZCk7CisJCQkJZWxzZQorCQkJCQlMUFNBd2FrZUludHZsX3RtcCA9IHBQU0MtPkxQU0F3YWtlSW50dmw7Ly9pZWVlLT5jdXJyZW50X25ldHdvcmsudGltLnRpbV9jb3VudDsvL3BQU0MtPkxQU0F3YWtlSW50dmw7CisJCQl9CisJCQkvL3ByaW50aygiPT09PT09PT09PiVzKClhc3NvY19pZDolZCglI3gpLGJBd2FrZVBrdFNlbnQ6JWQsRFRJTTolZCwgc2xlZXAgaW50ZXJ2YWw6JWQsIExQU0F3YWtlSW50dmxfdG1wOiVkLCBjb3VudDolZFxuIixfX2Z1bmNfXyxpZWVlLT5hc3NvY19pZCxjcHVfdG9fbGUxNihpZWVlLT5hc3NvY19pZCksaWVlZS0+YkF3YWtlUGt0U2VudCxpZWVlLT5jdXJyZW50X25ldHdvcmsuZHRpbV9wZXJpb2QscFBTQy0+TFBTQXdha2VJbnR2bCxMUFNBd2FrZUludHZsX3RtcCxjb3VudCk7CisKIAkJKnRpbWVfbCA9IGllZWUtPmN1cnJlbnRfbmV0d29yay5sYXN0X2R0aW1fc3RhX3RpbWVbMF0KLQkJCSsgKGllZWUtPmN1cnJlbnRfbmV0d29yay5iZWFjb25faW50ZXJ2YWwpOworCQkJKyBNU0VDUyhpZWVlLT5jdXJyZW50X25ldHdvcmsuYmVhY29uX2ludGVydmFsICogTFBTQXdha2VJbnR2bF90bXApOwogCQkvLwkqIGllZWUtPmN1cnJlbnRfbmV0d29yay5kdGltX3BlcmlvZCkgKiAxMDAwOwogCX0KKwl9CiAKIAlpZih0aW1lX2gpewogCQkqdGltZV9oID0gaWVlZS0+Y3VycmVudF9uZXR3b3JrLmxhc3RfZHRpbV9zdGFfdGltZVsxXTsKQEAgLTE5ODIsNiArMjA4Niw4IEBACiAJCWllZWUtPnN0YXRlICE9IElFRUU4MDIxMV9MSU5LRUQpKXsKIAogCS8vCSN3YXJuaW5nIENIRUNLX0xPQ0tfSEVSRQorCQlwcmludGsoIj09PT09PiVzKCk6IG5vIG5lZWQgdG8gcHMsd2FrZSB1cCEhIGllZWUtPnBzIGlzICVkLGllZWUtPml3X21vZGUgaXMgJWQsaWVlZS0+c3RhdGUgaXMgJWRcbiIsCisJCQlfX0ZVTkNUSU9OX18saWVlZS0+cHMsaWVlZS0+aXdfbW9kZSxpZWVlLT5zdGF0ZSk7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5tZ210X3R4X2xvY2ssIGZsYWdzMik7CiAKIAkJaWVlZTgwMjExX3N0YV93YWtldXAoaWVlZSwgMSk7CkBAIC0xOTkxLDI3ICsyMDk3LDI3IEBACiAKIAlzbGVlcCA9IGllZWU4MDIxMV9zdGFfcHNfc2xlZXAoaWVlZSwmdGgsICZ0bCk7CiAJLyogMiB3YWtlLCAxIHNsZWVwLCAwIGRvIG5vdGhpbmcgKi8KLQlpZihzbGVlcCA9PSAwKQorCWlmKHNsZWVwID09IDApLy9pdCBpcyBub3QgdGltZSBvdXQgb3IgZHRpbSBpcyBub3QgdmFsaWQKKwl7CisJCS8vcHJpbnRrKCI9PT09PT09PT09PT5zbGVlcCBpcyAwLGRvIG5vdGhpbmdcbiIpOwogCQlnb3RvIG91dDsKLQorCX0KIAlpZihzbGVlcCA9PSAxKXsKLQotCQlpZihpZWVlLT5zdGFfc2xlZXAgPT0gMSkKKwkJLy9wcmludGsoIj09PT09PT09PT09PnNsZWVwIGlzIDEsdG8gc2xlZXBcbiIpOworCQlpZihpZWVlLT5zdGFfc2xlZXAgPT0gMSl7CisJCQkvL3ByaW50aygiJXMoMSk6IHN0YV9zbGVlcCA9IDEsIHNsZWVwIGFnYWluICsrKysrKysrKysgXG4iLCBfX2Z1bmNfXyk7CiAJCQlpZWVlLT5lbnRlcl9zbGVlcF9zdGF0ZShpZWVlLT5kZXYsdGgsdGwpOworCQl9CiAKIAkJZWxzZSBpZihpZWVlLT5zdGFfc2xlZXAgPT0gMCl7CiAJCS8vCXByaW50aygic2VuZCBudWxsIDFcbiIpOwogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPm1nbXRfdHhfbG9jaywgZmxhZ3MyKTsKIAogCQkJaWYoaWVlZS0+cHNfaXNfcXVldWVfZW1wdHkoaWVlZS0+ZGV2KSl7Ci0KLQogCQkJCWllZWUtPnN0YV9zbGVlcCA9IDI7Ci0KIAkJCQlpZWVlLT5hY2tfdHhfdG9faWVlZSA9IDE7Ci0KKwkJCQkvL3ByaW50aygiJXMoMik6IHN0YV9zbGVlcCA9IDAsIG5vdGlmeSBBUCB3ZSB3aWxsIHNsZWVwZWQgKysrKysrKysrKyBTZW5kTnVsbEZ1bmN0aW9uRGF0YVxuIiwgX19mdW5jX18pOwogCQkJCWllZWU4MDIxMV9zdGFfcHNfc2VuZF9udWxsX2ZyYW1lKGllZWUsMSk7Ci0KIAkJCQlpZWVlLT5wc190aCA9IHRoOwogCQkJCWllZWUtPnBzX3RsID0gdGw7CiAJCQl9CkBAIC0yMDE5LDExICsyMTI1LDEzIEBACiAKIAkJfQogCisJCWllZWUtPmJBd2FrZVBrdFNlbnQgPSBmYWxzZTsvL2FmdGVyIG51bGwgdG8gcG93ZXIgc2F2ZSB3ZSBzZXQgaXQgdG8gZmFsc2UuIG5vdCBsaXN0ZW4gZXZlcnkgYmVhY29uLgogCiAJfWVsc2UgaWYoc2xlZXAgPT0gMil7Ci0vLyN3YXJuaW5nIENIRUNLX0xPQ0tfSEVSRQorCQkvL3ByaW50aygiPT09PT09PT09PT5zbGVlcCBpcyAyLHRvIHdha2V1cFxuIik7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5tZ210X3R4X2xvY2ssIGZsYWdzMik7CiAKKwkJLy9wcmludGsoIiVzKDMpOiBwa3QgYnVmZmVyZWQgaW4gYXAgd2lsbCBhd2FrZSArKysrKysrKysrIGllZWU4MDIxMV9zdGFfd2FrZXVwXG4iLCBfX2Z1bmNfXyk7CiAJCWllZWU4MDIxMV9zdGFfd2FrZXVwKGllZWUsMSk7CiAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaWVlZS0+bWdtdF90eF9sb2NrLCBmbGFnczIpOwpAQCAtMjAzOCw5ICsyMTQ2LDE5IEBACiB7CiAJaWYoaWVlZS0+c3RhX3NsZWVwID09IDApewogCQlpZihubCl7Ci0JCQlwcmludGsoIldhcm5pbmc6IGRyaXZlciBpcyBwcm9iYWJseSBmYWlsaW5nIHRvIHJlcG9ydCBUWCBwcyBlcnJvclxuIik7Ci0JCQlpZWVlLT5hY2tfdHhfdG9faWVlZSA9IDE7Ci0JCQlpZWVlODAyMTFfc3RhX3BzX3NlbmRfbnVsbF9mcmFtZShpZWVlLCAwKTsKKwkJCWlmKGllZWUtPnBIVEluZm8tPklPVEFjdGlvbiAmIEhUX0lPVF9BQ1RfTlVMTF9EQVRBX1BPV0VSX1NBVklORykKKwkJCXsKKwkJCQkvL3ByaW50aygiJXMoMSk6IG5vdGlmeSBBUCB3ZSBhcmUgYXdha2VkICsrKysrKysrKysgU2VuZE51bGxGdW5jdGlvbkRhdGFcbiIsIF9fZnVuY19fKTsKKwkJCQkvL3ByaW50aygiV2FybmluZzogZHJpdmVyIGlzIHByb2JhYmx5IGZhaWxpbmcgdG8gcmVwb3J0IFRYIHBzIGVycm9yXG4iKTsKKwkJCQlpZWVlLT5hY2tfdHhfdG9faWVlZSA9IDE7CisJCQkJaWVlZTgwMjExX3N0YV9wc19zZW5kX251bGxfZnJhbWUoaWVlZSwgMCk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJaWVlZS0+YWNrX3R4X3RvX2llZWUgPSAxOworCQkJCS8vcHJpbnRrKCIlcygyKTogbm90aWZ5IEFQIHdlIGFyZSBhd2FrZWQgKysrKysrKysrKyBTZW5kIFBTLVBvbGxcbiIsIF9fZnVuY19fKTsKKwkJCQlpZWVlODAyMTFfc3RhX3BzX3NlbmRfcHNwb2xsX2ZyYW1lKGllZWUpOworCQkJfQogCQl9CiAJCXJldHVybjsKIApAQCAtMjA0OCwxMiArMjE2NiwyNyBAQAogCiAJaWYoaWVlZS0+c3RhX3NsZWVwID09IDEpCiAJCWllZWUtPnN0YV93YWtlX3VwKGllZWUtPmRldik7Ci0KLQlpZWVlLT5zdGFfc2xlZXAgPSAwOwotCiAJaWYobmwpewotCQlpZWVlLT5hY2tfdHhfdG9faWVlZSA9IDE7Ci0JCWllZWU4MDIxMV9zdGFfcHNfc2VuZF9udWxsX2ZyYW1lKGllZWUsIDApOworCisJCQlpZihpZWVlLT5wSFRJbmZvLT5JT1RBY3Rpb24gJiBIVF9JT1RfQUNUX05VTExfREFUQV9QT1dFUl9TQVZJTkcpCisJCQl7CisJCQkJLy9wcmludGsoIiVzKDMpOiBub3RpZnkgQVAgd2UgYXJlIGF3YWtlZCArKysrKysrKysrIFNlbmROdWxsRnVuY3Rpb25EYXRhXG4iLCBfX2Z1bmNfXyk7CisJCQkJLy9wcmludGsoIldhcm5pbmc6IGRyaXZlciBpcyBwcm9iYWJseSBmYWlsaW5nIHRvIHJlcG9ydCBUWCBwcyBlcnJvclxuIik7CisJCQkJaWVlZS0+YWNrX3R4X3RvX2llZWUgPSAxOworCQkJCWllZWU4MDIxMV9zdGFfcHNfc2VuZF9udWxsX2ZyYW1lKGllZWUsIDApOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWllZWUtPmFja190eF90b19pZWVlID0gMTsKKwkJCWllZWUtPnBvbGxpbmcgPSB0cnVlOworCQkJCS8vcHJpbnRrKCIlcyg0KTogbm90aWZ5IEFQIHdlIGFyZSBhd2FrZWQgKysrKysrKysrKyBTZW5kIFBTLVBvbGxcbiIsIF9fZnVuY19fKTsKKwkJCQkvL2llZWU4MDIxMV9zdGFfcHNfc2VuZF9udWxsX2ZyYW1lKGllZWUsIDApOworCQkJCWllZWU4MDIxMV9zdGFfcHNfc2VuZF9wc3BvbGxfZnJhbWUoaWVlZSk7CisJCQl9CisKKwl9IGVsc2UgeworCQlpZWVlLT5zdGFfc2xlZXAgPSAwOworCQlpZWVlLT5wb2xsaW5nID0gZmFsc2U7CiAJfQogfQogCkBAIC0yMDY3LDIzICsyMjAwLDMwIEBACiAJCS8qIE51bGwgZnJhbWUgd2l0aCBQUyBiaXQgc2V0ICovCiAJCWlmKHN1Y2Nlc3MpewogCQkJaWVlZS0+c3RhX3NsZWVwID0gMTsKKwkJCS8vcHJpbnRrKCJub3RpZnkgQVAgd2Ugd2lsbCBzbGVlcCBhbmQgc2VuZCBudWxsIG9rLCBzbyBzbGVlcCBub3crKysrKysrKysrIGVudGVyX3NsZWVwX3N0YXRlXG4iKTsKIAkJCWllZWUtPmVudGVyX3NsZWVwX3N0YXRlKGllZWUtPmRldixpZWVlLT5wc190aCxpZWVlLT5wc190bCk7CiAJCX0KLQkJLyogaWYgdGhlIGNhcmQgcmVwb3J0IG5vdCBzdWNjZXNzIHdlIGNhbid0IGJlIHN1cmUgdGhlIEFQCi0JCSAqIGhhcyBub3QgUlhlZCBzbyB3ZSBjYW4ndCBhc3N1bWUgdGhlIEFQIGJlbGlldmUgdXMgYXdha2UKLQkJICovCi0JfQotCS8qIDIxMTEyMDA1IC0gdHggYWdhaW4gbnVsbCB3aXRob3V0IFBTIGJpdCBpZiBsb3N0ICovCi0JZWxzZSB7CisJfSBlbHNlIHsvKiAyMTExMjAwNSAtIHR4IGFnYWluIG51bGwgd2l0aG91dCBQUyBiaXQgaWYgbG9zdCAqLwogCiAJCWlmKChpZWVlLT5zdGFfc2xlZXAgPT0gMCkgJiYgIXN1Y2Nlc3MpewogCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPm1nbXRfdHhfbG9jaywgZmxhZ3MyKTsKLQkJCWllZWU4MDIxMV9zdGFfcHNfc2VuZF9udWxsX2ZyYW1lKGllZWUsIDApOworCQkJLy9pZWVlODAyMTFfc3RhX3BzX3NlbmRfbnVsbF9mcmFtZShpZWVlLCAwKTsKKwkJCWlmKGllZWUtPnBIVEluZm8tPklPVEFjdGlvbiAmIEhUX0lPVF9BQ1RfTlVMTF9EQVRBX1BPV0VSX1NBVklORykKKwkJCXsKKwkJCQkvL3ByaW50aygibm90aWZ5IEFQIHdlIHdpbGwgc2xlZXAgYnV0IHNlbmQgYnVsbCBmYWlsZWQsIHNvIHJlc2VuZCsrKysrKysrKysgU2VuZE51bGxGdW5jdGlvbkRhdGFcbiIpOworCQkJCWllZWU4MDIxMV9zdGFfcHNfc2VuZF9udWxsX2ZyYW1lKGllZWUsIDApOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCS8vcHJpbnRrKCJub3RpZnkgQVAgd2UgYXJlIGF3YWtlZCBidXQgc2VuZCBwc3BvbGwgZmFpbGVkLCBzbyByZXNlbmQrKysrKysrKysrIFNlbmQgUFMtUG9sbFxuIik7CisJCQkJaWVlZTgwMjExX3N0YV9wc19zZW5kX3BzcG9sbF9mcmFtZShpZWVlKTsKKwkJCX0KIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPm1nbXRfdHhfbG9jaywgZmxhZ3MyKTsKIAkJfQogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiB9CisKIHZvaWQgaWVlZTgwMjExX3Byb2Nlc3NfYWN0aW9uKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKiBpZWVlLCBzdHJ1Y3Qgc2tfYnVmZiogc2tiKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyKiBoZWFkZXIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIqKXNrYi0+ZGF0YTsKQEAgLTIyMjcsNyArMjM2Nyw3IEBACiAJCQkJCQkJCXsKIAkJCQkJCQkJCWlmICghaWVlZS0+R2V0Tm1vZGVTdXBwb3J0QnlTZWNDZmcoaWVlZS0+ZGV2KSkKIAkJCQkJCQkJCXsKLQkJCQkJCQkJCQkJCS8vIFdFUCBvciBUS0lQIGVuY3J5cHRpb24KKwkJCQkJCQkJCQkvLyBXRVAgb3IgVEtJUCBlbmNyeXB0aW9uCiAJCQkJCQkJCQkJaWYoSXNIVEhhbGZObW9kZUFQcyhpZWVlKSkKIAkJCQkJCQkJCQl7CiAJCQkJCQkJCQkJCWJTdXBwb3J0Tm1vZGUgPSB0cnVlOwpAQCAtMjIzOCw3ICsyMzc4LDcgQEAKIAkJCQkJCQkJCQkJYlN1cHBvcnRObW9kZSA9IGZhbHNlOwogCQkJCQkJCQkJCQliSGFsZlN1cHBvcnRObW9kZSA9IGZhbHNlOwogCQkJCQkJCQkJCX0KLQkJCQkJCQkJCXByaW50aygiPT09PT09PT09PT50byBsaW5rIHdpdGggQVAgdXNpbmcgU0VDKCVkLCAlZCkiLCBiU3VwcG9ydE5tb2RlLCBiSGFsZlN1cHBvcnRObW9kZSk7CisJCQkJCQkJCQlwcmludGsoIj09PT09PT09PT0+dG8gbGluayB3aXRoIEFQIHVzaW5nIFNFQyglZCwgJWQpXG4iLCBiU3VwcG9ydE5tb2RlLCBiSGFsZlN1cHBvcnRObW9kZSk7CiAJCQkJCQkJCQl9CiAJCQkJCQkJCX0KIAkJCQkJCQkJLyogRHVtbXkgd2lybGVzcyBtb2RlIHNldHRpbmcgdG8gYXZvaWQgZW5jcnlwdGlvbiBpc3N1ZSAqLwpAQCAtMjU3NCw2ICsyNzE0LDcgQEAKIAkJaWVlZS0+c3NpZF9zZXQgPSAxOwogCX0KIAorCWllZWUtPnN0YXRlID0gSUVFRTgwMjExX05PTElOSzsKIAkvKiBjaGVjayBpZiB3ZSBoYXZlIHRoaXMgY2VsbCBpbiBvdXIgbmV0d29yayBsaXN0ICovCiAJaWVlZTgwMjExX3NvZnRtYWNfY2hlY2tfYWxsX25ldHMoaWVlZSk7CiAKQEAgLTI3MDUsNiArMjg0NiwxMCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZpZWVlLT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX05PTElOSyl7CisjaWZkZWYgRU5BQkxFX0lQUworCQlpZihpZWVlLT5pZWVlODAyMTFfaXBzX2xlYXZlX3dxICE9IE5VTEwpCisJCQlpZWVlLT5pZWVlODAyMTFfaXBzX2xlYXZlX3dxKGllZWUtPmRldik7CisjZW5kaWYKIAkJaWVlZS0+YWN0c2Nhbm5pbmcgPSB0cnVlOwogCQlpZWVlODAyMTFfcnRsX3N0YXJ0X3NjYW4oaWVlZSk7CiAJfQpAQCAtMjgyMywyMSArMjk2OCwyMyBAQAogCXJldHVybiBza2I7CiB9CiAKLXZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3ZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbChzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSwgdTggc2h1dGRvd24pCiB7CiAJaWVlZS0+c3luY19zY2FuX2h1cnJ5dXAgPSAxOwogCWRvd24oJmllZWUtPnd4X3NlbSk7Ci0JaWVlZTgwMjExX3N0b3BfcHJvdG9jb2woaWVlZSk7CisJaWVlZTgwMjExX3N0b3BfcHJvdG9jb2woaWVlZSwgc2h1dGRvd24pOwogCXVwKCZpZWVlLT53eF9zZW0pOwogfQogCiAKLXZvaWQgaWVlZTgwMjExX3N0b3BfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCit2b2lkIGllZWU4MDIxMV9zdG9wX3Byb3RvY29sKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCB1OCBzaHV0ZG93bikKIHsKIAlpZiAoIWllZWUtPnByb3RvX3N0YXJ0ZWQpCiAJCXJldHVybjsKIAotCWllZWUtPnByb3RvX3N0YXJ0ZWQgPSAwOworCWlmKHNodXRkb3duKQorCQlpZWVlLT5wcm90b19zdGFydGVkID0gMDsKKwlpZWVlLT5wcm90b19zdG9wcHBpbmcgPSAxOwogCiAJaWVlZTgwMjExX3N0b3Bfc2VuZF9iZWFjb25zKGllZWUpOwogCWRlbF90aW1lcl9zeW5jKCZpZWVlLT5hc3NvY2lhdGVfdGltZXIpOwpAQCAtMjg0OSw2ICsyOTk2LDggQEAKIAogCWllZWU4MDIxMV9kaXNhc3NvY2lhdGUoaWVlZSk7CiAJUmVtb3ZlQWxsVFMoaWVlZSk7IC8vYWRkZWQgYXMgd2UgZGlzY29ubmVjdCBmcm9tIHRoZSBwcmV2aW91cyBCU1MsIFJlbW92ZSBhbGwgVFMKKworCWllZWUtPnByb3RvX3N0b3BwcGluZyA9IDA7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3NvZnRtYWNfc3RhcnRfcHJvdG9jb2woc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUpCkBAIC0yODk0LDYgKzMwNDMsOCBAQAogCiAJaWVlZS0+aW5pdF93bW1wYXJhbV9mbGFnID0gMDsvL3JlaW5pdGlhbGl6ZSBBQ194eF9QQVJBTSByZWdpc3RlcnMuCiAKKwlpZWVlLT5zdGF0ZSA9IElFRUU4MDIxMV9OT0xJTks7CisKIAogCS8qIGlmIHRoZSB1c2VyIHNldCB0aGUgTUFDIG9mIHRoZSBhZC1ob2MgY2VsbCBhbmQgdGhlbgogCSAqIHN3aXRjaCB0byBtYW5hZ2VkIG1vZGUsIHNoYWxsIHdlICBtYWtlIHN1cmUgdGhhdCBhc3NvY2lhdGlvbgpAQCAtMzAxMyw3ICszMTY0LDkgQEAKICNlbmRpZgogCXNlbWFfaW5pdCgmaWVlZS0+d3hfc2VtLCAxKTsKIAlzZW1hX2luaXQoJmllZWUtPnNjYW5fc2VtLCAxKTsKLQorI2lmZGVmIEVOQUJMRV9JUFMKKwlzZW1hX2luaXQoJmllZWUtPmlwc19zZW0sMSk7CisjZW5kaWYKIAlzcGluX2xvY2tfaW5pdCgmaWVlZS0+bWdtdF90eF9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmaWVlZS0+YmVhY29uX2xvY2spOwogCkBAIC0zNTM3LDUgKzM2OTAsNiBAQAogRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxdWVzdHMpOwogRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3NvZnRtYWNfc2Nhbl9zeW5jcm8pOwogRVhQT1JUX1NZTUJPTF9OT1ZFUlMoaWVlZTgwMjExX3N0YXJ0X3NjYW5fc3luY3JvKTsKK0VYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9zdGFfcHNfc2VuZF9udWxsX2ZyYW1lKTsKK0VYUE9SVF9TWU1CT0xfTk9WRVJTKGllZWU4MDIxMV9zdGFfcHNfc2VuZF9wc3BvbGxfZnJhbWUpOwogI2VuZGlmCi0vL0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX3N0YV9wc19zZW5kX251bGxfZnJhbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hY193eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hY193eC5jCmluZGV4IDdjMjFhYWEuLjFiYmQ0OWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWNfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjX3d4LmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogCX0KIAogCWlmIChpZnVwKQotCQlpZWVlODAyMTFfc3RvcF9wcm90b2NvbChpZWVlKTsKKwkJaWVlZTgwMjExX3N0b3BfcHJvdG9jb2woaWVlZSx0cnVlKTsKIAogCS8qIGp1c3QgdG8gYXZvaWQgdG8gZ2l2ZSBpbmNvbnNpc3RlbnQgaW5mb3MgaW4gdGhlCiAJICogZ2V0IHd4IG1ldGhvZC4gbm90IHJlYWxseSBuZWVkZWQgb3RoZXJ3aXNlCkBAIC0zMDIsNyArMzAyLDcgQEAKIAlpZiAoIWllZWUtPnByb3RvX3N0YXJ0ZWQpewogCQlpZWVlLT5pd19tb2RlID0gd3JxdS0+bW9kZTsKIAl9ZWxzZXsKLQkJaWVlZTgwMjExX3N0b3BfcHJvdG9jb2woaWVlZSk7CisJCWllZWU4MDIxMV9zdG9wX3Byb3RvY29sKGllZWUsdHJ1ZSk7CiAJCWllZWUtPml3X21vZGUgPSB3cnF1LT5tb2RlOwogCQlpZWVlODAyMTFfc3RhcnRfcHJvdG9jb2woaWVlZSk7CiAJfQpAQCAtMzI2LDYgKzMyNiwxNyBAQAogCWludCBiNDBNID0gMDsKIAlzdGF0aWMgaW50IGNvdW50ID0gMDsKIAljaGFuID0gaWVlZS0+Y3VycmVudF9uZXR3b3JrLmNoYW5uZWw7CisKKyNpZmRlZiBFTkFCTEVfTFBTCisJaWYgKGllZWUtPkxlaXN1cmVQU0xlYXZlKSB7CisJCWllZWUtPkxlaXN1cmVQU0xlYXZlKGllZWUtPmRldik7CisJfQorCisJLyogbm90aWZ5IEFQIHRvIGJlIGluIFBTIG1vZGUgKi8KKwlpZWVlODAyMTFfc3RhX3BzX3NlbmRfbnVsbF9mcmFtZShpZWVlLCAxKTsKKwlpZWVlODAyMTFfc3RhX3BzX3NlbmRfbnVsbF9mcmFtZShpZWVlLCAxKTsKKyNlbmRpZgorCiAJbmV0aWZfY2Fycmllcl9vZmYoaWVlZS0+ZGV2KTsKIAogCWlmIChpZWVlLT5kYXRhX2hhcmRfc3RvcCkKQEAgLTM2MCw2ICszNzEsMTIgQEAKIAlpZWVlLT5Jbml0aWFsR2FpbkhhbmRsZXIoaWVlZS0+ZGV2LElHX1Jlc3RvcmUpOwogCWllZWUtPnN0YXRlID0gSUVFRTgwMjExX0xJTktFRDsKIAlpZWVlLT5saW5rX2NoYW5nZShpZWVlLT5kZXYpOworCisjaWZkZWYgRU5BQkxFX0xQUworCS8qIE5vdGlmeSBBUCB0aGF0IEkgd2FrZSB1cCBhZ2FpbiAqLworCWllZWU4MDIxMV9zdGFfcHNfc2VuZF9udWxsX2ZyYW1lKGllZWUsIDApOworI2VuZGlmCisKIAkvLyBUbyBwcmV2ZW50IHRoZSBpbW1lZGlhdGVseSBjYWxsaW5nIHdhdGNoX2RvZyBhZnRlciBzY2FuLgogCWlmKGllZWUtPkxpbmtEZXRlY3RJbmZvLk51bVJlY3ZCY25JblBlcmlvZD09MHx8aWVlZS0+TGlua0RldGVjdEluZm8uTnVtUmVjdkRhdGFJblBlcmlvZD09MCApCiAJewpAQCAtNDI5LDggKzQ0Niw5IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmKHByb3RvX3N0YXJ0ZWQpCi0JCWllZWU4MDIxMV9zdG9wX3Byb3RvY29sKGllZWUpOworCWlmKHByb3RvX3N0YXJ0ZWQpeworCQlpZWVlODAyMTFfc3RvcF9wcm90b2NvbChpZWVlLHRydWUpOworCX0KIAogCiAJLyogdGhpcyBpcyBqdXN0IHRvIGJlIHN1cmUgdGhhdCB0aGUgR0VUIHd4IGNhbGxiYWNrCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwppbmRleCA3OThmYjQxLi5hNzVmMzY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKQEAgLTIwMCw4ICsyMDAsOCBAQAogCQloZWFkZXIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgZnJhZy0+ZGF0YTsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUS0lQIGNvdW50ZXJtZWFzdXJlczogZHJvcHBlZCAiCi0JCQkgICAgICAgIlRYIHBhY2tldCB0byAiIE1BQ19GTVQgIlxuIiwKLQkJCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIE1BQ19BUkcoaGVhZGVyLT5hZGRyMSkpOworCQkJICAgICAgICJUWCBwYWNrZXQgdG8gJXBNXG4iLAorCQkJICAgICAgIGllZWUtPmRldi0+bmFtZSwgaGVhZGVyLT5hZGRyMSk7CiAJCX0KIAkJcmV0dXJuIC0xOwogCX0KQEAgLTMzNCw2ICszMzQsMTMgQEAKIAlpZighQWRhcHRlci0+SGFsRnVuYy5HZXRObW9kZVN1cHBvcnRCeVNlY0NmZ0hhbmRsZXIoQWRhcHRlcikpCiAJCXJldHVybjsKICNlbmRpZgorCisgICAgICAgIGlmKHRjYl9kZXNjLT5iZGhjcCkvLyB8fCBpZWVlLT5DbnRBZnRlckxpbms8MikKKyAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisKICNpZiAxCiAJaWYoIWllZWUtPkdldE5tb2RlU3VwcG9ydEJ5U2VjQ2ZnKGllZWUtPmRldikpCiAJewpAQCAtNjI4LDYgKzYzNSw3IEBACiAJaW50IHFvc19hY3RpdmVkID0gaWVlZS0+Y3VycmVudF9uZXR3b3JrLnFvc19kYXRhLmFjdGl2ZTsKIAogCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSogY3J5cHQ7CisJYm9vbCAgICBiZGhjcCA9ZmFsc2U7CiAKIAljYl9kZXNjICp0Y2JfZGVzYzsKIApAQCAtNjcyLDYgKzY4MCw1NSBAQAogCQl9CiAJI2VuZGlmCiAKKwkJLy8gVGhlIGZvbGxvd2luZyBpcyBmb3IgREhDUCBhbmQgQVJQIHBhY2tldCwgd2UgdXNlIGNjazFNIHRvIHR4IHRoZXNlIHBhY2tldHMgYW5kIGxldCBMUFMgYXdha2Ugc29tZSB0aW1lCisJCS8vIHRvIHByZXZlbnQgREhDUCBwcm90b2NvbCBmYWlsCisJCWlmIChza2ItPmxlbiA+IDI4Mil7Ly9NSU5JTVVNX0RIQ1BfUEFDS0VUX1NJWkUpIHsKKwkJCWlmIChFVEhfUF9JUCA9PSBldGhlcl90eXBlKSB7Ly8gSVAgaGVhZGVyCisJCQkJY29uc3Qgc3RydWN0IGlwaGRyICppcCA9IChzdHJ1Y3QgaXBoZHIgKikoKHU4ICopc2tiLT5kYXRhKzE0KTsKKwkJCQlpZiAoSVBQUk9UT19VRFAgPT0gaXAtPnByb3RvY29sKSB7Ly9GSVhNRSB3aW5kb3dzIGlzIDExIGJ1dCBoZXJlIFVEUCBpbiBsaW51eCBrZXJuZWwgaXMgMTcuCisJCQkJCXN0cnVjdCB1ZHBoZHIgKnVkcCA9IChzdHJ1Y3QgdWRwaGRyICopKCh1OCAqKWlwICsgKGlwLT5paGwgPDwgMikpOworCQkJCQkvL2lmKCgobnRvaHModWRwLT5zb3VyY2UpID09IDY4KSAmJiAobnRvaHModWRwLT5kZXN0KSA9PSA2NykpIHx8CisJCQkJCS8vLyAgICgobnRvaHModWRwLT5zb3VyY2UpID09IDY3KSAmJiAobnRvaHModWRwLT5kZXN0KSA9PSA2OCkpKSB7CisJCQkJCWlmKCgoKCh1OCAqKXVkcClbMV0gPT0gNjgpICYmICgoKHU4ICopdWRwKVszXSA9PSA2NykpIHx8CisJCQkJCQkJKCgoKHU4ICopdWRwKVsxXSA9PSA2NykgJiYgKCgodTggKil1ZHApWzNdID09IDY4KSkpIHsKKwkJCQkJCS8vIDY4IDogVURQIEJPT1RQIGNsaWVudAorCQkJCQkJLy8gNjcgOiBVRFAgQk9PVFAgc2VydmVyCisJCQkJCQlwcmludGsoIkRIQ1AgcGt0IHNyYyBwb3J0OiVkLCBkZXN0IHBvcnQ6JWQhIVxuIiwgKCh1OCAqKXVkcClbMV0sKCh1OCAqKXVkcClbM10pOworCQkJCQkJLy8gVXNlIGxvdyByYXRlIHRvIHNlbmQgREhDUCBwYWNrZXQuCisJCQkJCQkvL2lmKHBNZ250SW5mby0+SU9UQWN0aW9uICYgSFRfSU9UX0FDVF9XQV9JT1RfQnJvYWRjb20pCisJCQkJCQkvL3sKKwkJCQkJCS8vICAgICAgdGNiX2Rlc2MtPkRhdGFSYXRlID0gTWdudFF1ZXJ5X1R4UmF0ZUV4Y2x1ZGVDQ0tSYXRlcyhpZWVlKTsvLzB4YzsvL29mZG0gNm0KKwkJCQkJCS8vICAgICAgdGNiX2Rlc2MtPmJUeERpc2FibGVSYXRlRmFsbEJhY2sgPSBmYWxzZTsKKwkJCQkJCS8vfQorCQkJCQkJLy9lbHNlCisJCQkJCQkvL3BUY2ItPkRhdGFSYXRlID0gQWRhcHRlci0+TWdudEluZm8uTG93ZXN0QmFzaWNSYXRlOworCQkJCQkJLy9SVFBSSU5UKEZETSwgV0FfSU9ULCAoIkRIQ1AgVHJhbnNsYXRlSGVhZGVyKCksIHBUY2ItPkRhdGFSYXRlID0gMHgleFxuIiwgcFRjYi0+RGF0YVJhdGUpKTsKKworCQkJCQkJYmRoY3AgPSB0cnVlOworI2lmZGVmIF9SVEw4MTkyX0VYVF9QQVRDSF8KKwkJCQkJCWllZWUtPkxQU0RlbGF5Q250ID0gMTAwOy8vcFBTQy0+TFBTQXdha2VJbnR2bCoyOyAvL0FNWSwwOTA3MDEKKyNlbHNlCisJCQkJCQlpZWVlLT5MUFNEZWxheUNudCA9IDEwMDsvL3BQU0MtPkxQU0F3YWtlSW50dmwqMjsKKyNlbmRpZgorCQkJCQl9CisJCQkJfQorCQkJCX1lbHNlIGlmKEVUSF9QX0FSUCA9PSBldGhlcl90eXBlKXsvLyBJUCBBUlAgcGFja2V0CisJCQkJCXByaW50aygiPT09PT09PT09PT09PT09PT0+REhDUCBQcm90b2NvbCBzdGFydCB0eCBBUlAgcGt0ISFcbiIpOworCQkJCQliZGhjcCA9IHRydWU7CisJCQkJCWllZWUtPkxQU0RlbGF5Q250ID0gaWVlZS0+Y3VycmVudF9uZXR3b3JrLnRpbS50aW1fY291bnQ7CisKKwkJCQkJLy9pZihwTWdudEluZm8tPklPVEFjdGlvbiAmIEhUX0lPVF9BQ1RfV0FfSU9UX0Jyb2FkY29tKQorCQkJCQkvL3sKKwkJCQkJLy8gICAgICB0Y2JfZGVzYy0+RGF0YVJhdGUgPSBNZ250UXVlcnlfVHhSYXRlRXhjbHVkZUNDS1JhdGVzKEFkYXB0ZXItPk1nbnRJbmZvLm1CcmF0ZXMpOy8vMHhjOy8vb2ZkbSA2bQorCQkJCQkvLyAgICAgIHRjYl9kZXNjLT5iVHhEaXNhYmxlUmF0ZUZhbGxCYWNrID0gRkFMU0U7CisJCQkJCS8vfQorCQkJCQkvL2Vsc2UKKwkJCQkJLy8gICAgICB0Y2JfZGVzYy0+RGF0YVJhdGUgPSBBZGFwdGVyLT5NZ250SW5mby5Mb3dlc3RCYXNpY1JhdGU7CisJCQkJCS8vUlRQUklOVChGRE0sIFdBX0lPVCwgKCJBUlAgVHJhbnNsYXRlSGVhZGVyKCksIHBUY2ItPkRhdGFSYXRlID0gMHgleFxuIiwgcFRjYi0+RGF0YVJhdGUpKTsKKworCQkJCX0KKwkJCX0KKwogCQkvKiBTYXZlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gYWRkcmVzc2VzICovCiAJCW1lbWNweSgmZGVzdCwgc2tiLT5kYXRhLCBFVEhfQUxFTik7CiAJCW1lbWNweSgmc3JjLCBza2ItPmRhdGErRVRIX0FMRU4sIEVUSF9BTEVOKTsKQEAgLTg5NSw2ICs5NTIsMjUgQEAKIAkJZWxzZQogCQkJLy90Y2JfZGVzYy0+ZGF0YV9yYXRlID0gQ1VSUkVOVF9SQVRFKGllZWUtPmN1cnJlbnRfbmV0d29yay5tb2RlLCBpZWVlLT5yYXRlLCBpZWVlLT5IVEN1cnJlbnRPcGVyYVJhdGUpOwogCQkJdGNiX2Rlc2MtPmRhdGFfcmF0ZSA9IENVUlJFTlRfUkFURShpZWVlLT5tb2RlLCBpZWVlLT5yYXRlLCBpZWVlLT5IVEN1cnJlbnRPcGVyYVJhdGUpOworCisJCWlmKGJkaGNwID09IHRydWUpeworCQkJLy8gVXNlIGxvdyByYXRlIHRvIHNlbmQgREhDUCBwYWNrZXQuCisJCQkvL2lmKGllZWUtPnBIVEluZm8tPklPVEFjdGlvbiAmIEhUX0lPVF9BQ1RfV0FfSU9UX0Jyb2FkY29tKSB7CisJCQkvLwl0Y2JfZGVzYy0+ZGF0YV9yYXRlID0gTUdOXzFNOy8vTWdudFF1ZXJ5X1R4UmF0ZUV4Y2x1ZGVDQ0tSYXRlcyhpZWVlKTsvLzB4YzsvL29mZG0gNm0KKwkJCS8vCXRjYl9kZXNjLT5iVHhEaXNhYmxlUmF0ZUZhbGxCYWNrID0gZmFsc2U7CisJCQkvL30KKwkJCS8vZWxzZQorCQkJeworCQkJCXRjYl9kZXNjLT5kYXRhX3JhdGUgPSBNR05fMU07CisJCQkJdGNiX2Rlc2MtPmJUeERpc2FibGVSYXRlRmFsbEJhY2sgPSAxOworCQkJfQorCisJCQl0Y2JfZGVzYy0+UkFUUkluZGV4ID0gNzsKKwkJCXRjYl9kZXNjLT5iVHhVc2VEcml2ZXJBc3NpbmdlZFJhdGUgPSAxOworCQkJdGNiX2Rlc2MtPmJkaGNwID0gMTsKKwkJfQorCisKIAkJaWVlZTgwMjExX3F1cmV5X1Nob3J0UHJlYW1ibGVNb2RlKGllZWUsIHRjYl9kZXNjKTsKIAkJaWVlZTgwMjExX3R4X3F1ZXJ5X2FnZ19jYXAoaWVlZSwgdHhiLT5mcmFnbWVudHNbMF0sIHRjYl9kZXNjKTsKIAkJaWVlZTgwMjExX3F1ZXJ5X0hUQ2FwU2hvcnRHSShpZWVlLCB0Y2JfZGVzYyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwppbmRleCAzNDQxYjcyLi5hMzMwMmQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKQEAgLTM4NiwxMCArMzg2LDEwIEBACiAJCWVsc2UKIAkJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKAogCQkJCSJOb3Qgc2hvd2luZyBuZXR3b3JrICclcyAoIgotCQkJCU1BQ19GTVQgIiknIGR1ZSB0byBhZ2UgKCVsdW1zKS5cbiIsCisJCQkJIiVwTSknIGR1ZSB0byBhZ2UgKCVsdW1zKS5cbiIsCiAJCQkJZXNjYXBlX2Vzc2lkKG5ldHdvcmstPnNzaWQsCiAJCQkJCSAgICAgbmV0d29yay0+c3NpZF9sZW4pLAotCQkJCU1BQ19BUkcobmV0d29yay0+YnNzaWQpLAorCQkJCW5ldHdvcmstPmJzc2lkLAogCQkJCShqaWZmaWVzIC0gbmV0d29yay0+bGFzdF9zY2FubmVkKSAvIChIWiAvIDEwMCkpOwogCX0KIApAQCAtOTMzLDcgKzkzMyw3IEBACiAjaWYgMQogCWNhc2UgSVdfQVVUSF9XUEFfRU5BQkxFRDoKIAkJaWVlZS0+d3BhX2VuYWJsZWQgPSAoZGF0YS0+dmFsdWUpPzE6MDsKLQkJLy9wcmludGsoImVuYWxiZSB3cGE6JWRcbiIsIGllZWUtPndwYV9lbmFibGVkKTsKKwkJLy9wcmludGsoImVuYWJsZSB3cGE6JWRcbiIsIGllZWUtPndwYV9lbmFibGVkKTsKIAkJYnJlYWs7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jCmluZGV4IGU0MWU4YTAuLmFlMGU1YjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMKQEAgLTExMyw3ICsxMTMsNyBAQAogCXUxNiB0bXAgPSAwOwogCXUxNiBsZW4gPSBpZWVlLT50eF9oZWFkcm9vbSArIDk7CiAJLy9jYXRlZ29yeSgxKSArIGFjdGlvbiBmaWVsZCgxKSArIERpYWxvZyBUb2tlbigxKSArIEJBIFBhcmFtZXRlciBTZXQoMikgKyAgQkEgVGltZW91dCBWYWx1ZSgyKSArICBCQSBTdGFydCBTZXFDdHJsKDIpKG9yIFN0YXR1c0NvZGUoMikpCi0JSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9UUkFDRSB8IElFRUU4MDIxMV9ETF9CQSwgIj09PT09PT09PiVzKCksIGZyYW1lKCVkKSBzZW50ZCB0bzoiTUFDX0ZNVCIsIGllZWUtPmRldjolcFxuIiwgX19GVU5DVElPTl9fLCB0eXBlLCBNQUNfQVJHKERzdCksIGllZWUtPmRldik7CisJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9UUkFDRSB8IElFRUU4MDIxMV9ETF9CQSwgIj09PT09PT09PiVzKCksIGZyYW1lKCVkKSBzZW50ZCB0bzolcE0sIGllZWUtPmRldjolcFxuIiwgX19GVU5DVElPTl9fLCB0eXBlLCBEc3QsIGllZWUtPmRldik7CiAJaWYgKHBCQSA9PSBOVUxMfHxpZWVlID09IE5VTEwpCiAJewogCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX0VSUiwgInBCQSglcCkgaXMgTlVMTCBvciBpZWVlKCVwKSBpcyBOVUxMXG4iLCBwQkEsIGllZWUpOwpAQCAtMjQzLDcgKzI0Myw3IEBACiAJdTE2IGxlbiA9IDYgKyBpZWVlLT50eF9oZWFkcm9vbTsKIAogCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9UUkFDRSB8IElFRUU4MDIxMV9ETF9CQSwgIj09PT09PT09PiVzKCksIFJlYXNvbkNvZGUoJWQpIHNlbnRkIHRvOiJNQUNfRk1UIlxuIiwgX19GVU5DVElPTl9fLCBSZWFzb25Db2RlLCBNQUNfQVJHKGRzdCkpOworCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFJBQ0UgfCBJRUVFODAyMTFfRExfQkEsICI9PT09PT09PT4lcygpLCBSZWFzb25Db2RlKCVkKSBzZW50ZCB0bzolcE1cbiIsIF9fRlVOQ1RJT05fXywgUmVhc29uQ29kZSwgZHN0KTsKIAogCW1lbXNldCgmRGVsYmFQYXJhbVNldCwgMCwgMik7CiAKQEAgLTM5Nyw3ICszOTcsNyBAQAogCXBCYVRpbWVvdXRWYWwgPSAodTE2KikodGFnICsgNSk7CiAJcEJhU3RhcnRTZXFDdHJsID0gKFBTRVFVRU5DRV9DT05UUk9MKShyZXEgKyA3KTsKIAotCXByaW50aygiPT09PT09PT09PT09PT09PT09PT0+cnggQUREQkFSRVEgZnJvbSA6Ik1BQ19GTVQiXG4iLCBNQUNfQVJHKGRzdCkpOworCXByaW50aygiPT09PT09PT09PT09PT09PT09PT0+cnggQUREQkFSRVEgZnJvbSA6JXBNXG4iLCBkc3QpOwogLy9zb21lIG90aGVyIGNhcGFiaWxpdHkgaXMgbm90IHJlYWR5IG5vdy4KIAlpZigJKGllZWUtPmN1cnJlbnRfbmV0d29yay5xb3NfZGF0YS5hY3RpdmUgPT0gMCkgfHwKIAkJKGllZWUtPnBIVEluZm8tPmJDdXJyZW50SFRTdXBwb3J0ID09IGZhbHNlKSkgLy98fApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0hULmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfSFQuaAppbmRleCA5OTJiNzE4Li5mOTY4ODE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfSFQuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfSFQuaApAQCAtNDU4LDcgKzQ1OCw4IEBACiAJSFRfSU9UX1BFRVJfUkFMSU5LID0gMywKIAlIVF9JT1RfUEVFUl9BVEhFUk9TID0gNCwKIAlIVF9JT1RfUEVFUl9DSVNDTz0gNSwKLQlIVF9JT1RfUEVFUl9NQVggPSA2CisgICAgICAgIEhUX0lPVF9QRUVSX01BUlZFTEw9NiwKKwlIVF9JT1RfUEVFUl9NQVggPSA3CiB9SFRfSU9UX1BFRVJfRSwgKlBIVElPVF9QRUVSX0U7CiAKIC8vCkBAIC00NzUsNiArNDc2LDcgQEAKIAlIVF9JT1RfQUNUX0NERF9GU1lOQyA9IDB4MDAwMDAwODAsCiAJSFRfSU9UX0FDVF9QVVJFX05fTU9ERSA9IDB4MDAwMDAxMDAsCiAJSFRfSU9UX0FDVF9GT1JDRURfQ1RTMlNFTEYgPSAweDAwMDAwMjAwLAorCUhUX0lPVF9BQ1RfTlVMTF9EQVRBX1BPV0VSX1NBVklORyA9IDB4MDA4MDAwMDAsCiB9SFRfSU9UX0FDVElPTl9FLCAqUEhUX0lPVF9BQ1RJT05fRTsKIAogI2VuZGlmIC8vX1JUTDgxOVhVX0hUVFlQRV9IXwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0hUUHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0hUUHJvYy5jCmluZGV4IDFlMzkyMTQxLi40YzRiMWRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfSFRQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X0hUUHJvYy5jCkBAIC0zMiw3ICszMiw3IEBACiBzdGF0aWMgdTggVU5LTk9XTl9CT1JBRENPTVszXSA9IHsweDAwLCAweDE0LCAweGJmfTsKIHN0YXRpYyB1OCBMSU5LU1lTV1JUMzMwX0xJTktTWVNXUlQzMDBfQlJPQURDT01bM10gPSB7MHgwMCwgMHgxYSwgMHg3MH07CiBzdGF0aWMgdTggTElOS1NZU1dSVDM1MF9MSU5LU1lTV1JUMTUwX0JST0FEQ09NWzNdID0gezB4MDAsIDB4MWQsIDB4N2V9Owotc3RhdGljIHU4IE5FVEdFQVI4MzRCdjJfQlJPQURDT01bM10gPSB7MHgwMCwgMHgxYiwgMHgyZn07CisvL3N0YXRpYyB1OCBORVRHRUFSODM0QnYyX0JST0FEQ09NWzNdID0gezB4MDAsIDB4MWIsIDB4MmZ9Owogc3RhdGljIHU4IEJFTEtJTkY1RDgyMzNWMV9SQUxJTktbM10gPSB7MHgwMCwgMHgxNywgMHgzZn07CS8vY29zYSAwMzIwMjAwOAogc3RhdGljIHU4IEJFTEtJTkY1RDgyMzM0VjNfUkFMSU5LWzNdID0gezB4MDAsIDB4MWMsIDB4ZGZ9Owogc3RhdGljIHU4IFBDSV9SQUxJTktbM10gPSB7MHgwMCwgMHg5MCwgMHhjY307CkBAIC00MCw4ICs0MCw5IEBACiBzdGF0aWMgdTggQUlSTElOS19SQUxJTktbM10gPSB7MHgwMCwgMHgxOCwgMHgwMn07CiBzdGF0aWMgdTggRExJTktfQVRIRVJPU1szXSA9IHsweDAwLCAweDFjLCAweGYwfTsKIHN0YXRpYyB1OCBDSVNDT19CUk9BRENPTVszXSA9IHsweDAwLCAweDE3LCAweDk0fTsKK3N0YXRpYyB1OCBMSU5LU1lTX01BUlZFTExfNDQwME5bM10gPSB7MHgwMCwgMHgxNCwgMHhhNH07CiAKLS8vIDIwMDgvMDQvMDEgTUggRm9yIENpc2NvIEcgbW9kZSBSWCBUUCBXZSBuZWVkIHRvIGNoYW5nZSBGVyBkdXJhdGlvbi4gU2hvdWQgd2UgcHV0IHRoZQorLy8gMjAwOC8wNC8wMSBNSCBGb3IgQ2lzY28gRyBtb2RlIFJYIFRQIFdlIG5lZWQgdG8gY2hhbmdlIEZXIGR1cmF0aW9uLiBTaG91bGQgd2UgcHV0IHRoZQogLy8gY29kZSBpbiBvdGhlciBwbGFjZT8/CiAvL3N0YXRpYyB1OCBXSUZJX0NJU0NPX0dfQVBbM10gPSB7MHgwMCwgMHg0MCwgMHg5Nn07CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTM0OSwxMiArMzUwLDEyIEBACiAJYm9vbAkJCXJldFZhbHVlID0gZmFsc2U7CiAJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrKiBuZXQgPSAmaWVlZS0+Y3VycmVudF9uZXR3b3JrOwogI2lmIDAKLQlpZihwTWdudEluZm8tPmJIYWxmTk1vZGUgPT0gZmFsc2UpCisJaWYoaWVlZS0+YkhhbGZOTW9kZSA9PSBmYWxzZSkKIAkJcmV0VmFsdWUgPSBmYWxzZTsKIAllbHNlCiAjZW5kaWYKIAlpZigobWVtY21wKG5ldC0+YnNzaWQsIEJFTEtJTkY1RDgyMzNWMV9SQUxJTkssIDMpPT0wKSB8fAotCQkgICAgIChtZW1jbXAobmV0LT5ic3NpZCwgQkVMS0lORjVEODIzMzRWM19SQUxJTkssIDMpPT0wKSB8fAorCSAgIAkgICAgIChtZW1jbXAobmV0LT5ic3NpZCwgQkVMS0lORjVEODIzMzRWM19SQUxJTkssIDMpPT0wKSB8fAogCQkgICAgIChtZW1jbXAobmV0LT5ic3NpZCwgUENJX1JBTElOSywgMyk9PTApIHx8CiAJCSAgICAgKG1lbWNtcChuZXQtPmJzc2lkLCBFRElNQVhfUkFMSU5LLCAzKT09MCkgfHwKIAkJICAgICAobWVtY21wKG5ldC0+YnNzaWQsIEFJUkxJTktfUkFMSU5LLCAzKT09MCkgfHwKQEAgLTM2Myw3ICszNjQsNyBAQAogCWVsc2UgaWYoKG1lbWNtcChuZXQtPmJzc2lkLCBVTktOT1dOX0JPUkFEQ09NLCAzKT09MCkgfHwKICAgICAJCSAgICAobWVtY21wKG5ldC0+YnNzaWQsIExJTktTWVNXUlQzMzBfTElOS1NZU1dSVDMwMF9CUk9BRENPTSwgMyk9PTApfHwKICAgICAJCSAgICAobWVtY21wKG5ldC0+YnNzaWQsIExJTktTWVNXUlQzNTBfTElOS1NZU1dSVDE1MF9CUk9BRENPTSwgMyk9PTApfHwKLSAgICAJCSAgICAobWVtY21wKG5ldC0+YnNzaWQsIE5FVEdFQVI4MzRCdjJfQlJPQURDT00sIDMpPT0wKSB8fAorICAgIAkJICAgIC8vKG1lbWNtcChuZXQtPmJzc2lkLCBORVRHRUFSODM0QnYyX0JST0FEQ09NLCAzKT09MCkgfHwKICAgICAJCSAgICAobmV0LT5icm9hZGNvbV9jYXBfZXhpc3QpKQogICAgIAkJICByZXRWYWx1ZSA9IHRydWU7CiAJZWxzZSBpZihuZXQtPmJzc2h0LmJkUlQyUlRBZ2dyZWdhdGlvbikKQEAgLTM4NywxMyArMzg4LDE1IEBACiAJc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrKiBuZXQgPSAmaWVlZS0+Y3VycmVudF9uZXR3b3JrOwogCWlmKG5ldC0+YnNzaHQuYmRSVDJSVEFnZ3JlZ2F0aW9uKQogCQlwSFRJbmZvLT5JT1RQZWVyID0gSFRfSU9UX1BFRVJfUkVBTFRFSzsKLQllbHNlIGlmKG5ldC0+YnJvYWRjb21fY2FwX2V4aXN0KQorCWVsc2UgaWYobmV0LT5icm9hZGNvbV9jYXBfZXhpc3QpewogCQlwSFRJbmZvLT5JT1RQZWVyID0gSFRfSU9UX1BFRVJfQlJPQURDT007CisJfQogCWVsc2UgaWYoKG1lbWNtcChuZXQtPmJzc2lkLCBVTktOT1dOX0JPUkFEQ09NLCAzKT09MCkgfHwKIAkJCShtZW1jbXAobmV0LT5ic3NpZCwgTElOS1NZU1dSVDMzMF9MSU5LU1lTV1JUMzAwX0JST0FEQ09NLCAzKT09MCl8fAotCQkJKG1lbWNtcChuZXQtPmJzc2lkLCBMSU5LU1lTV1JUMzUwX0xJTktTWVNXUlQxNTBfQlJPQURDT00sIDMpPT0wKXx8Ci0JCQkobWVtY21wKG5ldC0+YnNzaWQsIE5FVEdFQVI4MzRCdjJfQlJPQURDT00sIDMpPT0wKSApCisJCQkobWVtY21wKG5ldC0+YnNzaWQsIExJTktTWVNXUlQzNTBfTElOS1NZU1dSVDE1MF9CUk9BRENPTSwgMyk9PTApKXsvL3x8CisJCQkvLyhtZW1jbXAobmV0LT5ic3NpZCwgTkVUR0VBUjgzNEJ2Ml9CUk9BRENPTSwgMyk9PTApICl7CiAJCXBIVEluZm8tPklPVFBlZXIgPSBIVF9JT1RfUEVFUl9CUk9BRENPTTsKKwl9CiAJZWxzZSBpZigobWVtY21wKG5ldC0+YnNzaWQsIEJFTEtJTkY1RDgyMzNWMV9SQUxJTkssIDMpPT0wKSB8fAogCQkJKG1lbWNtcChuZXQtPmJzc2lkLCBCRUxLSU5GNUQ4MjMzNFYzX1JBTElOSywgMyk9PTApIHx8CiAJCQkobWVtY21wKG5ldC0+YnNzaWQsIFBDSV9SQUxJTkssIDMpPT0wKSB8fApAQCAtNDA1LDYgKzQwOCwxMCBAQAogCQlwSFRJbmZvLT5JT1RQZWVyID0gSFRfSU9UX1BFRVJfQVRIRVJPUzsKIAllbHNlIGlmKG1lbWNtcChuZXQtPmJzc2lkLCBDSVNDT19CUk9BRENPTSwgMyk9PTApCiAJCXBIVEluZm8tPklPVFBlZXIgPSBIVF9JT1RfUEVFUl9DSVNDTzsKKyAgICAgICAgZWxzZSBpZiAoKG1lbWNtcChuZXQtPmJzc2lkLCBMSU5LU1lTX01BUlZFTExfNDQwME4sIDMpID09IDApIHx8CisJCQluZXQtPm1hcnZlbGxfY2FwX2V4aXN0KXsKKwkJcEhUSW5mby0+SU9UUGVlciA9IEhUX0lPVF9QRUVSX01BUlZFTEw7CisJfQogCWVsc2UKIAkJcEhUSW5mby0+SU9UUGVlciA9IEhUX0lPVF9QRUVSX1VOS05PV047CiAKQEAgLTQ0Miw2ICs0NDksMTggQEAKIAlyZXR1cm4gcmV0OwogIH0KIAordTggSFRJT1RBY3RJc0ZvcmNlZENUUzJTZWxmKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlLCBzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmsgKm5ldHdvcmspCit7CisgICAgICAgIHU4ICAgICAgcmV0VmFsdWUgPSAwOworICAgICAgICAvL2lmKG5ldHdvcmstPm1hcnZlbGxfY2FwX2V4aXN0KQorICAgICAgICBpZihpZWVlLT5wSFRJbmZvLT5JT1RQZWVyID09IEhUX0lPVF9QRUVSX01BUlZFTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXRWYWx1ZSA9IDE7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0VmFsdWU7Cit9CisKIAogLyoqCiAqIEZ1bmN0aW9uOglIVElPVEFjdElzRGlzYWJsZU1DUzE1CkBAIC01NzgsNiArNTk3LDIzIEBACiAJcmV0dXJuIHJldFZhbHVlOwogfQogCisvLworLy8gIFNlbmQgbnVsbCBkYXRhIGZvciB0byB0ZWxsIEFQIHRoYXQgd2UgYXJlIGF3YWtlLgorLy8KK2Jvb2wKK0hUSU9UQWN0SXNOdWxsRGF0YVBvd2VyU2F2aW5nKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKiBpZWVlLHN0cnVjdCBpZWVlODAyMTFfbmV0d29yayAqbmV0d29yaykKK3sKKwlib29sCXJldFZhbHVlID0gZmFsc2U7CisKKwlQUlRfSElHSF9USFJPVUdIUFVUCXBIVEluZm8gPSBpZWVlLT5wSFRJbmZvOworCXsKKwkJaWYocEhUSW5mby0+SU9UUGVlciA9PSBIVF9JT1RfUEVFUl9CUk9BRENPTSkgLy8gfHwocEJzc0Rlc2MtPlZlbmRlciA9PSBIVF9JT1RfUEVFUl9BVEhFUk9TICYmIHBCc3NEZXNjLT5TdWJUeXBlT2ZWZW5kZXIgPT0gSFRfSU9UX1BFRVJfQVRIRVJPU19ESVI2MzUpKQorCQkJcmV0dXJuIHRydWU7CisKKwl9CisJcmV0dXJuIHJldFZhbHVlOworfQorCiB2b2lkIEhUUmVzZXRJT1RTZXR0aW5nKAogCVBSVF9ISUdIX1RIUk9VR0hQVVQJCXBIVEluZm8KICkKQEAgLTEwNzEsNiArMTEwNywxMyBAQAogCS8vIENvbmZpZyBhbmQgY29uZmlndXJlIEEtTVNEVSBzZXR0aW5nCiAJLy8KIAlwSFRJbmZvLT5iQ3VycmVudF9BTVNEVV9TdXBwb3J0ID0gcEhUSW5mby0+YkFNU0RVX1N1cHBvcnQ7CisgICAgICAgIGlmIChpZWVlLT5ydGxsaWJfYXBfc2VjX3R5cGUgJiYKKyAgICAgICAgICAgKGllZWUtPnJ0bGxpYl9hcF9zZWNfdHlwZShpZWVlKSYoU0VDX0FMR19XRVB8U0VDX0FMR19US0lQKSkpeworICAgICAgICAgICAgICAgIGlmKCAocEhUSW5mby0+SU9UUGVlcj09IEhUX0lPVF9QRUVSX0FUSEVST1MpIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwSFRJbmZvLT5JT1RQZWVyID09IEhUX0lPVF9QRUVSX1VOS05PV04pICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHBIVEluZm8tPmJDdXJyZW50QU1QRFVFbmFibGUgPSBmYWxzZTsKKyAgICAgICAgfQorCiAKIAluTWF4QU1TRFVTaXplID0gKHBQZWVySFRDYXAtPk1heEFNU0RVU2l6ZT09MCk/MzgzOTo3OTM1OwogCkBAIC0xNTE1LDYgKzE1NTgsOSBAQAogCQliSU9UQWN0aW9uID0gSFRJT1RBY3RJc0Rpc2FibGVNQ1MxNChpZWVlLCBwTmV0d29yay0+YnNzaWQpOwogCQlpZihiSU9UQWN0aW9uKQogCQkJcEhUSW5mby0+SU9UQWN0aW9uIHw9IEhUX0lPVF9BQ1RfRElTQUJMRV9NQ1MxNDsKKwkJYklPVEFjdGlvbiA9IEhUSU9UQWN0SXNGb3JjZWRDVFMyU2VsZihpZWVlLCBwTmV0d29yayk7CisJCWlmKGJJT1RBY3Rpb24pCisJCQlwSFRJbmZvLT5JT1RBY3Rpb24gfD0gSFRfSU9UX0FDVF9GT1JDRURfQ1RTMlNFTEY7CiAKIAkJYklPVEFjdGlvbiA9IEhUSU9UQWN0SXNEaXNhYmxlTUNTMTUoaWVlZSk7CiAJCWlmKGJJT1RBY3Rpb24pCkBAIC0xNTM3LDYgKzE1ODMsOSBAQAogCQlpZihiSU9UQWN0aW9uKQogCQkJcEhUSW5mby0+SU9UQWN0aW9uIHw9IEhUX0lPVF9BQ1RfQ0REX0ZTWU5DOwogCisJCWJJT1RBY3Rpb24gPSBIVElPVEFjdElzTnVsbERhdGFQb3dlclNhdmluZyhpZWVlLCBwTmV0d29yayk7CisJCWlmKGJJT1RBY3Rpb24pCisJCQlwSFRJbmZvLT5JT1RBY3Rpb24gfD0gSFRfSU9UX0FDVF9OVUxMX0RBVEFfUE9XRVJfU0FWSU5HOwogCiAJfQogCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9UU1Byb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9pZWVlODAyMTEvcnRsODE5eF9UU1Byb2MuYwppbmRleCAyODE2YjYwLi5lMmNiZmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvaWVlZTgwMjExL3J0bDgxOXhfVFNQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL2llZWU4MDIxMS9ydGw4MTl4X1RTUHJvYy5jCkBAIC0zMDQsNyArMzA0LDcgQEAKIAkJaWYoc2VhcmNoX2RpcltkaXJdID09ZmFsc2UgKQogCQkJY29udGludWU7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocFJldCwgcHNlYXJjaF9saXN0LCBMaXN0KXsKLQkvLwkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9UUywgIkFERDoiTUFDX0ZNVCIsIFRJRDolZCwgZGlyOiVkXG4iLCBNQUNfQVJHKHBSZXQtPkFkZHIpLCBwUmV0LT5UU3BlYy5mLlRTSW5mby5maWVsZC51Y1RTSUQsIHBSZXQtPlRTcGVjLmYuVFNJbmZvLmZpZWxkLnVjRGlyZWN0aW9uKTsKKwkvLwkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9UUywgIkFERDolcE0sIFRJRDolZCwgZGlyOiVkXG4iLCBwUmV0LT5BZGRyLCBwUmV0LT5UU3BlYy5mLlRTSW5mby5maWVsZC51Y1RTSUQsIHBSZXQtPlRTcGVjLmYuVFNJbmZvLmZpZWxkLnVjRGlyZWN0aW9uKTsKIAkJCWlmIChtZW1jbXAocFJldC0+QWRkciwgQWRkciwgNikgPT0gMCkKIAkJCQlpZiAocFJldC0+VFNwZWMuZi5UU0luZm8uZmllbGQudWNUU0lEID09IFRJRCkKIAkJCQkJaWYocFJldC0+VFNwZWMuZi5UU0luZm8uZmllbGQudWNEaXJlY3Rpb24gPT0gZGlyKQpAQCAtNDY2LDcgKzQ2Niw3IEBACiAJCQkJCVJlc2V0UnhUc0VudHJ5KHRtcCk7CiAJCQkJfQogCi0JCQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9UUywgInRvIGluaXQgY3VycmVudCBUUywgVVA6JWQsIERpcjolZCwgYWRkcjoiTUFDX0ZNVCJcbiIsIFVQLCBEaXIsIE1BQ19BUkcoQWRkcikpOworCQkJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFMsICJ0byBpbml0IGN1cnJlbnQgVFMsIFVQOiVkLCBEaXI6JWQsIGFkZHI6JXBNXG4iLCBVUCwgRGlyLCBBZGRyKTsKIAkJCQkvLyBQcmVwYXJlIFRTIEluZm8gcmVsZWF0ZWQgZmllbGQKIAkJCQlwVFNJbmZvLT5maWVsZC51Y1RyYWZmaWNUeXBlID0gMDsJCQkvLyBUcmFmZmljIHR5cGU6IFdNTSBpcyByZXNlcnZlZCBpbiB0aGlzIGZpZWxkCiAJCQkJcFRTSW5mby0+ZmllbGQudWNUU0lEID0gVVA7CQkJLy8gVFNJRApAQCAtNTUyLDcgKzU1Miw3IEBACiB2b2lkIFJlbW92ZVBlZXJUUyhzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSogaWVlZSwgdTgqIEFkZHIpCiB7CiAJUFRTX0NPTU1PTl9JTkZPCXBUUywgcFRtcFRTOwotCXByaW50aygiPT09PT09PT09PT0+UmVtb3ZlUGVlclRTLCJNQUNfRk1UIlxuIiwgTUFDX0FSRyhBZGRyKSk7CisJcHJpbnRrKCI9PT09PT09PT09PT5SZW1vdmVQZWVyVFMsJXBNXG4iLCBBZGRyKTsKICNpZiAxCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBUUywgcFRtcFRTLCAmaWVlZS0+VHhfVFNfUGVuZGluZ19MaXN0LCBMaXN0KQogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE4MF85M2N4Ni5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTgwXzkzY3g2LmMKaW5kZXggNzlmN2EwZi4uMjYyZWQ1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTgwXzkzY3g2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTgwXzkzY3g2LmMKQEAgLTIyLDcgKzIyLDcgQEAKIAogc3RhdGljIHZvaWQgZXByb21fY3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc2hvcnQgYml0KQogewotCWlmKGJpdCkKKwlpZiAoYml0KQogCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCwKIAkJCSAgICAgICAoMTw8RVBST01fQ1NfU0hJRlQpIHwgXAogCQkJICAgICAgIHJlYWRfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQpKTsgLy9lbmFibGUgRVBST00KQEAgLTM4LDIzICszOCwyMyBAQAogc3RhdGljIHZvaWQgZXByb21fY2tfY3ljbGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAl3cml0ZV9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCwKLQkJICAgICAgICgxPDxFUFJPTV9DS19TSElGVCkgfCByZWFkX25pY19ieXRlKGRldixFUFJPTV9DTUQpKTsKKwkJICAgICAgICgxPDxFUFJPTV9DS19TSElGVCkgfCByZWFkX25pY19ieXRlKGRldiwgRVBST01fQ01EKSk7CiAJZm9yY2VfcGNpX3Bvc3RpbmcoZGV2KTsKIAl1ZGVsYXkoRVBST01fREVMQVkpOwogCXdyaXRlX25pY19ieXRlKGRldiwgRVBST01fQ01ELAotCQkgICAgICAgcmVhZF9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCkgJn4gKDE8PEVQUk9NX0NLX1NISUZUKSk7CisJCSAgICAgICByZWFkX25pY19ieXRlKGRldiwgRVBST01fQ01EKSAmIH4oMTw8RVBST01fQ0tfU0hJRlQpKTsKIAlmb3JjZV9wY2lfcG9zdGluZyhkZXYpOwogCXVkZWxheShFUFJPTV9ERUxBWSk7CiB9CiAKIAotc3RhdGljIHZvaWQgZXByb21fdyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LHNob3J0IGJpdCkKK3N0YXRpYyB2b2lkIGVwcm9tX3coc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc2hvcnQgYml0KQogewotCWlmKGJpdCkKKwlpZiAoYml0KQogCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCwgKDE8PEVQUk9NX1dfU0hJRlQpIHwgXAotCQkJICAgICAgIHJlYWRfbmljX2J5dGUoZGV2LEVQUk9NX0NNRCkpOworCQkJICAgICAgIHJlYWRfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQpKTsKIAllbHNlCi0JCXdyaXRlX25pY19ieXRlKGRldiwgRVBST01fQ01ELCByZWFkX25pY19ieXRlKGRldixFUFJPTV9DTUQpXAorCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCwgcmVhZF9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRClcCiAJCQkgICAgICAgJn4oMTw8RVBST01fV19TSElGVCkpOwogCiAJZm9yY2VfcGNpX3Bvc3RpbmcoZGV2KTsKQEAgLTY2LDEwICs2NiwxMSBAQAogewogCXNob3J0IGJpdDsKIAotCWJpdD0ocmVhZF9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCkgJiAoMTw8RVBST01fUl9TSElGVCkgKTsKKwliaXQgPSAocmVhZF9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCkgJiAoMTw8RVBST01fUl9TSElGVCkpOwogCXVkZWxheShFUFJPTV9ERUxBWSk7CiAKLQlpZihiaXQpIHJldHVybiAxOworCWlmIChiaXQpCisJCXJldHVybiAxOwogCXJldHVybiAwOwogfQogCkBAIC03OCw3ICs3OSw3IEBACiB7CiAJaW50IGk7CiAKLQlmb3IoaT0wOyBpPGxlbjsgaSsrKXsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKIAkJZXByb21fdyhkZXYsIGJbaV0pOwogCQllcHJvbV9ja19jeWNsZShkZXYpOwogCX0KQEAgLTg4LDM3ICs4OSwzNyBAQAogdTMyIGVwcm9tX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGFkZHIpCiB7CiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwotCXNob3J0IHJlYWRfY21kW109ezEsMSwwfTsKKwlzaG9ydCByZWFkX2NtZFtdID0gezEsIDEsIDB9OwogCXNob3J0IGFkZHJfc3RyWzhdOwogCWludCBpOwogCWludCBhZGRyX2xlbjsKIAl1MzIgcmV0OwogCi0JcmV0PTA7CisJcmV0ID0gMDsKICAgICAgICAgLy9lbmFibGUgRVBST00gcHJvZ3JhbW1pbmcKIAl3cml0ZV9uaWNfYnl0ZShkZXYsIEVQUk9NX0NNRCwKIAkJICAgICAgIChFUFJPTV9DTURfUFJPR1JBTTw8RVBST01fQ01EX09QRVJBVElOR19NT0RFX1NISUZUKSk7CiAJZm9yY2VfcGNpX3Bvc3RpbmcoZGV2KTsKIAl1ZGVsYXkoRVBST01fREVMQVkpOwogCi0JaWYgKHByaXYtPmVwcm9tdHlwZT09RVBST01fOTNjNTYpewotCQlhZGRyX3N0cls3XT1hZGRyICYgMTsKLQkJYWRkcl9zdHJbNl09YWRkciAmICgxPDwxKTsKLQkJYWRkcl9zdHJbNV09YWRkciAmICgxPDwyKTsKLQkJYWRkcl9zdHJbNF09YWRkciAmICgxPDwzKTsKLQkJYWRkcl9zdHJbM109YWRkciAmICgxPDw0KTsKLQkJYWRkcl9zdHJbMl09YWRkciAmICgxPDw1KTsKLQkJYWRkcl9zdHJbMV09YWRkciAmICgxPDw2KTsKLQkJYWRkcl9zdHJbMF09YWRkciAmICgxPDw3KTsKLQkJYWRkcl9sZW49ODsKLQl9ZWxzZXsKLQkJYWRkcl9zdHJbNV09YWRkciAmIDE7Ci0JCWFkZHJfc3RyWzRdPWFkZHIgJiAoMTw8MSk7Ci0JCWFkZHJfc3RyWzNdPWFkZHIgJiAoMTw8Mik7Ci0JCWFkZHJfc3RyWzJdPWFkZHIgJiAoMTw8Myk7Ci0JCWFkZHJfc3RyWzFdPWFkZHIgJiAoMTw8NCk7Ci0JCWFkZHJfc3RyWzBdPWFkZHIgJiAoMTw8NSk7Ci0JCWFkZHJfbGVuPTY7CisJaWYgKHByaXYtPmVwcm9tdHlwZSA9PSBFUFJPTV85M2M1NikgeworCQlhZGRyX3N0cls3XSA9IGFkZHIgJiAxOworCQlhZGRyX3N0cls2XSA9IGFkZHIgJiAoMTw8MSk7CisJCWFkZHJfc3RyWzVdID0gYWRkciAmICgxPDwyKTsKKwkJYWRkcl9zdHJbNF0gPSBhZGRyICYgKDE8PDMpOworCQlhZGRyX3N0clszXSA9IGFkZHIgJiAoMTw8NCk7CisJCWFkZHJfc3RyWzJdID0gYWRkciAmICgxPDw1KTsKKwkJYWRkcl9zdHJbMV0gPSBhZGRyICYgKDE8PDYpOworCQlhZGRyX3N0clswXSA9IGFkZHIgJiAoMTw8Nyk7CisJCWFkZHJfbGVuID0gODsKKwl9IGVsc2UgeworCQlhZGRyX3N0cls1XSA9IGFkZHIgJiAxOworCQlhZGRyX3N0cls0XSA9IGFkZHIgJiAoMTw8MSk7CisJCWFkZHJfc3RyWzNdID0gYWRkciAmICgxPDwyKTsKKwkJYWRkcl9zdHJbMl0gPSBhZGRyICYgKDE8PDMpOworCQlhZGRyX3N0clsxXSA9IGFkZHIgJiAoMTw8NCk7CisJCWFkZHJfc3RyWzBdID0gYWRkciAmICgxPDw1KTsKKwkJYWRkcl9sZW4gPSA2OwogCX0KIAllcHJvbV9jcyhkZXYsIDEpOwogCWVwcm9tX2NrX2N5Y2xlKGRldik7CkBAIC0xMjksNyArMTMwLDcgQEAKIAkvL0knbSB1bnN1cmUgaWYgaXQgaXMgbmVjZXNzYXJ5LCBidXQgYW55d2F5IHNob3VsZG4ndCBodXJ0CiAJZXByb21fdyhkZXYsIDApOwogCi0JZm9yKGk9MDtpPDE2O2krKyl7CisJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKIAkJLy9lZXByb20gbmVlZHMgYSBjbGsgY3ljbGUgYmV0d2VlbiB3cml0aW5nIG9wY29kZSZhZHIKIAkJLy9hbmQgcmVhZGluZyBkYXRhLiAoZWVwcm9tIG91dHMgYSBkdW1teSAwKQogCQllcHJvbV9ja19jeWNsZShkZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTgwXzkzY3g2LmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxODBfOTNjeDYuaAppbmRleCA2MmUxNGM3Li40YzNmNjc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxODBfOTNjeDYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxODBfOTNjeDYuaApAQCAtMSwxNyArMSwxOCBAQAotLyoKLQlUaGlzIGlzIHBhcnQgb2YgcnRsODE4NyBPcGVuU291cmNlIGRyaXZlcgotCUNvcHlyaWdodCAoQykgQW5kcmVhIE1lcmVsbG8gMjAwNC0yMDA1ICA8YW5kcmVhbXJsQHRpc2NhbGkuaXQ+Ci0JUmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEdQTCAoR2VuZXJhbCBQdWJsaWMgTGljZW5jZSkKLQotCVBhcnRzIG9mIHRoaXMgZHJpdmVyIGFyZSBiYXNlZCBvbiB0aGUgR1BMIHBhcnQgb2YgdGhlIG9mZmljaWFsIHJlYWx0ZWsgZHJpdmVyCi0JUGFydHMgb2YgdGhpcyBkcml2ZXIgYXJlIGJhc2VkIG9uIHRoZSBydGw4MTgwIGRyaXZlciBza2VsZXRvbiBmcm9tIFBhdHJpYyBTY2hlbmtlICYgQW5kcmVzIFNhbG9tb24KLQlQYXJ0cyBvZiB0aGlzIGRyaXZlciBhcmUgYmFzZWQgb24gdGhlIEludGVsIFBybyBXaXJlbGVzcyAyMTAwIEdQTCBkcml2ZXIKLQotCVdlIHdhbnQgdG8gdGFua3MgdGhlIEF1dGhvcnMgb2Ygc3VjaCBwcm9qZWN0cyBhbmQgdGhlIE5kaXN3cmFwcGVyIHByb2plY3QgQXV0aG9ycy4KLSovCi0KLS8qVGhpcyBmaWxlcyBjb250YWlucyBjYXJkIGVlcHJvbSAoOTNjNDYgb3IgOTNjNTYpIHByb2dyYW1taW5nIHJvdXRpbmVzKi8KLS8qbWVtb3J5IGlzIGFkZHJlc3NlZCBieSBXT1JEUyovCisvKiByODE4MF85M2N4Ni5oIC0gOTNjNDYgb3IgOTNjNTYgZWVwcm9tIGNhcmQgcHJvZ3JhbW1pbmcgcm91dGluZXMKKyAqCisgKiBUaGlzIGlzIHBhcnQgb2YgcnRsODE4NyBPcGVuU291cmNlIGRyaXZlcgorICogQ29weXJpZ2h0IChDKSBBbmRyZWEgTWVyZWxsbyAyMDA0LTIwMDUgIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4KKyAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiBHUEwgKEdlbmVyYWwgUHVibGljIExpY2VuY2UpCisgKiBQYXJ0cyBvZiB0aGlzIGRyaXZlciBhcmUgYmFzZWQgb24gdGhlIEdQTCBwYXJ0IG9mIHRoZSBvZmZpY2lhbCByZWFsdGVrIGRyaXZlcgorICoKKyAqIFBhcnRzIG9mIHRoaXMgZHJpdmVyIGFyZSBiYXNlZCBvbiB0aGUgcnRsODE4MCBkcml2ZXIgc2tlbGV0b24gZnJvbQorICogUGF0cmljIFNjaGVua2UgJiBBbmRyZXMgU2Fsb21vbi4KKyAqCisgKiBQYXJ0cyBvZiB0aGlzIGRyaXZlciBhcmUgYmFzZWQgb24gdGhlIEludGVsIFBybyBXaXJlbGVzcyAyMTAwIEdQTCBkcml2ZXIKKyAqCisgKiBXZSB3YW50IHRvIHRoYW5rIHRoZSBhdXRob3JzIG9mIHRoZSBhYm92ZSBtZW50aW9uZWQgcHJvamVjdHMgYW5kIHRvCisgKiB0aGUgYXV0aG9ycyBvZiB0aGUgTmRpc3dyYXBwZXIgcHJvamVjdC4KKyAqLwogCiAjaW5jbHVkZSAicjgxOTJFLmgiCiAjaW5jbHVkZSAicjgxOTJFX2h3LmgiCkBAIC0zNiw1ICszNyw1IEBACiAjZGVmaW5lIEVQUk9NX1RYUFcyIDB4MWIKICNkZWZpbmUgRVBST01fVFhQVzEgMHgzZAogCi0KLXUzMiBlcHJvbV9yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsdTMyIGFkZHIpOyAvL3JlYWRzIGEgMTYgYml0cyB3b3JkCisvKiBSZWFkcyBhIDE2IGJpdHMgd29yZC4gKi8KK3UzMiBlcHJvbV9yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBhZGRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MF9ydGw4MjU2LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTBfcnRsODI1Ni5jCmluZGV4IDNkNjdmYmIuLjFiZDA1NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MF9ydGw4MjU2LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkwX3J0bDgyNTYuYwpAQCAtNDI5LDExICs0MjksMTIgQEAKIAlib29sIGJSZXN1bHQgPSB0cnVlOwogCS8vdTggZVJGUGF0aDsKIAl1OAlpID0gMCwgUXVldWVJRCA9IDA7Ci0JcHR4X3JpbmcJaGVhZD1OVUxMLHRhaWw9TlVMTDsKKwkvL3B0eF9yaW5nCWhlYWQ9TlVMTCx0YWlsPU5VTEw7CisJc3RydWN0IHJ0bDgxOTJfdHhfcmluZyAgKnJpbmcgPSBOVUxMOwogCiAJaWYocHJpdi0+U2V0UkZQb3dlclN0YXRlSW5Qcm9ncmVzcyA9PSB0cnVlKQogCQlyZXR1cm4gZmFsc2U7Ci0JUlRfVFJBQ0UoQ09NUF9QT1dFUiwgIj09PT09PT09PT09PiBTZXRSRlBvd2VyU3RhdGU4MTkwKCkhXG4iKTsKKwkvL1JUX1RSQUNFKENPTVBfUFMsICI9PT09PT09PT09PT4gU2V0UkZQb3dlclN0YXRlODE5MCgpIVxuIik7CiAJcHJpdi0+U2V0UkZQb3dlclN0YXRlSW5Qcm9ncmVzcyA9IHRydWU7CiAKIAlzd2l0Y2gocHJpdi0+cmZfY2hpcCkKQEAgLTQ0MiwxMSArNDQzLDExIEBACiAJCXN3aXRjaCggZVJGUG93ZXJTdGF0ZSApCiAJCXsKIAkJCWNhc2UgZVJmT246Ci0JCQkJUlRfVFJBQ0UoQ09NUF9QT1dFUiwgIlNldFJGUG93ZXJTdGF0ZTgxOTAoKSBlUmZPbiAhXG4iKTsKKwkJCQkvL1JUX1RSQUNFKENPTVBfUFMsICJTZXRSRlBvd2VyU3RhdGU4MTkwKCkgZVJmT24gIVxuIik7CiAJCQkJCQkvL1JYVFggZW5hYmxlIGNvbnRyb2w6IE9uCiAJCQkJCS8vZm9yKGVSRlBhdGggPSAwOyBlUkZQYXRoIDxwSGFsRGF0YS0+TnVtVG90YWxSRlBhdGg7IGVSRlBhdGgrKykKLQkJCQkJLy8JUEhZX1NldFJGUmVnKEFkYXB0ZXIsIChSRjkwX1JBRElPX1BBVEhfRSllUkZQYXRoLCAweDQsIDB4QzAwLCAweDIpOwotCQkJCSNpZmRlZiBSVEw4MTkwUAorCQkJCQkvLwlQSFlfU2V0UkZSZWcoZGV2LCAoUkY5MF9SQURJT19QQVRIX0UpZVJGUGF0aCwgMHg0LCAweEMwMCwgMHgyKTsKKyNpZmRlZiBSVEw4MTkwUAogCQkJCWlmKHByaXYtPnJmX3R5cGUgPT0gUkZfMlQ0UikKIAkJCQl7CiAJCQkJCS8vZW5hYmxlIFJGLUNoaXAgQS9CCkBAIC00NzksMzYgKzQ4MCw5MiBAQAogCQkJCQkvL2FuYWxvZyB0byBkaWdpdGFsIHBhcnQyIG9uCiAJCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMSwgMHgxODAwLCAweDMpOyAvLyAweDg4MFsxMjoxMV0KIAkJCQl9Ci0JCQkJI2Vsc2UKLQkJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIEFOQVBBUiwgMHgzNyk7Ly8xNjBNSHoKLQkJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIE1hY0Jsa0N0cmwsIDB4MTcpOyAvLyAweDQwMwotCQkJCW1kZWxheSgxKTsKLQkJCQkvL2VuYWJsZSBjbG9jayA4MC84OCBNSHoKKwkJCQllbHNlIGlmKHByaXYtPnJmX3R5cGUgPT0gUkZfMVQxUikJLy9SRi1DCisJCQkJeworCQkJCQkvL2VuYWJsZSBSRi1DaGlwIEMvRAorCQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX1hDX1JGSW50ZXJmYWNlT0UsIEJJVDQsIDB4MSk7IC8vIDB4ODY4WzRdCisJCQkJCS8vYW5hbG9nIHRvIGRpZ2l0YWwgb24KKwkJCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXI0LCAweDQwMCwgMHgxKTsvLyAweDg4Y1sxMF0KKwkJCQkJLy9kaWdpdGFsIHRvIGFuYWxvZyBvbgorCQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjEsIDB4ODAsIDB4MSk7IC8vIDB4ODgwWzddCisJCQkJCS8vcnggYW50ZW5uYSBvbgorCQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgck9GRE0wX1RSeFBhdGhFbmFibGUsIDB4NCwgMHgxKTsvLyAweGMwNFsyXQorCQkJCQkvL3J4IGFudGVubmEgb24KKwkJCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJPRkRNMV9UUnhQYXRoRW5hYmxlLCAweDQsIDB4MSk7Ly8gMHhkMDRbMl0KKwkJCQkJLy9hbmFsb2cgdG8gZGlnaXRhbCBwYXJ0MiBvbgorCQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjEsIDB4ODAwLCAweDEpOyAvLyAweDg4MFsxMV0KKwkJCQl9CiAKLQkJCQlwcml2LT5iSHdSZk9mZkFjdGlvbiA9IDA7Ci0JCQkJLy99CisjZWxpZiBkZWZpbmVkIFJUTDgxOTJFCisJCQkJLy8gdHVybiBvbiBSRgorCQkJCWlmKChwcml2LT5pZWVlODAyMTEtPmVSRlBvd2VyU3RhdGUgPT0gZVJmT2ZmKSAmJiBSVF9JTl9QU19MRVZFTChwUFNDLCBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQykpCisJCQkJeyAvLyBUaGUgY3VycmVudCBSRiBzdGF0ZSBpcyBPRkYgYW5kIHRoZSBSRiBPRkYgbGV2ZWwgaXMgaGFsdGluZyB0aGUgTklDLCByZS1pbml0aWFsaXplIHRoZSBOSUMuCisJCQkJCWJvb2wgcnRzdGF0dXMgPSB0cnVlOworCQkJCQl1MzIgSW5pdGlsaXplQ291bnQgPSAzOworCQkJCQlkbworCQkJCQl7CisJCQkJCQlJbml0aWxpemVDb3VudC0tOworCQkJCQkJcHJpdi0+UmVnUmZPZmYgPSBmYWxzZTsKKwkJCQkJCXJ0c3RhdHVzID0gTmljSUZFbmFibGVOSUMoZGV2KTsKKwkJCQkJfXdoaWxlKCAocnRzdGF0dXMgIT0gdHJ1ZSkgJiYoSW5pdGlsaXplQ291bnQgPjApICk7CiAKLQkJCQkvLyBCYXNlYmFuZCByZXNldCAyMDA4LjA5LjMwIGFkZAotCQkJCXdyaXRlX25pY19ieXRlKGRldiwgQkJfUkVTRVQsIChyZWFkX25pY19ieXRlKGRldiwgQkJfUkVTRVQpfEJJVDApKTsKKwkJCQkJaWYocnRzdGF0dXMgIT0gdHJ1ZSkKKwkJCQkJeworCQkJCQkJUlRfVFJBQ0UoQ09NUF9FUlIsIiVzKCk6SW5pdGlhbGl6ZSBBZGFwdGVyIGZhaWwscmV0dXJuXG4iLF9fRlVOQ1RJT05fXyk7CisJCQkJCQlwcml2LT5TZXRSRlBvd2VyU3RhdGVJblByb2dyZXNzID0gZmFsc2U7CisJCQkJCQlyZXR1cm4gZmFsc2U7CisJCQkJCX0KIAotCQkJCS8vMiBBRkUKLQkJCQkvLyAyMDA4LjA5LjMwIGFkZAotCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMiwgMHgyMDAwMDAwMCwgMHgxKTsgLy8gMHg4ODQKLQkJCQkvL2FuYWxvZyB0byBkaWdpdGFsIHBhcnQyIG9uCi0JCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMSwgMHg2MCwgMHgzKTsJCS8vIDB4ODgwWzY6NV0KLQkJCQkvL2RpZ2l0YWwgdG8gYW5hbG9nIG9uCi0JCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIxLCAweDk4LCAweDEzKTsgLy8gMHg4ODBbNDozXQotCQkJCS8vYW5hbG9nIHRvIGRpZ2l0YWwgb24KLQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjQsIDB4ZjAzLCAweGYwMyk7Ly8gMHg4OGNbOTo4XQotCQkJCS8vcnggYW50ZW5uYSBvbgotCQkJCS8vUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJPRkRNMF9UUnhQYXRoRW5hYmxlLCAweDMsIDB4Myk7Ly8gMHhjMDRbMTowXQotCQkJCS8vcnggYW50ZW5uYSBvbiAyMDA4LjA5LjMwIG1hcmsKLQkJCQkvL1BIWV9TZXRCQlJlZyhBZGFwdGVyLCByT0ZETTFfVFJ4UGF0aEVuYWJsZSwgMHgzLCAweDMpOy8vIDB4ZDA0WzE6MF0KKwkJCQkJUlRfQ0xFQVJfUFNfTEVWRUwocFBTQywgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpOworCQkJCX0gZWxzZSB7CisJCQkJCXdyaXRlX25pY19ieXRlKGRldiwgQU5BUEFSLCAweDM3KTsvLzE2ME1IegorCQkJCQkvL3dyaXRlX25pY19ieXRlKGRldiwgTWFjQmxrQ3RybCwgMHgxNyk7IC8vIDB4NDAzCisJCQkJCW1kZWxheSgxKTsKKwkJCQkJLy9lbmFibGUgY2xvY2sgODAvODggTUh6CisJCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMSwgMHg0LCAweDEpOyAvLyAweDg4MFsyXQorCQkJCQlwcml2LT5iSHdSZk9mZkFjdGlvbiA9IDA7CisJCQkJCS8vfQogCi0JCQkJLy8yIFJGCi0JCQkJLy9lbmFibGUgUkYtQ2hpcCBBL0IKKwkJCQkJLy9SRi1BLCBSRi1CCisJCQkJCS8vZW5hYmxlIFJGLUNoaXAgQS9CCiAJCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfWEFfUkZJbnRlcmZhY2VPRSwgQklUNCwgMHgxKTsJCS8vIDB4ODYwWzRdCi0JCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9YQl9SRkludGVyZmFjZU9FLCBCSVQ0LCAweDEpOwkJLy8gMHg4NjRbNF0KKwkJCQkJLy9hbmFsb2cgdG8gZGlnaXRhbCBvbgorCQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjQsIDB4MzAwLCAweDMpOy8vIDB4ODhjWzk6OF0KKwkJCQkJLy9kaWdpdGFsIHRvIGFuYWxvZyBvbgorCQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjEsIDB4MTgsIDB4Myk7IC8vIDB4ODgwWzQ6M10KKwkJCQkJLy9yeCBhbnRlbm5hIG9uCisJCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByT0ZETTBfVFJ4UGF0aEVuYWJsZSwgMHgzLCAweDMpOy8vIDB4YzA0WzE6MF0KKwkJCQkJLy9yeCBhbnRlbm5hIG9uCisJCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByT0ZETTFfVFJ4UGF0aEVuYWJsZSwgMHgzLCAweDMpOy8vIDB4ZDA0WzE6MF0KKwkJCQkJLy9hbmFsb2cgdG8gZGlnaXRhbCBwYXJ0MiBvbgorCQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjEsIDB4NjAsIDB4Myk7IAkvLyAweDg4MFs2OjVdCisKKwkJCQkJLy8gQmFzZWJhbmQgcmVzZXQgMjAwOC4wOS4zMCBhZGQKKwkJCQkJLy93cml0ZV9uaWNfYnl0ZShkZXYsIEJCX1JFU0VULCAocmVhZF9uaWNfYnl0ZShkZXYsIEJCX1JFU0VUKXxCSVQwKSk7CisKKwkJCQkvLzIgCUFGRQorCQkJCQkvLyAyMDA4LjA5LjMwIGFkZAorCQkJCQkvL3J0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMiwgMHgyMDAwMDAwMCwgMHgxKTsgLy8gMHg4ODQKKwkJCQkJLy9hbmFsb2cgdG8gZGlnaXRhbCBwYXJ0MiBvbgorCQkJCQkvL3J0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMSwgMHg2MCwgMHgzKTsJCS8vIDB4ODgwWzY6NV0KKworCisJCQkJCS8vZGlnaXRhbCB0byBhbmFsb2cgb24KKwkJCQkJLy9ydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjEsIDB4OTgsIDB4MTMpOyAvLyAweDg4MFs0OjNdCisJCQkJCS8vYW5hbG9nIHRvIGRpZ2l0YWwgb24KKwkJCQkJLy9ydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjQsIDB4ZjAzLCAweGYwMyk7Ly8gMHg4OGNbOTo4XQorCQkJCQkvL3J4IGFudGVubmEgb24KKwkJCQkJLy9QSFlfU2V0QkJSZWcoZGV2LCByT0ZETTBfVFJ4UGF0aEVuYWJsZSwgMHgzLCAweDMpOy8vIDB4YzA0WzE6MF0KKwkJCQkJLy9yeCBhbnRlbm5hIG9uIDIwMDguMDkuMzAgbWFyaworCQkJCQkvL1BIWV9TZXRCQlJlZyhkZXYsIHJPRkRNMV9UUnhQYXRoRW5hYmxlLCAweDMsIDB4Myk7Ly8gMHhkMDRbMTowXQorCisJCQkJLy8yIAlSRgorCQkJCQkvL2VuYWJsZSBSRi1DaGlwIEEvQgorCQkJCQkvL3J0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfWEFfUkZJbnRlcmZhY2VPRSwgQklUNCwgMHgxKTsJCS8vIDB4ODYwWzRdCisJCQkJCS8vcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9YQl9SRkludGVyZmFjZU9FLCBCSVQ0LCAweDEpOwkJLy8gMHg4NjRbNF0KKworCQkJCX0KKwogCQkJCSNlbmRpZgogCQkJCQkJYnJlYWs7CiAKQEAgLTUxNywxMTkgKzU3NCwxMzcgQEAKIAkJCQkvLyBCeSBCcnVjZSwgMjAwOC0wMS0xNi4KIAkJCQkvLwogCQkJY2FzZSBlUmZTbGVlcDoKLQkJCWNhc2UgZVJmT2ZmOgotCQkJCVJUX1RSQUNFKENPTVBfUE9XRVIsICJTZXRSRlBvd2VyU3RhdGU4MTkwKCkgZVJmT2ZmL1NsZWVwICFcbiIpOwotCQkJCWlmIChwUFNDLT5iTGVpc3VyZVBzKQorCQkJeworCQkJCS8vIEhXIHNldHRpbmcgaGFkIGJlZW4gY29uZmlndXJlZCB3aXRoIGRlZXBlciBtb2RlLgorCQkJCWlmKHByaXYtPmllZWU4MDIxMS0+ZVJGUG93ZXJTdGF0ZSA9PSBlUmZPZmYpCisJCQkJCWJyZWFrOworCisJCQkJLy8gVXBkYXRlIGN1cnJlbnQgUkYgc3RhdGUgdmFyaWFibGUuCisJCQkJLy9wcml2LT5pZWVlODAyMTEtPmVSRlBvd2VyU3RhdGUgPSBlUkZQb3dlclN0YXRlOworCisJCQkJLy9pZiAocFBTQy0+YkxlaXN1cmVQcykKIAkJCQl7CiAJCQkJCWZvcihRdWV1ZUlEID0gMCwgaSA9IDA7IFF1ZXVlSUQgPCBNQVhfVFhfUVVFVUU7ICkKIAkJCQkJewotCQkJCQkJc3dpdGNoKFF1ZXVlSUQpIHsKLQkJCQkJCQljYXNlIE1HTlRfUVVFVUU6Ci0JCQkJCQkJCXRhaWw9cHJpdi0+dHhtYXByaW5ndGFpbDsKLQkJCQkJCQkJaGVhZD1wcml2LT50eG1hcHJpbmdoZWFkOwotCQkJCQkJCQlicmVhazsKKwkJCQkJCQlyaW5nID0gJnByaXYtPnR4X3JpbmdbUXVldWVJRF07CiAKLQkJCQkJCQljYXNlIEJLX1FVRVVFOgotCQkJCQkJCQl0YWlsPXByaXYtPnR4YmtwcmluZ3RhaWw7Ci0JCQkJCQkJCWhlYWQ9cHJpdi0+dHhia3ByaW5naGVhZDsKLQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJaWYoc2tiX3F1ZXVlX2xlbigmcmluZy0+cXVldWUpID09IDApCisJCQkJCQkJeworCQkJCQkJCQlRdWV1ZUlEKys7CisJCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJeworCQkJCQkJCQlSVF9UUkFDRSgoQ09NUF9QT1dFUnxDT01QX1JGKSwgImVSZiBPZmYvU2xlZXA6ICVkIHRpbWVzIFRjYkJ1c3lRdWV1ZVslZF0gIT0wIGJlZm9yZSBkb3plIVxuIiwgKGkrMSksIFF1ZXVlSUQpOworCQkJCQkJCQl1ZGVsYXkoMTApOworCQkJCQkJCQlpKys7CisJCQkJCQkJfQogCi0JCQkJCQkJY2FzZSBCRV9RVUVVRToKLQkJCQkJCQkJdGFpbD1wcml2LT50eGJlcHJpbmd0YWlsOwotCQkJCQkJCQloZWFkPXByaXYtPnR4YmVwcmluZ2hlYWQ7CisJCQkJCQkJaWYoaSA+PSBNQVhfRE9aRV9XQUlUSU5HX1RJTUVTXzl4KQorCQkJCQkJCXsKKwkJCQkJCQkJUlRfVFJBQ0UoQ09NUF9QT1dFUiwgIlxuXG5cbiBUaW1lT3V0ISEgU2V0UkZQb3dlclN0YXRlODE5MCgpOiBlUmZPZmY6ICVkIHRpbWVzIFRjYkJ1c3lRdWV1ZVslZF0gIT0gMCAhISFcblxuXG4iLCBNQVhfRE9aRV9XQUlUSU5HX1RJTUVTXzl4LCBRdWV1ZUlEKTsKIAkJCQkJCQkJYnJlYWs7Ci0KLQkJCQkJCQljYXNlIFZJX1FVRVVFOgotCQkJCQkJCQl0YWlsPXByaXYtPnR4dmlwcmluZ3RhaWw7Ci0JCQkJCQkJCWhlYWQ9cHJpdi0+dHh2aXByaW5naGVhZDsKLQkJCQkJCQkJYnJlYWs7Ci0KLQkJCQkJCQljYXNlIFZPX1FVRVVFOgotCQkJCQkJCQl0YWlsPXByaXYtPnR4dm9wcmluZ3RhaWw7Ci0JCQkJCQkJCWhlYWQ9cHJpdi0+dHh2b3ByaW5naGVhZDsKLQkJCQkJCQkJYnJlYWs7Ci0KLQkJCQkJCQlkZWZhdWx0OgotCQkJCQkJCQl0YWlsPWhlYWQ9TlVMTDsKLQkJCQkJCQkJYnJlYWs7CisJCQkJCQkJfQogCQkJCQkJfQotCQkJCQkJaWYodGFpbCA9PSBoZWFkKQorCQkJCX0KKworCQkJCS8vaWYoQWRhcHRlci0+SGFyZHdhcmVUeXBlID09IEhBUkRXQVJFX1RZUEVfUlRMODE5MFApCisjaWZkZWYgUlRMODE5MFAKKwkJCQl7CisJCQkJCVBIWV9TZXRSdGw4MTkwcFJmT2ZmKGRldik7CisJCQkJfQorCQkJCS8vZWxzZSBpZihBZGFwdGVyLT5IYXJkd2FyZVR5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4MTkyRSkKKyNlbGlmIGRlZmluZWQgUlRMODE5MkUKKwkJCQl7CisJCQkJCVBIWV9TZXRSdGw4MTkyZVJmT2ZmKGRldik7CisJCQkJfQorI2VuZGlmCisJCQl9CisJCQkJCQkJCWJyZWFrOworCisJCQljYXNlIGVSZk9mZjoKKwkJCQkvL1JUX1RSQUNFKENPTVBfUFMsICJTZXRSRlBvd2VyU3RhdGU4MTkwKCkgZVJmT2ZmL1NsZWVwICFcbiIpOworCisJCQkJLy8gVXBkYXRlIGN1cnJlbnQgUkYgc3RhdGUgdmFyaWFibGUuCisJCQkJLy9wcml2LT5pZWVlODAyMTEtPmVSRlBvd2VyU3RhdGUgPSBlUkZQb3dlclN0YXRlOworCisJCQkJLy8KKwkJCQkvLyBEaXNjb25uZWN0IHdpdGggQW55IEFQIG9yIFNUQS4KKwkJCQkvLworCQkJCWZvcihRdWV1ZUlEID0gMCwgaSA9IDA7IFF1ZXVlSUQgPCBNQVhfVFhfUVVFVUU7ICkKKwkJCQl7CisJCQkJCXJpbmcgPSAmcHJpdi0+dHhfcmluZ1tRdWV1ZUlEXTsKKworCQkJCQlpZihza2JfcXVldWVfbGVuKCZyaW5nLT5xdWV1ZSkgPT0gMCkKIAkJCQkJCXsKLQkJCQkJCQkvL0RiZ1ByaW50KCJRdWV1ZUlEID0gJWQiLCBRdWV1ZUlEKTsKIAkJCQkJCQlRdWV1ZUlEKys7CiAJCQkJCQkJY29udGludWU7CiAJCQkJCQl9CiAJCQkJCQllbHNlCiAJCQkJCQl7Ci0JCQkJCQkJUlRfVFJBQ0UoQ09NUF9QT1dFUiwgImVSZiBPZmYvU2xlZXA6ICVkIHRpbWVzIEJ1c3lRdWV1ZVslZF0gIT0wIGJlZm9yZSBkb3plIVxuIiwgKGkrMSksIFF1ZXVlSUQpOworCQkJCQkJCVJUX1RSQUNFKENPTVBfUE9XRVIsCisJCQkJCQkJImVSZiBPZmYvU2xlZXA6ICVkIHRpbWVzIFRjYkJ1c3lRdWV1ZVslZF0gIT0wIGJlZm9yZSBkb3plIVxuIiwgKGkrMSksIFF1ZXVlSUQpOwogCQkJCQkJCXVkZWxheSgxMCk7CiAJCQkJCQkJaSsrOwogCQkJCQkJfQogCiAJCQkJCQlpZihpID49IE1BWF9ET1pFX1dBSVRJTkdfVElNRVNfOXgpCiAJCQkJCQl7Ci0JCQkJCQkJUlRfVFJBQ0UoQ09NUF9QT1dFUiwgIlxuXG5cbiBUaW1lT3V0ISEgU2V0UkZQb3dlclN0YXRlODE5MCgpOiBlUmZPZmY6ICVkIHRpbWVzIEJ1c3lRdWV1ZVslZF0gIT0gMCAhISFcblxuXG4iLCBNQVhfRE9aRV9XQUlUSU5HX1RJTUVTXzl4LCBRdWV1ZUlEKTsKKwkJCQkJCQlSVF9UUkFDRShDT01QX1BPV0VSLCAiXG5cblxuIFNldFplYnJhUkZQb3dlclN0YXRlODE4NUIoKTogZVJmT2ZmOiAlZCB0aW1lcyBUY2JCdXN5UXVldWVbJWRdICE9IDAgISEhXG5cblxuIiwgTUFYX0RPWkVfV0FJVElOR19USU1FU185eCwgUXVldWVJRCk7CiAJCQkJCQkJYnJlYWs7CiAJCQkJCQl9CiAJCQkJCX0KLQkJCQl9Ci0JCQkJI2lmZGVmIFJUTDgxOTBQCi0JCQkJaWYocHJpdi0+cmZfdHlwZSA9PSBSRl8yVDRSKQorCisJCQkJLy9pZihBZGFwdGVyLT5IYXJkd2FyZVR5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4MTkwUCkKKyNpZiBkZWZpbmVkIFJUTDgxOTBQCiAJCQkJewotCQkJCQkvL2Rpc2FibGUgUkYtQ2hpcCBBL0IKLQkJCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9YQV9SRkludGVyZmFjZU9FLCBCSVQ0LCAweDApOwkJLy8gMHg4NjBbNF0KKwkJCQkJUEhZX1NldFJ0bDgxOTBwUmZPZmYoZGV2KTsKIAkJCQl9Ci0JCQkJLy9kaXNhYmxlIFJGLUNoaXAgQy9ECi0JCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9YQ19SRkludGVyZmFjZU9FLCBCSVQ0LCAweDApOyAvLyAweDg2OFs0XQotCQkJCS8vYW5hbG9nIHRvIGRpZ2l0YWwgb2ZmLCBmb3IgcG93ZXIgc2F2ZQotCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyNCwgMHhmMDAsIDB4MCk7Ly8gMHg4OGNbMTE6OF0KLQkJCQkvL2RpZ2l0YWwgdG8gYW5hbG9nIG9mZiwgZm9yIHBvd2VyIHNhdmUKLQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjEsIDB4MWUwLCAweDApOyAvLyAweDg4MFs4OjVdCi0JCQkJLy9yeCBhbnRlbm5hIG9mZgotCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByT0ZETTBfVFJ4UGF0aEVuYWJsZSwgMHhmLCAweDApOy8vIDB4YzA0WzM6MF0KLQkJCQkvL3J4IGFudGVubmEgb2ZmCi0JCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJPRkRNMV9UUnhQYXRoRW5hYmxlLCAweGYsIDB4MCk7Ly8gMHhkMDRbMzowXQotCQkJCS8vYW5hbG9nIHRvIGRpZ2l0YWwgcGFydDIgb2ZmLCBmb3IgcG93ZXIgc2F2ZQotCQkJCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMSwgMHgxZTAwLCAweDApOyAvLyAweDg4MFsxMjo5XQotI2Vsc2UgLy84MTkyRQotCQkJCQkvLzIgUkYKLQkJCQkvL2Rpc2FibGUgUkYtQ2hpcCBBL0IKLQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX1hBX1JGSW50ZXJmYWNlT0UsIEJJVDQsIDB4MCk7CQkvLyAweDg2MFs0XQotCQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX1hCX1JGSW50ZXJmYWNlT0UsIEJJVDQsIDB4MCk7CQkvLyAweDg2NFs0XQotCQkJCQkvLzIgQUZFCi0JCQkJLy9hbmFsb2cgdG8gZGlnaXRhbCBvZmYsIGZvciBwb3dlciBzYXZlCi0JCQkJCS8vUEhZX1NldEJCUmVnKEFkYXB0ZXIsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXI0LCAweGYwMCwgMHgwKTsvLyAweDg4Y1sxMTo4XQotCQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjQsIDB4ZjAzLCAweDApOyAvLyAgMjAwOC4wOS4zMCBNb2RpZnkKLQkJCQkvL2RpZ2l0YWwgdG8gYW5hbG9nIG9mZiwgZm9yIHBvd2VyIHNhdmUKLQkJCQkJLy9QSFlfU2V0QkJSZWcoQWRhcHRlciwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjEsIDB4MTgsIDB4MCk7IC8vIDB4ODgwWzQ6M10KLQkJCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIxLCAweDk4LCAweDApOyAvLyAweDg4MCAyMDA4LjA5LjMwIE1vZGlmeQotCQkJCQkvL3J4IGFudGVubmEgb2ZmICAyMDA4LjA5LjMwIG1hcmsKLQkJCQkJLy9QSFlfU2V0QkJSZWcoQWRhcHRlciwgck9GRE0wX1RSeFBhdGhFbmFibGUsIDB4ZiwgMHgwKTsvLyAweGMwNFszOjBdCi0JCQkJCS8vcnggYW50ZW5uYSBvZmYgIDIwMDguMDkuMzAgbWFyawotCQkJCQkvL1BIWV9TZXRCQlJlZyhBZGFwdGVyLCByT0ZETTFfVFJ4UGF0aEVuYWJsZSwgMHhmLCAweDApOy8vIDB4ZDA0WzM6MF0KLQkJCQkvL2FuYWxvZyB0byBkaWdpdGFsIHBhcnQyIG9mZiwgZm9yIHBvd2VyIHNhdmUKLQkJCQkJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIxLCAweDYwLCAweDApOwkJLy8gMHg4ODBbNjo1XQotCQkJCQkvLyAyMDA4LjA5LjMwIGFkZAotCQkJCQlydGw4MTkyX3NldEJCcmVnKGRldiwgckZQR0EwX0FuYWxvZ1BhcmFtZXRlcjIsIDB4MjAwMDAwMDAsIDB4MCk7IC8vIDB4ODg0CisJCQkJLy9lbHNlIGlmKEFkYXB0ZXItPkhhcmR3YXJlVHlwZSA9PSBIQVJEV0FSRV9UWVBFX1JUTDgxOTJFKQorI2VsaWYgZGVmaW5lZCBSVEw4MTkyRQorCQkJCXsKKwkJCQkJLy9pZihwUFNDLT5SZWdSZlBzTGV2ZWwgJiBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQyAmJiAhUlRfSU5fUFNfTEVWRUwocFBTQywgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpICYmIHByaXYtPmllZWU4MDIxMS0+UmZPZmZSZWFzb24gPiBSRl9DSEFOR0VfQllfUFMpCisJCQkJCWlmIChwUFNDLT5SZWdSZlBzTGV2ZWwgJiBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQyAmJiAhUlRfSU5fUFNfTEVWRUwocFBTQywgUlRfUkZfT0ZGX0xFVkxfSEFMVF9OSUMpKQorCQkJCQl7IC8vIERpc2FibGUgYWxsIGNvbXBvbmVudHMuCisJCQkJCQkvLworCQkJCQkJLy8gTm90ZToKKwkJCQkJCS8vCU5pY0lGU2V0TGlua1N0YXR1cyBpcyBhIGJpZyBwcm9ibGVtIHdoZW4gd2UgaW5kaWNhdGUgdGhlIHN0YXR1cyB0byBPUywKKwkJCQkJCS8vCXRoZSBPUyhYUCkgd2lsbCByZXNldC4gQnV0IG5vdywgd2UgY25ub3QgZmluZCB3aHkgdGhlIE5JQyBpcyBoYXJkIHRvIHJlY2VpdmUKKwkJCQkJCS8vCXBhY2tldHMgYWZ0ZXIgUkYgT04uIEp1c3Qga2VlcCB0aGlzIGZ1bmN0aW9uIGhlcmUgYW5kIHN0aWxsIHdvcmsgdG8gZmluZCBvdXQgdGhlIHJvb3QgY291c2UuCisJCQkJCQkvLwlCeSBCcnVjZSwgMjAwOS0wNS0wMS4KKwkJCQkJCS8vCisJCQkJCQkvL05pY0lGU2V0TGlua1N0YXR1cyggQWRhcHRlciwgUlRfTUVESUFfRElTQ09OTkVDVCApOworCQkJCQkJLy9pZiBIVyByYWRpbyBvZiAsIG5lZWQgdG8gaW5kaWNhdGUgc2NhbiBjb21wbGV0ZSBmaXJzdCBmb3Igbm90IGJlIHJlc2V0LgorCQkJCQkJLy9pZihNZ250U2NhbkluUHJvZ3Jlc3MocE1nbnRJbmZvKSkKKwkJCQkJCS8vCU1nbnRSZXNldFNjYW5Qcm9jZXNzKCBBZGFwdGVyICk7CiAKLQotCQkJCQkvL2Rpc2FibGUgY2xvY2sgODAvODggTUh6IDIwMDguMDkuMzAgbWFyawotCQkJCQkvL1BIWV9TZXRCQlJlZyhBZGFwdGVyLCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMSwgMHg0LCAweDApOyAvLyAweDg4MFsyXQotCQkJCQkvLzIgQkIKLQkJCQkJLy8gQmFzZWJhbmQgcmVzZXQgMjAwOC4wOS4zMCBhZGQKLQkJCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBCQl9SRVNFVCwgKHJlYWRfbmljX2J5dGUoZGV2LCBCQl9SRVNFVCl8QklUMCkpOyAvLyAweDEwMQotCQkJCQkvL01BQzogb2ZmCi0JCQkJCXdyaXRlX25pY19ieXRlKGRldiwgTWFjQmxrQ3RybCwgMHgwKTsgLy8gMHg0MDMKLQkJCQkJLy9zbG93IGRvd24gY3B1L2xidXMgY2xvY2sgZnJvbSAxNjBNSHogdG8gTG93ZXIKLQkJCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBBTkFQQVIsIDB4MDcpOyAvLyAweCAxNyA0ME1IegotCQkJCXByaXYtPmJId1JmT2ZmQWN0aW9uID0gMDsKLQkJCQkvL30KKwkJCQkJCS8vIDwxPiBEaXNhYmxlIEludGVycnVwdAorCQkJCQkJLy9ydGw4MTkyX2lycV9kaXNhYmxlKGRldik7CisJCQkJCQkvLyA8Mj4gU3RvcCBhbGwgdGltZXIKKwkJCQkJCS8vTWdudENhbmNlbEFsbFRpbWVyKEFkYXB0ZXIpOworCQkJCQkJLy8gPDM+IERpc2FibGUgQWRhcHRlcgorCQkJCQkJLy9OaWNJRkhhbHRBZGFwdGVyKEFkYXB0ZXIsIGZhbHNlKTsKKwkJCQkJCU5pY0lGRGlzYWJsZU5JQyhkZXYpOworCQkJCQkJUlRfU0VUX1BTX0xFVkVMKHBQU0MsIFJUX1JGX09GRl9MRVZMX0hBTFRfTklDKTsKKwkJCQkJfQorCQkJCQllbHNlIGlmICghKHBQU0MtPlJlZ1JmUHNMZXZlbCAmIFJUX1JGX09GRl9MRVZMX0hBTFRfTklDKSkKKwkJCQkJeyAvLyBOb3JtYWwgY2FzZS4KKwkJCQkgIAkJLy8gSVBTIHNob3VsZCBnbyB0byB0aGlzLgorCQkJCQkJUEhZX1NldFJ0bDgxOTJlUmZPZmYoZGV2KTsKKwkJCQkJfQorCQkJCX0KKyNlbHNlCisJCQkJZWxzZQorCQkJCXsKKwkJCQkJUlRfVFJBQ0UoQ09NUF9EQkcsREJHX1RSQUNFLCgiSXQgaXMgbm90IDgxOTBQY2kgYW5kIDgxOTJQY2lFIFxuIikpOworCQkJCX0KIAkJCQkjZW5kaWYKKwogCQkJCQlicmVhazsKIAogCQkJZGVmYXVsdDoKIAkJCQkJYlJlc3VsdCA9IGZhbHNlOwotCQkJCQlSVF9UUkFDRShDT01QX0VSUiwgIlNldFJGUG93ZXJTdGF0ZTgxOTAoKTogdW5rbm93biBzdGF0ZSB0byBzZXQ6IDB4JVghISFcbiIsIGVSRlBvd2VyU3RhdGUpOworCQkJCQlSVF9UUkFDRShDT01QX0VSUiwgIlNldFJGUG93ZXJTdGF0ZTgxOTAoKTogdW5rbm93IHN0YXRlIHRvIHNldDogMHglWCEhIVxuIiwgZVJGUG93ZXJTdGF0ZSk7CiAJCQkJCWJyZWFrOwogCQl9CiAKQEAgLTY0NCw2NCArNzE5LDExIEBACiAJewogCQkvLyBVcGRhdGUgY3VycmVudCBSRiBzdGF0ZSB2YXJpYWJsZS4KIAkJcHJpdi0+aWVlZTgwMjExLT5lUkZQb3dlclN0YXRlID0gZVJGUG93ZXJTdGF0ZTsKLQotCQlzd2l0Y2gocHJpdi0+cmZfY2hpcCApCi0JCXsKLQkJCWNhc2UgUkZfODI1NjoKLQkJCXN3aXRjaChwcml2LT5pZWVlODAyMTEtPmVSRlBvd2VyU3RhdGUpCi0JCQl7Ci0JCQkJY2FzZSBlUmZPZmY6Ci0JCQkJLy8KLQkJCQkvL0lmIFJmIG9mZiByZWFzb24gaXMgZnJvbSBJUFMsIExlZCBzaG91bGQgYmxpbmsgd2l0aCBubyBsaW5rLCBieSBNYWRkZXN0IDA3MTAxNQotCQkJCS8vCi0JCQkJCWlmKHByaXYtPmllZWU4MDIxMS0+UmZPZmZSZWFzb249PVJGX0NIQU5HRV9CWV9JUFMgKQotCQkJCQl7Ci0JCQkJCQkjaWZkZWYgVE9fRE8KLQkJCQkJCUFkYXB0ZXItPkhhbEZ1bmMuTGVkQ29udHJvbEhhbmRsZXIoQWRhcHRlcixMRURfQ1RMX05PX0xJTkspOwotCQkJCQkJI2VuZGlmCi0JCQkJCX0KLQkJCQkJZWxzZQotCQkJCQl7Ci0JCQkJCS8vIFR1cm4gb2ZmIExFRCBpZiBSRiBpcyBub3QgT04uCi0JCQkJCQkjaWZkZWYgVE9fRE8KLQkJCQkJCUFkYXB0ZXItPkhhbEZ1bmMuTGVkQ29udHJvbEhhbmRsZXIoQWRhcHRlciwgTEVEX0NUTF9QT1dFUl9PRkYpOwotCQkJCQkJI2VuZGlmCi0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0KLQkJCQljYXNlIGVSZk9uOgotCQkJCS8vIFR1cm4gb24gUkYgd2UgYXJlIHN0aWxsIGxpbmtlZCwgd2hpY2ggbWlnaHQgaGFwcGVuIHdoZW4KLQkJCQkvLyB3ZSBxdWlja2x5IHR1cm4gb2ZmIGFuZCBvbiBIVyBSRi4gMjAwNi4wNS4xMiwgYnkgcmNuamtvLgotCQkJCQlpZiggcHJpdi0+aWVlZTgwMjExLT5zdGF0ZSA9PSBJRUVFODAyMTFfTElOS0VEKQotCQkJCQl7Ci0JCQkJCQkjaWZkZWYgVE9fRE8KLQkJCQkJCUFkYXB0ZXItPkhhbEZ1bmMuTGVkQ29udHJvbEhhbmRsZXIoQWRhcHRlciwgTEVEX0NUTF9MSU5LKTsKLQkJCQkJCSNlbmRpZgotCQkJCQl9Ci0JCQkJCWVsc2UKLQkJCQkJewotCQkJCQkvLyBUdXJuIG9mZiBMRUQgaWYgUkYgaXMgbm90IE9OLgotCQkJCQkJI2lmZGVmIFRPX0RPCi0JCQkJCQlBZGFwdGVyLT5IYWxGdW5jLkxlZENvbnRyb2xIYW5kbGVyKEFkYXB0ZXIsIExFRF9DVExfTk9fTElOSyk7Ci0JCQkJCQkjZW5kaWYKLQkJCQkJfQotCQkJCQlicmVhazsKLQotCQkJCWRlZmF1bHQ6Ci0JCQkvLyBkbyBub3RoaW5nLgotCQkJCQlicmVhazsKLQkJCX0vLyBTd2l0Y2ggUkYgc3RhdGUKLQotCQkJYnJlYWs7Ci0KLQkJCWRlZmF1bHQ6Ci0JCQkJUlRfVFJBQ0UoQ09NUF9FUlIsICJTZXRSRlBvd2VyU3RhdGU4MTkwKCk6IFVua25vd24gUkYgdHlwZVxuIik7Ci0JCQkJYnJlYWs7Ci0JCX0vLyBTd2l0Y2ggUkZDaGlwSUQKIAl9CiAKKwkvL3ByaW50aygiJXMoKXByaXYtPmllZWU4MDIxMS0+ZVJGUG93ZXJTdGF0ZTolc1xuIiAsX19mdW5jX18scHJpdi0+aWVlZTgwMjExLT5lUkZQb3dlclN0YXRlID09IGVSZk9uID8gIk9uIiA6ICJPZmYiKTsKIAlwcml2LT5TZXRSRlBvd2VyU3RhdGVJblByb2dyZXNzID0gZmFsc2U7Ci0JUlRfVFJBQ0UoQ09NUF9QT1dFUiwgIjw9PT09PT09PT09PSBTZXRSRlBvd2VyU3RhdGU4MTkwKCkgYlJlc3VsdCA9ICVkIVxuIiwgYlJlc3VsdCk7CisJLy9SVF9UUkFDRShDT01QX1BTLCAiPD09PT09PT09PT09IFNldFJGUG93ZXJTdGF0ZTgxOTAoKSBiUmVzdWx0ID0gJWQhXG4iLCBiUmVzdWx0KTsKIAlyZXR1cm4gYlJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkwX3J0bDgyNTYuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MF9ydGw4MjU2LmgKaW5kZXggN2Q5MDk1YS4uY2U0OWM2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkwX3J0bDgyNTYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTBfcnRsODI1Ni5oCkBAIC0xLDI4ICsxLDMzIEBACi0vKgotICBUaGlzIGlzIHBhcnQgb2YgdGhlIHJ0bDgxODAtc2EyNDAwIGRyaXZlcgotICByZWxlYXNlZCB1bmRlciB0aGUgR1BMIChTZWUgZmlsZSBDT1BZSU5HIGZvciBkZXRhaWxzKS4KLSAgQ29weXJpZ2h0IChjKSAyMDA1IEFuZHJlYSBNZXJlbGxvIDxhbmRyZWFtcmxAdGlzY2FsaS5pdD4KKy8qIHI4MTkwX3J0bDgyNTYuaCAtIHJ0bDgyNTYgcmFkaW8gZnJvbnRlbmQKKyAqCisgKiBUaGlzIGlzIHBhcnQgb2YgdGhlIHJ0bDgxODAtc2EyNDAwIGRyaXZlcgorICogcmVsZWFzZWQgdW5kZXIgdGhlIEdQTCAoU2VlIGZpbGUgQ09QWUlORyBmb3IgZGV0YWlscykuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgQW5kcmVhIE1lcmVsbG8gPGFuZHJlYW1ybEB0aXNjYWxpLml0PgorICoKKyAqIE1hbnkgdGhhbmtzIHRvIFJlYWx0ZWsgQ29ycC4gZm9yIHRoZWlyIGdyZWF0IHN1cHBvcnQhCisgKi8KIAotICBUaGlzIGZpbGVzIGNvbnRhaW5zIHByb2dyYW1taW5nIGNvZGUgZm9yIHRoZSBydGw4MjU2Ci0gIHJhZGlvIGZyb250ZW5kLgotCi0gICpNYW55KiB0aGFua3MgdG8gUmVhbHRlayBDb3JwLiBmb3IgdGhlaXIgZ3JlYXQgc3VwcG9ydCEKLQotKi8KLQotI2lmbmRlZiBSVEw4MjI1SAotI2RlZmluZSBSVEw4MjI1SAorI2lmbmRlZiBSVEw4MjI1X0gKKyNkZWZpbmUgUlRMODIyNV9ICiAKICNpZmRlZiBSVEw4MTkwUAotI2RlZmluZSBSVEw4MTlYX1RPVEFMX1JGX1BBVEgJNAorI2RlZmluZSBSVEw4MTlYX1RPVEFMX1JGX1BBVEggNAogI2Vsc2UKLSNkZWZpbmUgUlRMODE5WF9UT1RBTF9SRl9QQVRIIDIgLy9mb3IgODE5MkUKKyNkZWZpbmUgUlRMODE5WF9UT1RBTF9SRl9QQVRIIDIgLyogZm9yIDgxOTJFICovCiAjZW5kaWYKLWV4dGVybiB2b2lkIFBIWV9TZXRSRjgyNTZCYW5kd2lkdGgoc3RydWN0IG5ldF9kZXZpY2UqIGRldiAsIEhUX0NIQU5ORUxfV0lEVEggQmFuZHdpZHRoKTsKLWV4dGVybiBSVF9TVEFUVVMgUEhZX1JGODI1Nl9Db25maWcoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci1leHRlcm4gUlRfU1RBVFVTIHBoeV9SRjgyNTZfQ29uZmlnX1BhcmFGaWxlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotZXh0ZXJuIHZvaWQgUEhZX1NldFJGODI1NkNDS1R4UG93ZXIoc3RydWN0IG5ldF9kZXZpY2UqCWRldiwgdTgJcG93ZXJsZXZlbCk7Ci1leHRlcm4gdm9pZCBQSFlfU2V0UkY4MjU2T0ZETVR4UG93ZXIoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgdTggcG93ZXJsZXZlbCk7Ci1leHRlcm4gYm9vbCBNZ250QWN0U2V0X1JGX1N0YXRlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIFJUX1JGX1BPV0VSX1NUQVRFIFN0YXRlVG9TZXQsIFJUX1JGX0NIQU5HRV9TT1VSQ0UgQ2hhbmdlU291cmNlKTsKIAotI2VuZGlmCitleHRlcm4gdm9pZCBQSFlfU2V0UkY4MjU2QmFuZHdpZHRoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgSFRfQ0hBTk5FTF9XSURUSCBCYW5kd2lkdGgpOworCitleHRlcm4gUlRfU1RBVFVTIFBIWV9SRjgyNTZfQ29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCitleHRlcm4gUlRfU1RBVFVTIHBoeV9SRjgyNTZfQ29uZmlnX1BhcmFGaWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCitleHRlcm4gdm9pZCBQSFlfU2V0UkY4MjU2Q0NLVHhQb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBwb3dlcmxldmVsKTsKK2V4dGVybiB2b2lkIFBIWV9TZXRSRjgyNTZPRkRNVHhQb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBwb3dlcmxldmVsKTsKKworZXh0ZXJuIGJvb2wgTWdudEFjdFNldF9SRl9TdGF0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCVJUX1JGX1BPV0VSX1NUQVRFIFN0YXRlVG9TZXQsCisJCQkJUlRfUkZfQ0hBTkdFX1NPVVJDRSBDaGFuZ2VTb3VyY2UpOworCisjZW5kaWYgLyogUlRMODIyNV9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFLmgKaW5kZXggNjFiNmYyNS4uZjRiZTljYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkUuaApAQCAtMzksNyArMzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlICJpZWVlODAyMTEuaCIKKyNpbmNsdWRlICJpZWVlODAyMTEvaWVlZTgwMjExLmgiCiAKIAogCkBAIC0xMDAzLDYgKzEwMDMsMTEgQEAKIAlpbnQgaXJxOwogCXNob3J0IGlycV9lbmFibGVkOwogCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlODAyMTE7CisjaWZkZWYgRU5BQkxFX0xQUworCWJvb2wgcHNfZm9yY2U7CisJYm9vbCBmb3JjZV9scHM7CisJYm9vbCBiZGlzYWJsZV9uaWM7CisjZW5kaWYKIAlib29sIGJlaW5nX2luaXRfYWRhcHRlcjsKIAl1OCBSZl9Nb2RlOwogCXNob3J0IGNhcmRfODE5MjsgLyogTzogcnRsODE5MiwgMTpydGw4MTg1IFYgQi9DLCAyOnJ0bDgxODUgViBEICovCkBAIC0xNDc3LDcgKzE0ODIsNyBAQAogdm9pZCB3cml0ZV9uaWNfZHdvcmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHgsdTMyIHkpOwogdm9pZCBmb3JjZV9wY2lfcG9zdGluZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAotdm9pZCBydGw4MTkyX3J0eF9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICopOwordm9pZCBydGw4MTkyX2hhbHRfYWRhcHRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHJlc2V0KTsKIHZvaWQgcnRsODE5Ml9yeF9lbmFibGUoc3RydWN0IG5ldF9kZXZpY2UgKik7CiB2b2lkIHJ0bDgxOTJfdHhfZW5hYmxlKHN0cnVjdCBuZXRfZGV2aWNlICopOwogCkBAIC0xNTEyLDUgKzE1MTcsMTkgQEAKICNpZmRlZiBFTkFCTEVfSVBTCiB2b2lkIElQU0VudGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogdm9pZCBJUFNMZWF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgSW5hY3RpdmVQc1dvcmtJdGVtQ2FsbGJhY2soc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIElQU0xlYXZlX3dxKHZvaWQgKmRhdGEpOwordm9pZCBpZWVlODAyMTFfaXBzX2xlYXZlX3dxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwordm9pZCBpZWVlODAyMTFfaXBzX2xlYXZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogI2VuZGlmCisjaWZkZWYgRU5BQkxFX0xQUwordm9pZCBMZWlzdXJlUFNFbnRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKK3ZvaWQgTGVpc3VyZVBTTGVhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisjZW5kaWYKKworYm9vbCBOaWNJRkVuYWJsZU5JQyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKK2Jvb2wgTmljSUZEaXNhYmxlTklDKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOworCit2b2lkIHJ0bDgxOTJfaXJxX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Cit2b2lkIFBIWV9TZXRSdGw4MTkyZVJmT2ZmKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2NvcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCmluZGV4IDBjYTVkOGIuLjg4NjEwNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfY29yZS5jCkBAIC02Niw3ICs2Niw3IEBACiAjZW5kaWYKIAogI2lmZGVmIEVOQUJMRV9ET1QxMUQKLSNpbmNsdWRlICJkb3QxMWQuaCIKKyNpbmNsdWRlICJpZWVlODAyMTEvZG90MTFkLmgiCiAjZW5kaWYKIAogLy9zZXQgaGVyZSB0byBvcGVuIHlvdXIgdHJhY2UgY29kZS4gLy9XQgpAQCAtNzUsNyArNzUsNyBAQAogCQkJLy8JQ09NUF9FUFJPTSAgIAl8CiAJCS8vCQlDT01QX1BIWQl8CiAJCS8vCQlDT01QX1JGCQl8Ci0JCQkJQ09NUF9GSVJNV0FSRQl8CisvLwkJCQlDT01QX0ZJUk1XQVJFCXwKIAkJCS8vCUNPTVBfVFJBQ0UJfAogCQkvLwkJQ09NUF9ET1dOCXwKIAkJLy8JCUNPTVBfU1dCVwl8CkBAIC0zNDMsNiArMzQzLDE0MSBAQAogCiAjZW5kaWYgLyogUlRMX0lPX01BUCAqLwogCit1OCBydGw4MTkyZV9hcF9zZWNfdHlwZShzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSkKK3sKKwkvL3N0cnVjdCByODE5Ml9wcml2KiBwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwkvL3N0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTgwMjExOworCisJc3RhdGljIHU4IGNjbXBfaWVbNF0gPSB7MHgwMCwweDUwLDB4ZjIsMHgwNH07CisJc3RhdGljIHU4IGNjbXBfcnNuX2llWzRdID0gezB4MDAsIDB4MGYsIDB4YWMsIDB4MDR9OworCWludCB3cGFfaWVfbGVuPSBpZWVlLT53cGFfaWVfbGVuOworCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRfZGF0YSogY3J5cHQ7CisJaW50IGVuY3J5cHQ7CisKKwljcnlwdCA9IGllZWUtPmNyeXB0W2llZWUtPnR4X2tleWlkeF07CisKKwllbmNyeXB0ID0gKGllZWUtPmN1cnJlbnRfbmV0d29yay5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1kpIHx8XAorCQkgIChpZWVlLT5ob3N0X2VuY3J5cHQgJiYgY3J5cHQgJiYgY3J5cHQtPm9wcyAmJiBcCisJCSAgICgwID09IHN0cmNtcChjcnlwdC0+b3BzLT5uYW1lLCJXRVAiKSkpOworCisJLyogc2ltcGx5IGp1ZGdlICAqLworCWlmKGVuY3J5cHQgJiYgKHdwYV9pZV9sZW4gPT0gMCkpIHsKKwkJLy8gd2VwIGVuY3J5cHRpb24sIG5vIE4gbW9kZSBzZXR0aW5nICovCisJCXJldHVybiBTRUNfQUxHX1dFUDsKKwl9IGVsc2UgaWYoKHdwYV9pZV9sZW4gIT0gMCkpIHsKKwkJLy8gcGFyc2UgcGFpcndpc2Uga2V5IHR5cGUgKi8KKwkJaWYgKCgoaWVlZS0+d3BhX2llWzBdID09IDB4ZGQpICYmICghbWVtY21wKCYoaWVlZS0+d3BhX2llWzE0XSksY2NtcF9pZSw0KSkpIHx8CisJCQkJKChpZWVlLT53cGFfaWVbMF0gPT0gMHgzMCkgJiYgKCFtZW1jbXAoJmllZWUtPndwYV9pZVsxMF0sY2NtcF9yc25faWUsIDQpKSkpCisJCQlyZXR1cm4gU0VDX0FMR19DQ01QOworCQllbHNlCisJCQlyZXR1cm4gU0VDX0FMR19US0lQOworCX0gZWxzZSB7CisJCXJldHVybiBTRUNfQUxHX05PTkU7CisJfQorfQorCit2b2lkCitydGw4MTkyZV9TZXRId1JlZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LHU4IHZhcmlhYmxlLHU4KiB2YWwpCit7CisJc3RydWN0IHI4MTkyX3ByaXYqIHByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCisJc3dpdGNoKHZhcmlhYmxlKQorCXsKKworCQljYXNlIEhXX1ZBUl9CU1NJRDoKKwkJCXdyaXRlX25pY19kd29yZChkZXYsIEJTU0lEUiwgKCh1MzIqKSh2YWwpKVswXSk7CisJCQl3cml0ZV9uaWNfd29yZChkZXYsIEJTU0lEUisyLCAoKHUxNiopKHZhbCsyKSlbMF0pOworCQlicmVhazsKKworCQljYXNlIEhXX1ZBUl9NRURJQV9TVEFUVVM6CisJCXsKKwkJCVJUX09QX01PREUJT3BNb2RlID0gKigoUlRfT1BfTU9ERSAqKSh2YWwpKTsKKwkJCS8vTEVEX0NUTF9NT0RFCUxlZEFjdGlvbiA9IExFRF9DVExfTk9fTElOSzsKKwkJCXU4CQlidE1zciA9IHJlYWRfbmljX2J5dGUoZGV2LCBNU1IpOworCisJCQlidE1zciAmPSAweGZjOworCisJCQlzd2l0Y2goT3BNb2RlKQorCQkJeworCQkJY2FzZSBSVF9PUF9NT0RFX0lORlJBU1RSVUNUVVJFOgorCQkJCWJ0TXNyIHw9IE1TUl9JTkZSQTsKKwkJCQkvL0xlZEFjdGlvbiA9IExFRF9DVExfTElOSzsKKwkJCQlicmVhazsKKworCQkJY2FzZSBSVF9PUF9NT0RFX0lCU1M6CisJCQkJYnRNc3IgfD0gTVNSX0FESE9DOworCQkJCS8vIGxlZCBsaW5rIHNldCBzZXBlcmF0ZQorCQkJCWJyZWFrOworCisJCQljYXNlIFJUX09QX01PREVfQVA6CisJCQkJYnRNc3IgfD0gTVNSX0FQOworCQkJCS8vTGVkQWN0aW9uID0gTEVEX0NUTF9MSU5LOworCQkJCWJyZWFrOworCisJCQlkZWZhdWx0OgorCQkJCWJ0TXNyIHw9IE1TUl9OT0xJTks7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCXdyaXRlX25pY19ieXRlKGRldiwgTVNSLCBidE1zcik7CisKKwkJCS8vcHJpdi0+aWVlZTgwMjExLT5MZWRDb250cm9sSGFuZGxlcihkZXYsIExlZEFjdGlvbik7CisJCX0KKwkJYnJlYWs7CisKKwkJY2FzZSBIV19WQVJfQ0VDSEtfQlNTSUQ6CisJCXsKKwkJCXUzMglSZWdSQ1IsIFR5cGU7CisKKwkJCVR5cGUgPSAoKHU4KikodmFsKSlbMF07CisJCQkvL3ByaXYtPmllZWU4MDIxMS0+R2V0SHdSZWdIYW5kbGVyKGRldiwgSFdfVkFSX1JDUiwgKHU4KikoJlJlZ1JDUikpOworCQkJUmVnUkNSID0gcmVhZF9uaWNfZHdvcmQoZGV2LFJDUik7CisJCQlwcml2LT5SZWNlaXZlQ29uZmlnID0gUmVnUkNSOworCisJCQlpZiAoVHlwZSA9PSB0cnVlKQorCQkJCVJlZ1JDUiB8PSAoUkNSX0NCU1NJRCk7CisJCQllbHNlIGlmIChUeXBlID09IGZhbHNlKQorCQkJCVJlZ1JDUiAmPSAoflJDUl9DQlNTSUQpOworCisJCQkvL3ByaXYtPmllZWU4MDIxMS0+U2V0SHdSZWdIYW5kbGVyKCBkZXYsIEhXX1ZBUl9SQ1IsICh1OCopKCZSZWdSQ1IpICk7CisJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBSQ1IsUmVnUkNSKTsKKwkJCXByaXYtPlJlY2VpdmVDb25maWcgPSBSZWdSQ1I7CisKKwkJfQorCQlicmVhazsKKworCQljYXNlIEhXX1ZBUl9TTE9UX1RJTUU6CisJCXsKKwkJCS8vUFNUQV9RT1MJcFN0YVFvcyA9IEFkYXB0ZXItPk1nbnRJbmZvLnBTdGFRb3M7CisJCQkvL0FDX0NPRElORwllQUNJOworCisJCQlwcml2LT5zbG90X3RpbWUgPSB2YWxbMF07CisJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIFNMT1RfVElNRSwgdmFsWzBdKTsKKworCQl9CisJCWJyZWFrOworCisJCWNhc2UgSFdfVkFSX0FDS19QUkVBTUJMRToKKwkJeworCQkJdTMyIHJlZ1RtcCA9IDA7CisJCQlwcml2LT5zaG9ydF9wcmVhbWJsZSA9IChib29sKSgqKHU4Kil2YWwgKTsKKwkJCXJlZ1RtcCA9IHByaXYtPmJhc2ljX3JhdGU7CisJCQlpZiAocHJpdi0+c2hvcnRfcHJlYW1ibGUpCisJCQkJcmVnVG1wIHw9IEJSU1JfQWNrU2hvcnRQbWI7CisJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBSUlNSLCByZWdUbXApOworCQl9CisJCWJyZWFrOworCisJCWNhc2UgSFdfVkFSX0NQVV9SU1Q6CisJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBDUFVfR0VOLCAoKHUzMiopKHZhbCkpWzBdKTsKKwkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCit9CisKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIApAQCAtMzY1LDExICs1MDAsNiBAQAogLy92b2lkIHJ0bDgxOTJfcnFfdHhfYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiAKIHZvaWQgd2F0Y2hfZG9nX3RpbWVyX2NhbGxiYWNrKHVuc2lnbmVkIGxvbmcgZGF0YSk7Ci0jaWZkZWYgRU5BQkxFX0lQUwotdm9pZCBJUFNFbnRlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXZvaWQgSVBTTGVhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci12b2lkIEluYWN0aXZlUHNXb3JrSXRlbUNhbGxiYWNrKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotI2VuZGlmCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1QUk9DRlMgU1RVRkYtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTcwNyw3ICs4MzcsNyBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHJ0bDgxOTJfaXJxX2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3ZvaWQgcnRsODE5Ml9pcnFfZGlzYWJsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gKHN0cnVjdCByODE5Ml9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKIApAQCAtNzE3LDYgKzg0Nyw3IEBACiB9CiAKIAorI2lmIDAKIHN0YXRpYyB2b2lkIHJ0bDgxOTJfc2V0X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldixpbnQgbW9kZSkKIHsKIAl1OCBlY21kOwpAQCAtNzI3LDcgKzg1OCw3IEBACiAJZWNtZD1lY21kICZ+ICgxPDxFUFJPTV9DS19TSElGVCk7CiAJd3JpdGVfbmljX2J5dGUoZGV2LCBFUFJPTV9DTUQsIGVjbWQpOwogfQotCisjZW5kaWYKIAogdm9pZCBydGw4MTkyX3VwZGF0ZV9tc3Ioc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTg2MSw3ICs5OTIsNyBAQAogICAgIHJpbmctPmRlc2MgPSBOVUxMOwogfQogCi0KKyNpZiAwCiBzdGF0aWMgdm9pZCBydGw4MTkyX2JlYWNvbl9kaXNhYmxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTkyX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOwpAQCAtODczLDM4ICsxMDA0LDExNiBAQAogCXJlZyAmPSB+KElNUl9CY25JbnQgfCBJTVJfQmNuSW50IHwgSU1SX1RCRE9LIHwgSU1SX1RCREVSKTsKIAl3cml0ZV9uaWNfZHdvcmQocHJpdi0+aWVlZTgwMjExLT5kZXYsIElOVEFfTUFTSywgcmVnKTsKIH0KKyNlbmRpZgogCi12b2lkIHJ0bDgxOTJfcnR4X2Rpc2FibGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3ZvaWQgUEhZX1NldFJ0bDgxOTJlUmZPZmYoc3RydWN0IG5ldF9kZXZpY2UqIGRldgkpCiB7Ci0JdTggY21kOworCS8vc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCisJLy9kaXNhYmxlIFJGLUNoaXAgQS9CCisJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9YQV9SRkludGVyZmFjZU9FLCBCSVQ0LCAweDApOworCS8vYW5hbG9nIHRvIGRpZ2l0YWwgb2ZmLCBmb3IgcG93ZXIgc2F2ZQorCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyNCwgMHgzMDAsIDB4MCk7CisJLy9kaWdpdGFsIHRvIGFuYWxvZyBvZmYsIGZvciBwb3dlciBzYXZlCisJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIxLCAweDE4LCAweDApOworCS8vcnggYW50ZW5uYSBvZmYKKwlydGw4MTkyX3NldEJCcmVnKGRldiwgck9GRE0wX1RSeFBhdGhFbmFibGUsIDB4ZiwgMHgwKTsKKwkvL3J4IGFudGVubmEgb2ZmCisJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJPRkRNMV9UUnhQYXRoRW5hYmxlLCAweGYsIDB4MCk7CisJLy9hbmFsb2cgdG8gZGlnaXRhbCBwYXJ0MiBvZmYsIGZvciBwb3dlciBzYXZlCisJcnRsODE5Ml9zZXRCQnJlZyhkZXYsIHJGUEdBMF9BbmFsb2dQYXJhbWV0ZXIxLCAweDYwLCAweDApOworCXJ0bDgxOTJfc2V0QkJyZWcoZGV2LCByRlBHQTBfQW5hbG9nUGFyYW1ldGVyMSwgMHg0LCAweDApOworCS8vIEFuYWxvZyBwYXJhbWV0ZXIhIUNoYW5nZSBiaWFzIGFuZCBMYnVzIGNvbnRyb2wuCisJd3JpdGVfbmljX2J5dGUoZGV2LCBBTkFQQVJfRk9SXzgxOTJQY2lFLCAweDA3KTsKKworfQorCit2b2lkIHJ0bDgxOTJfaGFsdF9hZGFwdGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgcmVzZXQpCit7CisJLy91OCAJY21kOwogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKLSAgICAgICAgaW50IGk7CisJaW50IGk7CisJdTgJT3BNb2RlOworCXU4CXUxYlRtcDsKKwl1MzIJdWxSZWdSZWFkOwogCisJT3BNb2RlID0gUlRfT1BfTU9ERV9OT19MSU5LOworCXByaXYtPmllZWU4MDIxMS0+U2V0SHdSZWdIYW5kbGVyKGRldiwgSFdfVkFSX01FRElBX1NUQVRVUywgJk9wTW9kZSk7CisKKyNpZiAxCisJaWYoIXByaXYtPmllZWU4MDIxMS0+YlN1cHBvcnRSZW1vdGVXYWtlVXApCisJeworCQl1MWJUbXAgPSAweDA7CS8vIGRpc2FibGUgdHgvcnguIEluIDgxODUgd2Ugd3JpdGUgMHgxMCAoUmVzZXQgYml0KSwgYnV0IGhlcmUgd2UgbWFrZSByZWZlcmVuY2UgdG8gV01BQyBhbmQgd2lydGUgMHgwLiAyMDA2LjExLjIxIEVtaWx5CisJCS8vcHJpdi0+aWVlZTgwMjExLT5TZXRId1JlZ0hhbmRsZXIoZGV2LCBIV19WQVJfQ09NTUFORCwgJnUxYlRtcCApOwkvLyBVc2luZyBIV19WQVJfQ09NTUFORCBpbnN0ZWFkIG9mIHdyaXRpbmcgQ01EUiBkaXJlY3RseS4gUmV3cml0ZWQgYnkgQW5uaWUsIDIwMDYtMDQtMDcuCisJCXdyaXRlX25pY19ieXRlKGRldiwgQ01EUiwgdTFiVG1wKTsKKwl9CisjZWxzZQogCWNtZD1yZWFkX25pY19ieXRlKGRldixDTURSKTsKLS8vCWlmKCFwcml2LT5pZWVlODAyMTEtPmJTdXBwb3J0UmVtb3RlV2FrZVVwKSB7Ci0JCXdyaXRlX25pY19ieXRlKGRldiwgQ01EUiwgY21kICZ+IFwKLQkJCQkoQ1JfVEV8Q1JfUkUpKTsKLS8vCX0KLQlmb3JjZV9wY2lfcG9zdGluZyhkZXYpOwotCW1kZWxheSgzMCk7CisJd3JpdGVfbmljX2J5dGUoZGV2LCBDTURSLCBjbWQgJn4gKENSX1RFfENSX1JFKSk7CisjZW5kaWYKIAotICAgICAgICBmb3IoaSA9IDA7IGkgPCBNQVhfUVVFVUVfU0laRTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgc2tiX3F1ZXVlX3B1cmdlKCZwcml2LT5pZWVlODAyMTEtPnNrYl93YWl0USBbaV0pOwotICAgICAgICB9Ci0gICAgICAgIGZvcihpID0gMDsgaSA8IE1BWF9RVUVVRV9TSVpFOyBpKyspIHsKLSAgICAgICAgICAgICAgICBza2JfcXVldWVfcHVyZ2UoJnByaXYtPmllZWU4MDIxMS0+c2tiX2FnZ1EgW2ldKTsKLSAgICAgICAgfQorCW1kZWxheSgyMCk7CiAKKwlpZighcmVzZXQpCisJeworCQkvL1BsYXRmb3JtU3RhbGxFeGVjdXRpb24oMTUwMDAwKTsKKwkJbWRlbGF5KDE1MCk7CisKKyNpZmRlZiBSVEw4MTkyRQorCQkJcHJpdi0+Ykh3UmZPZmZBY3Rpb24gPSAyOworI2VuZGlmCisKKwkJLy8KKwkJLy8gQ2FsbCBNZ250QWN0U2V0X1JGX1N0YXRlIGluc3RlYWQgdG8gcHJldmVudCBSRiBjb25maWcgcmFjZSBjb25kaXRpb24uCisJCS8vIEJ5IEJydWNlLCAyMDA4LTAxLTE3LgorCQkvLworCQlpZighcHJpdi0+aWVlZTgwMjExLT5iU3VwcG9ydFJlbW90ZVdha2VVcCkKKwkJeworCQkJLy9NZ250QWN0U2V0X1JGX1N0YXRlKEFkYXB0ZXIsIGVSZk9mZiwgUkZfQ0hBTkdFX0JZX0lOSVQpOworCQkJLy9NZ250QWN0U2V0X1JGX1N0YXRlKEFkYXB0ZXIsIGVSZk9mZiwgQWRhcHRlci0+TWdudEluZm8uUmZPZmZSZWFzb24pOworCQkJLy9pZihBZGFwdGVyLT5IYXJkd2FyZVR5cGUgPT0gSEFSRFdBUkVfVFlQRV9SVEw4MTkwUCkKKworCQkJUEhZX1NldFJ0bDgxOTJlUmZPZmYoZGV2KTsKKworCQkJLy8gMjAwNi4xMS4zMC4gU3lzdGVtIHJlc2V0IGJpdAorCQkJLy9wcml2LT5pZWVlODAyMTEtPkdldEh3UmVnSGFuZGxlcihkZXYsIEhXX1ZBUl9DUFVfUlNULCAodTMyKikoJnVsUmVnUmVhZCkgKTsKKwkJCXVsUmVnUmVhZCA9IHJlYWRfbmljX2R3b3JkKGRldixDUFVfR0VOKTsKKwkJCXVsUmVnUmVhZHw9Q1BVX0dFTl9TWVNURU1fUkVTRVQ7CisJCQkvL3ByaXYtPmllZWU4MDIxMS0+U2V0SHdSZWdIYW5kbGVyKGRldiwgSFdfVkFSX0NQVV9SU1QsICZ1bFJlZ1JlYWQpOworCQkJd3JpdGVfbmljX2R3b3JkKGRldixDUFVfR0VOLCB1bFJlZ1JlYWQpOworCQl9CisJIAllbHNlCisJCXsKKwkJCS8vMjAwOC4wNi4wMyBmb3IgV09MCisJCQl3cml0ZV9uaWNfZHdvcmQoZGV2LCBXRkNSQzAsIDB4ZmZmZmZmZmYpOworCQkJd3JpdGVfbmljX2R3b3JkKGRldiwgV0ZDUkMxLCAweGZmZmZmZmZmKTsKKwkJCXdyaXRlX25pY19kd29yZChkZXYsIFdGQ1JDMiwgMHhmZmZmZmZmZik7CisKKwkJCS8vV3JpdGUgUE1SIHJlZ2lzdGVyCisJCQl3cml0ZV9uaWNfYnl0ZShkZXYsIFBNUiwgMHg1KTsKKwkJCS8vRGlzYWJsZSB0eCwgZW5hbmJsZSByeAorCQkJd3JpdGVfbmljX2J5dGUoZGV2LCBNYWNCbGtDdHJsLCAweGEpOworCQl9CisJfQorCisJZm9yKGkgPSAwOyBpIDwgTUFYX1FVRVVFX1NJWkU7IGkrKykgeworCQlza2JfcXVldWVfcHVyZ2UoJnByaXYtPmllZWU4MDIxMS0+c2tiX3dhaXRRIFtpXSk7CisJfQorCWZvcihpID0gMDsgaSA8IE1BWF9RVUVVRV9TSVpFOyBpKyspIHsKKwkJc2tiX3F1ZXVlX3B1cmdlKCZwcml2LT5pZWVlODAyMTEtPnNrYl9hZ2dRIFtpXSk7CisJfQogCiAJc2tiX3F1ZXVlX3B1cmdlKCZwcml2LT5za2JfcXVldWUpOwogCXJldHVybjsKIH0KIAorI2lmIDAKIHN0YXRpYyB2b2lkIHJ0bDgxOTJfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICAgICBydGw4MTkyX2lycV9kaXNhYmxlKGRldik7CiAgICAgcHJpbnRrKCJUaGlzIGlzIFJUTDgxOXhQIFJlc2V0IHByb2NlZHVyZVxuIik7CiB9CisjZW5kaWYKIAogc3RhdGljIHUxNiBydGxfcmF0ZVtdID0gezEwLDIwLDU1LDExMCw2MCw5MCwxMjAsMTgwLDI0MCwzNjAsNDgwLDU0MH07CiBpbmxpbmUgdTE2IHJ0bDgxOTJfcmF0ZTJyYXRlKHNob3J0IHJhdGUpCkBAIC05NTQsNiArMTE2MywxMiBAQAogCS8qIHNoYWxsIG5vdCBiZSByZWZlcnJlZCBieSBjb21tYW5kIHBhY2tldCAqLwogCWFzc2VydChxdWV1ZV9pbmRleCAhPSBUWENNRF9RVUVVRSk7CiAKKwlpZigocHJpdi0+Ykh3UmFkaW9PZmYgPT0gdHJ1ZSl8fCghcHJpdi0+dXApKQorCXsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCXJldHVybjsKKwl9CisKIAkvL3NwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9sb2NrLGZsYWdzKTsKIAogICAgICAgICBtZW1jcHkoKHVuc2lnbmVkIGNoYXIgKikoc2tiLT5jYiksJmRldixzaXplb2YoZGV2KSk7CkBAIC05OTYsNiArMTIxMSwxMyBAQAogICAgICAgICBjYl9kZXNjICp0Y2JfZGVzYyA9IChjYl9kZXNjICopKHNrYi0+Y2IgKyBNQVhfREVWX0FERFJfU0laRSk7CiAgICAgICAgIHU4IHF1ZXVlX2luZGV4ID0gdGNiX2Rlc2MtPnF1ZXVlX2luZGV4OwogCisgICAgICAgIGlmKHF1ZXVlX2luZGV4ICE9IFRYQ01EX1FVRVVFKXsKKwkJaWYoKHByaXYtPmJId1JhZGlvT2ZmID09IHRydWUpfHwoIXByaXYtPnVwKSkKKwkJeworICAgICAgICAgICAgICAgCSAJa2ZyZWVfc2tiKHNrYik7CisgICAgICAgICAgICAgICAgCXJldHVybiAwOworICAgICAgICAgICAgCX0KKyAgICAgICAgfQogCiAJLy9zcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfbG9jayxmbGFncyk7CiAKQEAgLTEzNzksNiArMTYwMSwxNSBAQAogICAgIHU4KiAgIHBkYV9hZGRyID0gTlVMTDsKICAgICBpbnQgICBpZHg7CiAKKyAgICBpZihwcml2LT5iZGlzYWJsZV9uaWMpeworICAgICAgIAlSVF9UUkFDRShDT01QX0VSUiwiJXM6IEVSUiEhIE5pYyBpcyBkaXNhYmxlZCEgQ2FuJ3QgdHggcGFja2V0IGxlbj0lZCBxaWR4PSVkISEhXG4iLCBfX0ZVTkNUSU9OX18sIHNrYi0+bGVuLCB0Y2JfZGVzYy0+cXVldWVfaW5kZXgpOworCQlyZXR1cm4gc2tiLT5sZW47CisgICAgfQorCisjaWZkZWYgRU5BQkxFX0xQUworCXByaXYtPmllZWU4MDIxMS0+YkF3YWtlUGt0U2VudCA9IHRydWU7CisjZW5kaWYKKwogICAgIG1hcHBpbmcgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuLCBQQ0lfRE1BX1RPREVWSUNFKTsKICAgICAvKiBjb2xsZWN0IHRoZSB0eCBwYWNrZXRzIHN0YXRpdGNzICovCiAgICAgcGRhX2FkZHIgPSAoKHU4Kilza2ItPmRhdGEpICsgc2l6ZW9mKFRYX0ZXSU5GT184MTkwUENJKTsKQEAgLTE0ODEsNiArMTcxMiw3IEBACiAgICAgaWYoKHBkZXNjLT5PV04gPT0gMSkgJiYgKHRjYl9kZXNjLT5xdWV1ZV9pbmRleCAhPSBCRUFDT05fUVVFVUUpKSB7CiAJICAgIFJUX1RSQUNFKENPTVBfRVJSLCJObyBtb3JlIFRYIGRlc2NAJWQsIHJpbmctPmlkeCA9ICVkLGlkeCA9ICVkLCV4IiwgXAogCQkJICAgIHRjYl9kZXNjLT5xdWV1ZV9pbmRleCxyaW5nLT5pZHgsIGlkeCxza2ItPmxlbik7CisJICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmlycV90aF9sb2NrLGZsYWdzKTsKIAkgICAgcmV0dXJuIHNrYi0+bGVuOwogICAgIH0KIApAQCAtMTU3NSw3ICsxODA3LDcgQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICBwcml2LT5yeF9idWZbaV0gPSBza2I7CiAgICAgICAgIG1hcHBpbmcgPSAoZG1hX2FkZHJfdCAqKXNrYi0+Y2I7Ci0gICAgICAgICptYXBwaW5nID0gcGNpX21hcF9zaW5nbGUocHJpdi0+cGRldiwgc2tiLT50YWlsLC8vc2tiX3RhaWxfcG9pbnRlcihza2IpLAorICAgICAgICAqbWFwcGluZyA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIHNrYl90YWlsX3BvaW50ZXIoc2tiKSwKICAgICAgICAgICAgICAgICBwcml2LT5yeGJ1ZmZlcnNpemUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAKICAgICAgICAgZW50cnktPkJ1ZmZlckFkZHJlc3MgPSBjcHVfdG9fbGUzMigqbWFwcGluZyk7CkBAIC0xNzc5LDcgKzIwMTEsNyBAQAogCQkJCSgoKHUzMikocW9zX3BhcmFtZXRlcnMtPmN3X21heFtpXSkpPDwgQUNfUEFSQU1fRUNXX01BWF9PRkZTRVQpfAogCQkJCSgoKHUzMikocW9zX3BhcmFtZXRlcnMtPmN3X21pbltpXSkpPDwgQUNfUEFSQU1fRUNXX01JTl9PRkZTRVQpfAogCQkJCSgodTMyKXUxYkFJRlMgPDwgQUNfUEFSQU1fQUlGU19PRkZTRVQpKTsKLQkJcHJpbnRrKCI9PT0+dTRiQWNQYXJhbToleCwgIiwgdTRiQWNQYXJhbSk7CisJCS8vcHJpbnRrKCI9PT0+dTRiQWNQYXJhbToleCwgIiwgdTRiQWNQYXJhbSk7CiAJCXdyaXRlX25pY19kd29yZChkZXYsIFdEQ0FQQVJBX0FERFtpXSwgdTRiQWNQYXJhbSk7CiAJCS8vd3JpdGVfbmljX2R3b3JkKGRldiwgV0RDQVBBUkFfQUREW2ldLCAweDAwNWU0MzMyKTsKIAl9CkBAIC0xOTY0LDExICsyMTk2LDI0IEBACiAJd3JpdGVfbmljX2J5dGUoZGV2LCBVRldQLCAxKTsKIH0KIAorI2lmIDAKIHN0YXRpYyB1OCBjY21wX2llWzRdID0gezB4MDAsMHg1MCwweGYyLDB4MDR9Owogc3RhdGljIHU4IGNjbXBfcnNuX2llWzRdID0gezB4MDAsIDB4MGYsIDB4YWMsIDB4MDR9OworI2VuZGlmCisKIHN0YXRpYyBib29sIEdldE5tb2RlU3VwcG9ydEJ5U2VjQ2ZnODE5MFBjaShzdHJ1Y3QgbmV0X2RldmljZSpkZXYpCiB7CiAjaWYgMQorCisJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gcHJpdi0+aWVlZTgwMjExOworCWlmIChpZWVlLT5ydGxsaWJfYXBfc2VjX3R5cGUgJiYKKwkgICAoaWVlZS0+cnRsbGliX2FwX3NlY190eXBlKGllZWUpJihTRUNfQUxHX1dFUHxTRUNfQUxHX1RLSVApKSkgeworCQlyZXR1cm4gZmFsc2U7CisJfSBlbHNlIHsKKwkJcmV0dXJuIHRydWU7CisJfQorI2Vsc2UKIAlzdHJ1Y3QgcjgxOTJfcHJpdiogcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqIGllZWUgPSBwcml2LT5pZWVlODAyMTE7CiAgICAgICAgIGludCB3cGFfaWVfbGVuPSBpZWVlLT53cGFfaWVfbGVuOwpAQCAtMTk5NSwxOCArMjI0MCw2IEBACiAJCXJldHVybiB0cnVlOwogCX0KIAotI2lmIDAKLSAgICAgICAgLy9JbiBoZXJlIHdlIGRpc2N1c3Mgd2l0aCBTRDQgRGF2aWQuIEhlIHRoaW5rIHdlIHN0aWxsIGNhbiBzZW5kIFRLSVAgaW4gYnJvYWRjYXN0IGdyb3VwIGtleSBpbiBNQ1MgcmF0ZS4KLSAgICAgICAgLy9XZSBjYW4ndCBmb3JjZSBpbiBHIG1vZGUgaWYgUGFpcndpZSBrZXkgaXMgQUVTIGFuZCBncm91cCBrZXkgaXMgVEtJUAotICAgICAgICBpZigocFNlY0luZm8tPkdyb3VwRW5jQWxnb3JpdGhtID09IFdFUDEwNF9FbmNyeXB0aW9uKSB8fCAocFNlY0luZm8tPkdyb3VwRW5jQWxnb3JpdGhtID09IFdFUDQwX0VuY3J5cHRpb24pICB8fAotICAgICAgICAgICAocFNlY0luZm8tPlBhaXJ3aXNlRW5jQWxnb3JpdGhtID09IFdFUDEwNF9FbmNyeXB0aW9uKSB8fAotICAgICAgICAgICAocFNlY0luZm8tPlBhaXJ3aXNlRW5jQWxnb3JpdGhtID09IFdFUDQwX0VuY3J5cHRpb24pIHx8IChwU2VjSW5mby0+UGFpcndpc2VFbmNBbGdvcml0aG0gPT0gVEtJUF9FbmNyeXB0aW9uKSkKLSAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiAgZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotI2VuZGlmCiAJcmV0dXJuIHRydWU7CiAjZW5kaWYKIH0KQEAgLTIwODAsNyArMjMxMyw3IEBACiAJCQl3aXJlbGVzc19tb2RlID0gV0lSRUxFU1NfTU9ERV9COwogCQl9CiAJfQotI2lmZGVmIFRPX0RPX0xJU1QgLy8vLyBUT0RPOiB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3Qgd29yayB3ZWxsIGF0IHRoaXMgdGltZSwgd2Ugc2hvdWQgd2FpdCBmb3IgRlBHQQorI2lmZGVmIFRPX0RPX0xJU1QgLy8vLyBUT0RPOiB0aGlzIGZ1bmN0aW9uIGRvZXNuJ3Qgd29yayB3ZWxsIGF0IHRoaXMgdGltZSwgd2Ugc2hvdWxkIHdhaXQgZm9yIEZQR0EKIAlBY3RVcGRhdGVDaGFubmVsQWNjZXNzU2V0dGluZyggcEFkYXB0ZXIsIHBIYWxEYXRhLT5DdXJyZW50V2lyZWxlc3NNb2RlLCAmcEFkYXB0ZXItPk1nbnRJbmZvLkluZm84MTg1LkNoYW5uZWxBY2Nlc3NTZXR0aW5nICk7CiAjZW5kaWYKIAlwcml2LT5pZWVlODAyMTEtPm1vZGUgPSB3aXJlbGVzc19tb2RlOwpAQCAtMjEyNyw3ICsyMzYwLDE5IEBACiB9CiBzdGF0aWMgdm9pZCBydGw4MTkyX2h3X3NsZWVwX2Rvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlSVF9UUkFDRShDT01QX1BPV0VSLCAiJXMoKT09PT09PT09PT09PT5jb21lIHRvIHNsZWVwIGRvd25cbiIsIF9fRlVOQ1RJT05fXyk7CisJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJmX3BzX2xvY2ssZmxhZ3MpOworCWlmIChwcml2LT5SRkNoYW5nZUluUHJvZ3Jlc3MpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmZfcHNfbG9jayxmbGFncyk7CisJCVJUX1RSQUNFKENPTVBfUkYsICJydGw4MTkyX2h3X3NsZWVwX2Rvd24oKTogUkYgQ2hhbmdlIGluIHByb2dyZXNzISBcbiIpOworCQlwcmludGsoInJ0bDgxOTJfaHdfc2xlZXBfZG93bigpOiBSRiBDaGFuZ2UgaW4gcHJvZ3Jlc3MhXG4iKTsKKwkJcmV0dXJuOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yZl9wc19sb2NrLGZsYWdzKTsKKwkvL1JUX1RSQUNFKENPTVBfUFMsICIlcygpPT09PT09PT09PT09PmNvbWUgdG8gc2xlZXAgZG93blxuIiwgX19GVU5DVElPTl9fKTsKKwogCU1nbnRBY3RTZXRfUkZfU3RhdGUoZGV2LCBlUmZTbGVlcCwgUkZfQ0hBTkdFX0JZX1BTKTsKIH0KIHN0YXRpYyB2b2lkIHJ0bDgxOTJfaHdfc2xlZXBfd3EgKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKQEAgLTIxMzgsMjEgKzIzODMsMjkgQEAKICAgICAgICAgc3RydWN0IGRlbGF5ZWRfd29yayAqZHdvcmsgPSBjb250YWluZXJfb2Yod29yayxzdHJ1Y3QgZGVsYXllZF93b3JrLHdvcmspOwogICAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSAqaWVlZSA9IGNvbnRhaW5lcl9vZihkd29yayxzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSxod19zbGVlcF93cSk7CiAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpZWVlLT5kZXY7Ci0JLy9wcmludGsoIj09PT09PT09PT4lcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCiAgICAgICAgIHJ0bDgxOTJfaHdfc2xlZXBfZG93bihkZXYpOwogfQotLy8JcHJpbnRrKCJkZXYgaXMgJWRcbiIsZGV2KTsKLS8vCXByaW50aygiJiomKF4qKCYoJj09PT09PT09PT4lcygpXG4iLCBfX0ZVTkNUSU9OX18pOworCiBzdGF0aWMgdm9pZCBydGw4MTkyX2h3X3dha2V1cChzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQogewotLy8JdTMyIGZsYWdzID0gMDsKKwlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CiAKLS8vCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5wc19sb2NrLGZsYWdzKTsKLQlSVF9UUkFDRShDT01QX1BPV0VSLCAiJXMoKT09PT09PT09PT09PT5jb21lIHRvIHdha2UgdXBcbiIsIF9fRlVOQ1RJT05fXyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJmX3BzX2xvY2ssZmxhZ3MpOworCWlmIChwcml2LT5SRkNoYW5nZUluUHJvZ3Jlc3MpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cmZfcHNfbG9jayxmbGFncyk7CisJCVJUX1RSQUNFKENPTVBfUkYsICJydGw4MTkyX2h3X3dha2V1cCgpOiBSRiBDaGFuZ2UgaW4gcHJvZ3Jlc3MhIFxuIik7CisJCXByaW50aygicnRsODE5Ml9od193YWtldXAoKTogUkYgQ2hhbmdlIGluIHByb2dyZXNzISBzY2hlZHVsZSB3YWtlIHVwIHRhc2sgYWdhaW5cbiIpOworCQlxdWV1ZV9kZWxheWVkX3dvcmsocHJpdi0+aWVlZTgwMjExLT53cSwmcHJpdi0+aWVlZTgwMjExLT5od193YWtldXBfd3EsTVNFQ1MoMTApKTsvL1Bvd2VyU2F2ZSBpcyBub3Qgc3VwcG9ydGVkIGlmIGtlcm5lbCB2ZXJzaW9uIGlzIGJlbG93IDIuNi4yMAorCQlyZXR1cm47CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnJmX3BzX2xvY2ssZmxhZ3MpOworCisJLy9SVF9UUkFDRShDT01QX1BTLCAiJXMoKT09PT09PT09PT09PT5jb21lIHRvIHdha2UgdXBcbiIsIF9fRlVOQ1RJT05fXyk7CiAJTWdudEFjdFNldF9SRl9TdGF0ZShkZXYsIGVSZk9uLCBSRl9DSEFOR0VfQllfUFMpOwotCS8vRklYTUU6IHdpbGwgd2Ugc2VuZCBwYWNrYWdlIHN0b3JlZCB3aGlsZSBuaWMgaXMgc2xlZXA/Ci0vLwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5wc19sb2NrLGZsYWdzKTsKIH0KKwogdm9pZCBydGw4MTkyX2h3X3dha2V1cF93cSAoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogLy8Jc3RydWN0IHI4MTgwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHI4MTgwX3ByaXYsIHdhdGNoX2RvZ193cSk7CkBAIC0yMTY5LDcgKzI0MjIsNiBAQAogI2RlZmluZSBNQVhfU0xFRVBfVElNRSAxMDAwMAogc3RhdGljIHZvaWQgcnRsODE5Ml9od190b19zbGVlcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgdGgsIHUzMiB0bCkKIHsKLQogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAogCXUzMiByYiA9IGppZmZpZXM7CkBAIC0yMTc3LDU4ICsyNDI5LDU1IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cHNfbG9jayxmbGFncyk7CiAKLQkvKiBXcml0aW5nIEhXIHJlZ2lzdGVyIHdpdGggMCBlcXVhbHMgdG8gZGlzYWJsZQotCSAqIHRoZSB0aW1lciwgdGhhdCBpcyBub3QgcmVhbGx5IHdoYXQgd2Ugd2FudAotCSAqLwotCXRsIC09IE1TRUNTKDQrMTYrNyk7CisJLy8gV3JpdGluZyBIVyByZWdpc3RlciB3aXRoIDAgZXF1YWxzIHRvIGRpc2FibGUKKwkvLyB0aGUgdGltZXIsIHRoYXQgaXMgbm90IHJlYWxseSB3aGF0IHdlIHdhbnQKKwkvLworCXRsIC09IE1TRUNTKDgrMTYrNyk7CiAKLQkvL2lmKHRsID09IDApIHRsID0gMTsKLQotCS8qIEZJWE1FIEhBQ0sgRklYTUUgSEFDSyAqLwotLy8JZm9yY2VfcGNpX3Bvc3RpbmcoZGV2KTsKLQkvL21kZWxheSgxKTsKLQotLy8JcmIgPSByZWFkX25pY19kd29yZChkZXYsIFRTRlRSKTsKLQotCS8qIElmIHRoZSBpbnRlcnZhbCBpbiB3aXRjaCB3ZSBhcmUgcmVxdWVzdGVkIHRvIHNsZWVwIGlzIHRvbwotCSAqIHNob3J0IHRoZW4gZ2l2ZSB1cCBhbmQgcmVtYWluIGF3YWtlCi0JICovCisJLy8gSWYgdGhlIGludGVydmFsIGluIHdpdGNoIHdlIGFyZSByZXF1ZXN0ZWQgdG8gc2xlZXAgaXMgdG9vCisJLy8gc2hvcnQgdGhlbiBnaXZlIHVwIGFuZCByZW1haW4gYXdha2UKKwkvLyB3aGVuIHdlIHNsZWVwIGFmdGVyIHNlbmQgbnVsbCBmcmFtZSwgdGhlIHRpbWVyIHdpbGwgYmUgdG9vIHNob3J0IHRvIHNsZWVwLgorCS8vCiAJaWYoKCh0bD49cmIpJiYgKHRsLXJiKSA8PSBNU0VDUyhNSU5fU0xFRVBfVElNRSkpCi0JCXx8KChyYj50bCkmJiAocmItdGwpIDwgTVNFQ1MoTUlOX1NMRUVQX1RJTUUpKSkgeworCQkJfHwoKHJiPnRsKSYmIChyYi10bCkgPCBNU0VDUyhNSU5fU0xFRVBfVElNRSkpKSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnBzX2xvY2ssZmxhZ3MpOwotCQlwcmludGsoInRvbyBzaG9ydCB0byBzbGVlcFxuIik7CisJCXByaW50aygidG9vIHNob3J0IHRvIHNsZWVwOjoleCwgJXgsICVseFxuIix0bCwgcmIsICBNU0VDUyhNSU5fU0xFRVBfVElNRSkpOwogCQlyZXR1cm47CiAJfQogCi0vLwl3cml0ZV9uaWNfZHdvcmQoZGV2LCBUaW1lckludCwgdGwpOwotLy8JcmIgPSByZWFkX25pY19kd29yZChkZXYsIFRTRlRSKTsKLQl7Ci0JCXUzMiB0bXAgPSAodGw+cmIpPyh0bC1yYik6KHJiLXRsKTsKLQkvLwlpZiAodGw8cmIpCi0JCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5pZWVlODAyMTEtPndxLCAmcHJpdi0+aWVlZTgwMjExLT5od193YWtldXBfd3EsIHRtcCk7IC8vYXMgdGwgbWF5IGJlIGxlc3MgdGhhbiByYgotCX0KLQkvKiBpZiB3ZSBzdXNwZWN0IHRoZSBUaW1lckludCBpcyBnb25lIGJleW9uZCB0bAotCSAqIHdoaWxlIHNldHRpbmcgaXQsIHRoZW4gZ2l2ZSB1cAotCSAqLwotI2lmIDEKIAlpZigoKHRsID4gcmIpICYmICgodGwtcmIpID4gTVNFQ1MoTUFYX1NMRUVQX1RJTUUpKSl8fAotCQkoKHRsIDwgcmIpICYmICgocmItdGwpID4gTVNFQ1MoTUFYX1NMRUVQX1RJTUUpKSkpIHsKKwkJCSgodGwgPCByYikgJiYgKHRsPk1TRUNTKDY5KSkgJiYgKChyYi10bCkgPiBNU0VDUyhNQVhfU0xFRVBfVElNRSkpKXx8CisJCQkoKHRsPHJiKSYmKHRsPE1TRUNTKDY5KSkmJigodGwrMHhmZmZmZmZmZi1yYik+TVNFQ1MoTUFYX1NMRUVQX1RJTUUpKSkpIHsKIAkJcHJpbnRrKCI9PT09PT09PT50b28gbG9uZyB0byBzbGVlcDoleCwgJXgsICVseFxuIiwgdGwsIHJiLCAgTVNFQ1MoTUFYX1NMRUVQX1RJTUUpKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cHNfbG9jayxmbGFncyk7CiAJCXJldHVybjsKIAl9Ci0jZW5kaWYKLS8vCWlmKHByaXYtPnJmX3NsZWVwKQotLy8JCXByaXYtPnJmX3NsZWVwKGRldik7Ci0KLQkvL3ByaW50aygiPD09PT09PT09PSVzKClcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmllZWU4MDIxMS0+d3EsICh2b2lkICopJnByaXYtPmllZWU4MDIxMS0+aHdfc2xlZXBfd3EsMCk7CisJeworCQl1MzIgdG1wID0gKHRsPnJiKT8odGwtcmIpOihyYi10bCk7CisJCXF1ZXVlX2RlbGF5ZWRfd29yayhwcml2LT5pZWVlODAyMTEtPndxLAorCQkJCSZwcml2LT5pZWVlODAyMTEtPmh3X3dha2V1cF93cSx0bXApOworCQkvL1Bvd2VyU2F2ZSBub3Qgc3VwcG9ydGVkIHdoZW4ga2VybmVsIHZlcnNpb24gbGVzcyAyLjYuMjAKKwl9CisJcXVldWVfZGVsYXllZF93b3JrKHByaXYtPmllZWU4MDIxMS0+d3EsCisJCQkodm9pZCAqKSZwcml2LT5pZWVlODAyMTEtPmh3X3NsZWVwX3dxLDApOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPnBzX2xvY2ssZmxhZ3MpOworCiB9CiBzdGF0aWMgdm9pZCBydGw4MTkyX2luaXRfcHJpdl92YXJpYWJsZShzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQogewogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAl1OCBpOworCVBSVF9QT1dFUl9TQVZFX0NPTlRST0wJcFBTQyA9IChQUlRfUE9XRVJfU0FWRV9DT05UUk9MKSgmKHByaXYtPmllZWU4MDIxMS0+UG93ZXJTYXZlQ29udHJvbCkpOworCisJLy8gRGVmYXVsdCBIYWx0IHRoZSBOSUMgaWYgUkYgaXMgT0ZGLgorCXBQU0MtPlJlZ1JmUHNMZXZlbCB8PSBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQzsKKwlwUFNDLT5SZWdSZlBzTGV2ZWwgfD0gUlRfUkZfT0ZGX0xFVkxfQ0xLX1JFUTsKKwlwUFNDLT5SZWdSZlBzTGV2ZWwgfD0gUlRfUkZfT0ZGX0xFVkxfQVNQTTsKKwlwUFNDLT5SZWdSZlBzTGV2ZWwgfD0gUlRfUkZfTFBTX0xFVkVMX0FTUE07CisJcFBTQy0+YkxlaXN1cmVQcyA9IHRydWU7CisJcFBTQy0+UmVnTWF4TFBTQXdha2VJbnR2bCA9IDU7CisJcHJpdi0+Ykh3UmFkaW9PZmYgPSBmYWxzZTsKKwogCXByaXYtPmJlaW5nX2luaXRfYWRhcHRlciA9IGZhbHNlOwogCXByaXYtPnR4YnVmZnNpemUgPSAxNjAwOy8vMTAyNDsKIAlwcml2LT50eGZ3YnVmZmVyc2l6ZSA9IDQwOTY7CkBAIC0yMzI4LDYgKzI1NzcsMTcgQEAKIAkvL2FkZGVkIGJ5IGFteQogCXByaXYtPmllZWU4MDIxMS0+SW5pdGlhbEdhaW5IYW5kbGVyID0gSW5pdGlhbEdhaW44MTl4UGNpOwogCisjaWZkZWYgRU5BQkxFX0lQUworCXByaXYtPmllZWU4MDIxMS0+aWVlZTgwMjExX2lwc19sZWF2ZV93cSA9IGllZWU4MDIxMV9pcHNfbGVhdmVfd3E7CisJcHJpdi0+aWVlZTgwMjExLT5pZWVlODAyMTFfaXBzX2xlYXZlID0gaWVlZTgwMjExX2lwc19sZWF2ZTsKKyNlbmRpZgorI2lmZGVmIEVOQUJMRV9MUFMKKyAgICAgICAgcHJpdi0+aWVlZTgwMjExLT5MZWlzdXJlUFNMZWF2ZSAgICAgICAgICAgID0gTGVpc3VyZVBTTGVhdmU7CisjZW5kaWYvL0VOQUJMCisKKwlwcml2LT5pZWVlODAyMTEtPlNldEh3UmVnSGFuZGxlciA9IHJ0bDgxOTJlX1NldEh3UmVnOworCXByaXYtPmllZWU4MDIxMS0+cnRsbGliX2FwX3NlY190eXBlID0gcnRsODE5MmVfYXBfc2VjX3R5cGU7CisKIAlwcml2LT5jYXJkX3R5cGUgPSBVU0I7CiAJewogCQlwcml2LT5TaG9ydFJldHJ5TGltaXQgPSAweDMwOwpAQCAtMjQwMCw2ICsyNjYwLDEwIEBACiAJcHJpdi0+cHJpdl93cSA9IGNyZWF0ZV93b3JrcXVldWUoRFJWX05BTUUpOwogI2VuZGlmCiAKKyNpZmRlZiBFTkFCTEVfSVBTCisJSU5JVF9XT1JLKCZwcml2LT5pZWVlODAyMTEtPmlwc19sZWF2ZV93cSwgKHZvaWQqKUlQU0xlYXZlX3dxKTsKKyNlbmRpZgorCiAvLwlJTklUX1dPUksoJnByaXYtPnJlc2V0X3dxLCAodm9pZCgqKSh2b2lkKikpIHJ0bDgxOTJfcmVzdGFydCk7CiAJSU5JVF9XT1JLKCZwcml2LT5yZXNldF93cSwgIHJ0bDgxOTJfcmVzdGFydCk7CiAvLwlJTklUX0RFTEFZRURfV09SSygmcHJpdi0+d2F0Y2hfZG9nX3dxLCBoYWxfZG1fd2F0Y2hkb2cpOwpAQCAtMjU1MCwxMCArMjgxNCw3IEBACiAJCW1lbWNweShkZXYtPmRldl9hZGRyLCBiTWFjX1RtcF9BZGRyLCA2KTsKIAl9CiAKLQlSVF9UUkFDRShDT01QX0lOSVQsICJQZXJtYW5lbnQgQWRkcmVzcyA9ICUwMngtJTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4XG4iLAotCQkJZGV2LT5kZXZfYWRkclswXSwgZGV2LT5kZXZfYWRkclsxXSwKLQkJCWRldi0+ZGV2X2FkZHJbMl0sIGRldi0+ZGV2X2FkZHJbM10sCi0JCQlkZXYtPmRldl9hZGRyWzRdLCBkZXYtPmRldl9hZGRyWzVdKTsKKwlSVF9UUkFDRShDT01QX0lOSVQsICJQZXJtYW5lbnQgQWRkcmVzcyA9ICVwTVxuIiwgZGV2LT5kZXZfYWRkcik7CiAKIAkJLy8yIFRYIFBvd2VyIENoZWNrIEVFUFJPTSBGYWlsIG9yIG5vdAogCWlmKHByaXYtPmNhcmRfODE5Ml92ZXJzaW9uID4gVkVSU0lPTl84MTkwX0JEKSB7CkBAIC0yOTI2LDEzICszMTg3LDE0IEBACiAJCSNlbmRpZgogCQkJYnJlYWs7CiAJfQotLyoKLQkvLzIwMDguMDYuMDMsIGZvciBXT0wKKworCiAJaWYoIHByaXYtPmVlcHJvbV92aWQgPT0gMHgxMTg2ICYmICBwcml2LT5lZXByb21fZGlkID09IDB4MzMwNCkKLQkJcHJpdi0+aWVlZTgwMjExLT5iU3VwcG9ydFJlbW90ZVdha2VVcCA9IFRSVUU7CisJCXByaXYtPmllZWU4MDIxMS0+YlN1cHBvcnRSZW1vdGVXYWtlVXAgPSB0cnVlOwogCWVsc2UKLQkJcHJpdi0+aWVlZTgwMjExLT5iU3VwcG9ydFJlbW90ZVdha2VVcCA9IEZBTFNFOwotKi8KKwkJcHJpdi0+aWVlZTgwMjExLT5iU3VwcG9ydFJlbW90ZVdha2VVcCA9IGZhbHNlOworCisKIAlSVF9UUkFDRShDT01QX0lOSVQsICJSZWdDaGFubmVsUGxhbiglZClcbiIsIHByaXYtPlJlZ0NoYW5uZWxQbGFuKTsKIAlSVF9UUkFDRShDT01QX0lOSVQsICJDaGFubmVsUGxhbiA9ICVkIFxuIiwgcHJpdi0+Q2hhbm5lbFBsYW4pOwogCVJUX1RSQUNFKENPTVBfSU5JVCwgIkxlZFN0cmF0ZWd5ID0gJWQgXG4iLCBwcml2LT5MZWRTdHJhdGVneSk7CkBAIC00MDA2LDEyICs0MjY4LDE5IEBACiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UgKmllZWUgPSBwcml2LT5pZWVlODAyMTE7CiAKIAorCXJldHVybjsKKwogCS8vIDIwMDcuMDcuMjAuIElmIHdlIG5lZWQgdG8gY2hlY2sgQ0NLIHN0b3AsIHBsZWFzZSB1bmNvbW1lbnQgdGhpcyBsaW5lLgogCS8vYlN0dWNrID0gQWRhcHRlci0+SGFsRnVuYy5DaGVja0hXU3RvcEhhbmRsZXIoQWRhcHRlcik7CiAKIAlpZihwcml2LT5SZXNldFByb2dyZXNzPT1SRVNFVF9UWVBFX05PUkVTRVQpCiAJewogUkVTRVRfU1RBUlQ6CisjaWZkZWYgRU5BQkxFX0xQUworICAgICAgICAgICAgICAgIC8vTFpNIGZvciBQUy1Qb2xsIEFJRCBpc3N1ZS4gMDkwNDI5CisgICAgICAgICAgICAgICAgaWYocHJpdi0+aWVlZTgwMjExLT5zdGF0ZSA9PSBJRUVFODAyMTFfTElOS0VEKQorICAgICAgICAgICAgICAgICAgICBMZWlzdXJlUFNMZWF2ZShkZXYpOworI2VuZGlmCiAKIAkJUlRfVFJBQ0UoQ09NUF9SRVNFVCwiPT09PT09PT09PlJlc2V0IHByb2dyZXNzISEgXG4iKTsKIApAQCAtNDA1MSw5ICs0MzIwLDkgQEAKIAkJfQogCQllbHNlewogCQkJcHJpbnRrKCJpZWVlLT5zdGF0ZSBpcyBOT1QgTElOS0VEXG4iKTsKLQkJCWllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2wocHJpdi0+aWVlZTgwMjExKTsKKwkJCWllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2wocHJpdi0+aWVlZTgwMjExLHRydWUpOwogCQl9Ci0JCXJ0bDgxOTJfcnR4X2Rpc2FibGUoZGV2KTsKKwkJcnRsODE5Ml9oYWx0X2FkYXB0ZXIoZGV2LCB0cnVlKTsKIAkJdXAoJnByaXYtPnd4X3NlbSk7CiAJCVJUX1RSQUNFKENPTVBfUkVTRVQsIiVzKCk6PD09PT09PT09PT1kb3duIHByb2Nlc3MgaXMgZmluaXNoZWRcbiIsX19GVU5DVElPTl9fKTsKIAkJUlRfVFJBQ0UoQ09NUF9SRVNFVCwiJXMoKTo9PT09PT09PT09PT5zdGFydCB0byB1cCB0aGUgZHJpdmVyXG4iLF9fRlVOQ1RJT05fXyk7CkBAIC00MTUwLDYgKzQ0MTksMTI4IEBACiAJUlRfVFJBQ0UoQ09NUF9QT1dFUiwgIkluYWN0aXZlUHNXb3JrSXRlbUNhbGxiYWNrKCkgPC0tLS0tLS0tLSBcbiIpOwogfQogCisjaWZkZWYgRU5BQkxFX0xQUworLy8KKy8vIENoYW5nZSBjdXJyZW50IGFuZCBkZWZhdWx0IHByZWFtYmxlIG1vZGUuCisvLyAyMDA1LjAxLjA2LCBieSByY25qa28uCisvLworYm9vbCBNZ250QWN0U2V0XzgwMl8xMV9Qb3dlclNhdmVNb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCXU4IHJ0UHNNb2RlKQoreworCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwkvL1BSVF9QT1dFUl9TQVZFX0NPTlRST0wgcFBTQyA9IChQUlRfUE9XRVJfU0FWRV9DT05UUk9MKSgmKHByaXYtPmllZWU4MDIxMS0+UG93ZXJTYXZlQ29udHJvbCkpOworCS8vdTggUnB3bVZhbCwgRndQd3JNb2RlOworCisJLy8gQ3VycmVudGx5LCB3ZSBkbyBub3QgY2hhbmdlIHBvd2VyIHNhdmUgbW9kZSBvbiBJQlNTIG1vZGUuCisJaWYocHJpdi0+aWVlZTgwMjExLT5pd19tb2RlID09IElXX01PREVfQURIT0MpCisJeworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLy8KKwkvLyA8UkpfTk9URT4gSWYgd2UgbWFrZSBIVyB0byBmaWxsIHVwIHRoZSBQd3JNZ3QgYml0IGZvciB1cywKKwkvLyBzb21lIEFQIHdpbGwgbm90IHJlc3BvbnNlIHRvIG91ciBtZ250IGZyYW1lcyB3aXRoIFB3ck1ndCBiaXQgc2V0LAorCS8vIGUuZy4gY2Fubm90IGFzc29jaWF0ZSB0aGUgQVAuCisJLy8gU28gSSBjb21tZW50ZWQgb3V0IGl0LiAyMDA1LjAyLjE2LCBieSByY25qa28uCisJLy8KKy8vCS8vIENoYW5nZSBkZXZpY2UncyBwb3dlciBzYXZlIG1vZGUuCisvLwlBZGFwdGVyLT5IYWxGdW5jLlNldFBTTW9kZUhhbmRsZXIoIEFkYXB0ZXIsIHJ0UHNNb2RlICk7CisKKwkvLyBVcGRhdGUgcG93ZXIgc2F2ZSBtb2RlIGNvbmZpZ3VyZWQuCisJLy9SVF9UUkFDRShDT01QX0xQUywiJXMoKTogc2V0IGllZWUtPnBzID0gJXhcbiIsX19GVU5DVElPTl9fLHJ0UHNNb2RlKTsKKwlpZighcHJpdi0+cHNfZm9yY2UpIHsKKwkJcHJpdi0+aWVlZTgwMjExLT5wcyA9IHJ0UHNNb2RlOworCX0KKworCS8vIEF3YWtlIGltbWVkaWF0ZWx5CisJaWYocHJpdi0+aWVlZTgwMjExLT5zdGFfc2xlZXAgIT0gMCAmJiBydFBzTW9kZSA9PSBJRUVFODAyMTFfUFNfRElTQUJMRUQpCisJeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJLy9QbGF0Zm9ybVNldFRpbWVyKEFkYXB0ZXIsICYocE1nbnRJbmZvLT5Bd2FrZVRpbWVyKSwgMCk7CisJCS8vIE5vdGlmeSB0aGUgQVAgd2UgYXdrZS4KKwkJcnRsODE5Ml9od193YWtldXAoZGV2KTsKKwkJcHJpdi0+aWVlZTgwMjExLT5zdGFfc2xlZXAgPSAwOworCisgICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJihwcml2LT5pZWVlODAyMTEtPm1nbXRfdHhfbG9jayksIGZsYWdzKTsKKwkJcHJpbnRrKCJMUFMgbGVhdmU6IG5vdGlmeSBBUCB3ZSBhcmUgYXdha2VkICsrKysrKysrKysgU2VuZE51bGxGdW5jdGlvbkRhdGFcbiIpOworCQlpZWVlODAyMTFfc3RhX3BzX3NlbmRfbnVsbF9mcmFtZShwcml2LT5pZWVlODAyMTEsIDApOworICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJihwcml2LT5pZWVlODAyMTEtPm1nbXRfdHhfbG9jayksIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gdHJ1ZTsKK30KKworLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gTGVpc3VyZSBQb3dlciBTYXZlIGluIGxpbmtlZCBzdGF0ZS4KKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworLy8KKy8vCURlc2NyaXB0aW9uOgorLy8JCUVudGVyIHRoZSBsZWlzdXJlIHBvd2VyIHNhdmUgbW9kZS4KKy8vCit2b2lkIExlaXN1cmVQU0VudGVyKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCVBSVF9QT1dFUl9TQVZFX0NPTlRST0wgcFBTQyA9IChQUlRfUE9XRVJfU0FWRV9DT05UUk9MKSgmKHByaXYtPmllZWU4MDIxMS0+UG93ZXJTYXZlQ29udHJvbCkpOworCisJLy9SVF9UUkFDRShDT01QX1BTLCAiTGVpc3VyZVBTRW50ZXIoKS4uLlxuIik7CisJLy9SVF9UUkFDRShDT01QX1BTLCAicFBTQy0+YkxlaXN1cmVQcyA9ICVkLCBpZWVlLT5wcyA9ICVkLHBQU0MtPkxwc0lkbGVDb3VudCBpcyAlZCxSVF9DSEVDS19GT1JfSEFOR19QRVJJT0QgaXMgJWRcbiIsCisJLy8JcFBTQy0+YkxlaXN1cmVQcywgcHJpdi0+aWVlZTgwMjExLT5wcyxwUFNDLT5McHNJZGxlQ291bnQsUlRfQ0hFQ0tfRk9SX0hBTkdfUEVSSU9EKTsKKworCWlmKCEoKHByaXYtPmllZWU4MDIxMS0+aXdfbW9kZSA9PSBJV19NT0RFX0lORlJBKSAmJgorCQkocHJpdi0+aWVlZTgwMjExLT5zdGF0ZSA9PSBJRUVFODAyMTFfTElOS0VEKSkgfHwKKwkJKHByaXYtPmllZWU4MDIxMS0+aXdfbW9kZSA9PSBJV19NT0RFX0FESE9DKSB8fAorCQkocHJpdi0+aWVlZTgwMjExLT5pd19tb2RlID09IElXX01PREVfTUFTVEVSKSkKKwkJcmV0dXJuOworCisJaWYgKHBQU0MtPmJMZWlzdXJlUHMpCisJeworCQkvLyBJZGxlIGZvciBhIHdoaWxlIGlmIHdlIGNvbm5lY3QgdG8gQVAgYSB3aGlsZSBhZ28uCisJCWlmKHBQU0MtPkxwc0lkbGVDb3VudCA+PSBSVF9DSEVDS19GT1JfSEFOR19QRVJJT0QpIC8vICA0IFNlYworCQl7CisKKwkJCWlmKHByaXYtPmllZWU4MDIxMS0+cHMgPT0gSUVFRTgwMjExX1BTX0RJU0FCTEVEKQorCQkJeworCisJCQkJLy9SVF9UUkFDRShDT01QX0xQUywgIkxlaXN1cmVQU0VudGVyKCk6IEVudGVyIDgwMi4xMSBwb3dlciBzYXZlIG1vZGUuLi5cbiIpOworCQkJCU1nbnRBY3RTZXRfODAyXzExX1Bvd2VyU2F2ZU1vZGUoZGV2LCBJRUVFODAyMTFfUFNfTUJDQVNUfElFRUU4MDIxMV9QU19VTklDQVNUKTsKKworCQkJfQorCQl9CisJCWVsc2UKKwkJCXBQU0MtPkxwc0lkbGVDb3VudCsrOworCX0KK30KKworCisvLworLy8JRGVzY3JpcHRpb246CisvLwkJTGVhdmUgdGhlIGxlaXN1cmUgcG93ZXIgc2F2ZSBtb2RlLgorLy8KK3ZvaWQgTGVpc3VyZVBTTGVhdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJUFJUX1BPV0VSX1NBVkVfQ09OVFJPTCBwUFNDID0gKFBSVF9QT1dFUl9TQVZFX0NPTlRST0wpKCYocHJpdi0+aWVlZTgwMjExLT5Qb3dlclNhdmVDb250cm9sKSk7CisKKworCS8vUlRfVFJBQ0UoQ09NUF9QUywgIkxlaXN1cmVQU0xlYXZlKCkuLi5cbiIpOworCS8vUlRfVFJBQ0UoQ09NUF9QUywgInBQU0MtPmJMZWlzdXJlUHMgPSAlZCwgaWVlZS0+cHMgPSAlZFxuIiwKKwkvLwlwUFNDLT5iTGVpc3VyZVBzLCBwcml2LT5pZWVlODAyMTEtPnBzKTsKKworCWlmIChwUFNDLT5iTGVpc3VyZVBzKQorCXsKKwkJaWYocHJpdi0+aWVlZTgwMjExLT5wcyAhPSBJRUVFODAyMTFfUFNfRElTQUJMRUQpCisJCXsKKwkJCS8vIG1vdmUgdG8gbHBzX3dha2Vjb21wbGV0ZSgpCisJCQkvL1JUX1RSQUNFKENPTVBfTFBTLCAiTGVpc3VyZVBTTGVhdmUoKTogQnVzeSBUcmFmZmljICwgTGVhdmUgODAyLjExIHBvd2VyIHNhdmUuLlxuIik7CisJCQlNZ250QWN0U2V0XzgwMl8xMV9Qb3dlclNhdmVNb2RlKGRldiwgSUVFRTgwMjExX1BTX0RJU0FCTEVEKTsKKworCQl9CisJfQorfQorI2VuZGlmCisKKwogLy8KIC8vCURlc2NyaXB0aW9uOgogLy8JCUVudGVyIHRoZSBpbmFjdGl2ZSBwb3dlciBzYXZlIG1vZGUuIFJGIHdpbGwgYmUgb2ZmCkBAIC00MTc4LDYgKzQ1NjksNyBAQAogCQkJJiYgKHByaXYtPmllZWU4MDIxMS0+c3RhdGUgIT0gSUVFRTgwMjExX0xJTktFRCkgKQogCQl7CiAJCQlSVF9UUkFDRShDT01QX1JGLCJJUFNFbnRlcigpOiBUdXJuIG9mZiBSRi5cbiIpOworCQkJLy9wcmludGsoIklQU0VudGVyKCk6IFR1cm4gb2ZmIFJGLlxuIik7CiAJCQlwUFNDLT5lSW5hY3RpdmVQb3dlclN0YXRlID0gZVJmT2ZmOwogLy8JCQlxdWV1ZV93b3JrKHByaXYtPnByaXZfd3EsJihwUFNDLT5JbmFjdGl2ZVBzV29ya0l0ZW0pKTsKIAkJCUluYWN0aXZlUHNXb3JrSXRlbUNhbGxiYWNrKGRldik7CkBAIC00MjAzLDEyICs0NTk1LDUzIEBACiAJCWlmIChydFN0YXRlICE9IGVSZk9uICAmJiAhcFBTQy0+YlN3UmZQcm9jZXNzaW5nICYmIHByaXYtPmllZWU4MDIxMS0+UmZPZmZSZWFzb24gPD0gUkZfQ0hBTkdFX0JZX0lQUykKIAkJewogCQkJUlRfVFJBQ0UoQ09NUF9QT1dFUiwgIklQU0xlYXZlKCk6IFR1cm4gb24gUkYuXG4iKTsKKwkJCS8vcHJpbnRrKCJJUFNMZWF2ZSgpOiBUdXJuIG9uIFJGLlxuIik7CiAJCQlwUFNDLT5lSW5hY3RpdmVQb3dlclN0YXRlID0gZVJmT247CiAvLwkJCXF1ZXVlX3dvcmsocHJpdi0+cHJpdl93cSwmKHBQU0MtPkluYWN0aXZlUHNXb3JrSXRlbSkpOwogCQkJSW5hY3RpdmVQc1dvcmtJdGVtQ2FsbGJhY2soZGV2KTsKIAkJfQogCX0KIH0KKwordm9pZCBJUFNMZWF2ZV93cSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlID0gY29udGFpbmVyX29mKGRhdGEsc3RydWN0IGllZWU4MDIxMV9kZXZpY2UsaXBzX2xlYXZlX3dxKTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaWVlZS0+ZGV2OworCisJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTkyX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOworCWRvd24oJnByaXYtPmllZWU4MDIxMS0+aXBzX3NlbSk7CisJSVBTTGVhdmUoZGV2KTsKKwl1cCgmcHJpdi0+aWVlZTgwMjExLT5pcHNfc2VtKTsKK30KKwordm9pZCBpZWVlODAyMTFfaXBzX2xlYXZlX3dxKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSAoc3RydWN0IHI4MTkyX3ByaXYgKilpZWVlODAyMTFfcHJpdihkZXYpOworCVJUX1JGX1BPV0VSX1NUQVRFCXJ0U3RhdGU7CisJcnRTdGF0ZSA9IHByaXYtPmllZWU4MDIxMS0+ZVJGUG93ZXJTdGF0ZTsKKworCWlmKHByaXYtPmllZWU4MDIxMS0+UG93ZXJTYXZlQ29udHJvbC5iSW5hY3RpdmVQcyl7CisJCWlmKHJ0U3RhdGUgPT0gZVJmT2ZmKXsKKwkJCWlmKHByaXYtPmllZWU4MDIxMS0+UmZPZmZSZWFzb24gPiBSRl9DSEFOR0VfQllfSVBTKQorCQkJeworCQkJCVJUX1RSQUNFKENPTVBfRVJSLCAiJXMoKTogUkYgaXMgT0ZGLlxuIixfX0ZVTkNUSU9OX18pOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWVsc2V7CisJCQkJcHJpbnRrKCI9PT09PT09PT0+JXMoKTogSVBTTGVhdmVcbiIsX19GVU5DVElPTl9fKTsKKwkJCQlxdWV1ZV93b3JrKHByaXYtPmllZWU4MDIxMS0+d3EsJnByaXYtPmllZWU4MDIxMS0+aXBzX2xlYXZlX3dxKTsKKwkJCX0KKwkJfQorCX0KK30KKy8vYWRkZWQgYnkgYW15IDA5MDMzMSBlbmQKK3ZvaWQgaWVlZTgwMjExX2lwc19sZWF2ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gKHN0cnVjdCByODE5Ml9wcml2ICopaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlkb3duKCZwcml2LT5pZWVlODAyMTEtPmlwc19zZW0pOworCUlQU0xlYXZlKGRldik7CisJdXAoJnByaXYtPmllZWU4MDIxMS0+aXBzX3NlbSk7Cit9CiAjZW5kaWYKIAogc3RhdGljIHZvaWQgcnRsODE5eF91cGRhdGVfcnhjb3VudHMoCkBAIC00MjQ0LDE1ICs0Njc3LDIzIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlib29sIGJCdXN5VHJhZmZpYyA9IGZhbHNlOwogCXN0YXRpYyB1OCBsYXN0X3RpbWUgPSAwOworCWJvb2wgYkVudGVyUFMgPSBmYWxzZTsKKworCWlmKCghcHJpdi0+dXApIHx8IChwcml2LT5iSHdSYWRpb09mZiA9PSB0cnVlKSkKKwkJcmV0dXJuOworCiAJaWYoIXByaXYtPnVwKQogCQlyZXR1cm47CiAJaGFsX2RtX3dhdGNoZG9nKGRldik7CiAjaWZkZWYgRU5BQkxFX0lQUwogLy8JcHJpbnRrKCJ3YXRjaF9kb2cgRU5BQkxFX0lQU1xuIik7CiAJaWYoaWVlZS0+YWN0c2Nhbm5pbmcgPT0gZmFsc2UpewotCQlpZigoaWVlZS0+aXdfbW9kZSAhPSBJV19NT0RFX0FESE9DKSAmJiAoaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX05PTElOSykgJiYgKGllZWUtPmJlaW5yZXRyeSA9PSBmYWxzZSkgJiYgKGllZWUtPmVSRlBvd2VyU3RhdGUgPT0gZVJmT24pICYmICFpZWVlLT5pc19zZXRfa2V5KXsKKwkJLy9wcmludGsoIiVkLCVkLCVkLCVkXG4iLCBpZWVlLT5lUkZQb3dlclN0YXRlLCBpZWVlLT5pc19zZXRfa2V5LCBpZWVlLT5wcm90b19zdG9wcHBpbmcsIGllZWUtPnd4X3NldF9lbmMpOworCQlpZigoaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0lORlJBKSAmJiAoaWVlZS0+c3RhdGUgPT0gSUVFRTgwMjExX05PTElOSykgJiZcCisJCSAgICAoaWVlZS0+ZVJGUG93ZXJTdGF0ZSA9PSBlUmZPbikmJiFpZWVlLT5pc19zZXRfa2V5ICYmXAorCQkgICAgKCFpZWVlLT5wcm90b19zdG9wcHBpbmcpICYmICFpZWVlLT53eF9zZXRfZW5jKXsKIAkJCWlmKGllZWUtPlBvd2VyU2F2ZUNvbnRyb2wuUmV0dXJuUG9pbnQgPT0gSVBTX0NBTExCQUNLX05PTkUpewotCQkJCXByaW50aygiPT09PT09PT09PT09PT09PT09PT0+aGFoYTpJUFNFbnRlcigpXG4iKTsKKwkJCQkvL3ByaW50aygiPT09PT09PT09PT09PT09PT09PT0+aGFoYTpJUFNFbnRlcigpXG4iKTsKIAkJCQlJUFNFbnRlcihkZXYpOwogCQkJCS8vaWVlZTgwMjExX3N0b3Bfc2Nhbihwcml2LT5pZWVlODAyMTEpOwogCQkJfQpAQCAtNDI2MiwxNCArNDcwMyw0OSBAQAogCXsvL3RvIGdldCBidXN5IHRyYWZmaWMgY29uZGl0aW9uCiAJCWlmKGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9MSU5LRUQpCiAJCXsKLQkJCWlmKAlpZWVlLT5MaW5rRGV0ZWN0SW5mby5OdW1SeE9rSW5QZXJpb2Q+IDY2NiB8fAotCQkJCWllZWUtPkxpbmtEZXRlY3RJbmZvLk51bVR4T2tJblBlcmlvZD4gNjY2ICkgeworCQkJaWYoCWllZWUtPkxpbmtEZXRlY3RJbmZvLk51bVJ4T2tJblBlcmlvZD4gMTAwIHx8CisJCQkJaWVlZS0+TGlua0RldGVjdEluZm8uTnVtVHhPa0luUGVyaW9kPiAxMDAgKSB7CiAJCQkJYkJ1c3lUcmFmZmljID0gdHJ1ZTsKIAkJCX0KIAorI2lmZGVmIEVOQUJMRV9MUFMKKwkJCS8vYWRkZWQgYnkgYW15IGZvciBMZWlzdXJlIFBTCisJCQlpZigJKChpZWVlLT5MaW5rRGV0ZWN0SW5mby5OdW1SeFVuaWNhc3RPa0luUGVyaW9kICsgaWVlZS0+TGlua0RldGVjdEluZm8uTnVtVHhPa0luUGVyaW9kKSA+IDggKSB8fAorCQkJCShpZWVlLT5MaW5rRGV0ZWN0SW5mby5OdW1SeFVuaWNhc3RPa0luUGVyaW9kID4gMikgKQorCQkJeworCQkJCS8vcHJpbnRrKCJpZWVlLT5MaW5rRGV0ZWN0SW5mby5OdW1SeFVuaWNhc3RPa0luUGVyaW9kIGlzICVkLGllZWUtPkxpbmtEZXRlY3RJbmZvLk51bVR4T2tJblBlcmlvZCBpcyAlZFxuIiwKKwkJCQkvLwlpZWVlLT5MaW5rRGV0ZWN0SW5mby5OdW1SeFVuaWNhc3RPa0luUGVyaW9kLGllZWUtPkxpbmtEZXRlY3RJbmZvLk51bVR4T2tJblBlcmlvZCk7CisJCQkJYkVudGVyUFM9IGZhbHNlOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWJFbnRlclBTPSB0cnVlOworCQkJfQorCisJCQkvL3ByaW50aygiKioqYkVudGVyUFMgPSAlZFxuIiwgYkVudGVyUFMpOworCQkJLy8gTGVpc3VyZVBTIG9ubHkgd29yayBpbiBpbmZyYSBtb2RlLgorCQkJaWYoYkVudGVyUFMpCisJCQl7CisJCQkJTGVpc3VyZVBTRW50ZXIoZGV2KTsKKwkJCX0KKwkJCWVsc2UKKwkJCXsKKwkJCQlMZWlzdXJlUFNMZWF2ZShkZXYpOworCQkJfQorI2VuZGlmCisKIAkJfQorCQllbHNlCisJCXsKKyNpZmRlZiBFTkFCTEVfTFBTCisJCQkvL1JUX1RSQUNFKENPTVBfTFBTLCI9PT09Pm5vIGxpbmsgTFBTIGxlYXZlXG4iKTsKKwkJCUxlaXN1cmVQU0xlYXZlKGRldik7CisjZW5kaWYKKwkJfQorCiAJICAgICAgICBpZWVlLT5MaW5rRGV0ZWN0SW5mby5OdW1SeE9rSW5QZXJpb2QgPSAwOwogCSAgICAgICAgaWVlZS0+TGlua0RldGVjdEluZm8uTnVtVHhPa0luUGVyaW9kID0gMDsKKwkJaWVlZS0+TGlua0RldGVjdEluZm8uTnVtUnhVbmljYXN0T2tJblBlcmlvZCA9IDA7CiAJCWllZWUtPkxpbmtEZXRlY3RJbmZvLmJCdXN5VHJhZmZpYyA9IGJCdXN5VHJhZmZpYzsKIAl9CiAKQEAgLTQyODgsMTQgKzQ3NjQsMTQgQEAKIAkJCQlpZiggaWVlZS0+ZVJGUG93ZXJTdGF0ZSA9PSBlUmZPZmYpCiAJCQkJCVJUX1RSQUNFKENPTVBfRVJSLCI9PT09PT09PT4lcygpXG4iLF9fRlVOQ1RJT05fXyk7CiAJCQkJcHJpbnRrKCI9PT0+JXMoKTogQVAgaXMgcG93ZXIgb2ZmLGNvbm5lY3QgYW5vdGhlciBvbmVcbiIsX19GVU5DVElPTl9fKTsKLQkJLy8JCURvdDExZF9SZXNldChkZXYpOworCQkJCS8vCQlEb3QxMWRfUmVzZXQoZGV2KTsKIAkJCQlpZWVlLT5zdGF0ZSA9IElFRUU4MDIxMV9BU1NPQ0lBVElORzsKIAkJCQlub3RpZnlfd3hfYXNzb2NfZXZlbnQocHJpdi0+aWVlZTgwMjExKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlUGVlclRTKHByaXYtPmllZWU4MDIxMSxwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5ic3NpZCk7CisJCQkJUmVtb3ZlUGVlclRTKHByaXYtPmllZWU4MDIxMSxwcml2LT5pZWVlODAyMTEtPmN1cnJlbnRfbmV0d29yay5ic3NpZCk7CiAJCQkJaWVlZS0+aXNfcm9hbWluZyA9IHRydWU7CiAJCQkJaWVlZS0+aXNfc2V0X2tleSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZWVlLT5saW5rX2NoYW5nZShkZXYpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZV93b3JrKGllZWUtPndxLCAmaWVlZS0+YXNzb2NpYXRlX3Byb2NlZHVyZV93cSk7CisJCQkJaWVlZS0+bGlua19jaGFuZ2UoZGV2KTsKKwkJCQlxdWV1ZV93b3JrKGllZWUtPndxLCAmaWVlZS0+YXNzb2NpYXRlX3Byb2NlZHVyZV93cSk7CiAJCQl9CiAJCX0KIAkgICAgICBpZWVlLT5MaW5rRGV0ZWN0SW5mby5OdW1SZWN2QmNuSW5QZXJpb2Q9MDsKQEAgLTQzNDgsNiArNDgyNCw3IEBACiAJUlRfU1RBVFVTIGluaXRfc3RhdHVzID0gUlRfU1RBVFVTX1NVQ0NFU1M7CiAJcHJpdi0+dXA9MTsKIAlwcml2LT5pZWVlODAyMTEtPmllZWVfdXA9MTsKKwlwcml2LT5iZGlzYWJsZV9uaWMgPSBmYWxzZTsgIC8vWUosYWRkLDA5MTExMQogCVJUX1RSQUNFKENPTVBfSU5JVCwgIkJyaW5naW5nIHVwIGlmYWNlIik7CiAKIAlpbml0X3N0YXR1cyA9IHJ0bDgxOTJfYWRhcHRlcl9zdGFydChkZXYpOwpAQCAtNDQyMiw2ICs0ODk5LDEyIEBACiAjZW5kaWYKIAlpZiAocHJpdi0+dXAgPT0gMCkgcmV0dXJuIC0xOwogCisjaWZkZWYgRU5BQkxFX0xQUworCS8vTFpNIGZvciBQUy1Qb2xsIEFJRCBpc3N1ZS4gMDkwNDI5CisJaWYocHJpdi0+aWVlZTgwMjExLT5zdGF0ZSA9PSBJRUVFODAyMTFfTElOS0VEKQorCQlMZWlzdXJlUFNMZWF2ZShkZXYpOworI2VuZGlmCisKIAlwcml2LT51cD0wOwogCXByaXYtPmllZWU4MDIxMS0+aWVlZV91cCA9IDA7CiAJUlRfVFJBQ0UoQ09NUF9ET1dOLCAiPT09PT09PT09PT4lcygpXG4iLCBfX0ZVTkNUSU9OX18pOwpAQCAtNDQ1OSwxMSArNDk0Miw5IEBACiAJZGVpbml0X2hhbF9kbShkZXYpOwogCWRlbF90aW1lcl9zeW5jKCZwcml2LT53YXRjaF9kb2dfdGltZXIpOwogCi0JaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbChwcml2LT5pZWVlODAyMTEpOwotI2lmZGVmIEVOQUJMRV9JUFMKLQlNZ250QWN0U2V0X1JGX1N0YXRlKGRldiwgZVJmT2ZmLCBSRl9DSEFOR0VfQllfSU5JVCk7Ci0jZW5kaWYKLQlydGw4MTkyX3J0eF9kaXNhYmxlKGRldik7CisJaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbChwcml2LT5pZWVlODAyMTEsdHJ1ZSk7CisKKwlydGw4MTkyX2hhbHRfYWRhcHRlcihkZXYsZmFsc2UpOwogCW1lbXNldCgmcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmssIDAgLCBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX25ldHdvcmssIGxpc3QpKTsKIAogCVJUX1RSQUNFKENPTVBfRE9XTiwgIjw9PT09PT09PT09JXMoKVxuIiwgX19GVU5DVElPTl9fKTsKQEAgLTQ0NzksMTAgKzQ5NjAsMTAgQEAKIAlpZiAocHJpdi0+dXAgPT0gMCkgcmV0dXJuIDsKIAogCi0JaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbChwcml2LT5pZWVlODAyMTEpOworCWllZWU4MDIxMV9zb2Z0bWFjX3N0b3BfcHJvdG9jb2wocHJpdi0+aWVlZTgwMjExLHRydWUpOwogCiAJcnRsODE5Ml9pcnFfZGlzYWJsZShkZXYpOwotCXJ0bDgxOTJfcnR4X2Rpc2FibGUoZGV2KTsKKwlydGw4MTkyX2hhbHRfYWRhcHRlcihkZXYsdHJ1ZSk7CiAJX3J0bDgxOTJfdXAoZGV2KTsKIH0KIApAQCAtNTgwNiw4ICs2Mjg3LDcgQEAKIAogICAgICAgICAgICAgICAgIHNrYiA9IG5ld19za2I7CiAgICAgICAgICAgICAgICAgcHJpdi0+cnhfYnVmW3ByaXYtPnJ4X2lkeF0gPSBza2I7Ci0gICAgICAgICAgICAgICAgKigoZG1hX2FkZHJfdCAqKSBza2ItPmNiKSA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIHNrYi0+dGFpbCwgcHJpdi0+cnhidWZmZXJzaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOwotLy8gICAgICAgICAgICAgICAgKigoZG1hX2FkZHJfdCAqKSBza2ItPmNiKSA9IHBjaV9tYXBfc2luZ2xlKHByaXYtPnBkZXYsIHNrYl90YWlsX3BvaW50ZXIoc2tiKSwgcHJpdi0+cnhidWZmZXJzaXplLCBQQ0lfRE1BX0ZST01ERVZJQ0UpOworICAgICAgICAgICAgICAgICooKGRtYV9hZGRyX3QgKikgc2tiLT5jYikgPSBwY2lfbWFwX3NpbmdsZShwcml2LT5wZGV2LCBza2JfdGFpbF9wb2ludGVyKHNrYiksIHByaXYtPnJ4YnVmZmVyc2l6ZSwgUENJX0RNQV9GUk9NREVWSUNFKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICB9CkBAIC02MDM2LDcgKzY1MTYsNyBAQAogCS8qIGNhbGwgY2FuY2VsX3dvcmtfc3luYyBpbnN0ZWFkIG9mIGNhbmNlbF9kZWxheWVkX3dvcmsgaWYgYW5kIG9ubHkgaWYgTGludXhfdmVyc2lvbl9jb2RlCiAgICAgICAgICAqIGlzICBvciBpcyBuZXdlciB0aGFuIDIuNi4yMCBhbmQgd29yayBzdHJ1Y3R1cmUgaXMgZGVmaW5lZCB0byBiZSBzdHJ1Y3Qgd29ya19zdHJ1Y3QuCiAgICAgICAgICAqIE90aGVyd2lzZSBjYWxsIGNhbmNlbF9kZWxheWVkX3dvcmsgaXMgZW5vdWdoLgotICAgICAgICAgKiBGSVhNRSAoMi42LjIwIHNob3VkIDIuNi4yMiwgd29ya19zdHJ1Y3Qgc2hvdWQgbm90IGNhbmNlbCkKKyAgICAgICAgICogRklYTUUgKDIuNi4yMCBzaG91bGQgMi42LjIyLCB3b3JrX3N0cnVjdCBzaG91bGQgbm90IGNhbmNlbCkKICAgICAgICAgICogKi8KIAljYW5jZWxfZGVsYXllZF93b3JrKCZwcml2LT53YXRjaF9kb2dfd3EpOwogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnByaXYtPnVwZGF0ZV9iZWFjb25fd3EpOwpAQCAtNjM4MSwxMSArNjg2MSwxMyBAQAogCQkJaWYocHJpdi0+aWVlZTgwMjExLT5SZk9mZlJlYXNvbiA+IFJGX0NIQU5HRV9CWV9JUFMpCiAJCQl7CiAJCQkJUlRfVFJBQ0UoQ09NUF9FUlIsICIlcygpOiBSRiBpcyBPRkYuXG4iLF9fRlVOQ1RJT05fXyk7Ci0JCQkJdXAoJnByaXYtPnd4X3NlbSk7CisJCQkJLy91cCgmcHJpdi0+d3hfc2VtKTsKIAkJCQlyZXR1cm4gOwogCQkJfQogCQkJZWxzZXsKKwkJCQlkb3duKCZwcml2LT5pZWVlODAyMTEtPmlwc19zZW0pOwogCQkJCUlQU0xlYXZlKGRldik7CisJCQkJdXAoJnByaXYtPmllZWU4MDIxMS0+aXBzX3NlbSk7CiAJCQl9CiAJCX0KIAl9CkBAIC02Mzk0LDcgKzY4NzYsNyBAQAogCWlmIChFbnRyeU5vID49IFRPVEFMX0NBTV9FTlRSWSkKIAkJUlRfVFJBQ0UoQ09NUF9FUlIsICJjYW0gZW50cnkgZXhjZWVkcyBpbiBzZXRLZXkoKVxuIik7CiAKLQlSVF9UUkFDRShDT01QX1NFQywgIj09PT0+dG8gc2V0S2V5KCksIGRldjolcCwgRW50cnlObzolZCwgS2V5SW5kZXg6JWQsIEtleVR5cGU6JWQsIE1hY0FkZHIiTUFDX0ZNVCJcbiIsIGRldixFbnRyeU5vLCBLZXlJbmRleCwgS2V5VHlwZSwgTUFDX0FSRyhNYWNBZGRyKSk7CisJUlRfVFJBQ0UoQ09NUF9TRUMsICI9PT09PnRvIHNldEtleSgpLCBkZXY6JXAsIEVudHJ5Tm86JWQsIEtleUluZGV4OiVkLCBLZXlUeXBlOiVkLCBNYWNBZGRyJXBNXG4iLCBkZXYsRW50cnlObywgS2V5SW5kZXgsIEtleVR5cGUsIE1hY0FkZHIpOwogCiAJaWYgKERlZmF1bHRLZXkpCiAJCXVzQ29uZmlnIHw9IEJJVDE1IHwgKEtleVR5cGU8PDIpOwpAQCAtNjQ1NSw2ICs2OTM3LDY1IEBACiAJUlRfVFJBQ0UoQ09NUF9TRUMsICJXUEFfQ29uZmlnPSV4IFxuIix1Y1ZhbHVlKTsKIH0KIAorYm9vbCBOaWNJRkVuYWJsZU5JQyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQoreworCVJUX1NUQVRVUyBpbml0X3N0YXR1cyA9IFJUX1NUQVRVU19TVUNDRVNTOworCXN0cnVjdCByODE5Ml9wcml2KiBwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlQUlRfUE9XRVJfU0FWRV9DT05UUk9MIHBQU0MgPSAoUFJUX1BPV0VSX1NBVkVfQ09OVFJPTCkoJihwcml2LT5pZWVlODAyMTEtPlBvd2VyU2F2ZUNvbnRyb2wpKTsKKworCS8vWUosYWRkLDA5MTEwOQorCWlmIChwcml2LT51cCA9PSAwKXsKKwkJUlRfVFJBQ0UoQ09NUF9FUlIsICJFUlIhISEgJXMoKTogRHJpdmVyIGlzIGFscmVhZHkgZG93biFcbiIsX19GVU5DVElPTl9fKTsKKwkJcHJpdi0+YmRpc2FibGVfbmljID0gZmFsc2U7ICAvL1lKLGFkZCwwOTExMTEKKwkJcmV0dXJuIGZhbHNlOworCX0KKwkvLyA8MT4gUmVzZXQgbWVtb3J5OiBkZXNjcmlwdG9yLCBidWZmZXIsLi4KKwkvL05pY0lGUmVzZXRNZW1vcnkoQWRhcHRlcik7CisKKwkvLyA8Mj4gRW5hYmxlIEFkYXB0ZXIKKwkvL3ByaW50aygiPT09PT09PT09PT0+JXMoKVxuIixfX0ZVTkNUSU9OX18pOworCS8vcHJpdi0+YmZpcnN0X2luaXQgPSB0cnVlOworCWluaXRfc3RhdHVzID0gcnRsODE5Ml9hZGFwdGVyX3N0YXJ0KGRldik7CisJaWYgKGluaXRfc3RhdHVzICE9IFJUX1NUQVRVU19TVUNDRVNTKSB7CisJCVJUX1RSQUNFKENPTVBfRVJSLCJFUlIhISEgJXMoKTogaW5pdGlhbGl6YXRpb24gaXMgZmFpbGVkIVxuIixfX0ZVTkNUSU9OX18pOworCQlwcml2LT5iZGlzYWJsZV9uaWMgPSBmYWxzZTsgIC8vWUosYWRkLDA5MTExMQorCQlyZXR1cm4gLTE7CisJfQorCS8vcHJpbnRrKCJzdGFydCBhZGFwdGVyIGZpbmlzaGVkXG4iKTsKKwlSVF9DTEVBUl9QU19MRVZFTChwUFNDLCBSVF9SRl9PRkZfTEVWTF9IQUxUX05JQyk7CisJLy9wcml2LT5iZmlyc3RfaW5pdCA9IGZhbHNlOworCisJLy8gPDM+IEVuYWJsZSBJbnRlcnJ1cHQKKwlydGw4MTkyX2lycV9lbmFibGUoZGV2KTsKKwlwcml2LT5iZGlzYWJsZV9uaWMgPSBmYWxzZTsKKwkvL1JUX1RSQUNFKENPTVBfUFMsIjw9PT09PT09PT09PSVzKClcbiIsX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gKGluaXRfc3RhdHVzID09IFJUX1NUQVRVU19TVUNDRVNTKSA/IHRydWU6ZmFsc2U7Cit9Citib29sIE5pY0lGRGlzYWJsZU5JQyhzdHJ1Y3QgbmV0X2RldmljZSogZGV2KQoreworCWJvb2wJc3RhdHVzID0gdHJ1ZTsKKwlzdHJ1Y3QgcjgxOTJfcHJpdiogcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJdTggdG1wX3N0YXRlID0gMDsKKwkvLyA8MT4gRGlzYWJsZSBJbnRlcnJ1cHQKKwkvL1JUX1RSQUNFKENPTVBfUFMsICI9PT09PT09PT0+JXMoKVxuIixfX0ZVTkNUSU9OX18pOworCXByaXYtPmJkaXNhYmxlX25pYyA9IHRydWU7CS8vWUosbW92ZSwwOTExMDkKKwl0bXBfc3RhdGUgPSBwcml2LT5pZWVlODAyMTEtPnN0YXRlOworCisJaWVlZTgwMjExX3NvZnRtYWNfc3RvcF9wcm90b2NvbChwcml2LT5pZWVlODAyMTEsIGZhbHNlKTsKKworCXByaXYtPmllZWU4MDIxMS0+c3RhdGUgPSB0bXBfc3RhdGU7CisJcnRsODE5Ml9jYW5jZWxfZGVmZXJyZWRfd29yayhwcml2KTsKKwlydGw4MTkyX2lycV9kaXNhYmxlKGRldik7CisJLy8gPDI+IFN0b3AgYWxsIHRpbWVyCisKKwkvLyA8Mz4gRGlzYWJsZSBBZGFwdGVyCisJcnRsODE5Ml9oYWx0X2FkYXB0ZXIoZGV2LCBmYWxzZSk7CisvLwlwcml2LT5iZGlzYWJsZV9uaWMgPSB0cnVlOworCS8vUlRfVFJBQ0UoQ09NUF9QUywgIjw9PT09PT09PT0lcygpXG4iLF9fRlVOQ1RJT05fXyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLSBtb2R1bGUgaW5pdCAvIGV4aXQgc3R1YnMgLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV9kbS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV9kbS5jCmluZGV4IDVmZmI0ZjcuLmEyNDlmMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfZG0uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2RtLmMKQEAgLTE5LDI2ICsxOSwyOCBAQAogI2luY2x1ZGUgInI4MTl4RV9waHkuaCIKICNpbmNsdWRlICJyODE5eEVfcGh5cmVnLmgiCiAjaW5jbHVkZSAicjgxOTBfcnRsODI1Ni5oIgorCisjZGVmaW5lIERSVl9OQU1FICJydGw4MTl4RSIKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tRGVmaW5lIExvY2FsIENvbnN0YW50LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8vCiAvLyBJbmRpY2F0ZSBkaWZmZXJlbnQgQVAgdmVuZG9yIGZvciBJT1QgaXNzdWUuCiAvLwogI2lmZGVmICBSVEw4MTkwUAogc3RhdGljIHUzMiBlZGNhX3NldHRpbmdfRExbSFRfSU9UX1BFRVJfTUFYXSA9Ci17IDB4NWU0MzIyLCAJMHg1ZTQzMjIsIAkweDVlNDMyMiwgIAkweDYwNDMyMiwgCTB4YTQ0ZiwgCTB4NWU0MzIyfTsKK3sgMHg1ZTQzMjIsIAkweDVlNDMyMiwgCTB4NWU0MzIyLCAgCTB4NjA0MzIyLCAJMHhhNDRmLCAJMHg1ZTQzMjIsCTB4NWU0MzIyfTsKIHN0YXRpYyB1MzIgZWRjYV9zZXR0aW5nX1VMW0hUX0lPVF9QRUVSX01BWF0gPQoteyAweDVlNDMyMiwgCTB4YTQ0ZiwgCTB4NWU0MzIyLCAgCTB4NjA0MzIyLCAJMHg1ZTQzMjIsIAkweDVlNDMyMn07Cit7IDB4NWU0MzIyLCAJMHhhNDRmLCAJMHg1ZTQzMjIsICAJMHg2MDQzMjIsIAkweDVlNDMyMiwgCTB4NWU0MzIyLAkweDVlNDMyMn07CiAjZWxzZQogI2lmZGVmIFJUTDgxOTJFCiBzdGF0aWMgdTMyIGVkY2Ffc2V0dGluZ19ETFtIVF9JT1RfUEVFUl9NQVhdID0KLXsgMHg1ZTQzMjIsIAkweDVlNDMyMiwgCTB4NWU0MzIyLCAJMHg2MDQzMjIsIAkweGE0NGYsIAkweDVlNDMyMn07Cit7IDB4NWU0MzIyLCAJMHg1ZTQzMjIsIAkweDVlNDMyMiwgCTB4NjA0MzIyLCAJMHhhNDRmLCAJMHg1ZTQzMjIsCTB4NWU0MzIyfTsKIHN0YXRpYyB1MzIgZWRjYV9zZXR0aW5nX1VMW0hUX0lPVF9QRUVSX01BWF0gPQoteyAweDVlNDMyMiwgCTB4YTQ0ZiwJCTB4NWU0MzIyLCAgCTB4NjA0MzIyLCAJMHg1ZTQzMjIsIAkweDVlNDMyMn07Cit7IDB4NWU0MzIyLCAJMHhhNDRmLAkJMHg1ZTQzMjIsICAJMHg2MDQzMjIsIAkweDVlNDMyMiwgCTB4NWU0MzIyLCAJMHg1ZTQzMjJ9OwogI2Vsc2UKIHN0YXRpYyB1MzIgZWRjYV9zZXR0aW5nX0RMW0hUX0lPVF9QRUVSX01BWF0gPQoteyAweDVlNDMyMiwgCTB4NWU0MzIyLCAJMHg1ZTQzMjIsIAkweDYwNDMyMiwgCTB4YTQ0ZiwgCTB4NWVhNDRmfTsKK3sgMHg1ZTQzMjIsIAkweDVlNDMyMiwgCTB4NWU0MzIyLCAJMHg2MDQzMjIsIAkweGE0NGYsIAkweDVlYTQ0ZiwgCTB4NWU0MzIyfTsKIHN0YXRpYyB1MzIgZWRjYV9zZXR0aW5nX1VMW0hUX0lPVF9QRUVSX01BWF0gPQoteyAweDVlNDMyMiwgCTB4YTQ0ZiwgCTB4NWU0MzIyLCAJMHg2MDQzMjIsIAkweDVlYTQ0ZiwgCTB4NWVhNDRmfTsKK3sgMHg1ZTQzMjIsIAkweGE0NGYsIAkweDVlNDMyMiwgCTB4NjA0MzIyLCAJMHg1ZWE0NGYsIAkweDVlYTQ0ZiwgCTB4NWU0MzIyfTsKICNlbmRpZgogI2VuZGlmCiAKQEAgLTI3NSw2ICsyNzcsMzAgQEAKICNlbmRpZgogCiAKKy8vIGNhbGwgdGhlIHNjcmlwdCBmaWxlIHRvIGVuYWJsZQordm9pZCBkbV9jaGVja19hY19kY19wb3dlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlzdGF0aWMgY2hhciAqYWNfZGNfY2hlY2tfc2NyaXB0X3BhdGggPSAiL2V0Yy9hY3BpL3dpcmVsZXNzLXJ0bC1hYy1kYy1wb3dlci5zaCI7CisJY2hhciAqYXJndltdID0ge2FjX2RjX2NoZWNrX3NjcmlwdF9wYXRoLERSVl9OQU1FLE5VTEx9OworCXN0YXRpYyBjaGFyICplbnZwW10gPSB7IkhPTUU9LyIsCisJCQkiVEVSTT1saW51eCIsCisJCQkiUEFUSD0vdXNyL2JpbjovYmluIiwKKwkJCSBOVUxMfTsKKworCWlmKHByaXYtPlJlc2V0UHJvZ3Jlc3MgPT0gUkVTRVRfVFlQRV9TSUxFTlQpCisJeworCQlSVF9UUkFDRSgoQ09NUF9JTklUIHwgQ09NUF9QT1dFUiB8IENPTVBfUkYpLCAiR1BJT0NoYW5nZVJGV29ya0l0ZW1DYWxsQmFjaygpOiBTaWxlbnQgUmVzZXRpbmchISEhISEhXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmKHByaXYtPmllZWU4MDIxMS0+c3RhdGUgIT0gSUVFRTgwMjExX0xJTktFRCkgeworCQlyZXR1cm47CisJfQorCWNhbGxfdXNlcm1vZGVoZWxwZXIoYWNfZGNfY2hlY2tfc2NyaXB0X3BhdGgsYXJndixlbnZwLDEpOworCisJcmV0dXJuOworfTsKIAogdm9pZCBoYWxfZG1fd2F0Y2hkb2coc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTI4Miw2ICszMDgsOCBAQAogCiAJLy9zdGF0aWMgdTggCXByZXZpb3VzX2Jzc2lkWzZdID17MH07CiAKKwlkbV9jaGVja19hY19kY19wb3dlcihkZXYpOworCiAJLypBZGQgYnkgYW15IDIwMDgvMDUvMTUgLHBvcnRpbmcgZnJvbSB3aW5kb3dzIGNvZGUuKi8KIAlkbV9jaGVja19yYXRlX2FkYXB0aXZlKGRldik7CiAJZG1fZHluYW1pY190eHBvd2VyKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2h3LmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX2h3LmgKaW5kZXggMzg4OTA4Zi4uMzQ2YmZiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV9ody5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfaHcuaApAQCAtODA4LDQgKzgwOCwxMiBAQAogI2RlZmluZSBHUEkgMHgxMDgKICNkZWZpbmUgR1BPIDB4MTA5CiAjZGVmaW5lIEdQRSAweDEwYQorCisjZGVmaW5lCUFOQVBBUl9GT1JfODE5MlBjaUUJCQkJCQkJMHgxNwkJLy8gQW5hbG9nIHBhcmFtZXRlciByZWdpc3RlcgorCisjZGVmaW5lCU1TUl9OT0xJTksJCQkJCTB4MDAKKyNkZWZpbmUJTVNSX0FESE9DCQkJCQkweDAxCisjZGVmaW5lCU1TUl9JTkZSQQkJCQkJMHgwMgorI2RlZmluZQlNU1JfQVAJCQkJCQkweDAzCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV93eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV93eC5jCmluZGV4IGQxZWI4OTIuLjBiMGYzOWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfd3guYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX3d4LmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlICJyODE5MkVfaHcuaCIKICNpbmNsdWRlICJyODE5MkVfd3guaCIKICNpZmRlZiBFTkFCTEVfRE9UMTFECi0jaW5jbHVkZSAiZG90MTFkLmgiCisjaW5jbHVkZSAiaWVlZTgwMjExL2RvdDExZC5oIgogI2VuZGlmCiAKICNkZWZpbmUgUkFURV9DT1VOVCAxMgpAQCAtNzAsNiArNzAsOSBAQAogCWludCByZXQ7CiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCisJaWYocHJpdi0+Ykh3UmFkaW9PZmYgPT0gdHJ1ZSkKKwkJcmV0dXJuIDA7CisKIAlkb3duKCZwcml2LT53eF9zZW0pOwogCiAJcmV0ID0gaWVlZTgwMjExX3d4X3NldF9yYXRlKHByaXYtPmllZWU4MDIxMSxpbmZvLHdycXUsZXh0cmEpOwpAQCAtODcsNiArOTAsOSBAQAogCWludCByZXQ7CiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOwogCisJaWYocHJpdi0+Ykh3UmFkaW9PZmYgPT0gdHJ1ZSkKKwkJcmV0dXJuIDA7CisKIAlkb3duKCZwcml2LT53eF9zZW0pOwogCiAJcmV0ID0gaWVlZTgwMjExX3d4X3NldF9ydHMocHJpdi0+aWVlZTgwMjExLGluZm8sd3JxdSxleHRyYSk7CkBAIC0xMTEsNiArMTE3LDkgQEAKIAlpbnQgcmV0OwogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAorCWlmKHByaXYtPmJId1JhZGlvT2ZmID09IHRydWUpCisJCXJldHVybiAwOworCiAJZG93bigmcHJpdi0+d3hfc2VtKTsKIAogCXJldCA9IGllZWU4MDIxMV93eF9zZXRfcG93ZXIocHJpdi0+aWVlZTgwMjExLGluZm8sd3JxdSxleHRyYSk7CkBAIC0yOTAsNiArMjk5LDkgQEAKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJaW50IHJldDsKIAorCWlmKHByaXYtPmJId1JhZGlvT2ZmID09IHRydWUpCisJCXJldHVybiAwOworCiAJZG93bigmcHJpdi0+d3hfc2VtKTsKIAogCXJldCA9IGllZWU4MDIxMV93eF9zZXRfcmF3dHgocHJpdi0+aWVlZTgwMjExLCBpbmZvLCB3cnF1LCBleHRyYSk7CkBAIC0zMjUsNiArMzM3LDkgQEAKIAlpbnQgZW5hYmxlID0gKHBhcm1zWzBdID4gMCk7CiAJc2hvcnQgcHJldiA9IHByaXYtPmNyY21vbjsKIAorCWlmKHByaXYtPmJId1JhZGlvT2ZmID09IHRydWUpCisJCXJldHVybiAwOworCiAJZG93bigmcHJpdi0+d3hfc2VtKTsKIAogCWlmKGVuYWJsZSkKQEAgLTM1Miw2ICszNjcsOSBAQAogCVJUX1JGX1BPV0VSX1NUQVRFCXJ0U3RhdGU7CiAJaW50IHJldDsKIAorCWlmKHByaXYtPmJId1JhZGlvT2ZmID09IHRydWUpCisJCXJldHVybiAwOworCiAJcnRTdGF0ZSA9IHByaXYtPmllZWU4MDIxMS0+ZVJGUG93ZXJTdGF0ZTsKIAlkb3duKCZwcml2LT53eF9zZW0pOwogI2lmZGVmIEVOQUJMRV9JUFMKQEAgLTM2Niw4ICszODQsMTAgQEAKIAkJCQkJcmV0dXJuIC0xOwogCQkJCX0KIAkJCQllbHNlewotCQkJCXByaW50aygiPT09PT09PT09PiVzKCk6IElQU0xlYXZlXG4iLF9fRlVOQ1RJT05fXyk7CisJCQkJCVJUX1RSQUNFKENPTVBfRVJSLCAiJXMoKTogSVBTTGVhdmVcbiIsX19GVU5DVElPTl9fKTsKKwkJCQkJZG93bigmcHJpdi0+aWVlZTgwMjExLT5pcHNfc2VtKTsKIAkJCQkJSVBTTGVhdmUoZGV2KTsKKwkJCQkJdXAoJnByaXYtPmllZWU4MDIxMS0+aXBzX3NlbSk7CiAJCQkJfQogCQkJfQogCQl9CkBAIC00MjUsNyArNDQ1LDcgQEAKIAkgKi8KIAogCS8qIH41IE1iL3MgcmVhbCAoODAyLjExYikgKi8KLQlyYW5nZS0+dGhyb3VnaHB1dCA9IDUgKiAxMDAwICogMTAwMDsKKwlyYW5nZS0+dGhyb3VnaHB1dCA9IDEzMCAqIDEwMDAgKiAxMDAwOwogCiAJLy8gVE9ETzogTm90IHVzZWQgaW4gODAyLjExYj8KIC8vCXJhbmdlLT5taW5fbndpZDsJLyogTWluaW1hbCBOV0lEIHdlIGFyZSBhYmxlIHRvIHNldCAqLwpAQCAtNDY4LDcgKzQ4OCw3IEBACiAJcmFuZ2UtPnBtdF9mbGFncyA9IElXX1BPV0VSX1RJTUVPVVQ7CiAJcmFuZ2UtPnBtX2NhcGEgPSBJV19QT1dFUl9QRVJJT0QgfCBJV19QT1dFUl9USU1FT1VUIHwgSVdfUE9XRVJfQUxMX1I7CiAJcmFuZ2UtPndlX3ZlcnNpb25fY29tcGlsZWQgPSBXSVJFTEVTU19FWFQ7Ci0JcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMTY7CisJcmFuZ2UtPndlX3ZlcnNpb25fc291cmNlID0gMTg7CiAKIC8vCXJhbmdlLT5yZXRyeV9jYXBhOwkvKiBXaGF0IHJldHJ5IG9wdGlvbnMgYXJlIHN1cHBvcnRlZCAqLwogLy8JcmFuZ2UtPnJldHJ5X2ZsYWdzOwkvKiBIb3cgdG8gZGVjb2RlIG1heC9taW4gcmV0cnkgbGltaXQgKi8KQEAgLTUxNyw3ICs1MzcsMTIgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2RldmljZSogaWVlZSA9IHByaXYtPmllZWU4MDIxMTsKIAlSVF9SRl9QT1dFUl9TVEFURQlydFN0YXRlOwogCWludCByZXQ7CisKKwlpZihwcml2LT5iSHdSYWRpb09mZiA9PSB0cnVlKQorCQlyZXR1cm4gMDsKKwogCXJ0U3RhdGUgPSBwcml2LT5pZWVlODAyMTEtPmVSRlBvd2VyU3RhdGU7CisKIAlpZighcHJpdi0+dXApIHJldHVybiAtRU5FVERPV047CiAJaWYgKHByaXYtPmllZWU4MDIxMS0+TGlua0RldGVjdEluZm8uYkJ1c3lUcmFmZmljID09IHRydWUpCiAJCXJldHVybiAtRUFHQUlOOwpAQCAtNTQ3LDggKzU3MiwxMCBAQAogCQkJCQlyZXR1cm4gLTE7CiAJCQkJfQogCQkJCWVsc2V7Ci0JCQkJCXByaW50aygiPT09PT09PT09PiVzKCk6IElQU0xlYXZlXG4iLF9fRlVOQ1RJT05fXyk7CisJCQkJCS8vUlRfVFJBQ0UoQ09NUF9QUywgIiVzKCk6IElQU0xlYXZlXG4iLF9fRlVOQ1RJT05fXyk7CisJCQkJCWRvd24oJnByaXYtPmllZWU4MDIxMS0+aXBzX3NlbSk7CiAJCQkJCUlQU0xlYXZlKGRldik7CisJCQkJCXVwKCZwcml2LT5pZWVlODAyMTEtPmlwc19zZW0pOwogCQkJCX0KIAkJCX0KIAkJfQpAQCAtNTgwLDYgKzYwNyw5IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAKKwlpZihwcml2LT5iSHdSYWRpb09mZiA9PSB0cnVlKQorCQlyZXR1cm4gMDsKKwogCWlmKCFwcml2LT51cCkgcmV0dXJuIC1FTkVURE9XTjsKIAogCWRvd24oJnByaXYtPnd4X3NlbSk7CkBAIC01OTksMjMgKzYyOSwxNiBAQAogCVJUX1JGX1BPV0VSX1NUQVRFCXJ0U3RhdGU7CiAJaW50IHJldDsKIAorCWlmKHByaXYtPmJId1JhZGlvT2ZmID09IHRydWUpCisJCXJldHVybiAwOworCiAJcnRTdGF0ZSA9IHByaXYtPmllZWU4MDIxMS0+ZVJGUG93ZXJTdGF0ZTsKIAlkb3duKCZwcml2LT53eF9zZW0pOworCiAjaWZkZWYgRU5BQkxFX0lQUwotCWlmKHByaXYtPmllZWU4MDIxMS0+UG93ZXJTYXZlQ29udHJvbC5iSW5hY3RpdmVQcyl7Ci0JCWlmKHJ0U3RhdGUgPT0gZVJmT2ZmKXsKLQkJCWlmKHByaXYtPmllZWU4MDIxMS0+UmZPZmZSZWFzb24gPiBSRl9DSEFOR0VfQllfSVBTKQotCQkJewotCQkJCVJUX1RSQUNFKENPTVBfRVJSLCAiJXMoKTogUkYgaXMgT0ZGLlxuIixfX0ZVTkNUSU9OX18pOwotCQkJCXVwKCZwcml2LT53eF9zZW0pOwotCQkJCXJldHVybiAtMTsKLQkJCX0KLQkJCWVsc2V7Ci0JCQkJcHJpbnRrKCI9PT09PT09PT0+JXMoKTogSVBTTGVhdmVcbiIsX19GVU5DVElPTl9fKTsKLQkJCQlJUFNMZWF2ZShkZXYpOwotCQkJfQotCQl9Ci0JfQorICAgICAgICBkb3duKCZwcml2LT5pZWVlODAyMTEtPmlwc19zZW0pOworICAgICAgICBJUFNMZWF2ZShkZXYpOworICAgICAgICB1cCgmcHJpdi0+aWVlZTgwMjExLT5pcHNfc2VtKTsKICNlbmRpZgogCXJldCA9IGllZWU4MDIxMV93eF9zZXRfZXNzaWQocHJpdi0+aWVlZTgwMjExLGEsd3JxdSxiKTsKIApAQCAtNjUwLDYgKzY3Myw5IEBACiAJaW50IHJldDsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAKKwlpZihwcml2LT5iSHdSYWRpb09mZiA9PSB0cnVlKQorCQlyZXR1cm4gMDsKKwogCWRvd24oJnByaXYtPnd4X3NlbSk7CiAKIAlyZXQgPSBpZWVlODAyMTFfd3hfc2V0X2ZyZXEocHJpdi0+aWVlZTgwMjExLCBhLCB3cnF1LCBiKTsKQEAgLTY3Myw2ICs2OTksOSBAQAogewogCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAorCWlmKHByaXYtPmJId1JhZGlvT2ZmID09IHRydWUpCisJCXJldHVybiAwOworCiAJaWYgKHdycXUtPmZyYWcuZGlzYWJsZWQpCiAJCXByaXYtPmllZWU4MDIxMS0+ZnRzID0gREVGQVVMVF9GUkFHX1RIUkVTSE9MRDsKIAllbHNlIHsKQEAgLTcxMSw4ICs3NDAsMTYgQEAKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAvLyAgICAgICAgc3RydWN0IHNvY2thZGRyICp0ZW1wID0gKHN0cnVjdCBzb2NrYWRkciAqKWF3cnE7CiAKKwlpZihwcml2LT5iSHdSYWRpb09mZiA9PSB0cnVlKQorCQlyZXR1cm4gMDsKKwogCWRvd24oJnByaXYtPnd4X3NlbSk7CiAKKyNpZmRlZiBFTkFCTEVfSVBTCisgICAgICAgIGRvd24oJnByaXYtPmllZWU4MDIxMS0+aXBzX3NlbSk7CisgICAgICAgIElQU0xlYXZlKGRldik7CisgICAgICAgIHVwKCZwcml2LT5pZWVlODAyMTEtPmlwc19zZW0pOworI2VuZGlmCiAJcmV0ID0gaWVlZTgwMjExX3d4X3NldF93YXAocHJpdi0+aWVlZTgwMjExLGluZm8sYXdycSxleHRyYSk7CiAKIAl1cCgmcHJpdi0+d3hfc2VtKTsKQEAgLTc1MywxNCArNzkwLDI0IEBACiAJdTMyIGh3a2V5WzRdPXswLDAsMCwwfTsKIAl1OCBtYXNrPTB4ZmY7CiAJdTMyIGtleV9pZHg9MDsKLQl1OCB6ZXJvX2FkZHJbNF1bNl0gPXsJezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwfSwKKwl1OCB6ZXJvX2FkZHJbNF1bNl0gPXt7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDB9LAogCQkJCXsweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMX0sCiAJCQkJezB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyfSwKIAkJCQl7MHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDN9IH07CiAJaW50IGk7CiAKKwlpZihwcml2LT5iSHdSYWRpb09mZiA9PSB0cnVlKQorCQlyZXR1cm4gMDsKKwogICAgICAgIGlmKCFwcml2LT51cCkgcmV0dXJuIC1FTkVURE9XTjsKIAorICAgICAgICBwcml2LT5pZWVlODAyMTEtPnd4X3NldF9lbmMgPSAxOworI2lmZGVmIEVOQUJMRV9JUFMKKyAgICAgICAgZG93bigmcHJpdi0+aWVlZTgwMjExLT5pcHNfc2VtKTsKKyAgICAgICAgSVBTTGVhdmUoZGV2KTsKKyAgICAgICAgdXAoJnByaXYtPmllZWU4MDIxMS0+aXBzX3NlbSk7CisjZW5kaWYKKwogCWRvd24oJnByaXYtPnd4X3NlbSk7CiAKIAlSVF9UUkFDRShDT01QX1NFQywgIlNldHRpbmcgU1cgd2VwIGtleSIpOwpAQCAtNzY4LDcgKzgxNSw2IEBACiAKIAl1cCgmcHJpdi0+d3hfc2VtKTsKIAotCiAJLy9zb21ldGltZXMsIHRoZSBsZW5ndGggaXMgemVybyB3aGlsZSB3ZSBkbyBub3QgdHlwZSBrZXkgdmFsdWUKIAlpZih3cnF1LT5lbmNvZGluZy5sZW5ndGghPTApewogCkBAIC04NjgsNiArOTE0LDggQEAKIAl9CiAjZW5kaWYKIAorCXByaXYtPmllZWU4MDIxMS0+d3hfc2V0X2VuYyA9IDA7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC04OTMsNiArOTQxLDkgQEAKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJaW50IGVyciA9IDA7CiAKKwlpZihwcml2LT5iSHdSYWRpb09mZiA9PSB0cnVlKQorCQlyZXR1cm4gMDsKKwogCWRvd24oJnByaXYtPnd4X3NlbSk7CiAKIAlpZiAod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9MSUZFVElNRSB8fApAQCAtOTg1LDYgKzEwMzYsMTAgQEAKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAKIAlzaG9ydCBlcnIgPSAwOworCisJaWYocHJpdi0+Ykh3UmFkaW9PZmYgPT0gdHJ1ZSkKKwkJcmV0dXJuIDA7CisKIAlkb3duKCZwcml2LT53eF9zZW0pOwogCS8vRE1FU0coImF0dGVtcHQgdG8gc2V0IHNlbnNpdml0eSB0byAlZGRiIix3cnF1LT5zZW5zLnZhbHVlKTsKIAlpZihwcml2LT5yZl9zZXRfc2VucyA9PSBOVUxMKSB7CkBAIC0xMDExLDcgKzEwNjYsMTkgQEAKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqIGllZWUgPSBwcml2LT5pZWVlODAyMTE7CiAKKwlpZihwcml2LT5iSHdSYWRpb09mZiA9PSB0cnVlKQorCQlyZXR1cm4gMDsKKwogCWRvd24oJnByaXYtPnd4X3NlbSk7CisKKwlwcml2LT5pZWVlODAyMTEtPnd4X3NldF9lbmMgPSAxOworCisjaWZkZWYgRU5BQkxFX0lQUworICAgICAgICBkb3duKCZwcml2LT5pZWVlODAyMTEtPmlwc19zZW0pOworICAgICAgICBJUFNMZWF2ZShkZXYpOworICAgICAgICB1cCgmcHJpdi0+aWVlZTgwMjExLT5pcHNfc2VtKTsKKyNlbmRpZgorCiAJcmV0ID0gaWVlZTgwMjExX3d4X3NldF9lbmNvZGVfZXh0KGllZWUsIGluZm8sIHdycXUsIGV4dHJhKTsKIAogCXsKQEAgLTEwOTEsNiArMTE1OCw3IEBACiAJfQogCiBlbmRfaHdfc2VjOgorCXByaXYtPmllZWU4MDIxMS0+d3hfc2V0X2VuYyA9IDA7CiAJdXAoJnByaXYtPnd4X3NlbSk7CiAJcmV0dXJuIHJldDsKIApAQCAtMTEwMiw2ICsxMTcwLDEwIEBACiAJaW50IHJldD0wOwogCS8vcHJpbnRrKCI9PT09PiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CiAJc3RydWN0IHI4MTkyX3ByaXYgKnByaXYgPSBpZWVlODAyMTFfcHJpdihkZXYpOworCisJaWYocHJpdi0+Ykh3UmFkaW9PZmYgPT0gdHJ1ZSkKKwkJcmV0dXJuIDA7CisKIAlkb3duKCZwcml2LT53eF9zZW0pOwogCXJldCA9IGllZWU4MDIxMV93eF9zZXRfYXV0aChwcml2LT5pZWVlODAyMTEsIGluZm8sICYoZGF0YS0+cGFyYW0pLCBleHRyYSk7CiAJdXAoJnByaXYtPnd4X3NlbSk7CkBAIC0xMTE2LDYgKzExODgsMTAgQEAKIAogCWludCByZXQ9MDsKIAlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisKKwlpZihwcml2LT5iSHdSYWRpb09mZiA9PSB0cnVlKQorCQlyZXR1cm4gMDsKKwogCWRvd24oJnByaXYtPnd4X3NlbSk7CiAJcmV0ID0gaWVlZTgwMjExX3d4X3NldF9tbG1lKHByaXYtPmllZWU4MDIxMSwgaW5mbywgd3JxdSwgZXh0cmEpOwogCXVwKCZwcml2LT53eF9zZW0pOwpAQCAtMTEyOSw2ICsxMjA1LDEwIEBACiAJICAgLy9wcmludGsoIj09PT0+JXMoKSwgbGVuOiVkXG4iLCBfX0ZVTkNUSU9OX18sIGRhdGEtPmxlbmd0aCk7CiAJaW50IHJldD0wOwogICAgICAgICBzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisKKwlpZihwcml2LT5iSHdSYWRpb09mZiA9PSB0cnVlKQorCQlyZXR1cm4gMDsKKwogICAgICAgICBkb3duKCZwcml2LT53eF9zZW0pOwogICAgICAgICByZXQgPSBpZWVlODAyMTFfd3hfc2V0X2dlbl9pZShwcml2LT5pZWVlODAyMTEsIGV4dHJhLCBkYXRhLT5kYXRhLmxlbmd0aCk7CiAgICAgICAgIHVwKCZwcml2LT53eF9zZW0pOwpAQCAtMTE0Miw2ICsxMjIyLDQyIEBACiAJcmV0dXJuIC0xOwogfQogCisvLyBjaGVjayBhYy9kYyBzdGF0dXMgd2l0aCB0aGUgaGVscCBvZiB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uICovCitzdGF0aWMgaW50IHI4MTkyX3d4X2FkYXB0ZXJfcG93ZXJfc3RhdHVzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCXN0cnVjdCBpd19yZXF1ZXN0X2luZm8gKmluZm8sCisJCXVuaW9uIGl3cmVxX2RhdGEgKndycXUsIGNoYXIgKmV4dHJhKQoreworCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKyNpZmRlZiBFTkFCTEVfTFBTCisJUFJUX1BPV0VSX1NBVkVfQ09OVFJPTCBwUFNDID0gKFBSVF9QT1dFUl9TQVZFX0NPTlRST0wpKCYocHJpdi0+aWVlZTgwMjExLT5Qb3dlclNhdmVDb250cm9sKSk7CisJc3RydWN0IGllZWU4MDIxMV9kZXZpY2UqIGllZWUgPSBwcml2LT5pZWVlODAyMTE7CisjZW5kaWYKKwlkb3duKCZwcml2LT53eF9zZW0pOworCisjaWZkZWYgRU5BQkxFX0xQUworCVJUX1RSQUNFKENPTVBfUE9XRVIsICIlcygpOiAlc1xuIixfX0ZVTkNUSU9OX18sICgqZXh0cmEgPT0gIDYpPyJEQyBwb3dlciI6IkFDIHBvd2VyIik7CisJLy8gaWVlZS0+cHMgc2hhbGwgbm90IGJlIHNldCB1bmRlciBEQyBtb2RlLCBvdGhlcndpc2UgaXQgY29uZmxpY3QKKwkvLyB3aXRoIExlaXN1cmUgcG93ZXIgc2F2ZSBtb2RlIHNldHRpbmcuCisJLy8KKwlpZigqZXh0cmEgfHwgcHJpdi0+Zm9yY2VfbHBzKSB7CisJCXByaXYtPnBzX2ZvcmNlID0gZmFsc2U7CisJCXBQU0MtPmJMZWlzdXJlUHMgPSB0cnVlOworCX0gZWxzZSB7CisJCS8vTFpNIGZvciBQUy1Qb2xsIEFJRCBpc3N1ZS4gMDkwNDI5CisJCWlmKHByaXYtPmllZWU4MDIxMS0+c3RhdGUgPT0gSUVFRTgwMjExX0xJTktFRCkKKwkJCUxlaXN1cmVQU0xlYXZlKGRldik7CisKKwkJcHJpdi0+cHNfZm9yY2UgPSB0cnVlOworCQlwUFNDLT5iTGVpc3VyZVBzID0gZmFsc2U7CisJCWllZWUtPnBzID0gKmV4dHJhOworCX0KKworI2VuZGlmCisJdXAoJnByaXYtPnd4X3NlbSk7CisJcmV0dXJuIDA7CisKK30KKwogCiBzdGF0aWMgaXdfaGFuZGxlciByODE5Ml93eF9oYW5kbGVyc1tdID0KIHsKQEAgLTEyMzEsNzIgKzEzNDcsMjggQEAKIAkJU0lPQ0lXRklSU1RQUklWICsgMHgyLAogCQlJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgMCwgInJhd3R4IgogCX0KLSNpZmRlZiBKT0hOX0lPQ1RMCi0JLAotCXsKLQkJU0lPQ0lXRklSU1RQUklWICsgMHgzLAotICAgICAgICAgICAgICAgIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAwLCAicmVhZFJGIgotCX0KLQksCi0JewotCQlTSU9DSVdGSVJTVFBSSVYgKyAweDQsCi0gICAgICAgICAgICAgICAgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsIDAsICJ3cml0ZVJGIgotCX0KLQksCi0JewotCQlTSU9DSVdGSVJTVFBSSVYgKyAweDUsCi0gICAgICAgICAgICAgICAgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsIDAsICJyZWFkQkIiCi0JfQotCSwKLQl7Ci0JCVNJT0NJV0ZJUlNUUFJJViArIDB4NiwKLSAgICAgICAgICAgICAgICBJV19QUklWX1RZUEVfSU5UIHwgSVdfUFJJVl9TSVpFX0ZJWEVEIHwgMSwgMCwgIndyaXRlQkIiCi0JfQotICAgICAgICAsCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBTSU9DSVdGSVJTVFBSSVYgKyAweDcsCi0gICAgICAgICAgICAgICAgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsIDAsICJyZWFkbmljYiIKLSAgICAgICAgfQotICAgICAgICAsCi0gICAgICAgIHsKLSAgICAgICAgICAgICAgICBTSU9DSVdGSVJTVFBSSVYgKyAweDgsCi0gICAgICAgICAgICAgICAgSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsIDAsICJ3cml0ZW5pY2IiCi0gICAgICAgIH0KLSAgICAgICAgLAotICAgICAgICB7Ci0gICAgICAgICAgICAgICAgU0lPQ0lXRklSU1RQUklWICsgMHg5LAotICAgICAgICAgICAgICAgIElXX1BSSVZfVFlQRV9JTlQgfCBJV19QUklWX1NJWkVfRklYRUQgfCAxLCAwLCAiYXBpbmZvIgotICAgICAgICB9Ci0KLSNlbmRpZgogCSwKIAl7CiAJCVNJT0NJV0ZJUlNUUFJJViArIDB4MywKIAkJSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRCB8IDEsIDAsICJmb3JjZXJlc2V0IgogCiAJfQorCSwKKwl7CisJCVNJT0NJV0ZJUlNUUFJJViArIDB4NCwKKwkJSVdfUFJJVl9UWVBFX0lOVCB8IElXX1BSSVZfU0laRV9GSVhFRHwxLCBJV19QUklWX1RZUEVfTk9ORSwKKwkJInNldF9wb3dlciIKKwl9CiAKIH07CiAKIAogc3RhdGljIGl3X2hhbmRsZXIgcjgxOTJfcHJpdmF0ZV9oYW5kbGVyW10gPSB7Ci0vLwlyODE5Ml93eF9zZXRfbW9uaXRvciwgIC8qIFNJT0NJV0ZJUlNUUFJJViAqLwogCXI4MTkyX3d4X3NldF9jcmNtb24sICAgLypTSU9DSVdTRUNPTkRQUklWKi8KLS8vCXI4MTkyX3d4X3NldF9mb3JjZWFzc29jaWF0ZSwKLS8vCXI4MTkyX3d4X3NldF9iZWFjb25pbnRlcnZhbCwKLS8vCXI4MTkyX3d4X3NldF9tb25pdG9yX3R5cGUsCiAJcjgxOTJfd3hfc2V0X3NjYW5fdHlwZSwKIAlyODE5Ml93eF9zZXRfcmF3dHgsCi0jaWZkZWYgSk9ITl9JT0NUTAotCXI4MTkyX3d4X3JlYWRfcmVncywKLQlyODE5Ml93eF93cml0ZV9yZWdzLAotCXI4MTkyX3d4X3JlYWRfYmIsCi0JcjgxOTJfd3hfd3JpdGVfYmIsCi0gICAgICAgIHI4MTkyX3d4X3JlYWRfbmljYiwKLSAgICAgICAgcjgxOTJfd3hfd3JpdGVfbmljYiwKLQlyODE5Ml93eF9nZXRfYXBfc3RhdHVzCi0jZW5kaWYKIAlyODE5Ml93eF9mb3JjZV9yZXNldCwKKwlyODE5Ml93eF9hZGFwdGVyX3Bvd2VyX3N0YXR1cywKIH07CiAKIC8vI2lmIFdJUkVMRVNTX0VYVCA+PSAxNwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV93eC5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTkyRV93eC5oCmluZGV4IDc5ZWJkYjYuLjA0NzAzMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5MkVfd3guaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOTJFX3d4LmgKQEAgLTE1LDcgKzE1LDYgQEAKICNpZm5kZWYgUjgxODBfV1hfSAogI2RlZmluZSBSODE4MF9XWF9ICiAvLyNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgotLy8jaW5jbHVkZSAiaWVlZTgwMjExLmgiCiBleHRlcm4gc3RydWN0IGl3X2hhbmRsZXJfZGVmIHI4MTkyX3d4X2hhbmRsZXJzX2RlZjsKIC8qIEVuYWJsZSAgdGhlIHJ0bDgxOXhfY29yZS5jIHRvIHNoYXJlIHRoaXMgZnVuY3Rpb24sIGRhdmlkIDIwMDguOS4yMiAqLwogZXh0ZXJuIHN0cnVjdCBpd19zdGF0aXN0aWNzICpyODE5Ml9nZXRfd2lyZWxlc3Nfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX2NtZHBrdC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTl4RV9jbWRwa3QuYwppbmRleCAyYWFhNGUxLi44N2MzMzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX2NtZHBrdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5eEVfY21kcGt0LmMKQEAgLTEzNSw3ICsxMzUsNyBAQAogICAgICAgICAgICAgICogVHJhbnNmb3JtIGZyb20gbGl0dGxlIGVuZGlhbiB0byBiaWcgZW5kaWFuCiAgICAgICAgICAgICAgKiBhbmQgcGVuZGluZyAgemVybwogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzZWdfcHRyID0gc2tiLT50YWlsOworICAgICAgICAgICAgc2VnX3B0ciA9IHNrYl90YWlsX3BvaW50ZXIoc2tiKTsKICAgICAgICAgICAgIGZvcihpPTAgOyBpIDwgZnJhZ19sZW5ndGg7IGkrPTQpIHsKICAgICAgICAgICAgICAgICAqc2VnX3B0cisrID0gKChpKzApPGZyYWdfbGVuZ3RoKT9jb2RlX3ZpcnR1YWxfYWRkcmVzc1tpKzNdOjA7CiAgICAgICAgICAgICAgICAgKnNlZ19wdHIrKyA9ICgoaSsxKTxmcmFnX2xlbmd0aCk/Y29kZV92aXJ0dWFsX2FkZHJlc3NbaSsyXTowOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTl4RV9maXJtd2FyZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTl4RV9maXJtd2FyZS5jCmluZGV4IDFmOWU0MTMuLjc5M2ExNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5eEVfZmlybXdhcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX2Zpcm13YXJlLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogUHJvY2VkdXJlOiAgICBJbml0IGJvb3QgY29kZS9maXJtd2FyZSBjb2RlL2RhdGEgc2Vzc2lvbgorICogUHJvY2VkdXJlOiBJbml0IGJvb3QgY29kZS9maXJtd2FyZSBjb2RlL2RhdGEgc2Vzc2lvbgogICoKICAqIERlc2NyaXB0aW9uOiBUaGlzIHJvdXRpbmUgd2lsbCBpbnRpYWxpemUgZmlybXdhcmUuIElmIGFueSBlcnJvciBvY2N1cnMKICAqCQlkdXJpbmcgdGhlIGluaXRpYWxpemF0aW9uIHByb2Nlc3MsIHRoZSByb3V0aW5lIHNoYWxsIHRlcm1pbmF0ZQpAQCAtNywxOSArNywyMSBAQAogICoJCU5kaXNPcGVuRmlsZSBvbmx5IGZyb20gTWluaXBvcnRJbml0aWFsaXplLgogICoKICAqIEFyZ3VtZW50czogICBUaGUgcG9pbnRlciBvZiB0aGUgYWRhcHRlcgotCisgKgogICogUmV0dXJuczoKICAqCQlORElTX1NUQVRVU19GQUlMVVJFIC0gdGhlIGZvbGxvd2luZyBpbml0aWFsaXphdGlvbiBwcm9jZXNzCiAgKgkJCQkgICAgICBzaG91bGQgYmUgdGVybWluYXRlZAogICoJCU5ESVNfU1RBVFVTX1NVQ0NFU1MgLSBpZiBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiBwcm9jZXNzCiAgKgkJCQkgICAgICBzdWNjZXNzCiAgKi8KKwogI2luY2x1ZGUgInI4MTkyRS5oIgogI2luY2x1ZGUgInI4MTkyRV9ody5oIgorCiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KIAogLyogSXQgc2hvdWxkIGJlIGRvdWJsZSB3b3JkIGFsaWdubWVudCAqLwotI2RlZmluZSBHRVRfQ09NTUFORF9QQUNLRVRfRlJBR19USFJFU0hPTEQodikJKDQgKiAodiAvIDQpIC0gOCkKKyNkZWZpbmUgR0VUX0NPTU1BTkRfUEFDS0VUX0ZSQUdfVEhSRVNIT0xEKHYpICg0ICogKHYgLyA0KSAtIDgpCiAKIGVudW0gZmlybXdhcmVfaW5pdF9zdGVwIHsKIAlGV19JTklUX1NURVAwX0JPT1QgPSAwLApAQCAtNDcsMTcgKzQ5LDE3IEBACiBzdGF0aWMgYm9vbCBmd19kb3dubG9hZF9jb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpjb2RlX3ZpcnR1YWxfYWRkcmVzcywKIAkJCSAgICAgdTMyIGJ1ZmZlcl9sZW4pCiB7Ci0Jc3RydWN0IHI4MTkyX3ByaXYgICAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JYm9vbCAJCSAgICBydF9zdGF0dXMgPSB0cnVlOwotCXUxNgkJICAgIGZyYWdfdGhyZXNob2xkOwotCXUxNgkJICAgIGZyYWdfbGVuZ3RoLCBmcmFnX29mZnNldCA9IDA7Ci0JaW50CQkgICAgaTsKKwlzdHJ1Y3QgcjgxOTJfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CisJYm9vbCBydF9zdGF0dXMgPSB0cnVlOworCXUxNiBmcmFnX3RocmVzaG9sZDsKKwl1MTYgZnJhZ19sZW5ndGgsIGZyYWdfb2Zmc2V0ID0gMDsKKwlpbnQgaTsKIAotCXJ0X2Zpcm13YXJlCSAgICAqcGZpcm13YXJlID0gcHJpdi0+cEZpcm13YXJlOwotCXN0cnVjdCBza19idWZmCSAgICAqc2tiOwotCXVuc2lnbmVkIGNoYXIJICAgICpzZWdfcHRyOwotCWNiX2Rlc2MJCSAgICAqdGNiX2Rlc2M7Ci0JdTggICAgICAgICAgICAgICAgICBiTGFzdEluaVBrdDsKKwlydF9maXJtd2FyZSAqcGZpcm13YXJlID0gcHJpdi0+cEZpcm13YXJlOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgY2hhciAqc2VnX3B0cjsKKwljYl9kZXNjICp0Y2JfZGVzYzsKKwl1OCBiTGFzdEluaVBrdDsKIAogCWZpcm13YXJlX2luaXRfcGFyYW0oZGV2KTsKIApAQCAtODksMTAgKzkxLDE3IEBACiAJCSAqIFRyYW5zZm9ybSBmcm9tIGxpdHRsZSBlbmRpYW4gdG8gYmlnIGVuZGlhbiBhbmQgcGVuZGluZyB6ZXJvCiAJCSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgZnJhZ19sZW5ndGg7IGkgKz0gNCkgewotCQkJKnNlZ19wdHIrKyA9ICgoaSswKSA8IGZyYWdfbGVuZ3RoKSA/IGNvZGVfdmlydHVhbF9hZGRyZXNzW2krM10gOiAwOwotCQkJKnNlZ19wdHIrKyA9ICgoaSsxKSA8IGZyYWdfbGVuZ3RoKSA/IGNvZGVfdmlydHVhbF9hZGRyZXNzW2krMl0gOiAwOwotCQkJKnNlZ19wdHIrKyA9ICgoaSsyKSA8IGZyYWdfbGVuZ3RoKSA/IGNvZGVfdmlydHVhbF9hZGRyZXNzW2krMV0gOiAwOwotCQkJKnNlZ19wdHIrKyA9ICgoaSszKSA8IGZyYWdfbGVuZ3RoKSA/IGNvZGVfdmlydHVhbF9hZGRyZXNzW2krMF0gOiAwOworCQkJKnNlZ19wdHIrKyA9ICgoaSswKSA8IGZyYWdfbGVuZ3RoKSA/IFwKKwkJCQkJY29kZV92aXJ0dWFsX2FkZHJlc3NbaSszXSA6IDA7CisKKwkJCSpzZWdfcHRyKysgPSAoKGkrMSkgPCBmcmFnX2xlbmd0aCkgPyBcCisJCQkJCWNvZGVfdmlydHVhbF9hZGRyZXNzW2krMl0gOiAwOworCisJCQkqc2VnX3B0cisrID0gKChpKzIpIDwgZnJhZ19sZW5ndGgpID8gXAorCQkJCQljb2RlX3ZpcnR1YWxfYWRkcmVzc1tpKzFdIDogMDsKKworCQkJKnNlZ19wdHIrKyA9ICgoaSszKSA8IGZyYWdfbGVuZ3RoKSA/IFwKKwkJCQkJY29kZV92aXJ0dWFsX2FkZHJlc3NbaSswXSA6IDA7CiAJCX0KIAkJdGNiX2Rlc2MtPnR4YnVmX3NpemUgPSAodTE2KWk7CiAJCXNrYl9wdXQoc2tiLCBpKTsKQEAgLTIwNCwxNiArMjEzLDE2IEBACiAKIGJvb2wgaW5pdF9maXJtd2FyZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCByODE5Ml9wcml2IAkqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7Ci0JYm9vbAkJCXJ0X3N0YXR1cyA9IFRSVUU7Ci0JdTMyCQkJZmlsZV9sZW5ndGggPSAwOwotCXU4CQkJKm1hcHBlZF9maWxlID0gTlVMTDsKLQl1MzIJCQlpbml0X3N0ZXAgPSAwOwotCWVudW0gb3B0X3JzdF90eXBlCXJzdF9vcHQgPSBPUFRfU1lTVEVNX1JFU0VUOworCXN0cnVjdCByODE5Ml9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKKwlib29sIHJ0X3N0YXR1cyA9IHRydWU7CisJdTMyIGZpbGVfbGVuZ3RoID0gMDsKKwl1OCAqbWFwcGVkX2ZpbGUgPSBOVUxMOworCXUzMiBpbml0X3N0ZXAgPSAwOworCWVudW0gb3B0X3JzdF90eXBlIHJzdF9vcHQgPSBPUFRfU1lTVEVNX1JFU0VUOwogCWVudW0gZmlybXdhcmVfaW5pdF9zdGVwCXN0YXJ0aW5nX3N0YXRlID0gRldfSU5JVF9TVEVQMF9CT09UOwogCi0JcnRfZmlybXdhcmUJCSpwZmlybXdhcmUgPSBwcml2LT5wRmlybXdhcmU7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlIAkqZndfZW50cnk7CisJcnRfZmlybXdhcmUgKnBmaXJtd2FyZSA9IHByaXYtPnBGaXJtd2FyZTsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OwogCWNvbnN0IGNoYXIgKmZ3X25hbWVbM10gPSB7ICJSVEw4MTkyRS9ib290LmltZyIsCiAJCQkJICAgIlJUTDgxOTJFL21haW4uaW1nIiwKIAkJCQkgICAiUlRMODE5MkUvZGF0YS5pbWcifTsKQEAgLTI0MCwzMSArMjQ5LDM3IEBACiAJICogRG93bmxvYWQgYm9vdCwgbWFpbiwgYW5kIGRhdGEgaW1hZ2UgZm9yIFN5c3RlbSByZXNldC4KIAkgKiBEb3dubG9hZCBkYXRhIGltYWdlIGZvciBmaXJtd2FyZSByZXNldGEKIAkgKi8KLQlmb3IgKGluaXRfc3RlcCA9IHN0YXJ0aW5nX3N0YXRlOyBpbml0X3N0ZXAgPD0gRldfSU5JVF9TVEVQMl9EQVRBOyBpbml0X3N0ZXArKykgeworCWZvciAoaW5pdF9zdGVwID0gc3RhcnRpbmdfc3RhdGU7IGluaXRfc3RlcCA8PSBGV19JTklUX1NURVAyX0RBVEE7IFwKKwkJCWluaXRfc3RlcCsrKSB7CiAJCS8qCiAJCSAqIE9wZW4gSW1hZ2UgZmlsZSwgYW5kIG1hcCBmaWxlIHRvIGNvbnRpbmVvdXMgbWVtb3J5IGlmIG9wZW4gZmlsZSBzdWNjZXNzLgogCQkgKiBvciByZWFkIGltYWdlIGZpbGUgZnJvbSBhcnJheS4gRGVmYXVsdCBsb2FkIGZyb20gSU1HIGZpbGUKIAkJICovCiAJCWlmIChyc3Rfb3B0ID09IE9QVF9TWVNURU1fUkVTRVQpIHsKIAkJCWlmIChwZmlybXdhcmUtPmZpcm13YXJlX2J1Zl9zaXplW2luaXRfc3RlcF0gPT0gMCkgewotCQkJCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIGZ3X25hbWVbaW5pdF9zdGVwXSwgJnByaXYtPnBkZXYtPmRldik7CisJCQkJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwKKwkJCQkJZndfbmFtZVtpbml0X3N0ZXBdLCAmcHJpdi0+cGRldi0+ZGV2KTsKKwogCQkJCWlmIChyYyA8IDApIHsKIAkJCQkJUlRfVFJBQ0UoQ09NUF9GSVJNV0FSRSwgInJlcXVlc3QgZmlybXdhcmUgZmFpbCFcbiIpOwogCQkJCQlnb3RvIGRvd25sb2FkX2Zpcm13YXJlX2ZhaWw7CiAJCQkJfQogCiAJCQkJaWYgKGZ3X2VudHJ5LT5zaXplID4gc2l6ZW9mKHBmaXJtd2FyZS0+ZmlybXdhcmVfYnVmW2luaXRfc3RlcF0pKSB7Ci0JCQkJCVJUX1RSQUNFKENPTVBfRklSTVdBUkUsICJpbWcgZmlsZSBzaXplIGV4Y2VlZCB0aGUgY29udGFpbmVyIGJ1ZmZlciBmYWlsIVxuIik7CisJCQkJCVJUX1RSQUNFKENPTVBfRklSTVdBUkUsIFwKKwkJCQkJCSJpbWcgZmlsZSBzaXplIGV4Y2VlZCB0aGUgY29udGFpbmVyIGJ1ZmZlciBmYWlsIVxuIik7CiAJCQkJCWdvdG8gZG93bmxvYWRfZmlybXdhcmVfZmFpbDsKIAkJCQl9CiAKIAkJCQlpZiAoaW5pdF9zdGVwICE9IEZXX0lOSVRfU1RFUDFfTUFJTikgewotCQkJCQltZW1jcHkocGZpcm13YXJlLT5maXJtd2FyZV9idWZbaW5pdF9zdGVwXSwgZndfZW50cnktPmRhdGEsIGZ3X2VudHJ5LT5zaXplKTsKKwkJCQkJbWVtY3B5KHBmaXJtd2FyZS0+ZmlybXdhcmVfYnVmW2luaXRfc3RlcF0sCisJCQkJCQkJZndfZW50cnktPmRhdGEsIGZ3X2VudHJ5LT5zaXplKTsKIAkJCQkJcGZpcm13YXJlLT5maXJtd2FyZV9idWZfc2l6ZVtpbml0X3N0ZXBdID0gZndfZW50cnktPnNpemU7CiAKIAkJCQl9IGVsc2UgewogCQkJCQltZW1zZXQocGZpcm13YXJlLT5maXJtd2FyZV9idWZbaW5pdF9zdGVwXSwgMCwgMTI4KTsKLQkJCQkJbWVtY3B5KCZwZmlybXdhcmUtPmZpcm13YXJlX2J1Zltpbml0X3N0ZXBdWzEyOF0sIGZ3X2VudHJ5LT5kYXRhLCBmd19lbnRyeS0+c2l6ZSk7CisJCQkJCW1lbWNweSgmcGZpcm13YXJlLT5maXJtd2FyZV9idWZbaW5pdF9zdGVwXVsxMjhdLCBmd19lbnRyeS0+ZGF0YSwKKwkJCQkJCQkJCWZ3X2VudHJ5LT5zaXplKTsKIAkJCQkJcGZpcm13YXJlLT5maXJtd2FyZV9idWZfc2l6ZVtpbml0X3N0ZXBdID0gZndfZW50cnktPnNpemUrMTI4OwogCQkJCX0KIApAQCAtMjczLDYgKzI4OCw3IEBACiAJCQl9CiAJCQltYXBwZWRfZmlsZSA9IHBmaXJtd2FyZS0+ZmlybXdhcmVfYnVmW2luaXRfc3RlcF07CiAJCQlmaWxlX2xlbmd0aCA9IHBmaXJtd2FyZS0+ZmlybXdhcmVfYnVmX3NpemVbaW5pdF9zdGVwXTsKKwogCQl9IGVsc2UgaWYgKHJzdF9vcHQgPT0gT1BUX0ZJUk1XQVJFX1JFU0VUKSB7CiAJCQkvKiB3ZSBvbmx5IG5lZWQgdG8gZG93bmxvYWQgZGF0YS5pbWcgaGVyZSAqLwogCQkJbWFwcGVkX2ZpbGUgPSBwZmlybXdhcmUtPmZpcm13YXJlX2J1Zltpbml0X3N0ZXBdOwpAQCAtMzQ2LDcgKzM2MiwxMCBAQAogCiBkb3dubG9hZF9maXJtd2FyZV9mYWlsOgogCVJUX1RSQUNFKENPTVBfRVJSLCAiRVJSIGluICVzKClcbiIsIF9fZnVuY19fKTsKLQlydF9zdGF0dXMgPSBGQUxTRTsKKwlydF9zdGF0dXMgPSBmYWxzZTsKIAlyZXR1cm4gcnRfc3RhdHVzOwotCiB9CisKK01PRFVMRV9GSVJNV0FSRSgiUlRMODE5MkUvYm9vdC5pbWciKTsKK01PRFVMRV9GSVJNV0FSRSgiUlRMODE5MkUvbWFpbi5pbWciKTsKK01PRFVMRV9GSVJNV0FSRSgiUlRMODE5MkUvZGF0YS5pbWciKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5eEVfcGh5LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX3BoeS5jCmluZGV4IGM0NDA1OWEuLjdiZDRmYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5eEVfcGh5LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTl4RV9waHkuYwpAQCAtNSw3ICs1LDcgQEAKICNpbmNsdWRlICJyODE5eEVfcGh5LmgiCiAjaW5jbHVkZSAicjgxOTJFX2RtLmgiCiAjaWZkZWYgRU5BQkxFX0RPVDExRAotI2luY2x1ZGUgImRvdDExZC5oIgorI2luY2x1ZGUgImllZWU4MDIxMS9kb3QxMWQuaCIKICNlbmRpZgogc3RhdGljIHUzMiBSRl9DSEFOTkVMX1RBQkxFX1pFQlJBW10gPSB7CiAJMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5eEVfcGh5LmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX3BoeS5oCmluZGV4IGZhNzdhYmUuLjQxZTBkNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5eEVfcGh5LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTl4RV9waHkuaApAQCAtMSw0MyArMSw0NiBAQAogI2lmbmRlZiBfUjgxOVhVX1BIWV9ICiAjZGVmaW5lIF9SODE5WFVfUEhZX0gKLS8qIENoYW5uZWwgc3dpdGNoOlRoZSBzaXplIG9mIGNvbW1hbmQgdGFibGVzIGZvciBzd2l0Y2ggY2hhbm5lbCovCisKKy8qIENoYW5uZWwgc3dpdGNoOiB0aGUgc2l6ZSBvZiBjb21tYW5kIHRhYmxlcyBmb3Igc3dpdGNoIGNoYW5uZWwgKi8KICNkZWZpbmUgTUFYX1BSRUNNRF9DTlQgMTYKICNkZWZpbmUgTUFYX1JGREVQRU5EQ01EX0NOVCAxNgogI2RlZmluZSBNQVhfUE9TVENNRF9DTlQgMTYKIAogI2lmZGVmIFJUTDgxOTBQCiAjZGVmaW5lIE1BQ1BIWV9BcnJheV9QR0xlbmd0aCAyMQotI2RlZmluZSBSdGw4MTlYTUFDUEhZX0FycmF5X1BHCQkJUnRsODE5MFBjaU1BQ1BIWV9BcnJheV9QRwotI2RlZmluZSBSdGw4MTlYTUFDUEhZX0FycmF5CQkJCVJ0bDgxOTBQY2lNQUNQSFlfQXJyYXkKKyNkZWZpbmUgUnRsODE5WE1BQ1BIWV9BcnJheV9QRyBSdGw4MTkwUGNpTUFDUEhZX0FycmF5X1BHCisjZGVmaW5lIFJ0bDgxOVhNQUNQSFlfQXJyYXkgUnRsODE5MFBjaU1BQ1BIWV9BcnJheQogI2RlZmluZSBSYWRpb0NfQXJyYXlMZW5ndGggMjQ2CiAjZGVmaW5lIFJhZGlvRF9BcnJheUxlbmd0aCA3OAotI2RlZmluZSBSdGw4MTlYUmFkaW9BX0FycmF5CQkJCQlSdGw4MTkwUGNpUmFkaW9BX0FycmF5Ci0jZGVmaW5lIFJ0bDgxOVhSYWRpb0JfQXJyYXkJCQkJCVJ0bDgxOTBQY2lSYWRpb0JfQXJyYXkKLSNkZWZpbmUgUnRsODE5WFJhZGlvQ19BcnJheQkJCQkJUnRsODE5MFBjaVJhZGlvQ19BcnJheQotI2RlZmluZSBSdGw4MTlYUmFkaW9EX0FycmF5CQkJCQlSdGw4MTkwUGNpUmFkaW9EX0FycmF5Ci0jZGVmaW5lIFJ0bDgxOVhBR0NUQUJfQXJyYXkJCQkJUnRsODE5MFBjaUFHQ1RBQl9BcnJheQotI2RlZmluZSBQSFlfUkVHQXJyYXlMZW5ndGggCQkJCTI4MAotI2RlZmluZSBSdGw4MTlYUEhZX1JFR0FycmF5CQkJCVJ0bDgxOTBQY2lQSFlfUkVHQXJyYXkKLSNkZWZpbmUgUEhZX1JFR18xVDJSQXJyYXlMZW5ndGggCQkyODAKLSNkZWZpbmUgUnRsODE5WFBIWV9SRUdfMVQyUkFycmF5CQlSdGw4MTkwUGNpUEhZX1JFR18xVDJSQXJyYXkKKyNkZWZpbmUgUnRsODE5WFJhZGlvQV9BcnJheSBSdGw4MTkwUGNpUmFkaW9BX0FycmF5CisjZGVmaW5lIFJ0bDgxOVhSYWRpb0JfQXJyYXkgUnRsODE5MFBjaVJhZGlvQl9BcnJheQorI2RlZmluZSBSdGw4MTlYUmFkaW9DX0FycmF5IFJ0bDgxOTBQY2lSYWRpb0NfQXJyYXkKKyNkZWZpbmUgUnRsODE5WFJhZGlvRF9BcnJheSBSdGw4MTkwUGNpUmFkaW9EX0FycmF5CisjZGVmaW5lIFJ0bDgxOVhBR0NUQUJfQXJyYXkgUnRsODE5MFBjaUFHQ1RBQl9BcnJheQorI2RlZmluZSBQSFlfUkVHQXJyYXlMZW5ndGggMjgwCisjZGVmaW5lIFJ0bDgxOVhQSFlfUkVHQXJyYXkgUnRsODE5MFBjaVBIWV9SRUdBcnJheQorI2RlZmluZSBQSFlfUkVHXzFUMlJBcnJheUxlbmd0aCAyODAKKyNkZWZpbmUgUnRsODE5WFBIWV9SRUdfMVQyUkFycmF5IFJ0bDgxOTBQY2lQSFlfUkVHXzFUMlJBcnJheQogI2VuZGlmCiAKLQkjaWZkZWYgUlRMODE5MkUKLQkjZGVmaW5lIE1BQ1BIWV9BcnJheV9QR0xlbmd0aCAzMAotCSNkZWZpbmUgUnRsODE5WE1BQ1BIWV9BcnJheV9QRwkJCVJ0bDgxOTJQY2lFTUFDUEhZX0FycmF5X1BHCi0JI2RlZmluZSBSdGw4MTlYTUFDUEhZX0FycmF5CQkJCVJ0bDgxOTJQY2lFTUFDUEhZX0FycmF5Ci0JI2RlZmluZSBSYWRpb0NfQXJyYXlMZW5ndGggMQotCSNkZWZpbmUgUmFkaW9EX0FycmF5TGVuZ3RoIDEKLQkjZGVmaW5lIFJ0bDgxOVhSYWRpb0FfQXJyYXkJCQkJCVJ0bDgxOTJQY2lFUmFkaW9BX0FycmF5Ci0JI2RlZmluZSBSdGw4MTlYUmFkaW9CX0FycmF5CQkJCQlSdGw4MTkyUGNpRVJhZGlvQl9BcnJheQotCSNkZWZpbmUgUnRsODE5WFJhZGlvQ19BcnJheQkJCQkJUnRsODE5MlBjaUVSYWRpb0NfQXJyYXkKLQkjZGVmaW5lIFJ0bDgxOVhSYWRpb0RfQXJyYXkJCQkJCVJ0bDgxOTJQY2lFUmFkaW9EX0FycmF5Ci0JI2RlZmluZSBSdGw4MTlYQUdDVEFCX0FycmF5CQkJCVJ0bDgxOTJQY2lFQUdDVEFCX0FycmF5Ci0JI2RlZmluZSBQSFlfUkVHQXJyYXlMZW5ndGggCQkJCTEKLQkjZGVmaW5lIFJ0bDgxOVhQSFlfUkVHQXJyYXkJCQkJUnRsODE5MlBjaUVQSFlfUkVHQXJyYXkKLQkjZGVmaW5lIFBIWV9SRUdfMVQyUkFycmF5TGVuZ3RoIAkJMjk2Ci0JI2RlZmluZSBSdGw4MTlYUEhZX1JFR18xVDJSQXJyYXkJCVJ0bDgxOTJQY2lFUEhZX1JFR18xVDJSQXJyYXkKLQkjZW5kaWYKKworI2lmZGVmIFJUTDgxOTJFCisjZGVmaW5lIE1BQ1BIWV9BcnJheV9QR0xlbmd0aCAzMAorI2RlZmluZSBSdGw4MTlYTUFDUEhZX0FycmF5X1BHIFJ0bDgxOTJQY2lFTUFDUEhZX0FycmF5X1BHCisjZGVmaW5lIFJ0bDgxOVhNQUNQSFlfQXJyYXkgUnRsODE5MlBjaUVNQUNQSFlfQXJyYXkKKyNkZWZpbmUgUmFkaW9DX0FycmF5TGVuZ3RoIDEKKyNkZWZpbmUgUmFkaW9EX0FycmF5TGVuZ3RoIDEKKyNkZWZpbmUgUnRsODE5WFJhZGlvQV9BcnJheSBSdGw4MTkyUGNpRVJhZGlvQV9BcnJheQorI2RlZmluZSBSdGw4MTlYUmFkaW9CX0FycmF5IFJ0bDgxOTJQY2lFUmFkaW9CX0FycmF5CisjZGVmaW5lIFJ0bDgxOVhSYWRpb0NfQXJyYXkgUnRsODE5MlBjaUVSYWRpb0NfQXJyYXkKKyNkZWZpbmUgUnRsODE5WFJhZGlvRF9BcnJheSBSdGw4MTkyUGNpRVJhZGlvRF9BcnJheQorI2RlZmluZSBSdGw4MTlYQUdDVEFCX0FycmF5IFJ0bDgxOTJQY2lFQUdDVEFCX0FycmF5CisjZGVmaW5lIFBIWV9SRUdBcnJheUxlbmd0aCAxCisjZGVmaW5lIFJ0bDgxOVhQSFlfUkVHQXJyYXkgUnRsODE5MlBjaUVQSFlfUkVHQXJyYXkKKyNkZWZpbmUgUEhZX1JFR18xVDJSQXJyYXlMZW5ndGggMjk2CisjZGVmaW5lIFJ0bDgxOVhQSFlfUkVHXzFUMlJBcnJheSBSdGw4MTkyUGNpRVBIWV9SRUdfMVQyUkFycmF5CisjZW5kaWYKKwogI2RlZmluZSBBR0NUQUJfQXJyYXlMZW5ndGggMzg0CiAjZGVmaW5lIE1BQ1BIWV9BcnJheUxlbmd0aCAxOAogCkBAIC00NSw3ICs0OCw3IEBACiAjZGVmaW5lIFJhZGlvQl9BcnJheUxlbmd0aCA3OAogCiAKLXR5cGVkZWYgZW51bSBfU3dDaG5sQ21kSUR7Cit0eXBlZGVmIGVudW0gX1N3Q2hubENtZElEIHsKIAlDbWRJRF9FbmQsCiAJQ21kSURfU2V0VHhQb3dlckxldmVsLAogCUNtZElEX0JCUmVnV3JpdGUxMCwKQEAgLTUzLDE2ICs1NiwxNSBAQAogCUNtZElEX1dyaXRlUG9ydFVzaG9ydCwKIAlDbWRJRF9Xcml0ZVBvcnRVY2hhciwKIAlDbWRJRF9SRl9Xcml0ZVJlZywKLX1Td0NobmxDbWRJRDsKK30gU3dDaG5sQ21kSUQ7CiAKLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1EZWZpbmUgc3RydWN0dXJlLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogMS4gU3dpdGNoIGNoYW5uZWwgcmVsYXRlZCAqLwotdHlwZWRlZiBzdHJ1Y3QgX1N3Q2hubENtZHsKLQlTd0NobmxDbWRJRAlDbWRJRDsKLQl1MzIJCQlQYXJhMTsKLQl1MzIJCQlQYXJhMjsKLQl1MzIJCQltc0RlbGF5OwotfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBTd0NobmxDbWQ7CisvKiBzd2l0Y2ggY2hhbm5lbCBkYXRhIHN0cnVjdHVyZSAqLwordHlwZWRlZiBzdHJ1Y3QgX1N3Q2hubENtZCB7CisJU3dDaG5sQ21kSUQgQ21kSUQ7CisJdTMyIFBhcmExOworCXUzMiBQYXJhMjsKKwl1MzIgbXNEZWxheTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIFN3Q2hubENtZDsKIAogZXh0ZXJuIHUzMiBydGw4MTlYTUFDUEhZX0FycmF5X1BHW107CiBleHRlcm4gdTMyIHJ0bDgxOVhQSFlfUkVHXzFUMlJBcnJheVtdOwpAQCAtNzIsNTQgKzc0LDkwIEBACiBleHRlcm4gdTMyIHJ0bDgxOVhSYWRpb0NfQXJyYXlbXTsKIGV4dGVybiB1MzIgcnRsODE5WFJhZGlvRF9BcnJheVtdOwogCi10eXBlZGVmIGVudW0gX0hXOTBfQkxPQ0t7Cit0eXBlZGVmIGVudW0gX0hXOTBfQkxPQ0sgewogCUhXOTBfQkxPQ0tfTUFDID0gMCwKIAlIVzkwX0JMT0NLX1BIWTAgPSAxLAogCUhXOTBfQkxPQ0tfUEhZMSA9IDIsCiAJSFc5MF9CTE9DS19SRiA9IDMsCi0JSFc5MF9CTE9DS19NQVhJTVVNID0gNCwgLy8gTmV2ZXIgdXNlIHRoaXMKLX1IVzkwX0JMT0NLX0UsICpQSFc5MF9CTE9DS19FOworCS8qIERvbid0IGV2ZXIgdXNlIHRoaXMuICovCisJSFc5MF9CTE9DS19NQVhJTVVNID0gNCwKK30gSFc5MF9CTE9DS19FLCAqUEhXOTBfQkxPQ0tfRTsKIAotdHlwZWRlZiBlbnVtIF9SRjkwX1JBRElPX1BBVEh7Ci0JUkY5MF9QQVRIX0EgPSAwLAkJCS8vUmFkaW8gUGF0aCBBCi0JUkY5MF9QQVRIX0IgPSAxLAkJCS8vUmFkaW8gUGF0aCBCCi0JUkY5MF9QQVRIX0MgPSAyLAkJCS8vUmFkaW8gUGF0aCBDCi0JUkY5MF9QQVRIX0QgPSAzLAkJCS8vUmFkaW8gUGF0aCBECi0JUkY5MF9QQVRIX01BWAkJCQkvL01heCBSRiBudW1iZXIgOTIgc3VwcG9ydAotfVJGOTBfUkFESU9fUEFUSF9FLCAqUFJGOTBfUkFESU9fUEFUSF9FOwordHlwZWRlZiBlbnVtIF9SRjkwX1JBRElPX1BBVEggeworCS8qIFJhZGlvIHBhdGhzICovCisJUkY5MF9QQVRIX0EgPSAwLAorCVJGOTBfUEFUSF9CID0gMSwKKwlSRjkwX1BBVEhfQyA9IDIsCisJUkY5MF9QQVRIX0QgPSAzLAogCi0jZGVmaW5lIGJNYXNrQnl0ZTAgICAgICAgICAgICAgICAgMHhmZgotI2RlZmluZSBiTWFza0J5dGUxICAgICAgICAgICAgICAgIDB4ZmYwMAotI2RlZmluZSBiTWFza0J5dGUyICAgICAgICAgICAgICAgIDB4ZmYwMDAwCi0jZGVmaW5lIGJNYXNrQnl0ZTMgICAgICAgICAgICAgICAgMHhmZjAwMDAwMAotI2RlZmluZSBiTWFza0hXb3JkICAgICAgICAgICAgICAgIDB4ZmZmZjAwMDAKLSNkZWZpbmUgYk1hc2tMV29yZCAgICAgICAgICAgICAgICAweDAwMDBmZmZmCi0jZGVmaW5lIGJNYXNrRFdvcmQgICAgICAgICAgICAgICAgMHhmZmZmZmZmZgorCS8qIE1heCBSRiBudW1iZXIgOTIgc3VwcG9ydCAqLworCVJGOTBfUEFUSF9NQVgKK30gUkY5MF9SQURJT19QQVRIX0UsICpQUkY5MF9SQURJT19QQVRIX0U7CiAKLS8vZXh0ZXJuIHUzMiBydGw4MTkyX0NhbGN1bGF0ZUJpdFNoaWZ0KHUzMiBkd0JpdE1hc2spOwotZXh0ZXJuIHU4IHJ0bDgxOTJfcGh5X0NoZWNrSXNMZWdhbFJGUGF0aChzdHJ1Y3QgbmV0X2RldmljZSogZGV2LCB1MzIgZVJGUGF0aCk7Ci1leHRlcm4gdm9pZCBydGw4MTkyX3NldEJCcmVnKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHUzMiBkd1JlZ0FkZHIsIHUzMiBkd0JpdE1hc2ssIHUzMiBkd0RhdGEpOwotZXh0ZXJuIHUzMiBydGw4MTkyX1F1ZXJ5QkJSZWcoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgdTMyIGR3UmVnQWRkciwgdTMyIGR3Qml0TWFzayk7Ci0vL2V4dGVybiB1MzIgcnRsODE5Ml9waHlfUkZTZXJpYWxSZWFkKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIFJGOTBfUkFESU9fUEFUSF9FIGVSRlBhdGgsIHUzMiBPZmZzZXQpOwotLy9leHRlcm4gdm9pZCBydGw4MTkyX3BoeV9SRlNlcmlhbFdyaXRlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIFJGOTBfUkFESU9fUEFUSF9FIGVSRlBhdGgsIHUzMiBPZmZzZXQsIHUzMiBEYXRhKTsKLWV4dGVybiB2b2lkIHJ0bDgxOTJfcGh5X1NldFJGUmVnKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIFJGOTBfUkFESU9fUEFUSF9FIGVSRlBhdGgsIHUzMiBSZWdBZGRyLCB1MzIgQml0TWFzaywgdTMyIERhdGEpOwotZXh0ZXJuIHUzMiBydGw4MTkyX3BoeV9RdWVyeVJGUmVnKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIFJGOTBfUkFESU9fUEFUSF9FIGVSRlBhdGgsIHUzMiBSZWdBZGRyLCB1MzIgQml0TWFzayk7Ci1leHRlcm4gdm9pZCBydGw4MTkyX3BoeV9jb25maWdtYWMoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci1leHRlcm4gdm9pZCBydGw4MTkyX3BoeUNvbmZpZ0JCKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHU4IENvbmZpZ1R5cGUpOwotLy9leHRlcm4gdm9pZCBydGw4MTkyX0luaXRCQlJGUmVnRGVmKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotZXh0ZXJuIFJUX1NUQVRVUyBydGw4MTkyX3BoeV9jaGVja0JCQW5kUkYoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgSFc5MF9CTE9DS19FIENoZWNrQmxvY2ssIFJGOTBfUkFESU9fUEFUSF9FIGVSRlBhdGgpOwotLy9leHRlcm4gUlRfU1RBVFVTIHJ0bDgxOTJfQkJfQ29uZmlnX1BhcmFGaWxlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotZXh0ZXJuIFJUX1NUQVRVUyBydGw4MTkyX0JCQ29uZmlnKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYpOwotZXh0ZXJuIHZvaWQgcnRsODE5Ml9waHlfZ2V0VHhQb3dlcihzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLWV4dGVybiB2b2lkIHJ0bDgxOTJfcGh5X3NldFR4UG93ZXIoc3RydWN0IG5ldF9kZXZpY2UqIGRldiwgdTggY2hhbm5lbCk7CisjZGVmaW5lIGJNYXNrQnl0ZTAgMHhmZgorI2RlZmluZSBiTWFza0J5dGUxIDB4ZmYwMAorI2RlZmluZSBiTWFza0J5dGUyIDB4ZmYwMDAwCisjZGVmaW5lIGJNYXNrQnl0ZTMgMHhmZjAwMDAwMAorI2RlZmluZSBiTWFza0hXb3JkIDB4ZmZmZjAwMDAKKyNkZWZpbmUgYk1hc2tMV29yZCAweDAwMDBmZmZmCisjZGVmaW5lIGJNYXNrRFdvcmQgMHhmZmZmZmZmZgorCisvKmV4dGVybiB1MzIgcnRsODE5Ml9DYWxjdWxhdGVCaXRTaGlmdCh1MzIgZHdCaXRNYXNrKTsKKworZXh0ZXJuIHUzMiBydGw4MTkyX3BoeV9SRlNlcmlhbFJlYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCVJGOTBfUkFESU9fUEFUSF9FIGVSRlBhdGgsIHUzMiBPZmZzZXQpOworCitleHRlcm4gdm9pZCBydGw4MTkyX3BoeV9SRlNlcmlhbFdyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCVJGOTBfUkFESU9fUEFUSF9FIGVSRlBhdGgsIHUzMiBPZmZzZXQsIHUzMiBEYXRhKTsKKworZXh0ZXJuIHZvaWQgcnRsODE5Ml9Jbml0QkJSRlJlZ0RlZihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworZXh0ZXJuIFJUX1NUQVRVUyBydGw4MTkyX0JCX0NvbmZpZ19QYXJhRmlsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsgKi8KKworZXh0ZXJuIHU4IHJ0bDgxOTJfcGh5X0NoZWNrSXNMZWdhbFJGUGF0aChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZVJGUGF0aCk7CisKK2V4dGVybiB2b2lkIHJ0bDgxOTJfc2V0QkJyZWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGR3UmVnQWRkciwKKwkJCSAgICAgdTMyIGR3Qml0TWFzaywgdTMyIGR3RGF0YSk7CisKK2V4dGVybiB1MzIgcnRsODE5Ml9RdWVyeUJCUmVnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkd1JlZ0FkZHIsCisJCQkgICAgIHUzMiBkd0JpdE1hc2spOworCitleHRlcm4gdm9pZCBydGw4MTkyX3BoeV9TZXRSRlJlZyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQlSRjkwX1JBRElPX1BBVEhfRSBlUkZQYXRoLCB1MzIgUmVnQWRkciwKKwkJdTMyIEJpdE1hc2ssIHUzMiBEYXRhKTsKKworZXh0ZXJuIHUzMiBydGw4MTkyX3BoeV9RdWVyeVJGUmVnKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCVJGOTBfUkFESU9fUEFUSF9FIGVSRlBhdGgsIHUzMiBSZWdBZGRyLCB1MzIgQml0TWFzayk7CisKK2V4dGVybiB2b2lkIHJ0bDgxOTJfcGh5X2NvbmZpZ21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKworZXh0ZXJuIHZvaWQgcnRsODE5Ml9waHlDb25maWdCQihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCBDb25maWdUeXBlKTsKKworZXh0ZXJuIFJUX1NUQVRVUyBydGw4MTkyX3BoeV9jaGVja0JCQW5kUkYoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJSFc5MF9CTE9DS19FIENoZWNrQmxvY2ssIFJGOTBfUkFESU9fUEFUSF9FIGVSRlBhdGgpOworCitleHRlcm4gUlRfU1RBVFVTIHJ0bDgxOTJfQkJDb25maWcoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKK2V4dGVybiB2b2lkIHJ0bDgxOTJfcGh5X2dldFR4UG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKK2V4dGVybiB2b2lkIHJ0bDgxOTJfcGh5X3NldFR4UG93ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggY2hhbm5lbCk7CisKIGV4dGVybiBSVF9TVEFUVVMgcnRsODE5Ml9waHlfUkZDb25maWcoc3RydWN0IG5ldF9kZXZpY2UqIGRldik7Ci1leHRlcm4gdm9pZCBydGw4MTkyX3BoeV91cGRhdGVJbml0R2FpbihzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKLWV4dGVybiB1OCBydGw4MTkyX3BoeV9Db25maWdSRldpdGhIZWFkZXJGaWxlKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIFJGOTBfUkFESU9fUEFUSF9FCWVSRlBhdGgpOwogCi1leHRlcm4gdTggcnRsODE5Ml9waHlfU3dDaG5sKHN0cnVjdCBuZXRfZGV2aWNlKiBkZXYsIHU4IGNoYW5uZWwpOwotZXh0ZXJuIHZvaWQgcnRsODE5Ml9TZXRCV01vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgSFRfQ0hBTk5FTF9XSURUSAlCYW5kd2lkdGgsIEhUX0VYVENITkxfT0ZGU0VUIE9mZnNldCk7CitleHRlcm4gdm9pZCBydGw4MTkyX3BoeV91cGRhdGVJbml0R2FpbihzdHJ1Y3QgbmV0X2RldmljZSogZGV2KTsKKworZXh0ZXJuIHU4IHJ0bDgxOTJfcGh5X0NvbmZpZ1JGV2l0aEhlYWRlckZpbGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJUkY5MF9SQURJT19QQVRIX0UgZVJGUGF0aCk7CisKK2V4dGVybiB1OCBydGw4MTkyX3BoeV9Td0Nobmwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggY2hhbm5lbCk7CisKK2V4dGVybiB2b2lkIHJ0bDgxOTJfU2V0QldNb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCUhUX0NIQU5ORUxfV0lEVEggQmFuZHdpZHRoLCBIVF9FWFRDSE5MX09GRlNFVCBPZmZzZXQpOworCiBleHRlcm4gdm9pZCBydGw4MTkyX1N3Q2hubF9Xb3JrSXRlbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwogZXh0ZXJuIHZvaWQgcnRsODE5Ml9TZXRCV01vZGVXb3JrSXRlbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwogZXh0ZXJuIHZvaWQgSW5pdGlhbEdhaW44MTl4UGNpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4IE9wZXJhdGlvbik7CiAKLSNlbmRpZgorI2VuZGlmIC8qIF9SODE5WFVfUEhZX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5eEVfcGh5cmVnLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MmUvcjgxOXhFX3BoeXJlZy5oCmluZGV4IDM3ZjBmZWUuLmQ1ZGUyNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyZS9yODE5eEVfcGh5cmVnLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJlL3I4MTl4RV9waHlyZWcuaApAQCAtMzgsNiArMzgsOCBAQAogI2RlZmluZQlNQ1NfVFhBR0MJCQkJMHgzNDAJLy8gTUNTIEFHQwogI2RlZmluZQlDQ0tfVFhBR0MJCQkJMHgzNDgJLy8gQ0NLIEFHQwogCisjZGVmaW5lCU1hY0Jsa0N0cmwJCQkJMHg0MDMJCQkJCS8vIE1hYyBibG9jayBvbi9vZmYgY29udHJvbCByZWdpc3RlcgorCiAvL3BhZ2U4CiAjZGVmaW5lIHJGUEdBMF9SRk1PRCAgICAgICAgICAgICAgCQkweDgwMCAgLy9SRiBtb2RlICYgQ0NLIFR4U0MKICNkZWZpbmUgckZQR0EwX1R4SW5mbyAgICAgICAgICAgICAJCTB4ODA0CkBAIC03OSw1NSArODEsNzAgQEAKICNkZWZpbmUgckZQR0EwX1hCX0xTU0lSZWFkQmFjayAgICAJMHg4YTQKICNkZWZpbmUgckZQR0EwX1hDX0xTU0lSZWFkQmFjayAgICAJMHg4YTgKICNkZWZpbmUgckZQR0EwX1hEX0xTU0lSZWFkQmFjayAgICAJMHg4YWMKLSNkZWZpbmUgckZQR0EwX1BTRFJlcG9ydCAgICAgICAgICAJCTB4OGI0CisjZGVmaW5lIHJGUEdBMF9QU0RSZXBvcnQJCTB4OGI0CiAjZGVmaW5lIHJGUEdBMF9YQUJfUkZJbnRlcmZhY2VSQiAgCTB4OGUwCiAjZGVmaW5lIHJGUEdBMF9YQ0RfUkZJbnRlcmZhY2VSQiAgCTB4OGU0CiAKLS8vcGFnZSA5Ci0jZGVmaW5lIHJGUEdBMV9SRk1PRCAgICAgICAgICAgICAgCQkweDkwMCAgLy9SRiBtb2RlICYgT0ZETSBUeFNDCi0jZGVmaW5lIHJGUEdBMV9UeEJsb2NrICAgICAgICAgICAgCQkweDkwNAotI2RlZmluZSByRlBHQTFfRGVidWdTZWxlY3QgICAgICAgIAkJMHg5MDgKLSNkZWZpbmUgckZQR0ExX1R4SW5mbyAgICAgICAgICAgICAJCTB4OTBjCisvKiBQYWdlIDkgLSBSRiBtb2RlICYgT0ZETSBUeFNDICovCisjZGVmaW5lIHJGUEdBMV9SRk1PRCAgICAgIAkJMHg5MDAKKyNkZWZpbmUgckZQR0ExX1R4QmxvY2sgICAgICAgICAgICAJMHg5MDQKKyNkZWZpbmUgckZQR0ExX0RlYnVnU2VsZWN0ICAgICAgICAJMHg5MDgKKyNkZWZpbmUgckZQR0ExX1R4SW5mbyAgICAgICAgICAgICAJMHg5MGMKIAotLy9wYWdlIGEKLSNkZWZpbmUgckNDSzBfU3lzdGVtICAgICAgICAgICAgICAJCTB4YTAwCi0jZGVmaW5lIHJDQ0swX0FGRVNldHRpbmcgICAgICAgICAgCQkweGEwNAotI2RlZmluZSByQ0NLMF9DQ0EgICAgICAgICAgICAgICAgIAkJCTB4YTA4Ci0jZGVmaW5lIHJDQ0swX1J4QUdDMSAgICAgICAgICAgICAgCQkweGEwYyAgLy9BR0MgZGVmYXVsdCB2YWx1ZSwgc2F0dXJhdGlvbiBsZXZlbAotI2RlZmluZSByQ0NLMF9SeEFHQzIgICAgICAgICAgICAgIAkJMHhhMTAgIC8vQUdDICYgREFHQwotI2RlZmluZSByQ0NLMF9SeEhQICAgICAgICAgICAgICAgIAkJMHhhMTQKLSNkZWZpbmUgckNDSzBfRFNQUGFyYW1ldGVyMSAgICAgICAJMHhhMTggIC8vVGltaW5nIHJlY292ZXJ5ICYgQ2hhbm5lbCBlc3RpbWF0aW9uIHRocmVzaG9sZAotI2RlZmluZSByQ0NLMF9EU1BQYXJhbWV0ZXIyICAgICAgIAkweGExYyAgLy9TUSB0aHJlc2hvbGQKLSNkZWZpbmUgckNDSzBfVHhGaWx0ZXIxICAgICAgICAgICAJCTB4YTIwCi0jZGVmaW5lIHJDQ0swX1R4RmlsdGVyMiAgICAgICAgICAgCQkweGEyNAotI2RlZmluZSByQ0NLMF9EZWJ1Z1BvcnQgICAgICAgICAgIAkJMHhhMjggIC8vZGVidWcgcG9ydCBhbmQgVHggZmlsdGVyMwotI2RlZmluZSByQ0NLMF9GYWxzZUFsYXJtUmVwb3J0ICAgIAkweGEyYyAgLy8weGEyZAotI2RlZmluZSByQ0NLMF9UUlNTSVJlcG9ydCAgICAgICAgIAkJMHhhNTAKLSNkZWZpbmUgckNDSzBfUnhSZXBvcnQgICAgICAgICAgICAJCTB4YTU0ICAvLzB4YTU3Ci0jZGVmaW5lIHJDQ0swX0ZBQ291bnRlckxvd2VyICAgICAgCTB4YTVjICAvLzB4YTViCi0jZGVmaW5lIHJDQ0swX0ZBQ291bnRlclVwcGVyICAgICAgCTB4YTU4ICAvLzB4YTVjCisvKiBQYWdlIGEgKi8KKyNkZWZpbmUgckNDSzBfU3lzdGVtICAgICAgICAgICAgICAJMHhhMDAKKyNkZWZpbmUgckNDSzBfQUZFU2V0dGluZyAgICAgICAgICAJMHhhMDQKKyNkZWZpbmUgckNDSzBfQ0NBICAgICAgICAgICAgICAgICAJMHhhMDgKKy8qIEFHQyBkZWZhdWx0IHZhbHVlLCBzYXR1cmF0aW9uIGxldmVsICovCisjZGVmaW5lIHJDQ0swX1J4QUdDMSAgICAgICAgICAgICAgCTB4YTBjCisvKiBBR0MgJiBEQUdDICovCisjZGVmaW5lIHJDQ0swX1J4QUdDMiAgICAgICAgICAgICAgCTB4YTEwCisjZGVmaW5lIHJDQ0swX1J4SFAgICAgICAgICAgICAgICAgCTB4YTE0CisvKiBUaW1pbmcgcmVjb3ZlcnkgJiBjaGFubmVsIGVzdGltYXRpb24gdGhyZXNob2xkICovCisjZGVmaW5lIHJDQ0swX0RTUFBhcmFtZXRlcjEgICAgICAgCTB4YTE4CisvKiBTUSB0aHJlc2hvbGQgKi8KKyNkZWZpbmUgckNDSzBfRFNQUGFyYW1ldGVyMiAgICAgICAJMHhhMWMKKyNkZWZpbmUgckNDSzBfVHhGaWx0ZXIxICAgICAgICAgICAJMHhhMjAKKyNkZWZpbmUgckNDSzBfVHhGaWx0ZXIyICAgICAgICAgICAJMHhhMjQKKy8qIERlYnVnIHBvcnQgYW5kIFRYIGZpbHRlciAzICovCisjZGVmaW5lIHJDQ0swX0RlYnVnUG9ydCAgICAgICAgICAgCTB4YTI4CisjZGVmaW5lIHJDQ0swX0ZhbHNlQWxhcm1SZXBvcnQgICAgCTB4YTJjCisjZGVmaW5lIHJDQ0swX1RSU1NJUmVwb3J0ICAgICAgICAgCTB4YTUwCisjZGVmaW5lIHJDQ0swX1J4UmVwb3J0ICAgICAgICAgICAgCTB4YTU0CisjZGVmaW5lIHJDQ0swX0ZBQ291bnRlckxvd2VyICAgICAgCTB4YTVjCisjZGVmaW5lIHJDQ0swX0ZBQ291bnRlclVwcGVyICAgICAgCTB4YTU4CiAKLS8vcGFnZSBjCi0jZGVmaW5lIHJPRkRNMF9MU1RGICAgICAgICAgICAgICAgCQkweGMwMAorLyogUGFnZSBjICovCisjZGVmaW5lIHJPRkRNMF9MU1RGICAgICAgICAgICAgICAJMHhjMDAKICNkZWZpbmUgck9GRE0wX1RSeFBhdGhFbmFibGUgICAgICAJMHhjMDQKLSNkZWZpbmUgck9GRE0wX1RSTXV4UGFyICAgICAgICAgICAJCTB4YzA4Ci0jZGVmaW5lIHJPRkRNMF9UUlNXSXNvbGF0aW9uICAgICAgCQkweGMwYwotI2RlZmluZSByT0ZETTBfWEFSeEFGRSAgICAgICAgICAgIAkJMHhjMTAgIC8vUnhJUSBEQyBvZmZzZXQsIFJ4IGRpZ2l0YWwgZmlsdGVyLCBEQyBub3RjaCBmaWx0ZXIKLSNkZWZpbmUgck9GRE0wX1hBUnhJUUltYmFsYW5jZSAgICAJMHhjMTQgIC8vUnhJUSBpbWJsYW5jZSBtYXRyaXgKLSNkZWZpbmUgck9GRE0wX1hCUnhBRkUgICAgICAgICAgICAJCTB4YzE4CisjZGVmaW5lIHJPRkRNMF9UUk11eFBhciAgICAgICAgICAgCTB4YzA4CisjZGVmaW5lIHJPRkRNMF9UUlNXSXNvbGF0aW9uICAgICAgCTB4YzBjCisvKiBSeElRIERDIG9mZnNldCwgUnggZGlnaXRhbCBmaWx0ZXIsIERDIG5vdGNoIGZpbHRlciAqLworI2RlZmluZSByT0ZETTBfWEFSeEFGRSAgICAgICAgICAgIAkweGMxMAorLyogUnhJUSBpbWJsYW5jZSBtYXRyaXggKi8KKyNkZWZpbmUgck9GRE0wX1hBUnhJUUltYmFsYW5jZSAgICAJMHhjMTQKKyNkZWZpbmUgck9GRE0wX1hCUnhBRkUgICAgICAgICAgICAJMHhjMTgKICNkZWZpbmUgck9GRE0wX1hCUnhJUUltYmFsYW5jZSAgICAJMHhjMWMKLSNkZWZpbmUgck9GRE0wX1hDUnhBRkUgICAgICAgICAgICAJCTB4YzIwCisjZGVmaW5lIHJPRkRNMF9YQ1J4QUZFICAgICAgICAgICAJMHhjMjAKICNkZWZpbmUgck9GRE0wX1hDUnhJUUltYmFsYW5jZSAgICAJMHhjMjQKLSNkZWZpbmUgck9GRE0wX1hEUnhBRkUgICAgICAgICAgICAJCTB4YzI4CisjZGVmaW5lIHJPRkRNMF9YRFJ4QUZFICAgICAgICAgICAgCTB4YzI4CiAjZGVmaW5lIHJPRkRNMF9YRFJ4SVFJbWJhbGFuY2UgICAgCTB4YzJjCi0jZGVmaW5lIHJPRkRNMF9SeERldGVjdG9yMSAgICAgICAgCQkweGMzMCAgLy9QRCxCVyAmIFNCRAotI2RlZmluZSByT0ZETTBfUnhEZXRlY3RvcjIgICAgICAgIAkJMHhjMzQgIC8vU0JEICYgRmFtZSBTeW5jLgotI2RlZmluZSByT0ZETTBfUnhEZXRlY3RvcjMgICAgICAgIAkJMHhjMzggIC8vRnJhbWUgU3luYy4KLSNkZWZpbmUgck9GRE0wX1J4RGV0ZWN0b3I0ICAgICAgICAJCTB4YzNjICAvL1BELCBTQkQsIEZyYW1lIFN5bmMgJiBTaG9ydC1HSQotI2RlZmluZSByT0ZETTBfUnhEU1AgICAgICAgICAgICAgIAkJMHhjNDAgIC8vUnggU3luYyBQYXRoCi0jZGVmaW5lIHJPRkRNMF9DRk9hbmREQUdDICAgICAgICAgCTB4YzQ0ICAvL0NGTyAmIERBR0MKLSNkZWZpbmUgck9GRE0wX0NDQURyb3BUaHJlc2hvbGQgICAJMHhjNDggLy9DQ0EgRHJvcCB0aHJlc2hvbGQKLSNkZWZpbmUgck9GRE0wX0VDQ0FUaHJlc2hvbGQgICAgICAJMHhjNGMgLy8gZW5lcmd5IENDQQorLyogUEQsIEJXICYgU0JEICovCisjZGVmaW5lIHJPRkRNMF9SeERldGVjdG9yMSAgICAgICAgCTB4YzMwCisvKiBTQkQgKi8KKyNkZWZpbmUgck9GRE0wX1J4RGV0ZWN0b3IyCQkweGMzNAorLyogRnJhbWUgU3luYyAqLworI2RlZmluZSByT0ZETTBfUnhEZXRlY3RvcjMgICAgICAgICAJMHhjMzgKKy8qIFBELCBTQkQsIEZyYW1lIFN5bmMgJiBTaG9ydC1HSSAqLworI2RlZmluZSByT0ZETTBfUnhEZXRlY3RvcjQgICAgICAgIAkweGMzYworLyogUnggU3luYyBQYXRoICovCisjZGVmaW5lIHJPRkRNMF9SeERTUAkJCTB4YzQwCisvKiBDRk8gJiBEQUdDICovCisjZGVmaW5lIHJPRkRNMF9DRk9hbmREQUdDICAgICAgICAgCTB4YzQ0CisvKiBDQ0EgRHJvcCB0aHJlc2hvbGQgKi8KKyNkZWZpbmUgck9GRE0wX0NDQURyb3BUaHJlc2hvbGQgICAJMHhjNDgKKy8qIEVuZXJneSBDQ0EgKi8KKyNkZWZpbmUgck9GRE0wX0VDQ0FUaHJlc2hvbGQgICAgICAJMHhjNGMKICNkZWZpbmUgck9GRE0wX1hBQUdDQ29yZTEgICAgICAgICAJMHhjNTAKICNkZWZpbmUgck9GRE0wX1hBQUdDQ29yZTIgICAgICAgICAJMHhjNTQKICNkZWZpbmUgck9GRE0wX1hCQUdDQ29yZTEgICAgICAgICAJMHhjNTgKQEAgLTEzOSw1MDEgKzE1Niw1MTcgQEAKICNkZWZpbmUgck9GRE0wX0FHQ1BhcmFtZXRlcjEgICAgICAJMHhjNzAKICNkZWZpbmUgck9GRE0wX0FHQ1BhcmFtZXRlcjIgICAgICAJMHhjNzQKICNkZWZpbmUgck9GRE0wX0FHQ1JTU0lUYWJsZSAgICAgICAJMHhjNzgKLSNkZWZpbmUgck9GRE0wX0hUU1RGQUdDICAgICAgICAgICAJCTB4YzdjCisjZGVmaW5lIHJPRkRNMF9IVFNURkFHQyAgICAgICAgICAgCTB4YzdjCiAjZGVmaW5lIHJPRkRNMF9YQVR4SVFJbWJhbGFuY2UgICAJMHhjODAKLSNkZWZpbmUgck9GRE0wX1hBVHhBRkUgICAgICAgICAgICAJCTB4Yzg0CisjZGVmaW5lIHJPRkRNMF9YQVR4QUZFICAgICAgICAgICAgCTB4Yzg0CiAjZGVmaW5lIHJPRkRNMF9YQlR4SVFJbWJhbGFuY2UgICAgCTB4Yzg4Ci0jZGVmaW5lIHJPRkRNMF9YQlR4QUZFICAgICAgICAgICAgCQkweGM4YworI2RlZmluZSByT0ZETTBfWEJUeEFGRSAgICAgICAgICAgIAkweGM4YwogI2RlZmluZSByT0ZETTBfWENUeElRSW1iYWxhbmNlICAgIAkweGM5MAotI2RlZmluZSByT0ZETTBfWENUeEFGRSAgICAgICAgICAgIAkJMHhjOTQKKyNkZWZpbmUgck9GRE0wX1hDVHhBRkUgICAgICAgICAgICAJMHhjOTQKICNkZWZpbmUgck9GRE0wX1hEVHhJUUltYmFsYW5jZSAgICAJMHhjOTgKLSNkZWZpbmUgck9GRE0wX1hEVHhBRkUgICAgICAgICAgICAJCTB4YzljCisjZGVmaW5lIHJPRkRNMF9YRFR4QUZFICAgICAgICAgICAgCTB4YzljCiAjZGVmaW5lIHJPRkRNMF9SeEhQUGFyYW1ldGVyICAgICAgCTB4Y2UwCiAjZGVmaW5lIHJPRkRNMF9UeFBzZXVkb05vaXNlV2d0ICAgCTB4Y2U0Ci0jZGVmaW5lIHJPRkRNMF9GcmFtZVN5bmMgICAgICAgICAgCQkweGNmMAotI2RlZmluZSByT0ZETTBfREZTUmVwb3J0ICAgICAgICAgIAkJMHhjZjQKLSNkZWZpbmUgck9GRE0wX1R4Q29lZmYxICAgICAgICAgICAJCTB4Y2E0Ci0jZGVmaW5lIHJPRkRNMF9UeENvZWZmMiAgICAgICAgICAgCQkweGNhOAotI2RlZmluZSByT0ZETTBfVHhDb2VmZjMgICAgICAgICAgIAkJMHhjYWMKLSNkZWZpbmUgck9GRE0wX1R4Q29lZmY0ICAgICAgICAgICAJCTB4Y2IwCi0jZGVmaW5lIHJPRkRNMF9UeENvZWZmNSAgICAgICAgICAgCQkweGNiNAotI2RlZmluZSByT0ZETTBfVHhDb2VmZjYgICAgICAgICAgIAkJMHhjYjgKKyNkZWZpbmUgck9GRE0wX0ZyYW1lU3luYyAgICAgICAgICAJMHhjZjAKKyNkZWZpbmUgck9GRE0wX0RGU1JlcG9ydCAgICAgICAgICAJMHhjZjQKKyNkZWZpbmUgck9GRE0wX1R4Q29lZmYxICAgICAgICAgICAJMHhjYTQKKyNkZWZpbmUgck9GRE0wX1R4Q29lZmYyICAgICAgICAgICAJMHhjYTgKKyNkZWZpbmUgck9GRE0wX1R4Q29lZmYzICAgICAgICAgICAJMHhjYWMKKyNkZWZpbmUgck9GRE0wX1R4Q29lZmY0ICAgICAgICAgICAJMHhjYjAKKyNkZWZpbmUgck9GRE0wX1R4Q29lZmY1ICAgICAgICAgICAJMHhjYjQKKyNkZWZpbmUgck9GRE0wX1R4Q29lZmY2ICAgICAgICAgICAJMHhjYjgKIAogCi0vL3BhZ2UgZAotI2RlZmluZSByT0ZETTFfTFNURiAgICAgICAgICAgICAgIAkJMHhkMDAKKy8qIFBhZ2UgZCAqLworI2RlZmluZSByT0ZETTFfTFNURiAgICAgICAgICAgICAgIAkweGQwMAogI2RlZmluZSByT0ZETTFfVFJ4UGF0aEVuYWJsZSAgICAgIAkweGQwNAotI2RlZmluZSByT0ZETTFfQ0ZPICAgICAgICAgICAgICAgIAkJMHhkMDgKLSNkZWZpbmUgck9GRE0xX0NTSTEgICAgICAgICAgICAgICAJCTB4ZDEwCi0jZGVmaW5lIHJPRkRNMV9TQkQgICAgICAgICAgICAgICAgCQkweGQxNAotI2RlZmluZSByT0ZETTFfQ1NJMiAgICAgICAgICAgICAgIAkJMHhkMTgKLSNkZWZpbmUgck9GRE0xX0NGT1RyYWNraW5nICAgICAgICAJCTB4ZDJjCisjZGVmaW5lIHJPRkRNMV9DRk8gICAgICAgICAgICAgICAgCTB4ZDA4CisjZGVmaW5lIHJPRkRNMV9DU0kxICAgICAgICAgICAgICAgCTB4ZDEwCisjZGVmaW5lIHJPRkRNMV9TQkQgICAgICAgICAgICAgICAgCTB4ZDE0CisjZGVmaW5lIHJPRkRNMV9DU0kyICAgICAgICAgICAgICAgCTB4ZDE4CisjZGVmaW5lIHJPRkRNMV9DRk9UcmFja2luZyAgICAgICAgCTB4ZDJjCiAjZGVmaW5lIHJPRkRNMV9UUnhNZXNhdXJlMSAgICAgICAgCTB4ZDM0Ci0jZGVmaW5lIHJPRkRNMV9JbnRmRGV0ICAgICAgICAgICAgCQkweGQzYwotI2RlZmluZSByT0ZETTFfUHNldWRvTm9pc2VTdGF0ZUFCIDB4ZDUwCi0jZGVmaW5lIHJPRkRNMV9Qc2V1ZG9Ob2lzZVN0YXRlQ0QgMHhkNTQKLSNkZWZpbmUgck9GRE0xX1J4UHNldWRvTm9pc2VXZ3QgICAweGQ1OAotI2RlZmluZSByT0ZETV9QSFlDb3VudGVyMSAgICAgICAgIAkJMHhkYTAgIC8vY2NhLCBwYXJpdHkgZmFpbAotI2RlZmluZSByT0ZETV9QSFlDb3VudGVyMiAgICAgICAgIAkJMHhkYTQgIC8vcmF0ZSBpbGxlZ2FsLCBjcmM4IGZhaWwKLSNkZWZpbmUgck9GRE1fUEhZQ291bnRlcjMgICAgICAgICAJCTB4ZGE4ICAvL01DUyBub3Qgc3VwcG9ydAotI2RlZmluZSByT0ZETV9TaG9ydENGT0FCICAgICAgICAgIAkJMHhkYWMKLSNkZWZpbmUgck9GRE1fU2hvcnRDRk9DRCAgICAgICAgICAJCTB4ZGIwCi0jZGVmaW5lIHJPRkRNX0xvbmdDRk9BQiAgICAgICAgICAgCQkweGRiNAotI2RlZmluZSByT0ZETV9Mb25nQ0ZPQ0QgICAgICAgICAgIAkJMHhkYjgKLSNkZWZpbmUgck9GRE1fVGFpbENGT0FCICAgICAgICAgICAJCTB4ZGJjCi0jZGVmaW5lIHJPRkRNX1RhaWxDRk9DRCAgICAgICAgICAgCQkweGRjMAorI2RlZmluZSByT0ZETTFfSW50ZkRldCAgICAgICAgICAgIAkweGQzYworI2RlZmluZSByT0ZETTFfUHNldWRvTm9pc2VTdGF0ZUFCIAkweGQ1MAorI2RlZmluZSByT0ZETTFfUHNldWRvTm9pc2VTdGF0ZUNEIAkweGQ1NAorI2RlZmluZSByT0ZETTFfUnhQc2V1ZG9Ob2lzZVdndCAgIAkweGQ1OAorLyogY2NhLCBwYXJpdHkgZmFpbCAqLworI2RlZmluZSByT0ZETV9QSFlDb3VudGVyMSAgICAgICAgIAkweGRhMAorLyogcmF0ZSBpbGxlZ2FsLCBjcmM4IGZhaWwgKi8KKyNkZWZpbmUgck9GRE1fUEhZQ291bnRlcjIgICAJCTB4ZGE0CisvKiBNQ1Mgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZSByT0ZETV9QSFlDb3VudGVyMyAgICAgICAgIAkweGRhOAorI2RlZmluZSByT0ZETV9TaG9ydENGT0FCICAgICAgICAgIAkweGRhYworI2RlZmluZSByT0ZETV9TaG9ydENGT0NEICAgICAgICAgIAkweGRiMAorI2RlZmluZSByT0ZETV9Mb25nQ0ZPQUIgICAgICAgICAgIAkweGRiNAorI2RlZmluZSByT0ZETV9Mb25nQ0ZPQ0QgICAgICAgICAgIAkweGRiOAorI2RlZmluZSByT0ZETV9UYWlsQ0ZPQUIgICAgICAgICAgIAkweGRiYworI2RlZmluZSByT0ZETV9UYWlsQ0ZPQ0QgICAgICAgICAgIAkweGRjMAogI2RlZmluZSByT0ZETV9QV01lYXN1cmUxICAgICAgICAgIAkweGRjNAogI2RlZmluZSByT0ZETV9QV01lYXN1cmUyICAgICAgICAgIAkweGRjOAotI2RlZmluZSByT0ZETV9CV1JlcG9ydCAgICAgICAgICAgIAkJMHhkY2MKLSNkZWZpbmUgck9GRE1fQUdDUmVwb3J0ICAgICAgICAgICAJCTB4ZGQwCi0jZGVmaW5lIHJPRkRNX1J4U05SICAgICAgICAgICAgICAgCQkweGRkNAotI2RlZmluZSByT0ZETV9SeEVWTUNTSSAgICAgICAgICAgIAkJMHhkZDgKLSNkZWZpbmUgck9GRE1fU0lHUmVwb3J0ICAgICAgICAgICAJCTB4ZGRjCisjZGVmaW5lIHJPRkRNX0JXUmVwb3J0ICAgICAgICAgICAgCTB4ZGNjCisjZGVmaW5lIHJPRkRNX0FHQ1JlcG9ydCAgICAgICAgICAgCTB4ZGQwCisjZGVmaW5lIHJPRkRNX1J4U05SICAgICAgICAgICAgICAgCTB4ZGQ0CisjZGVmaW5lIHJPRkRNX1J4RVZNQ1NJICAgICAgICAgICAgCTB4ZGQ4CisjZGVmaW5lIHJPRkRNX1NJR1JlcG9ydCAgICAgICAgICAgCTB4ZGRjCiAKLS8vcGFnZSBlCi0jZGVmaW5lIHJUeEFHQ19SYXRlMThfMDYJCQkweGUwMAotI2RlZmluZSByVHhBR0NfUmF0ZTU0XzI0CQkJMHhlMDQKLSNkZWZpbmUgclR4QUdDX0NDS19NY3MzMgkJCTB4ZTA4Ci0jZGVmaW5lIHJUeEFHQ19NY3MwM19NY3MwMAkJCTB4ZTEwCi0jZGVmaW5lIHJUeEFHQ19NY3MwN19NY3MwNAkJCTB4ZTE0Ci0jZGVmaW5lIHJUeEFHQ19NY3MxMV9NY3MwOAkJCTB4ZTE4Ci0jZGVmaW5lIHJUeEFHQ19NY3MxNV9NY3MxMgkJCTB4ZTFjCisvKiBQYWdlIGUgKi8KKyNkZWZpbmUgclR4QUdDX1JhdGUxOF8wNgkJMHhlMDAKKyNkZWZpbmUgclR4QUdDX1JhdGU1NF8yNAkJMHhlMDQKKyNkZWZpbmUgclR4QUdDX0NDS19NY3MzMgkJMHhlMDgKKyNkZWZpbmUgclR4QUdDX01jczAzX01jczAwCQkweGUxMAorI2RlZmluZSByVHhBR0NfTWNzMDdfTWNzMDQJCTB4ZTE0CisjZGVmaW5lIHJUeEFHQ19NY3MxMV9NY3MwOAkJMHhlMTgKKyNkZWZpbmUgclR4QUdDX01jczE1X01jczEyCQkweGUxYwogCiAKLS8vUkYKLS8vWmVicmExCisvKiBSRiBaZWJyYSAxICovCiAjZGVmaW5lIHJaZWJyYTFfSFNTSUVuYWJsZSAgICAgICAgICAgIAkweDAKICNkZWZpbmUgclplYnJhMV9UUnhFbmFibGUxICAgICAgICAgICAgCTB4MQogI2RlZmluZSByWmVicmExX1RSeEVuYWJsZTIgICAgICAgICAgIAkweDIKLSNkZWZpbmUgclplYnJhMV9BR0MgICAgICAgICAgICAgICAgICAgCQkweDQKKyNkZWZpbmUgclplYnJhMV9BR0MgICAgICAgICAgICAgICAgICAgCTB4NAogI2RlZmluZSByWmVicmExX0NoYXJnZVB1bXAgICAgICAgICAgICAJMHg1Ci0jZGVmaW5lIHJaZWJyYTFfQ2hhbm5lbCAgICAgICAgICAgICAgIAkJMHg3Ci0jZGVmaW5lIHJaZWJyYTFfVHhHYWluICAgICAgICAgICAgICAgCSAJMHg4Ci0jZGVmaW5lIHJaZWJyYTFfVHhMUEYgICAgICAgICAgICAgICAgIAkJMHg5Ci0jZGVmaW5lIHJaZWJyYTFfUnhMUEYgICAgICAgICAgICAgICAgIAkJMHhiCisjZGVmaW5lIHJaZWJyYTFfQ2hhbm5lbCAgICAgICAgICAgICAgIAkweDcKKyNkZWZpbmUgclplYnJhMV9UeEdhaW4gICAgICAgICAgICAgICAJMHg4CisjZGVmaW5lIHJaZWJyYTFfVHhMUEYgICAgICAgICAgICAgICAgIAkweDkKKyNkZWZpbmUgclplYnJhMV9SeExQRiAgICAgICAgICAgICAgICAgCTB4YgogI2RlZmluZSByWmVicmExX1J4SFBGQ29ybmVyICAgICAgICAgICAJMHhjCiAKLS8vWmVicmE0Ci0jZGVmaW5lIHJHbG9iYWxDdHJsICAgICAgICAgICAgICAgICAgIAkJMAotI2RlZmluZSByUlRMODI1Nl9UeExQRiAgICAgICAgICAgICAgICAJCTE5Ci0jZGVmaW5lIHJSVEw4MjU2X1J4TFBGICAgICAgICAgICAgICAgIAkJMTEKKy8qIFplYnJhIDQgKi8KKyNkZWZpbmUgckdsb2JhbEN0cmwgICAgICAgICAgICAgICAgICAgCTAKKyNkZWZpbmUgclJUTDgyNTZfVHhMUEYgICAgICAgICAgICAgICAgCTE5CisjZGVmaW5lIHJSVEw4MjU2X1J4TFBGICAgICAgICAgICAgICAgIAkxMQogCi0vL1JUTDgyNTgKLSNkZWZpbmUgclJUTDgyNThfVHhMUEYgICAgICAgICAgICAgICAgCQkweDExCi0jZGVmaW5lIHJSVEw4MjU4X1J4TFBGICAgICAgICAgICAgICAgIAkJMHgxMworLyogUlRMODI1OCAqLworI2RlZmluZSByUlRMODI1OF9UeExQRiAgICAgICAgICAgICAgICAJMHgxMQorI2RlZmluZSByUlRMODI1OF9SeExQRiAgICAgICAgICAgICAgICAgIDB4MTMKICNkZWZpbmUgclJUTDgyNThfUlNTSUxQRiAgICAgICAgICAgICAgCTB4YQogCi0vL0JpdCBNYXNrCi0vL3BhZ2UtMQotI2RlZmluZSBiQkJSZXNldEIgICAgICAgICAgICAgICAgIAkJCTB4MTAwCi0jZGVmaW5lIGJHbG9iYWxSZXNldEIgICAgICAgICAgICAgCQkweDIwMAotI2RlZmluZSBiT0ZETVR4U3RhcnQgICAgICAgICAgICAgIAkJMHg0Ci0jZGVmaW5lIGJDQ0tUeFN0YXJ0ICAgICAgICAgICAgICAgCQkJMHg4Ci0jZGVmaW5lIGJDUkMzMkRlYnVnICAgICAgICAgICAgICAgCQkweDEwMAotI2RlZmluZSBiUE1BQ0xvb3BiYWNrICAgICAgICAgICAgIAkJMHgxMAotI2RlZmluZSBiVHhMU0lHICAgICAgICAgICAgICAgICAgIAkJCTB4ZmZmZmZmCi0jZGVmaW5lIGJPRkRNVHhSYXRlICAgICAgICAgICAgICAgCQkweGYKLSNkZWZpbmUgYk9GRE1UeFJlc2VydmVkICAgICAgICAgICAJCTB4MTAKLSNkZWZpbmUgYk9GRE1UeExlbmd0aCAgICAgICAgICAgICAJCTB4MWZmZTAKLSNkZWZpbmUgYk9GRE1UeFBhcml0eSAgICAgICAgICAgICAJCTB4MjAwMDAKLSNkZWZpbmUgYlR4SFRTSUcxICAgICAgICAgICAgICAgICAJCQkweGZmZmZmZgotI2RlZmluZSBiVHhIVE1DU1JhdGUgICAgICAgICAgICAgIAkJMHg3ZgotI2RlZmluZSBiVHhIVEJXICAgICAgICAgICAgICAgICAgIAkJCTB4ODAKLSNkZWZpbmUgYlR4SFRMZW5ndGggICAgICAgICAgICAgICAJCTB4ZmZmZjAwCi0jZGVmaW5lIGJUeEhUU0lHMiAgICAgICAgICAgICAgICAgCQkJMHhmZmZmZmYKLSNkZWZpbmUgYlR4SFRTbW9vdGhpbmcgICAgICAgICAgICAJCTB4MQotI2RlZmluZSBiVHhIVFNvdW5kaW5nICAgICAgICAgICAgIAkJMHgyCi0jZGVmaW5lIGJUeEhUUmVzZXJ2ZWQgICAgICAgICAgICAgCQkweDQKLSNkZWZpbmUgYlR4SFRBZ2dyZWF0aW9uICAgICAgICAgICAJCTB4OAotI2RlZmluZSBiVHhIVFNUQkMgICAgICAgICAgICAgICAgIAkJCTB4MzAKLSNkZWZpbmUgYlR4SFRBZHZhbmNlQ29kaW5nICAgICAgICAJCTB4NDAKLSNkZWZpbmUgYlR4SFRTaG9ydEdJICAgICAgICAgICAgICAJCTB4ODAKLSNkZWZpbmUgYlR4SFROdW1iZXJIVF9MVEYgICAgICAgICAJCTB4MzAwCi0jZGVmaW5lIGJUeEhUQ1JDOCAgICAgICAgICAgICAgICAgCQkJMHgzZmMwMAotI2RlZmluZSBiQ291bnRlclJlc2V0ICAgICAgICAgICAgIAkJMHgxMDAwMAotI2RlZmluZSBiTnVtT2ZPRkRNVHggICAgICAgICAgICAgIAkJMHhmZmZmCi0jZGVmaW5lIGJOdW1PZkNDS1R4ICAgICAgICAgICAgICAgCQkweGZmZmYwMDAwCi0jZGVmaW5lIGJUeElkbGVJbnRlcnZhbCAgICAgICAgICAgCQkJMHhmZmZmCi0jZGVmaW5lIGJPRkRNU2VydmljZSAgICAgICAgICAgICAgCQkweGZmZmYwMDAwCi0jZGVmaW5lIGJUeE1BQ0hlYWRlciAgICAgICAgICAgICAgCQkweGZmZmZmZmZmCi0jZGVmaW5lIGJUeERhdGFJbml0ICAgICAgICAgICAgICAgCQkJMHhmZgotI2RlZmluZSBiVHhIVE1vZGUgICAgICAgICAgICAgICAgIAkJMHgxMDAKLSNkZWZpbmUgYlR4RGF0YVR5cGUgICAgICAgICAgICAgICAJCTB4MzAwMDAKLSNkZWZpbmUgYlR4UmFuZG9tU2VlZCAgICAgICAgICAgICAJCTB4ZmZmZmZmZmYKLSNkZWZpbmUgYkNDS1R4UHJlYW1ibGUgICAgICAgICAgIAkJMHgxCi0jZGVmaW5lIGJDQ0tUeFNGRCAgICAgICAgICAgICAgICAgCQkJMHhmZmZmMDAwMAotI2RlZmluZSBiQ0NLVHhTSUcgICAgICAgICAgICAgICAgIAkJCTB4ZmYKLSNkZWZpbmUgYkNDS1R4U2VydmljZSAgICAgICAgICAgICAJCTB4ZmYwMAotI2RlZmluZSBiQ0NLTGVuZ3RoRXh0ICAgICAgICAgICAgIAkJMHg4MDAwCi0jZGVmaW5lIGJDQ0tUeExlbmd0aCAgICAgICAgICAgICAgCQkweGZmZmYwMDAwCi0jZGVmaW5lIGJDQ0tUeENSQzE2ICAgICAgICAgICAgICAgCQkweGZmZmYKLSNkZWZpbmUgYkNDS1R4U3RhdHVzICAgICAgICAgICAgICAJCTB4MQotI2RlZmluZSBiT0ZETVR4U3RhdHVzICAgICAgICAgICAgIAkJMHgyCisvKiBCaXQgTWFzayAqLworLyogUGFnZSAxICovCisjZGVmaW5lIGJCQlJlc2V0QiAgICAgICAgICAgICAgICAgCTB4MTAwCisjZGVmaW5lIGJHbG9iYWxSZXNldEIgICAgICAgICAgICAgCTB4MjAwCisjZGVmaW5lIGJPRkRNVHhTdGFydCAgICAgICAgICAgICAgCTB4NAorI2RlZmluZSBiQ0NLVHhTdGFydCAgICAgICAgICAgICAgIAkweDgKKyNkZWZpbmUgYkNSQzMyRGVidWcgICAgICAgICAgICAgICAJMHgxMDAKKyNkZWZpbmUgYlBNQUNMb29wYmFjayAgICAgICAgICAgICAJMHgxMAorI2RlZmluZSBiVHhMU0lHICAgICAgICAgICAgICAgICAgIAkweGZmZmZmZgorI2RlZmluZSBiT0ZETVR4UmF0ZSAgICAgICAgICAgICAgIAkweGYKKyNkZWZpbmUgYk9GRE1UeFJlc2VydmVkICAgICAgICAgICAJMHgxMAorI2RlZmluZSBiT0ZETVR4TGVuZ3RoICAgICAgICAgICAgIAkweDFmZmUwCisjZGVmaW5lIGJPRkRNVHhQYXJpdHkgICAgICAgICAgICAgCTB4MjAwMDAKKyNkZWZpbmUgYlR4SFRTSUcxICAgICAgICAgICAgICAgICAJMHhmZmZmZmYKKyNkZWZpbmUgYlR4SFRNQ1NSYXRlICAgICAgICAgICAgICAJMHg3ZgorI2RlZmluZSBiVHhIVEJXICAgICAgICAgICAgICAgICAgIAkweDgwCisjZGVmaW5lIGJUeEhUTGVuZ3RoICAgICAgICAgICAgICAgCTB4ZmZmZjAwCisjZGVmaW5lIGJUeEhUU0lHMiAgICAgICAgICAgICAgICAgCTB4ZmZmZmZmCisjZGVmaW5lIGJUeEhUU21vb3RoaW5nICAgICAgICAgICAgCTB4MQorI2RlZmluZSBiVHhIVFNvdW5kaW5nICAgICAgICAgICAgIAkweDIKKyNkZWZpbmUgYlR4SFRSZXNlcnZlZCAgICAgICAgICAgICAJMHg0CisjZGVmaW5lIGJUeEhUQWdncmVhdGlvbiAgICAgICAgICAgCTB4OAorI2RlZmluZSBiVHhIVFNUQkMgICAgICAgICAgICAgICAgIAkweDMwCisjZGVmaW5lIGJUeEhUQWR2YW5jZUNvZGluZyAgICAgICAgCTB4NDAKKyNkZWZpbmUgYlR4SFRTaG9ydEdJICAgICAgICAgICAgICAJMHg4MAorI2RlZmluZSBiVHhIVE51bWJlckhUX0xURiAgICAgICAgIAkweDMwMAorI2RlZmluZSBiVHhIVENSQzggICAgICAgICAgICAgICAgIAkweDNmYzAwCisjZGVmaW5lIGJDb3VudGVyUmVzZXQgICAgICAgICAgICAgCTB4MTAwMDAKKyNkZWZpbmUgYk51bU9mT0ZETVR4ICAgICAgICAgICAgICAJMHhmZmZmCisjZGVmaW5lIGJOdW1PZkNDS1R4ICAgICAgICAgICAgICAgCTB4ZmZmZjAwMDAKKyNkZWZpbmUgYlR4SWRsZUludGVydmFsICAgICAgICAgICAJMHhmZmZmCisjZGVmaW5lIGJPRkRNU2VydmljZSAgICAgICAgICAgICAgCTB4ZmZmZjAwMDAKKyNkZWZpbmUgYlR4TUFDSGVhZGVyICAgICAgICAgICAgICAJMHhmZmZmZmZmZgorI2RlZmluZSBiVHhEYXRhSW5pdCAgICAgICAgICAgICAgIAkweGZmCisjZGVmaW5lIGJUeEhUTW9kZSAgICAgICAgICAgICAgICAgCTB4MTAwCisjZGVmaW5lIGJUeERhdGFUeXBlICAgICAgICAgICAgICAgCTB4MzAwMDAKKyNkZWZpbmUgYlR4UmFuZG9tU2VlZCAgICAgICAgICAgICAJMHhmZmZmZmZmZgorI2RlZmluZSBiQ0NLVHhQcmVhbWJsZSAgICAgICAgICAgCTB4MQorI2RlZmluZSBiQ0NLVHhTRkQgICAgICAgICAgICAgICAgIAkweGZmZmYwMDAwCisjZGVmaW5lIGJDQ0tUeFNJRyAgICAgICAgICAgICAgICAgCTB4ZmYKKyNkZWZpbmUgYkNDS1R4U2VydmljZSAgICAgICAgICAgICAJMHhmZjAwCisjZGVmaW5lIGJDQ0tMZW5ndGhFeHQgICAgICAgICAgICAgCTB4ODAwMAorI2RlZmluZSBiQ0NLVHhMZW5ndGggICAgICAgICAgICAgIAkweGZmZmYwMDAwCisjZGVmaW5lIGJDQ0tUeENSQzE2ICAgICAgICAgICAgICAgCTB4ZmZmZgorI2RlZmluZSBiQ0NLVHhTdGF0dXMgICAgICAgICAgICAgIAkweDEKKyNkZWZpbmUgYk9GRE1UeFN0YXR1cyAgICAgICAgICAgICAJMHgyCiAKLS8vcGFnZS04Ci0jZGVmaW5lIGJSRk1PRCAgICAgICAgICAgICAgICAgICAgCQkJMHgxCi0jZGVmaW5lIGJKYXBhbk1vZGUgICAgICAgICAgICAgICAgCQkweDIKLSNkZWZpbmUgYkNDS1R4U0MgICAgICAgICAgICAgICAgICAJCQkweDMwCi0jZGVmaW5lIGJDQ0tFbiAgICAgICAgICAgICAgICAgICAgCQkJMHgxMDAwMDAwCi0jZGVmaW5lIGJPRkRNRW4gICAgICAgICAgICAgICAgICAgCQkJMHgyMDAwMDAwCi0jZGVmaW5lIGJPRkRNUnhBRENQaGFzZSAgICAgICAgICAgCQkweDEwMDAwCi0jZGVmaW5lIGJPRkRNVHhEQUNQaGFzZSAgICAgICAgICAgCQkweDQwMDAwCi0jZGVmaW5lIGJYQVR4QUdDICAgICAgICAgICAgICAgICAgCQkJMHgzZgotI2RlZmluZSBiWEJUeEFHQyAgICAgICAgICAgICAgICAgIAkJCTB4ZjAwCi0jZGVmaW5lIGJYQ1R4QUdDICAgICAgICAgICAgICAgICAgCQkJMHhmMDAwCi0jZGVmaW5lIGJYRFR4QUdDICAgICAgICAgICAgICAgICAgCQkJMHhmMDAwMAotI2RlZmluZSBiUEFTdGFydCAgICAgICAgICAgICAgICAgIAkJCTB4ZjAwMDAwMDAKLSNkZWZpbmUgYlRSU3RhcnQgICAgICAgICAgICAgICAgICAJCQkweDAwZjAwMDAwCi0jZGVmaW5lIGJSRlN0YXJ0ICAgICAgICAgICAgICAgICAgCQkJMHgwMDAwZjAwMAotI2RlZmluZSBiQkJTdGFydCAgICAgICAgICAgICAgICAgIAkJCTB4MDAwMDAwZjAKLSNkZWZpbmUgYkJCQ0NLU3RhcnQgICAgICAgICAgICAgICAJCTB4MDAwMDAwMGYKLSNkZWZpbmUgYlBBRW5kICAgICAgICAgICAgICAgICAgICAJCQkweGYgICAgICAgICAgLy9SZWcweDgxNAotI2RlZmluZSBiVFJFbmQgICAgICAgICAgICAgICAgICAgIAkJCTB4MGYwMDAwMDAKLSNkZWZpbmUgYlJGRW5kICAgICAgICAgICAgICAgICAgICAJCQkweDAwMGYwMDAwCi0jZGVmaW5lIGJDQ0FNYXNrICAgICAgICAgICAgICAgICAgCQkJMHgwMDAwMDBmMCAgIC8vVDJSCi0jZGVmaW5lIGJSMlJDQ0FNYXNrICAgICAgICAgICAgICAgCQkweDAwMDAwZjAwCi0jZGVmaW5lIGJIU1NJX1IyVERlbGF5ICAgICAgICAgICAgCQkweGY4MDAwMDAwCi0jZGVmaW5lIGJIU1NJX1QyUkRlbGF5ICAgICAgICAgICAgCQkweGY4MDAwMAotI2RlZmluZSBiQ29udFR4SFNTSSAgICAgICAgICAgICAgIAkJMHg0MDAgICAgIC8vY2hhbm5lbCBnYWluIGF0IGNvbnRpbnVlIFR4Ci0jZGVmaW5lIGJJR0Zyb21DQ0sgICAgICAgICAgICAgICAgCQkweDIwMAotI2RlZmluZSBiQUdDQWRkcmVzcyAgICAgICAgICAgICAgIAkJMHgzZgotI2RlZmluZSBiUnhIUFR4ICAgICAgICAgICAgICAgICAgIAkJCTB4NzAwMAotI2RlZmluZSBiUnhIUFQyUiAgICAgICAgICAgICAgICAgIAkJCTB4MzgwMDAKLSNkZWZpbmUgYlJ4SFBDQ0tJbmkgICAgICAgICAgICAgICAJCTB4YzAwMDAKLSNkZWZpbmUgYkFHQ1R4Q29kZSAgICAgICAgICAgICAgICAJCTB4YzAwMDAwCi0jZGVmaW5lIGJBR0NSeENvZGUgICAgICAgICAgICAgICAgCQkweDMwMDAwMAotI2RlZmluZSBiM1dpcmVEYXRhTGVuZ3RoICAgICAgICAgIAkJMHg4MDAKLSNkZWZpbmUgYjNXaXJlQWRkcmVzc0xlbmd0aCAgICAgICAJCTB4NDAwCi0jZGVmaW5lIGIzV2lyZVJGUG93ZXJEb3duICAgICAgICAgCQkweDEKLS8vI2RlZmluZSBiSFdTSVNlbGVjdCAgICAgICAgICAgICAgIAkJMHg4Ci0jZGVmaW5lIGI1R1BBUEVQb2xhcml0eSAgICAgICAgICAgCQkweDQwMDAwMDAwCi0jZGVmaW5lIGIyR1BBUEVQb2xhcml0eSAgICAgICAgICAgCQkweDgwMDAwMDAwCi0jZGVmaW5lIGJSRlNXX1R4RGVmYXVsdEFudCAgICAgICAgCQkweDMKLSNkZWZpbmUgYlJGU1dfVHhPcHRpb25BbnQgICAgICAgICAJCTB4MzAKLSNkZWZpbmUgYlJGU1dfUnhEZWZhdWx0QW50ICAgICAgICAJCTB4MzAwCi0jZGVmaW5lIGJSRlNXX1J4T3B0aW9uQW50ICAgICAgICAgCQkweDMwMDAKLSNkZWZpbmUgYlJGU0lfM1dpcmVEYXRhICAgICAgICAgICAJCTB4MQotI2RlZmluZSBiUkZTSV8zV2lyZUNsb2NrICAgICAgICAgIAkJMHgyCi0jZGVmaW5lIGJSRlNJXzNXaXJlTG9hZCAgICAgICAgICAgCQkweDQKLSNkZWZpbmUgYlJGU0lfM1dpcmVSVyAgICAgICAgICAgICAJCTB4OAotI2RlZmluZSBiUkZTSV8zV2lyZSAgICAgICAgICAgICAgIAkJCTB4ZiAgLy8zLXdpcmUgdG90YWwgY29udHJvbAotI2RlZmluZSBiUkZTSV9SRkVOViAgICAgICAgICAgICAgIAkJMHgxMAotI2RlZmluZSBiUkZTSV9UUlNXICAgICAgICAgICAgICAgIAkJMHgyMAotI2RlZmluZSBiUkZTSV9UUlNXQiAgICAgICAgICAgICAgIAkJMHg0MAotI2RlZmluZSBiUkZTSV9BTlRTVyAgICAgICAgICAgICAgIAkJMHgxMDAKLSNkZWZpbmUgYlJGU0lfQU5UU1dCICAgICAgICAgICAgICAJCTB4MjAwCi0jZGVmaW5lIGJSRlNJX1BBUEUgICAgICAgICAgICAgICAgCQkJMHg0MDAKLSNkZWZpbmUgYlJGU0lfUEFQRTVHICAgICAgICAgICAgICAJCTB4ODAwCi0jZGVmaW5lIGJCYW5kU2VsZWN0ICAgICAgICAgICAgICAgCQkJMHgxCi0jZGVmaW5lIGJIVFNJRzJfR0kgICAgICAgICAgICAgICAgCQkJMHg4MAotI2RlZmluZSBiSFRTSUcyX1Ntb290aGluZyAgICAgICAgIAkJMHgwMQotI2RlZmluZSBiSFRTSUcyX1NvdW5kaW5nICAgICAgICAgIAkJMHgwMgotI2RlZmluZSBiSFRTSUcyX0FnZ3JlYXRvbiAgICAgICAgIAkJMHgwOAotI2RlZmluZSBiSFRTSUcyX1NUQkMgICAgICAgICAgICAgIAkJMHgzMAotI2RlZmluZSBiSFRTSUcyX0FkdkNvZGluZyAgICAgICAgIAkJMHg0MAorLyogUGFnZSA4ICovCisjZGVmaW5lIGJSRk1PRCAgICAgICAgICAgICAgICAgICAgCTB4MQorI2RlZmluZSBiSmFwYW5Nb2RlICAgICAgICAgICAgICAgIAkweDIKKyNkZWZpbmUgYkNDS1R4U0MgICAgICAgICAgICAgICAgICAJMHgzMAorI2RlZmluZSBiQ0NLRW4gICAgICAgICAgICAgICAgICAgIAkweDEwMDAwMDAKKyNkZWZpbmUgYk9GRE1FbiAgICAgICAgICAgICAgICAgICAJMHgyMDAwMDAwCisjZGVmaW5lIGJPRkRNUnhBRENQaGFzZSAgICAgICAgICAgCTB4MTAwMDAKKyNkZWZpbmUgYk9GRE1UeERBQ1BoYXNlICAgICAgICAgICAJMHg0MDAwMAorI2RlZmluZSBiWEFUeEFHQyAgICAgICAgICAgICAgICAgIAkweDNmCisjZGVmaW5lIGJYQlR4QUdDICAgICAgICAgICAgICAgICAgCTB4ZjAwCisjZGVmaW5lIGJYQ1R4QUdDICAgICAgICAgICAgICAgICAgCTB4ZjAwMAorI2RlZmluZSBiWERUeEFHQyAgICAgICAgICAgICAgICAgIAkweGYwMDAwCisjZGVmaW5lIGJQQVN0YXJ0ICAgICAgICAgICAgICAgICAgCTB4ZjAwMDAwMDAKKyNkZWZpbmUgYlRSU3RhcnQgICAgICAgICAgICAgICAgICAJMHgwMGYwMDAwMAorI2RlZmluZSBiUkZTdGFydCAgICAgICAgICAgICAgICAgIAkweDAwMDBmMDAwCisjZGVmaW5lIGJCQlN0YXJ0ICAgICAgICAgICAgICAgICAgCTB4MDAwMDAwZjAKKyNkZWZpbmUgYkJCQ0NLU3RhcnQgICAgICAgICAgICAgICAJMHgwMDAwMDAwZgorLyogUmVnKXg4MTQgKi8KKyNkZWZpbmUgYlBBRW5kICAgICAgICAgICAgICAgICAgICAJMHhmCisjZGVmaW5lIGJUUkVuZCAgICAgICAgICAgICAgICAgICAgCTB4MGYwMDAwMDAKKyNkZWZpbmUgYlJGRW5kICAgICAgICAgICAgICAgICAgICAJMHgwMDBmMDAwMAorLyogVDJSICovCisjZGVmaW5lIGJDQ0FNYXNrICAgICAgICAgICAgICAgICAgCTB4MDAwMDAwZjAKKyNkZWZpbmUgYlIyUkNDQU1hc2sgICAgICAgICAgICAgICAJMHgwMDAwMGYwMAorI2RlZmluZSBiSFNTSV9SMlREZWxheSAgICAgICAgICAgIAkweGY4MDAwMDAwCisjZGVmaW5lIGJIU1NJX1QyUkRlbGF5ICAgICAgICAgICAgCTB4ZjgwMDAwCisvKiBDaGFubmVsIGdhaW4gYXQgY29udGludWUgVFguICovCisjZGVmaW5lIGJDb250VHhIU1NJICAgICAgICAgICAgICAgCTB4NDAwCisjZGVmaW5lIGJJR0Zyb21DQ0sgICAgICAgICAgICAgICAgCTB4MjAwCisjZGVmaW5lIGJBR0NBZGRyZXNzICAgICAgICAgICAgICAgCTB4M2YKKyNkZWZpbmUgYlJ4SFBUeCAgICAgICAgICAgICAgICAgICAJMHg3MDAwCisjZGVmaW5lIGJSeEhQVDJSICAgICAgICAgICAgICAgICAgCTB4MzgwMDAKKyNkZWZpbmUgYlJ4SFBDQ0tJbmkgICAgICAgICAgICAgICAJMHhjMDAwMAorI2RlZmluZSBiQUdDVHhDb2RlICAgICAgICAgICAgICAgIAkweGMwMDAwMAorI2RlZmluZSBiQUdDUnhDb2RlICAgICAgICAgICAgICAgIAkweDMwMDAwMAorI2RlZmluZSBiM1dpcmVEYXRhTGVuZ3RoICAgICAgICAgIAkweDgwMAorI2RlZmluZSBiM1dpcmVBZGRyZXNzTGVuZ3RoICAgICAgIAkweDQwMAorI2RlZmluZSBiM1dpcmVSRlBvd2VyRG93biAgICAgICAgIAkweDEKKy8qI2RlZmluZSBiSFdTSVNlbGVjdCAgICAgICAgICAgICAgIAkweDggKi8KKyNkZWZpbmUgYjVHUEFQRVBvbGFyaXR5ICAgICAgICAgICAJMHg0MDAwMDAwMAorI2RlZmluZSBiMkdQQVBFUG9sYXJpdHkgICAgICAgICAgIAkweDgwMDAwMDAwCisjZGVmaW5lIGJSRlNXX1R4RGVmYXVsdEFudCAgICAgICAgCTB4MworI2RlZmluZSBiUkZTV19UeE9wdGlvbkFudCAgICAgICAgIAkweDMwCisjZGVmaW5lIGJSRlNXX1J4RGVmYXVsdEFudCAgICAgICAgCTB4MzAwCisjZGVmaW5lIGJSRlNXX1J4T3B0aW9uQW50ICAgICAgICAgCTB4MzAwMAorI2RlZmluZSBiUkZTSV8zV2lyZURhdGEgICAgICAgICAgIAkweDEKKyNkZWZpbmUgYlJGU0lfM1dpcmVDbG9jayAgICAgICAgICAJMHgyCisjZGVmaW5lIGJSRlNJXzNXaXJlTG9hZCAgICAgICAgICAgCTB4NAorI2RlZmluZSBiUkZTSV8zV2lyZVJXICAgICAgICAgICAgIAkweDgKKy8qIDMtd2lyZSB0b3RhbCBjb250cm9sICovCisjZGVmaW5lIGJSRlNJXzNXaXJlICAgICAgICAgICAgICAgCTB4ZgorI2RlZmluZSBiUkZTSV9SRkVOViAgICAgICAgICAgICAgIAkweDEwCisjZGVmaW5lIGJSRlNJX1RSU1cgICAgICAgICAgICAgICAgCTB4MjAKKyNkZWZpbmUgYlJGU0lfVFJTV0IgICAgICAgICAgICAgICAJMHg0MAorI2RlZmluZSBiUkZTSV9BTlRTVyAgICAgICAgICAgICAgIAkweDEwMAorI2RlZmluZSBiUkZTSV9BTlRTV0IgICAgICAgICAgICAgIAkweDIwMAorI2RlZmluZSBiUkZTSV9QQVBFICAgICAgICAgICAgICAgIAkweDQwMAorI2RlZmluZSBiUkZTSV9QQVBFNUcgICAgICAgICAgICAgIAkweDgwMAorI2RlZmluZSBiQmFuZFNlbGVjdCAgICAgICAgICAgICAgIAkweDEKKyNkZWZpbmUgYkhUU0lHMl9HSSAgICAgICAgICAgICAgICAJMHg4MAorI2RlZmluZSBiSFRTSUcyX1Ntb290aGluZyAgICAgICAgIAkweDAxCisjZGVmaW5lIGJIVFNJRzJfU291bmRpbmcgICAgICAgICAgCTB4MDIKKyNkZWZpbmUgYkhUU0lHMl9BZ2dyZWF0b24gICAgICAgICAJMHgwOAorI2RlZmluZSBiSFRTSUcyX1NUQkMgICAgICAgICAgICAgIAkweDMwCisjZGVmaW5lIGJIVFNJRzJfQWR2Q29kaW5nICAgICAgICAgCTB4NDAKICNkZWZpbmUgYkhUU0lHMl9OdW1PZkhUTFRGICAgICAgICAJMHgzMDAKLSNkZWZpbmUgYkhUU0lHMl9DUkM4ICAgICAgICAgICAgICAJCTB4M2ZjCi0jZGVmaW5lIGJIVFNJRzFfTUNTICAgICAgICAgICAgICAgCQkweDdmCi0jZGVmaW5lIGJIVFNJRzFfQmFuZFdpZHRoICAgICAgICAgCQkweDgwCi0jZGVmaW5lIGJIVFNJRzFfSFRMZW5ndGggICAgICAgICAgCQkweGZmZmYKLSNkZWZpbmUgYkxTSUdfUmF0ZSAgICAgICAgICAgICAgICAJCQkweGYKLSNkZWZpbmUgYkxTSUdfUmVzZXJ2ZWQgICAgICAgICAgICAJCTB4MTAKLSNkZWZpbmUgYkxTSUdfTGVuZ3RoICAgICAgICAgICAgICAJCTB4MWZmZmUKLSNkZWZpbmUgYkxTSUdfUGFyaXR5ICAgICAgICAgICAgICAJCQkweDIwCi0jZGVmaW5lIGJDQ0tSeFBoYXNlICAgICAgICAgICAgICAgCQkweDQKLSNkZWZpbmUgYkxTU0lSZWFkQWRkcmVzcyAgICAgICAgICAJCTB4M2YwMDAwMDAgICAvL0xTU0kgIlJlYWQiIEFkZHJlc3MKLSNkZWZpbmUgYkxTU0lSZWFkRWRnZSAgICAgICAgICAgICAJCTB4ODAwMDAwMDAgICAvL0xTU0kgIlJlYWQiIGVkZ2Ugc2lnbmFsCi0jZGVmaW5lIGJMU1NJUmVhZEJhY2tEYXRhICAgICAgICAgCQkweGZmZgotI2RlZmluZSBiTFNTSVJlYWRPS0ZsYWcgICAgICAgICAgIAkJMHgxMDAwCi0jZGVmaW5lIGJDQ0tTYW1wbGVSYXRlICAgICAgICAgICAgCQkweDggICAgICAgLy8wOiA0NE1IeiwgMTo4OE1IegorI2RlZmluZSBiSFRTSUcyX0NSQzggICAgICAgICAgICAgIAkweDNmYworI2RlZmluZSBiSFRTSUcxX01DUyAgICAgICAgICAgICAgIAkweDdmCisjZGVmaW5lIGJIVFNJRzFfQmFuZFdpZHRoICAgICAgICAgCTB4ODAKKyNkZWZpbmUgYkhUU0lHMV9IVExlbmd0aCAgICAgICAgICAJMHhmZmZmCisjZGVmaW5lIGJMU0lHX1JhdGUgICAgICAgICAgICAgICAgCTB4ZgorI2RlZmluZSBiTFNJR19SZXNlcnZlZCAgICAgICAgICAgIAkweDEwCisjZGVmaW5lIGJMU0lHX0xlbmd0aCAgICAgICAgICAgICAgCTB4MWZmZmUKKyNkZWZpbmUgYkxTSUdfUGFyaXR5ICAgICAgICAgICAgICAJMHgyMAorI2RlZmluZSBiQ0NLUnhQaGFzZSAgICAgICAgICAgICAgIAkweDQKKy8qIExTU0kgInJlYWQiIGFkZHJlc3MgKi8KKyNkZWZpbmUgYkxTU0lSZWFkQWRkcmVzcyAgICAgICAgICAJMHgzZjAwMDAwMAorLyogTFNTSSAicmVhZCIgZWRnZSBzaWduYWwgKi8KKyNkZWZpbmUgYkxTU0lSZWFkRWRnZSAgICAgICAgICAgICAJMHg4MDAwMDAwMAorI2RlZmluZSBiTFNTSVJlYWRCYWNrRGF0YSAgICAgICAgIAkweGZmZgorI2RlZmluZSBiTFNTSVJlYWRPS0ZsYWcgICAgICAgICAgIAkweDEwMDAKKy8qIDA6IDQ0IE1IeiwgMTogODhNSHogKi8KKyNkZWZpbmUgYkNDS1NhbXBsZVJhdGUgICAgICAgICAgICAJMHg4CiAKLSNkZWZpbmUgYlJlZ3VsYXRvcjBTdGFuZGJ5ICAgICAgICAJCTB4MQotI2RlZmluZSBiUmVndWxhdG9yUExMU3RhbmRieSAgICAgIAkJMHgyCi0jZGVmaW5lIGJSZWd1bGF0b3IxU3RhbmRieSAgICAgICAgCQkweDQKLSNkZWZpbmUgYlBMTFBvd2VyVXAgICAgICAgICAgICAgICAJCTB4OAotI2RlZmluZSBiRFBMTFBvd2VyVXAgICAgICAgICAgICAgIAkJMHgxMAotI2RlZmluZSBiREExMFBvd2VyVXAgICAgICAgICAgICAgIAkJMHgyMAotI2RlZmluZSBiQUQ3UG93ZXJVcCAgICAgICAgICAgICAgIAkJMHgyMDAKLSNkZWZpbmUgYkRBNlBvd2VyVXAgICAgICAgICAgICAgICAJCTB4MjAwMAotI2RlZmluZSBiWHRhbFBvd2VyVXAgICAgICAgICAgICAgIAkJMHg0MDAwCi0jZGVmaW5lIGI0ME1EQ2xrUG93ZXJVUCAgICAgICAgICAgCQkweDgwMDAKLSNkZWZpbmUgYkRBNkRlYnVnTW9kZSAgICAgICAgICAgICAJCTB4MjAwMDAKLSNkZWZpbmUgYkRBNlN3aW5nICAgICAgICAgICAgICAgICAJCQkweDM4MDAwMAotI2RlZmluZSBiQURDbGtQaGFzZSAgICAgICAgICAgICAgIAkJMHg0MDAwMDAwCi0jZGVmaW5lIGI4ME1DbGtEZWxheSAgICAgICAgICAgICAgCQkweDE4MDAwMDAwCi0jZGVmaW5lIGJBRkVXYXRjaERvZ0VuYWJsZSAgICAgICAgCQkweDIwMDAwMDAwCi0jZGVmaW5lIGJYdGFsQ2FwICAgICAgICAgICAgICAgIAkJCTB4MGYwMDAwMDAKLSNkZWZpbmUgYlh0YWxDYXAwMSAgICAgICAgICAgICAgICAJCQkweGMwMDAwMDAwCi0jZGVmaW5lIGJYdGFsQ2FwMjMgICAgICAgICAgICAgICAgCQkJMHgzCi0jZGVmaW5lIGJYdGFsQ2FwOTJ4CQkJCQkweDBmMDAwMDAwCi0jZGVmaW5lIGJJbnREaWZDbGtFbmFibGUgICAgICAgICAgCQkweDQwMAotI2RlZmluZSBiRXh0U2lnQ2xrRW5hYmxlICAgICAgICAgCSAJMHg4MDAKKyNkZWZpbmUgYlJlZ3VsYXRvcjBTdGFuZGJ5ICAgICAgICAJMHgxCisjZGVmaW5lIGJSZWd1bGF0b3JQTExTdGFuZGJ5ICAgICAgCTB4MgorI2RlZmluZSBiUmVndWxhdG9yMVN0YW5kYnkgICAgICAgIAkweDQKKyNkZWZpbmUgYlBMTFBvd2VyVXAgICAgICAgICAgICAgICAJMHg4CisjZGVmaW5lIGJEUExMUG93ZXJVcCAgICAgICAgICAgICAgCTB4MTAKKyNkZWZpbmUgYkRBMTBQb3dlclVwICAgICAgICAgICAgICAJMHgyMAorI2RlZmluZSBiQUQ3UG93ZXJVcCAgICAgICAgICAgICAgIAkweDIwMAorI2RlZmluZSBiREE2UG93ZXJVcCAgICAgICAgICAgICAgIAkweDIwMDAKKyNkZWZpbmUgYlh0YWxQb3dlclVwICAgICAgICAgICAgICAJMHg0MDAwCisjZGVmaW5lIGI0ME1EQ2xrUG93ZXJVUCAgICAgICAgICAgCTB4ODAwMAorI2RlZmluZSBiREE2RGVidWdNb2RlICAgICAgICAgICAgIAkweDIwMDAwCisjZGVmaW5lIGJEQTZTd2luZyAgICAgICAgICAgICAgICAgCTB4MzgwMDAwCisjZGVmaW5lIGJBRENsa1BoYXNlICAgICAgICAgICAgICAgCTB4NDAwMDAwMAorI2RlZmluZSBiODBNQ2xrRGVsYXkgICAgICAgICAgICAgIAkweDE4MDAwMDAwCisjZGVmaW5lIGJBRkVXYXRjaERvZ0VuYWJsZSAgICAgICAgCTB4MjAwMDAwMDAKKyNkZWZpbmUgYlh0YWxDYXAgICAgICAgICAgICAgICAgCTB4MGYwMDAwMDAKKyNkZWZpbmUgYlh0YWxDYXAwMSAgICAgICAgICAgICAgICAJMHhjMDAwMDAwMAorI2RlZmluZSBiWHRhbENhcDIzICAgICAgICAgICAgICAgIAkweDMKKyNkZWZpbmUgYlh0YWxDYXA5MngJCQkweDBmMDAwMDAwCisjZGVmaW5lIGJJbnREaWZDbGtFbmFibGUgICAgICAgICAgCTB4NDAwCisjZGVmaW5lIGJFeHRTaWdDbGtFbmFibGUgICAgICAgICAJMHg4MDAKICNkZWZpbmUgYkJhbmRnYXBNYmlhc1Bvd2VyVXAgICAgICAJMHgxMDAwMAotI2RlZmluZSBiQUQxMVNIR2FpbiAgICAgICAgICAgICAgIAkJMHhjMDAwMAotI2RlZmluZSBiQUQxMUlucHV0UmFuZ2UgICAgICAgICAgIAkJMHg3MDAwMDAKLSNkZWZpbmUgYkFEMTFPUEN1cnJlbnQgICAgICAgICAgICAJCTB4MzgwMDAwMAotI2RlZmluZSBiSVBhdGhMb29wYmFjayAgICAgICAgICAgIAkJMHg0MDAwMDAwCi0jZGVmaW5lIGJRUGF0aExvb3BiYWNrICAgICAgICAgICAgCQkweDgwMDAwMDAKLSNkZWZpbmUgYkFGRUxvb3BiYWNrICAgICAgICAgICAgICAJCTB4MTAwMDAwMDAKLSNkZWZpbmUgYkRBMTBTd2luZyAgICAgICAgICAgICAgICAJCTB4N2UwCi0jZGVmaW5lIGJEQTEwUmV2ZXJzZSAgICAgICAgICAgICAgCQkweDgwMAotI2RlZmluZSBiREFDbGtTb3VyY2UgICAgICAgICAgICAgIAkJMHgxMDAwCi0jZGVmaW5lIGJBRDdJbnB1dFJhbmdlICAgICAgICAgICAgCQkweDYwMDAKLSNkZWZpbmUgYkFEN0dhaW4gICAgICAgICAgICAgICAgICAJCQkweDM4MDAwCi0jZGVmaW5lIGJBRDdPdXRwdXRDTU1vZGUgICAgICAgICAgCQkweDQwMDAwCi0jZGVmaW5lIGJBRDdJbnB1dENNTW9kZSAgICAgICAgICAgCQkweDM4MDAwMAotI2RlZmluZSBiQUQ3Q3VycmVudCAgICAgICAgICAgICAgIAkJCTB4YzAwMDAwCi0jZGVmaW5lIGJSZWd1bGF0b3JBZGp1c3QgICAgICAgICAgCQkweDcwMDAwMDAKLSNkZWZpbmUgYkFEMTFQb3dlclVwQXRUeCAgICAgICAgICAJCTB4MQotI2RlZmluZSBiREExMFBTQXRUeCAgICAgICAgICAgICAgIAkJMHgxMAotI2RlZmluZSBiQUQxMVBvd2VyVXBBdFJ4ICAgICAgICAgIAkJMHgxMDAKLSNkZWZpbmUgYkRBMTBQU0F0UnggICAgICAgICAgICAgICAJCTB4MTAwMAorI2RlZmluZSBiQUQxMVNIR2FpbiAgICAgICAgICAgICAgIAkweGMwMDAwCisjZGVmaW5lIGJBRDExSW5wdXRSYW5nZSAgICAgICAgICAgCTB4NzAwMDAwCisjZGVmaW5lIGJBRDExT1BDdXJyZW50ICAgICAgICAgICAgCTB4MzgwMDAwMAorI2RlZmluZSBiSVBhdGhMb29wYmFjayAgICAgICAgICAgIAkweDQwMDAwMDAKKyNkZWZpbmUgYlFQYXRoTG9vcGJhY2sgICAgICAgICAgICAJMHg4MDAwMDAwCisjZGVmaW5lIGJBRkVMb29wYmFjayAgICAgICAgICAgICAgCTB4MTAwMDAwMDAKKyNkZWZpbmUgYkRBMTBTd2luZyAgICAgICAgICAgICAgICAJMHg3ZTAKKyNkZWZpbmUgYkRBMTBSZXZlcnNlICAgICAgICAgICAgICAJMHg4MDAKKyNkZWZpbmUgYkRBQ2xrU291cmNlICAgICAgICAgICAgICAJMHgxMDAwCisjZGVmaW5lIGJBRDdJbnB1dFJhbmdlICAgICAgICAgICAgCTB4NjAwMAorI2RlZmluZSBiQUQ3R2FpbiAgICAgICAgICAgICAgICAgIAkweDM4MDAwCisjZGVmaW5lIGJBRDdPdXRwdXRDTU1vZGUgICAgICAgICAgCTB4NDAwMDAKKyNkZWZpbmUgYkFEN0lucHV0Q01Nb2RlICAgICAgICAgICAJMHgzODAwMDAKKyNkZWZpbmUgYkFEN0N1cnJlbnQgICAgICAgICAgICAgICAJMHhjMDAwMDAKKyNkZWZpbmUgYlJlZ3VsYXRvckFkanVzdCAgICAgICAgICAJMHg3MDAwMDAwCisjZGVmaW5lIGJBRDExUG93ZXJVcEF0VHggICAgICAgICAgCTB4MQorI2RlZmluZSBiREExMFBTQXRUeCAgICAgICAgICAgICAgIAkweDEwCisjZGVmaW5lIGJBRDExUG93ZXJVcEF0UnggICAgICAgICAgCTB4MTAwCisjZGVmaW5lIGJEQTEwUFNBdFJ4ICAgICAgICAgICAgICAgCTB4MTAwMAogCi0jZGVmaW5lIGJDQ0tSeEFHQ0Zvcm1hdCAgICAgICAgICAgCQkweDIwMAorI2RlZmluZSBiQ0NLUnhBR0NGb3JtYXQgICAgICAgICAgIAkweDIwMAogCi0jZGVmaW5lIGJQU0RGRlRTYW1wbGVwUG9pbnQgICAgICAgCQkweGMwMDAKLSNkZWZpbmUgYlBTREF2ZXJhZ2VOdW0gICAgICAgICAgICAJCTB4MzAwMAotI2RlZmluZSBiSVFQYXRoQ29udHJvbCAgICAgICAgICAgIAkJMHhjMDAKLSNkZWZpbmUgYlBTREZyZXEgICAgICAgICAgICAgICAgICAJCQkweDNmZgotI2RlZmluZSBiUFNEQW50ZW5uYVBhdGggICAgICAgICAgIAkJMHgzMAotI2RlZmluZSBiUFNESVFTd2l0Y2ggICAgICAgICAgICAgIAkJMHg0MAotI2RlZmluZSBiUFNEUnhUcmlnZ2VyICAgICAgICAgICAgIAkJMHg0MDAwMDAKLSNkZWZpbmUgYlBTRFR4VHJpZ2dlciAgICAgICAgICAgICAJCTB4ODAwMDAwMDAKLSNkZWZpbmUgYlBTRFNpbmVUb25lU2NhbGUgICAgICAgIAkJMHg3ZjAwMDAwMAotI2RlZmluZSBiUFNEUmVwb3J0ICAgICAgICAgICAgICAgIAkJCTB4ZmZmZgorI2RlZmluZSBiUFNERkZUU2FtcGxlcFBvaW50ICAgICAgIAkweGMwMDAKKyNkZWZpbmUgYlBTREF2ZXJhZ2VOdW0gICAgICAgICAgICAJMHgzMDAwCisjZGVmaW5lIGJJUVBhdGhDb250cm9sICAgICAgICAgICAgCTB4YzAwCisjZGVmaW5lIGJQU0RGcmVxICAgICAgICAgICAgICAgICAgCTB4M2ZmCisjZGVmaW5lIGJQU0RBbnRlbm5hUGF0aCAgICAgICAgICAgCTB4MzAKKyNkZWZpbmUgYlBTRElRU3dpdGNoICAgICAgICAgICAgICAJMHg0MAorI2RlZmluZSBiUFNEUnhUcmlnZ2VyICAgICAgICAgICAgIAkweDQwMDAwMAorI2RlZmluZSBiUFNEVHhUcmlnZ2VyICAgICAgICAgICAgIAkweDgwMDAwMDAwCisjZGVmaW5lIGJQU0RTaW5lVG9uZVNjYWxlICAgICAgICAJMHg3ZjAwMDAwMAorI2RlZmluZSBiUFNEUmVwb3J0ICAgICAgICAgICAgICAgIAkweGZmZmYKIAotLy9wYWdlLTkKLSNkZWZpbmUgYk9GRE1UeFNDICAgICAgICAgICAgICAgICAJCTB4MzAwMDAwMDAKLSNkZWZpbmUgYkNDS1R4T24gICAgICAgICAgICAgICAgICAJCQkweDEKLSNkZWZpbmUgYk9GRE1UeE9uICAgICAgICAgICAgICAgICAJCTB4MgotI2RlZmluZSBiRGVidWdQYWdlICAgICAgICAgICAgICAgIAkJMHhmZmYgIC8vcmVzZXQgZGVidWcgcGFnZSBhbmQgYWxzbyBIV29yZCwgTFdvcmQKLSNkZWZpbmUgYkRlYnVnSXRlbSAgICAgICAgICAgICAgICAJCTB4ZmYgICAvL3Jlc2V0IGRlYnVnIHBhZ2UgYW5kIExXb3JkCi0jZGVmaW5lIGJBbnRMICAgICAgICAgICAgICAJICAgICAgIAkJMHgxMAotI2RlZmluZSBiQW50Tm9uSFQgICAgICAgICAgIAkgICAgICAJCQkweDEwMAotI2RlZmluZSBiQW50SFQxICAgICAgICAgICAgICAgCQkJMHgxMDAwCi0jZGVmaW5lIGJBbnRIVDIgICAgICAgICAgICAgICAgICAgCQkJMHgxMDAwMAotI2RlZmluZSBiQW50SFQxUzEgICAgICAgICAgICAgICAgIAkJCTB4MTAwMDAwCi0jZGVmaW5lIGJBbnROb25IVFMxICAgICAgICAgICAgICAgCQkweDEwMDAwMDAKKy8qIFBhZ2UgOCAqLworI2RlZmluZSBiT0ZETVR4U0MgICAgICAgICAgICAgICAgIAkweDMwMDAwMDAwCisjZGVmaW5lIGJDQ0tUeE9uICAgICAgICAgICAgICAgICAgCTB4MQorI2RlZmluZSBiT0ZETVR4T24gICAgICAgICAgICAgICAgIAkweDIKKy8qIFJlc2V0IGRlYnVnIHBhZ2UgYW5kIGFsc28gSFdvcmQsIExXb3JkICovCisjZGVmaW5lIGJEZWJ1Z1BhZ2UgICAgICAgICAgICAgICAgCTB4ZmZmCisvKiBSZXNldCBkZWJ1ZyBwYWdlIGFuZCBMV29yZCAqLworI2RlZmluZSBiRGVidWdJdGVtICAgICAgICAgICAgICAgIAkweGZmCisjZGVmaW5lIGJBbnRMICAgICAgICAgICAgICAJICAgICAgIAkweDEwCisjZGVmaW5lIGJBbnROb25IVCAgICAgICAgICAgCSAgICAgIAkweDEwMAorI2RlZmluZSBiQW50SFQxICAgICAgICAgICAgICAgCQkweDEwMDAKKyNkZWZpbmUgYkFudEhUMiAgICAgICAgICAgICAgICAgICAJMHgxMDAwMAorI2RlZmluZSBiQW50SFQxUzEgICAgICAgICAgICAgICAgIAkweDEwMDAwMAorI2RlZmluZSBiQW50Tm9uSFRTMSAgICAgICAgICAgICAgIAkweDEwMDAwMDAKIAotLy9wYWdlLWEKLSNkZWZpbmUgYkNDS0JCTW9kZSAgICAgICAgICAgICAgICAJCTB4MwotI2RlZmluZSBiQ0NLVHhQb3dlclNhdmluZyAgICAgICAgIAkJMHg4MAotI2RlZmluZSBiQ0NLUnhQb3dlclNhdmluZyAgICAgICAgIAkJMHg0MAotI2RlZmluZSBiQ0NLU2lkZUJhbmQgICAgICAgICAgICAgIAkJMHgxMAotI2RlZmluZSBiQ0NLU2NyYW1ibGUgICAgICAgICAgICAgIAkJMHg4Ci0jZGVmaW5lIGJDQ0tBbnREaXZlcnNpdHkgICAgCQkgICAgICAJMHg4MDAwCisvKiBQYWdlIGEgKi8KKyNkZWZpbmUgYkNDS0JCTW9kZSAgICAgICAgICAgICAgICAJMHgzCisjZGVmaW5lIGJDQ0tUeFBvd2VyU2F2aW5nICAgICAgICAgCTB4ODAKKyNkZWZpbmUgYkNDS1J4UG93ZXJTYXZpbmcgICAgICAgICAJMHg0MAorI2RlZmluZSBiQ0NLU2lkZUJhbmQgICAgICAgICAgICAgIAkweDEwCisjZGVmaW5lIGJDQ0tTY3JhbWJsZSAgICAgICAgICAgICAgCTB4OAorI2RlZmluZSBiQ0NLQW50RGl2ZXJzaXR5ICAgIAkJMHg4MDAwCiAjZGVmaW5lIGJDQ0tDYXJyaWVyUmVjb3ZlcnkgICAJICAgIAkweDQwMDAKLSNkZWZpbmUgYkNDS1R4UmF0ZSAgICAgICAgICAgCQkgICAgIAkweDMwMDAKLSNkZWZpbmUgYkNDS0RDQ2FuY2VsICAgICAgICAgICAgIAkgCTB4MDgwMAotI2RlZmluZSBiQ0NLSVNJQ2FuY2VsICAgICAgICAgICAgIAkJMHgwNDAwCi0jZGVmaW5lIGJDQ0tNYXRjaEZpbHRlciAgICAgICAgICAgCQkweDAyMDAKLSNkZWZpbmUgYkNDS0VxdWFsaXplciAgICAgICAgICAgICAJCTB4MDEwMAotI2RlZmluZSBiQ0NLUHJlYW1ibGVEZXRlY3QgICAgICAgCSAJMHg4MDAwMDAKLSNkZWZpbmUgYkNDS0Zhc3RGYWxzZUNDQSAgICAgICAgICAJCTB4NDAwMDAwCi0jZGVmaW5lIGJDQ0tDaEVzdFN0YXJ0ICAgICAgICAgICAgCQkweDMwMDAwMAotI2RlZmluZSBiQ0NLQ0NBQ291bnQgICAgICAgICAgICAgIAkJMHgwODAwMDAKLSNkZWZpbmUgYkNDS2NzX2xpbSAgICAgICAgICAgICAgICAJCQkweDA3MDAwMAotI2RlZmluZSBiQ0NLQmlzdE1vZGUgICAgICAgICAgICAgIAkJMHg4MDAwMDAwMAotI2RlZmluZSBiQ0NLQ0NBTWFzayAgICAgICAgICAgICAJICAJMHg0MDAwMDAwMAorI2RlZmluZSBiQ0NLVHhSYXRlICAgICAgICAgICAJCTB4MzAwMAorI2RlZmluZSBiQ0NLRENDYW5jZWwgICAgICAgICAgICAgCTB4MDgwMAorI2RlZmluZSBiQ0NLSVNJQ2FuY2VsICAgICAgICAgICAgIAkweDA0MDAKKyNkZWZpbmUgYkNDS01hdGNoRmlsdGVyICAgICAgICAgICAJMHgwMjAwCisjZGVmaW5lIGJDQ0tFcXVhbGl6ZXIgICAgICAgICAgICAgCTB4MDEwMAorI2RlZmluZSBiQ0NLUHJlYW1ibGVEZXRlY3QgICAgICAgCTB4ODAwMDAwCisjZGVmaW5lIGJDQ0tGYXN0RmFsc2VDQ0EgICAgICAgICAgCTB4NDAwMDAwCisjZGVmaW5lIGJDQ0tDaEVzdFN0YXJ0ICAgICAgICAgICAgCTB4MzAwMDAwCisjZGVmaW5lIGJDQ0tDQ0FDb3VudCAgICAgICAgICAgICAgCTB4MDgwMDAwCisjZGVmaW5lIGJDQ0tjc19saW0gICAgICAgICAgICAgICAgCTB4MDcwMDAwCisjZGVmaW5lIGJDQ0tCaXN0TW9kZSAgICAgICAgICAgICAgCTB4ODAwMDAwMDAKKyNkZWZpbmUgYkNDS0NDQU1hc2sgICAgICAgICAgICAgCTB4NDAwMDAwMDAKICNkZWZpbmUgYkNDS1R4REFDUGhhc2UgICAgICAgICAJICAgCTB4NAotI2RlZmluZSBiQ0NLUnhBRENQaGFzZSAgICAgICAgIAkgICAJMHgyMDAwMDAwMCAgIC8vcl9yeF9jbGsKKy8qIHJfcnhfY2xrICovCisjZGVmaW5lIGJDQ0tSeEFEQ1BoYXNlICAgICAgICAgCSAJMHgyMDAwMDAwMAogI2RlZmluZSBiQ0NLcl9jcF9tb2RlMCAgICAgICAgIAkgICAJMHgwMTAwCi0jZGVmaW5lIGJDQ0tUeERDT2Zmc2V0ICAgICAgICAgICAJIAkweGYwCi0jZGVmaW5lIGJDQ0tSeERDT2Zmc2V0ICAgICAgICAgICAJIAkweGYKLSNkZWZpbmUgYkNDS0NDQU1vZGUgICAgICAgICAgICAgIAkgCTB4YzAwMAotI2RlZmluZSBiQ0NLRmFsc2VDU19saW0gICAgICAgICAgIAkJMHgzZjAwCi0jZGVmaW5lIGJDQ0tDU19yYXRpbyAgICAgICAgICAgICAgCQkweGMwMDAwMAotI2RlZmluZSBiQ0NLQ29yZ0JpdF9zZWwgICAgICAgICAgIAkJMHgzMDAwMDAKLSNkZWZpbmUgYkNDS1BEX2xpbSAgICAgICAgICAgICAgICAJCQkweDBmMDAwMAotI2RlZmluZSBiQ0NLTmV3Q0NBICAgICAgICAgICAgICAgIAkJMHg4MDAwMDAwMAotI2RlZmluZSBiQ0NLUnhIUG9mSUcgICAgICAgICAgICAgIAkJMHg4MDAwCi0jZGVmaW5lIGJDQ0tSeElHICAgICAgICAgICAgICAgICAgCQkJMHg3ZjAwCi0jZGVmaW5lIGJDQ0tMTkFQb2xhcml0eSAgICAgICAgICAgCQkweDgwMDAwMAotI2RlZmluZSBiQ0NLUngxc3RHYWluICAgICAgICAgICAgIAkJMHg3ZjAwMDAKLSNkZWZpbmUgYkNDS1JGRXh0ZW5kICAgICAgICAgICAgICAJCTB4MjAwMDAwMDAgLy9DQ0sgUnggSWluaXRhbCBnYWluIHBvbGFyaXR5Ci0jZGVmaW5lIGJDQ0tSeEFHQ1NhdExldmVsICAgICAgICAJIAkweDFmMDAwMDAwCi0jZGVmaW5lIGJDQ0tSeEFHQ1NhdENvdW50ICAgICAgIAkgIAkweGUwCi0jZGVmaW5lIGJDQ0tSeFJGU2V0dGxlICAgICAgICAgICAgCQkweDFmICAgICAgIC8vQUdDc2FtcF9kbHkKLSNkZWZpbmUgYkNDS0ZpeGVkUnhBR0MgICAgICAgICAgIAkgCTB4ODAwMAotLy8jZGVmaW5lIGJDQ0tSeEFHQ0Zvcm1hdCAgICAgICAgIAkgCTB4NDAwMCAgIC8vcmVtb3ZlIHRvIEhTU0kgcmVnaXN0ZXIgMHg4MjQKLSNkZWZpbmUgYkNDS0FudGVubmFQb2xhcml0eSAgICAgIAkgCTB4MjAwMAotI2RlZmluZSBiQ0NLVHhGaWx0ZXJUeXBlICAgICAgICAgIAkJMHgwYzAwCisjZGVmaW5lIGJDQ0tUeERDT2Zmc2V0ICAgICAgICAgICAJMHhmMAorI2RlZmluZSBiQ0NLUnhEQ09mZnNldCAgICAgICAgIAkJMHhmCisjZGVmaW5lIGJDQ0tDQ0FNb2RlICAgICAgICAgICAgICAJMHhjMDAwCisjZGVmaW5lIGJDQ0tGYWxzZUNTX2xpbSAgICAgICAgICAgCTB4M2YwMAorI2RlZmluZSBiQ0NLQ1NfcmF0aW8gICAgICAgICAgICAgIAkweGMwMDAwMAorI2RlZmluZSBiQ0NLQ29yZ0JpdF9zZWwgICAgICAgICAgIAkweDMwMDAwMAorI2RlZmluZSBiQ0NLUERfbGltICAgICAgICAgICAgICAgIAkweDBmMDAwMAorI2RlZmluZSBiQ0NLTmV3Q0NBICAgICAgICAgICAgICAgIAkweDgwMDAwMDAwCisjZGVmaW5lIGJDQ0tSeEhQb2ZJRyAgICAgICAgICAgICAgCTB4ODAwMAorI2RlZmluZSBiQ0NLUnhJRyAgICAgICAgICAgICAgICAgIAkweDdmMDAKKyNkZWZpbmUgYkNDS0xOQVBvbGFyaXR5ICAgICAgICAgICAJMHg4MDAwMDAKKyNkZWZpbmUgYkNDS1J4MXN0R2FpbiAgICAgICAgICAgICAJMHg3ZjAwMDAKKy8qIENDSyBSeCBJbml0aWFsIGdhaW4gcG9sYXJpdHkgKi8KKyNkZWZpbmUgYkNDS1JGRXh0ZW5kICAgICAgICAgICAgICAJMHgyMDAwMDAwMAorI2RlZmluZSBiQ0NLUnhBR0NTYXRMZXZlbCAgICAgICAgCTB4MWYwMDAwMDAKKyNkZWZpbmUgYkNDS1J4QUdDU2F0Q291bnQgICAgICAgCTB4ZTAKKy8qIEFHQ1NBbXBfZGx5ICovCisjZGVmaW5lIGJDQ0tSeFJGU2V0dGxlICAgICAgICAgICAgCTB4MWYKKyNkZWZpbmUgYkNDS0ZpeGVkUnhBR0MgICAgICAgICAgIAkweDgwMDAKKy8qI2RlZmluZSBiQ0NLUnhBR0NGb3JtYXQgICAgICAgICAJMHg0MDAwICByZW1vdmUgdG8gSFNTSSByZWdpc3RlciAweDgyNCAqLworI2RlZmluZSBiQ0NLQW50ZW5uYVBvbGFyaXR5ICAgICAgCTB4MjAwMAorI2RlZmluZSBiQ0NLVHhGaWx0ZXJUeXBlICAgICAgICAgIAkweDBjMDAKICNkZWZpbmUgYkNDS1J4QUdDUmVwb3J0VHlwZSAgIAkgICAJMHgwMzAwCi0jZGVmaW5lIGJDQ0tSeERBR0NFbiAgICAgICAgICAgICAgCQkweDgwMDAwMDAwCi0jZGVmaW5lIGJDQ0tSeERBR0NQZXJpb2QgICAgICAgIAkgIAkweDIwMDAwMDAwCisjZGVmaW5lIGJDQ0tSeERBR0NFbiAgICAgICAgICAgICAgCTB4ODAwMDAwMDAKKyNkZWZpbmUgYkNDS1J4REFHQ1BlcmlvZCAgICAgICAgCTB4MjAwMDAwMDAKICNkZWZpbmUgYkNDS1J4REFHQ1NhdExldmVsICAgICAJICAgCTB4MWYwMDAwMDAKLSNkZWZpbmUgYkNDS1RpbWluZ1JlY292ZXJ5ICAgICAgIAkgCTB4ODAwMDAwCi0jZGVmaW5lIGJDQ0tUeEMwICAgICAgICAgICAgICAgICAgCQkJMHgzZjAwMDAKLSNkZWZpbmUgYkNDS1R4QzEgICAgICAgICAgICAgICAgICAJCQkweDNmMDAwMDAwCi0jZGVmaW5lIGJDQ0tUeEMyICAgICAgICAgICAgICAgICAgCQkJMHgzZgotI2RlZmluZSBiQ0NLVHhDMyAgICAgICAgICAgICAgICAgIAkJCTB4M2YwMAotI2RlZmluZSBiQ0NLVHhDNCAgICAgICAgICAgICAgICAgIAkJCTB4M2YwMDAwCi0jZGVmaW5lIGJDQ0tUeEM1ICAgICAgICAgICAgICAgICAgCQkJMHgzZjAwMDAwMAotI2RlZmluZSBiQ0NLVHhDNiAgICAgICAgICAgICAgICAgIAkJCTB4M2YKLSNkZWZpbmUgYkNDS1R4QzcgICAgICAgICAgICAgICAgICAJCQkweDNmMDAKLSNkZWZpbmUgYkNDS0RlYnVnUG9ydCAgICAgICAgICAgICAJCTB4ZmYwMDAwCi0jZGVmaW5lIGJDQ0tEQUNEZWJ1ZyAgICAgICAgICAgICAgCQkweDBmMDAwMDAwCi0jZGVmaW5lIGJDQ0tGYWxzZUFsYXJtRW5hYmxlICAgICAgCQkweDgwMDAKLSNkZWZpbmUgYkNDS0ZhbHNlQWxhcm1SZWFkICAgICAgICAJCTB4NDAwMAotI2RlZmluZSBiQ0NLVFJTU0kgICAgICAgICAgICAgICAgIAkJCTB4N2YKLSNkZWZpbmUgYkNDS1J4QUdDUmVwb3J0ICAgICAgICAgICAJCTB4ZmUKLSNkZWZpbmUgYkNDS1J4UmVwb3J0X0FudFNlbCAgICAgICAJCTB4ODAwMDAwMDAKLSNkZWZpbmUgYkNDS1J4UmVwb3J0X01GT2ZmICAgICAgICAJCTB4NDAwMDAwMDAKKyNkZWZpbmUgYkNDS1RpbWluZ1JlY292ZXJ5ICAgICAgIAkweDgwMDAwMAorI2RlZmluZSBiQ0NLVHhDMCAgICAgICAgICAgICAgICAgIAkweDNmMDAwMAorI2RlZmluZSBiQ0NLVHhDMSAgICAgICAgICAgICAgICAgIAkweDNmMDAwMDAwCisjZGVmaW5lIGJDQ0tUeEMyICAgICAgICAgICAgICAgICAgCTB4M2YKKyNkZWZpbmUgYkNDS1R4QzMgICAgICAgICAgICAgICAgICAJMHgzZjAwCisjZGVmaW5lIGJDQ0tUeEM0ICAgICAgICAgICAgICAgICAgCTB4M2YwMDAwCisjZGVmaW5lIGJDQ0tUeEM1ICAgICAgICAgICAgICAgICAgCTB4M2YwMDAwMDAKKyNkZWZpbmUgYkNDS1R4QzYgICAgICAgICAgICAgICAgICAJMHgzZgorI2RlZmluZSBiQ0NLVHhDNyAgICAgICAgICAgICAgICAgIAkweDNmMDAKKyNkZWZpbmUgYkNDS0RlYnVnUG9ydCAgICAgICAgICAgICAJMHhmZjAwMDAKKyNkZWZpbmUgYkNDS0RBQ0RlYnVnICAgICAgICAgICAgICAJMHgwZjAwMDAwMAorI2RlZmluZSBiQ0NLRmFsc2VBbGFybUVuYWJsZSAgICAgIAkweDgwMDAKKyNkZWZpbmUgYkNDS0ZhbHNlQWxhcm1SZWFkICAgICAgICAJMHg0MDAwCisjZGVmaW5lIGJDQ0tUUlNTSSAgICAgICAgICAgICAgICAgCTB4N2YKKyNkZWZpbmUgYkNDS1J4QUdDUmVwb3J0ICAgICAgICAgICAJMHhmZQorI2RlZmluZSBiQ0NLUnhSZXBvcnRfQW50U2VsICAgICAgIAkweDgwMDAwMDAwCisjZGVmaW5lIGJDQ0tSeFJlcG9ydF9NRk9mZiAgICAgICAgCTB4NDAwMDAwMDAKICNkZWZpbmUgYkNDS1J4UnhSZXBvcnRfU1FMb3NzICAgICAJMHgyMDAwMDAwMAotI2RlZmluZSBiQ0NLUnhSZXBvcnRfUGt0bG9zcyAgICAgIAkJMHgxMDAwMDAwMAorI2RlZmluZSBiQ0NLUnhSZXBvcnRfUGt0bG9zcyAgICAgIAkweDEwMDAwMDAwCiAjZGVmaW5lIGJDQ0tSeFJlcG9ydF9Mb2NrZWRiaXQgICAgCTB4MDgwMDAwMDAKICNkZWZpbmUgYkNDS1J4UmVwb3J0X1JhdGVFcnJvciAgICAJMHgwNDAwMDAwMAotI2RlZmluZSBiQ0NLUnhSZXBvcnRfUnhSYXRlICAgICAgIAkJMHgwMzAwMDAwMAorI2RlZmluZSBiQ0NLUnhSZXBvcnRfUnhSYXRlICAgICAgIAkweDAzMDAwMDAwCiAjZGVmaW5lIGJDQ0tSeEZBQ291bnRlckxvd2VyICAgICAgCTB4ZmYKICNkZWZpbmUgYkNDS1J4RkFDb3VudGVyVXBwZXIgICAgICAJMHhmZjAwMDAwMAotI2RlZmluZSBiQ0NLUnhIUEFHQ1N0YXJ0ICAgICAgICAgIAkJMHhlMDAwCi0jZGVmaW5lIGJDQ0tSeEhQQUdDRmluYWwgICAgICAgICAgCQkweDFjMDAKKyNkZWZpbmUgYkNDS1J4SFBBR0NTdGFydCAgICAgICAgICAJMHhlMDAwCisjZGVmaW5lIGJDQ0tSeEhQQUdDRmluYWwgICAgICAgICAgCTB4MWMwMAogCiAjZGVmaW5lIGJDQ0tSeEZhbHNlQWxhcm1FbmFibGUgICAgCTB4ODAwMAotI2RlZmluZSBiQ0NLRkFDb3VudGVyRnJlZXplICAgICAgIAkJMHg0MDAwCisjZGVmaW5lIGJDQ0tGQUNvdW50ZXJGcmVlemUgICAgICAgCTB4NDAwMAogCi0jZGVmaW5lIGJDQ0tUeFBhdGhTZWwgICAgICAgICAgICAgCQkweDEwMDAwMDAwCi0jZGVmaW5lIGJDQ0tEZWZhdWx0UnhQYXRoICAgICAgICAgCQkweGMwMDAwMDAKLSNkZWZpbmUgYkNDS09wdGlvblJ4UGF0aCAgICAgICAgICAJCTB4MzAwMDAwMAorI2RlZmluZSBiQ0NLVHhQYXRoU2VsICAgICAgICAgICAgIAkweDEwMDAwMDAwCisjZGVmaW5lIGJDQ0tEZWZhdWx0UnhQYXRoICAgICAgICAgCTB4YzAwMDAwMAorI2RlZmluZSBiQ0NLT3B0aW9uUnhQYXRoICAgICAgICAgIAkweDMwMDAwMDAKIAotLy9wYWdlIGMKLSNkZWZpbmUgYk51bU9mU1RGICAgICAgICAgICAgICAgIAkJCTB4MwotI2RlZmluZSBiU2hpZnRfTCAgICAgICAgICAgICAgICAgCQkJMHhjMAotI2RlZmluZSBiR0lfVEggICAgICAgICAgICAgICAgICAgCQkJMHhjCi0jZGVmaW5lIGJSeFBhdGhBICAgICAgICAgICAgICAgICAJCQkweDEKLSNkZWZpbmUgYlJ4UGF0aEIgICAgICAgICAgICAgICAgIAkJCTB4MgotI2RlZmluZSBiUnhQYXRoQyAgICAgICAgICAgICAgICAgCQkJMHg0Ci0jZGVmaW5lIGJSeFBhdGhEICAgICAgICAgICAgICAgICAJCQkweDgKLSNkZWZpbmUgYlR4UGF0aEEgICAgICAgICAgICAgICAgIAkJCTB4MQotI2RlZmluZSBiVHhQYXRoQiAgICAgICAgICAgICAgICAgCQkJMHgyCi0jZGVmaW5lIGJUeFBhdGhDICAgICAgICAgICAgICAgICAJCQkweDQKLSNkZWZpbmUgYlR4UGF0aEQgICAgICAgICAgICAgICAgIAkJCTB4OAotI2RlZmluZSBiVFJTU0lGcmVxICAgICAgICAgICAgICAgCQkJMHgyMDAKLSNkZWZpbmUgYkFEQ0JhY2tvZmYgICAgICAgICAgICAgIAkJCTB4MzAwMAotI2RlZmluZSBiREZJUkJhY2tvZmYgICAgICAgICAgICAgCQkJMHhjMDAwCi0jZGVmaW5lIGJUUlNTSUxhdGNoUGhhc2UgICAgICAgICAJCTB4MTAwMDAKLSNkZWZpbmUgYlJ4SURDT2Zmc2V0ICAgICAgICAgICAgIAkJCTB4ZmYKLSNkZWZpbmUgYlJ4UURDT2Zmc2V0ICAgICAgICAgICAgIAkJCTB4ZmYwMAotI2RlZmluZSBiUnhERklSTW9kZSAgICAgICAgICAgICAgCQkweDE4MDAwMDAKLSNkZWZpbmUgYlJ4RENORlR5cGUgICAgICAgICAgICAgIAkJMHhlMDAwMDAwCi0jZGVmaW5lIGJSWElRSW1iX0EgICAgICAgICAgICAgICAJCQkweDNmZgotI2RlZmluZSBiUlhJUUltYl9CICAgICAgICAgICAgICAgCQkJMHhmYzAwCi0jZGVmaW5lIGJSWElRSW1iX0MgICAgICAgICAgICAgICAJCQkweDNmMDAwMAotI2RlZmluZSBiUlhJUUltYl9EICAgICAgICAgICAgICAgCQkJMHhmZmMwMDAwMAotI2RlZmluZSBiRENfZGNfTm90Y2ggICAgICAgICAgICAgCQkweDYwMDAwCi0jZGVmaW5lIGJSeE5CSU5vdGNoICAgICAgICAgICAgICAJCQkweDFmMDAwMDAwCi0jZGVmaW5lIGJQRF9USCAgICAgICAgICAgICAgICAgICAJCQkweGYKLSNkZWZpbmUgYlBEX1RIX09wdDIgICAgICAgICAgICAgIAkJMHhjMDAwCi0jZGVmaW5lIGJQV0VEX1RIICAgICAgICAgICAgICAgICAJCQkweDcwMAotI2RlZmluZSBiSWZNRl9XaW5fTCAgICAgICAgICAgICAgCQkJMHg4MDAKLSNkZWZpbmUgYlBEX09wdGlvbiAgICAgICAgICAgICAgIAkJCTB4MTAwMAotI2RlZmluZSBiTUZfV2luX0wgICAgICAgICAgICAgICAgCQkJMHhlMDAwCi0jZGVmaW5lIGJCV19TZWFyY2hfTCAgICAgICAgICAgICAJCTB4MzAwMDAKLSNkZWZpbmUgYndpbl9lbmhfTCAgICAgICAgICAgICAgIAkJCTB4YzAwMDAKLSNkZWZpbmUgYkJXX1RIICAgICAgICAgICAgICAgICAgIAkJCTB4NzAwMDAwCi0jZGVmaW5lIGJFRF9USDIgICAgICAgICAgICAgICAgICAJCQkweDM4MDAwMDAKLSNkZWZpbmUgYkJXX29wdGlvbiAgICAgICAgICAgICAgIAkJCTB4NDAwMDAwMAotI2RlZmluZSBiUmF0aW9fVEggICAgICAgICAgICAgICAgCQkJMHgxODAwMDAwMAotI2RlZmluZSBiV2luZG93X0wgICAgICAgICAgICAgICAgCQkJMHhlMDAwMDAwMAotI2RlZmluZSBiU0JEX09wdGlvbiAgICAgICAgICAgICAgCQkJMHgxCi0jZGVmaW5lIGJGcmFtZV9USCAgICAgICAgICAgICAgICAJCQkweDFjCi0jZGVmaW5lIGJGU19PcHRpb24gICAgICAgICAgICAgICAJCQkweDYwCi0jZGVmaW5lIGJEQ19TbG9wZV9jaGVjayAgICAgICAgICAJCTB4ODAKLSNkZWZpbmUgYkZHdWFyZF9Db3VudGVyX0RDX0wgICAgIAkJMHhlMDAKLSNkZWZpbmUgYkZyYW1lX1dlaWdodF9TaG9ydCAgICAgIAkJMHg3MDAwCi0jZGVmaW5lIGJTdWJfVHVuZSAgICAgICAgICAgICAgICAJCQkweGUwMDAwMAotI2RlZmluZSBiRnJhbWVfRENfTGVuZ3RoICAgICAgICAgCQkweGUwMDAwMDAKLSNkZWZpbmUgYlNCRF9zdGFydF9vZmZzZXQgICAgICAgIAkJMHgzMDAwMDAwMAotI2RlZmluZSBiRnJhbWVfVEhfMiAgICAgICAgICAgICAgCQkweDcKLSNkZWZpbmUgYkZyYW1lX0dJMl9USCAgICAgICAgICAgIAkJMHgzOAotI2RlZmluZSBiR0kyX1N5bmNfZW4gICAgICAgICAgICAgCQkweDQwCi0jZGVmaW5lIGJTYXJjaF9TaG9ydF9FYXJseSAgICAgICAJCTB4MzAwCi0jZGVmaW5lIGJTYXJjaF9TaG9ydF9MYXRlICAgICAgICAJCTB4YzAwCi0jZGVmaW5lIGJTYXJjaF9HSTJfTGF0ZSAgICAgICAgICAJCTB4NzAwMDAKLSNkZWZpbmUgYkNGT0FudFN1bSAgICAgICAgICAgICAgIAkJMHgxCi0jZGVmaW5lIGJDRk9BY2MgICAgICAgICAgICAgICAgICAJCQkweDIKLSNkZWZpbmUgYkNGT1N0YXJ0T2Zmc2V0ICAgICAgICAgIAkJMHhjCi0jZGVmaW5lIGJDRk9Mb29rQmFjayAgICAgICAgICAgICAJCTB4NzAKLSNkZWZpbmUgYkNGT1N1bVdlaWdodCAgICAgICAgICAgIAkJMHg4MAotI2RlZmluZSBiREFHQ0VuYWJsZSAgICAgICAgICAgICAgCQkJMHgxMDAwMAotI2RlZmluZSBiVFhJUUltYl9BICAgICAgICAgICAgICAgCQkJMHgzZmYKLSNkZWZpbmUgYlRYSVFJbWJfQiAgICAgICAgICAgICAgIAkJCTB4ZmMwMAotI2RlZmluZSBiVFhJUUltYl9DICAgICAgICAgICAgICAgCQkJMHgzZjAwMDAKLSNkZWZpbmUgYlRYSVFJbWJfRCAgICAgICAgICAgICAgIAkJCTB4ZmZjMDAwMDAKLSNkZWZpbmUgYlR4SURDT2Zmc2V0ICAgICAgICAgICAgIAkJCTB4ZmYKLSNkZWZpbmUgYlR4UURDT2Zmc2V0ICAgICAgICAgICAgIAkJCTB4ZmYwMAotI2RlZmluZSBiVHhERklSTW9kZSAgICAgICAgICAgICAgCQkweDEwMDAwCi0jZGVmaW5lIGJUeFBlc3Vkb05vaXNlT24gICAgICAgICAJCTB4NDAwMDAwMAotI2RlZmluZSBiVHhQZXN1ZG9Ob2lzZV9BICAgICAgICAgCQkweGZmCi0jZGVmaW5lIGJUeFBlc3Vkb05vaXNlX0IgICAgICAgICAJCTB4ZmYwMAotI2RlZmluZSBiVHhQZXN1ZG9Ob2lzZV9DICAgICAgICAgCQkweGZmMDAwMAotI2RlZmluZSBiVHhQZXN1ZG9Ob2lzZV9EICAgICAgICAgCQkweGZmMDAwMDAwCi0jZGVmaW5lIGJDQ0FEcm9wT3B0aW9uICAgICAgICAgICAJCTB4MjAwMDAKLSNkZWZpbmUgYkNDQURyb3BUaHJlcyAgICAgICAgICAgIAkJMHhmZmYwMDAwMAotI2RlZmluZSBiRURDQ0FfSCAgICAgICAgICAgICAgICAgCQkJMHhmCi0jZGVmaW5lIGJFRENDQV9MICAgICAgICAgICAgICAgICAJCQkweGYwCi0jZGVmaW5lIGJMYW1iZGFfRUQgICAgICAgICAgICAgICAweDMwMAotI2RlZmluZSBiUnhJbml0aWFsR2FpbiAgICAgICAgICAgMHg3ZgotI2RlZmluZSBiUnhBbnREaXZFbiAgICAgICAgICAgICAgMHg4MAotI2RlZmluZSBiUnhBR0NBZGRyZXNzRm9yTE5BICAgICAgMHg3ZjAwCi0jZGVmaW5lIGJSeEhpZ2hQb3dlckZsb3cgICAgICAgICAweDgwMDAKLSNkZWZpbmUgYlJ4QUdDRnJlZXplVGhyZXMgICAgICAgIDB4YzAwMDAKLSNkZWZpbmUgYlJ4RnJlZXplU3RlcF9BR0MxICAgICAgIDB4MzAwMDAwCi0jZGVmaW5lIGJSeEZyZWV6ZVN0ZXBfQUdDMiAgICAgICAweGMwMDAwMAotI2RlZmluZSBiUnhGcmVlemVTdGVwX0FHQzMgICAgICAgMHgzMDAwMDAwCi0jZGVmaW5lIGJSeEZyZWV6ZVN0ZXBfQUdDMCAgICAgICAweGMwMDAwMDAKLSNkZWZpbmUgYlJ4UnNzaV9DbXBfRW4gICAgICAgICAgIDB4MTAwMDAwMDAKLSNkZWZpbmUgYlJ4UXVpY2tBR0NFbiAgICAgICAgICAgIDB4MjAwMDAwMDAKLSNkZWZpbmUgYlJ4QUdDRnJlZXplVGhyZXNNb2RlICAgIDB4NDAwMDAwMDAKLSNkZWZpbmUgYlJ4T3ZlckZsb3dDaGVja1R5cGUgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgYlJ4QUdDU2hpZnQgICAgICAgICAgICAgIDB4N2YKLSNkZWZpbmUgYlRSU1dfVHJpX09ubHkgICAgICAgICAgIDB4ODAKLSNkZWZpbmUgYlBvd2VyVGhyZXMgICAgICAgICAgICAgIDB4MzAwCi0jZGVmaW5lIGJSeEFHQ0VuICAgICAgICAgICAgICAgICAweDEKLSNkZWZpbmUgYlJ4QUdDVG9nZXRoZXJFbiAgICAgICAgIDB4MgotI2RlZmluZSBiUnhBR0NNaW4gICAgICAgICAgICAgICAgMHg0Ci0jZGVmaW5lIGJSeEhQX0luaSAgICAgICAgICAgICAgICAweDcKLSNkZWZpbmUgYlJ4SFBfVFJMTkEgICAgICAgICAgICAgIDB4NzAKLSNkZWZpbmUgYlJ4SFBfUlNTSSAgICAgICAgICAgICAgIDB4NzAwCi0jZGVmaW5lIGJSeEhQX0JCUDEgICAgICAgICAgICAgICAweDcwMDAKLSNkZWZpbmUgYlJ4SFBfQkJQMiAgICAgICAgICAgICAgIDB4NzAwMDAKLSNkZWZpbmUgYlJ4SFBfQkJQMyAgICAgICAgICAgICAgIDB4NzAwMDAwCi0jZGVmaW5lIGJSU1NJX0ggICAgICAgICAgICAgICAgICAweDdmMDAwMCAgICAgLy90aGUgdGhyZXNob2xkIGZvciBoaWdoIHBvd2VyCi0jZGVmaW5lIGJSU1NJX0dlbiAgICAgICAgICAgICAgICAweDdmMDAwMDAwICAgLy90aGUgdGhyZXNob2xkIGZvciBhbnQgZGl2ZXJzaXR5Ci0jZGVmaW5lIGJSeFNldHRsZV9UUlNXICAgICAgICAgICAweDcKLSNkZWZpbmUgYlJ4U2V0dGxlX0xOQSAgICAgICAgICAgIDB4MzgKLSNkZWZpbmUgYlJ4U2V0dGxlX1JTU0kgICAgICAgICAgIDB4MWMwCi0jZGVmaW5lIGJSeFNldHRsZV9CQlAgICAgICAgICAgICAweGUwMAotI2RlZmluZSBiUnhTZXR0bGVfUnhIUCAgICAgICAgICAgMHg3MDAwCi0jZGVmaW5lIGJSeFNldHRsZV9BbnRTV19SU1NJICAgICAweDM4MDAwCi0jZGVmaW5lIGJSeFNldHRsZV9BbnRTVyAgICAgICAgICAweGMwMDAwCi0jZGVmaW5lIGJSeFByb2Nlc3NUaW1lX0RBR0MgICAgICAweDMwMDAwMAotI2RlZmluZSBiUnhTZXR0bGVfSFNTSSAgICAgICAgICAgMHg0MDAwMDAKLSNkZWZpbmUgYlJ4UHJvY2Vzc1RpbWVfQkJQUFcgICAgIDB4ODAwMDAwCi0jZGVmaW5lIGJSeEFudGVubmFQb3dlclNoaWZ0ICAgICAweDMwMDAwMDAKLSNkZWZpbmUgYlJTU0lUYWJsZVNlbGVjdCAgICAgICAgIDB4YzAwMDAwMAotI2RlZmluZSBiUnhIUF9GaW5hbCAgICAgICAgICAgICAgMHg3MDAwMDAwCi0jZGVmaW5lIGJSeEhUU2V0dGxlX0JCUCAgICAgICAgICAweDcKLSNkZWZpbmUgYlJ4SFRTZXR0bGVfSFNTSSAgICAgICAgIDB4OAotI2RlZmluZSBiUnhIVFNldHRsZV9SeEhQICAgICAgICAgMHg3MAotI2RlZmluZSBiUnhIVFNldHRsZV9CQlBQVyAgICAgICAgMHg4MAotI2RlZmluZSBiUnhIVFNldHRsZV9JZGxlICAgICAgICAgMHgzMDAKLSNkZWZpbmUgYlJ4SFRTZXR0bGVfUmVzZXJ2ZWQgICAgIDB4MWMwMAotI2RlZmluZSBiUnhIVFJ4SFBFbiAgICAgICAgICAgICAgMHg4MDAwCi0jZGVmaW5lIGJSeEhUQUdDRnJlZXplVGhyZXMgICAgICAweDMwMDAwCi0jZGVmaW5lIGJSeEhUQUdDVG9nZXRoZXJFbiAgICAgICAweDQwMDAwCi0jZGVmaW5lIGJSeEhUQUdDTWluICAgICAgICAgICAgICAweDgwMDAwCi0jZGVmaW5lIGJSeEhUQUdDRW4gICAgICAgICAgICAgICAweDEwMDAwMAotI2RlZmluZSBiUnhIVERBR0NFbiAgICAgICAgICAgICAgMHgyMDAwMDAKLSNkZWZpbmUgYlJ4SFRSeEhQX0JCUCAgICAgICAgICAgIDB4MWMwMDAwMAotI2RlZmluZSBiUnhIVFJ4SFBfRmluYWwgICAgICAgICAgMHhlMDAwMDAwMAotI2RlZmluZSBiUnhQV1JhdGlvVEggICAgICAgICAgICAgMHgzCi0jZGVmaW5lIGJSeFBXUmF0aW9FbiAgICAgICAgICAgICAweDQKLSNkZWZpbmUgYlJ4TUZIb2xkICAgICAgICAgICAgICAgIDB4MzgwMAotI2RlZmluZSBiUnhQRF9EZWxheV9USDEgICAgICAgICAgMHgzOAotI2RlZmluZSBiUnhQRF9EZWxheV9USDIgICAgICAgICAgMHgxYzAKLSNkZWZpbmUgYlJ4UERfRENfQ09VTlRfTUFYICAgICAgIDB4NjAwCi0vLyNkZWZpbmUgYlJ4TUZfSG9sZCAgICAgICAgICAgICAgIDB4MzgwMAorLyogUGFnZSBjICovCisjZGVmaW5lIGJOdW1PZlNURiAgICAgICAgICAgICAgICAJMHgzCisjZGVmaW5lIGJTaGlmdF9MICAgICAgICAgICAgICAgICAJMHhjMAorI2RlZmluZSBiR0lfVEggICAgICAgICAgICAgICAgICAgCTB4YworI2RlZmluZSBiUnhQYXRoQSAgICAgICAgICAgICAgICAgCTB4MQorI2RlZmluZSBiUnhQYXRoQiAgICAgICAgICAgICAgICAgCTB4MgorI2RlZmluZSBiUnhQYXRoQyAgICAgICAgICAgICAgICAgCTB4NAorI2RlZmluZSBiUnhQYXRoRCAgICAgICAgICAgICAgICAgCTB4OAorI2RlZmluZSBiVHhQYXRoQSAgICAgICAgICAgICAgICAgCTB4MQorI2RlZmluZSBiVHhQYXRoQiAgICAgICAgICAgICAgICAgCTB4MgorI2RlZmluZSBiVHhQYXRoQyAgICAgICAgICAgICAgICAgCTB4NAorI2RlZmluZSBiVHhQYXRoRCAgICAgICAgICAgICAgICAgCTB4OAorI2RlZmluZSBiVFJTU0lGcmVxICAgICAgICAgICAgICAgCTB4MjAwCisjZGVmaW5lIGJBRENCYWNrb2ZmICAgICAgICAgICAgICAJMHgzMDAwCisjZGVmaW5lIGJERklSQmFja29mZiAgICAgICAgICAgICAJMHhjMDAwCisjZGVmaW5lIGJUUlNTSUxhdGNoUGhhc2UgICAgICAgICAJMHgxMDAwMAorI2RlZmluZSBiUnhJRENPZmZzZXQgICAgICAgICAgICAgCTB4ZmYKKyNkZWZpbmUgYlJ4UURDT2Zmc2V0ICAgICAgICAgICAgIAkweGZmMDAKKyNkZWZpbmUgYlJ4REZJUk1vZGUgICAgICAgICAgICAgIAkweDE4MDAwMDAKKyNkZWZpbmUgYlJ4RENORlR5cGUgICAgICAgICAgICAgIAkweGUwMDAwMDAKKyNkZWZpbmUgYlJYSVFJbWJfQSAgICAgICAgICAgICAgIAkweDNmZgorI2RlZmluZSBiUlhJUUltYl9CICAgICAgICAgICAgICAgCTB4ZmMwMAorI2RlZmluZSBiUlhJUUltYl9DICAgICAgICAgICAgICAgCTB4M2YwMDAwCisjZGVmaW5lIGJSWElRSW1iX0QgICAgICAgICAgICAgICAJMHhmZmMwMDAwMAorI2RlZmluZSBiRENfZGNfTm90Y2ggICAgICAgICAgICAgCTB4NjAwMDAKKyNkZWZpbmUgYlJ4TkJJTm90Y2ggICAgICAgICAgICAgIAkweDFmMDAwMDAwCisjZGVmaW5lIGJQRF9USCAgICAgICAgICAgICAgICAgICAJMHhmCisjZGVmaW5lIGJQRF9USF9PcHQyICAgICAgICAgICAgICAJMHhjMDAwCisjZGVmaW5lIGJQV0VEX1RIICAgICAgICAgICAgICAgICAJMHg3MDAKKyNkZWZpbmUgYklmTUZfV2luX0wgICAgICAgICAgICAgIAkweDgwMAorI2RlZmluZSBiUERfT3B0aW9uICAgICAgICAgICAgICAgCTB4MTAwMAorI2RlZmluZSBiTUZfV2luX0wgICAgICAgICAgICAgICAgCTB4ZTAwMAorI2RlZmluZSBiQldfU2VhcmNoX0wgICAgICAgICAgICAgCTB4MzAwMDAKKyNkZWZpbmUgYndpbl9lbmhfTCAgICAgICAgICAgICAgIAkweGMwMDAwCisjZGVmaW5lIGJCV19USCAgICAgICAgICAgICAgICAgICAJMHg3MDAwMDAKKyNkZWZpbmUgYkVEX1RIMiAgICAgICAgICAgICAgICAgIAkweDM4MDAwMDAKKyNkZWZpbmUgYkJXX29wdGlvbiAgICAgICAgICAgICAgIAkweDQwMDAwMDAKKyNkZWZpbmUgYlJhdGlvX1RIICAgICAgICAgICAgICAgIAkweDE4MDAwMDAwCisjZGVmaW5lIGJXaW5kb3dfTCAgICAgICAgICAgICAgICAJMHhlMDAwMDAwMAorI2RlZmluZSBiU0JEX09wdGlvbiAgICAgICAgICAgICAgCTB4MQorI2RlZmluZSBiRnJhbWVfVEggICAgICAgICAgICAgICAgCTB4MWMKKyNkZWZpbmUgYkZTX09wdGlvbiAgICAgICAgICAgICAgIAkweDYwCisjZGVmaW5lIGJEQ19TbG9wZV9jaGVjayAgICAgICAgICAJMHg4MAorI2RlZmluZSBiRkd1YXJkX0NvdW50ZXJfRENfTCAgICAgCTB4ZTAwCisjZGVmaW5lIGJGcmFtZV9XZWlnaHRfU2hvcnQgICAgICAJMHg3MDAwCisjZGVmaW5lIGJTdWJfVHVuZSAgICAgICAgICAgICAgICAJMHhlMDAwMDAKKyNkZWZpbmUgYkZyYW1lX0RDX0xlbmd0aCAgICAgICAgIAkweGUwMDAwMDAKKyNkZWZpbmUgYlNCRF9zdGFydF9vZmZzZXQgICAgICAgIAkweDMwMDAwMDAwCisjZGVmaW5lIGJGcmFtZV9USF8yICAgICAgICAgICAgICAJMHg3CisjZGVmaW5lIGJGcmFtZV9HSTJfVEggICAgICAgICAgICAJMHgzOAorI2RlZmluZSBiR0kyX1N5bmNfZW4gICAgICAgICAgICAgCTB4NDAKKyNkZWZpbmUgYlNhcmNoX1Nob3J0X0Vhcmx5ICAgICAgIAkweDMwMAorI2RlZmluZSBiU2FyY2hfU2hvcnRfTGF0ZSAgICAgICAgCTB4YzAwCisjZGVmaW5lIGJTYXJjaF9HSTJfTGF0ZSAgICAgICAgICAJMHg3MDAwMAorI2RlZmluZSBiQ0ZPQW50U3VtICAgICAgICAgICAgICAgCTB4MQorI2RlZmluZSBiQ0ZPQWNjICAgICAgICAgICAgICAgICAgCTB4MgorI2RlZmluZSBiQ0ZPU3RhcnRPZmZzZXQgICAgICAgICAgCTB4YworI2RlZmluZSBiQ0ZPTG9va0JhY2sgICAgICAgICAgICAgCTB4NzAKKyNkZWZpbmUgYkNGT1N1bVdlaWdodCAgICAgICAgICAgIAkweDgwCisjZGVmaW5lIGJEQUdDRW5hYmxlICAgICAgICAgICAgICAJMHgxMDAwMAorI2RlZmluZSBiVFhJUUltYl9BICAgICAgICAgICAgICAgCTB4M2ZmCisjZGVmaW5lIGJUWElRSW1iX0IgICAgICAgICAgICAgICAJMHhmYzAwCisjZGVmaW5lIGJUWElRSW1iX0MgICAgICAgICAgICAgICAJMHgzZjAwMDAKKyNkZWZpbmUgYlRYSVFJbWJfRCAgICAgICAgICAgICAgIAkweGZmYzAwMDAwCisjZGVmaW5lIGJUeElEQ09mZnNldCAgICAgICAgICAgICAJMHhmZgorI2RlZmluZSBiVHhRRENPZmZzZXQgICAgICAgICAgICAgCTB4ZmYwMAorI2RlZmluZSBiVHhERklSTW9kZSAgICAgICAgICAgICAgCTB4MTAwMDAKKyNkZWZpbmUgYlR4UGVzdWRvTm9pc2VPbiAgICAgICAgIAkweDQwMDAwMDAKKyNkZWZpbmUgYlR4UGVzdWRvTm9pc2VfQSAgICAgICAgIAkweGZmCisjZGVmaW5lIGJUeFBlc3Vkb05vaXNlX0IgICAgICAgICAJMHhmZjAwCisjZGVmaW5lIGJUeFBlc3Vkb05vaXNlX0MgICAgICAgICAJMHhmZjAwMDAKKyNkZWZpbmUgYlR4UGVzdWRvTm9pc2VfRCAgICAgICAgIAkweGZmMDAwMDAwCisjZGVmaW5lIGJDQ0FEcm9wT3B0aW9uICAgICAgICAgICAJMHgyMDAwMAorI2RlZmluZSBiQ0NBRHJvcFRocmVzICAgICAgICAgICAgCTB4ZmZmMDAwMDAKKyNkZWZpbmUgYkVEQ0NBX0ggICAgICAgICAgICAgICAgIAkweGYKKyNkZWZpbmUgYkVEQ0NBX0wgICAgICAgICAgICAgICAgIAkweGYwCisjZGVmaW5lIGJMYW1iZGFfRUQgICAgICAgICAgICAgICAJMHgzMDAKKyNkZWZpbmUgYlJ4SW5pdGlhbEdhaW4gICAgICAgICAgIAkweDdmCisjZGVmaW5lIGJSeEFudERpdkVuICAgICAgICAgICAgICAJMHg4MAorI2RlZmluZSBiUnhBR0NBZGRyZXNzRm9yTE5BICAgICAgCTB4N2YwMAorI2RlZmluZSBiUnhIaWdoUG93ZXJGbG93ICAgICAgICAgCTB4ODAwMAorI2RlZmluZSBiUnhBR0NGcmVlemVUaHJlcyAgICAgICAgCTB4YzAwMDAKKyNkZWZpbmUgYlJ4RnJlZXplU3RlcF9BR0MxICAgICAgIAkweDMwMDAwMAorI2RlZmluZSBiUnhGcmVlemVTdGVwX0FHQzIgICAgICAgCTB4YzAwMDAwCisjZGVmaW5lIGJSeEZyZWV6ZVN0ZXBfQUdDMyAgICAgICAJMHgzMDAwMDAwCisjZGVmaW5lIGJSeEZyZWV6ZVN0ZXBfQUdDMCAgICAgICAJMHhjMDAwMDAwCisjZGVmaW5lIGJSeFJzc2lfQ21wX0VuICAgICAgICAgICAJMHgxMDAwMDAwMAorI2RlZmluZSBiUnhRdWlja0FHQ0VuICAgICAgICAgICAgCTB4MjAwMDAwMDAKKyNkZWZpbmUgYlJ4QUdDRnJlZXplVGhyZXNNb2RlICAgIAkweDQwMDAwMDAwCisjZGVmaW5lIGJSeE92ZXJGbG93Q2hlY2tUeXBlICAgICAJMHg4MDAwMDAwMAorI2RlZmluZSBiUnhBR0NTaGlmdCAgICAgICAgICAgICAgCTB4N2YKKyNkZWZpbmUgYlRSU1dfVHJpX09ubHkgICAgICAgICAgIAkweDgwCisjZGVmaW5lIGJQb3dlclRocmVzICAgICAgICAgICAgICAJMHgzMDAKKyNkZWZpbmUgYlJ4QUdDRW4gICAgICAgICAgICAgICAgCTB4MQorI2RlZmluZSBiUnhBR0NUb2dldGhlckVuICAgICAgICAgCTB4MgorI2RlZmluZSBiUnhBR0NNaW4gICAgICAgICAgICAgICAgCTB4NAorI2RlZmluZSBiUnhIUF9JbmkgICAgICAgICAgICAgICAgCTB4NworI2RlZmluZSBiUnhIUF9UUkxOQSAgICAgICAgICAgICAgCTB4NzAKKyNkZWZpbmUgYlJ4SFBfUlNTSSAgICAgICAgICAgICAgIAkweDcwMAorI2RlZmluZSBiUnhIUF9CQlAxICAgICAgICAgICAgICAgCTB4NzAwMAorI2RlZmluZSBiUnhIUF9CQlAyICAgICAgICAgICAgICAgCTB4NzAwMDAKKyNkZWZpbmUgYlJ4SFBfQkJQMyAgICAgICAgICAgICAgIAkweDcwMDAwMAorLyogVGhlIHRocmVzaG9sZCBmb3IgaGlnaCBwb3dlciAqLworI2RlZmluZSBiUlNTSV9IICAgICAgICAgICAgICAgICAgCTB4N2YwMDAwCisvKiBUaGUgdGhyZXNob2xkIGZvciBhbnQgZGl2ZXJzaXR5ICovCisjZGVmaW5lIGJSU1NJX0dlbiAgICAgICAgICAgICAgICAJMHg3ZjAwMDAwMAorI2RlZmluZSBiUnhTZXR0bGVfVFJTVyAgICAgICAgICAgCTB4NworI2RlZmluZSBiUnhTZXR0bGVfTE5BICAgICAgICAgICAgCTB4MzgKKyNkZWZpbmUgYlJ4U2V0dGxlX1JTU0kgICAgICAgICAgIAkweDFjMAorI2RlZmluZSBiUnhTZXR0bGVfQkJQICAgICAgICAgICAgCTB4ZTAwCisjZGVmaW5lIGJSeFNldHRsZV9SeEhQICAgICAgICAgICAJMHg3MDAwCisjZGVmaW5lIGJSeFNldHRsZV9BbnRTV19SU1NJICAgICAJMHgzODAwMAorI2RlZmluZSBiUnhTZXR0bGVfQW50U1cgICAgICAgICAgCTB4YzAwMDAKKyNkZWZpbmUgYlJ4UHJvY2Vzc1RpbWVfREFHQyAgICAgIAkweDMwMDAwMAorI2RlZmluZSBiUnhTZXR0bGVfSFNTSSAgICAgICAgICAgCTB4NDAwMDAwCisjZGVmaW5lIGJSeFByb2Nlc3NUaW1lX0JCUFBXICAgICAJMHg4MDAwMDAKKyNkZWZpbmUgYlJ4QW50ZW5uYVBvd2VyU2hpZnQgICAgIAkweDMwMDAwMDAKKyNkZWZpbmUgYlJTU0lUYWJsZVNlbGVjdCAgICAgICAgIAkweGMwMDAwMDAKKyNkZWZpbmUgYlJ4SFBfRmluYWwgICAgICAgICAgICAgIAkweDcwMDAwMDAKKyNkZWZpbmUgYlJ4SFRTZXR0bGVfQkJQICAgICAgICAgIAkweDcKKyNkZWZpbmUgYlJ4SFRTZXR0bGVfSFNTSSAgICAgICAgIAkweDgKKyNkZWZpbmUgYlJ4SFRTZXR0bGVfUnhIUCAgICAgICAgIAkweDcwCisjZGVmaW5lIGJSeEhUU2V0dGxlX0JCUFBXICAgICAgICAJMHg4MAorI2RlZmluZSBiUnhIVFNldHRsZV9JZGxlICAgICAgICAgCTB4MzAwCisjZGVmaW5lIGJSeEhUU2V0dGxlX1Jlc2VydmVkICAgICAJMHgxYzAwCisjZGVmaW5lIGJSeEhUUnhIUEVuICAgICAgICAgICAgICAJMHg4MDAwCisjZGVmaW5lIGJSeEhUQUdDRnJlZXplVGhyZXMgICAgICAJMHgzMDAwMAorI2RlZmluZSBiUnhIVEFHQ1RvZ2V0aGVyRW4gICAgICAgCTB4NDAwMDAKKyNkZWZpbmUgYlJ4SFRBR0NNaW4gICAgICAgICAgICAgIAkweDgwMDAwCisjZGVmaW5lIGJSeEhUQUdDRW4gICAgICAgICAgICAgICAJMHgxMDAwMDAKKyNkZWZpbmUgYlJ4SFREQUdDRW4gICAgICAgICAgICAgIAkweDIwMDAwMAorI2RlZmluZSBiUnhIVFJ4SFBfQkJQICAgICAgICAgICAgCTB4MWMwMDAwMAorI2RlZmluZSBiUnhIVFJ4SFBfRmluYWwgICAgICAgICAgCTB4ZTAwMDAwMDAKKyNkZWZpbmUgYlJ4UFdSYXRpb1RIICAgICAgICAgICAgIAkweDMKKyNkZWZpbmUgYlJ4UFdSYXRpb0VuICAgICAgICAgICAgIAkweDQKKyNkZWZpbmUgYlJ4TUZIb2xkICAgICAgICAgICAgICAgIAkweDM4MDAKKyNkZWZpbmUgYlJ4UERfRGVsYXlfVEgxICAgICAgICAgIAkweDM4CisjZGVmaW5lIGJSeFBEX0RlbGF5X1RIMiAgICAgICAgICAJMHgxYzAKKyNkZWZpbmUgYlJ4UERfRENfQ09VTlRfTUFYICAgICAgIAkweDYwMAorLyojZGVmaW5lIGJSeE1GX0hvbGQgICAgICAgICAgICAgICAJMHgzODAwKi8KICNkZWZpbmUgYlJ4UERfRGVsYXlfVEggICAgICAgICAgIDB4ODAwMAogI2RlZmluZSBiUnhQcm9jZXNzX0RlbGF5ICAgICAgICAgMHhmMDAwMAogI2RlZmluZSBiUnhTZWFyY2hyYW5nZV9HSTJfRWFybHkgMHg3MDAwMDAKQEAgLTY1OSw3ICs2OTIsNyBAQAogCiAjZGVmaW5lIGJFeHRMTkFHYWluICAgICAgICAgICAgICAweDdjMDAKIAotLy9wYWdlIGQKKy8qIFBhZ2UgZCAqLwogI2RlZmluZSBiU1RCQ0VuICAgICAgICAgICAgICAgICAgMHg0CiAjZGVmaW5lIGJBbnRlbm5hTWFwcGluZyAgICAgICAgICAweDEwCiAjZGVmaW5lIGJOc3MgICAgICAgICAgICAgICAgICAgICAweDIwCkBAIC02NjksMTIgKzcwMiwxMiBAQAogI2RlZmluZSBiT0ZETUNvbnRpbnVlVHggICAgICAgICAgMHgxMDAwMDAwMAogI2RlZmluZSBiT0ZETVNpbmdsZUNhcnJpZXIgICAgICAgMHgyMDAwMDAwMAogI2RlZmluZSBiT0ZETVNpbmdsZVRvbmUgICAgICAgICAgMHg0MDAwMDAwMAotLy8jZGVmaW5lIGJSeFBhdGgxICAgICAgICAgICAgICAgICAweDAxCi0vLyNkZWZpbmUgYlJ4UGF0aDIgICAgICAgICAgICAgICAgIDB4MDIKLS8vI2RlZmluZSBiUnhQYXRoMyAgICAgICAgICAgICAgICAgMHgwNAotLy8jZGVmaW5lIGJSeFBhdGg0ICAgICAgICAgICAgICAgICAweDA4Ci0vLyNkZWZpbmUgYlR4UGF0aDEgICAgICAgICAgICAgICAgIDB4MTAKLS8vI2RlZmluZSBiVHhQYXRoMiAgICAgICAgICAgICAgICAgMHgyMAorLyojZGVmaW5lIGJSeFBhdGgxICAgICAgICAgICAgICAgICAweDAxCisjZGVmaW5lIGJSeFBhdGgyICAgICAgICAgICAgICAgICAweDAyCisjZGVmaW5lIGJSeFBhdGgzICAgICAgICAgICAgICAgICAweDA0CisjZGVmaW5lIGJSeFBhdGg0ICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIGJUeFBhdGgxICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIGJUeFBhdGgyICAgICAgICAgICAgICAgICAweDIwKi8KICNkZWZpbmUgYkhURGV0ZWN0ICAgICAgICAgICAgICAgIDB4MTAwCiAjZGVmaW5lIGJDRk9FbiAgICAgICAgICAgICAgICAgICAweDEwMDAwCiAjZGVmaW5lIGJDRk9WYWx1ZSAgICAgICAgICAgICAgICAweGZmZjAwMDAwCkBAIC02ODcsOCArNzIwLDEwIEBACiAjZGVmaW5lIGJDb3VudGVyX01DU05vU3VwcG9ydCAgICAweGZmZmYKICNkZWZpbmUgYkNvdW50ZXJfRmFzdFN5bmMgICAgICAgIDB4ZmZmZgogI2RlZmluZSBiU2hvcnRDRk8gICAgICAgICAgICAgICAgMHhmZmYKLSNkZWZpbmUgYlNob3J0Q0ZPVExlbmd0aCAgICAgICAgIDEyICAgLy90b3RhbAotI2RlZmluZSBiU2hvcnRDRk9GTGVuZ3RoICAgICAgICAgMTEgICAvL2ZyYWN0aW9uCisvKiB0b3RhbCAqLworI2RlZmluZSBiU2hvcnRDRk9UTGVuZ3RoICAgICAgICAgMTIKKy8qIGZyYWN0aW9uICovCisjZGVmaW5lIGJTaG9ydENGT0ZMZW5ndGggICAgICAgICAxMQogI2RlZmluZSBiTG9uZ0NGTyAgICAgICAgICAgICAgICAgMHg3ZmYKICNkZWZpbmUgYkxvbmdDRk9UTGVuZ3RoICAgICAgICAgIDExCiAjZGVmaW5lIGJMb25nQ0ZPRkxlbmd0aCAgICAgICAgICAxMQpAQCAtNzY1LDE4ICs4MDAsMTggQEAKICNkZWZpbmUgYlVDaENmZyAgICAgICAgICAgICAgICAgIDB4NzAwMDAwMAogI2RlZmluZSBiVXBkRXF6ICAgICAgICAgICAgICAgICAgMHg4MDAwMDAwCiAKLS8vcGFnZSBlCi0jZGVmaW5lIGJUeEFHQ1JhdGUxOF8wNgkJCTB4N2Y3ZjdmN2YKLSNkZWZpbmUgYlR4QUdDUmF0ZTU0XzI0CQkJMHg3ZjdmN2Y3ZgorLyogUGFnZSBlICovCisjZGVmaW5lIGJUeEFHQ1JhdGUxOF8wNgkJMHg3ZjdmN2Y3ZgorI2RlZmluZSBiVHhBR0NSYXRlNTRfMjQJCTB4N2Y3ZjdmN2YKICNkZWZpbmUgYlR4QUdDUmF0ZU1DUzMyCQkweDdmCi0jZGVmaW5lIGJUeEFHQ1JhdGVDQ0sJCQkweDdmMDAKKyNkZWZpbmUgYlR4QUdDUmF0ZUNDSwkJMHg3ZjAwCiAjZGVmaW5lIGJUeEFHQ1JhdGVNQ1MzX01DUzAJMHg3ZjdmN2Y3ZgogI2RlZmluZSBiVHhBR0NSYXRlTUNTN19NQ1M0CTB4N2Y3ZjdmN2YKICNkZWZpbmUgYlR4QUdDUmF0ZU1DUzExX01DUzgJMHg3ZjdmN2Y3ZgogI2RlZmluZSBiVHhBR0NSYXRlTUNTMTVfTUNTMTIJMHg3ZjdmN2Y3ZgogCiAKLS8vUnggUHNlZHVvIG5vaXNlCisvKiBSeCBQc2VkdW8gbm9pc2UgKi8KICNkZWZpbmUgYlJ4UGVzdWRvTm9pc2VPbiAgICAgICAgIDB4MjAwMDAwMDAKICNkZWZpbmUgYlJ4UGVzdWRvTm9pc2VfQSAgICAgICAgIDB4ZmYKICNkZWZpbmUgYlJ4UGVzdWRvTm9pc2VfQiAgICAgICAgIDB4ZmYwMApAQCAtNzg3LDggKzgyMiw3IEBACiAjZGVmaW5lIGJQZXN1ZG9Ob2lzZVN0YXRlX0MgICAgICAweGZmZmYKICNkZWZpbmUgYlBlc3Vkb05vaXNlU3RhdGVfRCAgICAgIDB4ZmZmZjAwMDAKIAotLy9SRgotLy9aZWJyYTEKKy8qIFJGIFplYnJhIDEgKi8KICNkZWZpbmUgYlplYnJhMV9IU1NJRW5hYmxlICAgICAgICAweDgKICNkZWZpbmUgYlplYnJhMV9UUnhDb250cm9sICAgICAgICAweGMwMAogI2RlZmluZSBiWmVicmExX1RSeEdhaW5TZXR0aW5nICAgIDB4MDdmCkBAIC03OTksNyArODMzLDcgQEAKICNkZWZpbmUgYlplYnJhMV9UeExQRkJXICAgICAgICAgICAweDQwMAogI2RlZmluZSBiWmVicmExX1J4TFBGQlcgICAgICAgICAgIDB4NjAwCiAKLS8vWmVicmE0CisvKiBaZWJyYTQgKi8KICNkZWZpbmUgYlJUTDgyNTZSZWdNb2RlQ3RybDEgICAgICAweDEwMAogI2RlZmluZSBiUlRMODI1NlJlZ01vZGVDdHJsMCAgICAgIDB4NDAKICNkZWZpbmUgYlJUTDgyNTZfVHhMUEZCVyAgICAgICAgICAweDE4CkBAIC04MTAsNyArODQ0LDcgQEAKICNkZWZpbmUgYlJUTDgyNThfUnhMUEZCVyAgICAgICAgICAweGMwMAogI2RlZmluZSBiUlRMODI1OF9SU1NJTFBGQlcgICAgICAgIDB4YzAKIAotLy9ieXRlIGVuZGFibGUgZm9yIHNiX3dyaXRlCisvKiBieXRlIGVuZGFibGUgZm9yIHNiX3dyaXRlICovCiAjZGVmaW5lIGJCeXRlMCAgICAgICAgICAgICAgICAgICAgMHgxCiAjZGVmaW5lIGJCeXRlMSAgICAgICAgICAgICAgICAgICAgMHgyCiAjZGVmaW5lIGJCeXRlMiAgICAgICAgICAgICAgICAgICAgMHg0CkBAIC04MTksNyArODUzLDcgQEAKICNkZWZpbmUgYldvcmQxICAgICAgICAgICAgICAgICAgICAweGMKICNkZWZpbmUgYkRXb3JkICAgICAgICAgICAgICAgICAgICAweGYKIAotLy9mb3IgUHV0UmVnc2V0dGluZyAmIEdldFJlZ1NldHRpbmcgQml0TWFzaworLyogZm9yIFB1dFJlZ3NldHRpbmcgJiBHZXRSZWdTZXR0aW5nIEJpdE1hc2sgKi8KICNkZWZpbmUgYk1hc2tCeXRlMCAgICAgICAgICAgICAgICAweGZmCiAjZGVmaW5lIGJNYXNrQnl0ZTEgICAgICAgICAgICAgICAgMHhmZjAwCiAjZGVmaW5lIGJNYXNrQnl0ZTIgICAgICAgICAgICAgICAgMHhmZjAwMDAKQEAgLTgyOCw3ICs4NjIsNyBAQAogI2RlZmluZSBiTWFza0xXb3JkICAgICAgICAgICAgICAgIDB4MDAwMGZmZmYKICNkZWZpbmUgYk1hc2tEV29yZCAgICAgICAgICAgICAgICAweGZmZmZmZmZmCiAKLS8vZm9yIFB1dFJGUmVnc2V0dGluZyAmIEdldFJGUmVnU2V0dGluZyBCaXRNYXNrCisvKiBmb3IgUHV0UkZSZWdzZXR0aW5nICYgR2V0UkZSZWdTZXR0aW5nIEJpdE1hc2sgKi8KICNkZWZpbmUgYk1hc2sxMkJpdHMgICAgICAgICAgICAgICAweGZmZgogCiAjZGVmaW5lIGJFbmFibGUgICAgICAgICAgICAgICAgICAgMHgxCkBAIC04MzcsMTQgKzg3MSwxNiBAQAogI2RlZmluZSBMZWZ0QW50ZW5uYSAgICAgICAgICAgICAgIDB4MAogI2RlZmluZSBSaWdodEFudGVubmEgICAgICAgICAgICAgIDB4MQogCi0jZGVmaW5lIHRDaGVja1R4U3RhdHVzICAgICAgICAgICAgNTAwICAgLy81MDBtcwotI2RlZmluZSB0VXBkYXRlUnhDb3VudGVyICAgICAgICAgIDEwMCAgIC8vMTAwbXMKKy8qIDUwMCBtcyAqLworI2RlZmluZSB0Q2hlY2tUeFN0YXR1cyAgICAgICAgICAgIDUwMAorLyogMTAwIG1zICovCisjZGVmaW5lIHRVcGRhdGVSeENvdW50ZXIgICAgICAgICAgMTAwCiAKICNkZWZpbmUgcmF0ZUNDSyAgICAgMAogI2RlZmluZSByYXRlT0ZETSAgICAxCiAjZGVmaW5lIHJhdGVIVCAgICAgIDIKIAotLy9kZWZpbmUgUmVnaXN0ZXItRW5kCisvKiBkZWZpbmUgUmVnaXN0ZXItRW5kICovCiAjZGVmaW5lIGJQTUFDX0VuZCAgICAgICAgICAgICAgICAgMHgxZmYKICNkZWZpbmUgYkZQR0FQSFkwX0VuZCAgICAgICAgICAgICAweDhmZgogI2RlZmluZSBiRlBHQVBIWTFfRW5kICAgICAgICAgICAgIDB4OWZmCkBAIC04NTIsMTIgKzg4OCwxMiBAQAogI2RlZmluZSBiT0ZETVBIWTBfRW5kICAgICAgICAgICAgIDB4Y2ZmCiAjZGVmaW5lIGJPRkRNUEhZMV9FbmQgICAgICAgICAgICAgMHhkZmYKIAotLy9kZWZpbmUgbWF4IGRlYnVnIGl0ZW0gaW4gZWFjaCBkZWJ1ZyBwYWdlCi0vLyNkZWZpbmUgYk1heEl0ZW1fRlBHQV9QSFkwICAgICAgICAweDkKLS8vI2RlZmluZSBiTWF4SXRlbV9GUEdBX1BIWTEgICAgICAgIDB4MwotLy8jZGVmaW5lIGJNYXhJdGVtX1BIWV8xMUIgICAgICAgICAgMHgxNgotLy8jZGVmaW5lIGJNYXhJdGVtX09GRE1fUEhZMCAgICAgICAgMHgyOQotLy8jZGVmaW5lIGJNYXhJdGVtX09GRE1fUEhZMSAgICAgICAgMHgwCisvKiNkZWZpbmUgbWF4IGRlYnVnIGl0ZW0gaW4gZWFjaCBkZWJ1ZyBwYWdlCisjZGVmaW5lIGJNYXhJdGVtX0ZQR0FfUEhZMCAgICAgICAgMHg5CisjZGVmaW5lIGJNYXhJdGVtX0ZQR0FfUEhZMSAgICAgICAgMHgzCisjZGVmaW5lIGJNYXhJdGVtX1BIWV8xMUIgICAgICAgICAgMHgxNgorI2RlZmluZSBiTWF4SXRlbV9PRkRNX1BIWTAgICAgICAgIDB4MjkKKyNkZWZpbmUgYk1heEl0ZW1fT0ZETV9QSFkxICAgICAgICAweDAgKi8KIAogI2RlZmluZSBiUE1BQ0NvbnRyb2wgICAgICAgICAgICAgIDB4MAogI2RlZmluZSBiV01BQ0NvbnRyb2wgICAgICAgICAgICAgIDB4MQpAQCAtODY4LDExICs5MDQsMTIgQEAKICNkZWZpbmUgUGF0aEMgICAgICAgICAgICAgICAgICAgICAweDIKICNkZWZpbmUgUGF0aEQgICAgICAgICAgICAgICAgICAgICAweDMKIAotI2RlZmluZQlyUlRMODI1NlJ4TWl4ZXJQb2xlCQkweGIKLSNkZWZpbmUgCWJaZWJyYVJ4TWl4ZXJQb2xlCQkweDYKLSNkZWZpbmUgCXJSVEw4MjU2VHhCQk9QQmlhcyAgICAgICAgMHg5Ci0jZGVmaW5lIAliUlRMODI1NlR4QkJPUEJpYXMgICAgICAgMHg0MDAKLSNkZWZpbmUgCXJSVEw4MjU2VHhCQkJXICAgICAgICAgICAgIDE5Ci0jZGVmaW5lIAliUlRMODI1NlR4QkJCVyAgICAgICAgICAgIAkweDE4CisjZGVmaW5lIHJSVEw4MjU2UnhNaXhlclBvbGUJMHhiCisjZGVmaW5lIGJaZWJyYVJ4TWl4ZXJQb2xlCTB4NgorI2RlZmluZSByUlRMODI1NlR4QkJPUEJpYXMJMHg5CisjZGVmaW5lIGJSVEw4MjU2VHhCQk9QQmlhcwkweDQwMAorI2RlZmluZSByUlRMODI1NlR4QkJCVwkJMTkKKyNkZWZpbmUgYlJUTDgyNTZUeEJCQlcJCTB4MTgKIAotI2VuZGlmCS8vX19JTkNfSEFMODE5MFBDSVBIWVJFR19ICisKKyNlbmRpZgkvKiBfX0lOQ19IQUw4MTkwUENJUEhZUkVHX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvS2NvbmZpZwppbmRleCAxMjNmYTZkLi5iNzJhOTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9LY29uZmlnCkBAIC0xLDYgKzEsNyBAQAogY29uZmlnIFJUTDgxOTJTVQogCXRyaXN0YXRlICJSZWFsVGVrIFJUTDgxOTJTVSBXaXJlbGVzcyBMQU4gTklDIGRyaXZlciIKIAlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOICYmIFVTQgotCWRlcGVuZHMgb24gV0lSRUxFU1NfRVhUCisJc2VsZWN0IFdJUkVMRVNTX0VYVAorCXNlbGVjdCBXRVhUX1BSSVYKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L1RPRE8KaW5kZXggZjExZWVjNy4uM2M4ZGExNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvVE9ETwpAQCAtNCw3ICs0LDYgQEAKICAgLSBjbGVhbnVwIGllZWU4MDIxMS5oCiAgIC0gbW92ZSBydGw4MTkyc3UncyBzcGVjaWZpYyBjb2RlIG91dCBmcm9tIGllZWU4MDIxMS5oCiAgIC0gYWJzdHJhY3QgcnRsODE5c3UncyBzcGVjaWZpYyBjb2RlCi0gIC0gdXNlIGxpc3RfZm9yX2VhY2hfc2FmZSgpIGluIGllZWU4MDIxMV9jcnlwdG9fZGVpbml0CiAtIHN3aXRjaCB0byB1c2Ugc2hhcmVkICJsaWJydGwiIGluc3RlYWQgb2YgcHJpdmF0ZSBpZWVlODAyMTEgc3RhY2sKIC0gc3dpdGNoIHRvIHVzZSBMSUI4MDIxMQogLSBzd2l0Y2ggdG8gdXNlIE1BQzgwMjExCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTEuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMS5oCmluZGV4IDlhNGM4NTguLjMyYjI2MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMS5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KQEAgLTE5NSwxMCArMTk2LDYgQEAKICNkZWZpbmUgSUVFRTgwMjExX0RFQlVHX0RBVEEobGV2ZWwsIGRhdGEsIGRhdGFsZW4pIGRvIHt9IHdoaWxlKDApCiAjZW5kaWYJLyogQ09ORklHX0lFRUU4MDIxMV9ERUJVRyAqLwogCi0jZGVmaW5lIE1BQ19GTVQgIiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4IgotI2RlZmluZSBNQUNfQVJHKHgpICgodTggKikoeCkpWzBdLCAoKHU4ICopKHgpKVsxXSwgKCh1OCAqKSh4KSlbMl0sIFwKLQkJICAgKCh1OCAqKSh4KSlbM10sICgodTggKikoeCkpWzRdLCAoKHU4ICopKHgpKVs1XQotCiAvKgogICogVG8gdXNlIHRoZSBkZWJ1ZyBzeXN0ZW07CiAgKgpAQCAtNjA5LDE2ICs2MDYsNiBAQAogICAgICAgICB1OCBwYXlsb2FkWzBdOwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CiAKLXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyIHsKLQlfX2xlMTYgZnJhbWVfY3RsOwotCV9fbGUxNiBkdXJhdGlvbl9pZDsKLQl1OCBhZGRyMVtFVEhfQUxFTl07Ci0JdTggYWRkcjJbRVRIX0FMRU5dOwotCXU4IGFkZHIzW0VUSF9BTEVOXTsKLQlfX2xlMTYgc2VxX2N0bDsKLSAgICAgICAgdTggcGF5bG9hZFswXTsKLX0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwotCiBzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciB7CiAJX19sZTE2IGZyYW1lX2N0bDsKIAlfX2xlMTYgZHVyYXRpb25faWQ7CkBAIC0xNjcyLDcgKzE2NTksNyBAQAogICAgICAgICBjYXNlIElFRUU4MDIxMV8yQUREUl9MRU46CiAgICAgICAgICAgICAgICAgcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9oZHJfMmFkZHIgKiloZHIpLT5wYXlsb2FkOwogICAgICAgICBjYXNlIElFRUU4MDIxMV8zQUREUl9MRU46Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKiloZHIpLT5wYXlsb2FkOworICAgICAgICAgICAgICAgIHJldHVybiAodm9pZCAqKWhkcitzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOwogICAgICAgICBjYXNlIElFRUU4MDIxMV80QUREUl9MRU46CiAgICAgICAgICAgICAgICAgcmV0dXJuICgoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKiloZHIpLT5wYXlsb2FkOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHQuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCmluZGV4IDUyMWU3YjkuLmM0NjQwZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdC5jCkBAIC0yMjYsMTkgKzIyNiwyMCBAQAogdm9pZCBfX2V4aXQgaWVlZTgwMjExX2NyeXB0b19kZWluaXQodm9pZCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwdHIsICpuOworCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX2FsZyAqYWxnID0gTlVMTDsKIAogCWlmIChoY3J5cHQgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JZm9yIChwdHIgPSBoY3J5cHQtPmFsZ3MubmV4dCwgbiA9IHB0ci0+bmV4dDsgcHRyICE9ICZoY3J5cHQtPmFsZ3M7Ci0JICAgICBwdHIgPSBuLCBuID0gcHRyLT5uZXh0KSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfY3J5cHRvX2FsZyAqYWxnID0KLQkJCShzdHJ1Y3QgaWVlZTgwMjExX2NyeXB0b19hbGcgKikgcHRyOwotCQlsaXN0X2RlbChwdHIpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiaWVlZTgwMjExX2NyeXB0OiB1bnJlZ2lzdGVyZWQgYWxnb3JpdGhtICIKLQkJICAgICAgICInJXMnIChkZWluaXQpXG4iLCBhbGctPm9wcy0+bmFtZSk7Ci0JCWtmcmVlKGFsZyk7CisJbGlzdF9mb3JfZWFjaF9zYWZlKHB0ciwgbiwgJmhjcnlwdC0+YWxncykgeworCQlhbGcgPSBsaXN0X2VudHJ5KHB0ciwgc3RydWN0IGllZWU4MDIxMV9jcnlwdG9fYWxnLCBsaXN0KTsKKwkJaWYgKGFsZykgeworCQkJbGlzdF9kZWwocHRyKTsKKwkJCXByaW50ayhLRVJOX0RFQlVHCisJCQkgICAgICAgImllZWU4MDIxMV9jcnlwdDogdW5yZWdpc3RlcmVkIGFsZ29yaXRobSAnJXMnIChkZWluaXQpXG4iLAorCQkJICAgICAgIGFsZy0+b3BzLT5uYW1lKTsKKwkJCWtmcmVlKGFsZyk7CisJCX0KIAl9Ci0KIAlrZnJlZShoY3J5cHQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF9jY21wLmMKaW5kZXggN2JjOTU2ZS4uOGE5M2Y3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jCkBAIC0yODgsNyArMjg4LDcgQEAKIAlpZiAoIShrZXlpZHggJiAoMSA8PCA1KSkpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIkNDTVA6IHJlY2VpdmVkIHBhY2tldCB3aXRob3V0IEV4dElWIgotCQkJICAgICAgICIgZmxhZyBmcm9tICIgTUFDX0ZNVCAiXG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCSAgICAgICAiIGZsYWcgZnJvbSAlcE1cbiIsIGhkci0+YWRkcjIpOwogCQl9CiAJCWtleS0+ZG90MTFSU05BU3RhdHNDQ01QRm9ybWF0RXJyb3JzKys7CiAJCXJldHVybiAtMjsKQEAgLTMwMSw5ICszMDEsOSBAQAogCX0KIAlpZiAoIWtleS0+a2V5X3NldCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVjZWl2ZWQgcGFja2V0IGZyb20gIiBNQUNfRk1UCisJCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVjZWl2ZWQgcGFja2V0IGZyb20gJXBNIgogCQkJICAgICAgICIgd2l0aCBrZXlpZD0lZCB0aGF0IGRvZXMgbm90IGhhdmUgYSBjb25maWd1cmVkIgotCQkJICAgICAgICIga2V5XG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpLCBrZXlpZHgpOworCQkJICAgICAgICIga2V5XG4iLCBoZHItPmFkZHIyLCBrZXlpZHgpOwogCQl9CiAJCXJldHVybiAtMzsKIAl9CkBAIC0zMTgsMTEgKzMxOCw5IEBACiAKIAlpZiAobWVtY21wKHBuLCBrZXktPnJ4X3BuLCBDQ01QX1BOX0xFTikgPD0gMCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVwbGF5IGRldGVjdGVkOiBTVEE9IiBNQUNfRk1UCi0JCQkgICAgICAgIiBwcmV2aW91cyBQTiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIgotCQkJICAgICAgICJyZWNlaXZlZCBQTiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCi0JCQkgICAgICAgTUFDX0FSRyhoZHItPmFkZHIyKSwgTUFDX0FSRyhrZXktPnJ4X3BuKSwKLQkJCSAgICAgICBNQUNfQVJHKHBuKSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVwbGF5IGRldGVjdGVkOiBTVEE9JXBNIgorCQkJICAgICAgICIgcHJldmlvdXMgUE4gJXBtIHJlY2VpdmVkIFBOICVwbVxuIiwKKwkJCSAgICAgICBoZHItPmFkZHIyLCBrZXktPnJ4X3BuLCBwbik7CiAJCX0KIAkJa2V5LT5kb3QxMVJTTkFTdGF0c0NDTVBSZXBsYXlzKys7CiAJCXJldHVybiAtNDsKQEAgLTM1OSw3ICszNTcsNyBAQAogCQlpZiAobWVtY21wKG1pYywgYSwgQ0NNUF9NSUNfTEVOKSAhPSAwKSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIkNDTVA6IGRlY3J5cHQgZmFpbGVkOiBTVEE9IgotCQkJCU1BQ19GTVQgIlxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkJIiVwTVxuIiwgaGRyLT5hZGRyMik7CiAJCQl9CiAJCQlrZXktPmRvdDExUlNOQVN0YXRzQ0NNUERlY3J5cHRFcnJvcnMrKzsKIAkJCXJldHVybiAtNTsKQEAgLTQzNSwxMSArNDMzLDEwIEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9jY21wX2RhdGEgKmNjbXAgPSBwcml2OwogCXAgKz0gc3ByaW50ZihwLCAia2V5WyVkXSBhbGc9Q0NNUCBrZXlfc2V0PSVkICIKLQkJICAgICAidHhfcG49JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKLQkJICAgICAicnhfcG49JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKKwkJICAgICAidHhfcG49JXBtIHJ4X3BuPSVwbSAiCiAJCSAgICAgImZvcm1hdF9lcnJvcnM9JWQgcmVwbGF5cz0lZCBkZWNyeXB0X2Vycm9ycz0lZFxuIiwKIAkJICAgICBjY21wLT5rZXlfaWR4LCBjY21wLT5rZXlfc2V0LAotCQkgICAgIE1BQ19BUkcoY2NtcC0+dHhfcG4pLCBNQUNfQVJHKGNjbXAtPnJ4X3BuKSwKKwkJICAgICBjY21wLT50eF9wbiwgY2NtcC0+cnhfcG4sCiAJCSAgICAgY2NtcC0+ZG90MTFSU05BU3RhdHNDQ01QRm9ybWF0RXJyb3JzLAogCQkgICAgIGNjbXAtPmRvdDExUlNOQVN0YXRzQ0NNUFJlcGxheXMsCiAJCSAgICAgY2NtcC0+ZG90MTFSU05BU3RhdHNDQ01QRGVjcnlwdEVycm9ycyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYwppbmRleCA5Yjk0MzhmLi43ZTQ4NzQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKQEAgLTQxMCw3ICs0MTAsNyBAQAogCWlmICghKGtleWlkeCAmICgxIDw8IDUpKSkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUDogcmVjZWl2ZWQgcGFja2V0IHdpdGhvdXQgRXh0SVYiCi0JCQkgICAgICAgIiBmbGFnIGZyb20gIiBNQUNfRk1UICJcbiIsIE1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJICAgICAgICIgZmxhZyBmcm9tICVwTVxuIiwgaGRyLT5hZGRyMik7CiAJCX0KIAkJcmV0dXJuIC0yOwogCX0KQEAgLTQyMiw5ICs0MjIsOSBAQAogCX0KIAlpZiAoIXRrZXktPmtleV9zZXQpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVA6IHJlY2VpdmVkIHBhY2tldCBmcm9tICIgTUFDX0ZNVAorCQkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVA6IHJlY2VpdmVkIHBhY2tldCBmcm9tICVwTSIKIAkJCSAgICAgICAiIHdpdGgga2V5aWQ9JWQgdGhhdCBkb2VzIG5vdCBoYXZlIGEgY29uZmlndXJlZCIKLQkJCSAgICAgICAiIGtleVxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSwga2V5aWR4KTsKKwkJCSAgICAgICAiIGtleVxuIiwgaGRyLT5hZGRyMiwga2V5aWR4KTsKIAkJfQogCQlyZXR1cm4gLTM7CiAJfQpAQCAtNDM3LDkgKzQzNyw5IEBACiAJCWlmIChpdjMyIDwgdGtleS0+cnhfaXYzMiB8fAogCQkoaXYzMiA9PSB0a2V5LT5yeF9pdjMyICYmIGl2MTYgPD0gdGtleS0+cnhfaXYxNikpIHsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUDogcmVwbGF5IGRldGVjdGVkOiBTVEE9IiBNQUNfRk1UCisJCQkJcHJpbnRrKEtFUk5fREVCVUcgIlRLSVA6IHJlcGxheSBkZXRlY3RlZDogU1RBPSVwTSIKIAkJCQkiIHByZXZpb3VzIFRTQyAlMDh4JTA0eCByZWNlaXZlZCBUU0MgIgotCQkJCSIlMDh4JTA0eFxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSwKKwkJCQkiJTA4eCUwNHhcbiIsIGhkci0+YWRkcjIsCiAJCQkJdGtleS0+cnhfaXYzMiwgdGtleS0+cnhfaXYxNiwgaXYzMiwgaXYxNik7CiAJCQl9CiAJCQl0a2V5LT5kb3QxMVJTTkFTdGF0c1RLSVBSZXBsYXlzKys7CkBAIC00NjAsOCArNDYwLDggQEAKIAkJaWYgKGNyeXB0b19ibGtjaXBoZXJfZGVjcnlwdCgmZGVzYywgJnNnLCAmc2csIHBsZW4gKyA0KSkgewogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJCXByaW50ayhLRVJOX0RFQlVHICI6IFRLSVA6IGZhaWxlZCB0byBkZWNyeXB0ICIKLQkJCQkJCSJyZWNlaXZlZCBwYWNrZXQgZnJvbSAiIE1BQ19GTVQgIlxuIiwKLQkJCQkJCU1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJCQkJInJlY2VpdmVkIHBhY2tldCBmcm9tICVwTVxuIiwKKwkJCQkJCWhkci0+YWRkcjIpOwogCQkJfQogCQkJcmV0dXJuIC03OwogCQl9CkBAIC00ODAsNyArNDgwLDcgQEAKIAkJCX0KIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUDogSUNWIGVycm9yIGRldGVjdGVkOiBTVEE9IgotCQkJCU1BQ19GTVQgIlxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkJIiVwTVxuIiwgaGRyLT5hZGRyMik7CiAJCQl9CiAJCQl0a2V5LT5kb3QxMVJTTkFTdGF0c1RLSVBJQ1ZFcnJvcnMrKzsKIAkJCXJldHVybiAtNTsKQEAgLTYzNSw4ICs2MzUsOCBAQAogCQlzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqaGRyOwogCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfNGFkZHIgKikgc2tiLT5kYXRhOwogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IE1pY2hhZWwgTUlDIHZlcmlmaWNhdGlvbiBmYWlsZWQgZm9yICIKLQkJICAgICAgICJNU0RVIGZyb20gIiBNQUNfRk1UICIga2V5aWR4PSVkXG4iLAotCQkgICAgICAgc2tiLT5kZXYgPyBza2ItPmRldi0+bmFtZSA6ICJOL0EiLCBNQUNfQVJHKGhkci0+YWRkcjIpLAorCQkgICAgICAgIk1TRFUgZnJvbSAlcE0ga2V5aWR4PSVkXG4iLAorCQkgICAgICAgc2tiLT5kZXYgPyBza2ItPmRldi0+bmFtZSA6ICJOL0EiLCBoZHItPmFkZHIyLAogCQkgICAgICAga2V5aWR4KTsKIAkJaWYgKHNrYi0+ZGV2KQogCQkJaWVlZTgwMjExX21pY2hhZWxfbWljX2ZhaWx1cmUoc2tiLT5kZXYsIGhkciwga2V5aWR4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwppbmRleCBlOGM2N2Q1Li5jMDI0ZmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX21vZHVsZS5jCkBAIC0yNjIsNyArMjYyLDcgQEAKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSkKIHsKIAljaGFyIGJ1ZltdID0gIjB4MDAwMDAwMDAiOwotCXVuc2lnbmVkIGxvbmcgbGVuID0gbWluKHNpemVvZihidWYpIC0gMSwgY291bnQpOworCXVuc2lnbmVkIGxvbmcgbGVuID0gbWluX3QodW5zaWduZWQgbG9uZywgc2l6ZW9mKGJ1ZikgLSAxLCBjb3VudCk7CiAJY2hhciAqcCA9IChjaGFyICopYnVmOwogCXVuc2lnbmVkIGxvbmcgdmFsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfcjgxOTJzLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfcjgxOTJzLmgKaW5kZXggMTIzYWJjZi4uN2Q2YzNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3I4MTkycy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9yODE5MnMuaApAQCAtMjAxLDcgKzIwMSw3IEBACiBzdGF0aWMgaW5saW5lIHU4IEZyYW1lX1FvU1RJRCh1OCAqYnVmKQogewogCXN0cnVjdCBpZWVlODAyMTFfaGRyXzNhZGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKilidWY7Ci0JdTE2IGZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOworCXUxNiBmYyA9IGxlMTZfdG9fY3B1KGhkci0+ZnJhbWVfY29udHJvbCk7CiAKIAlyZXR1cm4gKHU4KSgoZnJhbWVxb3MgKikoYnVmICsKIAkJKCgoZmMgJiBJRUVFODAyMTFfRkNUTF9UT0RTKSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwppbmRleCBmZWNmYTEyLi5jYzgwZmFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYwpAQCAtMzE0LDggKzMxNCw4IEBACiAJICAgIHN0cmNtcChjcnlwdC0+b3BzLT5uYW1lLCAiVEtJUCIpID09IDApIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUS0lQIGNvdW50ZXJtZWFzdXJlczogZHJvcHBlZCAiCi0JCQkgICAgICAgInJlY2VpdmVkIHBhY2tldCBmcm9tICIgTUFDX0ZNVCAiXG4iLAotCQkJICAgICAgIGllZWUtPmRldi0+bmFtZSwgTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkgICAgICAgInJlY2VpdmVkIHBhY2tldCBmcm9tICVwTVxuIiwKKwkJCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIGhkci0+YWRkcjIpOwogCQl9CiAJCXJldHVybiAtMTsKIAl9CkBAIC0zMjYsOCArMzI2LDggQEAKIAlhdG9taWNfZGVjKCZjcnlwdC0+cmVmY250KTsKIAlpZiAocmVzIDwgMCkgewogCQlJRUVFODAyMTFfREVCVUdfRFJPUCgKLQkJCSJkZWNyeXB0aW9uIGZhaWxlZCAoU0E9IiBNQUNfRk1UCi0JCQkiKSByZXM9JWRcbiIsIE1BQ19BUkcoaGRyLT5hZGRyMiksIHJlcyk7CisJCQkiZGVjcnlwdGlvbiBmYWlsZWQgKFNBPSVwTSIKKwkJCSIpIHJlcz0lZFxuIiwgaGRyLT5hZGRyMiwgcmVzKTsKIAkJaWYgKHJlcyA9PSAtMikKIAkJCUlFRUU4MDIxMV9ERUJVR19EUk9QKCJEZWNyeXB0aW9uIGZhaWxlZCBJQ1YgIgogCQkJCQkgICAgICJtaXNtYXRjaCAoa2V5ICVkKVxuIiwKQEAgLTM2NCw4ICszNjQsOCBAQAogCWF0b21pY19kZWMoJmNyeXB0LT5yZWZjbnQpOwogCWlmIChyZXMgPCAwKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogTVNEVSBkZWNyeXB0aW9uL01JQyB2ZXJpZmljYXRpb24gZmFpbGVkIgotCQkgICAgICAgIiAoU0E9IiBNQUNfRk1UICIga2V5aWR4PSVkKVxuIiwKLQkJICAgICAgIGllZWUtPmRldi0+bmFtZSwgTUFDX0FSRyhoZHItPmFkZHIyKSwga2V5aWR4KTsKKwkJICAgICAgICIgKFNBPSVwTSBrZXlpZHg9JWQpXG4iLAorCQkgICAgICAgaWVlZS0+ZGV2LT5uYW1lLCBoZHItPmFkZHIyLCBrZXlpZHgpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC03NDQsNyArNzQ0LDcgQEAKIAkJICBzdHJ1Y3QgaWVlZTgwMjExX3J4YiAqcnhiLHU4KiBzcmMsdTgqIGRzdCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciogKXNrYi0+ZGF0YTsKLQl1MTYJCWZjID0gbGUxNl90b19jcHUoaGRyLT5mcmFtZV9jdGwpOworCXUxNgkJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCiAJdTE2CQlMTENPZmZzZXQ9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcik7CiAJdTE2CQlDaGtMZW5ndGg7CkBAIC03NTYsNyArNzU2LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc3ViX3NrYjsKIAl1OCAgICAgICAgICAgICAqZGF0YV9wdHI7CiAJLyoganVzdCBmb3IgZGVidWcgcHVycG9zZSAqLwotCVNlcU51bSA9IFdMQU5fR0VUX1NFUV9TRVEobGUxNl90b19jcHUoaGRyLT5zZXFfY3RsKSk7CisJU2VxTnVtID0gV0xBTl9HRVRfU0VRX1NFUShsZTE2X3RvX2NwdShoZHItPnNlcV9jdHJsKSk7CiAKIAlpZigoSUVFRTgwMjExX1FPU19IQVNfU0VRKGZjKSkmJlwKIAkJCSgoKGZyYW1lcW9zICopKHNrYi0+ZGF0YSArIElFRUU4MDIxMV8zQUREUl9MRU4pKS0+ZmllbGQucmVzZXJ2ZWQpKSB7CkBAIC05MzksOCArOTM5LDggQEAKIAkJCSAqIGZyYW1lcyBzaWxlbnRseSBpbnN0ZWFkIG9mIGZpbGxpbmcgc3lzdGVtIGxvZyB3aXRoCiAJCQkgKiB0aGVzZSByZXBvcnRzLiAqLwogCQkJSUVFRTgwMjExX0RFQlVHX0RST1AoIkRlY3J5cHRpb24gZmFpbGVkIChub3Qgc2V0KSIKLQkJCQkJICAgICAiIChTQT0iIE1BQ19GTVQgIilcbiIsCi0JCQkJCSAgICAgTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkJCSAgICAgIiAoU0E9JXBNKVxuIiwKKwkJCQkJICAgICBoZHItPmFkZHIyKTsKIAkJCWllZWUtPmllZWVfc3RhdHMucnhfZGlzY2FyZHNfdW5kZWNyeXB0YWJsZSsrOwogCQkJZ290byByeF9kcm9wcGVkOwogCQl9CkBAIC0xMTQzLDggKzExNDMsOCBAQAogCQl9IGVsc2UgewogCQkJSUVFRTgwMjExX0RFQlVHX0RST1AoCiAJCQkJImVuY3J5cHRpb24gY29uZmlndXJlZCwgYnV0IFJYICIKLQkJCQkiZnJhbWUgbm90IGVuY3J5cHRlZCAoU0E9IiBNQUNfRk1UICIpXG4iLAotCQkJCU1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJCSJmcmFtZSBub3QgZW5jcnlwdGVkIChTQT0lcE0pXG4iLAorCQkJCWhkci0+YWRkcjIpOwogCQkJZ290byByeF9kcm9wcGVkOwogCQl9CiAJfQpAQCAtMTE2Myw5ICsxMTYzLDkgQEAKIAkgICAgIWllZWU4MDIxMV9pc19lYXBvbF9mcmFtZShpZWVlLCBza2IsIGhkcmxlbikpIHsKIAkJSUVFRTgwMjExX0RFQlVHX0RST1AoCiAJCQkiZHJvcHBlZCB1bmVuY3J5cHRlZCBSWCBkYXRhICIKLQkJCSJmcmFtZSBmcm9tICIgTUFDX0ZNVAorCQkJImZyYW1lIGZyb20gJXBNIgogCQkJIiAoZHJvcF91bmVuY3J5cHRlZD0xKVxuIiwKLQkJCU1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJaGRyLT5hZGRyMik7CiAJCWdvdG8gcnhfZHJvcHBlZDsKIAl9CiAvKgpAQCAtMjE1OSwxMSArMjE1OSwxMSBAQAogCX0KIAogCWlmIChuZXR3b3JrLT5tb2RlID09IDApIHsKLQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkZpbHRlcmVkIG91dCAnJXMgKCIgTUFDX0ZNVCAiKScgIgorCQlJRUVFODAyMTFfREVCVUdfU0NBTigiRmlsdGVyZWQgb3V0ICclcyAoJXBNKScgIgogCQkJCSAgICAgIm5ldHdvcmsuXG4iLAogCQkJCSAgICAgZXNjYXBlX2Vzc2lkKG5ldHdvcmstPnNzaWQsCiAJCQkJCQkgIG5ldHdvcmstPnNzaWRfbGVuKSwKLQkJCQkgICAgIE1BQ19BUkcobmV0d29yay0+YnNzaWQpKTsKKwkJCQkgICAgIG5ldHdvcmstPmJzc2lkKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0yMzQ1LDkgKzIzNDUsOSBAQAogCiAJbWVtc2V0KCZuZXR3b3JrLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9uZXR3b3JrKSk7CiAJSUVFRTgwMjExX0RFQlVHX1NDQU4oCi0JCSInJXMnICgiIE1BQ19GTVQgIik6ICVjJWMlYyVjICVjJWMlYyVjLSVjJWMlYyVjICVjJWMlYyVjXG4iLAorCQkiJyVzJyAoJXBNKTogJWMlYyVjJWMgJWMlYyVjJWMtJWMlYyVjJWMgJWMlYyVjJWNcbiIsCiAJCWVzY2FwZV9lc3NpZChpbmZvX2VsZW1lbnQtPmRhdGEsIGluZm9fZWxlbWVudC0+bGVuKSwKLQkJTUFDX0FSRyhiZWFjb24tPmhlYWRlci5hZGRyMyksCisJCWJlYWNvbi0+aGVhZGVyLmFkZHIzLAogCQkoYmVhY29uLT5jYXBhYmlsaXR5ICYgKDE8PDB4ZikpID8gJzEnIDogJzAnLAogCQkoYmVhY29uLT5jYXBhYmlsaXR5ICYgKDE8PDB4ZSkpID8gJzEnIDogJzAnLAogCQkoYmVhY29uLT5jYXBhYmlsaXR5ICYgKDE8PDB4ZCkpID8gJzEnIDogJzAnLApAQCAtMjM2NiwxMSArMjM2NiwxMSBAQAogCQkoYmVhY29uLT5jYXBhYmlsaXR5ICYgKDE8PDB4MCkpID8gJzEnIDogJzAnKTsKIAogCWlmIChpZWVlODAyMTFfbmV0d29ya19pbml0KGllZWUsIGJlYWNvbiwgJm5ldHdvcmssIHN0YXRzKSkgewotCQlJRUVFODAyMTFfREVCVUdfU0NBTigiRHJvcHBlZCAnJXMnICgiIE1BQ19GTVQgIikgdmlhICVzLlxuIiwKKwkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkRyb3BwZWQgJyVzJyAoJXBNKSB2aWEgJXMuXG4iLAogCQkJCSAgICAgZXNjYXBlX2Vzc2lkKGluZm9fZWxlbWVudC0+ZGF0YSwKIAkJCQkJCSAgaW5mb19lbGVtZW50LT5sZW4pLAotCQkJCSAgICAgTUFDX0FSRyhiZWFjb24tPmhlYWRlci5hZGRyMyksCi0JCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShiZWFjb24tPmhlYWRlci5mcmFtZV9jdGwpID09CisJCQkJICAgICBiZWFjb24tPmhlYWRlci5hZGRyMywKKwkJCQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGJlYWNvbi0+aGVhZGVyLmZyYW1lX2NvbnRyb2wpID09CiAJCQkJICAgICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCA/CiAJCQkJICAgICAiUFJPQkUgUkVTUE9OU0UiIDogIkJFQUNPTiIpOwogCQlyZXR1cm47CkBAIC0yMzg3LDcgKzIzODcsNyBAQAogCQlyZXR1cm47CiAJaWYoaWVlZS0+Ykdsb2JhbERvbWFpbikKIAl7Ci0JCWlmIChXTEFOX0ZDX0dFVF9TVFlQRShiZWFjb24tPmhlYWRlci5mcmFtZV9jdGwpID09IElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQKQorCQlpZiAoV0xBTl9GQ19HRVRfU1RZUEUoYmVhY29uLT5oZWFkZXIuZnJhbWVfY29udHJvbCkgPT0gSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1ApCiAJCXsKIAkJCS8vIENhc2UgMTogQ291bnRyeSBjb2RlCiAJCQlpZihJU19DT1VOVFJZX0lFX1ZBTElEKGllZWUpICkKQEAgLTI0NTQsNyArMjQ1NCw3IEBACiAJCWVsc2UKIAkJCWllZWUtPmN1cnJlbnRfbmV0d29yay5idXNlcHJvdGVjdGlvbiA9IGZhbHNlOwogCQl9Ci0JCWlmKGlzX2JlYWNvbihiZWFjb24tPmhlYWRlci5mcmFtZV9jdGwpKQorCQlpZihpc19iZWFjb24oYmVhY29uLT5oZWFkZXIuZnJhbWVfY29udHJvbCkpCiAJCXsKIAkJCWlmKGllZWUtPnN0YXRlID09IElFRUU4MDIxMV9MSU5LRUQpCiAJCQkJaWVlZS0+TGlua0RldGVjdEluZm8uTnVtUmVjdkJjbkluUGVyaW9kKys7CkBAIC0yNDc4LDExICsyNDc4LDExIEBACiAJCQkvKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBzbG90cywgZXhwaXJlIHRoZSBvbGRlc3QgKi8KIAkJCWxpc3RfZGVsKCZvbGRlc3QtPmxpc3QpOwogCQkJdGFyZ2V0ID0gb2xkZXN0OwotCQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkV4cGlyZWQgJyVzJyAoIiBNQUNfRk1UICIpIGZyb20gIgorCQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkV4cGlyZWQgJyVzJyAoJXBNKSBmcm9tICIKIAkJCQkJICAgICAibmV0d29yayBsaXN0LlxuIiwKIAkJCQkJICAgICBlc2NhcGVfZXNzaWQodGFyZ2V0LT5zc2lkLAogCQkJCQkJCSAgdGFyZ2V0LT5zc2lkX2xlbiksCi0JCQkJCSAgICAgTUFDX0FSRyh0YXJnZXQtPmJzc2lkKSk7CisJCQkJCSAgICAgdGFyZ2V0LT5ic3NpZCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBPdGhlcndpc2UganVzdCBwdWxsIGZyb20gdGhlIGZyZWUgbGlzdCAqLwogCQkJdGFyZ2V0ID0gbGlzdF9lbnRyeShpZWVlLT5uZXR3b3JrX2ZyZWVfbGlzdC5uZXh0LApAQCAtMjQ5MiwxMSArMjQ5MiwxMSBAQAogCiAKICNpZmRlZiBDT05GSUdfSUVFRTgwMjExX0RFQlVHCi0JCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJBZGRpbmcgJyVzJyAoIiBNQUNfRk1UICIpIHZpYSAlcy5cbiIsCisJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJBZGRpbmcgJyVzJyAoJXBNKSB2aWEgJXMuXG4iLAogCQkJCSAgICAgZXNjYXBlX2Vzc2lkKG5ldHdvcmsuc3NpZCwKIAkJCQkJCSAgbmV0d29yay5zc2lkX2xlbiksCi0JCQkJICAgICBNQUNfQVJHKG5ldHdvcmsuYnNzaWQpLAotCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUoYmVhY29uLT5oZWFkZXIuZnJhbWVfY3RsKSA9PQorCQkJCSAgICAgbmV0d29yay5ic3NpZCwKKwkJCQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGJlYWNvbi0+aGVhZGVyLmZyYW1lX2NvbnRyb2wpID09CiAJCQkJICAgICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCA/CiAJCQkJICAgICAiUFJPQkUgUkVTUE9OU0UiIDogIkJFQUNPTiIpOwogI2VuZGlmCkBAIC0yNTA1LDExICsyNTA1LDExIEBACiAJCWlmKGllZWUtPnNvZnRtYWNfZmVhdHVyZXMgJiBJRUVFX1NPRlRNQUNfQVNTT0NJQVRFKQogCQkJaWVlZTgwMjExX3NvZnRtYWNfbmV3X25ldChpZWVlLCZuZXR3b3JrKTsKIAl9IGVsc2UgewotCQlJRUVFODAyMTFfREVCVUdfU0NBTigiVXBkYXRpbmcgJyVzJyAoIiBNQUNfRk1UICIpIHZpYSAlcy5cbiIsCisJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJVcGRhdGluZyAnJXMnICglcE0pIHZpYSAlcy5cbiIsCiAJCQkJICAgICBlc2NhcGVfZXNzaWQodGFyZ2V0LT5zc2lkLAogCQkJCQkJICB0YXJnZXQtPnNzaWRfbGVuKSwKLQkJCQkgICAgIE1BQ19BUkcodGFyZ2V0LT5ic3NpZCksCi0JCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShiZWFjb24tPmhlYWRlci5mcmFtZV9jdGwpID09CisJCQkJICAgICB0YXJnZXQtPmJzc2lkLAorCQkJCSAgICAgV0xBTl9GQ19HRVRfU1RZUEUoYmVhY29uLT5oZWFkZXIuZnJhbWVfY29udHJvbCkgPT0KIAkJCQkgICAgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQID8KIAkJCQkgICAgICJQUk9CRSBSRVNQT05TRSIgOiAiQkVBQ09OIik7CiAKQEAgLTI1MTksNyArMjUxOSw3IEBACiAJCSAqLwogCQlyZW5ldyA9ICF0aW1lX2FmdGVyKHRhcmdldC0+bGFzdF9zY2FubmVkICsgaWVlZS0+c2Nhbl9hZ2UsIGppZmZpZXMpOwogCQkvL1lKLGFkZCwwODA4MTksZm9yIGhpZGRlbiBhcAotCQlpZihpc19iZWFjb24oYmVhY29uLT5oZWFkZXIuZnJhbWVfY3RsKSA9PSAwKQorCQlpZihpc19iZWFjb24oYmVhY29uLT5oZWFkZXIuZnJhbWVfY29udHJvbCkgPT0gMCkKIAkJCW5ldHdvcmsuZmxhZ3MgPSAofk5FVFdPUktfRU1QVFlfRVNTSUQgJiBuZXR3b3JrLmZsYWdzKXwoTkVUV09SS19FTVBUWV9FU1NJRCAmIHRhcmdldC0+ZmxhZ3MpOwogCQkvL2lmKHN0cm5jbXAobmV0d29yay5zc2lkLCAibGlua3N5cy1jIiw5KSA9PSAwKQogCQkvLwlwcmludGsoIj09PT0+MiBuZXR3b3JrLnNzaWQ9JXMgRkxBRz0lZCB0YXJnZXQuc3NpZD0lcyBGTEFHPSVkXG4iLCBuZXR3b3JrLnNzaWQsIG5ldHdvcmsuZmxhZ3MsIHRhcmdldC0+c3NpZCwgdGFyZ2V0LT5mbGFncyk7CkBAIC0yNTM1LDcgKzI1MzUsNyBAQAogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKLQlpZiAoaXNfYmVhY29uKGJlYWNvbi0+aGVhZGVyLmZyYW1lX2N0bCkmJmlzX3NhbWVfbmV0d29yaygmaWVlZS0+Y3VycmVudF9uZXR3b3JrLCAmbmV0d29yaywgaWVlZSkmJlwKKwlpZiAoaXNfYmVhY29uKGJlYWNvbi0+aGVhZGVyLmZyYW1lX2NvbnRyb2wpJiZpc19zYW1lX25ldHdvcmsoJmllZWUtPmN1cnJlbnRfbmV0d29yaywgJm5ldHdvcmssIGllZWUpJiZcCiAJCShpZWVlLT5zdGF0ZSA9PSBJRUVFODAyMTFfTElOS0VEKSkgewogCQlpZihpZWVlLT5oYW5kbGVfYmVhY29uICE9IE5VTEwpIHsKIAkJCWllZWUtPmhhbmRsZV9iZWFjb24oaWVlZS0+ZGV2LGJlYWNvbiwmaWVlZS0+Y3VycmVudF9uZXR3b3JrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCmluZGV4IDk1ZDRmODQuLjlkOGNiMGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtMjQyLDcgKzI0Miw3IEBACiAJCWlmKGllZWUtPnF1ZXVlX3N0b3ApewogCQkJZW5xdWV1ZV9tZ210KGllZWUsc2tiKTsKIAkJfWVsc2V7Ci0JCQloZWFkZXItPnNlcV9jdGwgPSBjcHVfdG9fbGUxNihpZWVlLT5zZXFfY3RybFswXTw8NCk7CisJCQloZWFkZXItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF08PDQpOwogCiAJCQlpZiAoaWVlZS0+c2VxX2N0cmxbMF0gPT0gMHhGRkYpCiAJCQkJaWVlZS0+c2VxX2N0cmxbMF0gPSAwOwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmllZWUtPmxvY2ssIGZsYWdzKTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmllZWUtPm1nbXRfdHhfbG9jaywgZmxhZ3MpOwogCi0JCWhlYWRlci0+c2VxX2N0bCA9IGNwdV90b19sZTE2KGllZWUtPnNlcV9jdHJsWzBdIDw8IDQpOworCQloZWFkZXItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF0gPDwgNCk7CiAKIAkJaWYgKGllZWUtPnNlcV9jdHJsWzBdID09IDB4RkZGKQogCQkJaWVlZS0+c2VxX2N0cmxbMF0gPSAwOwpAQCAtMzAyLDcgKzMwMiw3IEBACiAJLy9wcmludGsoIj09PT09PT09PT09PT0+JXMoKVxuIiwgX19GVU5DVElPTl9fKTsKIAlpZihzaW5nbGUpewogCi0JCWhlYWRlci0+c2VxX2N0bCA9IGNwdV90b19sZTE2KGllZWUtPnNlcV9jdHJsWzBdIDw8IDQpOworCQloZWFkZXItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF0gPDwgNCk7CiAKIAkJaWYgKGllZWUtPnNlcV9jdHJsWzBdID09IDB4RkZGKQogCQkJaWVlZS0+c2VxX2N0cmxbMF0gPSAwOwpAQCAtMzE1LDcgKzMxNSw3IEBACiAKIAl9ZWxzZXsKIAotCQloZWFkZXItPnNlcV9jdGwgPSBjcHVfdG9fbGUxNihpZWVlLT5zZXFfY3RybFswXSA8PCA0KTsKKwkJaGVhZGVyLT5zZXFfY3RybCA9IGNwdV90b19sZTE2KGllZWUtPnNlcV9jdHJsWzBdIDw8IDQpOwogCiAJCWlmIChpZWVlLT5zZXFfY3RybFswXSA9PSAweEZGRikKIAkJCWllZWUtPnNlcV9jdHJsWzBdID0gMDsKQEAgLTM0Nyw3ICszNDcsNyBAQAogCXNrYl9yZXNlcnZlKHNrYiwgaWVlZS0+dHhfaGVhZHJvb20pOwogCiAJcmVxID0gKHN0cnVjdCBpZWVlODAyMTFfcHJvYmVfcmVxdWVzdCAqKSBza2JfcHV0KHNrYixzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXF1ZXN0KSk7Ci0JcmVxLT5oZWFkZXIuZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFUSk7CisJcmVxLT5oZWFkZXIuZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEpOwogCXJlcS0+aGVhZGVyLmR1cmF0aW9uX2lkID0gMDsgLy9GSVhNRTogaXMgdGhpcyBPSyA/CiAKIAltZW1zZXQocmVxLT5oZWFkZXIuYWRkcjEsIDB4ZmYsIEVUSF9BTEVOKTsKQEAgLTY2Miw4ICs2NjIsOCBAQAogCWF1dGggPSAoc3RydWN0IGllZWU4MDIxMV9hdXRoZW50aWNhdGlvbiAqKQogCQlza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfYXV0aGVudGljYXRpb24pKTsKIAotCWF1dGgtPmhlYWRlci5mcmFtZV9jdGwgPSBJRUVFODAyMTFfU1RZUEVfQVVUSDsKLQlpZiAoY2hhbGxlbmdlbGVuKSBhdXRoLT5oZWFkZXIuZnJhbWVfY3RsIHw9IElFRUU4MDIxMV9GQ1RMX1dFUDsKKwlhdXRoLT5oZWFkZXIuZnJhbWVfY29udHJvbCA9IElFRUU4MDIxMV9TVFlQRV9BVVRIOworCWlmIChjaGFsbGVuZ2VsZW4pIGF1dGgtPmhlYWRlci5mcmFtZV9jb250cm9sIHw9IElFRUU4MDIxMV9GQ1RMX1dFUDsKIAogCWF1dGgtPmhlYWRlci5kdXJhdGlvbl9pZCA9IDB4MDEzYTsgLy9GSVhNRQogCkBAIC04MDEsNyArODAxLDcgQEAKIAkJYmVhY29uX2J1Zi0+Y2FwYWJpbGl0eSB8PSBjcHVfdG9fbGUxNihXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSk7CiAKIAotCWJlYWNvbl9idWYtPmhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7CisJYmVhY29uX2J1Zi0+aGVhZGVyLmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7CiAJYmVhY29uX2J1Zi0+aW5mb19lbGVtZW50WzBdLmlkID0gTUZJRV9UWVBFX1NTSUQ7CiAJYmVhY29uX2J1Zi0+aW5mb19lbGVtZW50WzBdLmxlbiA9IHNzaWRfbGVuOwogCkBAIC04ODAsNyArODgwLDcgQEAKIAlhc3NvYyA9IChzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlX2ZyYW1lICopCiAJCXNrYl9wdXQoc2tiLHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2Fzc29jX3Jlc3BvbnNlX2ZyYW1lKSk7CiAKLQlhc3NvYy0+aGVhZGVyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQKTsKKwlhc3NvYy0+aGVhZGVyLmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUCk7CiAJbWVtY3B5KGFzc29jLT5oZWFkZXIuYWRkcjEsIGRlc3QsRVRIX0FMRU4pOwogCW1lbWNweShhc3NvYy0+aGVhZGVyLmFkZHIzLCBpZWVlLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KGFzc29jLT5oZWFkZXIuYWRkcjIsIGllZWUtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKQEAgLTkzNSw3ICs5MzUsNyBAQAogCW1lbWNweShhdXRoLT5oZWFkZXIuYWRkcjMsIGllZWUtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkoYXV0aC0+aGVhZGVyLmFkZHIyLCBpZWVlLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KGF1dGgtPmhlYWRlci5hZGRyMSwgZGVzdCwgRVRIX0FMRU4pOwotCWF1dGgtPmhlYWRlci5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQVVUSCk7CisJYXV0aC0+aGVhZGVyLmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfQVVUSCk7CiAJcmV0dXJuIHNrYjsKIAogCkBAIC05NTcsNyArOTU3LDcgQEAKIAltZW1jcHkoaGRyLT5hZGRyMiwgaWVlZS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShoZHItPmFkZHIzLCBpZWVlLT5jdXJyZW50X25ldHdvcmsuYnNzaWQsIEVUSF9BTEVOKTsKIAotCWhkci0+ZnJhbWVfY3RsID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0RBVEEgfAorCWhkci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9EQVRBIHwKIAkJSUVFRTgwMjExX1NUWVBFX05VTExGVU5DIHwgSUVFRTgwMjExX0ZDVExfVE9EUyB8CiAJCShwd3IgPyBJRUVFODAyMTFfRkNUTF9QTTowKSk7CiAKQEAgLTEwODMsNyArMTA4Myw3IEBACiAJCXNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9hc3NvY19yZXF1ZXN0X2ZyYW1lKSsyKTsKIAogCi0JaGRyLT5oZWFkZXIuZnJhbWVfY3RsID0gSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUTsKKwloZHItPmhlYWRlci5mcmFtZV9jb250cm9sID0gSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFUTsKIAloZHItPmhlYWRlci5kdXJhdGlvbl9pZD0gMzc7IC8vRklYTUUKIAltZW1jcHkoaGRyLT5oZWFkZXIuYWRkcjEsIGJlYWNvbi0+YnNzaWQsIEVUSF9BTEVOKTsKIAltZW1jcHkoaGRyLT5oZWFkZXIuYWRkcjIsIGllZWUtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKQEAgLTE3MDksNyArMTcwOSw3IEBACiAJCWllZWU4MDIxMV9yZXNwX3RvX2Fzc29jX3JxKGllZWUsIGRlc3QpOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8iTmV3IGNsaWVudCBhc3NvY2lhdGVkOiAiTUFDX0ZNVCJcbiIsIE1BQ19BUkcoZGVzdCkpOworCXByaW50ayhLRVJOX0lORk8iTmV3IGNsaWVudCBhc3NvY2lhdGVkOiAlcE1cbiIsIGRlc3QpOwogCS8vRklYTUUKIH0KIApAQCAtMTk0MCwxMyArMTk0MCwxMyBAQAogCWlmKCFpZWVlLT5wcm90b19zdGFydGVkKQogCQlyZXR1cm4gMDsKIAotCXN3aXRjaCAoV0xBTl9GQ19HRVRfU1RZUEUoaGVhZGVyLT5mcmFtZV9jdGwpKSB7CisJc3dpdGNoIChXTEFOX0ZDX0dFVF9TVFlQRShoZWFkZXItPmZyYW1lX2NvbnRyb2wpKSB7CiAKIAkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUDoKIAkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQOgogCiAJCQlJRUVFODAyMTFfREVCVUdfTUdNVCgicmVjZWl2ZWQgW1JFXUFTU09DSUFUSU9OIFJFU1BPTlNFICglZClcbiIsCi0JCQkJCVdMQU5fRkNfR0VUX1NUWVBFKGhlYWRlci0+ZnJhbWVfY3RsKSk7CisJCQkJCVdMQU5fRkNfR0VUX1NUWVBFKGhlYWRlci0+ZnJhbWVfY29udHJvbCkpOwogCQkJaWYgKChpZWVlLT5zb2Z0bWFjX2ZlYXR1cmVzICYgSUVFRV9TT0ZUTUFDX0FTU09DSUFURSkgJiYKIAkJCQlpZWVlLT5zdGF0ZSA9PSBJRUVFODAyMTFfQVNTT0NJQVRJTkdfQVVUSEVOVElDQVRFRCAmJgogCQkJCWllZWUtPml3X21vZGUgPT0gSVdfTU9ERV9JTkZSQSl7CkBAIC0yMDg4LDcgKzIwODgsNyBAQAogCQkJaWYgKChpZWVlLT5zb2Z0bWFjX2ZlYXR1cmVzICYgSUVFRV9TT0ZUTUFDX0FTU09DSUFURSkgJiYKIAkJCQlpZWVlLT5zdGF0ZSA9PSBJRUVFODAyMTFfTElOS0VEICYmCiAJCQkJaWVlZS0+aXdfbW9kZSA9PSBJV19NT0RFX0lORlJBKXsKLQkJCQlwcmludGsoIj09PT09PT09PT0+cmVjZWl2ZWQgZGlzYXNzb2MvZGVhdXRoKCV4KSBmcmFtZSwgcmVhc29uIGNvZGU6JXhcbiIsV0xBTl9GQ19HRVRfU1RZUEUoaGVhZGVyLT5mcmFtZV9jdGwpLCAoKHN0cnVjdCBpZWVlODAyMTFfZGlzYXNzb2MqKXNrYi0+ZGF0YSktPnJlYXNvbik7CisJCQkJcHJpbnRrKCI9PT09PT09PT09PnJlY2VpdmVkIGRpc2Fzc29jL2RlYXV0aCgleCkgZnJhbWUsIHJlYXNvbiBjb2RlOiV4XG4iLFdMQU5fRkNfR0VUX1NUWVBFKGhlYWRlci0+ZnJhbWVfY29udHJvbCksICgoc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYyopc2tiLT5kYXRhKS0+cmVhc29uKTsKIAkJCQlpZWVlLT5zdGF0ZSA9IElFRUU4MDIxMV9BU1NPQ0lBVElORzsKIAkJCQlpZWVlLT5zb2Z0bWFjX3N0YXRzLnJlYXNzb2MrKzsKIAkJCQlpZWVlLT5pc19yb2FtaW5nID0gdHJ1ZTsKQEAgLTIxNDUsOCArMjE0NSw4IEBACiAJaWVlZTgwMjExX3N0YV93YWtldXAoaWVlZSwwKTsKIAogCS8qIHVwZGF0ZSB0aGUgdHggc3RhdHVzICovCi0vLwlpZWVlLT5zdGF0cy50eF9ieXRlcyArPSB0eGItPnBheWxvYWRfc2l6ZTsKLS8vCWllZWUtPnN0YXRzLnR4X3BhY2tldHMrKzsKKwlpZWVlLT5zdGF0cy50eF9ieXRlcyArPSB0eGItPnBheWxvYWRfc2l6ZTsKKwlpZWVlLT5zdGF0cy50eF9wYWNrZXRzKys7CiAJdGNiX2Rlc2MgPSAoY2JfZGVzYyAqKSh0eGItPmZyYWdtZW50c1swXS0+Y2IgKyBNQVhfREVWX0FERFJfU0laRSk7CiAJaWYodGNiX2Rlc2MtPmJNdWx0aWNhc3QpIHsKIAkJaWVlZS0+c3RhdHMubXVsdGljYXN0Kys7CkBAIC0yMjM5LDcgKzIyMzksNyBAQAogCiAJCQloZWFkZXIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgICopIHNrYi0+ZGF0YTsKIAotCQkJaGVhZGVyLT5zZXFfY3RsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF0gPDwgNCk7CisJCQloZWFkZXItPnNlcV9jdHJsID0gY3B1X3RvX2xlMTYoaWVlZS0+c2VxX2N0cmxbMF0gPDwgNCk7CiAKIAkJCWlmIChpZWVlLT5zZXFfY3RybFswXSA9PSAweEZGRikKIAkJCQlpZWVlLT5zZXFfY3RybFswXSA9IDA7CkBAIC0yNTc0LDcgKzI1NzQsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWIgPSAoc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZSAqKSBza2ItPmRhdGE7Ci0JYi0+aGVhZGVyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9CRUFDT04pOworCWItPmhlYWRlci5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX1NUWVBFX0JFQUNPTik7CiAKIAlyZXR1cm4gc2tiOwogCkBAIC0yNTkwLDcgKzI1OTAsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAogCWIgPSAoc3RydWN0IGllZWU4MDIxMV9wcm9iZV9yZXNwb25zZSAqKSBza2ItPmRhdGE7Ci0JYi0+aGVhZGVyLnNlcV9jdGwgPSBjcHVfdG9fbGUxNihpZWVlLT5zZXFfY3RybFswXSA8PCA0KTsKKwliLT5oZWFkZXIuc2VxX2N0cmwgPSBjcHVfdG9fbGUxNihpZWVlLT5zZXFfY3RybFswXSA8PCA0KTsKIAogCWlmIChpZWVlLT5zZXFfY3RybFswXSA9PSAweEZGRikKIAkJaWVlZS0+c2VxX2N0cmxbMF0gPSAwOwpAQCAtMzEzOSw3ICszMTM5LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAlkaXNhc3MgPSAoc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYyAqKSBza2JfcHV0KHNrYixzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9kaXNhc3NvYykpOwotCWRpc2Fzcy0+aGVhZGVyLmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQyk7CisJZGlzYXNzLT5oZWFkZXIuZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQyk7CiAJZGlzYXNzLT5oZWFkZXIuZHVyYXRpb25faWQgPSAwOwogCiAJbWVtY3B5KGRpc2Fzcy0+aGVhZGVyLmFkZHIxLCBiZWFjb24tPmJzc2lkLCBFVEhfQUxFTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCmluZGV4IDRkNTRlMWUuLjQ4NGMzYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCkBAIC0xOTksOCArMTk5LDggQEAKIAkJaGVhZGVyID0gKHN0cnVjdCBydGxfaWVlZTgwMjExX2hkciAqKWZyYWctPmRhdGE7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogVEtJUCBjb3VudGVybWVhc3VyZXM6IGRyb3BwZWQgIgotCQkJICAgICAgICJUWCBwYWNrZXQgdG8gIiBNQUNfRk1UICJcbiIsCi0JCQkgICAgICAgaWVlZS0+ZGV2LT5uYW1lLCBNQUNfQVJHKGhlYWRlci0+YWRkcjEpKTsKKwkJCSAgICAgICAiVFggcGFja2V0IHRvICVwTVxuIiwKKwkJCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIGhlYWRlci0+YWRkcjEpOwogCQl9CiAJCXJldHVybiAtMTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCmluZGV4IDg1YzdlOTYuLjEyMmY4MDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCkBAIC0yNjEsMTAgKzI2MSwxMCBAQAogCQllbHNlCiAJCQlJRUVFODAyMTFfREVCVUdfU0NBTigKIAkJCQkiTm90IHNob3dpbmcgbmV0d29yayAnJXMgKCIKLQkJCQlNQUNfRk1UICIpJyBkdWUgdG8gYWdlICglbHVtcykuXG4iLAorCQkJCSIlcE0pJyBkdWUgdG8gYWdlICglbHVtcykuXG4iLAogCQkJCWVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLAogCQkJCQkgICAgIG5ldHdvcmstPnNzaWRfbGVuKSwKLQkJCQlNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSwKKwkJCQluZXR3b3JrLT5ic3NpZCwKIAkJCQkoamlmZmllcyAtIG5ldHdvcmstPmxhc3Rfc2Nhbm5lZCkgLyAoSFogLyAxMDApKTsKIAl9CiAKQEAgLTczMSw3ICs3MzEsNyBAQAogI2lmIDEKIAljYXNlIElXX0FVVEhfV1BBX0VOQUJMRUQ6CiAJCWllZWUtPndwYV9lbmFibGVkID0gKGRhdGEtPnZhbHVlKT8xOjA7Ci0JCS8vcHJpbnRrKCJlbmFsYmUgd3BhOiVkXG4iLCBpZWVlLT53cGFfZW5hYmxlZCk7CisJCS8vcHJpbnRrKCJlbmFibGUgd3BhOiVkXG4iLCBpZWVlLT53cGFfZW5hYmxlZCk7CiAJCWJyZWFrOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jCmluZGV4IDhkMTJmZmMuLjhjMzdkZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYwpAQCAtMTEzLDcgKzExMyw3IEBACiAJdTE2IHRtcCA9IDA7CiAJdTE2IGxlbiA9IGllZWUtPnR4X2hlYWRyb29tICsgOTsKIAkvL2NhdGVnb3J5KDEpICsgYWN0aW9uIGZpZWxkKDEpICsgRGlhbG9nIFRva2VuKDEpICsgQkEgUGFyYW1ldGVyIFNldCgyKSArICBCQSBUaW1lb3V0IFZhbHVlKDIpICsgIEJBIFN0YXJ0IFNlcUN0cmwoMikob3IgU3RhdHVzQ29kZSgyKSkKLQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RSQUNFIHwgSUVFRTgwMjExX0RMX0JBLCAiPT09PT09PT0+JXMoKSwgZnJhbWUoJWQpIHNlbnRkIHRvOiJNQUNfRk1UIiwgaWVlZS0+ZGV2OiVwXG4iLCBfX0ZVTkNUSU9OX18sIHR5cGUsIE1BQ19BUkcoRHN0KSwgaWVlZS0+ZGV2KTsKKwlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RSQUNFIHwgSUVFRTgwMjExX0RMX0JBLCAiPT09PT09PT0+JXMoKSwgZnJhbWUoJWQpIHNlbnRkIHRvOiVwTSwgaWVlZS0+ZGV2OiVwXG4iLCBfX0ZVTkNUSU9OX18sIHR5cGUsIERzdCwgaWVlZS0+ZGV2KTsKIAlpZiAocEJBID09IE5VTEx8fGllZWUgPT0gTlVMTCkKIAl7CiAJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLCAicEJBKCVwKSBpcyBOVUxMIG9yIGllZWUoJXApIGlzIE5VTExcbiIsIHBCQSwgaWVlZSk7CkBAIC0xMzYsNyArMTM2LDcgQEAKIAogCW1lbWNweShCQVJlcS0+YWRkcjMsIGllZWUtPmN1cnJlbnRfbmV0d29yay5ic3NpZCwgRVRIX0FMRU4pOwogCi0JQkFSZXEtPmZyYW1lX2N0bCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9NQU5BR0VfQUNUKTsgLy9hY3Rpb24gZnJhbWUKKwlCQVJlcS0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9TVFlQRV9NQU5BR0VfQUNUKTsgLy9hY3Rpb24gZnJhbWUKIAogCS8vdGFnICs9IHNpemVvZiggc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpOyAvL21vdmUgdG8gYWN0aW9uIGZpZWxkCiAJdGFnID0gKHU4Kilza2JfcHV0KHNrYiwgOSk7CkBAIC0yMDAsNyArMjAwLDcgQEAKIAl1MTYgbGVuID0gNiArIGllZWUtPnR4X2hlYWRyb29tOwogCiAJaWYgKG5ldF9yYXRlbGltaXQoKSkKLQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RSQUNFIHwgSUVFRTgwMjExX0RMX0JBLCAiPT09PT09PT0+JXMoKSwgUmVhc29uQ29kZSglZCkgc2VudGQgdG86Ik1BQ19GTVQiXG4iLCBfX0ZVTkNUSU9OX18sIFJlYXNvbkNvZGUsIE1BQ19BUkcoZHN0KSk7CisJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9UUkFDRSB8IElFRUU4MDIxMV9ETF9CQSwgIj09PT09PT09PiVzKCksIFJlYXNvbkNvZGUoJWQpIHNlbnRkIHRvOiVwTVxuIiwgX19GVU5DVElPTl9fLCBSZWFzb25Db2RlLCBkc3QpOwogCiAJbWVtc2V0KCZEZWxiYVBhcmFtU2V0LCAwLCAyKTsKIApAQCAtMjIxLDcgKzIyMSw3IEBACiAJbWVtY3B5KERlbGJhLT5hZGRyMSwgZHN0LCBFVEhfQUxFTik7CiAJbWVtY3B5KERlbGJhLT5hZGRyMiwgaWVlZS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShEZWxiYS0+YWRkcjMsIGllZWUtPmN1cnJlbnRfbmV0d29yay5ic3NpZCwgRVRIX0FMRU4pOwotCURlbGJhLT5mcmFtZV9jdGwgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfTUFOQUdFX0FDVCk7IC8vYWN0aW9uIGZyYW1lCisJRGVsYmEtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfU1RZUEVfTUFOQUdFX0FDVCk7IC8vYWN0aW9uIGZyYW1lCiAKIAl0YWcgPSAodTgqKXNrYl9wdXQoc2tiLCA2KTsKIApAQCAtMzM5LDcgKzMzOSwxMCBAQAogCiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KQogCXsKLQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgSW52YWxpZCBza2IgbGVuIGluIEJBUkVRKCVkIC8gJWxkKVxuIiwgc2tiLT5sZW4sIAkoc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KSk7CisJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLAorCQkJCSIgSW52YWxpZCBza2IgbGVuIGluIEJBUkVRKCVkIC8gJXpkKVxuIiwKKwkJCQlza2ItPmxlbiwKKwkJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgOSk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTM1NCw3ICszNTcsNyBAQAogCXBCYVRpbWVvdXRWYWwgPSAodTE2KikodGFnICsgNSk7CiAJcEJhU3RhcnRTZXFDdHJsID0gKFBTRVFVRU5DRV9DT05UUk9MKShyZXEgKyA3KTsKIAotCXByaW50aygiPT09PT09PT09PT09PT09PT09PT0+cnggQUREQkFSRVEgZnJvbSA6Ik1BQ19GTVQiXG4iLCBNQUNfQVJHKGRzdCkpOworCXByaW50aygiPT09PT09PT09PT09PT09PT09PT0+cnggQUREQkFSRVEgZnJvbSA6JXBNXG4iLCBkc3QpOwogLy9zb21lIG90aGVyIGNhcGFiaWxpdHkgaXMgbm90IHJlYWR5IG5vdy4KIAlpZigJKGllZWUtPmN1cnJlbnRfbmV0d29yay5xb3NfZGF0YS5hY3RpdmUgPT0gMCkgfHwKIAkJKGllZWUtPnBIVEluZm8tPmJDdXJyZW50SFRTdXBwb3J0ID09IGZhbHNlKSB8fApAQCAtNDQwLDcgKzQ0MywxMCBAQAogCiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KQogCXsKLQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgSW52YWxpZCBza2IgbGVuIGluIEJBUlNQKCVkIC8gJWxkKVxuIiwgc2tiLT5sZW4sIAkoc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA5KSk7CisJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLAorCQkJCSIgSW52YWxpZCBza2IgbGVuIGluIEJBUlNQKCVkIC8gJXpkKVxuIiwKKwkJCQlza2ItPmxlbiwKKwkJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgOSk7CiAJCXJldHVybiAtMTsKIAl9CiAJcnNwID0gKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciopc2tiLT5kYXRhOwpAQCAtNTcwLDcgKzU3NiwxMCBAQAogCiAJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA2KQogCXsKLQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICIgSW52YWxpZCBza2IgbGVuIGluIERFTEJBKCVkIC8gJWxkKVxuIiwgc2tiLT5sZW4sIAkoc2l6ZW9mKCBzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkcikgKyA2KSk7CisJCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfRVJSLAorCQkJCSIgSW52YWxpZCBza2IgbGVuIGluIERFTEJBKCVkIC8gJXpkKVxuIiwKKwkJCQlza2ItPmxlbiwKKwkJCQlzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIpICsgNik7CiAJCXJldHVybiAtMTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfSFRQcm9jLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X0hUUHJvYy5jCmluZGV4IDMzYzdmYTcuLjAxMTE0YzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfSFRQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYwpAQCAtNDIsNyArNDIsNyBAQAogc3RhdGljIHU4IERMSU5LX0FUSEVST1NfMlszXSA9IHsweDAwLCAweDIxLCAweDkxfTsKIHN0YXRpYyB1OCBDSVNDT19CUk9BRENPTVszXSA9IHsweDAwLCAweDE3LCAweDk0fTsKIHN0YXRpYyB1OCBMSU5LU1lTX01BUlZFTExfNDQwME5bM10gPSB7MHgwMCwgMHgxNCwgMHhhNH07Ci0vLyAyMDA4LzA0LzAxIE1IIEZvciBDaXNjbyBHIG1vZGUgUlggVFAgV2UgbmVlZCB0byBjaGFuZ2UgRlcgZHVyYXRpb24uIFNob3VkIHdlIHB1dCB0aGUKKy8vIDIwMDgvMDQvMDEgTUggRm9yIENpc2NvIEcgbW9kZSBSWCBUUCBXZSBuZWVkIHRvIGNoYW5nZSBGVyBkdXJhdGlvbi4gU2hvdWxkIHdlIHB1dCB0aGUKIC8vIGNvZGUgaW4gb3RoZXIgcGxhY2U/PwogLy9zdGF0aWMgdTggV0lGSV9DSVNDT19HX0FQWzNdID0gezB4MDAsIDB4NDAsIDB4OTZ9OwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X1RTUHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9pZWVlODAyMTEvcnRsODE5eF9UU1Byb2MuYwppbmRleCBhZDNiZjM1Li42MGNmMWY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L2llZWU4MDIxMS9ydGw4MTl4X1RTUHJvYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvaWVlZTgwMjExL3J0bDgxOXhfVFNQcm9jLmMKQEAgLTI5MSw3ICsyOTEsNyBAQAogCQlpZihzZWFyY2hfZGlyW2Rpcl0gPT1mYWxzZSApCiAJCQljb250aW51ZTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShwUmV0LCBwc2VhcmNoX2xpc3QsIExpc3QpewotCS8vCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RTLCAiQUREOiJNQUNfRk1UIiwgVElEOiVkLCBkaXI6JWRcbiIsIE1BQ19BUkcocFJldC0+QWRkciksIHBSZXQtPlRTcGVjLmYuVFNJbmZvLmZpZWxkLnVjVFNJRCwgcFJldC0+VFNwZWMuZi5UU0luZm8uZmllbGQudWNEaXJlY3Rpb24pOworCS8vCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RTLCAiQUREOiVwTSwgVElEOiVkLCBkaXI6JWRcbiIsIHBSZXQtPkFkZHIsIHBSZXQtPlRTcGVjLmYuVFNJbmZvLmZpZWxkLnVjVFNJRCwgcFJldC0+VFNwZWMuZi5UU0luZm8uZmllbGQudWNEaXJlY3Rpb24pOwogCQkJaWYgKG1lbWNtcChwUmV0LT5BZGRyLCBBZGRyLCA2KSA9PSAwKQogCQkJCWlmIChwUmV0LT5UU3BlYy5mLlRTSW5mby5maWVsZC51Y1RTSUQgPT0gVElEKQogCQkJCQlpZihwUmV0LT5UU3BlYy5mLlRTSW5mby5maWVsZC51Y0RpcmVjdGlvbiA9PSBkaXIpCkBAIC00NDcsNyArNDQ3LDcgQEAKIAkJCQkJUmVzZXRSeFRzRW50cnkodG1wKTsKIAkJCQl9CiAKLQkJCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RTLCAidG8gaW5pdCBjdXJyZW50IFRTLCBVUDolZCwgRGlyOiVkLCBhZGRyOiJNQUNfRk1UIlxuIiwgVVAsIERpciwgTUFDX0FSRyhBZGRyKSk7CisJCQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9UUywgInRvIGluaXQgY3VycmVudCBUUywgVVA6JWQsIERpcjolZCwgYWRkcjolcE1cbiIsIFVQLCBEaXIsIEFkZHIpOwogCQkJCS8vIFByZXBhcmUgVFMgSW5mbyByZWxlYXRlZCBmaWVsZAogCQkJCXBUU0luZm8tPmZpZWxkLnVjVHJhZmZpY1R5cGUgPSAwOwkJCS8vIFRyYWZmaWMgdHlwZTogV01NIGlzIHJlc2VydmVkIGluIHRoaXMgZmllbGQKIAkJCQlwVFNJbmZvLT5maWVsZC51Y1RTSUQgPSBVUDsJCQkvLyBUU0lECkBAIC01MzMsNyArNTMzLDcgQEAKIHZvaWQgUmVtb3ZlUGVlclRTKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKiBpZWVlLCB1OCogQWRkcikKIHsKIAlQVFNfQ09NTU9OX0lORk8JcFRTLCBwVG1wVFM7Ci0JcHJpbnRrKCI9PT09PT09PT09PT5SZW1vdmVQZWVyVFMsIk1BQ19GTVQiXG4iLCBNQUNfQVJHKEFkZHIpKTsKKwlwcmludGsoIj09PT09PT09PT09PlJlbW92ZVBlZXJUUywlcE1cbiIsIEFkZHIpOwogI2lmIDEKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocFRTLCBwVG1wVFMsICZpZWVlLT5UeF9UU19QZW5kaW5nX0xpc3QsIExpc3QpCiAJewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNVX0hXSW1nLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU1VfSFdJbWcuYwppbmRleCBjYmI2NTc5Li5iYThlMTJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU1VfSFdJbWcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU1VfSFdJbWcuYwpAQCAtMiw0MjgyICsyLDYgQEAKIAogI2luY2x1ZGUgInI4MTkyU1VfSFdJbWcuaCIKIAotdTggUnRsODE5MlNVRndJbWdBcnJheVtJbWdBcnJheUxlbmd0aF0gPSB7Ci0weDkyLDB4ODEsMHgyYiwweDkwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDc0LDB4MDAsMHgwMCwweDg4LDB4OTYsMHgwMCwweDAwLAotMHgzMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJiLDB4MDAsMHgwMywweDAzLDB4MjMsMHgwMCwKLTB4OTIsMHg4MSwweDAyLDB4MDEsMHgwMCwweDAwLDB4MTIsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNywweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAxLDB4MDAsMHgwMSwweDAxLDB4MDEsMHgwMCwweDAwLAotMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4N2YsMHgwMCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgxZiwweDAwLDB4MDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDI1LDB4YjAsMHgxYSwweDNjLDB4ODAsMHgwMywweDVhLDB4MzcsMHgwMCwweDgwLDB4MWIsMHgzYywweDgwLDB4MDAsMHg3YiwweDM3LAotMHgwMCwweDAwLDB4NWIsMHhhZiwweDI1LDB4YjAsMHgxYSwweDNjLDB4MTgsMHgwMywweDVhLDB4MzcsMHgwMCwweDgwLDB4MWIsMHgzYywKLTB4ODAsMHgwMCwweDdiLDB4MzcsMHgwMCwweDAwLDB4NWIsMHhhZiwweDAwLDB4ODAsMHgxYSwweDNjLDB4MTAsMHg2ZCwweDVhLDB4MjcsCi0weDA4LDB4MDAsMHg0MCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwNCwweDAwLDB4YTEsMHhhZiwweDA4LDB4MDAsMHhhMiwweGFmLDB4MGMsMHgwMCwweGEzLDB4YWYsMHgxMCwweDAwLDB4YTQsMHhhZiwKLTB4MTQsMHgwMCwweGE1LDB4YWYsMHgxOCwweDAwLDB4YTYsMHhhZiwweDFjLDB4MDAsMHhhNywweGFmLDB4MjAsMHgwMCwweGE4LDB4YWYsCi0weDI0LDB4MDAsMHhhOSwweGFmLDB4MjgsMHgwMCwweGFhLDB4YWYsMHgyYywweDAwLDB4YWIsMHhhZiwweDMwLDB4MDAsMHhhYywweGFmLAotMHgzNCwweDAwLDB4YWQsMHhhZiwweDM4LDB4MDAsMHhhZSwweGFmLDB4M2MsMHgwMCwweGFmLDB4YWYsMHgxMiwweDQwLDB4MDAsMHgwMCwKLTB4MTAsMHg0OCwweDAwLDB4MDAsMHgwMCwweDcwLDB4MGEsMHg0MCwweDQwLDB4MDAsMHhiMCwweGFmLDB4NDQsMHgwMCwweGIxLDB4YWYsCi0weDQ4LDB4MDAsMHhiMiwweGFmLDB4NGMsMHgwMCwweGIzLDB4YWYsMHg1MCwweDAwLDB4YjQsMHhhZiwweDU0LDB4MDAsMHhiNSwweGFmLAotMHg1OCwweDAwLDB4YjYsMHhhZiwweDVjLDB4MDAsMHhiNywweGFmLDB4NjAsMHgwMCwweGI4LDB4YWYsMHg2NCwweDAwLDB4YjksMHhhZiwKLTB4NjgsMHgwMCwweGJjLDB4YWYsMHg2YywweDAwLDB4YmQsMHhhZiwweDcwLDB4MDAsMHhiZSwweGFmLDB4NzQsMHgwMCwweGJmLDB4YWYsCi0weDc4LDB4MDAsMHhhOCwweGFmLDB4N2MsMHgwMCwweGE5LDB4YWYsMHg4MCwweDAwLDB4YWEsMHhhZiwweGRmLDB4MWEsMHgwMCwweDA4LAotMHgyMSwweDIwLDB4YTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjUsMHhiMCwweDA2LDB4M2MsMHgwMCwweDgwLDB4MDIsMHgzYywweGU4LDB4ZmYsMHhiZCwweDI3LDB4MTgsMHgwMywweGMzLDB4MzQsCi0weDAwLDB4MDMsMHg0MiwweDI0LDB4MTQsMHgwMCwweGJmLDB4YWYsMHgxMCwweDAwLDB4YjAsMHhhZiwweDAwLDB4MDAsMHg2MiwweGFjLAotMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsMHg0MiwweGIwLDB4MDMsMHgzYywKLTB4MDMsMHgwMCwweDYzLDB4MzQsMHgwMCwweDAwLDB4NjIsMHg5MCwweDAyLDB4ODAsMHgwYSwweDNjLDB4MDIsMHg4MCwweDEwLDB4M2MsCi0weGZmLDB4MDAsMHg0MiwweDMwLDB4MDAsMHg0NiwweDAyLDB4MDAsMHgxMCwweDAwLDB4NDIsMHgzMCwweDEzLDB4MDAsMHg0MCwweDEwLAotMHgwMywweDQ2LDB4MDgsMHgwMCwweGM0LDB4N2QsMHg0MiwweDhkLDB4NjgsMHgxNSwweDA1LDB4MjYsMHhkNCwweDYzLDB4YTQsMHg5NCwKLTB4MDEsMHgwMCwweDQ3LDB4MjQsMHgxMCwweDAwLDB4MDIsMHgyNCwweGIwLDB4MDMsMHhjOSwweDM0LDB4MDAsMHgwMCwweDYyLDB4YTAsCi0weDA3LDB4MDAsMHg4MCwweDEwLDB4MWMsMHgwMywweGM2LDB4MzQsMHhkOCwweDYzLDB4YTIsMHg4YywweGQ0LDB4NjMsMHhhMCwweGE0LAotMHhkOCwweDYzLDB4YTAsMHhhYywweDAwLDB4MDAsMHgwNCwweDI0LDB4MDAsMHgwMCwweGMyLDB4YWMsMHgwMCwweDAwLDB4MjAsMHhhZCwKLTB4MDEsMHgwMCwweDgyLDB4MjQsMHhjNCwweDdkLDB4NDcsMHhhZCwweGQ0LDB4NjMsMHhhMiwweGE0LDB4MTIsMHgwMCwweDAwLDB4MDUsCi0weDQyLDB4YjAsMHgwMiwweDNjLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LAotMHgwMCwweDYwLDB4ODEsMHg0MCwweDY4LDB4MTUsMHgwNCwweDI2LDB4MGMsMHg0YiwweDgzLDB4OTQsMHgwOCwweDRiLDB4ODUsMHg5NCwKLTB4MTQsMHgwMCwweGJmLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwweDgwLDB4MDAsMHg2MywweDMwLDB4NDEsMHhiMCwweDAyLDB4M2MsCi0weDI1LDB4MTgsMHg2NSwweDAwLDB4MDgsMHgwMCwweDQyLDB4MzQsMHgxOCwweDAwLDB4YmQsMHgyNywweDAwLDB4MDAsMHg0MywweGE0LAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDA4LDB4NGIsMHg4MywweGE0LDB4ODAsMHhmZiwweDAzLDB4MjQsMHgwMywweDAwLDB4NDIsMHgzNCwKLTB4MDAsMHgwMCwweDQzLDB4YTAsMHhjOCwweDBlLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MCwweDAxLDB4NDAsCi0weDAxLDB4MDAsMHgyMSwweDM0LDB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwweDY4LDB4MTUsMHgwNCwweDI2LAotMHgwYywweDRiLDB4ODMsMHg5NCwweDA4LDB4NGIsMHg4NSwweDk0LDB4MTQsMHgwMCwweGJmLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwKLTB4ODAsMHgwMCwweDYzLDB4MzAsMHg0MSwweGIwLDB4MDIsMHgzYywweDI1LDB4MTgsMHg2NSwweDAwLDB4MDgsMHgwMCwweDQyLDB4MzQsCi0weDE4LDB4MDAsMHhiZCwweDI3LDB4MDAsMHgwMCwweDQzLDB4YTQsMHgwOCwweDAwLDB4ZTAsMHgwMywweDA4LDB4NGIsMHg4MywweGE0LAotMHhmZiwweDAwLDB4ODQsMHgzMCwweDBiLDB4MDAsMHg4MiwweDJjLDB4ZmYsMHhmZiwweGU3LDB4MzAsMHgxMCwweDAwLDB4YTgsMHg5MywKLTB4MTksMHgwMCwweDQwLDB4MTAsMHgyMSwweDE4LDB4MDAsMHgwMCwweDAyLDB4ODAsMHgwMywweDNjLDB4ODAsMHgxMCwweDA0LDB4MDAsCi0weGMwLDB4OTEsMHg2MywweDI0LDB4MjEsMHgxMCwweDQzLDB4MDAsMHgwMCwweDAwLDB4NDQsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDMsMHhiMCwweDAyLDB4M2MsMHg3OCwweDAwLDB4NDQsMHgzNCwKLTB4MDcsMHgwMCwweGUyLDB4MzAsMHgwMCwweDAwLDB4ODUsMHhhYywweDA0LDB4MDAsMHg4NiwweGFjLDB4MDQsMHgwMCwweDQwLDB4MTgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZjgsMHhmZiwweGUyLDB4MzAsMHgwOCwweDAwLDB4NDIsMHgyNCwweGZmLDB4ZmYsMHg0NywweDMwLAotMHgyMSwweDEwLDB4ZTgsMHgwMCwweDAwLDB4ODAsMHgwMywweDNjLDB4MDgsMHgwMCwweDgyLDB4YWMsMHgyNSwweDEwLDB4NDMsMHgwMCwKLTB4MDgsMHgwMCwweDgyLDB4YWMsMHgwMSwweDAwLDB4MDMsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDYwLDB4MDAsCi0weDQzLDB4YjAsMHgwMiwweDNjLDB4MjAsMHgwMSwweDAwLDB4MDgsMHg2YywweDAwLDB4NDQsMHgzNCwweDQzLDB4YjAsMHgwMiwweDNjLAotMHgyMCwweDAxLDB4MDAsMHgwOCwweDYwLDB4MDAsMHg0NCwweDM0LDB4NDMsMHhiMCwweDAyLDB4M2MsMHgyMCwweDAxLDB4MDAsMHgwOCwKLTB4NTQsMHgwMCwweDQ0LDB4MzQsMHg0MywweGIwLDB4MDIsMHgzYywweDIwLDB4MDEsMHgwMCwweDA4LDB4NDgsMHgwMCwweDQ0LDB4MzQsCi0weDQzLDB4YjAsMHgwMiwweDNjLDB4MjAsMHgwMSwweDAwLDB4MDgsMHgzYywweDAwLDB4NDQsMHgzNCwweDQzLDB4YjAsMHgwMiwweDNjLAotMHgyMCwweDAxLDB4MDAsMHgwOCwweDMwLDB4MDAsMHg0NCwweDM0LDB4NDMsMHhiMCwweDAyLDB4M2MsMHgyMCwweDAxLDB4MDAsMHgwOCwKLTB4MjQsMHgwMCwweDQ0LDB4MzQsMHg0MywweGIwLDB4MDIsMHgzYywweDIwLDB4MDEsMHgwMCwweDA4LDB4MTgsMHgwMCwweDQ0LDB4MzQsCi0weDQzLDB4YjAsMHgwMiwweDNjLDB4MjAsMHgwMSwweDAwLDB4MDgsMHgwYywweDAwLDB4NDQsMHgzNCwweDIwLDB4MDEsMHgwMCwweDA4LAotMHg0MywweGIwLDB4MDQsMHgzYywweDAxLDB4MDAsMHgwMiwweDI0LDB4MjUsMHhiMCwweDAzLDB4M2MsMHgwNCwweDIwLDB4ODIsMHgwMCwKLTB4MTgsMHgwMywweDY3LDB4MzQsMHgwMCwweDgwLDB4MDIsMHgzYywweDQzLDB4YjAsMHgwMywweDNjLDB4MzQsMHgwNSwweDQ2LDB4MjQsCi0weDg4LDB4MDAsMHg2NSwweDM0LDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4NDIsMHgyNCwweGZmLDB4ZmYsMHg0MiwweDMwLAotMHgwNSwweDAwLDB4NDMsMHgyYywweGZkLDB4ZmYsMHg2MCwweDE0LDB4MDEsMHgwMCwweDQyLDB4MjQsMHgwMCwweDAwLDB4ZTYsMHhhYywKLTB4MDAsMHgwMCwweGEyLDB4OTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4ZmYsMHg0MiwweDMwLDB4MjQsMHgxMCwweDQ0LDB4MDAsCi0weGY0LDB4ZmYsMHg0MCwweDFjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyNSwweGIwLDB4MDgsMHgzYywweDAwLDB4ODAsMHgwMiwweDNjLDB4YzgsMHhmZiwweGJkLDB4MjcsMHgxOCwweDAzLDB4MDMsMHgzNSwKLTB4OTAsMHgwNSwweDQyLDB4MjQsMHgwMCwweDAwLDB4NjIsMHhhYywweDMwLDB4MDAsMHhiNiwweGFmLDB4MjgsMHgwMCwweGI0LDB4YWYsCi0weDI0LDB4MDAsMHhiMywweGFmLDB4MWMsMHgwMCwweGIxLDB4YWYsMHgzNCwweDAwLDB4YmYsMHhhZiwweDJjLDB4MDAsMHhiNSwweGFmLAotMHgyMCwweDAwLDB4YjIsMHhhZiwweDE4LDB4MDAsMHhiMCwweGFmLDB4MGMsMHgwMCwweGYyLDB4ODQsMHgwOCwweDAwLDB4ZjUsMHg4YywKLTB4ZmYsMHgwMCwweGM2LDB4MzAsMHgwMCwweDAxLDB4MDIsMHgyNCwweDIzLDB4MTAsMHg0NiwweDAwLDB4ZmYsMHhmZiwweDUxLDB4MzAsCi0weGQwLDB4MDMsMHgwOCwweDM1LDB4ZmYsMHgwMCwweDk2LDB4MzAsMHgwMCwweDAwLDB4MTIsMHhhZCwweDIxLDB4YTAsMHhhMCwweDAwLAotMHgyMSwweDMwLDB4YzUsMHgwMCwweDAwLDB4MDAsMHgxNSwweGFkLDB4MjEsMHgyMCwweGMwLDB4MDIsMHgyMSwweDI4LDB4YTAsMHgwMiwKLTB4MjEsMHgzOCwweDIwLDB4MDIsMHgxMCwweDAxLDB4MDAsMHgwYywweDEwLDB4MDAsMHhhMCwweGFmLDB4MjMsMHgxOCwweDUxLDB4MDIsCi0weGZmLDB4ZmYsMHg4MiwweDMyLDB4MDAsMHg5NCwweDAzLDB4MDAsMHgwMywweDk0LDB4MTIsMHgwMCwweGE2LDB4MDEsMHgwMCwweDA4LAotMHgwMiwweDlhLDB4MDIsMHgwMCwweDI4LDB4YjAsMHgwMywweDNjLDB4YzAsMHgxMCwweDEzLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwKLTB4MDAsMHgwMCwweDQ0LDB4OTAsMHgyNSwweGIwLDB4MTAsMHgzYywweDIwLDB4MTAsMHgwMiwweDNjLDB4ZmYsMHgwMCwweDkzLDB4MzAsCi0weDAwLDB4MjIsMHgxMywweDAwLDB4ZmYsMHhmZiwweDQzLDB4MzIsMHgwMSwweDAxLDB4NDUsMHgyYSwweDIxLDB4YTAsMHg4MiwweDAwLAotMHgyMSwweGE4LDB4YjEsMHgwMiwweGQwLDB4MDMsMHgwMiwweDM2LDB4MDAsMHgwMSwweDExLDB4MjQsMHgwYiwweDg4LDB4NjUsMHgwMCwKLTB4MjEsMHgyMCwweGMwLDB4MDIsMHgwMCwweDAwLDB4NTMsMHhhYywweDRkLDB4MDEsMHgwMCwweDBjLDB4YjAsMHgwMywweDEwLDB4MzYsCi0weDIxLDB4MzAsMHg4MCwweDAyLDB4MjEsMHgyMCwweGMwLDB4MDIsMHgyMSwweDI4LDB4YTAsMHgwMiwweDIxLDB4MzgsMHgyMCwweDAyLAotMHgxMCwweDAxLDB4MDAsMHgwYywweDEwLDB4MDAsMHhhMCwweGFmLDB4MjMsMHgxOCwweDUxLDB4MDIsMHgwMCwweDk0LDB4MDMsMHgwMCwKLTB4MDMsMHg5NCwweDEyLDB4MDAsMHgwMCwweDAwLDB4MTIsMHhhZSwweGUyLDB4ZmYsMHg0MCwweDFlLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDM0LDB4MDAsMHhiZiwweDhmLDB4MzAsMHgwMCwweGI2LDB4OGYsMHgyYywweDAwLDB4YjUsMHg4ZiwweDI4LDB4MDAsMHhiNCwweDhmLAotMHgyNCwweDAwLDB4YjMsMHg4ZiwweDIwLDB4MDAsMHhiMiwweDhmLDB4MWMsMHgwMCwweGIxLDB4OGYsMHgxOCwweDAwLDB4YjAsMHg4ZiwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgzOCwweDAwLDB4YmQsMHgyNywweGM4LDB4ZmYsMHhiZCwweDI3LDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weDI1LDB4YjAsMHgwNCwweDNjLDB4MjAsMHgwMCwweGIyLDB4YWYsMHg2OCwweDE1LDB4NTIsMHgyNCwweDAwLDB4ODAsMHgwMiwweDNjLAotMHgxOCwweDAzLDB4ODMsMHgzNCwweGM4LDB4MDYsMHg0MiwweDI0LDB4MjgsMHgwMCwweGI0LDB4YWYsMHgyNCwweDAwLDB4YjMsMHhhZiwKLTB4MzAsMHgwMCwweGJmLDB4YWYsMHgyYywweDAwLDB4YjUsMHhhZiwweDFjLDB4MDAsMHhiMSwweGFmLDB4MTgsMHgwMCwweGIwLDB4YWYsCi0weDAwLDB4MDAsMHg2MiwweGFjLDB4YjAsMHgwMywweDkzLDB4MzQsMHgyMSwweGEwLDB4NDAsMHgwMiwweDU0LDB4NjQsMHg0MiwweDhlLAotMHhjMCwweDY0LDB4NTAsMHg4ZSwweDIxLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYyLDB4YWUsMHg1OCwweDY0LDB4NDIsMHhhZSwKLTB4MDAsMHgwMCwweDcwLDB4YWUsMHg0ZCwweDAxLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHg2NCwweDQ0LDB4OGUsCi0weGM0LDB4NjQsMHg0MywweDhlLDB4MjAsMHgwMCwweDg0LDB4MjQsMHgzZiwweDAwLDB4NjIsMHgyNCwweDJiLDB4MTAsMHg0NCwweDAwLAotMHgwYSwweDE4LDB4ODIsMHgwMCwweGMwLDB4NjQsMHg0MywweGFlLDB4YzAsMHg2NCwweDg1LDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDY1LDB4YWUsMHgwMiwweDgwLDB4MDIsMHgzYywweGZmLDB4ZmYsMHgxMCwweDMyLDB4MjUsMHg4MCwweDAyLDB4MDIsCi0weDAwLDB4MDAsMHg3MCwweGFlLDB4MGMsMHgwMCwweDAyLDB4OTIsMHhmZiwweDAwLDB4MTUsMHgyNCwweDIxLDB4MjAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4NjIsMHhhZSwweDBjLDB4MDAsMHgxMSwweDkyLDB4MjAsMHgxMCwweDAyLDB4M2MsMHgyMCwweDAwLDB4MDcsMHgyNCwKLTB4MDAsMHgxYSwweDExLDB4MDAsMHgyMSwweDE4LDB4NjIsMHgwMCwweDA1LDB4MDAsMHgzNSwweDEyLDB4MjEsMHgzMCwweDYwLDB4MDAsCi0weDA4LDB4NjQsMHg5MSwweGEyLDB4NTQsMHg2NCwweDgzLDB4YWUsMHgxMCwweDAxLDB4MDAsMHgwYywweDEwLDB4MDAsMHhhMCwweGFmLAotMHgwNCwweDAwLDB4MDQsMHg4ZSwweDA4LDB4MDAsMHgwMywweDhlLDB4ZmYsMHhlMCwweDAyLDB4M2MsMHhmZiwweGZmLDB4NDIsMHgzNCwKLTB4MWYsMHgwMCwweDg0LDB4MzAsMHgyNCwweDE4LDB4NjIsMHgwMCwweDAwLDB4MjYsMHgwNCwweDAwLDB4ZmYsMHhkZiwweDAyLDB4M2MsCi0weDI1LDB4MTgsMHg2NCwweDAwLDB4ZmYsMHhmZiwweDQyLDB4MzQsMHgyNCwweDE4LDB4NjIsMHgwMCwweDAwLDB4NDAsMHgwNCwweDNjLAotMHgyNSwweDE4LDB4NjQsMHgwMCwweGMwLDB4ZmYsMHgwMiwweDI0LDB4MjQsMHgxOCwweDYyLDB4MDAsMHgwOCwweDAwLDB4MDMsMHhhZSwKLTB4YzksMHg2NCwweDg0LDB4OTIsMHgyYSwweGIwLDB4MDIsMHgzYywweDAxLDB4MDAsMHgwMywweDI0LDB4MDEsMHgwMCwweDg0LDB4MjQsCi0weDAxLDB4MDAsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YTAsMHhjNCwweGZmLDB4MzUsMHgxNiwweGM5LDB4NjQsMHg4NCwweGEyLAotMHhmYywweDRhLDB4ODIsMHg4ZSwweDQxLDB4YjAsMHgwMywweDNjLDB4MzAsMHgwMCwweGJmLDB4OGYsMHgwMCwweDM4LDB4NDIsMHgzNCwKLTB4MDAsMHgwMCwweDYyLDB4YWMsMHgyYywweDAwLDB4YjUsMHg4ZiwweGZjLDB4NGEsMHg4MiwweGFlLDB4MjQsMHgwMCwweGIzLDB4OGYsCi0weDI4LDB4MDAsMHhiNCwweDhmLDB4MjAsMHgwMCwweGIyLDB4OGYsMHgxYywweDAwLDB4YjEsMHg4ZiwweDE4LDB4MDAsMHhiMCwweDhmLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDM4LDB4MDAsMHhiZCwweDI3LDB4MjUsMHhiMCwweDA0LDB4M2MsMHgwMCwweDgwLDB4MDIsMHgzYywKLTB4YzgsMHhmZiwweGJkLDB4MjcsMHgxOCwweDAzLDB4ODMsMHgzNCwweDM4LDB4MDgsMHg0MiwweDI0LDB4MzQsMHgwMCwweGJmLDB4YWYsCi0weDMwLDB4MDAsMHhiNiwweGFmLDB4MmMsMHgwMCwweGI1LDB4YWYsMHgyOCwweDAwLDB4YjQsMHhhZiwweDI0LDB4MDAsMHhiMywweGFmLAotMHgyMCwweDAwLDB4YjIsMHhhZiwweDFjLDB4MDAsMHhiMSwweGFmLDB4MTgsMHgwMCwweGIwLDB4YWYsMHgwMCwweDAwLDB4NjIsMHhhYywKLTB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MDIsMHg4MCwweDE2LDB4M2MsCi0weDY4LDB4MTUsMHhkMiwweDI2LDB4YjAsMHgwMywweDkzLDB4MzQsMHgyZCwweDAyLDB4MDAsMHgwOCwweDIxLDB4YTgsMHg0MCwweDAyLAotMHgyYSwweGIwLDB4MDIsMHgzYywweDA4LDB4MDAsMHgwNCwweGFlLDB4MDksMHgwMCwweDQyLDB4MzQsMHgwMSwweDAwLDB4MDMsMHgyNCwKLTB4MDIsMHgwMCwweDA0LDB4MjQsMHgwMCwweDAwLDB4NDMsMHhhMCwweDAwLDB4MDAsMHg0NCwweGEwLDB4NDIsMHgwMCwweDM0LDB4MTIsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4NmMsMHg2NCwweDQyLDB4OGUsMHhkOCwweDY0LDB4NTAsMHg4ZSwweDAxLDB4MDAsMHgwNCwweDI0LAotMHgwMCwweDAwLDB4NjIsMHhhZSwweDcwLDB4NjQsMHg0MiwweGFlLDB4MDAsMHgwMCwweDcwLDB4YWUsMHg0ZCwweDAxLDB4MDAsMHgwYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhkOCwweDY0LDB4NDQsMHg4ZSwweGRjLDB4NjQsMHg0MywweDhlLDB4MjAsMHgwMCwweDg0LDB4MjQsCi0weDNmLDB4MDAsMHg2MiwweDI0LDB4MmIsMHgxMCwweDQ0LDB4MDAsMHgwYSwweDE4LDB4ODIsMHgwMCwweGQ4LDB4NjQsMHg0MywweGFlLAotMHhkOCwweDY0LDB4YTUsMHg4ZSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY1LDB4YWUsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4ZmYsMHhmZiwweDEwLDB4MzIsMHgyNSwweDgwLDB4MDIsMHgwMiwweDAwLDB4MDAsMHg3MCwweGFlLDB4MGMsMHgwMCwweDAyLDB4OTIsCi0weGZmLDB4MDAsMHgxNCwweDI0LDB4MDEsMHgwMCwweDA0LDB4MjQsMHgwMCwweDAwLDB4NjIsMHhhZSwweDBjLDB4MDAsMHgxMSwweDkyLAotMHgyMCwweDEwLDB4MDIsMHgzYywweDIwLDB4MDAsMHgwNywweDI0LDB4MDAsMHgxYSwweDExLDB4MDAsMHgyMSwweDE4LDB4NjIsMHgwMCwKLTB4MDUsMHgwMCwweDM0LDB4MTIsMHgyMSwweDMwLDB4NjAsMHgwMCwweDZjLDB4NjQsMHhhMywweGFlLDB4MTAsMHg2NCwweGIxLDB4YTIsCi0weDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGEwLDB4YWYsMHgwNCwweDAwLDB4MDQsMHg4ZSwweDA4LDB4MDAsMHgwMywweDhlLAotMHhmZiwweGUwLDB4MDIsMHgzYywweGZmLDB4ZmYsMHg0MiwweDM0LDB4MWYsMHgwMCwweDg0LDB4MzAsMHgyNCwweDE4LDB4NjIsMHgwMCwKLTB4MDAsMHgyNiwweDA0LDB4MDAsMHhmZiwweGRmLDB4MDIsMHgzYywweDI1LDB4MTgsMHg2NCwweDAwLDB4ZmYsMHhmZiwweDQyLDB4MzQsCi0weDI0LDB4MTgsMHg2MiwweDAwLDB4MDAsMHg0MCwweDA0LDB4M2MsMHgyNSwweDE4LDB4NjQsMHgwMCwweGMwLDB4ZmYsMHgwNSwweDI0LAotMHg4MiwweDExLDB4MDMsMHgwMCwweDI0LDB4MjAsMHg2NSwweDAwLDB4MDEsMHgwMCwweDQyLDB4MzAsMHhjMCwweGZmLDB4NDAsMHgxMCwKLTB4MDQsMHgwMCwweDg0LDB4MzQsMHgyYSwweGIwLDB4MDIsMHgzYywweDA4LDB4MDAsMHgwMywweGFlLDB4MDksMHgwMCwweDQyLDB4MzQsCi0weDAxLDB4MDAsMHgwMywweDI0LDB4MDIsMHgwMCwweDA0LDB4MjQsMHgwMCwweDAwLDB4NDMsMHhhMCwweDAwLDB4MDAsMHg0NCwweGEwLAotMHhjMCwweGZmLDB4MzQsMHgxNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwKLTB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwweDY4LDB4MTUsMHhjMiwweDI2LDB4ZmMsMHg0YSwweDQzLDB4OGMsCi0weDM0LDB4MDAsMHhiZiwweDhmLDB4MzAsMHgwMCwweGI2LDB4OGYsMHgyYywweDAwLDB4YjUsMHg4ZiwweDI4LDB4MDAsMHhiNCwweDhmLAotMHgyNCwweDAwLDB4YjMsMHg4ZiwweDIwLDB4MDAsMHhiMiwweDhmLDB4MWMsMHgwMCwweGIxLDB4OGYsMHgxOCwweDAwLDB4YjAsMHg4ZiwKLTB4MDAsMHgzOCwweDYzLDB4MzQsMHg0MSwweGIwLDB4MDQsMHgzYywweDM4LDB4MDAsMHhiZCwweDI3LDB4MDAsMHgwMCwweDgzLDB4YWMsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4ZmMsMHg0YSwweDQzLDB4YWMsMHgyNSwweGIwLDB4MDQsMHgzYywweDAwLDB4ODAsMHgwMiwweDNjLAotMHhjMCwweGZmLDB4YmQsMHgyNywweDE4LDB4MDMsMHg4MywweDM0LDB4MDgsMHgwYSwweDQyLDB4MjQsMHgzOCwweDAwLDB4YmYsMHhhZiwKLTB4MzQsMHgwMCwweGI3LDB4YWYsMHgzMCwweDAwLDB4YjYsMHhhZiwweDJjLDB4MDAsMHhiNSwweGFmLDB4MjgsMHgwMCwweGI0LDB4YWYsCi0weDI0LDB4MDAsMHhiMywweGFmLDB4MjAsMHgwMCwweGIyLDB4YWYsMHgxYywweDAwLDB4YjEsMHhhZiwweDE4LDB4MDAsMHhiMCwweGFmLAotMHgwMCwweDAwLDB4NjIsMHhhYywweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMCwweDYwLDB4ODEsMHg0MCwKLTB4MDIsMHg4MCwweDE3LDB4M2MsMHg2OCwweDE1LDB4ZjIsMHgyNiwweGIwLDB4MDMsMHg5MywweDM0LDB4MDIsMHg4MCwweDE0LDB4M2MsCi0weGFiLDB4MDIsMHgwMCwweDA4LDB4MjEsMHhiMCwweDQwLDB4MDIsMHgyYSwweGIwLDB4MDMsMHgzYywweDA4LDB4MDAsMHgwNCwweGFlLAotMHgwNSwweDAwLDB4NjMsMHgzNCwweDAxLDB4MDAsMHgwMiwweDI0LDB4MDIsMHgwMCwweDA0LDB4MjQsMHgwMCwweDAwLDB4NjIsMHhhMCwKLTB4MDAsMHgwMCwweDY0LDB4YTAsMHhjYSwweDdkLDB4ODIsMHg5NiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDQyLDB4MjQsCi0weGNhLDB4N2QsMHg4MiwweGE2LDB4Y2EsMHg3ZCwweDgzLDB4OTYsMHgyNSwweGIwLDB4MDIsMHgzYywweDY2LDB4MDMsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4NDMsMHhhNCwweDRhLDB4MDAsMHgzNSwweDEyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MCwweDY0LDB4NDIsMHg4ZSwKLTB4Y2MsMHg2NCwweDUwLDB4OGUsMHgwMSwweDAwLDB4MDQsMHgyNCwweDAwLDB4MDAsMHg2MiwweGFlLDB4NjQsMHg2NCwweDQyLDB4YWUsCi0weDAwLDB4MDAsMHg3MCwweGFlLDB4NGQsMHgwMSwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweGNjLDB4NjQsMHg0NCwweDhlLAotMHhkMCwweDY0LDB4NDMsMHg4ZSwweDIwLDB4MDAsMHg4NCwweDI0LDB4M2YsMHgwMCwweDYyLDB4MjQsMHgyYiwweDEwLDB4NDQsMHgwMCwKLTB4MGEsMHgxOCwweDgyLDB4MDAsMHhjYywweDY0LDB4NDMsMHhhZSwweGNjLDB4NjQsMHhjNSwweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHg2NSwweGFlLDB4MDIsMHg4MCwweDAyLDB4M2MsMHhmZiwweGZmLDB4MTAsMHgzMiwweDI1LDB4ODAsMHgwMiwweDAyLAotMHgwMCwweDAwLDB4NzAsMHhhZSwweDBjLDB4MDAsMHgwMiwweDkyLDB4ZmYsMHgwMCwweDE1LDB4MjQsMHgwMSwweDAwLDB4MDQsMHgyNCwKLTB4MDAsMHgwMCwweDYyLDB4YWUsMHgwYywweDAwLDB4MTEsMHg5MiwweDIwLDB4MTAsMHgwMiwweDNjLDB4MjAsMHgwMCwweDA3LDB4MjQsCi0weDAwLDB4MWEsMHgxMSwweDAwLDB4MjEsMHgxOCwweDYyLDB4MDAsMHgwNSwweDAwLDB4MzUsMHgxMiwweDIxLDB4MzAsMHg2MCwweDAwLAotMHg2MCwweDY0LDB4YzMsMHhhZSwweDBjLDB4NjQsMHhkMSwweGEyLDB4MTAsMHgwMSwweDAwLDB4MGMsMHgxMCwweDAwLDB4YTAsMHhhZiwKLTB4MDQsMHgwMCwweDA0LDB4OGUsMHgwOCwweDAwLDB4MDMsMHg4ZSwweGZmLDB4ZTAsMHgwMiwweDNjLDB4ZmYsMHhmZiwweDQyLDB4MzQsCi0weDFmLDB4MDAsMHg4NCwweDMwLDB4MjQsMHgxOCwweDYyLDB4MDAsMHgwMCwweDI2LDB4MDQsMHgwMCwweGZmLDB4ZGYsMHgwMiwweDNjLAotMHgyNSwweDE4LDB4NjQsMHgwMCwweGZmLDB4ZmYsMHg0MiwweDM0LDB4MjQsMHgxOCwweDYyLDB4MDAsMHgwMCwweDQwLDB4MDQsMHgzYywKLTB4MjUsMHgxOCwweDY0LDB4MDAsMHhjMCwweGZmLDB4MDUsMHgyNCwweDgyLDB4MTEsMHgwMywweDAwLDB4MjQsMHgyMCwweDY1LDB4MDAsCi0weDAxLDB4MDAsMHg0MiwweDMwLDB4YjgsMHhmZiwweDQwLDB4MTAsMHgwNCwweDAwLDB4ODQsMHgzNCwweDA4LDB4MDAsMHgwMywweGFlLAotMHgyYSwweGIwLDB4MDMsMHgzYywweDA1LDB4MDAsMHg2MywweDM0LDB4MDEsMHgwMCwweDAyLDB4MjQsMHgwMiwweDAwLDB4MDQsMHgyNCwKLTB4MDAsMHgwMCwweDYyLDB4YTAsMHgwMCwweDAwLDB4NjQsMHhhMCwweGNhLDB4N2QsMHg4MiwweDk2LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg0MiwweDI0LDB4Y2EsMHg3ZCwweDgyLDB4YTYsMHhjYSwweDdkLDB4ODMsMHg5NiwweDI1LDB4YjAsMHgwMiwweDNjLAotMHg2NiwweDAzLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweGE0LDB4YjgsMHhmZiwweDM1LDB4MTYsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weDY4LDB4MTUsMHhlMiwweDI2LDB4ZmMsMHg0YSwweDQzLDB4OGMsMHgzOCwweDAwLDB4YmYsMHg4ZiwweDM0LDB4MDAsMHhiNywweDhmLAotMHgzMCwweDAwLDB4YjYsMHg4ZiwweDJjLDB4MDAsMHhiNSwweDhmLDB4MjgsMHgwMCwweGI0LDB4OGYsMHgyNCwweDAwLDB4YjMsMHg4ZiwKLTB4MjAsMHgwMCwweGIyLDB4OGYsMHgxYywweDAwLDB4YjEsMHg4ZiwweDE4LDB4MDAsMHhiMCwweDhmLDB4MDAsMHgzOCwweDYzLDB4MzQsCi0weDQxLDB4YjAsMHgwNCwweDNjLDB4NDAsMHgwMCwweGJkLDB4MjcsMHgwMCwweDAwLDB4ODMsMHhhYywweDA4LDB4MDAsMHhlMCwweDAzLAotMHhmYywweDRhLDB4NDMsMHhhYywweGMwLDB4ZmYsMHhiZCwweDI3LDB4MmMsMHgwMCwweGI1LDB4YWYsMHgzOCwweDAwLDB4YmYsMHhhZiwKLTB4MzQsMHgwMCwweGI3LDB4YWYsMHgzMCwweDAwLDB4YjYsMHhhZiwweDI4LDB4MDAsMHhiNCwweGFmLDB4MjQsMHgwMCwweGIzLDB4YWYsCi0weDIwLDB4MDAsMHhiMiwweGFmLDB4MWMsMHgwMCwweGIxLDB4YWYsMHgxOCwweDAwLDB4YjAsMHhhZiwweDAyLDB4ODAsMHgwNiwweDNjLAotMHg3YywweDdlLDB4YzUsMHg5MCwweDAwLDB4ODAsMHgwMywweDNjLDB4MjUsMHhiMCwweDAyLDB4M2MsMHgxOCwweDAzLDB4NDIsMHgzNCwKLTB4MjQsMHgwYywweDYzLDB4MjQsMHg0MCwweDAwLDB4YTQsMHgzMCwweDAwLDB4MDAsMHg0MywweGFjLDB4MjEsMHhhOCwweDAwLDB4MDAsCi0weDAzLDB4MDAsMHg4MCwweDEwLDB4N2YsMHgwMCwweGEyLDB4MzAsMHhiZiwweDAwLDB4YTIsMHgzMCwweDAxLDB4MDAsMHgxNSwweDI0LAotMHg3YywweDdlLDB4YzIsMHhhMCwweDdjLDB4N2UsMHhjMiwweDkwLDB4MjUsMHhiMCwweDA0LDB4M2MsMHg4OCwweDAyLDB4ODMsMHgzNCwKLTB4MDAsMHgwMCwweDYyLDB4YWMsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weDAyLDB4ODAsMHgxNiwweDNjLDB4NjgsMHgxNSwweGQyLDB4MjYsMHhiMCwweDAzLDB4OTMsMHgzNCwweDAyLDB4ODAsMHgxNCwweDNjLAotMHg0MywweDAzLDB4MDAsMHgwOCwweDIxLDB4YjgsMHg0MCwweDAyLDB4MjQsMHgxMCwweGEyLDB4MDAsMHgwNCwweDAwLDB4NDIsMHgzNCwKLTB4MmEsMHhiMCwweDA3LDB4M2MsMHgwOCwweDAwLDB4MDIsMHhhZSwweDBkLDB4MDAsMHhlMiwweDM0LDB4MDQsMHgwMCwweDQzLDB4MjQsCi0weDBiLDB4MTAsMHg3NSwweDAwLDB4MDEsMHgwMCwweDA0LDB4MjQsMHgwMiwweDAwLDB4MDMsMHgyNCwweDAwLDB4MDAsMHg0NCwweGEwLAotMHgwMCwweDAwLDB4NDMsMHhhMCwweGNhLDB4N2QsMHg4NCwweDk2LDB4MjUsMHhiMCwweDA2LDB4M2MsMHg2NiwweDAzLDB4YzUsMHgzNCwKLTB4MDEsMHgwMCwweDg0LDB4MjQsMHhjYSwweDdkLDB4ODQsMHhhNiwweGNhLDB4N2QsMHg4MiwweDk2LDB4ZmYsMHgwMCwweDAzLDB4MjQsCi0weDAwLDB4MDAsMHhhMiwweGE0LDB4NWEsMHgwMCwweDIzLDB4MTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4NjQsMHg0MiwweDhlLAotMHg5MCwweDY0LDB4NTAsMHg4ZSwweDAzLDB4MDAsMHgwNCwweDI0LDB4MDAsMHgwMCwweDYyLDB4YWUsMHgyOCwweDY0LDB4NDIsMHhhZSwKLTB4MDAsMHgwMCwweDcwLDB4YWUsMHg0ZCwweDAxLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4OTAsMHg2NCwweDQ0LDB4OGUsCi0weDk0LDB4NjQsMHg0MywweDhlLDB4MjAsMHgwMCwweDg0LDB4MjQsMHgzZiwweDAwLDB4NjIsMHgyNCwweDJiLDB4MTAsMHg0NCwweDAwLAotMHgwYSwweDE4LDB4ODIsMHgwMCwweDkwLDB4NjQsMHg0MywweGFlLDB4OTAsMHg2NCwweGUyLDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDYyLDB4YWUsMHgwMiwweDgwLDB4MDIsMHgzYywweGZmLDB4ZmYsMHgxMCwweDMyLDB4MjUsMHg4MCwweDAyLDB4MDIsCi0weDAwLDB4MDAsMHg3MCwweGFlLDB4MGMsMHgwMCwweDAyLDB4OTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MiwweGFlLAotMHgwYywweDAwLDB4MTEsMHg5MiwweGZmLDB4MDAsMHgwMiwweDI0LDB4MGQsMHgwMCwweDIyLDB4MTIsMHgwMCwweDEyLDB4MTEsMHgwMCwKLTB4MjAsMHgxMCwweDAzLDB4M2MsMHgyMSwweDEwLDB4NDMsMHgwMCwweDVhLDB4MDAsMHhhMCwweDEyLDB4MjQsMHg2NCwweGUyLDB4YWUsCi0weGVjLDB4NjMsMHhmMSwweGEyLDB4NjgsMHgxNSwweGMyLDB4MjYsMHgyNCwweDY0LDB4NDYsMHg4YywweDkwLDB4NjQsMHg0NSwweDhjLAotMHgwMywweDAwLDB4MDQsMHgyNCwweDIwLDB4MDAsMHgwNywweDI0LDB4MTAsMHgwMSwweDAwLDB4MGMsMHgxMCwweDAwLDB4YTAsMHhhZiwKLTB4MDQsMHgwMCwweDA0LDB4OGUsMHgxNCwweDAwLDB4MDMsMHg4ZSwweDA4LDB4MDAsMHgwNSwweDhlLDB4ZmYsMHhlMCwweDAyLDB4M2MsCi0weDFmLDB4MDAsMHg4NCwweDMwLDB4NDIsMHgxYSwweDAzLDB4MDAsMHhmZiwweGZmLDB4NDIsMHgzNCwweDAwLDB4MjYsMHgwNCwweDAwLAotMHgyNCwweDI4LDB4YTIsMHgwMCwweDNmLDB4MDAsMHg2MywweDMwLDB4MjUsMHgyOCwweGE0LDB4MDAsMHgwYywweDAwLDB4NjMsMHgyOCwKLTB4MDYsMHgwMCwweDYwLDB4MTQsMHgyMSwweDIwLDB4YTAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDk2LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGZkLDB4MGYsMHg0MiwweDI4LDB4MDgsMHgwMCwweDQwLDB4MTQsMHg4MiwweDExLDB4MDUsMHgwMCwweGZmLDB4ZGYsMHgwMiwweDNjLAotMHhmZiwweGZmLDB4NDIsMHgzNCwweDI0LDB4MjgsMHg4MiwweDAwLDB4MDAsMHg0MCwweDAzLDB4M2MsMHgyNSwweDIwLDB4YTMsMHgwMCwKLTB4MjEsMHgyOCwweDgwLDB4MDAsMHg4MiwweDExLDB4MDUsMHgwMCwweDAxLDB4MDAsMHg0MiwweDMwLDB4YTYsMHhmZiwweDQwLDB4MTAsCi0weGMwLDB4ZmYsMHgwMiwweDI0LDB4MmEsMHhiMCwweDA3LDB4M2MsMHgwZCwweDAwLDB4ZTIsMHgzNCwweDA0LDB4MDAsMHg0MywweDI0LAotMHgwOCwweDAwLDB4MDQsMHhhZSwweDBiLDB4MTAsMHg3NSwweDAwLDB4MDEsMHgwMCwweDA0LDB4MjQsMHgwMiwweDAwLDB4MDMsMHgyNCwKLTB4MDAsMHgwMCwweDQ0LDB4YTAsMHgwMCwweDAwLDB4NDMsMHhhMCwweGNhLDB4N2QsMHg4NCwweDk2LDB4MjUsMHhiMCwweDA2LDB4M2MsCi0weDY2LDB4MDMsMHhjNSwweDM0LDB4MDEsMHgwMCwweDg0LDB4MjQsMHhjYSwweDdkLDB4ODQsMHhhNiwweGNhLDB4N2QsMHg4MiwweDk2LAotMHhmZiwweDAwLDB4MDMsMHgyNCwweDAwLDB4MDAsMHhhMiwweGE0LDB4YTgsMHhmZiwweDIzLDB4MTYsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjIsMHgwMCwweGEwLDB4MTIsMHg2OCwweDE1LDB4YzIsMHgyNiwweGVjLDB4NjMsMHg0MywweDkwLDB4NDEsMHgwMCwweGU0LDB4MzQsCi0weGIwLDB4MDMsMHhjNSwweDM0LDB4MDAsMHgwMCwweDgzLDB4YTAsMHgwMCwweDAwLDB4YTMsMHhhYywweDAwLDB4NjAsMHgwMSwweDQwLAotMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwKLTB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwweDY4LDB4MTUsMHhjNSwweDI2LDB4ZmMsMHg0YSwweGE0LDB4OGMsCi0weDAxLDB4MDAsMHgwMiwweDNjLDB4MzgsMHgwMCwweGJmLDB4OGYsMHgzNCwweDAwLDB4YjcsMHg4ZiwweDMwLDB4MDAsMHhiNiwweDhmLAotMHgyYywweDAwLDB4YjUsMHg4ZiwweDI4LDB4MDAsMHhiNCwweDhmLDB4MjQsMHgwMCwweGIzLDB4OGYsMHgyMCwweDAwLDB4YjIsMHg4ZiwKLTB4MWMsMHgwMCwweGIxLDB4OGYsMHgxOCwweDAwLDB4YjAsMHg4ZiwweDAwLDB4ODAsMHg0MiwweDM0LDB4MjUsMHgyMCwweDgyLDB4MDAsCi0weDQxLDB4YjAsMHgwMywweDNjLDB4NDAsMHgwMCwweGJkLDB4MjcsMHgwMCwweDAwLDB4NjQsMHhhYywweDA4LDB4MDAsMHhlMCwweDAzLAotMHhmYywweDRhLDB4YTQsMHhhYywweDY1LDB4MDMsMHgwMCwweDA4LDB4ZTgsMHg2MywweGYxLDB4YTIsMHhlOCwweDYzLDB4NDMsMHg5MCwKLTB4NDAsMHgwMCwweGU0LDB4MzQsMHhiMCwweDAzLDB4YzUsMHgzNCwweDAwLDB4MDAsMHg4MywweGEwLDB4MDAsMHgwMCwweGEzLDB4YWMsCi0weDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMCwweDYwLDB4ODEsMHg0MCwweDAwLDB4NjAsMHgwMSwweDQwLAotMHgwMSwweDAwLDB4MjEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsMHg2OCwweDE1LDB4YzUsMHgyNiwKLTB4ZmMsMHg0YSwweGE0LDB4OGMsMHgwMSwweDAwLDB4MDIsMHgzYywweDM4LDB4MDAsMHhiZiwweDhmLDB4MzQsMHgwMCwweGI3LDB4OGYsCi0weDMwLDB4MDAsMHhiNiwweDhmLDB4MmMsMHgwMCwweGI1LDB4OGYsMHgyOCwweDAwLDB4YjQsMHg4ZiwweDI0LDB4MDAsMHhiMywweDhmLAotMHgyMCwweDAwLDB4YjIsMHg4ZiwweDFjLDB4MDAsMHhiMSwweDhmLDB4MTgsMHgwMCwweGIwLDB4OGYsMHgwMCwweDgwLDB4NDIsMHgzNCwKLTB4MjUsMHgyMCwweDgyLDB4MDAsMHg0MSwweGIwLDB4MDMsMHgzYywweDQwLDB4MDAsMHhiZCwweDI3LDB4MDAsMHgwMCwweDY0LDB4YWMsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4ZmMsMHg0YSwweGE0LDB4YWMsMHhjMCwweGZmLDB4YmQsMHgyNywweDJjLDB4MDAsMHhiNSwweGFmLAotMHgzOCwweDAwLDB4YmYsMHhhZiwweDM0LDB4MDAsMHhiNywweGFmLDB4MzAsMHgwMCwweGI2LDB4YWYsMHgyOCwweDAwLDB4YjQsMHhhZiwKLTB4MjQsMHgwMCwweGIzLDB4YWYsMHgyMCwweDAwLDB4YjIsMHhhZiwweDFjLDB4MDAsMHhiMSwweGFmLDB4MTgsMHgwMCwweGIwLDB4YWYsCi0weDAyLDB4ODAsMHgwNiwweDNjLDB4N2MsMHg3ZSwweGM1LDB4OTAsMHgwMCwweDgwLDB4MDMsMHgzYywweDI1LDB4YjAsMHgwMiwweDNjLAotMHgxOCwweDAzLDB4NDIsMHgzNCwweDc4LDB4MGYsMHg2MywweDI0LDB4MTAsMHgwMCwweGE0LDB4MzAsMHgwMCwweDAwLDB4NDMsMHhhYywKLTB4MjEsMHhhOCwweDAwLDB4MDAsMHgwMywweDAwLDB4ODAsMHgxMCwweGRmLDB4MDAsMHhhMiwweDMwLDB4ZWYsMHgwMCwweGEyLDB4MzAsCi0weDAxLDB4MDAsMHgxNSwweDI0LDB4N2MsMHg3ZSwweGMyLDB4YTAsMHg3YywweDdlLDB4YzMsMHg5MCwweDI1LDB4YjAsMHgwMiwweDNjLAotMHhiMCwweDAzLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweGFjLDB4MDAsMHgwMCwweDQzLDB4YWMsMHgwMCwweDYwLDB4MDEsMHg0MCwKLTB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMCwweDYwLDB4ODEsMHg0MCwweDAyLDB4ODAsMHgxNiwweDNjLDB4NjgsMHgxNSwweGQyLDB4MjYsCi0weDIxLDB4OTgsMHg0MCwweDAwLDB4MDIsMHg4MCwweDE0LDB4M2MsMHgxOSwweDA0LDB4MDAsMHgwOCwweDIxLDB4YjgsMHg0MCwweDAyLAotMHgyNCwweDEwLDB4YTIsMHgwMCwweDA0LDB4MDAsMHg0MiwweDM0LDB4MmEsMHhiMCwweDA3LDB4M2MsMHgwOCwweDAwLDB4MDIsMHhhZSwKLTB4MTUsMHgwMCwweGUyLDB4MzQsMHgwNCwweDAwLDB4NDMsMHgyNCwweDBiLDB4MTAsMHg3NSwweDAwLDB4MDEsMHgwMCwweDA0LDB4MjQsCi0weDAyLDB4MDAsMHgwMywweDI0LDB4MDAsMHgwMCwweDQ0LDB4YTAsMHgwMCwweDAwLDB4NDMsMHhhMCwweGNhLDB4N2QsMHg4NCwweDk2LAotMHgyNSwweGIwLDB4MDYsMHgzYywweDY2LDB4MDMsMHhjNSwweDM0LDB4MDEsMHgwMCwweDg0LDB4MjQsMHhjYSwweDdkLDB4ODQsMHhhNiwKLTB4Y2EsMHg3ZCwweDgyLDB4OTYsMHhmZiwweDAwLDB4MDMsMHgyNCwweDAwLDB4MDAsMHhhMiwweGE0LDB4NWEsMHgwMCwweDIzLDB4MTIsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MzAsMHg2NCwweDQyLDB4OGUsMHg5YywweDY0LDB4NTAsMHg4ZSwweDA0LDB4MDAsMHgwNCwweDI0LAotMHgwMCwweDAwLDB4NjIsMHhhZSwweDM0LDB4NjQsMHg0MiwweGFlLDB4MDAsMHgwMCwweDcwLDB4YWUsMHg0ZCwweDAxLDB4MDAsMHgwYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg5YywweDY0LDB4NDQsMHg4ZSwweGEwLDB4NjQsMHg0MywweDhlLDB4MjAsMHgwMCwweDg0LDB4MjQsCi0weDNmLDB4MDAsMHg2MiwweDI0LDB4MmIsMHgxMCwweDQ0LDB4MDAsMHgwYSwweDE4LDB4ODIsMHgwMCwweDljLDB4NjQsMHg0MywweGFlLAotMHg5YywweDY0LDB4ZTIsMHg4ZSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYyLDB4YWUsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4ZmYsMHhmZiwweDEwLDB4MzIsMHgyNSwweDgwLDB4MDIsMHgwMiwweDAwLDB4MDAsMHg3MCwweGFlLDB4MGMsMHgwMCwweDAyLDB4OTIsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYyLDB4YWUsMHgwYywweDAwLDB4MTEsMHg5MiwweGZmLDB4MDAsMHgwMiwweDI0LAotMHgwZCwweDAwLDB4MjIsMHgxMiwweDAwLDB4MTIsMHgxMSwweDAwLDB4MjAsMHgxMCwweDAzLDB4M2MsMHgyMSwweDEwLDB4NDMsMHgwMCwKLTB4NTksMHgwMCwweGEwLDB4MTIsMHgzMCwweDY0LDB4ZTIsMHhhZSwweGY0LDB4NjMsMHhmMSwweGEyLDB4NjgsMHgxNSwweGMyLDB4MjYsCi0weDMwLDB4NjQsMHg0NiwweDhjLDB4OWMsMHg2NCwweDQ1LDB4OGMsMHgwNCwweDAwLDB4MDQsMHgyNCwweDIwLDB4MDAsMHgwNywweDI0LAotMHgxMCwweDAxLDB4MDAsMHgwYywweDEwLDB4MDAsMHhhMCwweGFmLDB4MDQsMHgwMCwweDA0LDB4OGUsMHgxNCwweDAwLDB4MDMsMHg4ZSwKLTB4MDgsMHgwMCwweDA1LDB4OGUsMHhmZiwweGUwLDB4MDIsMHgzYywweDFmLDB4MDAsMHg4NCwweDMwLDB4NDIsMHgxYSwweDAzLDB4MDAsCi0weGZmLDB4ZmYsMHg0MiwweDM0LDB4MDAsMHgyNiwweDA0LDB4MDAsMHgyNCwweDI4LDB4YTIsMHgwMCwweDNmLDB4MDAsMHg2MywweDMwLAotMHgyNSwweDI4LDB4YTQsMHgwMCwweDBjLDB4MDAsMHg2MywweDI4LDB4MDYsMHgwMCwweDYwLDB4MTQsMHgyMSwweDIwLDB4YTAsMHgwMCwKLTB4MDAsMHgwMCwweDAyLDB4OTYsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZkLDB4MGYsMHg0MiwweDI4LDB4MDgsMHgwMCwweDQwLDB4MTQsCi0weDgyLDB4MTEsMHgwNSwweDAwLDB4ZmYsMHhkZiwweDAyLDB4M2MsMHhmZiwweGZmLDB4NDIsMHgzNCwweDI0LDB4MjgsMHg4MiwweDAwLAotMHgwMCwweDQwLDB4MDMsMHgzYywweDI1LDB4MjAsMHhhMywweDAwLDB4MjEsMHgyOCwweDgwLDB4MDAsMHg4MiwweDExLDB4MDUsMHgwMCwKLTB4MDEsMHgwMCwweDQyLDB4MzAsMHhhNiwweGZmLDB4NDAsMHgxMCwweGMwLDB4ZmYsMHgwMiwweDI0LDB4MmEsMHhiMCwweDA3LDB4M2MsCi0weDE1LDB4MDAsMHhlMiwweDM0LDB4MDQsMHgwMCwweDQzLDB4MjQsMHgwOCwweDAwLDB4MDQsMHhhZSwweDBiLDB4MTAsMHg3NSwweDAwLAotMHgwMSwweDAwLDB4MDQsMHgyNCwweDAyLDB4MDAsMHgwMywweDI0LDB4MDAsMHgwMCwweDQ0LDB4YTAsMHgwMCwweDAwLDB4NDMsMHhhMCwKLTB4Y2EsMHg3ZCwweDg0LDB4OTYsMHgyNSwweGIwLDB4MDYsMHgzYywweDY2LDB4MDMsMHhjNSwweDM0LDB4MDEsMHgwMCwweDg0LDB4MjQsCi0weGNhLDB4N2QsMHg4NCwweGE2LDB4Y2EsMHg3ZCwweDgyLDB4OTYsMHhmZiwweDAwLDB4MDMsMHgyNCwweDAwLDB4MDAsMHhhMiwweGE0LAotMHhhOCwweGZmLDB4MjMsMHgxNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjEsMHgwMCwweGEwLDB4MTIsMHg2OCwweDE1LDB4YzIsMHgyNiwKLTB4ZjQsMHg2MywweDQzLDB4OTAsMHg0MywweDAwLDB4ZTQsMHgzNCwweGIwLDB4MDMsMHhjNSwweDM0LDB4MDAsMHgwMCwweDgzLDB4YTAsCi0weDAwLDB4MDAsMHhhMywweGFjLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwKLTB4NjgsMHgxNSwweGM1LDB4MjYsMHhmYywweDRhLDB4YTIsMHg4YywweDM4LDB4MDAsMHhiZiwweDhmLDB4MzQsMHgwMCwweGI3LDB4OGYsCi0weDMwLDB4MDAsMHhiNiwweDhmLDB4MmMsMHgwMCwweGI1LDB4OGYsMHgyOCwweDAwLDB4YjQsMHg4ZiwweDI0LDB4MDAsMHhiMywweDhmLAotMHgyMCwweDAwLDB4YjIsMHg4ZiwweDFjLDB4MDAsMHhiMSwweDhmLDB4MTgsMHgwMCwweGIwLDB4OGYsMHgwNiwweDAwLDB4MDMsMHgzYywKLTB4MjUsMHgxMCwweDQzLDB4MDAsMHg0MSwweGIwLDB4MDQsMHgzYywweDQwLDB4MDAsMHhiZCwweDI3LDB4MDAsMHgwMCwweDgyLDB4YWMsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4ZmMsMHg0YSwweGEyLDB4YWMsMHgzYiwweDA0LDB4MDAsMHgwOCwweGYwLDB4NjMsMHhmMSwweGEyLAotMHhmMCwweDYzLDB4NDMsMHg5MCwweDQyLDB4MDAsMHhlNCwweDM0LDB4YjAsMHgwMywweGM1LDB4MzQsMHgwMCwweDAwLDB4ODMsMHhhMCwKLTB4MDAsMHgwMCwweGEzLDB4YWMsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHg2OCwweDE1LDB4YzUsMHgyNiwweGZjLDB4NGEsMHhhMiwweDhjLDB4MzgsMHgwMCwweGJmLDB4OGYsMHgzNCwweDAwLDB4YjcsMHg4ZiwKLTB4MzAsMHgwMCwweGI2LDB4OGYsMHgyYywweDAwLDB4YjUsMHg4ZiwweDI4LDB4MDAsMHhiNCwweDhmLDB4MjQsMHgwMCwweGIzLDB4OGYsCi0weDIwLDB4MDAsMHhiMiwweDhmLDB4MWMsMHgwMCwweGIxLDB4OGYsMHgxOCwweDAwLDB4YjAsMHg4ZiwweDA2LDB4MDAsMHgwMywweDNjLAotMHgyNSwweDEwLDB4NDMsMHgwMCwweDQxLDB4YjAsMHgwNCwweDNjLDB4NDAsMHgwMCwweGJkLDB4MjcsMHgwMCwweDAwLDB4ODIsMHhhYywKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHhmYywweDRhLDB4YTIsMHhhYywweGMwLDB4ZmYsMHhiZCwweDI3LDB4MmMsMHgwMCwweGI1LDB4YWYsCi0weDM4LDB4MDAsMHhiZiwweGFmLDB4MzQsMHgwMCwweGI3LDB4YWYsMHgzMCwweDAwLDB4YjYsMHhhZiwweDI4LDB4MDAsMHhiNCwweGFmLAotMHgyNCwweDAwLDB4YjMsMHhhZiwweDIwLDB4MDAsMHhiMiwweGFmLDB4MWMsMHgwMCwweGIxLDB4YWYsMHgxOCwweDAwLDB4YjAsMHhhZiwKLTB4MDIsMHg4MCwweDA2LDB4M2MsMHg3YywweDdlLDB4YzUsMHg5MCwweDAwLDB4ODAsMHgwMywweDNjLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDE4LDB4MDMsMHg0MiwweDM0LDB4YzgsMHgxMiwweDYzLDB4MjQsMHgwMSwweDAwLDB4YTQsMHgzMCwweDAwLDB4MDAsMHg0MywweGFjLAotMHgyMSwweGE4LDB4MDAsMHgwMCwweDAzLDB4MDAsMHg4MCwweDEwLDB4ZjcsMHgwMCwweGEyLDB4MzAsMHhmZSwweDAwLDB4YTIsMHgzMCwKLTB4MDEsMHgwMCwweDE1LDB4MjQsMHg3YywweDdlLDB4YzIsMHhhMCwweDdjLDB4N2UsMHhjMywweDkwLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weGIwLDB4MDMsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YWMsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LAotMHgwMCwweDYwLDB4ODEsMHg0MCwweDAyLDB4ODAsMHgxNiwweDNjLDB4NjgsMHgxNSwweGQyLDB4MjYsMHgyMSwweDk4LDB4NDAsMHgwMCwKLTB4MDIsMHg4MCwweDE0LDB4M2MsMHhmOCwweDA0LDB4MDAsMHgwOCwweDIxLDB4YjgsMHg0MCwweDAyLDB4MDAsMHgwMCwweDAyLDB4OTYsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZmQsMHgwZiwweDQyLDB4MjgsMHg1NCwweDAwLDB4NDAsMHgxMCwweGZmLDB4ZGYsMHgwMiwweDNjLAotMHgwMCwweDIwLDB4MDIsMHgzYywweDI1LDB4MjgsMHhhMiwweDAwLDB4ODIsMHgxMSwweDA1LDB4MDAsMHgwMSwweDAwLDB4NDIsMHgzMCwKLTB4NTcsMHgwMCwweDQwLDB4MTQsMHgyYSwweGIwLDB4MDcsMHgzYywweGMwLDB4ZmYsMHgwMiwweDI0LDB4MjQsMHgxMCwweGEyLDB4MDAsCi0weDA0LDB4MDAsMHg0MiwweDM0LDB4MmEsMHhiMCwweDA3LDB4M2MsMHgwOCwweDAwLDB4MDIsMHhhZSwweDFkLDB4MDAsMHhlMiwweDM0LAotMHgwNCwweDAwLDB4NDMsMHgyNCwweDBiLDB4MTAsMHg3NSwweDAwLDB4MDEsMHgwMCwweDA0LDB4MjQsMHgwMiwweDAwLDB4MDMsMHgyNCwKLTB4MDAsMHgwMCwweDQ0LDB4YTAsMHgwMCwweDAwLDB4NDMsMHhhMCwweGNhLDB4N2QsMHg4NCwweDk2LDB4MjUsMHhiMCwweDA2LDB4M2MsCi0weDY2LDB4MDMsMHhjNSwweDM0LDB4MDEsMHgwMCwweDg0LDB4MjQsMHhjYSwweDdkLDB4ODQsMHhhNiwweGNhLDB4N2QsMHg4MiwweDk2LAotMHhmZiwweDAwLDB4MDMsMHgyNCwweDAwLDB4MDAsMHhhMiwweGE0LDB4NTMsMHgwMCwweDIzLDB4MTIsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4M2MsMHg2NCwweDQyLDB4OGUsMHhhOCwweDY0LDB4NTAsMHg4ZSwweDA1LDB4MDAsMHgwNCwweDI0LDB4MDAsMHgwMCwweDYyLDB4YWUsCi0weDQwLDB4NjQsMHg0MiwweGFlLDB4MDAsMHgwMCwweDcwLDB4YWUsMHg0ZCwweDAxLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLAotMHhhOCwweDY0LDB4NDQsMHg4ZSwweGFjLDB4NjQsMHg0MywweDhlLDB4MjAsMHgwMCwweDg0LDB4MjQsMHgzZiwweDAwLDB4NjIsMHgyNCwKLTB4MmIsMHgxMCwweDQ0LDB4MDAsMHgwYSwweDE4LDB4ODIsMHgwMCwweGE4LDB4NjQsMHg0MywweGFlLDB4YTgsMHg2NCwweGUyLDB4OGUsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYyLDB4YWUsMHgwMiwweDgwLDB4MDIsMHgzYywweGZmLDB4ZmYsMHgxMCwweDMyLAotMHgyNSwweDgwLDB4MDIsMHgwMiwweDAwLDB4MDAsMHg3MCwweGFlLDB4MGMsMHgwMCwweDAyLDB4OTIsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDYyLDB4YWUsMHgwYywweDAwLDB4MTEsMHg5MiwweGZmLDB4MDAsMHgwMiwweDI0LDB4MGQsMHgwMCwweDIyLDB4MTIsCi0weDAwLDB4MTIsMHgxMSwweDAwLDB4MjAsMHgxMCwweDAzLDB4M2MsMHgyMSwweDEwLDB4NDMsMHgwMCwweDUyLDB4MDAsMHhhMCwweDEyLAotMHgzYywweDY0LDB4ZTIsMHhhZSwweDA0LDB4NjQsMHhmMSwweGEyLDB4NjgsMHgxNSwweGMyLDB4MjYsMHgzYywweDY0LDB4NDYsMHg4YywKLTB4YTgsMHg2NCwweDQ1LDB4OGMsMHgwNSwweDAwLDB4MDQsMHgyNCwweDIwLDB4MDAsMHgwNywweDI0LDB4MTAsMHgwMSwweDAwLDB4MGMsCi0weDEwLDB4MDAsMHhhMCwweGFmLDB4MTQsMHgwMCwweDAzLDB4OGUsMHgwNCwweDAwLDB4MDQsMHg4ZSwweDA4LDB4MDAsMHgwNSwweDhlLAotMHg0MiwweDFhLDB4MDMsMHgwMCwweGZmLDB4ZTAsMHgwMiwweDNjLDB4MWYsMHgwMCwweDg0LDB4MzAsMHgzZiwweDAwLDB4NjMsMHgzMCwKLTB4ZmYsMHhmZiwweDQyLDB4MzQsMHgyNCwweDI4LDB4YTIsMHgwMCwweDAwLDB4MjYsMHgwNCwweDAwLDB4MGMsMHgwMCwweDYzLDB4MjgsCi0weGFhLDB4ZmYsMHg2MCwweDEwLDB4MjUsMHgyOCwweGE0LDB4MDAsMHhmZiwweGRmLDB4MDIsMHgzYywweGZmLDB4ZmYsMHg0MiwweDM0LAotMHgyNCwweDEwLDB4YTIsMHgwMCwweDAwLDB4NDAsMHgwMywweDNjLDB4MjUsMHgyOCwweDQzLDB4MDAsMHg4MiwweDExLDB4MDUsMHgwMCwKLTB4MDEsMHgwMCwweDQyLDB4MzAsMHhhZCwweGZmLDB4NDAsMHgxMCwweGMwLDB4ZmYsMHgwMiwweDI0LDB4MmEsMHhiMCwweDA3LDB4M2MsCi0weDFkLDB4MDAsMHhlMiwweDM0LDB4MDQsMHgwMCwweDQzLDB4MjQsMHgwYiwweDEwLDB4NzUsMHgwMCwweDAxLDB4MDAsMHgwNCwweDI0LAotMHgwMiwweDAwLDB4MDMsMHgyNCwweDA4LDB4MDAsMHgwNSwweGFlLDB4MDAsMHgwMCwweDQ0LDB4YTAsMHgwMCwweDAwLDB4NDMsMHhhMCwKLTB4Y2EsMHg3ZCwweDg0LDB4OTYsMHgyNSwweGIwLDB4MDYsMHgzYywweDY2LDB4MDMsMHhjNSwweDM0LDB4MDEsMHgwMCwweDg0LDB4MjQsCi0weGNhLDB4N2QsMHg4NCwweGE2LDB4Y2EsMHg3ZCwweDgyLDB4OTYsMHhmZiwweDAwLDB4MDMsMHgyNCwweDAwLDB4MDAsMHhhMiwweGE0LAotMHhhZiwweGZmLDB4MjMsMHgxNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjEsMHgwMCwweGEwLDB4MTIsMHg2OCwweDE1LDB4YzIsMHgyNiwKLTB4MDQsMHg2NCwweDQzLDB4OTAsMHg0NSwweDAwLDB4ZTQsMHgzNCwweGIwLDB4MDMsMHhjNSwweDM0LDB4MDAsMHgwMCwweDgzLDB4YTAsCi0weDAwLDB4MDAsMHhhMywweGFjLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwKLTB4NjgsMHgxNSwweGM1LDB4MjYsMHhmYywweDRhLDB4YTIsMHg4YywweDM4LDB4MDAsMHhiZiwweDhmLDB4MzQsMHgwMCwweGI3LDB4OGYsCi0weDMwLDB4MDAsMHhiNiwweDhmLDB4MmMsMHgwMCwweGI1LDB4OGYsMHgyOCwweDAwLDB4YjQsMHg4ZiwweDI0LDB4MDAsMHhiMywweDhmLAotMHgyMCwweDAwLDB4YjIsMHg4ZiwweDFjLDB4MDAsMHhiMSwweDhmLDB4MTgsMHgwMCwweGIwLDB4OGYsMHgxOCwweDAwLDB4MDMsMHgzYywKLTB4MjUsMHgxMCwweDQzLDB4MDAsMHg0MSwweGIwLDB4MDQsMHgzYywweDQwLDB4MDAsMHhiZCwweDI3LDB4MDAsMHgwMCwweDgyLDB4YWMsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4ZmMsMHg0YSwweGEyLDB4YWMsMHgxYSwweDA1LDB4MDAsMHgwOCwweGY4LDB4NjMsMHhmMSwweGEyLAotMHhmOCwweDYzLDB4NDMsMHg5MCwweDQ0LDB4MDAsMHhlNCwweDM0LDB4YjAsMHgwMywweGM1LDB4MzQsMHgwMCwweDAwLDB4ODMsMHhhMCwKLTB4MDAsMHgwMCwweGEzLDB4YWMsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHg2OCwweDE1LDB4YzUsMHgyNiwweGZjLDB4NGEsMHhhMiwweDhjLDB4MzgsMHgwMCwweGJmLDB4OGYsMHgzNCwweDAwLDB4YjcsMHg4ZiwKLTB4MzAsMHgwMCwweGI2LDB4OGYsMHgyYywweDAwLDB4YjUsMHg4ZiwweDI4LDB4MDAsMHhiNCwweDhmLDB4MjQsMHgwMCwweGIzLDB4OGYsCi0weDIwLDB4MDAsMHhiMiwweDhmLDB4MWMsMHgwMCwweGIxLDB4OGYsMHgxOCwweDAwLDB4YjAsMHg4ZiwweDE4LDB4MDAsMHgwMywweDNjLAotMHgyNSwweDEwLDB4NDMsMHgwMCwweDQxLDB4YjAsMHgwNCwweDNjLDB4NDAsMHgwMCwweGJkLDB4MjcsMHgwMCwweDAwLDB4ODIsMHhhYywKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHhmYywweDRhLDB4YTIsMHhhYywweGMwLDB4ZmYsMHhiZCwweDI3LDB4MmMsMHgwMCwweGI1LDB4YWYsCi0weDM4LDB4MDAsMHhiZiwweGFmLDB4MzQsMHgwMCwweGI3LDB4YWYsMHgzMCwweDAwLDB4YjYsMHhhZiwweDI4LDB4MDAsMHhiNCwweGFmLAotMHgyNCwweDAwLDB4YjMsMHhhZiwweDIwLDB4MDAsMHhiMiwweGFmLDB4MWMsMHgwMCwweGIxLDB4YWYsMHgxOCwweDAwLDB4YjAsMHhhZiwKLTB4MDIsMHg4MCwweDA2LDB4M2MsMHg3YywweDdlLDB4YzUsMHg5MCwweDAwLDB4ODAsMHgwMywweDNjLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDE4LDB4MDMsMHg0MiwweDM0LDB4MjgsMHgxNiwweDYzLDB4MjQsMHgwMiwweDAwLDB4YTQsMHgzMCwweDAwLDB4MDAsMHg0MywweGFjLAotMHgyMSwweGE4LDB4MDAsMHgwMCwweDAzLDB4MDAsMHg4MCwweDEwLDB4ZmIsMHgwMCwweGEyLDB4MzAsMHhmZCwweDAwLDB4YTIsMHgzMCwKLTB4MDEsMHgwMCwweDE1LDB4MjQsMHg3YywweDdlLDB4YzIsMHhhMCwweDdjLDB4N2UsMHhjMywweDkwLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weGIwLDB4MDMsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YWMsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LAotMHgwMCwweDYwLDB4ODEsMHg0MCwweDAyLDB4ODAsMHgxNiwweDNjLDB4NjgsMHgxNSwweGQyLDB4MjYsMHgyMSwweDk4LDB4NDAsMHgwMCwKLTB4MDIsMHg4MCwweDE0LDB4M2MsMHhkMCwweDA1LDB4MDAsMHgwOCwweDIxLDB4YjgsMHg0MCwweDAyLDB4MDAsMHgwMCwweDAyLDB4OTYsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZmQsMHgwZiwweDQyLDB4MjgsMHg1NCwweDAwLDB4NDAsMHgxMCwweGZmLDB4ZGYsMHgwMiwweDNjLAotMHgwMCwweDIwLDB4MDIsMHgzYywweDI1LDB4MjgsMHhhMiwweDAwLDB4ODIsMHgxMSwweDA1LDB4MDAsMHgwMSwweDAwLDB4NDIsMHgzMCwKLTB4NTcsMHgwMCwweDQwLDB4MTQsMHgyYSwweGIwLDB4MDcsMHgzYywweGMwLDB4ZmYsMHgwMiwweDI0LDB4MjQsMHgxMCwweGEyLDB4MDAsCi0weDA0LDB4MDAsMHg0MiwweDM0LDB4MmEsMHhiMCwweDA3LDB4M2MsMHgwOCwweDAwLDB4MDIsMHhhZSwweDI1LDB4MDAsMHhlMiwweDM0LAotMHgwNCwweDAwLDB4NDMsMHgyNCwweDBiLDB4MTAsMHg3NSwweDAwLDB4MDEsMHgwMCwweDA0LDB4MjQsMHgwMiwweDAwLDB4MDMsMHgyNCwKLTB4MDAsMHgwMCwweDQ0LDB4YTAsMHgwMCwweDAwLDB4NDMsMHhhMCwweGNhLDB4N2QsMHg4NCwweDk2LDB4MjUsMHhiMCwweDA2LDB4M2MsCi0weDY2LDB4MDMsMHhjNSwweDM0LDB4MDEsMHgwMCwweDg0LDB4MjQsMHhjYSwweDdkLDB4ODQsMHhhNiwweGNhLDB4N2QsMHg4MiwweDk2LAotMHhmZiwweDAwLDB4MDMsMHgyNCwweDAwLDB4MDAsMHhhMiwweGE0LDB4NTMsMHgwMCwweDIzLDB4MTIsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4NDgsMHg2NCwweDQyLDB4OGUsMHhiNCwweDY0LDB4NTAsMHg4ZSwweDA2LDB4MDAsMHgwNCwweDI0LDB4MDAsMHgwMCwweDYyLDB4YWUsCi0weDRjLDB4NjQsMHg0MiwweGFlLDB4MDAsMHgwMCwweDcwLDB4YWUsMHg0ZCwweDAxLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLAotMHhiNCwweDY0LDB4NDQsMHg4ZSwweGI4LDB4NjQsMHg0MywweDhlLDB4MjAsMHgwMCwweDg0LDB4MjQsMHgzZiwweDAwLDB4NjIsMHgyNCwKLTB4MmIsMHgxMCwweDQ0LDB4MDAsMHgwYSwweDE4LDB4ODIsMHgwMCwweGI0LDB4NjQsMHg0MywweGFlLDB4YjQsMHg2NCwweGUyLDB4OGUsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYyLDB4YWUsMHgwMiwweDgwLDB4MDIsMHgzYywweGZmLDB4ZmYsMHgxMCwweDMyLAotMHgyNSwweDgwLDB4MDIsMHgwMiwweDAwLDB4MDAsMHg3MCwweGFlLDB4MGMsMHgwMCwweDAyLDB4OTIsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDYyLDB4YWUsMHgwYywweDAwLDB4MTEsMHg5MiwweGZmLDB4MDAsMHgwMiwweDI0LDB4MGQsMHgwMCwweDIyLDB4MTIsCi0weDAwLDB4MTIsMHgxMSwweDAwLDB4MjAsMHgxMCwweDAzLDB4M2MsMHgyMSwweDEwLDB4NDMsMHgwMCwweDUyLDB4MDAsMHhhMCwweDEyLAotMHg0OCwweDY0LDB4ZTIsMHhhZSwweDAwLDB4NjQsMHhmMSwweGEyLDB4NjgsMHgxNSwweGMyLDB4MjYsMHg0OCwweDY0LDB4NDYsMHg4YywKLTB4YjQsMHg2NCwweDQ1LDB4OGMsMHgwNiwweDAwLDB4MDQsMHgyNCwweDIwLDB4MDAsMHgwNywweDI0LDB4MTAsMHgwMSwweDAwLDB4MGMsCi0weDEwLDB4MDAsMHhhMCwweGFmLDB4MTQsMHgwMCwweDAzLDB4OGUsMHgwNCwweDAwLDB4MDQsMHg4ZSwweDA4LDB4MDAsMHgwNSwweDhlLAotMHg0MiwweDFhLDB4MDMsMHgwMCwweGZmLDB4ZTAsMHgwMiwweDNjLDB4MWYsMHgwMCwweDg0LDB4MzAsMHgzZiwweDAwLDB4NjMsMHgzMCwKLTB4ZmYsMHhmZiwweDQyLDB4MzQsMHgyNCwweDI4LDB4YTIsMHgwMCwweDAwLDB4MjYsMHgwNCwweDAwLDB4MGMsMHgwMCwweDYzLDB4MjgsCi0weGFhLDB4ZmYsMHg2MCwweDEwLDB4MjUsMHgyOCwweGE0LDB4MDAsMHhmZiwweGRmLDB4MDIsMHgzYywweGZmLDB4ZmYsMHg0MiwweDM0LAotMHgyNCwweDEwLDB4YTIsMHgwMCwweDAwLDB4NDAsMHgwMywweDNjLDB4MjUsMHgyOCwweDQzLDB4MDAsMHg4MiwweDExLDB4MDUsMHgwMCwKLTB4MDEsMHgwMCwweDQyLDB4MzAsMHhhZCwweGZmLDB4NDAsMHgxMCwweGMwLDB4ZmYsMHgwMiwweDI0LDB4MmEsMHhiMCwweDA3LDB4M2MsCi0weDI1LDB4MDAsMHhlMiwweDM0LDB4MDQsMHgwMCwweDQzLDB4MjQsMHgwYiwweDEwLDB4NzUsMHgwMCwweDAxLDB4MDAsMHgwNCwweDI0LAotMHgwMiwweDAwLDB4MDMsMHgyNCwweDA4LDB4MDAsMHgwNSwweGFlLDB4MDAsMHgwMCwweDQ0LDB4YTAsMHgwMCwweDAwLDB4NDMsMHhhMCwKLTB4Y2EsMHg3ZCwweDg0LDB4OTYsMHgyNSwweGIwLDB4MDYsMHgzYywweDY2LDB4MDMsMHhjNSwweDM0LDB4MDEsMHgwMCwweDg0LDB4MjQsCi0weGNhLDB4N2QsMHg4NCwweGE2LDB4Y2EsMHg3ZCwweDgyLDB4OTYsMHhmZiwweDAwLDB4MDMsMHgyNCwweDAwLDB4MDAsMHhhMiwweGE0LAotMHhhZiwweGZmLDB4MjMsMHgxNiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjEsMHgwMCwweGEwLDB4MTIsMHg2OCwweDE1LDB4YzIsMHgyNiwKLTB4MDAsMHg2NCwweDQzLDB4OTAsMHg0NywweDAwLDB4ZTQsMHgzNCwweGIwLDB4MDMsMHhjNSwweDM0LDB4MDAsMHgwMCwweDgzLDB4YTAsCi0weDAwLDB4MDAsMHhhMywweGFjLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwKLTB4NjgsMHgxNSwweGM1LDB4MjYsMHhmYywweDRhLDB4YTIsMHg4YywweDM4LDB4MDAsMHhiZiwweDhmLDB4MzQsMHgwMCwweGI3LDB4OGYsCi0weDMwLDB4MDAsMHhiNiwweDhmLDB4MmMsMHgwMCwweGI1LDB4OGYsMHgyOCwweDAwLDB4YjQsMHg4ZiwweDI0LDB4MDAsMHhiMywweDhmLAotMHgyMCwweDAwLDB4YjIsMHg4ZiwweDFjLDB4MDAsMHhiMSwweDhmLDB4MTgsMHgwMCwweGIwLDB4OGYsMHg2MCwweDAwLDB4MDMsMHgzYywKLTB4MjUsMHgxMCwweDQzLDB4MDAsMHg0MSwweGIwLDB4MDQsMHgzYywweDQwLDB4MDAsMHhiZCwweDI3LDB4MDAsMHgwMCwweDgyLDB4YWMsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4ZmMsMHg0YSwweGEyLDB4YWMsMHhmMiwweDA1LDB4MDAsMHgwOCwweGZjLDB4NjMsMHhmMSwweGEyLAotMHhmYywweDYzLDB4NDMsMHg5MCwweDQ2LDB4MDAsMHhlNCwweDM0LDB4YjAsMHgwMywweGM1LDB4MzQsMHgwMCwweDAwLDB4ODMsMHhhMCwKLTB4MDAsMHgwMCwweGEzLDB4YWMsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHg2OCwweDE1LDB4YzUsMHgyNiwweGZjLDB4NGEsMHhhMiwweDhjLDB4MzgsMHgwMCwweGJmLDB4OGYsMHgzNCwweDAwLDB4YjcsMHg4ZiwKLTB4MzAsMHgwMCwweGI2LDB4OGYsMHgyYywweDAwLDB4YjUsMHg4ZiwweDI4LDB4MDAsMHhiNCwweDhmLDB4MjQsMHgwMCwweGIzLDB4OGYsCi0weDIwLDB4MDAsMHhiMiwweDhmLDB4MWMsMHgwMCwweGIxLDB4OGYsMHgxOCwweDAwLDB4YjAsMHg4ZiwweDYwLDB4MDAsMHgwMywweDNjLAotMHgyNSwweDEwLDB4NDMsMHgwMCwweDQxLDB4YjAsMHgwNCwweDNjLDB4NDAsMHgwMCwweGJkLDB4MjcsMHgwMCwweDAwLDB4ODIsMHhhYywKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHhmYywweDRhLDB4YTIsMHhhYywweDAwLDB4ODAsMHgwMywweDNjLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDg4LDB4MTksMHg2MywweDI0LDB4MTgsMHgwMywweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhYywweDAwLDB4NjAsMHgwMSwweDQwLAotMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwKLTB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwweDAyLDB4ODAsMHgwNSwweDNjLDB4NjgsMHgxNSwweGE1LDB4MjQsCi0weDA0LDB4NGIsMHhhMiwweDhjLDB4ZmMsMHg0YSwweGE0LDB4OGMsMHgwMCwweDA4LDB4MDMsMHgzYywweDI0LDB4MTAsMHg0MywweDAwLAotMHgyNSwweDIwLDB4ODIsMHgwMCwweDQxLDB4YjAsMHgwMywweDNjLDB4MDAsMHgwMCwweDY0LDB4YWMsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4ZmMsMHg0YSwweGE0LDB4YWMsMHgyNSwweGIwLDB4MDQsMHgzYywweDAwLDB4ODAsMHgwMiwweDNjLDB4YzAsMHhmZiwweGJkLDB4MjcsCi0weDE4LDB4MDMsMHg4MywweDM0LDB4ZTQsMHgxOSwweDQyLDB4MjQsMHgzYywweDAwLDB4YmYsMHhhZiwweDM4LDB4MDAsMHhiZSwweGFmLAotMHgzNCwweDAwLDB4YjcsMHhhZiwweDMwLDB4MDAsMHhiNiwweGFmLDB4MmMsMHgwMCwweGI1LDB4YWYsMHgyOCwweDAwLDB4YjQsMHhhZiwKLTB4MjQsMHgwMCwweGIzLDB4YWYsMHgyMCwweDAwLDB4YjIsMHhhZiwweDFjLDB4MDAsMHhiMSwweGFmLDB4MTgsMHgwMCwweGIwLDB4YWYsCi0weDAwLDB4MDAsMHg2MiwweGFjLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHgwMiwweDgwLDB4MDIsMHgzYywweDJhLDB4YjAsMHgwMywweDNjLDB4NjgsMHgxNSwweDUxLDB4MjQsMHhiMCwweDAzLDB4OTMsMHgzNCwKLTB4MmMsMHgwMCwweDc3LDB4MzQsMHgwMiwweDgwLDB4MTUsMHgzYywweDAyLDB4ODAsMHgxNiwweDNjLDB4OWMsMHgwNiwweDAwLDB4MDgsCi0weDAyLDB4ODAsMHgxZSwweDNjLDB4MTQsMHg2NCwweDI2LDB4OTIsMHhlNCwweDY0LDB4MjUsMHg4ZSwweDAwLDB4MzIsMHgwNiwweDAwLAotMHgyMSwweDMwLDB4YzIsMHgwMCwweDc4LDB4NjQsMHgyNiwweGFlLDB4MTAsMHgwMSwweDAwLDB4MGMsMHgxMCwweDAwLDB4YTAsMHhhZiwKLTB4ZTQsMHg2NCwweDMwLDB4OGUsMHgwYSwweDAwLDB4MDQsMHgyNCwweDIxLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDcwLDB4YWUsCi0weDRkLDB4MDEsMHgwMCwweDBjLDB4ZmYsMHhmZiwweDEwLDB4MzIsMHgwMiwweDgwLDB4MDIsMHgzYywweDI1LDB4ODAsMHgwMiwweDAyLAotMHgwYywweDAwLDB4MDUsMHg5MiwweDAyLDB4MDAsMHgwNCwweDkyLDB4ZmYsMHgwMCwweDAyLDB4MjQsMHhmZiwweDAwLDB4YTMsMHgzMCwKLTB4MDQsMHgwMCwweDYyLDB4MTAsMHgyMSwweDgwLDB4MDQsMHgwMiwweDAwLDB4MDAsMHg2MywweGFlLDB4MDEsMHgwMCwweDEyLDB4MjQsCi0weDE0LDB4NjQsMHgyNSwweGEyLDB4ODgsMHg5NiwweGIwLDB4YWUsMHgyMSwweDI4LDB4MDAsMHgwMiwweDAyLDB4MDAsMHhhMiwweDkwLAotMHgwOCwweDAwLDB4MTAsMHgyNiwweDIxLDB4MjAsMHgwMCwweDAyLDB4ZmYsMHgwMCwweDQyLDB4MzAsMHgwMCwweDAwLDB4NjIsMHhhZSwKLTB4MDMsMHgwMCwweGEzLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDdmLDB4MDAsMHg2MywweDMwLDB4MDAsMHgwMCwweDYzLDB4YWUsCi0weDAwLDB4MDAsMHg3MiwweGFlLDB4MDMsMHgwMCwweGEyLDB4OTAsMHg4NCwweDk2LDB4YzMsMHg5MiwweDAyLDB4MDAsMHhhMiwweDkwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAsMHg0MiwweDMwLDB4MmMsMHgwMCwweDQyLDB4MjgsMHgxMSwweDAwLDB4NDAsMHgxMCwKLTB4MDgsMHgwMCwweDAyLDB4MjQsMHgwMywweDAwLDB4YTIsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4N2YsMHgwMCwweDQyLDB4MzAsCi0weDg0LDB4OTYsMHhjMiwweGEyLDB4MDIsMHgwMCwweGEzLDB4OTAsMHgwMiwweDgwLDB4MDIsMHgzYywweDc0LDB4ODQsMHg0MiwweDI0LAotMHhmZiwweDAwLDB4NjMsMHgzMCwweGMwLDB4MTgsMHgwMywweDAwLDB4MjEsMHgxOCwweDYyLDB4MDAsMHgwNCwweDAwLDB4NjIsMHg4YywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOSwweGY4LDB4NDAsMHgwMCwweDgwLDB4OTYsMHhjMiwweGFmLDB4MjEsMHhhMCwweDQwLDB4MDAsCi0weDA4LDB4MDAsMHgwMiwweDI0LDB4MGEsMHgwMCwweDA0LDB4MjQsMHgwNSwweDAwLDB4ODIsMHgxMiwweDAwLDB4MDEsMHgwNywweDI0LAotMHgwMSwweDAwLDB4MDIsMHgyNCwweDAyLDB4MDAsMHgwMywweDI0LDB4MDEsMHgwMCwweGUyLDB4YTIsMHgwMSwweDAwLDB4ZTMsMHhhMiwKLTB4YmMsMHhmZiwweDQwLDB4MTYsMHgyMCwweDEwLDB4MDIsMHgzYywweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsCi0weDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsMHhmYywweDRhLDB4MjIsMHg4ZSwweDAwLDB4MDQsMHgwMywweDNjLAotMHg0MSwweGIwLDB4MDQsMHgzYywweDI1LDB4MTAsMHg0MywweDAwLDB4MDAsMHgwMCwweDgyLDB4YWMsMHgzYywweDAwLDB4YmYsMHg4ZiwKLTB4ZmMsMHg0YSwweDIyLDB4YWUsMHgzOCwweDAwLDB4YmUsMHg4ZiwweDM0LDB4MDAsMHhiNywweDhmLDB4MzAsMHgwMCwweGI2LDB4OGYsCi0weDJjLDB4MDAsMHhiNSwweDhmLDB4MjgsMHgwMCwweGI0LDB4OGYsMHgyNCwweDAwLDB4YjMsMHg4ZiwweDIwLDB4MDAsMHhiMiwweDhmLAotMHgxYywweDAwLDB4YjEsMHg4ZiwweDE4LDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsMHg0MCwweDAwLDB4YmQsMHgyNywKLTB4YzgsMHhmZiwweGJkLDB4MjcsMHhmZiwweGZmLDB4YTgsMHgzMCwweDAyLDB4ODAsMHgwMiwweDNjLDB4MjUsMHg0MCwweDAyLDB4MDEsCi0weDMwLDB4MDAsMHhiNiwweGFmLDB4MjAsMHgwMCwweGIyLDB4YWYsMHgzNCwweDAwLDB4YmYsMHhhZiwweDJjLDB4MDAsMHhiNSwweGFmLAotMHgyOCwweDAwLDB4YjQsMHhhZiwweDI0LDB4MDAsMHhiMywweGFmLDB4MWMsMHgwMCwweGIxLDB4YWYsMHgxOCwweDAwLDB4YjAsMHhhZiwKLTB4MDAsMHgwMCwweDAzLDB4OGQsMHhmZiwweGZmLDB4ZDIsMHgzMCwweDIxLDB4YjAsMHhhMCwweDAwLDB4MDAsMHhjMCwweDAyLDB4MjQsCi0weDA4LDB4MDAsMHg0NSwweDI2LDB4MDQsMHgwMCwweDA2LDB4OGQsMHgyNCwweDE4LDB4NjIsMHgwMCwweGZmLDB4M2YsMHhhNSwweDMwLAotMHhmMCwweGZmLDB4MDIsMHgzYywweDI1LDB4MTgsMHg2NSwweDAwLDB4ZmYsMHhmZiwweDQyLDB4MzQsMHgyNCwweDE4LDB4NjIsMHgwMCwKLTB4MDAsMHg4MCwweDA1LDB4M2MsMHgyNSwweDE4LDB4NjUsMHgwMCwweGZmLDB4MDEsMHhjNiwweDM0LDB4MDAsMHgwMCwweDAzLDB4YWQsCi0weDA0LDB4MDAsMHgwNiwweGFkLDB4MjEsMHg0OCwweDgwLDB4MDAsMHhmZiwweGZmLDB4ZTcsMHgzMCwweDE4LDB4MDAsMHgxMiwweGE1LAotMHgxYSwweDAwLDB4MDcsMHhhMSwweDE4LDB4MDAsMHgwMywweDhkLDB4ZmYsMHg3ZiwweDAyLDB4M2MsMHhmZiwweGZmLDB4NDIsMHgzNCwKLTB4MjQsMHgxOCwweDYyLDB4MDAsMHgwMiwweDgwLDB4MTUsMHgzYywweDE4LDB4MDAsMHgwMywweGFkLDB4NjgsMHgxNSwweGE1LDB4MjYsCi0weGQ2LDB4NjMsMHhhMywweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4NjIsMHgyNCwweGQ2LDB4NjMsMHhhMiwweGEwLAotMHgxOCwweDAwLDB4MDQsMHg4ZCwweGZmLDB4ODAsMHgwMiwweDNjLDB4MjAsMHgwMCwweDQ1LDB4MjYsMHhmZiwweGZmLDB4NDIsMHgzNCwKLTB4N2YsMHgwMCwweDYzLDB4MzAsMHhmZiwweGZmLDB4YjIsMHgzMCwweDI0LDB4MjAsMHg4MiwweDAwLDB4MDAsMHgxZSwweDAzLDB4MDAsCi0weDI1LDB4YjAsMHgwMiwweDNjLDB4YzAsMHgwMCwweDQyLDB4MzQsMHgyNSwweDIwLDB4ODMsMHgwMCwweDA3LDB4MDAsMHg0NSwweDMyLAotMHgxOCwweDAwLDB4MDQsMHhhZCwweDAwLDB4MDAsMHg1MiwweGE0LDB4MDMsMHgwMCwweGEwLDB4MTAsMHhmZiwweGZmLDB4NDIsMHgzMiwKLTB4MDgsMHgwMCwweDQyLDB4MjYsMHhmZiwweGZmLDB4NDIsMHgzMCwweDY4LDB4MTUsMHhiNCwweDI2LDB4NTQsMHg2NSwweDg2LDB4OGUsCi0weDU4LDB4NjUsMHg5MCwweDhlLDB4ZjgsMHhmZiwweDUyLDB4MzAsMHgyMSwweDEwLDB4ZDIsMHgwMCwweDJiLDB4MTAsMHgwMiwweDAyLAotMHgzMSwweDAwLDB4NDAsMHgxMCwweGZmLDB4MDAsMHgzMywweDMxLDB4MjMsMHg4MCwweDA2LDB4MDIsMHgyMSwweDI4LDB4YzAsMHgwMiwKLTB4ZmYsMHhmZiwweDA3LDB4MzIsMHgwMSwweDAwLDB4MTEsMHgyNCwweDIxLDB4MjAsMHg2MCwweDAyLDB4MTAsMHgwMSwweDAwLDB4MGMsCi0weDEwLDB4MDAsMHhiMSwweGFmLDB4MjMsMHgxOCwweDUwLDB4MDIsMHhmZiwweGZmLDB4NzIsMHgzMCwweDIyLDB4MTAsMHgwMiwweDNjLAotMHgyMSwweDEwLDB4NDIsMHgwMiwweDIxLDB4MjAsMHg2MCwweDAyLDB4NGQsMHgwMSwweDAwLDB4MGMsMHg1NCwweDY1LDB4ODIsMHhhZSwKLTB4MjEsMHgyOCwweGQwLDB4MDIsMHgyMSwweDM4LDB4NDAsMHgwMiwweDIxLDB4MjAsMHg2MCwweDAyLDB4MTAsMHgwMCwweGIxLDB4YWYsCi0weDIyLDB4MTAsMHgwNiwweDNjLDB4MTAsMHgwMSwweDAwLDB4MGMsMHg2OCwweDE1LDB4YjEsMHgyNiwweDU0LDB4NjUsMHgyMywweDhlLAotMHgyNSwweGIwLDB4MTAsMHgzYywweGIwLDB4MDMsMHgwMiwweDM2LDB4MjEsMHgyMCwweDYwLDB4MDIsMHgwMCwweDAwLDB4NDMsMHhhYywKLTB4NGQsMHgwMSwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDU0LDB4NjUsMHgyNSwweDhlLDB4ZWMsMHgwMCwweDAyLDB4MzYsCi0weGJkLDB4MDAsMHgwNCwweDM2LDB4MDAsMHgwMCwweDQ1LDB4YWMsMHgwMCwweDAwLDB4ODMsMHg5MCwweGMyLDB4MDAsMHgxMCwweDM2LAotMHgzNCwweDAwLDB4YmYsMHg4ZiwweDEwLDB4MDAsMHg2MywweDM0LDB4MDAsMHgwMCwweDgzLDB4YTAsMHgzMCwweDAwLDB4YjYsMHg4ZiwKLTB4MDAsMHgwMCwweDA1LDB4YTYsMHgyYywweDAwLDB4YjUsMHg4ZiwweDI4LDB4MDAsMHhiNCwweDhmLDB4MjQsMHgwMCwweGIzLDB4OGYsCi0weDIwLDB4MDAsMHhiMiwweDhmLDB4MWMsMHgwMCwweGIxLDB4OGYsMHgxOCwweDAwLDB4YjAsMHg4ZiwweDAxLDB4MDAsMHgwMiwweDI0LAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDM4LDB4MDAsMHhiZCwweDI3LDB4MjEsMHgyOCwweGMwLDB4MDIsMHgyMSwweDIwLDB4NjAsMHgwMiwKLTB4MjEsMHgzOCwweDQwLDB4MDIsMHgwMSwweDAwLDB4MDIsMHgyNCwweDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGEyLDB4YWYsCi0weDU0LDB4NjUsMHg4MywweDhlLDB4NjgsMHgxNSwweGIxLDB4MjYsMHgyNSwweGIwLDB4MTAsMHgzYywweDIxLDB4MTgsMHg3MiwweDAwLAotMHg1NCwweDY1LDB4ODMsMHhhZSwweDU0LDB4NjUsMHgyMywweDhlLDB4YjAsMHgwMywweDAyLDB4MzYsMHgyMSwweDIwLDB4NjAsMHgwMiwKLTB4MDAsMHgwMCwweDQzLDB4YWMsMHg0ZCwweDAxLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4NTQsMHg2NSwweDI1LDB4OGUsCi0weGVjLDB4MDAsMHgwMiwweDM2LDB4YmQsMHgwMCwweDA0LDB4MzYsMHgwMCwweDAwLDB4NDUsMHhhYywweDAwLDB4MDAsMHg4MywweDkwLAotMHhjMiwweDAwLDB4MTAsMHgzNiwweDM0LDB4MDAsMHhiZiwweDhmLDB4MTAsMHgwMCwweDYzLDB4MzQsMHgwMCwweDAwLDB4ODMsMHhhMCwKLTB4MzAsMHgwMCwweGI2LDB4OGYsMHgwMCwweDAwLDB4MDUsMHhhNiwweDJjLDB4MDAsMHhiNSwweDhmLDB4MjgsMHgwMCwweGI0LDB4OGYsCi0weDI0LDB4MDAsMHhiMywweDhmLDB4MjAsMHgwMCwweGIyLDB4OGYsMHgxYywweDAwLDB4YjEsMHg4ZiwweDE4LDB4MDAsMHhiMCwweDhmLAotMHgwMSwweDAwLDB4MDIsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MzgsMHgwMCwweGJkLDB4MjcsMHhlMCwweGZmLDB4YmQsMHgyNywKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHgxNCwweDAwLDB4YjEsMHhhZiwweDE4LDB4MDAsMHhiZiwweGFmLDB4MTAsMHgwMCwweGIwLDB4YWYsCi0weGJmLDB4MDAsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4OTAsMHgyMSwweDI4LDB4MDAsMHgwMCwweDA4LDB4MDAsMHgwNiwweDI0LAotMHgwNCwweDAwLDB4NjMsMHgyYywweDEyLDB4MDAsMHg2MCwweDE0LDB4MjEsMHg4OCwweDgwLDB4MDAsMHgwMCwweDYwLDB4MDIsMHg0MCwKLTB4MDEsMHgwMCwweDQxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MDIsMHg4MCwweDAzLDB4M2MsCi0weDAwLDB4N2IsMHg2MywweDI0LDB4MDQsMHgwMCwweDY0LDB4OGMsMHgwMCwweDAwLDB4MjMsMHhhZSwweDA0LDB4MDAsMHg3MSwweGFjLAotMHgwMCwweDAwLDB4OTEsMHhhYywweDA0LDB4MDAsMHgyNCwweGFlLDB4MDAsMHg2MCwweDgyLDB4NDAsMHgxOCwweDAwLDB4YmYsMHg4ZiwKLTB4MTQsMHgwMCwweGIxLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjAsMHgwMCwweGJkLDB4MjcsCi0weDA4LDB4MDAsMHg4MiwweDk0LDB4MDIsMHg4MCwweDA0LDB4M2MsMHg5NywweDQ1LDB4MDAsMHgwYywweDI1LDB4MjAsMHg0NCwweDAwLAotMHgwMCwweDYwLDB4MTAsMHg0MCwweDAxLDB4MDAsMHgwMSwweDM2LDB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwKLTB4MDgsMHgwMCwweDI1LDB4OGUsMHgwYywweDAwLDB4MjYsMHg5NiwweDE0LDB4MDAsMHgyNywweDk2LDB4ZjAsMHgwNiwweDAwLDB4MGMsCi0weDA5LDB4MDAsMHgwNCwweDI0LDB4MDQsMHgwMCwweDIzLDB4OGUsMHgwMCwweDAwLDB4MjIsMHg4ZSwweDIxLDB4MjAsMHgyMCwweDAyLAotMHgwMCwweDAwLDB4NjIsMHhhYywweDA0LDB4MDAsMHg0MywweGFjLDB4MDAsMHgwMCwweDMxLDB4YWUsMHhiZCwweDRlLDB4MDAsMHgwYywKLTB4MDQsMHgwMCwweDMxLDB4YWUsMHgwMCwweDYwLDB4OTAsMHg0MCwweDE4LDB4MDAsMHhiZiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsCi0weDEwLDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMCwweDAwLDB4YmQsMHgyNywweDAyLDB4ODAsMHgwMiwweDNjLAotMHg2OCwweDE1LDB4NDcsMHgyNCwweDhjLDB4NjQsMHhlMywweDkwLDB4ZmYsMHhmZiwweGE1LDB4MzAsMHgwOSwweDAwLDB4YTMsMHgxMCwKLTB4MjEsMHgyMCwweGMwLDB4MDAsMHhmYywweDY0LDB4ZTIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGMyLDB4YWMsCi0weDA2LDB4NjUsMHhlMywweDk0LDB4MGUsMHgwMCwweDAyLDB4MjQsMHgxNCwweDAwLDB4YzIsMHhhYywweDhiLDB4MDcsMHgwMCwweDA4LAotMHgwYywweDAwLDB4YzMsMHhhYywweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDMsMHgzYywKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHhkMCwweGZmLDB4YmQsMHgyNywweDRjLDB4MWYsMHg2MywweDI0LDB4MTgsMHgwMywweDQyLDB4MzQsCi0weDI4LDB4MDAsMHhiZiwweGFmLDB4MjQsMHgwMCwweGIzLDB4YWYsMHgyMCwweDAwLDB4YjIsMHhhZiwweDFjLDB4MDAsMHhiMSwweGFmLAotMHgxOCwweDAwLDB4YjAsMHhhZiwweDAwLDB4MDAsMHg0MywweGFjLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwKLTB4MDAsMHg2MCwweDgxLDB4NDAsMHgyYSwweGIwLDB4MDIsMHgzYywweDM2LDB4MDAsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4OTAsCi0weDAyLDB4ODAsMHgxMywweDNjLDB4NjgsMHgxNSwweDY2LDB4MjYsMHhjMCwweDE4LDB4MDMsMHgwMCwweDVjLDB4NjUsMHhjNSwweDhjLAotMHgyMywweGIwLDB4MDQsMHgzYywweGYwLDB4MDcsMHg2MywweDMwLDB4ZmYsMHgxZiwweDAyLDB4M2MsMHgyMSwweDE4LDB4NjQsMHgwMCwKLTB4ZmYsMHhmZiwweDQyLDB4MzQsMHgyNCwweDIwLDB4NjIsMHgwMCwweDIzLDB4ODgsMHg4NSwweDAwLDB4MmIsMHgzOCwweDg1LDB4MDAsCi0weDAwLDB4MDQsMHgyMiwweDI2LDB4MDAsMHg2NSwweGMzLDB4OGMsMHgwYiwweDg4LDB4NDcsMHgwMCwweDAxLDB4MDQsMHgyNSwweDJlLAotMHhmYywweDY0LDB4YzMsMHhhYywweDYwLDB4NjUsMHhjNCwweGFjLDB4MDYsMHg2NSwweGMwLDB4YTQsMHgxMSwweDAwLDB4YTAsMHgxNCwKLTB4MDUsMHg2NSwweGMwLDB4YTAsMHgwMCwweGZjLDB4ODMsMHgyNCwweDIzLDB4MTAsMHgwMiwweDNjLDB4MGIsMHgxOCwweDg3LDB4MDAsCi0weGZmLDB4MDMsMHg0MiwweDM0LDB4MmIsMHgxMCwweDQzLDB4MDAsMHgzMywweDAwLDB4NDAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyMywweDg4LDB4ODMsMHgwMCwweDJiLDB4MTAsMHg4MywweDAwLDB4NWMsMHg2NSwweGMzLDB4YWMsMHgwMywweDAwLDB4NDAsMHgxMCwKLTB4MDEsMHgwNCwweDI1LDB4MmUsMHgwMCwweDA0LDB4MzEsMHgyNiwweDAxLDB4MDQsMHgyNSwweDJlLDB4MGUsMHgwMCwweGEwLDB4MTAsCi0weDY4LDB4MTUsMHg3MCwweDI2LDB4NjgsMHgxNSwweDcwLDB4MjYsMHg2MCwweDY1LDB4MDMsMHg4ZSwweDVjLDB4NjUsMHgwNCwweDhlLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDJiLDB4MTAsMHg4MywweDAwLDB4MjUsMHgwMCwweDQwLDB4MTQsMHgyYiwweDEwLDB4NjQsMHgwMCwKLTB4NTEsMHgwMCwweDQwLDB4MTQsMHgyNSwweGIwLDB4MDIsMHgzYywweDgwLDB4MDAsMHgwMywweDI0LDB4ZDAsMHgwMywweDQyLDB4MzQsCi0weDAwLDB4MDAsMHg0MywweGFjLDB4NjgsMHgxNSwweDcwLDB4MjYsMHg1YywweDY1LDB4MDMsMHg5NiwweDJhLDB4YjAsMHgwMiwweDNjLAotMHgzNSwweDAwLDB4NDIsMHgzNCwweGMyLDB4ODgsMHgwMywweDAwLDB4MDAsMHgwMCwweDUxLDB4YTAsMHg4ZiwweDEwLDB4MDAsMHgwYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNiwweDY1LDB4MDMsMHg5NiwweDI1LDB4YjAsMHgwMiwweDNjLDB4YjAsMHgwMywweDQyLDB4MzQsCi0weDAwLDB4MDAsMHg0MywweGFjLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LAotMHgwMCwweDYwLDB4ODEsMHg0MCwweGZjLDB4NGEsMHgwMiwweDhlLDB4ODAsMHgwMCwweDAzLDB4M2MsMHg0MSwweGIwLDB4MDQsMHgzYywKLTB4MjUsMHgxMCwweDQzLDB4MDAsMHgwMCwweDAwLDB4ODIsMHhhYywweDI4LDB4MDAsMHhiZiwweDhmLDB4ZmMsMHg0YSwweDAyLDB4YWUsCi0weDI0LDB4MDAsMHhiMywweDhmLDB4MjAsMHgwMCwweGIyLDB4OGYsMHgxYywweDAwLDB4YjEsMHg4ZiwweDE4LDB4MDAsMHhiMCwweDhmLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDMwLDB4MDAsMHhiZCwweDI3LDB4MDAsMHgwOCwweDAwLDB4MDgsMHgwMCwweGZjLDB4NjMsMHgyNCwKLTB4ZmMsMHg2NCwweDA1LDB4OGUsMHgyMSwweDMwLDB4ODAsMHgwMCwweGZmLDB4ZmYsMHgyNywweDMyLDB4MDksMHgwMCwweDA0LDB4MjQsCi0weDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGEwLDB4YWYsMHhmYywweDY0LDB4MDMsMHg4ZSwweDA2LDB4NjUsMHgwNSwweDk2LAotMHg1YywweDY1LDB4MDIsMHg4ZSwweDIxLDB4MTgsMHg3MSwweDAwLDB4MjEsMHgyOCwweDI1LDB4MDIsMHgyMSwweDEwLDB4NTEsMHgwMCwKLTB4MDksMHgwMCwweDA0LDB4MjQsMHg1YywweDY1LDB4MDIsMHhhZSwweGZjLDB4NjQsMHgwMywweGFlLDB4NGQsMHgwMSwweDAwLDB4MGMsCi0weDA2LDB4NjUsMHgwNSwweGE2LDB4NjgsMHgxNSwweDcwLDB4MjYsMHg1YywweDY1LDB4MDMsMHg5NiwweDJhLDB4YjAsMHgwMiwweDNjLAotMHgzNSwweDAwLDB4NDIsMHgzNCwweGMyLDB4ODgsMHgwMywweDAwLDB4MDAsMHgwMCwweDUxLDB4YTAsMHg4ZiwweDEwLDB4MDAsMHgwYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNiwweDY1LDB4MDMsMHg5NiwweDI1LDB4YjAsMHgwMiwweDNjLDB4YjAsMHgwMywweDQyLDB4MzQsCi0weDAwLDB4MDAsMHg0MywweGFjLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LAotMHgwMCwweDYwLDB4ODEsMHg0MCwweGZjLDB4NGEsMHgwMiwweDhlLDB4ODAsMHgwMCwweDAzLDB4M2MsMHg0MSwweGIwLDB4MDQsMHgzYywKLTB4MjUsMHgxMCwweDQzLDB4MDAsMHgwMCwweDAwLDB4ODIsMHhhYywweDI4LDB4MDAsMHhiZiwweDhmLDB4ZmMsMHg0YSwweDAyLDB4YWUsCi0weDI0LDB4MDAsMHhiMywweDhmLDB4MjAsMHgwMCwweGIyLDB4OGYsMHgxYywweDAwLDB4YjEsMHg4ZiwweDE4LDB4MDAsMHhiMCwweDhmLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDMwLDB4MDAsMHhiZCwweDI3LDB4NjQsMHg2NSwweDAyLDB4OGUsMHhmYywweDY0LDB4MDUsMHg4ZSwKLTB4MjEsMHgzMCwweDgwLDB4MDAsMHgyMywweDg4LDB4NDQsMHgwMCwweGZmLDB4ZmYsMHgyNywweDMyLDB4MDksMHgwMCwweDA0LDB4MjQsCi0weDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGEwLDB4YWYsMHhmYywweDY0LDB4MDMsMHg4ZSwweDA2LDB4NjUsMHgwMiwweDk2LAotMHg2MCwweDY1LDB4MTIsMHg5NiwweDIxLDB4MTgsMHg3MSwweDAwLDB4MjEsMHgxMCwweDIyLDB4MDIsMHgyMywweDEwLDB4MTEsMHgzYywKLTB4ZmMsMHg2NCwweDAzLDB4YWUsMHgwNiwweDY1LDB4MDIsMHhhNiwweDA2LDB4MDAsMHg0MCwweDE2LDB4NWMsMHg2NSwweDExLDB4YWUsCi0weDA5LDB4MDAsMHgwNCwweDI0LDB4NGQsMHgwMSwweDAwLDB4MGMsMHg2OCwweDE1LDB4NzAsMHgyNiwweDQ2LDB4MDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDRkLDB4MDEsMHgwMCwweDBjLDB4MDksMHgwMCwweDA0LDB4MjQsMHhmYywweDY0LDB4MDUsMHg4ZSwKLTB4MDksMHgwMCwweDA0LDB4MjQsMHgyMywweDEwLDB4MDYsMHgzYywweDIxLDB4MzgsMHg0MCwweDAyLDB4MTAsMHgwMSwweDAwLDB4MGMsCi0weDEwLDB4MDAsMHhhMCwweGFmLDB4ZmMsMHg2NCwweDAzLDB4OGUsMHgwNiwweDY1LDB4MDIsMHg5NiwweDIxLDB4MjAsMHg1MSwweDAyLAotMHgyMSwweDE4LDB4NzIsMHgwMCwweDIxLDB4MTAsMHg0MiwweDAyLDB4NWMsMHg2NSwweDA0LDB4YWUsMHgwOSwweDAwLDB4MDQsMHgyNCwKLTB4ZmMsMHg2NCwweDAzLDB4YWUsMHg3NSwweDA4LDB4MDAsMHgwOCwweDA2LDB4NjUsMHgwMiwweGE2LDB4MDIsMHg4MCwweDA5LDB4M2MsCi0weDY4LDB4MTUsMHgyOCwweDI1LDB4ZGMsMHg2MywweDA2LDB4OGQsMHhmZiwweGZmLDB4MDIsMHgzNCwweDNmLDB4MDAsMHhjMiwweDEwLAotMHgyMSwweDM4LDB4ODAsMHgwMCwweDJiLDB4MTAsMHhjNywweDAwLDB4MzAsMHgwMCwweDQwLDB4MTAsMHgwMiwweDE5LDB4MDYsMHgwMCwKLTB4MjEsMHgxMCwweGM3LDB4MDAsMHgyMywweDEwLDB4NDMsMHgwMCwweDEwLDB4MDAsMHg0NiwweDI0LDB4ZGMsMHg2MywweDA2LDB4YWQsCi0weDY4LDB4MTUsMHgyNiwweDI1LDB4MDQsMHg0MCwweGM0LDB4OGMsMHhlMCwweDYzLDB4MDIsMHhhZCwweGZmLDB4ZmYsMHgwMiwweDM0LAotMHgyZiwweDAwLDB4ODIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmIsMHgxMCwweDg3LDB4MDAsMHgxZiwweDAwLDB4NDAsMHgxMCwKLTB4MDIsMHgxOSwweDA0LDB4MDAsMHgyMSwweDEwLDB4ODcsMHgwMCwweDIzLDB4MTAsMHg0MywweDAwLDB4MTAsMHgwMCwweDQ0LDB4MjQsCi0weDA0LDB4NDAsMHhjNCwweGFjLDB4ZTAsMHg2MywweGMyLDB4YWMsMHhjMCwweDEwLDB4MDUsMHgwMCwweDIxLDB4MTAsMHg0NSwweDAwLAotMHg4MCwweDEwLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg0NSwweDAwLDB4NjgsMHgxNSwweDIzLDB4MjUsMHg4MCwweDEwLDB4MDIsMHgwMCwKLTB4MjEsMHgyOCwweDQzLDB4MDAsMHg2OCwweDUxLDB4YTYsMHg4YywweDAwLDB4MjEsMHgwNywweDAwLDB4ZmYsMHhmZiwweGMyLDB4MzgsCi0weDBhLDB4MzAsMHg4MiwweDAwLDB4MmIsMHgxOCwweGM3LDB4MDAsMHgwNywweDAwLDB4NjAsMHgxMCwweDIxLDB4MTAsMHhjNywweDAwLAotMHgwMiwweDE5LDB4MDYsMHgwMCwweDIzLDB4MTAsMHg0MywweDAwLDB4MTAsMHgwMCwweDQ2LDB4MjQsMHg2OCwweDUxLDB4YTYsMHhhYywKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHg2YywweDUxLDB4YTIsMHhhYywweDAyLDB4MTksMHgwNiwweDAwLDB4MjMsMHgxMCwweDQzLDB4MDAsCi0weDY4LDB4NTEsMHhhMiwweGFjLDB4MDgsMHgwMCwweGUwLDB4MDMsMHg2YywweDUxLDB4YTIsMHhhYywweDIxLDB4MTAsMHg4NywweDAwLAotMHgyMywweDEwLDB4NDMsMHgwMCwweGE1LDB4MDgsMHgwMCwweDA4LDB4MDQsMHg0MCwweGMyLDB4YWMsMHgyMSwweDEwLDB4YzcsMHgwMCwKLTB4NjgsMHgxNSwweDI2LDB4MjUsMHgwNCwweDQwLDB4YzQsMHg4YywweDIzLDB4MTAsMHg0MywweDAwLDB4ZGMsMHg2MywweDAyLDB4YWQsCi0weGUwLDB4NjMsMHgwMiwweGFkLDB4ZmYsMHhmZiwweDAyLDB4MzQsMHhkNCwweGZmLDB4ODIsMHgxNCwweDJiLDB4MTAsMHg4NywweDAwLAotMHgwMCwweDIxLDB4MDcsMHgwMCwweDllLDB4MDgsMHgwMCwweDA4LDB4MDQsMHg0MCwweGM0LDB4YWMsMHgwMCwweDMxLDB4MDQsMHgwMCwKLTB4OTEsMHgwOCwweDAwLDB4MDgsMHhkYywweDYzLDB4MDYsMHhhZCwweDYzLDB4MDAsMHg4MiwweDI0LDB4NzcsMHgwMCwweDQyLDB4MmMsCi0weDAwLDB4MDAsMHg4NSwweDI4LDB4MDQsMHgwMCwweDQwLDB4MTAsMHgyMSwweDE4LDB4MDAsMHgwMCwweDY0LDB4MDAsMHg4MiwweDI0LAotMHg2NCwweDAwLDB4MDMsMHgyNCwweDBiLDB4MTgsMHg0NSwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4NjAsMHgwMCwKLTB4MGMsMHgwMCwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNmLDB4MDAsMHg0MiwweDMwLDB4MDQsMHgwMCwweDQyLDB4MjgsCi0weDE3LDB4MDAsMHg0MCwweDEwLDB4MjUsMHhiMCwweDAyLDB4M2MsMHgyNCwweDA4LDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweDhjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg2MywweDMwLDB4MTYsMHgwMCwweDYwLDB4MTQsMHgwMSwweDAwLDB4MDIsMHgyNCwKLTB4MDUsMHgwMCwweGEzLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgyLDB4MjEsMHgwMywweDAwLDB4MjgsMHgwMCwweDgyLDB4MTAsCi0weGY1LDB4ZmYsMHgwMiwweDI0LDB4MDIsMHgwMCwweDgyLDB4MjgsMHgzOSwweDAwLDB4NDAsMHgxNCwweDAyLDB4MDAsMHgwMiwweDI0LAotMHgyZSwweDAwLDB4ODIsMHgxMCwweGU5LDB4ZmYsMHgwMiwweDI0LDB4MDMsMHgwMCwweDAyLDB4MjQsMHgyNCwweDAwLDB4ODIsMHgxMCwKLTB4M2UsMHgwMCwweDYzLDB4MzAsMHgwNSwweDAwLDB4YzQsMHgyNCwweGQyLDB4MDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA0LDB4MDAsMHhhNCwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MiwweDIwLDB4MDQsMHgwMCwweGQyLDB4MDgsMHgwMCwweDA4LAotMHg5NiwweGZmLDB4ODQsMHgyNCwweDA1LDB4MDAsMHhhMywweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MCwweDAwLDB4NjQsMHgzMCwKLTB4NDIsMHgyMSwweDA0LDB4MDAsMHgwZSwweDAwLDB4ODIsMHgxMCwweDFmLDB4MDAsMHg2MiwweDMwLDB4MDIsMHgwMCwweDgyLDB4MjgsCi0weDFkLDB4MDAsMHg0MCwweDE0LDB4MDIsMHgwMCwweDAyLDB4MjQsMHgxNCwweDAwLDB4ODIsMHgxMCwweDFmLDB4MDAsMHg2MiwweDMwLAotMHgwMywweDAwLDB4MDIsMHgyNCwweGViLDB4ZmYsMHg4MiwweDE0LDB4MWYsMHgwMCwweDYyLDB4MzAsMHg0MCwweDEwLDB4MDIsMHgwMCwKLTB4ZGQsMHhmZiwweDAzLDB4MjQsMHgyMywweDMwLDB4NjIsMHgwMCwweGY2LDB4MDgsMHgwMCwweDA4LDB4MDUsMHgwMCwweGM0LDB4MjQsCi0weDQwLDB4MTAsMHgwMiwweDAwLDB4ZjUsMHhmZiwweDAzLDB4MjQsMHgwZSwweDA5LDB4MDAsMHgwOCwweDIzLDB4MzAsMHg2MiwweDAwLAotMHgzZSwweDAwLDB4NjMsMHgzMCwweDIzLDB4MzAsMHg0MywweDAwLDB4ZjYsMHgwOCwweDAwLDB4MDgsMHgwNSwweDAwLDB4YzQsMHgyNCwKLTB4ZGQsMHhmZiwweDAyLDB4MjQsMHgxNiwweDA5LDB4MDAsMHgwOCwweDIzLDB4MzAsMHg0MywweDAwLDB4NDAsMHgxMCwweDAyLDB4MDAsCi0weGU5LDB4ZmYsMHgwMywweDI0LDB4MGUsMHgwOSwweDAwLDB4MDgsMHgyMywweDMwLDB4NjIsMHgwMCwweDNlLDB4MDAsMHg2MywweDMwLAotMHgxNiwweDA5LDB4MDAsMHgwOCwweDIzLDB4MzAsMHg0MywweDAwLDB4ZDIsMHhmZiwweDgwLDB4MTQsMHgxZiwweDAwLDB4NjIsMHgzMCwKLTB4NDAsMHgxMCwweDAyLDB4MDAsMHhmOCwweGZmLDB4MDMsMHgyNCwweDBlLDB4MDksMHgwMCwweDA4LDB4MjMsMHgzMCwweDYyLDB4MDAsCi0weGNjLDB4ZmYsMHg4MCwweDE0LDB4M2UsMHgwMCwweDYzLDB4MzAsMHhmOCwweGZmLDB4MDIsMHgyNCwweDE2LDB4MDksMHgwMCwweDA4LAotMHgyMywweDMwLDB4NDMsMHgwMCwweGEwLDB4ZmYsMHhiZCwweDI3LDB4MDIsMHg4MCwweDAyLDB4M2MsMHg0YywweDAwLDB4YjUsMHhhZiwKLTB4NWMsMHgwMCwweGJmLDB4YWYsMHg1OCwweDAwLDB4YmUsMHhhZiwweDU0LDB4MDAsMHhiNywweGFmLDB4NTAsMHgwMCwweGI2LDB4YWYsCi0weDQ4LDB4MDAsMHhiNCwweGFmLDB4NDQsMHgwMCwweGIzLDB4YWYsMHg0MCwweDAwLDB4YjIsMHhhZiwweDNjLDB4MDAsMHhiMSwweGFmLAotMHgzOCwweDAwLDB4YjAsMHhhZiwweDY4LDB4MTUsMHg1NSwweDI0LDB4MjUsMHhiMCwweDAzLDB4M2MsMHgwNCwweDAxLDB4NjIsMHgzNCwKLTB4MDAsMHgwMCwweDQzLDB4OGMsMHg0NCwweDY1LDB4YTcsMHg4ZSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MzMsMHgwMCwweGUzLDB4MTAsCi0weDQ4LDB4NjUsMHhhMywweGFlLDB4MmIsMHgxMCwweDY3LDB4MDAsMHhhOCwweDAwLDB4NDAsMHgxNCwweDJiLDB4MTAsMHhlMywweDAwLAotMHhkMSwweDAwLDB4NDAsMHgxNCwweDAyLDB4ODAsMHgwMiwweDNjLDB4NjgsMHgxNSwweDQ0LDB4MjQsMHgxOCwweDY1LDB4ODMsMHg5NCwKLTB4MDIsMHg4MCwweDAyLDB4M2MsMHgyMSwweDg4LDB4MDAsMHgwMCwweDE5LDB4MDAsMHg0MCwweDFhLDB4MjUsMHg5OCwweDYyLDB4MDAsCi0weDIxLDB4YjgsMHg4MCwweDAwLDB4MjEsMHhiMCwweDgwLDB4MDAsMHgwMSwweDAwLDB4MTQsMHgyNCwweDIxLDB4MjAsMHgwMCwweDAwLAotMHgyMSwweDgwLDB4OTMsMHgwMCwweDAwLDB4MDAsMHgwNSwweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNywweDAwLDB4YTAsMHgxMCwKLTB4MDEsMHgwMCwweDIyLDB4MjYsMHgwNCwweDAwLDB4MDIsMHg4ZSwweDAwLDB4ZjAsMHgwMywweDNjLDB4MDAsMHgyMCwweDA0LDB4M2MsCi0weDI0LDB4MTAsMHg0MywweDAwLDB4MWUsMHgwMCwweDQ0LDB4MTAsMHgwNiwweDAwLDB4MjIsMHgyNiwweGZmLDB4ZmYsMHg1MSwweDMwLAotMHg4MiwweDE2LDB4MDUsMHgwMCwweDAxLDB4MDAsMHg0MiwweDMwLDB4MzQsMHgwMCwweDU0LDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ODAsMHgyMCwweDExLDB4MDAsMHgyYSwweDEwLDB4OTIsMHgwMCwweGVkLDB4ZmYsMHg0MCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGJkLDB4NGUsMHgwMCwweDBjLDB4MjEsMHgyMCwweGMwLDB4MDMsMHgwMiwweDgwLDB4MDIsMHgzYywweDA4LDB4MDQsMHg0NCwweDI0LAotMHgyMSwweDI4LDB4MDAsMHgwMCwweDIxLDB4MzAsMHgwMCwweDAwLDB4MzEsMHgxYywweDAwLDB4MGMsMHgyMSwweDM4LDB4MDAsMHgwMCwKLTB4MjUsMHhiMCwweDAzLDB4M2MsMHgwNCwweDAxLDB4NjIsMHgzNCwweDAwLDB4MDAsMHg0MywweDhjLDB4NDQsMHg2NSwweGE3LDB4OGUsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4Y2YsMHhmZiwweGUzLDB4MTQsMHg0OCwweDY1LDB4YTMsMHhhZSwweDI1LDB4YjAsMHgwMywweDNjLAotMHgwMCwweDAxLDB4NjIsMHgzNCwweDAwLDB4MDAsMHg0NywweGFjLDB4NjYsMHgwOSwweDAwLDB4MDgsMHg0NCwweDY1LDB4YTcsMHhhZSwKLTB4YjAsMHg0YywweGUyLDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg0MiwweDI0LDB4YjAsMHg0YywweGUyLDB4YWUsCi0weDBjLDB4MDAsMHgwNCwweDhlLDB4MGMsMHgwMCwweDAyLDB4MjQsMHgzZiwweDAwLDB4ODMsMHgzMCwweDY0LDB4MDAsMHg2MiwweDEwLAotMHgyMSwweDI4LDB4ZTAsMHgwMiwweDNmLDB4MDAsMHg4MywweDMwLDB4MGQsMHgwMCwweDAyLDB4MjQsMHg1OSwweDAwLDB4NjIsMHgxMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzZiwweDAwLDB4ODMsMHgzMCwweDBlLDB4MDAsMHgwMiwweDI0LDB4MDQsMHgwMCwweDYyLDB4MTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4OGUsMHg1YiwweDA5LDB4MDAsMHgwOCwweDA2LDB4MDAsMHgyMiwweDI2LAotMHhiYywweDRjLDB4ZTIsMHg4ZSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDQyLDB4MjQsMHhiYywweDRjLDB4ZTIsMHhhZSwKLTB4MDAsMHgwMCwweDA1LDB4OGUsMHg1YiwweDA5LDB4MDAsMHgwOCwweDA2LDB4MDAsMHgyMiwweDI2LDB4MDAsMHg0MCwweGMyLDB4OGUsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgxMiwweDAyLDB4MDAsMHgwZiwweDAwLDB4NDIsMHgzMCwweDA1LDB4MDAsMHg1NCwweDEwLAotMHhjMiwweDEzLDB4MDUsMHgwMCwweDFlLDB4MDAsMHg0MiwweDMwLDB4MjEsMHgxMCwweDUxLDB4MDAsMHg2MCwweDA5LDB4MDAsMHgwOCwKLTB4ZmYsMHhmZiwweDUxLDB4MzAsMHgwMiwweDQwLDB4YzIsMHg5MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MWUsMHgwMCwweDQwLDB4MTQsCi0weDAyLDB4ODAsMHgwMywweDNjLDB4MDQsMHgwMCwweDAzLDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MTQsMHgwMywweDAwLAotMHgwZiwweDAwLDB4NDIsMHgzMCwweDE3LDB4MDAsMHg0MCwweDE0LDB4MDIsMHgxNywweDAzLDB4MDAsMHgwMywweDAwLDB4NDQsMHgzMCwKLTB4MDgsMHgwMCwweDgwLDB4MTAsMHgwMCwweGMwLDB4MDIsMHgzYywweDI0LDB4MTAsMHg2MiwweDAwLDB4MTEsMHgwMCwweDQwLDB4MTQsCi0weDAzLDB4MDAsMHgwMiwweDI0LDB4MTAsMHgwMCwweDgyLDB4MTAsMHgwMiwweDgwLDB4MDMsMHgzYywweDBmLDB4MDAsMHg4MCwweDEwLAotMHg2OCwweDE1LDB4NjMsMHgyNCwweDgwLDB4MTAsMHgxMSwweDAwLDB4MjEsMHgyOCwweDUzLDB4MDAsMHhlYywweGZmLDB4YTMsMHg4YywKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHhkNCwweDAyLDB4NDIsMHgzNCwweDIxLDB4MjAsMHgwMCwweDAyLDB4MDAsMHgwMCwweDQzLDB4YWMsCi0weGRjLDB4MDgsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMSwweDIwLDB4NDAsMHgwMCwweDhiLDB4MDgsMHgwMCwweDBjLAotMHgyMSwweDI4LDB4MDAsMHgwMCwweDAyLDB4ODAsMHgwMywweDNjLDB4NjgsMHgxNSwweDYzLDB4MjQsMHgwMiwweDQwLDB4NjIsMHg5MCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg4NSwweDAwLDB4NTQsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDA0LDB4M2MsCi0weDY4LDB4MTUsMHg4NCwweDI0LDB4MDIsMHg0MCwweDgzLDB4OTAsMHgwMiwweDAwLDB4MDIsMHgyNCwweDY4LDB4MDAsMHg2MiwweDEwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI1LDB4YjAsMHgwMywweDNjLDB4NGMsMHgwMCwweDYzLDB4MzQsMHgwMCwweDAwLDB4NjIsMHg5MCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywweDAwLDB4NDIsMHgzMCwweDA4LDB4MDAsMHg1NCwweDEwLDB4MDIsMHg4MCwweDA0LDB4M2MsCi0weDAwLDB4MDAsMHgwNSwweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMiwweDEzLDB4MDUsMHgwMCwweDFlLDB4MDAsMHg0MiwweDMwLAotMHgyMSwweDEwLDB4NTEsMHgwMCwweDYwLDB4MDksMHgwMCwweDA4LDB4ZmYsMHhmZiwweDUxLDB4MzAsMHhkMCwweDAyLDB4MDIsMHgyNCwKLTB4NjgsMHgxNSwweDg0LDB4MjQsMHhkYywweDYzLDB4ODIsMHhhYywweDAwLDB4MDAsMHgwNSwweDhlLDB4ZDMsMHgwOSwweDAwLDB4MDgsCi0weGMyLDB4MTMsMHgwNSwweDAwLDB4YjgsMHg0YywweGEyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg0MiwweDI0LAotMHhiOCwweDRjLDB4YTIsMHhhYywweDBjLDB4MDAsMHgwNCwweDhlLDB4ODYsMHgwOSwweDAwLDB4MDgsMHgzZiwweDAwLDB4ODMsMHgzMCwKLTB4YjQsMHg0YywweGUyLDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg0MiwweDI0LDB4YjQsMHg0YywweGUyLDB4YWUsCi0weDBjLDB4MDAsMHgwNCwweDhlLDB4ODIsMHgwOSwweDAwLDB4MDgsMHgzZiwweDAwLDB4ODMsMHgzMCwweDRjLDB4NjUsMHhhMiwweDhlLAotMHhmZiwweGZmLDB4NzEsMHgzMCwweDIzLDB4MTAsMHg0NywweDAwLDB4ZmYsMHhmZiwweDUwLDB4MzAsMHgyMSwweDE4LDB4MTEsMHgwMiwKLTB4ZmYsMHhmZiwweDcyLDB4MzAsMHhhMSwweDRlLDB4MDAsMHgwYywweDIxLDB4MjAsMHg0MCwweDAyLDB4NzYsMHgwMCwweDQwLDB4MTAsCi0weDIxLDB4ZjAsMHg0MCwweDAwLDB4MDgsMHgwMCwweDQyLDB4OGMsMHg0NCwweDY1LDB4YTYsMHg4ZSwweDIxLDB4MzgsMHgwMCwweDAyLAotMHgyMSwweDE4LDB4NTIsMHgwMCwweDIxLDB4MjgsMHg0MCwweDAwLDB4MDgsMHgwMCwweDA0LDB4MjQsMHgxNCwweDY1LDB4YTMsMHhhZSwKLTB4MTgsMHg2NSwweGEyLDB4YWUsMHgxMCwweDAxLDB4MDAsMHgwYywweDEwLDB4MDAsMHhhMCwweGFmLDB4NGQsMHgwMSwweDAwLDB4MGMsCi0weDA4LDB4MDAsMHgwNCwweDI0LDB4MTgsMHg2NSwweGE1LDB4OGUsMHgyNSwweGIwLDB4MDMsMHgzYywweDI0LDB4MTAsMHgwMiwweDNjLAotMHgyMSwweDI4LDB4YjAsMHgwMCwweDAwLDB4MDEsMHg3MCwweDM0LDB4MDAsMHgwMCwweDAyLDB4YWUsMHgyMSwweDM4LDB4MjAsMHgwMiwKLTB4MDgsMHgwMCwweDA0LDB4MjQsMHgyNCwweDEwLDB4MDYsMHgzYywweDQ0LDB4NjUsMHhhMiwweGFlLDB4MTAsMHgwMSwweDAwLDB4MGMsCi0weDEwLDB4MDAsMHhhMCwweGFmLDB4NDgsMHg2NSwweGEzLDB4OGUsMHgwOCwweDAwLDB4MDQsMHgyNCwweDRkLDB4MDEsMHgwMCwweDBjLAotMHg0NCwweDY1LDB4YTMsMHhhZSwweDQ0LDB4NjUsMHhhMiwweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHhhZSwKLTB4NDYsMHgwOSwweDAwLDB4MDgsMHgwMiwweDgwLDB4MDIsMHgzYywweDIzLDB4MTAsMHg2NywweDAwLDB4ZmYsMHhmZiwweDUyLDB4MzAsCi0weGExLDB4NGUsMHgwMCwweDBjLDB4MjEsMHgyMCwweDQwLDB4MDIsMHg1NiwweDAwLDB4NDAsMHgxMCwweDIxLDB4ZjAsMHg0MCwweDAwLAotMHgwOCwweDAwLDB4NDIsMHg4YywweDQ0LDB4NjUsMHhhNiwweDhlLDB4MDgsMHgwMCwweDA0LDB4MjQsMHgyMSwweDE4LDB4NTIsMHgwMCwKLTB4MjEsMHgyOCwweDQwLDB4MDAsMHgyMSwweDM4LDB4NDAsMHgwMiwweDE0LDB4NjUsMHhhMywweGFlLDB4MTgsMHg2NSwweGEyLDB4YWUsCi0weDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGEwLDB4YWYsMHg0OCwweDY1LDB4YTMsMHg4ZSwweDA4LDB4MDAsMHgwNCwweDI0LAotMHg0ZCwweDAxLDB4MDAsMHgwYywweDQ0LDB4NjUsMHhhMywweGFlLDB4NDQsMHg2NSwweGEzLDB4OGUsMHgyNSwweGIwLDB4MDQsMHgzYywKLTB4MDAsMHgwMSwweDgyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhYywweDQ2LDB4MDksMHgwMCwweDA4LDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weDA0LDB4MDAsMHgwMywweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDE0LDB4MDMsMHgwMCwweDBmLDB4MDAsMHg0MiwweDMwLAotMHgwOCwweDAwLDB4NDIsMHgyOCwweDkzLDB4ZmYsMHg0MCwweDEwLDB4MDIsMHgxNywweDAzLDB4MDAsMHgwMywweDAwLDB4NDIsMHgzMCwKLTB4OTAsMHhmZiwweDQwLDB4MTQsMHg4MCwweDEwLDB4MTEsMHgwMCwweDIxLDB4MjgsMHg1MywweDAwLDB4ZWMsMHhmZiwweGEzLDB4OGMsCi0weDI1LDB4YjAsMHgwMiwweDNjLDB4ZDQsMHgwMiwweDQyLDB4MzQsMHgyMSwweDIwLDB4MDAsMHgwMiwweDAwLDB4MDAsMHg0MywweGFjLAotMHhkYywweDA4LDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MjEsMHgyMCwweDQwLDB4MDAsMHg4YiwweDA4LDB4MDAsMHgwYywKLTB4MjEsMHgyOCwweDAwLDB4MDAsMHhjYSwweDA5LDB4MDAsMHgwOCwweDI1LDB4YjAsMHgwMywweDNjLDB4MDQsMHgwMCwweDAzLDB4OGUsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgxNCwweDAzLDB4MDAsMHgwZiwweDAwLDB4NDIsMHgzMCwweDA4LDB4MDAsMHg0MiwweDI4LAotMHgwNiwweDAwLDB4NDAsMHgxMCwweDAwLDB4YzAsMHgwMiwweDNjLDB4MDIsMHgxNywweDAzLDB4MDAsMHgwMywweDAwLDB4NDIsMHgzMCwKLTB4MGMsMHgwMCwweDQwLDB4MTAsMHg4MCwweDEwLDB4MTEsMHgwMCwweDAwLDB4YzAsMHgwMiwweDNjLDB4MjQsMHgxMCwweDYyLDB4MDAsCi0weDZmLDB4ZmYsMHg0MCwweDE0LDB4MDIsMHg4MCwweDA0LDB4M2MsMHgwMiwweDE3LDB4MDMsMHgwMCwweDAzLDB4MDAsMHg0MiwweDMwLAotMHgwMywweDAwLDB4MDMsMHgyNCwweDZiLDB4ZmYsMHg0MywweDEwLDB4NjgsMHgxNSwweDg0LDB4MjQsMHg2NywweGZmLDB4NDAsMHgxMCwKLTB4ODAsMHgxMCwweDExLDB4MDAsMHgyMSwweDI4LDB4NTMsMHgwMCwweGVjLDB4ZmYsMHhhMywweDhjLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weGQ0LDB4MDIsMHg0MiwweDM0LDB4MjEsMHgyMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4NDMsMHhhYywweGRjLDB4MDgsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDIxLDB4MjAsMHg0MCwweDAwLDB4OGIsMHgwOCwweDAwLDB4MGMsMHgyMSwweDI4LDB4MDAsMHgwMCwKLTB4YzQsMHgwOSwweDAwLDB4MDgsMHgwMiwweDgwLDB4MDQsMHgzYywweDI1LDB4YjAsMHgwNCwweDNjLDB4NDQsMHg0NCwweDAyLDB4M2MsCi0weGJjLDB4MDIsMHg4MywweDM0LDB4NDQsMHg0NCwweDQyLDB4MzQsMHgwMCwweDAwLDB4NjIsMHhhYywweDY3LDB4MDksMHgwMCwweDA4LAotMHgwMiwweDgwLDB4MDIsMHgzYywweDQ4LDB4NjUsMHhhNSwweDhlLDB4MjUsMHhiMCwweDA0LDB4M2MsMHg2NiwweDY2LDB4MDIsMHgzYywKLTB4MDAsMHgwMSwweDgzLDB4MzQsMHg2NiwweDY2LDB4NDIsMHgzNCwweGJjLDB4MDIsMHg4NCwweDM0LDB4MDAsMHgwMCwweDY1LDB4YWMsCi0weDAwLDB4MDAsMHg4MiwweGFjLDB4NjYsMHgwOSwweDAwLDB4MDgsMHg0NCwweDY1LDB4YTUsMHhhZSwweDAwLDB4NjAsMHgwMiwweDQwLAotMHgwMSwweDAwLDB4NDEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsMHgwMiwweDgwLDB4MDMsMHgzYywKLTB4ZDgsMHg4YywweDY0LDB4YWMsMHgwMCwweDYwLDB4ODIsMHg0MCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAyLDB4ODAsMHgwMiwweDNjLDB4ZDgsMHg4YywweDQ1LDB4OGMsMHgwMCwweDgwLDB4MDMsMHgzYywweDI1LDB4YjAsMHgwMiwweDNjLAotMHgxOCwweDAzLDB4NDIsMHgzNCwweDEwLDB4MmEsMHg2MywweDI0LDB4MDAsMHgwMCwweDQzLDB4YWMsMHgwNCwweDAwLDB4MDIsMHgyNCwKLTB4MWUsMHgwMCwweGEyLDB4MTAsMHgwNSwweDAwLDB4YTIsMHgyYywweDEwLDB4MDAsMHg0MCwweDEwLDB4MDUsMHgwMCwweDAyLDB4MjQsCi0weDAzLDB4MDAsMHgwMiwweDI0LDB4MDgsMHgwMCwweGEyLDB4MTAsMHgwMCwweDE5LDB4MDQsMHgwMCwweDgwLDB4MTAsMHgwNCwweDAwLAotMHgyMSwweDEwLDB4NDQsMHgwMCwweGMwLDB4MTAsMHgwMiwweDAwLDB4MjMsMHgxMCwweDQ0LDB4MDAsMHgwMCwweDExLDB4MDIsMHgwMCwKLTB4MjEsMHgxMCwweDQ0LDB4MDAsMHg0MCwweDE5LDB4MDIsMHgwMCwweGZmLDB4ZmYsMHg2MywweDI0LDB4ZmUsMHhmZiwweDYwLDB4MTQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweGYzLDB4ZmYsMHhhMiwweDEwLAotMHgwNiwweDAwLDB4MDIsMHgyNCwweGYyLDB4ZmYsMHhhMiwweDE0LDB4ODAsMHgxMCwweDA0LDB4MDAsMHg0MCwweDExLDB4MDQsMHgwMCwKLTB4MjMsMHgxMCwweDQ0LDB4MDAsMHg4MCwweDEwLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg0NCwweDAwLDB4MDAsMHgxOSwweDAyLDB4MDAsCi0weDIzLDB4MTgsMHg2MiwweDAwLDB4OWEsMHgwYSwweDAwLDB4MDgsMHgwMCwweDE5LDB4MDMsMHgwMCwweDgwLDB4MTAsMHgwNCwweDAwLAotMHgyMSwweDEwLDB4NDQsMHgwMCwweGMwLDB4MTAsMHgwMiwweDAwLDB4MjMsMHgxMCwweDQ0LDB4MDAsMHgwMCwweDExLDB4MDIsMHgwMCwKLTB4MjEsMHgxMCwweDQ0LDB4MDAsMHg5YSwweDBhLDB4MDAsMHgwOCwweDAwLDB4MTksMHgwMiwweDAwLDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weGQ4LDB4OGMsMHg0NSwweDhjLDB4MDAsMHg4MCwweDAzLDB4M2MsMHgyNSwweGIwLDB4MDIsMHgzYywweDE4LDB4MDMsMHg0MiwweDM0LAotMHhjYywweDJhLDB4NjMsMHgyNCwweDAwLDB4MDAsMHg0MywweGFjLDB4MDUsMHgwMCwweDAyLDB4MjQsMHgxMCwweDAwLDB4YTIsMHgxMCwKLTB4MDYsMHgwMCwweGEyLDB4MmMsMHgwOSwweDAwLDB4NDAsMHgxNCwweDA0LDB4MDAsMHgwMiwweDI0LDB4MDYsMHgwMCwweDAyLDB4MjQsCi0weDBmLDB4MDAsMHhhMiwweDEwLDB4MDAsMHgxMSwweDA0LDB4MDAsMHhmZiwweGZmLDB4ODQsMHgyNCwweGZlLDB4ZmYsMHg4MCwweDE0LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmYSwweGZmLDB4YTIsMHgxNCwKLTB4ODAsMHgxMCwweDA0LDB4MDAsMHgyMSwweDEwLDB4NDQsMHgwMCwweGMyLDB4MGEsMHgwMCwweDA4LDB4NDAsMHgyMCwweDAyLDB4MDAsCi0weDgwLDB4MTAsMHgwNCwweDAwLDB4MjEsMHgxMCwweDQ0LDB4MDAsMHhjMiwweDBhLDB4MDAsMHgwOCwweDgwLDB4MjAsMHgwMiwweDAwLAotMHgyMywweDEwLDB4NDQsMHgwMCwweGMyLDB4MGEsMHgwMCwweDA4LDB4NDAsMHgyMCwweDAyLDB4MDAsMHhmZiwweGZmLDB4ODUsMHgzMCwKLTB4MjEsMHgzMCwweDAwLDB4MDAsMHgyNSwweGIwLDB4MDMsMHgzYywweDJhLDB4YjAsMHgwNCwweDNjLDB4YjQsMHgwMCwweDYzLDB4MzQsCi0weDAxLDB4MDAsMHhhMiwweDI0LDB4MzEsMHgwMCwweDg0LDB4MzQsMHgwMCwweDAwLDB4NjUsMHhhMCwweDAwLDB4MDAsMHg4NSwweGEwLAotMHhmZiwweGZmLDB4NDUsMHgzMCwweDEyLDB4MDAsMHhhMCwweDEwLDB4MDEsMHgwMCwweDAzLDB4MjQsMHgyOCwweGIwLDB4MDcsMHgzYywKLTB4ZTgsMHgwYSwweDAwLDB4MDgsMHhmZiwweGZmLDB4MDgsMHgyNCwweDAwLDB4MDAsMHg4MywweGEwLDB4MDEsMHgwMCwweDYzLDB4MjQsCi0weGZmLDB4ZmYsMHg2MywweDMwLDB4MmIsMHgxMCwweGEzLDB4MDAsMHgwOSwweDAwLDB4NDAsMHgxNCwweDA4LDB4MDAsMHhjNiwweDI0LAotMHhmOSwweGZmLDB4NjUsMHgxNCwweDIxLDB4MjAsMHhjNywweDAwLDB4MDEsMHgwMCwweDYzLDB4MjQsMHhmZiwweGZmLDB4NjMsMHgzMCwKLTB4MmIsMHgxMCwweGEzLDB4MDAsMHgwMCwweDAwLDB4ODgsMHhhMCwweGY5LDB4ZmYsMHg0MCwweDEwLDB4MDgsMHgwMCwweGM2LDB4MjQsCi0weDAwLDB4MDEsMHhhMiwweDJjLDB4MTMsMHgwMCwweDQwLDB4MTAsMHgyMSwweDE4LDB4YTAsMHgwMCwweGZmLDB4MDAsMHgwOCwweDI0LAotMHgyOCwweGIwLDB4MDcsMHgzYywweGZjLDB4MGEsMHgwMCwweDA4LDB4ZmYsMHhmZiwweDA5LDB4MjQsMHhmZiwweGZmLDB4NDMsMHgzMCwKLTB4MDAsMHgwMCwweGEyLDB4YTAsMHgwMCwweDAxLDB4NjIsMHgyYywweDBhLDB4MDAsMHg0MCwweDEwLDB4MDgsMHgwMCwweGM2LDB4MjQsCi0weDAxLDB4MDAsMHg2MiwweDI0LDB4ZjksMHhmZiwweDY4LDB4MTQsMHgyMSwweDI4LDB4YzcsMHgwMCwweDAwLDB4MDEsMHgwMiwweDI0LAotMHhmZiwweGZmLDB4NDMsMHgzMCwweDAwLDB4MDEsMHg2MiwweDJjLDB4MDAsMHgwMCwweGE5LDB4YTAsMHhmOCwweGZmLDB4NDAsMHgxNCwKLTB4MDgsMHgwMCwweGM2LDB4MjQsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4ZDgsMHhmZiwweGJkLDB4MjcsCi0weDI0LDB4MDAsMHhiZiwweGFmLDB4MjAsMHgwMCwweGI0LDB4YWYsMHgxYywweDAwLDB4YjMsMHhhZiwweDE4LDB4MDAsMHhiMiwweGFmLAotMHgxNCwweDAwLDB4YjEsMHhhZiwweDEwLDB4MDAsMHhiMCwweGFmLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwKLTB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwweDI1LDB4YjAsMHgxMCwweDNjLDB4NDIsMHgwMCwweDE0LDB4MzYsCi0weGZmLDB4ZmYsMHgwMiwweDI0LDB4MDAsMHgwMCwweDgyLDB4YTIsMHhkOCwweDAwLDB4MDUsMHgzNiwweDQwLDB4MDAsMHgxMSwweDM2LAotMHhhOCwweDAwLDB4MTMsMHgzNiwweGEwLDB4MDAsMHgxMiwweDM2LDB4MDAsMHgxMCwweDAzLDB4MjQsMHhhNCwweDAwLDB4MTAsMHgzNiwKLTB4MDAsMHg4MCwweDAyLDB4M2MsMHgwMCwweDAwLDB4MjMsMHhhNiwweDAwLDB4MDAsMHhhMCwweGEwLDB4MDAsMHgwMCwweDQwLDB4YWUsCi0weDAwLDB4MDAsMHgwMCwweGFlLDB4MDAsMHgwMCwweDYyLDB4YWUsMHgwMCwweDAwLDB4YTMsMHg5MCwweDgwLDB4ZmYsMHgwMiwweDI0LAotMHhmZCwweDAwLDB4MDQsMHgyNCwweDI1LDB4MTgsMHg2MiwweDAwLDB4ZmMsMHgxNywweDAyLDB4MjQsMHgwMCwweDAwLDB4YTMsMHhhMCwKLTB4MDAsMHgwMCwweDIyLDB4YTYsMHhkMywweDBhLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weDY4LDB4MTUsMHg0MiwweDI0LDB4NjgsMHg0YiwweDQ1LDB4OGMsMHg2MCwweDRiLDB4NDMsMHg4YywweDY0LDB4NGIsMHg0NCwweDhjLAotMHhmYywweDM3LDB4MDIsMHgyNCwweDAwLDB4MDAsMHg0MywweGFlLDB4MDAsMHgwMCwweDA0LDB4YWUsMHgwMCwweDAwLDB4NjUsMHhhZSwKLTB4MDAsMHgwMCwweDIyLDB4YTYsMHgwMCwweDAwLDB4ODAsMHhhMiwweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsCi0weDAwLDB4NjAsMHg4MSwweDQwLDB4MjQsMHgwMCwweGJmLDB4OGYsMHgyMCwweDAwLDB4YjQsMHg4ZiwweDFjLDB4MDAsMHhiMywweDhmLAotMHgxOCwweDAwLDB4YjIsMHg4ZiwweDE0LDB4MDAsMHhiMSwweDhmLDB4MTAsMHgwMCwweGIwLDB4OGYsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MjgsMHgwMCwweGJkLDB4MjcsMHhkMCwweGZmLDB4YmQsMHgyNywweDJjLDB4MDAsMHhiZiwweGFmLDB4MjgsMHgwMCwweGI2LDB4YWYsCi0weDI0LDB4MDAsMHhiNSwweGFmLDB4MjAsMHgwMCwweGI0LDB4YWYsMHgxYywweDAwLDB4YjMsMHhhZiwweDE4LDB4MDAsMHhiMiwweGFmLAotMHgxNCwweDAwLDB4YjEsMHhhZiwweDEwLDB4MDAsMHhiMCwweGFmLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwKLTB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwweDI1LDB4YjAsMHgxMCwweDNjLDB4NDAsMHgwMCwweDA1LDB4MzYsCi0weDAwLDB4MDAsMHhhMiwweDk0LDB4MjQsMHhmYSwweDAzLDB4MjQsMHhhOCwweDAwLDB4MTMsMHgzNiwweDI0LDB4MTAsMHg0MywweDAwLAotMHgwMCwweDAwLDB4YTIsMHhhNCwweGEwLDB4MDAsMHgxMiwweDM2LDB4YTQsMHgwMCwweDEwLDB4MzYsMHgwMCwweDAwLDB4NTUsMHg4ZSwKLTB4MDAsMHgwMCwweDE2LDB4OGUsMHgwMCwweDAwLDB4NzEsMHg4ZSwweDAwLDB4ODAsMHgxNCwweDNjLDB4ZmMsMHgzNywweDAyLDB4MjQsCi0weDAwLDB4MDAsMHg0MCwweGFlLDB4ZmQsMHgwMCwweDA0LDB4MjQsMHgwMCwweDAwLDB4MDAsMHhhZSwweDIxLDB4ODgsMHgzNCwweDAyLAotMHgwMCwweDAwLDB4NzQsMHhhZSwweDAwLDB4MDAsMHhhMiwweGE0LDB4ZDMsMHgwYSwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDU1LDB4YWUsMHgwMCwweDAwLDB4MTYsMHhhZSwweDAwLDB4MDAsMHg3MSwweGFlLDB4MDAsMHg2MCwweDAxLDB4NDAsCi0weDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsMHgyYywweDAwLDB4YmYsMHg4ZiwweDI4LDB4MDAsMHhiNiwweDhmLAotMHgyNCwweDAwLDB4YjUsMHg4ZiwweDIwLDB4MDAsMHhiNCwweDhmLDB4MWMsMHgwMCwweGIzLDB4OGYsMHgxOCwweDAwLDB4YjIsMHg4ZiwKLTB4MTQsMHgwMCwweGIxLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwweDA4LDB4MDAsMHhlMCwweDAzLDB4MzAsMHgwMCwweGJkLDB4MjcsCi0weGQwLDB4ZmYsMHhiZCwweDI3LDB4MmMsMHgwMCwweGJmLDB4YWYsMHgyOCwweDAwLDB4YjYsMHhhZiwweDI0LDB4MDAsMHhiNSwweGFmLAotMHgyMCwweDAwLDB4YjQsMHhhZiwweDFjLDB4MDAsMHhiMywweGFmLDB4MTgsMHgwMCwweGIyLDB4YWYsMHgxNCwweDAwLDB4YjEsMHhhZiwKLTB4MTAsMHgwMCwweGIwLDB4YWYsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDEsMHgwMCwweDIxLDB4MzgsCi0weDAwLDB4NjAsMHg4MSwweDQwLDB4MjUsMHhiMCwweDEwLDB4M2MsMHg0MCwweDAwLDB4MDUsMHgzNiwweDAwLDB4MDAsMHhhMiwweDk0LAotMHhhZiwweGZmLDB4MDMsMHgyNCwweGE4LDB4MDAsMHgxMywweDM2LDB4MjQsMHgxMCwweDQzLDB4MDAsMHgwMCwweDAwLDB4YTIsMHhhNCwKLTB4YTAsMHgwMCwweDEyLDB4MzYsMHhhNCwweDAwLDB4MTAsMHgzNiwweDAwLDB4MDAsMHg1NSwweDhlLDB4MDAsMHgwMCwweDE2LDB4OGUsCi0weDAwLDB4MDAsMHg3MSwweDhlLDB4MDAsMHg4MCwweDE0LDB4M2MsMHhmYywweDM3LDB4MDIsMHgyNCwweDAwLDB4MDAsMHg0MCwweGFlLAotMHhmZCwweDAwLDB4MDQsMHgyNCwweDAwLDB4MDAsMHgwMCwweGFlLDB4MjEsMHg4OCwweDM0LDB4MDIsMHgwMCwweDAwLDB4NzQsMHhhZSwKLTB4MDAsMHgwMCwweGEyLDB4YTQsMHhkMywweDBhLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDU1LDB4YWUsCi0weDAwLDB4MDAsMHgxNiwweGFlLDB4MDAsMHgwMCwweDcxLDB4YWUsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LAotMHgwMCwweDYwLDB4ODEsMHg0MCwweDJjLDB4MDAsMHhiZiwweDhmLDB4MjgsMHgwMCwweGI2LDB4OGYsMHgyNCwweDAwLDB4YjUsMHg4ZiwKLTB4MjAsMHgwMCwweGI0LDB4OGYsMHgxYywweDAwLDB4YjMsMHg4ZiwweDE4LDB4MDAsMHhiMiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsCi0weDEwLDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgzMCwweDAwLDB4YmQsMHgyNywweDAwLDB4NjAsMHgwMSwweDQwLAotMHgwMSwweDAwLDB4MjEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsMHgyNSwweGIwLDB4MDQsMHgzYywKLTB4NDAsMHgwMCwweDg0LDB4MzQsMHgwMCwweDAwLDB4ODIsMHg5NCwweGQ4LDB4ZmQsMHgwMywweDI0LDB4MjQsMHgxMCwweDQzLDB4MDAsCi0weGZjLDB4MzcsMHgwMywweDI0LDB4MDAsMHgwMCwweDgyLDB4YTQsMHgwMCwweDAwLDB4ODMsMHhhNCwweDAwLDB4NjAsMHgwMSwweDQwLAotMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDgyLDB4OGMsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHhmZiwweGM2LDB4MzAsCi0weDEwLDB4MDAsMHgwMiwweDI0LDB4MGMsMHgwMCwweGMyLDB4MTAsMHgxMSwweDAwLDB4YzMsMHgyOCwweDA2LDB4MDAsMHg2MCwweDEwLAotMHgyMCwweDAwLDB4MDIsMHgyNCwweDA4LDB4MDAsMHgwMiwweDI0LDB4MGQsMHgwMCwweGMyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA2LDB4MDAsMHhjMiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODUsMHhhNCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4NSwweGFjLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDg1LDB4YTAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDIxLDB4MTAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwweDI1LDB4YjAsMHgwMiwweDNjLAotMHgwYSwweDAwLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweDkwLDB4ZmYsMHhmZiwweGE1LDB4MjQsMHgwMCwweDJjLDB4MDUsMHgwMCwKLTB4ZmQsMHgwMCwweDYzLDB4MzAsMHgwMywweDJjLDB4MDUsMHgwMCwweGZmLDB4ZmYsMHg4NywweDMwLDB4MDAsMHgwMCwweDQzLDB4YTAsCi0weDFhLDB4MDAsMHhhMCwweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMSwweDMwLDB4NDAsMHgwMCwweDA3LDB4MTAsMHhhNywweDAwLAotMHgwMSwweDAwLDB4NDIsMHgzMCwweGZkLDB4MDAsMHg2NCwweDMwLDB4MDAsMHgwMCwweDQyLDB4MzgsMHgwMiwweDAwLDB4NjMsMHgzNCwKLTB4MGEsMHgxOCwweDgyLDB4MDAsMHgwMCwweDAwLDB4YzMsMHhhMCwweDA0LDB4MDAsMHg2MywweDM0LDB4MDAsMHgwMCwweGMzLDB4YTAsCi0weDA5LDB4MDAsMHgwMiwweDI0LDB4ZmYsMHhmZiwweDQyLDB4MjQsMHhmZiwweGZmLDB4NDEsMHgwNCwweGZmLDB4ZmYsMHg0MiwweDI0LAotMHhmYiwweDAwLDB4NjMsMHgzMCwweDAwLDB4MDAsMHhjMywweGEwLDB4MDQsMHgwMCwweDAyLDB4MjQsMHhmZiwweGZmLDB4NDIsMHgyNCwKLTB4ZmYsMHhmZiwweDQxLDB4MDQsMHhmZiwweGZmLDB4NDIsMHgyNCwweGZmLDB4ZmYsMHhhMiwweDI0LDB4MDAsMHgyYywweDAyLDB4MDAsCi0weDAzLDB4MmMsMHgwNSwweDAwLDB4ZWEsMHhmZiwweGExLDB4MDQsMHgwNywweDEwLDB4YTcsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI1LDB4YjAsMHgwMiwweDNjLDB4MGEsMHgwMCwweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHg5MCwKLTB4ZmYsMHhmZiwweDg0LDB4MjQsMHgwMCwweDI0LDB4MDQsMHgwMCwweDAzLDB4MjQsMHgwNCwweDAwLDB4ZmYsMHgwMCwweDY1LDB4MzAsCi0weDFkLDB4MDAsMHg4MCwweDA0LDB4MjEsMHgzOCwweDAwLDB4MDAsMHgyMSwweDMwLDB4NDAsMHgwMCwweDAxLDB4MDAsMHgwOCwweDI0LAotMHgwNCwweDAwLDB4YTUsMHgzNCwweDAwLDB4MDAsMHhjNSwweGEwLDB4MDAsMHgwMCwweGMyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ZmYsMHgwMCwweDQ1LDB4MzAsMHgwMSwweDAwLDB4YTMsMHgzMCwweDA1LDB4MDAsMHg2MCwweDEwLDB4MDQsMHgwMCwweDAyLDB4MjQsCi0weDA0LDB4MTAsMHg4OCwweDAwLDB4MjUsMHgxMCwweDQ3LDB4MDAsMHhmZiwweGZmLDB4NDcsMHgzMCwweDA0LDB4MDAsMHgwMiwweDI0LAotMHhmZiwweGZmLDB4NDIsMHgyNCwweGZmLDB4ZmYsMHg0MSwweDA0LDB4ZmYsMHhmZiwweDQyLDB4MjQsMHhmYiwweDAwLDB4YTUsMHgzMCwKLTB4MDAsMHgwMCwweGM1LDB4YTAsMHgwOSwweDAwLDB4MDIsMHgyNCwweGZmLDB4ZmYsMHg0MiwweDI0LDB4ZmYsMHhmZiwweDQxLDB4MDQsCi0weGZmLDB4ZmYsMHg0MiwweDI0LDB4ZmYsMHhmZiwweDgyLDB4MjQsMHgwMCwweDI0LDB4MDIsMHgwMCwweDAzLDB4MjQsMHgwNCwweDAwLAotMHhlNywweGZmLDB4ODEsMHgwNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4ZTAsMHgwMCwKLTB4ZTAsMHhmZiwweGJkLDB4MjcsMHgxMCwweDAwLDB4YjAsMHhhZiwweDI1LDB4YjAsMHgxMCwweDNjLDB4MGEsMHgwMCwweDEwLDB4MzYsCi0weDE4LDB4MDAsMHhiZiwweGFmLDB4MTQsMHgwMCwweGIxLDB4YWYsMHgwMCwweDAwLDB4MDIsMHg5MiwweGZmLDB4ZmYsMHg5MSwweDMwLAotMHgwMywweDAwLDB4MDUsMHgyNCwweGMwLDB4MDAsMHg0MiwweDMwLDB4ODAsMHgwMCwweDQzLDB4MzQsMHgwMCwweDAwLDB4MDMsMHhhMiwKLTB4MDQsMHgwMCwweDYzLDB4MzQsMHgwMCwweDAwLDB4MDMsMHhhMiwweGZiLDB4MDAsMHg2MywweDMwLDB4MDAsMHgwMCwweDAzLDB4YTIsCi0weDA4LDB4MDAsMHg2MywweDM0LDB4MDAsMHgwMCwweDAzLDB4YTIsMHgwNCwweDAwLDB4NjMsMHgzNCwweDAwLDB4MDAsMHgwMywweGEyLAotMHhmYiwweDAwLDB4NjMsMHgzMCwweDAwLDB4MDAsMHgwMywweGEyLDB4ZDcsMHgwYiwweDAwLDB4MGMsMHgwNiwweDAwLDB4MDQsMHgyNCwKLTB4NDIsMHgyMCwweDExLDB4MDAsMHhkNywweDBiLDB4MDAsMHgwYywweDA2LDB4MDAsMHgwNSwweDI0LDB4ZmQsMHgwYiwweDAwLDB4MGMsCi0weDEwLDB4MDAsMHgwNCwweDI0LDB4MDAsMHgwMCwweDAzLDB4OTIsMHgxOCwweDAwLDB4YmYsMHg4ZiwweDE0LDB4MDAsMHhiMSwweDhmLAotMHhjMCwweDAwLDB4NjMsMHgzMCwweDAwLDB4MDAsMHgwMywweGEyLDB4MTAsMHgwMCwweGIwLDB4OGYsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MjAsMHgwMCwweGJkLDB4MjcsMHhlMCwweGZmLDB4YmQsMHgyNywweDE0LDB4MDAsMHhiMSwweGFmLDB4ZmYsMHhmZiwweGIxLDB4MzAsCi0weDE4LDB4MDAsMHhiMiwweGFmLDB4MTAsMHgwMCwweGIwLDB4YWYsMHgxYywweDAwLDB4YmYsMHhhZiwweDIxLDB4OTAsMHhjMCwweDAwLAotMHgwYSwweDAwLDB4MjAsMHgxMiwweGZmLDB4ZmYsMHg5MCwweDMwLDB4MjQsMHgwYywweDAwLDB4MGMsMHgyMSwweDIwLDB4MDAsMHgwMiwKLTB4ZmUsMHhmZiwweDIzLDB4MjYsMHgwMiwweDAwLDB4MDQsMHgyNiwweDAwLDB4MDAsMHg0MiwweGE2LDB4ZmYsMHhmZiwweDcxLDB4MzAsCi0weGZmLDB4ZmYsMHg5MCwweDMwLDB4ZjgsMHhmZiwweDIwLDB4MTYsMHgwMiwweDAwLDB4NTIsMHgyNiwweDFjLDB4MDAsMHhiZiwweDhmLAotMHgxOCwweDAwLDB4YjIsMHg4ZiwweDE0LDB4MDAsMHhiMSwweDhmLDB4MTAsMHgwMCwweGIwLDB4OGYsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MjAsMHgwMCwweGJkLDB4MjcsMHgyNSwweGIwLDB4MDMsMHgzYywweDBhLDB4MDAsMHg2OCwweDM0LDB4MDAsMHgwMCwweDAyLDB4OTEsCi0weGZmLDB4ZmYsMHhhNSwweDMwLDB4ZmYsMHgwMCwweDg0LDB4MzAsMHgxZiwweDAwLDB4YTAsMHgxMCwweGZmLDB4MDAsMHg0NywweDMwLAotMHgyMSwweDQ4LDB4MDAsMHgwMSwweDBjLDB4MDAsMHg2YywweDM0LDB4MGIsMHgwMCwweDZiLDB4MzQsMHhjMCwweGZmLDB4MGEsMHgyNCwKLTB4MjEsMHg2OCwweDAwLDB4MDEsMHgyNSwweDEwLDB4ZWEsMHgwMCwweGZmLDB4MDAsMHg0NywweDMwLDB4MDAsMHgwMCwweDY0LDB4YTEsCi0weDAwLDB4MDAsMHgyNywweGExLDB4MDAsMHgwMCwweDIyLDB4OTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAsMHg0NywweDMwLAotMHhjMCwweDAwLDB4ZTMsMHgzMCwweDA4LDB4MDAsMHg2MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMSwweDQwLDB4YTAsMHgwMSwKLTB4MDAsMHgwMCwweDAyLDB4OTEsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAsMHg0NywweDMwLDB4YzAsMHgwMCwweGUzLDB4MzAsCi0weGZiLDB4ZmYsMHg2MCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODIsMHg4ZCwweGZjLDB4ZmYsMHhhMywweDI0LAotMHgwNCwweDAwLDB4ODQsMHgyNCwweGZmLDB4ZmYsMHg2NSwweDMwLDB4MDAsMHgwMCwweGMyLDB4YWMsMHhmZiwweDAwLDB4ODQsMHgzMCwKLTB4ZTgsMHhmZiwweGEwLDB4MTQsMHgwNCwweDAwLDB4YzYsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGZmLDB4MDAsMHg4NCwweDMwLDB4MjEsMHg2OCwweGUwLDB4MDAsMHhmZiwweGZmLDB4YTUsMHgzMCwweGMwLDB4NTAsMHgwNCwweDAwLAotMHgwMCwweDYwLDB4MGMsMHg0MCwweDAxLDB4MDAsMHg4MSwweDM1LDB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwKLTB4MDAsMHgwMCwweGMyLDB4OTAsMHgwMSwweDAwLDB4YzMsMHg5MCwweDI1LDB4YjAsMHgwNywweDNjLDB4MDAsMHgxNCwweDAyLDB4MDAsCi0weDI1LDB4MjgsMHhhMiwweDAwLDB4MDAsMHgxZSwweDAzLDB4MDAsMHgwMSwweDgwLDB4MDgsMHgzYywweDI1LDB4MjAsMHhhMywweDAwLAotMHg0MCwweDAyLDB4ZTksMHgzNCwweDI1LDB4MTgsMHg0OCwweDAxLDB4NDQsMHgwMiwweGU3LDB4MzQsMHgwMCwweDAwLDB4ZTQsMHhhYywKLTB4MDAsMHgwMCwweDIzLDB4YWQsMHgwMywweDAwLDB4YzIsMHg5MCwweDAyLDB4MDAsMHhjNCwweDkwLDB4MDQsMHgwMCwweGMzLDB4OTAsCi0weDA1LDB4MDAsMHhjNSwweDkwLDB4MDAsMHgxMiwweDAyLDB4MDAsMHgyNSwweDIwLDB4ODIsMHgwMCwweDAwLDB4MWMsMHgwMywweDAwLAotMHgwMSwweDAwLDB4NGEsMHgyNSwweDI1LDB4MjAsMHg4MywweDAwLDB4MDAsMHgyZSwweDA1LDB4MDAsMHgyNSwweDQwLDB4NDgsMHgwMSwKLTB4MjUsMHgyMCwweDg1LDB4MDAsMHgwMCwweDAwLDB4ZTQsMHhhYywweDAxLDB4MDAsMHg0YSwweDI1LDB4MDAsMHgwMCwweDI4LDB4YWQsCi0weDAxLDB4ODAsMHgwYiwweDNjLDB4MjEsMHg0MCwweDAwLDB4MDAsMHgyMSwweDEwLDB4YTgsMHgwMSwweDAxLDB4MDAsMHg0MywweDkwLAotMHgwMCwweDAwLDB4NDUsMHg5MCwweDAyLDB4MDAsMHg0NCwweDkwLDB4MDMsMHgwMCwweDQ2LDB4OTAsMHgwMCwweDFhLDB4MDMsMHgwMCwKLTB4MjUsMHgyOCwweGEzLDB4MDAsMHgwMCwweDI0LDB4MDQsMHgwMCwweDI1LDB4MjgsMHhhNCwweDAwLDB4MDAsMHgzNiwweDA2LDB4MDAsCi0weDA0LDB4MDAsMHgwOCwweDI1LDB4MjUsMHgxMCwweDRiLDB4MDEsMHgyNSwweDIwLDB4YTYsMHgwMCwweDEwLDB4MDAsMHgwMywweDJkLAotMHgwMCwweDAwLDB4ZTQsMHhhYywweDAxLDB4MDAsMHg0YSwweDI1LDB4MDAsMHgwMCwweDIyLDB4YWQsMHhlZSwweGZmLDB4NjAsMHgxNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4OGMsMHg0MCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGZmLDB4ZmYsMHg4NCwweDMwLDB4NDIsMHhiMCwweDA4LDB4M2MsMHg4MCwweDEwLDB4MDQsMHgwMCwweDIxLDB4MTAsMHg0OCwweDAwLAotMHgwNCwweDAwLDB4NDYsMHhhYywweDAwLDB4MDAsMHgwNywweDkxLDB4NDAsMHgxOCwweDA0LDB4MDAsMHgwMywweDAwLDB4MDYsMHgyNCwKLTB4ZmYsMHgwMCwweGU3LDB4MzAsMHgwNCwweDMwLDB4NjYsMHgwMCwweDAxLDB4MDAsMHgwMiwweDI0LDB4MDQsMHgxMCwweDYyLDB4MDAsCi0weDI1LDB4MzAsMHhjNywweDAwLDB4ZmYsMHhmZiwweGE1LDB4MzAsMHgyNSwweDEwLDB4NDcsMHgwMCwweDAyLDB4MDAsMHhhMCwweDE0LAotMHhmZiwweDAwLDB4YzcsMHgzMCwweGZmLDB4MDAsMHg0NywweDMwLDB4NDIsMHhiMCwweDAyLDB4M2MsMHgwMCwweDAwLDB4NDcsMHhhMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQyLDB4YjAsMHgwMiwweDNjLDB4MDMsMHgwMCwweDQ3LDB4MzQsCi0weDAwLDB4MDAsMHhlMywweDkwLDB4ZmYsMHgwMCwweDg0LDB4MzAsMHgwNCwweDAwLDB4ODQsMHgyNCwweGZmLDB4MDAsMHg2NSwweDMwLAotMHgwMSwweDAwLDB4MDIsMHgyNCwweDA0LDB4MzAsMHg4MiwweDAwLDB4MDcsMHgxOCwweDg1LDB4MDAsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4ZTgsMHgwMywweDQyLDB4MzQsMHgwMSwweDAwLDB4NjMsMHgzMCwweDIxLDB4MjAsMHhjMCwweDAwLDB4MDAsMHgwMCwweDQ1LDB4YTAsCi0weDAyLDB4MDAsMHg2MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTYsMHhhMCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgyNCwweDEwLDB4ODUsMHgwMCwweDAwLDB4NjAsMHgwMywweDQwLDB4MDEsMHgwMCwweDYxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwKLTB4MDAsMHg2MCwweDgxLDB4NDAsMHgwMiwweDgwLDB4MDIsMHgzYywweGRjLDB4OGMsMHg0MiwweDI0LDB4MDQsMHgwMCwweDQ1LDB4OGMsCi0weDAwLDB4MDAsMHg4MiwweGFjLDB4MDQsMHgwMCwweDQ0LDB4YWMsMHgwMCwweDAwLDB4YTQsMHhhYywweDA0LDB4MDAsMHg4NSwweGFjLAotMHgwMCwweDYwLDB4ODMsMHg0MCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNCwweDAwLDB4ODMsMHg5MCwKLTB4MDEsMHgwMCwweDAyLDB4MjQsMHgwOCwweDAwLDB4ODYsMHhhYywweDE4LDB4MDAsMHg4NSwweGFjLDB4MDAsMHgwMCwweDg0LDB4YWMsCi0weDAzLDB4MDAsMHg2MiwweDEwLDB4MDQsMHgwMCwweDg0LDB4YWMsMHhlZCwweDBjLDB4MDAsMHgwOCwweDBjLDB4MDAsMHg4MCwweGFjLAotMHgwYywweDAwLDB4ODIsMHg4YywweGVkLDB4MGMsMHgwMCwweDA4LDB4MTAsMHgwMCwweDgyLDB4YWMsMHgwMCwweDYwLDB4MDMsMHg0MCwKLTB4MDEsMHgwMCwweDYxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MDQsMHgwMCwweDg1LDB4OGMsCi0weDAwLDB4MDAsMHg4MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTIsMHhhYywweDA0LDB4MDAsMHg0NSwweGFjLAotMHgwMCwweDAwLDB4ODQsMHhhYywweDA0LDB4MDAsMHg4NCwweGFjLDB4MDAsMHg2MCwweDgzLDB4NDAsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhkMCwweGZmLDB4YmQsMHgyNywweDI4LDB4MDAsMHhiNiwweGFmLDB4MjQsMHgwMCwweGI1LDB4YWYsCi0weDIwLDB4MDAsMHhiNCwweGFmLDB4MTQsMHgwMCwweGIxLDB4YWYsMHgyYywweDAwLDB4YmYsMHhhZiwweDFjLDB4MDAsMHhiMywweGFmLAotMHgxOCwweDAwLDB4YjIsMHhhZiwweDEwLDB4MDAsMHhiMCwweGFmLDB4MDAsMHg4MCwweDE2LDB4M2MsMHgwMiwweDgwLDB4MTQsMHgzYywKLTB4MDIsMHg4MCwweDExLDB4M2MsMHgwMiwweDgwLDB4MTUsMHgzYywweGM0LDB4N2QsMHgyNCwweDhlLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDU0LDB4MzQsMHhjMywweDI2LDB4MTgsMHgwMywweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhYywweGRjLDB4OGMsMHg5MCwweDhlLAotMHgxOCwweDAwLDB4ODAsMHgxMCwweGRjLDB4OGMsMHg4MiwweDI2LDB4MTUsMHgwMCwweDAyLDB4MTIsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjEsMHg5OCwweDQwLDB4MDAsMHgwMSwweDAwLDB4MTIsMHgyNCwweDE0LDB4MDAsMHgwMiwweDkyLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDFkLDB4MDAsMHg1MiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOSwweDAwLDB4NDAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwYywweDAwLDB4MDMsMHg4ZSwweGM0LDB4N2QsMHgyMiwweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMywweDIwLDB4NjIsMHgwMCwKLTB4MmIsMHgxMCwweDQzLDB4MDAsMHgwZSwweDAwLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwMCwweDA0LDB4YWUsCi0weDAwLDB4MDAsMHgxMCwweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlZiwweGZmLDB4MTMsMHgxNiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhjNCwweDdkLDB4MjAsMHhhZSwweDA4LDB4MGMsMHhhNCwweDI2LDB4MjEsMHgyOCwweDAwLDB4MDAsMHgyMSwweDMwLDB4MDAsMHgwMCwKLTB4MzEsMHgxYywweDAwLDB4MGMsMHgyMSwweDM4LDB4MDAsMHgwMCwweDIyLDB4MGQsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHgwMiwweDhlLDB4MTgsMHgwMCwweDA0LDB4OGUsMHgwOSwweGY4LDB4NDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgzYywweDBkLDB4MDAsMHgwOCwweDBjLDB4MDAsMHgwMiwweGFlLDB4MGMsMHgwMCwweDAzLDB4OGUsMHhjNCwweDdkLDB4MjIsMHg4ZSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMywweDIwLDB4NjIsMHgwMCwweDJiLDB4MTAsMHg0MywweDAwLDB4ZTcsMHhmZiwweDQwLDB4MTQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDAyLDB4OGUsMHgxOCwweDAwLDB4MDQsMHg4ZSwweDA5LDB4ZjgsMHg0MCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHgwMywweDhlLDB4M2MsMHgwZCwweDAwLDB4MDgsMHgwYywweDAwLDB4MDMsMHhhZSwKLTB4ZmYsMHgwMCwweGE1LDB4MzAsMHgyNSwweGIwLDB4MDIsMHgzYywweDIxLDB4MjgsMHhhMiwweDAwLDB4ZmYsMHgwMCwweDg0LDB4MzAsCi0weDYwLDB4MDEsMHhhNCwweGEwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAsMHg4NCwweDMwLAotMHgwMSwweDAwLDB4MDMsMHgyNCwweDEwLDB4MDAsMHgwMiwweDNjLDB4MDQsMHgxOCwweDgzLDB4MDAsMHhmMCwweDcwLDB4NDIsMHgzNCwKLTB4MTUsMHgwMCwweDg0LDB4MmMsMHgwNiwweDAwLDB4ODAsMHgxMCwweDI0LDB4MjgsMHg2MiwweDAwLDB4MGYsMHgwMCwweDYzLDB4MzAsCi0weDA0LDB4MDAsMHhhMCwweDE0LDB4MDEsMHgwMCwweDAyLDB4MjQsMHgwMiwweDAwLDB4NjAsMHgxNCwweDAyLDB4MDAsMHgwMiwweDI0LAotMHgyMSwweDEwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweDAwLDB4YTUsMHgzMCwKLTB4MDQsMHgwMCwweGEyLDB4MmMsMHgxNCwweDAwLDB4NDAsMHgxMCwweGZmLDB4MDAsMHg4NCwweDMwLDB4MDIsMHg4MCwweDAzLDB4M2MsCi0weDhlLDB4N2QsMHg2MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlZiwweGZmLDB4NDIsMHgyNCwweGZmLDB4MDAsMHg0MiwweDMwLAotMHgwMiwweDAwLDB4NDIsMHgyYywweDBlLDB4MDAsMHg0MCwweDEwLDB4MDIsMHgwMCwweDAzLDB4MjQsMHgyNCwweDAwLDB4ODMsMHgxMCwKLTB4MGYsMHgxMCwweDAyLDB4M2MsMHgwMywweDAwLDB4ODIsMHgyOCwweDE0LDB4MDAsMHg0MCwweDEwLDB4MDMsMHgwMCwweDAyLDB4MjQsCi0weDAxLDB4MDAsMHgwMiwweDI0LDB4MmYsMHgwMCwweDgyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MWYsMHgwMiwweDNjLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweGZmLDB4ZmYsMHg0MiwweDM0LDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MzUsMHgwMCwweDgzLDB4MTAsMHgwZiwweDFmLDB4MDIsMHgzYywweDAzLDB4MDAsMHg4MiwweDI4LDB4MTYsMHgwMCwweDQwLDB4MTAsCi0weDAzLDB4MDAsMHgwMiwweDI0LDB4MDEsMHgwMCwweDAyLDB4MjQsMHhmNCwweGZmLDB4ODIsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwZiwweDFmLDB4MDIsMHgzYywweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHg4MCwweDQyLDB4MzQsMHhmMCwweGZmLDB4ODIsMHgxNCwKLTB4ZmYsMHgxZiwweDAyLDB4M2MsMHgwMSwweDAwLDB4MDIsMHgyNCwweDI5LDB4MDAsMHhhMiwweDEwLDB4MGYsMHgxMCwweDAyLDB4M2MsCi0weDAyLDB4MDAsMHhhMiwweDI4LDB4MWYsMHgwMCwweDQwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHhhMywweDEwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGU1LDB4ZmYsMHhhNCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZiwweDEwLDB4MDIsMHgzYywKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweGYwLDB4NDIsMHgzNCwweGUxLDB4ZmYsMHg4MiwweDE0LDB4ZmYsMHgxZiwweDAyLDB4M2MsCi0weDAxLDB4MDAsMHgwMiwweDI0LDB4MWMsMHgwMCwweGEyLDB4MTAsMHgwZiwweDAwLDB4MDIsMHgzYywweDAyLDB4MDAsMHhhMiwweDI4LAotMHgwYiwweDAwLDB4NDAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MWMsMHgwMCwweGEzLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ZDYsMHhmZiwweGE0LDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBmLDB4MDAsMHgwMiwweDNjLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDAwLDB4ZjAsMHg0MiwweDM0LDB4MGYsMHgxMCwweDAyLDB4M2MsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4ODAsMHg0MiwweDM0LAotMHhjZSwweGZmLDB4YTAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHgwMCwweDAyLDB4M2MsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MTUsMHhmMCwweDQyLDB4MzQsMHhjOSwweGZmLDB4YTAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGYsMHgxMCwweDAyLDB4M2MsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MTUsMHhmMCwweDQyLDB4MzQsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4ZjAsMHg0MiwweDM0LAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDEwLDB4ZjAsMHg0MiwweDM0LDB4MDgsMHgwMCwweGUwLDB4MDMsMHgxMCwweGYwLDB4NDIsMHgzNCwKLTB4MGYsMHgxMCwweDAyLDB4M2MsMHgwOCwweDAwLDB4ZTAsMHgwMywweDA1LDB4ZjAsMHg0MiwweDM0LDB4MGYsMHgwMCwweDAyLDB4M2MsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MDUsMHhmMCwweDQyLDB4MzQsMHhjMCwweDQwLDB4MDQsMHgwMCwweDIxLDB4MTgsMHgwNCwweDAxLAotMHg4MCwweDE4LDB4MDMsMHgwMCwweDIxLDB4MTgsMHg2NCwweDAwLDB4MDIsMHg4MCwweDAyLDB4M2MsMHg4MCwweDE4LDB4MDMsMHgwMCwKLTB4NjgsMHgxNSwweDQyLDB4MjQsMHgyMSwweDE4LDB4NjIsMHgwMCwweDc0LDB4NTEsMHg2NiwweDhjLDB4MjEsMHgzOCwweDYwLDB4MDAsCi0weDdhLDB4NTEsMHg2MCwweGEwLDB4N2IsMHg1MSwweDYwLDB4YTAsMHgxYywweDAwLDB4MDUsMHgyNCwweGRmLDB4MGQsMHgwMCwweDA4LAotMHgwMSwweDAwLDB4MDMsMHgyNCwweDA4LDB4MDAsMHhhMCwweDA0LDB4MjEsMHgxMCwweDA0LDB4MDEsMHgwNCwweDEwLDB4YTMsMHgwMCwKLTB4MjQsMHgxMCwweGMyLDB4MDAsMHhmYiwweGZmLDB4NDAsMHgxMCwweGZmLDB4ZmYsMHhhNSwweDI0LDB4MDEsMHgwMCwweGE1LDB4MjQsCi0weDdhLDB4NTEsMHhlNSwweGEwLDB4MjEsMHgxMCwweDA0LDB4MDEsMHg4MCwweDEwLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg0NCwweDAwLAotMHgwMiwweDgwLDB4MDMsMHgzYywweDgwLDB4MTAsMHgwMiwweDAwLDB4NjgsMHgxNSwweDYzLDB4MjQsMHgyMSwweDE4LDB4NDMsMHgwMCwKLTB4NzQsMHg1MSwweDY2LDB4OGMsMHgyMSwweDI4LDB4MDAsMHgwMCwweGYzLDB4MGQsMHgwMCwweDA4LDB4MDEsMHgwMCwweDA3LDB4MjQsCi0weDFkLDB4MDAsMHhhMiwweDI4LDB4MDgsMHgwMCwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MTAsMHhhNywweDAwLAotMHgyNCwweDEwLDB4YzIsMHgwMCwweGZhLDB4ZmYsMHg0MCwweDEwLDB4MDEsMHgwMCwweGE1LDB4MjQsMHhmZiwweGZmLDB4YTUsMHgyNCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHg3YiwweDUxLDB4NjUsMHhhMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGM4LDB4ZmYsMHhiZCwweDI3LDB4MjgsMHgwMCwweGI2LDB4YWYsMHgwMiwweDgwLDB4MTYsMHgzYywweDMwLDB4MDAsMHhiZSwweGFmLAotMHgyYywweDAwLDB4YjcsMHhhZiwweDI0LDB4MDAsMHhiNSwweGFmLDB4MjAsMHgwMCwweGI0LDB4YWYsMHgxOCwweDAwLDB4YjIsMHhhZiwKLTB4MTQsMHgwMCwweGIxLDB4YWYsMHgwMSwweDAwLDB4MTUsMHgyNCwweDIxLDB4ODgsMHgwMCwweDAwLDB4NjgsMHgxNSwweGRlLDB4MjYsCi0weDIxLDB4YTAsMHgwMCwweDAwLDB4MjEsMHg5MCwweDAwLDB4MDAsMHgyNSwweGIwLDB4MTcsMHgzYywweDM0LDB4MDAsMHhiZiwweGFmLAotMHgxYywweDAwLDB4YjMsMHhhZiwweDE0LDB4MGUsMHgwMCwweDA4LDB4MTAsMHgwMCwweGIwLDB4YWYsMHgwMSwweDAwLDB4MzEsMHgyNiwKLTB4MjAsMHgwMCwweDIyLDB4MmUsMHg5NCwweDAwLDB4NTIsMHgyNiwweDJlLDB4MDAsMHg0MCwweDEwLDB4OTQsMHgwMCwweDk0LDB4MjYsCi0weDY4LDB4MTUsMHhjMiwweDI2LDB4MjEsMHgzMCwweDQyLDB4MDIsMHg3OCwweDUxLDB4YzUsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMiwweDEzLDB4MDUsMHgwMCwweDAxLDB4MDAsMHg0MiwweDMwLDB4ZjQsMHhmZiwweDU1LDB4MTQsMHg0MiwweDFhLDB4MDUsMHgwMCwKLTB4NjgsMHg1MSwweGMyLDB4OGMsMHgwNywweDAwLDB4NjQsMHgzMCwweDAyLDB4MTEsMHgwMiwweDAwLDB4N2YsMHgwMCwweDQzLDB4MzAsCi0weDJkLDB4MDAsMHg5NSwweDEwLDB4MDcsMHgwMCwweGIzLDB4MzAsMHgwMiwweDAwLDB4ODIsMHgyOCwweDNhLDB4MDAsMHg0MCwweDE0LAotMHgwMiwweDAwLDB4MDIsMHgyNCwweDMwLDB4MDAsMHg4MiwweDEwLDB4MDMsMHgwMCwweDAyLDB4MjQsMHgzYywweDAwLDB4ODIsMHgxMCwKLTB4MWEsMHgwMCwweDYyLDB4MmMsMHgyMSwweDgwLDB4OWUsMHgwMiwweDc4LDB4NTEsMHgwMiwweDhlLDB4MDQsMHgwMCwweDYzLDB4MmUsCi0weDQyLDB4MTIsMHgwMiwweDAwLDB4MGEsMHgwMCwweDYwLDB4MTAsMHgwNywweDAwLDB4NDQsMHgzMCwweDczLDB4MGQsMHgwMCwweDBjLAotMHgyMSwweDI4LDB4NjAsMHgwMiwweDgwLDB4MjAsMHgxMywweDAwLDB4NzAsMHg1MSwweDAyLDB4YWUsMHgyMSwweDIwLDB4OTcsMHgwMCwKLTB4ODQsMHgwMSwweDgzLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MTgsMHg2MiwweDAwLDB4NzQsMHg1MSwweDAzLDB4YWUsCi0weGNlLDB4MGQsMHgwMCwweDBjLDB4MjEsMHgyMCwweDIwLDB4MDIsMHgyMSwweDEwLDB4MzcsMHgwMiwweDAxLDB4MDAsMHgzMSwweDI2LAotMHg2MCwweDAxLDB4NDMsMHg5MCwweDIwLDB4MDAsMHgyMiwweDJlLDB4OTQsMHgwMCwweDUyLDB4MjYsMHhkNCwweGZmLDB4NDAsMHgxNCwKLTB4OTQsMHgwMCwweDk0LDB4MjYsMHgzNCwweDAwLDB4YmYsMHg4ZiwweDMwLDB4MDAsMHhiZSwweDhmLDB4MmMsMHgwMCwweGI3LDB4OGYsCi0weDI4LDB4MDAsMHhiNiwweDhmLDB4MjQsMHgwMCwweGI1LDB4OGYsMHgyMCwweDAwLDB4YjQsMHg4ZiwweDFjLDB4MDAsMHhiMywweDhmLAotMHgxOCwweDAwLDB4YjIsMHg4ZiwweDE0LDB4MDAsMHhiMSwweDhmLDB4MTAsMHgwMCwweGIwLDB4OGYsMHgyMSwweDEwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgzOCwweDAwLDB4YmQsMHgyNywweDMyLDB4MDAsMHg2MiwweDJjLDB4ZGEsMHhmZiwweDQwLDB4MTAsCi0weDIxLDB4ODAsMHg5ZSwweDAyLDB4ZmYsMHhmMSwweDAzLDB4MjQsMHgyNCwweDEwLDB4YTMsMHgwMCwweDAwLDB4MDQsMHg0MiwweDM0LAotMHgyOSwweDBlLDB4MDAsMHgwOCwweDc4LDB4NTEsMHhjMiwweGFjLDB4MzgsMHgwMCwweDYyLDB4MmMsMHgxMiwweDAwLDB4NDAsMHgxNCwKLTB4MTQsMHgwMCwweDYyLDB4MmMsMHhmZiwweGYxLDB4MDMsMHgyNCwweDI0LDB4MTAsMHhhMywweDAwLDB4MDAsMHgwMiwweDQyLDB4MzQsCi0weDI5LDB4MGUsMHgwMCwweDA4LDB4NzgsMHg1MSwweGMyLDB4YWMsMHhjYiwweGZmLDB4ODAsMHgxNCwweDIxLDB4ODAsMHg5ZSwweDAyLAotMHhmZiwweGYxLDB4MDMsMHgyNCwweDI0LDB4MTAsMHhhMywweDAwLDB4MmEsMHgwZSwweDAwLDB4MDgsMHg3OCwweDUxLDB4YzIsMHhhYywKLTB4YzUsMHhmZiwweDQwLDB4MTQsMHgyMSwweDgwLDB4OWUsMHgwMiwweGZmLDB4ZjEsMHgwMywweDI0LDB4MjQsMHgxMCwweGEzLDB4MDAsCi0weDU0LDB4MGUsMHgwMCwweDA4LDB4MDAsMHgwNCwweDQyLDB4MzQsMHhiZiwweGZmLDB4NDAsMHgxMCwweDIxLDB4ODAsMHg5ZSwweDAyLAotMHhmZiwweGYxLDB4MDMsMHgyNCwweDI0LDB4MTAsMHhhMywweDAwLDB4MDAsMHgwNiwweDQyLDB4MzQsMHgyYSwweDBlLDB4MDAsMHgwOCwKLTB4NzgsMHg1MSwweGMyLDB4YWMsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4ZDgsMHhmZiwweGJkLDB4MjcsCi0weDEwLDB4MDAsMHhiMCwweGFmLDB4YzAsMHg4MCwweDA0LDB4MDAsMHgyMSwweDgwLDB4MDQsMHgwMiwweDgwLDB4ODAsMHgxMCwweDAwLAotMHgyMSwweDgwLDB4MDQsMHgwMiwweDAyLDB4ODAsMHgwMiwweDNjLDB4NjgsMHgxNSwweDQyLDB4MjQsMHg4MCwweDgwLDB4MTAsMHgwMCwKLTB4MjAsMHgwMCwweGJmLDB4YWYsMHgxYywweDAwLDB4YjMsMHhhZiwweDE4LDB4MDAsMHhiMiwweGFmLDB4MjEsMHg4MCwweDAyLDB4MDIsCi0weDE0LDB4MDAsMHhiMSwweGFmLDB4NzgsMHg1MSwweDAzLDB4OGUsMHgyNSwweGIwLDB4MDIsMHgzYywweDgwLDB4MDEsMHg1MywweDM0LAotMHgwNywweDAwLDB4NjMsMHgzMCwweDgwLDB4MTgsMHgwMywweDAwLDB4MjEsMHgxOCwweDYyLDB4MDAsMHgwMCwweDAwLDB4NzEsMHg5MiwKLTB4NzAsMHg1MSwweDA1LDB4OGUsMHg4NCwweDAxLDB4NjIsMHg4YywweDIxLDB4OTAsMHg4MCwweDAwLDB4ZmYsMHgwMCwweDMxLDB4MzIsCi0weDI0LDB4MTAsMHg0NSwweDAwLDB4Y2UsMHgwZCwweDAwLDB4MGMsMHg3NCwweDUxLDB4MDIsMHhhZSwweDdhLDB4NTEsMHgwNCwweDkyLAotMHg1YywweDBkLDB4MDAsMHgwYywweGZmLDB4MDAsMHg0NSwweDMyLDB4N2EsMHg1MSwweDA0LDB4OTIsMHg2MywweDBkLDB4MDAsMHgwYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4NDIsMHgzOCwweDA0LDB4MDAsMHgwMywweDI0LDB4MGEsMHg4OCwweDYyLDB4MDAsCi0weDAwLDB4MDAsMHg3MSwweGEyLDB4MjAsMHgwMCwweGJmLDB4OGYsMHgxYywweDAwLDB4YjMsMHg4ZiwweDE4LDB4MDAsMHhiMiwweDhmLAotMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyOCwweDAwLDB4YmQsMHgyNywKLTB4ZmYsMHhmZiwweDg0LDB4MzAsMHgwMCwweDAyLDB4ODIsMHgzMCwweDA3LDB4MDAsMHgwMywweDI0LDB4MGQsMHgwMCwweDQwLDB4MTQsCi0weDBiLDB4MDAsMHg4NCwweDMwLDB4MGMsMHgwMCwweDgyLDB4MmMsMHgwYSwweDAwLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMiwweDgwLDB4MDMsMHgzYywweDgwLDB4MTAsMHgwNCwweDAwLDB4ZjAsMHg5MSwweDYzLDB4MjQsMHgyMSwweDEwLDB4NDMsMHgwMCwKLTB4MDAsMHgwMCwweDQ0LDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA3LDB4MDAsMHgwMywweDI0LDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4NjAsMHgwMCwweDA2LDB4MDAsMHgwMywweDI0LAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHg2MCwweDAwLDB4MDUsMHgwMCwweDAzLDB4MjQsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MjEsMHgxMCwweDYwLDB4MDAsMHgwNCwweDAwLDB4MDMsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDYwLDB4MDAsCi0weDAzLDB4MDAsMHgwMywweDI0LDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4NjAsMHgwMCwweDAyLDB4MDAsMHgwMywweDI0LAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHg2MCwweDAwLDB4MDEsMHgwMCwweDAzLDB4MjQsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MjEsMHgxMCwweDYwLDB4MDAsMHgyMSwweDE4LDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDYwLDB4MDAsCi0weGEwLDB4ZmYsMHhiZCwweDI3LDB4MDIsMHg4MCwweDAyLDB4M2MsMHg1OCwweDAwLDB4YmUsMHhhZiwweDU0LDB4MDAsMHhiNywweGFmLAotMHg1MCwweDAwLDB4YjYsMHhhZiwweDRjLDB4MDAsMHhiNSwweGFmLDB4NDgsMHgwMCwweGI0LDB4YWYsMHg0MCwweDAwLDB4YjIsMHhhZiwKLTB4M2MsMHgwMCwweGIxLDB4YWYsMHg1YywweDAwLDB4YmYsMHhhZiwweDQ0LDB4MDAsMHhiMywweGFmLDB4MzgsMHgwMCwweGIwLDB4YWYsCi0weDIwLDB4OTIsMHg0MiwweDI0LDB4MDAsMHgwMCwweDUzLDB4OGMsMHgwOCwweDAwLDB4MDMsMHgyNCwweDAyLDB4ODAsMHgwYiwweDNjLAotMHgyMSwweDkwLDB4MDAsMHgwMCwweDIxLDB4YTAsMHgwMCwweDAwLDB4MjEsMHhiOCwweDAwLDB4MDAsMHgyMSwweGYwLDB4MDAsMHgwMCwKLTB4MjEsMHhhOCwweDAwLDB4MDAsMHgyMSwweGIwLDB4MDAsMHgwMCwweDIxLDB4ODgsMHg2MCwweDAyLDB4MTAsMHgwMCwweGEzLDB4YWYsCi0weDE0LDB4MDAsMHhhMCwweGFmLDB4MTgsMHgwMCwweGEwLDB4YWYsMHgxYywweDAwLDB4YTAsMHhhZiwweDIwLDB4MDAsMHhhMCwweGFmLAotMHgyNCwweDAwLDB4YTAsMHhhZiwweDI4LDB4MDAsMHhhMCwweGFmLDB4N2EsMHgwZiwweDAwLDB4MDgsMHgyYywweDAwLDB4YTAsMHhhZiwKLTB4NDQsMHg1MSwweDIyLDB4YWUsMHg2MCwweDUxLDB4MjQsMHg4ZSwweDVjLDB4NTEsMHgyNywweDhlLDB4NDgsMHg1MSwweDI4LDB4OGUsCi0weDRjLDB4NTEsMHgyNSwweDhlLDB4NTQsMHg1MSwweDI2LDB4OGUsMHg1OCwweDUxLDB4MjMsMHg4ZSwweDIxLDB4MzgsMHhlNCwweDAwLAotMHgwMiwweDgwLDB4MDQsMHgzYywweDY4LDB4MTUsMHg4NCwweDI0LDB4MjEsMHgxMCwweDA0LDB4MDIsMHgyMSwweDQwLDB4MDUsMHgwMSwKLTB4MjEsMHgzMCwweGMzLDB4MDAsMHhjYSwweDQ0LDB4NDIsMHg5MCwweDQ0LDB4NTEsMHgyYSwweDhlLDB4MGMsMHgwMCwweGUwLDB4MTAsCi0weDIxLDB4NDgsMHgwMCwweDAwLDB4MmIsMHg0OCwweDQ3LDB4MDAsMHgwYiwweDAwLDB4MjAsMHgxNSwweDAyLDB4ODAsMHgwMiwweDNjLAotMHgwNywweDAwLDB4MDIsMHgyZSwweDU5LDB4MDEsMHg0MCwweDE0LDB4YzAsMHgxMCwweDA3LDB4MDAsMHgwYywweDAwLDB4MDIsMHgyNCwKLTB4NTUsMHgwMSwweDAyLDB4MTIsMHgwZCwweDAwLDB4MDIsMHgyNCwweDU0LDB4MDEsMHgwMiwweDEyLDB4YzAsMHgxMCwweDA3LDB4MDAsCi0weDkyLDB4MDAsMHgyMCwweDExLDB4MDIsMHg4MCwweDAyLDB4M2MsMHg2OCwweDE1LDB4NDIsMHgyNCwweDgwLDB4MTgsMHgxMCwweDAwLAotMHgyMSwweDE4LDB4NjIsMHgwMCwweDIxLDB4MjAsMHgzMCwweDAyLDB4YjYsMHg1MSwweDg1LDB4OTAsMHhlYywweDQ0LDB4NjIsMHg4YywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDEwLDB4YTIsMHgwMCwweDJiLDB4MTAsMHg0YSwweDAwLDB4ODcsMHgwMCwweDQwLDB4MTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZDQsMHg1MSwweDIyLDB4OGUsMHgwMSwweDAwLDB4MDcsMHgyNCwweDA0LDB4MTgsMHgwNywweDAyLAotMHgyNCwweDEwLDB4NDMsMHgwMCwweGYwLDB4MDAsMHg0MCwweDEwLDB4MWMsMHgwMCwweDAyLDB4MmUsMHgyMSwweDI4LDB4MzAsMHgwMiwKLTB4N2MsMHg1MSwweGE2LDB4OTAsMHhiNiwweDUxLDB4YTIsMHg5MCwweDBhLDB4MDAsMHgwNCwweDI0LDB4ZmYsMHgwMCwweGMzLDB4MzAsCi0weDA0LDB4MjAsMHg0NCwweDAwLDB4MmEsMHgxOCwweDY0LDB4MDAsMHhlNywweDAwLDB4NjAsMHgxMCwweDFjLDB4MDAsMHgwMiwweDJlLAotMHgwMSwweDAwLDB4YzIsMHgyNCwweGZmLDB4MDAsMHg0MywweDMwLDB4NTYsMHgwMSwweDY0LDB4MTAsMHg3YywweDUxLDB4YTIsMHhhMCwKLTB4NjgsMHgxNSwweDY1LDB4MjUsMHg4MCwweDEwLDB4MTAsMHgwMCwweDIxLDB4MTAsMHg0NSwweDAwLDB4NjAsMHg0NSwweDQ0LDB4OGMsCi0weGVjLDB4NDQsMHg0MywweDhjLDB4MjEsMHgzMCwweGM1LDB4MDIsMHg0MCwweDEwLDB4MDQsMHgwMCwweDIxLDB4MTAsMHg0NCwweDAwLAotMHgyMSwweDE4LDB4NjIsMHgwMCwweDgyLDB4NTAsMHgwMywweDAwLDB4NDQsMHg1MSwweGNhLDB4YWMsMHg4YywweDY1LDB4YTMsMHg4YywKLTB4ZmYsMHhmZiwweDAyLDB4MzQsMHgwNywweDAwLDB4NjIsMHgxMCwweDIxLDB4MjAsMHgwMCwweDAyLDB4MjEsMHgyMCwweDAwLDB4MDIsCi0weGZmLDB4MDAsMHg0NSwweDMyLDB4NWMsMHgwZCwweDAwLDB4MGMsMHgzMCwweDAwLDB4YWIsMHhhZiwweDMwLDB4MDAsMHhhYiwweDhmLAotMHgyMSwweDIwLDB4MDAsMHgwMiwweDYzLDB4MGQsMHgwMCwweDBjLDB4MzAsMHgwMCwweGFiLDB4YWYsMHgxMCwweDAwLDB4YTQsMHg4ZiwKLTB4MDEsMHgwMCwweDQyLDB4MzgsMHgwNCwweDAwLDB4MDMsMHgyNCwweDBhLDB4MjAsMHg2MiwweDAwLDB4MTAsMHgwMCwweGE0LDB4YWYsCi0weDMwLDB4MDAsMHhhYiwweDhmLDB4MTEsMHgwMCwweDQwLDB4MTYsMHg2OCwweDE1LDB4NjIsMHgyNSwweDU4LDB4NTEsMHg0NywweDhjLAotMHg1NCwweDUxLDB4NDMsMHg4YywweDRjLDB4NTEsMHg0NCwweDk0LDB4NDgsMHg1MSwweDQ1LDB4OTQsMHg1MCwweDUxLDB4NDYsMHg5NCwKLTB4MjEsMHgxOCwweDY3LDB4MDAsMHgwMCwweDI0LDB4MDQsMHgwMCwweDI1LDB4YjAsMHgwMiwweDNjLDB4MDAsMHgxYywweDAzLDB4MDAsCi0weDIxLDB4MjgsMHhhNCwweDAwLDB4MjEsMHgzMCwweGMzLDB4MDAsMHg2YywweDBjLDB4NDQsMHgzNCwweDY4LDB4MGMsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4NDUsMHhhYywweDAwLDB4MDAsMHg4NiwweGFjLDB4NjgsMHgxNSwweDYyLDB4MjUsMHgyMSwweDEwLDB4ODIsMHgwMiwKLTB4NTgsMHg1MSwweDQwLDB4YWMsMHg1YywweDUxLDB4NDAsMHhhYywweDYwLDB4NTEsMHg0MCwweGFjLDB4NDgsMHg1MSwweDQwLDB4YWMsCi0weDRjLDB4NTEsMHg0MCwweGFjLDB4NTAsMHg1MSwweDQwLDB4YWMsMHg1NCwweDUxLDB4NDAsMHhhYywweDJjLDB4MDAsMHhhMiwweDhmLAotMHgyOCwweDAwLDB4YTQsMHg4ZiwweDAxLDB4MDAsMHg1MiwweDI2LDB4OTQsMHgwMCwweDQyLDB4MjQsMHgyYywweDAwLDB4YTIsMHhhZiwKLTB4MjQsMHgwMCwweGEyLDB4OGYsMHg5NCwweDAwLDB4ODQsMHgyNCwweDI4LDB4MDAsMHhhNCwweGFmLDB4OTQsMHgwMCwweDQyLDB4MjQsCi0weDIwLDB4MDAsMHhhNCwweDhmLDB4MjQsMHgwMCwweGEyLDB4YWYsMHgxYywweDAwLDB4YTIsMHg4ZiwweDk0LDB4MDAsMHg4NCwweDI0LAotMHgyMCwweDAwLDB4YTQsMHhhZiwweDk0LDB4MDAsMHg0MiwweDI0LDB4MTgsMHgwMCwweGE0LDB4OGYsMHgxYywweDAwLDB4YTIsMHhhZiwKLTB4MTQsMHgwMCwweGEyLDB4OGYsMHg5NCwweDAwLDB4ODQsMHgyNCwweDIwLDB4MDAsMHg0MywweDJhLDB4OTQsMHgwMCwweDQyLDB4MjQsCi0weDk0LDB4MDAsMHgzMSwweDI2LDB4OTQsMHgwMCwweGQ2LDB4MjYsMHg5NCwweDAwLDB4YjUsMHgyNiwweDE4LDB4MDAsMHhhNCwweGFmLAotMHgxNCwweDAwLDB4YTIsMHhhZiwweDk0LDB4MDAsMHhkZSwweDI3LDB4OTQsMHgwMCwweDczLDB4MjYsMHg5NCwweDAwLDB4ZjcsMHgyNiwKLTB4ZTUsMHgwMCwweDYwLDB4MTAsMHg5NCwweDAwLDB4OTQsMHgyNiwweDc4LDB4NTEsMHgyMiwweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAyLDB4MTMsMHgwMiwweDAwLDB4MDEsMHgwMCwweDQyLDB4MzAsMHhkMywweGZmLDB4NDAsMHgxMCwweDI1LDB4YjAsMHgwMiwweDNjLAotMHgyMSwweDEwLDB4NDIsMHgwMiwweDYwLDB4MDEsMHg0NCwweDkwLDB4NjAsMHg1MSwweDIzLDB4OGUsMHg1YywweDUxLDB4MjYsMHg4ZSwKLTB4ZmYsMHgwMCwweDkwLDB4MzAsMHgwMiwweDgwLDB4MDQsMHgzYywweDY4LDB4MTUsMHg4NCwweDI0LDB4MjEsMHgxMCwweDA0LDB4MDIsCi0weDczLDB4NDQsMHg0NCwweDkwLDB4NTYsMHg0NCwweDQ1LDB4OTAsMHg0NCwweDUxLDB4MjcsMHg4ZSwweDE4LDB4MDAsMHg2NCwweDAwLAotMHgxMiwweDE4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAwLDB4YzUsMHgwMCwKLTB4MTIsMHgzMCwweDAwLDB4MDAsMHgyMSwweDMwLDB4YzMsMHgwMCwweDJiLDB4MTAsMHhlNiwweDAwLDB4NTQsMHhmZiwweDQwLDB4MTAsCi0weDIzLDB4MTAsMHhlNiwweDAwLDB4ZTksMHgwZSwweDAwLDB4MDgsMHg0NCwweDUxLDB4MjAsMHhhZSwweDYyLDB4MDAsMHhlMCwweDEwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDYzLDB4MDAsMHgyMCwweDE1LDB4NjgsMHgxNSwweDYyLDB4MjUsMHg0MCwweDEwLDB4MDcsMHgwMCwKLTB4MjEsMHgxMCwweDQ3LDB4MDAsMHg4MiwweDEwLDB4MDIsMHgwMCwweDJiLDB4MTAsMHg0NiwweDAwLDB4OTksMHhmZiwweDQwLDB4MTAsCi0weDIxLDB4MjAsMHgwMCwweDAyLDB4NjgsMHgxNSwweDY4LDB4MjUsMHgyMSwweDIwLDB4YTgsMHgwMiwweDIxLDB4MzAsMHg5MCwweDAwLAotMHhkNCwweDUxLDB4ODMsMHg4YywweDAxLDB4MDAsMHgwNSwweDI0LDB4MDQsMHgxMCwweDA1LDB4MDIsMHg5OSwweDUxLDB4YzcsMHg5MCwKLTB4MjcsMHgxMCwweDAyLDB4MDAsMHgyNCwweDE4LDB4NjIsMHgwMCwweGQ0LDB4NTEsMHg4MywweGFjLDB4MDksMHgwMCwweGU1LDB4MTAsCi0weDdjLDB4NTEsMHhjMCwweGEwLDB4MTgsMHgwMCwweGEyLDB4OGYsMHgyMSwweDM4LDB4MDAsMHgwMCwweDIxLDB4MjAsMHg0OCwweDAwLAotMHgyMSwweDE4LDB4ODcsMHgwMCwweDAxLDB4MDAsMHhlNywweDI0LDB4MWQsMHgwMCwweGUyLDB4MjgsMHhmYywweGZmLDB4NDAsMHgxNCwKLTB4YjYsMHg1MSwweDYwLDB4YTAsMHgxNCwweDAwLDB4YTQsMHg4ZiwweDY4LDB4MTUsMHg2MywweDI1LDB4MjEsMHg1MCwweDYwLDB4MDAsCi0weDIxLDB4MTAsMHg4MywweDAwLDB4MjEsMHgxMCwweDUwLDB4MDAsMHg5OSwweDUxLDB4NDAsMHhhMCwweDAyLDB4ODAsMHgwMywweDNjLAotMHgwMiwweDgwLDB4MDIsMHgzYywweDRjLDB4OTEsMHg0OSwweDI0LDB4ZDgsMHg5MCwweDY4LDB4MjQsMHgyMSwweDM4LDB4MDAsMHgwMCwKLTB4ODAsMHgxOCwweDA3LDB4MDAsMHgyMSwweDEwLDB4NjksMHgwMCwweDIxLDB4MjAsMHg2OCwweDAwLDB4MDAsMHgwMCwweDQ2LDB4OGMsCi0weDAwLDB4MDAsMHg4NSwweDhjLDB4MDEsMHgwMCwweGU3LDB4MjQsMHgyMSwweDE4LDB4NmEsMHgwMCwweDFkLDB4MDAsMHhlMiwweDI4LAotMHhlYywweDQ0LDB4NjUsMHhhYywweGY2LDB4ZmYsMHg0MCwweDE0LDB4NjAsMHg0NSwweDY2LDB4YWMsMHgxNCwweDAwLDB4MDAsMHgxMiwKLTB4NjgsMHgxNSwweDYzLDB4MjUsMHg3YiwweDUxLDB4NjIsMHg5MiwweGZmLDB4ZmYsMHgwNywweDI2LDB4MmEsMHgxMCwweGUyLDB4MDAsCi0weDBlLDB4MDAsMHg0MCwweDE0LDB4MDIsMHg4MCwweDBiLDB4M2MsMHg2OCwweDE1LDB4NjIsMHgyNSwweDIxLDB4MTAsMHhjMiwweDAzLAotMHg3YiwweDUxLDB4NDUsMHg5MCwweDc0LDB4NTEsMHg0NCwweDhjLDB4MDEsMHgwMCwweDA2LDB4MjQsMHgwNCwweDE4LDB4ZTYsMHgwMCwKLTB4MjQsMHgxMCwweDgzLDB4MDAsMHhiMywweDAwLDB4NDMsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHhmZiwweGU3LDB4MjQsCi0weDJhLDB4MTAsMHhlNSwweDAwLDB4ZmEsMHhmZiwweDQwLDB4MTAsMHgwNCwweDE4LDB4ZTYsMHgwMCwweDY4LDB4MTUsMHg2MywweDI1LAotMHg4MCwweDEwLDB4MTAsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLDB4NjAsMHg0NSwweDQ1LDB4OGMsMHhlYywweDQ0LDB4NDQsMHg4YywKLTB4MDIsMHg4MCwweDAzLDB4M2MsMHg0MCwweDEwLDB4MDUsMHgwMCwweDhlLDB4N2QsMHg2NiwweDkwLDB4MjEsMHgxMCwweDQ1LDB4MDAsCi0weDIxLDB4MjAsMHg4MiwweDAwLDB4MjIsMHgwMCwweDAyLDB4MjQsMHg5OCwweDAwLDB4YzIsMHgxMCwweDgyLDB4NTAsMHgwNCwweDAwLAotMHhkNCwweDUxLDB4NjMsMHg4ZSwweDAxLDB4MDAsMHgwMiwweDI0LDB4MDQsMHgxMCwweDAyLDB4MDIsMHgyNSwweDE4LDB4NjIsMHgwMCwKLTB4ZDQsMHg1MSwweDYzLDB4YWUsMHg2OCwweDE1LDB4NjMsMHgyNSwweDIxLDB4MTAsMHhlMywweDAyLDB4NDQsMHg1MSwweDRhLDB4YWMsCi0weDhjLDB4NjUsMHg2NCwweDhjLDB4ZmYsMHhmZiwweDAyLDB4MzQsMHgzYywweGZmLDB4ODIsMHgxNCwweDIxLDB4MjAsMHgwMCwweDAyLAotMHgzOSwweDBmLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2UsMHhmZiwweDIwLDB4MTEsMHgyMSwweDIwLDB4MDAsMHgwMiwKLTB4NjgsMHgxNSwweDYyLDB4MjUsMHg4MCwweDE4LDB4MTAsMHgwMCwweDIxLDB4MTgsMHg2MiwweDAwLDB4NjAsMHg0NSwweDY0LDB4OGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MmIsMHgyMCwweDQ0LDB4MDEsMHgzNiwweGZmLDB4ODAsMHgxMCwweDIxLDB4MjAsMHgwMCwweDAyLAotMHhhMiwweDBmLDB4MDAsMHgwOCwweDY4LDB4MTUsMHg2OCwweDI1LDB4MWUsMHhmZiwweDQwLDB4MTAsMHg2OCwweDE1LDB4NjUsMHgyNSwKLTB4MjEsMHgyMCwweDMwLDB4MDIsMHg5OSwweDUxLDB4ODMsMHg5MCwweDAxLDB4MDAsMHgwMiwweDI0LDB4NjMsMHgwMCwweDYyLDB4MTAsCi0weDAyLDB4ODAsMHgwMiwweDNjLDB4MmMsMHgwMCwweGEzLDB4OGYsMHg2OCwweDE1LDB4NDIsMHgyNCwweDIxLDB4MzgsMHgwMCwweDAwLAotMHgyMSwweDIwLDB4NjIsMHgwMCwweDIxLDB4MTgsMHg4NywweDAwLDB4MDEsMHgwMCwweGU3LDB4MjQsMHgxZCwweDAwLDB4ZTIsMHgyOCwKLTB4ZmMsMHhmZiwweDQwLDB4MTQsMHhiNiwweDUxLDB4NjAsMHhhMCwweDI4LDB4MDAsMHhhMywweDhmLDB4MDIsMHg4MCwweDBiLDB4M2MsCi0weDY4LDB4MTUsMHg2NSwweDI1LDB4MjEsMHgzMCwweDY1LDB4MDAsMHhkNCwweDUxLDB4YzIsMHg4YywweDAxLDB4MDAsMHgwMywweDI0LAotMHgwNCwweDE4LDB4MDMsMHgwMiwweDI3LDB4MTgsMHgwMywweDAwLDB4MjEsMHgyMCwweGQwLDB4MDAsMHgyNCwweDEwLDB4NDMsMHgwMCwKLTB4OTksMHg1MSwweDgwLDB4YTAsMHhkNCwweDUxLDB4YzIsMHhhYywweDEyLDB4MDAsMHgwMCwweDE2LDB4N2MsMHg1MSwweDgwLDB4YTAsCi0weDdhLDB4NTEsMHhjMiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZSwweDAwLDB4NDAsMHgxMCwweDAxLDB4MDAsMHgwNywweDI0LAotMHgyNCwweDAwLDB4YTQsMHg4ZiwweDAxLDB4MDAsMHgwNiwweDI0LDB4MjEsMHgxMCwweDg1LDB4MDAsMHg3YSwweDUxLDB4NDQsMHg5MCwKLTB4NzQsMHg1MSwweDQ1LDB4OGMsMHgwNCwweDE4LDB4ZTYsMHgwMCwweDI0LDB4MTAsMHhhMywweDAwLDB4NWIsMHgwMCwweDQzLDB4MTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweGU3LDB4MjQsMHgyYSwweDEwLDB4ODcsMHgwMCwweGZhLDB4ZmYsMHg0MCwweDEwLAotMHgwNCwweDE4LDB4ZTYsMHgwMCwweDIwLDB4MDAsMHhhMiwweDhmLDB4MDIsMHg4MCwweDBiLDB4M2MsMHg2OCwweDE1LDB4NjQsMHgyNSwKLTB4MjEsMHgxOCwweDQ0LDB4MDAsMHg3YSwweDUxLDB4NjIsMHg5MCwweDAxLDB4MDAsMHgwNywweDI2LDB4MmEsMHgxMCwweDQ3LDB4MDAsCi0weDBlLDB4MDAsMHg0MCwweDE0LDB4MDEsMHgwMCwweDA2LDB4MjQsMHgxYywweDAwLDB4YTMsMHg4ZiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyMSwweDEwLDB4NjQsMHgwMCwweDdhLDB4NTEsMHg0NSwweDkwLDB4NzQsMHg1MSwweDQ0LDB4OGMsMHgwNCwweDE4LDB4ZTYsMHgwMCwKLTB4MjQsMHgxMCwweDgzLDB4MDAsMHg0MiwweDAwLDB4NDMsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweGU3LDB4MjQsCi0weDJhLDB4MTAsMHhhNywweDAwLDB4ZmEsMHhmZiwweDQwLDB4MTAsMHgwNCwweDE4LDB4ZTYsMHgwMCwweDAyLDB4ODAsMHgwMiwweDNjLAotMHg4ZSwweDdkLDB4NDQsMHg5MCwweDIyLDB4MDAsMHgwMywweDI0LDB4ZDYsMHhmZSwweDgzLDB4MTQsMHg2OCwweDE1LDB4NjUsMHgyNSwKLTB4ZWUsMHhmZiwweDAyLDB4MjYsMHhmZiwweDAwLDB4NDIsMHgzMCwweDAyLDB4MDAsMHg0MiwweDJjLDB4MTgsMHgwMCwweDAzLDB4MjQsCi0weDI1LDB4MGYsMHgwMCwweDA4LDB4MGIsMHg4MCwweDYyLDB4MDAsMHhjMCwweDEwLDB4MDcsMHgwMCwweDIzLDB4MTAsMHg0NywweDAwLAotMHhjMiwweDEwLDB4MDIsMHgwMCwweDJiLDB4MTAsMHg0OCwweDAwLDB4YjYsMHhmZSwweDQwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDQsMHgwZiwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHhhMywweDhmLDB4NWMsMHgwMCwweGJmLDB4OGYsCi0weDU4LDB4MDAsMHhiZSwweDhmLDB4NTQsMHgwMCwweGI3LDB4OGYsMHg1MCwweDAwLDB4YjYsMHg4ZiwweDRjLDB4MDAsMHhiNSwweDhmLAotMHg0OCwweDAwLDB4YjQsMHg4ZiwweDQ0LDB4MDAsMHhiMywweDhmLDB4NDAsMHgwMCwweGIyLDB4OGYsMHgzYywweDAwLDB4YjEsMHg4ZiwKLTB4MzgsMHgwMCwweGIwLDB4OGYsMHgyNSwweGIwLDB4MDIsMHgzYywweDgwLDB4MDEsMHg0MiwweDM0LDB4NjAsMHgwMCwweGJkLDB4MjcsCi0weDAwLDB4MDAsMHg0MywweGEwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MDAsMHgwMiwweDJlLAotMHgwYSwweDAwLDB4NDAsMHgxNCwweDA1LDB4MDAsMHgwMiwweDJlLDB4YjYsMHg1MSwweDgzLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDUsMHgwMCwweDYyLDB4MmMsMHhhMCwweGZmLDB4NDAsMHgxMCwweDAxLDB4MDAsMHg2MiwweDI0LDB4MTYsMHgxMCwweDAwLDB4MDgsCi0weGI2LDB4NTEsMHg4MiwweGEwLDB4MjQsMHgwZiwweDAwLDB4MDgsMHg5OSwweDUxLDB4YTcsMHhhMCwweDA0LDB4MDAsMHg0MCwweDEwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGI2LDB4NTEsMHg4MywweDkwLDB4NzUsMHgxMCwweDAwLDB4MDgsMHgwMywweDAwLDB4NjIsMHgyYywKLTB4YjYsMHg1MSwweDgzLDB4OTAsMHg3NSwweDEwLDB4MDAsMHgwOCwweDA0LDB4MDAsMHg2MiwweDJjLDB4MTMsMHgwMCwweDAyLDB4MjQsCi0weDY3LDB4ZmYsMHgwMiwweDE2LDB4NjgsMHgxNSwweDYzLDB4MjUsMHhmMywweDBmLDB4MDAsMHgwOCwweDIxLDB4MTAsMHhlMywweDAyLAotMHhmZiwweDAwLDB4ZjAsMHgzMCwweDRjLDB4MTAsMHgwMCwweDA4LDB4MDIsMHg4MCwweDAyLDB4M2MsMHgzNSwweDEwLDB4MDAsMHgwOCwKLTB4ZmYsMHgwMCwweGYwLDB4MzAsMHhkZiwweDBmLDB4MDAsMHgwOCwweGZmLDB4MDAsMHhmMCwweDMwLDB4ZDgsMHhmZiwweGJkLDB4MjcsCi0weDAyLDB4ODAsMHgwMiwweDNjLDB4MTQsMHgwMCwweGIxLDB4YWYsMHgyNCwweDAwLDB4YmYsMHhhZiwweDIwLDB4MDAsMHhiNCwweGFmLAotMHgxYywweDAwLDB4YjMsMHhhZiwweDE4LDB4MDAsMHhiMiwweGFmLDB4MTAsMHgwMCwweGIwLDB4YWYsMHg2OCwweDE1LDB4NDUsMHgyNCwKLTB4MDUsMHg2NSwweGE0LDB4OTAsMHgwMCwweDY1LDB4YTMsMHg4YywweGZjLDB4NjQsMHhhMiwweDhjLDB4MjEsMHg4OCwweDY0LDB4MDAsCi0weDJiLDB4MTAsMHgyMiwweDAyLDB4NjAsMHgwMCwweDQwLDB4MTAsMHgyMSwweDgwLDB4YTAsMHgwMCwweDAyLDB4ODAsMHgxNCwweDNjLAotMHgyMSwweDk4LDB4YTAsMHgwMCwweGE4LDB4MTAsMHgwMCwweDA4LDB4MjEsMHg5MCwweGEwLDB4MDAsMHhmYywweDY0LDB4NDIsMHg4ZSwKLTB4MTAsMHgwMCwweDMxLDB4MjYsMHgyYiwweDEwLDB4MjIsMHgwMiwweDU3LDB4MDAsMHg0MCwweDEwLDB4MjEsMHg4MCwweDQwLDB4MDIsCi0weDA1LDB4NjUsMHgwMiwweDkyLDB4ZmYsMHhmZiwweDIzLDB4MzIsMHgwMiwweDgwLDB4MDUsMHgzYywweDEwLDB4MDAsMHg0MiwweDI0LAotMHgyNSwweDI4LDB4NjUsMHgwMCwweDJjLDB4NzksMHg4NCwweDI2LDB4MTAsMHgwMCwweDA2LDB4MjQsMHg5ZiwweDQ1LDB4MDAsMHgwYywKLTB4MDUsMHg2NSwweDAyLDB4YTIsMHhjOCwweDYzLDB4MDYsMHg4ZSwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDIsMHgyNCwweDA2LDB4MDAsCi0weDFmLDB4MDAsMHg4NCwweDMwLDB4YzAsMHgxMCwweDA0LDB4MDAsMHgyMSwweDEwLDB4NDQsMHgwMCwweDgwLDB4MTAsMHgwMiwweDAwLAotMHgyMSwweDEwLDB4NDQsMHgwMCwweDgwLDB4MTAsMHgwMiwweDAwLDB4MjEsMHgzOCwweDUwLDB4MDAsMHg3OCwweDUxLDB4ZTMsMHg4YywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDFiLDB4MDMsMHgwMCwweDAxLDB4MDAsMHg2MywweDMwLDB4ZTMsMHhmZiwweDYwLDB4MTAsCi0weDI1LDB4YjAsMHgwMiwweDNjLDB4YzQsMHg2MywweDA1LDB4OGUsMHgyMSwweDEwLDB4ODIsMHgwMCwweDYwLDB4MDEsMHg0NCwweDkwLAotMHg4MiwweDFkLDB4MDUsMHgwMCwweDNmLDB4MDAsMHg2MywweDMwLDB4MDQsMHgwMCwweDBhLDB4MjQsMHgwNSwweDAwLDB4NjIsMHgyOCwKLTB4MjEsMHg0MCwweDQwLDB4MDEsMHgwYiwweDQwLDB4NjIsMHgwMCwweDA3LDB4MDAsMHhhMCwweDA0LDB4ZmYsMHgwMCwweDg5LDB4MzAsCi0weDY0LDB4NTEsMHhlMiwweDhjLDB4MDQsMHgwMCwweDA4LDB4MjQsMHgwMSwweDAwLDB4NDIsMHgyNCwweDY0LDB4NTEsMHhlMiwweGFjLAotMHhjOCwweDYzLDB4NjYsMHg4ZSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgxMywweDA2LDB4MDAsMHgxZiwweDAwLDB4NDIsMHgzMCwKLTB4MDgsMHgwMCwweDQyLDB4MjgsMHhjZCwweGZmLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzQsMHg2MywweDYyLDB4OGUsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHgwMCwweDQyLDB4MzAsMHhjOCwweGZmLDB4NDksMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyOSwweDAwLDB4MDAsMHgxMSwweDAxLDB4MDAsMHgwMiwweDI0LDB4MmUsMHgwMCwweDAyLDB4MTEsMHgwMiwweDAwLDB4MDIsMHgyNCwKLTB4MzMsMHgwMCwweDAyLDB4MTEsMHgwMywweDAwLDB4MDIsMHgyNCwweDM4LDB4MDAsMHgwMiwweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDNiLDB4MDAsMHgwYSwweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDUxLDB4ZTIsMHg4YywweDIxLDB4MTgsMHgzMywweDAxLAotMHg5MCwweDQ0LDB4NjQsMHg5MCwweDAyLDB4MTEsMHgwMiwweDAwLDB4MmIsMHgxMCwweDQ0LDB4MDAsMHgzZSwweDAwLDB4NDAsMHgxNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg1YywweDUxLDB4ZTMsMHg4YywweDgwLDB4MTAsMHgwOSwweDAwLDB4MjEsMHgxMCwweDQ5LDB4MDAsCi0weDAxLDB4MDAsMHg2MywweDI0LDB4MjEsMHgxMCwweDUzLDB4MDAsMHg1YywweDUxLDB4ZTMsMHhhYywweDIxLDB4MTAsMHg0OCwweDAwLAotMHgzNCwweDQzLDB4NDQsMHg5MCwweDQ0LDB4NTEsMHhlMywweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMSwweDE4LDB4NjQsMHgwMCwKLTB4NDQsMHg1MSwweGUzLDB4YWMsMHhmYywweDY0LDB4NDIsMHg4ZSwweDEwLDB4MDAsMHgzMSwweDI2LDB4MmIsMHgxMCwweDIyLDB4MDIsCi0weGFiLDB4ZmYsMHg0MCwweDE0LDB4MjEsMHg4MCwweDQwLDB4MDIsMHgyNCwweDAwLDB4YmYsMHg4ZiwweDIwLDB4MDAsMHhiNCwweDhmLAotMHgxYywweDAwLDB4YjMsMHg4ZiwweDE4LDB4MDAsMHhiMiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgyOCwweDAwLDB4YmQsMHgyNywweDQ4LDB4NTEsMHhlMiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg0MiwweDI0LDB4NDgsMHg1MSwweGUyLDB4YWMsMHgwMSwweDAwLDB4MDIsMHgyNCwweGQ0LDB4ZmYsMHgwMiwweDE1LAotMHgwMiwweDAwLDB4MDIsMHgyNCwweDRjLDB4NTEsMHhlMiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4NDIsMHgyNCwKLTB4NGMsMHg1MSwweGUyLDB4YWMsMHgwMiwweDAwLDB4MDIsMHgyNCwweGNmLDB4ZmYsMHgwMiwweDE1LDB4MDMsMHgwMCwweDAyLDB4MjQsCi0weDUwLDB4NTEsMHhlMiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4NDIsMHgyNCwweDUwLDB4NTEsMHhlMiwweGFjLAotMHgwMywweDAwLDB4MDIsMHgyNCwweGNhLDB4ZmYsMHgwMiwweDE1LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg1NCwweDUxLDB4ZTIsMHg4YywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4NDIsMHgyNCwweGM3LDB4ZmYsMHgwYSwweDE1LDB4NTQsMHg1MSwweGUyLDB4YWMsCi0weDU4LDB4NTEsMHhlMiwweDhjLDB4MjEsMHgxOCwweDMzLDB4MDEsMHgwMSwweDAwLDB4NDIsMHgyNCwweDU4LDB4NTEsMHhlMiwweGFjLAotMHg2OCwweDUxLDB4ZTIsMHg4YywweDkwLDB4NDQsMHg2NCwweDkwLDB4MDIsMHgxMSwweDAyLDB4MDAsMHgyYiwweDEwLDB4NDQsMHgwMCwKLTB4YzQsMHhmZiwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4NTEsMHhlMywweDhjLDB4ODAsMHgxMCwweDA5LDB4MDAsCi0weDIxLDB4MTAsMHg0OSwweDAwLDB4MDEsMHgwMCwweDYzLDB4MjQsMHgyMSwweDEwLDB4NTMsMHgwMCwweDYwLDB4NTEsMHhlMywweGFjLAotMHgyMSwweDEwLDB4NDgsMHgwMCwweGM1LDB4NDMsMHg0NCwweDkwLDB4NDQsMHg1MSwweGUzLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjEsMHgxOCwweDY0LDB4MDAsMHhmOSwweDEwLDB4MDAsMHgwOCwweDQ0LDB4NTEsMHhlMywweGFjLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDI1LDB4YjAsMHgwNSwweDNjLDB4MDIsMHg4MCwweDAzLDB4M2MsMHg1OCwweDAwLDB4NGEsMHgzNCwweDVjLDB4MDAsMHg0YiwweDM0LAotMHg0YywweDAwLDB4YTIsMHgzNCwweDAwLDB4MDAsMHg0NCwweDkwLDB4NjgsMHgxNSwweDY2LDB4MjQsMHhlZCwweDRhLDB4YzIsMHg5MCwKLTB4MjksMHhiMCwweDA3LDB4M2MsMHgwMywweDAwLDB4ODQsMHgzMCwweDIxLDB4MTgsMHhjMCwweDAwLDB4MGYsMHgwMCwweDQ0LDB4MTAsCi0weDA0LDB4MDAsMHhlOCwweDM0LDB4MDcsMHgwMCwweDgwLDB4MTQsMHg1OCwweDBjLDB4YTksMHgzNCwweGU2LDB4NDIsMHhjMiwweDkwLAotMHgxYywweDAwLDB4MDYsMHgyNCwweDAzLDB4MDAsMHg0MCwweDE0LDB4NTAsMHgwYywweGE1LDB4MzQsMHgwMCwweDAwLDB4YTYsMHhhMCwKLTB4MDAsMHgwMCwweDI2LDB4YTEsMHgwMCwweDAwLDB4NDIsMHg4ZCwweGVkLDB4NGEsMHg2NCwweGEwLDB4MDAsMHgwMCwweGUyLDB4YWMsCi0weDAwLDB4MDAsMHg2MiwweDhkLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHhhZCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgyMSwweDEwLDB4MDAsMHgwMCwweDI1LDB4YjAsMHgwZCwweDNjLDB4ZTgsMHhmZiwweGJkLDB4MjcsMHgxMCwweDAwLDB4YmYsMHhhZiwKLTB4MmQsMHgwYSwweGE3LDB4MzUsMHhhMiwweDBkLDB4YTIsMHgzNSwweGE0LDB4MGQsMHhhMywweDM1LDB4YTYsMHgwZCwweGE0LDB4MzUsCi0weGE4LDB4MGQsMHhhNSwweDM1LDB4MDAsMHgwMCwweDQ4LDB4OTQsMHgwMCwweDAwLDB4NjksMHg5NCwweDAwLDB4MDAsMHg4YSwweDk0LAotMHgwMCwweDAwLDB4YWIsMHg5NCwweDAwLDB4MDAsMHhlMywweDkwLDB4NWIsMHgwYSwweGE0LDB4MzUsMHg1YywweDBhLDB4YTYsMHgzNSwKLTB4MDAsMHgyZSwweDAzLDB4MDAsMHgwMywweDJlLDB4MDUsMHgwMCwweDQwLDB4MDAsMHhhMiwweDM0LDB4MDAsMHgwMCwweGUyLDB4YTAsCi0weDAwLDB4MDAsMHg4NSwweDkwLDB4MDAsMHgwMCwweGMzLDB4OTAsMHgwMiwweDgwLDB4MGUsMHgzYywweDY4LDB4MTUsMHhjYywweDI1LAotMHhmZiwweGZmLDB4MjIsMHgzMSwweGZmLDB4MDAsMHhhNSwweDMwLDB4ZmYsMHhmZiwweDA0LDB4MzEsMHgyMSwweDIwLDB4ODIsMHgwMCwKLTB4ZmYsMHgwMCwweDYzLDB4MzAsMHgwMCwweDQwLDB4ODcsMHg4ZCwweDAwLDB4MmEsMHgwNSwweDAwLDB4ZmYsMHhmZiwweDQ2LDB4MzEsCi0weDIxLDB4MjgsMHhhMywweDAwLDB4ZmYsMHhmZiwweDYyLDB4MzEsMHgyMSwweDIwLDB4ODYsMHgwMCwweDIxLDB4MjAsMHg4MiwweDAwLAotMHhmZiwweGZmLDB4YTMsMHgzMCwweDY0LDB4MGMsMHhhMiwweDM1LDB4MDAsMHgwMCwweDQ1LDB4YTQsMHgyMSwweDIwLDB4ODMsMHgwMCwKLTB4MGYsMHgwMCwweGU3LDB4MzAsMHgwMSwweDAwLDB4MDIsMHgyNCwweGUwLDB4NDIsMHg4NCwweGFkLDB4ZDgsMHg0MiwweDg4LDB4YTUsCi0weGRhLDB4NDIsMHg4OSwweGE1LDB4ZGMsMHg0MiwweDhhLDB4YTUsMHhkZSwweDQyLDB4OGIsMHhhNSwweDA3LDB4MDAsMHhlMiwweDEwLAotMHhlNCwweDQyLDB4ODUsMHhhNSwweGE4LDB4NTYsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4YmYsMHg4ZiwKLTB4MjEsMHgxMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDE4LDB4MDAsMHhiZCwweDI3LDB4NGMsMHgwMCwweGEzLDB4MzUsCi0weDAwLDB4MDAsMHg2MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywweDAwLDB4NDIsMHgzMCwweDY3LDB4MDAsMHg0NywweDEwLAotMHg2OCwweDE1LDB4YzQsMHgyNSwweGU2LDB4NDIsMHg4MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZCwweDAwLDB4NDAsMHgxMCwKLTB4MDEsMHgwMCwweDAzLDB4MjQsMHg2OCwweDE1LDB4YzUsMHgyNSwweGU2LDB4NDIsMHhhMywweDkwLDB4ZmYsMHgwMCwweDAyLDB4MjQsCi0weGVjLDB4ZmYsMHg2MiwweDE0LDB4MjUsMHhiMCwweDAzLDB4M2MsMHhjOCwweDQyLDB4YTIsMHg5NCwweGUwLDB4NDIsMHhhNiwweDhjLAotMHg1MCwweDBjLDB4NjMsMHgzNCwweDAwLDB4MDAsMHg2NCwweDkwLDB4MmIsMHgxMCwweGMyLDB4MDAsMHg1ZSwweDAwLDB4NDAsMHgxNCwKLTB4N2YsMHgwMCwweDg0LDB4MzAsMHhjYSwweDQyLDB4YTIsMHg5NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmIsMHgxMCwweGMyLDB4MDAsCi0weDA5LDB4MDAsMHg0MCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjYywweDQyLDB4YTIsMHg5NCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyYiwweDEwLDB4YzIsMHgwMCwweDAyLDB4MDAsMHg0MCwweDEwLDB4MDIsMHgwMCwweDgyLDB4MjQsMHgwMSwweDAwLDB4ODIsMHgyNCwKLTB4ZmYsMHgwMCwweDQ0LDB4MzAsMHg2OCwweDE1LDB4YzUsMHgyNSwweGQwLDB4NDIsMHhhMywweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDJiLDB4MTAsMHg2NCwweDAwLDB4NGUsMHgwMCwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIxLDB4MjAsMHg2MCwweDAwLAotMHg2OCwweDE1LDB4YzMsMHgyNSwweGUwLDB4NDIsMHg2MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOSwweDAzLDB4NDIsMHgyYywKLTB4MDIsMHgwMCwweDQwLDB4MTQsMHgyNSwweGIwLDB4MDIsMHgzYywweGQwLDB4NDIsMHg2NCwweDkwLDB4NTgsMHgwYywweDQzLDB4MzQsCi0weDUwLDB4MGMsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQ0LDB4YTAsMHgwMCwweDAwLDB4NjQsMHhhMCwweDg1LDB4MTEsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHg4MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDEyLDB4MDIsMHgwMCwKLTB4MGYsMHgwMCwweDQyLDB4MzAsMHhkMCwweGZmLDB4NDMsMHgxNCwweDY4LDB4MTUsMHhjNSwweDI1LDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDRjLDB4MDAsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4MDAsMHg2MywweDMwLAotMHhiOCwweGZmLDB4NjAsMHgxMCwweGZmLDB4ZmYsMHgwMiwweDM0LDB4ZGMsMHg2MywweDgzLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4YjQsMHhmZiwweDYyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUwLDB4NDIsMHg4MywweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDY1LDB4MDAsMHg2MiwweDJjLDB4M2IsMHgwMCwweDQwLDB4MTQsMHgyOCwweDAwLDB4NjIsMHgyYywweGQyLDB4NDIsMHg4MywweDkwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTYsMHgwMywweDAwLDB4MDMsMHgxNiwweDAyLDB4MDAsMHhmZSwweGZmLDB4NDIsMHgyNCwKLTB4ZmMsMHhmZiwweDQyLDB4MjgsMHgwMiwweDAwLDB4NDAsMHgxMCwweGZlLDB4ZmYsMHg2MiwweDI0LDB4ZmMsMHhmZiwweDAyLDB4MjQsCi0weGQyLDB4NDIsMHg4MiwweGEwLDB4NjgsMHgxNSwweGM0LDB4MjUsMHhkYywweDYzLDB4ODIsMHg4YywweGQyLDB4NDIsMHg4MywweDkwLAotMHhjZSwweDQyLDB4ODYsMHg5MCwweDAyLDB4MTEsMHgwMiwweDAwLDB4N2YsMHgwMCwweDQyLDB4MzAsMHgwYSwweDAwLDB4NDUsMHgyNCwKLTB4MjMsMHgxOCwweGEzLDB4MDAsMHgwMCwweDJlLDB4MDMsMHgwMCwweDAzLDB4MmUsMHgwNSwweDAwLDB4ZmYsMHgwMCwweGMyLDB4MzAsCi0weDJhLDB4MTAsMHg0NSwweDAwLDB4MTcsMHgwMCwweDQwLDB4MTAsMHgyNSwweGIwLDB4MDIsMHgzYywweDAwLDB4MmUsMHgwNiwweDAwLAotMHgwMywweDJlLDB4MDUsMHgwMCwweDU4LDB4MGMsMHg0MywweDM0LDB4NTAsMHgwYywweDQyLDB4MzQsMHgwMCwweDAwLDB4NDUsMHhhMCwKLTB4MDAsMHgwMCwweDY1LDB4YTAsMHg4NSwweDExLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTYsMHg0MiwweDgyLDB4OTEsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4OTcsMHhmZiwweDQwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4ZmYsMHgwMiwweDI0LAotMHg5MSwweDExLDB4MDAsMHgwOCwweGU2LDB4NDIsMHg4MiwweGExLDB4YWMsMHgxMSwweDAwLDB4MDgsMHhmZiwweGZmLDB4ODIsMHgyNCwKLTB4ZDEsMHg0MiwweGEzLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDJiLDB4MTAsMHg4MywweDAwLDB4YjQsMHgxMSwweDAwLDB4MDgsCi0weDBiLDB4MjAsMHg2MiwweDAwLDB4Y2YsMHg0MiwweDgzLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAsMHg2MiwweDMwLAotMHgyYSwweDEwLDB4YTIsMHgwMCwweDBiLDB4MjgsMHg2MiwweDAwLDB4MjUsMHhiMCwweDAyLDB4M2MsMHg1OCwweDBjLDB4NDMsMHgzNCwKLTB4NTAsMHgwYywweDQyLDB4MzQsMHgwMCwweDAwLDB4NDUsMHhhMCwweDAwLDB4MDAsMHg2NSwweGEwLDB4ODUsMHgxMSwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4Y2YsMHhmZiwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGQyLDB4NDIsMHg4MywweDkwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTYsMHgwMywweDAwLDB4MDMsMHgxNiwweDAyLDB4MDAsMHgwMiwweDAwLDB4NDIsMHgyNCwKLTB4MGQsMHgwMCwweDQyLDB4MjgsMHgwMywweDAwLDB4NDAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHgxMSwweDAwLDB4MDgsCi0weDBjLDB4MDAsMHgwMiwweDI0LDB4ZTAsMHgxMSwweDAwLDB4MDgsMHgwMiwweDAwLDB4NjIsMHgyNCwweGMwLDB4ZmYsMHhiZCwweDI3LAotMHgxOCwweDAwLDB4YjAsMHhhZiwweDI1LDB4YjAsMHgxMCwweDNjLDB4MjgsMHgwMCwweGI0LDB4YWYsMHgyNCwweDAwLDB4YjMsMHhhZiwKLTB4MWMsMHgwMCwweGIxLDB4YWYsMHgzYywweDAwLDB4YmYsMHhhZiwweDM4LDB4MDAsMHhiZSwweGFmLDB4MzQsMHgwMCwweGI3LDB4YWYsCi0weDMwLDB4MDAsMHhiNiwweGFmLDB4MmMsMHgwMCwweGI1LDB4YWYsMHgyMCwweDAwLDB4YjIsMHhhZiwweGQ4LDB4MDAsMHgwNiwweDM2LAotMHgwMCwweDAwLDB4YzMsMHg5MCwweDAyLDB4ODAsMHgwMiwweDNjLDB4NjgsMHgxNSwweDU0LDB4MjQsMHgyYSwweGIwLDB4MTEsMHgzYywKLTB4YTAsMHhmZiwweDAyLDB4MjQsMHgyNSwweDE4LDB4NjIsMHgwMCwweDM0LDB4MDAsMHgyNSwweDM2LDB4ZmUsMHhmZiwweDAyLDB4MjQsCi0weGJjLDB4NDIsMHg5MiwweDkyLDB4NDAsMHgwMCwweDA0LDB4MjQsMHgwMCwweDAwLDB4YzMsMHhhMCwweDAwLDB4MDAsMHhhMiwweGEwLAotMHhhMSwweDRlLDB4MDAsMHgwYywweDAwLDB4OTYsMHgxMiwweDAwLDB4MjEsMHg5OCwweDQwLDB4MDAsMHg2YiwweDAwLDB4NjAsMHgxMiwKLTB4MDAsMHg0MCwweDAyLDB4M2MsMHgwOCwweDAwLDB4NjMsMHg4ZSwweGIwLDB4MDMsMHgwMiwweDM2LDB4MjEsMHgyMCwweDYwLDB4MDIsCi0weDAwLDB4MDAsMHg0MywweGFjLDB4M2EsMHg0NSwweDAwLDB4MGMsMHgyMSwweGI4LDB4ODAsMHgwMiwweDAxLDB4MDAsMHgxZSwweDI0LAotMHg0MiwweDAwLDB4MTYsMHgzNiwweDAzLDB4MGMsMHgxMSwweDM2LDB4MTcsMHgwZSwweDE1LDB4MzYsMHgwNCwweDAwLDB4MTQsMHgyNCwKLTB4MmEsMHhiMCwweDAzLDB4M2MsMHgwNiwweDAwLDB4NjMsMHgzNCwweDAwLDB4MDAsMHg2MiwweDk0LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4ZmYsMHg0MiwweDMwLDB4MGEsMHgwMCwweDQwLDB4MTgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4ODAsMHgwNCwweDNjLAotMHhjOCwweDk0LDB4ODQsMHgyNCwweDAwLDB4MDAsMHg4MywweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjIsMHg5NCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4NDIsMHgzMCwweGZjLDB4ZmYsMHg0MCwweDFjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHg2NSwweDhlLDB4MjAsMHgxMCwweDA2LDB4M2MsMHgwMCwweGZlLDB4YzYsMHgzNCwweDQwLDB4MDAsMHgwNywweDI0LAotMHgwMSwweDAwLDB4MDQsMHgyNCwweDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGJlLDB4YWYsMHg0ZCwweDAxLDB4MDAsMHgwYywKLTB4MDEsMHgwMCwweDA0LDB4MjQsMHgyYSwweGIwLDB4MDIsMHgzYywweDA1LDB4MDAsMHg0MiwweDM0LDB4ZmYsMHhmZiwweDAzLDB4MjQsCi0weDAwLDB4MDAsMHg1ZSwweGEwLDB4MDAsMHgwMCwweGMzLDB4YTIsMHgwMCwweDAwLDB4MjIsMHg5MiwweGMxLDB4NDIsMHhlNSwweDkyLAotMHgyYSwweGIwLDB4MDQsMHgzYywweDAyLDB4MDAsMHgwMywweDI0LDB4NDAsMHgwMCwweDQyLDB4MzQsMHgwNSwweDAwLDB4ODQsMHgzNCwKLTB4MDAsMHgwMCwweDIyLDB4YTIsMHgwMCwweDAwLDB4ODMsMHhhMCwweGVmLDB4ZmYsMHgwMiwweDI0LDB4MDAsMHgwMCwweGIwLDB4OTIsCi0weDY0LDB4MDAsMHgwNCwweDI0LDB4MDAsMHgwMCwweGE1LDB4YTIsMHgwMCwweDAwLDB4YzIsMHhhMiwweGIzLDB4MGEsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMiwweDkyLDB4YmYsMHhmZiwweDAzLDB4MjQsMHg4NCwweDAzLDB4MDQsMHgyNCwKLTB4MjQsMHgxMCwweDQzLDB4MDAsMHgwMCwweDAwLDB4MjIsMHhhMiwweGIzLDB4MGEsMHgwMCwweDBjLDB4ZmYsMHgwMCwweDEwLDB4MzIsCi0weDI1LDB4YjAsMHgwMiwweDNjLDB4ZjQsMHgwOCwweDQyLDB4MzQsMHgwMCwweDAwLDB4NDQsMHg4YywweDAwLDB4MDAsMHhiMCwweGEyLAotMHgwMCwweDAwLDB4YzAsMHhhMiwweDAwLDB4MDAsMHgyMiwweDkyLDB4YmUsMHg0MiwweGUzLDB4OTIsMHgxZiwweDAwLDB4ODUsMHgzMCwKLTB4NDAsMHgwMCwweDQyLDB4MzQsMHgwMCwweDAwLDB4MjIsMHhhMiwweDAwLDB4ODAsMHgwMiwweDNjLDB4ZGYsMHgwNywweDQyLDB4MzQsCi0weDJiLDB4MTgsMHhhMywweDAwLDB4MDksMHgwMCwweDYwLDB4MTAsMHgyNCwweDIwLDB4ODIsMHgwMCwweGJmLDB4NDIsMHhlMiwweDkyLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDJiLDB4MTAsMHg0NSwweDAwLDB4MDUsMHgwMCwweDQwLDB4MTAsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4MDEsMHgwMCwweDAyLDB4M2MsMHgyNSwweDEwLDB4YTIsMHgwMCwweDIxLDB4OTAsMHg0MiwweDAyLDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weDhlLDB4N2QsMHg0MywweDkwLDB4MjIsMHgwMCwweDAyLDB4MjQsMHgxYywweDAwLDB4NjIsMHgxMCwweDkyLDB4MDAsMHgwMiwweDI0LAotMHgxYiwweDAwLDB4NjIsMHgxMCwweDAyLDB4ODAsMHgwMywweDNjLDB4ZmYsMHhmZiwweDk0LDB4MjYsMHhiMywweDBhLDB4MDAsMHgwYywKLTB4ZjQsMHgwMSwweDA0LDB4MjQsMHhhYiwweGZmLDB4ODEsMHgwNiwweDJhLDB4YjAsMHgwMywweDNjLDB4MDQsMHgwMCwweDYwLDB4MTIsCi0weDI1LDB4YjAsMHgwMiwweDNjLDB4YmQsMHg0ZSwweDAwLDB4MGMsMHgyMSwweDIwLDB4NjAsMHgwMiwweDI1LDB4YjAsMHgwMiwweDNjLAotMHhkOCwweDAyLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg1MiwweGFjLDB4MjEsMHgxMCwweDQwLDB4MDIsMHgzYywweDAwLDB4YmYsMHg4ZiwKLTB4MzgsMHgwMCwweGJlLDB4OGYsMHgzNCwweDAwLDB4YjcsMHg4ZiwweDMwLDB4MDAsMHhiNiwweDhmLDB4MmMsMHgwMCwweGI1LDB4OGYsCi0weDI4LDB4MDAsMHhiNCwweDhmLDB4MjQsMHgwMCwweGIzLDB4OGYsMHgyMCwweDAwLDB4YjIsMHg4ZiwweDFjLDB4MDAsMHhiMSwweDhmLAotMHgxOCwweDAwLDB4YjAsMHg4ZiwweDA4LDB4MDAsMHhlMCwweDAzLDB4NDAsMHgwMCwweGJkLDB4MjcsMHgwMiwweDgwLDB4MDMsMHgzYywKLTB4NjgsMHgxNSwweDYzLDB4MjQsMHhiZSwweDQyLDB4NjIsMHg5MCwweGMwLDB4MDcsMHg4MywweDMwLDB4ODIsMHgxOSwweDAzLDB4MDAsCi0weDJiLDB4MTAsMHg2MiwweDAwLDB4ZTAsMHhmZiwweDQwLDB4MTAsMHgwMiwweDgwLDB4MDQsMHgzYywweDY4LDB4MTUsMHg4NCwweDI0LAotMHhiZiwweDQyLDB4ODIsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MmIsMHgxMCwweDQzLDB4MDAsMHhkYSwweGZmLDB4NDAsMHgxMCwKLTB4MDAsMHgxMiwweDAzLDB4MDAsMHgxMCwweDAwLDB4MDMsMHgzYywweDI1LDB4MTAsMHg0MywweDAwLDB4OWEsMHgxMiwweDAwLDB4MDgsCi0weDIxLDB4OTAsMHg0MiwweDAyLDB4ZTgsMHhmZiwweGJkLDB4MjcsMHgxMCwweDAwLDB4YjAsMHhhZiwweDBmLDB4MDAsMHgxMCwweDNjLAotMHhmZiwweGZmLDB4MDUsMHgzNiwweGYwLDB4ZjgsMHgwNiwweDM0LDB4MTQsMHgwMCwweGJmLDB4YWYsMHhiYSwweDQ0LDB4MDAsMHgwYywKLTB4MTUsMHgwMCwweDA0LDB4MjQsMHhiMywweDBhLDB4MDAsMHgwYywweDY0LDB4MDAsMHgwNCwweDI0LDB4ZmYsMHhmZiwweDA1LDB4MzYsCi0weDU2LDB4MzAsMHgwNiwweDI0LDB4YmEsMHg0NCwweDAwLDB4MGMsMHgxYSwweDAwLDB4MDQsMHgyNCwweGIzLDB4MGEsMHgwMCwweDBjLAotMHg2NCwweDAwLDB4MDQsMHgyNCwweDAyLDB4ODAsMHgwYiwweDNjLDB4NjgsMHgxNSwweDY0LDB4MjUsMHgwNCwweDQzLDB4ODMsMHg5MCwKLTB4MDQsMHgwMCwweDAyLDB4MjQsMHgxOSwweDAwLDB4NjIsMHgxMCwweDI1LDB4YjAsMHgwMiwweDNjLDB4MTQsMHg0MywweDhhLDB4OGMsCi0weDE4LDB4NDMsMHg4OCwweDhjLDB4MjUsMHhiMCwweDAyLDB4M2MsMHgxYywweDBlLDB4NDksMHgzNCwweDAwLDB4MGUsMHg0MywweDM0LAotMHgwNCwweDBlLDB4NDQsMHgzNCwweDA4LDB4MGUsMHg0NSwweDM0LDB4MTAsMHgwZSwweDQ2LDB4MzQsMHgxNCwweDBlLDB4NDcsMHgzNCwKLTB4MTgsMHgwZSwweDQyLDB4MzQsMHgwMCwweDAwLDB4NmEsMHhhYywweDAwLDB4MDAsMHg4YSwweGFjLDB4MDAsMHgwMCwweGE4LDB4YWMsCi0weDAwLDB4MDAsMHhjYSwweGFjLDB4MDAsMHgwMCwweGVhLDB4YWMsMHgwMCwweDAwLDB4NGEsMHhhYywweDAwLDB4MDAsMHgyYSwweGFkLAotMHgxNCwweDAwLDB4YmYsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLDB4NjgsMHgxNSwweDYzLDB4MjUsMHgwNCwweDAwLDB4MDIsMHgyNCwKLTB4MTgsMHgwMCwweGJkLDB4MjcsMHgwOCwweDAwLDB4ZTAsMHgwMywweDA0LDB4NDMsMHg2MiwweGEwLDB4MDAsMHgwZSwweDQyLDB4MzQsCi0weDAwLDB4MDAsMHg0MywweDhjLDB4MTQsMHg0MywweDhhLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU0LDB4ZmYsMHg2YSwweDE0LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGVjLDB4MTIsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlOCwweGZmLDB4YmQsMHgyNywKLTB4MTAsMHgwMCwweGIwLDB4YWYsMHgwZiwweDAwLDB4MTAsMHgzYywweGZmLDB4ZmYsMHgwNSwweDM2LDB4ZjAsMHhmOCwweDA2LDB4MzQsCi0weDE0LDB4MDAsMHhiZiwweGFmLDB4YmEsMHg0NCwweDAwLDB4MGMsMHgxNSwweDAwLDB4MDQsMHgyNCwweGIzLDB4MGEsMHgwMCwweDBjLAotMHg2NCwweDAwLDB4MDQsMHgyNCwweGZmLDB4ZmYsMHgwNSwweDM2LDB4NTYsMHgzMCwweDA2LDB4MjQsMHhiYSwweDQ0LDB4MDAsMHgwYywKLTB4MWEsMHgwMCwweDA0LDB4MjQsMHhiMywweDBhLDB4MDAsMHgwYywweDY0LDB4MDAsMHgwNCwweDI0LDB4MDIsMHg4MCwweDA0LDB4M2MsCi0weDY4LDB4MTUsMHg4MywweDI0LDB4MDQsMHg0MywweDY1LDB4OTAsMHgyMSwweDcwLDB4NjAsMHgwMCwweDEwLDB4MTAsMHgwMywweDNjLAotMHgyNSwweGIwLDB4MDIsMHgzYywweDEwLDB4MTAsMHg2NiwweDM0LDB4MDEsMHgwMCwweDAzLDB4MjQsMHgxYywweDBlLDB4NGQsMHgzNCwKLTB4MDAsMHgwZSwweDRhLDB4MzQsMHgwNCwweDBlLDB4NGIsMHgzNCwweDA4LDB4MGUsMHg0YywweDM0LDB4MTAsMHgwZSwweDQ3LDB4MzQsCi0weDE0LDB4MGUsMHg0OCwweDM0LDB4MGYsMHgwMCwweGEzLDB4MTAsMHgxOCwweDBlLDB4NDksMHgzNCwweDEwLDB4MTAsMHgwMiwweDI0LAotMHgwMCwweDAwLDB4NDYsMHhhZCwweDAwLDB4MDAsMHg2NiwweGFkLDB4MDAsMHgwMCwweDgyLDB4YWQsMHgwMCwweDAwLDB4ZTYsMHhhYywKLTB4MDAsMHgwMCwweDA2LDB4YWQsMHgwMCwweDAwLDB4MjYsMHhhZCwweDAwLDB4MDAsMHhhNiwweGFkLDB4MTQsMHgwMCwweGJmLDB4OGYsCi0weDEwLDB4MDAsMHhiMCwweDhmLDB4MDEsMHgwMCwweDAyLDB4MjQsMHgxOCwweDAwLDB4YmQsMHgyNywweDA4LDB4MDAsMHhlMCwweDAzLAotMHgwNCwweDQzLDB4YzIsMHhhMSwweDAwLDB4MDAsMHg0NCwweDhkLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmMCwweGZmLDB4ODYsMHgxNCwKLTB4MTAsMHgxMCwweDAyLDB4MjQsMHgyMywweDEzLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHhmZiwweGJkLDB4MjcsCi0weDE0LDB4MDAsMHhiMSwweGFmLDB4MTAsMHgwMCwweGIwLDB4YWYsMHgwMSwweDAwLDB4MTEsMHgzYywweDBmLDB4MDAsMHgxMCwweDNjLAotMHhmZiwweGZmLDB4MDUsMHgzNiwweGY0LDB4OTgsMHgyNiwweDM2LDB4MTgsMHgwMCwweGJmLDB4YWYsMHhiYSwweDQ0LDB4MDAsMHgwYywKLTB4MTUsMHgwMCwweDA0LDB4MjQsMHhiMywweDBhLDB4MDAsMHgwYywweDY0LDB4MDAsMHgwNCwweDI0LDB4ZmYsMHhmZiwweDA1LDB4MzYsCi0weDU2LDB4MzAsMHgyNiwweDM2LDB4YmEsMHg0NCwweDAwLDB4MGMsMHgxYSwweDAwLDB4MDQsMHgyNCwweDAyLDB4ODAsMHgxMCwweDNjLAotMHhiMywweDBhLDB4MDAsMHgwYywweDY0LDB4MDAsMHgwNCwweDI0LDB4NjgsMHgxNSwweDA0LDB4MjYsMHgwNCwweDQzLDB4ODIsMHg5MCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZCwweDAwLDB4NDAsMHgxNCwweDI1LDB4YjAsMHgwMiwweDNjLDB4MDAsMHgwZSwweDQyLDB4MzQsCi0weDAwLDB4MDAsMHg0MywweDhjLDB4ZWMsMHg0MiwweDhmLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHg2ZiwweDE0LAotMHg2OCwweDE1LDB4MDIsMHgyNiwweDE4LDB4MDAsMHhiZiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwKLTB4MjAsMHgwMCwweGJkLDB4MjcsMHgwOCwweDAwLDB4ZTAsMHgwMywweDA0LDB4NDMsMHg0MCwweGEwLDB4ZWMsMHg0MiwweDhmLDB4OGMsCi0weGU4LDB4NDIsMHg4OCwweDhjLDB4ZjAsMHg0MiwweDhhLDB4OGMsMHhmNCwweDQyLDB4OGIsMHg4YywweGY4LDB4NDIsMHg4YywweDhjLAotMHhmYywweDQyLDB4OGQsMHg4YywweDI1LDB4YjAsMHgwMiwweDNjLDB4MDAsMHg0MywweDhlLDB4OGMsMHgxYywweDBlLDB4NDksMHgzNCwKLTB4MDgsMHgwZSwweDQzLDB4MzQsMHgwMCwweDBlLDB4NDQsMHgzNCwweDA0LDB4MGUsMHg0NSwweDM0LDB4MTAsMHgwZSwweDQ2LDB4MzQsCi0weDE0LDB4MGUsMHg0NywweDM0LDB4MTgsMHgwZSwweDQyLDB4MzQsMHgwMCwweDAwLDB4NjgsMHhhYywweDE4LDB4MDAsMHhiZiwweDhmLAotMHgwMCwweDAwLDB4OGYsMHhhYywweDE0LDB4MDAsMHhiMSwweDhmLDB4MDAsMHgwMCwweGFhLDB4YWMsMHgwMCwweDAwLDB4Y2IsMHhhYywKLTB4MDAsMHgwMCwweGVjLDB4YWMsMHgwMCwweDAwLDB4NGQsMHhhYywweDY4LDB4MTUsMHgwMiwweDI2LDB4MTAsMHgwMCwweGIwLDB4OGYsCi0weDIwLDB4MDAsMHhiZCwweDI3LDB4MDAsMHgwMCwweDJlLDB4YWQsMHgwOCwweDAwLDB4ZTAsMHgwMywweDA0LDB4NDMsMHg0MCwweGEwLAotMHhlMCwweGZmLDB4YmQsMHgyNywweDE0LDB4MDAsMHhiMSwweGFmLDB4MTAsMHgwMCwweGIwLDB4YWYsMHgwMSwweDAwLDB4MTEsMHgzYywKLTB4MGYsMHgwMCwweDEwLDB4M2MsMHhmZiwweGZmLDB4MDUsMHgzNiwweGY0LDB4OTgsMHgyNiwweDM2LDB4MTgsMHgwMCwweGJmLDB4YWYsCi0weGJhLDB4NDQsMHgwMCwweDBjLDB4MTUsMHgwMCwweDA0LDB4MjQsMHhiMywweDBhLDB4MDAsMHgwYywweDY0LDB4MDAsMHgwNCwweDI0LAotMHhmZiwweGZmLDB4MDUsMHgzNiwweDU2LDB4MzAsMHgyNiwweDM2LDB4YmEsMHg0NCwweDAwLDB4MGMsMHgxYSwweDAwLDB4MDQsMHgyNCwKLTB4YjMsMHgwYSwweDAwLDB4MGMsMHg2NCwweDAwLDB4MDQsMHgyNCwweDAyLDB4ODAsMHgxOCwweDNjLDB4NjgsMHgxNSwweDA1LDB4MjcsCi0weDA0LDB4NDMsMHhhMywweDkwLDB4MDMsMHgwMCwweDAyLDB4MjQsMHgyYSwweDAwLDB4NjIsMHgxMCwweDI1LDB4YjAsMHgwMiwweDNjLAotMHhlYywweDQyLDB4YWYsMHg4YywweDA4LDB4NDMsMHhhMywweDhjLDB4ZTgsMHg0MiwweGEyLDB4OGMsMHhmMCwweDQyLDB4YWMsMHg4YywKLTB4ZjQsMHg0MiwweGFkLDB4OGMsMHhmOCwweDQyLDB4YTksMHg4YywweGZjLDB4NDIsMHhhYSwweDhjLDB4MDAsMHg0MywweGFiLDB4OGMsCi0weDIxLDB4NzAsMHg0MywweDAwLDB4ZmYsMHhmZiwweDAyLDB4M2MsMHgyNSwweGIwLDB4MDMsMHgzYywweGZmLDB4MDAsMHg0MiwweDM0LAotMHgwMCwweGZmLDB4YzQsMHgzMSwweDA0LDB4MGUsMHg2NSwweDM0LDB4MTAsMHgwZSwweDY2LDB4MzQsMHgxNCwweDBlLDB4NjcsMHgzNCwKLTB4MTgsMHgwZSwweDY4LDB4MzQsMHgyNCwweDgwLDB4YzIsMHgwMSwweDA4LDB4MGUsMHg3MSwweDM0LDB4MDAsMHgwZSwweDYyLDB4MzQsCi0weDAxLDB4M2YsMHg4NCwweDJjLDB4MWMsMHgwZSwweDYzLDB4MzQsMHgwMCwweDAwLDB4NGYsMHhhYywweDAwLDB4MDAsMHhhYywweGFjLAotMHgwMCwweDAwLDB4Y2QsMHhhYywweDAwLDB4MDAsMHhlOSwweGFjLDB4MDAsMHgwMCwweDBhLDB4YWQsMHgwMCwweDAwLDB4NmIsMHhhYywKLTB4MGEsMHgwMCwweDgwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZSwweGFlLDB4MTgsMHgwMCwweGJmLDB4OGYsCi0weDE0LDB4MDAsMHhiMSwweDhmLDB4MTAsMHgwMCwweGIwLDB4OGYsMHg2OCwweDE1LDB4MDMsMHgyNywweDAzLDB4MDAsMHgwMiwweDI0LAotMHgyMCwweDAwLDB4YmQsMHgyNywweDA4LDB4MDAsMHhlMCwweDAzLDB4MDQsMHg0MywweDYyLDB4YTAsMHhhNiwweDEzLDB4MDAsMHgwOCwKLTB4MDAsMHgzZiwweDBlLDB4MzYsMHgwMCwweDBlLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweDhjLDB4ZWMsMHg0MiwweGFmLDB4OGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZDMsMHhmZiwweDZmLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE3LDB4MTMsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGQwLDB4ZmYsMHhiZCwweDI3LDB4MTgsMHgwMCwweGIyLDB4YWYsMHgwMiwweDgwLDB4MTIsMHgzYywKLTB4MjQsMHgwMCwweGI1LDB4YWYsMHgyMCwweDAwLDB4YjQsMHhhZiwweDI4LDB4MDAsMHhiZiwweGFmLDB4MWMsMHgwMCwweGIzLDB4YWYsCi0weDE0LDB4MDAsMHhiMSwweGFmLDB4MTAsMHgwMCwweGIwLDB4YWYsMHg2OCwweDE1LDB4NDQsMHgyNiwweDAyLDB4ODAsMHgxNCwweDNjLAotMHgwMCwweDQwLDB4ODUsMHg4YywweGRjLDB4NjMsMHg4MywweDhjLDB4OGUsMHg3ZCwweDg2LDB4OTIsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4MGYsMHgwYywweDQyLDB4MzQsMHgwMCwweDAwLDB4NDYsMHhhMCwweDAyLDB4MTksMHgwMywweDAwLDB4ZjAsMHhmMCwweGE1LDB4MzAsCi0weDAwLDB4MTAsMHgwMiwweDI0LDB4MDQsMHg0MywweDkzLDB4OTAsMHg3MSwweDAwLDB4YTIsMHgxMCwweDdmLDB4MDAsMHg3NSwweDMwLAotMHgyNSwweGIwLDB4MDksMHgzYywweDRjLDB4MDAsMHgyMywweDM1LDB4MDAsMHgwMCwweDYyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDMsMHgwMCwweDQyLDB4MzAsMHgwOSwweDAwLDB4NDAsMHgxMCwweDY4LDB4MTUsMHg0NSwweDI2LDB4NjgsMHgxNSwweDRhLDB4MjYsCi0weDAwLDB4NDAsMHg0MiwweDhkLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDEzLDB4MDIsMHgwMCwweDBmLDB4MDAsMHg0MiwweDMwLAotMHgzMywweDAwLDB4NDAsMHgxMCwweDAwLDB4MGUsMHgyNSwweDM1LDB4NjgsMHgxNSwweDQ1LDB4MjYsMHgwNCwweDQzLDB4YTIsMHg4YywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDEyLDB4MDIsMHgwMCwweDBmLDB4MDAsMHg0MCwweDE0LDB4NjgsMHgxNSwweDRhLDB4MjYsCi0weDI1LDB4YjAsMHgwMiwweDNjLDB4ODQsMHgwMSwweDQyLDB4MzQsMHgwMCwweDAwLDB4NDQsMHg4YywweDBkLDB4MDAsMHgwMywweDI0LAotMHg3ZSwweDAwLDB4ODMsMHgxMCwweDNlLDB4MDAsMHgwMiwweDI0LDB4NGEsMHgwMCwweDAzLDB4MjQsMHgxZiwweDQzLDB4YTIsMHhhMCwKLTB4MWMsMHg0MywweGEzLDB4YTAsMHg0NSwweDAwLDB4MDIsMHgyNCwweDQzLDB4MDAsMHgwMywweDI0LDB4MWQsMHg0MywweGEyLDB4YTAsCi0weDFlLDB4NDMsMHhhMywweGEwLDB4NjgsMHgxNSwweDRhLDB4MjYsMHhkYywweDYzLDB4NGMsMHg4ZCwweDA0LDB4NDAsMHg0MiwweDhkLAotMHgwMCwweDQwLDB4NGIsMHg4ZCwweDFlLDB4NDMsMHg0ZCwweDkxLDB4MWMsMHg0MywweDRlLDB4OTEsMHgyNSwweGIwLDB4MDksMHgzYywKLTB4MDIsMHgxMSwweDAyLDB4MDAsMHg2MCwweDBjLDB4MjcsMHgzNSwweDAyLDB4MTksMHgwYywweDAwLDB4OTgsMHgwYywweDI0LDB4MzUsCi0weDAwLDB4MDAsMHhlMywweGEwLDB4NjYsMHgwYywweDI1LDB4MzUsMHgwMCwweDAwLDB4ODIsMHhhMCwweDY3LDB4MGMsMHgyNiwweDM1LAotMHhmMCwweGYwLDB4NjgsMHgzMSwweDEwLDB4MTAsMHgwMiwweDI0LDB4MDAsMHgwMCwweGFkLDB4YTAsMHgwMCwweDAwLDB4Y2UsMHhhMCwKLTB4NDMsMHgwMCwweDAyLDB4MTEsMHhmZiwweGZmLDB4MDIsMHgzNCwweDI4LDB4MDAsMHhiZiwweDhmLDB4MjQsMHgwMCwweGI1LDB4OGYsCi0weDIwLDB4MDAsMHhiNCwweDhmLDB4MWMsMHgwMCwweGIzLDB4OGYsMHgxOCwweDAwLDB4YjIsMHg4ZiwweDE0LDB4MDAsMHhiMSwweDhmLAotMHgxMCwweDAwLDB4YjAsMHg4ZiwweDIxLDB4MTAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgzMCwweDAwLDB4YmQsMHgyNywKLTB4MDAsMHgwMCwweGEyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDVkLDB4MDAsMHg0MCwweDEwLDB4MTAsMHgwZSwweDI4LDB4MzUsCi0weDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHgwOCwweDBlLDB4MjIsMHgzNSwweDA0LDB4MGUsMHgyNCwweDM1LDB4MDAsMHgwMCwweDQzLDB4OGMsMHgwMCwweDAwLDB4YTUsMHg4YywKLTB4MDAsMHgwMCwweDgyLDB4OGMsMHhlOCwweDQyLDB4NDMsMHhhZCwweGVjLDB4NDIsMHg0NSwweGFkLDB4ZjAsMHg0MiwweDQyLDB4YWQsCi0weDE0LDB4MGUsMHgyNCwweDM1LDB4MTgsMHgwZSwweDIyLDB4MzUsMHgxYywweDBlLDB4MjUsMHgzNSwweDAwLDB4MDAsMHgwOCwweDhkLAotMHg4ZSwweDdkLDB4OGIsMHg5MiwweDAwLDB4MDAsMHg4NiwweDhjLDB4MDAsMHhmZiwweDYzLDB4MzAsMHgwMCwweDAwLDB4NDcsMHg4YywKLTB4MDAsMHgwMCwweGE0LDB4OGMsMHg5YSwweDBjLDB4MjIsMHgzNSwweDAyLDB4MWEsMHgwMywweDAwLDB4MDAsMHgwMCwweDQzLDB4YTAsCi0weDIyLDB4MDAsMHgwMiwweDI0LDB4ZjQsMHg0MiwweDQ4LDB4YWQsMHhmOCwweDQyLDB4NDYsMHhhZCwweGZjLDB4NDIsMHg0NywweGFkLAotMHg1OCwweDAwLDB4NjIsMHgxMSwweDAwLDB4NDMsMHg0NCwweGFkLDB4OTIsMHgwMCwweDAyLDB4MjQsMHg1NiwweDAwLDB4NjIsMHgxMSwKLTB4MGQsMHgwOCwweDIyLDB4MzUsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weDY4LDB4MTUsMHg0NCwweDI2LDB4MDAsMHg0MCwweDgzLDB4OGMsMHhmZiwweGZmLDB4MDIsMHgzYywweGZmLDB4MGYsMHg0MiwweDM0LAotMHgyNCwweDE4LDB4NjIsMHgwMCwweDAwLDB4MTAsMHg2MywweDM0LDB4ZGUsMHgxMywweDAwLDB4MDgsMHgwMCwweDQwLDB4ODMsMHhhYywKLTB4MDEsMHgwMCwweDAyLDB4MjQsMHgzNSwweDAwLDB4NjIsMHgxMiwweDA0LDB4MDAsMHgwMiwweDI0LDB4MzMsMHgwMCwweDYyLDB4MTIsCi0weDY4LDB4MTUsMHg0MywweDI2LDB4ZmYsMHhmZiwweDAyLDB4MjQsMHhkMCwweDEzLDB4MDAsMHgwOCwweDA0LDB4NDMsMHg2MiwweGEwLAotMHhiZCwweGZmLDB4ODIsMHgxMSwweDAyLDB4MTIsMHgwYiwweDAwLDB4MGYsMHgwMCwweDQ4LDB4MzAsMHgwMSwweDAwLDB4MDMsMHgyNCwKLTB4YjksMHhmZiwweDAzLDB4MTUsMHg0YywweDAwLDB4MjMsMHgzNSwweDAwLDB4MDAsMHg2MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAzLDB4MDAsMHg0MiwweDMwLDB4YjQsMHhmZiwweDQwLDB4MTAsMHgwMywweDAwLDB4MDIsMHgyNCwweDVmLDB4MDAsMHg2MiwweDEyLAotMHgwNCwweDAwLDB4NjIsMHgyYSwweDQ1LDB4MDAsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2NCwweDAwLDB4NjAsMHgxMiwKLTB4ZmYsMHgwMCwweGEyLDB4MzEsMHhhYywweGZmLDB4NjgsMHgxNiwweGZmLDB4MDAsMHhjMiwweDMxLDB4MmIsMHgxMCwweGEyLDB4MDIsCi0weDUyLDB4MDAsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxZiwweDQzLDB4NDIsMHg5MSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyYiwweDEwLDB4NTUsMHgwMCwweDQ0LDB4MDAsMHg0MCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyZiwweDEzLDB4MDAsMHgwYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNiwweDE0LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2IsMHgwMCwweDAyLDB4MjQsCi0weDQ2LDB4MDAsMHgwMywweDI0LDB4MWYsMHg0MywweGEyLDB4YTAsMHgxYywweDQzLDB4YTMsMHhhMCwweDQxLDB4MDAsMHgwMiwweDI0LAotMHg0MCwweDAwLDB4MDMsMHgyNCwweDFkLDB4NDMsMHhhMiwweGEwLDB4ZjEsMHgxMywweDAwLDB4MDgsMHgxZSwweDQzLDB4YTMsMHhhMCwKLTB4MDAsMHgwMCwweDAzLDB4OGQsMHgzZiwweDNmLDB4MDIsMHgzYywweDNmLDB4M2YsMHg0MiwweDM0LDB4YTAsMHhmZiwweDYyLDB4MTQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZGYsMHgxMywweDAwLDB4MDgsMHg2OCwweDE1LDB4NDUsMHgyNiwweDBmLDB4MDAsMHgxMCwweDNjLAotMHgwMSwweDAwLDB4MTEsMHgzYywweGZmLDB4ZmYsMHgwNSwweDM2LDB4ZjQsMHg5OCwweDI2LDB4MzYsMHhiYSwweDQ0LDB4MDAsMHgwYywKLTB4MTUsMHgwMCwweDA0LDB4MjQsMHhiMywweDBhLDB4MDAsMHgwYywweDY0LDB4MDAsMHgwNCwweDI0LDB4ZmYsMHhmZiwweDA1LDB4MzYsCi0weDU2LDB4MzAsMHgyNiwweDM2LDB4YmEsMHg0NCwweDAwLDB4MGMsMHgxYSwweDAwLDB4MDQsMHgyNCwweGIzLDB4MGEsMHgwMCwweDBjLAotMHg2NCwweDAwLDB4MDQsMHgyNCwweDY4LDB4MTUsMHg0MywweDI2LDB4ZmYsMHhmZiwweDAyLDB4MjQsMHhkMCwweDEzLDB4MDAsMHgwOCwKLTB4MDQsMHg0MywweDYyLDB4YTAsMHgwZCwweDA4LDB4MjIsMHgzNSwweDAwLDB4MDAsMHg0MywweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDBmLDB4MDAsMHg2MywweDMwLDB4MDgsMHgwMCwweDYyLDB4MmMsMHgwZiwweDAwLDB4NjMsMHgzOCwweGE1LDB4ZmYsMHg0MCwweDE0LAotMHgwMSwweDAwLDB4NjUsMHgyNCwweDAwLDB4MTYsMHgwNSwweDAwLDB4MDAsMHgyNCwweDA1LDB4MDAsMHgwMCwweDFhLDB4MDUsMHgwMCwKLTB4MjUsMHgxMCwweDQ0LDB4MDAsMHgyNSwweDEwLDB4NDMsMHgwMCwweDI1LDB4MTAsMHg0NSwweDAwLDB4MjUsMHgxOCwweDY1LDB4MDAsCi0weDE4LDB4NDMsMHg0MywweGFkLDB4MzUsMHgxNCwweDAwLDB4MDgsMHgxNCwweDQzLDB4NDIsMHhhZCwweDA0LDB4MDAsMHgwMiwweDI0LAotMHgwZCwweDAwLDB4NjIsMHgxMiwweGZmLDB4MDAsMHgwMiwweDI0LDB4NjcsMHhmZiwweDYyLDB4MTYsMHhmZiwweDAwLDB4YTIsMHgzMSwKLTB4MmIsMHgxMCwweGEyLDB4MDIsMHgxZCwweDAwLDB4NDAsMHgxNCwweGZmLDB4MDAsMHhjMiwweDMxLDB4MmIsMHgxMCwweGEyLDB4MDIsCi0weDBhLDB4MDAsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmYiwweDEyLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwNiwweDE0LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MWQsMHg0MywweDQyLDB4OTEsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MmIsMHgxMCwweDU1LDB4MDAsMHhmOCwweGZmLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzUsMHgxMiwweDAwLDB4MGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgxNCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4NDMsMHg0MiwweDkxLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDJiLDB4MTAsMHhhMiwweDAyLDB4YWMsMHhmZiwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4NzAsMHgxMywweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA2LDB4MTQsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDJiLDB4MTAsMHhhMiwweDAyLDB4ZTgsMHhmZiwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIxLDB4NDMsMHg0MiwweDkxLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDJiLDB4MTAsMHg1NSwweDAwLDB4YTAsMHhmZiwweDQwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4NzAsMHgxMywweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA2LDB4MTQsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAyLDB4ODAsMHgwOCwweDNjLDB4NjgsMHgxNSwweDA1LDB4MjUsMHhkYywweDYzLDB4YTQsMHg4YywweGU2LDB4NDIsMHhhMywweDkwLAotMHgwMiwweDExLDB4MDQsMHgwMCwweDFmLDB4MDAsMHg2MCwweDE0LDB4N2YsMHgwMCwweDQ2LDB4MzAsMHgyNSwweGIwLDB4MDcsMHgzYywKLTB4NGMsMHgwMCwweGUyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTksMHgwMCwweDYwLDB4MTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHhmZiwweDAyLDB4MzQsMHgxNiwweDAwLDB4ODIsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDA4LDB4ZTMsMHgzNCwweDAwLDB4MDAsMHg2MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4NDIsMHgzMCwKLTB4MTIsMHgwMCwweDQwLDB4MTAsMHg0YiwweDAwLDB4YzIsMHgyYywweDI5LDB4MDAsMHg0MCwweDEwLDB4MDEsMHgwMCwweDA0LDB4MjQsCi0weGQ4LDB4ZmYsMHhjMiwweDI0LDB4MWUsMHgwMCwweDQyLDB4MmMsMHgyZiwweDAwLDB4NDAsMHgxMCwweDIzLDB4MDAsMHhjMiwweDJjLAotMHg2OCwweDE1LDB4MDQsMHgyNSwweGQzLDB4NDIsMHg4MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOSwweDAwLDB4NDAsMHgxMCwKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHgyMCwweDAwLDB4MDMsMHgyNCwweDg3LDB4MGMsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YTAsCi0weGQzLDB4NDIsMHg4MCwweGEwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwweDBmLDB4MDAsMHg0MCwweDEwLAotMHgwMSwweDAwLDB4MDQsMHgyNCwweGQ4LDB4ZmYsMHhjMiwweDI0LDB4MWUsMHgwMCwweDQyLDB4MmMsMHgyYywweDAwLDB4NDAsMHgxMCwKLTB4MjMsMHgwMCwweGMyLDB4MmMsMHg2OCwweDE1LDB4MDQsMHgyNSwweGQzLDB4NDIsMHg4MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDI2LDB4MDAsMHg0MCwweDEwLDB4MjUsMHhiMCwweDAyLDB4M2MsMHg0NCwweDAwLDB4MDMsMHgyNCwweDMwLDB4MGMsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4NDMsMHhhMCwweGVkLDB4MTQsMHgwMCwweDA4LDB4ZDMsMHg0MiwweDgwLDB4YTAsMHhkMywweDQyLDB4YTIsMHg5MCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhlZiwweGZmLDB4NDQsMHgxMCwweDMwLDB4MGMsMHhlMywweDM0LDB4NDMsMHgwMCwweDAyLDB4MjQsCi0weGQzLDB4NDIsMHhhNCwweGEwLDB4MDAsMHgwMCwweDYyLDB4YTAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLAotMHhkMywweDQyLDB4YTIsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZDUsMHhmZiwweDQ0LDB4MTAsMHg4NywweDBjLDB4ZTMsMHgzNCwKLTB4MTAsMHgwMCwweDAyLDB4MjQsMHhkMywweDQyLDB4YTQsMHhhMCwweDAwLDB4MDAsMHg2MiwweGEwLDB4MDYsMHgxNSwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjMsMHgwMCwweGMyLDB4MmMsMHhkYSwweGZmLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg2OCwweDE1LDB4MDQsMHgyNSwweGQzLDB4NDIsMHg4MiwweDkwLDB4MDIsMHgwMCwweDAzLDB4MjQsMHhkNSwweGZmLDB4NDMsMHgxMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNSwweGIwLDB4MDIsMHgzYywweDg3LDB4MGMsMHg0MiwweDM0LDB4ZDMsMHg0MiwweDgzLDB4YTAsCi0weDAwLDB4MDAsMHg0MCwweGEwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwweDIzLDB4MDAsMHhjMiwweDJjLAotMHhjYywweGZmLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjgsMHgxNSwweDA0LDB4MjUsMHhkMywweDQyLDB4ODIsMHg5MCwKLTB4MDIsMHgwMCwweDAzLDB4MjQsMHhjNywweGZmLDB4NDMsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weGQzLDB4NDIsMHg4MywweGEwLDB4MzAsMHgwYywweDQyLDB4MzQsMHg0MiwweDAwLDB4MDMsMHgyNCwweDAwLDB4MDAsMHg0MywweGEwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDAyLDB4M2MsMHg2OCwweDE1LDB4NDUsMHgyNCwKLTB4ZDUsMHg0MiwweGEzLDB4OTAsMHgwMiwweDAwLDB4MDIsMHgyNCwweDAzLDB4MDAsMHg2MiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsMHhkYywweDYzLDB4YTIsMHg4YywweDI1LDB4YjAsMHgwMywweDNjLAotMHgwYSwweDBhLDB4NjgsMHgzNCwweDAyLDB4MTEsMHgwMiwweDAwLDB4N2YsMHgwMCwweDQyLDB4MzAsMHgxYSwweDAwLDB4NDQsMHgyYywKLTB4MTQsMHgwMCwweDQyLDB4MmMsMHgwMSwweDBhLDB4NjYsMHgzNCwweDBiLDB4MDAsMHg0MCwweDE0LDB4MmUsMHgwYSwweDY3LDB4MzQsCi0weGYzLDB4ZmYsMHg4MCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhkNCwweDQyLDB4YTQsMHg5MCwweDAxLDB4MDAsMHgwMiwweDI0LAotMHgwMSwweDBhLDB4NjcsMHgzNCwweDBmLDB4MDAsMHg4MiwweDEwLDB4MmUsMHgwYSwweDY2LDB4MzQsMHhkNCwweDQyLDB4YTAsMHhhMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHgwMiwweDI0LDB4MDAsMHgwMCwweGMyLDB4YTAsCi0weDAxLDB4MDAsMHgwMywweDI0LDB4ZGYsMHhmZiwweDAyLDB4MjQsMHhkNCwweDQyLDB4YTMsMHhhMCwweDAwLDB4MDAsMHhlMiwweGEwLAotMHgwMywweDAwLDB4MDMsMHgyNCwweDIxLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAzLDB4YTEsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NywweDAwLDB4MDIsMHgyNCwweDAwLDB4MDAsMHhlMiwweGEwLDB4ZDMsMHhmZiwweDAzLDB4MjQsCi0weDgzLDB4ZmYsMHgwMiwweDI0LDB4MDAsMHgwMCwweGMzLDB4YTAsMHgwMCwweDAwLDB4MDIsMHhhMSwweDQ4LDB4MTUsMHgwMCwweDA4LAotMHhkNCwweDQyLDB4YTAsMHhhMCwweGQwLDB4ZmYsMHhiZCwweDI3LDB4MWMsMHgwMCwweGIxLDB4YWYsMHgyOCwweDAwLDB4YmYsMHhhZiwKLTB4MjQsMHgwMCwweGIzLDB4YWYsMHgyMCwweDAwLDB4YjIsMHhhZiwweDE4LDB4MDAsMHhiMCwweGFmLDB4ZmYsMHhmZiwweDExLDB4MjQsCi0weDAyLDB4ODAsMHgxMywweDNjLDB4NDEsMHhiMCwweDAyLDB4M2MsMHg2OCwweDE1LDB4NjYsMHgyNiwweDA0LDB4MDAsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4NDcsMHg4YywweDAwLDB4NGIsMHhjNSwweDhjLDB4MDIsMHg4MCwweDAzLDB4M2MsMHg5NiwweDdkLDB4NjQsMHg5MCwKLTB4ZmMsMHg0YSwweGM4LDB4OGMsMHgwMiwweDgwLDB4MDIsMHgzYywweGI4LDB4N2QsMHg0OSwweDkwLDB4MjUsMHhiMCwweDBhLDB4M2MsCi0weDI1LDB4OTAsMHhhNywweDAwLDB4YjAsMHgwMywweDQyLDB4MzUsMHgwMCwweDAwLDB4NTIsMHhhYywweDAwLDB4MjQsMHgwNCwweDAwLAotMHgwMCwweDAwLDB4NDgsMHhhYywweDg0LDB4MDIsMHg0MywweDM1LDB4OGMsMHgwMiwweDQ1LDB4MzUsMHgwMSwweDAwLDB4MDIsMHgyNCwKLTB4MDAsMHgwMCwweDcyLDB4YWMsMHgwMCwweDAwLDB4YTQsMHhhYywweGI5LDB4MDQsMHgyMiwweDExLDB4MDAsMHg0YiwweGQyLDB4YWMsCi0weDY4LDB4MTUsMHg2NiwweDI2LDB4ZmMsMHg0YSwweGMyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MjgsMHg1MiwweDAwLAotMHgwMSwweDAwLDB4YTMsMHgzMCwweDA5LDB4MDAsMHg2MCwweDEwLDB4MDQsMHgwMCwweGEyLDB4MzAsMHgwMCwweDRiLDB4YzIsMHg4YywKLTB4MjUsMHhiMCwweDAzLDB4M2MsMHgwMSwweDAwLDB4MDQsMHgyNCwweDAxLDB4MDAsMHg0MiwweDM4LDB4YjAsMHgwMywweDYzLDB4MzQsCi0weDAwLDB4MDAsMHg2NCwweGFjLDB4MDAsMHg0YiwweGMyLDB4YWMsMHgwNCwweDAwLDB4YTIsMHgzMCwweDA5LDB4MDAsMHg0MCwweDEwLAotMHgwOCwweDAwLDB4YTIsMHgzMCwweDAwLDB4NGIsMHhjMiwweDhjLDB4MjUsMHhiMCwweDAzLDB4M2MsMHgwNCwweDAwLDB4MDQsMHgyNCwKLTB4MDQsMHgwMCwweDQyLDB4MzgsMHhiMCwweDAzLDB4NjMsMHgzNCwweDAwLDB4MDAsMHg2NCwweGFjLDB4MDAsMHg0YiwweGMyLDB4YWMsCi0weDA4LDB4MDAsMHhhMiwweDMwLDB4MGUsMHgwMCwweDQwLDB4MTAsMHg2OCwweDE1LDB4NjQsMHgyNiwweGM5LDB4NjQsMHhjMiwweDkwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4MDAsMHg0MCwweDE4LDB4MmEsMHhiMCwweDAyLDB4M2MsMHgwMiwweDAwLDB4MDMsMHgyNCwKLTB4MDEsMHgwMCwweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhMCwweGM5LDB4NjQsMHhjMCwweGEwLDB4MDAsMHg0YiwweGMyLDB4OGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDQyLDB4MzgsMHgwMCwweDRiLDB4YzIsMHhhYywweDY4LDB4MTUsMHg2NCwweDI2LAotMHhmYywweDRhLDB4ODIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgxMCwweDUyLDB4MDAsMHgxMCwweDAwLDB4NDIsMHgzMCwKLTB4MGQsMHgwMCwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM5LDB4NjQsMHg4MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA1LDB4MDAsMHg0MCwweDE4LDB4MmEsMHhiMCwweDAyLDB4M2MsMHgwMiwweDAwLDB4MDMsMHgyNCwweDAxLDB4MDAsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4NDMsMHhhMCwweGM5LDB4NjQsMHg4MCwweGEwLDB4MDAsMHg0YiwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MTAsMHgwMCwweDQyLDB4MzgsMHgwMCwweDRiLDB4ODIsMHhhYywweDY4LDB4MTUsMHg2NCwweDI2LDB4ZmMsMHg0YSwweDgyLDB4OGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgxMCwweDUyLDB4MDAsMHgyMCwweDAwLDB4NDIsMHgzMCwweDBlLDB4MDAsMHg0MCwweDEwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGM5LDB4NjQsMHg4MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDAwLDB4NDAsMHgxOCwKLTB4MmEsMHhiMCwweDAyLDB4M2MsMHgwMiwweDAwLDB4MDMsMHgyNCwweDAxLDB4MDAsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YTAsCi0weGM5LDB4NjQsMHg4MCwweGEwLDB4MDAsMHg0YiwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHg0MiwweDM4LAotMHgwMCwweDRiLDB4ODIsMHhhYywweDY4LDB4MTUsMHg2NCwweDI2LDB4ZmMsMHg0YSwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjQsMHgxMCwweDUyLDB4MDAsMHg0MCwweDAwLDB4NDIsMHgzMCwweDBkLDB4MDAsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGM5LDB4NjQsMHg4MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDAwLDB4NDAsMHgxOCwweDJhLDB4YjAsMHgwMiwweDNjLAotMHgwMiwweDAwLDB4MDMsMHgyNCwweDAxLDB4MDAsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YTAsMHhjOSwweDY0LDB4ODAsMHhhMCwKLTB4MDAsMHg0YiwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQwLDB4MDAsMHg0MiwweDM4LDB4MDAsMHg0YiwweDgyLDB4YWMsCi0weDY4LDB4MTUsMHg2NCwweDI2LDB4ZmMsMHg0YSwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MTAsMHg1MiwweDAwLAotMHg4MCwweDAwLDB4NDIsMHgzMCwweDBlLDB4MDAsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOSwweDY0LDB4ODIsMHg5MCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDAwLDB4NDAsMHgxOCwweDJhLDB4YjAsMHgwMiwweDNjLDB4MDIsMHgwMCwweDAzLDB4MjQsCi0weDAxLDB4MDAsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YTAsMHhjOSwweDY0LDB4ODAsMHhhMCwweDAwLDB4NGIsMHg4MiwweDhjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDAsMHg0MiwweDM4LDB4MDAsMHg0YiwweDgyLDB4YWMsMHg2OCwweDE1LDB4NjQsMHgyNiwKLTB4ZmMsMHg0YSwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MTAsMHg1MiwweDAwLDB4MDAsMHgwMSwweDQyLDB4MzAsCi0weDBkLDB4MDAsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOSwweDY0LDB4ODIsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwNSwweDAwLDB4NDAsMHgxOCwweDJhLDB4YjAsMHgwMiwweDNjLDB4MDIsMHgwMCwweDAzLDB4MjQsMHgwMSwweDAwLDB4NDIsMHgzNCwKLTB4MDAsMHgwMCwweDQzLDB4YTAsMHhjOSwweDY0LDB4ODAsMHhhMCwweDAwLDB4NGIsMHg4MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDEsMHg0MiwweDM4LDB4MDAsMHg0YiwweDgyLDB4YWMsMHg2OCwweDE1LDB4NjQsMHgyNiwweGZjLDB4NGEsMHg4MiwweDhjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MTAsMHg1MiwweDAwLDB4MDAsMHgwMiwweDQyLDB4MzAsMHgwZSwweDAwLDB4NDAsMHgxMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOSwweDY0LDB4ODIsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHgwMCwweDQwLDB4MTgsCi0weDJhLDB4YjAsMHgwMiwweDNjLDB4MDIsMHgwMCwweDAzLDB4MjQsMHgwMSwweDAwLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweGEwLAotMHhjOSwweDY0LDB4ODAsMHhhMCwweDAwLDB4NGIsMHg4MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4NDIsMHgzOCwKLTB4MDAsMHg0YiwweDgyLDB4YWMsMHg2OCwweDE1LDB4NjQsMHgyNiwweGZjLDB4NGEsMHg4MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDI0LDB4MTAsMHg1MiwweDAwLDB4MDAsMHgwNCwweDQyLDB4MzAsMHgwZCwweDAwLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhjOSwweDY0LDB4ODIsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHgwMCwweDQwLDB4MTgsMHgyYSwweGIwLDB4MDIsMHgzYywKLTB4MDIsMHgwMCwweDAzLDB4MjQsMHgwMSwweDAwLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweGEwLDB4YzksMHg2NCwweDgwLDB4YTAsCi0weDAwLDB4NGIsMHg4MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4NDIsMHgzOCwweDAwLDB4NGIsMHg4MiwweGFjLAotMHg2OCwweDE1LDB4NjMsMHgyNiwweGZjLDB4NGEsMHg2MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDEwLDB4NTIsMHgwMCwKLTB4MDAsMHgwOCwweDQyLDB4MzAsMHgzYSwweDAwLDB4NDAsMHgxMCwweDJhLDB4YjAsMHgwNSwweDNjLDB4MDAsMHgwMCwweGE4LDB4OGMsCi0weGZmLDB4MDAsMHgwMiwweDI0LDB4ZmYsMHgwMCwweDA0LDB4MzEsMHgzMSwweDAwLDB4ODIsMHgxMCwweDAwLDB4ODAsMHgwMiwweDMxLAotMHgwOCwweDA0LDB4NDAsMHgxNCwweDAwLDB4ODAsMHgwMiwweDNjLDB4MDAsMHhmZiwweDAyLDB4M2MsMHgyNCwweDEwLDB4MDIsMHgwMSwKLTB4MDUsMHgwMCwweDQwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM5LDB4NjQsMHg2MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDBiLDB4MDAsMHg0MCwweDE4LDB4ZmYsMHgwMCwweDAyLDB4MjQsMHgwOCwweDY0LDB4NjIsMHg5MCwweDIwLDB4YjAsMHgwMywweDNjLAotMHgwMCwweDEyLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLDB4MGMsMHgwMCwweDQ4LDB4OGMsMHgyNSwweGIwLDB4MDMsMHgzYywKLTB4YjAsMHgwMywweDYzLDB4MzQsMHgwMCwweDAwLDB4NjgsMHhhYywweGZmLDB4MDAsMHgwNCwweDMxLDB4ZmYsMHgwMCwweDAyLDB4MjQsCi0weDFhLDB4MDAsMHg4MiwweDEwLDB4NjgsMHgxNSwweDcwLDB4MjYsMHhmZiwweDAwLDB4MDMsMHgzMSwweGMwLDB4NjQsMHgwNSwweDhlLAotMHgyMCwweDEwLDB4MDIsMHgzYywweDAwLDB4MWEsMHgwMywweDAwLDB4MjEsMHgxOCwweDYyLDB4MDAsMHgyMSwweDMwLDB4NjAsMHgwMCwKLTB4NTQsMHg2NCwweDAzLDB4YWUsMHgyMSwweDIwLDB4MDAsMHgwMCwweDA4LDB4NjQsMHgwOCwweGEyLDB4MjAsMHgwMCwweDA3LDB4MjQsCi0weDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGEwLDB4YWYsMHhmYywweDRhLDB4MDUsMHg4ZSwweDAyLDB4ODAsMHgwNiwweDNjLAotMHg2YywweDdlLDB4YzQsMHg4YywweGZmLDB4YzcsMHgwMiwweDI0LDB4MjQsMHgyOCwweGEyLDB4MDAsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4MDQsMHgwMCwweDg0LDB4MzQsMHg4MCwweDAzLDB4NDIsMHgzNCwweDQxLDB4YjAsMHgwMywweDNjLDB4MDAsMHgwMCwweDQ0LDB4YWMsCi0weDAwLDB4MDAsMHg2NSwweGFjLDB4NmMsMHg3ZSwweGM0LDB4YWMsMHhmYywweDRhLDB4MDUsMHhhZSwweDY4LDB4MTUsMHg2MywweDI2LAotMHgwMCwweDRiLDB4NjIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDQyLDB4MzgsMHgwMCwweDRiLDB4NjIsMHhhYywKLTB4NjgsMHgxNSwweDY1LDB4MjYsMHhmYywweDRhLDB4YTIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgxMCwweDUyLDB4MDAsCi0weDAwLDB4MTAsMHg0MiwweDMwLDB4MzgsMHgwMCwweDQwLDB4MTAsMHgyYSwweGIwLDB4MDIsMHgzYywweDA4LDB4MDAsMHg0MywweDM0LAotMHgwMCwweDAwLDB4NjgsMHg4YywweGZmLDB4MDAsMHgwMiwweDI0LDB4ZmYsMHgwMCwweDA0LDB4MzEsMHgyYywweDAwLDB4ODIsMHgxMCwKLTB4MDAsMHg4MCwweDAyLDB4MzEsMHhjYSwweDAzLDB4NDAsMHgxNCwweDAwLDB4ODAsMHgwMiwweDNjLDB4MDAsMHhmZiwweDAyLDB4M2MsCi0weDI0LDB4MTAsMHgwMiwweDAxLDB4MGIsMHgwMCwweDQwLDB4MTAsMHhmZiwweDAwLDB4MDIsMHgyNCwweDEwLDB4NjQsMHhhMiwweDkwLAotMHgyMCwweGIwLDB4MDMsMHgzYywweDAwLDB4MTIsMHgwMiwweDAwLDB4MjEsMHgxMCwweDQzLDB4MDAsMHgwYywweDAwLDB4NDgsMHg4YywKLTB4MjUsMHhiMCwweDAzLDB4M2MsMHhiMCwweDAzLDB4NjMsMHgzNCwweDAwLDB4MDAsMHg2OCwweGFjLDB4ZmYsMHgwMCwweDA0LDB4MzEsCi0weGZmLDB4MDAsMHgwMiwweDI0LDB4MWEsMHgwMCwweDgyLDB4MTAsMHg2OCwweDE1LDB4NzAsMHgyNiwweGZmLDB4MDAsMHgwMywweDMxLAotMHhkOCwweDY0LDB4MDUsMHg4ZSwweDIwLDB4MTAsMHgwMiwweDNjLDB4MDAsMHgxYSwweDAzLDB4MDAsMHgyMSwweDE4LDB4NjIsMHgwMCwKLTB4MjEsMHgzMCwweDYwLDB4MDAsMHg2YywweDY0LDB4MDMsMHhhZSwweDAxLDB4MDAsMHgwNCwweDI0LDB4MTAsMHg2NCwweDA4LDB4YTIsCi0weDIwLDB4MDAsMHgwNywweDI0LDB4MTAsMHgwMSwweDAwLDB4MGMsMHgxMCwweDAwLDB4YTAsMHhhZiwweGZjLDB4NGEsMHgwNSwweDhlLAotMHgwMiwweDgwLDB4MDYsMHgzYywweDZjLDB4N2UsMHhjNCwweDhjLDB4ZmYsMHhjNywweDAyLDB4MjQsMHgyNCwweDI4LDB4YTIsMHgwMCwKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHgxMCwweDAwLDB4ODQsMHgzNCwweDgwLDB4MDMsMHg0MiwweDM0LDB4NDEsMHhiMCwweDAzLDB4M2MsCi0weDAwLDB4MDAsMHg0NCwweGFjLDB4MDAsMHgwMCwweDY1LDB4YWMsMHg2YywweDdlLDB4YzQsMHhhYywweGZjLDB4NGEsMHgwNSwweGFlLAotMHg2OCwweDE1LDB4NjMsMHgyNiwweDAwLDB4NGIsMHg2MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDEwLDB4NDIsMHgzOCwKLTB4MDAsMHg0YiwweDYyLDB4YWMsMHg2OCwweDE1LDB4NjUsMHgyNiwweGZjLDB4NGEsMHhhMiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDI0LDB4MTAsMHg1MiwweDAwLDB4MDAsMHgyMCwweDQyLDB4MzAsMHgzNywweDAwLDB4NDAsMHgxMCwweDJhLDB4YjAsMHgwMiwweDNjLAotMHgwNCwweDAwLDB4NDMsMHgzNCwweDAwLDB4MDAsMHg2OCwweDhjLDB4ZmYsMHgwMCwweDAyLDB4MjQsMHhmZiwweDAwLDB4MDQsMHgzMSwKLTB4YWIsMHgwMywweDgyLDB4MTAsMHgwMCwweDgwLDB4MDIsMHgzMSwweDkwLDB4MDMsMHg0MCwweDE0LDB4MDAsMHg4MCwweDAyLDB4M2MsCi0weDAwLDB4ZmYsMHgwMiwweDNjLDB4MjQsMHgxMCwweDAyLDB4MDEsMHgwYiwweDAwLDB4NDAsMHgxMCwweGZmLDB4MDAsMHgwMiwweDI0LAotMHgwYywweDY0LDB4YTIsMHg5MCwweDIwLDB4YjAsMHgwMywweDNjLDB4MDAsMHgxMiwweDAyLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwKLTB4MGMsMHgwMCwweDQ4LDB4OGMsMHgyNSwweGIwLDB4MDMsMHgzYywweGIwLDB4MDMsMHg2MywweDM0LDB4MDAsMHgwMCwweDY4LDB4YWMsCi0weGZmLDB4MDAsMHgwNCwweDMxLDB4ZmYsMHgwMCwweDAyLDB4MjQsMHgxYSwweDAwLDB4ODIsMHgxMCwweGZmLDB4MDAsMHgwMywweDMxLAotMHg2OCwweDE1LDB4NzAsMHgyNiwweGNjLDB4NjQsMHgwNSwweDhlLDB4MjAsMHgxMCwweDAyLDB4M2MsMHgwMCwweDFhLDB4MDMsMHgwMCwKLTB4MjEsMHgxOCwweDYyLDB4MDAsMHgyMSwweDMwLDB4NjAsMHgwMCwweDYwLDB4NjQsMHgwMywweGFlLDB4MDEsMHgwMCwweDA0LDB4MjQsCi0weDBjLDB4NjQsMHgwOCwweGEyLDB4MjAsMHgwMCwweDA3LDB4MjQsMHgxMCwweDAxLDB4MDAsMHgwYywweDEwLDB4MDAsMHhhMCwweGFmLAotMHhmYywweDRhLDB4MDUsMHg4ZSwweDAyLDB4ODAsMHgwNiwweDNjLDB4NmMsMHg3ZSwweGM0LDB4OGMsMHhmZiwweGM3LDB4MDIsMHgyNCwKLTB4MjQsMHgyOCwweGEyLDB4MDAsMHgyNSwweGIwLDB4MDIsMHgzYywweDIwLDB4MDAsMHg4NCwweDM0LDB4ODAsMHgwMywweDQyLDB4MzQsCi0weDQxLDB4YjAsMHgwMywweDNjLDB4MDAsMHgwMCwweDQ0LDB4YWMsMHgwMCwweDAwLDB4NjUsMHhhYywweDZjLDB4N2UsMHhjNCwweGFjLAotMHhmYywweDRhLDB4MDUsMHhhZSwweDY4LDB4MTUsMHg2MywweDI2LDB4MDAsMHg0YiwweDYyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgyMCwweDQyLDB4MzgsMHgwMCwweDRiLDB4NjIsMHhhYywweDY4LDB4MTUsMHg2NSwweDI2LDB4ZmMsMHg0YSwweGEyLDB4OGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHgxMCwweDUyLDB4MDAsMHgwMCwweDgwLDB4NDIsMHgzMCwweDU5LDB4MDAsMHg0MCwweDEwLAotMHgyYSwweGIwLDB4MDYsMHgzYywweDBjLDB4MDAsMHhjMywweDM0LDB4MDAsMHgwMCwweDY4LDB4OGMsMHhmZiwweDAwLDB4MDcsMHgyNCwKLTB4ZmYsMHgwMCwweDA0LDB4MzEsMHg3OCwweDAzLDB4ODcsMHgxMCwweDAwLDB4ODAsMHgwMiwweDMxLDB4MjQsMHgwMCwweDQwLDB4MTQsCi0weDAwLDB4ODAsMHgwMiwweDNjLDB4MDAsMHhmZiwweDAyLDB4M2MsMHgyNCwweDEwLDB4MDIsMHgwMSwweDIyLDB4MDAsMHg0MCwweDEwLAotMHhmZiwweDAwLDB4MDIsMHgyNCwweDQwLDB4MDAsMHhjNiwweDM0LDB4MDAsMHgwMCwweGMyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ZmYsMHgwMCwweDQ0LDB4MzAsMHgwZiwweDAwLDB4ODcsMHgxMCwweDY4LDB4MTUsMHg2MiwweDI2LDB4ZTgsMHg2MywweGE0LDB4YTAsCi0weDAwLDB4MDAsMHhjMiwweDkwLDB4ZmYsMHgwMCwweDgzLDB4MzAsMHhmZiwweDAwLDB4NDQsMHgzMCwweDA5LDB4MDAsMHg4MywweDEwLAotMHg2OCwweDE1LDB4NjIsMHgyNiwweDIxLDB4MzgsMHhhMCwweDAwLDB4MjEsMHgyOCwweGMwLDB4MDAsMHgwMCwweDAwLDB4YTIsMHg5MCwKLTB4MjEsMHgxOCwweDgwLDB4MDAsMHhmZCwweGZmLDB4NjIsMHgxNCwweGZmLDB4MDAsMHg0NCwweDMwLDB4ZTgsMHg2MywweGUzLDB4YTAsCi0weDY4LDB4MTUsMHg2MiwweDI2LDB4ZTgsMHg2MywweDQzLDB4OTAsMHgyMCwweGIwLDB4MDIsMHgzYywweDAwLDB4MWEsMHgwMywweDAwLAotMHgyMSwweDE4LDB4NjIsMHgwMCwweDBjLDB4MDAsMHg2OCwweDhjLDB4MjUsMHhiMCwweDAyLDB4M2MsMHhiMCwweDAzLDB4NDIsMHgzNCwKLTB4ZmYsMHgwMCwweDA0LDB4MzEsMHgwMCwweDAwLDB4NDgsMHhhYywweDE2LDB4MTcsMHgwMCwweDA4LDB4ZmYsMHgwMCwweDAyLDB4MjQsCi0weDAwLDB4MDAsMHg2MiwweGFjLDB4ZmYsMHgwMCwweDAyLDB4MjQsMHgyNCwweDAwLDB4ODIsMHgxMCwweDY4LDB4MTUsMHg3MCwweDI2LAotMHhmZiwweDAwLDB4MDMsMHgzMSwweDkwLDB4NjQsMHgwNSwweDhlLDB4MjAsMHgxMCwweDAyLDB4M2MsMHgwMCwweDFhLDB4MDMsMHgwMCwKLTB4MjEsMHgxOCwweDYyLDB4MDAsMHgyMSwweDMwLDB4NjAsMHgwMCwweGU4LDB4NjMsMHgwOCwweGEyLDB4MjQsMHg2NCwweDAzLDB4YWUsCi0weDAzLDB4MDAsMHgwNCwweDI0LDB4MjAsMHgwMCwweDA3LDB4MjQsMHgxMCwweDAxLDB4MDAsMHgwYywweDEwLDB4MDAsMHhhMCwweGFmLAotMHgwMiwweDgwLDB4MGEsMHgzYywweDdjLDB4N2UsMHg0NywweDkxLDB4MDIsMHg4MCwweDA5LDB4M2MsMHg2YywweDdlLDB4MjUsMHg4ZCwKLTB4ZmMsMHg0YSwweDA2LDB4OGUsMHgwMSwweDAwLDB4MDgsMHgzYywweDgwLDB4ZmYsMHgwMiwweDI0LDB4MjUsMHgzOCwweGUyLDB4MDAsCi0weDAwLDB4ODAsMHgwMywweDM1LDB4ODAsMHgwMCwweGE1LDB4MzQsMHgyNywweDE4LDB4MDMsMHgwMCwweDAwLDB4MjYsMHgwNywweDAwLAotMHgyNSwweGIwLDB4MDIsMHgzYywweDI0LDB4MzAsMHhjMywweDAwLDB4MjUsMHgyMCwweDg1LDB4MDAsMHg4MCwweDAzLDB4NDIsMHgzNCwKLTB4NDEsMHhiMCwweDAzLDB4M2MsMHgwMCwweDAwLDB4NDQsMHhhYywweDI3LDB4ODgsMHgwOCwweDAwLDB4MDAsMHgwMCwweDY2LDB4YWMsCi0weDZjLDB4N2UsMHgyNSwweGFkLDB4N2MsMHg3ZSwweDQ3LDB4YTEsMHhmYywweDRhLDB4MDYsMHhhZSwweDY4LDB4MTUsMHg2MywweDI2LAotMHgwMCwweDRiLDB4NjIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDQyLDB4MzgsMHgwMCwweDRiLDB4NjIsMHhhYywKLTB4NjgsMHgxNSwweDY1LDB4MjYsMHhmYywweDRhLDB4YTIsMHg4YywweDAxLDB4MDAsMHgwMywweDNjLDB4MjQsMHgxMCwweDUyLDB4MDAsCi0weDI0LDB4MTAsMHg1MSwweDAwLDB4MjQsMHgxMCwweDQzLDB4MDAsMHg1NiwweDAwLDB4NDAsMHgxMCwweDJhLDB4YjAsMHgwNiwweDNjLAotMHgxMCwweDAwLDB4YzMsMHgzNCwweDAwLDB4MDAsMHg2OCwweDhjLDB4ZmYsMHgwMCwweDA3LDB4MjQsMHhmZiwweDAwLDB4MDQsMHgzMSwKLTB4MjMsMHgwMywweDg3LDB4MTAsMHgyNSwweGIwLDB4MDIsMHgzYywweDAwLDB4ODAsMHgwMiwweDMxLDB4MjMsMHgwMCwweDQwLDB4MTQsCi0weDAwLDB4ODAsMHgwMiwweDNjLDB4MDAsMHhmZiwweDAyLDB4M2MsMHgyNCwweDEwLDB4MDIsMHgwMSwweDIxLDB4MDAsMHg0MCwweDEwLAotMHhmZiwweDAwLDB4MDIsMHgyNCwweDQxLDB4MDAsMHhjNiwweDM0LDB4MDAsMHgwMCwweGMyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ZmYsMHgwMCwweDQ0LDB4MzAsMHgwZSwweDAwLDB4ODcsMHgxMCwweDY4LDB4MTUsMHg2MiwweDI2LDB4ZWMsMHg2MywweGE0LDB4YTAsCi0weDAwLDB4MDAsMHhjMiwweDkwLDB4ZmYsMHgwMCwweDgzLDB4MzAsMHhmZiwweDAwLDB4NDQsMHgzMCwweDA3LDB4MDAsMHg4MywweDEwLAotMHgyMSwweDM4LDB4YTAsMHgwMCwweDIxLDB4MjgsMHhjMCwweDAwLDB4MDAsMHgwMCwweGEyLDB4OTAsMHgyMSwweDE4LDB4ODAsMHgwMCwKLTB4ZmQsMHhmZiwweDYyLDB4MTQsMHhmZiwweDAwLDB4NDQsMHgzMCwweGVjLDB4NjMsMHhlMywweGEwLDB4NjgsMHgxNSwweDYyLDB4MjYsCi0weGVjLDB4NjMsMHg0MywweDkwLDB4MjAsMHhiMCwweDAyLDB4M2MsMHgwMCwweDFhLDB4MDMsMHgwMCwweDIxLDB4MTgsMHg2MiwweDAwLAotMHgwYywweDAwLDB4NjgsMHg4YywweDI1LDB4YjAsMHgwMiwweDNjLDB4YjAsMHgwMywweDQyLDB4MzQsMHhmZiwweDAwLDB4MDQsMHgzMSwKLTB4MDAsMHgwMCwweDQ4LDB4YWMsMHg3NSwweDE3LDB4MDAsMHgwOCwweGZmLDB4MDAsMHgwMiwweDI0LDB4MDAsMHgwMCwweDYyLDB4YWMsCi0weGZmLDB4MDAsMHgwMiwweDI0LDB4MjIsMHgwMCwweDgyLDB4MTAsMHg2OCwweDE1LDB4NzAsMHgyNiwweGZmLDB4MDAsMHgwMywweDMxLAotMHg5MCwweDY0LDB4MDUsMHg4ZSwweDIwLDB4MTAsMHgwMiwweDNjLDB4MDAsMHgxYSwweDAzLDB4MDAsMHgyMSwweDE4LDB4NjIsMHgwMCwKLTB4MjEsMHgzMCwweDYwLDB4MDAsMHhlYywweDYzLDB4MDgsMHhhMiwweDI0LDB4NjQsMHgwMywweGFlLDB4MDMsMHgwMCwweDA0LDB4MjQsCi0weDIwLDB4MDAsMHgwNywweDI0LDB4MTAsMHgwMSwweDAwLDB4MGMsMHgxMCwweDAwLDB4YTAsMHhhZiwweDAyLDB4ODAsMHgwOSwweDNjLAotMHg3YywweDdlLDB4MjcsMHg5MSwweDAyLDB4ODAsMHgwOCwweDNjLDB4NmMsMHg3ZSwweDA1LDB4OGQsMHhmYywweDRhLDB4MDYsMHg4ZSwKLTB4MDEsMHgwMCwweDAyLDB4M2MsMHgwMCwweDgwLDB4NDIsMHgzNCwweDQwLDB4MDAsMHhlNywweDM0LDB4MjcsMHgxMCwweDAyLDB4MDAsCi0weDI0LDB4MzAsMHhjMiwweDAwLDB4ODAsMHgwMCwweGE1LDB4MzQsMHgwMCwweDI2LDB4MDcsMHgwMCwweDI1LDB4YjAsMHgwMiwweDNjLAotMHgyNSwweDIwLDB4ODUsMHgwMCwweDgwLDB4MDMsMHg0MiwweDM0LDB4NDEsMHhiMCwweDAzLDB4M2MsMHgwMCwweDAwLDB4NDQsMHhhYywKLTB4MDAsMHgwMCwweDY2LDB4YWMsMHg2YywweDdlLDB4MDUsMHhhZCwweDdjLDB4N2UsMHgyNywweGExLDB4ZmMsMHg0YSwweDA2LDB4YWUsCi0weDY4LDB4MTUsMHg2MiwweDI2LDB4MDAsMHg0YiwweDQzLDB4OGMsMHgwMSwweDAwLDB4MDQsMHgzYywweDI2LDB4MTgsMHg2NCwweDAwLAotMHgwMCwweDRiLDB4NDMsMHhhYywweDY4LDB4MTUsMHg2NSwweDI2LDB4ZmMsMHg0YSwweGEyLDB4OGMsMHgwMiwweDAwLDB4MDMsMHgzYywKLTB4MjQsMHgxMCwweDUyLDB4MDAsMHgyNCwweDEwLDB4NDMsMHgwMCwweDVhLDB4MDAsMHg0MCwweDEwLDB4MmEsMHhiMCwweDA2LDB4M2MsCi0weDE0LDB4MDAsMHhjMywweDM0LDB4MDAsMHgwMCwweDY4LDB4OGMsMHhmZiwweDAwLDB4MDcsMHgyNCwweGZmLDB4MDAsMHgwNCwweDMxLAotMHhjYywweDAyLDB4ODcsMHgxMCwweDI1LDB4YjAsMHgwMiwweDNjLDB4MDAsMHg4MCwweDAyLDB4MzEsMHgyMywweDAwLDB4NDAsMHgxNCwKLTB4MDAsMHg4MCwweDAyLDB4M2MsMHgwMCwweGZmLDB4MDIsMHgzYywweDI0LDB4MTAsMHgwMiwweDAxLDB4MjEsMHgwMCwweDQwLDB4MTAsCi0weGZmLDB4MDAsMHgwMiwweDI0LDB4NDIsMHgwMCwweGM2LDB4MzQsMHgwMCwweDAwLDB4YzIsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhmZiwweDAwLDB4NDQsMHgzMCwweDBlLDB4MDAsMHg4NywweDEwLDB4NjgsMHgxNSwweDYyLDB4MjYsMHhmMCwweDYzLDB4YTQsMHhhMCwKLTB4MDAsMHgwMCwweGMyLDB4OTAsMHhmZiwweDAwLDB4ODMsMHgzMCwweGZmLDB4MDAsMHg0NCwweDMwLDB4MDcsMHgwMCwweDgzLDB4MTAsCi0weDIxLDB4MzgsMHhhMCwweDAwLDB4MjEsMHgyOCwweGMwLDB4MDAsMHgwMCwweDAwLDB4YTIsMHg5MCwweDIxLDB4MTgsMHg4MCwweDAwLAotMHhmZCwweGZmLDB4NjIsMHgxNCwweGZmLDB4MDAsMHg0NCwweDMwLDB4ZjAsMHg2MywweGUzLDB4YTAsMHg2OCwweDE1LDB4NjIsMHgyNiwKLTB4ZjAsMHg2MywweDQzLDB4OTAsMHgyMCwweGIwLDB4MDIsMHgzYywweDAwLDB4MWEsMHgwMywweDAwLDB4MjEsMHgxOCwweDYyLDB4MDAsCi0weDBjLDB4MDAsMHg2OCwweDhjLDB4MjUsMHhiMCwweDAyLDB4M2MsMHhiMCwweDAzLDB4NDIsMHgzNCwweGZmLDB4MDAsMHgwNCwweDMxLAotMHgwMCwweDAwLDB4NDgsMHhhYywweGQxLDB4MTcsMHgwMCwweDA4LDB4ZmYsMHgwMCwweDAyLDB4MjQsMHgwMCwweDAwLDB4NjIsMHhhYywKLTB4ZmYsMHgwMCwweDAyLDB4MjQsMHgyNSwweDAwLDB4ODIsMHgxMCwweDY4LDB4MTUsMHg3MCwweDI2LDB4ZmYsMHgwMCwweDAzLDB4MzEsCi0weDljLDB4NjQsMHgwNSwweDhlLDB4MjAsMHgxMCwweDAyLDB4M2MsMHgwMCwweDFhLDB4MDMsMHgwMCwweDIxLDB4MTgsMHg2MiwweDAwLAotMHgyMSwweDMwLDB4NjAsMHgwMCwweGYwLDB4NjMsMHgwOCwweGEyLDB4MzAsMHg2NCwweDAzLDB4YWUsMHgwNCwweDAwLDB4MDQsMHgyNCwKLTB4MjAsMHgwMCwweDA3LDB4MjQsMHgxMCwweDAxLDB4MDAsMHgwYywweDEwLDB4MDAsMHhhMCwweGFmLDB4MDIsMHg4MCwweDBhLDB4M2MsCi0weDdjLDB4N2UsMHg0NywweDkxLDB4MDIsMHg4MCwweDA5LDB4M2MsMHg2YywweDdlLDB4MjUsMHg4ZCwweGZjLDB4NGEsMHgwNiwweDhlLAotMHgwNiwweDAwLDB4MDIsMHgzYywweDIwLDB4MDAsMHhlNywweDM0LDB4MjcsMHgxMCwweDAyLDB4MDAsMHgyNCwweDMwLDB4YzIsMHgwMCwKLTB4MDAsMHgwMSwweGE1LDB4MzQsMHgyNSwweGIwLDB4MDMsMHgzYywweDA0LDB4MDAsMHgwMiwweDNjLDB4MDAsMHgyNiwweDA3LDB4MDAsCi0weDI2LDB4ODgsMHgyMiwweDAyLDB4YjAsMHgwMywweDY4LDB4MzQsMHgyNSwweDIwLDB4ODUsMHgwMCwweDgwLDB4MDMsMHg2MywweDM0LAotMHg0MSwweGIwLDB4MDIsMHgzYywweDAwLDB4MDAsMHg2NCwweGFjLDB4MDAsMHgwMCwweDQ2LDB4YWMsMHg2YywweDdlLDB4MjUsMHhhZCwKLTB4N2MsMHg3ZSwweDQ3LDB4YTEsMHhmYywweDRhLDB4MDYsMHhhZSwweDAwLDB4MDAsMHgxMSwweGFkLDB4NjgsMHgxNSwweDYyLDB4MjYsCi0weDAwLDB4NGIsMHg0MywweDhjLDB4MDIsMHgwMCwweDA0LDB4M2MsMHgyNiwweDE4LDB4NjQsMHgwMCwweDAwLDB4NGIsMHg0MywweGFjLAotMHg2OCwweDE1LDB4NjUsMHgyNiwweGZjLDB4NGEsMHhhMiwweDhjLDB4MDQsMHgwMCwweDAzLDB4M2MsMHgyNCwweDEwLDB4NTIsMHgwMCwKLTB4MjQsMHgxMCwweDUxLDB4MDAsMHgyNCwweDEwLDB4NDMsMHgwMCwweDU4LDB4MDAsMHg0MCwweDEwLDB4MjUsMHhiMCwweDAzLDB4M2MsCi0weGIwLDB4MDMsMHg2MiwweDM0LDB4MmEsMHhiMCwweDA5LDB4M2MsMHgwMCwweDAwLDB4NTEsMHhhYywweDE4LDB4MDAsMHgyNiwweDM1LAotMHgwMCwweDAwLDB4YzgsMHg4YywweGZmLDB4MDAsMHgwNywweDI0LDB4ZmYsMHgwMCwweDA0LDB4MzEsMHgzYSwweDAyLDB4ODcsMHgxMCwKLTB4MDQsMHgwMCwweDAyLDB4MjQsMHgwMCwweDgwLDB4MDIsMHgzMSwweDIzLDB4MDAsMHg0MCwweDE0LDB4MDAsMHg4MCwweDAyLDB4M2MsCi0weDAwLDB4ZmYsMHgwMiwweDNjLDB4MjQsMHgxMCwweDAyLDB4MDEsMHgyMSwweDAwLDB4NDAsMHgxMCwweGZmLDB4MDAsMHgwMiwweDI0LAotMHg0MywweDAwLDB4MjYsMHgzNSwweDAwLDB4MDAsMHhjMiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweDAwLDB4NDQsMHgzMCwKLTB4MGUsMHgwMCwweDg3LDB4MTAsMHg2OCwweDE1LDB4NjIsMHgyNiwweGY0LDB4NjMsMHhhNCwweGEwLDB4MDAsMHgwMCwweGMyLDB4OTAsCi0weGZmLDB4MDAsMHg4MywweDMwLDB4ZmYsMHgwMCwweDQ0LDB4MzAsMHgwNywweDAwLDB4ODMsMHgxMCwweDIxLDB4MzgsMHhhMCwweDAwLAotMHgyMSwweDI4LDB4YzAsMHgwMCwweDAwLDB4MDAsMHhhMiwweDkwLDB4MjEsMHgxOCwweDgwLDB4MDAsMHhmZCwweGZmLDB4NjIsMHgxNCwKLTB4ZmYsMHgwMCwweDQ0LDB4MzAsMHhmNCwweDYzLDB4ZTMsMHhhMCwweDY4LDB4MTUsMHg2MiwweDI2LDB4ZjQsMHg2MywweDQzLDB4OTAsCi0weDIwLDB4YjAsMHgwMiwweDNjLDB4MDAsMHgxYSwweDAzLDB4MDAsMHgyMSwweDE4LDB4NjIsMHgwMCwweDBjLDB4MDAsMHg2OCwweDhjLAotMHgyNSwweGIwLDB4MDIsMHgzYywweGIwLDB4MDMsMHg0MiwweDM0LDB4ZmYsMHgwMCwweDA0LDB4MzEsMHgwMCwweDAwLDB4NDgsMHhhYywKLTB4MzQsMHgxOCwweDAwLDB4MDgsMHhmZiwweDAwLDB4MDIsMHgyNCwweDAwLDB4MDAsMHhjMiwweGFjLDB4ZmYsMHgwMCwweDAyLDB4MjQsCi0weDIxLDB4MDAsMHg4MiwweDEwLDB4NjgsMHgxNSwweDcwLDB4MjYsMHhmZiwweDAwLDB4MDMsMHgzMSwweDljLDB4NjQsMHgwNSwweDhlLAotMHgyMCwweDEwLDB4MDIsMHgzYywweDAwLDB4MWEsMHgwMywweDAwLDB4MjEsMHgxOCwweDYyLDB4MDAsMHgyMSwweDMwLDB4NjAsMHgwMCwKLTB4ZjQsMHg2MywweDA4LDB4YTIsMHgzMCwweDY0LDB4MDMsMHhhZSwweDA0LDB4MDAsMHgwNCwweDI0LDB4MjAsMHgwMCwweDA3LDB4MjQsCi0weDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGEwLDB4YWYsMHgwMiwweDgwLDB4MDksMHgzYywweDdjLDB4N2UsMHgyNywweDkxLAotMHgwMiwweDgwLDB4MDgsMHgzYywweDZjLDB4N2UsMHgwNSwweDhkLDB4ZmMsMHg0YSwweDA2LDB4OGUsMHgwNiwweDAwLDB4MDIsMHgzYywKLTB4MTAsMHgwMCwweGU3LDB4MzQsMHgyNywweDEwLDB4MDIsMHgwMCwweDI0LDB4MzAsMHhjMiwweDAwLDB4MDAsMHgwMSwweGE1LDB4MzQsCi0weDAwLDB4MjYsMHgwNywweDAwLDB4MjUsMHhiMCwweDAyLDB4M2MsMHgyNSwweDIwLDB4ODUsMHgwMCwweDgwLDB4MDMsMHg0MiwweDM0LAotMHg0MSwweGIwLDB4MDMsMHgzYywweDAwLDB4MDAsMHg0NCwweGFjLDB4MDAsMHgwMCwweDY2LDB4YWMsMHg2YywweDdlLDB4MDUsMHhhZCwKLTB4N2MsMHg3ZSwweDI3LDB4YTEsMHhmYywweDRhLDB4MDYsMHhhZSwweDY4LDB4MTUsMHg2MiwweDI2LDB4MDAsMHg0YiwweDQzLDB4OGMsCi0weDA0LDB4MDAsMHgwNCwweDNjLDB4MjYsMHgxOCwweDY0LDB4MDAsMHgwMCwweDRiLDB4NDMsMHhhYywweDY4LDB4MTUsMHg2NSwweDI2LAotMHhmYywweDRhLDB4YTIsMHg4YywweDA4LDB4MDAsMHgwMywweDNjLDB4MjQsMHgxMCwweDUyLDB4MDAsMHgyNCwweDEwLDB4NDMsMHgwMCwKLTB4NWEsMHgwMCwweDQwLDB4MTAsMHgyYSwweGIwLDB4MDYsMHgzYywweDFjLDB4MDAsMHhjMywweDM0LDB4MDAsMHgwMCwweDY4LDB4OGMsCi0weGZmLDB4MDAsMHgwNywweDI0LDB4ZmYsMHgwMCwweDA0LDB4MzEsMHgxMywweDAyLDB4ODcsMHgxMCwweDI1LDB4YjAsMHgwMiwweDNjLAotMHgwMCwweDgwLDB4MDIsMHgzMSwweDIzLDB4MDAsMHg0MCwweDE0LDB4MDAsMHg4MCwweDAyLDB4M2MsMHgwMCwweGZmLDB4MDIsMHgzYywKLTB4MjQsMHgxMCwweDAyLDB4MDEsMHgyMSwweDAwLDB4NDAsMHgxMCwweGZmLDB4MDAsMHgwMiwweDI0LDB4NDQsMHgwMCwweGM2LDB4MzQsCi0weDAwLDB4MDAsMHhjMiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweDAwLDB4NDQsMHgzMCwweDBlLDB4MDAsMHg4NywweDEwLAotMHg2OCwweDE1LDB4NjIsMHgyNiwweGY4LDB4NjMsMHhhNCwweGEwLDB4MDAsMHgwMCwweGMyLDB4OTAsMHhmZiwweDAwLDB4ODMsMHgzMCwKLTB4ZmYsMHgwMCwweDQ0LDB4MzAsMHgwNywweDAwLDB4ODMsMHgxMCwweDIxLDB4MzgsMHhhMCwweDAwLDB4MjEsMHgyOCwweGMwLDB4MDAsCi0weDAwLDB4MDAsMHhhMiwweDkwLDB4MjEsMHgxOCwweDgwLDB4MDAsMHhmZCwweGZmLDB4NjIsMHgxNCwweGZmLDB4MDAsMHg0NCwweDMwLAotMHhmOCwweDYzLDB4ZTMsMHhhMCwweDY4LDB4MTUsMHg2MiwweDI2LDB4ZjgsMHg2MywweDQzLDB4OTAsMHgyMCwweGIwLDB4MDIsMHgzYywKLTB4MDAsMHgxYSwweDAzLDB4MDAsMHgyMSwweDE4LDB4NjIsMHgwMCwweDBjLDB4MDAsMHg2OCwweDhjLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weGIwLDB4MDMsMHg0MiwweDM0LDB4ZmYsMHgwMCwweDA0LDB4MzEsMHgwMCwweDAwLDB4NDgsMHhhYywweDhmLDB4MTgsMHgwMCwweDA4LAotMHhmZiwweDAwLDB4MDIsMHgyNCwweDAwLDB4MDAsMHg2MiwweGFjLDB4ZmYsMHgwMCwweDAyLDB4MjQsMHgyNSwweDAwLDB4ODIsMHgxMCwKLTB4NjgsMHgxNSwweDcwLDB4MjYsMHhmZiwweDAwLDB4MDMsMHgzMSwweGE4LDB4NjQsMHgwNSwweDhlLDB4MjAsMHgxMCwweDAyLDB4M2MsCi0weDAwLDB4MWEsMHgwMywweDAwLDB4MjEsMHgxOCwweDYyLDB4MDAsMHgyMSwweDMwLDB4NjAsMHgwMCwweGY4LDB4NjMsMHgwOCwweGEyLAotMHgzYywweDY0LDB4MDMsMHhhZSwweDA1LDB4MDAsMHgwNCwweDI0LDB4MjAsMHgwMCwweDA3LDB4MjQsMHgxMCwweDAxLDB4MDAsMHgwYywKLTB4MTAsMHgwMCwweGEwLDB4YWYsMHgwMiwweDgwLDB4MGEsMHgzYywweDdjLDB4N2UsMHg0NywweDkxLDB4MDIsMHg4MCwweDA5LDB4M2MsCi0weDZjLDB4N2UsMHgyNSwweDhkLDB4ZmMsMHg0YSwweDA2LDB4OGUsMHgxOCwweDAwLDB4MDIsMHgzYywweDA4LDB4MDAsMHhlNywweDM0LAotMHgyNywweDEwLDB4MDIsMHgwMCwweDI0LDB4MzAsMHhjMiwweDAwLDB4MDAsMHgwMiwweGE1LDB4MzQsMHgyNSwweGIwLDB4MDMsMHgzYywKLTB4MTAsMHgwMCwweDAyLDB4M2MsMHgwMCwweDI2LDB4MDcsMHgwMCwweDI2LDB4ODgsMHgyMiwweDAyLDB4YjAsMHgwMywweDY4LDB4MzQsCi0weDI1LDB4MjAsMHg4NSwweDAwLDB4ODAsMHgwMywweDYzLDB4MzQsMHg0MSwweGIwLDB4MDIsMHgzYywweDAwLDB4MDAsMHg2NCwweGFjLAotMHgwMCwweDAwLDB4NDYsMHhhYywweDZjLDB4N2UsMHgyNSwweGFkLDB4N2MsMHg3ZSwweDQ3LDB4YTEsMHhmYywweDRhLDB4MDYsMHhhZSwKLTB4MDAsMHgwMCwweDExLDB4YWQsMHg2OCwweDE1LDB4NjIsMHgyNiwweDAwLDB4NGIsMHg0MywweDhjLDB4MDgsMHgwMCwweDA0LDB4M2MsCi0weDI2LDB4MTgsMHg2NCwweDAwLDB4MDAsMHg0YiwweDQzLDB4YWMsMHg2OCwweDE1LDB4NjUsMHgyNiwweGZjLDB4NGEsMHhhMiwweDhjLAotMHgxMCwweDAwLDB4MDMsMHgzYywweDI0LDB4MTAsMHg1MiwweDAwLDB4MjQsMHgxMCwweDUxLDB4MDAsMHgyNCwweDEwLDB4NDMsMHgwMCwKLTB4NTgsMHgwMCwweDQwLDB4MTAsMHgyNSwweGIwLDB4MDYsMHgzYywweGIwLDB4MDMsMHhjMiwweDM0LDB4MmEsMHhiMCwweDA5LDB4M2MsCi0weDAwLDB4MDAsMHg1MSwweGFjLDB4MjAsMHgwMCwweDIzLDB4MzUsMHgwMCwweDAwLDB4NjgsMHg4YywweGZmLDB4MDAsMHgwNywweDI0LAotMHhmZiwweDAwLDB4MDQsMHgzMSwweDgwLDB4MDEsMHg4NywweDEwLDB4OTAsMHgwMywweGMyLDB4MzQsMHgwMCwweDgwLDB4MDIsMHgzMSwKLTB4MjMsMHgwMCwweDQwLDB4MTQsMHgwMCwweDgwLDB4MDIsMHgzYywweDAwLDB4ZmYsMHgwMiwweDNjLDB4MjQsMHgxMCwweDAyLDB4MDEsCi0weDIxLDB4MDAsMHg0MCwweDEwLDB4ZmYsMHgwMCwweDAyLDB4MjQsMHg0NSwweDAwLDB4MjYsMHgzNSwweDAwLDB4MDAsMHhjMiwweDkwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAsMHg0NCwweDMwLDB4MGUsMHgwMCwweDg3LDB4MTAsMHg2OCwweDE1LDB4NjIsMHgyNiwKLTB4MDQsMHg2NCwweGE0LDB4YTAsMHgwMCwweDAwLDB4YzIsMHg5MCwweGZmLDB4MDAsMHg4MywweDMwLDB4ZmYsMHgwMCwweDQ0LDB4MzAsCi0weDA3LDB4MDAsMHg4MywweDEwLDB4MjEsMHgzOCwweGEwLDB4MDAsMHgyMSwweDI4LDB4YzAsMHgwMCwweDAwLDB4MDAsMHhhMiwweDkwLAotMHgyMSwweDE4LDB4ODAsMHgwMCwweGZkLDB4ZmYsMHg2MiwweDE0LDB4ZmYsMHgwMCwweDQ0LDB4MzAsMHgwNCwweDY0LDB4ZTMsMHhhMCwKLTB4NjgsMHgxNSwweDYyLDB4MjYsMHgwNCwweDY0LDB4NDMsMHg5MCwweDIwLDB4YjAsMHgwMiwweDNjLDB4MDAsMHgxYSwweDAzLDB4MDAsCi0weDIxLDB4MTgsMHg2MiwweDAwLDB4MGMsMHgwMCwweDY4LDB4OGMsMHgyNSwweGIwLDB4MDIsMHgzYywweGIwLDB4MDMsMHg0MiwweDM0LAotMHhmZiwweDAwLDB4MDQsMHgzMSwweDAwLDB4MDAsMHg0OCwweGFjLDB4ZjIsMHgxOCwweDAwLDB4MDgsMHhmZiwweDAwLDB4MDIsMHgyNCwKLTB4MDAsMHgwMCwweDYyLDB4YWMsMHhmZiwweDAwLDB4MDIsMHgyNCwweDIxLDB4MDAsMHg4MiwweDEwLDB4NjgsMHgxNSwweDcwLDB4MjYsCi0weGZmLDB4MDAsMHgwMywweDMxLDB4YTgsMHg2NCwweDA1LDB4OGUsMHgyMCwweDEwLDB4MDIsMHgzYywweDAwLDB4MWEsMHgwMywweDAwLAotMHgyMSwweDE4LDB4NjIsMHgwMCwweDIxLDB4MzAsMHg2MCwweDAwLDB4MDQsMHg2NCwweDA4LDB4YTIsMHgzYywweDY0LDB4MDMsMHhhZSwKLTB4MDUsMHgwMCwweDA0LDB4MjQsMHgyMCwweDAwLDB4MDcsMHgyNCwweDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGEwLDB4YWYsCi0weDAyLDB4ODAsMHgwOSwweDNjLDB4N2MsMHg3ZSwweDI3LDB4OTEsMHgwMiwweDgwLDB4MDgsMHgzYywweDZjLDB4N2UsMHgwNSwweDhkLAotMHhmYywweDRhLDB4MDYsMHg4ZSwweDE4LDB4MDAsMHgwMiwweDNjLDB4MDEsMHgwMCwweGU3LDB4MzQsMHgyNywweDEwLDB4MDIsMHgwMCwKLTB4MjQsMHgzMCwweGMyLDB4MDAsMHgwMCwweDAyLDB4YTUsMHgzNCwweDAwLDB4MjYsMHgwNywweDAwLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDI1LDB4MjAsMHg4NSwweDAwLDB4ODAsMHgwMywweDQyLDB4MzQsMHg0MSwweGIwLDB4MDMsMHgzYywweDAwLDB4MDAsMHg0NCwweGFjLAotMHgwMCwweDAwLDB4NjYsMHhhYywweDZjLDB4N2UsMHgwNSwweGFkLDB4N2MsMHg3ZSwweDI3LDB4YTEsMHhmYywweDRhLDB4MDYsMHhhZSwKLTB4NjgsMHgxNSwweDYyLDB4MjYsMHgwMCwweDRiLDB4NDMsMHg4YywweDEwLDB4MDAsMHgwNCwweDNjLDB4MjYsMHgxOCwweDY0LDB4MDAsCi0weDAwLDB4NGIsMHg0MywweGFjLDB4NjgsMHgxNSwweDY1LDB4MjYsMHhmYywweDRhLDB4YTIsMHg4YywweDIwLDB4MDAsMHgwMywweDNjLAotMHgyNCwweDEwLDB4NTIsMHgwMCwweDI0LDB4MTAsMHg0MywweDAwLDB4NWEsMHgwMCwweDQwLDB4MTAsMHgyYSwweGIwLDB4MDYsMHgzYywKLTB4MjQsMHgwMCwweGMzLDB4MzQsMHgwMCwweDAwLDB4NjgsMHg4YywweGZmLDB4MDAsMHgwNywweDI0LDB4ZmYsMHgwMCwweDA0LDB4MzEsCi0weDI4LDB4MDEsMHg4NywweDEwLDB4MjUsMHhiMCwweDAyLDB4M2MsMHgwMCwweDgwLDB4MDIsMHgzMSwweDIzLDB4MDAsMHg0MCwweDE0LAotMHgwMCwweDgwLDB4MDIsMHgzYywweDAwLDB4ZmYsMHgwMiwweDNjLDB4MjQsMHgxMCwweDAyLDB4MDEsMHgyMSwweDAwLDB4NDAsMHgxMCwKLTB4ZmYsMHgwMCwweDAyLDB4MjQsMHg0NiwweDAwLDB4YzYsMHgzNCwweDAwLDB4MDAsMHhjMiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGZmLDB4MDAsMHg0NCwweDMwLDB4MGUsMHgwMCwweDg3LDB4MTAsMHg2OCwweDE1LDB4NjIsMHgyNiwweGZjLDB4NjMsMHhhNCwweGEwLAotMHgwMCwweDAwLDB4YzIsMHg5MCwweGZmLDB4MDAsMHg4MywweDMwLDB4ZmYsMHgwMCwweDQ0LDB4MzAsMHgwNywweDAwLDB4ODMsMHgxMCwKLTB4MjEsMHgzOCwweGEwLDB4MDAsMHgyMSwweDI4LDB4YzAsMHgwMCwweDAwLDB4MDAsMHhhMiwweDkwLDB4MjEsMHgxOCwweDgwLDB4MDAsCi0weGZkLDB4ZmYsMHg2MiwweDE0LDB4ZmYsMHgwMCwweDQ0LDB4MzAsMHhmYywweDYzLDB4ZTMsMHhhMCwweDY4LDB4MTUsMHg2MiwweDI2LAotMHhmYywweDYzLDB4NDMsMHg5MCwweDIwLDB4YjAsMHgwMiwweDNjLDB4MDAsMHgxYSwweDAzLDB4MDAsMHgyMSwweDE4LDB4NjIsMHgwMCwKLTB4MGMsMHgwMCwweDY4LDB4OGMsMHgyNSwweGIwLDB4MDIsMHgzYywweGIwLDB4MDMsMHg0MiwweDM0LDB4ZmYsMHgwMCwweDA0LDB4MzEsCi0weDAwLDB4MDAsMHg0OCwweGFjLDB4NGQsMHgxOSwweDAwLDB4MDgsMHhmZiwweDAwLDB4MDIsMHgyNCwweDAwLDB4MDAsMHg2MiwweGFjLAotMHhmZiwweDAwLDB4MDIsMHgyNCwweDI1LDB4MDAsMHg4MiwweDEwLDB4NjgsMHgxNSwweDcwLDB4MjYsMHhmZiwweDAwLDB4MDMsMHgzMSwKLTB4YjQsMHg2NCwweDA1LDB4OGUsMHgyMCwweDEwLDB4MDIsMHgzYywweDAwLDB4MWEsMHgwMywweDAwLDB4MjEsMHgxOCwweDYyLDB4MDAsCi0weDIxLDB4MzAsMHg2MCwweDAwLDB4ZmMsMHg2MywweDA4LDB4YTIsMHg0OCwweDY0LDB4MDMsMHhhZSwweDA2LDB4MDAsMHgwNCwweDI0LAotMHgyMCwweDAwLDB4MDcsMHgyNCwweDEwLDB4MDEsMHgwMCwweDBjLDB4MTAsMHgwMCwweGEwLDB4YWYsMHgwMiwweDgwLDB4MGEsMHgzYywKLTB4N2MsMHg3ZSwweDQ3LDB4OTEsMHgwMiwweDgwLDB4MDksMHgzYywweDZjLDB4N2UsMHgyNSwweDhkLDB4ZmMsMHg0YSwweDA2LDB4OGUsCi0weDYwLDB4MDAsMHgwMiwweDNjLDB4MDQsMHgwMCwweGU3LDB4MzQsMHgyNywweDEwLDB4MDIsMHgwMCwweDI0LDB4MzAsMHhjMiwweDAwLAotMHgwMCwweDA0LDB4YTUsMHgzNCwweDI1LDB4YjAsMHgwMywweDNjLDB4NDAsMHgwMCwweDAyLDB4M2MsMHgwMCwweDI2LDB4MDcsMHgwMCwKLTB4MjYsMHg4OCwweDIyLDB4MDIsMHhiMCwweDAzLDB4NjgsMHgzNCwweDI1LDB4MjAsMHg4NSwweDAwLDB4ODAsMHgwMywweDYzLDB4MzQsCi0weDQxLDB4YjAsMHgwMiwweDNjLDB4MDAsMHgwMCwweDY0LDB4YWMsMHgwMCwweDAwLDB4NDYsMHhhYywweDZjLDB4N2UsMHgyNSwweGFkLAotMHg3YywweDdlLDB4NDcsMHhhMSwweGZjLDB4NGEsMHgwNiwweGFlLDB4MDAsMHgwMCwweDExLDB4YWQsMHg2OCwweDE1LDB4NjIsMHgyNiwKLTB4MDAsMHg0YiwweDQzLDB4OGMsMHgyMCwweDAwLDB4MDQsMHgzYywweDI2LDB4MTgsMHg2NCwweDAwLDB4MDAsMHg0YiwweDQzLDB4YWMsCi0weDY4LDB4MTUsMHg2NSwweDI2LDB4ZmMsMHg0YSwweGEyLDB4OGMsMHg0MCwweDAwLDB4MDMsMHgzYywweDI0LDB4MTAsMHg1MiwweDAwLAotMHgyNCwweDEwLDB4NTEsMHgwMCwweDI0LDB4MTAsMHg0MywweDAwLDB4NWEsMHgwMCwweDQwLDB4MTAsMHg2OCwweDE1LDB4NzAsMHgyNiwKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHgyYSwweGIwLDB4MDcsMHgzYywweGIwLDB4MDMsMHg0MiwweDM0LDB4MDAsMHgwMCwweDUxLDB4YWMsCi0weDI4LDB4MDAsMHhlMywweDM0LDB4MDAsMHgwMCwweDY4LDB4OGMsMHhmZiwweDAwLDB4MDYsMHgyNCwweGZmLDB4MDAsMHgwNCwweDMxLAotMHhjOSwweDAwLDB4ODYsMHgxMCwweDI1LDB4YmQsMHgwMiwweDNjLDB4MDAsMHg4MCwweDAyLDB4MzEsMHgyMywweDAwLDB4NDAsMHgxNCwKLTB4MDAsMHg4MCwweDAyLDB4M2MsMHgwMCwweGZmLDB4MDIsMHgzYywweDI0LDB4MTAsMHgwMiwweDAxLDB4MjEsMHgwMCwweDQwLDB4MTAsCi0weGZmLDB4MDAsMHgwMiwweDI0LDB4NDcsMHgwMCwweGU3LDB4MzQsMHgwMCwweDAwLDB4ZTIsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhmZiwweDAwLDB4NDQsMHgzMCwweDBlLDB4MDAsMHg4NiwweDEwLDB4NjgsMHgxNSwweDYyLDB4MjYsMHgwMCwweDY0LDB4YTQsMHhhMCwKLTB4MDAsMHgwMCwweGUyLDB4OTAsMHhmZiwweDAwLDB4ODMsMHgzMCwweGZmLDB4MDAsMHg0NCwweDMwLDB4MDcsMHgwMCwweDgzLDB4MTAsCi0weDIxLDB4MzAsMHhhMCwweDAwLDB4MjEsMHgyOCwweGUwLDB4MDAsMHgwMCwweDAwLDB4YTIsMHg5MCwweDIxLDB4MTgsMHg4MCwweDAwLAotMHhmZCwweGZmLDB4NjIsMHgxNCwweGZmLDB4MDAsMHg0NCwweDMwLDB4MDAsMHg2NCwweGMzLDB4YTAsMHg2OCwweDE1LDB4NjIsMHgyNiwKLTB4MDAsMHg2NCwweDQzLDB4OTAsMHgyMCwweGIwLDB4MDIsMHgzYywweDAwLDB4MWEsMHgwMywweDAwLDB4MjEsMHgxOCwweDYyLDB4MDAsCi0weDBjLDB4MDAsMHg2OCwweDhjLDB4MjUsMHhiMCwweDAyLDB4M2MsMHhiMCwweDAzLDB4NDIsMHgzNCwweGZmLDB4MDAsMHgwNCwweDMxLAotMHgwMCwweDAwLDB4NDgsMHhhYywweGIxLDB4MTksMHgwMCwweDA4LDB4ZmYsMHgwMCwweDAyLDB4MjQsMHgwMCwweDAwLDB4NjIsMHhhYywKLTB4ZmYsMHgwMCwweDAyLDB4MjQsMHgyMSwweDAwLDB4ODIsMHgxMCwweDY4LDB4MTUsMHg3MCwweDI2LDB4ZmYsMHgwMCwweDAzLDB4MzEsCi0weGI0LDB4NjQsMHgwNSwweDhlLDB4MjAsMHgxMCwweDAyLDB4M2MsMHgwMCwweDFhLDB4MDMsMHgwMCwweDIxLDB4MTgsMHg2MiwweDAwLAotMHgyMSwweDMwLDB4NjAsMHgwMCwweDAwLDB4NjQsMHgwOCwweGEyLDB4NDgsMHg2NCwweDAzLDB4YWUsMHgwNiwweDAwLDB4MDQsMHgyNCwKLTB4MjAsMHgwMCwweDA3LDB4MjQsMHgxMCwweDAxLDB4MDAsMHgwYywweDEwLDB4MDAsMHhhMCwweGFmLDB4MDIsMHg4MCwweDA5LDB4M2MsCi0weDdjLDB4N2UsMHgyNywweDkxLDB4MDIsMHg4MCwweDA4LDB4M2MsMHg2YywweDdlLDB4MDUsMHg4ZCwweGZjLDB4NGEsMHgwNiwweDhlLAotMHg2MCwweDAwLDB4MDIsMHgzYywweDAyLDB4MDAsMHhlNywweDM0LDB4MjcsMHgxMCwweDAyLDB4MDAsMHgyNCwweDMwLDB4YzIsMHgwMCwKLTB4MDAsMHgwNCwweGE1LDB4MzQsMHgwMCwweDI2LDB4MDcsMHgwMCwweDI1LDB4YjAsMHgwMiwweDNjLDB4MjUsMHgyMCwweDg1LDB4MDAsCi0weDgwLDB4MDMsMHg0MiwweDM0LDB4NDEsMHhiMCwweDAzLDB4M2MsMHgwMCwweDAwLDB4NDQsMHhhYywweDAwLDB4MDAsMHg2NiwweGFjLAotMHg2YywweDdlLDB4MDUsMHhhZCwweDdjLDB4N2UsMHgyNywweGExLDB4ZmMsMHg0YSwweDA2LDB4YWUsMHg2OCwweDE1LDB4NjIsMHgyNiwKLTB4MDAsMHg0YiwweDQzLDB4OGMsMHg0MCwweDAwLDB4MDQsMHgzYywweDI2LDB4MTgsMHg2NCwweDAwLDB4MDAsMHg0YiwweDQzLDB4YWMsCi0weDY4LDB4MTUsMHg3MCwweDI2LDB4ZmMsMHg0YSwweDA2LDB4OGUsMHgwMCwweDA0LDB4MTEsMHgzYywweDI0LDB4MTAsMHhkMiwweDAwLAotMHgyNCwweDEwLDB4NTEsMHgwMCwweDRjLDB4MDAsMHg0MCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDI4LDB4ZDIsMHgwMCwKLTB4MDAsMHgwOCwweDA0LDB4M2MsMHgyNCwweDEwLDB4YTQsMHgwMCwweDA4LDB4MDAsMHg0MCwweDEwLDB4ODAsMHgwMCwweDA3LDB4M2MsCi0weDAwLDB4NGIsMHgwMywweDhlLDB4MjUsMHhiMCwweDAyLDB4M2MsMHhiMCwweDAzLDB4NDIsMHgzNCwweDI2LDB4MTgsMHg2NCwweDAwLAotMHgwMCwweDAwLDB4NDQsMHhhYywweDAwLDB4NGIsMHgwMywweGFlLDB4ODAsMHgwMCwweDA3LDB4M2MsMHgyNCwweDEwLDB4YTcsMHgwMCwKLTB4MjEsMHgwMCwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NGIsMHgwMywweDhlLDB4MjUsMHhiMCwweDA4LDB4M2MsCi0weGIwLDB4MDMsMHgwOSwweDM1LDB4MmEsMHhiMCwweDAyLDB4M2MsMHgwMCwweDAwLDB4MjMsMHhhZCwweDM2LDB4MDAsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4NDMsMHg5MCwweDIzLDB4YjAsMHgwNCwweDNjLDB4ZmYsMHgxZiwweDAyLDB4M2MsMHhjMCwweDE4LDB4MDMsMHgwMCwKLTB4ZjAsMHgwNywweDYzLDB4MzAsMHg1YywweDY1LDB4MDUsMHg4ZSwweDIxLDB4MTgsMHg2NCwweDAwLDB4ZmYsMHhmZiwweDQyLDB4MzQsCi0weDI0LDB4MTgsMHg2MiwweDAwLDB4NTksMHgwMCwweDY1LDB4MTAsMHg2MCwweDY1LDB4MDMsMHhhZSwweDAyLDB4ODAsMHgwNSwweDNjLAotMHg2YywweDdlLDB4YTMsMHg4YywweDI3LDB4MjAsMHgwNywweDAwLDB4MjQsMHgyMCwweGM0LDB4MDAsMHgwMCwweDA4LDB4NjMsMHgzNCwKLTB4NDEsMHhiMCwweDAyLDB4M2MsMHgwMCwweDAwLDB4MjMsMHhhZCwweDAwLDB4MDAsMHg0NCwweGFjLDB4NmMsMHg3ZSwweGEzLDB4YWMsCi0weGZjLDB4NGEsMHgwNCwweGFlLDB4NjgsMHgxNSwweDYyLDB4MjYsMHgwMCwweDRiLDB4NDMsMHg4YywweDgwLDB4MDAsMHgwNCwweDNjLAotMHgyNiwweDE4LDB4NjQsMHgwMCwweDAwLDB4NGIsMHg0MywweGFjLDB4NjgsMHgxNSwweDY2LDB4MjYsMHhmYywweDRhLDB4YzMsMHg4YywKLTB4MDAsMHgwMSwweDA0LDB4M2MsMHgyNCwweDI4LDB4NzIsMHgwMCwweDI0LDB4MTAsMHhhNCwweDAwLDB4MDYsMHgwMCwweDQwLDB4MTAsCi0weDI1LDB4YjAsMHgwMiwweDNjLDB4MDAsMHg0YiwweGMzLDB4OGMsMHhiMCwweDAzLDB4NDIsMHgzNCwweDI2LDB4MTgsMHg2NCwweDAwLAotMHgwMCwweDAwLDB4NDQsMHhhYywweDAwLDB4NGIsMHhjMywweGFjLDB4MDAsMHgwMiwweDA0LDB4M2MsMHgyNCwweDEwLDB4YTQsMHgwMCwKLTB4MDYsMHgwMCwweDQwLDB4MTAsMHgyNSwweGIwLDB4MDMsMHgzYywweDAwLDB4NGIsMHhjMiwweDhjLDB4YjAsMHgwMywweDYzLDB4MzQsCi0weDI2LDB4MTAsMHg0NCwweDAwLDB4MDAsMHg0YiwweGMyLDB4YWMsMHgwMCwweDAwLDB4NjQsMHhhYywweDI4LDB4MDAsMHhiZiwweDhmLAotMHgyNCwweDAwLDB4YjMsMHg4ZiwweDIwLDB4MDAsMHhiMiwweDhmLDB4MWMsMHgwMCwweGIxLDB4OGYsMHgxOCwweDAwLDB4YjAsMHg4ZiwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgzMCwweDAwLDB4YmQsMHgyNywweDViLDB4NGUsMHgwMCwweDBjLDB4MDcsMHgwMCwweDA0LDB4MjQsCi0weDAwLDB4NGIsMHgwMywweDhlLDB4ZmMsMHg0YSwweDA2LDB4OGUsMHgyNSwweGIwLDB4MDIsMHgzYywweDI2LDB4MTgsMHg3MSwweDAwLAotMHhiMCwweDAzLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweGFjLDB4ZGYsMHgxOSwweDAwLDB4MDgsMHgwMCwweDRiLDB4MDMsMHhhZSwKLTB4NTYsMHgwMSwweDQyLDB4MzUsMHgwMCwweDAwLDB4NDMsMHg5NCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDQsMHhmYiwweDYwLDB4MTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4NWIsMHg0ZSwweDAwLDB4MGMsMHgwNywweDAwLDB4MDQsMHgyNCwweDdkLDB4MTUsMHgwMCwweDA4LAotMHg2OCwweDE1LDB4NjYsMHgyNiwweDAwLDB4MDAsMHhhMiwweGFjLDB4NDgsMHgxNiwweDAwLDB4MDgsMHhmZiwweDAwLDB4MDIsMHgyNCwKLTB4MDAsMHgwMCwweDYyLDB4YWMsMHg4NSwweDE2LDB4MDAsMHgwOCwweGZmLDB4MDAsMHgwMiwweDI0LDB4MDAsMHgwMCwweDYyLDB4YWMsCi0weGMyLDB4MTYsMHgwMCwweDA4LDB4ZmYsMHgwMCwweDAyLDB4MjQsMHg5MCwweDAzLDB4NjMsMHgzNCwweDAwLDB4MDAsMHg2MiwweGFjLAotMHg1NywweDE4LDB4MDAsMHgwOCwweDY4LDB4MTUsMHg2MiwweDI2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgxNSwweDE5LDB4MDAsMHgwOCwKLTB4NjgsMHgxNSwweDYyLDB4MjYsMHgwMiwweDAwLDB4MDMsMHgyNCwweDkwLDB4MDMsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YWMsCi0weDc0LDB4MTksMHgwMCwweDA4LDB4NjgsMHgxNSwweDYyLDB4MjYsMHgwMSwweDAwLDB4MDMsMHgyNCwweDkwLDB4MDMsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4NDMsMHhhYywweGQ0LDB4MTksMHgwMCwweDA4LDB4NjgsMHgxNSwweDYyLDB4MjYsMHhkMCwweDAzLDB4MDMsMHgzNSwKLTB4ODAsMHgwMCwweDAyLDB4MjQsMHgwMCwweDAwLDB4NjIsMHhhYywweDBhLDB4MWEsMHgwMCwweDA4LDB4NjgsMHgxNSwweDYyLDB4MjYsCi0weDI1LDB4YjAsMHgwMiwweDNjLDB4MDcsMHgwMCwweDAzLDB4MjQsMHg5MCwweDAzLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweGFjLAotMHg2OCwweDE1LDB4NjMsMHgyNiwweDAwLDB4NGIsMHg2MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4NDIsMHgzOCwKLTB4ZTIsMHgxNiwweDAwLDB4MDgsMHgwMCwweDRiLDB4NjIsMHhhYywweDI1LDB4YjAsMHgwMiwweDNjLDB4MDcsMHgwMCwweDAzLDB4MjQsCi0weDkwLDB4MDMsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YWMsMHg2OCwweDE1LDB4NjMsMHgyNiwweDAwLDB4NGIsMHg2MiwweDhjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODAsMHg0MiwweDM4LDB4NDAsMHgxNywweDAwLDB4MDgsMHgwMCwweDRiLDB4NjIsMHhhYywKLTB4MDYsMHgwMCwweDAzLDB4MjQsMHg5MCwweDAzLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweGFjLDB4OTksMHgxNywweDAwLDB4MDgsCi0weDY4LDB4MTUsMHg2MiwweDI2LDB4MDUsMHgwMCwweDAzLDB4MjQsMHg5MCwweDAzLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweGFjLAotMHhmOCwweDE3LDB4MDAsMHgwOCwweDY4LDB4MTUsMHg2MiwweDI2LDB4MDMsMHgwMCwweDAzLDB4MjQsMHg5MCwweDAzLDB4NDIsMHgzNCwKLTB4MDAsMHgwMCwweDQzLDB4YWMsMHhiNiwweDE4LDB4MDAsMHgwOCwweDY4LDB4MTUsMHg2MiwweDI2LDB4MjUsMHhiMCwweDBkLDB4M2MsCi0weDAwLDB4ODAsMHgwMiwweDNjLDB4MTgsMHgwMywweGE0LDB4MzUsMHhmYywweDY5LDB4NDIsMHgyNCwweDAyLDB4ODAsMHgwMywweDNjLAotMHg0MSwweGIwLDB4MDgsMHgzYywweDAwLDB4MDAsMHg4MiwweGFjLDB4NjgsMHgxNSwweDZhLDB4MjQsMHgwYSwweDAwLDB4MDIsMHgzNSwKLTB4MDAsMHgwMCwweDQ0LDB4OTQsMHgwYSwweDRiLDB4NDMsMHg5NSwweDA4LDB4NGIsMHg0YiwweDk1LDB4MjUsMHgxOCwweDY0LDB4MDAsCi0weGZmLDB4ZmYsMHg2YywweDMwLDB4MjQsMHgxMCwweDhiLDB4MDEsMHgwMiwweDAwLDB4NDIsMHgzMCwweDRkLDB4MDAsMHg0MCwweDEwLAotMHgwMiwweDAwLDB4NjQsMHgzOCwweDAyLDB4MDAsMHgwMiwweDI0LDB4YzAsMHgwMywweGEzLDB4MzUsMHgwMCwweDAwLDB4NjIsMHhhYywKLTB4MGEsMHg0YiwweDQ0LDB4YTUsMHgyNCwweDM4LDB4OGIsMHgwMSwweDA0LDB4MDAsMHhlMiwweDMwLDB4MGEsMHgwMCwweDQwLDB4MTAsCi0weDA4LDB4MDAsMHhlMiwweDMwLDB4MGEsMHg0YiwweDQzLDB4OTUsMHgwYywweDAwLDB4MDQsMHgzNSwweGMwLDB4MDMsMHhhNSwweDM1LAotMHgwNCwweDAwLDB4NjMsMHgzOCwweDA0LDB4MDAsMHgwMiwweDI0LDB4MDAsMHgwMCwweDg2LDB4OGMsMHgwMCwweDAwLDB4YTIsMHhhYywKLTB4MGEsMHg0YiwweDQzLDB4YTUsMHgwOCwweDAwLDB4ZTIsMHgzMCwweDA4LDB4MDAsMHg0MCwweDEwLDB4MTAsMHgwMCwweGUyLDB4MzAsCi0weDBhLDB4NGIsMHg0MiwweDk1LDB4YzAsMHgwMywweGE0LDB4MzUsMHgwOCwweDAwLDB4MDMsMHgyNCwweDA4LDB4MDAsMHg0MiwweDM4LAotMHgwMCwweDAwLDB4ODMsMHhhYywweDBhLDB4NGIsMHg0MiwweGE1LDB4MTAsMHgwMCwweGUyLDB4MzAsMHgwOCwweDAwLDB4NDAsMHgxMCwKLTB4MjAsMHgwMCwweGUyLDB4MzAsMHgwYSwweDRiLDB4NDIsMHg5NSwweGMwLDB4MDMsMHhhNCwweDM1LDB4MTAsMHgwMCwweDAzLDB4MjQsCi0weDEwLDB4MDAsMHg0MiwweDM4LDB4MDAsMHgwMCwweDgzLDB4YWMsMHgwYSwweDRiLDB4NDIsMHhhNSwweDIwLDB4MDAsMHhlMiwweDMwLAotMHgwOCwweDAwLDB4NDAsMHgxMCwweDgwLDB4MDAsMHhlMiwweDMwLDB4MGEsMHg0YiwweDQyLDB4OTUsMHhjMCwweDAzLDB4YTQsMHgzNSwKLTB4MjAsMHgwMCwweDAzLDB4MjQsMHgyMCwweDAwLDB4NDIsMHgzOCwweDAwLDB4MDAsMHg4MywweGFjLDB4MGEsMHg0YiwweDQyLDB4YTUsCi0weDgwLDB4MDAsMHhlMiwweDMwLDB4MTUsMHgwMCwweDQwLDB4MTAsMHgyNCwweDEwLDB4OGIsMHgwMSwweDAyLDB4ODAsMHgwOSwweDNjLAotMHgwYSwweDRiLDB4NDYsMHg5NSwweDZjLDB4N2UsMHgyNSwweDhkLDB4MDgsMHgwMCwweDAyLDB4M2MsMHg3ZiwweGZmLDB4MDQsMHgyNCwKLTB4MjQsMHgyMCwweDY0LDB4MDEsMHgyNSwweDI4LDB4YTIsMHgwMCwweDgwLDB4MDAsMHhjNiwweDM4LDB4YjAsMHgwMywweGE3LDB4MzUsCi0weDA4LDB4MDAsMHgwOCwweDM1LDB4YzAsMHgwMywweGEzLDB4MzUsMHg4MCwweDAwLDB4MDIsMHgyNCwweDAwLDB4MDAsMHg2MiwweGFjLAotMHgyMSwweDU4LDB4ODAsMHgwMCwweDAwLDB4MDAsMHhlNSwweGFjLDB4MGEsMHg0YiwweDQ2LDB4YTUsMHg2YywweDdlLDB4MjUsMHhhZCwKLTB4MDAsMHgwMCwweDA0LDB4YTUsMHgwOCwweDRiLDB4NDQsMHhhNSwweDI0LDB4MTAsMHg4YiwweDAxLDB4MDAsMHgzMCwweDQyLDB4MzAsCi0weDA2LDB4MDAsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYSwweDRiLDB4NDIsMHg5NSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDEwLDB4NDIsMHgzOCwweDAwLDB4MjAsMHg0MiwweDM0LDB4MGEsMHg0YiwweDQyLDB4YTUsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg5NSwweDFhLDB4MDAsMHgwOCwweDBhLDB4NGIsMHg0MywweGE1LDB4ZjgsMHhmZiwweGJkLDB4MjcsCi0weDA0LDB4MDAsMHhiMSwweGFmLDB4MDAsMHgwMCwweGIwLDB4YWYsMHgwMCwweDQwLDB4MDIsMHg0MCwweDAwLDB4NjgsMHgwOCwweDQwLAotMHgwMCwweDcwLDB4MDIsMHg0MCwweDAwLDB4NjAsMHgwOSwweDQwLDB4MjUsMHhiMCwweDA1LDB4M2MsMHgwMCwweDgwLDB4MDIsMHgzYywKLTB4MTgsMHgwMywweGEzLDB4MzQsMHg3YywweDZiLDB4NDIsMHgyNCwweDAwLDB4MDAsMHg2MiwweGFjLDB4ODAsMHgwMCwweDg3LDB4OGMsCi0weDdjLDB4MDIsMHhhMiwweDM0LDB4ODQsMHgwMiwweGEzLDB4MzQsMHg4OCwweDAyLDB4YTYsMHgzNCwweDAwLDB4MDAsMHg0NywweGFjLAotMHgwMCwweDAwLDB4NjgsMHhhYywweDAwLDB4MDAsMHhjOSwweGFjLDB4NzQsMHgwMCwweDgzLDB4OGMsMHg4YywweDAyLDB4YTIsMHgzNCwKLTB4OTAsMHgwMiwweGE3LDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhYywweDA4LDB4MDAsMHg4NiwweDhjLDB4OTQsMHgwMiwweGE4LDB4MzQsCi0weDk4LDB4MDIsMHhhOSwweDM0LDB4MDAsMHgwMCwweGU2LDB4YWMsMHgwYywweDAwLDB4ODIsMHg4YywweDljLDB4MDIsMHhhNiwweDM0LAotMHhhMCwweDAyLDB4YTcsMHgzNCwweDAwLDB4MDAsMHgwMiwweGFkLDB4MTAsMHgwMCwweDgzLDB4OGMsMHhhNCwweDAyLDB4YTgsMHgzNCwKLTB4YTgsMHgwMiwweGFhLDB4MzQsMHgwMCwweDAwLDB4MjMsMHhhZCwweDE0LDB4MDAsMHg4MiwweDhjLDB4YWMsMHgwMiwweGE5LDB4MzQsCi0weGIwLDB4MDIsMHhhYiwweDM0LDB4MDAsMHgwMCwweGMyLDB4YWMsMHgxOCwweDAwLDB4ODMsMHg4YywweGI0LDB4MDIsMHhhNiwweDM0LAotMHhiOCwweDAyLDB4YWMsMHgzNCwweDAwLDB4MDAsMHhlMywweGFjLDB4MWMsMHgwMCwweDgyLDB4OGMsMHhiYywweDAyLDB4YTcsMHgzNCwKLTB4YzAsMHgwMiwweGFkLDB4MzQsMHgwMCwweDAwLDB4MDIsMHhhZCwweDIwLDB4MDAsMHg4MywweDhjLDB4YzQsMHgwMiwweGE4LDB4MzQsCi0weGM4LDB4MDIsMHhhZSwweDM0LDB4MDAsMHgwMCwweDQzLDB4YWQsMHgyNCwweDAwLDB4ODIsMHg4YywweGNjLDB4MDIsMHhhYSwweDM0LAotMHhkMCwweDAyLDB4YWYsMHgzNCwweDAwLDB4MDAsMHgyMiwweGFkLDB4MjgsMHgwMCwweDgzLDB4OGMsMHhkNCwweDAyLDB4YTksMHgzNCwKLTB4ZDgsMHgwMiwweGIwLDB4MzQsMHgwMCwweDAwLDB4NjMsMHhhZCwweDJjLDB4MDAsMHg4MiwweDhjLDB4NzAsMHgwMiwweGFiLDB4MzQsCi0weDc0LDB4MDIsMHhiMSwweDM0LDB4MDAsMHgwMCwweGMyLDB4YWMsMHgzMCwweDAwLDB4ODMsMHg4YywweDc4LDB4MDIsMHhhNSwweDM0LAotMHgwMCwweDAwLDB4ODMsMHhhZCwweDM0LDB4MDAsMHg4MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTIsMHhhYywKLTB4MzgsMHgwMCwweDgzLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMywweGFkLDB4M2MsMHgwMCwweDgyLDB4OGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4YWQsMHg0MCwweDAwLDB4ODMsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4YzMsMHhhZCwweDQ0LDB4MDAsMHg4MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NDIsMHhhZCwKLTB4NDgsMHgwMCwweDgzLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMywweGFkLDB4NGMsMHgwMCwweDgyLDB4OGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIyLDB4YWQsMHg1MCwweDAwLDB4ODMsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDMsMHhhZSwweDU0LDB4MDAsMHg4MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjIsMHhhZCwKLTB4NTgsMHgwMCwweDgzLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMywweGFlLDB4NWMsMHgwMCwweDgyLDB4OGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEyLDB4YWMsMHg0MiwweDFiLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDgwLDB4MWIsMHgzYywweDEwLDB4NmQsMHg3YiwweDI3LDB4MjUsMHhiMCwweDFhLDB4M2MsMHgxOCwweDAzLDB4NWEsMHgyNywKLTB4MDAsMHgwMCwweDViLDB4YWYsMHgyMSwweGQ4LDB4YTAsMHgwMywweDgyLDB4ZGEsMHgxYiwweDAwLDB4ODAsMHhkYSwweDFiLDB4MDAsCi0weDA4LDB4MDAsMHg3YiwweDI3LDB4MDQsMHgwMCwweDYxLDB4YWYsMHgwOCwweDAwLDB4NjIsMHhhZiwweDBjLDB4MDAsMHg2MywweGFmLAotMHgxMCwweDAwLDB4NjQsMHhhZiwweDE0LDB4MDAsMHg2NSwweGFmLDB4MTgsMHgwMCwweDY2LDB4YWYsMHgxYywweDAwLDB4NjcsMHhhZiwKLTB4MjAsMHgwMCwweDY4LDB4YWYsMHgyNCwweDAwLDB4NjksMHhhZiwweDI4LDB4MDAsMHg2YSwweGFmLDB4MmMsMHgwMCwweDZiLDB4YWYsCi0weDMwLDB4MDAsMHg2YywweGFmLDB4MzQsMHgwMCwweDZkLDB4YWYsMHgzOCwweDAwLDB4NmUsMHhhZiwweDNjLDB4MDAsMHg2ZiwweGFmLAotMHgxMiwweDQwLDB4MDAsMHgwMCwweDEwLDB4NDgsMHgwMCwweDAwLDB4MDAsMHg3MCwweDBhLDB4NDAsMHg0MCwweDAwLDB4NzAsMHhhZiwKLTB4NDQsMHgwMCwweDcxLDB4YWYsMHg0OCwweDAwLDB4NzIsMHhhZiwweDRjLDB4MDAsMHg3MywweGFmLDB4NTAsMHgwMCwweDc0LDB4YWYsCi0weDU0LDB4MDAsMHg3NSwweGFmLDB4NTgsMHgwMCwweDc2LDB4YWYsMHg1YywweDAwLDB4NzcsMHhhZiwweDYwLDB4MDAsMHg3OCwweGFmLAotMHg2NCwweDAwLDB4NzksMHhhZiwweDY4LDB4MDAsMHg3YywweGFmLDB4NmMsMHgwMCwweDdkLDB4YWYsMHg3MCwweDAwLDB4N2UsMHhhZiwKLTB4NzQsMHgwMCwweDdmLDB4YWYsMHg3OCwweDAwLDB4NjgsMHhhZiwweDdjLDB4MDAsMHg2OSwweGFmLDB4ODAsMHgwMCwweDZhLDB4YWYsCi0weDAwLDB4NjgsMHgxYSwweDQwLDB4MjUsMHhiMCwweDFiLDB4M2MsMHgxYywweDAzLDB4N2IsMHgzNywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4N2EsMHhhZiwweDdmLDB4MDAsMHg1YiwweDMzLDB4MzAsMHgwMCwweDYwLDB4MTMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjUsMHhiMCwweDFiLDB4M2MsMHgzMCwweDAzLDB4N2IsMHgzNywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDdhLDB4YWYsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjEsMHhkOCwweGEwLDB4MDMsMHg4MiwweGRhLDB4MWIsMHgwMCwweDgwLDB4ZGEsMHgxYiwweDAwLAotMHgwOCwweDAwLDB4N2IsMHgyNywweDA0LDB4MDAsMHg2MSwweGFmLDB4MDgsMHgwMCwweDYyLDB4YWYsMHgwYywweDAwLDB4NjMsMHhhZiwKLTB4MTAsMHgwMCwweDY0LDB4YWYsMHgxNCwweDAwLDB4NjUsMHhhZiwweDE4LDB4MDAsMHg2NiwweGFmLDB4MWMsMHgwMCwweDY3LDB4YWYsCi0weDIwLDB4MDAsMHg2OCwweGFmLDB4MjQsMHgwMCwweDY5LDB4YWYsMHgyOCwweDAwLDB4NmEsMHhhZiwweDJjLDB4MDAsMHg2YiwweGFmLAotMHgzMCwweDAwLDB4NmMsMHhhZiwweDM0LDB4MDAsMHg2ZCwweGFmLDB4MzgsMHgwMCwweDZlLDB4YWYsMHgzYywweDAwLDB4NmYsMHhhZiwKLTB4MTIsMHg0MCwweDAwLDB4MDAsMHgxMCwweDQ4LDB4MDAsMHgwMCwweDAwLDB4NzAsMHgwYSwweDQwLDB4NDAsMHgwMCwweDcwLDB4YWYsCi0weDQ0LDB4MDAsMHg3MSwweGFmLDB4NDgsMHgwMCwweDcyLDB4YWYsMHg0YywweDAwLDB4NzMsMHhhZiwweDUwLDB4MDAsMHg3NCwweGFmLAotMHg1NCwweDAwLDB4NzUsMHhhZiwweDU4LDB4MDAsMHg3NiwweGFmLDB4NWMsMHgwMCwweDc3LDB4YWYsMHg2MCwweDAwLDB4NzgsMHhhZiwKLTB4NjQsMHgwMCwweDc5LDB4YWYsMHg2OCwweDAwLDB4N2MsMHhhZiwweDZjLDB4MDAsMHg3ZCwweGFmLDB4NzAsMHgwMCwweDdlLDB4YWYsCi0weDc0LDB4MDAsMHg3ZiwweGFmLDB4NzgsMHgwMCwweDY4LDB4YWYsMHg3YywweDAwLDB4NjksMHhhZiwweDgwLDB4MDAsMHg2YSwweGFmLAotMHhkZiwweDFhLDB4MDAsMHgwOCwweDIxLDB4MjAsMHg2MCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNSwweGIwLDB4MDgsMHgzYywKLTB4MjAsMHgwMywweDA4LDB4MzUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxYSwweGFkLDB4MDAsMHgwNCwweDViLDB4MzMsCi0weDBhLDB4MDAsMHg2MCwweDEzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDgsMHgzYywweDc0LDB4NTUsMHgwOCwweDI1LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDI1LDB4YjAsMHgxYiwweDNjLDB4MjQsMHgwMywweDdiLDB4MzcsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDY4LDB4YWYsMHgwOSwweGY4LDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDViLDB4MzMsCi0weDI1LDB4YjAsMHgwOCwweDNjLDB4MjgsMHgwMywweDA4LDB4MzUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxYiwweGFkLAotMHgwNiwweDAwLDB4NjAsMHgxMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA4LDB4M2MsMHhmYywweDY5LDB4MDgsMHgyNSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOSwweGY4LDB4MDAsMHgwMSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDFhLDB4M2MsCi0weDZjLDB4N2UsMHg1YSwweDI3LDB4MDQsMHgwMCwweDViLDB4OTcsMHgyNSwweGIwLDB4MDgsMHgzYywweDMwLDB4MDMsMHgwOCwweDM1LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxYiwweGFkLDB4MTgsMHgwMCwweDYwLDB4MTMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHhlYywweDliLDB4MjcsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHg2MSwweDhmLDB4ZmMsMHgwMywweDcwLDB4N2IsCi0weDdjLDB4MDAsMHg2MiwweDdiLDB4YmMsMHgwMCwweDY0LDB4N2IsMHhmYywweDAwLDB4NjYsMHg3YiwweDNjLDB4MDEsMHg2OCwweDdiLAotMHgxMywweDAwLDB4MDAsMHgwMiwweDExLDB4MDAsMHgyMCwweDAyLDB4N2MsMHgwMSwweDZhLDB4N2IsMHhiYywweDAxLDB4NmMsMHg3YiwKLTB4ZmMsMHgwMSwweDZlLDB4N2IsMHgzYywweDAyLDB4NzAsMHg3YiwweDdjLDB4MDIsMHg3MiwweDdiLDB4YmMsMHgwMiwweDc0LDB4N2IsCi0weGZjLDB4MDIsMHg3NiwweDdiLDB4M2MsMHgwMywweDc4LDB4N2IsMHg3YywweDAzLDB4N2MsMHg3YiwweGJjLDB4MDMsMHg3ZSwweDdiLAotMHg4MCwweDAwLDB4N2IsMHg4ZiwweDJmLDB4MWMsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMSwweGQ4LDB4YTAsMHgwMywKLTB4ODIsMHhkYSwweDFiLDB4MDAsMHg4MCwweGRhLDB4MWIsMHgwMCwweDA4LDB4MDAsMHg3YiwweDI3LDB4MDgsMHgwMCwweDViLDB4YWYsCi0weGZjLDB4ZWYsMHg5ZCwweDI3LDB4MDAsMHgwMCwweDRhLDB4OGYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIxLDB4MDAsMHg0MCwweDExLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4ODAsMHgwOCwweDNjLDB4Y2MsMHg3ZCwweDA4LDB4MjUsMHgyMSwweDQ4LDB4MDAsMHgwMCwKLTB4MjEsMHg1OCwweDAwLDB4MDAsMHgwMSwweDAwLDB4NmIsMHgyNSwweDFhLDB4MDAsMHg0MCwweDExLDB4MjQsMHg3MCwweDRiLDB4MDEsCi0weDE0LDB4MDAsMHhjMCwweDExLDB4MDEsMHgwMCwweDA0LDB4MjQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHg0NCwweGEzLAotMHgyNiwweDUwLDB4NGIsMHgwMSwweDAwLDB4MDAsMHg0YSwweGFmLDB4ODAsMHg4MCwweDA5LDB4MDAsMHgyMSwweDgwLDB4MDgsMHgwMiwKLTB4MDAsMHgwMCwweDEwLDB4OGUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA5LDB4ZjgsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4ODAsMHgxYiwweDNjLDB4ZTgsMHg2ZiwweDdiLDB4MjcsMHgyNSwweGIwLDB4MWEsMHgzYywweDE4LDB4MDMsMHg1YSwweDI3LAotMHgwMCwweDAwLDB4NWIsMHhhZiwweDAyLDB4ODAsMHgxYSwweDNjLDB4NmMsMHg3ZSwweDVhLDB4MjcsMHhlMSwweGZmLDB4MDAsMHgxMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MjksMHgyNSwweDQwLDB4NTgsMHgwYiwweDAwLDB4ZjIsMHgxYiwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDFiLDB4M2MsMHg2YywweDdlLDB4N2IsMHgyNywweDIxLDB4NjAsMHgwMCwweDAwLAotMHgwNCwweDAwLDB4NmMsMHhhNywweDA4LDB4MDAsMHg3YSwweDhmLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmOCwweGZmLDB4NWEsMHgyNywKLTB4MDAsMHgwMCwweDVhLDB4OGYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHg1YSwweDI3LDB4ODQsMHgwMCwweDQ0LDB4OGYsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZjksMHhmZiwweDgwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHg0MSwweDhmLAotMHhmYywweDAzLDB4NTAsMHg3YiwweDdjLDB4MDAsMHg0MiwweDdiLDB4YmMsMHgwMCwweDQ0LDB4N2IsMHhmYywweDAwLDB4NDYsMHg3YiwKLTB4M2MsMHgwMSwweDQ4LDB4N2IsMHgxMywweDAwLDB4MDAsMHgwMiwweDExLDB4MDAsMHgyMCwweDAyLDB4N2MsMHgwMSwweDRhLDB4N2IsCi0weGJjLDB4MDEsMHg0YywweDdiLDB4ZmMsMHgwMSwweDRlLDB4N2IsMHgzYywweDAyLDB4NTAsMHg3YiwweDdjLDB4MDIsMHg1MiwweDdiLAotMHhiYywweDAyLDB4NTQsMHg3YiwweGZjLDB4MDIsMHg1NiwweDdiLDB4M2MsMHgwMywweDU4LDB4N2IsMHg3YywweDAzLDB4NWMsMHg3YiwKLTB4YmMsMHgwMywweDVlLDB4N2IsMHg4MCwweDAwLDB4NWIsMHg4ZiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweDYwLDB4MDMsCi0weDEwLDB4MDAsMHgwMCwweDQyLDB4MDAsMHg2MCwweDA1LDB4NDAsMHg0MiwweDI4LDB4MDUsMHgwMCwweDQwLDB4MjgsMHgwNSwweDAwLAotMHgwMCwweDYwLDB4ODUsMHg0MCwweDA0LDB4MDAsMHg4MSwweGFjLDB4MDgsMHgwMCwweDgyLDB4YWMsMHgwYywweDAwLDB4ODMsMHhhYywKLTB4MjAsMHgwMCwweDg4LDB4YWMsMHgyNCwweDAwLDB4ODksMHhhYywweDI4LDB4MDAsMHg4YSwweGFjLDB4MmMsMHgwMCwweDhiLDB4YWMsCi0weDMwLDB4MDAsMHg4YywweGFjLDB4MzQsMHgwMCwweDhkLDB4YWMsMHgzOCwweDAwLDB4OGUsMHhhYywweDNjLDB4MDAsMHg4ZiwweGFjLAotMHgxMiwweDQwLDB4MDAsMHgwMCwweDEwLDB4NDgsMHgwMCwweDAwLDB4NDAsMHgwMCwweDkwLDB4YWMsMHg0NCwweDAwLDB4OTEsMHhhYywKLTB4NDgsMHgwMCwweDkyLDB4YWMsMHg0YywweDAwLDB4OTMsMHhhYywweDUwLDB4MDAsMHg5NCwweGFjLDB4NTQsMHgwMCwweDk1LDB4YWMsCi0weDU4LDB4MDAsMHg5NiwweGFjLDB4NWMsMHgwMCwweDk3LDB4YWMsMHg2MCwweDAwLDB4OTgsMHhhYywweDY0LDB4MDAsMHg5OSwweGFjLAotMHg2OCwweDAwLDB4OWMsMHhhYywweDZjLDB4MDAsMHg5ZCwweGFjLDB4NzAsMHgwMCwweDllLDB4YWMsMHg3NCwweDAwLDB4OWYsMHhhYywKLTB4NzgsMHgwMCwweDg4LDB4YWMsMHg3YywweDAwLDB4ODksMHhhYywweDgwLDB4MDAsMHg5ZiwweGFjLDB4ZjgsMHhmZiwweDg0LDB4MjQsCi0weDAwLDB4MDAsMHg4NCwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ODQsMHgyNCwweDg0LDB4MDAsMHg4NiwweDhjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGY5LDB4ZmYsMHhjMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMSwweGQ4LDB4ODAsMHgwMCwKLTB4MDEsMHgwMCwweGJhLDB4MjQsMHgwNCwweDAwLDB4NjEsMHg4ZiwweGZjLDB4MDMsMHg3MCwweDdiLDB4N2MsMHgwMCwweDYyLDB4N2IsCi0weGJjLDB4MDAsMHg2NCwweDdiLDB4ZmMsMHgwMCwweDY2LDB4N2IsMHgzYywweDAxLDB4NjgsMHg3YiwweDEzLDB4MDAsMHgwMCwweDAyLAotMHgxMSwweDAwLDB4MjAsMHgwMiwweDdjLDB4MDEsMHg2YSwweDdiLDB4YmMsMHgwMSwweDZjLDB4N2IsMHhmYywweDAxLDB4NmUsMHg3YiwKLTB4M2MsMHgwMiwweDcwLDB4N2IsMHg3YywweDAyLDB4NzIsMHg3YiwweGJjLDB4MDIsMHg3NCwweDdiLDB4ZmMsMHgwMiwweDc2LDB4N2IsCi0weDNjLDB4MDMsMHg3OCwweDdiLDB4N2MsMHgwMywweDdjLDB4N2IsMHhiYywweDAzLDB4N2UsMHg3YiwweDgwLDB4MDAsMHg3YiwweDhmLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHg2MCwweDAzLDB4MDAsMHg2MCwweDlhLDB4NDAsMHgwMCwweDYwLDB4MDUsMHg0MCwKLTB4NDIsMHgyOCwweDA1LDB4MDAsMHg0MCwweDI4LDB4MDUsMHgwMCwweDAwLDB4NjAsMHg4NSwweDQwLDB4MDQsMHgwMCwweDgxLDB4YWMsCi0weDA4LDB4MDAsMHg4MiwweGFjLDB4MGMsMHgwMCwweDgzLDB4YWMsMHgyMCwweDAwLDB4ODgsMHhhYywweDI0LDB4MDAsMHg4OSwweGFjLAotMHgyOCwweDAwLDB4OGEsMHhhYywweDJjLDB4MDAsMHg4YiwweGFjLDB4MzAsMHgwMCwweDhjLDB4YWMsMHgzNCwweDAwLDB4OGQsMHhhYywKLTB4MzgsMHgwMCwweDhlLDB4YWMsMHgzYywweDAwLDB4OGYsMHhhYywweDEyLDB4NDAsMHgwMCwweDAwLDB4MTAsMHg0OCwweDAwLDB4MDAsCi0weDQwLDB4MDAsMHg5MCwweGFjLDB4NDQsMHgwMCwweDkxLDB4YWMsMHg0OCwweDAwLDB4OTIsMHhhYywweDRjLDB4MDAsMHg5MywweGFjLAotMHg1MCwweDAwLDB4OTQsMHhhYywweDU0LDB4MDAsMHg5NCwweGFjLDB4NTgsMHgwMCwweDk2LDB4YWMsMHg1YywweDAwLDB4OTYsMHhhYywKLTB4NjAsMHgwMCwweDk4LDB4YWMsMHg2NCwweDAwLDB4OTksMHhhYywweDY4LDB4MDAsMHg5YywweGFjLDB4NmMsMHgwMCwweDlkLDB4YWMsCi0weDcwLDB4MDAsMHg5ZSwweGFjLDB4NzgsMHgwMCwweDg4LDB4YWMsMHg3YywweDAwLDB4ODksMHhhYywweDgwLDB4MDAsMHg5ZiwweGFjLAotMHg4NCwweDAwLDB4ODAsMHhhYywweGY4LDB4ZmYsMHg4NCwweDI0LDB4MDAsMHgwMCwweDg0LDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweDg0LDB4MjQsMHg4NCwweDAwLDB4ODYsMHg4YywweGZhLDB4ZmYsMHhjMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDIxLDB4ZDgsMHg4MCwweDAwLDB4MDEsMHgwMCwweGJhLDB4MjQsMHgwNCwweDAwLDB4NjEsMHg4ZiwweGZjLDB4MDMsMHg3MCwweDdiLAotMHg3YywweDAwLDB4NjIsMHg3YiwweGJjLDB4MDAsMHg2NCwweDdiLDB4ZmMsMHgwMCwweDY2LDB4N2IsMHgzYywweDAxLDB4NjgsMHg3YiwKLTB4MTMsMHgwMCwweDAwLDB4MDIsMHgxMSwweDAwLDB4MjAsMHgwMiwweDdjLDB4MDEsMHg2YSwweDdiLDB4YmMsMHgwMSwweDZjLDB4N2IsCi0weGZjLDB4MDEsMHg2ZSwweDdiLDB4M2MsMHgwMiwweDcwLDB4N2IsMHg3YywweDAyLDB4NzIsMHg3YiwweGJjLDB4MDIsMHg3NCwweDdiLAotMHhmYywweDAyLDB4NzYsMHg3YiwweDNjLDB4MDMsMHg3OCwweDdiLDB4N2MsMHgwMywweDdjLDB4N2IsMHhiYywweDAzLDB4N2UsMHg3YiwKLTB4ODAsMHgwMCwweDdiLDB4OGYsMHgwOCwweDAwLDB4NjAsMHgwMywweDAwLDB4NjAsMHg5YSwweDQwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhjNiwweDdmLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHg4MCwweDFiLDB4M2MsMHgwMCwweDAwLDB4N2IsMHgyNywKLTB4MjUsMHhiMCwweDFhLDB4M2MsMHgxOCwweDAzLDB4NWEsMHgyNywweDAwLDB4MDAsMHg1YiwweGFmLDB4MDAsMHgwMCwweDA1LDB4MjQsCi0weDAzLDB4MDAsMHhhNCwweDI0LDB4MDAsMHhhMCwweDgwLDB4NDAsMHgwMCwweGEwLDB4ODQsMHg0MCwweDAxLDB4ODAsMHgwNCwweDNjLAotMHg5OCwweDAzLDB4ODQsMHgyNCwweDA4LDB4MDAsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDEsMHg4MCwweDFiLDB4M2MsMHg5OCwweDAzLDB4N2IsMHgyNywweDI1LDB4YjAsMHgxYSwweDNjLDB4MTgsMHgwMywweDVhLDB4MjcsCi0weDAwLDB4MDAsMHg1YiwweGFmLDB4MDIsMHg4MCwweDFhLDB4M2MsMHgwMCwweDAwLDB4NWEsMHgyNywweGZjLDB4MDMsMHg1ZCwweDI3LAotMHgwMiwweDgwLDB4MWMsMHgzYywweDAwLDB4MTQsMHg5YywweDI3LDB4MDAsMHhmMCwweDA4LDB4M2MsMHgwMCwweDBjLDB4MDgsMHgzNSwKLTB4MDAsMHg2MCwweDg4LDB4NDAsMHgwMiwweDgwLDB4MDQsMHgzYywweDAwLDB4MDAsMHg4NCwweDI0LDB4ZmYsMHg3ZiwweDA1LDB4M2MsCi0weGZmLDB4ZmYsMHhhNSwweDM0LDB4MjQsMHgyMCwweDg1LDB4MDAsMHgwMCwweDIwLDB4ODQsMHg0YywweGZmLDB4ZmYsMHgwNSwweDM0LAotMHgyMSwweDI4LDB4YTQsMHgwMCwweDAwLDB4MjgsMHg4NSwweDRjLDB4MDAsMHg4MCwweDA0LDB4M2MsMHgwMCwweDAwLDB4ODQsMHgyNCwKLTB4ZmYsMHg3ZiwweDA1LDB4M2MsMHhmZiwweGZmLDB4YTUsMHgzNCwweDI0LDB4MjAsMHg4NSwweDAwLDB4MDAsMHgwMCwweDg0LDB4NGMsCi0weGZmLDB4N2YsMHgwNiwweDI0LDB4MjEsMHgzMCwweGM0LDB4MDAsMHgyNCwweDMwLDB4YzUsMHgwMCwweDAwLDB4MDgsMHg4NiwweDRjLAotMHgwMCwweGEwLDB4MDQsMHg0MCwweDEwLDB4MDAsMHg4NCwweDM0LDB4MDAsMHhhMCwweDg0LDB4NDAsMHgwMSwweDgwLDB4MWIsMHgzYywKLTB4MjQsMHgwNCwweDdiLDB4MjcsMHgyNSwweGIwLDB4MWEsMHgzYywweDE4LDB4MDMsMHg1YSwweDI3LDB4MDAsMHgwMCwweDViLDB4YWYsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjUsMHhiMCwweDA0LDB4M2MsMHg0NCwweDAwLDB4ODQsMHgzNCwweDAwLDB4MDAsMHg4NSwweDg0LAotMHgyMCwweDAwLDB4MDYsMHgyNCwweDI1LDB4MjgsMHhhNiwweDAwLDB4MDAsMHgwMCwweDg1LDB4YTQsMHgwMSwweDgwLDB4MWIsMHgzYywKLTB4NTQsMHgwNCwweDdiLDB4MjcsMHgyNSwweGIwLDB4MWEsMHgzYywweDE4LDB4MDMsMHg1YSwweDI3LDB4MDAsMHgwMCwweDViLDB4YWYsCi0weDI1LDB4YjAsMHgwNCwweDNjLDB4NDQsMHgwMCwweDg0LDB4MzQsMHgwMCwweDAwLDB4ODUsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgxMCwweDAwLDB4YTUsMHgzMCwweGZjLDB4ZmYsMHhhMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweDFmLDB4MDcsMHgzYywKLTB4ZmYsMHhmZiwweGU3LDB4MzQsMHgwMiwweDgwLDB4MDUsMHgzYywweDg4LDB4N2QsMHhhNSwweDI0LDB4ZmYsMHhmZiwweGE1LDB4MzAsCi0weDQwLDB4YjAsMHgwNCwweDNjLDB4MjUsMHgyOCwweGE0LDB4MDAsMHgyNCwweDI4LDB4YTcsMHgwMCwweDIxLDB4MzAsMHgwMCwweDAwLAotMHg0MywweGIwLDB4MDIsMHgzYywweDAwLDB4ODAsMHgwNCwweDNjLDB4NDAsMHgwMCwweDg0LDB4MzQsMHgwMCwweDAwLDB4NDUsMHhhYywKLTB4MDQsMHgwMCwweDQ2LDB4YWMsMHgwOCwweDAwLDB4NDQsMHhhYywweDRlLDB4NTgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOSwweDAwLDB4MDIsMHgyNCwweGZmLDB4ZmYsMHg0MiwweDI0LAotMHhmZiwweGZmLDB4NDEsMHgwNCwweGZmLDB4ZmYsMHg0MiwweDI0LDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMSwweDAwLDB4NDIsMHgyNCwKLTB4MDAsMHg2MCwweDAyLDB4NDAsMHgwMSwweDAwLDB4NDEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDgyLDB4YWMsMHgwMCwweDAwLDB4ODIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyMSwweDE4LDB4NDAsMHgwMCwweDAwLDB4NjAsMHg4MywweDQwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4ODIsMHhhYywKLTB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAxLDB4MDAsMHgyMSwweDM4LAotMHgwMCwweDYwLDB4ODEsMHg0MCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDgwLDB4MDMsMHgzYywKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHg0NCwweDA1LDB4NjMsMHgyNCwweDE4LDB4MDMsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YWMsCi0weDA0LDB4MDAsMHg4NSwweDhjLDB4MDAsMHg4MCwweDAzLDB4M2MsMHgwMSwweDAwLDB4MDIsMHgyNCwweDI1LDB4MjgsMHhhMywweDAwLAotMHgwMCwweDAwLDB4YTQsMHg4YywweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDgwLDB4MDMsMHgzYywKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHg3NCwweDA1LDB4NjMsMHgyNCwweDE4LDB4MDMsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YWMsCi0weDA0LDB4MDAsMHg4MiwweDhjLDB4MDIsMHgwMCwweDgzLDB4OTQsMHgwMCwweDgwLDB4MDcsMHgzYywweDI1LDB4MjgsMHg0NywweDAwLAotMHgwMCwweDAwLDB4YTIsMHg4YywweDEwLDB4MDAsMHgwMiwweDI0LDB4MTMsMHgwMCwweDYyLDB4MTAsMHgxMSwweDAwLDB4NjYsMHgyOCwKLTB4MDYsMHgwMCwweGMwLDB4MTAsMHgyMCwweDAwLDB4MDIsMHgyNCwweDA4LDB4MDAsMHgwMiwweDI0LDB4MTcsMHgwMCwweDYyLDB4MTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMSwweDAwLDB4MDIsMHgyNCwweGZkLDB4ZmYsMHg2MiwweDE0LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHg4MywweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTMsMHhhYywKLTB4MDQsMHgwMCwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI1LDB4MTAsMHg0NywweDAwLDB4MDAsMHgwMCwweDQyLDB4OGMsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MDEsMHgwMCwweDAyLDB4MjQsMHgwOCwweDAwLDB4ODIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4YTIsMHhhNCwweDA0LDB4MDAsMHg4MywweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNSwweDE4LDB4NjcsMHgwMCwKLTB4MDAsMHgwMCwweDYyLDB4OTQsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAxLDB4MDAsMHgwMiwweDI0LDB4MDgsMHgwMCwweDgyLDB4OGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGEyLDB4YTAsMHgwNCwweDAwLDB4ODMsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyNSwweDE4LDB4NjcsMHgwMCwweDAwLDB4MDAsMHg2MiwweDkwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMSwweDAwLDB4MDIsMHgyNCwKLTB4ZTAsMHhmZiwweGJkLDB4MjcsMHgxNCwweDAwLDB4YjEsMHhhZiwweDAyLDB4ODAsMHgxMSwweDNjLDB4MWMsMHgwMCwweGJmLDB4YWYsCi0weDE4LDB4MDAsMHhiMiwweGFmLDB4MTAsMHgwMCwweGIwLDB4YWYsMHg2OCwweDE1LDB4MzEsMHgyNiwweGU0LDB4NjQsMHgzMCwweDk2LAotMHgwMiwweDgwLDB4MDIsMHgzYywweDAxLDB4ODAsMHgwMywweDNjLDB4MjUsMHg4MCwweDAyLDB4MDIsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4MzgsMHgwNiwweDYzLDB4MjQsMHgxOCwweDAzLDB4NDIsMHgzNCwweDYwLDB4MDAsMHgwNCwweDI2LDB4ODAsMHgwMCwweDA1LDB4MjYsCi0weDAwLDB4MDAsMHg0MywweGFjLDB4YWIsMHg0NSwweDAwLDB4MGMsMHgwMywweDAwLDB4MDYsMHgyNCwweDIxLDB4MjAsMHgwMCwweDAyLAotMHgyMSwweDI4LDB4MDAsMHgwMCwweDk3LDB4NDUsMHgwMCwweDBjLDB4MDgsMHgwMCwweDA2LDB4MjQsMHhlNCwweDY0LDB4MjIsMHg4ZSwKLTB4MGMsMHgwMCwweDAzLDB4MjQsMHgwYywweDAwLDB4NDMsMHhhZSwweDA4LDB4MDAsMHg0MiwweGFlLDB4MTIsMHgwMCwweDAyLDB4MjQsCi0weDE0LDB4MDAsMHg0MiwweGFlLDB4MjEsMHgyMCwweDQwLDB4MDIsMHgxYywweDAwLDB4YmYsMHg4ZiwweDE4LDB4MDAsMHhiMiwweDhmLAotMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLDB4OGIsMHgwNywweDAwLDB4MDgsMHgyMCwweDAwLDB4YmQsMHgyNywKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDEsMHgwMCwweDAyLDB4MjQsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAxLDB4MDAsMHgwMiwweDI0LAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMSwweDAwLDB4MDIsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MDEsMHgwMCwweDAyLDB4MjQsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMSwweDAwLDB4MDIsMHgyNCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMSwweDAwLDB4MDIsMHgyNCwweDAyLDB4ODAsMHgwMiwweDNjLDB4MjEsMHg0OCwweDgwLDB4MDAsCi0weDY4LDB4MTUsMHg0OCwweDI0LDB4MjEsMHgzOCwweDAwLDB4MDAsMHgyMSwweDI4LDB4MjcsMHgwMSwweDAwLDB4MDAsMHhhMiwweDkwLAotMHgyMSwweDIwLDB4ZTgsMHgwMCwweDAxLDB4MDAsMHhlNywweDI0LDB4MzgsMHg0YywweDgyLDB4YTAsMHgxZSwweDAwLDB4YTMsMHg5MCwKLTB4MWUsMHgwMCwweGU2LDB4MjgsMHg1NiwweDRjLDB4ODMsMHhhMCwweDNjLDB4MDAsMHhhMiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDc0LDB4NGMsMHg4MiwweGEwLDB4NWEsMHgwMCwweGEzLDB4OTAsMHhmMywweGZmLDB4YzAsMHgxNCwweDkyLDB4NGMsMHg4MywweGEwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMSwweDAwLDB4MDIsMHgyNCwKLTB4MjAsMHhiZCwweDAzLDB4M2MsMHg1OCwweDAwLDB4NjMsMHgzNCwweDAwLDB4MDAsMHg2MiwweDkwLDB4MGYsMHgyNywweDA3LDB4MjQsCi0weDIwLDB4MDAsMHg0MiwweDM0LDB4MDAsMHgwMCwweDYyLDB4YTAsMHhmZiwweGZmLDB4ZTcsMHgyNCwweGZmLDB4ZmYsMHhlMSwweDA0LAotMHhmZiwweGZmLDB4ZTcsMHgyNCwweDYyLDB4YmQsMHgwNCwweDNjLDB4MjQsMHgxMCwweDgyLDB4MzQsMHgwMCwweDAwLDB4NDAsMHhhMCwKLTB4MjgsMHgxMCwweDgzLDB4MzQsMHgwYywweDExLDB4ODYsMHgzNCwweDBlLDB4MDAsMHgwMiwweDI0LDB4MDAsMHgwMCwweDYwLDB4YTAsCi0weDAwLDB4MTEsMHg4NSwweDM0LDB4MDAsMHgwMCwweGMyLDB4YTAsMHgwMCwweDAwLDB4YTcsMHg4YywweGRmLDB4ZmYsMHgwMiwweDI0LAotMHgxMCwweDAwLDB4ODYsMHgzNCwweDI0LDB4MzgsMHhlMiwweDAwLDB4NDksMHgwYywweDAzLDB4MjQsMHhjZiwweGZmLDB4MDIsMHgyNCwKLTB4MDAsMHgwMCwweGMzLDB4YWMsMHgwNCwweDAwLDB4ODQsMHgzNCwweDAwLDB4MDAsMHhhNywweGFjLDB4MjQsMHgzOCwweGUyLDB4MDAsCi0weDQxLDB4MGMsMHgwMiwweDI0LDB4MDAsMHgwMCwweGE3LDB4YWMsMHgwMCwweDAwLDB4ODAsMHhhYywweDAwLDB4MDAsMHhjMiwweGFjLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLDB4ZDAsMHhmZiwweGJkLDB4MjcsMHgyNSwweGIwLDB4MDMsMHgzYywKLTB4MDEsMHg4MCwweDAyLDB4M2MsMHhiMCwweDAzLDB4NjgsMHgzNCwweDFjLDB4MDAsMHhiMSwweGFmLDB4MTgsMHgwMywweDYzLDB4MzQsCi0weGQ4LDB4ZmYsMHg5MSwweDI0LDB4YTAsMHgwOCwweDQyLDB4MjQsMHgwMCwweDAwLDB4NjIsMHhhYywweDI4LDB4MDAsMHhiZiwweGFmLAotMHgwMCwweDAwLDB4MTEsMHhhZCwweDI0LDB4MDAsMHhiMywweGFmLDB4MjAsMHgwMCwweGIyLDB4YWYsMHgxOCwweDAwLDB4YjAsMHhhZiwKLTB4MDIsMHg4MCwweDEzLDB4M2MsMHgwMCwweDAwLDB4MjMsMHg5NiwweDY4LDB4MTUsMHg3MywweDI2LDB4ZmYsMHhmZiwweDMyLDB4MzIsCi0weDQwLDB4MTAsMHgwMiwweDNjLDB4NzgsMHg2NCwweDY1LDB4OGUsMHgyNSwweDkwLDB4NDIsMHgwMiwweDAyLDB4ODAsMHgxMCwweDNjLAotMHg4YywweDk2LDB4MTAsMHgyNiwweDIwLDB4MDAsMHg0MiwweDI2LDB4MDAsMHgwMCwweDAzLDB4YWQsMHgyMCwweDAwLDB4MDYsMHgyNCwKLTB4MDAsMHgwMCwweDAyLDB4YWQsMHgyMSwweDM4LDB4MDAsMHgwMiwweDBjLDB4MDAsMHgwMywweGFlLDB4MGEsMHgwMCwweDA0LDB4MjQsCi0weDY0LDB4MDEsMHgwMCwweDBjLDB4MDgsMHgwMCwweDAyLDB4YWUsMHgwNCwweDAwLDB4MjMsMHg4ZSwweGZmLDB4ZTAsMHgwMiwweDI0LAotMHgyOCwweDAwLDB4MDQsMHgyNCwweDI0LDB4MTgsMHg2MiwweDAwLDB4MDAsMHgxMCwweDYzLDB4MzQsMHgwMiwweDAwLDB4MjQsMHhhMiwKLTB4MDQsMHgwMCwweDIzLDB4YWUsMHgwYywweDAwLDB4MDIsMHg4ZSwweDBhLDB4MDAsMHgwNCwweDI0LDB4ZjgsMHhmZiwweDQyLDB4MjQsCi0weDRkLDB4MDEsMHgwMCwweDBjLDB4MDAsMHgwMCwweDIyLDB4YTYsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LAotMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MGMsMHgwMCwweDA3LDB4OGUsMHgyMCwweDEwLDB4MDYsMHgzYywKLTB4MjEsMHgyOCwweDQwLDB4MDIsMHgyMCwweDAwLDB4ZTcsMHgyNCwweDAwLDB4ZmUsMHhjNiwweDM0LDB4ZmYsMHhmZiwweGU3LDB4MzAsCi0weDAxLDB4MDAsMHgxMSwweDI0LDB4MGEsMHgwMCwweDA0LDB4MjQsMHgxMCwweDAxLDB4MDAsMHgwYywweDEwLDB4MDAsMHhiMSwweGFmLAotMHhkNSwweDRhLDB4NjMsMHg5MiwweDJhLDB4YjAsMHgxMCwweDNjLDB4MzIsMHgwMCwweDAyLDB4MzYsMHgwMSwweDAwLDB4NjMsMHgyNCwKLTB4MDAsMHgwMCwweDQzLDB4YTAsMHg0ZCwweDAxLDB4MDAsMHgwYywweDBhLDB4MDAsMHgwNCwweDI0LDB4YzksMHg2NCwweDYyLDB4OTIsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDQyLDB4MjQsMHhjOSwweDY0LDB4NjIsMHhhMiwweDAwLDB4NjAsMHgwMSwweDQwLAotMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MDEsMHgwMCwweDEwLDB4MzYsMHgwMCwweDAwLDB4MTEsMHhhMiwKLTB4MjgsMHgwMCwweGJmLDB4OGYsMHgyNCwweDAwLDB4YjMsMHg4ZiwweDIwLDB4MDAsMHhiMiwweDhmLDB4MWMsMHgwMCwweGIxLDB4OGYsCi0weDE4LDB4MDAsMHhiMCwweDhmLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDMwLDB4MDAsMHhiZCwweDI3LAotMHgyNSwweGIwLDB4MDUsMHgzYywweDAxLDB4ODAsMHgwMywweDNjLDB4MjEsMHgzOCwweDgwLDB4MDAsMHgxOCwweDAzLDB4YTIsMHgzNCwKLTB4ZTgsMHgwOSwweDYzLDB4MjQsMHgwMSwweDAwLDB4MDQsMHgyNCwweDAwLDB4MDAsMHg0MywweGFjLDB4MzUsMHgwMCwweGU0LDB4MTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MTAsMHgyMCwweDA4LDB4YTIsMHgzNCwweDAyLDB4MDAsMHgwMiwweDI0LAotMHg4MywweDAwLDB4ZTIsMHgxMCwweDAzLDB4MDAsMHgwMiwweDI0LDB4NWEsMHgwMCwweGUyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4ODAsMHgwMywweDNjLDB4MDAsMHgwMCwweDQ0LDB4OGMsCi0weDY4LDB4MTUsMHg2NiwweDI0LDB4NzAsMHgwOCwweDAyLDB4MjQsMHhlMCwweDA4LDB4MDMsMHgyNCwweDc0LDB4NGIsMHhjMiwweGFjLAotMHg0MCwweDA4LDB4MDIsMHgyNCwweDc4LDB4NGIsMHhjMywweGFjLDB4ODQsMHg0YiwweGMyLDB4YWMsMHg3OCwweDA4LDB4MDMsMHgyNCwKLTB4MGMsMHgwOCwweDAyLDB4MjQsMHg4OCwweDRiLDB4YzMsMHhhYywweDhjLDB4NGIsMHhjMiwweGFjLDB4MTAsMHgwOCwweDAzLDB4MjQsCi0weDIwLDB4MDgsMHgwMiwweDI0LDB4OTAsMHg0YiwweGMzLDB4YWMsMHg5NCwweDRiLDB4YzIsMHhhYywweDI0LDB4MDgsMHgwMywweDI0LAotMHg1OCwweDA4LDB4MDIsMHgyNCwweDk4LDB4NGIsMHhjMywweGFjLDB4OWMsMHg0YiwweGMyLDB4YWMsMHg1MCwweDBjLDB4MDMsMHgyNCwKLTB4NTQsMHgwYywweDAyLDB4MjQsMHhhMCwweDRiLDB4YzMsMHhhYywweGE0LDB4NGIsMHhjMiwweGFjLDB4MTQsMHgwYywweDAzLDB4MjQsCi0weDEwLDB4MGMsMHgwMiwweDI0LDB4NjAsMHgwOCwweDA1LDB4MjQsMHhhOCwweDRiLDB4YzMsMHhhYywweGFjLDB4NGIsMHhjMiwweGFjLAotMHg4MCwweDBjLDB4MDMsMHgyNCwweDg0LDB4MGMsMHgwMiwweDI0LDB4MDAsMHgwMSwweDg0LDB4MzAsMHhiNCwweDRiLDB4YzIsMHhhYywKLTB4ODAsMHg0YiwweGM1LDB4YWMsMHhiMCwweDRiLDB4YzMsMHhhYywweDcxLDB4NGIsMHhjMCwweGEwLDB4N2MsMHg0YiwweGM1LDB4YWMsCi0weDAyLDB4MDAsMHg4MCwweDEwLDB4YTAsMHgwOCwweDAyLDB4MjQsMHhiOCwweDA4LDB4MDIsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHhiOCwweDRiLDB4YzIsMHhhYywweDI4LDB4MDgsMHhhMiwweDM0LDB4MDIsMHg4MCwweDAzLDB4M2MsMHgwMCwweDAwLDB4NDQsMHg4YywKLTB4NjgsMHgxNSwweDY2LDB4MjQsMHg3MCwweDA4LDB4MDIsMHgyNCwweGUwLDB4MDgsMHgwMywweDI0LDB4NzQsMHg0YiwweGMyLDB4YWMsCi0weDQ0LDB4MDgsMHgwMiwweDI0LDB4NzgsMHg0YiwweGMzLDB4YWMsMHg4NCwweDRiLDB4YzIsMHhhYywweDc4LDB4MDgsMHgwMywweDI0LAotMHgwYywweDA4LDB4MDIsMHgyNCwweDg4LDB4NGIsMHhjMywweGFjLDB4OGMsMHg0YiwweGMyLDB4YWMsMHgxNCwweDA4LDB4MDMsMHgyNCwKLTB4MjgsMHgwOCwweDAyLDB4MjQsMHg5MCwweDRiLDB4YzMsMHhhYywweDk0LDB4NGIsMHhjMiwweGFjLDB4MmMsMHgwOCwweDAzLDB4MjQsCi0weDU4LDB4MDgsMHgwMiwweDI0LDB4OTgsMHg0YiwweGMzLDB4YWMsMHg5YywweDRiLDB4YzIsMHhhYywweDU4LDB4MGMsMHgwMywweDI0LAotMHg1YywweDBjLDB4MDIsMHgyNCwweGEwLDB4NGIsMHhjMywweGFjLDB4YTQsMHg0YiwweGMyLDB4YWMsMHgxYywweDBjLDB4MDMsMHgyNCwKLTB4MTgsMHgwYywweDAyLDB4MjQsMHg2NCwweDA4LDB4MDUsMHgyNCwweGE4LDB4NGIsMHhjMywweGFjLDB4YWMsMHg0YiwweGMyLDB4YWMsCi0weDg4LDB4MGMsMHgwMywweDI0LDB4OGMsMHgwYywweDAyLDB4MjQsMHgwMCwweDAxLDB4ODQsMHgzMCwweGI0LDB4NGIsMHhjMiwweGFjLAotMHg3MSwweDRiLDB4YzcsMHhhMCwweDgwLDB4NGIsMHhjNSwweGFjLDB4YjAsMHg0YiwweGMzLDB4YWMsMHg3YywweDRiLDB4YzUsMHhhYywKLTB4ZDYsMHhmZiwweDgwLDB4MTAsMHhhNCwweDA4LDB4MDIsMHgyNCwweGJjLDB4MDgsMHgwMiwweDI0LDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weGI4LDB4NGIsMHhjMiwweGFjLDB4MDIsMHg4MCwweDAyLDB4M2MsMHg2OCwweDE1LDB4NDIsMHgyNCwweGFjLDB4MDgsMHgwMywweDI0LAotMHhiOCwweDRiLDB4NDMsMHhhYywweDc0LDB4MDgsMHgwMywweDI0LDB4ZTQsMHgwOCwweDA0LDB4MjQsMHg3NCwweDRiLDB4NDMsMHhhYywKLTB4NGMsMHgwOCwweDAzLDB4MjQsMHg3OCwweDRiLDB4NDQsMHhhYywweDg0LDB4NGIsMHg0MywweGFjLDB4N2MsMHgwOCwweDA0LDB4MjQsCi0weDBjLDB4MDgsMHgwMywweDI0LDB4ODgsMHg0YiwweDQ0LDB4YWMsMHg4YywweDRiLDB4NDMsMHhhYywweDFjLDB4MDgsMHgwNCwweDI0LAotMHgzOCwweDA4LDB4MDMsMHgyNCwweDkwLDB4NGIsMHg0NCwweGFjLDB4OTQsMHg0YiwweDQzLDB4YWMsMHgzYywweDA4LDB4MDQsMHgyNCwKLTB4NWMsMHgwOCwweDAzLDB4MjQsMHg5OCwweDRiLDB4NDQsMHhhYywweDljLDB4NGIsMHg0MywweGFjLDB4NjgsMHgwYywweDA0LDB4MjQsCi0weDZjLDB4MGMsMHgwMywweDI0LDB4YTAsMHg0YiwweDQ0LDB4YWMsMHhhNCwweDRiLDB4NDMsMHhhYywweDJjLDB4MGMsMHgwNCwweDI0LAotMHgyOCwweDBjLDB4MDMsMHgyNCwweDZjLDB4MDgsMHgwNSwweDI0LDB4YTgsMHg0YiwweDQ0LDB4YWMsMHhhYywweDRiLDB4NDMsMHhhYywKLTB4OTgsMHgwYywweDA0LDB4MjQsMHg5YywweDBjLDB4MDMsMHgyNCwweDcxLDB4NGIsMHg0NywweGEwLDB4ODAsMHg0YiwweDQ1LDB4YWMsCi0weGIwLDB4NGIsMHg0NCwweGFjLDB4YjQsMHg0YiwweDQzLDB4YWMsMHgwOCwweDAwLDB4ZTAsMHgwMywweDdjLDB4NGIsMHg0NSwweGFjLAotMHgwMiwweDgwLDB4MDIsMHgzYywweDY4LDB4MTUsMHg0MiwweDI0LDB4YTgsMHgwOCwweDAzLDB4MjQsMHhiOCwweDRiLDB4NDMsMHhhYywKLTB4NzQsMHgwOCwweDAzLDB4MjQsMHhlNCwweDA4LDB4MDQsMHgyNCwweDc0LDB4NGIsMHg0MywweGFjLDB4NDgsMHgwOCwweDAzLDB4MjQsCi0weDc4LDB4NGIsMHg0NCwweGFjLDB4ODQsMHg0YiwweDQzLDB4YWMsMHg3YywweDA4LDB4MDQsMHgyNCwweDBjLDB4MDgsMHgwMywweDI0LAotMHg4OCwweDRiLDB4NDQsMHhhYywweDhjLDB4NGIsMHg0MywweGFjLDB4MTgsMHgwOCwweDA0LDB4MjQsMHgzMCwweDA4LDB4MDMsMHgyNCwKLTB4OTAsMHg0YiwweDQ0LDB4YWMsMHg5NCwweDRiLDB4NDMsMHhhYywweDM0LDB4MDgsMHgwNCwweDI0LDB4NWMsMHgwOCwweDAzLDB4MjQsCi0weDk4LDB4NGIsMHg0NCwweGFjLDB4OWMsMHg0YiwweDQzLDB4YWMsMHg2MCwweDBjLDB4MDQsMHgyNCwweDY0LDB4MGMsMHgwMywweDI0LAotMHhhMCwweDRiLDB4NDQsMHhhYywweGE0LDB4NGIsMHg0MywweGFjLDB4MjQsMHgwYywweDA0LDB4MjQsMHgyMCwweDBjLDB4MDMsMHgyNCwKLTB4NjgsMHgwOCwweDA1LDB4MjQsMHhhOCwweDRiLDB4NDQsMHhhYywweGFjLDB4NGIsMHg0MywweGFjLDB4OTAsMHgwYywweDA0LDB4MjQsCi0weDk0LDB4MGMsMHgwMywweDI0LDB4NzEsMHg0YiwweDQ3LDB4YTAsMHg4MCwweDRiLDB4NDUsMHhhYywweGIwLDB4NGIsMHg0NCwweGFjLAotMHhiNCwweDRiLDB4NDMsMHhhYywweDA4LDB4MDAsMHhlMCwweDAzLDB4N2MsMHg0YiwweDQ1LDB4YWMsMHgzNiwweDQzLDB4MDAsMHgwOCwKLTB4MjEsMHgxOCwweDAwLDB4MDAsMHgyMCwweDAwLDB4NjIsMHgyYywweDA2LDB4MDAsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA2LDB4MTAsMHg2NCwweDAwLDB4MDEsMHgwMCwweDQyLDB4MzAsMHhmYSwweGZmLDB4NDAsMHgxMCwweDAxLDB4MDAsMHg2MywweDI0LAotMHhmZiwweGZmLDB4NjMsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDYwLDB4MDAsMHhkOCwweGZmLDB4YmQsMHgyNywKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHgxOCwweDAwLDB4YjIsMHhhZiwweDIxLDB4OTAsMHg4MiwweDAwLDB4ZmYsMHhmZiwweDAyLDB4MjQsCi0weDFjLDB4MDAsMHhiMywweGFmLDB4MTQsMHgwMCwweGIxLDB4YWYsMHgyMCwweDAwLDB4YmYsMHhhZiwweDEwLDB4MDAsMHhiMCwweGFmLAotMHgyMSwweDg4LDB4YTAsMHgwMCwweDIxLDB4MjAsMHhhMCwweDAwLDB4MjEsMHgxOCwweDQwLDB4MDIsMHgxMCwweDAwLDB4YTIsMHgxMCwKLTB4MjEsMHg5OCwweGMwLDB4MDAsMHgwMCwweDAwLDB4NTAsMHg4ZSwweDMxLDB4NDMsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA0LDB4MTAsMHg1MywweDAwLDB4MjcsMHgxOCwweDExLDB4MDAsMHgyNSwweDE4LDB4NjIsMHgwMCwweDI0LDB4MTgsMHg3MCwweDAwLAotMHgwMCwweDAwLDB4NDMsMHhhZSwweDIwLDB4MDAsMHhiZiwweDhmLDB4MWMsMHgwMCwweGIzLDB4OGYsMHgxOCwweDAwLDB4YjIsMHg4ZiwKLTB4MTQsMHgwMCwweGIxLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjgsMHgwMCwweGJkLDB4MjcsCi0weDIwLDB4MDAsMHhiZiwweDhmLDB4MWMsMHgwMCwweGIzLDB4OGYsMHgxOCwweDAwLDB4YjIsMHg4ZiwweDE0LDB4MDAsMHhiMSwweDhmLAotMHgxMCwweDAwLDB4YjAsMHg4ZiwweDI4LDB4MDAsMHhiZCwweDI3LDB4MDAsMHgwMCwweDY2LDB4YWMsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDgwLDB4MDIsMHgzYywweDIxLDB4MzAsMHg4MCwweDAwLDB4ZWMsMHg2MCwweDQ0LDB4OGMsCi0weDNkLDB4NDMsMHgwMCwweDA4LDB4ZmYsMHhmZiwweDA1LDB4MjQsMHhlMCwweGZmLDB4YmQsMHgyNywweDI1LDB4YjAsMHgwMiwweDNjLAotMHgxOCwweDAwLDB4YmYsMHhhZiwweDE0LDB4MDAsMHhiMSwweGFmLDB4MTAsMHgwMCwweGIwLDB4YWYsMHgyMSwweDIwLDB4ODIsMHgwMCwKLTB4MDAsMHgwMCwweDkwLDB4OGMsMHgyMSwweDg4LDB4YTAsMHgwMCwweDMxLDB4NDMsMHgwMCwweDBjLDB4MjEsMHgyMCwweGEwLDB4MDAsCi0weDI0LDB4ODAsMHgxMSwweDAyLDB4MDYsMHgxMCwweDUwLDB4MDAsMHgxOCwweDAwLDB4YmYsMHg4ZiwweDE0LDB4MDAsMHhiMSwweDhmLAotMHgxMCwweDAwLDB4YjAsMHg4ZiwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjAsMHgwMCwweGJkLDB4MjcsMHhkMCwweGZmLDB4YmQsMHgyNywKLTB4MTQsMHgwMCwweGIxLDB4YWYsMHgwMiwweDgwLDB4MTEsMHgzYywweDI4LDB4MDAsMHhiZiwweGFmLDB4MjAsMHgwMCwweGI0LDB4YWYsCi0weDFjLDB4MDAsMHhiMywweGFmLDB4MTgsMHgwMCwweGIyLDB4YWYsMHgyNCwweDAwLDB4YjUsMHhhZiwweDEwLDB4MDAsMHhiMCwweGFmLAotMHg2OCwweDE1LDB4MzEsMHgyNiwweDk4LDB4NGIsMHgyMiwweDhlLDB4MjUsMHhiMCwweDEyLDB4M2MsMHgyNCwweDA4LDB4NTMsMHgzNiwKLTB4MjEsMHgxMCwweDUyLDB4MDAsMHgwMCwweDAwLDB4NzAsMHg4ZSwweDAwLDB4MDAsMHg1NSwweDhjLDB4N2YsMHg4MCwweDAzLDB4M2MsCi0weGZmLDB4N2YsMHgwMiwweDNjLDB4ZmYsMHhmZiwweDYzLDB4MzQsMHhmZiwweGZmLDB4NDIsMHgzNCwweDI0LDB4MTAsMHgwMiwweDAyLAotMHgyNCwweDE4LDB4YTMsMHgwMiwweGMwLDB4MjUsMHgwNCwweDAwLDB4MjUsMHgxOCwweDY0LDB4MDAsMHgwMCwweDgwLDB4MTQsMHgzYywKLTB4MDAsMHgwMCwweDYyLDB4YWUsMHgwMSwweDAwLDB4MDQsMHgyNCwweDg0LDB4MGEsMHgwMCwweDBjLDB4MjUsMHhhOCwweDc0LDB4MDAsCi0weDk4LDB4NGIsMHgyMiwweDhlLDB4MjUsMHg4MCwweDE0LDB4MDIsMHgwMSwweDAwLDB4MDQsMHgyNCwweDIxLDB4MTAsMHg1MiwweDAwLAotMHgwMCwweDAwLDB4NTUsMHhhYywweDg0LDB4MGEsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NzAsMHhhZSwKLTB4ODQsMHgwYSwweDAwLDB4MGMsMHgwMSwweDAwLDB4MDQsMHgyNCwweGI4LDB4NGIsMHgyNCwweDhlLDB4MGYsMHgwMCwweDA1LDB4M2MsCi0weDI4LDB4MDAsMHhiZiwweDhmLDB4MjQsMHgwMCwweGI1LDB4OGYsMHgyMCwweDAwLDB4YjQsMHg4ZiwweDFjLDB4MDAsMHhiMywweDhmLAotMHgxOCwweDAwLDB4YjIsMHg4ZiwweDE0LDB4MDAsMHhiMSwweDhmLDB4MTAsMHgwMCwweGIwLDB4OGYsMHhmZiwweGZmLDB4YTUsMHgzNCwKLTB4NjgsMHg0MywweDAwLDB4MDgsMHgzMCwweDAwLDB4YmQsMHgyNywweGUwLDB4ZmYsMHhiZCwweDI3LDB4MTQsMHgwMCwweGIxLDB4YWYsCi0weDAyLDB4ODAsMHgxMSwweDNjLDB4MTAsMHgwMCwweGIwLDB4YWYsMHgxOCwweDAwLDB4YmYsMHhhZiwweDY4LDB4MTUsMHgyNywweDI2LAotMHg3MywweDRiLDB4ZTUsMHg5MCwweDAxLDB4ODAsMHgwMywweDNjLDB4MjUsMHhiMCwweDAyLDB4M2MsMHhiMCwweDBlLDB4NjMsMHgyNCwKLTB4MTgsMHgwMywweDQyLDB4MzQsMHgwMiwweDAwLDB4MDYsMHgyNCwweDAwLDB4MDAsMHg0MywweGFjLDB4MzQsMHgwMCwweGE2LDB4MTAsCi0weDIxLDB4ODAsMHg4MCwweDAwLDB4MDMsMHgwMCwweDAzLDB4MjQsMHgzYSwweDAwLDB4YTMsMHgxMCwweDJlLDB4MDAsMHgwMiwweDJlLAotMHgxMCwweDAwLDB4MDIsMHgyZSwweDA3LDB4MDAsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweDAwLDB4MDQsMHgzMiwKLTB4MTgsMHgwMCwweGJmLDB4OGYsMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLDB4NzksMHg0MywweDAwLDB4MDgsCi0weDIwLDB4MDAsMHhiZCwweDI3LDB4ZmEsMHhmZiwweGE2LDB4MTQsMHhmZiwweDAwLDB4MDQsMHgzMiwweDcxLDB4NGIsMHhlNCwweDkwLAotMHgwMSwweDAwLDB4MDIsMHgyNCwweDMzLDB4MDAsMHg4MiwweDEwLDB4MDIsMHgwMCwweDgyLDB4MjgsMHgzOCwweDAwLDB4NDAsMHgxNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDAwLDB4ODUsMHgxMCwweDY4LDB4MTUsMHgyMiwweDI2LDB4MmUsMHgwMCwweDgzLDB4MTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA0LDB4MjQsMHg2OCwweDQzLDB4MDAsMHgwYywweGZmLDB4ZmYsMHgwNSwweDI0LAotMHhmZiwweGZjLDB4MDYsMHgzYywweGZmLDB4ZmYsMHhjNiwweDM0LDB4MjQsMHgzMCwweDQ2LDB4MDAsMHgwMCwweDA4LDB4MDQsMHgyNCwKLTB4M2QsMHg0MywweDAwLDB4MGMsMHhmZiwweGZmLDB4MDUsMHgyNCwweDY4LDB4MTUsMHgyMiwweDI2LDB4NzEsMHg0YiwweDQ0LDB4OTAsCi0weDAxLDB4MDAsMHgwMywweDI0LDB4MDcsMHgwMCwweDgzLDB4MTAsMHgwMiwweDAwLDB4ODIsMHgyOCwweDJjLDB4MDAsMHg0MCwweDE0LAotMHgwMiwweDAwLDB4MDIsMHgyNCwweDJjLDB4MDAsMHg4MiwweDEwLDB4MDMsMHgwMCwweDAyLDB4MjQsMHhkYiwweGZmLDB4ODIsMHgxNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDE1LDB4MjIsMHgyNiwweDc0LDB4NGIsMHg0NCwweDhjLDB4MGYsMHgwMCwweDA1LDB4M2MsCi0weDNkLDB4NDMsMHgwMCwweDBjLDB4MjEsMHgzMCwweDAwLDB4MDAsMHhjMiwweDQzLDB4MDAsMHgwOCwweGZmLDB4MDAsMHgwNCwweDMyLAotMHgyNSwweDAwLDB4ODIsMHgyYywweGNjLDB4ZmYsMHg0MCwweDE0LDB4MDMsMHgwMCwweDAzLDB4MjQsMHgxOCwweDAwLDB4YmYsMHg4ZiwKLTB4MTQsMHgwMCwweGIxLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwweDIxLDB4MTAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDIwLDB4MDAsMHhiZCwweDI3LDB4YzcsMHhmZiwweDQwLDB4MTQsMHgxMCwweDAwLDB4MDIsMHgyZSwweDE4LDB4MDAsMHhiZiwweDhmLAotMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MjAsMHgwMCwweGJkLDB4MjcsMHg2OCwweDE1LDB4MjIsMHgyNiwweDc0LDB4NGIsMHg0NCwweDhjLDB4MGYsMHgwMCwweDA1LDB4M2MsCi0weDNkLDB4NDMsMHgwMCwweDBjLDB4MGYsMHgwMCwweDA2LDB4MjQsMHhkNCwweDQzLDB4MDAsMHgwOCwweDAwLDB4MDgsMHgwNCwweDI0LAotMHhjYywweGZmLDB4ODAsMHgxNCwweDY4LDB4MTUsMHgyMiwweDI2LDB4NzQsMHg0YiwweDQ0LDB4OGMsMHgwZiwweDAwLDB4MDUsMHgyNCwKLTB4M2QsMHg0MywweDAwLDB4MGMsMHgwZiwweDAwLDB4MDYsMHgyNCwweGQ0LDB4NDMsMHgwMCwweDA4LDB4MDAsMHgwOCwweDA0LDB4MjQsCi0weGIyLDB4ZmYsMHg4MCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2OCwweDE1LDB4MjIsMHgyNiwweDc0LDB4NGIsMHg0NCwweDhjLAotMHgwZiwweDAwLDB4MDUsMHgyNCwweDNkLDB4NDMsMHgwMCwweDBjLDB4MjEsMHgzMCwweDAwLDB4MDAsMHhjMiwweDQzLDB4MDAsMHgwOCwKLTB4ZmYsMHgwMCwweDA0LDB4MzIsMHhlMCwweGZmLDB4YmQsMHgyNywweDE0LDB4MDAsMHhiMSwweGFmLDB4MDIsMHg4MCwweDExLDB4M2MsCi0weDY4LDB4MTUsMHgyOCwweDI2LDB4NzMsMHg0YiwweDA2LDB4OTEsMHgwMSwweDgwLDB4MDMsMHgzYywweDI1LDB4YjAsMHgwMiwweDNjLAotMHg1YywweDEwLDB4NjMsMHgyNCwweDE4LDB4MDMsMHg0MiwweDM0LDB4MDIsMHgwMCwweDA3LDB4MjQsMHgxOCwweDAwLDB4YjIsMHhhZiwKLTB4MTAsMHgwMCwweGIwLDB4YWYsMHgxYywweDAwLDB4YmYsMHhhZiwweDAwLDB4MDAsMHg0MywweGFjLDB4MjEsMHg5MCwweGEwLDB4MDAsCi0weDM5LDB4MDAsMHhjNywweDEwLDB4ZmYsMHgwMCwweDkwLDB4MzAsMHgwMywweDAwLDB4MDMsMHgyNCwweDNmLDB4MDAsMHhjMywweDEwLAotMHgyZSwweDAwLDB4MDIsMHgyZSwweDEwLDB4MDAsMHgwMiwweDJlLDB4MGMsMHgwMCwweDQwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MGYsMHgwMCwweDA0LDB4M2MsMHhmZiwweGZmLDB4ODQsMHgzNCwweDI0LDB4MjAsMHg0NCwweDAyLDB4MDAsMHgxNSwweDEwLDB4MDAsCi0weDFjLDB4MDAsMHhiZiwweDhmLDB4MTgsMHgwMCwweGIyLDB4OGYsMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLAotMHgyNSwweDIwLDB4NDQsMHgwMCwweDYzLDB4NDMsMHgwMCwweDA4LDB4MjAsMHgwMCwweGJkLDB4MjcsMHhmNSwweGZmLDB4YzcsMHgxNCwKLTB4MGYsMHgwMCwweDA0LDB4M2MsMHg3MSwweDRiLDB4MDQsMHg5MSwweDAxLDB4MDAsMHgwMiwweDI0LDB4MzMsMHgwMCwweDgyLDB4MTAsCi0weDAyLDB4MDAsMHg4MiwweDI4LDB4MzgsMHgwMCwweDQwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MDAsMHg4NiwweDEwLAotMHg2OCwweDE1LDB4MjIsMHgyNiwweDJlLDB4MDAsMHg4MywweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgyNCwKLTB4NjgsMHg0MywweDAwLDB4MGMsMHhmZiwweGZmLDB4MDUsMHgyNCwweGZmLDB4ZmMsMHgwNiwweDNjLDB4ZmYsMHhmZiwweGM2LDB4MzQsCi0weDI0LDB4MzAsMHg0NiwweDAwLDB4MDAsMHgwOCwweDA0LDB4MjQsMHgzZCwweDQzLDB4MDAsMHgwYywweGZmLDB4ZmYsMHgwNSwweDI0LAotMHg2OCwweDE1LDB4MjIsMHgyNiwweDcxLDB4NGIsMHg0NCwweDkwLDB4MDEsMHgwMCwweDAzLDB4MjQsMHgwNywweDAwLDB4ODMsMHgxMCwKLTB4MDIsMHgwMCwweDgyLDB4MjgsMHgyYywweDAwLDB4NDAsMHgxNCwweDAyLDB4MDAsMHgwMiwweDI0LDB4MmMsMHgwMCwweDgyLDB4MTAsCi0weDAzLDB4MDAsMHgwMiwweDI0LDB4ZDYsMHhmZiwweDgyLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MTUsMHgyMiwweDI2LAotMHg3NCwweDRiLDB4NDQsMHg4YywweDBmLDB4MDAsMHgwNSwweDNjLDB4M2QsMHg0MywweDAwLDB4MGMsMHgyMSwweDMwLDB4MDAsMHgwMCwKLTB4MmYsMHg0NCwweDAwLDB4MDgsMHgwZiwweDAwLDB4MDQsMHgzYywweDI1LDB4MDAsMHgwMiwweDJlLDB4YzcsMHhmZiwweDQwLDB4MTQsCi0weDAzLDB4MDAsMHgwMywweDI0LDB4MWMsMHgwMCwweGJmLDB4OGYsMHgxOCwweDAwLDB4YjIsMHg4ZiwweDE0LDB4MDAsMHhiMSwweDhmLAotMHgxMCwweDAwLDB4YjAsMHg4ZiwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjAsMHgwMCwweGJkLDB4MjcsMHhjMSwweGZmLDB4NDAsMHgxNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgxYywweDAwLDB4YmYsMHg4ZiwweDE4LDB4MDAsMHhiMiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsCi0weDEwLDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMCwweDAwLDB4YmQsMHgyNywweDY4LDB4MTUsMHgyMiwweDI2LAotMHg3NCwweDRiLDB4NDQsMHg4YywweDBmLDB4MDAsMHgwNSwweDNjLDB4M2QsMHg0MywweDAwLDB4MGMsMHgwZiwweDAwLDB4MDYsMHgyNCwKLTB4NDYsMHg0NCwweDAwLDB4MDgsMHgwMCwweDA4LDB4MDQsMHgyNCwweGNjLDB4ZmYsMHg4MCwweDE0LDB4NjgsMHgxNSwweDIyLDB4MjYsCi0weDc0LDB4NGIsMHg0NCwweDhjLDB4MGYsMHgwMCwweDA1LDB4MjQsMHgzZCwweDQzLDB4MDAsMHgwYywweDBmLDB4MDAsMHgwNiwweDI0LAotMHg0NiwweDQ0LDB4MDAsMHgwOCwweDAwLDB4MDgsMHgwNCwweDI0LDB4YWQsMHhmZiwweDgwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4NjgsMHgxNSwweDIyLDB4MjYsMHg3NCwweDRiLDB4NDQsMHg4YywweDBmLDB4MDAsMHgwNSwweDI0LDB4M2QsMHg0MywweDAwLDB4MGMsCi0weDIxLDB4MzAsMHgwMCwweDAwLDB4MmYsMHg0NCwweDAwLDB4MDgsMHgwZiwweDAwLDB4MDQsMHgzYywweGU4LDB4ZmYsMHhiZCwweDI3LAotMHgxMCwweDAwLDB4YjAsMHhhZiwweDIxLDB4ODAsMHg4MCwweDAwLDB4MTQsMHgwMCwweGJmLDB4YWYsMHg3OSwweDQzLDB4MDAsMHgwYywKLTB4MjEsMHgyMCwweDAwLDB4MDAsMHg0MCwweDAxLDB4NDQsMHgzNCwweDIxLDB4MTgsMHg0MCwweDAwLDB4MWYsMHgwMCwweDAyLDB4MmUsCi0weDAwLDB4MjMsMHgwNCwweDAwLDB4MTAsMHgwMCwweDQwLDB4MTAsMHgxMCwweDAwLDB4MDUsMHgyZSwweDAwLDB4MDEsMHg2NCwweDM0LAotMHgwNiwweDAwLDB4YTAsMHgxMCwweDAwLDB4MjMsMHgwNCwweDAwLDB4MjEsMHgxMCwweDAwLDB4MDIsMHgxNCwweDAwLDB4YmYsMHg4ZiwKLTB4MTAsMHgwMCwweGIwLDB4OGYsMHgwOCwweDAwLDB4ZTAsMHgwMywweDE4LDB4MDAsMHhiZCwweDI3LDB4NjMsMHg0MywweDAwLDB4MGMsCi0weGYxLDB4ZmYsMHgxMCwweDI2LDB4MjEsMHgxMCwweDAwLDB4MDIsMHgxNCwweDAwLDB4YmYsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDE4LDB4MDAsMHhiZCwweDI3LDB4NjMsMHg0MywweDAwLDB4MGMsMHhlMiwweGZmLDB4MTAsMHgyNiwKLTB4MjEsMHgxMCwweDAwLDB4MDIsMHgxNCwweDAwLDB4YmYsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDE4LDB4MDAsMHhiZCwweDI3LDB4MjUsMHhiMCwweDAyLDB4M2MsMHgyNywweDM4LDB4MDUsMHgwMCwweDIxLDB4NDAsMHg4MiwweDAwLAotMHhmZiwweGZmLDB4MDIsMHgyNCwweDA3LDB4MDAsMHhhMiwweDEwLDB4MjUsMHgzOCwweGU2LDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4ZCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDEwLDB4ZTIsMHgwMCwweDAwLDB4MDAsMHgwMiwweGFkLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA2LDB4YWQsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMSwweDgwLDB4MDIsMHgzYywweDI1LDB4YjAsMHgwMywweDNjLDB4ZTgsMHgxMiwweDQyLDB4MjQsMHgxOCwweDAzLDB4NjMsMHgzNCwKLTB4ZDgsMHhmZiwweGJkLDB4MjcsMHgwMCwweDAwLDB4NjIsMHhhYywweDBmLDB4MDAsMHgwMiwweDNjLDB4MTQsMHgwMCwweGIxLDB4YWYsCi0weGZmLDB4ZmYsMHg0MiwweDM0LDB4MjEsMHg4OCwweGEwLDB4MDAsMHgxYywweDAwLDB4YjMsMHhhZiwweDE4LDB4MDAsMHhiMiwweGFmLAotMHgyMCwweDAwLDB4YmYsMHhhZiwweDEwLDB4MDAsMHhiMCwweGFmLDB4MjEsMHg5MCwweGMwLDB4MDAsMHgyMSwweDI4LDB4YzAsMHgwMCwKLTB4MGEsMHgwMCwweDIyLDB4MTIsMHgyMSwweDk4LDB4ODAsMHgwMCwweGFjLDB4NDMsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDIxLDB4MjAsMHgyMCwweDAyLDB4MzEsMHg0MywweDAwLDB4MGMsMHgyMSwweDgwLDB4NDAsMHgwMCwweDA0LDB4MTAsMHg1MiwweDAwLAotMHgyNywweDI4LDB4MTEsMHgwMCwweDI1LDB4MjgsMHhhMiwweDAwLDB4MjQsMHgyOCwweGIwLDB4MDAsMHhmZiwweDAwLDB4NjQsMHgzMiwKLTB4MjAsMHgwMCwweGJmLDB4OGYsMHgxYywweDAwLDB4YjMsMHg4ZiwweDE4LDB4MDAsMHhiMiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsCi0weDEwLDB4MDAsMHhiMCwweDhmLDB4MTcsMHg0NCwweDAwLDB4MDgsMHgyOCwweDAwLDB4YmQsMHgyNywweDAxLDB4ODAsMHgwMywweDNjLAotMHgyNSwweGIwLDB4MDIsMHgzYywweDc0LDB4MTMsMHg2MywweDI0LDB4MTgsMHgwMywweDQyLDB4MzQsMHhlMCwweGZmLDB4YmQsMHgyNywKLTB4MDAsMHgwMCwweDQzLDB4YWMsMHgxOCwweDAwLDB4YmYsMHhhZiwweDE0LDB4MDAsMHhiMSwweGFmLDB4MTAsMHgwMCwweGIwLDB4YWYsCi0weGFjLDB4NDMsMHgwMCwweDBjLDB4MjEsMHg4OCwweGEwLDB4MDAsMHgyMSwweDgwLDB4NDAsMHgwMCwweDMxLDB4NDMsMHgwMCwweDBjLAotMHgyMSwweDIwLDB4MjAsMHgwMiwweDI0LDB4ODAsMHgxMSwweDAyLDB4MDYsMHgxMCwweDUwLDB4MDAsMHgxOCwweDAwLDB4YmYsMHg4ZiwKLTB4MTQsMHgwMCwweGIxLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjAsMHgwMCwweGJkLDB4MjcsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDEsMHgwMCwweDAyLDB4MjQsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGM4LDB4ZmYsMHhiZCwweDI3LDB4MmMsMHgwMCwweGIxLDB4YWYsMHhmZiwweGZmLDB4MDUsMHgyNCwweDIxLDB4ODgsMHg4MCwweDAwLAotMHgwMiwweDAwLDB4MDYsMHgyNCwweDEwLDB4MDAsMHhhNCwweDI3LDB4MzQsMHgwMCwweGJmLDB4YWYsMHgzMCwweDAwLDB4YjIsMHhhZiwKLTB4OTcsMHg0NSwweDAwLDB4MGMsMHgyOCwweDAwLDB4YjAsMHhhZiwweDA4LDB4MDAsMHgzMCwweDk2LDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weDIxLDB4MjgsMHgwMCwweDAwLDB4MjUsMHg4MCwweDAyLDB4MDIsMHgyMSwweDIwLDB4MDAsMHgwMiwweDk3LDB4NDUsMHgwMCwweDBjLAotMHgxMCwweDAwLDB4MDYsMHgyNCwweDIwLDB4MDAsMHgwMiwweDk2LDB4MjQsMHgwMCwweDA0LDB4MjYsMHgxMCwweDAwLDB4YTUsMHgyNywKLTB4MDMsMHhmZiwweDQyLDB4MzAsMHhjOCwweDAwLDB4NDIsMHgzNCwweDIwLDB4MDAsMHgwMiwweGE2LDB4OWYsMHg0NSwweDAwLDB4MGMsCi0weDA2LDB4MDAsMHgwNiwweDI0LDB4MjUsMHhiMCwweDAzLDB4M2MsMHg1MCwweDAwLDB4NjIsMHgzNCwweDAwLDB4MDAsMHg0NCwweDhjLAotMHg1NCwweDAwLDB4NjUsMHgzNCwweDU4LDB4MDAsMHg2NiwweDM0LDB4MTgsMHgwMCwweGE0LDB4YWYsMHgwMCwweDAwLDB4YTIsMHg4YywKLTB4NWMsMHgwMCwweDYzLDB4MzQsMHgyYSwweDAwLDB4MDQsMHgyNiwweDFjLDB4MDAsMHhhMiwweGFmLDB4MDAsMHgwMCwweGM3LDB4OGMsCi0weDE4LDB4MDAsMHhhNSwweDI3LDB4MDYsMHgwMCwweDA2LDB4MjQsMHgyMCwweDAwLDB4YTcsMHhhZiwweDAwLDB4MDAsMHg2MiwweDhjLAotMHgxYSwweDAwLDB4MTIsMHgyNCwweDlmLDB4NDUsMHgwMCwweDBjLDB4MjQsMHgwMCwweGEyLDB4YWYsMHgzMCwweDAwLDB4MDQsMHgyNiwKLTB4MjAsMHgwMCwweGE1LDB4MjcsMHg5ZiwweDQ1LDB4MDAsMHgwYywweDA2LDB4MDAsMHgwNiwweDI0LDB4MTMsMHgwMCwweDAzLDB4MjQsCi0weDE0LDB4MDAsMHgyMywweGFlLDB4MGMsMHgwMCwweDMyLDB4YWUsMHgwOCwweDAwLDB4MDUsMHg4ZSwweDA0LDB4MDAsMHgwNCwweDhlLAotMHhmZiwweGRmLDB4MDIsMHgzYywweDE0LDB4MDAsMHgwNiwweDhlLDB4ZmYsMHhmZiwweDQyLDB4MzQsMHgxMCwweDAwLDB4MDcsMHg4ZSwKLTB4ZmYsMHhlMCwweDAzLDB4MjQsMHgyNCwweDI4LDB4YTIsMHgwMCwweDAwLDB4NDAsMHgwMiwweDNjLDB4MjQsMHgyMCwweDgzLDB4MDAsCi0weDI1LDB4MjgsMHhhMiwweDAwLDB4ZmYsMHg4MSwweDAzLDB4MjQsMHhmZSwweGZmLDB4MDIsMHgzYywweDI0LDB4MzAsMHhjMywweDAwLAotMHhmZiwweGZmLDB4NDIsMHgzNCwweDAwLDB4MTIsMHg4NCwweDM0LDB4MDAsMHg4MCwweDAzLDB4M2MsMHgyNCwweDIwLDB4ODIsMHgwMCwKLTB4MjUsMHgzOCwweGUzLDB4MDAsMHgwMCwweDI2LDB4YzYsMHgzNCwweDgwLDB4MDAsMHhhNSwweDM0LDB4MjAsMHgwMCwweDAyLDB4MjQsCi0weDAwLDB4MDAsMHgxMiwweGE2LDB4MTAsMHgwMCwweDA3LDB4YWUsMHgwMiwweDAwLDB4MDIsMHhhMiwweDE0LDB4MDAsMHgwNiwweGFlLAotMHgwNCwweDAwLDB4MDQsMHhhZSwweDA4LDB4MDAsMHgwNSwweGFlLDB4MzQsMHgwMCwweGJmLDB4OGYsMHgzMCwweDAwLDB4YjIsMHg4ZiwKLTB4MmMsMHgwMCwweGIxLDB4OGYsMHgyOCwweDAwLDB4YjAsMHg4ZiwweDA4LDB4MDAsMHhlMCwweDAzLDB4MzgsMHgwMCwweGJkLDB4MjcsCi0weDkzLDB4NDUsMHgwMCwweDA4LDB4ZmYsMHgwMCwweGE1LDB4MzAsMHgwMCwweDAwLDB4ODUsMHhhMCwweGZmLDB4ZmYsMHhjNiwweDI0LAotMHgwMSwweDAwLDB4ODQsMHgyNCwweGZjLDB4ZmYsMHhjMCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNSwweDAwLDB4YzAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg1LDB4YWMsCi0weGZmLDB4ZmYsMHhjNiwweDI0LDB4ZmQsMHhmZiwweGMwLDB4MTQsMHgwNCwweDAwLDB4ODQsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDIxLDB4MzgsMHg4MCwweDAwLDB4MDgsMHgwMCwweGMwLDB4MTAsMHhmZiwweGZmLDB4YzMsMHgyNCwKLTB4ZmYsMHhmZiwweDA2LDB4MjQsMHgwMCwweDAwLDB4YTIsMHg5MCwweGZmLDB4ZmYsMHg2MywweDI0LDB4MDEsMHgwMCwweGE1LDB4MjQsCi0weDAwLDB4MDAsMHhlMiwweGEwLDB4ZmIsMHhmZiwweDY2LDB4MTQsMHgwMSwweDAwLDB4ZTcsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgyMSwweDEwLDB4ODAsMHgwMCwweDIxLDB4MzgsMHg4MCwweDAwLDB4MDgsMHgwMCwweGMwLDB4MTAsMHhmZiwweGZmLDB4YzMsMHgyNCwKLTB4ZmYsMHhmZiwweDA2LDB4MjQsMHgwMCwweDAwLDB4YTIsMHg4YywweGZmLDB4ZmYsMHg2MywweDI0LDB4MDQsMHgwMCwweGE1LDB4MjQsCi0weDAwLDB4MDAsMHhlMiwweGFjLDB4ZmIsMHhmZiwweDY2LDB4MTQsMHgwNCwweDAwLDB4ZTcsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgyMSwweDEwLDB4ODAsMHgwMCwweDJiLDB4MTAsMHhhNCwweDAwLDB4MGQsMHgwMCwweDQwLDB4MTQsMHhmZiwweGZmLDB4MDIsMHgyNCwKLTB4ZmYsMHhmZiwweGM2LDB4MjQsMHgwOCwweDAwLDB4YzIsMHgxMCwweDIxLDB4MTgsMHg4MCwweDAwLDB4ZmYsMHhmZiwweDA3LDB4MjQsCi0weDAwLDB4MDAsMHhhMiwweDkwLDB4ZmYsMHhmZiwweGM2LDB4MjQsMHgwMSwweDAwLDB4YTUsMHgyNCwweDAwLDB4MDAsMHg2MiwweGEwLAotMHhmYiwweGZmLDB4YzcsMHgxNCwweDAxLDB4MDAsMHg2MywweDI0LDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4ODAsMHgwMCwKLTB4MjEsMHgyOCwweGE2LDB4MDAsMHgyMSwweDE4LDB4ODYsMHgwMCwweGZmLDB4ZmYsMHhjNiwweDI0LDB4ZmEsMHhmZiwweGMyLDB4MTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHhmZiwweDA3LDB4MjQsMHhmZiwweGZmLDB4YTUsMHgyNCwweDAwLDB4MDAsMHhhMiwweDkwLAotMHhmZiwweGZmLDB4NjMsMHgyNCwweGZmLDB4ZmYsMHhjNiwweDI0LDB4ZmIsMHhmZiwweGM3LDB4MTQsMHgwMCwweDAwLDB4NjIsMHhhMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4ODAsMHgwMCwweDBjLDB4MDAsMHhjMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHg4MiwweDkwLDB4MDAsMHgwMCwweGEzLDB4OTAsMHgwMSwweDAwLDB4ODQsMHgyNCwweDIzLDB4MTAsMHg0MywweDAwLAotMHgwMCwweDE2LDB4MDIsMHgwMCwweDAzLDB4MTYsMHgwMiwweDAwLDB4MDQsMHgwMCwweDQwLDB4MTQsMHgwMSwweDAwLDB4YTUsMHgyNCwKLTB4ZmYsMHhmZiwweGM2LDB4MjQsMHhmNiwweGZmLDB4YzAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDIxLDB4MTAsMHhjMCwweDAwLDB4ZWEsMHg0NSwweDAwLDB4MDgsMHgyMSwweDE4LDB4ODYsMHgwMCwweDAwLDB4MDAsMHg4MiwweDkwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHg0NSwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4ODQsMHgyNCwKLTB4ZmEsMHhmZiwweDgzLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDgwLDB4MDAsCi0weDA5LDB4MDAsMHhjMCwweDEwLDB4ZmYsMHhmZiwweGMzLDB4MjQsMHhmZiwweDAwLDB4YTUsMHgzMCwweGZmLDB4ZmYsMHgwNiwweDI0LAotMHgwMCwweDAwLDB4ODIsMHg5MCwweGZmLDB4ZmYsMHg2MywweDI0LDB4MDUsMHgwMCwweDQ1LDB4MTAsMHgwMSwweDAwLDB4ODQsMHgyNCwKLTB4ZmIsMHhmZiwweDY2LDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDAwLDB4MDAsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4ZmYsMHhmZiwweDgyLDB4MjQsMHgyMSwweDM4LDB4MDAsMHgwMCwweDFmLDB4MDAsMHhjMCwweDEwLAotMHgyMSwweDE4LDB4MDAsMHgwMCwweDAyLDB4ODAsMHgwMiwweDNjLDB4ODAsMHg5NSwweDRiLDB4MjQsMHgwMCwweDAwLDB4ODcsMHg5MCwKLTB4MDAsMHgwMCwweGEzLDB4OTAsMHhmZiwweGZmLDB4YzYsMHgyNCwweDAxLDB4MDAsMHg4NCwweDI0LDB4MjEsMHgxMCwweGViLDB4MDAsCi0weDE2LDB4MDAsMHhlMCwweDEwLDB4MDEsMHgwMCwweGE1LDB4MjQsMHgxNCwweDAwLDB4NjAsMHgxMCwweDIxLDB4NDgsMHg2YiwweDAwLAotMHgxMCwweDAwLDB4ZTMsMHgxMCwweDIwLDB4MDAsMHhlOCwweDI0LDB4MDAsMHgwMCwweDQyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDQyLDB4MzAsMHgwMiwweDAwLDB4NDAsMHgxMCwweDIwLDB4MDAsMHg2YSwweDI0LDB4ZmYsMHgwMCwweDA3LDB4MzEsCi0weDAwLDB4MDAsMHgyMiwweDkxLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4NDIsMHgzMCwweDAyLDB4MDAsMHg0MCwweDEwLAotMHhmZiwweDAwLDB4ZTcsMHgzMCwweGZmLDB4MDAsMHg0MywweDMxLDB4ZmYsMHgwMCwweDYzLDB4MzAsMHgwMywweDAwLDB4ZTMsMHgxNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhlNSwweGZmLDB4YzAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDIzLDB4MTAsMHhlMywweDAwLDB4MjEsMHgxOCwweDgwLDB4MDAsMHgwMCwweDAwLDB4YTIsMHg5MCwweDAxLDB4MDAsMHhhNSwweDI0LAotMHgwMCwweDAwLDB4ODIsMHhhMCwweGZjLDB4ZmYsMHg0MCwweDE0LDB4MDEsMHgwMCwweDg0LDB4MjQsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MjEsMHgxMCwweDYwLDB4MDAsMHgyMSwweDM4LDB4ODAsMHgwMCwweGZmLDB4ZmYsMHgwMywweDI0LDB4ZmYsMHhmZiwweGM2LDB4MjQsCi0weDA2LDB4MDAsMHhjMywweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTIsMHg5MCwweDAxLDB4MDAsMHhhNSwweDI0LAotMHgwMCwweDAwLDB4ODIsMHhhMCwweGY5LDB4ZmYsMHg0MCwweDE0LDB4MDEsMHgwMCwweDg0LDB4MjQsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MjEsMHgxMCwweGUwLDB4MDAsMHgwMCwweDAwLDB4ODIsMHg4MCwweDM5LDB4NDYsMHgwMCwweDA4LDB4MjEsMHgxOCwweDgwLDB4MDAsCi0weDAxLDB4MDAsMHg4NCwweDI0LDB4MDAsMHgwMCwweDgyLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZjLDB4ZmYsMHg0MCwweDE0LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMiwweDkwLDB4MDEsMHgwMCwweGE1LDB4MjQsMHgwMCwweDAwLDB4ODIsMHhhMCwKLTB4ZmMsMHhmZiwweDQwLDB4MTQsMHgwMSwweDAwLDB4ODQsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDYwLDB4MDAsCi0weDEyLDB4MDAsMHhjMCwweDEwLDB4MjEsMHgxOCwweDgwLDB4MDAsMHgwMCwweDAwLDB4ODIsMHg4MCwweDRhLDB4NDYsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg4NCwweDI0LDB4MDAsMHgwMCwweDgyLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ZmMsMHhmZiwweDQwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMiwweDkwLDB4MDEsMHgwMCwweGE1LDB4MjQsCi0weDAwLDB4MDAsMHg4MiwweGEwLDB4MDUsMHgwMCwweDQwLDB4MTAsMHgwMSwweDAwLDB4ODQsMHgyNCwweGZmLDB4ZmYsMHhjNiwweDI0LAotMHhmOSwweGZmLDB4YzAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4YTAsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MjEsMHgxMCwweDYwLDB4MDAsMHgwMCwweDAwLDB4ODMsMHg5MCwweDAwLDB4MDAsMHhhMiwweDkwLDB4MDEsMHgwMCwweDg0LDB4MjQsCi0weDIzLDB4MTAsMHg2MiwweDAwLDB4MDAsMHgxNiwweDAyLDB4MDAsMHgwMywweDE2LDB4MDIsMHgwMCwweDAzLDB4MDAsMHg0MCwweDE0LAotMHgwMSwweDAwLDB4YTUsMHgyNCwweGY3LDB4ZmYsMHg2MCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMSwweDEwLDB4MDAsMHgwMCwweDBiLDB4MDAsMHhjMCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHhhMiwweDkwLDB4MDAsMHgwMCwweDgzLDB4OTAsMHhmZiwweGZmLDB4YzYsMHgyNCwweDIzLDB4MTAsMHg2MiwweDAwLAotMHgwMCwweDE2LDB4MDIsMHgwMCwweDAzLDB4MTYsMHgwMiwweDAwLDB4MDMsMHgwMCwweDQwLDB4MTQsMHgwMSwweDAwLDB4YTUsMHgyNCwKLTB4ZjUsMHhmZiwweDYwLDB4MTQsMHgwMSwweDAwLDB4ODQsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHg4MywweDgwLDB4MDAsMHgyZSwweDA1LDB4MDAsMHgyMSwweDEwLDB4ODAsMHgwMCwweDdiLDB4NDYsMHgwMCwweDA4LAotMHgwMywweDJlLDB4MDUsMHgwMCwweDA3LDB4MDAsMHg2MCwweDEwLDB4MDEsMHgwMCwweDQyLDB4MjQsMHgwMCwweDAwLDB4NDMsMHg4MCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhmYiwweGZmLDB4NjUsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MiwweDgwLAotMHg4NywweDQ2LDB4MDAsMHgwOCwweDIxLDB4MTgsMHg4MCwweDAwLDB4MDEsMHgwMCwweDYzLDB4MjQsMHgwMCwweDAwLDB4NjIsMHg4MCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhmYywweGZmLDB4NDAsMHgxNCwweDIzLDB4MTAsMHg2NCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZTAsMHhmZiwweGJkLDB4MjcsMHgxMCwweDAwLDB4YjAsMHhhZiwweDIxLDB4ODAsMHhhMCwweDAwLAotMHgxNCwweDAwLDB4YjEsMHhhZiwweDE4LDB4MDAsMHhiZiwweGFmLDB4MjEsMHg4OCwweDgwLDB4MDAsMHg4MSwweDQ2LDB4MDAsMHgwYywKLTB4MDAsMHg4NiwweDEwLDB4MDAsMHgyMSwweDE4LDB4NTEsMHgwMCwweDAzLDB4ODYsMHgxMCwweDAwLDB4MDAsMHgwMCwweDYyLDB4ODAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MGEsMHgwMCwweDUwLDB4MTAsMHgyMSwweDEwLDB4NjAsMHgwMCwweGZmLDB4ZmYsMHg2MywweDI0LAotMHgyYiwweDEwLDB4NzEsMHgwMCwweGY5LDB4ZmYsMHg0MCwweDEwLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgxOCwweDAwLDB4YmYsMHg4ZiwKLTB4MTQsMHgwMCwweGIxLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjAsMHgwMCwweGJkLDB4MjcsCi0weDE4LDB4MDAsMHhiZiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgyMCwweDAwLDB4YmQsMHgyNywweDIxLDB4MzAsMHg4MCwweDAwLDB4MGQsMHgwMCwweGEwLDB4MTAsMHhmZiwweGZmLDB4YTMsMHgyNCwKLTB4MDAsMHgwMCwweDgyLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA5LDB4MDAsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGZmLDB4ZmYsMHgwNSwweDI0LDB4ZmYsMHhmZiwweDYzLDB4MjQsMHgwNSwweDAwLDB4NjUsMHgxMCwweDAxLDB4MDAsMHhjNiwweDI0LAotMHgwMCwweDAwLDB4YzIsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmEsMHhmZiwweDQwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMywweDEwLDB4YzQsMHgwMCwweDAwLDB4MDAsMHg4MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDE5LDB4MDAsMHg0MCwweDEwLDB4MjEsMHg0MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YTksMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgxNywweDAwLDB4MjAsMHgxMSwweDIxLDB4MzAsMHhhMCwweDAwLDB4MDAsMHgzZSwweDAyLDB4MDAsMHgwMywweDNlLDB4MDcsMHgwMCwKLTB4MjEsMHgxOCwweDIwLDB4MDEsMHgxNSwweDAwLDB4ZTMsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweGM2LDB4MjQsCi0weDAwLDB4MDAsMHhjMiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDFlLDB4MDIsMHgwMCwweDAzLDB4MWUsMHgwMywweDAwLAotMHhmOCwweGZmLDB4NjAsMHgxNCwweDAwLDB4MTYsMHgwMiwweDAwLDB4MDMsMHgxNiwweDAyLDB4MDAsMHgwNiwweDAwLDB4NDAsMHgxMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4ODQsMHgyNCwweDAwLDB4MDAsMHg4MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGViLDB4ZmYsMHg0MCwweDE0LDB4MDEsMHgwMCwweDA4LDB4MjUsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIxLDB4MTAsMHgwMCwweDAxLAotMHgwMCwweDAwLDB4YTIsMHg5MCwweGNjLDB4NDYsMHgwMCwweDA4LDB4MDAsMHgxNiwweDAyLDB4MDAsMHgwMCwweDAwLDB4YzIsMHg5MCwKLTB4Y2MsMHg0NiwweDAwLDB4MDgsMHgwMCwweDE2LDB4MDIsMHgwMCwweDAwLDB4MDAsMHg4NywweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDE0LDB4MDAsMHhlMCwweDEwLDB4MjEsMHgxMCwweDgwLDB4MDAsMHgwMCwweDAwLDB4YTQsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDFlLDB4MDQsMHgwMCwweDAzLDB4MWUsMHgwMywweDAwLDB4MDksMHgwMCwweDYwLDB4MTAsMHgyMSwweDMwLDB4YTAsMHgwMCwKLTB4MDAsMHgzZSwweDA3LDB4MDAsMHgwMywweDNlLDB4MDcsMHgwMCwweDBiLDB4MDAsMHhlMywweDEwLDB4MDEsMHgwMCwweGM2LDB4MjQsCi0weDAwLDB4MDAsMHhjMywweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmYiwweGZmLDB4NjAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NDIsMHgyNCwweDAwLDB4MDAsMHg0NywweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmMCwweGZmLDB4ZTAsMHgxNCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMSwweDEwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGUwLDB4ZmYsMHhiZCwweDI3LDB4MTQsMHgwMCwweGIxLDB4YWYsMHgxMCwweDAwLDB4YjAsMHhhZiwweDE4LDB4MDAsMHhiZiwweGFmLAotMHgyMSwweDgwLDB4ODAsMHgwMCwweDFkLDB4MDAsMHg4MCwweDEwLDB4MjEsMHg4OCwweGEwLDB4MDAsMHhiOCwweDQ2LDB4MDAsMHgwYywKLTB4MjEsMHgyMCwweDAwLDB4MDIsMHgyMSwweDgwLDB4MDIsMHgwMiwweDAwLDB4MDAsMHgwMiwweDgyLDB4MjEsMHgyOCwweDIwLDB4MDIsCi0weDIxLDB4MjAsMHgwMCwweDAyLDB4MjIsMHgwMCwweDQwLDB4MTAsMHgyMSwweDE4LDB4MDAsMHgwMCwweGRjLDB4NDYsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA1LDB4MDAsMHg0MCwweDEwLDB4MjEsMHgxOCwweDQwLDB4MDAsMHgwMCwweDAwLDB4NDIsMHg4MCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYSwweDAwLDB4NDAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weGE4LDB4OTYsMHg0MywweGFjLDB4MjEsMHgxOCwweDAwLDB4MDIsMHgxOCwweDAwLDB4YmYsMHg4ZiwweDE0LDB4MDAsMHhiMSwweDhmLAotMHgxMCwweDAwLDB4YjAsMHg4ZiwweDIxLDB4MTAsMHg2MCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMCwweDAwLDB4YmQsMHgyNywKLTB4MDAsMHgwMCwweDYwLDB4YTAsMHgwZCwweDQ3LDB4MDAsMHgwOCwweDAxLDB4MDAsMHg2MywweDI0LDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weGE4LDB4OTYsMHg1MCwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmMywweGZmLDB4MDAsMHgxMiwweDIxLDB4MTgsMHgwMCwweDAwLAotMHhiOCwweDQ2LDB4MDAsMHgwYywweDIxLDB4MjAsMHgwMCwweDAyLDB4MjEsMHg4MCwweDAyLDB4MDIsMHgwMCwweDAwLDB4MDIsMHg4MiwKLTB4MjEsMHgyOCwweDIwLDB4MDIsMHgyMSwweDIwLDB4MDAsMHgwMiwweGUwLDB4ZmYsMHg0MCwweDE0LDB4MjEsMHgxOCwweDAwLDB4MDAsCi0weDE4LDB4MDAsMHhiZiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwweDAyLDB4ODAsMHgwMiwweDNjLAotMHhhOCwweDk2LDB4NDAsMHhhYywweDIwLDB4MDAsMHhiZCwweDI3LDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4NjAsMHgwMCwKLTB4ZTAsMHhmZiwweGJkLDB4MjcsMHgxOCwweDAwLDB4YjIsMHhhZiwweDE0LDB4MDAsMHhiMSwweGFmLDB4MWMsMHgwMCwweGJmLDB4YWYsCi0weDEwLDB4MDAsMHhiMCwweGFmLDB4MDAsMHgwMCwweDkwLDB4OGMsMHgyMSwweDkwLDB4ODAsMHgwMCwweDIxLDB4ODgsMHhhMCwweDAwLAotMHgyMSwweDE4LDB4MDAsMHgwMCwweDBmLDB4MDAsMHgwMCwweDEyLDB4MjEsMHgyMCwweDAwLDB4MDIsMHhiOCwweDQ2LDB4MDAsMHgwYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMSwweDgwLDB4MDIsMHgwMiwweDAwLDB4MDAsMHgwMiwweDgyLDB4MjEsMHgyOCwweDIwLDB4MDIsCi0weDIxLDB4MjAsMHgwMCwweDAyLDB4MDcsMHgwMCwweDQwLDB4MTAsMHgyMSwweDE4LDB4MDAsMHgwMCwweGRjLDB4NDYsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDIxLDB4MTgsMHg0MCwweDAwLDB4MDksMHgwMCwweDQwLDB4MTQsMHgwMCwweDAwLDB4NDIsMHhhZSwKLTB4MjEsMHgxOCwweDAwLDB4MDIsMHgxYywweDAwLDB4YmYsMHg4ZiwweDE4LDB4MDAsMHhiMiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsCi0weDEwLDB4MDAsMHhiMCwweDhmLDB4MjEsMHgxMCwweDYwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIwLDB4MDAsMHhiZCwweDI3LAotMHgwMCwweDAwLDB4NDIsMHg4MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZjUsMHhmZiwweDQwLDB4MTAsMHgwMSwweDAwLDB4NjQsMHgyNCwKLTB4MDAsMHgwMCwweDYwLDB4YTAsMHg0NiwweDQ3LDB4MDAsMHgwOCwweDAwLDB4MDAsMHg0NCwweGFlLDB4ZDgsMHhmZiwweGJkLDB4MjcsCi0weDE0LDB4MDAsMHhiMSwweGFmLDB4MjEsMHg4OCwweDgwLDB4MDAsMHgyMSwweDIwLDB4YTAsMHgwMCwweDFjLDB4MDAsMHhiMywweGFmLAotMHgxOCwweDAwLDB4YjIsMHhhZiwweDIwLDB4MDAsMHhiZiwweGFmLDB4MTAsMHgwMCwweGIwLDB4YWYsMHg4MSwweDQ2LDB4MDAsMHgwYywKLTB4MjEsMHg5OCwweGEwLDB4MDAsMHgyMSwweDkwLDB4NDAsMHgwMCwweDA4LDB4MDAsMHg0MCwweDE2LDB4MjEsMHgxMCwweDIwLDB4MDIsCi0weDIwLDB4MDAsMHhiZiwweDhmLDB4MWMsMHgwMCwweGIzLDB4OGYsMHgxOCwweDAwLDB4YjIsMHg4ZiwweDE0LDB4MDAsMHhiMSwweDhmLAotMHgxMCwweDAwLDB4YjAsMHg4ZiwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjgsMHgwMCwweGJkLDB4MjcsMHg4MSwweDQ2LDB4MDAsMHgwYywKLTB4MjEsMHgyMCwweDIwLDB4MDIsMHgyMSwweDgwLDB4NDAsMHgwMCwweDJhLDB4MTAsMHg1MiwweDAwLDB4MGEsMHgwMCwweDQwLDB4MTQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MjEsMHgyMCwweDIwLDB4MDIsMHgyMSwweDI4LDB4NjAsMHgwMiwweDIxLDB4MzAsMHg0MCwweDAyLAotMHhkNCwweDQ1LDB4MDAsMHgwYywweGZmLDB4ZmYsMHgxMCwweDI2LDB4MGIsMHgwMCwweDQwLDB4MTAsMHgyYSwweDE4LDB4MTIsMHgwMiwKLTB4ZjgsMHhmZiwweDYwLDB4MTAsMHgwMSwweDAwLDB4MzEsMHgyNiwweDIwLDB4MDAsMHhiZiwweDhmLDB4MWMsMHgwMCwweGIzLDB4OGYsCi0weDE4LDB4MDAsMHhiMiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwweDIxLDB4MTAsMHgwMCwweDAwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDI4LDB4MDAsMHhiZCwweDI3LDB4NjIsMHg0NywweDAwLDB4MDgsMHgyMSwweDEwLDB4MjAsMHgwMiwKLTB4MDEsMHg4MCwweDAyLDB4M2MsMHhjMCwweGZmLDB4YmQsMHgyNywweDA4LDB4MWUsMHg0NCwweDI0LDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDI4LDB4MDAsMHhiNCwweGFmLDB4MDIsMHg4MCwweDAzLDB4M2MsMHgyNSwweGIwLDB4MTQsMHgzYywweDE4LDB4MDMsMHg0MiwweDM0LAotMHgzOCwweDAwLDB4YmUsMHhhZiwweDM0LDB4MDAsMHhiNywweGFmLDB4MzAsMHgwMCwweGI2LDB4YWYsMHgyYywweDAwLDB4YjUsMHhhZiwKLTB4MjQsMHgwMCwweGIzLDB4YWYsMHgzYywweDAwLDB4YmYsMHhhZiwweDIwLDB4MDAsMHhiMiwweGFmLDB4MWMsMHgwMCwweGIxLDB4YWYsCi0weDE4LDB4MDAsMHhiMCwweGFmLDB4NjgsMHgxNSwweDczLDB4MjQsMHgwMCwweDAwLDB4NDQsMHhhYywweDAyLDB4ODAsMHgxNiwweDNjLAotMHgwMiwweDgwLDB4MTUsMHgzYywweGM0LDB4MDIsMHg5ZSwweDM2LDB4NjQsMHgwMywweDk3LDB4MzYsMHgwMSwweDgwLDB4MDQsMHgzYywKLTB4MDgsMHgxZSwweDgyLDB4MjQsMHgxOCwweDAzLDB4ODMsMHgzNiwweDAwLDB4MDAsMHg2MiwweGFjLDB4YTAsMHgwMiwweDg3LDB4MzYsCi0weDAwLDB4MDAsMHhlNCwweDhjLDB4ZDgsMHg2MywweDYzLDB4OGUsMHhmZiwweDBmLDB4MDIsMHgzYywweGZmLDB4ZmYsMHg0NiwweDM0LAotMHgyNCwweDgwLDB4ODYsMHgwMCwweDAxLDB4MDAsMHgwNSwweDNjLDB4MDEsMHgwMCwweDYzLDB4MjQsMHgyYiwweDEwLDB4YjAsMHgwMCwKLTB4MDcsMHgwMCwweDQwLDB4MTAsMHhkOCwweDYzLDB4NjMsMHhhZSwweGE0LDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDUxLDB4OGMsCi0weDAwLDB4YjAsMHgwMywweDNjLDB4MjUsMHg4MCwweDAzLDB4MDIsMHgwMCwweDAwLDB4MTEsMHhhZSwweDAwLDB4MDAsMHhlMCwweGFjLAotMHhiMCwweDAyLDB4ODQsMHgzNiwweDAwLDB4MDAsMHg4MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDgwLDB4NDYsMHgwMCwKLTB4MmIsMHgxOCwweGIwLDB4MDAsMHgwOCwweDAwLDB4NjAsMHgxMCwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHhiMCwweDAyLDB4M2MsCi0weDI1LDB4ODAsMHgwMiwweDAyLDB4MDAsMHgwMCwweDExLDB4OGUsMHhiNCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg1MSwweGFjLAotMHgwMCwweDAwLDB4ODAsMHhhYywweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDUwLDB4OGMsMHhmZiwweDAwLDB4MDgsMHgzYywKLTB4ZmYsMHhmZiwweDAyLDB4MzUsMHgyYiwweDEwLDB4NTAsMHgwMCwweDQ3LDB4MDAsMHg0MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHg4MiwweDhlLDB4MDAsMHhmZiwweDA2LDB4M2MsMHhhYywweDAyLDB4ODQsMHgzNiwweDAxLDB4MDAsMHg0NSwweDI0LAotMHhiYywweDAyLDB4ODMsMHgzNiwweGZmLDB4MDAsMHhjMiwweDM0LDB4MDAsMHhmZCwweDA3LDB4M2MsMHgwMCwweDAwLDB4ODUsMHhhYywKLTB4MDAsMHgwMCwweDcwLDB4YWMsMHgyNCwweDE4LDB4MDIsMHgwMiwweDA3LDB4MDAsMHhlMiwweDM0LDB4MDAsMHgwMCwweDg1LDB4OGMsCi0weDUyLDB4MDMsMHg2MiwweDEwLDB4MjUsMHhiMCwweDEyLDB4M2MsMHgyYiwweDEwLDB4NDMsMHgwMCwweGEyLDB4MDAsMHg0MCwweDE0LAotMHhhNCwweDAwLDB4ZTIsMHgzNCwweDAwLDB4ZjgsMHgwNCwweDNjLDB4MTUsMHgwMCwweDgyLDB4MzQsMHg1NywweDAzLDB4NjIsMHgxMCwKLTB4MmIsMHgxMCwweDQzLDB4MDAsMHhjOCwweDAwLDB4NDAsMHgxNCwweDAwLDB4ZjksMHgwNSwweDNjLDB4MDAsMHhmMCwweDA1LDB4M2MsCi0weDIwLDB4MDAsMHhhMiwweDM0LDB4NjcsMHgwMywweDYyLDB4MTAsMHgyYiwweDEwLDB4NDMsMHgwMCwweDIwLDB4MDEsMHg0MCwweDE0LAotMHgxMCwweDAwLDB4ODIsMHgzNCwweDcwLDB4MDMsMHg2NSwweDEwLDB4MmIsMHgxMCwweGEzLDB4MDAsMHhjOCwweDAxLDB4NDAsMHgxNCwKLTB4MDIsMHgwMCwweGEyLDB4MzQsMHgwMCwweGQwLDB4MDIsMHgzYywweDJhLDB4MDIsMHg2MiwweDEwLDB4MmIsMHgxMCwweDQzLDB4MDAsCi0weGFmLDB4MDIsMHg0MCwweDE0LDB4MDAsMHhlMCwweDAyLDB4M2MsMHgwMCwweGMwLDB4MDIsMHgzYywweGJiLDB4MDMsMHg2MiwweDEwLAotMHhmZiwweDAwLDB4MDMsMHgzYywweDAwLDB4ZjAsMHgwMiwweDNjLDB4MjQsMHgzMCwweDAyLDB4MDIsMHgxOCwweDAwLDB4YzIsMHgxMCwKLTB4MDIsMHgxZCwweDEwLDB4MDAsMHgwMCwweDcwLDB4MDUsMHgzYywweDI0LDB4MTAsMHgwNSwweDAyLDB4MDIsMHg0ZiwweDAyLDB4MDAsCi0weDBmLDB4MDAsMHgwMiwweDNjLDB4ZmYsMHhmZiwweDQyLDB4MzQsMHgwMCwweDUwLDB4MDcsMHgzYywweGZmLDB4MDAsMHg2OCwweDMwLAotMHhmZiwweDAwLDB4MDQsMHgzMiwweDk2LDB4MDEsMHhjNywweDEwLDB4MjQsMHgxOCwweDAyLDB4MDIsMHgyYiwweDEwLDB4ZTYsMHgwMCwKLTB4OGEsMHgwMSwweDQwLDB4MTQsMHgwMCwweDgwLDB4MDIsMHgzYywweDAwLDB4MjAsMHgwMiwweDNjLDB4MWEsMHgwMywweGMyLDB4MTAsCi0weDJiLDB4MTAsMHg0NiwweDAwLDB4ODIsMHgwMiwweDQwLDB4MTQsMHgwMCwweDMwLDB4MDIsMHgzYywweDE3LDB4MDMsMHhjMCwweDEwLAotMHg4MCwweDEwLDB4MDgsMHgwMCwweDAwLDB4MTAsMHgwMiwweDNjLDB4MTQsMHgwMywweGMyLDB4MTAsMHg4MCwweDEwLDB4MDgsMHgwMCwKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsCi0weDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsMHgwMCwweDAwLDB4ZTIsMHg5MiwweDI1LDB4YjAsMHgwNywweDNjLAotMHhjOCwweDdkLDB4YzIsMHhhMiwweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMCwweDYwLDB4ODEsMHg0MCwKLTB4YzgsMHg3ZCwweGMyLDB4OTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg0MiwweDMwLDB4NGUsMHgwMCwweDQwLDB4MTAsCi0weDAyLDB4ODAsMHgwMywweDNjLDB4MDAsMHg0MCwweDYyLDB4OGUsMHhmMCwweGZmLDB4MDMsMHgyNCwweGQ3LDB4NDIsMHg2MCwweGEyLAotMHgyNCwweDEwLDB4NDMsMHgwMCwweDAxLDB4MDAsMHg0MiwweDM0LDB4MDAsMHg0MCwweDYyLDB4YWUsMHhjOCwweDdkLDB4YzIsMHg5MiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDAwLDB4NDIsMHgzMCwweDNkLDB4MDAsMHg0MCwweDEwLDB4MGYsMHhmZiwweDAzLDB4MjQsCi0weDAwLDB4NDAsMHg2MiwweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDEwLDB4NDMsMHgwMCwweDEwLDB4MDAsMHg0MiwweDM0LAotMHgwMCwweDQwLDB4NjIsMHhhZSwweGM4LDB4N2QsMHhjMiwweDkyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4NDIsMHgzMCwKLTB4MzAsMHgwMCwweDQwLDB4MTAsMHhmZiwweGYwLDB4MDMsMHgyNCwweDAwLDB4NDAsMHg2MiwweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDI0LDB4MTAsMHg0MywweDAwLDB4MDAsMHgwMSwweDQyLDB4MzQsMHgyNSwweGIwLDB4MDUsMHgzYywweDAwLDB4NDAsMHg2MiwweGFlLAotMHg0YywweDAwLDB4YTMsMHgzNCwweDAwLDB4MDAsMHg2MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMywweDAwLDB4NDIsMHgzMCwKLTB4MDUsMHgwMCwweDQwLDB4MTQsMHhmZiwweGZmLDB4MDIsMHgzYywweDAwLDB4NDAsMHg2MywweDhlLDB4ZmYsMHgwZiwweDQyLDB4MzQsCi0weDI0LDB4MTgsMHg2MiwweDAwLDB4MDAsMHg0MCwweDYzLDB4YWUsMHgwMCwweDdiLDB4YTQsMHg4ZSwweDAxLDB4ODAsMHgwNiwweDNjLAotMHgwOCwweDFmLDB4YzIsMHgyNCwweDE4LDB4MDMsMHhhMywweDM0LDB4MDAsMHg3YiwweGE2LDB4MjYsMHgwMCwweDAwLDB4NjIsMHhhYywKLTB4MTAsMHgwMCwweDg2LDB4MTAsMHgwMiwweDgwLDB4MDIsMHgzYywweGJmLDB4MDAsMHhiMiwweDM0LDB4NjgsMHgxNSwweDUxLDB4MjQsCi0weDIxLDB4ODAsMHhjMCwweDAwLDB4MDAsMHgwMCwweDQyLDB4OTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHg0MiwweDJjLAotMHgwOSwweDAwLDB4NDAsMHgxMCwweDAyLDB4ODAsMHgwNywweDNjLDB4OTgsMHg2NSwweDI0LDB4OGUsMHg4YiwweDA3LDB4MDAsMHgwYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDdiLDB4YTIsMHg4ZSwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZjUsMHhmZiwweDUwLDB4MTQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDA3LDB4M2MsMHgwOCwweDA4LDB4ZTQsMHgyNCwweDIxLDB4MjgsMHgwMCwweDAwLAotMHgyMSwweDMwLDB4MDAsMHgwMCwweDMxLDB4MWMsMHgwMCwweDBjLDB4MjEsMHgzOCwweDAwLDB4MDAsMHg5YSwweDQ3LDB4MDAsMHgwOCwKLTB4MDEsMHg4MCwweDA0LDB4M2MsMHgwMCwweDQwLDB4NjIsMHg4ZSwweDMwLDB4NDgsMHgwMCwweDA4LDB4MjQsMHgxMCwweDQzLDB4MDAsCi0weDAwLDB4NDAsMHg2MiwweDhlLDB4MDQsMHg0MywweDY0LDB4OTIsMHgyNCwweDEwLDB4NDMsMHgwMCwweDAwLDB4NDAsMHg2MiwweGFlLAotMHgyNywweDQ4LDB4MDAsMHgwOCwweDA0LDB4NDMsMHg2NCwweGFlLDB4NjgsMHgxNSwweDY2LDB4MjQsMHgwMCwweDQwLDB4YzIsMHg4YywKLTB4ZDcsMHg0MiwweGM0LDB4OTAsMHhmMCwweGZmLDB4MDMsMHgyNCwweDI0LDB4MTAsMHg0MywweDAwLDB4YjMsMHhmZiwweDgwLDB4MTQsCi0weDAwLDB4NDAsMHhjMiwweGFjLDB4MWMsMHgwMCwweDA0LDB4MjQsMHg1OCwweDBjLDB4ZTUsMHgzNCwweDUwLDB4MGMsMHhlMywweDM0LAotMHgwMSwweDAwLDB4MDIsMHgyNCwweGQ3LDB4NDIsMHhjMiwweGEwLDB4MDAsMHgwMCwweDY0LDB4YTAsMHgwMCwweDAwLDB4YTQsMHhhMCwKLTB4MWQsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweGIyLDB4MDIsMHg2MiwweDEwLDB4MmIsMHgxMCwweDQzLDB4MDAsCi0weDNmLDB4MDAsMHg0MCwweDE0LDB4YWYsMHgwMCwweGUyLDB4MzQsMHgyMCwweDAwLDB4ZTIsMHgzNCwweGMwLDB4MDIsMHg2MiwweDEwLAotMHgyYiwweDEwLDB4NDMsMHgwMCwweGUzLDB4MDAsMHg0MCwweDE0LDB4MjksMHgwMCwweGUyLDB4MzQsMHgxNSwweDAwLDB4ZTIsMHgzNCwKLTB4MGMsMHgwMywweDYyLDB4MTAsMHgyYiwweDEwLDB4NDMsMHgwMCwweDlkLDB4MDEsMHg0MCwweDE0LDB4MTcsMHgwMCwweGUyLDB4MzQsCi0weDA5LDB4MDAsMHhlMiwweDM0LDB4ZDgsMHgwMywweDYyLDB4MTAsMHgyYiwweDEwLDB4NjIsMHgwMCwweDgxLDB4MDIsMHg0MCwweDE0LAotMHgxNCwweDAwLDB4ZTIsMHgzNCwweDY0LDB4ZmYsMHg2MiwweDE0LDB4MDAsMHhmMCwweDAyLDB4M2MsMHhmZiwweDAwLDB4MDcsMHgzYywKLTB4MDAsMHhmZiwweGU3LDB4MzQsMHgyNCwweDEwLDB4MDcsMHgwMiwweDdhLDB4ZmYsMHg0MCwweDEwLDB4YzAsMHgwMiwweDgyLDB4MzYsCi0weDA0LDB4NDMsMHg2NCwweDkyLDB4ZmYsMHgwMCwweDAyLDB4M2MsMHgyNCwweDEwLDB4MDIsMHgwMiwweDAwLDB4ZmYsMHgwMywweDMyLAotMHgwMiwweDE0LDB4MDIsMHgwMCwweDAyLDB4MWEsMHgwMywweDAwLDB4ZmIsMHhmZiwweDQ1LDB4MjQsMHgxYywweDQzLDB4NjIsMHhhMiwKLTB4MDAsMHgwMSwweDg0LDB4MzQsMHhmYiwweGZmLDB4NjYsMHgyNCwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDQsMHg0MywweDY0LDB4YWUsCi0weDFkLDB4NDMsMHg2NSwweGEyLDB4MWYsMHg0MywweDY2LDB4YTIsMHgxZSwweDQzLDB4NjMsMHhhMiwweDAwLDB4MDAsMHg0MCwweGFjLAotMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDUsMHgwMCwweGEyLDB4MzQsMHg5MSwweDAyLDB4NjIsMHgxMCwKLTB4MmIsMHgxMCwweDQzLDB4MDAsMHg4ZSwweDAwLDB4NDAsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZGUsMHgwMiwweDY1LDB4MTAsCi0weDJiLDB4MTAsMHhhMywweDAwLDB4MzIsMHgwMSwweDQwLDB4MTQsMHgwMiwweDAwLDB4YTIsMHgzNCwweDE3LDB4MDAsMHg4MiwweDM0LAotMHg2MSwweDA0LDB4NjIsMHgxMCwweDJiLDB4MTAsMHg2MiwweDAwLDB4YTksMHgwMywweDQwLDB4MTQsMHgxOCwweDAwLDB4ODIsMHgzNCwKLTB4M2QsMHhmZiwweDYyLDB4MTQsMHgwMCwweGYwLDB4MDIsMHgzYywweDc0LDB4MGIsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhhOCwweDAyLDB4NjIsMHgxMCwweDJiLDB4MTAsMHg0MywweDAwLDB4OTUsMHgwMCwweDQwLDB4MTQsMHgwYywweDAwLDB4YzIsMHgzNCwKLTB4YWEsMHgwMCwweGUyLDB4MzQsMHhkYywweDAyLDB4NjIsMHgxMCwweDJiLDB4MTAsMHg0MywweDAwLDB4ZDksMHgwMCwweDQwLDB4MTQsCi0weGFjLDB4MDAsMHhlMiwweDM0LDB4YTYsMHgwMCwweGUyLDB4MzQsMHgxYywweDA0LDB4NjIsMHgxMCwweDJiLDB4MTAsMHg2MiwweDAwLAotMHg2OSwweDAzLDB4NDAsMHgxNCwweGE3LDB4MDAsMHhlMiwweDM0LDB4MjcsMHhmZiwweDYyLDB4MTQsMHgwMCwweGYwLDB4MDIsMHgzYywKLTB4MDAsMHhmZiwweDAyLDB4MzIsMHhmZiwweDAwLDB4MDQsMHgzYywweDAyLDB4OGEsMHgwMiwweDAwLDB4MjQsMHgxOCwweDA0LDB4MDIsCi0weDAxLDB4MDAsMHgwMiwweDI0LDB4YTYsMHgwNCwweDIyLDB4MTIsMHgwMiwweDFjLDB4MDMsMHgwMCwweDAyLDB4MDAsMHgwMiwweDI0LAotMHhjOSwweDA0LDB4MjIsMHgxMiwweDAzLDB4MDAsMHgwMiwweDI0LDB4ZGYsMHgwNCwweDIyLDB4MTIsMHgwNCwweDAwLDB4MDIsMHgyNCwKLTB4ZDEsMHgwNCwweDIyLDB4MTIsMHgwOCwweDAwLDB4MDIsMHgyNCwweDJlLDB4MDUsMHgyMiwweDEyLDB4MDksMHgwMCwweDAyLDB4MjQsCi0weDFlLDB4MDUsMHgyMiwweDEyLDB4MGEsMHgwMCwweDAyLDB4MjQsMHgwZSwweDA1LDB4MjIsMHgxMiwweDBiLDB4MDAsMHgwMiwweDI0LAotMHhmZSwweDA0LDB4MjIsMHgxMiwweDBjLDB4MDAsMHgwMiwweDI0LDB4NWUsMHgwNSwweDIyLDB4MTIsMHgwZCwweDAwLDB4MDIsMHgyNCwKLTB4NGUsMHgwNSwweDIyLDB4MTIsMHgwZSwweDAwLDB4MDIsMHgyNCwweDNlLDB4MDUsMHgyMiwweDEyLDB4MGYsMHgwMCwweDAyLDB4MjQsCi0weDJlLDB4MDUsMHgyMiwweDEyLDB4MTAsMHgwMCwweDAyLDB4MjQsMHgyMiwweGZmLDB4MjIsMHgxNiwweGMwLDB4MDIsMHg4MiwweDM2LAotMHhjMCwweDEwLDB4MDMsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLDB4ODAsMHgxMCwweDAyLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwKLTB4ODAsMHgxMCwweDAyLDB4MDAsMHgyMSwweDEwLDB4NTMsMHgwMCwweDRjLDB4NTEsMHg0MywweDk0LDB4NDgsMHg1MSwweDQ0LDB4OTQsCi0weDI1LDB4YjAsMHgwNiwweDNjLDB4MDAsMHgxYywweDAzLDB4MDAsMHgyMSwweDIwLDB4ODMsMHgwMCwweDAwLDB4MDAsMHhjNCwweGFmLAotMHg1OCwweDUxLDB4NDUsMHg4YywweDU0LDB4NTEsMHg0MywweDhjLDB4NTAsMHg1MSwweDQ0LDB4OTQsMHhjOCwweDAyLDB4YzYsMHgzNCwKLTB4MjEsMHgxOCwweDY1LDB4MDAsMHgwMCwweDFjLDB4MDMsMHgwMCwweDIxLDB4MjAsMHg4MywweDAwLDB4YzAsMHgwMiwweDgyLDB4MzYsCi0weDAwLDB4MDAsMHhjNCwweGFjLDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg2NiwweDAyLDB4NjIsMHgxMCwweDJiLDB4MTAsMHg0MywweDAwLDB4YmYsMHgwMCwweDQwLDB4MTQsMHgxMiwweDAwLDB4ODIsMHgzNCwKLTB4MDAsMHhmMSwweDA0LDB4M2MsMHgwMSwweDAwLDB4ODIsMHgzNCwweGMxLDB4MDIsMHg2MiwweDEwLDB4MmIsMHgxMCwweDQzLDB4MDAsCi0weGI3LDB4MDEsMHg0MCwweDE0LDB4MDIsMHgwMCwweDgyLDB4MzQsMHhlMywweGZlLDB4NjQsMHgxNCwweDAwLDB4ZjAsMHgwMiwweDNjLAotMHhmZiwweDAwLDB4MDQsMHgzYywweDAwLDB4ZmYsMHg4NCwweDM0LDB4MjQsMHgxMCwweDA0LDB4MDIsMHgwMiwweDhhLDB4MDIsMHgwMCwKLTB4ODAsMHgxYSwweDExLDB4MDAsMHgwMCwweGY0LDB4NjMsMHgyNCwweDk0LDB4MDAsMHg4MiwweDM2LDB4MDAsMHgwMCwweDUxLDB4YTQsCi0weDI2LDB4YjAsMHgwNCwweDNjLDB4NDIsMHg4OSwweDAzLDB4MDAsMHg5OCwweDAwLDB4ODYsMHgzNiwweGZmLDB4MDEsMHgwMiwweDI0LAotMHgxMCwweDAwLDB4MDMsMHgyNCwweDlhLDB4MDAsMHg4NSwweDM2LDB4MDAsMHgwMCwweGEyLDB4YTQsMHg3YywweDAwLDB4ODksMHgzNCwKLTB4MDAsMHgwMCwweGMzLDB4YTQsMHgwMSwweDAwLDB4MDIsMHgyNCwweDA0LDB4MDAsMHgwMywweDI0LDB4OTYsMHgwMCwweDg3LDB4MzYsCi0weDdhLDB4MDAsMHg4NCwweDM0LDB4YjAsMHgwMywweDg4LDB4MzYsMHgyNSwweGIwLDB4MDYsMHgzYywweDAwLDB4MDAsMHhlMiwweGE0LAotMHg0NCwweDAwLDB4YzYsMHgzNCwweDAwLDB4MDAsMHg4MywweGEwLDB4MDAsMHgwMCwweDExLDB4YWQsMHgwMCwweDAwLDB4MzEsMHhhNSwKLTB4MDAsMHgwMCwweGMzLDB4OTQsMHhmZiwweGZkLDB4MDIsMHgyNCwweDI0LDB4MTgsMHg2MiwweDAwLDB4MDAsMHgwMCwweGMzLDB4YTQsCi0weDAwLDB4MDAsMHhjMiwweDk0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4NDIsMHgzNCwweDAwLDB4MDAsMHhjMiwweGE0LAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4NjUsMHgwMSwweDY3LDB4MTAsMHgyYiwweDEwLDB4ZTMsMHgwMCwweGM1LDB4MDAsMHg0MCwweDE0LDB4MDIsMHgwMCwweGUyLDB4MzQsCi0weDA3LDB4MDAsMHhhMiwweDM0LDB4ZmMsMHgwMiwweDYyLDB4MTAsMHgyYiwweDEwLDB4NjIsMHgwMCwweGE5LDB4MDEsMHg0MCwweDE0LAotMHgyMCwweDAwLDB4YTIsMHgzNCwweGIwLDB4ZmUsMHg2MiwweDE0LDB4MDAsMHhmMCwweDAyLDB4M2MsMHhmZiwweDAwLDB4MDMsMHgzYywKLTB4MDAsMHhmZiwweDYzLDB4MzQsMHgyNCwweDEwLDB4MDMsMHgwMiwweDAyLDB4M2EsMHgwMiwweDAwLDB4ODAsMHgwNCwweGUwLDB4MTAsCi0weDAyLDB4ODAsMHgwNCwweDNjLDB4MDUsMHgwMCwweDAyLDB4MjQsMHhjMiwweGZlLDB4ZTIsMHgxNCwweGMwLDB4MDIsMHg4MiwweDM2LAotMHgwMiwweDgwLDB4MDYsMHgzYywweDhmLDB4N2QsMHhjMiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzIsMHhhZiwKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDJlLDB4MDIsMHg2MiwweDEwLDB4MmIsMHgxMCwweDQzLDB4MDAsMHg5OCwweDAwLDB4NDAsMHgxNCwweDBlLDB4MDAsMHhjMiwweDM0LAotMHgwMSwweDAwLDB4YzIsMHgzNCwweGFiLDB4MDMsMHg2MiwweDEwLDB4MmIsMHgxMCwweDQzLDB4MDAsMHg0OCwweDAxLDB4NDAsMHgxNCwKLTB4MDAsMHhmZiwweDAyLDB4M2MsMHg5NCwweGZlLDB4NjYsMHgxNCwweDAwLDB4ZjAsMHgwMiwweDNjLDB4NWIsMHg0ZSwweDAwLDB4MGMsCi0weDIxLDB4MjAsMHgwMCwweDAwLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDRjLDB4MDIsMHg2MiwweDEwLDB4MmIsMHgxMCwweDQzLDB4MDAsMHhhNiwweDAwLDB4NDAsMHgxNCwKLTB4YTEsMHgwMCwweGUyLDB4MzQsMHgyMiwweDAwLDB4ZTIsMHgzNCwweGJkLDB4MDIsMHg2MiwweDEwLDB4MmIsMHgxMCwweDYyLDB4MDAsCi0weDg4LDB4MDEsMHg0MCwweDE0LDB4MDAsMHgyMCwweDAyLDB4M2MsMHgyOCwweDAwLDB4ZTIsMHgzNCwweDgyLDB4ZmUsMHg2MiwweDE0LAotMHgwMCwweGYwLDB4MDIsMHgzYywweDBmLDB4MDAsMHgwNCwweDNjLDB4ZmYsMHhmZiwweDg1LDB4MzQsMHg2MCwweDAwLDB4MDYsMHgyNCwKLTB4YmEsMHg0NCwweDAwLDB4MGMsMHgyNCwweDAwLDB4MDQsMHgyNCwweDg0LDB4MGEsMHgwMCwweDBjLDB4ZTgsMHgwMywweDA0LDB4MjQsCi0weDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHgwZiwweDAwLDB4MDYsMHgzYywweDI0LDB4MDAsMHgwNCwweDI0LDB4ZGQsMHg0NCwweDAwLDB4MGMsMHhmZiwweGZmLDB4YzUsMHgzNCwKLTB4MWYsMHgwMCwweDUxLDB4MzAsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsCi0weGIzLDB4MGEsMHgwMCwweDBjLDB4NjQsMHgwMCwweDA0LDB4MjQsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHhkMSwweGEzLAotMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAyLDB4YzIsMHgxMCwKLTB4MmIsMHgxMCwweDQ2LDB4MDAsMHgwMSwweDAxLDB4NDAsMHgxNCwweDAwLDB4YTAsMHgwMiwweDNjLDB4MDAsMHg2MCwweDAyLDB4M2MsCi0weDA0LDB4MDAsMHhjMiwweDEwLDB4ODAsMHgxMCwweDA4LDB4MDAsMHg3YSwweGZlLDB4YzUsMHgxNCwweGMwLDB4MDIsMHg4MiwweDM2LAotMHg4MCwweDEwLDB4MDgsMHgwMCwweDIxLDB4MTAsMHg0OCwweDAwLDB4MjEsMHgxMCwweDUzLDB4MDAsMHgyMSwweDEwLDB4NDksMHgwMCwKLTB4YzEsMHg0MywweDQ0LDB4YTAsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHgwMywweDYyLDB4MTAsMHgyYiwweDEwLDB4NjIsMHgwMCwweGI2LDB4MDIsMHg0MCwweDE0LAotMHhhZCwweDAwLDB4ZTIsMHgzNCwweGM3LDB4MDMsMHg2MiwweDEwLDB4YWUsMHgwMCwweGUyLDB4MzQsMHg0ZSwweGZlLDB4NjIsMHgxNCwKLTB4MDAsMHhmMCwweDAyLDB4M2MsMHhmZiwweDAwLDB4MDIsMHgzYywweDI0LDB4MjAsMHgwMiwweDAyLDB4MDAsMHhmZiwweDA1LDB4MzIsCi0weDAyLDB4MjQsMHgwNCwweDAwLDB4NjksMHg0ZiwweDAwLDB4MGMsMHgwMiwweDJhLDB4MDUsMHgwMCwweDAwLDB4MDAsMHhjMiwweGEzLAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4NGIsMHgwMiwweDYyLDB4MTAsMHgyYiwweDEwLDB4NjIsMHgwMCwweDE3LDB4MDEsMHg0MCwweDE0LDB4MDMsMHgwMCwweGEyLDB4MzQsCi0weDgyLDB4MDMsMHg2MiwweDEwLDB4MDgsMHgwMCwweGEyLDB4MzQsMHgzYiwweGZlLDB4NjIsMHgxNCwweDAwLDB4ZjAsMHgwMiwweDNjLAotMHgwMCwweGZmLDB4MDIsMHgzMiwweDAyLDB4ODIsMHgwMiwweDAwLDB4Y2MsMHgwMiwweDgzLDB4MzYsMHgwMCwweDAwLDB4NzAsMHhhYywKLTB4MTIsMHgwNCwweDAwLDB4MTIsMHgwMSwweDAwLDB4MDIsMHgyNCwweDljLDB4MDQsMHgwMiwweDEyLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDdhLDB4NDIsMHgwMCwweDBjLDB4MjEsMHgyMCwweDAwLDB4MDAsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLAotMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NGUsMHgwMiwweDYyLDB4MTAsMHgyYiwweDEwLDB4NjIsMHgwMCwKLTB4ZTQsMHgwMCwweDQwLDB4MTQsMHgwMCwweGZmLDB4MDIsMHgzMiwweDEzLDB4MDAsMHg4MiwweDM0LDB4NGMsMHgwMywweDYyLDB4MTAsCi0weDE0LDB4MDAsMHg4MiwweDM0LDB4MjQsMHhmZSwweDYyLDB4MTQsMHgwMCwweGYwLDB4MDIsMHgzYywweGQzLDB4MGEsMHgwMCwweDBjLAotMHhmZCwweDAwLDB4MDQsMHgyNCwweDEwLDB4MTAsMHgwMywweDNjLDB4YTAsMHgwMCwweDgyLDB4MzYsMHgxMCwweDEwLDB4NjMsMHgzNCwKLTB4MDAsMHhjMCwweDA3LDB4M2MsMHgyNSwweGIwLDB4MDYsMHgzYywweDAwLDB4MDAsMHg0MywweGFjLDB4YTQsMHgwMCwweDg0LDB4MzYsCi0weDAwLDB4YTEsMHhlNywweDM0LDB4YTgsMHgwMCwweGM2LDB4MzQsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg4MCwweGFjLAotMHgwMCwweDAwLDB4YzcsMHhhYywweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4NjAsMHgwMiwweDYyLDB4MTAsMHgyYiwweDEwLDB4NjIsMHgwMCwweGY2LDB4MDAsMHg0MCwweDE0LDB4MDMsMHgwMCwweGEyLDB4MzQsCi0weDRiLDB4MDMsMHg2MiwweDEwLDB4MDQsMHgwMCwweGEyLDB4MzQsMHgwYiwweGZlLDB4NjIsMHgxNCwweDAwLDB4ZjAsMHgwMiwweDNjLAotMHhmNCwweDYzLDB4NjIsMHg5MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMyLDB4YWYsMHhjMCwweDAyLDB4ODIsMHgzNiwKLTB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjEsMHgwMiwweDYyLDB4MTAsCi0weDJiLDB4MTAsMHg2MiwweDAwLDB4ZmUsMHgwMCwweDQwLDB4MTQsMHgwMSwweDAwLDB4MDIsMHgyNCwweDBmLDB4MDAsMHhjMiwweDM0LAotMHg2MywweDAzLDB4NjIsMHgxMCwweDEwLDB4MDAsMHhjMiwweDM0LDB4ZmIsMHhmZCwweDYyLDB4MTQsMHgwMCwweGYwLDB4MDIsMHgzYywKLTB4MDAsMHhmZiwweDAzLDB4MzIsMHgwMCwweGZmLDB4MDIsMHgzNCwweDlkLDB4MDMsMHg2MiwweDEwLDB4YzAsMHgwMiwweDgyLDB4MzYsCi0weDhjLDB4NjUsMHg2MCwweGFlLDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg0NywweDAyLDB4NjIsMHgxMCwweDJiLDB4MTAsMHg2MiwweDAwLDB4MDIsMHgwMSwweDQwLDB4MTQsMHgwMywweDAwLDB4ZTIsMHgzNCwKLTB4OGQsMHgwMywweDYyLDB4MTAsMHgwNCwweDAwLDB4ZTIsMHgzNCwweGViLDB4ZmQsMHg2MiwweDE0LDB4MDAsMHhmMCwweDAyLDB4M2MsCi0weDFlLDB4NTcsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLAotMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OWIsMHgwMSwweDYyLDB4MTAsMHgyYiwweDEwLDB4NDMsMHgwMCwKLTB4Y2YsMHgwMCwweDQwLDB4MTQsMHhhMiwweDAwLDB4ZTIsMHgzNCwweGEwLDB4MDAsMHhlMiwweDM0LDB4ZGUsMHhmZCwweDYyLDB4MTQsCi0weDAwLDB4ZjAsMHgwMiwweDNjLDB4MDAsMHgwZiwweDAyLDB4MzIsMHgwMiwweDIyLDB4MDIsMHgwMCwweDAxLDB4MDAsMHgwMywweDI0LAotMHgzYywweDA0LDB4ODMsMHgxMCwweDAyLDB4MDAsMHgwMiwweDI0LDB4MzQsMHgwNCwweDgyLDB4MTAsMHgwMywweDAwLDB4MDIsMHgyNCwKLTB4NDYsMHgwMywweDgyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGRlLDB4NGYsMHgwMCwweDBjLDB4MjEsMHgyMCwweDAwLDB4MDAsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg0NiwweDAyLDB4NjIsMHgxMCwweDJiLDB4MTAsMHg2MiwweDAwLDB4ZTYsMHhmZCwweDQwLDB4MTQsMHhjMCwweDAyLDB4ODIsMHgzNiwKLTB4MTgsMHgwMCwweGUyLDB4MzQsMHg0NSwweDAzLDB4NjIsMHgxMCwweDE5LDB4MDAsMHhlMiwweDM0LDB4YzYsMHhmZCwweDYyLDB4MTQsCi0weDAwLDB4ZjAsMHgwMiwweDNjLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDk0LDB4MGUsMHg4MywweDM2LAotMHg5YywweDBlLDB4ODIsMHgzNiwweGE0LDB4MGUsMHg4NCwweDM2LDB4YWMsMHgwZSwweDg3LDB4MzYsMHgwMCwweDAwLDB4NjUsMHg4YywKLTB4MDAsMHgwMCwweDQ4LDB4OGMsMHgwMCwweDAwLDB4OGEsMHg4YywweDAwLDB4MDAsMHhlNiwweDhjLDB4MDIsMHg4MCwweDA3LDB4M2MsCi0weDY4LDB4MTUsMHhlZCwweDI0LDB4YjQsMHgwZSwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDcsMHg4YywweDBjLDB4NDAsMHhhMywweDhkLAotMHhmZiwweDAzLDB4MDIsMHgzYywweDEwLDB4NDAsMHhhNCwweDhkLDB4MjQsMHgyOCwweGEyLDB4MDAsMHgyNCwweDMwLDB4YzIsMHgwMCwKLTB4YmMsMHgwZSwweDgyLDB4MzYsMHgwMCwweDAwLDB4NGIsMHg4YywweDAwLDB4ZmMsMHgwMiwweDI0LDB4MDIsMHgyYywweDA1LDB4MDAsCi0weDI0LDB4MTgsMHg2MiwweDAwLDB4MDIsMHgzNCwweDA2LDB4MDAsMHgyNCwweDIwLDB4ODIsMHgwMCwweGM0LDB4MGUsMHg4MiwweDM2LAotMHgyNSwweDE4LDB4NjUsMHgwMCwweDI1LDB4MjAsMHg4NiwweDAwLDB4MDAsMHgwMCwweDQ1LDB4OGMsMHhmZiwweDAzLDB4MDYsMHgzYywKLTB4ZjAsMHhmZiwweDAyLDB4M2MsMHhmZiwweDAzLDB4NDIsMHgzNCwweDI0LDB4MzgsMHhlNiwweDAwLDB4ODIsMHgzOSwweDA3LDB4MDAsCi0weDI0LDB4MjAsMHg4MiwweDAwLDB4MjQsMHg0MCwweDA2LDB4MDEsMHgwOCwweDQwLDB4YTksMHg4ZCwweDI1LDB4MjAsMHg4NywweDAwLAotMHhjYywweDBlLDB4OGMsMHgzNiwweGZmLDB4MDMsMHgwNywweDNjLDB4MDAsMHgwMCwweDg2LDB4OGQsMHgyNCwweDE4LDB4NjIsMHgwMCwKLTB4MjQsMHg1MCwweDQ3LDB4MDEsMHgyNCwweDU4LDB4NjcsMHgwMSwweDgyLDB4NDEsMHgwOCwweDAwLDB4ZmYsMHg5ZiwweDAyLDB4M2MsCi0weDBmLDB4YzAsMHgwNywweDNjLDB4ZmYsMHhmZiwweGU3LDB4MzQsMHhmZiwweGZmLDB4NDIsMHgzNCwweDI1LDB4MTgsMHg2OCwweDAwLAotMHgyNCwweDQ4LDB4MjIsMHgwMSwweDI0LDB4MTgsMHg2NywweDAwLDB4ZmYsMHgwMywweDAyLDB4M2MsMHgyNCwweDIwLDB4ODcsMHgwMCwKLTB4ZmYsMHgwMCwweDA3LDB4M2MsMHgyNCwweDI4LDB4YTIsMHgwMCwweDI0LDB4MzAsMHhjMiwweDAwLDB4MDAsMHg1MSwweDBhLDB4MDAsCi0weDAwLDB4MjAsMHgwMiwweDNjLDB4MDAsMHg1OSwweDBiLDB4MDAsMHgwMCwweGZmLDB4ZTcsMHgzNCwweDI1LDB4NDgsMHgyMiwweDAxLAotMHgyNSwweDE4LDB4NmEsMHgwMCwweDI1LDB4MjAsMHg4YiwweDAwLDB4MDIsMHgyYywweDA1LDB4MDAsMHgwMiwweDM0LDB4MDYsMHgwMCwKLTB4MjQsMHgxMCwweDA3LDB4MDIsMHgwOCwweDQwLDB4YTksMHhhZCwweDBjLDB4NDAsMHhhMywweGFkLDB4MTAsMHg0MCwweGE0LDB4YWQsCi0weDE0LDB4NDAsMHhhNSwweGE1LDB4NGUsMHgwMywweDQwLDB4MTAsMHgxNiwweDQwLDB4YTYsMHhhNSwweGZmLDB4MDAsMHgwMiwweDNjLAotMHgyNCwweDEwLDB4MDIsMHgwMiwweDAyLDB4MTQsMHgwMiwweDAwLDB4MDIsMHgxYSwweDEwLDB4MDAsMHhjNywweDQyLDB4YTIsMHhhMSwKLTB4YzMsMHg0MiwweGEzLDB4YTEsMHhjMywweDQyLDB4NjIsMHg5MiwweDI1LDB4YjAsMHgwMywweDNjLDB4NjEsMHgwYywweDYzLDB4MzQsCi0weDEwLDB4MDAsMHhhNCwweDI3LDB4MDAsMHgwMCwweDYyLDB4YTAsMHg3YSwweDU0LDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4OTUsMHgwMCwweGMyLDB4MTAsMHgwMCwweDQwLDB4MDIsMHgzYywweDA5LDB4ZmYsMHhjMiwweDEwLDB4YzAsMHgwMiwweDgyLDB4MzYsCi0weDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDdiLDB4MDIsMHhjMiwweDEwLAotMHgyYiwweDEwLDB4NDYsMHgwMCwweDgzLDB4MDAsMHg0MCwweDE0LDB4MDAsMHhiMCwweDAyLDB4M2MsMHgwMCwweDkwLDB4MDIsMHgzYywKLTB4NzgsMHhmZCwweGMyLDB4MTQsMHhjMCwweDAyLDB4ODIsMHgzNiwweDIxLDB4MTAsMHgxMywweDAxLDB4NzMsMHg0NCwweDQ0LDB4YTAsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg1NSwweGZkLDB4NjIsMHgxNCwweDAwLDB4ZjAsMHgwMiwweDNjLDB4NmEsMHg1NiwweDAwLDB4MGMsMHgyMSwweDIwLDB4MDAsMHgwMiwKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA3LDB4MDAsMHg0MiwweDM0LDB4NGMsMHhmZCwweDYyLDB4MTQsMHgwMCwweGYwLDB4MDIsMHgzYywweDViLDB4NGUsMHgwMCwweDBjLAotMHgwNywweDAwLDB4MDQsMHgyNCwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDFhLDB4MDIsMHgwMCwweDIxLDB4ODgsMHgwMCwweDAwLDB4YWYsMHg0YSwweDAwLDB4MDgsCi0weDI3LDB4YjAsMHgwNiwweDNjLDB4MDEsMHgwMCwweDMxLDB4MjYsMHgwMCwweDAxLDB4MjIsMHgyZSwweDA4LDB4MDAsMHg0MCwweDEwLAotMHhmZiwweDAwLDB4MjIsMHgyZSwweDAwLDB4MDAsMHhjMiwweDk0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweDAwLDB4NDIsMHgzMCwKLTB4ZjgsMHhmZiwweDQzLDB4MTQsMHgwOCwweDAwLDB4YzYsMHgyNCwweDAwLDB4MDAsMHhkMSwweGE3LDB4ZmYsMHgwMCwweDIyLDB4MmUsCi0weDUwLDB4ZmQsMHg0MCwweDE0LDB4YzAsMHgwMiwweDgyLDB4MzYsMHgxMiwweDg3LDB4MDIsMHgzYywweDAwLDB4MDAsMHhjMiwweGFmLAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MmQsMHhmZCwweDYyLDB4MTQsMHgwMCwweGYwLDB4MDIsMHgzYywweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsCi0weDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweDAwLDB4MDMsMHgzYywweDAwLDB4ZmYsMHg2MywweDM0LAotMHgyNCwweDEwLDB4MDMsMHgwMiwweDAyLDB4ODIsMHgwMiwweDAwLDB4Y2MsMHgwMiwweDgzLDB4MzYsMHgwMCwweDAwLDB4NzAsMHhhYywKLTB4MDAsMHgwMCwweGQxLDB4OGYsMHgyMSwweDEwLDB4MTQsMHgwMiwweDAwLDB4MDAsMHg1MSwweGFjLDB4MDAsMHgwMCwweDUxLDB4OGMsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweGQxLDB4YWYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjQsMHg2MiwweDkyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzIsMHhhZiwKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGY0LDB4MDIsMHg2MiwweDEwLDB4YTMsMHgwMCwweGUyLDB4MzQsMHgwZiwweGZkLDB4NjIsMHgxNCwweDAwLDB4ZjAsMHgwMiwweDNjLAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDhjLDB4NjUsMHg2MCwweGFlLDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhlYywweDYzLDB4NjIsMHg5MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMyLDB4YWYsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhlNiwweDYzLDB4NjIsMHhhNiwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDQwLDB4NjMsMHg4ZSwweGZmLDB4OWYsMHgwNywweDNjLDB4ZmYsMHhmZiwweGU3LDB4MzQsCi0weDAyLDB4MmMsMHgxMCwweDAwLDB4MDAsMHgxZiwweDA0LDB4MzIsMHgyNCwweDE4LDB4NjcsMHgwMCwweDI1LDB4MTgsMHg2MiwweDAwLAotMHgwMiwweDhhLDB4MDQsMHgwMCwweDNmLDB4MDAsMHhhNSwweDMwLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwOCwweDQwLDB4NjMsMHhhZSwKLTB4YmMsMHg0MiwweDcxLDB4YTIsMHhjMSwweDQyLDB4NjUsMHhhMiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGUyLDB4OTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZhLDB4MDAsMHg0MiwweDMwLAotMHgwMCwweDAwLDB4ZTIsMHhhMiwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTIsMHg5MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmQsMHgwMCwweDQyLDB4MzAsCi0weDAwLDB4MDAsMHhlMiwweGEyLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGY3LDB4ZmMsMHhjMiwweDE0LDB4YzAsMHgwMiwweDgyLDB4MzYsMHg4MCwweDEwLDB4MDgsMHgwMCwKLTB4MjEsMHgxMCwweDUzLDB4MDAsMHg2MCwweDQ1LDB4NDMsMHhhYywweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsCi0weDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDEwLDB4MDgsMHgwMCwweDIxLDB4MTAsMHg0OCwweDAwLAotMHgyMSwweDEwLDB4NTMsMHgwMCwweDIxLDB4MTAsMHg0OSwweDAwLDB4MzQsMHg0MywweDQ0LDB4YTAsMHhjMCwweDAyLDB4ODIsMHgzNiwKLTB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NzcsMHg1NiwweDAwLDB4MGMsCi0weDIxLDB4MjAsMHgwMCwweDAyLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4ZmYsMHgwMiwweDM0LDB4OGMsMHg2NSwweDYyLDB4YWUsMHhjMCwweDAyLDB4ODIsMHgzNiwKLTB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDcsMHgwYiwweDAwLDB4MGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGYwLDB4NjMsMHg2MiwweDkyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzIsMHhhZiwKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4NDAsMHg2MiwweDhlLDB4ZmYsMHg5ZiwweDAzLDB4M2MsMHhmZiwweGZmLDB4NjMsMHgzNCwweDI0LDB4MTAsMHg0MywweDAwLAotMHgwOCwweDQwLDB4NjIsMHhhZSwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDEsMHgwMCwweDIxLDB4MzgsCi0weDAwLDB4NjAsMHg4MSwweDQwLDB4MjIsMHg1MSwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjAsMHgwMSwweDQwLAotMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywKLTB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAsMHgwNywweDNjLDB4MDAsMHhmZiwweGU3LDB4MzQsCi0weDI0LDB4MTAsMHgwNywweDAyLDB4MDIsMHg4MiwweDAyLDB4MDAsMHhjYywweDAyLDB4NDMsMHgzNiwweDAwLDB4MDAsMHg3MCwweGFjLAotMHgyMSwweDEwLDB4MTIsMHgwMiwweDAwLDB4MDAsMHg1MSwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZDEsMHhhZiwKLTB4MDAsMHgwMCwweDUxLDB4OGMsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4YjcsMHg0ZiwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDIsMHg4MiwweDM2LAotMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMSwweDg4LDB4MDAsMHgwMCwKLTB4NmMsMHg0YiwweDAwLDB4MDgsMHgyNywweGIwLDB4MDQsMHgzYywweDAxLDB4MDAsMHgzMSwweDI2LDB4MDAsMHgwMSwweDIyLDB4MmUsCi0weDBhLDB4MDAsMHg0MCwweDEwLDB4ZmYsMHgwMCwweDIyLDB4MmUsMHgwMCwweDAwLDB4ODMsMHg5NCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhmZiwweGZmLDB4NjcsMHgzMCwweGZmLDB4MDAsMHhlMiwweDMwLDB4ZjAsMHgwMCwweDQyLDB4MjgsMHhmNiwweGZmLDB4NDAsMHgxNCwKLTB4MDgsMHgwMCwweDg0LDB4MjQsMHgwMCwweDAwLDB4YzcsMHhhNywweGZmLDB4MDAsMHgyMiwweDJlLDB4OTEsMHhmYywweDQwLDB4MTQsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MTIsMHg4NywweDAyLDB4M2MsMHgwMCwweDAwLDB4YzIsMHhhZiwweGMwLDB4MDIsMHg4MiwweDM2LAotMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhlNCwweDYzLDB4NjIsMHg5NiwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzIsMHhhNywweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsCi0weDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDY0LDB4NjIsMHg5MiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4YzIsMHhhZiwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDIsMHgzMiwweDAyLDB4MTIsMHgwMiwweDAwLDB4MDMsMHgwMCwweDQzLDB4MmMsCi0weDAyLDB4MDAsMHg2MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDQwLDB4NjIsMHhhMiwweDAyLDB4NDAsMHg2MywweDkyLAotMHg5MCwweDBjLDB4NDIsMHgzNiwweDAwLDB4MDAsMHg0MywweGEwLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywKLTB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweGQ3LDB4NTYsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyMSwweDEwLDB4MTMsMHgwMSwweDU2LDB4NDQsMHg0NCwweGEwLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywKLTB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweGZmLDB4MDAsMHgwMywweDNjLDB4MjQsMHgyMCwweDAzLDB4MDIsCi0weDczLDB4MGUsMHgwMCwweDBjLDB4MDIsMHgyNCwweDA0LDB4MDAsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLAotMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgxYywweDEwLDB4MDAsMHgwMCwweDFmLDB4MDIsMHgzMiwKLTB4MDIsMHg4YSwweDAyLDB4MDAsMHgzZiwweDAwLDB4NjUsMHgzMCwweGMxLDB4NDIsMHg2NSwweGEyLDB4YmMsMHg0MiwweDcxLDB4YTIsCi0weDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHgxZiwweDEyLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMyLDB4YWYsMHgwMCwweDYwLDB4MDEsMHg0MCwKLTB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMCwweDYwLDB4ODEsMHg0MCwweDAzLDB4NDAsMHg2MiwweDkyLDB4MGUsMHgwYywweDQ0LDB4MzYsCi0weDAxLDB4MDAsMHg0MiwweDI0LDB4ZmYsMHgwMCwweDQzLDB4MzAsMHgwMCwweDAwLDB4ODMsMHhhMCwweDAzLDB4NDAsMHg2MiwweGEyLAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHhmZiwweDAyLDB4MzIsMHgwMiwweDNhLDB4MDIsMHgwMCwweDFhLDB4MDEsMHhlMCwweDEwLDB4NGYsMHgwMCwweDgyLDB4MzYsCi0weDk0LDB4MDAsMHg0MiwweDM2LDB4MDAsMHgwMCwweDQzLDB4OTQsMHhmZiwweGZmLDB4ZTIsMHgyNCwweGIwLDB4MDMsMHg0NSwweDM2LAotMHhmZiwweGZmLDB4NzEsMHgzMCwweDFiLDB4MDAsMHgyNywweDAyLDB4MDIsMHgwMCwweGUwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MGQsMHgwMCwweDA3LDB4MDAsMHhmZiwweGZmLDB4NDcsMHgzMCwweDAwLDB4MDAsMHhiMSwweGFjLDB4ODAsMHhmZiwweDAyLDB4MjQsCi0weDAwLDB4MTksMHgwNywweDAwLDB4MjUsMHgxOCwweDYyLDB4MDAsMHg0ZiwweDAwLDB4NDQsMHgzNiwweDllLDB4MDAsMHg0NiwweDM2LAotMHgwMCwweDAwLDB4YTcsMHhhYywweDAwLDB4MDAsMHg4MywweGEwLDB4MjUsMHhiMCwweDA0LDB4M2MsMHg0NCwweDAwLDB4ODQsMHgzNCwKLTB4MTIsMHg4OCwweDAwLDB4MDAsMHg4MCwweDEyLDB4MTEsMHgwMCwweDAwLDB4ZmMsMHg0MiwweDI0LDB4MDAsMHgwMCwweGIxLDB4YWMsCi0weDAwLDB4MDAsMHhkMSwweGE0LDB4NDIsMHg4OSwweDAyLDB4MDAsMHgyNiwweGIwLDB4MDIsMHgzYywweDdjLDB4MDAsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4YjEsMHhhYywweDAwLDB4MDAsMHg1MSwweGE0LDB4MjUsMHhiMCwweDAyLDB4M2MsMHg0NCwweDAwLDB4NDIsMHgzNCwKLTB4MDAsMHgwMCwweDQzLDB4OTQsMHhmZiwweGZkLDB4MDIsMHgyNCwweDI0LDB4MTgsMHg2MiwweDAwLDB4MDAsMHgwMCwweDgzLDB4YTQsCi0weDAwLDB4MDAsMHg4MiwweDk0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg4MiwweGE0LAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjQsMHgxMCwweDA4LDB4MDIsMHhjYywweDAyLDB4NDMsMHgzNiwweDAwLDB4ZmYsMHgwNCwweDMyLDB4MDIsMHgzYywweDAyLDB4MDAsCi0weDAwLDB4MDAsMHg3MCwweGFjLDB4MDQsMHgwMCwweGUwLDB4MTAsMHgwMiwweDgyLDB4MDQsMHgwMCwweDAxLDB4MDAsMHgwMiwweDI0LAotMHgwMiwweDAwLDB4ZTIsMHgxMCwweDAxLDB4MDAsMHgwNCwweDI0LDB4MjEsMHgyMCwweDAwLDB4MDAsMHg3YSwweDQyLDB4MDAsMHgwYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZiwweDAwLDB4MDYsMHgzYywweDIxLDB4MjAsMHgwMCwweDAyLDB4ZGQsMHg0NCwweDAwLDB4MGMsCi0weGZmLDB4ZmYsMHhjNSwweDM0LDB4MGYsMHgwMCwweDA3LDB4M2MsMHhmZiwweGZmLDB4ZTcsMHgzNCwweDI0LDB4ODgsMHg0NywweDAwLAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHhkMSwweGFmLDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyOCwweGIwLDB4MDIsMHgzYywweDAwLDB4MDAsMHg0MywweDkwLDB4ZmYsMHgwMCwweDAyLDB4MjQsCi0weGZmLDB4MDAsMHg3MCwweDMwLDB4ZjMsMHhmYiwweDAyLDB4MTIsMHhjMCwweDAyLDB4ODIsMHgzNiwweDI4LDB4YjAsMHgwNSwweDNjLAotMHhmZiwweDAwLDB4MDQsMHgyNCwweGMwLDB4MTAsMHgxMCwweDAwLDB4MjEsMHgxMCwweDQ1LDB4MDAsMHgwMCwweDAwLDB4NDMsMHg5MCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweDAwLDB4NzAsMHgzMCwweGZiLDB4ZmYsMHgwNCwweDE2LDB4YzAsMHgxMCwweDEwLDB4MDAsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDFmLDB4MDIsMHgzMiwweDAyLDB4MWMsMHgxMCwweDAwLDB4MDIsMHg4YSwweDAyLDB4MDAsMHgzZiwweDAwLDB4NjUsMHgzMCwKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHhiYywweDQyLDB4NzEsMHhhMiwweGMxLDB4NDIsMHg2NSwweGEyLDB4MDAsMHgwMCwweDQwLDB4YWMsCi0weDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweDAwLDB4MDcsMHgzYywweDI0LDB4MjAsMHgwNywweDAyLAotMHgxNSwweDUxLDB4MDAsMHgwYywweDAyLDB4MjQsMHgwNCwweDAwLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywKLTB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU4LDB4NjMsMHg2MiwweDkyLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHhjMiwweGFmLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGZjLDB4NjMsMHg2MiwweDkyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzIsMHhhZiwKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHhlMiwweDkyLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweDAwLDB4NTEsMHgzMCwweDA1LDB4MDAsMHgyMywweDM2LAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHhlMywweGEyLDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDAyLDB4ODIsMHgzNiwweGU2LDB4NjMsMHg2MCwweGE2LDB4MDAsMHgwMCwweDQwLDB4YWMsCi0weDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiZCwweDU2LDB4MDAsMHgwYywweDIxLDB4MjAsMHgwMCwweDAyLAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4NDEsMHgwYiwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsCi0weDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTIsMHg5MiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhmZiwweDAwLDB4NTEsMHgzMCwweDAyLDB4MDAsMHgyMywweDM2LDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4ZTMsMHhhMiwKLTB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weGVjLDB4OTEsMHg0MiwweDI0LDB4MDAsMHgwMCwweDQ3LDB4OGMsMHhjMCwweDAyLDB4NDMsMHgzNiwweDI1LDB4YjAsMHgwYywweDNjLAotMHgwOCwweDQwLDB4ZTQsMHg4YywweDAwLDB4MDAsMHg2MCwweGFjLDB4NDIsMHgxNywweDA0LDB4MDAsMHgwMywweDAwLDB4NDIsMHgzMCwKLTB4NjAsMHgwMCwweDQwLDB4MTQsMHgwMywweDBkLDB4NDIsMHgzNiwweDAwLDB4MDAsMHg0NSwweDkwLDB4MTAsMHg0MCwweGU2LDB4OGMsCi0weGZmLDB4OWYsMHgwMywweDNjLDB4ZmYsMHhmZiwweDYzLDB4MzQsMHhmZiwweDNmLDB4MDIsMHgzYywweDI0LDB4MjAsMHg4MywweDAwLAotMHhmZiwweGZmLDB4NDIsMHgzNCwweDAwLDB4MjAsMHgwMywweDNjLDB4MjQsMHg1OCwweGMyLDB4MDAsMHgyNSwweDIwLDB4ODMsMHgwMCwKLTB4MDAsMHg0MCwweDAyLDB4M2MsMHg3MCwweDAwLDB4YTUsMHgzMCwweDI1LDB4NTgsMHg2MiwweDAxLDB4MDgsMHgwMSwweGEwLDB4MTAsCi0weDA4LDB4NDAsMHhlNCwweGFjLDB4OTQsMHgwZSwweDgyLDB4MzUsMHg5YywweDBlLDB4ODMsMHgzNSwweGE0LDB4MGUsMHg4NiwweDM1LAotMHgwMCwweDAwLDB4NDUsMHg4YywweGFjLDB4MGUsMHg4NywweDM1LDB4MDAsMHgwMCwweDY4LDB4OGMsMHgwMCwweDAwLDB4Y2EsMHg4YywKLTB4MDIsMHg4MCwweDA2LDB4M2MsMHgwMCwweDAwLDB4ZTQsMHg4YywweDY4LDB4MTUsMHhjNiwweDI0LDB4MGMsMHg0MCwweGMzLDB4OGMsCi0weGI0LDB4MGUsMHg4MiwweDM1LDB4MDAsMHgwMCwweDQ3LDB4OGMsMHhmZiwweDAzLDB4MDIsMHgzYywweDAwLDB4ZmMsMHgwNiwweDI0LAotMHgyNCwweDI4LDB4YTIsMHgwMCwweDI0LDB4MjAsMHg4MiwweDAwLDB4YmMsMHgwZSwweDgyLDB4MzUsMHgwMCwweDAwLDB4NDksMHg4YywKLTB4MDIsMHgyYywweDA1LDB4MDAsMHgyNCwweDEwLDB4NjYsMHgwMSwweDI0LDB4MTgsMHg2NiwweDAwLDB4MDIsMHgyNCwweDA0LDB4MDAsCi0weGM0LDB4MGUsMHg4NiwweDM1LDB4MjUsMHgxOCwweDY1LDB4MDAsMHgyNSwweDEwLDB4NDQsMHgwMCwweDAwLDB4MDAsMHhjNSwweDhjLAotMHhmZiwweDAzLDB4MDQsMHgzYywweGYwLDB4ZmYsMHgwNiwweDNjLDB4ZmYsMHgwMywweGM2LDB4MzQsMHgyNCwweDM4LDB4ZTQsMHgwMCwKLTB4Y2MsMHgwZSwweDhiLDB4MzUsMHgyNCwweDQwLDB4MDQsMHgwMSwweDgyLDB4MzksMHgwNywweDAwLDB4MDAsMHgwMCwweDY0LDB4OGQsCi0weDI0LDB4MTAsMHg0NiwweDAwLDB4MjQsMHgxOCwweDY2LDB4MDAsMHgyNSwweDEwLDB4NDcsMHgwMCwweDgyLDB4NDEsMHgwOCwweDAwLAotMHhmZiwweDAzLDB4MDcsMHgzYywweDBmLDB4YzAsMHgwNiwweDNjLDB4MjQsMHg1MCwweDQ3LDB4MDEsMHgyNCwweDQ4LDB4MjcsMHgwMSwKLTB4ZmYsMHhmZiwweGM2LDB4MzQsMHgyNSwweDE4LDB4NjgsMHgwMCwweDI0LDB4MjgsMHhhNywweDAwLDB4MjQsMHgyMCwweDg3LDB4MDAsCi0weDAwLDB4NTEsMHgwYSwweDAwLDB4MjQsMHgxOCwweDY2LDB4MDAsMHgwMCwweDQ5LDB4MDksMHgwMCwweDI0LDB4MTAsMHg0NiwweDAwLAotMHgwMiwweDgwLDB4MDcsMHgzYywweDY4LDB4MTUsMHhlNywweDI0LDB4MjUsMHgxOCwweDZhLDB4MDAsMHgyNSwweDEwLDB4NDksMHgwMCwKLTB4MDIsMHgyYywweDA1LDB4MDAsMHgwMiwweDI0LDB4MDQsMHgwMCwweDBjLDB4NDAsMHhlMywweGFjLDB4MTAsMHg0MCwweGUyLDB4YWMsCi0weDE0LDB4NDAsMHhlNSwweGE0LDB4MTYsMHg0MCwweGU0LDB4YTQsMHgwMiwweDgwLDB4MDIsMHgzYywweDY4LDB4MTUsMHg0MywweDI0LAotMHgwYywweDQwLDB4NjIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4YmQsMHgwMCwweDQwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHhmZiwweDAyLDB4MzIsMHhjNiwweDAwLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgxMiwweDAyLDB4MDAsCi0weGMzLDB4NDIsMHg2MiwweGEwLDB4N2EsMHg1NCwweDAwLDB4MGMsMHgxMCwweDAwLDB4YTQsMHgyNywweGMyLDB4NTMsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDBjLDB4NDAsMHg2MiwweDhlLDB4MDAsMHg4MCwweDAzLDB4M2MsMHgyNSwweDEwLDB4NDMsMHgwMCwKLTB4MGMsMHg0MCwweDYyLDB4YWUsMHhjMywweDQyLDB4NjIsMHg5MiwweDI1LDB4YjAsMHgwMywweDNjLDB4NjEsMHgwYywweDYzLDB4MzQsCi0weDAwLDB4MDAsMHg2MiwweGEwLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGNmLDB4NGUsMHgwMCwweDBjLDB4MjEsMHgyMCwweDAwLDB4MDIsMHhjMCwweDAyLDB4ODIsMHgzNiwKLTB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTcsMHg1MSwweDAwLDB4MGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDllLDB4MDAsMHg4MywweDM2LDB4MDAsMHgwMCwweDQwLDB4YTAsMHgwMCwweDAwLDB4NjAsMHhhNCwKLTB4OTQsMHgwMCwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDMsMHg5NCwweDI1LDB4YjAsMHgwNiwweDNjLDB4NDQsMHgwMCwweGM2LDB4MzQsCi0weGZmLDB4ZmYsMHg3MSwweDMwLDB4ODAsMHgxMiwweDExLDB4MDAsMHgwMCwweGY4LDB4NDIsMHgyNCwweDQyLDB4ODksMHgwMiwweDAwLAotMHgyNiwweGIwLDB4MDIsMHgzYywweGIwLDB4MDMsMHg4MywweDM2LDB4N2MsMHgwMCwweDQyLDB4MzQsMHgwMCwweDAwLDB4NzEsMHhhYywKLTB4MDAsMHgwMCwweDUxLDB4YTQsMHgwMCwweDAwLDB4YzMsMHg5NCwweGZmLDB4ZmQsMHgwMiwweDI0LDB4MjQsMHgxOCwweDYyLDB4MDAsCi0weDAwLDB4MDAsMHhjMywweGE0LDB4MDAsMHgwMCwweGMyLDB4OTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4YzIsMHhhNCwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg1YiwweDRlLDB4MDAsMHgwYywweDAxLDB4MDAsMHgwNCwweDI0LDB4YzAsMHgwMiwweDgyLDB4MzYsCi0weDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MTAsMHgwOCwweDAwLAotMHgyMSwweDEwLDB4NTMsMHgwMCwweGVjLDB4NDQsMHg0MywweGFjLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywKLTB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweGE3LDB4MGIsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyOCwweGIwLDB4MTEsMHgzYywweDAwLDB4MDAsMHgyMiwweDk2LDB4ZmYsMHgwMCwweDA0LDB4M2MsMHgyNCwweDE4LDB4MDQsMHgwMiwKLTB4MDIsMHgyNCwweDAzLDB4MDAsMHhmZiwweDAwLDB4NDIsMHgzMCwweDBhLDB4MDAsMHg4MiwweDEwLDB4ZmYsMHg3ZiwweDAyLDB4M2MsCi0weDA4LDB4MDAsMHgzMSwweDI2LDB4MDAsMHgwMCwweDIyLDB4OTYsMHhmZiwweGZmLDB4MjMsMHgzMiwweGZmLDB4MDAsMHg0MiwweDMwLAotMHgwMywweDAwLDB4ODIsMHgxMCwweDAwLDB4MDgsMHg2MywweDJjLDB4ZjksMHhmZiwweDYwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4ZmYsMHg3ZiwweDAyLDB4M2MsMHhmZiwweGZmLDB4NDIsMHgzNCwweDI0LDB4MTAsMHgyMiwweDAyLDB4MDAsMHgwMCwweGMyLDB4YWYsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhmOCwweDYzLDB4NjIsMHg5MiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMyLDB4YWYsMHhjMCwweDAyLDB4ODIsMHgzNiwKLTB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHgwMCwweDAzLDB4M2MsCi0weDI0LDB4MTAsMHgwMywweDAyLDB4MDAsMHhmZiwweDA0LDB4MzIsMHhjYywweDAyLDB4ODMsMHgzNiwweDAyLDB4M2MsMHgwMiwweDAwLAotMHgwMCwweDAwLDB4NzAsMHhhYywweDA0LDB4MDAsMHhlMCwweDEwLDB4MDIsMHg4MiwweDA0LDB4MDAsMHgwMSwweDAwLDB4MDIsMHgyNCwKLTB4MDIsMHgwMCwweGUyLDB4MTAsMHgwMSwweDAwLDB4MDQsMHgyNCwweDIxLDB4MjAsMHgwMCwweDAwLDB4N2EsMHg0MiwweDAwLDB4MGMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGQxLDB4OGYsMHgwZiwweDAwLDB4MDYsMHgzYywweGZmLDB4ZmYsMHhjNSwweDM0LAotMHgyMSwweDIwLDB4MDAsMHgwMiwweGJhLDB4NDQsMHgwMCwweDBjLDB4MjEsMHgzMCwweDIwLDB4MDIsMHgwZiwweDAwLDB4MDcsMHgzYywKLTB4MjEsMHgyMCwweDAwLDB4MDIsMHhkZCwweDQ0LDB4MDAsMHgwYywweGZmLDB4ZmYsMHhlNSwweDM0LDB4MDAsMHgwMCwweGMyLDB4YWYsCi0weDIxLDB4ODgsMHg0MCwweDAwLDB4MjUsMHhiMCwweDAyLDB4M2MsMHhjOCwweDAyLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg1MSwweGFjLAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjUsMHhiMCwweDA2LDB4M2MsMHhmZiwweDAwLDB4MDIsMHgyNCwweDU2LDB4MDEsMHhjNiwweDM0LDB4MDAsMHgwMCwweGMyLDB4YTQsCi0weDAxLDB4MDAsMHgwMywweDI0LDB4MDIsMHg4MCwweDA3LDB4M2MsMHhjMCwweDAyLDB4ODIsMHgzNiwweGI4LDB4N2QsMHhlMywweGEwLAotMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhkZSwweDRmLDB4MDAsMHgwYywKLTB4MDMsMHgwMCwweDA0LDB4MjQsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZGUsMHg0ZSwweDAwLDB4MGMsMHgyMSwweDIwLDB4MDAsMHgwMiwweGMwLDB4MDIsMHg4MiwweDM2LAotMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDQwLDB4NjIsMHg4ZSwKLTB4ZmYsMHg5ZiwweDA0LDB4M2MsMHhmZiwweGZmLDB4ODQsMHgzNCwweDI0LDB4MTAsMHg0NCwweDAwLDB4MDgsMHg0MCwweDYyLDB4YWUsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHhjMCwweDEwLDB4MDMsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLDB4ODAsMHgxMCwweDAyLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwKLTB4ODAsMHgxMCwweDAyLDB4MDAsMHgyMSwweDEwLDB4NTMsMHgwMCwweDcwLDB4NTEsMHg0MywweDhjLDB4YzAsMHgwMiwweDgyLDB4MzYsCi0weDAwLDB4MDAsMHhjMywweGFmLDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg3YSwweDU0LDB4MDAsMHgwYywweDEwLDB4MDAsMHhhNCwweDI3LDB4YzMsMHg0MiwweDYyLDB4OTIsMHgyNSwweGIwLDB4MDMsMHgzYywKLTB4NjEsMHgwYywweDYzLDB4MzQsMHgwMCwweDAwLDB4NjIsMHhhMCwweGQ0LDB4NGMsMHgwMCwweDA4LDB4YzAsMHgwMiwweDgyLDB4MzYsCi0weDIyLDB4NTEsMHgwMCwweDBjLDB4MTAsMHg0MCwweGViLDB4YWMsMHhiZCwweDRjLDB4MDAsMHgwOCwweDAyLDB4ODAsMHgwMiwweDNjLAotMHhjNiwweDRjLDB4MDAsMHgwOCwweDEyLDB4MDAsMHgwMiwweDI0LDB4MWEsMHg1NywweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGZmLDB4ZmYsMHgwMiwweDM0LDB4OGMsMHg2NSwweDYyLDB4YWUsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLAotMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgxMCwweDAzLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwKLTB4ODAsMHgxMCwweDAyLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwweDgwLDB4MTAsMHgwMiwweDAwLDB4MjEsMHgxMCwweDUzLDB4MDAsCi0weDc0LDB4NTEsMHg0MywweDhjLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4YzMsMHhhZiwweDAwLDB4MDAsMHg0MCwweGFjLAotMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgxMCwweDAzLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwKLTB4ODAsMHgxMCwweDAyLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwweDgwLDB4MTAsMHgwMiwweDAwLDB4MjEsMHgxMCwweDUzLDB4MDAsCi0weGQ0LDB4NTEsMHg0MywweDhjLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4YzMsMHhhZiwweDAwLDB4MDAsMHg0MCwweGFjLAotMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgxMCwweDAzLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwKLTB4ODAsMHgxMCwweDAyLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwweDAyLDB4ODAsMHgwNiwweDNjLDB4ODAsMHgxMCwweDAyLDB4MDAsCi0weGUwLDB4NjYsMHhjMywweDI0LDB4MjEsMHgxMCwweDQzLDB4MDAsMHgwMCwweDAwLDB4NDQsMHg4YywweGMwLDB4MDIsMHg4MiwweDM2LAotMHgwMCwweDAwLDB4YzQsMHhhZiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MTIsMHgwMCwweDAyLDB4MjQsMHhjNywweDQyLDB4YTIsMHhhMSwweDc3LDB4NGEsMHgwMCwweDA4LDB4YzMsMHg0MiwweGEyLDB4YTEsCi0weDg4LDB4N2QsMHg4MiwweDk0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzIsMHhhZiwweGMwLDB4MDIsMHg4MiwweDM2LAotMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHg3YSwweDQyLDB4MDAsMHgwYywKLTB4MjEsMHgyMCwweDAwLDB4MDAsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHgwMCwweDA2LDB4M2MsMHgwMCwweGZmLDB4YzYsMHgzNCwweDAwLDB4MDAsMHhjNSwweDhmLAotMHgyNCwweDIwLDB4MDYsMHgwMiwweGUxLDB4NTAsMHgwMCwweDBjLDB4MDIsMHgyMiwweDA0LDB4MDAsMHhjMCwweDAyLDB4ODIsMHgzNiwKLTB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgxMCwweDAzLDB4MDAsCi0weDIxLDB4MTAsMHg0MywweDAwLDB4ODAsMHgxMCwweDAyLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwweDAyLDB4ODAsMHgwNywweDNjLAotMHg4MCwweDEwLDB4MDIsMHgwMCwweGYwLDB4NjYsMHhlMywweDI0LDB4MjEsMHgxMCwweDQzLDB4MDAsMHgwMCwweDAwLDB4NDQsMHg4YywKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4YzQsMHhhZiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgxMCwweDAzLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwweDgwLDB4MTAsMHgwMiwweDAwLAotMHgyMSwweDEwLDB4NDMsMHgwMCwweDAyLDB4ODAsMHgwNiwweDNjLDB4ODAsMHgxMCwweDAyLDB4MDAsMHhlYywweDY2LDB4YzMsMHgyNCwKLTB4MjEsMHgxMCwweDQzLDB4MDAsMHgwMCwweDAwLDB4NDQsMHg4YywweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweGM0LDB4YWYsCi0weDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTAsMHgwMywweDAwLAotMHgyMSwweDEwLDB4NDMsMHgwMCwweDgwLDB4MTAsMHgwMiwweDAwLDB4MjEsMHgxMCwweDQzLDB4MDAsMHgwMiwweDgwLDB4MDQsMHgzYywKLTB4ZTgsMHg2NiwweDgzLDB4MjQsMHg4MCwweDEwLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLDB4MDAsMHgwMCwweDQ0LDB4OGMsCi0weGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweGM0LDB4YWYsMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MTAsMHgwMywweDAwLDB4MjEsMHgxMCwweDQzLDB4MDAsMHg4MCwweDEwLDB4MDIsMHgwMCwKLTB4MjEsMHgxMCwweDQzLDB4MDAsMHgwMiwweDgwLDB4MDcsMHgzYywweDgwLDB4MTAsMHgwMiwweDAwLDB4ZTQsMHg2NiwweGUzLDB4MjQsCi0weDIxLDB4MTAsMHg0MywweDAwLDB4MDAsMHgwMCwweDQ0LDB4OGMsMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHhjNCwweGFmLAotMHgwMCwweDAwLDB4NDAsMHhhYywweDA4LDB4NDgsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDEwLDB4MDMsMHgwMCwKLTB4MjEsMHgxMCwweDQzLDB4MDAsMHg4MCwweDEwLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLDB4MDIsMHg4MCwweDA0LDB4M2MsCi0weDAwLDB4NjcsMHg4MywweDI0LDB4ODAsMHgxMCwweDAyLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwweDAwLDB4MDAsMHg0NCwweDhjLAotMHhjMCwweDAyLDB4ODIsMHgzNiwweDAwLDB4MDAsMHhjNCwweGFmLDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhjMCwweDEwLDB4MDMsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLDB4ODAsMHgxMCwweDAyLDB4MDAsCi0weDIxLDB4MTAsMHg0MywweDAwLDB4MDIsMHg4MCwweDA3LDB4M2MsMHg4MCwweDEwLDB4MDIsMHgwMCwweGZjLDB4NjYsMHhlMywweDI0LAotMHgyMSwweDEwLDB4NDMsMHgwMCwweDAwLDB4MDAsMHg0NCwweDhjLDB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4YzQsMHhhZiwKLTB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgxMCwweDAzLDB4MDAsCi0weDIxLDB4MTAsMHg0MywweDAwLDB4ODAsMHgxMCwweDAyLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwweDAyLDB4ODAsMHgwNiwweDNjLAotMHg4MCwweDEwLDB4MDIsMHgwMCwweGY4LDB4NjYsMHhjMywweDI0LDB4MjEsMHgxMCwweDQzLDB4MDAsMHgwMCwweDAwLDB4NDQsMHg4YywKLTB4YzAsMHgwMiwweDgyLDB4MzYsMHgwMCwweDAwLDB4YzQsMHhhZiwweDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgxMCwweDAzLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwweDgwLDB4MTAsMHgwMiwweDAwLAotMHgyMSwweDEwLDB4NDMsMHgwMCwweDAyLDB4ODAsMHgwNCwweDNjLDB4ZjQsMHg2NiwweDgzLDB4MjQsMHg4MCwweDEwLDB4MDIsMHgwMCwKLTB4MjEsMHgxMCwweDQzLDB4MDAsMHgwMCwweDAwLDB4NDQsMHg4YywweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweGM0LDB4YWYsCi0weDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweGRlLDB4NGYsMHgwMCwweDBjLAotMHgwMiwweDAwLDB4MDQsMHgyNCwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhkZSwweDRmLDB4MDAsMHgwYywweDAxLDB4MDAsMHgwNCwweDI0LDB4YzAsMHgwMiwweDgyLDB4MzYsCi0weDAwLDB4MDAsMHg0MCwweGFjLDB4MDgsMHg0OCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDdhLDB4NDIsMHgwMCwweDBjLAotMHgwMSwweDAwLDB4MDQsMHgyNCwweGMwLDB4MDIsMHg4MiwweDM2LDB4MDAsMHgwMCwweDQwLDB4YWMsMHgwOCwweDQ4LDB4MDAsMHgwOCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNSwweGIwLDB4MDUsMHgzYywweDAxLDB4MDAsMHgwNiwweDI0LDB4MDEsMHg4MCwweDAyLDB4M2MsCi0weDA0LDB4MzAsMHg4NiwweDAwLDB4ZjEsMHgwMiwweGE3LDB4MzQsMHhlZCwweDAyLDB4YTQsMHgzNCwweDZjLDB4MzksMHg0MiwweDI0LAotMHgxOCwweDAzLDB4YTUsMHgzNCwweDA4LDB4MDAsMHgwMywweDI0LDB4MDAsMHgwMCwweGEyLDB4YWMsMHgwMCwweDAwLDB4ZTMsMHhhMCwKLTB4MDAsMHgwMCwweDgwLDB4YTAsMHgwMCwweDAwLDB4ODYsMHhhMCwweDAwLDB4MDAsMHg4MCwweGEwLDB4MDAsMHgwMCwweDg2LDB4YTAsCi0weDAwLDB4MDAsMHg4MCwweGEwLDB4MDAsMHgwMCwweDg2LDB4YTAsMHgwMCwweDAwLDB4ODAsMHhhMCwweDAwLDB4MDAsMHg4NiwweGEwLAotMHgwMCwweDAwLDB4ODAsMHhhMCwweDAwLDB4MDAsMHhlMCwweGEwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDEsMHg4MCwweDAyLDB4M2MsMHgyNSwweGIwLDB4MDMsMHgzYywweGM4LDB4MzksMHg0MiwweDI0LDB4MTgsMHgwMywweDYzLDB4MzQsCi0weDAwLDB4MDAsMHg2MiwweGFjLDB4MDAsMHgwMCwweDgzLDB4OTAsMHgzMCwweDAwLDB4MDIsMHgyNCwweDA1LDB4MDAsMHg2MiwweDEwLAotMHgyMSwweDIwLDB4MDAsMHgwMCwweDMxLDB4MDAsMHgwMiwweDI0LDB4MDIsMHgwMCwweDYyLDB4MTAsMHgwMSwweDAwLDB4MDQsMHgyNCwKLTB4MDcsMHgwMCwweDA0LDB4MjQsMHg1YiwweDRlLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHg4MCwweDAyLDB4M2MsCi0weDI1LDB4YjAsMHgwMywweDNjLDB4MDQsMHgzYSwweDQyLDB4MjQsMHgxOCwweDAzLDB4NjMsMHgzNCwweDAyLDB4ODAsMHgwNCwweDNjLAotMHgwMCwweDAwLDB4NjIsMHhhYywweDA4LDB4MDAsMHhlMCwweDAzLDB4YzQsMHg3ZCwweDgwLDB4YWMsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4MDgsMHg3YiwweDQyLDB4MjQsMHhjMCwweDIwLDB4MDQsMHgwMCwweDIxLDB4MjAsMHg4MiwweDAwLDB4MjEsMHgyOCwweDAwLDB4MDAsCi0weDAwLDB4NjAsMHgwNiwweDQwLDB4MDEsMHgwMCwweGMxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHgwMCwweDAwLDB4ODIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDksMHgwMCwweDQ0LDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDQsMHgwMCwweDQzLDB4OGMsMHgyMSwweDI4LDB4NDAsMHgwMCwweDAwLDB4MDAsMHg0MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHg2MiwweGFjLDB4MDQsMHgwMCwweDQzLDB4YWMsMHgwMCwweDAwLDB4YTUsMHhhYywweDA0LDB4MDAsMHhhNSwweGFjLAotMHgwMCwweDYwLDB4ODYsMHg0MCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweGEwLDB4MDAsMHgyMSwweDE4LDB4ODAsMHgwMCwKLTB4ZTgsMHhmZiwweGJkLDB4MjcsMHgwMSwweDAxLDB4NjIsMHgyYywweDEwLDB4MDAsMHhiZiwweGFmLDB4MDEsMHgwMCwweDA0LDB4MjQsCi0weDAxLDB4MDIsMHg2NSwweDJjLDB4MGEsMHgwMCwweDQwLDB4MTQsMHgyMSwweDMwLDB4MDAsMHgwMCwweDAyLDB4MDAsMHgwNCwweDI0LAotMHgwNywweDAwLDB4YTAsMHgxNCwweDAxLDB4MDgsMHg2MiwweDJjLDB4MDUsMHgwMCwweDQwLDB4MTQsMHgwMywweDAwLDB4MDQsMHgyNCwKLTB4MTAsMHgwMCwweGJmLDB4OGYsMHgyMSwweDEwLDB4YzAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MTgsMHgwMCwweGJkLDB4MjcsCi0weDg5LDB4NGUsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDAwLDB4YmYsMHg4ZiwweDIxLDB4MzAsMHg0MCwweDAwLAotMHgyMSwweDEwLDB4YzAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MTgsMHgwMCwweGJkLDB4MjcsMHgwMiwweDgwLDB4MDMsMHgzYywKLTB4MjAsMHg3YiwweDYyLDB4OGMsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MCwweDA2LDB4NDAsCi0weDAxLDB4MDAsMHhjMSwweDM0LDB4MDEsMHgwMCwweDIxLDB4MzgsMHgwMCwweDYwLDB4ODEsMHg0MCwweDEwLDB4MDAsMHg4MywweDhjLAotMHgwMiwweDgwLDB4MDIsMHgzYywweDA4LDB4N2IsMHg0MiwweDI0LDB4YzAsMHgxOCwweDAzLDB4MDAsMHgyMSwweDE4LDB4NjIsMHgwMCwKLTB4MDAsMHgwMCwweDY1LDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4NSwweGFjLDB4MDQsMHgwMCwweGE0LDB4YWMsCi0weDAwLDB4MDAsMHg2NCwweGFjLDB4MDQsMHgwMCwweDgzLDB4YWMsMHgwMCwweDYwLDB4ODYsMHg0MCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MjQsMHgwNCwweDAwLDB4ZmYsMHgwMCwweDg0LDB4MzAsMHhjMCwweDE4LDB4MDQsMHgwMCwKLTB4MjEsMHgxOCwweDY0LDB4MDAsMHg4MCwweDE4LDB4MDMsMHgwMCwweDIxLDB4MTgsMHg2NCwweDAwLDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weDY4LDB4MTUsMHg0MiwweDI0LDB4ODAsMHgxOCwweDAzLDB4MDAsMHgyMSwweDE4LDB4NjIsMHgwMCwweDc4LDB4NTEsMHg2NCwweDhjLAotMHhmZiwweGYxLDB4MDIsMHgyNCwweDI0LDB4MjAsMHg4MiwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHg3OCwweDUxLDB4NjQsMHhhYywKLTB4MDIsMHgyNCwweDA0LDB4MDAsMHhmZiwweDAwLDB4ODQsMHgzMCwweGMwLDB4MTgsMHgwNCwweDAwLDB4MjEsMHgxOCwweDY0LDB4MDAsCi0weDgwLDB4MTgsMHgwMywweDAwLDB4MjEsMHgxOCwweDY0LDB4MDAsMHgwMiwweDgwLDB4MDIsMHgzYywweDY4LDB4MTUsMHg0MiwweDI0LAotMHg4MCwweDE4LDB4MDMsMHgwMCwweDIxLDB4MTgsMHg2MiwweDAwLDB4NzgsMHg1MSwweDY0LDB4OGMsMHhmZiwweGYxLDB4MDIsMHgyNCwKLTB4MjQsMHgyMCwweDgyLDB4MDAsMHgwMCwweDAyLDB4ODQsMHgzNCwweDA4LDB4MDAsMHhlMCwweDAzLDB4NzgsMHg1MSwweDY0LDB4YWMsCi0weGUwLDB4ZmYsMHhiZCwweDI3LDB4MTAsMHgwMCwweGIwLDB4YWYsMHhjMCwweDgwLDB4MDQsMHgwMCwweDIxLDB4ODAsMHgwNCwweDAyLAotMHg4MCwweDgwLDB4MTAsMHgwMCwweDIxLDB4ODAsMHgwNCwweDAyLDB4MDIsMHg4MCwweDAyLDB4M2MsMHg2OCwweDE1LDB4NDIsMHgyNCwKLTB4ODAsMHg4MCwweDEwLDB4MDAsMHgyMSwweDgwLDB4MDIsMHgwMiwweDFjLDB4MDAsMHhiZiwweGFmLDB4MTgsMHgwMCwweGIyLDB4YWYsCi0weDE0LDB4MDAsMHhiMSwweGFmLDB4NzgsMHg1MSwweDA1LDB4OGUsMHhmZiwweDFmLDB4MDIsMHgzYywweDI1LDB4YjAsMHgxMiwweDNjLAotMHhmZiwweGZmLDB4NDIsMHgzNCwweDcwLDB4NTEsMHgwMiwweGFlLDB4ODQsMHgwMSwweDQzLDB4MzYsMHhmOCwweGZmLDB4MDIsMHgyNCwKLTB4MDAsMHgwMCwweDY2LDB4OGMsMHgyNCwweDI4LDB4YTIsMHgwMCwweGZmLDB4ZmUsMHgwMiwweDI0LDB4MjQsMHgyOCwweGEyLDB4MDAsCi0weGZmLDB4ZWYsMHgwMywweDI0LDB4MjQsMHgyOCwweGEzLDB4MDAsMHg3NCwweDUxLDB4MDYsMHhhZSwweDc4LDB4NTEsMHgwNSwweGFlLAotMHhjZSwweDBkLDB4MDAsMHgwYywweDIxLDB4ODgsMHg4MCwweDAwLDB4N2EsMHg1MSwweDAyLDB4OTIsMHgyMSwweDg4LDB4MzIsMHgwMiwKLTB4MWMsMHgwMCwweGJmLDB4OGYsMHg2MCwweDAxLDB4MjIsMHhhMiwweDE4LDB4MDAsMHhiMiwweDhmLDB4NjQsMHg1MSwweDAwLDB4YWUsCi0weDQ4LDB4NTEsMHgwMCwweGFlLDB4NGMsMHg1MSwweDAwLDB4YWUsMHg1MCwweDUxLDB4MDAsMHhhZSwweDU0LDB4NTEsMHgwMCwweGFlLAotMHg1OCwweDUxLDB4MDAsMHhhZSwweDVjLDB4NTEsMHgwMCwweGFlLDB4NjAsMHg1MSwweDAwLDB4YWUsMHgxNCwweDAwLDB4YjEsMHg4ZiwKLTB4MTAsMHgwMCwweGIwLDB4OGYsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIwLDB4MDAsMHhiZCwweDI3LDB4ZmYsMHgwMCwweGE1LDB4MzAsCi0weGMwLDB4MTAsMHgwNSwweDAwLDB4MjEsMHgxMCwweDQ1LDB4MDAsMHg4MCwweDEwLDB4MDIsMHgwMCwweDIxLDB4MTAsMHg0NSwweDAwLAotMHgwMiwweDgwLDB4MDMsMHgzYywweDY4LDB4MTUsMHg2MywweDI0LDB4ODAsMHgxMCwweDAyLDB4MDAsMHgyMSwweDEwLDB4NDMsMHgwMCwKLTB4NzgsMHg1MSwweDQzLDB4OGMsMHgyNSwweGIwLDB4MDUsMHgzYywweGZmLDB4MDAsMHhjNiwweDMwLDB4MjEsMHgzMCwweGM1LDB4MDAsCi0weGFmLDB4MDEsMHhjMiwweDkwLDB4MDcsMHgwMCwweDYzLDB4MzAsMHg4MCwweDE4LDB4MDMsMHgwMCwweDIxLDB4MTgsMHg2NSwweDAwLAotMHhmZiwweDAwLDB4ODgsMHgzMCwweGZmLDB4MDAsMHg0OSwweDMwLDB4ODQsMHgwMSwweDY2LDB4OGMsMHgyMSwweDUwLDB4MDAsMHgwMCwKLTB4MjEsMHg1OCwweDAwLDB4MDAsMHgyYiwweDAwLDB4MjAsMHgxMSwweDIxLDB4MjAsMHgwMCwweDAxLDB4MmIsMHgwMCwweGMwLDB4MTAsCi0weDJiLDB4MTAsMHgwOSwweDAxLDB4MjEsMHgyOCwweDAwLDB4MDAsMHgzZSwweDRmLDB4MDAsMHgwOCwweDAxLDB4MDAsMHgwNywweDI0LAotMHhmZiwweDAwLDB4NjUsMHgzMCwweDFkLDB4MDAsMHhhMiwweDJjLDB4MDcsMHgwMCwweDQwLDB4MTAsMHhmZiwweGZmLDB4MDIsMHgyNSwKLTB4MDQsMHgxMCwweGE3LDB4MDAsMHgyNCwweDEwLDB4NDYsMHgwMCwweGY5LDB4ZmYsMHg0MCwweDEwLDB4MDEsMHgwMCwweGEzLDB4MjQsCi0weDIxLDB4NTgsMHhhMCwweDAwLDB4ZmYsMHhmZiwweDAyLDB4MjUsMHhmZiwweDAwLDB4NDUsMHgzMCwweDJiLDB4MTgsMHhhYiwweDAwLAotMHgwZiwweDAwLDB4NjAsMHgxNCwweDJiLDB4MTAsMHg0OSwweDAxLDB4MDEsMHgwMCwweDA0LDB4MjQsMHgwNCwweDEwLDB4YTQsMHgwMCwKLTB4MjQsMHgxMCwweDQ2LDB4MDAsMHhmZiwweGZmLDB4YTcsMHgyNCwweDA0LDB4MDAsMHg0MCwweDEwLDB4MDEsMHgwMCwweDQzLDB4MjUsCi0weDE3LDB4MDAsMHg0OSwweDExLDB4ZmYsMHgwMCwweDZhLDB4MzAsMHgyMSwweDQwLDB4YTAsMHgwMCwweGZmLDB4MDAsMHhlNSwweDMwLAotMHgyYiwweDEwLDB4YWIsMHgwMCwweGY2LDB4ZmYsMHg0MCwweDEwLDB4MDQsMHgxMCwweGE0LDB4MDAsMHgyYiwweDEwLDB4NDksMHgwMSwKLTB4MDgsMHgwMCwweDQwLDB4MTAsMHgyMSwweDIwLDB4MDAsMHgwMSwweDIzLDB4MTAsMHgyYSwweDAxLDB4MmEsMHgxMCwweDYyLDB4MDEsCi0weDA0LDB4MDAsMHg0MCwweDE0LDB4MjEsMHgyMCwweDAwLDB4MDAsMHgyMywweDEwLDB4NjksMHgwMSwweDIxLDB4MTAsMHg0YSwweDAwLAotMHhmZiwweDAwLDB4NDQsMHgzMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDgwLDB4MDAsMHhmZCwweGZmLDB4NDAsMHgxNCwKLTB4MjEsMHgyMCwweDAwLDB4MDAsMHgyMywweDEwLDB4MDksMHgwMSwweDVmLDB4NGYsMHgwMCwweDA4LDB4ZmYsMHgwMCwweDQ0LDB4MzAsCi0weDIxLDB4MjAsMHgwMCwweDAxLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4ODAsMHgwMCwweGZmLDB4MDAsMHg4NCwweDMwLAotMHhjMCwweDEwLDB4MDQsMHgwMCwweDIxLDB4MTAsMHg0NCwweDAwLDB4ODAsMHgxMCwweDAyLDB4MDAsMHgyMSwweDEwLDB4NDQsMHgwMCwKLTB4MDIsMHg4MCwweDAzLDB4M2MsMHg2OCwweDE1LDB4NjMsMHgyNCwweDgwLDB4MTAsMHgwMiwweDAwLDB4MjEsMHgxMCwweDQzLDB4MDAsCi0weDI1LDB4YjAsMHgwNiwweDNjLDB4NzgsMHg1MSwweDQzLDB4OGMsMHhmZiwweDAwLDB4YTUsMHgzMCwweDIxLDB4MjAsMHg4NiwweDAwLAotMHgyMSwweDI4LDB4YTYsMHgwMCwweDYwLDB4MDEsMHg4MiwweDkwLDB4YWYsMHgwMSwweGE0LDB4OTAsMHgwNywweDAwLDB4NjMsMHgzMCwKLTB4ODAsMHgxOCwweDAzLDB4MDAsMHgyMSwweDE4LDB4NjYsMHgwMCwweGZmLDB4MDAsMHg0OCwweDMwLDB4ZmYsMHgwMCwweDg5LDB4MzAsCi0weDg0LDB4MDEsMHg2NiwweDhjLDB4MjEsMHg1MCwweDAwLDB4MDAsMHgyMSwweDU4LDB4MDAsMHgwMCwweDJiLDB4MDAsMHgyMCwweDExLAotMHgyMSwweDIwLDB4MDAsMHgwMSwweDJiLDB4MDAsMHhjMCwweDEwLDB4MmIsMHgxMCwweDA5LDB4MDEsMHgyMSwweDI4LDB4MDAsMHgwMCwKLTB4OGMsMHg0ZiwweDAwLDB4MDgsMHgwMSwweDAwLDB4MDcsMHgyNCwweGZmLDB4MDAsMHg2NSwweDMwLDB4MWQsMHgwMCwweGEyLDB4MmMsCi0weDA3LDB4MDAsMHg0MCwweDEwLDB4ZmYsMHhmZiwweDAyLDB4MjUsMHgwNCwweDEwLDB4YTcsMHgwMCwweDI0LDB4MTAsMHg0NiwweDAwLAotMHhmOSwweGZmLDB4NDAsMHgxMCwweDAxLDB4MDAsMHhhMywweDI0LDB4MjEsMHg1OCwweGEwLDB4MDAsMHhmZiwweGZmLDB4MDIsMHgyNSwKLTB4ZmYsMHgwMCwweDQ1LDB4MzAsMHgyYiwweDE4LDB4YWIsMHgwMCwweDBmLDB4MDAsMHg2MCwweDE0LDB4MmIsMHgxMCwweDQ5LDB4MDEsCi0weDAxLDB4MDAsMHgwNCwweDI0LDB4MDQsMHgxMCwweGE0LDB4MDAsMHgyNCwweDEwLDB4NDYsMHgwMCwweGZmLDB4ZmYsMHhhNywweDI0LAotMHgwNCwweDAwLDB4NDAsMHgxMCwweDAxLDB4MDAsMHg0MywweDI1LDB4MTcsMHgwMCwweDQ5LDB4MTEsMHhmZiwweDAwLDB4NmEsMHgzMCwKLTB4MjEsMHg0MCwweGEwLDB4MDAsMHhmZiwweDAwLDB4ZTUsMHgzMCwweDJiLDB4MTAsMHhhYiwweDAwLDB4ZjYsMHhmZiwweDQwLDB4MTAsCi0weDA0LDB4MTAsMHhhNCwweDAwLDB4MmIsMHgxMCwweDQ5LDB4MDEsMHgwOCwweDAwLDB4NDAsMHgxMCwweDIxLDB4MjAsMHgwMCwweDAxLAotMHgyMywweDEwLDB4MmEsMHgwMSwweDJhLDB4MTAsMHg2MiwweDAxLDB4MDQsMHgwMCwweDQwLDB4MTQsMHgyMSwweDIwLDB4MDAsMHgwMCwKLTB4MjMsMHgxMCwweDY5LDB4MDEsMHgyMSwweDEwLDB4NGEsMHgwMCwweGZmLDB4MDAsMHg0NCwweDMwLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDIxLDB4MTAsMHg4MCwweDAwLDB4ZmQsMHhmZiwweDQwLDB4MTQsMHgyMSwweDIwLDB4MDAsMHgwMCwweDIzLDB4MTAsMHgwOSwweDAxLAotMHhhZCwweDRmLDB4MDAsMHgwOCwweGZmLDB4MDAsMHg0NCwweDMwLDB4MjEsMHgyMCwweDAwLDB4MDEsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MjEsMHgxMCwweDgwLDB4MDAsMHhlMCwweGZmLDB4YmQsMHgyNywweDAyLDB4ODAsMHgwMiwweDNjLDB4MTAsMHgwMCwweGIwLDB4YWYsCi0weDY4LDB4MTUsMHg1MCwweDI0LDB4MTgsMHgwMCwweGIyLDB4YWYsMHgxNCwweDAwLDB4YjEsMHhhZiwweDFjLDB4MDAsMHhiZiwweGFmLAotMHgyMSwweDg4LDB4MDAsMHgwMCwweDIxLDB4OTAsMHgwMCwweDAyLDB4ZWUsMHg0ZSwweDAwLDB4MGMsMHgyMSwweDIwLDB4MjAsMHgwMiwKLTB4N2EsMHg1MSwweDAyLDB4OTIsMHgyMSwweDI4LDB4MDAsMHgwMCwweDgwLDB4MTAsMHgwMiwweDAwLDB4MjEsMHgxMCwweDUyLDB4MDAsCi0weGVjLDB4NDQsMHg0NCwweDhjLDB4NjAsMHg0NSwweDQzLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIxLDB4MTgsMHg2NCwweDAwLAotMHg0MiwweDE4LDB4MDMsMHgwMCwweDQ0LDB4NTEsMHgwMywweGFlLDB4MjEsMHgxMCwweDA1LDB4MDIsMHgwMSwweDAwLDB4YTUsMHgyNCwKLTB4MWQsMHgwMCwweGEzLDB4MjgsMHhiNiwweDUxLDB4NDAsMHhhMCwweDdjLDB4NTEsMHg0MCwweGEwLDB4ZmEsMHhmZiwweDYwLDB4MTQsCi0weDk5LDB4NTEsMHg0MCwweGEwLDB4MDEsMHgwMCwweDMxLDB4MjYsMHgyMCwweDAwLDB4MjIsMHgyYSwweGQ0LDB4NTEsMHgwMCwweGFlLAotMHhlOSwweGZmLDB4NDAsMHgxNCwweDk0LDB4MDAsMHgxMCwweDI2LDB4MWMsMHgwMCwweGJmLDB4OGYsMHgxOCwweDAwLDB4YjIsMHg4ZiwKLTB4MTQsMHgwMCwweGIxLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjAsMHgwMCwweGJkLDB4MjcsCi0weGM4LDB4ZmYsMHhiZCwweDI3LDB4MDIsMHg4MCwweDAyLDB4M2MsMHgzMCwweDAwLDB4YmUsMHhhZiwweDI4LDB4MDAsMHhiNiwweGFmLAotMHg2OCwweDE1LDB4NDYsMHgyNCwweDM0LDB4MDAsMHhiZiwweGFmLDB4MmMsMHgwMCwweGI3LDB4YWYsMHgyNCwweDAwLDB4YjUsMHhhZiwKLTB4MjAsMHgwMCwweGI0LDB4YWYsMHgxYywweDAwLDB4YjMsMHhhZiwweDE4LDB4MDAsMHhiMiwweGFmLDB4MTQsMHgwMCwweGIxLDB4YWYsCi0weDEwLDB4MDAsMHhiMCwweGFmLDB4OGMsMHg2NSwweGMyLDB4OGMsMHhmZiwweDAwLDB4OGQsMHgzMCwweGZmLDB4MDAsMHgwMywweDI0LAotMHhmZiwweGZmLDB4NDIsMHgzOCwweDIxLDB4ZjAsMHgwMCwweDAwLDB4ZmYsMHhmZiwweDA0LDB4MzQsMHgwYSwweGYwLDB4NjIsMHgwMCwKLTB4OGMsMHg2NSwweGM0LDB4YWMsMHhiMCwweDAwLDB4YTAsMHgxMSwweDA4LDB4MDAsMHgxNiwweDI0LDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weGI4LDB4OTAsMHg0NSwweDI0LDB4OTAsMHg0NCwweGM0LDB4MjQsMHhmZiwweDRmLDB4MDAsMHgwOCwweDIxLDB4ODgsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MzEsMHgyNiwweDAwLDB4MDAsMHg4MiwweGEwLDB4MWQsMHgwMCwweDIyLDB4MmEsMHgwYiwweDAwLDB4NDAsMHgxMCwKLTB4MDEsMHgwMCwweDg0LDB4MjQsMHgyMSwweDEwLDB4MjUsMHgwMiwweDAwLDB4MDAsMHg0MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGY3LDB4ZmYsMHg0MCwweDEwLDB4ZmQsMHhmZiwweDQzLDB4MjQsMHgwMSwweDAwLDB4MzEsMHgyNiwweDFkLDB4MDAsMHgyMiwweDJhLAotMHgwMCwweDAwLDB4ODMsMHhhMCwweGY3LDB4ZmYsMHg0MCwweDE0LDB4MDEsMHgwMCwweDg0LDB4MjQsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4NjgsMHgxNSwweDRhLDB4MjQsMHgwMiwweDgwLDB4MDMsMHgzYywweDAyLDB4ODAsMHgwMiwweDNjLDB4NTAsMHg4ZSwweDZjLDB4MjQsCi0weGQ4LDB4OGQsMHg0YiwweDI0LDB4MjEsMHg4OCwweDAwLDB4MDAsMHgyMSwweDQ4LDB4MDAsMHgwMCwweDIxLDB4MzAsMHgwMCwweDAwLAotMHgyMSwweDQwLDB4MmEsMHgwMSwweDIxLDB4MzgsMHgyYywweDAxLDB4MjEsMHgxMCwweGU2LDB4MDAsMHg5MSwweDAwLDB4NDQsMHg5MCwKLTB4MDAsMHgwMCwweDQ1LDB4OTAsMHgyMSwweDE4LDB4MDYsMHgwMSwweDAxLDB4MDAsMHhjNiwweDI0LDB4MDUsMHgwMCwweGMyLDB4MjgsCi0weGM1LDB4NDMsMHg2NCwweGEwLDB4ZjgsMHhmZiwweDQwLDB4MTQsMHgzNCwweDQzLDB4NjUsMHhhMCwweDIxLDB4MTAsMHgyYiwweDAyLAotMHgxZCwweDAwLDB4NDQsMHg5MCwweDAwLDB4MDAsMHg0NSwweDkwLDB4MjEsMHgxOCwweDJhLDB4MDIsMHgwMSwweDAwLDB4MzEsMHgyNiwKLTB4MWQsMHgwMCwweDIyLDB4MmEsMHg3MywweDQ0LDB4NjQsMHhhMCwweDU2LDB4NDQsMHg2NSwweGEwLDB4ZWIsMHhmZiwweDQwLDB4MTQsCi0weDA1LDB4MDAsMHgyOSwweDI1LDB4YTYsMHgwMCwweGEwLDB4MTEsMHgwMiwweDgwLDB4MDIsMHgzYywweDY4LDB4MTUsMHg0OCwweDI0LAotMHgwMiwweDgwLDB4MDMsMHgzYywweDAyLDB4ODAsMHgwMiwweDNjLDB4NGMsMHg5MSwweDY5LDB4MjQsMHhkOCwweDkwLDB4NDcsMHgyNCwKLTB4MjEsMHg4OCwweDAwLDB4MDAsMHg4MCwweDE4LDB4MTEsMHgwMCwweDIxLDB4MTAsMHg2OSwweDAwLDB4MjEsMHgyMCwweDY3LDB4MDAsCi0weDAwLDB4MDAsMHg0NiwweDhjLDB4MDAsMHgwMCwweDg1LDB4OGMsMHgwMSwweDAwLDB4MzEsMHgyNiwweDIxLDB4MTgsMHg2OCwweDAwLAotMHgwNCwweDAwLDB4MjIsMHgyYSwweGVjLDB4NDQsMHg2NSwweGFjLDB4ZjYsMHhmZiwweDQwLDB4MTQsMHg2MCwweDQ1LDB4NjYsMHhhYywKLTB4MDIsMHg4MCwweDAyLDB4M2MsMHg2OCwweDE1LDB4NDksMHgyNCwweDAyLDB4ODAsMHgwMywweDNjLDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weDRjLDB4OTEsMHg2OCwweDI0LDB4ZDgsMHg5MCwweDQ3LDB4MjQsMHgwNCwweDAwLDB4MTEsMHgyNCwweDgwLDB4MjAsMHgxMSwweDAwLAotMHgyMSwweDEwLDB4ODgsMHgwMCwweDIxLDB4MzAsMHg4NywweDAwLDB4MDAsMHgwMCwweDQ1LDB4OGMsMHgwMCwweDAwLDB4YzMsMHg4YywKLTB4MDEsMHgwMCwweDMxLDB4MjYsMHgyMSwweDIwLDB4ODksMHgwMCwweDgyLDB4MjgsMHgwNSwweDAwLDB4ODIsMHgxOCwweDAzLDB4MDAsCi0weDFkLDB4MDAsMHgyMiwweDJhLDB4ZWMsMHg0NCwweDgzLDB4YWMsMHhmNCwweGZmLDB4NDAsMHgxNCwweDYwLDB4NDUsMHg4NSwweGFjLAotMHgwMiwweDgwLDB4MDIsMHgzYywweDY4LDB4MTUsMHg1NSwweDI0LDB4MjEsMHg4OCwweDAwLDB4MDAsMHgyMSwweGI4LDB4YTAsMHgwMiwKLTB4MjEsMHhhMCwweDAwLDB4MDAsMHg1YSwweDUwLDB4MDAsMHgwOCwweDIxLDB4OTAsMHhhMCwweDAyLDB4MDEsMHgwMCwweDMxLDB4MjYsCi0weDIwLDB4MDAsMHgyMiwweDJhLDB4OTQsMHgwMCwweDUyLDB4MjYsMHgzOCwweDAwLDB4NDAsMHgxMCwweDk0LDB4MDAsMHg5NCwweDI2LAotMHg3OCwweDUxLDB4NDQsMHg4ZSwweDAxLDB4MDAsMHgwMywweDI0LDB4MDIsMHgxMywweDA0LDB4MDAsMHgwMSwweDAwLDB4NTMsMHgzMCwKLTB4ZjYsMHhmZiwweDYzLDB4MTYsMHgwNywweDAwLDB4ODIsMHgzMCwweDI1LDB4YjAsMHgwMywweDNjLDB4ODAsMHgxMCwweDAyLDB4MDAsCi0weDIxLDB4MTAsMHg0MywweDAwLDB4ODQsMHgwMSwweDQ1LDB4OGMsMHg3MCwweDUxLDB4NDMsMHg4ZSwweDIxLDB4MjAsMHgyMCwweDAyLAotMHgyNCwweDI4LDB4YTMsMHgwMCwweGNlLDB4MGQsMHgwMCwweDBjLDB4NzQsMHg1MSwweDQ1LDB4YWUsMHg3YSwweDUxLDB4NDQsMHg5MiwKLTB4NWMsMHgwZCwweDAwLDB4MGMsMHhmZiwweDAwLDB4MjUsMHgzMiwweDdhLDB4NTEsMHg1MCwweDkyLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDIxLDB4MjAsMHgwMCwweDAyLDB4NjMsMHgwZCwweDAwLDB4MGMsMHg4MCwweDgwLDB4MTAsMHgwMCwweDIxLDB4ODAsMHgxNywweDAyLAotMHg0OCwweDUxLDB4NDAsMHhhZSwweDRjLDB4NTEsMHg0MCwweGFlLDB4NTAsMHg1MSwweDQwLDB4YWUsMHg1NCwweDUxLDB4NDAsMHhhZSwKLTB4NTgsMHg1MSwweDQwLDB4YWUsMHg1YywweDUxLDB4NDAsMHhhZSwweDYwLDB4NTEsMHg0MCwweGFlLDB4NjQsMHg1MSwweDQwLDB4YWUsCi0weGVjLDB4NDQsMHgwNCwweDhlLDB4NjAsMHg0NSwweDAzLDB4OGUsMHgyNiwweDEwLDB4NTMsMHgwMCwweDIxLDB4MzAsMHgwMCwweDAwLAotMHgyMSwweDE4LDB4NjQsMHgwMCwweDQyLDB4MTgsMHgwMywweDAwLDB4MDQsMHgwMCwweDA0LDB4MjQsMHgwYSwweGIwLDB4ODIsMHgwMCwKLTB4NDQsMHg1MSwweDQzLDB4YWUsMHgyMSwweDIwLDB4OTUsMHgwMiwweDIxLDB4MTAsMHg4NiwweDAwLDB4MDEsMHgwMCwweGM2LDB4MjQsCi0weDFkLDB4MDAsMHhjMywweDI4LDB4YjYsMHg1MSwweDQwLDB4YTAsMHg3YywweDUxLDB4NDAsMHhhMCwweGZhLDB4ZmYsMHg2MCwweDE0LAotMHg5OSwweDUxLDB4NDAsMHhhMCwweDAxLDB4MDAsMHgzMSwweDI2LDB4MjAsMHgwMCwweDIyLDB4MmEsMHhkNCwweDUxLDB4ODAsMHhhYywKLTB4OTQsMHgwMCwweDUyLDB4MjYsMHhjYSwweGZmLDB4NDAsMHgxNCwweDk0LDB4MDAsMHg5NCwweDI2LDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDgwLDB4MDEsMHg0MiwweDM0LDB4MDAsMHgwMCwweDU2LDB4YTAsMHgwMywweDAwLDB4YzAsMHgxNywweDAyLDB4ODAsMHgwMywweDNjLAotMHg2OCwweDE1LDB4NjIsMHgyNCwweDhjLDB4NjUsMHg0MCwweGFjLDB4MzQsMHgwMCwweGJmLDB4OGYsMHgzMCwweDAwLDB4YmUsMHg4ZiwKLTB4MmMsMHgwMCwweGI3LDB4OGYsMHgyOCwweDAwLDB4YjYsMHg4ZiwweDI0LDB4MDAsMHhiNSwweDhmLDB4MjAsMHgwMCwweGI0LDB4OGYsCi0weDFjLDB4MDAsMHhiMywweDhmLDB4MTgsMHgwMCwweGIyLDB4OGYsMHgxNCwweDAwLDB4YjEsMHg4ZiwweDEwLDB4MDAsMHhiMCwweDhmLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDM4LDB4MDAsMHhiZCwweDI3LDB4MDIsMHg4MCwweDAyLDB4M2MsMHhiOCwweDkwLDB4NDUsMHgyNCwKLTB4OTAsMHg0NCwweGM0LDB4MjQsMHgyMSwweDg4LDB4MDAsMHgwMCwweDIxLDB4MTAsMHgyNSwweDAyLDB4MDAsMHgwMCwweDQzLDB4OTAsCi0weDAxLDB4MDAsMHgzMSwweDI2LDB4MWQsMHgwMCwweDIyLDB4MmEsMHgwMCwweDAwLDB4ODMsMHhhMCwweGZhLDB4ZmYsMHg0MCwweDE0LAotMHgwMSwweDAwLDB4ODQsMHgyNCwweDAyLDB4ODAsMHgwMiwweDNjLDB4NjgsMHgxNSwweDRhLDB4MjQsMHgwMiwweDgwLDB4MDMsMHgzYywKLTB4MDIsMHg4MCwweDAyLDB4M2MsMHg3NCwweDhmLDB4NmMsMHgyNCwweDE0LDB4OGUsMHg0YiwweDI0LDB4MjEsMHg4OCwweDAwLDB4MDAsCi0weDIxLDB4NDgsMHgwMCwweDAwLDB4MjEsMHgzMCwweDAwLDB4MDAsMHgyMSwweDQwLDB4MmEsMHgwMSwweDIxLDB4MzgsMHgyYywweDAxLAotMHgyMSwweDEwLDB4ZTYsMHgwMCwweDkxLDB4MDAsMHg0NCwweDkwLDB4MDAsMHgwMCwweDQ1LDB4OTAsMHgyMSwweDE4LDB4MDYsMHgwMSwKLTB4MDEsMHgwMCwweGM2LDB4MjQsMHgwNSwweDAwLDB4YzIsMHgyOCwweGM1LDB4NDMsMHg2NCwweGEwLDB4ZjgsMHhmZiwweDQwLDB4MTQsCi0weDM0LDB4NDMsMHg2NSwweGEwLDB4MjEsMHgxMCwweDJiLDB4MDIsMHgxZCwweDAwLDB4NDQsMHg5MCwweDAwLDB4MDAsMHg0NSwweDkwLAotMHgyMSwweDE4LDB4MmEsMHgwMiwweDAxLDB4MDAsMHgzMSwweDI2LDB4MWQsMHgwMCwweDIyLDB4MmEsMHg3MywweDQ0LDB4NjQsMHhhMCwKLTB4NTYsMHg0NCwweDY1LDB4YTAsMHhlYiwweGZmLDB4NDAsMHgxNCwweDA1LDB4MDAsMHgyOSwweDI1LDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weDY4LDB4MTUsMHg0OSwweDI0LDB4MDIsMHg4MCwweDAzLDB4M2MsMHgwMiwweDgwLDB4MDIsMHgzYywweDRjLDB4OTEsMHg2OCwweDI0LAotMHhkOCwweDkwLDB4NDcsMHgyNCwweDIxLDB4ODgsMHgwMCwweDAwLDB4ODAsMHgxOCwweDExLDB4MDAsMHgyMSwweDEwLDB4NjgsMHgwMCwKLTB4MjEsMHgyMCwweDY3LDB4MDAsMHgwMCwweDAwLDB4NDYsMHg4YywweDAwLDB4MDAsMHg4NSwweDhjLDB4MDEsMHgwMCwweDMxLDB4MjYsCi0weDIxLDB4MTgsMHg2OSwweDAwLDB4MWQsMHgwMCwweDIyLDB4MmEsMHhlYywweDQ0LDB4NjUsMHhhYywweGY2LDB4ZmYsMHg0MCwweDE0LAotMHg2MCwweDQ1LDB4NjYsMHhhYywweDRmLDB4NTAsMHgwMCwweDA4LDB4MDIsMHg4MCwweDAyLDB4M2MsMHhkOCwweGZmLDB4YmQsMHgyNywKLTB4ZmYsMHhmZiwweDg0LDB4MzAsMHgxOCwweDAwLDB4YjIsMHhhZiwweGYwLDB4MDEsMHg5MiwweDMwLDB4MDIsMHg5MSwweDEyLDB4MDAsCi0weDE0LDB4MDAsMHhiMSwweGFmLDB4YzAsMHg4OCwweDEyLDB4MDAsMHgyMSwweDg4LDB4MzIsMHgwMiwweDgwLDB4ODgsMHgxMSwweDAwLAotMHgyMSwweDg4LDB4MzIsMHgwMiwweDAyLDB4ODAsMHgwMiwweDNjLDB4NjgsMHgxNSwweDQyLDB4MjQsMHg4MCwweDg4LDB4MTEsMHgwMCwKLTB4MjEsMHg4OCwweDIyLDB4MDIsMHgyMCwweDAwLDB4YmYsMHhhZiwweDFjLDB4MDAsMHhiMywweGFmLDB4MTAsMHgwMCwweGIwLDB4YWYsCi0weDc4LDB4NTEsMHgzMCwweDhlLDB4MDAsMHgwMiwweDgyLDB4MzAsMHhmZiwweGZlLDB4MDMsMHgyNCwweDJiLDB4MTAsMHgwMiwweDAwLAotMHgwMCwweDEwLDB4MTAsMHgzNiwweDI0LDB4ODAsMHgwMywweDAyLDB4MDAsMHgxMiwweDAyLDB4MDAsMHgyNSwweDgwLDB4MDIsMHgwMiwKLTB4NzAsMHg1MSwweDI1LDB4YWUsMHg3OCwweDUxLDB4MzAsMHhhZSwweGEwLDB4MGUsMHgwMCwweDBjLDB4MjEsMHg5OCwweGEwLDB4MDAsCi0weGY4LDB4ZmYsMHgwMywweDI0LDB4MjQsMHg4MCwweDAzLDB4MDIsMHgwNywweDAwLDB4NDIsMHgzMCwweDI1LDB4ODAsMHgwMiwweDAyLAotMHgwNywweDAwLDB4MDMsMHgzMiwweDI1LDB4YjAsMHgwMiwweDNjLDB4ODAsMHgxOCwweDAzLDB4MDAsMHg3OCwweDUxLDB4MzAsMHhhZSwKLTB4MjEsMHgxOCwweDYyLDB4MDAsMHg4NCwweDAxLDB4NjIsMHg4YywweDIxLDB4MjAsMHg0MCwweDAyLDB4MjQsMHgxMCwweDUzLDB4MDAsCi0weGNlLDB4MGQsMHgwMCwweDBjLDB4NzQsMHg1MSwweDIyLDB4YWUsMHg3YSwweDUxLDB4MjQsMHg5MiwweDIxLDB4MjgsMHg0MCwweDAyLAotMHgyMCwweDAwLDB4YmYsMHg4ZiwweDFjLDB4MDAsMHhiMywweDhmLDB4MTgsMHgwMCwweGIyLDB4OGYsMHgxNCwweDAwLDB4YjEsMHg4ZiwKLTB4MTAsMHgwMCwweGIwLDB4OGYsMHg1YywweDBkLDB4MDAsMHgwOCwweDI4LDB4MDAsMHhiZCwweDI3LDB4ZWUsMHg0ZSwweDAwLDB4MDgsCi0weGZmLDB4MDAsMHg4NCwweDMwLDB4MDIsMHg4MCwweDAyLDB4M2MsMHg2OCwweDE1LDB4NDMsMHgyNCwweDFmLDB4MDAsMHgwNCwweDI0LAotMHg3OCwweDUxLDB4NjIsMHg4YywweGZmLDB4ZmYsMHg4NCwweDI0LDB4MDAsMHgxMCwweDQyLDB4MzQsMHg3OCwweDUxLDB4NjIsMHhhYywKLTB4ZmIsMHhmZiwweDgxLDB4MDQsMHg5NCwweDAwLDB4NjMsMHgyNCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDc4LDB4ZmYsMHhiZCwweDI3LDB4NjAsMHgwMCwweGIwLDB4YWYsMHgyNSwweGIwLDB4MTAsMHgzYywweDcwLDB4MDAsMHhiNCwweGFmLAotMHhjNCwweDAyLDB4MTQsMHgzNiwweDAwLDB4MDAsMHg4MCwweGFlLDB4NzQsMHgwMCwweGI1LDB4YWYsMHg2YywweDAwLDB4YjMsMHhhZiwKLTB4NjgsMHgwMCwweGIyLDB4YWYsMHg2NCwweDAwLDB4YjEsMHhhZiwweDg0LDB4MDAsMHhiZiwweGFmLDB4ODAsMHgwMCwweGJlLDB4YWYsCi0weDdjLDB4MDAsMHhiNywweGFmLDB4NzgsMHgwMCwweGI2LDB4YWYsMHgwNCwweDAwLDB4MDIsMHgzNiwweDA0LDB4MGMsMHgxMywweDM2LAotMHgwMCwweDAwLDB4NDMsMHg4YywweDAwLDB4MDAsMHg2MiwweDhlLDB4MGYsMHgwMCwweDExLDB4M2MsMHgyNCwweDE4LDB4NzEsMHgwMCwKLTB4MDgsMHgwYywweDEyLDB4MzYsMHg0YywweDAwLDB4YTIsMHhhZiwweDAyLDB4YWMsMHgwMywweDAwLDB4MDAsMHgwMCwweDQzLDB4OGUsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4NTAsMHgwMCwweGEzLDB4YWYsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LAotMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MjEsMHgyMCwweDAwLDB4MDAsMHhkZCwweDQ0LDB4MDAsMHgwYywKLTB4ZmYsMHhmZiwweDI1LDB4MzYsMHgxMCwweDAwLDB4YTIsMHhhZiwweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsCi0weDAwLDB4NjAsMHg4MSwweDQwLDB4YjMsMHgwYSwweDAwLDB4MGMsMHg2NCwweDAwLDB4MDQsMHgyNCwweDdhLDB4NDIsMHgwMCwweDBjLAotMHgwMSwweDAwLDB4MDQsMHgyNCwweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwKLTB4MDAsMHg2MCwweDgxLDB4NDAsMHgyMSwweDIwLDB4MDAsMHgwMCwweGRkLDB4NDQsMHgwMCwweDBjLDB4ZmYsMHhmZiwweDI1LDB4MzYsCi0weDE0LDB4MDAsMHhhMiwweGFmLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHhiMywweDBhLDB4MDAsMHgwYywweDY0LDB4MDAsMHgwNCwweDI0LDB4N2EsMHg0MiwweDAwLDB4MGMsMHgyMSwweDIwLDB4MDAsMHgwMCwKLTB4ZTAsMHgwZSwweDA1LDB4MzYsMHgwMCwweDAwLDB4YWQsMHg4YywweGRjLDB4MGUsMHgwNiwweDM2LDB4NzAsMHgwZSwweDA3LDB4MzYsCi0weDE4LDB4MDAsMHhhZCwweGFmLDB4MDAsMHgwMCwweGMyLDB4OGMsMHg3NCwweDBlLDB4MDgsMHgzNiwweDc4LDB4MGUsMHgwOSwweDM2LAotMHgxYywweDAwLDB4YTIsMHhhZiwweDAwLDB4MDAsMHhlMywweDhjLDB4N2MsMHgwZSwweDBhLDB4MzYsMHg4MCwweDBlLDB4MGIsMHgzNiwKLTB4MjAsMHgwMCwweGEzLDB4YWYsMHgwMCwweDAwLDB4MGQsMHg4ZCwweDg0LDB4MGUsMHgwYywweDM2LDB4ODgsMHgwZSwweDE3LDB4MzYsCi0weDI0LDB4MDAsMHhhZCwweGFmLDB4MDAsMHgwMCwweDIyLDB4OGQsMHg4YywweDBlLDB4MGUsMHgzNiwweGQwLDB4MGUsMHgxOCwweDM2LAotMHgyOCwweDAwLDB4YTIsMHhhZiwweDAwLDB4MDAsMHg0MywweDhkLDB4ZDgsMHgwZSwweDExLDB4MzYsMHhkNCwweDBlLDB4MTAsMHgzNiwKLTB4MmMsMHgwMCwweGEzLDB4YWYsMHgwMCwweDAwLDB4NmQsMHg4ZCwweGVkLDB4M2YsMHgwNCwweDNjLDB4ZmIsMHg5MiwweDg0LDB4MzQsCi0weDMwLDB4MDAsMHhhZCwweGFmLDB4MDAsMHgwMCwweDgyLDB4OGQsMHgyNSwweGIwLDB4MWUsMHgzYywweDIxLDB4YjAsMHgwMCwweDAwLAotMHgzNCwweDAwLDB4YTIsMHhhZiwweDAwLDB4MDAsMHhlMywweDhlLDB4ZmYsMHgwMywweDBmLDB4M2MsMHgzOCwweDAwLDB4YTMsMHhhZiwKLTB4MDAsMHgwMCwweGNkLDB4OGQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDNjLDB4MDAsMHhhZCwweGFmLDB4MDAsMHgwMCwweDAyLDB4OGYsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweGEyLDB4YWYsMHgwMCwweDAwLDB4MDMsMHg4ZSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg0NCwweDAwLDB4YTMsMHhhZiwweDAwLDB4MDAsMHgyZCwweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4YWQsMHhhZiwKLTB4MDAsMHgwMCwweGE0LDB4YWMsMHgwMCwweDAwLDB4YzQsMHhhYywweDAwLDB4MDAsMHhlNCwweGFjLDB4MDAsMHgwMCwweDA0LDB4YWQsCi0weDAwLDB4MDAsMHgyNCwweGFkLDB4MDAsMHgwMCwweDQ0LDB4YWQsMHgwMCwweDAwLDB4NjQsMHhhZCwweDAwLDB4MDAsMHg4NCwweGFkLAotMHgwMCwweDAwLDB4ZTQsMHhhZSwweDAwLDB4MDAsMHhjNCwweGFkLDB4MDAsMHgwMCwweDA0LDB4YWYsMHgwMCwweDAwLDB4MDQsMHhhZSwKLTB4MDAsMHgwMCwweDI0LDB4YWUsMHhkMCwweDUxLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4N2EsMHgwMCwweGEyLDB4MTIsCi0weDAwLDB4MTAsMHgwMywweDNjLDB4YWMsMHgwZSwweGMyLDB4MzcsMHg5NCwweDBlLDB4YzMsMHgzNywweDI1LDB4YjAsMHgwOSwweDNjLAotMHgwMCwweDAwLDB4NGEsMHg4YywweGJjLDB4MGUsMHgyOSwweDM1LDB4MDAsMHgwMCwweDY0LDB4OGMsMHhiNCwweDBlLDB4YzIsMHgzNywKLTB4OWMsMHgwZSwweGMzLDB4MzcsMHgwMCwweDAwLDB4NDUsMHg4YywweDAwLDB4MDAsMHg2NiwweDhjLDB4MDAsMHgwMCwweDI3LDB4OGQsCi0weDI0LDB4MjAsMHg4ZiwweDAwLDB4MDAsMHhkOCwweDAyLDB4M2MsMHgyNCwweDEwLDB4NDIsMHgwMSwweDI0LDB4MjgsMHhhZiwweDAwLAotMHgyNCwweDMwLDB4Y2YsMHgwMCwweDI0LDB4MzgsMHhlZiwweDAwLDB4MDIsMHgyNCwweDA0LDB4MDAsMHgyMCwweDAxLDB4MDMsMHgyNCwKLTB4MDEsMHgwMCwweDQyLDB4MmMsMHgwMiwweDJjLDB4MDUsMHgwMCwweDAyLDB4MzQsMHgwNiwweDAwLDB4ZjIsMHgwMCwweDgzLDB4MTAsCi0weDAyLDB4M2MsMHgwNywweDAwLDB4ZjAsMHgwMCwweGEzLDB4MTAsMHgyMCwweDAwLDB4MDMsMHgyNCwweGVlLDB4MDAsMHhjMywweDEwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGVjLDB4MDAsMHhlMywweDEwLDB4MDEsMHgwMCwweDA4LDB4MjQsMHg4MCwweDAwLDB4MDMsMHgyNCwKLTB4MDgsMHgwMCwweDgzLDB4MTAsMHgyMSwweDIwLDB4MDAsMHgwMCwweDA2LDB4MDAsMHhhMywweDEwLDB4MjEsMHgyMCwweDAwLDB4MDAsCi0weGUwLDB4MDMsMHgwMywweDI0LDB4MDMsMHgwMCwweGMzLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGU1LDB4MDAsMHhlMywweDEwLAotMHgwMSwweDAwLDB4MDQsMHgyNCwweDA2LDB4MDAsMHg0MCwweDEwLDB4MDksMHgwMCwweDAyLDB4MjQsMHgwNCwweDAwLDB4MDAsMHgxMSwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg2ZCwweDAxLDB4ODAsMHgxNCwweDI1LDB4YjAsMHgxMiwweDNjLDB4MDksMHgwMCwweDAyLDB4MjQsCi0weGRlLDB4MDAsMHhjMiwweDEyLDB4MjUsMHhiMCwweDA0LDB4M2MsMHgwMSwweDAwLDB4ZDYsMHgyNiwweDBhLDB4MDAsMHhjMiwweDJlLAotMHgxZCwweDAxLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzgsMHhmZiwweGEwLDB4MTYsMHgwMSwweDAwLDB4MDIsMHgyNCwKLTB4YTAsMHgwMCwweDAzLDB4M2MsMHgyNSwweGIwLDB4MDksMHgzYywweDMwLDB4NTQsMHg2MiwweDM0LDB4MDQsMHgwYywweDI5LDB4MzUsCi0weDAwLDB4MDAsMHgyMiwweGFkLDB4MjUsMHhiMCwweDBkLDB4M2MsMHgwOCwweDAwLDB4MDIsMHgzYywweGU0LDB4MDAsMHg0MiwweDM0LAotMHgwOCwweDBjLDB4YWQsMHgzNSwweDI1LDB4YjAsMHgwOSwweDNjLDB4MDAsMHgwMCwweGEyLDB4YWQsMHgyOCwweDBlLDB4MjksMHgzNSwKLTB4ODAsMHg4MCwweDAyLDB4M2MsMHgwMCwweDAwLDB4MjIsMHhhZCwweDE0LDB4MDIsMHgwNCwweDNjLDB4MTYsMHg2OCwweDAyLDB4M2MsCi0weDQ4LDB4MDEsMHg4MywweDM0LDB4NDAsMHgwZSwweGM1LDB4MzcsMHg0NCwweDBlLDB4YzYsMHgzNywweGEyLDB4MDQsMHg0MiwweDM0LAotMHgyNSwweGIwLDB4MGQsMHgzYywweDAwLDB4MDAsMHhhMywweGFjLDB4NGMsMHgwZSwweGFkLDB4MzUsMHgwMCwweDAwLDB4YzIsMHhhYywKLTB4ZDEsMHgyOCwweDAyLDB4MjQsMHgwMCwweDAwLDB4YTIsMHhhZCwweDE0LDB4MDIsMHgwMywweDNjLDB4MTYsMHgyOCwweDAyLDB4M2MsCi0weDRkLDB4MDEsMHg2MywweDM0LDB4NjAsMHgwZSwweGM3LDB4MzcsMHg2NCwweDBlLDB4YzgsMHgzNywweGJhLDB4MDgsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4ZTMsMHhhYywweDI1LDB4YjAsMHgwNiwweDNjLDB4MDAsMHgwMCwweDAyLDB4YWQsMHgwMCwweGZiLDB4MGQsMHgzYywKLTB4MjUsMHhiMCwweDA5LDB4M2MsMHgwMCwweGY4LDB4MDIsMHgzYywweGQxLDB4MjgsMHgwNywweDI0LDB4NmMsMHgwZSwweGM2LDB4MzQsCi0weDQ4LDB4MGUsMHgyOSwweDM1LDB4MDEsMHgwMCwweDQyLDB4MzQsMHgwMSwweDAwLDB4YWQsMHgzNSwweDAwLDB4MDAsMHhjNywweGFjLAotMHgwMywweDAwLDB4MDQsMHgyNCwweDAwLDB4MDAsMHgyZCwweGFkLDB4MDAsMHgwMCwweDIyLDB4YWQsMHg4NCwweDBhLDB4MDAsMHgwYywKLTB4NTgsMHgwMCwweGFmLDB4YWYsMHhhMCwweDAwLDB4MDQsMHgzYywweDI1LDB4YjAsMHgwMywweDNjLDB4MjUsMHhiMCwweDA2LDB4M2MsCi0weDI1LDB4YjAsMHgwNywweDNjLDB4ZTQsMHgwMCwweDAyLDB4MjQsMHgzMywweDU0LDB4ODQsMHgzNCwweDA0LDB4MGMsMHg2MywweDM0LAotMHgwOCwweDBjLDB4YzYsMHgzNCwweDI4LDB4MGUsMHhlNywweDM0LDB4MDAsMHgwMCwweDY0LDB4YWMsMHgwMCwweDAwLDB4YzIsMHhhYywKLTB4MDAsMHgwMCwweGUwLDB4YWMsMHgwMSwweDAwLDB4MDIsMHgyNCwweDU4LDB4MDAsMHhhZiwweDhmLDB4OGEsMHhmZiwweGEyLDB4MTYsCi0weGFjLDB4MGUsMHhjMiwweDM3LDB4MDAsMHgxMCwweDAzLDB4M2MsMHgxZiwweGRjLDB4NzksMHgzNCwweDFmLDB4OGMsMHg3ZiwweDM0LAotMHgyMywweDhjLDB4NmQsMHgzNCwweGEwLDB4MDAsMHgwMywweDNjLDB4MzAsMHg1NCwweDY1LDB4MzQsMHgwMCwweDAxLDB4MTcsMHgzYywKLTB4MjUsMHhiMCwweDA5LDB4M2MsMHgyNSwweGIwLDB4MDMsMHgzYywweDAwLDB4MDEsMHhlMiwweDM2LDB4MjAsMHgwOCwweDI5LDB4MzUsCi0weDIwLDB4MDgsMHg2MywweDM0LDB4MDAsMHgwMCwweDMwLDB4OGQsMHgwMCwweDAwLDB4NjIsMHhhYywweDI1LDB4YjAsMHgwMywweDNjLAotMHgyOCwweDA4LDB4NjMsMHgzNCwweDAwLDB4MDAsMHg2MiwweGFjLDB4MjUsMHhiMCwweDAyLDB4M2MsMHgwNCwweDBjLDB4NDIsMHgzNCwKLTB4MDAsMHgwMCwweDQ1LDB4YWMsMHgyNSwweGIwLDB4MDMsMHgzYywweDA4LDB4MDAsMHgwMiwweDNjLDB4ZTQsMHgwMCwweDQyLDB4MzQsCi0weDA4LDB4MGMsMHg2MywweDM0LDB4MDAsMHgwMCwweDYyLDB4YWMsMHgyNSwweGIwLDB4MDMsMHgzYywweDAwLDB4N2MsMHhmMywweDM2LAotMHgwMCwweDQ4LDB4ZjQsMHgzNiwweDMwLDB4MGUsMHhjNiwweDM3LDB4MzQsMHgwZSwweGM3LDB4MzcsMHg4MCwweDgwLDB4MDIsMHgzYywKLTB4MjgsMHgwZSwweDYzLDB4MzQsMHgwMCwweDAwLDB4NjIsMHhhYywweDAwLDB4MDAsMHhkMywweGFjLDB4MDAsMHgwMCwweGY0LDB4YWMsCi0weDE0LDB4MDIsMHgwNiwweDNjLDB4MTYsMHg2OCwweDA3LDB4M2MsMHgzOCwweDBlLDB4YzgsMHgzNywweDQwLDB4MGUsMHhjYSwweDM3LAotMHg0NCwweDBlLDB4Y2IsMHgzNywweDNjLDB4MGUsMHhjOSwweDM3LDB4MDIsMHgwMSwweGM2LDB4MzQsMHhjNywweDA0LDB4ZTcsMHgzNCwKLTB4MDAsMHgwMCwweDE5LDB4YWQsMHgyNSwweGIwLDB4MDMsMHgzYywweDAwLDB4MDAsMHgzZiwweGFkLDB4MDAsMHgwMCwweDQ2LDB4YWQsCi0weDI1LDB4YjAsMHgwOSwweDNjLDB4MDAsMHgwMCwweDY3LDB4YWQsMHgyNSwweGIwLDB4MDYsMHgzYywweDAwLDB4MTAsMHgwNywweDNjLAotMHg1MCwweDBlLDB4Y2MsMHgzNywweDU4LDB4MGUsMHhjZSwweDM3LDB4NWMsMHgwZSwweGQ4LDB4MzcsMHhkMSwweDI4LDB4MDIsMHgyNCwKLTB4MjMsMHhkYywweGU3LDB4MzQsMHg0YywweDBlLDB4MjksMHgzNSwweDZjLDB4MGUsMHg2MywweDM0LDB4NTQsMHgwZSwweGM2LDB4MzQsCi0weDAwLDB4MDAsMHgyMiwweGFkLDB4MDAsMHgwMCwweDYyLDB4YWMsMHgxNCwweDAyLDB4MDksMHgzYywweDAwLDB4MDAsMHg5MywweGFkLAotMHgyNSwweGIwLDB4MDIsMHgzYywweDAwLDB4MDAsMHhkNCwweGFjLDB4MDAsMHgwMCwweGM3LDB4YWQsMHgwMCwweDAwLDB4MGQsMHhhZiwKLTB4MTYsMHgyOCwweDBkLDB4M2MsMHg0OCwweDBlLDB4NDIsMHgzNCwweDAwLDB4ZjgsMHgwNiwweDNjLDB4MDIsMHgwMSwweDI5LDB4MzUsCi0weDA3LDB4MGQsMHhhZCwweDM1LDB4MDAsMHhmYiwweDAzLDB4M2MsMHg2MCwweDBlLDB4ZDEsMHgzNywweDY0LDB4MGUsMHhkMiwweDM3LAotMHgwMCwweDAwLDB4MjksMHhhZSwweDAzLDB4MDAsMHgwNCwweDI0LDB4MDAsMHgwMCwweDRkLDB4YWUsMHgwMCwweDAwLDB4NDMsMHhhYywKLTB4MDAsMHgwMCwweDQ2LDB4YWMsMHg4NCwweDBhLDB4MDAsMHgwYywweDU4LDB4MDAsMHhhZiwweGFmLDB4MDAsMHgwMiwweDAyLDB4M2MsCi0weDI1LDB4YjAsMHgwNywweDNjLDB4MjUsMHhiMCwweDA5LDB4M2MsMHhkMSwweDI4LDB4NDIsMHgzNCwweDRjLDB4MGUsMHhlNywweDM0LAotMHg2YywweDBlLDB4MjksMHgzNSwweDI1LDB4YjAsMHgwZCwweDNjLDB4MDAsMHgwMCwweGUyLDB4YWMsMHg0OCwweDBlLDB4YWQsMHgzNSwKLTB4MDAsMHgwMCwweDIyLDB4YWQsMHgwMCwweGY4LDB4MDMsMHgzYywweDAwLDB4ZmIsMHgwMiwweDNjLDB4MDAsMHgwMCwweGEyLDB4YWQsCi0weDAzLDB4MDAsMHgwNCwweDI0LDB4MDAsMHgwMCwweGEzLDB4YWQsMHg4NCwweDBhLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLAotMHg0YywweDAwLDB4YTYsMHg4ZiwweDI1LDB4YjAsMHgwNCwweDNjLDB4MDQsMHgwYywweDg0LDB4MzQsMHgwMCwweDAwLDB4ODYsMHhhYywKLTB4NTAsMHgwMCwweGE5LDB4OGYsMHgyNSwweGIwLDB4MDcsMHgzYywweDI1LDB4YjAsMHgwZCwweDNjLDB4MDAsMHgwMSwweDEwLDB4MzIsCi0weDA4LDB4MGMsMHhlNywweDM0LDB4MjgsMHgwZSwweGFkLDB4MzUsMHgwMCwweDAwLDB4ZTksMHhhYywweDJiLDB4ODAsMHgxMCwweDAwLAotMHgwMCwweDAwLDB4YTAsMHhhZCwweDU4LDB4MDAsMHhhZiwweDhmLDB4MTcsMHhmZiwweDAwLDB4MTYsMHhhYywweDBlLDB4YzIsMHgzNywKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHgyNSwweGIwLDB4MDMsMHgzYywweDIwLDB4MDgsMHg0MiwweDM0LDB4MjgsMHgwOCwweDYzLDB4MzQsCi0weDAwLDB4MDAsMHg1NywweGFjLDB4MjUsMHhiMCwweDA5LDB4M2MsMHgwMCwweDAwLDB4NzcsMHhhYywweGFjLDB4MGUsMHhjMiwweDM3LAotMHg5NCwweDBlLDB4YzMsMHgzNywweDAwLDB4MDAsMHg0YSwweDhjLDB4YmMsMHgwZSwweDI5LDB4MzUsMHgwMCwweDAwLDB4NjQsMHg4YywKLTB4YjQsMHgwZSwweGMyLDB4MzcsMHg5YywweDBlLDB4YzMsMHgzNywweDAwLDB4MDAsMHg0NSwweDhjLDB4MDAsMHgwMCwweDY2LDB4OGMsCi0weDAwLDB4MDAsMHgyNywweDhkLDB4MjQsMHgyMCwweDhmLDB4MDAsMHgwMCwweGQ4LDB4MDIsMHgzYywweDI0LDB4MTAsMHg0MiwweDAxLAotMHgyNCwweDI4LDB4YWYsMHgwMCwweDI0LDB4MzAsMHhjZiwweDAwLDB4MjQsMHgzOCwweGVmLDB4MDAsMHgwMiwweDI0LDB4MDQsMHgwMCwKLTB4MjAsMHgwMSwweDAzLDB4MjQsMHgwMSwweDAwLDB4NDIsMHgyYywweDAyLDB4MmMsMHgwNSwweDAwLDB4MDIsMHgzNCwweDA2LDB4MDAsCi0weDEwLDB4ZmYsMHg4MywweDE0LDB4MDIsMHgzYywweDA3LDB4MDAsMHg4MCwweDAwLDB4MDMsMHgyNCwweDE2LDB4ZmYsMHg4MywweDE0LAotMHgyMSwweDQwLDB4MDAsMHgwMCwweGMzLDB4NTEsMHgwMCwweDA4LDB4MjEsMHgyMCwweDAwLDB4MDAsMHhmZiwweGZmLDB4MDIsMHgzNCwKLTB4YzQsMHgwMiwweDg0LDB4MzQsMHgwMCwweDAwLDB4ODIsMHhhYywweDk0LDB4MGUsMHhjMywweDM3LDB4OWMsMHgwZSwweGMyLDB4MzcsCi0weGE0LDB4MGUsMHhjNCwweDM3LDB4YWMsMHgwZSwweGM3LDB4MzcsMHgwMCwweDAwLDB4NjYsMHg4YywweDAwLDB4MDAsMHg0OSwweDhjLAotMHgwMCwweDAwLDB4OGIsMHg4YywweDAwLDB4MDAsMHhlNSwweDhjLDB4MDIsMHg4MCwweDA3LDB4M2MsMHg2OCwweDE1LDB4ZTcsMHgyNCwKLTB4MGMsMHg0MCwweGUzLDB4OGMsMHgxMCwweDQwLDB4ZTQsMHg4YywweGI0LDB4MGUsMHhjMiwweDM3LDB4MDAsMHgwMCwweDQ3LDB4OGMsCi0weDI1LDB4YjAsMHgwZCwweDNjLDB4MDAsMHhmYywweDAyLDB4MjQsMHgyNCwweDMwLDB4Y2YsMHgwMCwweDI0LDB4MjgsMHhhZiwweDAwLAotMHhiYywweDBlLDB4YWQsMHgzNSwweDAwLDB4MDAsMHhhOCwweDhkLDB4MjQsMHgyMCwweDgyLDB4MDAsMHgwMiwweDM0LDB4MDYsMHgwMCwKLTB4MjQsMHgxOCwweDYyLDB4MDAsMHgwMiwweDJjLDB4MDUsMHgwMCwweGM0LDB4MGUsMHhjYSwweDM3LDB4Y2MsMHgwZSwweGNjLDB4MzcsCi0weGYwLDB4ZmYsMHgwMiwweDNjLDB4ZmYsMHgwMywweDQyLDB4MzQsMHgyNSwweDE4LDB4NjYsMHgwMCwweDI1LDB4MjAsMHg4NSwweDAwLAotMHgwMCwweDAwLDB4NDYsMHg4ZCwweDI0LDB4NDgsMHgyZiwweDAxLDB4MDAsMHgwMCwweDg1LDB4OGQsMHgyNCwweDM4LDB4ZWYsMHgwMCwKLTB4MjQsMHgyMCwweDgyLDB4MDAsMHgyNCwweDE4LDB4NjIsMHgwMCwweDgyLDB4NDksMHgwOSwweDAwLDB4ODIsMHgzOSwweDA3LDB4MDAsCi0weDBmLDB4YzAsMHgwMiwweDNjLDB4ZmYsMHhmZiwweDQyLDB4MzQsMHgyNSwweDE4LDB4NjksMHgwMCwweDI1LDB4MjAsMHg4NywweDAwLAotMHgyNCwweDU4LDB4NmYsMHgwMSwweDI0LDB4NDAsMHgwZiwweDAxLDB4MjQsMHgyMCwweDgyLDB4MDAsMHgyNCwweDE4LDB4NjIsMHgwMCwKLTB4MDAsMHg1OSwweDBiLDB4MDAsMHgwMCwweDQxLDB4MDgsMHgwMCwweDI0LDB4MzAsMHhjZiwweDAwLDB4MjQsMHgyOCwweGFmLDB4MDAsCi0weDAyLDB4ODAsMHgwMiwweDNjLDB4NjgsMHgxNSwweDQyLDB4MjQsMHgyNSwweDE4LDB4NmIsMHgwMCwweDI1LDB4MjAsMHg4OCwweDAwLAotMHgwMiwweDM0LDB4MDYsMHgwMCwweDAyLDB4MmMsMHgwNSwweDAwLDB4MDEsMHgwMCwweGQ2LDB4MjYsMHgwYywweDQwLDB4NDMsMHhhYywKLTB4MTAsMHg0MCwweDQ0LDB4YWMsMHgxNCwweDQwLDB4NDYsMHhhNCwweDE2LDB4NDAsMHg0NSwweGE0LDB4MGEsMHgwMCwweGMyLDB4MmUsCi0weGU1LDB4ZmUsMHg0MCwweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxOCwweDAwLDB4YWQsMHg4ZiwweDI1LDB4YjAsMHgwMiwweDNjLAotMHhlMCwweDBlLDB4NDMsMHgzNCwweDEwLDB4MDAsMHhhNiwweDhmLDB4MDAsMHgwMCwweDZkLDB4YWMsMHgxYywweDAwLDB4YTMsMHg4ZiwKLTB4ZGMsMHgwZSwweDQ3LDB4MzQsMHg3MCwweDBlLDB4NDgsMHgzNCwweDAwLDB4MDAsMHhlMywweGFjLDB4MjAsMHgwMCwweGE3LDB4OGYsCi0weDc0LDB4MGUsMHg0OSwweDM0LDB4NzgsMHgwZSwweDRhLDB4MzQsMHgwMCwweDAwLDB4MDcsMHhhZCwweDI0LDB4MDAsMHhhZCwweDhmLAotMHg3YywweDBlLDB4NGIsMHgzNCwweDgwLDB4MGUsMHg0YywweDM0LDB4MDAsMHgwMCwweDJkLDB4YWQsMHgyOCwweDAwLDB4YTMsMHg4ZiwKLTB4MjUsMHhiMCwweDBkLDB4M2MsMHg4NCwweDBlLDB4YWQsMHgzNSwweDAwLDB4MDAsMHg0MywweGFkLDB4MmMsMHgwMCwweGE3LDB4OGYsCi0weDg4LDB4MGUsMHg1MiwweDM0LDB4OGMsMHgwZSwweDRlLDB4MzQsMHgwMCwweDAwLDB4NjcsMHhhZCwweDMwLDB4MDAsMHhhOSwweDhmLAotMHhkNCwweDBlLDB4NTEsMHgzNCwweGQwLDB4MGUsMHg0MiwweDM0LDB4MDAsMHgwMCwweDg5LDB4YWQsMHgzNCwweDAwLDB4YTMsMHg4ZiwKLTB4MGYsMHgwMCwweDEwLDB4M2MsMHhmZiwweGZmLDB4MDUsMHgzNiwweDAwLDB4MDAsMHhhMywweGFkLDB4MzgsMHgwMCwweGE3LDB4OGYsCi0weDIxLDB4MjAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ3LDB4YWUsMHgzYywweDAwLDB4YTksMHg4ZiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4YzksMHhhZCwweDQwLDB4MDAsMHhhZCwweDhmLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NGQsMHhhYywKLTB4NDQsMHgwMCwweGEyLDB4OGYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMiwweGFlLDB4NDgsMHgwMCwweGEzLDB4OGYsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQzLDB4YWUsMHhiYSwweDQ0LDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLAotMHhiMywweDBhLDB4MDAsMHgwYywweDY0LDB4MDAsMHgwNCwweDI0LDB4N2EsMHg0MiwweDAwLDB4MGMsMHgwMSwweDAwLDB4MDQsMHgyNCwKLTB4MTQsMHgwMCwweGE2LDB4OGYsMHhmZiwweGZmLDB4MDUsMHgzNiwweGJhLDB4NDQsMHgwMCwweDBjLDB4MjEsMHgyMCwweDAwLDB4MDAsCi0weGIzLDB4MGEsMHgwMCwweDBjLDB4NjQsMHgwMCwweDA0LDB4MjQsMHg4NCwweDAwLDB4YmYsMHg4ZiwweDgwLDB4MDAsMHhiZSwweDhmLAotMHg3YywweDAwLDB4YjcsMHg4ZiwweDc4LDB4MDAsMHhiNiwweDhmLDB4NzQsMHgwMCwweGI1LDB4OGYsMHg3MCwweDAwLDB4YjQsMHg4ZiwKLTB4NmMsMHgwMCwweGIzLDB4OGYsMHg2OCwweDAwLDB4YjIsMHg4ZiwweDY0LDB4MDAsMHhiMSwweDhmLDB4NjAsMHgwMCwweGIwLDB4OGYsCi0weDIxLDB4MjAsMHgwMCwweDAwLDB4N2EsMHg0MiwweDAwLDB4MDgsMHg4OCwweDAwLDB4YmQsMHgyNywweDk0LDB4MGUsMHg0MiwweDM2LAotMHg5YywweDBlLDB4NDMsMHgzNiwweGE0LDB4MGUsMHg0NCwweDM2LDB4YWMsMHgwZSwweDQ1LDB4MzYsMHgwMiwweDgwLDB4MGQsMHgzYywKLTB4MDAsMHgwMCwweDQ3LDB4OGMsMHg2OCwweDE1LDB4YWQsMHgyNSwweDAwLDB4MDAsMHg2YSwweDhjLDB4MDAsMHgwMCwweDhjLDB4OGMsCi0weDAwLDB4MDAsMHhhMywweDhjLDB4MTAsMHg0MCwweGE0LDB4OGQsMHhiNCwweDBlLDB4NDIsMHgzNiwweDAwLDB4MDAsMHg0OCwweDhjLAotMHgwYywweDQwLDB4YTUsMHg4ZCwweDI1LDB4YjAsMHgwMiwweDNjLDB4MDAsMHhmYywweDEzLDB4MjQsMHhiYywweDBlLDB4NDIsMHgzNCwKLTB4MjQsMHgxOCwweDZmLDB4MDAsMHgwMCwweDAwLDB4NDksMHg4YywweDAyLDB4MWMsMHgwMywweDAwLDB4MjQsMHgzOCwweGVmLDB4MDAsCi0weDI0LDB4MjAsMHg5MywweDAwLDB4ZjAsMHhmZiwweDA2LDB4M2MsMHgyNSwweDIwLDB4ODMsMHgwMCwweGZmLDB4MDMsMHhjNiwweDM0LAotMHgwMiwweDNjLDB4MDcsMHgwMCwweGM0LDB4MGUsMHg0MiwweDM2LDB4MjQsMHgyOCwweGIzLDB4MDAsMHgyNCwweDQwLDB4MGYsMHgwMSwKLTB4Y2MsMHgwZSwweDRiLDB4MzYsMHgyNSwweDI4LDB4YTcsMHgwMCwweDI0LDB4MjAsMHg4NiwweDAwLDB4MDAsMHgwMCwweDQ3LDB4OGMsCi0weDI0LDB4NTAsMHg0ZiwweDAxLDB4MDAsMHgwMCwweDYzLDB4OGQsMHg4MiwweDQxLDB4MDgsMHgwMCwweDBmLDB4YzAsMHgwMiwweDNjLAotMHhmZiwweGZmLDB4NDIsMHgzNCwweDI1LDB4MjAsMHg4OCwweDAwLDB4ODIsMHg1MSwweDBhLDB4MDAsMHgyNCwweDI4LDB4YTYsMHgwMCwKLTB4MjQsMHg0OCwweDJmLDB4MDEsMHgyNCwweDg4LDB4ODIsMHgwMCwweDI1LDB4MjgsMHhhYSwweDAwLDB4MjQsMHg2MCwweDhmLDB4MDEsCi0weDAwLDB4NDksMHgwOSwweDAwLDB4MjUsMHg4OCwweDI5LDB4MDIsMHgyNCwweDI4LDB4YTIsMHgwMCwweDI0LDB4MTgsMHg2ZiwweDAwLAotMHgwMCwweDYxLDB4MGMsMHgwMCwweDI0LDB4MzgsMHhlZiwweDAwLDB4MjUsMHgyOCwweGFjLDB4MDAsMHgwMiwweDNjLDB4MDcsMHgwMCwKLTB4MDIsMHgxYywweDAzLDB4MDAsMHg4MiwweDI3LDB4MTEsMHgwMCwweDAxLDB4MDAsMHgwMiwweDI0LDB4MTYsMHg0MCwweGEzLDB4YTUsCi0weDE0LDB4NDAsMHhhNywweGE1LDB4MGMsMHg0MCwweGE1LDB4YWQsMHg0YSwweDAwLDB4ODIsMHgxMCwweDEwLDB4NDAsMHhiMSwweGFkLAotMHg4MCwweDBjLDB4NGMsMHgzNiwweDAwLDB4MDAsMHg4YSwweDhkLDB4ODIsMHg3MiwweDA1LDB4MDAsMHhmZiwweDAzLDB4Y2UsMHgzMSwKLTB4MDAsMHgwMiwweGMzLDB4MzEsMHgyNSwweDEwLDB4ZDMsMHgwMSwweDBiLDB4NzAsMHg0MywweDAwLDB4ODIsMHg4NSwweDBhLDB4MDAsCi0weDE4LDB4MDAsMHhkMCwweDAxLDB4ZmYsMHgwMywweGFmLDB4MzAsMHgwMCwweDAyLDB4YTMsMHgzMCwweDI1LDB4MTAsMHhmMywweDAxLAotMHgwYiwweDc4LDB4NDMsMHgwMCwweDAyLDB4NzUsMHgxMSwweDAwLDB4ZmYsMHgwMywweGNlLDB4MzEsMHhjMCwweGZmLDB4MDgsMHgzYywKLTB4MjUsMHgxOCwweGQzLDB4MDEsMHgwMCwweDAyLDB4YzIsMHgzMSwweDAwLDB4ZmMsMHgwNiwweDM1LDB4MGIsMHg3MCwweDYyLDB4MDAsCi0weDI0LDB4MzgsMHg0NiwweDAxLDB4OTQsMHgwYywweDRhLDB4MzYsMHhmZiwweDBmLDB4MDksMHgzYywweGZmLDB4ZmYsMHgyOSwweDM1LAotMHg4OCwweDBjLDB4NTQsMHgzNiwweDEyLDB4MjAsMHgwMCwweDAwLDB4MDIsMHgyMiwweDA0LDB4MDAsMHgzZiwweDAwLDB4ODIsMHgzMCwKLTB4MTgsMHgwMCwweGYwLDB4MDEsMHg4MiwweDdhLDB4MTEsMHgwMCwweGZmLDB4MDMsMHhlZiwweDMxLDB4MDAsMHgxNCwweDAyLDB4MDAsCi0weDI1LDB4MzgsMHhlMiwweDAwLDB4MDAsMHgwMiwweGUzLDB4MzEsMHgyNSwweDEwLDB4ZjMsMHgwMSwweDBiLDB4NzgsMHg0MywweDAwLAotMHhjMCwweDAzLDB4ODQsMHgzMCwweDgwLDB4MjUsMHgwNCwweDAwLDB4OWMsMHgwYywweDRiLDB4MzYsMHgxMiwweDI4LDB4MDAsMHgwMCwKLTB4MDIsMHgyYSwweDA1LDB4MDAsMHhmZiwweDAzLDB4YTIsMHgzMCwweDI1LDB4MTAsMHhlMiwweDAwLDB4MDAsMHgwMCwweDgyLDB4YWQsCi0weDAwLDB4MDAsMHg0MiwweDhkLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDEwLDB4NDksMHgwMCwweDI1LDB4MTAsMHg0NCwweDAwLAotMHgwMCwweDAwLDB4NDIsMHhhZCwweDAwLDB4MDAsMHg4YSwweDhlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDQwLDB4NDgsMHgwMSwKLTB4ODIsMHg4NSwweDA4LDB4MDAsMHgxOCwweDAwLDB4ZDAsMHgwMSwweDI0LDB4MzAsMHg0NiwweDAxLDB4MTIsMHgxOCwweDAwLDB4MDAsCi0weDAyLDB4MWEsMHgwMywweDAwLDB4M2YsMHgwMCwweDYyLDB4MzAsMHgxOCwweDAwLDB4ZjAsMHgwMSwweDAwLDB4MTQsMHgwMiwweDAwLAotMHgyNSwweDMwLDB4YzIsMHgwMCwweGMwLDB4MDMsMHg2MywweDMwLDB4ODAsMHgxZCwweDAzLDB4MDAsMHgxMiwweDIwLDB4MDAsMHgwMCwKLTB4MDIsMHgyMiwweDA0LDB4MDAsMHhmZiwweDAzLDB4ODIsMHgzMCwweDI1LDB4MTAsMHhjMiwweDAwLDB4MDAsMHgwMCwweDgyLDB4YWUsCi0weDAwLDB4MDAsMHg2MiwweDhkLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDEwLDB4NDksMHgwMCwweDI1LDB4MTAsMHg0MywweDAwLAotMHgwMCwweDAwLDB4NjIsMHhhZCwweDAwLDB4MTcsMHgxNiwweDAwLDB4MjUsMHhiMCwweDAzLDB4M2MsMHhkZCwweGRkLDB4NDIsMHgzNCwKLTB4YzQsMHgwMiwweDYzLDB4MzQsMHgwMCwweDAwLDB4NjIsMHhhYywweGVjLDB4NTIsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGUwLDB4ZmYsMHhiZCwweDI3LDB4NDQsMHgwMCwweDAyLDB4MjQsMHgxMCwweDAwLDB4YTIsMHhhMywweDQ5LDB4MDAsMHgwMywweDI0LAotMHg0NywweDAwLDB4MDIsMHgyNCwweDAyLDB4ODAsMHgwNywweDNjLDB4OGMsMHg5NywweGU3LDB4MjQsMHgxMSwweDAwLDB4YTMsMHhhMywKLTB4MTIsMHgwMCwweGEyLDB4YTMsMHgxMCwweDI3LDB4MDMsMHgyNCwweDAxLDB4MDAsMHgwMiwweDI0LDB4MDEsMHg4MCwweDA2LDB4M2MsCi0weDEwLDB4MDAsMHhhNSwweDI3LDB4MjEsMHgyMCwweGUwLDB4MDAsMHhlOCwweDUxLDB4YzYsMHgyNCwweDBjLDB4MDAsMHhlMywweGFjLAotMHgxNCwweDAwLDB4ZTIsMHhhMCwweDE4LDB4MDAsMHhiZiwweGFmLDB4ZmIsMHgwYywweDAwLDB4MGMsMHgxMywweDAwLDB4YTAsMHhhMywKLTB4MTgsMHgwMCwweGJmLDB4OGYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjAsMHgwMCwweGJkLDB4MjcsCi0weGQwLDB4ZmYsMHhiZCwweDI3LDB4MjUsMHhiMCwweDAyLDB4M2MsMHgyMCwweDAwLDB4YjQsMHhhZiwweDFjLDB4MDAsMHhiMywweGFmLAotMHgwMywweDBkLDB4NDQsMHgzNCwweDJjLDB4MDAsMHhiZiwweGFmLDB4MjgsMHgwMCwweGI2LDB4YWYsMHgyNCwweDAwLDB4YjUsMHhhZiwKLTB4MTgsMHgwMCwweGIyLDB4YWYsMHgxNCwweDAwLDB4YjEsMHhhZiwweDEwLDB4MDAsMHhiMCwweGFmLDB4MDAsMHgwMCwweDgzLDB4OTAsCi0weDQyLDB4MDAsMHg0NSwweDM0LDB4ZmYsMHgwMCwweDczLDB4MzAsMHg3MCwweDAwLDB4NzQsMHgzMiwweDI5LDB4MDAsMHg4MCwweDE2LAotMHg4ZiwweDAwLDB4NjIsMHgzMiwweGZmLDB4ZmYsMHgwMiwweDI0LDB4MDAsMHgwMCwweGEyLDB4YTAsMHgwMCwweDYwLDB4MDEsMHg0MCwKLTB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MGYsMHgwMCwweDExLDB4M2MsCi0weDE4LDB4MDAsMHgwNCwweDI0LDB4ZGQsMHg0NCwweDAwLDB4MGMsMHhmZiwweGZmLDB4MjUsMHgzNiwweDIxLDB4ODAsMHg0MCwweDAwLAotMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsMHhiMywweDBhLDB4MDAsMHgwYywKLTB4NjQsMHgwMCwweDA0LDB4MjQsMHgwMCwweDgwLDB4MDYsMHgzNiwweGZmLDB4ZmYsMHgyNSwweDM2LDB4YmEsMHg0NCwweDAwLDB4MGMsCi0weDE4LDB4MDAsMHgwNCwweDI0LDB4ODQsMHgwYSwweDAwLDB4MGMsMHgwMywweDAwLDB4MDQsMHgyNCwweDIxLDB4MzAsMHhhMCwweDAyLAotMHhmZiwweGZmLDB4MjUsMHgzNiwweDVjLDB4MDAsMHg4MCwweDE2LDB4MjEsMHgyMCwweDAwLDB4MDAsMHgyYywweDAwLDB4YmYsMHg4ZiwKLTB4MjgsMHgwMCwweGI2LDB4OGYsMHgyNCwweDAwLDB4YjUsMHg4ZiwweDIwLDB4MDAsMHhiNCwweDhmLDB4MWMsMHgwMCwweGIzLDB4OGYsCi0weDE4LDB4MDAsMHhiMiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwweDI1LDB4YjAsMHgwMiwweDNjLAotMHg0MiwweDAwLDB4NDIsMHgzNCwweDMwLDB4MDAsMHhiZCwweDI3LDB4MDAsMHgwMCwweDQwLDB4YTAsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ODIsMHhhMCwweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsCi0weDAxLDB4MDAsMHgyMSwweDM4LDB4MDAsMHg2MCwweDgxLDB4NDAsMHgwZiwweDAwLDB4MTEsMHgzYywweDIxLDB4MjAsMHgwMCwweDAwLAotMHhkZCwweDQ0LDB4MDAsMHgwYywweGZmLDB4ZmYsMHgyNSwweDM2LDB4MjEsMHhhOCwweDQwLDB4MDAsMHgwMCwweDYwLDB4MDEsMHg0MCwKLTB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMCwweDYwLDB4ODEsMHg0MCwweGIzLDB4MGEsMHgwMCwweDBjLDB4NjQsMHgwMCwweDA0LDB4MjQsCi0weDdhLDB4NDIsMHgwMCwweDBjLDB4MDEsMHgwMCwweDA0LDB4MjQsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LAotMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MjEsMHgyMCwweDAwLDB4MDAsMHhkZCwweDQ0LDB4MDAsMHgwYywKLTB4ZmYsMHhmZiwweDI1LDB4MzYsMHgyMSwweGIwLDB4NDAsMHgwMCwweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsCi0weDAwLDB4NjAsMHg4MSwweDQwLDB4NjQsMHgwMCwweDA0LDB4MjQsMHhiMywweDBhLDB4MDAsMHgwYywweDA4LDB4MDAsMHgxMCwweDNjLAotMHhmZiwweGZmLDB4MTAsMHgzNiwweDdhLDB4NDIsMHgwMCwweDBjLDB4MjEsMHgyMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4MTIsMHgzYywKLTB4MjQsMHgzMCwweGIwLDB4MDIsMHgyNSwweDMwLDB4ZDIsMHgwMCwweGZmLDB4ZmYsMHgyNSwweDM2LDB4YmEsMHg0NCwweDAwLDB4MGMsCi0weDIxLDB4MjAsMHgwMCwweDAwLDB4YjMsMHgwYSwweDAwLDB4MGMsMHg2NCwweDAwLDB4MDQsMHgyNCwweDI0LDB4ODAsMHhkMCwweDAyLAotMHg3YSwweDQyLDB4MDAsMHgwYywweDAxLDB4MDAsMHgwNCwweDI0LDB4MjUsMHgzMCwweDEyLDB4MDIsMHhmZiwweGZmLDB4MjUsMHgzNiwKLTB4YmEsMHg0NCwweDAwLDB4MGMsMHgyMSwweDIwLDB4MDAsMHgwMCwweGIzLDB4MGEsMHgwMCwweDBjLDB4NjQsMHgwMCwweDA0LDB4MjQsCi0weDdhLDB4NDIsMHgwMCwweDBjLDB4MjEsMHgyMCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDEsMHg0MCwweDAxLDB4MDAsMHgyMSwweDM0LAotMHgwMSwweDAwLDB4MjEsMHgzOCwweDAwLDB4NjAsMHg4MSwweDQwLDB4MGYsMHgwMCwweDExLDB4M2MsMHgxOCwweDAwLDB4MDQsMHgyNCwKLTB4ZGQsMHg0NCwweDAwLDB4MGMsMHhmZiwweGZmLDB4MjUsMHgzNiwweDIxLDB4ODAsMHg0MCwweDAwLDB4MDAsMHg2MCwweDAxLDB4NDAsCi0weDAxLDB4MDAsMHgyMSwweDM0LDB4MDAsMHg2MCwweDgxLDB4NDAsMHhiMywweDBhLDB4MDAsMHgwYywweDY0LDB4MDAsMHgwNCwweDI0LAotMHgwMCwweDgwLDB4MDYsMHgzNiwweGZmLDB4ZmYsMHgyNSwweDM2LDB4YmEsMHg0NCwweDAwLDB4MGMsMHgxOCwweDAwLDB4MDQsMHgyNCwKLTB4ODQsMHgwYSwweDAwLDB4MGMsMHgwMywweDAwLDB4MDQsMHgyNCwweDIxLDB4MzAsMHhhMCwweDAyLDB4ZmYsMHhmZiwweDI1LDB4MzYsCi0weGE2LDB4ZmYsMHg4MCwweDEyLDB4MjEsMHgyMCwweDAwLDB4MDAsMHgyNSwweGIwLDB4MDIsMHgzYywweDAzLDB4MGQsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4NTMsMHhhMCwweGJhLDB4NDQsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhiMywweDBhLDB4MDAsMHgwYywKLTB4NjQsMHgwMCwweDA0LDB4MjQsMHg3YSwweDQyLDB4MDAsMHgwYywweDAxLDB4MDAsMHgwNCwweDI0LDB4ZmYsMHhmZiwweDI1LDB4MzYsCi0weDIxLDB4MzAsMHhjMCwweDAyLDB4YmEsMHg0NCwweDAwLDB4MGMsMHgyMSwweDIwLDB4MDAsMHgwMCwweGIzLDB4MGEsMHgwMCwweDBjLAotMHg2NCwweDAwLDB4MDQsMHgyNCwweDJjLDB4MDAsMHhiZiwweDhmLDB4MjgsMHgwMCwweGI2LDB4OGYsMHgyNCwweDAwLDB4YjUsMHg4ZiwKLTB4MjAsMHgwMCwweGI0LDB4OGYsMHgxYywweDAwLDB4YjMsMHg4ZiwweDE4LDB4MDAsMHhiMiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsCi0weDEwLDB4MDAsMHhiMCwweDhmLDB4MjEsMHgyMCwweDAwLDB4MDAsMHg3YSwweDQyLDB4MDAsMHgwOCwweDMwLDB4MDAsMHhiZCwweDI3LAotMHhkMCwweGZmLDB4YmQsMHgyNywweDI4LDB4MDAsMHhiNCwweGFmLDB4MDIsMHg4MCwweDE0LDB4M2MsMHgyYywweDAwLDB4YmYsMHhhZiwKLTB4MjQsMHgwMCwweGIzLDB4YWYsMHgyMCwweDAwLDB4YjIsMHhhZiwweDFjLDB4MDAsMHhiMSwweGFmLDB4MTgsMHgwMCwweGIwLDB4YWYsCi0weDY4LDB4MTUsMHg4NiwweDI2LDB4MGMsMHg0MCwweGMyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgyLDB4MTcsMHgwMiwweDAwLAotMHgwMSwweDAwLDB4NDIsMHgzMCwweDA3LDB4MDAsMHg0MCwweDE0LDB4NjgsMHgxNSwweDg1LDB4MjYsMHgwOCwweDQwLDB4YzIsMHg4YywKLTB4MDEsMHgwMCwweDAzLDB4MjQsMHg0MiwweDE3LDB4MDIsMHgwMCwweDAzLDB4MDAsMHg0MiwweDMwLDB4ZjAsMHgwMCwweDQzLDB4MTAsCi0weDI1LDB4YjAsMHgwMiwweDNjLDB4MGMsMHg0MCwweGEyLDB4OGMsMHgwMSwweDAwLDB4MDMsMHgyNCwweDgyLDB4MTcsMHgwMiwweDAwLAotMHgwMSwweDAwLDB4NDQsMHgzMCwweDBhLDB4MDAsMHg4MywweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyYywweDAwLDB4YmYsMHg4ZiwKLTB4MjgsMHgwMCwweGI0LDB4OGYsMHgyNCwweDAwLDB4YjMsMHg4ZiwweDIwLDB4MDAsMHhiMiwweDhmLDB4MWMsMHgwMCwweGIxLDB4OGYsCi0weDE4LDB4MDAsMHhiMCwweDhmLDB4MjEsMHgxMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDMwLDB4MDAsMHhiZCwweDI3LAotMHgwOCwweDQwLDB4YTIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4NDIsMHgxNywweDAyLDB4MDAsMHgwMywweDAwLDB4NDIsMHgzMCwKLTB4ZjIsMHhmZiwweDQ0LDB4MTQsMHgyNSwweGIwLDB4MDIsMHgzYywweDBlLDB4MGMsMHg0NCwweDM0LDB4MDAsMHgwMCwweDgzLDB4OTAsCi0weDAwLDB4MDEsMHgwMiwweDI0LDB4ZmYsMHgwMCwweDYzLDB4MzAsMHgwMSwweDAwLDB4NjMsMHgyNCwweDhiLDB4MDEsMHg2MiwweDEwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MywweGEwLDB4NjgsMHgxNSwweDg0LDB4MjYsMHgxMCwweDQwLDB4ODIsMHg4YywKLTB4MDEsMHgwMCwweDAzLDB4MjQsMHg4MiwweDE3LDB4MDIsMHgwMCwweGE0LDB4MDEsMHg0MywweDEwLDB4MGYsMHgwMCwweDEwLDB4M2MsCi0weGM3LDB4NDIsMHg5MiwweDkwLDB4NjgsMHgxNSwweDkwLDB4MjYsMHhjNiwweDQyLDB4MDMsMHg5MiwweDI1LDB4YjAsMHgxMSwweDNjLAotMHg2MiwweDBjLDB4MjIsMHgzNiwweDAwLDB4MDAsMHg1MiwweGEwLDB4MTcsMHgwMSwweDYwLDB4MTAsMHgwMSwweDAwLDB4MDIsMHgyNCwKLTB4MDMsMHgwZCwweDIzLDB4MzYsMHgwMCwweDAwLDB4NjIsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NzAsMHgwMCwweDQyLDB4MzAsCi0weDNlLDB4MDEsMHg0MCwweDE0LDB4NjMsMHgwYywweDIzLDB4MzYsMHhjNCwweDQyLDB4MDIsMHg5NiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyMywweDIwLDB4NTIsMHgwMCwweDJiLDB4MTgsMHg1MiwweDAwLDB4MjMsMHgxMCwweDQyLDB4MDIsMHgwYSwweDEwLDB4ODMsMHgwMCwKLTB4MDMsMHgwMCwweDQyLDB4MmMsMHgwYiwweDAxLDB4NDAsMHgxMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YzQsMHg0MiwweDAzLDB4OTYsCi0weDYzLDB4MGMsMHgyMiwweDM2LDB4MDAsMHgwMCwweDQzLDB4YTAsMHg2OCwweDE1LDB4ODMsMHgyNiwweGMzLDB4NDIsMHg2MiwweDkwLAotMHgwOCwweDQwLDB4NjYsMHg4YywweGMyLDB4NDIsMHg3MiwweGEwLDB4MjMsMHgyMCwweDUyLDB4MDAsMHgyYiwweDM4LDB4NDIsMHgwMiwKLTB4MjMsMHg1MCwweDQyLDB4MDIsMHgwMiwweDJjLDB4MDYsMHgwMCwweDBiLDB4NTAsMHg4NywweDAwLDB4M2YsMHgwMCwweGE1LDB4MzAsCi0weDNmLDB4MDAsMHhjNCwweDMwLDB4MjQsMHgwMCwweDAyLDB4MjQsMHgyMCwweDAwLDB4MDMsMHgyNCwweDIzLDB4MTAsMHg0NCwweDAwLAotMHgyZCwweDAxLDB4NDAsMHgxNSwweDIzLDB4MTgsMHg2NSwweDAwLDB4MjEsMHgzMCwweDgwLDB4MDAsMHgyMSwweDQ4LDB4YTAsMHgwMCwKLTB4MDIsMHg4MCwweDBiLDB4M2MsMHg2OCwweDE1LDB4ODMsMHgyNiwweDgwLDB4MTAsMHgwNiwweDAwLDB4MjEsMHgxMCwweDQzLDB4MDAsCi0weDBjLDB4NDAsMHg2MywweDhjLDB4MTgsMHg0MCwweDQ0LDB4OGMsMHhmZiwweDAzLDB4NjcsMHgzMCwweDFiLDB4MDEsMHhlMCwweDEwLAotMHg4MiwweDJkLDB4MDQsMHgwMCwweDAwLDB4MDIsMHg2MiwweDMwLDB4MDQsMHgwMCwweDQwLDB4MTAsMHgxOCwweDAwLDB4ZTUsMHgwMCwKLTB4MDAsMHhmYywweDAyLDB4MjQsMHgyNSwweDM4LDB4ZTIsMHgwMCwweDE4LDB4MDAsMHhlNSwweDAwLDB4ODIsMHgyMiwweDAzLDB4MDAsCi0weGZmLDB4MDMsMHg4NCwweDMwLDB4MDAsMHgwMiwweDgzLDB4MzAsMHgxMiwweDEwLDB4MDAsMHgwMCwweDAyLDB4MTIsMHgwMiwweDAwLAotMHgwMywweDAwLDB4NjAsMHgxMCwweGZmLDB4MDMsMHg0OCwweDMwLDB4MDAsMHhmYywweDAyLDB4MjQsMHgyNSwweDIwLDB4ODIsMHgwMCwKLTB4MTgsMHgwMCwweDg1LDB4MDAsMHg4MCwweDJkLDB4MDUsMHgwMCwweDI1LDB4YjAsMHgwNiwweDNjLDB4ODAsMHgwYywweGM3LDB4MzQsCi0weDk0LDB4MGMsMHhjNiwweDM0LDB4MTIsMHgyMCwweDAwLDB4MDAsMHgwMiwweDIyLDB4MDQsMHgwMCwweDNmLDB4MDAsMHg4MiwweDMwLAotMHgwMCwweDE0LDB4MDIsMHgwMCwweDI1LDB4MjgsMHhhMiwweDAwLDB4MjUsMHgyOCwweGE4LDB4MDAsMHgxMCwweDAwLDB4YTUsMHhhZiwKLTB4MDAsMHgwMCwweGU1LDB4YWMsMHgwMCwweDAwLDB4YzMsMHg4YywweGZmLDB4MGYsMHgwMiwweDNjLDB4YzAsMHgwMywweDg0LDB4MzAsCi0weGZmLDB4ZmYsMHg0MiwweDM0LDB4ODAsMHgyNSwweDA0LDB4MDAsMHgyNCwweDE4LDB4NjIsMHgwMCwweDI1LDB4MTgsMHg2NCwweDAwLAotMHgxMCwweDAwLDB4YTMsMHhhZiwweDAwLDB4MDAsMHhjMywweGFjLDB4NjgsMHgxNSwweDgzLDB4MjYsMHgwOCwweDQwLDB4NjIsMHg4YywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAxLDB4NDAsMHgwNCwweGMwLDB4MjgsMHgwOSwweDAwLDB4MjEsMHgyOCwweGEzLDB4MDAsCi0weGFjLDB4NDAsMHhhMywweDkwLDB4MjUsMHhiMCwweDA0LDB4M2MsMHgyMiwweDBhLDB4ODIsMHgzNCwweDAwLDB4MDAsMHg0MywweGEwLAotMHhhZCwweDQwLDB4YTYsMHg5MCwweDIzLDB4MGEsMHg4MiwweDM0LDB4MjQsMHgwYSwweDg3LDB4MzQsMHgwMCwweDAwLDB4NDYsMHhhMCwKLTB4YWUsMHg0MCwweGEzLDB4OTAsMHgyNSwweDBhLDB4ODYsMHgzNCwweDI2LDB4MGEsMHg4OCwweDM0LDB4MDAsMHgwMCwweGUzLDB4YTAsCi0weGFmLDB4NDAsMHhhMiwweDkwLDB4MjcsMHgwYSwweDg3LDB4MzQsMHgyOCwweDBhLDB4ODksMHgzNCwweDAwLDB4MDAsMHhjMiwweGEwLAotMHhiMCwweDQwLDB4YTMsMHg5MCwweDI5LDB4MGEsMHg4NCwweDM0LDB4MDAsMHgwMCwweDAzLDB4YTEsMHhiMSwweDQwLDB4YTIsMHg5MCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTIsMHhhMCwweGIyLDB4NDAsMHhhMywweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgyMywweGExLDB4YjMsMHg0MCwweGEyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MiwweGEwLAotMHg4ZSwweDdkLDB4NjMsMHg5MSwweDIyLDB4MDAsMHgwMiwweDI0LDB4MDMsMHgwMCwweDYyLDB4MTAsMHg5MiwweDAwLDB4MDIsMHgyNCwKLTB4NjIsMHhmZiwweDYyLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDY4LDB4MTUsMHg4MiwweDI2LDB4MDgsMHg0MCwweDQzLDB4OGMsCi0weDAxLDB4MDAsMHg0NCwweDM5LDB4MjQsMHgwMCwweDAyLDB4MjQsMHgwMiwweDFhLDB4MDMsMHgwMCwweDNmLDB4MDAsMHg2MywweDMwLAotMHgwMSwweDAwLDB4ODQsMHgzMCwweDA0LDB4MDEsMHg4MCwweDEwLDB4MjMsMHgyOCwweDQzLDB4MDAsMHg0MiwweDE4LDB4MGEsMHgwMCwKLTB4NDAsMHgxMCwweDAzLDB4MDAsMHgyMSwweDUwLDB4NDMsMHgwMCwweDY4LDB4MTUsMHg4MywweDI2LDB4YzMsMHg0MiwweDYyLDB4OTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MmIsMHgxMCwweDQyLDB4MDIsMHgwOCwweDAxLDB4NDAsMHgxMCwweDIxLDB4MjAsMHgwMCwweDAwLAotMHgyYiwweDEwLDB4NDUsMHgwMSwweDA3LDB4MDAsMHg0MCwweDEwLDB4MjQsMHgwMCwweDA0LDB4MjQsMHgwOCwweDQwLDB4NjIsMHg4YywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDEyLDB4MDIsMHgwMCwweDNmLDB4MDAsMHg0MiwweDMwLDB4MjEsMHgyMCwweDRhLDB4MDAsCi0weDY4LDB4MTUsMHg4MywweDI2LDB4ODAsMHgxMCwweDA0LDB4MDAsMHgxMCwweDQwLDB4NjYsMHg4YywweDIxLDB4MTAsMHg0MywweDAwLAotMHgxOCwweDQwLDB4NDQsMHg4YywweDgyLDB4M2EsMHgwNiwweDAwLDB4ZmYsMHgwMywweGU3LDB4MzAsMHhmMCwweDAwLDB4ZTAsMHgxMCwKLTB4ODIsMHgyZCwweDA0LDB4MDAsMHgwMCwweDAyLDB4ZTIsMHgzMCwweDA0LDB4MDAsMHg0MCwweDEwLDB4MTgsMHgwMCwweGU1LDB4MDAsCi0weDAwLDB4ZmMsMHgwMiwweDI0LDB4MjUsMHgzOCwweGUyLDB4MDAsMHgxOCwweDAwLDB4ZTUsMHgwMCwweDAyLDB4MjUsMHgwNiwweDAwLAotMHhmZiwweDAzLDB4ODQsMHgzMCwweDAwLDB4MDIsMHg4MywweDMwLDB4MTIsMHgxMCwweDAwLDB4MDAsMHgwMiwweDEyLDB4MDIsMHgwMCwKLTB4MDMsMHgwMCwweDYwLDB4MTAsMHhmZiwweDAzLDB4NDgsMHgzMCwweDAwLDB4ZmMsMHgwMiwweDI0LDB4MjUsMHgyMCwweDgyLDB4MDAsCi0weDE4LDB4MDAsMHg4NSwweDAwLDB4ODAsMHgyZCwweDA1LDB4MDAsMHgyNSwweGIwLDB4MDYsMHgzYywweDg4LDB4MGMsMHhjNywweDM0LAotMHg5YywweDBjLDB4YzYsMHgzNCwweDEyLDB4MjAsMHgwMCwweDAwLDB4MDIsMHgyMiwweDA0LDB4MDAsMHgzZiwweDAwLDB4ODIsMHgzMCwKLTB4MDAsMHgxNCwweDAyLDB4MDAsMHgyNSwweDI4LDB4YTIsMHgwMCwweDI1LDB4MjgsMHhhOCwweDAwLDB4MTAsMHgwMCwweGE1LDB4YWYsCi0weDAwLDB4MDAsMHhlNSwweGFjLDB4MDAsMHgwMCwweGMzLDB4OGMsMHhmZiwweDBmLDB4MDIsMHgzYywweGMwLDB4MDMsMHg4NCwweDMwLAotMHhmZiwweGZmLDB4NDIsMHgzNCwweDgwLDB4MjUsMHgwNCwweDAwLDB4MjQsMHgxOCwweDYyLDB4MDAsMHgyNSwweDE4LDB4NjQsMHgwMCwKLTB4MTAsMHgwMCwweGEzLDB4YWYsMHgwMCwweDAwLDB4YzMsMHhhYywweDk1LDB4NTQsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDgwLDB4MGMsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4OGMsMHhjMCwweGZmLDB4MDIsMHgzYywweDIxLDB4ODgsMHgwMCwweDAwLAotMHgyNCwweDI4LDB4NjIsMHgwMCwweGMwLDB4ZmYsMHgwNCwweDNjLDB4OGEsMHg1NSwweDAwLDB4MDgsMHgxOCwweDQwLDB4YzMsMHgyNCwKLTB4MDEsMHgwMCwweDMxLDB4MjYsMHgyNSwweDAwLDB4MjIsMHgyZSwweDBkLDB4MDAsMHg0MCwweDEwLDB4MDIsMHg4MCwweDBiLDB4M2MsCi0weDAwLDB4MDAsMHg2MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDEwLDB4NDQsMHgwMCwweGY4LDB4ZmYsMHg0NSwweDE0LAotMHgwNCwweDAwLDB4NjMsMHgyNCwweDA4LDB4NDAsMHhjMiwweDhjLDB4YzAsMHhmZiwweDAzLDB4MjQsMHgzZiwweDAwLDB4MjQsMHgzMiwKLTB4MjQsMHgxMCwweDQzLDB4MDAsMHgyNSwweDEwLDB4NDQsMHgwMCwweDA4LDB4NDAsMHhjMiwweGFjLDB4MDIsMHg4MCwweDBiLDB4M2MsCi0weDhlLDB4N2QsMHg2MywweDkxLDB4MjIsMHgwMCwweDAyLDB4MjQsMHgzZSwweDAwLDB4NjIsMHgxMCwweDkyLDB4MDAsMHgwMiwweDI0LAotMHgzZCwweDAwLDB4NjIsMHgxMCwweDI1LDB4YjAsMHgwMiwweDNjLDB4MjUsMHhiMCwweDAyLDB4M2MsMHgyNCwweDBhLDB4NDIsMHgzNCwKLTB4MDAsMHgwMCwweDQ0LDB4OGMsMHgzZiwweDNmLDB4MDMsMHgzYywweDNmLDB4M2YsMHg2MywweDM0LDB4MjQsMHgyMCwweDgzLDB4MDAsCi0weDAyLDB4ODAsMHgwMiwweDNjLDB4MDIsMHg4MCwweDAzLDB4M2MsMHgxNiwweDU2LDB4NTMsMHgyNCwweDFlLDB4NTcsMHg3MiwweDI0LAotMHgyMSwweDg4LDB4MDAsMHgwMCwweGIxLDB4NTUsMHgwMCwweDA4LDB4MTAsMHgwMCwweGE0LDB4YWYsMHhkNCwweDQ1LDB4MDAsMHgwYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg0NywweDAwLDB4NDAsMHgxMCwweDY4LDB4MTUsMHg4NSwweDI2LDB4MDEsMHgwMCwweDMxLDB4MjYsCi0weDIxLDB4MDAsMHgyMiwweDJlLDB4MTcsMHgwMCwweDQwLDB4MTAsMHg2OCwweDE1LDB4ODQsMHgyNiwweGMwLDB4ODAsMHgxMSwweDAwLAotMHgxMCwweDAwLDB4YTQsMHgyNywweDIxLDB4MjgsMHgxMywweDAyLDB4ZDQsMHg0NSwweDAwLDB4MGMsMHgwNCwweDAwLDB4MDYsMHgyNCwKLTB4MjEsMHgyOCwweDEyLDB4MDIsMHgxMCwweDAwLDB4YTQsMHgyNywweGYwLDB4ZmYsMHg0MCwweDE0LDB4MDQsMHgwMCwweDA2LDB4MjQsCi0weDY4LDB4MTUsMHg4NSwweDI2LDB4MDgsMHg0MCwweGEzLDB4OGMsMHhjMCwweGZmLDB4MDIsMHgzYywweGZmLDB4ZmYsMHg0MiwweDM0LAotMHgzZiwweDAwLDB4MjQsMHgzMiwweDI0LDB4MTgsMHg2MiwweDAwLDB4MDAsMHgyNCwweDA0LDB4MDAsMHhmZiwweDdmLDB4MDIsMHgzYywKLTB4MjUsMHgxOCwweDY0LDB4MDAsMHhmZiwweGZmLDB4NDIsMHgzNCwweDI0LDB4MTgsMHg2MiwweDAwLDB4MDgsMHg0MCwweGEzLDB4YWMsCi0weDY4LDB4MTUsMHg4NCwweDI2LDB4MGMsMHg0MCwweDgzLDB4OGMsMHgwMCwweDQwLDB4MDIsMHgzYywweDI1LDB4MTgsMHg2MiwweDAwLAotMHgyNSwweGIwLDB4MDIsMHgzYywweDBlLDB4MGMsMHg0MiwweDM0LDB4MGMsMHg0MCwweDgzLDB4YWMsMHgwMCwweDAwLDB4NDAsMHhhMCwKLTB4OGYsMHg1NCwweDAwLDB4MDgsMHg2OCwweDE1LDB4ODUsMHgyNiwweGM2LDB4NDIsMHgwMiwweGEyLDB4YmEsMHg1NCwweDAwLDB4MDgsCi0weGM0LDB4NDIsMHgxMiwweGE2LDB4ZGEsMHg1MywweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweGM5LDB4NTQsMHgwMCwweDA4LAotMHhjNCwweDQyLDB4MTIsMHhhNiwweDI1LDB4YjAsMHgwMiwweDNjLDB4ODgsMHgwYywweDQyLDB4MzQsMHgwMCwweDAwLDB4NDQsMHg4YywKLTB4MDIsMHg4MCwweDAzLDB4M2MsMHg2OCwweDE1LDB4NjYsMHgyNCwweGMwLDB4ZmYsMHgwMiwweDNjLDB4MjQsMHgyOCwweDgyLDB4MDAsCi0weDIxLDB4ODgsMHgwMCwweDAwLDB4YzAsMHhmZiwweDA0LDB4M2MsMHhlNiwweDU1LDB4MDAsMHgwOCwweDE4LDB4NDAsMHhjMywweDI0LAotMHgwMSwweDAwLDB4MzEsMHgyNiwweDI1LDB4MDAsMHgyMiwweDJlLDB4YjgsMHhmZiwweDQwLDB4MTAsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4MDAsMHgwMCwweDYyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MTAsMHg0NCwweDAwLDB4ZjgsMHhmZiwweDQ1LDB4MTQsCi0weDA0LDB4MDAsMHg2MywweDI0LDB4MDgsMHg0MCwweGMyLDB4OGMsMHgzZiwweDAwLDB4MjMsMHgzMiwweGZmLDB4YzAsMHgwNCwweDI0LAotMHgyNCwweDEwLDB4NDQsMHgwMCwweDAwLDB4MWEsMHgwMywweDAwLDB4MjUsMHgxMCwweDQzLDB4MDAsMHg5YywweDU1LDB4MDAsMHgwOCwKLTB4MDgsMHg0MCwweGMyLDB4YWMsMHgwOCwweDQwLDB4YTMsMHg4YywweGMwLDB4ZmYsMHgwMiwweDNjLDB4ZmYsMHhmZiwweDQyLDB4MzQsCi0weDNmLDB4MDAsMHgyNCwweDMyLDB4MjQsMHgxOCwweDYyLDB4MDAsMHgwMCwweDI0LDB4MDQsMHgwMCwweDI1LDB4MTgsMHg2NCwweDAwLAotMHgwMCwweDgwLDB4MDIsMHgzYywweGM1LDB4NTUsMHgwMCwweDA4LDB4MjUsMHgxOCwweDYyLDB4MDAsMHhjYywweGZmLDB4MDIsMHgyNCwKLTB4MDAsMHgwMCwweDYyLDB4YTAsMHhjZCwweDU0LDB4MDAsMHgwOCwweDY4LDB4MTUsMHg4MywweDI2LDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weDk0LDB4MGMsMHg0MywweDM0LDB4ODAsMHgwYywweDQyLDB4MzQsMHgwMCwweDAwLDB4NDQsMHhhYywweDAwLDB4MDAsMHg2MCwweGFjLAotMHgwZCwweDU1LDB4MDAsMHgwOCwweDY4LDB4MTUsMHg4MywweDI2LDB4MmYsMHgwMCwweGUwLDB4MTAsMHgyMSwweDMwLDB4MDAsMHgwMCwKLTB4MmIsMHgxMCwweDQyLDB4MDEsMHgyMSwweDIwLDB4OGEsMHgwMCwweDAwLDB4MDAsMHg0MiwweDM4LDB4MjQsMHgwMCwweDA2LDB4MjQsCi0weDJiLDB4MTgsMHg0MywweDAxLDB4MGIsMHgzMCwweDgyLDB4MDAsMHhjZCwweGZlLDB4NjAsMHgxMCwweDIwLDB4MDAsMHgwOSwweDI0LAotMHg2OCwweDE1LDB4ODMsMHgyNiwweDBhLDB4NDAsMHg2MiwweDk0LDB4MDIsMHg4MCwweDBiLDB4M2MsMHgzZiwweDAwLDB4NDIsMHgzMCwKLTB4ZTAsMHg1NCwweDAwLDB4MDgsMHgyMSwweDQ4LDB4NGEsMHgwMCwweDIxLDB4MjgsMHhhMywweDAwLDB4YjQsMHg0MSwweGEzLDB4OTAsCi0weDI1LDB4YjAsMHgwNCwweDNjLDB4MjIsMHgwYSwweDgyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhMCwweGI1LDB4NDEsMHhhNiwweDkwLAotMHgyMywweDBhLDB4ODIsMHgzNCwweDI0LDB4MGEsMHg4NywweDM0LDB4MDAsMHgwMCwweDQ2LDB4YTAsMHhiNiwweDQxLDB4YTMsMHg5MCwKLTB4MjUsMHgwYSwweDg2LDB4MzQsMHgyNiwweDBhLDB4ODgsMHgzNCwweDAwLDB4MDAsMHhlMywweGEwLDB4YjcsMHg0MSwweGEyLDB4OTAsCi0weDI3LDB4MGEsMHg4NywweDM0LDB4MjgsMHgwYSwweDg5LDB4MzQsMHgwMCwweDAwLDB4YzIsMHhhMCwweGI4LDB4NDEsMHhhMywweDkwLAotMHgyOSwweDBhLDB4ODQsMHgzNCwweDAwLDB4MDAsMHgwMywweGExLDB4YjksMHg0MSwweGEyLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweGUyLDB4YTAsMHhiYSwweDQxLDB4YTMsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIzLDB4YTEsCi0weGJiLDB4NDEsMHhhMiwweDkwLDB4MmQsMHg1NSwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweGEwLAotMHhhZCwweDU0LDB4MDAsMHgwOCwweDY4LDB4MTUsMHg4NCwweDI2LDB4MjMsMHgxMCwweDhhLDB4MDAsMHgyYiwweDE4LDB4NDQsMHgwMSwKLTB4MmIsMHgyMCwweDQ1LDB4MDEsMHgwYiwweDMwLDB4NDMsMHgwMCwweGExLDB4ZmUsMHg4MCwweDE0LDB4MjMsMHg0OCwweGFhLDB4MDAsCi0weGRlLDB4NTQsMHgwMCwweDA4LDB4MjEsMHg0OCwweDAwLDB4MDAsMHhmZiwweGZmLDB4NDMsMHgyNSwweDQyLDB4MTgsMHgwMywweDAwLAotMHg0MCwweDEwLDB4MDMsMHgwMCwweDIxLDB4MTAsMHg0MywweDAwLDB4NDAsMHg1NSwweDAwLDB4MDgsMHgwMSwweDAwLDB4NGEsMHgyNCwKLTB4MjUsMHhiMCwweDAyLDB4M2MsMHg5YywweDBjLDB4NDMsMHgzNCwweDg4LDB4MGMsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQ0LDB4YWMsCi0weDAwLDB4MDAsMHg2MCwweGFjLDB4OTUsMHg1NCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4NDAsMHg2MiwweDhjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4MTIsMHgwMiwweDAwLDB4M2YsMHgwMCwweDQyLDB4MzAsMHgyMywweDE4LDB4NGEsMHgwMCwKLTB4MmIsMHgxMCwweDQyLDB4MDEsMHg0ZSwweDU1LDB4MDAsMHgwOCwweDBiLDB4MjAsMHg2MiwweDAwLDB4ZmYsMHhmZiwweDA1LDB4MzYsCi0weDYwLDB4MDAsMHgwNiwweDI0LDB4YmEsMHg0NCwweDAwLDB4MGMsMHgyNCwweDAwLDB4MDQsMHgyNCwweDg0LDB4MGEsMHgwMCwweDBjLAotMHhlOCwweDAzLDB4MDQsMHgyNCwweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMSwweDAwLDB4MjEsMHgzOCwKLTB4MDAsMHg2MCwweDgxLDB4NDAsMHgyNCwweDAwLDB4MDQsMHgyNCwweGRkLDB4NDQsMHgwMCwweDBjLDB4ZmYsMHhmZiwweDA1LDB4MzYsCi0weDFmLDB4MDAsMHg1MiwweDMwLDB4MDAsMHg2MCwweDAxLDB4NDAsMHgwMSwweDAwLDB4MjEsMHgzNCwweDAwLDB4NjAsMHg4MSwweDQwLAotMHhiMywweDBhLDB4MDAsMHgwYywweDY0LDB4MDAsMHgwNCwweDI0LDB4YjQsMHg1NCwweDAwLDB4MDgsMHg2OCwweDE1LDB4OTAsMHgyNiwKLTB4MDAsMHhmZiwweDg0LDB4MzAsMHgwMiwweDIyLDB4MDQsMHgwMCwweDA4LDB4MDAsMHg4MCwweDEwLDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weGZmLDB4MDAsMHgwMiwweDI0LDB4MDQsMHgwMCwweDgyLDB4MTAsMHhjYywweGZmLDB4MDMsMHgyNCwweDAyLDB4ODAsMHgwMiwweDNjLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDRlLDB4NTgsMHg0MywweGEwLDB4MDIsMHg4MCwweDAyLDB4M2MsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4NGUsMHg1OCwweDQ0LDB4YTAsMHgwMiwweDI0LDB4MDQsMHgwMCwweGZmLDB4MDAsMHg4NCwweDMwLDB4YzAsMHgxMCwweDA0LDB4MDAsCi0weDIxLDB4MTAsMHg0NCwweDAwLDB4ODAsMHgxMCwweDAyLDB4MDAsMHgyMSwweDEwLDB4NDQsMHgwMCwweDAyLDB4ODAsMHgwMywweDNjLAotMHg4MCwweDEwLDB4MDIsMHgwMCwweDY4LDB4MTUsMHg2MywweDI0LDB4MjAsMHgwMCwweDg0LDB4MmMsMHgwOSwweDAwLDB4ODAsMHgxMCwKLTB4MjEsMHgxMCwweDQzLDB4MDAsMHg2OCwweDUxLDB4NDMsMHg4YywweDI1LDB4YjAsMHgwMiwweDNjLDB4YzQsMHgwMiwweDQyLDB4MzQsCi0weDAyLDB4MTksMHgwMywweDAwLDB4N2YsMHgwMCwweDYzLDB4MzAsMHgwMCwweDAwLDB4NDMsMHhhYywweDA4LDB4MDAsMHhlMCwweDAzLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4ODAsMHgwMiwweDNjLDB4NDQsMHg3OSwweDQzLDB4OGMsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4YzQsMHgwMiwweDQyLDB4MzQsMHgwMiwweDE5LDB4MDMsMHgwMCwweDdmLDB4MDAsMHg2MywweDMwLDB4MDAsMHgwMCwweDQzLDB4YWMsCi0weDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweDAwLDB4ODUsMHgzMCwweGQyLDB4ZmYsMHhhMywweDI0LAotMHhmZSwweGZmLDB4YTIsMHgyNCwweGRhLDB4ZmYsMHhhNCwweDI0LDB4MDQsMHgwMCwweDYzLDB4MmMsMHgwOCwweDAwLDB4ODQsMHgyYywKLTB4MDYsMHgwMCwweDYwLDB4MTQsMHhmZiwweDAwLDB4NDIsMHgzMCwweGYwLDB4ZmYsMHhhMiwweDI0LDB4ZmMsMHhmZiwweGEzLDB4MjQsCi0weDE2LDB4MDAsMHg0NiwweDJjLDB4MDMsMHgwMCwweDgwLDB4MTAsMHhmZiwweDAwLDB4NjIsMHgzMCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGZhLDB4ZmYsMHhhMywweDI0LDB4ZmMsMHhmZiwweGMwLDB4MTAsMHgyMSwweDEwLDB4YTAsMHgwMCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHhmZiwweDAwLDB4NjIsMHgzMCwweDI1LDB4YjAsMHgwNCwweDNjLDB4MDMsMHgwZCwweDg1LDB4MzQsCi0weDAwLDB4MDAsMHhhMywweDkwLDB4MmQsMHgwYSwweDg0LDB4MzQsMHhmZiwweDAwLDB4NjMsMHgzMCwweDA4LDB4MDAsMHg2MywweDM0LAotMHgwMCwweDAwLDB4YTMsMHhhMCwweDAwLDB4MDAsMHhhMiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhmNywweDAwLDB4NDIsMHgzMCwKLTB4MDAsMHgwMCwweGEyLDB4YTAsMHgwMCwweDAwLDB4ODMsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4M2YsMHgwMCwweDYzLDB4MzAsCi0weDAwLDB4MDAsMHg4MywweGEwLDB4MDAsMHgwMCwweDgyLDB4OTAsMHg4MCwweGZmLDB4MDMsMHgyNCwweDI1LDB4MTAsMHg0MywweDAwLAotMHgwMCwweDAwLDB4ODIsMHhhMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4ZmYsMHgwMCwweDAzLDB4M2MsMHg4MiwweDAxLDB4NDksMHgzNCwweDgxLDB4MDEsMHg0OCwweDM0LDB4MjQsMHgxMCwweDgzLDB4MDAsCi0weDAyLDB4M2MsMHgwMiwweDAwLDB4MDAsMHhmZiwweDYzLDB4MzQsMHgwMiwweDgwLDB4MDIsMHgzYywweDY4LDB4MTUsMHg0NSwweDI0LAotMHgwMiwweDMyLDB4MDQsMHgwMCwweDAxLDB4MDAsMHgwMiwweDI0LDB4MjQsMHgyMCwweDgzLDB4MDAsMHhjMiwweDRjLDB4YTIsMHhhMCwKLTB4YjAsMHg0YywweGEwLDB4YWMsMHhiNCwweDRjLDB4YTAsMHhhYywweGI4LDB4NGMsMHhhMCwweGFjLDB4MDYsMHgwMCwweDgwLDB4MTQsCi0weGJjLDB4NGMsMHhhMCwweGFjLDB4MDAsMHgwMCwweDAyLDB4OTEsMHgwMCwweDAwLDB4MjMsMHg5MSwweGMwLDB4NGMsMHhhMiwweGEwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweGMxLDB4NGMsMHhhMywweGEwLDB4YzEsMHg0YywweGE3LDB4YTAsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4YzAsMHg0YywweGE2LDB4YTAsMHgwMiwweDgwLDB4MDMsMHgzYywweDY4LDB4MTUsMHg2MywweDI0LDB4YzEsMHg0YywweDY2LDB4OTAsCi0weGMwLDB4NGMsMHg2NSwweDkwLDB4MjUsMHhiMCwweDAyLDB4M2MsMHg4MiwweDAxLDB4NDQsMHgzNCwweDgxLDB4MDEsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4NDUsMHhhMCwweDAwLDB4MDAsMHg4NiwweGEwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHhjMiwweDRjLDB4NjAsMHhhMCwKLTB4MDIsMHg4MCwweDA4LDB4M2MsMHg2OCwweDE1LDB4MDQsMHgyNSwweGMyLDB4NGMsMHg4MiwweDkwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDE1LDB4MDAsMHg0MCwweDEwLDB4MjEsMHgxOCwweDAwLDB4MDAsMHhiNCwweDRjLDB4ODIsMHg4YywweGIwLDB4NGMsMHg4NSwweDhjLAotMHgyNSwweGIwLDB4MDMsMHgzYywweDQwLDB4MTEsMHgwMiwweDAwLDB4MmIsMHgxMCwweGEyLDB4MDAsMHg4MiwweDAxLDB4NjcsMHgzNCwKLTB4MGYsMHgwMCwweDQwLDB4MTAsMHg4MSwweDAxLDB4NjYsMHgzNCwweGMxLDB4NGMsMHg4MywweDkwLDB4YzAsMHg0YywweDgyLDB4OTAsCi0weGYwLDB4MDAsMHg2MywweDMwLDB4MWYsMHgwMCwweDQyLDB4MzAsMHgwMCwweDAwLDB4YzIsMHhhMCwweDAwLDB4MDAsMHhlMywweGEwLAotMHg2OCwweDE1LDB4MDIsMHgyNSwweDAxLDB4MDAsMHgwMywweDI0LDB4YmMsMHg0YywweDQwLDB4YWMsMHhiMCwweDRjLDB4NDAsMHhhYywKLTB4YjQsMHg0YywweDQwLDB4YWMsMHhiOCwweDRjLDB4NDAsMHhhYywweDA4LDB4MDAsMHhlMCwweDAzLDB4MjEsMHgxMCwweDYwLDB4MDAsCi0weGI4LDB4NGMsMHg4MiwweDhjLDB4MjUsMHhiMCwweDAzLDB4M2MsMHg4MiwweDAxLDB4NjksMHgzNCwweDQwLDB4MTEsMHgwMiwweDAwLAotMHgyYiwweDEwLDB4YTIsMHgwMCwweDBlLDB4MDAsMHg0MCwweDE0LDB4ODEsMHgwMSwweDY2LDB4MzQsMHhiYywweDRjLDB4ODIsMHg4YywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg0MCwweDExLDB4MDIsMHgwMCwweDJiLDB4MTAsMHhhMiwweDAwLDB4MDgsMHgwMCwweDQwLDB4MTQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4YzEsMHg0YywweDgzLDB4OTAsMHhjMCwweDRjLDB4ODIsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4YzIsMHhhMCwweDAwLDB4MDAsMHgyMywweGExLDB4ZjcsMHg1NiwweDAwLDB4MDgsMHg2OCwweDE1LDB4MDIsMHgyNSwKLTB4YzEsMHg0YywweDgzLDB4OTAsMHhjMCwweDRjLDB4ODIsMHg5MCwweGYwLDB4MDAsMHg2MywweDMwLDB4N2YsMHgwMCwweDQyLDB4MzAsCi0weDAwLDB4MDAsMHhjMiwweGEwLDB4MDAsMHgwMCwweDIzLDB4YTEsMHhmNywweDU2LDB4MDAsMHgwOCwweDY4LDB4MTUsMHgwMiwweDI1LAotMHgwMiwweDAwLDB4MDMsMHgyNCwweDAyLDB4ODAsMHgwMiwweDNjLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgzZCwweDU4LDB4NDMsMHhhMCwKLTB4Y2MsMHhmZiwweDAzLDB4MjQsMHgwMiwweDgwLDB4MDIsMHgzYywweDA4LDB4MDAsMHhlMCwweDAzLDB4M2QsMHg1OCwweDQzLDB4YTAsCi0weDI1LDB4YjAsMHgwMywweDNjLDB4MzMsMHgwMiwweDY1LDB4MzQsMHgwMCwweDExLDB4MDQsMHgwMCwweDAwLDB4MDAsMHhhMiwweGEwLAotMHgzMCwweDAyLDB4NjMsMHgzNCwweDAwLDB4MDAsMHg2NSwweDhjLDB4MGYsMHgwMCwweDAyLDB4M2MsMHhmZiwweGZmLDB4NDIsMHgzNCwKLTB4MjQsMHgyOCwweGEyLDB4MDAsMHgwMSwweDAwLDB4MDMsMHgyNCwweDA0LDB4MTgsMHg4MywweDAwLDB4MDIsMHgwMCwweGEwLDB4MTAsCi0weDIxLDB4MTAsMHgwMCwweDAwLDB4ZmYsMHhmZiwweDYyLDB4MzAsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLAotMHhlMCwweGZmLDB4YmQsMHgyNywweDE0LDB4MDAsMHhiMSwweGFmLDB4MjUsMHhiMCwweDExLDB4M2MsMHgxOCwweDAwLDB4YjIsMHhhZiwKLTB4NGMsMHgwMCwweDIyLDB4MzYsMHgxYywweDAwLDB4YmYsMHhhZiwweDEwLDB4MDAsMHhiMCwweGFmLDB4MDAsMHgwMCwweDQ0LDB4OTAsCi0weDAyLDB4ODAsMHgwMywweDNjLDB4MDIsMHgwMCwweDAyLDB4MjQsMHhmZiwweDAwLDB4ODQsMHgzMCwweDA3LDB4MDAsMHg4MiwweDEwLAotMHg2OCwweDE1LDB4NzIsMHgyNCwweDFjLDB4MDAsMHhiZiwweDhmLDB4MTgsMHgwMCwweGIyLDB4OGYsMHgxNCwweDAwLDB4YjEsMHg4ZiwKLTB4MTAsMHgwMCwweGIwLDB4OGYsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIwLDB4MDAsMHhiZCwweDI3LDB4ZTYsMHg2MywweDQzLDB4OTYsCi0weDAxLDB4MDAsMHgwMiwweDI0LDB4ZjcsMHhmZiwweDYyLDB4MTQsMHgyMSwweDIwLDB4MDAsMHgwMCwweDIyLDB4NTcsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA0LDB4MDAsMHgwNCwweDI0LDB4MjIsMHg1NywweDAwLDB4MGMsMHgyMSwweDgwLDB4NDAsMHgwMCwKLTB4MjUsMHg4MCwweDAyLDB4MDIsMHgzMywweDAyLDB4MjMsMHgzNiwweDA4LDB4MDAsMHgwMiwweDI0LDB4ZmYsMHhmZiwweDEwLDB4MzIsCi0weDQwLDB4MDAsMHgyNSwweDM2LDB4MDAsMHgwMCwweDYyLDB4YTAsMHhlYSwweGZmLDB4MDAsMHgxNiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4YTIsMHg5NCwweGU0LDB4NjMsMHg0MywweDk2LDB4ZmYsMHhkZiwweDQyLDB4MzAsMHgwMCwweDIwLDB4NDQsMHgzNCwKLTB4MDEsMHgwMCwweDYzLDB4MjQsMHhlNCwweDYzLDB4NDMsMHhhNiwweDAwLDB4MDAsMHhhMiwweGE0LDB4MDAsMHgwMCwweGE0LDB4YTQsCi0weDNmLDB4NTcsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMSwweDgwLDB4MDMsMHgzYywweDI1LDB4YjAsMHgwMiwweDNjLAotMHgxOCwweDAzLDB4NDIsMHgzNCwweDgwLDB4NWQsMHg2MywweDI0LDB4MDAsMHgwMCwweDQzLDB4YWMsMHg2MywweDAwLDB4MDIsMHgyNCwKLTB4ZmYsMHhmZiwweDQyLDB4MjQsMHhmZiwweGZmLDB4NDEsMHgwNCwweGZmLDB4ZmYsMHg0MiwweDI0LDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weDg4LDB4N2QsMHg0NSwweDk0LDB4MDIsMHg4MCwweDAzLDB4M2MsMHgwMiwweDgwLDB4MDIsMHgzYywweDhiLDB4N2QsMHg2NiwweDkwLAotMHg5OCwweDdkLDB4NDcsMHg5MCwweDAyLDB4ODAsMHgwMywweDNjLDB4MDIsMHg4MCwweDAyLDB4M2MsMHhhMywweDdkLDB4NjksMHg5MCwKLTB4YTUsMHg3ZCwweDRhLDB4OTAsMHgwMiwweDgwLDB4MDMsMHgzYywweDAyLDB4ODAsMHgwMiwweDNjLDB4YTgsMHg3ZCwweDZiLDB4OTAsCi0weGFhLDB4N2QsMHg0YywweDkwLDB4MDcsMHgwMCwweDAzLDB4MjQsMHgwMiwweDgwLDB4MDIsMHgzYywweDI1LDB4YjAsMHgwNCwweDNjLAotMHg5NSwweDdkLDB4NDMsMHhhMCwweGIwLDB4MDMsMHg4NCwweDM0LDB4MDIsMHg4MCwweDAyLDB4M2MsMHgwMiwweDgwLDB4MTgsMHgzYywKLTB4OGEsMHg3ZCwweDA4LDB4OTMsMHgwMCwweDAwLDB4ODUsMHhhYywweDk2LDB4N2QsMHg0MCwweGEwLDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weDAwLDB4MDAsMHg4NiwweGFjLDB4MDIsMHg4MCwweDBmLDB4M2MsMHg5NywweDdkLDB4NDAsMHhhMCwweDAyLDB4ODAsMHgwMiwweDNjLAotMHgwMCwweDAwLDB4ODcsMHhhYywweDY4LDB4MTUsMHhlZSwweDI1LDB4YjgsMHg3ZCwweDQwLDB4YTAsMHhmZCwweGZmLDB4MDIsMHgyNCwKLTB4ZDUsMHg0YSwweGMyLDB4YTEsMHgwMSwweDAwLDB4MDMsMHgyNCwweDAwLDB4NzgsMHgwMiwweDI0LDB4ZDQsMHg0YSwweGMzLDB4YTEsCi0weGQ4LDB4NGEsMHhjMiwweGE1LDB4ZmYsMHgwNywweDAzLDB4MjQsMHgwZiwweDAwLDB4MGQsMHgzMSwweDAyLDB4MDAsMHgwMiwweDI0LAotMHhkYSwweDRhLDB4YzMsMHhhNSwweDAwLDB4MDAsMHg4OCwweGFjLDB4MDAsMHgwMCwweDg5LDB4YWMsMHgwMCwweDAwLDB4OGEsMHhhYywKLTB4MDAsMHgwMCwweDhiLDB4YWMsMHgwMCwweDAwLDB4OGMsMHhhYywweDE3LDB4MDAsMHhhMiwweDExLDB4MDIsMHg4MCwweDAyLDB4M2MsCi0weDhhLDB4N2QsMHgwMiwweDkzLDB4MDEsMHgwMCwweDAzLDB4MjQsMHgwZiwweDAwLDB4NDIsMHgzMCwweDA1LDB4MDAsMHg0MywweDEwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4ODAsMHgwMiwweDNjLDB4Y2EsMHg3ZCwweDQwLDB4YTQsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDIsMHgzYywweDY4LDB4MTUsMHhlNCwweDI1LDB4MDIsMHhiYywweDQyLDB4MzQsCi0weDY4LDB4NGIsMHg4MiwweGFjLDB4MTUsMHgxNSwweDAzLDB4M2MsMHgwMiwweDAyLDB4MDIsMHgzYywweDA3LDB4MDcsMHg2MywweDM0LAotMHg2NCwweDRiLDB4ODIsMHhhYywweDAyLDB4ODAsMHgwMiwweDNjLDB4NjAsMHg0YiwweDgzLDB4YWMsMHhjYSwweDdkLDB4NDAsMHhhNCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDhmLDB4N2QsMHg0NCwweDkwLDB4MDYsMHgwMCwweDAzLDB4MjQsCi0weDE1LDB4MDAsMHg4MywweDEwLDB4MGIsMHgwMCwweDAyLDB4MjQsMHgwYSwweDAwLDB4ODIsMHgxMCwweDAwLDB4ZTAsMHgwMiwweDNjLAotMHg2OCwweDE1LDB4ZTQsMHgyNSwweDAwLDB4YjIsMHg0MiwweDM0LDB4MDAsMHgxYywweDAzLDB4M2MsMHg2OCwweDRiLDB4ODIsMHhhYywKLTB4MDAsMHgxYywweDYzLDB4MzQsMHgwMCwweDA0LDB4MDIsMHgyNCwweDYwLDB4NGIsMHg4MywweGFjLDB4OWEsMHg1NywweDAwLDB4MDgsCi0weDY0LDB4NGIsMHg4MiwweGFjLDB4MDAsMHg4MCwweDAyLDB4M2MsMHgwMCwweGJjLDB4NDIsMHgzNCwweDE1LDB4MTUsMHgwMywweDNjLAotMHg2OCwweDRiLDB4YzIsMHhhZCwweDA3LDB4MDcsMHg2MywweDM0LDB4MDMsMHgwMywweDAyLDB4M2MsMHg2MCwweDRiLDB4YzMsMHhhZCwKLTB4OWEsMHg1NywweDAwLDB4MDgsMHg2NCwweDRiLDB4YzIsMHhhZCwweDAwLDB4YzAsMHgwMiwweDNjLDB4MDAsMHhiMiwweDQyLDB4MzQsCi0weDFjLDB4MWMsMHgwMywweDNjLDB4NjgsMHg0YiwweGMyLDB4YWQsMHgwNywweDA3LDB4NjMsMHgzNCwweDAwLDB4MDQsMHgwMiwweDI0LAotMHg2MCwweDRiLDB4YzMsMHhhZCwweDlhLDB4NTcsMHgwMCwweDA4LDB4NjQsMHg0YiwweGMyLDB4YWQsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4NGQsMHgwMCwweDQ0LDB4MzQsMHhmZiwweDAwLDB4MDMsMHgzYywweGVjLDB4MDIsMHg0MiwweDM0LDB4MDAsMHgwMCwweDQzLDB4YWMsCi0weDAwLDB4MDAsMHg4MCwweGEwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4ODAsMHgwMywweDNjLAotMHgyNSwweGIwLDB4MDIsMHgzYywweDY0LDB4NWYsMHg2MywweDI0LDB4MTgsMHgwMywweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhYywKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDdmLDB4MDAsMHgwMiwweDNjLDB4ZmQsMHhiZiwweDQ1LDB4MzQsCi0weDgwLDB4MDQsMHgwMywweDNjLDB4MjUsMHgyOCwweGEzLDB4MDAsMHgwMCwweDA4LDB4MDQsMHgzYywweDAyLDB4ODAsMHgwMiwweDNjLAotMHg2OCwweDE1LDB4NDIsMHgyNCwweDI1LDB4MjgsMHhhNCwweDAwLDB4NDEsMHhiMCwweDAzLDB4M2MsMHgwMCwweDAwLDB4NjUsMHhhYywKLTB4MDQsMHg0YiwweDQ1LDB4YWMsMHhmYywweDRhLDB4NDUsMHhhYywweDA4LDB4MDAsMHg2MywweDM0LDB4ODYsMHgwMCwweDA1LDB4MjQsCi0weDAwLDB4MDAsMHg2NSwweGE0LDB4MDgsMHg0YiwweDQ1LDB4YTQsMHgwMCwweDRiLDB4NDAsMHhhYywweDBhLDB4NGIsMHg0MCwweGE0LAotMHgwYywweDRiLDB4NDUsMHhhNCwweDAwLDB4NjAsMHgwMSwweDQwLDB4MDEsMHgwMCwweDIxLDB4MzQsMHgwMCwweDYwLDB4ODEsMHg0MCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweGY4LDB4NTcsMHgwMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDQyLDB4YjAsMHgwMiwweDNjLDB4YTAsMHhmZiwweDAzLDB4MjQsMHgwMSwweDAwLDB4NDIsMHgzNCwweGU4LDB4ZmYsMHhiZCwweDI3LAotMHgyMSwweDIwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwNSwweDI0LDB4MDAsMHgwMSwweDA2LDB4MjQsMHgwMCwweDAwLDB4NDMsMHhhMCwKLTB4MTAsMHgwMCwweGJmLDB4YWYsMHhjNCwweDBjLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweGJmLDB4OGYsCi0weDAzLDB4MDAsMHgwNCwweDI0LDB4MDEsMHgwMCwweDA1LDB4MjQsMHg0MCwweDFmLDB4MDYsMHgyNCwweGM0LDB4MGMsMHgwMCwweDA4LAotMHgxOCwweDAwLDB4YmQsMHgyNywweGU4LDB4ZmYsMHhiZCwweDI3LDB4MTAsMHgwMCwweGIwLDB4YWYsMHgxNCwweDAwLDB4YmYsMHhhZiwKLTB4MjEsMHg1YiwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4ODAsMHgwMiwweDNjLDB4NjgsMHgxNSwweDQyLDB4MjQsCi0weDQ4LDB4MDEsMHgwMywweDI0LDB4ZTAsMHg2MywweDQzLDB4YWMsMHhkYywweDYzLDB4NDMsMHhhYywweDIxLDB4ODAsMHg0MCwweDAwLAotMHgxZiwweDAwLDB4MDMsMHgyNCwweGZmLDB4ZmYsMHg2MywweDI0LDB4YzQsMHg0YywweDQwLDB4YTQsMHhjNiwweDRjLDB4NDAsMHhhNCwKLTB4YzgsMHg0YywweDQwLDB4YTQsMHhjYSwweDRjLDB4NDAsMHhhNCwweGNjLDB4NGMsMHg0MCwweGE0LDB4Y2UsMHg0YywweDQwLDB4YTQsCi0weGQwLDB4NGMsMHg0MCwweGE0LDB4ZDIsMHg0YywweDQwLDB4YTQsMHhkNCwweDRjLDB4NDAsMHhhNCwweGY1LDB4ZmYsMHg2MSwweDA0LAotMHgyNCwweDAwLDB4NDIsMHgyNCwweDI1LDB4YjAsMHgwMiwweDNjLDB4MTAsMHgwMCwweDAzLDB4MjQsMHhiMCwweDAzLDB4NDIsMHgzNCwKLTB4MDIsMHg4MCwweDA0LDB4M2MsMHg4YywweDU4LDB4ODQsMHgyNCwweDAwLDB4MDAsMHg0MywweGFjLDB4MjEsMHgyOCwweDAwLDB4MDAsCi0weDk3LDB4NDUsMHgwMCwweDBjLDB4MDQsMHgwMCwweDA2LDB4MjQsMHhlZiwweDViLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLAotMHg3MSwweDVjLDB4MDAsMHgwYywweDhjLDB4NjUsMHgwMCwweGFlLDB4YTcsMHg1ZCwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4NGIsMHg1ZSwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4ODAsMHgwMywweDNjLDB4OGUsMHg3ZCwweDY0LDB4OTAsCi0weDkyLDB4MDAsMHgwMiwweDI0LDB4MDMsMHgwMCwweDgyLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGY3LDB4NWQsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGRkLDB4NWQsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4YiwweDVjLDB4MDAsMHgwYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhlNCwweDYzLDB4MDAsMHhhNiwweDY3LDB4NWUsMHgwMCwweDBjLDB4ZTYsMHg2MywweDAwLDB4YTYsCi0weDE0LDB4MDAsMHhiZiwweDhmLDB4MTAsMHgwMCwweGIwLDB4OGYsMHgwMiwweDgwLDB4MDQsMHgzYywweDAyLDB4ODAsMHgwNSwweDNjLAotMHhmOCwweDdhLDB4ODIsMHgyNCwweDAwLDB4N2IsMHhhMywweDI0LDB4MTgsMHgwMCwweGJkLDB4MjcsMHgwNCwweDAwLDB4NDIsMHhhYywKLTB4ZjgsMHg3YSwweDgyLDB4YWMsMHgwMCwweDdiLDB4YTMsMHhhYywweDA4LDB4MDAsMHhlMCwweDAzLDB4MDQsMHgwMCwweDYzLDB4YWMsCi0weGU4LDB4ZmYsMHhiZCwweDI3LDB4MTAsMHgwMCwweGIwLDB4YWYsMHgwMSwweDgwLDB4MDIsMHgzYywweDI1LDB4YjAsMHgxMCwweDNjLAotMHgxOCwweDAzLDB4MDMsMHgzNiwweDM4LDB4NjEsMHg0MiwweDI0LDB4MDAsMHgwMCwweDYyLDB4YWMsMHgxNCwweDAwLDB4YmYsMHhhZiwKLTB4NjAsMHg1NywweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweGQ1LDB4NTgsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgwMywweDI0LDB4MDIsMHg4MCwweDAyLDB4M2MsMHhmZCwweDVhLDB4MDAsMHgwYywweGRiLDB4NjAsMHg0MywweGEwLAotMHhkMSwweDU3LDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MzIsMHg0MSwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MGIsMHg1OCwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ0LDB4MDAsMHgwMywweDM2LDB4MDAsMHgwMCwweDYyLDB4OTQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4NDAsMHgwMCwweDQyLDB4MzQsMHgwMCwweDAwLDB4NjIsMHhhNCwweGQ5LDB4NTcsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGZhLDB4NTcsMHgwMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOSwweDVhLDB4MDAsMHgwYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg4ZSwweDVhLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg4MCwweDA0LDB4M2MsCi0weGI0LDB4MjQsMHg4NCwweDI0LDB4ZTYsMHg1YSwweDAwLDB4MGMsMHgwMSwweDAwLDB4MDUsMHgyNCwweDAxLDB4ODAsMHgwNCwweDNjLAotMHgwOCwweDFlLDB4ODQsMHgyNCwweGU2LDB4NWEsMHgwMCwweDBjLDB4MDIsMHgwMCwweDA1LDB4MjQsMHg4MSwweDRlLDB4MDAsMHgwYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDgwLDB4MDQsMHgzYywweDU0LDB4MzQsMHg4NCwweDI0LDB4ZTYsMHg1YSwweDAwLDB4MGMsCi0weDAzLDB4MDAsMHgwNSwweDI0LDB4MDIsMHg4MCwweDAyLDB4M2MsMHg5OCwweDdkLDB4NDMsMHg5MCwweDQzLDB4MDAsMHgwNCwweDM2LAotMHgyOSwweDAwLDB4NjAsMHgxMCwweGQ4LDB4MDAsMHgxMCwweDM2LDB4MDcsMHgwMCwweDAyLDB4MjQsMHgyYiwweDAwLDB4NjIsMHgxMCwKLTB4MjUsMHhiMCwweDA0LDB4M2MsMHgxMCwweDAyLDB4ODYsMHgzNCwweDQzLDB4MDAsMHg4NSwweDM0LDB4MDMsMHgwMCwweDAyLDB4MjQsCi0weDEwLDB4MDAsMHgwMywweDI0LDB4MDAsMHgwMCwweGEyLDB4YTAsMHhkOCwweDAwLDB4ODQsMHgzNCwweDAwLDB4MDAsMHhjMywweGEwLAotMHgwMCwweDAwLDB4ODIsMHg5MCwweDgwLDB4ZmYsMHgwMywweDI0LDB4NDIsMHhiMCwweDA1LDB4M2MsMHgyNSwweDEwLDB4NDMsMHgwMCwKLTB4MDAsMHgwMCwweDgyLDB4YTAsMHgyNSwweGIwLDB4MDQsMHgzYywweDQ0LDB4MDAsMHg4NCwweDM0LDB4MDAsMHgwMCwweDgyLDB4OTQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4YzAsMHgwMCwweDQyLDB4MzQsMHgwMCwweDAwLDB4ODIsMHhhNCwweDAwLDB4MDAsMHhhMywweDkwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg2MywweDM0LDB4MDAsMHgwMCwweGEzLDB4YTAsMHhlMCwweDU3LDB4MDAsMHgwYywKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMiwweDgwLDB4MDQsMHgzYywweDA4LDB4MDAsMHg4NCwweDI0LDB4MjEsMHgyOCwweDAwLDB4MDAsCi0weDIxLDB4MzAsMHgwMCwweDAwLDB4MzEsMHgxYywweDAwLDB4MGMsMHgyMSwweDM4LDB4MDAsMHgwMCwweGY4LDB4NTcsMHgwMCwweDBjLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDE0LDB4MDAsMHhiZiwweDhmLDB4MTAsMHgwMCwweGIwLDB4OGYsMHgwMSwweDAwLDB4MDIsMHgyNCwKLTB4MDgsMHgwMCwweGUwLDB4MDMsMHgxOCwweDAwLDB4YmQsMHgyNywweDAwLDB4MDAsMHg4MCwweGEwLDB4MDAsMHgwMCwweDAzLDB4OTIsCi0weDgwLDB4ZmYsMHgwMiwweDI0LDB4MjUsMHgxOCwweDYyLDB4MDAsMHgwMCwweDAwLDB4MDMsMHhhMiwweDI1LDB4YjAsMHgwNCwweDNjLAotMHg0NCwweDAwLDB4ODQsMHgzNCwweDAwLDB4MDAsMHg4MiwweDk0LDB4NDIsMHhiMCwweDA1LDB4M2MsMHhjMCwweDAwLDB4NDIsMHgzNCwKLTB4MDAsMHgwMCwweDgyLDB4YTQsMHgwMCwweDAwLDB4YTMsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDYzLDB4MzQsCi0weDAwLDB4MDAsMHhhMywweGEwLDB4ZTAsMHg1NywweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4ODAsMHgwNCwweDNjLAotMHgwOCwweDAwLDB4ODQsMHgyNCwweDIxLDB4MjgsMHgwMCwweDAwLDB4MjEsMHgzMCwweDAwLDB4MDAsMHgzMSwweDFjLDB4MDAsMHgwYywKLTB4MjEsMHgzOCwweDAwLDB4MDAsMHhmOCwweDU3LDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MTQsMHgwMCwweGJmLDB4OGYsCi0weDEwLDB4MDAsMHhiMCwweDhmLDB4MDEsMHgwMCwweDAyLDB4MjQsMHgwOCwweDAwLDB4ZTAsMHgwMywweDE4LDB4MDAsMHhiZCwweDI3LAotMHgyMSwweDIwLDB4MDAsMHgwMCwweDIwLDB4YjAsMHgwNiwweDNjLDB4ZmYsMHhmZiwweDA1LDB4MzQsMHgyMSwweDE4LDB4ODYsMHgwMCwKLTB4MDQsMHgwMCwweDg0LDB4MjQsMHgyYSwweDEwLDB4YTQsMHgwMCwweDAwLDB4MDAsMHg2MCwweGFjLDB4ZmIsMHhmZiwweDQwLDB4MTAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweGI4LDB4ZmYsMHhiZCwweDI3LAotMHgyNSwweGIwLDB4MDQsMHgzYywweDQ0LDB4MDAsMHhiZiwweGFmLDB4NDAsMHgwMCwweGJlLDB4YWYsMHgzYywweDAwLDB4YjcsMHhhZiwKLTB4MzgsMHgwMCwweGI2LDB4YWYsMHgzNCwweDAwLDB4YjUsMHhhZiwweDMwLDB4MDAsMHhiNCwweGFmLDB4MmMsMHgwMCwweGIzLDB4YWYsCi0weDI4LDB4MDAsMHhiMiwweGFmLDB4MjQsMHgwMCwweGIxLDB4YWYsMHgyMCwweDAwLDB4YjAsMHhhZiwweDBhLDB4MDAsMHg4MywweDM0LAotMHgwMCwweDAwLDB4NjIsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgwMCwweDQyLDB4MzAsMHgwYywweDAwLDB4NDAsMHgxMCwKLTB4NGMsMHg4NywweDAyLDB4M2MsMHgwMCwweDAwLDB4NjIsMHg5MCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweDQyLDB4MzAsCi0weDY2LDB4MDEsMHg0MCwweDEwLDB4NGMsMHg4NywweDAyLDB4M2MsMHg1NCwweDAwLDB4ODMsMHgzNCwweDUwLDB4MDAsMHg4MiwweDM0LAotMHgwMCwweDAwLDB4NDUsMHhhYywweDAwLDB4MDAsMHg2NSwweGE0LDB4ZjksMHg1OCwweDAwLDB4MDgsMHgwMiwweDgwLDB4MDMsMHgzYywKLTB4NTQsMHgwMCwweDg1LDB4MzQsMHgwMCwweGUwLDB4NDIsMHgzNCwweDUwLDB4MDAsMHg4NCwweDM0LDB4MTIsMHgwMSwweDAzLDB4MjQsCi0weDAwLDB4MDAsMHg4MiwweGFjLDB4MDAsMHgwMCwweGEzLDB4YWMsMHgwMiwweDgwLDB4MDMsMHgzYywweDY4LDB4MTUsMHg2MiwweDI0LAotMHhkNSwweDRhLDB4NDMsMHg5MCwweGRhLDB4NGEsMHg0NSwweDk0LDB4MjUsMHhiMCwweDFlLDB4M2MsMHgxYywweDAwLDB4YTMsMHhhMywKLTB4NjAsMHg0YiwweDQzLDB4OGMsMHg1OCwweDAwLDB4YzYsMHgzNywweGZmLDB4ZmYsMHgwNCwweDI0LDB4MTAsMHgwMCwweGEzLDB4YWYsCi0weDY0LDB4NGIsMHg0MywweDhjLDB4NWMsMHgwMCwweGM3LDB4MzcsMHg2MCwweDAwLDB4YzgsMHgzNywweDE0LDB4MDAsMHhhMywweGFmLAotMHg2OCwweDRiLDB4NDIsMHg4YywweDY0LDB4MDAsMHhjOSwweDM3LDB4OGEsMHgwMCwweGNhLDB4MzcsMHgxOCwweDAwLDB4YTIsMHhhZiwKLTB4MjQsMHgxMCwweDAyLDB4M2MsMHgyMSwweDI4LDB4YTIsMHgwMCwweDRjLDB4ODEsMHgwMiwweDNjLDB4MDAsMHhlMCwweDQyLDB4MzQsCi0weDAwLDB4MDAsMHhjMiwweGFjLDB4OTYsMHgwMSwweDAzLDB4MjQsMHgyOCwweDI4LDB4MDIsMHgyNCwweDAwLDB4MDAsMHhlMywweGFjLAotMHg4OSwweDAwLDB4Y2IsMHgzNywweDAwLDB4MDAsMHgwNCwweGFkLDB4OGMsMHgwMCwweGNjLDB4MzcsMHgwMCwweDAwLDB4MjQsMHhhZCwKLTB4MDksMHgwMCwweDAzLDB4MjQsMHgwMCwweDAwLDB4NDIsMHhhNSwweDEwLDB4MTAsMHgwMiwweDI0LDB4MDAsMHgwMCwweDYzLDB4YTEsCi0weDhlLDB4MDAsMHhjZCwweDM3LDB4MDAsMHgwMCwweDgyLDB4YTUsMHgwYSwweDBhLDB4MDMsMHgyNCwweDEzLDB4MDAsMHgwMiwweDI0LAotMHg5MCwweDAwLDB4Y2UsMHgzNywweDAwLDB4MDAsMHhhMywweGE1LDB4MDAsMHgwMCwweGMyLDB4YTEsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4NDAsMHgwMCwweDAzLDB4MjQsMHg5MSwweDAwLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweGEwLDB4MjUsMHhiMCwweDAzLDB4M2MsCi0weDNhLDB4MDEsMHgwMiwweDI0LDB4OTIsMHgwMCwweDYzLDB4MzQsMHgwMCwweDAwLDB4NjIsMHhhNCwweGI1LDB4MDAsMHhkMSwweDM3LAotMHgyMSwweDAwLDB4MDMsMHgyNCwweDAwLDB4MDAsMHgyMywweGEyLDB4MTAsMHgwMCwweGEyLDB4OGYsMHhhMCwweDAwLDB4ZDIsMHgzNywKLTB4YTQsMHgwMCwweGQzLDB4MzcsMHgwMCwweDAwLDB4NDIsMHhhZSwweDE0LDB4MDAsMHhhMywweDhmLDB4YTgsMHgwMCwweGQ0LDB4MzcsCi0weGFjLDB4MDAsMHhkNSwweDM3LDB4MDAsMHgwMCwweDYzLDB4YWUsMHgxOCwweDAwLDB4YTIsMHg4ZiwweDI1LDB4YjAsMHgwMywweDNjLAotMHhiMCwweDAwLDB4NjMsMHgzNCwweDAwLDB4MDAsMHg4MiwweGFlLDB4MjEsMHgxMCwweDAyLDB4M2MsMHhmZiwweDc3LDB4NDIsMHgzNCwKLTB4MDAsMHgwMCwweGEyLDB4YWUsMHgyNSwweGIwLDB4MDIsMHgzYywweGQ4LDB4MDAsMHg0MiwweDM0LDB4MDAsMHgwMCwweDY1LDB4YWMsCi0weDAwLDB4MDAsMHg0MCwweGEwLDB4MWMsMHgwMCwweGEyLDB4OTMsMHgyNSwweGIwLDB4MDMsMHgzYywweGI0LDB4MDAsMHg2MywweDM0LAotMHgwMCwweDAwLDB4NjIsMHhhMCwweDI1LDB4YjAsMHgwMywweDNjLDB4MDQsMHgwMCwweDAyLDB4MjQsMHhiNiwweDAwLDB4NjMsMHgzNCwKLTB4MDAsMHgwMCwweDYyLDB4YTAsMHgyNSwweGIwLDB4MDMsMHgzYywweDBmLDB4MDAsMHgwMiwweDI0LDB4YmEsMHgwMCwweDYzLDB4MzQsCi0weGI5LDB4MDAsMHhkZiwweDM3LDB4MDAsMHgwMCwweGU0LDB4YTMsMHgwMCwweDAwLDB4NjIsMHhhNCwweDI1LDB4YjAsMHgwMiwweDNjLAotMHgxYSwweDAxLDB4NDIsMHgzNCwweDE2LDB4MDEsMHhkMCwweDM3LDB4MTgsMHgwMSwweGNmLDB4MzcsMHgwMCwweDAwLDB4MDAsMHhhNiwKLTB4MjUsMHhiMCwweDAzLDB4M2MsMHgwMCwweDAwLDB4ZTAsMHhhNSwweDAwLDB4MDAsMHg0MCwweGE0LDB4ZmYsMHhmZiwweDAyLDB4M2MsCi0weGZmLDB4MGYsMHg0MiwweDM0LDB4ZGMsMHgwMCwweDYzLDB4MzQsMHgwMCwweDAwLDB4NjIsMHhhYywweDJmLDB4MDAsMHgwMywweDNjLAotMHgyNSwweGIwLDB4MDIsMHgzYywweDMyLDB4MzIsMHg2MywweDM0LDB4ZDAsMHgwMSwweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhYywKLTB4NWUsMHgwMCwweDAyLDB4M2MsMHgyNSwweGIwLDB4MDMsMHgzYywweDMyLDB4NDMsMHg0MiwweDM0LDB4ZDQsMHgwMSwweDYzLDB4MzQsCi0weDAwLDB4MDAsMHg2MiwweGFjLDB4MDgsMHgwMCwweDAzLDB4M2MsMHgyNSwweGIwLDB4MDIsMHgzYywweDMwLDB4YTUsMHg2MywweDM0LAotMHhkOCwweDAxLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweGFjLDB4ZGMsMHgwMSwweGM0LDB4MzcsMHgwMiwweDgwLDB4MDMsMHgzYywKLTB4NDksMHhhNSwweDAyLDB4MzQsMHg4ZSwweDdkLDB4NmQsMHg5MCwweDAwLDB4MDAsMHg4MiwweGFjLDB4YzIsMHgwMCwweDAyLDB4M2MsCi0weDFhLDB4MDYsMHgwMywweDI0LDB4NTEsMHgxMCwweDQyLDB4MzQsMHhlMCwweDAxLDB4YzUsMHgzNywweGY0LDB4MDEsMHhjNiwweDM3LAotMHhmOCwweDAxLDB4YzcsMHgzNywweDA3LDB4MDcsMHgwNCwweDI0LDB4MDAsMHgwMCwweGEzLDB4YTQsMHgwMCwweDAyLDB4YzgsMHgzNywKLTB4MDAsMHgwMCwweGM0LDB4YTQsMHgyNiwweDAwLDB4MDMsMHgyNCwweDAwLDB4MDAsMHhlMiwweGFjLDB4MDMsMHgwMiwweGM5LDB4MzcsCi0weDA0LDB4MDAsMHgwMiwweDI0LDB4MDAsMHgwMCwweDAzLDB4YTUsMHgzNiwweDAyLDB4Y2EsMHgzNywweDAwLDB4MDAsMHgyMiwweGExLAotMHhjMCwweDAxLDB4MDMsMHgyNCwweDBjLDB4MDAsMHgwMiwweDI0LDB4MzQsMHgwMiwweGNiLDB4MzcsMHgwMCwweDAwLDB4NDIsMHhhMSwKLTB4MzcsMHgwMiwweGNjLDB4MzcsMHgwMCwweDAwLDB4NjMsMHhhNSwweDAzLDB4MDAsMHgwMiwweDI0LDB4MjIsMHgwMCwweDAzLDB4MjQsCi0weDAwLDB4MDAsMHg4MiwweGExLDB4ZDYsMHgwMCwweGEzLDB4MTEsMHgxYiwweDFiLDB4MDIsMHgzYywweDEzLDB4MTMsMHgwMiwweDNjLAotMHgxMywweDEzLDB4NDIsMHgzNCwweDYwLDB4MDEsMHhjMywweDM3LDB4NjQsMHgwMSwweGM0LDB4MzcsMHg2OCwweDAxLDB4YzUsMHgzNywKLTB4N2MsMHgwMSwweGNhLDB4MzcsMHg2YywweDAxLDB4YzYsMHgzNywweDcwLDB4MDEsMHhjNywweDM3LDB4NzQsMHgwMSwweGM4LDB4MzcsCi0weDc4LDB4MDEsMHhjOSwweDM3LDB4MDAsMHgwMCwweDYyLDB4YWMsMHgwMCwweDAwLDB4ODIsMHhhYywweDAyLDB4ODAsMHgwMywweDNjLAotMHgwMCwweDAwLDB4YTIsMHhhYywweDAwLDB4MDAsMHhjMiwweGFjLDB4MDAsMHgwMCwweGUyLDB4YWMsMHgwMCwweDAwLDB4MDIsMHhhZCwKLTB4MDAsMHgwMCwweDIyLDB4YWQsMHgwMCwweDAwLDB4NDIsMHhhZCwweDhlLDB4N2QsMHg2NSwweDkwLDB4MjUsMHhiMCwweDBjLDB4M2MsCi0weDAxLDB4NzAsMHgwMywweDNjLDB4ODAsMHgwMSwweDgyLDB4MzUsMHgwOCwweDVmLDB4NjMsMHgzNCwweDIyLDB4MDAsMHgwNCwweDI0LAotMHgwMCwweDAwLDB4NDMsMHhhYywweGI1LDB4MDAsMHhhNCwweDEwLDB4MGYsMHgxZiwweDAyLDB4M2MsMHg5MiwweDAwLDB4MDIsMHgyNCwKLTB4YjIsMHgwMCwweGEyLDB4MTAsMHgwZiwweDFmLDB4MDIsMHgzYywweDBmLDB4MTAsMHgwMiwweDNjLDB4MDAsMHhmMCwweDUxLDB4MzQsCi0weGY3LDB4MDEsMHg5MiwweDM1LDB4MTUsMHhmMCwweDRkLDB4MzQsMHg3NywweDAwLDB4MGUsMHgyNCwweDg0LDB4MDEsMHg4NywweDM1LAotMHg4OCwweDAxLDB4ODgsMHgzNSwweDEwLDB4ZjAsMHg0NCwweDM0LDB4OGMsMHgwMSwweDg1LDB4MzUsMHgwNSwweGYwLDB4NDIsMHgzNCwKLTB4MDAsMHgwMCwweGVkLDB4YWMsMHg5MCwweDAxLDB4ODMsMHgzNSwweDAwLDB4MDAsMHgwNCwweGFkLDB4OTQsMHgwMSwweDg2LDB4MzUsCi0weDAwLDB4MDAsMHhhMiwweGFjLDB4ZjUsMHgwZiwweDAyLDB4MjQsMHgwMCwweDAwLDB4NzEsMHhhYywweDI1LDB4YjAsMHgwNSwweDNjLAotMHgwMCwweDAwLDB4YzIsMHhhYywweDk4LDB4MDEsMHg4OSwweDM1LDB4OWMsMHgwMSwweDhhLDB4MzUsMHhmMCwweDBmLDB4MDMsMHgyNCwKLTB4MGQsMHgwMCwweDAyLDB4MjQsMHgwMCwweDAwLDB4MjMsMHhhZCwweGEwLDB4MDEsMHg4YiwweDM1LDB4MDAsMHgwMCwweDQyLDB4YWQsCi0weGE3LDB4MDEsMHhiNywweDM0LDB4ZjYsMHgwMSwweDhjLDB4MzUsMHhmZiwweGZmLDB4MDIsMHgyNCwweDAwLDB4MDAsMHg2ZCwweGFkLAotMHgwMCwweDAwLDB4OGUsMHhhMSwweDAwLDB4MDAsMHg0ZSwweGEyLDB4MDAsMHgwMCwweGUyLDB4YTIsMHgyNSwweGIwLDB4MDIsMHgzYywKLTB4YTgsMHgwMSwweGI2LDB4MzQsMHhmZiwweGZmLDB4MDksMHgyNCwweGFjLDB4MDEsMHg0MiwweDM0LDB4MDAsMHgwMCwweGM5LDB4YWUsCi0weDAzLDB4MDQsMHgwNCwweDNjLDB4MDAsMHgwMCwweDQ5LDB4YWMsMHgwNywweDA4LDB4MDMsMHgzYywweDI1LDB4YjAsMHgwMiwweDNjLAotMHgwMSwweDAyLDB4ODQsMHgzNCwweDA1LDB4MDYsMHg2MywweDM0LDB4YjQsMHgwMSwweGIxLDB4MzQsMHhiOCwweDAxLDB4YjIsMHgzNCwKLTB4YmMsMHgwMSwweGIzLDB4MzQsMHhiMCwweDAxLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0NCwweGFjLDB4MDAsMHgwMCwweDIzLDB4YWUsCi0weDI1LDB4YjAsMHgwMiwweDNjLDB4MDAsMHgwMCwweDQ0LDB4YWUsMHgwMCwweDAwLDB4NjMsMHhhZSwweDI1LDB4YjAsMHgwMywweDNjLAotMHgwYywweDAwLDB4MDYsMHgyNCwweGMwLDB4MDEsMHhiNCwweDM0LDB4YzEsMHgwMSwweGI1LDB4MzQsMHgwZCwweDAwLDB4MDgsMHgyNCwKLTB4YzIsMHgwMSwweDYzLDB4MzQsMHhjMywweDAxLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg4NiwweGEyLDB4YzQsMHgwMSwweGFiLDB4MzQsCi0weDAwLDB4MDAsMHhhNiwweGEyLDB4YzUsMHgwMSwweGFjLDB4MzQsMHgwMCwweDAwLDB4NjYsMHhhMCwweDBlLDB4MDAsMHgwNywweDI0LAotMHgwMCwweDAwLDB4NDgsMHhhMCwweGM2LDB4MDEsMHhhYSwweDM0LDB4YzcsMHgwMSwweGFkLDB4MzQsMHgwZiwweDAwLDB4MDIsMHgyNCwKLTB4MDAsMHgwMCwweDY4LDB4YTEsMHgwMCwweDAwLDB4ODcsMHhhMSwweDAwLDB4MDAsMHg0NywweGExLDB4MDAsMHgwMCwweGEyLDB4YTEsCi0weDU3LDB4MDEsMHgwMiwweDNjLDB4NDgsMHgwMCwweGJmLDB4MzQsMHg0NiwweDAwLDB4YWUsMHgzNCwweDBlLDB4ZTIsMHg0MiwweDM0LAotMHgwMCwweDAwLDB4YzAsMHhhNSwweDRjLDB4MDAsMHhiZSwweDM0LDB4MDAsMHgwMCwweGUyLDB4YWYsMHg0ZCwweDAwLDB4YjksMHgzNCwKLTB4ODAsMHhmZiwweDAyLDB4MjQsMHgwMCwweDAwLDB4YzAsMHhhMywweDAwLDB4MDAsMHgyMiwweGEzLDB4MjUsMHhiMCwweDAyLDB4M2MsCi0weGJjLDB4MDAsMHgwMywweDI0LDB4NDAsMHgwMCwweDQyLDB4MzQsMHgwMCwweDAwLDB4NDMsMHhhNCwweDI1LDB4YjAsMHgwMywweDNjLAotMHg2NCwweDAzLDB4YjgsMHgzNCwweGZjLDB4MzcsMHgwMiwweDI0LDB4NDAsMHgwMCwweDYzLDB4MzQsMHgwMCwweDAwLDB4MDAsMHhhMywKLTB4ZDgsMHgwMCwweGE3LDB4MzQsMHgwMCwweDAwLDB4NjIsMHhhNCwweDAwLDB4MDAsMHhlMywweDkwLDB4MmEsMHhiMCwweDA0LDB4M2MsCi0weDgwLDB4ZmYsMHgwMiwweDI0LDB4MjYsMHhiMCwweDA2LDB4M2MsMHgyNSwweDE4LDB4NjIsMHgwMCwweDMwLDB4MDAsMHg4OSwweDM0LAotMHgyMCwweDIwLDB4MDIsMHgyNCwweDM4LDB4MDAsMHg4NCwweDM0LDB4MDAsMHgwMCwweGUzLDB4YTAsMHg3OSwweDAwLDB4YzgsMHgzNCwKLTB4MDAsMHgwMCwweDgyLDB4YTQsMHg0MCwweDAwLDB4MDMsMHgyNCwweDE2LDB4MDAsMHgwMiwweDI0LDB4MDAsMHgwMCwweDIzLDB4YTEsCi0weDk0LDB4MDAsMHhhYSwweDM0LDB4MDAsMHgwMCwweDAyLDB4YTEsMHg5OCwweDAwLDB4YWIsMHgzNCwweDY0LDB4MDAsMHgwMywweDI0LAotMHgyMiwweDAwLDB4MDIsMHgyNCwweDAwLDB4MDAsMHg0MywweGE1LDB4N2MsMHgwMCwweGQxLDB4MzQsMHgwMCwweDAwLDB4NjIsMHhhNSwKLTB4MDQsMHgwMCwweDEyLDB4MjQsMHg5YywweDAwLDB4YWMsMHgzNCwweDdhLDB4MDAsMHhjNiwweDM0LDB4MjAsMHgwYywweDAyLDB4MjQsCi0weDBhLDB4MDAsMHgwMywweDI0LDB4MDAsMHgwMCwweGQyLDB4YTAsMHg5YSwweDAwLDB4YWQsMHgzNCwweDAwLDB4MDAsMHgyMiwweGE2LAotMHg5NiwweDAwLDB4YWUsMHgzNCwweDAwLDB4MDAsMHg4MywweGExLDB4ZmYsMHgwMywweDAyLDB4MjQsMHgwMiwweDAwLDB4MDMsMHgyNCwKLTB4MDAsMHgwMCwweGEyLDB4YTUsMHgwMCwweDAwLDB4YzMsMHhhNSwweDI1LDB4YjAsMHgwMywweDNjLDB4MjAsMHgwMCwweDAyLDB4MjQsCi0weGI3LDB4MDAsMHg2MywweDM0LDB4MDAsMHgwMCwweDYyLDB4YTAsMHgyNSwweGIwLDB4MDIsMHgzYywweDA5LDB4MDAsMHgwMywweDI0LAotMHg4OSwweDAwLDB4NDIsMHgzNCwweDAwLDB4MDAsMHg0MywweGEwLDB4NDQsMHgwMCwweGE1LDB4MzQsMHgwMCwweDAwLDB4YTIsMHg5NCwKLTB4MDIsMHg4MCwweDAzLDB4M2MsMHg2OCwweDE1LDB4NjYsMHgyNCwweGZmLDB4ZmQsMHgwMywweDI0LDB4MjQsMHgxMCwweDQzLDB4MDAsCi0weDAwLDB4MDAsMHhhMiwweGE0LDB4MDAsMHgwMCwweGEzLDB4OTQsMHhkNSwweDRhLDB4YzQsMHg5MCwweDI5LDB4YjAsMHgwMiwweDNjLAotMHg0MCwweDAwLDB4NDIsMHgzNCwweDAwLDB4MDIsMHg2MywweDM0LDB4MDAsMHgwMCwweGEzLDB4YTQsMHgwMCwweDAwLDB4NTIsMHhhMCwKLTB4ZDMsMHgwYSwweDAwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ0LDB4MDAsMHhiZiwweDhmLDB4NDAsMHgwMCwweGJlLDB4OGYsCi0weDNjLDB4MDAsMHhiNywweDhmLDB4MzgsMHgwMCwweGI2LDB4OGYsMHgzNCwweDAwLDB4YjUsMHg4ZiwweDMwLDB4MDAsMHhiNCwweDhmLAotMHgyYywweDAwLDB4YjMsMHg4ZiwweDI4LDB4MDAsMHhiMiwweDhmLDB4MjQsMHgwMCwweGIxLDB4OGYsMHgyMCwweDAwLDB4YjAsMHg4ZiwKLTB4MDEsMHgwMCwweDAyLDB4MjQsMHgwOCwweDAwLDB4ZTAsMHgwMywweDQ4LDB4MDAsMHhiZCwweDI3LDB4NTQsMHgwMCwweDg1LDB4MzQsCi0weDAwLDB4ZTAsMHg0MiwweDM0LDB4NTAsMHgwMCwweDg0LDB4MzQsMHgxMiwweDAxLDB4MDMsMHgyNCwweDAwLDB4MDAsMHg4MiwweGFjLAotMHgwMCwweDAwLDB4YTMsMHhhNCwweGY5LDB4NTgsMHgwMCwweDA4LDB4MDIsMHg4MCwweDAzLDB4M2MsMHgwMCwweGYwLDB4NTEsMHgzNCwKLTB4ZjcsMHgwMSwweDkyLDB4MzUsMHgxNSwweGYwLDB4NGQsMHgzNCwweGFkLDB4NTksMHgwMCwweDA4LDB4ZmYsMHhmZiwweDBlLDB4MjQsCi0weDhiLDB4NTksMHgwMCwweDA4LDB4MWIsMHgxYiwweDQyLDB4MzQsMHgyNSwweGIwLDB4MDMsMHgzYywweDI1LDB4YjAsMHgwOCwweDNjLAotMHhmYywweDM3LDB4MDIsMHgyNCwweDQwLDB4MDAsMHg2MywweDM0LDB4MDIsMHg4MCwweDA0LDB4M2MsMHgwMCwweDAwLDB4NjIsMHhhNCwKLTB4MTQsMHg4MCwweDg0LDB4MjQsMHhmZiwweDAwLDB4MDcsMHgyNCwweGIwLDB4MDMsMHgwNiwweDM1LDB4MDAsMHgwMCwweDgzLDB4OTQsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHgwMCwweDYyLDB4MzAsMHgyMSwweDE4LDB4NjgsMHgwMCwweDBhLDB4MDAsMHg0NywweDEwLAotMHhmZiwweDAwLDB4NjUsMHgzMCwweDA0LDB4MDAsMHg4MiwweDhjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NjIsMHhhYywKLTB4MDAsMHgwMCwweGMzLDB4YWMsMHgwNCwweDAwLDB4ODIsMHg4YywweDA4LDB4MDAsMHg4NCwweDI0LDB4MDAsMHgwMCwweGMyLDB4YWMsCi0weGYyLDB4ZmYsMHhhNywweDE0LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNSwweGIwLDB4MDgsMHgzYywweDAxLDB4ODAsMHgwMiwweDNjLAotMHgwYywweDdhLDB4NDQsMHgyNCwweGZmLDB4MDAsMHgwNywweDI0LDB4YjAsMHgwMywweDA2LDB4MzUsMHgwMCwweDAwLDB4ODMsMHg5NCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhmZiwweDAwLDB4NjIsMHgzMCwweDIxLDB4MTgsMHg2OCwweDAwLDB4MGEsMHgwMCwweDQ3LDB4MTAsCi0weGZmLDB4MDAsMHg2NSwweDMwLDB4MDQsMHgwMCwweDgyLDB4OGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg2MiwweGFjLAotMHgwMCwweDAwLDB4YzMsMHhhYywweDA0LDB4MDAsMHg4MiwweDhjLDB4MDgsMHgwMCwweDg0LDB4MjQsMHgwMCwweDAwLDB4YzIsMHhhYywKLTB4ZjIsMHhmZiwweGE3LDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAxLDB4ODAsMHgwMiwweDNjLDB4MDIsMHg4MCwweDA1LDB4M2MsMHgxMCwweDZiLDB4NDIsMHgyNCwweDAyLDB4ODAsMHgwMywweDNjLAotMHhjYywweDdkLDB4YTIsMHhhYywweDAwLDB4ODAsMHgwMiwweDNjLDB4NmMsMHg3ZSwweDYwLDB4YWMsMHhjYywweDdkLDB4YTQsMHgyNCwKLTB4MDIsMHg4MCwweDAzLDB4M2MsMHhjOCwweDA2LDB4NDIsMHgyNCwweDcwLDB4N2UsMHg2MCwweGE0LDB4MDgsMHgwMCwweDgyLDB4YWMsCi0weDAyLDB4ODAsMHgwMywweDNjLDB4MDAsMHg4MCwweDAyLDB4M2MsMHg3MiwweDdlLDB4NjAsMHhhNCwweDAyLDB4ODAsMHgwNiwweDNjLAotMHgwOCwweDBhLDB4NDIsMHgyNCwweDAwLDB4ODAsMHgwMywweDNjLDB4NzQsMHg3ZSwweGM3LDB4MjQsMHgxNCwweDAwLDB4ODIsMHhhYywKLTB4MzgsMHgwOCwweDYzLDB4MjQsMHgwMiwweDgwLDB4MDIsMHgzYywweDc0LDB4N2UsMHhjMCwweGFjLDB4MTAsMHgwMCwweDgzLDB4YWMsCi0weDA0LDB4MDAsMHhlMCwweGFjLDB4N2MsMHg3ZSwweDQwLDB4YTAsMHgwMCwweDgwLDB4MDIsMHgzYywweDg4LDB4MTksMHg0MiwweDI0LAotMHgzYywweDAwLDB4ODIsMHhhYywweDAwLDB4ODAsMHgwMywweDNjLDB4MDAsMHg4MCwweDAyLDB4M2MsMHgyNCwweDBjLDB4NjMsMHgyNCwKLTB4NzgsMHgwZiwweDQyLDB4MjQsMHgxYywweDAwLDB4ODMsMHhhYywweDIwLDB4MDAsMHg4MiwweGFjLDB4MDAsMHg4MCwweDAzLDB4M2MsCi0weDAwLDB4ODAsMHgwMiwweDNjLDB4YzgsMHgxMiwweDYzLDB4MjQsMHgyOCwweDE2LDB4NDIsMHgyNCwweDI0LDB4MDAsMHg4MywweGFjLAotMHgyOCwweDAwLDB4ODIsMHhhYywweDAwLDB4ODAsMHgwMywweDNjLDB4MDEsMHg4MCwweDAyLDB4M2MsMHg0YywweDFmLDB4NjMsMHgyNCwKLTB4ZDAsMHgwNCwweDQyLDB4MjQsMHgyYywweDAwLDB4ODMsMHhhYywweDMwLDB4MDAsMHg4MiwweGFjLDB4MDAsMHg4MCwweDAzLDB4M2MsCi0weDAwLDB4ODAsMHgwMiwweDNjLDB4ZTQsMHgxOSwweDYzLDB4MjQsMHgwMCwweDAzLDB4NDIsMHgyNCwweDM4LDB4MDAsMHg4MywweGFjLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweDRjLDB4MDAsMHg4MiwweGFjLDB4MjUsMHhiMCwweDAyLDB4M2MsMHgwOCwweDAwLDB4NDIsMHgzNCwKLTB4MDAsMHgwMCwweDQzLDB4OGMsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg4MCwweDBlLDB4M2MsCi0weDAyLDB4ODAsMHgwOCwweDNjLDB4MDIsMHg4MCwweDAyLDB4M2MsMHgwMiwweDgwLDB4MDMsMHgzYywweGY4LDB4MDMsMHg0ZCwweDI0LAotMHgwMCwweDE0LDB4NmMsMHgyNCwweDAxLDB4MDAsMHgwNywweDI0LDB4MDAsMHgwMCwweGNiLDB4MjUsMHhmZiwweGZmLDB4MGEsMHgyNCwKLTB4MDAsMHgwNCwweDA5LDB4MjUsMHg4MCwweDFhLDB4MDcsMHgwMCwweDIxLDB4MTAsMHg2YiwweDAwLDB4MDAsMHgwMCwweDQyLDB4YWMsCi0weDkwLDB4MDAsMHg0YSwweGFjLDB4MDAsMHgwNCwweDA0LDB4OGQsMHgwMSwweDAwLDB4ZTcsMHgyNCwweDA4LDB4MDAsMHg0NSwweDI0LAotMHgyMSwweDE4LDB4NmQsMHgwMCwweDA1LDB4MDAsMHhlNiwweDI4LDB4MDQsMHgwMCwweDgyLDB4YWMsMHgwMCwweDAwLDB4NDQsMHhhYywKLTB4MDQsMHgwMCwweDQ5LDB4YWMsMHgwMCwweDA0LDB4MDIsMHhhZCwweDhjLDB4MDAsMHg0MCwweGFjLDB4NmMsMHgwMCwweGEzLDB4YWMsCi0weGYwLDB4ZmYsMHhjMCwweDE0LDB4NjgsMHgwMCwweGFjLDB4YWMsMHgwOCwweDAwLDB4ZTAsMHgwMywweDAwLDB4MDAsMHhjOSwweGFkLAotMHgwNSwweDAwLDB4YTIsMHgyYywweDEzLDB4MDAsMHg0MCwweDEwLDB4ZmYsMHhmZiwweDA3LDB4MjQsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4ODAsMHgxYSwweDA1LDB4MDAsMHgwMCwweDAwLDB4NDIsMHgyNCwweDBlLDB4MDAsMHhhMCwweDEwLDB4MjEsMHgzMCwweDYyLDB4MDAsCi0weDkwLDB4MDAsMHhjMywweDhjLDB4ZmYsMHhmZiwweDAyLDB4MjQsMHgwYSwweDAwLDB4NjIsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHg4YywweDAwLDB4YzIsMHg4YywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDYsMHgwMCwweDQwLDB4MTQsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDAyLDB4MjQsMHg4OCwweDAwLDB4YzQsMHhhYywweDhjLDB4MDAsMHhjMiwweGFjLDB4OTAsMHgwMCwweGM1LDB4YWMsCi0weDIxLDB4MzgsMHhhMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMSwweDEwLDB4ZTAsMHgwMCwweDI1LDB4YjAsMHgwNCwweDNjLAotMHgwMSwweDgwLDB4MDIsMHgzYywweDE4LDB4MDMsMHg4NSwweDM0LDB4ZjQsMHg2YiwweDQyLDB4MjQsMHhlMCwweGZmLDB4YmQsMHgyNywKLTB4MDAsMHgwMCwweGEyLDB4YWMsMHgxYiwweDAwLDB4ODYsMHgzNCwweGRiLDB4ZmYsMHgwMywweDI0LDB4MjcsMHgwMCwweDg0LDB4MzQsCi0weDA3LDB4MDAsMHgwMiwweDI0LDB4MTQsMHgwMCwweGIxLDB4YWYsMHgxMCwweDAwLDB4YjAsMHhhZiwweDAwLDB4MDAsMHg4MywweGEwLAotMHgxOCwweDAwLDB4YmYsMHhhZiwweDAwLDB4MDAsMHhjMiwweGEwLDB4MDEsMHgwMCwweDExLDB4MjQsMHgyMSwweDgwLDB4MDAsMHgwMCwKLTB4N2EsMHg0MiwweDAwLDB4MGMsMHgyMSwweDIwLDB4MDAsMHgwMiwweDAxLDB4MDAsMHgwMiwweDI2LDB4ZmYsMHgwMCwweDUwLDB4MzAsCi0weDJiLDB4MTgsMHgzMCwweDAyLDB4ZmEsMHhmZiwweDYwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDdhLDB4NDIsMHgwMCwweDBjLAotMHgyMSwweDIwLDB4MDAsMHgwMCwweDE4LDB4MDAsMHhiZiwweDhmLDB4MTQsMHgwMCwweGIxLDB4OGYsMHgxMCwweDAwLDB4YjAsMHg4ZiwKLTB4MDEsMHgwMCwweDAyLDB4MjQsMHgwOCwweDAwLDB4ZTAsMHgwMywweDIwLDB4MDAsMHhiZCwweDI3LDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4ODAsMHgwMiwweDNjLAotMHg2OCwweDE1LDB4NDIsMHgyNCwweDQwLDB4MTAsMHgwMywweDNjLDB4ZmYsMHhmZiwweDQ0LDB4MzAsMHgyNSwweGMwLDB4ODMsMHgwMCwKLTB4OTQsMHg2NCwweDU4LDB4YWMsMHg0MCwweDAwLDB4MTgsMHgyNywweGEwLDB4NjQsMHg1OCwweGFjLDB4NDAsMHgwMCwweDE4LDB4MjcsCi0weGFjLDB4NjQsMHg1OCwweGFjLDB4NDAsMHgwMCwweDE4LDB4MjcsMHhiOCwweDY0LDB4NTgsMHhhYywweDQwLDB4MDAsMHgxOCwweDI3LAotMHhlMCwweGZmLDB4YmQsMHgyNywweGM0LDB4NjQsMHg1OCwweGFjLDB4NDAsMHgwMCwweDE4LDB4MjcsMHgxYywweDAwLDB4YjcsMHhhZiwKLTB4MTgsMHgwMCwweGI2LDB4YWYsMHgxNCwweDAwLDB4YjUsMHhhZiwweDEwLDB4MDAsMHhiNCwweGFmLDB4MGMsMHgwMCwweGIzLDB4YWYsCi0weDA4LDB4MDAsMHhiMiwweGFmLDB4MDQsMHgwMCwweGIxLDB4YWYsMHgwMCwweDAwLDB4YjAsMHhhZiwweGQwLDB4NjQsMHg1OCwweGFjLAotMHhhMCwweDY0LDB4NDUsMHg4YywweGFjLDB4NjQsMHg0NiwweDhjLDB4YjgsMHg2NCwweDQ3LDB4OGMsMHhjNCwweDY0LDB4NDgsMHg4YywKLTB4ZDAsMHg2NCwweDQ5LDB4OGMsMHg0MCwweDAwLDB4MTgsMHgyNywweGRjLDB4NjQsMHg1OCwweGFjLDB4MjEsMHg1MCwweDAwLDB4MDMsCi0weDI1LDB4MjAsMHg4MywweDAwLDB4NDAsMHgwMCwweDE4LDB4MjcsMHgyMCwweDEwLDB4MDMsMHgzYywweDkwLDB4NjQsMHg0NCwweGFjLAotMHg5YywweDY0LDB4NDUsMHhhYywweGE4LDB4NjQsMHg0NiwweGFjLDB4YjQsMHg2NCwweDQ3LDB4YWMsMHhjMCwweDY0LDB4NDgsMHhhYywKLTB4Y2MsMHg2NCwweDQ5LDB4YWMsMHgyNSwweGIwLDB4MDYsMHgzYywweDI4LDB4NjQsMHg0MywweGFjLDB4MjQsMHg2NCwweDQzLDB4YWMsCi0weDM0LDB4NjQsMHg0MywweGFjLDB4MzAsMHg2NCwweDQzLDB4YWMsMHg0MCwweDY0LDB4NDMsMHhhYywweDNjLDB4NjQsMHg0MywweGFjLAotMHg0YywweDY0LDB4NDMsMHhhYywweDQ4LDB4NjQsMHg0MywweGFjLDB4ZTgsMHg2NCwweDU4LDB4YWMsMHgwMCwweDAyLDB4MTgsMHgyNywKLTB4ZDgsMHg2NCwweDRhLDB4YWMsMHgwMCwweDY1LDB4NTgsMHhhYywweDU4LDB4NjQsMHg0MywweGFjLDB4NTQsMHg2NCwweDQzLDB4YWMsCi0weDY0LDB4NjQsMHg0MywweGFjLDB4NjAsMHg2NCwweDQzLDB4YWMsMHg3MCwweDY0LDB4NDMsMHhhYywweDZjLDB4NjQsMHg0MywweGFjLAotMHhhYywweDAwLDB4YzQsMHgzNCwweGIwLDB4MDAsMHhjNSwweDM0LDB4MDAsMHgwMCwweDkyLDB4OGMsMHhlOCwweDY0LDB4NTAsMHg4YywKLTB4MDAsMHgwMCwweGIzLDB4OGMsMHgyMSwweDEwLDB4MDQsMHgzYywweDIzLDB4MTAsMHgwOSwweDNjLDB4MjIsMHgxMCwweDBjLDB4M2MsCi0weDAyLDB4ODAsMHgxNCwweDNjLDB4MDIsMHg4MCwweDE1LDB4M2MsMHgwMiwweDgwLDB4MTYsMHgzYywweDAyLDB4ODAsMHgxNywweDNjLAotMHgyNCwweDEwLDB4MDUsMHgzYywweDIxLDB4ODgsMHgwMCwweDAzLDB4MDgsMHg3YiwweDg3LDB4MjYsMHgwMCwweDA0LDB4MTgsMHgyNywKLTB4MTAsMHg3YiwweGE4LDB4MjYsMHgxOCwweDdiLDB4Y2EsMHgyNiwweDIwLDB4N2IsMHhlYiwweDI2LDB4MDAsMHgwNCwweDJkLDB4MzUsCi0weDAwLDB4NDAsMHg4ZSwweDM0LDB4MDAsMHg4MCwweDhmLDB4MzUsMHgwMCwweDAxLDB4YzYsMHgzNCwweGU0LDB4NjQsMHg1MCwweGFjLAotMHhmYywweDY0LDB4NTEsMHhhYywweDY0LDB4NjUsMHg0ZCwweGFjLDB4MjgsMHg2NSwweDUyLDB4YWMsMHgzNCwweDY1LDB4NGUsMHhhYywKLTB4NTgsMHg2NSwweDRmLDB4YWMsMHg0YywweDY1LDB4NTMsMHhhYywweDAwLDB4MDAsMHhjNSwweGFjLDB4NDgsMHg2NSwweDQ1LDB4YWMsCi0weDY4LDB4NjUsMHg0MywweGFjLDB4NzQsMHg2NSwweDU4LDB4YWMsMHg3YywweDY0LDB4NDMsMHhhYywweDc4LDB4NjQsMHg0MywweGFjLAotMHgwNiwweDY1LDB4NDAsMHhhNCwweDA1LDB4NjUsMHg0MCwweGEwLDB4MDQsMHg2NSwweDQwLDB4YTAsMHg1YywweDY1LDB4NDksMHhhYywKLTB4NjAsMHg2NSwweDQ5LDB4YWMsMHgyMCwweDY1LDB4NDQsMHhhYywweDI0LDB4NjUsMHg0NCwweGFjLDB4MmMsMHg2NSwweDQ0LDB4YWMsCi0weDMwLDB4NjUsMHg0NCwweGFjLDB4NTAsMHg2NSwweDRjLDB4YWMsMHg1NCwweDY1LDB4NGMsMHhhYywweDQ0LDB4NjUsMHg0NSwweGFjLAotMHg2YywweDY1LDB4NDMsMHhhYywweDc4LDB4NjUsMHg1OCwweGFjLDB4MDQsMHgwMCwweDA4LDB4YWQsMHgwOCwweDdiLDB4ODcsMHhhZSwKLTB4MDQsMHgwMCwweDRhLDB4YWQsMHgxMCwweDdiLDB4YTgsMHhhZSwweDA0LDB4MDAsMHg2YiwweGFkLDB4MTgsMHg3YiwweGNhLDB4YWUsCi0weDIwLDB4N2IsMHhlYiwweGFlLDB4MDQsMHgwMCwweGU3LDB4YWMsMHgwMiwweDgwLDB4MDIsMHgzYywweDAwLDB4MTQsMHg0MywweDI0LAotMHgyMSwweDIwLDB4ZTAsMHgwMCwweDAzLDB4MDAsMHgwNiwweDI0LDB4MjEsMHgxMCwweDgwLDB4MDAsMHhmZiwweGZmLDB4YzYsMHgyNCwKLTB4MDgsMHgwMCwweDc4LDB4YWMsMHgwMCwweDAwLDB4NjMsMHhhYywweDEwLDB4MDAsMHg2MCwweGFjLDB4MDAsMHgwMCwweDY3LDB4YWMsCi0weDIxLDB4MjAsMHg2MCwweDAwLDB4MDQsMHgwMCwweDYyLDB4YWMsMHgwMCwweDAwLDB4NDMsMHhhYywweDAwLDB4MDEsMHgxOCwweDI3LAotMHhmNSwweGZmLDB4YzEsMHgwNCwweDE4LDB4MDAsMHg2MywweDI0LDB4MDIsMHg4MCwweDAyLDB4M2MsMHgxMCwweDdiLDB4NDksMHgyNCwKLTB4MDIsMHg4MCwweDAzLDB4M2MsMHgwMiwweDgwLDB4MDIsMHgzYywweDA0LDB4MDAsMHgyOCwweDhkLDB4NjAsMHgxNCwweDRiLDB4MjQsCi0weDA0LDB4MDAsMHhlNCwweGFjLDB4MDAsMHgxNCwweDZhLDB4MjQsMHgwMSwweDAwLDB4MDcsMHgyNCwweDIxLDB4MjgsMHgwMCwweDAwLAotMHgwNywweDAwLDB4MDYsMHgyNCwweDIxLDB4MjAsMHhhYiwweDAwLDB4MjEsMHgxMCwweGFhLDB4MDAsMHhmZiwweGZmLDB4YzYsMHgyNCwKLTB4NjgsMHgwMCwweDU4LDB4YWMsMHg3MCwweDAwLDB4NDcsMHhhYywweDE4LDB4MDAsMHhhNSwweDI0LDB4MDAsMHgwMCwweDg5LDB4YWMsCi0weDA0LDB4MDAsMHg4OCwweGFjLDB4MDAsMHgwMCwweDA0LDB4YWQsMHgwMCwweDAxLDB4MTgsMHgyNywweGY1LDB4ZmYsMHhjMSwweDA0LAotMHgyMSwweDQwLDB4ODAsMHgwMCwweDAyLDB4ODAsMHgwMiwweDNjLDB4MTgsMHg3YiwweDRhLDB4MjQsMHgwMiwweDgwLDB4MDMsMHgzYywKLTB4MDIsMHg4MCwweDAyLDB4M2MsMHgwNCwweDAwLDB4NDUsMHg4ZCwweDIwLDB4MTUsMHg0YiwweDI0LDB4MDQsMHgwMCwweDI0LDB4YWQsCi0weDAyLDB4MDAsMHgwNywweDI0LDB4MDAsMHgxNCwweDY5LDB4MjQsMHgyMSwweDIwLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwNiwweDI0LAotMHgyMSwweDQwLDB4OGIsMHgwMCwweDIxLDB4MTAsMHg4OSwweDAwLDB4ZmYsMHhmZiwweGM2LDB4MjQsMHgyOCwweDAxLDB4NTgsMHhhYywKLTB4MzAsMHgwMSwweDQ3LDB4YWMsMHgxOCwweDAwLDB4ODQsMHgyNCwweDAwLDB4MDAsMHgwYSwweGFkLDB4MDQsMHgwMCwweDA1LDB4YWQsCi0weDAwLDB4MDAsMHhhOCwweGFjLDB4MDAsMHgwMiwweDE4LDB4MjcsMHhmNSwweGZmLDB4YzEsMHgwNCwweDIxLDB4MjgsMHgwMCwweDAxLAotMHgwMiwweDgwLDB4MDUsMHgzYywweDIwLDB4N2IsMHhhNSwweDI0LDB4MDQsMHgwMCwweGE2LDB4OGMsMHgxYywweDAwLDB4YjcsMHg4ZiwKLTB4MTgsMHgwMCwweGI2LDB4OGYsMHgxNCwweDAwLDB4YjUsMHg4ZiwweDEwLDB4MDAsMHhiNCwweDhmLDB4MGMsMHgwMCwweGIzLDB4OGYsCi0weDA4LDB4MDAsMHhiMiwweDhmLDB4MDQsMHgwMCwweGIxLDB4OGYsMHgwMCwweDAwLDB4YjAsMHg4ZiwweDAyLDB4ODAsMHgwNywweDNjLAotMHgwMiwweDgwLDB4MDMsMHgzYywweDUwLDB4MTUsMHhlNCwweDI0LDB4MDAsMHgxNCwweDYzLDB4MjQsMHgwMywweDAwLDB4MDIsMHgyNCwKLTB4MjAsMHgwMCwweGJkLDB4MjcsMHg1OCwweDAxLDB4NzgsMHhhYywweDA0LDB4MDAsMHg0OCwweGFkLDB4MDQsMHgwMCwweGE0LDB4YWMsCi0weDYwLDB4MDEsMHg2MiwweGFjLDB4NTAsMHgxNSwweGU1LDB4YWMsMHgwNCwweDAwLDB4ODYsMHhhYywweDA4LDB4MDAsMHhlMCwweDAzLAotMHgwMCwweDAwLDB4YzQsMHhhYywweGQwLDB4ZmYsMHhiZCwweDI3LDB4MDIsMHg4MCwweDAyLDB4M2MsMHgyMCwweDAwLDB4YjIsMHhhZiwKLTB4MDIsMHg4MCwweDAzLDB4M2MsMHg0YywweDkxLDB4NTIsMHgyNCwweDAyLDB4ODAsMHgwMiwweDNjLDB4MjgsMHgwMCwweGI0LDB4YWYsCi0weDI0LDB4MDAsMHhiMywweGFmLDB4MWMsMHgwMCwweGIxLDB4YWYsMHgxOCwweDAwLDB4YjAsMHhhZiwweDJjLDB4MDAsMHhiZiwweGFmLAotMHhkOCwweDkwLDB4NzMsMHgyNCwweDY4LDB4MTUsMHg1MCwweDI0LDB4MjEsMHg4OCwweDAwLDB4MDAsMHgwMiwweDgwLDB4MTQsMHgzYywKLTB4ZWUsMHg0ZSwweDAwLDB4MGMsMHgyMSwweDIwLDB4MjAsMHgwMiwweDc4LDB4NTEsMHgwNSwweDhlLDB4NmMsMHgwMCwweDY2LDB4OGUsCi0weGI4LDB4OTAsMHg4MiwweDI2LDB4NmMsMHgwMCwweDQzLDB4OGUsMHgxYiwweDAwLDB4NDQsMHg5MCwweGZmLDB4ZjEsMHgwMiwweDI0LAotMHgyMSwweDE4LDB4NjYsMHgwMCwweDI0LDB4MjgsMHhhMiwweDAwLDB4MDAsMHgyMSwweDA0LDB4MDAsMHg0MiwweDE4LDB4MDMsMHgwMCwKLTB4MDAsMHgwMiwweGE1LDB4MzQsMHg0NCwweDUxLDB4MDMsMHhhZSwweDY4LDB4NTEsMHgwNCwweGFlLDB4NzgsMHg1MSwweDA1LDB4YWUsCi0weDZjLDB4NTEsMHgwNCwweGFlLDB4MjEsMHgzMCwweDAwLDB4MDAsMHgyMSwweDEwLDB4MDYsMHgwMiwweDAxLDB4MDAsMHhjNiwweDI0LAotMHgxZCwweDAwLDB4YzMsMHgyOCwweDk5LDB4NTEsMHg0MCwweGEwLDB4N2MsMHg1MSwweDQwLDB4YTAsMHhmYSwweGZmLDB4NjAsMHgxNCwKLTB4YjYsMHg1MSwweDQwLDB4YTAsMHgwMSwweDAwLDB4MzEsMHgyNiwweDIwLDB4MDAsMHgyMiwweDJhLDB4ZDQsMHg1MSwweDAwLDB4YWUsCi0weGUzLDB4ZmYsMHg0MCwweDE0LDB4OTQsMHgwMCwweDEwLDB4MjYsMHgwMiwweDgwLDB4MDIsMHgzYywweDAyLDB4ODAsMHgwMywweDNjLAotMHg2OCwweDE1LDB4NGIsMHgyNCwweDAyLDB4ODAsMHgwMiwweDNjLDB4NGMsMHg5MSwweDZmLDB4MjQsMHhkOCwweDkwLDB4NGQsMHgyNCwKLTB4MDIsMHg4MCwweDAzLDB4M2MsMHgwMiwweDgwLDB4MDIsMHgzYywweGI4LDB4OTAsMHg2ZSwweDI0LDB4OTgsMHg5MCwweDRjLDB4MjQsCi0weDIxLDB4ODgsMHgwMCwweDAwLDB4ODAsMHgxOCwweDExLDB4MDAsMHgyMSwweDIwLDB4NmQsMHgwMCwweDIxLDB4MTAsMHg2ZiwweDAwLAotMHgyMSwweDI4LDB4MmUsMHgwMiwweDIxLDB4MzAsMHgyYywweDAyLDB4MDAsMHgwMCwweDg4LDB4OGMsMHgwMCwweDAwLDB4YTksMHg5MCwKLTB4MDAsMHgwMCwweGM3LDB4OTAsMHgwMCwweDAwLDB4NGEsMHg4YywweDIxLDB4MTAsMHgyYiwweDAyLDB4MDEsMHgwMCwweDMxLDB4MjYsCi0weDIxLDB4MTgsMHg2YiwweDAwLDB4MWQsMHgwMCwweDI0LDB4MmEsMHhlYywweDQ0LDB4NjgsMHhhYywweGNhLDB4NDQsMHg0NywweGEwLAotMHg2MCwweDQ1LDB4NmEsMHhhYywweGVmLDB4ZmYsMHg4MCwweDE0LDB4OTAsMHg0NCwweDQ5LDB4YTAsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4NjgsMHgxNSwweDRhLDB4MjQsMHgwMiwweDgwLDB4MDMsMHgzYywweDAyLDB4ODAsMHgwMiwweDNjLDB4NzQsMHg4ZiwweDZiLDB4MjQsCi0weDE0LDB4OGUsMHg0YywweDI0LDB4MjEsMHg4OCwweDAwLDB4MDAsMHgyMSwweDQ4LDB4MDAsMHgwMCwweDIxLDB4MzAsMHgwMCwweDAwLAotMHgyMSwweDQwLDB4MmEsMHgwMSwweDIxLDB4MzgsMHgyYiwweDAxLDB4MjEsMHgxMCwweGU2LDB4MDAsMHg5MSwweDAwLDB4NDQsMHg5MCwKLTB4MDAsMHgwMCwweDQ1LDB4OTAsMHgyMSwweDE4LDB4MDYsMHgwMSwweDAxLDB4MDAsMHhjNiwweDI0LDB4MDUsMHgwMCwweGMyLDB4MjgsCi0weGM1LDB4NDMsMHg2NCwweGEwLDB4ZjgsMHhmZiwweDQwLDB4MTQsMHgzNCwweDQzLDB4NjUsMHhhMCwweDIxLDB4MTAsMHgyYywweDAyLAotMHgxZCwweDAwLDB4NDQsMHg5MCwweDAwLDB4MDAsMHg0NSwweDkwLDB4MjEsMHgxOCwweDJhLDB4MDIsMHgwMSwweDAwLDB4MzEsMHgyNiwKLTB4MWQsMHgwMCwweDIyLDB4MmEsMHg3MywweDQ0LDB4NjQsMHhhMCwweDU2LDB4NDQsMHg2NSwweGEwLDB4ZWIsMHhmZiwweDQwLDB4MTQsCi0weDA1LDB4MDAsMHgyOSwweDI1LDB4NTIsMHgwMCwweDAyLDB4MjQsMHgxMCwweDAwLDB4YTIsMHhhMywweDQxLDB4MDAsMHgwMywweDI0LAotMHg0ZCwweDAwLDB4MDIsMHgyNCwweDAyLDB4ODAsMHgwNywweDNjLDB4MWMsMHg5NywweGU3LDB4MjQsMHgxMSwweDAwLDB4YTMsMHhhMywKLTB4MTIsMHgwMCwweGEyLDB4YTMsMHhlOCwweDAzLDB4MDMsMHgyNCwweDAxLDB4MDAsMHgwMiwweDI0LDB4MDAsMHg4MCwweDA2LDB4M2MsCi0weDEwLDB4MDAsMHhhNSwweDI3LDB4MjEsMHgyMCwweGUwLDB4MDAsMHhmMCwweDM3LDB4YzYsMHgyNCwweDBjLDB4MDAsMHhlMywweGFjLAotMHgxNCwweDAwLDB4ZTIsMHhhMCwweGZiLDB4MGMsMHgwMCwweDBjLDB4MTMsMHgwMCwweGEwLDB4YTMsMHgyYywweDAwLDB4YmYsMHg4ZiwKLTB4MjgsMHgwMCwweGI0LDB4OGYsMHgyNCwweDAwLDB4YjMsMHg4ZiwweDIwLDB4MDAsMHhiMiwweDhmLDB4MWMsMHgwMCwweGIxLDB4OGYsCi0weDE4LDB4MDAsMHhiMCwweDhmLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgzMCwweDAwLDB4YmQsMHgyNywweGUwLDB4ZmYsMHhiZCwweDI3LAotMHgwMiwweDgwLDB4MDIsMHgzYywweDQyLDB4MDAsMHgwMywweDI0LDB4MTAsMHgwMCwweGEzLDB4YTMsMHg1NSwweDYwLDB4NDAsMHhhMCwKLTB4NGUsMHgwMCwweDAzLDB4MjQsMHg0MywweDAwLDB4MDIsMHgyNCwweDAyLDB4ODAsMHgwNywweDNjLDB4NTQsMHg5NywweGU3LDB4MjQsCi0weDExLDB4MDAsMHhhMiwweGEzLDB4MTIsMHgwMCwweGEzLDB4YTMsMHhkMCwweDA3LDB4MDIsMHgyNCwweDAxLDB4MDAsMHgwMywweDI0LAotMHgwMCwweDgwLDB4MDYsMHgzYywweDEwLDB4MDAsMHhhNSwweDI3LDB4MjEsMHgyMCwweGUwLDB4MDAsMHhkYywweDQ0LDB4YzYsMHgyNCwKLTB4MGMsMHgwMCwweGUyLDB4YWMsMHgxNCwweDAwLDB4ZTMsMHhhMCwweDE4LDB4MDAsMHhiZiwweGFmLDB4ZmIsMHgwYywweDAwLDB4MGMsCi0weDEzLDB4MDAsMHhhMCwweGEzLDB4MTgsMHgwMCwweGJmLDB4OGYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLAotMHgyMCwweDAwLDB4YmQsMHgyNywweDQ4LDB4ZmQsMHhiZCwweDI3LDB4YjQsMHgwMiwweGIzLDB4YWYsMHgwMiwweDgwLDB4MDIsMHgzYywKLTB4MDIsMHg4MCwweDEzLDB4M2MsMHgyNCwweDkyLDB4NDYsMHgyNCwweDY4LDB4MTUsMHg2MywweDI2LDB4YjAsMHgwMiwweGIyLDB4YWYsCi0weGFjLDB4MDIsMHhiMSwweGFmLDB4YTgsMHgwMiwweGIwLDB4YWYsMHgwMywweDQwLDB4NjAsMHhhMCwweDIxLDB4MzgsMHhhMCwweDAzLAotMHg5MCwweDAwLDB4YzgsMHgyNCwweDAwLDB4MDAsMHhjMiwweDhjLDB4MDQsMHgwMCwweGMzLDB4OGMsMHgwOCwweDAwLDB4YzQsMHg4YywKLTB4MGMsMHgwMCwweGM1LDB4OGMsMHgxMCwweDAwLDB4YzYsMHgyNCwweDAwLDB4MDAsMHhlMiwweGFjLDB4MDQsMHgwMCwweGUzLDB4YWMsCi0weDA4LDB4MDAsMHhlNCwweGFjLDB4MGMsMHgwMCwweGU1LDB4YWMsMHhmNiwweGZmLDB4YzgsMHgxNCwweDEwLDB4MDAsMHhlNywweDI0LAotMHgwMCwweDAwLDB4YzMsMHg4YywweDAyLDB4ODAsMHgwMiwweDNjLDB4YjgsMHg5MiwweDU4LDB4MjQsMHgwMCwweDAwLDB4ZTMsMHhhYywKLTB4OTgsMHgwMCwweGI5LDB4MjcsMHgwMCwweDAxLDB4MTIsMHgyNywweDAxLDB4MDAsMHgwMiwweDkzLDB4MDUsMHgwMCwweDAzLDB4OTMsCi0weDA5LDB4MDAsMHgwNCwweDkzLDB4MGQsMHgwMCwweDA1LDB4OTMsMHgwMCwweDAwLDB4MTEsMHg5MywweDAyLDB4MDAsMHgwZCwweDkzLAotMHgwNCwweDAwLDB4MTAsMHg5MywweDA2LDB4MDAsMHgwYywweDkzLDB4MDgsMHgwMCwweDBmLDB4OTMsMHgwYSwweDAwLDB4MDcsMHg5MywKLTB4MGMsMHgwMCwweDBlLDB4OTMsMHgwZSwweDAwLDB4MDYsMHg5MywweDAzLDB4MDAsMHgwOCwweDkzLDB4MDcsMHgwMCwweDA5LDB4OTMsCi0weDBiLDB4MDAsMHgwYSwweDkzLDB4MGYsMHgwMCwweDBiLDB4OTMsMHgwMCwweDEyLDB4MDIsMHgwMCwweDAwLDB4MWEsMHgwMywweDAwLAotMHgwMCwweDIyLDB4MDQsMHgwMCwweDAwLDB4MmEsMHgwNSwweDAwLDB4MjUsMHgxMCwweDUxLDB4MDAsMHgyNSwweDE4LDB4NzAsMHgwMCwKLTB4MjUsMHgyMCwweDhmLDB4MDAsMHgyNSwweDI4LDB4YWUsMHgwMCwweDAwLDB4NmMsMHgwZCwweDAwLDB4MDAsMHg2NCwweDBjLDB4MDAsCi0weDAwLDB4M2MsMHgwNywweDAwLDB4MDAsMHgzNCwweDA2LDB4MDAsMHgyNSwweDY4LDB4YTIsMHgwMSwweDI1LDB4NjAsMHg4MywweDAxLAotMHgyNSwweDM4LDB4ZTQsMHgwMCwweDI1LDB4MzAsMHhjNSwweDAwLDB4MDAsMHg0NiwweDA4LDB4MDAsMHgwMCwweDRlLDB4MDksMHgwMCwKLTB4MDAsMHg1NiwweDBhLDB4MDAsMHgwMCwweDVlLDB4MGIsMHgwMCwweDI1LDB4NDAsMHgwZCwweDAxLDB4MjUsMHg0OCwweDJjLDB4MDEsCi0weDI1LDB4NTAsMHg0NywweDAxLDB4MjUsMHg1OCwweDY2LDB4MDEsMHgxMCwweDAwLDB4MTgsMHgyNywweDAwLDB4MDAsMHgyOCwweGFmLAotMHgwNCwweDAwLDB4MjksMHhhZiwweDA4LDB4MDAsMHgyYSwweGFmLDB4MGMsMHgwMCwweDJiLDB4YWYsMHhkMiwweGZmLDB4MTIsMHgxNywKLTB4MTAsMHgwMCwweDM5LDB4MjcsMHgwMSwweDAwLDB4MDIsMHg5MywweDA1LDB4MDAsMHgwMywweDkzLDB4MDAsMHgwMCwweDA5LDB4OTMsCi0weDAyLDB4MDAsMHgwNCwweDkzLDB4MDQsMHgwMCwweDA4LDB4OTMsMHgwNiwweDAwLDB4MDUsMHg5MywweDA3LDB4MDAsMHgwNiwweDkzLAotMHgwMywweDAwLDB4MDcsMHg5MywweDAwLDB4MTIsMHgwMiwweDAwLDB4MDAsMHgxYSwweDAzLDB4MDAsMHgyNSwweDEwLDB4NDksMHgwMCwKLTB4MjUsMHgxOCwweDY4LDB4MDAsMHgwMCwweDI0LDB4MDQsMHgwMCwweDAwLDB4MmMsMHgwNSwweDAwLDB4MjUsMHgyMCwweDgyLDB4MDAsCi0weDI1LDB4MjgsMHhhMywweDAwLDB4MDAsMHgzZSwweDA3LDB4MDAsMHgwMCwweDM2LDB4MDYsMHgwMCwweDAyLDB4ODAsMHgwMiwweDNjLAotMHgyNSwweDM4LDB4ZTQsMHgwMCwweDI1LDB4MzAsMHhjNSwweDAwLDB4YzAsMHg5MywweDU4LDB4MjQsMHgwNCwweDAwLDB4MjYsMHhhZiwKLTB4MDAsMHgwMCwweDI3LDB4YWYsMHgwMCwweDAxLDB4MTIsMHgyNywweGEwLDB4MDEsMHhiOSwweDI3LDB4MDEsMHgwMCwweDAyLDB4OTMsCi0weDA1LDB4MDAsMHgwMywweDkzLDB4MDksMHgwMCwweDA0LDB4OTMsMHgwZCwweDAwLDB4MDUsMHg5MywweDAwLDB4MDAsMHgxMSwweDkzLAotMHgwMiwweDAwLDB4MGQsMHg5MywweDA0LDB4MDAsMHgxMCwweDkzLDB4MDYsMHgwMCwweDBjLDB4OTMsMHgwOCwweDAwLDB4MGYsMHg5MywKLTB4MGEsMHgwMCwweDA3LDB4OTMsMHgwYywweDAwLDB4MGUsMHg5MywweDBlLDB4MDAsMHgwNiwweDkzLDB4MDMsMHgwMCwweDA4LDB4OTMsCi0weDA3LDB4MDAsMHgwOSwweDkzLDB4MGIsMHgwMCwweDBhLDB4OTMsMHgwZiwweDAwLDB4MGIsMHg5MywweDAwLDB4MTIsMHgwMiwweDAwLAotMHgwMCwweDFhLDB4MDMsMHgwMCwweDAwLDB4MjIsMHgwNCwweDAwLDB4MDAsMHgyYSwweDA1LDB4MDAsMHgyNSwweDEwLDB4NTEsMHgwMCwKLTB4MjUsMHgxOCwweDcwLDB4MDAsMHgyNSwweDIwLDB4OGYsMHgwMCwweDI1LDB4MjgsMHhhZSwweDAwLDB4MDAsMHg2YywweDBkLDB4MDAsCi0weDAwLDB4NjQsMHgwYywweDAwLDB4MDAsMHgzYywweDA3LDB4MDAsMHgwMCwweDM0LDB4MDYsMHgwMCwweDI1LDB4NjgsMHhhMiwweDAxLAotMHgyNSwweDYwLDB4ODMsMHgwMSwweDI1LDB4MzgsMHhlNCwweDAwLDB4MjUsMHgzMCwweGM1LDB4MDAsMHgwMCwweDQ2LDB4MDgsMHgwMCwKLTB4MDAsMHg0ZSwweDA5LDB4MDAsMHgwMCwweDU2LDB4MGEsMHgwMCwweDAwLDB4NWUsMHgwYiwweDAwLDB4MjUsMHg0MCwweDBkLDB4MDEsCi0weDI1LDB4NDgsMHgyYywweDAxLDB4MjUsMHg1MCwweDQ3LDB4MDEsMHgyNSwweDU4LDB4NjYsMHgwMSwweDEwLDB4MDAsMHgxOCwweDI3LAotMHgwMCwweDAwLDB4MjgsMHhhZiwweDA0LDB4MDAsMHgyOSwweGFmLDB4MDgsMHgwMCwweDJhLDB4YWYsMHgwYywweDAwLDB4MmIsMHhhZiwKLTB4ZDIsMHhmZiwweDEyLDB4MTcsMHgxMCwweDAwLDB4MzksMHgyNywweDAxLDB4MDAsMHgwMiwweDkzLDB4MDUsMHgwMCwweDAzLDB4OTMsCi0weDAwLDB4MDAsMHgwOSwweDkzLDB4MDIsMHgwMCwweDA0LDB4OTMsMHgwNCwweDAwLDB4MDgsMHg5MywweDA2LDB4MDAsMHgwNSwweDkzLAotMHgwNywweDAwLDB4MDYsMHg5MywweDAzLDB4MDAsMHgwNywweDkzLDB4MDAsMHgxMiwweDAyLDB4MDAsMHgwMCwweDFhLDB4MDMsMHgwMCwKLTB4MjUsMHgxMCwweDQ5LDB4MDAsMHgyNSwweDE4LDB4NjgsMHgwMCwweDAwLDB4MjQsMHgwNCwweDAwLDB4MDAsMHgyYywweDA1LDB4MDAsCi0weDI1LDB4MjAsMHg4MiwweDAwLDB4MjUsMHgyOCwweGEzLDB4MDAsMHgwMCwweDNlLDB4MDcsMHgwMCwweDAwLDB4MzYsMHgwNiwweDAwLAotMHgyNSwweDMwLDB4YzUsMHgwMCwweDI1LDB4MzgsMHhlNCwweDAwLDB4MDIsMHg4MCwweDAyLDB4M2MsMHgwNCwweDAwLDB4MjYsMHhhZiwKLTB4MDAsMHgwMCwweDI3LDB4YWYsMHg2OCwweDE1LDB4NDYsMHgyNCwweDIxLDB4NTAsMHgwMCwweDAwLDB4ODAsMHgyMCwweDBhLDB4MDAsCi0weDIxLDB4MTAsMHg5ZCwweDAwLDB4MDAsMHgwMCwweDQ1LDB4OGMsMHgwMSwweDAwLDB4NDMsMHgyNSwweGZmLDB4MDAsMHg2YSwweDMwLAotMHgyMSwweDIwLDB4ODYsMHgwMCwweDI1LDB4MDAsMHg0MiwweDJkLDB4ZjgsMHhmZiwweDQwLDB4MTQsMHgxOCwweDQwLDB4ODUsMHhhYywKLTB4MDIsMHg4MCwweDAyLDB4M2MsMHg2OCwweDE1LDB4NGIsMHgyNCwweDIxLDB4NTAsMHgwMCwweDAwLDB4YzAsMHgxMCwweDBhLDB4MDAsCi0weDIxLDB4NDgsMHg1ZCwweDAwLDB4MjEsMHgzOCwweDAwLDB4MDAsMHgyMSwweDQwLDB4NGIsMHgwMCwweDIxLDB4MTAsMHgyNywweDAxLAotMHhhMCwweDAxLDB4NDYsMHg5MCwweDk4LDB4MDAsMHg0NSwweDkwLDB4MDEsMHgwMCwweGU0LDB4MjQsMHgyMSwweDE4LDB4MDcsMHgwMSwKLTB4ZmYsMHgwMCwweDg3LDB4MzAsMHgwOCwweDAwLDB4ZTIsMHgyYywweGI0LDB4NDEsMHg2NiwweGEwLDB4ZjcsMHhmZiwweDQwLDB4MTQsCi0weGFjLDB4NDAsMHg2NSwweGEwLDB4MDEsMHgwMCwweDQyLDB4MjUsMHhmZiwweDAwLDB4NGEsMHgzMCwweDIxLDB4MDAsMHg0MywweDJkLAotMHhlZiwweGZmLDB4NjAsMHgxNCwweGMwLDB4MTAsMHgwYSwweDAwLDB4MjUsMHhiMCwweDAyLDB4M2MsMHgwYSwweDAwLDB4NDIsMHgzNCwKLTB4MDAsMHgwMCwweDQzLDB4OTAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIwLDB4MDAsMHg2MywweDMwLDB4NDIsMHgwMCwweDYwLDB4MTAsCi0weDY4LDB4MTUsMHg2NCwweDI2LDB4MzMsMHgwMCwweDAyLDB4MjQsMHhjMSwweDQyLDB4NjIsMHhhMSwweDFjLDB4MDAsMHgwMywweDI0LAotMHgwZiwweDAwLDB4MDIsMHgyNCwweGJjLDB4NDIsMHg2MywweGExLDB4YmQsMHg0MiwweDYyLDB4YTEsMHg2OCwweDE1LDB4NjUsMHgyNiwKLTB4MDgsMHg0MCwweGE0LDB4OGMsMHhmZiwweDdmLDB4MDgsMHgzYywweGZmLDB4ZmYsMHgwOCwweDM1LDB4YzAsMHhmZiwweDAyLDB4MjQsCi0weDI0LDB4MjAsMHg4OCwweDAwLDB4MjQsMHgyMCwweDgyLDB4MDAsMHgwYywweDAwLDB4ODQsMHgzNCwweGZmLDB4YzAsMHgwMiwweDI0LAotMHgyNCwweDIwLDB4ODIsMHgwMCwweGMwLDB4ZmYsMHgwMiwweDNjLDB4ZmYsMHhmZiwweDQyLDB4MzQsMHgwMCwweDE4LDB4ODQsMHgzNCwKLTB4YmYsMHhmZiwweDAzLDB4M2MsMHgyNCwweDIwLDB4ODIsMHgwMCwweGZmLDB4ZmYsMHg2MywweDM0LDB4N2YsMHhmZiwweDAyLDB4M2MsCi0weDI0LDB4MjAsMHg4MywweDAwLDB4ZmYsMHhmZiwweDQyLDB4MzQsMHgyNCwweDIwLDB4ODIsMHgwMCwweDBjLDB4NDAsMHhhNiwweDhjLAotMHg3ZiwweGZmLDB4MDMsMHgyNCwweDQwLDB4NDAsMHg4NCwweDM0LDB4ZmYsMHhmZiwweDAyLDB4M2MsMHgyNCwweDIwLDB4ODMsMHgwMCwKLTB4ZmYsMHg3ZiwweDQyLDB4MzQsMHhmZiwweGJmLDB4MDMsMHgzYywweDEwLDB4NDAsMHhhNywweDhjLDB4MjQsMHgyMCwweDgyLDB4MDAsCi0weGZmLDB4ZmYsMHg2MywweDM0LDB4ZmYsMHg5ZiwweDAyLDB4M2MsMHgyNCwweDMwLDB4YzMsMHgwMCwweGZmLDB4ZmYsMHg0MiwweDM0LAotMHhmZiwweDNmLDB4MDMsMHgzYywweDI0LDB4MjAsMHg4MiwweDAwLDB4ZmYsMHhmZiwweDYzLDB4MzQsMHgxMiwweDAwLDB4MDIsMHgyNCwKLTB4YjQsMHgwMiwweGIzLDB4OGYsMHhiMCwweDAyLDB4YjIsMHg4ZiwweGFjLDB4MDIsMHhiMSwweDhmLDB4YTgsMHgwMiwweGIwLDB4OGYsCi0weDI0LDB4MzgsMHhlMywweDAwLDB4YzcsMHg0MiwweGEyLDB4YTAsMHgxZiwweDAwLDB4MDMsMHgyNCwweDAxLDB4MDAsMHgwMiwweDI0LAotMHgyNCwweDMwLDB4YzgsMHgwMCwweGJlLDB4NDIsMHhhMywweGEwLDB4YzAsMHg0MiwweGEyLDB4YTAsMHhmZiwweDAwLDB4MDMsMHgyNCwKLTB4ZmYsMHhmZiwweDAyLDB4MjQsMHhiOCwweDAyLDB4YmQsMHgyNywweDA4LDB4NDAsMHhhNCwweGFjLDB4MTAsMHg0MCwweGE3LDB4YWMsCi0weDBjLDB4NDAsMHhhNiwweGFjLDB4YzIsMHg0MiwweGEyLDB4YTAsMHhjNCwweDQyLDB4YTMsMHhhNCwweGJmLDB4NDIsMHhhMCwweGEwLAotMHgwOCwweDAwLDB4ZTAsMHgwMywweGM2LDB4NDIsMHhhMCwweGEwLDB4MzMsMHgwMCwweDAyLDB4MjQsMHhjMSwweDQyLDB4ODIsMHhhMCwKLTB4MGQsMHgwMCwweDAzLDB4MjQsMHgwMywweDAwLDB4MDIsMHgyNCwweGJjLDB4NDIsMHg4MywweGEwLDB4NjUsMHg1ZCwweDAwLDB4MDgsCi0weGJkLDB4NDIsMHg4MiwweGEwLDB4ZTAsMHhmZiwweGJkLDB4MjcsMHgwMiwweDgwLDB4MDcsMHgzYywweDY4LDB4MTUsMHhlNywweDI0LAotMHgxOCwweDAwLDB4YmYsMHhhZiwweDAwLDB4NDAsMHhlMywweDhjLDB4ZjAsMHhmZiwweDAyLDB4MjQsMHgwMiwweDgwLDB4MDgsMHgzYywKLTB4MjQsMHgxOCwweDYyLDB4MDAsMHhmZiwweGYwLDB4MDIsMHgyNCwweDI0LDB4MTgsMHg2MiwweDAwLDB4MDAsMHg0MCwweGUzLDB4YWMsCi0weDFjLDB4MDAsMHgwMywweDI0LDB4MzYsMHgwMCwweDAyLDB4MjQsMHhjZiwweDQyLDB4ZTMsMHhhMCwweDIwLDB4MDAsMHgwMywweDI0LAotMHhjZSwweDQyLDB4ZTIsMHhhMCwweGQxLDB4NDIsMHhlMywweGEwLDB4MzIsMHgwMCwweDAyLDB4MjQsMHgyMCwweDAwLDB4MDMsMHgyNCwKLTB4ZDAsMHg0MiwweGUyLDB4YTAsMHhjOCwweDQyLDB4ZTMsMHhhNCwweDBhLDB4MDAsMHgwMiwweDI0LDB4MDAsMHgwMiwweDAzLDB4MjQsCi0weGQyLDB4NDIsMHhlMiwweGEwLDB4Y2MsMHg0MiwweGUzLDB4YTQsMHgwMCwweDAxLDB4MDIsMHgyNCwweDQ5LDB4MDAsMHgwMywweDI0LAotMHgzOCwweDk3LDB4MDgsMHgyNSwweGZmLDB4ZmYsMHgwYSwweDM0LDB4MDEsMHgwMCwweDA5LDB4MjQsMHgxMSwweDAwLDB4YTMsMHhhMywKLTB4Y2EsMHg0MiwweGUyLDB4YTQsMHhkMCwweDA3LDB4MDMsMHgyNCwweDQ0LDB4MDAsMHgwMiwweDI0LDB4MDAsMHg4MCwweDA2LDB4M2MsCi0weDEwLDB4MDAsMHhhMiwweGEzLDB4MTAsMHgwMCwweGE1LDB4MjcsMHg0NywweDAwLDB4MDIsMHgyNCwweDIxLDB4MjAsMHgwMCwweDAxLAotMHg1NCwweDQ1LDB4YzYsMHgyNCwweDA0LDB4NDAsMHhlYSwweGFjLDB4MDIsMHg0MCwweGU5LDB4YTAsMHgwYywweDAwLDB4MDMsMHhhZCwKLTB4MTQsMHgwMCwweDA5LDB4YTEsMHhlNiwweDQyLDB4ZTAsMHhhMCwweGRjLDB4NjMsMHhlYSwweGFjLDB4ZDcsMHg0MiwweGUwLDB4YTAsCi0weDEyLDB4MDAsMHhhMiwweGEzLDB4ZmIsMHgwYywweDAwLDB4MGMsMHgxMywweDAwLDB4YTAsMHhhMywweDE4LDB4MDAsMHhiZiwweDhmLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjAsMHgwMCwweGJkLDB4MjcsMHhlMCwweGZmLDB4YmQsMHgyNywKLTB4MDIsMHg4MCwweDAyLDB4M2MsMHg1MCwweDAwLDB4MDMsMHgyNCwweDEwLDB4MDAsMHhhMywweGEzLDB4MmEsMHg2MiwweDQwLDB4YTAsCi0weDQxLDB4MDAsMHgwMywweDI0LDB4NTIsMHgwMCwweDAyLDB4MjQsMHgwMiwweDgwLDB4MDcsMHgzYywweGM0LDB4OTcsMHhlNywweDI0LAotMHgxMSwweDAwLDB4YTIsMHhhMywweDEyLDB4MDAsMHhhMywweGEzLDB4ZDAsMHgwNywweDAyLDB4MjQsMHgwMSwweDAwLDB4MDMsMHgyNCwKLTB4MDEsMHg4MCwweDA2LDB4M2MsMHgxMCwweDAwLDB4YTUsMHgyNywweDIxLDB4MjAsMHhlMCwweDAwLDB4ODgsMHg1YiwweGM2LDB4MjQsCi0weDBjLDB4MDAsMHhlMiwweGFjLDB4MTQsMHgwMCwweGUzLDB4YTAsMHgxOCwweDAwLDB4YmYsMHhhZiwweGZiLDB4MGMsMHgwMCwweDBjLAotMHgxMywweDAwLDB4YTAsMHhhMywweDE4LDB4MDAsMHhiZiwweDhmLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MjAsMHgwMCwweGJkLDB4MjcsMHhkOCwweGZmLDB4YmQsMHgyNywweDE4LDB4MDAsMHhiMCwweGFmLDB4MDIsMHg4MCwweDEwLDB4M2MsCi0weDY4LDB4MTUsMHgxMCwweDI2LDB4MjAsMHgwMCwweGJmLDB4YWYsMHgxYywweDAwLDB4YjEsMHhhZiwweDAwLDB4NDAsMHgwOSwweDhlLAotMHhmZiwweGZmLDB4MDIsMHgyNCwweGZmLDB4MDAsMHg0YiwweDMwLDB4MGYsMHhmZiwweDAyLDB4MjQsMHgyNCwweDQ4LDB4MjIsMHgwMSwKLTB4ZmYsMHhmZiwweDAyLDB4M2MsMHhmZiwweDBmLDB4NDIsMHgzNCwweDI0LDB4NDgsMHgyMiwweDAxLDB4MDEsMHgwMCwweDA3LDB4M2MsCi0weDQ3LDB4MDAsMHgwMiwweDI0LDB4M2IsMHgwMCwweDAzLDB4MjQsMHgwMiwweDgwLDB4MDgsMHgzYywweDEwLDB4MDAsMHhhMiwweGEzLAotMHgxMSwweDAwLDB4YTMsMHhhMywweGUwLDB4OTcsMHgwOCwweDI1LDB4NTYsMHgzMCwweGVhLDB4MzQsMHhkMCwweDA3LDB4MDIsMHgyNCwKLTB4MDEsMHgwMCwweDAzLDB4MjQsMHhmNCwweDk4LDB4ZTcsMHgzNCwweDAwLDB4ODAsMHgwNiwweDNjLDB4MDQsMHg0MywweDBiLDB4YWUsCi0weDAwLDB4NDAsMHgwOSwweGFlLDB4NDMsMHgwMCwweDExLDB4MjQsMHgxMCwweDAwLDB4YTUsMHgyNywweDBjLDB4NDMsMHgwNywweGFlLAotMHgxMCwweDQzLDB4MGEsMHhhZSwweDBjLDB4MDAsMHgwMiwweGFkLDB4MTQsMHgwMCwweDAzLDB4YTEsMHgwOCwweDQzLDB4MDAsMHhhZSwKLTB4MTQsMHg0MywweDAwLDB4YWUsMHgxOCwweDQzLDB4MDAsMHhhZSwweDIxLDB4MjAsMHgwMCwweDAxLDB4ZTQsMHg0ZSwweGM2LDB4MjQsCi0weDEyLDB4MDAsMHhiMSwweGEzLDB4ZmIsMHgwYywweDAwLDB4MGMsMHgxMywweDAwLDB4YTAsMHhhMywweDFlLDB4MDAsMHgwMiwweDI0LAotMHgyMSwweDQzLDB4MDIsMHhhMiwweDRhLDB4MDAsMHgwMywweDI0LDB4NDUsMHgwMCwweDAyLDB4MjQsMHgxYywweDQzLDB4MDMsMHhhMiwKLTB4MWQsMHg0MywweDAyLDB4YTIsMHgyMywweDAwLDB4MDMsMHgyNCwweDNlLDB4MDAsMHgwMiwweDI0LDB4MWUsMHg0MywweDExLDB4YTIsCi0weDFmLDB4NDMsMHgwMiwweGEyLDB4MjAsMHg0MywweDAzLDB4YTIsMHgyMCwweDAwLDB4YmYsMHg4ZiwweDFjLDB4MDAsMHhiMSwweDhmLAotMHgxOCwweDAwLDB4YjAsMHg4ZiwweDA4LDB4MDAsMHhlMCwweDAzLDB4MjgsMHgwMCwweGJkLDB4MjcsMHhlMCwweGZmLDB4YmQsMHgyNywKLTB4M2IsMHgwMCwweDAyLDB4MjQsMHg0MywweDAwLDB4MDMsMHgyNCwweDEwLDB4MDAsMHhhMiwweGEzLDB4MTEsMHgwMCwweGEzLDB4YTMsCi0weDM2LDB4MDAsMHgwMiwweDI0LDB4MDIsMHg4MCwweDAzLDB4M2MsMHgwMiwweDgwLDB4MDcsMHgzYywweGZjLDB4OTcsMHhlNywweDI0LAotMHgxMiwweDAwLDB4YTIsMHhhMywweDNiLDB4NTgsMHg2MCwweGEwLDB4ZDAsMHgwNywweDAyLDB4MjQsMHgwMSwweDAwLDB4MDMsMHgyNCwKLTB4MDAsMHg4MCwweDA2LDB4M2MsMHgxMCwweDAwLDB4YTUsMHgyNywweDIxLDB4MjAsMHhlMCwweDAwLDB4MjAsMHg1MywweGM2LDB4MjQsCi0weDBjLDB4MDAsMHhlMiwweGFjLDB4MTQsMHgwMCwweGUzLDB4YTAsMHgxOCwweDAwLDB4YmYsMHhhZiwweGZiLDB4MGMsMHgwMCwweDBjLAotMHgxMywweDAwLDB4YTAsMHhhMywweDE4LDB4MDAsMHhiZiwweDhmLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4ZTAsMHgwMywKLTB4MjAsMHgwMCwweGJkLDB4MjcsMHhmZiwweGZmLDB4MDcsMHgyNCwweDAyLDB4ODAsMHgwMiwweDNjLDB4ZTAsMHhmZiwweGJkLDB4MjcsCi0weDNkLDB4NTgsMHg0NywweGEwLDB4M2IsMHgwMCwweDAzLDB4MjQsMHg0MywweDAwLDB4MDIsMHgyNCwweDEwLDB4MDAsMHhhMywweGEzLAotMHgxMSwweDAwLDB4YTIsMHhhMywweDM2LDB4MDAsMHgwMywweDI0LDB4MTYsMHgwMCwweDAyLDB4MjQsMHgwMiwweDgwLDB4MDgsMHgzYywKLTB4MTgsMHg5OCwweDA4LDB4MjUsMHgxMiwweDAwLDB4YTMsMHhhMywweDEzLDB4MDAsMHhhMiwweGEzLDB4ZDAsMHgwNywweDAzLDB4MjQsCi0weDAxLDB4MDAsMHgwMiwweDI0LDB4MDAsMHg4MCwweDA2LDB4M2MsMHgxMCwweDAwLDB4YTUsMHgyNywweDIxLDB4MjAsMHgwMCwweDAxLAotMHgwYywweDAwLDB4MDMsMHhhZCwweDE0LDB4MDAsMHgwMiwweGExLDB4MTgsMHgwMCwweGJmLDB4YWYsMHhmYiwweDBjLDB4MDAsMHgwYywKLTB4YjgsMHg1NCwweGM2LDB4MjQsMHgxOCwweDAwLDB4YmYsMHg4ZiwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsCi0weDIwLDB4MDAsMHhiZCwweDI3LDB4ZTAsMHhmZiwweGJkLDB4MjcsMHgwMiwweDgwLDB4MDIsMHgzYywweDUyLDB4MDAsMHgwMywweDI0LAotMHgxMCwweDAwLDB4YTMsMHhhMywweDRjLDB4NzksMHg0MCwweGE0LDB4NTQsMHgwMCwweDAzLDB4MjQsMHg1MywweDAwLDB4MDIsMHgyNCwKLTB4MDIsMHg4MCwweDA3LDB4M2MsMHgzNCwweDk4LDB4ZTcsMHgyNCwweDExLDB4MDAsMHhhMiwweGEzLDB4MTIsMHgwMCwweGEzLDB4YTMsCi0weGY0LDB4MDEsMHgwMiwweDI0LDB4MDEsMHgwMCwweDAzLDB4MjQsMHgwMSwweDgwLDB4MDYsMHgzYywweDEwLDB4MDAsMHhhNSwweDI3LAotMHgyMSwweDIwLDB4ZTAsMHgwMCwweGM4LDB4NWMsMHhjNiwweDI0LDB4MGMsMHgwMCwweGUyLDB4YWMsMHgxNCwweDAwLDB4ZTMsMHhhMCwKLTB4MTgsMHgwMCwweGJmLDB4YWYsMHhmYiwweDBjLDB4MDAsMHgwYywweDEzLDB4MDAsMHhhMCwweGEzLDB4MTgsMHgwMCwweGJmLDB4OGYsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwMCwweGUwLDB4MDMsMHgyMCwweDAwLDB4YmQsMHgyNywweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDAwLDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDAxLDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMiwweDVlLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgwMywweDVlLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4MDQsMHg1ZCwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MDUsMHg1YiwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDA2LDB4NTksMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDA3LDB4NTcsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwOCwweDU1LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgwOSwweDUzLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4MGEsMHg1MSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MGIsMHg0ZiwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDBjLDB4NGQsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDBkLDB4NGIsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwZSwweDQ5LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgwZiwweDQ3LDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4MTAsMHg0NSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MTEsMHg0MywweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDEyLDB4NDEsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDEzLDB4M2YsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgxNCwweDNkLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgxNSwweDNiLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4MTYsMHgzOSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MTcsMHgzNywweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDE4LDB4MzUsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDE5LDB4MzMsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgxYSwweDMxLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgxYiwweDJmLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4MWMsMHgyZCwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MWQsMHgyYiwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDFlLDB4MjksMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDFmLDB4MjcsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgyMCwweDI1LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgyMSwweDIzLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4MjIsMHgyMSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MjMsMHgxZiwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDI0LDB4MWQsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDI1LDB4MWIsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgyNiwweDE5LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgyNywweDE3LDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4MjgsMHgxNSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MjksMHgxMywweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDJhLDB4MTEsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDJiLDB4MGYsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgyYywweDBkLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgyZCwweDBiLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4MmUsMHgwOSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MmYsMHgwNywweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDMwLDB4MDUsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDMxLDB4MDMsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgzMiwweDAxLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgzMywweDAxLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4MzQsMHgwMSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4MzUsMHgwMSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDM2LDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDM3LDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgzOCwweDAxLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgzOSwweDAxLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4M2EsMHgwMSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4M2IsMHgwMSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDNjLDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDNkLDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgzZSwweDAxLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHgzZiwweDAxLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NDAsMHg1ZSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NDEsMHg1ZSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDQyLDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDQzLDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg0NCwweDVkLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg0NSwweDViLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NDYsMHg1OSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NDcsMHg1NywweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDQ4LDB4NTUsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDQ5LDB4NTMsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg0YSwweDUxLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg0YiwweDRmLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NGMsMHg0ZCwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NGQsMHg0YiwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDRlLDB4NDksMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDRmLDB4NDcsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg1MCwweDQ1LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg1MSwweDQzLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NTIsMHg0MSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NTMsMHgzZiwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDU0LDB4M2QsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDU1LDB4M2IsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg1NiwweDM5LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg1NywweDM3LDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NTgsMHgzNSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NTksMHgzMywweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDVhLDB4MzEsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDViLDB4MmYsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg1YywweDJkLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg1ZCwweDJiLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NWUsMHgyOSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NWYsMHgyNywweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDYwLDB4MjUsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDYxLDB4MjMsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg2MiwweDIxLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg2MywweDFmLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NjQsMHgxZCwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NjUsMHgxYiwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDY2LDB4MTksMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDY3LDB4MTcsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg2OCwweDE1LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg2OSwweDEzLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NmEsMHgxMSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NmIsMHgwZiwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDZjLDB4MGQsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDZkLDB4MGIsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg2ZSwweDA5LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg2ZiwweDA3LDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NzAsMHgwNSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NzEsMHgwMywweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDcyLDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDczLDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg3NCwweDAxLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg3NSwweDAxLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4NzYsMHgwMSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4NzcsMHgwMSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDc4LDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDc5LDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwweDAxLDB4MDAsMHg3YSwweDAxLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDAxLDB4MDAsMHg3YiwweDAxLDB4NzgsMHgwYywweDAwLDB4MDAsMHgwMSwweDAwLDB4N2MsMHgwMSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgwMSwweDAwLDB4N2QsMHgwMSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MDEsMHgwMCwweDdlLDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MDEsMHgwMCwweDdmLDB4MDEsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgwMCwweDMwLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgwMSwweDMwLDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4MDIsMHgzMCwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4MDMsMHgzMCwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDA0LDB4MzAsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDA1LDB4MzAsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgwNiwweDMwLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgwNywweDMwLDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4MDgsMHgzZSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4MDksMHg0MCwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDBhLDB4NDIsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDBiLDB4NDQsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgwYywweDQ2LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgwZCwweDQ4LDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4MGUsMHg0OCwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4MGYsMHg0YSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDEwLDB4NGEsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDExLDB4NGMsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgxMiwweDRjLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgxMywweDRlLDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4MTQsMHg1MCwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4MTUsMHg1MCwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDE2LDB4NTAsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDE3LDB4NTIsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgxOCwweDUyLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgxOSwweDUyLDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4MWEsMHg1NCwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4MWIsMHg1NCwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDFjLDB4NTQsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDFkLDB4NTYsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgxZSwweDU2LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgxZiwweDU2LDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4MjAsMHg1NiwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4MjEsMHg1OCwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDIyLDB4NTgsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDIzLDB4NTgsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgyNCwweDU4LDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgyNSwweDVhLDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4MjYsMHg1YSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4MjcsMHg1YSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDI4LDB4NWMsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDI5LDB4NWMsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgyYSwweDVlLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgyYiwweDVlLDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4MmMsMHg1ZSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4MmQsMHg1ZSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDJlLDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDJmLDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgzMCwweDVlLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgzMSwweDVlLDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4MzIsMHg1ZSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4MzMsMHg1ZSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDM0LDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDM1LDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgzNiwweDVlLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgzNywweDVlLDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4MzgsMHg1ZSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4MzksMHg1ZSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWUsMHgwMCwweDNhLDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwKLTB4MWUsMHgwMCwweDNiLDB4NWUsMHg3OCwweDBjLDB4MDAsMHgwMCwweDFlLDB4MDAsMHgzYywweDVlLDB4NzgsMHgwYywweDAwLDB4MDAsCi0weDFlLDB4MDAsMHgzZCwweDVlLDB4NzgsMHgwYywweDAwLDB4MDAsMHgxZSwweDAwLDB4M2UsMHg1ZSwweDc4LDB4MGMsMHgwMCwweDAwLAotMHgxZSwweDAwLDB4M2YsMHg1ZSwweGZmLDB4MDAsMHgwMCwweDAwLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgwMCwweDA4LDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDA0LDB4MDMsMHgwNCwweDA4LDB4MDAsMHgwMCwweDAzLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgwOCwweDAwLDB4MDAsCi0weDAwLDB4ZmMsMHgwMCwweDAwLDB4MGMsMHgwOCwweDAwLDB4MDAsMHgwYSwweDAwLDB4MDAsMHgwNCwweDEwLDB4MDgsMHgwMCwweDAwLAotMHhmZiwweDEwLDB4MTAsMHg4MCwweDE0LDB4MDgsMHgwMCwweDAwLDB4MTAsMHgzZCwweDBjLDB4MDIsMHgxOCwweDA4LDB4MDAsMHgwMCwKLTB4YzUsMHgwMywweDAwLDB4MDAsMHgxYywweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjAsMHgwOCwweDAwLDB4MDAsCi0weDA0LDB4MDAsMHgwMCwweDAwLDB4MjQsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAyLDB4NjksMHgwMCwweDI4LDB4MDgsMHgwMCwweDAwLAotMHgwNCwweDAwLDB4MDAsMHgwMCwweDJjLDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMiwweDY5LDB4MDAsMHgzMCwweDA4LDB4MDAsMHgwMCwKLTB4MDQsMHgwMCwweDAwLDB4MDAsMHgzNCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDIsMHg2OSwweDAwLDB4MzgsMHgwOCwweDAwLDB4MDAsCi0weDA0LDB4MDAsMHgwMCwweDAwLDB4M2MsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAyLDB4NjksMHgwMCwweDQwLDB4MDgsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ0LDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDA4LDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg0YywweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NTAsMHgwOCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4NTQsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDU4LDB4MDgsMHgwMCwweDAwLAotMHg2NSwweGE5LDB4NjUsMHhhOSwweDVjLDB4MDgsMHgwMCwweDAwLDB4NjUsMHhhOSwweDY1LDB4YTksMHg2MCwweDA4LDB4MDAsMHgwMCwKLTB4MzAsMHgwMSwweDdmLDB4MGYsMHg2NCwweDA4LDB4MDAsMHgwMCwweDMwLDB4MDEsMHg3ZiwweDBmLDB4NjgsMHgwOCwweDAwLDB4MDAsCi0weDMwLDB4MDEsMHg3ZiwweDBmLDB4NmMsMHgwOCwweDAwLDB4MDAsMHgzMCwweDAxLDB4N2YsMHgwZiwweDcwLDB4MDgsMHgwMCwweDAwLAotMHgwMCwweDAzLDB4MDAsMHgwMywweDc0LDB4MDgsMHgwMCwweDAwLDB4MDAsMHgwMywweDAwLDB4MDMsMHg3OCwweDA4LDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg3YywweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4OTAsMHgwOCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4OTQsMHgwOCwweDAwLDB4MDAsMHhmZSwweGZmLDB4ZmYsMHhmZiwweDk4LDB4MDgsMHgwMCwweDAwLAotMHgxMCwweDIwLDB4MzAsMHg0MCwweDljLDB4MDgsMHgwMCwweDAwLDB4NTAsMHg2MCwweDcwLDB4MDAsMHhiMCwweDA4LDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhlMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4ZTQsMHgwOCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZSwweDAwLDB4MDAsMHgwMywweDAzLDB4MDMsMHgwMywweDA0LDB4MGUsMHgwMCwweDAwLAotMHgwMywweDAzLDB4MDMsMHgwMywweDA4LDB4MGUsMHgwMCwweDAwLDB4MDMsMHgwMywweDAwLDB4MDAsMHgwYywweDBlLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgxMCwweDBlLDB4MDAsMHgwMCwweDAzLDB4MDMsMHgwMywweDAzLDB4MTQsMHgwZSwweDAwLDB4MDAsCi0weDAzLDB4MDMsMHgwMywweDAzLDB4MTgsMHgwZSwweDAwLDB4MDAsMHgwMywweDAzLDB4MDMsMHgwMywweDFjLDB4MGUsMHgwMCwweDAwLAotMHgwMywweDAzLDB4MDMsMHgwMywweDAwLDB4MDksMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDA5LDB4MDAsMHgwMCwKLTB4MjMsMHgwMCwweDAwLDB4MDAsMHgwOCwweDA5LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwOSwweDAwLDB4MDAsCi0weDMzLDB4MTMsMHgzMiwweDAzLDB4MDgsMHgwYSwweDAwLDB4MDAsMHgwMCwweDg2LDB4ODgsMHg4ZiwweDJjLDB4MGEsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4OTIsMHgwMCwweDAwLDB4MGMsMHgwMCwweDAwLDB4ODAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDBjLDB4MDAsMHgwMCwKLTB4MzMsMHg1NCwweDAwLDB4MDAsMHgwOCwweDBjLDB4MDAsMHgwMCwweGU0LDB4MDAsMHgwMCwweDAwLDB4MGMsMHgwYywweDAwLDB4MDAsCi0weDZjLDB4NmMsMHg2YywweDZjLDB4MTAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDE0LDB4MGMsMHgwMCwweDAwLAotMHgwMCwweDAxLDB4MDAsMHg0MCwweDE4LDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDgsMHgxYywweDBjLDB4MDAsMHgwMCwKLTB4MDAsMHgwMSwweDAwLDB4NDAsMHgyMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MjQsMHgwYywweDAwLDB4MDAsCi0weDAwLDB4MDEsMHgwMCwweDQwLDB4MjgsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweDJjLDB4MGMsMHgwMCwweDAwLAotMHgwMCwweDAxLDB4MDAsMHg0MCwweDMwLDB4MGMsMHgwMCwweDAwLDB4NDQsMHg2YSwweGU5LDB4OGQsMHgzNCwweDBjLDB4MDAsMHgwMCwKLTB4Y2QsMHg1MiwweDk2LDB4NDYsMHgzOCwweDBjLDB4MDAsMHgwMCwweDkwLDB4NWEsMHgwMSwweDQ4LDB4M2MsMHgwYywweDAwLDB4MDAsCi0weDY0LDB4OTcsMHg5NywweDFhLDB4NDAsMHgwYywweDAwLDB4MDAsMHgzZiwweDQyLDB4N2MsMHgxZiwweDQ0LDB4MGMsMHgwMCwweDAwLAotMHhiNywweDAwLDB4MDEsMHgwMCwweDQ4LDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAyLDB4ZWMsMHg0YywweDBjLDB4MDAsMHgwMCwKLTB4MDMsMHgwMywweGZjLDB4MDAsMHg1MCwweDBjLDB4MDAsMHgwMCwweDFjLDB4MzQsMHg1NCwweDY5LDB4NTQsMHgwYywweDAwLDB4MDAsCi0weDk0LDB4MDAsMHgzYywweDQzLDB4NTgsMHgwYywweDAwLDB4MDAsMHgxYywweDM0LDB4NTQsMHg2OSwweDVjLDB4MGMsMHgwMCwweDAwLAotMHg5NCwweDAwLDB4M2MsMHg0MywweDYwLDB4MGMsMHgwMCwweDAwLDB4MWMsMHgzNCwweDU0LDB4NjksMHg2NCwweDBjLDB4MDAsMHgwMCwKLTB4OTQsMHgwMCwweDNjLDB4NDMsMHg2OCwweDBjLDB4MDAsMHgwMCwweDFjLDB4MzQsMHg1NCwweDY5LDB4NmMsMHgwYywweDAwLDB4MDAsCi0weDk0LDB4MDAsMHgzYywweDQzLDB4NzAsMHgwYywweDAwLDB4MDAsMHgwZCwweDAwLDB4NWEsMHgyYywweDc0LDB4MGMsMHgwMCwweDAwLAotMHgxYiwweDE1LDB4ODYsMHgwMSwweDc4LDB4MGMsMHgwMCwweDAwLDB4MWYsMHgwMCwweDAwLDB4MDAsMHg3YywweDBjLDB4MDAsMHgwMCwKLTB4MTIsMHgxNiwweGI5LDB4MDAsMHg4MCwweDBjLDB4MDAsMHgwMCwweDgwLDB4MDAsMHgwMCwweDIwLDB4ODQsMHgwYywweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ODgsMHgwYywweDAwLDB4MDAsMHg4MCwweDAwLDB4MDAsMHgyMCwweDhjLDB4MGMsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MjAsMHgwOCwweDkwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMSwweDAwLDB4NDAsMHg5NCwweDBjLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHg5OCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDEsMHgwMCwweDQwLDB4OWMsMHgwYywweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4YTAsMHgwYywweDAwLDB4MDAsMHg5MiwweDI0LDB4NDksMHgwMCwweGE0LDB4MGMsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGE4LDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhYywweDBjLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhiMCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4YjQsMHgwYywweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4YjgsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGJjLDB4MGMsMHgwMCwweDAwLAotMHg5MiwweDI0LDB4NDksMHgwMCwweGMwLDB4MGMsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhjNCwweDBjLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhjOCwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4Y2MsMHgwYywweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweGQ0LDB4MGMsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweGQ4LDB4MGMsMHgwMCwweDAwLDB4MjcsMHgyNCwweGIyLDB4NjQsMHhkYywweDBjLDB4MDAsMHgwMCwKLTB4MzIsMHg2OSwweDc2LDB4MDAsMHhlMCwweDBjLDB4MDAsMHgwMCwweDIyLDB4MjIsMHgyMiwweDAwLDB4ZTQsMHgwYywweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4ZTgsMHgwYywweDAwLDB4MDAsMHgwMiwweDQzLDB4NjQsMHgwNywweDAwLDB4MGQsMHgwMCwweDAwLAotMHg4MCwweDA3LDB4MDAsMHgwMCwweDA0LDB4MGQsMHgwMCwweDAwLDB4MDMsMHgwNCwweDAwLDB4MDAsMHgwOCwweDBkLDB4MDAsMHgwMCwKLTB4N2YsMHg5MCwweDAwLDB4MDAsMHgwYywweDBkLDB4MDAsMHgwMCwweDAxLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwZCwweDAwLDB4MDAsCi0weDk5LDB4OTksMHg2OSwweGEwLDB4MTQsMHgwZCwweDAwLDB4MDAsMHg2NywweDNjLDB4OTksMHg5OSwweDE4LDB4MGQsMHgwMCwweDAwLAotMHg2YiwweDViLDB4OGYsMHg2YSwweDFjLDB4MGQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyMCwweDBkLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNCwweDBkLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjgsMHgwZCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MmMsMHgwZCwweDAwLDB4MDAsMHg3NSwweDE5LDB4OTcsMHhjYywweDMwLDB4MGQsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDM0LDB4MGQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgzOCwweDBkLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgzYywweDBkLDB4MDAsMHgwMCwweDkzLDB4NzIsMHgwMiwweDAwLDB4NDAsMHgwZCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4NDQsMHgwZCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDQ4LDB4MGQsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDUwLDB4MGQsMHgwMCwweDAwLDB4MGEsMHgxNCwweDM3LDB4NjQsMHg1NCwweDBkLDB4MDAsMHgwMCwKLTB4MDIsMHhiZCwweDRkLDB4MDIsMHg1OCwweDBkLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NWMsMHgwZCwweDAwLDB4MDAsCi0weDY0LDB4MjAsMHgwMywweDMwLDB4NjAsMHgwZCwweDAwLDB4MDAsMHg2OCwweGRlLDB4NTMsMHg0NiwweDY0LDB4MGQsMHgwMCwweDAwLAotMHgzYywweDhhLDB4NTEsMHgwMCwweDY4LDB4MGQsMHgwMCwweDAwLDB4MDYsMHgwMSwweDAwLDB4MDAsMHhmZiwweDAwLDB4MDAsMHgwMCwKLTB4ZmYsMHhmZiwweGZmLDB4ZmYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTAsMHgwMCwweDAwLDB4MDAsCi0weDQ0LDB4MDUsMHgwMSwweDgwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHg3NCwweDA1LDB4MDEsMHg4MCwweDEwLDB4MDAsMHgwMCwweDAwLAotMHhlMCwweDJlLDB4MDAsMHg4MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4ZWMsMHgyZSwweDAwLDB4ODAsMHgxMCwweDAwLDB4MDAsMHgwMCwKLTB4YTAsMHgwOCwweDAxLDB4ODAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDM4LDB4MDYsMHgwMSwweDgwLDB4MDAsMHhiNywweDAwLDB4MDAsCi0weDAxLDB4ZTAsMHgwZSwweDAwLDB4MDIsMHg0ZCwweDA0LDB4MDAsMHgwMywweDQxLDB4MDQsMHgwMCwweDA0LDB4YzMsMHgwOCwweDAwLAotMHgwNSwweDcyLDB4MGMsMHgwMCwweDA2LDB4ZTYsMHgwMCwweDAwLDB4MDcsMHgyYSwweDA4LDB4MDAsMHgwOCwweDNmLDB4MDAsMHgwMCwKLTB4MDksMHgzNSwweDAzLDB4MDAsMHgwYSwweGQ0LDB4MDksMHgwMCwweDBiLDB4YmIsMHgwNywweDAwLDB4MGMsMHg1MCwweDA4LDB4MDAsCi0weDBkLDB4ZGYsMHgwYywweDAwLDB4MGUsMHgyYiwweDAwLDB4MDAsMHgwZiwweDE0LDB4MDEsMHgwMCwweDAwLDB4YjcsMHgwMSwweDAwLAotMHgwMSwweDAxLDB4MDAsMHgwMCwweDAyLDB4MDAsMHgwNCwweDAwLDB4MDEsMHgwMiwweDAwLDB4MDAsMHgwMiwweDAxLDB4MDQsMHgwMCwKLTB4MDEsMHgwMywweDAwLDB4MDAsMHgwMiwweDAyLDB4MDQsMHgwMCwweDAxLDB4MDQsMHgwMCwweDAwLDB4MDIsMHgwMywweDA0LDB4MDAsCi0weDAxLDB4MDUsMHgwMCwweDAwLDB4MDIsMHgwNCwweDA0LDB4MDAsMHgwMSwweDA2LDB4MDAsMHgwMCwweDAyLDB4MDUsMHgwNCwweDAwLAotMHgwMSwweDA3LDB4MDAsMHgwMCwweDAyLDB4MDgsMHgwNCwweDAwLDB4MDEsMHgwOCwweDAwLDB4MDAsMHgwMiwweDA5LDB4MDQsMHgwMCwKLTB4MDEsMHgwOSwweDAwLDB4MDAsMHgwMiwweDBhLDB4MDQsMHgwMCwweDAxLDB4MGEsMHgwMCwweDAwLDB4MDIsMHgwYiwweDA0LDB4MDAsCi0weDAxLDB4MGIsMHgwMCwweDAwLDB4MDIsMHgwMiwweDA1LDB4MDAsMHgwMSwweDBjLDB4MDAsMHgwMCwweDAyLDB4MDMsMHgwNSwweDAwLAotMHgwMSwweDBkLDB4MDAsMHgwMCwweDAyLDB4MDQsMHgwNSwweDAwLDB4MDEsMHgwZSwweDAwLDB4MDAsMHgwMiwweDA1LDB4MDUsMHgwMCwKLTB4MDEsMHgwZiwweDAwLDB4MDAsMHgwMiwweDQwLDB4MDUsMHgwMCwweDAxLDB4MTAsMHgwMCwweDAwLDB4MDIsMHg0MSwweDA1LDB4MDAsCi0weDAxLDB4MTEsMHgwMCwweDAwLDB4MDIsMHg0MiwweDA1LDB4MDAsMHgwMSwweDEyLDB4MDAsMHgwMCwweDAyLDB4NDMsMHgwNSwweDAwLAotMHgwMSwweDEzLDB4MDAsMHgwMCwweDAyLDB4NDQsMHgwNSwweDAwLDB4MDEsMHgxNCwweDAwLDB4MDAsMHgwMiwweDQ1LDB4MDUsMHgwMCwKLTB4MDEsMHgxNSwweDAwLDB4MDAsMHgwMiwweDgwLDB4MDUsMHgwMCwweDAxLDB4MTYsMHgwMCwweDAwLDB4MDIsMHg4MSwweDA1LDB4MDAsCi0weDAxLDB4MTcsMHgwMCwweDAwLDB4MDIsMHg4MiwweDA1LDB4MDAsMHgwMSwweDE4LDB4MDAsMHgwMCwweDAyLDB4ODMsMHgwNSwweDAwLAotMHgwMSwweDE5LDB4MDAsMHgwMCwweDAyLDB4ODQsMHgwNSwweDAwLDB4MDEsMHgxYSwweDAwLDB4MDAsMHgwMiwweDg1LDB4MDUsMHgwMCwKLTB4MDEsMHgxYiwweDAwLDB4MDAsMHgwMiwweDg4LDB4MDUsMHgwMCwweDAxLDB4MWMsMHgwMCwweDAwLDB4MDIsMHg4OSwweDA1LDB4MDAsCi0weDAxLDB4MWQsMHgwMCwweDAwLDB4MDIsMHg4YSwweDA1LDB4MDAsMHgwMSwweDFlLDB4MDAsMHgwMCwweDAyLDB4OGIsMHgwNSwweDAwLAotMHgwMSwweDFmLDB4MDAsMHgwMCwweDAyLDB4NDMsMHgwNiwweDAwLDB4MDEsMHgyMCwweDAwLDB4MDAsMHgwMiwweDQ0LDB4MDYsMHgwMCwKLTB4MDEsMHgyMSwweDAwLDB4MDAsMHgwMiwweDQ1LDB4MDYsMHgwMCwweDAxLDB4MjIsMHgwMCwweDAwLDB4MDIsMHg4MCwweDA2LDB4MDAsCi0weDAxLDB4MjMsMHgwMCwweDAwLDB4MDIsMHg4MSwweDA2LDB4MDAsMHgwMSwweDI0LDB4MDAsMHgwMCwweDAyLDB4ODIsMHgwNiwweDAwLAotMHgwMSwweDI1LDB4MDAsMHgwMCwweDAyLDB4ODMsMHgwNiwweDAwLDB4MDEsMHgyNiwweDAwLDB4MDAsMHgwMiwweDg0LDB4MDYsMHgwMCwKLTB4MDEsMHgyNywweDAwLDB4MDAsMHgwMiwweDg1LDB4MDYsMHgwMCwweDAxLDB4MjgsMHgwMCwweDAwLDB4MDIsMHg4OCwweDA2LDB4MDAsCi0weDAxLDB4MjksMHgwMCwweDAwLDB4MDIsMHg4OSwweDA2LDB4MDAsMHgwMSwweDJhLDB4MDAsMHgwMCwweDAyLDB4OGEsMHgwNiwweDAwLAotMHgwMSwweDJiLDB4MDAsMHgwMCwweDAyLDB4OGIsMHgwNiwweDAwLDB4MDEsMHgyYywweDAwLDB4MDAsMHgwMiwweDhjLDB4MDYsMHgwMCwKLTB4MDEsMHgyZCwweDAwLDB4MDAsMHgwMiwweDQyLDB4MDcsMHgwMCwweDAxLDB4MmUsMHgwMCwweDAwLDB4MDIsMHg0MywweDA3LDB4MDAsCi0weDAxLDB4MmYsMHgwMCwweDAwLDB4MDIsMHg0NCwweDA3LDB4MDAsMHgwMSwweDMwLDB4MDAsMHgwMCwweDAyLDB4NDUsMHgwNywweDAwLAotMHgwMSwweDMxLDB4MDAsMHgwMCwweDAyLDB4ODAsMHgwNywweDAwLDB4MDEsMHgzMiwweDAwLDB4MDAsMHgwMiwweDgxLDB4MDcsMHgwMCwKLTB4MDEsMHgzMywweDAwLDB4MDAsMHgwMiwweDgyLDB4MDcsMHgwMCwweDAxLDB4MzQsMHgwMCwweDAwLDB4MDIsMHg4MywweDA3LDB4MDAsCi0weDAxLDB4MzUsMHgwMCwweDAwLDB4MDIsMHg4NCwweDA3LDB4MDAsMHgwMSwweDM2LDB4MDAsMHgwMCwweDAyLDB4ODUsMHgwNywweDAwLAotMHgwMSwweDM3LDB4MDAsMHgwMCwweDAyLDB4ODgsMHgwNywweDAwLDB4MDEsMHgzOCwweDAwLDB4MDAsMHgwMiwweDg5LDB4MDcsMHgwMCwKLTB4MDEsMHgzOSwweDAwLDB4MDAsMHgwMiwweDhhLDB4MDcsMHgwMCwweDAxLDB4M2EsMHgwMCwweDAwLDB4MDIsMHg4YiwweDA3LDB4MDAsCi0weDAxLDB4M2IsMHgwMCwweDAwLDB4MDIsMHg4YywweDA3LDB4MDAsMHgwMSwweDNjLDB4MDAsMHgwMCwweDAyLDB4OGQsMHgwNywweDAwLAotMHgwMSwweDNkLDB4MDAsMHgwMCwweDAyLDB4OTAsMHgwNywweDAwLDB4MDEsMHgzZSwweDAwLDB4MDAsMHgwMiwweDkxLDB4MDcsMHgwMCwKLTB4MDEsMHgzZiwweDAwLDB4MDAsMHgwMiwweDkyLDB4MDcsMHgwMCwweDAxLDB4NDAsMHgwMCwweDAwLDB4MDIsMHg5MywweDA3LDB4MDAsCi0weDAxLDB4NDEsMHgwMCwweDAwLDB4MDIsMHg5NCwweDA3LDB4MDAsMHgwMSwweDQyLDB4MDAsMHgwMCwweDAyLDB4OTUsMHgwNywweDAwLAotMHgwMSwweDQzLDB4MDAsMHgwMCwweDAyLDB4OTgsMHgwNywweDAwLDB4MDEsMHg0NCwweDAwLDB4MDAsMHgwMiwweDk5LDB4MDcsMHgwMCwKLTB4MDEsMHg0NSwweDAwLDB4MDAsMHgwMiwweDlhLDB4MDcsMHgwMCwweDAxLDB4NDYsMHgwMCwweDAwLDB4MDIsMHg5YiwweDA3LDB4MDAsCi0weDAxLDB4NDcsMHgwMCwweDAwLDB4MDIsMHg5YywweDA3LDB4MDAsMHgwMSwweDQ4LDB4MDAsMHgwMCwweDAyLDB4OWQsMHgwNywweDAwLAotMHgwMSwweDQ5LDB4MDAsMHgwMCwweDAyLDB4YTAsMHgwNywweDAwLDB4MDEsMHg0YSwweDAwLDB4MDAsMHgwMiwweGExLDB4MDcsMHgwMCwKLTB4MDEsMHg0YiwweDAwLDB4MDAsMHgwMiwweGEyLDB4MDcsMHgwMCwweDAxLDB4NGMsMHgwMCwweDAwLDB4MDIsMHhhMywweDA3LDB4MDAsCi0weDAxLDB4NGQsMHgwMCwweDAwLDB4MDIsMHhhNCwweDA3LDB4MDAsMHgwMSwweDRlLDB4MDAsMHgwMCwweDAyLDB4YTUsMHgwNywweDAwLAotMHgwMSwweDRmLDB4MDAsMHgwMCwweDAyLDB4YTgsMHgwNywweDAwLDB4MDEsMHg1MCwweDAwLDB4MDAsMHgwMiwweGE5LDB4MDcsMHgwMCwKLTB4MDEsMHg1MSwweDAwLDB4MDAsMHgwMiwweGFhLDB4MDMsMHgwMCwweDAxLDB4NTIsMHgwMCwweDAwLDB4MDIsMHhhYiwweDAzLDB4MDAsCi0weDAxLDB4NTMsMHgwMCwweDAwLDB4MDIsMHhhYywweDAzLDB4MDAsMHgwMSwweDU0LDB4MDAsMHgwMCwweDAyLDB4YWQsMHgwMywweDAwLAotMHgwMSwweDU1LDB4MDAsMHgwMCwweDAyLDB4YjAsMHgwMywweDAwLDB4MDEsMHg1NiwweDAwLDB4MDAsMHgwMiwweGIxLDB4MDMsMHgwMCwKLTB4MDEsMHg1NywweDAwLDB4MDAsMHgwMiwweGIyLDB4MDMsMHgwMCwweDAxLDB4NTgsMHgwMCwweDAwLDB4MDIsMHhiMywweDAzLDB4MDAsCi0weDAxLDB4NTksMHgwMCwweDAwLDB4MDIsMHhiNCwweDAzLDB4MDAsMHgwMSwweDVhLDB4MDAsMHgwMCwweDAyLDB4YjUsMHgwMywweDAwLAotMHgwMSwweDViLDB4MDAsMHgwMCwweDAyLDB4YjgsMHgwMywweDAwLDB4MDEsMHg1YywweDAwLDB4MDAsMHgwMiwweGI5LDB4MDMsMHgwMCwKLTB4MDEsMHg1ZCwweDAwLDB4MDAsMHgwMiwweGJhLDB4MDMsMHgwMCwweDAxLDB4NWUsMHgwMCwweDAwLDB4MDIsMHhiYiwweDAzLDB4MDAsCi0weDAxLDB4NWYsMHgwMCwweDAwLDB4MDIsMHhiYiwweDAzLDB4MDAsMHgwMywweDgwLDB4MDAsMHgwMCwweDA1LDB4MDQsMHgwMCwweDAwLAotMHgwMCwweGI3LDB4MDAsMHgwMCwweGZlLDB4MDAsMHgwMCwweDAwLDB4ZmUsMHgwMCwweDAwLDB4MDAsMHhmZSwweDAwLDB4MDAsMHgwMCwKLTB4MDIsMHg0ZCwweDBjLDB4MDAsMHhmZSwweDAwLDB4MDAsMHgwMCwweGZlLDB4MDAsMHgwMCwweDAwLDB4MDIsMHg0ZCwweDA0LDB4MDAsCi0weDAwLDB4YmYsMHgwMiwweDAwLDB4ZmYsMHhmZiwweGZmLDB4MDAsMHhmZiwweGZmLDB4ZmYsMHgwMCwweDAwLDB4YjcsMHgwMCwweDAwLAotMHgwMSwweGUwLDB4MGUsMHgwMCwweDAyLDB4NGQsMHgwNCwweDAwLDB4MDMsMHg0MSwweDA0LDB4MDAsMHgwNCwweGMzLDB4MDgsMHgwMCwKLTB4MDUsMHg3MiwweDBjLDB4MDAsMHgwNiwweGU2LDB4MDAsMHgwMCwweDA3LDB4MmEsMHgwOCwweDAwLDB4MDgsMHgzZiwweDAwLDB4MDAsCi0weDA5LDB4MzUsMHgwMywweDAwLDB4MGEsMHhkNCwweDA5LDB4MDAsMHgwYiwweGJiLDB4MDcsMHgwMCwweDBjLDB4NTAsMHgwOCwweDAwLAotMHgwZCwweGRmLDB4MGMsMHgwMCwweDBlLDB4MmIsMHgwMCwweDAwLDB4MGYsMHgxNCwweDAxLDB4MDAsMHgwMCwweGI3LDB4MDEsMHgwMCwKLTB4MDEsMHgwMSwweDAwLDB4MDAsMHgwMiwweDAwLDB4MDQsMHgwMCwweDAxLDB4MDIsMHgwMCwweDAwLDB4MDIsMHgwMSwweDA0LDB4MDAsCi0weDAxLDB4MDMsMHgwMCwweDAwLDB4MDIsMHgwMiwweDA0LDB4MDAsMHgwMSwweDA0LDB4MDAsMHgwMCwweDAyLDB4MDMsMHgwNCwweDAwLAotMHgwMSwweDA1LDB4MDAsMHgwMCwweDAyLDB4MDQsMHgwNCwweDAwLDB4MDEsMHgwNiwweDAwLDB4MDAsMHgwMiwweDA1LDB4MDQsMHgwMCwKLTB4MDEsMHgwNywweDAwLDB4MDAsMHgwMiwweDA4LDB4MDQsMHgwMCwweDAxLDB4MDgsMHgwMCwweDAwLDB4MDIsMHgwOSwweDA0LDB4MDAsCi0weDAxLDB4MDksMHgwMCwweDAwLDB4MDIsMHgwYSwweDA0LDB4MDAsMHgwMSwweDBhLDB4MDAsMHgwMCwweDAyLDB4MGIsMHgwNCwweDAwLAotMHgwMSwweDBiLDB4MDAsMHgwMCwweDAyLDB4MDIsMHgwNSwweDAwLDB4MDEsMHgwYywweDAwLDB4MDAsMHgwMiwweDAzLDB4MDUsMHgwMCwKLTB4MDEsMHgwZCwweDAwLDB4MDAsMHgwMiwweDA0LDB4MDUsMHgwMCwweDAxLDB4MGUsMHgwMCwweDAwLDB4MDIsMHgwNSwweDA1LDB4MDAsCi0weDAxLDB4MGYsMHgwMCwweDAwLDB4MDIsMHg0MCwweDA1LDB4MDAsMHgwMSwweDEwLDB4MDAsMHgwMCwweDAyLDB4NDEsMHgwNSwweDAwLAotMHgwMSwweDExLDB4MDAsMHgwMCwweDAyLDB4NDIsMHgwNSwweDAwLDB4MDEsMHgxMiwweDAwLDB4MDAsMHgwMiwweDQzLDB4MDUsMHgwMCwKLTB4MDEsMHgxMywweDAwLDB4MDAsMHgwMiwweDQ0LDB4MDUsMHgwMCwweDAxLDB4MTQsMHgwMCwweDAwLDB4MDIsMHg0NSwweDA1LDB4MDAsCi0weDAxLDB4MTUsMHgwMCwweDAwLDB4MDIsMHg4MCwweDA1LDB4MDAsMHgwMSwweDE2LDB4MDAsMHgwMCwweDAyLDB4ODEsMHgwNSwweDAwLAotMHgwMSwweDE3LDB4MDAsMHgwMCwweDAyLDB4ODIsMHgwNSwweDAwLDB4MDEsMHgxOCwweDAwLDB4MDAsMHgwMiwweDgzLDB4MDUsMHgwMCwKLTB4MDEsMHgxOSwweDAwLDB4MDAsMHgwMiwweDg0LDB4MDUsMHgwMCwweDAxLDB4MWEsMHgwMCwweDAwLDB4MDIsMHg4NSwweDA1LDB4MDAsCi0weDAxLDB4MWIsMHgwMCwweDAwLDB4MDIsMHg4OCwweDA1LDB4MDAsMHgwMSwweDFjLDB4MDAsMHgwMCwweDAyLDB4ODksMHgwNSwweDAwLAotMHgwMSwweDFkLDB4MDAsMHgwMCwweDAyLDB4OGEsMHgwNSwweDAwLDB4MDEsMHgxZSwweDAwLDB4MDAsMHgwMiwweDhiLDB4MDUsMHgwMCwKLTB4MDEsMHgxZiwweDAwLDB4MDAsMHgwMiwweDQzLDB4MDYsMHgwMCwweDAxLDB4MjAsMHgwMCwweDAwLDB4MDIsMHg0NCwweDA2LDB4MDAsCi0weDAxLDB4MjEsMHgwMCwweDAwLDB4MDIsMHg0NSwweDA2LDB4MDAsMHgwMSwweDIyLDB4MDAsMHgwMCwweDAyLDB4ODAsMHgwNiwweDAwLAotMHgwMSwweDIzLDB4MDAsMHgwMCwweDAyLDB4ODEsMHgwNiwweDAwLDB4MDEsMHgyNCwweDAwLDB4MDAsMHgwMiwweDgyLDB4MDYsMHgwMCwKLTB4MDEsMHgyNSwweDAwLDB4MDAsMHgwMiwweDgzLDB4MDYsMHgwMCwweDAxLDB4MjYsMHgwMCwweDAwLDB4MDIsMHg4NCwweDA2LDB4MDAsCi0weDAxLDB4MjcsMHgwMCwweDAwLDB4MDIsMHg4NSwweDA2LDB4MDAsMHgwMSwweDI4LDB4MDAsMHgwMCwweDAyLDB4ODgsMHgwNiwweDAwLAotMHgwMSwweDI5LDB4MDAsMHgwMCwweDAyLDB4ODksMHgwNiwweDAwLDB4MDEsMHgyYSwweDAwLDB4MDAsMHgwMiwweDhhLDB4MDYsMHgwMCwKLTB4MDEsMHgyYiwweDAwLDB4MDAsMHgwMiwweDhiLDB4MDYsMHgwMCwweDAxLDB4MmMsMHgwMCwweDAwLDB4MDIsMHg4YywweDA2LDB4MDAsCi0weDAxLDB4MmQsMHgwMCwweDAwLDB4MDIsMHg0MiwweDA3LDB4MDAsMHgwMSwweDJlLDB4MDAsMHgwMCwweDAyLDB4NDMsMHgwNywweDAwLAotMHgwMSwweDJmLDB4MDAsMHgwMCwweDAyLDB4NDQsMHgwNywweDAwLDB4MDEsMHgzMCwweDAwLDB4MDAsMHgwMiwweDQ1LDB4MDcsMHgwMCwKLTB4MDEsMHgzMSwweDAwLDB4MDAsMHgwMiwweDgwLDB4MDcsMHgwMCwweDAxLDB4MzIsMHgwMCwweDAwLDB4MDIsMHg4MSwweDA3LDB4MDAsCi0weDAxLDB4MzMsMHgwMCwweDAwLDB4MDIsMHg4MiwweDA3LDB4MDAsMHgwMSwweDM0LDB4MDAsMHgwMCwweDAyLDB4ODMsMHgwNywweDAwLAotMHgwMSwweDM1LDB4MDAsMHgwMCwweDAyLDB4ODQsMHgwNywweDAwLDB4MDEsMHgzNiwweDAwLDB4MDAsMHgwMiwweDg1LDB4MDcsMHgwMCwKLTB4MDEsMHgzNywweDAwLDB4MDAsMHgwMiwweDg4LDB4MDcsMHgwMCwweDAxLDB4MzgsMHgwMCwweDAwLDB4MDIsMHg4OSwweDA3LDB4MDAsCi0weDAxLDB4MzksMHgwMCwweDAwLDB4MDIsMHg4YSwweDA3LDB4MDAsMHgwMSwweDNhLDB4MDAsMHgwMCwweDAyLDB4OGIsMHgwNywweDAwLAotMHgwMSwweDNiLDB4MDAsMHgwMCwweDAyLDB4OGMsMHgwNywweDAwLDB4MDEsMHgzYywweDAwLDB4MDAsMHgwMiwweDhkLDB4MDcsMHgwMCwKLTB4MDEsMHgzZCwweDAwLDB4MDAsMHgwMiwweDkwLDB4MDcsMHgwMCwweDAxLDB4M2UsMHgwMCwweDAwLDB4MDIsMHg5MSwweDA3LDB4MDAsCi0weDAxLDB4M2YsMHgwMCwweDAwLDB4MDIsMHg5MiwweDA3LDB4MDAsMHgwMSwweDQwLDB4MDAsMHgwMCwweDAyLDB4OTMsMHgwNywweDAwLAotMHgwMSwweDQxLDB4MDAsMHgwMCwweDAyLDB4OTQsMHgwNywweDAwLDB4MDEsMHg0MiwweDAwLDB4MDAsMHgwMiwweDk1LDB4MDcsMHgwMCwKLTB4MDEsMHg0MywweDAwLDB4MDAsMHgwMiwweDk4LDB4MDcsMHgwMCwweDAxLDB4NDQsMHgwMCwweDAwLDB4MDIsMHg5OSwweDA3LDB4MDAsCi0weDAxLDB4NDUsMHgwMCwweDAwLDB4MDIsMHg5YSwweDA3LDB4MDAsMHgwMSwweDQ2LDB4MDAsMHgwMCwweDAyLDB4OWIsMHgwNywweDAwLAotMHgwMSwweDQ3LDB4MDAsMHgwMCwweDAyLDB4OWMsMHgwNywweDAwLDB4MDEsMHg0OCwweDAwLDB4MDAsMHgwMiwweDlkLDB4MDcsMHgwMCwKLTB4MDEsMHg0OSwweDAwLDB4MDAsMHgwMiwweGEwLDB4MDcsMHgwMCwweDAxLDB4NGEsMHgwMCwweDAwLDB4MDIsMHhhMSwweDA3LDB4MDAsCi0weDAxLDB4NGIsMHgwMCwweDAwLDB4MDIsMHhhMiwweDA3LDB4MDAsMHgwMSwweDRjLDB4MDAsMHgwMCwweDAyLDB4YTMsMHgwNywweDAwLAotMHgwMSwweDRkLDB4MDAsMHgwMCwweDAyLDB4YTQsMHgwNywweDAwLDB4MDEsMHg0ZSwweDAwLDB4MDAsMHgwMiwweGE1LDB4MDcsMHgwMCwKLTB4MDEsMHg0ZiwweDAwLDB4MDAsMHgwMiwweGE4LDB4MDcsMHgwMCwweDAxLDB4NTAsMHgwMCwweDAwLDB4MDIsMHhhOSwweDA3LDB4MDAsCi0weDAxLDB4NTEsMHgwMCwweDAwLDB4MDIsMHhhYSwweDAzLDB4MDAsMHgwMSwweDUyLDB4MDAsMHgwMCwweDAyLDB4YWIsMHgwMywweDAwLAotMHgwMSwweDUzLDB4MDAsMHgwMCwweDAyLDB4YWMsMHgwMywweDAwLDB4MDEsMHg1NCwweDAwLDB4MDAsMHgwMiwweGFkLDB4MDMsMHgwMCwKLTB4MDEsMHg1NSwweDAwLDB4MDAsMHgwMiwweGIwLDB4MDMsMHgwMCwweDAxLDB4NTYsMHgwMCwweDAwLDB4MDIsMHhiMSwweDAzLDB4MDAsCi0weDAxLDB4NTcsMHgwMCwweDAwLDB4MDIsMHhiMiwweDAzLDB4MDAsMHgwMSwweDU4LDB4MDAsMHgwMCwweDAyLDB4YjMsMHgwMywweDAwLAotMHgwMSwweDU5LDB4MDAsMHgwMCwweDAyLDB4YjQsMHgwMywweDAwLDB4MDEsMHg1YSwweDAwLDB4MDAsMHgwMiwweGI1LDB4MDMsMHgwMCwKLTB4MDEsMHg1YiwweDAwLDB4MDAsMHgwMiwweGI4LDB4MDMsMHgwMCwweDAxLDB4NWMsMHgwMCwweDAwLDB4MDIsMHhiOSwweDAzLDB4MDAsCi0weDAxLDB4NWQsMHgwMCwweDAwLDB4MDIsMHhiYSwweDAzLDB4MDAsMHgwMSwweDVlLDB4MDAsMHgwMCwweDAyLDB4YmIsMHgwMywweDAwLAotMHgwMSwweDVmLDB4MDAsMHgwMCwweDAyLDB4YmIsMHgwMywweDAwLDB4MDMsMHg4MCwweDAwLDB4MDAsMHgwNSwweDA0LDB4MDAsMHgwMCwKLTB4MDAsMHhiNywweDAwLDB4MDAsMHhmZSwweDAwLDB4MDAsMHgwMCwweGZlLDB4MDAsMHgwMCwweDAwLDB4ZmUsMHgwMCwweDAwLDB4MDAsCi0weDAyLDB4NGQsMHgwYywweDAwLDB4ZmUsMHgwMCwweDAwLDB4MDAsMHhmZSwweDAwLDB4MDAsMHgwMCwweDAyLDB4NGQsMHgwNCwweDAwLAotMHgwMCwweGJmLDB4MDIsMHgwMCwweGZmLDB4ZmYsMHhmZiwweDAwLDB4ZmYsMHhmZiwweGZmLDB4MDAsMHgwYSwweDAwLDB4MDAsMHgwMCwKLTB4NGYsMHg2ZSwweDQxLDB4NzMsMHg3MywweDZmLDB4NjMsMHg1MiwweDY1LDB4NzEsMHgwMCwweDAwLDB4NGYsMHg2ZSwweDQxLDB4NzMsCi0weDczLDB4NmYsMHg2MywweDUyLDB4NzMsMHg3MCwweDAwLDB4MDAsMHg0ZiwweDZlLDB4NTIsMHg2NSwweDQxLDB4NzMsMHg3MywweDZmLAotMHg2MywweDUyLDB4NjUsMHg3MSwweDAwLDB4MDAsMHgwMCwweDAwLDB4NGYsMHg2ZSwweDUyLDB4NjUsMHg0MSwweDczLDB4NzMsMHg2ZiwKLTB4NjMsMHg1MiwweDczLDB4NzAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDRmLDB4NmUsMHg1MCwweDcyLDB4NmYsMHg2MiwweDY1LDB4NTIsCi0weDY1LDB4NzEsMHgwMCwweDAwLDB4NGYsMHg2ZSwweDUwLDB4NzIsMHg2ZiwweDYyLDB4NjUsMHg1MiwweDczLDB4NzAsMHgwMCwweDAwLAotMHg0NCwweDZmLDB4NTIsMHg2NSwweDczLDB4NjUsMHg3MiwweDc2LDB4NjUsMHg2NCwweDAwLDB4MDAsMHg0NCwweDZmLDB4NTIsMHg2NSwKLTB4NzMsMHg2NSwweDcyLDB4NzYsMHg2NSwweDY0LDB4MDAsMHgwMCwweDRmLDB4NmUsMHg0MiwweDY1LDB4NjEsMHg2MywweDZmLDB4NmUsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4NGYsMHg2ZSwweDQxLDB4NTQsMHg0OSwweDRkLDB4MDAsMHgwMCwweDRmLDB4NmUsMHg0NCwweDY5LAotMHg3MywweDYxLDB4NzMsMHg3MywweDZmLDB4NjMsMHgwMCwweDAwLDB4NGYsMHg2ZSwweDQxLDB4NzUsMHg3NCwweDY4LDB4MDAsMHgwMCwKLTB4NGYsMHg2ZSwweDQ0LDB4NjUsMHg0MSwweDc1LDB4NzQsMHg2OCwweDAwLDB4MDAsMHgwMCwweDAwLDB4NGYsMHg2ZSwweDQxLDB4NjMsCi0weDc0LDB4NjksMHg2ZiwweDZlLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDg4LDB4OGIsMHgwMSwweDgwLAotMHgyOCwweDE0LDB4MDEsMHg4MCwweDEwLDB4MDAsMHgwMCwweDAwLDB4OTQsMHg4YiwweDAxLDB4ODAsMHgzMCwweDE0LDB4MDEsMHg4MCwKLTB4MjAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDhiLDB4MDEsMHg4MCwweDI4LDB4MTQsMHgwMSwweDgwLDB4MzAsMHgwMCwweDAwLDB4MDAsCi0weGIwLDB4OGIsMHgwMSwweDgwLDB4MzAsMHgxNCwweDAxLDB4ODAsMHg0MCwweDAwLDB4MDAsMHgwMCwweGMwLDB4OGIsMHgwMSwweDgwLAotMHgzOCwweDE0LDB4MDEsMHg4MCwweDUwLDB4MDAsMHgwMCwweDAwLDB4Y2MsMHg4YiwweDAxLDB4ODAsMHg0MCwweDE0LDB4MDEsMHg4MCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhkOCwweDhiLDB4MDEsMHg4MCwweGE4LDB4MTQsMHgwMSwweDgwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weGU0LDB4OGIsMHgwMSwweDgwLDB4YTgsMHgxNCwweDAxLDB4ODAsMHg4MCwweDAwLDB4MDAsMHgwMCwweGYwLDB4OGIsMHgwMSwweDgwLAotMHg0OCwweDE0LDB4MDEsMHg4MCwweDkwLDB4MDAsMHgwMCwweDAwLDB4ZmMsMHg4YiwweDAxLDB4ODAsMHg1MCwweDE0LDB4MDEsMHg4MCwKLTB4YTAsMHgwMCwweDAwLDB4MDAsMHgwNCwweDhjLDB4MDEsMHg4MCwweDU4LDB4MTQsMHgwMSwweDgwLDB4YjAsMHgwMCwweDAwLDB4MDAsCi0weDEwLDB4OGMsMHgwMSwweDgwLDB4OTAsMHgxNCwweDAxLDB4ODAsMHhjMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4OGMsMHgwMSwweDgwLAotMHg5OCwweDE0LDB4MDEsMHg4MCwweGQwLDB4MDAsMHgwMCwweDAwLDB4MjQsMHg4YywweDAxLDB4ODAsMHhhMCwweDE0LDB4MDEsMHg4MCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHhkYywweDhjLDB4MDEsMHg4MCwweGRjLDB4OGMsMHgwMSwweDgwLDB4MzEsMHgxMCwweDEwLDB4MDAsCi0weDAwLDB4MzAsMHgwMCwweDAwLDB4MzEsMHgyMCwweDEwLDB4MDAsMHgwMCwweDMwLDB4MDAsMHgwMCwweDMxLDB4MjgsMHgxMCwweDAwLAotMHgwMCwweDMwLDB4MDAsMHgwMCwweDMxLDB4MmMsMHgxMCwweDEwLDB4MDAsMHgzMCwweDAwLDB4MDAsMHgzMSwweDJmLDB4MTAsMHgxMCwKLTB4MDAsMHgzMCwweDAwLDB4MDAsMHgzMSwweDMwLDB4MTgsMHgwMCwweDAwLDB4MzAsMHgwMCwweDAwLDB4MzEsMHgzMCwweDIwLDB4MTAsCi0weDAwLDB4MzAsMHgwMCwweDAwLDB4MjIsMHgyMCwweDE4LDB4MDgsMHgwMCwweDIwLDB4MDAsMHgwMCwweDIyLDB4MjEsMHgxNCwweDA4LAotMHgwMCwweDIwLDB4MDAsMHgwMCwweDIyLDB4MjEsMHgxYywweDA4LDB4MDAsMHgyMCwweDAwLDB4MDAsMHgyMiwweDIxLDB4MjAsMHgwOCwKLTB4MDAsMHgyMCwweDAwLDB4MDAsMHgyMiwweDIxLDB4MjAsMHgxMCwweDAwLDB4MjAsMHgwMCwweDAwLDB4MjIsMHgyMSwweDIwLDB4MTgsCi0weDAwLDB4MjAsMHgwMCwweDAwLDB4MWEsMHgxOSwweDE4LDB4MTAsMHgwMCwweDE4LDB4MDAsMHgwMCwweDEyLDB4MTEsMHgxMCwweDA4LAotMHgwMCwweDEwLDB4MDAsMHgwMCwweDBhLDB4MDksMHgwOCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwMiwKLTB4MDAsMHgwOCwweDAwLDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwNCwweDAwLDB4MDgsMHgwMCwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDYsCi0weDAwLDB4MDgsMHgwMCwweDAwLDB4MDgsMHgwNywweDA2LDB4MDQsMHgwMCwweDA2LDB4MDAsMHgwMCwweDA2LDB4MDUsMHgwNCwweDAyLAotMHgwMCwweDA0LDB4MDAsMHgwMCwweDA2LDB4MDUsMHgwNCwweDAzLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwNSwweDA0LDB4MDMsMHgwMiwKLTB4MDAsMHgwMywweDAwLDB4MDAsMHgwOSwweDA4LDB4MDcsMHgwNiwweDA3LDB4MDYsMHgwNiwweDA1LDB4MDUsMHgwNCwweDA0LDB4MDMsCi0weDA2LDB4MDUsMHgwNSwweDA0LDB4MDQsMHgwMywweDAzLDB4MDMsMHgwNSwweDA0LDB4MDQsMHgwMywweDAzLDB4MDIsMHgwMiwweDAyLAotMHgwMCwweDA5LDB4MDgsMHgwNywweDA2LDB4MDcsMHgwNiwweDA2LDB4MDUsMHgwNSwweDA0LDB4MDQsMHgwMywweDA1LDB4MDQsMHgwNCwKLTB4MDMsMHgwMywweDAyLDB4MDIsMHgwMiwweDA0LDB4MDMsMHgwMywweDAyLDB4MDIsMHgwMSwweDAxLDB4MDEsMHgwMCwweDAwLDB4MDAsCi0weDA4LDB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwweDEwLDB4MTAsMHgyMCwweDA4LDB4MDgsMHgwOCwweDA4LAotMHgyMCwweDIwLDB4MjAsMHgyMCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MDgsMHgyMCwweDIwLDB4MjAsMHgzMCwweDA4LDB4MDgsMHgwOCwKLTB4MDgsMHgxOCwweDE4LDB4MTgsMHgxOCwweDE4LDB4MjAsMHgzMCwweDMwLDB4MTAsMHgyMCwweDIwLDB4MjAsMHgyMCwweDIwLDB4MzAsCi0weDMwLDB4MDgsMHgxMCwweDIwLDB4MzAsMHgzMCwweDMwLDB4MzAsMHgzMCwweDMwLDB4MDAsMHgwMCwweDA4LDB4MDgsMHgwOCwweDA4LAotMHgwOCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MTAsMHgxMCwweDIwLDB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwweDIwLDB4MjAsMHgyMCwKLTB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwweDIwLDB4MjAsMHgyMCwweDIwLDB4MDgsMHgwOCwweDA4LDB4MDgsMHgxOCwweDE4LDB4MTgsCi0weDE4LDB4MTgsMHgyMCwweDMwLDB4MzAsMHgxMCwweDIwLDB4MjAsMHgyMCwweDIwLDB4MjAsMHgzMCwweDMwLDB4MDgsMHgxMCwweDIwLAotMHgzMCwweDMwLDB4MzAsMHgzMCwweDMwLDB4MzAsMHgwMCwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDQsMHgwMCwweDBhLDB4MDksMHgwOCwKLTB4MDQsMHgwMCwweDBhLDB4MDksMHgwOCwweDA0LDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwNCwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDAsCi0weDAwLDB4MGEsMHgwOSwweDA4LDB4MDAsMHgwMCwweDBhLDB4MDksMHgwOCwweDAwLDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwMCwweDAwLAotMHgwYSwweDA5LDB4MDgsMHgwMCwweDAwLDB4MTIsMHgxMSwweDEwLDB4MDgsMHgwMCwweDEyLDB4MTEsMHgxMCwweDA4LDB4MDAsMHgyMiwKLTB4MjEsMHgyMCwweDE4LDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwMCwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDAsMHgwMCwweDBhLDB4MDksCi0weDA4LDB4MDAsMHgwMCwweDBhLDB4MDksMHgwOCwweDAwLDB4MDAsMHgyMiwweDIxLDB4MjAsMHgxOCwweDAwLDB4MjIsMHgyMSwweDIwLAotMHgxOCwweDAwLDB4MjIsMHgyMSwweDFjLDB4MDgsMHgwMCwweDIyLDB4MjAsMHgxOCwweDA4LDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwMiwKLTB4MDAsMHgwYSwweDA5LDB4MDgsMHgwMiwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDIsMHgwMCwweDBhLDB4MDksMHgwOCwweDAyLDB4MDAsCi0weDBhLDB4MDksMHgwOCwweDAwLDB4MDAsMHgyMiwweDIxLDB4MjAsMHgxMCwweDAwLDB4MjIsMHgyMSwweDIwLDB4MDgsMHgwMCwweDIyLAotMHgyMSwweDFjLDB4MDgsMHgwMCwweDMxLDB4MzAsMHgxOCwweDAwLDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwNCwweDAwLDB4MGEsMHgwOSwKLTB4MDgsMHgwNCwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDQsMHgwMCwweDBhLDB4MDksMHgwOCwweDA0LDB4MDAsMHgxYSwweDE5LDB4MTgsCi0weDEwLDB4MDAsMHgxYSwweDE5LDB4MTgsMHgxMCwweDAwLDB4MWEsMHgxOSwweDE4LDB4MTAsMHgwMCwweDFhLDB4MTksMHgxOCwweDEwLAotMHgwMCwweDFhLDB4MTksMHgxOCwweDEwLDB4MDAsMHgyMiwweDIxLDB4MjAsMHgwOCwweDAwLDB4MzEsMHgyYywweDEwLDB4MTAsMHgwMCwKLTB4MzEsMHgyOCwweDEwLDB4MDAsMHgwMCwweDEyLDB4MTEsMHgxMCwweDA4LDB4MDAsMHgyMiwweDIxLDB4MjAsMHgxOCwweDAwLDB4MjIsCi0weDIxLDB4MjAsMHgxOCwweDAwLDB4MjIsMHgyMSwweDIwLDB4MDgsMHgwMCwweDIyLDB4MjEsMHgxNCwweDA4LDB4MDAsMHgyMiwweDIwLAotMHgxOCwweDA4LDB4MDAsMHgzMSwweDMwLDB4MjAsMHgxMCwweDAwLDB4MzEsMHgyYywweDEwLDB4MTAsMHgwMCwweDBhLDB4MDksMHgwOCwKLTB4MDAsMHgwMCwweDEyLDB4MTEsMHgxMCwweDA4LDB4MDAsMHgyMiwweDIxLDB4MjAsMHgxOCwweDAwLDB4MjIsMHgyMSwweDIwLDB4MTgsCi0weDAwLDB4MzEsMHgzMCwweDIwLDB4MTAsMHgwMCwweDMxLDB4MmYsMHgxMCwweDEwLDB4MDAsMHgzMSwweDJmLDB4MTAsMHgxMCwweDAwLAotMHgzMSwweDEwLDB4MTAsMHgwMCwweDAwLDB4MzEsMHgyYywweDEwLDB4MTAsMHgwMCwweDAwLDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwNCwKLTB4MDAsMHgwYSwweDA5LDB4MDgsMHgwNCwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDQsMHgwMCwweDBhLDB4MDksMHgwOCwweDA0LDB4MDAsCi0weDBhLDB4MDksMHgwOCwweDAwLDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwMCwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDAsMHgwMCwweDBhLAotMHgwOSwweDA4LDB4MDAsMHgwMCwweDBhLDB4MDksMHgwOCwweDAwLDB4MDAsMHgxMiwweDExLDB4MTAsMHgwOCwweDAwLDB4MTIsMHgxMSwKLTB4MTAsMHgwOCwweDAwLDB4MjIsMHgyMSwweDIwLDB4MTgsMHgwMCwweDBhLDB4MDksMHgwOCwweDA0LDB4MDAsMHgwYSwweDA5LDB4MDgsCi0weDA0LDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwMiwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDAsMHgwMCwweDBhLDB4MDksMHgwOCwweDAwLAotMHgwMCwweDIyLDB4MjEsMHgyMCwweDE4LDB4MDAsMHgyMiwweDIxLDB4MWMsMHgwOCwweDAwLDB4MjIsMHgyMSwweDE0LDB4MDgsMHgwMCwKLTB4MGEsMHgwOSwweDA4LDB4MDIsMHgwMCwweDBhLDB4MDksMHgwOCwweDAyLDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwMiwweDAwLDB4MGEsCi0weDA5LDB4MDgsMHgwMiwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDAsMHgwMCwweDIyLDB4MjEsMHgyMCwweDEwLDB4MDAsMHgyMiwweDIxLAotMHgyMCwweDA4LDB4MDAsMHgyMiwweDIxLDB4MTQsMHgwOCwweDAwLDB4MjIsMHgyMSwweDE0LDB4MDgsMHgwMCwweDBhLDB4MDksMHgwOCwKLTB4MDQsMHgwMCwweDBhLDB4MDksMHgwOCwweDA0LDB4MDAsMHgwYSwweDA5LDB4MDgsMHgwNCwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDQsCi0weDAwLDB4MWEsMHgxOSwweDE4LDB4MTAsMHgwMCwweDFhLDB4MTksMHgxOCwweDEwLDB4MDAsMHgxYSwweDE5LDB4MTgsMHgxMCwweDAwLAotMHgxYSwweDE5LDB4MTgsMHgxMCwweDAwLDB4MWEsMHgxOSwweDE4LDB4MTAsMHgwMCwweDIyLDB4MjEsMHgyMCwweDA4LDB4MDAsMHgzMSwKLTB4MmMsMHgxMCwweDEwLDB4MDAsMHgzMSwweDI4LDB4MTAsMHgwMCwweDAwLDB4MTIsMHgxMSwweDEwLDB4MDgsMHgwMCwweDIyLDB4MjEsCi0weDIwLDB4MTgsMHgwMCwweDIyLDB4MjEsMHgyMCwweDE4LDB4MDAsMHgyMiwweDIxLDB4MjAsMHgwOCwweDAwLDB4MjIsMHgyMSwweDE0LAotMHgwOCwweDAwLDB4MjIsMHgyMCwweDE4LDB4MDgsMHgwMCwweDMxLDB4MzAsMHgyMCwweDEwLDB4MDAsMHgzMSwweDJjLDB4MTAsMHgxMCwKLTB4MDAsMHgwYSwweDA5LDB4MDgsMHgwMCwweDAwLDB4MTIsMHgxMSwweDEwLDB4MDgsMHgwMCwweDIyLDB4MjEsMHgyMCwweDE4LDB4MDAsCi0weDIyLDB4MjEsMHgyMCwweDE4LDB4MDAsMHgzMSwweDMwLDB4MjAsMHgxMCwweDAwLDB4MzEsMHgyZiwweDEwLDB4MTAsMHgwMCwweDMxLAotMHgyZiwweDEwLDB4MTAsMHgwMCwweDMxLDB4MTAsMHgxMCwweDAwLDB4MDAsMHgzMSwweDJjLDB4MTAsMHgxMCwweDAwLDB4MDAsMHgwMCwKLTB4MDEsMHgwMiwweDA0LDB4MDgsMHgwMiwweDA0LDB4MDgsMHgwYywweDEwLDB4MTgsMHgyMCwweDMwLDB4MDIsMHgwNCwweDA4LDB4MGMsCi0weDEwLDB4MTgsMHgyMCwweDMwLDB4MDYsMHgwYywweDEwLDB4MTgsMHgyNCwweDMwLDB4M2MsMHg0OCwweDQ4LDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyNSwweDI3LDB4MmMsMHgxOSwweDFiLDB4MWUsMHgyMCwKLTB4MjMsMHgyOSwweDJhLDB4MmIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI1LDB4MjksMHgyYiwweDJlLDB4MmUsMHgwMCwweDAwLDB4MDAsCi0weDA0LDB4MDAsMHgwMCwweDAwLDB4MDQsMHgwMCwweDAwLDB4MDAsMHgwOCwweDAwLDB4MDAsMHgwMCwweDEwLDB4MDAsMHgwMCwweDAwLAotMHgxOCwweDAwLDB4MDAsMHgwMCwweDI0LDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4MDAsMHgwMCwKLTB4NjAsMHgwMCwweDAwLDB4MDAsMHg5MCwweDAwLDB4MDAsMHgwMCwweGMwLDB4MDAsMHgwMCwweDAwLDB4ZDgsMHgwMCwweDAwLDB4MDAsCi0weDUwLDB4MDAsMHgwMCwweDAwLDB4NzgsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDAsMHgwMCwweDAwLAotMHg0MCwweDAxLDB4MDAsMHgwMCwweDkwLDB4MDEsMHgwMCwweDAwLDB4ZTAsMHgwMSwweDAwLDB4MDAsMHgzMCwweDAyLDB4MDAsMHgwMCwKLTB4MmMsMHgwMSwweDAwLDB4MDAsMHg0MCwweDAxLDB4MDAsMHgwMCwweGUwLDB4MDEsMHgwMCwweDAwLDB4ZDAsMHgwMiwweDAwLDB4MDAsCi0weDgwLDB4MGMsMHgwMCwweDAwLDB4ODAsMHgwYywweDAwLDB4MDAsMHg4MCwweDBjLDB4MDAsMHgwMCwweGEwLDB4MGYsMHgwMCwweDAwLAotMHhhMCwweDBmLDB4MDAsMHgwMCwweDAyLDB4MDAsMHgwMCwweDAwLDB4MDIsMHgwMCwweDAwLDB4MDAsMHgwNCwweDAwLDB4MDAsMHgwMCwKLTB4MDgsMHgwMCwweDAwLDB4MDAsMHgwYywweDAwLDB4MDAsMHgwMCwweDEyLDB4MDAsMHgwMCwweDAwLDB4MTgsMHgwMCwweDAwLDB4MDAsCi0weDI0LDB4MDAsMHgwMCwweDAwLDB4MzAsMHgwMCwweDAwLDB4MDAsMHg0OCwweDAwLDB4MDAsMHgwMCwweDYwLDB4MDAsMHgwMCwweDAwLAotMHg2YywweDAwLDB4MDAsMHgwMCwweDI4LDB4MDAsMHgwMCwweDAwLDB4M2MsMHgwMCwweDAwLDB4MDAsMHg1MCwweDAwLDB4MDAsMHgwMCwKLTB4NjQsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAwLDB4MDAsMHgwMCwweGM4LDB4MDAsMHgwMCwweDAwLDB4ZjAsMHgwMCwweDAwLDB4MDAsCi0weDE4LDB4MDEsMHgwMCwweDAwLDB4NjQsMHgwMCwweDAwLDB4MDAsMHhhMCwweDAwLDB4MDAsMHgwMCwweGYwLDB4MDAsMHgwMCwweDAwLAotMHg2OCwweDAxLDB4MDAsMHgwMCwweDQwLDB4MDYsMHgwMCwweDAwLDB4NDAsMHgwNiwweDAwLDB4MDAsMHg0MCwweDA2LDB4MDAsMHgwMCwKLTB4ZDAsMHgwNywweDAwLDB4MDAsMHhkMCwweDA3LDB4MDAsMHgwMCwweDJjLDB4MDUsMHgwMCwweDgwLDB4MjAsMHgwNSwweDAwLDB4ODAsCi0weDE0LDB4MDUsMHgwMCwweDgwLDB4MDgsMHgwNSwweDAwLDB4ODAsMHhmYywweDA0LDB4MDAsMHg4MCwweGYwLDB4MDQsMHgwMCwweDgwLAotMHhlNCwweDA0LDB4MDAsMHg4MCwweGQ4LDB4MDQsMHgwMCwweDgwLDB4Y2MsMHgwNCwweDAwLDB4ODAsMHhjMCwweDA0LDB4MDAsMHg4MCwKLTB4NzgsMHgwNCwweDAwLDB4ODAsMHg2OCwweDE1LDB4MDIsMHg4MCwweGMwLDB4M2EsMHgwMCwweDgwLDB4Y2MsMHgzYSwweDAwLDB4ODAsCi0weGQ4LDB4M2EsMHgwMCwweDgwLDB4ZTQsMHgzYSwweDAwLDB4ODAsMHhjMCwweDNhLDB4MDAsMHg4MCwweGMwLDB4M2EsMHgwMCwweDgwLAotMHhjMCwweDNhLDB4MDAsMHg4MCwweGMwLDB4M2EsMHgwMCwweDgwLDB4ZjAsMHgzYSwweDAwLDB4ODAsMHhmYywweDNhLDB4MDAsMHg4MCwKLTB4MDgsMHgzYiwweDAwLDB4ODAsMHgxNCwweDNiLDB4MDAsMHg4MCwweDY4LDB4MTUsMHgwMiwweDgwLDB4ZmUsMHgwMSwweDgwLDB4N2YsCi0weGUyLDB4MDEsMHg4MCwweDc4LDB4YzcsMHgwMSwweGMwLDB4NzEsMHhhZSwweDAxLDB4ODAsMHg2YiwweDk1LDB4MDEsMHg0MCwweDY1LAotMHg3ZiwweDAxLDB4YzAsMHg1ZiwweDY5LDB4MDEsMHg0MCwweDVhLDB4NTUsMHgwMSwweDQwLDB4NTUsMHg0MiwweDAxLDB4ODAsMHg1MCwKLTB4MzAsMHgwMSwweDAwLDB4NGMsMHgxZiwweDAxLDB4YzAsMHg0NywweDBmLDB4MDEsMHhjMCwweDQzLDB4MDAsMHgwMSwweDAwLDB4NDAsCi0weGYyLDB4MDAsMHg4MCwweDNjLDB4ZTQsMHgwMCwweDAwLDB4MzksMHhkNywweDAwLDB4YzAsMHgzNSwweGNiLDB4MDAsMHhjMCwweDMyLAotMHhjMCwweDAwLDB4MDAsMHgzMCwweGI1LDB4MDAsMHg0MCwweDJkLDB4YWIsMHgwMCwweGMwLDB4MmEsMHhhMiwweDAwLDB4ODAsMHgyOCwKLTB4OTgsMHgwMCwweDAwLDB4MjYsMHg5MCwweDAwLDB4MDAsMHgyNCwweDg4LDB4MDAsMHgwMCwweDIyLDB4ODAsMHgwMCwweDAwLDB4MjAsCi0weDc5LDB4MDAsMHg0MCwweDFlLDB4NzIsMHgwMCwweDgwLDB4MWMsMHg2YywweDAwLDB4MDAsMHgxYiwweDY2LDB4MDAsMHg4MCwweDE5LAotMHg2MCwweDAwLDB4MDAsMHgxOCwweDViLDB4MDAsMHhjMCwweDE2LDB4NTYsMHgwMCwweDgwLDB4MTUsMHg1MSwweDAwLDB4NDAsMHgxNCwKLTB4NGMsMHgwMCwweDAwLDB4MTMsMHg0OCwweDAwLDB4MDAsMHgxMiwweDQ0LDB4MDAsMHgwMCwweDExLDB4NDAsMHgwMCwweDAwLDB4MTAsCi0weDM2LDB4MzUsMHgyZSwweDI1LDB4MWMsMHgxMiwweDA5LDB4MDQsMHgzMywweDMyLDB4MmIsMHgyMywweDFhLDB4MTEsMHgwOCwweDA0LAotMHgzMCwweDJmLDB4MjksMHgyMSwweDE5LDB4MTAsMHgwOCwweDAzLDB4MmQsMHgyZCwweDI3LDB4MWYsMHgxOCwweDBmLDB4MDgsMHgwMywKLTB4MmIsMHgyYSwweDI1LDB4MWUsMHgxNiwweDBlLDB4MDcsMHgwMywweDI4LDB4MjgsMHgyMiwweDFjLDB4MTUsMHgwZCwweDA3LDB4MDMsCi0weDI2LDB4MjUsMHgyMSwweDFiLDB4MTQsMHgwZCwweDA2LDB4MDMsMHgyNCwweDIzLDB4MWYsMHgxOSwweDEzLDB4MGMsMHgwNiwweDAzLAotMHgyMiwweDIxLDB4MWQsMHgxOCwweDExLDB4MGIsMHgwNiwweDAyLDB4MjAsMHgyMCwweDFiLDB4MTYsMHgxMSwweDA4LDB4MDUsMHgwMiwKLTB4MWYsMHgxZSwweDFhLDB4MTUsMHgxMCwweDBhLDB4MDUsMHgwMiwweDFkLDB4MWMsMHgxOCwweDE0LDB4MGYsMHgwYSwweDA1LDB4MDIsCi0weDFiLDB4MWEsMHgxNywweDEzLDB4MGUsMHgwOSwweDA0LDB4MDIsMHgxYSwweDE5LDB4MTYsMHgxMiwweDBkLDB4MDksMHgwNCwweDAyLAotMHgxOCwweDE3LDB4MTUsMHgxMSwweDBjLDB4MDgsMHgwNCwweDAyLDB4MTcsMHgxNiwweDEzLDB4MTAsMHgwYywweDA4LDB4MDQsMHgwMiwKLTB4MTYsMHgxNSwweDEyLDB4MGYsMHgwYiwweDA3LDB4MDQsMHgwMSwweDE0LDB4MTQsMHgxMSwweDBlLDB4MGIsMHgwNywweDAzLDB4MDIsCi0weDEzLDB4MTMsMHgxMCwweDBkLDB4MGEsMHgwNiwweDAzLDB4MDEsMHgxMiwweDEyLDB4MGYsMHgwYywweDA5LDB4MDYsMHgwMywweDAxLAotMHgxMSwweDExLDB4MGYsMHgwYywweDA5LDB4MDYsMHgwMywweDAxLDB4MTAsMHgxMCwweDBlLDB4MGIsMHgwOCwweDA1LDB4MDMsMHgwMSwKLTB4MGYsMHgwZiwweDBkLDB4MGIsMHgwOCwweDA1LDB4MDMsMHgwMSwweDBlLDB4MGUsMHgwYywweDBhLDB4MDgsMHgwNSwweDAyLDB4MDEsCi0weDBkLDB4MGQsMHgwYywweDBhLDB4MDcsMHgwNSwweDAyLDB4MDEsMHgwZCwweDBjLDB4MGIsMHgwOSwweDA3LDB4MDQsMHgwMiwweDAxLAotMHgwYywweDBjLDB4MGEsMHgwOSwweDA2LDB4MDQsMHgwMiwweDAxLDB4MGIsMHgwYiwweDBhLDB4MDgsMHgwNiwweDA0LDB4MDIsMHgwMSwKLTB4MGIsMHgwYSwweDA5LDB4MDgsMHgwNiwweDA0LDB4MDIsMHgwMSwweDBhLDB4MGEsMHgwOSwweDA3LDB4MDUsMHgwMywweDAyLDB4MDEsCi0weDBhLDB4MDksMHgwOCwweDA3LDB4MDUsMHgwMywweDAyLDB4MDEsMHgwOSwweDA5LDB4MDgsMHgwNiwweDA1LDB4MDMsMHgwMSwweDAxLAotMHgwOSwweDA4LDB4MDcsMHgwNiwweDA0LDB4MDMsMHgwMSwweDAxLDB4MzYsMHgzNSwweDJlLDB4MWIsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MzMsMHgzMiwweDJiLDB4MTksMHgwMCwweDAwLDB4MDAsMHgwMCwweDMwLDB4MmYsMHgyOSwweDE4LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDJkLDB4MmQsMHgxNywweDE3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgyYiwweDJhLDB4MjUsMHgxNSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgyOCwweDI4LDB4MjQsMHgxNCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MjYsMHgyNSwweDIxLDB4MTMsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MjQsMHgyMywweDFmLDB4MTIsMHgwMCwweDAwLDB4MDAsMHgwMCwweDIyLDB4MjEsMHgxZCwweDExLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDIwLDB4MjAsMHgxYiwweDEwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxZiwweDFlLDB4MWEsMHgwZiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgxZCwweDFjLDB4MTgsMHgwZSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MWIsMHgxYSwweDE3LDB4MGUsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MWEsMHgxOSwweDE2LDB4MGQsMHgwMCwweDAwLDB4MDAsMHgwMCwweDE4LDB4MTcsMHgxNSwweDBjLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDE3LDB4MTYsMHgxMywweDBiLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgxNiwweDE1LDB4MTIsMHgwYiwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgxNCwweDE0LDB4MTEsMHgwYSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MTMsMHgxMywweDEwLDB4MGEsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MTIsMHgxMiwweDBmLDB4MDksMHgwMCwweDAwLDB4MDAsMHgwMCwweDExLDB4MTEsMHgwZiwweDA5LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDEwLDB4MTAsMHgwZSwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwZiwweDBmLDB4MGQsMHgwOCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwZSwweDBlLDB4MGMsMHgwNywweDAwLDB4MDAsMHgwMCwweDAwLDB4MGQsMHgwZCwweDBjLDB4MDcsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MGQsMHgwYywweDBiLDB4MDYsMHgwMCwweDAwLDB4MDAsMHgwMCwweDBjLDB4MGMsMHgwYSwweDA2LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDBiLDB4MGIsMHgwYSwweDA2LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwYiwweDBhLDB4MDksMHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwYSwweDBhLDB4MDksMHgwNSwweDAwLDB4MDAsMHgwMCwweDAwLDB4MGEsMHgwOSwweDA4LDB4MDUsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDksMHgwOSwweDA4LDB4MDUsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA5LDB4MDgsMHgwNywweDA0LDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDA2LDB4MDAsMHgyYSwweGIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MDgsCi0weDA4LDB4MjgsMHgyOCwweDI4LDB4MjgsMHgyOCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwweDA4LAotMHgwOCwweDA4LDB4MDgsMHgwOCwweDA4LDB4MDgsMHgwOCwweDA4LDB4YTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwKLTB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsMHgwNCwweDA0LDB4MDQsCi0weDA0LDB4MDQsMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDQxLDB4NDEsMHg0MSwweDQxLDB4NDEsMHg0MSwweDAxLAotMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwKLTB4MDEsMHgwMSwweDAxLDB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4NDIsMHg0MiwweDQyLDB4NDIsMHg0MiwweDQyLDB4MDIsCi0weDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLAotMHgwMiwweDAyLDB4MDIsMHgxMCwweDEwLDB4MTAsMHgxMCwweDA4LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHhhMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLAotMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwKLTB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDEwLDB4MTAsMHgxMCwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsCi0weDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDEwLAotMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwKLTB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MTAsCi0weDAyLDB4MDIsMHgwMiwweDAyLDB4MDIsMHgwMiwweDAyLDB4MDAsMHgxOSwweDc3LDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLAotMHgwMCwweDI2LDB4NzIsMHhiMCwweDAwLDB4MjYsMHg3MiwweGIwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwKLTB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDI2LDB4NjUsMHg2MCwweGZmLDB4ZmYsMHhmZiwweGZmLDB4MDAsMHgwMCwweDAwLDB4MDIsCi0weDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwMCwweDAwLDB4MDAsMHgwOCwweGYyLDB4MzAsMHhiOCwweGZmLDB4ZmYsMHhmZiwweGZmLAotfTsKLQogdTggUnRsODE5MlNVRndNYWluQXJyYXlbTWFpbkFycmF5TGVuZ3RoXSA9IHsKIDB4MCwgfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNVX0hXSW1nLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU1VfSFdJbWcuaAppbmRleCA5NmIxNTI1Li4zNmU4NGFmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU1VfSFdJbWcuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU1VfSFdJbWcuaApAQCAtNSw4ICs1LDYgQEAKIAogLypDcmVhdGVkIG9uICAyMDA5LyAzLyA2LCAgNToyOSovCiAKLSNkZWZpbmUgSW1nQXJyYXlMZW5ndGggNjgzNjgKLWV4dGVybiB1OCBSdGw4MTkyU1VGd0ltZ0FycmF5W0ltZ0FycmF5TGVuZ3RoXTsKICNkZWZpbmUgTWFpbkFycmF5TGVuZ3RoIDEKIGV4dGVybiB1OCBSdGw4MTkyU1VGd01haW5BcnJheVtNYWluQXJyYXlMZW5ndGhdOwogI2RlZmluZSBEYXRhQXJyYXlMZW5ndGggMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfZmlybXdhcmUuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX2Zpcm13YXJlLmMKaW5kZXggMzU2MWFkZjAuLjc1MmEzZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX2Zpcm13YXJlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfZmlybXdhcmUuYwpAQCAtMzYwLDExNyArMzYwLDU4IEBACiAKIAlSVF9UUkFDRShDT01QX0ZJUk1XQVJFLCAiIC0tLT5GaXJtd2FyZURvd25sb2FkOTJTKClcbiIpOwogCi0JLy8zLy8KLQkvLzMgLy88MT4gT3BlbiBJbWFnZSBmaWxlLCBhbmQgbWFwIGZpbGUgdG8gY29udGluZW91cyBtZW1vcnkgaWYgb3BlbiBmaWxlIHN1Y2Nlc3MuCi0JLy8zICAvLyAgICAgICAgb3IgcmVhZCBpbWFnZSBmaWxlIGZyb20gYXJyYXkuIERlZmF1bHQgbG9hZCBmcm9tIEJJTiBmaWxlCi0JLy8zLy8KLQlwcml2LT5maXJtd2FyZV9zb3VyY2UgPSBGV19TT1VSQ0VfSU1HX0ZJTEU7Ly8gV2Ugc2hvdWxkIGRlY2lkZWQgYnkgUmVnLgotCi0Jc3dpdGNoKCBwcml2LT5maXJtd2FyZV9zb3VyY2UgKQorLyoKKyogTG9hZCB0aGUgZmlybXdhcmUgZnJvbSBSVEw4MTkyU1UvcnRsODE5MnNmdy5iaW4KKyovCisJaWYocEZpcm13YXJlLT5zekZ3VG1wQnVmZmVyTGVuID09IDApCiAJewotCQljYXNlIEZXX1NPVVJDRV9JTUdfRklMRToKLQkJCWlmKHBGaXJtd2FyZS0+c3pGd1RtcEJ1ZmZlckxlbiA9PSAwKQotCQkJewotCi0JCQkJcmMgPSByZXF1ZXN0X2Zpcm13YXJlKCZmd19lbnRyeSwgcEZ3SW1hZ2VGaWxlTmFtZVt1bEluaXRTdGVwXSwmcHJpdi0+dWRldi0+ZGV2KTsvLz09PT4xCi0JCQkJaWYocmMgPCAwICkgewotCQkJCQlSVF9UUkFDRShDT01QX0VSUiwgInJlcXVlc3QgZmlybXdhcmUgZmFpbCFcbiIpOwotCQkJCQlnb3RvIERvd25sb2FkRmlybXdhcmVfRmFpbDsKLQkJCQl9Ci0KLQkJCQlpZihmd19lbnRyeS0+c2l6ZSA+IHNpemVvZihwRmlybXdhcmUtPnN6RndUbXBCdWZmZXIpKQotCQkJCXsKLQkJCQkJUlRfVFJBQ0UoQ09NUF9FUlIsICJpbWcgZmlsZSBzaXplIGV4Y2VlZCB0aGUgY29udGFpbmVyIGJ1ZmZlciBmYWlsIVxuIik7Ci0JCQkJCXJlbGVhc2VfZmlybXdhcmUoZndfZW50cnkpOwotCQkJCQlnb3RvIERvd25sb2FkRmlybXdhcmVfRmFpbDsKLQkJCQl9Ci0KLQkJCQltZW1jcHkocEZpcm13YXJlLT5zekZ3VG1wQnVmZmVyLGZ3X2VudHJ5LT5kYXRhLGZ3X2VudHJ5LT5zaXplKTsKLQkJCQlwRmlybXdhcmUtPnN6RndUbXBCdWZmZXJMZW4gPSBmd19lbnRyeS0+c2l6ZTsKLQkJCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKLQotCQkJCXB1Y01hcHBlZEZpbGUgPSBwRmlybXdhcmUtPnN6RndUbXBCdWZmZXI7Ci0JCQkJZmlsZV9sZW5ndGggPSBwRmlybXdhcmUtPnN6RndUbXBCdWZmZXJMZW47Ci0KLQkJCQkvL1JldHJpZXZlIEZXIGhlYWRlci4KLQkJCQlwRmlybXdhcmUtPnBGd0hlYWRlciA9IChQUlRfODE5MlNfRklSTVdBUkVfSERSKSBwdWNNYXBwZWRGaWxlOwotCQkJCXBGd0hkciA9IHBGaXJtd2FyZS0+cEZ3SGVhZGVyOwotCQkJCVJUX1RSQUNFKENPTVBfRklSTVdBUkUsInNpZ25hdHVyZToleCwgdmVyc2lvbjoleCwgc2l6ZToleCwgaW1lbXNpemU6JXgsIHNyYW0gc2l6ZToleFxuIiwgXAotCQkJCQkJcEZ3SGRyLT5TaWduYXR1cmUsIHBGd0hkci0+VmVyc2lvbiwgcEZ3SGRyLT5ETUVNU2l6ZSwgXAotCQkJCQkJcEZ3SGRyLT5JTUdfSU1FTV9TSVpFLCBwRndIZHItPklNR19TUkFNX1NJWkUpOwotCQkJCXBGaXJtd2FyZS0+RmlybXdhcmVWZXJzaW9uID0gIGJ5dGUocEZ3SGRyLT5WZXJzaW9uICwwKTsKLQkJCQlpZiAoKHBGd0hkci0+SU1HX0lNRU1fU0laRT09MCkgfHwgKHBGd0hkci0+SU1HX0lNRU1fU0laRSA+IHNpemVvZihwRmlybXdhcmUtPkZ3SU1FTSkpKQotCQkJCXsKLQkJCQkJUlRfVFJBQ0UoQ09NUF9FUlIsICIlczogbWVtb3J5IGZvciBkYXRhIGltYWdlIGlzIGxlc3MgdGhhbiBJTUVNIHJlcXVpcmVkXG4iLFwKLQkJCQkJCQlfX0ZVTkNUSU9OX18pOwotCQkJCQlnb3RvIERvd25sb2FkRmlybXdhcmVfRmFpbDsKLQkJCQl9IGVsc2UgewotCQkJCQlwdWNNYXBwZWRGaWxlKz1Gd0hkclNpemU7Ci0KLQkJCQkJLy9SZXRyaWV2ZSBJTUVNIGltYWdlLgotCQkJCQltZW1jcHkocEZpcm13YXJlLT5Gd0lNRU0sIHB1Y01hcHBlZEZpbGUsIHBGd0hkci0+SU1HX0lNRU1fU0laRSk7Ci0JCQkJCXBGaXJtd2FyZS0+RndJTUVNTGVuID0gcEZ3SGRyLT5JTUdfSU1FTV9TSVpFOwotCQkJCX0KLQotCQkJCWlmIChwRndIZHItPklNR19TUkFNX1NJWkUgPiBzaXplb2YocEZpcm13YXJlLT5Gd0VNRU0pKQotCQkJCXsKLQkJCQkJUlRfVFJBQ0UoQ09NUF9FUlIsICIlczogbWVtb3J5IGZvciBkYXRhIGltYWdlIGlzIGxlc3MgdGhhbiBFTUVNIHJlcXVpcmVkXG4iLFwKLQkJCQkJCQlfX0ZVTkNUSU9OX18pOwotCQkJCQlnb3RvIERvd25sb2FkRmlybXdhcmVfRmFpbDsKLQkJCQl9IGVsc2UgewotCQkJCQlwdWNNYXBwZWRGaWxlICs9IHBGaXJtd2FyZS0+RndJTUVNTGVuOwotCi0JCQkJCS8qIFJldHJpZWN2ZSBFTUVNIGltYWdlICovCi0JCQkJCW1lbWNweShwRmlybXdhcmUtPkZ3RU1FTSwgcHVjTWFwcGVkRmlsZSwgcEZ3SGRyLT5JTUdfU1JBTV9TSVpFKTsvLz09PT42Ci0JCQkJCXBGaXJtd2FyZS0+RndFTUVNTGVuID0gcEZ3SGRyLT5JTUdfU1JBTV9TSVpFOwotCQkJCX0KLQotCisJCXJjID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksIHBGd0ltYWdlRmlsZU5hbWVbdWxJbml0U3RlcF0sJnByaXYtPnVkZXYtPmRldik7CisJCQlpZihyYyA8IDAgKSB7CisJCQkJUlRfVFJBQ0UoQ09NUF9FUlIsICJyZXF1ZXN0IGZpcm13YXJlIGZhaWwhXG4iKTsKKwkJCQlnb3RvIERvd25sb2FkRmlybXdhcmVfRmFpbDsKIAkJCX0KLQkJCWJyZWFrOwogCi0JCWNhc2UgRldfU09VUkNFX0hFQURFUl9GSUxFOgotI2lmIDEKLSNkZWZpbmUgUnRsODE5WEZ3SW1hZ2VBcnJheSBSdGw4MTkyU1VGd0ltZ0FycmF5Ci0JCQkvLzIwMDguMTEuMTAgQWRkIGJ5IHR5bmxpLgotCQkJcHVjTWFwcGVkRmlsZSA9IFJ0bDgxOVhGd0ltYWdlQXJyYXk7Ci0JCQl1bEZpbGVMZW5ndGggPSBJbWdBcnJheUxlbmd0aDsKKwkJCWlmKGZ3X2VudHJ5LT5zaXplID4gc2l6ZW9mKHBGaXJtd2FyZS0+c3pGd1RtcEJ1ZmZlcikpIHsKKwkJCQlSVF9UUkFDRShDT01QX0VSUiwgImltZyBmaWxlIHNpemUgZXhjZWVkIHRoZSBjb250YWluZXIgYnVmZmVyIGZhaWwhXG4iKTsKKwkJCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKwkJCQlnb3RvIERvd25sb2FkRmlybXdhcmVfRmFpbDsKKwkJCX0KIAotCQkJUlRfVFJBQ0UoQ09NUF9JTklULCJGdyBkb3dubG9hZCBmcm9tIGhlYWRlci5cbiIpOwotCQkJLyogUmV0cmlldmUgRlcgaGVhZGVyKi8KKwkJCW1lbWNweShwRmlybXdhcmUtPnN6RndUbXBCdWZmZXIsZndfZW50cnktPmRhdGEsZndfZW50cnktPnNpemUpOworCQkJcEZpcm13YXJlLT5zekZ3VG1wQnVmZmVyTGVuID0gZndfZW50cnktPnNpemU7CisJCQlyZWxlYXNlX2Zpcm13YXJlKGZ3X2VudHJ5KTsKKworCQkJcHVjTWFwcGVkRmlsZSA9IHBGaXJtd2FyZS0+c3pGd1RtcEJ1ZmZlcjsKKwkJCWZpbGVfbGVuZ3RoID0gcEZpcm13YXJlLT5zekZ3VG1wQnVmZmVyTGVuOworCisJCQkvKiBSZXRyaWV2ZSBGVyBoZWFkZXIuICovCiAJCQlwRmlybXdhcmUtPnBGd0hlYWRlciA9IChQUlRfODE5MlNfRklSTVdBUkVfSERSKSBwdWNNYXBwZWRGaWxlOwogCQkJcEZ3SGRyID0gcEZpcm13YXJlLT5wRndIZWFkZXI7CiAJCQlSVF9UUkFDRShDT01QX0ZJUk1XQVJFLCJzaWduYXR1cmU6JXgsIHZlcnNpb246JXgsIHNpemU6JXgsIGltZW1zaXplOiV4LCBzcmFtIHNpemU6JXhcbiIsIFwKIAkJCQkJcEZ3SGRyLT5TaWduYXR1cmUsIHBGd0hkci0+VmVyc2lvbiwgcEZ3SGRyLT5ETUVNU2l6ZSwgXAogCQkJCQlwRndIZHItPklNR19JTUVNX1NJWkUsIHBGd0hkci0+SU1HX1NSQU1fU0laRSk7CiAJCQlwRmlybXdhcmUtPkZpcm13YXJlVmVyc2lvbiA9ICBieXRlKHBGd0hkci0+VmVyc2lvbiAsMCk7Ci0KLQkJCWlmICgocEZ3SGRyLT5JTUdfSU1FTV9TSVpFPT0wKSB8fCAocEZ3SGRyLT5JTUdfSU1FTV9TSVpFID4gc2l6ZW9mKHBGaXJtd2FyZS0+RndJTUVNKSkpCi0JCQl7Ci0JCQkJcHJpbnRrKCJGaXJtd2FyZURvd25sb2FkOTJTKCk6IG1lbW9yeSBmb3IgZGF0YSBpbWFnZSBpcyBsZXNzIHRoYW4gSU1FTSByZXF1aXJlZFxuIik7CisJCQlpZiAoKHBGd0hkci0+SU1HX0lNRU1fU0laRT09MCkgfHwgKHBGd0hkci0+SU1HX0lNRU1fU0laRSA+IHNpemVvZihwRmlybXdhcmUtPkZ3SU1FTSkpKSB7CisJCQkJUlRfVFJBQ0UoQ09NUF9FUlIsICIlczogbWVtb3J5IGZvciBkYXRhIGltYWdlIGlzIGxlc3MgdGhhbiBJTUVNIHJlcXVpcmVkXG4iLFwKKwkJCQkJX19GVU5DVElPTl9fKTsKIAkJCQlnb3RvIERvd25sb2FkRmlybXdhcmVfRmFpbDsKIAkJCX0gZWxzZSB7CiAJCQkJcHVjTWFwcGVkRmlsZSs9RndIZHJTaXplOwotCQkJCS8vUmV0cmlldmUgSU1FTSBpbWFnZS4KKwkJCQkvKiBSZXRyaWV2ZSBJTUVNIGltYWdlLiAqLwogCQkJCW1lbWNweShwRmlybXdhcmUtPkZ3SU1FTSwgcHVjTWFwcGVkRmlsZSwgcEZ3SGRyLT5JTUdfSU1FTV9TSVpFKTsKIAkJCQlwRmlybXdhcmUtPkZ3SU1FTUxlbiA9IHBGd0hkci0+SU1HX0lNRU1fU0laRTsKIAkJCX0KIAotCQkJaWYgKHBGd0hkci0+SU1HX1NSQU1fU0laRSA+IHNpemVvZihwRmlybXdhcmUtPkZ3RU1FTSkpCi0JCQl7Ci0JCQkJcHJpbnRrKCIgRmlybXdhcmVEb3dubG9hZDkyUygpOiBtZW1vcnkgZm9yIGRhdGEgaW1hZ2UgaXMgbGVzcyB0aGFuIEVNRU0gcmVxdWlyZWRcbiIpOwotCQkJCWdvdG8gRG93bmxvYWRGaXJtd2FyZV9GYWlsOwotCQkJfSBlbHNlIHsKLQkJCQlwdWNNYXBwZWRGaWxlKz0gcEZpcm13YXJlLT5Gd0lNRU1MZW47Ci0KLQkJCQkvL1JldHJpZWN2ZSBFTUVNIGltYWdlLgotCQkJCW1lbWNweShwRmlybXdhcmUtPkZ3RU1FTSwgcHVjTWFwcGVkRmlsZSwgcEZ3SGRyLT5JTUdfU1JBTV9TSVpFKTsKLQkJCQlwRmlybXdhcmUtPkZ3RU1FTUxlbiA9IHBGd0hkci0+SU1HX1NSQU1fU0laRTsKLQkJCX0KLSNlbmRpZgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKKwkJCWlmIChwRndIZHItPklNR19TUkFNX1NJWkUgPiBzaXplb2YocEZpcm13YXJlLT5Gd0VNRU0pKSB7CisJCQkJUlRfVFJBQ0UoQ09NUF9FUlIsICIlczogbWVtb3J5IGZvciBkYXRhIGltYWdlIGlzIGxlc3MgdGhhbiBFTUVNIHJlcXVpcmVkXG4iLFwKKwkJCQkJX19GVU5DVElPTl9fKTsKKwkJCQkJZ290byBEb3dubG9hZEZpcm13YXJlX0ZhaWw7CisJCQkJfSBlbHNlIHsKKwkJCQkJcHVjTWFwcGVkRmlsZSArPSBwRmlybXdhcmUtPkZ3SU1FTUxlbjsKKwkJCQkJLyogUmV0cmllY3ZlIEVNRU0gaW1hZ2UgKi8KKwkJCQkJbWVtY3B5KHBGaXJtd2FyZS0+RndFTUVNLCBwdWNNYXBwZWRGaWxlLCBwRndIZHItPklNR19TUkFNX1NJWkUpOy8vPT09PjYKKwkJCQkJcEZpcm13YXJlLT5Gd0VNRU1MZW4gPSBwRndIZHItPklNR19TUkFNX1NJWkU7CisJCQkJfQogCX0KIAogCUZ3U3RhdHVzID0gRmlybXdhcmVHZXROZXh0U3RhdHVzKHBGaXJtd2FyZS0+RldTdGF0dXMpOwpAQCAtNTM4LDMgKzQ3OSw0IEBACiAJcmV0dXJuIHJ0U3RhdHVzOwogfQogCitNT0RVTEVfRklSTVdBUkUoIlJUTDgxOTJTVS9ydGw4MTkyc2Z3LmJpbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfZmlybXdhcmUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJTX2Zpcm13YXJlLmgKaW5kZXggYzUyNTM4MC4uMmMyY2Y4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfZmlybXdhcmUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19maXJtd2FyZS5oCkBAIC01OSwxMiArNTksNiBAQAogCURFU0NfUEFDS0VUX1RZUEVfTk9STUFMID0gMSwKIH1kZXNjX3BhY2tldF90eXBlX2U7CiAKLXR5cGVkZWYgZW51bSBfZmlybXdhcmVfc291cmNlewotCUZXX1NPVVJDRV9JTUdfRklMRSA9IDAsCi0JRldfU09VUkNFX0hFQURFUl9GSUxFID0gMSwKLX1maXJtd2FyZV9zb3VyY2VfZSwgKnBmaXJtd2FyZV9zb3VyY2VfZTsKLQotCiB0eXBlZGVmIGVudW0gX29wdF9yc3RfdHlwZXsKIAlPUFRfU1lTVEVNX1JFU0VUID0gMCwKIAlPUFRfRklSTVdBUkVfUkVTRVQgPSAxLApAQCAtMTg1LDcgKzE3OSw2IEBACiAjZGVmaW5lIFJUTDgxOTBfTUFYX0ZJUk1XQVJFX0NPREVfU0laRSAgNjQwMDAgICAvLzY0awogCiB0eXBlZGVmIHN0cnVjdCBfcnRfZmlybXdhcmV7Ci0JZmlybXdhcmVfc291cmNlX2UJZUZXU291cmNlOwogCVBSVF84MTkyU19GSVJNV0FSRV9IRFIJcEZ3SGVhZGVyOwogCUZJUk1XQVJFXzgxOTJTX1NUQVRVUwlGV1N0YXR1czsKIAl1MTYgICAgICAgICAgICAgRmlybXdhcmVWZXJzaW9uOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlNfcGh5LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19waHkuYwppbmRleCA3N2FiMDI2Li42M2Q0ZTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19waHkuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyU19waHkuYwpAQCAtMjQwNyw4ICsyNDA3LDggQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlSVF9UUkFDRShDT01QX0RCRywgIlNldEJXTW9kZUNhbGxiYWNrODE5MFBjaSgpOlwKLQkJCQkJCXVua25vd24gQmFuZHdpZHRoOiAlI1hcbiIscHJpdi0+Q3VycmVudENoYW5uZWxCVyk7CisJCQlSVF9UUkFDRShDT01QX0RCRywgIlNldEJXTW9kZUNhbGxiYWNrODE5MFBjaSgpOiB1bmtub3duIEJhbmR3aWR0aDogJSNYXG4iLAorCQkJCSBwcml2LT5DdXJyZW50Q2hhbm5lbEJXKTsKIAkJCWJyZWFrOwogCX0KIApAQCAtMzM5OCw4ICszMzk4LDggQEAKIAl1MzIJCQlkZWxheTsKIC8vCWJvb2wJCQlyZXQ7CiAKLQlSVF9UUkFDRShDT01QX1NDQU4sICI9PT5Td0NobmxDYWxsYmFjazgxOTBQY2koKSwgc3dpdGNoIHRvIGNoYW5uZWxcCi0JCQkJJWRcbiIsIHByaXYtPmNoYW4pOworCVJUX1RSQUNFKENPTVBfU0NBTiwgIj09PlN3Q2hubENhbGxiYWNrODE5MFBjaSgpLCBzd2l0Y2ggdG8gY2hhbm5lbCAlZFxuIiwKKwkJIHByaXYtPmNoYW4pOwogCiAKIAlpZighcHJpdi0+dXApCkBAIC0zNTI1LDggKzM1MjUsOCBAQAogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKLQkJCVJUX1RSQUNFKENPTVBfREJHLCAiU2V0Q2hhbm5lbEJhbmR3aWR0aDgxOTBQY2koKTpcCi0JCQkJCQl1bmtub3duIEJhbmR3aWR0aDogJSNYXG4iLHByaXYtPkN1cnJlbnRDaGFubmVsQlcpOworCQkJUlRfVFJBQ0UoQ09NUF9EQkcsICJTZXRDaGFubmVsQmFuZHdpZHRoODE5MFBjaSgpOiB1bmtub3duIEJhbmR3aWR0aDogJSNYXG4iLAorCQkJCSBwcml2LT5DdXJyZW50Q2hhbm5lbEJXKTsKIAkJCWJyZWFrOwogCX0KIApAQCAtMzY2MCw4ICszNjYwLDggQEAKIAkJCWJyZWFrOwogCiAJCWRlZmF1bHQ6Ci0JCQlSVF9UUkFDRShDT01QX0RCRywgIlNldEJXTW9kZUNhbGxiYWNrODE5MlNVc2JXb3JrSXRlbSgpOlwKLQkJCQkJCXVua25vd24gQmFuZHdpZHRoOiAlI1hcbiIscHJpdi0+Q3VycmVudENoYW5uZWxCVyk7CisJCQlSVF9UUkFDRShDT01QX0RCRywgIlNldEJXTW9kZUNhbGxiYWNrODE5MlNVc2JXb3JrSXRlbSgpOiB1bmtub3duIEJhbmR3aWR0aDogJSNYXG4iLAorCQkJCSBwcml2LT5DdXJyZW50Q2hhbm5lbEJXKTsKIAkJCWJyZWFrOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlUuaCBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVLmgKaW5kZXggMmExMWUwMS4uYmE4NzYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVS5oCkBAIC0xMjU4LDcgKzEyNTgsNiBAQAogCXU4IFJmX01vZGU7IC8vYWRkIGZvciBGaXJtd2FyZSBSRiAtUi9XIHN3aXRjaAogCXBydF9maXJtd2FyZQkJcEZpcm13YXJlOwogCXJ0bDgxOXhVc2JfbG9vcGJhY2tfZQlMb29wYmFja01vZGU7Ci0JZmlybXdhcmVfc291cmNlX2UJZmlybXdhcmVfc291cmNlOwogCWJvb2wgdXNiX2Vycm9yOwogCiAJdTE2IEVFUFJPTVR4UG93ZXJEaWZmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfY29yZS5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfY29yZS5jCmluZGV4IGNjYjlkNWIuLjdkMDMwNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVV9jb3JlLmMKQEAgLTExMCw3ICsxMTAsNyBAQAogI2RlZmluZSBUT1RBTF9DQU1fRU5UUlkgMzIKICNkZWZpbmUgQ0FNX0NPTlRFTlRfQ09VTlQgOAogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcnRsODE5Ml91c2JfaWRfdGJsW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgcnRsODE5Ml91c2JfaWRfdGJsW10gPSB7CiAJLyogUmVhbHRlayAqLwogCXtVU0JfREVWSUNFKDB4MGJkYSwgMHg4MTkyKX0sCiAJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDg3MDkpfSwKQEAgLTIzNDAsMjUgKzIzNDAsMjQgQEAKIAkJCQkgICAgc2tiLT5sZW4sIHJ0bDgxOTJfdHhfaXNyLCBza2IpOwogCiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodHhfdXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAoIXN0YXR1cyl7Ci0vL3dlIG5lZWQgdG8gc2VuZCAwIGJ5dGUgcGFja2V0IHdoZW5ldmVyIDUxMk4gYnl0ZXMvNjROKEhJR04gU1BFRUQvTk9STUFMIFNQRUVEKSBieXRlcyBwYWNrZXQgaGFzIGJlZW4gdHJhbnNtaXR0ZWQuIE90aGVyd2lzZSwgaXQgd2lsbCBiZSBoYWx0IHRvIHdhaXQgZm9yIGFub3RoZXIgcGFja2V0LiBXQi4gMjAwOC4wOC4yNworCWlmICghc3RhdHVzKSB7CisJCS8qCisJCSAqIHdlIG5lZWQgdG8gc2VuZCAwIGJ5dGUgcGFja2V0IHdoZW5ldmVyIDUxMk4gYnl0ZXMvNjROKEhJR04gU1BFRUQvTk9STUFMIFNQRUVEKSBieXRlcyBwYWNrZXQgaGFzIGJlZW4gdHJhbnNtaXR0ZWQuCisJCSAqIE90aGVyd2lzZSwgaXQgd2lsbCBiZSBoYWx0IHRvIHdhaXQgZm9yIGFub3RoZXIgcGFja2V0LiBXQi4gMjAwOC4wOC4yNworCQkgKi8KIAkJYm9vbCBiU2VuZDBCeXRlID0gZmFsc2U7CiAJCXU4IHplcm8gPSAwOwotCQlpZih1ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKLQkJeworCQlpZih1ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgewogCQkJaWYgKHNrYi0+bGVuID4gMCAmJiBza2ItPmxlbiAlIDUxMiA9PSAwKQogCQkJCWJTZW5kMEJ5dGUgPSB0cnVlOwogCQl9Ci0JCWVsc2UKLQkJeworCQllbHNlIHsKIAkJCWlmIChza2ItPmxlbiA+IDAgJiYgc2tiLT5sZW4gJSA2NCA9PSAwKQogCQkJCWJTZW5kMEJ5dGUgPSB0cnVlOwogCQl9Ci0JCWlmIChiU2VuZDBCeXRlKQotCQl7Ci0jaWYgMQorCQlpZiAoYlNlbmQwQnl0ZSkgewogCQkJdHhfdXJiX3plcm8gPSB1c2JfYWxsb2NfdXJiKDAsR0ZQX0FUT01JQyk7Ci0JCQlpZighdHhfdXJiX3plcm8peworCQkJaWYoIXR4X3VyYl96ZXJvKSB7CiAJCQkJUlRfVFJBQ0UoQ09NUF9FUlIsICJjYW4ndCBhbGxvYyB1cmIgZm9yIHplcm8gYnl0ZVxuIik7CiAJCQkJcmV0dXJuIC1FTk9NRU07CiAJCQl9CkBAIC0yMzY2LDE2ICsyMzY1LDIzIEBACiAJCQkJCXVzYl9zbmRidWxrcGlwZSh1ZGV2LGlkeF9waXBlKSwgJnplcm8sCiAJCQkJCTAsIHR4X3plcm9faXNyLCBkZXYpOwogCQkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodHhfdXJiX3plcm8sIEdGUF9BVE9NSUMpOwotCQkJaWYgKHN0YXR1cyl7Ci0JCQlSVF9UUkFDRShDT01QX0VSUiwgIkVycm9yIFRYIFVSQiBmb3IgemVybyBieXRlICVkLCBlcnJvciAlZCIsIGF0b21pY19yZWFkKCZwcml2LT50eF9wZW5kaW5nW3RjYl9kZXNjLT5xdWV1ZV9pbmRleF0pLCBzdGF0dXMpOwotCQkJcmV0dXJuIC0xOworCQkJc3dpdGNoIChzdGF0dXMpIHsKKwkJCQljYXNlIDA6CisJCQkJCWJyZWFrOworCQkJCWNhc2UgLUVDT05OUkVTRVQ6CisJCQkJY2FzZSAtRU5PRU5UOgorCQkJCWNhc2UgLUVTSFVURE9XTjoKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJUlRfVFJBQ0UoQ09NUF9FUlIsICJFcnJvciBUWCBVUkIgZm9yIHplcm8gYnl0ZSAlZCwgZXJyb3IgJWQiLAorCQkJCQkJYXRvbWljX3JlYWQoJnByaXYtPnR4X3BlbmRpbmdbdGNiX2Rlc2MtPnF1ZXVlX2luZGV4XSksIHN0YXR1cyk7CisJCQkJCXJldHVybiAtMTsKIAkJCX0KLSNlbmRpZgogCQl9CiAJCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCQlhdG9taWNfaW5jKCZwcml2LT50eF9wZW5kaW5nW3RjYl9kZXNjLT5xdWV1ZV9pbmRleF0pOwogCQlyZXR1cm4gMDsKLQl9ZWxzZXsKKwl9IGVsc2UgewogCQlSVF9UUkFDRShDT01QX0VSUiwgIkVycm9yIFRYIFVSQiAlZCwgZXJyb3IgJWQiLCBhdG9taWNfcmVhZCgmcHJpdi0+dHhfcGVuZGluZ1t0Y2JfZGVzYy0+cXVldWVfaW5kZXhdKSwKIAkJCQlzdGF0dXMpOwogCQlyZXR1cm4gLTE7CkBAIC0yOTUyLDcgKzI5NTgsNyBAQAogCQkJd2lyZWxlc3NfbW9kZSA9IFdJUkVMRVNTX01PREVfQjsKIAkJfQogCX0KLSNpZmRlZiBUT19ET19MSVNUIC8vLy8gVE9ETzogdGhpcyBmdW5jdGlvbiBkb2Vzbid0IHdvcmsgd2VsbCBhdCB0aGlzIHRpbWUsIHdlIHNob3VkIHdhaXQgZm9yIEZQR0EKKyNpZmRlZiBUT19ET19MSVNUIC8vLy8gVE9ETzogdGhpcyBmdW5jdGlvbiBkb2Vzbid0IHdvcmsgd2VsbCBhdCB0aGlzIHRpbWUsIHdlIHNob3VsZCB3YWl0IGZvciBGUEdBCiAJQWN0VXBkYXRlQ2hhbm5lbEFjY2Vzc1NldHRpbmcoIHBBZGFwdGVyLCBwSGFsRGF0YS0+Q3VycmVudFdpcmVsZXNzTW9kZSwgJnBBZGFwdGVyLT5NZ250SW5mby5JbmZvODE4NS5DaGFubmVsQWNjZXNzU2V0dGluZyApOwogI2VuZGlmCiAJLy9MWk0gMDkwMzA2IHVzYiBjcmFzaCBoZXJlLCBtYXJrIGl0IHRlbXAKQEAgLTMzNTksNiArMzM2NSw0NiBAQAogCXJldHVybiBSRnR5cGU7CiB9CiAKK3ZvaWQgdXBkYXRlX2hhbF92YXJpYWJsZXMoc3RydWN0IHI4MTkyX3ByaXYgKnByaXYpCit7CisJaW50IHJmX3BhdGg7CisJaW50IGk7CisJdTggaW5kZXg7CisKKwlmb3IgKHJmX3BhdGggPSAwOyByZl9wYXRoIDwgMjsgcmZfcGF0aCsrKSB7CisJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCXsKKwkJCVJUX1RSQUNFKChDT01QX0lOSVQpLCAiQ0NLIFJGLSVkIENIYW5fQXJlYS0lZCA9IDB4JXhcbiIsIHJmX3BhdGgsIGksIHByaXYtPlJmQ2NrQ2hubEFyZWFUeFB3cltyZl9wYXRoXVtpXSk7CisJCQlSVF9UUkFDRSgoQ09NUF9JTklUKSwgIk9GRE0tMVQgUkYtJWQgQ0hhbl9BcmVhLSVkID0gMHgleFxuIiwgcmZfcGF0aCwgaSwgcHJpdi0+UmZPZmRtQ2hubEFyZWFUeFB3cjFUW3JmX3BhdGhdW2ldKTsKKwkJCVJUX1RSQUNFKChDT01QX0lOSVQpLCAiT0ZETS0yVCBSRi0lZCBDSGFuX0FyZWEtJWQgPSAweCV4XG4iLCByZl9wYXRoLCBpLCBwcml2LT5SZk9mZG1DaG5sQXJlYVR4UHdyMlRbcmZfcGF0aF1baV0pOworCQl9CisJCS8qIEFzc2lnbiBkZWRpY2F0ZWQgY2hhbm5lbCB0eCBwb3dlciAqLworCQlmb3IoaSA9IDA7IGkgPCAxNDsgaSsrKSB7CisJCQkvKiBjaGFubmVsIDEtMyB1c2UgdGhlIHNhbWUgVHggUG93ZXIgTGV2ZWwuICovCisJCQlpZiAoaSA8IDMpCQkJLyogQ2hhbm5lbCAxLTMgKi8KKwkJCQlpbmRleCA9IDA7CisJCQllbHNlIGlmIChpIDwgOSkJCQkvKiBDaGFubmVsIDQtOSAqLworCQkJCWluZGV4ID0gMTsKKwkJCWVsc2UJCQkJLyogQ2hhbm5lbCAxMC0xNCAqLworCQkJCWluZGV4ID0gMjsKKwkJCS8qIFJlY29yZCBBICYgQiBDQ0sgL09GRE0gLSAxVC8yVCBDaGFubmVsIGFyZWEgdHggcG93ZXIgKi8KKwkJCXByaXYtPlJmVHhQd3JMZXZlbENja1tyZl9wYXRoXVtpXSA9IHByaXYtPlJmQ2NrQ2hubEFyZWFUeFB3cltyZl9wYXRoXVtpbmRleF07CisJCQlwcml2LT5SZlR4UHdyTGV2ZWxPZmRtMVRbcmZfcGF0aF1baV0gID0gcHJpdi0+UmZPZmRtQ2hubEFyZWFUeFB3cjFUW3JmX3BhdGhdW2luZGV4XTsKKwkJCXByaXYtPlJmVHhQd3JMZXZlbE9mZG0yVFtyZl9wYXRoXVtpXSAgPSBwcml2LT5SZk9mZG1DaG5sQXJlYVR4UHdyMlRbcmZfcGF0aF1baW5kZXhdOworCQkJaWYgKHJmX3BhdGggPT0gMCkgeworCQkJCXByaXYtPlR4UG93ZXJMZXZlbE9GRE0yNEdbaV0gPSBwcml2LT5SZlR4UHdyTGV2ZWxPZmRtMVRbcmZfcGF0aF1baV0gOworCQkJCXByaXYtPlR4UG93ZXJMZXZlbENDS1tpXSA9IHByaXYtPlJmVHhQd3JMZXZlbENja1tyZl9wYXRoXVtpXTsKKwkJCX0KKwkJfQorCQlmb3IoaSA9IDA7IGkgPCAxNDsgaSsrKSB7CisJCQlSVF9UUkFDRSgoQ09NUF9JTklUKSwKKwkJCSJSZi0lZCBUeFB3ciBDSC0lZCBDQ0sgT0ZETV8xVCBPRkRNXzJUPSAweCV4LzB4JXgvMHgleFxuIiwKKwkJCQlyZl9wYXRoLCBpLCBwcml2LT5SZlR4UHdyTGV2ZWxDY2tbcmZfcGF0aF1baV0sCisJCQkJcHJpdi0+UmZUeFB3ckxldmVsT2ZkbTFUW3JmX3BhdGhdW2ldICwKKwkJCQlwcml2LT5SZlR4UHdyTGV2ZWxPZmRtMlRbcmZfcGF0aF1baV0gKTsKKwkJfQorCX0KK30KKwogLy8KIC8vCURlc2NyaXB0aW9uOgogLy8JCUNvbmZpZyBIVyBhZGFwdGVyIGluZm9ybWF0aW9uIGludG8gaW5pdGlhbCB2YWx1ZS4KQEAgLTMzNzQsNyArMzQyMCw3IEBACiAJc3RydWN0IHI4MTkyX3ByaXYgCSpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAkvL3UxNgkJCWksdXNWYWx1ZTsKIAkvL3U4IHNNYWNBZGRyWzZdID0gezB4MDAsIDB4RTAsIDB4NEMsIDB4ODEsIDB4OTIsIDB4MDB9OwotCXU4CQlyZl9wYXRoLCBpbmRleDsJLy8gRm9yIEVFUFJPTS9FRlVTRSBBZnRlciBWMC42XzExMTcKKwl1OAkJcmZfcGF0aDsJLy8gRm9yIEVFUFJPTS9FRlVTRSBBZnRlciBWMC42XzExMTcKIAlpbnQJaTsKIAogCVJUX1RSQUNFKENPTVBfSU5JVCwgIj09PT0+IENvbmZpZ0FkYXB0ZXJJbmZvODE5MlNGb3JBdXRvTG9hZEZhaWxcbiIpOwpAQCAtMzQyNiwxMCArMzQ3Miw5IEBACiAJd3JpdGVfbmljX2R3b3JkKGRldiwgSURSMCwgKCh1MzIqKWRldi0+ZGV2X2FkZHIpWzBdKTsKIAl3cml0ZV9uaWNfd29yZChkZXYsIElEUjQsICgodTE2KikoZGV2LT5kZXZfYWRkciArIDQpKVswXSk7CiAKLQlSVF9UUkFDRShDT01QX0lOSVQsICJSZWFkQWRhcHRlckluZm84MTkyU0VGdXNlKCksIFBlcm1hbmVudCBBZGRyZXNzID0gJTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMnhcbiIsCi0JCQlkZXYtPmRldl9hZGRyWzBdLCBkZXYtPmRldl9hZGRyWzFdLAotCQkJZGV2LT5kZXZfYWRkclsyXSwgZGV2LT5kZXZfYWRkclszXSwKLQkJCWRldi0+ZGV2X2FkZHJbNF0sIGRldi0+ZGV2X2FkZHJbNV0pOworCVJUX1RSQUNFKENPTVBfSU5JVCwKKwkJIlJlYWRBZGFwdGVySW5mbzgxOTJTRUZ1c2UoKSwgUGVybWFuZW50IEFkZHJlc3MgPSAlcE1cbiIsCisJCWRldi0+ZGV2X2FkZHIpOwogCiAJcHJpdi0+RUVQUk9NQm9hcmRUeXBlID0gRUVQUk9NX0RlZmF1bHRfQm9hcmRUeXBlOwogCXByaXYtPnJmX3R5cGUgPSBSRl8xVDJSOyAvL1JGXzJUMlIKQEAgLTM0NTUsNDIgKzM1MDAsNyBAQAogCQl9CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQl7Ci0JCS8vUlRfVFJBQ0UoKENPTVBfRUZVU0UpLCAiQ0NLIFJGLSVkIENIYW5fQXJlYS0lZCA9IDB4JXhcbiIsICByZl9wYXRoLCBpLAotCQkvL3ByaXYtPlJmQ2NrQ2hubEFyZWFUeFB3cltyZl9wYXRoXVtpXSk7Ci0JCS8vUlRfVFJBQ0UoKENPTVBfRUZVU0UpLCAiT0ZETS0xVCBSRi0lZCBDSGFuX0FyZWEtJWQgPSAweCV4XG4iLCAgcmZfcGF0aCwgaSwKLQkJLy9wcml2LT5SZk9mZG1DaG5sQXJlYVR4UHdyMVRbcmZfcGF0aF1baV0pOwotCQkvL1JUX1RSQUNFKChDT01QX0VGVVNFKSwgIk9GRE0tMlQgUkYtJWQgQ0hhbl9BcmVhLSVkID0gMHgleFxuIiwgIHJmX3BhdGgsIGksCi0JCS8vcHJpdi0+UmZPZmRtQ2hubEFyZWFUeFB3cjJUW3JmX3BhdGhdW2ldKTsKLQl9Ci0KLQkvLyBBc3NpZ24gZGVkaWNhdGVkIGNoYW5uZWwgdHggcG93ZXIKLQlmb3IoaT0wOyBpPDE0OyBpKyspCS8vIGNoYW5uZWwgMX4zIHVzZSB0aGUgc2FtZSBUeCBQb3dlciBMZXZlbC4KLQkJewotCQlpZiAoaSA8IDMpCQkJLy8gQ2phbmVsIDEtMwotCQkJaW5kZXggPSAwOwotCQllbHNlIGlmIChpIDwgOSkJCS8vIENoYW5uZWwgNC05Ci0JCQlpbmRleCA9IDE7Ci0JCWVsc2UJCQkJLy8gQ2hhbm5lbCAxMC0xNAotCQkJaW5kZXggPSAyOwotCi0JCS8vIFJlY29yZCBBICYgQiBDQ0sgL09GRE0gLSAxVC8yVCBDaGFubmVsIGFyZWEgdHggcG93ZXIKLQkJcHJpdi0+UmZUeFB3ckxldmVsQ2NrW3JmX3BhdGhdW2ldICA9Ci0JCXByaXYtPlJmQ2NrQ2hubEFyZWFUeFB3cltyZl9wYXRoXVtpbmRleF07Ci0JCXByaXYtPlJmVHhQd3JMZXZlbE9mZG0xVFtyZl9wYXRoXVtpXSAgPQotCQlwcml2LT5SZk9mZG1DaG5sQXJlYVR4UHdyMVRbcmZfcGF0aF1baW5kZXhdOwotCQlwcml2LT5SZlR4UHdyTGV2ZWxPZmRtMlRbcmZfcGF0aF1baV0gID0KLQkJcHJpdi0+UmZPZmRtQ2hubEFyZWFUeFB3cjJUW3JmX3BhdGhdW2luZGV4XTsKLQkJfQotCi0JCWZvcihpPTA7IGk8MTQ7IGkrKykKLQkJewotCQkvL1JUX1RSQUNFKChDT01QX0VGVVNFKSwgIlJmLSVkIFR4UHdyIENILSVkIENDSyBPRkRNXzFUIE9GRE1fMlQ9IDB4JXgvMHgleC8weCV4XG4iLAotCQkvL3JmX3BhdGgsIGksIHByaXYtPlJmVHhQd3JMZXZlbENja1swXVtpXSwKLQkJLy9wcml2LT5SZlR4UHdyTGV2ZWxPZmRtMVRbMF1baV0gLAotCQkvL3ByaXYtPlJmVHhQd3JMZXZlbE9mZG0yVFswXVtpXSApOwotCQl9CisJdXBkYXRlX2hhbF92YXJpYWJsZXMocHJpdik7CiAKIAkvLwogCS8vIFVwZGF0ZSByZW1haW5lZCBIQUwgdmFyaWFibGVzLgpAQCAtMzc2NywxMCArMzc3Nyw5IEBACiAJd3JpdGVfbmljX2R3b3JkKGRldiwgSURSMCwgKCh1MzIqKWRldi0+ZGV2X2FkZHIpWzBdKTsKIAl3cml0ZV9uaWNfd29yZChkZXYsIElEUjQsICgodTE2KikoZGV2LT5kZXZfYWRkciArIDQpKVswXSk7CiAKLQlSVF9UUkFDRShDT01QX0lOSVQsICJSZWFkQWRhcHRlckluZm84MTkyU0VGdXNlKCksIFBlcm1hbmVudCBBZGRyZXNzID0gJTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMnhcbiIsCi0JCQlkZXYtPmRldl9hZGRyWzBdLCBkZXYtPmRldl9hZGRyWzFdLAotCQkJZGV2LT5kZXZfYWRkclsyXSwgZGV2LT5kZXZfYWRkclszXSwKLQkJCWRldi0+ZGV2X2FkZHJbNF0sIGRldi0+ZGV2X2FkZHJbNV0pOworCVJUX1RSQUNFKENPTVBfSU5JVCwKKwkJIlJlYWRBZGFwdGVySW5mbzgxOTJTRUZ1c2UoKSwgUGVybWFuZW50IEFkZHJlc3MgPSAlcE1cbiIsCisJCWRldi0+ZGV2X2FkZHIpOwogCiAJLy8KIAkvLyBHZXQgQ3VzdG9tZXJJRChCb2FkIFR5cGUpCkBAIC0zOTAxLDUzICszOTEwLDcgQEAKIAkJCX0KIAogCQl9Ci0vLwotCQkvLyBVcGRhdGUgVHggUG93ZXIgSEFMIHZhcmlhYmxlcy4KLS8vCi0JCWZvciAocmZfcGF0aCA9IDA7IHJmX3BhdGggPCAyOyByZl9wYXRoKyspCi0JCXsKLQkJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCQl7Ci0JCQkJUlRfVFJBQ0UoKENPTVBfSU5JVCksICAiQ0NLIFJGLSVkIENIYW5fQXJlYS0lZCA9IDB4JXhcbiIsICByZl9wYXRoLCBpLAotCQkJCXByaXYtPlJmQ2NrQ2hubEFyZWFUeFB3cltyZl9wYXRoXVtpXSk7Ci0JCQkJUlRfVFJBQ0UoKENPTVBfSU5JVCksICJPRkRNLTFUIFJGLSVkIENIYW5fQXJlYS0lZCA9IDB4JXhcbiIsICByZl9wYXRoLCBpLAotCQkJCXByaXYtPlJmT2ZkbUNobmxBcmVhVHhQd3IxVFtyZl9wYXRoXVtpXSk7Ci0JCQkJUlRfVFJBQ0UoKENPTVBfSU5JVCksICJPRkRNLTJUIFJGLSVkIENIYW5fQXJlYS0lZCA9IDB4JXhcbiIsICByZl9wYXRoLCBpLCBwcml2LT5SZk9mZG1DaG5sQXJlYVR4UHdyMlRbcmZfcGF0aF1baV0pOwotCQkJfQotCi0JCQkvLyBBc3NpZ24gZGVkaWNhdGVkIGNoYW5uZWwgdHggcG93ZXIKLQkJCWZvcihpPTA7IGk8MTQ7IGkrKykJLy8gY2hhbm5lbCAxfjMgdXNlIHRoZSBzYW1lIFR4IFBvd2VyIExldmVsLgotCQkJewotCQkJCWlmIChpIDwgMykJCQkvLyBDamFuZWwgMS0zCi0JCQkJCWluZGV4ID0gMDsKLQkJCQllbHNlIGlmIChpIDwgOSkJCS8vIENoYW5uZWwgNC05Ci0JCQkJCWluZGV4ID0gMTsKLQkJCQllbHNlCQkJCS8vIENoYW5uZWwgMTAtMTQKLQkJCQkJaW5kZXggPSAyOwotCi0JCQkJLy8gUmVjb3JkIEEgJiBCIENDSyAvT0ZETSAtIDFULzJUIENoYW5uZWwgYXJlYSB0eCBwb3dlcgotCQkJCXByaXYtPlJmVHhQd3JMZXZlbENja1tyZl9wYXRoXVtpXSAgPQotCQkJCXByaXYtPlJmQ2NrQ2hubEFyZWFUeFB3cltyZl9wYXRoXVtpbmRleF07Ci0JCQkJcHJpdi0+UmZUeFB3ckxldmVsT2ZkbTFUW3JmX3BhdGhdW2ldICA9Ci0JCQkJcHJpdi0+UmZPZmRtQ2hubEFyZWFUeFB3cjFUW3JmX3BhdGhdW2luZGV4XTsKLQkJCQlwcml2LT5SZlR4UHdyTGV2ZWxPZmRtMlRbcmZfcGF0aF1baV0gID0KLQkJCQlwcml2LT5SZk9mZG1DaG5sQXJlYVR4UHdyMlRbcmZfcGF0aF1baW5kZXhdOwotCQkJCWlmIChyZl9wYXRoID09IDApCi0JCQkJewotCQkJCQlwcml2LT5UeFBvd2VyTGV2ZWxPRkRNMjRHW2ldID0gcHJpdi0+UmZUeFB3ckxldmVsT2ZkbTFUW3JmX3BhdGhdW2ldIDsKLQkJCQkJcHJpdi0+VHhQb3dlckxldmVsQ0NLW2ldID0gcHJpdi0+UmZUeFB3ckxldmVsQ2NrW3JmX3BhdGhdW2ldOwotCQkJCX0KLQkJCX0KLQotCQkJZm9yKGk9MDsgaTwxNDsgaSsrKQotCQkJewotCQkJCVJUX1RSQUNFKChDT01QX0lOSVQpLAotCQkJCSJSZi0lZCBUeFB3ciBDSC0lZCBDQ0sgT0ZETV8xVCBPRkRNXzJUPSAweCV4LzB4JXgvMHgleFxuIiwKLQkJCQlyZl9wYXRoLCBpLCBwcml2LT5SZlR4UHdyTGV2ZWxDY2tbcmZfcGF0aF1baV0sCi0JCQkJcHJpdi0+UmZUeFB3ckxldmVsT2ZkbTFUW3JmX3BhdGhdW2ldICwKLQkJCQlwcml2LT5SZlR4UHdyTGV2ZWxPZmRtMlRbcmZfcGF0aF1baV0gKTsKLQkJCX0KLQkJfQorCQl1cGRhdGVfaGFsX3ZhcmlhYmxlcyhwcml2KTsKIAl9CiAKIAkvLwpAQCAtNjE2OCw3ICs2MTMxLDcgQEAKIAl1MTYgc2MgOwogCXVuc2lnbmVkIGludCBmcmFnLHNlcTsKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKilidWZmZXI7Ci0Jc2MgPSBsZTE2X3RvX2NwdShoZHItPnNlcV9jdGwpOworCXNjID0gbGUxNl90b19jcHUoaGRyLT5zZXFfY3RybCk7CiAJZnJhZyA9IFdMQU5fR0VUX1NFUV9GUkFHKHNjKTsKIAlzZXEgPSBXTEFOX0dFVF9TRVFfU0VRKHNjKTsKIAkvL2Nvc2EgYWRkIDA0MjkyMDA4IHRvIHJlY29yZCB0aGUgc2VxdWVuY2UgbnVtYmVyCkBAIC02ODI3LDcgKzY3OTAsNyBAQAogCXRtcF9idWYgPSAodTgqKXNrYi0+ZGF0YTsvLyArIGdldF9yeHBhY2tldF9zaGlmdGJ5dGVzXzgxOXh1c2IocHN0YXRzKTsKIAogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKXRtcF9idWY7Ci0JZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2N0bCk7CisJZmMgPSBsZTE2X3RvX2NwdShoZHItPmZyYW1lX2NvbnRyb2wpOwogCXR5cGUgPSBXTEFOX0ZDX0dFVF9UWVBFKGZjKTsKIAlwcmFkZHIgPSBoZHItPmFkZHIxOwogCkBAIC03Njc3LDcgKzc2NDAsNyBAQAogCWlmIChFbnRyeU5vID49IFRPVEFMX0NBTV9FTlRSWSkKIAkJUlRfVFJBQ0UoQ09NUF9FUlIsICJjYW0gZW50cnkgZXhjZWVkcyBpbiBzZXRLZXkoKVxuIik7CiAKLQlSVF9UUkFDRShDT01QX1NFQywgIj09PT0+dG8gc2V0S2V5KCksIGRldjolcCwgRW50cnlObzolZCwgS2V5SW5kZXg6JWQsIEtleVR5cGU6JWQsIE1hY0FkZHIiTUFDX0ZNVCJcbiIsIGRldixFbnRyeU5vLCBLZXlJbmRleCwgS2V5VHlwZSwgTUFDX0FSRyhNYWNBZGRyKSk7CisJUlRfVFJBQ0UoQ09NUF9TRUMsICI9PT09PnRvIHNldEtleSgpLCBkZXY6JXAsIEVudHJ5Tm86JWQsIEtleUluZGV4OiVkLCBLZXlUeXBlOiVkLCBNYWNBZGRyJXBNXG4iLCBkZXYsRW50cnlObywgS2V5SW5kZXgsIEtleVR5cGUsIE1hY0FkZHIpOwogCiAJaWYgKERlZmF1bHRLZXkpCiAJCXVzQ29uZmlnIHw9IEJJVDE1IHwgKEtleVR5cGU8PDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfZG0uYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkyc3UvcjgxOTJVX2RtLmMKaW5kZXggNzg5MWU5Ni4uZmE1ZTI0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJzdS9yODE5MlVfZG0uYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnN1L3I4MTkyVV9kbS5jCkBAIC0yNjk3LDcgKzI2OTcsNyBAQAogCQl1OCogcGVlcm5hbWVbMTFdID0geyJ1bmtub3duIiwgInJlYWx0ZWsiLCAicmVhbHRla185MnNlIiwgImJyb2FkY29tIiwgInJhbGluayIsICJhdGhlcm9zIiwgImNpc2NvIiwgIm1hcnZlbGwiLCAiOTJ1X3NvZnRhcCIsICJzZWxmX3NvZnRhcCJ9OwogCQlzdGF0aWMgaW50IHdiX3RtcCA9IDA7CiAJCWlmICh3Yl90bXAgPT0gMCl7Ci0JCQlwcmludGsoIiVzKCk6aW90IHBlZXIgaXMgJSN4OiVzLCBic3NpZDoiTUFDX0ZNVCJcbiIsX19GVU5DVElPTl9fLHBIVEluZm8tPklPVFBlZXIscGVlcm5hbWVbcEhUSW5mby0+SU9UUGVlcl0sIE1BQ19BUkcocHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuYnNzaWQpKTsKKwkJCXByaW50aygiJXMoKTppb3QgcGVlciBpcyAlI3g6JXMsIGJzc2lkOiVwTVxuIixfX0ZVTkNUSU9OX18scEhUSW5mby0+SU9UUGVlcixwZWVybmFtZVtwSFRJbmZvLT5JT1RQZWVyXSwgcHJpdi0+aWVlZTgwMjExLT5jdXJyZW50X25ldHdvcmsuYnNzaWQpOwogCQkJd2JfdG1wID0gMTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L0tjb25maWcKaW5kZXggOTkxM2FiOC4uMDQzOWM5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L0tjb25maWcKQEAgLTEsNiArMSw3IEBACiBjb25maWcgUlRMODE5MlUKIAl0cmlzdGF0ZSAiUmVhbFRlayBSVEw4MTkyVSBXaXJlbGVzcyBMQU4gTklDIGRyaXZlciIKIAlkZXBlbmRzIG9uIFBDSSAmJiBXTEFOICYmIFVTQgotCWRlcGVuZHMgb24gV0lSRUxFU1NfRVhUCisJc2VsZWN0IFdJUkVMRVNTX0VYVAorCXNlbGVjdCBXRVhUX1BSSVYKIAlkZWZhdWx0IE4KIAktLS1oZWxwLS0tCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvTWFrZWZpbGUKaW5kZXggMmQ1OWM0ZS4uNzM4ZjRhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9NYWtlZmlsZQpAQCAtMyw3ICszLDcgQEAKIEVYVFJBX0NGTEFHUyArPSAtc3RkPWdudTg5CiBFWFRSQV9DRkxBR1MgKz0gLU8yCiAKLUVYVFJBX0NGTEFHUyArPSAtbWhhcmQtZmxvYXQgLURDT05GSUdfRk9SQ0VfSEFSRF9GTE9BVD15CitFWFRSQV9DRkxBR1MgKz0gLURDT05GSUdfRk9SQ0VfSEFSRF9GTE9BVD15CiBFWFRSQV9DRkxBR1MgKz0gLURKQUNLU09OX05FV184MTg3IC1ESkFDS1NPTl9ORVdfUlgKIEVYVFJBX0NGTEFHUyArPSAtRFRIT01BU19CRUFDT04gLURUSE9NQVNfVEFTS0xFVCAtRFRIT01BU19TS0IgLURUSE9NQVNfVFVSQk8KICNFWFRSQV9DRkxBR1MgKz0gLURVU0JfVFhfRFJJVkVSX0FHR1JFR0FUSU9OX0VOQUJMRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS5oIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS5oCmluZGV4IDNhNDdmMTIuLjlkMDVlZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExLmgKQEAgLTU1MSw5ICs1NTEsNiBAQAogCiAvKiBkZWJ1ZyBtYWNyb3Mgbm90IGRlcGVuZGVudCBvbiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCiAKLSNkZWZpbmUgTUFDX0ZNVCAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiCi0jZGVmaW5lIE1BQ19BUkcoeCkgKCh1OCopKHgpKVswXSwoKHU4KikoeCkpWzFdLCgodTgqKSh4KSlbMl0sKCh1OCopKHgpKVszXSwoKHU4KikoeCkpWzRdLCgodTgqKSh4KSlbNV0KLQogLyoKICAqIFRvIHVzZSB0aGUgZGVidWcgc3lzdGVtOwogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExLmggYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMS5oCmluZGV4IDEwOTA4ZTEyMy4uMzk4NDdjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMS5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZW1hcGhvcmUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KQEAgLTU1MSw5ICs1NTIsNiBAQAogCiAvKiBkZWJ1ZyBtYWNyb3Mgbm90IGRlcGVuZGVudCBvbiBDT05GSUdfSUVFRTgwMjExX0RFQlVHICovCiAKLSNkZWZpbmUgTUFDX0ZNVCAiJTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMngiCi0jZGVmaW5lIE1BQ19BUkcoeCkgKCh1OCopKHgpKVswXSwoKHU4KikoeCkpWzFdLCgodTgqKSh4KSlbMl0sKCh1OCopKHgpKVszXSwoKHU4KikoeCkpWzRdLCgodTgqKSh4KSlbNV0KLQogLyoKICAqIFRvIHVzZSB0aGUgZGVidWcgc3lzdGVtOwogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X2NjbXAuYwppbmRleCAwYjMzYmY0Li4wYjU3NjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF9jY21wLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfY2NtcC5jCkBAIC0yODgsNyArMjg4LDcgQEAKIAlpZiAoIShrZXlpZHggJiAoMSA8PCA1KSkpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIkNDTVA6IHJlY2VpdmVkIHBhY2tldCB3aXRob3V0IEV4dElWIgotCQkJICAgICAgICIgZmxhZyBmcm9tICIgTUFDX0ZNVCAiXG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCSAgICAgICAiIGZsYWcgZnJvbSAlcE1cbiIsIGhkci0+YWRkcjIpOwogCQl9CiAJCWtleS0+ZG90MTFSU05BU3RhdHNDQ01QRm9ybWF0RXJyb3JzKys7CiAJCXJldHVybiAtMjsKQEAgLTMwMSw5ICszMDEsOSBAQAogCX0KIAlpZiAoIWtleS0+a2V5X3NldCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVjZWl2ZWQgcGFja2V0IGZyb20gIiBNQUNfRk1UCisJCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVjZWl2ZWQgcGFja2V0IGZyb20gJXBNIgogCQkJICAgICAgICIgd2l0aCBrZXlpZD0lZCB0aGF0IGRvZXMgbm90IGhhdmUgYSBjb25maWd1cmVkIgotCQkJICAgICAgICIga2V5XG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpLCBrZXlpZHgpOworCQkJICAgICAgICIga2V5XG4iLCBoZHItPmFkZHIyLCBrZXlpZHgpOwogCQl9CiAJCXJldHVybiAtMzsKIAl9CkBAIC0zMTgsMTEgKzMxOCw5IEBACiAKIAlpZiAobWVtY21wKHBuLCBrZXktPnJ4X3BuLCBDQ01QX1BOX0xFTikgPD0gMCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVwbGF5IGRldGVjdGVkOiBTVEE9IiBNQUNfRk1UCi0JCQkgICAgICAgIiBwcmV2aW91cyBQTiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnggIgotCQkJICAgICAgICJyZWNlaXZlZCBQTiAlMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnhcbiIsCi0JCQkgICAgICAgTUFDX0FSRyhoZHItPmFkZHIyKSwgTUFDX0FSRyhrZXktPnJ4X3BuKSwKLQkJCSAgICAgICBNQUNfQVJHKHBuKSk7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiQ0NNUDogcmVwbGF5IGRldGVjdGVkOiBTVEE9JXBNIgorCQkJICAgICAgICIgcHJldmlvdXMgUE4gJXBtIHJlY2VpdmVkIFBOICVwbVxuIiwKKwkJCSAgICAgICBoZHItPmFkZHIyLCBrZXktPnJ4X3BuLCBwbik7CiAJCX0KIAkJa2V5LT5kb3QxMVJTTkFTdGF0c0NDTVBSZXBsYXlzKys7CiAJCXJldHVybiAtNDsKQEAgLTM1OSw3ICszNTcsNyBAQAogCQlpZiAobWVtY21wKG1pYywgYSwgQ0NNUF9NSUNfTEVOKSAhPSAwKSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIkNDTVA6IGRlY3J5cHQgZmFpbGVkOiBTVEE9IgotCQkJCU1BQ19GTVQgIlxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkJIiVwTVxuIiwgaGRyLT5hZGRyMik7CiAJCQl9CiAJCQlrZXktPmRvdDExUlNOQVN0YXRzQ0NNUERlY3J5cHRFcnJvcnMrKzsKIAkJCXJldHVybiAtNTsKQEAgLTQzNSwxMSArNDMzLDEwIEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9jY21wX2RhdGEgKmNjbXAgPSBwcml2OwogCXAgKz0gc3ByaW50ZihwLCAia2V5WyVkXSBhbGc9Q0NNUCBrZXlfc2V0PSVkICIKLQkJICAgICAidHhfcG49JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKLQkJICAgICAicnhfcG49JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4ICIKKwkJICAgICAidHhfcG49JXBtIHJ4X3BuPSVwbSAiCiAJCSAgICAgImZvcm1hdF9lcnJvcnM9JWQgcmVwbGF5cz0lZCBkZWNyeXB0X2Vycm9ycz0lZFxuIiwKIAkJICAgICBjY21wLT5rZXlfaWR4LCBjY21wLT5rZXlfc2V0LAotCQkgICAgIE1BQ19BUkcoY2NtcC0+dHhfcG4pLCBNQUNfQVJHKGNjbXAtPnJ4X3BuKSwKKwkJICAgICBjY21wLT50eF9wbiwgY2NtcC0+cnhfcG4sCiAJCSAgICAgY2NtcC0+ZG90MTFSU05BU3RhdHNDQ01QRm9ybWF0RXJyb3JzLAogCQkgICAgIGNjbXAtPmRvdDExUlNOQVN0YXRzQ0NNUFJlcGxheXMsCiAJCSAgICAgY2NtcC0+ZG90MTFSU05BU3RhdHNDQ01QRGVjcnlwdEVycm9ycyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9jcnlwdF90a2lwLmMKaW5kZXggODQxYjk5OS4uOTUxMDUwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfY3J5cHRfdGtpcC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX2NyeXB0X3RraXAuYwpAQCAtNDEwLDcgKzQxMCw3IEBACiAJaWYgKCEoa2V5aWR4ICYgKDEgPDwgNSkpKSB7CiAJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiByZWNlaXZlZCBwYWNrZXQgd2l0aG91dCBFeHRJViIKLQkJCSAgICAgICAiIGZsYWcgZnJvbSAiIE1BQ19GTVQgIlxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkgICAgICAgIiBmbGFnIGZyb20gJXBNXG4iLCBoZHItPmFkZHIyKTsKIAkJfQogCQlyZXR1cm4gLTI7CiAJfQpAQCAtNDIyLDkgKzQyMiw5IEBACiAJfQogCWlmICghdGtleS0+a2V5X3NldCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUDogcmVjZWl2ZWQgcGFja2V0IGZyb20gIiBNQUNfRk1UCisJCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUDogcmVjZWl2ZWQgcGFja2V0IGZyb20gJXBNIgogCQkJICAgICAgICIgd2l0aCBrZXlpZD0lZCB0aGF0IGRvZXMgbm90IGhhdmUgYSBjb25maWd1cmVkIgotCQkJICAgICAgICIga2V5XG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpLCBrZXlpZHgpOworCQkJICAgICAgICIga2V5XG4iLCBoZHItPmFkZHIyLCBrZXlpZHgpOwogCQl9CiAJCXJldHVybiAtMzsKIAl9CkBAIC00MzcsOSArNDM3LDkgQEAKIAkJaWYgKGl2MzIgPCB0a2V5LT5yeF9pdjMyIHx8CiAJCShpdjMyID09IHRrZXktPnJ4X2l2MzIgJiYgaXYxNiA8PSB0a2V5LT5yeF9pdjE2KSkgewogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiByZXBsYXkgZGV0ZWN0ZWQ6IFNUQT0iIE1BQ19GTVQKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiVEtJUDogcmVwbGF5IGRldGVjdGVkOiBTVEE9JXBNIgogCQkJCSIgcHJldmlvdXMgVFNDICUwOHglMDR4IHJlY2VpdmVkIFRTQyAiCi0JCQkJIiUwOHglMDR4XG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpLAorCQkJCSIlMDh4JTA0eFxuIiwgaGRyLT5hZGRyMiwKIAkJCQl0a2V5LT5yeF9pdjMyLCB0a2V5LT5yeF9pdjE2LCBpdjMyLCBpdjE2KTsKIAkJCX0KIAkJCXRrZXktPmRvdDExUlNOQVN0YXRzVEtJUFJlcGxheXMrKzsKQEAgLTQ2MCw4ICs0NjAsOCBAQAogCQlpZiAoY3J5cHRvX2Jsa2NpcGhlcl9kZWNyeXB0KCZkZXNjLCAmc2csICZzZywgcGxlbiArIDQpKSB7CiAJCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIjogVEtJUDogZmFpbGVkIHRvIGRlY3J5cHQgIgotCQkJCQkJInJlY2VpdmVkIHBhY2tldCBmcm9tICIgTUFDX0ZNVCAiXG4iLAotCQkJCQkJTUFDX0FSRyhoZHItPmFkZHIyKSk7CisJCQkJCQkicmVjZWl2ZWQgcGFja2V0IGZyb20gJXBNXG4iLAorCQkJCQkJaGRyLT5hZGRyMik7CiAJCQl9CiAJCQlyZXR1cm4gLTc7CiAJCX0KQEAgLTQ4MCw3ICs0ODAsNyBAQAogCQkJfQogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJCXByaW50ayhLRVJOX0RFQlVHICJUS0lQOiBJQ1YgZXJyb3IgZGV0ZWN0ZWQ6IFNUQT0iCi0JCQkJTUFDX0ZNVCAiXG4iLCBNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCQkiJXBNXG4iLCBoZHItPmFkZHIyKTsKIAkJCX0KIAkJCXRrZXktPmRvdDExUlNOQVN0YXRzVEtJUElDVkVycm9ycysrOwogCQkJcmV0dXJuIC01OwpAQCAtNjM1LDggKzYzNSw4IEBACiAJCXN0cnVjdCBpZWVlODAyMTFfaGRyXzRhZGRyICpoZHI7CiAJCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl80YWRkciAqKSBza2ItPmRhdGE7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogTWljaGFlbCBNSUMgdmVyaWZpY2F0aW9uIGZhaWxlZCBmb3IgIgotCQkgICAgICAgIk1TRFUgZnJvbSAiIE1BQ19GTVQgIiBrZXlpZHg9JWRcbiIsCi0JCSAgICAgICBza2ItPmRldiA/IHNrYi0+ZGV2LT5uYW1lIDogIk4vQSIsIE1BQ19BUkcoaGRyLT5hZGRyMiksCisJCSAgICAgICAiTVNEVSBmcm9tICVwTSBrZXlpZHg9JWRcbiIsCisJCSAgICAgICBza2ItPmRldiA/IHNrYi0+ZGV2LT5uYW1lIDogIk4vQSIsIGhkci0+YWRkcjIsCiAJCSAgICAgICBrZXlpZHgpOwogCQlpZiAoc2tiLT5kZXYpCiAJCQlpZWVlODAyMTFfbWljaGFlbF9taWNfZmFpbHVyZShza2ItPmRldiwgaGRyLCBrZXlpZHgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfbW9kdWxlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwppbmRleCA3YTg2OTBmLi5iNzUyMDE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9tb2R1bGUuYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpCiB7CiAJY2hhciBidWZbXSA9ICIweDAwMDAwMDAwIjsKLQl1bnNpZ25lZCBsb25nIGxlbiA9IG1pbihzaXplb2YoYnVmKSAtIDEsIGNvdW50KTsKKwl1bnNpZ25lZCBsb25nIGxlbiA9IG1pbl90KHVuc2lnbmVkIGxvbmcsIHNpemVvZihidWYpIC0gMSwgY291bnQpOwogCWNoYXIgKnAgPSAoY2hhciAqKWJ1ZjsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3J4LmMKaW5kZXggMGUwMDNjNS4uN2U5YjM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfcnguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9yeC5jCkBAIC0zNjAsOCArMzYwLDggQEAKIAkgICAgc3RyY21wKGNyeXB0LT5vcHMtPm5hbWUsICJUS0lQIikgPT0gMCkgewogCQlpZiAobmV0X3JhdGVsaW1pdCgpKSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFRLSVAgY291bnRlcm1lYXN1cmVzOiBkcm9wcGVkICIKLQkJCSAgICAgICAicmVjZWl2ZWQgcGFja2V0IGZyb20gIiBNQUNfRk1UICJcbiIsCi0JCQkgICAgICAgaWVlZS0+ZGV2LT5uYW1lLCBNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCSAgICAgICAicmVjZWl2ZWQgcGFja2V0IGZyb20gJXBNXG4iLAorCQkJICAgICAgIGllZWUtPmRldi0+bmFtZSwgaGRyLT5hZGRyMik7CiAJCX0KIAkJcmV0dXJuIC0xOwogCX0KQEAgLTM3Miw4ICszNzIsOCBAQAogCWF0b21pY19kZWMoJmNyeXB0LT5yZWZjbnQpOwogCWlmIChyZXMgPCAwKSB7CiAJCUlFRUU4MDIxMV9ERUJVR19EUk9QKAotCQkJImRlY3J5cHRpb24gZmFpbGVkIChTQT0iIE1BQ19GTVQKLQkJCSIpIHJlcz0lZFxuIiwgTUFDX0FSRyhoZHItPmFkZHIyKSwgcmVzKTsKKwkJCSJkZWNyeXB0aW9uIGZhaWxlZCAoU0E9JXBNIgorCQkJIikgcmVzPSVkXG4iLCBoZHItPmFkZHIyLCByZXMpOwogCQlpZiAocmVzID09IC0yKQogCQkJSUVFRTgwMjExX0RFQlVHX0RST1AoIkRlY3J5cHRpb24gZmFpbGVkIElDViAiCiAJCQkJCSAgICAgIm1pc21hdGNoIChrZXkgJWQpXG4iLApAQCAtNDEwLDggKzQxMCw4IEBACiAJYXRvbWljX2RlYygmY3J5cHQtPnJlZmNudCk7CiAJaWYgKHJlcyA8IDApIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBNU0RVIGRlY3J5cHRpb24vTUlDIHZlcmlmaWNhdGlvbiBmYWlsZWQiCi0JCSAgICAgICAiIChTQT0iIE1BQ19GTVQgIiBrZXlpZHg9JWQpXG4iLAotCQkgICAgICAgaWVlZS0+ZGV2LT5uYW1lLCBNQUNfQVJHKGhkci0+YWRkcjIpLCBrZXlpZHgpOworCQkgICAgICAgIiAoU0E9JXBNIGtleWlkeD0lZClcbiIsCisJCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIGhkci0+YWRkcjIsIGtleWlkeCk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTEwMTYsOCArMTAxNiw4IEBACiAJCQkgKiBmcmFtZXMgc2lsZW50bHkgaW5zdGVhZCBvZiBmaWxsaW5nIHN5c3RlbSBsb2cgd2l0aAogCQkJICogdGhlc2UgcmVwb3J0cy4gKi8KIAkJCUlFRUU4MDIxMV9ERUJVR19EUk9QKCJEZWNyeXB0aW9uIGZhaWxlZCAobm90IHNldCkiCi0JCQkJCSAgICAgIiAoU0E9IiBNQUNfRk1UICIpXG4iLAotCQkJCQkgICAgIE1BQ19BUkcoaGRyLT5hZGRyMikpOworCQkJCQkgICAgICIgKFNBPSVwTSlcbiIsCisJCQkJCSAgICAgaGRyLT5hZGRyMik7CiAJCQlpZWVlLT5pZWVlX3N0YXRzLnJ4X2Rpc2NhcmRzX3VuZGVjcnlwdGFibGUrKzsKIAkJCWdvdG8gcnhfZHJvcHBlZDsKIAkJfQpAQCAtMTI1Niw4ICsxMjU2LDggQEAKIAkJfSBlbHNlIHsKIAkJCUlFRUU4MDIxMV9ERUJVR19EUk9QKAogCQkJCSJlbmNyeXB0aW9uIGNvbmZpZ3VyZWQsIGJ1dCBSWCAiCi0JCQkJImZyYW1lIG5vdCBlbmNyeXB0ZWQgKFNBPSIgTUFDX0ZNVCAiKVxuIiwKLQkJCQlNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCQkiZnJhbWUgbm90IGVuY3J5cHRlZCAoU0E9JXBNKVxuIiwKKwkJCQloZHItPmFkZHIyKTsKIAkJCWdvdG8gcnhfZHJvcHBlZDsKIAkJfQogCX0KQEAgLTEyNzYsOSArMTI3Niw5IEBACiAJICAgICFpZWVlODAyMTFfaXNfZWFwb2xfZnJhbWUoaWVlZSwgc2tiLCBoZHJsZW4pKSB7CiAJCUlFRUU4MDIxMV9ERUJVR19EUk9QKAogCQkJImRyb3BwZWQgdW5lbmNyeXB0ZWQgUlggZGF0YSAiCi0JCQkiZnJhbWUgZnJvbSAiIE1BQ19GTVQKKwkJCSJmcmFtZSBmcm9tICVwTSIKIAkJCSIgKGRyb3BfdW5lbmNyeXB0ZWQ9MSlcbiIsCi0JCQlNQUNfQVJHKGhkci0+YWRkcjIpKTsKKwkJCWhkci0+YWRkcjIpOwogCQlnb3RvIHJ4X2Ryb3BwZWQ7CiAJfQogLyoKQEAgLTIyNjAsMTEgKzIyNjAsMTEgQEAKIAl9CiAKIAlpZiAobmV0d29yay0+bW9kZSA9PSAwKSB7Ci0JCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJGaWx0ZXJlZCBvdXQgJyVzICgiIE1BQ19GTVQgIiknICIKKwkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkZpbHRlcmVkIG91dCAnJXMgKCVwTSknICIKIAkJCQkgICAgICJuZXR3b3JrLlxuIiwKIAkJCQkgICAgIGVzY2FwZV9lc3NpZChuZXR3b3JrLT5zc2lkLAogCQkJCQkJICBuZXR3b3JrLT5zc2lkX2xlbiksCi0JCQkJICAgICBNQUNfQVJHKG5ldHdvcmstPmJzc2lkKSk7CisJCQkJICAgICBuZXR3b3JrLT5ic3NpZCk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMjQzOSw5ICsyNDM5LDkgQEAKIAogCW1lbXNldCgmbmV0d29yaywgMCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfbmV0d29yaykpOwogCUlFRUU4MDIxMV9ERUJVR19TQ0FOKAotCQkiJyVzJyAoIiBNQUNfRk1UICIpOiAlYyVjJWMlYyAlYyVjJWMlYy0lYyVjJWMlYyAlYyVjJWMlY1xuIiwKKwkJIiclcycgKCVwTSk6ICVjJWMlYyVjICVjJWMlYyVjLSVjJWMlYyVjICVjJWMlYyVjXG4iLAogCQllc2NhcGVfZXNzaWQoaW5mb19lbGVtZW50LT5kYXRhLCBpbmZvX2VsZW1lbnQtPmxlbiksCi0JCU1BQ19BUkcoYmVhY29uLT5oZWFkZXIuYWRkcjMpLAorCQliZWFjb24tPmhlYWRlci5hZGRyMywKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweGYpKSA/ICcxJyA6ICcwJywKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweGUpKSA/ICcxJyA6ICcwJywKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweGQpKSA/ICcxJyA6ICcwJywKQEAgLTI0NjAsMTAgKzI0NjAsMTAgQEAKIAkJKGJlYWNvbi0+Y2FwYWJpbGl0eSAmICgxPDwweDApKSA/ICcxJyA6ICcwJyk7CiAKIAlpZiAoaWVlZTgwMjExX25ldHdvcmtfaW5pdChpZWVlLCBiZWFjb24sICZuZXR3b3JrLCBzdGF0cykpIHsKLQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIkRyb3BwZWQgJyVzJyAoIiBNQUNfRk1UICIpIHZpYSAlcy5cbiIsCisJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJEcm9wcGVkICclcycgKCVwTSkgdmlhICVzLlxuIiwKIAkJCQkgICAgIGVzY2FwZV9lc3NpZChpbmZvX2VsZW1lbnQtPmRhdGEsCiAJCQkJCQkgIGluZm9fZWxlbWVudC0+bGVuKSwKLQkJCQkgICAgIE1BQ19BUkcoYmVhY29uLT5oZWFkZXIuYWRkcjMpLAorCQkJCSAgICAgYmVhY29uLT5oZWFkZXIuYWRkcjMsCiAJCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShiZWFjb24tPmhlYWRlci5mcmFtZV9jdGwpID09CiAJCQkJICAgICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCA/CiAJCQkJICAgICAiUFJPQkUgUkVTUE9OU0UiIDogIkJFQUNPTiIpOwpAQCAtMjU3NCwxMSArMjU3NCwxMSBAQAogCQkJLyogSWYgdGhlcmUgYXJlIG5vIG1vcmUgc2xvdHMsIGV4cGlyZSB0aGUgb2xkZXN0ICovCiAJCQlsaXN0X2RlbCgmb2xkZXN0LT5saXN0KTsKIAkJCXRhcmdldCA9IG9sZGVzdDsKLQkJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJFeHBpcmVkICclcycgKCIgTUFDX0ZNVCAiKSBmcm9tICIKKwkJCUlFRUU4MDIxMV9ERUJVR19TQ0FOKCJFeHBpcmVkICclcycgKCVwTSkgZnJvbSAiCiAJCQkJCSAgICAgIm5ldHdvcmsgbGlzdC5cbiIsCiAJCQkJCSAgICAgZXNjYXBlX2Vzc2lkKHRhcmdldC0+c3NpZCwKIAkJCQkJCQkgIHRhcmdldC0+c3NpZF9sZW4pLAotCQkJCQkgICAgIE1BQ19BUkcodGFyZ2V0LT5ic3NpZCkpOworCQkJCQkgICAgIHRhcmdldC0+YnNzaWQpOwogCQl9IGVsc2UgewogCQkJLyogT3RoZXJ3aXNlIGp1c3QgcHVsbCBmcm9tIHRoZSBmcmVlIGxpc3QgKi8KIAkJCXRhcmdldCA9IGxpc3RfZW50cnkoaWVlZS0+bmV0d29ya19mcmVlX2xpc3QubmV4dCwKQEAgLTI1ODgsMTAgKzI1ODgsMTAgQEAKIAogCiAjaWZkZWYgQ09ORklHX0lFRUU4MDIxMV9ERUJVRwotCQlJRUVFODAyMTFfREVCVUdfU0NBTigiQWRkaW5nICclcycgKCIgTUFDX0ZNVCAiKSB2aWEgJXMuXG4iLAorCQlJRUVFODAyMTFfREVCVUdfU0NBTigiQWRkaW5nICclcycgKCVwTSkgdmlhICVzLlxuIiwKIAkJCQkgICAgIGVzY2FwZV9lc3NpZChuZXR3b3JrLnNzaWQsCiAJCQkJCQkgIG5ldHdvcmsuc3NpZF9sZW4pLAotCQkJCSAgICAgTUFDX0FSRyhuZXR3b3JrLmJzc2lkKSwKKwkJCQkgICAgIG5ldHdvcmsuYnNzaWQsCiAJCQkJICAgICBXTEFOX0ZDX0dFVF9TVFlQRShiZWFjb24tPmhlYWRlci5mcmFtZV9jdGwpID09CiAJCQkJICAgICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCA/CiAJCQkJICAgICAiUFJPQkUgUkVTUE9OU0UiIDogIkJFQUNPTiIpOwpAQCAtMjYwMSwxMCArMjYwMSwxMCBAQAogCQlpZihpZWVlLT5zb2Z0bWFjX2ZlYXR1cmVzICYgSUVFRV9TT0ZUTUFDX0FTU09DSUFURSkKIAkJCWllZWU4MDIxMV9zb2Z0bWFjX25ld19uZXQoaWVlZSwmbmV0d29yayk7CiAJfSBlbHNlIHsKLQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oIlVwZGF0aW5nICclcycgKCIgTUFDX0ZNVCAiKSB2aWEgJXMuXG4iLAorCQlJRUVFODAyMTFfREVCVUdfU0NBTigiVXBkYXRpbmcgJyVzJyAoJXBNKSB2aWEgJXMuXG4iLAogCQkJCSAgICAgZXNjYXBlX2Vzc2lkKHRhcmdldC0+c3NpZCwKIAkJCQkJCSAgdGFyZ2V0LT5zc2lkX2xlbiksCi0JCQkJICAgICBNQUNfQVJHKHRhcmdldC0+YnNzaWQpLAorCQkJCSAgICAgdGFyZ2V0LT5ic3NpZCwKIAkJCQkgICAgIFdMQU5fRkNfR0VUX1NUWVBFKGJlYWNvbi0+aGVhZGVyLmZyYW1lX2N0bCkgPT0KIAkJCQkgICAgIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQID8KIAkJCQkgICAgICJQUk9CRSBSRVNQT05TRSIgOiAiQkVBQ09OIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV9zb2Z0bWFjLmMKaW5kZXggOGE4NmU5My4uMjdkOTI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfc29mdG1hYy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3NvZnRtYWMuYwpAQCAtMTczMSw3ICsxNzMxLDcgQEAKIAkJaWVlZTgwMjExX3Jlc3BfdG9fYXNzb2NfcnEoaWVlZSwgZGVzdCk7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyJOZXcgY2xpZW50IGFzc29jaWF0ZWQ6ICJNQUNfRk1UIlxuIiwgTUFDX0FSRyhkZXN0KSk7CisJcHJpbnRrKEtFUk5fSU5GTyJOZXcgY2xpZW50IGFzc29jaWF0ZWQ6ICVwTVxuIiwgZGVzdCk7CiAJLy9GSVhNRQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfdHguYwppbmRleCBiMjljMzZiLi40ODUzN2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV90eC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3R4LmMKQEAgLTIwMCw4ICsyMDAsOCBAQAogCQloZWFkZXIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgZnJhZy0+ZGF0YTsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUS0lQIGNvdW50ZXJtZWFzdXJlczogZHJvcHBlZCAiCi0JCQkgICAgICAgIlRYIHBhY2tldCB0byAiIE1BQ19GTVQgIlxuIiwKLQkJCSAgICAgICBpZWVlLT5kZXYtPm5hbWUsIE1BQ19BUkcoaGVhZGVyLT5hZGRyMSkpOworCQkJICAgICAgICJUWCBwYWNrZXQgdG8gJXBNXG4iLAorCQkJICAgICAgIGllZWUtPmRldi0+bmFtZSwgaGVhZGVyLT5hZGRyMSk7CiAJCX0KIAkJcmV0dXJuIC0xOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL2llZWU4MDIxMV93eC5jCmluZGV4IDVmMTJkNjIuLmMwYjJjMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvaWVlZTgwMjExX3d4LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9pZWVlODAyMTFfd3guYwpAQCAtMjg5LDEwICsyODksMTAgQEAKIAkJZWxzZQogCQkJSUVFRTgwMjExX0RFQlVHX1NDQU4oCiAJCQkJIk5vdCBzaG93aW5nIG5ldHdvcmsgJyVzICgiCi0JCQkJTUFDX0ZNVCAiKScgZHVlIHRvIGFnZSAoJWx1bXMpLlxuIiwKKwkJCQkiJXBNKScgZHVlIHRvIGFnZSAoJWx1bXMpLlxuIiwKIAkJCQllc2NhcGVfZXNzaWQobmV0d29yay0+c3NpZCwKIAkJCQkJICAgICBuZXR3b3JrLT5zc2lkX2xlbiksCi0JCQkJTUFDX0FSRyhuZXR3b3JrLT5ic3NpZCksCisJCQkJbmV0d29yay0+YnNzaWQsCiAJCQkJKGppZmZpZXMgLSBuZXR3b3JrLT5sYXN0X3NjYW5uZWQpIC8gKEhaIC8gMTAwKSk7CiAJfQogCkBAIC03MTgsNyArNzE4LDcgQEAKIAl9IGVsc2UKIAkJaWR4ID0gaWVlZS0+dHhfa2V5aWR4OwogCi0JaWYgKCFleHQtPmV4dF9mbGFncyAmIElXX0VOQ09ERV9FWFRfR1JPVVBfS0VZICYmCisJaWYgKCEoZXh0LT5leHRfZmxhZ3MgJiBJV19FTkNPREVfRVhUX0dST1VQX0tFWSkgJiYKIAkgICAgZXh0LT5hbGcgIT0gSVdfRU5DT0RFX0FMR19XRVApCiAJCWlmIChpZHggIT0gMCB8fCBpZWVlLT5pd19tb2RlICE9IElXX01PREVfSU5GUkEpCiAJCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9CQVByb2MuYwppbmRleCA1MTJhNTdhLi4yN2QwODNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfQkFQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X0JBUHJvYy5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIAl1MTYgdG1wID0gMDsKIAl1MTYgbGVuID0gaWVlZS0+dHhfaGVhZHJvb20gKyA5OwogCS8vY2F0ZWdvcnkoMSkgKyBhY3Rpb24gZmllbGQoMSkgKyBEaWFsb2cgVG9rZW4oMSkgKyBCQSBQYXJhbWV0ZXIgU2V0KDIpICsgIEJBIFRpbWVvdXQgVmFsdWUoMikgKyAgQkEgU3RhcnQgU2VxQ3RybCgyKShvciBTdGF0dXNDb2RlKDIpKQotCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFJBQ0UgfCBJRUVFODAyMTFfRExfQkEsICI9PT09PT09PT4lcygpLCBmcmFtZSglZCkgc2VudGQgdG86Ik1BQ19GTVQiLCBpZWVlLT5kZXY6JXBcbiIsIF9fRlVOQ1RJT05fXywgdHlwZSwgTUFDX0FSRyhEc3QpLCBpZWVlLT5kZXYpOworCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFJBQ0UgfCBJRUVFODAyMTFfRExfQkEsICI9PT09PT09PT4lcygpLCBmcmFtZSglZCkgc2VudGQgdG86JXBNLCBpZWVlLT5kZXY6JXBcbiIsIF9fRlVOQ1RJT05fXywgdHlwZSwgRHN0LCBpZWVlLT5kZXYpOwogCWlmIChwQkEgPT0gTlVMTHx8aWVlZSA9PSBOVUxMKQogCXsKIAkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9FUlIsICJwQkEoJXApIGlzIE5VTEwgb3IgaWVlZSglcCkgaXMgTlVMTFxuIiwgcEJBLCBpZWVlKTsKQEAgLTIwMSw3ICsyMDEsNyBAQAogCXUxNiBsZW4gPSA2ICsgaWVlZS0+dHhfaGVhZHJvb207CiAKIAlpZiAobmV0X3JhdGVsaW1pdCgpKQotCUlFRUU4MDIxMV9ERUJVRyhJRUVFODAyMTFfRExfVFJBQ0UgfCBJRUVFODAyMTFfRExfQkEsICI9PT09PT09PT4lcygpLCBSZWFzb25Db2RlKCVkKSBzZW50ZCB0bzoiTUFDX0ZNVCJcbiIsIF9fRlVOQ1RJT05fXywgUmVhc29uQ29kZSwgTUFDX0FSRyhkc3QpKTsKKwlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RSQUNFIHwgSUVFRTgwMjExX0RMX0JBLCAiPT09PT09PT0+JXMoKSwgUmVhc29uQ29kZSglZCkgc2VudGQgdG86JXBNXG4iLCBfX0ZVTkNUSU9OX18sIFJlYXNvbkNvZGUsIGRzdCk7CiAKIAltZW1zZXQoJkRlbGJhUGFyYW1TZXQsIDAsIDIpOwogCkBAIC0zNTUsNyArMzU1LDcgQEAKIAlwQmFUaW1lb3V0VmFsID0gKHUxNiopKHRhZyArIDUpOwogCXBCYVN0YXJ0U2VxQ3RybCA9IChQU0VRVUVOQ0VfQ09OVFJPTCkocmVxICsgNyk7CiAKLQlwcmludGsoIj09PT09PT09PT09PT09PT09PT09PnJ4IEFEREJBUkVRIGZyb20gOiJNQUNfRk1UIlxuIiwgTUFDX0FSRyhkc3QpKTsKKwlwcmludGsoIj09PT09PT09PT09PT09PT09PT09PnJ4IEFEREJBUkVRIGZyb20gOiVwTVxuIiwgZHN0KTsKIC8vc29tZSBvdGhlciBjYXBhYmlsaXR5IGlzIG5vdCByZWFkeSBub3cuCiAJaWYoCShpZWVlLT5jdXJyZW50X25ldHdvcmsucW9zX2RhdGEuYWN0aXZlID09IDApIHx8CiAJCShpZWVlLT5wSFRJbmZvLT5iQ3VycmVudEhUU3VwcG9ydCA9PSBmYWxzZSkpIC8vfHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYyBiL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9IVFByb2MuYwppbmRleCAyYzRlYjM4Li41MGY0ZjU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfSFRQcm9jLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X0hUUHJvYy5jCkBAIC00MSw3ICs0MSw3IEBACiAvL3N0YXRpYyB1OCBETElOS19BVEhFUk9TWzNdID0gezB4MDAsIDB4MWMsIDB4ZjB9Owogc3RhdGljIHU4IENJU0NPX0JST0FEQ09NWzNdID0gezB4MDAsIDB4MTcsIDB4OTR9OwogCi0vLyAyMDA4LzA0LzAxIE1IIEZvciBDaXNjbyBHIG1vZGUgUlggVFAgV2UgbmVlZCB0byBjaGFuZ2UgRlcgZHVyYXRpb24uIFNob3VkIHdlIHB1dCB0aGUKKy8vIDIwMDgvMDQvMDEgTUggRm9yIENpc2NvIEcgbW9kZSBSWCBUUCBXZSBuZWVkIHRvIGNoYW5nZSBGVyBkdXJhdGlvbi4gU2hvdWxkIHdlIHB1dCB0aGUKIC8vIGNvZGUgaW4gb3RoZXIgcGxhY2U/PwogLy9zdGF0aWMgdTggV0lGSV9DSVNDT19HX0FQWzNdID0gezB4MDAsIDB4NDAsIDB4OTZ9OwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMzQyLDcgKzEzNDIsNyBAQAogCiAJCXBIVEluZm8tPkN1cnJlbnRBTVBEVUZhY3RvciA9IHBIVEluZm8tPkFNUERVX0ZhY3RvcjsKIAotCQlwSFRJbmZvLT5DdXJyZW50TVBEVURlbnNpdHkgPSBwSFRJbmZvLT5DdXJyZW50TVBEVURlbnNpdHk7CisJCXBIVEluZm8tPkN1cnJlbnRNUERVRGVuc2l0eSA9IHBIVEluZm8tPk1QRFVfRGVuc2l0eTsKIAogCQkvLyBTZXQgQldPcE1vZGUgcmVnaXN0ZXIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X1RTUHJvYy5jIGIvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L2llZWU4MDIxMS9ydGw4MTl4X1RTUHJvYy5jCmluZGV4IDUzNzNkNTYuLmQxMjc1ZTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9ydGw4MTkydS9pZWVlODAyMTEvcnRsODE5eF9UU1Byb2MuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvaWVlZTgwMjExL3J0bDgxOXhfVFNQcm9jLmMKQEAgLTI5MCw3ICsyOTAsNyBAQAogCQlpZihzZWFyY2hfZGlyW2Rpcl0gPT1mYWxzZSApCiAJCQljb250aW51ZTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShwUmV0LCBwc2VhcmNoX2xpc3QsIExpc3QpewotCS8vCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RTLCAiQUREOiJNQUNfRk1UIiwgVElEOiVkLCBkaXI6JWRcbiIsIE1BQ19BUkcocFJldC0+QWRkciksIHBSZXQtPlRTcGVjLmYuVFNJbmZvLmZpZWxkLnVjVFNJRCwgcFJldC0+VFNwZWMuZi5UU0luZm8uZmllbGQudWNEaXJlY3Rpb24pOworCS8vCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RTLCAiQUREOiVwTSwgVElEOiVkLCBkaXI6JWRcbiIsIHBSZXQtPkFkZHIsIHBSZXQtPlRTcGVjLmYuVFNJbmZvLmZpZWxkLnVjVFNJRCwgcFJldC0+VFNwZWMuZi5UU0luZm8uZmllbGQudWNEaXJlY3Rpb24pOwogCQkJaWYgKG1lbWNtcChwUmV0LT5BZGRyLCBBZGRyLCA2KSA9PSAwKQogCQkJCWlmIChwUmV0LT5UU3BlYy5mLlRTSW5mby5maWVsZC51Y1RTSUQgPT0gVElEKQogCQkJCQlpZihwUmV0LT5UU3BlYy5mLlRTSW5mby5maWVsZC51Y0RpcmVjdGlvbiA9PSBkaXIpCkBAIC00NDUsNyArNDQ1LDcgQEAKIAkJCQkJUmVzZXRSeFRzRW50cnkodG1wKTsKIAkJCQl9CiAKLQkJCQlJRUVFODAyMTFfREVCVUcoSUVFRTgwMjExX0RMX1RTLCAidG8gaW5pdCBjdXJyZW50IFRTLCBVUDolZCwgRGlyOiVkLCBhZGRyOiJNQUNfRk1UIlxuIiwgVVAsIERpciwgTUFDX0FSRyhBZGRyKSk7CisJCQkJSUVFRTgwMjExX0RFQlVHKElFRUU4MDIxMV9ETF9UUywgInRvIGluaXQgY3VycmVudCBUUywgVVA6JWQsIERpcjolZCwgYWRkcjolcE1cbiIsIFVQLCBEaXIsIEFkZHIpOwogCQkJCS8vIFByZXBhcmUgVFMgSW5mbyByZWxlYXRlZCBmaWVsZAogCQkJCXBUU0luZm8tPmZpZWxkLnVjVHJhZmZpY1R5cGUgPSAwOwkJCS8vIFRyYWZmaWMgdHlwZTogV01NIGlzIHJlc2VydmVkIGluIHRoaXMgZmllbGQKIAkJCQlwVFNJbmZvLT5maWVsZC51Y1RTSUQgPSBVUDsJCQkvLyBUU0lECkBAIC01MzEsNyArNTMxLDcgQEAKIHZvaWQgUmVtb3ZlUGVlclRTKHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlKiBpZWVlLCB1OCogQWRkcikKIHsKIAlQVFNfQ09NTU9OX0lORk8JcFRTLCBwVG1wVFM7Ci0JcHJpbnRrKCI9PT09PT09PT09PT5SZW1vdmVQZWVyVFMsIk1BQ19GTVQiXG4iLCBNQUNfQVJHKEFkZHIpKTsKKwlwcmludGsoIj09PT09PT09PT09PlJlbW92ZVBlZXJUUywlcE1cbiIsIEFkZHIpOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwVFMsIHBUbXBUUywgJmllZWUtPlR4X1RTX1BlbmRpbmdfTGlzdCwgTGlzdCkKIAl7CiAJCWlmIChtZW1jbXAocFRTLT5BZGRyLCBBZGRyLCA2KSA9PSAwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3J0bDgxOTJ1L3I4MTkyVV9jb3JlLmMgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX2NvcmUuYwppbmRleCBhZGFkZTEzLi5mMWUwODViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX2NvcmUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvcnRsODE5MnUvcjgxOTJVX2NvcmUuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAjZGVmaW5lIFRPVEFMX0NBTV9FTlRSWSAzMgogI2RlZmluZSBDQU1fQ09OVEVOVF9DT1VOVCA4CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBydGw4MTkyX3VzYl9pZF90YmxbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBydGw4MTkyX3VzYl9pZF90YmxbXSA9IHsKIAkvKiBSZWFsdGVrICovCiAJe1VTQl9ERVZJQ0UoMHgwYmRhLCAweDgxOTIpfSwKIAl7VVNCX0RFVklDRSgweDBiZGEsIDB4ODcwOSl9LApAQCAtMjcxOSw3ICsyNzE5LDcgQEAKIAkJCXdpcmVsZXNzX21vZGUgPSBXSVJFTEVTU19NT0RFX0I7CiAJCX0KIAl9Ci0jaWZkZWYgVE9fRE9fTElTVCAvLy8vIFRPRE86IHRoaXMgZnVuY3Rpb24gZG9lc24ndCB3b3JrIHdlbGwgYXQgdGhpcyB0aW1lLCB3ZSBzaG91ZCB3YWl0IGZvciBGUEdBCisjaWZkZWYgVE9fRE9fTElTVCAvLy8vIFRPRE86IHRoaXMgZnVuY3Rpb24gZG9lc24ndCB3b3JrIHdlbGwgYXQgdGhpcyB0aW1lLCB3ZSBzaG91bGQgd2FpdCBmb3IgRlBHQQogCUFjdFVwZGF0ZUNoYW5uZWxBY2Nlc3NTZXR0aW5nKCBwQWRhcHRlciwgcEhhbERhdGEtPkN1cnJlbnRXaXJlbGVzc01vZGUsICZwQWRhcHRlci0+TWdudEluZm8uSW5mbzgxODUuQ2hhbm5lbEFjY2Vzc1NldHRpbmcgKTsKICNlbmRpZgogCXByaXYtPmllZWU4MDIxMS0+bW9kZSA9IHdpcmVsZXNzX21vZGU7CkBAIC0yOTc2LDcgKzI5NzYsNyBAQAogCQltZW1jcHkoZGV2LT5kZXZfYWRkciwgYk1hY19UbXBfQWRkciwgNik7CiAJCS8vc2hvdWxkIEkgc2V0IElEUjAgaGVyZT8KIAl9Ci0JUlRfVFJBQ0UoQ09NUF9FUFJPTSwgIk1BQyBhZGRyOiJNQUNfRk1UIlxuIiwgTUFDX0FSRyhkZXYtPmRldl9hZGRyKSk7CisJUlRfVFJBQ0UoQ09NUF9FUFJPTSwgIk1BQyBhZGRyOiVwTVxuIiwgZGV2LT5kZXZfYWRkcik7CiAJcHJpdi0+cmZfdHlwZSA9IFJUTDgxOVhfREVGQVVMVF9SRl9UWVBFOyAvL2RlZmF1bHQgMVQyUgogCXByaXYtPnJmX2NoaXAgPSBSRl84MjU2OwogCkBAIC02MDM3LDcgKzYwMzcsNyBAQAogCWlmIChFbnRyeU5vID49IFRPVEFMX0NBTV9FTlRSWSkKIAkJUlRfVFJBQ0UoQ09NUF9FUlIsICJjYW0gZW50cnkgZXhjZWVkcyBpbiBzZXRLZXkoKVxuIik7CiAKLQlSVF9UUkFDRShDT01QX1NFQywgIj09PT0+dG8gc2V0S2V5KCksIGRldjolcCwgRW50cnlObzolZCwgS2V5SW5kZXg6JWQsIEtleVR5cGU6JWQsIE1hY0FkZHIiTUFDX0ZNVCJcbiIsIGRldixFbnRyeU5vLCBLZXlJbmRleCwgS2V5VHlwZSwgTUFDX0FSRyhNYWNBZGRyKSk7CisJUlRfVFJBQ0UoQ09NUF9TRUMsICI9PT09PnRvIHNldEtleSgpLCBkZXY6JXAsIEVudHJ5Tm86JWQsIEtleUluZGV4OiVkLCBLZXlUeXBlOiVkLCBNYWNBZGRyJXBNXG4iLCBkZXYsRW50cnlObywgS2V5SW5kZXgsIEtleVR5cGUsIE1hY0FkZHIpOwogCiAJaWYgKERlZmF1bHRLZXkpCiAJCXVzQ29uZmlnIHw9IEJJVDE1IHwgKEtleVR5cGU8PDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NhbXN1bmctbGFwdG9wL3NhbXN1bmctbGFwdG9wLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2Ftc3VuZy1sYXB0b3Avc2Ftc3VuZy1sYXB0b3AuYwppbmRleCA0ODc3MTM4Li5kZDdlYTRjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NhbXN1bmctbGFwdG9wL3NhbXN1bmctbGFwdG9wLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NhbXN1bmctbGFwdG9wL3NhbXN1bmctbGFwdG9wLmMKQEAgLTk5LDcgKzk5LDggQEAKIAogc3RhdGljIGludCBmb3JjZTsKIG1vZHVsZV9wYXJhbShmb3JjZSwgYm9vbCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGZvcmNlLCAiRGlzYWJsZSB0aGUgRE1JIGNoZWNrIGFuZCBmb3JjZXMgdGhlIGRyaXZlciB0byBiZSBsb2FkZWQiKTsKK01PRFVMRV9QQVJNX0RFU0MoZm9yY2UsCisJCSJEaXNhYmxlIHRoZSBETUkgY2hlY2sgYW5kIGZvcmNlcyB0aGUgZHJpdmVyIHRvIGJlIGxvYWRlZCIpOwogCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CkBAIC0zNzAsNyArMzcxLDggQEAKIAl7CiAJCS5pZGVudCA9ICJOMTI4IiwKIAkJLm1hdGNoZXMgPSB7Ci0JCQlETUlfTUFUQ0goRE1JX1NZU19WRU5ET1IsICJTQU1TVU5HIEVMRUNUUk9OSUNTIENPLiwgTFRELiIpLAorCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLAorCQkJCQkiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKIAkJCURNSV9NQVRDSChETUlfUFJPRFVDVF9OQU1FLCAiTjEyOCIpLAogCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiTjEyOCIpLAogCQl9LApAQCAtMzc5LDcgKzM4MSw4IEBACiAJewogCQkuaWRlbnQgPSAiTjEzMCIsCiAJCS5tYXRjaGVzID0gewotCQkJRE1JX01BVENIKERNSV9TWVNfVkVORE9SLCAiU0FNU1VORyBFTEVDVFJPTklDUyBDTy4sIExURC4iKSwKKwkJCURNSV9NQVRDSChETUlfU1lTX1ZFTkRPUiwKKwkJCQkJIlNBTVNVTkcgRUxFQ1RST05JQ1MgQ08uLCBMVEQuIiksCiAJCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfTkFNRSwgIk4xMzAiKSwKIAkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIk4xMzAiKSwKIAkJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zZXAvc2VwX2RyaXZlci5jIGIvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyLmMKaW5kZXggZTdiYzllYy4uMjY1ZGU3OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NlcC9zZXBfZHJpdmVyLmMKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KQEAgLTE4Miw4ICsxODMsOCBAQAogc3RhdGljIGludCBzZXBfbG9hZF9maXJtd2FyZShzdHJ1Y3Qgc2VwX2RldmljZSAqc2VwKQogewogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7Ci0JY2hhciAqY2FjaGVfbmFtZSA9ICJjYWNoZS5pbWFnZS5iaW4iOwotCWNoYXIgKnJlc19uYW1lID0gInJlc2lkZW50LmltYWdlLmJpbiI7CisJY2hhciAqY2FjaGVfbmFtZSA9ICJzZXAvY2FjaGUuaW1hZ2UuYmluIjsKKwljaGFyICpyZXNfbmFtZSA9ICJzZXAvcmVzaWRlbnQuaW1hZ2UuYmluIjsKIAlpbnQgZXJyb3I7CiAKIAllZGJnKCJTRVAgRHJpdmVyOnJhcl92aXJ0dWFsIGlzICVwXG4iLCBzZXAtPnJhcl9hZGRyKTsKQEAgLTIyMiw2ICsyMjMsOSBAQAogCXJldHVybiAwOwogfQogCitNT0RVTEVfRklSTVdBUkUoInNlcC9jYWNoZS5pbWFnZS5iaW4iKTsKK01PRFVMRV9GSVJNV0FSRSgic2VwL3Jlc2lkZW50LmltYWdlLmJpbiIpOworCiAvKioKICAqCXNlcF9tYXBfYW5kX2FsbG9jX3NoYXJlZF9hcmVhCS0JYWxsb2NhdGUgc2hhcmVkIGJsb2NrCiAgKglAc2VwOiBzZWN1cml0eSBwcm9jZXNzb3IKQEAgLTI3Myw4ICsyNzcsOCBAQAogCQkJCQkJdm9pZCAqdmlydF9hZGRyZXNzKQogewogCWRtYV9hZGRyX3QgcGEgPSBzZXAtPnNoYXJlZF9idXMgKyAodmlydF9hZGRyZXNzIC0gc2VwLT5zaGFyZWRfYWRkcik7Ci0JZWRiZygic2VwOiB2aXJ0IHRvIGJ1cyBiICUwOGxseCB2ICVwXG4iLAotCQkodW5zaWduZWQgbG9uZyBsb25nKXBhLCB2aXJ0X2FkZHJlc3MpOworCWVkYmcoInNlcDogdmlydCB0byBidXMgYiAlMDhsbHggdiAlcFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGEsCisJCQkJCQkJCXZpcnRfYWRkcmVzcyk7CiAJcmV0dXJuIHBhOwogfQogCkBAIC0zODAsOCArMzg0LDcgQEAKIAkgICBzaGFyZWQgYXJlYSAqLwogCWlmICgodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSA+IFNFUF9EUklWRVJfTU1NQVBfQVJFQV9TSVpFKSB7CiAJCWVkYmcoIlNFUCBEcml2ZXIgbW1hcCByZXF1ZXN0ZWQgc2l6ZSBpcyBtb3JlIHRoYW4gYWxsb3dlZFxuIik7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlNFUCBEcml2ZXIgbW1hcCByZXF1ZXN0ZWQgc2l6ZSBpcyBtb3JlIFwKLQkJCXRoYW4gYWxsb3dlZFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNFUCBEcml2ZXIgbW1hcCByZXF1ZXN0ZWQgc2l6ZSBpcyBtb3JlIHRoYW4gYWxsb3dlZFxuIik7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNFUCBEcml2ZXIgdm1hLT52bV9lbmQgaXMgJTA4bHhcbiIsIHZtYS0+dm1fZW5kKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0VQIERyaXZlciB2bWEtPnZtX2VuZCBpcyAlMDhseFxuIiwgdm1hLT52bV9zdGFydCk7CiAJCXJldHVybiAtRUFHQUlOOwpAQCAtOTQxLDggKzk0NCw5IEBACiAJCQlkYmcoImRhdGFfc2l6ZSBpcyAlbHVcbiIsIGRhdGFfc2l6ZSk7CiAJCQl3aGlsZSAoMSk7CiAJCX0KLQkJZWRiZygibGxpX2FycmF5WyVsdV0ucGh5c2ljYWxfYWRkcmVzcyBpcyAlMDhseCwgXAotCQlsbGlfYXJyYXlbJWx1XS5ibG9ja19zaXplIGlzICVsdVxuIiwgY291bnQsIGxsaV9hcnJheVtjb3VudF0ucGh5c2ljYWxfYWRkcmVzcywgY291bnQsIGxsaV9hcnJheVtjb3VudF0uYmxvY2tfc2l6ZSk7CisJCWVkYmcoImxsaV9hcnJheVslbHVdLnBoeXNpY2FsX2FkZHJlc3MgaXMgJTA4bHgsIGxsaV9hcnJheVslbHVdLmJsb2NrX3NpemUgaXMgJWx1XG4iLAorCQkgICAgIGNvdW50LCBsbGlfYXJyYXlbY291bnRdLnBoeXNpY2FsX2FkZHJlc3MsCisJCSAgICAgY291bnQsIGxsaV9hcnJheVtjb3VudF0uYmxvY2tfc2l6ZSk7CiAJfQogCiAJLyogc2V0IG91dHB1dCBwYXJhbXMgKi8KQEAgLTE3NzEsNyArMTc3NSw3IEBACiBzdGF0aWMgaW50IHNlcF9jcmVhdGVfZmxvd19kbWFfdGFibGVzX2hhbmRsZXIoc3RydWN0IHNlcF9kZXZpY2UgKnNlcCwKIAkJCQkJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlpbnQgZXJyb3I7CisJaW50IGVycm9yID0gLUVOT0VOVDsKIAlzdHJ1Y3Qgc2VwX2RyaXZlcl9idWlsZF9mbG93X3RhYmxlX3QgY29tbWFuZF9hcmdzOwogCS8qIGZpcnN0IHRhYmxlIC0gb3V0cHV0ICovCiAJc3RydWN0IHNlcF9sbGlfZW50cnlfdCBmaXJzdF90YWJsZV9kYXRhOwpAQCAtMjIzMiw3ICsyMjM2LDcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBpbnQgc2VwX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBsb25nIHNlcF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaW50IGVycm9yID0gMDsKIAlzdHJ1Y3Qgc2VwX2RldmljZSAqc2VwID0gZmlscC0+cHJpdmF0ZV9kYXRhOwpAQCAtMjU4Niw3ICsyNTkwLDcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzZXBfcGNpX2lkX3RibFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHNlcF9wY2lfaWRfdGJsW10gPSB7CiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgMHgwODBjKX0sCiAJezB9CiB9OwpAQCAtMjYwNyw3ICsyNjExLDcgQEAKIC8qIHRoZSBmaWxlcyBvcGVyYXRpb25zIHN0cnVjdHVyZSBvZiB0aGUgZHJpdmVyICovCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzZXBfZmlsZV9vcGVyYXRpb25zID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5pb2N0bCA9IHNlcF9pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwgPSBzZXBfaW9jdGwsCiAJLnBvbGwgPSBzZXBfcG9sbCwKIAkub3BlbiA9IHNlcF9vcGVuLAogCS5yZWxlYXNlID0gc2VwX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiMi9zZXJxdF91c2IyLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2VycXRfdXNiMi9zZXJxdF91c2IyLmMKaW5kZXggMDYwZTlkZS4uNDRmMmQ0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NlcnF0X3VzYjIvc2VycXRfdXNiMi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zZXJxdF91c2IyL3NlcnF0X3VzYjIuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAjZGVmaW5lIE1PREVNX0NUUkwgICAgICAgICAgMHg0MAogI2RlZmluZSBSUzIzMl9NT0RFICAgICAgICAgIDB4MDAKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHNlcnF0X2lkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgc2VycXRfaWRfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX1FVQVRFQ0gsIFFVQVRFQ0hfU1NVMTAwKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9RVUFURUNILCBRVUFURUNIX1NTVTIwMCl9LAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfUVVBVEVDSCwgUVVBVEVDSF9EU1UxMDApfSwKQEAgLTEyNzcsNyArMTI3Nyw3IEBACiAJaWYgKGNmbGFnICYgQ1NUT1BCKQogCQluZXdfTENSIHw9IFNFUklBTF9UV09fU1RPUEI7CiAJZWxzZQotCQluZXdfTENSIHw9IFNFUklBTF9UV09fU1RPUEI7CisJCW5ld19MQ1IgfD0gU0VSSUFMX09ORV9TVE9QQjsKIAogCWRiZygiJXMgLSA0XG4iLCBfX2Z1bmNfXyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWMuaCBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWMuaAppbmRleCBjY2Y3NjI1Li5lYjNhNjE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpYy5oCkBAIC01MjcsMTUgKzUyNyw2IEBACiAgICAgKGxhcmdlc3RhdCkgKz0gKChuZXdzdGF0KSAtIChvbGRzdGF0KSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogfQogCi0jZGVmaW5lIEVUSEVSX0VRX0FERFIoX0FkZHJBLCBfQWRkckIsIF9SZXN1bHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAoteyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBfUmVzdWx0ID0gdHJ1ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKCoodTMyICopKF9BZGRyQSkgIT0gKih1MzIgKikoX0FkZHJCKSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlfUmVzdWx0ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoKih1MTYgKikoJigoX0FkZHJBKVs0XSkpICE9ICoodTE2ICopKCYoKF9BZGRyQilbNF0pKSkgICAgICAgIFwKLQlfUmVzdWx0ID0gZmFsc2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQogI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfSUE2NCkKICNkZWZpbmUgICBTTElDX0dFVF9BRERSX0xPVyhfYWRkcikgICh1MzIpKCh1NjQpKF9hZGRyKSAmIFwKIAkweDAwMDAwMDAwRkZGRkZGRkYpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljb3NzLmMgYi9kcml2ZXJzL3N0YWdpbmcvc2xpY29zcy9zbGljb3NzLmMKaW5kZXggNWIxOTFhZi4uN2RhZWNlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NsaWNvc3Mvc2xpY29zcy5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbGljb3NzL3NsaWNvc3MuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiBzdGF0aWMgaW50IHNsaWNfZW50cnlfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgc2xpY19lbnRyeV9oYWx0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIGludCBzbGljX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpOwotc3RhdGljIGludCBzbGljX3htaXRfc3RhcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgbmV0ZGV2X3R4X3Qgc2xpY194bWl0X3N0YXJ0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgc2xpY194bWl0X2ZhaWwoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICB2b2lkICpjbWQsIHUzMiBza2J0eXBlLCB1MzIgc3RhdHVzKTsKIHN0YXRpYyB2b2lkIHNsaWNfY29uZmlnX3BjaShzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KTsKQEAgLTE5NCwxNCArMTk0LDEwIEBACiBtb2R1bGVfcGFyYW0oaW50YWdnX2RlbGF5LCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhpbnRhZ2dfZGVsYXksICJ1U2VjIEludGVycnVwdCBBZ2dyZWdhdGlvbiBEZWxheSIpOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgc2xpY19wY2lfdGJsW10gX19kZXZpbml0ZGF0YSA9IHsKLQl7UENJX1ZFTkRPUl9JRF9BTEFDUklURUNILAotCSBTTElDXzFHQl9ERVZJQ0VfSUQsCi0JIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKLQl7UENJX1ZFTkRPUl9JRF9BTEFDUklURUNILAotCSBTTElDXzJHQl9ERVZJQ0VfSUQsCi0JIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKLQl7MCx9CitzdGF0aWMgREVGSU5FX1BDSV9ERVZJQ0VfVEFCTEUoc2xpY19wY2lfdGJsKSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9BTEFDUklURUNILCBTTElDXzFHQl9ERVZJQ0VfSUQpIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQUxBQ1JJVEVDSCwgU0xJQ18yR0JfREVWSUNFX0lEKSB9LAorCXsgMCB9CiB9OwogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgc2xpY19wY2lfdGJsKTsKQEAgLTI5Miw3ICsyODgsNyBAQAogewogCXVzaG9ydCBpbmRleDsKIAlzdHJ1Y3Qgc2xpY19oYW5kbGUgKnBzbGljX2hhbmRsZTsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKW5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCiAvKglhZGFwdGVyLT5wY2lkZXYgPSBwY2lkZXY7Ki8KIAlhZGFwdGVyLT52ZW5kaWQgPSBwY2lfdGJsX2VudHJ5LT52ZW5kb3I7CkBAIC0zNzAsNiArMzY2LDcgQEAKIAl1bG9uZyBtbWlvX3N0YXJ0ID0gMDsKIAl1bG9uZyBtbWlvX2xlbiA9IDA7CiAJc3RydWN0IHNsaWNjYXJkICpjYXJkID0gTlVMTDsKKwlpbnQgcGNpX3VzaW5nX2RhYyA9IDA7CiAKIAlzbGljX2dsb2JhbC5keW5hbWljX2ludGFnZyA9IGR5bmFtaWNfaW50YWdnOwogCkBAIC0zODMsMTYgKzM4MCwyNiBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXNcbiIsIHNsaWNfcHJvY192ZXJzaW9uKTsKIAl9CiAKLQllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BX0JJVF9NQVNLKDY0KSk7Ci0JaWYgKGVycikgewotCQllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BX0JJVF9NQVNLKDMyKSk7Ci0JCWlmIChlcnIpCisJaWYgKCFwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BX0JJVF9NQVNLKDY0KSkpIHsKKwkJcGNpX3VzaW5nX2RhYyA9IDE7CisJCWlmIChwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2socGNpZGV2LCBETUFfQklUX01BU0soNjQpKSkgeworCQkJZGV2X2VycigmcGNpZGV2LT5kZXYsICJ1bmFibGUgdG8gb2J0YWluIDY0LWJpdCBETUEgZm9yICIKKwkJCQkJImNvbnNpc3RlbnQgYWxsb2NhdGlvbnNcbiIpOwogCQkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGNpOworCQl9CisJfSBlbHNlIGlmIChwY2lfc2V0X2RtYV9tYXNrKHBjaWRldiwgRE1BX0JJVF9NQVNLKDMyKSkpIHsKKwkJcGNpX3VzaW5nX2RhYyA9IDA7CisJCXBjaV9zZXRfY29uc2lzdGVudF9kbWFfbWFzayhwY2lkZXYsIERNQV9CSVRfTUFTSygzMikpOworCX0gZWxzZSB7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAibm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uXG4iKTsKKwkJZ290byBlcnJfb3V0X2Rpc2FibGVfcGNpOwogCX0KIAogCWVyciA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGNpZGV2LCBEUlZfTkFNRSk7Ci0JaWYgKGVycikKKwlpZiAoZXJyKSB7CisJCWRldl9lcnIoJnBjaWRldi0+ZGV2LCAiY2FuJ3Qgb2J0YWluIFBDSSByZXNvdXJjZXNcbiIpOwogCQlnb3RvIGVycl9vdXRfZGlzYWJsZV9wY2k7CisJfQogCiAJcGNpX3NldF9tYXN0ZXIocGNpZGV2KTsKIApAQCAtNDA4LDYgKzQxNSw4IEBACiAJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CiAJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OwogCWFkYXB0ZXItPnBjaWRldiA9IHBjaWRldjsKKwlpZiAocGNpX3VzaW5nX2RhYykKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX0hJR0hETUE7CiAKIAltbWlvX3N0YXJ0ID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBjaWRldiwgMCk7CiAJbW1pb19sZW4gPSBwY2lfcmVzb3VyY2VfbGVuKHBjaWRldiwgMCk7CkBAIC00ODQsNyArNDkzLDcgQEAKIAogc3RhdGljIGludCBzbGljX2VudHJ5X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQgPSBhZGFwdGVyLT5jYXJkOwogCXUzMiBsb2NrZWQgPSAwOwogCWludCBzdGF0dXM7CkBAIC01MzQsNyArNTQzLDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaWRldik7CiAJdTMyIG1taW9fc3RhcnQgPSAwOwogCXVpbnQgbW1pb19sZW4gPSAwOwotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopIG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBzbGljY2FyZCAqY2FyZDsKIAlzdHJ1Y3QgbWNhc3RfYWRkcmVzcyAqbWNhZGRyLCAqbWxpc3Q7CiAKQEAgLTU4MSw3ICs1OTAsNyBAQAogCiBzdGF0aWMgaW50IHNsaWNfZW50cnlfaGFsdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNsaWNjYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKIAlfX2lvbWVtIHN0cnVjdCBzbGljX3JlZ3MgKnNsaWNfcmVncyA9IGFkYXB0ZXItPnNsaWNfcmVnczsKIApAQCAtNjI0LDcgKzYzMyw3IEBACiAKIHN0YXRpYyBpbnQgc2xpY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQogewotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IGV0aHRvb2xfY21kIGVkYXRhOwogCXN0cnVjdCBldGh0b29sX2NtZCBlY21kOwogCXUzMiBkYXRhWzddOwpAQCAtNjQ5LDggKzY1OCw3IEBACiAKIAkJCWlmIChjb3B5X2Zyb21fdXNlcihkYXRhLCBycS0+aWZyX2RhdGEsIDI4KSkgewogCQkJCVBSSU5UX0VSUk9SCi0JCQkJICAgICgic2xpYzogY29weV9mcm9tX3VzZXIgRkFJTEVEIGdldHRpbmcgXAotCQkJCSAgICAgaW5pdGlhbCBzaW1iYSBwYXJhbVxuIik7CisJCQkJICAgICgic2xpYzogY29weV9mcm9tX3VzZXIgRkFJTEVEIGdldHRpbmcgaW5pdGlhbCBzaW1iYSBwYXJhbVxuIik7CiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQl9CiAKQEAgLTY2NSw4ICs2NzMsNyBAQAogCQkJCSAgICh0cmFjZW1vbl9yZXF1ZXN0ID09CiAJCQkJICAgIFNMSUNfRFVNUF9JTl9QUk9HUkVTUykpIHsKIAkJCQlQUklOVF9FUlJPUgotCQkJCSAgICAoIkFUSyBEaWFnbm9zdGljIFRyYWNlIER1bXAgUmVxdWVzdGVkIGJ1dCBcCi0JCQkJICAgICBhbHJlYWR5IGluIHByb2dyZXNzLi4uIGlnbm9yZVxuIik7CisJCQkJICAgICgiQVRLIERpYWdub3N0aWMgVHJhY2UgRHVtcCBSZXF1ZXN0ZWQgYnV0IGFscmVhZHkgaW4gcHJvZ3Jlc3MuLi4gaWdub3JlXG4iKTsKIAkJCX0gZWxzZSB7CiAJCQkJUFJJTlRfRVJST1IKIAkJCQkgICAgKCJBVEsgRGlhZ25vc3RpYyBUcmFjZSBEdW1wIFJlcXVlc3RlZFxuIik7CkBAIC03ODQsMTAgKzc5MSwxMCBAQAogCiAjZGVmaW5lIE5PUk1BTF9FVEhGUkFNRSAgICAgMAogCi1zdGF0aWMgaW50IHNsaWNfeG1pdF9zdGFydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIG5ldGRldl90eF90IHNsaWNfeG1pdF9zdGFydChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzbGljY2FyZCAqY2FyZDsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKW5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBzbGljX2hvc3RjbWQgKmhjbWQgPSBOVUxMOwogCXUzMiBzdGF0dXMgPSAwOwogCXUzMiBza2J0eXBlID0gTk9STUFMX0VUSEZSQU1FOwpAQCAtMTA3MSw3ICsxMDc4LDcgQEAKIHN0YXRpYyBpcnFyZXR1cm5fdCBzbGljX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKWRldl9pZDsKLQlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IChzdHJ1Y3QgYWRhcHRlciAqKW5ldGRldl9wcml2KGRldik7CisJc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihkZXYpOwogCXUzMiBpc3I7CiAKIAlpZiAoKGFkYXB0ZXItPnBzaG1lbSkgJiYgKGFkYXB0ZXItPnBzaG1lbS0+aXNyKSkgewpAQCAtMTIyOSwyMiArMTIzNiwyMSBAQAogCiBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnNsaWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKiluZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CiAKIAlBU1NFUlQoYWRhcHRlcik7Ci0Jc3RhdHMgPSAmYWRhcHRlci0+c3RhdHM7Ci0Jc3RhdHMtPmNvbGxpc2lvbnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnhtaXRfY29sbGlzaW9uczsKLQlzdGF0cy0+cnhfZXJyb3JzID0gYWRhcHRlci0+c2xpY19zdGF0cy5pZmFjZS5yY3ZfZXJyb3JzOwotCXN0YXRzLT50eF9lcnJvcnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnhtdF9lcnJvcnM7Ci0Jc3RhdHMtPnJ4X21pc3NlZF9lcnJvcnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnJjdl9kaXNjYXJkczsKLQlzdGF0cy0+dHhfaGVhcnRiZWF0X2Vycm9ycyA9IDA7Ci0Jc3RhdHMtPnR4X2Fib3J0ZWRfZXJyb3JzID0gMDsKLQlzdGF0cy0+dHhfd2luZG93X2Vycm9ycyA9IDA7Ci0Jc3RhdHMtPnR4X2ZpZm9fZXJyb3JzID0gMDsKLQlzdGF0cy0+cnhfZnJhbWVfZXJyb3JzID0gMDsKLQlzdGF0cy0+cnhfbGVuZ3RoX2Vycm9ycyA9IDA7Ci0JcmV0dXJuICZhZGFwdGVyLT5zdGF0czsKKwlkZXYtPnN0YXRzLmNvbGxpc2lvbnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnhtaXRfY29sbGlzaW9uczsKKwlkZXYtPnN0YXRzLnJ4X2Vycm9ycyA9IGFkYXB0ZXItPnNsaWNfc3RhdHMuaWZhY2UucmN2X2Vycm9yczsKKwlkZXYtPnN0YXRzLnR4X2Vycm9ycyA9IGFkYXB0ZXItPnNsaWNfc3RhdHMuaWZhY2UueG10X2Vycm9yczsKKwlkZXYtPnN0YXRzLnJ4X21pc3NlZF9lcnJvcnMgPSBhZGFwdGVyLT5zbGljX3N0YXRzLmlmYWNlLnJjdl9kaXNjYXJkczsKKwlkZXYtPnN0YXRzLnR4X2hlYXJ0YmVhdF9lcnJvcnMgPSAwOworCWRldi0+c3RhdHMudHhfYWJvcnRlZF9lcnJvcnMgPSAwOworCWRldi0+c3RhdHMudHhfd2luZG93X2Vycm9ycyA9IDA7CisJZGV2LT5zdGF0cy50eF9maWZvX2Vycm9ycyA9IDA7CisJZGV2LT5zdGF0cy5yeF9mcmFtZV9lcnJvcnMgPSAwOworCWRldi0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyA9IDA7CisKKwlyZXR1cm4gJmRldi0+c3RhdHM7CiB9CiAKIC8qCkBAIC0xMjU0LDEzICsxMjYwLDExIEBACiBzdGF0aWMgaW50IHNsaWNfbWNhc3RfYWRkX2xpc3Qoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIGNoYXIgKmFkZHJlc3MpCiB7CiAJc3RydWN0IG1jYXN0X2FkZHJlc3MgKm1jYWRkciwgKm1saXN0OwotCWJvb2wgZXF1YWxhZGRyOwogCiAJLyogQ2hlY2sgdG8gc2VlIGlmIGl0IGFscmVhZHkgZXhpc3RzICovCiAJbWxpc3QgPSBhZGFwdGVyLT5tY2FzdGFkZHJzOwogCXdoaWxlIChtbGlzdCkgewotCQlFVEhFUl9FUV9BRERSKG1saXN0LT5hZGRyZXNzLCBhZGRyZXNzLCBlcXVhbGFkZHIpOwotCQlpZiAoZXF1YWxhZGRyKQorCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihtbGlzdC0+YWRkcmVzcywgYWRkcmVzcykpCiAJCQlyZXR1cm4gU1RBVFVTX1NVQ0NFU1M7CiAJCW1saXN0ID0gbWxpc3QtPm5leHQ7CiAJfQpAQCAtMTM2MCwyNyArMTM2NCwxOSBAQAogCiBzdGF0aWMgdm9pZCBzbGljX21jYXN0X3NldF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGFkYXB0ZXIgKiluZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlpbnQgc3RhdHVzID0gU1RBVFVTX1NVQ0NFU1M7Ci0JaW50IGk7CiAJY2hhciAqYWRkcmVzc2VzOwotCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdCA9IGRldi0+bWNfbGlzdDsKLQlpbnQgbWNfY291bnQgPSBkZXYtPm1jX2NvdW50OworCXN0cnVjdCBkZXZfbWNfbGlzdCAqbWNfbGlzdDsKIAogCUFTU0VSVChhZGFwdGVyKTsKIAotCWZvciAoaSA9IDE7IGkgPD0gbWNfY291bnQ7IGkrKykgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jX2xpc3QsIGRldikgewogCQlhZGRyZXNzZXMgPSAoY2hhciAqKSAmbWNfbGlzdC0+ZG1pX2FkZHI7Ci0JCWlmIChtY19saXN0LT5kbWlfYWRkcmxlbiA9PSA2KSB7Ci0JCQlzdGF0dXMgPSBzbGljX21jYXN0X2FkZF9saXN0KGFkYXB0ZXIsIGFkZHJlc3Nlcyk7Ci0JCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQotCQkJCWJyZWFrOwotCQl9IGVsc2UgewotCQkJc3RhdHVzID0gLUVJTlZBTDsKKwkJc3RhdHVzID0gc2xpY19tY2FzdF9hZGRfbGlzdChhZGFwdGVyLCBhZGRyZXNzZXMpOworCQlpZiAoc3RhdHVzICE9IFNUQVRVU19TVUNDRVNTKQogCQkJYnJlYWs7Ci0JCX0KIAkJc2xpY19tY2FzdF9zZXRfYml0KGFkYXB0ZXIsIGFkZHJlc3Nlcyk7Ci0JCW1jX2xpc3QgPSBtY19saXN0LT5uZXh0OwogCX0KIAogCWlmIChhZGFwdGVyLT5kZXZmbGFnc19wcmV2ICE9IGRldi0+ZmxhZ3MpIHsKQEAgLTE4NjAsNiArMTg1Niw5IEBACiAJcmV0dXJuIDA7CiB9CiAKK01PRFVMRV9GSVJNV0FSRSgic2xpY29zcy9vYXNpc3JjdnVjb2RlLnN5cyIpOworTU9EVUxFX0ZJUk1XQVJFKCJzbGljb3NzL2dicmN2dWNvZGUuc3lzIik7CisKIHN0YXRpYyBpbnQgc2xpY19jYXJkX2Rvd25sb2FkKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CkBAIC0xOTcxLDYgKzE5NzAsOSBAQAogCXJldHVybiBTVEFUVVNfU1VDQ0VTUzsKIH0KIAorTU9EVUxFX0ZJUk1XQVJFKCJzbGljb3NzL29hc2lzZG93bmxvYWQuc3lzIik7CitNT0RVTEVfRklSTVdBUkUoInNsaWNvc3MvZ2Jkb3dubG9hZC5zeXMiKTsKKwogc3RhdGljIHZvaWQgc2xpY19hZGFwdGVyX3NldF9od2FkZHIoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJc3RydWN0IHNsaWNjYXJkICpjYXJkID0gYWRhcHRlci0+Y2FyZDsKQEAgLTI0NzQsNyArMjQ3Niw2IEBACiAJdTMyIG9wdHMgPSBhZGFwdGVyLT5tYWNvcHRzOwogCXUzMiAqZGhvc3Q0ID0gKHUzMiAqKSZldGhlcl9mcmFtZS0+ZXRoZXJfZGhvc3RbMF07CiAJdTE2ICpkaG9zdDIgPSAodTE2ICopJmV0aGVyX2ZyYW1lLT5ldGhlcl9kaG9zdFs0XTsKLQlib29sIGVxdWFsYWRkcjsKIAogCWlmIChvcHRzICYgTUFDX1BST01JU0MpCiAJCXJldHVybiB0cnVlOwpAQCAtMjQ5OCwxMCArMjQ5OSw4IEBACiAJCQlzdHJ1Y3QgbWNhc3RfYWRkcmVzcyAqbWNhZGRyID0gYWRhcHRlci0+bWNhc3RhZGRyczsKIAogCQkJd2hpbGUgKG1jYWRkcikgewotCQkJCUVUSEVSX0VRX0FERFIobWNhZGRyLT5hZGRyZXNzLAotCQkJCQkgICAgICBldGhlcl9mcmFtZS0+ZXRoZXJfZGhvc3QsCi0JCQkJCSAgICAgIGVxdWFsYWRkcik7Ci0JCQkJaWYgKGVxdWFsYWRkcikgeworCQkJCWlmICghY29tcGFyZV9ldGhlcl9hZGRyKG1jYWRkci0+YWRkcmVzcywKKwkJCQkJCQlldGhlcl9mcmFtZS0+ZXRoZXJfZGhvc3QpKSB7CiAJCQkJCWFkYXB0ZXItPnJjdl9tdWx0aWNhc3RzKys7CiAJCQkJCWFkYXB0ZXItPnN0YXRzLm11bHRpY2FzdCsrOwogCQkJCQlyZXR1cm4gdHJ1ZTsKQEAgLTI1MjMsNyArMjUyMiw3IEBACiAKIHN0YXRpYyBpbnQgc2xpY19tYWNfc2V0X2FkZHJlc3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqcHRyKQogewotCXN0cnVjdCBhZGFwdGVyICphZGFwdGVyID0gKHN0cnVjdCBhZGFwdGVyICopbmV0ZGV2X3ByaXYoZGV2KTsKKwlzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IHNvY2thZGRyICphZGRyID0gcHRyOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcoZGV2KSkKQEAgLTI1MzEsNiArMjUzMCw5IEBACiAJaWYgKCFhZGFwdGVyKQogCQlyZXR1cm4gLUVCVVNZOwogCisJaWYgKCFpc192YWxpZF9ldGhlcl9hZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW1lbWNweShkZXYtPmRldl9hZGRyLCBhZGRyLT5zYV9kYXRhLCBkZXYtPmFkZHJfbGVuKTsKIAltZW1jcHkoYWRhcHRlci0+Y3Vycm1hY2FkZHIsIGFkZHItPnNhX2RhdGEsIGRldi0+YWRkcl9sZW4pOwogCkBAIC0zOTY4LDEwICszOTcwLDggQEAKIAogc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19hZGFwdGVyX2Rlc3Ryb3koc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7Ci0JaWYgKGFkYXB0ZXItPmRlYnVnZnNfZW50cnkpIHsKLQkJZGVidWdmc19yZW1vdmUoYWRhcHRlci0+ZGVidWdmc19lbnRyeSk7Ci0JCWFkYXB0ZXItPmRlYnVnZnNfZW50cnkgPSBOVUxMOwotCX0KKwlkZWJ1Z2ZzX3JlbW92ZShhZGFwdGVyLT5kZWJ1Z2ZzX2VudHJ5KTsKKwlhZGFwdGVyLT5kZWJ1Z2ZzX2VudHJ5ID0gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgc2xpY19kZWJ1Z19jYXJkX2NyZWF0ZShzdHJ1Y3Qgc2xpY2NhcmQgKmNhcmQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9LY29uZmlnCmluZGV4IDIwNGRiZmMuLjMxNTEwMmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9LY29uZmlnCkBAIC02LDEwICs2LDMgQEAKIAlzZWxlY3QgRkJfQ0ZCX0lNQUdFQkxJVAogCWhlbHAKIAkgIEZyYW1lIEJ1ZmZlciBkcml2ZXIgZm9yIHRoZSBTaWxpY29uIE1vdGlvbiBTTTdYWCBzZXJpYWwgZ3JhcGhpYyBjYXJkLgotCi1jb25maWcgRkJfU003WFhfQUNDRUwKLQlib29sICJTaWxpY29ubW90aW9uIEFjY2VsZXJhdGlvbiBmdW5jdGlvbnMgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBGQl9TTTdYWCAmJiBFWFBFUklNRU5UQUwKLQloZWxwCi0JICBUaGlzIHdpbGwgY29tcGlsZSB0aGUgVHJpZGVudCBmcmFtZSBidWZmZXIgZGV2aWNlIHdpdGgKLQkgIGFjY2VsZXJhdGlvbiBmdW5jdGlvbnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvVE9ETyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9UT0RPCmluZGV4IDFmNjFmNWUuLmE2NmQ5ZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9UT0RPCkBAIC0xLDUgKzEsNiBAQAogVE9ETzoKIC0gRHVhbCBoZWFkIHN1cHBvcnQKKy0gMkQgYWNjZWxlcmF0aW9uIHN1cHBvcnQKIC0gdXNlIGtlcm5lbCBjb2Rpbmcgc3R5bGUKIC0gY2hlY2twYXRjaC5wbCBjbGVhbgogLSByZWZpbmUgdGhlIGNvZGUgYW5kIHJlbW92ZSB1bnVzZWQgY29kZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5jIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmZmMGEwLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuYworKysgL2Rldi9udWxsCkBAIC0xLDk3OSArMCwwIEBACi0vKgotICogU2lsaWNvbiBNb3Rpb24gU003WFggMkQgZHJhd2luZyBlbmdpbmUgZnVuY3Rpb25zLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBTaWxpY29uIE1vdGlvbiBUZWNobm9sb2d5IENvcnAuCi0gKiBBdXRob3I6IEJveW9kIGJveW9kLnlhbmdAc2lsaWNvbm1vdGlvbi5jb20uY24KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTGVtb3RlLCBJbmMuCi0gKiBBdXRob3I6IFd1IFpoYW5namluLCB3dXpoYW5namluQGdtYWlsLmNvbQotICoKLSAqICBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UuIFNlZSB0aGUgZmlsZSBDT1BZSU5HIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUgZm9yCi0gKiAgbW9yZSBkZXRhaWxzLgotICoKLSAqIFZlcnNpb24gMC4xMC4yNjE5Mi4yMS4wMQotICogCS0gQWRkIFBvd2VyUEMgc3VwcG9ydAotICogCS0gQWRkIDJEIHN1cHBvcnQgZm9yIEx5bnggLQotICogVmVyaWZpZWQgb24gMi42LjE5LjIKLSAqIAlCb3lvZC55YW5nICA8Ym95b2QueWFuZ0BzaWxpY29ubW90aW9uLmNvbS5jbj4KLSAqLwotCi11bnNpZ25lZCBjaGFyIHNtdGNfZGVfYnVzeTsKLQotdm9pZCBTTVRDX3dyaXRlMkRyZWcodW5zaWduZWQgbG9uZyBuT2Zmc2V0LCB1bnNpZ25lZCBsb25nIG5EYXRhKQotewotCXdyaXRlbChuRGF0YSwgc210Y18yREJhc2VBZGRyZXNzICsgbk9mZnNldCk7Ci19Ci0KLXVuc2lnbmVkIGxvbmcgU01UQ19yZWFkMkRyZWcodW5zaWduZWQgbG9uZyBuT2Zmc2V0KQotewotCXJldHVybiByZWFkbChzbXRjXzJEQmFzZUFkZHJlc3MgKyBuT2Zmc2V0KTsKLX0KLQotdm9pZCBTTVRDX3dyaXRlMkRkYXRhcG9ydCh1bnNpZ25lZCBsb25nIG5PZmZzZXQsIHVuc2lnbmVkIGxvbmcgbkRhdGEpCi17Ci0Jd3JpdGVsKG5EYXRhLCBzbXRjXzJEZGF0YXBvcnQgKyBuT2Zmc2V0KTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBkZUluaXQKLSAqCi0gKiBQdXJwb3NlCi0gKiAgICBEcmF3aW5nIGVuZ2luZSBpbml0aWFsaXphdGlvbi4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdm9pZCBkZUluaXQodW5zaWduZWQgaW50IG5Nb2RlV2lkdGgsIHVuc2lnbmVkIGludCBuTW9kZUhlaWdodCwKLQkJdW5zaWduZWQgaW50IGJwcCkKLXsKLQkvKiBHZXQgY3VycmVudCBwb3dlciBjb25maWd1cmF0aW9uLiAqLwotCXVuc2lnbmVkIGNoYXIgY2xvY2s7Ci0JY2xvY2sgPSBzbXRjX3NlcXIoMHgyMSk7Ci0KLQkvKiBpbml0aWFsaXplIGdsb2JhbCAnbXV0ZXggbG9jaycgdmFyaWFibGUgKi8KLQlzbXRjX2RlX2J1c3kgPSAwOwotCi0JLyogRW5hYmxlIDJEIERyYXdpbmcgRW5naW5lICovCi0Jc210Y19zZXF3KDB4MjEsIGNsb2NrICYgMHhGOCk7Ci0KLQlTTVRDX3dyaXRlMkRyZWcoREVfQ0xJUF9UTCwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX0NMSVBfVEwsIFRPUCwgMCkgfAotCQkJRklFTERfU0VUKDAsIERFX0NMSVBfVEwsIFNUQVRVUywgRElTQUJMRSkgfAotCQkJRklFTERfU0VUKDAsIERFX0NMSVBfVEwsIElOSElCSVQsIE9VVFNJREUpIHwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX0NMSVBfVEwsIExFRlQsIDApKTsKLQotCWlmIChicHAgPj0gMjQpIHsKLQkJU01UQ193cml0ZTJEcmVnKERFX1BJVENILAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBERVNUSU5BVElPTiwKLQkJCQkJICAgIG5Nb2RlV2lkdGggKiAzKSB8IEZJRUxEX1ZBTFVFKDAsCi0JCQkJCQkJCSAgREVfUElUQ0gsCi0JCQkJCQkJCSAgU09VUkNFLAotCQkJCQkJCQkgIG5Nb2RlV2lkdGgKLQkJCQkJCQkJICAqIDMpKTsKLQl9IGVsc2UgewotCQlTTVRDX3dyaXRlMkRyZWcoREVfUElUQ0gsCi0JCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIERFU1RJTkFUSU9OLAotCQkJCQkgICAgbk1vZGVXaWR0aCkgfCBGSUVMRF9WQUxVRSgwLAotCQkJCQkJCSAgICAgIERFX1BJVENILAotCQkJCQkJCSAgICAgIFNPVVJDRSwKLQkJCQkJCQkgICAgICBuTW9kZVdpZHRoKSk7Ci0JfQotCi0JU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19XSURUSCwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwgREVTVElOQVRJT04sCi0JCQkJICAgIG5Nb2RlV2lkdGgpIHwgRklFTERfVkFMVUUoMCwKLQkJCQkJCQkgICAgICBERV9XSU5ET1dfV0lEVEgsCi0JCQkJCQkJICAgICAgU09VUkNFLAotCQkJCQkJCSAgICAgIG5Nb2RlV2lkdGgpKTsKLQotCXN3aXRjaCAoYnBwKSB7Ci0JY2FzZSA4OgotCQlTTVRDX3dyaXRlMkRyZWcoREVfU1RSRVRDSF9GT1JNQVQsCi0JCQkJRklFTERfU0VUKDAsIERFX1NUUkVUQ0hfRk9STUFULCBQQVRURVJOX1hZLAotCQkJCQkgIE5PUk1BTCkgfCBGSUVMRF9WQUxVRSgwLAotCQkJCQkJCURFX1NUUkVUQ0hfRk9STUFULAotCQkJCQkJCVBBVFRFUk5fWSwKLQkJCQkJCQkwKSB8Ci0JCQkJRklFTERfVkFMVUUoMCwgREVfU1RSRVRDSF9GT1JNQVQsIFBBVFRFUk5fWCwKLQkJCQkgICAgMCkgfCBGSUVMRF9TRVQoMCwgREVfU1RSRVRDSF9GT1JNQVQsCi0JCQkJCQkgICBQSVhFTF9GT1JNQVQsCi0JCQkJCQkgICA4KSB8IEZJRUxEX1NFVCgwLAotCQkJCQkJCSAgREVfU1RSRVRDSF9GT1JNQVQsCi0JCQkJCQkJICBBRERSRVNTSU5HLAotCQkJCQkJCSAgWFkpIHwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9TVFJFVENIX0ZPUk1BVCwKLQkJCQkJU09VUkNFX0hFSUdIVCwgMykpOwotCQlicmVhazsKLQljYXNlIDI0OgotCQlTTVRDX3dyaXRlMkRyZWcoREVfU1RSRVRDSF9GT1JNQVQsCi0JCQkJRklFTERfU0VUKDAsIERFX1NUUkVUQ0hfRk9STUFULCBQQVRURVJOX1hZLAotCQkJCQkgIE5PUk1BTCkgfCBGSUVMRF9WQUxVRSgwLAotCQkJCQkJCURFX1NUUkVUQ0hfRk9STUFULAotCQkJCQkJCVBBVFRFUk5fWSwKLQkJCQkJCQkwKSB8Ci0JCQkJRklFTERfVkFMVUUoMCwgREVfU1RSRVRDSF9GT1JNQVQsIFBBVFRFUk5fWCwKLQkJCQkgICAgMCkgfCBGSUVMRF9TRVQoMCwgREVfU1RSRVRDSF9GT1JNQVQsCi0JCQkJCQkJICAgUElYRUxfRk9STUFULAotCQkJCQkJCSAgIDI0KSB8IEZJRUxEX1NFVCgwLAotCQkJCQkJCSAgIERFX1NUUkVUQ0hfRk9STUFULAotCQkJCQkJCSAgIEFERFJFU1NJTkcsCi0JCQkJCQkJICAgWFkpIHwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9TVFJFVENIX0ZPUk1BVCwKLQkJCQkJU09VUkNFX0hFSUdIVCwgMykpOwotCQlicmVhazsKLQljYXNlIDE2OgotCWRlZmF1bHQ6Ci0JCVNNVENfd3JpdGUyRHJlZyhERV9TVFJFVENIX0ZPUk1BVCwKLQkJCQlGSUVMRF9TRVQoMCwgREVfU1RSRVRDSF9GT1JNQVQsIFBBVFRFUk5fWFksCi0JCQkJCSAgTk9STUFMKSB8IEZJRUxEX1ZBTFVFKDAsCi0JCQkJCQkJREVfU1RSRVRDSF9GT1JNQVQsCi0JCQkJCQkJUEFUVEVSTl9ZLAotCQkJCQkJCTApIHwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9TVFJFVENIX0ZPUk1BVCwgUEFUVEVSTl9YLAotCQkJCSAgICAwKSB8IEZJRUxEX1NFVCgwLCBERV9TVFJFVENIX0ZPUk1BVCwKLQkJCQkJCQkgICBQSVhFTF9GT1JNQVQsCi0JCQkJCQkJICAgMTYpIHwgRklFTERfU0VUKDAsCi0JCQkJCQkJICAgREVfU1RSRVRDSF9GT1JNQVQsCi0JCQkJCQkJICAgQUREUkVTU0lORywKLQkJCQkJCQkgICBYWSkgfAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NUUkVUQ0hfRk9STUFULAotCQkJCQlTT1VSQ0VfSEVJR0hULCAzKSk7Ci0JCWJyZWFrOwotCX0KLQotCVNNVENfd3JpdGUyRHJlZyhERV9NQVNLUywKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX01BU0tTLCBCWVRFX01BU0ssIDB4RkZGRikgfAotCQkJRklFTERfVkFMVUUoMCwgREVfTUFTS1MsIEJJVF9NQVNLLCAweEZGRkYpKTsKLQlTTVRDX3dyaXRlMkRyZWcoREVfQ09MT1JfQ09NUEFSRV9NQVNLLAotCQkJRklFTERfVkFMVUUoMCwgREVfQ09MT1JfQ09NUEFSRV9NQVNLLCBNQVNLUywgXAotCQkJCTB4RkZGRkZGKSk7Ci0JU01UQ193cml0ZTJEcmVnKERFX0NPTE9SX0NPTVBBUkUsCi0JCQlGSUVMRF9WQUxVRSgwLCBERV9DT0xPUl9DT01QQVJFLCBDT0xPUiwgMHhGRkZGRkYpKTsKLX0KLQotdm9pZCBkZVZlcnRpY2FsTGluZSh1bnNpZ25lZCBsb25nIGRzdF9iYXNlLAotCQkgICAgdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCi0JCSAgICB1bnNpZ25lZCBsb25nIG5YLAotCQkgICAgdW5zaWduZWQgbG9uZyBuWSwKLQkJICAgIHVuc2lnbmVkIGxvbmcgZHN0X2hlaWdodCwgdW5zaWduZWQgbG9uZyBuQ29sb3IpCi17Ci0JZGVXYWl0Rm9yTm90QnVzeSgpOwotCi0JU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFLAotCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsIEFERFJFU1MsCi0JCQkJICAgIGRzdF9iYXNlKSk7Ci0KLQlTTVRDX3dyaXRlMkRyZWcoREVfUElUQ0gsCi0JCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgREVTVElOQVRJT04sIGRzdF9waXRjaCkgfAotCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIFNPVVJDRSwgZHN0X3BpdGNoKSk7Ci0KLQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1dJRFRILAotCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILCBERVNUSU5BVElPTiwKLQkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILAotCQkJCQkJICAgICBTT1VSQ0UsCi0JCQkJCQkgICAgIGRzdF9waXRjaCkpOwotCi0JU01UQ193cml0ZTJEcmVnKERFX0ZPUkVHUk9VTkQsCi0JCQlGSUVMRF9WQUxVRSgwLCBERV9GT1JFR1JPVU5ELCBDT0xPUiwgbkNvbG9yKSk7Ci0KLQlTTVRDX3dyaXRlMkRyZWcoREVfREVTVElOQVRJT04sCi0JCQlGSUVMRF9TRVQoMCwgREVfREVTVElOQVRJT04sIFdSQVAsIERJU0FCTEUpIHwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBYLCBuWCkgfAotCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFksIG5ZKSk7Ci0KLQlTTVRDX3dyaXRlMkRyZWcoREVfRElNRU5TSU9OLAotCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBYLCAxKSB8Ci0JCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFlfRVQsIGRzdF9oZWlnaHQpKTsKLQotCVNNVENfd3JpdGUyRHJlZyhERV9DT05UUk9MLAotCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNUQVRVUywgU1RBUlQpIHwKLQkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBESVJFQ1RJT04sIExFRlRfVE9fUklHSFQpIHwKLQkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBNQUpPUiwgWSkgfAotCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNURVBfWCwgTkVHQVRJVkUpIHwKLQkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEVQX1ksIFBPU0lUSVZFKSB8Ci0JCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgTEFTVF9QSVhFTCwgT0ZGKSB8Ci0JCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgQ09NTUFORCwgU0hPUlRfU1RST0tFKSB8Ci0JCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgUk9QX1NFTEVDVCwgUk9QMikgfAotCQkJRklFTERfVkFMVUUoMCwgREVfQ09OVFJPTCwgUk9QLCAweDBDKSk7Ci0KLQlzbXRjX2RlX2J1c3kgPSAxOwotfQotCi12b2lkIGRlSG9yaXpvbnRhbExpbmUodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKLQkJICAgICAgdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgblgsCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgblksCi0JCSAgICAgIHVuc2lnbmVkIGxvbmcgZHN0X3dpZHRoLCB1bnNpZ25lZCBsb25nIG5Db2xvcikKLXsKLQlkZVdhaXRGb3JOb3RCdXN5KCk7Ci0KLQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsCi0JCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwgQUREUkVTUywKLQkJCQkgICAgZHN0X2Jhc2UpKTsKLQotCVNNVENfd3JpdGUyRHJlZyhERV9QSVRDSCwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBERVNUSU5BVElPTiwgZHN0X3BpdGNoKSB8Ci0JCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgU09VUkNFLCBkc3RfcGl0Y2gpKTsKLQotCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfV0lEVEgsCi0JCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsIERFU1RJTkFUSU9OLAotCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsCi0JCQkJCQkgICAgIFNPVVJDRSwKLQkJCQkJCSAgICAgZHN0X3BpdGNoKSk7Ci0JU01UQ193cml0ZTJEcmVnKERFX0ZPUkVHUk9VTkQsCi0JCQlGSUVMRF9WQUxVRSgwLCBERV9GT1JFR1JPVU5ELCBDT0xPUiwgbkNvbG9yKSk7Ci0JU01UQ193cml0ZTJEcmVnKERFX0RFU1RJTkFUSU9OLAotCQkJRklFTERfU0VUKDAsIERFX0RFU1RJTkFUSU9OLCBXUkFQLAotCQkJICBESVNBQkxFKSB8IEZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBYLAotCQkJCQkJIG5YKSB8IEZJRUxEX1ZBTFVFKDAsCi0JCQkJCQkJICAgREVfREVTVElOQVRJT04sCi0JCQkJCQkJICAgWSwKLQkJCQkJCQkgICBuWSkpOwotCVNNVENfd3JpdGUyRHJlZyhERV9ESU1FTlNJT04sCi0JCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFgsCi0JCQkgICAgZHN0X3dpZHRoKSB8IEZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwKLQkJCQkJCSAgICAgWV9FVCwgMSkpOwotCVNNVENfd3JpdGUyRHJlZyhERV9DT05UUk9MLAotCQlGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RBVFVTLCBTVEFSVCkgfCBGSUVMRF9TRVQoMCwKLQkJCQkJCQkgICAgREVfQ09OVFJPTCwKLQkJCQkJCQkgICAgRElSRUNUSU9OLAotCQkJCQkJCSAgICBSSUdIVF9UT19MRUZUKQotCQl8IEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBNQUpPUiwgWCkgfCBGSUVMRF9TRVQoMCwKLQkJCQkJCQkgREVfQ09OVFJPTCwKLQkJCQkJCQkgU1RFUF9YLAotCQkJCQkJCSBQT1NJVElWRSkKLQkJfCBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RFUF9ZLAotCQkJICAgIE5FR0FUSVZFKSB8IEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLAotCQkJCQkJICBMQVNUX1BJWEVMLAotCQkJCQkJICBPRkYpIHwgRklFTERfU0VUKDAsCi0JCQkJCQkJICAgREVfQ09OVFJPTCwKLQkJCQkJCQkgICBDT01NQU5ELAotCQkJCQkJCSAgIFNIT1JUX1NUUk9LRSkKLQkJfCBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgUk9QX1NFTEVDVCwKLQkJCSAgICBST1AyKSB8IEZJRUxEX1ZBTFVFKDAsIERFX0NPTlRST0wsIFJPUCwKLQkJCQkJCTB4MEMpKTsKLQotCXNtdGNfZGVfYnVzeSA9IDE7Ci19Ci0KLXZvaWQgZGVMaW5lKHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCi0JICAgIHVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAotCSAgICB1bnNpZ25lZCBsb25nIG5YMSwKLQkgICAgdW5zaWduZWQgbG9uZyBuWTEsCi0JICAgIHVuc2lnbmVkIGxvbmcgblgyLCB1bnNpZ25lZCBsb25nIG5ZMiwgdW5zaWduZWQgbG9uZyBuQ29sb3IpCi17Ci0JdW5zaWduZWQgbG9uZyBuQ29tbWFuZCA9Ci0JICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEFUVVMsIFNUQVJUKSB8Ci0JICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBESVJFQ1RJT04sIExFRlRfVE9fUklHSFQpIHwKLQkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIE1BSk9SLCBYKSB8Ci0JICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEVQX1gsIFBPU0lUSVZFKSB8Ci0JICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEVQX1ksIFBPU0lUSVZFKSB8Ci0JICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBMQVNUX1BJWEVMLCBPRkYpIHwKLQkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFJPUF9TRUxFQ1QsIFJPUDIpIHwKLQkgICAgRklFTERfVkFMVUUoMCwgREVfQ09OVFJPTCwgUk9QLCAweDBDKTsKLQl1bnNpZ25lZCBsb25nIERlbHRhWDsKLQl1bnNpZ25lZCBsb25nIERlbHRhWTsKLQotCS8qIENhbGN1bGF0ZSBkZWx0YSBYICovCi0JaWYgKG5YMSA8PSBuWDIpCi0JCURlbHRhWCA9IG5YMiAtIG5YMTsKLQllbHNlIHsKLQkJRGVsdGFYID0gblgxIC0gblgyOwotCQluQ29tbWFuZCA9IEZJRUxEX1NFVChuQ29tbWFuZCwgREVfQ09OVFJPTCwgU1RFUF9YLCBORUdBVElWRSk7Ci0JfQotCi0JLyogQ2FsY3VsYXRlIGRlbHRhIFkgKi8KLQlpZiAoblkxIDw9IG5ZMikKLQkJRGVsdGFZID0gblkyIC0gblkxOwotCWVsc2UgewotCQlEZWx0YVkgPSBuWTEgLSBuWTI7Ci0JCW5Db21tYW5kID0gRklFTERfU0VUKG5Db21tYW5kLCBERV9DT05UUk9MLCBTVEVQX1ksIE5FR0FUSVZFKTsKLQl9Ci0KLQkvKiBEZXRlcm1pbmUgdGhlIG1ham9yIGF4aXMgKi8KLQlpZiAoRGVsdGFYIDwgRGVsdGFZKQotCQluQ29tbWFuZCA9IEZJRUxEX1NFVChuQ29tbWFuZCwgREVfQ09OVFJPTCwgTUFKT1IsIFkpOwotCi0JLyogVmVydGljYWwgbGluZT8gKi8KLQlpZiAoblgxID09IG5YMikKLQkJZGVWZXJ0aWNhbExpbmUoZHN0X2Jhc2UsIGRzdF9waXRjaCwgblgxLCBuWTEsIERlbHRhWSwgbkNvbG9yKTsKLQotCS8qIEhvcml6b250YWwgbGluZT8gKi8KLQllbHNlIGlmIChuWTEgPT0gblkyKQotCQlkZUhvcml6b250YWxMaW5lKGRzdF9iYXNlLCBkc3RfcGl0Y2gsIG5YMSwgblkxLCBcCi0JCQkJRGVsdGFYLCBuQ29sb3IpOwotCi0JLyogRGlhZ29uYWwgbGluZT8gKi8KLQllbHNlIGlmIChEZWx0YVggPT0gRGVsdGFZKSB7Ci0JCWRlV2FpdEZvck5vdEJ1c3koKTsKLQotCQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsCi0JCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsCi0JCQkJCSAgICBBRERSRVNTLCBkc3RfYmFzZSkpOwotCi0JCVNNVENfd3JpdGUyRHJlZyhERV9QSVRDSCwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgREVTVElOQVRJT04sCi0JCQkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwKLQkJCQkJCQkgICAgIERFX1BJVENILAotCQkJCQkJCSAgICAgU09VUkNFLAotCQkJCQkJCSAgICAgZHN0X3BpdGNoKSk7Ci0KLQkJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19XSURUSCwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsIERFU1RJTkFUSU9OLAotCQkJCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsCi0JCQkJCQkJICAgICBERV9XSU5ET1dfV0lEVEgsCi0JCQkJCQkJICAgICBTT1VSQ0UsCi0JCQkJCQkJICAgICBkc3RfcGl0Y2gpKTsKLQotCQlTTVRDX3dyaXRlMkRyZWcoREVfRk9SRUdST1VORCwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9GT1JFR1JPVU5ELCBDT0xPUiwgbkNvbG9yKSk7Ci0KLQkJU01UQ193cml0ZTJEcmVnKERFX0RFU1RJTkFUSU9OLAotCQkJCUZJRUxEX1NFVCgwLCBERV9ERVNUSU5BVElPTiwgV1JBUCwgRElTQUJMRSkgfAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBYLCAxKSB8Ci0JCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFksIG5ZMSkpOwotCi0JCVNNVENfd3JpdGUyRHJlZyhERV9ESU1FTlNJT04sCi0JCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBYLCAxKSB8Ci0JCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBZX0VULCBEZWx0YVgpKTsKLQotCQlTTVRDX3dyaXRlMkRyZWcoREVfQ09OVFJPTCwKLQkJCQlGSUVMRF9TRVQobkNvbW1hbmQsIERFX0NPTlRST0wsIENPTU1BTkQsCi0JCQkJCSAgU0hPUlRfU1RST0tFKSk7Ci0JfQotCi0JLyogR2VuZXJpYyBsaW5lICovCi0JZWxzZSB7Ci0JCXVuc2lnbmVkIGludCBrMSwgazIsIGV0LCB3OwotCQlpZiAoRGVsdGFYIDwgRGVsdGFZKSB7Ci0JCQlrMSA9IDIgKiBEZWx0YVg7Ci0JCQlldCA9IGsxIC0gRGVsdGFZOwotCQkJazIgPSBldCAtIERlbHRhWTsKLQkJCXcgPSBEZWx0YVkgKyAxOwotCQl9IGVsc2UgewotCQkJazEgPSAyICogRGVsdGFZOwotCQkJZXQgPSBrMSAtIERlbHRhWDsKLQkJCWsyID0gZXQgLSBEZWx0YVg7Ci0JCQl3ID0gRGVsdGFYICsgMTsKLQkJfQotCi0JCWRlV2FpdEZvck5vdEJ1c3koKTsKLQotCQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsCi0JCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsCi0JCQkJCSAgICBBRERSRVNTLCBkc3RfYmFzZSkpOwotCi0JCVNNVENfd3JpdGUyRHJlZyhERV9QSVRDSCwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgREVTVElOQVRJT04sCi0JCQkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwKLQkJCQkJCQkgICAgIERFX1BJVENILAotCQkJCQkJCSAgICAgU09VUkNFLAotCQkJCQkJCSAgICAgZHN0X3BpdGNoKSk7Ci0KLQkJU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19XSURUSCwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsIERFU1RJTkFUSU9OLAotCQkJCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsCi0JCQkJCQkJICAgICBERV9XSU5ET1dfV0lEVEgsCi0JCQkJCQkJICAgICBTT1VSQ0UsCi0JCQkJCQkJICAgICBkc3RfcGl0Y2gpKTsKLQotCQlTTVRDX3dyaXRlMkRyZWcoREVfRk9SRUdST1VORCwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9GT1JFR1JPVU5ELCBDT0xPUiwgbkNvbG9yKSk7Ci0KLQkJU01UQ193cml0ZTJEcmVnKERFX1NPVVJDRSwKLQkJCQlGSUVMRF9TRVQoMCwgREVfU09VUkNFLCBXUkFQLCBESVNBQkxFKSB8Ci0JCQkJRklFTERfVkFMVUUoMCwgREVfU09VUkNFLCBYX0sxLCBrMSkgfAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1NPVVJDRSwgWV9LMiwgazIpKTsKLQotCQlTTVRDX3dyaXRlMkRyZWcoREVfREVTVElOQVRJT04sCi0JCQkJRklFTERfU0VUKDAsIERFX0RFU1RJTkFUSU9OLCBXUkFQLCBESVNBQkxFKSB8Ci0JCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFgsIG5YMSkgfAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBZLCBuWTEpKTsKLQotCQlTTVRDX3dyaXRlMkRyZWcoREVfRElNRU5TSU9OLAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWCwgdykgfAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWV9FVCwgZXQpKTsKLQotCQlTTVRDX3dyaXRlMkRyZWcoREVfQ09OVFJPTCwKLQkJCQlGSUVMRF9TRVQobkNvbW1hbmQsIERFX0NPTlRST0wsIENPTU1BTkQsCi0JCQkJCSAgTElORV9EUkFXKSk7Ci0JfQotCi0Jc210Y19kZV9idXN5ID0gMTsKLX0KLQotdm9pZCBkZUZpbGxSZWN0KHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCi0JCXVuc2lnbmVkIGxvbmcgZHN0X3BpdGNoLAotCQl1bnNpZ25lZCBsb25nIGRzdF9YLAotCQl1bnNpZ25lZCBsb25nIGRzdF9ZLAotCQl1bnNpZ25lZCBsb25nIGRzdF93aWR0aCwKLQkJdW5zaWduZWQgbG9uZyBkc3RfaGVpZ2h0LCB1bnNpZ25lZCBsb25nIG5Db2xvcikKLXsKLQlkZVdhaXRGb3JOb3RCdXN5KCk7Ci0KLQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsCi0JCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwgQUREUkVTUywKLQkJCQkgICAgZHN0X2Jhc2UpKTsKLQotCWlmIChkc3RfcGl0Y2gpIHsKLQkJU01UQ193cml0ZTJEcmVnKERFX1BJVENILAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1BJVENILCBERVNUSU5BVElPTiwKLQkJCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLAotCQkJCQkJCSAgICAgREVfUElUQ0gsCi0JCQkJCQkJICAgICBTT1VSQ0UsCi0JCQkJCQkJICAgICBkc3RfcGl0Y2gpKTsKLQotCQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1dJRFRILAotCQkJCUZJRUxEX1ZBTFVFKDAsIERFX1dJTkRPV19XSURUSCwgREVTVElOQVRJT04sCi0JCQkJCSAgICBkc3RfcGl0Y2gpIHwgRklFTERfVkFMVUUoMCwKLQkJCQkJCQkgICAgIERFX1dJTkRPV19XSURUSCwKLQkJCQkJCQkgICAgIFNPVVJDRSwKLQkJCQkJCQkgICAgIGRzdF9waXRjaCkpOwotCX0KLQotCVNNVENfd3JpdGUyRHJlZyhERV9GT1JFR1JPVU5ELAotCQkJRklFTERfVkFMVUUoMCwgREVfRk9SRUdST1VORCwgQ09MT1IsIG5Db2xvcikpOwotCi0JU01UQ193cml0ZTJEcmVnKERFX0RFU1RJTkFUSU9OLAotCQkJRklFTERfU0VUKDAsIERFX0RFU1RJTkFUSU9OLCBXUkFQLCBESVNBQkxFKSB8Ci0JCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWCwgZHN0X1gpIHwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBZLCBkc3RfWSkpOwotCi0JU01UQ193cml0ZTJEcmVnKERFX0RJTUVOU0lPTiwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWCwgZHN0X3dpZHRoKSB8Ci0JCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFlfRVQsIGRzdF9oZWlnaHQpKTsKLQotCVNNVENfd3JpdGUyRHJlZyhERV9DT05UUk9MLAotCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFNUQVRVUywgU1RBUlQpIHwKLQkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBESVJFQ1RJT04sIExFRlRfVE9fUklHSFQpIHwKLQkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBMQVNUX1BJWEVMLCBPRkYpIHwKLQkJCUZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBDT01NQU5ELCBSRUNUQU5HTEVfRklMTCkgfAotCQkJRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFJPUF9TRUxFQ1QsIFJPUDIpIHwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX0NPTlRST0wsIFJPUCwgMHgwQykpOwotCi0Jc210Y19kZV9idXN5ID0gMTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiBkZVJvdGF0ZVBhdHRlcm4KLSAqCi0gKiBQdXJwb3NlCi0gKiAgICBSb3RhdGUgdGhlIGdpdmVuIHBhdHRlcm4gaWYgbmVjZXNzYXJ5Ci0gKgotICogUGFyYW1ldGVycwotICogICAgW2luXQotICoJICAgcFBhdHRlcm4gIC0gUG9pbnRlciB0byBERV9TVVJGQUNFIHN0cnVjdHVyZSBjb250YWluaW5nCi0gKgkJICAgICAgIHBhdHRlcm4gYXR0cmlidXRlcwotICoJICAgcGF0dGVyblggIC0gWCBwb3NpdGlvbiAoMC03KSBvZiBwYXR0ZXJuIG9yaWdpbgotICoJICAgcGF0dGVyblkgIC0gWSBwb3NpdGlvbiAoMC03KSBvZiBwYXR0ZXJuIG9yaWdpbgotICoKLSAqICAgIFtvdXRdCi0gKgkgICBwYXR0ZXJuX2RzdGFkZHIgLSBQb2ludGVyIHRvIHByZS1hbGxvY2F0ZWQgYnVmZmVyIGNvbnRhaW5pbmcKLSAqCSAgIHJvdGF0ZWQgcGF0dGVybgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCBkZVJvdGF0ZVBhdHRlcm4odW5zaWduZWQgY2hhciAqcGF0dGVybl9kc3RhZGRyLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgcGF0dGVybl9zcmNfYWRkciwKLQkJICAgICB1bnNpZ25lZCBsb25nIHBhdHRlcm5fQlBQLAotCQkgICAgIHVuc2lnbmVkIGxvbmcgcGF0dGVybl9zdHJpZGUsIGludCBwYXR0ZXJuWCwgaW50IHBhdHRlcm5ZKQotewotCXVuc2lnbmVkIGludCBpOwotCXVuc2lnbmVkIGxvbmcgcGF0dGVybltQQVRURVJOX1dJRFRIICogUEFUVEVSTl9IRUlHSFRdOwotCXVuc2lnbmVkIGludCB4LCB5OwotCXVuc2lnbmVkIGNoYXIgKnBqUGF0Qnl0ZTsKLQotCWlmIChwYXR0ZXJuX2RzdGFkZHIgIT0gTlVMTCkgewotCQlkZVdhaXRGb3JOb3RCdXN5KCk7Ci0KLQkJaWYgKHBhdHRlcm5YIHx8IHBhdHRlcm5ZKSB7Ci0JCQkvKiBSb3RhdGUgcGF0dGVybiAqLwotCQkJcGpQYXRCeXRlID0gKHVuc2lnbmVkIGNoYXIgKilwYXR0ZXJuOwotCi0JCQlzd2l0Y2ggKHBhdHRlcm5fQlBQKSB7Ci0JCQljYXNlIDg6Ci0JCQkJewotCQkJCQlmb3IgKHkgPSAwOyB5IDwgODsgeSsrKSB7Ci0JCQkJCQl1bnNpZ25lZCBjaGFyICpwakJ1ZmZlciA9Ci0JCQkJCQkgICAgcGF0dGVybl9kc3RhZGRyICsKLQkJCQkJCSAgICAoKHBhdHRlcm5ZICsgeSkgJiA3KSAqIDg7Ci0JCQkJCQlmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7Ci0JCQkJCQkJcGpCdWZmZXJbKHBhdHRlcm5YICsKLQkJCQkJCQkJICB4KSAmIDddID0KLQkJCQkJCQkgICAgcGpQYXRCeXRlW3hdOwotCQkJCQkJfQotCQkJCQkJcGpQYXRCeXRlICs9IHBhdHRlcm5fc3RyaWRlOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJY2FzZSAxNjoKLQkJCQl7Ci0JCQkJCWZvciAoeSA9IDA7IHkgPCA4OyB5KyspIHsKLQkJCQkJCXVuc2lnbmVkIHNob3J0ICpwakJ1ZmZlciA9Ci0JCQkJCQkgICAgKHVuc2lnbmVkIHNob3J0ICopCi0JCQkJCQkgICAgcGF0dGVybl9kc3RhZGRyICsKLQkJCQkJCSAgICAoKHBhdHRlcm5ZICsgeSkgJiA3KSAqIDg7Ci0JCQkJCQlmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7Ci0JCQkJCQkJcGpCdWZmZXJbKHBhdHRlcm5YICsKLQkJCQkJCQkJICB4KSAmIDddID0KLQkJCQkJCQkgICAgKCh1bnNpZ25lZCBzaG9ydCAqKQotCQkJCQkJCSAgICAgcGpQYXRCeXRlKVt4XTsKLQkJCQkJCX0KLQkJCQkJCXBqUGF0Qnl0ZSArPSBwYXR0ZXJuX3N0cmlkZTsKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0KLQkJCWNhc2UgMzI6Ci0JCQkJewotCQkJCQlmb3IgKHkgPSAwOyB5IDwgODsgeSsrKSB7Ci0JCQkJCQl1bnNpZ25lZCBsb25nICpwakJ1ZmZlciA9Ci0JCQkJCQkgICAgKHVuc2lnbmVkIGxvbmcgKikKLQkJCQkJCSAgICBwYXR0ZXJuX2RzdGFkZHIgKwotCQkJCQkJICAgICgocGF0dGVyblkgKyB5KSAmIDcpICogODsKLQkJCQkJCWZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsKLQkJCQkJCQlwakJ1ZmZlclsocGF0dGVyblggKwotCQkJCQkJCQkgIHgpICYgN10gPQotCQkJCQkJCSAgICAoKHVuc2lnbmVkIGxvbmcgKikKLQkJCQkJCQkgICAgIHBqUGF0Qnl0ZSlbeF07Ci0JCQkJCQl9Ci0JCQkJCQlwalBhdEJ5dGUgKz0gcGF0dGVybl9zdHJpZGU7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9IGVsc2UgewotCQkJLypEb24ndCByb3RhdGUsanVzdCBjb3B5IHBhdHRlcm4gaW50byBwYXR0ZXJuX2RzdGFkZHIqLwotCQkJZm9yIChpID0gMDsgaSA8IChwYXR0ZXJuX0JQUCAqIDIpOyBpKyspIHsKLQkJCQkoKHVuc2lnbmVkIGxvbmcgKilwYXR0ZXJuX2RzdGFkZHIpW2ldID0KLQkJCQkgICAgcGF0dGVybltpXTsKLQkJCX0KLQkJfQotCi0JfQotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoKLSAqIGRlQ29weQotICoKLSAqIFB1cnBvc2UKLSAqICAgIENvcHkgYSByZWN0YW5ndWxhciBhcmVhIG9mIHRoZSBzb3VyY2Ugc3VyZmFjZSB0byBhIGRlc3RpbmF0aW9uIHN1cmZhY2UKLSAqCi0gKiBSZW1hcmtzCi0gKiAgICBTb3VyY2UgYml0bWFwIG11c3QgaGF2ZSB0aGUgc2FtZSBjb2xvciBkZXB0aCAoQlBQKSBhcyB0aGUgZGVzdGluYXRpb24KLSAqICAgIGJpdG1hcC4KLSAqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotdm9pZCBkZUNvcHkodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKLQkgICAgdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCi0JICAgIHVuc2lnbmVkIGxvbmcgZHN0X0JQUCwKLQkgICAgdW5zaWduZWQgbG9uZyBkc3RfWCwKLQkgICAgdW5zaWduZWQgbG9uZyBkc3RfWSwKLQkgICAgdW5zaWduZWQgbG9uZyBkc3Rfd2lkdGgsCi0JICAgIHVuc2lnbmVkIGxvbmcgZHN0X2hlaWdodCwKLQkgICAgdW5zaWduZWQgbG9uZyBzcmNfYmFzZSwKLQkgICAgdW5zaWduZWQgbG9uZyBzcmNfcGl0Y2gsCi0JICAgIHVuc2lnbmVkIGxvbmcgc3JjX1gsCi0JICAgIHVuc2lnbmVkIGxvbmcgc3JjX1ksIHBUcmFuc3BhcmVudCBwVHJhbnNwLCB1bnNpZ25lZCBjaGFyIG5ST1AyKQotewotCXVuc2lnbmVkIGxvbmcgbkRpcmVjdGlvbiA9IDA7Ci0JdW5zaWduZWQgbG9uZyBuVHJhbnNwYXJlbnQgPSAwOwotCS8qIERpcmVjdGlvbiBvZiBST1AyIG9wZXJhdGlvbjoKLQkgKiAxID0gTGVmdCB0byBSaWdodCwKLQkgKiAoLTEpID0gUmlnaHQgdG8gTGVmdAotCSAqLwotCXVuc2lnbmVkIGxvbmcgb3BTaWduID0gMTsKLQkvKiB4V2lkdGggaXMgaW4gcGl4ZWxzICovCi0JdW5zaWduZWQgbG9uZyB4V2lkdGggPSAxOTIgLyAoZHN0X0JQUCAvIDgpOwotCXVuc2lnbmVkIGxvbmcgZGVfY3RybCA9IDA7Ci0KLQlkZVdhaXRGb3JOb3RCdXN5KCk7Ci0KLQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsCi0JCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRSwgQUREUkVTUywKLQkJCQkgICAgZHN0X2Jhc2UpKTsKLQotCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfU09VUkNFX0JBU0UsCi0JCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfU09VUkNFX0JBU0UsIEFERFJFU1MsCi0JCQkJICAgIHNyY19iYXNlKSk7Ci0KLQlpZiAoZHN0X3BpdGNoICYmIHNyY19waXRjaCkgewotCQlTTVRDX3dyaXRlMkRyZWcoREVfUElUQ0gsCi0JCQlGSUVMRF9WQUxVRSgwLCBERV9QSVRDSCwgREVTVElOQVRJT04sCi0JCQkJICAgIGRzdF9waXRjaCkgfCBGSUVMRF9WQUxVRSgwLAotCQkJCQkJICAgICBERV9QSVRDSCwKLQkJCQkJCSAgICAgU09VUkNFLAotCQkJCQkJICAgICBzcmNfcGl0Y2gpKTsKLQotCQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX1dJRFRILAotCQkJRklFTERfVkFMVUUoMCwgREVfV0lORE9XX1dJRFRILCBERVNUSU5BVElPTiwKLQkJCQkgICAgZHN0X3BpdGNoKSB8IEZJRUxEX1ZBTFVFKDAsCi0JCQkJCQkgICAgIERFX1dJTkRPV19XSURUSCwKLQkJCQkJCSAgICAgU09VUkNFLAotCQkJCQkJICAgICBzcmNfcGl0Y2gpKTsKLQl9Ci0KLQkvKiBTZXQgdHJhbnNwYXJlbnQgYml0cyBpZiBuZWNlc3NhcnkgKi8KLQlpZiAocFRyYW5zcCAhPSBOVUxMKSB7Ci0JCW5UcmFuc3BhcmVudCA9Ci0JCSAgICBwVHJhbnNwLT5tYXRjaCB8IHBUcmFuc3AtPnNlbGVjdCB8IHBUcmFuc3AtPmNvbnRyb2w7Ci0KLQkJLyogU2V0IGNvbG9yIGNvbXBhcmUgcmVnaXN0ZXIgKi8KLQkJU01UQ193cml0ZTJEcmVnKERFX0NPTE9SX0NPTVBBUkUsCi0JCQkJRklFTERfVkFMVUUoMCwgREVfQ09MT1JfQ09NUEFSRSwgQ09MT1IsCi0JCQkJCSAgICBwVHJhbnNwLT5jb2xvcikpOwotCX0KLQotCS8qIERldGVybWluZSBkaXJlY3Rpb24gb2Ygb3BlcmF0aW9uICovCi0JaWYgKHNyY19ZIDwgZHN0X1kpIHsKLQkJLyogKy0tLS0tLS0tLS0rCi0JCSAgIHxTICAgICAgICAgfAotCQkgICB8ICAgICAgICAgICstLS0tLS0tLS0tKwotCQkgICB8ICAgICAgICAgIHwgICAgICB8ICAgfAotCQkgICB8ICAgICAgICAgIHwgICAgICB8ICAgfAotCQkgICArLS0tfC0tLS0tLSsgICAgICB8Ci0JCSAgIHwgICAgICAgICAgICAgICBEIHwKLQkJICAgKy0tLS0tLS0tLS0rICovCi0KLQkJbkRpcmVjdGlvbiA9IEJPVFRPTV9UT19UT1A7Ci0JfSBlbHNlIGlmIChzcmNfWSA+IGRzdF9ZKSB7Ci0JCS8qICstLS0tLS0tLS0tKwotCQkgICB8RCAgICAgICAgIHwKLQkJICAgfCAgICAgICAgICArLS0tLS0tLS0tLSsKLQkJICAgfCAgICAgICAgICB8ICAgICAgfCAgIHwKLQkJICAgfCAgICAgICAgICB8ICAgICAgfCAgIHwKLQkJICAgKy0tLXwtLS0tLS0rICAgICAgfAotCQkgICB8ICAgICAgICAgICAgICAgUyB8Ci0JCSAgICstLS0tLS0tLS0tKyAqLwotCi0JCW5EaXJlY3Rpb24gPSBUT1BfVE9fQk9UVE9NOwotCX0gZWxzZSB7Ci0JCS8qIHNyY19ZID09IGRzdF9ZICovCi0KLQkJaWYgKHNyY19YIDw9IGRzdF9YKSB7Ci0JCQkvKiArLS0tLS0tKy0tLSstLS0tLS0rCi0JCQkgICB8UyAgICAgfCAgIHwgICAgIER8Ci0JCQkgICB8ICAgICAgfCAgIHwgICAgICB8Ci0JCQkgICB8ICAgICAgfCAgIHwgICAgICB8Ci0JCQkgICB8ICAgICAgfCAgIHwgICAgICB8Ci0JCQkgICArLS0tLS0tKy0tLSstLS0tLS0rICovCi0KLQkJCW5EaXJlY3Rpb24gPSBSSUdIVF9UT19MRUZUOwotCQl9IGVsc2UgewotCQkJLyogc3JjX1ggPiBkc3RfWCAqLwotCi0JCQkvKiArLS0tLS0tKy0tLSstLS0tLS0rCi0JCQkgICB8RCAgICAgfCAgIHwgICAgIFN8Ci0JCQkgICB8ICAgICAgfCAgIHwgICAgICB8Ci0JCQkgICB8ICAgICAgfCAgIHwgICAgICB8Ci0JCQkgICB8ICAgICAgfCAgIHwgICAgICB8Ci0JCQkgICArLS0tLS0tKy0tLSstLS0tLS0rICovCi0KLQkJCW5EaXJlY3Rpb24gPSBMRUZUX1RPX1JJR0hUOwotCQl9Ci0JfQotCi0JaWYgKChuRGlyZWN0aW9uID09IEJPVFRPTV9UT19UT1ApIHx8IChuRGlyZWN0aW9uID09IFJJR0hUX1RPX0xFRlQpKSB7Ci0JCXNyY19YICs9IGRzdF93aWR0aCAtIDE7Ci0JCXNyY19ZICs9IGRzdF9oZWlnaHQgLSAxOwotCQlkc3RfWCArPSBkc3Rfd2lkdGggLSAxOwotCQlkc3RfWSArPSBkc3RfaGVpZ2h0IC0gMTsKLQkJb3BTaWduID0gKC0xKTsKLQl9Ci0KLQlpZiAoZHN0X0JQUCA+PSAyNCkgewotCQlzcmNfWCAqPSAzOwotCQlzcmNfWSAqPSAzOwotCQlkc3RfWCAqPSAzOwotCQlkc3RfWSAqPSAzOwotCQlkc3Rfd2lkdGggKj0gMzsKLQkJaWYgKChuRGlyZWN0aW9uID09IEJPVFRPTV9UT19UT1ApCi0JCSAgICB8fCAobkRpcmVjdGlvbiA9PSBSSUdIVF9UT19MRUZUKSkgewotCQkJc3JjX1ggKz0gMjsKLQkJCWRzdF9YICs9IDI7Ci0JCX0KLQl9Ci0KLQkvKiBXb3JrYXJvdW5kIGZvciAxOTIgYnl0ZSBodyBidWcgKi8KLQlpZiAoKG5ST1AyICE9IDB4MEMpICYmICgoZHN0X3dpZHRoICogKGRzdF9CUFAgLyA4KSkgPj0gMTkyKSkgewotCQkvKgotCQkgKiBQZXJmb3JtIHRoZSBST1AyIG9wZXJhdGlvbiBpbiBjaHVua3Mgb2YgKHhXaWR0aCAqCi0JCSAqIGRzdF9oZWlnaHQpCi0JCSAqLwotCQl3aGlsZSAoMSkgewotCQkJZGVXYWl0Rm9yTm90QnVzeSgpOwotCi0JCQlTTVRDX3dyaXRlMkRyZWcoREVfU09VUkNFLAotCQkJCUZJRUxEX1NFVCgwLCBERV9TT1VSQ0UsIFdSQVAsIERJU0FCTEUpIHwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9TT1VSQ0UsIFhfSzEsIHNyY19YKSB8Ci0JCQkJRklFTERfVkFMVUUoMCwgREVfU09VUkNFLCBZX0syLCBzcmNfWSkpOwotCi0JCQlTTVRDX3dyaXRlMkRyZWcoREVfREVTVElOQVRJT04sCi0JCQkJRklFTERfU0VUKDAsIERFX0RFU1RJTkFUSU9OLCBXUkFQLAotCQkJCSAgRElTQUJMRSkgfCBGSUVMRF9WQUxVRSgwLAotCQkJCQkJCSBERV9ERVNUSU5BVElPTiwKLQkJCQkJCQkgWCwKLQkJCQkJCQkgZHN0X1gpCi0JCQl8IEZJRUxEX1ZBTFVFKDAsIERFX0RFU1RJTkFUSU9OLCBZLAotCQkJCQkJICAgICAgZHN0X1kpKTsKLQotCQkJU01UQ193cml0ZTJEcmVnKERFX0RJTUVOU0lPTiwKLQkJCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFgsCi0JCQkJICAgIHhXaWR0aCkgfCBGSUVMRF9WQUxVRSgwLAotCQkJCQkJCSAgREVfRElNRU5TSU9OLAotCQkJCQkJCSAgWV9FVCwKLQkJCQkJCQkgIGRzdF9oZWlnaHQpKTsKLQotCQkJZGVfY3RybCA9Ci0JCQkgICAgRklFTERfVkFMVUUoMCwgREVfQ09OVFJPTCwgUk9QLAotCQkJCW5ST1AyKSB8IG5UcmFuc3BhcmVudCB8IEZJRUxEX1NFVCgwLAotCQkJCQkJCSAgREVfQ09OVFJPTCwKLQkJCQkJCQkgIFJPUF9TRUxFQ1QsCi0JCQkJCQkJICBST1AyKQotCQkJICAgIHwgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIENPTU1BTkQsCi0JCQkJQklUQkxUKSB8ICgobkRpcmVjdGlvbiA9PQotCQkJCQkgICAgMSkgPyBGSUVMRF9TRVQoMCwKLQkJCQkJCSAgIERFX0NPTlRST0wsCi0JCQkJCQkgICBESVJFQ1RJT04sCi0JCQkJCQkgICBSSUdIVF9UT19MRUZUKQotCQkJCQkgICA6IEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLAotCQkJCQkgICAgICAgRElSRUNUSU9OLAotCQkJCQkgICAgICAgTEVGVF9UT19SSUdIVCkpIHwKLQkJCSAgICBGSUVMRF9TRVQoMCwgREVfQ09OVFJPTCwgU1RBVFVTLCBTVEFSVCk7Ci0KLQkJCVNNVENfd3JpdGUyRHJlZyhERV9DT05UUk9MLCBkZV9jdHJsKTsKLQotCQkJc3JjX1ggKz0gKG9wU2lnbiAqIHhXaWR0aCk7Ci0JCQlkc3RfWCArPSAob3BTaWduICogeFdpZHRoKTsKLQkJCWRzdF93aWR0aCAtPSB4V2lkdGg7Ci0KLQkJCWlmIChkc3Rfd2lkdGggPD0gMCkgewotCQkJCS8qIFJPUDIgb3BlcmF0aW9uIGlzIGNvbXBsZXRlICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJCWlmICh4V2lkdGggPiBkc3Rfd2lkdGgpCi0JCQkJeFdpZHRoID0gZHN0X3dpZHRoOwotCQl9Ci0JfSBlbHNlIHsKLQkJZGVXYWl0Rm9yTm90QnVzeSgpOwotCQlTTVRDX3dyaXRlMkRyZWcoREVfU09VUkNFLAotCQkJRklFTERfU0VUKDAsIERFX1NPVVJDRSwgV1JBUCwgRElTQUJMRSkgfAotCQkJRklFTERfVkFMVUUoMCwgREVfU09VUkNFLCBYX0sxLCBzcmNfWCkgfAotCQkJRklFTERfVkFMVUUoMCwgREVfU09VUkNFLCBZX0syLCBzcmNfWSkpOwotCi0JCVNNVENfd3JpdGUyRHJlZyhERV9ERVNUSU5BVElPTiwKLQkJCUZJRUxEX1NFVCgwLCBERV9ERVNUSU5BVElPTiwgV1JBUCwgRElTQUJMRSkgfAotCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFgsIGRzdF9YKSB8Ci0JCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWSwgZHN0X1kpKTsKLQotCQlTTVRDX3dyaXRlMkRyZWcoREVfRElNRU5TSU9OLAotCQkJRklFTERfVkFMVUUoMCwgREVfRElNRU5TSU9OLCBYLCBkc3Rfd2lkdGgpIHwKLQkJCUZJRUxEX1ZBTFVFKDAsIERFX0RJTUVOU0lPTiwgWV9FVCwgZHN0X2hlaWdodCkpOwotCi0JCWRlX2N0cmwgPSBGSUVMRF9WQUxVRSgwLCBERV9DT05UUk9MLCBST1AsIG5ST1AyKSB8Ci0JCSAgICBuVHJhbnNwYXJlbnQgfAotCQkgICAgRklFTERfU0VUKDAsIERFX0NPTlRST0wsIFJPUF9TRUxFQ1QsIFJPUDIpIHwKLQkJICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBDT01NQU5ELCBCSVRCTFQpIHwKLQkJICAgICgobkRpcmVjdGlvbiA9PSAxKSA/IEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBESVJFQ1RJT04sCi0JCQkJCQkgICBSSUdIVF9UT19MRUZUKQotCQkgICAgIDogRklFTERfU0VUKDAsIERFX0NPTlRST0wsIERJUkVDVElPTiwKLQkJCQkgTEVGVF9UT19SSUdIVCkpIHwgRklFTERfU0VUKDAsIERFX0NPTlRST0wsCi0JCQkJCQkJICAgICBTVEFUVVMsIFNUQVJUKTsKLQkJU01UQ193cml0ZTJEcmVnKERFX0NPTlRST0wsIGRlX2N0cmwpOwotCX0KLQotCXNtdGNfZGVfYnVzeSA9IDE7Ci19Ci0KLS8qCi0gKiBUaGlzIGZ1bmN0aW9uIHNldHMgdGhlIHBpeGVsIGZvcm1hdCB0aGF0IHdpbGwgYXBwbHkgdG8gdGhlIDJEIEVuZ2luZS4KLSAqLwotdm9pZCBkZVNldFBpeGVsRm9ybWF0KHVuc2lnbmVkIGxvbmcgYnBwKQotewotCXVuc2lnbmVkIGxvbmcgZGVfZm9ybWF0OwotCi0JZGVfZm9ybWF0ID0gU01UQ19yZWFkMkRyZWcoREVfU1RSRVRDSF9GT1JNQVQpOwotCi0Jc3dpdGNoIChicHApIHsKLQljYXNlIDg6Ci0JCWRlX2Zvcm1hdCA9Ci0JCSAgICBGSUVMRF9TRVQoZGVfZm9ybWF0LCBERV9TVFJFVENIX0ZPUk1BVCwgUElYRUxfRk9STUFULCA4KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQljYXNlIDE2OgotCQlkZV9mb3JtYXQgPQotCQkgICAgRklFTERfU0VUKGRlX2Zvcm1hdCwgREVfU1RSRVRDSF9GT1JNQVQsIFBJWEVMX0ZPUk1BVCwgMTYpOwotCQlicmVhazsKLQljYXNlIDMyOgotCQlkZV9mb3JtYXQgPQotCQkgICAgRklFTERfU0VUKGRlX2Zvcm1hdCwgREVfU1RSRVRDSF9GT1JNQVQsIFBJWEVMX0ZPUk1BVCwgMzIpOwotCQlicmVhazsKLQl9Ci0KLQlTTVRDX3dyaXRlMkRyZWcoREVfU1RSRVRDSF9GT1JNQVQsIGRlX2Zvcm1hdCk7Ci19Ci0KLS8qCi0gKiBTeXN0ZW0gbWVtb3J5IHRvIFZpZGVvIG1lbW9yeSBtb25vY2hyb21lIGV4cGFuc2lvbi4KLSAqCi0gKiBTb3VyY2UgaXMgbW9ub2Nocm9tZSBpbWFnZSBpbiBzeXN0ZW0gbWVtb3J5LiAgVGhpcyBmdW5jdGlvbiBleHBhbmRzIHRoZQotICogbW9ub2Nocm9tZSBkYXRhIHRvIGNvbG9yIGltYWdlIGluIHZpZGVvIG1lbW9yeS4KLSAqLwotCi1sb25nIGRlU3lzdGVtTWVtMlZpZGVvTWVtTW9ub0JsdChjb25zdCBjaGFyICpwU3JjYnVmLAotCQkJCSBsb25nIHNyY0RlbHRhLAotCQkJCSB1bnNpZ25lZCBsb25nIHN0YXJ0Qml0LAotCQkJCSB1bnNpZ25lZCBsb25nIGRCYXNlLAotCQkJCSB1bnNpZ25lZCBsb25nIGRQaXRjaCwKLQkJCQkgdW5zaWduZWQgbG9uZyBicHAsCi0JCQkJIHVuc2lnbmVkIGxvbmcgZHgsIHVuc2lnbmVkIGxvbmcgZHksCi0JCQkJIHVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LAotCQkJCSB1bnNpZ25lZCBsb25nIGZDb2xvciwKLQkJCQkgdW5zaWduZWQgbG9uZyBiQ29sb3IsCi0JCQkJIHVuc2lnbmVkIGxvbmcgcm9wMikgewotCXVuc2lnbmVkIGxvbmcgYnl0ZVBlclBpeGVsOwotCXVuc2lnbmVkIGxvbmcgdWxCeXRlc1BlclNjYW47Ci0JdW5zaWduZWQgbG9uZyB1bDRCeXRlc1BlclNjYW47Ci0JdW5zaWduZWQgbG9uZyB1bEJ5dGVzUmVtYWluOwotCXVuc2lnbmVkIGxvbmcgZGVfY3RybCA9IDA7Ci0JdW5zaWduZWQgY2hhciBhalJlbWFpbls0XTsKLQlsb25nIGksIGo7Ci0KLQlieXRlUGVyUGl4ZWwgPSBicHAgLyA4OwotCi0JLyogSnVzdCBtYWtlIHN1cmUgdGhlIHN0YXJ0IGJpdCBpcyB3aXRoaW4gbGVnYWwgcmFuZ2UgKi8KLQlzdGFydEJpdCAmPSA3OwotCi0JdWxCeXRlc1BlclNjYW4gPSAod2lkdGggKyBzdGFydEJpdCArIDcpIC8gODsKLQl1bDRCeXRlc1BlclNjYW4gPSB1bEJ5dGVzUGVyU2NhbiAmIH4zOwotCXVsQnl0ZXNSZW1haW4gPSB1bEJ5dGVzUGVyU2NhbiAmIDM7Ci0KLQlpZiAoc210Y19kZV9idXN5KQotCQlkZVdhaXRGb3JOb3RCdXN5KCk7Ci0KLQkvKgotCSAqIDJEIFNvdXJjZSBCYXNlLiAgVXNlIDAgZm9yIEhPU1QgQmx0LgotCSAqLwotCi0JU01UQ193cml0ZTJEcmVnKERFX1dJTkRPV19TT1VSQ0VfQkFTRSwgMCk7Ci0KLQkvKgotCSAqIDJEIERlc3RpbmF0aW9uIEJhc2UuCi0JICoKLQkgKiBJdCBpcyBhbiBhZGRyZXNzIG9mZnNldCAoMTI4IGJpdCBhbGlnbmVkKSBmcm9tIHRoZSBiZWdpbm5pbmcgb2YKLQkgKiBmcmFtZSBidWZmZXIuCi0JICovCi0KLQlTTVRDX3dyaXRlMkRyZWcoREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UsIGRCYXNlKTsKLQotCWlmIChkUGl0Y2gpIHsKLQotCQkvKgotCQkgKiBQcm9ncmFtIHBpdGNoIChkaXN0YW5jZSBiZXR3ZWVuIHRoZSAxc3QgcG9pbnRzIG9mIHR3bwotCQkgKiBhZGphY2VudCBsaW5lcykuCi0JCSAqCi0JCSAqIE5vdGUgdGhhdCBpbnB1dCBwaXRjaCBpcyBCWVRFIHZhbHVlLCBidXQgdGhlIDJEIFBpdGNoCi0JCSAqIHJlZ2lzdGVyIHVzZXMgcGl4ZWwgdmFsdWVzLiBOZWVkIEJ5dGUgdG8gcGl4ZWwgY29udmVydGlvbi4KLQkJICovCi0KLQkJU01UQ193cml0ZTJEcmVnKERFX1BJVENILAotCQkJRklFTERfVkFMVUUoMCwgREVfUElUQ0gsIERFU1RJTkFUSU9OLAotCQkJICAgIGRQaXRjaCAvCi0JCQkgICAgYnl0ZVBlclBpeGVsKSB8IEZJRUxEX1ZBTFVFKDAsCi0JCQkJCQkJREVfUElUQ0gsCi0JCQkJCQkJU09VUkNFLAotCQkJCQkJCWRQaXRjaCAvCi0JCQkJCQkJYnl0ZVBlclBpeGVsKSk7Ci0KLQkJLyogU2NyZWVuIFdpbmRvdyB3aWR0aCBpbiBQaXhlbHMuCi0JCSAqCi0JCSAqIDJEIGVuZ2luZSB1c2VzIHRoaXMgdmFsdWUgdG8gY2FsY3VsYXRlIHRoZSBsaW5lYXIgYWRkcmVzcyBpbgotCQkgKiBmcmFtZSBidWZmZXIgZm9yIGEgZ2l2ZW4gcG9pbnQuCi0JCSAqLwotCi0JCVNNVENfd3JpdGUyRHJlZyhERV9XSU5ET1dfV0lEVEgsCi0JCQlGSUVMRF9WQUxVRSgwLCBERV9XSU5ET1dfV0lEVEgsIERFU1RJTkFUSU9OLAotCQkJICAgIChkUGl0Y2ggLwotCQkJICAgICBieXRlUGVyUGl4ZWwpKSB8IEZJRUxEX1ZBTFVFKDAsCi0JCQkJCQkJICBERV9XSU5ET1dfV0lEVEgsCi0JCQkJCQkJICBTT1VSQ0UsCi0JCQkJCQkJICAoZFBpdGNoCi0JCQkJCQkJICAgLwotCQkJCQkJCSAgIGJ5dGVQZXJQaXhlbCkpKTsKLQl9Ci0JLyogTm90ZTogRm9yIDJEIFNvdXJjZSBpbiBIb3N0IFdyaXRlLCBvbmx5IFhfSzEgZmllbGQgaXMgbmVlZGVkLCBhbmQKLQkgKiBZX0syIGZpZWxkIGlzIG5vdCB1c2VkLiBGb3IgbW9ubyBiaXRtYXAsIHVzZSBzdGFydEJpdCBmb3IgWF9LMS4KLQkgKi8KLQotCVNNVENfd3JpdGUyRHJlZyhERV9TT1VSQ0UsCi0JCQlGSUVMRF9TRVQoMCwgREVfU09VUkNFLCBXUkFQLCBESVNBQkxFKSB8Ci0JCQlGSUVMRF9WQUxVRSgwLCBERV9TT1VSQ0UsIFhfSzEsIHN0YXJ0Qml0KSB8Ci0JCQlGSUVMRF9WQUxVRSgwLCBERV9TT1VSQ0UsIFlfSzIsIDApKTsKLQotCVNNVENfd3JpdGUyRHJlZyhERV9ERVNUSU5BVElPTiwKLQkJCUZJRUxEX1NFVCgwLCBERV9ERVNUSU5BVElPTiwgV1JBUCwgRElTQUJMRSkgfAotCQkJRklFTERfVkFMVUUoMCwgREVfREVTVElOQVRJT04sIFgsIGR4KSB8Ci0JCQlGSUVMRF9WQUxVRSgwLCBERV9ERVNUSU5BVElPTiwgWSwgZHkpKTsKLQotCVNNVENfd3JpdGUyRHJlZyhERV9ESU1FTlNJT04sCi0JCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFgsIHdpZHRoKSB8Ci0JCQlGSUVMRF9WQUxVRSgwLCBERV9ESU1FTlNJT04sIFlfRVQsIGhlaWdodCkpOwotCi0JU01UQ193cml0ZTJEcmVnKERFX0ZPUkVHUk9VTkQsIGZDb2xvcik7Ci0JU01UQ193cml0ZTJEcmVnKERFX0JBQ0tHUk9VTkQsIGJDb2xvcik7Ci0KLQlpZiAoYnBwKQotCQlkZVNldFBpeGVsRm9ybWF0KGJwcCk7Ci0JLyogU2V0IHRoZSBwaXhlbCBmb3JtYXQgb2YgdGhlIGRlc3RpbmF0aW9uICovCi0KLQlkZV9jdHJsID0gRklFTERfVkFMVUUoMCwgREVfQ09OVFJPTCwgUk9QLCByb3AyKSB8Ci0JICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBST1BfU0VMRUNULCBST1AyKSB8Ci0JICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBDT01NQU5ELCBIT1NUX1dSSVRFKSB8Ci0JICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBIT1NULCBNT05PKSB8Ci0JICAgIEZJRUxEX1NFVCgwLCBERV9DT05UUk9MLCBTVEFUVVMsIFNUQVJUKTsKLQotCVNNVENfd3JpdGUyRHJlZyhERV9DT05UUk9MLCBkZV9jdHJsIHwgZGVHZXRUcmFuc3BhcmVuY3koKSk7Ci0KLQkvKiBXcml0ZSBNT05PIGRhdGEgKGxpbmUgYnkgbGluZSkgdG8gMkQgRW5naW5lIGRhdGEgcG9ydCAqLwotCWZvciAoaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykgewotCQkvKiBGb3IgZWFjaCBsaW5lLCBzZW5kIHRoZSBkYXRhIGluIGNodW5rcyBvZiA0IGJ5dGVzICovCi0JCWZvciAoaiA9IDA7IGogPCAodWw0Qnl0ZXNQZXJTY2FuIC8gNCk7IGorKykKLQkJCVNNVENfd3JpdGUyRGRhdGFwb3J0KDAsCi0JCQkJCSAgICAgKih1bnNpZ25lZCBsb25nICopKHBTcmNidWYgKwotCQkJCQkJCQkoaiAqIDQpKSk7Ci0KLQkJaWYgKHVsQnl0ZXNSZW1haW4pIHsKLQkJCW1lbWNweShhalJlbWFpbiwgcFNyY2J1ZiArIHVsNEJ5dGVzUGVyU2NhbiwKLQkJCSAgICAgICB1bEJ5dGVzUmVtYWluKTsKLQkJCVNNVENfd3JpdGUyRGRhdGFwb3J0KDAsICoodW5zaWduZWQgbG9uZyAqKWFqUmVtYWluKTsKLQkJfQotCi0JCXBTcmNidWYgKz0gc3JjRGVsdGE7Ci0JfQotCXNtdGNfZGVfYnVzeSA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgdHJhbnNwYXJlbmN5IHN0YXR1cyBmcm9tIERFX0NPTlRST0wgcmVnaXN0ZXIuCi0gKiBJdCByZXR1cm5zIGEgZG91YmxlIHdvcmQgd2l0aCB0aGUgdHJhbnNwYXJlbnQgZmllbGRzIHByb3Blcmx5IHNldCwKLSAqIHdoaWxlIG90aGVyIGZpZWxkcyBhcmUgMC4KLSAqLwotdW5zaWduZWQgbG9uZyBkZUdldFRyYW5zcGFyZW5jeSh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZGVfY3RybDsKLQotCWRlX2N0cmwgPSBTTVRDX3JlYWQyRHJlZyhERV9DT05UUk9MKTsKLQotCWRlX2N0cmwgJj0KLQkgICAgRklFTERfTUFTSyhERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9NQVRDSCkgfAotCSAgICBGSUVMRF9NQVNLKERFX0NPTlRST0xfVFJBTlNQQVJFTkNZX1NFTEVDVCkgfAotCSAgICBGSUVMRF9NQVNLKERFX0NPTlRST0xfVFJBTlNQQVJFTkNZKTsKLQotCXJldHVybiBkZV9jdHJsOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5oIGIvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGMyZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMmI0ZmEyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjMmQuaAorKysgL2Rldi9udWxsCkBAIC0xLDUzMCArMCwwIEBACi0vKgotICogU2lsaWNvbiBNb3Rpb24gU003MTIgMkQgZHJhd2luZyBlbmdpbmUgZnVuY3Rpb25zLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBTaWxpY29uIE1vdGlvbiBUZWNobm9sb2d5IENvcnAuCi0gKiBBdXRob3I6IEdlIFdhbmcsIGdld2FuZ0BzaWxpY29ubW90aW9uLmNvbQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBMZW1vdGUsIEluYy4KLSAqIEF1dGhvcjogV3UgWmhhbmdqaW4sIHd1emhhbmdqaW5AZ21haWwuY29tCi0gKgotICogIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZS4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKLSAqICBtb3JlIGRldGFpbHMuCi0gKi8KLQotI2lmbmRlZiBOVUxMCi0jZGVmaW5lIE5VTEwJIDAKLSNlbmRpZgotCi0vKiBJbnRlcm5hbCBtYWNyb3MgKi8KLQotI2RlZmluZSBfRl9TVEFSVChmKQkJKDAgPyBmKQotI2RlZmluZSBfRl9FTkQoZikJCSgxID8gZikKLSNkZWZpbmUgX0ZfU0laRShmKQkJKDEgKyBfRl9FTkQoZikgLSBfRl9TVEFSVChmKSkKLSNkZWZpbmUgX0ZfTUFTSyhmKQkJKCgoMVVMTCA8PCBfRl9TSVpFKGYpKSAtIDEpIDw8IF9GX1NUQVJUKGYpKQotI2RlZmluZSBfRl9OT1JNQUxJWkUodiwgZikJKCgodikgJiBfRl9NQVNLKGYpKSA+PiBfRl9TVEFSVChmKSkKLSNkZWZpbmUgX0ZfREVOT1JNQUxJWkUodiwgZikJKCgodikgPDwgX0ZfU1RBUlQoZikpICYgX0ZfTUFTSyhmKSkKLQotLyogR2xvYmFsIG1hY3JvcyAqLwotCi0jZGVmaW5lIEZJRUxEX0dFVCh4LCByZWcsIGZpZWxkKSBcCi0oIFwKLSAgICBfRl9OT1JNQUxJWkUoKHgpLCByZWcgIyMgXyAjIyBmaWVsZCkgXAotKQotCi0jZGVmaW5lIEZJRUxEX1NFVCh4LCByZWcsIGZpZWxkLCB2YWx1ZSkgXAotKCBcCi0gICAgKHggJiB+X0ZfTUFTSyhyZWcgIyMgXyAjIyBmaWVsZCkpIFwKLSAgICB8IF9GX0RFTk9STUFMSVpFKHJlZyAjIyBfICMjIGZpZWxkICMjIF8gIyMgdmFsdWUsIHJlZyAjIyBfICMjIGZpZWxkKSBcCi0pCi0KLSNkZWZpbmUgRklFTERfVkFMVUUoeCwgcmVnLCBmaWVsZCwgdmFsdWUpIFwKLSggXAotICAgICh4ICYgfl9GX01BU0socmVnICMjIF8gIyMgZmllbGQpKSBcCi0gICAgfCBfRl9ERU5PUk1BTElaRSh2YWx1ZSwgcmVnICMjIF8gIyMgZmllbGQpIFwKLSkKLQotI2RlZmluZSBGSUVMRF9DTEVBUihyZWcsIGZpZWxkKSBcCi0oIFwKLSAgICB+X0ZfTUFTSyhyZWcgIyMgXyAjIyBmaWVsZCkgXAotKQotCi0vKiBGaWVsZCBNYWNyb3MgICAgICAgICAgICAgICAgICAgICAgICAqLwotCi0jZGVmaW5lIEZJRUxEX1NUQVJUKGZpZWxkKQkoMCA/IGZpZWxkKQotI2RlZmluZSBGSUVMRF9FTkQoZmllbGQpCSgxID8gZmllbGQpCi0jZGVmaW5lIEZJRUxEX1NJWkUoZmllbGQpIFwKLQkoMSArIEZJRUxEX0VORChmaWVsZCkgLSBGSUVMRF9TVEFSVChmaWVsZCkpCi0KLSNkZWZpbmUgRklFTERfTUFTSyhmaWVsZCkgXAotCSgoKDEgPDwgKEZJRUxEX1NJWkUoZmllbGQpLTEpKSBcCi0JfCAoKDEgPDwgKEZJRUxEX1NJWkUoZmllbGQpLTEpKSAtIDEpKSBcCi0JPDwgRklFTERfU1RBUlQoZmllbGQpKQotCi0jZGVmaW5lIEZJRUxEX05PUk1BTElaRShyZWcsIGZpZWxkKSBcCi0JKCgocmVnKSAmIEZJRUxEX01BU0soZmllbGQpKSA+PiBGSUVMRF9TVEFSVChmaWVsZCkpCi0KLSNkZWZpbmUgRklFTERfREVOT1JNQUxJWkUoZmllbGQsIHZhbHVlKSBcCi0JKCgodmFsdWUpIDw8IEZJRUxEX1NUQVJUKGZpZWxkKSkgJiBGSUVMRF9NQVNLKGZpZWxkKSkKLQotI2RlZmluZSBGSUVMRF9JTklUKHJlZywgZmllbGQsIHZhbHVlKSBcCi0JRklFTERfREVOT1JNQUxJWkUocmVnICMjIF8gIyMgZmllbGQsIFwKLQkJcmVnICMjIF8gIyMgZmllbGQgIyMgXyAjIyB2YWx1ZSkKLQotI2RlZmluZSBGSUVMRF9JTklUX1ZBTChyZWcsIGZpZWxkLCB2YWx1ZSkgXAotCShGSUVMRF9ERU5PUk1BTElaRShyZWcgIyMgXyAjIyBmaWVsZCwgdmFsdWUpKQotCi0jZGVmaW5lIEZJRUxEX1ZBTF9TRVQoeCwgciwgZiwgdikgKHsgXAotCXggPSAoeCAmIH5GSUVMRF9NQVNLKHIgIyMgXyAjIyBmKSkgXAotCXwgRklFTERfREVOT1JNQUxJWkUociAjIyBfICMjIGYsIHIgIyMgXyAjIyBmICMjIF8gIyMgdikgXAotfSkKLQotI2RlZmluZSBSR0IociwgZywgYikJKCh1bnNpZ25lZCBsb25nKSgoKHIpIDw8IDE2KSB8ICgoZykgPDwgOCkgfCAoYikpKQotCi0vKiBUcmFuc3BhcmVudCBpbmZvIGRlZmluaXRpb24gKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIG1hdGNoOwkvKiBNYXRjaGluZyBwaXhlbCBpcyBPUEFRVUUvVFJBTlNQQVJFTlQgKi8KLQl1bnNpZ25lZCBsb25nIHNlbGVjdDsJLyogVHJhbnNwYXJlbmN5IGNvbnRyb2xsZWQgYnkgU1JDL0RTVCAqLwotCXVuc2lnbmVkIGxvbmcgY29udHJvbDsJLyogRU5BQkxFL0RJU0FCTEUgdHJhbnNwYXJlbmN5ICovCi0JdW5zaWduZWQgbG9uZyBjb2xvcjsJLyogVHJhbnNwYXJlbnQgY29sb3IgKi8KLX0gVHJhbnNwYXJlbnQsICpwVHJhbnNwYXJlbnQ7Ci0KLSNkZWZpbmUgUElYRUxfREVQVEhfMV9CUAkwCS8qIDEgYml0IHBlciBwaXhlbCAqLwotI2RlZmluZSBQSVhFTF9ERVBUSF84X0JQUAkxCS8qIDggYml0cyBwZXIgcGl4ZWwgKi8KLSNkZWZpbmUgUElYRUxfREVQVEhfMTZfQlBQCTIJLyogMTYgYml0cyBwZXIgcGl4ZWwgKi8KLSNkZWZpbmUgUElYRUxfREVQVEhfMzJfQlBQCTMJLyogMzIgYml0cyBwZXIgcGl4ZWwgKi8KLSNkZWZpbmUgUElYRUxfREVQVEhfWVVWNDIyCTgJLyogMTYgYml0cyBwZXIgcGl4ZWwgWVVWNDIyICovCi0jZGVmaW5lIFBJWEVMX0RFUFRIX1lVVjQyMAk5CS8qIDE2IGJpdHMgcGVyIHBpeGVsIFlVVjQyMCAqLwotCi0jZGVmaW5lIFBBVFRFUk5fV0lEVEgJCTgKLSNkZWZpbmUgUEFUVEVSTl9IRUlHSFQJCTgKLQotI2RlZmluZQlUT1BfVE9fQk9UVE9NCQkwCi0jZGVmaW5lCUJPVFRPTV9UT19UT1AJCTEKLSNkZWZpbmUgUklHSFRfVE9fTEVGVAkJQk9UVE9NX1RPX1RPUAotI2RlZmluZSBMRUZUX1RPX1JJR0hUCQlUT1BfVE9fQk9UVE9NCi0KLS8qIENvbnN0YW50cyB1c2VkIGluIFRyYW5zcGFyZW50IHN0cnVjdHVyZSAqLwotI2RlZmluZSBNQVRDSF9PUEFRVUUJCTB4MDAwMDAwMDAKLSNkZWZpbmUgTUFUQ0hfVFJBTlNQQVJFTlQJMHgwMDAwMDQwMAotI2RlZmluZSBTT1VSQ0UJCQkweDAwMDAwMDAwCi0jZGVmaW5lIERFU1RJTkFUSU9OCQkweDAwMDAwMjAwCi0KLS8qIDJEIHJlZ2lzdGVycy4gKi8KLQotI2RlZmluZQlERV9TT1VSQ0UJCQkweDAwMDAwMAotI2RlZmluZQlERV9TT1VSQ0VfV1JBUAkJCTMxIDogMzEKLSNkZWZpbmUJREVfU09VUkNFX1dSQVBfRElTQUJMRQkJMAotI2RlZmluZQlERV9TT1VSQ0VfV1JBUF9FTkFCTEUJCTEKLSNkZWZpbmUJREVfU09VUkNFX1hfSzEJCQkyOSA6IDE2Ci0jZGVmaW5lCURFX1NPVVJDRV9ZX0syCQkJMTUgOiAwCi0KLSNkZWZpbmUJREVfREVTVElOQVRJT04JCQkweDAwMDAwNAotI2RlZmluZQlERV9ERVNUSU5BVElPTl9XUkFQCQkzMSA6IDMxCi0jZGVmaW5lCURFX0RFU1RJTkFUSU9OX1dSQVBfRElTQUJMRQkwCi0jZGVmaW5lCURFX0RFU1RJTkFUSU9OX1dSQVBfRU5BQkxFCTEKLSNkZWZpbmUJREVfREVTVElOQVRJT05fWAkJMjggOiAxNgotI2RlZmluZQlERV9ERVNUSU5BVElPTl9ZCQkxNSA6IDAKLQotI2RlZmluZQlERV9ESU1FTlNJT04JCQkweDAwMDAwOAotI2RlZmluZQlERV9ESU1FTlNJT05fWAkJCTI4IDogMTYKLSNkZWZpbmUJREVfRElNRU5TSU9OX1lfRVQJCTE1IDogMAotCi0jZGVmaW5lCURFX0NPTlRST0wJCQkweDAwMDAwQwotI2RlZmluZQlERV9DT05UUk9MX1NUQVRVUwkJMzEgOiAzMQotI2RlZmluZQlERV9DT05UUk9MX1NUQVRVU19TVE9QCQkwCi0jZGVmaW5lCURFX0NPTlRST0xfU1RBVFVTX1NUQVJUCQkxCi0jZGVmaW5lCURFX0NPTlRST0xfUEFUVEVSTgkJMzAgOiAzMAotI2RlZmluZQlERV9DT05UUk9MX1BBVFRFUk5fTU9OTwkJMAotI2RlZmluZQlERV9DT05UUk9MX1BBVFRFUk5fQ09MT1IJMQotI2RlZmluZQlERV9DT05UUk9MX1VQREFURV9ERVNUSU5BVElPTl9YCQkyOSA6IDI5Ci0jZGVmaW5lCURFX0NPTlRST0xfVVBEQVRFX0RFU1RJTkFUSU9OX1hfRElTQUJMRQkwCi0jZGVmaW5lCURFX0NPTlRST0xfVVBEQVRFX0RFU1RJTkFUSU9OX1hfRU5BQkxFCTEKLSNkZWZpbmUJREVfQ09OVFJPTF9RVUlDS19TVEFSVAkJCTI4IDogMjgKLSNkZWZpbmUJREVfQ09OVFJPTF9RVUlDS19TVEFSVF9ESVNBQkxFCQkwCi0jZGVmaW5lCURFX0NPTlRST0xfUVVJQ0tfU1RBUlRfRU5BQkxFCQkxCi0jZGVmaW5lCURFX0NPTlRST0xfRElSRUNUSU9OCQkJMjcgOiAyNwotI2RlZmluZQlERV9DT05UUk9MX0RJUkVDVElPTl9MRUZUX1RPX1JJR0hUCTAKLSNkZWZpbmUJREVfQ09OVFJPTF9ESVJFQ1RJT05fUklHSFRfVE9fTEVGVAkxCi0jZGVmaW5lCURFX0NPTlRST0xfTUFKT1IJCQkyNiA6IDI2Ci0jZGVmaW5lCURFX0NPTlRST0xfTUFKT1JfWAkJCTAKLSNkZWZpbmUJREVfQ09OVFJPTF9NQUpPUl9ZCQkJMQotI2RlZmluZQlERV9DT05UUk9MX1NURVBfWAkJCTI1IDogMjUKLSNkZWZpbmUJREVfQ09OVFJPTF9TVEVQX1hfUE9TSVRJVkUJCTEKLSNkZWZpbmUJREVfQ09OVFJPTF9TVEVQX1hfTkVHQVRJVkUJCTAKLSNkZWZpbmUJREVfQ09OVFJPTF9TVEVQX1kJCQkyNCA6IDI0Ci0jZGVmaW5lCURFX0NPTlRST0xfU1RFUF9ZX1BPU0lUSVZFCQkxCi0jZGVmaW5lCURFX0NPTlRST0xfU1RFUF9ZX05FR0FUSVZFCQkwCi0jZGVmaW5lCURFX0NPTlRST0xfU1RSRVRDSAkJCTIzIDogMjMKLSNkZWZpbmUJREVfQ09OVFJPTF9TVFJFVENIX0RJU0FCTEUJCTAKLSNkZWZpbmUJREVfQ09OVFJPTF9TVFJFVENIX0VOQUJMRQkJMQotI2RlZmluZQlERV9DT05UUk9MX0hPU1QJCQkJMjIgOiAyMgotI2RlZmluZQlERV9DT05UUk9MX0hPU1RfQ09MT1IJCQkwCi0jZGVmaW5lCURFX0NPTlRST0xfSE9TVF9NT05PCQkJMQotI2RlZmluZQlERV9DT05UUk9MX0xBU1RfUElYRUwJCQkyMSA6IDIxCi0jZGVmaW5lCURFX0NPTlRST0xfTEFTVF9QSVhFTF9PRkYJCTAKLSNkZWZpbmUJREVfQ09OVFJPTF9MQVNUX1BJWEVMX09OCQkxCi0jZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORAkJCTIwIDogMTYKLSNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX0JJVEJMVAkJMAotI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfUkVDVEFOR0xFX0ZJTEwJMQotI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfREVfVElMRQkJMgotI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfVFJBUEVaT0lEX0ZJTEwJMwotI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfQUxQSEFfQkxFTkQJCTQKLSNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX1JMRV9TVFJJUAkJNQotI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfU0hPUlRfU1RST0tFCQk2Ci0jZGVmaW5lCURFX0NPTlRST0xfQ09NTUFORF9MSU5FX0RSQVcJCTcKLSNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX0hPU1RfV1JJVEUJCTgKLSNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX0hPU1RfUkVBRAkJOQotI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfSE9TVF9XUklURV9CT1RUT01fVVAJMTAKLSNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX1JPVEFURQkJMTEKLSNkZWZpbmUJREVfQ09OVFJPTF9DT01NQU5EX0ZPTlQJCQkxMgotI2RlZmluZQlERV9DT05UUk9MX0NPTU1BTkRfVEVYVFVSRV9MT0FECQkxNQotI2RlZmluZQlERV9DT05UUk9MX1JPUF9TRUxFQ1QJCQkxNSA6IDE1Ci0jZGVmaW5lCURFX0NPTlRST0xfUk9QX1NFTEVDVF9ST1AzCQkwCi0jZGVmaW5lCURFX0NPTlRST0xfUk9QX1NFTEVDVF9ST1AyCQkxCi0jZGVmaW5lCURFX0NPTlRST0xfUk9QMl9TT1VSQ0UJCQkxNCA6IDE0Ci0jZGVmaW5lCURFX0NPTlRST0xfUk9QMl9TT1VSQ0VfQklUTUFQCQkwCi0jZGVmaW5lCURFX0NPTlRST0xfUk9QMl9TT1VSQ0VfUEFUVEVSTgkJMQotI2RlZmluZQlERV9DT05UUk9MX01PTk9fREFUQQkJCTEzIDogMTIKLSNkZWZpbmUJREVfQ09OVFJPTF9NT05PX0RBVEFfTk9UX1BBQ0tFRAkJMAotI2RlZmluZQlERV9DT05UUk9MX01PTk9fREFUQV84X1BBQ0tFRAkJMQotI2RlZmluZQlERV9DT05UUk9MX01PTk9fREFUQV8xNl9QQUNLRUQJCTIKLSNkZWZpbmUJREVfQ09OVFJPTF9NT05PX0RBVEFfMzJfUEFDS0VECQkzCi0jZGVmaW5lCURFX0NPTlRST0xfUkVQRUFUX1JPVEFURQkJMTEgOiAxMQotI2RlZmluZQlERV9DT05UUk9MX1JFUEVBVF9ST1RBVEVfRElTQUJMRQkwCi0jZGVmaW5lCURFX0NPTlRST0xfUkVQRUFUX1JPVEFURV9FTkFCTEUJCTEKLSNkZWZpbmUJREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfTUFUQ0gJCTEwIDogMTAKLSNkZWZpbmUJREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfTUFUQ0hfT1BBUVVFCQkwCi0jZGVmaW5lCURFX0NPTlRST0xfVFJBTlNQQVJFTkNZX01BVENIX1RSQU5TUEFSRU5UCTEKLSNkZWZpbmUJREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfU0VMRUNUCQkJOSA6IDkKLSNkZWZpbmUJREVfQ09OVFJPTF9UUkFOU1BBUkVOQ1lfU0VMRUNUX1NPVVJDRQkJMAotI2RlZmluZQlERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9TRUxFQ1RfREVTVElOQVRJT04JMQotI2RlZmluZQlERV9DT05UUk9MX1RSQU5TUEFSRU5DWQkJCQk4IDogOAotI2RlZmluZQlERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9ESVNBQkxFCQkJMAotI2RlZmluZQlERV9DT05UUk9MX1RSQU5TUEFSRU5DWV9FTkFCTEUJCQkxCi0jZGVmaW5lCURFX0NPTlRST0xfUk9QCQkJCQk3IDogMAotCi0vKiBQc2V1ZG8gZmllbGRzLiAqLwotCi0jZGVmaW5lCURFX0NPTlRST0xfU0hPUlRfU1RST0tFX0RJUgkJCTI3IDogMjQKLSNkZWZpbmUJREVfQ09OVFJPTF9TSE9SVF9TVFJPS0VfRElSXzIyNQkJCTAKLSNkZWZpbmUJREVfQ09OVFJPTF9TSE9SVF9TVFJPS0VfRElSXzEzNQkJCTEKLSNkZWZpbmUJREVfQ09OVFJPTF9TSE9SVF9TVFJPS0VfRElSXzMxNQkJCTIKLSNkZWZpbmUJREVfQ09OVFJPTF9TSE9SVF9TVFJPS0VfRElSXzQ1CQkJMwotI2RlZmluZQlERV9DT05UUk9MX1NIT1JUX1NUUk9LRV9ESVJfMjcwCQkJNAotI2RlZmluZQlERV9DT05UUk9MX1NIT1JUX1NUUk9LRV9ESVJfOTAJCQk1Ci0jZGVmaW5lCURFX0NPTlRST0xfU0hPUlRfU1RST0tFX0RJUl8xODAJCQk4Ci0jZGVmaW5lCURFX0NPTlRST0xfU0hPUlRfU1RST0tFX0RJUl8wCQkJMTAKLSNkZWZpbmUJREVfQ09OVFJPTF9ST1RBVElPTgkJCQkyNSA6IDI0Ci0jZGVmaW5lCURFX0NPTlRST0xfUk9UQVRJT05fMAkJCQkwCi0jZGVmaW5lCURFX0NPTlRST0xfUk9UQVRJT05fMjcwCQkJCTEKLSNkZWZpbmUJREVfQ09OVFJPTF9ST1RBVElPTl85MAkJCQkyCi0jZGVmaW5lCURFX0NPTlRST0xfUk9UQVRJT05fMTgwCQkJCTMKLQotI2RlZmluZQlERV9QSVRDSAkJCQkJMHgwMDAwMTAKLSNkZWZpbmUJREVfUElUQ0hfREVTVElOQVRJT04JCQkJMjggOiAxNgotI2RlZmluZQlERV9QSVRDSF9TT1VSQ0UJCQkJCTEyIDogMAotCi0jZGVmaW5lCURFX0ZPUkVHUk9VTkQJCQkJCTB4MDAwMDE0Ci0jZGVmaW5lCURFX0ZPUkVHUk9VTkRfQ09MT1IJCQkJMzEgOiAwCi0KLSNkZWZpbmUJREVfQkFDS0dST1VORAkJCQkJMHgwMDAwMTgKLSNkZWZpbmUJREVfQkFDS0dST1VORF9DT0xPUgkJCQkzMSA6IDAKLQotI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVAkJCQkweDAwMDAxQwotI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QQVRURVJOX1hZCQkJMzAgOiAzMAotI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QQVRURVJOX1hZX05PUk1BTAkJMAotI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QQVRURVJOX1hZX09WRVJXUklURQkJMQotI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QQVRURVJOX1kJCQkyOSA6IDI3Ci0jZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BBVFRFUk5fWAkJCTI1IDogMjMKLSNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUElYRUxfRk9STUFUCQkJMjEgOiAyMAotI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QSVhFTF9GT1JNQVRfOAkJMAotI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9QSVhFTF9GT1JNQVRfMTYJCTEKLSNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfUElYRUxfRk9STUFUXzI0CQkzCi0jZGVmaW5lCURFX1NUUkVUQ0hfRk9STUFUX1BJWEVMX0ZPUk1BVF8zMgkJMgotI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9BRERSRVNTSU5HCQkJMTkgOiAxNgotI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9BRERSRVNTSU5HX1hZCQkJMAotI2RlZmluZQlERV9TVFJFVENIX0ZPUk1BVF9BRERSRVNTSU5HX0xJTkVBUgkJMTUKLSNkZWZpbmUJREVfU1RSRVRDSF9GT1JNQVRfU09VUkNFX0hFSUdIVAkJCTExIDogMAotCi0jZGVmaW5lCURFX0NPTE9SX0NPTVBBUkUJCQkJMHgwMDAwMjAKLSNkZWZpbmUJREVfQ09MT1JfQ09NUEFSRV9DT0xPUgkJCQkyMyA6IDAKLQotI2RlZmluZQlERV9DT0xPUl9DT01QQVJFX01BU0sJCQkJMHgwMDAwMjQKLSNkZWZpbmUJREVfQ09MT1JfQ09NUEFSRV9NQVNLX01BU0tTCQkJMjMgOiAwCi0KLSNkZWZpbmUJREVfTUFTS1MJCQkJCTB4MDAwMDI4Ci0jZGVmaW5lCURFX01BU0tTX0JZVEVfTUFTSwkJCQkzMSA6IDE2Ci0jZGVmaW5lCURFX01BU0tTX0JJVF9NQVNLCQkJCTE1IDogMAotCi0jZGVmaW5lCURFX0NMSVBfVEwJCQkJCTB4MDAwMDJDCi0jZGVmaW5lCURFX0NMSVBfVExfVE9QCQkJCQkzMSA6IDE2Ci0jZGVmaW5lCURFX0NMSVBfVExfU1RBVFVTCQkJCTEzIDogMTMKLSNkZWZpbmUJREVfQ0xJUF9UTF9TVEFUVVNfRElTQUJMRQkJCTAKLSNkZWZpbmUJREVfQ0xJUF9UTF9TVEFUVVNfRU5BQkxFCQkJMQotI2RlZmluZQlERV9DTElQX1RMX0lOSElCSVQJCQkJMTIgOiAxMgotI2RlZmluZQlERV9DTElQX1RMX0lOSElCSVRfT1VUU0lERQkJCTAKLSNkZWZpbmUJREVfQ0xJUF9UTF9JTkhJQklUX0lOU0lERQkJCTEKLSNkZWZpbmUJREVfQ0xJUF9UTF9MRUZUCQkJCQkxMSA6IDAKLQotI2RlZmluZQlERV9DTElQX0JSCQkJCQkweDAwMDAzMAotI2RlZmluZQlERV9DTElQX0JSX0JPVFRPTQkJCQkzMSA6IDE2Ci0jZGVmaW5lCURFX0NMSVBfQlJfUklHSFQJCQkJMTIgOiAwCi0KLSNkZWZpbmUJREVfTU9OT19QQVRURVJOX0xPVwkJCQkweDAwMDAzNAotI2RlZmluZQlERV9NT05PX1BBVFRFUk5fTE9XX1BBVFRFUk4JCQkzMSA6IDAKLQotI2RlZmluZQlERV9NT05PX1BBVFRFUk5fSElHSAkJCQkweDAwMDAzOAotI2RlZmluZQlERV9NT05PX1BBVFRFUk5fSElHSF9QQVRURVJOCQkJMzEgOiAwCi0KLSNkZWZpbmUJREVfV0lORE9XX1dJRFRICQkJCQkweDAwMDAzQwotI2RlZmluZQlERV9XSU5ET1dfV0lEVEhfREVTVElOQVRJT04JCQkyOCA6IDE2Ci0jZGVmaW5lCURFX1dJTkRPV19XSURUSF9TT1VSQ0UJCQkJMTIgOiAwCi0KLSNkZWZpbmUJREVfV0lORE9XX1NPVVJDRV9CQVNFCQkJCTB4MDAwMDQwCi0jZGVmaW5lCURFX1dJTkRPV19TT1VSQ0VfQkFTRV9FWFQJCQkyNyA6IDI3Ci0jZGVmaW5lCURFX1dJTkRPV19TT1VSQ0VfQkFTRV9FWFRfTE9DQUwJCQkwCi0jZGVmaW5lCURFX1dJTkRPV19TT1VSQ0VfQkFTRV9FWFRfRVhURVJOQUwJCTEKLSNkZWZpbmUJREVfV0lORE9XX1NPVVJDRV9CQVNFX0NTCQkJMjYgOiAyNgotI2RlZmluZQlERV9XSU5ET1dfU09VUkNFX0JBU0VfQ1NfMAkJCTAKLSNkZWZpbmUJREVfV0lORE9XX1NPVVJDRV9CQVNFX0NTXzEJCQkxCi0jZGVmaW5lCURFX1dJTkRPV19TT1VSQ0VfQkFTRV9BRERSRVNTCQkJMjUgOiAwCi0KLSNkZWZpbmUJREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0UJCQkweDAwMDA0NAotI2RlZmluZQlERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRV9FWFQJCQkyNyA6IDI3Ci0jZGVmaW5lCURFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFX0VYVF9MT0NBTAkJMAotI2RlZmluZQlERV9XSU5ET1dfREVTVElOQVRJT05fQkFTRV9FWFRfRVhURVJOQUwJCTEKLSNkZWZpbmUJREVfV0lORE9XX0RFU1RJTkFUSU9OX0JBU0VfQ1MJCQkyNiA6IDI2Ci0jZGVmaW5lCURFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFX0NTXzAJCQkwCi0jZGVmaW5lCURFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFX0NTXzEJCQkxCi0jZGVmaW5lCURFX1dJTkRPV19ERVNUSU5BVElPTl9CQVNFX0FERFJFU1MJCTI1IDogMAotCi0jZGVmaW5lCURFX0FMUEhBCQkJCQkweDAwMDA0OAotI2RlZmluZQlERV9BTFBIQV9WQUxVRQkJCQkJNyA6IDAKLQotI2RlZmluZQlERV9XUkFQCQkJCQkJMHgwMDAwNEMKLSNkZWZpbmUJREVfV1JBUF9YCQkJCQkzMSA6IDE2Ci0jZGVmaW5lCURFX1dSQVBfWQkJCQkJMTUgOiAwCi0KLSNkZWZpbmUJREVfU1RBVFVTCQkJCQkweDAwMDA1MAotI2RlZmluZQlERV9TVEFUVVNfQ1NDCQkJCQkxIDogMQotI2RlZmluZQlERV9TVEFUVVNfQ1NDX0NMRUFSCQkJCTAKLSNkZWZpbmUJREVfU1RBVFVTX0NTQ19OT1RfQUNUSVZFCQkJMAotI2RlZmluZQlERV9TVEFUVVNfQ1NDX0FDVElWRQkJCQkxCi0jZGVmaW5lCURFX1NUQVRVU18yRAkJCQkJMCA6IDAKLSNkZWZpbmUJREVfU1RBVFVTXzJEX0NMRUFSCQkJCTAKLSNkZWZpbmUJREVfU1RBVFVTXzJEX05PVF9BQ1RJVkUJCQkJMAotI2RlZmluZQlERV9TVEFUVVNfMkRfQUNUSVZFCQkJCTEKLQotLyogQ29sb3IgU3BhY2UgQ29udmVyc2lvbiByZWdpc3RlcnMuICovCi0KLSNkZWZpbmUJQ1NDX1lfU09VUkNFX0JBU0UJCQkJMHgwMDAwQzgKLSNkZWZpbmUJQ1NDX1lfU09VUkNFX0JBU0VfRVhUCQkJCTI3IDogMjcKLSNkZWZpbmUJQ1NDX1lfU09VUkNFX0JBU0VfRVhUX0xPQ0FMCQkJMAotI2RlZmluZQlDU0NfWV9TT1VSQ0VfQkFTRV9FWFRfRVhURVJOQUwJCQkxCi0jZGVmaW5lCUNTQ19ZX1NPVVJDRV9CQVNFX0NTCQkJCTI2IDogMjYKLSNkZWZpbmUJQ1NDX1lfU09VUkNFX0JBU0VfQ1NfMAkJCQkwCi0jZGVmaW5lCUNTQ19ZX1NPVVJDRV9CQVNFX0NTXzEJCQkJMQotI2RlZmluZQlDU0NfWV9TT1VSQ0VfQkFTRV9BRERSRVNTCQkJMjUgOiAwCi0KLSNkZWZpbmUJQ1NDX0NPTlNUQU5UUwkJCQkJMHgwMDAwQ0MKLSNkZWZpbmUJQ1NDX0NPTlNUQU5UU19ZCQkJCQkzMSA6IDI0Ci0jZGVmaW5lCUNTQ19DT05TVEFOVFNfUgkJCQkJMjMgOiAxNgotI2RlZmluZQlDU0NfQ09OU1RBTlRTX0cJCQkJCTE1IDogOAotI2RlZmluZQlDU0NfQ09OU1RBTlRTX0IJCQkJCTcgOiAwCi0KLSNkZWZpbmUJQ1NDX1lfU09VUkNFX1gJCQkJCTB4MDAwMEQwCi0jZGVmaW5lCUNTQ19ZX1NPVVJDRV9YX0lOVEVHRVIJCQkJMjYgOiAxNgotI2RlZmluZQlDU0NfWV9TT1VSQ0VfWF9GUkFDVElPTgkJCQkxNSA6IDMKLQotI2RlZmluZQlDU0NfWV9TT1VSQ0VfWQkJCQkJMHgwMDAwRDQKLSNkZWZpbmUJQ1NDX1lfU09VUkNFX1lfSU5URUdFUgkJCQkyNyA6IDE2Ci0jZGVmaW5lCUNTQ19ZX1NPVVJDRV9ZX0ZSQUNUSU9OCQkJCTE1IDogMwotCi0jZGVmaW5lCUNTQ19VX1NPVVJDRV9CQVNFCQkJCTB4MDAwMEQ4Ci0jZGVmaW5lCUNTQ19VX1NPVVJDRV9CQVNFX0VYVAkJCQkyNyA6IDI3Ci0jZGVmaW5lCUNTQ19VX1NPVVJDRV9CQVNFX0VYVF9MT0NBTAkJCTAKLSNkZWZpbmUJQ1NDX1VfU09VUkNFX0JBU0VfRVhUX0VYVEVSTkFMCQkJMQotI2RlZmluZQlDU0NfVV9TT1VSQ0VfQkFTRV9DUwkJCQkyNiA6IDI2Ci0jZGVmaW5lCUNTQ19VX1NPVVJDRV9CQVNFX0NTXzAJCQkJMAotI2RlZmluZQlDU0NfVV9TT1VSQ0VfQkFTRV9DU18xCQkJCTEKLSNkZWZpbmUJQ1NDX1VfU09VUkNFX0JBU0VfQUREUkVTUwkJCTI1IDogMAotCi0jZGVmaW5lCUNTQ19WX1NPVVJDRV9CQVNFCQkJCTB4MDAwMERDCi0jZGVmaW5lCUNTQ19WX1NPVVJDRV9CQVNFX0VYVAkJCQkyNyA6IDI3Ci0jZGVmaW5lCUNTQ19WX1NPVVJDRV9CQVNFX0VYVF9MT0NBTAkJCTAKLSNkZWZpbmUJQ1NDX1ZfU09VUkNFX0JBU0VfRVhUX0VYVEVSTkFMCQkJMQotI2RlZmluZQlDU0NfVl9TT1VSQ0VfQkFTRV9DUwkJCQkyNiA6IDI2Ci0jZGVmaW5lCUNTQ19WX1NPVVJDRV9CQVNFX0NTXzAJCQkJMAotI2RlZmluZQlDU0NfVl9TT1VSQ0VfQkFTRV9DU18xCQkJCTEKLSNkZWZpbmUJQ1NDX1ZfU09VUkNFX0JBU0VfQUREUkVTUwkJCTI1IDogMAotCi0jZGVmaW5lCUNTQ19TT1VSQ0VfRElNRU5TSU9OCQkJCTB4MDAwMEUwCi0jZGVmaW5lCUNTQ19TT1VSQ0VfRElNRU5TSU9OX1gJCQkJMzEgOiAxNgotI2RlZmluZQlDU0NfU09VUkNFX0RJTUVOU0lPTl9ZCQkJCTE1IDogMAotCi0jZGVmaW5lCUNTQ19TT1VSQ0VfUElUQ0gJCQkJMHgwMDAwRTQKLSNkZWZpbmUJQ1NDX1NPVVJDRV9QSVRDSF9ZCQkJCTMxIDogMTYKLSNkZWZpbmUJQ1NDX1NPVVJDRV9QSVRDSF9VVgkJCQkxNSA6IDAKLQotI2RlZmluZQlDU0NfREVTVElOQVRJT04JCQkJCTB4MDAwMEU4Ci0jZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9XUkFQCQkJCTMxIDogMzEKLSNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX1dSQVBfRElTQUJMRQkJCTAKLSNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX1dSQVBfRU5BQkxFCQkJMQotI2RlZmluZQlDU0NfREVTVElOQVRJT05fWAkJCQkyNyA6IDE2Ci0jZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9ZCQkJCTExIDogMAotCi0jZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9ESU1FTlNJT04JCQkweDAwMDBFQwotI2RlZmluZQlDU0NfREVTVElOQVRJT05fRElNRU5TSU9OX1gJCQkzMSA6IDE2Ci0jZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9ESU1FTlNJT05fWQkJCTE1IDogMAotCi0jZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9QSVRDSAkJCQkweDAwMDBGMAotI2RlZmluZQlDU0NfREVTVElOQVRJT05fUElUQ0hfWAkJCQkzMSA6IDE2Ci0jZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9QSVRDSF9ZCQkJCTE1IDogMAotCi0jZGVmaW5lCUNTQ19TQ0FMRV9GQUNUT1IJCQkJMHgwMDAwRjQKLSNkZWZpbmUJQ1NDX1NDQUxFX0ZBQ1RPUl9IT1JJWk9OVEFMCQkJMzEgOiAxNgotI2RlZmluZQlDU0NfU0NBTEVfRkFDVE9SX1ZFUlRJQ0FMCQkJMTUgOiAwCi0KLSNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0JBU0UJCQkJMHgwMDAwRjgKLSNkZWZpbmUJQ1NDX0RFU1RJTkFUSU9OX0JBU0VfRVhUCQkJMjcgOiAyNwotI2RlZmluZQlDU0NfREVTVElOQVRJT05fQkFTRV9FWFRfTE9DQUwJCQkwCi0jZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9CQVNFX0VYVF9FWFRFUk5BTAkJMQotI2RlZmluZQlDU0NfREVTVElOQVRJT05fQkFTRV9DUwkJCQkyNiA6IDI2Ci0jZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9CQVNFX0NTXzAJCQkwCi0jZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9CQVNFX0NTXzEJCQkxCi0jZGVmaW5lCUNTQ19ERVNUSU5BVElPTl9CQVNFX0FERFJFU1MJCQkyNSA6IDAKLQotI2RlZmluZQlDU0NfQ09OVFJPTAkJCQkJMHgwMDAwRkMKLSNkZWZpbmUJQ1NDX0NPTlRST0xfU1RBVFVTCQkJCTMxIDogMzEKLSNkZWZpbmUJQ1NDX0NPTlRST0xfU1RBVFVTX1NUT1AJCQkJMAotI2RlZmluZQlDU0NfQ09OVFJPTF9TVEFUVVNfU1RBUlQJCQkxCi0jZGVmaW5lCUNTQ19DT05UUk9MX1NPVVJDRV9GT1JNQVQJCQkzMCA6IDI4Ci0jZGVmaW5lCUNTQ19DT05UUk9MX1NPVVJDRV9GT1JNQVRfWVVWNDIyCQkwCi0jZGVmaW5lCUNTQ19DT05UUk9MX1NPVVJDRV9GT1JNQVRfWVVWNDIwSQkJMQotI2RlZmluZQlDU0NfQ09OVFJPTF9TT1VSQ0VfRk9STUFUX1lVVjQyMAkJMgotI2RlZmluZQlDU0NfQ09OVFJPTF9TT1VSQ0VfRk9STUFUX1lWVTkJCQkzCi0jZGVmaW5lCUNTQ19DT05UUk9MX1NPVVJDRV9GT1JNQVRfSVlVMQkJCTQKLSNkZWZpbmUJQ1NDX0NPTlRST0xfU09VUkNFX0ZPUk1BVF9JWVUyCQkJNQotI2RlZmluZQlDU0NfQ09OVFJPTF9TT1VSQ0VfRk9STUFUX1JHQjU2NQkJNgotI2RlZmluZQlDU0NfQ09OVFJPTF9TT1VSQ0VfRk9STUFUX1JHQjg4ODgJCTcKLSNkZWZpbmUJQ1NDX0NPTlRST0xfREVTVElOQVRJT05fRk9STUFUCQkJMjcgOiAyNgotI2RlZmluZQlDU0NfQ09OVFJPTF9ERVNUSU5BVElPTl9GT1JNQVRfUkdCNTY1CQkwCi0jZGVmaW5lCUNTQ19DT05UUk9MX0RFU1RJTkFUSU9OX0ZPUk1BVF9SR0I4ODg4CQkxCi0jZGVmaW5lCUNTQ19DT05UUk9MX0hPUklaT05UQUxfRklMVEVSCQkJMjUgOiAyNQotI2RlZmluZQlDU0NfQ09OVFJPTF9IT1JJWk9OVEFMX0ZJTFRFUl9ESVNBQkxFCQkwCi0jZGVmaW5lCUNTQ19DT05UUk9MX0hPUklaT05UQUxfRklMVEVSX0VOQUJMRQkJMQotI2RlZmluZQlDU0NfQ09OVFJPTF9WRVJUSUNBTF9GSUxURVIJCQkyNCA6IDI0Ci0jZGVmaW5lCUNTQ19DT05UUk9MX1ZFUlRJQ0FMX0ZJTFRFUl9ESVNBQkxFCQkwCi0jZGVmaW5lCUNTQ19DT05UUk9MX1ZFUlRJQ0FMX0ZJTFRFUl9FTkFCTEUJCTEKLSNkZWZpbmUJQ1NDX0NPTlRST0xfQllURV9PUkRFUgkJCQkyMyA6IDIzCi0jZGVmaW5lCUNTQ19DT05UUk9MX0JZVEVfT1JERVJfWVVZVgkJCTAKLSNkZWZpbmUJQ1NDX0NPTlRST0xfQllURV9PUkRFUl9VWVZZCQkJMQotCi0jZGVmaW5lCURFX0RBVEFfUE9SVF81MDEJCQkJMHgxMTAwMDAKLSNkZWZpbmUJREVfREFUQV9QT1JUXzcxMgkJCQkweDQwMDAwMAotI2RlZmluZQlERV9EQVRBX1BPUlRfNzIyCQkJCTB4NjAwMAotCi0vKiBwb2ludCB0byB2aXJ0dWFsIE1lbW9yeSBNYXAgSU8gc3RhcnRpbmcgYWRkcmVzcyAqLwotZXh0ZXJuIGNoYXIgKnNtdGNfUmVnQmFzZUFkZHJlc3M7Ci0vKiBwb2ludCB0byB2aXJ0dWFsIHZpZGVvIG1lbW9yeSBzdGFydGluZyBhZGRyZXNzICovCi1leHRlcm4gY2hhciAqc210Y19WUkFNQmFzZUFkZHJlc3M7Ci1leHRlcm4gdW5zaWduZWQgY2hhciBzbXRjX2RlX2J1c3k7Ci0KLWV4dGVybiB1bnNpZ25lZCBsb25nIG1lbVJlYWQzMih1bnNpZ25lZCBsb25nIG5PZmZzZXQpOwotZXh0ZXJuIHZvaWQgbWVtV3JpdGUzMih1bnNpZ25lZCBsb25nIG5PZmZzZXQsIHVuc2lnbmVkIGxvbmcgbkRhdGEpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgU01UQ19yZWFkMkRyZWcodW5zaWduZWQgbG9uZyBuT2Zmc2V0KTsKLQotLyogMkQgZnVuY3Rpb25zICovCi1leHRlcm4gdm9pZCBkZUluaXQodW5zaWduZWQgaW50IG5Nb2RlV2lkdGgsIHVuc2lnbmVkIGludCBuTW9kZUhlaWdodCwKLQkJICAgdW5zaWduZWQgaW50IGJwcCk7Ci0KLWV4dGVybiB2b2lkIGRlV2FpdEZvck5vdEJ1c3kodm9pZCk7Ci0KLWV4dGVybiB2b2lkIGRlVmVydGljYWxMaW5lKHVuc2lnbmVkIGxvbmcgZHN0X2Jhc2UsCi0JdW5zaWduZWQgbG9uZyBkc3RfcGl0Y2gsCi0JdW5zaWduZWQgbG9uZyBuWCwKLQl1bnNpZ25lZCBsb25nIG5ZLAotCXVuc2lnbmVkIGxvbmcgZHN0X2hlaWdodCwKLQl1bnNpZ25lZCBsb25nIG5Db2xvcik7Ci0KLWV4dGVybiB2b2lkIGRlSG9yaXpvbnRhbExpbmUodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKLQl1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKLQl1bnNpZ25lZCBsb25nIG5YLAotCXVuc2lnbmVkIGxvbmcgblksCi0JdW5zaWduZWQgbG9uZyBkc3Rfd2lkdGgsCi0JdW5zaWduZWQgbG9uZyBuQ29sb3IpOwotCi1leHRlcm4gdm9pZCBkZUxpbmUodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKLQl1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKLQl1bnNpZ25lZCBsb25nIG5YMSwKLQl1bnNpZ25lZCBsb25nIG5ZMSwKLQl1bnNpZ25lZCBsb25nIG5YMiwKLQl1bnNpZ25lZCBsb25nIG5ZMiwKLQl1bnNpZ25lZCBsb25nIG5Db2xvcik7Ci0KLWV4dGVybiB2b2lkIGRlRmlsbFJlY3QodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKLQl1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKLQl1bnNpZ25lZCBsb25nIGRzdF9YLAotCXVuc2lnbmVkIGxvbmcgZHN0X1ksCi0JdW5zaWduZWQgbG9uZyBkc3Rfd2lkdGgsCi0JdW5zaWduZWQgbG9uZyBkc3RfaGVpZ2h0LAotCXVuc2lnbmVkIGxvbmcgbkNvbG9yKTsKLQotZXh0ZXJuIHZvaWQgZGVSb3RhdGVQYXR0ZXJuKHVuc2lnbmVkIGNoYXIgKnBhdHRlcm5fZHN0YWRkciwKLQl1bnNpZ25lZCBsb25nIHBhdHRlcm5fc3JjX2FkZHIsCi0JdW5zaWduZWQgbG9uZyBwYXR0ZXJuX0JQUCwKLQl1bnNpZ25lZCBsb25nIHBhdHRlcm5fc3RyaWRlLAotCWludAlwYXR0ZXJuWCwKLQlpbnQJcGF0dGVyblkpOwotCi1leHRlcm4gdm9pZCBkZUNvcHkodW5zaWduZWQgbG9uZyBkc3RfYmFzZSwKLQl1bnNpZ25lZCBsb25nIGRzdF9waXRjaCwKLQl1bnNpZ25lZCBsb25nIGRzdF9CUFAsCi0JdW5zaWduZWQgbG9uZyBkc3RfWCwKLQl1bnNpZ25lZCBsb25nIGRzdF9ZLAotCXVuc2lnbmVkIGxvbmcgZHN0X3dpZHRoLAotCXVuc2lnbmVkIGxvbmcgZHN0X2hlaWdodCwKLQl1bnNpZ25lZCBsb25nIHNyY19iYXNlLAotCXVuc2lnbmVkIGxvbmcgc3JjX3BpdGNoLAotCXVuc2lnbmVkIGxvbmcgc3JjX1gsCi0JdW5zaWduZWQgbG9uZyBzcmNfWSwKLQlwVHJhbnNwYXJlbnQJcFRyYW5zcCwKLQl1bnNpZ25lZCBjaGFyIG5ST1AyKTsKLQotLyoKLSAqIFN5c3RlbSBtZW1vcnkgdG8gVmlkZW8gbWVtb3J5IG1vbm9jaHJvbWUgZXhwYW5zaW9uLgotICoKLSAqIFNvdXJjZSBpcyBtb25vY2hyb21lIGltYWdlIGluIHN5c3RlbSBtZW1vcnkuICBUaGlzIGZ1bmN0aW9uIGV4cGFuZHMgdGhlCi0gKiBtb25vY2hyb21lIGRhdGEgdG8gY29sb3IgaW1hZ2UgaW4gdmlkZW8gbWVtb3J5LgotICoKLSAqIEBwU3JjYnVmOiBwb2ludGVyIHRvIHN0YXJ0IG9mIHNvdXJjZSBidWZmZXIgaW4gc3lzdGVtIG1lbW9yeQotICogQHNyY0RlbHRhOiBQaXRjaCB2YWx1ZSAoaW4gYnl0ZXMpIG9mIHRoZSBzb3VyY2UgYnVmZmVyLCAraXZlIG1lYW5zIHRvcAotICogCQlkb3duIGFuZCAtaXZlIG1lYW4gYnV0dG9uIHVwCi0gKiBAc3RhcnRCaXQ6IE1vbm8gZGF0YSBjYW4gc3RhcnQgYXQgYW55IGJpdCBpbiBhIGJ5dGUsIHRoaXMgdmFsdWUgc2hvdWxkCi0gKiAJCWJlIDAgdG8gNwotICogQGRCYXNlOiBBZGRyZXNzIG9mIGRlc3RpbmF0aW9uIDogIG9mZnNldCBpbiBmcmFtZSBidWZmZXIKLSAqIEBkUGl0Y2g6IFBpdGNoIHZhbHVlIG9mIGRlc3RpbmF0aW9uIHN1cmZhY2UgaW4gQllURQotICogQGJwcDogQ29sb3IgZGVwdGggb2YgZGVzdGluYXRpb24gc3VyZmFjZQotICogQGR4LCBkeTogU3RhcnRpbmcgY29vcmRpbmF0ZSBvZiBkZXN0aW5hdGlvbiBzdXJmYWNlCi0gKiBAd2lkdGgsIGhlaWdodDogd2lkdGggYW5kIGhlaWdodCBvZiByZWN0YW5nZSBpbiBwaXhlbCB2YWx1ZQotICogQGZDb2xvcixiQ29sb3I6IEZvcmVncm91bmQsIEJhY2tncm91bmQgY29sb3IgKGNvcnJlc3BvbmRpbmcgdG8gYSAxLCAwIGluCi0gKiAJdGhlIG1vbm9jaHJvbWUgZGF0YSkKLSAqIEByb3AyOiBST1AgdmFsdWUKLSAqLwotCi1leHRlcm4gbG9uZyBkZVN5c3RlbU1lbTJWaWRlb01lbU1vbm9CbHQoCi0JY29uc3QgY2hhciAqcFNyY2J1ZiwKLQlsb25nIHNyY0RlbHRhLAotCXVuc2lnbmVkIGxvbmcgc3RhcnRCaXQsCi0JdW5zaWduZWQgbG9uZyBkQmFzZSwKLQl1bnNpZ25lZCBsb25nIGRQaXRjaCwKLQl1bnNpZ25lZCBsb25nIGJwcCwKLQl1bnNpZ25lZCBsb25nIGR4LCB1bnNpZ25lZCBsb25nIGR5LAotCXVuc2lnbmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0LAotCXVuc2lnbmVkIGxvbmcgZkNvbG9yLAotCXVuc2lnbmVkIGxvbmcgYkNvbG9yLAotCXVuc2lnbmVkIGxvbmcgcm9wMik7Ci0KLWV4dGVybiB1bnNpZ25lZCBsb25nIGRlR2V0VHJhbnNwYXJlbmN5KHZvaWQpOwotZXh0ZXJuIHZvaWQgZGVTZXRQaXhlbEZvcm1hdCh1bnNpZ25lZCBsb25nIGJwcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMgYi9kcml2ZXJzL3N0YWdpbmcvc203eHgvc210Y2ZiLmMKaW5kZXggYTRmNmY0OS4uOWM4MmExYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3NtN3h4L3NtdGNmYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy9zbTd4eC9zbXRjZmIuYwpAQCAtNDUsNyArNDUsNiBAQAogc3RydWN0IHNjcmVlbl9pbmZvIHNtdGNfc2NyZWVuX2luZm87CiAKICNpbmNsdWRlICJzbXRjZmIuaCIKLSNpbmNsdWRlICJzbXRjMmQuaCIKIAogI2lmZGVmIERFQlVHCiAjZGVmaW5lIHNtZGJnKGZvcm1hdCwgYXJnLi4uKQlwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQgLCAjIyBhcmcpCkBAIC0xMjAsMTAgKzExOSw2IEBACiBjaGFyIF9faW9tZW0gKnNtdGNfUmVnQmFzZUFkZHJlc3M7CS8qIE1lbW9yeSBNYXAgSU8gc3RhcnRpbmcgYWRkcmVzcyAqLwogY2hhciBfX2lvbWVtICpzbXRjX1ZSQU1CYXNlQWRkcmVzczsJLyogdmlkZW8gbWVtb3J5IHN0YXJ0aW5nIGFkZHJlc3MgKi8KIAotY2hhciAqc210Y18yREJhc2VBZGRyZXNzOwkvKiAyRCBlbmdpbmUgc3RhcnRpbmcgYWRkcmVzcyAqLwotY2hhciAqc210Y18yRGRhdGFwb3J0OwkJLyogMkQgZGF0YSBwb3J0IG9mZnNldCAqLwotc2hvcnQgc210Y18yRGFjY2VsZXJhdGlvbjsKLQogc3RhdGljIHUzMiBjb2xyZWdbMTddOwogc3RhdGljIHN0cnVjdCBwYXJfaW5mbyBodzsJLyogaGFyZHdhcmUgaW5mb3JtYXRpb24gKi8KIApAQCAtMTM1LDE2ICsxMzAsNiBAQAogCiAjZGVmaW5lIG51bVNNVENjaGlwSURzIChzaXplb2Yoc210Y19DaGlwSURzKSAvIHNpemVvZih1MTYpKQogCi12b2lkIGRlV2FpdEZvck5vdEJ1c3kodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGkgPSAweDEwMDAwMDA7Ci0Jd2hpbGUgKGktLSkgewotCQlpZiAoKHNtdGNfc2VxcigweDE2KSAmIDB4MTgpID09IDB4MTApCi0JCQlicmVhazsKLQl9Ci0Jc210Y19kZV9idXN5ID0gMDsKLX0KLQogc3RhdGljIHZvaWQgc203MTJfc2V0X3RpbWluZyhzdHJ1Y3Qgc210Y2ZiX2luZm8gKnNmYiwKIAkJCSAgICAgc3RydWN0IHBhcl9pbmZvICpwcGFyX2luZm8pCiB7CkBAIC0zMjQsNyArMzA5LDcgQEAKIAlyZXR1cm4gY2hhbiA8PCBiZi0+b2Zmc2V0OwogfQogCi1zdGF0aWMgaW50IHNtdGNmYl9ibGFuayhpbnQgYmxhbmtfbW9kZSwgc3RydWN0IGZiX2luZm8gKmluZm8pCitzdGF0aWMgaW50IGNmYl9ibGFuayhpbnQgYmxhbmtfbW9kZSwgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CiAJLyogY2xlYXIgRFBNUyBzZXR0aW5nICovCiAJc3dpdGNoIChibGFua19tb2RlKSB7CkBAIC02MjIsOTMgKzYwNywxMyBAQAogfQogI2VuZGlmCS8qICEgX19CSUdfRU5ESUFOICovCiAKLSNpbmNsdWRlICJzbXRjMmQuYyIKLQotdm9pZCBzbXRjZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqYXJlYSkKLXsKLQlzdHJ1Y3QgcGFyX2luZm8gKnAgPSAoc3RydWN0IHBhcl9pbmZvICopaW5mby0+cGFyOwotCi0JaWYgKHNtdGNfMkRhY2NlbGVyYXRpb24pIHsKLQkJaWYgKCFhcmVhLT53aWR0aCB8fCAhYXJlYS0+aGVpZ2h0KQotCQkJcmV0dXJuOwotCi0JCWRlQ29weShwLT5CYXNlQWRkcmVzc0luVlJBTSwgMCwgaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsLAotCQkgICAgICAgYXJlYS0+ZHgsIGFyZWEtPmR5LCBhcmVhLT53aWR0aCwgYXJlYS0+aGVpZ2h0LAotCQkgICAgICAgcC0+QmFzZUFkZHJlc3NJblZSQU0sIDAsIGFyZWEtPnN4LCBhcmVhLT5zeSwgMCwgMHhDKTsKLQotCX0gZWxzZQotCQljZmJfY29weWFyZWEoaW5mbywgYXJlYSk7Ci19Ci0KLXZvaWQgc210Y2ZiX2ZpbGxyZWN0KHN0cnVjdCBmYl9pbmZvICppbmZvLCBjb25zdCBzdHJ1Y3QgZmJfZmlsbHJlY3QgKnJlY3QpCi17Ci0Jc3RydWN0IHBhcl9pbmZvICpwID0gKHN0cnVjdCBwYXJfaW5mbyAqKWluZm8tPnBhcjsKLQotCWlmIChzbXRjXzJEYWNjZWxlcmF0aW9uKSB7Ci0JCWlmICghcmVjdC0+d2lkdGggfHwgIXJlY3QtPmhlaWdodCkKLQkJCXJldHVybjsKLQkJaWYgKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA+PSAyNCkKLQkJCWRlRmlsbFJlY3QocC0+QmFzZUFkZHJlc3NJblZSQU0sIDAsIHJlY3QtPmR4ICogMywKLQkJCQkgICByZWN0LT5keSAqIDMsIHJlY3QtPndpZHRoICogMywgcmVjdC0+aGVpZ2h0LAotCQkJCSAgIHJlY3QtPmNvbG9yKTsKLQkJZWxzZQotCQkJZGVGaWxsUmVjdChwLT5CYXNlQWRkcmVzc0luVlJBTSwgMCwgcmVjdC0+ZHgsIHJlY3QtPmR5LAotCQkJCSAgIHJlY3QtPndpZHRoLCByZWN0LT5oZWlnaHQsIHJlY3QtPmNvbG9yKTsKLQl9IGVsc2UKLQkJY2ZiX2ZpbGxyZWN0KGluZm8sIHJlY3QpOwotfQotCi12b2lkIHNtdGNmYl9pbWFnZWJsaXQoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9pbWFnZSAqaW1hZ2UpCi17Ci0Jc3RydWN0IHBhcl9pbmZvICpwID0gKHN0cnVjdCBwYXJfaW5mbyAqKWluZm8tPnBhcjsKLQl1MzIgYmdfY29sID0gMCwgZmdfY29sID0gMDsKLQotCWlmICgoc210Y18yRGFjY2VsZXJhdGlvbikgJiYgKGltYWdlLT5kZXB0aCA9PSAxKSkgewotCQlpZiAoc210Y19kZV9idXN5KQotCQkJZGVXYWl0Rm9yTm90QnVzeSgpOwotCi0JCXN3aXRjaCAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSB7Ci0JCWNhc2UgODoKLQkJCWJnX2NvbCA9IGltYWdlLT5iZ19jb2xvcjsKLQkJCWZnX2NvbCA9IGltYWdlLT5mZ19jb2xvcjsKLQkJCWJyZWFrOwotCQljYXNlIDE2OgotCQkJYmdfY29sID0KLQkJCSAgICAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+YmdfY29sb3JdOwotCQkJZmdfY29sID0KLQkJCSAgICAoKHUzMiAqKSAoaW5mby0+cHNldWRvX3BhbGV0dGUpKVtpbWFnZS0+ZmdfY29sb3JdOwotCQkJYnJlYWs7Ci0JCWNhc2UgMzI6Ci0JCQliZ19jb2wgPQotCQkJICAgICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW2ltYWdlLT5iZ19jb2xvcl07Ci0JCQlmZ19jb2wgPQotCQkJICAgICgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW2ltYWdlLT5mZ19jb2xvcl07Ci0JCQlicmVhazsKLQkJfQotCi0JCWRlU3lzdGVtTWVtMlZpZGVvTWVtTW9ub0JsdCgKLQkJCWltYWdlLT5kYXRhLAotCQkJaW1hZ2UtPndpZHRoIC8gOCwKLQkJCTAsCi0JCQlwLT5CYXNlQWRkcmVzc0luVlJBTSwKLQkJCTAsCi0JCQkwLAotCQkJaW1hZ2UtPmR4LCBpbWFnZS0+ZHksCi0JCQlpbWFnZS0+d2lkdGgsIGltYWdlLT5oZWlnaHQsCi0JCQlmZ19jb2wsIGJnX2NvbCwKLQkJCTB4MEMpOwotCi0JfSBlbHNlCi0JCWNmYl9pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOwotfQotCiBzdGF0aWMgc3RydWN0IGZiX29wcyBzbXRjZmJfb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAogCS5mYl9zZXRjb2xyZWcgPSBzbXRjX3NldGNvbHJlZywKLQkuZmJfYmxhbmsgPSBzbXRjZmJfYmxhbmssCi0JLmZiX2ZpbGxyZWN0ID0gc210Y2ZiX2ZpbGxyZWN0LAotCS5mYl9pbWFnZWJsaXQgPSBzbXRjZmJfaW1hZ2VibGl0LAotCS5mYl9jb3B5YXJlYSA9IHNtdGNmYl9jb3B5YXJlYSwKKwkuZmJfYmxhbmsgPSBjZmJfYmxhbmssCisJLmZiX2ZpbGxyZWN0ID0gY2ZiX2ZpbGxyZWN0LAorCS5mYl9pbWFnZWJsaXQgPSBjZmJfaW1hZ2VibGl0LAorCS5mYl9jb3B5YXJlYSA9IGNmYl9jb3B5YXJlYSwKICNpZmRlZiBfX0JJR19FTkRJQU4KIAkuZmJfcmVhZCA9IHNtdGNmYl9yZWFkLAogCS5mYl93cml0ZSA9IHNtdGNmYl93cml0ZSwKQEAgLTc3MiwxMiArNjc3LDYgQEAKIAlody5oZWlnaHQgPSBzZmItPmZiLnZhci55cmVzOwogCWh3Lmh6ID0gNjA7CiAJc210Y19zZXRfdGltaW5nKHNmYiwgJmh3KTsKLQlpZiAoc210Y18yRGFjY2VsZXJhdGlvbikgewotCQlwcmludGsoIjJEIGFjY2VsZXJhdGlvbiBlbmFibGVkIVxuIik7Ci0JCS8qIEluaXQgc210YyBkcmF3aW5nIGVuZ2luZSAqLwotCQlkZUluaXQoc2ZiLT5mYi52YXIueHJlcywgc2ZiLT5mYi52YXIueXJlcywKLQkJCQlzZmItPmZiLnZhci5iaXRzX3Blcl9waXhlbCk7Ci0JfQogfQogCiAvKgpAQCAtMTAwNCw5ICs5MDMsNyBAQAogI2VuZGlmCiAJCWh3Lm1fcE1NSU8gPSAoc210Y19SZWdCYXNlQWRkcmVzcyA9CiAJCSAgICBzbXRjX1ZSQU1CYXNlQWRkcmVzcyArIDB4MDA3MDAwMDApOwotCQlzbXRjXzJEQmFzZUFkZHJlc3MgPSAoaHcubV9wRFBSID0KLQkJICAgIHNtdGNfVlJBTUJhc2VBZGRyZXNzICsgMHgwMDQwODAwMCk7Ci0JCXNtdGNfMkRkYXRhcG9ydCA9IHNtdGNfVlJBTUJhc2VBZGRyZXNzICsgREVfREFUQV9QT1JUXzcxMjsKKwkJaHcubV9wRFBSID0gc210Y19WUkFNQmFzZUFkZHJlc3MgKyAweDAwNDA4MDAwOwogCQlody5tX3BWUFIgPSBody5tX3BMRkIgKyAweDAwNDBjMDAwOwogI2lmZGVmIF9fQklHX0VORElBTgogCQlpZiAoc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPT0gMzIpIHsKQEAgLTEwMzUsMjcgKzkzMiwyMSBAQAogCQlpZiAoc2ZiLT5mYi52YXIuYml0c19wZXJfcGl4ZWwgPT0gMzIpCiAJCQlzbXRjX3NlcXcoMHgxNywgMHgzMCk7CiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfRkJfU003WFhfQUNDRUwKLQkJc210Y18yRGFjY2VsZXJhdGlvbiA9IDE7Ci0jZW5kaWYKIAkJYnJlYWs7CiAJY2FzZSAweDcyMDoKIAkJc2ZiLT5mYi5maXgubW1pb19zdGFydCA9IHBGcmFtZWJ1ZmZlclBoeXNpY2FsOwogCQlzZmItPmZiLmZpeC5tbWlvX2xlbiA9IDB4MDAyMDAwMDA7CiAJCXNtZW1fc2l6ZSA9IFNNNzIyX1ZJREVPTUVNT1JZU0laRTsKLQkJc210Y18yREJhc2VBZGRyZXNzID0gKGh3Lm1fcERQUiA9Ci0JCSAgICBpb3JlbWFwKHBGcmFtZWJ1ZmZlclBoeXNpY2FsLCAweDAwYTAwMDAwKSk7CisJCWh3Lm1fcERQUiA9IGlvcmVtYXAocEZyYW1lYnVmZmVyUGh5c2ljYWwsIDB4MDBhMDAwMDApOwogCQlody5tX3BMRkIgPSAoc210Y19WUkFNQmFzZUFkZHJlc3MgPQotCQkgICAgc210Y18yREJhc2VBZGRyZXNzICsgMHgwMDIwMDAwMCk7CisJCSAgICBody5tX3BEUFIgKyAweDAwMjAwMDAwKTsKIAkJaHcubV9wTU1JTyA9IChzbXRjX1JlZ0Jhc2VBZGRyZXNzID0KLQkJICAgIHNtdGNfMkRCYXNlQWRkcmVzcyArIDB4MDAwYzAwMDApOwotCQlzbXRjXzJEZGF0YXBvcnQgPSBzbXRjXzJEQmFzZUFkZHJlc3MgKyBERV9EQVRBX1BPUlRfNzIyOwotCQlody5tX3BWUFIgPSBzbXRjXzJEQmFzZUFkZHJlc3MgKyAweDgwMDsKKwkJICAgIGh3Lm1fcERQUiArIDB4MDAwYzAwMDApOworCQlody5tX3BWUFIgPSBody5tX3BEUFIgKyAweDgwMDsKIAogCQlzbXRjX3NlcXcoMHg2MiwgMHhmZik7CiAJCXNtdGNfc2VxdygweDZhLCAweDBkKTsKIAkJc210Y19zZXF3KDB4NmIsIDB4MDIpOwotCQlzbXRjXzJEYWNjZWxlcmF0aW9uID0gMDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fSU5GTwpAQCAtMTEwMyw3ICs5OTQsNyBAQAogCiAKIC8qIEphc29uICgwOC8xMS8yMDA5KSBQQ0lfRFJWIHdyYXBwZXIgZXNzZW50aWFsIHN0cnVjdHMgKi8KLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBzbXRjZmJfcGNpX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgc210Y2ZiX3BjaV90YWJsZVtdID0gewogCXsweDEyNmYsIDB4NzEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKIAl7MHgxMjZmLCAweDcxMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sCiAJezB4MTI2ZiwgMHg3MjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VkbGZiL0tjb25maWcgYi9kcml2ZXJzL3N0YWdpbmcvdWRsZmIvS2NvbmZpZwppbmRleCA2NDE2OTJkLi42NWJkNWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdWRsZmIvS2NvbmZpZworKysgYi9kcml2ZXJzL3N0YWdpbmcvdWRsZmIvS2NvbmZpZwpAQCAtMSw4ICsxLDE0IEBACiBjb25maWcgRkJfVURMCiAJdHJpc3RhdGUgIkRpc3BsYXlsaW5rIFVTQiBGcmFtZWJ1ZmZlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gRkIgJiYgVVNCCisJc2VsZWN0IEZCX01PREVfSEVMUEVSUworCXNlbGVjdCBGQl9TWVNfRklMTFJFQ1QKKwlzZWxlY3QgRkJfU1lTX0NPUFlBUkVBCisJc2VsZWN0IEZCX1NZU19JTUFHRUJMSVQKKwlzZWxlY3QgRkJfU1lTX0ZPUFMKKwlzZWxlY3QgRkJfREVGRVJSRURfSU8KIAktLS1oZWxwLS0tCi0JICBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIgZm9yIERpc3BsYXlMaW5rIFVTQiBkZXZpY2VzCi0JICB0aGF0IHByb3ZpZGVzIGEgZnJhbWVidWZmZXIgZGV2aWNlLiAgQSBub3JtYWwgZnJhbWVidWZmZXIgY2FuCi0JICBiZSB1c2VkIHdpdGggdGhpcyBkcml2ZXIsIG9yIHhvcmcgY2FuIGJlIHJ1biBvbiB0aGUgZGV2aWNlCi0JICB1c2luZyBpdC4KKwkgIFRoaXMgaXMgYSBrZXJuZWwgZnJhbWVidWZmZXIgZHJpdmVyIGZvciBEaXNwbGF5TGluayBVU0IgZGV2aWNlcy4KKwkgIFN1cHBvcnRzIGZiZGV2IGNsaWVudHMgbGlrZSB4Zjg2LXZpZGVvLWZiZGV2LCBrZHJpdmUsIGZiaSwgYW5kCisJICBtcGxheWVyIC12byBmYmRldi4gU3VwcG9ydHMgYWxsIFVTQiAyLjAgZXJhIERpc3BsYXlMaW5rIGRldmljZXMuCisJICBUbyBjb21waWxlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlIG5hbWUgaXMgdWRsZmIuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdWRsZmIvdWRsZmIuYyBiL2RyaXZlcnMvc3RhZ2luZy91ZGxmYi91ZGxmYi5jCmluZGV4IGY1NDE2YWYuLjhmNjIyM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91ZGxmYi91ZGxmYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91ZGxmYi91ZGxmYi5jCkBAIC0xLDE3ICsxLDIwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICBETEZCIEtlcm5lbCBEcml2ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAwLjIgKHVkbGZiKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgICAgICAoQykgMjAwOSBSb2JlcnRvIERlIElvcmlzIDxyb2JlcnRvQHVuYml0Lml0PiAgICAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMdjIuIFNlZSBDT1BZSU5HIGluIHRoZSBwYWNrYWdlLiAgICAqCi0gKiBCYXNlZCBvbiB0aGUgYW1hemluZyB3b3JrIG9mIEZsb3JpYW4gRWNodGxlciBhbmQgbGliZGxvIDAuMSAgICAgICAgICAgICAgICoKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAxMC4wNi4wOSByZWxlYXNlIDAuMi4zIChlZGlkIGlvY3RsLCBmYWxsYmFjayBmb3IgdW5zdXBwb3J0ZWQgbW9kZXMpICAgICAgICoKLSAqIDA1LjA2LjA5IHJlbGVhc2UgMC4yLjIgKHJlYWwgc2NyZWVuIGJsYW5raW5nLCBybGUgY29tcHJlc3Npb24sIGRvdWJsZSBidWZmZXIpICoKLSAqIDMxLjA1LjA5IHJlbGVhc2UgMC4yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogMjIuMDUuMDkgRmlyc3QgcHVibGljICh1Z2x5KSByZWxlYXNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogdWRsZmIuYyAtLSBGcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIERpc3BsYXlMaW5rIFVTQiBjb250cm9sbGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFJvYmVydG8gRGUgSW9yaXMgPHJvYmVydG9AdW5iaXQuaXQ+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSmF5YSBLdW1hciA8amF5YWt1bWFyLmxrbWxAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEJlcm5pZSBUaG9tcHNvbiA8YmVybmllQHBsdWdhYmxlLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlIENPUFlJTkcgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBMYXlvdXQgaXMgYmFzZWQgb24gc2tlbGV0b25mYiBieSBKYW1lcyBTaW1tb25zIGFuZCBHZWVydCBVeXR0ZXJob2V2ZW4sCisgKiB1c2Itc2tlbGV0b24gYnkgR3JlZ0tILgorICoKKyAqIERldmljZS1zcGVjaWZpYyBwb3J0aW9ucyBiYXNlZCBvbiBpbmZvcm1hdGlvbiBmcm9tIERpc3BsYXlsaW5rLCB3aXRoIHdvcmsKKyAqIGZyb20gRmxvcmlhbiBFY2h0bGVyLCBIZW5yaWsgQmplcnJlZ2FhcmQgUGVkZXJzZW4sIGFuZCBvdGhlcnMuCisgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtMjAsNjAgKzIzLDI4MiBAQAogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+Ci0jaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNpbmNsdWRlICJ1ZGxmYi5oIgogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJETEZCIDAuMiIKK3N0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gZGxmYl9maXggPSB7CisJLmlkID0gICAgICAgICAgICJ1ZGxmYiIsCisJLnR5cGUgPSAgICAgICAgIEZCX1RZUEVfUEFDS0VEX1BJWEVMUywKKwkudmlzdWFsID0gICAgICAgRkJfVklTVUFMX1RSVUVDT0xPUiwKKwkueHBhbnN0ZXAgPSAgICAgMCwKKwkueXBhbnN0ZXAgPSAgICAgMCwKKwkueXdyYXBzdGVwID0gICAgMCwKKwkuYWNjZWwgPSAgICAgICAgRkJfQUNDRUxfTk9ORSwKK307CiAKLS8qIG1lbW9yeSBmdW5jdGlvbnMgdGFrZW4gZnJvbSB2ZmIgKi8KK3N0YXRpYyBjb25zdCB1MzIgdWRsZmJfaW5mb19mbGFncyA9IEZCSU5GT19ERUZBVUxUIHwgRkJJTkZPX1JFQURTX0ZBU1QgfAorI2lmZGVmIEZCSU5GT19WSVJURkIKKwkJRkJJTkZPX1ZJUlRGQiB8CisjZW5kaWYKKwkJRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUIHwgRkJJTkZPX0hXQUNDRUxfRklMTFJFQ1QgfAorCQlGQklORk9fSFdBQ0NFTF9DT1BZQVJFQSB8IEZCSU5GT19NSVNDX0FMV0FZU19TRVRQQVI7CiAKLXN0YXRpYyB2b2lkICpydm1hbGxvYyh1bnNpZ25lZCBsb25nIHNpemUpCisvKgorICogVGhlcmUgYXJlIG1hbnkgRGlzcGxheUxpbmstYmFzZWQgcHJvZHVjdHMsIGFsbCB3aXRoIHVuaXF1ZSBQSURzLiBXZSBhcmUgYWJsZQorICogdG8gc3VwcG9ydCBhbGwgdm9sdW1lIG9uZXMgKGNpcmNhIDIwMDkpIHdpdGggYSBzaW5nbGUgZHJpdmVyLCBzbyB3ZSBtYXRjaAorICogZ2xvYmFsbHkgb24gVklELiBUT0RPOiBQcm9iZSgpIG5lZWRzIHRvIGRldGVjdCB3aGVuIHdlIG1pZ2h0IGJlIHJ1bm5pbmcKKyAqICJmdXR1cmUiIGNoaXBzLCBhbmQgYmFpbCBvbiB0aG9zZSwgc28gYSBjb21wYXRpYmxlIGRyaXZlciBjYW4gbWF0Y2guCisgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXsuaWRWZW5kb3IgPSAweDE3ZTksIC5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfVkVORE9SLH0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworI2lmbmRlZiBDT05GSUdfRkJfREVGRVJSRURfSU8KKyN3YXJuaW5nIG1lc3NhZ2UgImtlcm5lbCBGQl9ERUZGRVJSRURfSU8gb3B0aW9uIHRvIHN1cHBvcnQgZ2VuZXJpYyBmYmRldiBhcHBzIgorI2VuZGlmCisKKyNpZm5kZWYgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQKKyNpZm5kZWYgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVRfTU9EVUxFCisjd2FybmluZyBtZXNzYWdlICJGQl9TWVNfKiBpbiBrZXJuZWwgb3IgbW9kdWxlIG9wdGlvbiB0byBzdXBwb3J0IGZiIGNvbnNvbGUiCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19GQl9NT0RFX0hFTFBFUlMKKyN3YXJuaW5nIG1lc3NhZ2UgImtlcm5lbCBGQl9NT0RFX0hFTFBFUlMgcmVxdWlyZWQuIEV4cGVjdCBidWlsZCBicmVhayIKKyNlbmRpZgorCisvKiBkbGZiIGtlZXBzIGEgbGlzdCBvZiB1cmJzIGZvciBlZmZpY2llbnQgYnVsayB0cmFuc2ZlcnMgKi8KK3N0YXRpYyB2b2lkIGRsZmJfdXJiX2NvbXBsZXRpb24oc3RydWN0IHVyYiAqdXJiKTsKK3N0YXRpYyBzdHJ1Y3QgdXJiICpkbGZiX2dldF91cmIoc3RydWN0IGRsZmJfZGF0YSAqZGV2KTsKK3N0YXRpYyBpbnQgZGxmYl9zdWJtaXRfdXJiKHN0cnVjdCBkbGZiX2RhdGEgKmRldiwgc3RydWN0IHVyYiAqIHVyYiwgc2l6ZV90IGxlbik7CitzdGF0aWMgaW50IGRsZmJfYWxsb2NfdXJiX2xpc3Qoc3RydWN0IGRsZmJfZGF0YSAqZGV2LCBpbnQgY291bnQsIHNpemVfdCBzaXplKTsKK3N0YXRpYyB2b2lkIGRsZmJfZnJlZV91cmJfbGlzdChzdHJ1Y3QgZGxmYl9kYXRhICpkZXYpOworCisvKiBvdGhlciBzeW1ib2xzIHdpdGggZGVwZW5kZW50cyAqLworI2lmZGVmIENPTkZJR19GQl9ERUZFUlJFRF9JTworc3RhdGljIHN0cnVjdCBmYl9kZWZlcnJlZF9pbyBkbGZiX2RlZmlvOworI2VuZGlmCisKKy8qCisgKiBBbGwgRGlzcGxheUxpbmsgYnVsayBvcGVyYXRpb25zIHN0YXJ0IHdpdGggMHhBRiwgZm9sbG93ZWQgYnkgc3BlY2lmaWMgY29kZQorICogQWxsIG9wZXJhdGlvbnMgYXJlIHdyaXR0ZW4gdG8gYnVmZmVycyB3aGljaCB0aGVuIGxhdGVyIGdldCBzZW50IHRvIGRldmljZQorICovCitzdGF0aWMgY2hhciAqZGxmYl9zZXRfcmVnaXN0ZXIoY2hhciAqYnVmLCB1OCByZWcsIHU4IHZhbCkKIHsKLQl2b2lkICptZW07Ci0JdW5zaWduZWQgbG9uZyBhZHI7Ci0KLQlzaXplID0gUEFHRV9BTElHTihzaXplKTsKLQltZW0gPSB2bWFsbG9jXzMyKHNpemUpOwotCWlmICghbWVtKQotCQlyZXR1cm4gTlVMTDsKLQotCW1lbXNldChtZW0sIDAsIHNpemUpOwkvKiBDbGVhciB0aGUgcmFtIG91dCwgbm8ganVuayB0byB0aGUgdXNlciAqLwotCWFkciA9ICh1bnNpZ25lZCBsb25nKW1lbTsKLQl3aGlsZSAoc2l6ZSA+IDApIHsKLQkJU2V0UGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOwotCQlhZHIgKz0gUEFHRV9TSVpFOwotCQlzaXplIC09IFBBR0VfU0laRTsKLQl9Ci0KLQlyZXR1cm4gbWVtOworCSpidWYrKyA9IDB4QUY7CisJKmJ1ZisrID0gMHgyMDsKKwkqYnVmKysgPSByZWc7CisJKmJ1ZisrID0gdmFsOworCXJldHVybiBidWY7CiB9CiAKLXN0YXRpYyB2b2lkIHJ2ZnJlZSh2b2lkICptZW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3N0YXRpYyBjaGFyICpkbGZiX3ZpZHJlZ19sb2NrKGNoYXIgKmJ1ZikKIHsKLQl1bnNpZ25lZCBsb25nIGFkcjsKLQotCWlmICghbWVtKQotCQlyZXR1cm47Ci0KLQlhZHIgPSAodW5zaWduZWQgbG9uZyltZW07Ci0Jd2hpbGUgKChsb25nKXNpemUgPiAwKSB7Ci0JCUNsZWFyUGFnZVJlc2VydmVkKHZtYWxsb2NfdG9fcGFnZSgodm9pZCAqKWFkcikpOwotCQlhZHIgKz0gUEFHRV9TSVpFOwotCQlzaXplIC09IFBBR0VfU0laRTsKLQl9Ci0JdmZyZWUobWVtKTsKKwlyZXR1cm4gZGxmYl9zZXRfcmVnaXN0ZXIoYnVmLCAweEZGLCAweDAwKTsKIH0KIAotc3RhdGljIGludCBkbGZiX21tYXAoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorc3RhdGljIGNoYXIgKmRsZmJfdmlkcmVnX3VubG9jayhjaGFyICpidWYpCit7CisJcmV0dXJuIGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZiwgMHhGRiwgMHhGRik7Cit9CisKKy8qCisgKiBPbi9PZmYgZm9yIGRyaXZpbmcgdGhlIERpc3BsYXlMaW5rIGZyYW1lYnVmZmVyIHRvIHRoZSBkaXNwbGF5CisgKi8KK3N0YXRpYyBjaGFyICpkbGZiX2VuYWJsZV9odnN5bmMoY2hhciAqYnVmLCBib29sIGVuYWJsZSkKK3sKKwlpZiAoZW5hYmxlKQorCQlyZXR1cm4gZGxmYl9zZXRfcmVnaXN0ZXIoYnVmLCAweDFGLCAweDAwKTsKKwllbHNlCisJCXJldHVybiBkbGZiX3NldF9yZWdpc3RlcihidWYsIDB4MUYsIDB4MDEpOworfQorCitzdGF0aWMgY2hhciAqZGxmYl9zZXRfY29sb3JfZGVwdGgoY2hhciAqYnVmLCB1OCBzZWxlY3Rpb24pCit7CisJcmV0dXJuIGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZiwgMHgwMCwgc2VsZWN0aW9uKTsKK30KKworc3RhdGljIGNoYXIgKmRsZmJfc2V0X2Jhc2UxNmJwcChjaGFyICp3cnB0ciwgdTMyIGJhc2UpCit7CisJLyogdGhlIGJhc2UgcG9pbnRlciBpcyAxNiBiaXRzIHdpZGUsIDB4MjAgaXMgaGkgYnl0ZS4gKi8KKwl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyKHdycHRyLCAweDIwLCBiYXNlID4+IDE2KTsKKwl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyKHdycHRyLCAweDIxLCBiYXNlID4+IDgpOworCXJldHVybiBkbGZiX3NldF9yZWdpc3Rlcih3cnB0ciwgMHgyMiwgYmFzZSk7Cit9CisKKy8qCisgKiBEaXNwbGF5TGluayBIVyBoYXMgc2VwYXJhdGUgMTZicHAgYW5kIDhicHAgZnJhbWVidWZmZXJzLgorICogSW4gMjRicHAgbW9kZXMsIHRoZSBsb3cgMzIzIFJHQiBiaXRzIGdvIGluIHRoZSA4YnBwIGZyYW1lYnVmZmVyCisgKi8KK3N0YXRpYyBjaGFyICpkbGZiX3NldF9iYXNlOGJwcChjaGFyICp3cnB0ciwgdTMyIGJhc2UpCit7CisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcih3cnB0ciwgMHgyNiwgYmFzZSA+PiAxNik7CisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcih3cnB0ciwgMHgyNywgYmFzZSA+PiA4KTsKKwlyZXR1cm4gZGxmYl9zZXRfcmVnaXN0ZXIod3JwdHIsIDB4MjgsIGJhc2UpOworfQorCitzdGF0aWMgY2hhciAqZGxmYl9zZXRfcmVnaXN0ZXJfMTYoY2hhciAqd3JwdHIsIHU4IHJlZywgdTE2IHZhbHVlKQoreworCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXIod3JwdHIsIHJlZywgdmFsdWUgPj4gOCk7CisJcmV0dXJuIGRsZmJfc2V0X3JlZ2lzdGVyKHdycHRyLCByZWcrMSwgdmFsdWUpOworfQorCisvKgorICogVGhpcyBpcyBraW5kIG9mIHdlaXJkIGJlY2F1c2UgdGhlIGNvbnRyb2xsZXIgdGFrZXMgc29tZQorICogcmVnaXN0ZXIgdmFsdWVzIGluIGEgZGlmZmVyZW50IGJ5dGUgb3JkZXIgdGhhbiBvdGhlciByZWdpc3RlcnMuCisgKi8KK3N0YXRpYyBjaGFyICpkbGZiX3NldF9yZWdpc3Rlcl8xNmJlKGNoYXIgKndycHRyLCB1OCByZWcsIHUxNiB2YWx1ZSkKK3sKKwl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyKHdycHRyLCByZWcsIHZhbHVlKTsKKwlyZXR1cm4gZGxmYl9zZXRfcmVnaXN0ZXIod3JwdHIsIHJlZysxLCB2YWx1ZSA+PiA4KTsKK30KKworLyoKKyAqIExGU1IgaXMgbGluZWFyIGZlZWRiYWNrIHNoaWZ0IHJlZ2lzdGVyLiBUaGUgcmVhc29uIHdlIGhhdmUgdGhpcyBpcworICogYmVjYXVzZSB0aGUgZGlzcGxheSBjb250cm9sbGVyIG5lZWRzIHRvIG1pbmltaXplIHRoZSBjbG9jayBkZXB0aCBvZgorICogdmFyaW91cyBjb3VudGVycyB1c2VkIGluIHRoZSBkaXNwbGF5IHBhdGguIFNvIHRoaXMgY29kZSByZXZlcnNlcyB0aGUKKyAqIHByb3ZpZGVkIHZhbHVlIGludG8gdGhlIGxmc3IxNiB2YWx1ZSBieSBjb3VudGluZyBiYWNrd2FyZHMgdG8gZ2V0CisgKiB0aGUgdmFsdWUgdGhhdCBuZWVkcyB0byBiZSBzZXQgaW4gdGhlIGhhcmR3YXJlIGNvbXBhcmF0b3IgdG8gZ2V0IHRoZQorICogc2FtZSBhY3R1YWwgY291bnQuIFRoaXMgbWFrZXMgc2Vuc2Ugb25jZSB5b3UgcmVhZCBhYm92ZSBhIGNvdXBsZSBvZgorICogdGltZXMgYW5kIHRoaW5rIGFib3V0IGl0IGZyb20gYSBoYXJkd2FyZSBwZXJzcGVjdGl2ZS4KKyAqLworc3RhdGljIHUxNiBkbGZiX2xmc3IxNih1MTYgYWN0dWFsX2NvdW50KQoreworCXUzMiBsdiA9IDB4RkZGRjsgLyogVGhpcyBpcyB0aGUgbGZzciB2YWx1ZSB0aGF0IHRoZSBodyBzdGFydHMgd2l0aCAqLworCisJd2hpbGUgKGFjdHVhbF9jb3VudC0tKSB7CisJCWx2ID0JICgobHYgPDwgMSkgfAorCQkJKCgobHYgPj4gMTUpIF4gKGx2ID4+IDQpIF4gKGx2ID4+IDIpIF4gKGx2ID4+IDEpKSAmIDEpKQorCQkJJiAweEZGRkY7CisJfQorCisJcmV0dXJuICh1MTYpIGx2OworfQorCisvKgorICogVGhpcyBkb2VzIExGU1IgY29udmVyc2lvbiBvbiB0aGUgdmFsdWUgdGhhdCBpcyB0byBiZSB3cml0dGVuLgorICogU2VlIExGU1IgZXhwbGFuYXRpb24gYWJvdmUgZm9yIG1vcmUgZGV0YWlsLgorICovCitzdGF0aWMgY2hhciAqZGxmYl9zZXRfcmVnaXN0ZXJfbGZzcjE2KGNoYXIgKndycHRyLCB1OCByZWcsIHUxNiB2YWx1ZSkKK3sKKwlyZXR1cm4gZGxmYl9zZXRfcmVnaXN0ZXJfMTYod3JwdHIsIHJlZywgZGxmYl9sZnNyMTYodmFsdWUpKTsKK30KKworLyoKKyAqIFRoaXMgdGFrZXMgYSBzdGFuZGFyZCBmYmRldiBzY3JlZW5pbmZvIHN0cnVjdCBhbmQgYWxsIG9mIGl0cyBtb25pdG9yIG1vZGUKKyAqIGRldGFpbHMgYW5kIGNvbnZlcnRzIHRoZW0gaW50byB0aGUgRGlzcGxheUxpbmsgZXF1aXZhbGVudCByZWdpc3RlciBjb21tYW5kcy4KKyAqLworc3RhdGljIGNoYXIgKmRsZmJfc2V0X3ZpZF9jbWRzKGNoYXIgKndycHRyLCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcikKK3sKKwl1MTYgeGRzLCB5ZHM7CisJdTE2IHhkZSwgeWRlOworCXUxNiB5ZWM7CisKKwkvKiB4IGRpc3BsYXkgc3RhcnQgKi8KKwl4ZHMgPSB2YXItPmxlZnRfbWFyZ2luICsgdmFyLT5oc3luY19sZW47CisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcl9sZnNyMTYod3JwdHIsIDB4MDEsIHhkcyk7CisJLyogeCBkaXNwbGF5IGVuZCAqLworCXhkZSA9IHhkcyArIHZhci0+eHJlczsKKwl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyX2xmc3IxNih3cnB0ciwgMHgwMywgeGRlKTsKKworCS8qIHkgZGlzcGxheSBzdGFydCAqLworCXlkcyA9IHZhci0+dXBwZXJfbWFyZ2luICsgdmFyLT52c3luY19sZW47CisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcl9sZnNyMTYod3JwdHIsIDB4MDUsIHlkcyk7CisJLyogeSBkaXNwbGF5IGVuZCAqLworCXlkZSA9IHlkcyArIHZhci0+eXJlczsKKwl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyX2xmc3IxNih3cnB0ciwgMHgwNywgeWRlKTsKKworCS8qIHggZW5kIGNvdW50IGlzIGFjdGl2ZSArIGJsYW5raW5nIC0gMSAqLworCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXJfbGZzcjE2KHdycHRyLCAweDA5LAorCQkJeGRlICsgdmFyLT5yaWdodF9tYXJnaW4gLSAxKTsKKworCS8qIGxpYmRsbyBoYXJkY29kZXMgaHN5bmMgc3RhcnQgdG8gMSAqLworCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXJfbGZzcjE2KHdycHRyLCAweDBCLCAxKTsKKworCS8qIGhzeW5jIGVuZCBpcyB3aWR0aCBvZiBzeW5jIHB1bHNlICsgMSAqLworCXdycHRyID0gZGxmYl9zZXRfcmVnaXN0ZXJfbGZzcjE2KHdycHRyLCAweDBELCB2YXItPmhzeW5jX2xlbiArIDEpOworCisJLyogaHBpeGVscyBpcyBhY3RpdmUgcGl4ZWxzICovCisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcl8xNih3cnB0ciwgMHgwRiwgdmFyLT54cmVzKTsKKworCS8qIHllbmRjb3VudCBpcyB2ZXJ0aWNhbCBhY3RpdmUgKyB2ZXJ0aWNhbCBibGFua2luZyAqLworCXllYyA9IHZhci0+eXJlcyArIHZhci0+dXBwZXJfbWFyZ2luICsgdmFyLT5sb3dlcl9tYXJnaW4gKworCQkJdmFyLT52c3luY19sZW47CisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcl9sZnNyMTYod3JwdHIsIDB4MTEsIHllYyk7CisKKwkvKiBsaWJkbG8gaGFyZGNvZGVzIHZzeW5jIHN0YXJ0IHRvIDAgKi8KKwl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyX2xmc3IxNih3cnB0ciwgMHgxMywgMCk7CisKKwkvKiB2c3luYyBlbmQgaXMgd2lkdGggb2YgdnN5bmMgcHVsc2UgKi8KKwl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyX2xmc3IxNih3cnB0ciwgMHgxNSwgdmFyLT52c3luY19sZW4pOworCisJLyogdnBpeGVscyBpcyBhY3RpdmUgcGl4ZWxzICovCisJd3JwdHIgPSBkbGZiX3NldF9yZWdpc3Rlcl8xNih3cnB0ciwgMHgxNywgdmFyLT55cmVzKTsKKworCS8qIGNvbnZlcnQgcGljb3NlY29uZHMgdG8gNWtIeiBtdWx0aXBsZSBmb3IgcGNsazVrID0geCAqIDFFMTIvNWsgKi8KKwl3cnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyXzE2YmUod3JwdHIsIDB4MUIsCisJCQkyMDAqMTAwMCoxMDAwL3Zhci0+cGl4Y2xvY2spOworCisJcmV0dXJuIHdycHRyOworfQorCisvKgorICogVGhpcyB0YWtlcyBhIHN0YW5kYXJkIGZiZGV2IHNjcmVlbmluZm8gc3RydWN0IHRoYXQgd2FzIGZldGNoZWQgb3IgcHJlcGFyZWQKKyAqIGFuZCB0aGVuIGdlbmVyYXRlcyB0aGUgYXBwcm9wcmlhdGUgY29tbWFuZCBzZXF1ZW5jZSB0aGF0IHRoZW4gZHJpdmVzIHRoZQorICogZGlzcGxheSBjb250cm9sbGVyLgorICovCitzdGF0aWMgaW50IGRsZmJfc2V0X3ZpZGVvX21vZGUoc3RydWN0IGRsZmJfZGF0YSAqZGV2LAorCQkJCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyKQoreworCWNoYXIgKmJ1ZjsKKwljaGFyICp3cnB0cjsKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgd3JpdGVzaXplOworCXN0cnVjdCB1cmIgKnVyYjsKKworCWlmICghYXRvbWljX3JlYWQoJmRldi0+dXNiX2FjdGl2ZSkpCisJCXJldHVybiAtRVBFUk07CisKKwl1cmIgPSBkbGZiX2dldF91cmIoZGV2KTsKKwlpZiAoIXVyYikKKwkJcmV0dXJuIC1FTk9NRU07CisJYnVmID0gKGNoYXIgKikgdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwkvKgorCSogVGhpcyBmaXJzdCBzZWN0aW9uIGhhcyB0byBkbyB3aXRoIHNldHRpbmcgdGhlIGJhc2UgYWRkcmVzcyBvbiB0aGUKKwkqIGNvbnRyb2xsZXIgKiBhc3NvY2lhdGVkIHdpdGggdGhlIGRpc3BsYXkuIFRoZXJlIGFyZSAyIGJhc2UKKwkqIHBvaW50ZXJzLCBjdXJyZW50bHksIHdlIG9ubHkgKiB1c2UgdGhlIDE2IGJwcCBzZWdtZW50LgorCSovCisJd3JwdHIgPSBkbGZiX3ZpZHJlZ19sb2NrKGJ1Zik7CisJd3JwdHIgPSBkbGZiX3NldF9jb2xvcl9kZXB0aCh3cnB0ciwgMHgwMCk7CisJLyogc2V0IGJhc2UgZm9yIDE2YnBwIHNlZ21lbnQgdG8gMCAqLworCXdycHRyID0gZGxmYl9zZXRfYmFzZTE2YnBwKHdycHRyLCAwKTsKKwkvKiBzZXQgYmFzZSBmb3IgOGJwcCBzZWdtZW50IHRvIGVuZCBvZiBmYiAqLworCXdycHRyID0gZGxmYl9zZXRfYmFzZThicHAod3JwdHIsIGRldi0+aW5mby0+Zml4LnNtZW1fbGVuKTsKKworCXdycHRyID0gZGxmYl9zZXRfdmlkX2NtZHMod3JwdHIsIHZhcik7CisJd3JwdHIgPSBkbGZiX2VuYWJsZV9odnN5bmMod3JwdHIsIHRydWUpOworCXdycHRyID0gZGxmYl92aWRyZWdfdW5sb2NrKHdycHRyKTsKKworCXdyaXRlc2l6ZSA9IHdycHRyIC0gYnVmOworCisJcmV0dmFsID0gZGxmYl9zdWJtaXRfdXJiKGRldiwgdXJiLCB3cml0ZXNpemUpOworCisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBkbGZiX29wc19tbWFwKHN0cnVjdCBmYl9pbmZvICppbmZvLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIHsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gdm1hLT52bV9zdGFydDsKIAl1bnNpZ25lZCBsb25nIHNpemUgPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQ7CiAJdW5zaWduZWQgbG9uZyBwYWdlLCBwb3M7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gaW5mby0+cGFyOwogCi0JcHJpbnRrKCJNTUFQOiAlbHUgJXVcbiIsIG9mZnNldCArIHNpemUsIGluZm8tPmZpeC5zbWVtX2xlbik7CisJZGxfbm90aWNlKCJNTUFQOiAlbHUgJXVcbiIsIG9mZnNldCArIHNpemUsIGluZm8tPmZpeC5zbWVtX2xlbik7CiAKIAlpZiAob2Zmc2V0ICsgc2l6ZSA+IGluZm8tPmZpeC5zbWVtX2xlbikKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC05OCw1MjggKzMyMywzNzIgQEAKIAogfQogCi0vKiBpb2N0bCBzdHJ1Y3R1cmUgKi8KLXN0cnVjdCBkbG9hcmVhIHsKLQlpbnQgeCwgeTsKLQlpbnQgdywgaDsKLQlpbnQgeDIsIHkyOwotfTsKLQogLyoKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKLQl7IFVTQl9ERVZJQ0UoMHgxN2U5LCAweDAyM2QpIH0sCi0JeyB9Ci19OwotKi8KLQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7Ci0Jey5pZFZlbmRvciA9IDB4MTdlOSwgLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IsfSwKLQl7fSwKLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZGxmYl9kcml2ZXI7Ci0KLS8vIHRoYW5rcyB0byBIZW5yaWsgQmplcnJlZ2FhcmQgUGVkZXJzZW4gZm9yIHRoaXMgZnVuY3Rpb24KLXN0YXRpYyBjaGFyICpybGVfY29tcHJlc3MxNih1aW50MTZfdCAqIHNyYywgY2hhciAqZHN0LCBpbnQgcmVtKQorICogVHJpbXMgaWRlbnRpY2FsIGRhdGEgZnJvbSBmcm9udCBhbmQgYmFjayBvZiBsaW5lCisgKiBTZXRzIG5ldyBmcm9udCBidWZmZXIgYWRkcmVzcyBhbmQgd2lkdGgKKyAqIEFuZCByZXR1cm5zIGJ5dGUgY291bnQgb2YgaWRlbnRpY2FsIHBpeGVscworICogQXNzdW1lcyBDUFUgbmF0dXJhbCBhbGlnbm1lbnQgKHVuc2lnbmVkIGxvbmcpCisgKiBmb3IgYmFjayBhbmQgZnJvbnQgYnVmZmVyIHB0cnMgYW5kIHdpZHRoCisgKi8KK3N0YXRpYyBpbnQgZGxmYl90cmltX2hsaW5lKGNvbnN0IHU4ICpiYmFjaywgY29uc3QgdTggKipiZnJvbnQsIGludCAqd2lkdGhfYnl0ZXMpCiB7CisJaW50IGosIGs7CisJY29uc3QgdW5zaWduZWQgbG9uZyAqYmFjayA9IChjb25zdCB1bnNpZ25lZCBsb25nICopIGJiYWNrOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKmZyb250ID0gKGNvbnN0IHVuc2lnbmVkIGxvbmcgKikgKmJmcm9udDsKKwljb25zdCBpbnQgd2lkdGggPSAqd2lkdGhfYnl0ZXMgLyBzaXplb2YodW5zaWduZWQgbG9uZyk7CisJaW50IGlkZW50aWNhbCA9IHdpZHRoOworCWludCBzdGFydCA9IHdpZHRoOworCWludCBlbmQgPSB3aWR0aDsKIAotCWludCBybDsKLQl1aW50MTZfdCBwaXgwOwotCWNoYXIgKmVuZF9pZl9yYXcgPSBkc3QgKyA2ICsgMiAqIHJlbTsKKwlwcmVmZXRjaCgodm9pZCAqKSBmcm9udCk7CisJcHJlZmV0Y2goKHZvaWQgKikgYmFjayk7CiAKLQlkc3QgKz0gNjsJCS8vIGhlYWRlciB3aWxsIGJlIGZpbGxlZCBpbiBpZiBSTEUgaXMgd29ydGggaXQKLQotCXdoaWxlIChyZW0gJiYgZHN0IDwgZW5kX2lmX3JhdykgewotCQljaGFyICpzdGFydCA9IChjaGFyICopc3JjOwotCi0JCXBpeDAgPSAqc3JjKys7Ci0JCXJsID0gMTsKLQkJcmVtLS07Ci0JCXdoaWxlIChyZW0gJiYgKnNyYyA9PSBwaXgwKQotCQkJcmVtLS0sIHJsKyssIHNyYysrOwotCQkqZHN0KysgPSBybDsKLQkJKmRzdCsrID0gc3RhcnRbMV07Ci0JCSpkc3QrKyA9IHN0YXJ0WzBdOworCWZvciAoaiA9IDA7IGogPCB3aWR0aDsgaisrKSB7CisJCWlmIChiYWNrW2pdICE9IGZyb250W2pdKSB7CisJCQlzdGFydCA9IGo7CisJCQlicmVhazsKKwkJfQogCX0KIAotCXJldHVybiBkc3Q7CisJZm9yIChrID0gd2lkdGggLSAxOyBrID4gajsgay0tKSB7CisJCWlmIChiYWNrW2tdICE9IGZyb250W2tdKSB7CisJCQllbmQgPSBrKzE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlkZW50aWNhbCA9IHN0YXJ0ICsgKHdpZHRoIC0gZW5kKTsKKwkqYmZyb250ID0gKHU4ICopICZmcm9udFtzdGFydF07CisJKndpZHRoX2J5dGVzID0gKGVuZCAtIHN0YXJ0KSAqIHNpemVvZih1bnNpZ25lZCBsb25nKTsKKworCXJldHVybiBpZGVudGljYWwgKiBzaXplb2YodW5zaWduZWQgbG9uZyk7CiB9CiAKIC8qCi1UaGFua3MgdG8gSGVucmlrIEJqZXJyZWdhYXJkIFBlZGVyc2VuIGZvciBybGUgaW1wbGVtZW50YXRpb24gYW5kIGNvZGUgcmVmYWN0b3JpbmcuCi1OZXh0IHN0ZXAgaXMgaHVmZm1hbiBjb21wcmVzc2lvbi4KK1JlbmRlciBhIGNvbW1hbmQgc3RyZWFtIGZvciBhbiBlbmNvZGVkIGhvcml6b250YWwgbGluZSBzZWdtZW50IG9mIHBpeGVscy4KKworQSBjb21tYW5kIGJ1ZmZlciBob2xkcyBzZXZlcmFsIGNvbW1hbmRzLgorSXQgYWx3YXlzIGJlZ2lucyB3aXRoIGEgZnJlc2ggY29tbWFuZCBoZWFkZXIKKyh0aGUgcHJvdG9jb2wgZG9lc24ndCByZXF1aXJlIHRoaXMsIGJ1dCB3ZSBlbmZvcmNlIGl0IHRvIGFsbG93CittdWx0aXBsZSBidWZmZXJzIHRvIGJlIHBvdGVudGlhbGx5IGVuY29kZWQgYW5kIHNlbnQgaW4gcGFyYWxsZWwpLgorQSBzaW5nbGUgY29tbWFuZCBlbmNvZGVzIG9uZSBjb250aWd1b3VzIGhvcml6b250YWwgbGluZSBvZiBwaXhlbHMKKworVGhlIGZ1bmN0aW9uIHJlbGllcyBvbiB0aGUgY2xpZW50IHRvIGRvIGFsbCBhbGxvY2F0aW9uLCBzbyB0aGF0CityZW5kZXJpbmcgY2FuIGJlIGRvbmUgZGlyZWN0bHkgdG8gb3V0cHV0IGJ1ZmZlcnMgKGUuZy4gVVNCIFVSQnMpLgorVGhlIGZ1bmN0aW9uIGZpbGxzIHRoZSBzdXBwbGllZCBjb21tYW5kIGJ1ZmZlciwgcHJvdmlkaW5nIGluZm9ybWF0aW9uCitvbiB3aGVyZSBpdCBsZWZ0IG9mZiwgc28gdGhlIGNsaWVudCBtYXkgY2FsbCBpbiBhZ2FpbiB3aXRoIGFkZGl0aW9uYWwKK2J1ZmZlcnMgaWYgdGhlIGxpbmUgd2lsbCB0YWtlIHNldmVyYWwgYnVmZmVycyB0byBjb21wbGV0ZS4KKworQSBzaW5nbGUgY29tbWFuZCBjYW4gdHJhbnNtaXQgYSBtYXhpbXVtIG9mIDI1NiBwaXhlbHMsCityZWdhcmRsZXNzIG9mIHRoZSBjb21wcmVzc2lvbiByYXRpbyAocHJvdG9jb2wgZGVzaWduIGxpbWl0KS4KK1RvIHRoZSBoYXJkd2FyZSwgMCBmb3IgYSBzaXplIGJ5dGUgbWVhbnMgMjU2CisKK1JhdGhlciB0aGFuIDI1NiBwaXhlbCBjb21tYW5kcyB3aGljaCBhcmUgZWl0aGVyIHJsIG9yIHJhdyBlbmNvZGVkLAordGhlIHJseCBjb21tYW5kIHNpbXBseSBhc3N1bWVzIGFsdGVybmF0aW5nIHJhdyBhbmQgcmwgc3BhbnMgd2l0aGluIG9uZSBjbWQuCitUaGlzIGhhcyBhIHNsaWdodGx5IGxhcmdlciBoZWFkZXIgb3ZlcmhlYWQsIGJ1dCBwcm9kdWNlcyBtb3JlIGV2ZW4gcmVzdWx0cy4KK0l0IGFsc28gcHJvY2Vzc2VzIGFsbCBkYXRhIChyZWFkIGFuZCB3cml0ZSkgaW4gYSBzaW5nbGUgcGFzcy4KK1BlcmZvcm1hbmNlIGJlbmNobWFya3Mgb2YgY29tbW9uIGNhc2VzIHNob3cgaXQgaGF2aW5nIGp1c3Qgc2xpZ2h0bHkgYmV0dGVyCitjb21wcmVzc2lvbiB0aGFuIDI1NiBwaXhlbCByYXcgLW9yLSBybGUgY29tbWFuZHMsIHdpdGggc2ltaWxhciBDUFUgY29uc3VtcGlvbi4KK0J1dCBmb3IgdmVyeSBybCBmcmllbmRseSBkYXRhLCB3aWxsIGNvbXByZXNzIG5vdCBxdWl0ZSBhcyB3ZWxsLgogKi8KLQotc3RhdGljIGludAotaW1hZ2VfYmxpdChzdHJ1Y3QgZGxmYl9kYXRhICpkZXZfaW5mbywgaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsCi0JICAgY2hhciAqZGF0YSkKK3N0YXRpYyB2b2lkIGRsZmJfY29tcHJlc3NfaGxpbmUoCisJY29uc3QgdWludDE2X3QgKipwaXhlbF9zdGFydF9wdHIsCisJY29uc3QgdWludDE2X3QgKmNvbnN0IHBpeGVsX2VuZCwKKwl1aW50MzJfdCAqZGV2aWNlX2FkZHJlc3NfcHRyLAorCXVpbnQ4X3QgKipjb21tYW5kX2J1ZmZlcl9wdHIsCisJY29uc3QgdWludDhfdCAqY29uc3QgY21kX2J1ZmZlcl9lbmQpCiB7CisJY29uc3QgdWludDE2X3QgKnBpeGVsID0gKnBpeGVsX3N0YXJ0X3B0cjsKKwl1aW50MzJfdCBkZXZfYWRkciAgPSAqZGV2aWNlX2FkZHJlc3NfcHRyOworCXVpbnQ4X3QgKmNtZCA9ICpjb21tYW5kX2J1ZmZlcl9wdHI7CisJY29uc3QgaW50IGJwcCA9IDI7CiAKLQlpbnQgaSwgaiwgYmFzZTsKLQlpbnQgcmVtID0gd2lkdGg7Ci0JaW50IHJldDsKKwl3aGlsZSAoKHBpeGVsX2VuZCA+IHBpeGVsKSAmJgorCSAgICAgICAoY21kX2J1ZmZlcl9lbmQgLSBNSU5fUkxYX0NNRF9CWVRFUyA+IGNtZCkpIHsKKwkJdWludDhfdCAqcmF3X3BpeGVsc19jb3VudF9ieXRlID0gMDsKKwkJdWludDhfdCAqY21kX3BpeGVsc19jb3VudF9ieXRlID0gMDsKKwkJY29uc3QgdWludDE2X3QgKnJhd19waXhlbF9zdGFydCA9IDA7CisJCWNvbnN0IHVpbnQxNl90ICpjbWRfcGl4ZWxfc3RhcnQsICpjbWRfcGl4ZWxfZW5kID0gMDsKKwkJY29uc3QgdWludDMyX3QgYmVfZGV2X2FkZHIgPSBjcHVfdG9fYmUzMihkZXZfYWRkcik7CiAKLQlpbnQgZmlyc3RkaWZmLCB0aGlzdGltZTsKKwkJcHJlZmV0Y2h3KCh2b2lkICopIGNtZCk7IC8qIHB1bGwgaW4gb25lIGNhY2hlIGxpbmUgYXQgbGVhc3QgKi8KIAotCWNoYXIgKmJ1ZnB0cjsKKwkJKmNtZCsrID0gMHhBRjsKKwkJKmNtZCsrID0gMHg2QjsKKwkJKmNtZCsrID0gKHVpbnQ4X3QpICgoYmVfZGV2X2FkZHIgPj4gOCkgJiAweEZGKTsKKwkJKmNtZCsrID0gKHVpbnQ4X3QpICgoYmVfZGV2X2FkZHIgPj4gMTYpICYgMHhGRik7CisJCSpjbWQrKyA9ICh1aW50OF90KSAoKGJlX2Rldl9hZGRyID4+IDI0KSAmIDB4RkYpOwogCi0JaWYgKHggKyB3aWR0aCA+IGRldl9pbmZvLT5pbmZvLT52YXIueHJlcykKLQkJcmV0dXJuIC1FSU5WQUw7CisJCWNtZF9waXhlbHNfY291bnRfYnl0ZSA9IGNtZCsrOyAvKiAgd2UnbGwga25vdyB0aGlzIGxhdGVyICovCisJCWNtZF9waXhlbF9zdGFydCA9IHBpeGVsOwogCi0JaWYgKHkgKyBoZWlnaHQgPiBkZXZfaW5mby0+aW5mby0+dmFyLnlyZXMpCi0JCXJldHVybiAtRUlOVkFMOworCQlyYXdfcGl4ZWxzX2NvdW50X2J5dGUgPSBjbWQrKzsgLyogIHdlJ2xsIGtub3cgdGhpcyBsYXRlciAqLworCQlyYXdfcGl4ZWxfc3RhcnQgPSBwaXhlbDsKIAotCW11dGV4X2xvY2soJmRldl9pbmZvLT5idWxrX211dGV4KTsKKwkJY21kX3BpeGVsX2VuZCA9IHBpeGVsICsgbWluKE1BWF9DTURfUElYRUxTICsgMSwKKwkJCW1pbigoaW50KShwaXhlbF9lbmQgLSBwaXhlbCksCisJCQkgICAgKGludCkoY21kX2J1ZmZlcl9lbmQgLSBjbWQpIC8gYnBwKSk7CiAKLQliYXNlID0KLQkgICAgZGV2X2luZm8tPmJhc2UxNiArICgoZGV2X2luZm8tPmluZm8tPnZhci54cmVzICogMiAqIHkpICsgKHggKiAyKSk7CisJCXByZWZldGNoX3JhbmdlKCh2b2lkICopIHBpeGVsLCAoY21kX3BpeGVsX2VuZCAtIHBpeGVsKSAqIGJwcCk7CiAKLQlkYXRhICs9IChkZXZfaW5mby0+aW5mby0+dmFyLnhyZXMgKiAyICogeSkgKyAoeCAqIDIpOworCQl3aGlsZSAocGl4ZWwgPCBjbWRfcGl4ZWxfZW5kKSB7CisJCQljb25zdCB1aW50MTZfdCAqIGNvbnN0IHJlcGVhdGluZ19waXhlbCA9IHBpeGVsOwogCi0JLyogcHJpbnRrKCJJTUFHRV9CTElUXG4iKTsgKi8KKwkJCSoodWludDE2X3QgKiljbWQgPSBjcHVfdG9fYmUxNnAocGl4ZWwpOworCQkJY21kICs9IDI7CisJCQlwaXhlbCsrOwogCi0JYnVmcHRyID0gZGV2X2luZm8tPmJ1ZjsKKwkJCWlmICh1bmxpa2VseSgocGl4ZWwgPCBjbWRfcGl4ZWxfZW5kKSAmJgorCQkJCSAgICAgKCpwaXhlbCA9PSAqcmVwZWF0aW5nX3BpeGVsKSkpIHsKKwkJCQkvKiBnbyBiYWNrIGFuZCBmaWxsIGluIHJhdyBwaXhlbCBjb3VudCAqLworCQkJCSpyYXdfcGl4ZWxzX2NvdW50X2J5dGUgPSAoKHJlcGVhdGluZ19waXhlbCAtCisJCQkJCQlyYXdfcGl4ZWxfc3RhcnQpICsgMSkgJiAweEZGOwogCi0JZm9yIChpID0geTsgaSA8IHkgKyBoZWlnaHQ7IGkrKykgewotCi0JCWlmIChkZXZfaW5mby0+YnVmZW5kIC0gYnVmcHRyIDwgQlVGX0hJR0hfV0FURVJfTUFSSykgewotCQkJcmV0ID0gZGxmYl9idWxrX21zZyhkZXZfaW5mbywgYnVmcHRyIC0gZGV2X2luZm8tPmJ1Zik7Ci0JCQlidWZwdHIgPSBkZXZfaW5mby0+YnVmOwotCQl9Ci0KLQkJcmVtID0gd2lkdGg7Ci0KLQkJLyogcHJpbnRrKCJXUklUSU5HIExJTkUgJWRcbiIsIGkpOyAqLwotCi0JCXdoaWxlIChyZW0pIHsKLQotCQkJaWYgKGRldl9pbmZvLT5idWZlbmQgLSBidWZwdHIgPCBCVUZfSElHSF9XQVRFUl9NQVJLKSB7Ci0JCQkJcmV0ID0KLQkJCQkgICAgZGxmYl9idWxrX21zZyhkZXZfaW5mbywKLQkJCQkJCSAgYnVmcHRyIC0gZGV2X2luZm8tPmJ1Zik7Ci0JCQkJYnVmcHRyID0gZGV2X2luZm8tPmJ1ZjsKLQkJCX0KLQkJCS8vIG51bWJlciBvZiBwaXhlbHMgdG8gY29uc2lkZXIgdGhpcyB0aW1lCi0JCQl0aGlzdGltZSA9IHJlbTsKLQkJCWlmICh0aGlzdGltZSA+IDI1NSkKLQkJCQl0aGlzdGltZSA9IDI1NTsKLQotCQkJLy8gZmluZCBwb3NpdGlvbiBvZiBmaXJzdCBwaXhlbCB0aGF0IGhhcyBjaGFuZ2VkCi0JCQlmaXJzdGRpZmYgPSAtMTsKLQkJCWZvciAoaiA9IDA7IGogPCB0aGlzdGltZSAqIDI7IGorKykgewotCQkJCWlmIChkZXZfaW5mby0+YmFja2luZ19idWZmZXIKLQkJCQkgICAgW2Jhc2UgLSBkZXZfaW5mby0+YmFzZTE2ICsgal0gIT0gZGF0YVtqXSkgewotCQkJCQlmaXJzdGRpZmYgPSBqIC8gMjsKLQkJCQkJYnJlYWs7CisJCQkJd2hpbGUgKChwaXhlbCA8IGNtZF9waXhlbF9lbmQpCisJCQkJICAgICAgICYmICgqcGl4ZWwgPT0gKnJlcGVhdGluZ19waXhlbCkpIHsKKwkJCQkJcGl4ZWwrKzsKIAkJCQl9CisKKwkJCQkvKiBpbW1lZGlhdGVseSBhZnRlciByYXcgZGF0YSBpcyByZXBlYXQgYnl0ZSAqLworCQkJCSpjbWQrKyA9ICgocGl4ZWwgLSByZXBlYXRpbmdfcGl4ZWwpIC0gMSkgJiAweEZGOworCisJCQkJLyogVGhlbiBzdGFydCBhbm90aGVyIHJhdyBwaXhlbCBzcGFuICovCisJCQkJcmF3X3BpeGVsX3N0YXJ0ID0gcGl4ZWw7CisJCQkJcmF3X3BpeGVsc19jb3VudF9ieXRlID0gY21kKys7CiAJCQl9Ci0KLQkJCWlmIChmaXJzdGRpZmYgPj0gMCkgewotCQkJCWNoYXIgKmVuZF9vZl9ybGU7Ci0KLQkJCQllbmRfb2ZfcmxlID0KLQkJCQkgICAgcmxlX2NvbXByZXNzMTYoKHVpbnQxNl90ICopIChkYXRhICsKLQkJCQkJCQkJIGZpcnN0ZGlmZiAqIDIpLAotCQkJCQkJICAgYnVmcHRyLAotCQkJCQkJICAgdGhpc3RpbWUgLSBmaXJzdGRpZmYpOwotCi0JCQkJaWYgKGVuZF9vZl9ybGUgPAotCQkJCSAgICBidWZwdHIgKyA2ICsgMiAqICh0aGlzdGltZSAtIGZpcnN0ZGlmZikpIHsKLQkJCQkJYnVmcHRyWzBdID0gMHhBRjsKLQkJCQkJYnVmcHRyWzFdID0gMHg2OTsKLQotCQkJCQlidWZwdHJbMl0gPQotCQkJCQkgICAgKGNoYXIpKChiYXNlICsKLQkJCQkJCSAgICBmaXJzdGRpZmYgKiAyKSA+PiAxNik7Ci0JCQkJCWJ1ZnB0clszXSA9Ci0JCQkJCSAgICAoY2hhcikoKGJhc2UgKyBmaXJzdGRpZmYgKiAyKSA+PiA4KTsKLQkJCQkJYnVmcHRyWzRdID0KLQkJCQkJICAgIChjaGFyKShiYXNlICsgZmlyc3RkaWZmICogMik7Ci0JCQkJCWJ1ZnB0cls1XSA9IHRoaXN0aW1lIC0gZmlyc3RkaWZmOwotCi0JCQkJCWJ1ZnB0ciA9IGVuZF9vZl9ybGU7Ci0KLQkJCQl9IGVsc2UgewotCQkJCQkvLyBmYWxsYmFjayB0byByYXcgKG9yIHNvbWUgb3RoZXIgZW5jb2Rpbmc/KQotCQkJCQkqYnVmcHRyKysgPSAweEFGOwotCQkJCQkqYnVmcHRyKysgPSAweDY4OwotCi0JCQkJCSpidWZwdHIrKyA9Ci0JCQkJCSAgICAoY2hhcikoKGJhc2UgKwotCQkJCQkJICAgIGZpcnN0ZGlmZiAqIDIpID4+IDE2KTsKLQkJCQkJKmJ1ZnB0cisrID0KLQkJCQkJICAgIChjaGFyKSgoYmFzZSArIGZpcnN0ZGlmZiAqIDIpID4+IDgpOwotCQkJCQkqYnVmcHRyKysgPQotCQkJCQkgICAgKGNoYXIpKGJhc2UgKyBmaXJzdGRpZmYgKiAyKTsKLQkJCQkJKmJ1ZnB0cisrID0gdGhpc3RpbWUgLSBmaXJzdGRpZmY7Ci0JCQkJCS8vIFBVVCBDT01QUkVTU0lPTiBIRVJFCi0JCQkJCWZvciAoaiA9IGZpcnN0ZGlmZiAqIDI7Ci0JCQkJCSAgICAgaiA8IHRoaXN0aW1lICogMjsgaiArPSAyKSB7Ci0JCQkJCQkqYnVmcHRyKysgPSBkYXRhW2ogKyAxXTsKLQkJCQkJCSpidWZwdHIrKyA9IGRhdGFbal07Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJCWJhc2UgKz0gdGhpc3RpbWUgKiAyOwotCQkJZGF0YSArPSB0aGlzdGltZSAqIDI7Ci0JCQlyZW0gLT0gdGhpc3RpbWU7CiAJCX0KIAotCQltZW1jcHkoZGV2X2luZm8tPmJhY2tpbmdfYnVmZmVyICsgKGJhc2UgLSBkZXZfaW5mby0+YmFzZTE2KSAtCi0JCSAgICAgICAod2lkdGggKiAyKSwgZGF0YSAtICh3aWR0aCAqIDIpLCB3aWR0aCAqIDIpOworCQlpZiAocGl4ZWwgPiByYXdfcGl4ZWxfc3RhcnQpIHsKKwkJCS8qIGZpbmFsaXplIGxhc3QgUkFXIHNwYW4gKi8KKwkJCSpyYXdfcGl4ZWxzX2NvdW50X2J5dGUgPSAocGl4ZWwtcmF3X3BpeGVsX3N0YXJ0KSAmIDB4RkY7CisJCX0KIAotCQliYXNlICs9IChkZXZfaW5mby0+aW5mby0+dmFyLnhyZXMgKiAyKSAtICh3aWR0aCAqIDIpOwotCQlkYXRhICs9IChkZXZfaW5mby0+aW5mby0+dmFyLnhyZXMgKiAyKSAtICh3aWR0aCAqIDIpOwotCisJCSpjbWRfcGl4ZWxzX2NvdW50X2J5dGUgPSAocGl4ZWwgLSBjbWRfcGl4ZWxfc3RhcnQpICYgMHhGRjsKKwkJZGV2X2FkZHIgKz0gKHBpeGVsIC0gY21kX3BpeGVsX3N0YXJ0KSAqIGJwcDsKIAl9CiAKLQlpZiAoYnVmcHRyID4gZGV2X2luZm8tPmJ1ZikgewotCQlyZXQgPSBkbGZiX2J1bGtfbXNnKGRldl9pbmZvLCBidWZwdHIgLSBkZXZfaW5mby0+YnVmKTsKKwlpZiAoY21kX2J1ZmZlcl9lbmQgPD0gTUlOX1JMWF9DTURfQllURVMgKyBjbWQpIHsKKwkJLyogRmlsbCBsZWZ0b3ZlciBieXRlcyB3aXRoIG5vLW9wcyAqLworCQlpZiAoY21kX2J1ZmZlcl9lbmQgPiBjbWQpCisJCQltZW1zZXQoY21kLCAweEFGLCBjbWRfYnVmZmVyX2VuZCAtIGNtZCk7CisJCWNtZCA9ICh1aW50OF90ICopIGNtZF9idWZmZXJfZW5kOwogCX0KIAotCW11dGV4X3VubG9jaygmZGV2X2luZm8tPmJ1bGtfbXV0ZXgpOworCSpjb21tYW5kX2J1ZmZlcl9wdHIgPSBjbWQ7CisJKnBpeGVsX3N0YXJ0X3B0ciA9IHBpeGVsOworCSpkZXZpY2VfYWRkcmVzc19wdHIgPSBkZXZfYWRkcjsKIAotCXJldHVybiBiYXNlOwotCisJcmV0dXJuOwogfQogCi1zdGF0aWMgaW50Ci1kcmF3X3JlY3Qoc3RydWN0IGRsZmJfZGF0YSAqZGV2X2luZm8sIGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAotCSAgdW5zaWduZWQgY2hhciByZWQsIHVuc2lnbmVkIGNoYXIgZ3JlZW4sIHVuc2lnbmVkIGNoYXIgYmx1ZSkKKy8qCisgKiBUaGVyZSBhcmUgMyBjb3BpZXMgb2YgZXZlcnkgcGl4ZWw6IFRoZSBmcm9udCBidWZmZXIgdGhhdCB0aGUgZmJkZXYKKyAqIGNsaWVudCByZW5kZXJzIHRvLCB0aGUgYWN0dWFsIGZyYW1lYnVmZmVyIGFjcm9zcyB0aGUgVVNCIGJ1cyBpbiBoYXJkd2FyZQorICogKHRoYXQgd2UgY2FuIG9ubHkgd3JpdGUgdG8sIHNsb3dseSwgYW5kIGNhbiBuZXZlciByZWFkKSwgYW5kIChvcHRpb25hbGx5KQorICogb3VyIHNoYWRvdyBjb3B5IHRoYXQgdHJhY2tzIHdoYXQncyBiZWVuIHNlbnQgdG8gdGhhdCBoYXJkd2FyZSBidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkIGRsZmJfcmVuZGVyX2hsaW5lKHN0cnVjdCBkbGZiX2RhdGEgKmRldiwgc3RydWN0IHVyYiAqKnVyYl9wdHIsCisJCQkgICAgICBjb25zdCBjaGFyICpmcm9udCwgY2hhciAqKnVyYl9idWZfcHRyLAorCQkJICAgICAgdTMyIGJ5dGVfb2Zmc2V0LCB1MzIgYnl0ZV93aWR0aCwKKwkJCSAgICAgIGludCAqaWRlbnRfcHRyLCBpbnQgKnNlbnRfcHRyKQogeworCWNvbnN0IHU4ICpsaW5lX3N0YXJ0LCAqbGluZV9lbmQsICpuZXh0X3BpeGVsOworCXUzMiBkZXZfYWRkciA9IGRldi0+YmFzZTE2ICsgYnl0ZV9vZmZzZXQ7CisJc3RydWN0IHVyYiAqdXJiID0gKnVyYl9wdHI7CisJdTggKmNtZCA9ICp1cmJfYnVmX3B0cjsKKwl1OCAqY21kX2VuZCA9ICh1OCAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKIAotCWludCBpLCBqLCBiYXNlOwotCWludCByZXQ7Ci0JdW5zaWduZWQgc2hvcnQgY29sID0KLQkgICAgKCgoKChyZWQpICYgMHhGOCkgfCAoKGdyZWVuKSA+PiA1KSkgJiAweEZGKSA8PCA4KSArCi0JICAgICgoKCgoZ3JlZW4pICYgMHgxQykgPDwgMykgfCAoKGJsdWUpID4+IDMpKSAmIDB4RkYpOwotCWludCByZW0gPSB3aWR0aDsKKwlsaW5lX3N0YXJ0ID0gKHU4ICopIChmcm9udCArIGJ5dGVfb2Zmc2V0KTsKKwluZXh0X3BpeGVsID0gbGluZV9zdGFydDsKKwlsaW5lX2VuZCA9IG5leHRfcGl4ZWwgKyBieXRlX3dpZHRoOwogCi0JY2hhciAqYnVmcHRyOworCWlmIChkZXYtPmJhY2tpbmdfYnVmZmVyKSB7CisJCWludCBvZmZzZXQ7CisJCWNvbnN0IHU4ICpiYWNrX3N0YXJ0ID0gKHU4ICopIChkZXYtPmJhY2tpbmdfYnVmZmVyCisJCQkJCQkrIGJ5dGVfb2Zmc2V0KTsKIAotCWlmICh4ICsgd2lkdGggPiBkZXZfaW5mby0+aW5mby0+dmFyLnhyZXMpCi0JCXJldHVybiAtRUlOVkFMOworCQkqaWRlbnRfcHRyICs9IGRsZmJfdHJpbV9obGluZShiYWNrX3N0YXJ0LCAmbmV4dF9waXhlbCwKKwkJCSZieXRlX3dpZHRoKTsKIAotCWlmICh5ICsgaGVpZ2h0ID4gZGV2X2luZm8tPmluZm8tPnZhci55cmVzKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJb2Zmc2V0ID0gbmV4dF9waXhlbCAtIGxpbmVfc3RhcnQ7CisJCWxpbmVfZW5kID0gbmV4dF9waXhlbCArIGJ5dGVfd2lkdGg7CisJCWRldl9hZGRyICs9IG9mZnNldDsKKwkJYmFja19zdGFydCArPSBvZmZzZXQ7CisJCWxpbmVfc3RhcnQgKz0gb2Zmc2V0OwogCi0JbXV0ZXhfbG9jaygmZGV2X2luZm8tPmJ1bGtfbXV0ZXgpOwotCi0JYmFzZSA9IGRldl9pbmZvLT5iYXNlMTYgKyAoZGV2X2luZm8tPmluZm8tPnZhci54cmVzICogMiAqIHkpICsgKHggKiAyKTsKLQotCWJ1ZnB0ciA9IGRldl9pbmZvLT5idWY7Ci0KLQlmb3IgKGkgPSB5OyBpIDwgeSArIGhlaWdodDsgaSsrKSB7Ci0KLQkJZm9yIChqID0gMDsgaiA8IHdpZHRoICogMjsgaiArPSAyKSB7Ci0JCQlkZXZfaW5mby0+YmFja2luZ19idWZmZXJbYmFzZSAtIGRldl9pbmZvLT5iYXNlMTYgKyBqXSA9Ci0JCQkgICAgKGNoYXIpKGNvbCA+PiA4KTsKLQkJCWRldl9pbmZvLT5iYWNraW5nX2J1ZmZlcltiYXNlIC0gZGV2X2luZm8tPmJhc2UxNiArIGogKwotCQkJCQkJIDFdID0gKGNoYXIpKGNvbCk7Ci0JCX0KLQkJaWYgKGRldl9pbmZvLT5idWZlbmQgLSBidWZwdHIgPCBCVUZfSElHSF9XQVRFUl9NQVJLKSB7Ci0JCQlyZXQgPSBkbGZiX2J1bGtfbXNnKGRldl9pbmZvLCBidWZwdHIgLSBkZXZfaW5mby0+YnVmKTsKLQkJCWJ1ZnB0ciA9IGRldl9pbmZvLT5idWY7Ci0JCX0KLQotCQlyZW0gPSB3aWR0aDsKLQotCQl3aGlsZSAocmVtKSB7Ci0KLQkJCWlmIChkZXZfaW5mby0+YnVmZW5kIC0gYnVmcHRyIDwgQlVGX0hJR0hfV0FURVJfTUFSSykgewotCQkJCXJldCA9Ci0JCQkJICAgIGRsZmJfYnVsa19tc2coZGV2X2luZm8sCi0JCQkJCQkgIGJ1ZnB0ciAtIGRldl9pbmZvLT5idWYpOwotCQkJCWJ1ZnB0ciA9IGRldl9pbmZvLT5idWY7Ci0JCQl9Ci0KLQkJCSpidWZwdHIrKyA9IDB4QUY7Ci0JCQkqYnVmcHRyKysgPSAweDY5OwotCi0JCQkqYnVmcHRyKysgPSAoY2hhcikoYmFzZSA+PiAxNik7Ci0JCQkqYnVmcHRyKysgPSAoY2hhcikoYmFzZSA+PiA4KTsKLQkJCSpidWZwdHIrKyA9IChjaGFyKShiYXNlKTsKLQotCQkJaWYgKHJlbSA+IDI1NSkgewotCQkJCSpidWZwdHIrKyA9IDI1NTsKLQkJCQkqYnVmcHRyKysgPSAyNTU7Ci0JCQkJcmVtIC09IDI1NTsKLQkJCQliYXNlICs9IDI1NSAqIDI7Ci0JCQl9IGVsc2UgewotCQkJCSpidWZwdHIrKyA9IHJlbTsKLQkJCQkqYnVmcHRyKysgPSByZW07Ci0JCQkJYmFzZSArPSByZW0gKiAyOwotCQkJCXJlbSA9IDA7Ci0JCQl9Ci0KLQkJCSpidWZwdHIrKyA9IChjaGFyKShjb2wgPj4gOCk7Ci0JCQkqYnVmcHRyKysgPSAoY2hhcikoY29sKTsKLQotCQl9Ci0KLQkJYmFzZSArPSAoZGV2X2luZm8tPmluZm8tPnZhci54cmVzICogMikgLSAod2lkdGggKiAyKTsKLQorCQltZW1jcHkoKGNoYXIgKiliYWNrX3N0YXJ0LCAoY2hhciAqKSBsaW5lX3N0YXJ0LAorCQkgICAgICAgYnl0ZV93aWR0aCk7CiAJfQogCi0JaWYgKGJ1ZnB0ciA+IGRldl9pbmZvLT5idWYpCi0JCXJldCA9IGRsZmJfYnVsa19tc2coZGV2X2luZm8sIGJ1ZnB0ciAtIGRldl9pbmZvLT5idWYpOworCXdoaWxlIChuZXh0X3BpeGVsIDwgbGluZV9lbmQpIHsKIAotCW11dGV4X3VubG9jaygmZGV2X2luZm8tPmJ1bGtfbXV0ZXgpOworCQlkbGZiX2NvbXByZXNzX2hsaW5lKChjb25zdCB1aW50MTZfdCAqKikgJm5leHRfcGl4ZWwsCisJCQkgICAgIChjb25zdCB1aW50MTZfdCAqKSBsaW5lX2VuZCwgJmRldl9hZGRyLAorCQkJKHU4ICoqKSAmY21kLCAodTggKikgY21kX2VuZCk7CiAKLQlyZXR1cm4gMTsKKwkJaWYgKGNtZCA+PSBjbWRfZW5kKSB7CisJCQlpbnQgbGVuID0gY21kIC0gKHU4ICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCQkJaWYgKGRsZmJfc3VibWl0X3VyYihkZXYsIHVyYiwgbGVuKSkKKwkJCQlyZXR1cm47IC8qIGxvc3QgcGl4ZWxzIGlzIHNldCAqLworCQkJKnNlbnRfcHRyICs9IGxlbjsKKwkJCXVyYiA9IGRsZmJfZ2V0X3VyYihkZXYpOworCQkJaWYgKCF1cmIpCisJCQkJcmV0dXJuOyAvKiBsb3N0X3BpeGVscyBpcyBzZXQgKi8KKwkJCSp1cmJfcHRyID0gdXJiOworCQkJY21kID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisJCQljbWRfZW5kID0gJmNtZFt1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGhdOworCQl9CisJfQorCisJKnVyYl9idWZfcHRyID0gY21kOwogfQogCi1zdGF0aWMgdm9pZCBzd2FwZmIoc3RydWN0IGRsZmJfZGF0YSAqZGV2X2luZm8pCitpbnQgZGxmYl9oYW5kbGVfZGFtYWdlKHN0cnVjdCBkbGZiX2RhdGEgKmRldiwgaW50IHgsIGludCB5LAorCSAgICAgICBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGNoYXIgKmRhdGEpCiB7Ci0KLQlpbnQgdG1wYmFzZTsKLQljaGFyICpidWZwdHI7Ci0KLQltdXRleF9sb2NrKCZkZXZfaW5mby0+YnVsa19tdXRleCk7Ci0KLQl0bXBiYXNlID0gZGV2X2luZm8tPmJhc2UxNjsKLQotCWRldl9pbmZvLT5iYXNlMTYgPSBkZXZfaW5mby0+YmFzZTE2ZDsKLQlkZXZfaW5mby0+YmFzZTE2ZCA9IHRtcGJhc2U7Ci0KLQlidWZwdHIgPSBkZXZfaW5mby0+YnVmOwotCi0JYnVmcHRyID0gZGxmYl9zZXRfcmVnaXN0ZXIoYnVmcHRyLCAweEZGLCAweDAwKTsKLQotCS8vIHNldCBhZGRyZXNzZXMKLQlidWZwdHIgPQotCSAgICBkbGZiX3NldF9yZWdpc3RlcihidWZwdHIsIDB4MjAsIChjaGFyKShkZXZfaW5mby0+YmFzZTE2ID4+IDE2KSk7Ci0JYnVmcHRyID0gZGxmYl9zZXRfcmVnaXN0ZXIoYnVmcHRyLCAweDIxLCAoY2hhcikoZGV2X2luZm8tPmJhc2UxNiA+PiA4KSk7Ci0JYnVmcHRyID0gZGxmYl9zZXRfcmVnaXN0ZXIoYnVmcHRyLCAweDIyLCAoY2hhcikoZGV2X2luZm8tPmJhc2UxNikpOwotCi0JYnVmcHRyID0gZGxmYl9zZXRfcmVnaXN0ZXIoYnVmcHRyLCAweEZGLCAweDAwKTsKLQotCWRsZmJfYnVsa19tc2coZGV2X2luZm8sIGJ1ZnB0ciAtIGRldl9pbmZvLT5idWYpOwotCi0JbXV0ZXhfdW5sb2NrKCZkZXZfaW5mby0+YnVsa19tdXRleCk7Ci19Ci0KLXN0YXRpYyBpbnQgY29weWZiKHN0cnVjdCBkbGZiX2RhdGEgKmRldl9pbmZvKQotewotCWludCBiYXNlOwotCWludCBzb3VyY2U7Ci0JaW50IHJlbTsKIAlpbnQgaSwgcmV0OworCWNoYXIgKmNtZDsKKwljeWNsZXNfdCBzdGFydF9jeWNsZXMsIGVuZF9jeWNsZXM7CisJaW50IGJ5dGVzX3NlbnQgPSAwOworCWludCBieXRlc19pZGVudGljYWwgPSAwOworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgYWxpZ25lZF94OwogCi0JY2hhciAqYnVmcHRyOworCXN0YXJ0X2N5Y2xlcyA9IGdldF9jeWNsZXMoKTsKIAotCWJhc2UgPSBkZXZfaW5mby0+YmFzZTE2ZDsKKwlhbGlnbmVkX3ggPSBETF9BTElHTl9ET1dOKHgsIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJd2lkdGggPSBETF9BTElHTl9VUCh3aWR0aCArICh4LWFsaWduZWRfeCksIHNpemVvZih1bnNpZ25lZCBsb25nKSk7CisJeCA9IGFsaWduZWRfeDsKIAotCW11dGV4X2xvY2soJmRldl9pbmZvLT5idWxrX211dGV4KTsKLQotCXNvdXJjZSA9IGRldl9pbmZvLT5iYXNlMTY7Ci0KLQlidWZwdHIgPSBkZXZfaW5mby0+YnVmOwotCi0JZm9yIChpID0gMDsgaSA8IGRldl9pbmZvLT5pbmZvLT52YXIueXJlczsgaSsrKSB7Ci0KLQkJaWYgKGRldl9pbmZvLT5idWZlbmQgLSBidWZwdHIgPCBCVUZfSElHSF9XQVRFUl9NQVJLKSB7Ci0JCQlyZXQgPSBkbGZiX2J1bGtfbXNnKGRldl9pbmZvLCBidWZwdHIgLSBkZXZfaW5mby0+YnVmKTsKLQkJCWJ1ZnB0ciA9IGRldl9pbmZvLT5idWY7Ci0JCX0KLQotCQlyZW0gPSBkZXZfaW5mby0+aW5mby0+dmFyLnhyZXM7Ci0KLQkJd2hpbGUgKHJlbSkgewotCi0JCQlpZiAoZGV2X2luZm8tPmJ1ZmVuZCAtIGJ1ZnB0ciA8IEJVRl9ISUdIX1dBVEVSX01BUkspIHsKLQkJCQlyZXQgPQotCQkJCSAgICBkbGZiX2J1bGtfbXNnKGRldl9pbmZvLAotCQkJCQkJICBidWZwdHIgLSBkZXZfaW5mby0+YnVmKTsKLQkJCQlidWZwdHIgPSBkZXZfaW5mby0+YnVmOwotCi0JCQl9Ci0KLQkJCSpidWZwdHIrKyA9IDB4QUY7Ci0JCQkqYnVmcHRyKysgPSAweDZBOwotCi0JCQkqYnVmcHRyKysgPSAoY2hhcikoYmFzZSA+PiAxNik7Ci0JCQkqYnVmcHRyKysgPSAoY2hhcikoYmFzZSA+PiA4KTsKLQkJCSpidWZwdHIrKyA9IChjaGFyKShiYXNlKTsKLQotCQkJaWYgKHJlbSA+IDI1NSkgewotCQkJCSpidWZwdHIrKyA9IDI1NTsKLQkJCQkqYnVmcHRyKysgPSAoY2hhcikoc291cmNlID4+IDE2KTsKLQkJCQkqYnVmcHRyKysgPSAoY2hhcikoc291cmNlID4+IDgpOwotCQkJCSpidWZwdHIrKyA9IChjaGFyKShzb3VyY2UpOwotCi0JCQkJcmVtIC09IDI1NTsKLQkJCQliYXNlICs9IDI1NSAqIDI7Ci0JCQkJc291cmNlICs9IDI1NSAqIDI7Ci0KLQkJCX0gZWxzZSB7Ci0JCQkJKmJ1ZnB0cisrID0gcmVtOwotCQkJCSpidWZwdHIrKyA9IChjaGFyKShzb3VyY2UgPj4gMTYpOwotCQkJCSpidWZwdHIrKyA9IChjaGFyKShzb3VyY2UgPj4gOCk7Ci0JCQkJKmJ1ZnB0cisrID0gKGNoYXIpKHNvdXJjZSk7Ci0KLQkJCQliYXNlICs9IHJlbSAqIDI7Ci0JCQkJc291cmNlICs9IHJlbSAqIDI7Ci0JCQkJcmVtID0gMDsKLQkJCX0KLQkJfQotCX0KLQotCWlmIChidWZwdHIgPiBkZXZfaW5mby0+YnVmKQotCQlyZXQgPSBkbGZiX2J1bGtfbXNnKGRldl9pbmZvLCBidWZwdHIgLSBkZXZfaW5mby0+YnVmKTsKLQotCW11dGV4X3VubG9jaygmZGV2X2luZm8tPmJ1bGtfbXV0ZXgpOwotCi0JcmV0dXJuIDE7Ci0KLX0KLQotc3RhdGljIGludAotY29weWFyZWEoc3RydWN0IGRsZmJfZGF0YSAqZGV2X2luZm8sIGludCBkeCwgaW50IGR5LCBpbnQgc3gsIGludCBzeSwKLQkgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQotewotCWludCBiYXNlOwotCWludCBzb3VyY2U7Ci0JaW50IHJlbTsKLQlpbnQgaSwgcmV0OwotCi0JY2hhciAqYnVmcHRyOwotCi0JaWYgKGR4ICsgd2lkdGggPiBkZXZfaW5mby0+aW5mby0+dmFyLnhyZXMpCisJaWYgKCh3aWR0aCA8PSAwKSB8fAorCSAgICAoeCArIHdpZHRoID4gZGV2LT5pbmZvLT52YXIueHJlcykgfHwKKwkgICAgKHkgKyBoZWlnaHQgPiBkZXYtPmluZm8tPnZhci55cmVzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZHkgKyBoZWlnaHQgPiBkZXZfaW5mby0+aW5mby0+dmFyLnlyZXMpCi0JCXJldHVybiAtRUlOVkFMOworCWlmICghYXRvbWljX3JlYWQoJmRldi0+dXNiX2FjdGl2ZSkpCisJCXJldHVybiAwOwogCi0JbXV0ZXhfbG9jaygmZGV2X2luZm8tPmJ1bGtfbXV0ZXgpOworCXVyYiA9IGRsZmJfZ2V0X3VyYihkZXYpOworCWlmICghdXJiKQorCQlyZXR1cm4gMDsKKwljbWQgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAotCWJhc2UgPQotCSAgICBkZXZfaW5mby0+YmFzZTE2ICsgKGRldl9pbmZvLT5pbmZvLT52YXIueHJlcyAqIDIgKiBkeSkgKyAoZHggKiAyKTsKLQlzb3VyY2UgPSAoZGV2X2luZm8tPmluZm8tPnZhci54cmVzICogMiAqIHN5KSArIChzeCAqIDIpOworCWZvciAoaSA9IHk7IGkgPCB5ICsgaGVpZ2h0IDsgaSsrKSB7CisJCWNvbnN0IGludCBsaW5lX29mZnNldCA9IGRldi0+aW5mby0+Zml4LmxpbmVfbGVuZ3RoICogaTsKKwkJY29uc3QgaW50IGJ5dGVfb2Zmc2V0ID0gbGluZV9vZmZzZXQgKyAoeCAqIEJQUCk7CiAKLQlidWZwdHIgPSBkZXZfaW5mby0+YnVmOwotCi0JZm9yIChpID0gc3k7IGkgPCBzeSArIGhlaWdodDsgaSsrKSB7Ci0KLQkJbWVtY3B5KGRldl9pbmZvLT5iYWNraW5nX2J1ZmZlciArIGJhc2UgLSBkZXZfaW5mby0+YmFzZTE2LAotCQkgICAgICAgZGV2X2luZm8tPmJhY2tpbmdfYnVmZmVyICsgc291cmNlLCB3aWR0aCAqIDIpOwotCi0JCWlmIChkZXZfaW5mby0+YnVmZW5kIC0gYnVmcHRyIDwgQlVGX0hJR0hfV0FURVJfTUFSSykgewotCQkJcmV0ID0gZGxmYl9idWxrX21zZyhkZXZfaW5mbywgYnVmcHRyIC0gZGV2X2luZm8tPmJ1Zik7Ci0JCQlidWZwdHIgPSBkZXZfaW5mby0+YnVmOwotCQl9Ci0KLQkJcmVtID0gd2lkdGg7Ci0KLQkJd2hpbGUgKHJlbSkgewotCi0JCQlpZiAoZGV2X2luZm8tPmJ1ZmVuZCAtIGJ1ZnB0ciA8IEJVRl9ISUdIX1dBVEVSX01BUkspIHsKLQkJCQlyZXQgPQotCQkJCSAgICBkbGZiX2J1bGtfbXNnKGRldl9pbmZvLAotCQkJCQkJICBidWZwdHIgLSBkZXZfaW5mby0+YnVmKTsKLQkJCQlidWZwdHIgPSBkZXZfaW5mby0+YnVmOwotCQkJfQotCi0JCQkqYnVmcHRyKysgPSAweEFGOwotCQkJKmJ1ZnB0cisrID0gMHg2QTsKLQotCQkJKmJ1ZnB0cisrID0gKGNoYXIpKGJhc2UgPj4gMTYpOwotCQkJKmJ1ZnB0cisrID0gKGNoYXIpKGJhc2UgPj4gOCk7Ci0JCQkqYnVmcHRyKysgPSAoY2hhcikoYmFzZSk7Ci0KLQkJCWlmIChyZW0gPiAyNTUpIHsKLQkJCQkqYnVmcHRyKysgPSAyNTU7Ci0JCQkJKmJ1ZnB0cisrID0gKGNoYXIpKHNvdXJjZSA+PiAxNik7Ci0JCQkJKmJ1ZnB0cisrID0gKGNoYXIpKHNvdXJjZSA+PiA4KTsKLQkJCQkqYnVmcHRyKysgPSAoY2hhcikoc291cmNlKTsKLQotCQkJCXJlbSAtPSAyNTU7Ci0JCQkJYmFzZSArPSAyNTUgKiAyOwotCQkJCXNvdXJjZSArPSAyNTUgKiAyOwotCi0JCQl9IGVsc2UgewotCQkJCSpidWZwdHIrKyA9IHJlbTsKLQkJCQkqYnVmcHRyKysgPSAoY2hhcikoc291cmNlID4+IDE2KTsKLQkJCQkqYnVmcHRyKysgPSAoY2hhcikoc291cmNlID4+IDgpOwotCQkJCSpidWZwdHIrKyA9IChjaGFyKShzb3VyY2UpOwotCi0JCQkJYmFzZSArPSByZW0gKiAyOwotCQkJCXNvdXJjZSArPSByZW0gKiAyOwotCQkJCXJlbSA9IDA7Ci0JCQl9Ci0JCX0KLQotCQliYXNlICs9IChkZXZfaW5mby0+aW5mby0+dmFyLnhyZXMgKiAyKSAtICh3aWR0aCAqIDIpOwotCQlzb3VyY2UgKz0gKGRldl9pbmZvLT5pbmZvLT52YXIueHJlcyAqIDIpIC0gKHdpZHRoICogMik7CisJCWRsZmJfcmVuZGVyX2hsaW5lKGRldiwgJnVyYiwgKGNoYXIgKikgZGV2LT5pbmZvLT5maXguc21lbV9zdGFydCwKKwkJCQkgICZjbWQsIGJ5dGVfb2Zmc2V0LCB3aWR0aCAqIEJQUCwKKwkJCQkgICZieXRlc19pZGVudGljYWwsICZieXRlc19zZW50KTsKIAl9CiAKLQlpZiAoYnVmcHRyID4gZGV2X2luZm8tPmJ1ZikKLQkJcmV0ID0gZGxmYl9idWxrX21zZyhkZXZfaW5mbywgYnVmcHRyIC0gZGV2X2luZm8tPmJ1Zik7CisJaWYgKGNtZCA+IChjaGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJCS8qIFNlbmQgcGFydGlhbCBidWZmZXIgcmVtYWluaW5nIGJlZm9yZSBleGl0aW5nICovCisJCWludCBsZW4gPSBjbWQgLSAoY2hhciAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJcmV0ID0gZGxmYl9zdWJtaXRfdXJiKGRldiwgdXJiLCBsZW4pOworCQlieXRlc19zZW50ICs9IGxlbjsKKwl9IGVsc2UKKwkJZGxmYl91cmJfY29tcGxldGlvbih1cmIpOwogCi0JbXV0ZXhfdW5sb2NrKCZkZXZfaW5mby0+YnVsa19tdXRleCk7CisJYXRvbWljX2FkZChieXRlc19zZW50LCAmZGV2LT5ieXRlc19zZW50KTsKKwlhdG9taWNfYWRkKGJ5dGVzX2lkZW50aWNhbCwgJmRldi0+Ynl0ZXNfaWRlbnRpY2FsKTsKKwlhdG9taWNfYWRkKHdpZHRoKmhlaWdodCoyLCAmZGV2LT5ieXRlc19yZW5kZXJlZCk7CisJZW5kX2N5Y2xlcyA9IGdldF9jeWNsZXMoKTsKKwlhdG9taWNfYWRkKCgodW5zaWduZWQgaW50KSAoKGVuZF9jeWNsZXMgLSBzdGFydF9jeWNsZXMpCisJCSAgICA+PiAxMCkpLCAvKiBLY3ljbGVzICovCisJCSAgICZkZXYtPmNwdV9rY3ljbGVzX3VzZWQpOwogCi0JcmV0dXJuIDE7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGRsZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKmluZm8sIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqYXJlYSkKKy8qIGhhcmR3YXJlIGhhcyBuYXRpdmUgQ09QWSBjb21tYW5kIChzZWUgbGliZGxvKSwgYnV0IG5vdCB3b3J0aCBpdCBmb3IgZmJjb24gKi8KK3N0YXRpYyB2b2lkIGRsZmJfb3BzX2NvcHlhcmVhKHN0cnVjdCBmYl9pbmZvICppbmZvLAorCQkJCWNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqYXJlYSkKIHsKIAogCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGluZm8tPnBhcjsKIAotCWNvcHlhcmVhKGRldiwgYXJlYS0+ZHgsIGFyZWEtPmR5LCBhcmVhLT5zeCwgYXJlYS0+c3ksIGFyZWEtPndpZHRoLAotCQkgYXJlYS0+aGVpZ2h0KTsKKyNpZiBkZWZpbmVkIENPTkZJR19GQl9TWVNfQ09QWUFSRUEgfHwgZGVmaW5lZCBDT05GSUdfRkJfU1lTX0NPUFlBUkVBX01PRFVMRQogCi0JLyogcHJpbnRrKCJDT1BZIEFSRUEgJWQgJWQgJWQgJWQgJWQgJWQgISEhXG4iLCBhcmVhLT5keCwgYXJlYS0+ZHksIGFyZWEtPnN4LCBhcmVhLT5zeSwgYXJlYS0+d2lkdGgsIGFyZWEtPmhlaWdodCk7ICovCisJc3lzX2NvcHlhcmVhKGluZm8sIGFyZWEpOworCisJZGxmYl9oYW5kbGVfZGFtYWdlKGRldiwgYXJlYS0+ZHgsIGFyZWEtPmR5LAorCQkJYXJlYS0+d2lkdGgsIGFyZWEtPmhlaWdodCwgaW5mby0+c2NyZWVuX2Jhc2UpOworI2VuZGlmCisJYXRvbWljX2luYygmZGV2LT5jb3B5X2NvdW50KTsKIAogfQogCi1zdGF0aWMgdm9pZCBkbGZiX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgY29uc3Qgc3RydWN0IGZiX2ltYWdlICppbWFnZSkKK3N0YXRpYyB2b2lkIGRsZmJfb3BzX2ltYWdlYmxpdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQljb25zdCBzdHJ1Y3QgZmJfaW1hZ2UgKmltYWdlKQogeworCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGluZm8tPnBhcjsKIAorI2lmIGRlZmluZWQgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgfHwgZGVmaW5lZCBDT05GSUdfRkJfU1lTX0lNQUdFQkxJVF9NT0RVTEUKKworCXN5c19pbWFnZWJsaXQoaW5mbywgaW1hZ2UpOworCisJZGxmYl9oYW5kbGVfZGFtYWdlKGRldiwgaW1hZ2UtPmR4LCBpbWFnZS0+ZHksCisJCQlpbWFnZS0+d2lkdGgsIGltYWdlLT5oZWlnaHQsIGluZm8tPnNjcmVlbl9iYXNlKTsKKworI2VuZGlmCisKKwlhdG9taWNfaW5jKCZkZXYtPmJsaXRfY291bnQpOworfQorCitzdGF0aWMgdm9pZCBkbGZiX29wc19maWxscmVjdChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCSAgY29uc3Qgc3RydWN0IGZiX2ZpbGxyZWN0ICpyZWN0KQoreworCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGluZm8tPnBhcjsKKworI2lmIGRlZmluZWQgQ09ORklHX0ZCX1NZU19GSUxMUkVDVCB8fCBkZWZpbmVkIENPTkZJR19GQl9TWVNfRklMTFJFQ1RfTU9EVUxFCisKKwlzeXNfZmlsbHJlY3QoaW5mbywgcmVjdCk7CisKKwlkbGZiX2hhbmRsZV9kYW1hZ2UoZGV2LCByZWN0LT5keCwgcmVjdC0+ZHksIHJlY3QtPndpZHRoLAorCQkJICAgICAgcmVjdC0+aGVpZ2h0LCBpbmZvLT5zY3JlZW5fYmFzZSk7CisjZW5kaWYKKworCWF0b21pY19pbmMoJmRldi0+ZmlsbF9jb3VudCk7CisKK30KKworc3RhdGljIHZvaWQgZGxmYl9nZXRfZWRpZChzdHJ1Y3QgZGxmYl9kYXRhICpkZXYpCit7CisJaW50IGk7CiAJaW50IHJldDsKLQlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBpbmZvLT5wYXI7Ci0JLyogcHJpbnRrKCJJTUFHRSBCTElUICgxKSAlZCAlZCAlZCAlZCBERVBUSCAlZCB7JXB9ISEhXG4iLCBpbWFnZS0+ZHgsIGltYWdlLT5keSwgaW1hZ2UtPndpZHRoLCBpbWFnZS0+aGVpZ2h0LCBpbWFnZS0+ZGVwdGgsIGRldi0+dWRldik7ICovCi0JY2ZiX2ltYWdlYmxpdChpbmZvLCBpbWFnZSk7Ci0JcmV0ID0KLQkgICAgaW1hZ2VfYmxpdChkZXYsIGltYWdlLT5keCwgaW1hZ2UtPmR5LCBpbWFnZS0+d2lkdGgsIGltYWdlLT5oZWlnaHQsCi0JCSAgICAgICBpbmZvLT5zY3JlZW5fYmFzZSk7Ci0JLyogcHJpbnRrKCJJTUFHRSBCTElUICgyKSAlZCAlZCAlZCAlZCBERVBUSCAlZCB7JXB9ICVkISEhXG4iLCBpbWFnZS0+ZHgsIGltYWdlLT5keSwgaW1hZ2UtPndpZHRoLCBpbWFnZS0+aGVpZ2h0LCBpbWFnZS0+ZGVwdGgsIGRldi0+dWRldiwgcmV0KTsgKi8KKwljaGFyIHJidWZbMl07CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGRldi0+ZWRpZCk7IGkrKykgeworCQlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJCSAgICB1c2JfcmN2Y3RybHBpcGUoZGV2LT51ZGV2LCAwKSwgKDB4MDIpLAorCQkJCSAgICAoMHg4MCB8ICgweDAyIDw8IDUpKSwgaSA8PCA4LCAweEExLCByYnVmLCAyLAorCQkJCSAgICAwKTsKKwkJZGV2LT5lZGlkW2ldID0gcmJ1ZlsxXTsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkIGRsZmJfZmlsbHJlY3Qoc3RydWN0IGZiX2luZm8gKmluZm8sCi0JCQkgIGNvbnN0IHN0cnVjdCBmYl9maWxscmVjdCAqcmVnaW9uKQorc3RhdGljIGludCBkbGZiX29wc19pb2N0bChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IGNtZCwKKwkJCQl1bnNpZ25lZCBsb25nIGFyZykKIHsKIAotCXVuc2lnbmVkIGNoYXIgcmVkLCBncmVlbiwgYmx1ZTsKIAlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBpbmZvLT5wYXI7Ci0KLQltZW1jcHkoJnJlZCwgJnJlZ2lvbi0+Y29sb3IsIDEpOwotCW1lbWNweSgmZ3JlZW4sICZyZWdpb24tPmNvbG9yICsgMSwgMSk7Ci0JbWVtY3B5KCZibHVlLCAmcmVnaW9uLT5jb2xvciArIDIsIDEpOwotCWRyYXdfcmVjdChkZXYsIHJlZ2lvbi0+ZHgsIHJlZ2lvbi0+ZHksIHJlZ2lvbi0+d2lkdGgsIHJlZ2lvbi0+aGVpZ2h0LAotCQkgIHJlZCwgZ3JlZW4sIGJsdWUpOwotCS8qIHByaW50aygiRklMTCBSRUNUICVkICVkICEhIVxuIiwgcmVnaW9uLT5keCwgcmVnaW9uLT5keSk7ICovCi0KLX0KLQotc3RhdGljIGludCBkbGZiX2lvY3RsKHN0cnVjdCBmYl9pbmZvICppbmZvLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQotCXN0cnVjdCBkbGZiX2RhdGEgKmRldl9pbmZvID0gaW5mby0+cGFyOwogCXN0cnVjdCBkbG9hcmVhICphcmVhID0gTlVMTDsKIAotCWlmIChjbWQgPT0gMHhBRCkgeworCWlmICghYXRvbWljX3JlYWQoJmRldi0+dXNiX2FjdGl2ZSkpCisJCXJldHVybiAwOworCisJLyogVE9ETzogVXBkYXRlIFggc2VydmVyIHRvIGdldCB0aGlzIGZyb20gc3lzZnMgaW5zdGVhZCAqLworCWlmIChjbWQgPT0gRExGQl9JT0NUTF9SRVRVUk5fRURJRCkgewogCQljaGFyICplZGlkID0gKGNoYXIgKilhcmc7Ci0JCWRsZmJfZWRpZChkZXZfaW5mbyk7Ci0JCWlmIChjb3B5X3RvX3VzZXIoZWRpZCwgZGV2X2luZm8tPmVkaWQsIDEyOCkpIHsKKwkJZGxmYl9nZXRfZWRpZChkZXYpOworCQlpZiAoY29weV90b191c2VyKGVkaWQsIGRldi0+ZWRpZCwgc2l6ZW9mKGRldi0+ZWRpZCkpKQogCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KIAkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKGNtZCA9PSAweEFBIHx8IGNtZCA9PSAweEFCIHx8IGNtZCA9PSAweEFDKSB7CisJLyogVE9ETzogSGVscCBwcm9wb3NlIGEgc3RhbmRhcmQgZmIuaCBpb2N0bCB0byByZXBvcnQgbW1hcCBkYW1hZ2UgKi8KKwlpZiAoY21kID09IERMRkJfSU9DVExfUkVQT1JUX0RBTUFHRSkgewogCiAJCWFyZWEgPSAoc3RydWN0IGRsb2FyZWEgKilhcmc7CiAKQEAgLTYzNCwzNiArNzAzLDIwIEBACiAKIAkJaWYgKGFyZWEtPnkgPiBpbmZvLT52YXIueXJlcykKIAkJCWFyZWEtPnkgPSBpbmZvLT52YXIueXJlczsKLQl9CiAKLQlpZiAoY21kID09IDB4QUEpIHsKLQkJaW1hZ2VfYmxpdChkZXZfaW5mbywgYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCwKKwkJYXRvbWljX3NldCgmZGV2LT51c2VfZGVmaW8sIDApOworCisJCWRsZmJfaGFuZGxlX2RhbWFnZShkZXYsIGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgsCiAJCQkgICBpbmZvLT5zY3JlZW5fYmFzZSk7CisJCWF0b21pY19pbmMoJmRldi0+ZGFtYWdlX2NvdW50KTsKIAl9Ci0JaWYgKGNtZCA9PSAweEFDKSB7Ci0JCWNvcHlmYihkZXZfaW5mbyk7Ci0JCWltYWdlX2JsaXQoZGV2X2luZm8sIGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgsCi0JCQkgICBpbmZvLT5zY3JlZW5fYmFzZSk7Ci0JCXN3YXBmYihkZXZfaW5mbyk7Ci0JfSBlbHNlIGlmIChjbWQgPT0gMHhBQikgewogCi0JCWlmIChhcmVhLT54MiA8IDApCi0JCQlhcmVhLT54MiA9IDA7Ci0KLQkJaWYgKGFyZWEtPnkyIDwgMCkKLQkJCWFyZWEtPnkyID0gMDsKLQotCQljb3B5YXJlYShkZXZfaW5mbywKLQkJCSBhcmVhLT54MiwgYXJlYS0+eTIsIGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsCi0JCQkgYXJlYS0+aCk7Ci0JfQogCXJldHVybiAwOwogfQogCiAvKiB0YWtlbiBmcm9tIHZlc2FmYiAqLwotCiBzdGF0aWMgaW50Ci1kbGZiX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKK2RsZmJfb3BzX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKIAkgICAgICAgdW5zaWduZWQgYmx1ZSwgdW5zaWduZWQgdHJhbnNwLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlpbnQgZXJyID0gMDsKQEAgLTY4OCwyMzQgKzc0MSw2OTggQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IGRsZmJfcmVsZWFzZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCisvKgorICogSXQncyBjb21tb24gZm9yIHNldmVyYWwgY2xpZW50cyB0byBoYXZlIGZyYW1lYnVmZmVyIG9wZW4gc2ltdWx0YW5lb3VzbHkuCisgKiBlLmcuIGJvdGggZmJjb24gYW5kIFguIE1ha2VzIHRoaW5ncyBpbnRlcmVzdGluZy4KKyAqLworc3RhdGljIGludCBkbGZiX29wc19vcGVuKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikKIHsKLQlzdHJ1Y3QgZGxmYl9kYXRhICpkZXZfaW5mbyA9IGluZm8tPnBhcjsKLQlpbWFnZV9ibGl0KGRldl9pbmZvLCAwLCAwLCBpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMsCi0JCSAgIGluZm8tPnNjcmVlbl9iYXNlKTsKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBpbmZvLT5wYXI7CisKKy8qCWlmICh1c2VyID09IDApCisgKgkJV2UgY291bGQgc3BlY2lhbCBjYXNlIGtlcm5lbCBtb2RlIGNsaWVudHMgKGZiY29uKSBoZXJlCisgKi8KKworCW11dGV4X2xvY2soJmRldi0+ZmJfb3Blbl9sb2NrKTsKKworCWRldi0+ZmJfY291bnQrKzsKKworI2lmZGVmIENPTkZJR19GQl9ERUZFUlJFRF9JTworCWlmICgoYXRvbWljX3JlYWQoJmRldi0+dXNlX2RlZmlvKSkgJiYgKGluZm8tPmZiZGVmaW8gPT0gTlVMTCkpIHsKKwkJLyogZW5hYmxlIGRlZmlvICovCisJCWluZm8tPmZiZGVmaW8gPSAmZGxmYl9kZWZpbzsKKwkJZmJfZGVmZXJyZWRfaW9faW5pdChpbmZvKTsKKwl9CisjZW5kaWYKKworCWRsX25vdGljZSgib3BlbiAvZGV2L2ZiJWQgdXNlcj0lZCBmYl9pbmZvPSVwIGNvdW50PSVkXG4iLAorCSAgICBpbmZvLT5ub2RlLCB1c2VyLCBpbmZvLCBkZXYtPmZiX2NvdW50KTsKKworCW11dGV4X3VubG9jaygmZGV2LT5mYl9vcGVuX2xvY2spOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZGxmYl9ibGFuayhpbnQgYmxhbmtfbW9kZSwgc3RydWN0IGZiX2luZm8gKmluZm8pCitzdGF0aWMgaW50IGRsZmJfb3BzX3JlbGVhc2Uoc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKQogewotCXN0cnVjdCBkbGZiX2RhdGEgKmRldl9pbmZvID0gaW5mby0+cGFyOwotCWNoYXIgKmJ1ZnB0ciA9IGRldl9pbmZvLT5idWY7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gaW5mby0+cGFyOwogCi0JYnVmcHRyID0gZGxmYl9zZXRfcmVnaXN0ZXIoYnVmcHRyLCAweEZGLCAweDAwKTsKLQlpZiAoYmxhbmtfbW9kZSAhPSBGQl9CTEFOS19VTkJMQU5LKSB7Ci0JCWJ1ZnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZnB0ciwgMHgxRiwgMHgwMSk7Ci0JfSBlbHNlIHsKLQkJYnVmcHRyID0gZGxmYl9zZXRfcmVnaXN0ZXIoYnVmcHRyLCAweDFGLCAweDAwKTsKKwltdXRleF9sb2NrKCZkZXYtPmZiX29wZW5fbG9jayk7CisKKwlkZXYtPmZiX2NvdW50LS07CisKKyNpZmRlZiBDT05GSUdfRkJfREVGRVJSRURfSU8KKwlpZiAoKGRldi0+ZmJfY291bnQgPT0gMCkgJiYgKGluZm8tPmZiZGVmaW8pKSB7CisJCWZiX2RlZmVycmVkX2lvX2NsZWFudXAoaW5mbyk7CisJCWluZm8tPmZiZGVmaW8gPSBOVUxMOworCQlpbmZvLT5mYm9wcy0+ZmJfbW1hcCA9IGRsZmJfb3BzX21tYXA7CiAJfQotCWJ1ZnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZnB0ciwgMHhGRiwgMHhGRik7CisjZW5kaWYKIAotCWRsZmJfYnVsa19tc2coZGV2X2luZm8sIGJ1ZnB0ciAtIGRldl9pbmZvLT5idWYpOworCWRsX25vdGljZSgicmVsZWFzZSAvZGV2L2ZiJWQgdXNlcj0lZCBjb3VudD0lZFxuIiwKKwkJICBpbmZvLT5ub2RlLCB1c2VyLCBkZXYtPmZiX2NvdW50KTsKKworCW11dGV4X3VubG9jaygmZGV2LT5mYl9vcGVuX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBDYWxsZWQgd2hlbiBhbGwgY2xpZW50IGludGVyZmFjZXMgdG8gc3RhcnQgdHJhbnNhY3Rpb25zIGhhdmUgYmVlbiBkaXNhYmxlZCwKKyAqIGFuZCBhbGwgcmVmZXJlbmNlcyB0byBvdXIgZGV2aWNlIGluc3RhbmNlIChkbGZiX2RhdGEpIGFyZSByZWxlYXNlZC4KKyAqIEV2ZXJ5IHRyYW5zYWN0aW9uIG11c3QgaGF2ZSBhIHJlZmVyZW5jZSwgc28gd2Uga25vdyBhcmUgZnVsbHkgc3B1biBkb3duCisgKi8KK3N0YXRpYyB2b2lkIGRsZmJfZGVsZXRlKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgZGxmYl9kYXRhLCBrcmVmKTsKKworCWlmIChkZXYtPmJhY2tpbmdfYnVmZmVyKQorCQl2ZnJlZShkZXYtPmJhY2tpbmdfYnVmZmVyKTsKKworCW11dGV4X2Rlc3Ryb3koJmRldi0+ZmJfb3Blbl9sb2NrKTsKKworCWtmcmVlKGRldik7Cit9CisKKy8qCisgKiBDYWxsZWQgYnkgZmJkZXYgYXMgbGFzdCBwYXJ0IG9mIHVucmVnaXN0ZXJfZnJhbWVidWZmZXIoKSBwcm9jZXNzCisgKiBObyBuZXcgY2xpZW50cyBjYW4gb3BlbiBjb25uZWN0aW9ucy4gRGVhbGxvY2F0ZSBldmVyeXRoaW5nIGZiX2luZm8uCisgKi8KK3N0YXRpYyB2b2lkIGRsZmJfb3BzX2Rlc3Ryb3koc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gaW5mby0+cGFyOworCisJaWYgKGluZm8tPmNtYXAubGVuICE9IDApCisJCWZiX2RlYWxsb2NfY21hcCgmaW5mby0+Y21hcCk7CisJaWYgKGluZm8tPm1vbnNwZWNzLm1vZGVkYikKKwkJZmJfZGVzdHJveV9tb2RlZGIoaW5mby0+bW9uc3BlY3MubW9kZWRiKTsKKwlpZiAoaW5mby0+c2NyZWVuX2Jhc2UpCisJCXZmcmVlKGluZm8tPnNjcmVlbl9iYXNlKTsKKworCWZiX2Rlc3Ryb3lfbW9kZWxpc3QoJmluZm8tPm1vZGVsaXN0KTsKKworCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7CisKKwkvKiByZWYgdGFrZW4gYmVmb3JlIHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCkgZm9yIGRsZmJfZGF0YSBjbGllbnRzICovCisJa3JlZl9wdXQoJmRldi0+a3JlZiwgZGxmYl9kZWxldGUpOworfQorCisvKgorICogQ2hlY2sgd2hldGhlciBhIHZpZGVvIG1vZGUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBEaXNwbGF5TGluayBjaGlwCisgKiBXZSBzdGFydCBmcm9tIG1vbml0b3IncyBtb2Rlcywgc28gZG9uJ3QgbmVlZCB0byBmaWx0ZXIgdGhhdCBoZXJlCisgKi8KK3N0YXRpYyBpbnQgZGxmYl9pc192YWxpZF9tb2RlKHN0cnVjdCBmYl92aWRlb21vZGUgKm1vZGUsCisJCXN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGluZm8tPnBhcjsKKworCWlmIChtb2RlLT54cmVzICogbW9kZS0+eXJlcyA+IGRldi0+c2t1X3BpeGVsX2xpbWl0KQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCitzdGF0aWMgdm9pZCBkbGZiX3Zhcl9jb2xvcl9mb3JtYXQoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpCit7CisJY29uc3Qgc3RydWN0IGZiX2JpdGZpZWxkIHJlZCA9IHsgMTEsIDUsIDAgfTsKKwljb25zdCBzdHJ1Y3QgZmJfYml0ZmllbGQgZ3JlZW4gPSB7IDUsIDYsIDAgfTsKKwljb25zdCBzdHJ1Y3QgZmJfYml0ZmllbGQgYmx1ZSA9IHsgMCwgNSwgMCB9OworCisJdmFyLT5iaXRzX3Blcl9waXhlbCA9IDE2OworCXZhci0+cmVkID0gcmVkOworCXZhci0+Z3JlZW4gPSBncmVlbjsKKwl2YXItPmJsdWUgPSBibHVlOworfQorCitzdGF0aWMgaW50IGRsZmJfb3BzX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJCQlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZmJfdmlkZW9tb2RlIG1vZGU7CisKKwkvKiBUT0RPOiBzdXBwb3J0IGR5bmFtaWNhbGx5IGNoYW5naW5nIGZyYW1lYnVmZmVyIHNpemUgKi8KKwlpZiAoKHZhci0+eHJlcyAqIHZhci0+eXJlcyAqIDIpID4gaW5mby0+Zml4LnNtZW1fbGVuKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIHNldCBkZXZpY2Utc3BlY2lmaWMgZWxlbWVudHMgb2YgdmFyIHVucmVsYXRlZCB0byBtb2RlICovCisJZGxmYl92YXJfY29sb3JfZm9ybWF0KHZhcik7CisKKwlmYl92YXJfdG9fdmlkZW9tb2RlKCZtb2RlLCB2YXIpOworCisJaWYgKCFkbGZiX2lzX3ZhbGlkX21vZGUoJm1vZGUsIGluZm8pKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRsZmJfb3BzX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gaW5mby0+cGFyOworCisJZGxfbm90aWNlKCJzZXRfcGFyIG1vZGUgJWR4JWRcbiIsIGluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcyk7CisKKwlyZXR1cm4gZGxmYl9zZXRfdmlkZW9fbW9kZShkZXYsICZpbmZvLT52YXIpOworfQorCitzdGF0aWMgaW50IGRsZmJfb3BzX2JsYW5rKGludCBibGFua19tb2RlLCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBpbmZvLT5wYXI7CisJY2hhciAqYnVmcHRyOworCXN0cnVjdCB1cmIgKnVyYjsKKworCXVyYiA9IGRsZmJfZ2V0X3VyYihkZXYpOworCWlmICghdXJiKQorCQlyZXR1cm4gMDsKKwlidWZwdHIgPSAoY2hhciAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKworCS8qIG92ZXJsb2FkaW5nIHVzYl9hY3RpdmUuICBVTkJMQU5LIGNhbiBjb25mbGljdCB3aXRoIHRlYXJkb3duICovCisKKwlidWZwdHIgPSBkbGZiX3ZpZHJlZ19sb2NrKGJ1ZnB0cik7CisJaWYgKGJsYW5rX21vZGUgIT0gRkJfQkxBTktfVU5CTEFOSykgeworCQlhdG9taWNfc2V0KCZkZXYtPnVzYl9hY3RpdmUsIDApOworCQlidWZwdHIgPSBkbGZiX2VuYWJsZV9odnN5bmMoYnVmcHRyLCBmYWxzZSk7CisJfSBlbHNlIHsKKwkJYXRvbWljX3NldCgmZGV2LT51c2JfYWN0aXZlLCAxKTsKKwkJYnVmcHRyID0gZGxmYl9lbmFibGVfaHZzeW5jKGJ1ZnB0ciwgdHJ1ZSk7CisJfQorCWJ1ZnB0ciA9IGRsZmJfdmlkcmVnX3VubG9jayhidWZwdHIpOworCisJZGxmYl9zdWJtaXRfdXJiKGRldiwgdXJiLCBidWZwdHIgLSAoY2hhciAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBmYl9vcHMgZGxmYl9vcHMgPSB7Ci0JLmZiX3NldGNvbHJlZyA9IGRsZmJfc2V0Y29scmVnLAotCS5mYl9maWxscmVjdCA9IGRsZmJfZmlsbHJlY3QsCi0JLmZiX2NvcHlhcmVhID0gZGxmYl9jb3B5YXJlYSwKLQkuZmJfaW1hZ2VibGl0ID0gZGxmYl9pbWFnZWJsaXQsCi0JLmZiX21tYXAgPSBkbGZiX21tYXAsCi0JLmZiX2lvY3RsID0gZGxmYl9pb2N0bCwKLQkuZmJfcmVsZWFzZSA9IGRsZmJfcmVsZWFzZSwKLQkuZmJfYmxhbmsgPSBkbGZiX2JsYW5rLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5mYl9zZXRjb2xyZWcgPSBkbGZiX29wc19zZXRjb2xyZWcsCisJLmZiX2ZpbGxyZWN0ID0gZGxmYl9vcHNfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhID0gZGxmYl9vcHNfY29weWFyZWEsCisJLmZiX2ltYWdlYmxpdCA9IGRsZmJfb3BzX2ltYWdlYmxpdCwKKwkuZmJfbW1hcCA9IGRsZmJfb3BzX21tYXAsCisJLmZiX2lvY3RsID0gZGxmYl9vcHNfaW9jdGwsCisJLmZiX29wZW4gPSBkbGZiX29wc19vcGVuLAorCS5mYl9yZWxlYXNlID0gZGxmYl9vcHNfcmVsZWFzZSwKKwkuZmJfYmxhbmsgPSBkbGZiX29wc19ibGFuaywKKwkuZmJfY2hlY2tfdmFyID0gZGxmYl9vcHNfY2hlY2tfdmFyLAorCS5mYl9zZXRfcGFyID0gZGxmYl9vcHNfc2V0X3BhciwKIH07CiAKLXN0YXRpYyBpbnQKLWRsZmJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQorLyoKKyAqIENhbGxzIGRsZmJfZ2V0X2VkaWQoKSB0byBxdWVyeSB0aGUgRURJRCBvZiBhdHRhY2hlZCBtb25pdG9yIHZpYSB1c2IgY21kcworICogVGhlbiBwYXJzZXMgRURJRCBpbnRvIHRocmVlIHBsYWNlcyB1c2VkIGJ5IHZhcmlvdXMgcGFydHMgb2YgZmJkZXY6CisgKiBmYl92YXJfc2NyZWVuaW5mbyBjb250YWlucyB0aGUgdGltaW5nIG9mIHRoZSBtb25pdG9yJ3MgcHJlZmVycmVkIG1vZGUKKyAqIGZiX2luZm8ubW9uc3BlY3MgaXMgZnVsbCBwYXJzZWQgRURJRCBpbmZvLCBpbmNsdWRpbmcgbW9uc3BlY3MubW9kZWRiCisgKiBmYl9pbmZvLm1vZGVsaXN0IGlzIGEgbGlua2VkIGxpc3Qgb2YgYWxsIG1vbml0b3IgJiBWRVNBIG1vZGVzIHdoaWNoIHdvcmsKKyAqCisgKiBJZiBFRElEIGlzIG5vdCByZWFkYWJsZS92YWxpZCwgdGhlbiBtb2RlbGlzdCBpcyBhbGwgVkVTQSBtb2RlcywKKyAqIG1vbnNwZWNzIGlzIE5VTEwsIGFuZCBmYl92YXJfc2NyZWVuaW5mbyBpcyBzZXQgdG8gc2FmZSBWRVNBIG1vZGUKKyAqIFJldHVybnMgMCBpZiBFRElEIHBhcnNlcyBzdWNjZXNzZnVsbHkKKyAqLworc3RhdGljIGludCBkbGZiX3BhcnNlX2VkaWQoc3RydWN0IGRsZmJfZGF0YSAqZGV2LAorCQkJICAgIHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCXN0cnVjdCBkbGZiX2RhdGEgKmRldl9pbmZvOwotCXN0cnVjdCBmYl9pbmZvICppbmZvOworCWludCBpOworCWNvbnN0IHN0cnVjdCBmYl92aWRlb21vZGUgKmRlZmF1bHRfdm1vZGUgPSBOVUxMOworCWludCByZXN1bHQgPSAwOwogCi0JaW50IHJldDsKLQljaGFyIHJidWZbNF07CisJZmJfZGVzdHJveV9tb2RlbGlzdCgmaW5mby0+bW9kZWxpc3QpOworCW1lbXNldCgmaW5mby0+bW9uc3BlY3MsIDAsIHNpemVvZihpbmZvLT5tb25zcGVjcykpOwogCi0JZGV2X2luZm8gPSBremFsbG9jKHNpemVvZigqZGV2X2luZm8pLCBHRlBfS0VSTkVMKTsKLQlpZiAoZGV2X2luZm8gPT0gTlVMTCkgewotCQlwcmludGsoImNhbm5vdCBhbGxvY2F0ZSBkZXZfaW5mbyBzdHJ1Y3R1cmUuXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQorCWRsZmJfZ2V0X2VkaWQoZGV2KTsKKwlmYl9lZGlkX3RvX21vbnNwZWNzKGRldi0+ZWRpZCwgJmluZm8tPm1vbnNwZWNzKTsKIAotCW11dGV4X2luaXQoJmRldl9pbmZvLT5idWxrX211dGV4KTsKKwlpZiAoaW5mby0+bW9uc3BlY3MubW9kZWRiX2xlbiA+IDApIHsKIAotCWRldl9pbmZvLT51ZGV2ID0gdXNiX2dldF9kZXYoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpKTsKLQlkZXZfaW5mby0+aW50ZXJmYWNlID0gaW50ZXJmYWNlOwotCi0JcHJpbnRrKCJEaXNwbGF5TGluayBkZXZpY2UgYXR0YWNoZWRcbiIpOwotCi0JLyogYWRkIGZyYW1lYnVmZmVyIGluZm8gdG8gdXNiIGludGVyZmFjZSAqLwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXZfaW5mbyk7Ci0KLQlkZXZfaW5mby0+YnVmID0ga21hbGxvYyhCVUZfU0laRSwgR0ZQX0tFUk5FTCk7Ci0JLyogdXNiX2J1ZmZlcl9hbGxvYyhkZXZfaW5mby0+dWRldiwgQlVGX1NJWkUgLCBHRlBfS0VSTkVMLCAmZGV2X2luZm8tPnR4X3VyYi0+dHJhbnNmZXJfZG1hKTsgKi8KLQotCWlmIChkZXZfaW5mby0+YnVmID09IE5VTEwpIHsKLQkJcHJpbnRrKCJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBkbGZiIGNvbW1hbmRzXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCWRldl9pbmZvLT5idWZlbmQgPSBkZXZfaW5mby0+YnVmICsgQlVGX1NJWkU7Ci0KLQlkZXZfaW5mby0+dHhfdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQl1c2JfZmlsbF9idWxrX3VyYihkZXZfaW5mby0+dHhfdXJiLCBkZXZfaW5mby0+dWRldiwKLQkJCSAgdXNiX3NuZGJ1bGtwaXBlKGRldl9pbmZvLT51ZGV2LCAxKSwgZGV2X2luZm8tPmJ1ZiwgMCwKLQkJCSAgZGxmYl9idWxrX2NhbGxiYWNrLCBkZXZfaW5mbyk7Ci0KLQlyZXQgPQotCSAgICB1c2JfY29udHJvbF9tc2coZGV2X2luZm8tPnVkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXZfaW5mby0+dWRldiwgMCksCi0JCQkgICAgKDB4MDYpLCAoMHg4MCB8ICgweDAyIDw8IDUpKSwgMCwgMCwgcmJ1ZiwgNCwgMCk7Ci0JcHJpbnRrKCJyZXQgY29udHJvbCBtc2cgMDogJWQgJXgleCV4JXhcbiIsIHJldCwgcmJ1ZlswXSwgcmJ1ZlsxXSwKLQkgICAgICAgcmJ1ZlsyXSwgcmJ1ZlszXSk7Ci0KLQlkbGZiX2VkaWQoZGV2X2luZm8pOwotCi0JaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZih1MzIpICogMjU2LCAmZGV2X2luZm8tPnVkZXYtPmRldik7Ci0KLQlpZiAoIWluZm8pIHsKLQkJcHJpbnRrKCJub24gcG9zc28gYWxsb2NhcmUgaWwgZnJhbWVidWZmZXIgZGlzcGxheWxpbmsiKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZmJfcGFyc2VfZWRpZChkZXZfaW5mby0+ZWRpZCwgJmluZm8tPnZhcik7Ci0KLQlwcmludGsoIkVESUQgWFJFUyAlZCBZUkVTICVkXG4iLCBpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMpOwotCi0JaWYgKGRsZmJfc2V0X3ZpZGVvX21vZGUoZGV2X2luZm8sIGluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcykgIT0gMCkgewotCQlpbmZvLT52YXIueHJlcyA9IDEyODA7Ci0JCWluZm8tPnZhci55cmVzID0gMTAyNDsKLQkJaWYgKGRsZmJfc2V0X3ZpZGVvX21vZGUKLQkJICAgIChkZXZfaW5mbywgaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzKSAhPSAwKSB7Ci0JCQlnb3RvIG91dDsKKwkJZm9yIChpID0gMDsgaSA8IGluZm8tPm1vbnNwZWNzLm1vZGVkYl9sZW47IGkrKykgeworCQkJaWYgKGRsZmJfaXNfdmFsaWRfbW9kZSgmaW5mby0+bW9uc3BlY3MubW9kZWRiW2ldLCBpbmZvKSkKKwkJCQlmYl9hZGRfdmlkZW9tb2RlKCZpbmZvLT5tb25zcGVjcy5tb2RlZGJbaV0sCisJCQkJCSZpbmZvLT5tb2RlbGlzdCk7CiAJCX0KLQl9CiAKLQlwcmludGsoImZvdW5kIHZhbGlkIG1vZGUuLi4lZFxuIiwgaW5mby0+dmFyLnBpeGNsb2NrKTsKLQotCWluZm8tPnBzZXVkb19wYWxldHRlID0gaW5mby0+cGFyOwotCWluZm8tPnBhciA9IGRldl9pbmZvOwotCi0JZGV2X2luZm8tPmluZm8gPSBpbmZvOwotCi0JaW5mby0+ZmxhZ3MgPQotCSAgICBGQklORk9fREVGQVVMVCB8IEZCSU5GT19SRUFEU19GQVNUIHwgRkJJTkZPX0hXQUNDRUxfSU1BR0VCTElUIHwKLQkgICAgRkJJTkZPX0hXQUNDRUxfQ09QWUFSRUEgfCBGQklORk9fSFdBQ0NFTF9GSUxMUkVDVDsKLQlpbmZvLT5mYm9wcyA9ICZkbGZiX29wczsKLQlpbmZvLT5zY3JlZW5fYmFzZSA9IHJ2bWFsbG9jKGRldl9pbmZvLT5zY3JlZW5fc2l6ZSk7Ci0KLQlpZiAoaW5mby0+c2NyZWVuX2Jhc2UgPT0gTlVMTCkgewotCQlwcmludGsKLQkJICAgICgiY2Fubm90IGFsbG9jYXRlIGZyYW1lYnVmZmVyIHZpcnR1YWwgbWVtb3J5IG9mICVkIGJ5dGVzXG4iLAotCQkgICAgIGRldl9pbmZvLT5zY3JlZW5fc2l6ZSk7Ci0JCWdvdG8gb3V0MDsKLQl9Ci0KLQlwcmludGsoInNjcmVlbiBiYXNlIGFsbG9jYXRlZCAhISFcbiIpOwotCi0JZGV2X2luZm8tPmJhY2tpbmdfYnVmZmVyID0ga3phbGxvYyhkZXZfaW5mby0+c2NyZWVuX3NpemUsIEdGUF9LRVJORUwpOwotCi0JaWYgKCFkZXZfaW5mby0+YmFja2luZ19idWZmZXIpCi0JCXByaW50aygibm9uIHBvc3NvIGFsbG9jYXJlIGlsIGJhY2tpbmcgYnVmZmVyXG4iKTsKLQotCS8qIGluZm8tPnZhciA9IGRldl9pbmZvLT5zaTsgKi8KLQotCWluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9IDE2OwotCWluZm8tPnZhci5hY3RpdmF0ZSA9IEZCX0FDVElWQVRFX1RFU1Q7Ci0JaW5mby0+dmFyLnZtb2RlID0gRkJfVk1PREVfTk9OSU5URVJMQUNFRDsKLQotCWluZm8tPnZhci5yZWQub2Zmc2V0ID0gMTE7Ci0JaW5mby0+dmFyLnJlZC5sZW5ndGggPSA1OwotCWluZm8tPnZhci5yZWQubXNiX3JpZ2h0ID0gMDsKLQotCWluZm8tPnZhci5ncmVlbi5vZmZzZXQgPSA1OwotCWluZm8tPnZhci5ncmVlbi5sZW5ndGggPSA2OwotCWluZm8tPnZhci5ncmVlbi5tc2JfcmlnaHQgPSAwOwotCi0JaW5mby0+dmFyLmJsdWUub2Zmc2V0ID0gMDsKLQlpbmZvLT52YXIuYmx1ZS5sZW5ndGggPSA1OwotCWluZm8tPnZhci5ibHVlLm1zYl9yaWdodCA9IDA7Ci0KLQkvKiBpbmZvLT52YXIucGl4Y2xvY2sgPSAgKDEwMDAwMDAwIC8gRkJfVyAqIDEwMDAgLyBGQl9IKS8yIDsgKi8KLQotCWluZm8tPmZpeC5zbWVtX3N0YXJ0ID0gKHVuc2lnbmVkIGxvbmcpaW5mby0+c2NyZWVuX2Jhc2U7Ci0JaW5mby0+Zml4LnNtZW1fbGVuID0gUEFHRV9BTElHTihkZXZfaW5mby0+c2NyZWVuX3NpemUpOwotCWlmIChzdHJsZW4oZGV2X2luZm8tPnVkZXYtPnByb2R1Y3QpID4gMTUpIHsKLQkJbWVtY3B5KGluZm8tPmZpeC5pZCwgZGV2X2luZm8tPnVkZXYtPnByb2R1Y3QsIDE1KTsKKwkJZGVmYXVsdF92bW9kZSA9IGZiX2ZpbmRfYmVzdF9kaXNwbGF5KCZpbmZvLT5tb25zcGVjcywKKwkJCQkJCSAgICAgJmluZm8tPm1vZGVsaXN0KTsKIAl9IGVsc2UgewotCQltZW1jcHkoaW5mby0+Zml4LmlkLCBkZXZfaW5mby0+dWRldi0+cHJvZHVjdCwKLQkJICAgICAgIHN0cmxlbihkZXZfaW5mby0+dWRldi0+cHJvZHVjdCkpOworCQlzdHJ1Y3QgZmJfdmlkZW9tb2RlIGZiX3Ztb2RlID0gezB9OworCisJCWRsX2VycigiVW5hYmxlIHRvIGdldCB2YWxpZCBFRElEIGZyb20gZGV2aWNlL2Rpc3BsYXlcbiIpOworCQlyZXN1bHQgPSAxOworCisJCS8qCisJCSAqIEFkZCB0aGUgc3RhbmRhcmQgVkVTQSBtb2RlcyB0byBvdXIgbW9kZWxpc3QKKwkJICogU2luY2Ugd2UgZG9uJ3QgaGF2ZSBFRElELCB0aGVyZSBtYXkgYmUgbW9kZXMgdGhhdAorCQkgKiBvdmVyc3BlYyBtb25pdG9yIGFuZC9vciBhcmUgaW5jb3JyZWN0IGFzcGVjdCByYXRpbywgZXRjLgorCQkgKiBCdXQgYXQgbGVhc3QgdGhlIHVzZXIgaGFzIGEgY2hhbmNlIHRvIGNob29zZQorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IFZFU0FfTU9ERURCX1NJWkU7IGkrKykgeworCQkJaWYgKGRsZmJfaXNfdmFsaWRfbW9kZSgoc3RydWN0IGZiX3ZpZGVvbW9kZSAqKQorCQkJCQkJJnZlc2FfbW9kZXNbaV0sIGluZm8pKQorCQkJCWZiX2FkZF92aWRlb21vZGUoJnZlc2FfbW9kZXNbaV0sCisJCQkJCQkgJmluZm8tPm1vZGVsaXN0KTsKKwkJfQorCisJCS8qCisJCSAqIGRlZmF1bHQgdG8gcmVzb2x1dGlvbiBzYWZlIGZvciBwcm9qZWN0b3JzCisJCSAqIChzaW5jZSB0aGV5IGFyZSBtb3N0IGNvbW1vbiBjYXNlIHdpdGhvdXQgRURJRCkKKwkJICovCisJCWZiX3Ztb2RlLnhyZXMgPSA4MDA7CisJCWZiX3Ztb2RlLnlyZXMgPSA2MDA7CisJCWZiX3Ztb2RlLnJlZnJlc2ggPSA2MDsKKwkJZGVmYXVsdF92bW9kZSA9IGZiX2ZpbmRfbmVhcmVzdF9tb2RlKCZmYl92bW9kZSwKKwkJCQkJCSAgICAgJmluZm8tPm1vZGVsaXN0KTsKIAl9Ci0JaW5mby0+Zml4LnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7Ci0JaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7Ci0JaW5mby0+Zml4LmFjY2VsID0gaW5mby0+ZmxhZ3M7Ci0JaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gZGV2X2luZm8tPmxpbmVfbGVuZ3RoOwogCi0JaWYgKGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDI1NiwgMCkgPCAwKQotCQlnb3RvIG91dDE7CisJZmJfdmlkZW9tb2RlX3RvX3Zhcih2YXIsIGRlZmF1bHRfdm1vZGUpOworCWRsZmJfdmFyX2NvbG9yX2Zvcm1hdCh2YXIpOwogCi0JcHJpbnRrKCJjb2xvcm1hcCBhbGxvY2F0ZWRcbiIpOwotCWlmIChyZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKSA8IDApCi0JCWdvdG8gb3V0MjsKLQotCWRyYXdfcmVjdChkZXZfaW5mbywgMCwgMCwgZGV2X2luZm8tPmluZm8tPnZhci54cmVzLAotCQkgIGRldl9pbmZvLT5pbmZvLT52YXIueXJlcywgMHgzMCwgMHhmZiwgMHgzMCk7Ci0KLQlyZXR1cm4gMDsKLQotb3V0MjoKLQlmYl9kZWFsbG9jX2NtYXAoJmluZm8tPmNtYXApOwotb3V0MToKLQlydmZyZWUoaW5mby0+c2NyZWVuX2Jhc2UsIGRldl9pbmZvLT5zY3JlZW5fc2l6ZSk7Ci1vdXQwOgotCWZyYW1lYnVmZmVyX3JlbGVhc2UoaW5mbyk7Ci1vdXQ6Ci0JdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwotCXVzYl9wdXRfZGV2KGRldl9pbmZvLT51ZGV2KTsKLQlrZnJlZShkZXZfaW5mbyk7Ci0JcmV0dXJuIC1FTk9NRU07Ci0KKwlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgdm9pZCBkbGZiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3N0YXRpYyBzc2l6ZV90IG1ldHJpY3NfYnl0ZXNfcmVuZGVyZWRfc2hvdyhzdHJ1Y3QgZGV2aWNlICpmYmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYSwgY2hhciAqYnVmKSB7CisJc3RydWN0IGZiX2luZm8gKmZiX2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZmJkZXYpOworCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGZiX2luZm8tPnBhcjsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwKKwkJCWF0b21pY19yZWFkKCZkZXYtPmJ5dGVzX3JlbmRlcmVkKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1ldHJpY3NfYnl0ZXNfaWRlbnRpY2FsX3Nob3coc3RydWN0IGRldmljZSAqZmJkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmEsIGNoYXIgKmJ1ZikgeworCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGZiZGV2KTsKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBmYl9pbmZvLT5wYXI7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsCisJCQlhdG9taWNfcmVhZCgmZGV2LT5ieXRlc19pZGVudGljYWwpKTsKK30KKworc3RhdGljIHNzaXplX3QgbWV0cmljc19ieXRlc19zZW50X3Nob3coc3RydWN0IGRldmljZSAqZmJkZXYsCisJCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmEsIGNoYXIgKmJ1ZikgeworCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGZiZGV2KTsKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBmYl9pbmZvLT5wYXI7CisJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsCisJCQlhdG9taWNfcmVhZCgmZGV2LT5ieXRlc19zZW50KSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG1ldHJpY3NfY3B1X2tjeWNsZXNfdXNlZF9zaG93KHN0cnVjdCBkZXZpY2UgKmZiZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphLCBjaGFyICpidWYpIHsKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShmYmRldik7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gZmJfaW5mby0+cGFyOworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiV1XG4iLAorCQkJYXRvbWljX3JlYWQoJmRldi0+Y3B1X2tjeWNsZXNfdXNlZCkpOworfQorCitzdGF0aWMgc3NpemVfdCBtZXRyaWNzX21pc2Nfc2hvdyhzdHJ1Y3QgZGV2aWNlICpmYmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYSwgY2hhciAqYnVmKSB7CisJc3RydWN0IGZiX2luZm8gKmZiX2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZmJkZXYpOworCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGZiX2luZm8tPnBhcjsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsCisJCQkiQ2FsbHMgdG9cbmRhbWFnZTogJXVcbmJsaXQ6ICV1XG4iCisJCQkiZGVmaW8gZmF1bHRzOiAldVxuY29weTogJXVcbiIKKwkJCSJmaWxsOiAldVxuXG4iCisJCQkiYWN0aXZlIGZyYW1lYnVmZmVyIGNsaWVudHM6ICVkXG4iCisJCQkidXJicyBhdmFpbGFibGUgJWQoJWQpXG4iCisJCQkiU2hhZG93IGZyYW1lYnVmZmVyIGluIHVzZT8gJXNcbiIKKwkJCSJBbnkgbG9zdCBwaXhlbHM/ICVzXG4iLAorCQkJYXRvbWljX3JlYWQoJmRldi0+ZGFtYWdlX2NvdW50KSwKKwkJCWF0b21pY19yZWFkKCZkZXYtPmJsaXRfY291bnQpLAorCQkJYXRvbWljX3JlYWQoJmRldi0+ZGVmaW9fZmF1bHRfY291bnQpLAorCQkJYXRvbWljX3JlYWQoJmRldi0+Y29weV9jb3VudCksCisJCQlhdG9taWNfcmVhZCgmZGV2LT5maWxsX2NvdW50KSwKKwkJCWRldi0+ZmJfY291bnQsCisJCQlkZXYtPnVyYnMuYXZhaWxhYmxlLCBkZXYtPnVyYnMubGltaXRfc2VtLmNvdW50LAorCQkJKGRldi0+YmFja2luZ19idWZmZXIpID8gInllcyIgOiAibm8iLAorCQkJYXRvbWljX3JlYWQoJmRldi0+bG9zdF9waXhlbHMpID8gInllcyIgOiAibm8iKTsKK30KKworc3RhdGljIHNzaXplX3QgZWRpZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYSwKKwkJCSBjaGFyICpidWYsIGxvZmZfdCBvZmYsIHNpemVfdCBjb3VudCkgeworCXN0cnVjdCBkZXZpY2UgKmZiZGV2ID0gY29udGFpbmVyX29mKGtvYmosIHN0cnVjdCBkZXZpY2UsIGtvYmopOworCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGZiZGV2KTsKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBmYl9pbmZvLT5wYXI7CisJY2hhciAqZWRpZCA9ICZkZXYtPmVkaWRbMF07CisJY29uc3Qgc2l6ZV90IHNpemUgPSBzaXplb2YoZGV2LT5lZGlkKTsKKworCWlmIChkbGZiX3BhcnNlX2VkaWQoZGV2LCAmZmJfaW5mby0+dmFyLCBmYl9pbmZvKSkKKwkJcmV0dXJuIDA7CisKKwlpZiAob2ZmID49IHNpemUpCisJCXJldHVybiAwOworCisJaWYgKG9mZiArIGNvdW50ID4gc2l6ZSkKKwkJY291bnQgPSBzaXplIC0gb2ZmOworCW1lbWNweShidWYsIGVkaWQgKyBvZmYsIGNvdW50KTsKKworCXJldHVybiBjb3VudDsKK30KKworCitzdGF0aWMgc3NpemVfdCBtZXRyaWNzX3Jlc2V0X3N0b3JlKHN0cnVjdCBkZXZpY2UgKmZiZGV2LAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgZGxmYl9kYXRhICpkZXZfaW5mbyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgZmJfaW5mbyAqZmJfaW5mbyA9IGRldl9nZXRfZHJ2ZGF0YShmYmRldik7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gZmJfaW5mby0+cGFyOwogCi0JbXV0ZXhfdW5sb2NrKCZkZXZfaW5mby0+YnVsa19tdXRleCk7CisJYXRvbWljX3NldCgmZGV2LT5ieXRlc19yZW5kZXJlZCwgMCk7CisJYXRvbWljX3NldCgmZGV2LT5ieXRlc19pZGVudGljYWwsIDApOworCWF0b21pY19zZXQoJmRldi0+Ynl0ZXNfc2VudCwgMCk7CisJYXRvbWljX3NldCgmZGV2LT5jcHVfa2N5Y2xlc191c2VkLCAwKTsKKwlhdG9taWNfc2V0KCZkZXYtPmJsaXRfY291bnQsIDApOworCWF0b21pY19zZXQoJmRldi0+Y29weV9jb3VudCwgMCk7CisJYXRvbWljX3NldCgmZGV2LT5maWxsX2NvdW50LCAwKTsKKwlhdG9taWNfc2V0KCZkZXYtPmRlZmlvX2ZhdWx0X2NvdW50LCAwKTsKKwlhdG9taWNfc2V0KCZkZXYtPmRhbWFnZV9jb3VudCwgMCk7CiAKLQl1c2Jfa2lsbF91cmIoZGV2X2luZm8tPnR4X3VyYik7Ci0JdXNiX2ZyZWVfdXJiKGRldl9pbmZvLT50eF91cmIpOwotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKLQl1c2JfcHV0X2RldihkZXZfaW5mby0+dWRldik7CisJcmV0dXJuIGNvdW50OworfQogCi0JaWYgKGRldl9pbmZvLT5pbmZvKSB7Ci0JCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoZGV2X2luZm8tPmluZm8pOwotCQlmYl9kZWFsbG9jX2NtYXAoJmRldl9pbmZvLT5pbmZvLT5jbWFwKTsKLQkJcnZmcmVlKGRldl9pbmZvLT5pbmZvLT5zY3JlZW5fYmFzZSwgZGV2X2luZm8tPnNjcmVlbl9zaXplKTsKLQkJa2ZyZWUoZGV2X2luZm8tPmJhY2tpbmdfYnVmZmVyKTsKLQkJZnJhbWVidWZmZXJfcmVsZWFzZShkZXZfaW5mby0+aW5mbyk7CitzdGF0aWMgc3NpemVfdCB1c2VfZGVmaW9fc2hvdyhzdHJ1Y3QgZGV2aWNlICpmYmRldiwKKwkJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYSwgY2hhciAqYnVmKSB7CisJc3RydWN0IGZiX2luZm8gKmZiX2luZm8gPSBkZXZfZ2V0X2RydmRhdGEoZmJkZXYpOworCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGZiX2luZm8tPnBhcjsKKwlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKKwkJCWF0b21pY19yZWFkKCZkZXYtPnVzZV9kZWZpbykpOworfQogCitzdGF0aWMgc3NpemVfdCB1c2VfZGVmaW9fc3RvcmUoc3RydWN0IGRldmljZSAqZmJkZXYsCisJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBmYl9pbmZvICpmYl9pbmZvID0gZGV2X2dldF9kcnZkYXRhKGZiZGV2KTsKKwlzdHJ1Y3QgZGxmYl9kYXRhICpkZXYgPSBmYl9pbmZvLT5wYXI7CisKKwlpZiAoY291bnQgPiAwKSB7CisJCWlmIChidWZbMF0gPT0gJzAnKQorCQkJYXRvbWljX3NldCgmZGV2LT51c2VfZGVmaW8sIDApOworCQlpZiAoYnVmWzBdID09ICcxJykKKwkJCWF0b21pY19zZXQoJmRldi0+dXNlX2RlZmlvLCAxKTsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3RydWN0IGJpbl9hdHRyaWJ1dGUgZWRpZF9hdHRyID0geworCS5hdHRyLm5hbWUgPSAiZWRpZCIsCisJLmF0dHIubW9kZSA9IDA0NDQsCisJLnNpemUgPSAxMjgsCisJLnJlYWQgPSBlZGlkX3Nob3csCit9OworCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZmJfZGV2aWNlX2F0dHJzW10gPSB7CisJX19BVFRSX1JPKG1ldHJpY3NfYnl0ZXNfcmVuZGVyZWQpLAorCV9fQVRUUl9STyhtZXRyaWNzX2J5dGVzX2lkZW50aWNhbCksCisJX19BVFRSX1JPKG1ldHJpY3NfYnl0ZXNfc2VudCksCisJX19BVFRSX1JPKG1ldHJpY3NfY3B1X2tjeWNsZXNfdXNlZCksCisJX19BVFRSX1JPKG1ldHJpY3NfbWlzYyksCisJX19BVFRSKG1ldHJpY3NfcmVzZXQsIFNfSVdVR08sIE5VTEwsIG1ldHJpY3NfcmVzZXRfc3RvcmUpLAorCV9fQVRUUl9SVyh1c2VfZGVmaW8pLAorfTsKKworI2lmZGVmIENPTkZJR19GQl9ERUZFUlJFRF9JTworc3RhdGljIHZvaWQgZGxmYl9kcHlfZGVmZXJyZWRfaW8oc3RydWN0IGZiX2luZm8gKmluZm8sCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QpCit7CisJc3RydWN0IHBhZ2UgKmN1cjsKKwlzdHJ1Y3QgZmJfZGVmZXJyZWRfaW8gKmZiZGVmaW8gPSBpbmZvLT5mYmRlZmlvOworCXN0cnVjdCBkbGZiX2RhdGEgKmRldiA9IGluZm8tPnBhcjsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJY2hhciAqY21kOworCWN5Y2xlc190IHN0YXJ0X2N5Y2xlcywgZW5kX2N5Y2xlczsKKwlpbnQgYnl0ZXNfc2VudCA9IDA7CisJaW50IGJ5dGVzX2lkZW50aWNhbCA9IDA7CisJaW50IGJ5dGVzX3JlbmRlcmVkID0gMDsKKwlpbnQgZmF1bHRfY291bnQgPSAwOworCisJaWYgKCFhdG9taWNfcmVhZCgmZGV2LT51c2VfZGVmaW8pKQorCQlyZXR1cm47CisKKwlpZiAoIWF0b21pY19yZWFkKCZkZXYtPnVzYl9hY3RpdmUpKQorCQlyZXR1cm47CisKKwlzdGFydF9jeWNsZXMgPSBnZXRfY3ljbGVzKCk7CisKKwl1cmIgPSBkbGZiX2dldF91cmIoZGV2KTsKKwlpZiAoIXVyYikKKwkJcmV0dXJuOworCWNtZCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCisJLyogd2FsayB0aGUgd3JpdHRlbiBwYWdlIGxpc3QgYW5kIHJlbmRlciBlYWNoIHRvIGRldmljZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnkoY3VyLCAmZmJkZWZpby0+cGFnZWxpc3QsIGxydSkgeworCQlkbGZiX3JlbmRlcl9obGluZShkZXYsICZ1cmIsIChjaGFyICopIGluZm8tPmZpeC5zbWVtX3N0YXJ0LAorCQkJCSAgJmNtZCwgY3VyLT5pbmRleCA8PCBQQUdFX1NISUZULAorCQkJCSAgUEFHRV9TSVpFLCAmYnl0ZXNfaWRlbnRpY2FsLCAmYnl0ZXNfc2VudCk7CisJCWJ5dGVzX3JlbmRlcmVkICs9IFBBR0VfU0laRTsKKwkJZmF1bHRfY291bnQrKzsKIAl9CiAKLQlrZnJlZShkZXZfaW5mbyk7CisJaWYgKGNtZCA+IChjaGFyICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJCS8qIFNlbmQgcGFydGlhbCBidWZmZXIgcmVtYWluaW5nIGJlZm9yZSBleGl0aW5nICovCisJCWludCBsZW4gPSBjbWQgLSAoY2hhciAqKSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJZGxmYl9zdWJtaXRfdXJiKGRldiwgdXJiLCBsZW4pOworCQlieXRlc19zZW50ICs9IGxlbjsKKwl9IGVsc2UKKwkJZGxmYl91cmJfY29tcGxldGlvbih1cmIpOwogCi0JcHJpbnRrKCJEaXNwbGF5TGluayBkZXZpY2UgZGlzY29ubmVjdGVkXG4iKTsKKwlhdG9taWNfYWRkKGZhdWx0X2NvdW50LCAmZGV2LT5kZWZpb19mYXVsdF9jb3VudCk7CisJYXRvbWljX2FkZChieXRlc19zZW50LCAmZGV2LT5ieXRlc19zZW50KTsKKwlhdG9taWNfYWRkKGJ5dGVzX2lkZW50aWNhbCwgJmRldi0+Ynl0ZXNfaWRlbnRpY2FsKTsKKwlhdG9taWNfYWRkKGJ5dGVzX3JlbmRlcmVkLCAmZGV2LT5ieXRlc19yZW5kZXJlZCk7CisJZW5kX2N5Y2xlcyA9IGdldF9jeWNsZXMoKTsKKwlhdG9taWNfYWRkKCgodW5zaWduZWQgaW50KSAoKGVuZF9jeWNsZXMgLSBzdGFydF9jeWNsZXMpCisJCSAgICA+PiAxMCkpLCAvKiBLY3ljbGVzICovCisJCSAgICZkZXYtPmNwdV9rY3ljbGVzX3VzZWQpOworfQorCitzdGF0aWMgc3RydWN0IGZiX2RlZmVycmVkX2lvIGRsZmJfZGVmaW8gPSB7CisJLmRlbGF5ICAgICAgICAgID0gNSwKKwkuZGVmZXJyZWRfaW8gICAgPSBkbGZiX2RweV9kZWZlcnJlZF9pbywKK307CisKKyNlbmRpZgorCisvKgorICogVGhpcyBpcyBuZWNlc3NhcnkgYmVmb3JlIHdlIGNhbiBjb21tdW5pY2F0ZSB3aXRoIHRoZSBkaXNwbGF5IGNvbnRyb2xsZXIuCisgKi8KK3N0YXRpYyBpbnQgZGxmYl9zZWxlY3Rfc3RkX2NoYW5uZWwoc3RydWN0IGRsZmJfZGF0YSAqZGV2KQoreworCWludCByZXQ7CisJdTggc2V0X2RlZl9jaG5bXSA9IHsJICAgMHg1NywgMHhDRCwgMHhEQywgMHhBNywKKwkJCQkweDFDLCAweDg4LCAweDVFLCAweDE1LAorCQkJCTB4NjAsIDB4RkUsIDB4QzYsIDB4OTcsCisJCQkJMHgxNiwgMHgzRCwgMHg0NywgMHhGMiAgfTsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJTlJfVVNCX1JFUVVFU1RfQ0hBTk5FTCwKKwkJCShVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiksIDAsIDAsCisJCQlzZXRfZGVmX2Nobiwgc2l6ZW9mKHNldF9kZWZfY2huKSwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCBkbGZiX3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2OworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCWludCB2aWRlb21lbW9yeXNpemU7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciAqdmlkZW9tZW1vcnk7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXI7CisJaW50IHJlZ2lzdGVyZWQgPSAwOworCXUxNiAqcGl4X2ZyYW1lYnVmZmVyOworCisJLyogdXNiIGluaXRpYWxpemF0aW9uICovCisKKwl1c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisKKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRldiA9PSBOVUxMKSB7CisJCWVycigiZGxmYl91c2JfcHJvYmU6IGZhaWxlZCBhbGxvYyBvZiBkZXYgc3RydWN0XG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiB3ZSBuZWVkIHRvIHdhaXQgZm9yIGJvdGggdXNiIGFuZCBmYmRldiB0byBzcGluIGRvd24gb24gZGlzY29ubmVjdCAqLworCWtyZWZfaW5pdCgmZGV2LT5rcmVmKTsgLyogbWF0Y2hpbmcga3JlZl9wdXQgaW4gdXNiIC5kaXNjb25uZWN0IGZuICovCisJa3JlZl9nZXQoJmRldi0+a3JlZik7IC8qIG1hdGNoaW5nIGtyZWZfcHV0IGluIC5mYl9kZXN0cm95IGZ1bmN0aW9uKi8KKworCWRldi0+dWRldiA9IHVzYmRldjsKKwlkZXYtPmdkZXYgPSAmdXNiZGV2LT5kZXY7IC8qIG91ciBnZW5lcmljIHN0cnVjdCBkZXZpY2UgKiAqLworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOworCisJaWYgKCFkbGZiX2FsbG9jX3VyYl9saXN0KGRldiwgV1JJVEVTX0lOX0ZMSUdIVCwgTUFYX1RSQU5TRkVSKSkgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlkbF9lcnIoImRsZmJfYWxsb2NfdXJiX2xpc3QgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwltdXRleF9pbml0KCZkZXYtPmZiX29wZW5fbG9jayk7CisKKwkvKiBXZSBkb24ndCByZWdpc3RlciBhIG5ldyBVU0IgY2xhc3MuIE91ciBjbGllbnQgaW50ZXJmYWNlIGlzIGZiZGV2ICovCisKKwkvKiBhbGxvY2F0ZXMgZnJhbWVidWZmZXIgZHJpdmVyIHN0cnVjdHVyZSwgbm90IGZyYW1lYnVmZmVyIG1lbW9yeSAqLworCWluZm8gPSBmcmFtZWJ1ZmZlcl9hbGxvYygwLCAmdXNiZGV2LT5kZXYpOworCWlmICghaW5mbykgeworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlkbF9lcnIoImZyYW1lYnVmZmVyX2FsbG9jIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCWRldi0+aW5mbyA9IGluZm87CisJaW5mby0+cGFyID0gZGV2OworCWluZm8tPnBzZXVkb19wYWxldHRlID0gZGV2LT5wc2V1ZG9fcGFsZXR0ZTsKKwlpbmZvLT5mYm9wcyA9ICZkbGZiX29wczsKKworCXZhciA9ICZpbmZvLT52YXI7CisKKwkvKiBUT0RPIHNldCBsaW1pdCBiYXNlZCBvbiBhY3R1YWwgU0tVIGRldGVjdGlvbiAqLworCWRldi0+c2t1X3BpeGVsX2xpbWl0ID0gMjA0OCAqIDExNTI7CisKKwlJTklUX0xJU1RfSEVBRCgmaW5mby0+bW9kZWxpc3QpOworCWRsZmJfcGFyc2VfZWRpZChkZXYsIHZhciwgaW5mbyk7CisKKwkvKgorCSAqIG9rLCBub3cgdGhhdCB3ZSd2ZSBnb3QgdGhlIHNpemUgaW5mbywgd2UgY2FuIGFsbG9jIG91ciBmcmFtZWJ1ZmZlci4KKwkgKi8KKwlpbmZvLT5maXggPSBkbGZiX2ZpeDsKKwlpbmZvLT5maXgubGluZV9sZW5ndGggPSB2YXItPnhyZXMgKiAodmFyLT5iaXRzX3Blcl9waXhlbCAvIDgpOworCXZpZGVvbWVtb3J5c2l6ZSA9IGluZm8tPmZpeC5saW5lX2xlbmd0aCAqIHZhci0+eXJlczsKKworCS8qCisJICogVGhlIGJpZyBjaHVuayBvZiBzeXN0ZW0gbWVtb3J5IHdlIHVzZSBhcyBhIHZpcnR1YWwgZnJhbWVidWZmZXIuCisJICogVE9ETzogSGFuZGxlIGZiY29uIGN1cnNvciBjb2RlIGNhbGxpbmcgYmxpdCBpbiBpbnRlcnJ1cHQgY29udGV4dAorCSAqLworCXZpZGVvbWVtb3J5ID0gdm1hbGxvYyh2aWRlb21lbW9yeXNpemUpOworCWlmICghdmlkZW9tZW1vcnkpIHsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZGxfZXJyKCJWaXJ0dWFsIGZyYW1lYnVmZmVyIGFsbG9jIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaW5mby0+c2NyZWVuX2Jhc2UgPSB2aWRlb21lbW9yeTsKKwlpbmZvLT5maXguc21lbV9sZW4gPSBQQUdFX0FMSUdOKHZpZGVvbWVtb3J5c2l6ZSk7CisJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSAodW5zaWduZWQgbG9uZykgdmlkZW9tZW1vcnk7CisJaW5mby0+ZmxhZ3MgPSB1ZGxmYl9pbmZvX2ZsYWdzOworCisKKwkvKgorCSAqIFNlY29uZCBmcmFtZWJ1ZmZlciBjb3B5LCBtaXJyb3JpbmcgdGhlIHN0YXRlIG9mIHRoZSBmcmFtZWJ1ZmZlcgorCSAqIG9uIHRoZSBwaHlzaWNhbCBVU0IgZGV2aWNlLiBXZSBjYW4gZnVuY3Rpb24gd2l0aG91dCB0aGlzLgorCSAqIEJ1dCB3aXRoIGltcGVyZmVjdCBkYW1hZ2UgaW5mbyB3ZSBtYXkgZW5kIHVwIHNlbmRpbmcgcGl4ZWxzIG92ZXIgVVNCCisJICogdGhhdCB3ZXJlLCBpbiBmYWN0LCB1bmNoYW5nZWQgLS0gd2FzdGluZyBsaW1pdGVkIFVTQiBiYW5kd2lkdGgKKwkgKi8KKwlkZXYtPmJhY2tpbmdfYnVmZmVyID0gdm1hbGxvYyh2aWRlb21lbW9yeXNpemUpOworCWlmICghZGV2LT5iYWNraW5nX2J1ZmZlcikKKwkJZGxfd2FybigiTm8gc2hhZG93L2JhY2tpbmcgYnVmZmVyIGFsbGNvYXRlZFxuIik7CisJZWxzZQorCQltZW1zZXQoZGV2LT5iYWNraW5nX2J1ZmZlciwgMCwgdmlkZW9tZW1vcnlzaXplKTsKKworCXJldHZhbCA9IGZiX2FsbG9jX2NtYXAoJmluZm8tPmNtYXAsIDI1NiwgMCk7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJZGxfZXJyKCJmYl9hbGxvY19jbWFwIGZhaWxlZCAleFxuIiwgcmV0dmFsKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkvKiByZWFkeSB0byBiZWdpbiB1c2luZyBkZXZpY2UgKi8KKworI2lmZGVmIENPTkZJR19GQl9ERUZFUlJFRF9JTworCWF0b21pY19zZXQoJmRldi0+dXNlX2RlZmlvLCAxKTsKKyNlbmRpZgorCWF0b21pY19zZXQoJmRldi0+dXNiX2FjdGl2ZSwgMSk7CisJZGxmYl9zZWxlY3Rfc3RkX2NoYW5uZWwoZGV2KTsKKworCWRsZmJfb3BzX2NoZWNrX3Zhcih2YXIsIGluZm8pOworCWRsZmJfb3BzX3NldF9wYXIoaW5mbyk7CisKKwkvKiBwYWludCBncmVlbnNjcmVlbiAqLworCXBpeF9mcmFtZWJ1ZmZlciA9ICh1MTYgKikgdmlkZW9tZW1vcnk7CisJZm9yIChpID0gMDsgaSA8IHZpZGVvbWVtb3J5c2l6ZSAvIDI7IGkrKykKKwkJcGl4X2ZyYW1lYnVmZmVyW2ldID0gMHgzN2U2OworCisJZGxmYl9oYW5kbGVfZGFtYWdlKGRldiwgMCwgMCwgaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzLAorCQkJCXZpZGVvbWVtb3J5KTsKKworCXJldHZhbCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGluZm8pOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRsX2VycigicmVnaXN0ZXJfZnJhbWVidWZmZXIgZmFpbGVkICVkXG4iLCByZXR2YWwpOworCQlnb3RvIGVycm9yOworCX0KKwlyZWdpc3RlcmVkID0gMTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZiX2RldmljZV9hdHRycyk7IGkrKykKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKGluZm8tPmRldiwgJmZiX2RldmljZV9hdHRyc1tpXSk7CisKKwlkZXZpY2VfY3JlYXRlX2Jpbl9maWxlKGluZm8tPmRldiwgJmVkaWRfYXR0cik7CisKKwlkbF9lcnIoIkRpc3BsYXlMaW5rIFVTQiBkZXZpY2UgL2Rldi9mYiVkIGF0dGFjaGVkLiAlZHglZCByZXNvbHV0aW9uLiIKKwkJCSIgVXNpbmcgJWRLIGZyYW1lYnVmZmVyIG1lbW9yeVxuIiwgaW5mby0+bm9kZSwKKwkJCXZhci0+eHJlcywgdmFyLT55cmVzLAorCQkJKChkZXYtPmJhY2tpbmdfYnVmZmVyKSA/CisJCQl2aWRlb21lbW9yeXNpemUgKiAyIDogdmlkZW9tZW1vcnlzaXplKSA+PiAxMCk7CisJcmV0dXJuIDA7CisKK2Vycm9yOgorCWlmIChkZXYpIHsKKwkJaWYgKHJlZ2lzdGVyZWQpIHsKKwkJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CisJCQlkbGZiX29wc19kZXN0cm95KGluZm8pOworCQl9IGVsc2UKKwkJCWtyZWZfcHV0KCZkZXYtPmtyZWYsIGRsZmJfZGVsZXRlKTsKKworCQlpZiAoZGV2LT51cmJzLmNvdW50ID4gMCkKKwkJCWRsZmJfZnJlZV91cmJfbGlzdChkZXYpOworCQlrcmVmX3B1dCgmZGV2LT5rcmVmLCBkbGZiX2RlbGV0ZSk7IC8qIGxhc3QgcmVmIGZyb20ga3JlZl9pbml0ICovCisKKwkJLyogZGV2IGhhcyBiZWVuIGRlYWxsb2NhdGVkLiBEbyBub3QgZGVyZWZlcmVuY2UgKi8KKwl9CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBkbGZiX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UpCit7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2OworCXN0cnVjdCBmYl9pbmZvICppbmZvOworCWludCBpOworCisJZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWluZm8gPSBkZXYtPmluZm87CisKKwkvKiB3aGVuIG5vbi1hY3RpdmUgd2UnbGwgdXBkYXRlIHZpcnR1YWwgZnJhbWVidWZmZXIsIGJ1dCBubyBuZXcgdXJicyAqLworCWF0b21pY19zZXQoJmRldi0+dXNiX2FjdGl2ZSwgMCk7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmYl9kZXZpY2VfYXR0cnMpOyBpKyspCisJCWRldmljZV9yZW1vdmVfZmlsZShpbmZvLT5kZXYsICZmYl9kZXZpY2VfYXR0cnNbaV0pOworCisJZGV2aWNlX3JlbW92ZV9iaW5fZmlsZShpbmZvLT5kZXYsICZlZGlkX2F0dHIpOworCisJLyogdGhpcyBmdW5jdGlvbiB3aWxsIHdhaXQgZm9yIGFsbCBpbi1mbGlnaHQgdXJicyB0byBjb21wbGV0ZSAqLworCWRsZmJfZnJlZV91cmJfbGlzdChkZXYpOworCisJaWYgKGluZm8pIHsKKwkJZGxfbm90aWNlKCJEZXRhY2hpbmcgL2Rldi9mYiVkXG4iLCBpbmZvLT5ub2RlKTsKKwkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKKwkJZGxmYl9vcHNfZGVzdHJveShpbmZvKTsKKwl9CisKKwkvKiByZWxlYXNlIHJlZmVyZW5jZSB0YWtlbiBieSBrcmVmX2luaXQgaW4gcHJvYmUoKSAqLworCWtyZWZfcHV0KCZkZXYtPmtyZWYsIGRsZmJfZGVsZXRlKTsKKworCS8qIGNvbnNpZGVyIGRsZmJfZGF0YSBmcmVlZCAqLworCisJcmV0dXJuOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgZGxmYl9kcml2ZXIgPSB7CiAJLm5hbWUgPSAidWRsZmIiLAotCS5wcm9iZSA9IGRsZmJfcHJvYmUsCi0JLmRpc2Nvbm5lY3QgPSBkbGZiX2Rpc2Nvbm5lY3QsCisJLnByb2JlID0gZGxmYl91c2JfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBkbGZiX3VzYl9kaXNjb25uZWN0LAogCS5pZF90YWJsZSA9IGlkX3RhYmxlLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgZGxmYl9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBkbGZiX21vZHVsZV9pbml0KHZvaWQpCiB7CiAJaW50IHJlczsKIAotCWRsZmJfaW5pdF9tb2RlcygpOwotCiAJcmVzID0gdXNiX3JlZ2lzdGVyKCZkbGZiX2RyaXZlcik7CiAJaWYgKHJlcykKIAkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXMpOwpAQCAtOTI1LDE0ICsxNDQyLDE4NiBAQAogCXJldHVybiByZXM7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBkbGZiX2V4aXQodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBkbGZiX21vZHVsZV9leGl0KHZvaWQpCiB7CiAJdXNiX2RlcmVnaXN0ZXIoJmRsZmJfZHJpdmVyKTsKIH0KIAotbW9kdWxlX2luaXQoZGxmYl9pbml0KTsKLW1vZHVsZV9leGl0KGRsZmJfZXhpdCk7Cittb2R1bGVfaW5pdChkbGZiX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KGRsZmJfbW9kdWxlX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCJSb2JlcnRvIERlIElvcmlzIDxyb2JlcnRvQHVuYml0Lml0PiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9WRVJTSU9OKTsKK3N0YXRpYyB2b2lkIGRsZmJfdXJiX2NvbXBsZXRpb24oc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCB1cmJfbm9kZSAqdW5vZGUgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2ID0gdW5vZGUtPmRldjsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogc3luYy9hc3luYyB1bmxpbmsgZmF1bHRzIGFyZW4ndCBlcnJvcnMgKi8KKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJaWYgKCEodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fAorCQkgICAgdXJiLT5zdGF0dXMgPT0gLUVDT05OUkVTRVQgfHwKKwkJICAgIHVyYi0+c3RhdHVzID09IC1FU0hVVERPV04pKSB7CisJCQlkbF9lcnIoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWRcbiIsCisJCQkJX19mdW5jX18sIHVyYi0+c3RhdHVzKTsKKwkJCWF0b21pY19zZXQoJmRldi0+bG9zdF9waXhlbHMsIDEpOworCQl9CisJfQorCisJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gZGV2LT51cmJzLnNpemU7IC8qIHJlc2V0IHRvIGFjdHVhbCAqLworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+dXJicy5sb2NrLCBmbGFncyk7CisJbGlzdF9hZGRfdGFpbCgmdW5vZGUtPmVudHJ5LCAmZGV2LT51cmJzLmxpc3QpOworCWRldi0+dXJicy5hdmFpbGFibGUrKzsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnVyYnMubG9jaywgZmxhZ3MpOworCisJdXAoJmRldi0+dXJicy5saW1pdF9zZW0pOworfQorCitzdGF0aWMgdm9pZCBkbGZiX2ZyZWVfdXJiX2xpc3Qoc3RydWN0IGRsZmJfZGF0YSAqZGV2KQoreworCWludCBjb3VudCA9IGRldi0+dXJicy5jb3VudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpub2RlOworCXN0cnVjdCB1cmJfbm9kZSAqdW5vZGU7CisJc3RydWN0IHVyYiAqdXJiOworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRsX25vdGljZSgiV2FpdGluZyBmb3IgY29tcGxldGVzIGFuZCBmcmVlaW5nIGFsbCByZW5kZXIgdXJic1xuIik7CisKKwkvKiBrZWVwIHdhaXRpbmcgYW5kIGZyZWVpbmcsIHVudGlsIHdlJ3ZlIGdvdCAnZW0gYWxsICovCisJd2hpbGUgKGNvdW50LS0pIHsKKwkJLyogVGltZW91dCBtZWFucyBhIG1lbW9yeSBsZWFrIGFuZC9vciBmYXVsdCAqLworCQlyZXQgPSBkb3duX3RpbWVvdXQoJmRldi0+dXJicy5saW1pdF9zZW0sIEZSRUVfVVJCX1RJTUVPVVQpOworCQlpZiAocmV0KSB7CisJCQlCVUdfT04ocmV0KTsKKwkJCWJyZWFrOworCQl9CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnVyYnMubG9jaywgZmxhZ3MpOworCisJCW5vZGUgPSBkZXYtPnVyYnMubGlzdC5uZXh0OyAvKiBoYXZlIHJlc2VydmVkIG9uZSB3aXRoIHNlbSAqLworCQlsaXN0X2RlbF9pbml0KG5vZGUpOworCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+dXJicy5sb2NrLCBmbGFncyk7CisKKwkJdW5vZGUgPSBsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCB1cmJfbm9kZSwgZW50cnkpOworCQl1cmIgPSB1bm9kZS0+dXJiOworCisJCS8qIEZyZWUgZWFjaCBzZXBhcmF0ZWx5IGFsbG9jYXRlZCBwaWVjZSAqLworCQl1c2JfYnVmZmVyX2ZyZWUodXJiLT5kZXYsIGRldi0+dXJicy5zaXplLAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCWtmcmVlKG5vZGUpOworCX0KKworCWtyZWZfcHV0KCZkZXYtPmtyZWYsIGRsZmJfZGVsZXRlKTsKKworfQorCitzdGF0aWMgaW50IGRsZmJfYWxsb2NfdXJiX2xpc3Qoc3RydWN0IGRsZmJfZGF0YSAqZGV2LCBpbnQgY291bnQsIHNpemVfdCBzaXplKQoreworCWludCBpID0gMDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IHVyYl9ub2RlICp1bm9kZTsKKwljaGFyICpidWY7CisKKwlzcGluX2xvY2tfaW5pdCgmZGV2LT51cmJzLmxvY2spOworCisJZGV2LT51cmJzLnNpemUgPSBzaXplOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnVyYnMubGlzdCk7CisKKwl3aGlsZSAoaSA8IGNvdW50KSB7CisJCXVub2RlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVyYl9ub2RlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdW5vZGUpCisJCQlicmVhazsKKwkJdW5vZGUtPmRldiA9IGRldjsKKworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworCQlpZiAoIXVyYikgeworCQkJa2ZyZWUodW5vZGUpOworCQkJYnJlYWs7CisJCX0KKwkJdW5vZGUtPnVyYiA9IHVyYjsKKworCQlidWYgPSB1c2JfYnVmZmVyX2FsbG9jKGRldi0+dWRldiwgTUFYX1RSQU5TRkVSLCBHRlBfS0VSTkVMLAorCQkJCQkmdXJiLT50cmFuc2Zlcl9kbWEpOworCQlpZiAoIWJ1ZikgeworCQkJa2ZyZWUodW5vZGUpOworCQkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCQlicmVhazsKKwkJfQorCisJCS8qIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCBzZXQgdG8gYWN0dWFsIGJlZm9yZSBzdWJtaXQgKi8KKwkJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBkZXYtPnVkZXYsIHVzYl9zbmRidWxrcGlwZShkZXYtPnVkZXYsIDEpLAorCQkJYnVmLCBzaXplLCBkbGZiX3VyYl9jb21wbGV0aW9uLCB1bm9kZSk7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwkJbGlzdF9hZGRfdGFpbCgmdW5vZGUtPmVudHJ5LCAmZGV2LT51cmJzLmxpc3QpOworCisJCWkrKzsKKwl9CisKKwlzZW1hX2luaXQoJmRldi0+dXJicy5saW1pdF9zZW0sIGkpOworCWRldi0+dXJicy5jb3VudCA9IGk7CisJZGV2LT51cmJzLmF2YWlsYWJsZSA9IGk7CisKKwlrcmVmX2dldCgmZGV2LT5rcmVmKTsgLyogcmVsZWFzZWQgaW4gZnJlZV9yZW5kZXJfdXJicygpICovCisKKwlkbF9ub3RpY2UoImFsbG9jYXRlZCAlZCAlZCBieXRlIHVyYnMgXG4iLCBpLCAoaW50KSBzaXplKTsKKworCXJldHVybiBpOworfQorCitzdGF0aWMgc3RydWN0IHVyYiAqZGxmYl9nZXRfdXJiKHN0cnVjdCBkbGZiX2RhdGEgKmRldikKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKKwlzdHJ1Y3QgdXJiX25vZGUgKnVub2RlOworCXN0cnVjdCB1cmIgKnVyYiA9IE5VTEw7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFdhaXQgZm9yIGFuIGluLWZsaWdodCBidWZmZXIgdG8gY29tcGxldGUgYW5kIGdldCByZS1xdWV1ZWQgKi8KKwlyZXQgPSBkb3duX3RpbWVvdXQoJmRldi0+dXJicy5saW1pdF9zZW0sIEdFVF9VUkJfVElNRU9VVCk7CisJaWYgKHJldCkgeworCQlhdG9taWNfc2V0KCZkZXYtPmxvc3RfcGl4ZWxzLCAxKTsKKwkJZGxfZXJyKCJ3YWl0IGZvciB1cmIgaW50ZXJydXB0ZWQ6ICV4XG4iLCByZXQpOworCQlnb3RvIGVycm9yOworCX0KKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnVyYnMubG9jaywgZmxhZ3MpOworCisJQlVHX09OKGxpc3RfZW1wdHkoJmRldi0+dXJicy5saXN0KSk7IC8qIHJlc2VydmVkIG9uZSB3aXRoIGxpbWl0X3NlbSAqLworCWVudHJ5ID0gZGV2LT51cmJzLmxpc3QubmV4dDsKKwlsaXN0X2RlbF9pbml0KGVudHJ5KTsKKwlkZXYtPnVyYnMuYXZhaWxhYmxlLS07CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPnVyYnMubG9jaywgZmxhZ3MpOworCisJdW5vZGUgPSBsaXN0X2VudHJ5KGVudHJ5LCBzdHJ1Y3QgdXJiX25vZGUsIGVudHJ5KTsKKwl1cmIgPSB1bm9kZS0+dXJiOworCitlcnJvcjoKKwlyZXR1cm4gdXJiOworfQorCitzdGF0aWMgaW50IGRsZmJfc3VibWl0X3VyYihzdHJ1Y3QgZGxmYl9kYXRhICpkZXYsIHN0cnVjdCB1cmIgKnVyYiwgc2l6ZV90IGxlbikKK3sKKwlpbnQgcmV0OworCisJQlVHX09OKGxlbiA+IGRldi0+dXJicy5zaXplKTsKKworCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGxlbjsgLyogc2V0IHRvIGFjdHVhbCBwYXlsb2FkIGxlbiAqLworCXJldCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0tFUk5FTCk7CisJaWYgKHJldCkgeworCQlkbGZiX3VyYl9jb21wbGV0aW9uKHVyYik7IC8qIGJlY2F1c2Ugbm8gb25lIGVsc2Ugd2lsbCAqLworCQlhdG9taWNfc2V0KCZkZXYtPmxvc3RfcGl4ZWxzLCAxKTsKKwkJZGxfZXJyKCJ1c2Jfc3VibWl0X3VyYiBlcnJvciAleFxuIiwgcmV0KTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworTU9EVUxFX0FVVEhPUigiUm9iZXJ0byBEZSBJb3JpcyA8cm9iZXJ0b0B1bmJpdC5pdD4sICIKKwkgICAgICAiSmF5YSBLdW1hciA8amF5YWt1bWFyLmxrbWxAZ21haWwuY29tPiwgIgorCSAgICAgICJCZXJuaWUgVGhvbXBzb24gPGJlcm5pZUBwbHVnYWJsZS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRpc3BsYXlMaW5rIGtlcm5lbCBmcmFtZWJ1ZmZlciBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3VkbGZiL3VkbGZiLmggYi9kcml2ZXJzL3N0YWdpbmcvdWRsZmIvdWRsZmIuaAppbmRleCA0MGFkODVlLi5iMDdhNjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdWRsZmIvdWRsZmIuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdWRsZmIvdWRsZmIuaApAQCAtMSwyMjUgKzEsMTA2IEBACiAjaWZuZGVmIFVETEZCX0gKICNkZWZpbmUgVURMRkJfSAogCi0jZGVmaW5lIE1BWF9WTU9ERVMJNAotI2RlZmluZSBGQl9CUFAJCTE2CisvKgorICogVE9ETzogUHJvcG9zZSBzdGFuZGFyZCBmYi5oIGlvY3RsIGZvciByZXBvcnRpbmcgZGFtYWdlLAorICogdXNpbmcgX0lPV1IoKSBhbmQgb25lIG9mIHRoZSBleGlzdGluZyBhcmVhIHN0cnVjdHMgZnJvbSBmYi5oCisgKiBDb25zaWRlciB0aGVzZSBpb2N0bHMgZGVwcmVjYXRlZCwgYnV0IHRoZXkncmUgc3RpbGwgdXNlZCBieSB0aGUKKyAqIERpc3BsYXlMaW5rIFggc2VydmVyIGFzIHlldCAtIG5lZWQgYm90aCB0byBiZSBtb2RpZmllZCBpbiB0YW5kZW0KKyAqIHdoZW4gbmV3IGlvY3RsKHMpIGFyZSByZWFkeS4KKyAqLworI2RlZmluZSBETEZCX0lPQ1RMX1JFVFVSTl9FRElECSAweEFECisjZGVmaW5lIERMRkJfSU9DVExfUkVQT1JUX0RBTUFHRSAweEFBCitzdHJ1Y3QgZGxvYXJlYSB7CisJaW50IHgsIHk7CisJaW50IHcsIGg7CisJaW50IHgyLCB5MjsKK307CiAKLSNkZWZpbmUgU1REX0NIQU5ORUwJIlx4NTdceENEXHhEQ1x4QTdceDFDXHg4OFx4NUVceDE1IglcCi0JCQkiXHg2MFx4RkVceEM2XHg5N1x4MTZceDNEXHg0N1x4RjIiCitzdHJ1Y3QgdXJiX25vZGUgeworCXN0cnVjdCBsaXN0X2hlYWQgZW50cnk7CisJc3RydWN0IGRsZmJfZGF0YSAqZGV2OworCXN0cnVjdCB1cmIgKnVyYjsKK307CiAKLS8qIGFzIGxpYmRsbyAqLwotI2RlZmluZSBCVUZfSElHSF9XQVRFUl9NQVJLCTEwMjQKLSNkZWZpbmUgQlVGX1NJWkUJCSg2NCoxMDI0KQorc3RydWN0IHVyYl9saXN0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBzZW1hcGhvcmUgbGltaXRfc2VtOworCWludCBhdmFpbGFibGU7CisJaW50IGNvdW50OworCXNpemVfdCBzaXplOworfTsKIAogc3RydWN0IGRsZmJfZGF0YSB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKLQlzdHJ1Y3QgdXJiICp0eF91cmIsICpjdHJsX3VyYjsKLQlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0IGRyOworCXN0cnVjdCBkZXZpY2UgKmdkZXY7IC8qICZ1ZGV2LT5kZXYgKi8KIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKLQljaGFyICpidWY7Ci0JY2hhciAqYnVmZW5kOworCXN0cnVjdCB1cmJfbGlzdCB1cmJzOworCXN0cnVjdCBrcmVmIGtyZWY7CiAJY2hhciAqYmFja2luZ19idWZmZXI7Ci0Jc3RydWN0IG11dGV4IGJ1bGtfbXV0ZXg7CisJc3RydWN0IGRlbGF5ZWRfd29yayBkZWZlcnJlZF93b3JrOworCXN0cnVjdCBtdXRleCBmYl9vcGVuX2xvY2s7CisJaW50IGZiX2NvdW50OworCWF0b21pY190IHVzYl9hY3RpdmU7IC8qIDAgPSB1cGRhdGUgdmlydHVhbCBidWZmZXIsIGJ1dCBubyB1c2IgdHJhZmZpYyAqLworCWF0b21pY190IGxvc3RfcGl4ZWxzOyAvKiAxID0gYSByZW5kZXIgb3AgZmFpbGVkLiBOZWVkIHNjcmVlbiByZWZyZXNoICovCisJYXRvbWljX3QgdXNlX2RlZmlvOyAvKiAwID0gcmVseSBvbiBpb2N0bHMgYW5kIGJsaXQvY29weS9maWxsIHJlY3RzICovCiAJY2hhciBlZGlkWzEyOF07Ci0JaW50IHNjcmVlbl9zaXplOwotCWludCBsaW5lX2xlbmd0aDsKLQlzdHJ1Y3QgY29tcGxldGlvbiBkb25lOworCWludCBza3VfcGl4ZWxfbGltaXQ7CiAJaW50IGJhc2UxNjsKLQlpbnQgYmFzZTE2ZDsKIAlpbnQgYmFzZTg7Ci0JaW50IGJhc2U4ZDsKKwl1MzIgcHNldWRvX3BhbGV0dGVbMjU2XTsKKwkvKiBibGl0LW9ubHkgcmVuZGVyaW5nIHBhdGggbWV0cmljcywgZXhwb3NlZCB0aHJvdWdoIHN5c2ZzICovCisJYXRvbWljX3QgYnl0ZXNfcmVuZGVyZWQ7IC8qIHJhdyBwaXhlbC1ieXRlcyBkcml2ZXIgYXNrZWQgdG8gcmVuZGVyICovCisJYXRvbWljX3QgYnl0ZXNfaWRlbnRpY2FsOyAvKiBzYXZlZCBlZmZvcnQgd2l0aCBiYWNrYnVmZmVyIGNvbXBhcmlzb24gKi8KKwlhdG9taWNfdCBieXRlc19zZW50OyAvKiB0byB1c2IsIGFmdGVyIGNvbXByZXNzaW9uIGluY2x1ZGluZyBvdmVyaGVhZCAqLworCWF0b21pY190IGNwdV9rY3ljbGVzX3VzZWQ7IC8qIHRyYW5zcGlyZWQgZHVyaW5nIHBpeGVsIHByb2Nlc3NpbmcgKi8KKwkvKiBpbnRlcmZhY2UgdXNhZ2UgbWV0cmljcy4gQ2xpZW50cyBjYW4gY2FsbCBkcml2ZXIgdmlhIHNldmVyYWwgKi8KKwlhdG9taWNfdCBibGl0X2NvdW50OworCWF0b21pY190IGNvcHlfY291bnQ7CisJYXRvbWljX3QgZmlsbF9jb3VudDsKKwlhdG9taWNfdCBkYW1hZ2VfY291bnQ7CisJYXRvbWljX3QgZGVmaW9fZmF1bHRfY291bnQ7CiB9OwogCi1zdHJ1Y3QgZGxmYl92aWRlb19tb2RlIHsKLQl1aW50OF90IGNvbDsKLQl1aW50MzJfdCBoY2xvY2s7Ci0JdWludDMyX3QgdmNsb2NrOwotCXVpbnQ4X3QgdW5rbm93bjFbNl07Ci0JdWludDE2X3QgeHJlczsKLQl1aW50OF90IHVua25vd24yWzZdOwotCXVpbnQxNl90IHlyZXM7Ci0JdWludDhfdCB1bmtub3duM1s0XTsKLX0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKTsKKyNkZWZpbmUgTlJfVVNCX1JFUVVFU1RfSTJDX1NVQl9JTyAweDAyCisjZGVmaW5lIE5SX1VTQl9SRVFVRVNUX0NIQU5ORUwgMHgxMgogCi1zdGF0aWMgc3RydWN0IGRsZmJfdmlkZW9fbW9kZSBkbGZiX3ZpZGVvX21vZGVzW01BWF9WTU9ERVNdOworLyogLUJVTEtfU0laRSBhcyBwZXIgdXNiLXNrZWxldG9uLiBDYW4gd2UgZ2V0IGZ1bGwgcGFnZSBhbmQgYXZvaWQgb3ZlcmhlYWQ/ICovCisjZGVmaW5lIEJVTEtfU0laRSA1MTIKKyNkZWZpbmUgTUFYX1RSQU5TRkVSIChQQUdFX1NJWkUqMTYgLSBCVUxLX1NJWkUpCisjZGVmaW5lIFdSSVRFU19JTl9GTElHSFQgKDQpCiAKLXN0YXRpYyB2b2lkIGRsZmJfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCi17Ci0Jc3RydWN0IGRsZmJfZGF0YSAqZGV2X2luZm8gPSB1cmItPmNvbnRleHQ7Ci0JY29tcGxldGUoJmRldl9pbmZvLT5kb25lKTsKLX0KKyNkZWZpbmUgR0VUX1VSQl9USU1FT1VUCUhaCisjZGVmaW5lIEZSRUVfVVJCX1RJTUVPVVQgKEhaKjIpCiAKLXN0YXRpYyB2b2lkIGRsZmJfZWRpZChzdHJ1Y3QgZGxmYl9kYXRhICpkZXZfaW5mbykKLXsKLQlpbnQgaTsKLQlpbnQgcmV0OwotCWNoYXIgcmJ1ZlsyXTsKKyNkZWZpbmUgQlBQICAgICAgICAgICAgICAgICAgICAgMgorI2RlZmluZSBNQVhfQ01EX1BJWEVMUwkJMjU1CiAKLQlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyspIHsKLQkJcmV0ID0KLQkJICAgIHVzYl9jb250cm9sX21zZyhkZXZfaW5mby0+dWRldiwKLQkJCQkgICAgdXNiX3JjdmN0cmxwaXBlKGRldl9pbmZvLT51ZGV2LCAwKSwgKDB4MDIpLAotCQkJCSAgICAoMHg4MCB8ICgweDAyIDw8IDUpKSwgaSA8PCA4LCAweEExLCByYnVmLCAyLAotCQkJCSAgICAwKTsKLQkJLypwcmludGsoInJldCBjb250cm9sIG1zZyBlZGlkICVkOiAlZCBbJWRdXG4iLGksIHJldCwgcmJ1ZlsxXSk7ICovCi0JCWRldl9pbmZvLT5lZGlkW2ldID0gcmJ1ZlsxXTsKLQl9CisjZGVmaW5lIFJMWF9IRUFERVJfQllURVMJNworI2RlZmluZSBNSU5fUkxYX1BJWF9CWVRFUyAgICAgICA0CisjZGVmaW5lIE1JTl9STFhfQ01EX0JZVEVTCShSTFhfSEVBREVSX0JZVEVTICsgTUlOX1JMWF9QSVhfQllURVMpCiAKLX0KKyNkZWZpbmUgUkxFX0hFQURFUl9CWVRFUwk2CisjZGVmaW5lIE1JTl9STEVfUElYX0JZVEVTCTMKKyNkZWZpbmUgTUlOX1JMRV9DTURfQllURVMJKFJMRV9IRUFERVJfQllURVMgKyBNSU5fUkxFX1BJWF9CWVRFUykKIAotc3RhdGljIGludCBkbGZiX2J1bGtfbXNnKHN0cnVjdCBkbGZiX2RhdGEgKmRldl9pbmZvLCBpbnQgbGVuKQotewotCWludCByZXQ7CisjZGVmaW5lIFJBV19IRUFERVJfQllURVMJNgorI2RlZmluZSBNSU5fUkFXX1BJWF9CWVRFUwkyCisjZGVmaW5lIE1JTl9SQVdfQ01EX0JZVEVTCShSQVdfSEVBREVSX0JZVEVTICsgTUlOX1JBV19QSVhfQllURVMpCiAKLQlpbml0X2NvbXBsZXRpb24oJmRldl9pbmZvLT5kb25lKTsKKy8qIHJlbW92ZSB0aGVzZSBvbmNlIGFsaWduLmggcGF0Y2ggaXMgdGFrZW4gaW50byBrZXJuZWwgKi8KKyNkZWZpbmUgRExfQUxJR05fVVAoeCwgYSkgQUxJR04oeCwgYSkKKyNkZWZpbmUgRExfQUxJR05fRE9XTih4LCBhKSBBTElHTih4LShhLTEpLCBhKQogCi0JZGV2X2luZm8tPnR4X3VyYi0+YWN0dWFsX2xlbmd0aCA9IDA7Ci0JZGV2X2luZm8tPnR4X3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGxlbjsKKy8qIHJlbW92ZSBvbmNlIHRoaXMgZ2V0cyBhZGRlZCB0byBzeXNmcy5oICovCisjZGVmaW5lIF9fQVRUUl9SVyhhdHRyKSBfX0FUVFIoYXR0ciwgMDY0NCwgYXR0ciMjX3Nob3csIGF0dHIjI19zdG9yZSkKIAotCXJldCA9IHVzYl9zdWJtaXRfdXJiKGRldl9pbmZvLT50eF91cmIsIEdGUF9LRVJORUwpOwotCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkZXZfaW5mby0+ZG9uZSwgMTAwMCkpIHsKLQkJdXNiX2tpbGxfdXJiKGRldl9pbmZvLT50eF91cmIpOwotCQlwcmludGsoInVzYiB0aW1lb3V0ICEhIVxuIik7Ci0JfQotCi0JcmV0dXJuIGRldl9pbmZvLT50eF91cmItPmFjdHVhbF9sZW5ndGg7Ci19Ci0KLXN0YXRpYyB2b2lkIGRsZmJfaW5pdF9tb2Rlcyh2b2lkKQotewotCWRsZmJfdmlkZW9fbW9kZXNbMF0uY29sID0gMDsKLQltZW1jcHkoJmRsZmJfdmlkZW9fbW9kZXNbMF0uaGNsb2NrLCAiXHgyMFx4M0NceDdBXHhDOSIsIDQpOwotCW1lbWNweSgmZGxmYl92aWRlb19tb2Rlc1swXS52Y2xvY2ssICJceEYyXHg2Q1x4NDhceEY5IiwgNCk7Ci0JbWVtY3B5KCZkbGZiX3ZpZGVvX21vZGVzWzBdLnVua25vd24xLCAiXHg3MFx4NTNceEZGXHhGRlx4MjFceDI3IiwgNik7Ci0JZGxmYl92aWRlb19tb2Rlc1swXS54cmVzID0gODAwOwotCW1lbWNweSgmZGxmYl92aWRlb19tb2Rlc1swXS51bmtub3duMiwgIlx4OTFceEYzXHhGRlx4RkZceEZGXHhGOSIsIDYpOwotCWRsZmJfdmlkZW9fbW9kZXNbMF0ueXJlcyA9IDQ4MDsKLQltZW1jcHkoJmRsZmJfdmlkZW9fbW9kZXNbMF0udW5rbm93bjMsICJceDAxXHgwMlx4QzhceDE5IiwgNCk7Ci0KLQlkbGZiX3ZpZGVvX21vZGVzWzFdLmNvbCA9IDA7Ci0JbWVtY3B5KCZkbGZiX3ZpZGVvX21vZGVzWzFdLmhjbG9jaywgIlx4MzZceDE4XHhENVx4MTAiLCA0KTsKLQltZW1jcHkoJmRsZmJfdmlkZW9fbW9kZXNbMV0udmNsb2NrLCAiXHg2MFx4QTlceDdCXHgzMyIsIDQpOwotCW1lbWNweSgmZGxmYl92aWRlb19tb2Rlc1sxXS51bmtub3duMSwgIlx4QTFceDJCXHgyN1x4MzJceEZGXHhGRiIsIDYpOwotCWRsZmJfdmlkZW9fbW9kZXNbMV0ueHJlcyA9IDEwMjQ7Ci0JbWVtY3B5KCZkbGZiX3ZpZGVvX21vZGVzWzFdLnVua25vd24yLCAiXHhEOVx4OUFceEZGXHhDQVx4RkZceEZGIiwgNik7Ci0JZGxmYl92aWRlb19tb2Rlc1sxXS55cmVzID0gNzY4OwotCW1lbWNweSgmZGxmYl92aWRlb19tb2Rlc1sxXS51bmtub3duMywgIlx4MDRceDAzXHhDOFx4MzIiLCA0KTsKLQotCWRsZmJfdmlkZW9fbW9kZXNbMl0uY29sID0gMDsKLQltZW1jcHkoJmRsZmJfdmlkZW9fbW9kZXNbMl0uaGNsb2NrLCAiXHg5OFx4RjhceDBEXHg1NyIsIDQpOwotCW1lbWNweSgmZGxmYl92aWRlb19tb2Rlc1syXS52Y2xvY2ssICJceDJBXHg1NVx4NERceDU0IiwgNCk7Ci0JbWVtY3B5KCZkbGZiX3ZpZGVvX21vZGVzWzJdLnVua25vd24xLCAiXHhDQVx4MERceEZGXHhGRlx4OTRceDQzIiwgNik7Ci0JZGxmYl92aWRlb19tb2Rlc1syXS54cmVzID0gMTI4MDsKLQltZW1jcHkoJmRsZmJfdmlkZW9fbW9kZXNbMl0udW5rbm93bjIsICJceDlBXHhBOFx4RkZceEZGXHhGRlx4RjkiLCA2KTsKLQlkbGZiX3ZpZGVvX21vZGVzWzJdLnlyZXMgPSAxMDI0OwotCW1lbWNweSgmZGxmYl92aWRlb19tb2Rlc1syXS51bmtub3duMywgIlx4MDRceDAyXHg2MFx4NTQiLCA0KTsKLQotCWRsZmJfdmlkZW9fbW9kZXNbM10uY29sID0gMDsKLQltZW1jcHkoJmRsZmJfdmlkZW9fbW9kZXNbM10uaGNsb2NrLCAiXHg0Mlx4MjRceDM4XHgzNiIsIDQpOwotCW1lbWNweSgmZGxmYl92aWRlb19tb2Rlc1szXS52Y2xvY2ssICJceEMxXHg1Mlx4RDlceDI5IiwgNCk7Ci0JbWVtY3B5KCZkbGZiX3ZpZGVvX21vZGVzWzNdLnVua25vd24xLCAiXHhFQVx4QjhceDMyXHg2MFx4RkZceEZGIiwgNik7Ci0JZGxmYl92aWRlb19tb2Rlc1szXS54cmVzID0gMTQwMDsKLQltZW1jcHkoJmRsZmJfdmlkZW9fbW9kZXNbM10udW5rbm93bjIsICJceEM5XHg0RVx4RkZceEZGXHhGRlx4RjIiLCA2KTsKLQlkbGZiX3ZpZGVvX21vZGVzWzNdLnlyZXMgPSAxMDUwOwotCW1lbWNweSgmZGxmYl92aWRlb19tb2Rlc1szXS51bmtub3duMywgIlx4MDRceDAyXHgxRVx4NUYiLCA0KTsKLX0KLQotc3RhdGljIGNoYXIgKmRsZmJfc2V0X3JlZ2lzdGVyKGNoYXIgKmJ1ZnB0ciwgdWludDhfdCByZWcsIHVpbnQ4X3QgdmFsKQotewotCSpidWZwdHIrKyA9IDB4QUY7Ci0JKmJ1ZnB0cisrID0gMHgyMDsKLQkqYnVmcHRyKysgPSByZWc7Ci0JKmJ1ZnB0cisrID0gdmFsOwotCi0JcmV0dXJuIGJ1ZnB0cjsKLX0KLQotc3RhdGljIGludCBkbGZiX3NldF92aWRlb19tb2RlKHN0cnVjdCBkbGZiX2RhdGEgKmRldl9pbmZvLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0JaW50IGksIHJldDsKLQl1bnNpZ25lZCBjaGFyIGo7Ci0JY2hhciAqYnVmcHRyID0gZGV2X2luZm8tPmJ1ZjsKLQl1aW50OF90ICp2ZGF0YTsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfVk1PREVTOyBpKyspIHsKLQkJcHJpbnRrKCJJTklUIFZJREVPICVkICVkICVkXG4iLCBpLCBkbGZiX3ZpZGVvX21vZGVzW2ldLnhyZXMsCi0JCSAgICAgICBkbGZiX3ZpZGVvX21vZGVzW2ldLnlyZXMpOwotCQlpZiAoZGxmYl92aWRlb19tb2Rlc1tpXS54cmVzID09IHdpZHRoCi0JCSAgICAmJiBkbGZiX3ZpZGVvX21vZGVzW2ldLnlyZXMgPT0gaGVpZ2h0KSB7Ci0KLQkJCWRldl9pbmZvLT5iYXNlMTYgPSAwOwotCQkJZGV2X2luZm8tPmJhc2UxNmQgPSB3aWR0aCAqIGhlaWdodCAqIChGQl9CUFAgLyA4KTsKLQotCQkJLy9kZXZfaW5mby0+YmFzZTggPSB3aWR0aCAqIGhlaWdodCAqIChGQl9CUFAgLyA4KTsKLQotCQkJZGV2X2luZm8tPmJhc2U4ID0gZGV2X2luZm8tPmJhc2UxNjsKLQkJCWRldl9pbmZvLT5iYXNlOGQgPSBkZXZfaW5mby0+YmFzZTE2ZDsKLQotCQkJLyogc2V0IGVuY3J5cHRpb24ga2V5IChudWxsKSAqLwotCQkJbWVtY3B5KGRldl9pbmZvLT5idWYsIFNURF9DSEFOTkVMLCAxNik7Ci0JCQlyZXQgPQotCQkJICAgIHVzYl9jb250cm9sX21zZyhkZXZfaW5mby0+dWRldiwKLQkJCQkJICAgIHVzYl9zbmRjdHJscGlwZShkZXZfaW5mby0+dWRldiwgMCksCi0JCQkJCSAgICAweDEyLCAoMHgwMiA8PCA1KSwgMCwgMCwKLQkJCQkJICAgIGRldl9pbmZvLT5idWYsIDE2LCAwKTsKLQkJCXByaW50aygicmV0IGNvbnRyb2wgbXNnIDEgKFNURF9DSEFOTkVMKTogJWRcbiIsIHJldCk7Ci0KLQkJCS8qIHNldCByZWdpc3RlcnMgKi8KLQkJCWJ1ZnB0ciA9IGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZnB0ciwgMHhGRiwgMHgwMCk7Ci0KLQkJCS8qIHNldCBjb2xvciBkZXB0aCAqLwotCQkJYnVmcHRyID0gZGxmYl9zZXRfcmVnaXN0ZXIoYnVmcHRyLCAweDAwLCAweDAwKTsKLQotCQkJLyogc2V0IGFkZHJlc3NlcyAqLwotCQkJYnVmcHRyID0KLQkJCSAgICBkbGZiX3NldF9yZWdpc3RlcihidWZwdHIsIDB4MjAsCi0JCQkJCSAgICAgIChjaGFyKShkZXZfaW5mby0+YmFzZTE2ID4+IDE2KSk7Ci0JCQlidWZwdHIgPQotCQkJICAgIGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZnB0ciwgMHgyMSwKLQkJCQkJICAgICAgKGNoYXIpKGRldl9pbmZvLT5iYXNlMTYgPj4gOCkpOwotCQkJYnVmcHRyID0KLQkJCSAgICBkbGZiX3NldF9yZWdpc3RlcihidWZwdHIsIDB4MjIsCi0JCQkJCSAgICAgIChjaGFyKShkZXZfaW5mby0+YmFzZTE2KSk7Ci0KLQkJCWJ1ZnB0ciA9Ci0JCQkgICAgZGxmYl9zZXRfcmVnaXN0ZXIoYnVmcHRyLCAweDI2LAotCQkJCQkgICAgICAoY2hhcikoZGV2X2luZm8tPmJhc2U4ID4+IDE2KSk7Ci0JCQlidWZwdHIgPQotCQkJICAgIGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZnB0ciwgMHgyNywKLQkJCQkJICAgICAgKGNoYXIpKGRldl9pbmZvLT5iYXNlOCA+PiA4KSk7Ci0JCQlidWZwdHIgPQotCQkJICAgIGRsZmJfc2V0X3JlZ2lzdGVyKGJ1ZnB0ciwgMHgyOCwKLQkJCQkJICAgICAgKGNoYXIpKGRldl9pbmZvLT5iYXNlOCkpOwotCi0JCQkvKiBzZXQgdmlkZW8gbW9kZSAqLwotCQkJdmRhdGEgPSAodWludDhfdCAqKSZkbGZiX3ZpZGVvX21vZGVzW2ldOwotCQkJZm9yIChqID0gMDsgaiA8IDI5OyBqKyspCi0JCQkJYnVmcHRyID0gZGxmYl9zZXRfcmVnaXN0ZXIoYnVmcHRyLCBqLCB2ZGF0YVtqXSk7Ci0KLQkJCS8qIGJsYW5rICovCi0JCQlidWZwdHIgPSBkbGZiX3NldF9yZWdpc3RlcihidWZwdHIsIDB4MUYsIDB4MDApOwotCi0JCQkvKiBlbmQgcmVnaXN0ZXJzICovCi0JCQlidWZwdHIgPSBkbGZiX3NldF9yZWdpc3RlcihidWZwdHIsIDB4RkYsIDB4RkYpOwotCi0JCQkvKiBzZW5kICovCi0JCQlyZXQgPSBkbGZiX2J1bGtfbXNnKGRldl9pbmZvLCBidWZwdHIgLSBkZXZfaW5mby0+YnVmKTsKLQkJCXByaW50aygicmV0IGJ1bGsgMjogJWQgJXRkXG4iLCByZXQsCi0JCQkgICAgICAgYnVmcHRyIC0gZGV2X2luZm8tPmJ1Zik7Ci0KLQkJCS8qIGZsdXNoICovCi0JCQlyZXQgPSBkbGZiX2J1bGtfbXNnKGRldl9pbmZvLCAwKTsKLQkJCXByaW50aygicmV0IGJ1bGsgMzogJWRcbiIsIHJldCk7Ci0KLQkJCWRldl9pbmZvLT5zY3JlZW5fc2l6ZSA9IHdpZHRoICogaGVpZ2h0ICogKEZCX0JQUCAvIDgpOwotCQkJZGV2X2luZm8tPmxpbmVfbGVuZ3RoID0gd2lkdGggKiAoRkJfQlBQIC8gOCk7Ci0KLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCi0JcmV0dXJuIC0xOwotfQotCisjZGVmaW5lIGRsX2Vycihmb3JtYXQsIGFyZy4uLikgXAorCWRldl9lcnIoZGV2LT5nZGV2LCAiZGxmYjogIiBmb3JtYXQsICMjIGFyZykKKyNkZWZpbmUgZGxfd2Fybihmb3JtYXQsIGFyZy4uLikgXAorCWRldl93YXJuKGRldi0+Z2RldiwgImRsZmI6ICIgZm9ybWF0LCAjIyBhcmcpCisjZGVmaW5lIGRsX25vdGljZShmb3JtYXQsIGFyZy4uLikgXAorCWRldl9ub3RpY2UoZGV2LT5nZGV2LCAiZGxmYjogIiBmb3JtYXQsICMjIGFyZykKKyNkZWZpbmUgZGxfaW5mbyhmb3JtYXQsIGFyZy4uLikgXAorCWRldl9pbmZvKGRldi0+Z2RldiwgImRsZmI6ICIgZm9ybWF0LCAjIyBhcmcpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL0tjb25maWcKaW5kZXggMzUwZDVkNi4uMmMxZDEwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL0tjb25maWcKQEAgLTM0LDMgKzM0LDEwIEBACiAKIAkgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1c2JpcC4KKworY29uZmlnIFVTQl9JUF9ERUJVR19FTkFCTEUKKwlib29sICJVU0ItSVAgRGVidWcgRW5hYmxlIgorCWRlcGVuZHMgb24gVVNCX0lQX0NPTU1PTgorCWRlZmF1bHQgTgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgZW5hYmxlcyB0aGUgZGVidWcgbWVzc2FnZXMgZnJvbSB0aGUgVVNCLUlQIGRyaXZlcnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvTWFrZWZpbGUKaW5kZXggMTc5ZjQyMS4uNmYyOTE2YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3VzYmlwL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC9NYWtlZmlsZQpAQCAtNyw2ICs3LDYgQEAKIG9iai0kKENPTkZJR19VU0JfSVBfSE9TVCkgKz0gdXNiaXAubwogdXNiaXAtb2JqcyA6PSBzdHViX2Rldi5vIHN0dWJfbWFpbi5vIHN0dWJfcngubyBzdHViX3R4Lm8KIAotaWZlcSAoJChDT05GSUdfVVNCX0RFQlVHKSx5KQoraWZlcSAoJChDT05GSUdfVVNCX0lQX0RFQlVHX0VOQUJMRSkseSkKIAlFWFRSQV9DRkxBR1MgKz0gLURERUJVRwogZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uYyBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uYwppbmRleCBkZGI2ZjVmLi43YTQ1ZGE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5jCkBAIC0zMyw3ICszMyw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogZGVidWcgcm91dGluZXMgKi8KIAotI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKyNpZmRlZiBDT05GSUdfVVNCX0lQX0RFQlVHX0VOQUJMRQogdW5zaWduZWQgbG9uZyB1c2JpcF9kZWJ1Z19mbGFnID0gMHhmZmZmZmZmZjsKICNlbHNlCiB1bnNpZ25lZCBsb25nIHVzYmlwX2RlYnVnX2ZsYWc7CkBAIC01NSwxMCArNTUsNyBAQAogc3RhdGljIHNzaXplX3Qgc3RvcmVfZmxhZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWc7Ci0KLQlzc2NhbmYoYnVmLCAiJWx4IiwgJmZsYWcpOwotCXVzYmlwX2RlYnVnX2ZsYWcgPSBmbGFnOworCXNzY2FuZihidWYsICIlbHgiLCAmdXNiaXBfZGVidWdfZmxhZyk7CiAKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC02NiwzMyArNjMsOCBAQAogCiBzdGF0aWMgdm9pZCB1c2JpcF9kdW1wX2J1ZmZlcihjaGFyICpidWZmLCBpbnQgYnVmZmxlbikKIHsKLQlpbnQgaTsKLQotCWlmIChidWZmbGVuID4gMTI4KSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykgewotCQkJaWYgKGklMjQgPT0gMCkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiICAgIik7Ci0JCQlwcmludGsoS0VSTl9ERUJVRyAiJTAyeCAiLCAodW5zaWduZWQgY2hhcikgYnVmZltpXSk7Ci0JCQlpZiAoaSU0ID09IDMpCi0JCQkJcHJpbnRrKEtFUk5fREVCVUcgInwgIik7Ci0JCQlpZiAoaSUyNCA9PSAyMykKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiXG4iKTsKLQkJfQotCQlwcmludGsoS0VSTl9ERUJVRyAiLi4uICglZCBieXRlKVxuIiwgYnVmZmxlbik7Ci0JCXJldHVybjsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYnVmZmxlbjsgaSsrKSB7Ci0JCWlmIChpJTI0ID09IDApCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiICAgIik7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlMDJ4ICIsICh1bnNpZ25lZCBjaGFyKSBidWZmW2ldKTsKLQkJaWYgKGklNCA9PSAzKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgInwgIik7Ci0JCWlmIChpJTI0ID09IDIzKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIlxuIik7Ci0JfQotCXByaW50ayhLRVJOX0RFQlVHICJcbiIpOwotCisJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgInVzYi1pcCIsIERVTVBfUFJFRklYX09GRlNFVCwgMTYsIDQsCisJCSAgICAgICBidWZmLCBidWZmbGVuLCBmYWxzZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHVzYmlwX2R1bXBfcGlwZSh1bnNpZ25lZCBpbnQgcCkKQEAgLTU1OCw2MCArNTMwLDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYmlwX3htaXQpOwogCi0KLS8qIG5vdyBhIHVzcmxhbmQgdXRpbGl0eSBzaG91bGQgc2V0IG9wdGlvbnMuICovCi0jaWYgMAotaW50IHNldHF1aWNrYWNrKHN0cnVjdCBzb2NrZXQgKnNvY2tldCkKLXsKLQltbV9zZWdtZW50X3Qgb2xkZnM7Ci0JaW50IHZhbCA9IDE7Ci0JaW50IHJldDsKLQotCW9sZGZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKGdldF9kcygpKTsKLQlyZXQgPSBzb2NrZXQtPm9wcy0+c2V0c29ja29wdChzb2NrZXQsIFNPTF9UQ1AsIFRDUF9RVUlDS0FDSywKLQkJCShjaGFyIF9fdXNlciAqKSAmdmFsLCBzaXplb2YocmV0KSk7Ci0Jc2V0X2ZzKG9sZGZzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWludCBzZXRub2RlbGF5KHN0cnVjdCBzb2NrZXQgKnNvY2tldCkKLXsKLQltbV9zZWdtZW50X3Qgb2xkZnM7Ci0JaW50IHZhbCA9IDE7Ci0JaW50IHJldDsKLQotCW9sZGZzID0gZ2V0X2ZzKCk7Ci0Jc2V0X2ZzKGdldF9kcygpKTsKLQlyZXQgPSBzb2NrZXQtPm9wcy0+c2V0c29ja29wdChzb2NrZXQsIFNPTF9UQ1AsIFRDUF9OT0RFTEFZLAotCQkJKGNoYXIgX191c2VyICopICZ2YWwsIHNpemVvZihyZXQpKTsKLQlzZXRfZnMob2xkZnMpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotaW50IHNldGtlZXBhbGl2ZShzdHJ1Y3Qgc29ja2V0ICpzb2NrZXQpCi17Ci0JbW1fc2VnbWVudF90IG9sZGZzOwotCWludCB2YWwgPSAxOwotCWludCByZXQ7Ci0KLQlvbGRmcyA9IGdldF9mcygpOwotCXNldF9mcyhnZXRfZHMoKSk7Ci0JcmV0ID0gc29ja2V0LT5vcHMtPnNldHNvY2tvcHQoc29ja2V0LCBTT0xfU09DS0VULCBTT19LRUVQQUxJVkUsCi0JCQkoY2hhciBfX3VzZXIgKikgJnZhbCwgc2l6ZW9mKHJldCkpOwotCXNldF9mcyhvbGRmcyk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi12b2lkIHNldHJldXNlKHN0cnVjdCBzb2NrZXQgKnNvY2tldCkKLXsKLQlzb2NrZXQtPnNrLT5za19yZXVzZSA9IDE7Ci19Ci0jZW5kaWYKLQogc3RydWN0IHNvY2tldCAqc29ja2ZkX3RvX3NvY2tldCh1bnNpZ25lZCBpbnQgc29ja2ZkKQogewogCXN0cnVjdCBzb2NrZXQgKnNvY2tldDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uaCBiL2RyaXZlcnMvc3RhZ2luZy91c2JpcC91c2JpcF9jb21tb24uaAppbmRleCAxY2EzZWFiLi42ZjFkY2IxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdXNiaXBfY29tbW9uLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3VzYmlwX2NvbW1vbi5oCkBAIC0zMywxMiArMzMsMTIgQEAKICAqLwogCiAvKioKLSAqIHVzYmlwX3VkYmcgLSBwcmludCBkZWJ1ZyBtZXNzYWdlcyBpZiBDT05GSUdfVVNCX0RFQlVHIGlzIGRlZmluZWQKKyAqIHVzYmlwX3VkYmcgLSBwcmludCBkZWJ1ZyBtZXNzYWdlcyBpZiBDT05GSUdfVVNCX0lQX0RFQlVHX0VOQUJMRSBpcyBkZWZpbmVkCiAgKiBAZm10OgogICogQGFyZ3M6CiAgKi8KIAotI2lmZGVmIENPTkZJR19VU0JfREVCVUcKKyNpZmRlZiBDT05GSUdfVVNCX0lQX0RFQlVHX0VOQUJMRQogCiAjZGVmaW5lIHVzYmlwX3VkYmcoZm10LCBhcmdzLi4uKQkJCQkJXAogCWRvIHsJCQkJCQkJCVwKQEAgLTQ3LDExICs0NywxMSBAQAogCQkJX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywgIyNhcmdzKTsJCVwKIAl9IHdoaWxlICgwKQogCi0jZWxzZSAgLyogQ09ORklHX1VTQl9ERUJVRyAqLworI2Vsc2UgIC8qIENPTkZJR19VU0JfSVBfREVCVUdfRU5BQkxFICovCiAKICNkZWZpbmUgdXNiaXBfdWRiZyhmbXQsIGFyZ3MuLi4pCQlkbyB7IH0gd2hpbGUgKDApCiAKLSNlbmRpZiAvKiBDT05GSUdfVVNCX0RFQlVHICovCisjZW5kaWYgLyogQ09ORklHX1VTQl9JUF9ERUJVR19FTkFCTEUgKi8KIAogCiBlbnVtIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3N5c2ZzLmMgYi9kcml2ZXJzL3N0YWdpbmcvdXNiaXAvdmhjaV9zeXNmcy5jCmluZGV4IGQ4OTkyZDEuLmY2ZTM0ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy91c2JpcC92aGNpX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3VzYmlwL3ZoY2lfc3lzZnMuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJY2FzZSBVU0JfU1BFRURfTE9XOgogCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CiAJY2FzZSBVU0JfU1BFRURfSElHSDoKLQljYXNlIFVTQl9TUEVFRF9WQVJJQUJMRToKKwljYXNlIFVTQl9TUEVFRF9XSVJFTEVTUzoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJdXNiaXBfdWVycigic3BlZWQgJWRcbiIsIHNwZWVkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvS2NvbmZpZwppbmRleCBhZTYyOGE1Li42NDExYWU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL0tjb25maWcKKysrIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9LY29uZmlnCkBAIC0xNCw0ICsxNCw2IEBACiAKIHNvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3ZtZS9kZXZpY2VzL0tjb25maWciCiAKK3NvdXJjZSAiZHJpdmVycy9zdGFnaW5nL3ZtZS9ib2FyZHMvS2NvbmZpZyIKKwogZW5kaWYgIyBWTUUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL01ha2VmaWxlCmluZGV4IDhjM2I5MGUuLmI0ZWEzZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92bWUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9NYWtlZmlsZQpAQCAtNSwzICs1LDQgQEAKIAogb2JqLXkJCQkJKz0gYnJpZGdlcy8KIG9iai15CQkJCSs9IGRldmljZXMvCitvYmoteQkJCQkrPSBib2FyZHMvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL1RPRE8gYi9kcml2ZXJzL3N0YWdpbmcvdm1lL1RPRE8KaW5kZXggMjIwMWZmNi4uODJjMjIyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9UT0RPCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvVE9ETwpAQCAtNCwyOCArNCw2IEBACiBBUEkKID09PQogCi1ETUEgUmVzb3VyY2UgQWxsb2NhdGlvbiBpbmNvbXBsZXRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVRoZSBjdXJyZW50IERNQSByZXNvdXJjZSBBbGxvY2F0aW9uIHByb3ZpZGVzIG5vIG1lYW5zIG9mIHNlbGVjdGluZyB0aGUKLXN1aXRhYmlsaXR5IG9mIGEgRE1BIGNvbnRyb2xsZXIgYmFzZWQgb24gaXQncyBzdXBwb3J0ZWQgbW9kZXMgb2Ygb3BlcmF0aW9uLCBhcwotb3Bwb3NlZCB0byB0aGUgcmVzb3VyY2UgYWxsb2NhdGlvbiBtZWNoYW5pc21zIGZvciBtYXN0ZXIgYW5kIHNsYXZlIHdpbmRvd3M6Ci0KLQlzdHJ1Y3Qgdm1lX3Jlc291cmNlICp2bWVfZG1hX3JlcXVlc3Qoc3RydWN0IGRldmljZSAqZGV2KTsKLQotQXMgb3Bwb3NlZCB0bzoKLQotCXN0cnVjdCB2bWVfcmVzb3VyY2UgKiB2bWVfbWFzdGVyX3JlcXVlc3Qoc3RydWN0IGRldmljZSAqZGV2LAotCQl2bWVfYWRkcmVzc190IGFzcGFjZSwgdm1lX2N5Y2xlX3QgY3ljbGUsIHZtZV93aWR0aF90IHdpZHRoKTsKLQotVGhlIFRTSTE0OCBjYW4gcGVyZm9ybSwgVk1FLXRvLVBDSSwgUENJLXRvLVZNRSwgUEFUVEVSTi10by1WTUUsIFBBVFRFUk4tdG8tUENJLAotVk1FLXRvLVZNRSBhbmQgUENJLXRvLVBDSSB0cmFuc2ZlcnMuIFRoZSBDQTkxQzE0MiBjYW4gb25seSBwcm92aWRlIFZNRS10by1QQ0kKLWFuZCBQQ0ktdG8tVk1FLgotCi1BZGQgYSBtZWNoYW5pc20gdG8gc2VsZWN0IGEgVk1FIGNvbnRyb2xsZXIgYmFzZWQgb24gc291cmNlL3RhcmdldCB0eXBlLAotcmVxdWlyZWQgYXNwYWNlLCBjeWNsZSBhbmQgd2lkdGggcmVxdWlyZW1lbnRzLgotCi0KIE1hc3RlciB3aW5kb3cgYnJvYWRjYXN0IHNlbGVjdCBtYXNrCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCkBAIC01OSw3ICszNyw2IEBACiBDb3JlCiA9PT09CiAKLS0gUmVuYW1lIHZtZV9tYXN0ZXJfcmVzb3VyY2UncyAicGNpX3Jlc291cmNlIiB0byBiZSBidXMgYWdub3N0aWMuCiAtIEltcHJvdmUgZ2VuZXJpYyBzYW5pdHkgY2hlY2tzIChTdWNoIGFzIGRvZXMgYW4gb2Zmc2V0IGFuZCBzaXplIGZpdCB3aXRoaW4gYQogICB3aW5kb3cgYW5kIHBhcmFtZXRlciBjaGVja2luZykuCiAKQEAgLTY5LDcgKzQ2LDYgQEAKIFRlbXBlICh0c2kxNDgpCiAtLS0tLS0tLS0tLS0tLQogCi0tIERyaXZlciBjYW4gY3VycmVudGx5IG9ubHkgc3VwcG9ydCBhIHNpbmdsZSBicmlkZ2UuCiAtIDJlU1NUIEJyb2FkY2FzdCBtb2RlLgogLSBNYWlsYm94ZXMgdW5zdXBwb3J0ZWQuCiAtIEltcHJvdmUgZXJyb3IgZGV0ZWN0aW9uLgpAQCAtODAsMTAgKzU2LDYgQEAKIFVuaXZlcnNlIElJIChjYTkxYzE0MikKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotLSBEcml2ZXIgY2FuIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgYSBzaW5nbGUgYnJpZGdlLgotLSBETUEgdW5zdXBwb3J0ZWQuCi0tIFJNVyB0cmFuc2FjdGlvbnMgdW5zdXBwb3J0ZWQuCi0tIExvY2F0aW9uIE1vbml0b3JzIHVuc3VwcG9ydGVkLgogLSBNYWlsYm94ZXMgdW5zdXBwb3J0ZWQuCiAtIEVycm9yIERldGVjdGlvbi4KIC0gQ29udHJvbCBvZiBwcmVmZXRjaCBzaXplLCB0aHJlc2hvbGQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JvYXJkcy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9ib2FyZHMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjE2MzEzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9ib2FyZHMvS2NvbmZpZwpAQCAtMCwwICsxLDkgQEAKK2NvbW1lbnQgIlZNRSBCb2FyZCBEcml2ZXJzIgorCitjb25maWcgVk1JVk1FXzc4MDUKKwl0cmlzdGF0ZSAiVk1JVk1FLTc4MDUiCisJaGVscAorCSAgSWYgeW91IHNheSBZIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgVk1JVk1FLTc4MDUgYm9hcmQuCisJICBUaGlzIGJvYXJkIGhhcyBhbiBhZGRpdGlvbmFsIGNvbnRyb2wgaW50ZXJmYWNlIHRvIHRoZSBVbml2ZXJzZSBJSQorCSAgY2hpcC4gVGhpcyBkcml2ZXIgaGFzIHRvIGJlIGluY2x1ZGVkIGlmIHlvdSB3YW50IHRvIGFjY2VzcyBWTUUgYnVzCisJICB3aXRoIFZNSVZNRS03ODA1IGJvYXJkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9ib2FyZHMvTWFrZWZpbGUgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JvYXJkcy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzY1ODM0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9ib2FyZHMvTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgVk1FIGJvYXJkIGRyaXZlcnMuCisjCisKK29iai0kKENPTkZJR19WTUlWTUVfNzgwNSkJKz0gdm1lX3ZtaXZtZTc4MDUubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9ib2FyZHMvdm1lX3ZtaXZtZTc4MDUuYyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYm9hcmRzL3ZtZV92bWl2bWU3ODA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQzYzllZAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYm9hcmRzL3ZtZV92bWl2bWU3ODA1LmMKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBTdXBwb3J0IGZvciB0aGUgVk1JVk1FLTc4MDUgYm9hcmQgYWNjZXNzIHRvIHRoZSBVbml2ZXJzZSBJSSBicmlkZ2UuCisgKgorICogQXV0aG9yOiBBcnRodXIgQmVuaWxvdiA8YXJ0aHVyLmJlbmlsb3ZAaWJhLWdyb3VwLmNvbT4KKyAqIENvcHlyaWdodCAyMDEwIElvbiBCZWFtIEFwcGxpY2F0aW9uLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgInZtZV92bWl2bWU3ODA1LmgiCisKK3N0YXRpYyBpbnQgX19pbml0IHZtaWNfaW5pdCh2b2lkKTsKK3N0YXRpYyBpbnQgdm1pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqLCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqKTsKK3N0YXRpYyB2b2lkIHZtaWNfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICopOworc3RhdGljIHZvaWQgX19leGl0IHZtaWNfZXhpdCh2b2lkKTsKKworLyoqIEJhc2UgYWRkcmVzcyB0byBhY2Nlc3MgRlBHQSByZWdpc3RlciAqLworc3RhdGljIHZvaWQgKnZtaWNfYmFzZTsKKworc3RhdGljIGNoYXIgZHJpdmVyX25hbWVbXSA9ICJ2bWl2bWVfNzgwNSI7CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCB2bWljX2lkc1tdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZNSUMsIFBDSV9ERVZJQ0VfSURfVlRJTVIpIH0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHZtaWNfZHJpdmVyID0geworCS5uYW1lID0gZHJpdmVyX25hbWUsCisJLmlkX3RhYmxlID0gdm1pY19pZHMsCisJLnByb2JlID0gdm1pY19wcm9iZSwKKwkucmVtb3ZlID0gdm1pY19yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCB2bWljX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmdm1pY19kcml2ZXIpOworfQorCitzdGF0aWMgaW50IHZtaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKK3sKKwlpbnQgcmV0dmFsOworCXUzMiBkYXRhOworCisJLyogRW5hYmxlIHRoZSBkZXZpY2UgKi8KKwlyZXR2YWwgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBlbmFibGUgZGV2aWNlXG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJLyogTWFwIFJlZ2lzdGVycyAqLworCXJldHZhbCA9IHBjaV9yZXF1ZXN0X3JlZ2lvbnMocGRldiwgZHJpdmVyX25hbWUpOworCWlmIChyZXR2YWwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlc2VydmUgcmVzb3VyY2VzXG4iKTsKKwkJZ290byBlcnJfcmVzb3VyY2U7CisJfQorCisJLyogTWFwIHJlZ2lzdGVycyBpbiBCQVIgMCAqLworCXZtaWNfYmFzZSA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksIDE2KTsKKwlpZiAoIXZtaWNfYmFzZSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gcmVtYXAgQ1JHIHJlZ2lvblxuIik7CisJCXJldHZhbCA9IC1FSU87CisJCWdvdG8gZXJyX3JlbWFwOworCX0KKworCS8qIENsZWFyIHRoZSBGUEdBIFZNRSBJRiBjb250ZW50cyAqLworCWlvd3JpdGUzMigwLCB2bWljX2Jhc2UgKyBWTUVfQ09OVFJPTCk7CisKKwkvKiBDbGVhciBhbnkgaW5pdGlhbCBCRVJSICAqLworCWRhdGEgPSBpb3JlYWQzMih2bWljX2Jhc2UgKyBWTUVfQ09OVFJPTCkgJiAweDAwMDAwRkZGOworCWRhdGEgfD0gQk1fVk1FX0NPTlRST0xfQkVSUlNUOworCWlvd3JpdGUzMihkYXRhLCB2bWljX2Jhc2UgKyBWTUVfQ09OVFJPTCk7CisKKwkvKiBFbmFibGUgdGhlIHZtZSBpbnRlcmZhY2UgYW5kIGJ5dGUgc3dhcHBpbmcgKi8KKwlkYXRhID0gaW9yZWFkMzIodm1pY19iYXNlICsgVk1FX0NPTlRST0wpICYgMHgwMDAwMEZGRjsKKwlkYXRhID0gZGF0YSB8IEJNX1ZNRV9DT05UUk9MX01BU1RFUl9FTkRJQU4gfAorCQkJQk1fVk1FX0NPTlRST0xfU0xBVkVfRU5ESUFOIHwKKwkJCUJNX1ZNRV9DT05UUk9MX0FCTEUgfAorCQkJQk1fVk1FX0NPTlRST0xfQkVSUkkgfAorCQkJQk1fVk1FX0NPTlRST0xfQlBFTkEgfAorCQkJQk1fVk1FX0NPTlRST0xfVkJFTkE7CisJaW93cml0ZTMyKGRhdGEsIHZtaWNfYmFzZSArIFZNRV9DT05UUk9MKTsKKworCXJldHVybiAwOworCitlcnJfcmVtYXA6CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKK2Vycl9yZXNvdXJjZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CitlcnI6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgdm1pY19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW91bm1hcCh2bWljX2Jhc2UpOworCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworCit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2bWljX2V4aXQodm9pZCkKK3sKKwlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJnZtaWNfZHJpdmVyKTsKK30KKworTU9EVUxFX0RFU0NSSVBUSU9OKCJWTUlWTUUtNzgwNSBib2FyZCBzdXBwb3J0IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQXJ0aHVyIEJlbmlsb3YgPGFydGh1ci5iZW5pbG92QGliYS1ncm91cC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KHZtaWNfaW5pdCk7Cittb2R1bGVfZXhpdCh2bWljX2V4aXQpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JvYXJkcy92bWVfdm1pdm1lNzgwNS5oIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9ib2FyZHMvdm1lX3ZtaXZtZTc4MDUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGMyYzQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9ib2FyZHMvdm1lX3ZtaXZtZTc4MDUuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogdm1pdm1lXzc4MDUuaAorICoKKyAqIFN1cHBvcnQgZm9yIHRoZSBWTUlWTUUtNzgwNSBib2FyZCBhY2Nlc3MgdG8gdGhlIFVuaXZlcnNlIElJIGJyaWRnZS4KKyAqCisgKiBBdXRob3I6IEFydGh1ciBCZW5pbG92IDxhcnRodXIuYmVuaWxvdkBpYmEtZ3JvdXAuY29tPgorICogQ29weXJpZ2h0IDIwMTAgSW9uIEJlYW0gQXBwbGljYXRpb24sIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKworI2lmbmRlZiBfVk1JVk1FXzc4MDVfSAorI2RlZmluZSBfVk1JVk1FXzc4MDVfSAorCisjaWZuZGVmIFBDSV9WRU5ET1JfSURfVk1JQworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1ZNSUMJCTB4MTE0QQorI2VuZGlmCisKKyNpZm5kZWYgUENJX0RFVklDRV9JRF9WVElNUgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZUSU1SCQkweDAwMDQKKyNlbmRpZgorCisjZGVmaW5lIFZNRV9DT05UUk9MCQkJMHgwMDAwCisjZGVmaW5lIEJNX1ZNRV9DT05UUk9MX01BU1RFUl9FTkRJQU4JMHgwMDAxCisjZGVmaW5lIEJNX1ZNRV9DT05UUk9MX1NMQVZFX0VORElBTgkweDAwMDIKKyNkZWZpbmUgQk1fVk1FX0NPTlRST0xfQUJMRQkJMHgwMDA0CisjZGVmaW5lIEJNX1ZNRV9DT05UUk9MX0JFUlJJCQkweDAwNDAKKyNkZWZpbmUgQk1fVk1FX0NPTlRST0xfQkVSUlNUCQkweDAwODAKKyNkZWZpbmUgQk1fVk1FX0NPTlRST0xfQlBFTkEJCTB4MDQwMAorI2RlZmluZSBCTV9WTUVfQ09OVFJPTF9WQkVOQQkJMHgwODAwCisKKyNlbmRpZiAvKiBfVk1JVk1FXzc4MDVfSCAqLworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvS2NvbmZpZyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy9LY29uZmlnCmluZGV4IDAyM2NjZWIuLjkzMzEwNjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy9LY29uZmlnCkBAIC0yLDEyICsyLDE0IEBACiAKIGNvbmZpZyBWTUVfQ0E5MUNYNDIKIAl0cmlzdGF0ZSAiVW5pdmVyc2UgSUkiCisJZGVwZW5kcyBvbiBWSVJUX1RPX0JVUwogCWhlbHAKIAkgSWYgeW91IHNheSBZIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgVHVuZHJhIENBOTFDMTQyCiAJIChVbml2ZXJzZSBJSSkgVk1FIGJyaWRnZSBjaGlwLgogCiBjb25maWcgVk1FX1RTSTE0OAogCXRyaXN0YXRlICJUZW1wZSIKKwlkZXBlbmRzIG9uIFZJUlRfVE9fQlVTCiAJaGVscAogCSBJZiB5b3Ugc2F5IFkgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBUdW5kcmEgVFNJMTQ4IFZNRSBicmlkZ2UKIAkgY2hpcC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfY2E5MWN4NDIuYyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfY2E5MWN4NDIuYwppbmRleCAxY2YzZTkxLi4yNzk1ZmYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV9jYTkxY3g0Mi5jCkBAIC0xLDggKzEsOCBAQAogLyoKICAqIFN1cHBvcnQgZm9yIHRoZSBUdW5kcmEgVW5pdmVyc2UgSS9JSSBWTUUtUENJIEJyaWRnZSBDaGlwcwogICoKLSAqIEF1dGhvcjogTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2VmYW51Yy5jb20+Ci0gKiBDb3B5cmlnaHQgMjAwOCBHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgRW1iZWRkZWQgU3lzdGVtcywgSW5jLgorICogQXV0aG9yOiBNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZS5jb20+CisgKiBDb3B5cmlnaHQgMjAwOCBHRSBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgRW1iZWRkZWQgU3lzdGVtcywgSW5jLgogICoKICAqIEJhc2VkIG9uIHdvcmsgYnkgVG9tIEFybWlzdGVhZCBhbmQgQWppdCBQcmVtCiAgKiBDb3B5cmlnaHQgMjAwNCBNb3Rvcm9sYSBJbmMuCkBAIC0zOCwyNSArMzgsMTIgQEAKIHN0YXRpYyB2b2lkIGNhOTFjeDQyX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqKTsKIHN0YXRpYyB2b2lkIF9fZXhpdCBjYTkxY3g0Ml9leGl0KHZvaWQpOwogCi1zdHJ1Y3Qgdm1lX2JyaWRnZSAqY2E5MWN4NDJfYnJpZGdlOwotd2FpdF9xdWV1ZV9oZWFkX3QgZG1hX3F1ZXVlOwotd2FpdF9xdWV1ZV9oZWFkX3QgaWFja19xdWV1ZTsKLXdhaXRfcXVldWVfaGVhZF90IGxtX3F1ZXVlOwotd2FpdF9xdWV1ZV9oZWFkX3QgbWJveF9xdWV1ZTsKLQotdm9pZCAoKmxtX2NhbGxiYWNrWzRdKShpbnQpOyAgICAvKiBDYWxsZWQgaW4gaW50ZXJydXB0IGhhbmRsZXIsIGJlIGNhcmVmdWwhICovCi12b2lkICpjcmNzcl9rZXJuZWw7Ci1kbWFfYWRkcl90IGNyY3NyX2J1czsKLQotc3RydWN0IG11dGV4IHZtZV9ybXc7ICAgLyogT25seSBvbmUgUk1XIGN5Y2xlIGF0IGEgdGltZSAqLwotc3RydWN0IG11dGV4IHZtZV9pbnQ7ICAgLyoKLQkJCSAqIE9ubHkgb25lIFZNRSBpbnRlcnJ1cHQgY2FuIGJlCi0JCQkgKiBnZW5lcmF0ZWQgYXQgYSB0aW1lLCBwcm92aWRlIGxvY2tpbmcKLQkJCSAqLworLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KK3N0YXRpYyBpbnQgZ2VvaWQ7CiAKIHN0YXRpYyBjaGFyIGRyaXZlcl9uYW1lW10gPSAidm1lX2NhOTFjeDQyIjsKIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNhOTFjeDQyX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIGNhOTFjeDQyX2lkc1tdID0gewogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1RVTkRSQSwgUENJX0RFVklDRV9JRF9UVU5EUkFfQ0E5MUMxNDIpIH0sCiAJeyB9LAogfTsKQEAgLTY4LDE0ICs1NSwxNCBAQAogCS5yZW1vdmUgPSBjYTkxY3g0Ml9yZW1vdmUsCiB9OwogCi1zdGF0aWMgdTMyIGNhOTFjeDQyX0RNQV9pcnFoYW5kbGVyKHZvaWQpCitzdGF0aWMgdTMyIGNhOTFjeDQyX0RNQV9pcnFoYW5kbGVyKHN0cnVjdCBjYTkxY3g0Ml9kcml2ZXIgKmJyaWRnZSkKIHsKLQl3YWtlX3VwKCZkbWFfcXVldWUpOworCXdha2VfdXAoJihicmlkZ2UtPmRtYV9xdWV1ZSkpOwogCiAJcmV0dXJuIENBOTFDWDQyX0xJTlRfRE1BOwogfQogCi1zdGF0aWMgdTMyIGNhOTFjeDQyX0xNX2lycWhhbmRsZXIodTMyIHN0YXQpCitzdGF0aWMgdTMyIGNhOTFjeDQyX0xNX2lycWhhbmRsZXIoc3RydWN0IGNhOTFjeDQyX2RyaXZlciAqYnJpZGdlLCB1MzIgc3RhdCkKIHsKIAlpbnQgaTsKIAl1MzIgc2VydmljZWQgPSAwOwpAQCAtODMsNyArNzAsNyBAQAogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJaWYgKHN0YXQgJiBDQTkxQ1g0Ml9MSU5UX0xNW2ldKSB7CiAJCQkvKiBXZSBvbmx5IGVuYWJsZSBpbnRlcnJ1cHRzIGlmIHRoZSBjYWxsYmFjayBpcyBzZXQgKi8KLQkJCWxtX2NhbGxiYWNrW2ldKGkpOworCQkJYnJpZGdlLT5sbV9jYWxsYmFja1tpXShpKTsKIAkJCXNlcnZpY2VkIHw9IENBOTFDWDQyX0xJTlRfTE1baV07CiAJCX0KIAl9CkBAIC05Miw0MCArNzksMjUgQEAKIH0KIAogLyogWFhYIFRoaXMgbmVlZHMgdG8gYmUgc3BsaXQgaW50byA0IHF1ZXVlcyAqLwotc3RhdGljIHUzMiBjYTkxY3g0Ml9NQl9pcnFoYW5kbGVyKGludCBtYm94X21hc2spCitzdGF0aWMgdTMyIGNhOTFjeDQyX01CX2lycWhhbmRsZXIoc3RydWN0IGNhOTFjeDQyX2RyaXZlciAqYnJpZGdlLCBpbnQgbWJveF9tYXNrKQogewotCXdha2VfdXAoJm1ib3hfcXVldWUpOworCXdha2VfdXAoJihicmlkZ2UtPm1ib3hfcXVldWUpKTsKIAogCXJldHVybiBDQTkxQ1g0Ml9MSU5UX01CT1g7CiB9CiAKLXN0YXRpYyB1MzIgY2E5MWN4NDJfSUFDS19pcnFoYW5kbGVyKHZvaWQpCitzdGF0aWMgdTMyIGNhOTFjeDQyX0lBQ0tfaXJxaGFuZGxlcihzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpicmlkZ2UpCiB7Ci0Jd2FrZV91cCgmaWFja19xdWV1ZSk7CisJd2FrZV91cCgmKGJyaWRnZS0+aWFja19xdWV1ZSkpOwogCiAJcmV0dXJuIENBOTFDWDQyX0xJTlRfU1dfSUFDSzsKIH0KIAotI2lmIDAKLWludCBjYTkxY3g0Ml9idXNfZXJyb3JfY2hrKGludCBjbHJmbGFnKQotewotCWludCB0bXA7Ci0JdG1wID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgUENJX0NPTU1BTkQpOwotCWlmICh0bXAgJiAweDA4MDAwMDAwKSB7CS8qIFNfVEEgaXMgU2V0ICovCi0JCWlmIChjbHJmbGFnKQotCQkJaW93cml0ZTMyKHRtcCB8IDB4MDgwMDAwMDAsCi0JCQkgICAgICAgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgUENJX0NPTU1BTkQpOwotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHUzMiBjYTkxY3g0Ml9WRVJSX2lycWhhbmRsZXIodm9pZCkKK3N0YXRpYyB1MzIgY2E5MWN4NDJfVkVSUl9pcnFoYW5kbGVyKHN0cnVjdCBjYTkxY3g0Ml9kcml2ZXIgKmJyaWRnZSkKIHsKIAlpbnQgdmFsOwogCi0JdmFsID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgREdDUyk7CisJdmFsID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgREdDUyk7CiAKIAlpZiAoISh2YWwgJiAweDAwMDAwODAwKSkgewogCQlwcmludGsoS0VSTl9FUlIgImNhOTFjMDQyOiBjYTkxY3g0Ml9WRVJSX2lycWhhbmRsZXIgRE1BIFJlYWQgIgpAQCAtMTM1LDExICsxMDcsMTEgQEAKIAlyZXR1cm4gQ0E5MUNYNDJfTElOVF9WRVJSOwogfQogCi1zdGF0aWMgdTMyIGNhOTFjeDQyX0xFUlJfaXJxaGFuZGxlcih2b2lkKQorc3RhdGljIHUzMiBjYTkxY3g0Ml9MRVJSX2lycWhhbmRsZXIoc3RydWN0IGNhOTFjeDQyX2RyaXZlciAqYnJpZGdlKQogewogCWludCB2YWw7CiAKLQl2YWwgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBER0NTKTsKKwl2YWwgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBER0NTKTsKIAogCWlmICghKHZhbCAmIDB4MDAwMDA4MDApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiY2E5MWMwNDI6IGNhOTFjeDQyX0xFUlJfaXJxaGFuZGxlciBETUEgUmVhZCAiCkBAIC0xNTEsMTMgKzEyMywxOCBAQAogfQogCiAKLXN0YXRpYyB1MzIgY2E5MWN4NDJfVklSUV9pcnFoYW5kbGVyKGludCBzdGF0KQorc3RhdGljIHUzMiBjYTkxY3g0Ml9WSVJRX2lycWhhbmRsZXIoc3RydWN0IHZtZV9icmlkZ2UgKmNhOTFjeDQyX2JyaWRnZSwKKwlpbnQgc3RhdCkKIHsKIAlpbnQgdmVjLCBpLCBzZXJ2aWNlZCA9IDA7CisJc3RydWN0IGNhOTFjeDQyX2RyaXZlciAqYnJpZGdlOworCisJYnJpZGdlID0gY2E5MWN4NDJfYnJpZGdlLT5kcml2ZXJfcHJpdjsKKwogCiAJZm9yIChpID0gNzsgaSA+IDA7IGktLSkgewogCQlpZiAoc3RhdCAmICgxIDw8IGkpKSB7Ci0JCQl2ZWMgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKworCQkJdmVjID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsKIAkJCQlDQTkxQ1g0Ml9WX1NUQVRJRFtpXSkgJiAweGZmOwogCiAJCQl2bWVfaXJxX2hhbmRsZXIoY2E5MWN4NDJfYnJpZGdlLCBpLCB2ZWMpOwpAQCAtMTY5LDE1ICsxNDYsMTggQEAKIAlyZXR1cm4gc2VydmljZWQ7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBjYTkxY3g0Ml9pcnFoYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBjYTkxY3g0Ml9pcnFoYW5kbGVyKGludCBpcnEsIHZvaWQgKnB0cikKIHsKIAl1MzIgc3RhdCwgZW5hYmxlLCBzZXJ2aWNlZCA9IDA7CisJc3RydWN0IHZtZV9icmlkZ2UgKmNhOTFjeDQyX2JyaWRnZTsKKwlzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpicmlkZ2U7CiAKLQlpZiAoZGV2X2lkICE9IGNhOTFjeDQyX2JyaWRnZS0+YmFzZSkKLQkJcmV0dXJuIElSUV9OT05FOworCWNhOTFjeDQyX2JyaWRnZSA9IHB0cjsKIAotCWVuYWJsZSA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIExJTlRfRU4pOwotCXN0YXQgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBMSU5UX1NUQVQpOworCWJyaWRnZSA9IGNhOTFjeDQyX2JyaWRnZS0+ZHJpdmVyX3ByaXY7CisKKwllbmFibGUgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBMSU5UX0VOKTsKKwlzdGF0ID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgTElOVF9TVEFUKTsKIAogCS8qIE9ubHkgbG9vayBhdCB1bm1hc2tlZCBpbnRlcnJ1cHRzICovCiAJc3RhdCAmPSBlbmFibGU7CkBAIC0xODYsNDIgKzE2Niw0NSBAQAogCQlyZXR1cm4gSVJRX05PTkU7CiAKIAlpZiAoc3RhdCAmIENBOTFDWDQyX0xJTlRfRE1BKQotCQlzZXJ2aWNlZCB8PSBjYTkxY3g0Ml9ETUFfaXJxaGFuZGxlcigpOworCQlzZXJ2aWNlZCB8PSBjYTkxY3g0Ml9ETUFfaXJxaGFuZGxlcihicmlkZ2UpOwogCWlmIChzdGF0ICYgKENBOTFDWDQyX0xJTlRfTE0wIHwgQ0E5MUNYNDJfTElOVF9MTTEgfCBDQTkxQ1g0Ml9MSU5UX0xNMiB8CiAJCQlDQTkxQ1g0Ml9MSU5UX0xNMykpCi0JCXNlcnZpY2VkIHw9IGNhOTFjeDQyX0xNX2lycWhhbmRsZXIoc3RhdCk7CisJCXNlcnZpY2VkIHw9IGNhOTFjeDQyX0xNX2lycWhhbmRsZXIoYnJpZGdlLCBzdGF0KTsKIAlpZiAoc3RhdCAmIENBOTFDWDQyX0xJTlRfTUJPWCkKLQkJc2VydmljZWQgfD0gY2E5MWN4NDJfTUJfaXJxaGFuZGxlcihzdGF0KTsKKwkJc2VydmljZWQgfD0gY2E5MWN4NDJfTUJfaXJxaGFuZGxlcihicmlkZ2UsIHN0YXQpOwogCWlmIChzdGF0ICYgQ0E5MUNYNDJfTElOVF9TV19JQUNLKQotCQlzZXJ2aWNlZCB8PSBjYTkxY3g0Ml9JQUNLX2lycWhhbmRsZXIoKTsKKwkJc2VydmljZWQgfD0gY2E5MWN4NDJfSUFDS19pcnFoYW5kbGVyKGJyaWRnZSk7CiAJaWYgKHN0YXQgJiBDQTkxQ1g0Ml9MSU5UX1ZFUlIpCi0JCXNlcnZpY2VkIHw9IGNhOTFjeDQyX1ZFUlJfaXJxaGFuZGxlcigpOworCQlzZXJ2aWNlZCB8PSBjYTkxY3g0Ml9WRVJSX2lycWhhbmRsZXIoYnJpZGdlKTsKIAlpZiAoc3RhdCAmIENBOTFDWDQyX0xJTlRfTEVSUikKLQkJc2VydmljZWQgfD0gY2E5MWN4NDJfTEVSUl9pcnFoYW5kbGVyKCk7CisJCXNlcnZpY2VkIHw9IGNhOTFjeDQyX0xFUlJfaXJxaGFuZGxlcihicmlkZ2UpOwogCWlmIChzdGF0ICYgKENBOTFDWDQyX0xJTlRfVklSUTEgfCBDQTkxQ1g0Ml9MSU5UX1ZJUlEyIHwKIAkJCUNBOTFDWDQyX0xJTlRfVklSUTMgfCBDQTkxQ1g0Ml9MSU5UX1ZJUlE0IHwKIAkJCUNBOTFDWDQyX0xJTlRfVklSUTUgfCBDQTkxQ1g0Ml9MSU5UX1ZJUlE2IHwKIAkJCUNBOTFDWDQyX0xJTlRfVklSUTcpKQotCQlzZXJ2aWNlZCB8PSBjYTkxY3g0Ml9WSVJRX2lycWhhbmRsZXIoc3RhdCk7CisJCXNlcnZpY2VkIHw9IGNhOTFjeDQyX1ZJUlFfaXJxaGFuZGxlcihjYTkxY3g0Ml9icmlkZ2UsIHN0YXQpOwogCiAJLyogQ2xlYXIgc2VydmljZWQgaW50ZXJydXB0cyAqLwotCWlvd3JpdGUzMihzdGF0LCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBMSU5UX1NUQVQpOworCWlvd3JpdGUzMihzdGF0LCBicmlkZ2UtPmJhc2UgKyBMSU5UX1NUQVQpOwogCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgaW50IGNhOTFjeDQyX2lycV9pbml0KHN0cnVjdCB2bWVfYnJpZGdlICpicmlkZ2UpCitzdGF0aWMgaW50IGNhOTFjeDQyX2lycV9pbml0KHN0cnVjdCB2bWVfYnJpZGdlICpjYTkxY3g0Ml9icmlkZ2UpCiB7CiAJaW50IHJlc3VsdCwgdG1wOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBjYTkxY3g0Ml9kcml2ZXIgKmJyaWRnZTsKKworCWJyaWRnZSA9IGNhOTFjeDQyX2JyaWRnZS0+ZHJpdmVyX3ByaXY7CiAKIAkvKiBOZWVkIHBkZXYgKi8KLQlwZGV2ID0gY29udGFpbmVyX29mKGJyaWRnZS0+cGFyZW50LCBzdHJ1Y3QgcGNpX2RldiwgZGV2KTsKKwlwZGV2ID0gY29udGFpbmVyX29mKGNhOTFjeDQyX2JyaWRnZS0+cGFyZW50LCBzdHJ1Y3QgcGNpX2RldiwgZGV2KTsKIAogCS8qIEluaXRpYWxpc2UgbGlzdCBmb3IgVk1FIGJ1cyBlcnJvcnMgKi8KLQlJTklUX0xJU1RfSEVBRCgmKGJyaWRnZS0+dm1lX2Vycm9ycykpOworCUlOSVRfTElTVF9IRUFEKCYoY2E5MWN4NDJfYnJpZGdlLT52bWVfZXJyb3JzKSk7CiAKLQltdXRleF9pbml0KCYoYnJpZGdlLT5pcnFfbXR4KSk7CisJbXV0ZXhfaW5pdCgmKGNhOTFjeDQyX2JyaWRnZS0+aXJxX210eCkpOwogCiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGZyb20gUENJIHRvIFZNRSAqLwogCWlvd3JpdGUzMigwLCBicmlkZ2UtPmJhc2UgKyBWSU5UX0VOKTsKQEAgLTIzMiw3ICsyMTUsNyBAQAogCWlvd3JpdGUzMigweDAwRkZGRkZGLCBicmlkZ2UtPmJhc2UgKyBMSU5UX1NUQVQpOwogCiAJcmVzdWx0ID0gcmVxdWVzdF9pcnEocGRldi0+aXJxLCBjYTkxY3g0Ml9pcnFoYW5kbGVyLCBJUlFGX1NIQVJFRCwKLQkJCWRyaXZlcl9uYW1lLCBwZGV2KTsKKwkJCWRyaXZlcl9uYW1lLCBjYTkxY3g0Ml9icmlkZ2UpOwogCWlmIChyZXN1bHQpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2FuJ3QgZ2V0IGFzc2lnbmVkIHBjaSBpcnEgdmVjdG9yICUwMlhcbiIsCiAJCSAgICAgICBwZGV2LT5pcnEpOwpAQCAtMjU0LDE1ICsyMzcsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY2E5MWN4NDJfaXJxX2V4aXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgdm9pZCBjYTkxY3g0Ml9pcnFfZXhpdChzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpicmlkZ2UsCisJc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJLyogRGlzYWJsZSBpbnRlcnJ1cHRzIGZyb20gUENJIHRvIFZNRSAqLwotCWlvd3JpdGUzMigwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBWSU5UX0VOKTsKKwlpb3dyaXRlMzIoMCwgYnJpZGdlLT5iYXNlICsgVklOVF9FTik7CiAKIAkvKiBEaXNhYmxlIFBDSSBpbnRlcnJ1cHRzICovCi0JaW93cml0ZTMyKDAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIExJTlRfRU4pOworCWlvd3JpdGUzMigwLCBicmlkZ2UtPmJhc2UgKyBMSU5UX0VOKTsKIAkvKiBDbGVhciBBbnkgUGVuZGluZyBQQ0kgSW50ZXJydXB0cyAqLwotCWlvd3JpdGUzMigweDAwRkZGRkZGLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBMSU5UX1NUQVQpOworCWlvd3JpdGUzMigweDAwRkZGRkZGLCBicmlkZ2UtPmJhc2UgKyBMSU5UX1NUQVQpOwogCiAJZnJlZV9pcnEocGRldi0+aXJxLCBwZGV2KTsKIH0KQEAgLTI3MCwyMSArMjU0LDI1IEBACiAvKgogICogU2V0IHVwIGFuIFZNRSBpbnRlcnJ1cHQKICAqLwotdm9pZCBjYTkxY3g0Ml9pcnFfc2V0KGludCBsZXZlbCwgaW50IHN0YXRlLCBpbnQgc3luYykKK3ZvaWQgY2E5MWN4NDJfaXJxX3NldChzdHJ1Y3Qgdm1lX2JyaWRnZSAqY2E5MWN4NDJfYnJpZGdlLCBpbnQgbGV2ZWwsIGludCBzdGF0ZSwKKwlpbnQgc3luYykKIAogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXUzMiB0bXA7CisJc3RydWN0IGNhOTFjeDQyX2RyaXZlciAqYnJpZGdlOworCisJYnJpZGdlID0gY2E5MWN4NDJfYnJpZGdlLT5kcml2ZXJfcHJpdjsKIAogCS8qIEVuYWJsZSBJUlEgbGV2ZWwgKi8KLQl0bXAgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBMSU5UX0VOKTsKKwl0bXAgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBMSU5UX0VOKTsKIAogCWlmIChzdGF0ZSA9PSAwKQogCQl0bXAgJj0gfkNBOTFDWDQyX0xJTlRfVklSUVtsZXZlbF07CiAJZWxzZQogCQl0bXAgfD0gQ0E5MUNYNDJfTElOVF9WSVJRW2xldmVsXTsKIAotCWlvd3JpdGUzMih0bXAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIExJTlRfRU4pOworCWlvd3JpdGUzMih0bXAsIGJyaWRnZS0+YmFzZSArIExJTlRfRU4pOwogCiAJaWYgKChzdGF0ZSA9PSAwKSAmJiAoc3luYyAhPSAwKSkgewogCQlwZGV2ID0gY29udGFpbmVyX29mKGNhOTFjeDQyX2JyaWRnZS0+cGFyZW50LCBzdHJ1Y3QgcGNpX2RldiwKQEAgLTI5NCwzNCArMjgyLDM4IEBACiAJfQogfQogCi1pbnQgY2E5MWN4NDJfaXJxX2dlbmVyYXRlKGludCBsZXZlbCwgaW50IHN0YXRpZCkKK2ludCBjYTkxY3g0Ml9pcnFfZ2VuZXJhdGUoc3RydWN0IHZtZV9icmlkZ2UgKmNhOTFjeDQyX2JyaWRnZSwgaW50IGxldmVsLAorCWludCBzdGF0aWQpCiB7CiAJdTMyIHRtcDsKKwlzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpicmlkZ2U7CisKKwlicmlkZ2UgPSBjYTkxY3g0Ml9icmlkZ2UtPmRyaXZlcl9wcml2OwogCiAJLyogVW5pdmVyc2UgY2FuIG9ubHkgZ2VuZXJhdGUgZXZlbiB2ZWN0b3JzICovCiAJaWYgKHN0YXRpZCAmIDEpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbXV0ZXhfbG9jaygmKHZtZV9pbnQpKTsKKwltdXRleF9sb2NrKCYoYnJpZGdlLT52bWVfaW50KSk7CiAKLQl0bXAgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBWSU5UX0VOKTsKKwl0bXAgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBWSU5UX0VOKTsKIAogCS8qIFNldCBTdGF0dXMvSUQgKi8KLQlpb3dyaXRlMzIoc3RhdGlkIDw8IDI0LCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBTVEFUSUQpOworCWlvd3JpdGUzMihzdGF0aWQgPDwgMjQsIGJyaWRnZS0+YmFzZSArIFNUQVRJRCk7CiAKIAkvKiBBc3NlcnQgVk1FYnVzIElSUSAqLwogCXRtcCA9IHRtcCB8ICgxIDw8IChsZXZlbCArIDI0KSk7Ci0JaW93cml0ZTMyKHRtcCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgVklOVF9FTik7CisJaW93cml0ZTMyKHRtcCwgYnJpZGdlLT5iYXNlICsgVklOVF9FTik7CiAKIAkvKiBXYWl0IGZvciBJQUNLICovCi0Jd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGlhY2tfcXVldWUsIDApOworCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShicmlkZ2UtPmlhY2tfcXVldWUsIDApOwogCiAJLyogUmV0dXJuIGludGVycnVwdCB0byBsb3cgc3RhdGUgKi8KLQl0bXAgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBWSU5UX0VOKTsKKwl0bXAgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBWSU5UX0VOKTsKIAl0bXAgPSB0bXAgJiB+KDEgPDwgKGxldmVsICsgMjQpKTsKLQlpb3dyaXRlMzIodG1wLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBWSU5UX0VOKTsKKwlpb3dyaXRlMzIodG1wLCBicmlkZ2UtPmJhc2UgKyBWSU5UX0VOKTsKIAotCW11dGV4X3VubG9jaygmKHZtZV9pbnQpKTsKKwltdXRleF91bmxvY2soJihicmlkZ2UtPnZtZV9pbnQpKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzMwLDkgKzMyMiwxMiBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyB2bWVfYmFzZSwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUsCiAJZG1hX2FkZHJfdCBwY2lfYmFzZSwgdm1lX2FkZHJlc3NfdCBhc3BhY2UsIHZtZV9jeWNsZV90IGN5Y2xlKQogewotCXVuc2lnbmVkIGludCBpLCBhZGRyID0gMCwgZ3JhbnVsYXJpdHkgPSAwOworCXVuc2lnbmVkIGludCBpLCBhZGRyID0gMCwgZ3JhbnVsYXJpdHk7CiAJdW5zaWduZWQgaW50IHRlbXBfY3RsID0gMDsKIAl1bnNpZ25lZCBpbnQgdm1lX2JvdW5kLCBwY2lfb2Zmc2V0OworCXN0cnVjdCBjYTkxY3g0Ml9kcml2ZXIgKmJyaWRnZTsKKworCWJyaWRnZSA9IGltYWdlLT5wYXJlbnQtPmRyaXZlcl9wcml2OwogCiAJaSA9IGltYWdlLT5udW1iZXI7CiAKQEAgLTM2NiwxMyArMzYxLDkgQEAKIAkgKiBCb3VuZCBhZGRyZXNzIGlzIGEgdmFsaWQgYWRkcmVzcyBmb3IgdGhlIHdpbmRvdywgYWRqdXN0CiAJICogYWNjb3JkaW5nbHkKIAkgKi8KLQl2bWVfYm91bmQgPSB2bWVfYmFzZSArIHNpemUgLSBncmFudWxhcml0eTsKKwl2bWVfYm91bmQgPSB2bWVfYmFzZSArIHNpemU7CiAJcGNpX29mZnNldCA9IHBjaV9iYXNlIC0gdm1lX2Jhc2U7CiAKLQkvKiBYWFggTmVlZCB0byBjaGVjayB0aGF0IHZtZV9iYXNlLCB2bWVfYm91bmQgYW5kIHBjaV9vZmZzZXQgYXJlbid0Ci0JICogdG9vIGJpZyBmb3IgcmVnaXN0ZXJzCi0JICovCi0KIAlpZiAoKGkgPT0gMCkgfHwgKGkgPT0gNCkpCiAJCWdyYW51bGFyaXR5ID0gMHgxMDAwOwogCWVsc2UKQEAgLTM5MiwyNiArMzgzLDE0IEBACiAJfQogCiAJLyogRGlzYWJsZSB3aGlsZSB3ZSBhcmUgbXVja2luZyBhcm91bmQgKi8KLQl0ZW1wX2N0bCA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIENBOTFDWDQyX1ZTSV9DVExbaV0pOworCXRlbXBfY3RsID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfVlNJX0NUTFtpXSk7CiAJdGVtcF9jdGwgJj0gfkNBOTFDWDQyX1ZTSV9DVExfRU47Ci0JaW93cml0ZTMyKHRlbXBfY3RsLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9WU0lfQ1RMW2ldKTsKKwlpb3dyaXRlMzIodGVtcF9jdGwsIGJyaWRnZS0+YmFzZSArIENBOTFDWDQyX1ZTSV9DVExbaV0pOwogCiAJLyogU2V0dXAgbWFwcGluZyAqLwotCWlvd3JpdGUzMih2bWVfYmFzZSwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfVlNJX0JTW2ldKTsKLQlpb3dyaXRlMzIodm1lX2JvdW5kLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9WU0lfQkRbaV0pOwotCWlvd3JpdGUzMihwY2lfb2Zmc2V0LCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9WU0lfVE9baV0pOwotCi0vKiBYWFggUHJlZmV0Y2ggc3R1ZmYgY3VycmVudGx5IHVuc3VwcG9ydGVkICovCi0jaWYgMAotCWlmICh2bWVJbi0+d3JQb3N0RW5hYmxlKQotCQl0ZW1wX2N0bCB8PSBDQTkxQ1g0Ml9WU0lfQ1RMX1BXRU47Ci0JaWYgKHZtZUluLT5wcmVmZXRjaEVuYWJsZSkKLQkJdGVtcF9jdGwgfD0gQ0E5MUNYNDJfVlNJX0NUTF9QUkVOOwotCWlmICh2bWVJbi0+cm13TG9jaykKLQkJdGVtcF9jdGwgfD0gQ0E5MUNYNDJfVlNJX0NUTF9MTFJNVzsKLQlpZiAodm1lSW4tPmRhdGE2NEJpdENhcGFibGUpCi0JCXRlbXBfY3RsIHw9IENBOTFDWDQyX1ZTSV9DVExfTEQ2NEVOOwotI2VuZGlmCisJaW93cml0ZTMyKHZtZV9iYXNlLCBicmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9WU0lfQlNbaV0pOworCWlvd3JpdGUzMih2bWVfYm91bmQsIGJyaWRnZS0+YmFzZSArIENBOTFDWDQyX1ZTSV9CRFtpXSk7CisJaW93cml0ZTMyKHBjaV9vZmZzZXQsIGJyaWRnZS0+YmFzZSArIENBOTFDWDQyX1ZTSV9UT1tpXSk7CiAKIAkvKiBTZXR1cCBhZGRyZXNzIHNwYWNlICovCiAJdGVtcF9jdGwgJj0gfkNBOTFDWDQyX1ZTSV9DVExfVkFTX007CkBAIC00MjksMTIgKzQwOCwxMiBAQAogCQl0ZW1wX2N0bCB8PSBDQTkxQ1g0Ml9WU0lfQ1RMX1BHTV9EQVRBOwogCiAJLyogV3JpdGUgY3RsIHJlZyB3aXRob3V0IGVuYWJsZSAqLwotCWlvd3JpdGUzMih0ZW1wX2N0bCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfVlNJX0NUTFtpXSk7CisJaW93cml0ZTMyKHRlbXBfY3RsLCBicmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9WU0lfQ1RMW2ldKTsKIAogCWlmIChlbmFibGVkKQogCQl0ZW1wX2N0bCB8PSBDQTkxQ1g0Ml9WU0lfQ1RMX0VOOwogCi0JaW93cml0ZTMyKHRlbXBfY3RsLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9WU0lfQ1RMW2ldKTsKKwlpb3dyaXRlMzIodGVtcF9jdGwsIGJyaWRnZS0+YmFzZSArIENBOTFDWDQyX1ZTSV9DVExbaV0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC00NDUsNiArNDI0LDkgQEAKIHsKIAl1bnNpZ25lZCBpbnQgaSwgZ3JhbnVsYXJpdHkgPSAwLCBjdGwgPSAwOwogCXVuc2lnbmVkIGxvbmcgbG9uZyB2bWVfYm91bmQsIHBjaV9vZmZzZXQ7CisJc3RydWN0IGNhOTFjeDQyX2RyaXZlciAqYnJpZGdlOworCisJYnJpZGdlID0gaW1hZ2UtPnBhcmVudC0+ZHJpdmVyX3ByaXY7CiAKIAlpID0gaW1hZ2UtPm51bWJlcjsKIApAQCAtNDU0LDExICs0MzYsMTEgQEAKIAkJZ3JhbnVsYXJpdHkgPSAweDEwMDAwOwogCiAJLyogUmVhZCBSZWdpc3RlcnMgKi8KLQljdGwgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9WU0lfQ1RMW2ldKTsKKwljdGwgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9WU0lfQ1RMW2ldKTsKIAotCSp2bWVfYmFzZSA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIENBOTFDWDQyX1ZTSV9CU1tpXSk7Ci0Jdm1lX2JvdW5kID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfVlNJX0JEW2ldKTsKLQlwY2lfb2Zmc2V0ID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfVlNJX1RPW2ldKTsKKwkqdm1lX2Jhc2UgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9WU0lfQlNbaV0pOworCXZtZV9ib3VuZCA9IGlvcmVhZDMyKGJyaWRnZS0+YmFzZSArIENBOTFDWDQyX1ZTSV9CRFtpXSk7CisJcGNpX29mZnNldCA9IGlvcmVhZDMyKGJyaWRnZS0+YmFzZSArIENBOTFDWDQyX1ZTSV9UT1tpXSk7CiAKIAkqcGNpX2Jhc2UgPSAoZG1hX2FkZHJfdCl2bWVfYmFzZSArIHBjaV9vZmZzZXQ7CiAJKnNpemUgPSAodW5zaWduZWQgbG9uZyBsb25nKSgodm1lX2JvdW5kIC0gKnZtZV9iYXNlKSArIGdyYW51bGFyaXR5KTsKQEAgLTUwMiw2ICs0ODQsOSBAQAogCXVuc2lnbmVkIGxvbmcgbG9uZyBleGlzdGluZ19zaXplOwogCWludCByZXR2YWwgPSAwOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCB2bWVfYnJpZGdlICpjYTkxY3g0Ml9icmlkZ2U7CisKKwljYTkxY3g0Ml9icmlkZ2UgPSBpbWFnZS0+cGFyZW50OwogCiAJLyogRmluZCBwY2lfZGV2IGNvbnRhaW5lciBvZiBkZXYgKi8KIAlpZiAoY2E5MWN4NDJfYnJpZGdlLT5wYXJlbnQgPT0gTlVMTCkgewpAQCAtNTEwLDggKzQ5NSw4IEBACiAJfQogCXBkZXYgPSBjb250YWluZXJfb2YoY2E5MWN4NDJfYnJpZGdlLT5wYXJlbnQsIHN0cnVjdCBwY2lfZGV2LCBkZXYpOwogCi0JZXhpc3Rpbmdfc2l6ZSA9ICh1bnNpZ25lZCBsb25nIGxvbmcpKGltYWdlLT5wY2lfcmVzb3VyY2UuZW5kIC0KLQkJaW1hZ2UtPnBjaV9yZXNvdXJjZS5zdGFydCk7CisJZXhpc3Rpbmdfc2l6ZSA9ICh1bnNpZ25lZCBsb25nIGxvbmcpKGltYWdlLT5idXNfcmVzb3VyY2UuZW5kIC0KKwkJaW1hZ2UtPmJ1c19yZXNvdXJjZS5zdGFydCk7CiAKIAkvKiBJZiB0aGUgZXhpc3Rpbmcgc2l6ZSBpcyBPSywgcmV0dXJuICovCiAJaWYgKGV4aXN0aW5nX3NpemUgPT0gKHNpemUgLSAxKSkKQEAgLTUyMCwxNSArNTA1LDE1IEBACiAJaWYgKGV4aXN0aW5nX3NpemUgIT0gMCkgewogCQlpb3VubWFwKGltYWdlLT5rZXJuX2Jhc2UpOwogCQlpbWFnZS0+a2Vybl9iYXNlID0gTlVMTDsKLQkJaWYgKGltYWdlLT5wY2lfcmVzb3VyY2UubmFtZSAhPSBOVUxMKQotCQkJa2ZyZWUoaW1hZ2UtPnBjaV9yZXNvdXJjZS5uYW1lKTsKLQkJcmVsZWFzZV9yZXNvdXJjZSgmKGltYWdlLT5wY2lfcmVzb3VyY2UpKTsKLQkJbWVtc2V0KCYoaW1hZ2UtPnBjaV9yZXNvdXJjZSksIDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKKwkJaWYgKGltYWdlLT5idXNfcmVzb3VyY2UubmFtZSAhPSBOVUxMKQorCQkJa2ZyZWUoaW1hZ2UtPmJ1c19yZXNvdXJjZS5uYW1lKTsKKwkJcmVsZWFzZV9yZXNvdXJjZSgmKGltYWdlLT5idXNfcmVzb3VyY2UpKTsKKwkJbWVtc2V0KCYoaW1hZ2UtPmJ1c19yZXNvdXJjZSksIDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKIAl9CiAKLQlpZiAoaW1hZ2UtPnBjaV9yZXNvdXJjZS5uYW1lID09IE5VTEwpIHsKLQkJaW1hZ2UtPnBjaV9yZXNvdXJjZS5uYW1lID0ga21hbGxvYyhWTUVOQU1TSVorMywgR0ZQX0tFUk5FTCk7Ci0JCWlmIChpbWFnZS0+cGNpX3Jlc291cmNlLm5hbWUgPT0gTlVMTCkgeworCWlmIChpbWFnZS0+YnVzX3Jlc291cmNlLm5hbWUgPT0gTlVMTCkgeworCQlpbWFnZS0+YnVzX3Jlc291cmNlLm5hbWUgPSBrbWFsbG9jKFZNRU5BTVNJWiszLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGltYWdlLT5idXNfcmVzb3VyY2UubmFtZSA9PSBOVUxMKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJlc291cmNlIgogCQkJCSIgbmFtZVxuIik7CiAJCQlyZXR2YWwgPSAtRU5PTUVNOwpAQCAtNTM2LDI2ICs1MjEsMjYgQEAKIAkJfQogCX0KIAotCXNwcmludGYoKGNoYXIgKilpbWFnZS0+cGNpX3Jlc291cmNlLm5hbWUsICIlcy4lZCIsCisJc3ByaW50ZigoY2hhciAqKWltYWdlLT5idXNfcmVzb3VyY2UubmFtZSwgIiVzLiVkIiwKIAkJY2E5MWN4NDJfYnJpZGdlLT5uYW1lLCBpbWFnZS0+bnVtYmVyKTsKIAotCWltYWdlLT5wY2lfcmVzb3VyY2Uuc3RhcnQgPSAwOwotCWltYWdlLT5wY2lfcmVzb3VyY2UuZW5kID0gKHVuc2lnbmVkIGxvbmcpc2l6ZTsKLQlpbWFnZS0+cGNpX3Jlc291cmNlLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJaW1hZ2UtPmJ1c19yZXNvdXJjZS5zdGFydCA9IDA7CisJaW1hZ2UtPmJ1c19yZXNvdXJjZS5lbmQgPSAodW5zaWduZWQgbG9uZylzaXplOworCWltYWdlLT5idXNfcmVzb3VyY2UuZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKIAogCXJldHZhbCA9IHBjaV9idXNfYWxsb2NfcmVzb3VyY2UocGRldi0+YnVzLAotCQkmKGltYWdlLT5wY2lfcmVzb3VyY2UpLCBzaXplLCBzaXplLCBQQ0lCSU9TX01JTl9NRU0sCisJCSYoaW1hZ2UtPmJ1c19yZXNvdXJjZSksIHNpemUsIHNpemUsIFBDSUJJT1NfTUlOX01FTSwKIAkJMCwgTlVMTCwgTlVMTCk7CiAJaWYgKHJldHZhbCkgewogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW0gcmVzb3VyY2UgZm9yICIKIAkJCSJ3aW5kb3cgJWQgc2l6ZSAweCVseCBzdGFydCAweCVseFxuIiwKIAkJCWltYWdlLT5udW1iZXIsICh1bnNpZ25lZCBsb25nKXNpemUsCi0JCQkodW5zaWduZWQgbG9uZylpbWFnZS0+cGNpX3Jlc291cmNlLnN0YXJ0KTsKKwkJCSh1bnNpZ25lZCBsb25nKWltYWdlLT5idXNfcmVzb3VyY2Uuc3RhcnQpOwogCQlnb3RvIGVycl9yZXNvdXJjZTsKIAl9CiAKIAlpbWFnZS0+a2Vybl9iYXNlID0gaW9yZW1hcF9ub2NhY2hlKAotCQlpbWFnZS0+cGNpX3Jlc291cmNlLnN0YXJ0LCBzaXplKTsKKwkJaW1hZ2UtPmJ1c19yZXNvdXJjZS5zdGFydCwgc2l6ZSk7CiAJaWYgKGltYWdlLT5rZXJuX2Jhc2UgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZW1hcCByZXNvdXJjZVxuIik7CiAJCXJldHZhbCA9IC1FTk9NRU07CkBAIC01NjcsMjQgKzU1MiwyNCBAQAogCWlvdW5tYXAoaW1hZ2UtPmtlcm5fYmFzZSk7CiAJaW1hZ2UtPmtlcm5fYmFzZSA9IE5VTEw7CiBlcnJfcmVtYXA6Ci0JcmVsZWFzZV9yZXNvdXJjZSgmKGltYWdlLT5wY2lfcmVzb3VyY2UpKTsKKwlyZWxlYXNlX3Jlc291cmNlKCYoaW1hZ2UtPmJ1c19yZXNvdXJjZSkpOwogZXJyX3Jlc291cmNlOgotCWtmcmVlKGltYWdlLT5wY2lfcmVzb3VyY2UubmFtZSk7Ci0JbWVtc2V0KCYoaW1hZ2UtPnBjaV9yZXNvdXJjZSksIDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKKwlrZnJlZShpbWFnZS0+YnVzX3Jlc291cmNlLm5hbWUpOworCW1lbXNldCgmKGltYWdlLT5idXNfcmVzb3VyY2UpLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CiBlcnJfbmFtZToKIAlyZXR1cm4gcmV0dmFsOwogfQogCiAvKgotICogICogRnJlZSBhbmQgdW5tYXAgUENJIFJlc291cmNlCi0gKiAgICovCisgKiBGcmVlIGFuZCB1bm1hcCBQQ0kgUmVzb3VyY2UKKyAqLwogc3RhdGljIHZvaWQgY2E5MWN4NDJfZnJlZV9yZXNvdXJjZShzdHJ1Y3Qgdm1lX21hc3Rlcl9yZXNvdXJjZSAqaW1hZ2UpCiB7CiAJaW91bm1hcChpbWFnZS0+a2Vybl9iYXNlKTsKIAlpbWFnZS0+a2Vybl9iYXNlID0gTlVMTDsKLQlyZWxlYXNlX3Jlc291cmNlKCYoaW1hZ2UtPnBjaV9yZXNvdXJjZSkpOwotCWtmcmVlKGltYWdlLT5wY2lfcmVzb3VyY2UubmFtZSk7Ci0JbWVtc2V0KCYoaW1hZ2UtPnBjaV9yZXNvdXJjZSksIDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKKwlyZWxlYXNlX3Jlc291cmNlKCYoaW1hZ2UtPmJ1c19yZXNvdXJjZSkpOworCWtmcmVlKGltYWdlLT5idXNfcmVzb3VyY2UubmFtZSk7CisJbWVtc2V0KCYoaW1hZ2UtPmJ1c19yZXNvdXJjZSksIDAsIHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKIH0KIAogCkBAIC01OTMsMTcgKzU3OCwyNyBAQAogCXZtZV9hZGRyZXNzX3QgYXNwYWNlLCB2bWVfY3ljbGVfdCBjeWNsZSwgdm1lX3dpZHRoX3QgZHdpZHRoKQogewogCWludCByZXR2YWwgPSAwOwotCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBpLCBncmFudWxhcml0eSA9IDA7CiAJdW5zaWduZWQgaW50IHRlbXBfY3RsID0gMDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgcGNpX2JvdW5kLCB2bWVfb2Zmc2V0LCBwY2lfYmFzZTsKKwlzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpicmlkZ2U7CisKKwlicmlkZ2UgPSBpbWFnZS0+cGFyZW50LT5kcml2ZXJfcHJpdjsKKworCWkgPSBpbWFnZS0+bnVtYmVyOworCisJaWYgKChpID09IDApIHx8IChpID09IDQpKQorCQlncmFudWxhcml0eSA9IDB4MTAwMDsKKwllbHNlCisJCWdyYW51bGFyaXR5ID0gMHgxMDAwMDsKIAogCS8qIFZlcmlmeSBpbnB1dCBkYXRhICovCi0JaWYgKHZtZV9iYXNlICYgMHhGRkYpIHsKKwlpZiAodm1lX2Jhc2UgJiAoZ3JhbnVsYXJpdHkgLSAxKSkgewogCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgVk1FIFdpbmRvdyBhbGlnbm1lbnRcbiIpOwogCQlyZXR2YWwgPSAtRUlOVkFMOwogCQlnb3RvIGVycl93aW5kb3c7CiAJfQotCWlmIChzaXplICYgMHhGRkYpIHsKKwlpZiAoc2l6ZSAmIChncmFudWxhcml0eSAtIDEpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBWTUUgV2luZG93IGFsaWdubWVudFxuIik7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWdvdG8gZXJyX3dpbmRvdzsKQEAgLTYxMSw5ICs2MDYsNiBAQAogCiAJc3Bpbl9sb2NrKCYoaW1hZ2UtPmxvY2spKTsKIAotCS8qIFhYWCBXZSBzaG91bGQgZG8gdGhpcyBtdWNoIGxhdGVyLCBzbyB0aGF0IHdlIGNhbiBleGl0IHdpdGhvdXQKLQkgKiAgICAgbmVlZGluZyB0byByZWRvIHRoZSBtYXBwaW5nLi4uCi0JICovCiAJLyoKIAkgKiBMZXQncyBhbGxvY2F0ZSB0aGUgcmVzb3VyY2UgaGVyZSByYXRoZXIgdGhhbiBmdXJ0aGVyIHVwIHRoZSBzdGFjayBhcwogCSAqIGl0IGF2b2lkcyBwdXNoaW5nIGxvYWRzIG9mIGJ1cyBkZXBlbmRhbnQgc3R1ZmYgdXAgdGhlIHN0YWNrCkBAIC02MjcsMjcgKzYxOSwxOSBAQAogCQlnb3RvIGVycl9yZXM7CiAJfQogCi0JcGNpX2Jhc2UgPSAodW5zaWduZWQgbG9uZyBsb25nKWltYWdlLT5wY2lfcmVzb3VyY2Uuc3RhcnQ7CisJcGNpX2Jhc2UgPSAodW5zaWduZWQgbG9uZyBsb25nKWltYWdlLT5idXNfcmVzb3VyY2Uuc3RhcnQ7CiAKIAkvKgogCSAqIEJvdW5kIGFkZHJlc3MgaXMgYSB2YWxpZCBhZGRyZXNzIGZvciB0aGUgd2luZG93LCBhZGp1c3QKIAkgKiBhY2NvcmRpbmcgdG8gd2luZG93IGdyYW51bGFyaXR5LgogCSAqLwotCXBjaV9ib3VuZCA9IHBjaV9iYXNlICsgKHNpemUgLSAweDEwMDApOworCXBjaV9ib3VuZCA9IHBjaV9iYXNlICsgc2l6ZTsKIAl2bWVfb2Zmc2V0ID0gdm1lX2Jhc2UgLSBwY2lfYmFzZTsKIAotCWkgPSBpbWFnZS0+bnVtYmVyOwotCiAJLyogRGlzYWJsZSB3aGlsZSB3ZSBhcmUgbXVja2luZyBhcm91bmQgKi8KLQl0ZW1wX2N0bCA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9DVExbaV0pOworCXRlbXBfY3RsID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfTFNJX0NUTFtpXSk7CiAJdGVtcF9jdGwgJj0gfkNBOTFDWDQyX0xTSV9DVExfRU47Ci0JaW93cml0ZTMyKHRlbXBfY3RsLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9MU0lfQ1RMW2ldKTsKLQotLyogWFhYIFByZWZldGNoIHN0dWZmIGN1cnJlbnRseSB1bnN1cHBvcnRlZCAqLwotI2lmIDAKLQlpZiAodm1lT3V0LT53clBvc3RFbmFibGUpCi0JCXRlbXBfY3RsIHw9IDB4NDAwMDAwMDA7Ci0jZW5kaWYKKwlpb3dyaXRlMzIodGVtcF9jdGwsIGJyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9DVExbaV0pOwogCiAJLyogU2V0dXAgY3ljbGUgdHlwZXMgKi8KIAl0ZW1wX2N0bCAmPSB+Q0E5MUNYNDJfTFNJX0NUTF9WQ1RfTTsKQEAgLTcxOCwxNyArNzAyLDE3IEBACiAJCXRlbXBfY3RsIHw9IENBOTFDWDQyX0xTSV9DVExfUEdNX1BHTTsKIAogCS8qIFNldHVwIG1hcHBpbmcgKi8KLQlpb3dyaXRlMzIocGNpX2Jhc2UsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9CU1tpXSk7Ci0JaW93cml0ZTMyKHBjaV9ib3VuZCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfTFNJX0JEW2ldKTsKLQlpb3dyaXRlMzIodm1lX29mZnNldCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfTFNJX1RPW2ldKTsKKwlpb3dyaXRlMzIocGNpX2Jhc2UsIGJyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9CU1tpXSk7CisJaW93cml0ZTMyKHBjaV9ib3VuZCwgYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfTFNJX0JEW2ldKTsKKwlpb3dyaXRlMzIodm1lX29mZnNldCwgYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfTFNJX1RPW2ldKTsKIAogCS8qIFdyaXRlIGN0bCByZWcgd2l0aG91dCBlbmFibGUgKi8KLQlpb3dyaXRlMzIodGVtcF9jdGwsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9DVExbaV0pOworCWlvd3JpdGUzMih0ZW1wX2N0bCwgYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfTFNJX0NUTFtpXSk7CiAKIAlpZiAoZW5hYmxlZCkKIAkJdGVtcF9jdGwgfD0gQ0E5MUNYNDJfTFNJX0NUTF9FTjsKIAotCWlvd3JpdGUzMih0ZW1wX2N0bCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfTFNJX0NUTFtpXSk7CisJaW93cml0ZTMyKHRlbXBfY3RsLCBicmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9MU0lfQ1RMW2ldKTsKIAogCXNwaW5fdW5sb2NrKCYoaW1hZ2UtPmxvY2spKTsKIAlyZXR1cm4gMDsKQEAgLTc0NywxNyArNzMxLDIwIEBACiB7CiAJdW5zaWduZWQgaW50IGksIGN0bDsKIAl1bnNpZ25lZCBsb25nIGxvbmcgcGNpX2Jhc2UsIHBjaV9ib3VuZCwgdm1lX29mZnNldDsKKwlzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpicmlkZ2U7CisKKwlicmlkZ2UgPSBpbWFnZS0+cGFyZW50LT5kcml2ZXJfcHJpdjsKIAogCWkgPSBpbWFnZS0+bnVtYmVyOwogCi0JY3RsID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfTFNJX0NUTFtpXSk7CisJY3RsID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfTFNJX0NUTFtpXSk7CiAKLQlwY2lfYmFzZSA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9CU1tpXSk7Ci0Jdm1lX29mZnNldCA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9UT1tpXSk7Ci0JcGNpX2JvdW5kID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfTFNJX0JEW2ldKTsKKwlwY2lfYmFzZSA9IGlvcmVhZDMyKGJyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9CU1tpXSk7CisJdm1lX29mZnNldCA9IGlvcmVhZDMyKGJyaWRnZS0+YmFzZSArIENBOTFDWDQyX0xTSV9UT1tpXSk7CisJcGNpX2JvdW5kID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgQ0E5MUNYNDJfTFNJX0JEW2ldKTsKIAogCSp2bWVfYmFzZSA9IHBjaV9iYXNlICsgdm1lX29mZnNldDsKLQkqc2l6ZSA9IChwY2lfYm91bmQgLSBwY2lfYmFzZSkgKyAweDEwMDA7CisJKnNpemUgPSAodW5zaWduZWQgbG9uZyBsb25nKShwY2lfYm91bmQgLSBwY2lfYmFzZSk7CiAKIAkqZW5hYmxlZCA9IDA7CiAJKmFzcGFjZSA9IDA7CkBAIC04MjIsMTIgKzgwOSw2IEBACiAJCWJyZWFrOwogCX0KIAotLyogWFhYIFByZWZldGNoIHN0dWZmIGN1cnJlbnRseSB1bnN1cHBvcnRlZCAqLwotI2lmIDAKLQlpZiAoY3RsICYgMHg0MDAwMDAwMCkKLQkJdm1lT3V0LT53clBvc3RFbmFibGUgPSAxOwotI2VuZGlmCi0KIAlyZXR1cm4gMDsKIH0KIApAQCAtODUwLDcgKzgzMSw3IEBACiBzc2l6ZV90IGNhOTFjeDQyX21hc3Rlcl9yZWFkKHN0cnVjdCB2bWVfbWFzdGVyX3Jlc291cmNlICppbWFnZSwgdm9pZCAqYnVmLAogCXNpemVfdCBjb3VudCwgbG9mZl90IG9mZnNldCkKIHsKLQlpbnQgcmV0dmFsOworCXNzaXplX3QgcmV0dmFsOwogCiAJc3Bpbl9sb2NrKCYoaW1hZ2UtPmxvY2spKTsKIApAQCAtODc3LDEyICs4NTgsNTI4IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotaW50IGNhOTFjeDQyX3Nsb3RfZ2V0KHZvaWQpCit1bnNpZ25lZCBpbnQgY2E5MWN4NDJfbWFzdGVyX3JtdyhzdHJ1Y3Qgdm1lX21hc3Rlcl9yZXNvdXJjZSAqaW1hZ2UsCisJdW5zaWduZWQgaW50IG1hc2ssIHVuc2lnbmVkIGludCBjb21wYXJlLCB1bnNpZ25lZCBpbnQgc3dhcCwKKwlsb2ZmX3Qgb2Zmc2V0KQoreworCXUzMiBwY2lfYWRkciwgcmVzdWx0OworCWludCBpOworCXN0cnVjdCBjYTkxY3g0Ml9kcml2ZXIgKmJyaWRnZTsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisKKwlicmlkZ2UgPSBpbWFnZS0+cGFyZW50LT5kcml2ZXJfcHJpdjsKKwlkZXYgPSBpbWFnZS0+cGFyZW50LT5wYXJlbnQ7CisKKwkvKiBGaW5kIHRoZSBQQ0kgYWRkcmVzcyB0aGF0IG1hcHMgdG8gdGhlIGRlc2lyZWQgVk1FIGFkZHJlc3MgKi8KKwlpID0gaW1hZ2UtPm51bWJlcjsKKworCS8qIExvY2tpbmcgYXMgd2UgY2FuIG9ubHkgZG8gb25lIG9mIHRoZXNlIGF0IGEgdGltZSAqLworCW11dGV4X2xvY2soJihicmlkZ2UtPnZtZV9ybXcpKTsKKworCS8qIExvY2sgaW1hZ2UgKi8KKwlzcGluX2xvY2soJihpbWFnZS0+bG9jaykpOworCisJcGNpX2FkZHIgPSAodTMyKWltYWdlLT5rZXJuX2Jhc2UgKyBvZmZzZXQ7CisKKwkvKiBBZGRyZXNzIG11c3QgYmUgNC1ieXRlIGFsaWduZWQgKi8KKwlpZiAocGNpX2FkZHIgJiAweDMpIHsKKwkJZGV2X2VycihkZXYsICJSTVcgQWRkcmVzcyBub3QgNC1ieXRlIGFsaWduZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBFbnN1cmUgUk1XIERpc2FibGVkIHdoaWxzdCBjb25maWd1cmluZyAqLworCWlvd3JpdGUzMigwLCBicmlkZ2UtPmJhc2UgKyBTQ1lDX0NUTCk7CisKKwkvKiBDb25maWd1cmUgcmVnaXN0ZXJzICovCisJaW93cml0ZTMyKG1hc2ssIGJyaWRnZS0+YmFzZSArIFNDWUNfRU4pOworCWlvd3JpdGUzMihjb21wYXJlLCBicmlkZ2UtPmJhc2UgKyBTQ1lDX0NNUCk7CisJaW93cml0ZTMyKHN3YXAsIGJyaWRnZS0+YmFzZSArIFNDWUNfU1dQKTsKKwlpb3dyaXRlMzIocGNpX2FkZHIsIGJyaWRnZS0+YmFzZSArIFNDWUNfQUREUik7CisKKwkvKiBFbmFibGUgUk1XICovCisJaW93cml0ZTMyKENBOTFDWDQyX1NDWUNfQ1RMX0NZQ19STVcsIGJyaWRnZS0+YmFzZSArIFNDWUNfQ1RMKTsKKworCS8qIEtpY2sgcHJvY2VzcyBvZmYgd2l0aCBhIHJlYWQgdG8gdGhlIHJlcXVpcmVkIGFkZHJlc3MuICovCisJcmVzdWx0ID0gaW9yZWFkMzIoaW1hZ2UtPmtlcm5fYmFzZSArIG9mZnNldCk7CisKKwkvKiBEaXNhYmxlIFJNVyAqLworCWlvd3JpdGUzMigwLCBicmlkZ2UtPmJhc2UgKyBTQ1lDX0NUTCk7CisKKwlzcGluX3VubG9jaygmKGltYWdlLT5sb2NrKSk7CisKKwltdXRleF91bmxvY2soJihicmlkZ2UtPnZtZV9ybXcpKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK2ludCBjYTkxY3g0Ml9kbWFfbGlzdF9hZGQoc3RydWN0IHZtZV9kbWFfbGlzdCAqbGlzdCwgc3RydWN0IHZtZV9kbWFfYXR0ciAqc3JjLAorCXN0cnVjdCB2bWVfZG1hX2F0dHIgKmRlc3QsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgY2E5MWN4NDJfZG1hX2VudHJ5ICplbnRyeSwgKnByZXY7CisJc3RydWN0IHZtZV9kbWFfcGNpICpwY2lfYXR0cjsKKwlzdHJ1Y3Qgdm1lX2RtYV92bWUgKnZtZV9hdHRyOworCWRtYV9hZGRyX3QgZGVzY19wdHI7CisJaW50IHJldHZhbCA9IDA7CisKKwkvKiBYWFggZGVzY3JpcHRvciBtdXN0IGJlIGFsaWduZWQgb24gNjQtYml0IGJvdW5kYXJpZXMgKi8KKwllbnRyeSA9IChzdHJ1Y3QgY2E5MWN4NDJfZG1hX2VudHJ5ICopCisJCWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjYTkxY3g0Ml9kbWFfZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZW50cnkgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRtYSByZXNvdXJjZSAiCisJCQkic3RydWN0dXJlXG4iKTsKKwkJcmV0dmFsID0gLUVOT01FTTsKKwkJZ290byBlcnJfbWVtOworCX0KKworCS8qIFRlc3QgZGVzY3JpcHRvciBhbGlnbm1lbnQgKi8KKwlpZiAoKHVuc2lnbmVkIGxvbmcpJihlbnRyeS0+ZGVzY3JpcHRvcikgJiBDQTkxQ1g0Ml9EQ1BQX00pIHsKKwkJcHJpbnRrKCJEZXNjcmlwdG9yIG5vdCBhbGlnbmVkIHRvIDE2IGJ5dGUgYm91bmRhcnkgYXMgIgorCQkJInJlcXVpcmVkOiAlcFxuIiwgJihlbnRyeS0+ZGVzY3JpcHRvcikpOworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGVycl9hbGlnbjsKKwl9CisKKwltZW1zZXQoJihlbnRyeS0+ZGVzY3JpcHRvciksIDAsIHNpemVvZihzdHJ1Y3QgY2E5MWN4NDJfZG1hX2Rlc2NyaXB0b3IpKTsKKworCWlmIChkZXN0LT50eXBlID09IFZNRV9ETUFfVk1FKSB7CisJCWVudHJ5LT5kZXNjcmlwdG9yLmRjdGwgfD0gQ0E5MUNYNDJfRENUTF9MMlY7CisJCXZtZV9hdHRyID0gKHN0cnVjdCB2bWVfZG1hX3ZtZSAqKWRlc3QtPnByaXZhdGU7CisJCXBjaV9hdHRyID0gKHN0cnVjdCB2bWVfZG1hX3BjaSAqKXNyYy0+cHJpdmF0ZTsKKwl9IGVsc2UgeworCQl2bWVfYXR0ciA9IChzdHJ1Y3Qgdm1lX2RtYV92bWUgKilzcmMtPnByaXZhdGU7CisJCXBjaV9hdHRyID0gKHN0cnVjdCB2bWVfZG1hX3BjaSAqKWRlc3QtPnByaXZhdGU7CisJfQorCisJLyogQ2hlY2sgd2UgY2FuIGRvIGZ1bGxmaWxsIHJlcXVpcmVkIGF0dHJpYnV0ZXMgKi8KKwlpZiAoKHZtZV9hdHRyLT5hc3BhY2UgJiB+KFZNRV9BMTYgfCBWTUVfQTI0IHwgVk1FX0EzMiB8IFZNRV9VU0VSMSB8CisJCVZNRV9VU0VSMikpICE9IDApIHsKKworCQlwcmludGsoS0VSTl9FUlIgIlVuc3VwcG9ydGVkIGN5Y2xlIHR5cGVcbiIpOworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGVycl9hc3BhY2U7CisJfQorCisJaWYgKCh2bWVfYXR0ci0+Y3ljbGUgJiB+KFZNRV9TQ1QgfCBWTUVfQkxUIHwgVk1FX1NVUEVSIHwgVk1FX1VTRVIgfAorCQlWTUVfUFJPRyB8IFZNRV9EQVRBKSkgIT0gMCkgeworCisJCXByaW50ayhLRVJOX0VSUiAiVW5zdXBwb3J0ZWQgY3ljbGUgdHlwZVxuIik7CisJCXJldHZhbCA9IC1FSU5WQUw7CisJCWdvdG8gZXJyX2N5Y2xlOworCX0KKworCS8qIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZnVsbGZpbGwgc291cmNlIGFuZCBkZXN0aW5hdGlvbiAqLworCWlmICghKCgoc3JjLT50eXBlID09IFZNRV9ETUFfUENJKSAmJiAoZGVzdC0+dHlwZSA9PSBWTUVfRE1BX1ZNRSkpIHx8CisJCSgoc3JjLT50eXBlID09IFZNRV9ETUFfVk1FKSAmJiAoZGVzdC0+dHlwZSA9PSBWTUVfRE1BX1BDSSkpKSkgeworCisJCXByaW50ayhLRVJOX0VSUiAiQ2Fubm90IHBlcmZvcm0gdHJhbnNmZXIgd2l0aCB0aGlzICIKKwkJCSJzb3VyY2UtZGVzdGluYXRpb24gY29tYmluYXRpb25cbiIpOworCQlyZXR2YWwgPSAtRUlOVkFMOworCQlnb3RvIGVycl9kaXJlY3Q7CisJfQorCisJLyogU2V0dXAgY3ljbGUgdHlwZXMgKi8KKwlpZiAodm1lX2F0dHItPmN5Y2xlICYgVk1FX0JMVCkKKwkJZW50cnktPmRlc2NyaXB0b3IuZGN0bCB8PSBDQTkxQ1g0Ml9EQ1RMX1ZDVF9CTFQ7CisKKwkvKiBTZXR1cCBkYXRhIHdpZHRoICovCisJc3dpdGNoICh2bWVfYXR0ci0+ZHdpZHRoKSB7CisJY2FzZSBWTUVfRDg6CisJCWVudHJ5LT5kZXNjcmlwdG9yLmRjdGwgfD0gQ0E5MUNYNDJfRENUTF9WRFdfRDg7CisJCWJyZWFrOworCWNhc2UgVk1FX0QxNjoKKwkJZW50cnktPmRlc2NyaXB0b3IuZGN0bCB8PSBDQTkxQ1g0Ml9EQ1RMX1ZEV19EMTY7CisJCWJyZWFrOworCWNhc2UgVk1FX0QzMjoKKwkJZW50cnktPmRlc2NyaXB0b3IuZGN0bCB8PSBDQTkxQ1g0Ml9EQ1RMX1ZEV19EMzI7CisJCWJyZWFrOworCWNhc2UgVk1FX0Q2NDoKKwkJZW50cnktPmRlc2NyaXB0b3IuZGN0bCB8PSBDQTkxQ1g0Ml9EQ1RMX1ZEV19ENjQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBkYXRhIHdpZHRoXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogU2V0dXAgYWRkcmVzcyBzcGFjZSAqLworCXN3aXRjaCAodm1lX2F0dHItPmFzcGFjZSkgeworCWNhc2UgVk1FX0ExNjoKKwkJZW50cnktPmRlc2NyaXB0b3IuZGN0bCB8PSBDQTkxQ1g0Ml9EQ1RMX1ZBU19BMTY7CisJCWJyZWFrOworCWNhc2UgVk1FX0EyNDoKKwkJZW50cnktPmRlc2NyaXB0b3IuZGN0bCB8PSBDQTkxQ1g0Ml9EQ1RMX1ZBU19BMjQ7CisJCWJyZWFrOworCWNhc2UgVk1FX0EzMjoKKwkJZW50cnktPmRlc2NyaXB0b3IuZGN0bCB8PSBDQTkxQ1g0Ml9EQ1RMX1ZBU19BMzI7CisJCWJyZWFrOworCWNhc2UgVk1FX1VTRVIxOgorCQllbnRyeS0+ZGVzY3JpcHRvci5kY3RsIHw9IENBOTFDWDQyX0RDVExfVkFTX1VTRVIxOworCQlicmVhazsKKwljYXNlIFZNRV9VU0VSMjoKKwkJZW50cnktPmRlc2NyaXB0b3IuZGN0bCB8PSBDQTkxQ1g0Ml9EQ1RMX1ZBU19VU0VSMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJJbnZhbGlkIGFkZHJlc3Mgc3BhY2VcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJaWYgKHZtZV9hdHRyLT5jeWNsZSAmIFZNRV9TVVBFUikKKwkJZW50cnktPmRlc2NyaXB0b3IuZGN0bCB8PSBDQTkxQ1g0Ml9EQ1RMX1NVUEVSX1NVUFI7CisJaWYgKHZtZV9hdHRyLT5jeWNsZSAmIFZNRV9QUk9HKQorCQllbnRyeS0+ZGVzY3JpcHRvci5kY3RsIHw9IENBOTFDWDQyX0RDVExfUEdNX1BHTTsKKworCWVudHJ5LT5kZXNjcmlwdG9yLmR0YmMgPSBjb3VudDsKKwllbnRyeS0+ZGVzY3JpcHRvci5kbGEgPSBwY2lfYXR0ci0+YWRkcmVzczsKKwllbnRyeS0+ZGVzY3JpcHRvci5kdmEgPSB2bWVfYXR0ci0+YWRkcmVzczsKKwllbnRyeS0+ZGVzY3JpcHRvci5kY3BwID0gQ0E5MUNYNDJfRENQUF9OVUxMOworCisJLyogQWRkIHRvIGxpc3QgKi8KKwlsaXN0X2FkZF90YWlsKCYoZW50cnktPmxpc3QpLCAmKGxpc3QtPmVudHJpZXMpKTsKKworCS8qIEZpbGwgb3V0IHByZXZpb3VzIGRlc2NyaXB0b3JzICJOZXh0IEFkZHJlc3MiICovCisJaWYgKGVudHJ5LT5saXN0LnByZXYgIT0gJihsaXN0LT5lbnRyaWVzKSkgeworCQlwcmV2ID0gbGlzdF9lbnRyeShlbnRyeS0+bGlzdC5wcmV2LCBzdHJ1Y3QgY2E5MWN4NDJfZG1hX2VudHJ5LAorCQkJbGlzdCk7CisJCS8qIFdlIG5lZWQgdGhlIGJ1cyBhZGRyZXNzIGZvciB0aGUgcG9pbnRlciAqLworCQlkZXNjX3B0ciA9IHZpcnRfdG9fYnVzKCYoZW50cnktPmRlc2NyaXB0b3IpKTsKKwkJcHJldi0+ZGVzY3JpcHRvci5kY3BwID0gZGVzY19wdHIgJiB+Q0E5MUNYNDJfRENQUF9NOworCX0KKworCXJldHVybiAwOworCitlcnJfY3ljbGU6CitlcnJfYXNwYWNlOgorZXJyX2RpcmVjdDoKK2Vycl9hbGlnbjoKKwlrZnJlZShlbnRyeSk7CitlcnJfbWVtOgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgY2E5MWN4NDJfZG1hX2J1c3koc3RydWN0IHZtZV9icmlkZ2UgKmNhOTFjeDQyX2JyaWRnZSkKK3sKKwl1MzIgdG1wOworCXN0cnVjdCBjYTkxY3g0Ml9kcml2ZXIgKmJyaWRnZTsKKworCWJyaWRnZSA9IGNhOTFjeDQyX2JyaWRnZS0+ZHJpdmVyX3ByaXY7CisKKwl0bXAgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBER0NTKTsKKworCWlmICh0bXAgJiBDQTkxQ1g0Ml9ER0NTX0FDVCkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gMTsKK30KKworaW50IGNhOTFjeDQyX2RtYV9saXN0X2V4ZWMoc3RydWN0IHZtZV9kbWFfbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3Qgdm1lX2RtYV9yZXNvdXJjZSAqY3RybHI7CisJc3RydWN0IGNhOTFjeDQyX2RtYV9lbnRyeSAqZW50cnk7CisJaW50IHJldHZhbCA9IDA7CisJZG1hX2FkZHJfdCBidXNfYWRkcjsKKwl1MzIgdmFsOworCisJc3RydWN0IGNhOTFjeDQyX2RyaXZlciAqYnJpZGdlOworCisJY3RybHIgPSBsaXN0LT5wYXJlbnQ7CisKKwlicmlkZ2UgPSBjdHJsci0+cGFyZW50LT5kcml2ZXJfcHJpdjsKKworCW11dGV4X2xvY2soJihjdHJsci0+bXR4KSk7CisKKwlpZiAoIShsaXN0X2VtcHR5KCYoY3RybHItPnJ1bm5pbmcpKSkpIHsKKwkJLyoKKwkJICogWFhYIFdlIGhhdmUgYW4gYWN0aXZlIERNQSB0cmFuc2ZlciBhbmQgY3VycmVudGx5IGhhdmVuJ3QKKwkJICogICAgIHNvcnRlZCBvdXQgdGhlIG1lY2hhbmlzbSBmb3IgInBlbmRpbmciIERNQSB0cmFuc2ZlcnMuCisJCSAqICAgICBSZXR1cm4gYnVzeS4KKwkJICovCisJCS8qIE5lZWQgdG8gYWRkIHRvIHBlbmRpbmcgaGVyZSAqLworCQltdXRleF91bmxvY2soJihjdHJsci0+bXR4KSk7CisJCXJldHVybiAtRUJVU1k7CisJfSBlbHNlIHsKKwkJbGlzdF9hZGQoJihsaXN0LT5saXN0KSwgJihjdHJsci0+cnVubmluZykpOworCX0KKworCS8qIEdldCBmaXJzdCBidXMgYWRkcmVzcyBhbmQgd3JpdGUgaW50byByZWdpc3RlcnMgKi8KKwllbnRyeSA9IGxpc3RfZmlyc3RfZW50cnkoJihsaXN0LT5lbnRyaWVzKSwgc3RydWN0IGNhOTFjeDQyX2RtYV9lbnRyeSwKKwkJbGlzdCk7CisKKwlidXNfYWRkciA9IHZpcnRfdG9fYnVzKCYoZW50cnktPmRlc2NyaXB0b3IpKTsKKworCW11dGV4X3VubG9jaygmKGN0cmxyLT5tdHgpKTsKKworCWlvd3JpdGUzMigwLCBicmlkZ2UtPmJhc2UgKyBEVEJDKTsKKwlpb3dyaXRlMzIoYnVzX2FkZHIgJiB+Q0E5MUNYNDJfRENQUF9NLCBicmlkZ2UtPmJhc2UgKyBEQ1BQKTsKKworCS8qIFN0YXJ0IHRoZSBvcGVyYXRpb24gKi8KKwl2YWwgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBER0NTKTsKKworCS8qIFhYWCBDb3VsZCBzZXQgVk1FYnVzIE9uIGFuZCBPZmYgQ291bnRlcnMgaGVyZSAqLworCXZhbCAmPSAoQ0E5MUNYNDJfREdDU19WT05fTSB8IENBOTFDWDQyX0RHQ1NfVk9GRl9NKTsKKworCXZhbCB8PSAoQ0E5MUNYNDJfREdDU19DSEFJTiB8IENBOTFDWDQyX0RHQ1NfU1RPUCB8IENBOTFDWDQyX0RHQ1NfSEFMVCB8CisJCUNBOTFDWDQyX0RHQ1NfRE9ORSB8IENBOTFDWDQyX0RHQ1NfTEVSUiB8IENBOTFDWDQyX0RHQ1NfVkVSUiB8CisJCUNBOTFDWDQyX0RHQ1NfUEVSUik7CisKKwlpb3dyaXRlMzIodmFsLCBicmlkZ2UtPmJhc2UgKyBER0NTKTsKKworCXZhbCB8PSBDQTkxQ1g0Ml9ER0NTX0dPOworCisJaW93cml0ZTMyKHZhbCwgYnJpZGdlLT5iYXNlICsgREdDUyk7CisKKwl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoYnJpZGdlLT5kbWFfcXVldWUsCisJCWNhOTFjeDQyX2RtYV9idXN5KGN0cmxyLT5wYXJlbnQpKTsKKworCS8qCisJICogUmVhZCBzdGF0dXMgcmVnaXN0ZXIsIHRoaXMgcmVnaXN0ZXIgaXMgdmFsaWQgdW50aWwgd2Uga2ljayBvZmYgYQorCSAqIG5ldyB0cmFuc2Zlci4KKwkgKi8KKwl2YWwgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBER0NTKTsKKworCWlmICh2YWwgJiAoQ0E5MUNYNDJfREdDU19MRVJSIHwgQ0E5MUNYNDJfREdDU19WRVJSIHwKKwkJQ0E5MUNYNDJfREdDU19QRVJSKSkgeworCisJCXByaW50ayhLRVJOX0VSUiAiY2E5MWMwNDI6IERNQSBFcnJvci4gREdDUz0lMDhYXG4iLCB2YWwpOworCQl2YWwgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBEQ1RMKTsKKwl9CisKKwkvKiBSZW1vdmUgbGlzdCBmcm9tIHJ1bm5pbmcgbGlzdCAqLworCW11dGV4X2xvY2soJihjdHJsci0+bXR4KSk7CisJbGlzdF9kZWwoJihsaXN0LT5saXN0KSk7CisJbXV0ZXhfdW5sb2NrKCYoY3RybHItPm10eCkpOworCisJcmV0dXJuIHJldHZhbDsKKworfQorCitpbnQgY2E5MWN4NDJfZG1hX2xpc3RfZW1wdHkoc3RydWN0IHZtZV9kbWFfbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0ZW1wOworCXN0cnVjdCBjYTkxY3g0Ml9kbWFfZW50cnkgKmVudHJ5OworCisJLyogZGV0YWNoIGFuZCBmcmVlIGVhY2ggZW50cnkgKi8KKwlsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCB0ZW1wLCAmKGxpc3QtPmVudHJpZXMpKSB7CisJCWxpc3RfZGVsKHBvcyk7CisJCWVudHJ5ID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBjYTkxY3g0Ml9kbWFfZW50cnksIGxpc3QpOworCQlrZnJlZShlbnRyeSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBbGwgNCBsb2NhdGlvbiBtb25pdG9ycyByZXNpZGUgYXQgdGhlIHNhbWUgYmFzZSAtIHRoaXMgaXMgdGhlcmVmb3JlIGEKKyAqIHN5c3RlbSB3aWRlIGNvbmZpZ3VyYXRpb24uCisgKgorICogVGhpcyBkb2VzIG5vdCBlbmFibGUgdGhlIExNIG1vbml0b3IgLSB0aGF0IHNob3VsZCBiZSBkb25lIHdoZW4gdGhlIGZpcnN0CisgKiBjYWxsYmFjayBpcyBhdHRhY2hlZCBhbmQgZGlzYWJsZWQgd2hlbiB0aGUgbGFzdCBjYWxsYmFjayBpcyByZW1vdmVkLgorICovCitpbnQgY2E5MWN4NDJfbG1fc2V0KHN0cnVjdCB2bWVfbG1fcmVzb3VyY2UgKmxtLCB1bnNpZ25lZCBsb25nIGxvbmcgbG1fYmFzZSwKKwl2bWVfYWRkcmVzc190IGFzcGFjZSwgdm1lX2N5Y2xlX3QgY3ljbGUpCit7CisJdTMyIHRlbXBfYmFzZSwgbG1fY3RsID0gMDsKKwlpbnQgaTsKKwlzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpicmlkZ2U7CisJc3RydWN0IGRldmljZSAqZGV2OworCisJYnJpZGdlID0gbG0tPnBhcmVudC0+ZHJpdmVyX3ByaXY7CisJZGV2ID0gbG0tPnBhcmVudC0+cGFyZW50OworCisJLyogQ2hlY2sgdGhlIGFsaWdubWVudCBvZiB0aGUgbG9jYXRpb24gbW9uaXRvciAqLworCXRlbXBfYmFzZSA9ICh1MzIpbG1fYmFzZTsKKwlpZiAodGVtcF9iYXNlICYgMHhmZmZmKSB7CisJCWRldl9lcnIoZGV2LCAiTG9jYXRpb24gbW9uaXRvciBtdXN0IGJlIGFsaWduZWQgdG8gNjRLQiAiCisJCQkiYm91bmRhcnkiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfbG9jaygmKGxtLT5tdHgpKTsKKworCS8qIElmIHdlIGFscmVhZHkgaGF2ZSBhIGNhbGxiYWNrIGF0dGFjaGVkLCB3ZSBjYW4ndCBtb3ZlIGl0ISAqLworCWZvciAoaSA9IDA7IGkgPCBsbS0+bW9uaXRvcnM7IGkrKykgeworCQlpZiAoYnJpZGdlLT5sbV9jYWxsYmFja1tpXSAhPSBOVUxMKSB7CisJCQltdXRleF91bmxvY2soJihsbS0+bXR4KSk7CisJCQlkZXZfZXJyKGRldiwgIkxvY2F0aW9uIG1vbml0b3IgY2FsbGJhY2sgYXR0YWNoZWQsICIKKwkJCQkiY2FuJ3QgcmVzZXRcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKKwkJfQorCX0KKworCXN3aXRjaCAoYXNwYWNlKSB7CisJY2FzZSBWTUVfQTE2OgorCQlsbV9jdGwgfD0gQ0E5MUNYNDJfTE1fQ1RMX0FTX0ExNjsKKwkJYnJlYWs7CisJY2FzZSBWTUVfQTI0OgorCQlsbV9jdGwgfD0gQ0E5MUNYNDJfTE1fQ1RMX0FTX0EyNDsKKwkJYnJlYWs7CisJY2FzZSBWTUVfQTMyOgorCQlsbV9jdGwgfD0gQ0E5MUNYNDJfTE1fQ1RMX0FTX0EzMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJbXV0ZXhfdW5sb2NrKCYobG0tPm10eCkpOworCQlkZXZfZXJyKGRldiwgIkludmFsaWQgYWRkcmVzcyBzcGFjZVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisKKwlpZiAoY3ljbGUgJiBWTUVfU1VQRVIpCisJCWxtX2N0bCB8PSBDQTkxQ1g0Ml9MTV9DVExfU1VQUjsKKwlpZiAoY3ljbGUgJiBWTUVfVVNFUikKKwkJbG1fY3RsIHw9IENBOTFDWDQyX0xNX0NUTF9OUFJJVjsKKwlpZiAoY3ljbGUgJiBWTUVfUFJPRykKKwkJbG1fY3RsIHw9IENBOTFDWDQyX0xNX0NUTF9QR007CisJaWYgKGN5Y2xlICYgVk1FX0RBVEEpCisJCWxtX2N0bCB8PSBDQTkxQ1g0Ml9MTV9DVExfREFUQTsKKworCWlvd3JpdGUzMihsbV9iYXNlLCBicmlkZ2UtPmJhc2UgKyBMTV9CUyk7CisJaW93cml0ZTMyKGxtX2N0bCwgYnJpZGdlLT5iYXNlICsgTE1fQ1RMKTsKKworCW11dGV4X3VubG9jaygmKGxtLT5tdHgpKTsKKworCXJldHVybiAwOworfQorCisvKiBHZXQgY29uZmlndXJhdGlvbiBvZiB0aGUgY2FsbGJhY2sgbW9uaXRvciBhbmQgcmV0dXJuIHdoZXRoZXIgaXQgaXMgZW5hYmxlZAorICogb3IgZGlzYWJsZWQuCisgKi8KK2ludCBjYTkxY3g0Ml9sbV9nZXQoc3RydWN0IHZtZV9sbV9yZXNvdXJjZSAqbG0sIHVuc2lnbmVkIGxvbmcgbG9uZyAqbG1fYmFzZSwKKwl2bWVfYWRkcmVzc190ICphc3BhY2UsIHZtZV9jeWNsZV90ICpjeWNsZSkKK3sKKwl1MzIgbG1fY3RsLCBlbmFibGVkID0gMDsKKwlzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpicmlkZ2U7CisKKwlicmlkZ2UgPSBsbS0+cGFyZW50LT5kcml2ZXJfcHJpdjsKKworCW11dGV4X2xvY2soJihsbS0+bXR4KSk7CisKKwkqbG1fYmFzZSA9ICh1bnNpZ25lZCBsb25nIGxvbmcpaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgTE1fQlMpOworCWxtX2N0bCA9IGlvcmVhZDMyKGJyaWRnZS0+YmFzZSArIExNX0NUTCk7CisKKwlpZiAobG1fY3RsICYgQ0E5MUNYNDJfTE1fQ1RMX0VOKQorCQllbmFibGVkID0gMTsKKworCWlmICgobG1fY3RsICYgQ0E5MUNYNDJfTE1fQ1RMX0FTX00pID09IENBOTFDWDQyX0xNX0NUTF9BU19BMTYpCisJCSphc3BhY2UgPSBWTUVfQTE2OworCWlmICgobG1fY3RsICYgQ0E5MUNYNDJfTE1fQ1RMX0FTX00pID09IENBOTFDWDQyX0xNX0NUTF9BU19BMjQpCisJCSphc3BhY2UgPSBWTUVfQTI0OworCWlmICgobG1fY3RsICYgQ0E5MUNYNDJfTE1fQ1RMX0FTX00pID09IENBOTFDWDQyX0xNX0NUTF9BU19BMzIpCisJCSphc3BhY2UgPSBWTUVfQTMyOworCisJKmN5Y2xlID0gMDsKKwlpZiAobG1fY3RsICYgQ0E5MUNYNDJfTE1fQ1RMX1NVUFIpCisJCSpjeWNsZSB8PSBWTUVfU1VQRVI7CisJaWYgKGxtX2N0bCAmIENBOTFDWDQyX0xNX0NUTF9OUFJJVikKKwkJKmN5Y2xlIHw9IFZNRV9VU0VSOworCWlmIChsbV9jdGwgJiBDQTkxQ1g0Ml9MTV9DVExfUEdNKQorCQkqY3ljbGUgfD0gVk1FX1BST0c7CisJaWYgKGxtX2N0bCAmIENBOTFDWDQyX0xNX0NUTF9EQVRBKQorCQkqY3ljbGUgfD0gVk1FX0RBVEE7CisKKwltdXRleF91bmxvY2soJihsbS0+bXR4KSk7CisKKwlyZXR1cm4gZW5hYmxlZDsKK30KKworLyoKKyAqIEF0dGFjaCBhIGNhbGxiYWNrIHRvIGEgc3BlY2lmaWMgbG9jYXRpb24gbW9uaXRvci4KKyAqCisgKiBDYWxsYmFjayB3aWxsIGJlIHBhc3NlZCB0aGUgbW9uaXRvciB0cmlnZ2VyZWQuCisgKi8KK2ludCBjYTkxY3g0Ml9sbV9hdHRhY2goc3RydWN0IHZtZV9sbV9yZXNvdXJjZSAqbG0sIGludCBtb25pdG9yLAorCXZvaWQgKCpjYWxsYmFjaykoaW50KSkKK3sKKwl1MzIgbG1fY3RsLCB0bXA7CisJc3RydWN0IGNhOTFjeDQyX2RyaXZlciAqYnJpZGdlOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKworCWJyaWRnZSA9IGxtLT5wYXJlbnQtPmRyaXZlcl9wcml2OworCWRldiA9IGxtLT5wYXJlbnQtPnBhcmVudDsKKworCW11dGV4X2xvY2soJihsbS0+bXR4KSk7CisKKwkvKiBFbnN1cmUgdGhhdCB0aGUgbG9jYXRpb24gbW9uaXRvciBpcyBjb25maWd1cmVkIC0gbmVlZCBQR00gb3IgREFUQSAqLworCWxtX2N0bCA9IGlvcmVhZDMyKGJyaWRnZS0+YmFzZSArIExNX0NUTCk7CisJaWYgKChsbV9jdGwgJiAoQ0E5MUNYNDJfTE1fQ1RMX1BHTSB8IENBOTFDWDQyX0xNX0NUTF9EQVRBKSkgPT0gMCkgeworCQltdXRleF91bmxvY2soJihsbS0+bXR4KSk7CisJCWRldl9lcnIoZGV2LCAiTG9jYXRpb24gbW9uaXRvciBub3QgcHJvcGVybHkgY29uZmlndXJlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIENoZWNrIHRoYXQgYSBjYWxsYmFjayBpc24ndCBhbHJlYWR5IGF0dGFjaGVkICovCisJaWYgKGJyaWRnZS0+bG1fY2FsbGJhY2tbbW9uaXRvcl0gIT0gTlVMTCkgeworCQltdXRleF91bmxvY2soJihsbS0+bXR4KSk7CisJCWRldl9lcnIoZGV2LCAiRXhpc3RpbmcgY2FsbGJhY2sgYXR0YWNoZWRcbiIpOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCS8qIEF0dGFjaCBjYWxsYmFjayAqLworCWJyaWRnZS0+bG1fY2FsbGJhY2tbbW9uaXRvcl0gPSBjYWxsYmFjazsKKworCS8qIEVuYWJsZSBMb2NhdGlvbiBNb25pdG9yIGludGVycnVwdCAqLworCXRtcCA9IGlvcmVhZDMyKGJyaWRnZS0+YmFzZSArIExJTlRfRU4pOworCXRtcCB8PSBDQTkxQ1g0Ml9MSU5UX0xNW21vbml0b3JdOworCWlvd3JpdGUzMih0bXAsIGJyaWRnZS0+YmFzZSArIExJTlRfRU4pOworCisJLyogRW5zdXJlIHRoYXQgZ2xvYmFsIExvY2F0aW9uIE1vbml0b3IgRW5hYmxlIHNldCAqLworCWlmICgobG1fY3RsICYgQ0E5MUNYNDJfTE1fQ1RMX0VOKSA9PSAwKSB7CisJCWxtX2N0bCB8PSBDQTkxQ1g0Ml9MTV9DVExfRU47CisJCWlvd3JpdGUzMihsbV9jdGwsIGJyaWRnZS0+YmFzZSArIExNX0NUTCk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCYobG0tPm10eCkpOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBEZXRhY2ggYSBjYWxsYmFjayBmdW5jdGlvbiBmb3JuIGEgc3BlY2lmaWMgbG9jYXRpb24gbW9uaXRvci4KKyAqLworaW50IGNhOTFjeDQyX2xtX2RldGFjaChzdHJ1Y3Qgdm1lX2xtX3Jlc291cmNlICpsbSwgaW50IG1vbml0b3IpCit7CisJdTMyIHRtcDsKKwlzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpicmlkZ2U7CisKKwlicmlkZ2UgPSBsbS0+cGFyZW50LT5kcml2ZXJfcHJpdjsKKworCW11dGV4X2xvY2soJihsbS0+bXR4KSk7CisKKwkvKiBEaXNhYmxlIExvY2F0aW9uIE1vbml0b3IgYW5kIGVuc3VyZSBwcmV2aW91cyBpbnRlcnJ1cHRzIGFyZSBjbGVhciAqLworCXRtcCA9IGlvcmVhZDMyKGJyaWRnZS0+YmFzZSArIExJTlRfRU4pOworCXRtcCAmPSB+Q0E5MUNYNDJfTElOVF9MTVttb25pdG9yXTsKKwlpb3dyaXRlMzIodG1wLCBicmlkZ2UtPmJhc2UgKyBMSU5UX0VOKTsKKworCWlvd3JpdGUzMihDQTkxQ1g0Ml9MSU5UX0xNW21vbml0b3JdLAorCQkgYnJpZGdlLT5iYXNlICsgTElOVF9TVEFUKTsKKworCS8qIERldGFjaCBjYWxsYmFjayAqLworCWJyaWRnZS0+bG1fY2FsbGJhY2tbbW9uaXRvcl0gPSBOVUxMOworCisJLyogSWYgYWxsIGxvY2F0aW9uIG1vbml0b3JzIGRpc2FibGVkLCBkaXNhYmxlIGdsb2JhbCBMb2NhdGlvbiBNb25pdG9yICovCisJaWYgKCh0bXAgJiAoQ0E5MUNYNDJfTElOVF9MTTAgfCBDQTkxQ1g0Ml9MSU5UX0xNMSB8IENBOTFDWDQyX0xJTlRfTE0yIHwKKwkJCUNBOTFDWDQyX0xJTlRfTE0zKSkgPT0gMCkgeworCQl0bXAgPSBpb3JlYWQzMihicmlkZ2UtPmJhc2UgKyBMTV9DVEwpOworCQl0bXAgJj0gfkNBOTFDWDQyX0xNX0NUTF9FTjsKKwkJaW93cml0ZTMyKHRtcCwgYnJpZGdlLT5iYXNlICsgTE1fQ1RMKTsKKwl9CisKKwltdXRleF91bmxvY2soJihsbS0+bXR4KSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IGNhOTFjeDQyX3Nsb3RfZ2V0KHN0cnVjdCB2bWVfYnJpZGdlICpjYTkxY3g0Ml9icmlkZ2UpCiB7CiAJdTMyIHNsb3QgPSAwOworCXN0cnVjdCBjYTkxY3g0Ml9kcml2ZXIgKmJyaWRnZTsKIAotCXNsb3QgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBWQ1NSX0JTKTsKLQlzbG90ID0gKChzbG90ICYgQ0E5MUNYNDJfVkNTUl9CU19TTE9UX00pID4+IDI3KTsKKwlicmlkZ2UgPSBjYTkxY3g0Ml9icmlkZ2UtPmRyaXZlcl9wcml2OworCisJaWYgKCFnZW9pZCkgeworCQlzbG90ID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgVkNTUl9CUyk7CisJCXNsb3QgPSAoKHNsb3QgJiBDQTkxQ1g0Ml9WQ1NSX0JTX1NMT1RfTSkgPj4gMjcpOworCX0gZWxzZQorCQlzbG90ID0gZ2VvaWQ7CisKIAlyZXR1cm4gKGludClzbG90OwogCiB9CkBAIC05MDAsMTkgKzEzOTcsMjEgQEAKICAqIEF1dG8tSUQgb3IgR2VvZ3JhcGhpYyBhZGRyZXNzLiBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgdGhhdCB0aGUgd2luZG93IGlzCiAgKiBlbmFibGVkIGF0IGFuIG9mZnNldCBjb25zaXN0ZW50IHdpdGggdGhlIGJvYXJkcyBnZW9wZ3JhcGhpYyBhZGRyZXNzLgogICovCi1zdGF0aWMgaW50IGNhOTFjeDQyX2NyY3NyX2luaXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgaW50IGNhOTFjeDQyX2NyY3NyX2luaXQoc3RydWN0IHZtZV9icmlkZ2UgKmNhOTFjeDQyX2JyaWRnZSwKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAl1bnNpZ25lZCBpbnQgY3Jjc3JfYWRkcjsKIAlpbnQgdG1wLCBzbG90OworCXN0cnVjdCBjYTkxY3g0Ml9kcml2ZXIgKmJyaWRnZTsKIAotLyogWFhYIFdlIG1heSBuZWVkIHRvIHNldCB0aGlzIHNvbWVob3cgYXMgdGhlIFVuaXZlcnNlIElJIGRvZXMgbm90IHN1cHBvcnQKLSAqICAgICBnZW9ncmFwaGljYWwgYWRkcmVzc2luZy4KLSAqLwotI2lmIDAKLQlpZiAodm1lX3Nsb3RudW0gIT0gLTEpCi0JCWlvd3JpdGUzMih2bWVfc2xvdG51bSA8PCAyNywgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgVkNTUl9CUyk7Ci0jZW5kaWYKLQlzbG90ID0gY2E5MWN4NDJfc2xvdF9nZXQoKTsKKwlicmlkZ2UgPSBjYTkxY3g0Ml9icmlkZ2UtPmRyaXZlcl9wcml2OworCisJc2xvdCA9IGNhOTFjeDQyX3Nsb3RfZ2V0KGNhOTFjeDQyX2JyaWRnZSk7CisKKwkvKiBXcml0ZSBDU1IgQmFzZSBBZGRyZXNzIGlmIHNsb3QgSUQgaXMgc3VwcGxpZWQgYXMgYSBtb2R1bGUgcGFyYW0gKi8KKwlpZiAoZ2VvaWQpCisJCWlvd3JpdGUzMihnZW9pZCA8PCAyNywgYnJpZGdlLT5iYXNlICsgVkNTUl9CUyk7CisKIAlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQ1IvQ1NSIE9mZnNldDogJWRcbiIsIHNsb3QpOwogCWlmIChzbG90ID09IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiU2xvdCBudW1iZXIgaXMgdW5zZXQsIG5vdCBjb25maWd1cmluZyAiCkBAIC05MjEsMzkgKzE0MjAsNDQgQEAKIAl9CiAKIAkvKiBBbGxvY2F0ZSBtZW0gZm9yIENSL0NTUiBpbWFnZSAqLwotCWNyY3NyX2tlcm5lbCA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIFZNRV9DUkNTUl9CVUZfU0laRSwKLQkJJmNyY3NyX2J1cyk7Ci0JaWYgKGNyY3NyX2tlcm5lbCA9PSBOVUxMKSB7CisJYnJpZGdlLT5jcmNzcl9rZXJuZWwgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBWTUVfQ1JDU1JfQlVGX1NJWkUsCisJCSYoYnJpZGdlLT5jcmNzcl9idXMpKTsKKwlpZiAoYnJpZGdlLT5jcmNzcl9rZXJuZWwgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBDUi9DU1IgIgogCQkJImltYWdlXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JbWVtc2V0KGNyY3NyX2tlcm5lbCwgMCwgVk1FX0NSQ1NSX0JVRl9TSVpFKTsKKwltZW1zZXQoYnJpZGdlLT5jcmNzcl9rZXJuZWwsIDAsIFZNRV9DUkNTUl9CVUZfU0laRSk7CiAKIAljcmNzcl9hZGRyID0gc2xvdCAqICg1MTIgKiAxMDI0KTsKLQlpb3dyaXRlMzIoY3Jjc3JfYnVzIC0gY3Jjc3JfYWRkciwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgVkNTUl9UTyk7CisJaW93cml0ZTMyKGJyaWRnZS0+Y3Jjc3JfYnVzIC0gY3Jjc3JfYWRkciwgYnJpZGdlLT5iYXNlICsgVkNTUl9UTyk7CiAKLQl0bXAgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBWQ1NSX0NUTCk7CisJdG1wID0gaW9yZWFkMzIoYnJpZGdlLT5iYXNlICsgVkNTUl9DVEwpOwogCXRtcCB8PSBDQTkxQ1g0Ml9WQ1NSX0NUTF9FTjsKLQlpb3dyaXRlMzIodG1wLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBWQ1NSX0NUTCk7CisJaW93cml0ZTMyKHRtcCwgYnJpZGdlLT5iYXNlICsgVkNTUl9DVEwpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGNhOTFjeDQyX2NyY3NyX2V4aXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCitzdGF0aWMgdm9pZCBjYTkxY3g0Ml9jcmNzcl9leGl0KHN0cnVjdCB2bWVfYnJpZGdlICpjYTkxY3g0Ml9icmlkZ2UsCisJc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJdTMyIHRtcDsKKwlzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyICpicmlkZ2U7CisKKwlicmlkZ2UgPSBjYTkxY3g0Ml9icmlkZ2UtPmRyaXZlcl9wcml2OwogCiAJLyogVHVybiBvZmYgQ1IvQ1NSIHNwYWNlICovCi0JdG1wID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgVkNTUl9DVEwpOworCXRtcCA9IGlvcmVhZDMyKGJyaWRnZS0+YmFzZSArIFZDU1JfQ1RMKTsKIAl0bXAgJj0gfkNBOTFDWDQyX1ZDU1JfQ1RMX0VOOwotCWlvd3JpdGUzMih0bXAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIFZDU1JfQ1RMKTsKKwlpb3dyaXRlMzIodG1wLCBicmlkZ2UtPmJhc2UgKyBWQ1NSX0NUTCk7CiAKIAkvKiBGcmVlIGltYWdlICovCi0JaW93cml0ZTMyKDAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIFZDU1JfVE8pOworCWlvd3JpdGUzMigwLCBicmlkZ2UtPmJhc2UgKyBWQ1NSX1RPKTsKIAotCXBjaV9mcmVlX2NvbnNpc3RlbnQocGRldiwgVk1FX0NSQ1NSX0JVRl9TSVpFLCBjcmNzcl9rZXJuZWwsIGNyY3NyX2J1cyk7CisJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBWTUVfQ1JDU1JfQlVGX1NJWkUsIGJyaWRnZS0+Y3Jjc3Jfa2VybmVsLAorCQlicmlkZ2UtPmNyY3NyX2J1cyk7CiB9CiAKIHN0YXRpYyBpbnQgY2E5MWN4NDJfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKQEAgLTk2MSwxMSArMTQ2NSwxMSBAQAogCWludCByZXR2YWwsIGk7CiAJdTMyIGRhdGE7CiAJc3RydWN0IGxpc3RfaGVhZCAqcG9zID0gTlVMTDsKKwlzdHJ1Y3Qgdm1lX2JyaWRnZSAqY2E5MWN4NDJfYnJpZGdlOworCXN0cnVjdCBjYTkxY3g0Ml9kcml2ZXIgKmNhOTFjeDQyX2RldmljZTsKIAlzdHJ1Y3Qgdm1lX21hc3Rlcl9yZXNvdXJjZSAqbWFzdGVyX2ltYWdlOwogCXN0cnVjdCB2bWVfc2xhdmVfcmVzb3VyY2UgKnNsYXZlX2ltYWdlOwotI2lmIDAKIAlzdHJ1Y3Qgdm1lX2RtYV9yZXNvdXJjZSAqZG1hX2N0cmxyOwotI2VuZGlmCiAJc3RydWN0IHZtZV9sbV9yZXNvdXJjZSAqbG07CiAKIAkvKiBXZSB3YW50IHRvIHN1cHBvcnQgbW9yZSB0aGFuIG9uZSBvZiBlYWNoIGJyaWRnZSBzbyB3ZSBuZWVkIHRvCkBAIC05ODIsNiArMTQ4NiwxOSBAQAogCiAJbWVtc2V0KGNhOTFjeDQyX2JyaWRnZSwgMCwgc2l6ZW9mKHN0cnVjdCB2bWVfYnJpZGdlKSk7CiAKKwljYTkxY3g0Ml9kZXZpY2UgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyKSwgR0ZQX0tFUk5FTCk7CisKKwlpZiAoY2E5MWN4NDJfZGV2aWNlID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgZGV2aWNlICIKKwkJCSJzdHJ1Y3R1cmVcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycl9kcml2ZXI7CisJfQorCisJbWVtc2V0KGNhOTFjeDQyX2RldmljZSwgMCwgc2l6ZW9mKHN0cnVjdCBjYTkxY3g0Ml9kcml2ZXIpKTsKKworCWNhOTFjeDQyX2JyaWRnZS0+ZHJpdmVyX3ByaXYgPSBjYTkxY3g0Ml9kZXZpY2U7CisKIAkvKiBFbmFibGUgdGhlIGRldmljZSAqLwogCXJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChyZXR2YWwpIHsKQEAgLTk5NywxNiArMTUxNCwxNiBAQAogCX0KIAogCS8qIG1hcCByZWdpc3RlcnMgaW4gQkFSIDAgKi8KLQljYTkxY3g0Ml9icmlkZ2UtPmJhc2UgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLAorCWNhOTFjeDQyX2RldmljZS0+YmFzZSA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksCiAJCTQwOTYpOwotCWlmICghY2E5MWN4NDJfYnJpZGdlLT5iYXNlKSB7CisJaWYgKCFjYTkxY3g0Ml9kZXZpY2UtPmJhc2UpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlbWFwIENSRyByZWdpb25cbiIpOwogCQlyZXR2YWwgPSAtRUlPOwogCQlnb3RvIGVycl9yZW1hcDsKIAl9CiAKIAkvKiBDaGVjayB0byBzZWUgaWYgdGhlIG1hcHBpbmcgd29ya2VkIG91dCAqLwotCWRhdGEgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9QQ0lfSUQpICYgMHgwMDAwRkZGRjsKKwlkYXRhID0gaW9yZWFkMzIoY2E5MWN4NDJfZGV2aWNlLT5iYXNlICsgQ0E5MUNYNDJfUENJX0lEKSAmIDB4MDAwMEZGRkY7CiAJaWYgKGRhdGEgIT0gUENJX1ZFTkRPUl9JRF9UVU5EUkEpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiUENJX0lEIGNoZWNrIGZhaWxlZFxuIik7CiAJCXJldHZhbCA9IC1FSU87CkBAIC0xMDE0LDExICsxNTMxLDEwIEBACiAJfQogCiAJLyogSW5pdGlhbGl6ZSB3YWl0IHF1ZXVlcyAmIG11dHVhbCBleGNsdXNpb24gZmxhZ3MgKi8KLQkvKiBYWFggVGhlc2UgbmVlZCB0byBiZSBtb3ZlZCB0byB0aGUgdm1lX2JyaWRnZSBzdHJ1Y3R1cmUgKi8KLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkbWFfcXVldWUpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmlhY2tfcXVldWUpOwotCW11dGV4X2luaXQoJih2bWVfaW50KSk7Ci0JbXV0ZXhfaW5pdCgmKHZtZV9ybXcpKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCYoY2E5MWN4NDJfZGV2aWNlLT5kbWFfcXVldWUpKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCYoY2E5MWN4NDJfZGV2aWNlLT5pYWNrX3F1ZXVlKSk7CisJbXV0ZXhfaW5pdCgmKGNhOTFjeDQyX2RldmljZS0+dm1lX2ludCkpOworCW11dGV4X2luaXQoJihjYTkxY3g0Ml9kZXZpY2UtPnZtZV9ybXcpKTsKIAogCWNhOTFjeDQyX2JyaWRnZS0+cGFyZW50ID0gJihwZGV2LT5kZXYpOwogCXN0cmNweShjYTkxY3g0Ml9icmlkZ2UtPm5hbWUsIGRyaXZlcl9uYW1lKTsKQEAgLTEwNTAsNyArMTU2Niw3IEBACiAJCW1hc3Rlcl9pbWFnZS0+Y3ljbGVfYXR0ciA9IFZNRV9TQ1QgfCBWTUVfQkxUIHwgVk1FX01CTFQgfAogCQkJVk1FX1NVUEVSIHwgVk1FX1VTRVIgfCBWTUVfUFJPRyB8IFZNRV9EQVRBOwogCQltYXN0ZXJfaW1hZ2UtPndpZHRoX2F0dHIgPSBWTUVfRDggfCBWTUVfRDE2IHwgVk1FX0QzMiB8IFZNRV9ENjQ7Ci0JCW1lbXNldCgmKG1hc3Rlcl9pbWFnZS0+cGNpX3Jlc291cmNlKSwgMCwKKwkJbWVtc2V0KCYobWFzdGVyX2ltYWdlLT5idXNfcmVzb3VyY2UpLCAwLAogCQkJc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkpOwogCQltYXN0ZXJfaW1hZ2UtPmtlcm5fYmFzZSAgPSBOVUxMOwogCQlsaXN0X2FkZF90YWlsKCYobWFzdGVyX2ltYWdlLT5saXN0KSwKQEAgLTEwODQsNyArMTYwMCw3IEBACiAJCWxpc3RfYWRkX3RhaWwoJihzbGF2ZV9pbWFnZS0+bGlzdCksCiAJCQkmKGNhOTFjeDQyX2JyaWRnZS0+c2xhdmVfcmVzb3VyY2VzKSk7CiAJfQotI2lmIDAKKwogCS8qIEFkZCBkbWEgZW5naW5lcyB0byBsaXN0ICovCiAJSU5JVF9MSVNUX0hFQUQoJihjYTkxY3g0Ml9icmlkZ2UtPmRtYV9yZXNvdXJjZXMpKTsKIAlmb3IgKGkgPSAwOyBpIDwgQ0E5MUMxNDJfTUFYX0RNQTsgaSsrKSB7CkBAIC0xMTAwLDEyICsxNjE2LDE0IEBACiAJCW11dGV4X2luaXQoJihkbWFfY3RybHItPm10eCkpOwogCQlkbWFfY3RybHItPmxvY2tlZCA9IDA7CiAJCWRtYV9jdHJsci0+bnVtYmVyID0gaTsKKwkJZG1hX2N0cmxyLT5yb3V0ZV9hdHRyID0gVk1FX0RNQV9WTUVfVE9fTUVNIHwKKwkJCVZNRV9ETUFfTUVNX1RPX1ZNRTsKIAkJSU5JVF9MSVNUX0hFQUQoJihkbWFfY3RybHItPnBlbmRpbmcpKTsKIAkJSU5JVF9MSVNUX0hFQUQoJihkbWFfY3RybHItPnJ1bm5pbmcpKTsKIAkJbGlzdF9hZGRfdGFpbCgmKGRtYV9jdHJsci0+bGlzdCksCiAJCQkmKGNhOTFjeDQyX2JyaWRnZS0+ZG1hX3Jlc291cmNlcykpOwogCX0KLSNlbmRpZgorCiAJLyogQWRkIGxvY2F0aW9uIG1vbml0b3IgdG8gbGlzdCAqLwogCUlOSVRfTElTVF9IRUFEKCYoY2E5MWN4NDJfYnJpZGdlLT5sbV9yZXNvdXJjZXMpKTsKIAlsbSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2bWVfbG1fcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKQEAgLTExMjgsMzMgKzE2NDYsMjYgQEAKIAljYTkxY3g0Ml9icmlkZ2UtPm1hc3Rlcl9zZXQgPSBjYTkxY3g0Ml9tYXN0ZXJfc2V0OwogCWNhOTFjeDQyX2JyaWRnZS0+bWFzdGVyX3JlYWQgPSBjYTkxY3g0Ml9tYXN0ZXJfcmVhZDsKIAljYTkxY3g0Ml9icmlkZ2UtPm1hc3Rlcl93cml0ZSA9IGNhOTFjeDQyX21hc3Rlcl93cml0ZTsKLSNpZiAwCiAJY2E5MWN4NDJfYnJpZGdlLT5tYXN0ZXJfcm13ID0gY2E5MWN4NDJfbWFzdGVyX3JtdzsKIAljYTkxY3g0Ml9icmlkZ2UtPmRtYV9saXN0X2FkZCA9IGNhOTFjeDQyX2RtYV9saXN0X2FkZDsKIAljYTkxY3g0Ml9icmlkZ2UtPmRtYV9saXN0X2V4ZWMgPSBjYTkxY3g0Ml9kbWFfbGlzdF9leGVjOwogCWNhOTFjeDQyX2JyaWRnZS0+ZG1hX2xpc3RfZW1wdHkgPSBjYTkxY3g0Ml9kbWFfbGlzdF9lbXB0eTsKLSNlbmRpZgogCWNhOTFjeDQyX2JyaWRnZS0+aXJxX3NldCA9IGNhOTFjeDQyX2lycV9zZXQ7CiAJY2E5MWN4NDJfYnJpZGdlLT5pcnFfZ2VuZXJhdGUgPSBjYTkxY3g0Ml9pcnFfZ2VuZXJhdGU7Ci0jaWYgMAogCWNhOTFjeDQyX2JyaWRnZS0+bG1fc2V0ID0gY2E5MWN4NDJfbG1fc2V0OwogCWNhOTFjeDQyX2JyaWRnZS0+bG1fZ2V0ID0gY2E5MWN4NDJfbG1fZ2V0OwogCWNhOTFjeDQyX2JyaWRnZS0+bG1fYXR0YWNoID0gY2E5MWN4NDJfbG1fYXR0YWNoOwogCWNhOTFjeDQyX2JyaWRnZS0+bG1fZGV0YWNoID0gY2E5MWN4NDJfbG1fZGV0YWNoOwotI2VuZGlmCiAJY2E5MWN4NDJfYnJpZGdlLT5zbG90X2dldCA9IGNhOTFjeDQyX3Nsb3RfZ2V0OwogCi0JZGF0YSA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIE1JU0NfQ1RMKTsKKwlkYXRhID0gaW9yZWFkMzIoY2E5MWN4NDJfZGV2aWNlLT5iYXNlICsgTUlTQ19DVEwpOwogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJCb2FyZCBpcyVzIHRoZSBWTUUgc3lzdGVtIGNvbnRyb2xsZXJcbiIsCiAJCShkYXRhICYgQ0E5MUNYNDJfTUlTQ19DVExfU1lTQ09OKSA/ICIiIDogIiBub3QiKTsKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiU2xvdCBJRCBpcyAlZFxuIiwgY2E5MWN4NDJfc2xvdF9nZXQoKSk7CisJZGV2X2luZm8oJnBkZXYtPmRldiwgIlNsb3QgSUQgaXMgJWRcbiIsCisJCWNhOTFjeDQyX3Nsb3RfZ2V0KGNhOTFjeDQyX2JyaWRnZSkpOwogCi0JaWYgKGNhOTFjeDQyX2NyY3NyX2luaXQocGRldikpIHsKKwlpZiAoY2E5MWN4NDJfY3Jjc3JfaW5pdChjYTkxY3g0Ml9icmlkZ2UsIHBkZXYpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNSL0NTUiBjb25maWd1cmF0aW9uIGZhaWxlZC5cbiIpOwotCQlyZXR2YWwgPSAtRUlOVkFMOwotI2lmIDAKLQkJZ290byBlcnJfY3Jjc3I7Ci0jZW5kaWYKIAl9CiAKIAkvKiBOZWVkIHRvIHNhdmUgY2E5MWN4NDJfYnJpZGdlIHBvaW50ZXIgbG9jYWxseSBpbiBsaW5rIGxpc3QgZm9yIHVzZSBpbgpAQCAtMTE2NiwxNCArMTY3NywxMyBAQAogCQlnb3RvIGVycl9yZWc7CiAJfQogCisJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGNhOTFjeDQyX2JyaWRnZSk7CisKIAlyZXR1cm4gMDsKIAogCXZtZV91bnJlZ2lzdGVyX2JyaWRnZShjYTkxY3g0Ml9icmlkZ2UpOwogZXJyX3JlZzoKLQljYTkxY3g0Ml9jcmNzcl9leGl0KHBkZXYpOwotI2lmIDAKLWVycl9jcmNzcjoKLSNlbmRpZgorCWNhOTFjeDQyX2NyY3NyX2V4aXQoY2E5MWN4NDJfYnJpZGdlLCBwZGV2KTsKIGVycl9sbToKIAkvKiByZXNvdXJjZXMgYXJlIHN0b3JlZCBpbiBsaW5rIGxpc3QgKi8KIAlsaXN0X2Zvcl9lYWNoKHBvcywgJihjYTkxY3g0Ml9icmlkZ2UtPmxtX3Jlc291cmNlcykpIHsKQEAgLTExODEsNyArMTY5MSw2IEBACiAJCWxpc3RfZGVsKHBvcyk7CiAJCWtmcmVlKGxtKTsKIAl9Ci0jaWYgMAogZXJyX2RtYToKIAkvKiByZXNvdXJjZXMgYXJlIHN0b3JlZCBpbiBsaW5rIGxpc3QgKi8KIAlsaXN0X2Zvcl9lYWNoKHBvcywgJihjYTkxY3g0Ml9icmlkZ2UtPmRtYV9yZXNvdXJjZXMpKSB7CkBAIC0xMTg5LDcgKzE2OTgsNiBAQAogCQlsaXN0X2RlbChwb3MpOwogCQlrZnJlZShkbWFfY3RybHIpOwogCX0KLSNlbmRpZgogZXJyX3NsYXZlOgogCS8qIHJlc291cmNlcyBhcmUgc3RvcmVkIGluIGxpbmsgbGlzdCAqLwogCWxpc3RfZm9yX2VhY2gocG9zLCAmKGNhOTFjeDQyX2JyaWRnZS0+c2xhdmVfcmVzb3VyY2VzKSkgewpAQCAtMTIwNiwxNSArMTcxNCwxNyBAQAogCQlrZnJlZShtYXN0ZXJfaW1hZ2UpOwogCX0KIAotCWNhOTFjeDQyX2lycV9leGl0KHBkZXYpOworCWNhOTFjeDQyX2lycV9leGl0KGNhOTFjeDQyX2RldmljZSwgcGRldik7CiBlcnJfaXJxOgogZXJyX3Rlc3Q6Ci0JaW91bm1hcChjYTkxY3g0Ml9icmlkZ2UtPmJhc2UpOworCWlvdW5tYXAoY2E5MWN4NDJfZGV2aWNlLT5iYXNlKTsKIGVycl9yZW1hcDoKIAlwY2lfcmVsZWFzZV9yZWdpb25zKHBkZXYpOwogZXJyX3Jlc291cmNlOgogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKIGVycl9lbmFibGU6CisJa2ZyZWUoY2E5MWN4NDJfZGV2aWNlKTsKK2Vycl9kcml2ZXI6CiAJa2ZyZWUoY2E5MWN4NDJfYnJpZGdlKTsKIGVycl9zdHJ1Y3Q6CiAJcmV0dXJuIHJldHZhbDsKQEAgLTEyMjgsMzIgKzE3MzgsMzcgQEAKIAlzdHJ1Y3Qgdm1lX3NsYXZlX3Jlc291cmNlICpzbGF2ZV9pbWFnZTsKIAlzdHJ1Y3Qgdm1lX2RtYV9yZXNvdXJjZSAqZG1hX2N0cmxyOwogCXN0cnVjdCB2bWVfbG1fcmVzb3VyY2UgKmxtOworCXN0cnVjdCBjYTkxY3g0Ml9kcml2ZXIgKmJyaWRnZTsKKwlzdHJ1Y3Qgdm1lX2JyaWRnZSAqY2E5MWN4NDJfYnJpZGdlID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJYnJpZGdlID0gY2E5MWN4NDJfYnJpZGdlLT5kcml2ZXJfcHJpdjsKKwogCiAJLyogVHVybiBvZmYgSW50cyAqLwotCWlvd3JpdGUzMigwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBMSU5UX0VOKTsKKwlpb3dyaXRlMzIoMCwgYnJpZGdlLT5iYXNlICsgTElOVF9FTik7CiAKIAkvKiBUdXJuIG9mZiB0aGUgd2luZG93cyAqLwotCWlvd3JpdGUzMigweDAwODAwMDAwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBMU0kwX0NUTCk7Ci0JaW93cml0ZTMyKDB4MDA4MDAwMDAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIExTSTFfQ1RMKTsKLQlpb3dyaXRlMzIoMHgwMDgwMDAwMCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgTFNJMl9DVEwpOwotCWlvd3JpdGUzMigweDAwODAwMDAwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBMU0kzX0NUTCk7Ci0JaW93cml0ZTMyKDB4MDA4MDAwMDAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIExTSTRfQ1RMKTsKLQlpb3dyaXRlMzIoMHgwMDgwMDAwMCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgTFNJNV9DVEwpOwotCWlvd3JpdGUzMigweDAwODAwMDAwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBMU0k2X0NUTCk7Ci0JaW93cml0ZTMyKDB4MDA4MDAwMDAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIExTSTdfQ1RMKTsKLQlpb3dyaXRlMzIoMHgwMEYwMDAwMCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgVlNJMF9DVEwpOwotCWlvd3JpdGUzMigweDAwRjAwMDAwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBWU0kxX0NUTCk7Ci0JaW93cml0ZTMyKDB4MDBGMDAwMDAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIFZTSTJfQ1RMKTsKLQlpb3dyaXRlMzIoMHgwMEYwMDAwMCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgVlNJM19DVEwpOwotCWlvd3JpdGUzMigweDAwRjAwMDAwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBWU0k0X0NUTCk7Ci0JaW93cml0ZTMyKDB4MDBGMDAwMDAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIFZTSTVfQ1RMKTsKLQlpb3dyaXRlMzIoMHgwMEYwMDAwMCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgVlNJNl9DVEwpOwotCWlvd3JpdGUzMigweDAwRjAwMDAwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBWU0k3X0NUTCk7CisJaW93cml0ZTMyKDB4MDA4MDAwMDAsIGJyaWRnZS0+YmFzZSArIExTSTBfQ1RMKTsKKwlpb3dyaXRlMzIoMHgwMDgwMDAwMCwgYnJpZGdlLT5iYXNlICsgTFNJMV9DVEwpOworCWlvd3JpdGUzMigweDAwODAwMDAwLCBicmlkZ2UtPmJhc2UgKyBMU0kyX0NUTCk7CisJaW93cml0ZTMyKDB4MDA4MDAwMDAsIGJyaWRnZS0+YmFzZSArIExTSTNfQ1RMKTsKKwlpb3dyaXRlMzIoMHgwMDgwMDAwMCwgYnJpZGdlLT5iYXNlICsgTFNJNF9DVEwpOworCWlvd3JpdGUzMigweDAwODAwMDAwLCBicmlkZ2UtPmJhc2UgKyBMU0k1X0NUTCk7CisJaW93cml0ZTMyKDB4MDA4MDAwMDAsIGJyaWRnZS0+YmFzZSArIExTSTZfQ1RMKTsKKwlpb3dyaXRlMzIoMHgwMDgwMDAwMCwgYnJpZGdlLT5iYXNlICsgTFNJN19DVEwpOworCWlvd3JpdGUzMigweDAwRjAwMDAwLCBicmlkZ2UtPmJhc2UgKyBWU0kwX0NUTCk7CisJaW93cml0ZTMyKDB4MDBGMDAwMDAsIGJyaWRnZS0+YmFzZSArIFZTSTFfQ1RMKTsKKwlpb3dyaXRlMzIoMHgwMEYwMDAwMCwgYnJpZGdlLT5iYXNlICsgVlNJMl9DVEwpOworCWlvd3JpdGUzMigweDAwRjAwMDAwLCBicmlkZ2UtPmJhc2UgKyBWU0kzX0NUTCk7CisJaW93cml0ZTMyKDB4MDBGMDAwMDAsIGJyaWRnZS0+YmFzZSArIFZTSTRfQ1RMKTsKKwlpb3dyaXRlMzIoMHgwMEYwMDAwMCwgYnJpZGdlLT5iYXNlICsgVlNJNV9DVEwpOworCWlvd3JpdGUzMigweDAwRjAwMDAwLCBicmlkZ2UtPmJhc2UgKyBWU0k2X0NUTCk7CisJaW93cml0ZTMyKDB4MDBGMDAwMDAsIGJyaWRnZS0+YmFzZSArIFZTSTdfQ1RMKTsKIAogCXZtZV91bnJlZ2lzdGVyX2JyaWRnZShjYTkxY3g0Ml9icmlkZ2UpOwotI2lmIDAKLQljYTkxY3g0Ml9jcmNzcl9leGl0KHBkZXYpOwotI2VuZGlmCisKKwljYTkxY3g0Ml9jcmNzcl9leGl0KGNhOTFjeDQyX2JyaWRnZSwgcGRldik7CisKIAkvKiByZXNvdXJjZXMgYXJlIHN0b3JlZCBpbiBsaW5rIGxpc3QgKi8KIAlsaXN0X2Zvcl9lYWNoKHBvcywgJihjYTkxY3g0Ml9icmlkZ2UtPmxtX3Jlc291cmNlcykpIHsKIAkJbG0gPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHZtZV9sbV9yZXNvdXJjZSwgbGlzdCk7CkBAIC0xMjgzLDkgKzE3OTgsOSBAQAogCQlrZnJlZShtYXN0ZXJfaW1hZ2UpOwogCX0KIAotCWNhOTFjeDQyX2lycV9leGl0KHBkZXYpOworCWNhOTFjeDQyX2lycV9leGl0KGJyaWRnZSwgcGRldik7CiAKLQlpb3VubWFwKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSk7CisJaW91bm1hcChicmlkZ2UtPmJhc2UpOwogCiAJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKIApAQCAtMTI5OSw1ODggKzE4MTQsMTEgQEAKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmNhOTFjeDQyX2RyaXZlcik7CiB9CiAKK01PRFVMRV9QQVJNX0RFU0MoZ2VvaWQsICJPdmVycmlkZSBnZW9ncmFwaGljYWwgYWRkcmVzc2luZyIpOworbW9kdWxlX3BhcmFtKGdlb2lkLCBpbnQsIDApOworCiBNT0RVTEVfREVTQ1JJUFRJT04oIlZNRSBkcml2ZXIgZm9yIHRoZSBUdW5kcmEgVW5pdmVyc2UgSUkgVk1FIGJyaWRnZSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBtb2R1bGVfaW5pdChjYTkxY3g0Ml9pbml0KTsKIG1vZHVsZV9leGl0KGNhOTFjeDQyX2V4aXQpOwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAqIFNUQUdJTkcKLSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0jaWYgMAotI2RlZmluZQlTV0laWkxFKFgpICggKChYICYgMHhGRjAwMDAwMCkgPj4gMjQpIHwgKChYICYgMHgwMEZGMDAwMCkgPj4gIDgpIHwgKChYICYgMHgwMDAwRkYwMCkgPDwgIDgpIHwgKChYICYgMHgwMDAwMDBGRikgPDwgMjQpKQotCi1pbnQgY2E5MWN4NDJfbWFzdGVyX3Jtdyh2bWVSbXdDZmdfdCAqdm1lUm13KQotewotCWludCB0ZW1wX2N0bCA9IDA7Ci0JaW50IHRlbXBCUyA9IDA7Ci0JaW50IHRlbXBCRCA9IDA7Ci0JaW50IHRlbXBUTyA9IDA7Ci0JaW50IHZtZUJTID0gMDsKLQlpbnQgdm1lQkQgPSAwOwotCWludCAqcm13X3BjaV9kYXRhX3B0ciA9IE5VTEw7Ci0JaW50ICp2YURhdGFQdHIgPSBOVUxMOwotCWludCBpOwotCXZtZU91dFdpbmRvd0NmZ190IHZtZU91dDsKLQlpZiAodm1lUm13LT5tYXhBdHRlbXB0cyA8IDEpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmICh2bWVSbXctPnRhcmdldEFkZHJVKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkvKiBGaW5kIHRoZSBQQ0kgYWRkcmVzcyB0aGF0IG1hcHMgdG8gdGhlIGRlc2lyZWQgVk1FIGFkZHJlc3MgKi8KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCXRlbXBfY3RsID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsKLQkJCUNBOTFDWDQyX0xTSV9DVExbaV0pOwotCQlpZiAoKHRlbXBfY3RsICYgMHg4MDAwMDAwMCkgPT0gMCkgewotCQkJY29udGludWU7Ci0JCX0KLQkJbWVtc2V0KCZ2bWVPdXQsIDAsIHNpemVvZih2bWVPdXQpKTsKLQkJdm1lT3V0LndpbmRvd05iciA9IGk7Ci0JCWNhOTFjeDQyX2dldF9vdXRfYm91bmQoJnZtZU91dCk7Ci0JCWlmICh2bWVPdXQuYWRkclNwYWNlICE9IHZtZVJtdy0+YWRkclNwYWNlKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCQl0ZW1wQlMgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9MU0lfQlNbaV0pOwotCQl0ZW1wQkQgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9MU0lfQkRbaV0pOwotCQl0ZW1wVE8gPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBDQTkxQ1g0Ml9MU0lfVE9baV0pOwotCQl2bWVCUyA9IHRlbXBCUyArIHRlbXBUTzsKLQkJdm1lQkQgPSB0ZW1wQkQgKyB0ZW1wVE87Ci0JCWlmICgodm1lUm13LT50YXJnZXRBZGRyID49IHZtZUJTKSAmJgotCQkgICAgKHZtZVJtdy0+dGFyZ2V0QWRkciA8IHZtZUJEKSkgewotCQkJcm13X3BjaV9kYXRhX3B0ciA9Ci0JCQkgICAgKGludCAqKSh0ZW1wQlMgKyAodm1lUm13LT50YXJnZXRBZGRyIC0gdm1lQlMpKTsKLQkJCXZhRGF0YVB0ciA9Ci0JCQkgICAgKGludCAqKShvdXRfaW1hZ2VfdmFbaV0gKwotCQkJCSAgICAodm1lUm13LT50YXJnZXRBZGRyIC0gdm1lQlMpKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyogSWYgbm8gd2luZG93IC0gZmFpbC4gKi8KLQlpZiAocm13X3BjaV9kYXRhX3B0ciA9PSBOVUxMKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQkvKiBTZXR1cCB0aGUgUk1XIHJlZ2lzdGVycy4gKi8KLQlpb3dyaXRlMzIoMCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgU0NZQ19DVEwpOwotCWlvd3JpdGUzMihTV0laWkxFKHZtZVJtdy0+ZW5hYmxlTWFzayksIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIFNDWUNfRU4pOwotCWlvd3JpdGUzMihTV0laWkxFKHZtZVJtdy0+Y29tcGFyZURhdGEpLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKwotCQlTQ1lDX0NNUCk7Ci0JaW93cml0ZTMyKFNXSVpaTEUodm1lUm13LT5zd2FwRGF0YSksIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIFNDWUNfU1dQKTsKLQlpb3dyaXRlMzIoKGludClybXdfcGNpX2RhdGFfcHRyLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBTQ1lDX0FERFIpOwotCWlvd3JpdGUzMigxLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBTQ1lDX0NUTCk7Ci0KLQkvKiBSdW4gdGhlIFJNVyBjeWNsZSB1bnRpbCBlaXRoZXIgc3VjY2VzcyBvciBtYXggYXR0ZW1wdHMuICovCi0Jdm1lUm13LT5udW1BdHRlbXB0cyA9IDE7Ci0Jd2hpbGUgKHZtZVJtdy0+bnVtQXR0ZW1wdHMgPD0gdm1lUm13LT5tYXhBdHRlbXB0cykgewotCi0JCWlmICgoaW9yZWFkMzIodmFEYXRhUHRyKSAmIHZtZVJtdy0+ZW5hYmxlTWFzaykgPT0KLQkJICAgICh2bWVSbXctPnN3YXBEYXRhICYgdm1lUm13LT5lbmFibGVNYXNrKSkgewotCi0JCQlpb3dyaXRlMzIoMCwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgU0NZQ19DVEwpOwotCQkJYnJlYWs7Ci0KLQkJfQotCQl2bWVSbXctPm51bUF0dGVtcHRzKys7Ci0JfQotCi0JLyogSWYgbm8gc3VjY2Vzcywgc2V0IG51bSBBdHRlbXB0cyB0byBiZSBncmVhdGVyIHRoYW4gbWF4IGF0dGVtcHRzICovCi0JaWYgKHZtZVJtdy0+bnVtQXR0ZW1wdHMgPiB2bWVSbXctPm1heEF0dGVtcHRzKSB7Ci0JCXZtZVJtdy0+bnVtQXR0ZW1wdHMgPSB2bWVSbXctPm1heEF0dGVtcHRzICsgMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHVuaVNldHVwRGN0bFJlZyh2bWVEbWFQYWNrZXRfdCAqIHZtZURtYSwgaW50ICpkY3RscmVncmV0dXJuKQotewotCXVuc2lnbmVkIGludCBkY3RscmVnID0gMHg4MDsKLQlzdHJ1Y3Qgdm1lQXR0ciAqdm1lQXR0cjsKLQotCWlmICh2bWVEbWEtPnNyY0J1cyA9PSBWTUVfRE1BX1ZNRSkgewotCQlkY3RscmVnID0gMDsKLQkJdm1lQXR0ciA9ICZ2bWVEbWEtPnNyY1ZtZUF0dHI7Ci0JfSBlbHNlIHsKLQkJZGN0bHJlZyA9IDB4ODAwMDAwMDA7Ci0JCXZtZUF0dHIgPSAmdm1lRG1hLT5kc3RWbWVBdHRyOwotCX0KLQotCXN3aXRjaCAodm1lQXR0ci0+bWF4RGF0YVdpZHRoKSB7Ci0JY2FzZSBWTUVfRDg6Ci0JCWJyZWFrOwotCWNhc2UgVk1FX0QxNjoKLQkJZGN0bHJlZyB8PSAweDAwNDAwMDAwOwotCQlicmVhazsKLQljYXNlIFZNRV9EMzI6Ci0JCWRjdGxyZWcgfD0gMHgwMDgwMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBWTUVfRDY0OgotCQlkY3RscmVnIHw9IDB4MDBDMDAwMDA7Ci0JCWJyZWFrOwotCX0KLQotCXN3aXRjaCAodm1lQXR0ci0+YWRkclNwYWNlKSB7Ci0JY2FzZSBWTUVfQTE2OgotCQlicmVhazsKLQljYXNlIFZNRV9BMjQ6Ci0JCWRjdGxyZWcgfD0gMHgwMDAxMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBWTUVfQTMyOgotCQlkY3RscmVnIHw9IDB4MDAwMjAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgVk1FX1VTRVIxOgotCQlkY3RscmVnIHw9IDB4MDAwNjAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgVk1FX1VTRVIyOgotCQlkY3RscmVnIHw9IDB4MDAwNzAwMDA7Ci0JCWJyZWFrOwotCi0JY2FzZSBWTUVfQTY0OgkJLyogbm90IHN1cHBvcnRlZCBpbiBVbml2ZXJzZSBETUEgKi8KLQljYXNlIFZNRV9DUkNTUjoKLQljYXNlIFZNRV9VU0VSMzoKLQljYXNlIFZNRV9VU0VSNDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQlpZiAodm1lQXR0ci0+dXNlckFjY2Vzc1R5cGUgPT0gVk1FX1BST0cpIHsKLQkJZGN0bHJlZyB8PSAweDAwMDA0MDAwOwotCX0KLQlpZiAodm1lQXR0ci0+ZGF0YUFjY2Vzc1R5cGUgPT0gVk1FX1NVUEVSKSB7Ci0JCWRjdGxyZWcgfD0gMHgwMDAwMTAwMDsKLQl9Ci0JaWYgKHZtZUF0dHItPnhmZXJQcm90b2NvbCAhPSBWTUVfU0NUKSB7Ci0JCWRjdGxyZWcgfD0gMHgwMDAwMDEwMDsKLQl9Ci0JKmRjdGxyZWdyZXR1cm4gPSBkY3RscmVnOwotCXJldHVybiAwOwotfQotCi11bnNpZ25lZCBpbnQKLWNhOTFjeDQyX3N0YXJ0X2RtYShpbnQgY2hhbm5lbCwgdW5zaWduZWQgaW50IGRnY3NyZWcsIFRETUFfQ21kX1BhY2tldCAqdm1lTEwpCi17Ci0JdW5zaWduZWQgaW50IHZhbDsKLQotCS8qIFNldHVwIHJlZ2lzdGVycyBhcyBuZWVkZWQgZm9yIGRpcmVjdCBvciBjaGFpbmVkLiAqLwotCWlmIChkZ2NzcmVnICYgMHg4MDAwMDAwKSB7Ci0JCWlvd3JpdGUzMigwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBEVEJDKTsKLQkJaW93cml0ZTMyKCh1bnNpZ25lZCBpbnQpdm1lTEwsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIERDUFApOwotCX0gZWxzZSB7Ci0jaWYJMAotCQlwcmludGsoS0VSTl9FUlIgIlN0YXJ0aW5nOiBER0NTID0gJTA4eFxuIiwgZGdjc3JlZyk7Ci0JCXByaW50ayhLRVJOX0VSUiAiU3RhcnRpbmc6IERWQSAgPSAlMDh4XG4iLAotCQkJaW9yZWFkMzIoJnZtZUxMLT5kdmEpKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJTdGFydGluZzogRExWICA9ICUwOHhcbiIsCi0JCQlpb3JlYWQzMigmdm1lTEwtPmRsdikpOwotCQlwcmludGsoS0VSTl9FUlIgIlN0YXJ0aW5nOiBEVEJDID0gJTA4eFxuIiwKLQkJCWlvcmVhZDMyKCZ2bWVMTC0+ZHRiYykpOwotCQlwcmludGsoS0VSTl9FUlIgIlN0YXJ0aW5nOiBEQ1RMID0gJTA4eFxuIiwKLQkJCWlvcmVhZDMyKCZ2bWVMTC0+ZGN0bCkpOwotI2VuZGlmCi0JCS8qIFdyaXRlIHJlZ2lzdGVycyAqLwotCQlpb3dyaXRlMzIoaW9yZWFkMzIoJnZtZUxMLT5kdmEpLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBEVkEpOwotCQlpb3dyaXRlMzIoaW9yZWFkMzIoJnZtZUxMLT5kbHYpLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBETEEpOwotCQlpb3dyaXRlMzIoaW9yZWFkMzIoJnZtZUxMLT5kdGJjKSwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgRFRCQyk7Ci0JCWlvd3JpdGUzMihpb3JlYWQzMigmdm1lTEwtPmRjdGwpLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBEQ1RMKTsKLQkJaW93cml0ZTMyKDAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIERDUFApOwotCX0KLQotCS8qIFN0YXJ0IHRoZSBvcGVyYXRpb24gKi8KLQlpb3dyaXRlMzIoZGdjc3JlZywgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgREdDUyk7Ci0JdmFsID0gZ2V0X3RibCgpOwotCWlvd3JpdGUzMihkZ2NzcmVnIHwgMHg4MDAwMDAwRiwgY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgREdDUyk7Ci0JcmV0dXJuIHZhbDsKLX0KLQotVERNQV9DbWRfUGFja2V0ICpjYTkxY3g0Ml9zZXR1cF9kbWEodm1lRG1hUGFja2V0X3QgKiB2bWVEbWEpCi17Ci0Jdm1lRG1hUGFja2V0X3QgKnZtZUN1cjsKLQlpbnQgbWF4UGVyUGFnZTsKLQlpbnQgY3VycmVudExMY291bnQ7Ci0JVERNQV9DbWRfUGFja2V0ICpzdGFydExMOwotCVRETUFfQ21kX1BhY2tldCAqY3VycmVudExMOwotCVRETUFfQ21kX1BhY2tldCAqbmV4dExMOwotCXVuc2lnbmVkIGludCBkY3RscmVnID0gMDsKLQotCW1heFBlclBhZ2UgPSBQQUdFU0laRSAvIHNpemVvZihURE1BX0NtZF9QYWNrZXQpIC0gMTsKLQlzdGFydExMID0gKFRETUFfQ21kX1BhY2tldCAqKSBfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwsIDApOwotCWlmIChzdGFydExMID09IDApIHsKLQkJcmV0dXJuIHN0YXJ0TEw7Ci0JfQotCS8qIEZpcnN0IGFsbG9jYXRlIHBhZ2VzIGZvciBkZXNjcmlwdG9ycyBhbmQgY3JlYXRlIGxpbmtlZCBsaXN0ICovCi0Jdm1lQ3VyID0gdm1lRG1hOwotCWN1cnJlbnRMTCA9IHN0YXJ0TEw7Ci0JY3VycmVudExMY291bnQgPSAwOwotCXdoaWxlICh2bWVDdXIgIT0gMCkgewotCQlpZiAodm1lQ3VyLT5wTmV4dFBhY2tldCAhPSAwKSB7Ci0JCQljdXJyZW50TEwtPmRjcHAgPSAodW5zaWduZWQgaW50KShjdXJyZW50TEwgKyAxKTsKLQkJCWN1cnJlbnRMTGNvdW50Kys7Ci0JCQlpZiAoY3VycmVudExMY291bnQgPj0gbWF4UGVyUGFnZSkgewotCQkJCWN1cnJlbnRMTC0+ZGNwcCA9Ci0JCQkJICAgIF9fZ2V0X2ZyZWVfcGFnZXMoR0ZQX0tFUk5FTCwgMCk7Ci0JCQkJY3VycmVudExMY291bnQgPSAwOwotCQkJfQotCQkJY3VycmVudExMID0gKFRETUFfQ21kX1BhY2tldCAqKSBjdXJyZW50TEwtPmRjcHA7Ci0JCX0gZWxzZSB7Ci0JCQljdXJyZW50TEwtPmRjcHAgPSAodW5zaWduZWQgaW50KTA7Ci0JCX0KLQkJdm1lQ3VyID0gdm1lQ3VyLT5wTmV4dFBhY2tldDsKLQl9Ci0KLQkvKiBOZXh0IGZpbGwgaW4gaW5mb3JtYXRpb24gZm9yIGVhY2ggZGVzY3JpcHRvciAqLwotCXZtZUN1ciA9IHZtZURtYTsKLQljdXJyZW50TEwgPSBzdGFydExMOwotCXdoaWxlICh2bWVDdXIgIT0gMCkgewotCQlpZiAodm1lQ3VyLT5zcmNCdXMgPT0gVk1FX0RNQV9WTUUpIHsKLQkJCWlvd3JpdGUzMih2bWVDdXItPnNyY0FkZHIsICZjdXJyZW50TEwtPmR2YSk7Ci0JCQlpb3dyaXRlMzIodm1lQ3VyLT5kc3RBZGRyLCAmY3VycmVudExMLT5kbHYpOwotCQl9IGVsc2UgewotCQkJaW93cml0ZTMyKHZtZUN1ci0+c3JjQWRkciwgJmN1cnJlbnRMTC0+ZGx2KTsKLQkJCWlvd3JpdGUzMih2bWVDdXItPmRzdEFkZHIsICZjdXJyZW50TEwtPmR2YSk7Ci0JCX0KLQkJdW5pU2V0dXBEY3RsUmVnKHZtZUN1ciwgJmRjdGxyZWcpOwotCQlpb3dyaXRlMzIoZGN0bHJlZywgJmN1cnJlbnRMTC0+ZGN0bCk7Ci0JCWlvd3JpdGUzMih2bWVDdXItPmJ5dGVDb3VudCwgJmN1cnJlbnRMTC0+ZHRiYyk7Ci0KLQkJY3VycmVudExMID0gKFRETUFfQ21kX1BhY2tldCAqKSBjdXJyZW50TEwtPmRjcHA7Ci0JCXZtZUN1ciA9IHZtZUN1ci0+cE5leHRQYWNrZXQ7Ci0JfQotCi0JLyogQ29udmVydCBMaW5rcyB0byBQQ0kgYWRkcmVzc2VzLiAqLwotCWN1cnJlbnRMTCA9IHN0YXJ0TEw7Ci0Jd2hpbGUgKGN1cnJlbnRMTCAhPSAwKSB7Ci0JCW5leHRMTCA9IChURE1BX0NtZF9QYWNrZXQgKikgY3VycmVudExMLT5kY3BwOwotCQlpZiAobmV4dExMID09IDApIHsKLQkJCWlvd3JpdGUzMigxLCAmY3VycmVudExMLT5kY3BwKTsKLQkJfSBlbHNlIHsKLQkJCWlvd3JpdGUzMigodW5zaWduZWQgaW50KXZpcnRfdG9fYnVzKG5leHRMTCksCi0JCQkgICAgICAgJmN1cnJlbnRMTC0+ZGNwcCk7Ci0JCX0KLQkJY3VycmVudExMID0gbmV4dExMOwotCX0KLQotCS8qIFJldHVybiBwb2ludGVyIHRvIGRlc2NyaXB0b3JzIGxpc3QgKi8KLQlyZXR1cm4gc3RhcnRMTDsKLX0KLQotaW50IGNhOTFjeDQyX2ZyZWVfZG1hKFRETUFfQ21kX1BhY2tldCAqc3RhcnRMTCkKLXsKLQlURE1BX0NtZF9QYWNrZXQgKmN1cnJlbnRMTDsKLQlURE1BX0NtZF9QYWNrZXQgKnByZXZMTDsKLQlURE1BX0NtZF9QYWNrZXQgKm5leHRMTDsKLQl1bnNpZ25lZCBpbnQgZGNwcHJlZzsKLQotCS8qIENvbnZlcnQgTGlua3MgdG8gdmlydHVhbCBhZGRyZXNzZXMuICovCi0JY3VycmVudExMID0gc3RhcnRMTDsKLQl3aGlsZSAoY3VycmVudExMICE9IDApIHsKLQkJZGNwcHJlZyA9IGlvcmVhZDMyKCZjdXJyZW50TEwtPmRjcHApOwotCQlkY3BwcmVnICY9IH42OwotCQlpZiAoZGNwcHJlZyAmIDEpIHsKLQkJCWN1cnJlbnRMTC0+ZGNwcCA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQljdXJyZW50TEwtPmRjcHAgPSAodW5zaWduZWQgaW50KWJ1c190b192aXJ0KGRjcHByZWcpOwotCQl9Ci0JCWN1cnJlbnRMTCA9IChURE1BX0NtZF9QYWNrZXQgKikgY3VycmVudExMLT5kY3BwOwotCX0KLQotCS8qIEZyZWUgYWxsIHBhZ2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUgZGVzY3JpcHRvcnMuICovCi0JY3VycmVudExMID0gc3RhcnRMTDsKLQlwcmV2TEwgPSBjdXJyZW50TEw7Ci0Jd2hpbGUgKGN1cnJlbnRMTCAhPSAwKSB7Ci0JCW5leHRMTCA9IChURE1BX0NtZF9QYWNrZXQgKikgY3VycmVudExMLT5kY3BwOwotCQlpZiAoY3VycmVudExMICsgMSAhPSBuZXh0TEwpIHsKLQkJCWZyZWVfcGFnZXMoKGludClwcmV2TEwsIDApOwotCQkJcHJldkxMID0gbmV4dExMOwotCQl9Ci0JCWN1cnJlbnRMTCA9IG5leHRMTDsKLQl9Ci0KLQkvKiBSZXR1cm4gcG9pbnRlciB0byBkZXNjcmlwdG9ycyBsaXN0ICovCi0JcmV0dXJuIDA7Ci19Ci0KLWludCBjYTkxY3g0Ml9kb19kbWEodm1lRG1hUGFja2V0X3QgKnZtZURtYSkKLXsKLQl1bnNpZ25lZCBpbnQgZGdjc3JlZyA9IDA7Ci0JdW5zaWduZWQgaW50IGRjdGxyZWcgPSAwOwotCWludCB2YWw7Ci0JaW50IGNoYW5uZWwsIHg7Ci0Jdm1lRG1hUGFja2V0X3QgKmN1ckRtYTsKLQlURE1BX0NtZF9QYWNrZXQgKmRtYUxMOwotCi0JLyogU2FuaXR5IGNoZWNrIHRoZSBWTUUgY2hhaW4uICovCi0JY2hhbm5lbCA9IHZtZURtYS0+Y2hhbm5lbF9udW1iZXI7Ci0JaWYgKGNoYW5uZWwgPiAwKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQljdXJEbWEgPSB2bWVEbWE7Ci0Jd2hpbGUgKGN1ckRtYSAhPSAwKSB7Ci0JCWlmIChjdXJEbWEtPmJ5dGVDb3VudCA9PSAwKSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAoY3VyRG1hLT5ieXRlQ291bnQgPj0gMHgxMDAwMDAwKSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlpZiAoKGN1ckRtYS0+c3JjQWRkciAmIDcpICE9IChjdXJEbWEtPmRzdEFkZHIgJiA3KSkgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJc3dpdGNoIChjdXJEbWEtPnNyY0J1cykgewotCQljYXNlIFZNRV9ETUFfUENJOgotCQkJaWYgKGN1ckRtYS0+ZHN0QnVzICE9IFZNRV9ETUFfVk1FKSB7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBWTUVfRE1BX1ZNRToKLQkJCWlmIChjdXJEbWEtPmRzdEJ1cyAhPSBWTUVfRE1BX1BDSSkgewotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICh1bmlTZXR1cERjdGxSZWcoY3VyRG1hLCAmZGN0bHJlZykgPCAwKSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWN1ckRtYSA9IGN1ckRtYS0+cE5leHRQYWNrZXQ7Ci0JCWlmIChjdXJEbWEgPT0gdm1lRG1hKSB7CS8qIEVuZGxlc3MgTG9vcCEgKi8KLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JfQotCi0JLyogY2FsY3VsYXRlIGNvbnRyb2wgcmVnaXN0ZXIgKi8KLQlpZiAodm1lRG1hLT5wTmV4dFBhY2tldCAhPSAwKSB7Ci0JCWRnY3NyZWcgPSAweDgwMDAwMDA7Ci0JfSBlbHNlIHsKLQkJZGdjc3JlZyA9IDA7Ci0JfQotCi0JZm9yICh4ID0gMDsgeCA8IDg7IHgrKykgewkvKiB2bWUgYmxvY2sgc2l6ZSAqLwotCQlpZiAoKDI1NiA8PCB4KSA+PSB2bWVEbWEtPm1heFZtZUJsb2NrU2l6ZSkgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKHggPT0gOCkKLQkJeCA9IDc7Ci0JZGdjc3JlZyB8PSAoeCA8PCAyMCk7Ci0KLQlpZiAodm1lRG1hLT52bWVCYWNrT2ZmVGltZXIpIHsKLQkJZm9yICh4ID0gMTsgeCA8IDg7IHgrKykgewkvKiB2bWUgdGltZXIgKi8KLQkJCWlmICgoMTYgPDwgKHggLSAxKSkgPj0gdm1lRG1hLT52bWVCYWNrT2ZmVGltZXIpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAoeCA9PSA4KQotCQkJeCA9IDc7Ci0JCWRnY3NyZWcgfD0gKHggPDwgMTYpOwotCX0KLQkvKmAgU2V0dXAgdGhlIGRtYSBjaGFpbiAqLwotCWRtYUxMID0gY2E5MWN4NDJfc2V0dXBfZG1hKHZtZURtYSk7Ci0KLQkvKiBTdGFydCB0aGUgRE1BICovCi0JaWYgKGRnY3NyZWcgJiAweDgwMDAwMDApIHsKLQkJdm1lRG1hLT52bWVEbWFTdGFydFRpY2sgPQotCQkgICAgY2E5MWN4NDJfc3RhcnRfZG1hKGNoYW5uZWwsIGRnY3NyZWcsCi0JCQkJICAoVERNQV9DbWRfUGFja2V0ICopIHZpcnRfdG9fcGh5cyhkbWFMTCkpOwotCX0gZWxzZSB7Ci0JCXZtZURtYS0+dm1lRG1hU3RhcnRUaWNrID0KLQkJICAgIGNhOTFjeDQyX3N0YXJ0X2RtYShjaGFubmVsLCBkZ2NzcmVnLCBkbWFMTCk7Ci0JfQotCi0Jd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGRtYV9xdWV1ZSwKLQkJaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgREdDUykgJiAweDgwMCk7Ci0KLQl2YWwgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBER0NTKTsKLQlpb3dyaXRlMzIodmFsIHwgMHhGMDAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIERHQ1MpOwotCi0Jdm1lRG1hLT52bWVEbWFTdGF0dXMgPSAwOwotCi0JaWYgKCEodmFsICYgMHgwMDAwMDgwMCkpIHsKLQkJdm1lRG1hLT52bWVEbWFTdGF0dXMgPSB2YWwgJiAweDcwMDsKLQkJcHJpbnRrKEtFUk5fRVJSICJjYTkxYzA0MjogRE1BIEVycm9yIGluIGNhOTFjeDQyX0RNQV9pcnFoYW5kbGVyIgotCQkJIiBER0NTPSUwOFhcbiIsIHZhbCk7Ci0JCXZhbCA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIERDUFApOwotCQlwcmludGsoS0VSTl9FUlIgImNhOTFjMDQyOiBEQ1BQPSUwOFhcbiIsIHZhbCk7Ci0JCXZhbCA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIERDVEwpOwotCQlwcmludGsoS0VSTl9FUlIgImNhOTFjMDQyOiBEQ1RMPSUwOFhcbiIsIHZhbCk7Ci0JCXZhbCA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIERUQkMpOwotCQlwcmludGsoS0VSTl9FUlIgImNhOTFjMDQyOiBEVEJDPSUwOFhcbiIsIHZhbCk7Ci0JCXZhbCA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIERMQSk7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2E5MWMwNDI6IERMQT0lMDhYXG4iLCB2YWwpOwotCQl2YWwgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBEVkEpOwotCQlwcmludGsoS0VSTl9FUlIgImNhOTFjMDQyOiBEVkE9JTA4WFxuIiwgdmFsKTsKLQotCX0KLQkvKiBGcmVlIHRoZSBkbWEgY2hhaW4gKi8KLQljYTkxY3g0Ml9mcmVlX2RtYShkbWFMTCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGNhOTFjeDQyX2xtX3NldCh2bWVMbUNmZ190ICp2bWVMbSkKLXsKLQlpbnQgdGVtcF9jdGwgPSAwOwotCi0JaWYgKHZtZUxtLT5hZGRyVSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzd2l0Y2ggKHZtZUxtLT5hZGRyU3BhY2UpIHsKLQljYXNlIFZNRV9BNjQ6Ci0JY2FzZSBWTUVfVVNFUjM6Ci0JY2FzZSBWTUVfVVNFUjQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCWNhc2UgVk1FX0ExNjoKLQkJdGVtcF9jdGwgfD0gMHgwMDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBWTUVfQTI0OgotCQl0ZW1wX2N0bCB8PSAweDEwMDAwOwotCQlicmVhazsKLQljYXNlIFZNRV9BMzI6Ci0JCXRlbXBfY3RsIHw9IDB4MjAwMDA7Ci0JCWJyZWFrOwotCWNhc2UgVk1FX0NSQ1NSOgotCQl0ZW1wX2N0bCB8PSAweDUwMDAwOwotCQlicmVhazsKLQljYXNlIFZNRV9VU0VSMToKLQkJdGVtcF9jdGwgfD0gMHg2MDAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBWTUVfVVNFUjI6Ci0JCXRlbXBfY3RsIHw9IDB4NzAwMDA7Ci0JCWJyZWFrOwotCX0KLQotCS8qIERpc2FibGUgd2hpbGUgd2UgYXJlIG11Y2tpbmcgYXJvdW5kICovCi0JaW93cml0ZTMyKDB4MDAwMDAwMDAsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIExNX0NUTCk7Ci0KLQlpb3dyaXRlMzIodm1lTG0tPmFkZHIsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIExNX0JTKTsKLQotCS8qIFNldHVwIENUTCByZWdpc3Rlci4gKi8KLQlpZiAodm1lTG0tPnVzZXJBY2Nlc3NUeXBlICYgVk1FX1NVUEVSKQotCQl0ZW1wX2N0bCB8PSAweDAwMjAwMDAwOwotCWlmICh2bWVMbS0+dXNlckFjY2Vzc1R5cGUgJiBWTUVfVVNFUikKLQkJdGVtcF9jdGwgfD0gMHgwMDEwMDAwMDsKLQlpZiAodm1lTG0tPmRhdGFBY2Nlc3NUeXBlICYgVk1FX1BST0cpCi0JCXRlbXBfY3RsIHw9IDB4MDA4MDAwMDA7Ci0JaWYgKHZtZUxtLT5kYXRhQWNjZXNzVHlwZSAmIFZNRV9EQVRBKQotCQl0ZW1wX2N0bCB8PSAweDAwNDAwMDAwOwotCi0KLQkvKiBXcml0ZSBjdGwgcmVnIGFuZCBlbmFibGUgKi8KLQlpb3dyaXRlMzIoMHg4MDAwMDAwMCB8IHRlbXBfY3RsLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBMTV9DVEwpOwotCXRlbXBfY3RsID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgTE1fQ1RMKTsKLQotCXJldHVybiAwOwotfQotCi1pbnQgY2E5MWN4NDJfd2FpdF9sbSh2bWVMbUNmZ190ICp2bWVMbSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGludCB0bXA7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmbG1fbG9jaywgZmxhZ3MpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxtX2xvY2ssIGZsYWdzKTsKLQlpZiAodG1wID09IDApIHsKLQkJaWYgKHZtZUxtLT5sbVdhaXQgPCAxMCkKLQkJCXZtZUxtLT5sbVdhaXQgPSAxMDsKLQkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZsbV9xdWV1ZSwgdm1lTG0tPmxtV2FpdCk7Ci0JfQotCWlvd3JpdGUzMigweDAwMDAwMDAwLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBMTV9DVEwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotCi1pbnQgY2E5MWN4NDJfc2V0X2FyYml0ZXIodm1lQXJiaXRlckNmZ190ICp2bWVBcmIpCi17Ci0JaW50IHRlbXBfY3RsID0gMDsKLQlpbnQgdmJ0byA9IDA7Ci0KLQl0ZW1wX2N0bCA9IGlvcmVhZDMyKGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIE1JU0NfQ1RMKTsKLQl0ZW1wX2N0bCAmPSAweDAwRkZGRkZGOwotCi0JaWYgKHZtZUFyYi0+Z2xvYmFsVGltZW91dFRpbWVyID09IDB4RkZGRkZGRkYpIHsKLQkJdmJ0byA9IDc7Ci0JfSBlbHNlIGlmICh2bWVBcmItPmdsb2JhbFRpbWVvdXRUaW1lciA+IDEwMjQpIHsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfSBlbHNlIGlmICh2bWVBcmItPmdsb2JhbFRpbWVvdXRUaW1lciA9PSAwKSB7Ci0JCXZidG8gPSAwOwotCX0gZWxzZSB7Ci0JCXZidG8gPSAxOwotCQl3aGlsZSAoKDE2ICogKDEgPDwgKHZidG8gLSAxKSkpIDwgdm1lQXJiLT5nbG9iYWxUaW1lb3V0VGltZXIpCi0JCQl2YnRvICs9IDE7Ci0JfQotCXRlbXBfY3RsIHw9ICh2YnRvIDw8IDI4KTsKLQotCWlmICh2bWVBcmItPmFyYml0ZXJNb2RlID09IFZNRV9QUklPUklUWV9NT0RFKQotCQl0ZW1wX2N0bCB8PSAxIDw8IDI2OwotCi0JaWYgKHZtZUFyYi0+YXJiaXRlclRpbWVvdXRGbGFnKQotCQl0ZW1wX2N0bCB8PSAyIDw8IDI0OwotCi0JaW93cml0ZTMyKHRlbXBfY3RsLCBjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBNSVNDX0NUTCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBjYTkxY3g0Ml9nZXRfYXJiaXRlcih2bWVBcmJpdGVyQ2ZnX3QgKnZtZUFyYikKLXsKLQlpbnQgdGVtcF9jdGwgPSAwOwotCWludCB2YnRvID0gMDsKLQotCXRlbXBfY3RsID0gaW9yZWFkMzIoY2E5MWN4NDJfYnJpZGdlLT5iYXNlICsgTUlTQ19DVEwpOwotCi0JdmJ0byA9ICh0ZW1wX2N0bCA+PiAyOCkgJiAweEY7Ci0JaWYgKHZidG8gIT0gMCkKLQkJdm1lQXJiLT5nbG9iYWxUaW1lb3V0VGltZXIgPSAoMTYgKiAoMSA8PCAodmJ0byAtIDEpKSk7Ci0KLQlpZiAodGVtcF9jdGwgJiAoMSA8PCAyNikpCi0JCXZtZUFyYi0+YXJiaXRlck1vZGUgPSBWTUVfUFJJT1JJVFlfTU9ERTsKLQllbHNlCi0JCXZtZUFyYi0+YXJiaXRlck1vZGUgPSBWTUVfUl9ST0JJTl9NT0RFOwotCi0JaWYgKHRlbXBfY3RsICYgKDMgPDwgMjQpKQotCQl2bWVBcmItPmFyYml0ZXJUaW1lb3V0RmxhZyA9IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IGNhOTFjeDQyX3NldF9yZXF1ZXN0b3Iodm1lUmVxdWVzdGVyQ2ZnX3QgKnZtZVJlcSkKLXsKLQlpbnQgdGVtcF9jdGwgPSAwOwotCi0JdGVtcF9jdGwgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBNQVNUX0NUTCk7Ci0JdGVtcF9jdGwgJj0gMHhGRjBGRkZGRjsKLQotCWlmICh2bWVSZXEtPnJlbGVhc2VNb2RlID09IDEpCi0JCXRlbXBfY3RsIHw9ICgxIDw8IDIwKTsKLQotCWlmICh2bWVSZXEtPmZhaXJNb2RlID09IDEpCi0JCXRlbXBfY3RsIHw9ICgxIDw8IDIxKTsKLQotCXRlbXBfY3RsIHw9ICh2bWVSZXEtPnJlcXVlc3RMZXZlbCA8PCAyMik7Ci0KLQlpb3dyaXRlMzIodGVtcF9jdGwsIGNhOTFjeDQyX2JyaWRnZS0+YmFzZSArIE1BU1RfQ1RMKTsKLQlyZXR1cm4gMDsKLX0KLQotaW50IGNhOTFjeDQyX2dldF9yZXF1ZXN0b3Iodm1lUmVxdWVzdGVyQ2ZnX3QgKnZtZVJlcSkKLXsKLQlpbnQgdGVtcF9jdGwgPSAwOwotCi0JdGVtcF9jdGwgPSBpb3JlYWQzMihjYTkxY3g0Ml9icmlkZ2UtPmJhc2UgKyBNQVNUX0NUTCk7Ci0KLQlpZiAodGVtcF9jdGwgJiAoMSA8PCAyMCkpCi0JCXZtZVJlcS0+cmVsZWFzZU1vZGUgPSAxOwotCi0JaWYgKHRlbXBfY3RsICYgKDEgPDwgMjEpKQotCQl2bWVSZXEtPmZhaXJNb2RlID0gMTsKLQotCXZtZVJlcS0+cmVxdWVzdExldmVsID0gKHRlbXBfY3RsICYgMHhDMDAwMDApID4+IDIyOwotCi0JcmV0dXJuIDA7Ci19Ci0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmggYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX2NhOTFjeDQyLmgKaW5kZXggOTVhNDJjMi4uZTcyYzY1YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV9jYTkxY3g0Mi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfY2E5MWN4NDIuaApAQCAtNyw4ICs3LDggQEAKICAqIFVwZGF0ZWQgYnkgQWppdCBQcmVtCiAgKiBDb3B5cmlnaHQgMjAwNCBNb3Rvcm9sYSBJbmMuCiAgKgotICogRnVydGhlciB1cGRhdGVkIGJ5IE1hcnR5biBXZWxjaCA8bWFydHluLndlbGNoQGdlZmFudWMuY29tPgotICogQ29weXJpZ2h0IDIwMDkgR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KKyAqIEZ1cnRoZXIgdXBkYXRlZCBieSBNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZS5jb20+CisgKiBDb3B5cmlnaHQgMjAwOSBHRSBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgRW1iZWRkZWQgU3lzdGVtcywgSW5jLgogICoKICAqIERlcml2ZWQgZnJvbSBjYTkxYzA0Mi5oIGJ5IE1pY2hhZWwgV3lyaWNrCiAgKgpAQCAtMzcsMTEgKzM3LDI3IEBACiAjZGVmaW5lIENBOTFDMTQyX01BWF9ETUEJCTEJLyogTWF4IERNQSBDb250cm9sbGVycyAqLwogI2RlZmluZSBDQTkxQzE0Ml9NQVhfTUFJTEJPWAkJNAkvKiBNYXggTWFpbCBCb3ggcmVnaXN0ZXJzICovCiAKKy8qIFN0cnVjdHVyZSB1c2VkIHRvIGhvbGQgZHJpdmVyIHNwZWNpZmljIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgY2E5MWN4NDJfZHJpdmVyIHsKKwl2b2lkICpiYXNlOwkvKiBCYXNlIEFkZHJlc3Mgb2YgZGV2aWNlIHJlZ2lzdGVycyAqLworCXdhaXRfcXVldWVfaGVhZF90IGRtYV9xdWV1ZTsKKwl3YWl0X3F1ZXVlX2hlYWRfdCBpYWNrX3F1ZXVlOworCXdhaXRfcXVldWVfaGVhZF90IG1ib3hfcXVldWU7CisJdm9pZCAoKmxtX2NhbGxiYWNrWzRdKShpbnQpOwkvKiBDYWxsZWQgaW4gaW50ZXJydXB0IGhhbmRsZXIgKi8KKwl2b2lkICpjcmNzcl9rZXJuZWw7CisJZG1hX2FkZHJfdCBjcmNzcl9idXM7CisJc3RydWN0IG11dGV4IHZtZV9ybXc7CQkvKiBPbmx5IG9uZSBSTVcgY3ljbGUgYXQgYSB0aW1lICovCisJc3RydWN0IG11dGV4IHZtZV9pbnQ7CQkvKgorCQkJCQkgKiBPbmx5IG9uZSBWTUUgaW50ZXJydXB0IGNhbiBiZQorCQkJCQkgKiBnZW5lcmF0ZWQgYXQgYSB0aW1lLCBwcm92aWRlIGxvY2tpbmcKKwkJCQkJICovCit9OworCiAvKiBTZWUgUGFnZSAyLTc3IGluIHRoZSBVbml2ZXJzZSBVc2VyIE1hbnVhbCAqLwogc3RydWN0IGNhOTFjeDQyX2RtYV9kZXNjcmlwdG9yIHsKIAl1bnNpZ25lZCBpbnQgZGN0bDsgICAgICAvKiBETUEgQ29udHJvbCAqLwogCXVuc2lnbmVkIGludCBkdGJjOyAgICAgIC8qIFRyYW5zZmVyIEJ5dGUgQ291bnQgKi8KLQl1bnNpZ25lZCBpbnQgZGx2OyAgICAgICAvKiBQQ0kgQWRkcmVzcyAqLworCXVuc2lnbmVkIGludCBkbGE7ICAgICAgIC8qIFBDSSBBZGRyZXNzICovCiAJdW5zaWduZWQgaW50IHJlczE7ICAgICAgLyogUmVzZXJ2ZWQgKi8KIAl1bnNpZ25lZCBpbnQgZHZhOyAgICAgICAvKiBWbWUgQWRkcmVzcyAqLwogCXVuc2lnbmVkIGludCByZXMyOyAgICAgIC8qIFJlc2VydmVkICovCkBAIC0yMzcsMzIgKzI1Myw2IEBACiAjZGVmaW5lIFZDU1JfU0VUCQkweDBGRjgKICNkZWZpbmUgVkNTUl9CUwkJCTB4MEZGQwogCi0vLyBETUEgR2VuZXJhbCBDb250cm9sL1N0YXR1cyBSZWdpc3RlciBER0NTICgweDIyMCkKLS8vIDMyLTI0IHx8ICBHTyAgIHwgU1RPUFIgfCBIQUxUUiB8ICAgMCAgIHx8IENIQUlOIHwgICAwICAgfCAgIDAgICB8ICAgMCAgIHx8Ci0vLyAyMy0xNiB8fCAgICAgICAgICAgICAgVk9OICAgICAgICAgICAgICB8fCAgICAgICAgICAgICBWT0ZGICAgICAgICAgICAgICB8fAotLy8gMTUtMDggfHwgIEFDVCAgfCBTVE9QICB8IEhBTFQgIHwgICAwICAgfHwgRE9ORSAgfCBMRVJSICB8IFZFUlIgIHwgUF9FUlIgfHwKLS8vIDA3LTAwIHx8ICAgMCAgIHwgSU5UX1MgfCBJTlRfSCB8ICAgMCAgIHx8IElfRE5FIHwgSV9MRVIgfCBJX1ZFUiB8IElfUEVSIHx8Ci0KLS8vIFZPTiAtIExlbmd0aCBQZXIgRE1BIFZNRUJ1cyBUcmFuc2ZlcgotLy8gIDAwMDAgPSBOb25lCi0vLyAgMDAwMSA9IDI1NiBCeXRlcwotLy8gIDAwMTAgPSA1MTIKLS8vICAwMDExID0gMTAyNAotLy8gIDAxMDAgPSAyMDQ4Ci0vLyAgMDEwMSA9IDQwOTYKLS8vICAwMTEwID0gODE5MgotLy8gIDAxMTEgPSAxNjM4NAotCi0vLyBWT0ZGIC0gd2FpdCBiZXR3ZWVuIERNQSB0ZW51cmVzCi0vLyAgMDAwMCA9IDAgICAgdXMKLS8vICAwMDAxID0gMTYKLS8vICAwMDEwID0gMzIKLS8vICAwMDExID0gNjQKLS8vICAwMTAwID0gMTI4Ci0vLyAgMDEwMSA9IDI1NgotLy8gIDAxMTAgPSA1MTIKLS8vICAwMTExID0gMTAyNAotCiAvKgogICogUENJIENsYXNzIFJlZ2lzdGVyCiAgKiBvZmZzZXQgMDA4CkBAIC0zMjYsNiArMzE2LDE2IEBACiAjZGVmaW5lIENBOTFDWDQyX0xTSV9DVExfVkNUX01CTFQJKDE8PDgpCiAjZGVmaW5lIENBOTFDWDQyX0xTSV9DVExfTEFTCQkoMTw8MCkKIAorLyoKKyAqIFNDWUNfQ1RMIFJlZ2lzdGVyCisgKiBvZmZzZXQgMTc4CisgKi8KKyNkZWZpbmUgQ0E5MUNYNDJfU0NZQ19DVExfTEFTX1BDSU1FTQkwCisjZGVmaW5lIENBOTFDWDQyX1NDWUNfQ1RMX0xBU19QQ0lJTwkoMTw8MikKKworI2RlZmluZSBDQTkxQ1g0Ml9TQ1lDX0NUTF9DWUNfTQkJKDM8PDApCisjZGVmaW5lIENBOTFDWDQyX1NDWUNfQ1RMX0NZQ19STVcJKDE8PDApCisjZGVmaW5lIENBOTFDWDQyX1NDWUNfQ1RMX0NZQ19BRE9ICSgxPDwxKQogCiAvKgogICogTE1JU0MgUmVnaXN0ZXIKQEAgLTM1NSw2ICszNTUsNzEgQEAKICNkZWZpbmUgQ0E5MUNYNDJfQk1fU0xTSV9SRVNFUlZFRCAgICAgICAgICAgMHgzRjBGMDAwMAogCiAvKgorICogRENUTCBSZWdpc3RlcgorICogb2Zmc2V0IDIwMAorICovCisjZGVmaW5lIENBOTFDWDQyX0RDVExfTDJWCQkoMTw8MzEpCisjZGVmaW5lIENBOTFDWDQyX0RDVExfVkRXX00JCSgzPDwyMikKKyNkZWZpbmUgQ0E5MUNYNDJfRENUTF9WRFdfTQkJKDM8PDIyKQorI2RlZmluZSBDQTkxQ1g0Ml9EQ1RMX1ZEV19EOAkJMAorI2RlZmluZSBDQTkxQ1g0Ml9EQ1RMX1ZEV19EMTYJCSgxPDwyMikKKyNkZWZpbmUgQ0E5MUNYNDJfRENUTF9WRFdfRDMyCQkoMTw8MjMpCisjZGVmaW5lIENBOTFDWDQyX0RDVExfVkRXX0Q2NAkJKDM8PDIyKQorCisjZGVmaW5lIENBOTFDWDQyX0RDVExfVkFTX00JCSg3PDwxNikKKyNkZWZpbmUgQ0E5MUNYNDJfRENUTF9WQVNfQTE2CQkwCisjZGVmaW5lIENBOTFDWDQyX0RDVExfVkFTX0EyNAkJKDE8PDE2KQorI2RlZmluZSBDQTkxQ1g0Ml9EQ1RMX1ZBU19BMzIJCSgxPDwxNykKKyNkZWZpbmUgQ0E5MUNYNDJfRENUTF9WQVNfVVNFUjEJCSgzPDwxNykKKyNkZWZpbmUgQ0E5MUNYNDJfRENUTF9WQVNfVVNFUjIJCSg3PDwxNikKKworI2RlZmluZSBDQTkxQ1g0Ml9EQ1RMX1BHTV9NCQkoMTw8MTQpCisjZGVmaW5lIENBOTFDWDQyX0RDVExfUEdNX0RBVEEJCTAKKyNkZWZpbmUgQ0E5MUNYNDJfRENUTF9QR01fUEdNCQkoMTw8MTQpCisKKyNkZWZpbmUgQ0E5MUNYNDJfRENUTF9TVVBFUl9NCQkoMTw8MTIpCisjZGVmaW5lIENBOTFDWDQyX0RDVExfU1VQRVJfTlBSSVYJMAorI2RlZmluZSBDQTkxQ1g0Ml9EQ1RMX1NVUEVSX1NVUFIJKDE8PDEyKQorCisjZGVmaW5lIENBOTFDWDQyX0RDVExfVkNUX00JCSgxPDw4KQorI2RlZmluZSBDQTkxQ1g0Ml9EQ1RMX1ZDVF9CTFQJCSgxPDw4KQorI2RlZmluZSBDQTkxQ1g0Ml9EQ1RMX0xENjRFTgkJKDE8PDcpCisKKy8qCisgKiBEQ1BQIFJlZ2lzdGVyCisgKiBvZmZzZXQgMjE4CisgKi8KKyNkZWZpbmUgQ0E5MUNYNDJfRENQUF9NCQkJMHhmCisjZGVmaW5lIENBOTFDWDQyX0RDUFBfTlVMTAkJKDE8PDApCisKKy8qCisgKiBETUEgR2VuZXJhbCBDb250cm9sL1N0YXR1cyBSZWdpc3RlciAoREdDUykKKyAqIG9mZnNldCAyMjAKKyAqLworI2RlZmluZSBDQTkxQ1g0Ml9ER0NTX0dPCQkoMTw8MzEpCisjZGVmaW5lIENBOTFDWDQyX0RHQ1NfU1RPUF9SRVEJCSgxPDwzMCkKKyNkZWZpbmUgQ0E5MUNYNDJfREdDU19IQUxUX1JFUQkJKDE8PDI5KQorI2RlZmluZSBDQTkxQ1g0Ml9ER0NTX0NIQUlOCQkoMTw8MjcpCisKKyNkZWZpbmUgQ0E5MUNYNDJfREdDU19WT05fTQkJKDc8PDIwKQorCisjZGVmaW5lIENBOTFDWDQyX0RHQ1NfVk9GRl9NCQkoMHhmPDwxNikKKworI2RlZmluZSBDQTkxQ1g0Ml9ER0NTX0FDVAkJKDE8PDE1KQorI2RlZmluZSBDQTkxQ1g0Ml9ER0NTX1NUT1AJCSgxPDwxNCkKKyNkZWZpbmUgQ0E5MUNYNDJfREdDU19IQUxUCQkoMTw8MTMpCisjZGVmaW5lIENBOTFDWDQyX0RHQ1NfRE9ORQkJKDE8PDExKQorI2RlZmluZSBDQTkxQ1g0Ml9ER0NTX0xFUlIJCSgxPDwxMCkKKyNkZWZpbmUgQ0E5MUNYNDJfREdDU19WRVJSCQkoMTw8OSkKKyNkZWZpbmUgQ0E5MUNYNDJfREdDU19QRVJSCQkoMTw8OCkKKyNkZWZpbmUgQ0E5MUNYNDJfREdDU19JTlRfU1RPUAkJKDE8PDYpCisjZGVmaW5lIENBOTFDWDQyX0RHQ1NfSU5UX0hBTFQJCSgxPDw1KQorI2RlZmluZSBDQTkxQ1g0Ml9ER0NTX0lOVF9ET05FCQkoMTw8MykKKyNkZWZpbmUgQ0E5MUNYNDJfREdDU19JTlRfTEVSUgkJKDE8PDIpCisjZGVmaW5lIENBOTFDWDQyX0RHQ1NfSU5UX1ZFUlIJCSgxPDwxKQorI2RlZmluZSBDQTkxQ1g0Ml9ER0NTX0lOVF9QRVJSCQkoMTw8MCkKKworLyoKICAqIFBDSSBJbnRlcnJ1cHQgRW5hYmxlIFJlZ2lzdGVyCiAgKiBvZmZzZXQgIDMwMAogICovCkBAIC00NzUsNiArNTQwLDE5IEBACiAjZGVmaW5lIENBOTFDWDQyX1ZTSV9DVExfTEFTX1BDSV9JTwkoMTw8MCkKICNkZWZpbmUgQ0E5MUNYNDJfVlNJX0NUTF9MQVNfUENJX0NPTkYJKDE8PDEpCiAKKy8qIExNX0NUTCBSZWdpc3RlcgorICogb2Zmc2V0ICBGNjQKKyAqLworI2RlZmluZSBDQTkxQ1g0Ml9MTV9DVExfRU4JCSgxPDwzMSkKKyNkZWZpbmUgQ0E5MUNYNDJfTE1fQ1RMX1BHTQkJKDE8PDIzKQorI2RlZmluZSBDQTkxQ1g0Ml9MTV9DVExfREFUQQkJKDE8PDIyKQorI2RlZmluZSBDQTkxQ1g0Ml9MTV9DVExfU1VQUgkJKDE8PDIxKQorI2RlZmluZSBDQTkxQ1g0Ml9MTV9DVExfTlBSSVYJCSgxPDwyMCkKKyNkZWZpbmUgQ0E5MUNYNDJfTE1fQ1RMX0FTX00JCSg1PDwxNikKKyNkZWZpbmUgQ0E5MUNYNDJfTE1fQ1RMX0FTX0ExNgkJMAorI2RlZmluZSBDQTkxQ1g0Ml9MTV9DVExfQVNfQTI0CQkoMTw8MTYpCisjZGVmaW5lIENBOTFDWDQyX0xNX0NUTF9BU19BMzIJCSgxPDwxNykKKwogLyoKICAqIFZSQUlfQ1RMIFJlZ2lzdGVyCiAgKiBvZmZzZXQgIEY3MApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV90c2kxNDguYyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmMKaW5kZXggODlhN2RjYy4uZmFmNjUyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV90c2kxNDguYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5jCkBAIC0xLDggKzEsOCBAQAogLyoKICAqIFN1cHBvcnQgZm9yIHRoZSBUdW5kcmEgVFNJMTQ4IFZNRS1QQ0kgQnJpZGdlIENoaXAKICAqCi0gKiBBdXRob3I6IE1hcnR5biBXZWxjaCA8bWFydHluLndlbGNoQGdlZmFudWMuY29tPgotICogQ29weXJpZ2h0IDIwMDggR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KKyAqIEF1dGhvcjogTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2UuY29tPgorICogQ29weXJpZ2h0IDIwMDggR0UgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KICAqCiAgKiBCYXNlZCBvbiB3b3JrIGJ5IFRvbSBBcm1pc3RlYWQgYW5kIEFqaXQgUHJlbQogICogQ29weXJpZ2h0IDIwMDQgTW90b3JvbGEgSW5jLgpAQCAtNTksMjggKzU5LDE0IEBACiBpbnQgdHNpMTQ4X2RtYV9saXN0X2V4ZWMoc3RydWN0IHZtZV9kbWFfbGlzdCAqKTsKIGludCB0c2kxNDhfZG1hX2xpc3RfZW1wdHkoc3RydWN0IHZtZV9kbWFfbGlzdCAqKTsKIGludCB0c2kxNDhfZ2VuZXJhdGVfaXJxKGludCwgaW50KTsKLWludCB0c2kxNDhfc2xvdF9nZXQodm9pZCk7CiAKLS8qIE1vZHVlIHBhcmFtZXRlciAqLwotaW50IGVycl9jaGsgPSAwOwotCi0vKiBYWFggVGhlc2Ugc2hvdWxkIGFsbCBiZSBpbiBhIHBlciBkZXZpY2Ugc3RydWN0dXJlICovCi1zdHJ1Y3Qgdm1lX2JyaWRnZSAqdHNpMTQ4X2JyaWRnZTsKLXdhaXRfcXVldWVfaGVhZF90IGRtYV9xdWV1ZVsyXTsKLXdhaXRfcXVldWVfaGVhZF90IGlhY2tfcXVldWU7Ci12b2lkICgqbG1fY2FsbGJhY2tbNF0pKGludCk7CS8qIENhbGxlZCBpbiBpbnRlcnJ1cHQgaGFuZGxlciwgYmUgY2FyZWZ1bCEgKi8KLXZvaWQgKmNyY3NyX2tlcm5lbDsKLWRtYV9hZGRyX3QgY3Jjc3JfYnVzOwotc3RydWN0IHZtZV9tYXN0ZXJfcmVzb3VyY2UgKmZsdXNoX2ltYWdlOwotc3RydWN0IG11dGV4IHZtZV9ybXc7CS8qIE9ubHkgb25lIFJNVyBjeWNsZSBhdCBhIHRpbWUgKi8KLXN0cnVjdCBtdXRleCB2bWVfaW50OwkvKgotCQkJCSAqIE9ubHkgb25lIFZNRSBpbnRlcnJ1cHQgY2FuIGJlCi0JCQkJICogZ2VuZXJhdGVkIGF0IGEgdGltZSwgcHJvdmlkZSBsb2NraW5nCi0JCQkJICovCisvKiBNb2R1bGUgcGFyYW1ldGVyICovCitzdGF0aWMgaW50IGVycl9jaGs7CitzdGF0aWMgaW50IGdlb2lkOwogCiBzdGF0aWMgY2hhciBkcml2ZXJfbmFtZVtdID0gInZtZV90c2kxNDgiOwogCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgdHNpMTQ4X2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHRzaTE0OF9pZHNbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9UVU5EUkEsIFBDSV9ERVZJQ0VfSURfVFVORFJBX1RTSTE0OCkgfSwKIAl7IH0sCiB9OwpAQCAtMTA5LDE2ICs5NSwxNyBAQAogLyoKICAqIFdha2VzIHVwIERNQSBxdWV1ZS4KICAqLwotc3RhdGljIHUzMiB0c2kxNDhfRE1BX2lycWhhbmRsZXIoaW50IGNoYW5uZWxfbWFzaykKK3N0YXRpYyB1MzIgdHNpMTQ4X0RNQV9pcnFoYW5kbGVyKHN0cnVjdCB0c2kxNDhfZHJpdmVyICpicmlkZ2UsCisJaW50IGNoYW5uZWxfbWFzaykKIHsKIAl1MzIgc2VydmljZWQgPSAwOwogCiAJaWYgKGNoYW5uZWxfbWFzayAmIFRTSTE0OF9MQ1NSX0lOVFNfRE1BMFMpIHsKLQkJd2FrZV91cCgmZG1hX3F1ZXVlWzBdKTsKKwkJd2FrZV91cCgmKGJyaWRnZS0+ZG1hX3F1ZXVlWzBdKSk7CiAJCXNlcnZpY2VkIHw9IFRTSTE0OF9MQ1NSX0lOVENfRE1BMEM7CiAJfQogCWlmIChjaGFubmVsX21hc2sgJiBUU0kxNDhfTENTUl9JTlRTX0RNQTFTKSB7Ci0JCXdha2VfdXAoJmRtYV9xdWV1ZVsxXSk7CisJCXdha2VfdXAoJihicmlkZ2UtPmRtYV9xdWV1ZVsxXSkpOwogCQlzZXJ2aWNlZCB8PSBUU0kxNDhfTENTUl9JTlRDX0RNQTFDOwogCX0KIApAQCAtMTI4LDcgKzExNSw3IEBACiAvKgogICogV2FrZSB1cCBsb2NhdGlvbiBtb25pdG9yIHF1ZXVlCiAgKi8KLXN0YXRpYyB1MzIgdHNpMTQ4X0xNX2lycWhhbmRsZXIodTMyIHN0YXQpCitzdGF0aWMgdTMyIHRzaTE0OF9MTV9pcnFoYW5kbGVyKHN0cnVjdCB0c2kxNDhfZHJpdmVyICpicmlkZ2UsIHUzMiBzdGF0KQogewogCWludCBpOwogCXUzMiBzZXJ2aWNlZCA9IDA7CkBAIC0xMzYsNyArMTIzLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CiAJCWlmKHN0YXQgJiBUU0kxNDhfTENTUl9JTlRTX0xNU1tpXSkgewogCQkJLyogV2Ugb25seSBlbmFibGUgaW50ZXJydXB0cyBpZiB0aGUgY2FsbGJhY2sgaXMgc2V0ICovCi0JCQlsbV9jYWxsYmFja1tpXShpKTsKKwkJCWJyaWRnZS0+bG1fY2FsbGJhY2tbaV0oaSk7CiAJCQlzZXJ2aWNlZCB8PSBUU0kxNDhfTENTUl9JTlRDX0xNQ1tpXTsKIAkJfQogCX0KQEAgLTE0OSw3ICsxMzYsNyBAQAogICoKICAqIFhYWCBUaGlzIGZ1bmN0aW9uYWxpdHkgaXMgbm90IGV4cG9zZWQgdXAgdGhvdWdoIEFQSS4KICAqLwotc3RhdGljIHUzMiB0c2kxNDhfTUJfaXJxaGFuZGxlcih1MzIgc3RhdCkKK3N0YXRpYyB1MzIgdHNpMTQ4X01CX2lycWhhbmRsZXIoc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZSwgdTMyIHN0YXQpCiB7CiAJaW50IGk7CiAJdTMyIHZhbDsKQEAgLTE1Nyw4ICsxNDQsNyBAQAogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogCQlpZihzdGF0ICYgVFNJMTQ4X0xDU1JfSU5UU19NQlNbaV0pIHsKLQkJCXZhbCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArCi0JCQkJVFNJMTQ4X0dDU1JfTUJPWFtpXSk7CisJCQl2YWwgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArCVRTSTE0OF9HQ1NSX01CT1hbaV0pOwogCQkJcHJpbnRrKCJWTUUgTWFpbGJveCAlZCByZWNlaXZlZDogMHgleFxuIiwgaSwgdmFsKTsKIAkJCXNlcnZpY2VkIHw9IFRTSTE0OF9MQ1NSX0lOVENfTUJDW2ldOwogCQl9CkBAIC0xNzAsMjIgKzE1NiwyMSBAQAogLyoKICAqIERpc3BsYXkgZXJyb3IgJiBzdGF0dXMgbWVzc2FnZSB3aGVuIFBFUlIgKFBDSSkgZXhjZXB0aW9uIGludGVycnVwdCBvY2N1cnMuCiAgKi8KLXN0YXRpYyB1MzIgdHNpMTQ4X1BFUlJfaXJxaGFuZGxlcih2b2lkKQorc3RhdGljIHUzMiB0c2kxNDhfUEVSUl9pcnFoYW5kbGVyKHN0cnVjdCB0c2kxNDhfZHJpdmVyICpicmlkZ2UpCiB7CiAJcHJpbnRrKEtFUk5fRVJSCiAJCSJQQ0kgRXhjZXB0aW9uIGF0IGFkZHJlc3M6IDB4JTA4eDolMDh4LCBhdHRyaWJ1dGVzOiAlMDh4XG4iLAotCQlpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9FRFBBVSksCi0JCWlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0VEUEFMKSwKLQkJaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfRURQQVQpCisJCWlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfRURQQVUpLAorCQlpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0VEUEFMKSwKKwkJaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9FRFBBVCkKIAkJKTsKIAlwcmludGsoS0VSTl9FUlIKIAkJIlBDSS1YIGF0dHJpYnV0ZSByZWc6ICUwOHgsIFBDSS1YIHNwbGl0IGNvbXBsZXRpb24gcmVnOiAlMDh4XG4iLAotCQlpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9FRFBYQSksCi0JCWlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0VEUFhTKQorCQlpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0VEUFhBKSwKKwkJaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9FRFBYUykKIAkJKTsKIAotCWlvd3JpdGUzMmJlKFRTSTE0OF9MQ1NSX0VEUEFUX0VEUENMLAotCQl0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfRURQQVQpOworCWlvd3JpdGUzMmJlKFRTSTE0OF9MQ1NSX0VEUEFUX0VEUENMLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9FRFBBVCk7CiAKIAlyZXR1cm4gVFNJMTQ4X0xDU1JfSU5UQ19QRVJSQzsKIH0KQEAgLTE5MywxNiArMTc4LDE5IEBACiAvKgogICogU2F2ZSBhZGRyZXNzIGFuZCBzdGF0dXMgd2hlbiBWTUUgZXJyb3IgaW50ZXJydXB0IG9jY3Vycy4KICAqLwotc3RhdGljIHUzMiB0c2kxNDhfVkVSUl9pcnFoYW5kbGVyKHZvaWQpCitzdGF0aWMgdTMyIHRzaTE0OF9WRVJSX2lycWhhbmRsZXIoc3RydWN0IHZtZV9icmlkZ2UgKnRzaTE0OF9icmlkZ2UpCiB7CiAJdW5zaWduZWQgaW50IGVycm9yX2FkZHJfaGlnaCwgZXJyb3JfYWRkcl9sb3c7CiAJdW5zaWduZWQgbG9uZyBsb25nIGVycm9yX2FkZHI7CiAJdTMyIGVycm9yX2F0dHJpYjsKIAlzdHJ1Y3Qgdm1lX2J1c19lcnJvciAqZXJyb3I7CisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZTsKIAotCWVycm9yX2FkZHJfaGlnaCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZFQVUpOwotCWVycm9yX2FkZHJfbG93ID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVkVBTCk7Ci0JZXJyb3JfYXR0cmliID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVkVBVCk7CisJYnJpZGdlID0gdHNpMTQ4X2JyaWRnZS0+ZHJpdmVyX3ByaXY7CisKKwllcnJvcl9hZGRyX2hpZ2ggPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZFQVUpOworCWVycm9yX2FkZHJfbG93ID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WRUFMKTsKKwllcnJvcl9hdHRyaWIgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZFQVQpOwogCiAJcmVnX2pvaW4oZXJyb3JfYWRkcl9oaWdoLCBlcnJvcl9hZGRyX2xvdywgJmVycm9yX2FkZHIpOwogCkBAIC0yMjYsOCArMjE0LDcgQEAKIAl9CiAKIAkvKiBDbGVhciBTdGF0dXMgKi8KLQlpb3dyaXRlMzJiZShUU0kxNDhfTENTUl9WRUFUX1ZFU0NMLAotCQl0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVkVBVCk7CisJaW93cml0ZTMyYmUoVFNJMTQ4X0xDU1JfVkVBVF9WRVNDTCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVkVBVCk7CiAKIAlyZXR1cm4gVFNJMTQ4X0xDU1JfSU5UQ19WRVJSQzsKIH0KQEAgLTIzNSw5ICsyMjIsOSBAQAogLyoKICAqIFdha2UgdXAgSUFDSyBxdWV1ZS4KICAqLwotc3RhdGljIHUzMiB0c2kxNDhfSUFDS19pcnFoYW5kbGVyKHZvaWQpCitzdGF0aWMgdTMyIHRzaTE0OF9JQUNLX2lycWhhbmRsZXIoc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZSkKIHsKLQl3YWtlX3VwKCZpYWNrX3F1ZXVlKTsKKwl3YWtlX3VwKCYoYnJpZGdlLT5pYWNrX3F1ZXVlKSk7CiAKIAlyZXR1cm4gVFNJMTQ4X0xDU1JfSU5UQ19JQUNLQzsKIH0KQEAgLTI0NSw5ICsyMzIsMTMgQEAKIC8qCiAgKiBDYWxsaW5nIFZNRSBidXMgaW50ZXJydXB0IGNhbGxiYWNrIGlmIHByb3ZpZGVkLgogICovCi1zdGF0aWMgdTMyIHRzaTE0OF9WSVJRX2lycWhhbmRsZXIodTMyIHN0YXQpCitzdGF0aWMgdTMyIHRzaTE0OF9WSVJRX2lycWhhbmRsZXIoc3RydWN0IHZtZV9icmlkZ2UgKnRzaTE0OF9icmlkZ2UsCisJdTMyIHN0YXQpCiB7CiAJaW50IHZlYywgaSwgc2VydmljZWQgPSAwOworCXN0cnVjdCB0c2kxNDhfZHJpdmVyICpicmlkZ2U7CisKKwlicmlkZ2UgPSB0c2kxNDhfYnJpZGdlLT5kcml2ZXJfcHJpdjsKIAogCWZvciAoaSA9IDc7IGkgPiAwOyBpLS0pIHsKIAkJaWYgKHN0YXQgJiAoMSA8PCBpKSkgewpAQCAtMjU3LDggKzI0OCw3IEBACiAJCQkgKiAJOC1iaXQgSUFDSyBjeWNsZXMgb24gdGhlIGJ1cywgcmVhZCBmcm9tIG9mZnNldAogCQkJICogCTMuCiAJCQkgKi8KLQkJCXZlYyA9IGlvcmVhZDgodHNpMTQ4X2JyaWRnZS0+YmFzZSArCi0JCQkJVFNJMTQ4X0xDU1JfVklBQ0tbaV0gKyAzKTsKKwkJCXZlYyA9IGlvcmVhZDgoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVklBQ0tbaV0gKyAzKTsKIAogCQkJdm1lX2lycV9oYW5kbGVyKHRzaTE0OF9icmlkZ2UsIGksIHZlYyk7CiAKQEAgLTI3MywxMyArMjYzLDE5IEBACiAgKiBUb3AgbGV2ZWwgaW50ZXJydXB0IGhhbmRsZXIuICBDbGVhcnMgYXBwcm9wcmlhdGUgaW50ZXJydXB0IHN0YXR1cyBiaXRzIGFuZAogICogdGhlbiBjYWxscyBhcHByb3ByaWF0ZSBzdWIgaGFuZGxlcihzKS4KICAqLwotc3RhdGljIGlycXJldHVybl90IHRzaTE0OF9pcnFoYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCB0c2kxNDhfaXJxaGFuZGxlcihpbnQgaXJxLCB2b2lkICpwdHIpCiB7CiAJdTMyIHN0YXQsIGVuYWJsZSwgc2VydmljZWQgPSAwOworCXN0cnVjdCB2bWVfYnJpZGdlICp0c2kxNDhfYnJpZGdlOworCXN0cnVjdCB0c2kxNDhfZHJpdmVyICpicmlkZ2U7CisKKwl0c2kxNDhfYnJpZGdlID0gcHRyOworCisJYnJpZGdlID0gdHNpMTQ4X2JyaWRnZS0+ZHJpdmVyX3ByaXY7CiAKIAkvKiBEZXRlcm1pbmUgd2hpY2ggaW50ZXJydXB0cyBhcmUgdW5tYXNrZWQgYW5kIHNldCAqLwotCWVuYWJsZSA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVPKTsKLQlzdGF0ID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5UUyk7CisJZW5hYmxlID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTyk7CisJc3RhdCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5UUyk7CiAKIAkvKiBPbmx5IGxvb2sgYXQgdW5tYXNrZWQgaW50ZXJydXB0cyAqLwogCXN0YXQgJj0gZW5hYmxlOwpAQCAtMjkxLDYxICsyODcsNjMgQEAKIAkvKiBDYWxsIHN1YmhhbmRsZXJzIGFzIGFwcHJvcHJpYXRlICovCiAJLyogRE1BIGlycXMgKi8KIAlpZiAoc3RhdCAmIChUU0kxNDhfTENTUl9JTlRTX0RNQTFTIHwgVFNJMTQ4X0xDU1JfSU5UU19ETUEwUykpCi0JCXNlcnZpY2VkIHw9IHRzaTE0OF9ETUFfaXJxaGFuZGxlcihzdGF0KTsKKwkJc2VydmljZWQgfD0gdHNpMTQ4X0RNQV9pcnFoYW5kbGVyKGJyaWRnZSwgc3RhdCk7CiAKIAkvKiBMb2NhdGlvbiBtb25pdG9yIGlycXMgKi8KIAlpZiAoc3RhdCAmIChUU0kxNDhfTENTUl9JTlRTX0xNM1MgfCBUU0kxNDhfTENTUl9JTlRTX0xNMlMgfAogCQkJVFNJMTQ4X0xDU1JfSU5UU19MTTFTIHwgVFNJMTQ4X0xDU1JfSU5UU19MTTBTKSkKLQkJc2VydmljZWQgfD0gdHNpMTQ4X0xNX2lycWhhbmRsZXIoc3RhdCk7CisJCXNlcnZpY2VkIHw9IHRzaTE0OF9MTV9pcnFoYW5kbGVyKGJyaWRnZSwgc3RhdCk7CiAKIAkvKiBNYWlsIGJveCBpcnFzICovCiAJaWYgKHN0YXQgJiAoVFNJMTQ4X0xDU1JfSU5UU19NQjNTIHwgVFNJMTQ4X0xDU1JfSU5UU19NQjJTIHwKIAkJCVRTSTE0OF9MQ1NSX0lOVFNfTUIxUyB8IFRTSTE0OF9MQ1NSX0lOVFNfTUIwUykpCi0JCXNlcnZpY2VkIHw9IHRzaTE0OF9NQl9pcnFoYW5kbGVyKHN0YXQpOworCQlzZXJ2aWNlZCB8PSB0c2kxNDhfTUJfaXJxaGFuZGxlcihicmlkZ2UsIHN0YXQpOwogCiAJLyogUENJIGJ1cyBlcnJvciAqLwogCWlmIChzdGF0ICYgVFNJMTQ4X0xDU1JfSU5UU19QRVJSUykKLQkJc2VydmljZWQgfD0gdHNpMTQ4X1BFUlJfaXJxaGFuZGxlcigpOworCQlzZXJ2aWNlZCB8PSB0c2kxNDhfUEVSUl9pcnFoYW5kbGVyKGJyaWRnZSk7CiAKIAkvKiBWTUUgYnVzIGVycm9yICovCiAJaWYgKHN0YXQgJiBUU0kxNDhfTENTUl9JTlRTX1ZFUlJTKQotCQlzZXJ2aWNlZCB8PSB0c2kxNDhfVkVSUl9pcnFoYW5kbGVyKCk7CisJCXNlcnZpY2VkIHw9IHRzaTE0OF9WRVJSX2lycWhhbmRsZXIodHNpMTQ4X2JyaWRnZSk7CiAKIAkvKiBJQUNLIGlycSAqLwogCWlmIChzdGF0ICYgVFNJMTQ4X0xDU1JfSU5UU19JQUNLUykKLQkJc2VydmljZWQgfD0gdHNpMTQ4X0lBQ0tfaXJxaGFuZGxlcigpOworCQlzZXJ2aWNlZCB8PSB0c2kxNDhfSUFDS19pcnFoYW5kbGVyKGJyaWRnZSk7CiAKIAkvKiBWTUUgYnVzIGlycXMgKi8KIAlpZiAoc3RhdCAmIChUU0kxNDhfTENTUl9JTlRTX0lSUTdTIHwgVFNJMTQ4X0xDU1JfSU5UU19JUlE2UyB8CiAJCQlUU0kxNDhfTENTUl9JTlRTX0lSUTVTIHwgVFNJMTQ4X0xDU1JfSU5UU19JUlE0UyB8CiAJCQlUU0kxNDhfTENTUl9JTlRTX0lSUTNTIHwgVFNJMTQ4X0xDU1JfSU5UU19JUlEyUyB8CiAJCQlUU0kxNDhfTENTUl9JTlRTX0lSUTFTKSkKLQkJc2VydmljZWQgfD0gdHNpMTQ4X1ZJUlFfaXJxaGFuZGxlcihzdGF0KTsKKwkJc2VydmljZWQgfD0gdHNpMTQ4X1ZJUlFfaXJxaGFuZGxlcih0c2kxNDhfYnJpZGdlLCBzdGF0KTsKIAogCS8qIENsZWFyIHNlcnZpY2VkIGludGVycnVwdHMgKi8KLQlpb3dyaXRlMzJiZShzZXJ2aWNlZCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEMpOworCWlvd3JpdGUzMmJlKHNlcnZpY2VkLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRDKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCB0c2kxNDhfaXJxX2luaXQoc3RydWN0IHZtZV9icmlkZ2UgKmJyaWRnZSkKK3N0YXRpYyBpbnQgdHNpMTQ4X2lycV9pbml0KHN0cnVjdCB2bWVfYnJpZGdlICp0c2kxNDhfYnJpZGdlKQogewogCWludCByZXN1bHQ7CiAJdW5zaWduZWQgaW50IHRtcDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlOwogCi0JLyogTmVlZCBwZGV2ICovCi0gICAgICAgIHBkZXYgPSBjb250YWluZXJfb2YoYnJpZGdlLT5wYXJlbnQsIHN0cnVjdCBwY2lfZGV2LCBkZXYpOworCXBkZXYgPSBjb250YWluZXJfb2YodHNpMTQ4X2JyaWRnZS0+cGFyZW50LCBzdHJ1Y3QgcGNpX2RldiwgZGV2KTsKKworCWJyaWRnZSA9IHRzaTE0OF9icmlkZ2UtPmRyaXZlcl9wcml2OwogCiAJLyogSW5pdGlhbGlzZSBsaXN0IGZvciBWTUUgYnVzIGVycm9ycyAqLwotCUlOSVRfTElTVF9IRUFEKCYoYnJpZGdlLT52bWVfZXJyb3JzKSk7CisJSU5JVF9MSVNUX0hFQUQoJih0c2kxNDhfYnJpZGdlLT52bWVfZXJyb3JzKSk7CiAKLQltdXRleF9pbml0KCYoYnJpZGdlLT5pcnFfbXR4KSk7CisJbXV0ZXhfaW5pdCgmKHRzaTE0OF9icmlkZ2UtPmlycV9tdHgpKTsKIAogCXJlc3VsdCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwKIAkJCSAgICAgdHNpMTQ4X2lycWhhbmRsZXIsCiAJCQkgICAgIElSUUZfU0hBUkVELAotCQkJICAgICBkcml2ZXJfbmFtZSwgcGRldik7CisJCQkgICAgIGRyaXZlcl9uYW1lLCB0c2kxNDhfYnJpZGdlKTsKIAlpZiAocmVzdWx0KSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNhbid0IGdldCBhc3NpZ25lZCBwY2kgaXJxIHZlY3RvciAlMDJYXG4iLAogCQkJcGRldi0+aXJxKTsKQEAgLTM1OSw3ICszNTcsNyBAQAogCQlUU0kxNDhfTENTUl9JTlRFT19QRVJSRU8gfCBUU0kxNDhfTENTUl9JTlRFT19WRVJSRU8gfAogCQlUU0kxNDhfTENTUl9JTlRFT19JQUNLRU87CiAKLQkvKiBYWFggVGhpcyBsZWF2ZXMgdGhlIGZvbGxvd2luZyBpbnRlcnJ1cHRzIG1hc2tlZC4KKwkvKiBUaGlzIGxlYXZlcyB0aGUgZm9sbG93aW5nIGludGVycnVwdHMgbWFza2VkLgogCSAqIFRTSTE0OF9MQ1NSX0lOVEVPX1ZJRUVPCiAJICogVFNJMTQ4X0xDU1JfSU5URU9fU1lTRkxFTwogCSAqIFRTSTE0OF9MQ1NSX0lOVEVPX0FDRkxFTwpAQCAtMzkyLDE0ICszOTAsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdHNpMTQ4X2lycV9leGl0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIHZvaWQgdHNpMTQ4X2lycV9leGl0KHN0cnVjdCB0c2kxNDhfZHJpdmVyICpicmlkZ2UsIHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCS8qIFR1cm4gb2ZmIGludGVycnVwdHMgKi8KLQlpb3dyaXRlMzJiZSgweDAsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTyk7Ci0JaW93cml0ZTMyYmUoMHgwLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU4pOworCWlvd3JpdGUzMmJlKDB4MCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU8pOworCWlvd3JpdGUzMmJlKDB4MCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU4pOwogCiAJLyogQ2xlYXIgYWxsIGludGVycnVwdHMgKi8KLQlpb3dyaXRlMzJiZSgweEZGRkZGRkZGLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5UQyk7CisJaW93cml0ZTMyYmUoMHhGRkZGRkZGRiwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5UQyk7CiAKIAkvKiBEZXRhY2ggaW50ZXJydXB0IGhhbmRsZXIgKi8KIAlmcmVlX2lycShwZGV2LT5pcnEsIHBkZXYpOwpAQCAtNDA4LDExICs0MDYsMTEgQEAKIC8qCiAgKiBDaGVjayB0byBzZWUgaWYgYW4gSUFDayBoYXMgYmVlbiByZWNlaXZlZCwgcmV0dXJuIHRydWUgKDEpIG9yIGZhbHNlICgwKS4KICAqLwotaW50IHRzaTE0OF9pYWNrX3JlY2VpdmVkKHZvaWQpCitpbnQgdHNpMTQ4X2lhY2tfcmVjZWl2ZWQoc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZSkKIHsKIAl1MzIgdG1wOwogCi0JdG1wID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVklDUik7CisJdG1wID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WSUNSKTsKIAogCWlmICh0bXAgJiBUU0kxNDhfTENTUl9WSUNSX0lSUVMpCiAJCXJldHVybiAwOwpAQCAtNDIzLDIwICs0MjEsMjQgQEAKIC8qCiAgKiBDb25maWd1cmUgVk1FIGludGVycnVwdAogICovCi12b2lkIHRzaTE0OF9pcnFfc2V0KGludCBsZXZlbCwgaW50IHN0YXRlLCBpbnQgc3luYykKK3ZvaWQgdHNpMTQ4X2lycV9zZXQoc3RydWN0IHZtZV9icmlkZ2UgKnRzaTE0OF9icmlkZ2UsIGludCBsZXZlbCwKKwlpbnQgc3RhdGUsIGludCBzeW5jKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCXUzMiB0bXA7CisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZTsKKworCWJyaWRnZSA9IHRzaTE0OF9icmlkZ2UtPmRyaXZlcl9wcml2OwogCiAJLyogV2UgbmVlZCB0byBkbyB0aGUgb3JkZXJpbmcgZGlmZmVyZW50bHkgZm9yIGVuYWJsaW5nIGFuZCBkaXNhYmxpbmcgKi8KIAlpZiAoc3RhdGUgPT0gMCkgewotCQl0bXAgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTik7CisJCXRtcCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU4pOwogCQl0bXAgJj0gflRTSTE0OF9MQ1NSX0lOVEVOX0lSUUVOW2xldmVsIC0gMV07Ci0JCWlvd3JpdGUzMmJlKHRtcCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVOKTsKKwkJaW93cml0ZTMyYmUodG1wLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTik7CiAKLQkJdG1wID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU8pOworCQl0bXAgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVPKTsKIAkJdG1wICY9IH5UU0kxNDhfTENTUl9JTlRFT19JUlFFT1tsZXZlbCAtIDFdOwotCQlpb3dyaXRlMzJiZSh0bXAsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTyk7CisJCWlvd3JpdGUzMmJlKHRtcCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU8pOwogCiAJCWlmIChzeW5jICE9IDApIHsKIAkJCXBkZXYgPSBjb250YWluZXJfb2YodHNpMTQ4X2JyaWRnZS0+cGFyZW50LApAQCAtNDQ1LDEzICs0NDcsMTMgQEAKIAkJCXN5bmNocm9uaXplX2lycShwZGV2LT5pcnEpOwogCQl9CiAJfSBlbHNlIHsKLQkJdG1wID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU8pOworCQl0bXAgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVPKTsKIAkJdG1wIHw9IFRTSTE0OF9MQ1NSX0lOVEVPX0lSUUVPW2xldmVsIC0gMV07Ci0JCWlvd3JpdGUzMmJlKHRtcCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVPKTsKKwkJaW93cml0ZTMyYmUodG1wLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTyk7CiAKLQkJdG1wID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU4pOworCQl0bXAgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVOKTsKIAkJdG1wIHw9IFRTSTE0OF9MQ1NSX0lOVEVOX0lSUUVOW2xldmVsIC0gMV07Ci0JCWlvd3JpdGUzMmJlKHRtcCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVOKTsKKwkJaW93cml0ZTMyYmUodG1wLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTik7CiAJfQogfQogCkBAIC00NTksMjggKzQ2MSwzMiBAQAogICogR2VuZXJhdGUgYSBWTUUgYnVzIGludGVycnVwdCBhdCB0aGUgcmVxdWVzdGVkIGxldmVsICYgdmVjdG9yLiBXYWl0IGZvcgogICogaW50ZXJydXB0IHRvIGJlIGFja2VkLgogICovCi1pbnQgdHNpMTQ4X2lycV9nZW5lcmF0ZShpbnQgbGV2ZWwsIGludCBzdGF0aWQpCitpbnQgdHNpMTQ4X2lycV9nZW5lcmF0ZShzdHJ1Y3Qgdm1lX2JyaWRnZSAqdHNpMTQ4X2JyaWRnZSwgaW50IGxldmVsLCBpbnQgc3RhdGlkKQogewogCXUzMiB0bXA7CisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZTsKIAotCW11dGV4X2xvY2soJih2bWVfaW50KSk7CisJYnJpZGdlID0gdHNpMTQ4X2JyaWRnZS0+ZHJpdmVyX3ByaXY7CisKKwltdXRleF9sb2NrKCYoYnJpZGdlLT52bWVfaW50KSk7CiAKIAkvKiBSZWFkIFZJQ1IgcmVnaXN0ZXIgKi8KLQl0bXAgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WSUNSKTsKKwl0bXAgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZJQ1IpOwogCiAJLyogU2V0IFN0YXR1cy9JRCAqLwogCXRtcCA9ICh0bXAgJiB+VFNJMTQ4X0xDU1JfVklDUl9TVElEX00pIHwKIAkJKHN0YXRpZCAmIFRTSTE0OF9MQ1NSX1ZJQ1JfU1RJRF9NKTsKLQlpb3dyaXRlMzJiZSh0bXAsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WSUNSKTsKKwlpb3dyaXRlMzJiZSh0bXAsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZJQ1IpOwogCiAJLyogQXNzZXJ0IFZNRWJ1cyBJUlEgKi8KIAl0bXAgPSB0bXAgfCBUU0kxNDhfTENTUl9WSUNSX0lSUUxbbGV2ZWxdOwotCWlvd3JpdGUzMmJlKHRtcCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZJQ1IpOworCWlvd3JpdGUzMmJlKHRtcCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVklDUik7CiAKIAkvKiBYWFggQ29uc2lkZXIgaW1wbGVtZW50aW5nIGEgdGltZW91dD8gKi8KLQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoaWFja19xdWV1ZSwgdHNpMTQ4X2lhY2tfcmVjZWl2ZWQoKSk7CisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGJyaWRnZS0+aWFja19xdWV1ZSwKKwkJdHNpMTQ4X2lhY2tfcmVjZWl2ZWQoYnJpZGdlKSk7CiAKLQltdXRleF91bmxvY2soJih2bWVfaW50KSk7CisJbXV0ZXhfdW5sb2NrKCYoYnJpZGdlLT52bWVfaW50KSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ4OCw4ICs0OTQsOCBAQAogLyoKICAqIEZpbmQgdGhlIGZpcnN0IGVycm9yIGluIHRoaXMgYWRkcmVzcyByYW5nZQogICovCi1zdGF0aWMgc3RydWN0IHZtZV9idXNfZXJyb3IgKnRzaTE0OF9maW5kX2Vycm9yKHZtZV9hZGRyZXNzX3QgYXNwYWNlLAotCXVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyZXNzLCBzaXplX3QgY291bnQpCitzdGF0aWMgc3RydWN0IHZtZV9idXNfZXJyb3IgKnRzaTE0OF9maW5kX2Vycm9yKHN0cnVjdCB2bWVfYnJpZGdlICp0c2kxNDhfYnJpZGdlLAorCXZtZV9hZGRyZXNzX3QgYXNwYWNlLCB1bnNpZ25lZCBsb25nIGxvbmcgYWRkcmVzcywgc2l6ZV90IGNvdW50KQogewogCXN0cnVjdCBsaXN0X2hlYWQgKmVycl9wb3M7CiAJc3RydWN0IHZtZV9idXNfZXJyb3IgKnZtZV9lcnIsICp2YWxpZCA9IE5VTEw7CkBAIC01MjAsOCArNTI2LDggQEAKIC8qCiAgKiBDbGVhciBlcnJvcnMgaW4gdGhlIHByb3ZpZGVkIGFkZHJlc3MgcmFuZ2UuCiAgKi8KLXN0YXRpYyB2b2lkIHRzaTE0OF9jbGVhcl9lcnJvcnModm1lX2FkZHJlc3NfdCBhc3BhY2UsCi0JdW5zaWduZWQgbG9uZyBsb25nIGFkZHJlc3MsIHNpemVfdCBjb3VudCkKK3N0YXRpYyB2b2lkIHRzaTE0OF9jbGVhcl9lcnJvcnMoc3RydWN0IHZtZV9icmlkZ2UgKnRzaTE0OF9icmlkZ2UsCisJdm1lX2FkZHJlc3NfdCBhc3BhY2UsIHVuc2lnbmVkIGxvbmcgbG9uZyBhZGRyZXNzLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqZXJyX3BvcywgKnRlbXA7CiAJc3RydWN0IHZtZV9idXNfZXJyb3IgKnZtZV9lcnI7CkBAIC01NjEsMTYgKzU2Nyw5IEBACiAJdW5zaWduZWQgaW50IHZtZV9ib3VuZF9sb3csIHZtZV9ib3VuZF9oaWdoOwogCXVuc2lnbmVkIGludCBwY2lfb2Zmc2V0X2xvdywgcGNpX29mZnNldF9oaWdoOwogCXVuc2lnbmVkIGxvbmcgbG9uZyB2bWVfYm91bmQsIHBjaV9vZmZzZXQ7CisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZTsKIAotI2lmIDAKLSAgICAgICAgcHJpbnRrKCJTZXQgc2xhdmUgaW1hZ2UgJWQgdG86XG4iLCBpbWFnZS0+bnVtYmVyKTsKLSAJcHJpbnRrKCJcdEVuYWJsZWQ6ICVzXG4iLCAoZW5hYmxlZCA9PSAxKT8gInllcyIgOiAibm8iKTsKLQlwcmludGsoIlx0Vk1FIEJhc2U6MHglbGx4XG4iLCB2bWVfYmFzZSk7Ci0JcHJpbnRrKCJcdFdpbmRvdyBTaXplOjB4JWxseFxuIiwgc2l6ZSk7Ci0JcHJpbnRrKCJcdFBDSSBCYXNlOjB4JWx4XG4iLCAodW5zaWduZWQgbG9uZylwY2lfYmFzZSk7Ci0JcHJpbnRrKCJcdEFkZHJlc3MgU3BhY2U6MHgleFxuIiwgYXNwYWNlKTsKLQlwcmludGsoIlx0VHJhbnNmZXIgQ3ljbGUgUHJvcGVydGllczoweCV4XG4iLCBjeWNsZSk7Ci0jZW5kaWYKKwlicmlkZ2UgPSBpbWFnZS0+cGFyZW50LT5kcml2ZXJfcHJpdjsKIAogCWkgPSBpbWFnZS0+bnVtYmVyOwogCkBAIC02MjcsNDkgKzYyNiwyNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLSNpZiAwCi0JcHJpbnRrKCJcdFZNRSBCb3VuZDoweCVsbHhcbiIsIHZtZV9ib3VuZCk7Ci0JcHJpbnRrKCJcdFBDSSBPZmZzZXQ6MHglbGx4XG4iLCBwY2lfb2Zmc2V0KTsKLSNlbmRpZgotCiAJLyogIERpc2FibGUgd2hpbGUgd2UgYXJlIG11Y2tpbmcgYXJvdW5kICovCi0JdGVtcF9jdGwgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCisJdGVtcF9jdGwgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX0lUQVQpOwogCXRlbXBfY3RsICY9IH5UU0kxNDhfTENTUl9JVEFUX0VOOwotCWlvd3JpdGUzMmJlKHRlbXBfY3RsLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKworCWlvd3JpdGUzMmJlKHRlbXBfY3RsLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9JVEFUKTsKIAogCS8qIFNldHVwIG1hcHBpbmcgKi8KLQlpb3dyaXRlMzJiZSh2bWVfYmFzZV9oaWdoLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKworCWlvd3JpdGUzMmJlKHZtZV9iYXNlX2hpZ2gsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX0lUU0FVKTsKLQlpb3dyaXRlMzJiZSh2bWVfYmFzZV9sb3csIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCisJaW93cml0ZTMyYmUodm1lX2Jhc2VfbG93LCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9JVFNBTCk7Ci0JaW93cml0ZTMyYmUodm1lX2JvdW5kX2hpZ2gsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCisJaW93cml0ZTMyYmUodm1lX2JvdW5kX2hpZ2gsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX0lURUFVKTsKLQlpb3dyaXRlMzJiZSh2bWVfYm91bmRfbG93LCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKworCWlvd3JpdGUzMmJlKHZtZV9ib3VuZF9sb3csIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX0lURUFMKTsKLQlpb3dyaXRlMzJiZShwY2lfb2Zmc2V0X2hpZ2gsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCisJaW93cml0ZTMyYmUocGNpX29mZnNldF9oaWdoLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9JVE9GVSk7Ci0JaW93cml0ZTMyYmUocGNpX29mZnNldF9sb3csIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCisJaW93cml0ZTMyYmUocGNpX29mZnNldF9sb3csIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX0lUT0ZMKTsKIAotLyogWFhYIFByZWZldGNoIHN0dWZmIGN1cnJlbnRseSB1bnN1cHBvcnRlZCAqLwotI2lmIDAKLQotCWZvciAoeCA9IDA7IHggPCA0OyB4KyspIHsKLQkJaWYgKCg2NCA8PCB4KSA+PSB2bWVJbi0+cHJlZmV0Y2hTaXplKSB7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoeCA9PSA0KQotCQl4LS07Ci0JdGVtcF9jdGwgfD0gKHggPDwgMTYpOwotCi0JaWYgKHZtZUluLT5wcmVmZXRjaFRocmVzaG9sZCkKLQkJaWYgKHZtZUluLT5wcmVmZXRjaFRocmVzaG9sZCkKLQkJCXRlbXBfY3RsIHw9IDB4NDAwMDA7Ci0jZW5kaWYKLQogCS8qIFNldHVwIDJlU1NUIHNwZWVkcyAqLwogCXRlbXBfY3RsICY9IH5UU0kxNDhfTENTUl9JVEFUXzJlU1NUTV9NOwogCXN3aXRjaCAoY3ljbGUgJiAoVk1FXzJlU1NUMTYwIHwgVk1FXzJlU1NUMjY3IHwgVk1FXzJlU1NUMzIwKSkgewpAQCAtNzEyLDEzICs2ODksMTMgQEAKIAkJdGVtcF9jdGwgfD0gVFNJMTQ4X0xDU1JfSVRBVF9EQVRBOwogCiAJLyogV3JpdGUgY3RsIHJlZyB3aXRob3V0IGVuYWJsZSAqLwotCWlvd3JpdGUzMmJlKHRlbXBfY3RsLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKworCWlvd3JpdGUzMmJlKHRlbXBfY3RsLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9JVEFUKTsKIAogCWlmIChlbmFibGVkKQogCQl0ZW1wX2N0bCB8PSBUU0kxNDhfTENTUl9JVEFUX0VOOwogCi0JaW93cml0ZTMyYmUodGVtcF9jdGwsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCisJaW93cml0ZTMyYmUodGVtcF9jdGwsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX0lUQVQpOwogCiAJcmV0dXJuIDA7CkBAIC03MjYsOCArNzAzLDYgQEAKIAogLyoKICAqIEdldCBzbGF2ZSB3aW5kb3cgY29uZmlndXJhdGlvbi4KLSAqCi0gKiBYWFggUHJlZmV0Y2ggY3VycmVudGx5IHVuc3VwcG9ydGVkLgogICovCiBpbnQgdHNpMTQ4X3NsYXZlX2dldChzdHJ1Y3Qgdm1lX3NsYXZlX3Jlc291cmNlICppbWFnZSwgaW50ICplbmFibGVkLAogCXVuc2lnbmVkIGxvbmcgbG9uZyAqdm1lX2Jhc2UsIHVuc2lnbmVkIGxvbmcgbG9uZyAqc2l6ZSwKQEAgLTczOCwyNSArNzEzLDI3IEBACiAJdW5zaWduZWQgaW50IHZtZV9ib3VuZF9sb3csIHZtZV9ib3VuZF9oaWdoOwogCXVuc2lnbmVkIGludCBwY2lfb2Zmc2V0X2xvdywgcGNpX29mZnNldF9oaWdoOwogCXVuc2lnbmVkIGxvbmcgbG9uZyB2bWVfYm91bmQsIHBjaV9vZmZzZXQ7CisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZTsKIAorCWJyaWRnZSA9IGltYWdlLT5wYXJlbnQtPmRyaXZlcl9wcml2OwogCiAJaSA9IGltYWdlLT5udW1iZXI7CiAKIAkvKiBSZWFkIHJlZ2lzdGVycyAqLwotCWN0bCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKKwljdGwgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX0lUQVQpOwogCi0Jdm1lX2Jhc2VfaGlnaCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKKwl2bWVfYmFzZV9oaWdoID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9JVFNBVSk7Ci0Jdm1lX2Jhc2VfbG93ID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKworCXZtZV9iYXNlX2xvdyA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfSVRTQUwpOwotCXZtZV9ib3VuZF9oaWdoID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKworCXZtZV9ib3VuZF9oaWdoID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9JVEVBVSk7Ci0Jdm1lX2JvdW5kX2xvdyA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKKwl2bWVfYm91bmRfbG93ID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9JVEVBTCk7Ci0JcGNpX29mZnNldF9oaWdoID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKworCXBjaV9vZmZzZXRfaGlnaCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfSVRPRlUpOwotCXBjaV9vZmZzZXRfbG93ID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSVRbaV0gKworCXBjaV9vZmZzZXRfbG93ID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9JVE9GTCk7CiAKIAkvKiBDb252ZXJ0IDY0LWJpdCB2YXJpYWJsZXMgdG8gMnggMzItYml0IHZhcmlhYmxlcyAqLwpAQCAtODMzLDYgKzgxMCw5IEBACiAJdW5zaWduZWQgbG9uZyBsb25nIGV4aXN0aW5nX3NpemU7CiAJaW50IHJldHZhbCA9IDA7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CisJc3RydWN0IHZtZV9icmlkZ2UgKnRzaTE0OF9icmlkZ2U7CisKKwl0c2kxNDhfYnJpZGdlID0gaW1hZ2UtPnBhcmVudDsKIAogCS8qIEZpbmQgcGNpX2RldiBjb250YWluZXIgb2YgZGV2ICovCiAgICAgICAgIGlmICh0c2kxNDhfYnJpZGdlLT5wYXJlbnQgPT0gTlVMTCkgewpAQCAtODQxLDggKzgyMSw4IEBACiAgICAgICAgIH0KICAgICAgICAgcGRldiA9IGNvbnRhaW5lcl9vZih0c2kxNDhfYnJpZGdlLT5wYXJlbnQsIHN0cnVjdCBwY2lfZGV2LCBkZXYpOwogCi0JZXhpc3Rpbmdfc2l6ZSA9ICh1bnNpZ25lZCBsb25nIGxvbmcpKGltYWdlLT5wY2lfcmVzb3VyY2UuZW5kIC0KLQkJaW1hZ2UtPnBjaV9yZXNvdXJjZS5zdGFydCk7CisJZXhpc3Rpbmdfc2l6ZSA9ICh1bnNpZ25lZCBsb25nIGxvbmcpKGltYWdlLT5idXNfcmVzb3VyY2UuZW5kIC0KKwkJaW1hZ2UtPmJ1c19yZXNvdXJjZS5zdGFydCk7CiAKIAkvKiBJZiB0aGUgZXhpc3Rpbmcgc2l6ZSBpcyBPSywgcmV0dXJuICovCiAJaWYgKChzaXplICE9IDApICYmIChleGlzdGluZ19zaXplID09IChzaXplIC0gMSkpKQpAQCAtODUxLDEwICs4MzEsMTAgQEAKIAlpZiAoZXhpc3Rpbmdfc2l6ZSAhPSAwKSB7CiAJCWlvdW5tYXAoaW1hZ2UtPmtlcm5fYmFzZSk7CiAJCWltYWdlLT5rZXJuX2Jhc2UgPSBOVUxMOwotCQlpZiAoaW1hZ2UtPnBjaV9yZXNvdXJjZS5uYW1lICE9IE5VTEwpCi0JCQlrZnJlZShpbWFnZS0+cGNpX3Jlc291cmNlLm5hbWUpOwotCQlyZWxlYXNlX3Jlc291cmNlKCYoaW1hZ2UtPnBjaV9yZXNvdXJjZSkpOwotCQltZW1zZXQoJihpbWFnZS0+cGNpX3Jlc291cmNlKSwgMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkpOworCQlpZiAoaW1hZ2UtPmJ1c19yZXNvdXJjZS5uYW1lICE9IE5VTEwpCisJCQlrZnJlZShpbWFnZS0+YnVzX3Jlc291cmNlLm5hbWUpOworCQlyZWxlYXNlX3Jlc291cmNlKCYoaW1hZ2UtPmJ1c19yZXNvdXJjZSkpOworCQltZW1zZXQoJihpbWFnZS0+YnVzX3Jlc291cmNlKSwgMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkpOwogCX0KIAogCS8qIEV4aXQgaGVyZSBpZiBzaXplIGlzIHplcm8gKi8KQEAgLTg2Miw5ICs4NDIsOSBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoaW1hZ2UtPnBjaV9yZXNvdXJjZS5uYW1lID09IE5VTEwpIHsKLQkJaW1hZ2UtPnBjaV9yZXNvdXJjZS5uYW1lID0ga21hbGxvYyhWTUVOQU1TSVorMywgR0ZQX0tFUk5FTCk7Ci0JCWlmIChpbWFnZS0+cGNpX3Jlc291cmNlLm5hbWUgPT0gTlVMTCkgeworCWlmIChpbWFnZS0+YnVzX3Jlc291cmNlLm5hbWUgPT0gTlVMTCkgeworCQlpbWFnZS0+YnVzX3Jlc291cmNlLm5hbWUgPSBrbWFsbG9jKFZNRU5BTVNJWiszLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGltYWdlLT5idXNfcmVzb3VyY2UubmFtZSA9PSBOVUxMKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHJlc291cmNlIgogCQkJCSIgbmFtZVxuIik7CiAJCQlyZXR2YWwgPSAtRU5PTUVNOwpAQCAtODcyLDI2ICs4NTIsMjYgQEAKIAkJfQogCX0KIAotCXNwcmludGYoKGNoYXIgKilpbWFnZS0+cGNpX3Jlc291cmNlLm5hbWUsICIlcy4lZCIsIHRzaTE0OF9icmlkZ2UtPm5hbWUsCisJc3ByaW50ZigoY2hhciAqKWltYWdlLT5idXNfcmVzb3VyY2UubmFtZSwgIiVzLiVkIiwgdHNpMTQ4X2JyaWRnZS0+bmFtZSwKIAkJaW1hZ2UtPm51bWJlcik7CiAKLQlpbWFnZS0+cGNpX3Jlc291cmNlLnN0YXJ0ID0gMDsKLQlpbWFnZS0+cGNpX3Jlc291cmNlLmVuZCA9ICh1bnNpZ25lZCBsb25nKXNpemU7Ci0JaW1hZ2UtPnBjaV9yZXNvdXJjZS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCWltYWdlLT5idXNfcmVzb3VyY2Uuc3RhcnQgPSAwOworCWltYWdlLT5idXNfcmVzb3VyY2UuZW5kID0gKHVuc2lnbmVkIGxvbmcpc2l6ZTsKKwlpbWFnZS0+YnVzX3Jlc291cmNlLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CiAKIAlyZXR2YWwgPSBwY2lfYnVzX2FsbG9jX3Jlc291cmNlKHBkZXYtPmJ1cywKLQkJJihpbWFnZS0+cGNpX3Jlc291cmNlKSwgc2l6ZSwgc2l6ZSwgUENJQklPU19NSU5fTUVNLAorCQkmKGltYWdlLT5idXNfcmVzb3VyY2UpLCBzaXplLCBzaXplLCBQQ0lCSU9TX01JTl9NRU0sCiAJCTAsIE5VTEwsIE5VTEwpOwogCWlmIChyZXR2YWwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtIHJlc291cmNlIGZvciAiCiAJCQkid2luZG93ICVkIHNpemUgMHglbHggc3RhcnQgMHglbHhcbiIsCiAJCQlpbWFnZS0+bnVtYmVyLCAodW5zaWduZWQgbG9uZylzaXplLAotCQkJKHVuc2lnbmVkIGxvbmcpaW1hZ2UtPnBjaV9yZXNvdXJjZS5zdGFydCk7CisJCQkodW5zaWduZWQgbG9uZylpbWFnZS0+YnVzX3Jlc291cmNlLnN0YXJ0KTsKIAkJZ290byBlcnJfcmVzb3VyY2U7CiAJfQogCiAJaW1hZ2UtPmtlcm5fYmFzZSA9IGlvcmVtYXBfbm9jYWNoZSgKLQkJaW1hZ2UtPnBjaV9yZXNvdXJjZS5zdGFydCwgc2l6ZSk7CisJCWltYWdlLT5idXNfcmVzb3VyY2Uuc3RhcnQsIHNpemUpOwogCWlmIChpbWFnZS0+a2Vybl9iYXNlID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVtYXAgcmVzb3VyY2VcbiIpOwogCQlyZXR2YWwgPSAtRU5PTUVNOwpAQCAtOTAzLDEwICs4ODMsMTAgQEAKIAlpb3VubWFwKGltYWdlLT5rZXJuX2Jhc2UpOwogCWltYWdlLT5rZXJuX2Jhc2UgPSBOVUxMOwogZXJyX3JlbWFwOgotCXJlbGVhc2VfcmVzb3VyY2UoJihpbWFnZS0+cGNpX3Jlc291cmNlKSk7CisJcmVsZWFzZV9yZXNvdXJjZSgmKGltYWdlLT5idXNfcmVzb3VyY2UpKTsKIGVycl9yZXNvdXJjZToKLQlrZnJlZShpbWFnZS0+cGNpX3Jlc291cmNlLm5hbWUpOwotCW1lbXNldCgmKGltYWdlLT5wY2lfcmVzb3VyY2UpLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CisJa2ZyZWUoaW1hZ2UtPmJ1c19yZXNvdXJjZS5uYW1lKTsKKwltZW1zZXQoJihpbWFnZS0+YnVzX3Jlc291cmNlKSwgMCwgc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkpOwogZXJyX25hbWU6CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTkxOCw5ICs4OTgsOSBAQAogewogCWlvdW5tYXAoaW1hZ2UtPmtlcm5fYmFzZSk7CiAJaW1hZ2UtPmtlcm5fYmFzZSA9IE5VTEw7Ci0JcmVsZWFzZV9yZXNvdXJjZSgmKGltYWdlLT5wY2lfcmVzb3VyY2UpKTsKLQlrZnJlZShpbWFnZS0+cGNpX3Jlc291cmNlLm5hbWUpOwotCW1lbXNldCgmKGltYWdlLT5wY2lfcmVzb3VyY2UpLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CisJcmVsZWFzZV9yZXNvdXJjZSgmKGltYWdlLT5idXNfcmVzb3VyY2UpKTsKKwlrZnJlZShpbWFnZS0+YnVzX3Jlc291cmNlLm5hbWUpOworCW1lbXNldCgmKGltYWdlLT5idXNfcmVzb3VyY2UpLCAwLCBzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CiB9CiAKIC8qCkBAIC05MzcsNiArOTE3LDkgQEAKIAl1bnNpZ25lZCBpbnQgcGNpX2JvdW5kX2xvdywgcGNpX2JvdW5kX2hpZ2g7CiAJdW5zaWduZWQgaW50IHZtZV9vZmZzZXRfbG93LCB2bWVfb2Zmc2V0X2hpZ2g7CiAJdW5zaWduZWQgbG9uZyBsb25nIHBjaV9ib3VuZCwgdm1lX29mZnNldCwgcGNpX2Jhc2U7CisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZTsKKworCWJyaWRnZSA9IGltYWdlLT5wYXJlbnQtPmRyaXZlcl9wcml2OwogCiAJLyogVmVyaWZ5IGlucHV0IGRhdGEgKi8KIAlpZiAodm1lX2Jhc2UgJiAweEZGRkYpIHsKQEAgLTk3MCw3ICs5NTMsNyBAQAogCQlwY2lfYm91bmQgPSAwOwogCQl2bWVfb2Zmc2V0ID0gMDsKIAl9IGVsc2UgewotCQlwY2lfYmFzZSA9ICh1bnNpZ25lZCBsb25nIGxvbmcpaW1hZ2UtPnBjaV9yZXNvdXJjZS5zdGFydDsKKwkJcGNpX2Jhc2UgPSAodW5zaWduZWQgbG9uZyBsb25nKWltYWdlLT5idXNfcmVzb3VyY2Uuc3RhcnQ7CiAKIAkJLyoKIAkJICogQm91bmQgYWRkcmVzcyBpcyBhIHZhbGlkIGFkZHJlc3MgZm9yIHRoZSB3aW5kb3csIGFkanVzdApAQCAtMTAwNywyNiArOTkwLDEyIEBACiAJaSA9IGltYWdlLT5udW1iZXI7CiAKIAkvKiBEaXNhYmxlIHdoaWxlIHdlIGFyZSBtdWNraW5nIGFyb3VuZCAqLwotCXRlbXBfY3RsID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKworCXRlbXBfY3RsID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9PVEFUKTsKIAl0ZW1wX2N0bCAmPSB+VFNJMTQ4X0xDU1JfT1RBVF9FTjsKLQlpb3dyaXRlMzJiZSh0ZW1wX2N0bCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKKwlpb3dyaXRlMzJiZSh0ZW1wX2N0bCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfT1RBVCk7CiAKLS8qIFhYWCBQcmVmZXRjaCBzdHVmZiBjdXJyZW50bHkgdW5zdXBwb3J0ZWQgKi8KLSNpZiAwCi0JaWYgKHZtZU91dC0+cHJlZmV0Y2hFbmFibGUpIHsKLQkJdGVtcF9jdGwgfD0gMHg0MDAwMDsKLQkJZm9yICh4ID0gMDsgeCA8IDQ7IHgrKykgewotCQkJaWYgKCgyIDw8IHgpID49IHZtZU91dC0+cHJlZmV0Y2hTaXplKQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmICh4ID09IDQpCi0JCQl4ID0gMzsKLQkJdGVtcF9jdGwgfD0gKHggPDwgMTYpOwotCX0KLSNlbmRpZgotCiAJLyogU2V0dXAgMmVTU1Qgc3BlZWRzICovCiAJdGVtcF9jdGwgJj0gflRTSTE0OF9MQ1NSX09UQVRfMmVTU1RNX007CiAJc3dpdGNoIChjeWNsZSAmIChWTUVfMmVTU1QxNjAgfCBWTUVfMmVTU1QyNjcgfCBWTUVfMmVTU1QzMjApKSB7CkBAIC0xMTI2LDMzICsxMDk1LDI3IEBACiAJCXRlbXBfY3RsIHw9IFRTSTE0OF9MQ1NSX09UQVRfUEdNOwogCiAJLyogU2V0dXAgbWFwcGluZyAqLwotCWlvd3JpdGUzMmJlKHBjaV9iYXNlX2hpZ2gsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCisJaW93cml0ZTMyYmUocGNpX2Jhc2VfaGlnaCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfT1RTQVUpOwotCWlvd3JpdGUzMmJlKHBjaV9iYXNlX2xvdywgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKKwlpb3dyaXRlMzJiZShwY2lfYmFzZV9sb3csIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX09UU0FMKTsKLQlpb3dyaXRlMzJiZShwY2lfYm91bmRfaGlnaCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKKwlpb3dyaXRlMzJiZShwY2lfYm91bmRfaGlnaCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfT1RFQVUpOwotCWlvd3JpdGUzMmJlKHBjaV9ib3VuZF9sb3csIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCisJaW93cml0ZTMyYmUocGNpX2JvdW5kX2xvdywgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfT1RFQUwpOwotCWlvd3JpdGUzMmJlKHZtZV9vZmZzZXRfaGlnaCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKKwlpb3dyaXRlMzJiZSh2bWVfb2Zmc2V0X2hpZ2gsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX09UT0ZVKTsKLQlpb3dyaXRlMzJiZSh2bWVfb2Zmc2V0X2xvdywgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKKwlpb3dyaXRlMzJiZSh2bWVfb2Zmc2V0X2xvdywgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfT1RPRkwpOwogCi0vKiBYWFggV2UgbmVlZCB0byBkZWFsIHdpdGggT1RCUyAqLwotI2lmIDAKLQlpb3dyaXRlMzJiZSh2bWVPdXQtPmJjYXN0U2VsZWN0MmVzc3QsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKwotCQlUU0kxNDhfTENTUl9PVFtpXSArIFRTSTE0OF9MQ1NSX09GRlNFVF9PVEJTKTsKLSNlbmRpZgotCiAJLyogV3JpdGUgY3RsIHJlZyB3aXRob3V0IGVuYWJsZSAqLwotCWlvd3JpdGUzMmJlKHRlbXBfY3RsLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKworCWlvd3JpdGUzMmJlKHRlbXBfY3RsLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9PVEFUKTsKIAogCWlmIChlbmFibGVkKQogCQl0ZW1wX2N0bCB8PSBUU0kxNDhfTENTUl9PVEFUX0VOOwogCi0JaW93cml0ZTMyYmUodGVtcF9jdGwsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCisJaW93cml0ZTMyYmUodGVtcF9jdGwsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX09UQVQpOwogCiAJc3Bpbl91bmxvY2soJihpbWFnZS0+bG9jaykpOwpAQCAtMTE4MywyMyArMTE0NiwyNiBAQAogCXVuc2lnbmVkIGludCB2bWVfb2Zmc2V0X2xvdywgdm1lX29mZnNldF9oaWdoOwogCiAJdW5zaWduZWQgbG9uZyBsb25nIHBjaV9iYXNlLCBwY2lfYm91bmQsIHZtZV9vZmZzZXQ7CisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZTsKKworCWJyaWRnZSA9IGltYWdlLT5wYXJlbnQtPmRyaXZlcl9wcml2OwogCiAJaSA9IGltYWdlLT5udW1iZXI7CiAKLQljdGwgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCisJY3RsID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9PVEFUKTsKIAotCXBjaV9iYXNlX2hpZ2ggPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCisJcGNpX2Jhc2VfaGlnaCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfT1RTQVUpOwotCXBjaV9iYXNlX2xvdyA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKKwlwY2lfYmFzZV9sb3cgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX09UU0FMKTsKLQlwY2lfYm91bmRfaGlnaCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKKwlwY2lfYm91bmRfaGlnaCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfT1RFQVUpOwotCXBjaV9ib3VuZF9sb3cgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCisJcGNpX2JvdW5kX2xvdyA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfT1RFQUwpOwotCXZtZV9vZmZzZXRfaGlnaCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKKwl2bWVfb2Zmc2V0X2hpZ2ggPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX09UT0ZVKTsKLQl2bWVfb2Zmc2V0X2xvdyA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKKwl2bWVfb2Zmc2V0X2xvdyA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfT1RPRkwpOwogCiAJLyogQ29udmVydCA2NC1iaXQgdmFyaWFibGVzIHRvIDJ4IDMyLWJpdCB2YXJpYWJsZXMgKi8KQEAgLTEzMDUsNiArMTI3MSw5IEBACiAJdm1lX2N5Y2xlX3QgY3ljbGU7CiAJdm1lX3dpZHRoX3QgZHdpZHRoOwogCXN0cnVjdCB2bWVfYnVzX2Vycm9yICp2bWVfZXJyID0gTlVMTDsKKwlzdHJ1Y3Qgdm1lX2JyaWRnZSAqdHNpMTQ4X2JyaWRnZTsKKworCXRzaTE0OF9icmlkZ2UgPSBpbWFnZS0+cGFyZW50OwogCiAJc3Bpbl9sb2NrKCYoaW1hZ2UtPmxvY2spKTsKIApAQCAtMTMxNywxMyArMTI4NiwxNSBAQAogCV9fdHNpMTQ4X21hc3Rlcl9nZXQoaW1hZ2UsICZlbmFibGVkLCAmdm1lX2Jhc2UsICZzaXplLCAmYXNwYWNlLCAmY3ljbGUsCiAJCSZkd2lkdGgpOwogCi0Jdm1lX2VyciA9IHRzaTE0OF9maW5kX2Vycm9yKGFzcGFjZSwgdm1lX2Jhc2UgKyBvZmZzZXQsIGNvdW50KTsKKwl2bWVfZXJyID0gdHNpMTQ4X2ZpbmRfZXJyb3IodHNpMTQ4X2JyaWRnZSwgYXNwYWNlLCB2bWVfYmFzZSArIG9mZnNldCwKKwkJY291bnQpOwogCWlmKHZtZV9lcnIgIT0gTlVMTCkgewogCQlkZXZfZXJyKGltYWdlLT5wYXJlbnQtPnBhcmVudCwgIkZpcnN0IFZNRSByZWFkIGVycm9yIGRldGVjdGVkICIKIAkJCSJhbiBhdCBhZGRyZXNzIDB4JWxseFxuIiwgdm1lX2Vyci0+YWRkcmVzcyk7CiAJCXJldHZhbCA9IHZtZV9lcnItPmFkZHJlc3MgLSAodm1lX2Jhc2UgKyBvZmZzZXQpOwogCQkvKiBDbGVhciBkb3duIHNhdmUgZXJyb3JzIGluIHRoaXMgYWRkcmVzcyByYW5nZSAqLwotCQl0c2kxNDhfY2xlYXJfZXJyb3JzKGFzcGFjZSwgdm1lX2Jhc2UgKyBvZmZzZXQsIGNvdW50KTsKKwkJdHNpMTQ4X2NsZWFyX2Vycm9ycyh0c2kxNDhfYnJpZGdlLCBhc3BhY2UsIHZtZV9iYXNlICsgb2Zmc2V0LAorCQkJY291bnQpOwogCX0KIAogc2tpcF9jaGs6CkBAIC0xMzMzLDkgKzEzMDQsNiBAQAogfQogCiAKLS8qIFhYWCBXZSBuZWVkIHRvIGNoYW5nZSB2bWVfbWFzdGVyX3Jlc291cmNlLT5tdHggdG8gYSBzcGlubG9jayBzbyB0aGF0IHJlYWQKLSAqICAgICBhbmQgd3JpdGUgZnVuY3Rpb25zIGNhbiBiZSB1c2VkIGluIGFuIGludGVycnVwdCBjb250ZXh0Ci0gKi8KIHNzaXplX3QgdHNpMTQ4X21hc3Rlcl93cml0ZShzdHJ1Y3Qgdm1lX21hc3Rlcl9yZXNvdXJjZSAqaW1hZ2UsIHZvaWQgKmJ1ZiwKIAlzaXplX3QgY291bnQsIGxvZmZfdCBvZmZzZXQpCiB7CkBAIC0xMzQ2LDYgKzEzMTQsMTIgQEAKIAl2bWVfd2lkdGhfdCBkd2lkdGg7CiAKIAlzdHJ1Y3Qgdm1lX2J1c19lcnJvciAqdm1lX2VyciA9IE5VTEw7CisJc3RydWN0IHZtZV9icmlkZ2UgKnRzaTE0OF9icmlkZ2U7CisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZTsKKworCXRzaTE0OF9icmlkZ2UgPSBpbWFnZS0+cGFyZW50OworCisJYnJpZGdlID0gdHNpMTQ4X2JyaWRnZS0+ZHJpdmVyX3ByaXY7CiAKIAlzcGluX2xvY2soJihpbWFnZS0+bG9jaykpOwogCkBAIC0xMzczLDE1ICsxMzQ3LDE3IEBACiAJX190c2kxNDhfbWFzdGVyX2dldChpbWFnZSwgJmVuYWJsZWQsICZ2bWVfYmFzZSwgJnNpemUsICZhc3BhY2UsICZjeWNsZSwKIAkJJmR3aWR0aCk7CiAKLQlpb3JlYWQxNihmbHVzaF9pbWFnZS0+a2Vybl9iYXNlICsgMHg3RjAwMCk7CisJaW9yZWFkMTYoYnJpZGdlLT5mbHVzaF9pbWFnZS0+a2Vybl9iYXNlICsgMHg3RjAwMCk7CiAKLQl2bWVfZXJyID0gdHNpMTQ4X2ZpbmRfZXJyb3IoYXNwYWNlLCB2bWVfYmFzZSArIG9mZnNldCwgY291bnQpOworCXZtZV9lcnIgPSB0c2kxNDhfZmluZF9lcnJvcih0c2kxNDhfYnJpZGdlLCBhc3BhY2UsIHZtZV9iYXNlICsgb2Zmc2V0LAorCQljb3VudCk7CiAJaWYodm1lX2VyciAhPSBOVUxMKSB7CiAJCXByaW50aygiRmlyc3QgVk1FIHdyaXRlIGVycm9yIGRldGVjdGVkIGFuIGF0IGFkZHJlc3MgMHglbGx4XG4iLAogCQkJdm1lX2Vyci0+YWRkcmVzcyk7CiAJCXJldHZhbCA9IHZtZV9lcnItPmFkZHJlc3MgLSAodm1lX2Jhc2UgKyBvZmZzZXQpOwogCQkvKiBDbGVhciBkb3duIHNhdmUgZXJyb3JzIGluIHRoaXMgYWRkcmVzcyByYW5nZSAqLwotCQl0c2kxNDhfY2xlYXJfZXJyb3JzKGFzcGFjZSwgdm1lX2Jhc2UgKyBvZmZzZXQsIGNvdW50KTsKKwkJdHNpMTQ4X2NsZWFyX2Vycm9ycyh0c2kxNDhfYnJpZGdlLCBhc3BhY2UsIHZtZV9iYXNlICsgb2Zmc2V0LAorCQkJY291bnQpOwogCX0KIAogc2tpcF9jaGs6CkBAIC0xNDAzLDQ4ICsxMzc5LDUwIEBACiAJdW5zaWduZWQgaW50IHBjaV9hZGRyX2hpZ2gsIHBjaV9hZGRyX2xvdzsKIAl1MzIgdG1wLCByZXN1bHQ7CiAJaW50IGk7CisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZTsKIAorCWJyaWRnZSA9IGltYWdlLT5wYXJlbnQtPmRyaXZlcl9wcml2OwogCiAJLyogRmluZCB0aGUgUENJIGFkZHJlc3MgdGhhdCBtYXBzIHRvIHRoZSBkZXNpcmVkIFZNRSBhZGRyZXNzICovCiAJaSA9IGltYWdlLT5udW1iZXI7CiAKIAkvKiBMb2NraW5nIGFzIHdlIGNhbiBvbmx5IGRvIG9uZSBvZiB0aGVzZSBhdCBhIHRpbWUgKi8KLQltdXRleF9sb2NrKCYodm1lX3JtdykpOworCW11dGV4X2xvY2soJihicmlkZ2UtPnZtZV9ybXcpKTsKIAogCS8qIExvY2sgaW1hZ2UgKi8KIAlzcGluX2xvY2soJihpbWFnZS0+bG9jaykpOwogCi0JcGNpX2FkZHJfaGlnaCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKKwlwY2lfYWRkcl9oaWdoID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9PVFtpXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9PVFNBVSk7Ci0JcGNpX2FkZHJfbG93ID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKworCXBjaV9hZGRyX2xvdyA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKwogCQlUU0kxNDhfTENTUl9PRkZTRVRfT1RTQUwpOwogCiAJcmVnX2pvaW4ocGNpX2FkZHJfaGlnaCwgcGNpX2FkZHJfbG93LCAmcGNpX2FkZHIpOwogCXJlZ19zcGxpdChwY2lfYWRkciArIG9mZnNldCwgJnBjaV9hZGRyX2hpZ2gsICZwY2lfYWRkcl9sb3cpOwogCiAJLyogQ29uZmlndXJlIHJlZ2lzdGVycyAqLwotCWlvd3JpdGUzMmJlKG1hc2ssIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9STVdFTik7Ci0JaW93cml0ZTMyYmUoY29tcGFyZSwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1JNV0MpOwotCWlvd3JpdGUzMmJlKHN3YXAsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9STVdTKTsKLQlpb3dyaXRlMzJiZShwY2lfYWRkcl9oaWdoLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfUk1XQVUpOwotCWlvd3JpdGUzMmJlKHBjaV9hZGRyX2xvdywgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1JNV0FMKTsKKwlpb3dyaXRlMzJiZShtYXNrLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9STVdFTik7CisJaW93cml0ZTMyYmUoY29tcGFyZSwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfUk1XQyk7CisJaW93cml0ZTMyYmUoc3dhcCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfUk1XUyk7CisJaW93cml0ZTMyYmUocGNpX2FkZHJfaGlnaCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfUk1XQVUpOworCWlvd3JpdGUzMmJlKHBjaV9hZGRyX2xvdywgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfUk1XQUwpOwogCiAJLyogRW5hYmxlIFJNVyAqLwotCXRtcCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZNQ1RSTCk7CisJdG1wID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WTUNUUkwpOwogCXRtcCB8PSBUU0kxNDhfTENTUl9WTUNUUkxfUk1XRU47Ci0JaW93cml0ZTMyYmUodG1wLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVk1DVFJMKTsKKwlpb3dyaXRlMzJiZSh0bXAsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZNQ1RSTCk7CiAKIAkvKiBLaWNrIHByb2Nlc3Mgb2ZmIHdpdGggYSByZWFkIHRvIHRoZSByZXF1aXJlZCBhZGRyZXNzLiAqLwogCXJlc3VsdCA9IGlvcmVhZDMyYmUoaW1hZ2UtPmtlcm5fYmFzZSArIG9mZnNldCk7CiAKIAkvKiBEaXNhYmxlIFJNVyAqLwotCXRtcCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZNQ1RSTCk7CisJdG1wID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WTUNUUkwpOwogCXRtcCAmPSB+VFNJMTQ4X0xDU1JfVk1DVFJMX1JNV0VOOwotCWlvd3JpdGUzMmJlKHRtcCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZNQ1RSTCk7CisJaW93cml0ZTMyYmUodG1wLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WTUNUUkwpOwogCiAJc3Bpbl91bmxvY2soJihpbWFnZS0+bG9jaykpOwogCi0JbXV0ZXhfdW5sb2NrKCYodm1lX3JtdykpOworCW11dGV4X3VubG9jaygmKGJyaWRnZS0+dm1lX3JtdykpOwogCiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE2MzcsOCArMTYxNSw2IEBACiAKIC8qCiAgKiBBZGQgYSBsaW5rIGxpc3QgZGVzY3JpcHRvciB0byB0aGUgbGlzdAotICoKLSAqIFhYWCBOZWVkIHRvIGhhbmRsZSAyZVNTVCBCcm9hZGNhc3Qgc2VsZWN0IGJpdHMKICAqLwogaW50IHRzaTE0OF9kbWFfbGlzdF9hZGQgKHN0cnVjdCB2bWVfZG1hX2xpc3QgKmxpc3QsIHN0cnVjdCB2bWVfZG1hX2F0dHIgKnNyYywKIAlzdHJ1Y3Qgdm1lX2RtYV9hdHRyICpkZXN0LCBzaXplX3QgY291bnQpCkBAIC0xNjUxLDcgKzE2MjcsNyBAQAogCWRtYV9hZGRyX3QgZGVzY19wdHI7CiAJaW50IHJldHZhbCA9IDA7CiAKLQkvKiBYWFggZGVzY3JpcHRvciBtdXN0IGJlIGFsaWduZWQgb24gNjQtYml0IGJvdW5kYXJpZXMgKi8KKwkvKiBEZXNjcmlwdG9yIG11c3QgYmUgYWxpZ25lZCBvbiA2NC1iaXQgYm91bmRhcmllcyAqLwogCWVudHJ5ID0gKHN0cnVjdCB0c2kxNDhfZG1hX2VudHJ5ICopa21hbGxvYygKIAkJc2l6ZW9mKHN0cnVjdCB0c2kxNDhfZG1hX2VudHJ5KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVudHJ5ID09IE5VTEwpIHsKQEAgLTE3ODgsMTEgKzE3NjQsMTQgQEAKIC8qCiAgKiBDaGVjayB0byBzZWUgaWYgdGhlIHByb3ZpZGVkIERNQSBjaGFubmVsIGlzIGJ1c3kuCiAgKi8KLXN0YXRpYyBpbnQgdHNpMTQ4X2RtYV9idXN5KGludCBjaGFubmVsKQorc3RhdGljIGludCB0c2kxNDhfZG1hX2J1c3koc3RydWN0IHZtZV9icmlkZ2UgKnRzaTE0OF9icmlkZ2UsIGludCBjaGFubmVsKQogewogCXUzMiB0bXA7CisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZTsKIAotCXRtcCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0RNQVtjaGFubmVsXSArCisJYnJpZGdlID0gdHNpMTQ4X2JyaWRnZS0+ZHJpdmVyX3ByaXY7CisKKwl0bXAgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0RNQVtjaGFubmVsXSArCiAJCVRTSTE0OF9MQ1NSX09GRlNFVF9EU1RBKTsKIAogCWlmICh0bXAgJiBUU0kxNDhfTENTUl9EU1RBX0JTWSkKQEAgLTE4MTUsMTIgKzE3OTQsMTIgQEAKIAlkbWFfYWRkcl90IGJ1c19hZGRyOwogCXUzMiBidXNfYWRkcl9oaWdoLCBidXNfYWRkcl9sb3c7CiAJdTMyIHZhbCwgZGN0bHJlZyA9IDA7Ci0jaWYgMAotCWludCB4OwotI2VuZGlmCisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZTsKIAogCWN0cmxyID0gbGlzdC0+cGFyZW50OwogCisJYnJpZGdlID0gY3RybHItPnBhcmVudC0+ZHJpdmVyX3ByaXY7CisKIAltdXRleF9sb2NrKCYoY3RybHItPm10eCkpOwogCiAJY2hhbm5lbCA9IGN0cmxyLT5udW1iZXI7CkBAIC0xODM3LDQ4ICsxODE2LDYgQEAKIAl9IGVsc2UgewogCQlsaXN0X2FkZCgmKGxpc3QtPmxpc3QpLCAmKGN0cmxyLT5ydW5uaW5nKSk7CiAJfQotI2lmIDAKLQkvKiBYWFggU3RpbGwgdG9kbyAqLwotCWZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsJLyogdm1lIGJsb2NrIHNpemUgKi8KLQkJaWYgKCgzMiA8PCB4KSA+PSB2bWVEbWEtPm1heFZtZUJsb2NrU2l6ZSkgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKHggPT0gOCkKLQkJeCA9IDc7Ci0JZGN0bHJlZyB8PSAoeCA8PCAxMik7Ci0KLQlmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7CS8qIHBjaSBibG9jayBzaXplICovCi0JCWlmICgoMzIgPDwgeCkgPj0gdm1lRG1hLT5tYXhQY2lCbG9ja1NpemUpIHsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICh4ID09IDgpCi0JCXggPSA3OwotCWRjdGxyZWcgfD0gKHggPDwgNCk7Ci0KLQlpZiAodm1lRG1hLT52bWVCYWNrT2ZmVGltZXIpIHsKLQkJZm9yICh4ID0gMTsgeCA8IDg7IHgrKykgewkvKiB2bWUgdGltZXIgKi8KLQkJCWlmICgoMSA8PCAoeCAtIDEpKSA+PSB2bWVEbWEtPnZtZUJhY2tPZmZUaW1lcikgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmICh4ID09IDgpCi0JCQl4ID0gNzsKLQkJZGN0bHJlZyB8PSAoeCA8PCA4KTsKLQl9Ci0KLQlpZiAodm1lRG1hLT5wY2lCYWNrT2ZmVGltZXIpIHsKLQkJZm9yICh4ID0gMTsgeCA8IDg7IHgrKykgewkvKiBwY2kgdGltZXIgKi8KLQkJCWlmICgoMSA8PCAoeCAtIDEpKSA+PSB2bWVEbWEtPnBjaUJhY2tPZmZUaW1lcikgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmICh4ID09IDgpCi0JCQl4ID0gNzsKLQkJZGN0bHJlZyB8PSAoeCA8PCAwKTsKLQl9Ci0jZW5kaWYKIAogCS8qIEdldCBmaXJzdCBidXMgYWRkcmVzcyBhbmQgd3JpdGUgaW50byByZWdpc3RlcnMgKi8KIAllbnRyeSA9IGxpc3RfZmlyc3RfZW50cnkoJihsaXN0LT5lbnRyaWVzKSwgc3RydWN0IHRzaTE0OF9kbWFfZW50cnksCkBAIC0xODkwLDIxICsxODI3LDIyIEBACiAKIAlyZWdfc3BsaXQoYnVzX2FkZHIsICZidXNfYWRkcl9oaWdoLCAmYnVzX2FkZHJfbG93KTsKIAotCWlvd3JpdGUzMmJlKGJ1c19hZGRyX2hpZ2gsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKworCWlvd3JpdGUzMmJlKGJ1c19hZGRyX2hpZ2gsIGJyaWRnZS0+YmFzZSArCiAJCVRTSTE0OF9MQ1NSX0RNQVtjaGFubmVsXSArIFRTSTE0OF9MQ1NSX09GRlNFVF9ETkxBVSk7Ci0JaW93cml0ZTMyYmUoYnVzX2FkZHJfbG93LCB0c2kxNDhfYnJpZGdlLT5iYXNlICsKKwlpb3dyaXRlMzJiZShidXNfYWRkcl9sb3csIGJyaWRnZS0+YmFzZSArCiAJCVRTSTE0OF9MQ1NSX0RNQVtjaGFubmVsXSArIFRTSTE0OF9MQ1NSX09GRlNFVF9ETkxBTCk7CiAKIAkvKiBTdGFydCB0aGUgb3BlcmF0aW9uICovCi0JaW93cml0ZTMyYmUoZGN0bHJlZyB8IFRTSTE0OF9MQ1NSX0RDVExfREdPLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsKKwlpb3dyaXRlMzJiZShkY3RscmVnIHwgVFNJMTQ4X0xDU1JfRENUTF9ER08sIGJyaWRnZS0+YmFzZSArCiAJCVRTSTE0OF9MQ1NSX0RNQVtjaGFubmVsXSArIFRTSTE0OF9MQ1NSX09GRlNFVF9EQ1RMKTsKIAotCXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkbWFfcXVldWVbY2hhbm5lbF0sIHRzaTE0OF9kbWFfYnVzeShjaGFubmVsKSk7CisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGJyaWRnZS0+ZG1hX3F1ZXVlW2NoYW5uZWxdLAorCQl0c2kxNDhfZG1hX2J1c3koY3RybHItPnBhcmVudCwgY2hhbm5lbCkpOwogCS8qCiAJICogUmVhZCBzdGF0dXMgcmVnaXN0ZXIsIHRoaXMgcmVnaXN0ZXIgaXMgdmFsaWQgdW50aWwgd2Uga2ljayBvZmYgYQogCSAqIG5ldyB0cmFuc2Zlci4KIAkgKi8KLQl2YWwgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9ETUFbY2hhbm5lbF0gKworCXZhbCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfRE1BW2NoYW5uZWxdICsKIAkJVFNJMTQ4X0xDU1JfT0ZGU0VUX0RTVEEpOwogCiAJaWYgKHZhbCAmIFRTSTE0OF9MQ1NSX0RTVEFfVkJFKSB7CkBAIC0xOTUyLDEyICsxODkwLDE1IEBACiB7CiAJdTMyIGxtX2Jhc2VfaGlnaCwgbG1fYmFzZV9sb3csIGxtX2N0bCA9IDA7CiAJaW50IGk7CisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZTsKKworCWJyaWRnZSA9IGxtLT5wYXJlbnQtPmRyaXZlcl9wcml2OwogCiAJbXV0ZXhfbG9jaygmKGxtLT5tdHgpKTsKIAogCS8qIElmIHdlIGFscmVhZHkgaGF2ZSBhIGNhbGxiYWNrIGF0dGFjaGVkLCB3ZSBjYW4ndCBtb3ZlIGl0ISAqLwogCWZvciAoaSA9IDA7IGkgPCBsbS0+bW9uaXRvcnM7IGkrKykgewotCQlpZihsbV9jYWxsYmFja1tpXSAhPSBOVUxMKSB7CisJCWlmIChicmlkZ2UtPmxtX2NhbGxiYWNrW2ldICE9IE5VTEwpIHsKIAkJCW11dGV4X3VubG9jaygmKGxtLT5tdHgpKTsKIAkJCXByaW50aygiTG9jYXRpb24gbW9uaXRvciBjYWxsYmFjayBhdHRhY2hlZCwgY2FuJ3QgIgogCQkJCSJyZXNldFxuIik7CkBAIC0xOTk2LDkgKzE5MzcsOSBAQAogCiAJcmVnX3NwbGl0KGxtX2Jhc2UsICZsbV9iYXNlX2hpZ2gsICZsbV9iYXNlX2xvdyk7CiAKLQlpb3dyaXRlMzJiZShsbV9iYXNlX2hpZ2gsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9MTUJBVSk7Ci0JaW93cml0ZTMyYmUobG1fYmFzZV9sb3csIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9MTUJBTCk7Ci0JaW93cml0ZTMyYmUobG1fY3RsLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfTE1BVCk7CisJaW93cml0ZTMyYmUobG1fYmFzZV9oaWdoLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9MTUJBVSk7CisJaW93cml0ZTMyYmUobG1fYmFzZV9sb3csIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0xNQkFMKTsKKwlpb3dyaXRlMzJiZShsbV9jdGwsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0xNQVQpOwogCiAJbXV0ZXhfdW5sb2NrKCYobG0tPm10eCkpOwogCkBAIC0yMDEyLDEyICsxOTUzLDE1IEBACiAJdm1lX2FkZHJlc3NfdCAqYXNwYWNlLCB2bWVfY3ljbGVfdCAqY3ljbGUpCiB7CiAJdTMyIGxtX2Jhc2VfaGlnaCwgbG1fYmFzZV9sb3csIGxtX2N0bCwgZW5hYmxlZCA9IDA7CisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZTsKKworCWJyaWRnZSA9IGxtLT5wYXJlbnQtPmRyaXZlcl9wcml2OwogCiAJbXV0ZXhfbG9jaygmKGxtLT5tdHgpKTsKIAotCWxtX2Jhc2VfaGlnaCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0xNQkFVKTsKLQlsbV9iYXNlX2xvdyA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0xNQkFMKTsKLQlsbV9jdGwgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9MTUFUKTsKKwlsbV9iYXNlX2hpZ2ggPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0xNQkFVKTsKKwlsbV9iYXNlX2xvdyA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfTE1CQUwpOworCWxtX2N0bCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfTE1BVCk7CiAKIAlyZWdfam9pbihsbV9iYXNlX2hpZ2gsIGxtX2Jhc2VfbG93LCBsbV9iYXNlKTsKIApAQCAtMjA2MCwxMSArMjAwNCwxNCBAQAogCXZvaWQgKCpjYWxsYmFjaykoaW50KSkKIHsKIAl1MzIgbG1fY3RsLCB0bXA7CisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZTsKKworCWJyaWRnZSA9IGxtLT5wYXJlbnQtPmRyaXZlcl9wcml2OwogCiAJbXV0ZXhfbG9jaygmKGxtLT5tdHgpKTsKIAogCS8qIEVuc3VyZSB0aGF0IHRoZSBsb2NhdGlvbiBtb25pdG9yIGlzIGNvbmZpZ3VyZWQgLSBuZWVkIFBHTSBvciBEQVRBICovCi0JbG1fY3RsID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfTE1BVCk7CisJbG1fY3RsID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9MTUFUKTsKIAlpZiAoKGxtX2N0bCAmIChUU0kxNDhfTENTUl9MTUFUX1BHTSB8IFRTSTE0OF9MQ1NSX0xNQVRfREFUQSkpID09IDApIHsKIAkJbXV0ZXhfdW5sb2NrKCYobG0tPm10eCkpOwogCQlwcmludGsoIkxvY2F0aW9uIG1vbml0b3Igbm90IHByb3Blcmx5IGNvbmZpZ3VyZWRcbiIpOwpAQCAtMjA3MiwyOCArMjAxOSwyOCBAQAogCX0KIAogCS8qIENoZWNrIHRoYXQgYSBjYWxsYmFjayBpc24ndCBhbHJlYWR5IGF0dGFjaGVkICovCi0JaWYgKGxtX2NhbGxiYWNrW21vbml0b3JdICE9IE5VTEwpIHsKKwlpZiAoYnJpZGdlLT5sbV9jYWxsYmFja1ttb25pdG9yXSAhPSBOVUxMKSB7CiAJCW11dGV4X3VubG9jaygmKGxtLT5tdHgpKTsKIAkJcHJpbnRrKCJFeGlzdGluZyBjYWxsYmFjayBhdHRhY2hlZFxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCiAJLyogQXR0YWNoIGNhbGxiYWNrICovCi0JbG1fY2FsbGJhY2tbbW9uaXRvcl0gPSBjYWxsYmFjazsKKwlicmlkZ2UtPmxtX2NhbGxiYWNrW21vbml0b3JdID0gY2FsbGJhY2s7CiAKIAkvKiBFbmFibGUgTG9jYXRpb24gTW9uaXRvciBpbnRlcnJ1cHQgKi8KLQl0bXAgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTik7CisJdG1wID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTik7CiAJdG1wIHw9IFRTSTE0OF9MQ1NSX0lOVEVOX0xNRU5bbW9uaXRvcl07Ci0JaW93cml0ZTMyYmUodG1wLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU4pOworCWlvd3JpdGUzMmJlKHRtcCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU4pOwogCi0JdG1wID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU8pOworCXRtcCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU8pOwogCXRtcCB8PSBUU0kxNDhfTENTUl9JTlRFT19MTUVPW21vbml0b3JdOwotCWlvd3JpdGUzMmJlKHRtcCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVPKTsKKwlpb3dyaXRlMzJiZSh0bXAsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVPKTsKIAogCS8qIEVuc3VyZSB0aGF0IGdsb2JhbCBMb2NhdGlvbiBNb25pdG9yIEVuYWJsZSBzZXQgKi8KIAlpZiAoKGxtX2N0bCAmIFRTSTE0OF9MQ1NSX0xNQVRfRU4pID09IDApIHsKIAkJbG1fY3RsIHw9IFRTSTE0OF9MQ1NSX0xNQVRfRU47Ci0JCWlvd3JpdGUzMmJlKGxtX2N0bCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0xNQVQpOworCQlpb3dyaXRlMzJiZShsbV9jdGwsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0xNQVQpOwogCX0KIAogCW11dGV4X3VubG9jaygmKGxtLT5tdHgpKTsKQEAgLTIxMDcsMzAgKzIwNTQsMzMgQEAKIGludCB0c2kxNDhfbG1fZGV0YWNoKHN0cnVjdCB2bWVfbG1fcmVzb3VyY2UgKmxtLCBpbnQgbW9uaXRvcikKIHsKIAl1MzIgbG1fZW4sIHRtcDsKKwlzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlOworCisJYnJpZGdlID0gbG0tPnBhcmVudC0+ZHJpdmVyX3ByaXY7CiAKIAltdXRleF9sb2NrKCYobG0tPm10eCkpOwogCiAJLyogRGlzYWJsZSBMb2NhdGlvbiBNb25pdG9yIGFuZCBlbnN1cmUgcHJldmlvdXMgaW50ZXJydXB0cyBhcmUgY2xlYXIgKi8KLQlsbV9lbiA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVOKTsKKwlsbV9lbiA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU4pOwogCWxtX2VuICY9IH5UU0kxNDhfTENTUl9JTlRFTl9MTUVOW21vbml0b3JdOwotCWlvd3JpdGUzMmJlKGxtX2VuLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5URU4pOworCWlvd3JpdGUzMmJlKGxtX2VuLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTik7CiAKLQl0bXAgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTyk7CisJdG1wID0gaW9yZWFkMzJiZShicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRFTyk7CiAJdG1wICY9IH5UU0kxNDhfTENTUl9JTlRFT19MTUVPW21vbml0b3JdOwotCWlvd3JpdGUzMmJlKHRtcCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVPKTsKKwlpb3dyaXRlMzJiZSh0bXAsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEVPKTsKIAogCWlvd3JpdGUzMmJlKFRTSTE0OF9MQ1NSX0lOVENfTE1DW21vbml0b3JdLAotCQkgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVEMpOworCQkgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfSU5UQyk7CiAKIAkvKiBEZXRhY2ggY2FsbGJhY2sgKi8KLQlsbV9jYWxsYmFja1ttb25pdG9yXSA9IE5VTEw7CisJYnJpZGdlLT5sbV9jYWxsYmFja1ttb25pdG9yXSA9IE5VTEw7CiAKIAkvKiBJZiBhbGwgbG9jYXRpb24gbW9uaXRvcnMgZGlzYWJsZWQsIGRpc2FibGUgZ2xvYmFsIExvY2F0aW9uIE1vbml0b3IgKi8KIAlpZiAoKGxtX2VuICYgKFRTSTE0OF9MQ1NSX0lOVFNfTE0wUyB8IFRTSTE0OF9MQ1NSX0lOVFNfTE0xUyB8CiAJCQlUU0kxNDhfTENTUl9JTlRTX0xNMlMgfCBUU0kxNDhfTENTUl9JTlRTX0xNM1MpKSA9PSAwKSB7Ci0JCXRtcCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0xNQVQpOworCQl0bXAgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0xNQVQpOwogCQl0bXAgJj0gflRTSTE0OF9MQ1NSX0xNQVRfRU47Ci0JCWlvd3JpdGUzMmJlKHRtcCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0xNQVQpOworCQlpb3dyaXRlMzJiZSh0bXAsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0xNQVQpOwogCX0KIAogCW11dGV4X3VubG9jaygmKGxtLT5tdHgpKTsKQEAgLTIxNDEsMTIgKzIwOTEsMTkgQEAKIC8qCiAgKiBEZXRlcm1pbmUgR2VvZ3JhcGhpY2FsIEFkZHJlc3NpbmcKICAqLwotaW50IHRzaTE0OF9zbG90X2dldCh2b2lkKQoraW50IHRzaTE0OF9zbG90X2dldChzdHJ1Y3Qgdm1lX2JyaWRnZSAqdHNpMTQ4X2JyaWRnZSkKIHsKICAgICAgICAgdTMyIHNsb3QgPSAwOworCXN0cnVjdCB0c2kxNDhfZHJpdmVyICpicmlkZ2U7CiAKLQlzbG90ID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVlNUQVQpOwotCXNsb3QgPSBzbG90ICYgVFNJMTQ4X0xDU1JfVlNUQVRfR0FfTTsKKwlicmlkZ2UgPSB0c2kxNDhfYnJpZGdlLT5kcml2ZXJfcHJpdjsKKworCWlmICghZ2VvaWQpIHsKKwkJc2xvdCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVlNUQVQpOworCQlzbG90ID0gc2xvdCAmIFRTSTE0OF9MQ1NSX1ZTVEFUX0dBX007CisJfSBlbHNlCisJCXNsb3QgPSBnZW9pZDsKKwogCXJldHVybiAoaW50KXNsb3Q7CiB9CiAKQEAgLTIxNjcsNDUgKzIxMjQsNTAgQEAKICAqIGJvYXJkcyByZWdpc3RlcnMsIHRoaXMgbWVhbnMgdGhlcmUgaXMgYSBmaXggbGVuZ3RoIDUwOGtCIHdpbmRvdyB3aGljaCBtdXN0CiAgKiBiZSBtYXBwZWQgb250byBQQ0kgbWVtb3J5LgogICovCi1zdGF0aWMgaW50IHRzaTE0OF9jcmNzcl9pbml0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIGludCB0c2kxNDhfY3Jjc3JfaW5pdChzdHJ1Y3Qgdm1lX2JyaWRnZSAqdHNpMTQ4X2JyaWRnZSwKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAl1MzIgY2JhciwgY3JhdCwgdnN0YXQ7CiAJdTMyIGNyY3NyX2J1c19oaWdoLCBjcmNzcl9idXNfbG93OwogCWludCByZXR2YWw7CisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZTsKKworCWJyaWRnZSA9IHRzaTE0OF9icmlkZ2UtPmRyaXZlcl9wcml2OwogCiAJLyogQWxsb2NhdGUgbWVtIGZvciBDUi9DU1IgaW1hZ2UgKi8KLQljcmNzcl9rZXJuZWwgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2LCBWTUVfQ1JDU1JfQlVGX1NJWkUsCi0JCSZjcmNzcl9idXMpOwotCWlmIChjcmNzcl9rZXJuZWwgPT0gTlVMTCkgeworCWJyaWRnZS0+Y3Jjc3Jfa2VybmVsID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgVk1FX0NSQ1NSX0JVRl9TSVpFLAorCQkmKGJyaWRnZS0+Y3Jjc3JfYnVzKSk7CisJaWYgKGJyaWRnZS0+Y3Jjc3Jfa2VybmVsID09IE5VTEwpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgQ1IvQ1NSICIKIAkJCSJpbWFnZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCW1lbXNldChjcmNzcl9rZXJuZWwsIDAsIFZNRV9DUkNTUl9CVUZfU0laRSk7CisJbWVtc2V0KGJyaWRnZS0+Y3Jjc3Jfa2VybmVsLCAwLCBWTUVfQ1JDU1JfQlVGX1NJWkUpOwogCi0JcmVnX3NwbGl0KGNyY3NyX2J1cywgJmNyY3NyX2J1c19oaWdoLCAmY3Jjc3JfYnVzX2xvdyk7CisJcmVnX3NwbGl0KGJyaWRnZS0+Y3Jjc3JfYnVzLCAmY3Jjc3JfYnVzX2hpZ2gsICZjcmNzcl9idXNfbG93KTsKIAotCWlvd3JpdGUzMmJlKGNyY3NyX2J1c19oaWdoLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfQ1JPVSk7Ci0JaW93cml0ZTMyYmUoY3Jjc3JfYnVzX2xvdywgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0NST0wpOworCWlvd3JpdGUzMmJlKGNyY3NyX2J1c19oaWdoLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9DUk9VKTsKKwlpb3dyaXRlMzJiZShjcmNzcl9idXNfbG93LCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9DUk9MKTsKIAogCS8qIEVuc3VyZSB0aGF0IHRoZSBDUi9DU1IgaXMgY29uZmlndXJlZCBhdCB0aGUgY29ycmVjdCBvZmZzZXQgKi8KLQljYmFyID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0NCQVIpOworCWNiYXIgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9DQkFSKTsKIAljYmFyID0gKGNiYXIgJiBUU0kxNDhfQ1JDU1JfQ0JBUl9NKT4+MzsKIAotCXZzdGF0ID0gdHNpMTQ4X3Nsb3RfZ2V0KCk7CisJdnN0YXQgPSB0c2kxNDhfc2xvdF9nZXQodHNpMTQ4X2JyaWRnZSk7CiAKIAlpZiAoY2JhciAhPSB2c3RhdCkgeworCQljYmFyID0gdnN0YXQ7CiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJTZXR0aW5nIENSL0NTUiBvZmZzZXRcbiIpOwotCQlpb3dyaXRlMzJiZShjYmFyPDwzLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0NCQVIpOworCQlpb3dyaXRlMzJiZShjYmFyPDwzLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfQ0JBUik7CiAJfQogCWRldl9pbmZvKCZwZGV2LT5kZXYsICJDUi9DU1IgT2Zmc2V0OiAlZFxuIiwgY2Jhcik7CiAKLQljcmF0ID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfQ1JBVCk7CisJY3JhdCA9IGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfQ1JBVCk7CiAJaWYgKGNyYXQgJiBUU0kxNDhfTENTUl9DUkFUX0VOKSB7CiAJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJFbmFibGluZyBDUi9DU1Igc3BhY2VcbiIpOwogCQlpb3dyaXRlMzJiZShjcmF0IHwgVFNJMTQ4X0xDU1JfQ1JBVF9FTiwKLQkJCXRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9DUkFUKTsKKwkJCWJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0NSQVQpOwogCX0gZWxzZQogCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiQ1IvQ1NSIGFscmVhZHkgZW5hYmxlZFxuIik7CiAKQEAgLTIyMTQsOCArMjE3Niw5IEBACiAJICogdGhyb3VnaCBWTUUgd3JpdGVzLgogCSAqLwogCWlmKGVycl9jaGspIHsKLQkJcmV0dmFsID0gdHNpMTQ4X21hc3Rlcl9zZXQoZmx1c2hfaW1hZ2UsIDEsICh2c3RhdCAqIDB4ODAwMDApLAotCQkJMHg4MDAwMCwgVk1FX0NSQ1NSLCBWTUVfU0NULCBWTUVfRDE2KTsKKwkJcmV0dmFsID0gdHNpMTQ4X21hc3Rlcl9zZXQoYnJpZGdlLT5mbHVzaF9pbWFnZSwgMSwKKwkJCSh2c3RhdCAqIDB4ODAwMDApLCAweDgwMDAwLCBWTUVfQ1JDU1IsIFZNRV9TQ1QsCisJCQlWTUVfRDE2KTsKIAkJaWYgKHJldHZhbCkKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkNvbmZpZ3VyaW5nIGZsdXNoIGltYWdlIGZhaWxlZFxuIik7CiAJfQpAQCAtMjIyNCwyMCArMjE4NywyNSBAQAogCiB9CiAKLXN0YXRpYyB2b2lkIHRzaTE0OF9jcmNzcl9leGl0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIHZvaWQgdHNpMTQ4X2NyY3NyX2V4aXQoc3RydWN0IHZtZV9icmlkZ2UgKnRzaTE0OF9icmlkZ2UsCisJc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJdTMyIGNyYXQ7CisJc3RydWN0IHRzaTE0OF9kcml2ZXIgKmJyaWRnZTsKKworCWJyaWRnZSA9IHRzaTE0OF9icmlkZ2UtPmRyaXZlcl9wcml2OwogCiAJLyogVHVybiBvZmYgQ1IvQ1NSIHNwYWNlICovCi0JY3JhdCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0NSQVQpOworCWNyYXQgPSBpb3JlYWQzMmJlKGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0NSQVQpOwogCWlvd3JpdGUzMmJlKGNyYXQgJiB+VFNJMTQ4X0xDU1JfQ1JBVF9FTiwKLQkJdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0NSQVQpOworCQlicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9DUkFUKTsKIAogCS8qIEZyZWUgaW1hZ2UgKi8KLQlpb3dyaXRlMzJiZSgwLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfQ1JPVSk7Ci0JaW93cml0ZTMyYmUoMCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0NST0wpOworCWlvd3JpdGUzMmJlKDAsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0NST1UpOworCWlvd3JpdGUzMmJlKDAsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0NST0wpOwogCi0JcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCBWTUVfQ1JDU1JfQlVGX1NJWkUsIGNyY3NyX2tlcm5lbCwgY3Jjc3JfYnVzKTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KHBkZXYsIFZNRV9DUkNTUl9CVUZfU0laRSwgYnJpZGdlLT5jcmNzcl9rZXJuZWwsCisJCWJyaWRnZS0+Y3Jjc3JfYnVzKTsKIH0KIAogc3RhdGljIGludCB0c2kxNDhfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZCkKQEAgLTIyNDUsNiArMjIxMyw4IEBACiAJaW50IHJldHZhbCwgaSwgbWFzdGVyX251bTsKIAl1MzIgZGF0YTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MgPSBOVUxMOworCXN0cnVjdCB2bWVfYnJpZGdlICp0c2kxNDhfYnJpZGdlOworCXN0cnVjdCB0c2kxNDhfZHJpdmVyICp0c2kxNDhfZGV2aWNlOwogCXN0cnVjdCB2bWVfbWFzdGVyX3Jlc291cmNlICptYXN0ZXJfaW1hZ2U7CiAJc3RydWN0IHZtZV9zbGF2ZV9yZXNvdXJjZSAqc2xhdmVfaW1hZ2U7CiAJc3RydWN0IHZtZV9kbWFfcmVzb3VyY2UgKmRtYV9jdHJscjsKQEAgLTIyNjQsNiArMjIzNCwxOCBAQAogCiAJbWVtc2V0KHRzaTE0OF9icmlkZ2UsIDAsIHNpemVvZihzdHJ1Y3Qgdm1lX2JyaWRnZSkpOwogCisJdHNpMTQ4X2RldmljZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0c2kxNDhfZHJpdmVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHRzaTE0OF9kZXZpY2UgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBkZXZpY2UgIgorCQkJInN0cnVjdHVyZVxuIik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyX2RyaXZlcjsKKwl9CisKKwltZW1zZXQodHNpMTQ4X2RldmljZSwgMCwgc2l6ZW9mKHN0cnVjdCB0c2kxNDhfZHJpdmVyKSk7CisKKwl0c2kxNDhfYnJpZGdlLT5kcml2ZXJfcHJpdiA9IHRzaTE0OF9kZXZpY2U7CisKIAkvKiBFbmFibGUgdGhlIGRldmljZSAqLwogCXJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwogCWlmIChyZXR2YWwpIHsKQEAgLTIyNzksMTUgKzIyNjEsMTYgQEAKIAl9CiAKIAkvKiBtYXAgcmVnaXN0ZXJzIGluIEJBUiAwICovCi0JdHNpMTQ4X2JyaWRnZS0+YmFzZSA9IGlvcmVtYXBfbm9jYWNoZShwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksIDQwOTYpOwotCWlmICghdHNpMTQ4X2JyaWRnZS0+YmFzZSkgeworCXRzaTE0OF9kZXZpY2UtPmJhc2UgPSBpb3JlbWFwX25vY2FjaGUocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLAorCQk0MDk2KTsKKwlpZiAoIXRzaTE0OF9kZXZpY2UtPmJhc2UpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIHJlbWFwIENSRyByZWdpb25cbiIpOwogCQlyZXR2YWwgPSAtRUlPOwogCQlnb3RvIGVycl9yZW1hcDsKIAl9CiAKIAkvKiBDaGVjayB0byBzZWUgaWYgdGhlIG1hcHBpbmcgd29ya2VkIG91dCAqLwotCWRhdGEgPSBpb3JlYWQzMih0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X1BDRlNfSUQpICYgMHgwMDAwRkZGRjsKKwlkYXRhID0gaW9yZWFkMzIodHNpMTQ4X2RldmljZS0+YmFzZSArIFRTSTE0OF9QQ0ZTX0lEKSAmIDB4MDAwMEZGRkY7CiAJaWYgKGRhdGEgIT0gUENJX1ZFTkRPUl9JRF9UVU5EUkEpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ1JHIHJlZ2lvbiBjaGVjayBmYWlsZWRcbiIpOwogCQlyZXR2YWwgPSAtRUlPOwpAQCAtMjI5NSwxMiArMjI3OCwxMSBAQAogCX0KIAogCS8qIEluaXRpYWxpemUgd2FpdCBxdWV1ZXMgJiBtdXR1YWwgZXhjbHVzaW9uIGZsYWdzICovCi0JLyogWFhYIFRoZXNlIG5lZWQgdG8gYmUgbW92ZWQgdG8gdGhlIHZtZV9icmlkZ2Ugc3RydWN0dXJlICovCi0JaW5pdF93YWl0cXVldWVfaGVhZCgmZG1hX3F1ZXVlWzBdKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkbWFfcXVldWVbMV0pOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmlhY2tfcXVldWUpOwotCW11dGV4X2luaXQoJih2bWVfaW50KSk7Ci0JbXV0ZXhfaW5pdCgmKHZtZV9ybXcpKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCYodHNpMTQ4X2RldmljZS0+ZG1hX3F1ZXVlWzBdKSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmKHRzaTE0OF9kZXZpY2UtPmRtYV9xdWV1ZVsxXSkpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJih0c2kxNDhfZGV2aWNlLT5pYWNrX3F1ZXVlKSk7CisJbXV0ZXhfaW5pdCgmKHRzaTE0OF9kZXZpY2UtPnZtZV9pbnQpKTsKKwltdXRleF9pbml0KCYodHNpMTQ4X2RldmljZS0+dm1lX3JtdykpOwogCiAJdHNpMTQ4X2JyaWRnZS0+cGFyZW50ID0gJihwZGV2LT5kZXYpOwogCXN0cmNweSh0c2kxNDhfYnJpZGdlLT5uYW1lLCBkcml2ZXJfbmFtZSk7CkBAIC0yMzIwLDI5ICsyMzAyLDI5IEBACiAJbWFzdGVyX251bSA9IFRTSTE0OF9NQVhfTUFTVEVSOwogCWlmKGVycl9jaGspewogCQltYXN0ZXJfbnVtLS07Ci0JCS8qIFhYWCAqLwotCQlmbHVzaF9pbWFnZSA9IChzdHJ1Y3Qgdm1lX21hc3Rlcl9yZXNvdXJjZSAqKWttYWxsb2MoCi0JCQlzaXplb2Yoc3RydWN0IHZtZV9tYXN0ZXJfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKGZsdXNoX2ltYWdlID09IE5VTEwpIHsKKworCQl0c2kxNDhfZGV2aWNlLT5mbHVzaF9pbWFnZSA9IChzdHJ1Y3Qgdm1lX21hc3Rlcl9yZXNvdXJjZSAqKQorCQkJa21hbGxvYyhzaXplb2Yoc3RydWN0IHZtZV9tYXN0ZXJfcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHRzaTE0OF9kZXZpY2UtPmZsdXNoX2ltYWdlID09IE5VTEwpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKIAkJCSJmbHVzaCByZXNvdXJjZSBzdHJ1Y3R1cmVcbiIpOwogCQkJcmV0dmFsID0gLUVOT01FTTsKIAkJCWdvdG8gZXJyX21hc3RlcjsKIAkJfQotCQlmbHVzaF9pbWFnZS0+cGFyZW50ID0gdHNpMTQ4X2JyaWRnZTsKLQkJc3Bpbl9sb2NrX2luaXQoJihmbHVzaF9pbWFnZS0+bG9jaykpOwotCQlmbHVzaF9pbWFnZS0+bG9ja2VkID0gMTsKLQkJZmx1c2hfaW1hZ2UtPm51bWJlciA9IG1hc3Rlcl9udW07Ci0JCWZsdXNoX2ltYWdlLT5hZGRyZXNzX2F0dHIgPSBWTUVfQTE2IHwgVk1FX0EyNCB8IFZNRV9BMzIgfAotCQkJVk1FX0E2NDsKLQkJZmx1c2hfaW1hZ2UtPmN5Y2xlX2F0dHIgPSBWTUVfU0NUIHwgVk1FX0JMVCB8IFZNRV9NQkxUIHwKLQkJCVZNRV8yZVZNRSB8IFZNRV8yZVNTVCB8IFZNRV8yZVNTVEIgfCBWTUVfMmVTU1QxNjAgfAotCQkJVk1FXzJlU1NUMjY3IHwgVk1FXzJlU1NUMzIwIHwgVk1FX1NVUEVSIHwgVk1FX1VTRVIgfAotCQkJVk1FX1BST0cgfCBWTUVfREFUQTsKLQkJZmx1c2hfaW1hZ2UtPndpZHRoX2F0dHIgPSBWTUVfRDE2IHwgVk1FX0QzMjsKLQkJbWVtc2V0KCYoZmx1c2hfaW1hZ2UtPnBjaV9yZXNvdXJjZSksIDAsCisJCXRzaTE0OF9kZXZpY2UtPmZsdXNoX2ltYWdlLT5wYXJlbnQgPSB0c2kxNDhfYnJpZGdlOworCQlzcGluX2xvY2tfaW5pdCgmKHRzaTE0OF9kZXZpY2UtPmZsdXNoX2ltYWdlLT5sb2NrKSk7CisJCXRzaTE0OF9kZXZpY2UtPmZsdXNoX2ltYWdlLT5sb2NrZWQgPSAxOworCQl0c2kxNDhfZGV2aWNlLT5mbHVzaF9pbWFnZS0+bnVtYmVyID0gbWFzdGVyX251bTsKKwkJdHNpMTQ4X2RldmljZS0+Zmx1c2hfaW1hZ2UtPmFkZHJlc3NfYXR0ciA9IFZNRV9BMTYgfCBWTUVfQTI0IHwKKwkJCVZNRV9BMzIgfCBWTUVfQTY0OworCQl0c2kxNDhfZGV2aWNlLT5mbHVzaF9pbWFnZS0+Y3ljbGVfYXR0ciA9IFZNRV9TQ1QgfCBWTUVfQkxUIHwKKwkJCVZNRV9NQkxUIHwgVk1FXzJlVk1FIHwgVk1FXzJlU1NUIHwgVk1FXzJlU1NUQiB8CisJCQlWTUVfMmVTU1QxNjAgfCBWTUVfMmVTU1QyNjcgfCBWTUVfMmVTU1QzMjAgfCBWTUVfU1VQRVIgfAorCQkJVk1FX1VTRVIgfCBWTUVfUFJPRyB8IFZNRV9EQVRBOworCQl0c2kxNDhfZGV2aWNlLT5mbHVzaF9pbWFnZS0+d2lkdGhfYXR0ciA9IFZNRV9EMTYgfCBWTUVfRDMyOworCQltZW1zZXQoJih0c2kxNDhfZGV2aWNlLT5mbHVzaF9pbWFnZS0+YnVzX3Jlc291cmNlKSwgMCwKIAkJCXNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKLQkJZmx1c2hfaW1hZ2UtPmtlcm5fYmFzZSAgPSBOVUxMOworCQl0c2kxNDhfZGV2aWNlLT5mbHVzaF9pbWFnZS0+a2Vybl9iYXNlICA9IE5VTEw7CiAJfQogCiAJLyogQWRkIG1hc3RlciB3aW5kb3dzIHRvIGxpc3QgKi8KQEAgLTIzNjcsNyArMjM0OSw3IEBACiAJCQlWTUVfMmVTU1QyNjcgfCBWTUVfMmVTU1QzMjAgfCBWTUVfU1VQRVIgfCBWTUVfVVNFUiB8CiAJCQlWTUVfUFJPRyB8IFZNRV9EQVRBOwogCQltYXN0ZXJfaW1hZ2UtPndpZHRoX2F0dHIgPSBWTUVfRDE2IHwgVk1FX0QzMjsKLQkJbWVtc2V0KCYobWFzdGVyX2ltYWdlLT5wY2lfcmVzb3VyY2UpLCAwLAorCQltZW1zZXQoJihtYXN0ZXJfaW1hZ2UtPmJ1c19yZXNvdXJjZSksIDAsCiAJCQlzaXplb2Yoc3RydWN0IHJlc291cmNlKSk7CiAJCW1hc3Rlcl9pbWFnZS0+a2Vybl9iYXNlICA9IE5VTEw7CiAJCWxpc3RfYWRkX3RhaWwoJihtYXN0ZXJfaW1hZ2UtPmxpc3QpLApAQCAtMjQxNSw2ICsyMzk3LDEwIEBACiAJCW11dGV4X2luaXQoJihkbWFfY3RybHItPm10eCkpOwogCQlkbWFfY3RybHItPmxvY2tlZCA9IDA7CiAJCWRtYV9jdHJsci0+bnVtYmVyID0gaTsKKwkJZG1hX2N0cmxyLT5yb3V0ZV9hdHRyID0gVk1FX0RNQV9WTUVfVE9fTUVNIHwKKwkJCVZNRV9ETUFfTUVNX1RPX1ZNRSB8IFZNRV9ETUFfVk1FX1RPX1ZNRSB8CisJCQlWTUVfRE1BX01FTV9UT19NRU0gfCBWTUVfRE1BX1BBVFRFUk5fVE9fVk1FIHwKKwkJCVZNRV9ETUFfUEFUVEVSTl9UT19NRU07CiAJCUlOSVRfTElTVF9IRUFEKCYoZG1hX2N0cmxyLT5wZW5kaW5nKSk7CiAJCUlOSVRfTElTVF9IRUFEKCYoZG1hX2N0cmxyLT5ydW5uaW5nKSk7CiAJCWxpc3RfYWRkX3RhaWwoJihkbWFfY3RybHItPmxpc3QpLApAQCAtMjQ1NSw0MCArMjQ0MSw0MiBAQAogCXRzaTE0OF9icmlkZ2UtPmxtX2RldGFjaCA9IHRzaTE0OF9sbV9kZXRhY2g7CiAJdHNpMTQ4X2JyaWRnZS0+c2xvdF9nZXQgPSB0c2kxNDhfc2xvdF9nZXQ7CiAKLQlkYXRhID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVlNUQVQpOworCWRhdGEgPSBpb3JlYWQzMmJlKHRzaTE0OF9kZXZpY2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WU1RBVCk7CiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIkJvYXJkIGlzJXMgdGhlIFZNRSBzeXN0ZW0gY29udHJvbGxlclxuIiwKIAkJKGRhdGEgJiBUU0kxNDhfTENTUl9WU1RBVF9TQ09OUyk/ICIiIDogIiBub3QiKTsKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiVk1FIGdlb2dyYXBoaWNhbCBhZGRyZXNzIGlzICVkXG4iLAotCQlkYXRhICYgVFNJMTQ4X0xDU1JfVlNUQVRfR0FfTSk7CisJaWYgKCFnZW9pZCkKKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIlZNRSBnZW9ncmFwaGljYWwgYWRkcmVzcyBpcyAlZFxuIiwKKwkJCWRhdGEgJiBUU0kxNDhfTENTUl9WU1RBVF9HQV9NKTsKKwllbHNlCisJCWRldl9pbmZvKCZwZGV2LT5kZXYsICJWTUUgZ2VvZ3JhcGhpY2FsIGFkZHJlc3MgaXMgc2V0IHRvICVkXG4iLAorCQkJZ2VvaWQpOworCiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIlZNRSBXcml0ZSBhbmQgZmx1c2ggYW5kIGVycm9yIGNoZWNrIGlzICVzXG4iLAogCQllcnJfY2hrID8gImVuYWJsZWQiIDogImRpc2FibGVkIik7CiAKLQlpZih0c2kxNDhfY3Jjc3JfaW5pdChwZGV2KSkgeworCWlmICh0c2kxNDhfY3Jjc3JfaW5pdCh0c2kxNDhfYnJpZGdlLCBwZGV2KSkKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ1IvQ1NSIGNvbmZpZ3VyYXRpb24gZmFpbGVkLlxuIik7CiAJCWdvdG8gZXJyX2NyY3NyOwogCi0JfQotCi0JLyogTmVlZCB0byBzYXZlIHRzaTE0OF9icmlkZ2UgcG9pbnRlciBsb2NhbGx5IGluIGxpbmsgbGlzdCBmb3IgdXNlIGluCi0JICogdHNpMTQ4X3JlbW92ZSgpCi0JICovCiAJcmV0dmFsID0gdm1lX3JlZ2lzdGVyX2JyaWRnZSh0c2kxNDhfYnJpZGdlKTsKIAlpZiAocmV0dmFsICE9IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2hpcCBSZWdpc3RyYXRpb24gZmFpbGVkLlxuIik7CiAJCWdvdG8gZXJyX3JlZzsKIAl9CiAKKwlwY2lfc2V0X2RydmRhdGEocGRldiwgdHNpMTQ4X2JyaWRnZSk7CisKIAkvKiBDbGVhciBWTUUgYnVzICJib2FyZCBmYWlsIiwgYW5kICJwb3dlci11cCByZXNldCIgbGluZXMgKi8KLQlkYXRhID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVlNUQVQpOworCWRhdGEgPSBpb3JlYWQzMmJlKHRzaTE0OF9kZXZpY2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WU1RBVCk7CiAJZGF0YSAmPSB+VFNJMTQ4X0xDU1JfVlNUQVRfQlJERkw7CiAJZGF0YSB8PSBUU0kxNDhfTENTUl9WU1RBVF9DUFVSU1Q7Ci0JaW93cml0ZTMyYmUoZGF0YSwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZTVEFUKTsKKwlpb3dyaXRlMzJiZShkYXRhLCB0c2kxNDhfZGV2aWNlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVlNUQVQpOwogCiAJcmV0dXJuIDA7CiAKIAl2bWVfdW5yZWdpc3Rlcl9icmlkZ2UodHNpMTQ4X2JyaWRnZSk7CiBlcnJfcmVnOgotCXRzaTE0OF9jcmNzcl9leGl0KHBkZXYpOworCXRzaTE0OF9jcmNzcl9leGl0KHRzaTE0OF9icmlkZ2UsIHBkZXYpOwogZXJyX2NyY3NyOgogZXJyX2xtOgogCS8qIHJlc291cmNlcyBhcmUgc3RvcmVkIGluIGxpbmsgbGlzdCAqLwpAQCAtMjUxOSwxNSArMjUwNywxNyBAQAogCQlrZnJlZShtYXN0ZXJfaW1hZ2UpOwogCX0KIAotCXRzaTE0OF9pcnFfZXhpdChwZGV2KTsKKwl0c2kxNDhfaXJxX2V4aXQodHNpMTQ4X2RldmljZSwgcGRldik7CiBlcnJfaXJxOgogZXJyX3Rlc3Q6Ci0JaW91bm1hcCh0c2kxNDhfYnJpZGdlLT5iYXNlKTsKKwlpb3VubWFwKHRzaTE0OF9kZXZpY2UtPmJhc2UpOwogZXJyX3JlbWFwOgogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiBlcnJfcmVzb3VyY2U6CiAJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogZXJyX2VuYWJsZToKKwlrZnJlZSh0c2kxNDhfZGV2aWNlKTsKK2Vycl9kcml2ZXI6CiAJa2ZyZWUodHNpMTQ4X2JyaWRnZSk7CiBlcnJfc3RydWN0OgogCXJldHVybiByZXR2YWw7CkBAIC0yNTQxLDU2ICsyNTMxLDU4IEBACiAJc3RydWN0IHZtZV9zbGF2ZV9yZXNvdXJjZSAqc2xhdmVfaW1hZ2U7CiAJc3RydWN0IHZtZV9kbWFfcmVzb3VyY2UgKmRtYV9jdHJscjsKIAlpbnQgaTsKKwlzdHJ1Y3QgdHNpMTQ4X2RyaXZlciAqYnJpZGdlOworCXN0cnVjdCB2bWVfYnJpZGdlICp0c2kxNDhfYnJpZGdlID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJYnJpZGdlID0gdHNpMTQ4X2JyaWRnZS0+ZHJpdmVyX3ByaXY7CisKIAogCWRldl9kYmcoJnBkZXYtPmRldiwgIkRyaXZlciBpcyBiZWluZyB1bmxvYWRlZC5cbiIpOwogCi0JLyogWFhYIFdlIG5lZWQgdG8gZmluZCB0aGUgcGRldi0+ZGV2IGluIHRoZSBsaXN0IG9mIHZtZV9icmlkZ2UtPmRldidzICovCi0KIAkvKgogCSAqICBTaHV0ZG93biBhbGwgaW5ib3VuZCBhbmQgb3V0Ym91bmQgd2luZG93cy4KIAkgKi8KIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCWlvd3JpdGUzMmJlKDAsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JVFtpXSArCisJCWlvd3JpdGUzMmJlKDAsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lUW2ldICsKIAkJCVRTSTE0OF9MQ1NSX09GRlNFVF9JVEFUKTsKLQkJaW93cml0ZTMyYmUoMCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX09UW2ldICsKKwkJaW93cml0ZTMyYmUoMCwgYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfT1RbaV0gKwogCQkJVFNJMTQ4X0xDU1JfT0ZGU0VUX09UQVQpOwogCX0KIAogCS8qCiAJICogIFNodXRkb3duIExvY2F0aW9uIG1vbml0b3IuCiAJICovCi0JaW93cml0ZTMyYmUoMCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0xNQVQpOworCWlvd3JpdGUzMmJlKDAsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0xNQVQpOwogCiAJLyoKIAkgKiAgU2h1dGRvd24gQ1JHIG1hcC4KIAkgKi8KLQlpb3dyaXRlMzJiZSgwLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfQ1NSQVQpOworCWlvd3JpdGUzMmJlKDAsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0NTUkFUKTsKIAogCS8qCiAJICogIENsZWFyIGVycm9yIHN0YXR1cy4KIAkgKi8KLQlpb3dyaXRlMzJiZSgweEZGRkZGRkZGLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfRURQQVQpOwotCWlvd3JpdGUzMmJlKDB4RkZGRkZGRkYsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WRUFUKTsKLQlpb3dyaXRlMzJiZSgweDA3MDAwNzAwLCB0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfUFNUQVQpOworCWlvd3JpdGUzMmJlKDB4RkZGRkZGRkYsIGJyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0VEUEFUKTsKKwlpb3dyaXRlMzJiZSgweEZGRkZGRkZGLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WRUFUKTsKKwlpb3dyaXRlMzJiZSgweDA3MDAwNzAwLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9QU1RBVCk7CiAKIAkvKgogCSAqICBSZW1vdmUgVklSUSBpbnRlcnJ1cHQgKGlmIGFueSkKIAkgKi8KLQlpZiAoaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVklDUikgJiAweDgwMCkgewotCQlpb3dyaXRlMzJiZSgweDgwMDAsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WSUNSKTsKLQl9CisJaWYgKGlvcmVhZDMyYmUoYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVklDUikgJiAweDgwMCkKKwkJaW93cml0ZTMyYmUoMHg4MDAwLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WSUNSKTsKIAogCS8qCiAJICogIE1hcCBhbGwgSW50ZXJydXB0cyB0byBQQ0kgSU5UQQogCSAqLwotCWlvd3JpdGUzMmJlKDB4MCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0lOVE0xKTsKLQlpb3dyaXRlMzJiZSgweDAsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRNMik7CisJaW93cml0ZTMyYmUoMHgwLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRNMSk7CisJaW93cml0ZTMyYmUoMHgwLCBicmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9JTlRNMik7CiAKLQl0c2kxNDhfaXJxX2V4aXQocGRldik7CisJdHNpMTQ4X2lycV9leGl0KGJyaWRnZSwgcGRldik7CiAKIAl2bWVfdW5yZWdpc3Rlcl9icmlkZ2UodHNpMTQ4X2JyaWRnZSk7CiAKLQl0c2kxNDhfY3Jjc3JfZXhpdChwZGV2KTsKKwl0c2kxNDhfY3Jjc3JfZXhpdCh0c2kxNDhfYnJpZGdlLCBwZGV2KTsKIAogCS8qIHJlc291cmNlcyBhcmUgc3RvcmVkIGluIGxpbmsgbGlzdCAqLwogCWxpc3RfZm9yX2VhY2gocG9zLCAmKHRzaTE0OF9icmlkZ2UtPmRtYV9yZXNvdXJjZXMpKSB7CkBAIC0yNjA4LDE5ICsyNjAwLDIyIEBACiAKIAkvKiByZXNvdXJjZXMgYXJlIHN0b3JlZCBpbiBsaW5rIGxpc3QgKi8KIAlsaXN0X2Zvcl9lYWNoKHBvcywgJih0c2kxNDhfYnJpZGdlLT5tYXN0ZXJfcmVzb3VyY2VzKSkgewotCQltYXN0ZXJfaW1hZ2UgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHZtZV9tYXN0ZXJfcmVzb3VyY2UsCQkJCWxpc3QpOworCQltYXN0ZXJfaW1hZ2UgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHZtZV9tYXN0ZXJfcmVzb3VyY2UsCisJCQlsaXN0KTsKIAkJbGlzdF9kZWwocG9zKTsKIAkJa2ZyZWUobWFzdGVyX2ltYWdlKTsKIAl9CiAKLQl0c2kxNDhfaXJxX2V4aXQocGRldik7CisJdHNpMTQ4X2lycV9leGl0KGJyaWRnZSwgcGRldik7CiAKLQlpb3VubWFwKHRzaTE0OF9icmlkZ2UtPmJhc2UpOworCWlvdW5tYXAoYnJpZGdlLT5iYXNlKTsKIAogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAKIAlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAKKwlrZnJlZSh0c2kxNDhfYnJpZGdlLT5kcml2ZXJfcHJpdik7CisKIAlrZnJlZSh0c2kxNDhfYnJpZGdlKTsKIH0KIApAQCAtMjYzNCwyNTAgKzI2MjksMTEgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZXJyX2NoaywgIkNoZWNrIGZvciBWTUUgZXJyb3JzIG9uIHJlYWRzIGFuZCB3cml0ZXMiKTsKIG1vZHVsZV9wYXJhbShlcnJfY2hrLCBib29sLCAwKTsKIAorTU9EVUxFX1BBUk1fREVTQyhnZW9pZCwgIk92ZXJyaWRlIGdlb2dyYXBoaWNhbCBhZGRyZXNzaW5nIik7Cittb2R1bGVfcGFyYW0oZ2VvaWQsIGludCwgMCk7CisKIE1PRFVMRV9ERVNDUklQVElPTigiVk1FIGRyaXZlciBmb3IgdGhlIFR1bmRyYSBUZW1wZSBWTUUgYnJpZGdlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KHRzaTE0OF9pbml0KTsKIG1vZHVsZV9leGl0KHRzaTE0OF9leGl0KTsKLQotLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBTVEFHSU5HCi0gKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLQotI2lmIDAKLS8qCi0gKiBEaXJlY3QgTW9kZSBETUEgdHJhbnNmZXIKLSAqCi0gKiBYWFggTm90IGxvb2tpbmcgYXQgZGlyZWN0IG1vZGUgZm9yIG5vdywgd2UgY2FuIGFsd2F5cyB1c2UgbGluayBsaXN0IG1vZGUKLSAqICAgICB3aXRoIGEgc2luZ2xlIGVudHJ5LgotICovCi1pbnQgdHNpMTQ4X2RtYV9ydW4oc3RydWN0IHZtZV9kbWFfcmVzb3VyY2UgKnJlc291cmNlLCBzdHJ1Y3Qgdm1lX2RtYV9hdHRyIHNyYywKLQlzdHJ1Y3Qgdm1lX2RtYV9hdHRyIGRlc3QsIHNpemVfdCBjb3VudCkKLXsKLQl1MzIgZGN0bHJlZyA9IDA7Ci0JdW5zaWduZWQgaW50IHRtcDsKLQlpbnQgdmFsOwotCWludCBjaGFubmVsLCB4OwotCXN0cnVjdCB2bWVEbWFQYWNrZXQgKmN1cl9kbWE7Ci0Jc3RydWN0IHRzaTE0OF9kbWFfZGVzY3JpcHRvciAqZG1hTEw7Ci0KLQkvKiBkaXJlY3QgbW9kZSAqLwotCWRjdGxyZWcgPSAweDgwMDAwMDsKLQotCWZvciAoeCA9IDA7IHggPCA4OyB4KyspIHsJLyogdm1lIGJsb2NrIHNpemUgKi8KLQkJaWYgKCgzMiA8PCB4KSA+PSB2bWVEbWEtPm1heFZtZUJsb2NrU2l6ZSkgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKHggPT0gOCkKLQkJeCA9IDc7Ci0JZGN0bHJlZyB8PSAoeCA8PCAxMik7Ci0KLQlmb3IgKHggPSAwOyB4IDwgODsgeCsrKSB7CS8qIHBjaSBibG9jayBzaXplICovCi0JCWlmICgoMzIgPDwgeCkgPj0gdm1lRG1hLT5tYXhQY2lCbG9ja1NpemUpIHsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICh4ID09IDgpCi0JCXggPSA3OwotCWRjdGxyZWcgfD0gKHggPDwgNCk7Ci0KLQlpZiAodm1lRG1hLT52bWVCYWNrT2ZmVGltZXIpIHsKLQkJZm9yICh4ID0gMTsgeCA8IDg7IHgrKykgewkvKiB2bWUgdGltZXIgKi8KLQkJCWlmICgoMSA8PCAoeCAtIDEpKSA+PSB2bWVEbWEtPnZtZUJhY2tPZmZUaW1lcikgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmICh4ID09IDgpCi0JCQl4ID0gNzsKLQkJZGN0bHJlZyB8PSAoeCA8PCA4KTsKLQl9Ci0KLQlpZiAodm1lRG1hLT5wY2lCYWNrT2ZmVGltZXIpIHsKLQkJZm9yICh4ID0gMTsgeCA8IDg7IHgrKykgewkvKiBwY2kgdGltZXIgKi8KLQkJCWlmICgoMSA8PCAoeCAtIDEpKSA+PSB2bWVEbWEtPnBjaUJhY2tPZmZUaW1lcikgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmICh4ID09IDgpCi0JCQl4ID0gNzsKLQkJZGN0bHJlZyB8PSAoeCA8PCAwKTsKLQl9Ci0KLQkvKiBQcm9ncmFtIHJlZ2lzdGVycyBmb3IgRE1BIHRyYW5zZmVyICovCi0JaW93cml0ZTMyYmUoZG1hTEwtPmRzYXUsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKwotCQlUU0kxNDhfTENTUl9ETUFbY2hhbm5lbF0gKyBUU0kxNDhfTENTUl9PRkZTRVRfRFNBVSk7Ci0JaW93cml0ZTMyYmUoZG1hTEwtPmRzYWwsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKwotCQlUU0kxNDhfTENTUl9ETUFbY2hhbm5lbF0gKyBUU0kxNDhfTENTUl9PRkZTRVRfRFNBTCk7Ci0JaW93cml0ZTMyYmUoZG1hTEwtPmRkYXUsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKwotCQlUU0kxNDhfTENTUl9ETUFbY2hhbm5lbF0gKyBUU0kxNDhfTENTUl9PRkZTRVRfRERBVSk7Ci0JaW93cml0ZTMyYmUoZG1hTEwtPmRkYWwsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKwotCQlUU0kxNDhfTENTUl9ETUFbY2hhbm5lbF0gKyBUU0kxNDhfTENTUl9PRkZTRVRfRERBTCk7Ci0JaW93cml0ZTMyYmUoZG1hTEwtPmRzYXQsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKwotCQlUU0kxNDhfTENTUl9ETUFbY2hhbm5lbF0gKyBUU0kxNDhfTENTUl9PRkZTRVRfRFNBVCk7Ci0JaW93cml0ZTMyYmUoZG1hTEwtPmRkYXQsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKwotCQlUU0kxNDhfTENTUl9ETUFbY2hhbm5lbF0gKyBUU0kxNDhfTENTUl9PRkZTRVRfRERBVCk7Ci0JaW93cml0ZTMyYmUoZG1hTEwtPmRjbnQsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKwotCQlUU0kxNDhfTENTUl9ETUFbY2hhbm5lbF0gKyBUU0kxNDhfTENTUl9PRkZTRVRfRENOVCk7Ci0JaW93cml0ZTMyYmUoZG1hTEwtPmRkYnMsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKwotCQlUU0kxNDhfTENTUl9ETUFbY2hhbm5lbF0gKyBUU0kxNDhfTENTUl9PRkZTRVRfRERCUyk7Ci0KLQkvKiBTdGFydCB0aGUgb3BlcmF0aW9uICovCi0JaW93cml0ZTMyYmUoZGN0bHJlZyB8IDB4MjAwMDAwMCwgdHNpMTQ4X2JyaWRnZS0+YmFzZSArCi0JCVRTSTE0OF9MQ1NSX0RNQVtjaGFubmVsXSArIFRTSTE0OF9MQ1NSX09GRlNFVF9EQ1RMKTsKLQotCXRtcCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX0RNQVtjaGFubmVsXSArCi0JCVRTSTE0OF9MQ1NSX09GRlNFVF9EU1RBKTsKLQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZG1hX3F1ZXVlW2NoYW5uZWxdLCAodG1wICYgMHgxMDAwMDAwKSA9PSAwKTsKLQotCS8qCi0JICogUmVhZCBzdGF0dXMgcmVnaXN0ZXIsIHdlIHNob3VsZCBwcm9iYWJseSBkbyB0aGlzIGluIHNvbWUgZXJyb3IKLQkgKiBoYW5kbGVyIHJhdGhlciB0aGFuIGhlcmUgc28gdGhhdCB3ZSBjYW4gYmUgc3VyZSB3ZSBoYXZlbid0IGtpY2tlZCBvZmYKLQkgKiBhbm90aGVyIERNQSB0cmFuc2Zlci4KLQkgKi8KLQl2YWwgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9ETUFbY2hhbm5lbF0gKwotCQlUU0kxNDhfTENTUl9PRkZTRVRfRFNUQSk7Ci0KLQl2bWVEbWEtPnZtZURtYVN0YXR1cyA9IDA7Ci0JaWYgKHZhbCAmIDB4MTAwMDAwMDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkiRE1BIEVycm9yIGluIERNQV90ZW1wZV9pcnFoYW5kbGVyIERTVEE9JTA4WFxuIiwKLQkJCXZhbCk7Ci0JCXZtZURtYS0+dm1lRG1hU3RhdHVzID0gdmFsOwotCi0JfQotCXJldHVybiAoMCk7Ci19Ci0jZW5kaWYKLQotI2lmIDAKLQotLyogR2xvYmFsIFZNRSBjb250cm9sbGVyIGluZm9ybWF0aW9uICovCi1zdHJ1Y3QgcGNpX2RldiAqdm1lX3BjaV9kZXY7Ci0KLS8qCi0gKiBTZXQgdGhlIFZNRSBidXMgYXJiaXRlciB3aXRoIHRoZSByZXF1ZXN0ZWQgYXR0cmlidXRlcwotICovCi1pbnQgdGVtcGVfc2V0X2FyYml0ZXIodm1lQXJiaXRlckNmZ190ICogdm1lQXJiKQotewotCWludCB0ZW1wX2N0bCA9IDA7Ci0JaW50IGd0byA9IDA7Ci0KLQl0ZW1wX2N0bCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZDVFJMKTsKLQl0ZW1wX2N0bCAmPSAweEZGRUZGRjAwOwotCi0JaWYgKHZtZUFyYi0+Z2xvYmFsVGltZW91dFRpbWVyID09IDB4RkZGRkZGRkYpIHsKLQkJZ3RvID0gODsKLQl9IGVsc2UgaWYgKHZtZUFyYi0+Z2xvYmFsVGltZW91dFRpbWVyID4gMjA0OCkgewotCQlyZXR1cm4gKC1FSU5WQUwpOwotCX0gZWxzZSBpZiAodm1lQXJiLT5nbG9iYWxUaW1lb3V0VGltZXIgPT0gMCkgewotCQlndG8gPSAwOwotCX0gZWxzZSB7Ci0JCWd0byA9IDE7Ci0JCXdoaWxlICgoMTYgKiAoMSA8PCAoZ3RvIC0gMSkpKSA8IHZtZUFyYi0+Z2xvYmFsVGltZW91dFRpbWVyKSB7Ci0JCQlndG8gKz0gMTsKLQkJfQotCX0KLQl0ZW1wX2N0bCB8PSBndG87Ci0KLQlpZiAodm1lQXJiLT5hcmJpdGVyTW9kZSAhPSBWTUVfUFJJT1JJVFlfTU9ERSkgewotCQl0ZW1wX2N0bCB8PSAxIDw8IDY7Ci0JfQotCi0JaWYgKHZtZUFyYi0+YXJiaXRlclRpbWVvdXRGbGFnKSB7Ci0JCXRlbXBfY3RsIHw9IDEgPDwgNzsKLQl9Ci0KLQlpZiAodm1lQXJiLT5ub0Vhcmx5UmVsZWFzZUZsYWcpIHsKLQkJdGVtcF9jdGwgfD0gMSA8PCAyMDsKLQl9Ci0JaW93cml0ZTMyYmUodGVtcF9jdGwsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WQ1RSTCk7Ci0KLQlyZXR1cm4gKDApOwotfQotCi0vKgotICogUmV0dXJuIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBWTUUgYnVzIGFyYml0ZXIuCi0gKi8KLWludCB0ZW1wZV9nZXRfYXJiaXRlcih2bWVBcmJpdGVyQ2ZnX3QgKiB2bWVBcmIpCi17Ci0JaW50IHRlbXBfY3RsID0gMDsKLQlpbnQgZ3RvID0gMDsKLQotCi0JdGVtcF9jdGwgPSBpb3JlYWQzMmJlKHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WQ1RSTCk7Ci0KLQlndG8gPSB0ZW1wX2N0bCAmIDB4RjsKLQlpZiAoZ3RvICE9IDApIHsKLQkJdm1lQXJiLT5nbG9iYWxUaW1lb3V0VGltZXIgPSAoMTYgKiAoMSA8PCAoZ3RvIC0gMSkpKTsKLQl9Ci0KLQlpZiAodGVtcF9jdGwgJiAoMSA8PCA2KSkgewotCQl2bWVBcmItPmFyYml0ZXJNb2RlID0gVk1FX1JfUk9CSU5fTU9ERTsKLQl9IGVsc2UgewotCQl2bWVBcmItPmFyYml0ZXJNb2RlID0gVk1FX1BSSU9SSVRZX01PREU7Ci0JfQotCi0JaWYgKHRlbXBfY3RsICYgKDEgPDwgNykpIHsKLQkJdm1lQXJiLT5hcmJpdGVyVGltZW91dEZsYWcgPSAxOwotCX0KLQotCWlmICh0ZW1wX2N0bCAmICgxIDw8IDIwKSkgewotCQl2bWVBcmItPm5vRWFybHlSZWxlYXNlRmxhZyA9IDE7Ci0JfQotCi0JcmV0dXJuICgwKTsKLX0KLQotLyoKLSAqIFNldCB0aGUgVk1FIGJ1cyByZXF1ZXN0b3Igd2l0aCB0aGUgcmVxdWVzdGVkIGF0dHJpYnV0ZXMKLSAqLwotaW50IHRlbXBlX3NldF9yZXF1ZXN0b3Iodm1lUmVxdWVzdGVyQ2ZnX3QgKiB2bWVSZXEpCi17Ci0JaW50IHRlbXBfY3RsID0gMDsKLQotCXRlbXBfY3RsID0gaW9yZWFkMzJiZSh0c2kxNDhfYnJpZGdlLT5iYXNlICsgVFNJMTQ4X0xDU1JfVk1DVFJMKTsKLQl0ZW1wX2N0bCAmPSAweEZGRkYwMDAwOwotCi0JaWYgKHZtZVJlcS0+cmVsZWFzZU1vZGUgPT0gMSkgewotCQl0ZW1wX2N0bCB8PSAoMSA8PCAzKTsKLQl9Ci0KLQlpZiAodm1lUmVxLT5mYWlyTW9kZSA9PSAxKSB7Ci0JCXRlbXBfY3RsIHw9ICgxIDw8IDIpOwotCX0KLQotCXRlbXBfY3RsIHw9ICh2bWVSZXEtPnRpbWVvblRpbWVvdXRUaW1lciAmIDcpIDw8IDg7Ci0JdGVtcF9jdGwgfD0gKHZtZVJlcS0+dGltZW9mZlRpbWVvdXRUaW1lciAmIDcpIDw8IDEyOwotCXRlbXBfY3RsIHw9IHZtZVJlcS0+cmVxdWVzdExldmVsOwotCi0JaW93cml0ZTMyYmUodGVtcF9jdGwsIHRzaTE0OF9icmlkZ2UtPmJhc2UgKyBUU0kxNDhfTENTUl9WTUNUUkwpOwotCXJldHVybiAoMCk7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIFZNRSBidXMgcmVxdWVzdG9yCi0gKi8KLWludCB0ZW1wZV9nZXRfcmVxdWVzdG9yKHZtZVJlcXVlc3RlckNmZ190ICogdm1lUmVxKQotewotCWludCB0ZW1wX2N0bCA9IDA7Ci0KLQl0ZW1wX2N0bCA9IGlvcmVhZDMyYmUodHNpMTQ4X2JyaWRnZS0+YmFzZSArIFRTSTE0OF9MQ1NSX1ZNQ1RSTCk7Ci0KLQlpZiAodGVtcF9jdGwgJiAweDE4KSB7Ci0JCXZtZVJlcS0+cmVsZWFzZU1vZGUgPSAxOwotCX0KLQotCWlmICh0ZW1wX2N0bCAmICgxIDw8IDIpKSB7Ci0JCXZtZVJlcS0+ZmFpck1vZGUgPSAxOwotCX0KLQotCXZtZVJlcS0+cmVxdWVzdExldmVsID0gdGVtcF9jdGwgJiAzOwotCXZtZVJlcS0+dGltZW9uVGltZW91dFRpbWVyID0gKHRlbXBfY3RsID4+IDgpICYgNzsKLQl2bWVSZXEtPnRpbWVvZmZUaW1lb3V0VGltZXIgPSAodGVtcF9jdGwgPj4gMTIpICYgNzsKLQotCXJldHVybiAoMCk7Ci19Ci0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5oIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS9icmlkZ2VzL3ZtZV90c2kxNDguaAppbmRleCA2ZjBmNzA1Li45ZTVmN2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2JyaWRnZXMvdm1lX3RzaTE0OC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvYnJpZGdlcy92bWVfdHNpMTQ4LmgKQEAgLTMzLDYgKzMzLDIyIEBACiAjZGVmaW5lIFRTSTE0OF9NQVhfTUFJTEJPWAkJNAkvKiBNYXggTWFpbCBCb3ggcmVnaXN0ZXJzICovCiAjZGVmaW5lIFRTSTE0OF9NQVhfU0VNQVBIT1JFCQk4CS8qIE1heCBTZW1hcGhvcmVzICovCiAKKy8qIFN0cnVjdHVyZSB1c2VkIHRvIGhvbGQgZHJpdmVyIHNwZWNpZmljIGluZm9ybWF0aW9uICovCitzdHJ1Y3QgdHNpMTQ4X2RyaXZlciB7CisJdm9pZCAqYmFzZTsJLyogQmFzZSBBZGRyZXNzIG9mIGRldmljZSByZWdpc3RlcnMgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCBkbWFfcXVldWVbMl07CisJd2FpdF9xdWV1ZV9oZWFkX3QgaWFja19xdWV1ZTsKKwl2b2lkICgqbG1fY2FsbGJhY2tbNF0pKGludCk7CS8qIENhbGxlZCBpbiBpbnRlcnJ1cHQgaGFuZGxlciAqLworCXZvaWQgKmNyY3NyX2tlcm5lbDsKKwlkbWFfYWRkcl90IGNyY3NyX2J1czsKKwlzdHJ1Y3Qgdm1lX21hc3Rlcl9yZXNvdXJjZSAqZmx1c2hfaW1hZ2U7CisJc3RydWN0IG11dGV4IHZtZV9ybXc7CQkvKiBPbmx5IG9uZSBSTVcgY3ljbGUgYXQgYSB0aW1lICovCisJc3RydWN0IG11dGV4IHZtZV9pbnQ7CQkvKgorCQkJCQkgKiBPbmx5IG9uZSBWTUUgaW50ZXJydXB0IGNhbiBiZQorCQkJCQkgKiBnZW5lcmF0ZWQgYXQgYSB0aW1lLCBwcm92aWRlIGxvY2tpbmcKKwkJCQkJICovCit9OworCiAvKgogICogTGF5b3V0IG9mIGEgRE1BQyBMaW5rZWQtTGlzdCBEZXNjcmlwdG9yCiAgKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS9kZXZpY2VzL3ZtZV91c2VyLmMgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2RldmljZXMvdm1lX3VzZXIuYwppbmRleCBlMjI4OTQyLi5jNjBjODBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL2RldmljZXMvdm1lX3VzZXIuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL2RldmljZXMvdm1lX3VzZXIuYwpAQCAtMSw4ICsxLDggQEAKIC8qCiAgKiBWTUVidXMgVXNlciBhY2Nlc3MgZHJpdmVyCiAgKgotICogQXV0aG9yOiBNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZWZhbnVjLmNvbT4KLSAqIENvcHlyaWdodCAyMDA4IEdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCisgKiBBdXRob3I6IE1hcnR5biBXZWxjaCA8bWFydHluLndlbGNoQGdlLmNvbT4KKyAqIENvcHlyaWdodCAyMDA4IEdFIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCiAgKgogICogQmFzZWQgb24gd29yayBieToKICAqICAgVG9tIEFybWlzdGVhZCBhbmQgQWppdCBQcmVtCkBAIC00MDAsOCArNDAwLDM5IEBACiAKIHN0YXRpYyBsb2ZmX3Qgdm1lX3VzZXJfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2ZmLCBpbnQgd2hlbmNlKQogewotCXByaW50ayhLRVJOX0VSUiAiTGxzZWVrIGN1cnJlbnRseSBpbmNvbXBsZXRlXG4iKTsKLQlyZXR1cm4gLUVJTlZBTDsKKwlsb2ZmX3QgYWJzb2x1dGUgPSAtMTsKKwl1bnNpZ25lZCBpbnQgbWlub3IgPSBNSU5PUihmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2KTsKKwlzaXplX3QgaW1hZ2Vfc2l6ZTsKKworCWRvd24oJmltYWdlW21pbm9yXS5zZW0pOworCWltYWdlX3NpemUgPSB2bWVfZ2V0X3NpemUoaW1hZ2VbbWlub3JdLnJlc291cmNlKTsKKworCXN3aXRjaCAod2hlbmNlKSB7CisJY2FzZSBTRUVLX1NFVDoKKwkJYWJzb2x1dGUgPSBvZmY7CisJCWJyZWFrOworCWNhc2UgU0VFS19DVVI6CisJCWFic29sdXRlID0gZmlsZS0+Zl9wb3MgKyBvZmY7CisJCWJyZWFrOworCWNhc2UgU0VFS19FTkQ6CisJCWFic29sdXRlID0gaW1hZ2Vfc2l6ZSArIG9mZjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdXAoJmltYWdlW21pbm9yXS5zZW0pOworCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCisJaWYgKChhYnNvbHV0ZSA8IDApIHx8IChhYnNvbHV0ZSA+PSBpbWFnZV9zaXplKSkgeworCQl1cCgmaW1hZ2VbbWlub3JdLnNlbSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZpbGUtPmZfcG9zID0gYWJzb2x1dGU7CisKKwl1cCgmaW1hZ2VbbWlub3JdLnNlbSk7CisKKwlyZXR1cm4gYWJzb2x1dGU7CiB9CiAKIC8qCkBAIC01NzQsOCArNjA1LDggQEAKIAkgKiBpbiBmdXR1cmUgcmV2aXNpb25zIGlmIHRoYXQgZXZlciBiZWNvbWVzIG5lY2Vzc2FyeS4KIAkgKi8KIAlpZiAoYnVzX251bSA+IFVTRVJfQlVTX01BWCkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBEcml2ZXIgb25seSBhYmxlIHRvIGhhbmRsZSAlZCBQSU8yICIKLQkJCSJDYXJkc1xuIiwgZHJpdmVyX25hbWUsIFVTRVJfQlVTX01BWCk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IERyaXZlciBvbmx5IGFibGUgdG8gaGFuZGxlICVkIGJ1c2VzXG4iLAorCQkJZHJpdmVyX25hbWUsIFVTRVJfQlVTX01BWCk7CiAJCWJ1c19udW0gPSBVU0VSX0JVU19NQVg7CiAJfQogCkBAIC02NzAsOCArNzAxLDEyIEBACiAJLyogUmVxdWVzdCBzbGF2ZSByZXNvdXJjZXMgYW5kIGFsbG9jYXRlIGJ1ZmZlcnMgKDEyOGtCIHdpZGUpICovCiAJZm9yIChpID0gU0xBVkVfTUlOT1I7IGkgPCAoU0xBVkVfTUFYICsgMSk7IGkrKykgewogCQkvKiBYWFggTmVlZCB0byBwcm9wZXJseSByZXF1ZXN0IGF0dHJpYnV0ZXMgKi8KKwkJLyogRm9yIGNhOTFjeDQyIGJyaWRnZSB0aGVyZSBhcmUgb25seSB0d28gc2xhdmUgd2luZG93cworCQkgKiBzdXBwb3J0aW5nIEExNiBhZGRyZXNzaW5nLCBzbyB3ZSByZXF1ZXN0IEEyNCBzdXBwb3J0ZWQKKwkJICogYnkgYWxsIHdpbmRvd3MuCisJCSAqLwogCQlpbWFnZVtpXS5yZXNvdXJjZSA9IHZtZV9zbGF2ZV9yZXF1ZXN0KHZtZV91c2VyX2JyaWRnZSwKLQkJCVZNRV9BMTYsIFZNRV9TQ1QpOworCQkJVk1FX0EyNCwgVk1FX1NDVCk7CiAJCWlmIChpbWFnZVtpXS5yZXNvdXJjZSA9PSBOVUxMKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmFibGUgdG8gYWxsb2NhdGUgc2xhdmUgIgogCQkJCSJyZXNvdXJjZVxuIik7CkBAIC03MDMsNiArNzM4LDE0IEBACiAJCQkJInJlc291cmNlXG4iKTsKIAkJCWdvdG8gZXJyX21hc3RlcjsKIAkJfQorCQlpbWFnZVtpXS5zaXplX2J1ZiA9IFBDSV9CVUZfU0laRTsKKwkJaW1hZ2VbaV0ua2Vybl9idWYgPSBrbWFsbG9jKGltYWdlW2ldLnNpemVfYnVmLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGltYWdlW2ldLmtlcm5fYnVmID09IE5VTEwpIHsKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKKwkJCQkibWFzdGVyIHdpbmRvdyBidWZmZXJzXG4iKTsKKwkJCWVyciA9IC1FTk9NRU07CisJCQlnb3RvIGVycl9tYXN0ZXJfYnVmOworCQl9CiAJfQogCiAJLyogQ3JlYXRlIHN5c2ZzIGVudHJpZXMgLSBvbiB1ZGV2IHN5c3RlbXMgdGhpcyBjcmVhdGVzIHRoZSBkZXYgZmlsZXMgKi8KQEAgLTc1Niw2ICs3OTksOSBAQAogCiAJLyogRW5zdXJlIGNvdW50ZXIgc2V0IGNvcnJlY3R5IHRvIHVuYWxsb2MgYWxsIG1hc3RlciB3aW5kb3dzICovCiAJaSA9IE1BU1RFUl9NQVggKyAxOworZXJyX21hc3Rlcl9idWY6CisJZm9yIChpID0gTUFTVEVSX01JTk9SOyBpIDwgKE1BU1RFUl9NQVggKyAxKTsgaSsrKQorCQlrZnJlZShpbWFnZVtpXS5rZXJuX2J1Zik7CiBlcnJfbWFzdGVyOgogCXdoaWxlIChpID4gTUFTVEVSX01JTk9SKSB7CiAJCWktLTsKQEAgLTc5MSw2ICs4MzcsOSBAQAogCX0KIAljbGFzc19kZXN0cm95KHZtZV91c2VyX3N5c2ZzX2NsYXNzKTsKIAorCWZvciAoaSA9IE1BU1RFUl9NSU5PUjsgaSA8IChNQVNURVJfTUFYICsgMSk7IGkrKykKKwkJa2ZyZWUoaW1hZ2VbaV0ua2Vybl9idWYpOworCiAJZm9yIChpID0gU0xBVkVfTUlOT1I7IGkgPCAoU0xBVkVfTUFYICsgMSk7IGkrKykgewogCQl2bWVfc2xhdmVfc2V0KGltYWdlW2ldLnJlc291cmNlLCAwLCAwLCAwLCAwLCBWTUVfQTMyLCAwKTsKIAkJdm1lX3NsYXZlX2ZyZWUoaW1hZ2VbaV0ucmVzb3VyY2UpOwpAQCAtODE4LDcgKzg2Nyw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkoYnVzLCBpbnQsICZidXNfbnVtLCAwKTsKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJWTUUgVXNlciBTcGFjZSBBY2Nlc3MgRHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZWZhbnVjLmNvbSIpOworTU9EVUxFX0FVVEhPUigiTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2UuY29tIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KHZtZV91c2VyX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS92bWUuYyBiL2RyaXZlcnMvc3RhZ2luZy92bWUvdm1lLmMKaW5kZXggOTk0ZmRiOS4uZDZkODRlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3ZtZS92bWUuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL3ZtZS5jCkBAIC0xLDggKzEsOCBAQAogLyoKICAqIFZNRSBCcmlkZ2UgRnJhbWV3b3JrCiAgKgotICogQXV0aG9yOiBNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZWZhbnVjLmNvbT4KLSAqIENvcHlyaWdodCAyMDA4IEdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCisgKiBBdXRob3I6IE1hcnR5biBXZWxjaCA8bWFydHluLndlbGNoQGdlLmNvbT4KKyAqIENvcHlyaWdodCAyMDA4IEdFIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCiAgKgogICogQmFzZWQgb24gd29yayBieSBUb20gQXJtaXN0ZWFkIGFuZCBBaml0IFByZW0KICAqIENvcHlyaWdodCAyMDA0IE1vdG9yb2xhIEluYy4KQEAgLTM3LDggKzM3LDggQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdm1lX2J1c19udW1iZXJzOwogREVGSU5FX01VVEVYKHZtZV9idXNfbnVtX210eCk7CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCB2bWVfZXhpdCAodm9pZCk7Ci1zdGF0aWMgaW50IF9faW5pdCB2bWVfaW5pdCAodm9pZCk7CitzdGF0aWMgdm9pZCBfX2V4aXQgdm1lX2V4aXQodm9pZCk7CitzdGF0aWMgaW50IF9faW5pdCB2bWVfaW5pdCh2b2lkKTsKIAogCiAvKgpAQCAtODYsMjYgKzg2LDI2IEBACiAgKiBYWFggVk1FIGJyaWRnZXMgY291bGQgYmUgYXZhaWxhYmxlIG9uIGJ1c2VzIG90aGVyIHRoYW4gUENJLiBBdCB0aGUgbW9tbWVudAogICogICAgIHRoaXMgZnJhbWV3b3JrIG9ubHkgc3VwcG9ydHMgUENJIGRldmljZXMuCiAgKi8KLXZvaWQgKiB2bWVfYWxsb2NfY29uc2lzdGVudChzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgc2l6ZV90IHNpemUsCit2b2lkICp2bWVfYWxsb2NfY29uc2lzdGVudChzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgc2l6ZV90IHNpemUsCiAJZG1hX2FkZHJfdCAqZG1hKQogewogCXN0cnVjdCB2bWVfYnJpZGdlICpicmlkZ2U7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAKLQlpZihyZXNvdXJjZSA9PSBOVUxMKSB7Ci0JCXByaW50aygiTm8gcmVzb3VyY2VcbiIpOworCWlmIChyZXNvdXJjZSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiTm8gcmVzb3VyY2VcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAlicmlkZ2UgPSBmaW5kX2JyaWRnZShyZXNvdXJjZSk7Ci0JaWYoYnJpZGdlID09IE5VTEwpIHsKLQkJcHJpbnRrKCJDYW4ndCBmaW5kIGJyaWRnZVxuIik7CisJaWYgKGJyaWRnZSA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ2FuJ3QgZmluZCBicmlkZ2VcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAkvKiBGaW5kIHBjaV9kZXYgY29udGFpbmVyIG9mIGRldiAqLwogCWlmIChicmlkZ2UtPnBhcmVudCA9PSBOVUxMKSB7Ci0JCXByaW50aygiRGV2IGVudHJ5IE5VTExcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkRldiBlbnRyeSBOVUxMXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCXBkZXYgPSBjb250YWluZXJfb2YoYnJpZGdlLT5wYXJlbnQsIHN0cnVjdCBwY2lfZGV2LCBkZXYpOwpAQCAtMTI2LDE0ICsxMjYsMTQgQEAKIAlzdHJ1Y3Qgdm1lX2JyaWRnZSAqYnJpZGdlOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCi0JaWYocmVzb3VyY2UgPT0gTlVMTCkgewotCQlwcmludGsoIk5vIHJlc291cmNlXG4iKTsKKwlpZiAocmVzb3VyY2UgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIk5vIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWJyaWRnZSA9IGZpbmRfYnJpZGdlKHJlc291cmNlKTsKLQlpZihicmlkZ2UgPT0gTlVMTCkgewotCQlwcmludGsoIkNhbid0IGZpbmQgYnJpZGdlXG4iKTsKKwlpZiAoYnJpZGdlID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBmaW5kIGJyaWRnZVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTIxNiw3ICsyMTYsNyBAQAogCQkvKiBVc2VyIERlZmluZWQgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJcHJpbnRrKCJJbnZhbGlkIGFkZHJlc3Mgc3BhY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgYWRkcmVzcyBzcGFjZVxuIik7CiAJCXJldHZhbCA9IC1FSU5WQUw7CiAJCWJyZWFrOwogCX0KQEAgLTIyOCw3ICsyMjgsNyBAQAogICogUmVxdWVzdCBhIHNsYXZlIGltYWdlIHdpdGggc3BlY2lmaWMgYXR0cmlidXRlcywgcmV0dXJuIHNvbWUgdW5pcXVlCiAgKiBpZGVudGlmaWVyLgogICovCi1zdHJ1Y3Qgdm1lX3Jlc291cmNlICogdm1lX3NsYXZlX3JlcXVlc3Qoc3RydWN0IGRldmljZSAqZGV2LAorc3RydWN0IHZtZV9yZXNvdXJjZSAqdm1lX3NsYXZlX3JlcXVlc3Qoc3RydWN0IGRldmljZSAqZGV2LAogCXZtZV9hZGRyZXNzX3QgYWRkcmVzcywgdm1lX2N5Y2xlX3QgY3ljbGUpCiB7CiAJc3RydWN0IHZtZV9icmlkZ2UgKmJyaWRnZTsKQEAgLTI0OSwxMyArMjQ5LDEzIEBACiAJCQlzdHJ1Y3Qgdm1lX3NsYXZlX3Jlc291cmNlLCBsaXN0KTsKIAogCQlpZiAoc2xhdmVfaW1hZ2UgPT0gTlVMTCkgewotCQkJcHJpbnRrKCJSZWdpc3RlcmVkIE5VTEwgU2xhdmUgcmVzb3VyY2VcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSICJSZWdpc3RlcmVkIE5VTEwgU2xhdmUgcmVzb3VyY2VcbiIpOwogCQkJY29udGludWU7CiAJCX0KIAogCQkvKiBGaW5kIGFuIHVubG9ja2VkIGFuZCBjb21wYXRpYmxlIGltYWdlICovCiAJCW11dGV4X2xvY2soJihzbGF2ZV9pbWFnZS0+bXR4KSk7Ci0JCWlmKCgoc2xhdmVfaW1hZ2UtPmFkZHJlc3NfYXR0ciAmIGFkZHJlc3MpID09IGFkZHJlc3MpICYmCisJCWlmICgoKHNsYXZlX2ltYWdlLT5hZGRyZXNzX2F0dHIgJiBhZGRyZXNzKSA9PSBhZGRyZXNzKSAmJgogCQkJKChzbGF2ZV9pbWFnZS0+Y3ljbGVfYXR0ciAmIGN5Y2xlKSA9PSBjeWNsZSkgJiYKIAkJCShzbGF2ZV9pbWFnZS0+bG9ja2VkID09IDApKSB7CiAKQEAgLTI5Miw3ICsyOTIsNyBAQAogfQogRVhQT1JUX1NZTUJPTCh2bWVfc2xhdmVfcmVxdWVzdCk7CiAKLWludCB2bWVfc2xhdmVfc2V0IChzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgaW50IGVuYWJsZWQsCitpbnQgdm1lX3NsYXZlX3NldChzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgaW50IGVuYWJsZWQsCiAJdW5zaWduZWQgbG9uZyBsb25nIHZtZV9iYXNlLCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZSwKIAlkbWFfYWRkcl90IGJ1Zl9iYXNlLCB2bWVfYWRkcmVzc190IGFzcGFjZSwgdm1lX2N5Y2xlX3QgY3ljbGUpCiB7CkBAIC0zMDEsMjUgKzMwMSwyNSBAQAogCWludCByZXR2YWw7CiAKIAlpZiAocmVzb3VyY2UtPnR5cGUgIT0gVk1FX1NMQVZFKSB7Ci0JCXByaW50aygiTm90IGEgc2xhdmUgcmVzb3VyY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIk5vdCBhIHNsYXZlIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaW1hZ2UgPSBsaXN0X2VudHJ5KHJlc291cmNlLT5lbnRyeSwgc3RydWN0IHZtZV9zbGF2ZV9yZXNvdXJjZSwgbGlzdCk7CiAKIAlpZiAoYnJpZGdlLT5zbGF2ZV9zZXQgPT0gTlVMTCkgewotCQlwcmludGsoIkZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gLUVOT1NZUzsKIAl9CiAKLQlpZighKCgoaW1hZ2UtPmFkZHJlc3NfYXR0ciAmIGFzcGFjZSkgPT0gYXNwYWNlKSAmJgorCWlmICghKCgoaW1hZ2UtPmFkZHJlc3NfYXR0ciAmIGFzcGFjZSkgPT0gYXNwYWNlKSAmJgogCQkoKGltYWdlLT5jeWNsZV9hdHRyICYgY3ljbGUpID09IGN5Y2xlKSkpIHsKLQkJcHJpbnRrKCJJbnZhbGlkIGF0dHJpYnV0ZXNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIkludmFsaWQgYXR0cmlidXRlc1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXJldHZhbCA9IHZtZV9jaGVja193aW5kb3coYXNwYWNlLCB2bWVfYmFzZSwgc2l6ZSk7Ci0JaWYocmV0dmFsKQorCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKIAlyZXR1cm4gYnJpZGdlLT5zbGF2ZV9zZXQoaW1hZ2UsIGVuYWJsZWQsIHZtZV9iYXNlLCBzaXplLCBidWZfYmFzZSwKQEAgLTMyNyw3ICszMjcsNyBAQAogfQogRVhQT1JUX1NZTUJPTCh2bWVfc2xhdmVfc2V0KTsKIAotaW50IHZtZV9zbGF2ZV9nZXQgKHN0cnVjdCB2bWVfcmVzb3VyY2UgKnJlc291cmNlLCBpbnQgKmVuYWJsZWQsCitpbnQgdm1lX3NsYXZlX2dldChzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgaW50ICplbmFibGVkLAogCXVuc2lnbmVkIGxvbmcgbG9uZyAqdm1lX2Jhc2UsIHVuc2lnbmVkIGxvbmcgbG9uZyAqc2l6ZSwKIAlkbWFfYWRkcl90ICpidWZfYmFzZSwgdm1lX2FkZHJlc3NfdCAqYXNwYWNlLCB2bWVfY3ljbGVfdCAqY3ljbGUpCiB7CkBAIC0zMzUsMTQgKzMzNSwxNCBAQAogCXN0cnVjdCB2bWVfc2xhdmVfcmVzb3VyY2UgKmltYWdlOwogCiAJaWYgKHJlc291cmNlLT50eXBlICE9IFZNRV9TTEFWRSkgewotCQlwcmludGsoIk5vdCBhIHNsYXZlIHJlc291cmNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJOb3QgYSBzbGF2ZSByZXNvdXJjZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWltYWdlID0gbGlzdF9lbnRyeShyZXNvdXJjZS0+ZW50cnksIHN0cnVjdCB2bWVfc2xhdmVfcmVzb3VyY2UsIGxpc3QpOwogCiAJaWYgKGJyaWRnZS0+c2xhdmVfZ2V0ID09IE5VTEwpIHsKLQkJcHJpbnRrKCJ2bWVfc2xhdmVfZ2V0IG5vdCBzdXBwb3J0ZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInZtZV9zbGF2ZV9nZXQgbm90IHN1cHBvcnRlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMzU2LDE0ICszNTYsMTQgQEAKIAlzdHJ1Y3Qgdm1lX3NsYXZlX3Jlc291cmNlICpzbGF2ZV9pbWFnZTsKIAogCWlmIChyZXNvdXJjZS0+dHlwZSAhPSBWTUVfU0xBVkUpIHsKLQkJcHJpbnRrKCJOb3QgYSBzbGF2ZSByZXNvdXJjZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiTm90IGEgc2xhdmUgcmVzb3VyY2VcbiIpOwogCQlyZXR1cm47CiAJfQogCiAJc2xhdmVfaW1hZ2UgPSBsaXN0X2VudHJ5KHJlc291cmNlLT5lbnRyeSwgc3RydWN0IHZtZV9zbGF2ZV9yZXNvdXJjZSwKIAkJbGlzdCk7CiAJaWYgKHNsYXZlX2ltYWdlID09IE5VTEwpIHsKLQkJcHJpbnRrKCJDYW4ndCBmaW5kIHNsYXZlIHJlc291cmNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBmaW5kIHNsYXZlIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMzg0LDcgKzM4NCw3IEBACiAgKiBSZXF1ZXN0IGEgbWFzdGVyIGltYWdlIHdpdGggc3BlY2lmaWMgYXR0cmlidXRlcywgcmV0dXJuIHNvbWUgdW5pcXVlCiAgKiBpZGVudGlmaWVyLgogICovCi1zdHJ1Y3Qgdm1lX3Jlc291cmNlICogdm1lX21hc3Rlcl9yZXF1ZXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKK3N0cnVjdCB2bWVfcmVzb3VyY2UgKnZtZV9tYXN0ZXJfcmVxdWVzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJdm1lX2FkZHJlc3NfdCBhZGRyZXNzLCB2bWVfY3ljbGVfdCBjeWNsZSwgdm1lX3dpZHRoX3QgZHdpZHRoKQogewogCXN0cnVjdCB2bWVfYnJpZGdlICpicmlkZ2U7CkBAIC00MTEsNyArNDExLDcgQEAKIAogCQkvKiBGaW5kIGFuIHVubG9ja2VkIGFuZCBjb21wYXRpYmxlIGltYWdlICovCiAJCXNwaW5fbG9jaygmKG1hc3Rlcl9pbWFnZS0+bG9jaykpOwotCQlpZigoKG1hc3Rlcl9pbWFnZS0+YWRkcmVzc19hdHRyICYgYWRkcmVzcykgPT0gYWRkcmVzcykgJiYKKwkJaWYgKCgobWFzdGVyX2ltYWdlLT5hZGRyZXNzX2F0dHIgJiBhZGRyZXNzKSA9PSBhZGRyZXNzKSAmJgogCQkJKChtYXN0ZXJfaW1hZ2UtPmN5Y2xlX2F0dHIgJiBjeWNsZSkgPT0gY3ljbGUpICYmCiAJCQkoKG1hc3Rlcl9pbWFnZS0+d2lkdGhfYXR0ciAmIGR3aWR0aCkgPT0gZHdpZHRoKSAmJgogCQkJKG1hc3Rlcl9pbWFnZS0+bG9ja2VkID09IDApKSB7CkBAIC00NTIsNyArNDUyLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0wodm1lX21hc3Rlcl9yZXF1ZXN0KTsKIAotaW50IHZtZV9tYXN0ZXJfc2V0IChzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgaW50IGVuYWJsZWQsCitpbnQgdm1lX21hc3Rlcl9zZXQoc3RydWN0IHZtZV9yZXNvdXJjZSAqcmVzb3VyY2UsIGludCBlbmFibGVkLAogCXVuc2lnbmVkIGxvbmcgbG9uZyB2bWVfYmFzZSwgdW5zaWduZWQgbG9uZyBsb25nIHNpemUsCiAJdm1lX2FkZHJlc3NfdCBhc3BhY2UsIHZtZV9jeWNsZV90IGN5Y2xlLCB2bWVfd2lkdGhfdCBkd2lkdGgpCiB7CkBAIC00NjEsMjYgKzQ2MSwyNiBAQAogCWludCByZXR2YWw7CiAKIAlpZiAocmVzb3VyY2UtPnR5cGUgIT0gVk1FX01BU1RFUikgewotCQlwcmludGsoIk5vdCBhIG1hc3RlciByZXNvdXJjZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiTm90IGEgbWFzdGVyIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaW1hZ2UgPSBsaXN0X2VudHJ5KHJlc291cmNlLT5lbnRyeSwgc3RydWN0IHZtZV9tYXN0ZXJfcmVzb3VyY2UsIGxpc3QpOwogCiAJaWYgKGJyaWRnZS0+bWFzdGVyX3NldCA9PSBOVUxMKSB7Ci0JCXByaW50aygidm1lX21hc3Rlcl9zZXQgbm90IHN1cHBvcnRlZFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInZtZV9tYXN0ZXJfc2V0IG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZighKCgoaW1hZ2UtPmFkZHJlc3NfYXR0ciAmIGFzcGFjZSkgPT0gYXNwYWNlKSAmJgorCWlmICghKCgoaW1hZ2UtPmFkZHJlc3NfYXR0ciAmIGFzcGFjZSkgPT0gYXNwYWNlKSAmJgogCQkoKGltYWdlLT5jeWNsZV9hdHRyICYgY3ljbGUpID09IGN5Y2xlKSAmJgogCQkoKGltYWdlLT53aWR0aF9hdHRyICYgZHdpZHRoKSA9PSBkd2lkdGgpKSkgewotCQlwcmludGsoIkludmFsaWQgYXR0cmlidXRlc1xuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkludmFsaWQgYXR0cmlidXRlc1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCXJldHZhbCA9IHZtZV9jaGVja193aW5kb3coYXNwYWNlLCB2bWVfYmFzZSwgc2l6ZSk7Ci0JaWYocmV0dmFsKQorCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7CiAKIAlyZXR1cm4gYnJpZGdlLT5tYXN0ZXJfc2V0KGltYWdlLCBlbmFibGVkLCB2bWVfYmFzZSwgc2l6ZSwgYXNwYWNlLApAQCAtNDg4LDcgKzQ4OCw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHZtZV9tYXN0ZXJfc2V0KTsKIAotaW50IHZtZV9tYXN0ZXJfZ2V0IChzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgaW50ICplbmFibGVkLAoraW50IHZtZV9tYXN0ZXJfZ2V0KHN0cnVjdCB2bWVfcmVzb3VyY2UgKnJlc291cmNlLCBpbnQgKmVuYWJsZWQsCiAJdW5zaWduZWQgbG9uZyBsb25nICp2bWVfYmFzZSwgdW5zaWduZWQgbG9uZyBsb25nICpzaXplLAogCXZtZV9hZGRyZXNzX3QgKmFzcGFjZSwgdm1lX2N5Y2xlX3QgKmN5Y2xlLCB2bWVfd2lkdGhfdCAqZHdpZHRoKQogewpAQCAtNDk2LDE0ICs0OTYsMTQgQEAKIAlzdHJ1Y3Qgdm1lX21hc3Rlcl9yZXNvdXJjZSAqaW1hZ2U7CiAKIAlpZiAocmVzb3VyY2UtPnR5cGUgIT0gVk1FX01BU1RFUikgewotCQlwcmludGsoIk5vdCBhIG1hc3RlciByZXNvdXJjZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiTm90IGEgbWFzdGVyIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaW1hZ2UgPSBsaXN0X2VudHJ5KHJlc291cmNlLT5lbnRyeSwgc3RydWN0IHZtZV9tYXN0ZXJfcmVzb3VyY2UsIGxpc3QpOwogCiAJaWYgKGJyaWRnZS0+bWFzdGVyX2dldCA9PSBOVUxMKSB7Ci0JCXByaW50aygidm1lX21hc3Rlcl9zZXQgbm90IHN1cHBvcnRlZFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgInZtZV9tYXN0ZXJfc2V0IG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTUxNSw3ICs1MTUsNyBAQAogLyoKICAqIFJlYWQgZGF0YSBvdXQgb2YgVk1FIHNwYWNlIGludG8gYSBidWZmZXIuCiAgKi8KLXNzaXplX3Qgdm1lX21hc3Rlcl9yZWFkIChzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsCitzc2l6ZV90IHZtZV9tYXN0ZXJfcmVhZChzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsCiAJbG9mZl90IG9mZnNldCkKIHsKIAlzdHJ1Y3Qgdm1lX2JyaWRnZSAqYnJpZGdlID0gZmluZF9icmlkZ2UocmVzb3VyY2UpOwpAQCAtNTIzLDEyICs1MjMsMTIgQEAKIAlzaXplX3QgbGVuZ3RoOwogCiAJaWYgKGJyaWRnZS0+bWFzdGVyX3JlYWQgPT0gTlVMTCkgewotCQlwcmludGsoIlJlYWRpbmcgZnJvbSByZXNvdXJjZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUmVhZGluZyBmcm9tIHJlc291cmNlIG5vdCBzdXBwb3J0ZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAocmVzb3VyY2UtPnR5cGUgIT0gVk1FX01BU1RFUikgewotCQlwcmludGsoIk5vdCBhIG1hc3RlciByZXNvdXJjZVxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiTm90IGEgbWFzdGVyIHJlc291cmNlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC01MzcsNyArNTM3LDcgQEAKIAlsZW5ndGggPSB2bWVfZ2V0X3NpemUocmVzb3VyY2UpOwogCiAJaWYgKG9mZnNldCA+IGxlbmd0aCkgewotCQlwcmludGsoIkludmFsaWQgT2Zmc2V0XG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSW52YWxpZCBPZmZzZXRcbiIpOwogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKQEAgLTU1Miw3ICs1NTIsNyBAQAogLyoKICAqIFdyaXRlIGRhdGEgb3V0IHRvIFZNRSBzcGFjZSBmcm9tIGEgYnVmZmVyLgogICovCi1zc2l6ZV90IHZtZV9tYXN0ZXJfd3JpdGUgKHN0cnVjdCB2bWVfcmVzb3VyY2UgKnJlc291cmNlLCB2b2lkICpidWYsCitzc2l6ZV90IHZtZV9tYXN0ZXJfd3JpdGUoc3RydWN0IHZtZV9yZXNvdXJjZSAqcmVzb3VyY2UsIHZvaWQgKmJ1ZiwKIAlzaXplX3QgY291bnQsIGxvZmZfdCBvZmZzZXQpCiB7CiAJc3RydWN0IHZtZV9icmlkZ2UgKmJyaWRnZSA9IGZpbmRfYnJpZGdlKHJlc291cmNlKTsKQEAgLTU2MCwxMiArNTYwLDEyIEBACiAJc2l6ZV90IGxlbmd0aDsKIAogCWlmIChicmlkZ2UtPm1hc3Rlcl93cml0ZSA9PSBOVUxMKSB7Ci0JCXByaW50aygiV3JpdGluZyB0byByZXNvdXJjZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV3JpdGluZyB0byByZXNvdXJjZSBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKHJlc291cmNlLT50eXBlICE9IFZNRV9NQVNURVIpIHsKLQkJcHJpbnRrKCJOb3QgYSBtYXN0ZXIgcmVzb3VyY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIk5vdCBhIG1hc3RlciByZXNvdXJjZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNTc0LDcgKzU3NCw3IEBACiAJbGVuZ3RoID0gdm1lX2dldF9zaXplKHJlc291cmNlKTsKIAogCWlmIChvZmZzZXQgPiBsZW5ndGgpIHsKLQkJcHJpbnRrKCJJbnZhbGlkIE9mZnNldFxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkludmFsaWQgT2Zmc2V0XG4iKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCkBAIC01ODgsMTkgKzU4OCwxOSBAQAogLyoKICAqIFBlcmZvcm0gUk1XIGN5Y2xlIHRvIHByb3ZpZGVkIGxvY2F0aW9uLgogICovCi11bnNpZ25lZCBpbnQgdm1lX21hc3Rlcl9ybXcgKHN0cnVjdCB2bWVfcmVzb3VyY2UgKnJlc291cmNlLCB1bnNpZ25lZCBpbnQgbWFzaywKK3Vuc2lnbmVkIGludCB2bWVfbWFzdGVyX3JtdyhzdHJ1Y3Qgdm1lX3Jlc291cmNlICpyZXNvdXJjZSwgdW5zaWduZWQgaW50IG1hc2ssCiAJdW5zaWduZWQgaW50IGNvbXBhcmUsIHVuc2lnbmVkIGludCBzd2FwLCBsb2ZmX3Qgb2Zmc2V0KQogewogCXN0cnVjdCB2bWVfYnJpZGdlICpicmlkZ2UgPSBmaW5kX2JyaWRnZShyZXNvdXJjZSk7CiAJc3RydWN0IHZtZV9tYXN0ZXJfcmVzb3VyY2UgKmltYWdlOwogCiAJaWYgKGJyaWRnZS0+bWFzdGVyX3JtdyA9PSBOVUxMKSB7Ci0JCXByaW50aygiV3JpdGluZyB0byByZXNvdXJjZSBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiV3JpdGluZyB0byByZXNvdXJjZSBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKHJlc291cmNlLT50eXBlICE9IFZNRV9NQVNURVIpIHsKLQkJcHJpbnRrKCJOb3QgYSBtYXN0ZXIgcmVzb3VyY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIk5vdCBhIG1hc3RlciByZXNvdXJjZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNjE1LDE0ICs2MTUsMTQgQEAKIAlzdHJ1Y3Qgdm1lX21hc3Rlcl9yZXNvdXJjZSAqbWFzdGVyX2ltYWdlOwogCiAJaWYgKHJlc291cmNlLT50eXBlICE9IFZNRV9NQVNURVIpIHsKLQkJcHJpbnRrKCJOb3QgYSBtYXN0ZXIgcmVzb3VyY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIk5vdCBhIG1hc3RlciByZXNvdXJjZVxuIik7CiAJCXJldHVybjsKIAl9CiAKIAltYXN0ZXJfaW1hZ2UgPSBsaXN0X2VudHJ5KHJlc291cmNlLT5lbnRyeSwgc3RydWN0IHZtZV9tYXN0ZXJfcmVzb3VyY2UsCiAJCWxpc3QpOwogCWlmIChtYXN0ZXJfaW1hZ2UgPT0gTlVMTCkgewotCQlwcmludGsoIkNhbid0IGZpbmQgbWFzdGVyIHJlc291cmNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJDYW4ndCBmaW5kIG1hc3RlciByZXNvdXJjZVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTY0Myw3ICs2NDMsNyBAQAogICogUmVxdWVzdCBhIERNQSBjb250cm9sbGVyIHdpdGggc3BlY2lmaWMgYXR0cmlidXRlcywgcmV0dXJuIHNvbWUgdW5pcXVlCiAgKiBpZGVudGlmaWVyLgogICovCi1zdHJ1Y3Qgdm1lX3Jlc291cmNlICp2bWVfZG1hX3JlcXVlc3Qoc3RydWN0IGRldmljZSAqZGV2KQorc3RydWN0IHZtZV9yZXNvdXJjZSAqdm1lX2RtYV9yZXF1ZXN0KHN0cnVjdCBkZXZpY2UgKmRldiwgdm1lX2RtYV9yb3V0ZV90IHJvdXRlKQogewogCXN0cnVjdCB2bWVfYnJpZGdlICpicmlkZ2U7CiAJc3RydWN0IGxpc3RfaGVhZCAqZG1hX3BvcyA9IE5VTEw7CkBAIC02NjYsMTMgKzY2NiwxNSBAQAogCQkJc3RydWN0IHZtZV9kbWFfcmVzb3VyY2UsIGxpc3QpOwogCiAJCWlmIChkbWFfY3RybHIgPT0gTlVMTCkgewotCQkJcHJpbnRrKCJSZWdpc3RlcmVkIE5VTEwgRE1BIHJlc291cmNlXG4iKTsKKwkJCXByaW50ayhLRVJOX0VSUiAiUmVnaXN0ZXJlZCBOVUxMIERNQSByZXNvdXJjZVxuIik7CiAJCQljb250aW51ZTsKIAkJfQogCi0JCS8qIEZpbmQgYW4gdW5sb2NrZWQgY29udHJvbGxlciAqLworCQkvKiBGaW5kIGFuIHVubG9ja2VkIGFuZCBjb21wYXRpYmxlIGNvbnRyb2xsZXIgKi8KIAkJbXV0ZXhfbG9jaygmKGRtYV9jdHJsci0+bXR4KSk7Ci0JCWlmKGRtYV9jdHJsci0+bG9ja2VkID09IDApIHsKKwkJaWYgKCgoZG1hX2N0cmxyLT5yb3V0ZV9hdHRyICYgcm91dGUpID09IHJvdXRlKSAmJgorCQkJKGRtYV9jdHJsci0+bG9ja2VkID09IDApKSB7CisKIAkJCWRtYV9jdHJsci0+bG9ja2VkID0gMTsKIAkJCW11dGV4X3VubG9jaygmKGRtYV9jdHJsci0+bXR4KSk7CiAJCQlhbGxvY2F0ZWRfY3RybHIgPSBkbWFfY3RybHI7CkBAIC03MTUsMTYgKzcxNywxNSBAQAogCXN0cnVjdCB2bWVfZG1hX2xpc3QgKmRtYV9saXN0OwogCiAJaWYgKHJlc291cmNlLT50eXBlICE9IFZNRV9ETUEpIHsKLQkJcHJpbnRrKCJOb3QgYSBETUEgcmVzb3VyY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIk5vdCBhIERNQSByZXNvdXJjZVxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAogCWN0cmxyID0gbGlzdF9lbnRyeShyZXNvdXJjZS0+ZW50cnksIHN0cnVjdCB2bWVfZG1hX3Jlc291cmNlLCBsaXN0KTsKIAotCWRtYV9saXN0ID0gKHN0cnVjdCB2bWVfZG1hX2xpc3QgKilrbWFsbG9jKAotCQlzaXplb2Yoc3RydWN0IHZtZV9kbWFfbGlzdCksIEdGUF9LRVJORUwpOwotCWlmKGRtYV9saXN0ID09IE5VTEwpIHsKLQkJcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgZG1hIGxpc3RcbiIpOworCWRtYV9saXN0ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZtZV9kbWFfbGlzdCksIEdGUF9LRVJORUwpOworCWlmIChkbWFfbGlzdCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IGRtYSBsaXN0XG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCUlOSVRfTElTVF9IRUFEKCYoZG1hX2xpc3QtPmVudHJpZXMpKTsKQEAgLTc0NCwxNyArNzQ1LDE3IEBACiAJc3RydWN0IHZtZV9kbWFfYXR0ciAqYXR0cmlidXRlczsKIAlzdHJ1Y3Qgdm1lX2RtYV9wYXR0ZXJuICpwYXR0ZXJuX2F0dHI7CiAKLQlhdHRyaWJ1dGVzID0gKHN0cnVjdCB2bWVfZG1hX2F0dHIgKilrbWFsbG9jKAotCQlzaXplb2Yoc3RydWN0IHZtZV9kbWFfYXR0ciksIEdGUF9LRVJORUwpOwotCWlmKGF0dHJpYnV0ZXMgPT0gTlVMTCkgewotCQlwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGF0dHJpYnV0ZXMgc3RydWN0dXJlXG4iKTsKKwlhdHRyaWJ1dGVzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZtZV9kbWFfYXR0ciksIEdGUF9LRVJORUwpOworCWlmIChhdHRyaWJ1dGVzID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBhdHRyaWJ1dGVzICIKKwkJCSJzdHJ1Y3R1cmVcbiIpOwogCQlnb3RvIGVycl9hdHRyOwogCX0KIAotCXBhdHRlcm5fYXR0ciA9IChzdHJ1Y3Qgdm1lX2RtYV9wYXR0ZXJuICopa21hbGxvYygKLQkJc2l6ZW9mKHN0cnVjdCB2bWVfZG1hX3BhdHRlcm4pLCBHRlBfS0VSTkVMKTsKLQlpZihwYXR0ZXJuX2F0dHIgPT0gTlVMTCkgewotCQlwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBhdHRlcm4gYXR0cmlidXRlc1xuIik7CisJcGF0dGVybl9hdHRyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZtZV9kbWFfcGF0dGVybiksIEdGUF9LRVJORUwpOworCWlmIChwYXR0ZXJuX2F0dHIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHBhdHRlcm4gIgorCQkJImF0dHJpYnV0ZXNcbiIpOwogCQlnb3RvIGVycl9wYXQ7CiAJfQogCkBAIC03ODQsMTcgKzc4NSwxNyBAQAogCiAJLyogWFhYIFJ1biBzb21lIHNhbml0eSBjaGVja3MgaGVyZSAqLwogCi0JYXR0cmlidXRlcyA9IChzdHJ1Y3Qgdm1lX2RtYV9hdHRyICopa21hbGxvYygKLQkJc2l6ZW9mKHN0cnVjdCB2bWVfZG1hX2F0dHIpLCBHRlBfS0VSTkVMKTsKLQlpZihhdHRyaWJ1dGVzID09IE5VTEwpIHsKLQkJcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBhdHRyaWJ1dGVzIHN0cnVjdHVyZVxuIik7CisJYXR0cmlidXRlcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2bWVfZG1hX2F0dHIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYXR0cmlidXRlcyA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYXR0cmlidXRlcyAiCisJCQkic3RydWN0dXJlXG4iKTsKIAkJZ290byBlcnJfYXR0cjsKIAl9CiAKLQlwY2lfYXR0ciA9IChzdHJ1Y3Qgdm1lX2RtYV9wY2kgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgdm1lX2RtYV9wY2kpLAotCQlHRlBfS0VSTkVMKTsKLQlpZihwY2lfYXR0ciA9PSBOVUxMKSB7Ci0JCXByaW50aygiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgcGNpIGF0dHJpYnV0ZXNcbiIpOworCXBjaV9hdHRyID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZtZV9kbWFfcGNpKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBjaV9hdHRyID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBwY2kgIgorCQkJImF0dHJpYnV0ZXNcbiIpOwogCQlnb3RvIGVycl9wY2k7CiAJfQogCkBAIC04MjQsMTkgKzgyNSwxOCBAQAogCXN0cnVjdCB2bWVfZG1hX2F0dHIgKmF0dHJpYnV0ZXM7CiAJc3RydWN0IHZtZV9kbWFfdm1lICp2bWVfYXR0cjsKIAotCS8qIFhYWCBSdW4gc29tZSBzYW5pdHkgY2hlY2tzIGhlcmUgKi8KLQotCWF0dHJpYnV0ZXMgPSAoc3RydWN0IHZtZV9kbWFfYXR0ciAqKWttYWxsb2MoCisJYXR0cmlidXRlcyA9IGttYWxsb2MoCiAJCXNpemVvZihzdHJ1Y3Qgdm1lX2RtYV9hdHRyKSwgR0ZQX0tFUk5FTCk7Ci0JaWYoYXR0cmlidXRlcyA9PSBOVUxMKSB7Ci0JCXByaW50aygiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgYXR0cmlidXRlcyBzdHJ1Y3R1cmVcbiIpOworCWlmIChhdHRyaWJ1dGVzID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBhdHRyaWJ1dGVzICIKKwkJCSJzdHJ1Y3R1cmVcbiIpOwogCQlnb3RvIGVycl9hdHRyOwogCX0KIAotCXZtZV9hdHRyID0gKHN0cnVjdCB2bWVfZG1hX3ZtZSAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2bWVfZG1hX3ZtZSksCi0JCUdGUF9LRVJORUwpOwotCWlmKHZtZV9hdHRyID09IE5VTEwpIHsKLQkJcHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciB2bWUgYXR0cmlidXRlc1xuIik7CisJdm1lX2F0dHIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgdm1lX2RtYV92bWUpLCBHRlBfS0VSTkVMKTsKKwlpZiAodm1lX2F0dHIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIHZtZSAiCisJCQkiYXR0cmlidXRlc1xuIik7CiAJCWdvdG8gZXJyX3ZtZTsKIAl9CiAKQEAgLTg3NSwxMiArODc1LDEyIEBACiAJaW50IHJldHZhbDsKIAogCWlmIChicmlkZ2UtPmRtYV9saXN0X2FkZCA9PSBOVUxMKSB7Ci0JCXByaW50aygiTGluayBMaXN0IERNQSBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWRcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJMaW5rIExpc3QgRE1BIGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWlmICghbXV0ZXhfdHJ5bG9jaygmKGxpc3QtPm10eCkpKSB7Ci0JCXByaW50aygiTGluayBMaXN0IGFscmVhZHkgc3VibWl0dGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJMaW5rIExpc3QgYWxyZWFkeSBzdWJtaXR0ZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTg5OCw3ICs4OTgsNyBAQAogCWludCByZXR2YWw7CiAKIAlpZiAoYnJpZGdlLT5kbWFfbGlzdF9leGVjID09IE5VTEwpIHsKLQkJcHJpbnRrKCJMaW5rIExpc3QgRE1BIGV4ZWN1dGlvbiBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJMaW5rIExpc3QgRE1BIGV4ZWN1dGlvbiBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC05MTgsMTIgKzkxOCwxMiBAQAogCWludCByZXR2YWw7CiAKIAlpZiAoYnJpZGdlLT5kbWFfbGlzdF9lbXB0eSA9PSBOVUxMKSB7Ci0JCXByaW50aygiRW1wdHlpbmcgb2YgTGluayBMaXN0cyBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiRW1wdHlpbmcgb2YgTGluayBMaXN0cyBub3Qgc3VwcG9ydGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKCFtdXRleF90cnlsb2NrKCYobGlzdC0+bXR4KSkpIHsKLQkJcHJpbnRrKCJMaW5rIExpc3QgaW4gdXNlXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJMaW5rIExpc3QgaW4gdXNlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC05MzMsNyArOTMzLDcgQEAKIAkgKi8KIAlyZXR2YWwgPSBicmlkZ2UtPmRtYV9saXN0X2VtcHR5KGxpc3QpOwogCWlmIChyZXR2YWwpIHsKLQkJcHJpbnRrKCJVbmFibGUgdG8gZW1wdHkgbGluay1saXN0IGVudHJpZXNcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBlbXB0eSBsaW5rLWxpc3QgZW50cmllc1xuIik7CiAJCW11dGV4X3VubG9jaygmKGxpc3QtPm10eCkpOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KQEAgLTk0OSwxOSArOTQ5LDE5IEBACiAJc3RydWN0IHZtZV9kbWFfcmVzb3VyY2UgKmN0cmxyOwogCiAJaWYgKHJlc291cmNlLT50eXBlICE9IFZNRV9ETUEpIHsKLQkJcHJpbnRrKCJOb3QgYSBETUEgcmVzb3VyY2VcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIk5vdCBhIERNQSByZXNvdXJjZVxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAogCWN0cmxyID0gbGlzdF9lbnRyeShyZXNvdXJjZS0+ZW50cnksIHN0cnVjdCB2bWVfZG1hX3Jlc291cmNlLCBsaXN0KTsKIAogCWlmICghbXV0ZXhfdHJ5bG9jaygmKGN0cmxyLT5tdHgpKSkgewotCQlwcmludGsoIlJlc291cmNlIGJ1c3ksIGNhbid0IGZyZWVcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIlJlc291cmNlIGJ1c3ksIGNhbid0IGZyZWVcbiIpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCWlmICghKGxpc3RfZW1wdHkoJihjdHJsci0+cGVuZGluZykpICYmIGxpc3RfZW1wdHkoJihjdHJsci0+cnVubmluZykpKSkgewotCQlwcmludGsoIlJlc291cmNlIHN0aWxsIHByb2Nlc3NpbmcgdHJhbnNmZXJzXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUmVzb3VyY2Ugc3RpbGwgcHJvY2Vzc2luZyB0cmFuc2ZlcnNcbiIpOwogCQltdXRleF91bmxvY2soJihjdHJsci0+bXR4KSk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQpAQCAtOTkxLDcgKzk5MSw3IEBACiBFWFBPUlRfU1lNQk9MKHZtZV9pcnFfaGFuZGxlcik7CiAKIGludCB2bWVfaXJxX3JlcXVlc3Qoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgbGV2ZWwsIGludCBzdGF0aWQsCi0Jdm9pZCAoKmNhbGxiYWNrKShpbnQgbGV2ZWwsIGludCB2ZWN0b3IsIHZvaWQgKnByaXZfZGF0YSksCisJdm9pZCAoKmNhbGxiYWNrKShpbnQsIGludCwgdm9pZCAqKSwKIAl2b2lkICpwcml2X2RhdGEpCiB7CiAJc3RydWN0IHZtZV9icmlkZ2UgKmJyaWRnZTsKQEAgLTEwMDIsNyArMTAwMiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmKChsZXZlbCA8IDEpIHx8IChsZXZlbCA+IDcpKSB7CisJaWYgKChsZXZlbCA8IDEpIHx8IChsZXZlbCA+IDcpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBpbnRlcnJ1cHQgbGV2ZWxcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xMDI1LDcgKzEwMjUsNyBAQAogCWJyaWRnZS0+aXJxW2xldmVsIC0gMV0uY2FsbGJhY2tbc3RhdGlkXS5mdW5jID0gY2FsbGJhY2s7CiAKIAkvKiBFbmFibGUgSVJRIGxldmVsICovCi0JYnJpZGdlLT5pcnFfc2V0KGxldmVsLCAxLCAxKTsKKwlicmlkZ2UtPmlycV9zZXQoYnJpZGdlLCBsZXZlbCwgMSwgMSk7CiAKIAltdXRleF91bmxvY2soJihicmlkZ2UtPmlycV9tdHgpKTsKIApAQCAtMTA0Myw3ICsxMDQzLDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmKChsZXZlbCA8IDEpIHx8IChsZXZlbCA+IDcpKSB7CisJaWYgKChsZXZlbCA8IDEpIHx8IChsZXZlbCA+IDcpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBpbnRlcnJ1cHQgbGV2ZWxcbiIpOwogCQlyZXR1cm47CiAJfQpAQCAtMTA1OSw3ICsxMDU5LDcgQEAKIAogCS8qIERpc2FibGUgSVJRIGxldmVsIGlmIG5vIG1vcmUgaW50ZXJydXB0cyBhdHRhY2hlZCBhdCB0aGlzIGxldmVsKi8KIAlpZiAoYnJpZGdlLT5pcnFbbGV2ZWwgLSAxXS5jb3VudCA9PSAwKQotCQlicmlkZ2UtPmlycV9zZXQobGV2ZWwsIDAsIDEpOworCQlicmlkZ2UtPmlycV9zZXQoYnJpZGdlLCBsZXZlbCwgMCwgMSk7CiAKIAlicmlkZ2UtPmlycVtsZXZlbCAtIDFdLmNhbGxiYWNrW3N0YXRpZF0uZnVuYyA9IE5VTEw7CiAJYnJpZGdlLT5pcnFbbGV2ZWwgLSAxXS5jYWxsYmFja1tzdGF0aWRdLnByaXZfZGF0YSA9IE5VTEw7CkBAIC0xMDc4LDE3ICsxMDc4LDE3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmKChsZXZlbCA8IDEpIHx8IChsZXZlbCA+IDcpKSB7CisJaWYgKChsZXZlbCA8IDEpIHx8IChsZXZlbCA+IDcpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkludmFsaWQgaW50ZXJydXB0IGxldmVsXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGJyaWRnZS0+aXJxX2dlbmVyYXRlID09IE5VTEwpIHsKLQkJcHJpbnRrKCJJbnRlcnJ1cHQgZ2VuZXJhdGlvbiBub3Qgc3VwcG9ydGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiSW50ZXJydXB0IGdlbmVyYXRpb24gbm90IHN1cHBvcnRlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldHVybiBicmlkZ2UtPmlycV9nZW5lcmF0ZShsZXZlbCwgc3RhdGlkKTsKKwlyZXR1cm4gYnJpZGdlLT5pcnFfZ2VuZXJhdGUoYnJpZGdlLCBsZXZlbCwgc3RhdGlkKTsKIH0KIEVYUE9SVF9TWU1CT0wodm1lX2lycV9nZW5lcmF0ZSk7CiAKQEAgLTExODksOCArMTE4OSw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIFhYWCBDaGVjayBwYXJhbWV0ZXJzICovCi0KIAlyZXR1cm4gYnJpZGdlLT5sbV9zZXQobG0sIGxtX2Jhc2UsIGFzcGFjZSwgY3ljbGUpOwogfQogRVhQT1JUX1NZTUJPTCh2bWVfbG1fc2V0KTsKQEAgLTEyOTcsMTEgKzEyOTUsMTEgQEAKIAl9CiAKIAlpZiAoYnJpZGdlLT5zbG90X2dldCA9PSBOVUxMKSB7Ci0JCXByaW50aygidm1lX3Nsb3RfZ2V0IG5vdCBzdXBwb3J0ZWRcbiIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2bWVfc2xvdF9nZXQgbm90IHN1cHBvcnRlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJldHVybiBicmlkZ2UtPnNsb3RfZ2V0KCk7CisJcmV0dXJuIGJyaWRnZS0+c2xvdF9nZXQoYnJpZGdlKTsKIH0KIEVYUE9SVF9TWU1CT0wodm1lX3Nsb3RfZ2V0KTsKIApAQCAtMTMzMSw3ICsxMzI5LDcgQEAKIAltdXRleF91bmxvY2soJnZtZV9idXNfbnVtX210eCk7CiB9CiAKLWludCB2bWVfcmVnaXN0ZXJfYnJpZGdlIChzdHJ1Y3Qgdm1lX2JyaWRnZSAqYnJpZGdlKQoraW50IHZtZV9yZWdpc3Rlcl9icmlkZ2Uoc3RydWN0IHZtZV9icmlkZ2UgKmJyaWRnZSkKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJaW50IHJldHZhbDsKQEAgLTEzNTgsNyArMTM1Niw3IEBACiAJCWRldl9zZXRfbmFtZShkZXYsICJ2bWUtJXguJXgiLCBicmlkZ2UtPm51bSwgaSArIDEpOwogCiAJCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcihkZXYpOwotCQlpZihyZXR2YWwpCisJCWlmIChyZXR2YWwpCiAJCQlnb3RvIGVycl9yZWc7CiAJfQogCkBAIC0xMzc1LDcgKzEzNzMsNyBAQAogfQogRVhQT1JUX1NZTUJPTCh2bWVfcmVnaXN0ZXJfYnJpZGdlKTsKIAotdm9pZCB2bWVfdW5yZWdpc3Rlcl9icmlkZ2UgKHN0cnVjdCB2bWVfYnJpZGdlICpicmlkZ2UpCit2b2lkIHZtZV91bnJlZ2lzdGVyX2JyaWRnZShzdHJ1Y3Qgdm1lX2JyaWRnZSAqYnJpZGdlKQogewogCWludCBpOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKQEAgLTEzOTIsNyArMTM5MCw3IEBACiAKIC8qIC0gRHJpdmVyIFJlZ2lzdHJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotaW50IHZtZV9yZWdpc3Rlcl9kcml2ZXIgKHN0cnVjdCB2bWVfZHJpdmVyICpkcnYpCitpbnQgdm1lX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgdm1lX2RyaXZlciAqZHJ2KQogewogCWRydi0+ZHJpdmVyLm5hbWUgPSBkcnYtPm5hbWU7CiAJZHJ2LT5kcml2ZXIuYnVzID0gJnZtZV9idXNfdHlwZTsKQEAgLTE0MDEsNyArMTM5OSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHZtZV9yZWdpc3Rlcl9kcml2ZXIpOwogCi12b2lkIHZtZV91bnJlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHZtZV9kcml2ZXIgKmRydikKK3ZvaWQgdm1lX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB2bWVfZHJpdmVyICpkcnYpCiB7CiAJZHJpdmVyX3VucmVnaXN0ZXIoJmRydi0+ZHJpdmVyKTsKIH0KQEAgLTE0MTgsMTAgKzE0MTYsMTAgQEAKIAogCS8qIERldGVybWluZSBzbG90IG51bWJlciAqLwogCW51bSA9IDA7Ci0Jd2hpbGUobnVtIDwgVk1FX1NMT1RTX01BWCkgewotCQlpZigmKGJyaWRnZS0+ZGV2W251bV0pID09IGRldikgeworCXdoaWxlIChudW0gPCBWTUVfU0xPVFNfTUFYKSB7CisJCWlmICgmKGJyaWRnZS0+ZGV2W251bV0pID09IGRldikKIAkJCWJyZWFrOwotCQl9CisKIAkJbnVtKys7CiAJfQogCWlmIChudW0gPT0gVk1FX1NMT1RTX01BWCkgewpAQCAtMTQzNyw4ICsxNDM1LDggQEAKIAogc3RhdGljIHN0cnVjdCB2bWVfZHJpdmVyICpkZXZfdG9fdm1lX2RyaXZlcihzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0JaWYoZGV2LT5kcml2ZXIgPT0gTlVMTCkKLQkJcHJpbnRrKCJCdWdnZXIgZGV2LT5kcml2ZXIgaXMgTlVMTFxuIik7CisJaWYgKGRldi0+ZHJpdmVyID09IE5VTEwpCisJCXByaW50ayhLRVJOX0VSUiAiQnVnZ2VyIGRldi0+ZHJpdmVyIGlzIE5VTExcbiIpOwogCiAJcmV0dXJuIGNvbnRhaW5lcl9vZihkZXYtPmRyaXZlciwgc3RydWN0IHZtZV9kcml2ZXIsIGRyaXZlcik7CiB9CkBAIC0xNDYyLDcgKzE0NjAsNyBAQAogCX0KIAogCWkgPSAwOwotCXdoaWxlKChkcml2ZXItPmJpbmRfdGFibGVbaV0uYnVzICE9IDApIHx8CisJd2hpbGUgKChkcml2ZXItPmJpbmRfdGFibGVbaV0uYnVzICE9IDApIHx8CiAJCShkcml2ZXItPmJpbmRfdGFibGVbaV0uc2xvdCAhPSAwKSkgewogCiAJCWlmIChicmlkZ2UtPm51bSA9PSBkcml2ZXItPmJpbmRfdGFibGVbaV0uYnVzKSB7CkBAIC0xNDkzLDkgKzE0OTEsOCBAQAogCWRyaXZlciA9IGRldl90b192bWVfZHJpdmVyKGRldik7CiAJYnJpZGdlID0gZGV2X3RvX2JyaWRnZShkZXYpOwogCi0JaWYoZHJpdmVyLT5wcm9iZSAhPSBOVUxMKSB7CisJaWYgKGRyaXZlci0+cHJvYmUgIT0gTlVMTCkKIAkJcmV0dmFsID0gZHJpdmVyLT5wcm9iZShkZXYsIGJyaWRnZS0+bnVtLCB2bWVfY2FsY19zbG90KGRldikpOwotCX0KIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC0xNTA5LDkgKzE1MDYsOCBAQAogCWRyaXZlciA9IGRldl90b192bWVfZHJpdmVyKGRldik7CiAJYnJpZGdlID0gZGV2X3RvX2JyaWRnZShkZXYpOwogCi0JaWYoZHJpdmVyLT5yZW1vdmUgIT0gTlVMTCkgeworCWlmIChkcml2ZXItPnJlbW92ZSAhPSBOVUxMKQogCQlyZXR2YWwgPSBkcml2ZXItPnJlbW92ZShkZXYsIGJyaWRnZS0+bnVtLCB2bWVfY2FsY19zbG90KGRldikpOwotCX0KIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC0xNTI0LDE4ICsxNTIwLDE4IEBACiB9OwogRVhQT1JUX1NZTUJPTCh2bWVfYnVzX3R5cGUpOwogCi1zdGF0aWMgaW50IF9faW5pdCB2bWVfaW5pdCAodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHZtZV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIGJ1c19yZWdpc3Rlcigmdm1lX2J1c190eXBlKTsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IHZtZV9leGl0ICh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHZtZV9leGl0KHZvaWQpCiB7CiAJYnVzX3VucmVnaXN0ZXIoJnZtZV9idXNfdHlwZSk7CiB9CiAKIE1PRFVMRV9ERVNDUklQVElPTigiVk1FIGJyaWRnZSBkcml2ZXIgZnJhbWV3b3JrIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXJ0eW4gV2VsY2ggPG1hcnR5bi53ZWxjaEBnZWZhbnVjLmNvbSIpOworTU9EVUxFX0FVVEhPUigiTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2UuY29tIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KHZtZV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92bWUvdm1lLmggYi9kcml2ZXJzL3N0YWdpbmcvdm1lL3ZtZS5oCmluZGV4IDk3ZGMyMmUuLjQ4NzY4Y2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92bWUvdm1lLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS92bWUuaApAQCAtNjgsNiArNjgsMTQgQEAKICNkZWZpbmUgVk1FX0RNQV9QQVRURVJOX1dPUkQJCSgxPDwxKQogI2RlZmluZSBWTUVfRE1BX1BBVFRFUk5fSU5DUkVNRU5UCSgxPDwyKQogCit0eXBlZGVmIHUzMiB2bWVfZG1hX3JvdXRlX3Q7CisjZGVmaW5lIFZNRV9ETUFfVk1FX1RPX01FTQkJKDE8PDApCisjZGVmaW5lIFZNRV9ETUFfTUVNX1RPX1ZNRQkJKDE8PDEpCisjZGVmaW5lIFZNRV9ETUFfVk1FX1RPX1ZNRQkJKDE8PDIpCisjZGVmaW5lIFZNRV9ETUFfTUVNX1RPX01FTQkJKDE8PDMpCisjZGVmaW5lIFZNRV9ETUFfUEFUVEVSTl9UT19WTUUJCSgxPDw0KQorI2RlZmluZSBWTUVfRE1BX1BBVFRFUk5fVE9fTUVNCQkoMTw8NSkKKwogc3RydWN0IHZtZV9kbWFfYXR0ciB7CiAJdm1lX2RtYV90IHR5cGU7CiAJdm9pZCAqcHJpdmF0ZTsKQEAgLTk4LDMyICsxMDYsMzMgQEAKIAlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAgICBkcml2ZXI7CiB9OwogCi12b2lkICogdm1lX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHZtZV9yZXNvdXJjZSAqLCBzaXplX3QsIGRtYV9hZGRyX3QgKik7Cit2b2lkICp2bWVfYWxsb2NfY29uc2lzdGVudChzdHJ1Y3Qgdm1lX3Jlc291cmNlICosIHNpemVfdCwgZG1hX2FkZHJfdCAqKTsKIHZvaWQgdm1lX2ZyZWVfY29uc2lzdGVudChzdHJ1Y3Qgdm1lX3Jlc291cmNlICosIHNpemVfdCwgIHZvaWQgKiwKIAlkbWFfYWRkcl90KTsKIAogc2l6ZV90IHZtZV9nZXRfc2l6ZShzdHJ1Y3Qgdm1lX3Jlc291cmNlICopOwogCi1zdHJ1Y3Qgdm1lX3Jlc291cmNlICogdm1lX3NsYXZlX3JlcXVlc3Qoc3RydWN0IGRldmljZSAqLCB2bWVfYWRkcmVzc190LCB2bWVfY3ljbGVfdCk7Ci1pbnQgdm1lX3NsYXZlX3NldCAoc3RydWN0IHZtZV9yZXNvdXJjZSAqLCBpbnQsIHVuc2lnbmVkIGxvbmcgbG9uZywKK3N0cnVjdCB2bWVfcmVzb3VyY2UgKnZtZV9zbGF2ZV9yZXF1ZXN0KHN0cnVjdCBkZXZpY2UgKiwgdm1lX2FkZHJlc3NfdCwKKwl2bWVfY3ljbGVfdCk7CitpbnQgdm1lX3NsYXZlX3NldChzdHJ1Y3Qgdm1lX3Jlc291cmNlICosIGludCwgdW5zaWduZWQgbG9uZyBsb25nLAogCXVuc2lnbmVkIGxvbmcgbG9uZywgZG1hX2FkZHJfdCwgdm1lX2FkZHJlc3NfdCwgdm1lX2N5Y2xlX3QpOwotaW50IHZtZV9zbGF2ZV9nZXQgKHN0cnVjdCB2bWVfcmVzb3VyY2UgKiwgaW50ICosIHVuc2lnbmVkIGxvbmcgbG9uZyAqLAoraW50IHZtZV9zbGF2ZV9nZXQoc3RydWN0IHZtZV9yZXNvdXJjZSAqLCBpbnQgKiwgdW5zaWduZWQgbG9uZyBsb25nICosCiAJdW5zaWduZWQgbG9uZyBsb25nICosIGRtYV9hZGRyX3QgKiwgdm1lX2FkZHJlc3NfdCAqLCB2bWVfY3ljbGVfdCAqKTsKIHZvaWQgdm1lX3NsYXZlX2ZyZWUoc3RydWN0IHZtZV9yZXNvdXJjZSAqKTsKIAotc3RydWN0IHZtZV9yZXNvdXJjZSAqIHZtZV9tYXN0ZXJfcmVxdWVzdChzdHJ1Y3QgZGV2aWNlICosIHZtZV9hZGRyZXNzX3QsIHZtZV9jeWNsZV90LAotCXZtZV93aWR0aF90KTsKLWludCB2bWVfbWFzdGVyX3NldCAoc3RydWN0IHZtZV9yZXNvdXJjZSAqLCBpbnQsIHVuc2lnbmVkIGxvbmcgbG9uZywKK3N0cnVjdCB2bWVfcmVzb3VyY2UgKnZtZV9tYXN0ZXJfcmVxdWVzdChzdHJ1Y3QgZGV2aWNlICosIHZtZV9hZGRyZXNzX3QsCisJdm1lX2N5Y2xlX3QsIHZtZV93aWR0aF90KTsKK2ludCB2bWVfbWFzdGVyX3NldChzdHJ1Y3Qgdm1lX3Jlc291cmNlICosIGludCwgdW5zaWduZWQgbG9uZyBsb25nLAogCXVuc2lnbmVkIGxvbmcgbG9uZywgdm1lX2FkZHJlc3NfdCwgdm1lX2N5Y2xlX3QsIHZtZV93aWR0aF90KTsKLWludCB2bWVfbWFzdGVyX2dldCAoc3RydWN0IHZtZV9yZXNvdXJjZSAqLCBpbnQgKiwgdW5zaWduZWQgbG9uZyBsb25nICosCitpbnQgdm1lX21hc3Rlcl9nZXQoc3RydWN0IHZtZV9yZXNvdXJjZSAqLCBpbnQgKiwgdW5zaWduZWQgbG9uZyBsb25nICosCiAJdW5zaWduZWQgbG9uZyBsb25nICosIHZtZV9hZGRyZXNzX3QgKiwgdm1lX2N5Y2xlX3QgKiwgdm1lX3dpZHRoX3QgKik7CiBzc2l6ZV90IHZtZV9tYXN0ZXJfcmVhZChzdHJ1Y3Qgdm1lX3Jlc291cmNlICosIHZvaWQgKiwgc2l6ZV90LCBsb2ZmX3QpOwogc3NpemVfdCB2bWVfbWFzdGVyX3dyaXRlKHN0cnVjdCB2bWVfcmVzb3VyY2UgKiwgdm9pZCAqLCBzaXplX3QsIGxvZmZfdCk7Ci11bnNpZ25lZCBpbnQgdm1lX21hc3Rlcl9ybXcgKHN0cnVjdCB2bWVfcmVzb3VyY2UgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQsCit1bnNpZ25lZCBpbnQgdm1lX21hc3Rlcl9ybXcoc3RydWN0IHZtZV9yZXNvdXJjZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludCwKIAl1bnNpZ25lZCBpbnQsIGxvZmZfdCk7CiB2b2lkIHZtZV9tYXN0ZXJfZnJlZShzdHJ1Y3Qgdm1lX3Jlc291cmNlICopOwogCi1zdHJ1Y3Qgdm1lX3Jlc291cmNlICp2bWVfZG1hX3JlcXVlc3Qoc3RydWN0IGRldmljZSAqKTsKK3N0cnVjdCB2bWVfcmVzb3VyY2UgKnZtZV9kbWFfcmVxdWVzdChzdHJ1Y3QgZGV2aWNlICosIHZtZV9kbWFfcm91dGVfdCk7CiBzdHJ1Y3Qgdm1lX2RtYV9saXN0ICp2bWVfbmV3X2RtYV9saXN0KHN0cnVjdCB2bWVfcmVzb3VyY2UgKik7CiBzdHJ1Y3Qgdm1lX2RtYV9hdHRyICp2bWVfZG1hX3BhdHRlcm5fYXR0cmlidXRlKHUzMiwgdm1lX3BhdHRlcm5fdCk7CiBzdHJ1Y3Qgdm1lX2RtYV9hdHRyICp2bWVfZG1hX3BjaV9hdHRyaWJ1dGUoZG1hX2FkZHJfdCk7CkBAIC0xNTMsOCArMTYyLDggQEAKIAogaW50IHZtZV9zbG90X2dldChzdHJ1Y3QgZGV2aWNlICopOwogCi1pbnQgdm1lX3JlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHZtZV9kcml2ZXIgKik7Ci12b2lkIHZtZV91bnJlZ2lzdGVyX2RyaXZlciAoc3RydWN0IHZtZV9kcml2ZXIgKik7CitpbnQgdm1lX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgdm1lX2RyaXZlciAqKTsKK3ZvaWQgdm1lX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB2bWVfZHJpdmVyICopOwogCiAKICNlbmRpZiAvKiBfVk1FX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdm1lL3ZtZV9hcGkudHh0IGIvZHJpdmVycy9zdGFnaW5nL3ZtZS92bWVfYXBpLnR4dAppbmRleCBhNWMxYjFjZDUuLmE5MTBhMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy92bWUvdm1lX2FwaS50eHQKKysrIGIvZHJpdmVycy9zdGFnaW5nL3ZtZS92bWVfYXBpLnR4dApAQCAtNzcsMTYgKzc3LDIxIEBACiAJc3RydWN0IHZtZV9yZXNvdXJjZSAqIHZtZV9zbGF2ZV9yZXF1ZXN0KHN0cnVjdCBkZXZpY2UgKmRldiwKIAkJdm1lX2FkZHJlc3NfdCBhc3BhY2UsIHZtZV9jeWNsZV90IGN5Y2xlKTsKIAotCXN0cnVjdCB2bWVfcmVzb3VyY2UgKnZtZV9kbWFfcmVxdWVzdChzdHJ1Y3QgZGV2aWNlICpkZXYpOworCXN0cnVjdCB2bWVfcmVzb3VyY2UgKnZtZV9kbWFfcmVxdWVzdChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCXZtZV9kbWFfcm91dGVfdCByb3V0ZSk7CiAKIEZvciBzbGF2ZSB3aW5kb3dzIHRoZXNlIGF0dHJpYnV0ZXMgYXJlIHNwbGl0IGludG8gdGhvc2Ugb2YgdHlwZSAndm1lX2FkZHJlc3NfdCcKLWFuZCAndm1lX2N5Y2xlX3QnLiBNYXN0ZXIgd2luZG93cyBhZGQgYSBmdXJ0aGVyIHNldCBvZiBhdHRyaWJ1dGVzICd2bWVfY3ljbGVfdCcuCi1UaGVzZSBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkIGFzIGJpdG1hc2tzIGFuZCBhcyBzdWNoIGFueSBjb21iaW5hdGlvbiBvZiB0aGUKLWF0dHJpYnV0ZXMgY2FuIGJlIHJlcXVlc3RlZCBmb3IgYSBzaW5nbGUgd2luZG93LCB0aGUgY29yZSB3aWxsIGFzc2lnbiBhIHdpbmRvdwotdGhhdCBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzLCByZXR1cm5pbmcgYSBwb2ludGVyIG9mIHR5cGUgdm1lX3Jlc291cmNlIHRoYXQKLXNob3VsZCBiZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBhbGxvY2F0ZWQgcmVzb3VyY2Ugd2hlbiBpdCBpcyB1c2VkLiBJZiBhbgotdW5hbGxvY2F0ZWQgd2luZG93IGZpdHRpbmcgdGhlIHJlcXVpcmVtZW50cyBjYW4gbm90IGJlIGZvdW5kIGEgTlVMTCBwb2ludGVyIHdpbGwKLWJlIHJldHVybmVkLgorYW5kICd2bWVfY3ljbGVfdCcuIE1hc3RlciB3aW5kb3dzIGFkZCBhIGZ1cnRoZXIgc2V0IG9mIGF0dHJpYnV0ZXMKKyd2bWVfY3ljbGVfdCcuICBUaGVzZSBhdHRyaWJ1dGVzIGFyZSBkZWZpbmVkIGFzIGJpdG1hc2tzIGFuZCBhcyBzdWNoIGFueQorY29tYmluYXRpb24gb2YgdGhlIGF0dHJpYnV0ZXMgY2FuIGJlIHJlcXVlc3RlZCBmb3IgYSBzaW5nbGUgd2luZG93LCB0aGUgY29yZQord2lsbCBhc3NpZ24gYSB3aW5kb3cgdGhhdCBtZWV0cyB0aGUgcmVxdWlyZW1lbnRzLCByZXR1cm5pbmcgYSBwb2ludGVyIG9mIHR5cGUKK3ZtZV9yZXNvdXJjZSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBhbGxvY2F0ZWQgcmVzb3VyY2Ugd2hlbiBpdCBpcwordXNlZC4gRm9yIERNQSBjb250cm9sbGVycywgdGhlIHJlcXVlc3QgZnVuY3Rpb24gcmVxdWlyZXMgdGhlIHBvdGVudGlhbAorZGlyZWN0aW9uIG9mIGFueSB0cmFuc2ZlcnMgdG8gYmUgcHJvdmlkZWQgaW4gdGhlIHJvdXRlIGF0dHJpYnV0ZXMuIFRoaXMgaXMKK3R5cGljYWxseSBWTUUtdG8tTUVNIGFuZC9vciBNRU0tdG8tVk1FLCB0aG91Z2ggc29tZSBoYXJkd2FyZSBjYW4gc3VwcG9ydAorVk1FLXRvLVZNRSBhbmQgTUVNLXRvLU1FTSB0cmFuc2ZlcnMgYXMgd2VsbCBhcyB0ZXN0IHBhdHRlcm4gZ2VuZXJhdGlvbi4gSWYgYW4KK3VuYWxsb2NhdGVkIHdpbmRvdyBmaXR0aW5nIHRoZSByZXF1aXJlbWVudHMgY2FuIG5vdCBiZSBmb3VuZCBhIE5VTEwgcG9pbnRlcgord2lsbCBiZSByZXR1cm5lZC4KIAogRnVuY3Rpb25zIGFyZSBhbHNvIHByb3ZpZGVkIHRvIGZyZWUgd2luZG93IGFsbG9jYXRpb25zIG9uY2UgdGhleSBhcmUgbm8gbG9uZ2VyCiByZXF1aXJlZC4gVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBiZSBwYXNzZWQgdGhlIHBvaW50ZXIgdG8gdGhlIHJlc291cmNlIHByb3ZpZGVkCkBAIC0yMzcsNiArMjQyLDEyIEBACiAJCXN0cnVjdCB2bWVfZG1hX2F0dHIgKnNyYywgc3RydWN0IHZtZV9kbWFfYXR0ciAqZGVzdCwKIAkJc2l6ZV90IGNvdW50KTsKIAorTk9URToJVGhlIGRldGFpbGVkIGF0dHJpYnV0ZXMgb2YgdGhlIHRyYW5zZmVycyBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uCisJYXJlIG5vdCBjaGVja2VkIHVudGlsIGFuIGVudHJ5IGlzIGFkZGVkIHRvIGEgRE1BIGxpc3QsIHRoZSByZXF1ZXN0CisJZm9yIGEgRE1BIGNoYW5uZWwgcHVyZWx5IGNoZWNrcyB0aGUgZGlyZWN0aW9ucyBpbiB3aGljaCB0aGUKKwljb250cm9sbGVyIGlzIGV4cGVjdGVkIHRvIHRyYW5zZmVyIGRhdGEuIEFzIGEgcmVzdWx0IGl0IGlzCisJcG9zc2libGUgZm9yIHRoaXMgY2FsbCB0byByZXR1cm4gYW4gZXJyb3IsIGZvciBleGFtcGxlIGlmIHRoZQorCXNvdXJjZSBvciBkZXN0aW5hdGlvbiBpcyBpbiBhbiB1bnN1cHBvcnRlZCBWTUUgYWRkcmVzcyBzcGFjZS4KIAogVHJhbnNmZXIgQXR0cmlidXRlcwogLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3ZtZS92bWVfYnJpZGdlLmggYi9kcml2ZXJzL3N0YWdpbmcvdm1lL3ZtZV9icmlkZ2UuaAppbmRleCA4NTFmYTkyLi5iNjUzZWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdm1lL3ZtZV9icmlkZ2UuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvdm1lL3ZtZV9icmlkZ2UuaApAQCAtMTksNyArMTksNyBAQAogCXZtZV9hZGRyZXNzX3QgYWRkcmVzc19hdHRyOwogCXZtZV9jeWNsZV90IGN5Y2xlX2F0dHI7CiAJdm1lX3dpZHRoX3Qgd2lkdGhfYXR0cjsKLQlzdHJ1Y3QgcmVzb3VyY2UgcGNpX3Jlc291cmNlOwkvKiBYWFggUmVuYW1lIHRvIGJlIGJ1cyBhZ25vc3RpYyAqLworCXN0cnVjdCByZXNvdXJjZSBidXNfcmVzb3VyY2U7CiAJdm9pZCAqa2Vybl9iYXNlOwogfTsKIApAQCAtNjQsNiArNjQsNyBAQAogCWludCBudW1iZXI7CiAJc3RydWN0IGxpc3RfaGVhZCBwZW5kaW5nOwogCXN0cnVjdCBsaXN0X2hlYWQgcnVubmluZzsKKwl2bWVfZG1hX3JvdXRlX3Qgcm91dGVfYXR0cjsKIH07CiAKIHN0cnVjdCB2bWVfbG1fcmVzb3VyY2UgewpAQCAtMTAxLDcgKzEwMiw3IEBACiAgKiBDdXJyZW50bHkgd2UgYXNzdW1lIHRoYXQgYWxsIGNoaXBzIGFyZSBQQ0ktYmFzZWQKICAqLwogc3RydWN0IHZtZV9icmlkZ2UgewotICAgICAgICBjaGFyIG5hbWVbVk1FTkFNU0laXTsKKwljaGFyIG5hbWVbVk1FTkFNU0laXTsKIAlpbnQgbnVtOwogCXN0cnVjdCBsaXN0X2hlYWQgbWFzdGVyX3Jlc291cmNlczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIHNsYXZlX3Jlc291cmNlczsKQEAgLTExMiw3ICsxMTMsNyBAQAogCiAJLyogQnJpZGdlIEluZm8gLSBYWFggTW92ZSB0byBwcml2YXRlIHN0cnVjdHVyZT8gKi8KIAlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQ7CS8qIEdlbmVyaWMgZGV2aWNlIHN0cnVjdCAocGRldi0+ZGV2IGZvciBQQ0kpICovCi0Jdm9pZCAqIGJhc2U7CQkvKiBCYXNlIEFkZHJlc3Mgb2YgZGV2aWNlIHJlZ2lzdGVycyAqLworCXZvaWQgKmRyaXZlcl9wcml2OwkvKiBQcml2YXRlIHBvaW50ZXIgZm9yIHRoZSBicmlkZ2UgZHJpdmVyICovCiAKIAlzdHJ1Y3QgZGV2aWNlIGRldltWTUVfU0xPVFNfTUFYXTsJLyogRGV2aWNlIHJlZ2lzdGVyZWQgd2l0aAogCQkJCQkJICogZGV2aWNlIG1vZGVsIG9uIFZNRSBidXMKQEAgLTE1MSw4ICsxNTIsOCBAQAogCWludCAoKmRtYV9saXN0X2VtcHR5KSAoc3RydWN0IHZtZV9kbWFfbGlzdCAqKTsKIAogCS8qIEludGVycnVwdCBGdW5jdGlvbnMgKi8KLQl2b2lkICgqaXJxX3NldCkgKGludCwgaW50LCBpbnQpOwotCWludCAoKmlycV9nZW5lcmF0ZSkgKGludCwgaW50KTsKKwl2b2lkICgqaXJxX3NldCkgKHN0cnVjdCB2bWVfYnJpZGdlICosIGludCwgaW50LCBpbnQpOworCWludCAoKmlycV9nZW5lcmF0ZSkgKHN0cnVjdCB2bWVfYnJpZGdlICosIGludCwgaW50KTsKIAogCS8qIExvY2F0aW9uIG1vbml0b3IgZnVuY3Rpb25zICovCiAJaW50ICgqbG1fc2V0KSAoc3RydWN0IHZtZV9sbV9yZXNvdXJjZSAqLCB1bnNpZ25lZCBsb25nIGxvbmcsCkBAIC0xNjMsMTAyICsxNjQsMTIgQEAKIAlpbnQgKCpsbV9kZXRhY2gpIChzdHJ1Y3Qgdm1lX2xtX3Jlc291cmNlICosIGludCk7CiAKIAkvKiBDUi9DU1Igc3BhY2UgZnVuY3Rpb25zICovCi0JaW50ICgqc2xvdF9nZXQpICh2b2lkKTsKLQkvKiBVc2Ugc3RhbmRhcmQgbWFzdGVyIHJlYWQgYW5kIHdyaXRlIGZ1bmN0aW9ucyB0byBhY2Nlc3MgQ1IvQ1NSICovCi0KLSNpZiAwCi0JaW50ICgqc2V0X3ByZWZldGNoKSAodm9pZCk7Ci0JaW50ICgqZ2V0X3ByZWZldGNoKSAodm9pZCk7Ci0JaW50ICgqc2V0X2FyYml0ZXIpICh2b2lkKTsKLQlpbnQgKCpnZXRfYXJiaXRlcikgKHZvaWQpOwotCWludCAoKnNldF9yZXF1ZXN0b3IpICh2b2lkKTsKLQlpbnQgKCpnZXRfcmVxdWVzdG9yKSAodm9pZCk7Ci0jZW5kaWYKKwlpbnQgKCpzbG90X2dldCkgKHN0cnVjdCB2bWVfYnJpZGdlICopOwogfTsKIAogdm9pZCB2bWVfaXJxX2hhbmRsZXIoc3RydWN0IHZtZV9icmlkZ2UgKiwgaW50LCBpbnQpOwogCi1pbnQgdm1lX3JlZ2lzdGVyX2JyaWRnZSAoc3RydWN0IHZtZV9icmlkZ2UgKik7Ci12b2lkIHZtZV91bnJlZ2lzdGVyX2JyaWRnZSAoc3RydWN0IHZtZV9icmlkZ2UgKik7CitpbnQgdm1lX3JlZ2lzdGVyX2JyaWRnZShzdHJ1Y3Qgdm1lX2JyaWRnZSAqKTsKK3ZvaWQgdm1lX3VucmVnaXN0ZXJfYnJpZGdlKHN0cnVjdCB2bWVfYnJpZGdlICopOwogCiAjZW5kaWYgLyogX1ZNRV9CUklER0VfSF8gKi8KLQotI2lmIDAKLS8qCi0gKiAgVk1FYnVzIEdFVCBJTkZPIEFyZyBTdHJ1Y3R1cmUKLSAqLwotc3RydWN0IHZtZUluZm9DZmcgewotCWludCB2bWVTbG90TnVtOwkJLyogIFZNRSBzbG90IG51bWJlciBvZiBpbnRlcmVzdCAqLwotCWludCBib2FyZFJlc3BvbmRlZDsJLyogQm9hcmQgcmVzcG9uZGVkICovCi0JY2hhciBzeXNDb25GbGFnOwkvKiAgU3lzdGVtIGNvbnRyb2xsZXIgZmxhZyAqLwotCWludCB2bWVDb250cm9sbGVySUQ7CS8qICBWZW5kb3IvZGV2aWNlIElEIG9mIFZNRSBicmlkZ2UgKi8KLQlpbnQgdm1lQ29udHJvbGxlclJldjsJLyogIFJldmlzaW9uIG9mIFZNRSBicmlkZ2UgKi8KLQljaGFyIG9zTmFtZVs4XTsJCS8qICBOYW1lIG9mIE9TIGUuZy4gIkxpbnV4IiAqLwotCWludCB2bWVTaGFyZWREYXRhVmFsaWQ7CS8qICBWYWxpZGl0eSBvZiBkYXRhIHN0cnVjdCAqLwotCWludCB2bWVEcml2ZXJSZXY7CS8qICBSZXZpc2lvbiBvZiBWTUUgZHJpdmVyICovCi0JdW5zaWduZWQgaW50IHZtZUFkZHJIaVs4XTsJLyogQWRkcmVzcyBvbiBWTUUgYnVzICovCi0JdW5zaWduZWQgaW50IHZtZUFkZHJMb1s4XTsJLyogQWRkcmVzcyBvbiBWTUUgYnVzICovCi0JdW5zaWduZWQgaW50IHZtZVNpemVbOF07CS8qIFNpemUgb24gVk1FIGJ1cyAqLwotCXVuc2lnbmVkIGludCB2bWVBbVs4XTsJLyogQWRkcmVzcyBtb2RpZmllciBvbiBWTUUgYnVzICovCi0JaW50IHJlc2VydmVkOwkJLyogRm9yIGZ1dHVyZSB1c2UgKi8KLX07Ci10eXBlZGVmIHN0cnVjdCB2bWVJbmZvQ2ZnIHZtZUluZm9DZmdfdDsKLQotLyoKLSAqICBWTUVidXMgUmVxdWVzdGVyIEFyZyBTdHJ1Y3R1cmUKLSAqLwotc3RydWN0IHZtZVJlcXVlc3RlckNmZyB7Ci0JaW50IHJlcXVlc3RMZXZlbDsJLyogIFJlcXVlc3RlciBCdXMgUmVxdWVzdCBMZXZlbCAqLwotCWNoYXIgZmFpck1vZGU7CQkvKiAgUmVxdWVzdGVyIEZhaXJuZXNzIE1vZGUgSW5kaWNhdG9yICovCi0JaW50IHJlbGVhc2VNb2RlOwkvKiAgUmVxdWVzdGVyIEJ1cyBSZWxlYXNlIE1vZGUgKi8KLQlpbnQgdGltZW9uVGltZW91dFRpbWVyOwkvKiAgTWFzdGVyIFRpbWUtb24gVGltZS1vdXQgVGltZXIgKi8KLQlpbnQgdGltZW9mZlRpbWVvdXRUaW1lcjsJLyogIE1hc3RlciBUaW1lLW9mZiBUaW1lLW91dCBUaW1lciAqLwotCWludCByZXNlcnZlZDsJCS8qIEZvciBmdXR1cmUgdXNlICovCi19OwotdHlwZWRlZiBzdHJ1Y3Qgdm1lUmVxdWVzdGVyQ2ZnIHZtZVJlcXVlc3RlckNmZ190OwotCi0vKgotICogIFZNRWJ1cyBBcmJpdGVyIEFyZyBTdHJ1Y3R1cmUKLSAqLwotc3RydWN0IHZtZUFyYml0ZXJDZmcgewotCXZtZV9hcmJpdHJhdGlvbl90IGFyYml0ZXJNb2RlOwkvKiAgQXJiaXRyYXRpb24gU2NoZWR1bGluZyBBbGdvcml0aG0gKi8KLQljaGFyIGFyYml0ZXJUaW1lb3V0RmxhZzsJLyogIEFyYml0ZXIgVGltZS1vdXQgVGltZXIgSW5kaWNhdG9yICovCi0JaW50IGdsb2JhbFRpbWVvdXRUaW1lcjsJLyogIFZNRWJ1cyBHbG9iYWwgVGltZS1vdXQgVGltZXIgKi8KLQljaGFyIG5vRWFybHlSZWxlYXNlRmxhZzsJLyogIE5vIEVhcmx5IFJlbGVhc2Ugb24gQkJVU1kgKi8KLQlpbnQgcmVzZXJ2ZWQ7CQkvKiBGb3IgZnV0dXJlIHVzZSAqLwotfTsKLXR5cGVkZWYgc3RydWN0IHZtZUFyYml0ZXJDZmcgdm1lQXJiaXRlckNmZ190OwotCi0KLS8qCi0gKiAgVk1FYnVzIFJNVyBDb25maWd1cmF0aW9uIERhdGEKLSAqLwotc3RydWN0IHZtZVJtd0NmZyB7Ci0JdW5zaWduZWQgaW50IHRhcmdldEFkZHJVOwkvKiAgVk1FIEFkZHJlc3MgKFVwcGVyKSB0byB0cmlnZ2VyIFJNVyBjeWNsZSAqLwotCXVuc2lnbmVkIGludCB0YXJnZXRBZGRyOwkvKiAgVk1FIEFkZHJlc3MgKExvd2VyKSB0byB0cmlnZ2VyIFJNVyBjeWNsZSAqLwotCXZtZV9hZGRyZXNzX3QgYWRkclNwYWNlOwkvKiAgVk1FIEFkZHJlc3MgU3BhY2UgKi8KLQlpbnQgZW5hYmxlTWFzazsJCS8qICBCaXQgbWFzayBkZWZpbmluZyB0aGUgYml0cyBvZiBpbnRlcmVzdCAqLwotCWludCBjb21wYXJlRGF0YTsJLyogIERhdGEgdG8gYmUgY29tcGFyZWQgd2l0aCB0aGUgZGF0YSByZWFkICovCi0JaW50IHN3YXBEYXRhOwkJLyogIERhdGEgd3JpdHRlbiB0byB0aGUgVk1FYnVzIG9uIHN1Y2Nlc3MgKi8KLQlpbnQgbWF4QXR0ZW1wdHM7CS8qICBNYXhpbXVtIHRpbWVzIHRvIHRyeSAqLwotCWludCBudW1BdHRlbXB0czsJLyogIE51bWJlciBvZiBhdHRlbXB0cyBiZWZvcmUgc3VjY2VzcyAqLwotCWludCByZXNlcnZlZDsJCS8qIEZvciBmdXR1cmUgdXNlICovCi0KLX07Ci10eXBlZGVmIHN0cnVjdCB2bWVSbXdDZmcgdm1lUm13Q2ZnX3Q7Ci0KLS8qCi0gKiAgVk1FYnVzIExvY2F0aW9uIE1vbml0b3IgQXJnIFN0cnVjdHVyZQotICovCi1zdHJ1Y3Qgdm1lTG1DZmcgewotCXVuc2lnbmVkIGludCBhZGRyVTsJLyogIExvY2F0aW9uIE1vbml0b3IgQWRkcmVzcyB1cHBlciAqLwotCXVuc2lnbmVkIGludCBhZGRyOwkvKiAgTG9jYXRpb24gTW9uaXRvciBBZGRyZXNzIGxvd2VyICovCi0Jdm1lX2FkZHJlc3NfdCBhZGRyU3BhY2U7CS8qICBBZGRyZXNzIFNwYWNlICovCi0JaW50IHVzZXJBY2Nlc3NUeXBlOwkvKiAgVXNlci9TdXBlcnZpc29yIEFjY2VzcyBUeXBlICovCi0JaW50IGRhdGFBY2Nlc3NUeXBlOwkvKiAgRGF0YS9Qcm9ncmFtIEFjY2VzcyBUeXBlICovCi0JaW50IGxtV2FpdDsJCS8qIFRpbWUgdG8gd2FpdCBmb3IgYWNjZXNzICovCi0JaW50IGxtRXZlbnRzOwkJLyogTG0gZXZlbnQgbWFzayAqLwotCWludCByZXNlcnZlZDsJCS8qIEZvciBmdXR1cmUgdXNlICovCi19OwotdHlwZWRlZiBzdHJ1Y3Qgdm1lTG1DZmcgdm1lTG1DZmdfdDsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9jYXJkLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuYwppbmRleCBkYjc4NjE0Li5iZjRmZDQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2NhcmQuYwpAQCAtMjc4OCwxNiArMjc4OCwxOCBAQAogCiAgICAgIC8vRGV0ZXJtaW5lcyB0aGUgaGlnaGVzdCBiYXNpYyByYXRlLgogICAgICBmb3IgKGlpID0gUkFURV81NE07IGlpID49IFJBVEVfNk07IGlpIC0tKSB7Ci0gICAgICAgICBpZiAoIChwRGV2aWNlLT53QmFzaWNSYXRlKSAmICgoV09SRCkoMTw8aWkpKSApCisgICAgICAgICBpZiAoIChwRGV2aWNlLT53QmFzaWNSYXRlKSAmICgoV09SRCkoMTw8aWkpKSApIHsKICAgICAgICAgICAgICBieVRvcE9GRE0gPSBpaTsKICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgIH0KICAgICAgfQogICAgICBwRGV2aWNlLT5ieVRvcE9GRE1CYXNpY1JhdGUgPSBieVRvcE9GRE07CiAKICAgICAgZm9yIChpaSA9IFJBVEVfMTFNOzsgaWkgLS0pIHsKLSAgICAgICAgIGlmICggKHBEZXZpY2UtPndCYXNpY1JhdGUpICYgKChXT1JEKSgxPDxpaSkpICkKKyAgICAgICAgIGlmICggKHBEZXZpY2UtPndCYXNpY1JhdGUpICYgKChXT1JEKSgxPDxpaSkpICkgewogICAgICAgICAgICAgIGJ5VG9wQ0NLID0gaWk7CiAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICB9CiAgICAgICAgICBpZiAoaWkgPT0gUkFURV8xTSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9tYWluLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2RldmljZV9tYWluLmMKaW5kZXggMGRiOGQ3Yi4uMWQ2NDM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9kZXZpY2VfbWFpbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvZGV2aWNlX21haW4uYwpAQCAtMTEwNSwxMCArMTEwNSw3IEBACiAgICAgc3RydWN0IG5ldF9kZXZpY2UqIGRldj1wRGV2aWNlLT5kZXY7CiAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8gIiVzOiAlc1xuIixkZXYtPm5hbWUsIGdldF9jaGlwX25hbWUocERldmljZS0+Y2hpcF9pZCkpOwotICAgIERCR19QUlQoTVNHX0xFVkVMX0lORk8sIEtFUk5fSU5GTyAiJXM6IE1BQz0lMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWDolMi4yWCIsCi0gICAgICAgIGRldi0+bmFtZSwKLSAgICAgICAgZGV2LT5kZXZfYWRkclswXSxkZXYtPmRldl9hZGRyWzFdLGRldi0+ZGV2X2FkZHJbMl0sCi0gICAgICAgIGRldi0+ZGV2X2FkZHJbM10sZGV2LT5kZXZfYWRkcls0XSxkZXYtPmRldl9hZGRyWzVdKTsKKyAgICBEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8gIiVzOiBNQUM9JXBNIiwgZGV2LT5uYW1lLCBkZXYtPmRldl9hZGRyKTsKICNpZmRlZiBJT19NQVAKICAgICBEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8iIElPPTB4JWx4ICAiLChVTE9ORykgcERldmljZS0+aW9hZGRyKTsKICAgICBEQkdfUFJUKE1TR19MRVZFTF9JTkZPLCBLRVJOX0lORk8iIElSUT0lZCBcbiIsIHBEZXZpY2UtPmRldi0+aXJxKTsKQEAgLTMwODIsOCArMzA3OSw3IEBACiAKICAgICBQU01nbXRPYmplY3QgICAgIHBNZ210ID0gcERldmljZS0+cE1nbXQ7CiAgICAgdTMyICAgICAgICAgICAgICBtY19maWx0ZXJbMl07Ci0gICAgaW50ICAgICAgICAgICAgICBpOwotICAgIHN0cnVjdCBkZXZfbWNfbGlzdCAgKm1jbGlzdDsKKyAgICBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKIAogCiAgICAgVk5TdkluUG9ydEIocERldmljZS0+UG9ydE9mZnNldCArIE1BQ19SRUdfUkNSLCAmKHBEZXZpY2UtPmJ5UnhNb2RlKSk7CkBAIC0zMDkzLDcgKzMwODksNyBAQAogICAgICAgICAvKiBVbmNvbmRpdGlvbmFsbHkgbG9nIG5ldCB0YXBzLiAqLwogICAgICAgICBwRGV2aWNlLT5ieVJ4TW9kZSB8PSAoUkNSX01VTFRJQ0FTVHxSQ1JfQlJPQURDQVNUfFJDUl9VTklDQVNUKTsKICAgICB9Ci0gICAgZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBwRGV2aWNlLT5tdWx0aWNhc3RfbGltaXQpCisgICAgZWxzZSBpZiAoKG5ldGRldl9tY19jb3VudChkZXYpID4gcERldmljZS0+bXVsdGljYXN0X2xpbWl0KQogICAgICAgICB8fCAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpKSB7CiAgICAgICAgIE1BQ3ZTZWxlY3RQYWdlMShwRGV2aWNlLT5Qb3J0T2Zmc2V0KTsKICAgICAgICAgVk5Tdk91dFBvcnREKHBEZXZpY2UtPlBvcnRPZmZzZXQgKyBNQUNfUkVHX01BUjAsIDB4ZmZmZmZmZmYpOwpAQCAtMzEwMyw4ICszMDk5LDcgQEAKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIG1lbXNldChtY19maWx0ZXIsIDAsIHNpemVvZihtY19maWx0ZXIpKTsKLSAgICAgICAgZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+bWNfY291bnQ7Ci0gICAgICAgICAgICAgaSsrLCBtY2xpc3QgPSBtY2xpc3QtPm5leHQpIHsKKwluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgewogICAgICAgICAgICAgaW50IGJpdF9uciA9IGV0aGVyX2NyYyhFVEhfQUxFTiwgbWNsaXN0LT5kbWlfYWRkcikgPj4gMjY7CiAgICAgICAgICAgICBtY19maWx0ZXJbYml0X25yID4+IDVdIHw9IGNwdV90b19sZTMyKDEgPDwgKGJpdF9uciAmIDMxKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaXdjdGwuYyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTUvaXdjdGwuYwppbmRleCAxMDg4MzBmLi43OGI0OTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU1L2l3Y3RsLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3Z0NjY1NS9pd2N0bC5jCkBAIC0xNDcyLDcgKzE0NzIsNyBAQAogCQlpZiAoIGluZGV4IDwgNCApIHsKIAkJICAgIHBEZXZpY2UtPmJ5S2V5SW5kZXggPSBpbmRleDsKIAkJfQotCQllbHNlIGlmKCF3cnEtPmZsYWdzICYgSVdfRU5DT0RFX01PREUpIHsKKwkJZWxzZSBpZighKHdycS0+ZmxhZ3MgJiBJV19FTkNPREVfTU9ERSkpIHsKIAkJCQlyYyA9IC1FSU5WQUw7CiAJCQkJcmV0dXJuIHJjOwogCSAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21haW5fdXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvdnQ2NjU2L21haW5fdXNiLmMKaW5kZXggZWYxN2M0OS4uYThlMWFkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3Z0NjY1Ni9tYWluX3VzYi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy92dDY2NTYvbWFpbl91c2IuYwpAQCAtMTU5Niw3ICsxNTk2LDcgQEAKICAgICBQU01nbXRPYmplY3QgICAgIHBNZ210ID0gJihwRGV2aWNlLT5zTWdtdE9iaik7CiAgICAgdTMyICAgICAgICAgICAgICBtY19maWx0ZXJbMl07CiAgICAgaW50ICAgICAgICAgICAgICBpaTsKLSAgICBzdHJ1Y3QgZGV2X21jX2xpc3QgICptY2xpc3Q7CisgICAgc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CiAgICAgQllURSAgICAgICAgICAgICBwYnlEYXRhWzhdID0gezB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZn07CiAgICAgQllURSAgICAgICAgICAgICBieVRtcE1vZGUgPSAwOwogICAgIGludCAgICAgICAgICAgICAgcmM7CkBAIC0xNjE5LDcgKzE2MTksOCBAQAogICAgICAgICAvLyBVbmNvbmRpdGlvbmFsbHkgbG9nIG5ldCB0YXBzLgogICAgICAgICBwRGV2aWNlLT5ieVJ4TW9kZSB8PSAoUkNSX01VTFRJQ0FTVHxSQ1JfQlJPQURDQVNUfFJDUl9VTklDQVNUKTsKICAgICB9Ci0gICAgZWxzZSBpZiAoKGRldi0+bWNfY291bnQgPiBwRGV2aWNlLT5tdWx0aWNhc3RfbGltaXQpIHx8IChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgeworICAgIGVsc2UgaWYgKChuZXRkZXZfbWNfY291bnQoZGV2KSA+IHBEZXZpY2UtPm11bHRpY2FzdF9saW1pdCkgfHwKKwkgICAgIChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSkgewogICAgICAgICBDT05UUk9MbnNSZXF1ZXN0T3V0KHBEZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUVTU0FHRV9UWVBFX1dSSVRFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BQ19SRUdfTUFSMCwKQEAgLTE2MzEsOCArMTYzMiw3IEBACiAgICAgfQogICAgIGVsc2UgewogICAgICAgICBtZW1zZXQobWNfZmlsdGVyLCAwLCBzaXplb2YobWNfZmlsdGVyKSk7Ci0gICAgICAgIGZvciAoaWkgPSAwLCBtY2xpc3QgPSBkZXYtPm1jX2xpc3Q7IG1jbGlzdCAmJiBpaSA8IGRldi0+bWNfY291bnQ7Ci0gICAgICAgICAgICAgaWkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0KSB7CisJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIobWNsaXN0LCBkZXYpIHsKICAgICAgICAgICAgIGludCBiaXRfbnIgPSBldGhlcl9jcmMoRVRIX0FMRU4sIG1jbGlzdC0+ZG1pX2FkZHIpID4+IDI2OwogICAgICAgICAgICAgbWNfZmlsdGVyW2JpdF9uciA+PiA1XSB8PSBjcHVfdG9fbGUzMigxIDw8IChiaXRfbnIgJiAzMSkpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2F2ZWxhbi93YXZlbGFuLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2F2ZWxhbi93YXZlbGFuLmMKaW5kZXggZDYzNGIyZC4uNTRjYTYzMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dhdmVsYW4vd2F2ZWxhbi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93YXZlbGFuL3dhdmVsYW4uYwpAQCAtMTM2Nyw3ICsxMzY3LDcgQEAKICNpZmRlZiBERUJVR19JT0NUTF9JTkZPCiAJcHJpbnRrKEtFUk5fREVCVUcKIAkgICAgICAgIiVzOiB3YXZlbGFuX3NldF9tdWx0aWNhc3RfbGlzdCgpOiBzZXR0aW5nIFJ4IG1vZGUgJTAyWCB0byAlZCBhZGRyZXNzZXMuXG4iLAotCSAgICAgICBkZXYtPm5hbWUsIGRldi0+ZmxhZ3MsIGRldi0+bWNfY291bnQpOworCSAgICAgICBkZXYtPm5hbWUsIGRldi0+ZmxhZ3MsIG5ldGRldl9tY19jb3VudChkZXYpKTsKICNlbmRpZgogCiAJLyogQXJlIHdlIGFza2luZyBmb3IgcHJvbWlzY3VvdXMgbW9kZSwKQEAgLTEzNzUsNyArMTM3NSw3IEBACiAJICogb3IgdG9vIG1hbnkgbXVsdGljYXN0IGFkZHJlc3NlcyBmb3IgdGhlIGhhcmR3YXJlIGZpbHRlcj8gKi8KIAlpZiAoKGRldi0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgfHwKIAkgICAgKGRldi0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkpIHx8Ci0JICAgIChkZXYtPm1jX2NvdW50ID4gSTgyNTg2X01BWF9NVUxUSUNBU1RfQUREUkVTU0VTKSkgeworCSAgICAobmV0ZGV2X21jX2NvdW50KGRldikgPiBJODI1ODZfTUFYX01VTFRJQ0FTVF9BRERSRVNTRVMpKSB7CiAJCS8qCiAJCSAqIEVuYWJsZSBwcm9taXNjdW91cyBtb2RlOiByZWNlaXZlIGFsbCBwYWNrZXRzLgogCQkgKi8KQEAgLTEzODcsMTcgKzEzODcsMTcgQEAKIAkJfQogCX0gZWxzZQogCQkvKiBBcmUgdGhlcmUgbXVsdGljYXN0IGFkZHJlc3NlcyB0byBzZW5kPyAqLwotCWlmIChkZXYtPm1jX2xpc3QgIT0gKHN0cnVjdCBkZXZfbWNfbGlzdCAqKSBOVUxMKSB7CisJaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQkvKgogCQkgKiBEaXNhYmxlIHByb21pc2N1b3VzIG1vZGUsIGJ1dCByZWNlaXZlIGFsbCBwYWNrZXRzCiAJCSAqIGluIG11bHRpY2FzdCBsaXN0CiAJCSAqLwogI2lmZGVmIE1VTFRJQ0FTVF9BVk9JRAotCQlpZiAobHAtPnByb21pc2N1b3VzIHx8IChkZXYtPm1jX2NvdW50ICE9IGxwLT5tY19jb3VudCkpCisJCWlmIChscC0+cHJvbWlzY3VvdXMgfHwgKG5ldGRldl9tY19jb3VudChkZXYpICE9IGxwLT5tY19jb3VudCkpCiAjZW5kaWYKIAkJewogCQkJbHAtPnByb21pc2N1b3VzID0gMDsKLQkJCWxwLT5tY19jb3VudCA9IGRldi0+bWNfY291bnQ7CisJCQlscC0+bWNfY291bnQgPSBuZXRkZXZfbWNfY291bnQoZGV2KTsKIAogCQkJd3ZfODI1ODZfcmVjb25maWcoZGV2KTsKIAkJfQpAQCAtMzUzMSw3ICszNTMxLDcgQEAKIAogCS8qIEFueSBhZGRyZXNzIHRvIHNldD8gKi8KIAlpZiAobHAtPm1jX2NvdW50KSB7Ci0JCWZvciAoZG1pID0gZGV2LT5tY19saXN0OyBkbWk7IGRtaSA9IGRtaS0+bmV4dCkKKwkJbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpCiAJCQlvdXRzdyhQSU9QMShpb2FkZHIpLCAodTE2ICopIGRtaS0+ZG1pX2FkZHIsCiAJCQkgICAgICBXQVZFTEFOX0FERFJfU0laRSA+PiAxKTsKIApAQCAtMzUzOSw3ICszNTM5LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcKIAkJICAgICAgICIlczogd3ZfODI1ODZfY29uZmlnKCk6IHNldCAlZCBtdWx0aWNhc3QgYWRkcmVzc2VzOlxuIiwKIAkJICAgICAgIGRldi0+bmFtZSwgbHAtPm1jX2NvdW50KTsKLQkJZm9yIChkbWkgPSBkZXYtPm1jX2xpc3Q7IGRtaTsgZG1pID0gZG1pLT5uZXh0KQorCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikKIAkJCXByaW50ayhLRVJOX0RFQlVHICIgJXBNXG4iLCBkbWktPmRtaV9hZGRyKTsKICNlbmRpZgogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93YXZlbGFuL3dhdmVsYW5fY3MuYyBiL2RyaXZlcnMvc3RhZ2luZy93YXZlbGFuL3dhdmVsYW5fY3MuYwppbmRleCAxMGM3MDJiLi4wNGY2OTFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2F2ZWxhbi93YXZlbGFuX2NzLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dhdmVsYW4vd2F2ZWxhbl9jcy5jCkBAIC0xMzczLDcgKzEzNzMsNyBAQAogCiAjaWZkZWYgREVCVUdfSU9DVExfSU5GTwogICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IHdhdmVsYW5fc2V0X211bHRpY2FzdF9saXN0KCk6IHNldHRpbmcgUnggbW9kZSAlMDJYIHRvICVkIGFkZHJlc3Nlcy5cbiIsCi0JIGRldi0+bmFtZSwgZGV2LT5mbGFncywgZGV2LT5tY19jb3VudCk7CisJIGRldi0+bmFtZSwgZGV2LT5mbGFncywgbmV0ZGV2X21jX2NvdW50KGRldikpOwogI2VuZGlmCiAKICAgaWYoZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKQpAQCAtMTM5NCw3ICsxMzk0LDcgQEAKICAgICAvKiBJZiBhbGwgbXVsdGljYXN0IGFkZHJlc3NlcwogICAgICAqIG9yIHRvbyBtdWNoIG11bHRpY2FzdCBhZGRyZXNzZXMgZm9yIHRoZSBoYXJkd2FyZSBmaWx0ZXIgKi8KICAgICBpZigoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwKLSAgICAgICAoZGV2LT5tY19jb3VudCA+IEk4MjU5M19NQVhfTVVMVElDQVNUX0FERFJFU1NFUykpCisgICAgICAgKG5ldGRldl9tY19jb3VudChkZXYpID4gSTgyNTkzX01BWF9NVUxUSUNBU1RfQUREUkVTU0VTKSkKICAgICAgIHsKIAkvKgogCSAqIERpc2FibGUgcHJvbWlzY3VvdXMgbW9kZSwgYnV0IGFjdGl2ZSB0aGUgYWxsIG11bHRpY2FzdCBtb2RlCkBAIC0xNDEwLDIwICsxNDEwLDE5IEBACiAgICAgICB9CiAgICAgZWxzZQogICAgICAgLyogSWYgdGhlcmUgaXMgc29tZSBtdWx0aWNhc3QgYWRkcmVzc2VzIHRvIHNlbmQgKi8KLSAgICAgIGlmKGRldi0+bWNfbGlzdCAhPSAoc3RydWN0IGRldl9tY19saXN0ICopIE5VTEwpCi0JeworICAgICAgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCSAgLyoKIAkgICAqIERpc2FibGUgcHJvbWlzY3VvdXMgbW9kZSwgYnV0IHJlY2VpdmUgYWxsIHBhY2tldHMKIAkgICAqIGluIG11bHRpY2FzdCBsaXN0CiAJICAgKi8KICNpZmRlZiBNVUxUSUNBU1RfQVZPSUQKIAkgIGlmKGxwLT5wcm9taXNjdW91cyB8fCBscC0+YWxsbXVsdGljYXN0IHx8Ci0JICAgICAoZGV2LT5tY19jb3VudCAhPSBscC0+bWNfY291bnQpKQorCSAgICAgKG5ldGRldl9tY19jb3VudChkZXYpICE9IGxwLT5tY19jb3VudCkpCiAjZW5kaWYKIAkgICAgewogCSAgICAgIGxwLT5wcm9taXNjdW91cyA9IDA7CiAJICAgICAgbHAtPmFsbG11bHRpY2FzdCA9IDA7Ci0JICAgICAgbHAtPm1jX2NvdW50ID0gZGV2LT5tY19jb3VudDsKKwkgICAgICBscC0+bWNfY291bnQgPSBuZXRkZXZfbWNfY291bnQoZGV2KTsKIAogCSAgICAgIHd2XzgyNTkzX3JlY29uZmlnKGRldik7CiAJICAgIH0KQEAgLTM1OTgsMTMgKzM1OTcsMTMgQEAKICAgLyogSWYgYW55IG11bHRpY2FzdCBhZGRyZXNzIHRvIHNldCAqLwogICBpZihscC0+bWNfY291bnQpCiAgICAgewotICAgICAgc3RydWN0IGRldl9tY19saXN0ICoJZG1pOworICAgICAgc3RydWN0IGRldl9tY19saXN0ICpkbWk7CiAgICAgICBpbnQJCQlhZGRyc19sZW4gPSBXQVZFTEFOX0FERFJfU0laRSAqIGxwLT5tY19jb3VudDsKIAogI2lmZGVmIERFQlVHX0NPTkZJR19JTkZPCiAgICAgICBwcmludGsoS0VSTl9ERUJVRyAiJXM6IHd2X2h3X2NvbmZpZygpOiBzZXQgJWQgbXVsdGljYXN0IGFkZHJlc3NlczpcbiIsCiAJICAgICBkZXYtPm5hbWUsIGxwLT5tY19jb3VudCk7Ci0gICAgICBmb3IoZG1pPWRldi0+bWNfbGlzdDsgZG1pOyBkbWk9ZG1pLT5uZXh0KQorICAgICAgbmV0ZGV2X2Zvcl9lYWNoX21jX2FkZHIoZG1pLCBkZXYpCiAJcHJpbnRrKEtFUk5fREVCVUcgIiAlcE1cbiIsIGRtaS0+ZG1pX2FkZHIpOwogI2VuZGlmCiAKQEAgLTM2MTMsNyArMzYxMiw3IEBACiAgICAgICBvdXRiKCgoVFhfQkFTRSA+PiA4KSAmIFBJT1JIX01BU0spIHwgUElPUkhfU0VMX1RYLCBQSU9SSChiYXNlKSk7CiAgICAgICBvdXRiKGFkZHJzX2xlbiAmIDB4ZmYsIFBJT1AoYmFzZSkpOwkvKiBieXRlIGNvdW50IGxzYiAqLwogICAgICAgb3V0YigoYWRkcnNfbGVuID4+IDgpLCBQSU9QKGJhc2UpKTsJLyogYnl0ZSBjb3VudCBtc2IgKi8KLSAgICAgIGZvcihkbWk9ZGV2LT5tY19saXN0OyBkbWk7IGRtaT1kbWktPm5leHQpCisgICAgICBuZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihkbWksIGRldikKIAlvdXRzYihQSU9QKGJhc2UpLCBkbWktPmRtaV9hZGRyLCBkbWktPmRtaV9hZGRybGVuKTsKIAogICAgICAgLyogcmVzZXQgdHJhbnNtaXQgRE1BIHBvaW50ZXIgKi8KQEAgLTM2MjIsNyArMzYyMSw4IEBACiAgICAgICBpZighd3ZfODI1OTNfY21kKGRldiwgInd2XzgyNTkzX2NvbmZpZygpOiBtYy1zZXR1cCIsCiAJCSAgICAgICBPUDBfTUNfU0VUVVAsIFNSMF9NQ19TRVRVUF9ET05FKSkKIAlyZXQgPSBGQUxTRTsKLSAgICAgIGxwLT5tY19jb3VudCA9IGRldi0+bWNfY291bnQ7CS8qIHJlbWVtYmVyIHRvIGF2b2lkIHJlcGVhdGVkIHJlc2V0ICovCisgICAgICAvKiByZW1lbWJlciB0byBhdm9pZCByZXBlYXRlZCByZXNldCAqLworICAgICAgbHAtPm1jX2NvdW50ID0gbmV0ZGV2X21jX2NvdW50KGRldik7CiAgICAgfQogCiAgIC8qIEpvYiBkb25lLCBjbGVhciB0aGUgZmxhZyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvY29yZS5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvY29yZS5oCmluZGV4IDdkNGJkNWUuLjBhMjA2MGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL2NvcmUuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9jb3JlLmgKQEAgLTE0LDcgKzE0LDcgQEAKIHN0cnVjdCB3YnNvZnRfcHJpdiB7CiAJdTMyIGFkYXB0ZXJJbmRleDsJLy8gMjAwNjA3MDMuNCBBZGQgZm9yIHVzaW5nIHBhZGFwdGVyQ29udGV4dCBnbG9iYWwgYWRhcHRlciBwb2ludAogCi0JV0JfTE9DQUxERVNDUklQVCBzTG9jYWxQYXJhOwkvLyBNeXNlbGYgY29ubmVjdGVkIHBhcmFtZXRlcnMKKwlzdHJ1Y3Qgd2JfbG9jYWxfcGFyYSBzTG9jYWxQYXJhOwkvLyBNeXNlbGYgY29ubmVjdGVkIHBhcmFtZXRlcnMKIAogCU1MTUVfRlJBTUUgc01sbWVGcmFtZTsJLy8gY29ubmVjdCB0byBwZWVyU1RBIHBhcmFtZXRlcnMKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbG9jYWxwYXJhLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9sb2NhbHBhcmEuaAppbmRleCA1NjI2YTc2Li5mY2Y2YTA0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbG9jYWxwYXJhLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbG9jYWxwYXJhLmgKQEAgLTExMCwzMyArMTEwLDIwIEBACiAvLyAyMDA2MTEwOCBXUFMgSUUgYnVmZmVyCiAjZGVmaW5lIE1BWF9JRV9BUFBFTkRfU0laRQkJCQkJMjU2ICsgNCAvLyBEdWUgdG8gW0UgaWRdW0xlbmd0aF1bT1VJXVtEYXRhXSBtYXkgMjU3IGJ5dGVzCiAKLXR5cGVkZWYgc3RydWN0IF9FVkVOVExPRwotewotCXUxNgkJQ291bnQ7CQkJLy9Ub3RhbCBjb3VudCBmcm9tIHN0YXJ0Ci0JdTE2CQlpbmRleDsJCQkvL0J1ZmZlciBpbmRleCwgMCB+IDYzCi0JdTMyCQlFdmVudFZhbHVlWzY0XTsJLy9CWVRFIDN+MiA6IGNvdW50LCBCWVRFIDEgOiBFdmVudCwgQllURSAwIDogcmVhc29uCi19IEV2ZW50X0xvZywgKnBFdmVudF9Mb2c7Ci0KLXR5cGVkZWYgc3RydWN0IF9DaGFuSW5mbworc3RydWN0IGNoYW5faW5mbwogewogCXU4CQliYW5kOwogCXU4CQlDaGFuTm87Ci19IENoYW5JbmZvLCAqcENoYW5JbmZvOworfTsKIAotdHlwZWRlZiBzdHJ1Y3QgX0NIQU5fTElTVAotewotCXUxNgkJCQlDb3VudDsKLQlDaGFuSW5mbwkJQ2hhbm5lbFs1MF07IC8vIDEwMEIKLX0gQ0hBTl9MSVNULCAqcHNDSEFOX0xJU1Q7Ci0KLXR5cGVkZWYgc3RydWN0IF9SYWRpb09mZgorc3RydWN0IHJhZGlvX29mZgogewogCXU4CQkJYm9Id1JhZGlvT2ZmOwogCXU4CQkJYm9Td1JhZGlvT2ZmOwotfSBSYWRpb09mZiwgKnBzUmFkaW9PZmY7Cit9OwogCiAvLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdHlwZWRlZiBzdHJ1Y3QgTE9DQUxfUEFSQQorc3RydWN0IHdiX2xvY2FsX3BhcmEKIHsKIAl1OAkJCVBlcm1hbmVudEFkZHJlc3NbIE1BQ19BRERSX0xFTkdUSCArIDIgXTsgCS8vIHJlYWQgZnJvbSBFUFJPTSwgbWFudWZhY3R1cmUgc2V0IGZvciBlYWNoIE5ldENhcmQKICAgICB1OCAgICAJCVRoaXNNYWNBZGRyZXNzWyBNQUNfQUREUl9MRU5HVEggKyAyIF07CQkJLy8gdGhlIGRyaXZlciB3aWxsIHVzZSBhY3R1YWxseS4KQEAgLTE4Niw3ICsxNzMsNyBAQAogICAgIHUxNgkJCUxpc3RlbkludGVydmFsOyAgICAgCS8vIFRoZSBsaXN0ZW4gaW50ZXJ2YWwgd2hlbiBTTUUgaW52b2tpbmcgTUxNRV8KICAgICAgICAgICAgIAkgICAgICAgICAgICAgICAgICAgIAkvLyAoUmUpQXNzb2NpYXRlX1JlcXVlc3QoKS4KIAotCVJhZGlvT2ZmCQlSYWRpb09mZlN0YXR1czsKKwlzdHJ1Y3QgcmFkaW9fb2ZmCQlSYWRpb09mZlN0YXR1czsKIAl1OAkJCVJlc2VydmVkMFsyXTsKIAogCXU4CQkJYm9Nc1JhZGlvT2ZmOwkJCS8vIE5kaXMgZGVtYW5kcyB0byBiZSB0cnVlIHdoZW4gc2V0IERpc2Fzc29jLiBPSUQgYW5kIGJlIGZhbHNlIHdoZW4gc2V0IFNTSUQgT0lELgpAQCAtMTk2LDcgKzE4Myw3IEBACiAJdTgJCQlSb2FtU3RhdHVzOwogCXU4CQkJcmVzZXJ2ZWQ3WzNdOwogCi0JQ2hhbkluZm8JQ3VycmVudENoYW47CQkJLy9DdXJyZW50IGNoYW5uZWwgbm8uIGFuZCBjaGFubmVsIGJhbmQuIEl0IG1heSBiZSBjaGFuZ2VkIGJ5IHNjYW5uaW5nLgorCXN0cnVjdCBjaGFuX2luZm8JQ3VycmVudENoYW47CQkJLy9DdXJyZW50IGNoYW5uZWwgbm8uIGFuZCBjaGFubmVsIGJhbmQuIEl0IG1heSBiZSBjaGFuZ2VkIGJ5IHNjYW5uaW5nLgogCXU4CQkJYm9IYW5kb3ZlcjsJCQkJLy8gUm9hbWluZywgSG5hZG92ZXIgdG8gb3RoZXIgQVAuCiAJdTgJCQlib0NDQWJ1c3k7CiAKQEAgLTI1MywxOSArMjQwLDE2IEBACiAgICAgdTMyCSAgIAkJX2RvdDExV0VQVW5kZWNyeXB0YWJsZUNvdW50OwogICAgIHUzMgkgICAJCV9kb3QxMUZyYW1lRHVwbGljYXRlQ291bnQ7CiAKLQlDaGFuSW5mbwlJYnNzQ2hhblNldHRpbmc7CS8vIDJCLiBTdGFydCBJQlNTIENoYW5uZWwgc2V0dGluZyBieSByZWdpc3RyeSBvciBXV1UuCisJc3RydWN0IGNoYW5faW5mbwlJYnNzQ2hhblNldHRpbmc7CS8vIDJCLiBTdGFydCBJQlNTIENoYW5uZWwgc2V0dGluZyBieSByZWdpc3RyeSBvciBXV1UuCiAJdTgJCXJlc2VydmVkXzVbMl07CQkvL0l0IG1heSBub3QgYmUgdXNlZCBhZnRlciBjb25zaWRlcmluZyBSRiB0eXBlLAogCQkJCQkJCQkJLy9yZWdpb24gYW5kIG1vZHVsYXRpb24gdHlwZS4KIAotCUNIQU5fTElTVAlzU3VwcG9ydENoYW5MaXN0OwkvLyA4NkIuIEl0IHdpbGwgYmUgb2J0YWluZWQgYWNjb3JkaW5nIHRvIFJGIHR5cGUgYW5kIHJlZ2lvbgogCXU4CQlyZXNlcnZlZF82WzJdOwkJLy90d28gdmFyaWFibGVzIGFyZSBmb3Igd2VwIGtleSBlcnJvciBkZXRlY3Rpb24gYWRkZWQgYnkgd3MgMDIvMDIvMDQKIAogICAgIHUzMgkgICAgICBiV2VwS2V5RXJyb3I7CiAgICAgdTMyICAgICAgICAgYlRvU2VsZlBhY2tldFJlY2VpdmVkOwogICAgIHUzMiAgICAgICAgIFdlcEtleURldGVjdFRpbWVyQ291bnQ7CiAKLQlFdmVudF9Mb2cJRXZlbnRMb2c7Ci0KIAl1MTYJCVNpZ25hbExvc3RUaDsKIAl1MTYJCVNpZ25hbFJvYW1UaDsKIApAQCAtMjc0LDYgKzI1OCw2IEBACiAJdTE2CQlJRV9BcHBlbmRfc2l6ZTsKIAl1MTYJCXJlc2VydmVkXzc7CiAKLX0gV0JfTE9DQUxERVNDUklQVCwgKlBXQl9MT0NBTERFU0NSSVBUOworfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHNfZi5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzX2YuaAppbmRleCBhYjFlYTUzLi5lMDlkZDRiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzX2YuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHNfZi5oCkBAIC0xMSw5ICsxMSw2IEBACiB2b2lkIE1kc19NcGR1UHJvY2VzcyggIHN0cnVjdCB3YnNvZnRfcHJpdiAqYWRhcHRlciwgIHN0cnVjdCB3YjM1X2Rlc2NyaXB0b3IgKnBSeERlcyApOwogZXh0ZXJuIHZvaWQgRGF0YURtcCh1OCAqcGRhdGEsIHUzMiBsZW4sIHUzMiBvZmZzZXQpOwogCi0vLyBGb3IgQXN5bmNocm9ub3VzIGluZGljYXRpbmcuIFRoZSByb3V0aW5lIGNvbGxvY2F0ZXMgd2l0aCBVU0IuCi12b2lkIE1kc19Nc2R1UHJvY2VzcyggIHN0cnVjdCB3YnNvZnRfcHJpdiAqYWRhcHRlciwgIFBSWExBWUVSMSBwUnhMYXllcjEsICB1OCBTbG90SW5kZXgpOwotCiAvLyBGb3IgZGF0YSBmcmFtZSBzZW5kaW5nIDIwMDYwODAyCiB1MTYgTURTX0dldFBhY2tldFNpemUoICBzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIgKTsKIHZvaWQgTURTX0dldE5leHRQYWNrZXQoICBzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKmFkYXB0ZXIsICBzdHJ1Y3Qgd2IzNV9kZXNjcmlwdG9yICpwRGVzICk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHNfcy5oIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvbWRzX3MuaAppbmRleCBlOGUxM2JkLi4yMTdmZjA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tZHNfcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21kc19zLmgKQEAgLTEzMywzMiArMTMzLDQgQEAKIAogfTsKIAotLy8KLS8vIFJldmVpdmUgTGF5ZXIgMSBGb3JtYXQuCi0vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXR5cGVkZWYgc3RydWN0IF9SWExBWUVSMQotewotICAgIHUxNiAgU2VxdWVuY2VOdW1iZXI7ICAgICAvLyBUaGUgc2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBsYXN0IHJlY2VpdmVkIHBhY2tldC4KLQl1MTYJQnVmZmVyVG90YWxTaXplOwotCi0JdTMyCUluVXNlZDsKLSAgICB1MzIgICBEZWNyeXB0aW9uTWV0aG9kOyAgIC8vIFRoZSBkZXNpcmVkIGRlZnJhZ21lbnQgbnVtYmVyIG9mIHRoZSBuZXh0IGluY29taW5nIHBhY2tldC4KLQotCXU4CURlRnJhZ21lbnROdW1iZXI7Ci0JdTgJRnJhbWVUeXBlOwotICAgIHU4CVR5cGVFbmNhcHN1bGF0ZWQ7Ci0JdTgJQnVmZmVyTnVtYmVyOwotCi0JdTMyCUZpcnN0RnJhbWVBcnJpdmVkVGltZTsKLQotCXU4CQlMYXN0RnJhbWVUeXBlOyAvLyAyMDA2MTAwNCBmb3IgZml4IGludGVsIDM5NDUgJ3MgYnVnCi0JdTgJCVJFU0VSVkVEWzNdOyAgLy9AQCBhbnNvbgotCi0JLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0JLy8gRm9yIGJyYW5kLW5ldyBSeCBzeXN0ZW0KLQl1OAlSZXNlcnZlZEJ1ZmZlclsgMjQwMCBdOy8vSWYgQnVmZmVyIElEIGlzIHJlc2VydmVkIG9uZSwgaXQgbXVzdCBjb3B5IHRoZSBkYXRhIGludG8gdGhpcyBhcmVhCi0JdTgJKlJlc2VydmVkQnVmZmVyUG9pbnQ7Ly8gUG9pbnQgdG8gdGhlIG5leHQgYXZhaWxhYmUgYWRkcmVzcyBvZiByZXNlcnZlZCBidWZmZXIKLQotfVJYTEFZRVIxLCAqIFBSWExBWUVSMTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tbG1lX3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWVfcy5oCmluZGV4IGVhMTI2ODQuLjEyMTdhMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWVfcy5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL21sbWVfcy5oCkBAIC0xNjUsMTQgKzE2NSw2IEBACiAKIH0gTUxNRV9BVVRIUkVRX1BBUkEsICpwc01MTUVfQVVUSFJFUV9QQVJBOwogCi1zdHJ1Y3QgX1JlYXNvbl9Db2RlIHsKLQotCXU4CXBlZXJNQUNhZGRyW01BQ19BRERSX0xFTkdUSF07Ci0JdTE2CXdSZWFzb25Db2RlOwotfTsKLXR5cGVkZWYgc3RydWN0IF9SZWFzb25fQ29kZSBNTE1FX0RFQVVUSFJFUV9QQVJBLCAqcHNNTE1FX0RFQVVUSFJFUV9QQVJBOwotdHlwZWRlZiBzdHJ1Y3QgX1JlYXNvbl9Db2RlIE1MTUVfRElTQVNTT0NSRVFfUEFSQSwgKnBzTUxNRV9ESVNBU1NPQ1JFUV9QQVJBOwotCiB0eXBlZGVmIHN0cnVjdCBfQVNTT0NSRVEgewogICB1OCAgICAgICBQZWVyU1RBQWRkcltNQUNfQUREUl9MRU5HVEhdOwogICB1MTYgICAgICAgQ2FwYWJpbGl0eUluZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9tdG8uaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5oCmluZGV4IDRmZTI0YjAuLmZiNDc4MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL210by5oCkBAIC0xNDEsMTEgKzE0MSw2IEBACiAjZGVmaW5lIE1UT19EQVRBX1JBVEUoKSAgICAgICAgICBNVE9fRGF0YV9SYXRlX1RibFtNVE9fUkFURV9MRVZFTCgpXQogI2RlZmluZSBNVE9fRlJBR19USCgpICAgICAgICAgICAgTVRPX0ZyYWdfVGhfVGJsW01UT19GUkFHX1RIX0xFVkVMKCldCiAKLXR5cGVkZWYgc3RydWN0IHsKLQl1OCB0eF9yYXRlOwotCXU4IHR4X3JldHJ5X3JhdGU7Ci19IFRYUkVUUllfUkVDOwotCiBleHRlcm4gdm9pZCBNVE9fSW5pdChzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKik7CiBleHRlcm4gdm9pZCBNVE9fUGVyaW9kaWNUaW1lckV4cGlyZWQoc3RydWN0IHdic29mdF9wcml2ICopOwogZXh0ZXJuIHZvaWQgTVRPX1NldERUT1JhdGVSYW5nZShzdHJ1Y3Qgd2Jzb2Z0X3ByaXYgKiwgdTggKiwgdTgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvcmVnLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9yZWcuYwppbmRleCBkOTE1Y2JkLi41ZjUwNDhhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9yZWcuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9yZWcuYwpAQCAtMTgyMywxMiArMTgyMywxMiBAQAogCQlyZWctPlNRM19maWx0ZXJbaV0gPSAweDJmOyAvLyBoYWxmIG9mIEJpdCAwIH4gNgogfQogCi12b2lkIHNldF90eF9wb3dlcl9wZXJfY2hhbm5lbF9tYXgyODI5KCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCkKK3ZvaWQgc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX21heDI4MjkoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBzdHJ1Y3QgY2hhbl9pbmZvIENoYW5uZWwpCiB7CiAJUkZTeW50aGVzaXplcl9TZXRQb3dlckluZGV4KCBwSHdEYXRhLCAxMDAgKTsgLy8gMjAwNjA2MjAuMSBNb2RpZnkKIH0KIAotdm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfYWwyMjMwKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCApCit2b2lkIHNldF90eF9wb3dlcl9wZXJfY2hhbm5lbF9hbDIyMzAoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBzdHJ1Y3QgY2hhbl9pbmZvIENoYW5uZWwgKQogewogCXU4CWluZGV4ID0gMTAwOwogCkBAIC0xODM4LDcgKzE4MzgsNyBAQAogCVJGU3ludGhlc2l6ZXJfU2V0UG93ZXJJbmRleCggcEh3RGF0YSwgaW5kZXggKTsKIH0KIAotdm9pZCBzZXRfdHhfcG93ZXJfcGVyX2NoYW5uZWxfYWw3MjMwKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCkKK3ZvaWQgc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX2FsNzIzMCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHN0cnVjdCBjaGFuX2luZm8gQ2hhbm5lbCkKIHsKIAl1OAlpLCBpbmRleCA9IDEwMDsKIApAQCAtMTg2OCw3ICsxODY4LDcgQEAKIAlSRlN5bnRoZXNpemVyX1NldFBvd2VySW5kZXgoIHBId0RhdGEsIGluZGV4ICk7CiB9CiAKLXZvaWQgc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX3diMjQyKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCkKK3ZvaWQgc2V0X3R4X3Bvd2VyX3Blcl9jaGFubmVsX3diMjQyKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgc3RydWN0IGNoYW5faW5mbyBDaGFubmVsKQogewogCXU4CWluZGV4ID0gMTAwOwogCkBAIC0xOTAxLDcgKzE5MDEsNyBAQAogLy8gICBOb25lLgogLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiB2b2lkCi1SRlN5bnRoZXNpemVyX1N3aXRjaGluZ0NoYW5uZWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBDaGFuSW5mbyBDaGFubmVsICkKK1JGU3ludGhlc2l6ZXJfU3dpdGNoaW5nQ2hhbm5lbCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHN0cnVjdCBjaGFuX2luZm8gQ2hhbm5lbCApCiB7CiAJc3RydWN0IHdiMzVfcmVnICpyZWcgPSAmcEh3RGF0YS0+cmVnOwogCXUzMglwbHRtcFsxNl07IC8vIFRoZSAxNiBpcyB0aGUgbWF4aW11bSBjYXBhYmlsaXR5IG9mIGhhcmR3YXJlCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zY2FuX3MuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NjYW5fcy5oCmluZGV4IDc3NWJiODEuLjIwOTcxN2Y1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zY2FuX3MuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zY2FuX3MuaApAQCAtMzUsNyArMzUsNiBAQAogewogCXUzMgkJCQlTY2FuVHlwZTsJCQkvL3Bhc3NpdmUvYWN0aXZlIHNjYW4KIAotCUNIQU5fTElTVAkJc0NoYW5uZWxMaXN0OwkvLyA4NkIKIAl1OAkJCXJlc2VydmVkXzFbMl07CiAKIAlzdHJ1Y3QgU1NJRF9FbGVtZW50CXNTU0lEOyAvLyAzNEIuIHNjYW4gb25seSBmb3IgdGhpcyBTU0lECmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfYXBpLmggYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC9zbWVfYXBpLmgKaW5kZXggNTQ5ODc4My4uYjU4OTgyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvc21lX2FwaS5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3NtZV9hcGkuaApAQCAtMTkzLDggKzE5Myw2IEBACiBzOCBzbWVfZ2V0X2N3bWF4X3ZhbHVlKHZvaWQgKnBjb3JlX2RhdGEsIHUxNiAqY3dtYXgpOwogczggc21lX2dldF9tc19yYWRpb19tb2RlKHZvaWQgKnBjb3JlX2RhdGEsIHU4ICogcE1zUmFkaW9PZmYpOwogczggc21lX3NldF9tc19yYWRpb19tb2RlKHZvaWQgKnBjb3JlX2RhdGEsIHU4IGJvTXNSYWRpb09mZik7Ci1zOCBzbWVfZ2V0X3JhZGlvX21vZGUodm9pZCAqcGNvcmVfZGF0YSwgcHNSYWRpb09mZiBwUmFkaW9PZmZEYXRhKTsKLXM4IHNtZV9zZXRfcmFkaW9fbW9kZSh2b2lkICpwY29yZV9kYXRhLCBSYWRpb09mZiBSYWRpb09mZkRhdGEpOwogCiB2b2lkIHNtZV9nZXRfdHhfcG93ZXJfbGV2ZWwodm9pZCAqcGNvcmVfZGF0YSwgdTMyICpUeFBvd2VyKTsKIHU4IHNtZV9zZXRfdHhfcG93ZXJfbGV2ZWwodm9pZCAqcGNvcmVfZGF0YSwgdTMyIFR4UG93ZXIpOwpAQCAtMjAzLDcgKzIwMSw3IEBACiB1OCBzbWVfc2V0X3J4X2FudGVubmEodm9pZCAqcGNvcmVfZGF0YSwgdTMyIFJ4QW50ZW5uYSk7CiB2b2lkIHNtZV9nZXRfdHhfYW50ZW5uYSh2b2lkICpwY29yZV9kYXRhLCB1MzIgKlR4QW50ZW5uYSk7CiBzOCBzbWVfc2V0X3R4X2FudGVubmEodm9pZCAqcGNvcmVfZGF0YSwgdTMyIFR4QW50ZW5uYSk7Ci1zOCBzbWVfc2V0X0lCU1NfY2hhbih2b2lkICpwY29yZV9kYXRhLCBDaGFuSW5mbyBjaGFuKTsKK3M4IHNtZV9zZXRfSUJTU19jaGFuKHZvaWQgKnBjb3JlX2RhdGEsIHN0cnVjdCBjaGFuX2luZm8gY2hhbik7CiAKIC8vMjAwNjExMDggV1BTCiBzOCBzbWVfc2V0X0lFX2FwcGVuZCh2b2lkICpwY29yZV9kYXRhLCB1OCAqYnVmZmVyLCB1MTYgYnVmX2xlbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YjM1cmVnX2YuaCBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyZWdfZi5oCmluZGV4IDMwZjViNWEuLmQzNTJiY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyZWdfZi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3diMzVyZWdfZi5oCkBAIC0xNCw3ICsxNCw3IEBACiB2b2lkIE14eF9pbml0aWFsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhICk7CiB2b2lkIFJGU3ludGhlc2l6ZXJfaW5pdGlhbCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwogLy92b2lkIFJGU3ludGhlc2l6ZXJfU3dpdGNoaW5nQ2hhbm5lbCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSwgIHM4IENoYW5uZWwgKTsKLXZvaWQgUkZTeW50aGVzaXplcl9Td2l0Y2hpbmdDaGFubmVsKCAgc3RydWN0IGh3X2RhdGEgKiBwSHdEYXRhLCAgQ2hhbkluZm8gQ2hhbm5lbCApOwordm9pZCBSRlN5bnRoZXNpemVyX1N3aXRjaGluZ0NoYW5uZWwoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICBzdHJ1Y3QgY2hhbl9pbmZvIENoYW5uZWwgKTsKIHZvaWQgQkJQcm9jZXNzb3JfaW5pdGlhbCggIHN0cnVjdCBod19kYXRhICogcEh3RGF0YSApOwogdm9pZCBCQlByb2Nlc3Nvcl9SYXRlQ2hhbmdpbmcoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCByYXRlICk7IC8vIDIwMDYwNjEzLjEKIC8vdm9pZCBSRl9SYXRlQ2hhbmdpbmcoICBzdHJ1Y3QgaHdfZGF0YSAqIHBId0RhdGEsICB1OCByYXRlICk7IC8vIDIwMDYwNjI2LjUuYyBBZGQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3didXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2luYm9uZC93YnVzYi5jCmluZGV4IDA2NzA4MmEuLjM0ODJlZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93aW5ib25kL3didXNiLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dpbmJvbmQvd2J1c2IuYwpAQCAtMjMsNyArMjMsNyBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX1ZFUlNJT04oIjAuMSIpOwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgd2IzNV90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgd2IzNV90YWJsZVtdIF9fZGV2aW5pdGNvbnN0ID0gewogCXsgVVNCX0RFVklDRSgweDA0MTYsIDB4MDAzNSkgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxOEU4LCAweDYyMDEpIH0sCiAJeyBVU0JfREVWSUNFKDB4MThFOCwgMHg2MjA2KSB9LApAQCAtNjUsMTcgKzY1LDE3IEBACiB9CiAKIHN0YXRpYyBpbnQgd2Jzb2Z0X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqZGV2LAotCQkJCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCiB7CiAJc3RydWN0IHdic29mdF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwogCi0JaGFsX3NldF9iZWFjb25fcGVyaW9kKCZwcml2LT5zSHdEYXRhLCBjb25mLT52aWYtPmJzc19jb25mLmJlYWNvbl9pbnQpOworCWhhbF9zZXRfYmVhY29uX3BlcmlvZCgmcHJpdi0+c0h3RGF0YSwgdmlmLT5ic3NfY29uZi5iZWFjb25faW50KTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB3YnNvZnRfcmVtb3ZlX2ludGVyZmFjZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpkZXYsCi0JCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKQorCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQogewogCXByaW50aygid2Jzb2Z0X3JlbW92ZSBpbnRlcmZhY2UgY2FsbGVkXG4iKTsKIH0KQEAgLTkyLDEzICs5Miw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgd2Jzb2Z0X2dldF90eF9zdGF0cyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cykKLXsKLQlwcmludGsoS0VSTl9JTkZPICIlcyBjYWxsZWRcbiIsIF9fZnVuY19fKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHU2NCB3YnNvZnRfcHJlcGFyZV9tdWx0aWNhc3Qoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGludCBtY19jb3VudCwKIAkJCQkgICAgc3RydWN0IGRldl9hZGRyX2xpc3QgKm1jX2xpc3QpCiB7CkBAIC0xNjEsNyArMTU0LDcgQEAKIH0KIAogc3RhdGljIHZvaWQKLWhhbF9zZXRfY3VycmVudF9jaGFubmVsX2V4KHN0cnVjdCBod19kYXRhICpwSHdEYXRhLCBDaGFuSW5mbyBjaGFubmVsKQoraGFsX3NldF9jdXJyZW50X2NoYW5uZWxfZXgoc3RydWN0IGh3X2RhdGEgKnBId0RhdGEsIHN0cnVjdCBjaGFuX2luZm8gY2hhbm5lbCkKIHsKIAlzdHJ1Y3Qgd2IzNV9yZWcgKnJlZyA9ICZwSHdEYXRhLT5yZWc7CiAKQEAgLTE4MCwxMCArMTczLDEwIEBACiAJcmVnLT5NMjhfTWFjQ29udHJvbCAmPSB+MHhmZjsJLy8gQ2xlYW4gY2hhbm5lbCBpbmZvcm1hdGlvbiBmaWVsZAogCXJlZy0+TTI4X01hY0NvbnRyb2wgfD0gY2hhbm5lbC5DaGFuTm87CiAJV2IzNVJlZ19Xcml0ZVdpdGhDYWxsYmFja1ZhbHVlKHBId0RhdGEsIDB4MDgyOCwgcmVnLT5NMjhfTWFjQ29udHJvbCwKLQkJCQkgICAgICAgKHM4ICopICYgY2hhbm5lbCwgc2l6ZW9mKENoYW5JbmZvKSk7CisJCQkJICAgICAgIChzOCAqKSAmIGNoYW5uZWwsIHNpemVvZihzdHJ1Y3QgY2hhbl9pbmZvKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGhhbF9zZXRfY3VycmVudF9jaGFubmVsKHN0cnVjdCBod19kYXRhICpwSHdEYXRhLCBDaGFuSW5mbyBjaGFubmVsKQorc3RhdGljIHZvaWQgaGFsX3NldF9jdXJyZW50X2NoYW5uZWwoc3RydWN0IGh3X2RhdGEgKnBId0RhdGEsIHN0cnVjdCBjaGFuX2luZm8gY2hhbm5lbCkKIHsKIAloYWxfc2V0X2N1cnJlbnRfY2hhbm5lbF9leChwSHdEYXRhLCBjaGFubmVsKTsKIH0KQEAgLTI1Myw3ICsyNDYsNyBAQAogc3RhdGljIGludCB3YnNvZnRfY29uZmlnKHN0cnVjdCBpZWVlODAyMTFfaHcgKmRldiwgdTMyIGNoYW5nZWQpCiB7CiAJc3RydWN0IHdic29mdF9wcml2ICpwcml2ID0gZGV2LT5wcml2OwotCUNoYW5JbmZvIGNoOworCXN0cnVjdCBjaGFuX2luZm8gY2g7CiAKIAlwcmludGsoIndic29mdF9jb25maWcgY2FsbGVkXG4iKTsKIApAQCAtMjg3LDcgKzI4MCw2IEBACiAJLnByZXBhcmVfbXVsdGljYXN0CT0gd2Jzb2Z0X3ByZXBhcmVfbXVsdGljYXN0LAogCS5jb25maWd1cmVfZmlsdGVyCT0gd2Jzb2Z0X2NvbmZpZ3VyZV9maWx0ZXIsCiAJLmdldF9zdGF0cwkJPSB3YnNvZnRfZ2V0X3N0YXRzLAotCS5nZXRfdHhfc3RhdHMJCT0gd2Jzb2Z0X2dldF90eF9zdGF0cywKIAkuZ2V0X3RzZgkJPSB3YnNvZnRfZ2V0X3RzZiwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX21haW4uYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX21haW4uYwppbmRleCAxNjc2NGEwLi5jZjBjMzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9tYWluLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfbWFpbi5jCkBAIC0zNzkyLDcgKzM3OTIsNyBAQAogCX0KIAlpZiAgKGNvdW50ID4gMCApIHsKIAkJcHJvY19udW1iZXJbY291bnRdID0gMDsKLQkJbnIgPSB3bF9hdG9pKCBwcm9jX251bWJlciApOworCQluciA9IHNpbXBsZV9zdHJ0b3VsKHByb2NfbnVtYmVyICwgTlVMTCwgMCk7CiAgCQkqKHVuc2lnbmVkIGludCAqKWRhdGEgPSBucjsKIAkJaWYgKCBuciAmIDB4ODAwMCApIHsJLy87P2tsdWRneSBidXQgaXQgaXMgdW5jbGVhciB0byBtZSB3ZXJlIGVsc2UgdG8gcGxhY2UgdGhpcwogI2lmIERCRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfbmV0ZGV2LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9uZXRkZXYuYwppbmRleCBhYzM4OTAyLi5mYTA4MmQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9uZXRkZXYuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9uZXRkZXYuYwpAQCAtMzYwLDcgKzM2MCw3IEBACiAgICAgd2xfbG9jayggbHAsICZmbGFncyApOwogCiAgICAgaWYoIHN0YXR1cyAhPSBIQ0ZfU1VDQ0VTUyApIHsKLQkvLyBVbnN1Y2Nlc2Z1bGwsIHRyeSByZXNldCBvZiB0aGUgY2FyZCB0byByZWNvdmVyCisJLy8gVW5zdWNjZXNzZnVsLCB0cnkgcmVzZXQgb2YgdGhlIGNhcmQgdG8gcmVjb3ZlcgogCXN0YXR1cyA9IHdsX3Jlc2V0KCBkZXYgKTsKICAgICB9CiAKQEAgLTEwNDksNyArMTA0OSw3IEBACiAvLzs/c2VlbXMgcmVhc29uYWJsZSB0aGF0IGV2ZW4gYW4gQVAtb25seSBkcml2ZXIgY291bGQgYWZmb3JkIHRoaXMgc21hbGwgYWRkaXRpb25hbCBmb290cHJpbnQKIAogICAgIGludCAgICAgICAgICAgICAgICAgeDsKLSAgICBzdHJ1Y3QgZGV2X21jX2xpc3QgICptY2xpc3Q7CisgICAgc3RydWN0IGRldl9tY19saXN0ICptY2xpc3Q7CiAgICAgc3RydWN0IHdsX3ByaXZhdGUgICAqbHAgPSB3bF9wcml2KGRldik7CiAgICAgdW5zaWduZWQgbG9uZyAgICAgICBmbGFnczsKICAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0xMDcwLDEzICsxMDcwLDExIEBACiAgICAgICAgICAgICAoIGRldi0+ZmxhZ3MgJiBJRkZfTVVMVElDQVNUICkgPyAiTXVsdGljYXN0ICIgOiAiIiwKICAgICAgICAgICAgICggZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSApID8gIkFsbC1NdWx0aWNhc3QiIDogIiIgKTsKIAotICAgICAgICBEQkdfUFJJTlQoICIgIG1jX2NvdW50OiAlZFxuIiwgZGV2LT5tY19jb3VudCApOworICAgICAgICBEQkdfUFJJTlQoICIgIG1jX2NvdW50OiAlZFxuIiwgbmV0ZGV2X21jX2NvdW50KGRldikpOwogCi0gICAgICAgIGZvciggeCA9IDAsIG1jbGlzdCA9IGRldi0+bWNfbGlzdDsgbWNsaXN0ICYmIHggPCBkZXYtPm1jX2NvdW50OwotICAgICAgICAgICAgIHgrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0ICkgeworCW5ldGRldl9mb3JfZWFjaF9tY19hZGRyKG1jbGlzdCwgZGV2KQogICAgICAgICAgICAgREJHX1BSSU5UKCAiICAgICVzICglZClcbiIsIERiZ0h3QWRkcihtY2xpc3QtPmRtaV9hZGRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgbWNsaXN0LT5kbWlfYWRkcmxlbiApOwotICAgICAgICB9CiAgICAgfQogI2VuZGlmIC8qIERCRyAqLwogCkBAIC0xMTAzLDcgKzExMDEsNyBAQAogICAgICAgICAgICAgICAgIERCR19QUklOVCggIkVuYWJsaW5nIFByb21pc2N1b3VzIG1vZGUgKElGRl9QUk9NSVNDKVxuIiApOwogICAgICAgICAgICAgICAgIGhjZl9wdXRfaW5mbyggJiggbHAtPmhjZkN0eCApLCAoTFRWUCkmKCBscC0+bHR2UmVjb3JkICkpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZigoIGRldi0+bWNfY291bnQgPiBIQ0ZfTUFYX01VTFRJQ0FTVCApIHx8CisgICAgICAgICAgICBlbHNlIGlmICgobmV0ZGV2X21jX2NvdW50KGRldikgPiBIQ0ZfTUFYX01VTFRJQ0FTVCkgfHwKICAgICAgICAgICAgICAgICAgICAgKCBkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJICkpIHsKICAgICAgICAgICAgICAgICAvKiBTaHV0dGluZyBvZmYgdGhpcyBmaWx0ZXIgd2lsbCBlbmFibGUgYWxsIG11bHRpY2FzdCBmcmFtZXMgdG8KICAgICAgICAgICAgICAgICAgICBiZSBzZW50IHVwIGZyb20gdGhlIGRldmljZTsgaG93ZXZlciwgdGhpcyBpcyBhIHN0YXRpYyBSSUQsIHNvCkBAIC0xMTE1LDE3ICsxMTEzLDE1IEBACiAgICAgICAgICAgICAgICAgaGNmX3B1dF9pbmZvKCAmKCBscC0+aGNmQ3R4ICksIChMVFZQKSYoIGxwLT5sdHZSZWNvcmQgKSk7CiAgICAgICAgICAgICAgICAgd2xfYXBwbHkoIGxwICk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmKCBkZXYtPm1jX2NvdW50ICE9IDAgKSB7CisgICAgICAgICAgICBlbHNlIGlmICghbmV0ZGV2X21jX2VtcHR5KGRldikpIHsKICAgICAgICAgICAgICAgICAvKiBTZXQgdGhlIG11bHRpY2FzdCBhZGRyZXNzZXMgKi8KLSAgICAgICAgICAgICAgICBscC0+bHR2UmVjb3JkLmxlbiA9ICggZGV2LT5tY19jb3VudCAqIDMgKSArIDE7CisgICAgICAgICAgICAgICAgbHAtPmx0dlJlY29yZC5sZW4gPSAoIG5ldGRldl9tY19jb3VudChkZXYpICogMyApICsgMTsKICAgICAgICAgICAgICAgICBscC0+bHR2UmVjb3JkLnR5cCA9IENGR19HUk9VUF9BRERSOwogCi0gICAgICAgICAgICAgICAgZm9yKCB4ID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OwotICAgICAgICAgICAgICAgICggeCA8IGRldi0+bWNfY291bnQgKSAmJiAoIG1jbGlzdCAhPSBOVUxMICk7Ci0gICAgICAgICAgICAgICAgICAgIHgrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0ICkgewotICAgICAgICAgICAgICAgICAgICBtZW1jcHkoICYoIGxwLT5sdHZSZWNvcmQudS51OFt4ICogRVRIX0FMRU5dICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWNsaXN0LT5kbWlfYWRkciwgRVRIX0FMRU4gKTsKLSAgICAgICAgICAgICAgICB9CisJCXggPSAwOworCQluZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KCYobHAtPmx0dlJlY29yZC51LnU4W3grKyAqIEVUSF9BTEVOXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBtY2xpc3QtPmRtaV9hZGRyLCBFVEhfQUxFTik7CiAgICAgICAgICAgICAgICAgREJHX1BSSU5UKCAiU2V0dGluZyBtdWx0aWNhc3QgbGlzdFxuIiApOwogICAgICAgICAgICAgICAgIGhjZl9wdXRfaW5mbyggJiggbHAtPmhjZkN0eCApLCAoTFRWUCkmKCBscC0+bHR2UmVjb3JkICkpOwogICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTExOTQsOSArMTE5MCw3IEBACiAgICAgLm5kb19zdG9wICAgICAgICAgICAgICAgPSAmd2xfYWRhcHRlcl9jbG9zZSwKICAgICAubmRvX2RvX2lvY3RsICAgICAgICAgICA9ICZ3bF9pb2N0bCwKIAotI2lmZGVmIEhBVkVfVFhfVElNRU9VVAogICAgIC5uZG9fdHhfdGltZW91dCAgICAgICAgID0gJndsX3R4X3RpbWVvdXQsCi0jZW5kaWYKIAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAgICAgLm5kb19wb2xsX2NvbnRyb2xsZXIgICAgPSB3bF9wb2xsLApAQCAtMTI3MCw5ICsxMjY0LDcgQEAKICAgICBkZXYtPnN0b3AgICAgICAgICAgICAgICA9ICZ3bF9hZGFwdGVyX2Nsb3NlOwogICAgIGRldi0+ZG9faW9jdGwgICAgICAgICAgID0gJndsX2lvY3RsOwogCi0jaWZkZWYgSEFWRV9UWF9USU1FT1VUCiAgICAgZGV2LT50eF90aW1lb3V0ICAgICAgICAgPSAmd2xfdHhfdGltZW91dDsKLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKICAgICBkZXYtPnBvbGxfY29udHJvbGxlciA9IHdsX3BvbGw7CkBAIC0xMjgwLDkgKzEyNzIsNyBAQAogCiAjZW5kaWYgLy8gKExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9WRVJTSU9OKDIsNiwzMCkpCiAKLSNpZmRlZiBIQVZFX1RYX1RJTUVPVVQKICAgICBkZXYtPndhdGNoZG9nX3RpbWVvICAgICA9IFRYX1RJTUVPVVQ7Ci0jZW5kaWYKIAogICAgIGRldi0+ZXRodG9vbF9vcHMJICAgID0gJndsX2V0aHRvb2xfb3BzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9wY2kuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3BjaS5jCmluZGV4IGEzZGIxMTEuLjAxZTRiZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3BjaS5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3BjaS5jCkBAIC04MSw3ICs4MSw2IEBACiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3Byb2ZpbGUuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3Byb2ZpbGUuYwppbmRleCA3MTVmMDI3Li4xZTBjNzVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF9wcm9maWxlLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfcHJvZmlsZS5jCkBAIC0zODMsMTUgKzM4MywxNSBAQAogCQkJCURiZ0luZm8tPkRlYnVnRmxhZyB8PSBEQkdfREVGQVVMVFM7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlEYmdJbmZvLT5EZWJ1Z0ZsYWcgPSB3bF9hdG9pKCB2YWx1ZSApOyAvLzs/RGVidWdGbGFnOworCQkJRGJnSW5mby0+RGVidWdGbGFnID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOyAvLzs/RGVidWdGbGFnOwogCQl9Ci0JCURiZ0luZm8tPkRlYnVnRmxhZyA9IHdsX2F0b2koIHZhbHVlICk7IC8vOz9EZWxldGUgQVNBUAorCQlEYmdJbmZvLT5EZWJ1Z0ZsYWcgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7IC8vOz9EZWxldGUgQVNBUAogCX0KICNlbmRpZiAvKiBEQkcgKi8KIAlpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfQVVUSF9LRVlfTUdNVF9TVUlURSApID09IDAgKSB7CiAJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9BVVRIX0tFWV9NR01UX1NVSVRFLCB2YWx1ZSApOwogCi0JCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX0FVVEhfS0VZX01HTVRfU1VJVEUgKSB8fCAoIHZhbHVlX2NvbnZlcnQgPD0gUEFSTV9NQVhfQVVUSF9LRVlfTUdNVF9TVUlURSApKSB7CiAJCQlscC0+QXV0aEtleU1nbXRTdWl0ZSA9IHZhbHVlX2NvbnZlcnQ7CiAJCX0gZWxzZSB7CkBAIC00MDEsNyArNDAxLDcgQEAKIAllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9CUlNDXzJHSFogKSA9PSAwICkgewogCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfQlJTQ18yR0haLCB2YWx1ZSApOwogCi0JCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX0JSU0MgKSB8fCAoIHZhbHVlX2NvbnZlcnQgPD0gUEFSTV9NQVhfQlJTQyApKSB7CiAJCQlscC0+YnJzY1swXSA9IHZhbHVlX2NvbnZlcnQ7CiAJCX0gZWxzZSB7CkBAIC00MTEsNyArNDExLDcgQEAKIAllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9CUlNDXzVHSFogKSA9PSAwICkgewogCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfQlJTQ181R0haLCB2YWx1ZSApOwogCi0JCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX0JSU0MgKSB8fCAoIHZhbHVlX2NvbnZlcnQgPD0gUEFSTV9NQVhfQlJTQyApKSB7CiAJCQlscC0+YnJzY1sxXSA9IHZhbHVlX2NvbnZlcnQ7CiAJCX0gZWxzZSB7CkBAIC00NDgsNyArNDQ4LDcgQEAKIAllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9FTkFCTEVfRU5DUllQVElPTiApID09IDAgKSB7CiAJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9FTkFCTEVfRU5DUllQVElPTiwgdmFsdWUgKTsKIAotCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJaWYgKCggdmFsdWVfY29udmVydCA+PSBQQVJNX01JTl9FTkFCTEVfRU5DUllQVElPTiApICYmICggdmFsdWVfY29udmVydCA8PSBQQVJNX01BWF9FTkFCTEVfRU5DUllQVElPTiApKSB7CiAJCQlscC0+RW5hYmxlRW5jcnlwdGlvbiA9IHZhbHVlX2NvbnZlcnQ7CiAJCX0gZWxzZSB7CkBAIC01MjksNyArNTI5LDcgQEAKIAllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9NVUxUSUNBU1RfUkFURSApID09IDAgKSB7CiAJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9NVUxUSUNBU1RfUkFURSwgdmFsdWUgKTsKIAotCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAogCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX01VTFRJQ0FTVF9SQVRFICkgJiYgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX01VTFRJQ0FTVF9SQVRFICkpIHsKIAkJCWxwLT5NdWx0aWNhc3RSYXRlWzBdID0gdmFsdWVfY29udmVydDsKQEAgLTU0MCw3ICs1NDAsNyBAQAogCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX09XTl9DSEFOTkVMICkgPT0gMCApIHsKIAkJREJHX1RSQUNFKCBEYmdJbmZvLCAiJXMsIHZhbHVlOiAlc1xuIiwgUEFSTV9OQU1FX09XTl9DSEFOTkVMLCB2YWx1ZSApOwogCi0JCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQlpZiAoIHdsX2lzX2FfdmFsaWRfY2hhbiggdmFsdWVfY29udmVydCApKSB7CiAJCQlpZiAoIHZhbHVlX2NvbnZlcnQgPiAxNCApIHsKIAkJCQl2YWx1ZV9jb252ZXJ0ID0gdmFsdWVfY29udmVydCB8IDB4MTAwOwpAQCAtNTY3LDcgKzU2Nyw3IEBACiAJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfUlRTX1RIUkVTSE9MRCApID09IDAgKSB7CiAJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9SVFNfVEhSRVNIT0xELCB2YWx1ZSApOwogCi0JCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX1JUU19USFJFU0hPTEQgKSAmJiAoIHZhbHVlX2NvbnZlcnQgPD0gUEFSTV9NQVhfUlRTX1RIUkVTSE9MRCApKSB7CiAJCQlscC0+UlRTVGhyZXNob2xkID0gdmFsdWVfY29udmVydDsKIAkJfSBlbHNlIHsKQEAgLTU3Nyw3ICs1NzcsNyBAQAogCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX1NSU0NfMkdIWiApID09IDAgKSB7CiAJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9TUlNDXzJHSFosIHZhbHVlICk7CiAKLQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fU1JTQyApIHx8ICggdmFsdWVfY29udmVydCA8PSBQQVJNX01BWF9TUlNDICkpIHsKIAkJCWxwLT5zcnNjWzBdID0gdmFsdWVfY29udmVydDsKIAkJfSBlbHNlIHsKQEAgLTU4Nyw3ICs1ODcsNyBAQAogCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX1NSU0NfNUdIWiApID09IDAgKSB7CiAJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9TUlNDXzVHSFosIHZhbHVlICk7CiAKLQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fU1JTQyApIHx8ICggdmFsdWVfY29udmVydCA8PSBQQVJNX01BWF9TUlNDICkpIHsKIAkJCWxwLT5zcnNjWzFdID0gdmFsdWVfY29udmVydDsKIAkJfSBlbHNlIHsKQEAgLTU5Nyw3ICs1OTcsNyBAQAogCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX1NZU1RFTV9TQ0FMRSApID09IDAgKSB7CiAJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9TWVNURU1fU0NBTEUsIHZhbHVlICk7CiAKLQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fU1lTVEVNX1NDQUxFICkgJiYgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX1NZU1RFTV9TQ0FMRSApKSB7CiAJCQlscC0+RGlzdGFuY2VCZXR3ZWVuQVBzID0gdmFsdWVfY29udmVydDsKIAkJfSBlbHNlIHsKQEAgLTYwNyw5ICs2MDcsOSBAQAogCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX1RYX0tFWSApID09IDAgKSB7CiAJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9UWF9LRVksIHZhbHVlICk7CiAKLQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fVFhfS0VZICkgJiYgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX1RYX0tFWSApKSB7Ci0JCQlscC0+VHJhbnNtaXRLZXlJRCA9IHdsX2F0b2koIHZhbHVlICk7CisJCQlscC0+VHJhbnNtaXRLZXlJRCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJfSBlbHNlIHsKIAkJCURCR19XQVJOSU5HKCBEYmdJbmZvLCAiJXMgaW52YWxpZDsgd2lsbCBiZSBpZ25vcmVkXG4iLCBQQVJNX05BTUVfVFhfS0VZICk7CiAJCX0KQEAgLTYxNyw3ICs2MTcsNyBAQAogCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX1RYX1JBVEUgKSA9PSAwICkgewogCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfVFhfUkFURSwgdmFsdWUgKTsKIAotCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJaWYgKCggdmFsdWVfY29udmVydCA+PSBQQVJNX01JTl9UWF9SQVRFICkgJiYgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX1RYX1JBVEUgKSkgewogCQkJbHAtPlR4UmF0ZUNvbnRyb2xbMF0gPSB2YWx1ZV9jb252ZXJ0OwogCQl9IGVsc2UgewpAQCAtNjI3LDcgKzYyNyw3IEBACiAJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfVFhfUE9XX0xFVkVMICkgPT0gMCApIHsKIAkJREJHX1RSQUNFKCBEYmdJbmZvLCAiJXMsIHZhbHVlOiAlc1xuIiwgUEFSTV9OQU1FX1RYX1BPV19MRVZFTCwgdmFsdWUgKTsKIAotCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJaWYgKCggdmFsdWVfY29udmVydCA+PSBQQVJNX01JTl9UWF9QT1dfTEVWRUwgKSB8fCAoIHZhbHVlX2NvbnZlcnQgPD0gUEFSTV9NQVhfVFhfUE9XX0xFVkVMICkpIHsKIAkJCWxwLT50eFBvd0xldmVsID0gdmFsdWVfY29udmVydDsKIAkJfSBlbHNlIHsKQEAgLTY0NSw3ICs2NDUsNyBAQAogCQlpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfUE9SVF9UWVBFICkgPT0gMCApIHsKIAkJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9QT1JUX1RZUEUsIHZhbHVlICk7CiAKLQkJCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJCWlmICgoIHZhbHVlX2NvbnZlcnQgPT0gUEFSTV9NSU5fUE9SVF9UWVBFICkgfHwgKCB2YWx1ZV9jb252ZXJ0ID09IFBBUk1fTUFYX1BPUlRfVFlQRSApKSB7CiAJCQkJbHAtPlBvcnRUeXBlID0gdmFsdWVfY29udmVydDsKIAkJCX0gZWxzZSB7CkBAIC02NTQsNyArNjU0LDcgQEAKIAkJfQogCQllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9QTV9FTkFCTEVEICkgPT0gMCApIHsKIAkJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9QTV9FTkFCTEVELCB2YWx1ZSApOwotCQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCS8qIDs/IGhvdyBhYm91dCB3bF9tYWluLmMgY29udGFpbmluZwogCSAqIFZBTElEX1BBUkFNKCBQQVJNX1BNX0VOQUJMRUQgPD0gV1ZMQU5fUE1fU1RBVEVfU1RBTkRBUkQgfHwKIAkgKgkJCQkJICggUEFSTV9QTV9FTkFCTEVEICYgMHg3RkZGICkgPD0gV1ZMQU5fUE1fU1RBVEVfU1RBTkRBUkQgKTsKQEAgLTY3Nyw3ICs2NzcsNyBAQAogCQllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9NQVhfU0xFRVAgKSA9PSAwICkgewogCQkJREJHX1RSQUNFKCBEYmdJbmZvLCAiJXMsIHZhbHVlOiAlc1xuIiwgUEFSTV9OQU1FX01BWF9TTEVFUCwgdmFsdWUgKTsKIAotCQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQkJaWYgKCggdmFsdWVfY29udmVydCA+PSAwICkgJiYgKCB2YWx1ZV9jb252ZXJ0IDw9IDY1NTM1ICkpIHsKIAkJCQlscC0+TWF4U2xlZXBEdXJhdGlvbiA9IHZhbHVlX2NvbnZlcnQ7CiAJCQl9IGVsc2UgewpAQCAtNjk2LDcgKzY5Niw3IEBACiAJCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX0FVVEhFTlRJQ0FUSU9OICkgPT0gMCApIHsKIAkJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9BVVRIRU5USUNBVElPTiwgdmFsdWUgKTsKIAotCQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQkJaWYgKCggdmFsdWVfY29udmVydCA+PSBQQVJNX01JTl9BVVRIRU5USUNBVElPTiApICYmICggdmFsdWVfY29udmVydCA8PSBQQVJNX01BWF9BVVRIRU5USUNBVElPTiApKSB7CiAJCQkJbHAtPmF1dGhlbnRpY2F0aW9uID0gdmFsdWVfY29udmVydDsKIAkJCX0gZWxzZSB7CkBAIC03MDYsNyArNzA2LDcgQEAKIAkJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfT1dOX0FUSU1fV0lORE9XICkgPT0gMCApIHsKIAkJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9PV05fQVRJTV9XSU5ET1csIHZhbHVlICk7CiAKLQkJCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fT1dOX0FUSU1fV0lORE9XICkgJiYgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX09XTl9BVElNX1dJTkRPVyApKSB7CiAJCQkJbHAtPmF0aW1XaW5kb3cgPSB2YWx1ZV9jb252ZXJ0OwogCQkJfSBlbHNlIHsKQEAgLTcxNiw3ICs3MTYsNyBAQAogCQllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9QTV9IT0xET1ZFUl9EVVJBVElPTiApID09IDAgKSB7CiAJCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfUE1fSE9MRE9WRVJfRFVSQVRJT04sIHZhbHVlICk7CiAKLQkJCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fUE1fSE9MRE9WRVJfRFVSQVRJT04gKSAmJiAoIHZhbHVlX2NvbnZlcnQgPD0gUEFSTV9NQVhfUE1fSE9MRE9WRVJfRFVSQVRJT04gKSkgewogCQkJCWxwLT5ob2xkb3ZlckR1cmF0aW9uID0gdmFsdWVfY29udmVydDsKIAkJCX0gZWxzZSB7CkBAIC03MzAsNyArNzMwLDcgQEAKIAkJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfQ09OTkVDVElPTl9DT05UUk9MICkgPT0gMCApIHsKIAkJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9DT05ORUNUSU9OX0NPTlRST0wsIHZhbHVlICk7CiAKLQkJCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fQ09OTkVDVElPTl9DT05UUk9MICkgJiYgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX0NPTk5FQ1RJT05fQ09OVFJPTCApKSB7CiAJCQkJbHAtPmNvbm5lY3Rpb25Db250cm9sID0gdmFsdWVfY29udmVydDsKIAkJCX0gZWxzZSB7CkBAIC03NDksNyArNzQ5LDcgQEAKIAkJaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX09XTl9EVElNX1BFUklPRCApID09IDAgKSB7CiAJCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfT1dOX0RUSU1fUEVSSU9ELCB2YWx1ZSApOwogCi0JCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCQlpZiAoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fT1dOX0RUSU1fUEVSSU9EICkgewogCQkJCWxwLT5EVElNUGVyaW9kID0gdmFsdWVfY29udmVydDsKIAkJCX0gZWxzZSB7CkBAIC03NzUsNyArNzc1LDcgQEAKIAkJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfT1dOX0JFQUNPTl9JTlRFUlZBTCApID09IDAgKSB7CiAJCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfT1dOX0JFQUNPTl9JTlRFUlZBTCwgdmFsdWUgKTsKIAotCQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQkJaWYgKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX09XTl9CRUFDT05fSU5URVJWQUwgKSB7CiAJCQkJbHAtPm93bkJlYWNvbkludGVydmFsID0gdmFsdWVfY29udmVydDsKIAkJCX0gZWxzZSB7CkBAIC03ODUsNyArNzg1LDcgQEAKIAkJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfQ09FWElTVEVOQ0UgKSA9PSAwICkgewogCQkJREJHX1RSQUNFKCBEYmdJbmZvLCAiJXMsIHZhbHVlOiAlc1xuIiwgUEFSTV9OQU1FX0NPRVhJU1RFTkNFLCB2YWx1ZSApOwogCi0JCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCQlpZiAoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fQ09FWElTVEVOQ0UgKSB7CiAJCQkJbHAtPmNvZXhpc3RlbmNlID0gdmFsdWVfY29udmVydDsKIAkJCX0gZWxzZSB7CkBAIC03OTcsNyArNzk3LDcgQEAKIAkJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfUlRTX1RIUkVTSE9MRDEgKSA9PSAwICkgewogCQkJREJHX1RSQUNFKCBEYmdJbmZvLCAiJXMsIHZhbHVlOiAlc1xuIiwgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQxLCB2YWx1ZSApOwogCi0JCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX1JUU19USFJFU0hPTEQgKSAmJiAoIHZhbHVlX2NvbnZlcnQgPD0gUEFSTV9NQVhfUlRTX1RIUkVTSE9MRCApKSB7CiAJCQkJbHAtPndkc19wb3J0WzBdLnJ0c1RocmVzaG9sZCA9IHZhbHVlX2NvbnZlcnQ7CiAJCQl9IGVsc2UgewpAQCAtODA3LDcgKzgwNyw3IEBACiAJCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQyICkgPT0gMCApIHsKIAkJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9SVFNfVEhSRVNIT0xEMiwgdmFsdWUgKTsKIAotCQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQkJaWYgKCggdmFsdWVfY29udmVydCA+PSBQQVJNX01JTl9SVFNfVEhSRVNIT0xEICkgJiYgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX1JUU19USFJFU0hPTEQgKSkgewogCQkJCWxwLT53ZHNfcG9ydFsxXS5ydHNUaHJlc2hvbGQgPSB2YWx1ZV9jb252ZXJ0OwogCQkJfSBlbHNlIHsKQEAgLTgxNyw3ICs4MTcsNyBAQAogCQllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9SVFNfVEhSRVNIT0xEMyApID09IDAgKSB7CiAJCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfUlRTX1RIUkVTSE9MRDMsIHZhbHVlICk7CiAKLQkJCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fUlRTX1RIUkVTSE9MRCApICYmICggdmFsdWVfY29udmVydCA8PSBQQVJNX01BWF9SVFNfVEhSRVNIT0xEICkpIHsKIAkJCQlscC0+d2RzX3BvcnRbMl0ucnRzVGhyZXNob2xkID0gdmFsdWVfY29udmVydDsKIAkJCX0gZWxzZSB7CkBAIC04MjcsNyArODI3LDcgQEAKIAkJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfUlRTX1RIUkVTSE9MRDQgKSA9PSAwICkgewogCQkJREJHX1RSQUNFKCBEYmdJbmZvLCAiJXMsIHZhbHVlOiAlc1xuIiwgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQ0LCB2YWx1ZSApOwogCi0JCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX1JUU19USFJFU0hPTEQgKSAmJiAoIHZhbHVlX2NvbnZlcnQgPD0gUEFSTV9NQVhfUlRTX1RIUkVTSE9MRCApKSB7CiAJCQkJbHAtPndkc19wb3J0WzNdLnJ0c1RocmVzaG9sZCA9IHZhbHVlX2NvbnZlcnQ7CiAJCQl9IGVsc2UgewpAQCAtODM3LDcgKzgzNyw3IEBACiAJCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX1JUU19USFJFU0hPTEQ1ICkgPT0gMCApIHsKIAkJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9SVFNfVEhSRVNIT0xENSwgdmFsdWUgKTsKIAotCQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQkJaWYgKCggdmFsdWVfY29udmVydCA+PSBQQVJNX01JTl9SVFNfVEhSRVNIT0xEICkgJiYgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX1JUU19USFJFU0hPTEQgKSkgewogCQkJCWxwLT53ZHNfcG9ydFs0XS5ydHNUaHJlc2hvbGQgPSB2YWx1ZV9jb252ZXJ0OwogCQkJfSBlbHNlIHsKQEAgLTg0Nyw3ICs4NDcsNyBAQAogCQllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9SVFNfVEhSRVNIT0xENiApID09IDAgKSB7CiAJCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfUlRTX1RIUkVTSE9MRDYsIHZhbHVlICk7CiAKLQkJCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fUlRTX1RIUkVTSE9MRCApICYmICggdmFsdWVfY29udmVydCA8PSBQQVJNX01BWF9SVFNfVEhSRVNIT0xEICkpIHsKIAkJCQlscC0+d2RzX3BvcnRbNV0ucnRzVGhyZXNob2xkID0gdmFsdWVfY29udmVydDsKIAkJCX0gZWxzZSB7CkBAIC04NTcsNyArODU3LDcgQEAKIAkJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfVFhfUkFURTEgKSA9PSAwICkgewogCQkJREJHX1RSQUNFKCBEYmdJbmZvLCAiJXMsIHZhbHVlOiAlc1xuIiwgUEFSTV9OQU1FX1RYX1JBVEUxLCB2YWx1ZSApOwogCi0JCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX1RYX1JBVEUgKSAmJiAoIHZhbHVlX2NvbnZlcnQgPD0gUEFSTV9NQVhfVFhfUkFURSApKSB7CiAJCQkJbHAtPndkc19wb3J0WzBdLnR4UmF0ZUNudGwgPSB2YWx1ZV9jb252ZXJ0OwogCQkJfSBlbHNlIHsKQEAgLTg2Nyw3ICs4NjcsNyBAQAogCQllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9UWF9SQVRFMiApID09IDAgKSB7CiAJCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfVFhfUkFURTIsIHZhbHVlICk7CiAKLQkJCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fVFhfUkFURSApICYmICggdmFsdWVfY29udmVydCA8PSBQQVJNX01BWF9UWF9SQVRFICkpIHsKIAkJCQlscC0+d2RzX3BvcnRbMV0udHhSYXRlQ250bCA9IHZhbHVlX2NvbnZlcnQ7CiAJCQl9IGVsc2UgewpAQCAtODc3LDcgKzg3Nyw3IEBACiAJCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX1RYX1JBVEUzICkgPT0gMCApIHsKIAkJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9UWF9SQVRFMywgdmFsdWUgKTsKIAotCQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQkJaWYgKCggdmFsdWVfY29udmVydCA+PSBQQVJNX01JTl9UWF9SQVRFICkgJiYgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX1RYX1JBVEUgKSkgewogCQkJCWxwLT53ZHNfcG9ydFsyXS50eFJhdGVDbnRsID0gdmFsdWVfY29udmVydDsKIAkJCX0gZWxzZSB7CkBAIC04ODcsNyArODg3LDcgQEAKIAkJZWxzZSBpZiAoIHN0cmNtcCgga2V5LCBQQVJNX05BTUVfVFhfUkFURTQgKSA9PSAwICkgewogCQkJREJHX1RSQUNFKCBEYmdJbmZvLCAiJXMsIHZhbHVlOiAlc1xuIiwgUEFSTV9OQU1FX1RYX1JBVEU0LCB2YWx1ZSApOwogCi0JCQl2YWx1ZV9jb252ZXJ0ID0gd2xfYXRvaSggdmFsdWUgKTsKKwkJCXZhbHVlX2NvbnZlcnQgPSBzaW1wbGVfc3RydG91bCh2YWx1ZSwgTlVMTCwgMCk7CiAJCQlpZiAoKCB2YWx1ZV9jb252ZXJ0ID49IFBBUk1fTUlOX1RYX1JBVEUgKSAmJiAoIHZhbHVlX2NvbnZlcnQgPD0gUEFSTV9NQVhfVFhfUkFURSApKSB7CiAJCQkJbHAtPndkc19wb3J0WzNdLnR4UmF0ZUNudGwgPSB2YWx1ZV9jb252ZXJ0OwogCQkJfSBlbHNlIHsKQEAgLTg5Nyw3ICs4OTcsNyBAQAogCQllbHNlIGlmICggc3RyY21wKCBrZXksIFBBUk1fTkFNRV9UWF9SQVRFNSApID09IDAgKSB7CiAJCQlEQkdfVFJBQ0UoIERiZ0luZm8sICIlcywgdmFsdWU6ICVzXG4iLCBQQVJNX05BTUVfVFhfUkFURTUsIHZhbHVlICk7CiAKLQkJCXZhbHVlX2NvbnZlcnQgPSB3bF9hdG9pKCB2YWx1ZSApOworCQkJdmFsdWVfY29udmVydCA9IHNpbXBsZV9zdHJ0b3VsKHZhbHVlLCBOVUxMLCAwKTsKIAkJCWlmICgoIHZhbHVlX2NvbnZlcnQgPj0gUEFSTV9NSU5fVFhfUkFURSApICYmICggdmFsdWVfY29udmVydCA8PSBQQVJNX01BWF9UWF9SQVRFICkpIHsKIAkJCQlscC0+d2RzX3BvcnRbNF0udHhSYXRlQ250bCA9IHZhbHVlX2NvbnZlcnQ7CiAJCQl9IGVsc2UgewpAQCAtOTA3LDcgKzkwNyw3IEBACiAJCWVsc2UgaWYgKCBzdHJjbXAoIGtleSwgUEFSTV9OQU1FX1RYX1JBVEU2ICkgPT0gMCApIHsKIAkJCURCR19UUkFDRSggRGJnSW5mbywgIiVzLCB2YWx1ZTogJXNcbiIsIFBBUk1fTkFNRV9UWF9SQVRFNiwgdmFsdWUgKTsKIAotCQkJdmFsdWVfY29udmVydCA9IHdsX2F0b2koIHZhbHVlICk7CisJCQl2YWx1ZV9jb252ZXJ0ID0gc2ltcGxlX3N0cnRvdWwodmFsdWUsIE5VTEwsIDApOwogCQkJaWYgKCggdmFsdWVfY29udmVydCA+PSBQQVJNX01JTl9UWF9SQVRFICkgJiYgKCB2YWx1ZV9jb252ZXJ0IDw9IFBBUk1fTUFYX1RYX1JBVEUgKSkgewogCQkJCWxwLT53ZHNfcG9ydFs1XS50eFJhdGVDbnRsID0gdmFsdWVfY29udmVydDsKIAkJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF91dGlsLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF91dGlsLmMKaW5kZXggYWMxZTdmMy4uYmJkYjk5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfdXRpbC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3V0aWwuYwpAQCAtMTUzNiw1MiArMTUzNiwzIEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCXdsX2F0b2koKQotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgREVTQ1JJUFRJT046Ci0gKgotICogICAgICBCZWxpZXZlIGl0IG9yIG5vdCwgd2UgbmVlZCBvdXIgb3duIGltcGxlbWVudGF0aW9uIG9mIGF0b2kgaW4gdGhlIGtlcm5lbC4KLSAqCi0gKiAgUEFSQU1FVEVSUzoKLSAqCi0gKiAgICAgIHN0cmluZyAgLSB0aGUgQVNDSUkgc3RyaW5nIHRvIGNvbnZlcnQgdG8gYW4gaW50ZWdlcgotICoKLSAqICBSRVRVUk5TOgotICoKLSAqICAgICAgdW5zaWduZWQgaW50ZWdlcgotICoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi11bnNpZ25lZCBpbnQgd2xfYXRvaSggY2hhciAqc3RyaW5nICkKLXsKLXVuc2lnbmVkIGludCBiYXNlID0gMTA7CQkJCS8vZGVmYXVsdCB0byBkZWNpbWFsCi11bnNpZ25lZCBpbnQgdmFsdWUgPSAwOwotdW5zaWduZWQgaW50IGM7Ci1pbnQgaSA9IHN0cmxlbiggc3RyaW5nICk7Ci0KLQlpZiAoIGkgPiAyICYmIHN0cmluZ1swXSA9PSAnMCcgJiYgKCBzdHJpbmdbMV0gfCAoJ1gnXid4JykgKSA9PSAneCcgKSB7Ci0JCWJhc2UgPSAxNjsKLQkJc3RyaW5nICs9MjsKLQl9Ci0Jd2hpbGUgKCAoIGMgPSAqc3RyaW5nKysgKSAhPSAnXDAnICkgewotCQlpZiAoIHZhbHVlID4gVUlOVF9NQVggLyBiYXNlICkgewkvL3Rlc3QgZm9yIG92ZXJydW4KLQkJCURCR19GVU5DKCAid2xfYXRvaSIgKTsJLy9kb24ndCBvdmVybG9hZCB0aGUgbG9nIGZpbGUgd2l0aCBnb29kIG1lc3NhZ2VzCi0JCQlEQkdfRU5URVIoIERiZ0luZm8gKTsKLQkJCURCR19FUlJPUiggRGJnSW5mbywgInN0cmluZyBcIiVzXCIsIGxlbmdodCBleGNlZWRzIGV4cGVjdGF0aW9uc1xuIiwgc3RyaW5nICk7Ci0JCQlwcmludGsoICI8MT5zdHJpbmcgXCIlc1wiLCBsZW5naHQgZXhjZWVkcyBleHBlY3RhdGlvbnNcbiIsIHN0cmluZyApOwotCQkJREJHX0xFQVZFKCBEYmdJbmZvICk7Ci0JCQlicmVhazsKLQkJfQotCQljIC09ICcwJzsKLQkJaWYgKCAwIDw9IGMgJiYgYyA8PSA5ICkgdmFsdWUgPSBiYXNlICogdmFsdWUgKyBjOwotCQllbHNlIGlmICggYmFzZSA9PSAxNiApIHsKLQkJCWMgKz0gJzAnOwotCQkJYyB8PSAnQSdeJ2EnOwotCQkJYyA9IGMgLSAnYScrIDEwOwotCQkJaWYgKCAxMCA8PSBjICYmIGMgPD0gMTUgKSB2YWx1ZSA9IGJhc2UgKiB2YWx1ZSArIGM7Ci0JCX0KLQl9Ci0JcmV0dXJuIHZhbHVlOwotfSAvLyB3bF9hdG9pCi0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3V0aWwuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFnczQ5X2gyL3dsX3V0aWwuaAppbmRleCAxNmNkNmM1Li41NjFlODViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhZ3M0OV9oMi93bF91dGlsLmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYWdzNDlfaDIvd2xfdXRpbC5oCkBAIC0xMDAsNiArMTAwLDQgQEAKIHZvaWQgd2xfcHJvY2Vzc19hc3NvY19zdGF0dXMoIHN0cnVjdCB3bF9wcml2YXRlICpscCApOwogdm9pZCB3bF9wcm9jZXNzX3NlY3VyaXR5X3N0YXR1cyggc3RydWN0IHdsX3ByaXZhdGUgKmxwICk7CiAKLXVuc2lnbmVkIGludCB3bF9hdG9pKCBjaGFyICpzdHJpbmcgKTsKLQogI2VuZGlmICAvLyBfX1dMX1VUSUxfSF9fCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvS2NvbmZpZwppbmRleCBmNDQyOTRiLi44MmZjYzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL0tjb25maWcKQEAgLTEsNiArMSw4IEBACiBjb25maWcgUFJJU00yX1VTQgogCXRyaXN0YXRlICJQcmlzbTIuNS8zIFVTQiBkcml2ZXIiCi0JZGVwZW5kcyBvbiBXTEFOICYmIFVTQiAmJiBXSVJFTEVTU19FWFQKKwlkZXBlbmRzIG9uIFdMQU4gJiYgVVNCCisJc2VsZWN0IFdJUkVMRVNTX0VYVAorCXNlbGVjdCBXRVhUX1BSSVYKIAlkZWZhdWx0IG4KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIHRoZSB3bGFuLW5nIHByaXNtIDIuNS8zIFVTQiBkcml2ZXIgZm9yIGEgd2lkZSByYW5nZSBvZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eC5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eC5oCmluZGV4IDQ2Y2NlODEuLjFmYTQyZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHguaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4LmgKQEAgLTYxLDE3ICs2MSwxNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAKIC8qLS0tIE1pbnMgJiBNYXhzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLSNkZWZpbmUJCUhGQTM4NHhfUE9SVElEX01BWAkJKCh1MTYpNykKLSNkZWZpbmUJCUhGQTM4NHhfTlVNUE9SVFNfTUFYCQkoKHUxNikoSEZBMzg0eF9QT1JUSURfTUFYKzEpKQotI2RlZmluZQkJSEZBMzg0eF9QRFJfTEVOX01BWAkJKCh1MTYpNTEyKQkvKiBpbiBieXRlcywgZnJvbSBFSyAqLwotI2RlZmluZQkJSEZBMzg0eF9QREFfUkVDU19NQVgJCSgodTE2KTIwMCkJLyogYSBndWVzcyAqLwotI2RlZmluZQkJSEZBMzg0eF9QREFfTEVOX01BWAkJKCh1MTYpMTAyNCkJLyogaW4gYnl0ZXMsIGZyb20gRUsgKi8KLSNkZWZpbmUJCUhGQTM4NHhfU0NBTlJFU1VMVF9NQVgJCSgodTE2KTMxKQotI2RlZmluZQkJSEZBMzg0eF9IU0NBTlJFU1VMVF9NQVgJCSgodTE2KTMxKQotI2RlZmluZQkJSEZBMzg0eF9DSElORk9SRVNVTFRfTUFYCSgodTE2KTE2KQotI2RlZmluZQkJSEZBMzg0eF9SSURfR1VFU1NJTkdfTUFYTEVOCTIwNDgJLyogSSdtIG5vdCByZWFsbHkgc3VyZSAqLwotI2RlZmluZQkJSEZBMzg0eF9SSUREQVRBX01BWExFTgkJSEZBMzg0eF9SSURfR1VFU1NJTkdfTUFYTEVOCi0jZGVmaW5lCQlIRkEzODR4X1VTQl9SV01FTV9NQVhMRU4JMjA0OAorI2RlZmluZQlIRkEzODR4X1BPUlRJRF9NQVgJCSgodTE2KTcpCisjZGVmaW5lCUhGQTM4NHhfTlVNUE9SVFNfTUFYCQkoKHUxNikoSEZBMzg0eF9QT1JUSURfTUFYKzEpKQorI2RlZmluZQlIRkEzODR4X1BEUl9MRU5fTUFYCQkoKHUxNik1MTIpIC8qIGluIGJ5dGVzLCBmcm9tIEVLICovCisjZGVmaW5lCUhGQTM4NHhfUERBX1JFQ1NfTUFYCQkoKHUxNikyMDApIC8qIGEgZ3Vlc3MgKi8KKyNkZWZpbmUJSEZBMzg0eF9QREFfTEVOX01BWAkJKCh1MTYpMTAyNCkgLyogaW4gYnl0ZXMsIGZyb20gRUsqLworI2RlZmluZQlIRkEzODR4X1NDQU5SRVNVTFRfTUFYCQkoKHUxNikzMSkKKyNkZWZpbmUJSEZBMzg0eF9IU0NBTlJFU1VMVF9NQVgJCSgodTE2KTMxKQorI2RlZmluZQlIRkEzODR4X0NISU5GT1JFU1VMVF9NQVgJKCh1MTYpMTYpCisjZGVmaW5lCUhGQTM4NHhfUklEX0dVRVNTSU5HX01BWExFTgkyMDQ4CS8qIEknbSBub3QgcmVhbGx5IHN1cmUgKi8KKyNkZWZpbmUJSEZBMzg0eF9SSUREQVRBX01BWExFTgkJSEZBMzg0eF9SSURfR1VFU1NJTkdfTUFYTEVOCisjZGVmaW5lCUhGQTM4NHhfVVNCX1JXTUVNX01BWExFTgkyMDQ4CiAKIC8qLS0tIFN1cHBvcnQgQ29uc3RhbnRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICNkZWZpbmUJCUhGQTM4NHhfUE9SVFRZUEVfSUJTUwkJCSgodTE2KTApCkBAIC0xMTUsOCArMTE1LDggQEAKIAogLyogTWFrZSBhIDMyLWJpdCBmbGF0IGFkZHJlc3MgZnJvbSBBVVggZm9ybWF0IDE2LWJpdCBwYWdlIGFuZCBvZmZzZXQgKi8KICNkZWZpbmUJCUhGQTM4NHhfQUREUl9BVVhfTUtGTEFUKHAsIG8pCVwKLQkJKCgodTMyKSgoKHUxNikocCkpJkhGQTM4NHhfQUREUl9BVVhfUEFHRV9NQVNLKSkgPDwgNykgfCBcCi0JCSgodTMyKSgoKHUxNikobykpJkhGQTM4NHhfQUREUl9BVVhfT0ZGX01BU0spKQorCQkoKCgodTMyKSgoKHUxNikocCkpJkhGQTM4NHhfQUREUl9BVVhfUEFHRV9NQVNLKSkgPDwgNykgfCBcCisJCSgodTMyKSgoKHUxNikobykpJkhGQTM4NHhfQUREUl9BVVhfT0ZGX01BU0spKSkKIAogLyogTWFrZSBDTUQgZm9ybWF0IG9mZnNldCBhbmQgcGFnZSBmcm9tIGEgMzItYml0IGZsYXQgYWRkcmVzcyAqLwogI2RlZmluZQkJSEZBMzg0eF9BRERSX0NNRF9NS1BBR0UoZikgXApAQCAtMTM1LDEyICsxMzUsMjEgQEAKICNkZWZpbmUJCUhGQTM4NHhfRExTVEFURV9GTEFTSEVOQUJMRUQJCTIKIAogLyotLS0gUmVnaXN0ZXIgRmllbGQgTWFza3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotI2RlZmluZQkJSEZBMzg0eF9DTURfQUlORk8JCSgodTE2KShCSVQoMTQpIHwgQklUKDEzKSB8IEJJVCgxMikgfCBCSVQoMTEpIHwgQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSkpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9NQUNQT1JUCQkoKHUxNikoQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSkpCisjZGVmaW5lCQlIRkEzODR4X0NNRF9BSU5GTwkJKCh1MTYpKEJJVCgxNCkgfCBCSVQoMTMpIFwKKwkJCQkJCQl8IEJJVCgxMikgfCBCSVQoMTEpIFwKKwkJCQkJCQl8IEJJVCgxMCkgfCBCSVQoOSkgXAorCQkJCQkJCXwgQklUKDgpKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX01BQ1BPUlQJCSgodTE2KShCSVQoMTApIHwgQklUKDkpIHwgXAorCQkJCQkJCUJJVCg4KSkpCiAjZGVmaW5lCQlIRkEzODR4X0NNRF9QUk9HTU9ERQkJKCh1MTYpKEJJVCg5KSB8IEJJVCg4KSkpCi0jZGVmaW5lCQlIRkEzODR4X0NNRF9DTURDT0RFCQkoKHUxNikoQklUKDUpIHwgQklUKDQpIHwgQklUKDMpIHwgQklUKDIpIHwgQklUKDEpIHwgQklUKDApKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX0NNRENPREUJCSgodTE2KShCSVQoNSkgfCBCSVQoNCkgfCBcCisJCQkJCQkJQklUKDMpIHwgQklUKDIpIHwgXAorCQkJCQkJCUJJVCgxKSB8IEJJVCgwKSkpCiAKLSNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX1JFU1VMVAkJKCh1MTYpKEJJVCgxNCkgfCBCSVQoMTMpIHwgQklUKDEyKSB8IEJJVCgxMSkgfCBCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKSkKKyNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX1JFU1VMVAkJKCh1MTYpKEJJVCgxNCkgfCBCSVQoMTMpIFwKKwkJCQkJCQl8IEJJVCgxMikgfCBCSVQoMTEpIFwKKwkJCQkJCQl8IEJJVCgxMCkgfCBCSVQoOSkgXAorCQkJCQkJCXwgQklUKDgpKSkKIAogLyotLS0gQ29tbWFuZCBDb2RlIENvbnN0YW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKi0tLSBDb250cm9sbGVyIENvbW1hbmRzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTI0NCw4ICsyNTMsMTAgQEAKICAgVGhpcyBpcyB0aGUgbGVuZ3RoIG9mIEpVU1QgdGhlIERBVEEgcGFydCBvZiB0aGUgUklEIChkb2VzIG5vdAogICBpbmNsdWRlIHRoZSBsZW4gb3IgY29kZSBmaWVsZHMpCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9EQk1DT01NU1FVQUxJVFlfTEVOCQkoKHUxNilzaXplb2YoaGZhMzg0eF9kYm1jb21tc3F1YWxpdHlfdCkpCi0jZGVmaW5lCQlIRkEzODR4X1JJRF9KT0lOUkVRVUVTVF9MRU4JCSgodTE2KXNpemVvZihoZmEzODR4X0pvaW5SZXF1ZXN0X2RhdGFfdCkpCisjZGVmaW5lCQlIRkEzODR4X1JJRF9EQk1DT01NU1FVQUxJVFlfTEVOCSBcCisJKCh1MTYpIHNpemVvZihoZmEzODR4X2RibWNvbW1zcXVhbGl0eV90KSkKKyNkZWZpbmUJCUhGQTM4NHhfUklEX0pPSU5SRVFVRVNUX0xFTiBcCisJKCh1MTYpc2l6ZW9mKGhmYTM4NHhfSm9pblJlcXVlc3RfZGF0YV90KSkKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogSW5mb3JtYXRpb24gUklEczogIE1vZGVtIEluZm9ybWF0aW9uCkBAIC0zMjIsOSArMzMzLDExIEBACiAKIC8qLS0tIFJlZ2lzdGVyIFRlc3QvR2V0L1NldCBGaWVsZCBtYWNyb3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2RlZmluZQkJSEZBMzg0eF9DTURfQUlORk9fU0VUKHZhbHVlKQkJKCh1MTYpKCh1MTYpKHZhbHVlKSA8PCA4KSkKLSNkZWZpbmUJCUhGQTM4NHhfQ01EX01BQ1BPUlRfU0VUKHZhbHVlKQkJKCh1MTYpSEZBMzg0eF9DTURfQUlORk9fU0VUKHZhbHVlKSkKLSNkZWZpbmUJCUhGQTM4NHhfQ01EX1BST0dNT0RFX1NFVCh2YWx1ZSkJCSgodTE2KUhGQTM4NHhfQ01EX0FJTkZPX1NFVCgodTE2KXZhbHVlKSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX0FJTkZPX1NFVCh2YWx1ZSkJKCh1MTYpKCh1MTYpKHZhbHVlKSA8PCA4KSkKKyNkZWZpbmUJCUhGQTM4NHhfQ01EX01BQ1BPUlRfU0VUKHZhbHVlKQlcCisJCQkoKHUxNilIRkEzODR4X0NNRF9BSU5GT19TRVQodmFsdWUpKQorI2RlZmluZQkJSEZBMzg0eF9DTURfUFJPR01PREVfU0VUKHZhbHVlKQlcCisJCQkoKHUxNilIRkEzODR4X0NNRF9BSU5GT19TRVQoKHUxNil2YWx1ZSkpCiAjZGVmaW5lCQlIRkEzODR4X0NNRF9DTURDT0RFX1NFVCh2YWx1ZSkJCSgodTE2KSh2YWx1ZSkpCiAKICNkZWZpbmUJCUhGQTM4NHhfU1RBVFVTX1JFU1VMVF9TRVQodmFsdWUpCSgoKHUxNikodmFsdWUpKSA8PCA4KQpAQCAtNDAyLDcgKzQxNSw3IEBACiAvKi0tIENvbmZpZ3VyYXRpb24gUmVjb3JkOiBXUEFEYXRhICAgICAgIChkYXRhIHBvcnRpb24gb25seSkgLS0qLwogdHlwZWRlZiBzdHJ1Y3QgaGZhMzg0eF9XUEFEYXRhIHsKIAl1MTYgZGF0YWxlbjsKLQl1OCBkYXRhWzBdOwkJLy8gbWF4IDgwCisJdTggZGF0YVswXTsJCS8qIG1heCA4MCAqLwogfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaGZhMzg0eF9XUEFEYXRhX3Q7CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ3OSw3ICs0OTIsOCBAQAogI2RlZmluZQkJSEZBMzg0eF9UWFNUQVRVU19BR0VERVJSCQkoKHUxNilCSVQoMSkpCiAjZGVmaW5lCQlIRkEzODR4X1RYU1RBVFVTX1JFVFJZRVJSCQkoKHUxNilCSVQoMCkpCiAvKi0tIFRyYW5zbWl0IENvbnRyb2wgRmllbGQgLS0qLwotI2RlZmluZQkJSEZBMzg0eF9UWF9NQUNQT1JUCQkJKCh1MTYpKEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpKQorI2RlZmluZQkJSEZBMzg0eF9UWF9NQUNQT1JUCQkJKCh1MTYpKEJJVCgxMCkgfCBcCisJCQkJCQkJICBCSVQoOSkgfCBCSVQoOCkpKQogI2RlZmluZQkJSEZBMzg0eF9UWF9TVFJVQ1RZUEUJCQkoKHUxNikoQklUKDQpIHwgQklUKDMpKSkKICNkZWZpbmUJCUhGQTM4NHhfVFhfVFhFWAkJCQkoKHUxNilCSVQoMikpCiAjZGVmaW5lCQlIRkEzODR4X1RYX1RYT0sJCQkJKCh1MTYpQklUKDEpKQpAQCAtNDk2LDcgKzUxMCw4IEBACiAjZGVmaW5lCUhGQTM4NHhfVFhfU0VUKHYsIG0sIHMpCQkoKCgodTE2KSh2KSk8PCgodTE2KShzKSkpJigodTE2KShtKSkpCiAKICNkZWZpbmUJSEZBMzg0eF9UWF9NQUNQT1JUX1NFVCh2KQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX01BQ1BPUlQsIDgpCi0jZGVmaW5lCUhGQTM4NHhfVFhfU1RSVUNUWVBFX1NFVCh2KQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX1NUUlVDVFlQRSwgMykKKyNkZWZpbmUJSEZBMzg0eF9UWF9TVFJVQ1RZUEVfU0VUKHYpCUhGQTM4NHhfVFhfU0VUKHYsIFwKKwkJCQkJCUhGQTM4NHhfVFhfU1RSVUNUWVBFLCAzKQogI2RlZmluZQlIRkEzODR4X1RYX1RYRVhfU0VUKHYpCQlIRkEzODR4X1RYX1NFVCh2LCBIRkEzODR4X1RYX1RYRVgsIDIpCiAjZGVmaW5lCUhGQTM4NHhfVFhfVFhPS19TRVQodikJCUhGQTM4NHhfVFhfU0VUKHYsIEhGQTM4NHhfVFhfVFhPSywgMSkKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTUzNCwxMyArNTQ5LDE3IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qLS0gU3RhdHVzIEZpZWxkcyAtLSovCi0jZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlQJCSgodTE2KShCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKSkKKyNkZWZpbmUJCUhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVAkJKCh1MTYpKEJJVCgxMCkgfCBcCisJCQkJCQkJCUJJVCg5KSB8IFwKKwkJCQkJCQkJQklUKDgpKSkKICNkZWZpbmUJCUhGQTM4NHhfUlhTVEFUVVNfRkNTRVJSCQkJKCh1MTYpQklUKDApKQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQ29tbXVuaWNhdGlvbiBGcmFtZXM6IFRlc3QvR2V0L1NldCBGaWVsZCBWYWx1ZXMgZm9yIFJlY2VpdmUgRnJhbWVzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0jZGVmaW5lCQlIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlRfR0VUKHZhbHVlKQkoKHUxNikoKCgodTE2KSh2YWx1ZSkpICYgSEZBMzg0eF9SWFNUQVRVU19NQUNQT1JUKSA+PiA4KSkKLSNkZWZpbmUJCUhGQTM4NHhfUlhTVEFUVVNfSVNGQ1NFUlIodmFsdWUpCSgodTE2KSgoKHUxNikodmFsdWUpKSAmIEhGQTM4NHhfUlhTVEFUVVNfRkNTRVJSKSkKKyNkZWZpbmUJCUhGQTM4NHhfUlhTVEFUVVNfTUFDUE9SVF9HRVQodmFsdWUpCSgodTE2KSgoKCh1MTYpKHZhbHVlKSkgXAorCQkJCQkgICAgJiBIRkEzODR4X1JYU1RBVFVTX01BQ1BPUlQpID4+IDgpKQorI2RlZmluZQkJSEZBMzg0eF9SWFNUQVRVU19JU0ZDU0VSUih2YWx1ZSkJKCh1MTYpKCgodTE2KSh2YWx1ZSkpIFwKKwkJCQkJCSAgJiBIRkEzODR4X1JYU1RBVFVTX0ZDU0VSUikpCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgRlJBTUUgU1RSVUNUVVJFUzogSW5mb3JtYXRpb24gVHlwZXMgYW5kIEluZm9ybWF0aW9uIEZyYW1lIFN0cnVjdHVyZXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTExMzMsNyArMTE1Miw3IEBACiAKIHR5cGVkZWYgdm9pZCAoKmN0bHhfY21kY2JfdCkgKHN0cnVjdCBoZmEzODR4ICosIGNvbnN0IHN0cnVjdCBoZmEzODR4X3VzYmN0bHggKik7CiAKLXR5cGVkZWYgdm9pZCAoKmN0bHhfdXNlcmNiX3QpIChzdHJ1Y3QgaGZhMzg0eCAqIGh3LAordHlwZWRlZiB2b2lkICgqY3RseF91c2VyY2JfdCkgKHN0cnVjdCBoZmEzODR4ICpodywKIAkJCSAgICAgICB2b2lkICpjdGx4cmVzdWx0LCB2b2lkICp1c2VyY2JfZGF0YSk7CiAKIHR5cGVkZWYgc3RydWN0IGhmYTM4NHhfdXNiY3RseCB7CkBAIC0xMTc0LDE0ICsxMTkzLDE0IEBACiB9IGhmYTM4NHhfbWV0YWNtZF90OwogCiAjZGVmaW5lCU1BWF9HUlBfQUREUgkJMzIKLSNkZWZpbmUgV0xBTl9DT01NRU5UX01BWAk4MAkvKiBNYXguIGxlbmd0aCBvZiB1c2VyIGNvbW1lbnQgc3RyaW5nLiAqLworI2RlZmluZSBXTEFOX0NPTU1FTlRfTUFYCTgwICAvKiBNYXguIGxlbmd0aCBvZiB1c2VyIGNvbW1lbnQgc3RyaW5nLiAqLwogCi0jZGVmaW5lIFdMQU5fQVVUSF9NQVggICAgICAgICAgIDYwCS8qIE1heC4gIyBvZiBhdXRoZW50aWNhdGVkIHN0YXRpb25zLiAqLwotI2RlZmluZSBXTEFOX0FDQ0VTU19NQVgJCTYwCS8qIE1heC4gIyBvZiBzdGF0aW9ucyBpbiBhbiBhY2Nlc3MgbGlzdC4gKi8KLSNkZWZpbmUgV0xBTl9BQ0NFU1NfTk9ORQkwCS8qIE5vIHN0YXRpb25zIG1heSBiZSBhdXRoZW50aWNhdGVkLiAqLwotI2RlZmluZSBXTEFOX0FDQ0VTU19BTEwJCTEJLyogQWxsIHN0YXRpb25zIG1heSBiZSBhdXRoZW50aWNhdGVkLiAqLwotI2RlZmluZSBXTEFOX0FDQ0VTU19BTExPVwkyCS8qIEF1dGhlbnRpY2F0ZSBvbmx5ICJhbGxvd2VkIiBzdGF0aW9ucy4gKi8KLSNkZWZpbmUgV0xBTl9BQ0NFU1NfREVOWQkzCS8qIERvIG5vdCBhdXRoZW50aWNhdGUgImRlbmllZCIgc3RhdGlvbnMuICovCisjZGVmaW5lIFdMQU5fQVVUSF9NQVggICAgICAgICAgIDYwICAvKiBNYXguICMgb2YgYXV0aGVudGljYXRlZCBzdGF0aW9ucy4gKi8KKyNkZWZpbmUgV0xBTl9BQ0NFU1NfTUFYCQk2MCAgLyogTWF4LiAjIG9mIHN0YXRpb25zIGluIGFuIGFjY2VzcyBsaXN0LiAqLworI2RlZmluZSBXTEFOX0FDQ0VTU19OT05FCTAgICAvKiBObyBzdGF0aW9ucyBtYXkgYmUgYXV0aGVudGljYXRlZC4gKi8KKyNkZWZpbmUgV0xBTl9BQ0NFU1NfQUxMCQkxICAgLyogQWxsIHN0YXRpb25zIG1heSBiZSBhdXRoZW50aWNhdGVkLiAqLworI2RlZmluZSBXTEFOX0FDQ0VTU19BTExPVwkyICAgLyogQXV0aGVudGljYXRlIG9ubHkgImFsbG93ZWQiIHN0YXRpb25zLiAqLworI2RlZmluZSBXTEFOX0FDQ0VTU19ERU5ZCTMgICAvKiBEbyBub3QgYXV0aGVudGljYXRlICJkZW5pZWQiIHN0YXRpb25zLiAqLwogCiAvKiBYWFggVGhlc2UgYXJlIGdvaW5nIGF3YXkgQVNBUCAqLwogdHlwZWRlZiBzdHJ1Y3QgcHJpc20yc3RhX2F1dGhsaXN0IHsKQEAgLTEyOTQsMTAgKzEzMTMsMjMgQEAKIAloZmEzODR4X2NhcGxldmVsX3QgY2FwX3N1cF9hcDsKIAogCS8qIEFjdG9yIGNvbXBhdGliaWxpdHkgcmFuZ2VzICovCi0JaGZhMzg0eF9jYXBsZXZlbF90IGNhcF9hY3RfcHJpX2NmaTsJLyogcHJpIGYvdyB0byBjb250cm9sbGVyIGludGVyZmFjZSAqLwotCWhmYTM4NHhfY2FwbGV2ZWxfdCBjYXBfYWN0X3N0YV9jZmk7CS8qIHN0YSBmL3cgdG8gY29udHJvbGxlciBpbnRlcmZhY2UgKi8KKwloZmEzODR4X2NhcGxldmVsX3QgY2FwX2FjdF9wcmlfY2ZpOwkvKgorCQkJCQkJICogcHJpIGYvdyB0byBjb250cm9sbGVyCisJCQkJCQkgKiBpbnRlcmZhY2UKKwkJCQkJCSAqLworCisJaGZhMzg0eF9jYXBsZXZlbF90IGNhcF9hY3Rfc3RhX2NmaTsJLyoKKwkJCQkJCSAqIHN0YSBmL3cgdG8gY29udHJvbGxlcgorCQkJCQkJICogaW50ZXJmYWNlCisJCQkJCQkgKi8KKwogCWhmYTM4NHhfY2FwbGV2ZWxfdCBjYXBfYWN0X3N0YV9tZmk7CS8qIHN0YSBmL3cgdG8gbW9kZW0gaW50ZXJmYWNlICovCi0JaGZhMzg0eF9jYXBsZXZlbF90IGNhcF9hY3RfYXBfY2ZpOwkvKiBhcCBmL3cgdG8gY29udHJvbGxlciBpbnRlcmZhY2UgKi8KKworCWhmYTM4NHhfY2FwbGV2ZWxfdCBjYXBfYWN0X2FwX2NmaTsJLyoKKwkJCQkJCSAqIGFwIGYvdyB0byBjb250cm9sbGVyCisJCQkJCQkgKiBpbnRlcmZhY2UKKwkJCQkJCSAqLworCiAJaGZhMzg0eF9jYXBsZXZlbF90IGNhcF9hY3RfYXBfbWZpOwkvKiBhcCBmL3cgdG8gbW9kZW0gaW50ZXJmYWNlICovCiAKIAl1MzIgcHN1c2VyY291bnQ7CS8qIFBvd2VyIHNhdmUgdXNlciBjb3VudC4gKi8KQEAgLTEzMjAsMjUgKzEzNTIsMjUgQEAKIAogfSBoZmEzODR4X3Q7CiAKLXZvaWQgaGZhMzg0eF9jcmVhdGUoaGZhMzg0eF90ICogaHcsIHN0cnVjdCB1c2JfZGV2aWNlICp1c2IpOwotdm9pZCBoZmEzODR4X2Rlc3Ryb3koaGZhMzg0eF90ICogaHcpOwordm9pZCBoZmEzODR4X2NyZWF0ZShoZmEzODR4X3QgKmh3LCBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiKTsKK3ZvaWQgaGZhMzg0eF9kZXN0cm95KGhmYTM4NHhfdCAqaHcpOwogCiBpbnQKLWhmYTM4NHhfY29yZXJlc2V0KGhmYTM4NHhfdCAqIGh3LCBpbnQgaG9sZHRpbWUsIGludCBzZXR0bGV0aW1lLCBpbnQgZ2VuZXNpcyk7Ci1pbnQgaGZhMzg0eF9kcnZyX2NvbW10YWxsaWVzKGhmYTM4NHhfdCAqIGh3KTsKLWludCBoZmEzODR4X2RydnJfZGlzYWJsZShoZmEzODR4X3QgKiBodywgdTE2IG1hY3BvcnQpOwotaW50IGhmYTM4NHhfZHJ2cl9lbmFibGUoaGZhMzg0eF90ICogaHcsIHUxNiBtYWNwb3J0KTsKLWludCBoZmEzODR4X2RydnJfZmxhc2hkbF9lbmFibGUoaGZhMzg0eF90ICogaHcpOwotaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX2Rpc2FibGUoaGZhMzg0eF90ICogaHcpOwotaW50IGhmYTM4NHhfZHJ2cl9mbGFzaGRsX3dyaXRlKGhmYTM4NHhfdCAqIGh3LCB1MzIgZGFkZHIsIHZvaWQgKmJ1ZiwgdTMyIGxlbik7Ci1pbnQgaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhoZmEzODR4X3QgKiBodywgdTE2IHJpZCwgdm9pZCAqYnVmLCB1MTYgbGVuKTsKLWludCBoZmEzODR4X2RydnJfcmFtZGxfZW5hYmxlKGhmYTM4NHhfdCAqIGh3LCB1MzIgZXhlYWRkcik7Ci1pbnQgaGZhMzg0eF9kcnZyX3JhbWRsX2Rpc2FibGUoaGZhMzg0eF90ICogaHcpOwotaW50IGhmYTM4NHhfZHJ2cl9yYW1kbF93cml0ZShoZmEzODR4X3QgKiBodywgdTMyIGRhZGRyLCB2b2lkICpidWYsIHUzMiBsZW4pOwotaW50IGhmYTM4NHhfZHJ2cl9yZWFkcGRhKGhmYTM4NHhfdCAqIGh3LCB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pOwotaW50IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaGZhMzg0eF90ICogaHcsIHUxNiByaWQsIHZvaWQgKmJ1ZiwgdTE2IGxlbik7CitoZmEzODR4X2NvcmVyZXNldChoZmEzODR4X3QgKmh3LCBpbnQgaG9sZHRpbWUsIGludCBzZXR0bGV0aW1lLCBpbnQgZ2VuZXNpcyk7CitpbnQgaGZhMzg0eF9kcnZyX2NvbW10YWxsaWVzKGhmYTM4NHhfdCAqaHcpOworaW50IGhmYTM4NHhfZHJ2cl9kaXNhYmxlKGhmYTM4NHhfdCAqaHcsIHUxNiBtYWNwb3J0KTsKK2ludCBoZmEzODR4X2RydnJfZW5hYmxlKGhmYTM4NHhfdCAqaHcsIHUxNiBtYWNwb3J0KTsKK2ludCBoZmEzODR4X2RydnJfZmxhc2hkbF9lbmFibGUoaGZhMzg0eF90ICpodyk7CitpbnQgaGZhMzg0eF9kcnZyX2ZsYXNoZGxfZGlzYWJsZShoZmEzODR4X3QgKmh3KTsKK2ludCBoZmEzODR4X2RydnJfZmxhc2hkbF93cml0ZShoZmEzODR4X3QgKmh3LCB1MzIgZGFkZHIsIHZvaWQgKmJ1ZiwgdTMyIGxlbik7CitpbnQgaGZhMzg0eF9kcnZyX2dldGNvbmZpZyhoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB2b2lkICpidWYsIHUxNiBsZW4pOworaW50IGhmYTM4NHhfZHJ2cl9yYW1kbF9lbmFibGUoaGZhMzg0eF90ICpodywgdTMyIGV4ZWFkZHIpOworaW50IGhmYTM4NHhfZHJ2cl9yYW1kbF9kaXNhYmxlKGhmYTM4NHhfdCAqaHcpOworaW50IGhmYTM4NHhfZHJ2cl9yYW1kbF93cml0ZShoZmEzODR4X3QgKmh3LCB1MzIgZGFkZHIsIHZvaWQgKmJ1ZiwgdTMyIGxlbik7CitpbnQgaGZhMzg0eF9kcnZyX3JlYWRwZGEoaGZhMzg0eF90ICpodywgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKTsKK2ludCBoZmEzODR4X2RydnJfc2V0Y29uZmlnKGhmYTM4NHhfdCAqaHcsIHUxNiByaWQsIHZvaWQgKmJ1ZiwgdTE2IGxlbik7CiAKLXN0YXRpYyBpbmxpbmUgaW50IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihoZmEzODR4X3QgKiBodywgdTE2IHJpZCwgdm9pZCAqdmFsKQorc3RhdGljIGlubGluZSBpbnQgaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGhmYTM4NHhfdCAqaHcsIHUxNiByaWQsIHZvaWQgKnZhbCkKIHsKIAlpbnQgcmVzdWx0ID0gMDsKIAlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCByaWQsIHZhbCwgc2l6ZW9mKHUxNikpOwpAQCAtMTM0Nyw0NiArMTM3OSw0NiBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihoZmEzODR4X3QgKiBodywgdTE2IHJpZCwgdTE2IHZhbCkKK3N0YXRpYyBpbmxpbmUgaW50IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB1MTYgdmFsKQogewogCXUxNiB2YWx1ZSA9IGNwdV90b19sZTE2KHZhbCk7CiAJcmV0dXJuIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsIHJpZCwgJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKIH0KIAogaW50Ci1oZmEzODR4X2RydnJfZ2V0Y29uZmlnX2FzeW5jKGhmYTM4NHhfdCAqIGh3LAoraGZhMzg0eF9kcnZyX2dldGNvbmZpZ19hc3luYyhoZmEzODR4X3QgKmh3LAogCQkJICAgICB1MTYgcmlkLCBjdGx4X3VzZXJjYl90IHVzZXJjYiwgdm9pZCAqdXNlcmNiX2RhdGEpOwogCiBpbnQKLWhmYTM4NHhfZHJ2cl9zZXRjb25maWdfYXN5bmMoaGZhMzg0eF90ICogaHcsCitoZmEzODR4X2RydnJfc2V0Y29uZmlnX2FzeW5jKGhmYTM4NHhfdCAqaHcsCiAJCQkgICAgIHUxNiByaWQsCiAJCQkgICAgIHZvaWQgKmJ1ZiwKIAkJCSAgICAgdTE2IGxlbiwgY3RseF91c2VyY2JfdCB1c2VyY2IsIHZvaWQgKnVzZXJjYl9kYXRhKTsKIAogc3RhdGljIGlubGluZSBpbnQKLWhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNl9hc3luYyhoZmEzODR4X3QgKiBodywgdTE2IHJpZCwgdTE2IHZhbCkKK2hmYTM4NHhfZHJ2cl9zZXRjb25maWcxNl9hc3luYyhoZmEzODR4X3QgKmh3LCB1MTYgcmlkLCB1MTYgdmFsKQogewogCXUxNiB2YWx1ZSA9IGNwdV90b19sZTE2KHZhbCk7CiAJcmV0dXJuIGhmYTM4NHhfZHJ2cl9zZXRjb25maWdfYXN5bmMoaHcsIHJpZCwgJnZhbHVlLCBzaXplb2YodmFsdWUpLAogCQkJCQkgICAgTlVMTCwgTlVMTCk7CiB9CiAKLWludCBoZmEzODR4X2RydnJfc3RhcnQoaGZhMzg0eF90ICogaHcpOwotaW50IGhmYTM4NHhfZHJ2cl9zdG9wKGhmYTM4NHhfdCAqIGh3KTsKK2ludCBoZmEzODR4X2RydnJfc3RhcnQoaGZhMzg0eF90ICpodyk7CitpbnQgaGZhMzg0eF9kcnZyX3N0b3AoaGZhMzg0eF90ICpodyk7CiBpbnQKLWhmYTM4NHhfZHJ2cl90eGZyYW1lKGhmYTM4NHhfdCAqIGh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgIHA4MDIxMV9oZHJfdCAqIHA4MDIxMV9oZHIsIHA4MDIxMV9tZXRhd2VwX3QgKiBwODAyMTFfd2VwKTsKLXZvaWQgaGZhMzg0eF90eF90aW1lb3V0KHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYpOworaGZhMzg0eF9kcnZyX3R4ZnJhbWUoaGZhMzg0eF90ICpodywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICBwODAyMTFfaGRyX3QgKnA4MDIxMV9oZHIsIHA4MDIxMV9tZXRhd2VwX3QgKnA4MDIxMV93ZXApOwordm9pZCBoZmEzODR4X3R4X3RpbWVvdXQod2xhbmRldmljZV90ICp3bGFuZGV2KTsKIAotaW50IGhmYTM4NHhfY21kX2luaXRpYWxpemUoaGZhMzg0eF90ICogaHcpOwotaW50IGhmYTM4NHhfY21kX2VuYWJsZShoZmEzODR4X3QgKiBodywgdTE2IG1hY3BvcnQpOwotaW50IGhmYTM4NHhfY21kX2Rpc2FibGUoaGZhMzg0eF90ICogaHcsIHUxNiBtYWNwb3J0KTsKLWludCBoZmEzODR4X2NtZF9hbGxvY2F0ZShoZmEzODR4X3QgKiBodywgdTE2IGxlbik7Ci1pbnQgaGZhMzg0eF9jbWRfbW9uaXRvcihoZmEzODR4X3QgKiBodywgdTE2IGVuYWJsZSk7CitpbnQgaGZhMzg0eF9jbWRfaW5pdGlhbGl6ZShoZmEzODR4X3QgKmh3KTsKK2ludCBoZmEzODR4X2NtZF9lbmFibGUoaGZhMzg0eF90ICpodywgdTE2IG1hY3BvcnQpOworaW50IGhmYTM4NHhfY21kX2Rpc2FibGUoaGZhMzg0eF90ICpodywgdTE2IG1hY3BvcnQpOworaW50IGhmYTM4NHhfY21kX2FsbG9jYXRlKGhmYTM4NHhfdCAqaHcsIHUxNiBsZW4pOworaW50IGhmYTM4NHhfY21kX21vbml0b3IoaGZhMzg0eF90ICpodywgdTE2IGVuYWJsZSk7CiBpbnQKLWhmYTM4NHhfY21kX2Rvd25sb2FkKGhmYTM4NHhfdCAqIGh3LAoraGZhMzg0eF9jbWRfZG93bmxvYWQoaGZhMzg0eF90ICpodywKIAkJICAgICB1MTYgbW9kZSwgdTE2IGxvd2FkZHIsIHUxNiBoaWdoYWRkciwgdTE2IGNvZGVsZW4pOwogCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qX19LRVJORUxfXyAqLwogCi0jZW5kaWYgLyogX0hGQTM4NHhfSCAqLworI2VuZGlmIC8qX0hGQTM4NHhfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eF91c2IuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL2hmYTM4NHhfdXNiLmMKaW5kZXggOTI1Njc4Yi4uNWRmNTZmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvaGZhMzg0eF91c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9oZmEzODR4X3VzYi5jCkBAIC01Miw3ICs1Miw3IEBACiAqIGFyb3VuZCB0aGUgcmVnaXN0ZXIgYWNjZXNzZXMuICBUaGUgbmV4dCBoaWdoZXIgbGV2ZWwgcmVwcmVzZW50cyBDLWNhbGxhYmxlCiAqIHByaXNtMiBBUEkgZnVuY3Rpb25zIHRoYXQgbWF0Y2ggdGhlIEludGVyc2lsIGRvY3VtZW50YXRpb24gYXMgY2xvc2VseQogKiBhcyBpcyByZWFzb25hYmxlLiAgVGhlIG5leHQgaGlnaGVyIGxheWVyIGltcGxlbWVudHMgY29tbW9uIHNlcXVlbmNlcwotKiBvZiBpbnZva2F0aW9ucyBvZiB0aGUgQVBJIGxheWVyIChlLmcuIHdyaXRlIHRvIGJhcCwgZm9sbG93ZWQgYnkgY21kKS4KKyogb2YgaW52b2NhdGlvbnMgb2YgdGhlIEFQSSBsYXllciAoZS5nLiB3cml0ZSB0byBiYXAsIGZvbGxvd2VkIGJ5IGNtZCkuCiAqCiAqIENvbW1vbiBzZXF1ZW5jZXM6CiAqIGhmYTM4NHhfZHJ2cl94eHgJSGlnaGVzdCBsZXZlbCBhYnN0cmFjdGlvbnMgcHJvdmlkZWQgYnkgdGhlCkBAIC0xMTgsMTUgKzExOCwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotI2luY2x1ZGUgPGFzbS9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL2dlbmVyaWMuaD4KIAotI2RlZmluZSBTVUJNSVRfVVJCKHUsZikgIHVzYl9zdWJtaXRfdXJiKHUsZikKKyNkZWZpbmUgU1VCTUlUX1VSQih1LCBmKSAgdXNiX3N1Ym1pdF91cmIodSwgZikKIAogI2luY2x1ZGUgInA4MDIxMXR5cGVzLmgiCiAjaW5jbHVkZSAicDgwMjExaGRyLmgiCkBAIC02MjcsNyArNjI3LDcgQEAKIHsKIAloZmEzODR4X3VzYmN0bHhfdCAqY3RseDsKIAotCWN0bHggPSBrbWFsbG9jKHNpemVvZigqY3RseCksIGluX2ludGVycnVwdCgpPyBHRlBfQVRPTUlDIDogR0ZQX0tFUk5FTCk7CisJY3RseCA9IGttYWxsb2Moc2l6ZW9mKCpjdGx4KSwgaW5faW50ZXJydXB0KCkgPyBHRlBfQVRPTUlDIDogR0ZQX0tFUk5FTCk7CiAJaWYgKGN0bHggIT0gTlVMTCkgewogCQltZW1zZXQoY3RseCwgMCwgc2l6ZW9mKCpjdGx4KSk7CiAJCWluaXRfY29tcGxldGlvbigmY3RseC0+ZG9uZSk7CkBAIC02NzUsNyArNjc1LDcgQEAKIH07CiB0eXBlZGVmIHN0cnVjdCB1c2JjdGx4X2NtZF9jb21wbGV0b3IgdXNiY3RseF9jbWRfY29tcGxldG9yX3Q7CiAKLXN0YXRpYyBpbnQgdXNiY3RseF9jbWRfY29tcGxldG9yX2ZuKHVzYmN0bHhfY29tcGxldG9yX3QgKiBoZWFkKQorc3RhdGljIGludCB1c2JjdGx4X2NtZF9jb21wbGV0b3JfZm4odXNiY3RseF9jb21wbGV0b3JfdCAqaGVhZCkKIHsKIAl1c2JjdGx4X2NtZF9jb21wbGV0b3JfdCAqY29tcGxldGUgPSAodXNiY3RseF9jbWRfY29tcGxldG9yX3QgKikgaGVhZDsKIAlyZXR1cm4gdXNiY3RseF9nZXRfc3RhdHVzKGNvbXBsZXRlLT5jbWRyZXNwLCBjb21wbGV0ZS0+cmVzdWx0KTsKQEAgLTE5MDksMTggKzE5MDksMTkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBSZXRyaWV2ZSB0aGUgYnVmZmVyIGxvYyZzaXplIGFuZCB0aW1lb3V0ICovCi0JaWYgKChyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9ET1dOTE9BREJVRkZFUiwKLQkJCQkJICAgICAmKGh3LT5idWZpbmZvKSwKLQkJCQkJICAgICBzaXplb2YoaHctPmJ1ZmluZm8pKSkpIHsKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnKGh3LCBIRkEzODR4X1JJRF9ET1dOTE9BREJVRkZFUiwKKwkJCQkJJihody0+YnVmaW5mbyksIHNpemVvZihody0+YnVmaW5mbykpOworCWlmIChyZXN1bHQpCiAJCXJldHVybiByZXN1bHQ7Ci0JfQorCiAJaHctPmJ1ZmluZm8ucGFnZSA9IGxlMTZfdG9fY3B1KGh3LT5idWZpbmZvLnBhZ2UpOwogCWh3LT5idWZpbmZvLm9mZnNldCA9IGxlMTZfdG9fY3B1KGh3LT5idWZpbmZvLm9mZnNldCk7CiAJaHctPmJ1ZmluZm8ubGVuID0gbGUxNl90b19jcHUoaHctPmJ1ZmluZm8ubGVuKTsKLQlpZiAoKHJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9nZXRjb25maWcxNihodywgSEZBMzg0eF9SSURfTUFYTE9BRFRJTUUsCi0JCQkJCSAgICAgICAmKGh3LT5kbHRpbWVvdXQpKSkpIHsKKwlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsIEhGQTM4NHhfUklEX01BWExPQURUSU1FLAorCQkJCQkgICYoaHctPmRsdGltZW91dCkpOworCWlmIChyZXN1bHQpCiAJCXJldHVybiByZXN1bHQ7Ci0JfQorCiAJaHctPmRsdGltZW91dCA9IGxlMTZfdG9fY3B1KGh3LT5kbHRpbWVvdXQpOwogCiAJcHJfZGVidWcoImZsYXNoZGxfZW5hYmxlXG4iKTsKQEAgLTMwNzEsOSArMzA3Miw5IEBACiAJCQkJICBoZmEzODR4X2N0bHhvdXRfY2FsbGJhY2ssIGh3KTsKIAkJaHctPmN0bHhfdXJiLnRyYW5zZmVyX2ZsYWdzIHw9IFVTQl9RVUVVRV9CVUxLOwogCi0JCS8qIE5vdyBzdWJtaXQgdGhlIFVSQiBhbmQgdXBkYXRlIHRoZSBDVExYJ3Mgc3RhdGUKLQkJICovCi0JCWlmICgocmVzdWx0ID0gU1VCTUlUX1VSQigmaHctPmN0bHhfdXJiLCBHRlBfQVRPTUlDKSkgPT0gMCkgeworCQkvKiBOb3cgc3VibWl0IHRoZSBVUkIgYW5kIHVwZGF0ZSB0aGUgQ1RMWCdzIHN0YXRlICovCisJCXJlc3VsdCA9IFNVQk1JVF9VUkIoJmh3LT5jdGx4X3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChyZXN1bHQgPT0gMCkgewogCQkJLyogVGhpcyBDVExYIGlzIG5vdyBydW5uaW5nIG9uIHRoZSBhY3RpdmUgcXVldWUgKi8KIAkJCWhlYWQtPnN0YXRlID0gQ1RMWF9SRVFfU1VCTUlUVEVEOwogCkBAIC0zNTk5LDcgKzM2MDAsOCBAQAogCQkJIHNrYmxlbiAtIHNpemVvZihwODAyMTFfY2FwaGRyX3QpKTsKIAl9CiAKLQlpZiAoKHNrYiA9IGRldl9hbGxvY19za2Ioc2tibGVuKSkgPT0gTlVMTCkgeworCXNrYiA9IGRldl9hbGxvY19za2Ioc2tibGVuKTsKKwlpZiAoc2tiID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiYWxsb2Nfc2tiIGZhaWxlZCB0cnlpbmcgdG8gYWxsb2NhdGUgJWQgYnl0ZXNcbiIsCiAJCSAgICAgICBza2JsZW4pOwpAQCAtMzY0Miw3ICszNjQ0LDcgQEAKIAkJLyogY2hlY2sgZm9yIHVuZW5jcnlwdGVkIHN0dWZmIGlmIFdFUCBiaXQgc2V0LiAqLwogCQlpZiAoKihkYXRhcCAtIGhkcmxlbiArIDEpICYgMHg0MCkJLyogd2VwIHNldCAqLwogCQkJaWYgKCgqKGRhdGFwKSA9PSAweGFhKSAmJiAoKihkYXRhcCArIDEpID09IDB4YWEpKQotCQkJCSooZGF0YXAgLSBoZHJsZW4gKyAxKSAmPSAweGJmOwkvLyBjbGVhciB3ZXA7IGl0J3MgdGhlIDgwMi4yIGhlYWRlciEKKwkJCQkqKGRhdGFwIC0gaGRybGVuICsgMSkgJj0gMHhiZjsJLyogY2xlYXIgd2VwOyBpdCdzIHRoZSA4MDIuMiBoZWFkZXIhICovCiAJfQogCiAJaWYgKGh3LT5zbmlmZl9mY3MpIHsKQEAgLTM4NzAsOSArMzg3Miw5IEBACiAKIGRlbHJlc3A6CiAJaWYgKGRlbGV0ZV9yZXNwdGltZXIpIHsKLQkJaWYgKCh0aW1lcl9vayA9IGRlbF90aW1lcigmaHctPnJlc3B0aW1lcikpICE9IDApIHsKKwkJdGltZXJfb2sgPSBkZWxfdGltZXIoJmh3LT5yZXNwdGltZXIpOworCQlpZiAodGltZXJfb2sgIT0gMCkKIAkJCWh3LT5yZXNwX3RpbWVyX2RvbmUgPSAxOwotCQl9CiAJfQogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHctPmN0bHhxLmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuYwppbmRleCA1OTUyYzY3Li5hMTYwNWZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5jCkBAIC0yMDYsMTIgKzIwNiwxMSBAQAogCQkvKiBYWFhYIG5lZWQgdG8gcGljayBrZXludW0gb3RoZXIgdGhhbiBkZWZhdWx0PyAqLwogCiAJCXA4MDIxMV93ZXAtPmRhdGEgPSBrbWFsbG9jKHNrYi0+bGVuLCBHRlBfQVRPTUlDKTsKLQotCQlpZiAoKGZvbyA9IHdlcF9lbmNyeXB0KHdsYW5kZXYsIHNrYi0+ZGF0YSwgcDgwMjExX3dlcC0+ZGF0YSwKLQkJCQkgICAgICAgc2tiLT5sZW4sCi0JCQkJICAgICAgICh3bGFuZGV2LT5ob3N0d2VwICYKLQkJCQkJSE9TVFdFUF9ERUZBVUxUS0VZX01BU0spLAotCQkJCSAgICAgICBwODAyMTFfd2VwLT5pdiwgcDgwMjExX3dlcC0+aWN2KSkpIHsKKwkJZm9vID0gd2VwX2VuY3J5cHQod2xhbmRldiwgc2tiLT5kYXRhLCBwODAyMTFfd2VwLT5kYXRhLAorCQkJCSAgc2tiLT5sZW4sCisJCQkJICAod2xhbmRldi0+aG9zdHdlcCAmSE9TVFdFUF9ERUZBVUxUS0VZX01BU0spLAorCQkJCSAgcDgwMjExX3dlcC0+aXYsIHA4MDIxMV93ZXAtPmljdik7CisJCWlmIChmb28pIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJCSAgICAgICAiSG9zdCBlbi1XRVAgZmFpbGVkLCBkcm9wcGluZyBmcmFtZSAoJWQpLlxuIiwKIAkJCSAgICAgICBmb28pOwpAQCAtMzIzLDExICszMjIsMTIgQEAKIAkJCSAgICAgICBza2ItPmxlbik7CiAJCQlyZXR1cm4gMTsKIAkJfQotCQlpZiAoKGZvbyA9IHdlcF9kZWNyeXB0KHdsYW5kZXYsIHNrYi0+ZGF0YSArIHBheWxvYWRfb2Zmc2V0ICsgNCwKKwkJZm9vID0gd2VwX2RlY3J5cHQod2xhbmRldiwgc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQgKyA0LAogCQkJCSAgICAgICBwYXlsb2FkX2xlbmd0aCAtIDgsIC0xLAogCQkJCSAgICAgICBza2ItPmRhdGEgKyBwYXlsb2FkX29mZnNldCwKIAkJCQkgICAgICAgc2tiLT5kYXRhICsgcGF5bG9hZF9vZmZzZXQgKwotCQkJCSAgICAgICBwYXlsb2FkX2xlbmd0aCAtIDQpKSkgeworCQkJCSAgICAgICBwYXlsb2FkX2xlbmd0aCAtIDQpOworCQlpZiAoZm9vKSB7CiAJCQkvKiBkZS13ZXAgZmFpbGVkLCBkcm9wIHNrYi4gKi8KIAkJCXByX2RlYnVnKCJIb3N0IGRlLVdFUCBmYWlsZWQsIGRyb3BwaW5nIGZyYW1lICglZCkuXG4iLAogCQkJCSBmb28pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExY29udi5oCmluZGV4IDBjNjJkZjEuLjZmZTE2M2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMWNvbnYuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFjb252LmgKQEAgLTE1Myw4ICsxNTMsOCBAQAogaW50IHNrYl9wODAyMTFfdG9fZXRoZXIoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsIHUzMiBldGhjb252LAogCQkJc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBpbnQgc2tiX2V0aGVyX3RvX3A4MDIxMShzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgdTMyIGV0aGNvbnYsCi0JCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBwODAyMTFfaGRyX3QgKiBwODAyMTFfaGRyLAotCQkJcDgwMjExX21ldGF3ZXBfdCAqIHA4MDIxMV93ZXApOworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwgcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLAorCQkJcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7CiAKIGludCBwODAyMTFfc3R0X2ZpbmRwcm90byh1MTYgcHJvdG8pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhZGVmLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZXRhZGVmLmgKaW5kZXggZGE4YjZmNS4uMGNjZmJhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWV0YWRlZi5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1ldGFkZWYuaApAQCAtMTkwLDkgKzE5MCw5IEBACiAJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKIAkJCVA4MDIxMURJRF9NS0dST1VQKDEpKQogI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMU1BQ0FkZHJlc3MgXAotICAgICAgICAgICAgICAgICAgICAgICAgKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICBQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIFA4MDIxMURJRF9NS0lURU0oMSkgfCAweDE4MDAwMDAwKQorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMSkgfCAweDE4MDAwMDAwKQogI2RlZmluZSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMVJUU1RocmVzaG9sZCBcCiAJCQkoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKIAkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXApAQCAtMjEwLDE4ICsyMTAsMTggQEAKIAkJCVA4MDIxMURJRF9NS0dST1VQKDEpIHwgXAogCQkJUDgwMjExRElEX01LSVRFTSg1KSB8IDB4MTgwMDAwMDApCiAjZGVmaW5lIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExTWF4VHJhbnNtaXRNU0RVTGlmZXRpbWUgXAotICAgICAgICAgICAgICAgICAgICAgICAoUDgwMjExRElEX01LU0VDVElPTigyKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgUDgwMjExRElEX01LR1JPVVAoMSkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgIFA4MDIxMURJRF9NS0lURU0oNikgfCAweDEwMDAwMDAwKQorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMikgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgxKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oNikgfCAweDEwMDAwMDAwKQogI2RlZmluZSBESURtaWJfY2F0X2RvdDExcGh5IFwKIAkJCVA4MDIxMURJRF9NS1NFQ1RJT04oMykKICNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5T3BlcmF0aW9uVGFibGUgXAogCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCiAJCQlQODAyMTFESURfTUtHUk9VUCgxKSkKICNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExQ3VycmVudFR4UG93ZXJMZXZlbCBcCi0gICAgICAgICAgICAgICAgICAgICAgIChQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAotICAgICAgICAgICAgICAgICAgICAgICBQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgUDgwMjExRElEX01LSVRFTSgxMCkgfCAweDE4MDAwMDAwKQorCQkJKFA4MDIxMURJRF9NS1NFQ1RJT04oMykgfCBcCisJCQlQODAyMTFESURfTUtHUk9VUCgzKSB8IFwKKwkJCVA4MDIxMURJRF9NS0lURU0oMTApIHwgMHgxODAwMDAwMCkKICNkZWZpbmUgRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlIFwKIAkJCShQODAyMTFESURfTUtTRUNUSU9OKDMpIHwgXAogCQkJUDgwMjExRElEX01LR1JPVVAoNSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZ210LmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFtZ210LmgKaW5kZXggMTRjZGM4Ni4uZGViNTJmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbWdtdC5oCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW1nbXQuaApAQCAtMTAwLDcgKzEwMCw3IEBACiAjaWZuZGVmIF9QODAyMTFNR01UX0gKICNkZWZpbmUgX1A4MDIxMU1HTVRfSAogCi0jaWZuZGVmICBfUDgwMjExSERSX0gKKyNpZm5kZWYgX1A4MDIxMUhEUl9ICiAjaW5jbHVkZSAicDgwMjExaGRyLmgiCiAjZW5kaWYKIApAQCAtNDk2LDI1ICs0OTYsMjUgQEAKIAogfSB3bGFuX2ZyX2RlYXV0aGVuX3Q7CiAKLXZvaWQgd2xhbl9tZ210X2VuY29kZV9iZWFjb24od2xhbl9mcl9iZWFjb25fdCAqIGYpOwotdm9pZCB3bGFuX21nbXRfZGVjb2RlX2JlYWNvbih3bGFuX2ZyX2JlYWNvbl90ICogZik7Ci12b2lkIHdsYW5fbWdtdF9lbmNvZGVfZGlzYXNzb2Mod2xhbl9mcl9kaXNhc3NvY190ICogZik7Ci12b2lkIHdsYW5fbWdtdF9kZWNvZGVfZGlzYXNzb2Mod2xhbl9mcl9kaXNhc3NvY190ICogZik7Ci12b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXNzb2NyZXEod2xhbl9mcl9hc3NvY3JlcV90ICogZik7Ci12b2lkIHdsYW5fbWdtdF9kZWNvZGVfYXNzb2NyZXEod2xhbl9mcl9hc3NvY3JlcV90ICogZik7Ci12b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXNzb2NyZXNwKHdsYW5fZnJfYXNzb2NyZXNwX3QgKiBmKTsKLXZvaWQgd2xhbl9tZ210X2RlY29kZV9hc3NvY3Jlc3Aod2xhbl9mcl9hc3NvY3Jlc3BfdCAqIGYpOwotdm9pZCB3bGFuX21nbXRfZW5jb2RlX3JlYXNzb2NyZXEod2xhbl9mcl9yZWFzc29jcmVxX3QgKiBmKTsKLXZvaWQgd2xhbl9tZ210X2RlY29kZV9yZWFzc29jcmVxKHdsYW5fZnJfcmVhc3NvY3JlcV90ICogZik7Ci12b2lkIHdsYW5fbWdtdF9lbmNvZGVfcmVhc3NvY3Jlc3Aod2xhbl9mcl9yZWFzc29jcmVzcF90ICogZik7Ci12b2lkIHdsYW5fbWdtdF9kZWNvZGVfcmVhc3NvY3Jlc3Aod2xhbl9mcl9yZWFzc29jcmVzcF90ICogZik7Ci12b2lkIHdsYW5fbWdtdF9lbmNvZGVfcHJvYmVyZXEod2xhbl9mcl9wcm9iZXJlcV90ICogZik7Ci12b2lkIHdsYW5fbWdtdF9kZWNvZGVfcHJvYmVyZXEod2xhbl9mcl9wcm9iZXJlcV90ICogZik7Ci12b2lkIHdsYW5fbWdtdF9lbmNvZGVfcHJvYmVyZXNwKHdsYW5fZnJfcHJvYmVyZXNwX3QgKiBmKTsKLXZvaWQgd2xhbl9tZ210X2RlY29kZV9wcm9iZXJlc3Aod2xhbl9mcl9wcm9iZXJlc3BfdCAqIGYpOwotdm9pZCB3bGFuX21nbXRfZW5jb2RlX2F1dGhlbih3bGFuX2ZyX2F1dGhlbl90ICogZik7Ci12b2lkIHdsYW5fbWdtdF9kZWNvZGVfYXV0aGVuKHdsYW5fZnJfYXV0aGVuX3QgKiBmKTsKLXZvaWQgd2xhbl9tZ210X2VuY29kZV9kZWF1dGhlbih3bGFuX2ZyX2RlYXV0aGVuX3QgKiBmKTsKLXZvaWQgd2xhbl9tZ210X2RlY29kZV9kZWF1dGhlbih3bGFuX2ZyX2RlYXV0aGVuX3QgKiBmKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9iZWFjb24od2xhbl9mcl9iZWFjb25fdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfYmVhY29uKHdsYW5fZnJfYmVhY29uX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX2Rpc2Fzc29jKHdsYW5fZnJfZGlzYXNzb2NfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9kZWNvZGVfZGlzYXNzb2Mod2xhbl9mcl9kaXNhc3NvY190ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9hc3NvY3JlcSh3bGFuX2ZyX2Fzc29jcmVxX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2Fzc29jcmVxKHdsYW5fZnJfYXNzb2NyZXFfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXNzb2NyZXNwKHdsYW5fZnJfYXNzb2NyZXNwX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2Fzc29jcmVzcCh3bGFuX2ZyX2Fzc29jcmVzcF90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9yZWFzc29jcmVxKHdsYW5fZnJfcmVhc3NvY3JlcV90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9yZWFzc29jcmVxKHdsYW5fZnJfcmVhc3NvY3JlcV90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9yZWFzc29jcmVzcCh3bGFuX2ZyX3JlYXNzb2NyZXNwX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX3JlYXNzb2NyZXNwKHdsYW5fZnJfcmVhc3NvY3Jlc3BfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfcHJvYmVyZXEod2xhbl9mcl9wcm9iZXJlcV90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9wcm9iZXJlcSh3bGFuX2ZyX3Byb2JlcmVxX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZW5jb2RlX3Byb2JlcmVzcCh3bGFuX2ZyX3Byb2JlcmVzcF90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2RlY29kZV9wcm9iZXJlc3Aod2xhbl9mcl9wcm9iZXJlc3BfdCAqZik7Cit2b2lkIHdsYW5fbWdtdF9lbmNvZGVfYXV0aGVuKHdsYW5fZnJfYXV0aGVuX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2F1dGhlbih3bGFuX2ZyX2F1dGhlbl90ICpmKTsKK3ZvaWQgd2xhbl9tZ210X2VuY29kZV9kZWF1dGhlbih3bGFuX2ZyX2RlYXV0aGVuX3QgKmYpOwordm9pZCB3bGFuX21nbXRfZGVjb2RlX2RlYXV0aGVuKHdsYW5fZnJfZGVhdXRoZW5fdCAqZik7CiAKICNlbmRpZiAvKiBfUDgwMjExTUdNVF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFuZXRkZXYuYyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCmluZGV4IDIyNDI0YzguLjc2M2FiMTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5jCkBAIC01ODYsNyArNTg2LDggQEAKIAl9CiAKIAkvKiBBbGxvY2F0ZSBhIGJ1ZiBvZiBzaXplIHJlcS0+bGVuICovCi0JaWYgKChtc2didWYgPSBrbWFsbG9jKHJlcS0+bGVuLCBHRlBfS0VSTkVMKSkpIHsKKwltc2didWYgPSBrbWFsbG9jKHJlcS0+bGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAobXNnYnVmKSB7CiAJCWlmIChjb3B5X2Zyb21fdXNlcihtc2didWYsICh2b2lkIF9fdXNlciAqKXJlcS0+ZGF0YSwgcmVxLT5sZW4pKQogCQkJcmVzdWx0ID0gLUVGQVVMVDsKIAkJZWxzZQpAQCAtNjQ2LDcgKzY0Nyw3IEBACiAKIAkvKiBTZXQgdXAgc29tZSBjb252ZW5pZW5jZSBwb2ludGVycy4gKi8KIAltaWJhdHRyID0gJmRvdDExcmVxLm1pYmF0dHJpYnV0ZTsKLQltYWNhZGRyID0gKHA4MDIxMWl0ZW1fcHN0cjZfdCAqKSAmIG1pYmF0dHItPmRhdGE7CisJbWFjYWRkciA9IChwODAyMTFpdGVtX3BzdHI2X3QgKikgJm1pYmF0dHItPmRhdGE7CiAJcmVzdWx0Y29kZSA9ICZkb3QxMXJlcS5yZXN1bHRjb2RlOwogCiAJLyogU2V0IHVwIGEgZG90MTFyZXFfbWlic2V0ICovCkBAIC02NzQsNyArNjc1LDcgQEAKIAlyZXN1bHRjb2RlLT5kYXRhID0gMDsKIAogCS8qIG5vdyBmaXJlIHRoZSByZXF1ZXN0ICovCi0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdChkZXYtPm1sX3ByaXYsICh1OCAqKSAmIGRvdDExcmVxKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KGRldi0+bWxfcHJpdiwgKHU4ICopICZkb3QxMXJlcSk7CiAKIAkvKiBJZiB0aGUgcmVxdWVzdCB3YXNuJ3Qgc3VjY2Vzc2Z1bCwgcmVwb3J0IGFuIGVycm9yIGFuZCBkb24ndAogCSAqIGNoYW5nZSB0aGUgbmV0ZGV2IGFkZHJlc3MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMW5ldGRldi5oIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmgKaW5kZXggOGJkOWRmYi4uM2M4YzY0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExbmV0ZGV2LmgKQEAgLTE3OSwxNiArMTc5LDE2IEBACiAJdW5zaWduZWQgaW50IGV0aGNvbnY7CiAKIAkvKiBkZXZpY2UgbWV0aG9kcyAoaW5pdCBieSBNU0QsIHVzZWQgYnkgcDgwMjExICovCi0JaW50ICgqb3BlbikgKHN0cnVjdCB3bGFuZGV2aWNlICogd2xhbmRldik7Ci0JaW50ICgqY2xvc2UpIChzdHJ1Y3Qgd2xhbmRldmljZSAqIHdsYW5kZXYpOwotCXZvaWQgKCpyZXNldCkgKHN0cnVjdCB3bGFuZGV2aWNlICogd2xhbmRldik7Ci0JaW50ICgqdHhmcmFtZSkgKHN0cnVjdCB3bGFuZGV2aWNlICogd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKiBza2IsCi0JCQlwODAyMTFfaGRyX3QgKiBwODAyMTFfaGRyLAotCQkJcDgwMjExX21ldGF3ZXBfdCAqIHA4MDIxMV93ZXApOwotCWludCAoKm1sbWVyZXF1ZXN0KSAoc3RydWN0IHdsYW5kZXZpY2UgKiB3bGFuZGV2LCBwODAyMTFtc2dfdCAqIG1zZyk7Ci0JaW50ICgqc2V0X211bHRpY2FzdF9saXN0KSAoc3RydWN0IHdsYW5kZXZpY2UgKiB3bGFuZGV2LAotCQkJCSAgIG5ldGRldmljZV90ICogZGV2KTsKLQl2b2lkICgqdHhfdGltZW91dCkgKHN0cnVjdCB3bGFuZGV2aWNlICogd2xhbmRldik7CisJaW50ICgqb3BlbikgKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2KTsKKwlpbnQgKCpjbG9zZSkgKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2KTsKKwl2b2lkICgqcmVzZXQpIChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CisJaW50ICgqdHhmcmFtZSkgKHN0cnVjdCB3bGFuZGV2aWNlICp3bGFuZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJcDgwMjExX2hkcl90ICpwODAyMTFfaGRyLAorCQkJcDgwMjExX21ldGF3ZXBfdCAqcDgwMjExX3dlcCk7CisJaW50ICgqbWxtZXJlcXVlc3QpIChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldiwgcDgwMjExbXNnX3QgKm1zZyk7CisJaW50ICgqc2V0X211bHRpY2FzdF9saXN0KSAoc3RydWN0IHdsYW5kZXZpY2UgKndsYW5kZXYsCisJCQkJICAgbmV0ZGV2aWNlX3QgKmRldik7CisJdm9pZCAoKnR4X3RpbWVvdXQpIChzdHJ1Y3Qgd2xhbmRldmljZSAqd2xhbmRldik7CiAKIAkvKiA4MDIuMTEgU3RhdGUgKi8KIAl1OCBic3NpZFtXTEFOX0JTU0lEX0xFTl07CkBAIC0yMjcsMTYgKzIyNywxNiBAQAogfSB3bGFuZGV2aWNlX3Q7CiAKIC8qIFdFUCBzdHVmZiAqLwotaW50IHdlcF9jaGFuZ2Vfa2V5KHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYsIGludCBrZXludW0sIHU4ICoga2V5LCBpbnQga2V5bGVuKTsKLWludCB3ZXBfZGVjcnlwdCh3bGFuZGV2aWNlX3QgKiB3bGFuZGV2LCB1OCAqIGJ1ZiwgdTMyIGxlbiwgaW50IGtleV9vdmVycmlkZSwKLQkJdTggKiBpdiwgdTggKiBpY3YpOwotaW50IHdlcF9lbmNyeXB0KHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYsIHU4ICogYnVmLCB1OCAqIGRzdCwgdTMyIGxlbiwgaW50IGtleW51bSwKLQkJdTggKiBpdiwgdTggKiBpY3YpOworaW50IHdlcF9jaGFuZ2Vfa2V5KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaW50IGtleW51bSwgdTggKmtleSwgaW50IGtleWxlbik7CitpbnQgd2VwX2RlY3J5cHQod2xhbmRldmljZV90ICp3bGFuZGV2LCB1OCAqYnVmLCB1MzIgbGVuLCBpbnQga2V5X292ZXJyaWRlLAorCQl1OCAqaXYsIHU4ICppY3YpOworaW50IHdlcF9lbmNyeXB0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTggKmJ1ZiwgdTggKmRzdCwgdTMyIGxlbiwgaW50IGtleW51bSwKKwkJdTggKml2LCB1OCAqaWN2KTsKIAotaW50IHdsYW5fc2V0dXAod2xhbmRldmljZV90ICogd2xhbmRldik7Ci1pbnQgd2xhbl91bnNldHVwKHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYpOwotaW50IHJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldmljZV90ICogd2xhbmRldik7Ci1pbnQgdW5yZWdpc3Rlcl93bGFuZGV2KHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYpOwotdm9pZCBwODAyMTFuZXRkZXZfcngod2xhbmRldmljZV90ICogd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci12b2lkIHA4MDIxMW5ldGRldl9od3JlbW92ZWQod2xhbmRldmljZV90ICogd2xhbmRldik7CitpbnQgd2xhbl9zZXR1cCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworaW50IHdsYW5fdW5zZXR1cCh3bGFuZGV2aWNlX3QgKndsYW5kZXYpOworaW50IHJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK2ludCB1bnJlZ2lzdGVyX3dsYW5kZXYod2xhbmRldmljZV90ICp3bGFuZGV2KTsKK3ZvaWQgcDgwMjExbmV0ZGV2X3J4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Cit2b2lkIHA4MDIxMW5ldGRldl9od3JlbW92ZWQod2xhbmRldmljZV90ICp3bGFuZGV2KTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuYwppbmRleCBjODgxNTZjLi5jMmU5NWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuYwpAQCAtOTQsNyArOTQsNyBAQAogKglQb3RlbnRpYWxseSBibG9ja3MgdGhlIGNhbGxlciwgc28gaXQncyBhIGdvb2QgaWRlYSB0bwogKglub3QgY2FsbCB0aGlzIGZ1bmN0aW9uIGZyb20gYW4gaW50ZXJydXB0IGNvbnRleHQuCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLWludCBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYsIHU4ICogbXNnYnVmKQoraW50IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldmljZV90ICp3bGFuZGV2LCB1OCAqbXNnYnVmKQogewogCWludCByZXN1bHQgPSAwOwogCXA4MDIxMW1zZ190ICptc2cgPSAocDgwMjExbXNnX3QgKikgbXNnYnVmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExcmVxLmggYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuaAppbmRleCA1ZDkxNzY3Li5hOTVhNDVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTFyZXEuaApAQCAtNDgsNiArNDgsNiBAQAogI2lmbmRlZiBfTElOVVhfUDgwMjExUkVRX0gKICNkZWZpbmUgX0xJTlVYX1A4MDIxMVJFUV9ICiAKLWludCBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYsIHU4ICogbXNnYnVmKTsKK2ludCBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTggKm1zZ2J1Zik7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExdHlwZXMuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXR5cGVzLmgKaW5kZXggMmI4M2FiMC4uNDFhOTljNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExdHlwZXMuaAorKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF0eXBlcy5oCkBAIC0xNjgsMTIgKzE2OCwxMiBAQAogCQkJCQlQODAyMTFESURfTUFTS19JU1RBQkxFLCBcCiAJCQkJCVA4MDIxMURJRF9MU0JfSVNUQUJMRSkKIAotI2RlZmluZSBQODAyMTFESURfTUtJRChzLGcsaSxuLHQsYSkJKFA4MDIxMURJRF9NS1NFQ1RJT04ocykgfCBcCi0JCQkJCQlQODAyMTFESURfTUtHUk9VUChnKSB8IFwKLQkJCQkgCQlQODAyMTFESURfTUtJVEVNKGkpIHwgXAotCQkJCSAJCVA4MDIxMURJRF9NS0lOREVYKG4pIHwgXAotCQkJCQkJUDgwMjExRElEX01LSVNUQUJMRSh0KSB8IFwKLQkJCQkJCShhKSkKKyNkZWZpbmUgUDgwMjExRElEX01LSUQocywgZywgaSwgbiwgdCwgYSkJKFA4MDIxMURJRF9NS1NFQ1RJT04ocykgfCBcCisJCQkJCVA4MDIxMURJRF9NS0dST1VQKGcpIHwgXAorCQkJCQlQODAyMTFESURfTUtJVEVNKGkpIHwgXAorCQkJCQlQODAyMTFESURfTUtJTkRFWChuKSB8IFwKKwkJCQkJUDgwMjExRElEX01LSVNUQUJMRSh0KSB8IFwKKwkJCQkJKGEpKQogCiAjZGVmaW5lIFA4MDIxMURJRF9HRVQoYSwgbSwgbCkJKCgoKHUzMikoYSkpID4+IChsKSkgJiAobSkpCiAKQEAgLTM0MCwxMSArMzQwLDExIEBACiAvKiAgbWV0YWRhdGEgaXRlbXMuICBTb21lIGNvbXBvbmVudHMgbWF5IGNob29zZSB0byB1c2UgbW9yZSwgKi8KIC8qICBsZXNzIG9yIGRpZmZlcmVudCBtZXRhZGF0YSBpdGVtcy4gKi8KIAotdHlwZWRlZiB2b2lkICgqcDgwMjExX3RvdGV4dF90KSAoc3RydWN0IGNhdGxpc3RpdGVtICosIHUzMiBkaWQsIHU4ICogaXRlbWJ1ZiwKK3R5cGVkZWYgdm9pZCAoKnA4MDIxMV90b3RleHRfdCkgKHN0cnVjdCBjYXRsaXN0aXRlbSAqLCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwKIAkJCQkgY2hhciAqdGV4dGJ1Zik7Ci10eXBlZGVmIHZvaWQgKCpwODAyMTFfZnJvbXRleHRfdCkgKHN0cnVjdCBjYXRsaXN0aXRlbSAqLCB1MzIgZGlkLCB1OCAqIGl0ZW1idWYsCit0eXBlZGVmIHZvaWQgKCpwODAyMTFfZnJvbXRleHRfdCkgKHN0cnVjdCBjYXRsaXN0aXRlbSAqLCB1MzIgZGlkLCB1OCAqaXRlbWJ1ZiwKIAkJCQkgICBjaGFyICp0ZXh0YnVmKTsKLXR5cGVkZWYgdTMyKCpwODAyMTFfdmFsaWRfdCkgKHN0cnVjdCBjYXRsaXN0aXRlbSAqLCB1MzIgZGlkLCB1OCAqIGl0ZW1idWYpOwordHlwZWRlZiB1MzIoKnA4MDIxMV92YWxpZF90KSAoc3RydWN0IGNhdGxpc3RpdGVtICosIHUzMiBkaWQsIHU4ICppdGVtYnVmKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIEVudW1lcmF0aW9uIExpc3RzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXh0LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wODAyMTF3ZXh0LmMKaW5kZXggNzRkODAyMi4uMmZhMWRmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcDgwMjExd2V4dC5jCisrKyBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3A4MDIxMXdleHQuYwpAQCAtNDYsOCArNDYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bmV0L2l3X2hhbmRsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KLSNpbmNsdWRlIDxhc20vYml0b3BzLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CkBAIC0xMzQsMTAgKzEzNCwxMSBAQAogCWludCByZXN1bHQ7CiAKIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7CisJbWVtc2V0KCZtaWJpdGVtLCAwLCBzaXplb2YobWliaXRlbSkpOwogCW1pYml0ZW0uZGlkID0gZGlkOwogCW1pYml0ZW0uZGF0YSA9IGRhdGE7CiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICYgbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKIAogCXJldHVybiByZXN1bHQ7CiB9CkBAIC0xNzQsNyArMTc1LDcgQEAKIAltZW1jcHkobXNnLnNzaWQuZGF0YS5kYXRhLCBzc2lkLCBkYXRhLmxlbmd0aCk7CiAJbXNnLnNzaWQuZGF0YS5sZW4gPSBkYXRhLmxlbmd0aDsKIAotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICYgbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTIxMSw3ICsyMTIsNyBAQAogCWlmICh3bGFuZGV2LT5tbG1lcmVxdWVzdCA9PSBOVUxMKQogCQlyZXR1cm4gTlVMTDsKIAotCXJldHZhbCA9IHdsYW5kZXYtPm1sbWVyZXF1ZXN0KHdsYW5kZXYsIChwODAyMTFtc2dfdCAqKSAmIHF1YWxpdHkpOworCXJldHZhbCA9IHdsYW5kZXYtPm1sbWVyZXF1ZXN0KHdsYW5kZXYsIChwODAyMTFtc2dfdCAqKSAmcXVhbGl0eSk7CiAKIAl3c3RhdHMtPnF1YWwucXVhbCA9IHF1YWxfYXNfcGVyY2VudChxdWFsaXR5LmxpbmsuZGF0YSk7CS8qIG92ZXJhbGwgbGluayBxdWFsaXR5ICovCiAJd3N0YXRzLT5xdWFsLmxldmVsID0gcXVhbGl0eS5sZXZlbC5kYXRhOwkvKiBpbnN0YW50IHNpZ25hbCBsZXZlbCAqLwpAQCAtMjY5LDkgKzI3MCwxMCBAQAogCWludCBlcnIgPSAwOwogCiAJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWliZ2V0OworCW1lbXNldCgmbWliaXRlbSwgMCwgc2l6ZW9mKG1pYml0ZW0pKTsKIAltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeURTU1NUYWJsZV9kb3QxMUN1cnJlbnRDaGFubmVsOwogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmIG1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC0zMDksNiArMzExLDcgQEAKIAl9CiAKIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7CisJbWVtc2V0KCZtaWJpdGVtLCAwLCBzaXplb2YobWliaXRlbSkpOwogCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExcGh5X2RvdDExUGh5RFNTU1RhYmxlX2RvdDExQ3VycmVudENoYW5uZWw7CiAJbWliaXRlbS5zdGF0dXMgPSBQODAyMTFFTlVNX21zZ2l0ZW1fc3RhdHVzX2RhdGFfb2s7CiAKQEAgLTMxOCw3ICszMjEsNyBAQAogCQltaWJpdGVtLmRhdGEgPSBwODAyMTFfbWh6X3RvX2NoYW5uZWwoZnJlcS0+bSk7CiAKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJiBtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOwogCiAJaWYgKHJlc3VsdCkgewogCQllcnIgPSAtRUZBVUxUOwpAQCAtMzk2LDEwICszOTksMTEgQEAKIAogCS8qIFNldCBPcGVyYXRpb24gbW9kZSB0byB0aGUgUE9SVCBUWVBFIFJJRCAqLwogCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKKwltZW1zZXQoJm1pYml0ZW0sIDAsIHNpemVvZihtaWJpdGVtKSk7CiAJbWliaXRlbS5kaWQgPSBESURtaWJfcDJfcDJTdGF0aWNfcDJDbmZQb3J0VHlwZTsKIAltaWJpdGVtLmRhdGEgPSAoKm1vZGUgPT0gSVdfTU9ERV9BREhPQykgPyAwIDogMTsKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJiBtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOwogCiAJaWYgKHJlc3VsdCkKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTU0OSwxNCArNTUzLDE0IEBACiAJfQogCiAJLyogQ2hlY2sgdGhlIEtleSBpbmRleCBmaXJzdC4gKi8KLQlpZiAoKGkgPSAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9JTkRFWCkpKSB7Ci0KKwlpID0gKGVycS0+ZmxhZ3MgJiBJV19FTkNPREVfSU5ERVgpOworCWlmIChpKSB7CiAJCWlmICgoaSA8IDEpIHx8IChpID4gTlVNX1dFUEtFWVMpKSB7CiAJCQllcnIgPSAtRUlOVkFMOwogCQkJZ290byBleGl0OwotCQl9IGVsc2UKKwkJfSBlbHNlIHsKIAkJCWktLTsKLQorCQl9CiAJCS8qIFNldCBjdXJyZW50IGtleSBudW1iZXIgb25seSBpZiBubyBrZXlzIGFyZSBnaXZlbiAqLwogCQlpZiAoZXJxLT5mbGFncyAmIElXX0VOQ09ERV9OT0tFWSkgewogCQkJcmVzdWx0ID0KQEAgLTYyMSw3ICs2MjUsNyBAQAogCiAJCQltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7CiAJCQltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJnBzdHIsIHNpemVvZihwc3RyKSk7Ci0JCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmIG1zZyk7CisJCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKIAogCQkJaWYgKHJlc3VsdCkgewogCQkJCWVyciA9IC1FRkFVTFQ7CkBAIC03MjksNyArNzMzLDcgQEAKIAltc2cuc3NpZC5kYXRhLmxlbiA9IGxlbmd0aDsKIAogCXByX2RlYnVnKCJhdXRvam9pbl9zc2lkIGZvciAlcyBcbiIsIGVzc2lkKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmIG1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7CiAJcHJfZGVidWcoImF1dG9qb2luX3NzaWQgJWRcbiIsIHJlc3VsdCk7CiAKIAlpZiAocmVzdWx0KSB7CkBAIC03NzEsOSArNzc1LDEwIEBACiAJaW50IGVyciA9IDA7CiAKIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7CisJbWVtc2V0KCZtaWJpdGVtLCAwLCBzaXplb2YobWliaXRlbSkpOwogCW1pYml0ZW0uZGlkID0gRElEbWliX3AyX3AyTUFDX3AyQ3VycmVudFR4UmF0ZTsKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJiBtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOwogCiAJaWYgKHJlc3VsdCkgewogCQllcnIgPSAtRUZBVUxUOwpAQCAtODIyLDkgKzgyNywxMCBAQAogCWludCBlcnIgPSAwOwogCiAJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWliZ2V0OworCW1lbXNldCgmbWliaXRlbSwgMCwgc2l6ZW9mKG1pYml0ZW0pKTsKIAltaWJpdGVtLmRpZCA9IERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExUlRTVGhyZXNob2xkOwogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmIG1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC04NTcsNiArODYzLDcgQEAKIAl9CiAKIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7CisJbWVtc2V0KCZtaWJpdGVtLCAwLCBzaXplb2YobWliaXRlbSkpOwogCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFSVFNUaHJlc2hvbGQ7CiAJaWYgKHJ0cy0+ZGlzYWJsZWQpCiAJCW1pYml0ZW0uZGF0YSA9IDIzNDc7CkBAIC04NjQsNyArODcxLDcgQEAKIAkJbWliaXRlbS5kYXRhID0gcnRzLT52YWx1ZTsKIAogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmIG1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC04ODYsMTAgKzg5MywxMSBAQAogCWludCBlcnIgPSAwOwogCiAJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWliZ2V0OworCW1lbXNldCgmbWliaXRlbSwgMCwgc2l6ZW9mKG1pYml0ZW0pKTsKIAltaWJpdGVtLmRpZCA9CiAJICAgIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExRnJhZ21lbnRhdGlvblRocmVzaG9sZDsKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJiBtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOwogCiAJaWYgKHJlc3VsdCkgewogCQllcnIgPSAtRUZBVUxUOwpAQCAtOTIyLDYgKzkzMCw3IEBACiAJfQogCiAJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfbWlic2V0OworCW1lbXNldCgmbWliaXRlbSwgMCwgc2l6ZW9mKG1pYml0ZW0pKTsKIAltaWJpdGVtLmRpZCA9CiAJICAgIERJRG1pYl9kb3QxMW1hY19kb3QxMU9wZXJhdGlvblRhYmxlX2RvdDExRnJhZ21lbnRhdGlvblRocmVzaG9sZDsKIApAQCAtOTMxLDcgKzk0MCw3IEBACiAJCW1pYml0ZW0uZGF0YSA9IGZyYWctPnZhbHVlOwogCiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICYgbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTk2MiwxMCArOTcxLDExIEBACiAJdTE2IHNob3J0cmV0cnksIGxvbmdyZXRyeSwgbGlmZXRpbWU7CiAKIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJnZXQ7CisJbWVtc2V0KCZtaWJpdGVtLCAwLCBzaXplb2YobWliaXRlbSkpOwogCW1pYml0ZW0uZGlkID0gRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFTaG9ydFJldHJ5TGltaXQ7CiAKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJiBtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOwogCiAJaWYgKHJlc3VsdCkgewogCQllcnIgPSAtRUZBVUxUOwpAQCAtOTc5LDcgKzk4OSw3IEBACiAJbWliaXRlbS5kaWQgPSBESURtaWJfZG90MTFtYWNfZG90MTFPcGVyYXRpb25UYWJsZV9kb3QxMUxvbmdSZXRyeUxpbWl0OwogCiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICYgbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTk5NCw3ICsxMDA0LDcgQEAKIAkgICAgRElEbWliX2RvdDExbWFjX2RvdDExT3BlcmF0aW9uVGFibGVfZG90MTFNYXhUcmFuc21pdE1TRFVMaWZldGltZTsKIAogCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwgc2l6ZW9mKG1pYml0ZW0pKTsKLQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmIG1zZyk7CisJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCWVyciA9IC1FRkFVTFQ7CkBAIC0xMDM3LDYgKzEwNDcsOCBAQAogCWludCByZXN1bHQ7CiAJaW50IGVyciA9IDA7CiAKKwltZW1zZXQoJm1pYml0ZW0sIDAsIHNpemVvZihtaWJpdGVtKSk7CisKIAlpZiAoIXdsYW5fd2V4dF93cml0ZSkgewogCQllcnIgPSAoLUVPUE5PVFNVUFApOwogCQlnb3RvIGV4aXQ7CkBAIC0xMDU1LDcgKzEwNjcsNyBAQAogCQltaWJpdGVtLmRhdGEgPSBycnEtPnZhbHVlIC89IDEwMjQ7CiAKIAkJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmIG1zZyk7CisJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOwogCiAJCWlmIChyZXN1bHQpIHsKIAkJCWVyciA9IC1FRkFVTFQ7CkBAIC0xMDY5LDcgKzEwODEsNyBAQAogCiAJCQltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sCiAJCQkgICAgICAgc2l6ZW9mKG1pYml0ZW0pKTsKLQkJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICYgbXNnKTsKKwkJCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOwogCiAJCQlpZiAocmVzdWx0KSB7CiAJCQkJZXJyID0gLUVGQVVMVDsKQEAgLTEwODQsNyArMTA5Niw3IEBACiAKIAkJCW1lbWNweSgmbXNnLm1pYmF0dHJpYnV0ZS5kYXRhLCAmbWliaXRlbSwKIAkJCSAgICAgICBzaXplb2YobWliaXRlbSkpOwotCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJiBtc2cpOworCQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJm1zZyk7CiAKIAkJCWlmIChyZXN1bHQpIHsKIAkJCQllcnIgPSAtRUZBVUxUOwpAQCAtMTExNCw2ICsxMTI2LDcgQEAKIAl9CiAKIAltc2cubXNnY29kZSA9IERJRG1zZ19kb3QxMXJlcV9taWJzZXQ7CisJbWVtc2V0KCZtaWJpdGVtLCAwLCBzaXplb2YobWliaXRlbSkpOwogCW1pYml0ZW0uZGlkID0KIAkgICAgRElEbWliX2RvdDExcGh5X2RvdDExUGh5VHhQb3dlclRhYmxlX2RvdDExQ3VycmVudFR4UG93ZXJMZXZlbDsKIAlpZiAocnJxLT5maXhlZCA9PSAwKQpAQCAtMTEyMSw3ICsxMTM0LDcgQEAKIAllbHNlCiAJCW1pYml0ZW0uZGF0YSA9IHJycS0+dmFsdWU7CiAJbWVtY3B5KCZtc2cubWliYXR0cmlidXRlLmRhdGEsICZtaWJpdGVtLCBzaXplb2YobWliaXRlbSkpOwotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICYgbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKIAogCWlmIChyZXN1bHQpIHsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTExNDMsMTEgKzExNTYsMTMgQEAKIAlpbnQgZXJyID0gMDsKIAogCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYmdldDsKKworCW1lbXNldCgmbWliaXRlbSwgMCwgc2l6ZW9mKG1pYml0ZW0pKTsKIAltaWJpdGVtLmRpZCA9CiAJICAgIERJRG1pYl9kb3QxMXBoeV9kb3QxMVBoeVR4UG93ZXJUYWJsZV9kb3QxMUN1cnJlbnRUeFBvd2VyTGV2ZWw7CiAKIAltZW1jcHkoJm1zZy5taWJhdHRyaWJ1dGUuZGF0YSwgJm1pYml0ZW0sIHNpemVvZihtaWJpdGVtKSk7Ci0JcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJiBtc2cpOworCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICZtc2cpOwogCiAJaWYgKHJlc3VsdCkgewogCQllcnIgPSAtRUZBVUxUOwpAQCAtMTI5NSw3ICsxMzEwLDcgQEAKIAltc2cubWF4Y2hhbm5lbHRpbWUuZGF0YSA9IDI1MDsKIAltc2cubWluY2hhbm5lbHRpbWUuZGF0YSA9IDIwMDsKIAotCXJlc3VsdCA9IHA4MDIxMXJlcV9kb3JlcXVlc3Qod2xhbmRldiwgKHU4ICopICYgbXNnKTsKKwlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKIAlpZiAocmVzdWx0KQogCQllcnIgPSBwcmlzbTJfcmVzdWx0MmVycihtc2cucmVzdWx0Y29kZS5kYXRhKTsKIApAQCAtMTQxNCw3ICsxNDI5LDcgQEAKIAkJbXNnLm1zZ2NvZGUgPSBESURtc2dfZG90MTFyZXFfc2Nhbl9yZXN1bHRzOwogCQltc2cuYnNzaW5kZXguZGF0YSA9IGk7CiAKLQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJiBtc2cpOworCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKIAkJaWYgKChyZXN1bHQgIT0gMCkgfHwKIAkJICAgIChtc2cucmVzdWx0Y29kZS5kYXRhICE9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzKSkgewogCQkJYnJlYWs7CkBAIC0xNDg5LDcgKzE1MDQsNyBAQAogCQltZW1jcHkod2xhbmRldi0+d2VwX2tleXNbaWR4XSwgZXh0LT5rZXksIGV4dC0+a2V5X2xlbik7CiAKIAkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihtc2cpKTsKLQkJcHN0ciA9IChwODAyMTFpdGVtX3BzdHIzMl90ICopICYgbXNnLm1pYmF0dHJpYnV0ZS5kYXRhOworCQlwc3RyID0gKHA4MDIxMWl0ZW1fcHN0cjMyX3QgKikgJm1zZy5taWJhdHRyaWJ1dGUuZGF0YTsKIAkJbWVtY3B5KHBzdHItPmRhdGEuZGF0YSwgZXh0LT5rZXksIGV4dC0+a2V5X2xlbik7CiAJCXBzdHItPmRhdGEubGVuID0gZXh0LT5rZXlfbGVuOwogCQlzd2l0Y2ggKGlkeCkgewpAQCAtMTUxMyw3ICsxNTI4LDcgQEAKIAkJCWJyZWFrOwogCQl9CiAJCW1zZy5tc2djb2RlID0gRElEbXNnX2RvdDExcmVxX21pYnNldDsKLQkJcmVzdWx0ID0gcDgwMjExcmVxX2RvcmVxdWVzdCh3bGFuZGV2LCAodTggKikgJiBtc2cpOworCQlyZXN1bHQgPSBwODAyMTFyZXFfZG9yZXF1ZXN0KHdsYW5kZXYsICh1OCAqKSAmbXNnKTsKIAkJcHJfZGVidWcoInJlc3VsdCAoJWQpXG4iLCByZXN1bHQpOwogCX0KIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTcyOSwxNSArMTc0NCwxMSBAQAogCiBzdHJ1Y3QgaXdfaGFuZGxlcl9kZWYgcDgwMjExd2V4dF9oYW5kbGVyX2RlZiA9IHsKIAkubnVtX3N0YW5kYXJkID0gQVJSQVlfU0laRShwODAyMTF3ZXh0X2hhbmRsZXJzKSwKLQkubnVtX3ByaXZhdGUgPSAwLAotCS5udW1fcHJpdmF0ZV9hcmdzID0gMCwKIAkuc3RhbmRhcmQgPSBwODAyMTF3ZXh0X2hhbmRsZXJzLAotCS5wcml2YXRlID0gTlVMTCwKLQkucHJpdmF0ZV9hcmdzID0gTlVMTCwKIAkuZ2V0X3dpcmVsZXNzX3N0YXRzID0gcDgwMjExd2V4dF9nZXRfd2lyZWxlc3Nfc3RhdHMKIH07CiAKLWludCBwODAyMTF3ZXh0X2V2ZW50X2Fzc29jaWF0ZWQod2xhbmRldmljZV90ICogd2xhbmRldiwgaW50IGFzc29jKQoraW50IHA4MDIxMXdleHRfZXZlbnRfYXNzb2NpYXRlZCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIGludCBhc3NvYykKIHsKIAl1bmlvbiBpd3JlcV9kYXRhIGRhdGE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMmZ3LmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJmdy5jCmluZGV4IGFhYTcwZWQuLjRiZTU0Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMmZ3LmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yZncuYwpAQCAtNTMsNiArNTMsNyBAQAogLyogTG9jYWwgQ29uc3RhbnRzICovCiAKICNkZWZpbmUgUFJJU00yX1VTQl9GV0ZJTEUJInByaXNtMl9ydS5mdyIKK01PRFVMRV9GSVJNV0FSRShQUklTTTJfVVNCX0ZXRklMRSk7CiAKICNkZWZpbmUgUzNEQVRBX01BWAkJNTAwMAogI2RlZmluZSBTM1BMVUdfTUFYCQkyMDAKQEAgLTEwOCw5ICsxMDksOSBAQAogfSBwZGFfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgaW1nY2h1bmsgewotCXUzMiBhZGRyOwkJLyogc3RhcnQgYWRkcmVzcyAqLwotCXUzMiBsZW47CQkvKiBpbiBieXRlcyAqLwotCXUxNiBjcmM7CQkvKiBDUkMgdmFsdWUgKGlmIGl0IGZhbGxzIGF0IGEgY2h1bmsgYm91bmRhcnkpICovCisJdTMyIGFkZHI7CS8qIHN0YXJ0IGFkZHJlc3MgKi8KKwl1MzIgbGVuOwkvKiBpbiBieXRlcyAqLworCXUxNiBjcmM7CS8qIENSQyB2YWx1ZSAoaWYgaXQgZmFsbHMgYXQgYSBjaHVuayBib3VuZGFyeSkgKi8KIAl1OCAqZGF0YTsKIH0gaW1nY2h1bmtfdDsKIApAQCAtMjA0LDcgKzIwNSw3IEBACiAJCXJldHVybiAxOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gInByaXNtMl91c2I6ICVzIHdpbGwgYmUgcHJvY2Vzc2VkLCBzaXplICVkXG4iLAorCXByaW50ayhLRVJOX0lORk8gInByaXNtMl91c2I6ICVzIHdpbGwgYmUgcHJvY2Vzc2VkLCBzaXplICV6dVxuIiwKIAkgICAgICAgUFJJU00yX1VTQl9GV0ZJTEUsIGZ3X2VudHJ5LT5zaXplKTsKIAlwcmlzbTJfZndhcHBseSgoY29uc3Qgc3RydWN0IGloZXhfYmlucmVjICopZndfZW50cnktPmRhdGEsIHdsYW5kZXYpOwogCkBAIC0yNjQsNyArMjY1LDcgQEAKIAkvKiBCdWlsZCB0aGUgUERBIHdlJ3JlIGdvaW5nIHRvIHVzZS4gKi8KIAlpZiAocmVhZF9jYXJkcGRhKCZwZGEsIHdsYW5kZXYpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAibG9hZF9jYXJkcGRhIGZhaWxlZCwgZXhpdGluZy5cbiIpOwotCQlyZXR1cm4gKDEpOworCQlyZXR1cm4gMTsKIAl9CiAKIAkvKiByZWFkIHRoZSBjYXJkJ3MgUFJJLVNVUCAqLwpAQCAtMjg2LDkgKzI4Nyw4IEBACiAKIAkvKiBESURtc2dfZG90MTFyZXFfbWliZ2V0ICovCiAJcHJpc20ybWdtdF9taWJzZXRfbWliZ2V0KHdsYW5kZXYsICZnZXRtc2cpOwotCWlmIChnZXRtc2cucmVzdWx0Y29kZS5kYXRhICE9IFA4MDIxMUVOVU1fcmVzdWx0Y29kZV9zdWNjZXNzKSB7CisJaWYgKGdldG1zZy5yZXN1bHRjb2RlLmRhdGEgIT0gUDgwMjExRU5VTV9yZXN1bHRjb2RlX3N1Y2Nlc3MpCiAJCXByaW50ayhLRVJOX0VSUiAiQ291bGRuJ3QgZmV0Y2ggUFJJLVNVUCBpbmZvXG4iKTsKLQl9CiAKIAkvKiBBbHJlYWR5IGluIGhvc3Qgb3JkZXIgKi8KIAlwcmlpZC5yb2xlID0gKmRhdGErKzsKQEAgLTMwMSwxOSArMzAxLDE5IEBACiAJcmVzdWx0ID0gcmVhZF9md2ZpbGUocmZwdHIpOwogCWlmIChyZXN1bHQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVhZCB0aGUgZGF0YSBleGl0aW5nLlxuIik7Ci0JCXJldHVybiAoMSk7CisJCXJldHVybiAxOwogCX0KIAogCXJlc3VsdCA9IHZhbGlkYXRlX2lkZW50aXR5KCk7CiAKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiSW5jb21wYXRpYmxlIGZpcm13YXJlIGltYWdlLlxuIik7Ci0JCXJldHVybiAoMSk7CisJCXJldHVybiAxOwogCX0KIAogCWlmIChzdGFydGFkZHIgPT0gMHgwMDAwMDAwMCkgewogCQlwcmludGsoS0VSTl9FUlIgIkNhbid0IFJBTSBkb3dubG9hZCBhIEZsYXNoIGltYWdlIVxuIik7Ci0JCXJldHVybiAoMSk7CisJCXJldHVybiAxOwogCX0KIAogCS8qIE1ha2UgdGhlIGltYWdlIGNodW5rcyAqLwpAQCAtMzIzLDIwICszMjMsMjAgQEAKIAlyZXN1bHQgPSBwbHVnaW1hZ2UoZmNodW5rLCBuZmNodW5rcywgczNwbHVnLCBuczNwbHVnLCAmcGRhKTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHBsdWcgZGF0YS5cbiIpOwotCQlyZXR1cm4gKDEpOworCQlyZXR1cm4gMTsKIAl9CiAKIAkvKiBJbnNlcnQgYW55IENSQ3MgKi8KIAlpZiAoY3JjaW1hZ2UoZmNodW5rLCBuZmNodW5rcywgczNjcmMsIG5zM2NyYykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gaW5zZXJ0IGFsbCBDUkNzXG4iKTsKLQkJcmV0dXJuICgxKTsKKwkJcmV0dXJuIDE7CiAJfQogCiAJLyogV3JpdGUgdGhlIGltYWdlICovCiAJcmVzdWx0ID0gd3JpdGVpbWFnZSh3bGFuZGV2LCBmY2h1bmssIG5mY2h1bmtzKTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJhbXdyaXRlIGltYWdlIGRhdGEuXG4iKTsKLQkJcmV0dXJuICgxKTsKKwkJcmV0dXJuIDE7CiAJfQogCiAJLyogY2xlYXIgYW55IGFsbG9jYXRlZCBtZW1vcnkgKi8KQEAgLTQzNCw5ICs0MzQsOCBAQAogewogCWludCBpOwogCWZvciAoaSA9IDA7IGkgPCAqbmZjaHVua3M7IGkrKykgewotCQlpZiAoZmNodW5rW2ldLmRhdGEgIT0gTlVMTCkgeworCQlpZiAoZmNodW5rW2ldLmRhdGEgIT0gTlVMTCkKIAkJCWtmcmVlKGZjaHVua1tpXS5kYXRhKTsKLQkJfQogCX0KIAkqbmZjaHVua3MgPSAwOwogCW1lbXNldChmY2h1bmssIDAsIHNpemVvZigqZmNodW5rKSk7CkBAIC01MzEsNyArNTMwLDcgQEAKIAkJaWYgKGNsaXN0W2ldLmRhdGEgPT0gTlVMTCkgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkgICAgICAgImZhaWxlZCB0byBhbGxvY2F0ZSBpbWFnZSBzcGFjZSwgZXhpdHRpbmcuXG4iKTsKLQkJCXJldHVybiAoMSk7CisJCQlyZXR1cm4gMTsKIAkJfQogCQltZW1zZXQoY2xpc3RbaV0uZGF0YSwgMCwgY2xpc3RbaV0ubGVuKTsKIAkJcHJfZGVidWcoImNodW5rWyVkXTogYWRkcj0weCUwNnggbGVuPSVkXG4iLApAQCAtNTQ1LDE1ICs1NDQsMTQgQEAKIAkJZm9yIChqID0gMDsgaiA8ICpjY250OyBqKyspIHsKIAkJCWNzdGFydCA9IGNsaXN0W2pdLmFkZHI7CiAJCQljZW5kID0gY3N0YXJ0ICsgY2xpc3Rbal0ubGVuIC0gMTsKLQkJCWlmIChzM3N0YXJ0ID49IGNzdGFydCAmJiBzM2VuZCA8PSBjZW5kKSB7CisJCQlpZiAoczNzdGFydCA+PSBjc3RhcnQgJiYgczNlbmQgPD0gY2VuZCkKIAkJCQlicmVhazsKLQkJCX0KIAkJfQogCQlpZiAoKCh1bnNpZ25lZCBpbnQpaikgPj0gKCpjY250KSkgewogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkgICAgICAgInMzcmVjKGE9MHglMDZ4LGw9JWQpLCBubyBjaHVuayBtYXRjaCwgZXhpdGluZy5cbiIsCiAJCQkgICAgICAgczNzdGFydCwgczNkYXRhW2ldLmxlbik7Ci0JCQlyZXR1cm4gKDEpOworCQkJcmV0dXJuIDE7CiAJCX0KIAkJY29mZnNldCA9IHMzc3RhcnQgLSBjc3RhcnQ7CiAJCW1lbWNweShjbGlzdFtqXS5kYXRhICsgY29mZnNldCwgczNkYXRhW2ldLmRhdGEsIHMzZGF0YVtpXS5sZW4pOwpAQCAtNTg2LDcgKzU4NCw3IEBACiAJY3Vycm9mZiA9IDA7CiAJd2hpbGUgKGN1cnJvZmYgPCAoSEZBMzg0eF9QREFfTEVOX01BWCAvIDIpICYmCiAJICAgICAgIGxlMTZfdG9fY3B1KHBkYTE2W2N1cnJvZmYgKyAxXSkgIT0gSEZBMzg0eF9QRFJfRU5EX09GX1BEQSkgewotCQlwZGEtPnJlY1twZGEtPm5yZWNdID0gKGhmYTM4NHhfcGRyZWNfdCAqKSAmIChwZGExNltjdXJyb2ZmXSk7CisJCXBkYS0+cmVjW3BkYS0+bnJlY10gPSAoaGZhMzg0eF9wZHJlY190ICopICYocGRhMTZbY3Vycm9mZl0pOwogCiAJCWlmIChsZTE2X3RvX2NwdShwZGEtPnJlY1twZGEtPm5yZWNdLT5jb2RlKSA9PSBIRkEzODR4X1BEUl9OSUNJRCkgewogCQkJbWVtY3B5KCZuaWNpZCwgJnBkYS0+cmVjW3BkYS0+bnJlY10tPmRhdGEubmljaWQsCkBAIC02MjMsMTAgKzYyMSwxMCBAQAogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJubyBlbmQgcmVjb3JkIGZvdW5kIG9yIGludmFsaWQgbGVuZ3RocyBpbiAiCiAJCSAgICAgICAiUERSIGRhdGEsIGV4aXRpbmcuICV4ICVkXG4iLCBjdXJyb2ZmLCBwZGEtPm5yZWMpOwotCQlyZXR1cm4gKDEpOworCQlyZXR1cm4gMTsKIAl9CiAJaWYgKGxlMTZfdG9fY3B1KHBkYTE2W2N1cnJvZmYgKyAxXSkgPT0gSEZBMzg0eF9QRFJfRU5EX09GX1BEQSkgewotCQlwZGEtPnJlY1twZGEtPm5yZWNdID0gKGhmYTM4NHhfcGRyZWNfdCAqKSAmIChwZGExNltjdXJyb2ZmXSk7CisJCXBkYS0+cmVjW3BkYS0+bnJlY10gPSAoaGZhMzg0eF9wZHJlY190ICopICYocGRhMTZbY3Vycm9mZl0pOwogCQkocGRhLT5ucmVjKSsrOwogCX0KIAlyZXR1cm4gcmVzdWx0OwpAQCAtODY5LDcgKzg2Nyw3IEBACiAJCXB0cjE2ID0gKHUxNiAqKSByZWNvcmQtPmRhdGE7CiAKIAkJLyogcGFyc2Ugd2hhdCB3YXMgYW4gUzMgc3JlYyBhbmQgcHV0IGl0IGluIHRoZSByaWdodCBhcnJheSAqLwotCQlzd2l0Y2goYWRkcikgeworCQlzd2l0Y2ggKGFkZHIpIHsKIAkJY2FzZSBTM0FERFJfU1RBUlQ6CiAJCQlzdGFydGFkZHIgPSAqcHRyMzI7CiAJCQlwcl9kZWJ1ZygiICBTNyBzdGFydCBhZGRyLCByZWNvcmQ9JWQgIgpAQCAtODkwLDcgKzg4OCw3IEBACiAJCQkJICAgICAgczNwbHVnW25zM3BsdWddLmxlbik7CiAKIAkJCW5zM3BsdWcrKzsKLQkJCWlmICggbnMzcGx1ZyA9PSBTM1BMVUdfTUFYICkgeworCQkJaWYgKG5zM3BsdWcgPT0gUzNQTFVHX01BWCkgewogCQkJCXByaW50ayhLRVJOX0VSUiAiUzMgcGx1Z3JlYyBsaW1pdCByZWFjaGVkIC0gYWJvcnRpbmdcbiIpOwogCQkJCXJldHVybiAxOwogCQkJfQpAQCAtOTA3LDcgKzkwNSw3IEBACiAJCQkJICAgICAgczNjcmNbbnMzY3JjXS5sZW4sCiAJCQkJICAgICAgczNjcmNbbnMzY3JjXS5kb3dyaXRlKTsKIAkJCW5zM2NyYysrOwotCQkJaWYgKCBuczNjcmMgPT0gUzNDUkNfTUFYICkgeworCQkJaWYgKG5zM2NyYyA9PSBTM0NSQ19NQVgpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIgIlMzIGNyY3JlYyBsaW1pdCByZWFjaGVkIC0gYWJvcnRpbmdcbiIpOwogCQkJCXJldHVybiAxOwogCQkJfQpAQCAtOTIxLDEyICs5MTksMTIgQEAKIAkJCQkgICAgICByY250LAogCQkJCSAgICAgIHMzaW5mb1tuczNpbmZvXS5sZW4sCiAJCQkJICAgICAgczNpbmZvW25zM2luZm9dLnR5cGUpOwotCQkJaWYgKCAoKHMzaW5mb1tuczNpbmZvXS5sZW4gLSAxKSAqIHNpemVvZih1MTYpKSA+IHNpemVvZihzM2luZm9bbnMzaW5mb10uaW5mbykgKSB7CisJCQlpZiAoKChzM2luZm9bbnMzaW5mb10ubGVuIC0gMSkgKiBzaXplb2YodTE2KSkgPiBzaXplb2YoczNpbmZvW25zM2luZm9dLmluZm8pKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICIgUzMgaW5mb3JlYyBsZW5ndGggdG9vIGxvbmcgLSBhYm9ydGluZ1xuIik7CiAJCQkJcmV0dXJuIDE7CiAJCQl9CiAKLQkJCXRtcGluZm8gPSAodTE2KikmKHMzaW5mb1tuczNpbmZvXS5pbmZvLnZlcnNpb24pOworCQkJdG1waW5mbyA9ICh1MTYgKikmKHMzaW5mb1tuczNpbmZvXS5pbmZvLnZlcnNpb24pOwogCQkJcHJfZGVidWcoIiAgICAgICAgICAgIGluZm89Iik7CiAJCQlmb3IgKGkgPSAwOyBpIDwgczNpbmZvW25zM2luZm9dLmxlbiAtIDE7IGkrKykgewogCQkJCXRtcGluZm9baV0gPSAqKHB0cjE2ICsgMiArIGkpOwpAQCAtOTM1LDcgKzkzMyw3IEBACiAJCQlwcl9kZWJ1ZygiXG4iKTsKIAogCQkJbnMzaW5mbysrOwotCQkJaWYgKCBuczNpbmZvID09IFMzSU5GT19NQVggKSB7CisJCQlpZiAobnMzaW5mbyA9PSBTM0lORk9fTUFYKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJTMyBpbmZvcmVjIGxpbWl0IHJlYWNoZWQgLSBhYm9ydGluZ1xuIik7CiAJCQkJcmV0dXJuIDE7CiAJCQl9CkBAIC05NDUsNyArOTQzLDcgQEAKIAkJCXMzZGF0YVtuczNkYXRhXS5sZW4gPSBsZW47CiAJCQlzM2RhdGFbbnMzZGF0YV0uZGF0YSA9ICh1aW50OF90ICopIHJlY29yZC0+ZGF0YTsKIAkJCW5zM2RhdGErKzsKLQkJCWlmICggbnMzZGF0YSA9PSBTM0RBVEFfTUFYICkgeworCQkJaWYgKG5zM2RhdGEgPT0gUzNEQVRBX01BWCkgewogCQkJCXByaW50ayhLRVJOX0VSUiAiUzMgZGF0YXJlYyBsaW1pdCByZWFjaGVkIC0gYWJvcnRpbmdcbiIpOwogCQkJCXJldHVybiAxOwogCQkJfQpAQCAtMTAyMyw3ICsxMDIxLDcgQEAKIAlyc3RhdGVtc2cuZW5hYmxlLmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX3RydWU7CiAJcnN0YXRlbXNnLmV4ZWFkZHIuZGF0YSA9IHN0YXJ0YWRkcjsKIAotCW1zZ3AgPSAocDgwMjExbXNnX3QgKikgJiByc3RhdGVtc2c7CisJbXNncCA9IChwODAyMTFtc2dfdCAqKSAmcnN0YXRlbXNnOwogCXJlc3VsdCA9IHByaXNtMm1nbXRfcmFtZGxfc3RhdGUod2xhbmRldiwgbXNncCk7CiAJaWYgKHJlc3VsdCkgewogCQlwcmludGsoS0VSTl9FUlIKQEAgLTEwNjMsNyArMTA2MSw3IEBACiAJCQkgICAgKCJTZW5kaW5nIHh4eGRsX3dyaXRlIG1lc3NhZ2UgYWRkcj0lMDZ4IGxlbj0lZC5cbiIsCiAJCQkgICAgIGN1cnJkYWRkciwgY3Vycmxlbik7CiAKLQkJCW1zZ3AgPSAocDgwMjExbXNnX3QgKikgJiByd3JpdGVtc2c7CisJCQltc2dwID0gKHA4MDIxMW1zZ190ICopICZyd3JpdGVtc2c7CiAJCQlyZXN1bHQgPSBwcmlzbTJtZ210X3JhbWRsX3dyaXRlKHdsYW5kZXYsIG1zZ3ApOwogCiAJCQkvKiBDaGVjayB0aGUgcmVzdWx0cyAqLwpAQCAtMTA5MCw3ICsxMDg4LDcgQEAKIAlyc3RhdGVtc2cuZW5hYmxlLmRhdGEgPSBQODAyMTFFTlVNX3RydXRoX2ZhbHNlOwogCXJzdGF0ZW1zZy5leGVhZGRyLmRhdGEgPSAwOwogCi0JbXNncCA9IChwODAyMTFtc2dfdCAqKSAmIHJzdGF0ZW1zZzsKKwltc2dwID0gKHA4MDIxMW1zZ190ICopICZyc3RhdGVtc2c7CiAJcmVzdWx0ID0gcHJpc20ybWdtdF9yYW1kbF9zdGF0ZSh3bGFuZGV2LCBtc2dwKTsKIAlpZiAocmVzdWx0KSB7CiAJCXByaW50ayhLRVJOX0VSUgpAQCAtMTE2MSw3ICsxMTU5LDcgQEAKIAkJCS8qIFNFQyBjb21wYXQgcmFuZ2UgKi8KIAkJCWlmICgoczNpbmZvW2ldLmluZm8uY29tcGF0LnJvbGUgPT0gMSkgJiYKIAkJCSAgICAoczNpbmZvW2ldLmluZm8uY29tcGF0LmlkID09IDQpKSB7Ci0KKwkJCQkvKiBGSVhNRTogaXNuJ3Qgc29tZXRoaW5nIG1pc3NpbmcgaGVyZT8gKi8KIAkJCX0KIAogCQkJYnJlYWs7CkBAIC0xMTk2LDggKzExOTQsOSBAQAogCQkJcHJfZGVidWcoIlVua25vd24gaW5mb3JlYyB0eXBlICVkXG4iLCBzM2luZm9baV0udHlwZSk7CiAJCX0KIAl9Ci0JLy8gd2FsayB0aHJvdWdoCisJLyogd2FsayB0aHJvdWdoICovCiAKLQlpZiAodHJ1bXAgJiYgKHJlc3VsdCAhPSAyKSkgcmVzdWx0ID0gMDsKKwlpZiAodHJ1bXAgJiYgKHJlc3VsdCAhPSAyKSkKKwkJcmVzdWx0ID0gMDsKIAlyZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5jCmluZGV4IDlmN2Q5NmMuLmFkMTYzZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmMKQEAgLTY3LDcgKzY3LDcgQEAKICNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CkBAIC01NDEsNyArNTQxLDcgQEAKIAkvKioqIFNUQVRJT04gKioqLwogCS8qIFNldCB0aGUgUkVRVUlSRUQgY29uZmlnIGl0ZW1zICovCiAJLyogU1NJRCAqLwotCXBzdHIgPSAocDgwMjExcHN0cmRfdCAqKSAmIChtc2ctPnNzaWQuZGF0YSk7CisJcHN0ciA9IChwODAyMTFwc3RyZF90ICopICYobXNnLT5zc2lkLmRhdGEpOwogCXByaXNtMm1nbXRfcHN0cjJieXRlc3RyKHAyYnl0ZXN0ciwgcHN0cik7CiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQ05GT1dOU1NJRCwKIAkJCQkJYnl0ZWJ1ZiwgSEZBMzg0eF9SSURfQ05GT1dOU1NJRF9MRU4pOwpAQCAtMTAzNCw3ICsxMDM0LDcgQEAKIAogCS8qIFNldCB0aGUgc3NpZCAqLwogCW1lbXNldChieXRlYnVmLCAwLCAyNTYpOwotCXBzdHIgPSAocDgwMjExcHN0cmRfdCAqKSAmIChtc2ctPnNzaWQuZGF0YSk7CisJcHN0ciA9IChwODAyMTFwc3RyZF90ICopICYobXNnLT5zc2lkLmRhdGEpOwogCXByaXNtMm1nbXRfcHN0cjJieXRlc3RyKHAyYnl0ZXN0ciwgcHN0cik7CiAJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX3NldGNvbmZpZyhodywgSEZBMzg0eF9SSURfQ05GREVTSVJFRFNTSUQsCiAJCQkJCWJ5dGVidWYsCkBAIC0xMTIzLDggKzExMjMsOCBAQAogCQlpZiAoaHctPnByZXNuaWZmX3BvcnRfdHlwZSAhPSAwKSB7CiAJCQl3b3JkID0gaHctPnByZXNuaWZmX3BvcnRfdHlwZTsKIAkJCXJlc3VsdCA9IGhmYTM4NHhfZHJ2cl9zZXRjb25maWcxNihodywKLQkJCQkJCQkgIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLAotCQkJCQkJCSAgd29yZCk7CisJCQkJCQkgIEhGQTM4NHhfUklEX0NORlBPUlRUWVBFLAorCQkJCQkJICB3b3JkKTsKIAkJCWlmIChyZXN1bHQpIHsKIAkJCQlwcl9kZWJ1ZwogCQkJCSAgICAoImZhaWxlZCB0byByZXN0b3JlIHBvcnR0eXBlLCByZXN1bHQ9JWRcbiIsCkBAIC0xMTU2LDEwICsxMTU2LDggQEAKIAkJCWlmICh3bGFuZGV2LT5uZXRkZXYtPnR5cGUgPT0gQVJQSFJEX0VUSEVSKSB7CiAJCQkJLyogU2F2ZSBtYWNwb3J0IDAgc3RhdGUgKi8KIAkJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfZ2V0Y29uZmlnMTYoaHcsCi0JCQkJCQkJCSAgSEZBMzg0eF9SSURfQ05GUE9SVFRZUEUsCi0JCQkJCQkJCSAgJgotCQkJCQkJCQkgIChody0+Ci0JCQkJCQkJCSAgIHByZXNuaWZmX3BvcnRfdHlwZSkpOworCQkJCQkJICBIRkEzODR4X1JJRF9DTkZQT1JUVFlQRSwKKwkJCQkJCSAgJihody0+cHJlc25pZmZfcG9ydF90eXBlKSk7CiAJCQkJaWYgKHJlc3VsdCkgewogCQkJCQlwcl9kZWJ1ZwogCQkJCQkgICAgKCJmYWlsZWQgdG8gcmVhZCBwb3J0dHlwZSwgcmVzdWx0PSVkXG4iLApAQCAtMTE2OCwxMCArMTE2Niw4IEBACiAJCQkJfQogCQkJCS8qIFNhdmUgdGhlIHdlcGZsYWdzIHN0YXRlICovCiAJCQkJcmVzdWx0ID0gaGZhMzg0eF9kcnZyX2dldGNvbmZpZzE2KGh3LAotCQkJCQkJCQkgIEhGQTM4NHhfUklEX0NORldFUEZMQUdTLAotCQkJCQkJCQkgICYKLQkJCQkJCQkJICAoaHctPgotCQkJCQkJCQkgICBwcmVzbmlmZl93ZXBmbGFncykpOworCQkJCQkJICBIRkEzODR4X1JJRF9DTkZXRVBGTEFHUywKKwkJCQkJCSAgJihody0+cHJlc25pZmZfd2VwZmxhZ3MpKTsKIAkJCQlpZiAocmVzdWx0KSB7CiAJCQkJCXByX2RlYnVnCiAJCQkJCSAgICAoImZhaWxlZCB0byByZWFkIHdlcGZsYWdzLCByZXN1bHQ9JWRcbiIsCkBAIC0xMjE4LDggKzEyMTQsOCBAQAogCQkJLyogU2V0IHRoZSBwb3J0IHR5cGUgdG8gcElic3MgKi8KIAkJCXdvcmQgPSBIRkEzODR4X1BPUlRUWVBFX1BTVUVET0lCU1M7CiAJCQlyZXN1bHQgPSBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCi0JCQkJCQkJICBIRkEzODR4X1JJRF9DTkZQT1JUVFlQRSwKLQkJCQkJCQkgIHdvcmQpOworCQkJCQkJICBIRkEzODR4X1JJRF9DTkZQT1JUVFlQRSwKKwkJCQkJCSAgd29yZCk7CiAJCQlpZiAocmVzdWx0KSB7CiAJCQkJcHJfZGVidWcKIAkJCQkgICAgKCJmYWlsZWQgdG8gc2V0IHBvcnR0eXBlICVkLCByZXN1bHQ9JWRcbiIsCkBAIC0xMjM1LDggKzEyMzEsOCBAQAogCQkJCSAgICBIRkEzODR4X1dFUEZMQUdTX0RJU0FCTEVfUlhDUllQVDsKIAkJCQlyZXN1bHQgPQogCQkJCSAgICBoZmEzODR4X2RydnJfc2V0Y29uZmlnMTYoaHcsCi0JCQkJCQkJICAgICBIRkEzODR4X1JJRF9DTkZXRVBGTEFHUywKLQkJCQkJCQkgICAgIHdvcmQpOworCQkJCQkJICAgICBIRkEzODR4X1JJRF9DTkZXRVBGTEFHUywKKwkJCQkJCSAgICAgd29yZCk7CiAJCQl9CiAKIAkJCWlmIChyZXN1bHQpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuaCBiL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1nbXQuaAppbmRleCBiZGYyYjNlLi4wN2VlY2ViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJtZ210LmgKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWdtdC5oCkBAIC02Myw0MyArNjMsNDMgQEAKIGV4dGVybiBpbnQgcHJpc20yX3Jlc2V0X2hvbGR0aW1lOwogZXh0ZXJuIGludCBwcmlzbTJfcmVzZXRfc2V0dGxldGltZTsKIAotdTMyIHByaXNtMnN0YV9pZnN0YXRlKHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYsIHUzMiBpZnN0YXRlKTsKK3UzMiBwcmlzbTJzdGFfaWZzdGF0ZSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHUzMiBpZnN0YXRlKTsKIAotdm9pZCBwcmlzbTJzdGFfZXZfaW5mbyh3bGFuZGV2aWNlX3QgKiB3bGFuZGV2LCBoZmEzODR4X0luZkZyYW1lX3QgKiBpbmYpOwotdm9pZCBwcmlzbTJzdGFfZXZfdHhleGMod2xhbmRldmljZV90ICogd2xhbmRldiwgdTE2IHN0YXR1cyk7Ci12b2lkIHByaXNtMnN0YV9ldl90eCh3bGFuZGV2aWNlX3QgKiB3bGFuZGV2LCB1MTYgc3RhdHVzKTsKLXZvaWQgcHJpc20yc3RhX2V2X3J4KHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOwotdm9pZCBwcmlzbTJzdGFfZXZfYWxsb2Mod2xhbmRldmljZV90ICogd2xhbmRldik7Cit2b2lkIHByaXNtMnN0YV9ldl9pbmZvKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgaGZhMzg0eF9JbmZGcmFtZV90ICppbmYpOwordm9pZCBwcmlzbTJzdGFfZXZfdHhleGMod2xhbmRldmljZV90ICp3bGFuZGV2LCB1MTYgc3RhdHVzKTsKK3ZvaWQgcHJpc20yc3RhX2V2X3R4KHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdTE2IHN0YXR1cyk7Cit2b2lkIHByaXNtMnN0YV9ldl9yeCh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHN0cnVjdCBza19idWZmICpza2IpOwordm9pZCBwcmlzbTJzdGFfZXZfYWxsb2Mod2xhbmRldmljZV90ICp3bGFuZGV2KTsKIAotaW50IHByaXNtMm1nbXRfbWlic2V0X21pYmdldCh3bGFuZGV2aWNlX3QgKiB3bGFuZGV2LCB2b2lkICptc2dwKTsKLWludCBwcmlzbTJtZ210X3NjYW4od2xhbmRldmljZV90ICogd2xhbmRldiwgdm9pZCAqbXNncCk7Ci1pbnQgcHJpc20ybWdtdF9zY2FuX3Jlc3VsdHMod2xhbmRldmljZV90ICogd2xhbmRldiwgdm9pZCAqbXNncCk7Ci1pbnQgcHJpc20ybWdtdF9zdGFydCh3bGFuZGV2aWNlX3QgKiB3bGFuZGV2LCB2b2lkICptc2dwKTsKLWludCBwcmlzbTJtZ210X3dsYW5zbmlmZih3bGFuZGV2aWNlX3QgKiB3bGFuZGV2LCB2b2lkICptc2dwKTsKLWludCBwcmlzbTJtZ210X3JlYWRwZGEod2xhbmRldmljZV90ICogd2xhbmRldiwgdm9pZCAqbXNncCk7Ci1pbnQgcHJpc20ybWdtdF9yYW1kbF9zdGF0ZSh3bGFuZGV2aWNlX3QgKiB3bGFuZGV2LCB2b2lkICptc2dwKTsKLWludCBwcmlzbTJtZ210X3JhbWRsX3dyaXRlKHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYsIHZvaWQgKm1zZ3ApOwotaW50IHByaXNtMm1nbXRfZmxhc2hkbF9zdGF0ZSh3bGFuZGV2aWNlX3QgKiB3bGFuZGV2LCB2b2lkICptc2dwKTsKLWludCBwcmlzbTJtZ210X2ZsYXNoZGxfd3JpdGUod2xhbmRldmljZV90ICogd2xhbmRldiwgdm9pZCAqbXNncCk7Ci1pbnQgcHJpc20ybWdtdF9hdXRvam9pbih3bGFuZGV2aWNlX3QgKiB3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X21pYnNldF9taWJnZXQod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3NjYW4od2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3NjYW5fcmVzdWx0cyh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfc3RhcnQod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3dsYW5zbmlmZih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfcmVhZHBkYSh3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOworaW50IHByaXNtMm1nbXRfcmFtZGxfc3RhdGUod2xhbmRldmljZV90ICp3bGFuZGV2LCB2b2lkICptc2dwKTsKK2ludCBwcmlzbTJtZ210X3JhbWRsX3dyaXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9mbGFzaGRsX3N0YXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9mbGFzaGRsX3dyaXRlKHdsYW5kZXZpY2VfdCAqd2xhbmRldiwgdm9pZCAqbXNncCk7CitpbnQgcHJpc20ybWdtdF9hdXRvam9pbih3bGFuZGV2aWNlX3QgKndsYW5kZXYsIHZvaWQgKm1zZ3ApOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogKiBjb252ZXJzaW9uIGZ1bmN0aW9ucyBnb2luZyBiZXR3ZWVuIHdsYW4gbWVzc2FnZSBkYXRhIHR5cGVzIGFuZAogKiBQcmlzbTIgZGF0YSB0eXBlcwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIGJ5dGUgYXJlYSBjb252ZXJzaW9uIGZ1bmN0aW9ucyovCi12b2lkIHByaXNtMm1nbXRfcHN0cjJieXRlYXJlYSh1OCAqIGJ5dGVhcmVhLCBwODAyMTFwc3RyZF90ICogcHN0cik7Ci12b2lkIHByaXNtMm1nbXRfYnl0ZWFyZWEycHN0cih1OCAqIGJ5dGVhcmVhLCBwODAyMTFwc3RyZF90ICogcHN0ciwgaW50IGxlbik7Cit2b2lkIHByaXNtMm1nbXRfcHN0cjJieXRlYXJlYSh1OCAqYnl0ZWFyZWEsIHA4MDIxMXBzdHJkX3QgKnBzdHIpOwordm9pZCBwcmlzbTJtZ210X2J5dGVhcmVhMnBzdHIodTggKmJ5dGVhcmVhLCBwODAyMTFwc3RyZF90ICpwc3RyLCBpbnQgbGVuKTsKIAogLyogYnl0ZSBzdHJpbmcgY29udmVyc2lvbiBmdW5jdGlvbnMqLwotdm9pZCBwcmlzbTJtZ210X3BzdHIyYnl0ZXN0cihoZmEzODR4X2J5dGVzdHJfdCAqIGJ5dGVzdHIsIHA4MDIxMXBzdHJkX3QgKiBwc3RyKTsKLXZvaWQgcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIoaGZhMzg0eF9ieXRlc3RyX3QgKiBieXRlc3RyLCBwODAyMTFwc3RyZF90ICogcHN0cik7Cit2b2lkIHByaXNtMm1nbXRfcHN0cjJieXRlc3RyKGhmYTM4NHhfYnl0ZXN0cl90ICpieXRlc3RyLCBwODAyMTFwc3RyZF90ICpwc3RyKTsKK3ZvaWQgcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIoaGZhMzg0eF9ieXRlc3RyX3QgKmJ5dGVzdHIsIHA4MDIxMXBzdHJkX3QgKnBzdHIpOwogCiAvKiBmdW5jdGlvbnMgdG8gY29udmVydCBHcm91cCBBZGRyZXNzZXMgKi8KLXZvaWQgcHJpc20ybWdtdF9nZXRfZ3JwYWRkcih1MzIgZGlkLCBwODAyMTFwc3RyZF90ICogcHN0ciwgaGZhMzg0eF90ICogcHJpdik7Cit2b2lkIHByaXNtMm1nbXRfZ2V0X2dycGFkZHIodTMyIGRpZCwgcDgwMjExcHN0cmRfdCAqcHN0ciwgaGZhMzg0eF90ICpwcml2KTsKIGludCBwcmlzbTJtZ210X3NldF9ncnBhZGRyKHUzMiBkaWQsCi0JCQkgICB1OCAqIHByaXNtMmJ1ZiwgcDgwMjExcHN0cmRfdCAqIHBzdHIsCi0JCQkgICBoZmEzODR4X3QgKiBwcml2KTsKKwkJCSAgIHU4ICpwcmlzbTJidWYsIHA4MDIxMXBzdHJkX3QgKnBzdHIsCisJCQkgICBoZmEzODR4X3QgKnByaXYpOwogaW50IHByaXNtMm1nbXRfZ2V0X2dycGFkZHJfaW5kZXgodTMyIGRpZCk7CiAKIHZvaWQgcHJpc20yc3RhX3Byb2Nlc3NpbmdfZGVmZXIoc3RydWN0IHdvcmtfc3RydWN0ICpkYXRhKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMm1pYi5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWliLmMKaW5kZXggMmZmZjBhMS4uOThhNWQ1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWliLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ybWliLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCiBzdGF0aWMgaW50IHByaXNtMm1pYl93ZXBkZWZhdWx0a2V5KG1pYnJlY190ICptaWIsCiAJCQkJICAgaW50IGlzZ2V0LAotCQkJCSAgIHdsYW5kZXZpY2VfdCAqIHdsYW5kZXYsCisJCQkJICAgd2xhbmRldmljZV90ICp3bGFuZGV2LAogCQkJCSAgIGhmYTM4NHhfdCAqaHcsCiAJCQkJICAgcDgwMjExbXNnX2RvdDExcmVxX21pYnNldF90ICptc2csCiAJCQkJICAgdm9pZCAqZGF0YSk7CkBAIC03MjYsNyArNzI2LDcgQEAKIAkJCWlmIChpc2dldCkgewogCQkJCWhmYTM4NHhfZHJ2cl9nZXRjb25maWcoaHcsCiAJCQkJCQkgICAgICAgSEZBMzg0eF9SSURfQ05GV1BBREFUQSwKLQkJCQkJCSAgICAgICAodTggKikgJiB3cGEsCisJCQkJCQkgICAgICAgKHU4ICopICZ3cGEsCiAJCQkJCQkgICAgICAgc2l6ZW9mKHdwYSkpOwogCQkJCXBzdHItPmxlbiA9IGxlMTZfdG9fY3B1KHdwYS5kYXRhbGVuKTsKIAkJCQltZW1jcHkocHN0ci0+ZGF0YSwgd3BhLmRhdGEsIHBzdHItPmxlbik7CkBAIC03MzYsOSArNzM2LDkgQEAKIAogCQkJCXJlc3VsdCA9CiAJCQkJICAgIGhmYTM4NHhfZHJ2cl9zZXRjb25maWcoaHcsCi0JCQkJCQkJICAgSEZBMzg0eF9SSURfQ05GV1BBREFUQSwKLQkJCQkJCQkgICAodTggKikgJiB3cGEsCi0JCQkJCQkJICAgc2l6ZW9mKHdwYSkpOworCQkJCQkJICAgSEZBMzg0eF9SSURfQ05GV1BBREFUQSwKKwkJCQkJCSAgICh1OCAqKSAmd3BhLAorCQkJCQkJICAgc2l6ZW9mKHdwYSkpOwogCQkJfQogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy93bGFuLW5nL3ByaXNtMnN0YS5jIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yc3RhLmMKaW5kZXggNTBmMzAxZC4uMzFhYzhkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yc3RhLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20yc3RhLmMKQEAgLTY0LDcgKzY0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgpAQCAtMTAyMywxMyArMTAyMywxMyBAQAogCiAJY250ID0gc2l6ZW9mKGhmYTM4NHhfQ29tbVRhbGxpZXMzMl90KSAvIHNpemVvZih1MzIpOwogCWlmIChpbmYtPmZyYW1lbGVuID4gMjIpIHsKLQkJZHN0ID0gKHUzMiAqKSAmIGh3LT50YWxsaWVzOwotCQlzcmMzMiA9ICh1MzIgKikgJiBpbmYtPmluZm8uY29tbXRhbGxpZXMzMjsKKwkJZHN0ID0gKHUzMiAqKSAmaHctPnRhbGxpZXM7CisJCXNyYzMyID0gKHUzMiAqKSAmaW5mLT5pbmZvLmNvbW10YWxsaWVzMzI7CiAJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgZHN0KyssIHNyYzMyKyspCiAJCQkqZHN0ICs9IGxlMzJfdG9fY3B1KCpzcmMzMik7CiAJfSBlbHNlIHsKLQkJZHN0ID0gKHUzMiAqKSAmIGh3LT50YWxsaWVzOwotCQlzcmMxNiA9ICh1MTYgKikgJiBpbmYtPmluZm8uY29tbXRhbGxpZXMxNjsKKwkJZHN0ID0gKHUzMiAqKSAmaHctPnRhbGxpZXM7CisJCXNyYzE2ID0gKHUxNiAqKSAmaW5mLT5pbmZvLmNvbW10YWxsaWVzMTY7CiAJCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKywgZHN0KyssIHNyYzE2KyspCiAJCQkqZHN0ICs9IGxlMTZfdG9fY3B1KCpzcmMxNik7CiAJfQpAQCAtMTI4MCw3ICsxMjgwLDcgQEAKIAkJCQkgICAgIEhGQTM4NHhfUklEX0NVUlJFTlRTU0lELCByZXN1bHQpOwogCQkJCWdvdG8gZmFpbGVkOwogCQkJfQotCQkJcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIoKGhmYTM4NHhfYnl0ZXN0cl90ICopICYgc3NpZCwKKwkJCXByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKChoZmEzODR4X2J5dGVzdHJfdCAqKSAmc3NpZCwKIAkJCQkJCShwODAyMTFwc3RyZF90ICopICYKIAkJCQkJCXdsYW5kZXYtPnNzaWQpOwogCkBAIC0xMzY4LDggKzEzNjgsOCBAQAogCQkJCSBIRkEzODR4X1JJRF9DVVJSRU5UU1NJRCwgcmVzdWx0KTsKIAkJCWdvdG8gZmFpbGVkOwogCQl9Ci0JCXByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKChoZmEzODR4X2J5dGVzdHJfdCAqKSAmIHNzaWQsCi0JCQkJCShwODAyMTFwc3RyZF90ICopICYgd2xhbmRldi0+c3NpZCk7CisJCXByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKChoZmEzODR4X2J5dGVzdHJfdCAqKSAmc3NpZCwKKwkJCQkJKHA4MDIxMXBzdHJkX3QgKikgJndsYW5kZXYtPnNzaWQpOwogCiAJCWh3LT5saW5rX3N0YXR1cyA9IEhGQTM4NHhfTElOS19DT05ORUNURUQ7CiAJCW5ldGlmX2NhcnJpZXJfb24od2xhbmRldi0+bmV0ZGV2KTsKQEAgLTIwMjgsOCArMjAyOCw4IEBACiAJCQkgSEZBMzg0eF9SSURfQ1VSUkVOVFNTSUQsIHJlc3VsdCk7CiAJCWdvdG8gZG9uZTsKIAl9Ci0JcHJpc20ybWdtdF9ieXRlc3RyMnBzdHIoKGhmYTM4NHhfYnl0ZXN0cl90ICopICYgc3NpZCwKLQkJCQkocDgwMjExcHN0cmRfdCAqKSAmIHdsYW5kZXYtPnNzaWQpOworCXByaXNtMm1nbXRfYnl0ZXN0cjJwc3RyKChoZmEzODR4X2J5dGVzdHJfdCAqKSAmc3NpZCwKKwkJCQkocDgwMjExcHN0cmRfdCAqKSAmd2xhbmRldi0+c3NpZCk7CiAKIAkvKiBSZXNjaGVkdWxlIHRpbWVyICovCiAJbW9kX3RpbWVyKCZody0+Y29tbXNxdWFsX3RpbWVyLCBqaWZmaWVzICsgSFopOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zdGFnaW5nL3dsYW4tbmcvcHJpc20ydXNiLmMgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJ1c2IuYwppbmRleCA5ZGRlNjhiLi41MDFkMjdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJ1c2IuYworKysgYi9kcml2ZXJzL3N0YWdpbmcvd2xhbi1uZy9wcmlzbTJ1c2IuYwpAQCAtMjQsOCArMjQsOSBAQAogCSAoMHgwNjZiLCAweDIyMTMsICJMaW5rc3lzIFdVU0IxMnYxLjEgMTFNYnBzIFdMQU4gVVNCIEFkYXB0ZXIiKX0sCiAJe1BSSVNNX1VTQl9ERVZJQ0UKIAkgKDB4MDY3YywgMHgxMDIyLCAiU2llbWVucyBTcGVlZFN0cmVhbSAxMDIyIDExTWJwcyBXTEFOIFVTQiBBZGFwdGVyIil9LAotCXtQUklTTV9VU0JfREVWSUNFKDB4MDQ5ZiwgMHgwMDMzLAotCQkJICAiQ29tcGFxL0ludGVsIFcxMDAgUFJPL1dpcmVsZXNzIDExTWJwcyBtdWx0aXBvcnQgV0xBTiBBZGFwdGVyIil9LAorCXtQUklTTV9VU0JfREVWSUNFCisJICgweDA0OWYsIDB4MDAzMywKKwkgIkNvbXBhcS9JbnRlbCBXMTAwIFBSTy9XaXJlbGVzcyAxMU1icHMgbXVsdGlwb3J0IFdMQU4gQWRhcHRlciIpfSwKIAl7UFJJU01fVVNCX0RFVklDRQogCSAoMHgwNDExLCAweDAwMTYsICJNZWxjbyBXTEktVVNCLVMxMSAxMU1icHMgV0xBTiBBZGFwdGVyIil9LAogCXtQUklTTV9VU0JfREVWSUNFCkBAIC01NSw3ICs1Niw2IEBACiAJICgweDA0ZjEsIDB4MzAwOSwgIkpWQyBNUC1YUDcyNTAgQnVpbHRpbiBVU0IgV0xBTiBBZGFwdGVyIil9LAogCXtQUklTTV9VU0JfREVWSUNFKDB4MDg0NiwgMHg0MTEwLCAiTmV0R2VhciBNQTExMSIpfSwKIAl7UFJJU01fVVNCX0RFVklDRSgweDAzZjMsIDB4MDAyMCwgIkFkYXB0ZWMgQVdOLTgwMjAgVVNCIFdMQU4gQWRhcHRlciIpfSwKLS8qICAgICAge1BSSVNNX1VTQl9ERVZJQ0UoMHgwYWNlLCAweDEyMDEsICJaeURBUyBaRDEyMDEgV2lyZWxlc3MgVVNCIEFkYXB0ZXIiKX0sICovCiAJe1BSSVNNX1VTQl9ERVZJQ0UoMHgyODIxLCAweDMzMDAsICJBU1VTLVdMMTQwIFdpcmVsZXNzIFVTQiBBZGFwdGVyIil9LAogCXtQUklTTV9VU0JfREVWSUNFKDB4MjAwMSwgMHgzNzAwLCAiRFdMLTEyMiBXaXJlbGVzcyBVU0IgQWRhcHRlciIpfSwKIAl7UFJJU01fVVNCX0RFVklDRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vS2NvbmZpZyBiL2RyaXZlcnMvdWlvL0tjb25maWcKaW5kZXggOGFhMTk1NS4uMWRhNzNlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91aW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3Vpby9LY29uZmlnCkBAIC00NCwxNyArNDQsNiBAQAogCiAJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IHRvIGRvIGhlcmUsIHNheSBOLgogCi1jb25maWcgVUlPX1NNWAotCXRyaXN0YXRlICJTTVggY3J5cHRlbmdpbmUgVUlPIGludGVyZmFjZSIKLQloZWxwCi0JICBVc2Vyc3BhY2UgSU8gaW50ZXJmYWNlIHRvIHRoZSBDcnlwdG9ncmFwaHkgZW5naW5lIGZvdW5kIG9uIHRoZQotCSAgTmlhcyBEaWdpdGFsIFNNWCBib2FyZHMuICBUaGVzZSB3aWxsIGJlIGF2YWlsYWJsZSBmcm9tIFE0IDIwMDgKLQkgIGZyb20gaHR0cDovL3d3dy5uaWFzZGlnaXRhbC5jb20uICBUaGUgdXNlcnNwYWNlIHBhcnQgb2YgdGhpcwotCSAgZHJpdmVyIHdpbGwgYmUgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTCBhdCB0aGUgc2FtZSB0aW1lIGFzIHRoZQotCSAgaGFyZHdhcmUgYW5kIHdpbGwgYmUgYWJsZSB0byBiZSBkb3dubG9hZGVkIGZyb20gdGhlIHNhbWUgc2l0ZS4KLQotCSAgSWYgeW91IGNvbXBpbGUgdGhpcyBhcyBhIG1vZHVsZSwgaXQgd2lsbCBiZSBjYWxsZWQgdWlvX3NteC4KLQogY29uZmlnIFVJT19BRUMKIAl0cmlzdGF0ZSAiQUVDIHZpZGVvIHRpbWVzdGFtcCBkZXZpY2UiCiAJZGVwZW5kcyBvbiBQQ0kKQEAgLTc0LDYgKzYzLDcgQEAKIAogY29uZmlnIFVJT19TRVJDT1MzCiAJdHJpc3RhdGUgIkF1dG9tYXRhIFNlcmNvcyBJSUkgUENJIGNhcmQgZHJpdmVyIgorCWRlcGVuZHMgb24gUENJCiAJaGVscAogCSAgVXNlcnNwYWNlIEkvTyBpbnRlcmZhY2UgZm9yIHRoZSBTZXJjb3MgSUlJIFBDSSBjYXJkIGZyb20KIAkgIEF1dG9tYXRhIEdtYkguIFRoZSB1c2Vyc3BhY2UgcGFydCBvZiB0aGlzIGRyaXZlciB3aWxsIGJlCkBAIC04NywxMSArNzcsMjEgQEAKIGNvbmZpZyBVSU9fUENJX0dFTkVSSUMKIAl0cmlzdGF0ZSAiR2VuZXJpYyBkcml2ZXIgZm9yIFBDSSAyLjMgYW5kIFBDSSBFeHByZXNzIGNhcmRzIgogCWRlcGVuZHMgb24gUENJCi0JZGVmYXVsdCBuCiAJaGVscAogCSAgR2VuZXJpYyBkcml2ZXIgdGhhdCB5b3UgY2FuIGJpbmQsIGR5bmFtaWNhbGx5LCB0byBhbnkKIAkgIFBDSSAyLjMgY29tcGxpYW50IGFuZCBQQ0kgRXhwcmVzcyBjYXJkLiBJdCBpcyB1c2VmdWwsCiAJICBwcmltYXJpbHksIGZvciB2aXJ0dWFsaXphdGlvbiBzY2VuYXJpb3MuCiAJICBJZiB5b3UgY29tcGlsZSB0aGlzIGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGNhbGxlZCB1aW9fcGNpX2dlbmVyaWMuCiAKK2NvbmZpZyBVSU9fTkVUWAorCXRyaXN0YXRlICJIaWxzY2hlciBOZXRYIENhcmQgZHJpdmVyIgorCWRlcGVuZHMgb24gUENJCisJaGVscAorCSAgRHJpdmVyIGZvciBIaWxzY2hlciBOZXRYIGJhc2VkIGZpZWxkYnVzIGNhcmRzIChjaWZYLCBjb21YKS4KKwkgIFRoaXMgZHJpdmVyIHJlcXVpcmVzIGEgdXNlcnNwYWNlIGNvbXBvbmVudCB0aGF0IGNvbWVzIHdpdGggdGhlIGNhcmQKKwkgIG9yIGlzIGF2YWlsYWJsZSBmcm9tIEhpbHNjaGVyIChodHRwOi8vd3d3LmhpbHNjaGVyLmNvbSkuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU7IHRoZSBtb2R1bGUKKwkgIHdpbGwgYmUgY2FsbGVkIHVpb19uZXR4LgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vTWFrZWZpbGUgYi9kcml2ZXJzL3Vpby9NYWtlZmlsZQppbmRleCA3M2IyZTc1Li4xOGZkODE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3Vpby9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKIG9iai0kKENPTkZJR19VSU9fQ0lGKQkrPSB1aW9fY2lmLm8KIG9iai0kKENPTkZJR19VSU9fUERSVikJKz0gdWlvX3BkcnYubwogb2JqLSQoQ09ORklHX1VJT19QRFJWX0dFTklSUSkJKz0gdWlvX3BkcnZfZ2VuaXJxLm8KLW9iai0kKENPTkZJR19VSU9fU01YKQkrPSB1aW9fc214Lm8KIG9iai0kKENPTkZJR19VSU9fQUVDKQkrPSB1aW9fYWVjLm8KIG9iai0kKENPTkZJR19VSU9fU0VSQ09TMykJKz0gdWlvX3NlcmNvczMubwogb2JqLSQoQ09ORklHX1VJT19QQ0lfR0VORVJJQykJKz0gdWlvX3BjaV9nZW5lcmljLm8KK29iai0kKENPTkZJR19VSU9fTkVUWCkJKz0gdWlvX25ldHgubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91aW8vdWlvLmMgYi9kcml2ZXJzL3Vpby91aW8uYwppbmRleCBlOTQxMzY3Li40ZGUzODJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Vpby91aW8uYworKysgYi9kcml2ZXJzL3Vpby91aW8uYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJcmV0dXJuIGVudHJ5LT5zaG93KG1lbSwgYnVmKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgbWFwX3N5c2ZzX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIG1hcF9zeXNmc19vcHMgPSB7CiAJLnNob3cgPSBtYXBfdHlwZV9zaG93LAogfTsKIApAQCAtMjE3LDcgKzIxNyw3IEBACiAJcmV0dXJuIGVudHJ5LT5zaG93KHBvcnQsIGJ1Zik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIHBvcnRpb19zeXNmc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBwb3J0aW9fc3lzZnNfb3BzID0gewogCS5zaG93ID0gcG9ydGlvX3R5cGVfc2hvdywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdWlvL3Vpb19uZXR4LmMgYi9kcml2ZXJzL3Vpby91aW9fbmV0eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYmYwYmQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Vpby91aW9fbmV0eC5jCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogVUlPIGRyaXZlciBmb3IgSGlsc2NoZXIgTmV0WCBiYXNlZCBmaWVsZGJ1cyBjYXJkcyAoY2lmWCwgY29tWCkuCisgKiBTZWUgaHR0cDovL3d3dy5oaWxzY2hlci5jb20gZm9yIGRldGFpbHMuCisgKgorICogKEMpIDIwMDcgSGFucyBKLiBLb2NoIDxoamtAbGludXRyb25peC5kZT4KKyAqIChDKSAyMDA4IE1hbnVlbCBUcmF1dCA8bWFudXRAbGludXRyb25peC5kZT4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciBHUEwgdmVyc2lvbiAyIG9ubHkuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0hJTFNDSEVSCQkweDE1Q0YKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRYCTB4MDAwMAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX05YU0JfUENBCTB4MzIzNQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX05YUENBCQkweDMzMzUKKworI2RlZmluZSBEUE1fSE9TVF9JTlRfRU4wCTB4ZmZmMAorI2RlZmluZSBEUE1fSE9TVF9JTlRfU1RBVDAJMHhmZmUwCisKKyNkZWZpbmUgRFBNX0hPU1RfSU5UX01BU0sJMHhlNjAwZmZmZgorI2RlZmluZSBEUE1fSE9TVF9JTlRfR0xPQkFMX0VOCTB4ODAwMDAwMDAKKworc3RhdGljIGlycXJldHVybl90IG5ldHhfaGFuZGxlcihpbnQgaXJxLCBzdHJ1Y3QgdWlvX2luZm8gKmRldl9pbmZvKQoreworCXZvaWQgX19pb21lbSAqaW50X2VuYWJsZV9yZWcgPSBkZXZfaW5mby0+bWVtWzBdLmludGVybmFsX2FkZHIKKwkJCQkJKyBEUE1fSE9TVF9JTlRfRU4wOworCXZvaWQgX19pb21lbSAqaW50X3N0YXR1c19yZWcgPSBkZXZfaW5mby0+bWVtWzBdLmludGVybmFsX2FkZHIKKwkJCQkJKyBEUE1fSE9TVF9JTlRfU1RBVDA7CisKKwkvKiBJcyBvbmUgb2Ygb3VyIGludGVycnVwdHMgZW5hYmxlZCBhbmQgYWN0aXZlID8gKi8KKwlpZiAoIShpb3JlYWQzMihpbnRfZW5hYmxlX3JlZykgJiBpb3JlYWQzMihpbnRfc3RhdHVzX3JlZykKKwkJJiBEUE1fSE9TVF9JTlRfTUFTSykpCisJCXJldHVybiBJUlFfTk9ORTsKKworCS8qIERpc2FibGUgaW50ZXJydXB0ICovCisJaW93cml0ZTMyKGlvcmVhZDMyKGludF9lbmFibGVfcmVnKSAmIH5EUE1fSE9TVF9JTlRfR0xPQkFMX0VOLAorCQlpbnRfZW5hYmxlX3JlZyk7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBuZXR4X3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVpb19pbmZvICppbmZvOworCWludCBiYXI7CisKKwlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVpb19pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChwY2lfZW5hYmxlX2RldmljZShkZXYpKQorCQlnb3RvIG91dF9mcmVlOworCisJaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbnMoZGV2LCAibmV0eCIpKQorCQlnb3RvIG91dF9kaXNhYmxlOworCisJc3dpdGNoIChpZC0+ZGV2aWNlKSB7CisJY2FzZSBQQ0lfREVWSUNFX0lEX0hJTFNDSEVSX05FVFg6CisJCWJhciA9IDA7CisJCWluZm8tPm5hbWUgPSAibmV0eCI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJhciA9IDI7CisJCWluZm8tPm5hbWUgPSAibmV0eF9wbHgiOworCX0KKworCS8qIEJBUjAgb3IgMiBwb2ludHMgdG8gdGhlIGNhcmQncyBkdWFsIHBvcnQgbWVtb3J5ICovCisJaW5mby0+bWVtWzBdLmFkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoZGV2LCBiYXIpOworCWlmICghaW5mby0+bWVtWzBdLmFkZHIpCisJCWdvdG8gb3V0X3JlbGVhc2U7CisJaW5mby0+bWVtWzBdLmludGVybmFsX2FkZHIgPSBpb3JlbWFwKHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGJhciksCisJCQkJCQlwY2lfcmVzb3VyY2VfbGVuKGRldiwgYmFyKSk7CisKKwlpZiAoIWluZm8tPm1lbVswXS5pbnRlcm5hbF9hZGRyKQorCQkJZ290byBvdXRfcmVsZWFzZTsKKworCWluZm8tPm1lbVswXS5zaXplID0gcGNpX3Jlc291cmNlX2xlbihkZXYsIGJhcik7CisJaW5mby0+bWVtWzBdLm1lbXR5cGUgPSBVSU9fTUVNX1BIWVM7CisJaW5mby0+aXJxID0gZGV2LT5pcnE7CisJaW5mby0+aXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQ7CisJaW5mby0+aGFuZGxlciA9IG5ldHhfaGFuZGxlcjsKKwlpbmZvLT52ZXJzaW9uID0gIjAuMC4xIjsKKworCS8qIE1ha2Ugc3VyZSBhbGwgaW50ZXJydXB0cyBhcmUgZGlzYWJsZWQgKi8KKwlpb3dyaXRlMzIoMCwgaW5mby0+bWVtWzBdLmludGVybmFsX2FkZHIgKyBEUE1fSE9TVF9JTlRfRU4wKTsKKworCWlmICh1aW9fcmVnaXN0ZXJfZGV2aWNlKCZkZXYtPmRldiwgaW5mbykpCisJCWdvdG8gb3V0X3VubWFwOworCisJcGNpX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7CisJZGV2X2luZm8oJmRldi0+ZGV2LCAiRm91bmQgJXMgY2FyZCwgcmVnaXN0ZXJlZCBVSU8gZGV2aWNlLlxuIiwKKwkJCQlpbmZvLT5uYW1lKTsKKworCXJldHVybiAwOworCitvdXRfdW5tYXA6CisJaW91bm1hcChpbmZvLT5tZW1bMF0uaW50ZXJuYWxfYWRkcik7CitvdXRfcmVsZWFzZToKKwlwY2lfcmVsZWFzZV9yZWdpb25zKGRldik7CitvdXRfZGlzYWJsZToKKwlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKK291dF9mcmVlOgorCWtmcmVlKGluZm8pOworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCBuZXR4X3BjaV9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdWlvX2luZm8gKmluZm8gPSBwY2lfZ2V0X2RydmRhdGEoZGV2KTsKKworCS8qIERpc2FibGUgYWxsIGludGVycnVwdHMgKi8KKwlpb3dyaXRlMzIoMCwgaW5mby0+bWVtWzBdLmludGVybmFsX2FkZHIgKyBEUE1fSE9TVF9JTlRfRU4wKTsKKwl1aW9fdW5yZWdpc3Rlcl9kZXZpY2UoaW5mbyk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhkZXYpOworCXBjaV9kaXNhYmxlX2RldmljZShkZXYpOworCXBjaV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCWlvdW5tYXAoaW5mby0+bWVtWzBdLmludGVybmFsX2FkZHIpOworCisJa2ZyZWUoaW5mbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBuZXR4X3BjaV9pZHNbXSA9IHsKKwl7CisJCS52ZW5kb3IgPQlQQ0lfVkVORE9SX0lEX0hJTFNDSEVSLAorCQkuZGV2aWNlID0JUENJX0RFVklDRV9JRF9ISUxTQ0hFUl9ORVRYLAorCQkuc3VidmVuZG9yID0JMCwKKwkJLnN1YmRldmljZSA9CTAsCisJfSwKKwl7CisJCS52ZW5kb3IgPQlQQ0lfVkVORE9SX0lEX1BMWCwKKwkJLmRldmljZSA9CVBDSV9ERVZJQ0VfSURfUExYXzkwMzAsCisJCS5zdWJ2ZW5kb3IgPQlQQ0lfVkVORE9SX0lEX1BMWCwKKwkJLnN1YmRldmljZSA9CVBDSV9TVUJERVZJQ0VfSURfTlhTQl9QQ0EsCisJfSwKKwl7CisJCS52ZW5kb3IgPQlQQ0lfVkVORE9SX0lEX1BMWCwKKwkJLmRldmljZSA9CVBDSV9ERVZJQ0VfSURfUExYXzkwMzAsCisJCS5zdWJ2ZW5kb3IgPQlQQ0lfVkVORE9SX0lEX1BMWCwKKwkJLnN1YmRldmljZSA9CVBDSV9TVUJERVZJQ0VfSURfTlhQQ0EsCisJfSwKKwl7IDAsIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZXR4X3BjaV9kcml2ZXIgPSB7CisJLm5hbWUgPSAibmV0eCIsCisJLmlkX3RhYmxlID0gbmV0eF9wY2lfaWRzLAorCS5wcm9iZSA9IG5ldHhfcGNpX3Byb2JlLAorCS5yZW1vdmUgPSBuZXR4X3BjaV9yZW1vdmUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBuZXR4X2luaXRfbW9kdWxlKHZvaWQpCit7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm5ldHhfcGNpX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBuZXR4X2V4aXRfbW9kdWxlKHZvaWQpCit7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZuZXR4X3BjaV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChuZXR4X2luaXRfbW9kdWxlKTsKK21vZHVsZV9leGl0KG5ldHhfZXhpdF9tb2R1bGUpOworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgbmV0eF9wY2lfaWRzKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKK01PRFVMRV9BVVRIT1IoIkhhbnMgSi4gS29jaCwgTWFudWVsIFRyYXV0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Vpby91aW9fc214LmMgYi9kcml2ZXJzL3Vpby91aW9fc214LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MDU0YTYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91aW8vdWlvX3NteC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQwICswLDAgQEAKLS8qCi0gKiBVSU8gU01YIENyeXB0ZW5naW5lIGRyaXZlci4KLSAqCi0gKiAoQykgMjAwOCBOaWFzIERpZ2l0YWwgUC9MIDxibkBuaWFzZGlnaXRhbC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3Vpb19kcml2ZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9pby5oPgotCi0jZGVmaW5lIERSVl9OQU1FICJzbXgtY2UiCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjAzIgotCi0jZGVmaW5lIFNNWF9DU1IgIDB4MDAwMDAwMDAKLSNkZWZpbmUgU01YX0VuRCAgMHgwMDAwMDAwMQotI2RlZmluZSBTTVhfUlVOICAweDAwMDAwMDAyCi0jZGVmaW5lIFNNWF9EUkRZIDB4MDAwMDAwMDQKLSNkZWZpbmUgU01YX0VSUiAgMHgwMDAwMDAwOAotCi1zdGF0aWMgaXJxcmV0dXJuX3Qgc214X2hhbmRsZXIoaW50IGlycSwgc3RydWN0IHVpb19pbmZvICpkZXZfaW5mbykKLXsKLQl2b2lkIF9faW9tZW0gKmNzciA9IGRldl9pbmZvLT5tZW1bMF0uaW50ZXJuYWxfYWRkciArIFNNWF9DU1I7Ci0KLQl1MzIgc3RhdHVzID0gaW9yZWFkMzIoY3NyKTsKLQotCWlmICghKHN0YXR1cyAmIFNNWF9EUkRZKSkKLQkJcmV0dXJuIElSUV9OT05FOwotCi0JLyogRGlzYWJsZSBpbnRlcnJ1cHQgKi8KLQlpb3dyaXRlMzIoc3RhdHVzICYgflNNWF9EUkRZLCBjc3IpOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGludCBfX2RldmluaXQgc214X2NlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQotCWludCByZXQgPSAtRU5PREVWOwotCXN0cnVjdCB1aW9faW5mbyAqaW5mbzsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlZ3M7Ci0KLQlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVpb19pbmZvKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFpbmZvKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCXJlZ3MgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UoZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Ci0JaWYgKCFyZWdzKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiTm8gbWVtb3J5IHJlc291cmNlIHNwZWNpZmllZFxuIik7Ci0JCWdvdG8gb3V0X2ZyZWU7Ci0JfQotCi0JaW5mby0+bWVtWzBdLmFkZHIgPSByZWdzLT5zdGFydDsKLQlpZiAoIWluZm8tPm1lbVswXS5hZGRyKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiSW52YWxpZCBtZW1vcnkgcmVzb3VyY2VcbiIpOwotCQlnb3RvIG91dF9mcmVlOwotCX0KLQotCWluZm8tPm1lbVswXS5zaXplID0gcmVncy0+ZW5kIC0gcmVncy0+c3RhcnQgKyAxOwotCWluZm8tPm1lbVswXS5pbnRlcm5hbF9hZGRyID0gaW9yZW1hcChyZWdzLT5zdGFydCwgaW5mby0+bWVtWzBdLnNpemUpOwotCi0JaWYgKCFpbmZvLT5tZW1bMF0uaW50ZXJuYWxfYWRkcikgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIkNhbid0IHJlbWFwIG1lbW9yeSBhZGRyZXNzIHJhbmdlXG4iKTsKLQkJZ290byBvdXRfZnJlZTsKLQl9Ci0KLQlpbmZvLT5tZW1bMF0ubWVtdHlwZSA9IFVJT19NRU1fUEhZUzsKLQotCWluZm8tPm5hbWUgPSAic214LWNlIjsKLQlpbmZvLT52ZXJzaW9uID0gIjAuMDMiOwotCi0JaW5mby0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShkZXYsIDApOwotCWlmIChpbmZvLT5pcnEgPCAwKSB7Ci0JCXJldCA9IGluZm8tPmlycTsKLQkJZGV2X2VycigmZGV2LT5kZXYsICJObyAob3IgaW52YWxpZCkgSVJRIHJlc291cmNlIHNwZWNpZmllZFxuIik7Ci0JCWdvdG8gb3V0X3VubWFwOwotCX0KLQotCWluZm8tPmlycV9mbGFncyA9IElSUUZfU0hBUkVEOwotCWluZm8tPmhhbmRsZXIgPSBzbXhfaGFuZGxlcjsKLQotCXBsYXRmb3JtX3NldF9kcnZkYXRhKGRldiwgaW5mbyk7Ci0KLQlyZXQgPSB1aW9fcmVnaXN0ZXJfZGV2aWNlKCZkZXYtPmRldiwgaW5mbyk7Ci0KLQlpZiAocmV0KQotCQlnb3RvIG91dF91bm1hcDsKLQotCXJldHVybiAwOwotCi1vdXRfdW5tYXA6Ci0JaW91bm1hcChpbmZvLT5tZW1bMF0uaW50ZXJuYWxfYWRkcik7Ci1vdXRfZnJlZToKLQlrZnJlZShpbmZvKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZleGl0IHNteF9jZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQotewotCXN0cnVjdCB1aW9faW5mbyAqaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7Ci0KLQl1aW9fdW5yZWdpc3Rlcl9kZXZpY2UoaW5mbyk7Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKLQlpb3VubWFwKGluZm8tPm1lbVswXS5pbnRlcm5hbF9hZGRyKTsKLQotCWtmcmVlKGluZm8pOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNteF9jZV9kcml2ZXIgPSB7Ci0JLnByb2JlCQk9IHNteF9jZV9wcm9iZSwKLQkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNteF9jZV9yZW1vdmUpLAotCS5kcml2ZXIJCT0gewotCQkubmFtZQk9IERSVl9OQU1FLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQl9LAotfTsKLQotc3RhdGljIGludCBfX2luaXQgc214X2NlX2luaXRfbW9kdWxlKHZvaWQpCi17Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmc214X2NlX2RyaXZlcik7Ci19Ci1tb2R1bGVfaW5pdChzbXhfY2VfaW5pdF9tb2R1bGUpOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgc214X2NlX2V4aXRfbW9kdWxlKHZvaWQpCi17Ci0JcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNteF9jZV9kcml2ZXIpOwotfQotbW9kdWxlX2V4aXQoc214X2NlX2V4aXRfbW9kdWxlKTsKLQotTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotTU9EVUxFX1ZFUlNJT04oRFJWX1ZFUlNJT04pOwotTU9EVUxFX0FVVEhPUigiQmVuIE5pemV0dGUgPGJuQG5pYXNkaWdpdGFsLmNvbT4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9LY29uZmlnCmluZGV4IDgxYWFjN2YuLjZhNThjYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvS2NvbmZpZwpAQCAtMjEsNiArMjEsNyBAQAogCWRlZmF1bHQgeSBpZiBVU0JfQVJDSF9IQVNfRUhDSQogCWRlZmF1bHQgeSBpZiBQQ01DSUEgJiYgIU0zMlIJCQkjIHNsODExX2NzCiAJZGVmYXVsdCB5IGlmIEFSTQkJCQkjIFNMLTgxMQorCWRlZmF1bHQgeSBpZiBCTEFDS0ZJTgkJCQkjIFNMLTgxMQogCWRlZmF1bHQgeSBpZiBTVVBFUkgJCQkJIyByOGE2NjU5Ny1oY2QKIAlkZWZhdWx0IFBDSQogCkBAIC0zOSw2ICs0MCw3IEBACiAJZGVmYXVsdCB5IGlmIEFSQ0hfUE5YNDAwOCAmJiBJMkMKIAlkZWZhdWx0IHkgaWYgTUZEX1RDNjM5M1hCCiAJZGVmYXVsdCB5IGlmIEFSQ0hfVzkwWDkwMAorCWRlZmF1bHQgeSBpZiBBUkNIX0RBVklOQ0lfREE4WFgKIAkjIFBQQzoKIAlkZWZhdWx0IHkgaWYgU1RCMDN4eHgKIAlkZWZhdWx0IHkgaWYgUFBDX01QQzUyeHgKQEAgLTYxLDcgKzYzLDcgQEAKIAlkZWZhdWx0IHkgaWYgQVJDSF9XOTBYOTAwCiAJZGVmYXVsdCB5IGlmIEFSQ0hfQVQ5MVNBTTlHNDUKIAlkZWZhdWx0IHkgaWYgQVJDSF9NWEMKLQlkZWZhdWx0IHkgaWYgQVJDSF9PTUFQMzRYWAorCWRlZmF1bHQgeSBpZiBBUkNIX09NQVAzCiAJZGVmYXVsdCBQQ0kKIAogIyBBUk0gU0ExMTExIGNoaXBzIGhhdmUgYSBub24tUENJIGJhc2VkICJPSENJLWNvbXBhdGlibGUiIFVTQiBob3N0IGludGVyZmFjZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL01ha2VmaWxlIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKaW5kZXggYmUzYzliOC4uODBiNDAwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvTWFrZWZpbGUKQEAgLTIxLDYgKzIxLDcgQEAKIG9iai0kKENPTkZJR19VU0JfUjhBNjY1OTdfSENEKQkrPSBob3N0Lwogb2JqLSQoQ09ORklHX1VTQl9IV0FfSENEKQkrPSBob3N0Lwogb2JqLSQoQ09ORklHX1VTQl9JU1AxNzYwX0hDRCkJKz0gaG9zdC8KK29iai0kKENPTkZJR19VU0JfSU1YMjFfSENEKQkrPSBob3N0LwogCiBvYmotJChDT05GSUdfVVNCX0M2N1gwMF9IQ0QpCSs9IGM2N3gwMC8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jIGIvZHJpdmVycy91c2IvYXRtL2N4YWNydS5jCmluZGV4IDU2ODAyZDIuLmM4OTk5MGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS9jeGFjcnUuYworKysgYi9kcml2ZXJzL3VzYi9hdG0vY3hhY3J1LmMKQEAgLTUsNiArNSw3IEBACiAgKiAgQ29weXJpZ2h0IChDKSAyMDA0IERhdmlkIFdvb2Rob3VzZSwgRHVuY2FuIFNhbmRzLCBSb21hbiBLYWdhbgogICogIENvcHlyaWdodCAoQykgMjAwNSBEdW5jYW4gU2FuZHMsIFJvbWFuIEthZ2FuIChya2FnYW4gJSBtYWlsICEgcnUpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDA3IFNpbW9uIEFybG90dAorICogIENvcHlyaWdodCAoQykgMjAwOSBTaW1vbiBBcmxvdHQKICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQpAQCAtNDMsNyArNDQsNyBAQAogI2luY2x1ZGUgInVzYmF0bS5oIgogCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IJIlJvbWFuIEthZ2FuLCBEYXZpZCBXb29kaG91c2UsIER1bmNhbiBTYW5kcywgU2ltb24gQXJsb3R0IgotI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMC4zIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMC40IgogI2RlZmluZSBEUklWRVJfREVTQwkiQ29uZXhhbnQgQWNjZXNzUnVubmVyIEFEU0wgVVNCIG1vZGVtIGRyaXZlciIKIAogc3RhdGljIGNvbnN0IGNoYXIgY3hhY3J1X2RyaXZlcl9uYW1lW10gPSAiY3hhY3J1IjsKQEAgLTUyLDYgKzUzLDcgQEAKICNkZWZpbmUgQ1hBQ1JVX0VQX0RBVEEJCTB4MDIJLyogQnVsayBpbi9vdXQgKi8KIAogI2RlZmluZSBDTURfUEFDS0VUX1NJWkUJCTY0CS8qIFNob3VsZCBiZSBtYXhwYWNrZXQoZXApPyAqLworI2RlZmluZSBDTURfTUFYX0NPTkZJRwkJKChDTURfUEFDS0VUX1NJWkUgLyA0IC0gMSkgLyAyKQogCiAvKiBBZGRyZXNzZXMgKi8KICNkZWZpbmUgUExMRkNMS19BRERSCTB4MDAzNTAwNjgKQEAgLTEwNSw2ICsxMDcsMjYgQEAKIAlDTV9SRVFVRVNUX01BWCwKIH07CiAKKy8qIGNvbW1hbmRzIGZvciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBmbGFzaCBtZW1vcnkKKyAqCisgKiByZWFkOiAgcmVzcG9uc2UgaXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaXJzdCA2MCBieXRlcyBvZiBmbGFzaCBtZW1vcnkKKyAqIHdyaXRlOiByZXF1ZXN0IGNvbnRhaW5zIHRoZSA2MCBieXRlcyBvZiBkYXRhIHRvIHdyaXRlIHRvIGZsYXNoIG1lbW9yeQorICogICAgICAgIHJlc3BvbnNlIGlzIHRoZSBjb250ZW50cyBvZiB0aGUgZmlyc3QgNjAgYnl0ZXMgb2YgZmxhc2ggbWVtb3J5CisgKgorICogbGF5b3V0OiBQUCBQUCBWViBWViAgTU0gTU0gTU0gTU0gIE1NIE1NID8/ID8/ICBTUyBTUyBTUyBTUyAgU1MgU1MgU1MgU1MKKyAqICAgICAgICAgU1MgU1MgU1MgU1MgIFNTIFNTIFNTIFNTICAwMCAwMCAwMCAwMCAgMDAgMDAgMDAgMDAgIDAwIDAwIDAwIDAwCisgKiAgICAgICAgIDAwIDAwIDAwIDAwICAwMCAwMCAwMCAwMCAgMDAgMDAgMDAgMDAgIDAwIDAwIDAwIDAwICAwMCAwMCAwMCAwMAorICoKKyAqICAgUDogbGUxNiAgVVNCIFByb2R1Y3QgSUQKKyAqICAgVjogbGUxNiAgVVNCIFZlbmRvciBJRAorICogICBNOiBiZTQ4ICBNQUMgQWRkcmVzcworICogICBTOiBsZTE2ICBBU0NJSSBTZXJpYWwgTnVtYmVyCisgKi8KK2VudW0gY3hhY3J1X2NtX2ZsYXNoIHsKKwlDTV9GTEFTSF9SRUFEID0gMHhhMSwKKwlDTV9GTEFTSF9XUklURSA9IDB4YTIKK307CisKIC8qIHJlcGx5IGNvZGVzIHRvIHRoZSBjb21tYW5kcyBhYm92ZSAqLwogZW51bSBjeGFjcnVfY21fc3RhdHVzIHsKIAlDTV9TVEFUVVNfVU5ERUZJTkVELApAQCAtMTk2LDIzICsyMTgsMzIgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihfbmFtZSwgU19JV1VTUiB8IFNfSVJVR08sIFwKIAljeGFjcnVfc3lzZnNfc2hvd18jI19uYW1lLCBjeGFjcnVfc3lzZnNfc3RvcmVfIyNfbmFtZSkKIAorI2RlZmluZSBDWEFDUlVfU0VUX0lOSVQoX25hbWUpIFwKK3N0YXRpYyBERVZJQ0VfQVRUUihfbmFtZSwgU19JV1VTUiwgXAorCU5VTEwsIGN4YWNydV9zeXNmc19zdG9yZV8jI19uYW1lKQorCiAjZGVmaW5lIENYQUNSVV9BVFRSX0lOSVQoX3ZhbHVlLCBfdHlwZSwgX25hbWUpIFwKIHN0YXRpYyBzc2l6ZV90IGN4YWNydV9zeXNmc19zaG93XyMjX25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBcCiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgXAogeyBcCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7IFwKLQlzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7IFwKLQlzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlID0gdXNiYXRtX2luc3RhbmNlLT5kcml2ZXJfZGF0YTsgXAorCXN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UgPSB0b191c2JhdG1fZHJpdmVyX2RhdGEoXAorCQl0b191c2JfaW50ZXJmYWNlKGRldikpOyBcCitcCisJaWYgKGluc3RhbmNlID09IE5VTEwpIFwKKwkJcmV0dXJuIC1FTk9ERVY7IFwKK1wKIAlyZXR1cm4gY3hhY3J1X3N5c2ZzX3Nob3dhdHRyXyMjX3R5cGUoaW5zdGFuY2UtPmNhcmRfaW5mb1tfdmFsdWVdLCBidWYpOyBcCiB9IFwKIENYQUNSVV9fQVRUUl9JTklUKF9uYW1lKQogCiAjZGVmaW5lIENYQUNSVV9BVFRSX0NSRUFURShfdiwgX3QsIF9uYW1lKSBDWEFDUlVfREVWSUNFX0NSRUFURV9GSUxFKF9uYW1lKQogI2RlZmluZSBDWEFDUlVfQ01EX0NSRUFURShfbmFtZSkgICAgICAgICAgQ1hBQ1JVX0RFVklDRV9DUkVBVEVfRklMRShfbmFtZSkKKyNkZWZpbmUgQ1hBQ1JVX1NFVF9DUkVBVEUoX25hbWUpICAgICAgICAgIENYQUNSVV9ERVZJQ0VfQ1JFQVRFX0ZJTEUoX25hbWUpCiAjZGVmaW5lIENYQUNSVV9fQVRUUl9DUkVBVEUoX25hbWUpICAgICAgICBDWEFDUlVfREVWSUNFX0NSRUFURV9GSUxFKF9uYW1lKQogCiAjZGVmaW5lIENYQUNSVV9BVFRSX1JFTU9WRShfdiwgX3QsIF9uYW1lKSBDWEFDUlVfREVWSUNFX1JFTU9WRV9GSUxFKF9uYW1lKQogI2RlZmluZSBDWEFDUlVfQ01EX1JFTU9WRShfbmFtZSkgICAgICAgICAgQ1hBQ1JVX0RFVklDRV9SRU1PVkVfRklMRShfbmFtZSkKKyNkZWZpbmUgQ1hBQ1JVX1NFVF9SRU1PVkUoX25hbWUpICAgICAgICAgIENYQUNSVV9ERVZJQ0VfUkVNT1ZFX0ZJTEUoX25hbWUpCiAjZGVmaW5lIENYQUNSVV9fQVRUUl9SRU1PVkUoX25hbWUpICAgICAgICBDWEFDUlVfREVWSUNFX1JFTU9WRV9GSUxFKF9uYW1lKQogCiBzdGF0aWMgc3NpemVfdCBjeGFjcnVfc3lzZnNfc2hvd2F0dHJfdTMyKHUzMiB2YWx1ZSwgY2hhciAqYnVmKQpAQCAtMjY3LDEyICsyOTgsMTIgQEAKIHN0YXRpYyBzc2l6ZV90IGN4YWNydV9zeXNmc19zaG93YXR0cl9NT0RVKHUzMiB2YWx1ZSwgY2hhciAqYnVmKQogewogCXN0YXRpYyBjaGFyICpzdHJbXSA9IHsKLQkJCU5VTEwsCisJCQkiIiwKIAkJCSJBTlNJIFQxLjQxMyIsCiAJCQkiSVRVLVQgRy45OTIuMSAoRy5ETVQpIiwKIAkJCSJJVFUtVCBHLjk5Mi4yIChHLkxJVEUpIgogCX07Ci0JaWYgKHVubGlrZWx5KHZhbHVlID49IEFSUkFZX1NJWkUoc3RyKSB8fCBzdHJbdmFsdWVdID09IE5VTEwpKQorCWlmICh1bmxpa2VseSh2YWx1ZSA+PSBBUlJBWV9TSVpFKHN0cikpKQogCQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwgdmFsdWUpOwogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBzdHJbdmFsdWVdKTsKIH0KQEAgLTI4OCwyMiArMzE5LDI4IEBACiBzdGF0aWMgc3NpemVfdCBjeGFjcnVfc3lzZnNfc2hvd19tYWNfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKLQlzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0Jc3RydWN0IGF0bV9kZXYgKmF0bV9kZXYgPSB1c2JhdG1faW5zdGFuY2UtPmF0bV9kZXY7CisJc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSA9IHRvX3VzYmF0bV9kcml2ZXJfZGF0YSgKKwkJCXRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CiAKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlcE1cbiIsIGF0bV9kZXYtPmVzaSk7CisJaWYgKGluc3RhbmNlID09IE5VTEwgfHwgaW5zdGFuY2UtPnVzYmF0bS0+YXRtX2RldiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVwTVxuIiwKKwkJaW5zdGFuY2UtPnVzYmF0bS0+YXRtX2Rldi0+ZXNpKTsKIH0KIAogc3RhdGljIHNzaXplX3QgY3hhY3J1X3N5c2ZzX3Nob3dfYWRzbF9zdGF0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKLQlzdHJ1Y3QgdXNiYXRtX2RhdGEgKnVzYmF0bV9pbnN0YW5jZSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0Jc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSA9IHVzYmF0bV9pbnN0YW5jZS0+ZHJpdmVyX2RhdGE7Ci0JdTMyIHZhbHVlID0gaW5zdGFuY2UtPmNhcmRfaW5mb1tDWElORl9MSU5FX1NUQVJUQUJMRV07Ci0KIAlzdGF0aWMgY2hhciAqc3RyW10gPSB7ICJydW5uaW5nIiwgInN0b3BwZWQiIH07CisJc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSA9IHRvX3VzYmF0bV9kcml2ZXJfZGF0YSgKKwkJCXRvX3VzYl9pbnRlcmZhY2UoZGV2KSk7CisJdTMyIHZhbHVlOworCisJaWYgKGluc3RhbmNlID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJdmFsdWUgPSBpbnN0YW5jZS0+Y2FyZF9pbmZvW0NYSU5GX0xJTkVfU1RBUlRBQkxFXTsKIAlpZiAodW5saWtlbHkodmFsdWUgPj0gQVJSQVlfU0laRShzdHIpKSkKIAkJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsIHZhbHVlKTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlc1xuIiwgc3RyW3ZhbHVlXSk7CkBAIC0zMTIsOSArMzQ5LDggQEAKIHN0YXRpYyBzc2l6ZV90IGN4YWNydV9zeXNmc19zdG9yZV9hZHNsX3N0YXRlKHN0cnVjdCBkZXZpY2UgKmRldiwKIAlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7Ci0Jc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2UgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwotCXN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UgPSB1c2JhdG1faW5zdGFuY2UtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UgPSB0b191c2JhdG1fZHJpdmVyX2RhdGEoCisJCQl0b191c2JfaW50ZXJmYWNlKGRldikpOwogCWludCByZXQ7CiAJaW50IHBvbGwgPSAtMTsKIAljaGFyIHN0cl9jbWRbOF07CkBAIC0zMjgsMTMgKzM2NCwxNiBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXQgPSAwOwogCisJaWYgKGluc3RhbmNlID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmaW5zdGFuY2UtPmFkc2xfc3RhdGVfc2VyaWFsaXplKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAogCWlmICghc3RyY21wKHN0cl9jbWQsICJzdG9wIikgfHwgIXN0cmNtcChzdHJfY21kLCAicmVzdGFydCIpKSB7CiAJCXJldCA9IGN4YWNydV9jbShpbnN0YW5jZSwgQ01fUkVRVUVTVF9DSElQX0FEU0xfTElORV9TVE9QLCBOVUxMLCAwLCBOVUxMLCAwKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCWF0bV9lcnIodXNiYXRtX2luc3RhbmNlLCAiY2hhbmdlIGFkc2wgc3RhdGU6IgorCQkJYXRtX2VycihpbnN0YW5jZS0+dXNiYXRtLCAiY2hhbmdlIGFkc2wgc3RhdGU6IgogCQkJCSIgQ0hJUF9BRFNMX0xJTkVfU1RPUCByZXR1cm5lZCAlZFxuIiwgcmV0KTsKIAogCQkJcmV0ID0gLUVJTzsKQEAgLTM1NCw3ICszOTMsNyBAQAogCWlmICghc3RyY21wKHN0cl9jbWQsICJzdGFydCIpIHx8ICFzdHJjbXAoc3RyX2NtZCwgInJlc3RhcnQiKSkgewogCQlyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0hJUF9BRFNMX0xJTkVfU1RBUlQsIE5VTEwsIDAsIE5VTEwsIDApOwogCQlpZiAocmV0IDwgMCkgewotCQkJYXRtX2Vycih1c2JhdG1faW5zdGFuY2UsICJjaGFuZ2UgYWRzbCBzdGF0ZToiCisJCQlhdG1fZXJyKGluc3RhbmNlLT51c2JhdG0sICJjaGFuZ2UgYWRzbCBzdGF0ZToiCiAJCQkJIiBDSElQX0FEU0xfTElORV9TVEFSVCByZXR1cm5lZCAlZFxuIiwgcmV0KTsKIAogCQkJcmV0ID0gLUVJTzsKQEAgLTQwNyw2ICs0NDYsNzIgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKiBDTV9SRVFVRVNUX0NBUkRfREFUQV9HRVQgdGltZXMgb3V0LCBzbyBubyBzaG93IGF0dHJpYnV0ZSAqLworCitzdGF0aWMgc3NpemVfdCBjeGFjcnVfc3lzZnNfc3RvcmVfYWRzbF9jb25maWcoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlID0gdG9fdXNiYXRtX2RyaXZlcl9kYXRhKAorCQkJdG9fdXNiX2ludGVyZmFjZShkZXYpKTsKKwlpbnQgbGVuID0gc3RybGVuKGJ1Zik7CisJaW50IHJldCwgcG9zLCBudW07CisJX19sZTMyIGRhdGFbQ01EX1BBQ0tFVF9TSVpFIC8gNF07CisKKwlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCXJldHVybiAtRUFDQ0VTOworCisJaWYgKGluc3RhbmNlID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJcG9zID0gMDsKKwludW0gPSAwOworCXdoaWxlIChwb3MgPCBsZW4pIHsKKwkJaW50IHRtcDsKKwkJdTMyIGluZGV4OworCQl1MzIgdmFsdWU7CisKKwkJcmV0ID0gc3NjYW5mKGJ1ZiArIHBvcywgIiV4PSV4JW4iLCAmaW5kZXgsICZ2YWx1ZSwgJnRtcCk7CisJCWlmIChyZXQgPCAyKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChpbmRleCA8IDAgfHwgaW5kZXggPiAweDdmKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXBvcyArPSB0bXA7CisKKwkJLyogc2tpcCB0cmFpbGluZyBuZXdsaW5lICovCisJCWlmIChidWZbcG9zXSA9PSAnXG4nICYmIHBvcyA9PSBsZW4tMSkKKwkJCXBvcysrOworCisJCWRhdGFbbnVtICogMiArIDFdID0gY3B1X3RvX2xlMzIoaW5kZXgpOworCQlkYXRhW251bSAqIDIgKyAyXSA9IGNwdV90b19sZTMyKHZhbHVlKTsKKwkJbnVtKys7CisKKwkJLyogc2VuZCBjb25maWcgdmFsdWVzIHdoZW4gZGF0YSBidWZmZXIgaXMgZnVsbAorCQkgKiBvciBubyBtb3JlIGRhdGEKKwkJICovCisJCWlmIChwb3MgPj0gbGVuIHx8IG51bSA+PSBDTURfTUFYX0NPTkZJRykgeworCQkJY2hhciBsb2dbQ01EX01BWF9DT05GSUcgKiAxMiArIDFdOyAvKiAlMDJ4PSUwOHggKi8KKworCQkJZGF0YVswXSA9IGNwdV90b19sZTMyKG51bSk7CisJCQlyZXQgPSBjeGFjcnVfY20oaW5zdGFuY2UsIENNX1JFUVVFU1RfQ0FSRF9EQVRBX1NFVCwKKwkJCQkodTggKikgZGF0YSwgNCArIG51bSAqIDgsIE5VTEwsIDApOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlhdG1fZXJyKGluc3RhbmNlLT51c2JhdG0sCisJCQkJCSJzZXQgY2FyZCBkYXRhIHJldHVybmVkICVkXG4iLCByZXQpOworCQkJCXJldHVybiAtRUlPOworCQkJfQorCisJCQlmb3IgKHRtcCA9IDA7IHRtcCA8IG51bTsgdG1wKyspCisJCQkJc25wcmludGYobG9nICsgdG1wKjEyLCAxMywgIiAlMDJ4PSUwOHgiLAorCQkJCQlsZTMyX3RvX2NwdShkYXRhW3RtcCAqIDIgKyAxXSksCisJCQkJCWxlMzJfdG9fY3B1KGRhdGFbdG1wICogMiArIDJdKSk7CisJCQlhdG1faW5mbyhpbnN0YW5jZS0+dXNiYXRtLCAiY29uZmlnJXNcbiIsIGxvZyk7CisJCQludW0gPSAwOworCQl9CisJfQorCisJcmV0dXJuIGxlbjsKK30KKwogLyoKICAqIEFsbCBkZXZpY2UgYXR0cmlidXRlcyBhcmUgaW5jbHVkZWQgaW4gQ1hBQ1JVX0FMTF9GSUxFUwogICogc28gdGhhdCB0aGUgc2FtZSBsaXN0IGNhbiBiZSB1c2VkIG11bHRpcGxlIHRpbWVzOgpAQCAtNDQyLDcgKzU0Nyw4IEBACiBDWEFDUlVfQVRUUl8jI19hY3Rpb24oQ1hJTkZfQURTTF9IRUFERU5ELCAgICAgICAgICAgICAgdTMyLCAgYWRzbF9oZWFkZW5kKTsgXAogQ1hBQ1JVX0FUVFJfIyNfYWN0aW9uKENYSU5GX0FEU0xfSEVBREVORF9FTlZJUk9OTUVOVCwgIHUzMiwgIGFkc2xfaGVhZGVuZF9lbnZpcm9ubWVudCk7IFwKIENYQUNSVV9BVFRSXyMjX2FjdGlvbihDWElORl9DT05UUk9MTEVSX1ZFUlNJT04sICAgICAgICB1MzIsICBhZHNsX2NvbnRyb2xsZXJfdmVyc2lvbik7IFwKLUNYQUNSVV9DTURfIyNfYWN0aW9uKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHNsX3N0YXRlKTsKK0NYQUNSVV9DTURfIyNfYWN0aW9uKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZHNsX3N0YXRlKTsgXAorQ1hBQ1JVX1NFVF8jI19hY3Rpb24oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkc2xfY29uZmlnKTsKIAogQ1hBQ1JVX0FMTF9GSUxFUyhJTklUKTsKIApAQCAtNTk2LDcgKzcwMiw3IEBACiAJbGVuID0gcmV0IC8gNDsKIAlmb3IgKG9mZmIgPSAwOyBvZmZiIDwgbGVuOyApIHsKIAkJaW50IGwgPSBsZTMyX3RvX2NwdShidWZbb2ZmYisrXSk7Ci0JCWlmIChsID4gc3RyaWRlIHx8IGwgPiAobGVuIC0gb2ZmYikgLyAyKSB7CisJCWlmIChsIDwgMCB8fCBsID4gc3RyaWRlIHx8IGwgPiAobGVuIC0gb2ZmYikgLyAyKSB7CiAJCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJCXVzYl9lcnIoaW5zdGFuY2UtPnVzYmF0bSwgImludmFsaWQgZGF0YSBsZW5ndGggZnJvbSBjbSAlI3g6ICVkXG4iLAogCQkJCQljbSwgbCk7CkBAIC02NDksOSArNzU1LDYgQEAKIHsKIAlzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlID0gdXNiYXRtX2luc3RhbmNlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHVzYmF0bV9pbnN0YW5jZS0+dXNiX2ludGY7Ci0JLyoKLQlzdHJ1Y3QgYXRtX2RldiAqYXRtX2RldiA9IHVzYmF0bV9pbnN0YW5jZS0+YXRtX2RldjsKLQkqLwogCWludCByZXQ7CiAJaW50IHN0YXJ0X3BvbGxpbmcgPSAxOwogCkBAIC02OTcsNiArODAwLDkgQEAKIAltdXRleF91bmxvY2soJmluc3RhbmNlLT5wb2xsX3N0YXRlX3NlcmlhbGl6ZSk7CiAJbXV0ZXhfdW5sb2NrKCZpbnN0YW5jZS0+YWRzbF9zdGF0ZV9zZXJpYWxpemUpOwogCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMlZDogJXMgJXBNXG4iLCBhdG1fZGV2LT50eXBlLCBhdG1fZGV2LT5udW1iZXIsCisJCQl1c2JhdG1faW5zdGFuY2UtPmRlc2NyaXB0aW9uLCBhdG1fZGV2LT5lc2kpOworCiAJaWYgKHN0YXJ0X3BvbGxpbmcpCiAJCWN4YWNydV9wb2xsX3N0YXR1cygmaW5zdGFuY2UtPnBvbGxfd29yay53b3JrKTsKIAlyZXR1cm4gMDsKQEAgLTg3MywxMSArOTc5LDkgQEAKIAogc3RhdGljIHZvaWQgY3hhY3J1X3VwbG9hZF9maXJtd2FyZShzdHJ1Y3QgY3hhY3J1X2RhdGEgKmluc3RhbmNlLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsCi0JCQkJICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpicCwKLQkJCQkgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmNmKQorCQkJCSAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqYnApCiB7CiAJaW50IHJldDsKLQlpbnQgb2ZmOwogCXN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtID0gaW5zdGFuY2UtPnVzYmF0bTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiA9IHVzYmF0bS0+dXNiX2RldjsKIAlfX2xlMTYgc2lnbmF0dXJlW10gPSB7IHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IsCkBAIC05MTEsNiArMTAxNSw3IEBACiAJfQogCiAJLyogRmlybXdhcmUgKi8KKwl1c2JfaW5mbyh1c2JhdG0sICJsb2FkaW5nIGZpcm13YXJlXG4iKTsKIAlyZXQgPSBjeGFjcnVfZncodXNiX2RldiwgRldfV1JJVEVfTUVNLCAweDIsIDB4MCwgRldfQUREUiwgZnctPmRhdGEsIGZ3LT5zaXplKTsKIAlpZiAocmV0KSB7CiAJCXVzYl9lcnIodXNiYXRtLCAiRmlybXdhcmUgdXBsb2FkIGZhaWxlZDogJWRcbiIsIHJldCk7CkBAIC05MTksNiArMTAyNCw3IEBACiAKIAkvKiBCb290IFJPTSBwYXRjaCAqLwogCWlmIChpbnN0YW5jZS0+bW9kZW1fdHlwZS0+Ym9vdF9yb21fcGF0Y2gpIHsKKwkJdXNiX2luZm8odXNiYXRtLCAibG9hZGluZyBib290IFJPTSBwYXRjaFxuIik7CiAJCXJldCA9IGN4YWNydV9mdyh1c2JfZGV2LCBGV19XUklURV9NRU0sIDB4MiwgMHgwLCBCUl9BRERSLCBicC0+ZGF0YSwgYnAtPnNpemUpOwogCQlpZiAocmV0KSB7CiAJCQl1c2JfZXJyKHVzYmF0bSwgIkJvb3QgUk9NIHBhdGNoaW5nIGZhaWxlZDogJWRcbiIsIHJldCk7CkBAIC05MzMsNiArMTAzOSw3IEBACiAJCXJldHVybjsKIAl9CiAKKwl1c2JfaW5mbyh1c2JhdG0sICJzdGFydGluZyBkZXZpY2VcbiIpOwogCWlmIChpbnN0YW5jZS0+bW9kZW1fdHlwZS0+Ym9vdF9yb21fcGF0Y2gpIHsKIAkJdmFsID0gY3B1X3RvX2xlMzIoQlJfQUREUik7CiAJCXJldCA9IGN4YWNydV9mdyh1c2JfZGV2LCBGV19XUklURV9NRU0sIDB4MiwgMHgwLCBCUl9TVEFDS19BRERSLCAodTggKikgJnZhbCwgNCk7CkBAIC05NTgsMjYgKzEwNjUsNiBAQAogCQl1c2JfZXJyKHVzYmF0bSwgIm1vZGVtIGZhaWxlZCB0byBpbml0aWFsaXplOiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJuOwogCX0KLQotCS8qIExvYWQgY29uZmlnIGRhdGEgKGxlMzIpLCBkb2luZyBvbmUgcGFja2V0IGF0IGEgdGltZSAqLwotCWlmIChjZikKLQkJZm9yIChvZmYgPSAwOyBvZmYgPCBjZi0+c2l6ZSAvIDQ7ICkgewotCQkJX19sZTMyIGJ1ZltDTURfUEFDS0VUX1NJWkUgLyA0IC0gMV07Ci0JCQlpbnQgaSwgbGVuID0gbWluX3QoaW50LCBjZi0+c2l6ZSAvIDQgLSBvZmYsIENNRF9QQUNLRVRfU0laRSAvIDQgLyAyIC0gMSk7Ci0JCQlidWZbMF0gPSBjcHVfdG9fbGUzMihsZW4pOwotCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrLCBvZmYrKykgewotCQkJCWJ1ZltpICogMiArIDFdID0gY3B1X3RvX2xlMzIob2ZmKTsKLQkJCQltZW1jcHkoYnVmICsgaSAqIDIgKyAyLCBjZi0+ZGF0YSArIG9mZiAqIDQsIDQpOwotCQkJfQotCQkJcmV0ID0gY3hhY3J1X2NtKGluc3RhbmNlLCBDTV9SRVFVRVNUX0NBUkRfREFUQV9TRVQsCi0JCQkJCSh1OCAqKSBidWYsIGxlbiwgTlVMTCwgMCk7Ci0JCQlpZiAocmV0IDwgMCkgewotCQkJCXVzYl9lcnIodXNiYXRtLCAibG9hZCBjb25maWcgZGF0YSBmYWlsZWQ6ICVkXG4iLCByZXQpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfQotCi0JbXNsZWVwX2ludGVycnVwdGlibGUoNDAwMCk7CiB9CiAKIHN0YXRpYyBpbnQgY3hhY3J1X2ZpbmRfZmlybXdhcmUoc3RydWN0IGN4YWNydV9kYXRhICppbnN0YW5jZSwKQEAgLTEwMDMsNyArMTA5MCw3IEBACiBzdGF0aWMgaW50IGN4YWNydV9oZWF2eV9pbml0KHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtX2luc3RhbmNlLAogCQkJICAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2ludGYpCiB7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgKmJwLCAqY2Y7CisJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgKmJwOwogCXN0cnVjdCBjeGFjcnVfZGF0YSAqaW5zdGFuY2UgPSB1c2JhdG1faW5zdGFuY2UtPmRyaXZlcl9kYXRhOwogCiAJaW50IHJldCA9IGN4YWNydV9maW5kX2Zpcm13YXJlKGluc3RhbmNlLCAiZnciLCAmZncpOwpAQCAtMTAyMSwxMyArMTEwOCw4IEBACiAJCX0KIAl9CiAKLQlpZiAoY3hhY3J1X2ZpbmRfZmlybXdhcmUoaW5zdGFuY2UsICJjZiIsICZjZikpCQkvKiBvcHRpb25hbCAqLwotCQljZiA9IE5VTEw7CisJY3hhY3J1X3VwbG9hZF9maXJtd2FyZShpbnN0YW5jZSwgZncsIGJwKTsKIAotCWN4YWNydV91cGxvYWRfZmlybXdhcmUoaW5zdGFuY2UsIGZ3LCBicCwgY2YpOwotCi0JaWYgKGNmKQotCQlyZWxlYXNlX2Zpcm13YXJlKGNmKTsKIAlpZiAoaW5zdGFuY2UtPm1vZGVtX3R5cGUtPmJvb3Rfcm9tX3BhdGNoKQogCQlyZWxlYXNlX2Zpcm13YXJlKGJwKTsKIAlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uYyBiL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uYwppbmRleCBmYmVhODU2Li45YjUzZThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmMKKysrIGIvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5jCkBAIC0xMzMzLDYgKzEzMzMsNyBAQAogCWlmIChpbnN0YW5jZS0+YXRtX2RldikgewogCQlzeXNmc19yZW1vdmVfbGluaygmaW5zdGFuY2UtPmF0bV9kZXYtPmNsYXNzX2Rldi5rb2JqLCAiZGV2aWNlIik7CiAJCWF0bV9kZXZfZGVyZWdpc3RlcihpbnN0YW5jZS0+YXRtX2Rldik7CisJCWluc3RhbmNlLT5hdG1fZGV2ID0gTlVMTDsKIAl9CiAKIAl1c2JhdG1fcHV0X2luc3RhbmNlKGluc3RhbmNlKTsJLyogdGFrZW4gaW4gdXNiYXRtX3VzYl9wcm9iZSAqLwpAQCAtMTM0OCw3ICsxMzQ5LDcgQEAKIHsKIAlkYmcoIiVzOiBkcml2ZXIgdmVyc2lvbiAlcyIsIF9fZnVuY19fLCBEUklWRVJfVkVSU0lPTik7CiAKLQlpZiAoc2l6ZW9mKHN0cnVjdCB1c2JhdG1fY29udHJvbCkgPiBzaXplb2YoKChzdHJ1Y3Qgc2tfYnVmZiAqKSAwKS0+Y2IpKSB7CisJaWYgKHNpemVvZihzdHJ1Y3QgdXNiYXRtX2NvbnRyb2wpID4gRklFTERfU0laRU9GKHN0cnVjdCBza19idWZmLCBjYikpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlcyB1bnVzYWJsZSB3aXRoIHRoaXMga2VybmVsIVxuIiwgdXNiYXRtX2RyaXZlcl9uYW1lKTsKIAkJcmV0dXJuIC1FSU87CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5oIGIvZHJpdmVycy91c2IvYXRtL3VzYmF0bS5oCmluZGV4IGY2ZjQ1MDguLjA4NjNmODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2F0bS91c2JhdG0uaAorKysgYi9kcml2ZXJzL3VzYi9hdG0vdXNiYXRtLmgKQEAgLTIwNCw0ICsyMDQsMTkgQEAKIAlzdHJ1Y3QgdXJiICp1cmJzWzBdOwogfTsKIAorc3RhdGljIGlubGluZSB2b2lkICp0b191c2JhdG1fZHJpdmVyX2RhdGEoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG1faW5zdGFuY2U7CisKKwlpZiAoaW50ZiA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCXVzYmF0bV9pbnN0YW5jZSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisKKwlpZiAodXNiYXRtX2luc3RhbmNlID09IE5VTEwpIC8qIHNldCBOVUxMIGJlZm9yZSB1bmJpbmQoKSAqLworCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiB1c2JhdG1faW5zdGFuY2UtPmRyaXZlcl9kYXRhOyAvKiBzZXQgTlVMTCBhZnRlciB1bmJpbmQoKSAqLworfQorCiAjZW5kaWYJLyogX1VTQkFUTV9IXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYzY3eDAwL2M2N3gwMC1kcnYuYyBiL2RyaXZlcnMvdXNiL2M2N3gwMC9jNjd4MDAtZHJ2LmMKaW5kZXggNTYzM2JjNS4uMDI5ZWU0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvYzY3eDAwL2M2N3gwMC1kcnYuYworKysgYi9kcml2ZXJzL3VzYi9jNjd4MDAvYzY3eDAwLWRydi5jCkBAIC0xMzcsMTMgKzEzNywxMyBAQAogCWlmICghYzY3eDAwKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAogCQkJCXBkZXYtPm5hbWUpKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIk1lbW9yeSByZWdpb24gYnVzeVxuIik7CiAJCXJldCA9IC1FQlVTWTsKIAkJZ290byByZXF1ZXN0X21lbV9mYWlsZWQ7CiAJfQotCWM2N3gwMC0+aHBpLmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCWM2N3gwMC0+aHBpLmJhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJaWYgKCFjNjd4MDAtPmhwaS5iYXNlKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBtYXAgSFBJIHJlZ2lzdGVyc1xuIik7CiAJCXJldCA9IC1FSU87CkBAIC0xODIsNyArMTgyLDcgQEAKICByZXF1ZXN0X2lycV9mYWlsZWQ6CiAJaW91bm1hcChjNjd4MDAtPmhwaS5iYXNlKTsKICBtYXBfZmFpbGVkOgotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKICByZXF1ZXN0X21lbV9mYWlsZWQ6CiAJa2ZyZWUoYzY3eDAwKTsKIApAQCAtMjA4LDcgKzIwOCw3IEBACiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwogCWlmIChyZXMpCi0JCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAKIAlrZnJlZShjNjd4MDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmMKaW5kZXggMzRkNGViOS4uOTc1ZDU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uYwpAQCAtMTcwLDYgKzE3MCw3IEBACiB7CiAJd2ItPnVzZSA9IDA7CiAJYWNtLT50cmFuc21pdHRpbmctLTsKKwl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2VfYXN5bmMoYWNtLT5jb250cm9sKTsKIH0KIAogLyoKQEAgLTIxMSw5ICsyMTIsMTIgQEAKIAl9CiAKIAlkYmcoIiVzIHN1c3BfY291bnQ6ICVkIiwgX19mdW5jX18sIGFjbS0+c3VzcF9jb3VudCk7CisJdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX2FzeW5jKGFjbS0+Y29udHJvbCk7CiAJaWYgKGFjbS0+c3VzcF9jb3VudCkgewotCQlhY20tPmRlbGF5ZWRfd2IgPSB3YjsKLQkJc2NoZWR1bGVfd29yaygmYWNtLT53YWtlcik7CisJCWlmICghYWNtLT5kZWxheWVkX3diKQorCQkJYWNtLT5kZWxheWVkX3diID0gd2I7CisJCWVsc2UKKwkJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9hc3luYyhhY20tPmNvbnRyb2wpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhY20tPndyaXRlX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIDA7CS8qIEEgd2hpdGUgbGllICovCiAJfQpAQCAtNDI0LDcgKzQyOCw2IEBACiAJCXRocm90dGxlZCA9IGFjbS0+dGhyb3R0bGU7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFjbS0+dGhyb3R0bGVfbG9jaywgZmxhZ3MpOwogCQlpZiAoIXRocm90dGxlZCkgewotCQkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBidWYtPnNpemUpOwogCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGJ1Zi0+YmFzZSwgYnVmLT5zaXplKTsKIAkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCX0gZWxzZSB7CkBAIC01MzQsMjMgKzUzNyw2IEBACiAJdHR5X2tyZWZfcHV0KHR0eSk7CiB9CiAKLXN0YXRpYyB2b2lkIGFjbV93YWtlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndha2VyKQotewotCXN0cnVjdCBhY20gKmFjbSA9IGNvbnRhaW5lcl9vZih3YWtlciwgc3RydWN0IGFjbSwgd2FrZXIpOwotCWludCBydjsKLQotCXJ2ID0gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKGFjbS0+Y29udHJvbCk7Ci0JaWYgKHJ2IDwgMCkgewotCQlkZXZfZXJyKCZhY20tPmRldi0+ZGV2LCAiQXV0b3BtIGZhaWx1cmUgaW4gJXNcbiIsIF9fZnVuY19fKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoYWNtLT5kZWxheWVkX3diKSB7Ci0JCWFjbV9zdGFydF93YihhY20sIGFjbS0+ZGVsYXllZF93Yik7Ci0JCWFjbS0+ZGVsYXllZF93YiA9IE5VTEw7Ci0JfQotCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShhY20tPmNvbnRyb2wpOwotfQotCiAvKgogICogVFRZIGhhbmRsZXJzCiAgKi8KQEAgLTU2Niw3ICs1NTIsNyBAQAogCiAJYWNtID0gYWNtX3RhYmxlW3R0eS0+aW5kZXhdOwogCWlmICghYWNtIHx8ICFhY20tPmRldikKLQkJZ290byBlcnJfb3V0OworCQlnb3RvIG91dDsKIAllbHNlCiAJCXJ2ID0gMDsKIApAQCAtNTgyLDggKzU2OCw5IEBACiAKIAltdXRleF9sb2NrKCZhY20tPm11dGV4KTsKIAlpZiAoYWNtLT5wb3J0LmNvdW50KyspIHsKKwkJbXV0ZXhfdW5sb2NrKCZhY20tPm11dGV4KTsKIAkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGFjbS0+Y29udHJvbCk7Ci0JCWdvdG8gZG9uZTsKKwkJZ290byBvdXQ7CiAJfQogCiAJYWNtLT5jdHJsdXJiLT5kZXYgPSBhY20tPmRldjsKQEAgLTYxMiwxOCArNTk5LDE4IEBACiAJc2V0X2JpdChBU1lOQ0JfSU5JVElBTElaRUQsICZhY20tPnBvcnQuZmxhZ3MpOwogCXJ2ID0gdHR5X3BvcnRfYmxvY2tfdGlsX3JlYWR5KCZhY20tPnBvcnQsIHR0eSwgZmlscCk7CiAJdGFza2xldF9zY2hlZHVsZSgmYWNtLT51cmJfdGFzayk7Ci1kb25lOgorCiAJbXV0ZXhfdW5sb2NrKCZhY20tPm11dGV4KTsKLWVycl9vdXQ6CitvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZvcGVuX211dGV4KTsKIAlyZXR1cm4gcnY7CiAKIGZ1bGxfYmFpbG91dDoKIAl1c2Jfa2lsbF91cmIoYWNtLT5jdHJsdXJiKTsKIGJhaWxfb3V0OgotCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShhY20tPmNvbnRyb2wpOwogCWFjbS0+cG9ydC5jb3VudC0tOwogCW11dGV4X3VubG9jaygmYWNtLT5tdXRleCk7CisJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGFjbS0+Y29udHJvbCk7CiBlYXJseV9iYWlsOgogCW11dGV4X3VubG9jaygmb3Blbl9tdXRleCk7CiAJdHR5X3BvcnRfdHR5X3NldCgmYWNtLT5wb3J0LCBOVUxMKTsKQEAgLTEwMjMsNyArMTAxMCw3IEBACiAJCWNhc2UgVVNCX0NEQ19DQUxMX01BTkFHRU1FTlRfVFlQRToKIAkJCWNhbGxfbWFuYWdlbWVudF9mdW5jdGlvbiA9IGJ1ZmZlclszXTsKIAkJCWNhbGxfaW50ZXJmYWNlX251bSA9IGJ1ZmZlcls0XTsKLQkJCWlmICgoY2FsbF9tYW5hZ2VtZW50X2Z1bmN0aW9uICYgMykgIT0gMykKKwkJCWlmICggKHF1aXJrcyAmIE5PVF9BX01PREVNKSA9PSAwICYmIChjYWxsX21hbmFnZW1lbnRfZnVuY3Rpb24gJiAzKSAhPSAzKQogCQkJCWRldl9lcnIoJmludGYtPmRldiwgIlRoaXMgZGV2aWNlIGNhbm5vdCBkbyBjYWxscyBvbiBpdHMgb3duLiBJdCBpcyBub3QgYSBtb2RlbS5cbiIpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC0xMTc4LDcgKzExNjUsNiBAQAogCWFjbS0+dXJiX3Rhc2suZnVuYyA9IGFjbV9yeF90YXNrbGV0OwogCWFjbS0+dXJiX3Rhc2suZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBhY207CiAJSU5JVF9XT1JLKCZhY20tPndvcmssIGFjbV9zb2Z0aW50KTsKLQlJTklUX1dPUksoJmFjbS0+d2FrZXIsIGFjbV93YWtlcik7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmYWNtLT5kcmFpbl93YWl0KTsKIAlzcGluX2xvY2tfaW5pdCgmYWNtLT50aHJvdHRsZV9sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmYWNtLT53cml0ZV9sb2NrKTsKQEAgLTEzNDMsNyArMTMyOSw2IEBACiAJdGFza2xldF9lbmFibGUoJmFjbS0+dXJiX3Rhc2spOwogCiAJY2FuY2VsX3dvcmtfc3luYygmYWNtLT53b3JrKTsKLQljYW5jZWxfd29ya19zeW5jKCZhY20tPndha2VyKTsKIH0KIAogc3RhdGljIHZvaWQgYWNtX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCkBAIC0xNDM1LDYgKzE0MjAsNyBAQAogc3RhdGljIGludCBhY21fcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCBhY20gKmFjbSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJc3RydWN0IGFjbV93YiAqd2I7CiAJaW50IHJ2ID0gMDsKIAlpbnQgY250OwogCkBAIC0xNDQ5LDYgKzE0MzUsMjEgQEAKIAltdXRleF9sb2NrKCZhY20tPm11dGV4KTsKIAlpZiAoYWNtLT5wb3J0LmNvdW50KSB7CiAJCXJ2ID0gdXNiX3N1Ym1pdF91cmIoYWNtLT5jdHJsdXJiLCBHRlBfTk9JTyk7CisKKwkJc3Bpbl9sb2NrX2lycSgmYWNtLT53cml0ZV9sb2NrKTsKKwkJaWYgKGFjbS0+ZGVsYXllZF93YikgeworCQkJd2IgPSBhY20tPmRlbGF5ZWRfd2I7CisJCQlhY20tPmRlbGF5ZWRfd2IgPSBOVUxMOworCQkJc3Bpbl91bmxvY2tfaXJxKCZhY20tPndyaXRlX2xvY2spOworCQkJYWNtX3N0YXJ0X3diKGFjbSwgYWNtLT5kZWxheWVkX3diKTsKKwkJfSBlbHNlIHsKKwkJCXNwaW5fdW5sb2NrX2lycSgmYWNtLT53cml0ZV9sb2NrKTsKKwkJfQorCisJCS8qCisJCSAqIGRlbGF5ZWQgZXJyb3IgY2hlY2tpbmcgYmVjYXVzZSB3ZSBtdXN0CisJCSAqIGRvIHRoZSB3cml0ZSBwYXRoIGF0IGFsbCBjb3N0CisJCSAqLwogCQlpZiAocnYgPCAwKQogCQkJZ290byBlcnJfb3V0OwogCkBAIC0xNDYwLDYgKzE0NjEsMjMgQEAKIAlyZXR1cm4gcnY7CiB9CiAKK3N0YXRpYyBpbnQgYWNtX3Jlc2V0X3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3sKKwlzdHJ1Y3QgYWNtICphY20gPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisKKwltdXRleF9sb2NrKCZhY20tPm11dGV4KTsKKwlpZiAoYWNtLT5wb3J0LmNvdW50KSB7CisJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJmFjbS0+cG9ydCk7CisJCWlmICh0dHkpIHsKKwkJCXR0eV9oYW5ndXAodHR5KTsKKwkJCXR0eV9rcmVmX3B1dCh0dHkpOworCQl9CisJfQorCW11dGV4X3VubG9jaygmYWNtLT5tdXRleCk7CisJcmV0dXJuIGFjbV9yZXN1bWUoaW50Zik7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAogI2RlZmluZSBOT0tJQV9QQ1NVSVRFX0FDTV9JTkZPKHgpIFwKQEAgLTE0NzEsNyArMTQ4OSw3IEBACiAgKiBVU0IgZHJpdmVyIHN0cnVjdHVyZS4KICAqLwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgYWNtX2lkc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFjbV9pZHNbXSA9IHsKIAkvKiBxdWlya3kgYW5kIGJyb2tlbiBkZXZpY2VzICovCiAJeyBVU0JfREVWSUNFKDB4MDg3MCwgMHgwMDAxKSwgLyogTWV0cmljb20gR1MgTW9kZW0gKi8KIAkuZHJpdmVyX2luZm8gPSBOT19VTklPTl9OT1JNQUwsIC8qIGhhcyBubyB1bmlvbiBkZXNjcmlwdG9yICovCkBAIC0xNTc2LDYgKzE1OTQsMTEgQEAKIAogCS8qIE5PVEU6IG5vbi1Ob2tpYSBDT01NL0FDTS8weGZmIGlzIGxpa2VseSBNU0ZUIFJORElTLi4uIE5PVCBhIG1vZGVtISAqLwogCisJLyogU3VwcG9ydCBMZWdvIE5YVCB1c2luZyBwYkx1YSBmaXJtd2FyZSAqLworCXsgVVNCX0RFVklDRSgweDA2OTQsIDB4ZmYwMCksCisJLmRyaXZlcl9pbmZvID0gTk9UX0FfTU9ERU0sCisgICAgICAgCX0sCisKIAkvKiBjb250cm9sIGludGVyZmFjZXMgd2l0aCB2YXJpb3VzIEFULWNvbW1hbmQgc2V0cyAqLwogCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19DT01NLCBVU0JfQ0RDX1NVQkNMQVNTX0FDTSwKIAkJVVNCX0NEQ19BQ01fUFJPVE9fQVRfVjI1VEVSKSB9LApAQCAtMTYwMiw2ICsxNjI1LDcgQEAKICNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZCA9CWFjbV9zdXNwZW5kLAogCS5yZXN1bWUgPQlhY21fcmVzdW1lLAorCS5yZXNldF9yZXN1bWUgPQlhY21fcmVzZXRfcmVzdW1lLAogI2VuZGlmCiAJLmlkX3RhYmxlID0JYWNtX2lkcywKICNpZmRlZiBDT05GSUdfUE0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uaCBiL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy1hY20uaAppbmRleCBjNGEwZWU4Li40YThlODdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtYWNtLmgKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLWFjbS5oCkBAIC0xMTIsNyArMTEyLDYgQEAKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiAJc3RydWN0IHVzYl9jZGNfbGluZV9jb2RpbmcgbGluZTsJCS8qIGJpdHMsIHN0b3AsIHBhcml0eSAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwkJCS8qIHdvcmsgcXVldWUgZW50cnkgZm9yIGxpbmUgZGlzY2lwbGluZSB3YWtpbmcgdXAgKi8KLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd2FrZXI7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgZHJhaW5fd2FpdDsJCQkvKiBjbG9zZSBwcm9jZXNzaW5nICovCiAJc3RydWN0IHRhc2tsZXRfc3RydWN0IHVyYl90YXNrOyAgICAgICAgICAgICAgICAgLyogcnggcHJvY2Vzc2luZyAqLwogCXNwaW5sb2NrX3QgdGhyb3R0bGVfbG9jazsJCQkvKiBzeW5jaHJvbml6ZSB0aHJvdHRlbGluZyBhbmQgcmVhZCBjYWxsYmFjayAqLwpAQCAtMTM3LDMgKzEzNiw0IEBACiAjZGVmaW5lIE5PX1VOSU9OX05PUk1BTAkJCTEKICNkZWZpbmUgU0lOR0xFX1JYX1VSQgkJCTIKICNkZWZpbmUgTk9fQ0FQX0xJTkUJCQk0CisjZGVmaW5lIE5PVF9BX01PREVNCQkJOApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jIGIvZHJpdmVycy91c2IvY2xhc3MvY2RjLXdkbS5jCmluZGV4IDNlNTY0YmYuLjE4YWFmY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL2NkYy13ZG0uYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy9jZGMtd2RtLmMKQEAgLTMxLDcgKzMxLDcgQEAKICNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiT2xpdmVyIE5ldWt1bSIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBBYnN0cmFjdCBDb250cm9sIE1vZGVsIGRyaXZlciBmb3IgVVNCIFdDTSBEZXZpY2UgTWFuYWdlbWVudCIKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHdkbV9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB3ZG1faWRzW10gPSB7CiAJewogCQkubWF0Y2hfZmxhZ3MgPSBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyB8CiAJCQkJIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1NVQkNMQVNTLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKaW5kZXggOWJjMTEyZS4uOTNiNWY4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYworKysgYi9kcml2ZXJzL3VzYi9jbGFzcy91c2JscC5jCkBAIC0xNjMsNyArMTYzLDYgQEAKIAl1bnNpZ25lZCBjaGFyCQl1c2VkOwkJCS8qIFRydWUgaWYgb3BlbiAqLwogCXVuc2lnbmVkIGNoYXIJCXByZXNlbnQ7CQkvKiBUcnVlIGlmIG5vdCBkaXNjb25uZWN0ZWQgKi8KIAl1bnNpZ25lZCBjaGFyCQliaWRpcjsJCQkvKiBpbnRlcmZhY2UgaXMgYmlkaXJlY3Rpb25hbCAqLwotCXVuc2lnbmVkIGNoYXIJCXNsZWVwaW5nOwkJLyogaW50ZXJmYWNlIGlzIHN1c3BlbmRlZCAqLwogCXVuc2lnbmVkIGNoYXIJCW5vX3BhcGVyOwkJLyogUGFwZXIgT3V0IGhhcHBlbmVkICovCiAJdW5zaWduZWQgY2hhcgkJKmRldmljZV9pZF9zdHJpbmc7CS8qIElFRUUgMTI4NCBERVZJQ0UgSUQgc3RyaW5nIChwdHIpICovCiAJCQkJCQkJLyogZmlyc3QgMiBieXRlcyBhcmUgKGJpZy1lbmRpYW4pIGxlbmd0aCAqLwpAQCAtMTkxLDcgKzE5MCw2IEBACiAJZGJnKCJxdWlya3M9JWQiLCB1c2JscC0+cXVpcmtzKTsKIAlkYmcoInVzZWQ9JWQiLCB1c2JscC0+dXNlZCk7CiAJZGJnKCJiaWRpcj0lZCIsIHVzYmxwLT5iaWRpcik7Ci0JZGJnKCJzbGVlcGluZz0lZCIsIHVzYmxwLT5zbGVlcGluZyk7CiAJZGJnKCJkZXZpY2VfaWRfc3RyaW5nPVwiJXNcIiIsCiAJCXVzYmxwLT5kZXZpY2VfaWRfc3RyaW5nID8KIAkJCXVzYmxwLT5kZXZpY2VfaWRfc3RyaW5nICsgMiA6CkBAIC0zNzYsNyArMzc0LDcgQEAKIAogc3RhdGljIGludCBoYW5kbGVfYmlkaXIgKHN0cnVjdCB1c2JscCAqdXNibHApCiB7Ci0JaWYgKHVzYmxwLT5iaWRpciAmJiB1c2JscC0+dXNlZCAmJiAhdXNibHAtPnNsZWVwaW5nKSB7CisJaWYgKHVzYmxwLT5iaWRpciAmJiB1c2JscC0+dXNlZCkgewogCQlpZiAodXNibHBfc3VibWl0X3JlYWQodXNibHApIDwgMCkKIAkJCXJldHVybiAtRUlPOwogCX0KQEAgLTUwMywxMSArNTAxLDYgQEAKIAkJZ290byBkb25lOwogCX0KIAotCWlmICh1c2JscC0+c2xlZXBpbmcpIHsKLQkJcmV0dmFsID0gLUVOT0RFVjsKLQkJZ290byBkb25lOwotCX0KLQogCWRiZygidXNibHBfaW9jdGw6IGNtZD0weCV4ICglYyBucj0lZCBsZW49JWQgZGlyPSVkKSIsIGNtZCwgX0lPQ19UWVBFKGNtZCksCiAJCV9JT0NfTlIoY21kKSwgX0lPQ19TSVpFKGNtZCksIF9JT0NfRElSKGNtZCkgKTsKIApAQCAtOTE0LDggKzkwNyw2IEBACiAJCXJldHVybiAwOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ1c2JscC0+bG9jaywgZmxhZ3MpOwotCWlmICh1c2JscC0+c2xlZXBpbmcpCi0JCXJldHVybiAtRU5PREVWOwogCWlmIChub25ibG9jaykKIAkJcmV0dXJuIC1FQUdBSU47CiAJcmV0dXJuIDE7CkBAIC05NjgsOCArOTU5LDYgQEAKIAkJcmV0dXJuIDA7CiAJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzYmxwLT5sb2NrLCBmbGFncyk7Ci0JaWYgKHVzYmxwLT5zbGVlcGluZykKLQkJcmV0dXJuIC1FTk9ERVY7CiAJaWYgKG5vbmJsb2NrKQogCQlyZXR1cm4gLUVBR0FJTjsKIAlyZXR1cm4gMTsKQEAgLTEzNzcsMTIgKzEzNjYsMTAgQEAKIAltdXRleF91bmxvY2sgKCZ1c2JscF9tdXRleCk7CiB9CiAKLXN0YXRpYyBpbnQgdXNibHBfc3VzcGVuZCAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQorc3RhdGljIGludCB1c2JscF9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKIHsKIAlzdHJ1Y3QgdXNibHAgKnVzYmxwID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CiAKLQkvKiB3ZSB0YWtlIG5vIG1vcmUgSU8gKi8KLQl1c2JscC0+c2xlZXBpbmcgPSAxOwogCXVzYmxwX3VubGlua191cmJzKHVzYmxwKTsKICNpZiAwIC8qIFhYWCBEbyB3ZSB3YW50IHRoaXM/IFdoYXQgaWYgc29tZW9uZSBpcyByZWFkaW5nLCBzaG91bGQgd2UgZmFpbD8gKi8KIAkvKiBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBidXQganVzdCBpbiBjYXNlICovCkBAIC0xMzkzLDE4ICsxMzgwLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXNibHBfcmVzdW1lIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3N0YXRpYyBpbnQgdXNibHBfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogCXN0cnVjdCB1c2JscCAqdXNibHAgPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKIAlpbnQgcjsKIAotCXVzYmxwLT5zbGVlcGluZyA9IDA7CiAJciA9IGhhbmRsZV9iaWRpciAodXNibHApOwogCiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JscF9pZHMgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNibHBfaWRzW10gPSB7CiAJeyBVU0JfREVWSUNFX0lORk8oNywgMSwgMSkgfSwKIAl7IFVTQl9ERVZJQ0VfSU5GTyg3LCAxLCAyKSB9LAogCXsgVVNCX0RFVklDRV9JTkZPKDcsIDEsIDMpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jbGFzcy91c2J0bWMuYyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCmluZGV4IDdjNWY0ZTMuLjg1ODhjMDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCisrKyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYnRtYy5jCkBAIC00OCw3ICs0OCw3IEBACiAgKi8KICNkZWZpbmUgVVNCVE1DX01BWF9SRUFEU19UT19DTEVBUl9CVUxLX0lOCTEwMAogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNidG1jX2RldmljZXNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2J0bWNfZGV2aWNlc1tdID0gewogCXsgVVNCX0lOVEVSRkFDRV9JTkZPKFVTQl9DTEFTU19BUFBfU1BFQywgMywgMCksIH0sCiAJeyBVU0JfSU5URVJGQUNFX0lORk8oVVNCX0NMQVNTX0FQUF9TUEVDLCAzLCAxKSwgfSwKIAl7IDAsIH0gLyogdGVybWluYXRpbmcgZW50cnkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2NvcmUvS2NvbmZpZwppbmRleCBhZDkyNTk0Li45N2E4MTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvY29yZS9LY29uZmlnCkBAIC05MSw4ICs5MSw4IEBACiAJICBJZiB5b3UgYXJlIHVuc3VyZSBhYm91dCB0aGlzLCBzYXkgTiBoZXJlLgogCiBjb25maWcgVVNCX1NVU1BFTkQKLQlib29sICJVU0Igc2VsZWN0aXZlIHN1c3BlbmQvcmVzdW1lIGFuZCB3YWtldXAiCi0JZGVwZW5kcyBvbiBVU0IgJiYgUE0KKwlib29sICJVU0IgcnVudGltZSBwb3dlciBtYW5hZ2VtZW50IChzdXNwZW5kL3Jlc3VtZSBhbmQgd2FrZXVwKSIKKwlkZXBlbmRzIG9uIFVTQiAmJiBQTV9SVU5USU1FCiAJaGVscAogCSAgSWYgeW91IHNheSBZIGhlcmUsIHlvdSBjYW4gdXNlIGRyaXZlciBjYWxscyBvciB0aGUgc3lzZnMKIAkgICJwb3dlci9sZXZlbCIgZmlsZSB0byBzdXNwZW5kIG9yIHJlc3VtZSBpbmRpdmlkdWFsIFVTQgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwppbmRleCAzNTVkZmZjLi5kNDE4MTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwpAQCAtMTE3LDEyICsxMTcsMjAgQEAKICAqIEhvd2V2ZXIsIHRoZXNlIHdpbGwgY29tZSBmcm9tIGZ1bmN0aW9ucyB0aGF0IHJldHVybiBwdHJzIHRvIGVhY2ggb2YgdGhlbS4KICAqLwogCi1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoZGV2aWNlY29ubmRpc2N3cSk7Ci1zdGF0aWMgdW5zaWduZWQgaW50IGNvbm5kaXNjZXZjbnQ7Ci0KLS8qIHRoaXMgc3RydWN0IHN0b3JlcyB0aGUgcG9sbCBzdGF0ZSBmb3IgPG1vdW50cG9pbnQ+L2RldmljZXMgcG9sbGVycyAqLwotc3RydWN0IHVzYl9kZXZpY2Vfc3RhdHVzIHsKLQl1bnNpZ25lZCBpbnQgbGFzdGV2OworLyoKKyAqIFdhaXQgZm9yIGFuIGNvbm5lY3QvZGlzY29ubmVjdCBldmVudCB0byBoYXBwZW4uIFdlIGluaXRpYWxpemUKKyAqIHRoZSBldmVudCBjb3VudGVyIHdpdGggYW4gb2RkIG51bWJlciwgYW5kIGVhY2ggZXZlbnQgd2lsbCBpbmNyZW1lbnQKKyAqIHRoZSBldmVudCBjb3VudGVyIGJ5IHR3bywgc28gaXQgd2lsbCBhbHdheXMgX3N0YXlfIG9kZC4gVGhhdCBtZWFucworICogdGhhdCBpdCB3aWxsIG5ldmVyIGJlIHplcm8sIHNvICJldmVudCAwIiB3aWxsIG5ldmVyIG1hdGNoIGEgY3VycmVudAorICogZXZlbnQsIGFuZCB0aHVzICdwb2xsJyB3aWxsIGFsd2F5cyB0cmlnZ2VyIGFzIHJlYWRhYmxlIGZvciB0aGUgZmlyc3QKKyAqIHRpbWUgaXQgZ2V0cyBjYWxsZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2Nvbm5lY3RfZXZlbnQgeworCWF0b21pY190IGNvdW50OworCXdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Cit9IGRldmljZV9ldmVudCA9IHsKKwkuY291bnQgPSBBVE9NSUNfSU5JVCgxKSwKKwkud2FpdCA9IF9fV0FJVF9RVUVVRV9IRUFEX0lOSVRJQUxJWkVSKGRldmljZV9ldmVudC53YWl0KQogfTsKIAogc3RydWN0IGNsYXNzX2luZm8gewpAQCAtMTU2LDggKzE2NCw4IEBACiAKIHZvaWQgdXNiZnNfY29ubl9kaXNjX2V2ZW50KHZvaWQpCiB7Ci0JY29ubmRpc2NldmNudCsrOwotCXdha2VfdXAoJmRldmljZWNvbm5kaXNjd3EpOworCWF0b21pY19hZGQoMiwgJmRldmljZV9ldmVudC5jb3VudCk7CisJd2FrZV91cCgmZGV2aWNlX2V2ZW50LndhaXQpOwogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqY2xhc3NfZGVjb2RlKGNvbnN0IGludCBjbGFzcykKQEAgLTYyOSw1NSArNjM3LDE2IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHVzYl9kZXZpY2VfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCQkgICAgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQogewotCXN0cnVjdCB1c2JfZGV2aWNlX3N0YXR1cyAqc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JdW5zaWduZWQgaW50IG1hc2sgPSAwOworCXVuc2lnbmVkIGludCBldmVudF9jb3VudDsKIAotCWxvY2tfa2VybmVsKCk7Ci0JaWYgKCFzdCkgewotCQlzdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfZGV2aWNlX3N0YXR1cyksIEdGUF9LRVJORUwpOworCXBvbGxfd2FpdChmaWxlLCAmZGV2aWNlX2V2ZW50LndhaXQsIHdhaXQpOwogCi0JCS8qIHdlIG1heSBoYXZlIGRyb3BwZWQgQktMIC0KLQkJICogbmVlZCB0byBjaGVjayBmb3IgaGF2aW5nIGxvc3QgdGhlIHJhY2UgKi8KLQkJaWYgKGZpbGUtPnByaXZhdGVfZGF0YSkgewotCQkJa2ZyZWUoc3QpOwotCQkJc3QgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JCQlnb3RvIGxvc3RfcmFjZTsKLQkJfQotCQkvKiB3ZSBoYXZlbid0IGxvc3QgLSBjaGVjayBmb3IgYWxsb2NhdGlvbiBmYWlsdXJlIG5vdyAqLwotCQlpZiAoIXN0KSB7Ci0JCQl1bmxvY2tfa2VybmVsKCk7Ci0JCQlyZXR1cm4gUE9MTElOOwotCQl9Ci0KLQkJLyoKLQkJICogbmVlZCB0byBwcmV2ZW50IHRoZSBtb2R1bGUgZnJvbSBiZWluZyB1bmxvYWRlZCwgc2luY2UKLQkJICogcHJvY191bnJlZ2lzdGVyIGRvZXMgbm90IGNhbGwgdGhlIHJlbGVhc2UgbWV0aG9kIGFuZAotCQkgKiB3ZSB3b3VsZCBoYXZlIGEgbWVtb3J5IGxlYWsKLQkJICovCi0JCXN0LT5sYXN0ZXYgPSBjb25uZGlzY2V2Y250OwotCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBzdDsKLQkJbWFzayA9IFBPTExJTjsKKwlldmVudF9jb3VudCA9IGF0b21pY19yZWFkKCZkZXZpY2VfZXZlbnQuY291bnQpOworCWlmIChmaWxlLT5mX3ZlcnNpb24gIT0gZXZlbnRfY291bnQpIHsKKwkJZmlsZS0+Zl92ZXJzaW9uID0gZXZlbnRfY291bnQ7CisJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwogCX0KLWxvc3RfcmFjZToKLQlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkKLQkJcG9sbF93YWl0KGZpbGUsICZkZXZpY2Vjb25uZGlzY3dxLCB3YWl0KTsKLQlpZiAoc3QtPmxhc3RldiAhPSBjb25uZGlzY2V2Y250KQotCQltYXNrIHw9IFBPTExJTjsKLQlzdC0+bGFzdGV2ID0gY29ubmRpc2NldmNudDsKLQl1bmxvY2tfa2VybmVsKCk7Ci0JcmV0dXJuIG1hc2s7Ci19CiAKLXN0YXRpYyBpbnQgdXNiX2RldmljZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdXNiX2RldmljZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWtmcmVlKGZpbGUtPnByaXZhdGVfZGF0YSk7Ci0JZmlsZS0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjg1LDcgKzY1NCw3IEBACiB7CiAJbG9mZl90IHJldDsKIAotCWxvY2tfa2VybmVsKCk7CisJbXV0ZXhfbG9jaygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCiAJc3dpdGNoIChvcmlnKSB7CiAJY2FzZSAwOgpAQCAtNzAxLDcgKzY3MCw3IEBACiAJCXJldCA9IC1FSU5WQUw7CiAJfQogCi0JdW5sb2NrX2tlcm5lbCgpOworCW11dGV4X3VubG9jaygmZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTcwOSw2ICs2NzgsNCBAQAogCS5sbHNlZWsgPQl1c2JfZGV2aWNlX2xzZWVrLAogCS5yZWFkID0JCXVzYl9kZXZpY2VfcmVhZCwKIAkucG9sbCA9CQl1c2JfZGV2aWNlX3BvbGwsCi0JLm9wZW4gPQkJdXNiX2RldmljZV9vcGVuLAotCS5yZWxlYXNlID0JdXNiX2RldmljZV9yZWxlYXNlLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwppbmRleCBhNjc4MTg2Li5lOTA5ZmY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIHsKIAlsb2ZmX3QgcmV0OwogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAKIAlzd2l0Y2ggKG9yaWcpIHsKIAljYXNlIDA6CkBAIC0xMzgsNyArMTM4LDcgQEAKIAkJcmV0ID0gLUVJTlZBTDsKIAl9CiAKLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMzEwLDcgKzMxMCw4IEBACiAKIHN0YXRpYyB2b2lkIHNub29wX3VyYihzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKIAkJdm9pZCBfX3VzZXIgKnVzZXJ1cmIsIGludCBwaXBlLCB1bnNpZ25lZCBsZW5ndGgsCi0JCWludCB0aW1lb3V0X29yX3N0YXR1cywgZW51bSBzbm9vcF93aGVuIHdoZW4pCisJCWludCB0aW1lb3V0X29yX3N0YXR1cywgZW51bSBzbm9vcF93aGVuIHdoZW4sCisJCXVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGRhdGFfbGVuKQogewogCXN0YXRpYyBjb25zdCBjaGFyICp0eXBlc1tdID0geyJpc29jIiwgImludCIsICJjdHJsIiwgImJ1bGsifTsKIAlzdGF0aWMgY29uc3QgY2hhciAqZGlyc1tdID0geyJvdXQiLCAiaW4ifTsKQEAgLTM0NCw2ICszNDUsMTEgQEAKIAkJCQkJInN0YXR1cyAlZFxuIiwKIAkJCQkJZXAsIHQsIGQsIGxlbmd0aCwgdGltZW91dF9vcl9zdGF0dXMpOwogCX0KKworCWlmIChkYXRhICYmIGRhdGFfbGVuID4gMCkgeworCQlwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiZGF0YTogIiwgRFVNUF9QUkVGSVhfTk9ORSwgMzIsIDEsCisJCQlkYXRhLCBkYXRhX2xlbiwgMSk7CisJfQogfQogCiAjZGVmaW5lIEFTX0NPTlRJTlVBVElPTgkxCkBAIC00MTAsNyArNDE2LDkgQEAKIAl9CiAJc25vb3AoJnVyYi0+ZGV2LT5kZXYsICJ1cmIgY29tcGxldGVcbiIpOwogCXNub29wX3VyYih1cmItPmRldiwgYXMtPnVzZXJ1cmIsIHVyYi0+cGlwZSwgdXJiLT5hY3R1YWxfbGVuZ3RoLAotCQkJYXMtPnN0YXR1cywgQ09NUExFVEUpOworCQkJYXMtPnN0YXR1cywgQ09NUExFVEUsCisJCQkoKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfRElSX01BU0spID09IFVTQl9ESVJfT1VUKSA/CisJCQkJTlVMTCA6IHVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCWlmIChhcy0+c3RhdHVzIDwgMCAmJiBhcy0+YnVsa19hZGRyICYmIGFzLT5zdGF0dXMgIT0gLUVDT05OUkVTRVQgJiYKIAkJCWFzLT5zdGF0dXMgIT0gLUVOT0VOVCkKIAkJY2FuY2VsX2J1bGtfdXJicyhwcywgYXMtPmJ1bGtfYWRkcik7CkBAIC02NTMsMjAgKzY2MSwyMCBAQAogCWNvbnN0IHN0cnVjdCBjcmVkICpjcmVkID0gY3VycmVudF9jcmVkKCk7CiAJaW50IHJldDsKIAotCWxvY2tfa2VybmVsKCk7Ci0JLyogUHJvdGVjdCBhZ2FpbnN0IHNpbXVsdGFuZW91cyByZW1vdmFsIG9yIHJlbGVhc2UgKi8KLQltdXRleF9sb2NrKCZ1c2Jmc19tdXRleCk7Ci0KIAlyZXQgPSAtRU5PTUVNOwogCXBzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGRldl9zdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmICghcHMpCi0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9mcmVlX3BzOwogCiAJcmV0ID0gLUVOT0RFVjsKIAorCS8qIFByb3RlY3QgYWdhaW5zdCBzaW11bHRhbmVvdXMgcmVtb3ZhbCBvciByZWxlYXNlICovCisJbXV0ZXhfbG9jaygmdXNiZnNfbXV0ZXgpOworCiAJLyogdXNiZGV2IGRldmljZS1ub2RlICovCiAJaWYgKGltYWpvcihpbm9kZSkgPT0gVVNCX0RFVklDRV9NQUpPUikKIAkJZGV2ID0gdXNiZGV2X2xvb2t1cF9ieV9kZXZ0KGlub2RlLT5pX3JkZXYpOworCiAjaWZkZWYgQ09ORklHX1VTQl9ERVZJQ0VGUwogCS8qIHByb2NmcyBmaWxlICovCiAJaWYgKCFkZXYpIHsKQEAgLTY3OCwxMyArNjg2LDE5IEBACiAJCQlkZXYgPSBOVUxMOwogCX0KICNlbmRpZgotCWlmICghZGV2IHx8IGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQotCQlnb3RvIG91dDsKKwltdXRleF91bmxvY2soJnVzYmZzX211dGV4KTsKKworCWlmICghZGV2KQorCQlnb3RvIG91dF9mcmVlX3BzOworCisJdXNiX2xvY2tfZGV2aWNlKGRldik7CisJaWYgKGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQorCQlnb3RvIG91dF91bmxvY2tfZGV2aWNlOworCiAJcmV0ID0gdXNiX2F1dG9yZXN1bWVfZGV2aWNlKGRldik7CiAJaWYgKHJldCkKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X3VubG9ja19kZXZpY2U7CiAKLQlyZXQgPSAwOwogCXBzLT5kZXYgPSBkZXY7CiAJcHMtPmZpbGUgPSBmaWxlOwogCXNwaW5fbG9ja19pbml0KCZwcy0+bG9jayk7CkBAIC03MDIsMTUgKzcxNiwxNiBAQAogCXNtcF93bWIoKTsKIAlsaXN0X2FkZF90YWlsKCZwcy0+bGlzdCwgJmRldi0+ZmlsZWxpc3QpOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHBzOworCXVzYl91bmxvY2tfZGV2aWNlKGRldik7CiAJc25vb3AoJmRldi0+ZGV2LCAib3BlbmVkIGJ5IHByb2Nlc3MgJWQ6ICVzXG4iLCB0YXNrX3BpZF9ucihjdXJyZW50KSwKIAkJCWN1cnJlbnQtPmNvbW0pOwotIG91dDoKLQlpZiAocmV0KSB7Ci0JCWtmcmVlKHBzKTsKLQkJdXNiX3B1dF9kZXYoZGV2KTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZ1c2Jmc19tdXRleCk7Ci0JdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7CisKKyBvdXRfdW5sb2NrX2RldmljZToKKwl1c2JfdW5sb2NrX2RldmljZShkZXYpOworCXVzYl9wdXRfZGV2KGRldik7Cisgb3V0X2ZyZWVfcHM6CisJa2ZyZWUocHMpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTcyNCwxMCArNzM5LDcgQEAKIAl1c2JfbG9ja19kZXZpY2UoZGV2KTsKIAl1c2JfaHViX3JlbGVhc2VfYWxsX3BvcnRzKGRldiwgcHMpOwogCi0JLyogUHJvdGVjdCBhZ2FpbnN0IHNpbXVsdGFuZW91cyBvcGVuICovCi0JbXV0ZXhfbG9jaygmdXNiZnNfbXV0ZXgpOwogCWxpc3RfZGVsX2luaXQoJnBzLT5saXN0KTsKLQltdXRleF91bmxvY2soJnVzYmZzX211dGV4KTsKIAogCWZvciAoaWZudW0gPSAwOyBwcy0+aWZjbGFpbWVkICYmIGlmbnVtIDwgOCpzaXplb2YocHMtPmlmY2xhaW1lZCk7CiAJCQlpZm51bSsrKSB7CkBAIC03NzAsNiArNzgyLDEzIEBACiAJaWYgKCF0YnVmKQogCQlyZXR1cm4gLUVOT01FTTsKIAl0bW8gPSBjdHJsLnRpbWVvdXQ7CisJc25vb3AoJmRldi0+ZGV2LCAiY29udHJvbCB1cmI6IGJSZXF1ZXN0VHlwZT0lMDJ4ICIKKwkJImJSZXF1ZXN0PSUwMnggd1ZhbHVlPSUwNHggIgorCQkid0luZGV4PSUwNHggd0xlbmd0aD0lMDR4XG4iLAorCQljdHJsLmJSZXF1ZXN0VHlwZSwgY3RybC5iUmVxdWVzdCwKKwkJX19sZTE2X3RvX2NwdXAoJmN0cmwud1ZhbHVlKSwKKwkJX19sZTE2X3RvX2NwdXAoJmN0cmwud0luZGV4KSwKKwkJX19sZTE2X3RvX2NwdXAoJmN0cmwud0xlbmd0aCkpOwogCWlmIChjdHJsLmJSZXF1ZXN0VHlwZSAmIDB4ODApIHsKIAkJaWYgKGN0cmwud0xlbmd0aCAmJiAhYWNjZXNzX29rKFZFUklGWV9XUklURSwgY3RybC5kYXRhLAogCQkJCQkgICAgICAgY3RybC53TGVuZ3RoKSkgewpAQCAtNzc3LDE1ICs3OTYsMTUgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCXBpcGUgPSB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKTsKLQkJc25vb3BfdXJiKGRldiwgTlVMTCwgcGlwZSwgY3RybC53TGVuZ3RoLCB0bW8sIFNVQk1JVCk7CisJCXNub29wX3VyYihkZXYsIE5VTEwsIHBpcGUsIGN0cmwud0xlbmd0aCwgdG1vLCBTVUJNSVQsIE5VTEwsIDApOwogCiAJCXVzYl91bmxvY2tfZGV2aWNlKGRldik7CiAJCWkgPSB1c2JfY29udHJvbF9tc2coZGV2LCBwaXBlLCBjdHJsLmJSZXF1ZXN0LAogCQkJCSAgICBjdHJsLmJSZXF1ZXN0VHlwZSwgY3RybC53VmFsdWUsIGN0cmwud0luZGV4LAogCQkJCSAgICB0YnVmLCBjdHJsLndMZW5ndGgsIHRtbyk7CiAJCXVzYl9sb2NrX2RldmljZShkZXYpOwotCQlzbm9vcF91cmIoZGV2LCBOVUxMLCBwaXBlLCBtYXgoaSwgMCksIG1pbihpLCAwKSwgQ09NUExFVEUpOwotCisJCXNub29wX3VyYihkZXYsIE5VTEwsIHBpcGUsIG1heChpLCAwKSwgbWluKGksIDApLCBDT01QTEVURSwKKwkJCXRidWYsIGkpOwogCQlpZiAoKGkgPiAwKSAmJiBjdHJsLndMZW5ndGgpIHsKIAkJCWlmIChjb3B5X3RvX3VzZXIoY3RybC5kYXRhLCB0YnVmLCBpKSkgewogCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl0YnVmKTsKQEAgLTgwMCwxNCArODE5LDE1IEBACiAJCQl9CiAJCX0KIAkJcGlwZSA9IHVzYl9zbmRjdHJscGlwZShkZXYsIDApOwotCQlzbm9vcF91cmIoZGV2LCBOVUxMLCBwaXBlLCBjdHJsLndMZW5ndGgsIHRtbywgU1VCTUlUKTsKKwkJc25vb3BfdXJiKGRldiwgTlVMTCwgcGlwZSwgY3RybC53TGVuZ3RoLCB0bW8sIFNVQk1JVCwKKwkJCXRidWYsIGN0cmwud0xlbmd0aCk7CiAKIAkJdXNiX3VubG9ja19kZXZpY2UoZGV2KTsKIAkJaSA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLCBjdHJsLmJSZXF1ZXN0LAogCQkJCSAgICBjdHJsLmJSZXF1ZXN0VHlwZSwgY3RybC53VmFsdWUsIGN0cmwud0luZGV4LAogCQkJCSAgICB0YnVmLCBjdHJsLndMZW5ndGgsIHRtbyk7CiAJCXVzYl9sb2NrX2RldmljZShkZXYpOwotCQlzbm9vcF91cmIoZGV2LCBOVUxMLCBwaXBlLCBtYXgoaSwgMCksIG1pbihpLCAwKSwgQ09NUExFVEUpOworCQlzbm9vcF91cmIoZGV2LCBOVUxMLCBwaXBlLCBtYXgoaSwgMCksIG1pbihpLCAwKSwgQ09NUExFVEUsIE5VTEwsIDApOwogCX0KIAlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdGJ1Zik7CiAJaWYgKGkgPCAwICYmIGkgIT0gLUVQSVBFKSB7CkBAIC04NTMsMTIgKzg3MywxMiBAQAogCQkJa2ZyZWUodGJ1Zik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlzbm9vcF91cmIoZGV2LCBOVUxMLCBwaXBlLCBsZW4xLCB0bW8sIFNVQk1JVCk7CisJCXNub29wX3VyYihkZXYsIE5VTEwsIHBpcGUsIGxlbjEsIHRtbywgU1VCTUlULCBOVUxMLCAwKTsKIAogCQl1c2JfdW5sb2NrX2RldmljZShkZXYpOwogCQlpID0gdXNiX2J1bGtfbXNnKGRldiwgcGlwZSwgdGJ1ZiwgbGVuMSwgJmxlbjIsIHRtbyk7CiAJCXVzYl9sb2NrX2RldmljZShkZXYpOwotCQlzbm9vcF91cmIoZGV2LCBOVUxMLCBwaXBlLCBsZW4yLCBpLCBDT01QTEVURSk7CisJCXNub29wX3VyYihkZXYsIE5VTEwsIHBpcGUsIGxlbjIsIGksIENPTVBMRVRFLCB0YnVmLCBsZW4yKTsKIAogCQlpZiAoIWkgJiYgbGVuMikgewogCQkJaWYgKGNvcHlfdG9fdXNlcihidWxrLmRhdGEsIHRidWYsIGxlbjIpKSB7CkBAIC04NzMsMTIgKzg5MywxMiBAQAogCQkJCXJldHVybiAtRUZBVUxUOwogCQkJfQogCQl9Ci0JCXNub29wX3VyYihkZXYsIE5VTEwsIHBpcGUsIGxlbjEsIHRtbywgU1VCTUlUKTsKKwkJc25vb3BfdXJiKGRldiwgTlVMTCwgcGlwZSwgbGVuMSwgdG1vLCBTVUJNSVQsIHRidWYsIGxlbjEpOwogCiAJCXVzYl91bmxvY2tfZGV2aWNlKGRldik7CiAJCWkgPSB1c2JfYnVsa19tc2coZGV2LCBwaXBlLCB0YnVmLCBsZW4xLCAmbGVuMiwgdG1vKTsKIAkJdXNiX2xvY2tfZGV2aWNlKGRldik7Ci0JCXNub29wX3VyYihkZXYsIE5VTEwsIHBpcGUsIGxlbjIsIGksIENPTVBMRVRFKTsKKwkJc25vb3BfdXJiKGRldiwgTlVMTCwgcGlwZSwgbGVuMiwgaSwgQ09NUExFVEUsIE5VTEwsIDApOwogCX0KIAlrZnJlZSh0YnVmKTsKIAlpZiAoaSA8IDApCkBAIC0xMDk3LDYgKzExMTcsMTMgQEAKIAkJCWlzX2luID0gMDsKIAkJCXV1cmItPmVuZHBvaW50ICY9IH5VU0JfRElSX0lOOwogCQl9CisJCXNub29wKCZwcy0+ZGV2LT5kZXYsICJjb250cm9sIHVyYjogYlJlcXVlc3RUeXBlPSUwMnggIgorCQkJImJSZXF1ZXN0PSUwMnggd1ZhbHVlPSUwNHggIgorCQkJIndJbmRleD0lMDR4IHdMZW5ndGg9JTA0eFxuIiwKKwkJCWRyLT5iUmVxdWVzdFR5cGUsIGRyLT5iUmVxdWVzdCwKKwkJCV9fbGUxNl90b19jcHVwKCZkci0+d1ZhbHVlKSwKKwkJCV9fbGUxNl90b19jcHVwKCZkci0+d0luZGV4KSwKKwkJCV9fbGUxNl90b19jcHVwKCZkci0+d0xlbmd0aCkpOwogCQlicmVhazsKIAogCWNhc2UgVVNCREVWRlNfVVJCX1RZUEVfQlVMSzoKQEAgLTExMDQsMTMgKzExMzEsMjUgQEAKIAkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MOgogCQljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lTT0M6CiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJLyogYWxsb3cgc2luZ2xlLXNob3QgaW50ZXJydXB0IHRyYW5zZmVycywgYXQgYm9ndXMgcmF0ZXMgKi8KKwkJY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6CisJCQkvKiBhbGxvdyBzaW5nbGUtc2hvdCBpbnRlcnJ1cHQgdHJhbnNmZXJzICovCisJCQl1dXJiLT50eXBlID0gVVNCREVWRlNfVVJCX1RZUEVfSU5URVJSVVBUOworCQkJZ290byBpbnRlcnJ1cHRfdXJiOwogCQl9CiAJCXV1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gMDsKIAkJaWYgKHV1cmItPmJ1ZmZlcl9sZW5ndGggPiBNQVhfVVNCRlNfQlVGRkVSX1NJWkUpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiAKKwljYXNlIFVTQkRFVkZTX1VSQl9UWVBFX0lOVEVSUlVQVDoKKwkJaWYgKCF1c2JfZW5kcG9pbnRfeGZlcl9pbnQoJmVwLT5kZXNjKSkKKwkJCXJldHVybiAtRUlOVkFMOworIGludGVycnVwdF91cmI6CisJCXV1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gMDsKKwkJaWYgKHV1cmItPmJ1ZmZlcl9sZW5ndGggPiBNQVhfVVNCRlNfQlVGRkVSX1NJWkUpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJYnJlYWs7CisKIAljYXNlIFVTQkRFVkZTX1VSQl9UWVBFX0lTTzoKIAkJLyogYXJiaXRyYXJ5IGxpbWl0ICovCiAJCWlmICh1dXJiLT5udW1iZXJfb2ZfcGFja2V0cyA8IDEgfHwKQEAgLTExNDMsMTQgKzExODIsNiBAQAogCQl1dXJiLT5idWZmZXJfbGVuZ3RoID0gdG90bGVuOwogCQlicmVhazsKIAotCWNhc2UgVVNCREVWRlNfVVJCX1RZUEVfSU5URVJSVVBUOgotCQl1dXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IDA7Ci0JCWlmICghdXNiX2VuZHBvaW50X3hmZXJfaW50KCZlcC0+ZGVzYykpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJaWYgKHV1cmItPmJ1ZmZlcl9sZW5ndGggPiBNQVhfVVNCRlNfQlVGRkVSX1NJWkUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0KIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xMjM2LDcgKzEyNjcsOSBAQAogCQl9CiAJfQogCXNub29wX3VyYihwcy0+ZGV2LCBhcy0+dXNlcnVyYiwgYXMtPnVyYi0+cGlwZSwKLQkJCWFzLT51cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsIDAsIFNVQk1JVCk7CisJCQlhcy0+dXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCAwLCBTVUJNSVQsCisJCQlpc19pbiA/IE5VTEwgOiBhcy0+dXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJdXVyYi0+YnVmZmVyX2xlbmd0aCk7CiAJYXN5bmNfbmV3cGVuZGluZyhhcyk7CiAKIAlpZiAodXNiX2VuZHBvaW50X3hmZXJfYnVsaygmZXAtPmRlc2MpKSB7CkBAIC0xMjc0LDcgKzEzMDcsNyBAQAogCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcsICZwcy0+ZGV2LT5kZXYsCiAJCQkgICAidXNiZnM6IHVzYl9zdWJtaXRfdXJiIHJldHVybmVkICVkXG4iLCByZXQpOwogCQlzbm9vcF91cmIocHMtPmRldiwgYXMtPnVzZXJ1cmIsIGFzLT51cmItPnBpcGUsCi0JCQkJMCwgcmV0LCBDT01QTEVURSk7CisJCQkJMCwgcmV0LCBDT01QTEVURSwgTlVMTCwgMCk7CiAJCWFzeW5jX3JlbW92ZXBlbmRpbmcoYXMpOwogCQlmcmVlX2FzeW5jKGFzKTsKIAkJcmV0dXJuIHJldDsKQEAgLTE2MjgsNyArMTY2MSwxMCBAQAogCQlpZiAoZHJpdmVyID09IE5VTEwgfHwgZHJpdmVyLT5pb2N0bCA9PSBOVUxMKSB7CiAJCQlyZXR2YWwgPSAtRU5PVFRZOwogCQl9IGVsc2UgeworCQkJLyoga2VlcCBBUEkgdGhhdCBndWFyYW50ZWVzIEJLTCAqLworCQkJbG9ja19rZXJuZWwoKTsKIAkJCXJldHZhbCA9IGRyaXZlci0+aW9jdGwoaW50ZiwgY3RsLT5pb2N0bF9jb2RlLCBidWYpOworCQkJdW5sb2NrX2tlcm5lbCgpOwogCQkJaWYgKHJldHZhbCA9PSAtRU5PSU9DVExDTUQpCiAJCQkJcmV0dmFsID0gLUVOT1RUWTsKIAkJfQpAQCAtMTcxMSw2ICsxNzQ3LDcgQEAKIAogCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKIAkJcmV0dXJuIC1FUEVSTTsKKwogCXVzYl9sb2NrX2RldmljZShkZXYpOwogCWlmICghY29ubmVjdGVkKHBzKSkgewogCQl1c2JfdW5sb2NrX2RldmljZShkZXYpOwpAQCAtMTg3Nyw5ICsxOTE0LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0JbG9ja19rZXJuZWwoKTsKIAlyZXQgPSB1c2JkZXZfZG9faW9jdGwoZmlsZSwgY21kLCAodm9pZCBfX3VzZXIgKilhcmcpOwotCXVubG9ja19rZXJuZWwoKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xODkwLDkgKzE5MjUsNyBAQAogewogCWludCByZXQ7CiAKLQlsb2NrX2tlcm5lbCgpOwogCXJldCA9IHVzYmRldl9kb19pb2N0bChmaWxlLCBjbWQsIGNvbXBhdF9wdHIoYXJnKSk7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCmluZGV4IGYyZjA1NWUuLmYzYzIzMzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9xdWlya3MuaD4KLSNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CiAjaW5jbHVkZSAiaGNkLmgiCiAjaW5jbHVkZSAidXNiLmgiCiAKQEAgLTIyMSw3ICsyMjEsNyBAQAogewogCXN0cnVjdCB1c2JfZGV2aWNlX2RyaXZlciAqdWRyaXZlciA9IHRvX3VzYl9kZXZpY2VfZHJpdmVyKGRldi0+ZHJpdmVyKTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKLQlpbnQgZXJyb3IgPSAtRU5PREVWOworCWludCBlcnJvciA9IDA7CiAKIAlkZXZfZGJnKGRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CiAKQEAgLTIzMCwxOCArMjMwLDIzIEBACiAJLyogVGhlIGRldmljZSBzaG91bGQgYWx3YXlzIGFwcGVhciB0byBiZSBpbiB1c2UKIAkgKiB1bmxlc3MgdGhlIGRyaXZlciBzdXBvcnRzIGF1dG9zdXNwZW5kLgogCSAqLwotCXVkZXYtPnBtX3VzYWdlX2NudCA9ICEodWRyaXZlci0+c3VwcG9ydHNfYXV0b3N1c3BlbmQpOworCWlmICghdWRyaXZlci0+c3VwcG9ydHNfYXV0b3N1c3BlbmQpCisJCWVycm9yID0gdXNiX2F1dG9yZXN1bWVfZGV2aWNlKHVkZXYpOwogCi0JZXJyb3IgPSB1ZHJpdmVyLT5wcm9iZSh1ZGV2KTsKKwlpZiAoIWVycm9yKQorCQllcnJvciA9IHVkcml2ZXItPnByb2JlKHVkZXYpOwogCXJldHVybiBlcnJvcjsKIH0KIAogLyogY2FsbGVkIGZyb20gZHJpdmVyIGNvcmUgd2l0aCBkZXYgbG9ja2VkICovCiBzdGF0aWMgaW50IHVzYl91bmJpbmRfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKIAlzdHJ1Y3QgdXNiX2RldmljZV9kcml2ZXIgKnVkcml2ZXIgPSB0b191c2JfZGV2aWNlX2RyaXZlcihkZXYtPmRyaXZlcik7CiAKLQl1ZHJpdmVyLT5kaXNjb25uZWN0KHRvX3VzYl9kZXZpY2UoZGV2KSk7CisJdWRyaXZlci0+ZGlzY29ubmVjdCh1ZGV2KTsKKwlpZiAoIXVkcml2ZXItPnN1cHBvcnRzX2F1dG9zdXNwZW5kKQorCQl1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKHVkZXYpOwogCXJldHVybiAwOwogfQogCkBAIC0yNzQsNjAgKzI3OSw2MiBAQAogCWludGYtPm5lZWRzX2JpbmRpbmcgPSAwOwogCiAJaWYgKHVzYl9kZXZpY2VfaXNfb3duZWQodWRldikpCi0JCXJldHVybiAtRU5PREVWOworCQlyZXR1cm4gZXJyb3I7CiAKIAlpZiAodWRldi0+YXV0aG9yaXplZCA9PSAwKSB7CiAJCWRldl9lcnIoJmludGYtPmRldiwgIkRldmljZSBpcyBub3QgYXV0aG9yaXplZCBmb3IgdXNhZ2VcbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKKwkJcmV0dXJuIGVycm9yOwogCX0KIAogCWlkID0gdXNiX21hdGNoX2lkKGludGYsIGRyaXZlci0+aWRfdGFibGUpOwogCWlmICghaWQpCiAJCWlkID0gdXNiX21hdGNoX2R5bmFtaWNfaWQoaW50ZiwgZHJpdmVyKTsKLQlpZiAoaWQpIHsKLQkJZGV2X2RiZyhkZXYsICIlcyAtIGdvdCBpZFxuIiwgX19mdW5jX18pOworCWlmICghaWQpCisJCXJldHVybiBlcnJvcjsKIAotCQllcnJvciA9IHVzYl9hdXRvcmVzdW1lX2RldmljZSh1ZGV2KTsKLQkJaWYgKGVycm9yKQotCQkJcmV0dXJuIGVycm9yOworCWRldl9kYmcoZGV2LCAiJXMgLSBnb3QgaWRcbiIsIF9fZnVuY19fKTsKIAotCQkvKiBJbnRlcmZhY2UgInBvd2VyIHN0YXRlIiBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYW55IGhhcmR3YXJlCi0JCSAqIHN0YXRlIHdoYXRzb2V2ZXIuICBXZSB1c2UgaXQgdG8gcmVjb3JkIHdoZW4gaXQncyBib3VuZCB0bwotCQkgKiBhIGRyaXZlciB0aGF0IG1heSBzdGFydCBJLzA6ICBpdCdzIG5vdCBmcm96ZW4vcXVpZXNjZWQuCi0JCSAqLwotCQltYXJrX2FjdGl2ZShpbnRmKTsKLQkJaW50Zi0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9CSU5ESU5HOworCWVycm9yID0gdXNiX2F1dG9yZXN1bWVfZGV2aWNlKHVkZXYpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOwogCi0JCS8qIFRoZSBpbnRlcmZhY2Ugc2hvdWxkIGFsd2F5cyBhcHBlYXIgdG8gYmUgaW4gdXNlCi0JCSAqIHVubGVzcyB0aGUgZHJpdmVyIHN1cG9ydHMgYXV0b3N1c3BlbmQuCi0JCSAqLwotCQlhdG9taWNfc2V0KCZpbnRmLT5wbV91c2FnZV9jbnQsICFkcml2ZXItPnN1cHBvcnRzX2F1dG9zdXNwZW5kKTsKKwlpbnRmLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX0JJTkRJTkc7CiAKLQkJLyogQ2Fycnkgb3V0IGEgZGVmZXJyZWQgc3dpdGNoIHRvIGFsdHNldHRpbmcgMCAqLwotCQlpZiAoaW50Zi0+bmVlZHNfYWx0c2V0dGluZzApIHsKLQkJCWVycm9yID0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgaW50Zi0+YWx0c2V0dGluZ1swXS4KLQkJCQkJZGVzYy5iSW50ZXJmYWNlTnVtYmVyLCAwKTsKLQkJCWlmIChlcnJvciA8IDApCi0JCQkJZ290byBlcnI7CisJLyogQm91bmQgaW50ZXJmYWNlcyBhcmUgaW5pdGlhbGx5IGFjdGl2ZS4gIFRoZXkgYXJlCisJICogcnVudGltZS1QTS1lbmFibGVkIG9ubHkgaWYgdGhlIGRyaXZlciBoYXMgYXV0b3N1c3BlbmQgc3VwcG9ydC4KKwkgKiBUaGV5IGFyZSBzZW5zaXRpdmUgdG8gdGhlaXIgY2hpbGRyZW4ncyBwb3dlciBzdGF0ZXMuCisJICovCisJcG1fcnVudGltZV9zZXRfYWN0aXZlKGRldik7CisJcG1fc3VzcGVuZF9pZ25vcmVfY2hpbGRyZW4oZGV2LCBmYWxzZSk7CisJaWYgKGRyaXZlci0+c3VwcG9ydHNfYXV0b3N1c3BlbmQpCisJCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CiAKLQkJCWludGYtPm5lZWRzX2FsdHNldHRpbmcwID0gMDsKLQkJfQotCi0JCWVycm9yID0gZHJpdmVyLT5wcm9iZShpbnRmLCBpZCk7Ci0JCWlmIChlcnJvcikKKwkvKiBDYXJyeSBvdXQgYSBkZWZlcnJlZCBzd2l0Y2ggdG8gYWx0c2V0dGluZyAwICovCisJaWYgKGludGYtPm5lZWRzX2FsdHNldHRpbmcwKSB7CisJCWVycm9yID0gdXNiX3NldF9pbnRlcmZhY2UodWRldiwgaW50Zi0+YWx0c2V0dGluZ1swXS4KKwkJCQlkZXNjLmJJbnRlcmZhY2VOdW1iZXIsIDApOworCQlpZiAoZXJyb3IgPCAwKQogCQkJZ290byBlcnI7Ci0KLQkJaW50Zi0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9CT1VORDsKLQkJdXNiX2F1dG9zdXNwZW5kX2RldmljZSh1ZGV2KTsKKwkJaW50Zi0+bmVlZHNfYWx0c2V0dGluZzAgPSAwOwogCX0KIAorCWVycm9yID0gZHJpdmVyLT5wcm9iZShpbnRmLCBpZCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGVycjsKKworCWludGYtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfQk9VTkQ7CisJdXNiX2F1dG9zdXNwZW5kX2RldmljZSh1ZGV2KTsKIAlyZXR1cm4gZXJyb3I7CiAKLWVycjoKLQltYXJrX3F1aWVzY2VkKGludGYpOworIGVycjoKIAlpbnRmLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMDsKIAlpbnRmLT5jb25kaXRpb24gPSBVU0JfSU5URVJGQUNFX1VOQk9VTkQ7CiAJdXNiX2NhbmNlbF9xdWV1ZWRfcmVzZXQoaW50Zik7CisKKwkvKiBVbmJvdW5kIGludGVyZmFjZXMgYXJlIGFsd2F5cyBydW50aW1lLVBNLWRpc2FibGVkIGFuZCAtc3VzcGVuZGVkICovCisJcG1fcnVudGltZV9kaXNhYmxlKGRldik7CisJcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKGRldik7CisKIAl1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKHVkZXYpOwogCXJldHVybiBlcnJvcjsKIH0KQEAgLTM3Nyw5ICszODQsMTcgQEAKIAl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwogCiAJaW50Zi0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9VTkJPVU5EOwotCW1hcmtfcXVpZXNjZWQoaW50Zik7CiAJaW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCA9IDA7CiAKKwkvKiBVbmJvdW5kIGludGVyZmFjZXMgYXJlIGFsd2F5cyBydW50aW1lLVBNLWRpc2FibGVkIGFuZCAtc3VzcGVuZGVkICovCisJcG1fcnVudGltZV9kaXNhYmxlKGRldik7CisJcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKGRldik7CisKKwkvKiBVbmRvIGFueSByZXNpZHVhbCBwbV9hdXRvcG1fZ2V0X2ludGVyZmFjZV8qIGNhbGxzICovCisJZm9yIChyID0gYXRvbWljX3JlYWQoJmludGYtPnBtX3VzYWdlX2NudCk7IHIgPiAwOyAtLXIpCisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9ub19zdXNwZW5kKGludGYpOworCWF0b21pY19zZXQoJmludGYtPnBtX3VzYWdlX2NudCwgMCk7CisKIAlpZiAoIWVycm9yKQogCQl1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKHVkZXYpOwogCkBAIC00MTAsNyArNDI1LDYgQEAKIAkJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHZvaWQgKnByaXYpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2ID0gJmlmYWNlLT5kZXY7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGlmYWNlKTsKIAlpbnQgcmV0dmFsID0gMDsKIAogCWlmIChkZXYtPmRyaXZlcikKQEAgLTQyMCwxMSArNDM0LDE2IEBACiAJdXNiX3NldF9pbnRmZGF0YShpZmFjZSwgcHJpdik7CiAJaWZhY2UtPm5lZWRzX2JpbmRpbmcgPSAwOwogCi0JdXNiX3BtX2xvY2sodWRldik7CiAJaWZhY2UtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfQk9VTkQ7Ci0JbWFya19hY3RpdmUoaWZhY2UpOwotCWF0b21pY19zZXQoJmlmYWNlLT5wbV91c2FnZV9jbnQsICFkcml2ZXItPnN1cHBvcnRzX2F1dG9zdXNwZW5kKTsKLQl1c2JfcG1fdW5sb2NrKHVkZXYpOworCisJLyogQm91bmQgaW50ZXJmYWNlcyBhcmUgaW5pdGlhbGx5IGFjdGl2ZS4gIFRoZXkgYXJlCisJICogcnVudGltZS1QTS1lbmFibGVkIG9ubHkgaWYgdGhlIGRyaXZlciBoYXMgYXV0b3N1c3BlbmQgc3VwcG9ydC4KKwkgKiBUaGV5IGFyZSBzZW5zaXRpdmUgdG8gdGhlaXIgY2hpbGRyZW4ncyBwb3dlciBzdGF0ZXMuCisJICovCisJcG1fcnVudGltZV9zZXRfYWN0aXZlKGRldik7CisJcG1fc3VzcGVuZF9pZ25vcmVfY2hpbGRyZW4oZGV2LCBmYWxzZSk7CisJaWYgKGRyaXZlci0+c3VwcG9ydHNfYXV0b3N1c3BlbmQpCisJCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CiAKIAkvKiBpZiBpbnRlcmZhY2Ugd2FzIGFscmVhZHkgYWRkZWQsIGJpbmQgbm93OyBlbHNlIGxldAogCSAqIHRoZSBmdXR1cmUgZGV2aWNlX2FkZCgpIGJpbmQgaXQsIGJ5cGFzc2luZyBwcm9iZSgpCkBAIC00NzAsMTAgKzQ4OSwxMCBAQAogCWlmIChkZXZpY2VfaXNfcmVnaXN0ZXJlZChkZXYpKSB7CiAJCWRldmljZV9yZWxlYXNlX2RyaXZlcihkZXYpOwogCX0gZWxzZSB7Ci0JCWRvd24oJmRldi0+c2VtKTsKKwkJZGV2aWNlX2xvY2soZGV2KTsKIAkJdXNiX3VuYmluZF9pbnRlcmZhY2UoZGV2KTsKIAkJZGV2LT5kcml2ZXIgPSBOVUxMOwotCQl1cCgmZGV2LT5zZW0pOworCQlkZXZpY2VfdW5sb2NrKGRldik7CiAJfQogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZSk7CkBAIC02OTEsOSArNzEwLDYgQEAKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjsKIAotCS8qIGRyaXZlciBpcyBvZnRlbiBudWxsIGhlcmU7IGRldl9kYmcoKSB3b3VsZCBvb3BzICovCi0JcHJfZGVidWcoInVzYiAlczogdWV2ZW50XG4iLCBkZXZfbmFtZShkZXYpKTsKLQogCWlmIChpc191c2JfZGV2aWNlKGRldikpIHsKIAkJdXNiX2RldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKIAl9IGVsc2UgaWYgKGlzX3VzYl9pbnRlcmZhY2UoZGV2KSkgewpAQCAtNzA1LDYgKzcyMSw3IEBACiAJfQogCiAJaWYgKHVzYl9kZXYtPmRldm51bSA8IDApIHsKKwkJLyogZHJpdmVyIGlzIG9mdGVuIG51bGwgaGVyZTsgZGV2X2RiZygpIHdvdWxkIG9vcHMgKi8KIAkJcHJfZGVidWcoInVzYiAlczogYWxyZWFkeSBkZWxldGVkP1xuIiwgZGV2X25hbWUoZGV2KSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTk4Myw3ICsxMDAwLDYgQEAKIAl9CiB9CiAKLS8qIENhbGxlciBoYXMgbG9ja2VkIHVkZXYncyBwbV9tdXRleCAqLwogc3RhdGljIGludCB1c2Jfc3VzcGVuZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2VfZHJpdmVyCSp1ZHJpdmVyOwpAQCAtMTAwNyw3ICsxMDIzLDYgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCi0vKiBDYWxsZXIgaGFzIGxvY2tlZCB1ZGV2J3MgcG1fbXV0ZXggKi8KIHN0YXRpYyBpbnQgdXNiX3Jlc3VtZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2VfZHJpdmVyCSp1ZHJpdmVyOwpAQCAtMTA0MSwyNyArMTA1NiwyMCBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLS8qIENhbGxlciBoYXMgbG9ja2VkIGludGYncyB1c2JfZGV2aWNlJ3MgcG0gbXV0ZXggKi8KIHN0YXRpYyBpbnQgdXNiX3N1c3BlbmRfaW50ZXJmYWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAogCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1zZykKIHsKIAlzdHJ1Y3QgdXNiX2RyaXZlcgkqZHJpdmVyOwogCWludAkJCXN0YXR1cyA9IDA7CiAKLQkvKiB3aXRoIG5vIGhhcmR3YXJlLCBVU0IgaW50ZXJmYWNlcyBvbmx5IHVzZSBGUkVFWkUgYW5kIE9OIHN0YXRlcyAqLwotCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQgfHwgIWlzX2FjdGl2ZShpbnRmKSkKLQkJZ290byBkb25lOwotCi0JLyogVGhpcyBjYW4gaGFwcGVuOyBzZWUgdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZSgpICovCi0JaWYgKGludGYtPmNvbmRpdGlvbiA9PSBVU0JfSU5URVJGQUNFX1VOQk9VTkQpCisJaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCB8fAorCQkJaW50Zi0+Y29uZGl0aW9uID09IFVTQl9JTlRFUkZBQ0VfVU5CT1VORCkKIAkJZ290byBkb25lOwogCWRyaXZlciA9IHRvX3VzYl9kcml2ZXIoaW50Zi0+ZGV2LmRyaXZlcik7CiAKIAlpZiAoZHJpdmVyLT5zdXNwZW5kKSB7CiAJCXN0YXR1cyA9IGRyaXZlci0+c3VzcGVuZChpbnRmLCBtc2cpOwotCQlpZiAoc3RhdHVzID09IDApCi0JCQltYXJrX3F1aWVzY2VkKGludGYpOwotCQllbHNlIGlmICghKG1zZy5ldmVudCAmIFBNX0VWRU5UX0FVVE8pKQorCQlpZiAoc3RhdHVzICYmICEobXNnLmV2ZW50ICYgUE1fRVZFTlRfQVVUTykpCiAJCQlkZXZfZXJyKCZpbnRmLT5kZXYsICIlcyBlcnJvciAlZFxuIiwKIAkJCQkJInN1c3BlbmQiLCBzdGF0dXMpOwogCX0gZWxzZSB7CkBAIC0xMDY5LDcgKzEwNzcsNiBAQAogCQlpbnRmLT5uZWVkc19iaW5kaW5nID0gMTsKIAkJZGV2X3dhcm4oJmludGYtPmRldiwgIm5vICVzIGZvciBkcml2ZXIgJXM/XG4iLAogCQkJCSJzdXNwZW5kIiwgZHJpdmVyLT5uYW1lKTsKLQkJbWFya19xdWllc2NlZChpbnRmKTsKIAl9CiAKICBkb25lOgpAQCAtMTA3NywxNCArMTA4NCwxMyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLS8qIENhbGxlciBoYXMgbG9ja2VkIGludGYncyB1c2JfZGV2aWNlJ3MgcG1fbXV0ZXggKi8KIHN0YXRpYyBpbnQgdXNiX3Jlc3VtZV9pbnRlcmZhY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCiAJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbXNnLCBpbnQgcmVzZXRfcmVzdW1lKQogewogCXN0cnVjdCB1c2JfZHJpdmVyCSpkcml2ZXI7CiAJaW50CQkJc3RhdHVzID0gMDsKIAotCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQgfHwgaXNfYWN0aXZlKGludGYpKQorCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpCiAJCWdvdG8gZG9uZTsKIAogCS8qIERvbid0IGxldCBhdXRvcmVzdW1lIGludGVyZmVyZSB3aXRoIHVuYmluZGluZyAqLwpAQCAtMTEzNSw5MCArMTE0MSwxMSBAQAogCiBkb25lOgogCWRldl92ZGJnKCZpbnRmLT5kZXYsICIlczogc3RhdHVzICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKLQlpZiAoc3RhdHVzID09IDAgJiYgaW50Zi0+Y29uZGl0aW9uID09IFVTQl9JTlRFUkZBQ0VfQk9VTkQpCi0JCW1hcmtfYWN0aXZlKGludGYpOwogCiAJLyogTGF0ZXIgd2Ugd2lsbCB1bmJpbmQgdGhlIGRyaXZlciBhbmQvb3IgcmVwcm9iZSwgaWYgbmVjZXNzYXJ5ICovCiAJcmV0dXJuIHN0YXR1czsKIH0KIAotI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAotCi0vKiBJbnRlcm5hbCByb3V0aW5lIHRvIGNoZWNrIHdoZXRoZXIgd2UgbWF5IGF1dG9zdXNwZW5kIGEgZGV2aWNlLiAqLwotc3RhdGljIGludCBhdXRvc3VzcGVuZF9jaGVjayhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IHJlc2NoZWR1bGUpCi17Ci0JaW50CQkJaTsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZjsKLQl1bnNpZ25lZCBsb25nCQlzdXNwZW5kX3RpbWUsIGo7Ci0KLQkvKiBGb3IgYXV0b3N1c3BlbmQsIGZhaWwgZmFzdCBpZiBhbnl0aGluZyBpcyBpbiB1c2Ugb3IgYXV0b3N1c3BlbmQKLQkgKiBpcyBkaXNhYmxlZC4gIEFsc28gZmFpbCBpZiBhbnkgaW50ZXJmYWNlcyByZXF1aXJlIHJlbW90ZSB3YWtldXAKLQkgKiBidXQgaXQgaXNuJ3QgYXZhaWxhYmxlLgotCSAqLwotCWlmICh1ZGV2LT5wbV91c2FnZV9jbnQgPiAwKQotCQlyZXR1cm4gLUVCVVNZOwotCWlmICh1ZGV2LT5hdXRvc3VzcGVuZF9kZWxheSA8IDAgfHwgdWRldi0+YXV0b3N1c3BlbmRfZGlzYWJsZWQpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlzdXNwZW5kX3RpbWUgPSB1ZGV2LT5sYXN0X2J1c3kgKyB1ZGV2LT5hdXRvc3VzcGVuZF9kZWxheTsKLQlpZiAodWRldi0+YWN0Y29uZmlnKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgewotCQkJaW50ZiA9IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldOwotCQkJaWYgKCFpc19hY3RpdmUoaW50ZikpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoYXRvbWljX3JlYWQoJmludGYtPnBtX3VzYWdlX2NudCkgPiAwKQotCQkJCXJldHVybiAtRUJVU1k7Ci0JCQlpZiAoaW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCAmJgotCQkJCQkhdWRldi0+ZG9fcmVtb3RlX3dha2V1cCkgewotCQkJCWRldl9kYmcoJnVkZXYtPmRldiwgInJlbW90ZSB3YWtldXAgbmVlZGVkICIKLQkJCQkJCSJmb3IgYXV0b3N1c3BlbmRcbiIpOwotCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJCX0KLQotCQkJLyogRG9uJ3QgYWxsb3cgYXV0b3N1c3BlbmQgaWYgdGhlIGRldmljZSB3aWxsIG5lZWQKLQkJCSAqIGEgcmVzZXQtcmVzdW1lIGFuZCBhbnkgb2YgaXRzIGludGVyZmFjZSBkcml2ZXJzCi0JCQkgKiBkb2Vzbid0IGluY2x1ZGUgc3VwcG9ydC4KLQkJCSAqLwotCQkJaWYgKHVkZXYtPnF1aXJrcyAmIFVTQl9RVUlSS19SRVNFVF9SRVNVTUUpIHsKLQkJCQlzdHJ1Y3QgdXNiX2RyaXZlciAqZHJpdmVyOwotCi0JCQkJZHJpdmVyID0gdG9fdXNiX2RyaXZlcihpbnRmLT5kZXYuZHJpdmVyKTsKLQkJCQlpZiAoIWRyaXZlci0+cmVzZXRfcmVzdW1lIHx8Ci0JCQkJICAgIGludGYtPm5lZWRzX3JlbW90ZV93YWtldXApCi0JCQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJCX0KLQkJfQotCX0KLQotCS8qIElmIGV2ZXJ5dGhpbmcgaXMgb2theSBidXQgdGhlIGRldmljZSBoYXNuJ3QgYmVlbiBpZGxlIGZvciBsb25nCi0JICogZW5vdWdoLCBxdWV1ZSBhIGRlbGF5ZWQgYXV0b3N1c3BlbmQgcmVxdWVzdC4gIElmIHRoZSBkZXZpY2UKLQkgKiBfaGFzXyBiZWVuIGlkbGUgZm9yIGxvbmcgZW5vdWdoIGFuZCB0aGUgcmVzY2hlZHVsZSBmbGFnIGlzIHNldCwKLQkgKiBsaWtld2lzZSBxdWV1ZSBhIGRlbGF5ZWQgKDEgc2Vjb25kKSBhdXRvc3VzcGVuZCByZXF1ZXN0LgotCSAqLwotCWogPSBqaWZmaWVzOwotCWlmICh0aW1lX2JlZm9yZShqLCBzdXNwZW5kX3RpbWUpKQotCQlyZXNjaGVkdWxlID0gMTsKLQllbHNlCi0JCXN1c3BlbmRfdGltZSA9IGogKyBIWjsKLQlpZiAocmVzY2hlZHVsZSkgewotCQlpZiAoIXRpbWVyX3BlbmRpbmcoJnVkZXYtPmF1dG9zdXNwZW5kLnRpbWVyKSkgewotCQkJcXVldWVfZGVsYXllZF93b3JrKGtzdXNwZW5kX3VzYl93cSwgJnVkZXYtPmF1dG9zdXNwZW5kLAotCQkJCXJvdW5kX2ppZmZpZXNfdXBfcmVsYXRpdmUoc3VzcGVuZF90aW1lIC0gaikpOwotCQl9Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UKLQotc3RhdGljIGlubGluZSBpbnQgYXV0b3N1c3BlbmRfY2hlY2soc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCByZXNjaGVkdWxlKQotewotCXJldHVybiAwOwotfQotCi0jZW5kaWYJLyogQ09ORklHX1VTQl9TVVNQRU5EICovCi0KIC8qKgogICogdXNiX3N1c3BlbmRfYm90aCAtIHN1c3BlbmQgYSBVU0IgZGV2aWNlIGFuZCBpdHMgaW50ZXJmYWNlcwogICogQHVkZXY6IHRoZSB1c2JfZGV2aWNlIHRvIHN1c3BlbmQKQEAgLTEyMzAsMjcgKzExNTcsMTIgQEAKICAqIGFsbCB0aGUgaW50ZXJmYWNlcyB3aGljaCB3ZXJlIHN1c3BlbmRlZCBhcmUgcmVzdW1lZCBzbyB0aGF0IHRoZXkgcmVtYWluCiAgKiBpbiB0aGUgc2FtZSBzdGF0ZSBhcyB0aGUgZGV2aWNlLgogICoKLSAqIElmIGFuIGF1dG9zdXNwZW5kIGlzIGluIHByb2dyZXNzIHRoZSByb3V0aW5lIGNoZWNrcyBmaXJzdCB0byBtYWtlIHN1cmUKLSAqIHRoYXQgbmVpdGhlciB0aGUgZGV2aWNlIGl0c2VsZiBvciBhbnkgb2YgaXRzIGFjdGl2ZSBpbnRlcmZhY2VzIGlzIGluIHVzZQotICogKHBtX3VzYWdlX2NudCBpcyBncmVhdGVyIHRoYW4gMCkuICBJZiB0aGV5IGFyZSwgdGhlIGF1dG9zdXNwZW5kIGZhaWxzLgotICoKLSAqIElmIHRoZSBzdXNwZW5kIHN1Y2NlZWRzLCB0aGUgcm91dGluZSByZWN1cnNpdmVseSBxdWV1ZXMgYW4gYXV0b3N1c3BlbmQKLSAqIHJlcXVlc3QgZm9yIEB1ZGV2J3MgcGFyZW50IGRldmljZSwgdGhlcmVieSBwcm9wYWdhdGluZyB0aGUgY2hhbmdlIHVwCi0gKiB0aGUgZGV2aWNlIHRyZWUuICBJZiBhbGwgb2YgdGhlIHBhcmVudCdzIGNoaWxkcmVuIGFyZSBub3cgc3VzcGVuZGVkLAotICogdGhlIHBhcmVudCB3aWxsIGF1dG9zdXNwZW5kIGluIHR1cm4uCi0gKgotICogVGhlIHN1c3BlbmQgbWV0aG9kIGNhbGxzIGFyZSBzdWJqZWN0IHRvIG11dHVhbCBleGNsdXNpb24gdW5kZXIgY29udHJvbAotICogb2YgQHVkZXYncyBwbV9tdXRleC4gIE1hbnkgb2YgdGhlc2UgY2FsbHMgYXJlIGFsc28gdW5kZXIgdGhlIHByb3RlY3Rpb24KLSAqIG9mIEB1ZGV2J3MgZGV2aWNlIGxvY2sgKGluY2x1ZGluZyBhbGwgcmVxdWVzdHMgb3JpZ2luYXRpbmcgb3V0c2lkZSB0aGUKLSAqIFVTQiBzdWJzeXN0ZW0pLCBidXQgYXV0b3N1c3BlbmQgcmVxdWVzdHMgZ2VuZXJhdGVkIGJ5IGEgY2hpbGQgZGV2aWNlIG9yCi0gKiBpbnRlcmZhY2UgZHJpdmVyIG1heSBub3QgYmUuICBVc2Jjb3JlIHdpbGwgaW5zdXJlIHRoYXQgdGhlIG1ldGhvZCBjYWxscwotICogZG8gbm90IGFycml2ZSBkdXJpbmcgYmluZCwgdW5iaW5kLCBvciByZXNldCBvcGVyYXRpb25zLiAgSG93ZXZlciwgZHJpdmVycwotICogbXVzdCBiZSBwcmVwYXJlZCB0byBoYW5kbGUgc3VzcGVuZCBjYWxscyBhcnJpdmluZyBhdCB1bnByZWRpY3RhYmxlIHRpbWVzLgotICogVGhlIG9ubHkgd2F5IHRvIGJsb2NrIHN1Y2ggY2FsbHMgaXMgdG8gZG8gYW4gYXV0b3Jlc3VtZSAocHJldmVudGluZwotICogYXV0b3N1c3BlbmRzKSB3aGlsZSBob2xkaW5nIEB1ZGV2J3MgZGV2aWNlIGxvY2sgKHByZXZlbnRpbmcgb3V0c2lkZQotICogc3VzcGVuZHMpLgotICoKLSAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIEB1ZGV2LT5wbV9tdXRleC4KKyAqIEF1dG9zdXNwZW5kIHJlcXVlc3RzIG9yaWdpbmF0aW5nIGZyb20gYSBjaGlsZCBkZXZpY2Ugb3IgYW4gaW50ZXJmYWNlCisgKiBkcml2ZXIgbWF5IGJlIG1hZGUgd2l0aG91dCB0aGUgcHJvdGVjdGlvbiBvZiBAdWRldidzIGRldmljZSBsb2NrLCBidXQKKyAqIGFsbCBvdGhlciBzdXNwZW5kIGNhbGxzIHdpbGwgaG9sZCB0aGUgbG9jay4gIFVzYmNvcmUgd2lsbCBpbnN1cmUgdGhhdAorICogbWV0aG9kIGNhbGxzIGRvIG5vdCBhcnJpdmUgZHVyaW5nIGJpbmQsIHVuYmluZCwgb3IgcmVzZXQgb3BlcmF0aW9ucy4KKyAqIEhvd2V2ZXIgZHJpdmVycyBtdXN0IGJlIHByZXBhcmVkIHRvIGhhbmRsZSBzdXNwZW5kIGNhbGxzIGFycml2aW5nIGF0CisgKiB1bnByZWRpY3RhYmxlIHRpbWVzLgogICoKICAqIFRoaXMgcm91dGluZSBjYW4gcnVuIG9ubHkgaW4gcHJvY2VzcyBjb250ZXh0LgogICovCkBAIC0xMjU5LDIwICsxMTcxLDExIEBACiAJaW50CQkJc3RhdHVzID0gMDsKIAlpbnQJCQlpID0gMDsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZjsKLQlzdHJ1Y3QgdXNiX2RldmljZQkqcGFyZW50ID0gdWRldi0+cGFyZW50OwogCiAJaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCB8fAogCQkJdWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKIAkJZ290byBkb25lOwogCi0JdWRldi0+ZG9fcmVtb3RlX3dha2V1cCA9IGRldmljZV9tYXlfd2FrZXVwKCZ1ZGV2LT5kZXYpOwotCi0JaWYgKG1zZy5ldmVudCAmIFBNX0VWRU5UX0FVVE8pIHsKLQkJc3RhdHVzID0gYXV0b3N1c3BlbmRfY2hlY2sodWRldiwgMCk7Ci0JCWlmIChzdGF0dXMgPCAwKQotCQkJZ290byBkb25lOwotCX0KLQogCS8qIFN1c3BlbmQgYWxsIHRoZSBpbnRlcmZhY2VzIGFuZCB0aGVuIHVkZXYgaXRzZWxmICovCiAJaWYgKHVkZXYtPmFjdGNvbmZpZykgewogCQlmb3IgKDsgaSA8IHVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7CkBAIC0xMjg3LDM1ICsxMTkwLDIxIEBACiAKIAkvKiBJZiB0aGUgc3VzcGVuZCBmYWlsZWQsIHJlc3VtZSBpbnRlcmZhY2VzIHRoYXQgZGlkIGdldCBzdXNwZW5kZWQgKi8KIAlpZiAoc3RhdHVzICE9IDApIHsKLQkJcG1fbWVzc2FnZV90IG1zZzI7Ci0KLQkJbXNnMi5ldmVudCA9IG1zZy5ldmVudCBeIChQTV9FVkVOVF9TVVNQRU5EIHwgUE1fRVZFTlRfUkVTVU1FKTsKKwkJbXNnLmV2ZW50IF49IChQTV9FVkVOVF9TVVNQRU5EIHwgUE1fRVZFTlRfUkVTVU1FKTsKIAkJd2hpbGUgKC0taSA+PSAwKSB7CiAJCQlpbnRmID0gdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbaV07Ci0JCQl1c2JfcmVzdW1lX2ludGVyZmFjZSh1ZGV2LCBpbnRmLCBtc2cyLCAwKTsKKwkJCXVzYl9yZXN1bWVfaW50ZXJmYWNlKHVkZXYsIGludGYsIG1zZywgMCk7CiAJCX0KIAotCQkvKiBUcnkgYW5vdGhlciBhdXRvc3VzcGVuZCB3aGVuIHRoZSBpbnRlcmZhY2VzIGFyZW4ndCBidXN5ICovCi0JCWlmIChtc2cuZXZlbnQgJiBQTV9FVkVOVF9BVVRPKQotCQkJYXV0b3N1c3BlbmRfY2hlY2sodWRldiwgc3RhdHVzID09IC1FQlVTWSk7Ci0KLQkvKiBJZiB0aGUgc3VzcGVuZCBzdWNjZWVkZWQgdGhlbiBwcmV2ZW50IGFueSBtb3JlIFVSQiBzdWJtaXNzaW9ucywKLQkgKiBmbHVzaCBhbnkgb3V0c3RhbmRpbmcgVVJCcywgYW5kIHByb3BhZ2F0ZSB0aGUgc3VzcGVuZCB1cCB0aGUgdHJlZS4KKwkvKiBJZiB0aGUgc3VzcGVuZCBzdWNjZWVkZWQgdGhlbiBwcmV2ZW50IGFueSBtb3JlIFVSQiBzdWJtaXNzaW9ucworCSAqIGFuZCBmbHVzaCBhbnkgb3V0c3RhbmRpbmcgVVJCcy4KIAkgKi8KIAl9IGVsc2UgewotCQljYW5jZWxfZGVsYXllZF93b3JrKCZ1ZGV2LT5hdXRvc3VzcGVuZCk7CiAJCXVkZXYtPmNhbl9zdWJtaXQgPSAwOwogCQlmb3IgKGkgPSAwOyBpIDwgMTY7ICsraSkgewogCQkJdXNiX2hjZF9mbHVzaF9lbmRwb2ludCh1ZGV2LCB1ZGV2LT5lcF9vdXRbaV0pOwogCQkJdXNiX2hjZF9mbHVzaF9lbmRwb2ludCh1ZGV2LCB1ZGV2LT5lcF9pbltpXSk7CiAJCX0KLQotCQkvKiBJZiB0aGlzIGlzIGp1c3QgYSBGUkVFWkUgb3IgYSBQUkVUSEFXLCB1ZGV2IG1pZ2h0Ci0JCSAqIG5vdCByZWFsbHkgYmUgc3VzcGVuZGVkLiAgT25seSB0cnVlIHN1c3BlbmRzIGdldAotCQkgKiBwcm9wYWdhdGVkIHVwIHRoZSBkZXZpY2UgdHJlZS4KLQkJICovCi0JCWlmIChwYXJlbnQgJiYgdWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKLQkJCXVzYl9hdXRvc3VzcGVuZF9kZXZpY2UocGFyZW50KTsKIAl9CiAKICBkb25lOgpAQCAtMTMzMiwyMyArMTIyMSwxMiBAQAogICogdGhlIHJlc3VtZSBtZXRob2QgZm9yIEB1ZGV2IGFuZCB0aGVuIGNhbGxzIHRoZSByZXN1bWUgbWV0aG9kcyBmb3IgYWxsCiAgKiB0aGUgaW50ZXJmYWNlIGRyaXZlcnMgaW4gQHVkZXYuCiAgKgotICogQmVmb3JlIHN0YXJ0aW5nIHRoZSByZXN1bWUsIHRoZSByb3V0aW5lIGNhbGxzIGl0c2VsZiByZWN1cnNpdmVseSBmb3IKLSAqIHRoZSBwYXJlbnQgZGV2aWNlIG9mIEB1ZGV2LCB0aGVyZWJ5IHByb3BhZ2F0aW5nIHRoZSBjaGFuZ2UgdXAgdGhlIGRldmljZQotICogdHJlZSBhbmQgYXNzdXJpbmcgdGhhdCBAdWRldiB3aWxsIGJlIGFibGUgdG8gcmVzdW1lLiAgSWYgdGhlIHBhcmVudCBpcwotICogdW5hYmxlIHRvIHJlc3VtZSBzdWNjZXNzZnVsbHksIHRoZSByb3V0aW5lIGZhaWxzLgotICoKLSAqIFRoZSByZXN1bWUgbWV0aG9kIGNhbGxzIGFyZSBzdWJqZWN0IHRvIG11dHVhbCBleGNsdXNpb24gdW5kZXIgY29udHJvbAotICogb2YgQHVkZXYncyBwbV9tdXRleC4gIE1hbnkgb2YgdGhlc2UgY2FsbHMgYXJlIGFsc28gdW5kZXIgdGhlIHByb3RlY3Rpb24KLSAqIG9mIEB1ZGV2J3MgZGV2aWNlIGxvY2sgKGluY2x1ZGluZyBhbGwgcmVxdWVzdHMgb3JpZ2luYXRpbmcgb3V0c2lkZSB0aGUKLSAqIFVTQiBzdWJzeXN0ZW0pLCBidXQgYXV0b3Jlc3VtZSByZXF1ZXN0cyBnZW5lcmF0ZWQgYnkgYSBjaGlsZCBkZXZpY2Ugb3IKLSAqIGludGVyZmFjZSBkcml2ZXIgbWF5IG5vdCBiZS4gIFVzYmNvcmUgd2lsbCBpbnN1cmUgdGhhdCB0aGUgbWV0aG9kIGNhbGxzCi0gKiBkbyBub3QgYXJyaXZlIGR1cmluZyBiaW5kLCB1bmJpbmQsIG9yIHJlc2V0IG9wZXJhdGlvbnMuICBIb3dldmVyLCBkcml2ZXJzCi0gKiBtdXN0IGJlIHByZXBhcmVkIHRvIGhhbmRsZSByZXN1bWUgY2FsbHMgYXJyaXZpbmcgYXQgdW5wcmVkaWN0YWJsZSB0aW1lcy4KLSAqIFRoZSBvbmx5IHdheSB0byBibG9jayBzdWNoIGNhbGxzIGlzIHRvIGRvIGFuIGF1dG9yZXN1bWUgKHByZXZlbnRpbmcKLSAqIG90aGVyIGF1dG9yZXN1bWVzKSB3aGlsZSBob2xkaW5nIEB1ZGV2J3MgZGV2aWNlIGxvY2sgKHByZXZlbnRpbmcgb3V0c2lkZQotICogcmVzdW1lcykuCi0gKgotICogVGhlIGNhbGxlciBtdXN0IGhvbGQgQHVkZXYtPnBtX211dGV4LgorICogQXV0b3Jlc3VtZSByZXF1ZXN0cyBvcmlnaW5hdGluZyBmcm9tIGEgY2hpbGQgZGV2aWNlIG9yIGFuIGludGVyZmFjZQorICogZHJpdmVyIG1heSBiZSBtYWRlIHdpdGhvdXQgdGhlIHByb3RlY3Rpb24gb2YgQHVkZXYncyBkZXZpY2UgbG9jaywgYnV0CisgKiBhbGwgb3RoZXIgcmVzdW1lIGNhbGxzIHdpbGwgaG9sZCB0aGUgbG9jay4gIFVzYmNvcmUgd2lsbCBpbnN1cmUgdGhhdAorICogbWV0aG9kIGNhbGxzIGRvIG5vdCBhcnJpdmUgZHVyaW5nIGJpbmQsIHVuYmluZCwgb3IgcmVzZXQgb3BlcmF0aW9ucy4KKyAqIEhvd2V2ZXIgZHJpdmVycyBtdXN0IGJlIHByZXBhcmVkIHRvIGhhbmRsZSByZXN1bWUgY2FsbHMgYXJyaXZpbmcgYXQKKyAqIHVucHJlZGljdGFibGUgdGltZXMuCiAgKgogICogVGhpcyByb3V0aW5lIGNhbiBydW4gb25seSBpbiBwcm9jZXNzIGNvbnRleHQuCiAgKi8KQEAgLTEzNTcsNDggKzEyMzUsMTggQEAKIAlpbnQJCQlzdGF0dXMgPSAwOwogCWludAkJCWk7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGY7Ci0Jc3RydWN0IHVzYl9kZXZpY2UJKnBhcmVudCA9IHVkZXYtPnBhcmVudDsKIAotCWNhbmNlbF9kZWxheWVkX3dvcmsoJnVkZXYtPmF1dG9zdXNwZW5kKTsKIAlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKSB7CiAJCXN0YXR1cyA9IC1FTk9ERVY7CiAJCWdvdG8gZG9uZTsKIAl9CiAJdWRldi0+Y2FuX3N1Ym1pdCA9IDE7CiAKLQkvKiBQcm9wYWdhdGUgdGhlIHJlc3VtZSB1cCB0aGUgdHJlZSwgaWYgbmVjZXNzYXJ5ICovCi0JaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpIHsKLQkJaWYgKHBhcmVudCkgewotCQkJc3RhdHVzID0gdXNiX2F1dG9yZXN1bWVfZGV2aWNlKHBhcmVudCk7Ci0JCQlpZiAoc3RhdHVzID09IDApIHsKLQkJCQlzdGF0dXMgPSB1c2JfcmVzdW1lX2RldmljZSh1ZGV2LCBtc2cpOwotCQkJCWlmIChzdGF0dXMgfHwgdWRldi0+c3RhdGUgPT0KLQkJCQkJCVVTQl9TVEFURV9OT1RBVFRBQ0hFRCkgewotCQkJCQl1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKHBhcmVudCk7Ci0KLQkJCQkJLyogSXQncyBwb3NzaWJsZSB1c2JfcmVzdW1lX2RldmljZSgpCi0JCQkJCSAqIGZhaWxlZCBhZnRlciB0aGUgcG9ydCB3YXMKLQkJCQkJICogdW5zdXNwZW5kZWQsIGNhdXNpbmcgdWRldiB0byBiZQotCQkJCQkgKiBsb2dpY2FsbHkgZGlzY29ubmVjdGVkLiAgV2UgZG9uJ3QKLQkJCQkJICogd2FudCB1c2JfZGlzY29ubmVjdCgpIHRvIGF1dG9zdXNwZW5kCi0JCQkJCSAqIHRoZSBwYXJlbnQgYWdhaW4sIHNvIHRlbGwgaXQgdGhhdAotCQkJCQkgKiB1ZGV2IGRpc2Nvbm5lY3RlZCB3aGlsZSBzdGlsbAotCQkJCQkgKiBzdXNwZW5kZWQuICovCi0JCQkJCWlmICh1ZGV2LT5zdGF0ZSA9PQotCQkJCQkJCVVTQl9TVEFURV9OT1RBVFRBQ0hFRCkKLQkJCQkJCXVkZXYtPmRpc2Nvbl9zdXNwZW5kZWQgPSAxOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQotCQkJLyogV2UgY2FuJ3QgcHJvZ2FnYXRlIGJleW9uZCB0aGUgVVNCIHN1YnN5c3RlbSwKLQkJCSAqIHNvIGlmIGEgcm9vdCBodWIncyBjb250cm9sbGVyIGlzIHN1c3BlbmRlZAotCQkJICogdGhlbiB3ZSdyZSBzdHVjay4gKi8KLQkJCXN0YXR1cyA9IHVzYl9yZXN1bWVfZGV2aWNlKHVkZXYsIG1zZyk7Ci0JCX0KLQl9IGVsc2UgaWYgKHVkZXYtPnJlc2V0X3Jlc3VtZSkKKwkvKiBSZXN1bWUgdGhlIGRldmljZSAqLworCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEIHx8IHVkZXYtPnJlc2V0X3Jlc3VtZSkKIAkJc3RhdHVzID0gdXNiX3Jlc3VtZV9kZXZpY2UodWRldiwgbXNnKTsKIAorCS8qIFJlc3VtZSB0aGUgaW50ZXJmYWNlcyAqLwogCWlmIChzdGF0dXMgPT0gMCAmJiB1ZGV2LT5hY3Rjb25maWcpIHsKIAkJZm9yIChpID0gMDsgaSA8IHVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7CiAJCQlpbnRmID0gdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbaV07CkBAIC0xNDE0LDU1ICsxMjYyLDk0IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotI2lmZGVmIENPTkZJR19VU0JfU1VTUEVORAotCi0vKiBJbnRlcm5hbCByb3V0aW5lIHRvIGFkanVzdCBhIGRldmljZSdzIHVzYWdlIGNvdW50ZXIgYW5kIGNoYW5nZQotICogaXRzIGF1dG9zdXNwZW5kIHN0YXRlLgotICovCi1zdGF0aWMgaW50IHVzYl9hdXRvcG1fZG9fZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgaW5jX3VzYWdlX2NudCkKKy8qIFRoZSBkZXZpY2UgbG9jayBpcyBoZWxkIGJ5IHRoZSBQTSBjb3JlICovCitpbnQgdXNiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQogewotCWludAlzdGF0dXMgPSAwOworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOwogCi0JdXNiX3BtX2xvY2sodWRldik7Ci0JdWRldi0+cG1fdXNhZ2VfY250ICs9IGluY191c2FnZV9jbnQ7Ci0JV0FSTl9PTih1ZGV2LT5wbV91c2FnZV9jbnQgPCAwKTsKLQlpZiAoaW5jX3VzYWdlX2NudCkKLQkJdWRldi0+bGFzdF9idXN5ID0gamlmZmllczsKLQlpZiAoaW5jX3VzYWdlX2NudCA+PSAwICYmIHVkZXYtPnBtX3VzYWdlX2NudCA+IDApIHsKLQkJaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpCi0JCQlzdGF0dXMgPSB1c2JfcmVzdW1lX2JvdGgodWRldiwgUE1TR19BVVRPX1JFU1VNRSk7Ci0JCWlmIChzdGF0dXMgIT0gMCkKLQkJCXVkZXYtPnBtX3VzYWdlX2NudCAtPSBpbmNfdXNhZ2VfY250OwotCQllbHNlIGlmIChpbmNfdXNhZ2VfY250KQorCWRvX3VuYmluZF9yZWJpbmQodWRldiwgRE9fVU5CSU5EKTsKKwl1ZGV2LT5kb19yZW1vdGVfd2FrZXVwID0gZGV2aWNlX21heV93YWtldXAoJnVkZXYtPmRldik7CisJcmV0dXJuIHVzYl9zdXNwZW5kX2JvdGgodWRldiwgbXNnKTsKK30KKworLyogVGhlIGRldmljZSBsb2NrIGlzIGhlbGQgYnkgdGhlIFBNIGNvcmUgKi8KK2ludCB1c2JfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKKwlpbnQJCQlzdGF0dXM7CisKKwkvKiBGb3IgUE0gY29tcGxldGUgY2FsbHMsIGFsbCB3ZSBkbyBpcyByZWJpbmQgaW50ZXJmYWNlcyAqLworCWlmIChtc2cuZXZlbnQgPT0gUE1fRVZFTlRfT04pIHsKKwkJaWYgKHVkZXYtPnN0YXRlICE9IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCkKKwkJCWRvX3VuYmluZF9yZWJpbmQodWRldiwgRE9fUkVCSU5EKTsKKwkJc3RhdHVzID0gMDsKKworCS8qIEZvciBhbGwgb3RoZXIgY2FsbHMsIHRha2UgdGhlIGRldmljZSBiYWNrIHRvIGZ1bGwgcG93ZXIgYW5kCisJICogdGVsbCB0aGUgUE0gY29yZSBpbiBjYXNlIGl0IHdhcyBhdXRvc3VzcGVuZGVkIHByZXZpb3VzbHkuCisJICovCisJfSBlbHNlIHsKKwkJc3RhdHVzID0gdXNiX3Jlc3VtZV9ib3RoKHVkZXYsIG1zZyk7CisJCWlmIChzdGF0dXMgPT0gMCkgeworCQkJcG1fcnVudGltZV9kaXNhYmxlKGRldik7CisJCQlwbV9ydW50aW1lX3NldF9hY3RpdmUoZGV2KTsKKwkJCXBtX3J1bnRpbWVfZW5hYmxlKGRldik7CiAJCQl1ZGV2LT5sYXN0X2J1c3kgPSBqaWZmaWVzOwotCX0gZWxzZSBpZiAoaW5jX3VzYWdlX2NudCA8PSAwICYmIHVkZXYtPnBtX3VzYWdlX2NudCA8PSAwKSB7Ci0JCXN0YXR1cyA9IHVzYl9zdXNwZW5kX2JvdGgodWRldiwgUE1TR19BVVRPX1NVU1BFTkQpOworCQl9CiAJfQotCXVzYl9wbV91bmxvY2sodWRldik7CisKKwkvKiBBdm9pZCBQTSBlcnJvciBtZXNzYWdlcyBmb3IgZGV2aWNlcyBkaXNjb25uZWN0ZWQgd2hpbGUgc3VzcGVuZGVkCisJICogYXMgd2UnbGwgZGlzcGxheSByZWd1bGFyIGRpc2Nvbm5lY3QgbWVzc2FnZXMganVzdCBhIGJpdCBsYXRlci4KKwkgKi8KKwlpZiAoc3RhdHVzID09IC1FTk9ERVYpCisJCXN0YXR1cyA9IDA7CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotLyogdXNiX2F1dG9zdXNwZW5kX3dvcmsgLSBjYWxsYmFjayByb3V0aW5lIHRvIGF1dG9zdXNwZW5kIGEgVVNCIGRldmljZSAqLwotdm9pZCB1c2JfYXV0b3N1c3BlbmRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCisjZW5kaWYgLyogQ09ORklHX1BNICovCisKKyNpZmRlZiBDT05GSUdfVVNCX1NVU1BFTkQKKworLyoqCisgKiB1c2JfZW5hYmxlX2F1dG9zdXNwZW5kIC0gYWxsb3cgYSBVU0IgZGV2aWNlIHRvIGJlIGF1dG9zdXNwZW5kZWQKKyAqIEB1ZGV2OiB0aGUgVVNCIGRldmljZSB3aGljaCBtYXkgYmUgYXV0b3N1c3BlbmRlZAorICoKKyAqIFRoaXMgcm91dGluZSBhbGxvd3MgQHVkZXYgdG8gYmUgYXV0b3N1c3BlbmRlZC4gIEFuIGF1dG9zdXNwZW5kIHdvbid0CisgKiB0YWtlIHBsYWNlIHVudGlsIHRoZSBhdXRvc3VzcGVuZF9kZWxheSBoYXMgZWxhcHNlZCBhbmQgYWxsIHRoZSBvdGhlcgorICogbmVjZXNzYXJ5IGNvbmRpdGlvbnMgYXJlIHNhdGlzZmllZC4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBAdWRldidzIGRldmljZSBsb2NrLgorICovCitpbnQgdXNiX2VuYWJsZV9hdXRvc3VzcGVuZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiX2RldmljZSwgYXV0b3N1c3BlbmQud29yayk7Ci0KLQl1c2JfYXV0b3BtX2RvX2RldmljZSh1ZGV2LCAwKTsKKwlpZiAodWRldi0+YXV0b3N1c3BlbmRfZGlzYWJsZWQpIHsKKwkJdWRldi0+YXV0b3N1c3BlbmRfZGlzYWJsZWQgPSAwOworCQl1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKHVkZXYpOworCX0KKwlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9lbmFibGVfYXV0b3N1c3BlbmQpOwogCi0vKiB1c2JfYXV0b3Jlc3VtZV93b3JrIC0gY2FsbGJhY2sgcm91dGluZSB0byBhdXRvcmVzdW1lIGEgVVNCIGRldmljZSAqLwotdm9pZCB1c2JfYXV0b3Jlc3VtZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKKy8qKgorICogdXNiX2Rpc2FibGVfYXV0b3N1c3BlbmQgLSBwcmV2ZW50IGEgVVNCIGRldmljZSBmcm9tIGJlaW5nIGF1dG9zdXNwZW5kZWQKKyAqIEB1ZGV2OiB0aGUgVVNCIGRldmljZSB3aGljaCBtYXkgbm90IGJlIGF1dG9zdXNwZW5kZWQKKyAqCisgKiBUaGlzIHJvdXRpbmUgcHJldmVudHMgQHVkZXYgZnJvbSBiZWluZyBhdXRvc3VzcGVuZGVkIGFuZCB3YWtlcyBpdCB1cAorICogaWYgaXQgaXMgYWxyZWFkeSBhdXRvc3VzcGVuZGVkLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIEB1ZGV2J3MgZGV2aWNlIGxvY2suCisgKi8KK2ludCB1c2JfZGlzYWJsZV9hdXRvc3VzcGVuZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdXNiX2RldmljZSwgYXV0b3Jlc3VtZSk7CisJaW50IHJjID0gMDsKIAotCS8qIFdha2UgaXQgdXAsIGxldCB0aGUgZHJpdmVycyBkbyB0aGVpciB0aGluZywgYW5kIHRoZW4gcHV0IGl0Ci0JICogYmFjayB0byBzbGVlcC4KLQkgKi8KLQlpZiAodXNiX2F1dG9wbV9kb19kZXZpY2UodWRldiwgMSkgPT0gMCkKLQkJdXNiX2F1dG9wbV9kb19kZXZpY2UodWRldiwgLTEpOworCWlmICghdWRldi0+YXV0b3N1c3BlbmRfZGlzYWJsZWQpIHsKKwkJcmMgPSB1c2JfYXV0b3Jlc3VtZV9kZXZpY2UodWRldik7CisJCWlmIChyYyA9PSAwKQorCQkJdWRldi0+YXV0b3N1c3BlbmRfZGlzYWJsZWQgPSAxOworCX0KKwlyZXR1cm4gcmM7CiB9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfZGlzYWJsZV9hdXRvc3VzcGVuZCk7CiAKIC8qKgogICogdXNiX2F1dG9zdXNwZW5kX2RldmljZSAtIGRlbGF5ZWQgYXV0b3N1c3BlbmQgb2YgYSBVU0IgZGV2aWNlIGFuZCBpdHMgaW50ZXJmYWNlcwpAQCAtMTQ3MiwxNSArMTM1OSwxMSBAQAogICogQHVkZXYgYW5kIHdhbnRzIHRvIGFsbG93IGl0IHRvIGF1dG9zdXNwZW5kLiAgRXhhbXBsZXMgd291bGQgYmUgd2hlbgogICogQHVkZXYncyBkZXZpY2UgZmlsZSBpbiB1c2JmcyBpcyBjbG9zZWQgb3IgYWZ0ZXIgYSBjb25maWd1cmF0aW9uIGNoYW5nZS4KICAqCi0gKiBAdWRldidzIHVzYWdlIGNvdW50ZXIgaXMgZGVjcmVtZW50ZWQuICBJZiBpdCBvciBhbnkgb2YgdGhlIHVzYWdlIGNvdW50ZXJzCi0gKiBmb3IgYW4gYWN0aXZlIGludGVyZmFjZSBpcyBncmVhdGVyIHRoYW4gMCwgbm8gYXV0b3N1c3BlbmQgcmVxdWVzdCB3aWxsIGJlCi0gKiBxdWV1ZWQuICAoSWYgYW4gaW50ZXJmYWNlIGRyaXZlciBkb2VzIG5vdCBzdXBwb3J0IGF1dG9zdXNwZW5kIHRoZW4gaXRzCi0gKiB1c2FnZSBjb3VudGVyIGlzIHBlcm1hbmVudGx5IHBvc2l0aXZlLikgIEZ1cnRoZXJtb3JlLCBpZiBhbiBpbnRlcmZhY2UKLSAqIGRyaXZlciByZXF1aXJlcyByZW1vdGUtd2FrZXVwIGNhcGFiaWxpdHkgZHVyaW5nIGF1dG9zdXNwZW5kIGJ1dCByZW1vdGUKLSAqIHdha2V1cCBpcyBkaXNhYmxlZCwgdGhlIGF1dG9zdXNwZW5kIHdpbGwgZmFpbC4KKyAqIEB1ZGV2J3MgdXNhZ2UgY291bnRlciBpcyBkZWNyZW1lbnRlZDsgaWYgaXQgZHJvcHMgdG8gMCBhbmQgYWxsIHRoZQorICogaW50ZXJmYWNlcyBhcmUgaW5hY3RpdmUgdGhlbiBhIGRlbGF5ZWQgYXV0b3N1c3BlbmQgd2lsbCBiZSBhdHRlbXB0ZWQuCisgKiBUaGUgYXR0ZW1wdCBtYXkgZmFpbCAoc2VlIGF1dG9zdXNwZW5kX2NoZWNrKCkpLgogICoKLSAqIE9mdGVuIHRoZSBjYWxsZXIgd2lsbCBob2xkIEB1ZGV2J3MgZGV2aWNlIGxvY2ssIGJ1dCB0aGlzIGlzIG5vdAotICogbmVjZXNzYXJ5LgorICogVGhlIGNhbGxlciBtdXN0IGhvbGQgQHVkZXYncyBkZXZpY2UgbG9jay4KICAqCiAgKiBUaGlzIHJvdXRpbmUgY2FuIHJ1biBvbmx5IGluIHByb2Nlc3MgY29udGV4dC4KICAqLwpAQCAtMTQ4OCw5ICsxMzcxLDExIEBACiB7CiAJaW50CXN0YXR1czsKIAotCXN0YXR1cyA9IHVzYl9hdXRvcG1fZG9fZGV2aWNlKHVkZXYsIC0xKTsKLQlkZXZfdmRiZygmdWRldi0+ZGV2LCAiJXM6IGNudCAlZFxuIiwKLQkJCV9fZnVuY19fLCB1ZGV2LT5wbV91c2FnZV9jbnQpOworCXVkZXYtPmxhc3RfYnVzeSA9IGppZmZpZXM7CisJc3RhdHVzID0gcG1fcnVudGltZV9wdXRfc3luYygmdWRldi0+ZGV2KTsKKwlkZXZfdmRiZygmdWRldi0+ZGV2LCAiJXM6IGNudCAlZCAtPiAlZFxuIiwKKwkJCV9fZnVuY19fLCBhdG9taWNfcmVhZCgmdWRldi0+ZGV2LnBvd2VyLnVzYWdlX2NvdW50KSwKKwkJCXN0YXR1cyk7CiB9CiAKIC8qKgpAQCAtMTUwMCwxNyArMTM4NSwyMiBAQAogICogVGhpcyByb3V0aW5lIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBhIGNvcmUgc3Vic3lzdGVtIHRoaW5rcyBAdWRldiBtYXkKICAqIGJlIHJlYWR5IHRvIGF1dG9zdXNwZW5kLgogICoKLSAqIEB1ZGV2J3MgdXNhZ2UgY291bnRlciBsZWZ0IHVuY2hhbmdlZC4gIElmIGl0IG9yIGFueSBvZiB0aGUgdXNhZ2UgY291bnRlcnMKLSAqIGZvciBhbiBhY3RpdmUgaW50ZXJmYWNlIGlzIGdyZWF0ZXIgdGhhbiAwLCBvciBhdXRvc3VzcGVuZCBpcyBub3QgYWxsb3dlZAotICogZm9yIGFueSBvdGhlciByZWFzb24sIG5vIGF1dG9zdXNwZW5kIHJlcXVlc3Qgd2lsbCBiZSBxdWV1ZWQuCisgKiBAdWRldidzIHVzYWdlIGNvdW50ZXIgbGVmdCB1bmNoYW5nZWQuICBJZiBpdCBpcyAwIGFuZCBhbGwgdGhlIGludGVyZmFjZXMKKyAqIGFyZSBpbmFjdGl2ZSB0aGVuIGFuIGF1dG9zdXNwZW5kIHdpbGwgYmUgYXR0ZW1wdGVkLiAgVGhlIGF0dGVtcHQgbWF5CisgKiBmYWlsIG9yIGJlIGRlbGF5ZWQuCisgKgorICogVGhlIGNhbGxlciBtdXN0IGhvbGQgQHVkZXYncyBkZXZpY2UgbG9jay4KICAqCiAgKiBUaGlzIHJvdXRpbmUgY2FuIHJ1biBvbmx5IGluIHByb2Nlc3MgY29udGV4dC4KICAqLwogdm9pZCB1c2JfdHJ5X2F1dG9zdXNwZW5kX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKLQl1c2JfYXV0b3BtX2RvX2RldmljZSh1ZGV2LCAwKTsKLQlkZXZfdmRiZygmdWRldi0+ZGV2LCAiJXM6IGNudCAlZFxuIiwKLQkJCV9fZnVuY19fLCB1ZGV2LT5wbV91c2FnZV9jbnQpOworCWludAlzdGF0dXM7CisKKwlzdGF0dXMgPSBwbV9ydW50aW1lX2lkbGUoJnVkZXYtPmRldik7CisJZGV2X3ZkYmcoJnVkZXYtPmRldiwgIiVzOiBjbnQgJWQgLT4gJWRcbiIsCisJCQlfX2Z1bmNfXywgYXRvbWljX3JlYWQoJnVkZXYtPmRldi5wb3dlci51c2FnZV9jb3VudCksCisJCQlzdGF0dXMpOwogfQogCiAvKioKQEAgLTE1MTksMTYgKzE0MDksMTUgQEAKICAqCiAgKiBUaGlzIHJvdXRpbmUgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIGEgY29yZSBzdWJzeXN0ZW0gd2FudHMgdG8gdXNlIEB1ZGV2CiAgKiBhbmQgbmVlZHMgdG8gZ3VhcmFudGVlIHRoYXQgaXQgaXMgbm90IHN1c3BlbmRlZC4gIE5vIGF1dG9zdXNwZW5kIHdpbGwKLSAqIG9jY3VyIHVudGlsIHVzYl9hdXRvc3VzcGVuZF9kZXZpY2UgaXMgY2FsbGVkLiAgKE5vdGUgdGhhdCB0aGlzIHdpbGwgbm90Ci0gKiBwcmV2ZW50IHN1c3BlbmQgZXZlbnRzIG9yaWdpbmF0aW5nIGluIHRoZSBQTSBjb3JlLikgIEV4YW1wbGVzIHdvdWxkIGJlCi0gKiB3aGVuIEB1ZGV2J3MgZGV2aWNlIGZpbGUgaW4gdXNiZnMgaXMgb3BlbmVkIG9yIHdoZW4gYSByZW1vdGUtd2FrZXVwCisgKiBvY2N1ciB1bnRpbCB1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKCkgaXMgY2FsbGVkLiAgKE5vdGUgdGhhdCB0aGlzIHdpbGwKKyAqIG5vdCBwcmV2ZW50IHN1c3BlbmQgZXZlbnRzIG9yaWdpbmF0aW5nIGluIHRoZSBQTSBjb3JlLikgIEV4YW1wbGVzIHdvdWxkCisgKiBiZSB3aGVuIEB1ZGV2J3MgZGV2aWNlIGZpbGUgaW4gdXNiZnMgaXMgb3BlbmVkIG9yIHdoZW4gYSByZW1vdGUtd2FrZXVwCiAgKiByZXF1ZXN0IGlzIHJlY2VpdmVkLgogICoKICAqIEB1ZGV2J3MgdXNhZ2UgY291bnRlciBpcyBpbmNyZW1lbnRlZCB0byBwcmV2ZW50IHN1YnNlcXVlbnQgYXV0b3N1c3BlbmRzLgogICogSG93ZXZlciBpZiB0aGUgYXV0b3Jlc3VtZSBmYWlscyB0aGVuIHRoZSB1c2FnZSBjb3VudGVyIGlzIHJlLWRlY3JlbWVudGVkLgogICoKLSAqIE9mdGVuIHRoZSBjYWxsZXIgd2lsbCBob2xkIEB1ZGV2J3MgZGV2aWNlIGxvY2ssIGJ1dCB0aGlzIGlzIG5vdAotICogbmVjZXNzYXJ5IChhbmQgYXR0ZW1wdGluZyBpdCBtaWdodCBjYXVzZSBkZWFkbG9jaykuCisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBAdWRldidzIGRldmljZSBsb2NrLgogICoKICAqIFRoaXMgcm91dGluZSBjYW4gcnVuIG9ubHkgaW4gcHJvY2VzcyBjb250ZXh0LgogICovCkBAIC0xNTM2LDQyICsxNDI1LDE0IEBACiB7CiAJaW50CXN0YXR1czsKIAotCXN0YXR1cyA9IHVzYl9hdXRvcG1fZG9fZGV2aWNlKHVkZXYsIDEpOwotCWRldl92ZGJnKCZ1ZGV2LT5kZXYsICIlczogc3RhdHVzICVkIGNudCAlZFxuIiwKLQkJCV9fZnVuY19fLCBzdGF0dXMsIHVkZXYtPnBtX3VzYWdlX2NudCk7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyogSW50ZXJuYWwgcm91dGluZSB0byBhZGp1c3QgYW4gaW50ZXJmYWNlJ3MgdXNhZ2UgY291bnRlciBhbmQgY2hhbmdlCi0gKiBpdHMgZGV2aWNlJ3MgYXV0b3N1c3BlbmQgc3RhdGUuCi0gKi8KLXN0YXRpYyBpbnQgdXNiX2F1dG9wbV9kb19pbnRlcmZhY2Uoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCWludCBpbmNfdXNhZ2VfY250KQotewotCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQlpbnQJCQlzdGF0dXMgPSAwOwotCi0JdXNiX3BtX2xvY2sodWRldik7Ci0JaWYgKGludGYtPmNvbmRpdGlvbiA9PSBVU0JfSU5URVJGQUNFX1VOQk9VTkQpCi0JCXN0YXR1cyA9IC1FTk9ERVY7Ci0JZWxzZSB7Ci0JCWF0b21pY19hZGQoaW5jX3VzYWdlX2NudCwgJmludGYtPnBtX3VzYWdlX2NudCk7Ci0JCXVkZXYtPmxhc3RfYnVzeSA9IGppZmZpZXM7Ci0JCWlmIChpbmNfdXNhZ2VfY250ID49IDAgJiYKLQkJCQlhdG9taWNfcmVhZCgmaW50Zi0+cG1fdXNhZ2VfY250KSA+IDApIHsKLQkJCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQotCQkJCXN0YXR1cyA9IHVzYl9yZXN1bWVfYm90aCh1ZGV2LAotCQkJCQkJUE1TR19BVVRPX1JFU1VNRSk7Ci0JCQlpZiAoc3RhdHVzICE9IDApCi0JCQkJYXRvbWljX3N1YihpbmNfdXNhZ2VfY250LCAmaW50Zi0+cG1fdXNhZ2VfY250KTsKLQkJCWVsc2UKLQkJCQl1ZGV2LT5sYXN0X2J1c3kgPSBqaWZmaWVzOwotCQl9IGVsc2UgaWYgKGluY191c2FnZV9jbnQgPD0gMCAmJgotCQkJCWF0b21pY19yZWFkKCZpbnRmLT5wbV91c2FnZV9jbnQpIDw9IDApIHsKLQkJCXN0YXR1cyA9IHVzYl9zdXNwZW5kX2JvdGgodWRldiwgUE1TR19BVVRPX1NVU1BFTkQpOwotCQl9Ci0JfQotCXVzYl9wbV91bmxvY2sodWRldik7CisJc3RhdHVzID0gcG1fcnVudGltZV9nZXRfc3luYygmdWRldi0+ZGV2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcG1fcnVudGltZV9wdXRfc3luYygmdWRldi0+ZGV2KTsKKwlkZXZfdmRiZygmdWRldi0+ZGV2LCAiJXM6IGNudCAlZCAtPiAlZFxuIiwKKwkJCV9fZnVuY19fLCBhdG9taWNfcmVhZCgmdWRldi0+ZGV2LnBvd2VyLnVzYWdlX2NvdW50KSwKKwkJCXN0YXR1cyk7CisJaWYgKHN0YXR1cyA+IDApCisJCXN0YXR1cyA9IDA7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTU4NSwzNCArMTQ0NiwyNSBAQAogICogY2xvc2VkLgogICoKICAqIFRoZSByb3V0aW5lIGRlY3JlbWVudHMgQGludGYncyB1c2FnZSBjb3VudGVyLiAgV2hlbiB0aGUgY291bnRlciByZWFjaGVzCi0gKiAwLCBhIGRlbGF5ZWQgYXV0b3N1c3BlbmQgcmVxdWVzdCBmb3IgQGludGYncyBkZXZpY2UgaXMgcXVldWVkLiAgV2hlbgotICogdGhlIGRlbGF5IGV4cGlyZXMsIGlmIEBpbnRmLT5wbV91c2FnZV9jbnQgaXMgc3RpbGwgPD0gMCBhbG9uZyB3aXRoIGFsbAotICogdGhlIG90aGVyIHVzYWdlIGNvdW50ZXJzIGZvciB0aGUgc2libGluZyBpbnRlcmZhY2VzIGFuZCBAaW50ZidzCi0gKiB1c2JfZGV2aWNlLCB0aGUgZGV2aWNlIGFuZCBhbGwgaXRzIGludGVyZmFjZXMgd2lsbCBiZSBhdXRvc3VzcGVuZGVkLgotICoKLSAqIE5vdGUgdGhhdCBAaW50Zi0+cG1fdXNhZ2VfY250IGlzIG93bmVkIGJ5IHRoZSBpbnRlcmZhY2UgZHJpdmVyLiAgVGhlCi0gKiBjb3JlIHdpbGwgbm90IGNoYW5nZSBpdHMgdmFsdWUgb3RoZXIgdGhhbiB0aGUgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQKLSAqIGluIHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSBhbmQgdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlLiAgVGhlIGRyaXZlcgotICogbWF5IHVzZSB0aGlzIHNpbXBsZSBjb3VudGVyLW9yaWVudGVkIGRpc2NpcGxpbmUgb3IgbWF5IHNldCB0aGUgdmFsdWUKLSAqIGFueSB3YXkgaXQgbGlrZXMuCisgKiAwLCBhIGRlbGF5ZWQgYXV0b3N1c3BlbmQgcmVxdWVzdCBmb3IgQGludGYncyBkZXZpY2UgaXMgYXR0ZW1wdGVkLiAgVGhlCisgKiBhdHRlbXB0IG1heSBmYWlsIChzZWUgYXV0b3N1c3BlbmRfY2hlY2soKSkuCiAgKgogICogSWYgdGhlIGRyaXZlciBoYXMgc2V0IEBpbnRmLT5uZWVkc19yZW1vdGVfd2FrZXVwIHRoZW4gYXV0b3N1c3BlbmQgd2lsbAogICogdGFrZSBwbGFjZSBvbmx5IGlmIHRoZSBkZXZpY2UncyByZW1vdGUtd2FrZXVwIGZhY2lsaXR5IGlzIGVuYWJsZWQuCiAgKgotICogU3VzcGVuZCBtZXRob2QgY2FsbHMgcXVldWVkIGJ5IHRoaXMgcm91dGluZSBjYW4gYXJyaXZlIGF0IGFueSB0aW1lCi0gKiB3aGlsZSBAaW50ZiBpcyByZXN1bWVkIGFuZCBpdHMgdXNhZ2UgY291bnRlciBpcyBlcXVhbCB0byAwLiAgVGhleSBhcmUKLSAqIG5vdCBwcm90ZWN0ZWQgYnkgdGhlIHVzYl9kZXZpY2UncyBsb2NrIGJ1dCBvbmx5IGJ5IGl0cyBwbV9tdXRleC4KLSAqIERyaXZlcnMgbXVzdCBwcm92aWRlIHRoZWlyIG93biBzeW5jaHJvbml6YXRpb24uCi0gKgogICogVGhpcyByb3V0aW5lIGNhbiBydW4gb25seSBpbiBwcm9jZXNzIGNvbnRleHQuCiAgKi8KIHZvaWQgdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewotCWludAlzdGF0dXM7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCWludAkJCXN0YXR1czsKIAotCXN0YXR1cyA9IHVzYl9hdXRvcG1fZG9faW50ZXJmYWNlKGludGYsIC0xKTsKLQlkZXZfdmRiZygmaW50Zi0+ZGV2LCAiJXM6IHN0YXR1cyAlZCBjbnQgJWRcbiIsCi0JCQlfX2Z1bmNfXywgc3RhdHVzLCBhdG9taWNfcmVhZCgmaW50Zi0+cG1fdXNhZ2VfY250KSk7CisJdWRldi0+bGFzdF9idXN5ID0gamlmZmllczsKKwlhdG9taWNfZGVjKCZpbnRmLT5wbV91c2FnZV9jbnQpOworCXN0YXR1cyA9IHBtX3J1bnRpbWVfcHV0X3N5bmMoJmludGYtPmRldik7CisJZGV2X3ZkYmcoJmludGYtPmRldiwgIiVzOiBjbnQgJWQgLT4gJWRcbiIsCisJCQlfX2Z1bmNfXywgYXRvbWljX3JlYWQoJmludGYtPmRldi5wb3dlci51c2FnZV9jb3VudCksCisJCQlzdGF0dXMpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKTsKIApAQCAtMTYyMCwxMSArMTQ3MiwxMSBAQAogICogdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlX2FzeW5jIC0gZGVjcmVtZW50IGEgVVNCIGludGVyZmFjZSdzIFBNLXVzYWdlIGNvdW50ZXIKICAqIEBpbnRmOiB0aGUgdXNiX2ludGVyZmFjZSB3aG9zZSBjb3VudGVyIHNob3VsZCBiZSBkZWNyZW1lbnRlZAogICoKLSAqIFRoaXMgcm91dGluZSBkb2VzIGVzc2VudGlhbGx5IHRoZSBzYW1lIHRoaW5nIGFzCi0gKiB1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoKTogaXQgZGVjcmVtZW50cyBAaW50ZidzIHVzYWdlIGNvdW50ZXIgYW5kCi0gKiBxdWV1ZXMgYSBkZWxheWVkIGF1dG9zdXNwZW5kIHJlcXVlc3QgaWYgdGhlIGNvdW50ZXIgaXMgPD0gMC4gIFRoZQotICogZGlmZmVyZW5jZSBpcyB0aGF0IGl0IGRvZXMgbm90IGFjcXVpcmUgdGhlIGRldmljZSdzIHBtX211dGV4OwotICogY2FsbGVycyBtdXN0IGhhbmRsZSBhbGwgc3luY2hyb25pemF0aW9uIGlzc3VlcyB0aGVtc2VsdmVzLgorICogVGhpcyByb3V0aW5lIGRvZXMgbXVjaCB0aGUgc2FtZSB0aGluZyBhcyB1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoKToKKyAqIEl0IGRlY3JlbWVudHMgQGludGYncyB1c2FnZSBjb3VudGVyIGFuZCBzY2hlZHVsZXMgYSBkZWxheWVkCisgKiBhdXRvc3VzcGVuZCByZXF1ZXN0IGlmIHRoZSBjb3VudGVyIGlzIDw9IDAuICBUaGUgZGlmZmVyZW5jZSBpcyB0aGF0IGl0CisgKiBkb2VzIG5vdCBwZXJmb3JtIGFueSBzeW5jaHJvbml6YXRpb247IGNhbGxlcnMgc2hvdWxkIGhvbGQgYSBwcml2YXRlCisgKiBsb2NrIGFuZCBoYW5kbGUgYWxsIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMgdGhlbXNlbHZlcy4KICAqCiAgKiBUeXBpY2FsbHkgYSBkcml2ZXIgd291bGQgY2FsbCB0aGlzIHJvdXRpbmUgZHVyaW5nIGFuIFVSQidzIGNvbXBsZXRpb24KICAqIGhhbmRsZXIsIGlmIG5vIG1vcmUgVVJCcyB3ZXJlIHBlbmRpbmcuCkBAIC0xNjM0LDI4ICsxNDg2LDU4IEBACiB2b2lkIHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9hc3luYyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJdW5zaWduZWQgbG9uZwkJbGFzdF9idXN5OwogCWludAkJCXN0YXR1cyA9IDA7CiAKLQlpZiAoaW50Zi0+Y29uZGl0aW9uID09IFVTQl9JTlRFUkZBQ0VfVU5CT1VORCkgewotCQlzdGF0dXMgPSAtRU5PREVWOwotCX0gZWxzZSB7Ci0JCXVkZXYtPmxhc3RfYnVzeSA9IGppZmZpZXM7Ci0JCWF0b21pY19kZWMoJmludGYtPnBtX3VzYWdlX2NudCk7Ci0JCWlmICh1ZGV2LT5hdXRvc3VzcGVuZF9kaXNhYmxlZCB8fCB1ZGV2LT5hdXRvc3VzcGVuZF9kZWxheSA8IDApCi0JCQlzdGF0dXMgPSAtRVBFUk07Ci0JCWVsc2UgaWYgKGF0b21pY19yZWFkKCZpbnRmLT5wbV91c2FnZV9jbnQpIDw9IDAgJiYKLQkJCQkhdGltZXJfcGVuZGluZygmdWRldi0+YXV0b3N1c3BlbmQudGltZXIpKSB7Ci0JCQlxdWV1ZV9kZWxheWVkX3dvcmsoa3N1c3BlbmRfdXNiX3dxLCAmdWRldi0+YXV0b3N1c3BlbmQsCisJbGFzdF9idXN5ID0gdWRldi0+bGFzdF9idXN5OworCXVkZXYtPmxhc3RfYnVzeSA9IGppZmZpZXM7CisJYXRvbWljX2RlYygmaW50Zi0+cG1fdXNhZ2VfY250KTsKKwlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJmludGYtPmRldik7CisKKwlpZiAoIXVkZXYtPmF1dG9zdXNwZW5kX2Rpc2FibGVkKSB7CisJCS8qIE9wdGltaXphdGlvbjogRG9uJ3Qgc2NoZWR1bGUgYSBkZWxheWVkIGF1dG9zdXNwZW5kIGlmCisJCSAqIHRoZSB0aW1lciBpcyBhbHJlYWR5IHJ1bm5pbmcgYW5kIHRoZSBleHBpcmF0aW9uIHRpbWUKKwkJICogd291bGRuJ3QgY2hhbmdlLgorCQkgKgorCQkgKiBXZSBoYXZlIHRvIHVzZSB0aGUgaW50ZXJmYWNlJ3MgdGltZXIuICBBdHRlbXB0cyB0bworCQkgKiBzY2hlZHVsZSBhIHN1c3BlbmQgZm9yIHRoZSBkZXZpY2Ugd291bGQgZmFpbCBiZWNhdXNlCisJCSAqIHRoZSBpbnRlcmZhY2UgaXMgc3RpbGwgYWN0aXZlLgorCQkgKi8KKwkJaWYgKGludGYtPmRldi5wb3dlci50aW1lcl9leHBpcmVzID09IDAgfHwKKwkJCQlyb3VuZF9qaWZmaWVzX3VwKGxhc3RfYnVzeSkgIT0KKwkJCQlyb3VuZF9qaWZmaWVzX3VwKGppZmZpZXMpKSB7CisJCQlzdGF0dXMgPSBwbV9zY2hlZHVsZV9zdXNwZW5kKCZpbnRmLT5kZXYsCisJCQkJCWppZmZpZXNfdG9fbXNlY3MoCiAJCQkJCXJvdW5kX2ppZmZpZXNfdXBfcmVsYXRpdmUoCi0JCQkJCQl1ZGV2LT5hdXRvc3VzcGVuZF9kZWxheSkpOworCQkJCQkJdWRldi0+YXV0b3N1c3BlbmRfZGVsYXkpKSk7CiAJCX0KIAl9Ci0JZGV2X3ZkYmcoJmludGYtPmRldiwgIiVzOiBzdGF0dXMgJWQgY250ICVkXG4iLAotCQkJX19mdW5jX18sIHN0YXR1cywgYXRvbWljX3JlYWQoJmludGYtPnBtX3VzYWdlX2NudCkpOworCWRldl92ZGJnKCZpbnRmLT5kZXYsICIlczogY250ICVkIC0+ICVkXG4iLAorCQkJX19mdW5jX18sIGF0b21pY19yZWFkKCZpbnRmLT5kZXYucG93ZXIudXNhZ2VfY291bnQpLAorCQkJc3RhdHVzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9hc3luYyk7CiAKIC8qKgorICogdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlX25vX3N1c3BlbmQgLSBkZWNyZW1lbnQgYSBVU0IgaW50ZXJmYWNlJ3MgUE0tdXNhZ2UgY291bnRlcgorICogQGludGY6IHRoZSB1c2JfaW50ZXJmYWNlIHdob3NlIGNvdW50ZXIgc2hvdWxkIGJlIGRlY3JlbWVudGVkCisgKgorICogVGhpcyByb3V0aW5lIGRlY3JlbWVudHMgQGludGYncyB1c2FnZSBjb3VudGVyIGJ1dCBkb2VzIG5vdCBjYXJyeSBvdXQgYW4KKyAqIGF1dG9zdXNwZW5kLgorICoKKyAqIFRoaXMgcm91dGluZSBjYW4gcnVuIGluIGF0b21pYyBjb250ZXh0LgorICovCit2b2lkIHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9ub19zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKworCXVkZXYtPmxhc3RfYnVzeSA9IGppZmZpZXM7CisJYXRvbWljX2RlYygmaW50Zi0+cG1fdXNhZ2VfY250KTsKKwlwbV9ydW50aW1lX3B1dF9ub2lkbGUoJmludGYtPmRldik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Vfbm9fc3VzcGVuZCk7CisKKy8qKgogICogdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlIC0gaW5jcmVtZW50IGEgVVNCIGludGVyZmFjZSdzIFBNLXVzYWdlIGNvdW50ZXIKICAqIEBpbnRmOiB0aGUgdXNiX2ludGVyZmFjZSB3aG9zZSBjb3VudGVyIHNob3VsZCBiZSBpbmNyZW1lbnRlZAogICoKQEAgLTE2NjcsMjUgKzE1NDksOCBAQAogICogb3IgQGludGYgaXMgdW5ib3VuZC4gIEEgdHlwaWNhbCBleGFtcGxlIHdvdWxkIGJlIGEgY2hhcmFjdGVyLWRldmljZQogICogZHJpdmVyIHdoZW4gaXRzIGRldmljZSBmaWxlIGlzIG9wZW5lZC4KICAqCi0gKgotICogVGhlIHJvdXRpbmUgaW5jcmVtZW50cyBAaW50ZidzIHVzYWdlIGNvdW50ZXIuICAoSG93ZXZlciBpZiB0aGUKLSAqIGF1dG9yZXN1bWUgZmFpbHMgdGhlbiB0aGUgY291bnRlciBpcyByZS1kZWNyZW1lbnRlZC4pICBTbyBsb25nIGFzIHRoZQotICogY291bnRlciBpcyBncmVhdGVyIHRoYW4gMCwgYXV0b3N1c3BlbmQgd2lsbCBub3QgYmUgYWxsb3dlZCBmb3IgQGludGYKLSAqIG9yIGl0cyB1c2JfZGV2aWNlLiAgV2hlbiB0aGUgZHJpdmVyIGlzIGZpbmlzaGVkIHVzaW5nIEBpbnRmIGl0IHNob3VsZAotICogY2FsbCB1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoKSB0byBkZWNyZW1lbnQgdGhlIHVzYWdlIGNvdW50ZXIgYW5kCi0gKiBxdWV1ZSBhIGRlbGF5ZWQgYXV0b3N1c3BlbmQgcmVxdWVzdCAoaWYgdGhlIGNvdW50ZXIgaXMgPD0gMCkuCi0gKgotICoKLSAqIE5vdGUgdGhhdCBAaW50Zi0+cG1fdXNhZ2VfY250IGlzIG93bmVkIGJ5IHRoZSBpbnRlcmZhY2UgZHJpdmVyLiAgVGhlCi0gKiBjb3JlIHdpbGwgbm90IGNoYW5nZSBpdHMgdmFsdWUgb3RoZXIgdGhhbiB0aGUgaW5jcmVtZW50IGFuZCBkZWNyZW1lbnQKLSAqIGluIHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZSBhbmQgdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlLiAgVGhlIGRyaXZlcgotICogbWF5IHVzZSB0aGlzIHNpbXBsZSBjb3VudGVyLW9yaWVudGVkIGRpc2NpcGxpbmUgb3IgbWF5IHNldCB0aGUgdmFsdWUKLSAqIGFueSB3YXkgaXQgbGlrZXMuCi0gKgotICogUmVzdW1lIG1ldGhvZCBjYWxscyBnZW5lcmF0ZWQgYnkgdGhpcyByb3V0aW5lIGNhbiBhcnJpdmUgYXQgYW55IHRpbWUKLSAqIHdoaWxlIEBpbnRmIGlzIHN1c3BlbmRlZC4gIFRoZXkgYXJlIG5vdCBwcm90ZWN0ZWQgYnkgdGhlIHVzYl9kZXZpY2UncwotICogbG9jayBidXQgb25seSBieSBpdHMgcG1fbXV0ZXguICBEcml2ZXJzIG11c3QgcHJvdmlkZSB0aGVpciBvd24KLSAqIHN5bmNocm9uaXphdGlvbi4KKyAqIEBpbnRmJ3MgdXNhZ2UgY291bnRlciBpcyBpbmNyZW1lbnRlZCB0byBwcmV2ZW50IHN1YnNlcXVlbnQgYXV0b3N1c3BlbmRzLgorICogSG93ZXZlciBpZiB0aGUgYXV0b3Jlc3VtZSBmYWlscyB0aGVuIHRoZSBjb3VudGVyIGlzIHJlLWRlY3JlbWVudGVkLgogICoKICAqIFRoaXMgcm91dGluZSBjYW4gcnVuIG9ubHkgaW4gcHJvY2VzcyBjb250ZXh0LgogICovCkBAIC0xNjkzLDkgKzE1NTgsMTYgQEAKIHsKIAlpbnQJc3RhdHVzOwogCi0Jc3RhdHVzID0gdXNiX2F1dG9wbV9kb19pbnRlcmZhY2UoaW50ZiwgMSk7Ci0JZGV2X3ZkYmcoJmludGYtPmRldiwgIiVzOiBzdGF0dXMgJWQgY250ICVkXG4iLAotCQkJX19mdW5jX18sIHN0YXR1cywgYXRvbWljX3JlYWQoJmludGYtPnBtX3VzYWdlX2NudCkpOworCXN0YXR1cyA9IHBtX3J1bnRpbWVfZ2V0X3N5bmMoJmludGYtPmRldik7CisJaWYgKHN0YXR1cyA8IDApCisJCXBtX3J1bnRpbWVfcHV0X3N5bmMoJmludGYtPmRldik7CisJZWxzZQorCQlhdG9taWNfaW5jKCZpbnRmLT5wbV91c2FnZV9jbnQpOworCWRldl92ZGJnKCZpbnRmLT5kZXYsICIlczogY250ICVkIC0+ICVkXG4iLAorCQkJX19mdW5jX18sIGF0b21pY19yZWFkKCZpbnRmLT5kZXYucG93ZXIudXNhZ2VfY291bnQpLAorCQkJc3RhdHVzKTsKKwlpZiAoc3RhdHVzID4gMCkKKwkJc3RhdHVzID0gMDsKIAlyZXR1cm4gc3RhdHVzOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKTsKQEAgLTE3MDUsMTQ5ICsxNTc3LDIwNyBAQAogICogQGludGY6IHRoZSB1c2JfaW50ZXJmYWNlIHdob3NlIGNvdW50ZXIgc2hvdWxkIGJlIGluY3JlbWVudGVkCiAgKgogICogVGhpcyByb3V0aW5lIGRvZXMgbXVjaCB0aGUgc2FtZSB0aGluZyBhcwotICogdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKCk6IGl0IGluY3JlbWVudHMgQGludGYncyB1c2FnZSBjb3VudGVyIGFuZAotICogcXVldWVzIGFuIGF1dG9yZXN1bWUgcmVxdWVzdCBpZiB0aGUgcmVzdWx0IGlzID4gMC4gIFRoZSBkaWZmZXJlbmNlcwotICogYXJlIHRoYXQgaXQgZG9lcyBub3QgYWNxdWlyZSB0aGUgZGV2aWNlJ3MgcG1fbXV0ZXggKGNhbGxlcnMgbXVzdAotICogaGFuZGxlIGFsbCBzeW5jaHJvbml6YXRpb24gaXNzdWVzIHRoZW1zZWx2ZXMpLCBhbmQgaXQgZG9lcyBub3QKLSAqIGF1dG9yZXN1bWUgdGhlIGRldmljZSBkaXJlY3RseSAoaXQgb25seSBxdWV1ZXMgYSByZXF1ZXN0KS4gIEFmdGVyIGEKLSAqIHN1Y2Nlc3NmdWwgY2FsbCwgdGhlIGRldmljZSB3aWxsIGdlbmVyYWxseSBub3QgeWV0IGJlIHJlc3VtZWQuCisgKiB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoKTogSXQgaW5jcmVtZW50cyBAaW50ZidzIHVzYWdlIGNvdW50ZXIgYW5kCisgKiBxdWV1ZXMgYW4gYXV0b3Jlc3VtZSByZXF1ZXN0IGlmIHRoZSBkZXZpY2UgaXMgc3VzcGVuZGVkLiAgVGhlCisgKiBkaWZmZXJlbmNlcyBhcmUgdGhhdCBpdCBkb2VzIG5vdCBwZXJmb3JtIGFueSBzeW5jaHJvbml6YXRpb24gKGNhbGxlcnMKKyAqIHNob3VsZCBob2xkIGEgcHJpdmF0ZSBsb2NrIGFuZCBoYW5kbGUgYWxsIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMKKyAqIHRoZW1zZWx2ZXMpLCBhbmQgaXQgZG9lcyBub3QgYXV0b3Jlc3VtZSB0aGUgZGV2aWNlIGRpcmVjdGx5IChpdCBvbmx5CisgKiBxdWV1ZXMgYSByZXF1ZXN0KS4gIEFmdGVyIGEgc3VjY2Vzc2Z1bCBjYWxsLCB0aGUgZGV2aWNlIG1heSBub3QgeWV0IGJlCisgKiByZXN1bWVkLgogICoKICAqIFRoaXMgcm91dGluZSBjYW4gcnVuIGluIGF0b21pYyBjb250ZXh0LgogICovCiBpbnQgdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX2FzeW5jKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewotCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQlpbnQJCQlzdGF0dXMgPSAwOworCWludAkJc3RhdHVzID0gMDsKKwllbnVtIHJwbV9zdGF0dXMJczsKIAotCWlmIChpbnRmLT5jb25kaXRpb24gPT0gVVNCX0lOVEVSRkFDRV9VTkJPVU5EKQotCQlzdGF0dXMgPSAtRU5PREVWOwotCWVsc2UgeworCS8qIERvbid0IHJlcXVlc3QgYSByZXN1bWUgdW5sZXNzIHRoZSBpbnRlcmZhY2UgaXMgYWxyZWFkeSBzdXNwZW5kaW5nCisJICogb3Igc3VzcGVuZGVkLiAgRG9pbmcgc28gd291bGQgZm9yY2UgYSBydW5uaW5nIHN1c3BlbmQgdGltZXIgdG8gYmUKKwkgKiBjYW5jZWxsZWQuCisJICovCisJcG1fcnVudGltZV9nZXRfbm9yZXN1bWUoJmludGYtPmRldik7CisJcyA9IEFDQ0VTU19PTkNFKGludGYtPmRldi5wb3dlci5ydW50aW1lX3N0YXR1cyk7CisJaWYgKHMgPT0gUlBNX1NVU1BFTkRJTkcgfHwgcyA9PSBSUE1fU1VTUEVOREVEKQorCQlzdGF0dXMgPSBwbV9yZXF1ZXN0X3Jlc3VtZSgmaW50Zi0+ZGV2KTsKKworCWlmIChzdGF0dXMgPCAwICYmIHN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpCisJCXBtX3J1bnRpbWVfcHV0X25vaWRsZSgmaW50Zi0+ZGV2KTsKKwllbHNlCiAJCWF0b21pY19pbmMoJmludGYtPnBtX3VzYWdlX2NudCk7Ci0JCWlmIChhdG9taWNfcmVhZCgmaW50Zi0+cG1fdXNhZ2VfY250KSA+IDAgJiYKLQkJCQl1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQotCQkJcXVldWVfd29yayhrc3VzcGVuZF91c2Jfd3EsICZ1ZGV2LT5hdXRvcmVzdW1lKTsKLQl9Ci0JZGV2X3ZkYmcoJmludGYtPmRldiwgIiVzOiBzdGF0dXMgJWQgY250ICVkXG4iLAotCQkJX19mdW5jX18sIHN0YXR1cywgYXRvbWljX3JlYWQoJmludGYtPnBtX3VzYWdlX2NudCkpOworCWRldl92ZGJnKCZpbnRmLT5kZXYsICIlczogY250ICVkIC0+ICVkXG4iLAorCQkJX19mdW5jX18sIGF0b21pY19yZWFkKCZpbnRmLT5kZXYucG93ZXIudXNhZ2VfY291bnQpLAorCQkJc3RhdHVzKTsKKwlpZiAoc3RhdHVzID4gMCkKKwkJc3RhdHVzID0gMDsKIAlyZXR1cm4gc3RhdHVzOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX2FzeW5jKTsKIAotI2Vsc2UKLQotdm9pZCB1c2JfYXV0b3N1c3BlbmRfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17fQotCi12b2lkIHVzYl9hdXRvcmVzdW1lX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQote30KLQotI2VuZGlmIC8qIENPTkZJR19VU0JfU1VTUEVORCAqLwotCiAvKioKLSAqIHVzYl9leHRlcm5hbF9zdXNwZW5kX2RldmljZSAtIGV4dGVybmFsIHN1c3BlbmQgb2YgYSBVU0IgZGV2aWNlIGFuZCBpdHMgaW50ZXJmYWNlcwotICogQHVkZXY6IHRoZSB1c2JfZGV2aWNlIHRvIHN1c3BlbmQKLSAqIEBtc2c6IFBvd2VyIE1hbmFnZW1lbnQgbWVzc2FnZSBkZXNjcmliaW5nIHRoaXMgc3RhdGUgdHJhbnNpdGlvbgorICogdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX25vX3Jlc3VtZSAtIGluY3JlbWVudCBhIFVTQiBpbnRlcmZhY2UncyBQTS11c2FnZSBjb3VudGVyCisgKiBAaW50ZjogdGhlIHVzYl9pbnRlcmZhY2Ugd2hvc2UgY291bnRlciBzaG91bGQgYmUgaW5jcmVtZW50ZWQKICAqCi0gKiBUaGlzIHJvdXRpbmUgaGFuZGxlcyBleHRlcm5hbCBzdXNwZW5kIHJlcXVlc3RzOiBvbmVzIG5vdCBnZW5lcmF0ZWQKLSAqIGludGVybmFsbHkgYnkgYSBVU0IgZHJpdmVyIChhdXRvc3VzcGVuZCkgYnV0IHJhdGhlciBjb21pbmcgZnJvbSB0aGUgdXNlcgotICogKHZpYSBzeXNmcykgb3IgdGhlIFBNIGNvcmUgKHN5c3RlbSBzbGVlcCkuICBUaGUgc3VzcGVuZCB3aWxsIGJlIGNhcnJpZWQKLSAqIG91dCByZWdhcmRsZXNzIG9mIEB1ZGV2J3MgdXNhZ2UgY291bnRlciBvciB0aG9zZSBvZiBpdHMgaW50ZXJmYWNlcywKLSAqIGFuZCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IHJlbW90ZSB3YWtldXAgaXMgZW5hYmxlZC4gIE9mIGNvdXJzZSwKLSAqIGludGVyZmFjZSBkcml2ZXJzIHN0aWxsIGhhdmUgdGhlIG9wdGlvbiBvZiBmYWlsaW5nIHRoZSBzdXNwZW5kIChpZgotICogdGhlcmUgYXJlIHVuc3VzcGVuZGVkIGNoaWxkcmVuLCBmb3IgZXhhbXBsZSkuCisgKiBUaGlzIHJvdXRpbmUgaW5jcmVtZW50cyBAaW50ZidzIHVzYWdlIGNvdW50ZXIgYnV0IGRvZXMgbm90IGNhcnJ5IG91dCBhbgorICogYXV0b3Jlc3VtZS4KICAqCi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBAdWRldidzIGRldmljZSBsb2NrLgorICogVGhpcyByb3V0aW5lIGNhbiBydW4gaW4gYXRvbWljIGNvbnRleHQuCiAgKi8KLWludCB1c2JfZXh0ZXJuYWxfc3VzcGVuZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCit2b2lkIHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZV9ub19yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7Ci0JaW50CXN0YXR1czsKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAKLQlkb191bmJpbmRfcmViaW5kKHVkZXYsIERPX1VOQklORCk7Ci0JdXNiX3BtX2xvY2sodWRldik7Ci0Jc3RhdHVzID0gdXNiX3N1c3BlbmRfYm90aCh1ZGV2LCBtc2cpOwotCXVzYl9wbV91bmxvY2sodWRldik7Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotLyoqCi0gKiB1c2JfZXh0ZXJuYWxfcmVzdW1lX2RldmljZSAtIGV4dGVybmFsIHJlc3VtZSBvZiBhIFVTQiBkZXZpY2UgYW5kIGl0cyBpbnRlcmZhY2VzCi0gKiBAdWRldjogdGhlIHVzYl9kZXZpY2UgdG8gcmVzdW1lCi0gKiBAbXNnOiBQb3dlciBNYW5hZ2VtZW50IG1lc3NhZ2UgZGVzY3JpYmluZyB0aGlzIHN0YXRlIHRyYW5zaXRpb24KLSAqCi0gKiBUaGlzIHJvdXRpbmUgaGFuZGxlcyBleHRlcm5hbCByZXN1bWUgcmVxdWVzdHM6IG9uZXMgbm90IGdlbmVyYXRlZAotICogaW50ZXJuYWxseSBieSBhIFVTQiBkcml2ZXIgKGF1dG9yZXN1bWUpIGJ1dCByYXRoZXIgY29taW5nIGZyb20gdGhlIHVzZXIKLSAqICh2aWEgc3lzZnMpLCB0aGUgUE0gY29yZSAoc3lzdGVtIHJlc3VtZSksIG9yIHRoZSBkZXZpY2UgaXRzZWxmIChyZW1vdGUKLSAqIHdha2V1cCkuICBAdWRldidzIHVzYWdlIGNvdW50ZXIgaXMgdW5hZmZlY3RlZC4KLSAqCi0gKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBAdWRldidzIGRldmljZSBsb2NrLgotICovCi1pbnQgdXNiX2V4dGVybmFsX3Jlc3VtZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHBtX21lc3NhZ2VfdCBtc2cpCi17Ci0JaW50CXN0YXR1czsKLQotCXVzYl9wbV9sb2NrKHVkZXYpOwotCXN0YXR1cyA9IHVzYl9yZXN1bWVfYm90aCh1ZGV2LCBtc2cpOwogCXVkZXYtPmxhc3RfYnVzeSA9IGppZmZpZXM7Ci0JdXNiX3BtX3VubG9jayh1ZGV2KTsKLQlpZiAoc3RhdHVzID09IDApCi0JCWRvX3VuYmluZF9yZWJpbmQodWRldiwgRE9fUkVCSU5EKTsKLQotCS8qIE5vdyB0aGF0IHRoZSBkZXZpY2UgaXMgYXdha2UsIHdlIGNhbiBzdGFydCB0cnlpbmcgdG8gYXV0b3N1c3BlbmQKLQkgKiBpdCBhZ2Fpbi4gKi8KLQlpZiAoc3RhdHVzID09IDApCi0JCXVzYl90cnlfYXV0b3N1c3BlbmRfZGV2aWNlKHVkZXYpOwotCXJldHVybiBzdGF0dXM7CisJYXRvbWljX2luYygmaW50Zi0+cG1fdXNhZ2VfY250KTsKKwlwbV9ydW50aW1lX2dldF9ub3Jlc3VtZSgmaW50Zi0+ZGV2KTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZV9ub19yZXN1bWUpOwogCi1pbnQgdXNiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQorLyogSW50ZXJuYWwgcm91dGluZSB0byBjaGVjayB3aGV0aGVyIHdlIG1heSBhdXRvc3VzcGVuZCBhIGRldmljZS4gKi8KK3N0YXRpYyBpbnQgYXV0b3N1c3BlbmRfY2hlY2soc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7CisJaW50CQkJaTsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZQkqaW50ZjsKKwl1bnNpZ25lZCBsb25nCQlzdXNwZW5kX3RpbWUsIGo7CiAKLQl1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOwotCi0JLyogSWYgdWRldiBpcyBhbHJlYWR5IHN1c3BlbmRlZCwgd2UgY2FuIHNraXAgdGhpcyBzdXNwZW5kIGFuZAotCSAqIHdlIHNob3VsZCBhbHNvIHNraXAgdGhlIHVwY29taW5nIHN5c3RlbSByZXN1bWUuICBIaWdoLXNwZWVkCi0JICogcm9vdCBodWJzIGFyZSBhbiBleGNlcHRpb247IHRoZXkgbmVlZCB0byByZXN1bWUgd2hlbmV2ZXIgdGhlCi0JICogc3lzdGVtIHdha2VzIHVwIGluIG9yZGVyIGZvciBVU0ItUEVSU0lTVCBwb3J0IGhhbmRvdmVyIHRvIHdvcmsKLQkgKiBwcm9wZXJseS4KKwkvKiBGYWlsIGlmIGF1dG9zdXNwZW5kIGlzIGRpc2FibGVkLCBvciBhbnkgaW50ZXJmYWNlcyBhcmUgaW4gdXNlLCBvcgorCSAqIGFueSBpbnRlcmZhY2UgZHJpdmVycyByZXF1aXJlIHJlbW90ZSB3YWtldXAgYnV0IGl0IGlzbid0IGF2YWlsYWJsZS4KIAkgKi8KLQlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkgewotCQlpZiAodWRldi0+cGFyZW50IHx8IHVkZXYtPnNwZWVkICE9IFVTQl9TUEVFRF9ISUdIKQotCQkJdWRldi0+c2tpcF9zeXNfcmVzdW1lID0gMTsKLQkJcmV0dXJuIDA7CisJdWRldi0+ZG9fcmVtb3RlX3dha2V1cCA9IGRldmljZV9tYXlfd2FrZXVwKCZ1ZGV2LT5kZXYpOworCWlmICh1ZGV2LT5hY3Rjb25maWcpIHsKKwkJZm9yIChpID0gMDsgaSA8IHVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7CisJCQlpbnRmID0gdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbaV07CisKKwkJCS8qIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgaW50ZXJmYWNlcyB0aGF0IGFyZQorCQkJICogZGlzYWJsZWQgZm9yIHJ1bnRpbWUgUE0uICBFaXRoZXIgdGhleSBhcmUgdW5ib3VuZAorCQkJICogb3IgZWxzZSB0aGVpciBkcml2ZXJzIGRvbid0IHN1cHBvcnQgYXV0b3N1c3BlbmQKKwkJCSAqIGFuZCBzbyB0aGV5IGFyZSBwZXJtYW5lbnRseSBhY3RpdmUuCisJCQkgKi8KKwkJCWlmIChpbnRmLT5kZXYucG93ZXIuZGlzYWJsZV9kZXB0aCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChhdG9taWNfcmVhZCgmaW50Zi0+ZGV2LnBvd2VyLnVzYWdlX2NvdW50KSA+IDApCisJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCWlmIChpbnRmLT5uZWVkc19yZW1vdGVfd2FrZXVwICYmCisJCQkJCSF1ZGV2LT5kb19yZW1vdGVfd2FrZXVwKSB7CisJCQkJZGV2X2RiZygmdWRldi0+ZGV2LCAicmVtb3RlIHdha2V1cCBuZWVkZWQgIgorCQkJCQkJImZvciBhdXRvc3VzcGVuZFxuIik7CisJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQkJfQorCisJCQkvKiBEb24ndCBhbGxvdyBhdXRvc3VzcGVuZCBpZiB0aGUgZGV2aWNlIHdpbGwgbmVlZAorCQkJICogYSByZXNldC1yZXN1bWUgYW5kIGFueSBvZiBpdHMgaW50ZXJmYWNlIGRyaXZlcnMKKwkJCSAqIGRvZXNuJ3QgaW5jbHVkZSBzdXBwb3J0IG9yIG5lZWRzIHJlbW90ZSB3YWtldXAuCisJCQkgKi8KKwkJCWlmICh1ZGV2LT5xdWlya3MgJiBVU0JfUVVJUktfUkVTRVRfUkVTVU1FKSB7CisJCQkJc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlcjsKKworCQkJCWRyaXZlciA9IHRvX3VzYl9kcml2ZXIoaW50Zi0+ZGV2LmRyaXZlcik7CisJCQkJaWYgKCFkcml2ZXItPnJlc2V0X3Jlc3VtZSB8fAorCQkJCQkJaW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCkKKwkJCQkJcmV0dXJuIC1FT1BOT1RTVVBQOworCQkJfQorCQl9CiAJfQogCi0JdWRldi0+c2tpcF9zeXNfcmVzdW1lID0gMDsKLQlyZXR1cm4gdXNiX2V4dGVybmFsX3N1c3BlbmRfZGV2aWNlKHVkZXYsIG1zZyk7CisJLyogSWYgZXZlcnl0aGluZyBpcyBva2F5IGJ1dCB0aGUgZGV2aWNlIGhhc24ndCBiZWVuIGlkbGUgZm9yIGxvbmcKKwkgKiBlbm91Z2gsIHF1ZXVlIGEgZGVsYXllZCBhdXRvc3VzcGVuZCByZXF1ZXN0LgorCSAqLworCWogPSBBQ0NFU1NfT05DRShqaWZmaWVzKTsKKwlzdXNwZW5kX3RpbWUgPSB1ZGV2LT5sYXN0X2J1c3kgKyB1ZGV2LT5hdXRvc3VzcGVuZF9kZWxheTsKKwlpZiAodGltZV9iZWZvcmUoaiwgc3VzcGVuZF90aW1lKSkgeworCQlwbV9zY2hlZHVsZV9zdXNwZW5kKCZ1ZGV2LT5kZXYsIGppZmZpZXNfdG9fbXNlY3MoCisJCQkJcm91bmRfamlmZmllc191cF9yZWxhdGl2ZShzdXNwZW5kX3RpbWUgLSBqKSkpOworCQlyZXR1cm4gLUVBR0FJTjsKKwl9CisJcmV0dXJuIDA7CiB9CiAKLWludCB1c2JfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1zZykKK3N0YXRpYyBpbnQgdXNiX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7Ci0JaW50CQkJc3RhdHVzOworCWludAlzdGF0dXMgPSAwOwogCi0JdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKLQotCS8qIElmIHVkZXYtPnNraXBfc3lzX3Jlc3VtZSBpcyBzZXQgdGhlbiB1ZGV2IHdhcyBhbHJlYWR5IHN1c3BlbmRlZAotCSAqIHdoZW4gdGhlIHN5c3RlbSBzbGVlcCBzdGFydGVkLCBzbyB3ZSBkb24ndCB3YW50IHRvIHJlc3VtZSBpdAotCSAqIGR1cmluZyB0aGlzIHN5c3RlbSB3YWtldXAuCisJLyogQSBVU0IgZGV2aWNlIGNhbiBiZSBzdXNwZW5kZWQgaWYgaXQgcGFzc2VzIHRoZSB2YXJpb3VzIGF1dG9zdXNwZW5kCisJICogY2hlY2tzLiAgUnVudGltZSBzdXNwZW5kIGZvciBhIFVTQiBkZXZpY2UgbWVhbnMgc3VzcGVuZGluZyBhbGwgdGhlCisJICogaW50ZXJmYWNlcyBhbmQgdGhlbiB0aGUgZGV2aWNlIGl0c2VsZi4KIAkgKi8KLQlpZiAodWRldi0+c2tpcF9zeXNfcmVzdW1lKQotCQlyZXR1cm4gMDsKLQlzdGF0dXMgPSB1c2JfZXh0ZXJuYWxfcmVzdW1lX2RldmljZSh1ZGV2LCBtc2cpOworCWlmIChpc191c2JfZGV2aWNlKGRldikpIHsKKwkJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSB0b191c2JfZGV2aWNlKGRldik7CiAKLQkvKiBBdm9pZCBQTSBlcnJvciBtZXNzYWdlcyBmb3IgZGV2aWNlcyBkaXNjb25uZWN0ZWQgd2hpbGUgc3VzcGVuZGVkCi0JICogYXMgd2UnbGwgZGlzcGxheSByZWd1bGFyIGRpc2Nvbm5lY3QgbWVzc2FnZXMganVzdCBhIGJpdCBsYXRlci4KLQkgKi8KLQlpZiAoc3RhdHVzID09IC1FTk9ERVYpCi0JCXJldHVybiAwOworCQlpZiAoYXV0b3N1c3BlbmRfY2hlY2sodWRldikgIT0gMCkKKwkJCXJldHVybiAtRUFHQUlOOworCisJCXN0YXR1cyA9IHVzYl9zdXNwZW5kX2JvdGgodWRldiwgUE1TR19BVVRPX1NVU1BFTkQpOworCisJCS8qIElmIGFuIGludGVyZmFjZSBmYWlscyB0aGUgc3VzcGVuZCwgYWRqdXN0IHRoZSBsYXN0X2J1c3kKKwkJICogdGltZSBzbyB0aGF0IHdlIGRvbid0IGdldCBhbm90aGVyIHN1c3BlbmQgYXR0ZW1wdCByaWdodAorCQkgKiBhd2F5LgorCQkgKi8KKwkJaWYgKHN0YXR1cykgeworCQkJdWRldi0+bGFzdF9idXN5ID0gamlmZmllcyArCisJCQkJCSh1ZGV2LT5hdXRvc3VzcGVuZF9kZWxheSA9PSAwID8KKwkJCQkJCUhaLzIgOiAwKTsKKwkJfQorCisJCS8qIFByZXZlbnQgdGhlIHBhcmVudCBmcm9tIHN1c3BlbmRpbmcgaW1tZWRpYXRlbHkgYWZ0ZXIgKi8KKwkJZWxzZSBpZiAodWRldi0+cGFyZW50KSB7CisJCQl1ZGV2LT5wYXJlbnQtPmxhc3RfYnVzeSA9IGppZmZpZXM7CisJCX0KKwl9CisKKwkvKiBSdW50aW1lIHN1c3BlbmQgZm9yIGEgVVNCIGludGVyZmFjZSBkb2Vzbid0IG1lYW4gYW55dGhpbmcuICovCiAJcmV0dXJuIHN0YXR1czsKIH0KIAotI2VuZGlmIC8qIENPTkZJR19QTSAqLworc3RhdGljIGludCB1c2JfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCS8qIFJ1bnRpbWUgcmVzdW1lIGZvciBhIFVTQiBkZXZpY2UgbWVhbnMgcmVzdW1pbmcgYm90aCB0aGUgZGV2aWNlCisJICogYW5kIGFsbCBpdHMgaW50ZXJmYWNlcy4KKwkgKi8KKwlpZiAoaXNfdXNiX2RldmljZShkZXYpKSB7CisJCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOworCQlpbnQJCQlzdGF0dXM7CisKKwkJc3RhdHVzID0gdXNiX3Jlc3VtZV9ib3RoKHVkZXYsIFBNU0dfQVVUT19SRVNVTUUpOworCQl1ZGV2LT5sYXN0X2J1c3kgPSBqaWZmaWVzOworCQlyZXR1cm4gc3RhdHVzOworCX0KKworCS8qIFJ1bnRpbWUgcmVzdW1lIGZvciBhIFVTQiBpbnRlcmZhY2UgZG9lc24ndCBtZWFuIGFueXRoaW5nLiAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHVzYl9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KQoreworCS8qIEFuIGlkbGUgVVNCIGRldmljZSBjYW4gYmUgc3VzcGVuZGVkIGlmIGl0IHBhc3NlcyB0aGUgdmFyaW91cworCSAqIGF1dG9zdXNwZW5kIGNoZWNrcy4gIEFuIGlkbGUgaW50ZXJmYWNlIGNhbiBiZSBzdXNwZW5kZWQgYXQKKwkgKiBhbnkgdGltZS4KKwkgKi8KKwlpZiAoaXNfdXNiX2RldmljZShkZXYpKSB7CisJCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOworCisJCWlmIChhdXRvc3VzcGVuZF9jaGVjayh1ZGV2KSAhPSAwKQorCQkJcmV0dXJuIDA7CisJfQorCisJcG1fcnVudGltZV9zdXNwZW5kKGRldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZGV2X3BtX29wcyB1c2JfYnVzX3BtX29wcyA9IHsKKwkucnVudGltZV9zdXNwZW5kID0JdXNiX3J1bnRpbWVfc3VzcGVuZCwKKwkucnVudGltZV9yZXN1bWUgPQl1c2JfcnVudGltZV9yZXN1bWUsCisJLnJ1bnRpbWVfaWRsZSA9CQl1c2JfcnVudGltZV9pZGxlLAorfTsKKworI2Vsc2UKKworI2RlZmluZSB1c2JfYnVzX3BtX29wcwkoKihzdHJ1Y3QgZGV2X3BtX29wcyAqKSBOVUxMKQorCisjZW5kaWYgLyogQ09ORklHX1VTQl9TVVNQRU5EICovCiAKIHN0cnVjdCBidXNfdHlwZSB1c2JfYnVzX3R5cGUgPSB7CiAJLm5hbWUgPQkJInVzYiIsCiAJLm1hdGNoID0JdXNiX2RldmljZV9tYXRjaCwKIAkudWV2ZW50ID0JdXNiX3VldmVudCwKKwkucG0gPQkJJnVzYl9idXNfcG1fb3BzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jIGIvZHJpdmVycy91c2IvY29yZS9maWxlLmMKaW5kZXggYmZjNmMyZS4uYzM1MzZmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9maWxlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9maWxlLmMKQEAgLTM0LDcgKzM0LDYgQEAKIAlpbnQgZXJyID0gLUVOT0RFVjsKIAljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpvbGRfZm9wcywgKm5ld19mb3BzID0gTlVMTDsKIAotCWxvY2tfa2VybmVsKCk7CiAJZG93bl9yZWFkKCZtaW5vcl9yd3NlbSk7CiAJYyA9IHVzYl9taW5vcnNbbWlub3JdOwogCkBAIC01Myw3ICs1Miw2IEBACiAJZm9wc19wdXQob2xkX2ZvcHMpOwogIGRvbmU6CiAJdXBfcmVhZCgmbWlub3JfcndzZW0pOwotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwppbmRleCA4MDk5NWVmLi4yZjhjZWRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogCkBAIC0xNDEsNyArMTQyLDcgQEAKIAkweDA5LCAgICAgICAvKiAgX191OCAgYk1heFBhY2tldFNpemUwOyAyXjkgPSA1MTIgQnl0ZXMgKi8KIAogCTB4NmIsIDB4MWQsIC8qICBfX2xlMTYgaWRWZW5kb3I7IExpbnV4IEZvdW5kYXRpb24gKi8KLQkweDAyLCAweDAwLCAvKiAgX19sZTE2IGlkUHJvZHVjdDsgZGV2aWNlIDB4MDAwMiAqLworCTB4MDMsIDB4MDAsIC8qICBfX2xlMTYgaWRQcm9kdWN0OyBkZXZpY2UgMHgwMDAzICovCiAJS0VSTkVMX1ZFUiwgS0VSTkVMX1JFTCwgLyogIF9fbGUxNiBiY2REZXZpY2UgKi8KIAogCTB4MDMsICAgICAgIC8qICBfX3U4ICBpTWFudWZhY3R1cmVyOyAqLwpAQCAtMTY3MCwxMSArMTY3MSwxNiBAQAogCQkJfQogCQl9CiAJCWZvciAoaSA9IDA7IGkgPCBudW1faW50ZnM7ICsraSkgeworCQkJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqZmlyc3RfYWx0OworCQkJaW50IGlmYWNlX251bTsKKworCQkJZmlyc3RfYWx0ID0gJm5ld19jb25maWctPmludGZfY2FjaGVbaV0tPmFsdHNldHRpbmdbMF07CisJCQlpZmFjZV9udW0gPSBmaXJzdF9hbHQtPmRlc2MuYkludGVyZmFjZU51bWJlcjsKIAkJCS8qIFNldCB1cCBlbmRwb2ludHMgZm9yIGFsdGVybmF0ZSBpbnRlcmZhY2Ugc2V0dGluZyAwICovCi0JCQlhbHQgPSB1c2JfZmluZF9hbHRfc2V0dGluZyhuZXdfY29uZmlnLCBpLCAwKTsKKwkJCWFsdCA9IHVzYl9maW5kX2FsdF9zZXR0aW5nKG5ld19jb25maWcsIGlmYWNlX251bSwgMCk7CiAJCQlpZiAoIWFsdCkKIAkJCQkvKiBObyBhbHQgc2V0dGluZyAwPyBQaWNrIHRoZSBmaXJzdCBzZXR0aW5nLiAqLwotCQkJCWFsdCA9ICZuZXdfY29uZmlnLT5pbnRmX2NhY2hlW2ldLT5hbHRzZXR0aW5nWzBdOworCQkJCWFsdCA9IGZpcnN0X2FsdDsKIAogCQkJZm9yIChqID0gMDsgaiA8IGFsdC0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBqKyspIHsKIAkJCQlyZXQgPSBoY2QtPmRyaXZlci0+YWRkX2VuZHBvaW50KGhjZCwgdWRldiwgJmFsdC0+ZW5kcG9pbnRbal0pOwpAQCAtMTg1Myw2ICsxODU5LDEwIEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAorI2VuZGlmCS8qIENPTkZJR19QTSAqLworCisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisKIC8qIFdvcmtxdWV1ZSByb3V0aW5lIGZvciByb290LWh1YiByZW1vdGUgd2FrZXVwICovCiBzdGF0aWMgdm9pZCBoY2RfcmVzdW1lX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewpAQCAtMTg2MCw4ICsxODcwLDcgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGhjZC0+c2VsZi5yb290X2h1YjsKIAogCXVzYl9sb2NrX2RldmljZSh1ZGV2KTsKLQl1c2JfbWFya19sYXN0X2J1c3kodWRldik7Ci0JdXNiX2V4dGVybmFsX3Jlc3VtZV9kZXZpY2UodWRldiwgUE1TR19SRU1PVEVfUkVTVU1FKTsKKwl1c2JfcmVtb3RlX3dha2V1cCh1ZGV2KTsKIAl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKIH0KIApAQCAtMTg4MCwxMiArMTg4OSwxMiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZoY2Rfcm9vdF9odWJfbG9jaywgZmxhZ3MpOwogCWlmIChoY2QtPnJoX3JlZ2lzdGVyZWQpCi0JCXF1ZXVlX3dvcmsoa3N1c3BlbmRfdXNiX3dxLCAmaGNkLT53YWtldXBfd29yayk7CisJCXF1ZXVlX3dvcmsocG1fd3EsICZoY2QtPndha2V1cF93b3JrKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmaGNkX3Jvb3RfaHViX2xvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKTsKIAotI2VuZGlmCisjZW5kaWYJLyogQ09ORklHX1VTQl9TVVNQRU5EICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKQEAgLTIwMzAsNyArMjAzOSw3IEBACiAJaW5pdF90aW1lcigmaGNkLT5yaF90aW1lcik7CiAJaGNkLT5yaF90aW1lci5mdW5jdGlvbiA9IHJoX3RpbWVyX2Z1bmM7CiAJaGNkLT5yaF90aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIGhjZDsKLSNpZmRlZiBDT05GSUdfUE0KKyNpZmRlZiBDT05GSUdfVVNCX1NVU1BFTkQKIAlJTklUX1dPUksoJmhjZC0+d2FrZXVwX3dvcmssIGhjZF9yZXN1bWVfd29yayk7CiAjZW5kaWYKIAltdXRleF9pbml0KCZoY2QtPmJhbmR3aWR0aF9tdXRleCk7CkBAIC0yMjMwLDcgKzIyMzksNyBAQAogCWhjZC0+cmhfcmVnaXN0ZXJlZCA9IDA7CiAJc3Bpbl91bmxvY2tfaXJxICgmaGNkX3Jvb3RfaHViX2xvY2spOwogCi0jaWZkZWYgQ09ORklHX1BNCisjaWZkZWYgQ09ORklHX1VTQl9TVVNQRU5ECiAJY2FuY2VsX3dvcmtfc3luYygmaGNkLT53YWtldXBfd29yayk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuaCBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKaW5kZXggYmJlMmI5Mi4uYTNjZGIwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuaAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oCkBAIC04MCw3ICs4MCw3IEBACiAKIAlzdHJ1Y3QgdGltZXJfbGlzdAlyaF90aW1lcjsJLyogZHJpdmVzIHJvb3QtaHViIHBvbGxpbmcgKi8KIAlzdHJ1Y3QgdXJiCQkqc3RhdHVzX3VyYjsJLyogdGhlIGN1cnJlbnQgc3RhdHVzIHVyYiAqLwotI2lmZGVmIENPTkZJR19QTQorI2lmZGVmIENPTkZJR19VU0JfU1VTUEVORAogCXN0cnVjdCB3b3JrX3N0cnVjdAl3YWtldXBfd29yazsJLyogZm9yIHJlbW90ZSB3YWtldXAgKi8KICNlbmRpZgogCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkvKiB4SENJIHNwZWNpZmljIGZ1bmN0aW9ucyAqLwogCQkvKiBDYWxsZWQgYnkgdXNiX2FsbG9jX2RldiB0byBhbGxvYyBIQyBkZXZpY2Ugc3RydWN0dXJlcyAqLwogCWludAkoKmFsbG9jX2Rldikoc3RydWN0IHVzYl9oY2QgKiwgc3RydWN0IHVzYl9kZXZpY2UgKik7Ci0JCS8qIENhbGxlZCBieSB1c2JfcmVsZWFzZV9kZXYgdG8gZnJlZSBIQyBkZXZpY2Ugc3RydWN0dXJlcyAqLworCQkvKiBDYWxsZWQgYnkgdXNiX2Rpc2Nvbm5lY3QgdG8gZnJlZSBIQyBkZXZpY2Ugc3RydWN0dXJlcyAqLwogCXZvaWQJKCpmcmVlX2Rldikoc3RydWN0IHVzYl9oY2QgKiwgc3RydWN0IHVzYl9kZXZpY2UgKik7CiAKIAkvKiBCYW5kd2lkdGggY29tcHV0YXRpb24gZnVuY3Rpb25zICovCkBAIC0yODYsNiArMjg2LDcgQEAKIAkJICovCiAJaW50CSgqdXBkYXRlX2h1Yl9kZXZpY2UpKHN0cnVjdCB1c2JfaGNkICosIHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2LAogCQkJc3RydWN0IHVzYl90dCAqdHQsIGdmcF90IG1lbV9mbGFncyk7CisJaW50CSgqcmVzZXRfZGV2aWNlKShzdHJ1Y3QgdXNiX2hjZCAqLCBzdHJ1Y3QgdXNiX2RldmljZSAqKTsKIH07CiAKIGV4dGVybiBpbnQgdXNiX2hjZF9saW5rX3VyYl90b19lcChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIpOwpAQCAtNDYzLDE2ICs0NjQsMjAgQEAKICNkZWZpbmUgdXNiX2VuZHBvaW50X291dChlcF9kaXIpCSghKChlcF9kaXIpICYgVVNCX0RJUl9JTikpCiAKICNpZmRlZiBDT05GSUdfUE0KLWV4dGVybiB2b2lkIHVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKHN0cnVjdCB1c2JfaGNkICpoY2QpOwogZXh0ZXJuIHZvaWQgdXNiX3Jvb3RfaHViX2xvc3RfcG93ZXIoc3RydWN0IHVzYl9kZXZpY2UgKnJoZGV2KTsKIGV4dGVybiBpbnQgaGNkX2J1c19zdXNwZW5kKHN0cnVjdCB1c2JfZGV2aWNlICpyaGRldiwgcG1fbWVzc2FnZV90IG1zZyk7CiBleHRlcm4gaW50IGhjZF9idXNfcmVzdW1lKHN0cnVjdCB1c2JfZGV2aWNlICpyaGRldiwgcG1fbWVzc2FnZV90IG1zZyk7CisjZW5kaWYgLyogQ09ORklHX1BNICovCisKKyNpZmRlZiBDT05GSUdfVVNCX1NVU1BFTkQKK2V4dGVybiB2b2lkIHVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKHN0cnVjdCB1c2JfaGNkICpoY2QpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCB1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihzdHJ1Y3QgdXNiX2hjZCAqaGNkKQogewogCXJldHVybjsKIH0KLSNlbmRpZiAvKiBDT05GSUdfUE0gKi8KKyNlbmRpZiAvKiBDT05GSUdfVVNCX1NVU1BFTkQgKi8KKwogCiAvKgogICogVVNCIGRldmljZSBmcyBzdHVmZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9odWIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKaW5kZXggMjBlY2I0Yy4uMDk0MGNjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9odWIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgorI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgpAQCAtNzEsNyArNzIsNiBAQAogCiAJdW5zaWduZWQJCW1BX3Blcl9wb3J0OwkvKiBjdXJyZW50IGZvciBlYWNoIGNoaWxkICovCiAKLQl1bnNpZ25lZAkJaW5pdF9kb25lOjE7CiAJdW5zaWduZWQJCWxpbWl0ZWRfcG93ZXI6MTsKIAl1bnNpZ25lZAkJcXVpZXNjaW5nOjE7CiAJdW5zaWduZWQJCWRpc2Nvbm5lY3RlZDoxOwpAQCAtODIwLDcgKzgyMCw2IEBACiAJfQogIGluaXQzOgogCWh1Yi0+cXVpZXNjaW5nID0gMDsKLQlodWItPmluaXRfZG9uZSA9IDE7CiAKIAlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihodWItPnVyYiwgR0ZQX05PSU8pOwogCWlmIChzdGF0dXMgPCAwKQpAQCAtODYxLDExICs4NjAsNiBAQAogCWludCBpOwogCiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZodWItPmluaXRfd29yayk7Ci0JaWYgKCFodWItPmluaXRfZG9uZSkgewotCQlodWItPmluaXRfZG9uZSA9IDE7Ci0JCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZV9ub19zdXNwZW5kKAotCQkJCXRvX3VzYl9pbnRlcmZhY2UoaHViLT5pbnRmZGV2KSk7Ci0JfQogCiAJLyoga2h1YmQgYW5kIHJlbGF0ZWQgYWN0aXZpdHkgd29uJ3QgcmUtdHJpZ2dlciAqLwogCWh1Yi0+cXVpZXNjaW5nID0gMTsKQEAgLTEyMjQsNiArMTIxOCw5IEBACiAJZGVzYyA9IGludGYtPmN1cl9hbHRzZXR0aW5nOwogCWhkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCisJLyogSHVicyBoYXZlIHByb3BlciBzdXNwZW5kL3Jlc3VtZSBzdXBwb3J0ICovCisJdXNiX2VuYWJsZV9hdXRvc3VzcGVuZChoZGV2KTsKKwogCWlmIChoZGV2LT5sZXZlbCA9PSBNQVhfVE9QT19MRVZFTCkgewogCQlkZXZfZXJyKCZpbnRmLT5kZXYsCiAJCQkiVW5zdXBwb3J0ZWQgYnVzIHRvcG9sb2d5OiBodWIgbmVzdGVkIHRvbyBkZWVwXG4iKTsKQEAgLTE0MDIsMTAgKzEzOTksOCBAQAogCQlpZiAodWRldi0+Y2hpbGRyZW5baV0pCiAJCQlyZWN1cnNpdmVseV9tYXJrX05PVEFUVEFDSEVEKHVkZXYtPmNoaWxkcmVuW2ldKTsKIAl9Ci0JaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpIHsKLQkJdWRldi0+ZGlzY29uX3N1c3BlbmRlZCA9IDE7CisJaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpCiAJCXVkZXYtPmFjdGl2ZV9kdXJhdGlvbiAtPSBqaWZmaWVzOwotCX0KIAl1ZGV2LT5zdGF0ZSA9IFVTQl9TVEFURV9OT1RBVFRBQ0hFRDsKIH0KIApAQCAtMTQ0OCwxMSArMTQ0MywxMSBAQAogCQkJCQl8fCBuZXdfc3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKIAkJCQk7CS8qIE5vIGNoYW5nZSB0byB3YWtldXAgc2V0dGluZ3MgKi8KIAkJCWVsc2UgaWYgKG5ld19zdGF0ZSA9PSBVU0JfU1RBVEVfQ09ORklHVVJFRCkKLQkJCQlkZXZpY2VfaW5pdF93YWtldXAoJnVkZXYtPmRldiwKKwkJCQlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKCZ1ZGV2LT5kZXYsCiAJCQkJCSh1ZGV2LT5hY3Rjb25maWctPmRlc2MuYm1BdHRyaWJ1dGVzCiAJCQkJCSAmIFVTQl9DT05GSUdfQVRUX1dBS0VVUCkpOwogCQkJZWxzZQotCQkJCWRldmljZV9pbml0X3dha2V1cCgmdWRldi0+ZGV2LCAwKTsKKwkJCQlkZXZpY2Vfc2V0X3dha2V1cF9jYXBhYmxlKCZ1ZGV2LT5kZXYsIDApOwogCQl9CiAJCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEICYmCiAJCQluZXdfc3RhdGUgIT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKQEAgLTE1MjksMzEgKzE1MjQsMTUgQEAKIAkJdWRldi0+ZGV2bnVtID0gZGV2bnVtOwogfQogCi0jaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECi0KLXN0YXRpYyB2b2lkIHVzYl9zdG9wX3BtKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQorc3RhdGljIHZvaWQgaHViX2ZyZWVfZGV2KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewotCS8qIFN5bmNocm9uaXplIHdpdGggdGhlIGtzdXNwZW5kIHRocmVhZCB0byBwcmV2ZW50IGFueSBtb3JlCi0JICogYXV0b3N1c3BlbmQgcmVxdWVzdHMgZnJvbSBiZWluZyBzdWJtaXR0ZWQsIGFuZCBkZWNyZW1lbnQKLQkgKiB0aGUgcGFyZW50J3MgY291bnQgb2YgdW5zdXNwZW5kZWQgY2hpbGRyZW4uCi0JICovCi0JdXNiX3BtX2xvY2sodWRldik7Ci0JaWYgKHVkZXYtPnBhcmVudCAmJiAhdWRldi0+ZGlzY29uX3N1c3BlbmRlZCkKLQkJdXNiX2F1dG9zdXNwZW5kX2RldmljZSh1ZGV2LT5wYXJlbnQpOwotCXVzYl9wbV91bmxvY2sodWRldik7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGJ1c190b19oY2QodWRldi0+YnVzKTsKIAotCS8qIFN0b3AgYW55IGF1dG9zdXNwZW5kIG9yIGF1dG9yZXN1bWUgcmVxdWVzdHMgYWxyZWFkeSBzdWJtaXR0ZWQgKi8KLQljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJnVkZXYtPmF1dG9zdXNwZW5kKTsKLQljYW5jZWxfd29ya19zeW5jKCZ1ZGV2LT5hdXRvcmVzdW1lKTsKKwkvKiBSb290IGh1YnMgYXJlbid0IHJlYWwgZGV2aWNlcywgc28gZG9uJ3QgZnJlZSBIQ0QgcmVzb3VyY2VzICovCisJaWYgKGhjZC0+ZHJpdmVyLT5mcmVlX2RldiAmJiB1ZGV2LT5wYXJlbnQpCisJCWhjZC0+ZHJpdmVyLT5mcmVlX2RldihoY2QsIHVkZXYpOwogfQogCi0jZWxzZQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdXNiX3N0b3BfcG0oc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCi17IH0KLQotI2VuZGlmCi0KIC8qKgogICogdXNiX2Rpc2Nvbm5lY3QgLSBkaXNjb25uZWN0IGEgZGV2aWNlICh1c2Jjb3JlLWludGVybmFsKQogICogQHBkZXY6IHBvaW50ZXIgdG8gZGV2aWNlIGJlaW5nIGRpc2Nvbm5lY3RlZApAQCAtMTYyMiw3ICsxNjAxLDcgQEAKIAkqcGRldiA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxKCZkZXZpY2Vfc3RhdGVfbG9jayk7CiAKLQl1c2Jfc3RvcF9wbSh1ZGV2KTsKKwlodWJfZnJlZV9kZXYodWRldik7CiAKIAlwdXRfZGV2aWNlKCZ1ZGV2LT5kZXYpOwogfQpAQCAtMTc5OSw5ICsxNzc4LDE4IEBACiB7CiAJaW50IGVycjsKIAotCS8qIEluY3JlbWVudCB0aGUgcGFyZW50J3MgY291bnQgb2YgdW5zdXNwZW5kZWQgY2hpbGRyZW4gKi8KLQlpZiAodWRldi0+cGFyZW50KQotCQl1c2JfYXV0b3Jlc3VtZV9kZXZpY2UodWRldi0+cGFyZW50KTsKKwlpZiAodWRldi0+cGFyZW50KSB7CisJCS8qIEluaXRpYWxpemUgbm9uLXJvb3QtaHViIGRldmljZSB3YWtldXAgdG8gZGlzYWJsZWQ7CisJCSAqIGRldmljZSAodW4pY29uZmlndXJhdGlvbiBjb250cm9scyB3YWtldXAgY2FwYWJsZQorCQkgKiBzeXNmcyBwb3dlci93YWtldXAgY29udHJvbHMgd2FrZXVwIGVuYWJsZWQvZGlzYWJsZWQKKwkJICovCisJCWRldmljZV9pbml0X3dha2V1cCgmdWRldi0+ZGV2LCAwKTsKKwkJZGV2aWNlX3NldF93YWtldXBfZW5hYmxlKCZ1ZGV2LT5kZXYsIDEpOworCX0KKworCS8qIFRlbGwgdGhlIHJ1bnRpbWUtUE0gZnJhbWV3b3JrIHRoZSBkZXZpY2UgaXMgYWN0aXZlICovCisJcG1fcnVudGltZV9zZXRfYWN0aXZlKCZ1ZGV2LT5kZXYpOworCXBtX3J1bnRpbWVfZW5hYmxlKCZ1ZGV2LT5kZXYpOwogCiAJdXNiX2RldGVjdF9xdWlya3ModWRldik7CiAJZXJyID0gdXNiX2VudW1lcmF0ZV9kZXZpY2UodWRldik7CS8qIFJlYWQgZGVzY3JpcHRvcnMgKi8KQEAgLTE4MzMsNyArMTgyMSw4IEBACiAKIGZhaWw6CiAJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwgVVNCX1NUQVRFX05PVEFUVEFDSEVEKTsKLQl1c2Jfc3RvcF9wbSh1ZGV2KTsKKwlwbV9ydW50aW1lX2Rpc2FibGUoJnVkZXYtPmRldik7CisJcG1fcnVudGltZV9zZXRfc3VzcGVuZGVkKCZ1ZGV2LT5kZXYpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE5ODIsNyArMTk3MSw3IEBACiAJCWlmICghKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX1JFU0VUKSAmJgogCQkgICAgKHBvcnRzdGF0dXMgJiBVU0JfUE9SVF9TVEFUX0VOQUJMRSkpIHsKIAkJCWlmIChodWJfaXNfd3VzYihodWIpKQotCQkJCXVkZXYtPnNwZWVkID0gVVNCX1NQRUVEX1ZBUklBQkxFOworCQkJCXVkZXYtPnNwZWVkID0gVVNCX1NQRUVEX1dJUkVMRVNTOwogCQkJZWxzZSBpZiAocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRCkKIAkJCQl1ZGV2LT5zcGVlZCA9IFVTQl9TUEVFRF9ISUdIOwogCQkJZWxzZSBpZiAocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfTE9XX1NQRUVEKQpAQCAtMjAwOCw3ICsxOTk3LDkgQEAKIAkJCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgdW5zaWduZWQgaW50IGRlbGF5KQogewogCWludCBpLCBzdGF0dXM7CisJc3RydWN0IHVzYl9oY2QgKmhjZDsKIAorCWhjZCA9IGJ1c190b19oY2QodWRldi0+YnVzKTsKIAkvKiBCbG9jayBFSENJIENGIGluaXRpYWxpemF0aW9uIGR1cmluZyB0aGUgcG9ydCByZXNldC4KIAkgKiBTb21lIGNvbXBhbmlvbiBjb250cm9sbGVycyBkb24ndCBsaWtlIGl0IHdoZW4gdGhleSBtaXguCiAJICovCkBAIC0yMDM2LDYgKzIwMjcsMTQgQEAKIAkJCS8qIFRSU1RSQ1kgPSAxMCBtczsgcGx1cyBzb21lIGV4dHJhICovCiAJCQltc2xlZXAoMTAgKyA0MCk7CiAJCQl1cGRhdGVfYWRkcmVzcyh1ZGV2LCAwKTsKKwkJCWlmIChoY2QtPmRyaXZlci0+cmVzZXRfZGV2aWNlKSB7CisJCQkJc3RhdHVzID0gaGNkLT5kcml2ZXItPnJlc2V0X2RldmljZShoY2QsIHVkZXYpOworCQkJCWlmIChzdGF0dXMgPCAwKSB7CisJCQkJCWRldl9lcnIoJnVkZXYtPmRldiwgIkNhbm5vdCByZXNldCAiCisJCQkJCQkJIkhDRCBkZXZpY2Ugc3RhdGVcbiIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CiAJCQkvKiBGQUxMIFRIUk9VR0ggKi8KIAkJY2FzZSAtRU5PVENPTk46CiAJCWNhc2UgLUVOT0RFVjoKQEAgLTIzODEsMTQgKzIzODAsMTcgQEAKIH0KIAogLyogY2FsbGVyIGhhcyBsb2NrZWQgdWRldiAqLwotc3RhdGljIGludCByZW1vdGVfd2FrZXVwKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoraW50IHVzYl9yZW1vdGVfd2FrZXVwKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewogCWludAlzdGF0dXMgPSAwOwogCiAJaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpIHsKIAkJZGV2X2RiZygmdWRldi0+ZGV2LCAidXNiICVzcmVzdW1lXG4iLCAid2FrZXVwLSIpOwotCQl1c2JfbWFya19sYXN0X2J1c3kodWRldik7Ci0JCXN0YXR1cyA9IHVzYl9leHRlcm5hbF9yZXN1bWVfZGV2aWNlKHVkZXYsIFBNU0dfUkVNT1RFX1JFU1VNRSk7CisJCXN0YXR1cyA9IHVzYl9hdXRvcmVzdW1lX2RldmljZSh1ZGV2KTsKKwkJaWYgKHN0YXR1cyA9PSAwKSB7CisJCQkvKiBMZXQgdGhlIGRyaXZlcnMgZG8gdGhlaXIgdGhpbmcsIHRoZW4uLi4gKi8KKwkJCXVzYl9hdXRvc3VzcGVuZF9kZXZpY2UodWRldik7CisJCX0KIAl9CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTI0MjUsMTEgKzI0MjcsNiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHJlbW90ZV93YWtldXAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KICNlbmRpZgogCiBzdGF0aWMgaW50IGh1Yl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbXNnKQpAQCAtMjQ5NiwxMSArMjQ5Myw2IEBACiAKICNlbHNlCS8qIENPTkZJR19QTSAqLwogCi1zdGF0aWMgaW5saW5lIGludCByZW1vdGVfd2FrZXVwKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQotewotCXJldHVybiAwOwotfQotCiAjZGVmaW5lIGh1Yl9zdXNwZW5kCQlOVUxMCiAjZGVmaW5lIGh1Yl9yZXN1bWUJCU5VTEwKICNkZWZpbmUgaHViX3Jlc2V0X3Jlc3VtZQlOVUxMCkBAIC0yNjQ1LDE0ICsyNjM3LDcgQEAKIAogCW11dGV4X2xvY2soJnVzYl9hZGRyZXNzMF9tdXRleCk7CiAKLQlpZiAoKGhjZC0+ZHJpdmVyLT5mbGFncyAmIEhDRF9VU0IzKSAmJiB1ZGV2LT5jb25maWcpIHsKLQkJLyogRklYTUUgdGhpcyB3aWxsIG5lZWQgc3BlY2lhbCBoYW5kbGluZyBieSB0aGUgeEhDSSBkcml2ZXIuICovCi0JCWRldl9kYmcoJnVkZXYtPmRldiwKLQkJCQkieEhDSSByZXNldCBvZiBjb25maWd1cmVkIGRldmljZSAiCi0JCQkJIm5vdCBzdXBwb3J0ZWQgeWV0LlxuIik7Ci0JCXJldHZhbCA9IC1FSU5WQUw7Ci0JCWdvdG8gZmFpbDsKLQl9IGVsc2UgaWYgKCF1ZGV2LT5jb25maWcgJiYgb2xkc3BlZWQgPT0gVVNCX1NQRUVEX1NVUEVSKSB7CisJaWYgKCF1ZGV2LT5jb25maWcgJiYgb2xkc3BlZWQgPT0gVVNCX1NQRUVEX1NVUEVSKSB7CiAJCS8qIERvbid0IHJlc2V0IFVTQiAzLjAgZGV2aWNlcyBkdXJpbmcgYW4gaW5pdGlhbCBzZXR1cCAqLwogCQl1c2Jfc2V0X2RldmljZV9zdGF0ZSh1ZGV2LCBVU0JfU1RBVEVfREVGQVVMVCk7CiAJfSBlbHNlIHsKQEAgLTI2NzgsNyArMjY2Myw3IEBACiAJICovCiAJc3dpdGNoICh1ZGV2LT5zcGVlZCkgewogCWNhc2UgVVNCX1NQRUVEX1NVUEVSOgotCWNhc2UgVVNCX1NQRUVEX1ZBUklBQkxFOgkvKiBmaXhlZCBhdCA1MTIgKi8KKwljYXNlIFVTQl9TUEVFRF9XSVJFTEVTUzoJLyogZml4ZWQgYXQgNTEyICovCiAJCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gY3B1X3RvX2xlMTYoNTEyKTsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfU1BFRURfSElHSDoJCS8qIGZpeGVkIGF0IDY0ICovCkBAIC0yNzA2LDcgKzI2OTEsNyBAQAogCWNhc2UgVVNCX1NQRUVEX1NVUEVSOgogCQkJCXNwZWVkID0gInN1cGVyIjsKIAkJCQlicmVhazsKLQljYXNlIFVTQl9TUEVFRF9WQVJJQUJMRToKKwljYXNlIFVTQl9TUEVFRF9XSVJFTEVTUzoKIAkJCQlzcGVlZCA9ICJ2YXJpYWJsZSI7CiAJCQkJdHlwZSA9ICJXaXJlbGVzcyAiOwogCQkJCWJyZWFrOwpAQCAtMzAwNiw3ICsyOTkxLDcgQEAKIAkJCS8qIEZvciBhIHN1c3BlbmRlZCBkZXZpY2UsIHRyZWF0IHRoaXMgYXMgYQogCQkJICogcmVtb3RlIHdha2V1cCBldmVudC4KIAkJCSAqLwotCQkJc3RhdHVzID0gcmVtb3RlX3dha2V1cCh1ZGV2KTsKKwkJCXN0YXR1cyA9IHVzYl9yZW1vdGVfd2FrZXVwKHVkZXYpOwogI2VuZGlmCiAKIAkJfSBlbHNlIHsKQEAgLTMxOTIsNiArMzE3Nyw3IEBACiBsb29wOgogCQl1c2JfZXAwX3JlaW5pdCh1ZGV2KTsKIAkJcmVsZWFzZV9hZGRyZXNzKHVkZXYpOworCQlodWJfZnJlZV9kZXYodWRldik7CiAJCXVzYl9wdXRfZGV2KHVkZXYpOwogCQlpZiAoKHN0YXR1cyA9PSAtRU5PVENPTk4pIHx8IChzdGF0dXMgPT0gLUVOT1RTVVBQKSkKIAkJCWJyZWFrOwpAQCAtMzI1OSw3ICszMjQ1LDcgQEAKIAkJICogZGlzY29ubmVjdGVkIHdoaWxlIHdhaXRpbmcgZm9yIHRoZSBsb2NrIHRvIHN1Y2NlZWQuICovCiAJCXVzYl9sb2NrX2RldmljZShoZGV2KTsKIAkJaWYgKHVubGlrZWx5KGh1Yi0+ZGlzY29ubmVjdGVkKSkKLQkJCWdvdG8gbG9vcDI7CisJCQlnb3RvIGxvb3BfZGlzY29ubmVjdGVkOwogCiAJCS8qIElmIHRoZSBodWIgaGFzIGRpZWQsIGNsZWFuIHVwIGFmdGVyIGl0ICovCiAJCWlmIChoZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpIHsKQEAgLTMzNTIsNyArMzMzOCw3IEBACiAJCQkJCW1zbGVlcCgxMCk7CiAKIAkJCQkJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOwotCQkJCQlyZXQgPSByZW1vdGVfd2FrZXVwKGhkZXYtPgorCQkJCQlyZXQgPSB1c2JfcmVtb3RlX3dha2V1cChoZGV2LT4KIAkJCQkJCQljaGlsZHJlbltpLTFdKTsKIAkJCQkJdXNiX3VubG9ja19kZXZpY2UodWRldik7CiAJCQkJCWlmIChyZXQgPCAwKQpAQCAtMzQxOSw3ICszNDA1LDcgQEAKIAkJICoga2lja19raHViZCgpIGFuZCBhbGxvdyBhdXRvc3VzcGVuZC4KIAkJICovCiAJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShpbnRmKTsKLSBsb29wMjoKKyBsb29wX2Rpc2Nvbm5lY3RlZDoKIAkJdXNiX3VubG9ja19kZXZpY2UoaGRldik7CiAJCWtyZWZfcHV0KCZodWItPmtyZWYsIGh1Yl9yZWxlYXNlKTsKIApAQCAtMzQ0Niw3ICszNDMyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGh1Yl9pZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBodWJfaWRfdGFibGVbXSA9IHsKICAgICB7IC5tYXRjaF9mbGFncyA9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0NMQVNTLAogICAgICAgLmJEZXZpY2VDbGFzcyA9IFVTQl9DTEFTU19IVUJ9LAogICAgIHsgLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfQ0xBU1MsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCmluZGV4IGRmNzM1NzQuLmNkMjIwMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCkBAIC0xMzE2LDcgKzEzMTYsNyBAQAogCiAJYWx0ID0gdXNiX2FsdG51bV90b19hbHRzZXR0aW5nKGlmYWNlLCBhbHRlcm5hdGUpOwogCWlmICghYWx0KSB7Ci0JCWRldl93YXJuKCZkZXYtPmRldiwgInNlbGVjdGluZyBpbnZhbGlkIGFsdHNldHRpbmcgJWQiLAorCQlkZXZfd2FybigmZGV2LT5kZXYsICJzZWxlY3RpbmcgaW52YWxpZCBhbHRzZXR0aW5nICVkXG4iLAogCQkJIGFsdGVybmF0ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTE0NzEsNyArMTQ3MSw3IEBACiAJLyogSWYgbm90LCByZWluc3RhdGUgdGhlIG9sZCBhbHRlcm5hdGUgc2V0dGluZ3MgKi8KIAlpZiAocmV0dmFsIDwgMCkgewogcmVzZXRfb2xkX2FsdHM6Ci0JCWZvciAoOyBpID49IDA7IGktLSkgeworCQlmb3IgKGktLTsgaSA+PSAwOyBpLS0pIHsKIAkJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gY29uZmlnLT5pbnRlcmZhY2VbaV07CiAJCQlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICphbHQ7CiAKQEAgLTE4NDMsNyArMTg0Myw2IEBACiAJCWludGYtPmRldi5kbWFfbWFzayA9IGRldi0+ZGV2LmRtYV9tYXNrOwogCQlJTklUX1dPUksoJmludGYtPnJlc2V0X3dzLCBfX3VzYl9xdWV1ZV9yZXNldF9kZXZpY2UpOwogCQlkZXZpY2VfaW5pdGlhbGl6ZSgmaW50Zi0+ZGV2KTsKLQkJbWFya19xdWllc2NlZChpbnRmKTsKIAkJZGV2X3NldF9uYW1lKCZpbnRmLT5kZXYsICIlZC0lczolZC4lZCIsCiAJCQlkZXYtPmJ1cy0+YnVzbnVtLCBkZXYtPmRldnBhdGgsCiAJCQljb25maWd1cmF0aW9uLCBhbHQtPmRlc2MuYkludGVyZmFjZU51bWJlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jIGIvZHJpdmVycy91c2IvY29yZS9xdWlya3MuYwppbmRleCBhYjkzOTE4Li5mMDczYzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvcXVpcmtzLmMKQEAgLTEwMywxMCArMTAzLDE5IEBACiAJCWRldl9kYmcoJnVkZXYtPmRldiwgIlVTQiBxdWlya3MgZm9yIHRoaXMgZGV2aWNlOiAleFxuIiwKIAkJCQl1ZGV2LT5xdWlya3MpOwogCi0JLyogQnkgZGVmYXVsdCwgZGlzYWJsZSBhdXRvc3VzcGVuZCBmb3IgYWxsIG5vbi1odWJzICovCiAjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECi0JaWYgKHVkZXYtPmRlc2NyaXB0b3IuYkRldmljZUNsYXNzICE9IFVTQl9DTEFTU19IVUIpCi0JCXVkZXYtPmF1dG9zdXNwZW5kX2Rpc2FibGVkID0gMTsKKworCS8qIEJ5IGRlZmF1bHQsIGRpc2FibGUgYXV0b3N1c3BlbmQgZm9yIGFsbCBkZXZpY2VzLiAgVGhlIGh1YiBkcml2ZXIKKwkgKiB3aWxsIGVuYWJsZSBpdCBmb3IgaHVicy4KKwkgKi8KKwl1c2JfZGlzYWJsZV9hdXRvc3VzcGVuZCh1ZGV2KTsKKworCS8qIEF1dG9zdXNwZW5kIGNhbiBhbHNvIGJlIGRpc2FibGVkIGlmIHRoZSBpbml0aWFsIGF1dG9zdXNwZW5kX2RlbGF5CisJICogaXMgbmVnYXRpdmUuCisJICovCisJaWYgKHVkZXYtPmF1dG9zdXNwZW5kX2RlbGF5IDwgMCkKKwkJdXNiX2F1dG9yZXN1bWVfZGV2aWNlKHVkZXYpOworCiAjZW5kaWYKIAogCS8qIEZvciB0aGUgcHJlc2VudCwgYWxsIGRldmljZXMgZGVmYXVsdCB0byBVU0ItUEVSU0lTVCBlbmFibGVkICovCkBAIC0xMjAsNiArMTI5LDcgQEAKIAkgKiBmb3IgYWxsIGRldmljZXMuICBJdCB3aWxsIGFmZmVjdCB0aGluZ3MgbGlrZSBodWIgcmVzZXRzCiAJICogYW5kIEVNRi1yZWxhdGVkIHBvcnQgZGlzYWJsZXMuCiAJICovCi0JdWRldi0+cGVyc2lzdF9lbmFibGVkID0gMTsKKwlpZiAoISh1ZGV2LT5xdWlya3MgJiBVU0JfUVVJUktfUkVTRVRfTU9SUEhTKSkKKwkJdWRldi0+cGVyc2lzdF9lbmFibGVkID0gMTsKICNlbmRpZgkvKiBDT05GSUdfUE0gKi8KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYyBiL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYwppbmRleCA1ZjM5MDhmLi40M2MwMDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCkBAIC0xMTUsNyArMTE1LDcgQEAKIAljYXNlIFVTQl9TUEVFRF9ISUdIOgogCQlzcGVlZCA9ICI0ODAiOwogCQlicmVhazsKLQljYXNlIFVTQl9TUEVFRF9WQVJJQUJMRToKKwljYXNlIFVTQl9TUEVFRF9XSVJFTEVTUzoKIAkJc3BlZWQgPSAiNDgwIjsKIAkJYnJlYWs7CiAJY2FzZSBVU0JfU1BFRURfU1VQRVI6CkBAIC0xOTEsNiArMTkxLDM2IEBACiBzdGF0aWMgREVWSUNFX0FUVFIocXVpcmtzLCBTX0lSVUdPLCBzaG93X3F1aXJrcywgTlVMTCk7CiAKIHN0YXRpYyBzc2l6ZV90CitzaG93X2F2b2lkX3Jlc2V0X3F1aXJrKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKworCXVkZXYgPSB0b191c2JfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsICEhKHVkZXYtPnF1aXJrcyAmIFVTQl9RVUlSS19SRVNFVF9NT1JQSFMpKTsKK30KKworc3RhdGljIHNzaXplX3QKK3NldF9hdm9pZF9yZXNldF9xdWlyayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKKwlpbnQJCQljb25maWc7CisKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJmNvbmZpZykgIT0gMSB8fCBjb25maWcgPCAwIHx8IGNvbmZpZyA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCXVzYl9sb2NrX2RldmljZSh1ZGV2KTsKKwlpZiAoY29uZmlnKQorCQl1ZGV2LT5xdWlya3MgfD0gVVNCX1FVSVJLX1JFU0VUX01PUlBIUzsKKwllbHNlCisJCXVkZXYtPnF1aXJrcyAmPSB+VVNCX1FVSVJLX1JFU0VUX01PUlBIUzsKKwl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihhdm9pZF9yZXNldF9xdWlyaywgU19JUlVHTyB8IFNfSVdVU1IsCisJCXNob3dfYXZvaWRfcmVzZXRfcXVpcmssIHNldF9hdm9pZF9yZXNldF9xdWlyayk7CisKK3N0YXRpYyBzc2l6ZV90CiBzaG93X3VyYm51bShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CkBAIC0yMjYsOSArMjU2LDEwIEBACiAKIAlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJnZhbHVlKSAhPSAxKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl1c2JfcG1fbG9jayh1ZGV2KTsKKworCXVzYl9sb2NrX2RldmljZSh1ZGV2KTsKIAl1ZGV2LT5wZXJzaXN0X2VuYWJsZWQgPSAhIXZhbHVlOwotCXVzYl9wbV91bmxvY2sodWRldik7CisJdXNiX3VubG9ja19kZXZpY2UodWRldik7CiAJcmV0dXJuIGNvdW50OwogfQogCkBAIC0zMTUsMjAgKzM0NiwzNCBAQAogCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKLQlpbnQgdmFsdWU7CisJaW50IHZhbHVlLCBvbGRfZGVsYXk7CisJaW50IHJjOwogCiAJaWYgKHNzY2FuZihidWYsICIlZCIsICZ2YWx1ZSkgIT0gMSB8fCB2YWx1ZSA+PSBJTlRfTUFYL0haIHx8CiAJCQl2YWx1ZSA8PSAtIElOVF9NQVgvSFopCiAJCXJldHVybiAtRUlOVkFMOwogCXZhbHVlICo9IEhaOwogCisJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOworCW9sZF9kZWxheSA9IHVkZXYtPmF1dG9zdXNwZW5kX2RlbGF5OwogCXVkZXYtPmF1dG9zdXNwZW5kX2RlbGF5ID0gdmFsdWU7Ci0JaWYgKHZhbHVlID49IDApCi0JCXVzYl90cnlfYXV0b3N1c3BlbmRfZGV2aWNlKHVkZXYpOwotCWVsc2UgewotCQlpZiAodXNiX2F1dG9yZXN1bWVfZGV2aWNlKHVkZXYpID09IDApCisKKwlpZiAob2xkX2RlbGF5IDwgMCkgewkvKiBBdXRvc3VzcGVuZCB3YXNuJ3QgYWxsb3dlZCAqLworCQlpZiAodmFsdWUgPj0gMCkKIAkJCXVzYl9hdXRvc3VzcGVuZF9kZXZpY2UodWRldik7CisJfSBlbHNlIHsJCS8qIEF1dG9zdXNwZW5kIHdhcyBhbGxvd2VkICovCisJCWlmICh2YWx1ZSA8IDApIHsKKwkJCXJjID0gdXNiX2F1dG9yZXN1bWVfZGV2aWNlKHVkZXYpOworCQkJaWYgKHJjIDwgMCkgeworCQkJCWNvdW50ID0gcmM7CisJCQkJdWRldi0+YXV0b3N1c3BlbmRfZGVsYXkgPSBvbGRfZGVsYXk7CisJCQl9CisJCX0gZWxzZSB7CisJCQl1c2JfdHJ5X2F1dG9zdXNwZW5kX2RldmljZSh1ZGV2KTsKKwkJfQogCX0KKworCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOwogCXJldHVybiBjb3VudDsKIH0KIApAQCAtMzU2LDM0ICs0MDEsMjUgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKIAlpbnQgbGVuID0gY291bnQ7CiAJY2hhciAqY3A7Ci0JaW50IHJjID0gMDsKLQlpbnQgb2xkX2F1dG9zdXNwZW5kX2Rpc2FibGVkOworCWludCByYzsKIAogCWNwID0gbWVtY2hyKGJ1ZiwgJ1xuJywgY291bnQpOwogCWlmIChjcCkKIAkJbGVuID0gY3AgLSBidWY7CiAKIAl1c2JfbG9ja19kZXZpY2UodWRldik7Ci0Jb2xkX2F1dG9zdXNwZW5kX2Rpc2FibGVkID0gdWRldi0+YXV0b3N1c3BlbmRfZGlzYWJsZWQ7CiAKLQkvKiBTZXR0aW5nIHRoZSBmbGFncyB3aXRob3V0IGNhbGxpbmcgdXNiX3BtX2xvY2sgaXMgYSBzdWJqZWN0IHRvCi0JICogcmFjZXMsIGJ1dCB3aG8gY2FyZXMuLi4KLQkgKi8KIAlpZiAobGVuID09IHNpemVvZiBvbl9zdHJpbmcgLSAxICYmCi0JCQlzdHJuY21wKGJ1Ziwgb25fc3RyaW5nLCBsZW4pID09IDApIHsKLQkJdWRldi0+YXV0b3N1c3BlbmRfZGlzYWJsZWQgPSAxOwotCQlyYyA9IHVzYl9leHRlcm5hbF9yZXN1bWVfZGV2aWNlKHVkZXYsIFBNU0dfVVNFUl9SRVNVTUUpOworCQkJc3RybmNtcChidWYsIG9uX3N0cmluZywgbGVuKSA9PSAwKQorCQlyYyA9IHVzYl9kaXNhYmxlX2F1dG9zdXNwZW5kKHVkZXYpOwogCi0JfSBlbHNlIGlmIChsZW4gPT0gc2l6ZW9mIGF1dG9fc3RyaW5nIC0gMSAmJgotCQkJc3RybmNtcChidWYsIGF1dG9fc3RyaW5nLCBsZW4pID09IDApIHsKLQkJdWRldi0+YXV0b3N1c3BlbmRfZGlzYWJsZWQgPSAwOwotCQlyYyA9IHVzYl9leHRlcm5hbF9yZXN1bWVfZGV2aWNlKHVkZXYsIFBNU0dfVVNFUl9SRVNVTUUpOworCWVsc2UgaWYgKGxlbiA9PSBzaXplb2YgYXV0b19zdHJpbmcgLSAxICYmCisJCQlzdHJuY21wKGJ1ZiwgYXV0b19zdHJpbmcsIGxlbikgPT0gMCkKKwkJcmMgPSB1c2JfZW5hYmxlX2F1dG9zdXNwZW5kKHVkZXYpOwogCi0JfSBlbHNlCisJZWxzZQogCQlyYyA9IC1FSU5WQUw7CiAKLQlpZiAocmMpCi0JCXVkZXYtPmF1dG9zdXNwZW5kX2Rpc2FibGVkID0gb2xkX2F1dG9zdXNwZW5kX2Rpc2FibGVkOwogCXVzYl91bmxvY2tfZGV2aWNlKHVkZXYpOwogCXJldHVybiAocmMgPCAwID8gcmMgOiBjb3VudCk7CiB9CkBAIC01NTgsNiArNTk0LDcgQEAKIAkmZGV2X2F0dHJfdmVyc2lvbi5hdHRyLAogCSZkZXZfYXR0cl9tYXhjaGlsZC5hdHRyLAogCSZkZXZfYXR0cl9xdWlya3MuYXR0ciwKKwkmZGV2X2F0dHJfYXZvaWRfcmVzZXRfcXVpcmsuYXR0ciwKIAkmZGV2X2F0dHJfYXV0aG9yaXplZC5hdHRyLAogCSZkZXZfYXR0cl9yZW1vdmUuYXR0ciwKIAlOVUxMLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS91cmIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKaW5kZXggZTdjYWUxMy4uMjcwODA1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS91cmIuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3VyYi5jCkBAIC0zODcsNiArMzg3LDEzIEBACiAJewogCXVuc2lnbmVkIGludAlvcmlnX2ZsYWdzID0gdXJiLT50cmFuc2Zlcl9mbGFnczsKIAl1bnNpZ25lZCBpbnQJYWxsb3dlZDsKKwlzdGF0aWMgaW50IHBpcGV0eXBlc1s0XSA9IHsKKwkJUElQRV9DT05UUk9MLCBQSVBFX0lTT0NIUk9OT1VTLCBQSVBFX0JVTEssIFBJUEVfSU5URVJSVVBUCisJfTsKKworCS8qIENoZWNrIHRoYXQgdGhlIHBpcGUncyB0eXBlIG1hdGNoZXMgdGhlIGVuZHBvaW50J3MgdHlwZSAqLworCWlmICh1c2JfcGlwZXR5cGUodXJiLT5waXBlKSAhPSBwaXBldHlwZXNbeGZlcnR5cGVdKQorCQlyZXR1cm4gLUVQSVBFOwkJLyogVGhlIG1vc3Qgc3VpdGFibGUgZXJyb3IgY29kZSA6LSkgKi8KIAogCS8qIGVuZm9yY2Ugc2ltcGxlL3N0YW5kYXJkIHBvbGljeSAqLwogCWFsbG93ZWQgPSAoVVJCX05PX1RSQU5TRkVSX0RNQV9NQVAgfCBVUkJfTk9fU0VUVVBfRE1BX01BUCB8CkBAIC00MzAsNyArNDM3LDcgQEAKIAljYXNlIFVTQl9FTkRQT0lOVF9YRkVSX0lOVDoKIAkJLyogdG9vIHNtYWxsPyAqLwogCQlzd2l0Y2ggKGRldi0+c3BlZWQpIHsKLQkJY2FzZSBVU0JfU1BFRURfVkFSSUFCTEU6CisJCWNhc2UgVVNCX1NQRUVEX1dJUkVMRVNTOgogCQkJaWYgKHVyYi0+aW50ZXJ2YWwgPCA2KQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJYnJlYWs7CkBAIC00NDYsNyArNDUzLDcgQEAKIAkJCWlmICh1cmItPmludGVydmFsID4gKDEgPDwgMTUpKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQkJbWF4ID0gMSA8PCAxNTsKLQkJY2FzZSBVU0JfU1BFRURfVkFSSUFCTEU6CisJCWNhc2UgVVNCX1NQRUVEX1dJUkVMRVNTOgogCQkJaWYgKHVyYi0+aW50ZXJ2YWwgPiAxNikKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWJyZWFrOwpAQCAtNDczLDcgKzQ4MCw3IEBACiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlpZiAoZGV2LT5zcGVlZCAhPSBVU0JfU1BFRURfVkFSSUFCTEUpIHsKKwkJaWYgKGRldi0+c3BlZWQgIT0gVVNCX1NQRUVEX1dJUkVMRVNTKSB7CiAJCQkvKiBSb3VuZCBkb3duIHRvIGEgcG93ZXIgb2YgMiwgbm8gbW9yZSB0aGFuIG1heCAqLwogCQkJdXJiLT5pbnRlcnZhbCA9IG1pbihtYXgsIDEgPDwgaWxvZzIodXJiLT5pbnRlcnZhbCkpOwogCQl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwppbmRleCAwZGFmZjBkLi4xMjk3ZTliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKQEAgLTQ5LDkgKzQ5LDYgQEAKIAogc3RhdGljIGludCBub3VzYjsJLyogRGlzYWJsZSBVU0Igd2hlbiBidWlsdCBpbnRvIGtlcm5lbCBpbWFnZSAqLwogCi0vKiBXb3JrcXVldWUgZm9yIGF1dG9zdXNwZW5kIGFuZCBmb3IgcmVtb3RlIHdha2V1cCBvZiByb290IGh1YnMgKi8KLXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprc3VzcGVuZF91c2Jfd3E7Ci0KICNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKIHN0YXRpYyBpbnQgdXNiX2F1dG9zdXNwZW5kX2RlbGF5ID0gMjsJCS8qIERlZmF1bHQgZGVsYXkgdmFsdWUsCiAJCQkJCQkgKiBpbiBzZWNvbmRzICovCkBAIC0yMjgsOSArMjI1LDYgQEAKIAloY2QgPSBidXNfdG9faGNkKHVkZXYtPmJ1cyk7CiAKIAl1c2JfZGVzdHJveV9jb25maWd1cmF0aW9uKHVkZXYpOwotCS8qIFJvb3QgaHVicyBhcmVuJ3QgcmVhbCBkZXZpY2VzLCBzbyBkb24ndCBmcmVlIEhDRCByZXNvdXJjZXMgKi8KLQlpZiAoaGNkLT5kcml2ZXItPmZyZWVfZGV2ICYmIHVkZXYtPnBhcmVudCkKLQkJaGNkLT5kcml2ZXItPmZyZWVfZGV2KGhjZCwgdWRldik7CiAJdXNiX3B1dF9oY2QoaGNkKTsKIAlrZnJlZSh1ZGV2LT5wcm9kdWN0KTsKIAlrZnJlZSh1ZGV2LT5tYW51ZmFjdHVyZXIpOwpAQCAtMjY0LDIzICsyNTgsNiBAQAogCiAjaWZkZWYJQ09ORklHX1BNCiAKLXN0YXRpYyBpbnQga3N1c3BlbmRfdXNiX2luaXQodm9pZCkKLXsKLQkvKiBUaGlzIHdvcmtxdWV1ZSBpcyBzdXBwb3NlZCB0byBiZSBib3RoIGZyZWV6YWJsZSBhbmQKLQkgKiBzaW5nbGV0aHJlYWRlZC4gIEl0cyBqb2IgZG9lc24ndCBqdXN0aWZ5IHJ1bm5pbmcgb24gbW9yZQotCSAqIHRoYW4gb25lIENQVS4KLQkgKi8KLQlrc3VzcGVuZF91c2Jfd3EgPSBjcmVhdGVfZnJlZXplYWJsZV93b3JrcXVldWUoImtzdXNwZW5kX3VzYmQiKTsKLQlpZiAoIWtzdXNwZW5kX3VzYl93cSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGtzdXNwZW5kX3VzYl9jbGVhbnVwKHZvaWQpCi17Ci0JZGVzdHJveV93b3JrcXVldWUoa3N1c3BlbmRfdXNiX3dxKTsKLX0KLQogLyogVVNCIGRldmljZSBQb3dlci1NYW5hZ2VtZW50IHRodW5rcy4KICAqIFRoZXJlJ3Mgbm8gbmVlZCB0byBkaXN0aW5ndWlzaCBoZXJlIGJldHdlZW4gcXVpZXNjaW5nIGEgVVNCIGRldmljZQogICogYW5kIHBvd2VyaW5nIGl0IGRvd247IHRoZSBnZW5lcmljX3N1c3BlbmQoKSByb3V0aW5lIHRha2VzIGNhcmUgb2YKQEAgLTI5Niw3ICsyNzMsNyBAQAogc3RhdGljIHZvaWQgdXNiX2Rldl9jb21wbGV0ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CiAJLyogQ3VycmVudGx5IHVzZWQgb25seSBmb3IgcmViaW5kaW5nIGludGVyZmFjZXMgKi8KLQl1c2JfcmVzdW1lKGRldiwgUE1TR19SRVNVTUUpOwkvKiBNZXNzYWdlIGV2ZW50IGlzIG1lYW5pbmdsZXNzICovCisJdXNiX3Jlc3VtZShkZXYsIFBNU0dfT04pOwkvKiBGSVhNRTogY2hhbmdlIHRvIFBNU0dfQ09NUExFVEUgKi8KIH0KIAogc3RhdGljIGludCB1c2JfZGV2X3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMzQyLDkgKzMxOSw3IEBACiAKICNlbHNlCiAKLSNkZWZpbmUga3N1c3BlbmRfdXNiX2luaXQoKQkwCi0jZGVmaW5lIGtzdXNwZW5kX3VzYl9jbGVhbnVwKCkJZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIHVzYl9kZXZpY2VfcG1fb3BzCSgqKHN0cnVjdCBkZXZfcG1fb3BzICopMCkKKyNkZWZpbmUgdXNiX2RldmljZV9wbV9vcHMJKCooc3RydWN0IGRldl9wbV9vcHMgKikgTlVMTCkKIAogI2VuZGlmCS8qIENPTkZJR19QTSAqLwogCkBAIC00NzIsOSArNDQ3LDYgQEAKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5maWxlbGlzdCk7CiAKICNpZmRlZglDT05GSUdfUE0KLQltdXRleF9pbml0KCZkZXYtPnBtX211dGV4KTsKLQlJTklUX0RFTEFZRURfV09SSygmZGV2LT5hdXRvc3VzcGVuZCwgdXNiX2F1dG9zdXNwZW5kX3dvcmspOwotCUlOSVRfV09SSygmZGV2LT5hdXRvcmVzdW1lLCB1c2JfYXV0b3Jlc3VtZV93b3JrKTsKIAlkZXYtPmF1dG9zdXNwZW5kX2RlbGF5ID0gdXNiX2F1dG9zdXNwZW5kX2RlbGF5ICogSFo7CiAJZGV2LT5jb25uZWN0X3RpbWUgPSBqaWZmaWVzOwogCWRldi0+YWN0aXZlX2R1cmF0aW9uID0gLWppZmZpZXM7CkBAIC0xMTE3LDkgKzEwODksNiBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gb3V0OwogCi0JcmV0dmFsID0ga3N1c3BlbmRfdXNiX2luaXQoKTsKLQlpZiAocmV0dmFsKQotCQlnb3RvIG91dDsKIAlyZXR2YWwgPSBidXNfcmVnaXN0ZXIoJnVzYl9idXNfdHlwZSk7CiAJaWYgKHJldHZhbCkKIAkJZ290byBidXNfcmVnaXN0ZXJfZmFpbGVkOwpAQCAtMTE1OSw3ICsxMTI4LDcgQEAKIGJ1c19ub3RpZmllcl9mYWlsZWQ6CiAJYnVzX3VucmVnaXN0ZXIoJnVzYl9idXNfdHlwZSk7CiBidXNfcmVnaXN0ZXJfZmFpbGVkOgotCWtzdXNwZW5kX3VzYl9jbGVhbnVwKCk7CisJdXNiX2RlYnVnZnNfY2xlYW51cCgpOwogb3V0OgogCXJldHVybiByZXR2YWw7CiB9CkBAIC0xMTgxLDcgKzExNTAsNiBAQAogCXVzYl9odWJfY2xlYW51cCgpOwogCWJ1c191bnJlZ2lzdGVyX25vdGlmaWVyKCZ1c2JfYnVzX3R5cGUsICZ1c2JfYnVzX25iKTsKIAlidXNfdW5yZWdpc3RlcigmdXNiX2J1c190eXBlKTsKLQlrc3VzcGVuZF91c2JfY2xlYW51cCgpOwogCXVzYl9kZWJ1Z2ZzX2NsZWFudXAoKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS91c2IuaCBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmgKaW5kZXggNGMzNmM3Zi4uY2Q4ODIyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS91c2IuaAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oCkBAIC01NSwyNCArNTUsOCBAQAogZXh0ZXJuIGludCB1c2Jfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtc2cpOwogZXh0ZXJuIGludCB1c2JfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1zZyk7CiAKLWV4dGVybiB2b2lkIHVzYl9hdXRvc3VzcGVuZF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1leHRlcm4gdm9pZCB1c2JfYXV0b3Jlc3VtZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBleHRlcm4gaW50IHVzYl9wb3J0X3N1c3BlbmQoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1zZyk7CiBleHRlcm4gaW50IHVzYl9wb3J0X3Jlc3VtZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3QgbXNnKTsKLWV4dGVybiBpbnQgdXNiX2V4dGVybmFsX3N1c3BlbmRfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAotCQlwbV9tZXNzYWdlX3QgbXNnKTsKLWV4dGVybiBpbnQgdXNiX2V4dGVybmFsX3Jlc3VtZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCi0JCXBtX21lc3NhZ2VfdCBtc2cpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgdXNiX3BtX2xvY2soc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCi17Ci0JbXV0ZXhfbG9ja19uZXN0ZWQoJnVkZXYtPnBtX211dGV4LCB1ZGV2LT5sZXZlbCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1c2JfcG1fdW5sb2NrKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQotewotCW11dGV4X3VubG9jaygmdWRldi0+cG1fbXV0ZXgpOwotfQogCiAjZWxzZQogCkBAIC04Niw5ICs3MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB1c2JfcG1fbG9jayhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikge30KLXN0YXRpYyBpbmxpbmUgdm9pZCB1c2JfcG1fdW5sb2NrKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KSB7fQotCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19VU0JfU1VTUEVORApAQCAtOTYsNiArNzcsNyBAQAogZXh0ZXJuIHZvaWQgdXNiX2F1dG9zdXNwZW5kX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CiBleHRlcm4gdm9pZCB1c2JfdHJ5X2F1dG9zdXNwZW5kX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CiBleHRlcm4gaW50IHVzYl9hdXRvcmVzdW1lX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CitleHRlcm4gaW50IHVzYl9yZW1vdGVfd2FrZXVwKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOwogCiAjZWxzZQogCkBAIC0xMDYsOSArODgsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgdXNiX3JlbW90ZV93YWtldXAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKICNlbmRpZgogCi1leHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmtzdXNwZW5kX3VzYl93cTsKIGV4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgdXNiX2J1c190eXBlOwogZXh0ZXJuIHN0cnVjdCBkZXZpY2VfdHlwZSB1c2JfZGV2aWNlX3R5cGU7CiBleHRlcm4gc3RydWN0IGRldmljZV90eXBlIHVzYl9pZl9kZXZpY2VfdHlwZTsKQEAgLTEzOCwyMyArMTI0LDYgQEAKIAkJCWZvcl9kZXZpY2VzOwogfQogCi0vKiBJbnRlcmZhY2VzIGFuZCB0aGVpciAicG93ZXIgc3RhdGUiIGFyZSBvd25lZCBieSB1c2Jjb3JlICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2FjdGl2ZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqZikKLXsKLQlmLT5pc19hY3RpdmUgPSAxOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgbWFya19xdWllc2NlZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqZikKLXsKLQlmLT5pc19hY3RpdmUgPSAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpc19hY3RpdmUoY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmYpCi17Ci0JcmV0dXJuIGYtPmlzX2FjdGl2ZTsKLX0KLQogCiAvKiBmb3IgbGFiZWxpbmcgZGlhZ25vc3RpY3MgKi8KIGV4dGVybiBjb25zdCBjaGFyICp1c2Jjb3JlX25hbWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9lYXJseS9laGNpLWRiZ3AuYyBiL2RyaXZlcnMvdXNiL2Vhcmx5L2VoY2ktZGJncC5jCmluZGV4IDI5NThhMTIuLjZlOThhMzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2Vhcmx5L2VoY2ktZGJncC5jCisrKyBiL2RyaXZlcnMvdXNiL2Vhcmx5L2VoY2ktZGJncC5jCkBAIC02Niw4ICs2Niw2IEBACiAKICNkZWZpbmUgVVNCX0RFQlVHX0RFVk5VTSAxMjcKIAotI2RlZmluZSBEQkdQX0RBVEFfVE9HR0xFCTB4ODgwMAotCiAjaWZkZWYgREJHUF9ERUJVRwogI2RlZmluZSBkYmdwX3ByaW50ayBwcmludGsKIHN0YXRpYyB2b2lkIGRiZ3BfZWhjaV9zdGF0dXMoY2hhciAqc3RyKQpAQCAtODgsMTEgKzg2LDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkYmdwX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikgeyB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB1MzIgZGJncF9waWRfdXBkYXRlKHUzMiB4LCB1MzIgdG9rKQotewotCXJldHVybiAoKHggXiBEQkdQX0RBVEFfVE9HR0xFKSAmIDB4ZmZmZjAwKSB8ICh0b2sgJiAweGZmKTsKLX0KLQogc3RhdGljIGlubGluZSB1MzIgZGJncF9sZW5fdXBkYXRlKHUzMiB4LCB1MzIgbGVuKQogewogCXJldHVybiAoeCAmIH4weDBmKSB8IChsZW4gJiAweDBmKTsKQEAgLTEzNiw2ICsxMjksMTkgQEAKIAogI2RlZmluZSBEQkdQX01BWF9QQUNLRVQJCTgKICNkZWZpbmUgREJHUF9USU1FT1VUCQkoMjUwICogMTAwMCkKKyNkZWZpbmUgREJHUF9MT09QUwkJMTAwMAorCitzdGF0aWMgaW5saW5lIHUzMiBkYmdwX3BpZF93cml0ZV91cGRhdGUodTMyIHgsIHUzMiB0b2spCit7CisJc3RhdGljIGludCBkYXRhMCA9IFVTQl9QSURfREFUQTE7CisJZGF0YTAgXj0gVVNCX1BJRF9EQVRBX1RPR0dMRTsKKwlyZXR1cm4gKHggJiAweGZmZmYwMDAwKSB8IChkYXRhMCA8PCA4KSB8ICh0b2sgJiAweGZmKTsKK30KKworc3RhdGljIGlubGluZSB1MzIgZGJncF9waWRfcmVhZF91cGRhdGUodTMyIHgsIHUzMiB0b2spCit7CisJcmV0dXJuICh4ICYgMHhmZmZmMDAwMCkgfCAoVVNCX1BJRF9EQVRBMCA8PCA4KSB8ICh0b2sgJiAweGZmKTsKK30KIAogc3RhdGljIGludCBkYmdwX3dhaXRfdW50aWxfY29tcGxldGUodm9pZCkKIHsKQEAgLTE4MCw3ICsxODYsNyBAQAogewogCXUzMiBwaWRzLCBscGlkOwogCWludCByZXQ7Ci0JaW50IGxvb3AgPSAzOworCWludCBsb29wID0gREJHUF9MT09QUzsKIAogcmV0cnk6CiAJd3JpdGVsKGN0cmwgfCBEQkdQX0dPLCAmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7CkBAIC0xOTcsNiArMjAzLDggQEAKIAkJICovCiAJCWlmIChyZXQgPT0gLURCR1BfVElNRU9VVCAmJiAhZGJncF9ub3Rfc2FmZSkKIAkJCWRiZ3Bfbm90X3NhZmUgPSAxOworCQlpZiAocmV0ID09IC1EQkdQX0VSUl9CQUQgJiYgLS1sb29wID4gMCkKKwkJCWdvdG8gcmV0cnk7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC0yNDUsMTIgKzI1MywyMCBAQAogCQlieXRlc1tpXSA9IChoaSA+PiAoOCooaSAtIDQpKSkgJiAweGZmOwogfQogCi1zdGF0aWMgaW50IGRiZ3Bfb3V0KHUzMiBhZGRyLCBjb25zdCBjaGFyICpieXRlcywgaW50IHNpemUpCitzdGF0aWMgaW50IGRiZ3BfYnVsa193cml0ZSh1bnNpZ25lZCBkZXZudW0sIHVuc2lnbmVkIGVuZHBvaW50LAorCQkJIGNvbnN0IGNoYXIgKmJ5dGVzLCBpbnQgc2l6ZSkKIHsKKwlpbnQgcmV0OworCXUzMiBhZGRyOwogCXUzMiBwaWRzLCBjdHJsOwogCisJaWYgKHNpemUgPiBEQkdQX01BWF9QQUNLRVQpCisJCXJldHVybiAtMTsKKworCWFkZHIgPSBEQkdQX0VQQUREUihkZXZudW0sIGVuZHBvaW50KTsKKwogCXBpZHMgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+cGlkcyk7Ci0JcGlkcyA9IGRiZ3BfcGlkX3VwZGF0ZShwaWRzLCBVU0JfUElEX09VVCk7CisJcGlkcyA9IGRiZ3BfcGlkX3dyaXRlX3VwZGF0ZShwaWRzLCBVU0JfUElEX09VVCk7CiAKIAljdHJsID0gcmVhZGwoJmVoY2lfZGVidWctPmNvbnRyb2wpOwogCWN0cmwgPSBkYmdwX2xlbl91cGRhdGUoY3RybCwgc2l6ZSk7CkBAIC0yNjAsMzQgKzI3Niw3IEBACiAJZGJncF9zZXRfZGF0YShieXRlcywgc2l6ZSk7CiAJd3JpdGVsKGFkZHIsICZlaGNpX2RlYnVnLT5hZGRyZXNzKTsKIAl3cml0ZWwocGlkcywgJmVoY2lfZGVidWctPnBpZHMpOwotCXJldHVybiBkYmdwX3dhaXRfdW50aWxfZG9uZShjdHJsKTsKLX0KLQotc3RhdGljIGludCBkYmdwX2J1bGtfd3JpdGUodW5zaWduZWQgZGV2bnVtLCB1bnNpZ25lZCBlbmRwb2ludCwKLQkJCSBjb25zdCBjaGFyICpieXRlcywgaW50IHNpemUpCi17Ci0JaW50IHJldDsKLQlpbnQgbG9vcHMgPSA1OwotCXUzMiBhZGRyOwotCWlmIChzaXplID4gREJHUF9NQVhfUEFDS0VUKQotCQlyZXR1cm4gLTE7Ci0KLQlhZGRyID0gREJHUF9FUEFERFIoZGV2bnVtLCBlbmRwb2ludCk7Ci10cnlfYWdhaW46Ci0JaWYgKGxvb3BzLS0pIHsKLQkJcmV0ID0gZGJncF9vdXQoYWRkciwgYnl0ZXMsIHNpemUpOwotCQlpZiAocmV0ID09IC1EQkdQX0VSUl9CQUQpIHsKLQkJCWludCB0cnlfbG9vcHMgPSAzOwotCQkJZG8gewotCQkJCS8qIEVtaXQgYSBkdW1teSBwYWNrZXQgdG8gcmUtc3luYyBjb21tdW5pY2F0aW9uCi0JCQkJICogd2l0aCB0aGUgZGVidWcgZGV2aWNlICovCi0JCQkJaWYgKGRiZ3Bfb3V0KGFkZHIsICIxMjM0NTY3OCIsIDgpID49IDApIHsKLQkJCQkJdWRlbGF5KDIpOwotCQkJCQlnb3RvIHRyeV9hZ2FpbjsKLQkJCQl9Ci0JCQl9IHdoaWxlICh0cnlfbG9vcHMtLSk7Ci0JCX0KLQl9CisJcmV0ID0gZGJncF93YWl0X3VudGlsX2RvbmUoY3RybCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtMzA0LDcgKzI5Myw3IEBACiAJYWRkciA9IERCR1BfRVBBRERSKGRldm51bSwgZW5kcG9pbnQpOwogCiAJcGlkcyA9IHJlYWRsKCZlaGNpX2RlYnVnLT5waWRzKTsKLQlwaWRzID0gZGJncF9waWRfdXBkYXRlKHBpZHMsIFVTQl9QSURfSU4pOworCXBpZHMgPSBkYmdwX3BpZF9yZWFkX3VwZGF0ZShwaWRzLCBVU0JfUElEX0lOKTsKIAogCWN0cmwgPSByZWFkbCgmZWhjaV9kZWJ1Zy0+Y29udHJvbCk7CiAJY3RybCA9IGRiZ3BfbGVuX3VwZGF0ZShjdHJsLCBzaXplKTsKQEAgLTM2Miw3ICszNTEsNiBAQAogCXJldHVybiBkYmdwX2J1bGtfcmVhZChkZXZudW0sIDAsIGRhdGEsIHNpemUpOwogfQogCi0KIC8qIEZpbmQgYSBQQ0kgY2FwYWJpbGl0eSAqLwogc3RhdGljIHUzMiBfX2luaXQgZmluZF9jYXAodTMyIG51bSwgdTMyIHNsb3QsIHUzMiBmdW5jLCBpbnQgY2FwKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L0tjb25maWcgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwppbmRleCBlZTQxMTIwLi43NDYwY2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZwpAQCAtODEyLDYgKzgxMiwxNiBAQAogCSAgU2F5ICJ5IiB0byBsaW5rIHRoZSBkcml2ZXIgc3RhdGljYWxseSwgb3IgIm0iIHRvIGJ1aWxkIGEKIAkgIGR5bmFtaWNhbGx5IGxpbmtlZCBtb2R1bGUuCiAKK2NvbmZpZyBVU0JfR19OT0tJQQorCXRyaXN0YXRlICJOb2tpYSBjb21wb3NpdGUgZ2FkZ2V0IgorCWRlcGVuZHMgb24gUEhPTkVUCisJaGVscAorCSAgVGhlIE5va2lhIGNvbXBvc2l0ZSBnYWRnZXQgcHJvdmlkZXMgc3VwcG9ydCBmb3IgYWNtLCBvYmV4CisJICBhbmQgcGhvbmV0IGluIG9ubHkgb25lIGNvbXBvc2l0ZSBnYWRnZXQgZHJpdmVyLgorCisJICBJdCdzIG9ubHkgcmVhbGx5IHVzZWZ1bCBmb3IgTjkwMCBoYXJkd2FyZS4gSWYgeW91J3JlIGJ1aWxkaW5nCisJICBhIGtlcm5lbCBmb3IgTjkwMCwgc2F5IFkgb3IgTSBoZXJlLiBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgVVNCX0dfTVVMVEkKIAl0cmlzdGF0ZSAiTXVsdGlmdW5jdGlvbiBDb21wb3NpdGUgR2FkZ2V0IChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gQkxPQ0sgJiYgTkVUCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKaW5kZXggMmUyYzA0Ny4uNDNiNTFkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQpAQCAtNDMsNiArNDMsNyBAQAogZ19wcmludGVyLW9ianMJCQk6PSBwcmludGVyLm8KIGdfY2RjLW9ianMJCQk6PSBjZGMyLm8KIGdfbXVsdGktb2JqcwkJCTo9IG11bHRpLm8KK2dfbm9raWEtb2JqcwkJCTo9IG5va2lhLm8KIAogb2JqLSQoQ09ORklHX1VTQl9aRVJPKQkJKz0gZ196ZXJvLm8KIG9iai0kKENPTkZJR19VU0JfQVVESU8pCQkrPSBnX2F1ZGlvLm8KQEAgLTU1LDQgKzU2LDUgQEAKIG9iai0kKENPTkZJR19VU0JfTUlESV9HQURHRVQpCSs9IGdfbWlkaS5vCiBvYmotJChDT05GSUdfVVNCX0NEQ19DT01QT1NJVEUpICs9IGdfY2RjLm8KIG9iai0kKENPTkZJR19VU0JfR19NVUxUSSkJKz0gZ19tdWx0aS5vCitvYmotJChDT05GSUdfVVNCX0dfTk9LSUEpCSs9IGdfbm9raWEubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXQ5MV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCmluZGV4IDA0M2UwNGQuLjEyYWM5Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jCkBAIC0xNjU2LDkgKzE2NTYsNyBAQAogCWlmICghcmVzKQogCQlyZXR1cm4gLUVOWElPOwogCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwKLQkJCXJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCi0JCQlkcml2ZXJfbmFtZSkpIHsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcyksIGRyaXZlcl9uYW1lKSkgewogCQlEQkcoInNvbWVvbmUncyB1c2luZyBVREMgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC0xNjk5LDcgKzE2OTcsNyBAQAogCQl1ZGMtPmVwWzNdLm1heHBhY2tldCA9IDY0OwogCX0KIAotCXVkYy0+dWRwX2Jhc2VhZGRyID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwl1ZGMtPnVkcF9iYXNlYWRkciA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAoIXVkYy0+dWRwX2Jhc2VhZGRyKSB7CiAJCXJldHZhbCA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDBhOwpAQCAtMTc4MSw3ICsxNzc5LDcgQEAKIAlpZiAoY3B1X2lzX2F0OTFybTkyMDAoKSkKIAkJZ3Bpb19mcmVlKHVkYy0+Ym9hcmQucHVsbHVwX3Bpbik7CiBmYWlsMDoKLQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVzKSk7CiAJREJHKCIlcyBwcm9iZSBmYWlsZWQsICVkXG4iLCBkcml2ZXJfbmFtZSwgcmV0dmFsKTsKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMTgxMyw3ICsxODExLDcgQEAKIAkJZ3Bpb19mcmVlKHVkYy0+Ym9hcmQucHVsbHVwX3Bpbik7CiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOwotCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAogCWNsa19wdXQodWRjLT5pY2xrKTsKIAljbGtfcHV0KHVkYy0+ZmNsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvYXRtZWxfdXNiYV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jCmluZGV4IDRlOTcwY2YuLmY3OWJkZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5jCkBAIC0zMjAsNyArMzIwLDcgQEAKIHN0YXRpYyBpbnQgdmJ1c19pc19wcmVzZW50KHN0cnVjdCB1c2JhX3VkYyAqdWRjKQogewogCWlmIChncGlvX2lzX3ZhbGlkKHVkYy0+dmJ1c19waW4pKQotCQlyZXR1cm4gZ3Bpb19nZXRfdmFsdWUodWRjLT52YnVzX3Bpbik7CisJCXJldHVybiBncGlvX2dldF92YWx1ZSh1ZGMtPnZidXNfcGluKSBeIHVkYy0+dmJ1c19waW5faW52ZXJ0ZWQ7CiAKIAkvKiBObyBWYnVzIGRldGVjdGlvbjogQXNzdW1lIGFsd2F5cyBwcmVzZW50ICovCiAJcmV0dXJuIDE7CkBAIC0xNzYzLDcgKzE3NjMsNyBAQAogCWlmICghdWRjLT5kcml2ZXIpCiAJCWdvdG8gb3V0OwogCi0JdmJ1cyA9IGdwaW9fZ2V0X3ZhbHVlKHVkYy0+dmJ1c19waW4pOworCXZidXMgPSB2YnVzX2lzX3ByZXNlbnQodWRjKTsKIAlpZiAodmJ1cyAhPSB1ZGMtPnZidXNfcHJldikgewogCQlpZiAodmJ1cykgewogCQkJdG9nZ2xlX2JpYXMoMSk7CkBAIC0xOTE0LDE0ICsxOTE0LDE0IEBACiAJdWRjLT52YnVzX3BpbiA9IC1FTk9ERVY7CiAKIAlyZXQgPSAtRU5PTUVNOwotCXVkYy0+cmVncyA9IGlvcmVtYXAocmVncy0+c3RhcnQsIHJlZ3MtPmVuZCAtIHJlZ3MtPnN0YXJ0ICsgMSk7CisJdWRjLT5yZWdzID0gaW9yZW1hcChyZWdzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZWdzKSk7CiAJaWYgKCF1ZGMtPnJlZ3MpIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAiVW5hYmxlIHRvIG1hcCBJL08gbWVtb3J5LCBhYm9ydGluZy5cbiIpOwogCQlnb3RvIGVycl9tYXBfcmVnczsKIAl9CiAJZGV2X2luZm8oJnBkZXYtPmRldiwgIk1NSU8gcmVnaXN0ZXJzIGF0IDB4JTA4bHggbWFwcGVkIGF0ICVwXG4iLAogCQkgKHVuc2lnbmVkIGxvbmcpcmVncy0+c3RhcnQsIHVkYy0+cmVncyk7Ci0JdWRjLT5maWZvID0gaW9yZW1hcChmaWZvLT5zdGFydCwgZmlmby0+ZW5kIC0gZmlmby0+c3RhcnQgKyAxKTsKKwl1ZGMtPmZpZm8gPSBpb3JlbWFwKGZpZm8tPnN0YXJ0LCByZXNvdXJjZV9zaXplKGZpZm8pKTsKIAlpZiAoIXVkYy0+ZmlmbykgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gbWFwIEZJRk8sIGFib3J0aW5nLlxuIik7CiAJCWdvdG8gZXJyX21hcF9maWZvOwpAQCAtMjAwMCw2ICsyMDAwLDcgQEAKIAlpZiAoZ3Bpb19pc192YWxpZChwZGF0YS0+dmJ1c19waW4pKSB7CiAJCWlmICghZ3Bpb19yZXF1ZXN0KHBkYXRhLT52YnVzX3BpbiwgImF0bWVsX3VzYmFfdWRjIikpIHsKIAkJCXVkYy0+dmJ1c19waW4gPSBwZGF0YS0+dmJ1c19waW47CisJCQl1ZGMtPnZidXNfcGluX2ludmVydGVkID0gcGRhdGEtPnZidXNfcGluX2ludmVydGVkOwogCiAJCQlyZXQgPSByZXF1ZXN0X2lycShncGlvX3RvX2lycSh1ZGMtPnZidXNfcGluKSwKIAkJCQkJdXNiYV92YnVzX2lycSwgMCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdG1lbF91c2JhX3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmgKaW5kZXggZjdiYWVhMy4uODhhMmUwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0bWVsX3VzYmFfdWRjLmgKQEAgLTMyMyw2ICszMjMsNyBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJaW50IGlycTsKIAlpbnQgdmJ1c19waW47CisJaW50IHZidXNfcGluX2ludmVydGVkOwogCXN0cnVjdCBjbGsgKnBjbGs7CiAJc3RydWN0IGNsayAqaGNsazsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2VwYXV0b2NvbmYuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9lcGF1dG9jb25mLmMKaW5kZXggY2QwOTE0ZS4uNjVhNWY5NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2VwYXV0b2NvbmYuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZXBhdXRvY29uZi5jCkBAIC0yNjUsMTYgKzI2NSwyNCBAQAogCQkJCXJldHVybiBlcDsKIAkJfQogCi0JfSBlbHNlIGlmIChnYWRnZXRfaXNfc2ggKGdhZGdldCkgJiYgVVNCX0VORFBPSU5UX1hGRVJfSU5UID09IHR5cGUpIHsKLQkJLyogc2luZ2xlIGJ1ZmZlcmluZyBpcyBlbm91Z2g7IG1heWJlIDggYnl0ZSBmaWZvIGlzIHRvbyAqLwotCQllcCA9IGZpbmRfZXAgKGdhZGdldCwgImVwM2luLWJ1bGsiKTsKKyNpZmRlZiBDT05GSUdfQkxBQ0tGSU4KKwl9IGVsc2UgaWYgKGdhZGdldF9pc19tdXNiaHNmYyhnYWRnZXQpIHx8IGdhZGdldF9pc19tdXNiaGRyYyhnYWRnZXQpKSB7CisJCWlmICgoVVNCX0VORFBPSU5UX1hGRVJfQlVMSyA9PSB0eXBlKSB8fAorCQkgICAgKFVTQl9FTkRQT0lOVF9YRkVSX0lTT0MgPT0gdHlwZSkpIHsKKwkJCWlmIChVU0JfRElSX0lOICYgZGVzYy0+YkVuZHBvaW50QWRkcmVzcykKKwkJCQllcCA9IGZpbmRfZXAgKGdhZGdldCwgImVwNWluIik7CisJCQllbHNlCisJCQkJZXAgPSBmaW5kX2VwIChnYWRnZXQsICJlcDZvdXQiKTsKKwkJfSBlbHNlIGlmIChVU0JfRU5EUE9JTlRfWEZFUl9JTlQgPT0gdHlwZSkgeworCQkJaWYgKFVTQl9ESVJfSU4gJiBkZXNjLT5iRW5kcG9pbnRBZGRyZXNzKQorCQkJCWVwID0gZmluZF9lcChnYWRnZXQsICJlcDFpbiIpOworCQkJZWxzZQorCQkJCWVwID0gZmluZF9lcChnYWRnZXQsICJlcDJvdXQiKTsKKwkJfSBlbHNlCisJCQllcCA9IE5VTEw7CiAJCWlmIChlcCAmJiBlcF9tYXRjaGVzIChnYWRnZXQsIGVwLCBkZXNjKSkKIAkJCXJldHVybiBlcDsKLQotCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX21xMTF4eCAoZ2FkZ2V0KSAmJiBVU0JfRU5EUE9JTlRfWEZFUl9JTlQgPT0gdHlwZSkgewotCQllcCA9IGZpbmRfZXAgKGdhZGdldCwgImVwMS1idWxrIik7Ci0JCWlmIChlcCAmJiBlcF9tYXRjaGVzIChnYWRnZXQsIGVwLCBkZXNjKSkKLQkJCXJldHVybiBlcDsKKyNlbmRpZgogCX0KIAogCS8qIFNlY29uZCwgbG9vayBhdCBlbmRwb2ludHMgdW50aWwgYW4gdW5jbGFpbWVkIG9uZSBsb29rcyB1c2FibGUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggMTQxMzcyYi4uNDAwZjgwMzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jCkBAIC0yNTksNyArMjU5LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2lmZGVmIFVTQl9FVEhfRUVNCisjaWZkZWYgQ09ORklHX1VTQl9FVEhfRUVNCiBzdGF0aWMgaW50IHVzZV9lZW0gPSAxOwogI2Vsc2UKIHN0YXRpYyBpbnQgdXNlX2VlbTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2FjbS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYWNtLmMKaW5kZXggZDEwMzUzZC4uZTQ5YzczMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYWNtLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfYWNtLmMKQEAgLTcwMiwxNCArNzAyLDYgQEAKIC8qIFNvbWUgY29udHJvbGxlcnMgY2FuJ3Qgc3VwcG9ydCBDREMgQUNNIC4uLiAqLwogc3RhdGljIGlubGluZSBib29sIGNhbl9zdXBwb3J0X2NkYyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCiB7Ci0JLyogU0gzIGRvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBsZSBpbnRlcmZhY2VzICovCi0JaWYgKGdhZGdldF9pc19zaChjLT5jZGV2LT5nYWRnZXQpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkvKiBzYTExMDAgZG9lc24ndCBoYXZlIGEgdGhpcmQgaW50ZXJydXB0IGVuZHBvaW50ICovCi0JaWYgKGdhZGdldF9pc19zYTExMDAoYy0+Y2Rldi0+Z2FkZ2V0KSkKLQkJcmV0dXJuIGZhbHNlOwotCiAJLyogZXZlcnl0aGluZyBlbHNlIGlzICpwcm9iYWJseSogZmluZSAuLi4gKi8KIAlyZXR1cm4gdHJ1ZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX2VjbS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZWNtLmMKaW5kZXggZWNmNWJkZC4uMmZmZjUzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZWNtLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZfZWNtLmMKQEAgLTQ5NywxMiArNDk3LDkgQEAKIAkJCXN0cnVjdCBuZXRfZGV2aWNlCSpuZXQ7CiAKIAkJCS8qIEVuYWJsZSB6bHBzIGJ5IGRlZmF1bHQgZm9yIEVDTSBjb25mb3JtYW5jZTsKLQkJCSAqIG92ZXJyaWRlIGZvciBtdXNiX2hkcmMgKGF2b2lkcyB0eGRtYSBvdmhlYWQpCi0JCQkgKiBhbmQgc2ExMTAwIChjYW4ndCkuCisJCQkgKiBvdmVycmlkZSBmb3IgbXVzYl9oZHJjIChhdm9pZHMgdHhkbWEgb3ZoZWFkKS4KIAkJCSAqLwotCQkJZWNtLT5wb3J0LmlzX3pscF9vayA9ICEoCi0JCQkJICAgZ2FkZ2V0X2lzX3NhMTEwMChjZGV2LT5nYWRnZXQpCi0JCQkJfHwgZ2FkZ2V0X2lzX211c2JoZHJjKGNkZXYtPmdhZGdldCkKKwkJCWVjbS0+cG9ydC5pc196bHBfb2sgPSAhKGdhZGdldF9pc19tdXNiaGRyYyhjZGV2LT5nYWRnZXQpCiAJCQkJKTsKIAkJCWVjbS0+cG9ydC5jZGNfZmlsdGVyID0gREVGQVVMVF9GSUxURVI7CiAJCQlEQkcoY2RldiwgImFjdGl2YXRlIGVjbVxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9tYXNzX3N0b3JhZ2UuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCmluZGV4IGEzNzY0MGUuLjVhM2NkZDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX21hc3Nfc3RvcmFnZS5jCkBAIC0zNjgsNyArMzY4LDcgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QJKnRocmVhZF90YXNrOwogCiAJLyogQ2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHRocmVhZCBleGl0cy4gKi8KLQl2b2lkCQkJKCp0aHJlYWRfZXhpdHMpKHN0cnVjdCBmc2dfY29tbW9uICpjb21tb24pOworCWludAkJCSgqdGhyZWFkX2V4aXRzKShzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKTsKIAkvKiBHYWRnZXQncyBwcml2YXRlIGRhdGEuICovCiAJdm9pZAkJCSpwcml2YXRlX2RhdGE7CiAKQEAgLTM5Miw4ICszOTIsMTIgQEAKIAljb25zdCBjaGFyCQkqbHVuX25hbWVfZm9ybWF0OwogCWNvbnN0IGNoYXIJCSp0aHJlYWRfbmFtZTsKIAotCS8qIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB0aHJlYWQgZXhpdHMuICovCi0Jdm9pZAkJCSgqdGhyZWFkX2V4aXRzKShzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKTsKKwkvKiBDYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdGhyZWFkIGV4aXRzLiAgSWYgbm8KKwkgKiBjYWxsYmFjayBpcyBzZXQgb3IgaXQgcmV0dXJucyB2YWx1ZSBsb3dlciB0aGVuIHplcm8gTVNGCisJICogd2lsbCBmb3JjZSBlamVjdCBhbGwgTFVOcyBpdCBvcGVyYXRlcyBvbiAoaW5jbHVkaW5nIHRob3NlCisJICogbWFya2VkIGFzIG5vbi1yZW1vdmFibGUgb3Igd2l0aCBwcmV2ZW50X21lZGl1bV9yZW1vdmFsIGZsYWcKKwkgKiBzZXQpLiAqLworCWludAkJCSgqdGhyZWFkX2V4aXRzKShzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKTsKIAkvKiBHYWRnZXQncyBwcml2YXRlIGRhdGEuICovCiAJdm9pZAkJCSpwcml2YXRlX2RhdGE7CiAKQEAgLTYxNCw3ICs2MTgsMTIgQEAKIAkJCXJldHVybiAtRURPTTsKIAkJVkRCRyhmc2csICJnZXQgbWF4IExVTlxuIik7CiAJCSoodTggKikgcmVxLT5idWYgPSBmc2ctPmNvbW1vbi0+bmx1bnMgLSAxOwotCQlyZXR1cm4gMTsKKworCQkvKiBSZXNwb25kIHdpdGggZGF0YS9zdGF0dXMgKi8KKwkJcmVxLT5sZW5ndGggPSBtaW4oKHUxNikxLCB3X2xlbmd0aCk7CisJCWZzZy0+Y29tbW9uLT5lcDByZXFfbmFtZSA9CisJCQljdHJsLT5iUmVxdWVzdFR5cGUgJiBVU0JfRElSX0lOID8gImVwMC1pbiIgOiAiZXAwLW91dCI7CisJCXJldHVybiBlcDBfcXVldWUoZnNnLT5jb21tb24pOwogCX0KIAogCVZEQkcoZnNnLApAQCAtMTA0MSw3ICsxMDUwLDcgQEAKIAl1bnNpZ25lZCBsb25nCXJjOwogCiAJcmMgPSBpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXMoaW5vZGUtPmlfbWFwcGluZywgMCwgLTEpOwotCVZMREJHKGN1cmx1biwgImludmFsaWRhdGVfaW5vZGVfcGFnZXMgLT4gJWxkXG4iLCByYyk7CisJVkxEQkcoY3VybHVuLCAiaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzIC0+ICVsZFxuIiwgcmMpOwogfQogCiBzdGF0aWMgaW50IGRvX3ZlcmlmeShzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uKQpAQCAtMjUyNCwxNCArMjUzMyw2IEBACiAKIAljYXNlIEZTR19TVEFURV9DT05GSUdfQ0hBTkdFOgogCQlyYyA9IGRvX3NldF9jb25maWcoY29tbW9uLCBuZXdfY29uZmlnKTsKLQkJaWYgKGNvbW1vbi0+ZXAwX3JlcV90YWcgIT0gZXhjZXB0aW9uX3JlcV90YWcpCi0JCQlicmVhazsKLQkJaWYgKHJjICE9IDApIHsJCQkvKiBTVEFMTCBvbiBlcnJvcnMgKi8KLQkJCURCRyhjb21tb24sICJlcDAgc2V0IGhhbHRcbiIpOwotCQkJdXNiX2VwX3NldF9oYWx0KGNvbW1vbi0+ZXAwKTsKLQkJfSBlbHNlIHsJCQkvKiBDb21wbGV0ZSB0aGUgc3RhdHVzIHN0YWdlICovCi0JCQllcDBfcXVldWUoY29tbW9uKTsKLQkJfQogCQlicmVhazsKIAogCWNhc2UgRlNHX1NUQVRFX0VYSVQ6CkBAIC0yNjE1LDggKzI2MTYsMjAgQEAKIAljb21tb24tPnRocmVhZF90YXNrID0gTlVMTDsKIAlzcGluX3VubG9ja19pcnEoJmNvbW1vbi0+bG9jayk7CiAKLQlpZiAoY29tbW9uLT50aHJlYWRfZXhpdHMpCi0JCWNvbW1vbi0+dGhyZWFkX2V4aXRzKGNvbW1vbik7CisJaWYgKCFjb21tb24tPnRocmVhZF9leGl0cyB8fCBjb21tb24tPnRocmVhZF9leGl0cyhjb21tb24pIDwgMCkgeworCQlzdHJ1Y3QgZnNnX2x1biAqY3VybHVuID0gY29tbW9uLT5sdW5zOworCQl1bnNpZ25lZCBpID0gY29tbW9uLT5ubHVuczsKKworCQlkb3duX3dyaXRlKCZjb21tb24tPmZpbGVzZW0pOworCQlmb3IgKDsgaS0tOyArK2N1cmx1bikgeworCQkJaWYgKCFmc2dfbHVuX2lzX29wZW4oY3VybHVuKSkKKwkJCQljb250aW51ZTsKKworCQkJZnNnX2x1bl9jbG9zZShjdXJsdW4pOworCQkJY3VybHVuLT51bml0X2F0dGVudGlvbl9kYXRhID0gU1NfTUVESVVNX05PVF9QUkVTRU5UOworCQl9CisJCXVwX3dyaXRlKCZjb21tb24tPmZpbGVzZW0pOworCX0KIAogCS8qIExldCB0aGUgdW5iaW5kIGFuZCBjbGVhbnVwIHJvdXRpbmVzIGtub3cgdGhlIHRocmVhZCBoYXMgZXhpdGVkICovCiAJY29tcGxldGVfYW5kX2V4aXQoJmNvbW1vbi0+dGhyZWFkX25vdGlmaWVyLCAwKTsKQEAgLTI3NjMsMTAgKzI3NzYsNyBAQAogCWlmIChjZmctPnJlbGVhc2UgIT0gMHhmZmZmKSB7CiAJCWkgPSBjZmctPnJlbGVhc2U7CiAJfSBlbHNlIHsKLQkJLyogVGhlIHNhMTEwMCBjb250cm9sbGVyIGlzIG5vdCBzdXBwb3J0ZWQgKi8KLQkJaSA9IGdhZGdldF9pc19zYTExMDAoZ2FkZ2V0KQotCQkJPyAtMQotCQkJOiB1c2JfZ2FkZ2V0X2NvbnRyb2xsZXJfbnVtYmVyKGdhZGdldCk7CisJCWkgPSB1c2JfZ2FkZ2V0X2NvbnRyb2xsZXJfbnVtYmVyKGdhZGdldCk7CiAJCWlmIChpID49IDApIHsKIAkJCWkgPSAweDAzMDAgKyBpOwogCQl9IGVsc2UgewpAQCAtMjc5MSw4ICsyODAxLDcgQEAKIAkgKiBkaXNhYmxlIHN0YWxscy4KIAkgKi8KIAljb21tb24tPmNhbl9zdGFsbCA9IGNmZy0+Y2FuX3N0YWxsICYmCi0JCSEoZ2FkZ2V0X2lzX3NoKGNvbW1vbi0+Z2FkZ2V0KSB8fAotCQkgIGdhZGdldF9pc19hdDkxKGNvbW1vbi0+Z2FkZ2V0KSk7CisJCSEoZ2FkZ2V0X2lzX2F0OTEoY29tbW9uLT5nYWRnZXQpKTsKIAogCiAJc3Bpbl9sb2NrX2luaXQoJmNvbW1vbi0+bG9jayk7CkBAIC0yODUyLDcgKzI4NjEsNiBAQAogCS8qIENhbGwgZnNnX2NvbW1vbl9yZWxlYXNlKCkgZGlyZWN0bHksIHJlZiBtaWdodCBiZSBub3QKIAkgKiBpbml0aWFsaXNlZCAqLwogCWZzZ19jb21tb25fcmVsZWFzZSgmY29tbW9uLT5yZWYpOwotCWNvbXBsZXRlKCZjb21tb24tPnRocmVhZF9ub3RpZmllcik7CiAJcmV0dXJuIEVSUl9QVFIocmMpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9ybmRpcy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2Zfcm5kaXMuYwppbmRleCA5NWRhZTRjLi5hMzBlNjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZl9ybmRpcy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mX3JuZGlzLmMKQEAgLTc2OSwxMCArNzY5LDYgQEAKIC8qIFNvbWUgY29udHJvbGxlcnMgY2FuJ3Qgc3VwcG9ydCBSTkRJUyAuLi4gKi8KIHN0YXRpYyBpbmxpbmUgYm9vbCBjYW5fc3VwcG9ydF9ybmRpcyhzdHJ1Y3QgdXNiX2NvbmZpZ3VyYXRpb24gKmMpCiB7Ci0JLyogb25seSB0d28gZW5kcG9pbnRzIG9uIHNhMTEwMCAqLwotCWlmIChnYWRnZXRfaXNfc2ExMTAwKGMtPmNkZXYtPmdhZGdldCkpCi0JCXJldHVybiBmYWxzZTsKLQogCS8qIGV2ZXJ5dGhpbmcgZWxzZSBpcyAqcHJlc3VtYWJseSogZmluZSAqLwogCXJldHVybiB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCmluZGV4IDI5ZGZiMDIuLmI0OWQ4NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKQEAgLTE0NDgsNyArMTQ0OCw3IEBACiAJdW5zaWduZWQgbG9uZwlyYzsKIAogCXJjID0gaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKGlub2RlLT5pX21hcHBpbmcsIDAsIC0xKTsKLQlWTERCRyhjdXJsdW4sICJpbnZhbGlkYXRlX2lub2RlX3BhZ2VzIC0+ICVsZFxuIiwgcmMpOworCVZMREJHKGN1cmx1biwgImludmFsaWRhdGVfbWFwcGluZ19wYWdlcyAtPiAlbGRcbiIsIHJjKTsKIH0KIAogc3RhdGljIGludCBkb192ZXJpZnkoc3RydWN0IGZzZ19kZXYgKmZzZykKQEAgLTMyMDgsMTUgKzMyMDgsMTEgQEAKIAkgKiBoYWx0IGJ1bGsgZW5kcG9pbnRzIGNvcnJlY3RseS4gIElmIG9uZSBvZiB0aGVtIGlzIHByZXNlbnQsCiAJICogZGlzYWJsZSBzdGFsbHMuCiAJICovCi0JaWYgKGdhZGdldF9pc19zaChmc2ctPmdhZGdldCkgfHwgZ2FkZ2V0X2lzX2F0OTEoZnNnLT5nYWRnZXQpKQorCWlmIChnYWRnZXRfaXNfYXQ5MShmc2ctPmdhZGdldCkpCiAJCW1vZF9kYXRhLmNhbl9zdGFsbCA9IDA7CiAKIAlpZiAobW9kX2RhdGEucmVsZWFzZSA9PSAweGZmZmYpIHsJLy8gUGFyYW1ldGVyIHdhc24ndCBzZXQKLQkJLyogVGhlIHNhMTEwMCBjb250cm9sbGVyIGlzIG5vdCBzdXBwb3J0ZWQgKi8KLQkJaWYgKGdhZGdldF9pc19zYTExMDAoZnNnLT5nYWRnZXQpKQotCQkJZ2NudW0gPSAtMTsKLQkJZWxzZQotCQkJZ2NudW0gPSB1c2JfZ2FkZ2V0X2NvbnRyb2xsZXJfbnVtYmVyKGZzZy0+Z2FkZ2V0KTsKKwkJZ2NudW0gPSB1c2JfZ2FkZ2V0X2NvbnRyb2xsZXJfbnVtYmVyKGZzZy0+Z2FkZ2V0KTsKIAkJaWYgKGdjbnVtID49IDApCiAJCQltb2RfZGF0YS5yZWxlYXNlID0gMHgwMzAwICsgZ2NudW07CiAJCWVsc2UgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9teDNfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX214M191ZGMuYwppbmRleCA0YmMyYmYzLi4yMGE4MDJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX214M191ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX214M191ZGMuYwpAQCAtMTcsNiArMTcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzbF9kZXZpY2VzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAKKyNpbmNsdWRlIDxtYWNoL2hhcmR3YXJlLmg+CisKIHN0YXRpYyBzdHJ1Y3QgY2xrICpteGNfYWhiX2NsazsKIHN0YXRpYyBzdHJ1Y3QgY2xrICpteGNfdXNiX2NsazsKIApAQCAtMjgsMTQgKzMwLDE2IEBACiAKIAlwZGF0YSA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOwogCi0JbXhjX2FoYl9jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ1c2JfYWhiIik7Ci0JaWYgKElTX0VSUihteGNfYWhiX2NsaykpCi0JCXJldHVybiBQVFJfRVJSKG14Y19haGJfY2xrKTsKKwlpZiAoIWNwdV9pc19teDM1KCkpIHsKKwkJbXhjX2FoYl9jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ1c2JfYWhiIik7CisJCWlmIChJU19FUlIobXhjX2FoYl9jbGspKQorCQkJcmV0dXJuIFBUUl9FUlIobXhjX2FoYl9jbGspOwogCi0JcmV0ID0gY2xrX2VuYWJsZShteGNfYWhiX2Nsayk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2xrX2VuYWJsZShcInVzYl9haGJcIikgZmFpbGVkXG4iKTsKLQkJZ290byBlZW5haGI7CisJCXJldCA9IGNsa19lbmFibGUobXhjX2FoYl9jbGspOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2xrX2VuYWJsZShcInVzYl9haGJcIikgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZWVuYWhiOworCQl9CiAJfQogCiAJLyogbWFrZSBzdXJlIFVTQl9DTEsgaXMgcnVubmluZyBhdCA2MCBNSHogKy8tIDEwMDAgSHogKi8KQEAgLTUwLDYgKzU0LDcgQEAKIAlpZiAocGRhdGEtPnBoeV9tb2RlICE9IEZTTF9VU0IyX1BIWV9VTFBJICYmCiAJICAgIChmcmVxIDwgNTk5OTkwMDAgfHwgZnJlcSA+IDYwMDAxMDAwKSkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJVU0JfQ0xLPSVsdSwgc2hvdWxkIGJlIDYwTUh6XG4iLCBmcmVxKTsKKwkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBlY2xrcmF0ZTsKIAl9CiAKQEAgLTY2LDkgKzcxLDExIEBACiAJY2xrX3B1dChteGNfdXNiX2Nsayk7CiAJbXhjX3VzYl9jbGsgPSBOVUxMOwogZWd1c2I6Ci0JY2xrX2Rpc2FibGUobXhjX2FoYl9jbGspOworCWlmICghY3B1X2lzX214MzUoKSkKKwkJY2xrX2Rpc2FibGUobXhjX2FoYl9jbGspOwogZWVuYWhiOgotCWNsa19wdXQobXhjX2FoYl9jbGspOworCWlmICghY3B1X2lzX214MzUoKSkKKwkJY2xrX3B1dChteGNfYWhiX2Nsayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtOTAsNiArOTcsOCBAQAogCQljbGtfZGlzYWJsZShteGNfdXNiX2Nsayk7CiAJCWNsa19wdXQobXhjX3VzYl9jbGspOwogCX0KLQljbGtfZGlzYWJsZShteGNfYWhiX2Nsayk7Ci0JY2xrX3B1dChteGNfYWhiX2Nsayk7CisJaWYgKCFjcHVfaXNfbXgzNSgpKSB7CisJCWNsa19kaXNhYmxlKG14Y19haGJfY2xrKTsKKwkJY2xrX3B1dChteGNfYWhiX2Nsayk7CisJfQogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9mc2xfcWVfdWRjLmMKaW5kZXggNzg4MWYxMi4uMzUzN2Q1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZzbF9xZV91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZnNsX3FlX3VkYy5jCkBAIC0yNzQ5LDcgKzI3NDksNyBAQAogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19kZXZpbml0ZGF0YSBxZV91ZGNfbWF0Y2hbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHFlX3VkY19tYXRjaFtdIF9fZGV2aW5pdGNvbnN0ID0gewogCXsKIAkJLmNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMjMtcWUtdXNiIiwKIAkJLmRhdGEgPSAodm9pZCAqKVBPUlRfUUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ2FkZ2V0X2NoaXBzLmgKaW5kZXggZjJkMjcwYi4uMWVkYmMxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dhZGdldF9jaGlwcy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nYWRnZXRfY2hpcHMuaApAQCAtNDUsNDYgKzQ1LDE4IEBACiAjZGVmaW5lCWdhZGdldF9pc19nb2t1KGcpCTAKICNlbmRpZgogCi0vKiBTSDMgVURDIC0tIG5vdCB5ZXQgcG9ydGVkIDIuNCAtLT4gMi42ICovCi0jaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfU1VQRVJICi0jZGVmaW5lCWdhZGdldF9pc19zaChnKQkJIXN0cmNtcCgic2hfdWRjIiwgKGcpLT5uYW1lKQotI2Vsc2UKLSNkZWZpbmUJZ2FkZ2V0X2lzX3NoKGcpCQkwCi0jZW5kaWYKLQotLyogbm90IHlldCBzdGFibGUgb24gMi42ICh3b3VsZCBoZWxwICJvcmlnaW5hbCBaYXVydXMiKSAqLwotI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX1NBMTEwMAotI2RlZmluZQlnYWRnZXRfaXNfc2ExMTAwKGcpCSFzdHJjbXAoInNhMTEwMF91ZGMiLCAoZyktPm5hbWUpCi0jZWxzZQotI2RlZmluZQlnYWRnZXRfaXNfc2ExMTAwKGcpCTAKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTEg3QTQwWAogI2RlZmluZQlnYWRnZXRfaXNfbGg3YTQweChnKQkhc3RyY21wKCJsaDdhNDB4X3VkYyIsIChnKS0+bmFtZSkKICNlbHNlCiAjZGVmaW5lCWdhZGdldF9pc19saDdhNDB4KGcpCTAKICNlbmRpZgogCi0vKiBoYW5kaGVsZHMub3JnIHRyZWUgKD8pICovCi0jaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTVExMVhYCi0jZGVmaW5lCWdhZGdldF9pc19tcTExeHgoZykJIXN0cmNtcCgibXExMXh4X3VkYyIsIChnKS0+bmFtZSkKLSNlbHNlCi0jZGVmaW5lCWdhZGdldF9pc19tcTExeHgoZykJMAotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9PTUFQCiAjZGVmaW5lCWdhZGdldF9pc19vbWFwKGcpCSFzdHJjbXAoIm9tYXBfdWRjIiwgKGcpLT5uYW1lKQogI2Vsc2UKICNkZWZpbmUJZ2FkZ2V0X2lzX29tYXAoZykJMAogI2VuZGlmCiAKLS8qIG5vdCB5ZXQgcG9ydGVkIDIuNCAtLT4gMi42ICovCi0jaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTjk2MDQKLSNkZWZpbmUJZ2FkZ2V0X2lzX245NjA0KGcpCSFzdHJjbXAoIm45NjA0X3VkYyIsIChnKS0+bmFtZSkKLSNlbHNlCi0jZGVmaW5lCWdhZGdldF9pc19uOTYwNChnKQkwCi0jZW5kaWYKLQogLyogdmFyaW91cyB1bnN0YWJsZSB2ZXJzaW9ucyBhdmFpbGFibGUgKi8KICNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9QWEEyN1gKICNkZWZpbmUJZ2FkZ2V0X2lzX3B4YTI3eChnKQkhc3RyY21wKCJweGEyN3hfdWRjIiwgKGcpLT5uYW1lKQpAQCAtMTIyLDE0ICs5NCw2IEBACiAjZGVmaW5lIGdhZGdldF9pc19mc2xfdXNiMihnKQkwCiAjZW5kaWYKIAotLyogTWVudG9yIGhpZ2ggc3BlZWQgZnVuY3Rpb24gY29udHJvbGxlciAqLwotLyogZnJvbSBNb250YXZpc3RhIGtlcm5lbCAoPykgKi8KLSNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCSFNGQwotI2RlZmluZSBnYWRnZXRfaXNfbXVzYmhzZmMoZykJIXN0cmNtcCgibXVzYmhzZmNfdWRjIiwgKGcpLT5uYW1lKQotI2Vsc2UKLSNkZWZpbmUgZ2FkZ2V0X2lzX211c2Joc2ZjKGcpCTAKLSNlbmRpZgotCiAvKiBNZW50b3IgaGlnaCBzcGVlZCAiZHVhbCByb2xlIiBjb250cm9sbGVyLCBpbiBwZXJpcGhlcmFsIHJvbGUgKi8KICNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMKICNkZWZpbmUgZ2FkZ2V0X2lzX211c2JoZHJjKGcpCSFzdHJjbXAoIm11c2JfaGRyYyIsIChnKS0+bmFtZSkKQEAgLTE0MywxMyArMTA3LDYgQEAKICNkZWZpbmUgZ2FkZ2V0X2lzX2xhbmd3ZWxsKGcpCTAKICNlbmRpZgogCi0vKiBmcm9tIE1vbnRhdmlzdGEga2VybmVsICg/KSAqLwotI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01QQzgyNzIKLSNkZWZpbmUgZ2FkZ2V0X2lzX21wYzgyNzIoZykJIXN0cmNtcCgibXBjODI3Ml91ZGMiLCAoZyktPm5hbWUpCi0jZWxzZQotI2RlZmluZSBnYWRnZXRfaXNfbXBjODI3MihnKQkwCi0jZW5kaWYKLQogI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX002NjU5MgogI2RlZmluZQlnYWRnZXRfaXNfbTY2NTkyKGcpCSFzdHJjbXAoIm02NjU5Ml91ZGMiLCAoZyktPm5hbWUpCiAjZWxzZQpAQCAtMjAzLDIwICsxNjAsMTIgQEAKIAkJcmV0dXJuIDB4MDI7CiAJZWxzZSBpZiAoZ2FkZ2V0X2lzX3B4YShnYWRnZXQpKQogCQlyZXR1cm4gMHgwMzsKLQllbHNlIGlmIChnYWRnZXRfaXNfc2goZ2FkZ2V0KSkKLQkJcmV0dXJuIDB4MDQ7Ci0JZWxzZSBpZiAoZ2FkZ2V0X2lzX3NhMTEwMChnYWRnZXQpKQotCQlyZXR1cm4gMHgwNTsKIAllbHNlIGlmIChnYWRnZXRfaXNfZ29rdShnYWRnZXQpKQogCQlyZXR1cm4gMHgwNjsKLQllbHNlIGlmIChnYWRnZXRfaXNfbXExMXh4KGdhZGdldCkpCi0JCXJldHVybiAweDA3OwogCWVsc2UgaWYgKGdhZGdldF9pc19vbWFwKGdhZGdldCkpCiAJCXJldHVybiAweDA4OwogCWVsc2UgaWYgKGdhZGdldF9pc19saDdhNDB4KGdhZGdldCkpCiAJCXJldHVybiAweDA5OwotCWVsc2UgaWYgKGdhZGdldF9pc19uOTYwNChnYWRnZXQpKQotCQlyZXR1cm4gMHgxMDsKIAllbHNlIGlmIChnYWRnZXRfaXNfcHhhMjd4KGdhZGdldCkpCiAJCXJldHVybiAweDExOwogCWVsc2UgaWYgKGdhZGdldF9pc19zM2MyNDEwKGdhZGdldCkpCkBAIC0yMjUsMTIgKzE3NCw4IEBACiAJCXJldHVybiAweDEzOwogCWVsc2UgaWYgKGdhZGdldF9pc19pbXgoZ2FkZ2V0KSkKIAkJcmV0dXJuIDB4MTQ7Ci0JZWxzZSBpZiAoZ2FkZ2V0X2lzX211c2Joc2ZjKGdhZGdldCkpCi0JCXJldHVybiAweDE1OwogCWVsc2UgaWYgKGdhZGdldF9pc19tdXNiaGRyYyhnYWRnZXQpKQogCQlyZXR1cm4gMHgxNjsKLQllbHNlIGlmIChnYWRnZXRfaXNfbXBjODI3MihnYWRnZXQpKQotCQlyZXR1cm4gMHgxNzsKIAllbHNlIGlmIChnYWRnZXRfaXNfYXRtZWxfdXNiYShnYWRnZXQpKQogCQlyZXR1cm4gMHgxODsKIAllbHNlIGlmIChnYWRnZXRfaXNfZnNsX3VzYjIoZ2FkZ2V0KSkKQEAgLTI2NSwxMCArMjEwLDYgQEAKIAlpZiAoZ2FkZ2V0X2lzX3B4YTI3eChnYWRnZXQpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQkvKiBTSDMgaGFyZHdhcmUganVzdCBkb2Vzbid0IGRvIGFsdHNldHRpbmdzICovCi0JaWYgKGdhZGdldF9pc19zaChnYWRnZXQpKQotCQlyZXR1cm4gZmFsc2U7Ci0KIAkvKiBFdmVyeXRoaW5nIGVsc2UgaXMgKnByZXN1bWFibHkqIGZpbmUgLi4uICovCiAJcmV0dXJuIHRydWU7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCmluZGV4IDVmNmEyZTAuLjA0ZjYyMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9nbWlkaS5jCkBAIC02MTgsMTEgKzYxOCw2IEBACiAJfQogI2VuZGlmCiAKLQlpZiAoZ2FkZ2V0X2lzX3NhMTEwMChnYWRnZXQpICYmIGRldi0+Y29uZmlnKSB7Ci0JCS8qIHR4IGZpZm8gaXMgZnVsbCwgYnV0IHdlIGNhbid0IGNsZWFyIGl0Li4uKi8KLQkJRVJST1IoZGV2LCAiY2FuJ3QgY2hhbmdlIGNvbmZpZ3VyYXRpb25zXG4iKTsKLQkJcmV0dXJuIC1FU1BJUEU7Ci0JfQogCWdtaWRpX3Jlc2V0X2NvbmZpZyhkZXYpOwogCiAJc3dpdGNoIChudW1iZXIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9nb2t1X3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMKaW5kZXggMTEyYmI0MC4uZThlZGM2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dva3VfdWRjLmMKQEAgLTE4NTksNyArMTg1OSw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfaWRzIFtdID0geyB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX2lkc1tdID0geyB7CiAJLmNsYXNzID0JKChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4ZmUpLAogCS5jbGFzc19tYXNrID0JfjAsCiAJLnZlbmRvciA9CTB4MTAyZiwJCS8qIFRvc2hpYmEgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKaW5kZXggYmYwZjY1Mi4uZGU4YTgzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKQEAgLTE5NCw3ICsxOTQsNyBAQAogfTsKIAogc3RydWN0IGVwX2RhdGEgewotCXN0cnVjdCBzZW1hcGhvcmUJCWxvY2s7CisJc3RydWN0IG11dGV4CQkJbG9jazsKIAllbnVtIGVwX3N0YXRlCQkJc3RhdGU7CiAJYXRvbWljX3QJCQljb3VudDsKIAlzdHJ1Y3QgZGV2X2RhdGEJCQkqZGV2OwpAQCAtMjk4LDEwICsyOTgsMTAgQEAKIAlpbnQJdmFsOwogCiAJaWYgKGZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7Ci0JCWlmIChkb3duX3RyeWxvY2sgKCZlcGRhdGEtPmxvY2spICE9IDApCisJCWlmICghbXV0ZXhfdHJ5bG9jaygmZXBkYXRhLT5sb2NrKSkKIAkJCWdvdG8gbm9uYmxvY2s7CiAJCWlmIChlcGRhdGEtPnN0YXRlICE9IFNUQVRFX0VQX0VOQUJMRUQpIHsKLQkJCXVwICgmZXBkYXRhLT5sb2NrKTsKKwkJCW11dGV4X3VubG9jaygmZXBkYXRhLT5sb2NrKTsKIG5vbmJsb2NrOgogCQkJdmFsID0gLUVBR0FJTjsKIAkJfSBlbHNlCkBAIC0zMDksNyArMzA5LDggQEAKIAkJcmV0dXJuIHZhbDsKIAl9CiAKLQlpZiAoKHZhbCA9IGRvd25faW50ZXJydXB0aWJsZSAoJmVwZGF0YS0+bG9jaykpIDwgMCkKKwl2YWwgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmVwZGF0YS0+bG9jayk7CisJaWYgKHZhbCA8IDApCiAJCXJldHVybiB2YWw7CiAKIAlzd2l0Y2ggKGVwZGF0YS0+c3RhdGUpIHsKQEAgLTMyMyw3ICszMjQsNyBAQAogCQkvLyBGQUxMVEhST1VHSAogCWNhc2UgU1RBVEVfRVBfVU5CT1VORDoJCQkvKiBjbGVhbiBkaXNjb25uZWN0ICovCiAJCXZhbCA9IC1FTk9ERVY7Ci0JCXVwICgmZXBkYXRhLT5sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZlcGRhdGEtPmxvY2spOwogCX0KIAlyZXR1cm4gdmFsOwogfQpAQCAtMzkzLDcgKzM5NCw3IEBACiAJCWlmIChsaWtlbHkgKGRhdGEtPmVwICE9IE5VTEwpKQogCQkJdXNiX2VwX3NldF9oYWx0IChkYXRhLT5lcCk7CiAJCXNwaW5fdW5sb2NrX2lycSAoJmRhdGEtPmRldi0+bG9jayk7Ci0JCXVwICgmZGF0YS0+bG9jayk7CisJCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJCXJldHVybiAtRUJBRE1TRzsKIAl9CiAKQEAgLTQxMSw3ICs0MTIsNyBAQAogCQl2YWx1ZSA9IC1FRkFVTFQ7CiAKIGZyZWUxOgotCXVwICgmZGF0YS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAlrZnJlZSAoa2J1Zik7CiAJcmV0dXJuIHZhbHVlOwogfQpAQCAtNDM2LDcgKzQzNyw3IEBACiAJCWlmIChsaWtlbHkgKGRhdGEtPmVwICE9IE5VTEwpKQogCQkJdXNiX2VwX3NldF9oYWx0IChkYXRhLT5lcCk7CiAJCXNwaW5fdW5sb2NrX2lycSAoJmRhdGEtPmRldi0+bG9jayk7Ci0JCXVwICgmZGF0YS0+bG9jayk7CisJCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJCXJldHVybiAtRUJBRE1TRzsKIAl9CiAKQEAgLTQ1NSw3ICs0NTYsNyBAQAogCVZERUJVRyAoZGF0YS0+ZGV2LCAiJXMgd3JpdGUgJXp1IElOLCBzdGF0dXMgJWRcbiIsCiAJCWRhdGEtPm5hbWUsIGxlbiwgKGludCkgdmFsdWUpOwogZnJlZTE6Ci0JdXAgKCZkYXRhLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwogCWtmcmVlIChrYnVmKTsKIAlyZXR1cm4gdmFsdWU7CiB9CkBAIC00NjYsNyArNDY3LDggQEAKIAlzdHJ1Y3QgZXBfZGF0YQkJKmRhdGEgPSBmZC0+cHJpdmF0ZV9kYXRhOwogCWludCB2YWx1ZTsKIAotCWlmICgodmFsdWUgPSBkb3duX2ludGVycnVwdGlibGUoJmRhdGEtPmxvY2spKSA8IDApCisJdmFsdWUgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRhdGEtPmxvY2spOworCWlmICh2YWx1ZSA8IDApCiAJCXJldHVybiB2YWx1ZTsKIAogCS8qIGNsZWFuIHVwIGlmIHRoaXMgY2FuIGJlIHJlb3BlbmVkICovCkBAIC00NzYsNyArNDc4LDcgQEAKIAkJZGF0YS0+aHNfZGVzYy5iRGVzY3JpcHRvclR5cGUgPSAwOwogCQl1c2JfZXBfZGlzYWJsZShkYXRhLT5lcCk7CiAJfQotCXVwICgmZGF0YS0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT5sb2NrKTsKIAlwdXRfZXAgKGRhdGEpOwogCXJldHVybiAwOwogfQpAQCAtNTA3LDcgKzUwOSw3IEBACiAJfSBlbHNlCiAJCXN0YXR1cyA9IC1FTk9ERVY7CiAJc3Bpbl91bmxvY2tfaXJxICgmZGF0YS0+ZGV2LT5sb2NrKTsKLQl1cCAoJmRhdGEtPmxvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtNjczLDcgKzY3NSw3IEBACiAJCXZhbHVlID0gLUVOT0RFVjsKIAlzcGluX3VubG9ja19pcnEoJmVwZGF0YS0+ZGV2LT5sb2NrKTsKIAotCXVwKCZlcGRhdGEtPmxvY2spOworCW11dGV4X3VubG9jaygmZXBkYXRhLT5sb2NrKTsKIAogCWlmICh1bmxpa2VseSh2YWx1ZSkpIHsKIAkJa2ZyZWUocHJpdik7CkBAIC03NjUsNyArNzY3LDggQEAKIAl1MzIJCQl0YWc7CiAJaW50CQkJdmFsdWUsIGxlbmd0aCA9IGxlbjsKIAotCWlmICgodmFsdWUgPSBkb3duX2ludGVycnVwdGlibGUgKCZkYXRhLT5sb2NrKSkgPCAwKQorCXZhbHVlID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkYXRhLT5sb2NrKTsKKwlpZiAodmFsdWUgPCAwKQogCQlyZXR1cm4gdmFsdWU7CiAKIAlpZiAoZGF0YS0+c3RhdGUgIT0gU1RBVEVfRVBfUkVBRFkpIHsKQEAgLTg1NCw3ICs4NTcsNyBAQAogCQlkYXRhLT5kZXNjLmJEZXNjcmlwdG9yVHlwZSA9IDA7CiAJCWRhdGEtPmhzX2Rlc2MuYkRlc2NyaXB0b3JUeXBlID0gMDsKIAl9Ci0JdXAgKCZkYXRhLT5sb2NrKTsKKwltdXRleF91bmxvY2soJmRhdGEtPmxvY2spOwogCXJldHVybiB2YWx1ZTsKIGZhaWwwOgogCXZhbHVlID0gLUVJTlZBTDsKQEAgLTg3MCw3ICs4NzMsNyBAQAogCXN0cnVjdCBlcF9kYXRhCQkqZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CiAJaW50CQkJdmFsdWUgPSAtRUJVU1k7CiAKLQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlICgmZGF0YS0+bG9jaykgIT0gMCkKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkYXRhLT5sb2NrKSAhPSAwKQogCQlyZXR1cm4gLUVJTlRSOwogCXNwaW5fbG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOwogCWlmIChkYXRhLT5kZXYtPnN0YXRlID09IFNUQVRFX0RFVl9VTkJPVU5EKQpAQCAtODg1LDcgKzg4OCw3IEBACiAJCURCRyAoZGF0YS0+ZGV2LCAiJXMgc3RhdGUgJWRcbiIsCiAJCQlkYXRhLT5uYW1lLCBkYXRhLT5zdGF0ZSk7CiAJc3Bpbl91bmxvY2tfaXJxICgmZGF0YS0+ZGV2LT5sb2NrKTsKLQl1cCAoJmRhdGEtPmxvY2spOworCW11dGV4X3VubG9jaygmZGF0YS0+bG9jayk7CiAJcmV0dXJuIHZhbHVlOwogfQogCkBAIC0xNjMxLDcgKzE2MzQsNyBAQAogCQlpZiAoIWRhdGEpCiAJCQlnb3RvIGVub21lbTA7CiAJCWRhdGEtPnN0YXRlID0gU1RBVEVfRVBfRElTQUJMRUQ7Ci0JCWluaXRfTVVURVggKCZkYXRhLT5sb2NrKTsKKwkJbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7CiAJCWluaXRfd2FpdHF1ZXVlX2hlYWQgKCZkYXRhLT53YWl0KTsKIAogCQlzdHJuY3B5IChkYXRhLT5uYW1lLCBlcC0+bmFtZSwgc2l6ZW9mIChkYXRhLT5uYW1lKSAtIDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L21hc3Nfc3RvcmFnZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L21hc3Nfc3RvcmFnZS5jCmluZGV4IDE5NjE5ZmIuLjcwNWNjMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9tYXNzX3N0b3JhZ2UuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbWFzc19zdG9yYWdlLmMKQEAgLTEzNSw2ICsxMzUsMTIgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1zZ19yZWdpc3RlcmVkID0gMDsKIHN0YXRpYyB2b2lkIG1zZ19jbGVhbnVwKHZvaWQpOwogCitzdGF0aWMgaW50IG1zZ190aHJlYWRfZXhpdHMoc3RydWN0IGZzZ19jb21tb24gKmNvbW1vbikKK3sKKwltc2dfY2xlYW51cCgpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IF9faW5pdCBtc2dfZG9fY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKIHsKIAlzdHJ1Y3QgZnNnX2NvbW1vbiAqY29tbW9uOwpAQCAtMTQ3LDcgKzE1Myw3IEBACiAJfQogCiAJZnNnX2NvbmZpZ19mcm9tX3BhcmFtcygmY29uZmlnLCAmbW9kX2RhdGEpOwotCWNvbmZpZy50aHJlYWRfZXhpdHMgPSAodm9pZCgqKShzdHJ1Y3QgZnNnX2NvbW1vbiopKSZtc2dfY2xlYW51cDsKKwljb25maWcudGhyZWFkX2V4aXRzID0gbXNnX3RocmVhZF9leGl0czsKIAljb21tb24gPSBmc2dfY29tbW9uX2luaXQoMCwgYy0+Y2RldiwgJmNvbmZpZyk7CiAJaWYgKElTX0VSUihjb21tb24pKQogCQlyZXR1cm4gUFRSX0VSUihjb21tb24pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L25va2lhLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbm9raWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDZiNjZhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25va2lhLmMKQEAgLTAsMCArMSwyNTkgQEAKKy8qCisgKiBub2tpYS5jIC0tIE5va2lhIENvbXBvc2l0ZSBHYWRnZXQgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTAgTm9raWEgQ29ycG9yYXRpb24KKyAqIENvbnRhY3Q6IEZlbGlwZSBCYWxiaSA8ZmVsaXBlLmJhbGJpQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIGdhZGdldCBkcml2ZXIgYm9ycm93cyBmcm9tIHNlcmlhbC5jIHdoaWNoIGlzOgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBBbCBCb3JjaGVycyAoYWxib3JjaGVyc0BzdGVpbmVycG9pbnQuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA4IGJ5IERhdmlkIEJyb3duZWxsCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggYnkgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwKKyAqIFB1YmxpYyBMaWNlbnNlICgiR1BMIikgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiB2ZXJzaW9uIDIgb2YgdGhhdCBMaWNlbnNlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlICJ1X3NlcmlhbC5oIgorI2luY2x1ZGUgInVfZXRoZXIuaCIKKyNpbmNsdWRlICJ1X3Bob25ldC5oIgorI2luY2x1ZGUgImdhZGdldF9jaGlwcy5oIgorCisvKiBEZWZpbmVzICovCisKKyNkZWZpbmUgTk9LSUFfVkVSU0lPTl9OVU0JCTB4MDIxMQorI2RlZmluZSBOT0tJQV9MT05HX05BTUUJCQkiTjkwMCAoUEMtU3VpdGUgTW9kZSkiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qCisgKiBLYnVpbGQgaXMgbm90IHZlcnkgY29vcGVyYXRpdmUgd2l0aCByZXNwZWN0IHRvIGxpbmtpbmcgc2VwYXJhdGVseQorICogY29tcGlsZWQgbGlicmFyeSBvYmplY3RzIGludG8gb25lIG1vZHVsZS4gIFNvIGZvciBub3cgd2Ugd29uJ3QgdXNlCisgKiBzZXBhcmF0ZSBjb21waWxhdGlvbiAuLi4gZW5zdXJpbmcgaW5pdC9leGl0IHNlY3Rpb25zIHdvcmsgdG8gc2hyaW5rCisgKiB0aGUgcnVudGltZSBmb290cHJpbnQsIGFuZCBnaXZpbmcgdXMgYXQgbGVhc3Qgc29tZSBwYXJ0cyBvZiB3aGF0CisgKiBhICJnY2MgLS1jb21iaW5lIC4uLiBwYXJ0MS5jIHBhcnQyLmMgcGFydDMuYyAuLi4gIiBidWlsZCB3b3VsZC4KKyAqLworI2luY2x1ZGUgImNvbXBvc2l0ZS5jIgorI2luY2x1ZGUgInVzYnN0cmluZy5jIgorI2luY2x1ZGUgImNvbmZpZy5jIgorI2luY2x1ZGUgImVwYXV0b2NvbmYuYyIKKworI2luY2x1ZGUgInVfc2VyaWFsLmMiCisjaW5jbHVkZSAiZl9hY20uYyIKKyNpbmNsdWRlICJmX2VjbS5jIgorI2luY2x1ZGUgImZfb2JleC5jIgorI2luY2x1ZGUgImZfc2VyaWFsLmMiCisjaW5jbHVkZSAiZl9waG9uZXQuYyIKKyNpbmNsdWRlICJ1X2V0aGVyLmMiCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyNkZWZpbmUgTk9LSUFfVkVORE9SX0lECQkJMHgwNDIxCS8qIE5va2lhICovCisjZGVmaW5lIE5PS0lBX1BST0RVQ1RfSUQJCTB4MDFjOAkvKiBOb2tpYSBHYWRnZXQgKi8KKworLyogc3RyaW5nIElEcyBhcmUgYXNzaWduZWQgZHluYW1pY2FsbHkgKi8KKworI2RlZmluZSBTVFJJTkdfTUFOVUZBQ1RVUkVSX0lEWAkJMAorI2RlZmluZSBTVFJJTkdfUFJPRFVDVF9JRFgJCTEKKyNkZWZpbmUgU1RSSU5HX0RFU0NSSVBUSU9OX0lEWAkJMgorCitzdGF0aWMgY2hhciBtYW51ZmFjdHVyZXJfbm9raWFbXSA9ICJOb2tpYSI7CitzdGF0aWMgY29uc3QgY2hhciBwcm9kdWN0X25va2lhW10gPSBOT0tJQV9MT05HX05BTUU7CitzdGF0aWMgY29uc3QgY2hhciBkZXNjcmlwdGlvbl9ub2tpYVtdID0gIlBDLVN1aXRlIENvbmZpZ3VyYXRpb24iOworCitzdGF0aWMgc3RydWN0IHVzYl9zdHJpbmcgc3RyaW5nc19kZXZbXSA9IHsKKwlbU1RSSU5HX01BTlVGQUNUVVJFUl9JRFhdLnMgPSBtYW51ZmFjdHVyZXJfbm9raWEsCisJW1NUUklOR19QUk9EVUNUX0lEWF0ucyA9IE5PS0lBX0xPTkdfTkFNRSwKKwlbU1RSSU5HX0RFU0NSSVBUSU9OX0lEWF0ucyA9IGRlc2NyaXB0aW9uX25va2lhLAorCXsgIH0gLyogZW5kIG9mIGxpc3QgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2dhZGdldF9zdHJpbmdzIHN0cmluZ3RhYl9kZXYgPSB7CisJLmxhbmd1YWdlCT0gMHgwNDA5LAkvKiBlbi11cyAqLworCS5zdHJpbmdzCT0gc3RyaW5nc19kZXYsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyAqZGV2X3N0cmluZ3NbXSA9IHsKKwkmc3RyaW5ndGFiX2RldiwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgZGV2aWNlX2Rlc2MgPSB7CisJLmJMZW5ndGgJCT0gVVNCX0RUX0RFVklDRV9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUJPSBVU0JfRFRfREVWSUNFLAorCS5iY2RVU0IJCQk9IF9fY29uc3RhbnRfY3B1X3RvX2xlMTYoMHgwMjAwKSwKKwkuYkRldmljZUNsYXNzCQk9IFVTQl9DTEFTU19DT01NLAorCS5pZFZlbmRvcgkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KE5PS0lBX1ZFTkRPUl9JRCksCisJLmlkUHJvZHVjdAkJPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KE5PS0lBX1BST0RVQ1RfSUQpLAorCS8qIC5pTWFudWZhY3R1cmVyID0gRFlOQU1JQyAqLworCS8qIC5pUHJvZHVjdCA9IERZTkFNSUMgKi8KKwkuYk51bUNvbmZpZ3VyYXRpb25zID0JMSwKK307CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKy8qIE1vZHVsZSAqLworTU9EVUxFX0RFU0NSSVBUSU9OKCJOb2tpYSBjb21wb3NpdGUgZ2FkZ2V0IGRyaXZlciBmb3IgTjkwMCIpOworTU9EVUxFX0FVVEhPUigiRmVsaXBlIEJhbGJpIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB1OCBob3N0YWRkcltFVEhfQUxFTl07CisKK3N0YXRpYyBpbnQgX19pbml0IG5va2lhX2JpbmRfY29uZmlnKHN0cnVjdCB1c2JfY29uZmlndXJhdGlvbiAqYykKK3sKKwlpbnQgc3RhdHVzID0gMDsKKworCXN0YXR1cyA9IHBob25ldF9iaW5kX2NvbmZpZyhjKTsKKwlpZiAoc3RhdHVzKQorCQlwcmludGsoS0VSTl9ERUJVRyAiY291bGQgbm90IGJpbmQgcGhvbmV0IGNvbmZpZ1xuIik7CisKKwlzdGF0dXMgPSBvYmV4X2JpbmRfY29uZmlnKGMsIDApOworCWlmIChzdGF0dXMpCisJCXByaW50ayhLRVJOX0RFQlVHICJjb3VsZCBub3QgYmluZCBvYmV4IGNvbmZpZyAlZFxuIiwgMCk7CisKKwlzdGF0dXMgPSBvYmV4X2JpbmRfY29uZmlnKGMsIDEpOworCWlmIChzdGF0dXMpCisJCXByaW50ayhLRVJOX0RFQlVHICJjb3VsZCBub3QgYmluZCBvYmV4IGNvbmZpZyAlZFxuIiwgMCk7CisKKwlzdGF0dXMgPSBhY21fYmluZF9jb25maWcoYywgMik7CisJaWYgKHN0YXR1cykKKwkJcHJpbnRrKEtFUk5fREVCVUcgImNvdWxkIG5vdCBiaW5kIGFjbSBjb25maWdcbiIpOworCisJc3RhdHVzID0gZWNtX2JpbmRfY29uZmlnKGMsIGhvc3RhZGRyKTsKKwlpZiAoc3RhdHVzKQorCQlwcmludGsoS0VSTl9ERUJVRyAiY291bGQgbm90IGJpbmQgZWNtIGNvbmZpZ1xuIik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9jb25maWd1cmF0aW9uIG5va2lhX2NvbmZpZ181MDBtYV9kcml2ZXIgPSB7CisJLmxhYmVsCQk9ICJCdXMgUG93ZXJlZCIsCisJLmJpbmQJCT0gbm9raWFfYmluZF9jb25maWcsCisJLmJDb25maWd1cmF0aW9uVmFsdWUgPSAxLAorCS8qIC5pQ29uZmlndXJhdGlvbiA9IERZTkFNSUMgKi8KKwkuYm1BdHRyaWJ1dGVzCT0gVVNCX0NPTkZJR19BVFRfT05FLAorCS5iTWF4UG93ZXIJPSAyNTAsIC8qIDUwMG1BICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9jb25maWd1cmF0aW9uIG5va2lhX2NvbmZpZ18xMDBtYV9kcml2ZXIgPSB7CisJLmxhYmVsCQk9ICJTZWxmIFBvd2VyZWQiLAorCS5iaW5kCQk9IG5va2lhX2JpbmRfY29uZmlnLAorCS5iQ29uZmlndXJhdGlvblZhbHVlID0gMiwKKwkvKiAuaUNvbmZpZ3VyYXRpb24gPSBEWU5BTUlDICovCisJLmJtQXR0cmlidXRlcwk9IFVTQl9DT05GSUdfQVRUX09ORSB8IFVTQl9DT05GSUdfQVRUX1NFTEZQT1dFUiwKKwkuYk1heFBvd2VyCT0gNTAsIC8qIDEwMCBtQSAqLworfTsKKworc3RhdGljIGludCBfX2luaXQgbm9raWFfYmluZChzdHJ1Y3QgdXNiX2NvbXBvc2l0ZV9kZXYgKmNkZXYpCit7CisJaW50CQkJZ2NudW07CisJc3RydWN0IHVzYl9nYWRnZXQJKmdhZGdldCA9IGNkZXYtPmdhZGdldDsKKwlpbnQJCQlzdGF0dXM7CisKKwlzdGF0dXMgPSBncGhvbmV0X3NldHVwKGNkZXYtPmdhZGdldCk7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyX3Bob25ldDsKKworCXN0YXR1cyA9IGdzZXJpYWxfc2V0dXAoY2Rldi0+Z2FkZ2V0LCAzKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJfc2VyaWFsOworCisJc3RhdHVzID0gZ2V0aGVyX3NldHVwKGNkZXYtPmdhZGdldCwgaG9zdGFkZHIpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycl9ldGhlcjsKKworCXN0YXR1cyA9IHVzYl9zdHJpbmdfaWQoY2Rldik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyX3VzYjsKKwlzdHJpbmdzX2RldltTVFJJTkdfTUFOVUZBQ1RVUkVSX0lEWF0uaWQgPSBzdGF0dXM7CisKKwlkZXZpY2VfZGVzYy5pTWFudWZhY3R1cmVyID0gc3RhdHVzOworCisJc3RhdHVzID0gdXNiX3N0cmluZ19pZChjZGV2KTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJfdXNiOworCXN0cmluZ3NfZGV2W1NUUklOR19QUk9EVUNUX0lEWF0uaWQgPSBzdGF0dXM7CisKKwlkZXZpY2VfZGVzYy5pUHJvZHVjdCA9IHN0YXR1czsKKworCS8qIGNvbmZpZyBkZXNjcmlwdGlvbiAqLworCXN0YXR1cyA9IHVzYl9zdHJpbmdfaWQoY2Rldik7CisJaWYgKHN0YXR1cyA8IDApCisJCWdvdG8gZXJyX3VzYjsKKwlzdHJpbmdzX2RldltTVFJJTkdfREVTQ1JJUFRJT05fSURYXS5pZCA9IHN0YXR1czsKKworCW5va2lhX2NvbmZpZ181MDBtYV9kcml2ZXIuaUNvbmZpZ3VyYXRpb24gPSBzdGF0dXM7CisJbm9raWFfY29uZmlnXzEwMG1hX2RyaXZlci5pQ29uZmlndXJhdGlvbiA9IHN0YXR1czsKKworCS8qIHNldCB1cCBvdGhlciBkZXNjcmlwdG9ycyAqLworCWdjbnVtID0gdXNiX2dhZGdldF9jb250cm9sbGVyX251bWJlcihnYWRnZXQpOworCWlmIChnY251bSA+PSAwKQorCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBjcHVfdG9fbGUxNihOT0tJQV9WRVJTSU9OX05VTSk7CisJZWxzZSB7CisJCS8qIHRoaXMgc2hvdWxkIG9ubHkgd29yayB3aXRoIGh3IHRoYXQgc3VwcG9ydHMgYWx0c2V0dGluZ3MKKwkJICogYW5kIHNldmVyYWwgZW5kcG9pbnRzLCBhbnl0aGluZyBlbHNlLCBwYW5pYy4KKwkJICovCisJCXByX2Vycigibm9raWFfYmluZDogY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkXG4iLAorCQkJZ2FkZ2V0LT5uYW1lKTsKKwkJZ290byBlcnJfdXNiOworCX0KKworCS8qIGZpbmFseSByZWdpc3RlciB0aGUgY29uZmlndXJhdGlvbiAqLworCXN0YXR1cyA9IHVzYl9hZGRfY29uZmlnKGNkZXYsICZub2tpYV9jb25maWdfNTAwbWFfZHJpdmVyKTsKKwlpZiAoc3RhdHVzIDwgMCkKKwkJZ290byBlcnJfdXNiOworCisJc3RhdHVzID0gdXNiX2FkZF9jb25maWcoY2RldiwgJm5va2lhX2NvbmZpZ18xMDBtYV9kcml2ZXIpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGVycl91c2I7CisKKwlkZXZfaW5mbygmZ2FkZ2V0LT5kZXYsICIlc1xuIiwgTk9LSUFfTE9OR19OQU1FKTsKKworCXJldHVybiAwOworCitlcnJfdXNiOgorCWdldGhlcl9jbGVhbnVwKCk7CitlcnJfZXRoZXI6CisJZ3NlcmlhbF9jbGVhbnVwKCk7CitlcnJfc2VyaWFsOgorCWdwaG9uZXRfY2xlYW51cCgpOworZXJyX3Bob25ldDoKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IF9fZXhpdCBub2tpYV91bmJpbmQoc3RydWN0IHVzYl9jb21wb3NpdGVfZGV2ICpjZGV2KQoreworCWdwaG9uZXRfY2xlYW51cCgpOworCWdzZXJpYWxfY2xlYW51cCgpOworCWdldGhlcl9jbGVhbnVwKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfY29tcG9zaXRlX2RyaXZlciBub2tpYV9kcml2ZXIgPSB7CisJLm5hbWUJCT0gImdfbm9raWEiLAorCS5kZXYJCT0gJmRldmljZV9kZXNjLAorCS5zdHJpbmdzCT0gZGV2X3N0cmluZ3MsCisJLmJpbmQJCT0gbm9raWFfYmluZCwKKwkudW5iaW5kCQk9IF9fZXhpdF9wKG5va2lhX3VuYmluZCksCit9OworCitzdGF0aWMgaW50IF9faW5pdCBub2tpYV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHVzYl9jb21wb3NpdGVfcmVnaXN0ZXIoJm5va2lhX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChub2tpYV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG5va2lhX2NsZWFudXAodm9pZCkKK3sKKwl1c2JfY29tcG9zaXRlX3VucmVnaXN0ZXIoJm5va2lhX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChub2tpYV9jbGVhbnVwKTsKKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9wcmludGVyLmMKaW5kZXggMmQ4NjdmZC4uNmI4YmY4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3ByaW50ZXIuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHJpbnRlci5jCkBAIC05NDksMTIgKzk0OSw2IEBACiAJaW50CQkJcmVzdWx0ID0gMDsKIAlzdHJ1Y3QgdXNiX2dhZGdldAkqZ2FkZ2V0ID0gZGV2LT5nYWRnZXQ7CiAKLQlpZiAoZ2FkZ2V0X2lzX3NhMTEwMChnYWRnZXQpICYmIGRldi0+Y29uZmlnKSB7Ci0JCS8qIHR4IGZpZm8gaXMgZnVsbCwgYnV0IHdlIGNhbid0IGNsZWFyIGl0Li4uKi8KLQkJSU5GTyhkZXYsICJjYW4ndCBjaGFuZ2UgY29uZmlndXJhdGlvbnNcbiIpOwotCQlyZXR1cm4gLUVTUElQRTsKLQl9Ci0KIAlzd2l0Y2ggKG51bWJlcikgewogCWNhc2UgREVWX0NPTkZJR19WQUxVRToKIAkJcmVzdWx0ID0gMDsKQEAgLTEwMzMsMTIgKzEwMjcsNiBAQAogewogCWludAkJCXJlc3VsdCA9IDA7CiAKLQlpZiAoZ2FkZ2V0X2lzX3NhMTEwMChkZXYtPmdhZGdldCkgJiYgZGV2LT5pbnRlcmZhY2UgPCAwKSB7Ci0JCS8qIHR4IGZpZm8gaXMgZnVsbCwgYnV0IHdlIGNhbid0IGNsZWFyIGl0Li4uKi8KLQkJSU5GTyhkZXYsICJjYW4ndCBjaGFuZ2UgaW50ZXJmYWNlc1xuIik7Ci0JCXJldHVybiAtRVNQSVBFOwotCX0KLQogCS8qIEZyZWUgdGhlIGN1cnJlbnQgaW50ZXJmYWNlICovCiAJc3dpdGNoIChkZXYtPmludGVyZmFjZSkgewogCWNhc2UgUFJJTlRFUl9JTlRFUkZBQ0U6CkBAIC0xMzkyLDEyICsxMzgwLDYgQEAKIAkJZ290byBmYWlsOwogCX0KIAotCWlmIChnYWRnZXRfaXNfc2ExMTAwKGdhZGdldCkpIHsKLQkJLyogaGFyZHdhcmUgY2FuJ3Qgd3JpdGUgemVybyBsZW5ndGggcGFja2V0cy4gKi8KLQkJRVJST1IoZGV2LCAiU0ExMTAwIGNvbnRyb2xsZXIgaXMgdW5zdXBwb3J0IGJ5IHRoaXMgZHJpdmVyXG4iKTsKLQkJZ290byBmYWlsOwotCX0KLQogCWdjbnVtID0gdXNiX2dhZGdldF9jb250cm9sbGVyX251bWJlcihnYWRnZXQpOwogCWlmIChnY251bSA+PSAwKSB7CiAJCWRldmljZV9kZXNjLmJjZERldmljZSA9IGNwdV90b19sZTE2KDB4MDIwMCArIGdjbnVtKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjV4X3VkYy5jCmluZGV4IGU2ZmVkYmQuLmJlNWZiMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyNXhfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI1eF91ZGMuYwpAQCAtNjUsNiArNjUsMTAgQEAKICNpbmNsdWRlIDxtYWNoL3B4YTI1eC11ZGMuaD4KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FSQ0hfTFVCQk9DSworI2luY2x1ZGUgPG1hY2gvbHViYm9jay5oPgorI2VuZGlmCisKICNpbmNsdWRlIDxhc20vbWFjaC91ZGNfcHhhMnh4Lmg+CiAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmMKaW5kZXggYWRkYTEyMC4uMDViODkyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5jCkBAIC03NDIsMTMgKzc0MiwxNyBAQAogICogQGVwOiBweGEgcGh5c2ljYWwgZW5kcG9pbnQKICAqIEByZXE6IHB4YSByZXF1ZXN0CiAgKiBAc3RhdHVzOiB1c2IgcmVxdWVzdCBzdGF0dXMgc2VudCB0byBnYWRnZXQgQVBJCisgKiBAcGZsYWdzOiBmbGFncyBvZiBwcmV2aW91cyBzcGlubG9ja19pcnFfc2F2ZSgpIG9yIE5VTEwgaWYgbm8gbG9jayBoZWxkCiAgKgotICogQ29udGV4dDogZXAtPmxvY2sgaGVsZAorICogQ29udGV4dDogZXAtPmxvY2sgaGVsZCBpZiBmbGFncyBub3QgTlVMTCwgZWxzZSBlcC0+bG9jayByZWxlYXNlZAogICoKICAqIFJldGlyZSBhIHB4YTI3eCB1c2IgcmVxdWVzdC4gRW5kcG9pbnQgbXVzdCBiZSBsb2NrZWQuCiAgKi8KLXN0YXRpYyB2b2lkIHJlcV9kb25lKHN0cnVjdCBweGFfZXAgKmVwLCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcSwgaW50IHN0YXR1cykKK3N0YXRpYyB2b2lkIHJlcV9kb25lKHN0cnVjdCBweGFfZXAgKmVwLCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcSwgaW50IHN0YXR1cywKKwl1bnNpZ25lZCBsb25nICpwZmxhZ3MpCiB7CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwogCWVwX2RlbF9yZXF1ZXN0KGVwLCByZXEpOwogCWlmIChsaWtlbHkocmVxLT5yZXEuc3RhdHVzID09IC1FSU5QUk9HUkVTUykpCiAJCXJlcS0+cmVxLnN0YXR1cyA9IHN0YXR1czsKQEAgLTc2MCwzOCArNzY0LDQ4IEBACiAJCQkmcmVxLT5yZXEsIHN0YXR1cywKIAkJCXJlcS0+cmVxLmFjdHVhbCwgcmVxLT5yZXEubGVuZ3RoKTsKIAorCWlmIChwZmxhZ3MpCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCAqcGZsYWdzKTsKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJcmVxLT5yZXEuY29tcGxldGUoJnJlcS0+dWRjX3VzYl9lcC0+dXNiX2VwLCAmcmVxLT5yZXEpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlpZiAocGZsYWdzKQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssICpwZmxhZ3MpOwogfQogCiAvKioKICAqIGVwX2VuZF9vdXRfcmVxIC0gRW5kcyBlbmRwb2ludCBPVVQgcmVxdWVzdAogICogQGVwOiBwaHlzaWNhbCBlbmRwb2ludAogICogQHJlcTogcHhhIHJlcXVlc3QKKyAqIEBwZmxhZ3M6IGZsYWdzIG9mIHByZXZpb3VzIHNwaW5sb2NrX2lycV9zYXZlKCkgb3IgTlVMTCBpZiBubyBsb2NrIGhlbGQKICAqCi0gKiBDb250ZXh0OiBlcC0+bG9jayBoZWxkCisgKiBDb250ZXh0OiBlcC0+bG9jayBoZWxkIG9yIHJlbGVhc2VkIChzZWUgcmVxX2RvbmUoKSkKICAqCiAgKiBFbmRzIGVuZHBvaW50IE9VVCByZXF1ZXN0IChjb21wbGV0ZXMgdXNiIHJlcXVlc3QpLgogICovCi1zdGF0aWMgdm9pZCBlcF9lbmRfb3V0X3JlcShzdHJ1Y3QgcHhhX2VwICplcCwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0ICpyZXEpCitzdGF0aWMgdm9pZCBlcF9lbmRfb3V0X3JlcShzdHJ1Y3QgcHhhX2VwICplcCwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0ICpyZXEsCisJdW5zaWduZWQgbG9uZyAqcGZsYWdzKQogewogCWluY19lcF9zdGF0c19yZXFzKGVwLCAhVVNCX0RJUl9JTik7Ci0JcmVxX2RvbmUoZXAsIHJlcSwgMCk7CisJcmVxX2RvbmUoZXAsIHJlcSwgMCwgcGZsYWdzKTsKIH0KIAogLyoqCiAgKiBlcDBfZW5kX291dF9yZXEgLSBFbmRzIGNvbnRyb2wgZW5kcG9pbnQgT1VUIHJlcXVlc3QgKGVuZHMgZGF0YSBzdGFnZSkKICAqIEBlcDogcGh5c2ljYWwgZW5kcG9pbnQKICAqIEByZXE6IHB4YSByZXF1ZXN0CisgKiBAcGZsYWdzOiBmbGFncyBvZiBwcmV2aW91cyBzcGlubG9ja19pcnFfc2F2ZSgpIG9yIE5VTEwgaWYgbm8gbG9jayBoZWxkCiAgKgotICogQ29udGV4dDogZXAtPmxvY2sgaGVsZAorICogQ29udGV4dDogZXAtPmxvY2sgaGVsZCBvciByZWxlYXNlZCAoc2VlIHJlcV9kb25lKCkpCiAgKgogICogRW5kcyBjb250cm9sIGVuZHBvaW50IE9VVCByZXF1ZXN0IChjb21wbGV0ZXMgdXNiIHJlcXVlc3QpLCBhbmQgcHV0cwogICogY29udHJvbCBlbmRwb2ludCBpbnRvIGlkbGUgc3RhdGUKICAqLwotc3RhdGljIHZvaWQgZXAwX2VuZF9vdXRfcmVxKHN0cnVjdCBweGFfZXAgKmVwLCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcSkKK3N0YXRpYyB2b2lkIGVwMF9lbmRfb3V0X3JlcShzdHJ1Y3QgcHhhX2VwICplcCwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0ICpyZXEsCisJdW5zaWduZWQgbG9uZyAqcGZsYWdzKQogewogCXNldF9lcDBzdGF0ZShlcC0+ZGV2LCBPVVRfU1RBVFVTX1NUQUdFKTsKLQllcF9lbmRfb3V0X3JlcShlcCwgcmVxKTsKKwllcF9lbmRfb3V0X3JlcShlcCwgcmVxLCBwZmxhZ3MpOwogCWVwMF9pZGxlKGVwLT5kZXYpOwogfQogCkBAIC03OTksMzEgKzgxMywzNSBAQAogICogZXBfZW5kX2luX3JlcSAtIEVuZHMgZW5kcG9pbnQgSU4gcmVxdWVzdAogICogQGVwOiBwaHlzaWNhbCBlbmRwb2ludAogICogQHJlcTogcHhhIHJlcXVlc3QKKyAqIEBwZmxhZ3M6IGZsYWdzIG9mIHByZXZpb3VzIHNwaW5sb2NrX2lycV9zYXZlKCkgb3IgTlVMTCBpZiBubyBsb2NrIGhlbGQKICAqCi0gKiBDb250ZXh0OiBlcC0+bG9jayBoZWxkCisgKiBDb250ZXh0OiBlcC0+bG9jayBoZWxkIG9yIHJlbGVhc2VkIChzZWUgcmVxX2RvbmUoKSkKICAqCiAgKiBFbmRzIGVuZHBvaW50IElOIHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCkuCiAgKi8KLXN0YXRpYyB2b2lkIGVwX2VuZF9pbl9yZXEoc3RydWN0IHB4YV9lcCAqZXAsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCAqcmVxKQorc3RhdGljIHZvaWQgZXBfZW5kX2luX3JlcShzdHJ1Y3QgcHhhX2VwICplcCwgc3RydWN0IHB4YTI3eF9yZXF1ZXN0ICpyZXEsCisJdW5zaWduZWQgbG9uZyAqcGZsYWdzKQogewogCWluY19lcF9zdGF0c19yZXFzKGVwLCBVU0JfRElSX0lOKTsKLQlyZXFfZG9uZShlcCwgcmVxLCAwKTsKKwlyZXFfZG9uZShlcCwgcmVxLCAwLCBwZmxhZ3MpOwogfQogCiAvKioKICAqIGVwMF9lbmRfaW5fcmVxIC0gRW5kcyBjb250cm9sIGVuZHBvaW50IElOIHJlcXVlc3QgKGVuZHMgZGF0YSBzdGFnZSkKICAqIEBlcDogcGh5c2ljYWwgZW5kcG9pbnQKICAqIEByZXE6IHB4YSByZXF1ZXN0CisgKiBAcGZsYWdzOiBmbGFncyBvZiBwcmV2aW91cyBzcGlubG9ja19pcnFfc2F2ZSgpIG9yIE5VTEwgaWYgbm8gbG9jayBoZWxkCiAgKgotICogQ29udGV4dDogZXAtPmxvY2sgaGVsZAorICogQ29udGV4dDogZXAtPmxvY2sgaGVsZCBvciByZWxlYXNlZCAoc2VlIHJlcV9kb25lKCkpCiAgKgogICogRW5kcyBjb250cm9sIGVuZHBvaW50IElOIHJlcXVlc3QgKGNvbXBsZXRlcyB1c2IgcmVxdWVzdCksIGFuZCBwdXRzCiAgKiBjb250cm9sIGVuZHBvaW50IGludG8gc3RhdHVzIHN0YXRlCiAgKi8KLXN0YXRpYyB2b2lkIGVwMF9lbmRfaW5fcmVxKHN0cnVjdCBweGFfZXAgKmVwLCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcSkKK3N0YXRpYyB2b2lkIGVwMF9lbmRfaW5fcmVxKHN0cnVjdCBweGFfZXAgKmVwLCBzdHJ1Y3QgcHhhMjd4X3JlcXVlc3QgKnJlcSwKKwl1bnNpZ25lZCBsb25nICpwZmxhZ3MpCiB7CiAJc2V0X2VwMHN0YXRlKGVwLT5kZXYsIElOX1NUQVRVU19TVEFHRSk7Ci0JZXBfZW5kX2luX3JlcShlcCwgcmVxKTsKKwllcF9lbmRfaW5fcmVxKGVwLCByZXEsIHBmbGFncyk7CiB9CiAKIC8qKgpAQCAtODMxLDE5ICs4NDksMjIgQEAKICAqIEBlcDogcHhhIGVuZHBvaW50CiAgKiBAc3RhdHVzOiB1c2IgcmVxdWVzdCBzdGF0dXMKICAqCi0gKiBDb250ZXh0OiBlcC0+bG9jayBoZWxkCisgKiBDb250ZXh0OiBlcC0+bG9jayByZWxlYXNlZAogICoKICAqIERlcXVldWVzIGFsbCByZXF1ZXN0cyBvbiBhbiBlbmRwb2ludC4gQXMgYSBzaWRlIGVmZmVjdCwgaW50ZXJydXB0cyB3aWxsIGJlCiAgKiBkaXNhYmxlZCBvbiB0aGF0IGVuZHBvaW50IChiZWNhdXNlIG5vIG1vcmUgcmVxdWVzdHMpLgogICovCiBzdGF0aWMgdm9pZCBudWtlKHN0cnVjdCBweGFfZXAgKmVwLCBpbnQgc3RhdHVzKQogewotCXN0cnVjdCBweGEyN3hfcmVxdWVzdCAqcmVxOworCXN0cnVjdCBweGEyN3hfcmVxdWVzdAkqcmVxOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5sb2NrLCBmbGFncyk7CiAJd2hpbGUgKCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSB7CiAJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCwgcXVldWUpOwotCQlyZXFfZG9uZShlcCwgcmVxLCBzdGF0dXMpOworCQlyZXFfZG9uZShlcCwgcmVxLCBzdGF0dXMsICZmbGFncyk7CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7CiB9CiAKIC8qKgpAQCAtMTEyMyw2ICsxMTQ0LDcgQEAKIAlpbnQJCQlyYyA9IDA7CiAJaW50CQkJaXNfZmlyc3RfcmVxOwogCXVuc2lnbmVkCQlsZW5ndGg7CisJaW50CQkJcmVjdXJzaW9uX2RldGVjdGVkOwogCiAJcmVxID0gY29udGFpbmVyX29mKF9yZXEsIHN0cnVjdCBweGEyN3hfcmVxdWVzdCwgcmVxKTsKIAl1ZGNfdXNiX2VwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IHVkY191c2JfZXAsIHVzYl9lcCk7CkBAIC0xMTUyLDYgKzExNzQsNyBAQAogCQlyZXR1cm4gLUVNU0dTSVpFOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5sb2NrLCBmbGFncyk7CisJcmVjdXJzaW9uX2RldGVjdGVkID0gZXAtPmluX2hhbmRsZV9lcDsKIAogCWlzX2ZpcnN0X3JlcSA9IGxpc3RfZW1wdHkoJmVwLT5xdWV1ZSk7CiAJZXBfZGJnKGVwLCAicXVldWUgcmVxICVwKGZpcnN0PSVzKSwgbGVuICVkIGJ1ZiAlcFxuIiwKQEAgLTExNjEsMTIgKzExODQsMTIgQEAKIAlpZiAoIWVwLT5lbmFibGVkKSB7CiAJCV9yZXEtPnN0YXR1cyA9IC1FU0hVVERPV047CiAJCXJjID0gLUVTSFVURE9XTjsKLQkJZ290byBvdXQ7CisJCWdvdG8gb3V0X2xvY2tlZDsKIAl9CiAKIAlpZiAocmVxLT5pbl91c2UpIHsKIAkJZXBfZXJyKGVwLCAicmVmdXNpbmcgdG8gcXVldWUgcmVxICVwIChhbHJlYWR5IHF1ZXVlZClcbiIsIHJlcSk7Ci0JCWdvdG8gb3V0OworCQlnb3RvIG91dF9sb2NrZWQ7CiAJfQogCiAJbGVuZ3RoID0gX3JlcS0+bGVuZ3RoOwpAQCAtMTE3NCwxMiArMTE5NywxMyBAQAogCV9yZXEtPmFjdHVhbCA9IDA7CiAKIAllcF9hZGRfcmVxdWVzdChlcCwgcmVxKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOwogCiAJaWYgKGlzX2VwMChlcCkpIHsKIAkJc3dpdGNoIChkZXYtPmVwMHN0YXRlKSB7CiAJCWNhc2UgV0FJVF9BQ0tfU0VUX0NPTkZfSU5URVJGOgogCQkJaWYgKGxlbmd0aCA9PSAwKSB7Ci0JCQkJZXBfZW5kX2luX3JlcShlcCwgcmVxKTsKKwkJCQllcF9lbmRfaW5fcmVxKGVwLCByZXEsIE5VTEwpOwogCQkJfSBlbHNlIHsKIAkJCQllcF9lcnIoZXAsICJnb3QgYSByZXF1ZXN0IG9mICVkIGJ5dGVzIHdoaWxlIgogCQkJCQkiaW4gc3RhdGUgV0FJVF9BQ0tfU0VUX0NPTkZfSU5URVJGXG4iLApAQCAtMTE5MiwxMiArMTIxNiwxMiBAQAogCQljYXNlIElOX0RBVEFfU1RBR0U6CiAJCQlpZiAoIWVwX2lzX2Z1bGwoZXApKQogCQkJCWlmICh3cml0ZV9lcDBfZmlmbyhlcCwgcmVxKSkKLQkJCQkJZXAwX2VuZF9pbl9yZXEoZXAsIHJlcSk7CisJCQkJCWVwMF9lbmRfaW5fcmVxKGVwLCByZXEsIE5VTEwpOwogCQkJYnJlYWs7CiAJCWNhc2UgT1VUX0RBVEFfU1RBR0U6CiAJCQlpZiAoKGxlbmd0aCA9PSAwKSB8fCAhZXBvdXRfaGFzX3BrdChlcCkpCiAJCQkJaWYgKHJlYWRfZXAwX2ZpZm8oZXAsIHJlcSkpCi0JCQkJCWVwMF9lbmRfb3V0X3JlcShlcCwgcmVxKTsKKwkJCQkJZXAwX2VuZF9vdXRfcmVxKGVwLCByZXEsIE5VTEwpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQllcF9lcnIoZXAsICJvZGQgc3RhdGUgJXMgdG8gc2VuZCBtZSBhIHJlcXVlc3RcbiIsCkBAIC0xMjA3LDEyICsxMjMxLDE1IEBACiAJCQlicmVhazsKIAkJfQogCX0gZWxzZSB7Ci0JCWhhbmRsZV9lcChlcCk7CisJCWlmICghcmVjdXJzaW9uX2RldGVjdGVkKQorCQkJaGFuZGxlX2VwKGVwKTsKIAl9CiAKIG91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByYzsKK291dF9sb2NrZWQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssIGZsYWdzKTsKKwlnb3RvIG91dDsKIH0KIAogLyoqCkBAIC0xMjQyLDEzICsxMjY5LDE0IEBACiAJLyogbWFrZSBzdXJlIGl0J3MgYWN0dWFsbHkgcXVldWVkIG9uIHRoaXMgZW5kcG9pbnQgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcSwgJmVwLT5xdWV1ZSwgcXVldWUpIHsKIAkJaWYgKCZyZXEtPnJlcSA9PSBfcmVxKSB7Ci0JCQlyZXFfZG9uZShlcCwgcmVxLCAtRUNPTk5SRVNFVCk7CiAJCQlyYyA9IDA7CiAJCQlicmVhazsKIAkJfQogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7CisJaWYgKCFyYykKKwkJcmVxX2RvbmUoZXAsIHJlcSwgLUVDT05OUkVTRVQsIE5VTEwpOwogCXJldHVybiByYzsKIH0KIApAQCAtMTQ0NSw3ICsxNDczLDYgQEAKIHsKIAlzdHJ1Y3QgcHhhX2VwCQkqZXA7CiAJc3RydWN0IHVkY191c2JfZXAJKnVkY191c2JfZXA7Ci0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAKIAlpZiAoIV9lcCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xNDU1LDEwICsxNDgyLDggQEAKIAlpZiAoIWVwIHx8IGlzX2VwMChlcCkgfHwgIWxpc3RfZW1wdHkoJmVwLT5xdWV1ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmVwLT5sb2NrLCBmbGFncyk7CiAJZXAtPmVuYWJsZWQgPSAwOwogCW51a2UoZXAsIC1FU0hVVERPV04pOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7CiAKIAlweGFfZXBfZmlmb19mbHVzaChfZXApOwogCXVkY191c2JfZXAtPnB4YV9lcCA9IE5VTEw7CkBAIC0xOTA3LDggKzE5MzIsMTAgQEAKIAl9IHU7CiAJaW50IGk7CiAJaW50IGhhdmVfZXh0cmFieXRlcyA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW51a2UoZXAsIC1FUFJPVE8pOworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+bG9jaywgZmxhZ3MpOwogCiAJLyoKIAkgKiBJbiB0aGUgUFhBMzIwIG1hbnVhbCwgaW4gdGhlIHNlY3Rpb24gYWJvdXQgQmFjay10by1CYWNrIHNldHVwCkBAIC0xOTQ3LDEwICsxOTc0LDEzIEBACiAJLyogVGVsbCBVREMgdG8gZW50ZXIgRGF0YSBTdGFnZSAqLwogCWVwX3dyaXRlX1VEQ0NTUihlcCwgVURDQ1NSMF9TQSB8IFVEQ0NTUjBfT1BDKTsKIAorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVwLT5sb2NrLCBmbGFncyk7CiAJaSA9IHVkYy0+ZHJpdmVyLT5zZXR1cCgmdWRjLT5nYWRnZXQsICZ1LnIpOworCXNwaW5fbG9ja19pcnFzYXZlKCZlcC0+bG9jaywgZmxhZ3MpOwogCWlmIChpIDwgMCkKIAkJZ290byBzdGFsbDsKIG91dDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlcC0+bG9jaywgZmxhZ3MpOwogCXJldHVybjsKIHN0YWxsOgogCWVwX2RiZyhlcCwgInByb3RvY29sIFNUQUxMLCB1ZGNjc3IwPSUwM3ggZXJyICVkXG4iLApAQCAtMjA1NSwxMyArMjA4NSwxMyBAQAogCQlpZiAocmVxICYmICFlcF9pc19mdWxsKGVwKSkKIAkJCWNvbXBsZXRlZCA9IHdyaXRlX2VwMF9maWZvKGVwLCByZXEpOwogCQlpZiAoY29tcGxldGVkKQotCQkJZXAwX2VuZF9pbl9yZXEoZXAsIHJlcSk7CisJCQllcDBfZW5kX2luX3JlcShlcCwgcmVxLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBPVVRfREFUQV9TVEFHRToJCQkvKiBTRVRfREVTQ1JJUFRPUiAqLwogCQlpZiAoZXBvdXRfaGFzX3BrdChlcCkgJiYgcmVxKQogCQkJY29tcGxldGVkID0gcmVhZF9lcDBfZmlmbyhlcCwgcmVxKTsKIAkJaWYgKGNvbXBsZXRlZCkKLQkJCWVwMF9lbmRfb3V0X3JlcShlcCwgcmVxKTsKKwkJCWVwMF9lbmRfb3V0X3JlcShlcCwgcmVxLCBOVUxMKTsKIAkJYnJlYWs7CiAJY2FzZSBTVEFMTDoKIAkJZXBfd3JpdGVfVURDQ1NSKGVwLCBVRENDU1IwX0ZTVCk7CkBAIC0yMDkxLDcgKzIxMjEsNyBAQAogICogVHJpZXMgdG8gdHJhbnNmZXIgYWxsIHBlbmRpbmcgcmVxdWVzdCBkYXRhIGludG8gdGhlIGVuZHBvaW50IGFuZC9vcgogICogdHJhbnNmZXIgYWxsIHBlbmRpbmcgZGF0YSBpbiB0aGUgZW5kcG9pbnQgaW50byB1c2IgcmVxdWVzdHMuCiAgKgotICogSXMgYWx3YXlzIGNhbGxlZCB3aGVuIGluX2ludGVycnVwdCgpIG9yIHdpdGggZXAtPmxvY2sgaGVsZC4KKyAqIElzIGFsd2F5cyBjYWxsZWQgd2hlbiBpbl9pbnRlcnJ1cHQoKSBhbmQgd2l0aCBlcC0+bG9jayByZWxlYXNlZC4KICAqLwogc3RhdGljIHZvaWQgaGFuZGxlX2VwKHN0cnVjdCBweGFfZXAgKmVwKQogewpAQCAtMjEwMCwxMCArMjEzMCwxNyBAQAogCXUzMiB1ZGNjc3I7CiAJaW50IGlzX2luID0gZXAtPmRpcl9pbjsKIAlpbnQgbG9vcCA9IDA7CisJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZXAtPmxvY2ssIGZsYWdzKTsKKwlpZiAoZXAtPmluX2hhbmRsZV9lcCkKKwkJZ290byByZWN1cnNpb25fZGV0ZWN0ZWQ7CisJZXAtPmluX2hhbmRsZV9lcCA9IDE7CiAKIAlkbyB7CiAJCWNvbXBsZXRlZCA9IDA7CiAJCXVkY2NzciA9IHVkY19lcF9yZWFkbChlcCwgVURDQ1NSKTsKKwogCQlpZiAobGlrZWx5KCFsaXN0X2VtcHR5KCZlcC0+cXVldWUpKSkKIAkJCXJlcSA9IGxpc3RfZW50cnkoZXAtPnF1ZXVlLm5leHQsCiAJCQkJCXN0cnVjdCBweGEyN3hfcmVxdWVzdCwgcXVldWUpOwpAQCAtMjEyMiwxNSArMjE1OSwyMiBAQAogCQlpZiAodW5saWtlbHkoaXNfaW4pKSB7CiAJCQlpZiAobGlrZWx5KCFlcF9pc19mdWxsKGVwKSkpCiAJCQkJY29tcGxldGVkID0gd3JpdGVfZmlmbyhlcCwgcmVxKTsKLQkJCWlmIChjb21wbGV0ZWQpCi0JCQkJZXBfZW5kX2luX3JlcShlcCwgcmVxKTsKIAkJfSBlbHNlIHsKIAkJCWlmIChsaWtlbHkoZXBvdXRfaGFzX3BrdChlcCkpKQogCQkJCWNvbXBsZXRlZCA9IHJlYWRfZmlmbyhlcCwgcmVxKTsKLQkJCWlmIChjb21wbGV0ZWQpCi0JCQkJZXBfZW5kX291dF9yZXEoZXAsIHJlcSk7CisJCX0KKworCQlpZiAoY29tcGxldGVkKSB7CisJCQlpZiAoaXNfaW4pCisJCQkJZXBfZW5kX2luX3JlcShlcCwgcmVxLCAmZmxhZ3MpOworCQkJZWxzZQorCQkJCWVwX2VuZF9vdXRfcmVxKGVwLCByZXEsICZmbGFncyk7CiAJCX0KIAl9IHdoaWxlIChjb21wbGV0ZWQpOworCisJZXAtPmluX2hhbmRsZV9lcCA9IDA7CityZWN1cnNpb25fZGV0ZWN0ZWQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZXAtPmxvY2ssIGZsYWdzKTsKIH0KIAogLyoqCkBAIC0yMjE4LDkgKzIyNjIsMTMgQEAKIAkJCWNvbnRpbnVlOwogCiAJCXVkY193cml0ZWwodWRjLCBVRENJU1IwLCBVRENJU1JfSU5UKGksIFVEQ0lTUl9JTlRfTUFTSykpOwotCQllcCA9ICZ1ZGMtPnB4YV9lcFtpXTsKLQkJZXAtPnN0YXRzLmlycXMrKzsKLQkJaGFuZGxlX2VwKGVwKTsKKworCQlXQVJOX09OKGkgPj0gQVJSQVlfU0laRSh1ZGMtPnB4YV9lcCkpOworCQlpZiAoaSA8IEFSUkFZX1NJWkUodWRjLT5weGFfZXApKSB7CisJCQllcCA9ICZ1ZGMtPnB4YV9lcFtpXTsKKwkJCWVwLT5zdGF0cy5pcnFzKys7CisJCQloYW5kbGVfZXAoZXApOworCQl9CiAJfQogCiAJZm9yIChpID0gMTY7IHVkY2lzcjEgIT0gMCAmJiBpIDwgMjQ7IHVkY2lzcjEgPj49IDIsIGkrKykgewpAQCAtMjIyOCw5ICsyMjc2LDEyIEBACiAJCWlmICghKHVkY2lzcjEgJiBVRENJU1JfSU5UX01BU0spKQogCQkJY29udGludWU7CiAKLQkJZXAgPSAmdWRjLT5weGFfZXBbaV07Ci0JCWVwLT5zdGF0cy5pcnFzKys7Ci0JCWhhbmRsZV9lcChlcCk7CisJCVdBUk5fT04oaSA+PSBBUlJBWV9TSVpFKHVkYy0+cHhhX2VwKSk7CisJCWlmIChpIDwgQVJSQVlfU0laRSh1ZGMtPnB4YV9lcCkpIHsKKwkJCWVwID0gJnVkYy0+cHhhX2VwW2ldOworCQkJZXAtPnN0YXRzLmlycXMrKzsKKwkJCWhhbmRsZV9lcChlcCk7CisJCX0KIAl9CiAKIH0KQEAgLTI0MzksNyArMjQ5MCw3IEBACiAJfQogCiAJcmV0dmFsID0gLUVOT01FTTsKLQl1ZGMtPnJlZ3MgPSBpb3JlbWFwKHJlZ3MtPnN0YXJ0LCByZWdzLT5lbmQgLSByZWdzLT5zdGFydCArIDEpOworCXVkYy0+cmVncyA9IGlvcmVtYXAocmVncy0+c3RhcnQsIHJlc291cmNlX3NpemUocmVncykpOwogCWlmICghdWRjLT5yZWdzKSB7CiAJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBtYXAgVURDIEkvTyBtZW1vcnlcbiIpOwogCQlnb3RvIGVycl9tYXA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTI3eF91ZGMuaAppbmRleCBlMjUyMjVlLi5mZjYxZTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMjd4X3VkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyN3hfdWRjLmgKQEAgLTMxOCw2ICszMTgsMTEgQEAKICAqIEBxdWV1ZTogcmVxdWVzdHMgcXVldWUKICAqIEBsb2NrOiBsb2NrIHRvIHB4YV9lcCBkYXRhIChxdWV1ZXMgYW5kIHN0YXRzKQogICogQGVuYWJsZWQ6IHRydWUgd2hlbiBlbmRwb2ludCBlbmFibGVkIChub3Qgc3RvcHBlZCBieSBnYWRnZXQgbGF5ZXIpCisgKiBAaW5faGFuZGxlX2VwOiBudW1iZXIgb2YgcmVjdXJzaW9ucyBvZiBoYW5kbGVfZXAoKSBmdW5jdGlvbgorICogCVByZXZlbnRzIGRlYWRsb2NrcyBvciBpbmZpbml0ZSByZWN1cnNpb25zIG9mIHR5cGVzIDoKKyAqCSAgaXJxLT5oYW5kbGVfZXAoKS0+cmVxX2RvbmUoKS0+cmVxLmNvbXBsZXRlKCktPnB4YV9lcF9xdWV1ZSgpLT5oYW5kbGVfZXAoKQorICogICAgICBvcgorICogICAgICAgIHB4YV9lcF9xdWV1ZSgpLT5oYW5kbGVfZXAoKS0+cmVxX2RvbmUoKS0+cmVxLmNvbXBsZXRlKCktPnB4YV9lcF9xdWV1ZSgpCiAgKiBAaWR4OiBlbmRwb2ludCBpbmRleCAoMSA9PiBlcEEsIDIgPT4gZXBCLCAuLi4sIDI0ID0+IGVwWCkKICAqIEBuYW1lOiBlbmRwb2ludCBuYW1lIChmb3IgdHJhY2UvZGVidWcgcHVycG9zZSkKICAqIEBkaXJfaW46IDEgaWYgSU4gZW5kcG9pbnQsIDAgaWYgT1VUIGVuZHBvaW50CkBAIC0zNDYsNiArMzUxLDcgQEAKIAlzcGlubG9ja190CQlsb2NrOwkJLyogUHJvdGVjdHMgdGhpcyBzdHJ1Y3R1cmUgKi8KIAkJCQkJCS8qIChxdWV1ZXMsIHN0YXRzKSAqLwogCXVuc2lnbmVkCQllbmFibGVkOjE7CisJdW5zaWduZWQJCWluX2hhbmRsZV9lcDoxOwogCiAJdW5zaWduZWQJCWlkeDo1OwogCWNoYXIJCQkqbmFtZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9zM2MtaHNvdGcuYwppbmRleCA1ZmM4MGExLi5mNzQyYzhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvczNjLWhzb3RnLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3MzYy1oc290Zy5jCkBAIC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlIDxwbGF0L3JlZ3MtdXNiLWhzb3RnLXBoeS5oPgogI2luY2x1ZGUgPHBsYXQvcmVncy11c2ItaHNvdGcuaD4KLSNpbmNsdWRlIDxwbGF0L3JlZ3Mtc3lzLmg+CisjaW5jbHVkZSA8bWFjaC9yZWdzLXN5cy5oPgogI2luY2x1ZGUgPHBsYXQvdWRjLWhzLmg+CiAKICNkZWZpbmUgRE1BX0FERFJfSU5WQUxJRCAofigoZG1hX2FkZHJfdCkwKSkKQEAgLTMxNyw3ICszMTcsOCBAQAogICoKICAqIEFsbG9jYXRlIGEgbmV3IFVTQiByZXF1ZXN0IHN0cnVjdHVyZSBhcHByb3ByaWF0ZSBmb3IgdGhlIHNwZWNpZmllZCBlbmRwb2ludAogICovCi1zdHJ1Y3QgdXNiX3JlcXVlc3QgKnMzY19oc290Z19lcF9hbGxvY19yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKmVwLCBnZnBfdCBmbGFncykKK3N0YXRpYyBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnMzY19oc290Z19lcF9hbGxvY19yZXF1ZXN0KHN0cnVjdCB1c2JfZXAgKmVwLAorCQkJCQkJICAgICAgZ2ZwX3QgZmxhZ3MpCiB7CiAJc3RydWN0IHMzY19oc290Z19yZXEgKnJlcTsKIApAQCAtMzczLDcgKzM3NCw3IEBACiAJCXJlcS0+ZG1hID0gRE1BX0FERFJfSU5WQUxJRDsKIAkJaHNfcmVxLT5tYXBwZWQgPSAwOwogCX0gZWxzZSB7Ci0JCWRtYV9zeW5jX3NpbmdsZShoc290Zy0+ZGV2LCByZXEtPmRtYSwgcmVxLT5sZW5ndGgsIGRpcik7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGhzb3RnLT5kZXYsIHJlcS0+ZG1hLCByZXEtPmxlbmd0aCwgZGlyKTsKIAl9CiB9CiAKQEAgLTc1NSw3ICs3NTYsNyBAQAogCQloc19yZXEtPm1hcHBlZCA9IDE7CiAJCXJlcS0+ZG1hID0gZG1hOwogCX0gZWxzZSB7Ci0JCWRtYV9zeW5jX3NpbmdsZShoc290Zy0+ZGV2LCByZXEtPmRtYSwgcmVxLT5sZW5ndGgsIGRpcik7CisJCWRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGhzb3RnLT5kZXYsIHJlcS0+ZG1hLCByZXEtPmxlbmd0aCwgZGlyKTsKIAkJaHNfcmVxLT5tYXBwZWQgPSAwOwogCX0KIApAQCAtMTQ2MCw3ICsxNDYxLDcgQEAKICAqIGFzIHRoZSBhY3R1YWwgZGF0YSBzaG91bGQgYmUgc2VudCB0byB0aGUgbWVtb3J5IGRpcmVjdGx5IGFuZCB3ZSB0dXJuCiAgKiBvbiB0aGUgY29tcGxldGlvbiBpbnRlcnJ1cHRzIHRvIGdldCBub3RpZmljYXRpb25zIG9mIHRyYW5zZmVyIGNvbXBsZXRpb24uCiAgKi8KLXZvaWQgczNjX2hzb3RnX2hhbmRsZV9yeChzdHJ1Y3QgczNjX2hzb3RnICpoc290ZykKK3N0YXRpYyB2b2lkIHMzY19oc290Z19oYW5kbGVfcngoc3RydWN0IHMzY19oc290ZyAqaHNvdGcpCiB7CiAJdTMyIGdyeHN0c3IgPSByZWFkbChoc290Zy0+cmVncyArIFMzQ19HUlhTVFNQKTsKIAl1MzIgZXBudW0sIHN0YXR1cywgc2l6ZTsKQEAgLTMwOTQsNyArMzA5NSw3IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdHJ1Y3QgczNjX2hzb3RnX3BsYXQgczNjX2hzb3RnX2RlZmF1bHRfcGRhdGE7CitzdGF0aWMgc3RydWN0IHMzY19oc290Z19wbGF0IHMzY19oc290Z19kZWZhdWx0X3BkYXRhOwogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBzM2NfaHNvdGdfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5jCmluZGV4IDJmYzAyYmQuLjg0Y2ExOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuYwpAQCAtNzQ2LDYgKzc0NiwxMCBAQAogCS5uZG9fdmFsaWRhdGVfYWRkcgk9IGV0aF92YWxpZGF0ZV9hZGRyLAogfTsKIAorc3RhdGljIHN0cnVjdCBkZXZpY2VfdHlwZSBnYWRnZXRfdHlwZSA9IHsKKwkubmFtZQk9ICJnYWRnZXQiLAorfTsKKwogLyoqCiAgKiBnZXRoZXJfc2V0dXAgLSBpbml0aWFsaXplIG9uZSBldGhlcm5ldC1vdmVyLXVzYiBsaW5rCiAgKiBAZzogZ2FkZ2V0IHRvIGFzc29jaWF0ZWQgd2l0aCB0aGVzZSBsaW5rcwpAQCAtODA4LDYgKzgxMiw3IEBACiAKIAlkZXYtPmdhZGdldCA9IGc7CiAJU0VUX05FVERFVl9ERVYobmV0LCAmZy0+ZGV2KTsKKwlTRVRfTkVUREVWX0RFVlRZUEUobmV0LCAmZ2FkZ2V0X3R5cGUpOwogCiAJc3RhdHVzID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmggYi9kcml2ZXJzL3VzYi9nYWRnZXQvdV9ldGhlci5oCmluZGV4IGZkNTVmNDUuLjNjOGMwYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC91X2V0aGVyLmgKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3VfZXRoZXIuaApAQCAtOTMsMTMgKzkzLDYgQEAKIAlpZiAoIWdhZGdldF9zdXBwb3J0c19hbHRzZXR0aW5ncyhnYWRnZXQpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQkvKiBTQTExMDAgY2FuIGRvIEVDTSwgKndpdGhvdXQqIHN0YXR1cyBlbmRwb2ludCAuLi4gYnV0IHdlJ2xsCi0JICogb25seSB1c2UgaXQgaW4gbm9uLUVDTSBtb2RlIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQotCSAqIChhbmQgc2luY2Ugd2UgY3VycmVudGx5IHJlcXVpcmUgYSBzdGF0dXMgZW5kcG9pbnQpCi0JICovCi0JaWYgKGdhZGdldF9pc19zYTExMDAoZ2FkZ2V0KSkKLQkJcmV0dXJuIGZhbHNlOwotCiAJLyogRXZlcnl0aGluZyBlbHNlIGlzICpwcmVzdW1hYmx5KiBmaW5lIC4uLiBidXQgdGhpcyBpcyBhIGJpdAogCSAqIGNoYW5jeSwgc28gYmUgKipDRVJUQUlOKiogdGhlcmUgYXJlIG5vIGhhcmR3YXJlIGlzc3VlcyB3aXRoCiAJICogeW91ciBjb250cm9sbGVyLiAgQWRkIGl0IGFib3ZlIGlmIGl0IGNhbid0IGhhbmRsZSBDREMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3plcm8uYwppbmRleCAyZDc3MjQwLi5mYWM4MWVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvemVyby5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC96ZXJvLmMKQEAgLTI5NywxMiArMjk3LDEwIEBACiAJICovCiAJaWYgKGxvb3BkZWZhdWx0KSB7CiAJCWxvb3BiYWNrX2FkZChjZGV2LCBhdXRvcmVzdW1lICE9IDApOwotCQlpZiAoIWdhZGdldF9pc19zaChnYWRnZXQpKQotCQkJc291cmNlc2lua19hZGQoY2RldiwgYXV0b3Jlc3VtZSAhPSAwKTsKKwkJc291cmNlc2lua19hZGQoY2RldiwgYXV0b3Jlc3VtZSAhPSAwKTsKIAl9IGVsc2UgewogCQlzb3VyY2VzaW5rX2FkZChjZGV2LCBhdXRvcmVzdW1lICE9IDApOwotCQlpZiAoIWdhZGdldF9pc19zaChnYWRnZXQpKQotCQkJbG9vcGJhY2tfYWRkKGNkZXYsIGF1dG9yZXN1bWUgIT0gMCk7CisJCWxvb3BiYWNrX2FkZChjZGV2LCBhdXRvcmVzdW1lICE9IDApOwogCX0KIAogCWdjbnVtID0gdXNiX2dhZGdldF9jb250cm9sbGVyX251bWJlcihnYWRnZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCmluZGV4IDI2NzhhMTYuLjhkM2RmMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKQEAgLTM5OSwzICszOTksMTQgQEAKIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgImh3YS1oYyIuCisKK2NvbmZpZyBVU0JfSU1YMjFfSENECisgICAgICAgdHJpc3RhdGUgImlNWDIxIEhDRCBzdXBwb3J0IgorICAgICAgIGRlcGVuZHMgb24gVVNCICYmIEFSTSAmJiBNQUNIX01YMjEKKyAgICAgICBoZWxwCisgICAgICAgICBUaGlzIGRyaXZlciBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBvbi1jaGlwIFVTQiBob3N0IGluIHRoZQorICAgICAgICAgaU1YMjEgcHJvY2Vzc29yLgorCisgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKyAgICAgICAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCAiaW14MjEtaGNkIi4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2hvc3QvTWFrZWZpbGUKaW5kZXggZjU4YjI0OS4uNGUwYzY3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCkBAIC0zMiwzICszMiw1IEBACiBvYmotJChDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCkJKz0gcjhhNjY1OTctaGNkLm8KIG9iai0kKENPTkZJR19VU0JfSVNQMTc2MF9IQ0QpCSs9IGlzcDE3NjAubwogb2JqLSQoQ09ORklHX1VTQl9IV0FfSENEKQkrPSBod2EtaGMubworb2JqLSQoQ09ORklHX1VTQl9JTVgyMV9IQ0QpCSs9IGlteDIxLWhjZC5vCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdG1lbC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWF0bWVsLmMKaW5kZXggODdjMWI3Yy4uNTFiZDBlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWF0bWVsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWF0bWVsLmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCQlnb3RvIGZhaWxfcmVxdWVzdF9yZXNvdXJjZTsKIAl9CiAJaGNkLT5yc3JjX3N0YXJ0ID0gcmVzLT5zdGFydDsKLQloY2QtPnJzcmNfbGVuID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKKwloY2QtPnJzcmNfbGVuID0gcmVzb3VyY2Vfc2l6ZShyZXMpOwogCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLAogCQkJCWRyaXZlci0+ZGVzY3JpcHRpb24pKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMKaW5kZXggZGJmYjQ4Mi4uZTNhNzRlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWF1MXh4eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYwpAQCAtMTIxLDYgKzEyMSw3IEBACiB7CiAJc3RydWN0IHVzYl9oY2QgKmhjZDsKIAlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2k7CisJc3RydWN0IHJlc291cmNlICpyZXM7CiAJaW50IHJldDsKIAogCWlmICh1c2JfZGlzYWJsZWQoKSkKQEAgLTE0NCw4ICsxNDUsOSBAQAogCWlmICghaGNkKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWhjZC0+cnNyY19zdGFydCA9IHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OwotCWhjZC0+cnNyY19sZW4gPSBwZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDE7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwloY2QtPnJzcmNfc3RhcnQgPSByZXMtPnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSByZXNvdXJjZV9zaXplKHJlcyk7CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sIGhjZF9uYW1lKSkgewogCQlwcl9kZWJ1ZygicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jCmluZGV4IDk5MTE3NDkuLjBlMjZhYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMKQEAgLTEsNSArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IChjKSAyMDA1IE1vbnRhVmlzdGEgU29mdHdhcmUKKyAqIENvcHlyaWdodCAyMDA1LTIwMDkgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IDIwMDggICAgICBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKQEAgLTE3LDE3ICsxOCwyMCBAQAogICoKICAqIFBvcnRlZCB0byA4MzR4IGJ5IFJhbmR5IFZpbnNvbiA8cnZpbnNvbkBtdmlzdGEuY29tPiB1c2luZyBjb2RlIHByb3ZpZGVkCiAgKiBieSBIdW50ZXIgV3UuCisgKiBQb3dlciBNYW5hZ2VtZW50IHN1cHBvcnQgYnkgRGF2ZSBMaXUgPGRhdmVsaXVAZnJlZXNjYWxlLmNvbT4sCisgKiBKZXJyeSBIdWFuZyA8Q2hhbmctTWluZy5IdWFuZ0BmcmVlc2NhbGUuY29tPiBhbmQKKyAqIEFudG9uIFZvcm9udHNvdiA8YXZvcm9udHNvdkBydS5tdmlzdGEuY29tPi4KICAqLwogCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZnNsX2RldmljZXMuaD4KIAogI2luY2x1ZGUgImVoY2ktZnNsLmgiCiAKLS8qIEZJWE1FOiBQb3dlciBNYW5hZ2VtZW50IGlzIHVuLXBvcnRlZCBzbyB0ZW1wb3JhcmlseSBkaXNhYmxlIGl0ICovCi0jdW5kZWYgQ09ORklHX1BNCi0KLQogLyogY29uZmlndXJlIHNvIGFuIEhDIGRldmljZSBhbmQgaWQgYXJlIGFsd2F5cyBwcm92aWRlZCAqLwogLyogYWx3YXlzIGNhbGxlZCB3aXRoIHByb2Nlc3MgY29udGV4dDsgc2xlZXBpbmcgaXMgT0sgKi8KIApAQCAtNDAsOCArNDQsOCBAQAogICogQWxsb2NhdGVzIGJhc2ljIHJlc291cmNlcyBmb3IgdGhpcyBVU0IgaG9zdCBjb250cm9sbGVyLgogICoKICAqLwotaW50IHVzYl9oY2RfZnNsX3Byb2JlKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwKLQkJICAgICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgdXNiX2hjZF9mc2xfcHJvYmUoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorCQkJICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCXN0cnVjdCBmc2xfdXNiMl9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkOwpAQCAtMTQ3LDcgKzE1MSw4IEBACiAgKiBSZXZlcnNlcyB0aGUgZWZmZWN0IG9mIHVzYl9oY2RfZnNsX3Byb2JlKCkuCiAgKgogICovCi12b2lkIHVzYl9oY2RfZnNsX3JlbW92ZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIHZvaWQgdXNiX2hjZF9mc2xfcmVtb3ZlKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCQkgICAgICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAl1c2JfcmVtb3ZlX2hjZChoY2QpOwogCWlvdW5tYXAoaGNkLT5yZWdzKTsKQEAgLTI4NCwxMCArMjg5LDgxIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorc3RydWN0IGVoY2lfZnNsIHsKKwlzdHJ1Y3QgZWhjaV9oY2QJZWhjaTsKKworI2lmZGVmIENPTkZJR19QTQorCS8qIFNhdmVkIFVTQiBQSFkgc2V0dGluZ3MsIG5lZWQgdG8gcmVzdG9yZSBhZnRlciBkZWVwIHNsZWVwLiAqLworCXUzMiB1c2JfY3RybDsKKyNlbmRpZgorfTsKKworI2lmZGVmIENPTkZJR19QTQorCitzdGF0aWMgc3RydWN0IGVoY2lfZnNsICpoY2RfdG9fZWhjaV9mc2woc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kgPSBoY2RfdG9fZWhjaShoY2QpOworCisJcmV0dXJuIGNvbnRhaW5lcl9vZihlaGNpLCBzdHJ1Y3QgZWhjaV9mc2wsIGVoY2kpOworfQorCitzdGF0aWMgaW50IGVoY2lfZnNsX2Rydl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGVoY2lfZnNsICplaGNpX2ZzbCA9IGhjZF90b19laGNpX2ZzbChoY2QpOworCXZvaWQgX19pb21lbSAqbm9uX2VoY2kgPSBoY2QtPnJlZ3M7CisKKwlpZiAoIWZzbF9kZWVwX3NsZWVwKCkpCisJCXJldHVybiAwOworCisJZWhjaV9mc2wtPnVzYl9jdHJsID0gaW5fYmUzMihub25fZWhjaSArIEZTTF9TT0NfVVNCX0NUUkwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVoY2lfZnNsX2Rydl9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3QgZWhjaV9mc2wgKmVoY2lfZnNsID0gaGNkX3RvX2VoY2lfZnNsKGhjZCk7CisJc3RydWN0IGVoY2lfaGNkICplaGNpID0gaGNkX3RvX2VoY2koaGNkKTsKKwl2b2lkIF9faW9tZW0gKm5vbl9laGNpID0gaGNkLT5yZWdzOworCisJaWYgKCFmc2xfZGVlcF9zbGVlcCgpKQorCQlyZXR1cm4gMDsKKworCXVzYl9yb290X2h1Yl9sb3N0X3Bvd2VyKGhjZC0+c2VsZi5yb290X2h1Yik7CisKKwkvKiBSZXN0b3JlIFVTQiBQSFkgc2V0dGluZ3MgYW5kIGVuYWJsZSB0aGUgY29udHJvbGxlci4gKi8KKwlvdXRfYmUzMihub25fZWhjaSArIEZTTF9TT0NfVVNCX0NUUkwsIGVoY2lfZnNsLT51c2JfY3RybCk7CisKKwllaGNpX3Jlc2V0KGVoY2kpOworCWVoY2lfZnNsX3JlaW5pdChlaGNpKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVoY2lfZnNsX2Rydl9yZXN0b3JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwl1c2Jfcm9vdF9odWJfbG9zdF9wb3dlcihoY2QtPnNlbGYucm9vdF9odWIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGRldl9wbV9vcHMgZWhjaV9mc2xfcG1fb3BzID0geworCS5zdXNwZW5kID0gZWhjaV9mc2xfZHJ2X3N1c3BlbmQsCisJLnJlc3VtZSA9IGVoY2lfZnNsX2Rydl9yZXN1bWUsCisJLnJlc3RvcmUgPSBlaGNpX2ZzbF9kcnZfcmVzdG9yZSwKK307CisKKyNkZWZpbmUgRUhDSV9GU0xfUE1fT1BTCQkoJmVoY2lfZnNsX3BtX29wcykKKyNlbHNlCisjZGVmaW5lIEVIQ0lfRlNMX1BNX09QUwkJTlVMTAorI2VuZGlmIC8qIENPTkZJR19QTSAqLworCiBzdGF0aWMgY29uc3Qgc3RydWN0IGhjX2RyaXZlciBlaGNpX2ZzbF9oY19kcml2ZXIgPSB7CiAJLmRlc2NyaXB0aW9uID0gaGNkX25hbWUsCiAJLnByb2R1Y3RfZGVzYyA9ICJGcmVlc2NhbGUgT24tQ2hpcCBFSENJIEhvc3QgQ29udHJvbGxlciIsCi0JLmhjZF9wcml2X3NpemUgPSBzaXplb2Yoc3RydWN0IGVoY2lfaGNkKSwKKwkuaGNkX3ByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgZWhjaV9mc2wpLAogCiAJLyoKIAkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKQEAgLTM1NCw2ICs0MzAsNyBAQAogCS5yZW1vdmUgPSBlaGNpX2ZzbF9kcnZfcmVtb3ZlLAogCS5zaHV0ZG93biA9IHVzYl9oY2RfcGxhdGZvcm1fc2h1dGRvd24sCiAJLmRyaXZlciA9IHsKLQkJICAgLm5hbWUgPSAiZnNsLWVoY2kiLAorCQkubmFtZSA9ICJmc2wtZWhjaSIsCisJCS5wbSA9IEVIQ0lfRlNMX1BNX09QUywKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwppbmRleCAxZWMzODU3Li5kOGQ2ZDM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCkBAIC0xMTE4LDcgKzExMTgsNyBAQAogI2RlZmluZQlQTEFURk9STV9EUklWRVIJCWVoY2lfaGNkX2F1MXh4eF9kcml2ZXIKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDM0WFgKKyNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMwogI2luY2x1ZGUgImVoY2ktb21hcC5jIgogI2RlZmluZSAgICAgICAgUExBVEZPUk1fRFJJVkVSICAgICAgICAgZWhjaV9oY2Rfb21hcF9kcml2ZXIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW14Yy5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW14Yy5jCmluZGV4IDM1YzU2ZjQuLjIzY2Q5MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1teGMuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbXhjLmMKQEAgLTE2Miw2ICsxNjIsMTcgQEAKIAkJZ290byBlcnJfaW9yZW1hcDsKIAl9CiAKKwkvKiBjYWxsIHBsYXRmb3JtIHNwZWNpZmljIGluaXQgZnVuY3Rpb24gKi8KKwlpZiAocGRhdGEtPmluaXQpIHsKKwkJcmV0ID0gcGRhdGEtPmluaXQocGRldik7CisJCWlmIChyZXQpIHsKKwkJCWRldl9lcnIoZGV2LCAicGxhdGZvcm0gaW5pdCBmYWlsZWRcbiIpOworCQkJZ290byBlcnJfaW5pdDsKKwkJfQorCQkvKiBwbGF0Zm9ybXMgbmVlZCBzb21lIHRpbWUgdG8gc2V0dGxlIGNoYW5nZWQgSU8gc2V0dGluZ3MgKi8KKwkJbWRlbGF5KDEwKTsKKwl9CisKIAkvKiBlbmFibGUgY2xvY2tzICovCiAJcHJpdi0+dXNiY2xrID0gY2xrX2dldChkZXYsICJ1c2IiKTsKIAlpZiAoSVNfRVJSKHByaXYtPnVzYmNsaykpIHsKQEAgLTE5MiwxOCArMjAzLDYgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfaW5pdDsKIAotCS8qIGNhbGwgcGxhdGZvcm0gc3BlY2lmaWMgaW5pdCBmdW5jdGlvbiAqLwotCWlmIChwZGF0YS0+aW5pdCkgewotCQlyZXQgPSBwZGF0YS0+aW5pdChwZGV2KTsKLQkJaWYgKHJldCkgewotCQkJZGV2X2VycihkZXYsICJwbGF0Zm9ybSBpbml0IGZhaWxlZFxuIik7Ci0JCQlnb3RvIGVycl9pbml0OwotCQl9Ci0JfQotCi0JLyogbW9zdCBwbGF0Zm9ybXMgbmVlZCBzb21lIHRpbWUgdG8gc2V0dGxlIGNoYW5nZWQgSU8gc2V0dGluZ3MgKi8KLQltZGVsYXkoMTApOwotCiAJLyogSW5pdGlhbGl6ZSB0aGUgdHJhbnNjZWl2ZXIgKi8KIAlpZiAocGRhdGEtPm90ZykgewogCQlwZGF0YS0+b3RnLT5pb19wcml2ID0gaGNkLT5yZWdzICsgVUxQSV9WSUVXUE9SVF9PRkZTRVQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW9tYXAuYwppbmRleCA3NGQwN2Y0Li5mMDI4MmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb21hcC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1vbWFwLmMKQEAgLTI2LDEwICsyNiw5IEBACiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgVVNBCiAgKgotICogVE9ETyAobGFzdCB1cGRhdGVkIEZlYiAyM3JkLCAyMDA5KToKKyAqIFRPRE8gKGxhc3QgdXBkYXRlZCBGZWIgMTIsIDIwMTApOgogICoJLSBhZGQga2VybmVsLWRvYwogICoJLSBlbmFibGUgQVVUT0lETEUKLSAqCS0gbW92ZSBEUExMNSBwcm9ncmFtbWluZyB0byBjbG9jayBmdwogICoJLSBhZGQgc3VzcGVuZC9yZXN1bWUKICAqCS0gbW92ZSB3b3JrYXJvdW5kcyB0byBib2FyZC1maWxlcwogICovCkBAIC0zNyw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogI2luY2x1ZGUgPHBsYXQvdXNiLmg+CiAKIC8qCkBAIC0xNzgsNiArMTc4LDExIEBACiAJdm9pZCBfX2lvbWVtCQkqdWhoX2Jhc2U7CiAJdm9pZCBfX2lvbWVtCQkqdGxsX2Jhc2U7CiAJdm9pZCBfX2lvbWVtCQkqZWhjaV9iYXNlOworCisJLyogUmVndWxhdG9ycyBmb3IgVVNCIFBIWXMuCisJICogRWFjaCBQSFkgY2FuIGhhdmUgYSBzZXBlcmF0ZSByZWd1bGF0b3IuCisJICovCisJc3RydWN0IHJlZ3VsYXRvciAgICAgICAgKnJlZ3VsYXRvcltPTUFQM19IU19VU0JfUE9SVFNdOwogfTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTU0Niw2ICs1NTEsOCBAQAogCiAJaW50IGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CiAJaW50IHJldCA9IC1FTk9ERVY7CisJaW50IGk7CisJY2hhciBzdXBwbHlbN107CiAKIAlpZiAoIXBkYXRhKSB7CiAJCWRldl9kYmcoJnBkZXYtPmRldiwgIm1pc3NpbmcgcGxhdGZvcm1fZGF0YVxuIik7CkBAIC02MTMsNiArNjIwLDIxIEBACiAJCWdvdG8gZXJyX3RsbF9pb3JlbWFwOwogCX0KIAorCS8qIGdldCBlaGNpIHJlZ3VsYXRvciBhbmQgZW5hYmxlICovCisJZm9yIChpID0gMCA7IGkgPCBPTUFQM19IU19VU0JfUE9SVFMgOyBpKyspIHsKKwkJaWYgKG9tYXAtPnBvcnRfbW9kZVtpXSAhPSBFSENJX0hDRF9PTUFQX01PREVfUEhZKSB7CisJCQlvbWFwLT5yZWd1bGF0b3JbaV0gPSBOVUxMOworCQkJY29udGludWU7CisJCX0KKwkJc25wcmludGYoc3VwcGx5LCBzaXplb2Yoc3VwcGx5KSwgImhzdXNiJWQiLCBpKTsKKwkJb21hcC0+cmVndWxhdG9yW2ldID0gcmVndWxhdG9yX2dldChvbWFwLT5kZXYsIHN1cHBseSk7CisJCWlmIChJU19FUlIob21hcC0+cmVndWxhdG9yW2ldKSkKKwkJCWRldl9kYmcoJnBkZXYtPmRldiwKKwkJCSJmYWlsZWQgdG8gZ2V0IGVoY2kgcG9ydCVkIHJlZ3VsYXRvclxuIiwgaSk7CisJCWVsc2UKKwkJCXJlZ3VsYXRvcl9lbmFibGUob21hcC0+cmVndWxhdG9yW2ldKTsKKwl9CisKIAlyZXQgPSBvbWFwX3N0YXJ0X2VoYyhvbWFwLCBoY2QpOwogCWlmIChyZXQpIHsKIAkJZGV2X2RiZygmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHN0YXJ0IGVoY2lcbiIpOwpAQCAtNjIyLDEzICs2NDQsMTIgQEAKIAlvbWFwLT5laGNpLT5yZWdzID0gaGNkLT5yZWdzCiAJCSsgSENfTEVOR1RIKHJlYWRsKCZvbWFwLT5laGNpLT5jYXBzLT5oY19jYXBiYXNlKSk7CiAKKwlkYmdfaGNzX3BhcmFtcyhvbWFwLT5laGNpLCAicmVzZXQiKTsKKwlkYmdfaGNjX3BhcmFtcyhvbWFwLT5laGNpLCAicmVzZXQiKTsKKwogCS8qIGNhY2hlIHRoaXMgcmVhZG9ubHkgZGF0YTsgbWluaW1pemUgY2hpcCByZWFkcyAqLwogCW9tYXAtPmVoY2ktPmhjc19wYXJhbXMgPSByZWFkbCgmb21hcC0+ZWhjaS0+Y2Fwcy0+aGNzX3BhcmFtcyk7CiAKLQkvKiBTRVQgMSBtaWNyby1mcmFtZSBJbnRlcnJ1cHQgaW50ZXJ2YWwgKi8KLQl3cml0ZWwocmVhZGwoJm9tYXAtPmVoY2ktPnJlZ3MtPmNvbW1hbmQpIHwgKDEgPDwgMTYpLAotCQkJJm9tYXAtPmVoY2ktPnJlZ3MtPmNvbW1hbmQpOwotCiAJcmV0ID0gdXNiX2FkZF9oY2QoaGNkLCBpcnEsIElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCk7CiAJaWYgKHJldCkgewogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWRkIGhjZCB3aXRoIGVyciAlZFxuIiwgcmV0KTsKQEAgLTY0MSw2ICs2NjIsMTIgQEAKIAlvbWFwX3N0b3BfZWhjKG9tYXAsIGhjZCk7CiAKIGVycl9zdGFydDoKKwlmb3IgKGkgPSAwIDsgaSA8IE9NQVAzX0hTX1VTQl9QT1JUUyA7IGkrKykgeworCQlpZiAob21hcC0+cmVndWxhdG9yW2ldKSB7CisJCQlyZWd1bGF0b3JfZGlzYWJsZShvbWFwLT5yZWd1bGF0b3JbaV0pOworCQkJcmVndWxhdG9yX3B1dChvbWFwLT5yZWd1bGF0b3JbaV0pOworCQl9CisJfQogCWlvdW5tYXAob21hcC0+dGxsX2Jhc2UpOwogCiBlcnJfdGxsX2lvcmVtYXA6CkBAIC02NzQsMTMgKzcwMSwyMSBAQAogewogCXN0cnVjdCBlaGNpX2hjZF9vbWFwICpvbWFwID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CiAJc3RydWN0IHVzYl9oY2QgKmhjZCA9IGVoY2lfdG9faGNkKG9tYXAtPmVoY2kpOworCWludCBpOwogCiAJdXNiX3JlbW92ZV9oY2QoaGNkKTsKIAlvbWFwX3N0b3BfZWhjKG9tYXAsIGhjZCk7CiAJaW91bm1hcChoY2QtPnJlZ3MpOworCWZvciAoaSA9IDAgOyBpIDwgT01BUDNfSFNfVVNCX1BPUlRTIDsgaSsrKSB7CisJCWlmIChvbWFwLT5yZWd1bGF0b3JbaV0pIHsKKwkJCXJlZ3VsYXRvcl9kaXNhYmxlKG9tYXAtPnJlZ3VsYXRvcltpXSk7CisJCQlyZWd1bGF0b3JfcHV0KG9tYXAtPnJlZ3VsYXRvcltpXSk7CisJCX0KKwl9CiAJaW91bm1hcChvbWFwLT50bGxfYmFzZSk7CiAJaW91bm1hcChvbWFwLT51aGhfYmFzZSk7CiAJdXNiX3B1dF9oY2QoaGNkKTsKKwlrZnJlZShvbWFwKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW9yaW9uLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb3Jpb24uYwppbmRleCAxZDI4M2UxLi4wZjg3ZGM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb3Jpb24uYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktb3Jpb24uYwpAQCAtMjIyLDE0ICsyMjIsMTQgQEAKIAkJZ290byBlcnIxOwogCX0KIAotCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEsCisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLAogCQkJCWVoY2lfb3Jpb25faGNfZHJpdmVyLmRlc2NyaXB0aW9uKSkgewogCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJjb250cm9sbGVyIGFscmVhZHkgaW4gdXNlXG4iKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGVycjE7CiAJfQogCi0JcmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSk7CisJcmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKIAlpZiAocmVncyA9PSBOVUxMKSB7CiAJCWRldl9kYmcoJnBkZXYtPmRldiwgImVycm9yIG1hcHBpbmcgbWVtb3J5XG4iKTsKIAkJZXJyID0gLUVGQVVMVDsKQEAgLTI0NCw3ICsyNDQsNyBAQAogCX0KIAogCWhjZC0+cnNyY19zdGFydCA9IHJlcy0+c3RhcnQ7Ci0JaGNkLT5yc3JjX2xlbiA9IHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDE7CisJaGNkLT5yc3JjX2xlbiA9IHJlc291cmNlX3NpemUocmVzKTsKIAloY2QtPnJlZ3MgPSByZWdzOwogCiAJZWhjaSA9IGhjZF90b19laGNpKGhjZCk7CkBAIC0yODcsNyArMjg3LDcgQEAKIGVycjM6CiAJaW91bm1hcChyZWdzKTsKIGVycjI6Ci0JcmVsZWFzZV9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHJlcykpOwogZXJyMToKIAlkZXZfZXJyKCZwZGV2LT5kZXYsICJpbml0ICVzIGZhaWwsICVkXG4iLAogCQlkZXZfbmFtZSgmcGRldi0+ZGV2KSwgZXJyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wcGMtb2YuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wcGMtb2YuYwppbmRleCAzNmY5NmRhLi44ZGYzM2I4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcHBjLW9mLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBwYy1vZi5jCkBAIC0xMzQsMjEgKzEzNCwyMSBAQAogCWhjZC0+cnNyY19sZW4gPSByZXMuZW5kIC0gcmVzLnN0YXJ0ICsgMTsKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwgaGNkX25hbWUpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBfX0ZJTEVfXyAiOiByZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogcmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIiwgX19GSUxFX18pOwogCQlydiA9IC1FQlVTWTsKIAkJZ290byBlcnJfcm1yOwogCX0KIAogCWlycSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKGRuLCAwKTsKIAlpZiAoaXJxID09IE5PX0lSUSkgewotCQlwcmludGsoS0VSTl9FUlIgX19GSUxFX18gIjogaXJxX29mX3BhcnNlX2FuZF9tYXAgZmFpbGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaXJxX29mX3BhcnNlX2FuZF9tYXAgZmFpbGVkXG4iLCBfX0ZJTEVfXyk7CiAJCXJ2ID0gLUVCVVNZOwogCQlnb3RvIGVycl9pcnE7CiAJfQogCiAJaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwogCWlmICghaGNkLT5yZWdzKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBfX0ZJTEVfXyAiOiBpb3JlbWFwIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlvcmVtYXAgZmFpbGVkXG4iLCBfX0ZJTEVfXyk7CiAJCXJ2ID0gLUVOT01FTTsKIAkJZ290byBlcnJfaW9yZW1hcDsKIAl9CkBAIC0xNjEsOSArMTYxLDkgQEAKIAkJCWVoY2ktPm9oY2lfaGNjdHJsX3JlZyA9IGlvcmVtYXAocmVzLnN0YXJ0ICsKIAkJCQkJT0hDSV9IQ0NUUkxfT0ZGU0VULCBPSENJX0hDQ1RSTF9MRU4pOwogCQllbHNlCi0JCQlwcl9kZWJ1ZyhfX0ZJTEVfXyAiOiBubyBvaGNpIG9mZnNldCBpbiBmZHRcbiIpOworCQkJcHJfZGVidWcoIiVzOiBubyBvaGNpIG9mZnNldCBpbiBmZHRcbiIsIF9fRklMRV9fKTsKIAkJaWYgKCFlaGNpLT5vaGNpX2hjY3RybF9yZWcpIHsKLQkJCXByX2RlYnVnKF9fRklMRV9fICI6IGlvcmVtYXAgZm9yIG9oY2kgaGNjdHJsIGZhaWxlZFxuIik7CisJCQlwcl9kZWJ1ZygiJXM6IGlvcmVtYXAgZm9yIG9oY2kgaGNjdHJsIGZhaWxlZFxuIiwgX19GSUxFX18pOwogCQl9IGVsc2UgewogCQkJZWhjaS0+aGFzX2FtY2NfdXNiMjMgPSAxOwogCQl9CkBAIC0yNDEsNyArMjQxLDcgQEAKIAkJCQllbHNlCiAJCQkJCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMuc3RhcnQsIDB4NCk7CiAJCQllbHNlCi0JCQkJcHJfZGVidWcoX19GSUxFX18gIjogbm8gb2hjaSBvZmZzZXQgaW4gZmR0XG4iKTsKKwkJCQlwcl9kZWJ1ZygiJXM6IG5vIG9oY2kgb2Zmc2V0IGluIGZkdFxuIiwgX19GSUxFX18pOwogCQkJb2Zfbm9kZV9wdXQobnApOwogCQl9CiAKQEAgLTI2NCw3ICsyNjQsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGVoY2lfaGNkX3BwY19vZl9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZWhjaV9oY2RfcHBjX29mX21hdGNoW10gPSB7CiAJewogCQkuY29tcGF0aWJsZSA9ICJ1c2ItZWhjaSIsCiAJfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1zY2hlZC5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKaW5kZXggMWUzOTFlNi4uMzkzNDBhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMKQEAgLTUxMCw2ICs1MTAsOCBAQAogCWVoY2lfd3JpdGVsKGVoY2ksIGNtZCwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOwogCS8qIHBvc3RlZCB3cml0ZSAuLi4gKi8KIAorCWZyZWVfY2FjaGVkX2l0ZF9saXN0KGVoY2kpOworCiAJZWhjaS0+bmV4dF91ZnJhbWUgPSAtMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIzMjIsOSArMjMyNCwxMyBAQAogCQkJCSAqIE5vIG5lZWQgdG8gY2hlY2sgZm9yIGFjdGl2aXR5IHVubGVzcyB0aGUKIAkJCQkgKiBmcmFtZSBpcyBjdXJyZW50LgogCQkJCSAqLwotCQkJCWlmIChmcmFtZSA9PSBjbG9ja19mcmFtZSAmJiBsaXZlICYmCi0JCQkJCQkocS5zaXRkLT5od19yZXN1bHRzICYKLQkJCQkJCQlTSVREX0FDVElWRShlaGNpKSkpIHsKKwkJCQlpZiAoKChmcmFtZSA9PSBjbG9ja19mcmFtZSkgfHwKKwkJCQkgICAgICgoKGZyYW1lICsgMSkgJSBlaGNpLT5wZXJpb2RpY19zaXplKQorCQkJCSAgICAgID09IGNsb2NrX2ZyYW1lKSkKKwkJCQkgICAgJiYgbGl2ZQorCQkJCSAgICAmJiAocS5zaXRkLT5od19yZXN1bHRzICYKKwkJCQkJU0lURF9BQ1RJVkUoZWhjaSkpKSB7CisKIAkJCQkJaW5jb21wbGV0ZSA9IHRydWU7CiAJCQkJCXFfcCA9ICZxLnNpdGQtPnNpdGRfbmV4dDsKIAkJCQkJaHdfcCA9ICZxLnNpdGQtPmh3X25leHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kteGlsaW54LW9mLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2kteGlsaW54LW9mLmMKaW5kZXggYTU4NjE1MzEuLmY2MDNiYjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS14aWxpbngtb2YuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2kteGlsaW54LW9mLmMKQEAgLTE3NywyMSArMTc3LDIxIEBACiAJaGNkLT5yc3JjX2xlbiA9IHJlcy5lbmQgLSByZXMuc3RhcnQgKyAxOwogCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIF9fRklMRV9fICI6IHJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiByZXF1ZXN0X21lbV9yZWdpb24gZmFpbGVkXG4iLCBfX0ZJTEVfXyk7CiAJCXJ2ID0gLUVCVVNZOwogCQlnb3RvIGVycl9ybXI7CiAJfQogCiAJaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAoZG4sIDApOwogCWlmIChpcnEgPT0gTk9fSVJRKSB7Ci0JCXByaW50ayhLRVJOX0VSUiBfX0ZJTEVfXyAiOiBpcnFfb2ZfcGFyc2VfYW5kX21hcCBmYWlsZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpcnFfb2ZfcGFyc2VfYW5kX21hcCBmYWlsZWRcbiIsIF9fRklMRV9fKTsKIAkJcnYgPSAtRUJVU1k7CiAJCWdvdG8gZXJyX2lycTsKIAl9CiAKIAloY2QtPnJlZ3MgPSBpb3JlbWFwKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CiAJaWYgKCFoY2QtPnJlZ3MpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIF9fRklMRV9fICI6IGlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW9yZW1hcCBmYWlsZWRcbiIsIF9fRklMRV9fKTsKIAkJcnYgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9pb3JlbWFwOwogCX0KQEAgLTI4MSw3ICsyODEsNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGVoY2lfaGNkX3hpbGlueF9vZl9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgZWhjaV9oY2RfeGlsaW54X29mX21hdGNoW10gPSB7CiAJCXsuY29tcGF0aWJsZSA9ICJ4bG54LHhwcy11c2ItaG9zdC0xLjAwLmEiLH0sCiAJe30sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9maGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9maGNpLWhjZC5jCmluZGV4IDc4ZTdjM2MuLjVkY2ZiM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZmhjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2ZoY2ktaGNkLmMKQEAgLTQzMyw3ICs0MzMsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIGFsbG9jYXRlIHRoZSBwcml2YXRlIHBhcnQgb2YgdGhlIFVSQiAqLwotCXVyYl9wcml2LT50ZHMgPSBremFsbG9jKHNpemUgKiBzaXplb2Yoc3RydWN0IHRkKSwgbWVtX2ZsYWdzKTsKKwl1cmJfcHJpdi0+dGRzID0ga2NhbGxvYyhzaXplLCBzaXplb2YoKnVyYl9wcml2LT50ZHMpLCBtZW1fZmxhZ3MpOwogCWlmICghdXJiX3ByaXYtPnRkcykgewogCQlrZnJlZSh1cmJfcHJpdik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtODA1LDcgKzgwNSw3IEBACiAJcmV0dXJuIGZoY2lfcmVtb3ZlKCZvZmRldi0+ZGV2KTsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfZmhjaV9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfZmhjaV9tYXRjaFtdID0gewogCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzgzMjMtcWUtdXNiIiwgfSwKIAl7fSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lteDIxLWRiZy5jIGIvZHJpdmVycy91c2IvaG9zdC9pbXgyMS1kYmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTJmNjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pbXgyMS1kYmcuYwpAQCAtMCwwICsxLDUyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBieSBNYXJ0aW4gRnV6emV5CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWQorICogb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyogdGhpcyBmaWxlIGlzIHBhcnQgb2YgaW14MjEtaGNkLmMgKi8KKworI2lmbmRlZiBERUJVRworCitzdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlX2RlYnVnX2ZpbGVzKHN0cnVjdCBpbXgyMSAqaW14MjEpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZV9kZWJ1Z19maWxlcyhzdHJ1Y3QgaW14MjEgKmlteDIxKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z191cmJfc3VibWl0dGVkKHN0cnVjdCBpbXgyMSAqaW14MjEsIHN0cnVjdCB1cmIgKnVyYikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z191cmJfY29tcGxldGVkKHN0cnVjdCBpbXgyMSAqaW14MjEsIHN0cnVjdCB1cmIgKnVyYiwKKwlpbnQgc3RhdHVzKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX3VyYl91bmxpbmtlZChzdHJ1Y3QgaW14MjEgKmlteDIxLCBzdHJ1Y3QgdXJiICp1cmIpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfdXJiX3F1ZXVlZF9mb3JfZXRkKHN0cnVjdCBpbXgyMSAqaW14MjEsCisJc3RydWN0IHVyYiAqdXJiKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX3VyYl9xdWV1ZWRfZm9yX2RtZW0oc3RydWN0IGlteDIxICppbXgyMSwKKwlzdHJ1Y3QgdXJiICp1cmIpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfZXRkX2FsbG9jYXRlZChzdHJ1Y3QgaW14MjEgKmlteDIxKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2V0ZF9mcmVlZChzdHJ1Y3QgaW14MjEgKmlteDIxKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2RtZW1fYWxsb2NhdGVkKHN0cnVjdCBpbXgyMSAqaW14MjEsIGludCBzaXplKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2RtZW1fZnJlZWQoc3RydWN0IGlteDIxICppbXgyMSwgaW50IHNpemUpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfaXNvY19zdWJtaXR0ZWQoc3RydWN0IGlteDIxICppbXgyMSwKKwlpbnQgZnJhbWUsIHN0cnVjdCB0ZCAqdGQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfaXNvY19jb21wbGV0ZWQoc3RydWN0IGlteDIxICppbXgyMSwKKwlpbnQgZnJhbWUsIHN0cnVjdCB0ZCAqdGQsIGludCBjYywgaW50IGxlbikge30KKworI2Vsc2UKKworI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorCitzdGF0aWMgY29uc3QgY2hhciAqZGlyX2xhYmVsc1tdID0geworCSJURCAwIiwKKwkiT1VUIiwKKwkiSU4iLAorCSJURCAxIgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnNwZWVkX2xhYmVsc1tdID0geworCSJGdWxsIiwKKwkiTG93IgorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmZvcm1hdF9sYWJlbHNbXSA9IHsKKwkiQ29udHJvbCIsCisJIklTTyIsCisJIkJ1bGsiLAorCSJJbnRlcnJ1cHQiCit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkZWJ1Z19zdGF0cyAqc3RhdHNfZm9yX3VyYihzdHJ1Y3QgaW14MjEgKmlteDIxLAorCXN0cnVjdCB1cmIgKnVyYikKK3sKKwlyZXR1cm4gdXNiX3BpcGVpc29jKHVyYi0+cGlwZSkgPworCQkmaW14MjEtPmlzb2Nfc3RhdHMgOiAmaW14MjEtPm5vbmlzb2Nfc3RhdHM7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnX3VyYl9zdWJtaXR0ZWQoc3RydWN0IGlteDIxICppbXgyMSwgc3RydWN0IHVyYiAqdXJiKQoreworCXN0YXRzX2Zvcl91cmIoaW14MjEsIHVyYiktPnN1Ym1pdHRlZCsrOworfQorCitzdGF0aWMgdm9pZCBkZWJ1Z191cmJfY29tcGxldGVkKHN0cnVjdCBpbXgyMSAqaW14MjEsIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0KQoreworCWlmIChzdCkKKwkJc3RhdHNfZm9yX3VyYihpbXgyMSwgdXJiKS0+Y29tcGxldGVkX2ZhaWxlZCsrOworCWVsc2UKKwkJc3RhdHNfZm9yX3VyYihpbXgyMSwgdXJiKS0+Y29tcGxldGVkX29rKys7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnX3VyYl91bmxpbmtlZChzdHJ1Y3QgaW14MjEgKmlteDIxLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RhdHNfZm9yX3VyYihpbXgyMSwgdXJiKS0+dW5saW5rZWQrKzsKK30KKworc3RhdGljIHZvaWQgZGVidWdfdXJiX3F1ZXVlZF9mb3JfZXRkKHN0cnVjdCBpbXgyMSAqaW14MjEsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdGF0c19mb3JfdXJiKGlteDIxLCB1cmIpLT5xdWV1ZV9ldGQrKzsKK30KKworc3RhdGljIHZvaWQgZGVidWdfdXJiX3F1ZXVlZF9mb3JfZG1lbShzdHJ1Y3QgaW14MjEgKmlteDIxLCBzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RhdHNfZm9yX3VyYihpbXgyMSwgdXJiKS0+cXVldWVfZG1lbSsrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfZXRkX2FsbG9jYXRlZChzdHJ1Y3QgaW14MjEgKmlteDIxKQoreworCWlteDIxLT5ldGRfdXNhZ2UubWF4aW11bSA9IG1heCgKKwkJCSsrKGlteDIxLT5ldGRfdXNhZ2UudmFsdWUpLAorCQkJaW14MjEtPmV0ZF91c2FnZS5tYXhpbXVtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2V0ZF9mcmVlZChzdHJ1Y3QgaW14MjEgKmlteDIxKQoreworCWlteDIxLT5ldGRfdXNhZ2UudmFsdWUtLTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2RtZW1fYWxsb2NhdGVkKHN0cnVjdCBpbXgyMSAqaW14MjEsIGludCBzaXplKQoreworCWlteDIxLT5kbWVtX3VzYWdlLnZhbHVlICs9IHNpemU7CisJaW14MjEtPmRtZW1fdXNhZ2UubWF4aW11bSA9IG1heCgKKwkJCWlteDIxLT5kbWVtX3VzYWdlLnZhbHVlLAorCQkJaW14MjEtPmRtZW1fdXNhZ2UubWF4aW11bSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19kbWVtX2ZyZWVkKHN0cnVjdCBpbXgyMSAqaW14MjEsIGludCBzaXplKQoreworCWlteDIxLT5kbWVtX3VzYWdlLnZhbHVlIC09IHNpemU7Cit9CisKKworc3RhdGljIHZvaWQgZGVidWdfaXNvY19zdWJtaXR0ZWQoc3RydWN0IGlteDIxICppbXgyMSwKKwlpbnQgZnJhbWUsIHN0cnVjdCB0ZCAqdGQpCit7CisJc3RydWN0IGRlYnVnX2lzb2NfdHJhY2UgKnRyYWNlID0gJmlteDIxLT5pc29jX3RyYWNlWworCQlpbXgyMS0+aXNvY190cmFjZV9pbmRleCsrXTsKKworCWlteDIxLT5pc29jX3RyYWNlX2luZGV4ICU9IEFSUkFZX1NJWkUoaW14MjEtPmlzb2NfdHJhY2UpOworCXRyYWNlLT5zY2hlZHVsZV9mcmFtZSA9IHRkLT5mcmFtZTsKKwl0cmFjZS0+c3VibWl0X2ZyYW1lID0gZnJhbWU7CisJdHJhY2UtPnJlcXVlc3RfbGVuID0gdGQtPmxlbjsKKwl0cmFjZS0+dGQgPSB0ZDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2lzb2NfY29tcGxldGVkKHN0cnVjdCBpbXgyMSAqaW14MjEsCisJaW50IGZyYW1lLCBzdHJ1Y3QgdGQgKnRkLCBpbnQgY2MsIGludCBsZW4pCit7CisJc3RydWN0IGRlYnVnX2lzb2NfdHJhY2UgKnRyYWNlLCAqdHJhY2VfZmFpbGVkOworCWludCBpOworCWludCBmb3VuZCA9IDA7CisKKwl0cmFjZSA9IGlteDIxLT5pc29jX3RyYWNlOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlteDIxLT5pc29jX3RyYWNlKTsgaSsrLCB0cmFjZSsrKSB7CisJCWlmICh0cmFjZS0+dGQgPT0gdGQpIHsKKwkJCXRyYWNlLT5kb25lX2ZyYW1lID0gZnJhbWU7CisJCQl0cmFjZS0+ZG9uZV9sZW4gPSBsZW47CisJCQl0cmFjZS0+Y2MgPSBjYzsKKwkJCXRyYWNlLT50ZCA9IE5VTEw7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChmb3VuZCAmJiBjYykgeworCQl0cmFjZV9mYWlsZWQgPSAmaW14MjEtPmlzb2NfdHJhY2VfZmFpbGVkWworCQkJCQlpbXgyMS0+aXNvY190cmFjZV9pbmRleF9mYWlsZWQrK107CisKKwkJaW14MjEtPmlzb2NfdHJhY2VfaW5kZXhfZmFpbGVkICU9IEFSUkFZX1NJWkUoCisJCQkJCQlpbXgyMS0+aXNvY190cmFjZV9mYWlsZWQpOworCQkqdHJhY2VfZmFpbGVkID0gKnRyYWNlOworCX0KK30KKworCitzdGF0aWMgY2hhciAqZm9ybWF0X2VwKHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAsIGNoYXIgKmJ1ZiwgaW50IGJ1ZnNpemUpCit7CisJaWYgKGVwKQorCQlzbnByaW50ZihidWYsIGJ1ZnNpemUsICJlcF8lMDJ4ICh0eXBlOiUwMlgga2FkZHI6JXApIiwKKwkJCWVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MsCisJCQl1c2JfZW5kcG9pbnRfdHlwZSgmZXAtPmRlc2MpLAorCQkJZXApOworCWVsc2UKKwkJc25wcmludGYoYnVmLCBidWZzaXplLCAibm9uZSIpOworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyBjaGFyICpmb3JtYXRfZXRkX2R3b3JkMCh1MzIgdmFsdWUsIGNoYXIgKmJ1ZiwgaW50IGJ1ZnNpemUpCit7CisJc25wcmludGYoYnVmLCBidWZzaXplLAorCQkiYWRkcj0lZCBlcD0lZCBkaXI9JXMgc3BlZWQ9JXMgZm9ybWF0PSVzIGhhbHRlZD0lZCIsCisJCXZhbHVlICYgMHg3RiwKKwkJKHZhbHVlID4+IERXMF9FTkRQTlQpICYgMHgwRiwKKwkJZGlyX2xhYmVsc1sodmFsdWUgPj4gRFcwX0RJUkVDVCkgJiAweDAzXSwKKwkJc3BlZWRfbGFiZWxzWyh2YWx1ZSA+PiBEVzBfU1BFRUQpICYgMHgwMV0sCisJCWZvcm1hdF9sYWJlbHNbKHZhbHVlID4+IERXMF9GT1JNQVQpICYgMHgwM10sCisJCSh2YWx1ZSA+PiBEVzBfSEFMVEVEKSAmIDB4MDEpOworCXJldHVybiBidWY7Cit9CisKK3N0YXRpYyBpbnQgZGVidWdfc3RhdHVzX3Nob3coc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICp2KQoreworCXN0cnVjdCBpbXgyMSAqaW14MjEgPSBzLT5wcml2YXRlOworCWludCBldGRzX2FsbG9jYXRlZCA9IDA7CisJaW50IGV0ZHNfc3dfYnVzeSA9IDA7CisJaW50IGV0ZHNfaHdfYnVzeSA9IDA7CisJaW50IGRtZW1fYmxvY2tzID0gMDsKKwlpbnQgcXVldWVkX2Zvcl9ldGQgPSAwOworCWludCBxdWV1ZWRfZm9yX2RtZW0gPSAwOworCXVuc2lnbmVkIGludCBkbWVtX2J5dGVzID0gMDsKKwlpbnQgaTsKKwlzdHJ1Y3QgZXRkX3ByaXYgKmV0ZDsKKwl1MzIgZXRkX2VuYWJsZV9tYXNrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IGlteDIxX2RtZW1fYXJlYSAqZG1lbTsKKwlzdHJ1Y3QgZXBfcHJpdiAqZXBfcHJpdjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbXgyMS0+bG9jaywgZmxhZ3MpOworCisJZXRkX2VuYWJsZV9tYXNrID0gcmVhZGwoaW14MjEtPnJlZ3MgKyBVU0JIX0VUREVOU0VUKTsKKwlmb3IgKGkgPSAwLCBldGQgPSBpbXgyMS0+ZXRkOyBpIDwgVVNCX05VTV9FVEQ7IGkrKywgZXRkKyspIHsKKwkJaWYgKGV0ZC0+YWxsb2MpCisJCQlldGRzX2FsbG9jYXRlZCsrOworCQlpZiAoZXRkLT51cmIpCisJCQlldGRzX3N3X2J1c3krKzsKKwkJaWYgKGV0ZF9lbmFibGVfbWFzayAmICgxPDxpKSkKKwkJCWV0ZHNfaHdfYnVzeSsrOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG1lbSwgJmlteDIxLT5kbWVtX2xpc3QsIGxpc3QpIHsKKwkJZG1lbV9ieXRlcyArPSBkbWVtLT5zaXplOworCQlkbWVtX2Jsb2NrcysrOworCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXBfcHJpdiwgJmlteDIxLT5xdWV1ZV9mb3JfZXRkLCBxdWV1ZSkKKwkJcXVldWVkX2Zvcl9ldGQrKzsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZXRkLCAmaW14MjEtPnF1ZXVlX2Zvcl9kbWVtLCBxdWV1ZSkKKwkJcXVldWVkX2Zvcl9kbWVtKys7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbXgyMS0+bG9jaywgZmxhZ3MpOworCisJc2VxX3ByaW50ZihzLAorCQkiRnJhbWU6ICVkXG4iCisJCSJFVERzIGFsbG9jYXRlZDogJWQvJWQgKG1heD0lZClcbiIKKwkJIkVURHMgaW4gdXNlIHN3OiAlZFxuIgorCQkiRVREcyBpbiB1c2UgaHc6ICVkXG4iCisJCSJETUVNIGFsb2NhdGVkOiAlZC8lZCAobWF4PSVkKVxuIgorCQkiRE1FTSBibG9ja3M6ICVkXG4iCisJCSJRdWV1ZWQgd2FpdGluZyBmb3IgRVREOiAlZFxuIgorCQkiUXVldWVkIHdhaXRpbmcgZm9yIERNRU06ICVkXG4iLAorCQlyZWFkbChpbXgyMS0+cmVncyArIFVTQkhfRlJNTlVCKSAmIDB4RkZGRiwKKwkJZXRkc19hbGxvY2F0ZWQsIFVTQl9OVU1fRVRELCBpbXgyMS0+ZXRkX3VzYWdlLm1heGltdW0sCisJCWV0ZHNfc3dfYnVzeSwKKwkJZXRkc19od19idXN5LAorCQlkbWVtX2J5dGVzLCBETUVNX1NJWkUsIGlteDIxLT5kbWVtX3VzYWdlLm1heGltdW0sCisJCWRtZW1fYmxvY2tzLAorCQlxdWV1ZWRfZm9yX2V0ZCwKKwkJcXVldWVkX2Zvcl9kbWVtKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlYnVnX2RtZW1fc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJc3RydWN0IGlteDIxICppbXgyMSA9IHMtPnByaXZhdGU7CisJc3RydWN0IGlteDIxX2RtZW1fYXJlYSAqZG1lbTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWNoYXIgZXBfdGV4dFs0MF07CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoZG1lbSwgJmlteDIxLT5kbWVtX2xpc3QsIGxpc3QpCisJCXNlcV9wcmludGYocywKKwkJCSIlMDRYOiBzaXplPTB4JVggIgorCQkJImVwPSVzXG4iLAorCQkJZG1lbS0+b2Zmc2V0LCBkbWVtLT5zaXplLAorCQkJZm9ybWF0X2VwKGRtZW0tPmVwLCBlcF90ZXh0LCBzaXplb2YoZXBfdGV4dCkpKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZWJ1Z19ldGRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCit7CisJc3RydWN0IGlteDIxICppbXgyMSA9IHMtPnByaXZhdGU7CisJc3RydWN0IGV0ZF9wcml2ICpldGQ7CisJY2hhciBidWZbNjBdOworCXUzMiBkd29yZDsKKwlpbnQgaSwgajsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisKKwlmb3IgKGkgPSAwLCBldGQgPSBpbXgyMS0+ZXRkOyBpIDwgVVNCX05VTV9FVEQ7IGkrKywgZXRkKyspIHsKKwkJaW50IHN0YXRlID0gLTE7CisJCXN0cnVjdCB1cmJfcHJpdiAqdXJiX3ByaXY7CisJCWlmIChldGQtPnVyYikgeworCQkJdXJiX3ByaXYgPSBldGQtPnVyYi0+aGNwcml2OworCQkJaWYgKHVyYl9wcml2KQorCQkJCXN0YXRlID0gdXJiX3ByaXYtPnN0YXRlOworCQl9CisKKwkJc2VxX3ByaW50ZihzLAorCQkJImV0ZF9udW06ICVkXG4iCisJCQkiZXA6ICVzXG4iCisJCQkiYWxsb2M6ICVkXG4iCisJCQkibGVuOiAlZFxuIgorCQkJImJ1c3kgc3c6ICVkXG4iCisJCQkiYnVzeSBodzogJWRcbiIKKwkJCSJ1cmIgc3RhdGU6ICVkXG4iCisJCQkiY3VycmVudCB1cmI6ICVwXG4iLAorCisJCQlpLAorCQkJZm9ybWF0X2VwKGV0ZC0+ZXAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpLAorCQkJZXRkLT5hbGxvYywKKwkJCWV0ZC0+bGVuLAorCQkJZXRkLT51cmIgIT0gTlVMTCwKKwkJCShyZWFkbChpbXgyMS0+cmVncyArIFVTQkhfRVRERU5TRVQpICYgKDEgPDwgaSkpID4gMCwKKwkJCXN0YXRlLAorCQkJZXRkLT51cmIpOworCisJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKKwkJCWR3b3JkID0gZXRkX3JlYWRsKGlteDIxLCBpLCBqKTsKKwkJCXN3aXRjaCAoaikgeworCQkJY2FzZSAwOgorCQkJCWZvcm1hdF9ldGRfZHdvcmQwKGR3b3JkLCBidWYsIHNpemVvZihidWYpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgMjoKKwkJCQlzbnByaW50ZihidWYsIHNpemVvZihidWYpLAorCQkJCQkiY2M9MFglMDJYIiwgZHdvcmQgPj4gRFcyX0NPTVBDT0RFKTsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJKmJ1ZiA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlzZXFfcHJpbnRmKHMsCisJCQkJImR3b3JkICVkOiBzdWJtaXR0ZWQ9JTA4WCBjdXI9JTA4WCBbJXNdXG4iLAorCQkJCWosCisJCQkJZXRkLT5zdWJtaXR0ZWRfZHdvcmRzW2pdLAorCQkJCWR3b3JkLAorCQkJCWJ1Zik7CisJCX0KKwkJc2VxX3ByaW50ZihzLCAiXG4iKTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbXgyMS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRlYnVnX3N0YXRpc3RpY3Nfc2hvd19vbmUoc3RydWN0IHNlcV9maWxlICpzLAorCWNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZWJ1Z19zdGF0cyAqc3RhdHMpCit7CisJc2VxX3ByaW50ZihzLCAiJXM6XG4iCisJCSJzdWJtaXR0ZWQgVVJCczogJWx1XG4iCisJCSJjb21wbGV0ZWQgT0s6ICVsdVxuIgorCQkiY29tcGxldGVkIGZhaWxlZDogJWx1XG4iCisJCSJ1bmxpbmtlZDogJWx1XG4iCisJCSJxdWV1ZWQgZm9yIEVURDogJWx1XG4iCisJCSJxdWV1ZWQgZm9yIERNRU06ICVsdVxuXG4iLAorCQluYW1lLAorCQlzdGF0cy0+c3VibWl0dGVkLAorCQlzdGF0cy0+Y29tcGxldGVkX29rLAorCQlzdGF0cy0+Y29tcGxldGVkX2ZhaWxlZCwKKwkJc3RhdHMtPnVubGlua2VkLAorCQlzdGF0cy0+cXVldWVfZXRkLAorCQlzdGF0cy0+cXVldWVfZG1lbSk7Cit9CisKK3N0YXRpYyBpbnQgZGVidWdfc3RhdGlzdGljc19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgaW14MjEgKmlteDIxID0gcy0+cHJpdmF0ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisKKwlkZWJ1Z19zdGF0aXN0aWNzX3Nob3dfb25lKHMsICJub25pc29jIiwgJmlteDIxLT5ub25pc29jX3N0YXRzKTsKKwlkZWJ1Z19zdGF0aXN0aWNzX3Nob3dfb25lKHMsICJpc29jIiwgJmlteDIxLT5pc29jX3N0YXRzKTsKKwlzZXFfcHJpbnRmKHMsICJ1bmJsb2NrIGtsdWRnZSB0cmlnZ2VyczogJWx1XG4iLCBpbXgyMS0+ZGVidWdfdW5ibG9ja3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZGVidWdfaXNvY19zaG93X29uZShzdHJ1Y3Qgc2VxX2ZpbGUgKnMsCisJY29uc3QgY2hhciAqbmFtZSwgaW50IGluZGV4LCAJc3RydWN0IGRlYnVnX2lzb2NfdHJhY2UgKnRyYWNlKQoreworCXNlcV9wcmludGYocywgIiVzICVkOlxuIgorCQkiY2M9MFglMDJYXG4iCisJCSJzY2hlZHVsZWQgZnJhbWUgJWQgKCVkKVxuIgorCQkic3VibWl0dHRlZCBmcmFtZSAlZCAoJWQpXG4iCisJCSJjb21wbGV0ZWQgZnJhbWUgJWQgKCVkKVxuIgorCQkicmVxdWVzdGVkIGxlbmd0aD0lZFxuIgorCQkiY29tcGxldGVkIGxlbmd0aD0lZFxuXG4iLAorCQluYW1lLCBpbmRleCwKKwkJdHJhY2UtPmNjLAorCQl0cmFjZS0+c2NoZWR1bGVfZnJhbWUsIHRyYWNlLT5zY2hlZHVsZV9mcmFtZSAmIDB4RkZGRiwKKwkJdHJhY2UtPnN1Ym1pdF9mcmFtZSwgdHJhY2UtPnN1Ym1pdF9mcmFtZSAmIDB4RkZGRiwKKwkJdHJhY2UtPmRvbmVfZnJhbWUsIHRyYWNlLT5kb25lX2ZyYW1lICYgMHhGRkZGLAorCQl0cmFjZS0+cmVxdWVzdF9sZW4sCisJCXRyYWNlLT5kb25lX2xlbik7Cit9CisKK3N0YXRpYyBpbnQgZGVidWdfaXNvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgaW14MjEgKmlteDIxID0gcy0+cHJpdmF0ZTsKKwlzdHJ1Y3QgZGVidWdfaXNvY190cmFjZSAqdHJhY2U7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgaTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbXgyMS0+bG9jaywgZmxhZ3MpOworCisJdHJhY2UgPSBpbXgyMS0+aXNvY190cmFjZV9mYWlsZWQ7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW14MjEtPmlzb2NfdHJhY2VfZmFpbGVkKTsgaSsrLCB0cmFjZSsrKQorCQlkZWJ1Z19pc29jX3Nob3dfb25lKHMsICJpc29jIGZhaWxlZCIsIGksIHRyYWNlKTsKKworCXRyYWNlID0gaW14MjEtPmlzb2NfdHJhY2U7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW14MjEtPmlzb2NfdHJhY2UpOyBpKyssIHRyYWNlKyspCisJCWRlYnVnX2lzb2Nfc2hvd19vbmUocywgImlzb2MiLCBpLCB0cmFjZSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbXgyMS0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGVidWdfc3RhdHVzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRlYnVnX3N0YXR1c19zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGludCBkZWJ1Z19kbWVtX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRlYnVnX2RtZW1fc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgZGVidWdfZXRkX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRlYnVnX2V0ZF9zaG93LCBpbm9kZS0+aV9wcml2YXRlKTsKK30KKworc3RhdGljIGludCBkZWJ1Z19zdGF0aXN0aWNzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRlYnVnX3N0YXRpc3RpY3Nfc2hvdywgaW5vZGUtPmlfcHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgZGVidWdfaXNvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBkZWJ1Z19pc29jX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19zdGF0dXNfZm9wcyA9IHsKKwkub3BlbiA9IGRlYnVnX3N0YXR1c19vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfZG1lbV9mb3BzID0geworCS5vcGVuID0gZGVidWdfZG1lbV9vcGVuLAorCS5yZWFkID0gc2VxX3JlYWQsCisJLmxsc2VlayA9IHNlcV9sc2VlaywKKwkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVidWdfZXRkX2ZvcHMgPSB7CisJLm9wZW4gPSBkZWJ1Z19ldGRfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX3N0YXRpc3RpY3NfZm9wcyA9IHsKKwkub3BlbiA9IGRlYnVnX3N0YXRpc3RpY3Nfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlYnVnX2lzb2NfZm9wcyA9IHsKKwkub3BlbiA9IGRlYnVnX2lzb2Nfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBzaW5nbGVfcmVsZWFzZSwKK307CisKK3N0YXRpYyB2b2lkIGNyZWF0ZV9kZWJ1Z19maWxlcyhzdHJ1Y3QgaW14MjEgKmlteDIxKQoreworCWlteDIxLT5kZWJ1Z19yb290ID0gZGVidWdmc19jcmVhdGVfZGlyKGRldl9uYW1lKGlteDIxLT5kZXYpLCBOVUxMKTsKKwlpZiAoIWlteDIxLT5kZWJ1Z19yb290KQorCQlnb3RvIGZhaWxlZF9jcmVhdGVfcm9vdGRpcjsKKworCWlmICghZGVidWdmc19jcmVhdGVfZmlsZSgic3RhdHVzIiwgU19JUlVHTywKKwkJCWlteDIxLT5kZWJ1Z19yb290LCBpbXgyMSwgJmRlYnVnX3N0YXR1c19mb3BzKSkKKwkJZ290byBmYWlsZWRfY3JlYXRlOworCisJaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJkbWVtIiwgU19JUlVHTywKKwkJCWlteDIxLT5kZWJ1Z19yb290LCBpbXgyMSwgJmRlYnVnX2RtZW1fZm9wcykpCisJCWdvdG8gZmFpbGVkX2NyZWF0ZTsKKworCWlmICghZGVidWdmc19jcmVhdGVfZmlsZSgiZXRkIiwgU19JUlVHTywKKwkJCWlteDIxLT5kZWJ1Z19yb290LCBpbXgyMSwgJmRlYnVnX2V0ZF9mb3BzKSkKKwkJZ290byBmYWlsZWRfY3JlYXRlOworCisJaWYgKCFkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJzdGF0aXN0aWNzIiwgU19JUlVHTywKKwkJCWlteDIxLT5kZWJ1Z19yb290LCBpbXgyMSwgJmRlYnVnX3N0YXRpc3RpY3NfZm9wcykpCisJCWdvdG8gZmFpbGVkX2NyZWF0ZTsKKworCWlmICghZGVidWdmc19jcmVhdGVfZmlsZSgiaXNvYyIsIFNfSVJVR08sCisJCQlpbXgyMS0+ZGVidWdfcm9vdCwgaW14MjEsICZkZWJ1Z19pc29jX2ZvcHMpKQorCQlnb3RvIGZhaWxlZF9jcmVhdGU7CisKKwlyZXR1cm47CisKK2ZhaWxlZF9jcmVhdGU6CisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGlteDIxLT5kZWJ1Z19yb290KTsKKworZmFpbGVkX2NyZWF0ZV9yb290ZGlyOgorCWlteDIxLT5kZWJ1Z19yb290ID0gTlVMTDsKK30KKworCitzdGF0aWMgdm9pZCByZW1vdmVfZGVidWdfZmlsZXMoc3RydWN0IGlteDIxICppbXgyMSkKK3sKKwlpZiAoaW14MjEtPmRlYnVnX3Jvb3QpIHsKKwkJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGlteDIxLT5kZWJ1Z19yb290KTsKKwkJaW14MjEtPmRlYnVnX3Jvb3QgPSBOVUxMOworCX0KK30KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaW14MjEtaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lteDIxLWhjZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxM2UyNzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L2lteDIxLWhjZC5jCkBAIC0wLDAgKzEsMTc4OSBAQAorLyoKKyAqIFVTQiBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIGZvciBJTVgyMQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBMb3BpbmcgRG9nIEVtYmVkZGVkIFN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ0aW4gRnV6emV5CisgKiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgSmF5IE1vbmttYW4gPGp0bUBsb3Bpbmdkb2cuY29tPgorICogUG9ydGVkIHRvIDIuNi4zMCwgZGVidWdnZWQgYW5kIGVuaGFuY2VkIGJ5IE1hcnRpbiBGdXp6ZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisKKyAvKgorICAqIFRoZSBpLk1YMjEgVVNCIGhhcmR3YXJlIGNvbnRhaW5zCisgICogICAgKiAzMiB0cmFuc2ZlciBkZXNjcmlwdG9ycyAoY2FsbGVkIEVURHMpCisgICogICAgKiA0S2Igb2YgRGF0YSBtZW1vcnkKKyAgKgorICAqIFRoZSBkYXRhIG1lbW9yeSBpcyBzaGFyZWQgYmV0d2VlbiB0aGUgaG9zdCBhbmQgZnVjdGlvbiBjb250cm9sZXJzCisgICogKGJ1dCB0aGlzIGRyaXZlciBvbmx5IHN1cHBvcnRzIHRoZSBob3N0IGNvbnRyb2xlcikKKyAgKgorICAqIFNvIHNldHRpbmcgdXAgYSB0cmFuc2ZlciBpbnZvbHZlczoKKyAgKiAgICAqIEFsbG9jYXRpbmcgYSBFVEQKKyAgKiAgICAqIEZpbGwgaW4gRVREIHdpdGggYXBwcm9wcmlhdGUgaW5mb3JtYXRpb24KKyAgKiAgICAqIEFsbG9jYXRpbmcgZGF0YSBtZW1vcnkgKGFuZCBwdXR0aW5nIHRoZSBvZmZzZXQgaW4gdGhlIEVURCkKKyAgKiAgICAqIEFjdGl2YXRlIHRoZSBFVEQKKyAgKiAgICAqIEdldCBpbnRlcnJ1cHQgd2hlbiBkb25lLgorICAqCisgICogQW4gRVREIGlzIGFzc2lnbmVkIHRvIGVhY2ggYWN0aXZlIGVuZHBvaW50LgorICAqCisgICogTG93IHJlc291cmNlIChFVEQgYW5kIERhdGEgbWVtb3J5KSBzaXR1YXRpb25zIGFyZSBoYW5kbGVkIGRpZmZlcmVudGx5IGZvcgorICAqIGlzb2Nocm9ub3VzIGFuZCBub24gaW5zb3N5bmNocm9ub3VzIHRyYW5zYWN0aW9ucyA6CisgICoKKyAgKiBOb24gSVNPQyB0cmFuc2ZlcnMgYXJlIHF1ZXVlZCBpZiBlaXRoZXIgRVREcyBvciBEYXRhIG1lbW9yeSBhcmUgdW5hdmFpbGFibGUKKyAgKgorICAqIElTT0MgdHJhbnNmZXJzIHVzZSAyIEVURHMgcGVyIGVuZHBvaW50IHRvIGFjaGlldmUgZG91YmxlIGJ1ZmZlcmluZy4KKyAgKiBUaGV5IGFsbG9jYXRlIGJvdGggRVREcyBhbmQgRGF0YSBtZW1vcnkgZHVyaW5nIFVSQiBzdWJtaXNzaW9uCisgICogKGFuZCBmYWlsIGlmIHVuYXZhaWxhYmxlKS4KKyAgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorCisjaW5jbHVkZSAiLi4vY29yZS9oY2QuaCIKKyNpbmNsdWRlICJpbXgyMS1oY2QuaCIKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERFQlVHX0xPR19GUkFNRShpbXgyMSwgZXRkLCBldmVudCkgXAorCShldGQpLT5ldmVudCMjX2ZyYW1lID0gcmVhZGwoKGlteDIxKS0+cmVncyArIFVTQkhfRlJNTlVCKQorI2Vsc2UKKyNkZWZpbmUgREVCVUdfTE9HX0ZSQU1FKGlteDIxLCBldGQsIGV2ZW50KSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworc3RhdGljIGNvbnN0IGNoYXIgaGNkX25hbWVbXSA9ICJpbXgyMS1oY2QiOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbXgyMSAqaGNkX3RvX2lteDIxKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJcmV0dXJuIChzdHJ1Y3QgaW14MjEgKiloY2QtPmhjZF9wcml2OworfQorCisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qIEhhcmR3YXJlIGFjY2VzcyBoZWxwZXJzCQkJKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKworc3RhdGljIGlubGluZSB2b2lkIHNldF9yZWdpc3Rlcl9iaXRzKHN0cnVjdCBpbXgyMSAqaW14MjEsIHUzMiBvZmZzZXQsIHUzMiBtYXNrKQoreworCXZvaWQgX19pb21lbSAqcmVnID0gaW14MjEtPnJlZ3MgKyBvZmZzZXQ7CisJd3JpdGVsKHJlYWRsKHJlZykgfCBtYXNrLCByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfcmVnaXN0ZXJfYml0cyhzdHJ1Y3QgaW14MjEgKmlteDIxLAorCXUzMiBvZmZzZXQsIHUzMiBtYXNrKQoreworCXZvaWQgX19pb21lbSAqcmVnID0gaW14MjEtPnJlZ3MgKyBvZmZzZXQ7CisJd3JpdGVsKHJlYWRsKHJlZykgJiB+bWFzaywgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3RvZ2dsZV9iaXQoc3RydWN0IGlteDIxICppbXgyMSwgdTMyIG9mZnNldCwgdTMyIG1hc2spCit7CisJdm9pZCBfX2lvbWVtICpyZWcgPSBpbXgyMS0+cmVncyArIG9mZnNldDsKKworCWlmIChyZWFkbChyZWcpICYgbWFzaykKKwkJd3JpdGVsKG1hc2ssIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfdG9nZ2xlX2JpdChzdHJ1Y3QgaW14MjEgKmlteDIxLCB1MzIgb2Zmc2V0LCB1MzIgbWFzaykKK3sKKwl2b2lkIF9faW9tZW0gKnJlZyA9IGlteDIxLT5yZWdzICsgb2Zmc2V0OworCisJaWYgKCEocmVhZGwocmVnKSAmIG1hc2spKQorCQl3cml0ZWwobWFzaywgcmVnKTsKK30KKworc3RhdGljIHZvaWQgZXRkX3dyaXRlbChzdHJ1Y3QgaW14MjEgKmlteDIxLCBpbnQgZXRkX251bSwgaW50IGR3b3JkLCB1MzIgdmFsdWUpCit7CisJd3JpdGVsKHZhbHVlLCBpbXgyMS0+cmVncyArIFVTQl9FVERfRFdPUkQoZXRkX251bSwgZHdvcmQpKTsKK30KKworc3RhdGljIHUzMiBldGRfcmVhZGwoc3RydWN0IGlteDIxICppbXgyMSwgaW50IGV0ZF9udW0sIGludCBkd29yZCkKK3sKKwlyZXR1cm4gcmVhZGwoaW14MjEtPnJlZ3MgKyBVU0JfRVREX0RXT1JEKGV0ZF9udW0sIGR3b3JkKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHdyYXBfZnJhbWUoaW50IGNvdW50ZXIpCit7CisJcmV0dXJuIGNvdW50ZXIgJiAweEZGRkY7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZyYW1lX2FmdGVyKGludCBmcmFtZSwgaW50IGFmdGVyKQoreworCS8qIGhhbmRsZSB3cmFwcGluZyBsaWtlIGppZmZpZXMgdGltZV9hZmVyICovCisJcmV0dXJuIChzMTYpKChzMTYpYWZ0ZXIgLSAoczE2KWZyYW1lKSA8IDA7Cit9CisKK3N0YXRpYyBpbnQgaW14MjFfaGNfZ2V0X2ZyYW1lKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGlteDIxICppbXgyMSA9IGhjZF90b19pbXgyMShoY2QpOworCisJcmV0dXJuIHdyYXBfZnJhbWUocmVhZGwoaW14MjEtPnJlZ3MgKyBVU0JIX0ZSTU5VQikpOworfQorCisKKyNpbmNsdWRlICJpbXgyMS1kYmcuYyIKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogRVREIG1hbmFnZW1lbnQJCQkJKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0JKi8KKworc3RhdGljIGludCBhbGxvY19ldGQoc3RydWN0IGlteDIxICppbXgyMSkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZXRkX3ByaXYgKmV0ZCA9IGlteDIxLT5ldGQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgVVNCX05VTV9FVEQ7IGkrKywgZXRkKyspIHsKKwkJaWYgKGV0ZC0+YWxsb2MgPT0gMCkgeworCQkJbWVtc2V0KGV0ZCwgMCwgc2l6ZW9mKGlteDIxLT5ldGRbMF0pKTsKKwkJCWV0ZC0+YWxsb2MgPSAxOworCQkJZGVidWdfZXRkX2FsbG9jYXRlZChpbXgyMSk7CisJCQlyZXR1cm4gaTsKKwkJfQorCX0KKwlyZXR1cm4gLTE7Cit9CisKK3N0YXRpYyB2b2lkIGRpc2FjdGl2YXRlX2V0ZChzdHJ1Y3QgaW14MjEgKmlteDIxLCBpbnQgbnVtKQoreworCWludCBldGRfbWFzayA9ICgxIDw8IG51bSk7CisJc3RydWN0IGV0ZF9wcml2ICpldGQgPSAmaW14MjEtPmV0ZFtudW1dOworCisJd3JpdGVsKGV0ZF9tYXNrLCBpbXgyMS0+cmVncyArIFVTQkhfRVRERU5DTFIpOworCWNsZWFyX3JlZ2lzdGVyX2JpdHMoaW14MjEsIFVTQkhfRVRERE9ORUVOLCBldGRfbWFzayk7CisJd3JpdGVsKGV0ZF9tYXNrLCBpbXgyMS0+cmVncyArIFVTQl9FVERETUFDSEFOTENMUik7CisJY2xlYXJfdG9nZ2xlX2JpdChpbXgyMSwgVVNCSF9FVERET05FU1RBVCwgZXRkX21hc2spOworCisJZXRkLT5hY3RpdmVfY291bnQgPSAwOworCisJREVCVUdfTE9HX0ZSQU1FKGlteDIxLCBldGQsIGRpc2FjdGl2YXRlZCk7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2V0X2V0ZChzdHJ1Y3QgaW14MjEgKmlteDIxLCBpbnQgbnVtKQoreworCXN0cnVjdCBldGRfcHJpdiAqZXRkID0gaW14MjEtPmV0ZCArIG51bTsKKwlpbnQgaTsKKworCWRpc2FjdGl2YXRlX2V0ZChpbXgyMSwgbnVtKTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCWV0ZF93cml0ZWwoaW14MjEsIG51bSwgaSwgMCk7CisJZXRkLT51cmIgPSBOVUxMOworCWV0ZC0+ZXAgPSBOVUxMOworCWV0ZC0+dGQgPSBOVUxMOzsKK30KKworc3RhdGljIHZvaWQgZnJlZV9ldGQoc3RydWN0IGlteDIxICppbXgyMSwgaW50IG51bSkKK3sKKwlpZiAobnVtIDwgMCkKKwkJcmV0dXJuOworCisJaWYgKG51bSA+PSBVU0JfTlVNX0VURCkgeworCQlkZXZfZXJyKGlteDIxLT5kZXYsICJCQUQgZXRkPSVkIVxuIiwgbnVtKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoaW14MjEtPmV0ZFtudW1dLmFsbG9jID09IDApIHsKKwkJZGV2X2VycihpbXgyMS0+ZGV2LCAiRVREICVkIGFscmVhZHkgZnJlZSFcbiIsIG51bSk7CisJCXJldHVybjsKKwl9CisKKwlkZWJ1Z19ldGRfZnJlZWQoaW14MjEpOworCXJlc2V0X2V0ZChpbXgyMSwgbnVtKTsKKwltZW1zZXQoJmlteDIxLT5ldGRbbnVtXSwgMCwgc2l6ZW9mKGlteDIxLT5ldGRbMF0pKTsKK30KKworCitzdGF0aWMgdm9pZCBzZXR1cF9ldGRfZHdvcmQwKHN0cnVjdCBpbXgyMSAqaW14MjEsCisJaW50IGV0ZF9udW0sIHN0cnVjdCB1cmIgKnVyYiwgIHU4IGRpciwgdTE2IG1heHBhY2tldCkKK3sKKwlldGRfd3JpdGVsKGlteDIxLCBldGRfbnVtLCAwLAorCQkoKHUzMikgdXNiX3BpcGVkZXZpY2UodXJiLT5waXBlKSkgPDwgIERXMF9BRERSRVNTIHwKKwkJKCh1MzIpIHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSA8PCBEVzBfRU5EUE5UKSB8CisJCSgodTMyKSBkaXIgPDwgRFcwX0RJUkVDVCkgfAorCQkoKHUzMikgKCh1cmItPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0xPVykgPworCQkJMSA6IDApIDw8IERXMF9TUEVFRCkgfAorCQkoKHUzMikgZm10X3VyYl90b19ldGRbdXNiX3BpcGV0eXBlKHVyYi0+cGlwZSldIDw8IERXMF9GT1JNQVQpIHwKKwkJKCh1MzIpIG1heHBhY2tldCA8PCBEVzBfTUFYUEtUU0laKSk7Cit9CisKK3N0YXRpYyB2b2lkIGFjdGl2YXRlX2V0ZChzdHJ1Y3QgaW14MjEgKmlteDIxLAorCWludCBldGRfbnVtLCBkbWFfYWRkcl90IGRtYSwgdTggZGlyKQoreworCXUzMiBldGRfbWFzayA9IDEgPDwgZXRkX251bTsKKwlzdHJ1Y3QgZXRkX3ByaXYgKmV0ZCA9ICZpbXgyMS0+ZXRkW2V0ZF9udW1dOworCisJY2xlYXJfdG9nZ2xlX2JpdChpbXgyMSwgVVNCSF9FVERET05FU1RBVCwgZXRkX21hc2spOworCXNldF9yZWdpc3Rlcl9iaXRzKGlteDIxLCBVU0JIX0VURERPTkVFTiwgZXRkX21hc2spOworCWNsZWFyX3RvZ2dsZV9iaXQoaW14MjEsIFVTQkhfWEZJTExTVEFULCBldGRfbWFzayk7CisJY2xlYXJfdG9nZ2xlX2JpdChpbXgyMSwgVVNCSF9ZRklMTFNUQVQsIGV0ZF9tYXNrKTsKKworCWlmIChkbWEpIHsKKwkJc2V0X3JlZ2lzdGVyX2JpdHMoaW14MjEsIFVTQl9FVERETUFDSEFOTENMUiwgZXRkX21hc2spOworCQljbGVhcl90b2dnbGVfYml0KGlteDIxLCBVU0JIX1hCVUZTVEFULCBldGRfbWFzayk7CisJCWNsZWFyX3RvZ2dsZV9iaXQoaW14MjEsIFVTQkhfWUJVRlNUQVQsIGV0ZF9tYXNrKTsKKwkJd3JpdGVsKGRtYSwgaW14MjEtPnJlZ3MgKyBVU0JfRVREU01TQShldGRfbnVtKSk7CisJCXNldF9yZWdpc3Rlcl9iaXRzKGlteDIxLCBVU0JfRVRERE1BRU4sIGV0ZF9tYXNrKTsKKwl9IGVsc2UgeworCQlpZiAoZGlyICE9IFREX0RJUl9JTikgeworCQkJLyogbmVlZCB0byBzZXQgZm9yIFpMUCAqLworCQkJc2V0X3RvZ2dsZV9iaXQoaW14MjEsIFVTQkhfWEZJTExTVEFULCBldGRfbWFzayk7CisJCQlzZXRfdG9nZ2xlX2JpdChpbXgyMSwgVVNCSF9ZRklMTFNUQVQsIGV0ZF9tYXNrKTsKKwkJfQorCX0KKworCURFQlVHX0xPR19GUkFNRShpbXgyMSwgZXRkLCBhY3RpdmF0ZWQpOworCisjaWZkZWYgREVCVUcKKwlpZiAoIWV0ZC0+YWN0aXZlX2NvdW50KSB7CisJCWludCBpOworCQlldGQtPmFjdGl2YXRlZF9mcmFtZSA9IHJlYWRsKGlteDIxLT5yZWdzICsgVVNCSF9GUk1OVUIpOworCQlldGQtPmRpc2FjdGl2YXRlZF9mcmFtZSA9IC0xOworCQlldGQtPmxhc3RfaW50X2ZyYW1lID0gLTE7CisJCWV0ZC0+bGFzdF9yZXFfZnJhbWUgPSAtMTsKKworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJZXRkLT5zdWJtaXR0ZWRfZHdvcmRzW2ldID0gZXRkX3JlYWRsKGlteDIxLCBldGRfbnVtLCBpKTsKKwl9CisjZW5kaWYKKworCWV0ZC0+YWN0aXZlX2NvdW50ID0gMTsKKwl3cml0ZWwoZXRkX21hc2ssIGlteDIxLT5yZWdzICsgVVNCSF9FVERFTlNFVCk7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0JKi8KKy8qIERhdGEgbWVtb3J5IG1hbmFnZW1lbnQJCQkqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQkqLworCitzdGF0aWMgaW50IGFsbG9jX2RtZW0oc3RydWN0IGlteDIxICppbXgyMSwgdW5zaWduZWQgaW50IHNpemUsCisJCSAgICAgIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApCit7CisJdW5zaWduZWQgaW50IG9mZnNldCA9IDA7CisJc3RydWN0IGlteDIxX2RtZW1fYXJlYSAqYXJlYTsKKwlzdHJ1Y3QgaW14MjFfZG1lbV9hcmVhICp0bXA7CisKKwlzaXplICs9ICh+c2l6ZSArIDEpICYgMHgzOyAvKiBSb3VuZCB0byA0IGJ5dGUgbXVsdGlwbGUgKi8KKworCWlmIChzaXplID4gRE1FTV9TSVpFKSB7CisJCWRldl9lcnIoaW14MjEtPmRldiwgInNpemU9JWQgPiBETUVNX1NJWkUoJWQpXG4iLAorCQkJc2l6ZSwgRE1FTV9TSVpFKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZpbXgyMS0+ZG1lbV9saXN0LCBsaXN0KSB7CisJCWlmICgoc2l6ZSArIG9mZnNldCkgPCBvZmZzZXQpCisJCQlnb3RvIGZhaWw7CisJCWlmICgoc2l6ZSArIG9mZnNldCkgPD0gdG1wLT5vZmZzZXQpCisJCQlicmVhazsKKwkJb2Zmc2V0ID0gdG1wLT5zaXplICsgdG1wLT5vZmZzZXQ7CisJCWlmICgob2Zmc2V0ICsgc2l6ZSkgPiBETUVNX1NJWkUpCisJCQlnb3RvIGZhaWw7CisJfQorCisJYXJlYSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpbXgyMV9kbWVtX2FyZWEpLCBHRlBfQVRPTUlDKTsKKwlpZiAoYXJlYSA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWFyZWEtPmVwID0gZXA7CisJYXJlYS0+b2Zmc2V0ID0gb2Zmc2V0OworCWFyZWEtPnNpemUgPSBzaXplOworCWxpc3RfYWRkX3RhaWwoJmFyZWEtPmxpc3QsICZ0bXAtPmxpc3QpOworCWRlYnVnX2RtZW1fYWxsb2NhdGVkKGlteDIxLCBzaXplKTsKKwlyZXR1cm4gb2Zmc2V0OworCitmYWlsOgorCXJldHVybiAtRU5PTUVNOworfQorCisvKiBNZW1vcnkgbm93IGF2YWlsYWJsZSBmb3IgYSBxdWV1ZWQgRVREIC0gYWN0aXZhdGUgaXQgKi8KK3N0YXRpYyB2b2lkIGFjdGl2YXRlX3F1ZXVlZF9ldGQoc3RydWN0IGlteDIxICppbXgyMSwKKwlzdHJ1Y3QgZXRkX3ByaXYgKmV0ZCwgdTMyIGRtZW1fb2Zmc2V0KQoreworCXN0cnVjdCB1cmJfcHJpdiAqdXJiX3ByaXYgPSBldGQtPnVyYi0+aGNwcml2OworCWludCBldGRfbnVtID0gZXRkIC0gJmlteDIxLT5ldGRbMF07CisJdTMyIG1heHBhY2tldCA9IGV0ZF9yZWFkbChpbXgyMSwgZXRkX251bSwgMSkgPj4gRFcxX1lCVUZTUlRBRDsKKwl1OCBkaXIgPSAoZXRkX3JlYWRsKGlteDIxLCBldGRfbnVtLCAyKSA+PiBEVzJfRElSUElEKSAmIDB4MDM7CisKKwlkZXZfZGJnKGlteDIxLT5kZXYsICJhY3RpdmF0aW5nIHF1ZXVlZCBFVEQgJWQgbm93IERNRU0gYXZhaWxhYmxlXG4iLAorCQlldGRfbnVtKTsKKwlldGRfd3JpdGVsKGlteDIxLCBldGRfbnVtLCAxLAorCSAgICAoKGRtZW1fb2Zmc2V0ICsgbWF4cGFja2V0KSA8PCBEVzFfWUJVRlNSVEFEKSB8IGRtZW1fb2Zmc2V0KTsKKworCXVyYl9wcml2LT5hY3RpdmUgPSAxOworCWFjdGl2YXRlX2V0ZChpbXgyMSwgZXRkX251bSwgZXRkLT5kbWFfaGFuZGxlLCBkaXIpOworfQorCitzdGF0aWMgdm9pZCBmcmVlX2RtZW0oc3RydWN0IGlteDIxICppbXgyMSwgaW50IG9mZnNldCkKK3sKKwlzdHJ1Y3QgaW14MjFfZG1lbV9hcmVhICphcmVhOworCXN0cnVjdCBldGRfcHJpdiAqZXRkLCAqdG1wOworCWludCBmb3VuZCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFyZWEsICZpbXgyMS0+ZG1lbV9saXN0LCBsaXN0KSB7CisJCWlmIChhcmVhLT5vZmZzZXQgPT0gb2Zmc2V0KSB7CisJCQlkZWJ1Z19kbWVtX2ZyZWVkKGlteDIxLCBhcmVhLT5zaXplKTsKKwkJCWxpc3RfZGVsKCZhcmVhLT5saXN0KTsKKwkJCWtmcmVlKGFyZWEpOworCQkJZm91bmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWZvdW5kKSAgeworCQlkZXZfZXJyKGlteDIxLT5kZXYsCisJCQkiVHJ5aW5nIHRvIGZyZWUgdW5hbGxvY2F0ZWQgRE1FTSAlZFxuIiwgb2Zmc2V0KTsKKwkJcmV0dXJuOworCX0KKworCS8qIFRyeSBhZ2FpbiB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGFueXRoaW5nIHdlJ3ZlIHF1ZXVlZCAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShldGQsIHRtcCwgJmlteDIxLT5xdWV1ZV9mb3JfZG1lbSwgcXVldWUpIHsKKwkJb2Zmc2V0ID0gYWxsb2NfZG1lbShpbXgyMSwgZXRkLT5kbWVtX3NpemUsIGV0ZC0+ZXApOworCQlpZiAob2Zmc2V0ID49IDApIHsKKwkJCWxpc3RfZGVsKCZldGQtPnF1ZXVlKTsKKwkJCWFjdGl2YXRlX3F1ZXVlZF9ldGQoaW14MjEsIGV0ZCwgKHUzMilvZmZzZXQpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBmcmVlX2VwZG1lbShzdHJ1Y3QgaW14MjEgKmlteDIxLCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQoreworCXN0cnVjdCBpbXgyMV9kbWVtX2FyZWEgKmFyZWEsICp0bXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYXJlYSwgdG1wLCAmaW14MjEtPmRtZW1fbGlzdCwgbGlzdCkgeworCQlpZiAoYXJlYS0+ZXAgPT0gZXApIHsKKwkJCWRldl9lcnIoaW14MjEtPmRldiwKKwkJCQkiQWN0aXZlIERNRU0gJWQgZm9yIGRpc2FibGVkIGVwPSVwXG4iLAorCQkJCWFyZWEtPm9mZnNldCwgZXApOworCQkJbGlzdF9kZWwoJmFyZWEtPmxpc3QpOworCQkJa2ZyZWUoYXJlYSk7CisJCX0KKwl9Cit9CisKKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQkqLworLyogRW5kIGhhbmRsaW5nIAkJCQkqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQkqLworc3RhdGljIHZvaWQgc2NoZWR1bGVfbm9uaXNvY19ldGQoc3RydWN0IGlteDIxICppbXgyMSwgc3RydWN0IHVyYiAqdXJiKTsKKworLyogRW5kcG9pbnQgbm93IGlkbGUgLSByZWxlYXNlIGl0J3MgRVREKHMpIG9yIGFzc3NpZ24gdG8gcXVldWVkIHJlcXVlc3QgKi8KK3N0YXRpYyB2b2lkIGVwX2lkbGUoc3RydWN0IGlteDIxICppbXgyMSwgc3RydWN0IGVwX3ByaXYgKmVwX3ByaXYpCit7CisJaW50IGV0ZF9udW07CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0lTT19FVERTOyBpKyspIHsKKwkJZXRkX251bSA9IGVwX3ByaXYtPmV0ZFtpXTsKKwkJaWYgKGV0ZF9udW0gPCAwKQorCQkJY29udGludWU7CisKKwkJZXBfcHJpdi0+ZXRkW2ldID0gLTE7CisJCWlmIChsaXN0X2VtcHR5KCZpbXgyMS0+cXVldWVfZm9yX2V0ZCkpIHsKKwkJCWZyZWVfZXRkKGlteDIxLCBldGRfbnVtKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJZGV2X2RiZyhpbXgyMS0+ZGV2LAorCQkJImFzc2lnbmluZyBpZGxlIGV0ZCAlZCBmb3IgcXVldWVkIHJlcXVlc3RcbiIsIGV0ZF9udW0pOworCQllcF9wcml2ID0gbGlzdF9maXJzdF9lbnRyeSgmaW14MjEtPnF1ZXVlX2Zvcl9ldGQsCisJCQlzdHJ1Y3QgZXBfcHJpdiwgcXVldWUpOworCQlsaXN0X2RlbCgmZXBfcHJpdi0+cXVldWUpOworCQlyZXNldF9ldGQoaW14MjEsIGV0ZF9udW0pOworCQllcF9wcml2LT53YWl0aW5nX2V0ZCA9IDA7CisJCWVwX3ByaXYtPmV0ZFtpXSA9IGV0ZF9udW07CisKKwkJaWYgKGxpc3RfZW1wdHkoJmVwX3ByaXYtPmVwLT51cmJfbGlzdCkpIHsKKwkJCWRldl9lcnIoaW14MjEtPmRldiwgIk5vIHVyYiBmb3IgcXVldWVkIGVwIVxuIik7CisJCQljb250aW51ZTsKKwkJfQorCQlzY2hlZHVsZV9ub25pc29jX2V0ZChpbXgyMSwgbGlzdF9maXJzdF9lbnRyeSgKKwkJCSZlcF9wcml2LT5lcC0+dXJiX2xpc3QsIHN0cnVjdCB1cmIsIHVyYl9saXN0KSk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1cmJfZG9uZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpCitfX3JlbGVhc2VzKGlteDIxLT5sb2NrKQorX19hY3F1aXJlcyhpbXgyMS0+bG9jaykKK3sKKwlzdHJ1Y3QgaW14MjEgKmlteDIxID0gaGNkX3RvX2lteDIxKGhjZCk7CisJc3RydWN0IGVwX3ByaXYgKmVwX3ByaXYgPSB1cmItPmVwLT5oY3ByaXY7CisJc3RydWN0IHVyYl9wcml2ICp1cmJfcHJpdiA9IHVyYi0+aGNwcml2OworCisJZGVidWdfdXJiX2NvbXBsZXRlZChpbXgyMSwgdXJiLCBzdGF0dXMpOworCWRldl92ZGJnKGlteDIxLT5kZXYsICJ1cmIgJXAgZG9uZSAlZFxuIiwgdXJiLCBzdGF0dXMpOworCisJa2ZyZWUodXJiX3ByaXYtPmlzb2NfdGQpOworCWtmcmVlKHVyYi0+aGNwcml2KTsKKwl1cmItPmhjcHJpdiA9IE5VTEw7CisJdXNiX2hjZF91bmxpbmtfdXJiX2Zyb21fZXAoaGNkLCB1cmIpOworCXNwaW5fdW5sb2NrKCZpbXgyMS0+bG9jayk7CisJdXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIHN0YXR1cyk7CisJc3Bpbl9sb2NrKCZpbXgyMS0+bG9jayk7CisJaWYgKGxpc3RfZW1wdHkoJmVwX3ByaXYtPmVwLT51cmJfbGlzdCkpCisJCWVwX2lkbGUoaW14MjEsIGVwX3ByaXYpOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CSovCisvKiBJU09DIEhhbmRsaW5nIC4uLiAJCQkJKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0JKi8KKworc3RhdGljIHZvaWQgc2NoZWR1bGVfaXNvY19ldGRzKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCkKK3sKKwlzdHJ1Y3QgaW14MjEgKmlteDIxID0gaGNkX3RvX2lteDIxKGhjZCk7CisJc3RydWN0IGVwX3ByaXYgKmVwX3ByaXYgPSBlcC0+aGNwcml2OworCXN0cnVjdCBldGRfcHJpdiAqZXRkOworCXN0cnVjdCB1cmJfcHJpdiAqdXJiX3ByaXY7CisJc3RydWN0IHRkICp0ZDsKKwlpbnQgZXRkX251bTsKKwlpbnQgaTsKKwlpbnQgY3VyX2ZyYW1lOworCXU4IGRpcjsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fSVNPX0VURFM7IGkrKykgewordG9vX2xhdGU6CisJCWlmIChsaXN0X2VtcHR5KCZlcF9wcml2LT50ZF9saXN0KSkKKwkJCWJyZWFrOworCisJCWV0ZF9udW0gPSBlcF9wcml2LT5ldGRbaV07CisJCWlmIChldGRfbnVtIDwgMCkKKwkJCWJyZWFrOworCisJCWV0ZCA9ICZpbXgyMS0+ZXRkW2V0ZF9udW1dOworCQlpZiAoZXRkLT51cmIpCisJCQljb250aW51ZTsKKworCQl0ZCA9IGxpc3RfZW50cnkoZXBfcHJpdi0+dGRfbGlzdC5uZXh0LCBzdHJ1Y3QgdGQsIGxpc3QpOworCQlsaXN0X2RlbCgmdGQtPmxpc3QpOworCQl1cmJfcHJpdiA9IHRkLT51cmItPmhjcHJpdjsKKworCQljdXJfZnJhbWUgPSBpbXgyMV9oY19nZXRfZnJhbWUoaGNkKTsKKwkJaWYgKGZyYW1lX2FmdGVyKGN1cl9mcmFtZSwgdGQtPmZyYW1lKSkgeworCQkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiaXNvYyB0b28gbGF0ZSBmcmFtZSAlZCA+ICVkXG4iLAorCQkJCWN1cl9mcmFtZSwgdGQtPmZyYW1lKTsKKwkJCXVyYl9wcml2LT5pc29jX3N0YXR1cyA9IC1FWERFVjsKKwkJCXRkLT51cmItPmlzb19mcmFtZV9kZXNjWworCQkJCXRkLT5pc29jX2luZGV4XS5hY3R1YWxfbGVuZ3RoID0gMDsKKwkJCXRkLT51cmItPmlzb19mcmFtZV9kZXNjW3RkLT5pc29jX2luZGV4XS5zdGF0dXMgPSAtRVhERVY7CisJCQlpZiAoLS11cmJfcHJpdi0+aXNvY19yZW1haW5pbmcgPT0gMCkKKwkJCQl1cmJfZG9uZShoY2QsIHRkLT51cmIsIHVyYl9wcml2LT5pc29jX3N0YXR1cyk7CisJCQlnb3RvIHRvb19sYXRlOworCQl9CisKKwkJdXJiX3ByaXYtPmFjdGl2ZSA9IDE7CisJCWV0ZC0+dGQgPSB0ZDsKKwkJZXRkLT5lcCA9IHRkLT5lcDsKKwkJZXRkLT51cmIgPSB0ZC0+dXJiOworCQlldGQtPmxlbiA9IHRkLT5sZW47CisKKwkJZGVidWdfaXNvY19zdWJtaXR0ZWQoaW14MjEsIGN1cl9mcmFtZSwgdGQpOworCisJCWRpciA9IHVzYl9waXBlb3V0KHRkLT51cmItPnBpcGUpID8gVERfRElSX09VVCA6IFREX0RJUl9JTjsKKwkJc2V0dXBfZXRkX2R3b3JkMChpbXgyMSwgZXRkX251bSwgdGQtPnVyYiwgZGlyLCBldGQtPmRtZW1fc2l6ZSk7CisJCWV0ZF93cml0ZWwoaW14MjEsIGV0ZF9udW0sIDEsIGV0ZC0+ZG1lbV9vZmZzZXQpOworCQlldGRfd3JpdGVsKGlteDIxLCBldGRfbnVtLCAyLAorCQkJKFREX05PVEFDQ0VTU0VEIDw8IERXMl9DT01QQ09ERSkgfAorCQkJKCh0ZC0+ZnJhbWUgJiAweEZGRkYpIDw8IERXMl9TVEFSVEZSTSkpOworCQlldGRfd3JpdGVsKGlteDIxLCBldGRfbnVtLCAzLAorCQkJKFREX05PVEFDQ0VTU0VEIDw8IERXM19DT01QQ09ERTApIHwKKwkJCSh0ZC0+bGVuIDw8IERXM19QS1RMRU4wKSk7CisKKwkJYWN0aXZhdGVfZXRkKGlteDIxLCBldGRfbnVtLCB0ZC0+ZGF0YSwgZGlyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIGlzb2NfZXRkX2RvbmUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLCBpbnQgZXRkX251bSkKK3sKKwlzdHJ1Y3QgaW14MjEgKmlteDIxID0gaGNkX3RvX2lteDIxKGhjZCk7CisJaW50IGV0ZF9tYXNrID0gMSA8PCBldGRfbnVtOworCXN0cnVjdCB1cmJfcHJpdiAqdXJiX3ByaXYgPSB1cmItPmhjcHJpdjsKKwlzdHJ1Y3QgZXRkX3ByaXYgKmV0ZCA9IGlteDIxLT5ldGQgKyBldGRfbnVtOworCXN0cnVjdCB0ZCAqdGQgPSBldGQtPnRkOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAgPSBldGQtPmVwOworCWludCBpc29jX2luZGV4ID0gdGQtPmlzb2NfaW5kZXg7CisJdW5zaWduZWQgaW50IHBpcGUgPSB1cmItPnBpcGU7CisJaW50IGRpcl9pbiA9IHVzYl9waXBlaW4ocGlwZSk7CisJaW50IGNjOworCWludCBieXRlc194ZnJkOworCisJZGlzYWN0aXZhdGVfZXRkKGlteDIxLCBldGRfbnVtKTsKKworCWNjID0gKGV0ZF9yZWFkbChpbXgyMSwgZXRkX251bSwgMykgPj4gRFczX0NPTVBDT0RFMCkgJiAweGY7CisJYnl0ZXNfeGZyZCA9IGV0ZF9yZWFkbChpbXgyMSwgZXRkX251bSwgMykgJiAweDNmZjsKKworCS8qIElucHV0IGRvZXNuJ3QgYWx3YXlzIGZpbGwgdGhlIGJ1ZmZlciwgZG9uJ3QgZ2VuZXJhdGUgYW4gZXJyb3IKKwkgKiB3aGVuIHRoaXMgaGFwcGVucy4KKwkgKi8KKwlpZiAoZGlyX2luICYmIChjYyA9PSBURF9EQVRBVU5ERVJSVU4pKQorCQljYyA9IFREX0NDX05PRVJST1I7CisKKwlpZiAoY2MgPT0gVERfTk9UQUNDRVNTRUQpCisJCWJ5dGVzX3hmcmQgPSAwOworCisJZGVidWdfaXNvY19jb21wbGV0ZWQoaW14MjEsCisJCWlteDIxX2hjX2dldF9mcmFtZShoY2QpLCB0ZCwgY2MsIGJ5dGVzX3hmcmQpOworCWlmIChjYykgeworCQl1cmJfcHJpdi0+aXNvY19zdGF0dXMgPSAtRVhERVY7CisJCWRldl9kYmcoaW14MjEtPmRldiwKKwkJCSJiYWQgaXNvIGNjPTB4JVggZnJhbWU9JWQgc2NoZWQgZnJhbWU9JWQgIgorCQkJImNudD0lZCBsZW49JWQgdXJiPSVwIGV0ZD0lZCBpbmRleD0lZFxuIiwKKwkJCWNjLCAgaW14MjFfaGNfZ2V0X2ZyYW1lKGhjZCksIHRkLT5mcmFtZSwKKwkJCWJ5dGVzX3hmcmQsIHRkLT5sZW4sIHVyYiwgZXRkX251bSwgaXNvY19pbmRleCk7CisJfQorCisJaWYgKGRpcl9pbikKKwkJY2xlYXJfdG9nZ2xlX2JpdChpbXgyMSwgVVNCSF9YRklMTFNUQVQsIGV0ZF9tYXNrKTsKKworCXVyYi0+YWN0dWFsX2xlbmd0aCArPSBieXRlc194ZnJkOworCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaXNvY19pbmRleF0uYWN0dWFsX2xlbmd0aCA9IGJ5dGVzX3hmcmQ7CisJdXJiLT5pc29fZnJhbWVfZGVzY1tpc29jX2luZGV4XS5zdGF0dXMgPSBjY190b19lcnJvcltjY107CisKKwlldGQtPnRkID0gTlVMTDsKKwlldGQtPnVyYiA9IE5VTEw7CisJZXRkLT5lcCA9IE5VTEw7CisKKwlpZiAoLS11cmJfcHJpdi0+aXNvY19yZW1haW5pbmcgPT0gMCkKKwkJdXJiX2RvbmUoaGNkLCB1cmIsIHVyYl9wcml2LT5pc29jX3N0YXR1cyk7CisKKwlzY2hlZHVsZV9pc29jX2V0ZHMoaGNkLCBlcCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZXBfcHJpdiAqYWxsb2NfaXNvY19lcCgKKwlzdHJ1Y3QgaW14MjEgKmlteDIxLCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKQoreworCXN0cnVjdCBlcF9wcml2ICplcF9wcml2OworCWludCBpOworCisJZXBfcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBlcF9wcml2KSwgR0ZQX0FUT01JQyk7CisJaWYgKGVwX3ByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBBbGxvY2F0ZSB0aGUgRVREcyAqLworCWZvciAoaSA9IDA7IGkgPCBOVU1fSVNPX0VURFM7IGkrKykgeworCQllcF9wcml2LT5ldGRbaV0gPSBhbGxvY19ldGQoaW14MjEpOworCQlpZiAoZXBfcHJpdi0+ZXRkW2ldIDwgMCkgeworCQkJaW50IGo7CisJCQlkZXZfZXJyKGlteDIxLT5kZXYsICJpc29jOiBDb3VsZG4ndCBhbGxvY2F0ZSBldGRcbiIpOworCQkJZm9yIChqID0gMDsgaiA8IGk7IGorKykKKwkJCQlmcmVlX2V0ZChpbXgyMSwgZXBfcHJpdi0+ZXRkW2pdKTsKKwkJCWdvdG8gYWxsb2NfZXRkX2ZhaWxlZDsKKwkJfQorCQlpbXgyMS0+ZXRkW2VwX3ByaXYtPmV0ZFtpXV0uZXAgPSBlcDsKKwl9CisKKwlJTklUX0xJU1RfSEVBRCgmZXBfcHJpdi0+dGRfbGlzdCk7CisJZXBfcHJpdi0+ZXAgPSBlcDsKKwllcC0+aGNwcml2ID0gZXBfcHJpdjsKKwlyZXR1cm4gZXBfcHJpdjsKKworYWxsb2NfZXRkX2ZhaWxlZDoKKwlrZnJlZShlcF9wcml2KTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBpbXgyMV9oY191cmJfZW5xdWV1ZV9pc29jKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCQkJICAgICBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwLAorCQkJCSAgICAgc3RydWN0IHVyYiAqdXJiLCBnZnBfdCBtZW1fZmxhZ3MpCit7CisJc3RydWN0IGlteDIxICppbXgyMSA9IGhjZF90b19pbXgyMShoY2QpOworCXN0cnVjdCB1cmJfcHJpdiAqdXJiX3ByaXY7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZXBfcHJpdiAqZXBfcHJpdjsKKwlzdHJ1Y3QgdGQgKnRkID0gTlVMTDsKKwlpbnQgaTsKKwlpbnQgcmV0OworCWludCBjdXJfZnJhbWU7CisJdTE2IG1heHBhY2tldDsKKworCXVyYl9wcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVyYl9wcml2KSwgbWVtX2ZsYWdzKTsKKwlpZiAodXJiX3ByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl1cmJfcHJpdi0+aXNvY190ZCA9IGt6YWxsb2MoCisJCXNpemVvZihzdHJ1Y3QgdGQpICogdXJiLT5udW1iZXJfb2ZfcGFja2V0cywgbWVtX2ZsYWdzKTsKKwlpZiAodXJiX3ByaXYtPmlzb2NfdGQgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGFsbG9jX3RkX2ZhaWxlZDsKKwl9CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKworCWlmIChlcC0+aGNwcml2ID09IE5VTEwpIHsKKwkJZXBfcHJpdiA9IGFsbG9jX2lzb2NfZXAoaW14MjEsIGVwKTsKKwkJaWYgKGVwX3ByaXYgPT0gTlVMTCkgeworCQkJcmV0ID0gLUVOT01FTTsKKwkJCWdvdG8gYWxsb2NfZXBfZmFpbGVkOworCQl9CisJfSBlbHNlIHsKKwkJZXBfcHJpdiA9IGVwLT5oY3ByaXY7CisJfQorCisJcmV0ID0gdXNiX2hjZF9saW5rX3VyYl90b19lcChoY2QsIHVyYik7CisJaWYgKHJldCkKKwkJZ290byBsaW5rX2ZhaWxlZDsKKworCXVyYi0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJdXJiLT5lcnJvcl9jb3VudCA9IDA7CisJdXJiLT5oY3ByaXYgPSB1cmJfcHJpdjsKKwl1cmJfcHJpdi0+ZXAgPSBlcDsKKworCS8qIGFsbG9jYXRlIGRhdGEgbWVtb3J5IGZvciBsYXJnZXN0IHBhY2tldHMgaWYgbm90IGFscmVhZHkgZG9uZSAqLworCW1heHBhY2tldCA9IHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7CisJZm9yIChpID0gMDsgaSA8IE5VTV9JU09fRVREUzsgaSsrKSB7CisJCXN0cnVjdCBldGRfcHJpdiAqZXRkID0gJmlteDIxLT5ldGRbZXBfcHJpdi0+ZXRkW2ldXTsKKworCQlpZiAoZXRkLT5kbWVtX3NpemUgPiAwICYmIGV0ZC0+ZG1lbV9zaXplIDwgbWF4cGFja2V0KSB7CisJCQkvKiBub3Qgc3VyZSBpZiB0aGlzIGNhbiByZWFsbHkgb2NjdXIuLi4uICovCisJCQlkZXZfZXJyKGlteDIxLT5kZXYsICJpbmNyZWFzaW5nIGlzb2MgYnVmZmVyICVkLT4lZFxuIiwKKwkJCQlldGQtPmRtZW1fc2l6ZSwgbWF4cGFja2V0KTsKKwkJCXJldCA9IC1FTVNHU0laRTsKKwkJCWdvdG8gYWxsb2NfZG1lbV9mYWlsZWQ7CisJCX0KKworCQlpZiAoZXRkLT5kbWVtX3NpemUgPT0gMCkgeworCQkJZXRkLT5kbWVtX29mZnNldCA9IGFsbG9jX2RtZW0oaW14MjEsIG1heHBhY2tldCwgZXApOworCQkJaWYgKGV0ZC0+ZG1lbV9vZmZzZXQgPCAwKSB7CisJCQkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiZmFpbGVkIGFsbG9jIGlzb2MgZG1lbVxuIik7CisJCQkJcmV0ID0gLUVBR0FJTjsKKwkJCQlnb3RvIGFsbG9jX2RtZW1fZmFpbGVkOworCQkJfQorCQkJZXRkLT5kbWVtX3NpemUgPSBtYXhwYWNrZXQ7CisJCX0KKwl9CisKKwkvKiBjYWxjdWxhdGUgZnJhbWUgKi8KKwljdXJfZnJhbWUgPSBpbXgyMV9oY19nZXRfZnJhbWUoaGNkKTsKKwlpZiAodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9JU09fQVNBUCkgeworCQlpZiAobGlzdF9lbXB0eSgmZXBfcHJpdi0+dGRfbGlzdCkpCisJCQl1cmItPnN0YXJ0X2ZyYW1lID0gY3VyX2ZyYW1lICsgNTsKKwkJZWxzZQorCQkJdXJiLT5zdGFydF9mcmFtZSA9IGxpc3RfZW50cnkoCisJCQkJZXBfcHJpdi0+dGRfbGlzdC5wcmV2LAorCQkJCXN0cnVjdCB0ZCwgbGlzdCktPmZyYW1lICsgdXJiLT5pbnRlcnZhbDsKKwl9CisJdXJiLT5zdGFydF9mcmFtZSA9IHdyYXBfZnJhbWUodXJiLT5zdGFydF9mcmFtZSk7CisJaWYgKGZyYW1lX2FmdGVyKGN1cl9mcmFtZSwgdXJiLT5zdGFydF9mcmFtZSkpIHsKKwkJZGV2X2RiZyhpbXgyMS0+ZGV2LAorCQkJImVucXVldWU6IGFkanVzdGluZyBpc28gc3RhcnQgJWQgKGN1cj0lZCkgYXNhcD0lZFxuIiwKKwkJCXVyYi0+c3RhcnRfZnJhbWUsIGN1cl9mcmFtZSwKKwkJCSh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX0lTT19BU0FQKSAhPSAwKTsKKwkJdXJiLT5zdGFydF9mcmFtZSA9IHdyYXBfZnJhbWUoY3VyX2ZyYW1lICsgMSk7CisJfQorCisJLyogc2V0IHVwIHRyYW5zZmVycyAqLworCXRkID0gdXJiX3ByaXYtPmlzb2NfdGQ7CisJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKywgdGQrKykgeworCQl0ZC0+ZXAgPSBlcDsKKwkJdGQtPnVyYiA9IHVyYjsKKwkJdGQtPmxlbiA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ubGVuZ3RoOworCQl0ZC0+aXNvY19pbmRleCA9IGk7CisJCXRkLT5mcmFtZSA9IHdyYXBfZnJhbWUodXJiLT5zdGFydF9mcmFtZSArIHVyYi0+aW50ZXJ2YWwgKiBpKTsKKwkJdGQtPmRhdGEgPSB1cmItPnRyYW5zZmVyX2RtYSArIHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0OworCQlsaXN0X2FkZF90YWlsKCZ0ZC0+bGlzdCwgJmVwX3ByaXYtPnRkX2xpc3QpOworCX0KKworCXVyYl9wcml2LT5pc29jX3JlbWFpbmluZyA9IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7CisJZGV2X3ZkYmcoaW14MjEtPmRldiwgInNldHVwICVkIHBhY2tldHMgZm9yIGlzbyBmcmFtZSAlZC0+JWRcbiIsCisJCXVyYi0+bnVtYmVyX29mX3BhY2tldHMsIHVyYi0+c3RhcnRfZnJhbWUsIHRkLT5mcmFtZSk7CisKKwlkZWJ1Z191cmJfc3VibWl0dGVkKGlteDIxLCB1cmIpOworCXNjaGVkdWxlX2lzb2NfZXRkcyhoY2QsIGVwKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7CisKK2FsbG9jX2RtZW1fZmFpbGVkOgorCXVzYl9oY2RfdW5saW5rX3VyYl9mcm9tX2VwKGhjZCwgdXJiKTsKKworbGlua19mYWlsZWQ6CithbGxvY19lcF9mYWlsZWQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKwlrZnJlZSh1cmJfcHJpdi0+aXNvY190ZCk7CisKK2FsbG9jX3RkX2ZhaWxlZDoKKwlrZnJlZSh1cmJfcHJpdik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgZGVxdWV1ZV9pc29jX3VyYihzdHJ1Y3QgaW14MjEgKmlteDIxLAorCXN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IGVwX3ByaXYgKmVwX3ByaXYpCit7CisJc3RydWN0IHVyYl9wcml2ICp1cmJfcHJpdiA9IHVyYi0+aGNwcml2OworCXN0cnVjdCB0ZCAqdGQsICp0bXA7CisJaW50IGk7CisKKwlpZiAodXJiX3ByaXYtPmFjdGl2ZSkgeworCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0lTT19FVERTOyBpKyspIHsKKwkJCWludCBldGRfbnVtID0gZXBfcHJpdi0+ZXRkW2ldOworCQkJaWYgKGV0ZF9udW0gIT0gLTEgJiYgaW14MjEtPmV0ZFtldGRfbnVtXS51cmIgPT0gdXJiKSB7CisJCQkJc3RydWN0IGV0ZF9wcml2ICpldGQgPSBpbXgyMS0+ZXRkICsgZXRkX251bTsKKworCQkJCXJlc2V0X2V0ZChpbXgyMSwgZXRkX251bSk7CisJCQkJaWYgKGV0ZC0+ZG1lbV9zaXplKQorCQkJCQlmcmVlX2RtZW0oaW14MjEsIGV0ZC0+ZG1lbV9vZmZzZXQpOworCQkJCWV0ZC0+ZG1lbV9zaXplID0gMDsKKwkJCX0KKwkJfQorCX0KKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh0ZCwgdG1wLCAmZXBfcHJpdi0+dGRfbGlzdCwgbGlzdCkgeworCQlpZiAodGQtPnVyYiA9PSB1cmIpIHsKKwkJCWRldl92ZGJnKGlteDIxLT5kZXYsICJyZW1vdmluZyB0ZCAlcFxuIiwgdGQpOworCQkJbGlzdF9kZWwoJnRkLT5saXN0KTsKKwkJfQorCX0KK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogTk9OIElTT0MgSGFuZGxpbmcgLi4uIAkJCSovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKK3N0YXRpYyB2b2lkIHNjaGVkdWxlX25vbmlzb2NfZXRkKHN0cnVjdCBpbXgyMSAqaW14MjEsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwl1bnNpZ25lZCBpbnQgcGlwZSA9IHVyYi0+cGlwZTsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYl9wcml2ID0gdXJiLT5oY3ByaXY7CisJc3RydWN0IGVwX3ByaXYgKmVwX3ByaXYgPSB1cmJfcHJpdi0+ZXAtPmhjcHJpdjsKKwlpbnQgc3RhdGUgPSB1cmJfcHJpdi0+c3RhdGU7CisJaW50IGV0ZF9udW0gPSBlcF9wcml2LT5ldGRbMF07CisJc3RydWN0IGV0ZF9wcml2ICpldGQ7CisJaW50IGRtZW1fb2Zmc2V0OworCXUzMiBjb3VudDsKKwl1MTYgZXRkX2J1Zl9zaXplOworCXUxNiBtYXhwYWNrZXQ7CisJdTggZGlyOworCXU4IGJ1ZnJvdW5kOworCXU4IGRhdGF0b2dnbGU7CisJdTggaW50ZXJ2YWwgPSAwOworCXU4IHJlbHBvbHBvcyA9IDA7CisKKwlpZiAoZXRkX251bSA8IDApIHsKKwkJZGV2X2VycihpbXgyMS0+ZGV2LCAiTm8gdmFsaWQgRVREXG4iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAocmVhZGwoaW14MjEtPnJlZ3MgKyBVU0JIX0VUREVOU0VUKSAmICgxIDw8IGV0ZF9udW0pKQorCQlkZXZfZXJyKGlteDIxLT5kZXYsICJzdWJtaXR0aW5nIHRvIGFjdGl2ZSBFVEQgJWRcbiIsIGV0ZF9udW0pOworCisJZXRkID0gJmlteDIxLT5ldGRbZXRkX251bV07CisJbWF4cGFja2V0ID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgcGlwZSwgdXNiX3BpcGVvdXQocGlwZSkpOworCWlmICghbWF4cGFja2V0KQorCQltYXhwYWNrZXQgPSA4OworCisJaWYgKHVzYl9waXBlY29udHJvbChwaXBlKSAmJiAoc3RhdGUgIT0gVVNfQ1RSTF9EQVRBKSkgeworCQlpZiAoc3RhdGUgPT0gVVNfQ1RSTF9TRVRVUCkgeworCQkJZGlyID0gVERfRElSX1NFVFVQOworCQkJZXRkLT5kbWFfaGFuZGxlID0gdXJiLT5zZXR1cF9kbWE7CisJCQlidWZyb3VuZCA9IDA7CisJCQljb3VudCA9IDg7CisJCQlkYXRhdG9nZ2xlID0gVERfVE9HR0xFX0RBVEEwOworCQl9IGVsc2UgewkvKiBVU19DVFJMX0FDSyAqLworCQkJZGlyID0gdXNiX3BpcGVvdXQocGlwZSkgPyBURF9ESVJfSU4gOiBURF9ESVJfT1VUOworCQkJZXRkLT5kbWFfaGFuZGxlID0gdXJiLT50cmFuc2Zlcl9kbWE7CisJCQlidWZyb3VuZCA9IDA7CisJCQljb3VudCA9IDA7CisJCQlkYXRhdG9nZ2xlID0gVERfVE9HR0xFX0RBVEExOworCQl9CisJfSBlbHNlIHsKKwkJZGlyID0gdXNiX3BpcGVvdXQocGlwZSkgPyBURF9ESVJfT1VUIDogVERfRElSX0lOOworCQlidWZyb3VuZCA9IChkaXIgPT0gVERfRElSX0lOKSA/IDEgOiAwOworCQlldGQtPmRtYV9oYW5kbGUgPSB1cmItPnRyYW5zZmVyX2RtYTsKKwkJaWYgKHVzYl9waXBlYnVsayhwaXBlKSAmJiAoc3RhdGUgPT0gVVNfQlVMSzApKQorCQkJY291bnQgPSAwOworCQllbHNlCisJCQljb3VudCA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKworCQlpZiAodXNiX3BpcGVjb250cm9sKHBpcGUpKSB7CisJCQlkYXRhdG9nZ2xlID0gVERfVE9HR0xFX0RBVEExOworCQl9IGVsc2UgeworCQkJaWYgKHVzYl9nZXR0b2dnbGUoCisJCQkJCXVyYi0+ZGV2LAorCQkJCQl1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCisJCQkJCXVzYl9waXBlb3V0KHVyYi0+cGlwZSkpKQorCQkJCWRhdGF0b2dnbGUgPSBURF9UT0dHTEVfREFUQTE7CisJCQllbHNlCisJCQkJZGF0YXRvZ2dsZSA9IFREX1RPR0dMRV9EQVRBMDsKKwkJfQorCX0KKworCWV0ZC0+dXJiID0gdXJiOworCWV0ZC0+ZXAgPSB1cmJfcHJpdi0+ZXA7CisJZXRkLT5sZW4gPSBjb3VudDsKKworCWlmICh1c2JfcGlwZWludChwaXBlKSkgeworCQlpbnRlcnZhbCA9IHVyYi0+aW50ZXJ2YWw7CisJCXJlbHBvbHBvcyA9IChyZWFkbChpbXgyMS0+cmVncyArIFVTQkhfRlJNTlVCKSArIDEpICYgMHhmZjsKKwl9CisKKwkvKiBXcml0ZSBFVEQgdG8gZGV2aWNlIG1lbW9yeSAqLworCXNldHVwX2V0ZF9kd29yZDAoaW14MjEsIGV0ZF9udW0sIHVyYiwgZGlyLCBtYXhwYWNrZXQpOworCisJZXRkX3dyaXRlbChpbXgyMSwgZXRkX251bSwgMiwKKwkJKHUzMikgaW50ZXJ2YWwgPDwgRFcyX1BPTElOVEVSViB8CisJCSgodTMyKSByZWxwb2xwb3MgPDwgRFcyX1JFTFBPTFBPUykgfAorCQkoKHUzMikgZGlyIDw8IERXMl9ESVJQSUQpIHwKKwkJKCh1MzIpIGJ1ZnJvdW5kIDw8IERXMl9CVUZST1VORCkgfAorCQkoKHUzMikgZGF0YXRvZ2dsZSA8PCBEVzJfREFUQVRPRykgfAorCQkoKHUzMikgVERfTk9UQUNDRVNTRUQgPDwgRFcyX0NPTVBDT0RFKSk7CisKKwkvKiBETUEgd2lsbCBhbHdheXMgdHJhbnNmZXIgYnVmZmVyIHNpemUgZXZlbiBpZiBUT0JZQ05UIGluIERXT1JEMworCSAgIGlzIHNtYWxsZXIuIE1ha2Ugc3VyZSB3ZSBkb24ndCBvdmVycnVuIHRoZSBidWZmZXIhCisJICovCisJaWYgKGNvdW50ICYmIGNvdW50IDwgbWF4cGFja2V0KQorCQlldGRfYnVmX3NpemUgPSBjb3VudDsKKwllbHNlCisJCWV0ZF9idWZfc2l6ZSA9IG1heHBhY2tldDsKKworCWV0ZF93cml0ZWwoaW14MjEsIGV0ZF9udW0sIDMsCisJCSgodTMyKSAoZXRkX2J1Zl9zaXplIC0gMSkgPDwgRFczX0JVRlNJWkUpIHwgKHUzMikgY291bnQpOworCisJaWYgKCFjb3VudCkKKwkJZXRkLT5kbWFfaGFuZGxlID0gMDsKKworCS8qIGFsbG9jYXRlIHggYW5kIHkgYnVmZmVyIHNwYWNlIGF0IG9uY2UgKi8KKwlldGQtPmRtZW1fc2l6ZSA9IChjb3VudCA+IG1heHBhY2tldCkgPyBtYXhwYWNrZXQgKiAyIDogbWF4cGFja2V0OworCWRtZW1fb2Zmc2V0ID0gYWxsb2NfZG1lbShpbXgyMSwgZXRkLT5kbWVtX3NpemUsIHVyYl9wcml2LT5lcCk7CisJaWYgKGRtZW1fb2Zmc2V0IDwgMCkgeworCQkvKiBTZXR1cCBldmVyeXRoaW5nIHdlIGNhbiBpbiBIVyBhbmQgdXBkYXRlIHdoZW4gd2UgZ2V0IERNRU0gKi8KKwkJZXRkX3dyaXRlbChpbXgyMSwgZXRkX251bSwgMSwgKHUzMiltYXhwYWNrZXQgPDwgMTYpOworCisJCWRldl9kYmcoaW14MjEtPmRldiwgIlF1ZXVpbmcgZXRkICVkIGZvciBETUVNXG4iLCBldGRfbnVtKTsKKwkJZGVidWdfdXJiX3F1ZXVlZF9mb3JfZG1lbShpbXgyMSwgdXJiKTsKKwkJbGlzdF9hZGRfdGFpbCgmZXRkLT5xdWV1ZSwgJmlteDIxLT5xdWV1ZV9mb3JfZG1lbSk7CisJCXJldHVybjsKKwl9CisKKwlldGRfd3JpdGVsKGlteDIxLCBldGRfbnVtLCAxLAorCQkoKCh1MzIpIGRtZW1fb2Zmc2V0ICsgKHUzMikgbWF4cGFja2V0KSA8PCBEVzFfWUJVRlNSVEFEKSB8CisJCSh1MzIpIGRtZW1fb2Zmc2V0KTsKKworCXVyYl9wcml2LT5hY3RpdmUgPSAxOworCisJLyogZW5hYmxlIHRoZSBFVEQgdG8ga2ljayBvZmYgdHJhbnNmZXIgKi8KKwlkZXZfdmRiZyhpbXgyMS0+ZGV2LCAiQWN0aXZhdGluZyBldGQgJWQgZm9yICVkIGJ5dGVzICVzXG4iLAorCQlldGRfbnVtLCBjb3VudCwgZGlyICE9IFREX0RJUl9JTiA/ICJvdXQiIDogImluIik7CisJYWN0aXZhdGVfZXRkKGlteDIxLCBldGRfbnVtLCBldGQtPmRtYV9oYW5kbGUsIGRpcik7CisKK30KKworc3RhdGljIHZvaWQgbm9uaXNvY19ldGRfZG9uZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBldGRfbnVtKQoreworCXN0cnVjdCBpbXgyMSAqaW14MjEgPSBoY2RfdG9faW14MjEoaGNkKTsKKwlzdHJ1Y3QgZXRkX3ByaXYgKmV0ZCA9ICZpbXgyMS0+ZXRkW2V0ZF9udW1dOworCXUzMiBldGRfbWFzayA9IDEgPDwgZXRkX251bTsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYl9wcml2ID0gdXJiLT5oY3ByaXY7CisJaW50IGRpcjsKKwl1MTYgeGJ1ZmFkZHI7CisJaW50IGNjOworCXUzMiBieXRlc194ZnJkOworCWludCBldGRfZG9uZTsKKworCWRpc2FjdGl2YXRlX2V0ZChpbXgyMSwgZXRkX251bSk7CisKKwlkaXIgPSAoZXRkX3JlYWRsKGlteDIxLCBldGRfbnVtLCAwKSA+PiBEVzBfRElSRUNUKSAmIDB4MzsKKwl4YnVmYWRkciA9IGV0ZF9yZWFkbChpbXgyMSwgZXRkX251bSwgMSkgJiAweGZmZmY7CisJY2MgPSAoZXRkX3JlYWRsKGlteDIxLCBldGRfbnVtLCAyKSA+PiBEVzJfQ09NUENPREUpICYgMHhmOworCWJ5dGVzX3hmcmQgPSBldGQtPmxlbiAtIChldGRfcmVhZGwoaW14MjEsIGV0ZF9udW0sIDMpICYgMHgxZmZmZmYpOworCisJLyogc2F2ZSB0b2dnbGUgY2FycnkgKi8KKwl1c2Jfc2V0dG9nZ2xlKHVyYi0+ZGV2LCB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCisJCSAgICAgIHVzYl9waXBlb3V0KHVyYi0+cGlwZSksCisJCSAgICAgIChldGRfcmVhZGwoaW14MjEsIGV0ZF9udW0sIDApID4+IERXMF9UT0dDUlkpICYgMHgxKTsKKworCWlmIChkaXIgPT0gVERfRElSX0lOKSB7CisJCWNsZWFyX3RvZ2dsZV9iaXQoaW14MjEsIFVTQkhfWEZJTExTVEFULCBldGRfbWFzayk7CisJCWNsZWFyX3RvZ2dsZV9iaXQoaW14MjEsIFVTQkhfWUZJTExTVEFULCBldGRfbWFzayk7CisJfQorCWZyZWVfZG1lbShpbXgyMSwgeGJ1ZmFkZHIpOworCisJdXJiLT5lcnJvcl9jb3VudCA9IDA7CisJaWYgKCEodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spCisJCQkmJiAoY2MgPT0gVERfREFUQVVOREVSUlVOKSkKKwkJY2MgPSBURF9DQ19OT0VSUk9SOworCisJaWYgKGNjICE9IDApCisJCWRldl92ZGJnKGlteDIxLT5kZXYsICJjYyBpcyAweCV4XG4iLCBjYyk7CisKKwlldGRfZG9uZSA9IChjY190b19lcnJvcltjY10gIT0gMCk7CS8qIHN0b3AgaWYgZXJyb3IgKi8KKworCXN3aXRjaCAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkpIHsKKwljYXNlIFBJUEVfQ09OVFJPTDoKKwkJc3dpdGNoICh1cmJfcHJpdi0+c3RhdGUpIHsKKwkJY2FzZSBVU19DVFJMX1NFVFVQOgorCQkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IDApCisJCQkJdXJiX3ByaXYtPnN0YXRlID0gVVNfQ1RSTF9EQVRBOworCQkJZWxzZQorCQkJCXVyYl9wcml2LT5zdGF0ZSA9IFVTX0NUUkxfQUNLOworCQkJYnJlYWs7CisJCWNhc2UgVVNfQ1RSTF9EQVRBOgorCQkJdXJiLT5hY3R1YWxfbGVuZ3RoICs9IGJ5dGVzX3hmcmQ7CisJCQl1cmJfcHJpdi0+c3RhdGUgPSBVU19DVFJMX0FDSzsKKwkJCWJyZWFrOworCQljYXNlIFVTX0NUUkxfQUNLOgorCQkJZXRkX2RvbmUgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKGlteDIxLT5kZXYsCisJCQkJIkludmFsaWQgcGlwZSBzdGF0ZSAlZFxuIiwgdXJiX3ByaXYtPnN0YXRlKTsKKwkJCWV0ZF9kb25lID0gMTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCisJY2FzZSBQSVBFX0JVTEs6CisJCXVyYi0+YWN0dWFsX2xlbmd0aCArPSBieXRlc194ZnJkOworCQlpZiAoKHVyYl9wcml2LT5zdGF0ZSA9PSBVU19CVUxLKQorCQkgICAgJiYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfWkVST19QQUNLRVQpCisJCSAgICAmJiB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAwCisJCSAgICAmJiAoKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCAlCisJCQkgdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLAorCQkJCSAgICAgICB1c2JfcGlwZW91dCh1cmItPnBpcGUpKSkgPT0gMCkpIHsKKwkJCS8qIG5lZWQgYSAwLXBhY2tldCAqLworCQkJdXJiX3ByaXYtPnN0YXRlID0gVVNfQlVMSzA7CisJCX0gZWxzZSB7CisJCQlldGRfZG9uZSA9IDE7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFBJUEVfSU5URVJSVVBUOgorCQl1cmItPmFjdHVhbF9sZW5ndGggKz0gYnl0ZXNfeGZyZDsKKwkJZXRkX2RvbmUgPSAxOworCQlicmVhazsKKwl9CisKKwlpZiAoIWV0ZF9kb25lKSB7CisJCWRldl92ZGJnKGlteDIxLT5kZXYsICJuZXh0IHN0YXRlPSVkXG4iLCB1cmJfcHJpdi0+c3RhdGUpOworCQlzY2hlZHVsZV9ub25pc29jX2V0ZChpbXgyMSwgdXJiKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwID0gdXJiLT5lcDsKKworCQl1cmJfZG9uZShoY2QsIHVyYiwgY2NfdG9fZXJyb3JbY2NdKTsKKwkJZXRkLT51cmIgPSBOVUxMOworCisJCWlmICghbGlzdF9lbXB0eSgmZXAtPnVyYl9saXN0KSkgeworCQkJdXJiID0gbGlzdF9maXJzdF9lbnRyeSgmZXAtPnVyYl9saXN0LAorCQkJCXN0cnVjdCB1cmIsIHVyYl9saXN0KTsKKwkJCWRldl92ZGJnKGlteDIxLT5kZXYsICJuZXh0IFVSQiAlcFxuIiwgdXJiKTsKKwkJCXNjaGVkdWxlX25vbmlzb2NfZXRkKGlteDIxLCB1cmIpOworCQl9CisJfQorfQorCitzdGF0aWMgc3RydWN0IGVwX3ByaXYgKmFsbG9jX2VwKHZvaWQpCit7CisJaW50IGk7CisJc3RydWN0IGVwX3ByaXYgKmVwX3ByaXY7CisKKwllcF9wcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVwX3ByaXYpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWVwX3ByaXYpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9JU09fRVREUzsgKytpKQorCQllcF9wcml2LT5ldGRbaV0gPSAtMTsKKworCXJldHVybiBlcF9wcml2OworfQorCitzdGF0aWMgaW50IGlteDIxX2hjX3VyYl9lbnF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCQkJc3RydWN0IHVyYiAqdXJiLCBnZnBfdCBtZW1fZmxhZ3MpCit7CisJc3RydWN0IGlteDIxICppbXgyMSA9IGhjZF90b19pbXgyMShoY2QpOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXAgPSB1cmItPmVwOworCXN0cnVjdCB1cmJfcHJpdiAqdXJiX3ByaXY7CisJc3RydWN0IGVwX3ByaXYgKmVwX3ByaXY7CisJc3RydWN0IGV0ZF9wcml2ICpldGQ7CisJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBuZXdfZXAgPSAwOworCisJZGV2X3ZkYmcoaW14MjEtPmRldiwKKwkJImVucXVldWUgdXJiPSVwIGVwPSVwIGxlbj0lZCAiCisJCSJidWZmZXI9JXAgZG1hPSUwOFggc2V0dXBCdWY9JXAgc2V0dXBEbWE9JTA4WFxuIiwKKwkJdXJiLCBlcCwKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT50cmFuc2Zlcl9kbWEsCisJCXVyYi0+c2V0dXBfcGFja2V0LCB1cmItPnNldHVwX2RtYSk7CisKKwlpZiAodXNiX3BpcGVpc29jKHVyYi0+cGlwZSkpCisJCXJldHVybiBpbXgyMV9oY191cmJfZW5xdWV1ZV9pc29jKGhjZCwgZXAsIHVyYiwgbWVtX2ZsYWdzKTsKKworCXVyYl9wcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVyYl9wcml2KSwgbWVtX2ZsYWdzKTsKKwlpZiAoIXVyYl9wcml2KQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbXgyMS0+bG9jaywgZmxhZ3MpOworCisJZXBfcHJpdiA9IGVwLT5oY3ByaXY7CisJaWYgKGVwX3ByaXYgPT0gTlVMTCkgeworCQllcF9wcml2ID0gYWxsb2NfZXAoKTsKKwkJaWYgKCFlcF9wcml2KSB7CisJCQlyZXQgPSAtRU5PTUVNOworCQkJZ290byBmYWlsZWRfYWxsb2NfZXA7CisJCX0KKwkJZXAtPmhjcHJpdiA9IGVwX3ByaXY7CisJCWVwX3ByaXYtPmVwID0gZXA7CisJCW5ld19lcCA9IDE7CisJfQorCisJcmV0ID0gdXNiX2hjZF9saW5rX3VyYl90b19lcChoY2QsIHVyYik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsZWRfbGluazsKKworCXVyYi0+c3RhdHVzID0gLUVJTlBST0dSRVNTOworCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CisJdXJiLT5lcnJvcl9jb3VudCA9IDA7CisJdXJiLT5oY3ByaXYgPSB1cmJfcHJpdjsKKwl1cmJfcHJpdi0+ZXAgPSBlcDsKKworCXN3aXRjaCAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkpIHsKKwljYXNlIFBJUEVfQ09OVFJPTDoKKwkJdXJiX3ByaXYtPnN0YXRlID0gVVNfQ1RSTF9TRVRVUDsKKwkJYnJlYWs7CisJY2FzZSBQSVBFX0JVTEs6CisJCXVyYl9wcml2LT5zdGF0ZSA9IFVTX0JVTEs7CisJCWJyZWFrOworCX0KKworCWRlYnVnX3VyYl9zdWJtaXR0ZWQoaW14MjEsIHVyYik7CisJaWYgKGVwX3ByaXYtPmV0ZFswXSA8IDApIHsKKwkJaWYgKGVwX3ByaXYtPndhaXRpbmdfZXRkKSB7CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsCisJCQkJIm5vIEVURCBhdmFpbGFibGUgYWxyZWFkeSBxdWV1ZWQgJXBcbiIsCisJCQkJZXBfcHJpdik7CisJCQlkZWJ1Z191cmJfcXVldWVkX2Zvcl9ldGQoaW14MjEsIHVyYik7CisJCQlnb3RvIG91dDsKKwkJfQorCQllcF9wcml2LT5ldGRbMF0gPSBhbGxvY19ldGQoaW14MjEpOworCQlpZiAoZXBfcHJpdi0+ZXRkWzBdIDwgMCkgeworCQkJZGV2X2RiZyhpbXgyMS0+ZGV2LAorCQkJCSJubyBFVEQgYXZhaWxhYmxlIHF1ZXVlaW5nICVwXG4iLCBlcF9wcml2KTsKKwkJCWRlYnVnX3VyYl9xdWV1ZWRfZm9yX2V0ZChpbXgyMSwgdXJiKTsKKwkJCWxpc3RfYWRkX3RhaWwoJmVwX3ByaXYtPnF1ZXVlLCAmaW14MjEtPnF1ZXVlX2Zvcl9ldGQpOworCQkJZXBfcHJpdi0+d2FpdGluZ19ldGQgPSAxOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwkvKiBTY2hlZHVsZSBpZiBubyBVUkIgYWxyZWFkeSBhY3RpdmUgZm9yIHRoaXMgZW5kcG9pbnQgKi8KKwlldGQgPSAmaW14MjEtPmV0ZFtlcF9wcml2LT5ldGRbMF1dOworCWlmIChldGQtPnVyYiA9PSBOVUxMKSB7CisJCURFQlVHX0xPR19GUkFNRShpbXgyMSwgZXRkLCBsYXN0X3JlcSk7CisJCXNjaGVkdWxlX25vbmlzb2NfZXRkKGlteDIxLCB1cmIpOworCX0KKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7CisKK2ZhaWxlZF9saW5rOgorZmFpbGVkX2FsbG9jX2VwOgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisJa2ZyZWUodXJiX3ByaXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaW14MjFfaGNfdXJiX2RlcXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVyYiAqdXJiLAorCQkJCWludCBzdGF0dXMpCit7CisJc3RydWN0IGlteDIxICppbXgyMSA9IGhjZF90b19pbXgyMShoY2QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwlzdHJ1Y3QgZXBfcHJpdiAqZXBfcHJpdjsKKwlzdHJ1Y3QgdXJiX3ByaXYgKnVyYl9wcml2ID0gdXJiLT5oY3ByaXY7CisJaW50IHJldCA9IC1FSU5WQUw7CisKKwlkZXZfdmRiZyhpbXgyMS0+ZGV2LCAiZGVxdWV1ZSB1cmI9JXAgaXNvPSVkIHN0YXR1cz0lZFxuIiwKKwkJdXJiLCB1c2JfcGlwZWlzb2ModXJiLT5waXBlKSwgc3RhdHVzKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbXgyMS0+bG9jaywgZmxhZ3MpOworCisJcmV0ID0gdXNiX2hjZF9jaGVja191bmxpbmtfdXJiKGhjZCwgdXJiLCBzdGF0dXMpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbDsKKwllcCA9IHVyYl9wcml2LT5lcDsKKwllcF9wcml2ID0gZXAtPmhjcHJpdjsKKworCWRlYnVnX3VyYl91bmxpbmtlZChpbXgyMSwgdXJiKTsKKworCWlmICh1c2JfcGlwZWlzb2ModXJiLT5waXBlKSkgeworCQlkZXF1ZXVlX2lzb2NfdXJiKGlteDIxLCB1cmIsIGVwX3ByaXYpOworCQlzY2hlZHVsZV9pc29jX2V0ZHMoaGNkLCBlcCk7CisJfSBlbHNlIGlmICh1cmJfcHJpdi0+YWN0aXZlKSB7CisJCWludCBldGRfbnVtID0gZXBfcHJpdi0+ZXRkWzBdOworCQlpZiAoZXRkX251bSAhPSAtMSkgeworCQkJZGlzYWN0aXZhdGVfZXRkKGlteDIxLCBldGRfbnVtKTsKKwkJCWZyZWVfZG1lbShpbXgyMSwgZXRkX3JlYWRsKGlteDIxLCBldGRfbnVtLCAxKSAmIDB4ZmZmZik7CisJCQlpbXgyMS0+ZXRkW2V0ZF9udW1dLnVyYiA9IE5VTEw7CisJCX0KKwl9CisKKwl1cmJfZG9uZShoY2QsIHVyYiwgc3RhdHVzKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiBJbnRlcnJ1cHQgZGlzcGF0Y2gJIAkJCSovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKK3N0YXRpYyB2b2lkIHByb2Nlc3NfZXRkcyhzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgaW14MjEgKmlteDIxLCBpbnQgc29mKQoreworCWludCBldGRfbnVtOworCWludCBlbmFibGVfc29mX2ludCA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpbXgyMS0+bG9jaywgZmxhZ3MpOworCisJZm9yIChldGRfbnVtID0gMDsgZXRkX251bSA8IFVTQl9OVU1fRVREOyBldGRfbnVtKyspIHsKKwkJdTMyIGV0ZF9tYXNrID0gMSA8PCBldGRfbnVtOworCQl1MzIgZW5hYmxlZCA9IHJlYWRsKGlteDIxLT5yZWdzICsgVVNCSF9FVERFTlNFVCkgJiBldGRfbWFzazsKKwkJdTMyIGRvbmUgPSByZWFkbChpbXgyMS0+cmVncyArIFVTQkhfRVRERE9ORVNUQVQpICYgZXRkX21hc2s7CisJCXN0cnVjdCBldGRfcHJpdiAqZXRkID0gJmlteDIxLT5ldGRbZXRkX251bV07CisKKworCQlpZiAoZG9uZSkgeworCQkJREVCVUdfTE9HX0ZSQU1FKGlteDIxLCBldGQsIGxhc3RfaW50KTsKKwkJfSBlbHNlIHsKKy8qCisgKiBLbHVkZ2Ugd2FybmluZyEKKyAqCisgKiBXaGVuIG11bHRpcGxlIHRyYW5zZmVycyBhcmUgdXNpbmcgdGhlIGJ1cyB3ZSBzb21ldGltZXMgZ2V0IGludG8gYSBzdGF0ZQorICogd2hlcmUgdGhlIHRyYW5zZmVyIGhhcyBjb21wbGV0ZWQgKHRoZSBDQyBmaWVsZCBvZiB0aGUgRVREIGlzICE9IDB4MEYpLAorICogdGhlIEVURCBoYXMgc2VsZiBkaXNhYmxlZCBidXQgdGhlIEVURERPTkVTVEFUIGZsYWcgaXMgbm90IHNldAorICogKGFuZCBoZW5jZSBubyBpbnRlcnJ1cHQgb2NjdXJzKS4KKyAqIFRoaXMgY2F1c2VzIHRoZSB0cmFuc2ZlciBpbiBxdWVzdGlvbiB0byBoYW5nLgorICogVGhlIGtsdWRnZSBiZWxvdyBjaGVja3MgZm9yIHRoaXMgY29uZGl0aW9uIGF0IGVhY2ggU09GIGFuZCBwcm9jZXNzZXMgYW55CisgKiBibG9ja2VkIEVURHMgKGFmdGVyIGFuIGFyYml0YXJ5IDEwIGZyYW1lIHdhaXQpCisgKgorICogV2l0aCBhIHNpbmdsZSBhY3RpdmUgdHJhbnNmZXIgdGhlIHVzYnRlc3QgdGVzdCBzdWl0ZSB3aWxsIHJ1biBmb3IgZGF5cworICogd2l0aG91dCB0aGUga2x1ZGdlLgorICogV2l0aCBvdGhlciBidXMgYWN0aXZpdHkgKGVnIG1hc3Mgc3RvcmFnZSkgZXZlbiBqdXN0IHRlc3QxIHdpbGwgaGFuZyB3aXRob3V0CisgKiB0aGUga2x1ZGdlLgorICovCisJCQl1MzIgZHdvcmQwOworCQkJaW50IGNjOworCisJCQlpZiAoZXRkLT5hY3RpdmVfY291bnQgJiYgIWVuYWJsZWQpIC8qIHN1c3BpY2lvdXMuLi4gKi8KKwkJCQllbmFibGVfc29mX2ludCA9IDE7CisKKwkJCWlmICghc29mIHx8IGVuYWJsZWQgfHwgIWV0ZC0+YWN0aXZlX2NvdW50KQorCQkJCWNvbnRpbnVlOworCisJCQljYyA9IGV0ZF9yZWFkbChpbXgyMSwgZXRkX251bSwgMikgPj4gRFcyX0NPTVBDT0RFOworCQkJaWYgKGNjID09IFREX05PVEFDQ0VTU0VEKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoKytldGQtPmFjdGl2ZV9jb3VudCA8IDEwKQorCQkJCWNvbnRpbnVlOworCisJCQlkd29yZDAgPSBldGRfcmVhZGwoaW14MjEsIGV0ZF9udW0sIDApOworCQkJZGV2X2RiZyhpbXgyMS0+ZGV2LAorCQkJCSJ1bmJsb2NrIEVURCAlZCBkZXY9MHglWCBlcD0weCVYIGNjPTB4JTAyWCFcbiIsCisJCQkJZXRkX251bSwgZHdvcmQwICYgMHg3RiwKKwkJCQkoZHdvcmQwID4+IERXMF9FTkRQTlQpICYgMHgwRiwKKwkJCQljYyk7CisKKyNpZmRlZiBERUJVRworCQkJZGV2X2RiZyhpbXgyMS0+ZGV2LAorCQkJCSJmcmFtZTogYWN0PSVkIGRpc2FjdD0lZCIKKwkJCQkiIGludD0lZCByZXE9JWQgY3VyPSVkXG4iLAorCQkJCWV0ZC0+YWN0aXZhdGVkX2ZyYW1lLAorCQkJCWV0ZC0+ZGlzYWN0aXZhdGVkX2ZyYW1lLAorCQkJCWV0ZC0+bGFzdF9pbnRfZnJhbWUsCisJCQkJZXRkLT5sYXN0X3JlcV9mcmFtZSwKKwkJCQlyZWFkbChpbXgyMS0+cmVncyArIFVTQkhfRlJNTlVCKSk7CisJCQlpbXgyMS0+ZGVidWdfdW5ibG9ja3MrKzsKKyNlbmRpZgorCQkJZXRkLT5hY3RpdmVfY291bnQgPSAwOworLyogRW5kIG9mIGtsdWRnZSAqLworCQl9CisKKwkJaWYgKGV0ZC0+ZXAgPT0gTlVMTCB8fCBldGQtPnVyYiA9PSBOVUxMKSB7CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsCisJCQkJIkludGVycnVwdCBmb3IgdW5leHBlY3RlZCBldGQgJWQiCisJCQkJIiBlcD0lcCB1cmI9JXBcbiIsCisJCQkJZXRkX251bSwgZXRkLT5lcCwgZXRkLT51cmIpOworCQkJZGlzYWN0aXZhdGVfZXRkKGlteDIxLCBldGRfbnVtKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHVzYl9waXBlaXNvYyhldGQtPnVyYi0+cGlwZSkpCisJCQlpc29jX2V0ZF9kb25lKGhjZCwgZXRkLT51cmIsIGV0ZF9udW0pOworCQllbHNlCisJCQlub25pc29jX2V0ZF9kb25lKGhjZCwgZXRkLT51cmIsIGV0ZF9udW0pOworCX0KKworCS8qIG9ubHkgZW5hYmxlIFNPRiBpbnRlcnJ1cHQgaWYgaXQgbWF5IGJlIG5lZWRlZCBmb3IgdGhlIGtsdWRnZSAqLworCWlmIChlbmFibGVfc29mX2ludCkKKwkJc2V0X3JlZ2lzdGVyX2JpdHMoaW14MjEsIFVTQkhfU1lTSUVOLCBVU0JIX1NZU0lFTl9TT0ZJTlQpOworCWVsc2UKKwkJY2xlYXJfcmVnaXN0ZXJfYml0cyhpbXgyMSwgVVNCSF9TWVNJRU4sIFVTQkhfU1lTSUVOX1NPRklOVCk7CisKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlteDIxLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpbXgyMV9pcnEoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3QgaW14MjEgKmlteDIxID0gaGNkX3RvX2lteDIxKGhjZCk7CisJdTMyIGludHMgPSByZWFkbChpbXgyMS0+cmVncyArIFVTQkhfU1lTSVNSKTsKKworCWlmIChpbnRzICYgVVNCSF9TWVNJRU5fSEVSUklOVCkKKwkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiU2NoZWR1bGluZyBlcnJvclxuIik7CisKKwlpZiAoaW50cyAmIFVTQkhfU1lTSUVOX1NPUklOVCkKKwkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiU2NoZWR1bGluZyBvdmVycnVuXG4iKTsKKworCWlmIChpbnRzICYgKFVTQkhfU1lTSVNSX0RPTkVJTlQgfCBVU0JIX1NZU0lTUl9TT0ZJTlQpKQorCQlwcm9jZXNzX2V0ZHMoaGNkLCBpbXgyMSwgaW50cyAmIFVTQkhfU1lTSVNSX1NPRklOVCk7CisKKwl3cml0ZWwoaW50cywgaW14MjEtPnJlZ3MgKyBVU0JIX1NZU0lTUik7CisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBpbXgyMV9oY19lbmRwb2ludF9kaXNhYmxlKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCQkJICAgICAgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCkKK3sKKwlzdHJ1Y3QgaW14MjEgKmlteDIxID0gaGNkX3RvX2lteDIxKGhjZCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZXBfcHJpdiAqZXBfcHJpdjsKKwlpbnQgaTsKKworCWlmIChlcCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKKwllcF9wcml2ID0gZXAtPmhjcHJpdjsKKwlkZXZfdmRiZyhpbXgyMS0+ZGV2LCAiZGlzYWJsZSBlcD0lcCwgZXAtPmhjcHJpdj0lcFxuIiwgZXAsIGVwX3ByaXYpOworCisJaWYgKCFsaXN0X2VtcHR5KCZlcC0+dXJiX2xpc3QpKQorCQlkZXZfZGJnKGlteDIxLT5kZXYsICJlcCdzIFVSQiBsaXN0IGlzIG5vdCBlbXB0eVxuIik7CisKKwlpZiAoZXBfcHJpdiAhPSBOVUxMKSB7CisJCWZvciAoaSA9IDA7IGkgPCBOVU1fSVNPX0VURFM7IGkrKykgeworCQkJaWYgKGVwX3ByaXYtPmV0ZFtpXSA+IC0xKQorCQkJCWRldl9kYmcoaW14MjEtPmRldiwgImZyZWUgZXRkICVkIGZvciBkaXNhYmxlXG4iLAorCQkJCQllcF9wcml2LT5ldGRbaV0pOworCisJCQlmcmVlX2V0ZChpbXgyMSwgZXBfcHJpdi0+ZXRkW2ldKTsKKwkJfQorCQlrZnJlZShlcF9wcml2KTsKKwkJZXAtPmhjcHJpdiA9IE5VTEw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IFVTQl9OVU1fRVREOyBpKyspIHsKKwkJaWYgKGlteDIxLT5ldGRbaV0uYWxsb2MgJiYgaW14MjEtPmV0ZFtpXS5lcCA9PSBlcCkgeworCQkJZGV2X2VycihpbXgyMS0+ZGV2LAorCQkJCSJBY3RpdmUgZXRkICVkIGZvciBkaXNhYmxlZCBlcD0lcCFcbiIsIGksIGVwKTsKKwkJCWZyZWVfZXRkKGlteDIxLCBpKTsKKwkJfQorCX0KKwlmcmVlX2VwZG1lbShpbXgyMSwgZXApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlteDIxLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KKy8qIEh1YiBoYW5kbGluZwkJIAkJCSovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKK3N0YXRpYyBpbnQgZ2V0X2h1Yl9kZXNjcmlwdG9yKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCQkgICAgICBzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yICpkZXNjKQoreworCXN0cnVjdCBpbXgyMSAqaW14MjEgPSBoY2RfdG9faW14MjEoaGNkKTsKKwlkZXNjLT5iRGVzY3JpcHRvclR5cGUgPSAweDI5OwkvKiBIVUIgZGVzY3JpcHRvciAqLworCWRlc2MtPmJIdWJDb250ckN1cnJlbnQgPSAwOworCisJZGVzYy0+Yk5iclBvcnRzID0gcmVhZGwoaW14MjEtPnJlZ3MgKyBVU0JIX1JPT1RIVUJBKQorCQkmIFVTQkhfUk9PVEhVQkFfTkROU1RNUFJUX01BU0s7CisJZGVzYy0+YkRlc2NMZW5ndGggPSA5OworCWRlc2MtPmJQd3JPbjJQd3JHb29kID0gMDsKKwlkZXNjLT53SHViQ2hhcmFjdGVyaXN0aWNzID0gKF9fZm9yY2UgX191MTYpIGNwdV90b19sZTE2KAorCQkweDAwMDIgfAkvKiBObyBwb3dlciBzd2l0Y2hpbmcgKi8KKwkJMHgwMDEwIHwJLyogTm8gb3ZlciBjdXJyZW50IHByb3RlY3Rpb24gKi8KKwkJMCk7CisKKwlkZXNjLT5iaXRtYXBbMF0gPSAxIDw8IDE7CisJZGVzYy0+Yml0bWFwWzFdID0gfjA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaW14MjFfaGNfaHViX3N0YXR1c19kYXRhKHN0cnVjdCB1c2JfaGNkICpoY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaW14MjEgKmlteDIxID0gaGNkX3RvX2lteDIxKGhjZCk7CisJaW50IHBvcnRzOworCWludCBjaGFuZ2VkID0gMDsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisJcG9ydHMgPSByZWFkbChpbXgyMS0+cmVncyArIFVTQkhfUk9PVEhVQkEpCisJCSYgVVNCSF9ST09USFVCQV9ORE5TVE1QUlRfTUFTSzsKKwlpZiAocG9ydHMgPiA3KSB7CisJCXBvcnRzID0gNzsKKwkJZGV2X2VycihpbXgyMS0+ZGV2LCAicG9ydHMgJWQgPiA3XG4iLCBwb3J0cyk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBwb3J0czsgaSsrKSB7CisJCWlmIChyZWFkbChpbXgyMS0+cmVncyArIFVTQkhfUE9SVFNUQVQoaSkpICYKKwkJCShVU0JIX1BPUlRTVEFUX0NPTk5FQ1RTQyB8CisJCQlVU0JIX1BPUlRTVEFUX1BSVEVOQkxTQyB8CisJCQlVU0JIX1BPUlRTVEFUX1BSVFNUQVRTQyB8CisJCQlVU0JIX1BPUlRTVEFUX09WUkNVUklDIHwKKwkJCVVTQkhfUE9SVFNUQVRfUFJUUlNUU0MpKSB7CisKKwkJCWNoYW5nZWQgPSAxOworCQkJYnVmWzBdIHw9IDEgPDwgKGkgKyAxKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbXgyMS0+bG9jaywgZmxhZ3MpOworCisJaWYgKGNoYW5nZWQpCisJCWRldl9pbmZvKGlteDIxLT5kZXYsICJIdWIgc3RhdHVzIGNoYW5nZWRcbiIpOworCXJldHVybiBjaGFuZ2VkOworfQorCitzdGF0aWMgaW50IGlteDIxX2hjX2h1Yl9jb250cm9sKHN0cnVjdCB1c2JfaGNkICpoY2QsCisJCQkJdTE2IHR5cGVSZXEsCisJCQkJdTE2IHdWYWx1ZSwgdTE2IHdJbmRleCwgY2hhciAqYnVmLCB1MTYgd0xlbmd0aCkKK3sKKwlzdHJ1Y3QgaW14MjEgKmlteDIxID0gaGNkX3RvX2lteDIxKGhjZCk7CisJaW50IHJjID0gMDsKKwl1MzIgc3RhdHVzX3dyaXRlID0gMDsKKworCXN3aXRjaCAodHlwZVJlcSkgeworCWNhc2UgQ2xlYXJIdWJGZWF0dXJlOgorCQlkZXZfZGJnKGlteDIxLT5kZXYsICJDbGVhckh1YkZlYXR1cmVcbiIpOworCQlzd2l0Y2ggKHdWYWx1ZSkgeworCQljYXNlIENfSFVCX09WRVJfQ1VSUkVOVDoKKwkJCWRldl9kYmcoaW14MjEtPmRldiwgIiAgICBPVkVSX0NVUlJFTlRcbiIpOworCQkJYnJlYWs7CisJCWNhc2UgQ19IVUJfTE9DQUxfUE9XRVI6CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsICIgICAgTE9DQUxfUE9XRVJcbiIpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsICIgICAgdW5rbm93blxuIik7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKKworCWNhc2UgQ2xlYXJQb3J0RmVhdHVyZToKKwkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiQ2xlYXJQb3J0RmVhdHVyZVxuIik7CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9FTkFCTEU6CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsICIgICAgRU5BQkxFXG4iKTsKKwkJCXN0YXR1c193cml0ZSA9IFVTQkhfUE9SVFNUQVRfQ1VSQ09OU1Q7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsICIgICAgU1VTUEVORFxuIik7CisJCQlzdGF0dXNfd3JpdGUgPSBVU0JIX1BPUlRTVEFUX1BSVE9WUkNVUkk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1BPV0VSOgorCQkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiICAgIFBPV0VSXG4iKTsKKwkJCXN0YXR1c193cml0ZSA9IFVTQkhfUE9SVFNUQVRfTFNERVZDT047CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0NfRU5BQkxFOgorCQkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiICAgIENfRU5BQkxFXG4iKTsKKwkJCXN0YXR1c193cml0ZSA9IFVTQkhfUE9SVFNUQVRfUFJURU5CTFNDOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQ6CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsICIgICAgQ19TVVNQRU5EXG4iKTsKKwkJCXN0YXR1c193cml0ZSA9IFVTQkhfUE9SVFNUQVRfUFJUU1RBVFNDOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT046CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsICIgICAgQ19DT05ORUNUSU9OXG4iKTsKKwkJCXN0YXR1c193cml0ZSA9IFVTQkhfUE9SVFNUQVRfQ09OTkVDVFNDOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX09WRVJfQ1VSUkVOVDoKKwkJCWRldl9kYmcoaW14MjEtPmRldiwgIiAgICBDX09WRVJfQ1VSUkVOVFxuIik7CisJCQlzdGF0dXNfd3JpdGUgPSBVU0JIX1BPUlRTVEFUX09WUkNVUklDOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX1JFU0VUOgorCQkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiICAgIENfUkVTRVRcbiIpOworCQkJc3RhdHVzX3dyaXRlID0gVVNCSF9QT1JUU1RBVF9QUlRSU1RTQzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiICAgIHVua25vd25cbiIpOworCQkJcmMgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgR2V0SHViRGVzY3JpcHRvcjoKKwkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiR2V0SHViRGVzY3JpcHRvclxuIik7CisJCXJjID0gZ2V0X2h1Yl9kZXNjcmlwdG9yKGhjZCwgKHZvaWQgKilidWYpOworCQlicmVhazsKKworCWNhc2UgR2V0SHViU3RhdHVzOgorCQlkZXZfZGJnKGlteDIxLT5kZXYsICIgIEdldEh1YlN0YXR1c1xuIik7CisJCSooX19sZTMyICopIGJ1ZiA9IDA7CisJCWJyZWFrOworCisJY2FzZSBHZXRQb3J0U3RhdHVzOgorCQlkZXZfZGJnKGlteDIxLT5kZXYsICJHZXRQb3J0U3RhdHVzOiBwb3J0OiAlZCwgMHgleFxuIiwKKwkJICAgIHdJbmRleCwgVVNCSF9QT1JUU1RBVCh3SW5kZXggLSAxKSk7CisJCSooX19sZTMyICopIGJ1ZiA9IHJlYWRsKGlteDIxLT5yZWdzICsKKwkJCVVTQkhfUE9SVFNUQVQod0luZGV4IC0gMSkpOworCQlicmVhazsKKworCWNhc2UgU2V0SHViRmVhdHVyZToKKwkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiU2V0SHViRmVhdHVyZVxuIik7CisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgQ19IVUJfT1ZFUl9DVVJSRU5UOgorCQkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiICAgIE9WRVJfQ1VSUkVOVFxuIik7CisJCQlicmVhazsKKworCQljYXNlIENfSFVCX0xPQ0FMX1BPV0VSOgorCQkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiICAgIExPQ0FMX1BPV0VSXG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiICAgIHVua25vd25cbiIpOworCQkJcmMgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKworCQlicmVhazsKKworCWNhc2UgU2V0UG9ydEZlYXR1cmU6CisJCWRldl9kYmcoaW14MjEtPmRldiwgIlNldFBvcnRGZWF0dXJlXG4iKTsKKwkJc3dpdGNoICh3VmFsdWUpIHsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX1NVU1BFTkQ6CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsICIgICAgU1VTUEVORFxuIik7CisJCQlzdGF0dXNfd3JpdGUgPSBVU0JIX1BPUlRTVEFUX1BSVFNVU1BTVDsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUE9XRVI6CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsICIgICAgUE9XRVJcbiIpOworCQkJc3RhdHVzX3dyaXRlID0gVVNCSF9QT1JUU1RBVF9QUlRQV1JTVDsKKwkJCWJyZWFrOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfUkVTRVQ6CisJCQlkZXZfZGJnKGlteDIxLT5kZXYsICIgICAgUkVTRVRcbiIpOworCQkJc3RhdHVzX3dyaXRlID0gVVNCSF9QT1JUU1RBVF9QUlRSU1RTVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZGV2X2RiZyhpbXgyMS0+ZGV2LCAiICAgIHVua25vd25cbiIpOworCQkJcmMgPSAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlkZXZfZGJnKGlteDIxLT5kZXYsICIgIHVua25vd25cbiIpOworCQlyYyA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKworCWlmIChzdGF0dXNfd3JpdGUpCisJCXdyaXRlbChzdGF0dXNfd3JpdGUsIGlteDIxLT5yZWdzICsgVVNCSF9QT1JUU1RBVCh3SW5kZXggLSAxKSk7CisJcmV0dXJuIHJjOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisvKiBIb3N0IGNvbnRyb2xsZXIgbWFuYWdlbWVudCAJCQkqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCitzdGF0aWMgaW50IGlteDIxX2hjX3Jlc2V0KHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGlteDIxICppbXgyMSA9IGhjZF90b19pbXgyMShoY2QpOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisKKwkvKiBSZXNldCB0aGUgSG9zdCBjb250cm9sZXIgbW9kdWxlcyAqLworCXdyaXRlbChVU0JPVEdfUlNUX1JTVENUUkwgfCBVU0JPVEdfUlNUX1JTVFJIIHwKKwkJVVNCT1RHX1JTVF9SU1RIU0lFIHwgVVNCT1RHX1JTVF9SU1RIQywKKwkJaW14MjEtPnJlZ3MgKyBVU0JPVEdfUlNUX0NUUkwpOworCisJLyogV2FpdCBmb3IgcmVzZXQgdG8gZmluaXNoICovCisJdGltZW91dCA9IGppZmZpZXMgKyBIWjsKKwl3aGlsZSAocmVhZGwoaW14MjEtPnJlZ3MgKyBVU0JPVEdfUlNUX0NUUkwpICE9IDApIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisJCQlkZXZfZXJyKGlteDIxLT5kZXYsICJ0aW1lb3V0IHdhaXRpbmcgZm9yIHJlc2V0XG4iKTsKKwkJCXJldHVybiAtRVRJTUVET1VUOworCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmaW14MjEtPmxvY2spOworCQlzY2hlZHVsZV90aW1lb3V0KDEpOworCQlzcGluX2xvY2tfaXJxKCZpbXgyMS0+bG9jayk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IGlteDIxX2hjX3N0YXJ0KHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IGlteDIxICppbXgyMSA9IGhjZF90b19pbXgyMShoY2QpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGksIGo7CisJdTMyIGh3X21vZGUgPSBVU0JPVEdfSFdNT0RFX0NSRUNGR19IT1NUOworCXUzMiB1c2JfY29udHJvbCA9IDA7CisKKwlod19tb2RlIHw9ICgoaW14MjEtPnBkYXRhLT5ob3N0X3hjdnIgPDwgVVNCT1RHX0hXTU9ERV9IT1NUWENWUl9TSElGVCkgJgorCQkJVVNCT1RHX0hXTU9ERV9IT1NUWENWUl9NQVNLKTsKKwlod19tb2RlIHw9ICgoaW14MjEtPnBkYXRhLT5vdGdfeGN2ciA8PCBVU0JPVEdfSFdNT0RFX09UR1hDVlJfU0hJRlQpICYKKwkJCVVTQk9UR19IV01PREVfT1RHWENWUl9NQVNLKTsKKworCWlmIChpbXgyMS0+cGRhdGEtPmhvc3QxX3R4ZW5vZSkKKwkJdXNiX2NvbnRyb2wgfD0gVVNCQ1RSTF9IT1NUMV9UWEVOX09FOworCisJaWYgKCFpbXgyMS0+cGRhdGEtPmhvc3QxX3hjdmVybGVzcykKKwkJdXNiX2NvbnRyb2wgfD0gVVNCQ1RSTF9IT1NUMV9CWVBfVExMOworCisJaWYgKGlteDIxLT5wZGF0YS0+b3RnX2V4dF94Y3ZyKQorCQl1c2JfY29udHJvbCB8PSBVU0JDVFJMX09UQ19SQ1ZfUlhEUDsKKworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisKKwl3cml0ZWwoKFVTQk9UR19DTEtfQ1RSTF9IU1QgfCBVU0JPVEdfQ0xLX0NUUkxfTUFJTiksCisJCWlteDIxLT5yZWdzICsgVVNCT1RHX0NMS19DVFJMKTsKKwl3cml0ZWwoaHdfbW9kZSwgaW14MjEtPnJlZ3MgKyBVU0JPVEdfSFdNT0RFKTsKKwl3cml0ZWwodXNiX2NvbnRyb2wsIGlteDIxLT5yZWdzICsgVVNCQ1RSTCk7CisJd3JpdGVsKFVTQl9NSVNDQ09OVFJPTF9TS1BSVFJZICB8IFVTQl9NSVNDQ09OVFJPTF9BUkJNT0RFLAorCQlpbXgyMS0+cmVncyArIFVTQl9NSVNDQ09OVFJPTCk7CisKKwkvKiBDbGVhciB0aGUgRVREcyAqLworCWZvciAoaSA9IDA7IGkgPCBVU0JfTlVNX0VURDsgaSsrKQorCQlmb3IgKGogPSAwOyBqIDwgNDsgaisrKQorCQkJZXRkX3dyaXRlbChpbXgyMSwgaSwgaiwgMCk7CisKKwkvKiBUYWtlIHRoZSBIQyBvdXQgb2YgcmVzZXQgKi8KKwl3cml0ZWwoVVNCSF9IT1NUX0NUUkxfSENVU0JTVEVfT1BFUkFUSU9OQUwgfCBVU0JIX0hPU1RfQ1RSTF9DVExCTEtTUl8xLAorCQlpbXgyMS0+cmVncyArIFVTQkhfSE9TVF9DVFJMKTsKKworCS8qIEVuYWJsZSBwb3J0cyAqLworCWlmIChpbXgyMS0+cGRhdGEtPmVuYWJsZV9vdGdfaG9zdCkKKwkJd3JpdGVsKFVTQkhfUE9SVFNUQVRfUFJUUFdSU1QgfCBVU0JIX1BPUlRTVEFUX1BSVEVOQUJTVCwKKwkJCWlteDIxLT5yZWdzICsgVVNCSF9QT1JUU1RBVCgwKSk7CisKKwlpZiAoaW14MjEtPnBkYXRhLT5lbmFibGVfaG9zdDEpCisJCXdyaXRlbChVU0JIX1BPUlRTVEFUX1BSVFBXUlNUIHwgVVNCSF9QT1JUU1RBVF9QUlRFTkFCU1QsCisJCQlpbXgyMS0+cmVncyArIFVTQkhfUE9SVFNUQVQoMSkpOworCisJaWYgKGlteDIxLT5wZGF0YS0+ZW5hYmxlX2hvc3QyKQorCQl3cml0ZWwoVVNCSF9QT1JUU1RBVF9QUlRQV1JTVCB8IFVTQkhfUE9SVFNUQVRfUFJURU5BQlNULAorCQkJaW14MjEtPnJlZ3MgKyBVU0JIX1BPUlRTVEFUKDIpKTsKKworCisJaGNkLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisKKwkvKiBFbmFibGUgaG9zdCBjb250cm9sbGVyIGludGVycnVwdHMgKi8KKwlzZXRfcmVnaXN0ZXJfYml0cyhpbXgyMSwgVVNCSF9TWVNJRU4sCisJCVVTQkhfU1lTSUVOX0hFUlJJTlQgfAorCQlVU0JIX1NZU0lFTl9ET05FSU5UIHwgVVNCSF9TWVNJRU5fU09SSU5UKTsKKwlzZXRfcmVnaXN0ZXJfYml0cyhpbXgyMSwgVVNCT1RHX0NJTlRfU1RFTiwgVVNCT1RHX0hDSU5UKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaW14MjFfaGNfc3RvcChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBpbXgyMSAqaW14MjEgPSBoY2RfdG9faW14MjEoaGNkKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlteDIxLT5sb2NrLCBmbGFncyk7CisKKwl3cml0ZWwoMCwgaW14MjEtPnJlZ3MgKyBVU0JIX1NZU0lFTik7CisJY2xlYXJfcmVnaXN0ZXJfYml0cyhpbXgyMSwgVVNCT1RHX0NJTlRfU1RFTiwgVVNCT1RHX0hDSU5UKTsKKwljbGVhcl9yZWdpc3Rlcl9iaXRzKGlteDIxLCBVU0JPVEdfQ0xLX0NUUkxfSFNUIHwgVVNCT1RHX0NMS19DVFJMX01BSU4sCisJCQkJCVVTQk9UR19DTEtfQ1RSTCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW14MjEtPmxvY2ssIGZsYWdzKTsKK30KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogRHJpdmVyIGdsdWUJCSAJCQkqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworCitzdGF0aWMgc3RydWN0IGhjX2RyaXZlciBpbXgyMV9oY19kcml2ZXIgPSB7CisJLmRlc2NyaXB0aW9uID0gaGNkX25hbWUsCisJLnByb2R1Y3RfZGVzYyA9ICJJTVgyMSBVU0IgSG9zdCBDb250cm9sbGVyIiwKKwkuaGNkX3ByaXZfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW14MjEpLAorCisJLmZsYWdzID0gSENEX1VTQjExLAorCS5pcnEgPSBpbXgyMV9pcnEsCisKKwkucmVzZXQgPSBpbXgyMV9oY19yZXNldCwKKwkuc3RhcnQgPSBpbXgyMV9oY19zdGFydCwKKwkuc3RvcCA9IGlteDIxX2hjX3N0b3AsCisKKwkvKiBJL08gcmVxdWVzdHMgKi8KKwkudXJiX2VucXVldWUgPSBpbXgyMV9oY191cmJfZW5xdWV1ZSwKKwkudXJiX2RlcXVldWUgPSBpbXgyMV9oY191cmJfZGVxdWV1ZSwKKwkuZW5kcG9pbnRfZGlzYWJsZSA9IGlteDIxX2hjX2VuZHBvaW50X2Rpc2FibGUsCisKKwkvKiBzY2hlZHVsaW5nIHN1cHBvcnQgKi8KKwkuZ2V0X2ZyYW1lX251bWJlciA9IGlteDIxX2hjX2dldF9mcmFtZSwKKworCS8qIFJvb3QgaHViIHN1cHBvcnQgKi8KKwkuaHViX3N0YXR1c19kYXRhID0gaW14MjFfaGNfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbCA9IGlteDIxX2hjX2h1Yl9jb250cm9sLAorCit9OworCitzdGF0aWMgc3RydWN0IG14MjFfdXNiaF9wbGF0Zm9ybV9kYXRhIGRlZmF1bHRfcGRhdGEgPSB7CisJLmhvc3RfeGN2ciA9IE1YMjFfVVNCWENWUl9UWERJRl9SWERJRiwKKwkub3RnX3hjdnIgPSBNWDIxX1VTQlhDVlJfVFhESUZfUlhESUYsCisJLmVuYWJsZV9ob3N0MSA9IDEsCisJLmVuYWJsZV9ob3N0MiA9IDEsCisJLmVuYWJsZV9vdGdfaG9zdCA9IDEsCisKK307CisKK3N0YXRpYyBpbnQgaW14MjFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpbXgyMSAqaW14MjEgPSBoY2RfdG9faW14MjEoaGNkKTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7CisKKwlyZW1vdmVfZGVidWdfZmlsZXMoaW14MjEpOworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisKKwlpZiAocmVzICE9IE5VTEwpIHsKKwkJY2xrX2Rpc2FibGUoaW14MjEtPmNsayk7CisJCWNsa19wdXQoaW14MjEtPmNsayk7CisJCWlvdW5tYXAoaW14MjEtPnJlZ3MpOworCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwl9CisKKwlrZnJlZShoY2QpOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgaW14MjFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCXN0cnVjdCBpbXgyMSAqaW14MjE7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJaW50IHJldDsKKwlpbnQgaXJxOworCisJcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIGlteDIxX2hjX2RyaXZlci5wcm9kdWN0X2Rlc2MpOworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9ERVY7CisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkKKwkJcmV0dXJuIC1FTlhJTzsKKworCWhjZCA9IHVzYl9jcmVhdGVfaGNkKCZpbXgyMV9oY19kcml2ZXIsCisJCSZwZGV2LT5kZXYsIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwlpZiAoaGNkID09IE5VTEwpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ2Fubm90IGNyZWF0ZSBoY2QgKCVzKVxuIiwKKwkJICAgIGRldl9uYW1lKCZwZGV2LT5kZXYpKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJaW14MjEgPSBoY2RfdG9faW14MjEoaGNkKTsKKwlpbXgyMS0+ZGV2ID0gJnBkZXYtPmRldjsKKwlpbXgyMS0+cGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpZiAoIWlteDIxLT5wZGF0YSkKKwkJaW14MjEtPnBkYXRhID0gJmRlZmF1bHRfcGRhdGE7CisKKwlzcGluX2xvY2tfaW5pdCgmaW14MjEtPmxvY2spOworCUlOSVRfTElTVF9IRUFEKCZpbXgyMS0+ZG1lbV9saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmaW14MjEtPnF1ZXVlX2Zvcl9ldGQpOworCUlOSVRfTElTVF9IRUFEKCZpbXgyMS0+cXVldWVfZm9yX2RtZW0pOworCWNyZWF0ZV9kZWJ1Z19maWxlcyhpbXgyMSk7CisKKwlyZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpLCBoY2RfbmFtZSk7CisJaWYgKCFyZXMpIHsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIGZhaWxlZF9yZXF1ZXN0X21lbTsKKwl9CisKKwlpbXgyMS0+cmVncyA9IGlvcmVtYXAocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKwlpZiAoaW14MjEtPnJlZ3MgPT0gTlVMTCkgeworCQlkZXZfZXJyKGlteDIxLT5kZXYsICJDYW5ub3QgbWFwIHJlZ2lzdGVyc1xuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZmFpbGVkX2lvcmVtYXA7CisJfQorCisJLyogRW5hYmxlIGNsb2NrcyBzb3VyY2UgKi8KKwlpbXgyMS0+Y2xrID0gY2xrX2dldChpbXgyMS0+ZGV2LCBOVUxMKTsKKwlpZiAoSVNfRVJSKGlteDIxLT5jbGspKSB7CisJCWRldl9lcnIoaW14MjEtPmRldiwgIm5vIGNsb2NrIGZvdW5kXG4iKTsKKwkJcmV0ID0gUFRSX0VSUihpbXgyMS0+Y2xrKTsKKwkJZ290byBmYWlsZWRfY2xvY2tfZ2V0OworCX0KKworCXJldCA9IGNsa19zZXRfcmF0ZShpbXgyMS0+Y2xrLCBjbGtfcm91bmRfcmF0ZShpbXgyMS0+Y2xrLCA0ODAwMDAwMCkpOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkX2Nsb2NrX3NldDsKKwlyZXQgPSBjbGtfZW5hYmxlKGlteDIxLT5jbGspOworCWlmIChyZXQpCisJCWdvdG8gZmFpbGVkX2Nsb2NrX2VuYWJsZTsKKworCWRldl9pbmZvKGlteDIxLT5kZXYsICJIYXJkd2FyZSBIQyByZXZpc2lvbjogMHglMDJYXG4iLAorCQkocmVhZGwoaW14MjEtPnJlZ3MgKyBVU0JPVEdfSFdNT0RFKSA+PiAxNikgJiAweEZGKTsKKworCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX0RJU0FCTEVEKTsKKwlpZiAocmV0ICE9IDApIHsKKwkJZGV2X2VycihpbXgyMS0+ZGV2LCAidXNiX2FkZF9oY2QoKSByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwkJZ290byBmYWlsZWRfYWRkX2hjZDsKKwl9CisKKwlyZXR1cm4gMDsKKworZmFpbGVkX2FkZF9oY2Q6CisJY2xrX2Rpc2FibGUoaW14MjEtPmNsayk7CitmYWlsZWRfY2xvY2tfZW5hYmxlOgorZmFpbGVkX2Nsb2NrX3NldDoKKwljbGtfcHV0KGlteDIxLT5jbGspOworZmFpbGVkX2Nsb2NrX2dldDoKKwlpb3VubWFwKGlteDIxLT5yZWdzKTsKK2ZhaWxlZF9pb3JlbWFwOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQpOworZmFpbGVkX3JlcXVlc3RfbWVtOgorCXJlbW92ZV9kZWJ1Z19maWxlcyhpbXgyMSk7CisJdXNiX3B1dF9oY2QoaGNkKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBpbXgyMV9oY2RfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCSAgIC5uYW1lID0gKGNoYXIgKiloY2RfbmFtZSwKKwkJICAgfSwKKwkucHJvYmUgPSBpbXgyMV9wcm9iZSwKKwkucmVtb3ZlID0gaW14MjFfcmVtb3ZlLAorCS5zdXNwZW5kID0gTlVMTCwKKwkucmVzdW1lID0gTlVMTCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlteDIxX2hjZF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaW14MjFfaGNkX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBpbXgyMV9oY2RfY2xlYW51cCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZpbXgyMV9oY2RfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoaW14MjFfaGNkX2luaXQpOworbW9kdWxlX2V4aXQoaW14MjFfaGNkX2NsZWFudXApOworCitNT0RVTEVfREVTQ1JJUFRJT04oImkuTVgyMSBVU0IgSG9zdCBjb250cm9sbGVyIik7CitNT0RVTEVfQVVUSE9SKCJNYXJ0aW4gRnV6emV5Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOmlteDIxLWhjZCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9pbXgyMS1oY2QuaCBiL2RyaXZlcnMvdXNiL2hvc3QvaW14MjEtaGNkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwZDkxMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaW14MjEtaGNkLmgKQEAgLTAsMCArMSw0MzYgQEAKKy8qCisgKiBNYWNyb3MgYW5kIHByb3RvdHlwZXMgZm9yIGkuTVgyMQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBMb3BpbmcgRG9nIEVtYmVkZGVkIFN5c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ0aW4gRnV6emV5CisgKiBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgSmF5IE1vbmttYW4gPGp0bUBsb3Bpbmdkb2cuY29tPgorICogUG9ydGVkIHRvIDIuNi4zMCwgZGVidWdnZWQgYW5kIGVuaGFuY2VkIGJ5IE1hcnRpbiBGdXp6ZXkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAqIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZCisgKiBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4JIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9fTElOVVhfSU1YMjFfSENEX0hfXworI2RlZmluZSBfX0xJTlVYX0lNWDIxX0hDRF9IX18KKworI2luY2x1ZGUgPG1hY2gvbXgyMS11c2Job3N0Lmg+CisKKyNkZWZpbmUgTlVNX0lTT19FVERTIAkyCisjZGVmaW5lIFVTQl9OVU1fRVRECTMyCisjZGVmaW5lIERNRU1fU0laRSAgIAk0MDk2CisKKy8qIFJlZ2lzdGVyIGRlZmluaXRpb25zICovCisjZGVmaW5lIFVTQk9UR19IV01PREUJCTB4MDAKKyNkZWZpbmUgVVNCT1RHX0hXTU9ERV9BTkFTREJFTgkJKDEgPDwgMTQpCisjZGVmaW5lIFVTQk9UR19IV01PREVfT1RHWENWUl9TSElGVAk2CisjZGVmaW5lIFVTQk9UR19IV01PREVfT1RHWENWUl9NQVNLCSgzIDw8IDYpCisjZGVmaW5lIFVTQk9UR19IV01PREVfT1RHWENWUl9URF9SRAkoMCA8PCA2KQorI2RlZmluZSBVU0JPVEdfSFdNT0RFX09UR1hDVlJfVFNfUkQJKDIgPDwgNikKKyNkZWZpbmUgVVNCT1RHX0hXTU9ERV9PVEdYQ1ZSX1REX1JTCSgxIDw8IDYpCisjZGVmaW5lIFVTQk9UR19IV01PREVfT1RHWENWUl9UU19SUwkoMyA8PCA2KQorI2RlZmluZSBVU0JPVEdfSFdNT0RFX0hPU1RYQ1ZSX1NISUZUCTQKKyNkZWZpbmUgVVNCT1RHX0hXTU9ERV9IT1NUWENWUl9NQVNLCSgzIDw8IDQpCisjZGVmaW5lIFVTQk9UR19IV01PREVfSE9TVFhDVlJfVERfUkQJKDAgPDwgNCkKKyNkZWZpbmUgVVNCT1RHX0hXTU9ERV9IT1NUWENWUl9UU19SRAkoMiA8PCA0KQorI2RlZmluZSBVU0JPVEdfSFdNT0RFX0hPU1RYQ1ZSX1REX1JTCSgxIDw8IDQpCisjZGVmaW5lIFVTQk9UR19IV01PREVfSE9TVFhDVlJfVFNfUlMJKDMgPDwgNCkKKyNkZWZpbmUgVVNCT1RHX0hXTU9ERV9DUkVDRkdfTUFTSwkoMyA8PCAwKQorI2RlZmluZSBVU0JPVEdfSFdNT0RFX0NSRUNGR19IT1NUCSgxIDw8IDApCisjZGVmaW5lIFVTQk9UR19IV01PREVfQ1JFQ0ZHX0ZVTkMJKDIgPDwgMCkKKyNkZWZpbmUgVVNCT1RHX0hXTU9ERV9DUkVDRkdfSE5QCSgzIDw8IDApCisKKyNkZWZpbmUgVVNCT1RHX0NJTlRfU1RBVAkweDA0CisjZGVmaW5lIFVTQk9UR19DSU5UX1NURU4JMHgwOAorI2RlZmluZSBVU0JPVEdfQVNITlBJTlQJCQkoMSA8PCA1KQorI2RlZmluZSBVU0JPVEdfQVNGQ0lOVAkJCSgxIDw8IDQpCisjZGVmaW5lIFVTQk9UR19BU0hDSU5UCQkJKDEgPDwgMykKKyNkZWZpbmUgVVNCT1RHX1NITlBJTlQJCQkoMSA8PCAyKQorI2RlZmluZSBVU0JPVEdfRkNJTlQJCQkoMSA8PCAxKQorI2RlZmluZSBVU0JPVEdfSENJTlQJCQkoMSA8PCAwKQorCisjZGVmaW5lIFVTQk9UR19DTEtfQ1RSTAkJMHgwYworI2RlZmluZSBVU0JPVEdfQ0xLX0NUUkxfRlVOQwkJKDEgPDwgMikKKyNkZWZpbmUgVVNCT1RHX0NMS19DVFJMX0hTVAkJKDEgPDwgMSkKKyNkZWZpbmUgVVNCT1RHX0NMS19DVFJMX01BSU4JCSgxIDw8IDApCisKKyNkZWZpbmUgVVNCT1RHX1JTVF9DVFJMCQkweDEwCisjZGVmaW5lIFVTQk9UR19SU1RfUlNUSTJDCQkoMSA8PCAxNSkKKyNkZWZpbmUgVVNCT1RHX1JTVF9SU1RDVFJMCQkoMSA8PCA1KQorI2RlZmluZSBVU0JPVEdfUlNUX1JTVEZDCQkoMSA8PCA0KQorI2RlZmluZSBVU0JPVEdfUlNUX1JTVEZTS0UJCSgxIDw8IDMpCisjZGVmaW5lIFVTQk9UR19SU1RfUlNUUkgJCSgxIDw8IDIpCisjZGVmaW5lIFVTQk9UR19SU1RfUlNUSFNJRQkJKDEgPDwgMSkKKyNkZWZpbmUgVVNCT1RHX1JTVF9SU1RIQwkJKDEgPDwgMCkKKworI2RlZmluZSBVU0JPVEdfRlJNX0lOVFZMICAgIAkweDE0CisjZGVmaW5lIFVTQk9UR19GUk1fUkVNQUlOICAgCTB4MTgKKyNkZWZpbmUgVVNCT1RHX0hOUF9DU1IJICAgIAkweDFjCisjZGVmaW5lIFVTQk9UR19ITlBfSVNSCSAgICAJMHgyYworI2RlZmluZSBVU0JPVEdfSE5QX0lFTgkgICAgCTB4MzAKKworI2RlZmluZSBVU0JPVEdfSTJDX1RYQ1ZSX1JFRyh4KQkoMHgxMDAgKyAoeCkpCisjZGVmaW5lIFVTQk9UR19JMkNfWENWUl9ERVZBRAkJMHgxMTgKKyNkZWZpbmUgVVNCT1RHX0kyQ19TRVFfT1BfUkVHCQkweDExOQorI2RlZmluZSBVU0JPVEdfSTJDX1NFUV9SRF9TVEFSVEFECTB4MTFhCisjZGVmaW5lIFVTQk9UR19JMkNfT1BfQ1RSTF9SRUcJICAgICAJMHgxMWIKKyNkZWZpbmUgVVNCT1RHX0kyQ19TQ0xLX1RPX1NDS19IUEVSICAJMHgxMWUKKyNkZWZpbmUgVVNCT1RHX0kyQ19NQVNURVJfSU5UX1JFRyAgICAJMHgxMWYKKworI2RlZmluZSBVU0JIX0hPU1RfQ1RSTAkJMHg4MAorI2RlZmluZSBVU0JIX0hPU1RfQ1RSTF9IQ1JFU0VUCQkJKDEgPDwgMzEpCisjZGVmaW5lIFVTQkhfSE9TVF9DVFJMX1NDSERPVlIoeCkJCSgoeCkgPDwgMTYpCisjZGVmaW5lIFVTQkhfSE9TVF9DVFJMX1JNVFdVRU4JCQkoMSA8PCA0KQorI2RlZmluZSBVU0JIX0hPU1RfQ1RSTF9IQ1VTQlNURV9SRVNFVAkJKDAgPDwgMikKKyNkZWZpbmUgVVNCSF9IT1NUX0NUUkxfSENVU0JTVEVfUkVTVU1FCQkoMSA8PCAyKQorI2RlZmluZSBVU0JIX0hPU1RfQ1RSTF9IQ1VTQlNURV9PUEVSQVRJT05BTAkoMiA8PCAyKQorI2RlZmluZSBVU0JIX0hPU1RfQ1RSTF9IQ1VTQlNURV9TVVNQRU5ECSgzIDw8IDIpCisjZGVmaW5lIFVTQkhfSE9TVF9DVFJMX0NUTEJMS1NSXzEJCSgwIDw8IDApCisjZGVmaW5lIFVTQkhfSE9TVF9DVFJMX0NUTEJMS1NSXzIJCSgxIDw8IDApCisjZGVmaW5lIFVTQkhfSE9TVF9DVFJMX0NUTEJMS1NSXzMJCSgyIDw8IDApCisjZGVmaW5lIFVTQkhfSE9TVF9DVFJMX0NUTEJMS1NSXzQJCSgzIDw8IDApCisKKyNkZWZpbmUgVVNCSF9TWVNJU1IJCTB4ODgKKyNkZWZpbmUgVVNCSF9TWVNJU1JfUFNDSU5UCQkoMSA8PCA2KQorI2RlZmluZSBVU0JIX1NZU0lTUl9GTU9GSU5UCQkoMSA8PCA1KQorI2RlZmluZSBVU0JIX1NZU0lTUl9IRVJSSU5UCQkoMSA8PCA0KQorI2RlZmluZSBVU0JIX1NZU0lTUl9SRVNERVRJTlQJCSgxIDw8IDMpCisjZGVmaW5lIFVTQkhfU1lTSVNSX1NPRklOVAkJKDEgPDwgMikKKyNkZWZpbmUgVVNCSF9TWVNJU1JfRE9ORUlOVAkJKDEgPDwgMSkKKyNkZWZpbmUgVVNCSF9TWVNJU1JfU09SSU5UCQkoMSA8PCAwKQorCisjZGVmaW5lIFVTQkhfU1lTSUVOCSAgICAJMHg4YworI2RlZmluZSBVU0JIX1NZU0lFTl9QU0NJTlQJCSgxIDw8IDYpCisjZGVmaW5lIFVTQkhfU1lTSUVOX0ZNT0ZJTlQJCSgxIDw8IDUpCisjZGVmaW5lIFVTQkhfU1lTSUVOX0hFUlJJTlQJCSgxIDw8IDQpCisjZGVmaW5lIFVTQkhfU1lTSUVOX1JFU0RFVElOVAkJKDEgPDwgMykKKyNkZWZpbmUgVVNCSF9TWVNJRU5fU09GSU5UCQkoMSA8PCAyKQorI2RlZmluZSBVU0JIX1NZU0lFTl9ET05FSU5UCQkoMSA8PCAxKQorI2RlZmluZSBVU0JIX1NZU0lFTl9TT1JJTlQJCSgxIDw8IDApCisKKyNkZWZpbmUgVVNCSF9YQlVGU1RBVAkgICAgCTB4OTgKKyNkZWZpbmUgVVNCSF9ZQlVGU1RBVAkgICAgCTB4OWMKKyNkZWZpbmUgVVNCSF9YWUlOVEVOCSAgICAJMHhhMAorI2RlZmluZSBVU0JIX1hGSUxMU1RBVAkgICAgCTB4YTgKKyNkZWZpbmUgVVNCSF9ZRklMTFNUQVQJICAgIAkweGFjCisjZGVmaW5lIFVTQkhfRVRERU5TRVQJICAgIAkweGMwCisjZGVmaW5lIFVTQkhfRVRERU5DTFIJICAgIAkweGM0CisjZGVmaW5lIFVTQkhfSU1NRURJTlQJICAgIAkweGNjCisjZGVmaW5lIFVTQkhfRVRERE9ORVNUQVQgICAgCTB4ZDAKKyNkZWZpbmUgVVNCSF9FVERET05FRU4JICAgIAkweGQ0CisjZGVmaW5lIFVTQkhfRlJNTlVCCSAgICAJMHhlMAorI2RlZmluZSBVU0JIX0xTVEhSRVNICSAgICAJMHhlNAorCisjZGVmaW5lIFVTQkhfUk9PVEhVQkEJICAgIAkweGU4CisjZGVmaW5lIFVTQkhfUk9PVEhVQkFfUFdSVE9HT09EX01BU0sJKDB4ZmYpCisjZGVmaW5lIFVTQkhfUk9PVEhVQkFfUFdSVE9HT09EX1NISUZUCSgyNCkKKyNkZWZpbmUgVVNCSF9ST09USFVCQV9OT09WUkNVUlAJKDEgPDwgMTIpCisjZGVmaW5lIFVTQkhfUk9PVEhVQkFfT1ZSQ1VSUE0JCSgxIDw8IDExKQorI2RlZmluZSBVU0JIX1JPT1RIVUJBX0RFVlRZUEUJCSgxIDw8IDEwKQorI2RlZmluZSBVU0JIX1JPT1RIVUJBX1BXUlNXVE1ECQkoMSA8PCA5KQorI2RlZmluZSBVU0JIX1JPT1RIVUJBX05PUFdSU1dUCQkoMSA8PCA4KQorI2RlZmluZSBVU0JIX1JPT1RIVUJBX05ETlNUTVBSVF9NQVNLCSgweGZmKQorCisjZGVmaW5lIFVTQkhfUk9PVEhVQkIJCTB4ZWMKKyNkZWZpbmUgVVNCSF9ST09USFVCQl9QUlRQV1JDTSh4KQkoMSA8PCAoKHgpICsgMTYpKQorI2RlZmluZSBVU0JIX1JPT1RIVUJCX0RFVlJFTU9WRSh4KQkoMSA8PCAoeCkpCisKKyNkZWZpbmUgVVNCSF9ST09UU1RBVAkJMHhmMAorI2RlZmluZSBVU0JIX1JPT1RTVEFUX0NMUlJNVFdVRQkoMSA8PCAzMSkKKyNkZWZpbmUgVVNCSF9ST09UU1RBVF9PVlJDVVJDSEcJKDEgPDwgMTcpCisjZGVmaW5lIFVTQkhfUk9PVFNUQVRfREVWQ09OV1VFCSgxIDw8IDE1KQorI2RlZmluZSBVU0JIX1JPT1RTVEFUX09WUkNVUkkJCSgxIDw8IDEpCisjZGVmaW5lIFVTQkhfUk9PVFNUQVRfTE9DUFdSUwkJKDEgPDwgMCkKKworI2RlZmluZSBVU0JIX1BPUlRTVEFUKHgpCSgweGY0ICsgKCh4KSAqIDQpKQorI2RlZmluZSBVU0JIX1BPUlRTVEFUX1BSVFJTVFNDCQkoMSA8PCAyMCkKKyNkZWZpbmUgVVNCSF9QT1JUU1RBVF9PVlJDVVJJQwkJKDEgPDwgMTkpCisjZGVmaW5lIFVTQkhfUE9SVFNUQVRfUFJUU1RBVFNDCSgxIDw8IDE4KQorI2RlZmluZSBVU0JIX1BPUlRTVEFUX1BSVEVOQkxTQwkoMSA8PCAxNykKKyNkZWZpbmUgVVNCSF9QT1JUU1RBVF9DT05ORUNUU0MJKDEgPDwgMTYpCisjZGVmaW5lIFVTQkhfUE9SVFNUQVRfTFNERVZDT04JCSgxIDw8IDkpCisjZGVmaW5lIFVTQkhfUE9SVFNUQVRfUFJUUFdSU1QJCSgxIDw8IDgpCisjZGVmaW5lIFVTQkhfUE9SVFNUQVRfUFJUUlNUU1QJCSgxIDw8IDQpCisjZGVmaW5lIFVTQkhfUE9SVFNUQVRfUFJUT1ZSQ1VSSQkoMSA8PCAzKQorI2RlZmluZSBVU0JIX1BPUlRTVEFUX1BSVFNVU1BTVAkoMSA8PCAyKQorI2RlZmluZSBVU0JIX1BPUlRTVEFUX1BSVEVOQUJTVAkoMSA8PCAxKQorI2RlZmluZSBVU0JIX1BPUlRTVEFUX0NVUkNPTlNUCQkoMSA8PCAwKQorCisjZGVmaW5lIFVTQl9ETUFSRVYJCTB4ODAwCisjZGVmaW5lIFVTQl9ETUFJTlRTVEFUCSAgICAJMHg4MDQKKyNkZWZpbmUgVVNCX0RNQUlOVFNUQVRfRVBFUlIJCSgxIDw8IDEpCisjZGVmaW5lIFVTQl9ETUFJTlRTVEFUX0VUREVSUgkJKDEgPDwgMCkKKworI2RlZmluZSBVU0JfRE1BSU5URU4JICAgIAkweDgwOAorI2RlZmluZSBVU0JfRE1BSU5URU5fRVBFUlJJTlRFTgkoMSA8PCAxKQorI2RlZmluZSBVU0JfRE1BSU5URU5fRVRERVJSSU5URU4JKDEgPDwgMCkKKworI2RlZmluZSBVU0JfRVRERE1BRVJTVEFUICAgIAkweDgwYworI2RlZmluZSBVU0JfRVBETUFFUlNUQVQJICAgIAkweDgxMAorI2RlZmluZSBVU0JfRVRERE1BRU4JICAgIAkweDgyMAorI2RlZmluZSBVU0JfRVBETUFFTgkgICAgCTB4ODI0CisjZGVmaW5lIFVTQl9FVERETUFYVEVOCSAgICAJMHg4MjgKKyNkZWZpbmUgVVNCX0VQRE1BWFRFTgkgICAgCTB4ODJjCisjZGVmaW5lIFVTQl9FVERETUFFTlhZVAkgICAgCTB4ODMwCisjZGVmaW5lIFVTQl9FUERNQUVOWFlUCSAgICAJMHg4MzQKKyNkZWZpbmUgVVNCX0VURERNQUJTVDRFTiAgICAJMHg4MzgKKyNkZWZpbmUgVVNCX0VQRE1BQlNUNEVOCSAgICAJMHg4M2MKKworI2RlZmluZSBVU0JfTUlTQ0NPTlRST0wJICAgIAkweDg0MAorI2RlZmluZSBVU0JfTUlTQ0NPTlRST0xfSVNPUFJFVkZSTQkoMSA8PCAzKQorI2RlZmluZSBVU0JfTUlTQ0NPTlRST0xfU0tQUlRSWQkoMSA8PCAyKQorI2RlZmluZSBVU0JfTUlTQ0NPTlRST0xfQVJCTU9ERQkoMSA8PCAxKQorI2RlZmluZSBVU0JfTUlTQ0NPTlRST0xfRklMVENDCQkoMSA8PCAwKQorCisjZGVmaW5lIFVTQl9FVERETUFDSEFOTENMUiAgCTB4ODQ4CisjZGVmaW5lIFVTQl9FUERNQUNIQU5MQ0xSICAgCTB4ODRjCisjZGVmaW5lIFVTQl9FVERTTVNBKHgpCSAgICAJKDB4OTAwICsgKCh4KSAqIDQpKQorI2RlZmluZSBVU0JfRVBTTVNBKHgpCSAgICAJKDB4OTgwICsgKCh4KSAqIDQpKQorI2RlZmluZSBVU0JfRVRERE1BQlVGUFRSKHgpIAkoMHhhMDAgKyAoKHgpICogNCkpCisjZGVmaW5lIFVTQl9FUERNQUJVRlBUUih4KSAgCSgweGE4MCArICgoeCkgKiA0KSkKKworI2RlZmluZSBVU0JfRVREX0RXT1JEKHgsIHcpCSgweDIwMCArICgoeCkgKiAxNikgKyAoKHcpICogNCkpCisjZGVmaW5lIERXMF9BRERSRVNTCTAKKyNkZWZpbmUJRFcwX0VORFBOVAk3CisjZGVmaW5lCURXMF9ESVJFQ1QJMTEKKyNkZWZpbmUJRFcwX1NQRUVECTEzCisjZGVmaW5lIERXMF9GT1JNQVQJMTQKKyNkZWZpbmUgRFcwX01BWFBLVFNJWgkxNgorI2RlZmluZSBEVzBfSEFMVEVECTI3CisjZGVmaW5lCURXMF9UT0dDUlkJMjgKKyNkZWZpbmUJRFcwX1NORE5BSwkzMAorCisjZGVmaW5lIERXMV9YQlVGU1JUQUQJMAorI2RlZmluZSBEVzFfWUJVRlNSVEFECTE2CisKKyNkZWZpbmUgRFcyX1JUUllERUxBWQkwCisjZGVmaW5lIERXMl9QT0xJTlRFUlYJMAorI2RlZmluZSBEVzJfU1RBUlRGUk0JMAorI2RlZmluZSBEVzJfUkVMUE9MUE9TCTgKKyNkZWZpbmUgRFcyX0RJUlBJRAkxNgorI2RlZmluZQlEVzJfQlVGUk9VTkQJMTgKKyNkZWZpbmUgRFcyX0RFTEFZSU5UCTE5CisjZGVmaW5lIERXMl9EQVRBVE9HCTIyCisjZGVmaW5lIERXMl9FUlJPUkNOVAkyNAorI2RlZmluZQlEVzJfQ09NUENPREUJMjgKKworI2RlZmluZSBEVzNfVE9UQllFQ05UCTAKKyNkZWZpbmUgRFczX1BLVExFTjAJMAorI2RlZmluZSBEVzNfQ09NUENPREUwCTEyCisjZGVmaW5lIERXM19QS1RMRU4xCTE2CisjZGVmaW5lIERXM19CVUZTSVpFCTIxCisjZGVmaW5lIERXM19DT01QQ09ERTEJMjgKKworI2RlZmluZSBVU0JDVFJMCQkgICAgCTB4NjAwCisjZGVmaW5lIFVTQkNUUkxfSTJDX1dVX0lOVF9TVEFUCSgxIDw8IDI3KQorI2RlZmluZSBVU0JDVFJMX09UR19XVV9JTlRfU1RBVAkoMSA8PCAyNikKKyNkZWZpbmUgVVNCQ1RSTF9IT1NUX1dVX0lOVF9TVEFUCSgxIDw8IDI1KQorI2RlZmluZSBVU0JDVFJMX0ZOVF9XVV9JTlRfU1RBVAkoMSA8PCAyNCkKKyNkZWZpbmUgVVNCQ1RSTF9JMkNfV1VfSU5UX0VOCQkoMSA8PCAxOSkKKyNkZWZpbmUgVVNCQ1RSTF9PVEdfV1VfSU5UX0VOCQkoMSA8PCAxOCkKKyNkZWZpbmUgVVNCQ1RSTF9IT1NUX1dVX0lOVF9FTgkJKDEgPDwgMTcpCisjZGVmaW5lIFVTQkNUUkxfRk5UX1dVX0lOVF9FTgkJKDEgPDwgMTYpCisjZGVmaW5lIFVTQkNUUkxfT1RDX1JDVl9SWERQCQkoMSA8PCAxMykKKyNkZWZpbmUgVVNCQ1RSTF9IT1NUMV9CWVBfVExMCQkoMSA8PCAxMikKKyNkZWZpbmUgVVNCQ1RSTF9PVEdfQllQX1ZBTCh4KQkJKCh4KSA8PCAxMCkKKyNkZWZpbmUgVVNCQ1RSTF9IT1NUMV9CWVBfVkFMKHgpCSgoeCkgPDwgOCkKKyNkZWZpbmUgVVNCQ1RSTF9PVEdfUFdSX01BU0sJCSgxIDw8IDYpCisjZGVmaW5lIFVTQkNUUkxfSE9TVDFfUFdSX01BU0sJCSgxIDw8IDUpCisjZGVmaW5lIFVTQkNUUkxfSE9TVDJfUFdSX01BU0sJCSgxIDw8IDQpCisjZGVmaW5lIFVTQkNUUkxfVVNCX0JZUAkJCSgxIDw8IDIpCisjZGVmaW5lIFVTQkNUUkxfSE9TVDFfVFhFTl9PRQkJKDEgPDwgMSkKKworCisvKiBWYWx1ZXMgaW4gVEQgYmxvY2tzICovCisjZGVmaW5lIFREX0RJUl9TRVRVUAkgICAgMAorI2RlZmluZSBURF9ESVJfT1VUCSAgICAxCisjZGVmaW5lIFREX0RJUl9JTgkgICAgMgorI2RlZmluZSBURF9GT1JNQVRfQ09OVFJPTCAgIDAKKyNkZWZpbmUgVERfRk9STUFUX0lTTwkgICAgMQorI2RlZmluZSBURF9GT1JNQVRfQlVMSwkgICAgMgorI2RlZmluZSBURF9GT1JNQVRfSU5UCSAgICAzCisjZGVmaW5lIFREX1RPR0dMRV9DQVJSWQkgICAgMAorI2RlZmluZSBURF9UT0dHTEVfREFUQTAJICAgIDIKKyNkZWZpbmUgVERfVE9HR0xFX0RBVEExCSAgICAzCisKKy8qIGNvbnRyb2wgdHJhbnNmZXIgc3RhdGVzICovCisjZGVmaW5lIFVTX0NUUkxfU0VUVVAJMgorI2RlZmluZSBVU19DVFJMX0RBVEEJMQorI2RlZmluZSBVU19DVFJMX0FDSwkwCisKKy8qIGJ1bGsgdHJhbnNmZXIgbWFpbiBzdGF0ZSBhbmQgMC1sZW5ndGggcGFja2V0ICovCisjZGVmaW5lIFVTX0JVTEsJCTEKKyNkZWZpbmUgVVNfQlVMSzAJMAorCisvKkVURCBmb3JtYXQgZGVzY3JpcHRpb24qLworI2RlZmluZSBJTVhfRk1UX0NUUkwgICAweDAKKyNkZWZpbmUgSU1YX0ZNVF9JU08gICAgMHgxCisjZGVmaW5lIElNWF9GTVRfQlVMSyAgIDB4MgorI2RlZmluZSBJTVhfRk1UX0lOVCAgICAweDMKKworc3RhdGljIGNoYXIgZm10X3VyYl90b19ldGRbNF0gPSB7CisvKlBJUEVfSVNPQ0hST05PVVMqLyBJTVhfRk1UX0lTTywKKy8qUElQRV9JTlRFUlJVUFQqLyBJTVhfRk1UX0lOVCwKKy8qUElQRV9DT05UUk9MKi8gSU1YX0ZNVF9DVFJMLAorLypQSVBFX0JVTEsqLyBJTVhfRk1UX0JVTEsKK307CisKKy8qIGNvbmRpdGlvbiAoZXJyb3IpIENDIGNvZGVzIGFuZCBtYXBwaW5nIChPSENJIGxpa2UpICovCisKKyNkZWZpbmUgVERfQ0NfTk9FUlJPUgkJMHgwMAorI2RlZmluZSBURF9DQ19DUkMJCTB4MDEKKyNkZWZpbmUgVERfQ0NfQklUU1RVRkZJTkcJMHgwMgorI2RlZmluZSBURF9DQ19EQVRBVE9HR0xFTQkweDAzCisjZGVmaW5lIFREX0NDX1NUQUxMCQkweDA0CisjZGVmaW5lIFREX0RFVk5PVFJFU1AJCTB4MDUKKyNkZWZpbmUgVERfUElEQ0hFQ0tGQUlMCQkweDA2CisvKiNkZWZpbmUgVERfVU5FWFBFQ1RFRFBJRAkweDA3IC0gcmVzZXJ2ZWQsIG5vdCBhY3RpdmUgb24gTVgyKi8KKyNkZWZpbmUgVERfREFUQU9WRVJSVU4JCTB4MDgKKyNkZWZpbmUgVERfREFUQVVOREVSUlVOCQkweDA5CisjZGVmaW5lIFREX0JVRkZFUk9WRVJSVU4JMHgwQworI2RlZmluZSBURF9CVUZGRVJVTkRFUlJVTgkweDBECisjZGVmaW5lCVREX1NDSEVEVUxFT1ZFUlJVTgkweDBFCisjZGVmaW5lIFREX05PVEFDQ0VTU0VECQkweDBGCisKK3N0YXRpYyBjb25zdCBpbnQgY2NfdG9fZXJyb3JbMTZdID0geworCS8qIE5vICBFcnJvciAgKi8gMCwKKwkvKiBDUkMgRXJyb3IgICovIC1FSUxTRVEsCisJLyogQml0IFN0dWZmICAqLyAtRVBST1RPLAorCS8qIERhdGEgVG9nZyAgKi8gLUVJTFNFUSwKKwkvKiBTdGFsbCAgICAgICovIC1FUElQRSwKKwkvKiBEZXZOb3RSZXNwICovIC1FVElNRURPVVQsCisJLyogUElEQ2hlY2sgICAqLyAtRVBST1RPLAorCS8qIFVuRXhwUElEICAgKi8gLUVQUk9UTywKKwkvKiBEYXRhT3ZlciAgICovIC1FT1ZFUkZMT1csCisJLyogRGF0YVVuZGVyICAqLyAtRVJFTU9URUlPLAorCS8qIChmb3IgaHcpICAgKi8gLUVJTywKKwkvKiAoZm9yIGh3KSAgICovIC1FSU8sCisJLyogQnVmZmVyT3ZlciAqLyAtRUNPTU0sCisJLyogQnVmZlVuZGVyICAqLyAtRU5PU1IsCisJLyogKGZvciBIQ0QpICAqLyAtRU5PU1BDLAorCS8qIChmb3IgSENEKSAgKi8gLUVBTFJFQURZCit9OworCisvKiBIQ0QgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSB1c2IgY29yZSBVUkIgKi8KK3N0cnVjdCB1cmJfcHJpdiB7CisJc3RydWN0IHVyYiAqdXJiOworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CisJaW50IGFjdGl2ZTsKKwlpbnQgc3RhdGU7CisJc3RydWN0IHRkICppc29jX3RkOworCWludCBpc29jX3JlbWFpbmluZzsKKwlpbnQgaXNvY19zdGF0dXM7Cit9OworCisvKiBIQ0QgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSB1c2IgY29yZSBlbmRwb2ludCAqLworc3RydWN0IGVwX3ByaXYgeworCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CisJc3RydWN0IGxpc3RfaGVhZCB0ZF9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgcXVldWU7CisJaW50IGV0ZFtOVU1fSVNPX0VURFNdOworCWludCB3YWl0aW5nX2V0ZDsKK307CisKKy8qIGlzb2MgcGFja2V0ICovCitzdHJ1Y3QgdGQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwlkbWFfYWRkcl90IGRhdGE7CisJdW5zaWduZWQgbG9uZyBidWZfYWRkcjsKKwlpbnQgbGVuOworCWludCBmcmFtZTsKKwlpbnQgaXNvY19pbmRleDsKK307CisKKy8qIEhDRCBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGhhcmR3YXJlIEVURCAqLworc3RydWN0IGV0ZF9wcml2IHsKKwlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOworCXN0cnVjdCB1cmIgKnVyYjsKKwlzdHJ1Y3QgdGQgKnRkOworCXN0cnVjdCBsaXN0X2hlYWQgcXVldWU7CisJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOworCWludCBhbGxvYzsKKwlpbnQgbGVuOworCWludCBkbWVtX3NpemU7CisJaW50IGRtZW1fb2Zmc2V0OworCWludCBhY3RpdmVfY291bnQ7CisjaWZkZWYgREVCVUcKKwlpbnQgYWN0aXZhdGVkX2ZyYW1lOworCWludCBkaXNhY3RpdmF0ZWRfZnJhbWU7CisJaW50IGxhc3RfaW50X2ZyYW1lOworCWludCBsYXN0X3JlcV9mcmFtZTsKKwl1MzIgc3VibWl0dGVkX2R3b3Jkc1s0XTsKKyNlbmRpZgorfTsKKworLyogSGFyZHdhcmUgZGF0YSBtZW1vcnkgaW5mbyAqLworc3RydWN0IGlteDIxX2RtZW1fYXJlYSB7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKKwl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXVuc2lnbmVkIGludCBzaXplOworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKKyNpZmRlZiBERUJVRworc3RydWN0IGRlYnVnX3VzYWdlX3N0YXRzIHsKKwl1bnNpZ25lZCBpbnQgdmFsdWU7CisJdW5zaWduZWQgaW50IG1heGltdW07Cit9OworCitzdHJ1Y3QgZGVidWdfc3RhdHMgeworCXVuc2lnbmVkIGxvbmcgc3VibWl0dGVkOworCXVuc2lnbmVkIGxvbmcgY29tcGxldGVkX29rOworCXVuc2lnbmVkIGxvbmcgY29tcGxldGVkX2ZhaWxlZDsKKwl1bnNpZ25lZCBsb25nIHVubGlua2VkOworCXVuc2lnbmVkIGxvbmcgcXVldWVfZXRkOworCXVuc2lnbmVkIGxvbmcgcXVldWVfZG1lbTsKK307CisKK3N0cnVjdCBkZWJ1Z19pc29jX3RyYWNlIHsKKwlpbnQgc2NoZWR1bGVfZnJhbWU7CisJaW50IHN1Ym1pdF9mcmFtZTsKKwlpbnQgcmVxdWVzdF9sZW47CisJaW50IGRvbmVfZnJhbWU7CisJaW50IGRvbmVfbGVuOworCWludCBjYzsKKwlzdHJ1Y3QgdGQgKnRkOworfTsKKyNlbmRpZgorCisvKiBIQ0QgZGF0YSBzdHJ1Y3R1cmUgKi8KK3N0cnVjdCBpbXgyMSB7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlzdHJ1Y3QgbXgyMV91c2JoX3BsYXRmb3JtX2RhdGEgKnBkYXRhOworCXN0cnVjdCBsaXN0X2hlYWQgZG1lbV9saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgcXVldWVfZm9yX2V0ZDsgLyogZXBzIHF1ZXVlZCBkdWUgdG8gZXRkIHNob3J0YWdlICovCisJc3RydWN0IGxpc3RfaGVhZCBxdWV1ZV9mb3JfZG1lbTsgLyogZXRkcyBxdWV1ZWQgZHVlIHRvIGRtZW0gc2hvcnRhZ2UgKi8KKwlzdHJ1Y3QgZXRkX3ByaXYgZXRkW1VTQl9OVU1fRVREXTsKKwlzdHJ1Y3QgY2xrICpjbGs7CisJdm9pZCBfX2lvbWVtICpyZWdzOworI2lmZGVmIERFQlVHCisJc3RydWN0IGRlbnRyeSAqZGVidWdfcm9vdDsKKwlzdHJ1Y3QgZGVidWdfc3RhdHMgbm9uaXNvY19zdGF0czsKKwlzdHJ1Y3QgZGVidWdfc3RhdHMgaXNvY19zdGF0czsKKwlzdHJ1Y3QgZGVidWdfdXNhZ2Vfc3RhdHMgZXRkX3VzYWdlOworCXN0cnVjdCBkZWJ1Z191c2FnZV9zdGF0cyBkbWVtX3VzYWdlOworCXN0cnVjdCBkZWJ1Z19pc29jX3RyYWNlIGlzb2NfdHJhY2VbMjBdOworCXN0cnVjdCBkZWJ1Z19pc29jX3RyYWNlIGlzb2NfdHJhY2VfZmFpbGVkWzIwXTsKKwl1bnNpZ25lZCBsb25nIGRlYnVnX3VuYmxvY2tzOworCWludCBpc29jX3RyYWNlX2luZGV4OworCWludCBpc29jX3RyYWNlX2luZGV4X2ZhaWxlZDsKKyNlbmRpZgorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2lzcDEzNjItaGNkLmMKaW5kZXggNDI5NzE2NS4uMjE3ZmI1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMzYyLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTM2Mi1oY2QuYwpAQCAtMTI1Nyw3ICsxMjU3LDcgQEAKIAogCS8qIGF2b2lkIGFsbCBhbGxvY2F0aW9ucyB3aXRoaW4gc3BpbmxvY2tzOiByZXF1ZXN0IG9yIGVuZHBvaW50ICovCiAJaWYgKCFoZXAtPmhjcHJpdikgewotCQllcCA9IGtjYWxsb2MoMSwgc2l6ZW9mICplcCwgbWVtX2ZsYWdzKTsKKwkJZXAgPSBremFsbG9jKHNpemVvZiAqZXAsIG1lbV9mbGFncyk7CiAJCWlmICghZXApCiAJCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0yNzE5LDI0ICsyNzE5LDExIEBACiAJfQogCWlycSA9IGlycV9yZXMtPnN0YXJ0OwogCi0jaWZkZWYgQ09ORklHX1VTQl9IQ0RfRE1BCi0JaWYgKHBkZXYtPmRldi5kbWFfbWFzaykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKmRtYV9yZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDIpOwotCi0JCWlmICghZG1hX3JlcykgewotCQkJcmV0dmFsID0gLUVOT0RFVjsKLQkJCWdvdG8gZXJyMTsKLQkJfQotCQlpc3AxMzYyX2hjZC0+ZGF0YV9kbWEgPSBkbWFfcmVzLT5zdGFydDsKLQkJaXNwMTM2Ml9oY2QtPm1heF9kbWFfc2l6ZSA9IHJlc291cmNlX2xlbihkbWFfcmVzKTsKLQl9Ci0jZWxzZQogCWlmIChwZGV2LT5kZXYuZG1hX21hc2spIHsKIAkJREJHKDEsICJ3b24ndCBkbyBETUEiKTsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBlcnIxOwogCX0KLSNlbmRpZgogCiAJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oYWRkci0+c3RhcnQsIHJlc291cmNlX2xlbihhZGRyKSwgaGNkX25hbWUpKSB7CiAJCXJldHZhbCA9IC1FQlVTWTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1oY2QuYwppbmRleCAyN2I4ZjdjLi45ZjAxMjkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxNzYwLWhjZC5jCkBAIC0xNyw3ICsxNyw5IEBACiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAKICNpbmNsdWRlICIuLi9jb3JlL2hjZC5oIgogI2luY2x1ZGUgImlzcDE3NjAtaGNkLmgiCkBAIC05MDQsNiArOTA2LDE0IEBACiAJCQlzdGF0dXMgPSAwOwogCX0KIAorCWlmICh1c2JfcGlwZWluKHVyYi0+cGlwZSkgJiYgdXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgIT0gUElQRV9DT05UUk9MKSB7CisJCXZvaWQgKnB0cjsKKwkJZm9yIChwdHIgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJICAgICBwdHIgPCB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aDsKKwkJICAgICBwdHIgKz0gUEFHRV9TSVpFKQorCQkJZmx1c2hfZGNhY2hlX3BhZ2UodmlydF90b19wYWdlKHB0cikpOworCX0KKwogCS8qIGNvbXBsZXRlKCkgY2FuIHJlZW50ZXIgdGhpcyBIQ0QgKi8KIAl1c2JfaGNkX3VubGlua191cmJfZnJvbV9lcChwcml2X3RvX2hjZChwcml2KSwgdXJiKTsKIAlzcGluX3VubG9jaygmcHJpdi0+bG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDE3NjAtaWYuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jCmluZGV4IDFjOWY5NzcuLjQyOTNjZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTc2MC1pZi5jCkBAIC0xMDksNyArMTA5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfaXNwMTc2MF9tYXRjaFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfaXNwMTc2MF9tYXRjaFtdID0gewogCXsKIAkJLmNvbXBhdGlibGUgPSAibnhwLHVzYi1pc3AxNzYwIiwKIAl9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRhOHh4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGE4eHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWEwOGQzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRhOHh4LmMKQEAgLTAsMCArMSw0NTYgQEAKKy8qCisgKiBPSENJIEhDRCAoSG9zdCBDb250cm9sbGVyIERyaXZlcikgZm9yIFVTQi4KKyAqCisgKiBUSSBEQTh4eCAoT01BUC1MMXgpIEJ1cyBHbHVlCisgKgorICogRGVyaXZlZCBmcm9tOiBvaGNpLW9tYXAuYyBhbmQgb2hjaS1zM2MyNDEwLmMKKyAqIENvcHlyaWdodCAoQykgMjAwOC0yMDA5IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gPHNvdXJjZUBtdmlzdGEuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQorICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPG1hY2gvZGE4eHguaD4KKyNpbmNsdWRlIDxtYWNoL3VzYi5oPgorCisjaWZuZGVmIENPTkZJR19BUkNIX0RBVklOQ0lfREE4WFgKKyNlcnJvciAiVGhpcyBmaWxlIGlzIERBOHh4IGJ1cyBnbHVlLiAgRGVmaW5lIENPTkZJR19BUkNIX0RBVklOQ0lfREE4WFguIgorI2VuZGlmCisKKyNkZWZpbmUgQ0ZHQ0hJUDIJREE4WFhfU1lTQ0ZHX1ZJUlQoREE4WFhfQ0ZHQ0hJUDJfUkVHKQorCitzdGF0aWMgc3RydWN0IGNsayAqdXNiMTFfY2xrOworc3RhdGljIHN0cnVjdCBjbGsgKnVzYjIwX2NsazsKKworLyogT3Zlci1jdXJyZW50IGluZGljYXRvciBjaGFuZ2UgYml0bWFzayAqLworc3RhdGljIHZvbGF0aWxlIHUxNiBvY2ljX21hc2s7CisKK3N0YXRpYyB2b2lkIG9oY2lfZGE4eHhfY2xvY2soaW50IG9uKQoreworCXUzMiBjZmdjaGlwMjsKKworCWNmZ2NoaXAyID0gX19yYXdfcmVhZGwoQ0ZHQ0hJUDIpOworCWlmIChvbikgeworCQljbGtfZW5hYmxlKHVzYjExX2Nsayk7CisKKwkJLyoKKwkJICogSWYgVVNCIDEuMSByZWZlcmVuY2UgY2xvY2sgaXMgc291cmNlZCBmcm9tIFVTQiAyLjAgUEhZLCB3ZQorCQkgKiBuZWVkIHRvIGVuYWJsZSB0aGUgVVNCIDIuMCBtb2R1bGUgY2xvY2tpbmcsIHN0YXJ0IGl0cyBQSFksCisJCSAqIGFuZCBub3QgYWxsb3cgaXQgdG8gc3RvcCB0aGUgY2xvY2sgZHVyaW5nIFVTQiAyLjAgc3VzcGVuZC4KKwkJICovCisJCWlmICghKGNmZ2NoaXAyICYgQ0ZHQ0hJUDJfVVNCMVBIWUNMS01VWCkpIHsKKwkJCWNsa19lbmFibGUodXNiMjBfY2xrKTsKKworCQkJY2ZnY2hpcDIgJj0gfihDRkdDSElQMl9SRVNFVCB8IENGR0NISVAyX1BIWVBXUkROKTsKKwkJCWNmZ2NoaXAyIHw9IENGR0NISVAyX1BIWV9QTExPTjsKKwkJCV9fcmF3X3dyaXRlbChjZmdjaGlwMiwgQ0ZHQ0hJUDIpOworCisJCQlwcl9pbmZvKCJXYWl0aW5nIGZvciBVU0IgUEhZIGNsb2NrIGdvb2QuLi5cbiIpOworCQkJd2hpbGUgKCEoX19yYXdfcmVhZGwoQ0ZHQ0hJUDIpICYgQ0ZHQ0hJUDJfUEhZQ0xLR0QpKQorCQkJCWNwdV9yZWxheCgpOworCQl9CisKKwkJLyogRW5hYmxlIFVTQiAxLjEgUEhZICovCisJCWNmZ2NoaXAyIHw9IENGR0NISVAyX1VTQjFTVVNQRU5ETTsKKwl9IGVsc2UgeworCQljbGtfZGlzYWJsZSh1c2IxMV9jbGspOworCQlpZiAoIShjZmdjaGlwMiAmIENGR0NISVAyX1VTQjFQSFlDTEtNVVgpKQorCQkJY2xrX2Rpc2FibGUodXNiMjBfY2xrKTsKKworCQkvKiBEaXNhYmxlIFVTQiAxLjEgUEhZICovCisJCWNmZ2NoaXAyICY9IH5DRkdDSElQMl9VU0IxU1VTUEVORE07CisJfQorCV9fcmF3X3dyaXRlbChjZmdjaGlwMiwgQ0ZHQ0hJUDIpOworfQorCisvKgorICogSGFuZGxlIHRoZSBwb3J0IG92ZXItY3VycmVudCBpbmRpY2F0b3IgY2hhbmdlLgorICovCitzdGF0aWMgdm9pZCBvaGNpX2RhOHh4X29jaWNfaGFuZGxlcihzdHJ1Y3QgZGE4eHhfb2hjaV9yb290X2h1YiAqaHViLAorCQkJCSAgICB1bnNpZ25lZCBwb3J0KQoreworCW9jaWNfbWFzayB8PSAxIDw8IHBvcnQ7CisKKwkvKiBPbmNlIG92ZXItY3VycmVudCBpcyBkZXRlY3RlZCwgdGhlIHBvcnQgbmVlZHMgdG8gYmUgcG93ZXJlZCBkb3duICovCisJaWYgKGh1Yi0+Z2V0X29jaShwb3J0KSA+IDApCisJCWh1Yi0+c2V0X3Bvd2VyKHBvcnQsIDApOworfQorCitzdGF0aWMgaW50IG9oY2lfZGE4eHhfaW5pdChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBkZXZpY2UgKmRldgkJPSBoY2QtPnNlbGYuY29udHJvbGxlcjsKKwlzdHJ1Y3QgZGE4eHhfb2hjaV9yb290X2h1YiAqaHViCT0gZGV2LT5wbGF0Zm9ybV9kYXRhOworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaQkJPSBoY2RfdG9fb2hjaShoY2QpOworCWludCByZXN1bHQ7CisJdTMyIHJoX2E7CisKKwlkZXZfZGJnKGRldiwgInN0YXJ0aW5nIFVTQiBjb250cm9sbGVyXG4iKTsKKworCW9oY2lfZGE4eHhfY2xvY2soMSk7CisKKwkvKgorCSAqIERBOHh4IG9ubHkgaGF2ZSAxIHBvcnQgY29ubmVjdGVkIHRvIHRoZSBwaW5zIGJ1dCB0aGUgSEMgcm9vdCBodWIKKwkgKiByZWdpc3RlciBBIHJlcG9ydHMgMiBwb3J0cywgdGh1cyB3ZSdsbCBoYXZlIHRvIG92ZXJyaWRlIGl0Li4uCisJICovCisJb2hjaS0+bnVtX3BvcnRzID0gMTsKKworCXJlc3VsdCA9IG9oY2lfaW5pdChvaGNpKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJcmV0dXJuIHJlc3VsdDsKKworCS8qCisJICogU2luY2Ugd2UncmUgcHJvdmlkaW5nIGEgYm9hcmQtc3BlY2lmaWMgcm9vdCBodWIgcG9ydCBwb3dlciBjb250cm9sCisJICogYW5kIG92ZXItY3VycmVudCByZXBvcnRpbmcsIHdlIGhhdmUgdG8gb3ZlcnJpZGUgdGhlIEhDIHJvb3QgaHViIEEKKwkgKiByZWdpc3RlcidzIGRlZmF1bHQgdmFsdWUsIHNvIHRoYXQgb2hjaV9odWJfY29udHJvbCgpIGNvdWxkIHJldHVybgorCSAqIHRoZSBjb3JyZWN0IGh1YiBkZXNjcmlwdG9yLi4uCisJICovCisJcmhfYSA9IG9oY2lfcmVhZGwob2hjaSwgJm9oY2ktPnJlZ3MtPnJvb3RodWIuYSk7CisJaWYgKGh1Yi0+c2V0X3Bvd2VyKSB7CisJCXJoX2EgJj0gflJIX0FfTlBTOworCQlyaF9hIHw9ICBSSF9BX1BTTTsKKwl9CisJaWYgKGh1Yi0+Z2V0X29jaSkgeworCQlyaF9hICY9IH5SSF9BX05PQ1A7CisJCXJoX2EgfD0gIFJIX0FfT0NQTTsKKwl9CisJcmhfYSAmPSB+UkhfQV9QT1RQR1Q7CisJcmhfYSB8PSBodWItPnBvdHBndCA8PCAyNDsKKwlvaGNpX3dyaXRlbChvaGNpLCByaF9hLCAmb2hjaS0+cmVncy0+cm9vdGh1Yi5hKTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIG9oY2lfZGE4eHhfc3RvcChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCW9oY2lfc3RvcChoY2QpOworCW9oY2lfZGE4eHhfY2xvY2soMCk7Cit9CisKK3N0YXRpYyBpbnQgb2hjaV9kYTh4eF9zdGFydChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBvaGNpX2hjZAkqb2hjaQkJPSBoY2RfdG9fb2hjaShoY2QpOworCWludCByZXN1bHQ7CisKKwlyZXN1bHQgPSBvaGNpX3J1bihvaGNpKTsKKwlpZiAocmVzdWx0IDwgMCkKKwkJb2hjaV9kYTh4eF9zdG9wKGhjZCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogVXBkYXRlIHRoZSBzdGF0dXMgZGF0YSBmcm9tIHRoZSBodWIgd2l0aCB0aGUgb3Zlci1jdXJyZW50IGluZGljYXRvciBjaGFuZ2UuCisgKi8KK3N0YXRpYyBpbnQgb2hjaV9kYTh4eF9odWJfc3RhdHVzX2RhdGEoc3RydWN0IHVzYl9oY2QgKmhjZCwgY2hhciAqYnVmKQoreworCWludCBsZW5ndGgJCT0gb2hjaV9odWJfc3RhdHVzX2RhdGEoaGNkLCBidWYpOworCisJLyogU2VlIGlmIHdlIGhhdmUgT0NJQyBiaXQgc2V0IG9uIHBvcnQgMSAqLworCWlmIChvY2ljX21hc2sgJiAoMSA8PCAxKSkgeworCQlkZXZfZGJnKGhjZC0+c2VsZi5jb250cm9sbGVyLCAib3Zlci1jdXJyZW50IGluZGljYXRvciBjaGFuZ2UgIgorCQkJIm9uIHBvcnQgMVxuIik7CisKKwkJaWYgKCFsZW5ndGgpCisJCQlsZW5ndGggPSAxOworCisJCWJ1ZlswXSB8PSAxIDw8IDE7CisJfQorCXJldHVybiBsZW5ndGg7Cit9CisKKy8qCisgKiBMb29rIGF0IHRoZSBjb250cm9sIHJlcXVlc3RzIHRvIHRoZSByb290IGh1YiBhbmQgc2VlIGlmIHdlIG5lZWQgdG8gb3ZlcnJpZGUuCisgKi8KK3N0YXRpYyBpbnQgb2hjaV9kYTh4eF9odWJfY29udHJvbChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1MTYgdHlwZVJlcSwgdTE2IHdWYWx1ZSwKKwkJCQkgIHUxNiB3SW5kZXgsIGNoYXIgKmJ1ZiwgdTE2IHdMZW5ndGgpCit7CisJc3RydWN0IGRldmljZSAqZGV2CQk9IGhjZC0+c2VsZi5jb250cm9sbGVyOworCXN0cnVjdCBkYTh4eF9vaGNpX3Jvb3RfaHViICpodWIJPSBkZXYtPnBsYXRmb3JtX2RhdGE7CisJaW50IHRlbXA7CisKKwlzd2l0Y2ggKHR5cGVSZXEpIHsKKwljYXNlIEdldFBvcnRTdGF0dXM6CisJCS8qIENoZWNrIHRoZSBwb3J0IG51bWJlciAqLworCQlpZiAod0luZGV4ICE9IDEpCisJCQlicmVhazsKKworCQlkZXZfZGJnKGRldiwgIkdldFBvcnRTdGF0dXMoJXUpXG4iLCB3SW5kZXgpOworCisJCXRlbXAgPSByb290aHViX3BvcnRzdGF0dXMoaGNkX3RvX29oY2koaGNkKSwgd0luZGV4IC0gMSk7CisKKwkJLyogVGhlIHBvcnQgcG93ZXIgc3RhdHVzIChQUFMpIGJpdCBkZWZhdWx0cyB0byAxICovCisJCWlmIChodWItPmdldF9wb3dlciAmJiBodWItPmdldF9wb3dlcih3SW5kZXgpID09IDApCisJCQl0ZW1wICY9IH5SSF9QU19QUFM7CisKKwkJLyogVGhlIHBvcnQgb3Zlci1jdXJyZW50IGluZGljYXRvciAoUE9DSSkgYml0IGlzIGFsd2F5cyAwICovCisJCWlmIChodWItPmdldF9vY2kgJiYgaHViLT5nZXRfb2NpKHdJbmRleCkgPiAwKQorCQkJdGVtcCB8PSAgUkhfUFNfUE9DSTsKKworCQkvKiBUaGUgb3Zlci1jdXJyZW50IGluZGljYXRvciBjaGFuZ2UgKE9DSUMpIGJpdCBpcyAwIHRvbyAqLworCQlpZiAob2NpY19tYXNrICYgKDEgPDwgd0luZGV4KSkKKwkJCXRlbXAgfD0gIFJIX1BTX09DSUM7CisKKwkJcHV0X3VuYWxpZ25lZChjcHVfdG9fbGUzMih0ZW1wKSwgKF9fbGUzMiAqKWJ1Zik7CisJCXJldHVybiAwOworCWNhc2UgU2V0UG9ydEZlYXR1cmU6CisJCXRlbXAgPSAxOworCQlnb3RvIGNoZWNrX3BvcnQ7CisJY2FzZSBDbGVhclBvcnRGZWF0dXJlOgorCQl0ZW1wID0gMDsKKworY2hlY2tfcG9ydDoKKwkJLyogQ2hlY2sgdGhlIHBvcnQgbnVtYmVyICovCisJCWlmICh3SW5kZXggIT0gMSkKKwkJCWJyZWFrOworCisJCXN3aXRjaCAod1ZhbHVlKSB7CisJCWNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKwkJCWRldl9kYmcoZGV2LCAiJXNQb3J0RmVhdHVyZSgldSk6ICVzXG4iLAorCQkJCXRlbXAgPyAiU2V0IiA6ICJDbGVhciIsIHdJbmRleCwgIlBPV0VSIik7CisKKwkJCWlmICghaHViLT5zZXRfcG93ZXIpCisJCQkJcmV0dXJuIC1FUElQRTsKKworCQkJcmV0dXJuIGh1Yi0+c2V0X3Bvd2VyKHdJbmRleCwgdGVtcCkgPyAtRVBJUEUgOiAwOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19PVkVSX0NVUlJFTlQ6CisJCQlkZXZfZGJnKGRldiwgIiVzUG9ydEZlYXR1cmUoJXUpOiAlc1xuIiwKKwkJCQl0ZW1wID8gIlNldCIgOiAiQ2xlYXIiLCB3SW5kZXgsCisJCQkJIkNfT1ZFUl9DVVJSRU5UIik7CisKKwkJCWlmICh0ZW1wKQorCQkJCW9jaWNfbWFzayB8PSAxIDw8IHdJbmRleDsKKwkJCWVsc2UKKwkJCQlvY2ljX21hc2sgJj0gfigxIDw8IHdJbmRleCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCXJldHVybiBvaGNpX2h1Yl9jb250cm9sKGhjZCwgdHlwZVJlcSwgd1ZhbHVlLCB3SW5kZXgsIGJ1Ziwgd0xlbmd0aCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyIG9oY2lfZGE4eHhfaGNfZHJpdmVyID0geworCS5kZXNjcmlwdGlvbgkJPSBoY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjCQk9ICJEQTh4eCBPSENJIiwKKwkuaGNkX3ByaXZfc2l6ZQkJPSBzaXplb2Yoc3RydWN0IG9oY2lfaGNkKSwKKworCS8qCisJICogZ2VuZXJpYyBoYXJkd2FyZSBsaW5rYWdlCisJICovCisJLmlycQkJCT0gb2hjaV9pcnEsCisJLmZsYWdzCQkJPSBIQ0RfVVNCMTEgfCBIQ0RfTUVNT1JZLAorCisJLyoKKwkgKiBiYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucworCSAqLworCS5yZXNldAkJCT0gb2hjaV9kYTh4eF9pbml0LAorCS5zdGFydAkJCT0gb2hjaV9kYTh4eF9zdGFydCwKKwkuc3RvcAkJCT0gb2hjaV9kYTh4eF9zdG9wLAorCS5zaHV0ZG93bgkJPSBvaGNpX3NodXRkb3duLAorCisJLyoKKwkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcworCSAqLworCS51cmJfZW5xdWV1ZQkJPSBvaGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZQkJPSBvaGNpX3VyYl9kZXF1ZXVlLAorCS5lbmRwb2ludF9kaXNhYmxlCT0gb2hjaV9lbmRwb2ludF9kaXNhYmxlLAorCisJLyoKKwkgKiBzY2hlZHVsaW5nIHN1cHBvcnQKKwkgKi8KKwkuZ2V0X2ZyYW1lX251bWJlcgk9IG9oY2lfZ2V0X2ZyYW1lLAorCisJLyoKKwkgKiByb290IGh1YiBzdXBwb3J0CisJICovCisJLmh1Yl9zdGF0dXNfZGF0YQk9IG9oY2lfZGE4eHhfaHViX3N0YXR1c19kYXRhLAorCS5odWJfY29udHJvbAkJPSBvaGNpX2RhOHh4X2h1Yl9jb250cm9sLAorCisjaWZkZWYJQ09ORklHX1BNCisJLmJ1c19zdXNwZW5kCQk9IG9oY2lfYnVzX3N1c3BlbmQsCisJLmJ1c19yZXN1bWUJCT0gb2hjaV9idXNfcmVzdW1lLAorI2VuZGlmCisJLnN0YXJ0X3BvcnRfcmVzZXQJPSBvaGNpX3N0YXJ0X3BvcnRfcmVzZXQsCit9OworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisKKy8qKgorICogdXNiX2hjZF9kYTh4eF9wcm9iZSAtIGluaXRpYWxpemUgREE4eHgtYmFzZWQgSENEcworICogQ29udGV4dDogIWluX2ludGVycnVwdCgpCisgKgorICogQWxsb2NhdGVzIGJhc2ljIHJlc291cmNlcyBmb3IgdGhpcyBVU0IgaG9zdCBjb250cm9sbGVyLCBhbmQKKyAqIHRoZW4gaW52b2tlcyB0aGUgc3RhcnQoKSBtZXRob2QgZm9yIHRoZSBIQ0QgYXNzb2NpYXRlZCB3aXRoIGl0CisgKiB0aHJvdWdoIHRoZSBob3RwbHVnIGVudHJ5J3MgZHJpdmVyX2RhdGEuCisgKi8KK3N0YXRpYyBpbnQgdXNiX2hjZF9kYTh4eF9wcm9iZShjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIsCisJCQkgICAgICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGE4eHhfb2hjaV9yb290X2h1YiAqaHViCT0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHVzYl9oY2QJKmhjZDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKm1lbTsKKwlpbnQgZXJyb3IsIGlycTsKKworCWlmIChodWIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl1c2IxMV9jbGsgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJ1c2IxMSIpOworCWlmIChJU19FUlIodXNiMTFfY2xrKSkKKwkJcmV0dXJuIFBUUl9FUlIodXNiMTFfY2xrKTsKKworCXVzYjIwX2NsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgInVzYjIwIik7CisJaWYgKElTX0VSUih1c2IyMF9jbGspKSB7CisJCWVycm9yID0gUFRSX0VSUih1c2IyMF9jbGspOworCQlnb3RvIGVycjA7CisJfQorCisJaGNkID0gdXNiX2NyZWF0ZV9oY2QoZHJpdmVyLCAmcGRldi0+ZGV2LCBkZXZfbmFtZSgmcGRldi0+ZGV2KSk7CisJaWYgKCFoY2QpIHsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIGVycjE7CisJfQorCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIW1lbSkgeworCQllcnJvciA9IC1FTk9ERVY7CisJCWdvdG8gZXJyMjsKKwl9CisJaGNkLT5yc3JjX3N0YXJ0ID0gbWVtLT5zdGFydDsKKwloY2QtPnJzcmNfbGVuID0gbWVtLT5lbmQgLSBtZW0tPnN0YXJ0ICsgMTsKKworCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwgaGNkX25hbWUpKSB7CisJCWRldl9kYmcoJnBkZXYtPmRldiwgInJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQllcnJvciA9IC1FQlVTWTsKKwkJZ290byBlcnIyOworCX0KKworCWhjZC0+cmVncyA9IGlvcmVtYXAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwlpZiAoIWhjZC0+cmVncykgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJpb3JlbWFwIGZhaWxlZFxuIik7CisJCWVycm9yID0gLUVOT01FTTsKKwkJZ290byBlcnIzOworCX0KKworCW9oY2lfaGNkX2luaXQoaGNkX3RvX29oY2koaGNkKSk7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWlmIChpcnEgPCAwKSB7CisJCWVycm9yID0gLUVOT0RFVjsKKwkJZ290byBlcnI0OworCX0KKwllcnJvciA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX0RJU0FCTEVEKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gZXJyNDsKKworCWlmIChodWItPm9jaWNfbm90aWZ5KSB7CisJCWVycm9yID0gaHViLT5vY2ljX25vdGlmeShvaGNpX2RhOHh4X29jaWNfaGFuZGxlcik7CisJCWlmICghZXJyb3IpCisJCQlyZXR1cm4gMDsKKwl9CisKKwl1c2JfcmVtb3ZlX2hjZChoY2QpOworZXJyNDoKKwlpb3VubWFwKGhjZC0+cmVncyk7CitlcnIzOgorCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworZXJyMjoKKwl1c2JfcHV0X2hjZChoY2QpOworZXJyMToKKwljbGtfcHV0KHVzYjIwX2Nsayk7CitlcnIwOgorCWNsa19wdXQodXNiMTFfY2xrKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogdXNiX2hjZF9kYTh4eF9yZW1vdmUgLSBzaHV0ZG93biBwcm9jZXNzaW5nIGZvciBEQTh4eC1iYXNlZCBIQ0RzCisgKiBAZGV2OiBVU0IgSG9zdCBDb250cm9sbGVyIGJlaW5nIHJlbW92ZWQKKyAqIENvbnRleHQ6ICFpbl9pbnRlcnJ1cHQoKQorICoKKyAqIFJldmVyc2VzIHRoZSBlZmZlY3Qgb2YgdXNiX2hjZF9kYTh4eF9wcm9iZSgpLCBmaXJzdCBpbnZva2luZworICogdGhlIEhDRCdzIHN0b3AoKSBtZXRob2QuICBJdCBpcyBhbHdheXMgY2FsbGVkIGZyb20gYSB0aHJlYWQKKyAqIGNvbnRleHQsIG5vcm1hbGx5ICJybW1vZCIsICJhcG1kIiwgb3Igc29tZXRoaW5nIHNpbWlsYXIuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordXNiX2hjZF9kYTh4eF9yZW1vdmUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGE4eHhfb2hjaV9yb290X2h1YiAqaHViCT0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisKKwlodWItPm9jaWNfbm90aWZ5KE5VTEwpOworCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisJaW91bm1hcChoY2QtPnJlZ3MpOworCXJlbGVhc2VfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOworCXVzYl9wdXRfaGNkKGhjZCk7CisJY2xrX3B1dCh1c2IyMF9jbGspOworCWNsa19wdXQodXNiMTFfY2xrKTsKK30KKworc3RhdGljIGludCBvaGNpX2hjZF9kYTh4eF9kcnZfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiB1c2JfaGNkX2RhOHh4X3Byb2JlKCZvaGNpX2RhOHh4X2hjX2RyaXZlciwgZGV2KTsKK30KKworc3RhdGljIGludCBvaGNpX2hjZF9kYTh4eF9kcnZfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKworCXVzYl9oY2RfZGE4eHhfcmVtb3ZlKGhjZCwgZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgb2hjaV9kYTh4eF9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJc3RydWN0IHVzYl9oY2QJKmhjZAk9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG9oY2lfaGNkCSpvaGNpCT0gaGNkX3RvX29oY2koaGNkKTsKKworCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBvaGNpLT5uZXh0X3N0YXRlY2hhbmdlKSkKKwkJbXNsZWVwKDUpOworCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzOworCisJb2hjaV9kYTh4eF9jbG9jaygwKTsKKwloY2QtPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOworCWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19TVVNQRU5EOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9oY2lfZGE4eHhfcmVzdW1lKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkCT0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgb2hjaV9oY2QJKm9oY2kJPSBoY2RfdG9fb2hjaShoY2QpOworCisJaWYgKHRpbWVfYmVmb3JlKGppZmZpZXMsIG9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQorCQltc2xlZXAoNSk7CisJb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXM7CisKKwlvaGNpX2RhOHh4X2Nsb2NrKDEpOworCWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKKwl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihoY2QpOworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qCisgKiBEcml2ZXIgZGVmaW5pdGlvbiB0byByZWdpc3RlciB3aXRoIHBsYXRmb3JtIHN0cnVjdHVyZS4KKyAqLworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfZGE4eHhfZHJpdmVyID0geworCS5wcm9iZQkJPSBvaGNpX2hjZF9kYTh4eF9kcnZfcHJvYmUsCisJLnJlbW92ZQkJPSBvaGNpX2hjZF9kYTh4eF9kcnZfcmVtb3ZlLAorCS5zaHV0ZG93biAJPSB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duLAorI2lmZGVmCUNPTkZJR19QTQorCS5zdXNwZW5kCT0gb2hjaV9kYTh4eF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gb2hjaV9kYTh4eF9yZXN1bWUsCisjZW5kaWYKKwkuZHJpdmVyCQk9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJCS5uYW1lCT0gIm9oY2kiLAorCX0sCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jCmluZGV4IDgxMWY1ZGZkLi44YWQyNDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jCkBAIC01MywxMyArNTMsMTMgQEAKIAkJaW50IGksIGxlbjsKIAogCQlpZiAodXNiX3BpcGVjb250cm9sIChwaXBlKSkgewotCQkJcHJpbnRrIChLRVJOX0RFQlVHIF9fRklMRV9fICI6IHNldHVwKDgpOiIpOworCQkJcHJpbnRrIChLRVJOX0RFQlVHICIlczogc2V0dXAoOCk6IiwgX19GSUxFX18pOwogCQkJZm9yIChpID0gMDsgaSA8IDggOyBpKyspCiAJCQkJcHJpbnRrICgiICUwMngiLCAoKF9fdTggKikgdXJiLT5zZXR1cF9wYWNrZXQpIFtpXSk7CiAJCQlwcmludGsgKCJcbiIpOwogCQl9CiAJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiAwICYmIHVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7Ci0JCQlwcmludGsgKEtFUk5fREVCVUcgX19GSUxFX18gIjogZGF0YSglZC8lZCk6IiwKKwkJCXByaW50ayAoS0VSTl9ERUJVRyAiJXM6IGRhdGEoJWQvJWQpOiIsIF9fRklMRV9fLAogCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwKIAkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOwogCQkJbGVuID0gdXNiX3BpcGVvdXQgKHBpcGUpPwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCmluZGV4IDI0ZWI3NDcuLmFmZTU5YmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKQEAgLTEwNTEsNiArMTA1MSwxMSBAQAogI2RlZmluZSBQTEFURk9STV9EUklWRVIJCXVzYl9oY2RfcG54NDAwOF9kcml2ZXIKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FSQ0hfREFWSU5DSV9EQThYWAorI2luY2x1ZGUgIm9oY2ktZGE4eHguYyIKKyNkZWZpbmUgUExBVEZPUk1fRFJJVkVSCQlvaGNpX2hjZF9kYTh4eF9kcml2ZXIKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIwKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzIxKSB8fCBcCiAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYzKSB8fCBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MDQuYwppbmRleCBkZTQyMjgzLi4xOGQzOWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1saDdhNDA0LmMKQEAgLTI4LDggKzI4LDggQEAKIAogc3RhdGljIHZvaWQgbGg3YTQwNF9zdGFydF9oYyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7Ci0JcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18KLQkgICAgICAgIjogc3RhcnRpbmcgTEg3QTQwNCBPSENJIFVTQiBDb250cm9sbGVyXG4iKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHN0YXJ0aW5nIExIN0E0MDQgT0hDSSBVU0IgQ29udHJvbGxlclxuIiwKKwkgICAgICAgX19GSUxFX18pOwogCiAJLyoKIAkgKiBOb3csIGNhcmVmdWxseSBlbmFibGUgdGhlIFVTQiBjbG9jaywgYW5kIHRha2UKQEAgLTM5LDE0ICszOSwxMyBAQAogCXVkZWxheSgxMDAwKTsKIAlVU0JIX0NNRFNUQVRVUyA9IE9IQ0lfSENSOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgX19GSUxFX18KLQkJICAgIjogQ2xvY2sgdG8gVVNCIGhvc3QgaGFzIGJlZW4gZW5hYmxlZCBcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogQ2xvY2sgdG8gVVNCIGhvc3QgaGFzIGJlZW4gZW5hYmxlZCBcbiIsIF9fRklMRV9fKTsKIH0KIAogc3RhdGljIHZvaWQgbGg3YTQwNF9zdG9wX2hjKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXwotCSAgICAgICAiOiBzdG9wcGluZyBMSDdBNDA0IE9IQ0kgVVNCIENvbnRyb2xsZXJcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogc3RvcHBpbmcgTEg3QTQwNCBPSENJIFVTQiBDb250cm9sbGVyXG4iLAorCSAgICAgICBfX0ZJTEVfXyk7CiAKIAlDU0NfUFdSQ05UICY9IH5DU0NfUFdSQ05UX1VTQkhfRU47IC8qIERpc2FibGUgY2xvY2sgKi8KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wbng0MDA4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcG54NDAwOC5jCmluZGV4IDI3NjkzMjYuLmNkNzRiYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wbng0MDA4LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBueDQwMDguYwpAQCAtMzI3LDcgKzMyNyw3IEBACiAJfQogCWkyY19hZGFwID0gaTJjX2dldF9hZGFwdGVyKDIpOwogCW1lbXNldCgmaTJjX2luZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKLQlzdHJsY3B5KGkyY19pbmZvLm5hbWUsICJpc3AxMzAxX3BueCIsIEkyQ19OQU1FX1NJWkUpOworCXN0cmxjcHkoaTJjX2luZm8udHlwZSwgImlzcDEzMDFfcG54IiwgSTJDX05BTUVfU0laRSk7CiAJaXNwMTMwMV9pMmNfY2xpZW50ID0gaTJjX25ld19wcm9iZWRfZGV2aWNlKGkyY19hZGFwLCAmaTJjX2luZm8sCiAJCQkJCQkgICBub3JtYWxfaTJjKTsKIAlpMmNfcHV0X2FkYXB0ZXIoaTJjX2FkYXApOwpAQCAtNDExLDcgKzQxMSw3IEBACiBvdXQyOgogCWNsa19wdXQodXNiX2Nsayk7CiBvdXQxOgotCWkyY191bnJlZ2lzdGVyX2NsaWVudChpc3AxMzAxX2kyY19jbGllbnQpOworCWkyY191bnJlZ2lzdGVyX2RldmljZShpc3AxMzAxX2kyY19jbGllbnQpOwogCWlzcDEzMDFfaTJjX2NsaWVudCA9IE5VTEw7CiBvdXRfaTJjX2RyaXZlcjoKIAlpMmNfZGVsX2RyaXZlcigmaXNwMTMwMV9kcml2ZXIpOwpAQCAtNDMwLDcgKzQzMCw3IEBACiAJcG54NDAwOF91bnNldF91c2JfYml0cygpOwogCWNsa19kaXNhYmxlKHVzYl9jbGspOwogCWNsa19wdXQodXNiX2Nsayk7Ci0JaTJjX3VucmVnaXN0ZXJfY2xpZW50KGlzcDEzMDFfaTJjX2NsaWVudCk7CisJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGlzcDEzMDFfaTJjX2NsaWVudCk7CiAJaXNwMTMwMV9pMmNfY2xpZW50ID0gTlVMTDsKIAlpMmNfZGVsX2RyaXZlcigmaXNwMTMwMV9kcml2ZXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLW9mLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLW9mLmMKaW5kZXggNjhhMzAxNy4uMTAzMjYzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBwYy1vZi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtb2YuYwpAQCAtMTE0LDIxICsxMTQsMjEgQEAKIAloY2QtPnJzcmNfbGVuID0gcmVzLmVuZCAtIHJlcy5zdGFydCArIDE7CiAKIAlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4sIGhjZF9uYW1lKSkgewotCQlwcmludGsoS0VSTl9FUlIgX19GSUxFX18gIjogcmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIsIF9fRklMRV9fKTsKIAkJcnYgPSAtRUJVU1k7CiAJCWdvdG8gZXJyX3JtcjsKIAl9CiAKIAlpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChkbiwgMCk7CiAJaWYgKGlycSA9PSBOT19JUlEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIF9fRklMRV9fICI6IGlycV9vZl9wYXJzZV9hbmRfbWFwIGZhaWxlZFxuIik7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGlycV9vZl9wYXJzZV9hbmRfbWFwIGZhaWxlZFxuIiwgX19GSUxFX18pOwogCQlydiA9IC1FQlVTWTsKIAkJZ290byBlcnJfaXJxOwogCX0KIAogCWhjZC0+cmVncyA9IGlvcmVtYXAoaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKIAlpZiAoIWhjZC0+cmVncykgewotCQlwcmludGsoS0VSTl9FUlIgX19GSUxFX18gIjogaW9yZW1hcCBmYWlsZWRcbiIpOworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpb3JlbWFwIGZhaWxlZFxuIiwgX19GSUxFX18pOwogCQlydiA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX2lvcmVtYXA7CiAJfQpAQCAtMTY5LDcgKzE2OSw3IEBACiAJCQl9IGVsc2UKIAkJCQlyZWxlYXNlX21lbV9yZWdpb24ocmVzLnN0YXJ0LCAweDQpOwogCQl9IGVsc2UKLQkJICAgIHByX2RlYnVnKF9fRklMRV9fICI6IGNhbm5vdCBnZXQgZWhjaSBvZmZzZXQgZnJvbSBmZHRcbiIpOworCQkJcHJfZGVidWcoIiVzOiBjYW5ub3QgZ2V0IGVoY2kgb2Zmc2V0IGZyb20gZmR0XG4iLCBfX0ZJTEVfXyk7CiAJfQogCiAJaW91bm1hcChoY2QtPnJlZ3MpOwpAQCAtMjEyLDcgKzIxMiw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2hjaV9oY2RfcHBjX29mX21hdGNoW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvaGNpX2hjZF9wcGNfb2ZfbWF0Y2hbXSA9IHsKICNpZmRlZiBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9CRQogCXsKIAkJLm5hbWUgPSAidXNiIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLXNvYy5jCmluZGV4IGNkMzM5OGIuLjg5ZTY3MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBwYy1zb2MuYwpAQCAtNDEsMTQgKzQxLDE0IEBACiAKIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JUlEsIDApOwogCWlmICghcmVzKSB7Ci0JCXByX2RlYnVnKF9fRklMRV9fICI6IG5vIGlycVxuIik7CisJCXByX2RlYnVnKCIlczogbm8gaXJxXG4iLCBfX0ZJTEVfXyk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAlpcnEgPSByZXMtPnN0YXJ0OwogCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKIAlpZiAoIXJlcykgewotCQlwcl9kZWJ1ZyhfX0ZJTEVfXyAiOiBubyByZWcgYWRkclxuIik7CisJCXByX2RlYnVnKCIlczogbm8gcmVnIGFkZHJcbiIsIF9fRklMRV9fKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCkBAIC01OSwxNCArNTksMTQgQEAKIAloY2QtPnJzcmNfbGVuID0gcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMTsKIAogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbiwgaGNkX25hbWUpKSB7Ci0JCXByX2RlYnVnKF9fRklMRV9fICI6IHJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIpOworCQlwcl9kZWJ1ZygiJXM6IHJlcXVlc3RfbWVtX3JlZ2lvbiBmYWlsZWRcbiIsIF9fRklMRV9fKTsKIAkJcmV0dmFsID0gLUVCVVNZOwogCQlnb3RvIGVycjE7CiAJfQogCiAJaGNkLT5yZWdzID0gaW9yZW1hcChoY2QtPnJzcmNfc3RhcnQsIGhjZC0+cnNyY19sZW4pOwogCWlmICghaGNkLT5yZWdzKSB7Ci0JCXByX2RlYnVnKF9fRklMRV9fICI6IGlvcmVtYXAgZmFpbGVkXG4iKTsKKwkJcHJfZGVidWcoIiVzOiBpb3JlbWFwIGZhaWxlZFxuIiwgX19GSUxFX18pOwogCQlyZXR2YWwgPSAtRU5PTUVNOwogCQlnb3RvIGVycjI7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNhMTExMS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNhMTExMS5jCmluZGV4IGU0YmJlOGUuLmQ4ZWIzYmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zYTExMTEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktc2ExMTExLmMKQEAgLTMxLDggKzMxLDggQEAKIHsKIAl1bnNpZ25lZCBpbnQgdXNiX3JzdCA9IDA7CiAKLQlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXwotCSAgICAgICAiOiBzdGFydGluZyBTQS0xMTExIE9IQ0kgVVNCIENvbnRyb2xsZXJcbiIpOworCXByaW50ayhLRVJOX0RFQlVHICIlczogc3RhcnRpbmcgU0EtMTExMSBPSENJIFVTQiBDb250cm9sbGVyXG4iLAorCSAgICAgICBfX0ZJTEVfXyk7CiAKICNpZmRlZiBDT05GSUdfU0ExMTAwX0JBREdFNAogCWlmIChtYWNoaW5lX2lzX2JhZGdlNCgpKSB7CkBAIC02NSw4ICs2NSw4IEBACiBzdGF0aWMgdm9pZCBzYTExMTFfc3RvcF9oYyhzdHJ1Y3Qgc2ExMTExX2RldiAqZGV2KQogewogCXVuc2lnbmVkIGludCB1c2JfcnN0OwotCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fCi0JICAgICAgICI6IHN0b3BwaW5nIFNBLTExMTEgT0hDSSBVU0IgQ29udHJvbGxlclxuIik7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzdG9wcGluZyBTQS0xMTExIE9IQ0kgVVNCIENvbnRyb2xsZXJcbiIsCisJICAgICAgIF9fRklMRV9fKTsKIAogCS8qCiAJICogUHV0IHRoZSBVU0IgaG9zdCBjb250cm9sbGVyIGludG8gcmVzZXQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwppbmRleCA1YjIyYTRkLi5lMTFjYzNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3NsODExLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKICNpbmNsdWRlICIuLi9jb3JlL2hjZC5oIgogI2luY2x1ZGUgInNsODExLmgiCkBAIC0xMjcyLDEyICsxMjczLDEyIEBACiAJCXNsODExaF9odWJfZGVzY3JpcHRvcihzbDgxMSwgKHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKikgYnVmKTsKIAkJYnJlYWs7CiAJY2FzZSBHZXRIdWJTdGF0dXM6Ci0JCSooX19sZTMyICopIGJ1ZiA9IGNwdV90b19sZTMyKDApOworCQlwdXRfdW5hbGlnbmVkX2xlMzIoMCwgYnVmKTsKIAkJYnJlYWs7CiAJY2FzZSBHZXRQb3J0U3RhdHVzOgogCQlpZiAod0luZGV4ICE9IDEpCiAJCQlnb3RvIGVycm9yOwotCQkqKF9fbGUzMiAqKSBidWYgPSBjcHVfdG9fbGUzMihzbDgxMS0+cG9ydDEpOworCQlwdXRfdW5hbGlnbmVkX2xlMzIoc2w4MTEtPnBvcnQxLCBidWYpOwogCiAjaWZuZGVmCVZFUkJPU0UKIAlpZiAoKih1MTYqKShidWYrMikpCS8qIG9ubHkgaWYgd1BvcnRDaGFuZ2UgaXMgaW50ZXJlc3RpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwppbmRleCA5OWNkMDBmLi4wOTE5NzA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCkBAIC03MzUsNiArNzM1LDcgQEAKIAkJdWhjaV9oY19kaWVkKHVoY2kpOwogCXVoY2lfc2Nhbl9zY2hlZHVsZSh1aGNpKTsKIAlzcGluX3VubG9ja19pcnEoJnVoY2ktPmxvY2spOworCXN5bmNocm9uaXplX2lycShoY2QtPmlycSk7CiAKIAlkZWxfdGltZXJfc3luYygmdWhjaS0+ZnNicl90aW1lcik7CiAJcmVsZWFzZV91aGNpKHVoY2kpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZy5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWRiZy5jCmluZGV4IDMzMTI4ZDUuLjEwNWZhOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1kYmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZGJnLmMKQEAgLTQwNiw2ICs0MDYsMjUgQEAKIAl9CiB9CiAKK2NoYXIgKnhoY2lfZ2V0X3Nsb3Rfc3RhdGUoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICpjdHgpCit7CisJc3RydWN0IHhoY2lfc2xvdF9jdHggKnNsb3RfY3R4ID0geGhjaV9nZXRfc2xvdF9jdHgoeGhjaSwgY3R4KTsKKworCXN3aXRjaCAoR0VUX1NMT1RfU1RBVEUoc2xvdF9jdHgtPmRldl9zdGF0ZSkpIHsKKwljYXNlIDA6CisJCXJldHVybiAiZW5hYmxlZC9kaXNhYmxlZCI7CisJY2FzZSAxOgorCQlyZXR1cm4gImRlZmF1bHQiOworCWNhc2UgMjoKKwkJcmV0dXJuICJhZGRyZXNzZWQiOworCWNhc2UgMzoKKwkJcmV0dXJuICJjb25maWd1cmVkIjsKKwlkZWZhdWx0OgorCQlyZXR1cm4gInJlc2VydmVkIjsKKwl9Cit9CisKIHZvaWQgeGhjaV9kYmdfc2xvdF9jdHgoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBzdHJ1Y3QgeGhjaV9jb250YWluZXJfY3R4ICpjdHgpCiB7CiAJLyogRmllbGRzIGFyZSAzMiBiaXRzIHdpZGUsIERNQSBhZGRyZXNzZXMgYXJlIGluIGJ5dGVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktZXh0LWNhcHMuaCBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1leHQtY2Fwcy5oCmluZGV4IGVjYzEzMWMuLjc4YzRlZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1leHQtY2Fwcy5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1leHQtY2Fwcy5oCkBAIC0xMDEsMTIgKzEwMSwxNSBAQAogCiAJbmV4dCA9IHJlYWRsKGJhc2UgKyBleHRfb2Zmc2V0KTsKIAotCWlmIChleHRfb2Zmc2V0ID09IFhIQ0lfSENDX1BBUkFNU19PRkZTRVQpCisJaWYgKGV4dF9vZmZzZXQgPT0gWEhDSV9IQ0NfUEFSQU1TX09GRlNFVCkgewogCQkvKiBGaW5kIHRoZSBmaXJzdCBleHRlbmRlZCBjYXBhYmlsaXR5ICovCiAJCW5leHQgPSBYSENJX0hDQ19FWFRfQ0FQUyhuZXh0KTsKLQllbHNlCisJCWV4dF9vZmZzZXQgPSAwOworCX0gZWxzZSB7CiAJCS8qIEZpbmQgdGhlIG5leHQgZXh0ZW5kZWQgY2FwYWJpbGl0eSAqLwogCQluZXh0ID0gWEhDSV9FWFRfQ0FQU19ORVhUKG5leHQpOworCX0KKwogCWlmICghbmV4dCkKIAkJcmV0dXJuIDA7CiAJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1oY2QuYwppbmRleCA1ZTkyYzcyLi40Y2I2OWUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWhjZC5jCkBAIC0xMDA3LDcgKzEwMDcsNyBAQAogCSAqIGZvciB1c2Jfc2V0X2ludGVyZmFjZSgpIGFuZCB1c2Jfc2V0X2NvbmZpZ3VyYXRpb24oKSBjbGFpbSkuCiAJICovCiAJaWYgKHhoY2lfZW5kcG9pbnRfaW5pdCh4aGNpLCB4aGNpLT5kZXZzW3VkZXYtPnNsb3RfaWRdLAotCQkJCXVkZXYsIGVwLCBHRlBfS0VSTkVMKSA8IDApIHsKKwkJCQl1ZGV2LCBlcCwgR0ZQX05PSU8pIDwgMCkgewogCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICIlcyAtIGNvdWxkIG5vdCBpbml0aWFsaXplIGVwICUjeFxuIiwKIAkJCQlfX2Z1bmNfXywgZXAtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtMTE4MSw2ICsxMTgxLDggQEAKIAkJcmV0ID0geGhjaV9xdWV1ZV9ldmFsdWF0ZV9jb250ZXh0KHhoY2ksIGluX2N0eC0+ZG1hLAogCQkJCXVkZXYtPnNsb3RfaWQpOwogCWlmIChyZXQgPCAwKSB7CisJCWlmIChjb21tYW5kKQorCQkJbGlzdF9kZWwoJmNvbW1hbmQtPmNtZF9saXN0KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOwogCQl4aGNpX2RiZyh4aGNpLCAiRklYTUUgYWxsb2NhdGUgYSBuZXcgcmluZyBzZWdtZW50XG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0xMjY0LDMwICsxMjY2LDEzIEBACiAJeGhjaV96ZXJvX2luX2N0eCh4aGNpLCB2aXJ0X2Rldik7CiAJLyogSW5zdGFsbCBuZXcgcmluZ3MgYW5kIGZyZWUgb3IgY2FjaGUgYW55IG9sZCByaW5ncyAqLwogCWZvciAoaSA9IDE7IGkgPCAzMTsgKytpKSB7Ci0JCWludCByaW5nc19jYWNoZWQ7Ci0KIAkJaWYgKCF2aXJ0X2Rldi0+ZXBzW2ldLm5ld19yaW5nKQogCQkJY29udGludWU7CiAJCS8qIE9ubHkgY2FjaGUgb3IgZnJlZSB0aGUgb2xkIHJpbmcgaWYgaXQgZXhpc3RzLgogCQkgKiBJdCBtYXkgbm90IGlmIHRoaXMgaXMgdGhlIGZpcnN0IGFkZCBvZiBhbiBlbmRwb2ludC4KIAkJICovCiAJCWlmICh2aXJ0X2Rldi0+ZXBzW2ldLnJpbmcpIHsKLQkJCXJpbmdzX2NhY2hlZCA9IHZpcnRfZGV2LT5udW1fcmluZ3NfY2FjaGVkOwotCQkJaWYgKHJpbmdzX2NhY2hlZCA8IFhIQ0lfTUFYX1JJTkdTX0NBQ0hFRCkgewotCQkJCXZpcnRfZGV2LT5udW1fcmluZ3NfY2FjaGVkKys7Ci0JCQkJcmluZ3NfY2FjaGVkID0gdmlydF9kZXYtPm51bV9yaW5nc19jYWNoZWQ7Ci0JCQkJdmlydF9kZXYtPnJpbmdfY2FjaGVbcmluZ3NfY2FjaGVkXSA9Ci0JCQkJCXZpcnRfZGV2LT5lcHNbaV0ucmluZzsKLQkJCQl4aGNpX2RiZyh4aGNpLCAiQ2FjaGVkIG9sZCByaW5nLCAiCi0JCQkJCQkiJWQgcmluZyVzIGNhY2hlZFxuIiwKLQkJCQkJCXJpbmdzX2NhY2hlZCwKLQkJCQkJCShyaW5nc19jYWNoZWQgPiAxKSA/ICJzIiA6ICIiKTsKLQkJCX0gZWxzZSB7Ci0JCQkJeGhjaV9yaW5nX2ZyZWUoeGhjaSwgdmlydF9kZXYtPmVwc1tpXS5yaW5nKTsKLQkJCQl4aGNpX2RiZyh4aGNpLCAiUmluZyBjYWNoZSBmdWxsICglZCByaW5ncyksICIKLQkJCQkJCSJmcmVlaW5nIHJpbmdcbiIsCi0JCQkJCQl2aXJ0X2Rldi0+bnVtX3JpbmdzX2NhY2hlZCk7Ci0JCQl9CisJCQl4aGNpX2ZyZWVfb3JfY2FjaGVfZW5kcG9pbnRfcmluZyh4aGNpLCB2aXJ0X2RldiwgaSk7CiAJCX0KIAkJdmlydF9kZXYtPmVwc1tpXS5yaW5nID0gdmlydF9kZXYtPmVwc1tpXS5uZXdfcmluZzsKIAkJdmlydF9kZXYtPmVwc1tpXS5uZXdfcmluZyA9IE5VTEw7CkBAIC0xNDU4LDYgKzE0NDMsMTMxIEBACiB9CiAKIC8qCisgKiBUaGlzIHN1Ym1pdHMgYSBSZXNldCBEZXZpY2UgQ29tbWFuZCwgd2hpY2ggd2lsbCBzZXQgdGhlIGRldmljZSBzdGF0ZSB0byAwLAorICogc2V0IHRoZSBkZXZpY2UgYWRkcmVzcyB0byAwLCBhbmQgZGlzYWJsZSBhbGwgdGhlIGVuZHBvaW50cyBleGNlcHQgdGhlIGRlZmF1bHQKKyAqIGNvbnRyb2wgZW5kcG9pbnQuICBUaGUgVVNCIGNvcmUgc2hvdWxkIGNvbWUgYmFjayBhbmQgY2FsbAorICogeGhjaV9hZGRyZXNzX2RldmljZSgpLCBhbmQgdGhlbiByZS1zZXQgdXAgdGhlIGNvbmZpZ3VyYXRpb24uICBJZiB0aGlzIGlzCisgKiBjYWxsZWQgYmVjYXVzZSBvZiBhIHVzYl9yZXNldF9hbmRfdmVyaWZ5X2RldmljZSgpLCB0aGVuIHRoZSBvbGQgYWx0ZXJuYXRlCisgKiBzZXR0aW5ncyB3aWxsIGJlIHJlLWluc3RhbGxlZCB0aHJvdWdoIHRoZSBub3JtYWwgYmFuZHdpZHRoIGFsbG9jYXRpb24KKyAqIGZ1bmN0aW9ucy4KKyAqCisgKiBXYWl0IGZvciB0aGUgUmVzZXQgRGV2aWNlIGNvbW1hbmQgdG8gZmluaXNoLiAgUmVtb3ZlIGFsbCBzdHJ1Y3R1cmVzCisgKiBhc3NvY2lhdGVkIHdpdGggdGhlIGVuZHBvaW50cyB0aGF0IHdlcmUgZGlzYWJsZWQuICBDbGVhciB0aGUgaW5wdXQgZGV2aWNlCisgKiBzdHJ1Y3R1cmU/ICBDYWNoZSB0aGUgcmluZ3M/ICBSZXNldCB0aGUgY29udHJvbCBlbmRwb2ludCAwIG1heCBwYWNrZXQgc2l6ZT8KKyAqLworaW50IHhoY2lfcmVzZXRfZGV2aWNlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCWludCByZXQsIGk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgeGhjaV9oY2QgKnhoY2k7CisJdW5zaWduZWQgaW50IHNsb3RfaWQ7CisJc3RydWN0IHhoY2lfdmlydF9kZXZpY2UgKnZpcnRfZGV2OworCXN0cnVjdCB4aGNpX2NvbW1hbmQgKnJlc2V0X2RldmljZV9jbWQ7CisJaW50IHRpbWVsZWZ0OworCWludCBsYXN0X2ZyZWVkX2VuZHBvaW50OworCisJcmV0ID0geGhjaV9jaGVja19hcmdzKGhjZCwgdWRldiwgTlVMTCwgMCwgX19mdW5jX18pOworCWlmIChyZXQgPD0gMCkKKwkJcmV0dXJuIHJldDsKKwl4aGNpID0gaGNkX3RvX3hoY2koaGNkKTsKKwlzbG90X2lkID0gdWRldi0+c2xvdF9pZDsKKwl2aXJ0X2RldiA9IHhoY2ktPmRldnNbc2xvdF9pZF07CisJaWYgKCF2aXJ0X2RldikgeworCQl4aGNpX2RiZyh4aGNpLCAiJXMgY2FsbGVkIHdpdGggaW52YWxpZCBzbG90IElEICV1XG4iLAorCQkJCV9fZnVuY19fLCBzbG90X2lkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJeGhjaV9kYmcoeGhjaSwgIlJlc2V0dGluZyBkZXZpY2Ugd2l0aCBzbG90IElEICV1XG4iLCBzbG90X2lkKTsKKwkvKiBBbGxvY2F0ZSB0aGUgY29tbWFuZCBzdHJ1Y3R1cmUgdGhhdCBob2xkcyB0aGUgc3RydWN0IGNvbXBsZXRpb24uCisJICogQXNzdW1lIHdlJ3JlIGluIHByb2Nlc3MgY29udGV4dCwgc2luY2UgdGhlIG5vcm1hbCBkZXZpY2UgcmVzZXQKKwkgKiBwcm9jZXNzIGhhcyB0byB3YWl0IGZvciB0aGUgZGV2aWNlIGFueXdheS4gIFN0b3JhZ2UgZGV2aWNlcyBhcmUKKwkgKiByZXNldCBhcyBwYXJ0IG9mIGVycm9yIGhhbmRsaW5nLCBzbyB1c2UgR0ZQX05PSU8gaW5zdGVhZCBvZgorCSAqIEdGUF9LRVJORUwuCisJICovCisJcmVzZXRfZGV2aWNlX2NtZCA9IHhoY2lfYWxsb2NfY29tbWFuZCh4aGNpLCBmYWxzZSwgdHJ1ZSwgR0ZQX05PSU8pOworCWlmICghcmVzZXRfZGV2aWNlX2NtZCkgeworCQl4aGNpX2RiZyh4aGNpLCAiQ291bGRuJ3QgYWxsb2NhdGUgY29tbWFuZCBzdHJ1Y3R1cmUuXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogQXR0ZW1wdCB0byBzdWJtaXQgdGhlIFJlc2V0IERldmljZSBjb21tYW5kIHRvIHRoZSBjb21tYW5kIHJpbmcgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCXJlc2V0X2RldmljZV9jbWQtPmNvbW1hbmRfdHJiID0geGhjaS0+Y21kX3JpbmctPmVucXVldWU7CisJbGlzdF9hZGRfdGFpbCgmcmVzZXRfZGV2aWNlX2NtZC0+Y21kX2xpc3QsICZ2aXJ0X2Rldi0+Y21kX2xpc3QpOworCXJldCA9IHhoY2lfcXVldWVfcmVzZXRfZGV2aWNlKHhoY2ksIHNsb3RfaWQpOworCWlmIChyZXQpIHsKKwkJeGhjaV9kYmcoeGhjaSwgIkZJWE1FOiBhbGxvY2F0ZSBhIGNvbW1hbmQgcmluZyBzZWdtZW50XG4iKTsKKwkJbGlzdF9kZWwoJnJlc2V0X2RldmljZV9jbWQtPmNtZF9saXN0KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCQlnb3RvIGNvbW1hbmRfY2xlYW51cDsKKwl9CisJeGhjaV9yaW5nX2NtZF9kYih4aGNpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4aGNpLT5sb2NrLCBmbGFncyk7CisKKwkvKiBXYWl0IGZvciB0aGUgUmVzZXQgRGV2aWNlIGNvbW1hbmQgdG8gZmluaXNoICovCisJdGltZWxlZnQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dCgKKwkJCXJlc2V0X2RldmljZV9jbWQtPmNvbXBsZXRpb24sCisJCQlVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJaWYgKHRpbWVsZWZ0IDw9IDApIHsKKwkJeGhjaV93YXJuKHhoY2ksICIlcyB3aGlsZSB3YWl0aW5nIGZvciByZXNldCBkZXZpY2UgY29tbWFuZFxuIiwKKwkJCQl0aW1lbGVmdCA9PSAwID8gIlRpbWVvdXQiIDogIlNpZ25hbCIpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmeGhjaS0+bG9jaywgZmxhZ3MpOworCQkvKiBUaGUgdGltZW91dCBtaWdodCBoYXZlIHJhY2VkIHdpdGggdGhlIGV2ZW50IHJpbmcgaGFuZGxlciwgc28KKwkJICogb25seSBkZWxldGUgZnJvbSB0aGUgbGlzdCBpZiB0aGUgaXRlbSBpc24ndCBwb2lzb25lZC4KKwkJICovCisJCWlmIChyZXNldF9kZXZpY2VfY21kLT5jbWRfbGlzdC5uZXh0ICE9IExJU1RfUE9JU09OMSkKKwkJCWxpc3RfZGVsKCZyZXNldF9kZXZpY2VfY21kLT5jbWRfbGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhoY2ktPmxvY2ssIGZsYWdzKTsKKwkJcmV0ID0gLUVUSU1FOworCQlnb3RvIGNvbW1hbmRfY2xlYW51cDsKKwl9CisKKwkvKiBUaGUgUmVzZXQgRGV2aWNlIGNvbW1hbmQgY2FuJ3QgZmFpbCwgYWNjb3JkaW5nIHRvIHRoZSAwLjk1LzAuOTYgc3BlYywKKwkgKiB1bmxlc3Mgd2UgdHJpZWQgdG8gcmVzZXQgYSBzbG90IElEIHRoYXQgd2Fzbid0IGVuYWJsZWQsCisJICogb3IgdGhlIGRldmljZSB3YXNuJ3QgaW4gdGhlIGFkZHJlc3NlZCBvciBjb25maWd1cmVkIHN0YXRlLgorCSAqLworCXJldCA9IHJlc2V0X2RldmljZV9jbWQtPnN0YXR1czsKKwlzd2l0Y2ggKHJldCkgeworCWNhc2UgQ09NUF9FQkFEU0xUOiAvKiAwLjk1IGNvbXBsZXRpb24gY29kZSBmb3IgYmFkIHNsb3QgSUQgKi8KKwljYXNlIENPTVBfQ1RYX1NUQVRFOiAvKiAwLjk2IGNvbXBsZXRpb24gY29kZSBmb3Igc2FtZSB0aGluZyAqLworCQl4aGNpX2luZm8oeGhjaSwgIkNhbid0IHJlc2V0IGRldmljZSAoc2xvdCBJRCAldSkgaW4gJXMgc3RhdGVcbiIsCisJCQkJc2xvdF9pZCwKKwkJCQl4aGNpX2dldF9zbG90X3N0YXRlKHhoY2ksIHZpcnRfZGV2LT5vdXRfY3R4KSk7CisJCXhoY2lfaW5mbyh4aGNpLCAiTm90IGZyZWVpbmcgZGV2aWNlIHJpbmdzLlxuIik7CisJCS8qIERvbid0IHRyZWF0IHRoaXMgYXMgYW4gZXJyb3IuICBNYXkgY2hhbmdlIG15IG1pbmQgbGF0ZXIuICovCisJCXJldCA9IDA7CisJCWdvdG8gY29tbWFuZF9jbGVhbnVwOworCWNhc2UgQ09NUF9TVUNDRVNTOgorCQl4aGNpX2RiZyh4aGNpLCAiU3VjY2Vzc2Z1bCByZXNldCBkZXZpY2UgY29tbWFuZC5cbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlpZiAoeGhjaV9pc192ZW5kb3JfaW5mb19jb2RlKHhoY2ksIHJldCkpCisJCQlicmVhazsKKwkJeGhjaV93YXJuKHhoY2ksICJVbmtub3duIGNvbXBsZXRpb24gY29kZSAldSBmb3IgIgorCQkJCSJyZXNldCBkZXZpY2UgY29tbWFuZC5cbiIsIHJldCk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gY29tbWFuZF9jbGVhbnVwOworCX0KKworCS8qIEV2ZXJ5dGhpbmcgYnV0IGVuZHBvaW50IDAgaXMgZGlzYWJsZWQsIHNvIGZyZWUgb3IgY2FjaGUgdGhlIHJpbmdzLiAqLworCWxhc3RfZnJlZWRfZW5kcG9pbnQgPSAxOworCWZvciAoaSA9IDE7IGkgPCAzMTsgKytpKSB7CisJCWlmICghdmlydF9kZXYtPmVwc1tpXS5yaW5nKQorCQkJY29udGludWU7CisJCXhoY2lfZnJlZV9vcl9jYWNoZV9lbmRwb2ludF9yaW5nKHhoY2ksIHZpcnRfZGV2LCBpKTsKKwkJbGFzdF9mcmVlZF9lbmRwb2ludCA9IGk7CisJfQorCXhoY2lfZGJnKHhoY2ksICJPdXRwdXQgY29udGV4dCBhZnRlciBzdWNjZXNzZnVsIHJlc2V0IGRldmljZSBjbWQ6XG4iKTsKKwl4aGNpX2RiZ19jdHgoeGhjaSwgdmlydF9kZXYtPm91dF9jdHgsIGxhc3RfZnJlZWRfZW5kcG9pbnQpOworCXJldCA9IDA7CisKK2NvbW1hbmRfY2xlYW51cDoKKwl4aGNpX2ZyZWVfY29tbWFuZCh4aGNpLCByZXNldF9kZXZpY2VfY21kKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgogICogQXQgdGhpcyBwb2ludCwgdGhlIHN0cnVjdCB1c2JfZGV2aWNlIGlzIGFib3V0IHRvIGdvIGF3YXksIHRoZSBkZXZpY2UgaGFzCiAgKiBkaXNjb25uZWN0ZWQsIGFuZCBhbGwgdHJhZmZpYyBoYXMgYmVlbiBzdG9wcGVkIGFuZCB0aGUgZW5kcG9pbnRzIGhhdmUgYmVlbgogICogZGlzYWJsZWQuICBGcmVlIGFueSBIQyBkYXRhIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIHRoYXQgZGV2aWNlLgpAQCAtMTY5NCw3ICsxODA0LDcgQEAKIAkJeGhjaV93YXJuKHhoY2ksICJDYW5ub3QgdXBkYXRlIGh1YiBkZXNjIGZvciB1bmtub3duIGRldmljZS5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JY29uZmlnX2NtZCA9IHhoY2lfYWxsb2NfY29tbWFuZCh4aGNpLCB0cnVlLCBtZW1fZmxhZ3MpOworCWNvbmZpZ19jbWQgPSB4aGNpX2FsbG9jX2NvbW1hbmQoeGhjaSwgdHJ1ZSwgdHJ1ZSwgbWVtX2ZsYWdzKTsKIAlpZiAoIWNvbmZpZ19jbWQpIHsKIAkJeGhjaV9kYmcoeGhjaSwgIkNvdWxkIG5vdCBhbGxvY2F0ZSB4SENJIGNvbW1hbmQgc3RydWN0dXJlLlxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLWh1Yi5jIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLWh1Yi5jCmluZGV4IGVhYzViNTMuLjIwOGI4MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1odWIuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktaHViLmMKQEAgLTEyOSw2ICsxMjksNTAgQEAKIAlyZXR1cm4gKHN0YXRlICYgWEhDSV9QT1JUX1JPKSB8IChzdGF0ZSAmIFhIQ0lfUE9SVF9SV1MpOwogfQogCitzdGF0aWMgdm9pZCB4aGNpX2Rpc2FibGVfcG9ydChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHUxNiB3SW5kZXgsCisJCXUzMiBfX2lvbWVtICphZGRyLCB1MzIgcG9ydF9zdGF0dXMpCit7CisJLyogV3JpdGUgMSB0byBkaXNhYmxlIHRoZSBwb3J0ICovCisJeGhjaV93cml0ZWwoeGhjaSwgcG9ydF9zdGF0dXMgfCBQT1JUX1BFLCBhZGRyKTsKKwlwb3J0X3N0YXR1cyA9IHhoY2lfcmVhZGwoeGhjaSwgYWRkcik7CisJeGhjaV9kYmcoeGhjaSwgImRpc2FibGUgcG9ydCwgYWN0dWFsIHBvcnQgJWQgc3RhdHVzICA9IDB4JXhcbiIsCisJCQl3SW5kZXgsIHBvcnRfc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgeGhjaV9jbGVhcl9wb3J0X2NoYW5nZV9iaXQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCB1MTYgd1ZhbHVlLAorCQl1MTYgd0luZGV4LCB1MzIgX19pb21lbSAqYWRkciwgdTMyIHBvcnRfc3RhdHVzKQoreworCWNoYXIgKnBvcnRfY2hhbmdlX2JpdDsKKwl1MzIgc3RhdHVzOworCisJc3dpdGNoICh3VmFsdWUpIHsKKwljYXNlIFVTQl9QT1JUX0ZFQVRfQ19SRVNFVDoKKwkJc3RhdHVzID0gUE9SVF9SQzsKKwkJcG9ydF9jaGFuZ2VfYml0ID0gInJlc2V0IjsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTjoKKwkJc3RhdHVzID0gUE9SVF9DU0M7CisJCXBvcnRfY2hhbmdlX2JpdCA9ICJjb25uZWN0IjsKKwkJYnJlYWs7CisJY2FzZSBVU0JfUE9SVF9GRUFUX0NfT1ZFUl9DVVJSRU5UOgorCQlzdGF0dXMgPSBQT1JUX09DQzsKKwkJcG9ydF9jaGFuZ2VfYml0ID0gIm92ZXItY3VycmVudCI7CisJCWJyZWFrOworCWNhc2UgVVNCX1BPUlRfRkVBVF9DX0VOQUJMRToKKwkJc3RhdHVzID0gUE9SVF9QRUM7CisJCXBvcnRfY2hhbmdlX2JpdCA9ICJlbmFibGUvZGlzYWJsZSI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIFNob3VsZCBuZXZlciBoYXBwZW4gKi8KKwkJcmV0dXJuOworCX0KKwkvKiBDaGFuZ2UgYml0cyBhcmUgYWxsIHdyaXRlIDEgdG8gY2xlYXIgKi8KKwl4aGNpX3dyaXRlbCh4aGNpLCBwb3J0X3N0YXR1cyB8IHN0YXR1cywgYWRkcik7CisJcG9ydF9zdGF0dXMgPSB4aGNpX3JlYWRsKHhoY2ksIGFkZHIpOworCXhoY2lfZGJnKHhoY2ksICJjbGVhciBwb3J0ICVzIGNoYW5nZSwgYWN0dWFsIHBvcnQgJWQgc3RhdHVzICA9IDB4JXhcbiIsCisJCQlwb3J0X2NoYW5nZV9iaXQsIHdJbmRleCwgcG9ydF9zdGF0dXMpOworfQorCiBpbnQgeGhjaV9odWJfY29udHJvbChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCB1MTYgdHlwZVJlcSwgdTE2IHdWYWx1ZSwKIAkJdTE2IHdJbmRleCwgY2hhciAqYnVmLCB1MTYgd0xlbmd0aCkKIHsKQEAgLTEzOCw3ICsxODIsNiBAQAogCXUzMiB0ZW1wLCBzdGF0dXM7CiAJaW50IHJldHZhbCA9IDA7CiAJdTMyIF9faW9tZW0gKmFkZHI7Ci0JY2hhciAqcG9ydF9jaGFuZ2VfYml0OwogCiAJcG9ydHMgPSBIQ1NfTUFYX1BPUlRTKHhoY2ktPmhjc19wYXJhbXMxKTsKIApAQCAtMjI5LDI2ICsyNzIsMTggQEAKIAkJdGVtcCA9IHhoY2lfcG9ydF9zdGF0ZV90b19uZXV0cmFsKHRlbXApOwogCQlzd2l0Y2ggKHdWYWx1ZSkgewogCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19SRVNFVDoKLQkJCXN0YXR1cyA9IFBPUlRfUkM7Ci0JCQlwb3J0X2NoYW5nZV9iaXQgPSAicmVzZXQiOwotCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX0NPTk5FQ1RJT046Ci0JCQlzdGF0dXMgPSBQT1JUX0NTQzsKLQkJCXBvcnRfY2hhbmdlX2JpdCA9ICJjb25uZWN0IjsKLQkJCWJyZWFrOwogCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19PVkVSX0NVUlJFTlQ6Ci0JCQlzdGF0dXMgPSBQT1JUX09DQzsKLQkJCXBvcnRfY2hhbmdlX2JpdCA9ICJvdmVyLWN1cnJlbnQiOworCQljYXNlIFVTQl9QT1JUX0ZFQVRfQ19FTkFCTEU6CisJCQl4aGNpX2NsZWFyX3BvcnRfY2hhbmdlX2JpdCh4aGNpLCB3VmFsdWUsIHdJbmRleCwKKwkJCQkJYWRkciwgdGVtcCk7CisJCQlicmVhazsKKwkJY2FzZSBVU0JfUE9SVF9GRUFUX0VOQUJMRToKKwkJCXhoY2lfZGlzYWJsZV9wb3J0KHhoY2ksIHdJbmRleCwgYWRkciwgdGVtcCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWdvdG8gZXJyb3I7CiAJCX0KLQkJLyogQ2hhbmdlIGJpdHMgYXJlIGFsbCB3cml0ZSAxIHRvIGNsZWFyICovCi0JCXhoY2lfd3JpdGVsKHhoY2ksIHRlbXAgfCBzdGF0dXMsIGFkZHIpOwotCQl0ZW1wID0geGhjaV9yZWFkbCh4aGNpLCBhZGRyKTsKLQkJeGhjaV9kYmcoeGhjaSwgImNsZWFyIHBvcnQgJXMgY2hhbmdlLCBhY3R1YWwgcG9ydCAlZCBzdGF0dXMgID0gMHgleFxuIiwKLQkJCQlwb3J0X2NoYW5nZV9iaXQsIHdJbmRleCwgdGVtcCk7Ci0JCXRlbXAgPSB4aGNpX3JlYWRsKHhoY2ksIGFkZHIpOyAvKiB1bmJsb2NrIGFueSBwb3N0ZWQgd3JpdGVzICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6CiBlcnJvcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1tZW0uYwppbmRleCBiZmZjZWY3Li40OWY3ZDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktbWVtLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLW1lbS5jCkBAIC0xOTgsNiArMTk4LDMxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgeGhjaV9mcmVlX29yX2NhY2hlX2VuZHBvaW50X3Jpbmcoc3RydWN0IHhoY2lfaGNkICp4aGNpLAorCQlzdHJ1Y3QgeGhjaV92aXJ0X2RldmljZSAqdmlydF9kZXYsCisJCXVuc2lnbmVkIGludCBlcF9pbmRleCkKK3sKKwlpbnQgcmluZ3NfY2FjaGVkOworCisJcmluZ3NfY2FjaGVkID0gdmlydF9kZXYtPm51bV9yaW5nc19jYWNoZWQ7CisJaWYgKHJpbmdzX2NhY2hlZCA8IFhIQ0lfTUFYX1JJTkdTX0NBQ0hFRCkgeworCQl2aXJ0X2Rldi0+bnVtX3JpbmdzX2NhY2hlZCsrOworCQlyaW5nc19jYWNoZWQgPSB2aXJ0X2Rldi0+bnVtX3JpbmdzX2NhY2hlZDsKKwkJdmlydF9kZXYtPnJpbmdfY2FjaGVbcmluZ3NfY2FjaGVkXSA9CisJCQl2aXJ0X2Rldi0+ZXBzW2VwX2luZGV4XS5yaW5nOworCQl4aGNpX2RiZyh4aGNpLCAiQ2FjaGVkIG9sZCByaW5nLCAiCisJCQkJIiVkIHJpbmclcyBjYWNoZWRcbiIsCisJCQkJcmluZ3NfY2FjaGVkLAorCQkJCShyaW5nc19jYWNoZWQgPiAxKSA/ICJzIiA6ICIiKTsKKwl9IGVsc2UgeworCQl4aGNpX3JpbmdfZnJlZSh4aGNpLCB2aXJ0X2Rldi0+ZXBzW2VwX2luZGV4XS5yaW5nKTsKKwkJeGhjaV9kYmcoeGhjaSwgIlJpbmcgY2FjaGUgZnVsbCAoJWQgcmluZ3MpLCAiCisJCQkJImZyZWVpbmcgcmluZ1xuIiwKKwkJCQl2aXJ0X2Rldi0+bnVtX3JpbmdzX2NhY2hlZCk7CisJfQorCXZpcnRfZGV2LT5lcHNbZXBfaW5kZXhdLnJpbmcgPSBOVUxMOworfQorCiAvKiBaZXJvIGFuIGVuZHBvaW50IHJpbmcgKGV4Y2VwdCBmb3IgbGluayBUUkJzKSBhbmQgbW92ZSB0aGUgZW5xdWV1ZSBhbmQgZGVxdWV1ZQogICogcG9pbnRlcnMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcmluZy4KICAqLwpAQCAtMjQyLDYgKzI2Nyw4IEBACiB2b2lkIHhoY2lfZnJlZV9jb250YWluZXJfY3R4KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKIAkJCSAgICAgc3RydWN0IHhoY2lfY29udGFpbmVyX2N0eCAqY3R4KQogeworCWlmICghY3R4KQorCQlyZXR1cm47CiAJZG1hX3Bvb2xfZnJlZSh4aGNpLT5kZXZpY2VfcG9vbCwgY3R4LT5ieXRlcywgY3R4LT5kbWEpOwogCWtmcmVlKGN0eCk7CiB9CkBAIC00MjcsNyArNDU0LDcgQEAKIAljYXNlIFVTQl9TUEVFRF9MT1c6CiAJCXNsb3RfY3R4LT5kZXZfaW5mbyB8PSAodTMyKSBTTE9UX1NQRUVEX0xTOwogCQlicmVhazsKLQljYXNlIFVTQl9TUEVFRF9WQVJJQUJMRToKKwljYXNlIFVTQl9TUEVFRF9XSVJFTEVTUzoKIAkJeGhjaV9kYmcoeGhjaSwgIkZJWE1FIHhIQ0kgZG9lc24ndCBzdXBwb3J0IHdpcmVsZXNzIHNwZWVkc1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCQlicmVhazsKQEAgLTQ3MSw3ICs0OTgsNyBAQAogCWNhc2UgVVNCX1NQRUVEX0xPVzoKIAkJZXAwX2N0eC0+ZXBfaW5mbzIgfD0gTUFYX1BBQ0tFVCg4KTsKIAkJYnJlYWs7Ci0JY2FzZSBVU0JfU1BFRURfVkFSSUFCTEU6CisJY2FzZSBVU0JfU1BFRURfV0lSRUxFU1M6CiAJCXhoY2lfZGJnKHhoY2ksICJGSVhNRSB4SENJIGRvZXNuJ3Qgc3VwcG9ydCB3aXJlbGVzcyBzcGVlZHNcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CkBAIC04MTksNyArODQ2LDggQEAKIH0KIAogc3RydWN0IHhoY2lfY29tbWFuZCAqeGhjaV9hbGxvY19jb21tYW5kKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwKLQkJYm9vbCBhbGxvY2F0ZV9jb21wbGV0aW9uLCBnZnBfdCBtZW1fZmxhZ3MpCisJCWJvb2wgYWxsb2NhdGVfaW5fY3R4LCBib29sIGFsbG9jYXRlX2NvbXBsZXRpb24sCisJCWdmcF90IG1lbV9mbGFncykKIHsKIAlzdHJ1Y3QgeGhjaV9jb21tYW5kICpjb21tYW5kOwogCkBAIC04MjcsMTEgKzg1NSwxNCBAQAogCWlmICghY29tbWFuZCkKIAkJcmV0dXJuIE5VTEw7CiAKLQljb21tYW5kLT5pbl9jdHggPQotCQl4aGNpX2FsbG9jX2NvbnRhaW5lcl9jdHgoeGhjaSwgWEhDSV9DVFhfVFlQRV9JTlBVVCwgbWVtX2ZsYWdzKTsKLQlpZiAoIWNvbW1hbmQtPmluX2N0eCkgewotCQlrZnJlZShjb21tYW5kKTsKLQkJcmV0dXJuIE5VTEw7CisJaWYgKGFsbG9jYXRlX2luX2N0eCkgeworCQljb21tYW5kLT5pbl9jdHggPQorCQkJeGhjaV9hbGxvY19jb250YWluZXJfY3R4KHhoY2ksIFhIQ0lfQ1RYX1RZUEVfSU5QVVQsCisJCQkJCW1lbV9mbGFncyk7CisJCWlmICghY29tbWFuZC0+aW5fY3R4KSB7CisJCQlrZnJlZShjb21tYW5kKTsKKwkJCXJldHVybiBOVUxMOworCQl9CiAJfQogCiAJaWYgKGFsbG9jYXRlX2NvbXBsZXRpb24pIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1wY2kuYwppbmRleCBlMDk3MDA4Li40MTdkMzdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC94aGNpLXBjaS5jCkBAIC0xMzksNiArMTM5LDcgQEAKIAkucmVzZXRfYmFuZHdpZHRoID0JeGhjaV9yZXNldF9iYW5kd2lkdGgsCiAJLmFkZHJlc3NfZGV2aWNlID0JeGhjaV9hZGRyZXNzX2RldmljZSwKIAkudXBkYXRlX2h1Yl9kZXZpY2UgPQl4aGNpX3VwZGF0ZV9odWJfZGV2aWNlLAorCS5yZXNldF9kZXZpY2UgPQkJeGhjaV9yZXNldF9kZXZpY2UsCiAKIAkvKgogCSAqIHNjaGVkdWxpbmcgc3VwcG9ydApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QveGhjaS1yaW5nLmMKaW5kZXggZWU3YmM3ZS4uNmJhODQxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC94aGNpLXJpbmcuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2ktcmluZy5jCkBAIC05NTMsNiArOTUzLDE3IEBACiAJY2FzZSBUUkJfVFlQRShUUkJfUkVTRVRfRVApOgogCQloYW5kbGVfcmVzZXRfZXBfY29tcGxldGlvbih4aGNpLCBldmVudCwgeGhjaS0+Y21kX3JpbmctPmRlcXVldWUpOwogCQlicmVhazsKKwljYXNlIFRSQl9UWVBFKFRSQl9SRVNFVF9ERVYpOgorCQl4aGNpX2RiZyh4aGNpLCAiQ29tcGxldGVkIHJlc2V0IGRldmljZSBjb21tYW5kLlxuIik7CisJCXNsb3RfaWQgPSBUUkJfVE9fU0xPVF9JRCgKKwkJCQl4aGNpLT5jbWRfcmluZy0+ZGVxdWV1ZS0+Z2VuZXJpYy5maWVsZFszXSk7CisJCXZpcnRfZGV2ID0geGhjaS0+ZGV2c1tzbG90X2lkXTsKKwkJaWYgKHZpcnRfZGV2KQorCQkJaGFuZGxlX2NtZF9pbl9jbWRfd2FpdF9saXN0KHhoY2ksIHZpcnRfZGV2LCBldmVudCk7CisJCWVsc2UKKwkJCXhoY2lfd2Fybih4aGNpLCAiUmVzZXQgZGV2aWNlIGNvbW1hbmQgY29tcGxldGlvbiAiCisJCQkJCSJmb3IgZGlzYWJsZWQgc2xvdCAldVxuIiwgc2xvdF9pZCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIFNraXAgb3ZlciB1bmtub3duIGNvbW1hbmRzIG9uIHRoZSBldmVudCByaW5nICovCiAJCXhoY2ktPmVycm9yX2JpdG1hc2sgfD0gMSA8PCA2OwpAQCAtMTA4MCw2ICsxMDkxLDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCB4aGNpX2lzX3ZlbmRvcl9pbmZvX2NvZGUoc3RydWN0IHhoY2lfaGNkICp4aGNpLCB1bnNpZ25lZCBpbnQgdHJiX2NvbXBfY29kZSkKK3sKKwlpZiAodHJiX2NvbXBfY29kZSA+PSAyMjQgJiYgdHJiX2NvbXBfY29kZSA8PSAyNTUpIHsKKwkJLyogVmVuZG9yIGRlZmluZWQgImluZm9ybWF0aW9uYWwiIGNvbXBsZXRpb24gY29kZSwKKwkJICogdHJlYXQgYXMgbm90LWFuLWVycm9yLgorCQkgKi8KKwkJeGhjaV9kYmcoeGhjaSwgIlZlbmRvciBkZWZpbmVkIGluZm8gY29tcGxldGlvbiBjb2RlICV1XG4iLAorCQkJCXRyYl9jb21wX2NvZGUpOworCQl4aGNpX2RiZyh4aGNpLCAiVHJlYXRpbmcgY29kZSBhcyBzdWNjZXNzLlxuIik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIElmIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBlcnJvciBjb25kaXRpb24sIGl0IG1lYW5zIGl0IGdvdCBhIFRyYW5zZmVyCiAgKiBldmVudCB3aXRoIGEgY29ycnVwdGVkIFNsb3QgSUQsIEVuZHBvaW50IElELCBvciBUUkIgRE1BIGFkZHJlc3MuCkBAIC0xMTk2LDEzICsxMjIxLDcgQEAKIAkJc3RhdHVzID0gLUVOT1NSOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlpZiAodHJiX2NvbXBfY29kZSA+PSAyMjQgJiYgdHJiX2NvbXBfY29kZSA8PSAyNTUpIHsKLQkJCS8qIFZlbmRvciBkZWZpbmVkICJpbmZvcm1hdGlvbmFsIiBjb21wbGV0aW9uIGNvZGUsCi0JCQkgKiB0cmVhdCBhcyBub3QtYW4tZXJyb3IuCi0JCQkgKi8KLQkJCXhoY2lfZGJnKHhoY2ksICJWZW5kb3IgZGVmaW5lZCBpbmZvIGNvbXBsZXRpb24gY29kZSAldVxuIiwKLQkJCQkJdHJiX2NvbXBfY29kZSk7Ci0JCQl4aGNpX2RiZyh4aGNpLCAiVHJlYXRpbmcgY29kZSBhcyBzdWNjZXNzLlxuIik7CisJCWlmICh4aGNpX2lzX3ZlbmRvcl9pbmZvX2NvZGUoeGhjaSwgdHJiX2NvbXBfY29kZSkpIHsKIAkJCXN0YXR1cyA9IDA7CiAJCQlicmVhazsKIAkJfQpAQCAtMjE4MSw2ICsyMjAwLDE0IEBACiAJCQlmYWxzZSk7CiB9CiAKKy8qIFF1ZXVlIGEgcmVzZXQgZGV2aWNlIGNvbW1hbmQgVFJCICovCitpbnQgeGhjaV9xdWV1ZV9yZXNldF9kZXZpY2Uoc3RydWN0IHhoY2lfaGNkICp4aGNpLCB1MzIgc2xvdF9pZCkKK3sKKwlyZXR1cm4gcXVldWVfY29tbWFuZCh4aGNpLCAwLCAwLCAwLAorCQkJVFJCX1RZUEUoVFJCX1JFU0VUX0RFVikgfCBTTE9UX0lEX0ZPUl9UUkIoc2xvdF9pZCksCisJCQlmYWxzZSk7Cit9CisKIC8qIFF1ZXVlIGEgY29uZmlndXJlIGVuZHBvaW50IGNvbW1hbmQgVFJCICovCiBpbnQgeGhjaV9xdWV1ZV9jb25maWd1cmVfZW5kcG9pbnQoc3RydWN0IHhoY2lfaGNkICp4aGNpLCBkbWFfYWRkcl90IGluX2N0eF9wdHIsCiAJCXUzMiBzbG90X2lkLCBib29sIGNvbW1hbmRfbXVzdF9zdWNjZWVkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC94aGNpLmggYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAppbmRleCA4Nzc4MTM1Li5lNWViMDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3hoY2kuaApAQCAtMTIxMCw2ICsxMjEwLDggQEAKIHZvaWQgeGhjaV9kYmdfY21kX3B0cnMoc3RydWN0IHhoY2lfaGNkICp4aGNpKTsKIHZvaWQgeGhjaV9kYmdfcmluZ19wdHJzKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgc3RydWN0IHhoY2lfcmluZyAqcmluZyk7CiB2b2lkIHhoY2lfZGJnX2N0eChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKmN0eCwgdW5zaWduZWQgaW50IGxhc3RfZXApOworY2hhciAqeGhjaV9nZXRfc2xvdF9zdGF0ZShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCisJCXN0cnVjdCB4aGNpX2NvbnRhaW5lcl9jdHggKmN0eCk7CiAKIC8qIHhIQ0kgbWVtb3J5IG1hbmFnZW1lbnQgKi8KIHZvaWQgeGhjaV9tZW1fY2xlYW51cChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2kpOwpAQCAtMTIzMyw4ICsxMjM1LDEyIEBACiAJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwLAogCQlnZnBfdCBtZW1fZmxhZ3MpOwogdm9pZCB4aGNpX3JpbmdfZnJlZShzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIHN0cnVjdCB4aGNpX3JpbmcgKnJpbmcpOwordm9pZCB4aGNpX2ZyZWVfb3JfY2FjaGVfZW5kcG9pbnRfcmluZyhzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCisJCXN0cnVjdCB4aGNpX3ZpcnRfZGV2aWNlICp2aXJ0X2RldiwKKwkJdW5zaWduZWQgaW50IGVwX2luZGV4KTsKIHN0cnVjdCB4aGNpX2NvbW1hbmQgKnhoY2lfYWxsb2NfY29tbWFuZChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksCi0JCWJvb2wgYWxsb2NhdGVfY29tcGxldGlvbiwgZ2ZwX3QgbWVtX2ZsYWdzKTsKKwkJYm9vbCBhbGxvY2F0ZV9pbl9jdHgsIGJvb2wgYWxsb2NhdGVfY29tcGxldGlvbiwKKwkJZ2ZwX3QgbWVtX2ZsYWdzKTsKIHZvaWQgeGhjaV9mcmVlX2NvbW1hbmQoc3RydWN0IHhoY2lfaGNkICp4aGNpLAogCQlzdHJ1Y3QgeGhjaV9jb21tYW5kICpjb21tYW5kKTsKIApAQCAtMTI2NCw2ICsxMjcwLDcgQEAKIGludCB4aGNpX2FkZF9lbmRwb2ludChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCk7CiBpbnQgeGhjaV9kcm9wX2VuZHBvaW50KHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKTsKIHZvaWQgeGhjaV9lbmRwb2ludF9yZXNldChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKTsKK2ludCB4aGNpX3Jlc2V0X2RldmljZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CiBpbnQgeGhjaV9jaGVja19iYW5kd2lkdGgoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOwogdm9pZCB4aGNpX3Jlc2V0X2JhbmR3aWR0aChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CiAKQEAgLTEyNzIsNiArMTI3OSw3IEBACiBzdHJ1Y3QgeGhjaV9zZWdtZW50ICp0cmJfaW5fdGQoc3RydWN0IHhoY2lfc2VnbWVudCAqc3RhcnRfc2VnLAogCQl1bmlvbiB4aGNpX3RyYiAqc3RhcnRfdHJiLCB1bmlvbiB4aGNpX3RyYiAqZW5kX3RyYiwKIAkJZG1hX2FkZHJfdCBzdXNwZWN0X2RtYSk7CitpbnQgeGhjaV9pc192ZW5kb3JfaW5mb19jb2RlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgdW5zaWduZWQgaW50IHRyYl9jb21wX2NvZGUpOwogdm9pZCB4aGNpX3JpbmdfY21kX2RiKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSk7CiB2b2lkICp4aGNpX3NldHVwX29uZV9ub29wKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSk7CiB2b2lkIHhoY2lfaGFuZGxlX2V2ZW50KHN0cnVjdCB4aGNpX2hjZCAqeGhjaSk7CkBAIC0xMjkzLDYgKzEzMDEsNyBAQAogCQl1MzIgc2xvdF9pZCk7CiBpbnQgeGhjaV9xdWV1ZV9yZXNldF9lcChzdHJ1Y3QgeGhjaV9oY2QgKnhoY2ksIGludCBzbG90X2lkLAogCQl1bnNpZ25lZCBpbnQgZXBfaW5kZXgpOworaW50IHhoY2lfcXVldWVfcmVzZXRfZGV2aWNlKHN0cnVjdCB4aGNpX2hjZCAqeGhjaSwgdTMyIHNsb3RfaWQpOwogdm9pZCB4aGNpX2ZpbmRfbmV3X2RlcXVldWVfc3RhdGUoc3RydWN0IHhoY2lfaGNkICp4aGNpLAogCQl1bnNpZ25lZCBpbnQgc2xvdF9pZCwgdW5zaWduZWQgaW50IGVwX2luZGV4LAogCQlzdHJ1Y3QgeGhjaV90ZCAqY3VyX3RkLCBzdHJ1Y3QgeGhjaV9kZXF1ZXVlX3N0YXRlICpzdGF0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9tZGM4MDAuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCmluZGV4IGVjYTM1NWQuLmUxOTJlOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jCkBAIC05NjcsNyArOTY3LDcgQEAKIAogCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtZGM4MDBfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgbWRjODAwX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKE1EQzgwMF9WRU5ET1JfSUQsIE1EQzgwMF9QUk9EVUNUX0lEKSB9LAogCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYyBiL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmMKaW5kZXggNDU5YTcyOC4uM2E2YmNkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYworKysgYi9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jCkBAIC0xNTUsNyArMTU1LDcgQEAKIAkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOwogc3RhdGljIHZvaWQgbXRzX3VzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG10c191c2JfaWRzIFtdOworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIG10c191c2JfaWRzW107CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtdHNfdXNiX2RyaXZlciA9IHsKIAkubmFtZSA9CQkibWljcm90ZWtYNiIsCkBAIC02NTYsNyArNjU2LDcgQEAKIC8qIFRoZSBlbnRyaWVzIG9mIG1pY3JvdGVrX3RhYmxlIG11c3QgY29ycmVzcG9uZCwgbGluZS1ieS1saW5lIHRvCiAgICB0aGUgZW50cmllcyBvZiBtdHNfc3VwcG9ydGVkX3Byb2R1Y3RzW10uICovCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtdHNfdXNiX2lkcyBbXSA9CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgbXRzX3VzYl9pZHNbXSA9CiB7CiAJeyBVU0JfREVWSUNFKDB4NGNlLCAweDAzMDApIH0sCiAJeyBVU0JfREVWSUNFKDB4NWRhLCAweDAwOTQpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcgYi9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcKaW5kZXggYWJlM2FhNi4uNTU2NjBlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZwpAQCAtODcsMTcgKzg3LDYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHVzYmxjZC4KIAotY29uZmlnIFVTQl9CRVJSWV9DSEFSR0UKLQl0cmlzdGF0ZSAiVVNCIEJsYWNrQmVycnkgcmVjaGFyZ2Ugc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQgotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIEJsYWNrQmVycnkgZGV2aWNlIHRvIHlvdXIKLQkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQgYW5kIGhhdmUgaXQgYXV0b21hdGljYWxseSBzd2l0Y2ggdG8gInJlY2hhcmdlIgotCSAgbW9kZS4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYmVycnlfY2hhcmdlLgotCiBjb25maWcgVVNCX0xFRAogCXRyaXN0YXRlICJVU0IgTEVEIGRyaXZlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCCkBAIC0yNDIsMTcgKzIzMSwzIEBACiAJICBkcml2ZXIgYmVmb3JlaGFuZC4gVG9vbHMgZm9yIGRvaW5nIHNvIGFyZSBhdmFpbGFibGUgYXQKIAkgIGh0dHA6Ly9iZXJzYWNlMDMuZnJlZS5mcgogCi1jb25maWcgVVNCX1ZTVAotCXRyaXN0YXRlICJVU0IgVlNUIGRyaXZlciIKLQlkZXBlbmRzIG9uIFVTQgotCWhlbHAKLQkgIFRoaXMgZHJpdmVyIGlzIGludGVuZGVkIGZvciBWZXJuaWVyIFNvZnR3YXJlIFRlY2hub2xvZ2llcwotCSAgYnVsayB1c2IgZGV2aWNlcyBzdWNoIGFzIHRoZWlyIE9jZWFuLU9wdGljcyBzcGVjdHJvbWV0ZXJzIG9yCi0JICBMYWJxdWVzdC4KLQkgIEl0IGlzIGEgYnVsayBjaGFubmVsIGRyaXZlciB3aXRoIGNvbmZpZ3VyYWJsZSByZWFkIGFuZCB3cml0ZQotCSAgdGltZW91dHMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZzdHVzYi4KLQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlIGIvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZQppbmRleCAwODI2YWFiLi43MTc3MDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUKQEAgLTUsNyArNSw2IEBACiAKIG9iai0kKENPTkZJR19VU0JfQURVVFVYKQkrPSBhZHV0dXgubwogb2JqLSQoQ09ORklHX1VTQl9BUFBMRURJU1BMQVkpCSs9IGFwcGxlZGlzcGxheS5vCi1vYmotJChDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSkJKz0gYmVycnlfY2hhcmdlLm8KIG9iai0kKENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMpKz0gY3lwcmVzc19jeTdjNjMubwogb2JqLSQoQ09ORklHX1VTQl9DWVRIRVJNKQkrPSBjeXRoZXJtLm8KIG9iai0kKENPTkZJR19VU0JfRU1JMjYpCQkrPSBlbWkyNi5vCkBAIC0yMyw3ICsyMiw2IEBACiBvYmotJChDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SKQkrPSB0cmFuY2V2aWJyYXRvci5vCiBvYmotJChDT05GSUdfVVNCX1VTUzcyMCkJKz0gdXNzNzIwLm8KIG9iai0kKENPTkZJR19VU0JfU0VWU0VHKQkrPSB1c2JzZXZzZWcubwotb2JqLSQoQ09ORklHX1VTQl9WU1QpCQkrPSB2c3R1c2IubwogCiBvYmotJChDT05GSUdfVVNCX1NJU1VTQlZHQSkJKz0gc2lzdXNidmdhLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2FkdXR1eC5jIGIvZHJpdmVycy91c2IvbWlzYy9hZHV0dXguYwppbmRleCAyMDM1MjY1Li5kMjQwZGUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2FkdXR1eC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvYWR1dHV4LmMKQEAgLTM4LDcgKzM4LDcgQEAKICNkZWZpbmUgZGJnKGx2bCwgZm9ybWF0LCBhcmcuLi4pIAkJCQkJXAogZG8geyAJCQkJCQkJCQlcCiAJaWYgKGRlYnVnID49IGx2bCkJCQkJCQlcCi0JCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fICIgOiAiIGZvcm1hdCAiIFxuIiwgIyMgYXJnKTsJXAorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm9ybWF0ICJcbiIsIF9fRklMRV9fLCAjI2FyZyk7CVwKIH0gd2hpbGUgKDApCiAKIApAQCAtNTYsNyArNTYsNyBAQAogI2RlZmluZSBBRFVfUFJPRFVDVF9JRCAweDAwNjQKIAogLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoQURVX1ZFTkRPUl9JRCwgQURVX1BST0RVQ1RfSUQpIH0sCQkvKiBBRFUxMDAgKi8KIAl7IFVTQl9ERVZJQ0UoQURVX1ZFTkRPUl9JRCwgQURVX1BST0RVQ1RfSUQrMjApIH0sIAkvKiBBRFUxMjAgKi8KIAl7IFVTQl9ERVZJQ0UoQURVX1ZFTkRPUl9JRCwgQURVX1BST0RVQ1RfSUQrMzApIH0sIAkvKiBBRFUxMzAgKi8KQEAgLTEzMiw4ICsxMzIsOCBAQAogCWlmIChkZWJ1ZyA8IGxldmVsKQogCQlyZXR1cm47CiAKLQlwcmludGsoS0VSTl9ERUJVRyBfX0ZJTEVfXyI6ICVzIC0gbGVuZ3RoID0gJWQsIGRhdGEgPSAiLAotCSAgICAgICBmdW5jdGlvbiwgc2l6ZSk7CisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlcyAtIGxlbmd0aCA9ICVkLCBkYXRhID0gIiwKKwkgICAgICAgX19GSUxFX18sIGZ1bmN0aW9uLCBzaXplKTsKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgKytpKQogCQlwcmludGsoIiUuMnggIiwgZGF0YVtpXSk7CiAJcHJpbnRrKCJcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYyBiL2RyaXZlcnMvdXNiL21pc2MvYXBwbGVkaXNwbGF5LmMKaW5kZXggMWViOWU0MS4uNGQyOTUyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9hcHBsZWRpc3BsYXkuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2FwcGxlZGlzcGxheS5jCkBAIC01Nyw3ICs1Nyw3IEBACiAJLmJJbnRlcmZhY2VQcm90b2NvbCA9IDB4MDAKIAogLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGFwcGxlZGlzcGxheV90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBhcHBsZWRpc3BsYXlfdGFibGVbXSA9IHsKIAl7IEFQUExFRElTUExBWV9ERVZJQ0UoMHg5MjE4KSB9LAogCXsgQVBQTEVESVNQTEFZX0RFVklDRSgweDkyMTkpIH0sCiAJeyBBUFBMRURJU1BMQVlfREVWSUNFKDB4OTIxYykgfSwKQEAgLTE3OSw3ICsxNzksNyBAQAogCQlyZXR1cm4gcGRhdGEtPm1zZ2RhdGFbMV07CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhcHBsZWRpc3BsYXlfYmxfZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBhcHBsZWRpc3BsYXlfYmxfZGF0YSA9IHsKIAkuZ2V0X2JyaWdodG5lc3MJPSBhcHBsZWRpc3BsYXlfYmxfZ2V0X2JyaWdodG5lc3MsCiAJLnVwZGF0ZV9zdGF0dXMJPSBhcHBsZWRpc3BsYXlfYmxfdXBkYXRlX3N0YXR1cywKIH07CkBAIC0yODMsNiArMjgzLDcgQEAKIAkJCQkJCSZhcHBsZWRpc3BsYXlfYmxfZGF0YSk7CiAJaWYgKElTX0VSUihwZGF0YS0+YmQpKSB7CiAJCWRldl9lcnIoJmlmYWNlLT5kZXYsICJCYWNrbGlnaHQgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJCXJldHZhbCA9IFBUUl9FUlIocGRhdGEtPmJkKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvYmVycnlfY2hhcmdlLmMgYi9kcml2ZXJzL3VzYi9taXNjL2JlcnJ5X2NoYXJnZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMDVhODViLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdXNiL21pc2MvYmVycnlfY2hhcmdlLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotLyoKLSAqIFVTQiBCbGFja0JlcnJ5IGNoYXJnaW5nIG1vZHVsZQotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgotICoKLSAqIEluZm9ybWF0aW9uIG9uIGhvdyB0byBzd2l0Y2ggY29uZmlncyB3YXMgdGFrZW4gYnkgdGhlIGJjaGFyZ2UuY2MgZmlsZQotICogY3JlYXRlZCBieSB0aGUgYmFycnkuc2YubmV0IHByb2plY3QuCi0gKgotICogYmNoYXJnZS5jYyBoYXMgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQ6Ci0gKiAJQ29weXJpZ2h0IChDKSAyMDA2LCBOZXQgRGlyZWN0IEluYy4gKGh0dHA6Ly93d3cubmV0ZGlyZWN0LmNhLykKLSAqIGFuZCBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMdjIuCi0gKgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotCi0jZGVmaW5lIFJJTV9WRU5ET1IJCTB4MGZjYQotI2RlZmluZSBCTEFDS0JFUlJZCQkweDAwMDEKLSNkZWZpbmUgQkxBQ0tCRVJSWV9QRUFSTF9EVUFMICAgMHgwMDA0Ci0jZGVmaW5lIEJMQUNLQkVSUllfUEVBUkwgICAgICAgIDB4MDAwNgotCi1zdGF0aWMgaW50IGRlYnVnOwotc3RhdGljIGludCBwZWFybF9kdWFsX21vZGUgPSAxOwotCi0jaWZkZWYgZGJnCi0jdW5kZWYgZGJnCi0jZW5kaWYKLSNkZWZpbmUgZGJnKGRldiwgZm9ybWF0LCBhcmcuLi4pCQkJCVwKLQlpZiAoZGVidWcpCQkJCQkJXAotCQlkZXZfcHJpbnRrKEtFUk5fREVCVUcgLCBkZXYgLCBmb3JtYXQgLCAjIyBhcmcpCi0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKLQl7IFVTQl9ERVZJQ0UoUklNX1ZFTkRPUiwgQkxBQ0tCRVJSWSkgfSwKLQl7IFVTQl9ERVZJQ0UoUklNX1ZFTkRPUiwgQkxBQ0tCRVJSWV9QRUFSTCkgfSwKLQl7IFVTQl9ERVZJQ0UoUklNX1ZFTkRPUiwgQkxBQ0tCRVJSWV9QRUFSTF9EVUFMKSB9LAotCXsgfSwJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCi19OwotTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKLQotc3RhdGljIGludCBtYWdpY19jaGFyZ2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCi17Ci0JY2hhciAqZHVtbXlfYnVmZmVyID0ga3phbGxvYygyLCBHRlBfS0VSTkVMKTsKLQlpbnQgcmV0dmFsOwotCi0JaWYgKCFkdW1teV9idWZmZXIpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogc2VuZCB0d28gbWFnaWMgY29tbWFuZHMgYW5kIHRoZW4gc2V0IHRoZSBjb25maWd1cmF0aW9uLiAgVGhlIGRldmljZQotCSAqIHdpbGwgdGhlbiByZXNldCBpdHNlbGYgd2l0aCB0aGUgbmV3IHBvd2VyIHVzYWdlIGFuZCBzaG91bGQgc3RhcnQKLQkgKiBjaGFyZ2luZy4gKi8KLQotCS8qIE5vdGUsIHdpdGggdGVzdGluZywgaXQgb25seSBzZWVtcyB0aGF0IHRoZSBmaXJzdCBtZXNzYWdlIGlzIHJlYWxseQotCSAqIG5lZWRlZCAoYXQgbGVhc3QgZm9yIHRoZSA4NzAwYyksIGJ1dCB0byBiZSBzYWZlLCB3ZSBlbXVsYXRlIHdoYXQKLQkgKiBvdGhlciBvcGVyYXRpbmcgc3lzdGVtcyBzZWVtIHRvIGJlIHNlbmRpbmcgdG8gdGhlaXIgZGV2aWNlLiAgV2UKLQkgKiByZWFsbHkgbmVlZCB0byBnZXQgc29tZSBzcGVjcyBmb3IgdGhpcyBkZXZpY2UgdG8gYmUgc3VyZSBhYm91dCB3aGF0Ci0JICogaXMgZ29pbmcgb24gaGVyZS4KLQkgKi8KLQlkYmcoJnVkZXYtPmRldiwgIlNlbmRpbmcgZmlyc3QgbWFnaWMgY29tbWFuZFxuIik7Ci0JcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKLQkJCQkgMHhhNSwgMHhjMCwgMCwgMSwgZHVtbXlfYnVmZmVyLCAyLCAxMDApOwotCWlmIChyZXR2YWwgIT0gMikgewotCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJGaXJzdCBtYWdpYyBjb21tYW5kIGZhaWxlZDogJWQuXG4iLAotCQkJcmV0dmFsKTsKLQkJZ290byBleGl0OwotCX0KLQotCWRiZygmdWRldi0+ZGV2LCAiU2VuZGluZyBzZWNvbmQgbWFnaWMgY29tbWFuZFxuIik7Ci0JcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKLQkJCQkgMHhhMiwgMHg0MCwgMCwgMSwgZHVtbXlfYnVmZmVyLCAwLCAxMDApOwotCWlmIChyZXR2YWwgIT0gMCkgewotCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJTZWNvbmQgbWFnaWMgY29tbWFuZCBmYWlsZWQ6ICVkLlxuIiwKLQkJCXJldHZhbCk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlkYmcoJnVkZXYtPmRldiwgIkNhbGxpbmcgc2V0X2NvbmZpZ3VyYXRpb25cbiIpOwotCXJldHZhbCA9IHVzYl9kcml2ZXJfc2V0X2NvbmZpZ3VyYXRpb24odWRldiwgMSk7Ci0JaWYgKHJldHZhbCkKLQkJZGV2X2VycigmdWRldi0+ZGV2LCAiU2V0IENvbmZpZ3VyYXRpb24gZmFpbGVkIDolZC5cbiIsIHJldHZhbCk7Ci0KLWV4aXQ6Ci0Ja2ZyZWUoZHVtbXlfYnVmZmVyKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgaW50IG1hZ2ljX2R1YWxfbW9kZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKLXsKLQljaGFyICpkdW1teV9idWZmZXIgPSBremFsbG9jKDIsIEdGUF9LRVJORUwpOwotCWludCByZXR2YWw7Ci0KLQlpZiAoIWR1bW15X2J1ZmZlcikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkvKiBzZW5kIG1hZ2ljIGNvbW1hbmQgc28gdGhhdCB0aGUgQmxhY2tiZXJyeSBQZWFybCBkZXZpY2UgZXhwb3NlcwotCSAqIHR3byBpbnRlcmZhY2VzOiBib3RoIHRoZSBVU0IgbWFzcy1zdG9yYWdlIG9uZSBhbmQgb25lIHdoaWNoIGNhbgotCSAqIGJlIHVzZWQgZm9yIGRhdGFiYXNlIGFjY2Vzcy4gKi8KLQlkYmcoJnVkZXYtPmRldiwgIlNlbmRpbmcgbWFnaWMgcGVhcmwgY29tbWFuZFxuIik7Ci0JcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKLQkJCQkgMHhhOSwgMHhjMCwgMSwgMSwgZHVtbXlfYnVmZmVyLCAyLCAxMDApOwotCWRiZygmdWRldi0+ZGV2LCAiTWFnaWMgcGVhcmwgY29tbWFuZCByZXR1cm5lZCAlZFxuIiwgcmV0dmFsKTsKLQotCWRiZygmdWRldi0+ZGV2LCAiQ2FsbGluZyBzZXRfY29uZmlndXJhdGlvblxuIik7Ci0JcmV0dmFsID0gdXNiX2RyaXZlcl9zZXRfY29uZmlndXJhdGlvbih1ZGV2LCAxKTsKLQlpZiAocmV0dmFsKQotCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJTZXQgQ29uZmlndXJhdGlvbiBmYWlsZWQgOiVkLlxuIiwgcmV0dmFsKTsKLQotCWtmcmVlKGR1bW15X2J1ZmZlcik7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGludCBiZXJyeV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0KLQlpZiAodWRldi0+YnVzX21BIDwgNTAwKSB7Ci0JCWRiZygmdWRldi0+ZGV2LCAiTm90IGVub3VnaCBwb3dlciB0byBjaGFyZ2UgYXZhaWxhYmxlXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JZGJnKCZ1ZGV2LT5kZXYsICJQb3dlciBpcyBzZXQgdG8gJWRtQVxuIiwKLQkgICAgdWRldi0+YWN0Y29uZmlnLT5kZXNjLmJNYXhQb3dlciAqIDIpOwotCi0JLyogY2hlY2sgdGhlIHBvd2VyIHVzYWdlIHNvIHdlIGRvbid0IHRyeSB0byBlbmFibGUgc29tZXRoaW5nIHRoYXQgaXMKLQkgKiBhbHJlYWR5IGVuYWJsZWQgKi8KLQlpZiAoKHVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTWF4UG93ZXIgKiAyKSA9PSA1MDApIHsKLQkJZGJnKCZ1ZGV2LT5kZXYsICJkZXZpY2UgaXMgYWxyZWFkeSBjaGFyZ2luZywgcG93ZXIgaXMgIgotCQkgICAgInNldCB0byAlZG1BXG4iLCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk1heFBvd2VyICogMik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCS8qIHR1cm4gdGhlIHBvd2VyIG9uICovCi0JbWFnaWNfY2hhcmdlKHVkZXYpOwotCi0JaWYgKChsZTE2X3RvX2NwdSh1ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gQkxBQ0tCRVJSWV9QRUFSTCkgJiYKLQkgICAgKHBlYXJsX2R1YWxfbW9kZSkpCi0JCW1hZ2ljX2R1YWxfbW9kZSh1ZGV2KTsKLQotCS8qIHdlIGRvbid0IHJlYWxseSB3YW50IHRvIGJpbmQgdG8gdGhlIGRldmljZSwgdXNlcnNwYWNlIHByb2dyYW1zIGNhbgotCSAqIGhhbmRsZSB0aGUgc3luY2luZyBqdXN0IGZpbmUsIHNvIGdldCBvdXR0YSBoZXJlLiAqLwotCXJldHVybiAtRU5PREVWOwotfQotCi1zdGF0aWMgdm9pZCBiZXJyeV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQotewotfQotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYmVycnlfZHJpdmVyID0gewotCS5uYW1lID0JCSJiZXJyeV9jaGFyZ2UiLAotCS5wcm9iZSA9CWJlcnJ5X3Byb2JlLAotCS5kaXNjb25uZWN0ID0JYmVycnlfZGlzY29ubmVjdCwKLQkuaWRfdGFibGUgPQlpZF90YWJsZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGJlcnJ5X2luaXQodm9pZCkKLXsKLQlyZXR1cm4gdXNiX3JlZ2lzdGVyKCZiZXJyeV9kcml2ZXIpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYmVycnlfZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZiZXJyeV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdChiZXJyeV9pbml0KTsKLW1vZHVsZV9leGl0KGJlcnJ5X2V4aXQpOwotCi1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfQVVUSE9SKCJHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPiIpOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKLW1vZHVsZV9wYXJhbShwZWFybF9kdWFsX21vZGUsIGJvb2wsIFNfSVJVR08gfCBTX0lXVVNSKTsKLU1PRFVMRV9QQVJNX0RFU0MocGVhcmxfZHVhbF9tb2RlLCAiQ2hhbmdlIEJsYWNrYmVycnkgUGVhcmwgdG8gcnVuIGluIGR1YWwgbW9kZSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9jeXByZXNzX2N5N2M2My5jIGIvZHJpdmVycy91c2IvbWlzYy9jeXByZXNzX2N5N2M2My5jCmluZGV4IDU3MjBiZmUuLjE1NDdkOGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvY3lwcmVzc19jeTdjNjMuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2N5cHJlc3NfY3k3YzYzLmMKQEAgLTU2LDcgKzU2LDcgQEAKIAogCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgY3lwcmVzc190YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjeXByZXNzX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKENZUFJFU1NfVkVORE9SX0lELCBDWVBSRVNTX1BST0RVQ1RfSUQpIH0sCiAJeyB9CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9jeXRoZXJtLmMgYi9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYwppbmRleCA0ZmIzYzM4Li5iOWNiYmJkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9jeXRoZXJtLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9jeXRoZXJtLmMKQEAgLTI3LDcgKzI3LDcgQEAKICNkZWZpbmUgVVNCX1NLRUxfVkVORE9SX0lECTB4MDRiNAogI2RlZmluZSBVU0JfU0tFTF9QUk9EVUNUX0lECTB4MDAwMgogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVVNCX1NLRUxfVkVORE9SX0lELCBVU0JfU0tFTF9QUk9EVUNUX0lEKSB9LAogCXsgfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvZW1pMjYuYyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pMjYuYwppbmRleCA4NzlhOTgwLi5hNjUyMWM5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9lbWkyNi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZW1pMjYuYwpAQCAtMjQ1LDcgKzI0NSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKEVNSTI2X1ZFTkRPUl9JRCwgRU1JMjZfUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRU1JMjZfVkVORE9SX0lELCBFTUkyNkJfUFJPRFVDVF9JRCkgfSwKIAl7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jIGIvZHJpdmVycy91c2IvbWlzYy9lbWk2Mi5jCmluZGV4IDU5ODYwYjMuLmZjMTVhZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvZW1pNjIuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2VtaTYyLmMKQEAgLTI1OSw3ICsyNTksNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gX19kZXZpbml0Y29uc3QgPSB7CiAJeyBVU0JfREVWSUNFKEVNSTYyX1ZFTkRPUl9JRCwgRU1JNjJfUFJPRFVDVF9JRCkgfSwKIAl7IH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMgYi9kcml2ZXJzL3VzYi9taXNjL2Z0ZGktZWxhbi5jCmluZGV4IDlkMDY3NWUuLjFlZGI2ZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYwpAQCAtODYsNyArODYsNyBAQAogI2RlZmluZSBVU0JfRlRESV9FTEFOX1ZFTkRPUl9JRCAweDA0MDMKICNkZWZpbmUgVVNCX0ZURElfRUxBTl9QUk9EVUNUX0lEIDB4ZDZlYQogLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZnRkaV9lbGFuX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZnRkaV9lbGFuX3RhYmxlW10gPSB7CiAgICAgICAgIHtVU0JfREVWSUNFKFVTQl9GVERJX0VMQU5fVkVORE9SX0lELCBVU0JfRlRESV9FTEFOX1BST0RVQ1RfSUQpfSwKICAgICAgICAgeyAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLyB9CiB9OwpAQCAtNjIzLDkgKzYyMywxMiBAQAogKi8KIHN0YXRpYyBpbnQgZnRkaV9lbGFuX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0gICAgICAgIGludCBzdWJtaW5vciA9IGltaW5vcihpbm9kZSk7Ci0gICAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UoJmZ0ZGlfZWxhbl9kcml2ZXIsCi0gICAgICAgICAgICAgICAgc3VibWlub3IpOworCWludCBzdWJtaW5vcjsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCisgICAgICAgIHN1Ym1pbm9yID0gaW1pbm9yKGlub2RlKTsKKyAgICAgICAgaW50ZXJmYWNlID0gdXNiX2ZpbmRfaW50ZXJmYWNlKCZmdGRpX2VsYW5fZHJpdmVyLCBzdWJtaW5vcik7CisKICAgICAgICAgaWYgKCFpbnRlcmZhY2UpIHsKICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImNhbid0IGZpbmQgZGV2aWNlIGZvciBtaW5vciAlZFxuIiwgc3VibWlub3IpOwogICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMgYi9kcml2ZXJzL3VzYi9taXNjL2lkbW91c2UuYwppbmRleCAxMzM3YTljLi5hNTRjM2NiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2lkbW91c2UuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2lkbW91c2UuYwpAQCAtNDgsNyArNDgsNyBAQAogI2RlZmluZSBJRF9DSEVSUlkgIDB4MDAxMAogCiAvKiBkZXZpY2UgSUQgdGFibGUgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZG1vdXNlX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRtb3VzZV90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKElEX1NJRU1FTlMsIElEX0lETU9VU0UpfSwgLyogU2llbWVucyBJRCBNb3VzZSAoUHJvZmVzc2lvbmFsKSAqLwogCXtVU0JfREVWSUNFKElEX1NJRU1FTlMsIElEX0NIRVJSWSApfSwgLyogQ2hlcnJ5IEZpbmdlclRJUCBJRCBCb2FyZCAgICAgICAqLwogCXt9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGVybWluYXRpbmcgbnVsbCBlbnRyeSAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9pb3dhcnJpb3IuYyBiL2RyaXZlcnMvdXNiL21pc2MvaW93YXJyaW9yLmMKaW5kZXggZTc1YmI4Ny4uZDNjODUyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9pb3dhcnJpb3IuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2lvd2Fycmlvci5jCkBAIC0xMzksNyArMTM5LDcgQEAKIC8qIGRyaXZlciByZWdpc3RyYXRpb24gKi8KIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpb3dhcnJpb3JfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaW93YXJyaW9yX2lkc1tdID0gewogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ09ERU1FUkNTLCBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1c0MCl9LAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ09ERU1FUkNTLCBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1cyNCl9LAogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfQ09ERU1FUkNTLCBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1dQVjEpfSwKQEAgLTYwMiwxMCArNjAyLDEyIEBACiAKIAlkYmcoIiVzIiwgX19mdW5jX18pOwogCisJbG9ja19rZXJuZWwoKTsKIAlzdWJtaW5vciA9IGltaW5vcihpbm9kZSk7CiAKIAlpbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UoJmlvd2Fycmlvcl9kcml2ZXIsIHN1Ym1pbm9yKTsKIAlpZiAoIWludGVyZmFjZSkgeworCQl1bmxvY2tfa2VybmVsKCk7CiAJCWVycigiJXMgLSBlcnJvciwgY2FuJ3QgZmluZCBkZXZpY2UgZm9yIG1pbm9yICVkIiwgX19mdW5jX18sCiAJCSAgICBzdWJtaW5vcik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtNjE1LDYgKzYxNyw3IEBACiAJZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOwogCWlmICghZGV2KSB7CiAJCW11dGV4X3VubG9jaygmaW93YXJyaW9yX29wZW5fZGlzY19sb2NrKTsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKQEAgLTY0MSw2ICs2NDQsNyBAQAogCiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKKwl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9pc2lnaHRfZmlybXdhcmUuYyBiL2RyaXZlcnMvdXNiL21pc2MvaXNpZ2h0X2Zpcm13YXJlLmMKaW5kZXggYjg5N2Y2NS4uMDZlOTkwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9pc2lnaHRfZmlybXdhcmUuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2lzaWdodF9maXJtd2FyZS5jCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7VVNCX0RFVklDRSgweDA1YWMsIDB4ODMwMCl9LAogCXt9LAogfTsKQEAgLTExMiw2ICsxMTIsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKK01PRFVMRV9GSVJNV0FSRSgiaXNpZ2h0LmZ3Iik7CisKIHN0YXRpYyB2b2lkIGlzaWdodF9maXJtd2FyZV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQogewogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9sZHVzYi5jIGIvZHJpdmVycy91c2IvbWlzYy9sZHVzYi5jCmluZGV4IDkwZjEzMDEuLmRkNDFkODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvbGR1c2IuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2xkdXNiLmMKQEAgLTY5LDcgKzY5LDcgQEAKICNlbmRpZgogCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgbGRfdXNiX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGxkX3VzYl90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX0NBU1NZKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX1BPQ0tFVENBU1NZKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0xELCBVU0JfREVWSUNFX0lEX0xEX01PQklMRUNBU1NZKSB9LApAQCAtNzk4LDcgKzc5OCw3IEBACiAJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLwogCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmbGRfdXNiX2RyaXZlcik7CiAJaWYgKHJldHZhbCkKLQkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkIGZvciB0aGUgIl9fRklMRV9fIiBkcml2ZXIuIEVycm9yIG51bWJlciAlZFxuIiwgcmV0dmFsKTsKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkIGZvciB0aGUgJXMgZHJpdmVyLiBFcnJvciBudW1iZXIgJWRcbiIsIF9fRklMRV9fLCByZXR2YWwpOwogCiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMgYi9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jCmluZGV4IGZhYTZkNjIuLjg1NDdiZjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYwpAQCAtOTUsOCArOTUsMTEgQEAKIAogLyogVXNlIG91ciBvd24gZGJnIG1hY3JvICovCiAjdW5kZWYgZGJnCi0jZGVmaW5lIGRiZyhsdmwsIGZvcm1hdCwgYXJnLi4uKSBkbyB7IGlmIChkZWJ1ZyA+PSBsdmwpIHByaW50ayhLRVJOX0RFQlVHICBfX0ZJTEVfXyAiOiAiIGZvcm1hdCAiXG4iLCAjIyBhcmcpOyB9IHdoaWxlICgwKQotCisjZGVmaW5lIGRiZyhsdmwsIGZvcm1hdCwgYXJnLi4uKQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoZGVidWcgPj0gbHZsKQkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZvcm1hdCAiXG4iLCBfX0ZJTEVfXywgIyNhcmcpOwlcCit9IHdoaWxlICgwKQogCiAvKiBWZXJzaW9uIEluZm9ybWF0aW9uICovCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC45NiIKQEAgLTE5Miw3ICsxOTUsNyBAQAogCiAKIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB0b3dlcl90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB0b3dlcl90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShMRUdPX1VTQl9UT1dFUl9WRU5ET1JfSUQsIExFR09fVVNCX1RPV0VSX1BST0RVQ1RfSUQpIH0sCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKQEAgLTMwMiw3ICszMDUsNyBAQAogCWlmIChkZWJ1ZyA8IGxldmVsKQogCQlyZXR1cm47CiAKLQlwcmludGsgKEtFUk5fREVCVUcgX19GSUxFX18iOiAlcyAtIGxlbmd0aCA9ICVkLCBkYXRhID0gIiwgZnVuY3Rpb24sIHNpemUpOworCXByaW50ayAoS0VSTl9ERUJVRyAiJXM6ICVzIC0gbGVuZ3RoID0gJWQsIGRhdGEgPSAiLCBfX0ZJTEVfXywgZnVuY3Rpb24sIHNpemUpOwogCWZvciAoaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKIAkJcHJpbnRrICgiJS4yeCAiLCBkYXRhW2ldKTsKIAl9CkBAIC0xMDU1LDcgKzEwNTgsNyBAQAogCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KIAlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJnRvd2VyX2RyaXZlcik7CiAJaWYgKHJlc3VsdCA8IDApIHsKLQkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkIGZvciB0aGUgIl9fRklMRV9fIiBkcml2ZXIuIEVycm9yIG51bWJlciAlZCIsIHJlc3VsdCk7CisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZCBmb3IgdGhlICVzIGRyaXZlci4gRXJyb3IgbnVtYmVyICVkIiwgX19GSUxFX18sIHJlc3VsdCk7CiAJCXJldHZhbCA9IC0xOwogCQlnb3RvIGV4aXQ7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYyBiL2RyaXZlcnMvdXNiL21pc2MvcmlvNTAwLmMKaW5kZXggMzJkMDE5OS4uYTg1NzcxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9yaW81MDAuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3JpbzUwMC5jCkBAIC03OCwxMCArNzgsMTMgQEAKIHsKIAlzdHJ1Y3QgcmlvX3VzYl9kYXRhICpyaW8gPSAmcmlvX2luc3RhbmNlOwogCisJLyogYWdhaW5zdCBkaXNjb25uZWN0KCkgKi8KKwlsb2NrX2tlcm5lbCgpOwogCW11dGV4X2xvY2soJihyaW8tPmxvY2spKTsKIAogCWlmIChyaW8tPmlzb3BlbiB8fCAhcmlvLT5wcmVzZW50KSB7CiAJCW11dGV4X3VubG9jaygmKHJpby0+bG9jaykpOworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCXJpby0+aXNvcGVuID0gMTsKQEAgLTkxLDYgKzk0LDcgQEAKIAltdXRleF91bmxvY2soJihyaW8tPmxvY2spKTsKIAogCWRldl9pbmZvKCZyaW8tPnJpb19kZXYtPmRldiwgIlJpbyBvcGVuZWQuXG4iKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTExNSw3ICsxMTksNiBAQAogCWludCByZXRyaWVzOwogCWludCByZXR2YWw9MDsKIAotCWxvY2tfa2VybmVsKCk7CiAJbXV0ZXhfbG9jaygmKHJpby0+bG9jaykpOwogICAgICAgICAvKiBTYW5pdHkgY2hlY2sgdG8gbWFrZSBzdXJlIHJpbyBpcyBjb25uZWN0ZWQsIHBvd2VyZWQsIGV0YyAqLwogICAgICAgICBpZiAocmlvLT5wcmVzZW50ID09IDAgfHwgcmlvLT5yaW9fZGV2ID09IE5VTEwpIHsKQEAgLTI1NCw3ICsyNTcsNiBAQAogCiBlcnJfb3V0OgogCW11dGV4X3VubG9jaygmKHJpby0+bG9jaykpOwotCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC00ODksNiArNDkxLDcgQEAKIAlzdHJ1Y3QgcmlvX3VzYl9kYXRhICpyaW8gPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOworCWxvY2tfa2VybmVsKCk7CiAJaWYgKHJpbykgewogCQl1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZiwgJnVzYl9yaW9fY2xhc3MpOwogCkBAIC00OTgsNiArNTAxLDcgQEAKIAkJCS8qIGJldHRlciBsZXQgaXQgZmluaXNoIC0gdGhlIHJlbGVhc2Ugd2lsbCBkbyB3aGF0cyBuZWVkZWQgKi8KIAkJCXJpby0+cmlvX2RldiA9IE5VTEw7CiAJCQltdXRleF91bmxvY2soJihyaW8tPmxvY2spKTsKKwkJCXVubG9ja19rZXJuZWwoKTsKIAkJCXJldHVybjsKIAkJfQogCQlrZnJlZShyaW8tPmlidWYpOwpAQCAtNTA4LDkgKzUxMiwxMCBAQAogCQlyaW8tPnByZXNlbnQgPSAwOwogCQltdXRleF91bmxvY2soJihyaW8tPmxvY2spKTsKIAl9CisJdW5sb2NrX2tlcm5lbCgpOwogfQogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgcmlvX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHJpb190YWJsZVtdID0gewogCXsgVVNCX0RFVklDRSgweDA4NDEsIDEpIH0sIAkJLyogUmlvIDUwMCAqLwogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCmluZGV4IDhiMzdhNGIuLmFhZTk1YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCkBAIC0yNTAsNyArMjUwLDcgQEAKIAlzaXN1c2ItPnVyYnN0YXR1c1tpbmRleF0gfD0gU1VfVVJCX0JVU1k7CiAKIAkvKiBTdWJtaXQgVVJCICovCi0JcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOwogCiAJLyogSWYgT0ssIGFuZCBpZiB0aW1lb3V0ID4gMCwgd2FpdCBmb3IgY29tcGxldGlvbiAqLwogCWlmICgocmV0dmFsID09IDApICYmIHRpbWVvdXQpIHsKQEAgLTMwNiw3ICszMDYsNyBAQAogCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CiAKIAlzaXN1c2ItPmNvbXBsZXRlaW4gPSAwOwotCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKIAlpZiAocmV0dmFsID09IDApIHsKIAkJd2FpdF9ldmVudF90aW1lb3V0KHNpc3VzYi0+d2FpdF9xLCBzaXN1c2ItPmNvbXBsZXRlaW4sIHRpbWVvdXQpOwogCQlpZiAoIXNpc3VzYi0+Y29tcGxldGVpbikgewpAQCAtMjQxNiwyMSArMjQxNiwyOCBAQAogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CiAJaW50IHN1Ym1pbm9yID0gaW1pbm9yKGlub2RlKTsKIAotCWlmICghKGludGVyZmFjZSA9IHVzYl9maW5kX2ludGVyZmFjZSgmc2lzdXNiX2RyaXZlciwgc3VibWlub3IpKSkKKwlsb2NrX2tlcm5lbCgpOworCWlmICghKGludGVyZmFjZSA9IHVzYl9maW5kX2ludGVyZmFjZSgmc2lzdXNiX2RyaXZlciwgc3VibWlub3IpKSkgeworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PREVWOworCX0KIAotCWlmICghKHNpc3VzYiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKSkpCisJaWYgKCEoc2lzdXNiID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpKSkgeworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PREVWOworCX0KIAogCW11dGV4X2xvY2soJnNpc3VzYi0+bG9jayk7CiAKIAlpZiAoIXNpc3VzYi0+cHJlc2VudCB8fCAhc2lzdXNiLT5yZWFkeSkgewogCQltdXRleF91bmxvY2soJnNpc3VzYi0+bG9jayk7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCiAJaWYgKHNpc3VzYi0+aXNvcGVuKSB7CiAJCW11dGV4X3VubG9jaygmc2lzdXNiLT5sb2NrKTsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIApAQCAtMjQzOSwxMSArMjQ0NiwxMyBAQAogCQkJaWYgKHNpc3VzYl9pbml0X2dmeGRldmljZShzaXN1c2IsIDApKSB7CiAJCQkJbXV0ZXhfdW5sb2NrKCZzaXN1c2ItPmxvY2spOwogCQkJCWRldl9lcnIoJnNpc3VzYi0+c2lzdXNiX2Rldi0+ZGV2LCAiRmFpbGVkIHRvIGluaXRpYWxpemUgZGV2aWNlXG4iKTsKKwkJCQl1bmxvY2tfa2VybmVsKCk7CiAJCQkJcmV0dXJuIC1FSU87CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQltdXRleF91bmxvY2soJnNpc3VzYi0+bG9jayk7CiAJCQlkZXZfZXJyKCZzaXN1c2ItPnNpc3VzYl9kZXYtPmRldiwgIkRldmljZSBub3QgYXR0YWNoZWQgdG8gVVNCIDIuMCBodWJcbiIpOworCQkJdW5sb2NrX2tlcm5lbCgpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CkBAIC0yNDU2LDYgKzI0NjUsNyBAQAogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHNpc3VzYjsKIAogCW11dGV4X3VubG9jaygmc2lzdXNiLT5sb2NrKTsKKwl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMyMzgsNyArMzI0OCw3IEBACiAJa3JlZl9wdXQoJnNpc3VzYi0+a3JlZiwgc2lzdXNiX2RlbGV0ZSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBzaXN1c2JfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgc2lzdXNiX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4MDcxMSwgMHgwNTUwKSB9LAogCXsgVVNCX0RFVklDRSgweDA3MTEsIDB4MDkwMCkgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNzExLCAweDA5MDEpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3RyYW5jZXZpYnJhdG9yLmMgYi9kcml2ZXJzL3VzYi9taXNjL3RyYW5jZXZpYnJhdG9yLmMKaW5kZXggMmUxNDEwMi4uNWRhMjhlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy90cmFuY2V2aWJyYXRvci5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdHJhbmNldmlicmF0b3IuYwpAQCAtMzMsNyArMzMsNyBAQAogI2RlZmluZSBUUkFOQ0VWSUJSQVRPUl9WRU5ET1JfSUQJMHgwYjQ5CS8qIEFTQ0lJIENvcnBvcmF0aW9uICovCiAjZGVmaW5lIFRSQU5DRVZJQlJBVE9SX1BST0RVQ1RfSUQJMHgwNjRmCS8qIFRyYW5jZSBWaWJyYXRvciAqLwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVFJBTkNFVklCUkFUT1JfVkVORE9SX0lELCBUUkFOQ0VWSUJSQVRPUl9QUk9EVUNUX0lEKSB9LAogCXsgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jIGIvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYwppbmRleCA0ZmIxMjAzLi45MGFlZGU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKQEAgLTMwLDcgKzMwLDcgQEAKICNkZWZpbmUgSU9DVExfR0VUX0RSVl9WRVJTSU9OCTIKIAogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IC5pZFZlbmRvciA9IDB4MTBEMiwgLm1hdGNoX2ZsYWdzID0gVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IsIH0sCiAJeyB9LAogfTsKQEAgLTc0LDEwICs3NCwxMiBAQAogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CiAJaW50IHN1Ym1pbm9yLCByOwogCisJbG9ja19rZXJuZWwoKTsKIAlzdWJtaW5vciA9IGltaW5vcihpbm9kZSk7CiAKIAlpbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UoJmxjZF9kcml2ZXIsIHN1Ym1pbm9yKTsKIAlpZiAoIWludGVyZmFjZSkgeworCQl1bmxvY2tfa2VybmVsKCk7CiAJCWVyciAoIlVTQkxDRDogJXMgLSBlcnJvciwgY2FuJ3QgZmluZCBkZXZpY2UgZm9yIG1pbm9yICVkIiwKIAkJICAgICBfX2Z1bmNfXywgc3VibWlub3IpOwogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTg3LDYgKzg5LDcgQEAKIAlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CiAJaWYgKCFkZXYpIHsKIAkJbXV0ZXhfdW5sb2NrKCZvcGVuX2Rpc2NfbXV0ZXgpOworCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIApAQCAtOTgsMTEgKzEwMSwxMyBAQAogCXIgPSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoaW50ZXJmYWNlKTsKIAlpZiAociA8IDApIHsKIAkJa3JlZl9wdXQoJmRldi0+a3JlZiwgbGNkX2RlbGV0ZSk7CisJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIHI7CiAJfQogCiAJLyogc2F2ZSBvdXIgb2JqZWN0IGluIHRoZSBmaWxlJ3MgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBkZXY7CisJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxlZC5jIGIvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYwppbmRleCAwNmNiNzE5Li42M2RhMmMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxlZC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMKQEAgLTI0LDcgKzI0LDcgQEAKICNkZWZpbmUgUFJPRFVDVF9JRAkweDEyMjMKIAogLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKFZFTkRPUl9JRCwgUFJPRFVDVF9JRCkgfSwKIAl7IH0sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2JzZXZzZWcuYyBiL2RyaXZlcnMvdXNiL21pc2MvdXNic2V2c2VnLmMKaW5kZXggM2RiMjU1NS4uYTk1NTVjYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c2JzZXZzZWcuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYnNldnNlZy5jCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIE1BWExFTgkJNgogCiAvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShWRU5ET1JfSUQsIFBST0RVQ1RfSUQpIH0sCiAJeyB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNidGVzdC5jIGIvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMKaW5kZXggM2RhYjBjMC4uYTIxY2NlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c2J0ZXN0LmMKQEAgLTE1ODAsMTAgKzE1ODAsNiBAQAogCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJLyogRklYTUU6IFdoYXQgaWYgYSBzeXN0ZW0gc2xlZXAgc3RhcnRzIHdoaWxlIGEgdGVzdCBpcyBydW5uaW5nPyAqLwotCWlmICghaW50Zi0+aXNfYWN0aXZlKSB7Ci0JCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7Ci0JfQogCiAJLyogc29tZSBkZXZpY2VzLCBsaWtlIGV6LXVzYiBkZWZhdWx0IGRldmljZXMsIG5lZWQgYSBub24tZGVmYXVsdAogCSAqIGFsdHNldHRpbmcgdG8gaGF2ZSBhbnkgYWN0aXZlIGVuZHBvaW50cy4gIHNvbWUgdGVzdHMgY2hhbmdlCkBAIC0yMTAxLDcgKzIwOTcsNyBAQAogI2VuZGlmCiAKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAKIAkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jIGIvZHJpdmVycy91c2IvbWlzYy91c3M3MjAuYwppbmRleCA5YTZjMjdhLi5mNTZmZWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzczcyMC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNzNzIwLmMKQEAgLTc3MCw3ICs3NzAsNyBAQAogfQogCiAvKiB0YWJsZSBvZiBjYWJsZXMgdGhhdCB3b3JrIHRocm91Z2ggdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c3M3MjBfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNzNzIwX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4MDQ3ZSwgMHgxMDAxKSB9LAogCXsgVVNCX0RFVklDRSgweDA1NTcsIDB4MjAwMSkgfSwKIAl7IFVTQl9ERVZJQ0UoMHgwNzI5LCAweDEyODQpIH0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3ZzdHVzYi5jIGIvZHJpdmVycy91c2IvbWlzYy92c3R1c2IuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjI2ZWE4ZC4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3ZzdHVzYi5jCisrKyAvZGV2L251bGwKQEAgLTEsNzgzICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICogIEZpbGU6IGRyaXZlcnMvdXNiL21pc2MvdnN0dXNiLmMKLSAqCi0gKiAgUHVycG9zZTogU3VwcG9ydCBmb3IgdGhlIGJ1bGsgVVNCIFZlcm5pZXIgU3BlY3Ryb3Bob3RvbWV0ZXJzCi0gKgotICogIEF1dGhvcjogICAgIEpvaG5uaWUgUGV0ZXJzCi0gKiAgICAgICAgICAgICAgQXhpYW4gQ29uc3VsdGluZwotICogICAgICAgICAgICAgIEJlYXZlcnRvbiwgT1IsIFVTQSA5NzAwNQotICoKLSAqICBNb2RpZmllZCBieTogICAgIEVRd2FyZSBFbmdpbmVlcmluZywgSW5jLgotICogICAgICAgICAgICAgICAgICAgT3JlZ29uIENpdHksIE9SLCBVU0EgOTcwNDUKLSAqCi0gKiAgQ29weXJpZ2h0OiAgMjAwNywgMjAwOAotICogICAgICAgICAgICAgIFZlcm5pZXIgU29mdHdhcmUgJiBUZWNobm9sb2d5Ci0gKiAgICAgICAgICAgICAgQmVhdmVydG9uLCBPUiwgVVNBIDk3MDA1Ci0gKgotICogIFdlYjogICAgICAgIHd3dy52ZXJuaWVyLmNvbQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgotI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC91c2IuaD4KLQotI2luY2x1ZGUgPGxpbnV4L3VzYi92c3R1c2IuaD4KLQotI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiVlNUIFVTQiBEcml2ZXIgVmVyc2lvbiAxLjUiCi0jZGVmaW5lIERSSVZFUl9ERVNDICJWZXJuaWVyIFNvZnR3YXJlIFRlY2hub2xvZ3kgQnVsayBVU0IgRHJpdmVyIgotCi0jaWZkZWYgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUwotCSNkZWZpbmUgVlNUVVNCX01JTk9SX0JBU0UJMAotI2Vsc2UKLQkjZGVmaW5lIFZTVFVTQl9NSU5PUl9CQVNFCTE5OQotI2VuZGlmCi0KLSNkZWZpbmUgVVNCX1ZFTkRPUl9PQ0VBTk9QVElDUwkweDI0NTcKLSNkZWZpbmUgVVNCX1ZFTkRPUl9WRVJOSUVSCTB4MDhGNwkvKiBWZXJuaWVyIFNvZnR3YXJlICYgVGVjaG5vbG9neSAqLwotCi0jZGVmaW5lIFVTQl9QUk9EVUNUX1VTQjIwMDAJMHgxMDAyCi0jZGVmaW5lIFVTQl9QUk9EVUNUX0FEQzEwMDBfRlcJMHgxMDAzCS8qIGZpcm13YXJlIGRvd25sb2FkIChyZW51bWVyYXRlcykgKi8KLSNkZWZpbmUgVVNCX1BST0RVQ1RfQURDMTAwMAkweDEwMDQKLSNkZWZpbmUgVVNCX1BST0RVQ1RfSFIyMDAwX0ZXCTB4MTAwOQkvKiBmaXJtd2FyZSBkb3dubG9hZCAocmVudW1lcmF0ZXMpICovCi0jZGVmaW5lIFVTQl9QUk9EVUNUX0hSMjAwMAkweDEwMEEKLSNkZWZpbmUgVVNCX1BST0RVQ1RfSFI0MDAwX0ZXCTB4MTAxMQkvKiBmaXJtd2FyZSBkb3dubG9hZCAocmVudW1lcmF0ZXMpICovCi0jZGVmaW5lIFVTQl9QUk9EVUNUX0hSNDAwMAkweDEwMTIKLSNkZWZpbmUgVVNCX1BST0RVQ1RfVVNCNjUwCTB4MTAxNAkvKiAiUmVkIFRpZGUiICovCi0jZGVmaW5lIFVTQl9QUk9EVUNUX1FFNjUwMDAJMHgxMDE4Ci0jZGVmaW5lIFVTQl9QUk9EVUNUX1VTQjQwMDAJMHgxMDIyCi0jZGVmaW5lIFVTQl9QUk9EVUNUX1VTQjMyNQkweDEwMjQJLyogIlZlcm5pZXIgU3BlY3Ryb21ldGVyIiAqLwotCi0jZGVmaW5lIFVTQl9QUk9EVUNUX0xBQlBSTwkweDAwMDEKLSNkZWZpbmUgVVNCX1BST0RVQ1RfTEFCUVVFU1QJMHgwMDA1Ci0KLSNkZWZpbmUgVlNUX01BWEJVRkZFUgkJKDY0KjEwMjQpCi0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewotCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX09DRUFOT1BUSUNTLCBVU0JfUFJPRFVDVF9VU0IyMDAwKX0sCi0JeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfT0NFQU5PUFRJQ1MsIFVTQl9QUk9EVUNUX0hSNDAwMCl9LAotCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX09DRUFOT1BUSUNTLCBVU0JfUFJPRFVDVF9VU0I2NTApfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9PQ0VBTk9QVElDUywgVVNCX1BST0RVQ1RfVVNCNDAwMCl9LAotCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX09DRUFOT1BUSUNTLCBVU0JfUFJPRFVDVF9VU0IzMjUpfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9WRVJOSUVSLCBVU0JfUFJPRFVDVF9MQUJRVUVTVCl9LAotCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX1ZFUk5JRVIsIFVTQl9QUk9EVUNUX0xBQlBSTyl9LAotCXt9LAotfTsKLQotTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKLQotc3RydWN0IHZzdHVzYl9kZXZpY2UgewotCXN0cnVjdCBrcmVmCQkJCWtyZWY7Ci0Jc3RydWN0IG11dGV4ICAgICAgICAgICAgbG9jazsKLQlzdHJ1Y3QgdXNiX2RldmljZSAgICAgICAqdXNiX2RldjsKLQljaGFyICAgICAgICAgICAgICAgICAgICBwcmVzZW50OwotCWNoYXIgICAgICAgICAgICAgICAgICAgIGlzb3BlbjsKLQlzdHJ1Y3QgdXNiX2FuY2hvciAgICAgICBzdWJtaXR0ZWQ7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgcmRfcGlwZTsKLQlpbnQgICAgICAgICAgICAgICAgICAgICByZF90aW1lb3V0X21zOwotCWludCAgICAgICAgICAgICAgICAgICAgIHdyX3BpcGU7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgd3JfdGltZW91dF9tczsKLX07Ci0jZGVmaW5lIHRvX3ZzdF9kZXYoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB2c3R1c2JfZGV2aWNlLCBrcmVmKQotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdnN0dXNiX2RyaXZlcjsKLQotc3RhdGljIHZvaWQgdnN0dXNiX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqa3JlZikKLXsKLQlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2ID0gdG9fdnN0X2RldihrcmVmKTsKLQotCXVzYl9wdXRfZGV2KHZzdGRldi0+dXNiX2Rldik7Ci0Ja2ZyZWUodnN0ZGV2KTsKLX0KLQotc3RhdGljIGludCB2c3R1c2Jfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7Ci0KLQlpbnRlcmZhY2UgPSB1c2JfZmluZF9pbnRlcmZhY2UoJnZzdHVzYl9kcml2ZXIsIGltaW5vcihpbm9kZSkpOwotCi0JaWYgKCFpbnRlcmZhY2UpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCi0JCSAgICAgICAiOiAlcyAtIGVycm9yLCBjYW4ndCBmaW5kIGRldmljZSBmb3IgbWlub3IgJWRcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgaW1pbm9yKGlub2RlKSk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCXZzdGRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKLQotCWlmICghdnN0ZGV2KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIGxvY2sgdGhpcyBkZXZpY2UgKi8KLQltdXRleF9sb2NrKCZ2c3RkZXYtPmxvY2spOwotCi0JLyogY2FuIG9ubHkgb3BlbiBvbmUgdGltZSAqLwotCWlmICgoIXZzdGRldi0+cHJlc2VudCkgfHwgKHZzdGRldi0+aXNvcGVuKSkgewotCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JLyogaW5jcmVtZW50IG91ciB1c2FnZSBjb3VudCAqLwotCWtyZWZfZ2V0KCZ2c3RkZXYtPmtyZWYpOwotCi0JdnN0ZGV2LT5pc29wZW4gPSAxOwotCi0JLyogc2F2ZSBkZXZpY2UgaW4gdGhlIGZpbGUncyBwcml2YXRlIHN0cnVjdHVyZSAqLwotCWZpbGUtPnByaXZhdGVfZGF0YSA9IHZzdGRldjsKLQotCWRldl9kYmcoJnZzdGRldi0+dXNiX2Rldi0+ZGV2LCAiJXM6IG9wZW5lZFxuIiwgX19mdW5jX18pOwotCi0JbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdnN0dXNiX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0Jc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldjsKLQotCXZzdGRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCWlmICh2c3RkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQltdXRleF9sb2NrKCZ2c3RkZXYtPmxvY2spOwotCi0JdnN0ZGV2LT5pc29wZW4gPSAwOwotCi0JZGV2X2RiZygmdnN0ZGV2LT51c2JfZGV2LT5kZXYsICIlczogcmVsZWFzZWRcbiIsIF9fZnVuY19fKTsKLQotCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKLQotCWtyZWZfcHV0KCZ2c3RkZXYtPmtyZWYsIHZzdHVzYl9kZWxldGUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHVzYl9hcGlfYmxvY2tpbmdfY29tcGxldGlvbihzdHJ1Y3QgdXJiICp1cmIpCi17Ci0Jc3RydWN0IGNvbXBsZXRpb24gKmNvbXBsZXRlaXQgPSB1cmItPmNvbnRleHQ7Ci0KLQljb21wbGV0ZShjb21wbGV0ZWl0KTsKLX0KLQotc3RhdGljIGludCB2c3R1c2JfZmlsbF9hbmRfc2VuZF91cmIoc3RydWN0IHVyYiAqdXJiLAotCQkJCSAgICBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldiwKLQkJCQkgICAgdW5zaWduZWQgaW50IHBpcGUsIHZvaWQgKmRhdGEsCi0JCQkJICAgIHVuc2lnbmVkIGludCBsZW4sIHN0cnVjdCBjb21wbGV0aW9uICpkb25lKQotewotCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7Ci0Jc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICoqaG9zdGVwOwotCXVuc2lnbmVkIGludCBwaXBlbmQ7Ci0KLQlpbnQgc3RhdHVzOwotCi0JaG9zdGVwID0gdXNiX3BpcGVpbihwaXBlKSA/IHVzYl9kZXYtPmVwX2luIDogdXNiX2Rldi0+ZXBfb3V0OwotCXBpcGVuZCA9IHVzYl9waXBlZW5kcG9pbnQocGlwZSk7Ci0JZXAgPSBob3N0ZXBbcGlwZW5kXTsKLQotCWlmICghZXAgfHwgKGxlbiA9PSAwKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoKGVwLT5kZXNjLmJtQXR0cmlidXRlcyAmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKQotCSAgICA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQpIHsKLQkJcGlwZSA9IChwaXBlICYgfigzIDw8IDMwKSkgfCAoUElQRV9JTlRFUlJVUFQgPDwgMzApOwotCQl1c2JfZmlsbF9pbnRfdXJiKHVyYiwgdXNiX2RldiwgcGlwZSwgZGF0YSwgbGVuLAotCQkJCSAodXNiX2NvbXBsZXRlX3QpdXNiX2FwaV9ibG9ja2luZ19jb21wbGV0aW9uLAotCQkJCSBOVUxMLCBlcC0+ZGVzYy5iSW50ZXJ2YWwpOwotCX0gZWxzZQotCQl1c2JfZmlsbF9idWxrX3VyYih1cmIsIHVzYl9kZXYsIHBpcGUsIGRhdGEsIGxlbiwKLQkJCQkgICh1c2JfY29tcGxldGVfdCl1c2JfYXBpX2Jsb2NraW5nX2NvbXBsZXRpb24sCi0JCQkJICBOVUxMKTsKLQotCWluaXRfY29tcGxldGlvbihkb25lKTsKLQl1cmItPmNvbnRleHQgPSBkb25lOwotCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7Ci0Jc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQgdnN0dXNiX2NvbXBsZXRlX3VyYihzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBjb21wbGV0aW9uICpkb25lLAotCQkJICAgICAgIGludCB0aW1lb3V0LCBpbnQgKmFjdHVhbF9sZW5ndGgpCi17Ci0JdW5zaWduZWQgbG9uZyBleHBpcmU7Ci0JaW50IHN0YXR1czsKLQotCWV4cGlyZSA9IHRpbWVvdXQgPyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpIDogTUFYX1NDSEVEVUxFX1RJTUVPVVQ7Ci0JaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGVfdGltZW91dChkb25lLCBleHBpcmUpKSB7Ci0JCXVzYl9raWxsX3VyYih1cmIpOwotCQlzdGF0dXMgPSB1cmItPnN0YXR1cyA9PSAtRU5PRU5UID8gLUVUSU1FRE9VVCA6IHVyYi0+c3RhdHVzOwotCi0JCWRldl9kYmcoJnVyYi0+ZGV2LT5kZXYsCi0JCQkiJXMgdGltZWQgb3V0IG9uIGVwJWQlcyBsZW49JWQvJWQsIHVyYiBzdGF0dXMgPSAlZFxuIiwKLQkJCWN1cnJlbnQtPmNvbW0sCi0JCQl1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCi0JCQl1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCi0JCQl1cmItPmFjdHVhbF9sZW5ndGgsCi0JCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCQl1cmItPnN0YXR1cyk7Ci0KLQl9IGVsc2UgewotCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJCS8qIGlmIHJlYWxseSBhbiBlcnJvciAqLwotCQkJaWYgKHVyYi0+c3RhdHVzICYmICEoKHVyYi0+c3RhdHVzID09IC1FTk9FTlQpICAgICB8fAotCQkJCQkgICAgICh1cmItPnN0YXR1cyA9PSAtRUNPTk5SRVNFVCkgfHwKLQkJCQkJICAgICAodXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikpKSB7Ci0JCQkJc3RhdHVzID0gLUVJTlRSOwotCQkJCXVzYl9raWxsX3VyYih1cmIpOwotCQkJfSBlbHNlIHsKLQkJCQlzdGF0dXMgPSAwOwotCQkJfQotCi0JCQlkZXZfZGJnKCZ1cmItPmRldi0+ZGV2LAotCQkJCSIlczogc2lnbmFsIHBlbmRpbmcgb24gZXAlZCVzIGxlbj0lZC8lZCwiCi0JCQkJInVyYiBzdGF0dXMgPSAlZFxuIiwKLQkJCQljdXJyZW50LT5jb21tLAotCQkJCXVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSwKLQkJCQl1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCi0JCQkJdXJiLT5hY3R1YWxfbGVuZ3RoLAotCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJCQl1cmItPnN0YXR1cyk7Ci0KLQkJfSBlbHNlIHsKLQkJCXN0YXR1cyA9IHVyYi0+c3RhdHVzOwotCQl9Ci0JfQotCi0JaWYgKGFjdHVhbF9sZW5ndGgpCi0JCSphY3R1YWxfbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwotCi0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIHNzaXplX3QgdnN0dXNiX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OwotCWludCBjbnQgPSAtMTsKLQl2b2lkICpidWY7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlzdHJ1Y3QgdXJiICAgICAgICAgICAgICAqdXJiOwotCXN0cnVjdCB1c2JfZGV2aWNlICAgICAgICpkZXY7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICAgcGlwZTsKLQlpbnQgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OwotCi0JREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZG9uZSk7Ci0KLQl2c3RkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0KLQlpZiAodnN0ZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCi0JLyogdmVyaWZ5IHRoYXQgd2UgYWN0dWFsbHkgd2FudCB0byByZWFkIHNvbWUgZGF0YSAqLwotCWlmICgoY291bnQgPT0gMCkgfHwgKGNvdW50ID4gVlNUX01BWEJVRkZFUikpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyogbG9jayB0aGlzIG9iamVjdCAqLwotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnZzdGRldi0+bG9jaykpCi0JCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0KLQkvKiBhbnlvbmUgaG9tZSAqLwotCWlmICghdnN0ZGV2LT5wcmVzZW50KSB7Ci0JCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKLQkJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FCi0JCSAgICAgICAiOiAlczogZGV2aWNlIG5vdCBwcmVzZW50XG4iLCBfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotCS8qIHB1bGwgb3V0IHRoZSBuZWNlc3NhcnkgZGF0YSAqLwotCWRldiA9ICAgICB2c3RkZXYtPnVzYl9kZXY7Ci0JcGlwZSA9ICAgIHVzYl9yY3ZidWxrcGlwZShkZXYsIHZzdGRldi0+cmRfcGlwZSk7Ci0JdGltZW91dCA9IHZzdGRldi0+cmRfdGltZW91dF9tczsKLQotCWJ1ZiA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOwotCWlmIChidWYgPT0gTlVMTCkgewotCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQotCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF1cmIpIHsKLQkJa2ZyZWUoYnVmKTsKLQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQl1c2JfYW5jaG9yX3VyYih1cmIsICZ2c3RkZXYtPnN1Ym1pdHRlZCk7Ci0JcmV0dmFsID0gdnN0dXNiX2ZpbGxfYW5kX3NlbmRfdXJiKHVyYiwgZGV2LCBwaXBlLCBidWYsIGNvdW50LCAmZG9uZSk7Ci0JbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOwotCWlmIChyZXR2YWwpIHsKLQkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOwotCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBlcnJvciAlZCBmaWxsaW5nIGFuZCBzZW5kaW5nIHVyYiAlZFxuIiwKLQkJCV9fZnVuY19fLCByZXR2YWwsIHBpcGUpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JcmV0dmFsID0gdnN0dXNiX2NvbXBsZXRlX3VyYih1cmIsICZkb25lLCB0aW1lb3V0LCAmY250KTsKLQlpZiAocmV0dmFsKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGVycm9yICVkIGNvbXBsZXRpbmcgdXJiICVkXG4iLAotCQkJX19mdW5jX18sIHJldHZhbCwgcGlwZSk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpZiAoY29weV90b191c2VyKGJ1ZmZlciwgYnVmLCBjbnQpKSB7Ci0JCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGNhbid0IGNvcHlfdG9fdXNlclxuIiwgX19mdW5jX18pOwotCQlyZXR2YWwgPSAtRUZBVUxUOwotCX0gZWxzZSB7Ci0JCXJldHZhbCA9IGNudDsKLQkJZGV2X2RiZygmZGV2LT5kZXYsICIlczogcmVhZCAlZCBieXRlcyBmcm9tIHBpcGUgJWRcbiIsCi0JCQlfX2Z1bmNfXywgY250LCBwaXBlKTsKLQl9Ci0KLWV4aXQ6Ci0JdXNiX2ZyZWVfdXJiKHVyYik7Ci0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgc3NpemVfdCB2c3R1c2Jfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCi0JCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldjsKLQlpbnQgY250ID0gLTE7Ci0Jdm9pZCAqYnVmOwotCWludCByZXR2YWwgPSAwOwotCi0Jc3RydWN0IHVyYiAgICAgICAgICAgICAgKnVyYjsKLQlzdHJ1Y3QgdXNiX2RldmljZSAgICAgICAqZGV2OwotCXVuc2lnbmVkIGludCAgICAgICAgICAgIHBpcGU7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgdGltZW91dDsKLQotCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpOwotCi0JdnN0ZGV2ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JaWYgKHZzdGRldiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIHZlcmlmeSB0aGF0IHdlIGFjdHVhbGx5IGhhdmUgc29tZSBkYXRhIHRvIHdyaXRlICovCi0JaWYgKChjb3VudCA9PSAwKSB8fCAoY291bnQgPiBWU1RfTUFYQlVGRkVSKSkKLQkJcmV0dXJuIHJldHZhbDsKLQotCS8qIGxvY2sgdGhpcyBvYmplY3QgKi8KLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2c3RkZXYtPmxvY2spKQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCi0JLyogYW55b25lIGhvbWUgKi8KLQlpZiAoIXZzdGRldi0+cHJlc2VudCkgewotCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7Ci0JCXByaW50ayhLRVJOX0VSUiBLQlVJTERfTU9ETkFNRQotCQkgICAgICAgIjogJXM6IGRldmljZSBub3QgcHJlc2VudFxuIiwgX19mdW5jX18pOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKiBwdWxsIG91dCB0aGUgbmVjZXNzYXJ5IGRhdGEgKi8KLQlkZXYgPSAgICAgdnN0ZGV2LT51c2JfZGV2OwotCXBpcGUgPSAgICB1c2Jfc25kYnVsa3BpcGUoZGV2LCB2c3RkZXYtPndyX3BpcGUpOwotCXRpbWVvdXQgPSB2c3RkZXYtPndyX3RpbWVvdXRfbXM7Ci0KLQlidWYgPSBrbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKLQlpZiAoYnVmID09IE5VTEwpIHsKLQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0KLQl1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmICghdXJiKSB7Ci0JCWtmcmVlKGJ1Zik7Ci0JCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZiwgYnVmZmVyLCBjb3VudCkpIHsKLQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOwotCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBjYW4ndCBjb3B5X2Zyb21fdXNlclxuIiwgX19mdW5jX18pOwotCQlyZXR2YWwgPSAtRUZBVUxUOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JdXNiX2FuY2hvcl91cmIodXJiLCAmdnN0ZGV2LT5zdWJtaXR0ZWQpOwotCXJldHZhbCA9IHZzdHVzYl9maWxsX2FuZF9zZW5kX3VyYih1cmIsIGRldiwgcGlwZSwgYnVmLCBjb3VudCwgJmRvbmUpOwotCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKLQlpZiAocmV0dmFsKSB7Ci0JCXVzYl91bmFuY2hvcl91cmIodXJiKTsKLQkJZGV2X2VycigmZGV2LT5kZXYsICIlczogZXJyb3IgJWQgZmlsbGluZyBhbmQgc2VuZGluZyB1cmIgJWRcbiIsCi0JCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKLQkJZ290byBleGl0OwotCX0KLQotCXJldHZhbCA9IHZzdHVzYl9jb21wbGV0ZV91cmIodXJiLCAmZG9uZSwgdGltZW91dCwgJmNudCk7Ci0JaWYgKHJldHZhbCkgewotCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBlcnJvciAlZCBjb21wbGV0aW5nIHVyYiAlZFxuIiwKLQkJCV9fZnVuY19fLCByZXR2YWwsIHBpcGUpOwotCQlnb3RvIGV4aXQ7Ci0JfSBlbHNlIHsKLQkJcmV0dmFsID0gY250OwotCQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzOiBzZW50ICVkIGJ5dGVzIHRvIHBpcGUgJWRcbiIsCi0JCQlfX2Z1bmNfXywgY250LCBwaXBlKTsKLQl9Ci0KLWV4aXQ6Ci0JdXNiX2ZyZWVfdXJiKHVyYik7Ci0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgbG9uZyB2c3R1c2JfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCWludCByZXR2YWwgPSAwOwotCWludCBjbnQgPSAtMTsKLQl2b2lkIF9fdXNlciAqZGF0YSA9ICh2b2lkIF9fdXNlciAqKWFyZzsKLQlzdHJ1Y3QgdnN0dXNiX2FyZ3MgdXNiX2RhdGE7Ci0KLQlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OwotCXZvaWQgKmJ1ZmZlciA9IE5VTEw7IC8qIG11c3QgYmUgaW5pdGlhbGl6ZWQuIGJ1ZmZlciBpcwotCQkJICAgICAgKglyZWZlcmVuY2VkIG9uIGV4aXQgYnV0IG5vdCBhbGwKLQkJCSAgICAgICogaW9jdGxzIGFsbG9jYXRlIGl0ICovCi0KLQlzdHJ1Y3QgdXJiICAgICAgICAgICAgICAqdXJiID0gTlVMTDsgLyogbXVzdCBiZSBpbml0aWFsaXplZC4gdXJiIGlzCi0JCQkJCSAgICAgICoJcmVmZXJlbmNlZCBvbiBleGl0IGJ1dCBub3QgYWxsCi0JCQkJCSAgICAgICogaW9jdGxzIGFsbG9jYXRlIGl0ICovCi0Jc3RydWN0IHVzYl9kZXZpY2UgICAgICAgKmRldjsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICBwaXBlOwotCWludCAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ7Ci0KLQlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTsKLQotCXZzdGRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKLQotCWlmIChfSU9DX1RZUEUoY21kKSAhPSBWU1RfSU9DX01BR0lDKSB7Ci0JCWRldl93YXJuKCZ2c3RkZXYtPnVzYl9kZXYtPmRldiwKLQkJCSAiJXM6IGlvY3RsIGNvbW1hbmQgJXgsIGJhZCBpb2N0bCBtYWdpYyAleCwgIgotCQkJICJleHBlY3RlZCAleFxuIiwgX19mdW5jX18sIGNtZCwKLQkJCSBfSU9DX1RZUEUoY21kKSwgVlNUX0lPQ19NQUdJQyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWlmICh2c3RkZXYgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJnVzYl9kYXRhLCBkYXRhLCBzaXplb2Yoc3RydWN0IHZzdHVzYl9hcmdzKSkpIHsKLQkJZGV2X2VycigmdnN0ZGV2LT51c2JfZGV2LT5kZXYsICIlczogY2FuJ3QgY29weV9mcm9tX3VzZXJcbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KLQotCS8qIGxvY2sgdGhpcyBvYmplY3QgKi8KLQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2c3RkZXYtPmxvY2spKSB7Ci0JCXJldHZhbCA9IC1FUkVTVEFSVFNZUzsKLQkJZ290byBleGl0OwotCX0KLQotCS8qIGFueW9uZSBob21lICovCi0JaWYgKCF2c3RkZXYtPnByZXNlbnQpIHsKLQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOwotCQlkZXZfZXJyKCZ2c3RkZXYtPnVzYl9kZXYtPmRldiwgIiVzOiBkZXZpY2Ugbm90IHByZXNlbnRcbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCXJldHZhbCA9IC1FTk9ERVY7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQkvKiBwdWxsIG91dCB0aGUgbmVjZXNzYXJ5IGRhdGEgKi8KLQlkZXYgPSB2c3RkZXYtPnVzYl9kZXY7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCi0JY2FzZSBJT0NUTF9WU1RVU0JfQ09ORklHX1JXOgotCi0JCXZzdGRldi0+cmRfcGlwZSA9IHVzYl9kYXRhLnJkX3BpcGU7Ci0JCXZzdGRldi0+cmRfdGltZW91dF9tcyA9IHVzYl9kYXRhLnJkX3RpbWVvdXRfbXM7Ci0JCXZzdGRldi0+d3JfcGlwZSA9IHVzYl9kYXRhLndyX3BpcGU7Ci0JCXZzdGRldi0+d3JfdGltZW91dF9tcyA9IHVzYl9kYXRhLndyX3RpbWVvdXRfbXM7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOwotCi0JCWRldl9kYmcoJmRldi0+ZGV2LCAiJXM6IHNldHRpbmcgcGlwZXMvdGltZW91dHMsICIKLQkJCSJyZHBpcGUgPSAlZCwgcmR0aW1lb3V0ID0gJWQsICIKLQkJCSJ3cnBpcGUgPSAlZCwgd3J0aW1lb3V0ID0gJWRcbiIsIF9fZnVuY19fLAotCQkJdnN0ZGV2LT5yZF9waXBlLCB2c3RkZXYtPnJkX3RpbWVvdXRfbXMsCi0JCQl2c3RkZXYtPndyX3BpcGUsIHZzdGRldi0+d3JfdGltZW91dF9tcyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBJT0NUTF9WU1RVU0JfU0VORF9QSVBFOgotCi0JCWlmICgodXNiX2RhdGEuY291bnQgPT0gMCkgfHwgKHVzYl9kYXRhLmNvdW50ID4gVlNUX01BWEJVRkZFUikpIHsKLQkJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKLQkJCXJldHZhbCA9IC1FSU5WQUw7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQotCQlidWZmZXIgPSBrbWFsbG9jKHVzYl9kYXRhLmNvdW50LCBHRlBfS0VSTkVMKTsKLQkJaWYgKGJ1ZmZlciA9PSBOVUxMKSB7Ci0JCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7Ci0JCQlyZXR2YWwgPSAtRU5PTUVNOwotCQkJZ290byBleGl0OwotCQl9Ci0KLQkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCF1cmIpIHsKLQkJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKLQkJCXJldHZhbCA9IC1FTk9NRU07Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQotCQl0aW1lb3V0ID0gdXNiX2RhdGEudGltZW91dF9tczsKLQotCQlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKGRldiwgdXNiX2RhdGEucGlwZSk7Ci0KLQkJaWYgKGNvcHlfZnJvbV91c2VyKGJ1ZmZlciwgdXNiX2RhdGEuYnVmZmVyLCB1c2JfZGF0YS5jb3VudCkpIHsKLQkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGNhbid0IGNvcHlfZnJvbV91c2VyXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKLQkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQotCQl1c2JfYW5jaG9yX3VyYih1cmIsICZ2c3RkZXYtPnN1Ym1pdHRlZCk7Ci0JCXJldHZhbCA9IHZzdHVzYl9maWxsX2FuZF9zZW5kX3VyYih1cmIsIGRldiwgcGlwZSwgYnVmZmVyLAotCQkJCQkJICB1c2JfZGF0YS5jb3VudCwgJmRvbmUpOwotCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7Ci0JCWlmIChyZXR2YWwpIHsKLQkJCXVzYl91bmFuY2hvcl91cmIodXJiKTsKLQkJCWRldl9lcnIoJmRldi0+ZGV2LAotCQkJCSIlczogZXJyb3IgJWQgZmlsbGluZyBhbmQgc2VuZGluZyB1cmIgJWRcbiIsCi0JCQkJX19mdW5jX18sIHJldHZhbCwgcGlwZSk7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQotCQlyZXR2YWwgPSB2c3R1c2JfY29tcGxldGVfdXJiKHVyYiwgJmRvbmUsIHRpbWVvdXQsICZjbnQpOwotCQlpZiAocmV0dmFsKSB7Ci0JCQlkZXZfZXJyKCZkZXYtPmRldiwgIiVzOiBlcnJvciAlZCBjb21wbGV0aW5nIHVyYiAlZFxuIiwKLQkJCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKLQkJfQotCi0JCWJyZWFrOwotCWNhc2UgSU9DVExfVlNUVVNCX1JFQ1ZfUElQRToKLQotCQlpZiAoKHVzYl9kYXRhLmNvdW50ID09IDApIHx8ICh1c2JfZGF0YS5jb3VudCA+IFZTVF9NQVhCVUZGRVIpKSB7Ci0JCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7Ci0JCQlyZXR2YWwgPSAtRUlOVkFMOwotCQkJZ290byBleGl0OwotCQl9Ci0KLQkJYnVmZmVyID0ga21hbGxvYyh1c2JfZGF0YS5jb3VudCwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChidWZmZXIgPT0gTlVMTCkgewotCQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOwotCQkJcmV0dmFsID0gLUVOT01FTTsKLQkJCWdvdG8gZXhpdDsKLQkJfQotCi0JCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghdXJiKSB7Ci0JCQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7Ci0JCQlyZXR2YWwgPSAtRU5PTUVNOwotCQkJZ290byBleGl0OwotCQl9Ci0KLQkJdGltZW91dCA9IHVzYl9kYXRhLnRpbWVvdXRfbXM7Ci0KLQkJcGlwZSA9IHVzYl9yY3ZidWxrcGlwZShkZXYsIHVzYl9kYXRhLnBpcGUpOwotCi0JCXVzYl9hbmNob3JfdXJiKHVyYiwgJnZzdGRldi0+c3VibWl0dGVkKTsKLQkJcmV0dmFsID0gdnN0dXNiX2ZpbGxfYW5kX3NlbmRfdXJiKHVyYiwgZGV2LCBwaXBlLCBidWZmZXIsCi0JCQkJCQkgIHVzYl9kYXRhLmNvdW50LCAmZG9uZSk7Ci0JCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKLQkJaWYgKHJldHZhbCkgewotCQkJdXNiX3VuYW5jaG9yX3VyYih1cmIpOwotCQkJZGV2X2VycigmZGV2LT5kZXYsCi0JCQkJIiVzOiBlcnJvciAlZCBmaWxsaW5nIGFuZCBzZW5kaW5nIHVyYiAlZFxuIiwKLQkJCQlfX2Z1bmNfXywgcmV0dmFsLCBwaXBlKTsKLQkJCWdvdG8gZXhpdDsKLQkJfQotCi0JCXJldHZhbCA9IHZzdHVzYl9jb21wbGV0ZV91cmIodXJiLCAmZG9uZSwgdGltZW91dCwgJmNudCk7Ci0JCWlmIChyZXR2YWwpIHsKLQkJCWRldl9lcnIoJmRldi0+ZGV2LCAiJXM6IGVycm9yICVkIGNvbXBsZXRpbmcgdXJiICVkXG4iLAotCQkJCV9fZnVuY19fLCByZXR2YWwsIHBpcGUpOwotCQkJZ290byBleGl0OwotCQl9Ci0KLQkJaWYgKGNvcHlfdG9fdXNlcih1c2JfZGF0YS5idWZmZXIsIGJ1ZmZlciwgY250KSkgewotCQkJZGV2X2VycigmZGV2LT5kZXYsICIlczogY2FuJ3QgY29weV90b191c2VyXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCQlnb3RvIGV4aXQ7Ci0JCX0KLQotCQl1c2JfZGF0YS5jb3VudCA9IGNudDsKLQkJaWYgKGNvcHlfdG9fdXNlcihkYXRhLCAmdXNiX2RhdGEsIHNpemVvZihzdHJ1Y3QgdnN0dXNiX2FyZ3MpKSkgewotCQkJZGV2X2VycigmZGV2LT5kZXYsICIlczogY2FuJ3QgY29weV90b191c2VyXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJCXJldHZhbCA9IC1FRkFVTFQ7Ci0JCX0gZWxzZSB7Ci0JCQlkZXZfZGJnKCZkZXYtPmRldiwgIiVzOiByZWN2ICV6ZCBieXRlcyBmcm9tIHBpcGUgJWRcbiIsCi0JCQkJX19mdW5jX18sIHVzYl9kYXRhLmNvdW50LCB1c2JfZGF0YS5waXBlKTsKLQkJfQotCi0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJbXV0ZXhfdW5sb2NrKCZ2c3RkZXYtPmxvY2spOwotCQlkZXZfd2FybigmZGV2LT5kZXYsICJpb2N0bF92c3R1c2I6IGludmFsaWQgaW9jdGwgY21kICV4XG4iLAotCQkJIGNtZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci1leGl0OgotCXVzYl9mcmVlX3VyYih1cmIpOwotCWtmcmVlKGJ1ZmZlcik7Ci0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdnN0dXNiX2ZvcHMgPSB7Ci0JLm93bmVyID0gICAgICAgICAgICAgICAgVEhJU19NT0RVTEUsCi0JLnJlYWQgPSAgICAgICAgICAgICAgICAgdnN0dXNiX3JlYWQsCi0JLndyaXRlID0gICAgICAgICAgICAgICAgdnN0dXNiX3dyaXRlLAotCS51bmxvY2tlZF9pb2N0bCA9ICAgICAgIHZzdHVzYl9pb2N0bCwKLQkuY29tcGF0X2lvY3RsID0gICAgICAgICB2c3R1c2JfaW9jdGwsCi0JLm9wZW4gPSAgICAgICAgICAgICAgICAgdnN0dXNiX29wZW4sCi0JLnJlbGVhc2UgPSAgICAgICAgICAgICAgdnN0dXNiX3JlbGVhc2UsCi19OwotCi1zdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgdXNiX3ZzdHVzYl9jbGFzcyA9IHsKLQkubmFtZSA9ICAgICAgICAgInVzYi92c3R1c2IlZCIsCi0JLmZvcHMgPSAgICAgICAgICZ2c3R1c2JfZm9wcywKLQkubWlub3JfYmFzZSA9ICAgVlNUVVNCX01JTk9SX0JBU0UsCi19OwotCi1zdGF0aWMgaW50IHZzdHVzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKLQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQlzdHJ1Y3QgdnN0dXNiX2RldmljZSAqdnN0ZGV2OwotCWludCBpOwotCWludCByZXR2YWwgPSAwOwotCi0JLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbnRpYWxpemUgaXQgKi8KLQotCXZzdGRldiA9IGt6YWxsb2Moc2l6ZW9mKCp2c3RkZXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAodnN0ZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JLyogbXVzdCBkbyB1c2JfZ2V0X2RldigpIHByaW9yIHRvIGtyZWZfaW5pdCgpIHNpbmNlIHRoZSBrcmVmX3B1dCgpCi0JICogcmVsZWFzZSBmdW5jdGlvbiB3aWxsIGRvIGEgdXNiX3B1dF9kZXYoKSAqLwotCXVzYl9nZXRfZGV2KGRldik7Ci0Ja3JlZl9pbml0KCZ2c3RkZXYtPmtyZWYpOwotCW11dGV4X2luaXQoJnZzdGRldi0+bG9jayk7Ci0KLQlpID0gZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZTsKLQotCWRldl9kYmcoJmludGYtPmRldiwgIlZlcnNpb24gJTFkJTFkLiUxZCUxZCBmb3VuZCBhdCBhZGRyZXNzICVkXG4iLAotCQkoaSAmIDB4RjAwMCkgPj4gMTIsIChpICYgMHhGMDApID4+IDgsCi0JCShpICYgMHhGMCkgPj4gNCwgKGkgJiAweEYpLCBkZXYtPmRldm51bSk7Ci0KLQl2c3RkZXYtPnByZXNlbnQgPSAxOwotCXZzdGRldi0+aXNvcGVuID0gMDsKLQl2c3RkZXYtPnVzYl9kZXYgPSBkZXY7Ci0JaW5pdF91c2JfYW5jaG9yKCZ2c3RkZXYtPnN1Ym1pdHRlZCk7Ci0KLQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIHZzdGRldik7Ci0JcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRmLCAmdXNiX3ZzdHVzYl9jbGFzcyk7Ci0JaWYgKHJldHZhbCkgewotCQlkZXZfZXJyKCZpbnRmLT5kZXYsCi0JCQkiJXM6IE5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS5cbiIsCi0JCQlfX2Z1bmNfXyk7Ci0JCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7Ci0JCWtyZWZfcHV0KCZ2c3RkZXYtPmtyZWYsIHZzdHVzYl9kZWxldGUpOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCS8qIGxldCB0aGUgdXNlciBrbm93IHdoYXQgbm9kZSB0aGlzIGRldmljZSBpcyBub3cgYXR0YWNoZWQgdG8gKi8KLQlkZXZfaW5mbygmaW50Zi0+ZGV2LAotCQkgIlZTVCBVU0IgRGV2aWNlICMlZCBub3cgYXR0YWNoZWQgdG8gbWFqb3IgJWQgbWlub3IgJWRcbiIsCi0JCSAoaW50Zi0+bWlub3IgLSBWU1RVU0JfTUlOT1JfQkFTRSksIFVTQl9NQUpPUiwgaW50Zi0+bWlub3IpOwotCi0JZGV2X2luZm8oJmludGYtPmRldiwgIiVzLCAlc1xuIiwgRFJJVkVSX0RFU0MsIERSSVZFUl9WRVJTSU9OKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLXN0YXRpYyB2b2lkIHZzdHVzYl9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQotewotCXN0cnVjdCB2c3R1c2JfZGV2aWNlICp2c3RkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwotCi0JdXNiX2RlcmVnaXN0ZXJfZGV2KGludGYsICZ1c2JfdnN0dXNiX2NsYXNzKTsKLQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIE5VTEwpOwotCi0JaWYgKHZzdGRldikgewotCi0JCW11dGV4X2xvY2soJnZzdGRldi0+bG9jayk7Ci0JCXZzdGRldi0+cHJlc2VudCA9IDA7Ci0KLQkJdXNiX2tpbGxfYW5jaG9yZWRfdXJicygmdnN0ZGV2LT5zdWJtaXR0ZWQpOwotCi0JCW11dGV4X3VubG9jaygmdnN0ZGV2LT5sb2NrKTsKLQotCQlrcmVmX3B1dCgmdnN0ZGV2LT5rcmVmLCB2c3R1c2JfZGVsZXRlKTsKLQl9Ci0KLX0KLQotc3RhdGljIGludCB2c3R1c2Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCi17Ci0Jc3RydWN0IHZzdHVzYl9kZXZpY2UgKnZzdGRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0JaW50IHRpbWU7Ci0JaWYgKCF2c3RkZXYpCi0JCXJldHVybiAwOwotCi0JbXV0ZXhfbG9jaygmdnN0ZGV2LT5sb2NrKTsKLQl0aW1lID0gdXNiX3dhaXRfYW5jaG9yX2VtcHR5X3RpbWVvdXQoJnZzdGRldi0+c3VibWl0dGVkLCAxMDAwKTsKLQlpZiAoIXRpbWUpCi0JCXVzYl9raWxsX2FuY2hvcmVkX3VyYnMoJnZzdGRldi0+c3VibWl0dGVkKTsKLQltdXRleF91bmxvY2soJnZzdGRldi0+bG9jayk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2c3R1c2JfcmVzdW1lKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgdnN0dXNiX2RyaXZlciA9IHsKLQkubmFtZSA9ICAgICAgICAgInZzdHVzYiIsCi0JLnByb2JlID0gICAgICAgIHZzdHVzYl9wcm9iZSwKLQkuZGlzY29ubmVjdCA9ICAgdnN0dXNiX2Rpc2Nvbm5lY3QsCi0JLnN1c3BlbmQgPSAgICAgIHZzdHVzYl9zdXNwZW5kLAotCS5yZXN1bWUgPSAgICAgICB2c3R1c2JfcmVzdW1lLAotCS5pZF90YWJsZSA9IGlkX3RhYmxlLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgdnN0dXNiX2luaXQodm9pZCkKLXsKLQlpbnQgcmM7Ci0KLQlyYyA9IHVzYl9yZWdpc3RlcigmdnN0dXNiX2RyaXZlcik7Ci0JaWYgKHJjKQotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gcmVnaXN0ZXIgKCVkKSIsIF9fZnVuY19fLCByYyk7Ci0KLQlyZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB2c3R1c2JfZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZ2c3R1c2JfZHJpdmVyKTsKLX0KLQotbW9kdWxlX2luaXQodnN0dXNiX2luaXQpOwotbW9kdWxlX2V4aXQodnN0dXNiX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJEZW5uaXMgTydCcmllbi9TdGVwaGVuIFdhcmUiKTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfVkVSU0lPTik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9iaW4uYwppbmRleCAzODVlYzA1Li42ZGQ0NGJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vbW9uX2Jpbi5jCisrKyBiL2RyaXZlcnMvdXNiL21vbi9tb25fYmluLmMKQEAgLTQ2MCw4ICs0NjAsOCBAQAogICAgIGNoYXIgZXZfdHlwZSwgaW50IHN0YXR1cykKIHsKIAljb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCA9ICZ1cmItPmVwLT5kZXNjOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHRpbWV2YWwgdHM7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgdXJiX2xlbmd0aDsKIAl1bnNpZ25lZCBpbnQgb2Zmc2V0OwogCXVuc2lnbmVkIGludCBsZW5ndGg7CkBAIC02MDAsMTAgKzYwMCwxMyBAQAogc3RhdGljIHZvaWQgbW9uX2Jpbl9lcnJvcih2b2lkICpkYXRhLCBzdHJ1Y3QgdXJiICp1cmIsIGludCBlcnJvcikKIHsKIAlzdHJ1Y3QgbW9uX3JlYWRlcl9iaW4gKnJwID0gZGF0YTsKKwlzdHJ1Y3QgdGltZXZhbCB0czsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBvZmZzZXQ7CiAJc3RydWN0IG1vbl9iaW5faGRyICplcDsKIAorCWRvX2dldHRpbWVvZmRheSgmdHMpOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnJwLT5iX2xvY2ssIGZsYWdzKTsKIAogCW9mZnNldCA9IG1vbl9idWZmX2FyZWFfYWxsb2MocnAsIFBLVF9TSVpFKTsKQEAgLTYyMyw2ICs2MjYsOCBAQAogCWVwLT5kZXZudW0gPSB1cmItPmRldi0+ZGV2bnVtOwogCWVwLT5idXNudW0gPSB1cmItPmRldi0+YnVzLT5idXNudW07CiAJZXAtPmlkID0gKHVuc2lnbmVkIGxvbmcpIHVyYjsKKwllcC0+dHNfc2VjID0gdHMudHZfc2VjOworCWVwLT50c191c2VjID0gdHMudHZfdXNlYzsKIAllcC0+c3RhdHVzID0gZXJyb3I7CiAKIAllcC0+ZmxhZ19zZXR1cCA9ICctJzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9tb25fdGV4dC5jIGIvZHJpdmVycy91c2IvbW9uL21vbl90ZXh0LmMKaW5kZXggMDQ3NTY4Zi4uMzFjMTE4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL21vbl90ZXh0LmMKKysrIGIvZHJpdmVycy91c2IvbW9uL21vbl90ZXh0LmMKQEAgLTE4MCw3ICsxODAsNyBAQAogCXVuc2lnbmVkIGludCBzdGFtcDsKIAogCWRvX2dldHRpbWVvZmRheSgmdHZhbCk7Ci0Jc3RhbXAgPSB0dmFsLnR2X3NlYyAmIDB4RkZGRjsJLyogMl4zMiA9IDQyOTQ5NjcyOTYuIExpbWl0IHRvIDQwOTZzLiAqLworCXN0YW1wID0gdHZhbC50dl9zZWMgJiAweEZGRjsJLyogMl4zMiA9IDQyOTQ5NjcyOTYuIExpbWl0IHRvIDQwOTZzLiAqLwogCXN0YW1wID0gc3RhbXAgKiAxMDAwMDAwICsgdHZhbC50dl91c2VjOwogCXJldHVybiBzdGFtcDsKIH0KQEAgLTI3MywxMiArMjczLDEyIEBACiAKIAllcC0+dHlwZSA9ICdFJzsKIAllcC0+aWQgPSAodW5zaWduZWQgbG9uZykgdXJiOwotCWVwLT5idXNudW0gPSAwOworCWVwLT5idXNudW0gPSB1cmItPmRldi0+YnVzLT5idXNudW07CiAJZXAtPmRldm51bSA9IHVyYi0+ZGV2LT5kZXZudW07CiAJZXAtPmVwbnVtID0gdXNiX2VuZHBvaW50X251bSgmdXJiLT5lcC0+ZGVzYyk7CiAJZXAtPnhmZXJ0eXBlID0gdXNiX2VuZHBvaW50X3R5cGUoJnVyYi0+ZXAtPmRlc2MpOwogCWVwLT5pc19pbiA9IHVzYl91cmJfZGlyX2luKHVyYik7Ci0JZXAtPnRzdGFtcCA9IDA7CisJZXAtPnRzdGFtcCA9IG1vbl9nZXRfdGltZXN0YW1wKCk7CiAJZXAtPmxlbmd0aCA9IDA7CiAJZXAtPnN0YXR1cyA9IGVycm9yOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcgYi9kcml2ZXJzL3VzYi9tdXNiL0tjb25maWcKaW5kZXggZDlkYjg2NC4uYjRjNzgzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL211c2IvS2NvbmZpZwpAQCAtMzcsNyArMzcsNyBAQAogCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQwogCWRlZmF1bHQgeSBpZiBBUkNIX0RBVklOQ0kKIAlkZWZhdWx0IHkgaWYgQVJDSF9PTUFQMjQzMAotCWRlZmF1bHQgeSBpZiBBUkNIX09NQVAzNFhYCisJZGVmYXVsdCB5IGlmIEFSQ0hfT01BUDMKIAlkZWZhdWx0IHkgaWYgKEJGNTR4ICYmICFCRjU0NCkKIAlkZWZhdWx0IHkgaWYgKEJGNTJ4ICYmICFCRjUyMiAmJiAhQkY1MjMpCiAKQEAgLTQ4LDcgKzQ4LDcgQEAKIAlkZXBlbmRzIG9uIFVTQl9NVVNCX0hEUkMgJiYgQVJDSF9PTUFQMjQzMAogCiBjb21tZW50ICJPTUFQIDM0M3ggaGlnaCBzcGVlZCBVU0Igc3VwcG9ydCIKLQlkZXBlbmRzIG9uIFVTQl9NVVNCX0hEUkMgJiYgQVJDSF9PTUFQMzRYWAorCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiBBUkNIX09NQVAzCiAKIGNvbW1lbnQgIkJsYWNrZmluIGhpZ2ggc3BlZWQgVVNCIFN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0JfTVVTQl9IRFJDICYmICgoQkY1NHggJiYgIUJGNTQ0KSB8fCAoQkY1MnggJiYgIUJGNTIyICYmICFCRjUyMykpCkBAIC0xNTMsNyArMTUzLDcgQEAKIGNvbmZpZyBVU0JfSU5WRU5UUkFfRE1BCiAJYm9vbAogCWRlcGVuZHMgb24gVVNCX01VU0JfSERSQyAmJiAhTVVTQl9QSU9fT05MWQotCWRlZmF1bHQgQVJDSF9PTUFQMjQzMCB8fCBBUkNIX09NQVAzNFhYIHx8IEJMQUNLRklOCisJZGVmYXVsdCBBUkNIX09NQVAyNDMwIHx8IEFSQ0hfT01BUDMgfHwgQkxBQ0tGSU4KIAloZWxwCiAJICBFbmFibGUgRE1BIHRyYW5zZmVycyB1c2luZyBNZW50b3IncyBlbmdpbmUuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYyBiL2RyaXZlcnMvdXNiL211c2IvYmxhY2tmaW4uYwppbmRleCBhZDI2ZTY1Li5iY2VlMTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2JsYWNrZmluLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9ibGFja2Zpbi5jCkBAIC0zMCw3ICszMCw2IEBACiAJdm9pZCBfX2lvbWVtICpmaWZvID0gaHdfZXAtPmZpZm87CiAJdm9pZCBfX2lvbWVtICplcGlvID0gaHdfZXAtPnJlZ3M7CiAJdTggZXBudW0gPSBod19lcC0+ZXBudW07Ci0JdTE2IGRtYV9yZWcgPSAwOwogCiAJcHJlZmV0Y2goKHU4ICopc3JjKTsKIApAQCAtNDIsMTUgKzQxLDE3IEBACiAJZHVtcF9maWZvX2RhdGEoc3JjLCBsZW4pOwogCiAJaWYgKCFBTk9NQUxZXzA1MDAwMzgwICYmIGVwbnVtICE9IDApIHsKLQkJZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBpbnQpc3JjLAotCQkJKHVuc2lnbmVkIGludCkoc3JjICsgbGVuKSk7CisJCXUxNiBkbWFfcmVnOworCisJCWZsdXNoX2RjYWNoZV9yYW5nZSgodW5zaWduZWQgbG9uZylzcmMsCisJCQkodW5zaWduZWQgbG9uZykoc3JjICsgbGVuKSk7CiAKIAkJLyogU2V0dXAgRE1BIGFkZHJlc3MgcmVnaXN0ZXIgKi8KLQkJZG1hX3JlZyA9ICh1MTYpICgodTMyKSBzcmMgJiAweEZGRkYpOworCQlkbWFfcmVnID0gKHUzMilzcmM7CiAJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQUREUl9MT1cpLCBkbWFfcmVnKTsKIAkJU1NZTkMoKTsKIAotCQlkbWFfcmVnID0gKHUxNikgKCgodTMyKSBzcmMgPj4gMTYpICYgMHhGRkZGKTsKKwkJZG1hX3JlZyA9ICh1MzIpc3JjID4+IDE2OwogCQliZmluX3dyaXRlMTYoVVNCX0RNQV9SRUcoZXBudW0sIFVTQl9ETUF4X0FERFJfSElHSCksIGRtYV9yZWcpOwogCQlTU1lOQygpOwogCkBAIC03OSwxMiArODAsOSBAQAogCQlTU1lOQygpOwogCiAJCWlmICh1bmxpa2VseSgodW5zaWduZWQgbG9uZylzcmMgJiAweDAxKSkKLQkJCW91dHN3XzgoKHVuc2lnbmVkIGxvbmcpZmlmbywgc3JjLAotCQkJCWxlbiAmIDB4MDEgPyAobGVuID4+IDEpICsgMSA6IGxlbiA+PiAxKTsKKwkJCW91dHN3XzgoKHVuc2lnbmVkIGxvbmcpZmlmbywgc3JjLCAobGVuICsgMSkgPj4gMSk7CiAJCWVsc2UKLQkJCW91dHN3KCh1bnNpZ25lZCBsb25nKWZpZm8sIHNyYywKLQkJCQlsZW4gJiAweDAxID8gKGxlbiA+PiAxKSArIDEgOiBsZW4gPj4gMSk7Ci0KKwkJCW91dHN3KCh1bnNpZ25lZCBsb25nKWZpZm8sIHNyYywgKGxlbiArIDEpID4+IDEpOwogCX0KIH0KIC8qCkBAIC05NCwxOSArOTIsMTkgQEAKIHsKIAl2b2lkIF9faW9tZW0gKmZpZm8gPSBod19lcC0+ZmlmbzsKIAl1OCBlcG51bSA9IGh3X2VwLT5lcG51bTsKLQl1MTYgZG1hX3JlZyA9IDA7CiAKIAlpZiAoQU5PTUFMWV8wNTAwMDQ2NyAmJiBlcG51bSAhPSAwKSB7CisJCXUxNiBkbWFfcmVnOwogCi0JCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBpbnQpZHN0LAotCQkJKHVuc2lnbmVkIGludCkoZHN0ICsgbGVuKSk7CisJCWludmFsaWRhdGVfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWRzdCwKKwkJCSh1bnNpZ25lZCBsb25nKShkc3QgKyBsZW4pKTsKIAogCQkvKiBTZXR1cCBETUEgYWRkcmVzcyByZWdpc3RlciAqLwotCQlkbWFfcmVnID0gKHUxNikgKCh1MzIpIGRzdCAmIDB4RkZGRik7CisJCWRtYV9yZWcgPSAodTMyKWRzdDsKIAkJYmZpbl93cml0ZTE2KFVTQl9ETUFfUkVHKGVwbnVtLCBVU0JfRE1BeF9BRERSX0xPVyksIGRtYV9yZWcpOwogCQlTU1lOQygpOwogCi0JCWRtYV9yZWcgPSAodTE2KSAoKCh1MzIpIGRzdCA+PiAxNikgJiAweEZGRkYpOworCQlkbWFfcmVnID0gKHUzMilkc3QgPj4gMTY7CiAJCWJmaW5fd3JpdGUxNihVU0JfRE1BX1JFRyhlcG51bSwgVVNCX0RNQXhfQUREUl9ISUdIKSwgZG1hX3JlZyk7CiAJCVNTWU5DKCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuYyBiL2RyaXZlcnMvdXNiL211c2IvY3BwaV9kbWEuYwppbmRleCBhNDRhNDUwLi4zYzY5YTc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL2NwcGlfZG1hLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9jcHBpX2RtYS5jCkBAIC0xMTkxLDggKzExOTEsMTMgQEAKIAogCQliZCA9IHR4X2NoLT5oZWFkOwogCisJCS8qCisJCSAqIElmIEhlYWQgaXMgbnVsbCB0aGVuIHRoaXMgY291bGQgbWVhbiB0aGF0IGEgYWJvcnQgaW50ZXJydXB0CisJCSAqIHRoYXQgbmVlZHMgdG8gYmUgYWNrbm93bGVkZ2VkLgorCQkgKi8KIAkJaWYgKE5VTEwgPT0gYmQpIHsKIAkJCURCRygxLCAibnVsbCBCRFxuIik7CisJCQl0eF9yYW0tPnR4X2NvbXBsZXRlID0gMDsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTE0MTIsMTUgKzE0MTcsNiBAQAogCiAJaWYgKGNwcGlfY2gtPnRyYW5zbWl0KSB7CiAJCXN0cnVjdCBjcHBpX3R4X3N0YXRlcmFtIF9faW9tZW0gKnR4X3JhbTsKLQkJaW50CQkJZW5hYmxlZDsKLQotCQkvKiBtYXNrIGludGVycnVwdHMgcmFpc2VkIHRvIHNpZ25hbCB0ZWFyZG93biBjb21wbGV0ZS4gICovCi0JCWVuYWJsZWQgPSBtdXNiX3JlYWRsKHRpYmFzZSwgREFWSU5DSV9UWENQUElfSU5URU5BQl9SRUcpCi0JCQkJJiAoMSA8PCBjcHBpX2NoLT5pbmRleCk7Ci0JCWlmIChlbmFibGVkKQotCQkJbXVzYl93cml0ZWwodGliYXNlLCBEQVZJTkNJX1RYQ1BQSV9JTlRDTFJfUkVHLAotCQkJCQkoMSA8PCBjcHBpX2NoLT5pbmRleCkpOwotCiAJCS8qIFJFVklTSVQgcHV0IHRpbWVvdXRzIG9uIHRoZXNlIGNvbnRyb2xsZXIgaGFuZHNoYWtlcyAqLwogCiAJCWNwcGlfZHVtcF90eCg2LCBjcHBpX2NoLCAiICh0ZWFyZG93bikiKTsKQEAgLTE0MzUsNyArMTQzMSw2IEBACiAJCWRvIHsKIAkJCXZhbHVlID0gbXVzYl9yZWFkbCgmdHhfcmFtLT50eF9jb21wbGV0ZSwgMCk7CiAJCX0gd2hpbGUgKDB4RkZGRkZGRkMgIT0gdmFsdWUpOwotCQltdXNiX3dyaXRlbCgmdHhfcmFtLT50eF9jb21wbGV0ZSwgMCwgMHhGRkZGRkZGQyk7CiAKIAkJLyogRklYTUUgY2xlYW4gdXAgdGhlIHRyYW5zZmVyIHN0YXRlIC4uLiBoZXJlPwogCQkgKiB0aGUgY29tcGxldGlvbiByb3V0aW5lIHNob3VsZCBnZXQgY2FsbGVkIHdpdGgKQEAgLTE0NDgsMjMgKzE0NDMsMTUgQEAKIAkJbXVzYl93cml0ZXcocmVncywgTVVTQl9UWENTUiwgdmFsdWUpOwogCQltdXNiX3dyaXRldyhyZWdzLCBNVVNCX1RYQ1NSLCB2YWx1ZSk7CiAKLQkJLyogV2hpbGUgd2Ugc2NydWIgdGhlIFRYIHN0YXRlIFJBTSwgZW5zdXJlIHRoYXQgd2UgY2xlYW4KLQkJICogdXAgYW55IGludGVycnVwdCB0aGF0J3MgY3VycmVudGx5IGFzc2VydGVkOgorCQkvKgogCQkgKiAxLiBXcml0ZSB0byBjb21wbGV0aW9uIFB0ciB2YWx1ZSAweDEoYml0IDAgc2V0KQogCQkgKiAgICAod3JpdGUgYmFjayBtb2RlKQotCQkgKiAyLiBXcml0ZSB0byBjb21wbGV0aW9uIFB0ciB2YWx1ZSAweDAoYml0IDAgY2xlYXJlZCkKLQkJICogICAgKGNvbXBhcmUgbW9kZSkKLQkJICogVmFsdWUgd3JpdHRlbiBpcyBjb21wYXJlZChmb3IgYml0cyAzMToyKSBhbmQgd2hlbgotCQkgKiBlcXVhbCwgaW50ZXJydXB0IGlzIGRlYXNzZXJ0ZWQuCisJCSAqIDIuIFdhaXQgZm9yIGFib3J0IGludGVycnVwdCBhbmQgdGhlbiBwdXQgdGhlIGNoYW5uZWwgaW4KKwkJICogICAgY29tcGFyZSBtb2RlIGJ5IHdyaXRpbmcgMSB0byB0aGUgdHhfY29tcGxldGUgcmVnaXN0ZXIuCiAJCSAqLwogCQljcHBpX3Jlc2V0X3R4KHR4X3JhbSwgMSk7Ci0JCW11c2Jfd3JpdGVsKCZ0eF9yYW0tPnR4X2NvbXBsZXRlLCAwLCAwKTsKLQotCQkvKiByZS1lbmFibGUgaW50ZXJydXB0ICovCi0JCWlmIChlbmFibGVkKQotCQkJbXVzYl93cml0ZWwodGliYXNlLCBEQVZJTkNJX1RYQ1BQSV9JTlRFTkFCX1JFRywKLQkJCQkJKDEgPDwgY3BwaV9jaC0+aW5kZXgpKTsKLQorCQljcHBpX2NoLT5oZWFkID0gMDsKKwkJbXVzYl93cml0ZWwoJnR4X3JhbS0+dHhfY29tcGxldGUsIDAsIDEpOwogCQljcHBpX2R1bXBfdHgoNSwgY3BwaV9jaCwgIiAoZG9uZSB0ZWFyZG93bikiKTsKIAogCQkvKiBSRVZJU0lUIHR4IHNpZGUgX3Nob3VsZF8gY2xlYW4gdXAgdGhlIHNhbWUgd2F5CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL2RhdmluY2kuYyBiL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jCmluZGV4IDY2OTEzODEuLmE4ODNmOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvZGF2aW5jaS5jCkBAIC0yNzQsNyArMjc0LDcgQEAKIAkvKiBOT1RFOiBEYVZpbmNpIHNoYWRvd3MgdGhlIE1lbnRvciBJUlFzLiAgRG9uJ3QgbWFuYWdlIHRoZW0gdGhyb3VnaAogCSAqIHRoZSBNZW50b3IgcmVnaXN0ZXJzIChleGNlcHQgZm9yIHNldHVwKSwgdXNlIHRoZSBUSSBvbmVzIGFuZCBFT0kuCiAJICoKLQkgKiBEb2NzIGRlc2NyaWJlIGlycSAidmVjdG9yIiByZWdpc3RlcnMgYXNvY2lhdGVkIHdpdGggdGhlIENQUEkgYW5kCisJICogRG9jcyBkZXNjcmliZSBpcnEgInZlY3RvciIgcmVnaXN0ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGUgQ1BQSSBhbmQKIAkgKiBVU0IgRU9JIHJlZ2lzdGVycy4gIFRoZXNlIGhvbGQgYSBiaXRtYXNrIGNvcnJlc3BvbmRpbmcgdG8gdGhlCiAJICogY3VycmVudCBJUlEsIG5vdCBhbiBpcnEgaGFuZGxlciBhZGRyZXNzLiAgV291bGQgdXNpbmcgdGhvc2UgYml0cwogCSAqIHJlc29sdmUgc29tZSBvZiB0aGUgcmFjZXMgb2JzZXJ2ZWQgaW4gdGhpcyBkaXNwYXRjaCBjb2RlPz8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMgYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5jCmluZGV4IDVlYjkzMTguLmI0YmJmOGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuYwpAQCAtNTU3LDYgKzU1Nyw2OSBAQAogCQloYW5kbGVkID0gSVJRX0hBTkRMRUQ7CiAJfQogCisKKwlpZiAoaW50X3VzYiAmIE1VU0JfSU5UUl9TVVNQRU5EKSB7CisJCURCRygxLCAiU1VTUEVORCAoJXMpIGRldmN0bCAlMDJ4IHBvd2VyICUwMnhcbiIsCisJCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiKSwgZGV2Y3RsLCBwb3dlcik7CisJCWhhbmRsZWQgPSBJUlFfSEFORExFRDsKKworCQlzd2l0Y2ggKG11c2ItPnhjZWl2LT5zdGF0ZSkgeworI2lmZGVmCUNPTkZJR19VU0JfTVVTQl9PVEcKKwkJY2FzZSBPVEdfU1RBVEVfQV9QRVJJUEhFUkFMOgorCQkJLyogV2UgYWxzbyBjb21lIGhlcmUgaWYgdGhlIGNhYmxlIGlzIHJlbW92ZWQsIHNpbmNlCisJCQkgKiB0aGlzIHNpbGljb24gZG9lc24ndCByZXBvcnQgSUQtbm8tbG9uZ2VyLWdyb3VuZGVkLgorCQkJICoKKwkJCSAqIFdlIGRlcGVuZCBvbiBUKGFfd2FpdF9iY29uKSB0byBzaHV0IHVzIGRvd24sIGFuZAorCQkJICogaG9wZSB1c2VycyBkb24ndCBkbyBhbnl0aGluZyBkaWNleSBkdXJpbmcgdGhpcworCQkJICogdW5kZXNpcmVkIGRldG91ciB0aHJvdWdoIEFfV0FJVF9CQ09OLgorCQkJICovCisJCQltdXNiX2hucF9zdG9wKG11c2IpOworCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIobXVzYl90b19oY2QobXVzYikpOworCQkJbXVzYl9yb290X2Rpc2Nvbm5lY3QobXVzYik7CisJCQltdXNiX3BsYXRmb3JtX3RyeV9pZGxlKG11c2IsIGppZmZpZXMKKwkJCQkJKyBtc2Vjc190b19qaWZmaWVzKG11c2ItPmFfd2FpdF9iY29uCisJCQkJCQk/IDogT1RHX1RJTUVfQV9XQUlUX0JDT04pKTsKKworCQkJYnJlYWs7CisjZW5kaWYKKwkJY2FzZSBPVEdfU1RBVEVfQl9JRExFOgorCQkJaWYgKCFtdXNiLT5pc19hY3RpdmUpCisJCQkJYnJlYWs7CisJCWNhc2UgT1RHX1NUQVRFX0JfUEVSSVBIRVJBTDoKKwkJCW11c2JfZ19zdXNwZW5kKG11c2IpOworCQkJbXVzYi0+aXNfYWN0aXZlID0gaXNfb3RnX2VuYWJsZWQobXVzYikKKwkJCQkJJiYgbXVzYi0+eGNlaXYtPmdhZGdldC0+Yl9obnBfZW5hYmxlOworCQkJaWYgKG11c2ItPmlzX2FjdGl2ZSkgeworI2lmZGVmCUNPTkZJR19VU0JfTVVTQl9PVEcKKwkJCQltdXNiLT54Y2Vpdi0+c3RhdGUgPSBPVEdfU1RBVEVfQl9XQUlUX0FDT047CisJCQkJREJHKDEsICJITlA6IFNldHRpbmcgdGltZXIgZm9yIGJfYXNlMF9icnN0XG4iKTsKKwkJCQltb2RfdGltZXIoJm11c2ItPm90Z190aW1lciwgamlmZmllcworCQkJCQkrIG1zZWNzX3RvX2ppZmZpZXMoCisJCQkJCQkJT1RHX1RJTUVfQl9BU0UwX0JSU1QpKTsKKyNlbmRpZgorCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgT1RHX1NUQVRFX0FfV0FJVF9CQ09OOgorCQkJaWYgKG11c2ItPmFfd2FpdF9iY29uICE9IDApCisJCQkJbXVzYl9wbGF0Zm9ybV90cnlfaWRsZShtdXNiLCBqaWZmaWVzCisJCQkJCSsgbXNlY3NfdG9famlmZmllcyhtdXNiLT5hX3dhaXRfYmNvbikpOworCQkJYnJlYWs7CisJCWNhc2UgT1RHX1NUQVRFX0FfSE9TVDoKKwkJCW11c2ItPnhjZWl2LT5zdGF0ZSA9IE9UR19TVEFURV9BX1NVU1BFTkQ7CisJCQltdXNiLT5pc19hY3RpdmUgPSBpc19vdGdfZW5hYmxlZChtdXNiKQorCQkJCQkmJiBtdXNiLT54Y2Vpdi0+aG9zdC0+Yl9obnBfZW5hYmxlOworCQkJYnJlYWs7CisJCWNhc2UgT1RHX1NUQVRFX0JfSE9TVDoKKwkJCS8qIFRyYW5zaXRpb24gdG8gQl9QRVJJUEhFUkFMLCBzZWUgNi44LjIuNiBwIDQ0ICovCisJCQlEQkcoMSwgIlJFVklTSVQ6IFNVU1BFTkQgYXMgQl9IT1NUXG4iKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogInNob3VsZCBub3QgaGFwcGVuIiAqLworCQkJbXVzYi0+aXNfYWN0aXZlID0gMDsKKwkJCWJyZWFrOworCQl9CisJfQorCiAJaWYgKGludF91c2IgJiBNVVNCX0lOVFJfQ09OTkVDVCkgewogCQlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gbXVzYl90b19oY2QobXVzYik7CiAKQEAgLTYyNSwxMzYgKzY4OCw2IEBACiAJfQogI2VuZGlmCS8qIENPTkZJR19VU0JfTVVTQl9IRFJDX0hDRCAqLwogCi0JLyogbWVudG9yIHNhdmVzIGEgYml0OiBidXMgcmVzZXQgYW5kIGJhYmJsZSBzaGFyZSB0aGUgc2FtZSBpcnEuCi0JICogb25seSBob3N0IHNlZXMgYmFiYmxlOyBvbmx5IHBlcmlwaGVyYWwgc2VlcyBidXMgcmVzZXQuCi0JICovCi0JaWYgKGludF91c2IgJiBNVVNCX0lOVFJfUkVTRVQpIHsKLQkJaWYgKGlzX2hvc3RfY2FwYWJsZSgpICYmIChkZXZjdGwgJiBNVVNCX0RFVkNUTF9ITSkgIT0gMCkgewotCQkJLyoKLQkJCSAqIExvb2tzIGxpa2Ugbm9uLUhTIEJBQkJMRSBjYW4gYmUgaWdub3JlZCwgYnV0Ci0JCQkgKiBIUyBCQUJCTEUgaXMgYW4gZXJyb3IgY29uZGl0aW9uLiBGb3IgSFMgdGhlIHNvbHV0aW9uCi0JCQkgKiBpcyB0byBhdm9pZCBiYWJibGUgaW4gdGhlIGZpcnN0IHBsYWNlIGFuZCBmaXggd2hhdAotCQkJICogY2F1c2VkIEJBQkJMRS4gV2hlbiBIUyBCQUJCTEUgaGFwcGVucyB3ZSBjYW4gb25seQotCQkJICogc3RvcCB0aGUgc2Vzc2lvbi4KLQkJCSAqLwotCQkJaWYgKGRldmN0bCAmIChNVVNCX0RFVkNUTF9GU0RFViB8IE1VU0JfREVWQ1RMX0xTREVWKSkKLQkJCQlEQkcoMSwgIkJBQkJMRSBkZXZjdGw6ICUwMnhcbiIsIGRldmN0bCk7Ci0JCQllbHNlIHsKLQkJCQlFUlIoIlN0b3BwaW5nIGhvc3Qgc2Vzc2lvbiAtLSBiYWJibGVcbiIpOwotCQkJCW11c2Jfd3JpdGViKG1iYXNlLCBNVVNCX0RFVkNUTCwgMCk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoaXNfcGVyaXBoZXJhbF9jYXBhYmxlKCkpIHsKLQkJCURCRygxLCAiQlVTIFJFU0VUIGFzICVzXG4iLCBvdGdfc3RhdGVfc3RyaW5nKG11c2IpKTsKLQkJCXN3aXRjaCAobXVzYi0+eGNlaXYtPnN0YXRlKSB7Ci0jaWZkZWYgQ09ORklHX1VTQl9PVEcKLQkJCWNhc2UgT1RHX1NUQVRFX0FfU1VTUEVORDoKLQkJCQkvKiBXZSBuZWVkIHRvIGlnbm9yZSBkaXNjb25uZWN0IG9uIHN1c3BlbmQKLQkJCQkgKiBvdGhlcndpc2UgdHVzYiAyLjAgd29uJ3QgcmVjb25uZWN0IGFmdGVyIGEKLQkJCQkgKiBwb3dlciBjeWNsZSwgd2hpY2ggYnJlYWtzIG90ZyBjb21wbGlhbmNlLgotCQkJCSAqLwotCQkJCW11c2ItPmlnbm9yZV9kaXNjb25uZWN0ID0gMTsKLQkJCQltdXNiX2dfcmVzZXQobXVzYik7Ci0JCQkJLyogRkFMTFRIUk9VR0ggKi8KLQkJCWNhc2UgT1RHX1NUQVRFX0FfV0FJVF9CQ09OOgkvKiBPUFQgVEQuNC43LTkwMG1zICovCi0JCQkJLyogbmV2ZXIgdXNlIGludmFsaWQgVChhX3dhaXRfYmNvbikgKi8KLQkJCQlEQkcoMSwgIkhOUDogaW4gJXMsICVkIG1zZWMgdGltZW91dFxuIiwKLQkJCQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYiksCi0JCQkJCQlUQV9XQUlUX0JDT04obXVzYikpOwotCQkJCW1vZF90aW1lcigmbXVzYi0+b3RnX3RpbWVyLCBqaWZmaWVzCi0JCQkJCSsgbXNlY3NfdG9famlmZmllcyhUQV9XQUlUX0JDT04obXVzYikpKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgT1RHX1NUQVRFX0FfUEVSSVBIRVJBTDoKLQkJCQltdXNiLT5pZ25vcmVfZGlzY29ubmVjdCA9IDA7Ci0JCQkJZGVsX3RpbWVyKCZtdXNiLT5vdGdfdGltZXIpOwotCQkJCW11c2JfZ19yZXNldChtdXNiKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgT1RHX1NUQVRFX0JfV0FJVF9BQ09OOgotCQkJCURCRygxLCAiSE5QOiBSRVNFVCAoJXMpLCB0byBiX3BlcmlwaGVyYWxcbiIsCi0JCQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYikpOwotCQkJCW11c2ItPnhjZWl2LT5zdGF0ZSA9IE9UR19TVEFURV9CX1BFUklQSEVSQUw7Ci0JCQkJbXVzYl9nX3Jlc2V0KG11c2IpOwotCQkJCWJyZWFrOwotI2VuZGlmCi0JCQljYXNlIE9UR19TVEFURV9CX0lETEU6Ci0JCQkJbXVzYi0+eGNlaXYtPnN0YXRlID0gT1RHX1NUQVRFX0JfUEVSSVBIRVJBTDsKLQkJCQkvKiBGQUxMVEhST1VHSCAqLwotCQkJY2FzZSBPVEdfU1RBVEVfQl9QRVJJUEhFUkFMOgotCQkJCW11c2JfZ19yZXNldChtdXNiKTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJREJHKDEsICJVbmhhbmRsZWQgQlVTIFJFU0VUIGFzICVzXG4iLAotCQkJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2IpKTsKLQkJCX0KLQkJfQotCi0JCWhhbmRsZWQgPSBJUlFfSEFORExFRDsKLQl9Ci0Jc2NoZWR1bGVfd29yaygmbXVzYi0+aXJxX3dvcmspOwotCi0JcmV0dXJuIGhhbmRsZWQ7Ci19Ci0KLS8qCi0gKiBJbnRlcnJ1cHQgU2VydmljZSBSb3V0aW5lIHRvIHJlY29yZCBVU0IgImdsb2JhbCIgaW50ZXJydXB0cy4KLSAqIFNpbmNlIHRoZXNlIGRvIG5vdCBoYXBwZW4gb2Z0ZW4gYW5kIHNpZ25pZnkgdGhpbmdzIG9mCi0gKiBwYXJhbW91bnQgaW1wb3J0YW5jZSwgaXQgc2VlbXMgT0sgdG8gY2hlY2sgdGhlbSBpbmRpdmlkdWFsbHk7Ci0gKiB0aGUgb3JkZXIgb2YgdGhlIHRlc3RzIGlzIHNwZWNpZmllZCBpbiB0aGUgbWFudWFsCi0gKgotICogQHBhcmFtIG11c2IgaW5zdGFuY2UgcG9pbnRlcgotICogQHBhcmFtIGludF91c2IgcmVnaXN0ZXIgY29udGVudHMKLSAqIEBwYXJhbSBkZXZjdGwKLSAqIEBwYXJhbSBwb3dlcgotICovCi1zdGF0aWMgaXJxcmV0dXJuX3QgbXVzYl9zdGFnZTJfaXJxKHN0cnVjdCBtdXNiICptdXNiLCB1OCBpbnRfdXNiLAotCQkJCXU4IGRldmN0bCwgdTggcG93ZXIpCi17Ci0JaXJxcmV0dXJuX3QgaGFuZGxlZCA9IElSUV9OT05FOwotCi0jaWYgMAotLyogUkVWSVNJVCAuLi4gdGhpcyB3b3VsZCBiZSBmb3IgbXVsdGlwbGV4aW5nIHBlcmlvZGljIGVuZHBvaW50cywgb3IKLSAqIHN1cHBvcnRpbmcgdHJhbnNmZXIgcGhhc2luZyB0byBwcmV2ZW50IGV4Y2VlZGluZyBJU08gYmFuZHdpZHRoCi0gKiBsaW1pdHMgb2YgYSBnaXZlbiBmcmFtZSBvciBtaWNyb2ZyYW1lLgotICoKLSAqIEl0J3Mgbm90IG5lZWRlZCBmb3IgcGVyaXBoZXJhbCBzaWRlLCB3aGljaCBkZWRpY2F0ZXMgZW5kcG9pbnRzOwotICogdGhvdWdoIGl0IF9taWdodF8gdXNlIFNPRiBpcnFzIGZvciBvdGhlciBwdXJwb3Nlcy4KLSAqCi0gKiBBbmQgaXQncyBub3QgY3VycmVudGx5IG5lZWRlZCBmb3IgaG9zdCBzaWRlLCB3aGljaCBhbHNvIGRlZGljYXRlcwotICogZW5kcG9pbnRzLCByZWxpZXMgb24gVFgvUlggaW50ZXJ2YWwgcmVnaXN0ZXJzLCBhbmQgaXNuJ3QgY2xhaW1lZAotICogdG8gc3VwcG9ydCBJU08gdHJhbnNmZXJzIHlldC4KLSAqLwotCWlmIChpbnRfdXNiICYgTVVTQl9JTlRSX1NPRikgewotCQl2b2lkIF9faW9tZW0gKm1iYXNlID0gbXVzYi0+bXJlZ3M7Ci0JCXN0cnVjdCBtdXNiX2h3X2VwCSplcDsKLQkJdTggZXBudW07Ci0JCXUxNiBmcmFtZTsKLQotCQlEQkcoNiwgIlNUQVJUX09GX0ZSQU1FXG4iKTsKLQkJaGFuZGxlZCA9IElSUV9IQU5ETEVEOwotCi0JCS8qIHN0YXJ0IGFueSBwZXJpb2RpYyBUeCB0cmFuc2ZlcnMgd2FpdGluZyBmb3IgY3VycmVudCBmcmFtZSAqLwotCQlmcmFtZSA9IG11c2JfcmVhZHcobWJhc2UsIE1VU0JfRlJBTUUpOwotCQllcCA9IG11c2ItPmVuZHBvaW50czsKLQkJZm9yIChlcG51bSA9IDE7IChlcG51bSA8IG11c2ItPm5yX2VuZHBvaW50cykKLQkJCQkJJiYgKG11c2ItPmVwbWFzayA+PSAoMSA8PCBlcG51bSkpOwotCQkJCWVwbnVtKyssIGVwKyspIHsKLQkJCS8qCi0JCQkgKiBGSVhNRSBoYW5kbGUgZnJhbWVjb3VudGVyIHdyYXBzICgxMiBiaXRzKQotCQkJICogZWxpbWluYXRlIGR1cGxpY2F0ZWQgU3RhcnRVcmIgbG9naWMKLQkJCSAqLwotCQkJaWYgKGVwLT5kd1dhaXRGcmFtZSA+PSBmcmFtZSkgewotCQkJCWVwLT5kd1dhaXRGcmFtZSA9IDA7Ci0JCQkJcHJfZGVidWcoIlNPRiAtLT4gcGVyaW9kaWMgVFglcyBvbiAlZFxuIiwKLQkJCQkJZXAtPnR4X2NoYW5uZWwgPyAiIERNQSIgOiAiIiwKLQkJCQkJZXBudW0pOwotCQkJCWlmICghZXAtPnR4X2NoYW5uZWwpCi0JCQkJCW11c2JfaF90eF9zdGFydChtdXNiLCBlcG51bSk7Ci0JCQkJZWxzZQotCQkJCQljcHBpX2hvc3RkbWFfc3RhcnQobXVzYiwgZXBudW0pOwotCQkJfQotCQl9CQkvKiBlbmQgb2YgZm9yIGxvb3AgKi8KLQl9Ci0jZW5kaWYKLQogCWlmICgoaW50X3VzYiAmIE1VU0JfSU5UUl9ESVNDT05ORUNUKSAmJiAhbXVzYi0+aWdub3JlX2Rpc2Nvbm5lY3QpIHsKIAkJREJHKDEsICJESVNDT05ORUNUICglcykgYXMgJXMsIGRldmN0bCAlMDJ4XG4iLAogCQkJCW90Z19zdGF0ZV9zdHJpbmcobXVzYiksCkBAIC04MDMsNjkgKzczNiwxMTggQEAKIAkJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2IpKTsKIAkJCWJyZWFrOwogCQl9Ci0KLQkJc2NoZWR1bGVfd29yaygmbXVzYi0+aXJxX3dvcmspOwogCX0KIAotCWlmIChpbnRfdXNiICYgTVVTQl9JTlRSX1NVU1BFTkQpIHsKLQkJREJHKDEsICJTVVNQRU5EICglcykgZGV2Y3RsICUwMnggcG93ZXIgJTAyeFxuIiwKLQkJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2IpLCBkZXZjdGwsIHBvd2VyKTsKKwkvKiBtZW50b3Igc2F2ZXMgYSBiaXQ6IGJ1cyByZXNldCBhbmQgYmFiYmxlIHNoYXJlIHRoZSBzYW1lIGlycS4KKwkgKiBvbmx5IGhvc3Qgc2VlcyBiYWJibGU7IG9ubHkgcGVyaXBoZXJhbCBzZWVzIGJ1cyByZXNldC4KKwkgKi8KKwlpZiAoaW50X3VzYiAmIE1VU0JfSU5UUl9SRVNFVCkgeworCQloYW5kbGVkID0gSVJRX0hBTkRMRUQ7CisJCWlmIChpc19ob3N0X2NhcGFibGUoKSAmJiAoZGV2Y3RsICYgTVVTQl9ERVZDVExfSE0pICE9IDApIHsKKwkJCS8qCisJCQkgKiBMb29rcyBsaWtlIG5vbi1IUyBCQUJCTEUgY2FuIGJlIGlnbm9yZWQsIGJ1dAorCQkJICogSFMgQkFCQkxFIGlzIGFuIGVycm9yIGNvbmRpdGlvbi4gRm9yIEhTIHRoZSBzb2x1dGlvbgorCQkJICogaXMgdG8gYXZvaWQgYmFiYmxlIGluIHRoZSBmaXJzdCBwbGFjZSBhbmQgZml4IHdoYXQKKwkJCSAqIGNhdXNlZCBCQUJCTEUuIFdoZW4gSFMgQkFCQkxFIGhhcHBlbnMgd2UgY2FuIG9ubHkKKwkJCSAqIHN0b3AgdGhlIHNlc3Npb24uCisJCQkgKi8KKwkJCWlmIChkZXZjdGwgJiAoTVVTQl9ERVZDVExfRlNERVYgfCBNVVNCX0RFVkNUTF9MU0RFVikpCisJCQkJREJHKDEsICJCQUJCTEUgZGV2Y3RsOiAlMDJ4XG4iLCBkZXZjdGwpOworCQkJZWxzZSB7CisJCQkJRVJSKCJTdG9wcGluZyBob3N0IHNlc3Npb24gLS0gYmFiYmxlXG4iKTsKKwkJCQltdXNiX3dyaXRlYihtdXNiLT5tcmVncywgTVVTQl9ERVZDVEwsIDApOworCQkJfQorCQl9IGVsc2UgaWYgKGlzX3BlcmlwaGVyYWxfY2FwYWJsZSgpKSB7CisJCQlEQkcoMSwgIkJVUyBSRVNFVCBhcyAlc1xuIiwgb3RnX3N0YXRlX3N0cmluZyhtdXNiKSk7CisJCQlzd2l0Y2ggKG11c2ItPnhjZWl2LT5zdGF0ZSkgeworI2lmZGVmIENPTkZJR19VU0JfT1RHCisJCQljYXNlIE9UR19TVEFURV9BX1NVU1BFTkQ6CisJCQkJLyogV2UgbmVlZCB0byBpZ25vcmUgZGlzY29ubmVjdCBvbiBzdXNwZW5kCisJCQkJICogb3RoZXJ3aXNlIHR1c2IgMi4wIHdvbid0IHJlY29ubmVjdCBhZnRlciBhCisJCQkJICogcG93ZXIgY3ljbGUsIHdoaWNoIGJyZWFrcyBvdGcgY29tcGxpYW5jZS4KKwkJCQkgKi8KKwkJCQltdXNiLT5pZ25vcmVfZGlzY29ubmVjdCA9IDE7CisJCQkJbXVzYl9nX3Jlc2V0KG11c2IpOworCQkJCS8qIEZBTExUSFJPVUdIICovCisJCQljYXNlIE9UR19TVEFURV9BX1dBSVRfQkNPTjoJLyogT1BUIFRELjQuNy05MDBtcyAqLworCQkJCS8qIG5ldmVyIHVzZSBpbnZhbGlkIFQoYV93YWl0X2Jjb24pICovCisJCQkJREJHKDEsICJITlA6IGluICVzLCAlZCBtc2VjIHRpbWVvdXRcbiIsCisJCQkJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2IpLAorCQkJCQkJVEFfV0FJVF9CQ09OKG11c2IpKTsKKwkJCQltb2RfdGltZXIoJm11c2ItPm90Z190aW1lciwgamlmZmllcworCQkJCQkrIG1zZWNzX3RvX2ppZmZpZXMoVEFfV0FJVF9CQ09OKG11c2IpKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIE9UR19TVEFURV9BX1BFUklQSEVSQUw6CisJCQkJbXVzYi0+aWdub3JlX2Rpc2Nvbm5lY3QgPSAwOworCQkJCWRlbF90aW1lcigmbXVzYi0+b3RnX3RpbWVyKTsKKwkJCQltdXNiX2dfcmVzZXQobXVzYik7CisJCQkJYnJlYWs7CisJCQljYXNlIE9UR19TVEFURV9CX1dBSVRfQUNPTjoKKwkJCQlEQkcoMSwgIkhOUDogUkVTRVQgKCVzKSwgdG8gYl9wZXJpcGhlcmFsXG4iLAorCQkJCQlvdGdfc3RhdGVfc3RyaW5nKG11c2IpKTsKKwkJCQltdXNiLT54Y2Vpdi0+c3RhdGUgPSBPVEdfU1RBVEVfQl9QRVJJUEhFUkFMOworCQkJCW11c2JfZ19yZXNldChtdXNiKTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJY2FzZSBPVEdfU1RBVEVfQl9JRExFOgorCQkJCW11c2ItPnhjZWl2LT5zdGF0ZSA9IE9UR19TVEFURV9CX1BFUklQSEVSQUw7CisJCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJCWNhc2UgT1RHX1NUQVRFX0JfUEVSSVBIRVJBTDoKKwkJCQltdXNiX2dfcmVzZXQobXVzYik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCURCRygxLCAiVW5oYW5kbGVkIEJVUyBSRVNFVCBhcyAlc1xuIiwKKwkJCQkJb3RnX3N0YXRlX3N0cmluZyhtdXNiKSk7CisJCQl9CisJCX0KKwl9CisKKyNpZiAwCisvKiBSRVZJU0lUIC4uLiB0aGlzIHdvdWxkIGJlIGZvciBtdWx0aXBsZXhpbmcgcGVyaW9kaWMgZW5kcG9pbnRzLCBvcgorICogc3VwcG9ydGluZyB0cmFuc2ZlciBwaGFzaW5nIHRvIHByZXZlbnQgZXhjZWVkaW5nIElTTyBiYW5kd2lkdGgKKyAqIGxpbWl0cyBvZiBhIGdpdmVuIGZyYW1lIG9yIG1pY3JvZnJhbWUuCisgKgorICogSXQncyBub3QgbmVlZGVkIGZvciBwZXJpcGhlcmFsIHNpZGUsIHdoaWNoIGRlZGljYXRlcyBlbmRwb2ludHM7CisgKiB0aG91Z2ggaXQgX21pZ2h0XyB1c2UgU09GIGlycXMgZm9yIG90aGVyIHB1cnBvc2VzLgorICoKKyAqIEFuZCBpdCdzIG5vdCBjdXJyZW50bHkgbmVlZGVkIGZvciBob3N0IHNpZGUsIHdoaWNoIGFsc28gZGVkaWNhdGVzCisgKiBlbmRwb2ludHMsIHJlbGllcyBvbiBUWC9SWCBpbnRlcnZhbCByZWdpc3RlcnMsIGFuZCBpc24ndCBjbGFpbWVkCisgKiB0byBzdXBwb3J0IElTTyB0cmFuc2ZlcnMgeWV0LgorICovCisJaWYgKGludF91c2IgJiBNVVNCX0lOVFJfU09GKSB7CisJCXZvaWQgX19pb21lbSAqbWJhc2UgPSBtdXNiLT5tcmVnczsKKwkJc3RydWN0IG11c2JfaHdfZXAJKmVwOworCQl1OCBlcG51bTsKKwkJdTE2IGZyYW1lOworCisJCURCRyg2LCAiU1RBUlRfT0ZfRlJBTUVcbiIpOwogCQloYW5kbGVkID0gSVJRX0hBTkRMRUQ7CiAKLQkJc3dpdGNoIChtdXNiLT54Y2Vpdi0+c3RhdGUpIHsKLSNpZmRlZglDT05GSUdfVVNCX01VU0JfT1RHCi0JCWNhc2UgT1RHX1NUQVRFX0FfUEVSSVBIRVJBTDoKLQkJCS8qIFdlIGFsc28gY29tZSBoZXJlIGlmIHRoZSBjYWJsZSBpcyByZW1vdmVkLCBzaW5jZQotCQkJICogdGhpcyBzaWxpY29uIGRvZXNuJ3QgcmVwb3J0IElELW5vLWxvbmdlci1ncm91bmRlZC4KLQkJCSAqCi0JCQkgKiBXZSBkZXBlbmQgb24gVChhX3dhaXRfYmNvbikgdG8gc2h1dCB1cyBkb3duLCBhbmQKLQkJCSAqIGhvcGUgdXNlcnMgZG9uJ3QgZG8gYW55dGhpbmcgZGljZXkgZHVyaW5nIHRoaXMKLQkJCSAqIHVuZGVzaXJlZCBkZXRvdXIgdGhyb3VnaCBBX1dBSVRfQkNPTi4KKwkJLyogc3RhcnQgYW55IHBlcmlvZGljIFR4IHRyYW5zZmVycyB3YWl0aW5nIGZvciBjdXJyZW50IGZyYW1lICovCisJCWZyYW1lID0gbXVzYl9yZWFkdyhtYmFzZSwgTVVTQl9GUkFNRSk7CisJCWVwID0gbXVzYi0+ZW5kcG9pbnRzOworCQlmb3IgKGVwbnVtID0gMTsgKGVwbnVtIDwgbXVzYi0+bnJfZW5kcG9pbnRzKQorCQkJCQkmJiAobXVzYi0+ZXBtYXNrID49ICgxIDw8IGVwbnVtKSk7CisJCQkJZXBudW0rKywgZXArKykgeworCQkJLyoKKwkJCSAqIEZJWE1FIGhhbmRsZSBmcmFtZWNvdW50ZXIgd3JhcHMgKDEyIGJpdHMpCisJCQkgKiBlbGltaW5hdGUgZHVwbGljYXRlZCBTdGFydFVyYiBsb2dpYwogCQkJICovCi0JCQltdXNiX2hucF9zdG9wKG11c2IpOwotCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIobXVzYl90b19oY2QobXVzYikpOwotCQkJbXVzYl9yb290X2Rpc2Nvbm5lY3QobXVzYik7Ci0JCQltdXNiX3BsYXRmb3JtX3RyeV9pZGxlKG11c2IsIGppZmZpZXMKLQkJCQkJKyBtc2Vjc190b19qaWZmaWVzKG11c2ItPmFfd2FpdF9iY29uCi0JCQkJCQk/IDogT1RHX1RJTUVfQV9XQUlUX0JDT04pKTsKLQkJCWJyZWFrOwotI2VuZGlmCi0JCWNhc2UgT1RHX1NUQVRFX0JfUEVSSVBIRVJBTDoKLQkJCW11c2JfZ19zdXNwZW5kKG11c2IpOwotCQkJbXVzYi0+aXNfYWN0aXZlID0gaXNfb3RnX2VuYWJsZWQobXVzYikKLQkJCQkJJiYgbXVzYi0+eGNlaXYtPmdhZGdldC0+Yl9obnBfZW5hYmxlOwotCQkJaWYgKG11c2ItPmlzX2FjdGl2ZSkgewotI2lmZGVmCUNPTkZJR19VU0JfTVVTQl9PVEcKLQkJCQltdXNiLT54Y2Vpdi0+c3RhdGUgPSBPVEdfU1RBVEVfQl9XQUlUX0FDT047Ci0JCQkJREJHKDEsICJITlA6IFNldHRpbmcgdGltZXIgZm9yIGJfYXNlMF9icnN0XG4iKTsKLQkJCQltb2RfdGltZXIoJm11c2ItPm90Z190aW1lciwgamlmZmllcwotCQkJCQkrIG1zZWNzX3RvX2ppZmZpZXMoCi0JCQkJCQkJT1RHX1RJTUVfQl9BU0UwX0JSU1QpKTsKLSNlbmRpZgorCQkJaWYgKGVwLT5kd1dhaXRGcmFtZSA+PSBmcmFtZSkgeworCQkJCWVwLT5kd1dhaXRGcmFtZSA9IDA7CisJCQkJcHJfZGVidWcoIlNPRiAtLT4gcGVyaW9kaWMgVFglcyBvbiAlZFxuIiwKKwkJCQkJZXAtPnR4X2NoYW5uZWwgPyAiIERNQSIgOiAiIiwKKwkJCQkJZXBudW0pOworCQkJCWlmICghZXAtPnR4X2NoYW5uZWwpCisJCQkJCW11c2JfaF90eF9zdGFydChtdXNiLCBlcG51bSk7CisJCQkJZWxzZQorCQkJCQljcHBpX2hvc3RkbWFfc3RhcnQobXVzYiwgZXBudW0pOwogCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgT1RHX1NUQVRFX0FfV0FJVF9CQ09OOgotCQkJaWYgKG11c2ItPmFfd2FpdF9iY29uICE9IDApCi0JCQkJbXVzYl9wbGF0Zm9ybV90cnlfaWRsZShtdXNiLCBqaWZmaWVzCi0JCQkJCSsgbXNlY3NfdG9famlmZmllcyhtdXNiLT5hX3dhaXRfYmNvbikpOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1RHX1NUQVRFX0FfSE9TVDoKLQkJCW11c2ItPnhjZWl2LT5zdGF0ZSA9IE9UR19TVEFURV9BX1NVU1BFTkQ7Ci0JCQltdXNiLT5pc19hY3RpdmUgPSBpc19vdGdfZW5hYmxlZChtdXNiKQotCQkJCQkmJiBtdXNiLT54Y2Vpdi0+aG9zdC0+Yl9obnBfZW5hYmxlOwotCQkJYnJlYWs7Ci0JCWNhc2UgT1RHX1NUQVRFX0JfSE9TVDoKLQkJCS8qIFRyYW5zaXRpb24gdG8gQl9QRVJJUEhFUkFMLCBzZWUgNi44LjIuNiBwIDQ0ICovCi0JCQlEQkcoMSwgIlJFVklTSVQ6IFNVU1BFTkQgYXMgQl9IT1NUXG4iKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJLyogInNob3VsZCBub3QgaGFwcGVuIiAqLwotCQkJbXVzYi0+aXNfYWN0aXZlID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCXNjaGVkdWxlX3dvcmsoJm11c2ItPmlycV93b3JrKTsKKwkJfQkJLyogZW5kIG9mIGZvciBsb29wICovCiAJfQorI2VuZGlmCiAKKwlzY2hlZHVsZV93b3JrKCZtdXNiLT5pcnFfd29yayk7CiAKIAlyZXR1cm4gaGFuZGxlZDsKIH0KQEAgLTEwMDAsNyArOTgyLDcgQEAKICAqIG1vcmUgdGhhbiBzZWxlY3Rpbmcgb25lIG9mIGEgYnVuY2ggb2YgcHJlZGVmaW5lZCBjb25maWd1cmF0aW9ucy4KICAqLwogI2lmIGRlZmluZWQoQ09ORklHX1VTQl9UVVNCNjAxMCkgfHwgXAotCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCisJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKIHN0YXRpYyB1c2hvcnQgX19pbml0ZGF0YSBmaWZvX21vZGUgPSA0OwogI2Vsc2UKIHN0YXRpYyB1c2hvcnQgX19pbml0ZGF0YSBmaWZvX21vZGUgPSAyOwpAQCAtMTA5NSw2ICsxMDc3LDM2IEBACiB7IC5od19lcF9udW0gPSAxNSwgLnN0eWxlID0gRklGT19SWFRYLCAubWF4cGFja2V0ID0gMTAyNCwgfSwKIH07CiAKKy8qIG1vZGUgNSAtIGZpdHMgaW4gOEtCICovCitzdGF0aWMgc3RydWN0IGZpZm9fY2ZnIF9faW5pdGRhdGEgbW9kZV81X2NmZ1tdID0geworeyAuaHdfZXBfbnVtID0gIDEsIC5zdHlsZSA9IEZJRk9fVFgsICAgLm1heHBhY2tldCA9IDUxMiwgfSwKK3sgLmh3X2VwX251bSA9ICAxLCAuc3R5bGUgPSBGSUZPX1JYLCAgIC5tYXhwYWNrZXQgPSA1MTIsIH0sCit7IC5od19lcF9udW0gPSAgMiwgLnN0eWxlID0gRklGT19UWCwgICAubWF4cGFja2V0ID0gNTEyLCB9LAoreyAuaHdfZXBfbnVtID0gIDIsIC5zdHlsZSA9IEZJRk9fUlgsICAgLm1heHBhY2tldCA9IDUxMiwgfSwKK3sgLmh3X2VwX251bSA9ICAzLCAuc3R5bGUgPSBGSUZPX1RYLCAgIC5tYXhwYWNrZXQgPSA1MTIsIH0sCit7IC5od19lcF9udW0gPSAgMywgLnN0eWxlID0gRklGT19SWCwgICAubWF4cGFja2V0ID0gNTEyLCB9LAoreyAuaHdfZXBfbnVtID0gIDQsIC5zdHlsZSA9IEZJRk9fVFgsICAgLm1heHBhY2tldCA9IDUxMiwgfSwKK3sgLmh3X2VwX251bSA9ICA0LCAuc3R5bGUgPSBGSUZPX1JYLCAgIC5tYXhwYWNrZXQgPSA1MTIsIH0sCit7IC5od19lcF9udW0gPSAgNSwgLnN0eWxlID0gRklGT19UWCwgICAubWF4cGFja2V0ID0gNTEyLCB9LAoreyAuaHdfZXBfbnVtID0gIDUsIC5zdHlsZSA9IEZJRk9fUlgsICAgLm1heHBhY2tldCA9IDUxMiwgfSwKK3sgLmh3X2VwX251bSA9ICA2LCAuc3R5bGUgPSBGSUZPX1RYLCAgIC5tYXhwYWNrZXQgPSAzMiwgfSwKK3sgLmh3X2VwX251bSA9ICA2LCAuc3R5bGUgPSBGSUZPX1JYLCAgIC5tYXhwYWNrZXQgPSAzMiwgfSwKK3sgLmh3X2VwX251bSA9ICA3LCAuc3R5bGUgPSBGSUZPX1RYLCAgIC5tYXhwYWNrZXQgPSAzMiwgfSwKK3sgLmh3X2VwX251bSA9ICA3LCAuc3R5bGUgPSBGSUZPX1JYLCAgIC5tYXhwYWNrZXQgPSAzMiwgfSwKK3sgLmh3X2VwX251bSA9ICA4LCAuc3R5bGUgPSBGSUZPX1RYLCAgIC5tYXhwYWNrZXQgPSAzMiwgfSwKK3sgLmh3X2VwX251bSA9ICA4LCAuc3R5bGUgPSBGSUZPX1JYLCAgIC5tYXhwYWNrZXQgPSAzMiwgfSwKK3sgLmh3X2VwX251bSA9ICA5LCAuc3R5bGUgPSBGSUZPX1RYLCAgIC5tYXhwYWNrZXQgPSAzMiwgfSwKK3sgLmh3X2VwX251bSA9ICA5LCAuc3R5bGUgPSBGSUZPX1JYLCAgIC5tYXhwYWNrZXQgPSAzMiwgfSwKK3sgLmh3X2VwX251bSA9IDEwLCAuc3R5bGUgPSBGSUZPX1RYLCAgIC5tYXhwYWNrZXQgPSAzMiwgfSwKK3sgLmh3X2VwX251bSA9IDEwLCAuc3R5bGUgPSBGSUZPX1JYLCAgIC5tYXhwYWNrZXQgPSAzMiwgfSwKK3sgLmh3X2VwX251bSA9IDExLCAuc3R5bGUgPSBGSUZPX1RYLCAgIC5tYXhwYWNrZXQgPSAzMiwgfSwKK3sgLmh3X2VwX251bSA9IDExLCAuc3R5bGUgPSBGSUZPX1JYLCAgIC5tYXhwYWNrZXQgPSAzMiwgfSwKK3sgLmh3X2VwX251bSA9IDEyLCAuc3R5bGUgPSBGSUZPX1RYLCAgIC5tYXhwYWNrZXQgPSAzMiwgfSwKK3sgLmh3X2VwX251bSA9IDEyLCAuc3R5bGUgPSBGSUZPX1JYLCAgIC5tYXhwYWNrZXQgPSAzMiwgfSwKK3sgLmh3X2VwX251bSA9IDEzLCAuc3R5bGUgPSBGSUZPX1JYVFgsIC5tYXhwYWNrZXQgPSA1MTIsIH0sCit7IC5od19lcF9udW0gPSAxNCwgLnN0eWxlID0gRklGT19SWFRYLCAubWF4cGFja2V0ID0gMTAyNCwgfSwKK3sgLmh3X2VwX251bSA9IDE1LCAuc3R5bGUgPSBGSUZPX1JYVFgsIC5tYXhwYWNrZXQgPSAxMDI0LCB9LAorfTsKIAogLyoKICAqIGNvbmZpZ3VyZSBhIGZpZm87IGZvciBub24tc2hhcmVkIGVuZHBvaW50cywgdGhpcyBtYXkgYmUgY2FsbGVkCkBAIC0xMjEwLDYgKzEyMjIsMTAgQEAKIAkJY2ZnID0gbW9kZV80X2NmZzsKIAkJbiA9IEFSUkFZX1NJWkUobW9kZV80X2NmZyk7CiAJCWJyZWFrOworCWNhc2UgNToKKwkJY2ZnID0gbW9kZV81X2NmZzsKKwkJbiA9IEFSUkFZX1NJWkUobW9kZV81X2NmZyk7CisJCWJyZWFrOwogCX0KIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogc2V0dXAgZmlmb19tb2RlICVkXG4iLApAQCAtMTMxNCw5ICsxMzMwLDYgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgbXVzYl9jb3JlX2luaXQodTE2IG11c2JfdHlwZSwgc3RydWN0IG11c2IgKm11c2IpCiB7Ci0jaWZkZWYgTVVTQl9BSEJfSUQKLQl1MzIgZGF0YTsKLSNlbmRpZgogCXU4IHJlZzsKIAljaGFyICp0eXBlOwogCWNoYXIgYUluZm9bOTBdLCBhUmV2aXNpb25bMzJdLCBhRGF0ZVsxMl07CkBAIC0xMzI4LDIzICsxMzQxLDE3IEBACiAJcmVnID0gbXVzYl9yZWFkX2NvbmZpZ2RhdGEobWJhc2UpOwogCiAJc3RyY3B5KGFJbmZvLCAocmVnICYgTVVTQl9DT05GSUdEQVRBX1VUTUlEVykgPyAiVVRNSS0xNiIgOiAiVVRNSS04Iik7Ci0JaWYgKHJlZyAmIE1VU0JfQ09ORklHREFUQV9EWU5GSUZPKQorCWlmIChyZWcgJiBNVVNCX0NPTkZJR0RBVEFfRFlORklGTykgewogCQlzdHJjYXQoYUluZm8sICIsIGR5biBGSUZPcyIpOworCQltdXNiLT5keW5fZmlmbyA9IHRydWU7CisJfQogCWlmIChyZWcgJiBNVVNCX0NPTkZJR0RBVEFfTVBSWEUpIHsKIAkJc3RyY2F0KGFJbmZvLCAiLCBidWxrIGNvbWJpbmUiKTsKLSNpZmRlZiBDX01QX1JYCiAJCW11c2ItPmJ1bGtfY29tYmluZSA9IHRydWU7Ci0jZWxzZQotCQlzdHJjYXQoYUluZm8sICIgKFgpIik7CQkvKiBubyBkcml2ZXIgc3VwcG9ydCAqLwotI2VuZGlmCiAJfQogCWlmIChyZWcgJiBNVVNCX0NPTkZJR0RBVEFfTVBUWEUpIHsKIAkJc3RyY2F0KGFJbmZvLCAiLCBidWxrIHNwbGl0Iik7Ci0jaWZkZWYgQ19NUF9UWAogCQltdXNiLT5idWxrX3NwbGl0ID0gdHJ1ZTsKLSNlbHNlCi0JCXN0cmNhdChhSW5mbywgIiAoWCkiKTsJCS8qIG5vIGRyaXZlciBzdXBwb3J0ICovCi0jZW5kaWYKIAl9CiAJaWYgKHJlZyAmIE1VU0JfQ09ORklHREFUQV9IQlJYRSkgewogCQlzdHJjYXQoYUluZm8sICIsIEhCLUlTTyBSeCIpOwpAQCAtMTM2MCwyMCArMTM2Nyw3IEBACiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBDb25maWdEYXRhPTB4JTAyeCAoJXMpXG4iLAogCQkJbXVzYl9kcml2ZXJfbmFtZSwgcmVnLCBhSW5mbyk7CiAKLSNpZmRlZiBNVVNCX0FIQl9JRAotCWRhdGEgPSBtdXNiX3JlYWRsKG1iYXNlLCAweDQwNCk7Ci0Jc3ByaW50ZihhRGF0ZSwgIiUwNGQtJTAyeC0lMDJ4IiwgKGRhdGEgJiAweGZmZmYpLAotCQkoZGF0YSA+PiAxNikgJiAweGZmLCAoZGF0YSA+PiAyNCkgJiAweGZmKTsKLQkvKiBGSVhNRSBJRDIgYW5kIElEMyBhcmUgdW51c2VkICovCi0JZGF0YSA9IG11c2JfcmVhZGwobWJhc2UsIDB4NDA4KTsKLQlwcmludGsoS0VSTl9ERUJVRyAiSUQyPSVseFxuIiwgKGxvbmcgdW5zaWduZWQpZGF0YSk7Ci0JZGF0YSA9IG11c2JfcmVhZGwobWJhc2UsIDB4NDBjKTsKLQlwcmludGsoS0VSTl9ERUJVRyAiSUQzPSVseFxuIiwgKGxvbmcgdW5zaWduZWQpZGF0YSk7Ci0JcmVnID0gbXVzYl9yZWFkYihtYmFzZSwgMHg0MDApOwotCW11c2JfdHlwZSA9ICgnTScgPT0gcmVnKSA/IE1VU0JfQ09OVFJPTExFUl9NSERSQyA6IE1VU0JfQ09OVFJPTExFUl9IRFJDOwotI2Vsc2UKIAlhRGF0ZVswXSA9IDA7Ci0jZW5kaWYKIAlpZiAoTVVTQl9DT05UUk9MTEVSX01IRFJDID09IG11c2JfdHlwZSkgewogCQltdXNiLT5pc19tdWx0aXBvaW50ID0gMTsKIAkJdHlwZSA9ICJNIjsKQEAgLTE0MDQsMjEgKzEzOTgsMTAgQEAKIAltdXNiLT5ucl9lbmRwb2ludHMgPSAxOwogCW11c2ItPmVwbWFzayA9IDE7CiAKLQlpZiAocmVnICYgTVVTQl9DT05GSUdEQVRBX0RZTkZJRk8pIHsKLQkJaWYgKG11c2ItPmNvbmZpZy0+ZHluX2ZpZm8pCi0JCQlzdGF0dXMgPSBlcF9jb25maWdfZnJvbV90YWJsZShtdXNiKTsKLQkJZWxzZSB7Ci0JCQlFUlIoInJlY29uZmlndXJlIHNvZnR3YXJlIGZvciBEeW5hbWljIEZJRk9zXG4iKTsKLQkJCXN0YXR1cyA9IC1FTk9ERVY7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoIW11c2ItPmNvbmZpZy0+ZHluX2ZpZm8pCi0JCQlzdGF0dXMgPSBlcF9jb25maWdfZnJvbV9odyhtdXNiKTsKLQkJZWxzZSB7Ci0JCQlFUlIoInJlY29uZmlndXJlIHNvZnR3YXJlIGZvciBzdGF0aWMgRklGT3NcbiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCX0KLQl9CisJaWYgKG11c2ItPmR5bl9maWZvKQorCQlzdGF0dXMgPSBlcF9jb25maWdfZnJvbV90YWJsZShtdXNiKTsKKwllbHNlCisJCXN0YXR1cyA9IGVwX2NvbmZpZ19mcm9tX2h3KG11c2IpOwogCiAJaWYgKHN0YXR1cyA8IDApCiAJCXJldHVybiBzdGF0dXM7CkBAIC0xNTg3LDExICsxNTcwLDYgQEAKIAkJZXBfbnVtKys7CiAJfQogCi0JLyogZmluaXNoIGhhbmRsaW5nICJnbG9iYWwiIGludGVycnVwdHMgYWZ0ZXIgaGFuZGxpbmcgZmlmb3MgKi8KLQlpZiAobXVzYi0+aW50X3VzYikKLQkJcmV0dmFsIHw9IG11c2Jfc3RhZ2UyX2lycShtdXNiLAotCQkJCW11c2ItPmludF91c2IsIGRldmN0bCwgcG93ZXIpOwotCiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTY5Niw3ICsxNjc0LDcgQEAKIAl1bnNpZ25lZCBsb25nCXZhbDsKIAogCWlmIChzc2NhbmYoYnVmLCAiJWx1IiwgJnZhbCkgPCAxKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSW52YWxpZCBWQlVTIHRpbWVvdXQgbXMgdmFsdWVcbiIpOworCQlkZXZfZXJyKGRldiwgIkludmFsaWQgVkJVUyB0aW1lb3V0IG1zIHZhbHVlXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNzQ2LDcgKzE3MjQsNyBAQAogCiAJaWYgKHNzY2FuZihidWYsICIlaHUiLCAmc3JwKSAhPSAxCiAJCQl8fCAoc3JwICE9IDEpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiU1JQOiBWYWx1ZSBtdXN0IGJlIDFcbiIpOworCQlkZXZfZXJyKGRldiwgIlNSUDogVmFsdWUgbXVzdCBiZSAxXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xNzU5LDYgKzE3MzcsMTkgQEAKIAogI2VuZGlmIC8qIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQyAqLwogCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbXVzYl9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX21vZGUuYXR0ciwKKwkmZGV2X2F0dHJfdmJ1cy5hdHRyLAorI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQworCSZkZXZfYXR0cl9zcnAuYXR0ciwKKyNlbmRpZgorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG11c2JfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBtdXNiX2F0dHJpYnV0ZXMsCit9OworCiAjZW5kaWYJLyogc3lzZnMgKi8KIAogLyogT25seSB1c2VkIHRvIHByb3ZpZGUgZHJpdmVyIG1vZGUgY2hhbmdlIGV2ZW50cyAqLwpAQCAtMTgzMywxMSArMTgyNCw3IEBACiAJICovCiAKICNpZmRlZiBDT05GSUdfU1lTRlMKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUobXVzYi0+Y29udHJvbGxlciwgJmRldl9hdHRyX21vZGUpOwotCWRldmljZV9yZW1vdmVfZmlsZShtdXNiLT5jb250cm9sbGVyLCAmZGV2X2F0dHJfdmJ1cyk7Ci0jaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDCi0JZGV2aWNlX3JlbW92ZV9maWxlKG11c2ItPmNvbnRyb2xsZXIsICZkZXZfYXR0cl9zcnApOwotI2VuZGlmCisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZtdXNiLT5jb250cm9sbGVyLT5rb2JqLCAmbXVzYl9hdHRyX2dyb3VwKTsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDCkBAIC0yMDE3LDIyICsyMDA0LDEwIEBACiAJCW11c2ItPmlycV93YWtlID0gMDsKIAl9CiAKLQlwcl9pbmZvKCIlczogVVNCICVzIG1vZGUgY29udHJvbGxlciBhdCAlcCB1c2luZyAlcywgSVJRICVkXG4iLAotCQkJbXVzYl9kcml2ZXJfbmFtZSwKLQkJCSh7Y2hhciAqczsKLQkJCXN3aXRjaCAobXVzYi0+Ym9hcmRfbW9kZSkgewotCQkJY2FzZSBNVVNCX0hPU1Q6CQlzID0gIkhvc3QiOyBicmVhazsKLQkJCWNhc2UgTVVTQl9QRVJJUEhFUkFMOglzID0gIlBlcmlwaGVyYWwiOyBicmVhazsKLQkJCWRlZmF1bHQ6CQlzID0gIk9URyI7IGJyZWFrOwotCQkJfTsgczsgfSksCi0JCQljdHJsLAotCQkJKGlzX2RtYV9jYXBhYmxlKCkgJiYgbXVzYi0+ZG1hX2NvbnRyb2xsZXIpCi0JCQkJPyAiRE1BIiA6ICJQSU8iLAotCQkJbXVzYi0+bklycSk7Ci0KIAkvKiBob3N0IHNpZGUgbmVlZHMgbW9yZSBzZXR1cCAqLwogCWlmIChpc19ob3N0X2VuYWJsZWQobXVzYikpIHsKIAkJc3RydWN0IHVzYl9oY2QJKmhjZCA9IG11c2JfdG9faGNkKG11c2IpOworCQl1OCBidXNjdGw7CiAKIAkJb3RnX3NldF9ob3N0KG11c2ItPnhjZWl2LCAmaGNkLT5zZWxmKTsKIApAQCAtMjA0MCw2ICsyMDE1LDEzIEBACiAJCQloY2QtPnNlbGYub3RnX3BvcnQgPSAxOwogCQltdXNiLT54Y2Vpdi0+aG9zdCA9ICZoY2QtPnNlbGY7CiAJCWhjZC0+cG93ZXJfYnVkZ2V0ID0gMiAqIChwbGF0LT5wb3dlciA/IDogMjUwKTsKKworCQkvKiBwcm9ncmFtIFBIWSB0byB1c2UgZXh0ZXJuYWwgdkJ1cyBpZiByZXF1aXJlZCAqLworCQlpZiAocGxhdC0+ZXh0dmJ1cykgeworCQkJYnVzY3RsID0gbXVzYl9yZWFkYihtdXNiLT5tcmVncywgTVVTQl9VTFBJX0JVU0NPTlRST0wpOworCQkJYnVzY3RsIHw9IE1VU0JfVUxQSV9VU0VfRVhUVkJVUzsKKwkJCW11c2Jfd3JpdGViKG11c2ItPm1yZWdzLCBNVVNCX1VMUElfQlVTQ09OVFJPTCwgYnVzY3RsKTsKKwkJfQogCX0KIAogCS8qIEZvciB0aGUgaG9zdC1vbmx5IHJvbGUsIHdlIGNhbiBhY3RpdmF0ZSByaWdodCBhd2F5LgpAQCAtMjA3OSwyNiArMjA2MSwyNiBAQAogCX0KIAogI2lmZGVmIENPTkZJR19TWVNGUwotCXN0YXR1cyA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9tb2RlKTsKLQlzdGF0dXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdmJ1cyk7Ci0jaWZkZWYgQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDCi0Jc3RhdHVzID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3NycCk7Ci0jZW5kaWYgLyogQ09ORklHX1VTQl9HQURHRVRfTVVTQl9IRFJDICovCi0Jc3RhdHVzID0gMDsKKwlzdGF0dXMgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm11c2ItPmNvbnRyb2xsZXItPmtvYmosICZtdXNiX2F0dHJfZ3JvdXApOwogI2VuZGlmCiAJaWYgKHN0YXR1cykKIAkJZ290byBmYWlsMjsKIAorCWRldl9pbmZvKGRldiwgIlVTQiAlcyBtb2RlIGNvbnRyb2xsZXIgYXQgJXAgdXNpbmcgJXMsIElSUSAlZFxuIiwKKwkJCSh7Y2hhciAqczsKKwkJCSBzd2l0Y2ggKG11c2ItPmJvYXJkX21vZGUpIHsKKwkJCSBjYXNlIE1VU0JfSE9TVDoJCXMgPSAiSG9zdCI7IGJyZWFrOworCQkJIGNhc2UgTVVTQl9QRVJJUEhFUkFMOglzID0gIlBlcmlwaGVyYWwiOyBicmVhazsKKwkJCSBkZWZhdWx0OgkJcyA9ICJPVEciOyBicmVhazsKKwkJCSB9OyBzOyB9KSwKKwkJCWN0cmwsCisJCQkoaXNfZG1hX2NhcGFibGUoKSAmJiBtdXNiLT5kbWFfY29udHJvbGxlcikKKwkJCT8gIkRNQSIgOiAiUElPIiwKKwkJCW11c2ItPm5JcnEpOworCiAJcmV0dXJuIDA7CiAKIGZhaWwyOgotI2lmZGVmIENPTkZJR19TWVNGUwotCWRldmljZV9yZW1vdmVfZmlsZShtdXNiLT5jb250cm9sbGVyLCAmZGV2X2F0dHJfbW9kZSk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKG11c2ItPmNvbnRyb2xsZXIsICZkZXZfYXR0cl92YnVzKTsKLSNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUobXVzYi0+Y29udHJvbGxlciwgJmRldl9hdHRyX3NycCk7Ci0jZW5kaWYKLSNlbmRpZgogCW11c2JfcGxhdGZvcm1fZXhpdChtdXNiKTsKIGZhaWw6CiAJZGV2X2VycihtdXNiLT5jb250cm9sbGVyLApAQCAtMjEyNyw2ICsyMTA5LDcgQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlCSpkZXYgPSAmcGRldi0+ZGV2OwogCWludAkJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpbnQJCXN0YXR1czsKIAlzdHJ1Y3QgcmVzb3VyY2UJKmlvbWVtOwogCXZvaWQgX19pb21lbQkqYmFzZTsKIApAQCAtMjEzNCw3ICsyMTE3LDcgQEAKIAlpZiAoIWlvbWVtIHx8IGlycSA9PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCWJhc2UgPSBpb3JlbWFwKGlvbWVtLT5zdGFydCwgaW9tZW0tPmVuZCAtIGlvbWVtLT5zdGFydCArIDEpOworCWJhc2UgPSBpb3JlbWFwKGlvbWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShpb21lbSkpOwogCWlmICghYmFzZSkgewogCQlkZXZfZXJyKGRldiwgImlvcmVtYXAgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMTQ0LDcgKzIxMjcsMTIgQEAKIAkvKiBjbG9iYmVyZWQgYnkgdXNlX2RtYT1uICovCiAJb3JpZ19kbWFfbWFzayA9IGRldi0+ZG1hX21hc2s7CiAjZW5kaWYKLQlyZXR1cm4gbXVzYl9pbml0X2NvbnRyb2xsZXIoZGV2LCBpcnEsIGJhc2UpOworCisJc3RhdHVzID0gbXVzYl9pbml0X2NvbnRyb2xsZXIoZGV2LCBpcnEsIGJhc2UpOworCWlmIChzdGF0dXMgPCAwKQorCQlpb3VubWFwKGJhc2UpOworCisJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGludCBfX2V4aXQgbXVzYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTIxNzMsNiArMjE2MSwxNDggQEAKIAogI2lmZGVmCUNPTkZJR19QTQogCitzdGF0aWMgc3RydWN0IG11c2JfY29udGV4dF9yZWdpc3RlcnMgbXVzYl9jb250ZXh0OworCit2b2lkIG11c2Jfc2F2ZV9jb250ZXh0KHN0cnVjdCBtdXNiICptdXNiKQoreworCWludCBpOworCXZvaWQgX19pb21lbSAqbXVzYl9iYXNlID0gbXVzYi0+bXJlZ3M7CisKKwlpZiAoaXNfaG9zdF9lbmFibGVkKG11c2IpKSB7CisJCW11c2JfY29udGV4dC5mcmFtZSA9IG11c2JfcmVhZHcobXVzYl9iYXNlLCBNVVNCX0ZSQU1FKTsKKwkJbXVzYl9jb250ZXh0LnRlc3Rtb2RlID0gbXVzYl9yZWFkYihtdXNiX2Jhc2UsIE1VU0JfVEVTVE1PREUpOworCX0KKwltdXNiX2NvbnRleHQucG93ZXIgPSBtdXNiX3JlYWRiKG11c2JfYmFzZSwgTVVTQl9QT1dFUik7CisJbXVzYl9jb250ZXh0LmludHJ0eGUgPSBtdXNiX3JlYWR3KG11c2JfYmFzZSwgTVVTQl9JTlRSVFhFKTsKKwltdXNiX2NvbnRleHQuaW50cnJ4ZSA9IG11c2JfcmVhZHcobXVzYl9iYXNlLCBNVVNCX0lOVFJSWEUpOworCW11c2JfY29udGV4dC5pbnRydXNiZSA9IG11c2JfcmVhZGIobXVzYl9iYXNlLCBNVVNCX0lOVFJVU0JFKTsKKwltdXNiX2NvbnRleHQuaW5kZXggPSBtdXNiX3JlYWRiKG11c2JfYmFzZSwgTVVTQl9JTkRFWCk7CisJbXVzYl9jb250ZXh0LmRldmN0bCA9IG11c2JfcmVhZGIobXVzYl9iYXNlLCBNVVNCX0RFVkNUTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVVTQl9DX05VTV9FUFM7ICsraSkgeworCQltdXNiX3dyaXRlYihtdXNiX2Jhc2UsIE1VU0JfSU5ERVgsIGkpOworCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eG1heHAgPQorCQkJbXVzYl9yZWFkdyhtdXNiX2Jhc2UsIDB4MTAgKyBNVVNCX1RYTUFYUCk7CisJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnR4Y3NyID0KKwkJCW11c2JfcmVhZHcobXVzYl9iYXNlLCAweDEwICsgTVVTQl9UWENTUik7CisJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnJ4bWF4cCA9CisJCQltdXNiX3JlYWR3KG11c2JfYmFzZSwgMHgxMCArIE1VU0JfUlhNQVhQKTsKKwkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhjc3IgPQorCQkJbXVzYl9yZWFkdyhtdXNiX2Jhc2UsIDB4MTAgKyBNVVNCX1JYQ1NSKTsKKworCQlpZiAobXVzYi0+ZHluX2ZpZm8pIHsKKwkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnR4Zmlmb2FkZCA9CisJCQkJCW11c2JfcmVhZF90eGZpZm9hZGQobXVzYl9iYXNlKTsKKwkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnJ4Zmlmb2FkZCA9CisJCQkJCW11c2JfcmVhZF9yeGZpZm9hZGQobXVzYl9iYXNlKTsKKwkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnR4Zmlmb3N6ID0KKwkJCQkJbXVzYl9yZWFkX3R4Zmlmb3N6KG11c2JfYmFzZSk7CisJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS5yeGZpZm9zeiA9CisJCQkJCW11c2JfcmVhZF9yeGZpZm9zeihtdXNiX2Jhc2UpOworCQl9CisJCWlmIChpc19ob3N0X2VuYWJsZWQobXVzYikpIHsKKwkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnR4dHlwZSA9CisJCQkJbXVzYl9yZWFkYihtdXNiX2Jhc2UsIDB4MTAgKyBNVVNCX1RYVFlQRSk7CisJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eGludGVydmFsID0KKwkJCQltdXNiX3JlYWRiKG11c2JfYmFzZSwgMHgxMCArIE1VU0JfVFhJTlRFUlZBTCk7CisJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS5yeHR5cGUgPQorCQkJCW11c2JfcmVhZGIobXVzYl9iYXNlLCAweDEwICsgTVVTQl9SWFRZUEUpOworCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhpbnRlcnZhbCA9CisJCQkJbXVzYl9yZWFkYihtdXNiX2Jhc2UsIDB4MTAgKyBNVVNCX1JYSU5URVJWQUwpOworCisJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eGZ1bmFkZHIgPQorCQkJCW11c2JfcmVhZF90eGZ1bmFkZHIobXVzYl9iYXNlLCBpKTsKKwkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnR4aHViYWRkciA9CisJCQkJbXVzYl9yZWFkX3R4aHViYWRkcihtdXNiX2Jhc2UsIGkpOworCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0udHhodWJwb3J0ID0KKwkJCQltdXNiX3JlYWRfdHhodWJwb3J0KG11c2JfYmFzZSwgaSk7CisKKwkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnJ4ZnVuYWRkciA9CisJCQkJbXVzYl9yZWFkX3J4ZnVuYWRkcihtdXNiX2Jhc2UsIGkpOworCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhodWJhZGRyID0KKwkJCQltdXNiX3JlYWRfcnhodWJhZGRyKG11c2JfYmFzZSwgaSk7CisJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS5yeGh1YnBvcnQgPQorCQkJCW11c2JfcmVhZF9yeGh1YnBvcnQobXVzYl9iYXNlLCBpKTsKKwkJfQorCX0KKworCW11c2Jfd3JpdGViKG11c2JfYmFzZSwgTVVTQl9JTkRFWCwgbXVzYl9jb250ZXh0LmluZGV4KTsKKworCW11c2JfcGxhdGZvcm1fc2F2ZV9jb250ZXh0KG11c2IsICZtdXNiX2NvbnRleHQpOworfQorCit2b2lkIG11c2JfcmVzdG9yZV9jb250ZXh0KHN0cnVjdCBtdXNiICptdXNiKQoreworCWludCBpOworCXZvaWQgX19pb21lbSAqbXVzYl9iYXNlID0gbXVzYi0+bXJlZ3M7CisJdm9pZCBfX2lvbWVtICplcF90YXJnZXRfcmVnczsKKworCW11c2JfcGxhdGZvcm1fcmVzdG9yZV9jb250ZXh0KG11c2IsICZtdXNiX2NvbnRleHQpOworCisJaWYgKGlzX2hvc3RfZW5hYmxlZChtdXNiKSkgeworCQltdXNiX3dyaXRldyhtdXNiX2Jhc2UsIE1VU0JfRlJBTUUsIG11c2JfY29udGV4dC5mcmFtZSk7CisJCW11c2Jfd3JpdGViKG11c2JfYmFzZSwgTVVTQl9URVNUTU9ERSwgbXVzYl9jb250ZXh0LnRlc3Rtb2RlKTsKKwl9CisJbXVzYl93cml0ZWIobXVzYl9iYXNlLCBNVVNCX1BPV0VSLCBtdXNiX2NvbnRleHQucG93ZXIpOworCW11c2Jfd3JpdGV3KG11c2JfYmFzZSwgTVVTQl9JTlRSVFhFLCBtdXNiX2NvbnRleHQuaW50cnR4ZSk7CisJbXVzYl93cml0ZXcobXVzYl9iYXNlLCBNVVNCX0lOVFJSWEUsIG11c2JfY29udGV4dC5pbnRycnhlKTsKKwltdXNiX3dyaXRlYihtdXNiX2Jhc2UsIE1VU0JfSU5UUlVTQkUsIG11c2JfY29udGV4dC5pbnRydXNiZSk7CisJbXVzYl93cml0ZWIobXVzYl9iYXNlLCBNVVNCX0RFVkNUTCwgbXVzYl9jb250ZXh0LmRldmN0bCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTVVTQl9DX05VTV9FUFM7ICsraSkgeworCQltdXNiX3dyaXRlYihtdXNiX2Jhc2UsIE1VU0JfSU5ERVgsIGkpOworCQltdXNiX3dyaXRldyhtdXNiX2Jhc2UsIDB4MTAgKyBNVVNCX1RYTUFYUCwKKwkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnR4bWF4cCk7CisJCW11c2Jfd3JpdGV3KG11c2JfYmFzZSwgMHgxMCArIE1VU0JfVFhDU1IsCisJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eGNzcik7CisJCW11c2Jfd3JpdGV3KG11c2JfYmFzZSwgMHgxMCArIE1VU0JfUlhNQVhQLAorCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhtYXhwKTsKKwkJbXVzYl93cml0ZXcobXVzYl9iYXNlLCAweDEwICsgTVVTQl9SWENTUiwKKwkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnJ4Y3NyKTsKKworCQlpZiAobXVzYi0+ZHluX2ZpZm8pIHsKKwkJCW11c2Jfd3JpdGVfdHhmaWZvc3oobXVzYl9iYXNlLAorCQkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnR4Zmlmb3N6KTsKKwkJCW11c2Jfd3JpdGVfcnhmaWZvc3oobXVzYl9iYXNlLAorCQkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnJ4Zmlmb3N6KTsKKwkJCW11c2Jfd3JpdGVfdHhmaWZvYWRkKG11c2JfYmFzZSwKKwkJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eGZpZm9hZGQpOworCQkJbXVzYl93cml0ZV9yeGZpZm9hZGQobXVzYl9iYXNlLAorCQkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnJ4Zmlmb2FkZCk7CisJCX0KKworCQlpZiAoaXNfaG9zdF9lbmFibGVkKG11c2IpKSB7CisJCQltdXNiX3dyaXRlYihtdXNiX2Jhc2UsIDB4MTAgKyBNVVNCX1RYVFlQRSwKKwkJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eHR5cGUpOworCQkJbXVzYl93cml0ZWIobXVzYl9iYXNlLCAweDEwICsgTVVTQl9UWElOVEVSVkFMLAorCQkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnR4aW50ZXJ2YWwpOworCQkJbXVzYl93cml0ZWIobXVzYl9iYXNlLCAweDEwICsgTVVTQl9SWFRZUEUsCisJCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnh0eXBlKTsKKwkJCW11c2Jfd3JpdGViKG11c2JfYmFzZSwgMHgxMCArIE1VU0JfUlhJTlRFUlZBTCwKKworCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhpbnRlcnZhbCk7CisJCQltdXNiX3dyaXRlX3R4ZnVuYWRkcihtdXNiX2Jhc2UsIGksCisJCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0udHhmdW5hZGRyKTsKKwkJCW11c2Jfd3JpdGVfdHhodWJhZGRyKG11c2JfYmFzZSwgaSwKKwkJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS50eGh1YmFkZHIpOworCQkJbXVzYl93cml0ZV90eGh1YnBvcnQobXVzYl9iYXNlLCBpLAorCQkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnR4aHVicG9ydCk7CisKKwkJCWVwX3RhcmdldF9yZWdzID0KKwkJCQltdXNiX3JlYWRfdGFyZ2V0X3JlZ19iYXNlKGksIG11c2JfYmFzZSk7CisKKwkJCW11c2Jfd3JpdGVfcnhmdW5hZGRyKGVwX3RhcmdldF9yZWdzLAorCQkJCW11c2JfY29udGV4dC5pbmRleF9yZWdzW2ldLnJ4ZnVuYWRkcik7CisJCQltdXNiX3dyaXRlX3J4aHViYWRkcihlcF90YXJnZXRfcmVncywKKwkJCQltdXNiX2NvbnRleHQuaW5kZXhfcmVnc1tpXS5yeGh1YmFkZHIpOworCQkJbXVzYl93cml0ZV9yeGh1YnBvcnQoZXBfdGFyZ2V0X3JlZ3MsCisJCQkJbXVzYl9jb250ZXh0LmluZGV4X3JlZ3NbaV0ucnhodWJwb3J0KTsKKwkJfQorCX0KKworCW11c2Jfd3JpdGViKG11c2JfYmFzZSwgTVVTQl9JTkRFWCwgbXVzYl9jb250ZXh0LmluZGV4KTsKK30KKwogc3RhdGljIGludCBtdXNiX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKQEAgLTIxOTQsNiArMjMyNCw4IEBACiAJCSAqLwogCX0KIAorCW11c2Jfc2F2ZV9jb250ZXh0KG11c2IpOworCiAJaWYgKG11c2ItPnNldF9jbG9jaykKIAkJbXVzYi0+c2V0X2Nsb2NrKG11c2ItPmNsb2NrLCAwKTsKIAllbHNlCkBAIC0yMjE1LDYgKzIzNDcsOCBAQAogCWVsc2UKIAkJY2xrX2VuYWJsZShtdXNiLT5jbG9jayk7CiAKKwltdXNiX3Jlc3RvcmVfY29udGV4dChtdXNiKTsKKwogCS8qIGZvciBzdGF0aWMgY21vcyBsaWtlIERhVmluY2ksIHJlZ2lzdGVyIHZhbHVlcyB3ZXJlIHByZXNlcnZlZAogCSAqIHVubGVzcyBmb3Igc29tZSByZWFzb24gdGhlIHdob2xlIHNvYyBwb3dlcmVkIGRvd24gb3IgdGhlIFVTQgogCSAqIG1vZHVsZSBnb3QgcmVzZXQgdGhyb3VnaCB0aGUgUFNDICh2cyBqdXN0IGJlaW5nIGRpc2FibGVkKS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmggYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfY29yZS5oCmluZGV4IDAzZDUwOTAuLmQ4NDlmYjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9jb3JlLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2NvcmUuaApAQCAtNTIsNiArNTIsMTUgQEAKIHN0cnVjdCBtdXNiX2h3X2VwOwogc3RydWN0IG11c2JfZXA7CiAKKy8qIEhlbHBlciBkZWZpbmVzIGZvciBzdHJ1Y3QgbXVzYi0+aHd2ZXJzICovCisjZGVmaW5lIE1VU0JfSFdWRVJTX01BSk9SKHgpCSgoeCA+PiAxMCkgJiAweDFmKQorI2RlZmluZSBNVVNCX0hXVkVSU19NSU5PUih4KQkoeCAmIDB4M2ZmKQorI2RlZmluZSBNVVNCX0hXVkVSU19SQwkJMHg4MDAwCisjZGVmaW5lIE1VU0JfSFdWRVJTXzEzMDAJMHg1MkMKKyNkZWZpbmUgTVVTQl9IV1ZFUlNfMTQwMAkweDU5MAorI2RlZmluZSBNVVNCX0hXVkVSU18xODAwCTB4NzIwCisjZGVmaW5lIE1VU0JfSFdWRVJTXzE5MDAJMHg3ODQKKyNkZWZpbmUgTVVTQl9IV1ZFUlNfMjAwMAkweDgwMAogCiAjaW5jbHVkZSAibXVzYl9kZWJ1Zy5oIgogI2luY2x1ZGUgIm11c2JfZG1hLmgiCkBAIC0zMjIsMTMgKzMzMSw2IEBACiAJc3RydWN0IGNsawkJKmNsb2NrOwogCWlycXJldHVybl90CQkoKmlzcikoaW50LCB2b2lkICopOwogCXN0cnVjdCB3b3JrX3N0cnVjdAlpcnFfd29yazsKLSNkZWZpbmUgTVVTQl9IV1ZFUlNfTUFKT1IoeCkJKCh4ID4+IDEwKSAmIDB4MWYpCi0jZGVmaW5lIE1VU0JfSFdWRVJTX01JTk9SKHgpCSh4ICYgMHgzZmYpCi0jZGVmaW5lIE1VU0JfSFdWRVJTX1JDCQkweDgwMDAKLSNkZWZpbmUgTVVTQl9IV1ZFUlNfMTMwMAkweDUyQwotI2RlZmluZSBNVVNCX0hXVkVSU18xNDAwCTB4NTkwCi0jZGVmaW5lIE1VU0JfSFdWRVJTXzE4MDAJMHg3MjAKLSNkZWZpbmUgTVVTQl9IV1ZFUlNfMjAwMAkweDgwMAogCXUxNgkJCWh3dmVyczsKIAogLyogdGhpcyBodWIgc3RhdHVzIGJpdCBpcyByZXNlcnZlZCBieSBVU0IgMi4wIGFuZCBub3Qgc2VlbiBieSB1c2Jjb3JlICovCkBAIC00MTEsMjIgKzQxMywxNSBAQAogCiAJdW5zaWduZWQJCWhiX2lzb19yeDoxOwkvKiBoaWdoIGJhbmR3aWR0aCBpc28gcng/ICovCiAJdW5zaWduZWQJCWhiX2lzb190eDoxOwkvKiBoaWdoIGJhbmR3aWR0aCBpc28gdHg/ICovCisJdW5zaWduZWQJCWR5bl9maWZvOjE7CS8qIGR5bmFtaWMgRklGTyBzdXBwb3J0ZWQ/ICovCiAKLSNpZmRlZiBDX01QX1RYCi0JdW5zaWduZWQgYnVsa19zcGxpdDoxOworCXVuc2lnbmVkCQlidWxrX3NwbGl0OjE7CiAjZGVmaW5lCWNhbl9idWxrX3NwbGl0KG11c2IsdHlwZSkgXAotCQkoKCh0eXBlKSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSAmJiAobXVzYiktPmJ1bGtfc3BsaXQpCi0jZWxzZQotI2RlZmluZQljYW5fYnVsa19zcGxpdChtdXNiLCB0eXBlKQkwCi0jZW5kaWYKKwkoKCh0eXBlKSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSAmJiAobXVzYiktPmJ1bGtfc3BsaXQpCiAKLSNpZmRlZiBDX01QX1JYCi0JdW5zaWduZWQgYnVsa19jb21iaW5lOjE7CisJdW5zaWduZWQJCWJ1bGtfY29tYmluZToxOwogI2RlZmluZQljYW5fYnVsa19jb21iaW5lKG11c2IsdHlwZSkgXAotCQkoKCh0eXBlKSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSAmJiAobXVzYiktPmJ1bGtfY29tYmluZSkKLSNlbHNlCi0jZGVmaW5lCWNhbl9idWxrX2NvbWJpbmUobXVzYiwgdHlwZSkJMAotI2VuZGlmCisJKCgodHlwZSkgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykgJiYgKG11c2IpLT5idWxrX2NvbWJpbmUpCiAKICNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCX0hEUkMKIAkvKiBpc19zdXNwZW5kZWQgbWVhbnMgVVNCIEJfUEVSSVBIRVJBTCBzdXNwZW5kICovCkBAIC00NjEsNiArNDU2LDQ1IEBACiAjZW5kaWYKIH07CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0cnVjdCBtdXNiX2Nzcl9yZWdzIHsKKwkvKiBGSUZPIHJlZ2lzdGVycyAqLworCXUxNiB0eG1heHAsIHR4Y3NyLCByeG1heHAsIHJ4Y3NyOworCXUxNiByeGZpZm9hZGQsIHR4Zmlmb2FkZDsKKwl1OCB0eHR5cGUsIHR4aW50ZXJ2YWwsIHJ4dHlwZSwgcnhpbnRlcnZhbDsKKwl1OCByeGZpZm9zeiwgdHhmaWZvc3o7CisJdTggdHhmdW5hZGRyLCB0eGh1YmFkZHIsIHR4aHVicG9ydDsKKwl1OCByeGZ1bmFkZHIsIHJ4aHViYWRkciwgcnhodWJwb3J0OworfTsKKworc3RydWN0IG11c2JfY29udGV4dF9yZWdpc3RlcnMgeworCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkKKwl1MzIgb3RnX3N5c2NvbmZpZywgb3RnX2ZvcmNlc3RhbmRieTsKKyNlbmRpZgorCXU4IHBvd2VyOworCXUxNiBpbnRydHhlLCBpbnRycnhlOworCXU4IGludHJ1c2JlOworCXUxNiBmcmFtZTsKKwl1OCBpbmRleCwgdGVzdG1vZGU7CisKKwl1OCBkZXZjdGwsIG1pc2M7CisKKwlzdHJ1Y3QgbXVzYl9jc3JfcmVncyBpbmRleF9yZWdzW01VU0JfQ19OVU1fRVBTXTsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKQorZXh0ZXJuIHZvaWQgbXVzYl9wbGF0Zm9ybV9zYXZlX2NvbnRleHQoc3RydWN0IG11c2IgKm11c2IsCisJCXN0cnVjdCBtdXNiX2NvbnRleHRfcmVnaXN0ZXJzICptdXNiX2NvbnRleHQpOworZXh0ZXJuIHZvaWQgbXVzYl9wbGF0Zm9ybV9yZXN0b3JlX2NvbnRleHQoc3RydWN0IG11c2IgKm11c2IsCisJCXN0cnVjdCBtdXNiX2NvbnRleHRfcmVnaXN0ZXJzICptdXNiX2NvbnRleHQpOworI2Vsc2UKKyNkZWZpbmUgbXVzYl9wbGF0Zm9ybV9zYXZlX2NvbnRleHQobSwgeCkJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIG11c2JfcGxhdGZvcm1fcmVzdG9yZV9jb250ZXh0KG0sIHgpCWRvIHt9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIHZvaWQgbXVzYl9zZXRfdmJ1cyhzdHJ1Y3QgbXVzYiAqbXVzYiwgaW50IGlzX29uKQogewogCW11c2ItPmJvYXJkX3NldF92YnVzKG11c2IsIGlzX29uKTsKQEAgLTU2Miw3ICs1OTYsNyBAQAogZXh0ZXJuIGludCBtdXNiX3BsYXRmb3JtX3NldF9tb2RlKHN0cnVjdCBtdXNiICptdXNiLCB1OCBtdXNiX21vZGUpOwogCiAjaWYgZGVmaW5lZChDT05GSUdfVVNCX1RVU0I2MDEwKSB8fCBkZWZpbmVkKENPTkZJR19CTEFDS0ZJTikgfHwgXAotCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCisJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKIGV4dGVybiB2b2lkIG11c2JfcGxhdGZvcm1fdHJ5X2lkbGUoc3RydWN0IG11c2IgKm11c2IsIHVuc2lnbmVkIGxvbmcgdGltZW91dCk7CiAjZWxzZQogI2RlZmluZSBtdXNiX3BsYXRmb3JtX3RyeV9pZGxlKHgsIHkpCQlkbyB7fSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYwppbmRleCBjYmNmMTRhMi4uYTlmMjg4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9tdXNiX2dhZGdldC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9nYWRnZXQuYwpAQCAtODk1LDcgKzg5NSwxNCBAQAogCQkvKiBSRVZJU0lUIGlmIGNhbl9idWxrX3NwbGl0KCksIHVzZSBieSB1cGRhdGluZyAidG1wIjsKIAkJICogbGlrZXdpc2UgaGlnaCBiYW5kd2lkdGggcGVyaW9kaWMgdHgKIAkJICovCi0JCW11c2Jfd3JpdGV3KHJlZ3MsIE1VU0JfVFhNQVhQLCB0bXApOworCQkvKiBTZXQgVFhNQVhQIHdpdGggdGhlIEZJRk8gc2l6ZSBvZiB0aGUgZW5kcG9pbnQKKwkJICogdG8gZGlzYWJsZSBkb3VibGUgYnVmZmVyaW5nIG1vZGUuIEN1cnJlbnRseSwgSXQgc2VlbXMgdGhhdCBkb3VibGUKKwkJICogYnVmZmVyaW5nIGhhcyBwcm9ibGVtIGlmIG11c2IgUlRMIHJldmlzaW9uIG51bWJlciA8IDIuMC4KKwkJICovCisJCWlmIChtdXNiLT5od3ZlcnMgPCBNVVNCX0hXVkVSU18yMDAwKQorCQkJbXVzYl93cml0ZXcocmVncywgTVVTQl9UWE1BWFAsIGh3X2VwLT5tYXhfcGFja2V0X3N6X3R4KTsKKwkJZWxzZQorCQkJbXVzYl93cml0ZXcocmVncywgTVVTQl9UWE1BWFAsIHRtcCk7CiAKIAkJY3NyID0gTVVTQl9UWENTUl9NT0RFIHwgTVVTQl9UWENTUl9DTFJEQVRBVE9HOwogCQlpZiAobXVzYl9yZWFkdyhyZWdzLCBNVVNCX1RYQ1NSKQpAQCAtOTI1LDcgKzkzMiwxMyBAQAogCQkvKiBSRVZJU0lUIGlmIGNhbl9idWxrX2NvbWJpbmUoKSB1c2UgYnkgdXBkYXRpbmcgInRtcCIKIAkJICogbGlrZXdpc2UgaGlnaCBiYW5kd2lkdGggcGVyaW9kaWMgcngKIAkJICovCi0JCW11c2Jfd3JpdGV3KHJlZ3MsIE1VU0JfUlhNQVhQLCB0bXApOworCQkvKiBTZXQgUlhNQVhQIHdpdGggdGhlIEZJRk8gc2l6ZSBvZiB0aGUgZW5kcG9pbnQKKwkJICogdG8gZGlzYWJsZSBkb3VibGUgYnVmZmVyaW5nIG1vZGUuCisJCSAqLworCQlpZiAobXVzYi0+aHd2ZXJzIDwgTVVTQl9IV1ZFUlNfMjAwMCkKKwkJCW11c2Jfd3JpdGV3KHJlZ3MsIE1VU0JfUlhNQVhQLCBod19lcC0+bWF4X3BhY2tldF9zel9yeCk7CisJCWVsc2UKKwkJCW11c2Jfd3JpdGV3KHJlZ3MsIE1VU0JfUlhNQVhQLCB0bXApOwogCiAJCS8qIGZvcmNlIHNoYXJlZCBmaWZvIHRvIE9VVC1vbmx5IG1vZGUgKi8KIAkJaWYgKGh3X2VwLT5pc19zaGFyZWRfZmlmbykgewpAQCAtMTY5Nyw4ICsxNzEwLDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAkvKiBkcml2ZXIgbXVzdCBiZSBpbml0aWFsaXplZCB0byBzdXBwb3J0IHBlcmlwaGVyYWwgbW9kZSAqLwotCWlmICghbXVzYiB8fCAhKG11c2ItPmJvYXJkX21vZGUgPT0gTVVTQl9PVEcKLQkJCQl8fCBtdXNiLT5ib2FyZF9tb2RlICE9IE1VU0JfT1RHKSkgeworCWlmICghbXVzYikgewogCQlEQkcoMSwgIiVzLCBubyBkZXY/P1xuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX2hvc3QuYwppbmRleCA3NGM0YzM2Li4zNDIxY2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2JfaG9zdC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYl9ob3N0LmMKQEAgLTYwNSw4ICs2MDUsMTQgQEAKIAltdXNiX3dyaXRlYihlcC0+cmVncywgTVVTQl9SWFRZUEUsIHFoLT50eXBlX3JlZyk7CiAJbXVzYl93cml0ZWIoZXAtPnJlZ3MsIE1VU0JfUlhJTlRFUlZBTCwgcWgtPmludHZfcmVnKTsKIAkvKiBOT1RFOiBidWxrIGNvbWJpbmluZyByZXdyaXRlcyBoaWdoIGJpdHMgb2YgbWF4cGFja2V0ICovCi0JbXVzYl93cml0ZXcoZXAtPnJlZ3MsIE1VU0JfUlhNQVhQLAotCQkJcWgtPm1heHBhY2tldCB8ICgocWgtPmhiX211bHQgLSAxKSA8PCAxMSkpOworCS8qIFNldCBSWE1BWFAgd2l0aCB0aGUgRklGTyBzaXplIG9mIHRoZSBlbmRwb2ludAorCSAqIHRvIGRpc2FibGUgZG91YmxlIGJ1ZmZlciBtb2RlLgorCSAqLworCWlmIChtdXNiLT5od3ZlcnMgPCBNVVNCX0hXVkVSU18yMDAwKQorCQltdXNiX3dyaXRldyhlcC0+cmVncywgTVVTQl9SWE1BWFAsIGVwLT5tYXhfcGFja2V0X3N6X3J4KTsKKwllbHNlCisJCW11c2Jfd3JpdGV3KGVwLT5yZWdzLCBNVVNCX1JYTUFYUCwKKwkJCQlxaC0+bWF4cGFja2V0IHwgKChxaC0+aGJfbXVsdCAtIDEpIDw8IDExKSk7CiAKIAllcC0+cnhfcmVpbml0ID0gMDsKIH0KQEAgLTE3NzEsNiArMTc3Nyw5IEBACiAJaW50CQkJYmVzdF9lbmQsIGVwbnVtOwogCXN0cnVjdCBtdXNiX2h3X2VwCSpod19lcCA9IE5VTEw7CiAJc3RydWN0IGxpc3RfaGVhZAkqaGVhZCA9IE5VTEw7CisJdTgJCQl0b2dnbGU7CisJdTgJCQl0eHR5cGU7CisJc3RydWN0IHVyYgkJKnVyYiA9IG5leHRfdXJiKHFoKTsKIAogCS8qIHVzZSBmaXhlZCBoYXJkd2FyZSBmb3IgY29udHJvbCBhbmQgYnVsayAqLwogCWlmIChxaC0+dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MKSB7CkBAIC0xODA5LDYgKzE4MTgsMjcgQEAKIAkJZGlmZiAtPSAocWgtPm1heHBhY2tldCAqIHFoLT5oYl9tdWx0KTsKIAogCQlpZiAoZGlmZiA+PSAwICYmIGJlc3RfZGlmZiA+IGRpZmYpIHsKKworCQkJLyoKKwkJCSAqIE1lbnRvciBjb250cm9sbGVyIGhhcyBhIGJ1ZyBpbiB0aGF0IGlmIHdlIHNjaGVkdWxlCisJCQkgKiBhIEJVTEsgVHggdHJhbnNmZXIgb24gYW4gZW5kcG9pbnQgdGhhdCBoYWQgZWFybGllcgorCQkJICogaGFuZGxlZCBJU09DIHRoZW4gdGhlIEJVTEsgdHJhbnNmZXIgaGFzIHRvIHN0YXJ0IG9uCisJCQkgKiBhIHplcm8gdG9nZ2xlLiAgSWYgdGhlIEJVTEsgdHJhbnNmZXIgc3RhcnRzIG9uIGEgMQorCQkJICogdG9nZ2xlIHRoZW4gdGhpcyB0cmFuc2ZlciB3aWxsIGZhaWwgYXMgdGhlIG1lbnRvcgorCQkJICogY29udHJvbGxlciBzdGFydHMgdGhlIEJ1bGsgdHJhbnNmZXIgb24gYSAwIHRvZ2dsZQorCQkJICogaXJyZXNwZWN0aXZlIG9mIHRoZSBwcm9ncmFtbWluZyBvZiB0aGUgdG9nZ2xlIGJpdHMKKwkJCSAqIGluIHRoZSBUWENTUiByZWdpc3Rlci4gIENoZWNrIGZvciB0aGlzIGNvbmRpdGlvbgorCQkJICogd2hpbGUgYWxsb2NhdGluZyB0aGUgRVAgZm9yIGEgVHggQnVsayB0cmFuc2Zlci4gIElmCisJCQkgKiBzbyBza2lwIHRoaXMgRVAuCisJCQkgKi8KKwkJCWh3X2VwID0gbXVzYi0+ZW5kcG9pbnRzICsgZXBudW07CisJCQl0b2dnbGUgPSB1c2JfZ2V0dG9nZ2xlKHVyYi0+ZGV2LCBxaC0+ZXBudW0sICFpc19pbik7CisJCQl0eHR5cGUgPSAobXVzYl9yZWFkYihod19lcC0+cmVncywgTVVTQl9UWFRZUEUpCisJCQkJCT4+IDQpICYgMHgzOworCQkJaWYgKCFpc19pbiAmJiAocWgtPnR5cGUgPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykgJiYKKwkJCQl0b2dnbGUgJiYgKHR4dHlwZSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9JU09DKSkKKwkJCQljb250aW51ZTsKKwogCQkJYmVzdF9kaWZmID0gZGlmZjsKIAkJCWJlc3RfZW5kID0gZXBudW07CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9yZWdzLmggYi9kcml2ZXJzL3VzYi9tdXNiL211c2JfcmVncy5oCmluZGV4IDQ3M2E5NGUuLjhkODA2MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvbXVzYl9yZWdzLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiX3JlZ3MuaApAQCAtNzIsNiArNzIsMTAgQEAKICNkZWZpbmUgTVVTQl9ERVZDVExfSFIJCTB4MDIKICNkZWZpbmUgTVVTQl9ERVZDVExfU0VTU0lPTgkweDAxCiAKKy8qIE1VU0IgVUxQSSBWQlVTQ09OVFJPTCAqLworI2RlZmluZSBNVVNCX1VMUElfVVNFX0VYVFZCVVMJMHgwMQorI2RlZmluZSBNVVNCX1VMUElfVVNFX0VYVFZCVVNJTkQgMHgwMgorCiAvKiBURVNUTU9ERSAqLwogI2RlZmluZSBNVVNCX1RFU1RfRk9SQ0VfSE9TVAkweDgwCiAjZGVmaW5lIE1VU0JfVEVTVF9GSUZPX0FDQ0VTUwkweDQwCkBAIC0yNDYsNiArMjUwLDcgQEAKIAogLyogUkVWSVNJVDogdmN0cmwvdnN0YXR1czogb3B0aW9uYWwgdmVuZG9yIHV0bWkrcGh5IHJlZ2lzdGVyIGF0IDB4NjggKi8KICNkZWZpbmUgTVVTQl9IV1ZFUlMJCTB4NkMJLyogOCBiaXQgKi8KKyNkZWZpbmUgTVVTQl9VTFBJX0JVU0NPTlRST0wJMHg3MAkvKiA4IGJpdCAqLwogCiAjZGVmaW5lIE1VU0JfRVBJTkZPCQkweDc4CS8qIDggYml0ICovCiAjZGVmaW5lIE1VU0JfUkFNSU5GTwkJMHg3OQkvKiA4IGJpdCAqLwpAQCAtMzIxLDYgKzMyNiwyNiBAQAogCW11c2Jfd3JpdGV3KG1iYXNlLCBNVVNCX1JYRklGT0FERCwgY19vZmYpOwogfQogCitzdGF0aWMgaW5saW5lIHU4IG11c2JfcmVhZF90eGZpZm9zeih2b2lkIF9faW9tZW0gKm1iYXNlKQoreworCXJldHVybiBtdXNiX3JlYWRiKG1iYXNlLCBNVVNCX1RYRklGT1NaKTsKK30KKworc3RhdGljIGlubGluZSB1MTYgbXVzYl9yZWFkX3R4Zmlmb2FkZCh2b2lkIF9faW9tZW0gKm1iYXNlKQoreworCXJldHVybiBtdXNiX3JlYWR3KG1iYXNlLCBNVVNCX1RYRklGT0FERCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggbXVzYl9yZWFkX3J4Zmlmb3N6KHZvaWQgX19pb21lbSAqbWJhc2UpCit7CisJcmV0dXJuIG11c2JfcmVhZGIobWJhc2UsIE1VU0JfUlhGSUZPU1opOworfQorCitzdGF0aWMgaW5saW5lIHUxNiAgbXVzYl9yZWFkX3J4Zmlmb2FkZCh2b2lkIF9faW9tZW0gKm1iYXNlKQoreworCXJldHVybiBtdXNiX3JlYWR3KG1iYXNlLCBNVVNCX1JYRklGT0FERCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdTggbXVzYl9yZWFkX2NvbmZpZ2RhdGEodm9pZCBfX2lvbWVtICptYmFzZSkKIHsKIAltdXNiX3dyaXRlYihtYmFzZSwgTVVTQl9JTkRFWCwgMCk7CkBAIC0zNzYsNiArNDAxLDM2IEBACiAJCQlxaF9oX3BvcnRfcmVnKTsKIH0KIAorc3RhdGljIGlubGluZSB1OCBtdXNiX3JlYWRfcnhmdW5hZGRyKHZvaWQgX19pb21lbSAqbWJhc2UsIHU4IGVwbnVtKQoreworCXJldHVybiBtdXNiX3JlYWRiKG1iYXNlLCBNVVNCX0JVU0NUTF9PRkZTRVQoZXBudW0sIE1VU0JfUlhGVU5DQUREUikpOworfQorCitzdGF0aWMgaW5saW5lIHU4IG11c2JfcmVhZF9yeGh1YmFkZHIodm9pZCBfX2lvbWVtICptYmFzZSwgdTggZXBudW0pCit7CisJcmV0dXJuIG11c2JfcmVhZGIobWJhc2UsIE1VU0JfQlVTQ1RMX09GRlNFVChlcG51bSwgTVVTQl9SWEhVQkFERFIpKTsKK30KKworc3RhdGljIGlubGluZSB1OCBtdXNiX3JlYWRfcnhodWJwb3J0KHZvaWQgX19pb21lbSAqbWJhc2UsIHU4IGVwbnVtKQoreworCXJldHVybiBtdXNiX3JlYWRiKG1iYXNlLCBNVVNCX0JVU0NUTF9PRkZTRVQoZXBudW0sIE1VU0JfUlhIVUJQT1JUKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggIG11c2JfcmVhZF90eGZ1bmFkZHIodm9pZCBfX2lvbWVtICptYmFzZSwgdTggZXBudW0pCit7CisJcmV0dXJuIG11c2JfcmVhZGIobWJhc2UsIE1VU0JfQlVTQ1RMX09GRlNFVChlcG51bSwgTVVTQl9UWEZVTkNBRERSKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggIG11c2JfcmVhZF90eGh1YmFkZHIodm9pZCBfX2lvbWVtICptYmFzZSwgdTggZXBudW0pCit7CisJcmV0dXJuIG11c2JfcmVhZGIobWJhc2UsIE1VU0JfQlVTQ1RMX09GRlNFVChlcG51bSwgTVVTQl9UWEhVQkFERFIpKTsKK30KKworc3RhdGljIGlubGluZSB1OCAgbXVzYl9yZWFkX3R4aHVicG9ydCh2b2lkIF9faW9tZW0gKm1iYXNlLCB1OCBlcG51bSkKK3sKKwlyZXR1cm4gbXVzYl9yZWFkYihtYmFzZSwgTVVTQl9CVVNDVExfT0ZGU0VUKGVwbnVtLCBNVVNCX1RYSFVCUE9SVCkpOworfQorCiAjZWxzZSAvKiBDT05GSUdfQkxBQ0tGSU4gKi8KIAogI2RlZmluZSBVU0JfQkFTRQkJVVNCX0ZBRERSCkBAIC00MzYsNyArNDkxLDcgQEAKICNkZWZpbmUgTVVTQl9GTEFUX09GRlNFVChfZXBudW0sIF9vZmZzZXQpCVwKIAkoVVNCX09GRlNFVChVU0JfRVBfTkkwX1RYTUFYUCkgKyAoMHg0MCAqIChfZXBudW0pKSArIChfb2Zmc2V0KSkKIAotLyogTm90IGltcGxlbWVudGVkIC0gSFcgaGFzIHNlcGVyYXRlIFR4L1J4IEZJRk8gKi8KKy8qIE5vdCBpbXBsZW1lbnRlZCAtIEhXIGhhcyBzZXBhcmF0ZSBUeC9SeCBGSUZPICovCiAjZGVmaW5lIE1VU0JfVFhDU1JfTU9ERQkJCTB4MDAwMAogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXVzYl93cml0ZV90eGZpZm9zeih2b2lkIF9faW9tZW0gKm1iYXNlLCB1OCBjX3NpemUpCkBAIC00NTUsNiArNTEwLDIyIEBACiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTggbXVzYl9yZWFkX3R4Zmlmb3N6KHZvaWQgX19pb21lbSAqbWJhc2UpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IG11c2JfcmVhZF90eGZpZm9hZGQodm9pZCBfX2lvbWVtICptYmFzZSkKK3sKK30KKworc3RhdGljIGlubGluZSB1OCBtdXNiX3JlYWRfcnhmaWZvc3oodm9pZCBfX2lvbWVtICptYmFzZSkKK3sKK30KKworc3RhdGljIGlubGluZSB1MTYgIG11c2JfcmVhZF9yeGZpZm9hZGQodm9pZCBfX2lvbWVtICptYmFzZSkKK3sKK30KKwogc3RhdGljIGlubGluZSB1OCBtdXNiX3JlYWRfY29uZmlnZGF0YSh2b2lkIF9faW9tZW0gKm1iYXNlKQogewogCXJldHVybiAwOwpAQCAtNDYyLDcgKzUzMywxMSBAQAogCiBzdGF0aWMgaW5saW5lIHUxNiBtdXNiX3JlYWRfaHd2ZXJzKHZvaWQgX19pb21lbSAqbWJhc2UpCiB7Ci0JcmV0dXJuIDA7CisJLyoKKwkgKiBUaGlzIHJlZ2lzdGVyIGlzIGludmlzaWJsZSBvbiBCbGFja2ZpbiwgYWN0dWFsbHkgdGhlIE1VU0IKKwkgKiBSVEwgdmVyc2lvbiBvZiBCbGFja2ZpbiBpcyAxLjksIHNvIGp1c3QgaGFyY29kZSBpdHMgdmFsdWUuCisJICovCisJcmV0dXJuIE1VU0JfSFdWRVJTXzE5MDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2lvbWVtICptdXNiX3JlYWRfdGFyZ2V0X3JlZ19iYXNlKHU4IGksIHZvaWQgX19pb21lbSAqbWJhc2UpCkBAIC01MDAsNiArNTc1LDMwIEBACiB7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTggbXVzYl9yZWFkX3J4ZnVuYWRkcih2b2lkIF9faW9tZW0gKm1iYXNlLCB1OCBlcG51bSkKK3sKK30KKworc3RhdGljIGlubGluZSB1OCBtdXNiX3JlYWRfcnhodWJhZGRyKHZvaWQgX19pb21lbSAqbWJhc2UsIHU4IGVwbnVtKQoreworfQorCitzdGF0aWMgaW5saW5lIHU4IG11c2JfcmVhZF9yeGh1YnBvcnQodm9pZCBfX2lvbWVtICptYmFzZSwgdTggZXBudW0pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggIG11c2JfcmVhZF90eGZ1bmFkZHIodm9pZCBfX2lvbWVtICptYmFzZSwgdTggZXBudW0pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggIG11c2JfcmVhZF90eGh1YmFkZHIodm9pZCBfX2lvbWVtICptYmFzZSwgdTggZXBudW0pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAgbXVzYl9yZWFkX3R4aHVicG9ydCh2b2lkIF9faW9tZW0gKm1iYXNlLCB1OCBlcG51bSkKK3sKK30KKwogI2VuZGlmIC8qIENPTkZJR19CTEFDS0ZJTiAqLwogCiAjZW5kaWYJLyogX19NVVNCX1JFR1NfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuYwppbmRleCBhMjM3NTUwLi4yZmE3ZDVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5jCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmMKQEAgLTI1MCwyMCArMjUwLDM5IEBACiAJdTggYmNoYW5uZWw7CiAJdTggaW50X2hzZG1hOwogCi0JdTMyIGFkZHI7CisJdTMyIGFkZHIsIGNvdW50OwogCXUxNiBjc3I7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbXVzYi0+bG9jaywgZmxhZ3MpOwogCiAJaW50X2hzZG1hID0gbXVzYl9yZWFkYihtYmFzZSwgTVVTQl9IU0RNQV9JTlRSKTsKLQlpZiAoIWludF9oc2RtYSkKLQkJZ290byBkb25lOwogCiAjaWZkZWYgQ09ORklHX0JMQUNLRklOCiAJLyogQ2xlYXIgRE1BIGludGVycnVwdCBmbGFncyAqLwogCW11c2Jfd3JpdGViKG1iYXNlLCBNVVNCX0hTRE1BX0lOVFIsIGludF9oc2RtYSk7CiAjZW5kaWYKIAorCWlmICghaW50X2hzZG1hKSB7CisJCURCRygyLCAic3B1cmlvdXMgRE1BIGlycVxuIik7CisKKwkJZm9yIChiY2hhbm5lbCA9IDA7IGJjaGFubmVsIDwgTVVTQl9IU0RNQV9DSEFOTkVMUzsgYmNoYW5uZWwrKykgeworCQkJbXVzYl9jaGFubmVsID0gKHN0cnVjdCBtdXNiX2RtYV9jaGFubmVsICopCisJCQkJCSYoY29udHJvbGxlci0+Y2hhbm5lbFtiY2hhbm5lbF0pOworCQkJY2hhbm5lbCA9ICZtdXNiX2NoYW5uZWwtPmNoYW5uZWw7CisJCQlpZiAoY2hhbm5lbC0+c3RhdHVzID09IE1VU0JfRE1BX1NUQVRVU19CVVNZKSB7CisJCQkJY291bnQgPSBtdXNiX3JlYWRfaHNkbWFfY291bnQobWJhc2UsIGJjaGFubmVsKTsKKworCQkJCWlmIChjb3VudCA9PSAwKQorCQkJCQlpbnRfaHNkbWEgfD0gKDEgPDwgYmNoYW5uZWwpOworCQkJfQorCQl9CisKKwkJREJHKDIsICJpbnRfaHNkbWEgPSAweCV4XG4iLCBpbnRfaHNkbWEpOworCisJCWlmICghaW50X2hzZG1hKQorCQkJZ290byBkb25lOworCX0KKwogCWZvciAoYmNoYW5uZWwgPSAwOyBiY2hhbm5lbCA8IE1VU0JfSFNETUFfQ0hBTk5FTFM7IGJjaGFubmVsKyspIHsKIAkJaWYgKGludF9oc2RtYSAmICgxIDw8IGJjaGFubmVsKSkgewogCQkJbXVzYl9jaGFubmVsID0gKHN0cnVjdCBtdXNiX2RtYV9jaGFubmVsICopCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5oIGIvZHJpdmVycy91c2IvbXVzYi9tdXNiaHNkbWEuaAppbmRleCAxMjk5ZDkyLi42MTNmOTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL211c2Joc2RtYS5oCisrKyBiL2RyaXZlcnMvdXNiL211c2IvbXVzYmhzZG1hLmgKQEAgLTU1LDYgKzU1LDEwIEBACiAJCSAgICBNVVNCX0hTRE1BX0NIQU5ORUxfT0ZGU0VUKGJjaGFubmVsLCBNVVNCX0hTRE1BX0FERFJFU1MpLCBcCiAJCSAgICBhZGRyKQogCisjZGVmaW5lIG11c2JfcmVhZF9oc2RtYV9jb3VudChtYmFzZSwgYmNoYW5uZWwpCVwKKwltdXNiX3JlYWRsKG1iYXNlLAlcCisJCSAgIE1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYmNoYW5uZWwsIE1VU0JfSFNETUFfQ09VTlQpKQorCiAjZGVmaW5lIG11c2Jfd3JpdGVfaHNkbWFfY291bnQobWJhc2UsIGJjaGFubmVsLCBsZW4pIFwKIAltdXNiX3dyaXRlbChtYmFzZSwgXAogCQkgICAgTVVTQl9IU0RNQV9DSEFOTkVMX09GRlNFVChiY2hhbm5lbCwgTVVTQl9IU0RNQV9DT1VOVCksIFwKQEAgLTk2LDYgKzEwMCwxOSBAQAogCQkoKHUxNikoKCh1MzIpIGRtYV9hZGRyID4+IDE2KSAmIDB4RkZGRikpKTsKIH0KIAorc3RhdGljIGlubGluZSB1MzIgbXVzYl9yZWFkX2hzZG1hX2NvdW50KHZvaWQgX19pb21lbSAqbWJhc2UsIHU4IGJjaGFubmVsKQoreworCXUzMiBjb3VudCA9IG11c2JfcmVhZHcobWJhc2UsCisJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYmNoYW5uZWwsIE1VU0JfSFNETUFfQ09VTlRfSElHSCkpOworCisJY291bnQgPSBjb3VudCA8PCAxNjsKKworCWNvdW50IHw9IG11c2JfcmVhZHcobWJhc2UsCisJCU1VU0JfSFNETUFfQ0hBTk5FTF9PRkZTRVQoYmNoYW5uZWwsIE1VU0JfSFNETUFfQ09VTlRfTE9XKSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBtdXNiX3dyaXRlX2hzZG1hX2NvdW50KHZvaWQgX19pb21lbSAqbWJhc2UsCiAJCQkJdTggYmNoYW5uZWwsIHUzMiBsZW4pCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmMgYi9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmMKaW5kZXggODNiZWVhYy4uM2ZlMTY4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi9vbWFwMjQzMC5jCisrKyBiL2RyaXZlcnMvdXNiL211c2Ivb21hcDI0MzAuYwpAQCAtMjIwLDcgKzIyMCw3IEBACiAKIAltdXNiX3BsYXRmb3JtX3Jlc3VtZShtdXNiKTsKIAotCWwgPSBvbWFwX3JlYWRsKE9UR19TWVNDT05GSUcpOworCWwgPSBtdXNiX3JlYWRsKG11c2ItPm1yZWdzLCBPVEdfU1lTQ09ORklHKTsKIAlsICY9IH5FTkFCTEVXQUtFVVA7CS8qIGRpc2FibGUgd2FrZXVwICovCiAJbCAmPSB+Tk9TVERCWTsJCS8qIHJlbW92ZSBwb3NzaWJsZSBub3N0ZGJ5ICovCiAJbCB8PSBTTUFSVFNUREJZOwkvKiBlbmFibGUgc21hcnQgc3RhbmRieSAqLwpAQCAtMjMzLDE3ICsyMzMsMTkgQEAKIAkgKi8KIAlpZiAoIWNwdV9pc19vbWFwMzQzMCgpKQogCQlsIHw9IEFVVE9JRExFOwkJLyogZW5hYmxlIGF1dG8gaWRsZSAqLwotCW9tYXBfd3JpdGVsKGwsIE9UR19TWVNDT05GSUcpOworCW11c2Jfd3JpdGVsKG11c2ItPm1yZWdzLCBPVEdfU1lTQ09ORklHLCBsKTsKIAotCWwgPSBvbWFwX3JlYWRsKE9UR19JTlRFUkZTRUwpOworCWwgPSBtdXNiX3JlYWRsKG11c2ItPm1yZWdzLCBPVEdfSU5URVJGU0VMKTsKIAlsIHw9IFVMUElfMTJQSU47Ci0Jb21hcF93cml0ZWwobCwgT1RHX0lOVEVSRlNFTCk7CisJbXVzYl93cml0ZWwobXVzYi0+bXJlZ3MsIE9UR19JTlRFUkZTRUwsIGwpOwogCiAJcHJfZGVidWcoIkhTIFVTQiBPVEc6IHJldmlzaW9uIDB4JXgsIHN5c2NvbmZpZyAweCUwMngsICIKIAkJCSJzeXNzdGF0dXMgMHgleCwgaW50cmZzZWwgMHgleCwgc2ltZW5hYmxlICAweCV4XG4iLAotCQkJb21hcF9yZWFkbChPVEdfUkVWSVNJT04pLCBvbWFwX3JlYWRsKE9UR19TWVNDT05GSUcpLAotCQkJb21hcF9yZWFkbChPVEdfU1lTU1RBVFVTKSwgb21hcF9yZWFkbChPVEdfSU5URVJGU0VMKSwKLQkJCW9tYXBfcmVhZGwoT1RHX1NJTUVOQUJMRSkpOworCQkJbXVzYl9yZWFkbChtdXNiLT5tcmVncywgT1RHX1JFVklTSU9OKSwKKwkJCW11c2JfcmVhZGwobXVzYi0+bXJlZ3MsIE9UR19TWVNDT05GSUcpLAorCQkJbXVzYl9yZWFkbChtdXNiLT5tcmVncywgT1RHX1NZU1NUQVRVUyksCisJCQltdXNiX3JlYWRsKG11c2ItPm1yZWdzLCBPVEdfSU5URVJGU0VMKSwKKwkJCW11c2JfcmVhZGwobXVzYi0+bXJlZ3MsIE9UR19TSU1FTkFCTEUpKTsKIAogCW9tYXBfdmJ1c19wb3dlcihtdXNiLCBtdXNiLT5ib2FyZF9tb2RlID09IE1VU0JfSE9TVCwgMSk7CiAKQEAgLTI1NSw2ICsyNTcsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19QTQordm9pZCBtdXNiX3BsYXRmb3JtX3NhdmVfY29udGV4dChzdHJ1Y3QgbXVzYiAqbXVzYiwKKwkJc3RydWN0IG11c2JfY29udGV4dF9yZWdpc3RlcnMgKm11c2JfY29udGV4dCkKK3sKKwltdXNiX2NvbnRleHQtPm90Z19zeXNjb25maWcgPSBtdXNiX3JlYWRsKG11c2ItPm1yZWdzLCBPVEdfU1lTQ09ORklHKTsKKwltdXNiX2NvbnRleHQtPm90Z19mb3JjZXN0YW5kYnkgPSBtdXNiX3JlYWRsKG11c2ItPm1yZWdzLCBPVEdfRk9SQ0VTVERCWSk7Cit9CisKK3ZvaWQgbXVzYl9wbGF0Zm9ybV9yZXN0b3JlX2NvbnRleHQoc3RydWN0IG11c2IgKm11c2IsCisJCXN0cnVjdCBtdXNiX2NvbnRleHRfcmVnaXN0ZXJzICptdXNiX2NvbnRleHQpCit7CisJbXVzYl93cml0ZWwobXVzYi0+bXJlZ3MsIE9UR19TWVNDT05GSUcsIG11c2JfY29udGV4dC0+b3RnX3N5c2NvbmZpZyk7CisJbXVzYl93cml0ZWwobXVzYi0+bXJlZ3MsIE9UR19GT1JDRVNUREJZLCBtdXNiX2NvbnRleHQtPm90Z19mb3JjZXN0YW5kYnkpOworfQorI2VuZGlmCisKIGludCBtdXNiX3BsYXRmb3JtX3N1c3BlbmQoc3RydWN0IG11c2IgKm11c2IpCiB7CiAJdTMyIGw7CkBAIC0yNjMsMTMgKzI4MSwxMyBAQAogCQlyZXR1cm4gMDsKIAogCS8qIGluIGFueSByb2xlICovCi0JbCA9IG9tYXBfcmVhZGwoT1RHX0ZPUkNFU1REQlkpOworCWwgPSBtdXNiX3JlYWRsKG11c2ItPm1yZWdzLCBPVEdfRk9SQ0VTVERCWSk7CiAJbCB8PSBFTkFCTEVGT1JDRTsJLyogZW5hYmxlIE1TVEFOREJZICovCi0Jb21hcF93cml0ZWwobCwgT1RHX0ZPUkNFU1REQlkpOworCW11c2Jfd3JpdGVsKG11c2ItPm1yZWdzLCBPVEdfRk9SQ0VTVERCWSwgbCk7CiAKLQlsID0gb21hcF9yZWFkbChPVEdfU1lTQ09ORklHKTsKKwlsID0gbXVzYl9yZWFkbChtdXNiLT5tcmVncywgT1RHX1NZU0NPTkZJRyk7CiAJbCB8PSBFTkFCTEVXQUtFVVA7CS8qIGVuYWJsZSB3YWtldXAgKi8KLQlvbWFwX3dyaXRlbChsLCBPVEdfU1lTQ09ORklHKTsKKwltdXNiX3dyaXRlbChtdXNiLT5tcmVncywgT1RHX1NZU0NPTkZJRywgbCk7CiAKIAlvdGdfc2V0X3N1c3BlbmQobXVzYi0+eGNlaXYsIDEpOwogCkBAIC0yOTUsMTMgKzMxMywxMyBAQAogCWVsc2UKIAkJY2xrX2VuYWJsZShtdXNiLT5jbG9jayk7CiAKLQlsID0gb21hcF9yZWFkbChPVEdfU1lTQ09ORklHKTsKKwlsID0gbXVzYl9yZWFkbChtdXNiLT5tcmVncywgT1RHX1NZU0NPTkZJRyk7CiAJbCAmPSB+RU5BQkxFV0FLRVVQOwkvKiBkaXNhYmxlIHdha2V1cCAqLwotCW9tYXBfd3JpdGVsKGwsIE9UR19TWVNDT05GSUcpOworCW11c2Jfd3JpdGVsKG11c2ItPm1yZWdzLCBPVEdfU1lTQ09ORklHLCBsKTsKIAotCWwgPSBvbWFwX3JlYWRsKE9UR19GT1JDRVNUREJZKTsKKwlsID0gbXVzYl9yZWFkbChtdXNiLT5tcmVncywgT1RHX0ZPUkNFU1REQlkpOwogCWwgJj0gfkVOQUJMRUZPUkNFOwkvKiBkaXNhYmxlIE1TVEFOREJZICovCi0Jb21hcF93cml0ZWwobCwgT1RHX0ZPUkNFU1REQlkpOworCW11c2Jfd3JpdGVsKG11c2ItPm1yZWdzLCBPVEdfRk9SQ0VTVERCWSwgbCk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2Ivb21hcDI0MzAuaCBiL2RyaXZlcnMvdXNiL211c2Ivb21hcDI0MzAuaAppbmRleCBmYmVkZTc3Li40MGIzYzAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tdXNiL29tYXAyNDMwLmgKKysrIGIvZHJpdmVycy91c2IvbXVzYi9vbWFwMjQzMC5oCkBAIC0xMCw0NyArMTAsNDMgQEAKICNpZm5kZWYgX19NVVNCX09NQVAyNDNYX0hfXwogI2RlZmluZSBfX01VU0JfT01BUDI0M1hfSF9fCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNDMwKQotI2luY2x1ZGUgPG1hY2gvaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxwbGF0L3VzYi5oPgogCiAvKgogICogT01BUDI0MzAtc3BlY2lmaWMgZGVmaW5pdGlvbnMKICAqLwogCi0jZGVmaW5lIE1FTlRPUl9CQVNFX09GRlNFVAkwCi0jaWYJZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkKLSNkZWZpbmUJT01BUF9IU09UR19CQVNFCQkoT01BUDI0M1hfSFNfQkFTRSkKLSNlbGlmCWRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0MzApCi0jZGVmaW5lCU9NQVBfSFNPVEdfQkFTRQkJKE9NQVAzNFhYX0hTVVNCX09UR19CQVNFKQotI2VuZGlmCi0jZGVmaW5lIE9NQVBfSFNPVEcob2Zmc2V0KQkoT01BUF9IU09UR19CQVNFICsgMHg0MDAgKyAob2Zmc2V0KSkKLSNkZWZpbmUgT1RHX1JFVklTSU9OCQlPTUFQX0hTT1RHKDB4MCkKLSNkZWZpbmUgT1RHX1NZU0NPTkZJRwkJT01BUF9IU09URygweDQpCisjZGVmaW5lIE9UR19SRVZJU0lPTgkJMHg0MDAKKworI2RlZmluZSBPVEdfU1lTQ09ORklHCQkweDQwNAogIwlkZWZpbmUJTUlETEVNT0RFCTEyCS8qIGJpdCBwb3NpdGlvbiAqLwogIwlkZWZpbmUJRk9SQ0VTVERCWQkJKDAgPDwgTUlETEVNT0RFKQogIwlkZWZpbmUJTk9TVERCWQkJCSgxIDw8IE1JRExFTU9ERSkKICMJZGVmaW5lCVNNQVJUU1REQlkJCSgyIDw8IE1JRExFTU9ERSkKKwogIwlkZWZpbmUJU0lETEVNT0RFCQkzCS8qIGJpdCBwb3NpdGlvbiAqLwogIwlkZWZpbmUJRk9SQ0VJRExFCQkoMCA8PCBTSURMRU1PREUpCiAjCWRlZmluZQlOT0lETEUJCQkoMSA8PCBTSURMRU1PREUpCiAjCWRlZmluZQlTTUFSVElETEUJCSgyIDw8IFNJRExFTU9ERSkKKwogIwlkZWZpbmUJRU5BQkxFV0FLRVVQCQkoMSA8PCAyKQogIwlkZWZpbmUJU09GVFJTVAkJCSgxIDw8IDEpCiAjCWRlZmluZQlBVVRPSURMRQkJKDEgPDwgMCkKLSNkZWZpbmUgT1RHX1NZU1NUQVRVUwkJT01BUF9IU09URygweDgpCisKKyNkZWZpbmUgT1RHX1NZU1NUQVRVUwkJMHg0MDgKICMJZGVmaW5lCVJFU0VURE9ORQkJKDEgPDwgMCkKLSNkZWZpbmUgT1RHX0lOVEVSRlNFTAkJT01BUF9IU09URygweGMpCisKKyNkZWZpbmUgT1RHX0lOVEVSRlNFTAkJMHg0MGMKICMJZGVmaW5lCUVYVENQCQkJKDEgPDwgMikKLSMJZGVmaW5lCVBIWVNFTAkJMAkvKiBiaXQgcG9zaXRpb24gKi8KKyMJZGVmaW5lCVBIWVNFTAkJCTAJLyogYml0IHBvc2l0aW9uICovCiAjCWRlZmluZQlVVE1JXzhCSVQJCSgwIDw8IFBIWVNFTCkKICMJZGVmaW5lCVVMUElfMTJQSU4JCSgxIDw8IFBIWVNFTCkKICMJZGVmaW5lCVVMUElfOFBJTgkJKDIgPDwgUEhZU0VMKQotI2RlZmluZSBPVEdfU0lNRU5BQkxFCQlPTUFQX0hTT1RHKDB4MTApCi0jCWRlZmluZQlUTTEJCQkoMSA8PCAwKQotI2RlZmluZSBPVEdfRk9SQ0VTVERCWQkJT01BUF9IU09URygweDE0KQotIwlkZWZpbmUJRU5BQkxFRk9SQ0UJCSgxIDw8IDApCiAKLSNlbmRpZgkvKiBDT05GSUdfQVJDSF9PTUFQMjQzMCAqLworI2RlZmluZSBPVEdfU0lNRU5BQkxFCQkweDQxMAorIwlkZWZpbmUJVE0xCQkJKDEgPDwgMCkKKworI2RlZmluZSBPVEdfRk9SQ0VTVERCWQkJMHg0MTQKKyMJZGVmaW5lCUVOQUJMRUZPUkNFCQkoMSA8PCAwKQogCiAjZW5kaWYJLyogX19NVVNCX09NQVAyNDNYX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMC5jIGIvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMC5jCmluZGV4IDg4YjU4N2MuLmFiNzc2YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL211c2IvdHVzYjYwMTAuYworKysgYi9kcml2ZXJzL3VzYi9tdXNiL3R1c2I2MDEwLmMKQEAgLTExMTgsNyArMTExOCw3IEBACiAJfQogCW11c2ItPnN5bmMgPSBtZW0tPnN0YXJ0OwogCi0Jc3luYyA9IGlvcmVtYXAobWVtLT5zdGFydCwgbWVtLT5lbmQgLSBtZW0tPnN0YXJ0ICsgMSk7CisJc3luYyA9IGlvcmVtYXAobWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShtZW0pKTsKIAlpZiAoIXN5bmMpIHsKIAkJcHJfZGVidWcoImlvcmVtYXAgZm9yIHN5bmMgZmFpbGVkXG4iKTsKIAkJcmV0ID0gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL211c2IvdHVzYjYwMTBfb21hcC5jIGIvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMF9vbWFwLmMKaW5kZXggZTEzYzc3MC4uMWM4NjgwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMF9vbWFwLmMKKysrIGIvZHJpdmVycy91c2IvbXVzYi90dXNiNjAxMF9vbWFwLmMKQEAgLTY0OCw3ICs2NDgsNyBAQAogCQl9CiAJfQogCi0JaWYgKCF0dXNiX2RtYS0+bXVsdGljaGFubmVsICYmIHR1c2JfZG1hICYmIHR1c2JfZG1hLT5jaCA+PSAwKQorCWlmICh0dXNiX2RtYSAmJiAhdHVzYl9kbWEtPm11bHRpY2hhbm5lbCAmJiB0dXNiX2RtYS0+Y2ggPj0gMCkKIAkJb21hcF9mcmVlX2RtYSh0dXNiX2RtYS0+Y2gpOwogCiAJa2ZyZWUodHVzYl9kbWEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivb3RnL3R3bDQwMzAtdXNiLmMgYi9kcml2ZXJzL3VzYi9vdGcvdHdsNDAzMC11c2IuYwppbmRleCAyYmU5ZjJmLi4zZTRlOWY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9vdGcvdHdsNDAzMC11c2IuYworKysgYi9kcml2ZXJzL3VzYi9vdGcvdHdsNDAzMC11c2IuYwpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy90d2wuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KLQorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAKIC8qIFJlZ2lzdGVyIGRlZmluZXMgKi8KIApAQCAtMjM2LDE1ICsyMzYsNiBAQAogI2RlZmluZSBQTUJSMQkJCQkweDBECiAjZGVmaW5lIEdQSU9fVVNCXzRQSU5fVUxQSV8yNDMwQwkoMyA8PCAwKQogCi0KLQotZW51bSBsaW5rc3RhdCB7Ci0JVVNCX0xJTktfVU5LTk9XTiA9IDAsCi0JVVNCX0xJTktfTk9ORSwKLQlVU0JfTElOS19WQlVTLAotCVVTQl9MSU5LX0lELAotfTsKLQogc3RydWN0IHR3bDQwMzBfdXNiIHsKIAlzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyCW90ZzsKIAlzdHJ1Y3QgZGV2aWNlCQkqZGV2OwpAQCAtMzQ3LDEwICszMzgsMTAgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIGVudW0gbGlua3N0YXQgdHdsNDAzMF91c2JfbGlua3N0YXQoc3RydWN0IHR3bDQwMzBfdXNiICp0d2wpCitzdGF0aWMgZW51bSB1c2JfeGNlaXZfZXZlbnRzIHR3bDQwMzBfdXNiX2xpbmtzdGF0KHN0cnVjdCB0d2w0MDMwX3VzYiAqdHdsKQogewogCWludAlzdGF0dXM7Ci0JaW50CWxpbmtzdGF0ID0gVVNCX0xJTktfVU5LTk9XTjsKKwlpbnQJbGlua3N0YXQgPSBVU0JfRVZFTlRfTk9ORTsKIAogCS8qCiAJICogRm9yIElEL1ZCVVMgc2Vuc2luZywgc2VlIG1hbnVhbCBzZWN0aW9uIDE1LjQuOCAuLi4KQEAgLTM2OCwxMSArMzU5LDExIEBACiAJCWRldl9lcnIodHdsLT5kZXYsICJVU0IgbGluayBzdGF0dXMgZXJyICVkXG4iLCBzdGF0dXMpOwogCWVsc2UgaWYgKHN0YXR1cyAmIChCSVQoNykgfCBCSVQoMikpKSB7CiAJCWlmIChzdGF0dXMgJiBCSVQoMikpCi0JCQlsaW5rc3RhdCA9IFVTQl9MSU5LX0lEOworCQkJbGlua3N0YXQgPSBVU0JfRVZFTlRfSUQ7CiAJCWVsc2UKLQkJCWxpbmtzdGF0ID0gVVNCX0xJTktfVkJVUzsKKwkJCWxpbmtzdGF0ID0gVVNCX0VWRU5UX1ZCVVM7CiAJfSBlbHNlCi0JCWxpbmtzdGF0ID0gVVNCX0xJTktfTk9ORTsKKwkJbGlua3N0YXQgPSBVU0JfRVZFTlRfTk9ORTsKIAogCWRldl9kYmcodHdsLT5kZXYsICJIV19DT05ESVRJT05TIDB4JTAyeC8lZDsgbGluayAlZFxuIiwKIAkJCXN0YXR1cywgc3RhdHVzLCBsaW5rc3RhdCk7CkBAIC0zODMsNyArMzc0LDcgQEAKIAogCXNwaW5fbG9ja19pcnEoJnR3bC0+bG9jayk7CiAJdHdsLT5saW5rc3RhdCA9IGxpbmtzdGF0OwotCWlmIChsaW5rc3RhdCA9PSBVU0JfTElOS19JRCkgeworCWlmIChsaW5rc3RhdCA9PSBVU0JfRVZFTlRfSUQpIHsKIAkJdHdsLT5vdGcuZGVmYXVsdF9hID0gdHJ1ZTsKIAkJdHdsLT5vdGcuc3RhdGUgPSBPVEdfU1RBVEVfQV9JRExFOwogCX0gZWxzZSB7CkBAIC01NjQsNyArNTU1LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ0d2wtPmxvY2ssIGZsYWdzKTsKIAlyZXQgPSBzcHJpbnRmKGJ1ZiwgIiVzXG4iLAotCQkJKHR3bC0+bGlua3N0YXQgPT0gVVNCX0xJTktfVkJVUykgPyAib24iIDogIm9mZiIpOworCQkJKHR3bC0+bGlua3N0YXQgPT0gVVNCX0VWRU5UX1ZCVVMpID8gIm9uIiA6ICJvZmYiKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0d2wtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiByZXQ7CkBAIC01NzYsMTcgKzU2Nyw4IEBACiAJc3RydWN0IHR3bDQwMzBfdXNiICp0d2wgPSBfdHdsOwogCWludCBzdGF0dXM7CiAKLSNpZmRlZiBDT05GSUdfTE9DS0RFUAotCS8qIFdPUktBUk9VTkQgZm9yIGxvY2tkZXAgZm9yY2luZyBJUlFGX0RJU0FCTEVEIG9uIHVzLCB3aGljaAotCSAqIHdlIGRvbid0IHdhbnQgYW5kIGNhbid0IHRvbGVyYXRlLiAgQWx0aG91Z2ggaXQgbWlnaHQgYmUKLQkgKiBmcmllbmRsaWVyIG5vdCB0byBib3Jyb3cgdGhpcyB0aHJlYWQgY29udGV4dC4uLgotCSAqLwotCWxvY2FsX2lycV9lbmFibGUoKTsKLSNlbmRpZgotCiAJc3RhdHVzID0gdHdsNDAzMF91c2JfbGlua3N0YXQodHdsKTsKLQlpZiAoc3RhdHVzICE9IFVTQl9MSU5LX1VOS05PV04pIHsKLQorCWlmIChzdGF0dXMgPj0gMCkgewogCQkvKiBGSVhNRSBhZGQgYSBzZXRfcG93ZXIoKSBtZXRob2Qgc28gdGhhdCBCLWRldmljZXMgY2FuCiAJCSAqIGNvbmZpZ3VyZSB0aGUgY2hhcmdlciBhcHByb3ByaWF0ZWx5LiAgSXQncyBub3QgYWx3YXlzCiAJCSAqIGNvcnJlY3QgdG8gY29uc3VtZSBWQlVTIHBvd2VyLCBhbmQgaG93IG11Y2ggY3VycmVudCB0bwpAQCAtNTk4LDEyICs1ODAsMTMgQEAKIAkJICogVVNCX0xJTktfVkJVUyBzdGF0ZS4gIG11c2JfaGRyYyB3b24ndCBjYXJlIHVudGlsIGl0CiAJCSAqIHN0YXJ0cyB0byBoYW5kbGUgc29mdGNvbm5lY3QgcmlnaHQuCiAJCSAqLwotCQlpZiAoc3RhdHVzID09IFVTQl9MSU5LX05PTkUpCisJCWlmIChzdGF0dXMgPT0gVVNCX0VWRU5UX05PTkUpCiAJCQl0d2w0MDMwX3BoeV9zdXNwZW5kKHR3bCwgMCk7CiAJCWVsc2UKIAkJCXR3bDQwMzBfcGh5X3Jlc3VtZSh0d2wpOwogCi0JCXR3bDQwMzBjaGFyZ2VyX3VzYl9lbihzdGF0dXMgPT0gVVNCX0xJTktfVkJVUyk7CisJCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJnR3bC0+b3RnLm5vdGlmaWVyLCBzdGF0dXMsCisJCQkJdHdsLT5vdGcuZ2FkZ2V0KTsKIAl9CiAJc3lzZnNfbm90aWZ5KCZ0d2wtPmRldi0+a29iaiwgTlVMTCwgInZidXMiKTsKIApAQCAtNjkzLDYgKzY3Niw4IEBACiAJaWYgKGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfdmJ1cykpCiAJCWRldl93YXJuKCZwZGV2LT5kZXYsICJjb3VsZCBub3QgY3JlYXRlIHN5c2ZzIGZpbGVcbiIpOwogCisJQkxPQ0tJTkdfSU5JVF9OT1RJRklFUl9IRUFEKCZ0d2wtPm90Zy5ub3RpZmllcik7CisKIAkvKiBPdXIgam9iIGlzIHRvIHVzZSBpcnFzIGFuZCBzdGF0dXMgZnJvbSB0aGUgcG93ZXIgbW9kdWxlCiAJICogdG8ga2VlcCB0aGUgdHJhbnNjZWl2ZXIgZGlzYWJsZWQgd2hlbiBub3RoaW5nJ3MgY29ubmVjdGVkLgogCSAqCkBAIC03MDIsNyArNjg3LDcgQEAKIAkgKiBuZWVkIGJvdGggaGFuZGxlcywgb3RoZXJ3aXNlIGp1c3Qgb25lIHN1ZmZpY2VzLgogCSAqLwogCXR3bC0+aXJxX2VuYWJsZWQgPSB0cnVlOwotCXN0YXR1cyA9IHJlcXVlc3RfaXJxKHR3bC0+aXJxLCB0d2w0MDMwX3VzYl9pcnEsCisJc3RhdHVzID0gcmVxdWVzdF90aHJlYWRlZF9pcnEodHdsLT5pcnEsIE5VTEwsIHR3bDQwMzBfdXNiX2lycSwKIAkJCUlSUUZfVFJJR0dFUl9GQUxMSU5HIHwgSVJRRl9UUklHR0VSX1JJU0lORywKIAkJCSJ0d2w0MDMwX3VzYiIsIHR3bCk7CiAJaWYgKHN0YXR1cyA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKaW5kZXggYzQ4MGVhNC4uYzc4YjI1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKQEAgLTQ3Miw2ICs0NzIsMTcgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG90aTY4NTguCiAKK2NvbmZpZyBVU0JfU0VSSUFMX1FDQVVYCisJdHJpc3RhdGUgIlVTQiBRdWFsY29tbSBBdXhpbGlhcnkgU2VyaWFsIFBvcnQgRHJpdmVyIgorCS0tLWhlbHAtLS0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBhdXhpbGlhcnkgc2VyaWFsIHBvcnRzIHByb3ZpZGVkCisJICBieSBtYW55IG1vZGVtcyBiYXNlZCBvbiBRdWFsY29tbSBjaGlwc2V0cy4gIFRoZXNlIHBvcnRzIG9mdGVuIHVzZQorCSAgYSBwcm9wcmlldGFyeSBwcm90b2NvbCBjYWxsZWQgRE0gYW5kIGNhbm5vdCBiZSB1c2VkIGZvciBBVC0gb3IKKwkgIFBQUC1iYXNlZCBjb21tdW5pY2F0aW9uLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtb3RvX21vZGVtLiAgSWYgdW5zdXJlLCBjaG9vc2UgTi4KKwogY29uZmlnIFVTQl9TRVJJQUxfUVVBTENPTU0KIAl0cmlzdGF0ZSAiVVNCIFF1YWxjb21tIFNlcmlhbCBtb2RlbSIKIAloZWxwCkBAIC02MDAsNiArNjExLDE0IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBvcHRpY29uLgogCitjb25maWcgVVNCX1NFUklBTF9WSVZPUEFZX1NFUklBTAorICAgICAgICB0cmlzdGF0ZSAiVVNCIFZpVk9wYXkgc2VyaWFsIGludGVyZmFjZSBkcml2ZXIiCisgICAgICAgIGhlbHAKKyAgICAgICAgICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIFZpVk90ZWNoIFZpVk9wYXkgVVNCIGRldmljZS4KKworICAgICAgICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorICAgICAgICAgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2aXZvcGF5LXNlcmlhbC4KKwogY29uZmlnIFVTQl9TRVJJQUxfREVCVUcKIAl0cmlzdGF0ZSAiVVNCIERlYnVnZ2luZyBEZXZpY2UiCiAJaGVscApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlIGIvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCmluZGV4IDY2NjE5YmUuLjgzYzllNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKQEAgLTQ1LDYgKzQ1LDcgQEAKIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX09QVElPTikJCQkrPSBvcHRpb24ubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfT1RJNjg1OCkJCSs9IG90aTY4NTgubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzKQkJCSs9IHBsMjMwMy5vCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9RQ0FVWCkJCQkrPSBxY2F1eC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9RVUFMQ09NTSkJCSs9IHFjc2VyaWFsLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX1NBRkUpCQkJKz0gc2FmZV9zZXJpYWwubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfU0lFTUVOU19NUEkpCQkrPSBzaWVtZW5zX21waS5vCkBAIC01NSw0ICs1Niw1IEBACiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9WSVNPUikJCQkrPSB2aXNvci5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9XSElURUhFQVQpCQkrPSB3aGl0ZWhlYXQubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfWElSQ09NKQkJCSs9IGtleXNwYW5fcGRhLm8KK29iai0kKENPTkZJR19VU0JfU0VSSUFMX1ZJVk9QQVlfU0VSSUFMKQkrPSB2aXZvcGF5LXNlcmlhbC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKaW5kZXggYjEwYWM4NC4uMzY1ZGIxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKQEAgLTc4LDcgKzc4LDcgQEAKICNkZWZpbmUgRFJJVkVSX0RFU0MgIkFJUmNhYmxlIFVTQiBEcml2ZXIiCiAKIC8qIElEIHRhYmxlIHRoYXQgd2lsbCBiZSByZWdpc3RlcmVkIHdpdGggVVNCIGNvcmUgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShBSVJDQUJMRV9WSUQsIEFJUkNBQkxFX1VTQl9QSUQpIH0sCiAJeyB9LAogfTsKQEAgLTQ2OCwxMCArNDY4LDYgQEAKIAogCWlmIChzdGF0dXMpIHsKIAkJZGJnKCIlcyAtIHVyYiBzdGF0dXMgPSAlZCIsIF9fZnVuY19fLCBzdGF0dXMpOwotCQlpZiAoIXBvcnQtPnBvcnQuY291bnQpIHsKLQkJCWRiZygiJXMgLSBwb3J0IGlzIGNsb3NlZCwgZXhpdGluZy4iLCBfX2Z1bmNfXyk7Ci0JCQlyZXR1cm47Ci0JCX0KIAkJaWYgKHN0YXR1cyA9PSAtRVBST1RPKSB7CiAJCQlkYmcoIiVzIC0gY2F1Z2h0IC1FUFJPVE8sIHJlc3VibWl0dGluZyB0aGUgdXJiIiwKIAkJCSAgICBfX2Z1bmNfXyk7CkBAIC01MzAsMjMgKzUyNiwxOSBAQAogCX0KIAl0dHlfa3JlZl9wdXQodHR5KTsKIAotCS8qIFNjaGVkdWxlIHRoZSBuZXh0IHJlYWQgX2lmXyB3ZSBhcmUgc3RpbGwgb3BlbiAqLwotCWlmIChwb3J0LT5wb3J0LmNvdW50KSB7Ci0JCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBwb3J0LT5zZXJpYWwtPmRldiwKLQkJCQkgIHVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKLQkJCQkJICBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCi0JCQkJICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAotCQkJCSAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCQkJICBhaXJjYWJsZV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCS8qIFNjaGVkdWxlIHRoZSBuZXh0IHJlYWQgKi8KKwl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgcG9ydC0+c2VyaWFsLT5kZXYsCisJCQkgIHVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKKwkJCQkgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCSAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkgIGFpcmNhYmxlX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CiAKLQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKLQkJaWYgKHJlc3VsdCkKLQkJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsCi0JCQkJIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCi0JCQkJX19mdW5jX18sIHJlc3VsdCk7Ci0JfQotCi0JcmV0dXJuOworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCAmJiByZXN1bHQgIT0gLUVQRVJNKQorCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQlfX2Z1bmNfXywgcmVzdWx0KTsKIH0KIAogLyogQmFzZWQgb24gZnRkaV9zaW8uYyB0aHJvdHRsZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2FyazMxMTYuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9hcmszMTE2LmMKaW5kZXggYTljMmRlYy4uNTQ3Yzk0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2FyazMxMTYuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYXJrMzExNi5jCkBAIC01MCw3ICs1MCw3IEBACiAvKiB1c2IgdGltZW91dCBvZiAxIHNlY29uZCAqLwogI2RlZmluZSBBUktfVElNRU9VVCAoMSpIWikKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4NjU0NywgMHgwMjMyKSB9LAogCXsgVVNCX0RFVklDRSgweDE4ZWMsIDB4MzExOCkgfSwJCS8qIFVTQiB0byBJckRBIGFkYXB0ZXIgKi8KIAl7IH0sCkBAIC03MzMsNyArNzMzLDYgQEAKIAogCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAkJaWYgKHR0eSkgewotCQkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGggKyAxKTsKIAkJCS8qIG92ZXJydW4gaXMgc3BlY2lhbCwgbm90IGFzc29jaWF0ZWQgd2l0aCBhIGNoYXIgKi8KIAkJCWlmICh1bmxpa2VseShsc3IgJiBVQVJUX0xTUl9PRSkpCiAJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAwLCBUVFlfT1ZFUlJVTik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYmVsa2luX3NhLmMKaW5kZXggYTA0NjdiYy4uMTI5NWU0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2JlbGtpbl9zYS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9iZWxraW5fc2EuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJCQkJCXVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcik7CiAKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkW10gPSB7CiAJeyBVU0JfREVWSUNFKEJFTEtJTl9TQV9WSUQsIEJFTEtJTl9TQV9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEJFTEtJTl9PTERfVklELCBCRUxLSU5fT0xEX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoUEVSQUNPTV9WSUQsIFBFUkFDT01fUElEKSB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2NoMzQxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYwppbmRleCA1OWVmZjcyLi45ZjRmZWQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY2gzNDEuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+CiAKICNkZWZpbmUgREVGQVVMVF9CQVVEX1JBVEUgOTYwMAogI2RlZmluZSBERUZBVUxUX1RJTUVPVVQgICAxMDAwCkBAIC03MCw3ICs3MSw3IEBACiAKIHN0YXRpYyBpbnQgZGVidWc7CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRSgweDQzNDgsIDB4NTUyMykgfSwKIAl7IFVTQl9ERVZJQ0UoMHgxYTg2LCAweDc1MjMpIH0sCiAJeyB9LApAQCAtMzkyLDE3ICszOTMsMjMgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlpbnQgcjsKIAl1aW50MTZfdCByZWdfY29udGVudHM7Ci0JdWludDhfdCBicmVha19yZWdbMl07CisJdWludDhfdCAqYnJlYWtfcmVnOwogCiAJZGJnKCIlcygpIiwgX19mdW5jX18pOwogCi0JciA9IGNoMzQxX2NvbnRyb2xfaW4ocG9ydC0+c2VyaWFsLT5kZXYsIENIMzQxX1JFUV9SRUFEX1JFRywKLQkJCWNoMzQxX2JyZWFrX3JlZywgMCwgYnJlYWtfcmVnLCBzaXplb2YoYnJlYWtfcmVnKSk7Ci0JaWYgKHIgPCAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVU0IgY29udHJvbCByZWFkIGVycm9yIHdoaWxzdCBnZXR0aW5nIgotCQkJCSIgYnJlYWsgcmVnaXN0ZXIgY29udGVudHMuXG4iLCBfX0ZJTEVfXyk7CisJYnJlYWtfcmVnID0ga21hbGxvYygyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJyZWFrX3JlZykgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGttYWxsb2MgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CisKKwlyID0gY2gzNDFfY29udHJvbF9pbihwb3J0LT5zZXJpYWwtPmRldiwgQ0gzNDFfUkVRX1JFQURfUkVHLAorCQkJY2gzNDFfYnJlYWtfcmVnLCAwLCBicmVha19yZWcsIDIpOworCWlmIChyIDwgMCkgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIFVTQiBjb250cm9sIHJlYWQgZXJyb3IgKCVkKVxuIiwKKwkJCQlfX2Z1bmNfXywgcik7CisJCWdvdG8gb3V0OworCX0KIAlkYmcoIiVzIC0gaW5pdGlhbCBjaDM0MSBicmVhayByZWdpc3RlciBjb250ZW50cyAtIHJlZzE6ICV4LCByZWcyOiAleCIsCiAJCQlfX2Z1bmNfXywgYnJlYWtfcmVnWzBdLCBicmVha19yZWdbMV0pOwogCWlmIChicmVha19zdGF0ZSAhPSAwKSB7CkBAIC00MTYsMTIgKzQyMywxNCBAQAogCX0KIAlkYmcoIiVzIC0gTmV3IGNoMzQxIGJyZWFrIHJlZ2lzdGVyIGNvbnRlbnRzIC0gcmVnMTogJXgsIHJlZzI6ICV4IiwKIAkJCV9fZnVuY19fLCBicmVha19yZWdbMF0sIGJyZWFrX3JlZ1sxXSk7Ci0JcmVnX2NvbnRlbnRzID0gKHVpbnQxNl90KWJyZWFrX3JlZ1swXSB8ICgodWludDE2X3QpYnJlYWtfcmVnWzFdIDw8IDgpOworCXJlZ19jb250ZW50cyA9IGdldF91bmFsaWduZWRfbGUxNihicmVha19yZWcpOwogCXIgPSBjaDM0MV9jb250cm9sX291dChwb3J0LT5zZXJpYWwtPmRldiwgQ0gzNDFfUkVRX1dSSVRFX1JFRywKIAkJCWNoMzQxX2JyZWFrX3JlZywgcmVnX2NvbnRlbnRzKTsKIAlpZiAociA8IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBVU0IgY29udHJvbCB3cml0ZSBlcnJvciB3aGlsc3Qgc2V0dGluZyIKLQkJCQkiIGJyZWFrIHJlZ2lzdGVyIGNvbnRlbnRzLlxuIiwgX19GSUxFX18pOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIFVTQiBjb250cm9sIHdyaXRlIGVycm9yICglZClcbiIsCisJCQkJX19mdW5jX18sIHIpOworb3V0OgorCWtmcmVlKGJyZWFrX3JlZyk7CiB9CiAKIHN0YXRpYyBpbnQgY2gzNDFfdGlvY21zZXQoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3AyMTB4LmMKaW5kZXggYmQyNTRlYy4uNTA3MzgyYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2NwMjEweC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jcDIxMHguYwpAQCAtNTUsNyArNTUsNyBAQAogCiBzdGF0aWMgaW50IGRlYnVnOwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHgwNDcxLCAweDA2NkEpIH0sIC8qIEFLVEFLT00gQUNFLTEwMDEgY2FibGUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNDg5LCAweEUwMDApIH0sIC8qIFBpcmVsbGkgQnJvYWRiYW5kIFMucC5BLCBEUC1MMTAgU0lQL0dTTSBNb2JpbGUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwNzQ1LCAweDEwMDApIH0sIC8qIENpcGhlckxhYiBVU0IgQ0NEIEJhcmNvZGUgU2Nhbm5lciAxMDAwICovCkBAIC05MSwxMSArOTEsMTIgQEAKIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxQzgpIH0sIC8qIExpcG93c2t5IEluZHVzdHJpZSBFbGVrdHJvbmlrIEdtYkgsIEJhYnktSlRBRyAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODFFMikgfSwgLyogTGlwb3dza3kgSW5kdXN0cmllIEVsZWt0cm9uaWsgR21iSCwgQmFieS1MSU4gKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgxRTcpIH0sIC8qIEFlcm9jb21tIFJhZGlvICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MUU4KSB9LCAvKiBaZXBoeXIgQmlvaGFybmVzcyAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODFGMikgfSwgLyogQzEwMDcgSEYgYmFuZCBSRklEIGNvbnRyb2xsZXIgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgyMTgpIH0sIC8qIExpcG93c2t5IEluZHVzdHJpZSBFbGVrdHJvbmlrIEdtYkgsIEhBUlAtMSAqLwogCXsgVVNCX0RFVklDRSgweDEwQzQsIDB4ODIyQikgfSwgLyogTW9kZW0gRURHRShHU00pIENvbWFuZGVyIDIgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgyNkIpIH0sIC8qIEN5Z25hbCBJbnRlZ3JhdGVkIFByb2R1Y3RzLCBJbmMuLCBGYXN0dHJheCBHUFMgZGVtb3N0cmF0aW9uIG1vZHVsZSAqLwotCXsgVVNCX0RFVklDRSgweDEwYzQsIDB4ODI5MykgfSwgLyogVGVsZWdlc3lzIEVUUlgyVVNCICovCisJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MjkzKSB9LCAvKiBUZWxlZ2VzeXMgRVRSWDJVU0IgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMEM0LCAweDgyRjkpIH0sIC8qIFByb2N5b24gQVZTICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MzQxKSB9LCAvKiBTaWVtZW5zIE1DMzVQVSBHUFJTIE1vZGVtICovCiAJeyBVU0JfREVWSUNFKDB4MTBDNCwgMHg4MzgyKSB9LCAvKiBDeWduYWwgSW50ZWdyYXRlZCBQcm9kdWN0cywgSW5jLiAqLwpAQCAtNjEyLDcgKzYxMyw3IEBACiAJCQkJYmF1ZCk7CiAJCWlmIChjcDIxMHhfc2V0X2NvbmZpZ19zaW5nbGUocG9ydCwgQ1AyMTBYX1NFVF9CQVVERElWLAogCQkJCQkoKEJBVURfUkFURV9HRU5fRlJFUSArIGJhdWQvMikgLyBiYXVkKSkpIHsKLQkJCWRiZygiQmF1ZCByYXRlIHJlcXVlc3RlZCBub3Qgc3VwcG9ydGVkIGJ5IGRldmljZVxuIik7CisJCQlkYmcoIkJhdWQgcmF0ZSByZXF1ZXN0ZWQgbm90IHN1cHBvcnRlZCBieSBkZXZpY2UiKTsKIAkJCWJhdWQgPSB0dHlfdGVybWlvc19iYXVkX3JhdGUob2xkX3Rlcm1pb3MpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jCmluZGV4IGIwZjY0MDIuLmY3NDRhYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeWJlcmphY2suYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMKQEAgLTcwLDcgKzcwLDcgQEAKIHN0YXRpYyB2b2lkIGN5YmVyamFja19yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKIHN0YXRpYyB2b2lkIGN5YmVyamFja193cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYik7CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShDWUJFUkpBQ0tfVkVORE9SX0lELCBDWUJFUkpBQ0tfUFJPRFVDVF9JRCkgfSwKIAl7IH0JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKQEAgLTM5MSwxMSArMzkxLDEwIEBACiAKIAl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAlpZiAoIXR0eSkgewotCQlkYmcoIiVzIC0gaWdub3Jpbmcgc2luY2UgZGV2aWNlIG5vdCBvcGVuXG4iLCBfX2Z1bmNfXyk7CisJCWRiZygiJXMgLSBpZ25vcmluZyBzaW5jZSBkZXZpY2Ugbm90IG9wZW4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCmluZGV4IGE1OTFlYmUuLmUyM2M3NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYwpAQCAtNjYsMTcgKzY2LDE1IEBACiAjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgogCiAjaW5jbHVkZSAiY3lwcmVzc19tOC5oIgogCiAKLSNpZmRlZiBDT05GSUdfVVNCX1NFUklBTF9ERUJVRwotCXN0YXRpYyBpbnQgZGVidWcgPSAxOwotI2Vsc2UKLQlzdGF0aWMgaW50IGRlYnVnOwotI2VuZGlmCitzdGF0aWMgaW50IGRlYnVnOwogc3RhdGljIGludCBzdGF0czsKIHN0YXRpYyBpbnQgaW50ZXJ2YWw7CitzdGF0aWMgaW50IHVuc3RhYmxlX2JhdWRzOwogCiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgpAQCAtODksMjQgKzg3LDI0IEBACiAjZGVmaW5lIENZUFJFU1NfQlVGX1NJWkUJMTAyNAogI2RlZmluZSBDWVBSRVNTX0NMT1NJTkdfV0FJVAkoMzAqSFopCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9lYXJ0aG1hdGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfZWFydGhtYXRlW10gPSB7CiAJeyBVU0JfREVWSUNFKFZFTkRPUl9JRF9ERUxPUk1FLCBQUk9EVUNUX0lEX0VBUlRITUFURVVTQikgfSwKIAl7IFVTQl9ERVZJQ0UoVkVORE9SX0lEX0RFTE9STUUsIFBST0RVQ1RfSURfRUFSVEhNQVRFVVNCX0xUMjApIH0sCiAJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jeXBoaWRjb21yczIzMiBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jeXBoaWRjb21yczIzMltdID0gewogCXsgVVNCX0RFVklDRShWRU5ET1JfSURfQ1lQUkVTUywgUFJPRFVDVF9JRF9DWVBISURDT00pIH0sCiAJeyBVU0JfREVWSUNFKFZFTkRPUl9JRF9QT1dFUkNPTSwgUFJPRFVDVF9JRF9VUFMpIH0sCiAJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9ub2tpYWNhNDJ2MiBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9ub2tpYWNhNDJ2MltdID0gewogCXsgVVNCX0RFVklDRShWRU5ET1JfSURfREFaWkxFLCBQUk9EVUNUX0lEX0NBNDIpIH0sCiAJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZCBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZFtdID0gewogCXsgVVNCX0RFVklDRShWRU5ET1JfSURfREVMT1JNRSwgUFJPRFVDVF9JRF9FQVJUSE1BVEVVU0IpIH0sCiAJeyBVU0JfREVWSUNFKFZFTkRPUl9JRF9ERUxPUk1FLCBQUk9EVUNUX0lEX0VBUlRITUFURVVTQl9MVDIwKSB9LAogCXsgVVNCX0RFVklDRShWRU5ET1JfSURfQ1lQUkVTUywgUFJPRFVDVF9JRF9DWVBISURDT00pIH0sCkBAIC0xNTQsNyArMTUyLDcgQEAKIAlpbnQgaXN0aHJvdHRsZWQ7CQkgICAvKiBpZiB0aHJvdHRsZWQsIGRpc2NhcmQgcmVhZHMgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCBkZWx0YV9tc3Jfd2FpdDsgIC8qIHVzZWQgZm9yIFRJT0NNSVdBSVQgKi8KIAljaGFyIHByZXZfc3RhdHVzLCBkaWZmX3N0YXR1czsJICAgLyogdXNlZCBmb3IgVElPQ01JV0FJVCAqLwotCS8qIHdlIHBhc3MgYSBwb2ludGVyIHRvIHRoaXMgYXMgdGhlIGFyZ3VlbWVudCBzZW50IHRvCisJLyogd2UgcGFzcyBhIHBvaW50ZXIgdG8gdGhpcyBhcyB0aGUgYXJndW1lbnQgc2VudCB0bwogCSAgIGN5cHJlc3Nfc2V0X3Rlcm1pb3Mgb2xkX3Rlcm1pb3MgKi8KIAlzdHJ1Y3Qga3Rlcm1pb3MgdG1wX3Rlcm1pb3M7IAkgICAvKiBzdG9yZXMgdGhlIG9sZCB0ZXJtaW9zIHNldHRpbmdzICovCiB9OwpAQCAtMjk1LDYgKzI5Myw5IEBACiAJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdjsKIAlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCisJaWYgKHVuc3RhYmxlX2JhdWRzKQorCQlyZXR1cm4gbmV3X3JhdGU7CisKIAkvKgogCSAqIFRoZSBnZW5lcmFsIHB1cnBvc2UgZmlybXdhcmUgZm9yIHRoZSBDeXByZXNzIE04IGFsbG93cyBmb3IKIAkgKiBhIG1heGltdW0gc3BlZWQgb2YgNTc2MDBicHMgKEkgaGF2ZSBubyBpZGVhIHdoZXRoZXIgRGVMb3JtZQpAQCAtMzQ0LDcgKzM0NSw4IEBACiB7CiAJaW50IG5ld19iYXVkcmF0ZSA9IDAsIHJldHZhbCA9IDAsIHRyaWVzID0gMDsKIAlzdHJ1Y3QgY3lwcmVzc19wcml2YXRlICpwcml2OwotCV9fdTggZmVhdHVyZV9idWZmZXJbNV07CisJdTggKmZlYXR1cmVfYnVmZmVyOworCWNvbnN0IHVuc2lnbmVkIGludCBmZWF0dXJlX2xlbiA9IDU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CkBAIC0zNTQsMTcgKzM1NiwxOCBAQAogCWlmICghcHJpdi0+Y29tbV9pc19vaykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlmZWF0dXJlX2J1ZmZlciA9IGtjYWxsb2MoZmVhdHVyZV9sZW4sIHNpemVvZih1OCksIEdGUF9LRVJORUwpOworCWlmICghZmVhdHVyZV9idWZmZXIpCisJCXJldHVybiAtRU5PTUVNOworCiAJc3dpdGNoIChjeXByZXNzX3JlcXVlc3RfdHlwZSkgewogCWNhc2UgQ1lQUkVTU19TRVRfQ09ORklHOgotCQluZXdfYmF1ZHJhdGUgPSBwcml2LT5iYXVkX3JhdGU7CiAJCS8qIDAgbWVhbnMgJ0hhbmcgdXAnIHNvIGRvZXNuJ3QgY2hhbmdlIHRoZSB0cnVlIGJpdCByYXRlICovCi0JCWlmIChiYXVkX3JhdGUgPT0gMCkKLQkJCW5ld19iYXVkcmF0ZSA9IHByaXYtPmJhdWRfcmF0ZTsKLQkJLyogQ2hhbmdlIG9mIHNwZWVkID8gKi8KLQkJZWxzZSBpZiAoYmF1ZF9yYXRlICE9IHByaXYtPmJhdWRfcmF0ZSkgeworCQluZXdfYmF1ZHJhdGUgPSBwcml2LT5iYXVkX3JhdGU7CisJCWlmIChiYXVkX3JhdGUgJiYgYmF1ZF9yYXRlICE9IHByaXYtPmJhdWRfcmF0ZSkgewogCQkJZGJnKCIlcyAtIGJhdWQgcmF0ZSBpcyBjaGFuZ2luZyIsIF9fZnVuY19fKTsKIAkJCXJldHZhbCA9IGFuYWx5emVfYmF1ZF9yYXRlKHBvcnQsIGJhdWRfcmF0ZSk7Ci0JCQlpZiAocmV0dmFsID49ICAwKSB7CisJCQlpZiAocmV0dmFsID49IDApIHsKIAkJCQluZXdfYmF1ZHJhdGUgPSByZXR2YWw7CiAJCQkJZGJnKCIlcyAtIE5ldyBiYXVkIHJhdGUgc2V0IHRvICVkIiwKIAkJCQkgICAgX19mdW5jX18sIG5ld19iYXVkcmF0ZSk7CkBAIC0zNzMsOSArMzc2LDggQEAKIAkJZGJnKCIlcyAtIGJhdWQgcmF0ZSBpcyBiZWluZyBzZW50IGFzICVkIiwKIAkJCQkJX19mdW5jX18sIG5ld19iYXVkcmF0ZSk7CiAKLQkJbWVtc2V0KGZlYXR1cmVfYnVmZmVyLCAwLCBzaXplb2YoZmVhdHVyZV9idWZmZXIpKTsKIAkJLyogZmlsbCB0aGUgZmVhdHVyZV9idWZmZXIgd2l0aCBuZXcgY29uZmlndXJhdGlvbiAqLwotCQkqKCh1X2ludDMyX3QgKilmZWF0dXJlX2J1ZmZlcikgPSBuZXdfYmF1ZHJhdGU7CisJCXB1dF91bmFsaWduZWRfbGUzMihuZXdfYmF1ZHJhdGUsIGZlYXR1cmVfYnVmZmVyKTsKIAkJZmVhdHVyZV9idWZmZXJbNF0gfD0gZGF0YV9iaXRzOyAgIC8qIGFzc2lnbiBkYXRhIGJpdHMgaW4gMiBiaXQgc3BhY2UgKCBtYXggMyApICovCiAJCS8qIDEgYml0IGdhcCAqLwogCQlmZWF0dXJlX2J1ZmZlcls0XSB8PSAoc3RvcF9iaXRzIDw8IDMpOyAgIC8qIGFzc2lnbiBzdG9wIGJpdHMgaW4gMSBiaXQgc3BhY2UgKi8KQEAgLTM5NywxNSArMzk5LDE1IEBACiAJCQkJCUhJRF9SRVFfU0VUX1JFUE9SVCwKIAkJCQkJVVNCX0RJUl9PVVQgfCBVU0JfUkVDSVBfSU5URVJGQUNFIHwgVVNCX1RZUEVfQ0xBU1MsCiAJCQkJCTB4MDMwMCwgMCwgZmVhdHVyZV9idWZmZXIsCi0JCQkJCXNpemVvZihmZWF0dXJlX2J1ZmZlciksIDUwMCk7CisJCQkJCWZlYXR1cmVfbGVuLCA1MDApOwogCiAJCQlpZiAodHJpZXMrKyA+PSAzKQogCQkJCWJyZWFrOwogCi0JCX0gd2hpbGUgKHJldHZhbCAhPSBzaXplb2YoZmVhdHVyZV9idWZmZXIpICYmCisJCX0gd2hpbGUgKHJldHZhbCAhPSBmZWF0dXJlX2xlbiAmJgogCQkJIHJldHZhbCAhPSAtRU5PREVWKTsKIAotCQlpZiAocmV0dmFsICE9IHNpemVvZihmZWF0dXJlX2J1ZmZlcikpIHsKKwkJaWYgKHJldHZhbCAhPSBmZWF0dXJlX2xlbikgewogCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc2VuZGluZyBzZXJpYWwgIgogCQkJCSJsaW5lIHNldHRpbmdzIC0gJWRcbiIsIF9fZnVuY19fLCByZXR2YWwpOwogCQkJY3lwcmVzc19zZXRfZGVhZChwb3J0KTsKQEAgLTQyNSw0MyArNDI3LDQyIEBACiAJCQkvKiBOb3QgaW1wbGVtZW50ZWQgZm9yIHRoaXMgZGV2aWNlLAogCQkJICAgYW5kIGlmIHdlIHRyeSB0byBkbyBpdCB3ZSdyZSBsaWtlbHkKIAkJCSAgIHRvIGNyYXNoIHRoZSBoYXJkd2FyZS4gKi8KLQkJCXJldHVybiAtRU5PVFRZOworCQkJcmV0dmFsID0gLUVOT1RUWTsKKwkJCWdvdG8gb3V0OwogCQl9CiAJCWRiZygiJXMgLSByZXRyZWl2aW5nIHNlcmlhbCBsaW5lIHNldHRpbmdzIiwgX19mdW5jX18pOwotCQkvKiBzZXQgaW5pdGlhbCB2YWx1ZXMgaW4gZmVhdHVyZSBidWZmZXIgKi8KLQkJbWVtc2V0KGZlYXR1cmVfYnVmZmVyLCAwLCBzaXplb2YoZmVhdHVyZV9idWZmZXIpKTsKLQogCQlkbyB7CiAJCQlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsCiAJCQkJCXVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCiAJCQkJCUhJRF9SRVFfR0VUX1JFUE9SVCwKIAkJCQkJVVNCX0RJUl9JTiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UgfCBVU0JfVFlQRV9DTEFTUywKIAkJCQkJMHgwMzAwLCAwLCBmZWF0dXJlX2J1ZmZlciwKLQkJCQkJc2l6ZW9mKGZlYXR1cmVfYnVmZmVyKSwgNTAwKTsKKwkJCQkJZmVhdHVyZV9sZW4sIDUwMCk7CiAKIAkJCWlmICh0cmllcysrID49IDMpCiAJCQkJYnJlYWs7Ci0JCX0gd2hpbGUgKHJldHZhbCAhPSBzaXplb2YoZmVhdHVyZV9idWZmZXIpCisJCX0gd2hpbGUgKHJldHZhbCAhPSBmZWF0dXJlX2xlbgogCQkJCQkJJiYgcmV0dmFsICE9IC1FTk9ERVYpOwogCi0JCWlmIChyZXR2YWwgIT0gc2l6ZW9mKGZlYXR1cmVfYnVmZmVyKSkgeworCQlpZiAocmV0dmFsICE9IGZlYXR1cmVfbGVuKSB7CiAJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCB0byByZXRyaWV2ZSBzZXJpYWwgIgogCQkJCSJsaW5lIHNldHRpbmdzIC0gJWRcbiIsIF9fZnVuY19fLCByZXR2YWwpOwogCQkJY3lwcmVzc19zZXRfZGVhZChwb3J0KTsKLQkJCXJldHVybiByZXR2YWw7CisJCQlnb3RvIG91dDsKIAkJfSBlbHNlIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCQkvKiBzdG9yZSB0aGUgY29uZmlnIGluIG9uZSBieXRlLCBhbmQgbGF0ZXIKIAkJCSAgIHVzZSBiaXQgbWFza3MgdG8gY2hlY2sgdmFsdWVzICovCiAJCQlwcml2LT5jdXJyZW50X2NvbmZpZyA9IGZlYXR1cmVfYnVmZmVyWzRdOwotCQkJcHJpdi0+YmF1ZF9yYXRlID0gKigodV9pbnQzMl90ICopZmVhdHVyZV9idWZmZXIpOworCQkJcHJpdi0+YmF1ZF9yYXRlID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGZlYXR1cmVfYnVmZmVyKTsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJfQogCX0KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCSsrcHJpdi0+Y21kX2NvdW50OwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQorb3V0OgorCWtmcmVlKGZlYXR1cmVfYnVmZmVyKTsKIAlyZXR1cm4gcmV0dmFsOwogfSAvKiBjeXByZXNzX3NlcmlhbF9jb250cm9sICovCiAKQEAgLTY5MCw3ICs2OTEsNiBAQAogewogCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJLyogZHJvcCBkdHIgYW5kIHJ0cyAqLwotCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJc3Bpbl9sb2NrX2lycSgmcHJpdi0+bG9jayk7CiAJaWYgKG9uID09IDApCiAJCXByaXYtPmxpbmVfY29udHJvbCA9IDA7CkBAIC0xMzA3LDEzICsxMzA3LDkgQEAKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJLyogcHJvY2VzcyByZWFkIGlmIHRoZXJlIGlzIGRhdGEgb3RoZXIgdGhhbiBsaW5lIHN0YXR1cyAqLwotCWlmICh0dHkgJiYgKGJ5dGVzID4gaSkpIHsKLQkJYnl0ZXMgPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIGJ5dGVzKTsKLQkJZm9yICg7IGkgPCBieXRlcyA7ICsraSkgewotCQkJZGJnKCJwdXNoaW5nIGJ5dGUgbnVtYmVyICVkIC0gJWQgLSAlYyIsIGksIGRhdGFbaV0sCi0JCQkJCWRhdGFbaV0pOwotCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCB0dHlfZmxhZyk7Ci0JCX0KKwlpZiAodHR5ICYmIGJ5dGVzID4gaSkgeworCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZpeGVkX2ZsYWcodHR5LCBkYXRhICsgaSwKKwkJCQlieXRlcyAtIGksIHR0eV9mbGFnKTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAl9CiAKQEAgLTEzMjUsOSArMTMyMSw5IEBACiBjb250aW51ZV9yZWFkOgogCXR0eV9rcmVmX3B1dCh0dHkpOwogCi0JLyogQ29udGludWUgdHJ5aW5nIHRvIGFsd2F5cyByZWFkLi4uIHVubGVzcyB0aGUgcG9ydCBoYXMgY2xvc2VkLiAqLworCS8qIENvbnRpbnVlIHRyeWluZyB0byBhbHdheXMgcmVhZCAqLwogCi0JaWYgKHBvcnQtPnBvcnQuY291bnQgPiAwICYmIHByaXYtPmNvbW1faXNfb2spIHsKKwlpZiAocHJpdi0+Y29tbV9pc19vaykgewogCQl1c2JfZmlsbF9pbnRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LAogCQkJCXVzYl9yY3ZpbnRwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAogCQkJCQlwb3J0LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzKSwKQEAgLTEzMzYsNyArMTMzMiw3IEBACiAJCQkJY3lwcmVzc19yZWFkX2ludF9jYWxsYmFjaywgcG9ydCwKIAkJCQlwcml2LT5yZWFkX3VyYl9pbnRlcnZhbCk7CiAJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9BVE9NSUMpOwotCQlpZiAocmVzdWx0KSB7CisJCWlmIChyZXN1bHQgJiYgcmVzdWx0ICE9IC1FUEVSTSkgewogCQkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyAiCiAJCQkJCSJyZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fZnVuY19fLAogCQkJCQlyZXN1bHQpOwpAQCAtMTY1MCwzICsxNjQ2LDUgQEAKIE1PRFVMRV9QQVJNX0RFU0Moc3RhdHMsICJFbmFibGUgc3RhdGlzdGljcyBvciBub3QiKTsKIG1vZHVsZV9wYXJhbShpbnRlcnZhbCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfUEFSTV9ERVNDKGludGVydmFsLCAiT3ZlcnJpZGVzIGludGVycnVwdCBpbnRlcnZhbCIpOworbW9kdWxlX3BhcmFtKHVuc3RhYmxlX2JhdWRzLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKHVuc3RhYmxlX2JhdWRzLCAiQWxsb3cgdW5zdGFibGUgYmF1ZCByYXRlcyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2RpZ2lfYWNjZWxlcG9ydC5jCmluZGV4IDY4ZTgwYmUuLjY4YjBhYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9kaWdpX2FjY2VsZXBvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZGlnaV9hY2NlbGVwb3J0LmMKQEAgLTQ3MCwxOCArNDcwLDE4IEBACiAKIHN0YXRpYyBpbnQgZGVidWc7CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZCBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZFtdID0gewogCXsgVVNCX0RFVklDRShESUdJX1ZFTkRPUl9JRCwgRElHSV8yX0lEKSB9LAogCXsgVVNCX0RFVklDRShESUdJX1ZFTkRPUl9JRCwgRElHSV80X0lEKSB9LAogCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfMiBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV8yW10gPSB7CiAJeyBVU0JfREVWSUNFKERJR0lfVkVORE9SX0lELCBESUdJXzJfSUQpIH0sCiAJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV80IFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlXzRbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoRElHSV9WRU5ET1JfSUQsIERJR0lfNF9JRCkgfSwKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKQEAgLTEyNjIsMTAgKzEyNjIsMTAgQEAKIAkJcmV0dXJuOwogCX0KIAotCS8qIHRyeSB0byBzZW5kIGFueSBidWZmZXJlZCBkYXRhIG9uIHRoaXMgcG9ydCwgaWYgaXQgaXMgb3BlbiAqLworCS8qIHRyeSB0byBzZW5kIGFueSBidWZmZXJlZCBkYXRhIG9uIHRoaXMgcG9ydCAqLwogCXNwaW5fbG9jaygmcHJpdi0+ZHBfcG9ydF9sb2NrKTsKIAlwcml2LT5kcF93cml0ZV91cmJfaW5fdXNlID0gMDsKLQlpZiAocG9ydC0+cG9ydC5jb3VudCAmJiBwcml2LT5kcF9vdXRfYnVmX2xlbiA+IDApIHsKKwlpZiAocHJpdi0+ZHBfb3V0X2J1Zl9sZW4gPiAwKSB7CiAJCSooKHVuc2lnbmVkIGNoYXIgKikocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpKQogCQkJPSAodW5zaWduZWQgY2hhcilESUdJX0NNRF9TRU5EX0RBVEE7CiAJCSooKHVuc2lnbmVkIGNoYXIgKikocG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpICsgMSkKQEAgLTEyODgsNyArMTI4OCw3IEBACiAJc2NoZWR1bGVfd29yaygmcHJpdi0+ZHBfd2FrZXVwX3dvcmspOwogCiAJc3Bpbl91bmxvY2soJnByaXYtPmRwX3BvcnRfbG9jayk7Ci0JaWYgKHJldCkKKwlpZiAocmV0ICYmIHJldCAhPSAtRVBFUk0pCiAJCWRldl9lcnIoJnBvcnQtPmRldiwKIAkJCSIlczogdXNiX3N1Ym1pdF91cmIgZmFpbGVkLCByZXQ9JWQsIHBvcnQ9JWRcbiIsCiAJCQlfX2Z1bmNfXywgcmV0LCBwcml2LT5kcF9wb3J0X251bSk7CkBAIC0xMzUzLDggKzEzNTMsNyBAQAogCXN0cnVjdCBkaWdpX3BvcnQgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJc3RydWN0IGt0ZXJtaW9zIG5vdF90ZXJtaW9zOwogCi0JZGJnKCJkaWdpX29wZW46IFRPUDogcG9ydD0lZCwgb3Blbl9jb3VudD0lZCIsCi0JCXByaXYtPmRwX3BvcnRfbnVtLCBwb3J0LT5wb3J0LmNvdW50KTsKKwlkYmcoImRpZ2lfb3BlbjogVE9QOiBwb3J0PSVkIiwgcHJpdi0+ZHBfcG9ydF9udW0pOwogCiAJLyogYmUgc3VyZSB0aGUgZGV2aWNlIGlzIHN0YXJ0ZWQgdXAgKi8KIAlpZiAoZGlnaV9zdGFydHVwX2RldmljZShwb3J0LT5zZXJpYWwpICE9IDApCkBAIC0xMzkzLDggKzEzOTIsNyBAQAogCXVuc2lnbmVkIGNoYXIgYnVmWzMyXTsKIAlzdHJ1Y3QgZGlnaV9wb3J0ICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCi0JZGJnKCJkaWdpX2Nsb3NlOiBUT1A6IHBvcnQ9JWQsIG9wZW5fY291bnQ9JWQiLAotCQlwcml2LT5kcF9wb3J0X251bSwgcG9ydC0+cG9ydC5jb3VudCk7CisJZGJnKCJkaWdpX2Nsb3NlOiBUT1A6IHBvcnQ9JWQiLCBwcml2LT5kcF9wb3J0X251bSk7CiAKIAltdXRleF9sb2NrKCZwb3J0LT5zZXJpYWwtPmRpc2NfbXV0ZXgpOwogCS8qIGlmIGRpc2Nvbm5lY3RlZCwganVzdCBjbGVhciBmbGFncyAqLwpAQCAtMTYyOSw3ICsxNjI3LDcgQEAKIAkvKiBjb250aW51ZSByZWFkICovCiAJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAlyZXQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXQgIT0gMCkgeworCWlmIChyZXQgIT0gMCAmJiByZXQgIT0gLUVQRVJNKSB7CiAJCWRldl9lcnIoJnBvcnQtPmRldiwKIAkJCSIlczogZmFpbGVkIHJlc3VibWl0dGluZyB1cmIsIHJldD0lZCwgcG9ydD0lZFxuIiwKIAkJCV9fZnVuY19fLCByZXQsIHByaXYtPmRwX3BvcnRfbnVtKTsKQEAgLTE2NTgsMTIgKzE2NTYsMTEgQEAKIAlpbnQgcG9ydF9zdGF0dXMgPSAoKHVuc2lnbmVkIGNoYXIgKil1cmItPnRyYW5zZmVyX2J1ZmZlcilbMl07CiAJdW5zaWduZWQgY2hhciAqZGF0YSA9ICgodW5zaWduZWQgY2hhciAqKXVyYi0+dHJhbnNmZXJfYnVmZmVyKSArIDM7CiAJaW50IGZsYWcsIHRocm90dGxlZDsKLQlpbnQgaTsKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAKIAkvKiBkbyBub3QgcHJvY2VzcyBjYWxsYmFja3Mgb24gY2xvc2VkIHBvcnRzICovCiAJLyogYnV0IGRvIGNvbnRpbnVlIHRoZSByZWFkIGNoYWluICovCi0JaWYgKHBvcnQtPnBvcnQuY291bnQgPT0gMCkKKwlpZiAodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCkKIAkJcmV0dXJuIDA7CiAKIAkvKiBzaG9ydC9tdWx0aXBsZSBwYWNrZXQgY2hlY2sgKi8KQEAgLTE3MDUsMTcgKzE3MDIsOSBAQAogCiAJCS8qIGRhdGEgbGVuZ3RoIGlzIGxlbi0xIChvbmUgYnl0ZSBvZiBsZW4gaXMgcG9ydF9zdGF0dXMpICovCiAJCS0tbGVuOwotCi0JCWxlbiA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgbGVuKTsKIAkJaWYgKGxlbiA+IDApIHsKLQkJCS8qIEhvdCBwYXRoICovCi0JCQlpZiAoZmxhZyA9PSBUVFlfTk9STUFMKQotCQkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCBsZW4pOwotCQkJZWxzZSB7Ci0JCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksCi0JCQkJCQkJCWRhdGFbaV0sIGZsYWcpOwotCQkJfQorCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZ19maXhlZF9mbGFnKHR0eSwgZGF0YSwgbGVuLAorCQkJCQkJCQkJZmxhZyk7CiAJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCQl9CiAJfQpAQCAtMTc3Niw4ICsxNzY1LDcgQEAKIAogCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAkJcnRzID0gMDsKLQkJaWYgKHBvcnQtPnBvcnQuY291bnQpCi0JCQlydHMgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTOworCQlydHMgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiBDUlRTQ1RTOwogCQkKIAkJaWYgKG9wY29kZSA9PSBESUdJX0NNRF9SRUFEX0lOUFVUX1NJR05BTFMpIHsKIAkJCXNwaW5fbG9jaygmcHJpdi0+ZHBfcG9ydF9sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9lbXBlZy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKaW5kZXggN2RkMGUzZS4uNWY3NDBhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2VtcGVnLmMKQEAgLTkzLDcgKzkzLDcgQEAKIHN0YXRpYyB2b2lkIGVtcGVnX3dyaXRlX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKTsKIHN0YXRpYyB2b2lkIGVtcGVnX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpOwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoRU1QRUdfVkVORE9SX0lELCBFTVBFR19QUk9EVUNUX0lEKSB9LAogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CkBAIC0zNDYsNyArMzQ2LDYgQEAKIAl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKLQkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAkJYnl0ZXNfaW4gKz0gdXJiLT5hY3R1YWxfbGVuZ3RoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCA3NjM4ODI4Li42YWYwZGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtMzMsMTIgKzMzLDEyIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdHR5Lmg+CiAjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KQEAgLTg4LDEwICs4OCwxMCBAQAogCiAJdW5zaWduZWQgaW50IGxhdGVuY3k7CQkvKiBsYXRlbmN5IHNldHRpbmcgaW4gdXNlICovCiAJc3BpbmxvY2tfdCB0eF9sb2NrOwkvKiBzcGlubG9jayBmb3IgdHJhbnNtaXQgc3RhdGUgKi8KLQl1bnNpZ25lZCBsb25nIHR4X2J5dGVzOwogCXVuc2lnbmVkIGxvbmcgdHhfb3V0c3RhbmRpbmdfYnl0ZXM7CiAJdW5zaWduZWQgbG9uZyB0eF9vdXRzdGFuZGluZ191cmJzOwogCXVuc2lnbmVkIHNob3J0IG1heF9wYWNrZXRfc2l6ZTsKKwlzdHJ1Y3QgbXV0ZXggY2ZnX2xvY2s7IC8qIEF2b2lkIG1lc3MgYnkgcGFyYWxsZWwgY2FsbHMgb2YgY29uZmlnIGlvY3RsKCkgKi8KIH07CiAKIC8qIHN0cnVjdCBmdGRpX3Npb19xdWlyayBpcyB1c2VkIGJ5IGRldmljZXMgcmVxdWlyaW5nIHNwZWNpYWwgYXR0ZW50aW9uLiAqLwpAQCAtNjE0LDYgKzYxNCw3IEBACiAJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX09DRUFOSUNfUElEKSB9LAogCXsgVVNCX0RFVklDRShUVElfVklELCBUVElfUUwzNTVQX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfUk1fQ0FOVklFV19QSUQpIH0sCisJeyBVU0JfREVWSUNFKENPTlRFQ19WSUQsIENPTlRFQ19DT00xVVNCSF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEJBTkRCX1ZJRCwgQkFOREJfVVNPVEw0X1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoQkFOREJfVklELCBCQU5EQl9VU1RMNF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEJBTkRCX1ZJRCwgQkFOREJfVVNPOU1MMl9QSUQpIH0sCkBAIC03MzcsNiArNzM4LDEwIEBACiAJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmZnRkaV9qdGFnX3F1aXJrIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBIQU1FR19ITzgyMF9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKEZURElfVklELCBIQU1FR19ITzg3MF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBNSlNHX0dFTkVSSUNfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgTUpTR19TUl9SQURJT19QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBNSlNHX0hEX1JBRElPX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIE1KU0dfWE1fUkFESU9fUElEKSB9LAogCXsgfSwJCQkJCS8qIE9wdGlvbmFsIHBhcmFtZXRlciBlbnRyeSAqLwogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CkBAIC04MTIsNyArODE3LDcgQEAKIAkJLm5hbWUgPQkJImZ0ZGlfc2lvIiwKIAl9LAogCS5kZXNjcmlwdGlvbiA9CQkiRlRESSBVU0IgU2VyaWFsIERldmljZSIsCi0JLnVzYl9kcml2ZXIgPSAJCSZmdGRpX2RyaXZlciAsCisJLnVzYl9kcml2ZXIgPSAJCSZmdGRpX2RyaXZlciwKIAkuaWRfdGFibGUgPQkJaWRfdGFibGVfY29tYmluZWQsCiAJLm51bV9wb3J0cyA9CQkxLAogCS5wcm9iZSA9CQlmdGRpX3Npb19wcm9iZSwKQEAgLTgyOCw4ICs4MzMsOCBAQAogCS5jaGFyc19pbl9idWZmZXIgPQlmdGRpX2NoYXJzX2luX2J1ZmZlciwKIAkucmVhZF9idWxrX2NhbGxiYWNrID0JZnRkaV9yZWFkX2J1bGtfY2FsbGJhY2ssCiAJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQlmdGRpX3dyaXRlX2J1bGtfY2FsbGJhY2ssCi0JLnRpb2NtZ2V0ID0gICAgICAgICAgICAgZnRkaV90aW9jbWdldCwKLQkudGlvY21zZXQgPSAgICAgICAgICAgICBmdGRpX3Rpb2Ntc2V0LAorCS50aW9jbWdldCA9CQlmdGRpX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9CQlmdGRpX3Rpb2Ntc2V0LAogCS5pb2N0bCA9CQlmdGRpX2lvY3RsLAogCS5zZXRfdGVybWlvcyA9CQlmdGRpX3NldF90ZXJtaW9zLAogCS5icmVha19jdGwgPQkJZnRkaV9icmVha19jdGwsCkBAIC05MzUsNyArOTQwLDYgQEAKIAkJCQkJCQl1bnNpZ25lZCBpbnQgY2xlYXIpCiB7CiAJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQljaGFyICpidWY7CiAJdW5zaWduZWQgdXJiX3ZhbHVlOwogCWludCBydjsKIApAQCAtOTQ0LDEwICs5NDgsNiBAQAogCQlyZXR1cm4gMDsJLyogbm8gY2hhbmdlICovCiAJfQogCi0JYnVmID0ga21hbGxvYygxLCBHRlBfTk9JTyk7Ci0JaWYgKCFidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCiAJY2xlYXIgJj0gfnNldDsJLyogJ3NldCcgdGFrZXMgcHJlY2VkZW5jZSBvdmVyICdjbGVhcicgKi8KIAl1cmJfdmFsdWUgPSAwOwogCWlmIChjbGVhciAmIFRJT0NNX0RUUikKQEAgLTk2Myw5ICs5NjMsNyBAQAogCQkJICAgICAgIEZURElfU0lPX1NFVF9NT0RFTV9DVFJMX1JFUVVFU1QsCiAJCQkgICAgICAgRlRESV9TSU9fU0VUX01PREVNX0NUUkxfUkVRVUVTVF9UWVBFLAogCQkJICAgICAgIHVyYl92YWx1ZSwgcHJpdi0+aW50ZXJmYWNlLAotCQkJICAgICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpOwotCi0Ja2ZyZWUoYnVmKTsKKwkJCSAgICAgICBOVUxMLCAwLCBXRFJfVElNRU9VVCk7CiAJaWYgKHJ2IDwgMCkgewogCQlkYmcoIiVzIEVycm9yIGZyb20gTU9ERU1fQ1RSTCB1cmI6IERUUiAlcywgUlRTICVzIiwKIAkJCQlfX2Z1bmNfXywKQEAgLTExMjQsMTYgKzExMjIsMTEgQEAKIHN0YXRpYyBpbnQgY2hhbmdlX3NwZWVkKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQljaGFyICpidWY7CiAJX191MTYgdXJiX3ZhbHVlOwogCV9fdTE2IHVyYl9pbmRleDsKIAlfX3UzMiB1cmJfaW5kZXhfdmFsdWU7CiAJaW50IHJ2OwogCi0JYnVmID0ga21hbGxvYygxLCBHRlBfTk9JTyk7Ci0JaWYgKCFidWYpCi0JCXJldHVybiAtRU5PTUVNOwotCiAJdXJiX2luZGV4X3ZhbHVlID0gZ2V0X2Z0ZGlfZGl2aXNvcih0dHksIHBvcnQpOwogCXVyYl92YWx1ZSA9IChfX3UxNil1cmJfaW5kZXhfdmFsdWU7CiAJdXJiX2luZGV4ID0gKF9fdTE2KSh1cmJfaW5kZXhfdmFsdWUgPj4gMTYpOwpAQCAtMTE0Niw5ICsxMTM5LDcgQEAKIAkJCSAgICBGVERJX1NJT19TRVRfQkFVRFJBVEVfUkVRVUVTVCwKIAkJCSAgICBGVERJX1NJT19TRVRfQkFVRFJBVEVfUkVRVUVTVF9UWVBFLAogCQkJICAgIHVyYl92YWx1ZSwgdXJiX2luZGV4LAotCQkJICAgIGJ1ZiwgMCwgV0RSX1NIT1JUX1RJTUVPVVQpOwotCi0Ja2ZyZWUoYnVmKTsKKwkJCSAgICBOVUxMLCAwLCBXRFJfU0hPUlRfVElNRU9VVCk7CiAJcmV0dXJuIHJ2OwogfQogCkBAIC0xMTU2LDggKzExNDcsNyBAQAogewogCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQljaGFyIGJ1ZlsxXTsKLQlpbnQgcnYgPSAwOworCWludCBydjsKIAlpbnQgbCA9IHByaXYtPmxhdGVuY3k7CiAKIAlpZiAocHJpdi0+ZmxhZ3MgJiBBU1lOQ19MT1dfTEFURU5DWSkKQEAgLTExNzAsOCArMTE2MCw3IEBACiAJCQkgICAgIEZURElfU0lPX1NFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1QsCiAJCQkgICAgIEZURElfU0lPX1NFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1RfVFlQRSwKIAkJCSAgICAgbCwgcHJpdi0+aW50ZXJmYWNlLAotCQkJICAgICBidWYsIDAsIFdEUl9USU1FT1VUKTsKLQorCQkJICAgICBOVUxMLCAwLCBXRFJfVElNRU9VVCk7CiAJaWYgKHJ2IDwgMCkKIAkJZGV2X2VycigmcG9ydC0+ZGV2LCAiVW5hYmxlIHRvIHdyaXRlIGxhdGVuY3kgdGltZXI6ICVpXG4iLCBydik7CiAJcmV0dXJuIHJ2OwpAQCAtMTE4MSwyNCArMTE3MCwyOSBAQAogewogCXN0cnVjdCBmdGRpX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQl1bnNpZ25lZCBzaG9ydCBsYXRlbmN5ID0gMDsKLQlpbnQgcnYgPSAwOwotCisJdW5zaWduZWQgY2hhciAqYnVmOworCWludCBydjsKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKKwlidWYgPSBrbWFsbG9jKDEsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCiAJCQkgICAgIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKIAkJCSAgICAgRlRESV9TSU9fR0VUX0xBVEVOQ1lfVElNRVJfUkVRVUVTVCwKIAkJCSAgICAgRlRESV9TSU9fR0VUX0xBVEVOQ1lfVElNRVJfUkVRVUVTVF9UWVBFLAogCQkJICAgICAwLCBwcml2LT5pbnRlcmZhY2UsCi0JCQkgICAgIChjaGFyICopICZsYXRlbmN5LCAxLCBXRFJfVElNRU9VVCk7Ci0KLQlpZiAocnYgPCAwKSB7CisJCQkgICAgIGJ1ZiwgMSwgV0RSX1RJTUVPVVQpOworCWlmIChydiA8IDApCiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIlVuYWJsZSB0byByZWFkIGxhdGVuY3kgdGltZXI6ICVpXG4iLCBydik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQlyZXR1cm4gbGF0ZW5jeTsKKwllbHNlCisJCXByaXYtPmxhdGVuY3kgPSBidWZbMF07CisKKwlrZnJlZShidWYpOworCisJcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgaW50IGdldF9zZXJpYWxfaW5mbyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LApAQCAtMTIyOSw3ICsxMjIzLDcgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJm5ld19zZXJpYWwsIG5ld2luZm8sIHNpemVvZihuZXdfc2VyaWFsKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JbG9ja19rZXJuZWwoKTsKKwltdXRleF9sb2NrKCZwcml2LT5jZmdfbG9jayk7CiAJb2xkX3ByaXYgPSAqcHJpdjsKIAogCS8qIERvIGVycm9yIGNoZWNraW5nIGFuZCBwZXJtaXNzaW9uIGNoZWNraW5nICovCkBAIC0xMjM3LDcgKzEyMzEsNyBAQAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkgewogCQlpZiAoKChuZXdfc2VyaWFsLmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSAhPQogCQkgICAgIChwcml2LT5mbGFncyAmIH5BU1lOQ19VU1JfTUFTSykpKSB7Ci0JCQl1bmxvY2tfa2VybmVsKCk7CisJCQltdXRleF91bmxvY2soJnByaXYtPmNmZ19sb2NrKTsKIAkJCXJldHVybiAtRVBFUk07CiAJCX0KIAkJcHJpdi0+ZmxhZ3MgPSAoKHByaXYtPmZsYWdzICYgfkFTWU5DX1VTUl9NQVNLKSB8CkBAIC0xMjQ4LDcgKzEyNDIsNyBAQAogCiAJaWYgKChuZXdfc2VyaWFsLmJhdWRfYmFzZSAhPSBwcml2LT5iYXVkX2Jhc2UpICYmCiAJICAgIChuZXdfc2VyaWFsLmJhdWRfYmFzZSA8IDk2MDApKSB7Ci0JICAgIAl1bmxvY2tfa2VybmVsKCk7CisJCW11dGV4X3VubG9jaygmcHJpdi0+Y2ZnX2xvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTEyNzgsMTEgKzEyNzIsMTEgQEAKIAkgICAgIChwcml2LT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSkgfHwKIAkgICAgKCgocHJpdi0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX0NVU1QpICYmCiAJICAgICAob2xkX3ByaXYuY3VzdG9tX2Rpdmlzb3IgIT0gcHJpdi0+Y3VzdG9tX2Rpdmlzb3IpKSkgewotCQl1bmxvY2tfa2VybmVsKCk7CisJCW11dGV4X3VubG9jaygmcHJpdi0+Y2ZnX2xvY2spOwogCQljaGFuZ2Vfc3BlZWQodHR5LCBwb3J0KTsKIAl9CiAJZWxzZQotCQl1bmxvY2tfa2VybmVsKCk7CisJCW11dGV4X3VubG9jaygmcHJpdi0+Y2ZnX2xvY2spOwogCXJldHVybiAwOwogCiB9IC8qIHNldF9zZXJpYWxfaW5mbyAqLwpAQCAtMTMzOCwyMCArMTMzMiwyMCBAQAogCQkJCQlfX2Z1bmNfXyk7CiAJCX0KIAl9IGVsc2UgaWYgKHZlcnNpb24gPCAweDIwMCkgewotCQkvKiBPbGQgZGV2aWNlLiAgQXNzdW1lIGl0cyB0aGUgb3JpZ2luYWwgU0lPLiAqLworCQkvKiBPbGQgZGV2aWNlLiAgQXNzdW1lIGl0J3MgdGhlIG9yaWdpbmFsIFNJTy4gKi8KIAkJcHJpdi0+Y2hpcF90eXBlID0gU0lPOwogCQlwcml2LT5iYXVkX2Jhc2UgPSAxMjAwMDAwMCAvIDE2OwogCQlwcml2LT53cml0ZV9vZmZzZXQgPSAxOwogCX0gZWxzZSBpZiAodmVyc2lvbiA8IDB4NDAwKSB7Ci0JCS8qIEFzc3VtZSBpdHMgYW4gRlQ4VTIzMkFNIChvciBGVDhVMjQ1QU0pICovCisJCS8qIEFzc3VtZSBpdCdzIGFuIEZUOFUyMzJBTSAob3IgRlQ4VTI0NUFNKSAqLwogCQkvKiAoSXQgbWlnaHQgYmUgYSBCTSBiZWNhdXNlIG9mIHRoZSBpU2VyaWFsTnVtYmVyIGJ1ZywKIAkJICogYnV0IGl0IHdpbGwgc3RpbGwgd29yayBhcyBhbiBBTSBkZXZpY2UuKSAqLwogCQlwcml2LT5jaGlwX3R5cGUgPSBGVDhVMjMyQU07CiAJfSBlbHNlIGlmICh2ZXJzaW9uIDwgMHg2MDApIHsKLQkJLyogQXNzdW1lIGl0cyBhbiBGVDIzMkJNIChvciBGVDI0NUJNKSAqLworCQkvKiBBc3N1bWUgaXQncyBhbiBGVDIzMkJNIChvciBGVDI0NUJNKSAqLwogCQlwcml2LT5jaGlwX3R5cGUgPSBGVDIzMkJNOwogCX0gZWxzZSB7Ci0JCS8qIEFzc3VtZSBpdHMgYW4gRlQyMzJSICAqLworCQkvKiBBc3N1bWUgaXQncyBhbiBGVDIzMlIgKi8KIAkJcHJpdi0+Y2hpcF90eXBlID0gRlQyMzJSTDsKIAl9CiAJZGV2X2luZm8oJnVkZXYtPmRldiwgIkRldGVjdGVkICVzXG4iLCBmdGRpX2NoaXBfbmFtZVtwcml2LT5jaGlwX3R5cGVdKTsKQEAgLTEzNzEsNyArMTM2NSw3IEBACiAJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcF9kZXNjID0gJmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzFdLmRlc2M7CiAKIAl1bnNpZ25lZCBudW1fZW5kcG9pbnRzOwotCWludCBpID0gMDsKKwlpbnQgaTsKIAogCW51bV9lbmRwb2ludHMgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHM7CiAJZGV2X2luZm8oJnVkZXYtPmRldiwgIk51bWJlciBvZiBlbmRwb2ludHMgJWRcbiIsIG51bV9lbmRwb2ludHMpOwpAQCAtMTQyMyw3ICsxNDE3LDcgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdG9fdXNiX3NlcmlhbF9wb3J0KGRldik7CiAJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpbnQgdiA9IHNpbXBsZV9zdHJ0b3VsKHZhbGJ1ZiwgTlVMTCwgMTApOwotCWludCBydiA9IDA7CisJaW50IHJ2OwogCiAJcHJpdi0+bGF0ZW5jeSA9IHY7CiAJcnYgPSB3cml0ZV9sYXRlbmN5X3RpbWVyKHBvcnQpOwpAQCAtMTQ0MCw5ICsxNDM0LDggQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdG9fdXNiX3NlcmlhbF9wb3J0KGRldik7CiAJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCWNoYXIgYnVmWzFdOwogCWludCB2ID0gc2ltcGxlX3N0cnRvdWwodmFsYnVmLCBOVUxMLCAxMCk7Ci0JaW50IHJ2ID0gMDsKKwlpbnQgcnY7CiAKIAlkYmcoIiVzOiBzZXR0aW5nIGV2ZW50IGNoYXIgPSAlaSIsIF9fZnVuY19fLCB2KTsKIApAQCAtMTQ1MSw4ICsxNDQ0LDcgQEAKIAkJCSAgICAgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVJfUkVRVUVTVCwKIAkJCSAgICAgRlRESV9TSU9fU0VUX0VWRU5UX0NIQVJfUkVRVUVTVF9UWVBFLAogCQkJICAgICB2LCBwcml2LT5pbnRlcmZhY2UsCi0JCQkgICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpOwotCisJCQkgICAgIE5VTEwsIDAsIFdEUl9USU1FT1VUKTsKIAlpZiAocnYgPCAwKSB7CiAJCWRiZygiVW5hYmxlIHRvIHdyaXRlIGV2ZW50IGNoYXJhY3RlcjogJWkiLCBydik7CiAJCXJldHVybiAtRUlPOwpAQCAtMTU1MSw5ICsxNTQzLDkgQEAKIAogCWtyZWZfaW5pdCgmcHJpdi0+a3JlZik7CiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPnR4X2xvY2spOworCW11dGV4X2luaXQoJnByaXYtPmNmZ19sb2NrKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7Ci0JLyogVGhpcyB3aWxsIHB1c2ggdGhlIGNoYXJhY3RlcnMgdGhyb3VnaCBpbW1lZGlhdGVseSByYXRoZXIKLQkgICB0aGFuIHF1ZXVlIGEgdGFzayB0byBkZWxpdmVyIHRoZW0gKi8KKwogCXByaXYtPmZsYWdzID0gQVNZTkNfTE9XX0xBVEVOQ1k7CiAKIAlpZiAocXVpcmsgJiYgcXVpcmstPnBvcnRfcHJvYmUpCkBAIC0xNTg1LDcgKzE1NzcsOCBAQAogCiAJZnRkaV9kZXRlcm1pbmVfdHlwZShwb3J0KTsKIAlmdGRpX3NldF9tYXhfcGFja2V0X3NpemUocG9ydCk7Ci0JcmVhZF9sYXRlbmN5X3RpbWVyKHBvcnQpOworCWlmIChyZWFkX2xhdGVuY3lfdGltZXIocG9ydCkgPCAwKQorCQlwcml2LT5sYXRlbmN5ID0gMTY7CiAJY3JlYXRlX3N5c2ZzX2F0dHJzKHBvcnQpOwogCXJldHVybiAwOwogfQpAQCAtMTYzMCw4ICsxNjIzLDYgQEAKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IHNlcmlhbC0+ZGV2OwogCWludCBsYXRlbmN5ID0gbmRpX2xhdGVuY3lfdGltZXI7Ci0JaW50IHJ2ID0gMDsKLQljaGFyIGJ1ZlsxXTsKIAogCWlmIChsYXRlbmN5ID09IDApCiAJCWxhdGVuY3kgPSAxOwpAQCAtMTY0MSwxMCArMTYzMiwxMSBAQAogCWRiZygiJXMgc2V0dGluZyBOREkgZGV2aWNlIGxhdGVuY3kgdG8gJWQiLCBfX2Z1bmNfXywgbGF0ZW5jeSk7CiAJZGV2X2luZm8oJnVkZXYtPmRldiwgIk5ESSBkZXZpY2Ugd2l0aCBhIGxhdGVuY3kgdmFsdWUgb2YgJWQiLCBsYXRlbmN5KTsKIAotCXJ2ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKKwkvKiBGSVhNRTogZXJyb3JzIGFyZSBub3QgcmV0dXJuZWQgKi8KKwl1c2JfY29udHJvbF9tc2codWRldiwgdXNiX3NuZGN0cmxwaXBlKHVkZXYsIDApLAogCQkJCUZURElfU0lPX1NFVF9MQVRFTkNZX1RJTUVSX1JFUVVFU1QsCiAJCQkJRlRESV9TSU9fU0VUX0xBVEVOQ1lfVElNRVJfUkVRVUVTVF9UWVBFLAotCQkJCWxhdGVuY3ksIDAsIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpOworCQkJCWxhdGVuY3ksIDAsIE5VTEwsIDAsIFdEUl9USU1FT1VUKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTcyMCw3ICsxNzEyLDcgQEAKIAkJCSAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKIAkJCSAgIGZ0ZGlfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIG1lbV9mbGFncyk7Ci0JaWYgKHJlc3VsdCkKKwlpZiAocmVzdWx0ICYmIHJlc3VsdCAhPSAtRVBFUk0pCiAJCWRldl9lcnIoJnBvcnQtPmRldiwKIAkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKIAkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKQEAgLTE3MzIsMTYgKzE3MjQsMTAgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaW50IHJlc3VsdCA9IDA7Ci0JY2hhciBidWZbMV07IC8qIE5lZWRlZCBmb3IgdGhlIHVzYl9jb250cm9sX21zZyBJIHRoaW5rICovCisJaW50IHJlc3VsdDsKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwotCXByaXYtPnR4X2J5dGVzID0gMDsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT50eF9sb2NrLCBmbGFncyk7Ci0KIAl3cml0ZV9sYXRlbmN5X3RpbWVyKHBvcnQpOwogCiAJLyogTm8gZXJyb3IgY2hlY2tpbmcgZm9yIHRoaXMgKHdpbGwgZ2V0IGVycm9ycyBsYXRlciBhbnl3YXkpICovCkBAIC0xNzQ5LDcgKzE3MzUsNyBAQAogCXVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAogCQkJRlRESV9TSU9fUkVTRVRfUkVRVUVTVCwgRlRESV9TSU9fUkVTRVRfUkVRVUVTVF9UWVBFLAogCQkJRlRESV9TSU9fUkVTRVRfU0lPLAotCQkJcHJpdi0+aW50ZXJmYWNlLCBidWYsIDAsIFdEUl9USU1FT1VUKTsKKwkJCXByaXYtPmludGVyZmFjZSwgTlVMTCwgMCwgV0RSX1RJTUVPVVQpOwogCiAJLyogVGVybWlvcyBkZWZhdWx0cyBhcmUgc2V0IGJ5IHVzYl9zZXJpYWxfaW5pdC4gV2UgZG9uJ3QgY2hhbmdlCiAJICAgcG9ydC0+dHR5LT50ZXJtaW9zIC0gdGhpcyB3b3VsZCBsb3NlIHNwZWVkIHNldHRpbmdzLCBldGMuCkBAIC0xNzc3LDcgKzE3NjMsNiBAQAogc3RhdGljIHZvaWQgZnRkaV9kdHJfcnRzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBvbikKIHsKIAlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCWNoYXIgYnVmWzFdOwogCiAJbXV0ZXhfbG9jaygmcG9ydC0+c2VyaWFsLT5kaXNjX211dGV4KTsKIAlpZiAoIXBvcnQtPnNlcmlhbC0+ZGlzY29ubmVjdGVkKSB7CkBAIC0xNzg2LDcgKzE3NzEsNyBAQAogCQkJICAgIHVzYl9zbmRjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCiAJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULAogCQkJICAgIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVF9UWVBFLAotCQkJICAgIDAsIHByaXYtPmludGVyZmFjZSwgYnVmLCAwLAorCQkJICAgIDAsIHByaXYtPmludGVyZmFjZSwgTlVMTCwgMCwKIAkJCSAgICBXRFJfVElNRU9VVCkgPCAwKSB7CiAJCQkgICAgZGV2X2VycigmcG9ydC0+ZGV2LCAiZXJyb3IgZnJvbSBmbG93Y29udHJvbCB1cmJcbiIpOwogCQl9CkBAIC0xODQ3LDcgKzE4MzIsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9sb2NrLCBmbGFncyk7CiAJaWYgKHByaXYtPnR4X291dHN0YW5kaW5nX3VyYnMgPiBVUkJfVVBQRVJfTElNSVQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwotCQlkYmcoIiVzIC0gd3JpdGUgbGltaXQgaGl0XG4iLCBfX2Z1bmNfXyk7CisJCWRiZygiJXMgLSB3cml0ZSBsaW1pdCBoaXQiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KIAlwcml2LT50eF9vdXRzdGFuZGluZ191cmJzKys7CkBAIC0xOTI3LDcgKzE5MTIsNiBAQAogCX0gZWxzZSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT50eF9sb2NrLCBmbGFncyk7CiAJCXByaXYtPnR4X291dHN0YW5kaW5nX2J5dGVzICs9IGNvdW50OwotCQlwcml2LT50eF9ieXRlcyArPSBjb3VudDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+dHhfbG9jaywgZmxhZ3MpOwogCX0KIApAQCAtMjE1NCw4ICsyMTM4LDcgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCV9fdTE2IHVyYl92YWx1ZSA9IDA7Ci0JY2hhciBidWZbMV07CisJX191MTYgdXJiX3ZhbHVlOwogCiAJLyogYnJlYWtfc3RhdGUgPSAtMSB0byB0dXJuIG9uIGJyZWFrLCBhbmQgMCB0byB0dXJuIG9mZiBicmVhayAqLwogCS8qIHNlZSBkcml2ZXJzL2NoYXIvdHR5X2lvLmMgdG8gc2VlIGl0IHVzZWQgKi8KQEAgLTIxNzEsNyArMjE1NCw3IEBACiAJCQlGVERJX1NJT19TRVRfREFUQV9SRVFVRVNULAogCQkJRlRESV9TSU9fU0VUX0RBVEFfUkVRVUVTVF9UWVBFLAogCQkJdXJiX3ZhbHVlICwgcHJpdi0+aW50ZXJmYWNlLAotCQkJYnVmLCAwLCBXRFJfVElNRU9VVCkgPCAwKSB7CisJCQlOVUxMLCAwLCBXRFJfVElNRU9VVCkgPCAwKSB7CiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIEZBSUxFRCB0byBlbmFibGUvZGlzYWJsZSBicmVhayBzdGF0ZSAiCiAJCQkiKHN0YXRlIHdhcyAlZClcbiIsIF9fZnVuY19fLCBicmVha19zdGF0ZSk7CiAJfQpAQCAtMjE5NSw3ICsyMTc4LDYgQEAKIAlzdHJ1Y3Qga3Rlcm1pb3MgKnRlcm1pb3MgPSB0dHktPnRlcm1pb3M7CiAJdW5zaWduZWQgaW50IGNmbGFnID0gdGVybWlvcy0+Y19jZmxhZzsKIAlfX3UxNiB1cmJfdmFsdWU7IC8qIHdpbGwgaG9sZCB0aGUgbmV3IGZsYWdzICovCi0JY2hhciBidWZbMV07IC8qIFBlcmhhcHMgSSBzaG91bGQgZHluYW1pY2FsbHkgYWxsb2MgdGhpcz8gKi8KIAogCS8qIEFkZGVkIGZvciB4b24veG9mZiBzdXBwb3J0ICovCiAJdW5zaWduZWQgaW50IGlmbGFnID0gdGVybWlvcy0+Y19pZmxhZzsKQEAgLTIyNDYsMTIgKzIyMjgsMTAgQEAKIAl9CiAJaWYgKGNmbGFnICYgQ1NJWkUpIHsKIAkJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7Ci0JCWNhc2UgQ1M1OiB1cmJfdmFsdWUgfD0gNTsgZGJnKCJTZXR0aW5nIENTNSIpOyBicmVhazsKLQkJY2FzZSBDUzY6IHVyYl92YWx1ZSB8PSA2OyBkYmcoIlNldHRpbmcgQ1M2Iik7IGJyZWFrOwogCQljYXNlIENTNzogdXJiX3ZhbHVlIHw9IDc7IGRiZygiU2V0dGluZyBDUzciKTsgYnJlYWs7CiAJCWNhc2UgQ1M4OiB1cmJfdmFsdWUgfD0gODsgZGJnKCJTZXR0aW5nIENTOCIpOyBicmVhazsKIAkJZGVmYXVsdDoKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgIkNTSVpFIHdhcyBzZXQgYnV0IG5vdCBDUzUtQ1M4XG4iKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIkNTSVpFIHdhcyBzZXQgYnV0IG5vdCBDUzctQ1M4XG4iKTsKIAkJfQogCX0KIApAQCAtMjI2Myw3ICsyMjQzLDcgQEAKIAkJCSAgICBGVERJX1NJT19TRVRfREFUQV9SRVFVRVNULAogCQkJICAgIEZURElfU0lPX1NFVF9EQVRBX1JFUVVFU1RfVFlQRSwKIAkJCSAgICB1cmJfdmFsdWUgLCBwcml2LT5pbnRlcmZhY2UsCi0JCQkgICAgYnVmLCAwLCBXRFJfU0hPUlRfVElNRU9VVCkgPCAwKSB7CisJCQkgICAgTlVMTCwgMCwgV0RSX1NIT1JUX1RJTUVPVVQpIDwgMCkgewogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyBGQUlMRUQgdG8gc2V0ICIKIAkJCSJkYXRhYml0cy9zdG9wYml0cy9wYXJpdHlcbiIsIF9fZnVuY19fKTsKIAl9CkBAIC0yMjc1LDcgKzIyNTUsNyBAQAogCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1QsCiAJCQkJICAgIEZURElfU0lPX1NFVF9GTE9XX0NUUkxfUkVRVUVTVF9UWVBFLAogCQkJCSAgICAwLCBwcml2LT5pbnRlcmZhY2UsCi0JCQkJICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgeworCQkJCSAgICBOVUxMLCAwLCBXRFJfVElNRU9VVCkgPCAwKSB7CiAJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCiAJCQkJIiVzIGVycm9yIGZyb20gZGlzYWJsZSBmbG93Y29udHJvbCB1cmJcbiIsCiAJCQkJX19mdW5jX18pOwpAQCAtMjMwMSw3ICsyMjgxLDcgQEAKIAkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNULAogCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1RfVFlQRSwKIAkJCQkgICAgMCAsIChGVERJX1NJT19SVFNfQ1RTX0hTIHwgcHJpdi0+aW50ZXJmYWNlKSwKLQkJCQkgICAgYnVmLCAwLCBXRFJfVElNRU9VVCkgPCAwKSB7CisJCQkJICAgIE5VTEwsIDAsIFdEUl9USU1FT1VUKSA8IDApIHsKIAkJCWRldl9lcnIoJnBvcnQtPmRldiwKIAkJCQkidXJiIGZhaWxlZCB0byBzZXQgdG8gcnRzL2N0cyBmbG93IGNvbnRyb2xcbiIpOwogCQl9CkBAIC0yMzMzLDcgKzIzMTMsNyBAQAogCQkJCQkgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTF9SRVFVRVNUX1RZUEUsCiAJCQkJCSAgICB1cmJfdmFsdWUgLCAoRlRESV9TSU9fWE9OX1hPRkZfSFMKIAkJCQkJCQkgfCBwcml2LT5pbnRlcmZhY2UpLAotCQkJCQkgICAgYnVmLCAwLCBXRFJfVElNRU9VVCkgPCAwKSB7CisJCQkJCSAgICBOVUxMLCAwLCBXRFJfVElNRU9VVCkgPCAwKSB7CiAJCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAidXJiIGZhaWxlZCB0byBzZXQgdG8gIgogCQkJCQkieG9uL3hvZmYgZmxvdyBjb250cm9sXG4iKTsKIAkJCX0KQEAgLTIzNDcsNyArMjMyNyw3IEBACiAJCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1QsCiAJCQkJCSAgICBGVERJX1NJT19TRVRfRkxPV19DVFJMX1JFUVVFU1RfVFlQRSwKIAkJCQkJICAgIDAsIHByaXYtPmludGVyZmFjZSwKLQkJCQkJICAgIGJ1ZiwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgeworCQkJCQkgICAgTlVMTCwgMCwgV0RSX1RJTUVPVVQpIDwgMCkgewogCQkJCWRldl9lcnIoJnBvcnQtPmRldiwKIAkJCQkJInVyYiBmYWlsZWQgdG8gY2xlYXIgZmxvdyBjb250cm9sXG4iKTsKIAkJCX0KQEAgLTIzNjEsMjEgKzIzNDEsMjIgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXVuc2lnbmVkIGNoYXIgYnVmWzJdOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKwlpbnQgbGVuOwogCWludCByZXQ7CiAKIAlkYmcoIiVzIFRJT0NNR0VUIiwgX19mdW5jX18pOworCisJYnVmID0ga21hbGxvYygyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisJLyoKKwkgKiBUaGUgOFUyMzJBTSByZXR1cm5zIGEgdHdvIGJ5dGUgdmFsdWUgKHRoZSBTSU8gYSAxIGJ5dGUgdmFsdWUpIGluCisJICogdGhlIHNhbWUgZm9ybWF0IGFzIHRoZSBkYXRhIHJldHVybmVkIGZyb20gdGhlIGluIHBvaW50LgorCSAqLwogCXN3aXRjaCAocHJpdi0+Y2hpcF90eXBlKSB7CiAJY2FzZSBTSU86Ci0JCS8qIFJlcXVlc3QgdGhlIHN0YXR1cyBmcm9tIHRoZSBkZXZpY2UgKi8KLQkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAotCQkJICAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKLQkJCSAgIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVCwKLQkJCSAgIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVNfUkVRVUVTVF9UWVBFLAotCQkJICAgMCwgMCwKLQkJCSAgIGJ1ZiwgMSwgV0RSX1RJTUVPVVQpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7CisJCWxlbiA9IDE7CiAJCWJyZWFrOwogCWNhc2UgRlQ4VTIzMkFNOgogCWNhc2UgRlQyMzJCTToKQEAgLTIzODMsMjcgKzIzNjQsMzAgQEAKIAljYXNlIEZUMjMyUkw6CiAJY2FzZSBGVDIyMzJIOgogCWNhc2UgRlQ0MjMySDoKLQkJLyogdGhlIDhVMjMyQU0gcmV0dXJucyBhIHR3byBieXRlIHZhbHVlICh0aGUgc2lvIGlzIGEgMSBieXRlCi0JCSAgIHZhbHVlKSAtIGluIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGUgZGF0YSByZXR1cm5lZCBmcm9tIHRoZSBpbgotCQkgICBwb2ludCAqLwotCQlyZXQgPSB1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsCi0JCQkJICAgdXNiX3JjdmN0cmxwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKSwKLQkJCQkgICBGVERJX1NJT19HRVRfTU9ERU1fU1RBVFVTX1JFUVVFU1QsCi0JCQkJICAgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVU19SRVFVRVNUX1RZUEUsCi0JCQkJICAgMCwgcHJpdi0+aW50ZXJmYWNlLAotCQkJCSAgIGJ1ZiwgMiwgV0RSX1RJTUVPVVQpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7CisJCWxlbiA9IDI7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUZBVUxUOworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIG91dDsKIAl9CiAKLQlyZXR1cm4gIChidWZbMF0gJiBGVERJX1NJT19EU1JfTUFTSyA/IFRJT0NNX0RTUiA6IDApIHwKKwlyZXQgPSB1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsCisJCQl1c2JfcmN2Y3RybHBpcGUocG9ydC0+c2VyaWFsLT5kZXYsIDApLAorCQkJRlRESV9TSU9fR0VUX01PREVNX1NUQVRVU19SRVFVRVNULAorCQkJRlRESV9TSU9fR0VUX01PREVNX1NUQVRVU19SRVFVRVNUX1RZUEUsCisJCQkwLCBwcml2LT5pbnRlcmZhY2UsCisJCQlidWYsIGxlbiwgV0RSX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCXJldCA9IChidWZbMF0gJiBGVERJX1NJT19EU1JfTUFTSyA/IFRJT0NNX0RTUiA6IDApIHwKIAkJKGJ1ZlswXSAmIEZURElfU0lPX0NUU19NQVNLID8gVElPQ01fQ1RTIDogMCkgfAogCQkoYnVmWzBdICAmIEZURElfU0lPX1JJX01BU0sgID8gVElPQ01fUkkgIDogMCkgfAogCQkoYnVmWzBdICAmIEZURElfU0lPX1JMU0RfTUFTSyA/IFRJT0NNX0NEICA6IDApIHwKIAkJcHJpdi0+bGFzdF9kdHJfcnRzOworb3V0OgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBmdGRpX3Rpb2Ntc2V0KHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLApAQCAtMjUwOCw4ICsyNDkyLDcgQEAKIAlwb3J0LT50aHJvdHRsZWQgPSBwb3J0LT50aHJvdHRsZV9yZXEgPSAwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAotCS8qIFJlc3VibWl0IHVyYiBpZiB0aHJvdHRsZWQgYW5kIG9wZW4uICovCi0JaWYgKHdhc190aHJvdHRsZWQgJiYgdGVzdF9iaXQoQVNZTkNCX0lOSVRJQUxJWkVELCAmcG9ydC0+cG9ydC5mbGFncykpCisJaWYgKHdhc190aHJvdHRsZWQpCiAJCWZ0ZGlfc3VibWl0X3JlYWRfdXJiKHBvcnQsIEdGUF9LRVJORUwpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCmluZGV4IGIwZTBkNjQuLmZmOWJmODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCkBAIC0yOCwxMyArMjgsMTMgQEAKICNkZWZpbmUgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTAkyIC8qIFNldCBmbG93IGNvbnRyb2wgcmVnaXN0ZXIgKi8KICNkZWZpbmUgRlRESV9TSU9fU0VUX0JBVURfUkFURQkzIC8qIFNldCBiYXVkIHJhdGUgKi8KICNkZWZpbmUgRlRESV9TSU9fU0VUX0RBVEEJNCAvKiBTZXQgdGhlIGRhdGEgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBwb3J0ICovCi0jZGVmaW5lIEZURElfU0lPX0dFVF9NT0RFTV9TVEFUVVMJNSAvKiBSZXRyaWV2ZSBjdXJyZW50IHZhbHVlIG9mIG1vZGVybiBzdGF0dXMgcmVnaXN0ZXIgKi8KKyNkZWZpbmUgRlRESV9TSU9fR0VUX01PREVNX1NUQVRVUwk1IC8qIFJldHJpZXZlIGN1cnJlbnQgdmFsdWUgb2YgbW9kZW0gc3RhdHVzIHJlZ2lzdGVyICovCiAjZGVmaW5lIEZURElfU0lPX1NFVF9FVkVOVF9DSEFSCTYgLyogU2V0IHRoZSBldmVudCBjaGFyYWN0ZXIgKi8KICNkZWZpbmUgRlRESV9TSU9fU0VUX0VSUk9SX0NIQVIJNyAvKiBTZXQgdGhlIGVycm9yIGNoYXJhY3RlciAqLwogI2RlZmluZSBGVERJX1NJT19TRVRfTEFURU5DWV9USU1FUgk5IC8qIFNldCB0aGUgbGF0ZW5jeSB0aW1lciAqLwogI2RlZmluZSBGVERJX1NJT19HRVRfTEFURU5DWV9USU1FUgkxMCAvKiBHZXQgdGhlIGxhdGVuY3kgdGltZXIgKi8KIAotLyogSW50ZXJmYWNlIGluZGljaWVzIGZvciBGVDIyMzIsIEZUMjIzMkggYW5kIEZUNDIzMkggZGV2aWNlcyovCisvKiBJbnRlcmZhY2UgaW5kaWNlcyBmb3IgRlQyMjMyLCBGVDIyMzJIIGFuZCBGVDQyMzJIIGRldmljZXMgKi8KICNkZWZpbmUgSU5URVJGQUNFX0EJCTEKICNkZWZpbmUgSU5URVJGQUNFX0IJCTIKICNkZWZpbmUgSU5URVJGQUNFX0MJCTMKQEAgLTI3MCw3ICsyNzAsNyBAQAogICogICBCbVJlcXVlc3RUeXBlOiAgMDEwMCAwMDAwYgogICogICBiUmVxdWVzdDogICAgICAgRlRESV9TSU9fU0VUX0ZMT1dfQ1RSTAogICogICB3VmFsdWU6ICAgICAgICAgWG9mZi9Yb24KLSAqICAgd0luZGV4OiAgICAgICAgIFByb3RvY29sL1BvcnQgLSBoSW5kZXggaXMgcHJvdG9jbCAvIGxJbmRleCBpcyBwb3J0CisgKiAgIHdJbmRleDogICAgICAgICBQcm90b2NvbC9Qb3J0IC0gaEluZGV4IGlzIHByb3RvY29sIC8gbEluZGV4IGlzIHBvcnQKICAqICAgd0xlbmd0aDogICAgICAgIDAKICAqICAgRGF0YTogICAgICAgICAgIE5vbmUKICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW9faWRzLmgKaW5kZXggYzg5NTFhZS4uMDcyN2UxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvX2lkcy5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npb19pZHMuaApAQCAtMjIsNyArMjIsNyBAQAogI2RlZmluZSBGVERJXzhVMjMyQU1fQUxUX1BJRCAweDYwMDYgLyogRlRESSdzIGFsdGVybmF0ZSBQSUQgZm9yIGFib3ZlICovCiAjZGVmaW5lIEZURElfOFUyMjMyQ19QSUQgMHg2MDEwIC8qIER1YWwgY2hhbm5lbCBkZXZpY2UgKi8KICNkZWZpbmUgRlRESV80MjMySF9QSUQgMHg2MDExIC8qIFF1YWQgY2hhbm5lbCBoaS1zcGVlZCBkZXZpY2UgKi8KLSNkZWZpbmUgRlRESV9TSU9fUElECTB4ODM3MgkvKiBQcm9kdWN0IElkIFNJTyBhcHBsaWNhdGlvbiBvZiA4VTEwMEFYICAqLworI2RlZmluZSBGVERJX1NJT19QSUQJMHg4MzcyCS8qIFByb2R1Y3QgSWQgU0lPIGFwcGxpY2F0aW9uIG9mIDhVMTAwQVggKi8KICNkZWZpbmUgRlRESV8yMzJSTF9QSUQgIDB4RkJGQSAgLyogUHJvZHVjdCBJRCBmb3IgRlQyMzJSTCAqLwogCiAKQEAgLTQ5LDcgKzQ5LDcgQEAKICNkZWZpbmUgTE1JX0xNM1NfREVWRUxfQk9BUkRfUElECTB4YmNkOAogI2RlZmluZSBMTUlfTE0zU19FVkFMX0JPQVJEX1BJRAkJMHhiY2Q5CiAKLSNkZWZpbmUgRlRESV9UVVJURUxJWkVSX1BJRAkweEJEQzggLyogSlRBRy9SUy0yMzIgYWRhcHRlciBieSBlZ25pdGUgR21CSCAqLworI2RlZmluZSBGVERJX1RVUlRFTElaRVJfUElECTB4QkRDOCAvKiBKVEFHL1JTLTIzMiBhZGFwdGVyIGJ5IGVnbml0ZSBHbWJIICovCiAKIC8qIE9wZW5EQ0MgKHd3dy5vcGVuZGNjLmRlKSBwcm9kdWN0IGlkICovCiAjZGVmaW5lIEZURElfT1BFTkRDQ19QSUQJMHhCRkQ4CkBAIC0xODUsNyArMTg1LDcgQEAKICNkZWZpbmUgRlRESV9FTFZfVEZEMTI4X1BJRAkweEUwRUMJLyogRUxWIFRlbXBlcmF0dXItRmV1Y2h0ZS1EYXRlbmxvZ2dlciBURkQgMTI4ICovCiAjZGVmaW5lIEZURElfRUxWX0ZNM1JYX1BJRAkweEUwRUQJLyogRUxWIE1lc3N3ZXJ0dWViZXJ0cmFndW5nIEZNMyBSWCAqLwogI2RlZmluZSBGVERJX0VMVl9XUzc3N19QSUQJMHhFMEVFCS8qIENvbnJhZCBXUyA3NzcgKi8KLSNkZWZpbmUgRlRESV9FTFZfRU0xMDEwUENfUElECTB4RTBFRgkvKiBFbmdlcnkgbW9uaXRvciBFTSAxMDEwIFBDICovCisjZGVmaW5lIEZURElfRUxWX0VNMTAxMFBDX1BJRAkweEUwRUYJLyogRW5lcmd5IG1vbml0b3IgRU0gMTAxMCBQQyAqLwogI2RlZmluZSBGVERJX0VMVl9DU0k4X1BJRAkweEUwRjAJLyogQ29tcHV0ZXItU2NoYWx0LUludGVyZmFjZSAoQ1NJIDgpICovCiAjZGVmaW5lIEZURElfRUxWX0VNMTAwMERMX1BJRAkweEUwRjEJLyogUEMtRGF0ZW5sb2dnZXIgZnVlciBFbmVyZ2llbW9uaXRvciAoRU0gMTAwMCBETCkgKi8KICNkZWZpbmUgRlRESV9FTFZfUENLMTAwX1BJRAkweEUwRjIJLyogUEMtS2FiZWx0ZXN0ZXIgKFBDSyAxMDApICovCkBAIC0yMTIsOCArMjEyLDggQEAKICAqIGRyaXZlcnMsIG9yIHBvc3NpYmx5IHRoZSBDb21lZGkgZHJpdmVycyBpbiBzb21lIGNhc2VzLiAqLwogI2RlZmluZSBGVERJX0VMVl9DTEk3MDAwX1BJRAkweEZCNTkJLyogQ29tcHV0ZXItTGlnaHQtSW50ZXJmYWNlIChDTEkgNzAwMCkgKi8KICNkZWZpbmUgRlRESV9FTFZfUFBTNzMzMF9QSUQJMHhGQjVDCS8qIFByb2Nlc3Nvci1Qb3dlci1TdXBwbHkgKFBQUyA3MzMwKSAqLwotI2RlZmluZSBGVERJX0VMVl9URk0xMDBfUElECTB4RkI1RAkvKiBUZW1wZXJhcnR1ci1GZXVjaHRlIE1lc3NnZXJhZXQgKFRGTSAxMDApICovCi0jZGVmaW5lIEZURElfRUxWX1VERjc3X1BJRAkweEZCNUUJLyogVVNCIERDRiBGdW5rdXJoIChVREYgNzcpICovCisjZGVmaW5lIEZURElfRUxWX1RGTTEwMF9QSUQJMHhGQjVECS8qIFRlbXBlcmF0dXItRmV1Y2h0ZS1NZXNzZ2VyYWV0IChURk0gMTAwKSAqLworI2RlZmluZSBGVERJX0VMVl9VREY3N19QSUQJMHhGQjVFCS8qIFVTQiBEQ0YgRnVua3VociAoVURGIDc3KSAqLwogI2RlZmluZSBGVERJX0VMVl9VSU84OF9QSUQJMHhGQjVGCS8qIFVTQi1JL08gSW50ZXJmYWNlIChVSU8gODgpICovCiAKIC8qCkBAIC0zMjAsNyArMzIwLDcgQEAKIAogLyoKICAqIDROLUdBTEFYWS5ERSBQSURzIGZvciBDQU4tVVNCLCBVU0ItUlMyMzIsIFVTQi1SUzQyMiwgVVNCLVJTNDg1LAotICogVVNCLVRUWSBhY3RpdiwgVVNCLVRUWSBwYXNzaXYuICBTb21lIFBJRHMgYXJlIHVzZWQgYnkgc2V2ZXJhbCBkZXZpY2VzCisgKiBVU0ItVFRZIGFrdGl2LCBVU0ItVFRZIHBhc3Npdi4gIFNvbWUgUElEcyBhcmUgdXNlZCBieSBzZXZlcmFsIGRldmljZXMKICAqIGFuZCBJJ20gbm90IGVudGlyZWx5IHN1cmUgd2hpY2ggYXJlIHVzZWQgYnkgd2hpY2guCiAgKi8KICNkZWZpbmUgRlRESV80Tl9HQUxBWFlfREVfMV9QSUQJMHhGM0MwCkBAIC0zMzAsMTAgKzMzMCwxMCBAQAogICogTGlueCBUZWNobm9sb2dpZXMgcHJvZHVjdCBpZHMKICAqLwogI2RlZmluZSBMSU5YX1NETVVTQlFTU19QSUQJMHhGNDQ4CS8qIExpbnggU0RNLVVTQi1RUy1TICovCi0jZGVmaW5lIExJTlhfTUFTVEVSREVWRUwyX1BJRCAgIDB4RjQ0OSAgIC8qIExpbnggTWFzdGVyIERldmVsb3BtZW50IDIuMCAqLwotI2RlZmluZSBMSU5YX0ZVVFVSRV8wX1BJRCAgIDB4RjQ0QSAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLwotI2RlZmluZSBMSU5YX0ZVVFVSRV8xX1BJRCAgIDB4RjQ0QiAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLwotI2RlZmluZSBMSU5YX0ZVVFVSRV8yX1BJRCAgIDB4RjQ0QyAgIC8qIExpbnggZnV0dXJlIGRldmljZSAqLworI2RlZmluZSBMSU5YX01BU1RFUkRFVkVMMl9QSUQgICAweEY0NDkJLyogTGlueCBNYXN0ZXIgRGV2ZWxvcG1lbnQgMi4wICovCisjZGVmaW5lIExJTlhfRlVUVVJFXzBfUElEICAgMHhGNDRBCS8qIExpbnggZnV0dXJlIGRldmljZSAqLworI2RlZmluZSBMSU5YX0ZVVFVSRV8xX1BJRCAgIDB4RjQ0QgkvKiBMaW54IGZ1dHVyZSBkZXZpY2UgKi8KKyNkZWZpbmUgTElOWF9GVVRVUkVfMl9QSUQgICAweEY0NEMJLyogTGlueCBmdXR1cmUgZGV2aWNlICovCiAKIC8qCiAgKiBPY2VhbmljIHByb2R1Y3QgaWRzCkBAIC00OTQsNiArNDk0LDEzIEBACiAjZGVmaW5lIFJBVE9DX1BST0RVQ1RfSURfVVNCNjBGCTB4YjAyMAogCiAvKgorICogQ29udGVjIHByb2R1Y3RzIChodHRwOi8vd3d3LmNvbnRlYy5jb20pCisgKiBTdWJtaXR0ZWQgYnkgRGFuaWVsIFNhbmdvcnJpbgorICovCisjZGVmaW5lIENPTlRFQ19WSUQJCTB4MDZDRQkvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgQ09OVEVDX0NPTTFVU0JIX1BJRAkweDgzMTEJLyogQ09NLTEoVVNCKUggKi8KKworLyoKICAqIERlZmluaXRpb25zIGZvciBCJkIgRWxlY3Ryb25pY3MgcHJvZHVjdHMuCiAgKi8KICNkZWZpbmUgQkFOREJfVklECQkweDA4NTYJLyogQiZCIEVsZWN0cm9uaWNzIFZlbmRvciBJRCAqLwpAQCAtNjQyLDcgKzY0OSw3IEBACiAjZGVmaW5lIEZBTENPTV9UV0lTVF9QSUQJMHgwMDAxCS8qIEZhbGNvbSBUd2lzdCBVU0IgR1BSUyBtb2RlbSAqLwogI2RlZmluZSBGQUxDT01fU0FNQkFfUElECTB4MDAwNQkvKiBGYWxjb20gU2FtYmEgVVNCIEdQUlMgbW9kZW0gKi8KIAotLyogTGFyc2VuIGFuZCBCcnVzZ2FhcmQgQWx0aVRyYWNrL1VTQnRyYWNrICAqLworLyogTGFyc2VuIGFuZCBCcnVzZ2FhcmQgQWx0aVRyYWNrL1VTQnRyYWNrICovCiAjZGVmaW5lIExBUlNFTkJSVVNHQUFSRF9WSUQJCTB4MEZEOAogI2RlZmluZSBMQl9BTFRJVFJBQ0tfUElECQkweDAwMDEKIApAQCAtOTcxLDcgKzk3OCw3IEBACiAjZGVmaW5lIEFMVEkyX04zX1BJRAkweDYwMDEJLyogTmVwdHVuZSAzICovCiAKIC8qCi0gKiBEcmVzZGVuIEVsZWt0cm9uaWMgU2Vuc29yIFRlcm1pbmFsIEJvYXJkCisgKiBEcmVzZGVuIEVsZWt0cm9uaWsgU2Vuc29yIFRlcm1pbmFsIEJvYXJkCiAgKi8KICNkZWZpbmUgREVfVklECQkJMHgxY2YxIC8qIFZlbmRvciBJRCAqLwogI2RlZmluZSBTVEJfUElECQkJMHgwMDAxIC8qIFNlbnNvciBUZXJtaW5hbCBCb2FyZCAqLwpAQCAtMTAwMiwzICsxMDA5LDExIEBACiAjZGVmaW5lIEVWT184VTIzMkFNX1BJRAkweDAyRkYJLyogRXZvbHV0aW9uIHJvYm90aWNzIFJDTTIgKEZUMjMyQU0pKi8KICNkZWZpbmUgRVZPX0hZQlJJRF9QSUQJCTB4MDMwMgkvKiBFdm9sdXRpb24gcm9ib3RpY3MgUkNNNCBQSUQgKEZUMjMyQk0pKi8KICNkZWZpbmUgRVZPX1JDTTRfUElECQkweDAzMDMJLyogRXZvbHV0aW9uIHJvYm90aWNzIFJDTTQgUElEICovCisKKy8qCisgKiBNSlMgR2FkZ2V0cyBIRCBSYWRpbyAvIFhNIFJhZGlvIC8gU2lyaXVzIFJhZGlvIGludGVyZmFjZXMgKHVzaW5nIFZJRCAweDA0MDMpCisgKi8KKyNkZWZpbmUgTUpTR19HRU5FUklDX1BJRAkweDkzNzgKKyNkZWZpbmUgTUpTR19TUl9SQURJT19QSUQJMHg5Mzc5CisjZGVmaW5lIE1KU0dfWE1fUkFESU9fUElECTB4OTM3QQorI2RlZmluZSBNSlNHX0hEX1JBRElPX1BJRAkweDkzN0MKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdW5zb2Z0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnVuc29mdC5jCmluZGV4IGQzMGY3MzYuLmUyMWNlOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdW5zb2Z0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2Z1bnNvZnQuYwpAQCAtMTgsNyArMTgsNyBAQAogCiBzdGF0aWMgaW50IGRlYnVnOwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHgxNDA0LCAweGNkZGMpIH0sCiAJeyB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCmluZGV4IDVhYzkwMGUuLmE0MmIyOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYwpAQCAtMjEwLDcgKzIxMCw3IEBACiAKIAogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAkvKiB0aGUgc2FtZSBkZXZpY2UgaWQgc2VlbXMgdG8gYmUgdXNlZCBieSBhbGwKIAkgICB1c2IgZW5hYmxlZCBHUFMgZGV2aWNlcyAqLwogCXsgVVNCX0RFVklDRShHQVJNSU5fVkVORE9SX0lELCAzKSB9LApAQCAtMjcxLDcgKzI3MSw2IEBACiAJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwKIAkJCQkJX19mdW5jX18sIGFjdHVhbF9sZW5ndGgsIGRhdGEpOwogCi0JCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgYWN0dWFsX2xlbmd0aCk7CiAJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCBhY3R1YWxfbGVuZ3RoKTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYwppbmRleCA4MzQ0M2Q2Li44OWZhYzM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tmaWZvLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CiAKIHN0YXRpYyBpbnQgZGVidWc7CiAKQEAgLTQxLDcgKzQyLDcgQEAKIAogLyogd2Ugd2FudCB0byBsb29rIGF0IGFsbCBkZXZpY2VzLCBhcyB0aGUgdmVuZG9yL3Byb2R1Y3QgaWQgY2FuIGNoYW5nZQogICogZGVwZW5kaW5nIG9uIHRoZSBjb21tYW5kIGxpbmUgYXJndW1lbnQgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBnZW5lcmljX3NlcmlhbF9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBnZW5lcmljX3NlcmlhbF9pZHNbXSA9IHsKIAl7LmRyaXZlcl9pbmZvID0gNDJ9LAogCXt9CiB9OwpAQCAtMTk0LDcgKzE5NSw3IEBACiAJCWlmIChwb3J0LT51cmJzX2luX2ZsaWdodCA+CiAJCSAgICBwb3J0LT5zZXJpYWwtPnR5cGUtPm1heF9pbl9mbGlnaHRfdXJicykgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwotCQkJZGJnKCIlcyAtIHdyaXRlIGxpbWl0IGhpdFxuIiwgX19mdW5jX18pOworCQkJZGJnKCIlcyAtIHdyaXRlIGxpbWl0IGhpdCIsIF9fZnVuY19fKTsKIAkJCXJldHVybiBid3JpdGU7CiAJCX0KIAkJcG9ydC0+dHhfYnl0ZXNfZmxpZ2h0ICs9IHRvd3JpdGU7CkBAIC01ODUsNyArNTg2LDcgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgaSsrKSB7CiAJCXBvcnQgPSBzZXJpYWwtPnBvcnRbaV07Ci0JCWlmICghcG9ydC0+cG9ydC5jb3VudCkKKwkJaWYgKCF0ZXN0X2JpdChBU1lOQ0JfSU5JVElBTElaRUQsICZwb3J0LT5wb3J0LmZsYWdzKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChwb3J0LT5yZWFkX3VyYikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2hwNHguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9ocDR4LmMKaW5kZXggNDMxMzI5Mi4uODA5Mzc5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2hwNHguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaHA0eC5jCkBAIC0yOSw3ICsyOSw3IEBACiAjZGVmaW5lIEhQX1ZFTkRPUl9JRCAweDAzZjAKICNkZWZpbmUgSFA0OUdQX1BST0RVQ1RfSUQgMHgwMTIxCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShIUF9WRU5ET1JfSUQsIEhQNDlHUF9QUk9EVUNUX0lEKSB9LAogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jCmluZGV4IGI5Nzk2MGEuLjNlZjhkZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb19lZGdlcG9ydC5jCkBAIC0zNjQsNDIgKzM2NCw2IEBACiAJcmVsZWFzZV9maXJtd2FyZShmdyk7CiB9CiAKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotICoJCQkJCQkJCQkqCi0gKiAgR2V0IHN0cmluZyBkZXNjcmlwdG9yIGZyb20gZGV2aWNlCQkJCQkqCi0gKgkJCQkJCQkJCSoKLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi1zdGF0aWMgaW50IGdldF9zdHJpbmcoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgaW50IElkLCBjaGFyICpzdHJpbmcsIGludCBidWZsZW4pCi17Ci0Jc3RydWN0IHVzYl9zdHJpbmdfZGVzY3JpcHRvciBTdHJpbmdEZXNjOwotCXN0cnVjdCB1c2Jfc3RyaW5nX2Rlc2NyaXB0b3IgKnBTdHJpbmdEZXNjOwotCi0JZGJnKCIlcyAtIFVTQiBTdHJpbmcgSUQgPSAlZCIsIF9fZnVuY19fLCBJZCk7Ci0KLQlpZiAoIXVzYl9nZXRfZGVzY3JpcHRvcihkZXYsIFVTQl9EVF9TVFJJTkcsIElkLAotCQkJCQkmU3RyaW5nRGVzYywgc2l6ZW9mKFN0cmluZ0Rlc2MpKSkKLQkJcmV0dXJuIDA7Ci0KLQlwU3RyaW5nRGVzYyA9IGttYWxsb2MoU3RyaW5nRGVzYy5iTGVuZ3RoLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXBTdHJpbmdEZXNjKQotCQlyZXR1cm4gMDsKLQotCWlmICghdXNiX2dldF9kZXNjcmlwdG9yKGRldiwgVVNCX0RUX1NUUklORywgSWQsCi0JCQkJCXBTdHJpbmdEZXNjLCBTdHJpbmdEZXNjLmJMZW5ndGgpKSB7Ci0JCWtmcmVlKHBTdHJpbmdEZXNjKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JdW5pY29kZV90b19hc2NpaShzdHJpbmcsIGJ1ZmxlbiwKLQkJCQlwU3RyaW5nRGVzYy0+d0RhdGEsIHBTdHJpbmdEZXNjLT5iTGVuZ3RoLzIpOwotCi0Ja2ZyZWUocFN0cmluZ0Rlc2MpOwotCWRiZygiJXMgLSBVU0IgU3RyaW5nICVzIiwgX19mdW5jX18sIHN0cmluZyk7Ci0JcmV0dXJuIHN0cmxlbihzdHJpbmcpOwotfQotCi0KICNpZiAwCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMjAwNyw3ICsxOTcxLDcgQEAKIAkJCXJldHVybjsKIAogCQljYXNlIElPU1BfRVhUX1NUQVRVU19SWF9DSEVDS19SU1A6Ci0JCQlkYmcoIiVzID09PT09PT09PT0gUG9ydCAldSBDSEVDS19SU1AgU2VxdWVuY2UgPSAlMDJ4ID09PT09PT09PT09PT1cbiIsIF9fZnVuY19fLCBlZGdlX3NlcmlhbC0+cnhQb3J0LCBieXRlMyk7CisJCQlkYmcoIiVzID09PT09PT09PT0gUG9ydCAldSBDSEVDS19SU1AgU2VxdWVuY2UgPSAlMDJ4ID09PT09PT09PT09PT0iLCBfX2Z1bmNfXywgZWRnZV9zZXJpYWwtPnJ4UG9ydCwgYnl0ZTMpOwogCQkJLyogUG9ydC0+UnhDaGVja1JzcCA9IHRydWU7ICovCiAJCQlyZXR1cm47CiAJCX0KQEAgLTIwNzUsNyArMjAzOSw3IEBACiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKLQkJZGJnKCIlcyAtIFVucmVjb2duaXplZCBJT1NQIHN0YXR1cyBjb2RlICV1XG4iLCBfX2Z1bmNfXywgY29kZSk7CisJCWRiZygiJXMgLSBVbnJlY29nbml6ZWQgSU9TUCBzdGF0dXMgY29kZSAldSIsIF9fZnVuY19fLCBjb2RlKTsKIAkJYnJlYWs7CiAJfQogCXJldHVybjsKQEAgLTIwOTEsMTggKzIwNTUsMTMgQEAKIHsKIAlpbnQgY250OwogCi0JZG8gewotCQljbnQgPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIGxlbmd0aCk7Ci0JCWlmIChjbnQgPCBsZW5ndGgpIHsKLQkJCWRldl9lcnIoZGV2LCAiJXMgLSBkcm9wcGluZyBkYXRhLCAlZCBieXRlcyBsb3N0XG4iLAotCQkJCQlfX2Z1bmNfXywgbGVuZ3RoIC0gY250KTsKLQkJCWlmIChjbnQgPT0gMCkKLQkJCQlicmVhazsKLQkJfQotCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgY250KTsKLQkJZGF0YSArPSBjbnQ7Ci0JCWxlbmd0aCAtPSBjbnQ7Ci0JfSB3aGlsZSAobGVuZ3RoID4gMCk7CisJY250ID0gdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIGxlbmd0aCk7CisJaWYgKGNudCA8IGxlbmd0aCkgeworCQlkZXZfZXJyKGRldiwgIiVzIC0gZHJvcHBpbmcgZGF0YSwgJWQgYnl0ZXMgbG9zdFxuIiwKKwkJCQlfX2Z1bmNfXywgbGVuZ3RoIC0gY250KTsKKwl9CisJZGF0YSArPSBjbnQ7CisJbGVuZ3RoIC09IGNudDsKIAogCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiB9CkBAIC0yNTMwLDcgKzI0ODksNyBAQAogCiAJCSpkaXZpc29yID0gY3VzdG9tOwogCi0JCWRiZygiJXMgLSBCYXVkICVkID0gJWRcbiIsIF9fZnVuY19fLCBiYXVkcmF0ZSwgY3VzdG9tKTsKKwkJZGJnKCIlcyAtIEJhdWQgJWQgPSAlZCIsIF9fZnVuY19fLCBiYXVkcmF0ZSwgY3VzdG9tKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yOTE1LDcgKzI4NzQsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBFREdFX0RPV05MT0FEX0ZJTEVfTk9ORToKLQkJCWRiZyAgICAgKCJObyBkb3dubG9hZCBmaWxlIHNwZWNpZmllZCwgc2tpcHBpbmcgZG93bmxvYWRcbiIpOworCQkJZGJnKCJObyBkb3dubG9hZCBmaWxlIHNwZWNpZmllZCwgc2tpcHBpbmcgZG93bmxvYWQiKTsKIAkJCXJldHVybjsKIAogCQlkZWZhdWx0OgpAQCAtMjk5NywxMCArMjk1NiwxMiBAQAogCXVzYl9zZXRfc2VyaWFsX2RhdGEoc2VyaWFsLCBlZGdlX3NlcmlhbCk7CiAKIAkvKiBnZXQgdGhlIG5hbWUgZm9yIHRoZSBkZXZpY2UgZnJvbSB0aGUgZGV2aWNlICovCi0JaSA9IGdldF9zdHJpbmcoZGV2LCBkZXYtPmRlc2NyaXB0b3IuaU1hbnVmYWN0dXJlciwKKwlpID0gdXNiX3N0cmluZyhkZXYsIGRldi0+ZGVzY3JpcHRvci5pTWFudWZhY3R1cmVyLAogCSAgICAmZWRnZV9zZXJpYWwtPm5hbWVbMF0sIE1BWF9OQU1FX0xFTisxKTsKKwlpZiAoaSA8IDApCisJCWkgPSAwOwogCWVkZ2Vfc2VyaWFsLT5uYW1lW2krK10gPSAnICc7Ci0JZ2V0X3N0cmluZyhkZXYsIGRldi0+ZGVzY3JpcHRvci5pUHJvZHVjdCwKKwl1c2Jfc3RyaW5nKGRldiwgZGV2LT5kZXNjcmlwdG9yLmlQcm9kdWN0LAogCSAgICAmZWRnZV9zZXJpYWwtPm5hbWVbaV0sIE1BWF9OQU1FX0xFTisyIC0gaSk7CiAKIAlkZXZfaW5mbygmc2VyaWFsLT5kZXYtPmRldiwgIiVzIGRldGVjdGVkXG4iLCBlZGdlX3NlcmlhbC0+bmFtZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvaW9fdGFibGVzLmgKaW5kZXggOTI0MWQzMS4uZmViNTZhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RhYmxlcy5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190YWJsZXMuaApAQCAtMTQsNyArMTQsNyBAQAogI2lmbmRlZiBJT19UQUJMRVNfSAogI2RlZmluZSBJT19UQUJMRVNfSAogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZWRnZXBvcnRfMnBvcnRfaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZWRnZXBvcnRfMnBvcnRfaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMikgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMkkpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzQyMSkgfSwKQEAgLTIzLDcgKzIzLDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBlZGdlcG9ydF80cG9ydF9pZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBlZGdlcG9ydF80cG9ydF9pZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9FREdFUE9SVF80KSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9SQVBJRFBPUlRfNCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfNFQpIH0sCkBAIC0zNyw3ICszNyw3IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgZWRnZXBvcnRfOHBvcnRfaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgZWRnZXBvcnRfOHBvcnRfaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfOCkgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfRURHRVBPUlRfMTZfRFVBTF9DUFUpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX0VER0VQT1JUXzhJKSB9LApAQCAtNDcsNyArNDcsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIEVwaWNfcG9ydF9pZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBFcGljX3BvcnRfaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9OQ1IsIE5DUl9ERVZJQ0VfSURfRVBJQ18wMjAyKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX05DUiwgTkNSX0RFVklDRV9JRF9FUElDXzAyMDMpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTkNSLCBOQ1JfREVWSUNFX0lEX0VQSUNfMDMxMCkgfSwKQEAgLTYwLDcgKzYwLDcgQEAKIH07CiAKIC8qIERldmljZXMgdGhhdCB0aGlzIGRyaXZlciBzdXBwb3J0cyAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkW10gPSB7CiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLAlJT05fREVWSUNFX0lEX0VER0VQT1JUXzQpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLAlJT05fREVWSUNFX0lEX1JBUElEUE9SVF80KSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwJSU9OX0RFVklDRV9JRF9FREdFUE9SVF80VCkgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pb190aS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMKaW5kZXggZDRjYzBmNy4uYWE4NzZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lvX3RpLmMKQEAgLTEzNCw3ICsxMzQsNyBAQAogCiAKIC8qIERldmljZXMgdGhhdCB0aGlzIGRyaXZlciBzdXBwb3J0cyAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGVkZ2Vwb3J0XzFwb3J0X2lkX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGVkZ2Vwb3J0XzFwb3J0X2lkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzEpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX1RJMzQxMF9FREdFUE9SVF8xKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9USTM0MTBfRURHRVBPUlRfMUkpIH0sCkBAIC0xNTQsNyArMTU0LDcgQEAKIAl7IH0KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBlZGdlcG9ydF8ycG9ydF9pZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBlZGdlcG9ydF8ycG9ydF9pZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9FREdFUE9SVF8yQykgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9JT04sIElPTl9ERVZJQ0VfSURfVElfRURHRVBPUlRfMkkpIH0sCkBAIC0xNzcsNyArMTc3LDcgQEAKIH07CiAKIC8qIERldmljZXMgdGhhdCB0aGlzIGRyaXZlciBzdXBwb3J0cyAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2NvbWJpbmVkW10gPSB7CiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX0VER0VQT1JUXzEpIH0sCiAJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfSU9OLCBJT05fREVWSUNFX0lEX1RJX1RJMzQxMF9FREdFUE9SVF8xKSB9LAogCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0lPTiwgSU9OX0RFVklDRV9JRF9USV9USTM0MTBfRURHRVBPUlRfMUkpIH0sCkBAIC00MTMsMTEgKzQxMywxOCBAQAogewogCWludCBzdGF0dXMgPSAwOwogCWludCBpOwotCV9fdTggdGVtcDsKKwl1OCAqdGVtcDsKIAogCS8qIE11c3QgZG8gYSByZWFkIGJlZm9yZSB3cml0ZSAqLwogCWlmICghc2VyaWFsLT5UaVJlYWRJMkMpIHsKLQkJc3RhdHVzID0gcmVhZF9ib290X21lbShzZXJpYWwsIDAsIDEsICZ0ZW1wKTsKKwkJdGVtcCA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdGVtcCkgeworCQkJZGV2X2Vycigmc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LAorCQkJCQkiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlzdGF0dXMgPSByZWFkX2Jvb3RfbWVtKHNlcmlhbCwgMCwgMSwgdGVtcCk7CisJCWtmcmVlKHRlbXApOwogCQlpZiAoc3RhdHVzKQogCQkJcmV0dXJuIHN0YXR1czsKIAl9CkBAIC05MzUsMzcgKzk0Miw0NyBAQAogc3RhdGljIGludCBpMmNfdHlwZV9ib290bW9kZShzdHJ1Y3QgZWRnZXBvcnRfc2VyaWFsICpzZXJpYWwpCiB7CiAJaW50IHN0YXR1czsKLQlfX3U4IGRhdGE7CisJdTggKmRhdGE7CisKKwlkYXRhID0ga21hbGxvYygxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKKwkJZGV2X2Vycigmc2VyaWFsLT5zZXJpYWwtPmRldi0+ZGV2LAorCQkJCSIlcyAtIG91dCBvZiBtZW1vcnlcbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJLyogVHJ5IHRvIHJlYWQgdHlwZSAyICovCiAJc3RhdHVzID0gdGlfdnJlYWRfc3luYyhzZXJpYWwtPnNlcmlhbC0+ZGV2LCBVTVBDX01FTU9SWV9SRUFELAotCQkJCURUS19BRERSX1NQQUNFX0kyQ19UWVBFX0lJLCAwLCAmZGF0YSwgMHgwMSk7CisJCQkJRFRLX0FERFJfU1BBQ0VfSTJDX1RZUEVfSUksIDAsIGRhdGEsIDB4MDEpOwogCWlmIChzdGF0dXMpCiAJCWRiZygiJXMgLSByZWFkIDIgc3RhdHVzIGVycm9yID0gJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAllbHNlCi0JCWRiZygiJXMgLSByZWFkIDIgZGF0YSA9IDB4JXgiLCBfX2Z1bmNfXywgZGF0YSk7Ci0JaWYgKCghc3RhdHVzKSAmJiAoZGF0YSA9PSBVTVA1MTUyIHx8IGRhdGEgPT0gVU1QMzQxMCkpIHsKKwkJZGJnKCIlcyAtIHJlYWQgMiBkYXRhID0gMHgleCIsIF9fZnVuY19fLCAqZGF0YSk7CisJaWYgKCghc3RhdHVzKSAmJiAoKmRhdGEgPT0gVU1QNTE1MiB8fCAqZGF0YSA9PSBVTVAzNDEwKSkgewogCQlkYmcoIiVzIC0gUk9NX1RZUEVfSUkiLCBfX2Z1bmNfXyk7CiAJCXNlcmlhbC0+VElfSTJDX1R5cGUgPSBEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSTsKLQkJcmV0dXJuIDA7CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIFRyeSB0byByZWFkIHR5cGUgMyAqLwogCXN0YXR1cyA9IHRpX3ZyZWFkX3N5bmMoc2VyaWFsLT5zZXJpYWwtPmRldiwgVU1QQ19NRU1PUllfUkVBRCwKLQkJCQlEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSUksIDAsCSZkYXRhLCAweDAxKTsKKwkJCQlEVEtfQUREUl9TUEFDRV9JMkNfVFlQRV9JSUksIDAsCWRhdGEsIDB4MDEpOwogCWlmIChzdGF0dXMpCiAJCWRiZygiJXMgLSByZWFkIDMgc3RhdHVzIGVycm9yID0gJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAllbHNlCi0JCWRiZygiJXMgLSByZWFkIDIgZGF0YSA9IDB4JXgiLCBfX2Z1bmNfXywgZGF0YSk7Ci0JaWYgKCghc3RhdHVzKSAmJiAoZGF0YSA9PSBVTVA1MTUyIHx8IGRhdGEgPT0gVU1QMzQxMCkpIHsKKwkJZGJnKCIlcyAtIHJlYWQgMiBkYXRhID0gMHgleCIsIF9fZnVuY19fLCAqZGF0YSk7CisJaWYgKCghc3RhdHVzKSAmJiAoKmRhdGEgPT0gVU1QNTE1MiB8fCAqZGF0YSA9PSBVTVAzNDEwKSkgewogCQlkYmcoIiVzIC0gUk9NX1RZUEVfSUlJIiwgX19mdW5jX18pOwogCQlzZXJpYWwtPlRJX0kyQ19UeXBlID0gRFRLX0FERFJfU1BBQ0VfSTJDX1RZUEVfSUlJOwotCQlyZXR1cm4gMDsKKwkJZ290byBvdXQ7CiAJfQogCiAJZGJnKCIlcyAtIFVua25vd24iLCBfX2Z1bmNfXyk7CiAJc2VyaWFsLT5USV9JMkNfVHlwZSA9IERUS19BRERSX1NQQUNFX0kyQ19UWVBFX0lJOwotCXJldHVybiAtRU5PREVWOworCXN0YXR1cyA9IC1FTk9ERVY7CitvdXQ6CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIHN0YXR1czsKIH0KIAogc3RhdGljIGludCBidWxrX3hmZXIoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgdm9pZCAqYnVmZmVyLApAQCAtMTExMyw3ICsxMTMwLDcgQEAKIAkJCQlJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0JBU0lDLCByb21fZGVzYyk7CiAJCWlmIChzdGFydF9hZGRyZXNzICE9IDApIHsKIAkJCXN0cnVjdCB0aV9pMmNfZmlybXdhcmVfcmVjICpmaXJtd2FyZV92ZXJzaW9uOwotCQkJX191OCByZWNvcmQ7CisJCQl1OCAqcmVjb3JkOwogCiAJCQlkYmcoIiVzIC0gRm91bmQgVHlwZSBGSVJNV0FSRSAoVHlwZSAyKSByZWNvcmQiLAogCQkJCQkJCQlfX2Z1bmNfXyk7CkBAIC0xMTY1LDYgKzExODIsMTUgQEAKIAkJCQkgICAgT3BlcmF0aW9uYWxNYWpvclZlcnNpb24sCiAJCQkJICAgIE9wZXJhdGlvbmFsTWlub3JWZXJzaW9uKTsKIAorCQkJCXJlY29yZCA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCFyZWNvcmQpIHsKKwkJCQkJZGV2X2VycihkZXYsICIlcyAtIG91dCBvZiBtZW1vcnkuXG4iLAorCQkJCQkJCV9fZnVuY19fKTsKKwkJCQkJa2ZyZWUoZmlybXdhcmVfdmVyc2lvbik7CisJCQkJCWtmcmVlKHJvbV9kZXNjKTsKKwkJCQkJa2ZyZWUodGlfbWFudWZfZGVzYyk7CisJCQkJCXJldHVybiAtRU5PTUVNOworCQkJCX0KIAkJCQkvKiBJbiBvcmRlciB0byB1cGRhdGUgdGhlIEkyQyBmaXJtd2FyZSB3ZSBtdXN0CiAJCQkJICogY2hhbmdlIHRoZSB0eXBlIDIgcmVjb3JkIHRvIHR5cGUgMHhGMi4gVGhpcwogCQkJCSAqIHdpbGwgZm9yY2UgdGhlIFVNUCB0byBjb21lIHVwIGluIEJvb3QgTW9kZS4KQEAgLTExNzcsMTMgKzEyMDMsMTQgQEAKIAkJCQkgKiBmaXJtd2FyZSB3aWxsIHVwZGF0ZSB0aGUgcmVjb3JkIHR5cGUgZnJvbQogCQkJCSAqIDB4ZjIgdG8gMHgwMi4KIAkJCQkgKi8KLQkJCQlyZWNvcmQgPSBJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0JMQU5LOworCQkJCSpyZWNvcmQgPSBJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0JMQU5LOwogCiAJCQkJLyogQ2hhbmdlIHRoZSBJMkMgRmlybXdhcmUgcmVjb3JkIHR5cGUgdG8KIAkJCQkgICAweGYyIHRvIHRyaWdnZXIgYW4gdXBkYXRlICovCiAJCQkJc3RhdHVzID0gd3JpdGVfcm9tKHNlcmlhbCwgc3RhcnRfYWRkcmVzcywKLQkJCQkJCXNpemVvZihyZWNvcmQpLAkmcmVjb3JkKTsKKwkJCQkJCXNpemVvZigqcmVjb3JkKSwgcmVjb3JkKTsKIAkJCQlpZiAoc3RhdHVzKSB7CisJCQkJCWtmcmVlKHJlY29yZCk7CiAJCQkJCWtmcmVlKGZpcm13YXJlX3ZlcnNpb24pOwogCQkJCQlrZnJlZShyb21fZGVzYyk7CiAJCQkJCWtmcmVlKHRpX21hbnVmX2Rlc2MpOwpAQCAtMTE5NiwxOSArMTIyMywyMSBAQAogCQkJCSAqLwogCQkJCXN0YXR1cyA9IHJlYWRfcm9tKHNlcmlhbCwKIAkJCQkJCQlzdGFydF9hZGRyZXNzLAotCQkJCQkJCXNpemVvZihyZWNvcmQpLAotCQkJCQkJCSZyZWNvcmQpOworCQkJCQkJCXNpemVvZigqcmVjb3JkKSwKKwkJCQkJCQlyZWNvcmQpOwogCQkJCWlmIChzdGF0dXMpIHsKKwkJCQkJa2ZyZWUocmVjb3JkKTsKIAkJCQkJa2ZyZWUoZmlybXdhcmVfdmVyc2lvbik7CiAJCQkJCWtmcmVlKHJvbV9kZXNjKTsKIAkJCQkJa2ZyZWUodGlfbWFudWZfZGVzYyk7CiAJCQkJCXJldHVybiBzdGF0dXM7CiAJCQkJfQogCi0JCQkJaWYgKHJlY29yZCAhPSBJMkNfREVTQ19UWVBFX0ZJUk1XQVJFX0JMQU5LKSB7CisJCQkJaWYgKCpyZWNvcmQgIT0gSTJDX0RFU0NfVFlQRV9GSVJNV0FSRV9CTEFOSykgewogCQkJCQlkZXZfZXJyKGRldiwKIAkJCQkJCSIlcyAtIGVycm9yIHJlc2V0dGluZyBkZXZpY2VcbiIsCiAJCQkJCQlfX2Z1bmNfXyk7CisJCQkJCWtmcmVlKHJlY29yZCk7CiAJCQkJCWtmcmVlKGZpcm13YXJlX3ZlcnNpb24pOwogCQkJCQlrZnJlZShyb21fZGVzYyk7CiAJCQkJCWtmcmVlKHRpX21hbnVmX2Rlc2MpOwpAQCAtMTIyNiw2ICsxMjU1LDcgQEAKIAkJCQkJCV9fZnVuY19fLCBzdGF0dXMpOwogCiAJCQkJLyogcmV0dXJuIGFuIGVycm9yIG9uIHB1cnBvc2UuICovCisJCQkJa2ZyZWUocmVjb3JkKTsKIAkJCQlrZnJlZShmaXJtd2FyZV92ZXJzaW9uKTsKIAkJCQlrZnJlZShyb21fZGVzYyk7CiAJCQkJa2ZyZWUodGlfbWFudWZfZGVzYyk7CkBAIC0xNjg2LDcgKzE3MTYsNyBAQAogCWNhc2UgVElVTVBfSU5URVJSVVBUX0NPREVfTVNSOgkvKiBNU1IgKi8KIAkJLyogQ29weSBNU1IgZnJvbSBVTVAgKi8KIAkJbXNyID0gZGF0YVsxXTsKLQkJZGJnKCIlcyAtID09PT09IFBvcnQgJXUgTVNSIFN0YXR1cyA9ICUwMnggPT09PT09XG4iLAorCQlkYmcoIiVzIC0gPT09PT0gUG9ydCAldSBNU1IgU3RhdHVzID0gJTAyeCA9PT09PT0iLAogCQkgICAgIF9fZnVuY19fLCBwb3J0X251bWJlciwgbXNyKTsKIAkJaGFuZGxlX25ld19tc3IoZWRnZV9wb3J0LCBtc3IpOwogCQlicmVhazsKQEAgLTE3OTAsNyArMTgyMCw2IEBACiB7CiAJaW50IHF1ZXVlZDsKIAotCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgbGVuZ3RoKTsKIAlxdWV1ZWQgPSB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgbGVuZ3RoKTsKIAlpZiAocXVldWVkIDwgbGVuZ3RoKQogCQlkZXZfZXJyKGRldiwgIiVzIC0gZHJvcHBpbmcgZGF0YSwgJWQgYnl0ZXMgbG9zdFxuIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCmluZGV4IGQ2MjMxYzMuLjNmZWE5MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwpAQCAtNzQ3LDcgKzc0Nyw2IEBACiAKIAl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCQlieXRlc19pbiArPSB1cmItPmFjdHVhbF9sZW5ndGg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMKaW5kZXggNzI3ZDMyMy4uZTFkMDc4NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYwpAQCAtMTM0LDcgKzEzNCw3IEBACiAKICNkZWZpbmUgSVBXX1dBTlRTX1RPX1NFTkQJMHgzMAogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNiX2lwd19pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfaXB3X2lkc1tdID0gewogCXsgVVNCX0RFVklDRShJUFdfVklELCBJUFdfUElEKSB9LAogCXsgfSwKIH07CkBAIC0xNzIsNyArMTcyLDYgQEAKIAogCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCWlmICh0dHkgJiYgdXJiLT5hY3R1YWxfbGVuZ3RoKSB7Ci0JCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jCmluZGV4IDk1ZDhkMjYuLjRhMGY1MTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMKQEAgLTEwMCw3ICsxMDAsNyBAQAogc3RhdGljIHU4IGlyX3hib2Y7CiBzdGF0aWMgdTggaXJfYWRkX2JvZjsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlyX2lkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaXJfaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHgwNTBmLCAweDAxODApIH0sCQkvKiBLQyBUZWNobm9sb2d5LCBLQy0xODAgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwOGU5LCAweDAxMDApIH0sCQkvKiBYVE5EQWNjZXNzICovCiAJeyBVU0JfREVWSUNFKDB4MDljNCwgMHgwMDExKSB9LAkJLyogQUNUaVN5cyBBQ1QtSVIyMDAwVSAqLwpAQCAtNDQ1LDExICs0NDUsNiBAQAogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCWlmICghcG9ydC0+cG9ydC5jb3VudCkgewotCQlkYmcoIiVzIC0gcG9ydCBjbG9zZWQuIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCiAJc3dpdGNoIChzdGF0dXMpIHsKIAljYXNlIDA6IC8qIFN1Y2Nlc3NmdWwgKi8KIAkJLyoKQEAgLTQ2MiwxMCArNDU3LDggQEAKIAkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywKIAkJCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CiAJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwotCQlpZiAodHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGggLSAxKSkgewotCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGErMSwgdXJiLT5hY3R1YWxfbGVuZ3RoIC0gMSk7Ci0JCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwotCQl9CisJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhKzEsIHVyYi0+YWN0dWFsX2xlbmd0aCAtIDEpOworCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCQl0dHlfa3JlZl9wdXQodHR5KTsKIAogCQkvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2l1dV9waG9lbml4LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXV1X3Bob2VuaXguYwppbmRleCBlNmUwMmIxLi40M2YxM2NmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXV1X3Bob2VuaXguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXV1X3Bob2VuaXguYwpAQCAtNDMsNyArNDMsNyBAQAogI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjAuMTEiCiAjZGVmaW5lIERSSVZFUl9ERVNDICJJbmZpbml0eSBVU0IgVW5saW1pdGVkIFBob2VuaXggZHJpdmVyIgogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKElVVV9VU0JfVkVORE9SX0lELCBJVVVfVVNCX1BST0RVQ1RfSUQpfSwKIAl7fQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmMKaW5kZXggZjhjNGIwNy4uMjk3MTYzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5jCkBAIC00NjQsMTMgKzQ2NCw5IEBACiAKIAkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCiAJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQlpZiAocG9ydC0+cG9ydC5jb3VudCkgewotCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCQlpZiAoZXJyICE9IDApCi0JCQlkYmcoIiVzIC0gcmVzdWJtaXQgcmVhZCB1cmIgZmFpbGVkLiAoJWQpIiwKLQkJCQkJX19mdW5jX18sIGVycik7Ci0JfQotCXJldHVybjsKKwllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChlcnIgIT0gMCkKKwkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsIF9fZnVuY19fLCBlcnIpOwogfQogCiAvKiBPdXRkYXQgaGFuZGxpbmcgaXMgY29tbW9uIGZvciBhbGwgZGV2aWNlcyAqLwpAQCAtNDgzLDggKzQ3OSw3IEBACiAJcF9wcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWRiZygiJXMgLSB1cmIgJWQiLCBfX2Z1bmNfXywgdXJiID09IHBfcHJpdi0+b3V0X3VyYnNbMV0pOwogCi0JaWYgKHBvcnQtPnBvcnQuY291bnQpCi0JCXVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KHBvcnQpOworCXVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KHBvcnQpOwogfQogCiBzdGF0aWMgdm9pZAl1c2EyNl9pbmFja19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCkBAIC02MTUsMTIgKzYxMCwxMCBAQAogCiAJCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KIAkJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQkJaWYgKHBvcnQtPnBvcnQuY291bnQpIHsKLQkJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoZXJyICE9IDApCi0JCQkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsCi0JCQkJCQkJCV9fZnVuY19fLCBlcnIpOwotCQl9CisJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChlcnIgIT0gMCkKKwkJCWRiZygiJXMgLSByZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuICglZCkiLAorCQkJCQkJCV9fZnVuY19fLCBlcnIpOwogCQlwX3ByaXYtPmluX2ZsaXAgXj0gMTsKIAogCQl1cmIgPSBwX3ByaXYtPmluX3VyYnNbcF9wcml2LT5pbl9mbGlwXTsKQEAgLTg1NiwxMiArODQ5LDkgQEAKIAogCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KIAl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCWlmIChwb3J0LT5wb3J0LmNvdW50KSB7Ci0JCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChlcnIgIT0gMCkKLQkJCWRiZygiJXMgLSByZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuICglZCkiLAotCQkJCQkJCV9fZnVuY19fLCBlcnIpOwotCX0KKwllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmIChlcnIgIT0gMCkKKwkJZGJnKCIlcyAtIHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gKCVkKSIsIF9fZnVuY19fLCBlcnIpOwogfQogCiBzdGF0aWMgdm9pZCB1c2E0OXdnX2luZGF0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKQEAgLTkwNCwxMSArODk0LDcgQEAKIAkJCQkvKiBubyBlcnJvciBvbiBhbnkgYnl0ZSAqLwogCQkJCWkrKzsKIAkJCQlmb3IgKHggPSAxOyB4IDwgbGVuIDsgKyt4KQotCQkJCQlpZiAocG9ydC0+cG9ydC5jb3VudCkKLQkJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwKLQkJCQkJCQkJZGF0YVtpKytdLCAwKTsKLQkJCQkJZWxzZQotCQkJCQkJaSsrOworCQkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGRhdGFbaSsrXSwgMCk7CiAJCQl9IGVsc2UgewogCQkJCS8qCiAJCQkJICogc29tZSBieXRlcyBoYWQgZXJyb3JzLCBldmVyeSBieXRlIGhhcyBzdGF0dXMKQEAgLTkyMiwxNCArOTA4LDEyIEBACiAJCQkJCWlmIChzdGF0ICYgUlhFUlJPUl9QQVJJVFkpCiAJCQkJCQlmbGFnIHw9IFRUWV9QQVJJVFk7CiAJCQkJCS8qIFhYWCBzaG91bGQgaGFuZGxlIGJyZWFrICgweDEwKSAqLwotCQkJCQlpZiAocG9ydC0+cG9ydC5jb3VudCkKLQkJCQkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwKKwkJCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LAogCQkJCQkJCWRhdGFbaSsxXSwgZmxhZyk7CiAJCQkJCWkgKz0gMjsKIAkJCQl9CiAJCQl9Ci0JCQlpZiAocG9ydC0+cG9ydC5jb3VudCkKLQkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAkJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQl9CiAJfQpAQCAtMTAxMywxMyArOTk3LDkgQEAKIAogCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgKi8KIAl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCWlmIChwb3J0LT5wb3J0LmNvdW50KSB7Ci0JCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChlcnIgIT0gMCkKLQkJCWRiZygiJXMgLSByZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuICglZCkiLAotCQkJCQkJCV9fZnVuY19fLCBlcnIpOwotCX0KLQlyZXR1cm47CisJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAoZXJyICE9IDApCisJCWRiZygiJXMgLSByZXN1Ym1pdCByZWFkIHVyYiBmYWlsZWQuICglZCkiLCBfX2Z1bmNfXywgZXJyKTsKIH0KIAogCkBAIC0yNDE4LDggKzIzOTgsNyBAQAogCQltc2cucG9ydEVuYWJsZWQgPSAwOwogCS8qIFNlbmRpbmcgaW50ZXJtZWRpYXRlIGNvbmZpZ3MgKi8KIAllbHNlIHsKLQkJaWYgKHBvcnQtPnBvcnQuY291bnQpCi0JCQltc2cucG9ydEVuYWJsZWQgPSAxOworCQltc2cucG9ydEVuYWJsZWQgPSAxOwogCQltc2cudHhCcmVhayA9IChwX3ByaXYtPmJyZWFrX29uKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbi5oCmluZGV4IDMwNzcxZTUuLmJmMzI5N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tleXNwYW4uaApAQCAtNDU2LDcgKzQ1Niw3IEBACiAJTlVMTCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBrZXlzcGFuX2lkc19jb21iaW5lZFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGtleXNwYW5faWRzX2NvbWJpbmVkW10gPSB7CiAJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE4eF9wcmVfcHJvZHVjdF9pZCkgfSwKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTlfcHJlX3Byb2R1Y3RfaWQpIH0sCiAJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5d19wcmVfcHJvZHVjdF9pZCkgfSwKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogfTsKIAogLyogdXNiX2RldmljZV9pZCB0YWJsZSBmb3IgdGhlIHByZS1maXJtd2FyZSBkb3dubG9hZCBrZXlzcGFuIGRldmljZXMgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBrZXlzcGFuX3ByZV9pZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBrZXlzcGFuX3ByZV9pZHNbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTh4X3ByZV9wcm9kdWN0X2lkKSB9LAogCXsgVVNCX0RFVklDRShLRVlTUEFOX1ZFTkRPUl9JRCwga2V5c3Bhbl91c2ExOV9wcmVfcHJvZHVjdF9pZCkgfSwKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTlxaV9wcmVfcHJvZHVjdF9pZCkgfSwKQEAgLTUxMyw3ICs1MTMsNyBAQAogCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGtleXNwYW5fMXBvcnRfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQga2V5c3Bhbl8xcG9ydF9pZHNbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMTh4X3Byb2R1Y3RfaWQpIH0sCiAJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5X3Byb2R1Y3RfaWQpIH0sCiAJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTE5cWlfcHJvZHVjdF9pZCkgfSwKQEAgLTUyNCw3ICs1MjQsNyBAQAogCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGtleXNwYW5fMnBvcnRfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQga2V5c3Bhbl8ycG9ydF9pZHNbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjhfcHJvZHVjdF9pZCkgfSwKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhMjh4X3Byb2R1Y3RfaWQpIH0sCiAJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTI4eGFfcHJvZHVjdF9pZCkgfSwKQEAgLTUzMiw3ICs1MzIsNyBAQAogCXsgfSAvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGtleXNwYW5fNHBvcnRfaWRzW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQga2V5c3Bhbl80cG9ydF9pZHNbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhNDl3X3Byb2R1Y3RfaWQpIH0sCiAJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBrZXlzcGFuX3VzYTQ5d2xjX3Byb2R1Y3RfaWQpfSwKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIGtleXNwYW5fdXNhNDl3Z19wcm9kdWN0X2lkKX0sCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jCmluZGV4IDEyOTZhMDkuLjE4NWZlOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jCkBAIC0xMjUsNyArMTI1LDcgQEAKICNkZWZpbmUgRU5UUkVHUkFfVkVORE9SX0lECQkweDE2NDUKICNkZWZpbmUgRU5UUkVHUkFfRkFLRV9JRAkJMHg4MDkzCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZCBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZFtdID0gewogI2lmZGVmIEtFWVNQQU4KIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIEtFWVNQQU5fUERBX0ZBS0VfSUQpIH0sCiAjZW5kaWYKQEAgLTE0NywyMCArMTQ3LDIwIEBACiAJLm5vX2R5bmFtaWNfaWQgPSAJMSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9zdGQgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfc3RkW10gPSB7CiAJeyBVU0JfREVWSUNFKEtFWVNQQU5fVkVORE9SX0lELCBLRVlTUEFOX1BEQV9JRCkgfSwKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAogI2lmZGVmIEtFWVNQQU4KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9mYWtlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2Zha2VbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoS0VZU1BBTl9WRU5ET1JfSUQsIEtFWVNQQU5fUERBX0ZBS0VfSUQpIH0sCiAJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAjZW5kaWYKIAogI2lmZGVmIFhJUkNPTQotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2Zha2VfeGlyY29tIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX2Zha2VfeGlyY29tW10gPSB7CiAJeyBVU0JfREVWSUNFKFhJUkNPTV9WRU5ET1JfSUQsIFhJUkNPTV9GQUtFX0lEKSB9LAogCXsgVVNCX0RFVklDRShFTlRSRUdSQV9WRU5ET1JfSUQsIEVOVFJFR1JBX0ZBS0VfSUQpIH0sCiAJeyB9CkBAIC00MjksMTMgKzQyOSwyMCBAQAogCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKnZhbHVlKQogewogCWludCByYzsKLQl1bnNpZ25lZCBjaGFyIGRhdGE7CisJdTggKmRhdGE7CisKKwlkYXRhID0ga21hbGxvYygxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCiAJcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCiAJCQkgICAgIDMsIC8qIGdldCBwaW5zICovCiAJCQkgICAgIFVTQl9UWVBFX1ZFTkRPUnxVU0JfUkVDSVBfSU5URVJGQUNFfFVTQl9ESVJfSU4sCi0JCQkgICAgIDAsIDAsICZkYXRhLCAxLCAyMDAwKTsKKwkJCSAgICAgMCwgMCwgZGF0YSwgMSwgMjAwMCk7CiAJaWYgKHJjID49IDApCi0JCSp2YWx1ZSA9IGRhdGE7CisJCSp2YWx1ZSA9ICpkYXRhOworCisJa2ZyZWUoZGF0YSk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC01NDMsNyArNTUwLDE0IEBACiAJICAgZGV2aWNlIGhvdyBtdWNoIHJvb20gaXQgcmVhbGx5IGhhcy4gIFRoaXMgaXMgZG9uZSBvbmx5IG9uCiAJICAgc2NoZWR1bGVyIHRpbWUsIHNpbmNlIHVzYl9jb250cm9sX21zZygpIHNsZWVwcy4gKi8KIAlpZiAoY291bnQgPiBwcml2LT50eF9yb29tICYmICFpbl9pbnRlcnJ1cHQoKSkgewotCQl1bnNpZ25lZCBjaGFyIHJvb207CisJCXU4ICpyb29tOworCisJCXJvb20gPSBrbWFsbG9jKDEsIEdGUF9LRVJORUwpOworCQlpZiAoIXJvb20pIHsKKwkJCXJjID0gLUVOT01FTTsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCiAJCXJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAogCQkJCSAgICAgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKIAkJCQkgICAgIDYsIC8qIHdyaXRlX3Jvb20gKi8KQEAgLTU1MSw5ICs1NjUsMTQgQEAKIAkJCQkgICAgIHwgVVNCX0RJUl9JTiwKIAkJCQkgICAgIDAsIC8qIHZhbHVlOiAwIG1lYW5zICJyZW1haW5pbmcgcm9vbSIgKi8KIAkJCQkgICAgIDAsIC8qIGluZGV4ICovCi0JCQkJICAgICAmcm9vbSwKKwkJCQkgICAgIHJvb20sCiAJCQkJICAgICAxLAogCQkJCSAgICAgMjAwMCk7CisJCWlmIChyYyA+IDApIHsKKwkJCWRiZygiIHJvb21xdWVyeSBzYXlzICVkIiwgKnJvb20pOworCQkJcHJpdi0+dHhfcm9vbSA9ICpyb29tOworCQl9CisJCWtmcmVlKHJvb20pOwogCQlpZiAocmMgPCAwKSB7CiAJCQlkYmcoIiByb29tcXVlcnkgZmFpbGVkIik7CiAJCQlnb3RvIGV4aXQ7CkBAIC01NjMsOCArNTgyLDYgQEAKIAkJCXJjID0gLUVJTzsgLyogZGV2aWNlIGRpZG4ndCByZXR1cm4gYW55IGRhdGEgKi8KIAkJCWdvdG8gZXhpdDsKIAkJfQotCQlkYmcoIiByb29tcXVlcnkgc2F5cyAlZCIsIHJvb20pOwotCQlwcml2LT50eF9yb29tID0gcm9vbTsKIAl9CiAJaWYgKGNvdW50ID4gcHJpdi0+dHhfcm9vbSkgewogCQkvKiB3ZSdyZSBhYm91dCB0byBjb21wbGV0ZWx5IGZpbGwgdGhlIFR4IGJ1ZmZlciwgc28KQEAgLTY4NCwxOCArNzAxLDIyIEBACiAJCQkJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKLQl1bnNpZ25lZCBjaGFyIHJvb207CisJdTggKnJvb207CiAJaW50IHJjID0gMDsKIAlzdHJ1Y3Qga2V5c3Bhbl9wZGFfcHJpdmF0ZSAqcHJpdjsKIAogCS8qIGZpbmQgb3V0IGhvdyBtdWNoIHJvb20gaXMgaW4gdGhlIFR4IHJpbmcgKi8KKwlyb29tID0ga21hbGxvYygxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJvb20pCisJCXJldHVybiAtRU5PTUVNOworCiAJcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCiAJCQkgICAgIDYsIC8qIHdyaXRlX3Jvb20gKi8KIAkJCSAgICAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRQogCQkJICAgICB8IFVTQl9ESVJfSU4sCiAJCQkgICAgIDAsIC8qIHZhbHVlICovCiAJCQkgICAgIDAsIC8qIGluZGV4ICovCi0JCQkgICAgICZyb29tLAorCQkJICAgICByb29tLAogCQkJICAgICAxLAogCQkJICAgICAyMDAwKTsKIAlpZiAocmMgPCAwKSB7CkBAIC03MDgsOCArNzI5LDggQEAKIAkJZ290byBlcnJvcjsKIAl9CiAJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKLQlwcml2LT50eF9yb29tID0gcm9vbTsKLQlwcml2LT50eF90aHJvdHRsZWQgPSByb29tID8gMCA6IDE7CisJcHJpdi0+dHhfcm9vbSA9ICpyb29tOworCXByaXYtPnR4X3Rocm90dGxlZCA9ICpyb29tID8gMCA6IDE7CiAKIAkvKlN0YXJ0IHJlYWRpbmcgZnJvbSB0aGUgZGV2aWNlKi8KIAlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKQEAgLTcxOCw4ICs3MzksOCBAQAogCQlkYmcoIiVzIC0gdXNiX3N1Ym1pdF91cmIocmVhZCBpbnQpIGZhaWxlZCIsIF9fZnVuY19fKTsKIAkJZ290byBlcnJvcjsKIAl9Ci0KIGVycm9yOgorCWtmcmVlKHJvb20pOwogCXJldHVybiByYzsKIH0KIHN0YXRpYyB2b2lkIGtleXNwYW5fcGRhX2Nsb3NlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCkBAIC03ODksNiArODEwLDEzIEBACiAJcmV0dXJuIDE7CiB9CiAKKyNpZmRlZiBLRVlTUEFOCitNT0RVTEVfRklSTVdBUkUoImtleXNwYW5fcGRhL2tleXNwYW5fcGRhLmZ3Iik7CisjZW5kaWYKKyNpZmRlZiBYSVJDT00KK01PRFVMRV9GSVJNV0FSRSgia2V5c3Bhbl9wZGEveGlyY29tX3Bncy5mdyIpOworI2VuZGlmCisKIHN0YXRpYyBpbnQga2V5c3Bhbl9wZGFfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQogewogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2tsNWt1c2IxMDUuYwppbmRleCAzYTc4NzM4Li44ZWVmOTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwva2w1a3VzYjEwNS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rbDVrdXNiMTA1LmMKQEAgLTk0LDcgKzk0LDcgQEAKIC8qCiAgKiBBbGwgb2YgdGhlIGRldmljZSBpbmZvIG5lZWRlZCBmb3IgdGhlIEtMU0kgY29udmVydGVycy4KICAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKFBBTE1DT05ORUNUX1ZJRCwgUEFMTUNPTk5FQ1RfUElEKSB9LAogCXsgVVNCX0RFVklDRShLTFNJX1ZJRCwgS0xTSV9LTDVLVVNCMTA1RF9QSUQpIH0sCiAJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwpAQCAtMjEyLDEwICsyMTIsMTkgQEAKIAkJCQkgICB1bnNpZ25lZCBsb25nICpsaW5lX3N0YXRlX3ApCiB7CiAJaW50IHJjOwotCV9fdTggc3RhdHVzX2J1ZltLTFNJX1NUQVRVU0JVRl9MRU5dID0geyAtMSwgLTF9OworCXU4ICpzdGF0dXNfYnVmOwogCV9fdTE2IHN0YXR1czsKIAogCWRldl9pbmZvKCZwb3J0LT5zZXJpYWwtPmRldi0+ZGV2LCAic2VuZGluZyBTSU8gUG9sbCByZXF1ZXN0XG4iKTsKKworCXN0YXR1c19idWYgPSBrbWFsbG9jKEtMU0lfU1RBVFVTQlVGX0xFTiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdGF0dXNfYnVmKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeSBmb3Igc3RhdHVzIGJ1ZmZlci5cbiIsCisJCQkJX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc3RhdHVzX2J1ZlswXSA9IDB4ZmY7CisJc3RhdHVzX2J1ZlsxXSA9IDB4ZmY7CiAJcmMgPSB1c2JfY29udHJvbF9tc2cocG9ydC0+c2VyaWFsLT5kZXYsCiAJCQkgICAgIHVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCiAJCQkgICAgIEtMNUtVU0IxMDVBX1NJT19QT0xMLApAQCAtMjM2LDYgKzI0NSw4IEBACiAKIAkJKmxpbmVfc3RhdGVfcCA9IGtsc2lfMTA1X3N0YXR1czJsaW5lc3RhdGUoc3RhdHVzKTsKIAl9CisKKwlrZnJlZShzdGF0dXNfYnVmKTsKIAlyZXR1cm4gcmM7CiB9CiAKQEAgLTM2NCw3ICszNzUsNyBAQAogCWludCByYzsKIAlpbnQgaTsKIAl1bnNpZ25lZCBsb25nIGxpbmVfc3RhdGU7Ci0Jc3RydWN0IGtsc2lfMTA1X3BvcnRfc2V0dGluZ3MgY2ZnOworCXN0cnVjdCBrbHNpXzEwNV9wb3J0X3NldHRpbmdzICpjZmc7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRiZygiJXMgcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwpAQCAtMzc2LDEyICszODcsMTggQEAKIAkgKiBUaGVuIHJlYWQgdGhlIG1vZGVtIGxpbmUgY29udHJvbCBhbmQgc3RvcmUgdmFsdWVzIGluCiAJICogcHJpdi0+bGluZV9zdGF0ZS4KIAkgKi8KLQljZmcucGt0bGVuICAgPSA1OwotCWNmZy5iYXVkcmF0ZSA9IGtsNWt1c2IxMDVhX3Npb19iOTYwMDsKLQljZmcuZGF0YWJpdHMgPSBrbDVrdXNiMTA1YV9kdGJfODsKLQljZmcudW5rbm93bjEgPSAwOwotCWNmZy51bmtub3duMiA9IDE7Ci0Ja2xzaV8xMDVfY2hnX3BvcnRfc2V0dGluZ3MocG9ydCwgJmNmZyk7CisJY2ZnID0ga21hbGxvYyhzaXplb2YoKmNmZyksIEdGUF9LRVJORUwpOworCWlmICghY2ZnKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeSBmb3IgY29uZmlnIGJ1ZmZlci5cbiIsCisJCQkJX19mdW5jX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJY2ZnLT5wa3RsZW4gICA9IDU7CisJY2ZnLT5iYXVkcmF0ZSA9IGtsNWt1c2IxMDVhX3Npb19iOTYwMDsKKwljZmctPmRhdGFiaXRzID0ga2w1a3VzYjEwNWFfZHRiXzg7CisJY2ZnLT51bmtub3duMSA9IDA7CisJY2ZnLT51bmtub3duMiA9IDE7CisJa2xzaV8xMDVfY2hnX3BvcnRfc2V0dGluZ3MocG9ydCwgY2ZnKTsKIAogCS8qIHNldCB1cCB0ZXJtaW9zIHN0cnVjdHVyZSAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC0zOTEsMTEgKzQwOCwxMSBAQAogCXByaXYtPnRlcm1pb3MuY19sZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19sZmxhZzsKIAlmb3IgKGkgPSAwOyBpIDwgTkNDUzsgaSsrKQogCQlwcml2LT50ZXJtaW9zLmNfY2NbaV0gPSB0dHktPnRlcm1pb3MtPmNfY2NbaV07Ci0JcHJpdi0+Y2ZnLnBrdGxlbiAgID0gY2ZnLnBrdGxlbjsKLQlwcml2LT5jZmcuYmF1ZHJhdGUgPSBjZmcuYmF1ZHJhdGU7Ci0JcHJpdi0+Y2ZnLmRhdGFiaXRzID0gY2ZnLmRhdGFiaXRzOwotCXByaXYtPmNmZy51bmtub3duMSA9IGNmZy51bmtub3duMTsKLQlwcml2LT5jZmcudW5rbm93bjIgPSBjZmcudW5rbm93bjI7CisJcHJpdi0+Y2ZnLnBrdGxlbiAgID0gY2ZnLT5wa3RsZW47CisJcHJpdi0+Y2ZnLmJhdWRyYXRlID0gY2ZnLT5iYXVkcmF0ZTsKKwlwcml2LT5jZmcuZGF0YWJpdHMgPSBjZmctPmRhdGFiaXRzOworCXByaXYtPmNmZy51bmtub3duMSA9IGNmZy0+dW5rbm93bjE7CisJcHJpdi0+Y2ZnLnVua25vd24yID0gY2ZnLT51bmtub3duMjsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAkvKiBSRUFEX09OIGFuZCB1cmIgc3VibWlzc2lvbiAqLwpAQCAtNDQxLDYgKzQ1OCw3IEBACiAJCXJldHZhbCA9IHJjOwogCiBleGl0OgorCWtmcmVlKGNmZyk7CiAJcmV0dXJuIHJldHZhbDsKIH0gLyoga2xzaV8xMDVfb3BlbiAqLwogCkBAIC02ODEsNyArNjk5LDYgQEAKIAkJCWJ5dGVzX3NlbnQgPSB1cmItPmFjdHVhbF9sZW5ndGggLSAyOwogCQl9CiAKLQkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBieXRlc19zZW50KTsKIAkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEgKyAyLCBieXRlc19zZW50KTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAkJdHR5X2tyZWZfcHV0KHR0eSk7CkBAIC03MTQsMTAgKzczMSwxNyBAQAogCXVuc2lnbmVkIGludCBvbGRfaWZsYWcgPSBvbGRfdGVybWlvcy0+Y19pZmxhZzsKIAl1bnNpZ25lZCBpbnQgY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CiAJdW5zaWduZWQgaW50IG9sZF9jZmxhZyA9IG9sZF90ZXJtaW9zLT5jX2NmbGFnOwotCXN0cnVjdCBrbHNpXzEwNV9wb3J0X3NldHRpbmdzIGNmZzsKKwlzdHJ1Y3Qga2xzaV8xMDVfcG9ydF9zZXR0aW5ncyAqY2ZnOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3BlZWRfdCBiYXVkOwogCisJY2ZnID0ga21hbGxvYyhzaXplb2YoKmNmZyksIEdGUF9LRVJORUwpOworCWlmICghY2ZnKSB7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeSBmb3IgY29uZmlnIGJ1ZmZlci5cbiIsCisJCQkJX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCiAJLyogbG9jayB3aGlsZSB3ZSBhcmUgbW9kaWZ5aW5nIHRoZSBzZXR0aW5ncyAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKQEAgLTc5MywxMSArODE3LDExIEBACiAJCWNhc2UgQ1M1OgogCQkJZGJnKCIlcyAtIDUgYml0cy9ieXRlIG5vdCBzdXBwb3J0ZWQiLCBfX2Z1bmNfXyk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gOworCQkJZ290byBlcnI7CiAJCWNhc2UgQ1M2OgogCQkJZGJnKCIlcyAtIDYgYml0cy9ieXRlIG5vdCBzdXBwb3J0ZWQiLCBfX2Z1bmNfXyk7CiAJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQlyZXR1cm4gOworCQkJZ290byBlcnI7CiAJCWNhc2UgQ1M3OgogCQkJcHJpdi0+Y2ZnLmRhdGFiaXRzID0ga2w1a3VzYjEwNWFfZHRiXzc7CiAJCQlicmVhazsKQEAgLTg1NiwxMSArODgwLDEzIEBACiAjZW5kaWYKIAkJOwogCX0KLQltZW1jcHkoJmNmZywgJnByaXYtPmNmZywgc2l6ZW9mKGNmZykpOworCW1lbWNweShjZmcsICZwcml2LT5jZmcsIHNpemVvZigqY2ZnKSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCiAJLyogbm93IGNvbW1pdCBjaGFuZ2VzIHRvIGRldmljZSAqLwotCWtsc2lfMTA1X2NoZ19wb3J0X3NldHRpbmdzKHBvcnQsICZjZmcpOworCWtsc2lfMTA1X2NoZ19wb3J0X3NldHRpbmdzKHBvcnQsIGNmZyk7CitlcnI6CisJa2ZyZWUoY2ZnKTsKIH0gLyoga2xzaV8xMDVfc2V0X3Rlcm1pb3MgKi8KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwva29iaWxfc2N0LmMKaW5kZXggNDVlYTY5NC4uYzExM2EyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2tvYmlsX3NjdC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rb2JpbF9zY3QuYwpAQCAtODYsNyArODYsNyBAQAogCQkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGt0ZXJtaW9zICpvbGQpOwogc3RhdGljIHZvaWQga29iaWxfaW5pdF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoS09CSUxfVkVORE9SX0lELCBLT0JJTF9BREFQVEVSX0JfUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoS09CSUxfVkVORE9SX0lELCBLT0JJTF9BREFQVEVSX0tfUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoS09CSUxfVkVORE9SX0lELCBLT0JJTF9VU0JUV0lOX1BST0RVQ1RfSUQpIH0sCkBAIC0zODgsNyArMzg4LDYgQEAKIAkJKi8KIAkJLyogRU5EIERFQlVHICovCiAKLQkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAl9CkBAIC02MjQsNyArNjIzLDYgQEAKIAl1bnNpZ25lZCBzaG9ydCB1cmJfdmFsID0gMDsKIAlpbnQgY19jZmxhZyA9IHR0eS0+dGVybWlvcy0+Y19jZmxhZzsKIAlzcGVlZF90IHNwZWVkOwotCXZvaWQgKnNldHRpbmdzOwogCiAJcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlpZiAocHJpdi0+ZGV2aWNlX3R5cGUgPT0gS09CSUxfVVNCVFdJTl9QUk9EVUNUX0lEIHx8CkBAIC02NDcsMjUgKzY0NSwxMyBAQAogCX0KIAl1cmJfdmFsIHw9IChjX2NmbGFnICYgQ1NUT1BCKSA/IFNVU0JDUl9TUEFTQl8yU3RvcEJpdHMgOgogCQkJCQkJCVNVU0JDUl9TUEFTQl8xU3RvcEJpdDsKLQotCXNldHRpbmdzID0ga3phbGxvYyg1MCwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFzZXR0aW5ncykKLQkJcmV0dXJuOwotCi0Jc3ByaW50ZihzZXR0aW5ncywgIiVkICIsIHNwZWVkKTsKLQogCWlmIChjX2NmbGFnICYgUEFSRU5CKSB7Ci0JCWlmICAoY19jZmxhZyAmIFBBUk9ERCkgeworCQlpZiAgKGNfY2ZsYWcgJiBQQVJPREQpCiAJCQl1cmJfdmFsIHw9IFNVU0JDUl9TUEFTQl9PZGRQYXJpdHk7Ci0JCQlzdHJjYXQoc2V0dGluZ3MsICJPZGQgUGFyaXR5Iik7Ci0JCX0gZWxzZSB7CisJCWVsc2UKIAkJCXVyYl92YWwgfD0gU1VTQkNSX1NQQVNCX0V2ZW5QYXJpdHk7Ci0JCQlzdHJjYXQoc2V0dGluZ3MsICJFdmVuIFBhcml0eSIpOwotCQl9Ci0JfSBlbHNlIHsKKwl9IGVsc2UKIAkJdXJiX3ZhbCB8PSBTVVNCQ1JfU1BBU0JfTm9QYXJpdHk7Ci0JCXN0cmNhdChzZXR0aW5ncywgIk5vIFBhcml0eSIpOwotCX0KIAl0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJj0gfkNNU1BBUjsKIAl0dHlfZW5jb2RlX2JhdWRfcmF0ZSh0dHksIHNwZWVkLCBzcGVlZCk7CiAKQEAgLTY3NSwxMSArNjYxLDEwIEBACiAJCSAgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0VORFBPSU5UIHwgVVNCX0RJUl9PVVQsCiAJCSAgdXJiX3ZhbCwKIAkJICAwLAotCQkgIHNldHRpbmdzLAorCQkgIE5VTEwsCiAJCSAgMCwKIAkJICBLT0JJTF9USU1FT1VUCiAJCSk7Ci0Ja2ZyZWUoc2V0dGluZ3MpOwogfQogCiBzdGF0aWMgaW50IGtvYmlsX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwppbmRleCBjZDAwOWNiLi4yODQ5ZjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbWN0X3UyMzIuYwpAQCAtNzUsNiArNzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CiAjaW5jbHVkZSAibWN0X3UyMzIuaCIKQEAgLTExMCw3ICsxMTEsNyBAQAogLyoKICAqIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgTUNUIFVTQi1SUzIzMiBjb252ZXJ0ZXIuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZCBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZFtdID0gewogCXsgVVNCX0RFVklDRShNQ1RfVTIzMl9WSUQsIE1DVF9VMjMyX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoTUNUX1UyMzJfVklELCBNQ1RfVTIzMl9TSVRFQ09NX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoTUNUX1UyMzJfVklELCBNQ1RfVTIzMl9EVV9IM1NQX1BJRCkgfSwKQEAgLTIzMSwxOSArMjMyLDIyIEBACiBzdGF0aWMgaW50IG1jdF91MjMyX3NldF9iYXVkX3JhdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzcGVlZF90IHZhbHVlKQogewotCV9fbGUzMiBkaXZpc29yOworCXVuc2lnbmVkIGludCBkaXZpc29yOwogCWludCByYzsKLQl1bnNpZ25lZCBjaGFyIHplcm9fYnl0ZSA9IDA7CisJdW5zaWduZWQgY2hhciAqYnVmOwogCXVuc2lnbmVkIGNoYXIgY3RzX2VuYWJsZV9ieXRlID0gMDsKIAlzcGVlZF90IHNwZWVkOwogCi0JZGl2aXNvciA9IGNwdV90b19sZTMyKG1jdF91MjMyX2NhbGN1bGF0ZV9iYXVkX3JhdGUoc2VyaWFsLCB2YWx1ZSwKLQkJCQkJCQkJJnNwZWVkKSk7CisJYnVmID0ga21hbGxvYyhNQ1RfVTIzMl9NQVhfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKGJ1ZiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKIAorCWRpdmlzb3IgPSBtY3RfdTIzMl9jYWxjdWxhdGVfYmF1ZF9yYXRlKHNlcmlhbCwgdmFsdWUsICZzcGVlZCk7CisJcHV0X3VuYWxpZ25lZF9sZTMyKGNwdV90b19sZTMyKGRpdmlzb3IpLCBidWYpOwogCXJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAogCQkJCU1DVF9VMjMyX1NFVF9CQVVEX1JBVEVfUkVRVUVTVCwKIAkJCQlNQ1RfVTIzMl9TRVRfUkVRVUVTVF9UWVBFLAotCQkJCTAsIDAsICZkaXZpc29yLCBNQ1RfVTIzMl9TRVRfQkFVRF9SQVRFX1NJWkUsCisJCQkJMCwgMCwgYnVmLCBNQ1RfVTIzMl9TRVRfQkFVRF9SQVRFX1NJWkUsCiAJCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCS8qRklYTUU6IFdoYXQgdmFsdWUgc3BlZWQgcmVzdWx0cyAqLwogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZXQgQkFVRCBSQVRFICVkIGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsCkBAIC0yNjksMTAgKzI3MywxMSBAQAogCSAgIGEgZGV2aWNlIHdoaWNoIGlzIG5vdCBhc3NlcnRpbmcgJ0NUUycuCiAJKi8KIAorCWJ1ZlswXSA9IDA7CiAJcmMgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCiAJCQkJTUNUX1UyMzJfU0VUX1VOS05PV04xX1JFUVVFU1QsCiAJCQkJTUNUX1UyMzJfU0VUX1JFUVVFU1RfVFlQRSwKLQkJCQkwLCAwLCAmemVyb19ieXRlLCBNQ1RfVTIzMl9TRVRfVU5LTk9XTjFfU0laRSwKKwkJCQkwLCAwLCBidWYsIE1DVF9VMjMyX1NFVF9VTktOT1dOMV9TSVpFLAogCQkJCVdEUl9USU1FT1VUKTsKIAlpZiAocmMgPCAwKQogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZW5kaW5nIFVTQiBkZXZpY2UgcmVxdWVzdCBjb2RlICVkICIKQEAgLTI4NCwzMCArMjg5LDQwIEBACiAKIAlkYmcoInNldF9iYXVkX3JhdGU6IHNlbmQgc2Vjb25kIGNvbnRyb2wgbWVzc2FnZSwgZGF0YSA9ICUwMlgiLAogCQkJCQkJCWN0c19lbmFibGVfYnl0ZSk7CisJYnVmWzBdID0gY3RzX2VuYWJsZV9ieXRlOwogCXJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAogCQkJTUNUX1UyMzJfU0VUX0NUU19SRVFVRVNULAogCQkJTUNUX1UyMzJfU0VUX1JFUVVFU1RfVFlQRSwKLQkJCTAsIDAsICZjdHNfZW5hYmxlX2J5dGUsIE1DVF9VMjMyX1NFVF9DVFNfU0laRSwKKwkJCTAsIDAsIGJ1ZiwgTUNUX1UyMzJfU0VUX0NUU19TSVpFLAogCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIlNlbmRpbmcgVVNCIGRldmljZSByZXF1ZXN0IGNvZGUgJWQgIgogCQkJImZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIE1DVF9VMjMyX1NFVF9DVFNfUkVRVUVTVCwgcmMpOwogCisJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmM7CiB9IC8qIG1jdF91MjMyX3NldF9iYXVkX3JhdGUgKi8KIAogc3RhdGljIGludCBtY3RfdTIzMl9zZXRfbGluZV9jdHJsKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIGNoYXIgbGNyKQogewogCWludCByYzsKKwl1bnNpZ25lZCBjaGFyICpidWY7CisKKwlidWYgPSBrbWFsbG9jKE1DVF9VMjMyX01BWF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJYnVmWzBdID0gbGNyOwogCXJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAogCQkJTUNUX1UyMzJfU0VUX0xJTkVfQ1RSTF9SRVFVRVNULAogCQkJTUNUX1UyMzJfU0VUX1JFUVVFU1RfVFlQRSwKLQkJCTAsIDAsICZsY3IsIE1DVF9VMjMyX1NFVF9MSU5FX0NUUkxfU0laRSwKKwkJCTAsIDAsIGJ1ZiwgTUNUX1UyMzJfU0VUX0xJTkVfQ1RSTF9TSVpFLAogCQkJV0RSX1RJTUVPVVQpOwogCWlmIChyYyA8IDApCiAJCWRldl9lcnIoJnNlcmlhbC0+ZGV2LT5kZXYsCiAJCQkiU2V0IExJTkUgQ1RSTCAweCV4IGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsIGxjciwgcmMpOwogCWRiZygic2V0X2xpbmVfY3RybDogMHgleCIsIGxjcik7CisJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmM7CiB9IC8qIG1jdF91MjMyX3NldF9saW5lX2N0cmwgKi8KIApAQCAtMzE1LDIzICszMzAsMzEgQEAKIAkJCQkgICB1bnNpZ25lZCBpbnQgY29udHJvbF9zdGF0ZSkKIHsKIAlpbnQgcmM7Ci0JdW5zaWduZWQgY2hhciBtY3IgPSBNQ1RfVTIzMl9NQ1JfTk9ORTsKKwl1bnNpZ25lZCBjaGFyIG1jcjsKKwl1bnNpZ25lZCBjaGFyICpidWY7CiAKKwlidWYgPSBrbWFsbG9jKE1DVF9VMjMyX01BWF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnVmID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJbWNyID0gTUNUX1UyMzJfTUNSX05PTkU7CiAJaWYgKGNvbnRyb2xfc3RhdGUgJiBUSU9DTV9EVFIpCiAJCW1jciB8PSBNQ1RfVTIzMl9NQ1JfRFRSOwogCWlmIChjb250cm9sX3N0YXRlICYgVElPQ01fUlRTKQogCQltY3IgfD0gTUNUX1UyMzJfTUNSX1JUUzsKIAorCWJ1ZlswXSA9IG1jcjsKIAlyYyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKIAkJCU1DVF9VMjMyX1NFVF9NT0RFTV9DVFJMX1JFUVVFU1QsCiAJCQlNQ1RfVTIzMl9TRVRfUkVRVUVTVF9UWVBFLAotCQkJMCwgMCwgJm1jciwgTUNUX1UyMzJfU0VUX01PREVNX0NUUkxfU0laRSwKKwkJCTAsIDAsIGJ1ZiwgTUNUX1UyMzJfU0VUX01PREVNX0NUUkxfU0laRSwKIAkJCVdEUl9USU1FT1VUKTsKIAlpZiAocmMgPCAwKQogCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAogCQkJIlNldCBNT0RFTSBDVFJMIDB4JXggZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgbWNyLCByYyk7CiAJZGJnKCJzZXRfbW9kZW1fY3RybDogc3RhdGU9MHgleCA9PT4gbWNyPTB4JXgiLCBjb250cm9sX3N0YXRlLCBtY3IpOwogCisJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmM7CiB9IC8qIG1jdF91MjMyX3NldF9tb2RlbV9jdHJsICovCiAKQEAgLTMzOSwxNyArMzYyLDI3IEBACiAJCQkJCQl1bnNpZ25lZCBjaGFyICptc3IpCiB7CiAJaW50IHJjOworCXVuc2lnbmVkIGNoYXIgKmJ1ZjsKKworCWJ1ZiA9IGttYWxsb2MoTUNUX1UyMzJfTUFYX1NJWkUsIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkgeworCQkqbXNyID0gMDsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCXJjID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAogCQkJTUNUX1UyMzJfR0VUX01PREVNX1NUQVRfUkVRVUVTVCwKIAkJCU1DVF9VMjMyX0dFVF9SRVFVRVNUX1RZUEUsCi0JCQkwLCAwLCBtc3IsIE1DVF9VMjMyX0dFVF9NT0RFTV9TVEFUX1NJWkUsCisJCQkwLCAwLCBidWYsIE1DVF9VMjMyX0dFVF9NT0RFTV9TVEFUX1NJWkUsCiAJCQlXRFJfVElNRU9VVCk7CiAJaWYgKHJjIDwgMCkgewogCQlkZXZfZXJyKCZzZXJpYWwtPmRldi0+ZGV2LAogCQkJIkdldCBNT0RFTSBTVEFUdXMgZmFpbGVkIChlcnJvciA9ICVkKVxuIiwgcmMpOwogCQkqbXNyID0gMDsKKwl9IGVsc2UgeworCQkqbXNyID0gYnVmWzBdOwogCX0KIAlkYmcoImdldF9tb2RlbV9zdGF0OiAweCV4IiwgKm1zcik7CisJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gcmM7CiB9IC8qIG1jdF91MjMyX2dldF9tb2RlbV9zdGF0ICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9tY3RfdTIzMi5oIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmgKaW5kZXggMDdiNmJlYy4uNzQxN2Q1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmgKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21jdF91MjMyLmgKQEAgLTczLDYgKzczLDggQEAKICNkZWZpbmUgTUNUX1UyMzJfU0VUX0NUU19SRVFVRVNUICAgMTIKICNkZWZpbmUgTUNUX1UyMzJfU0VUX0NUU19TSVpFICAgICAgIDEKIAorI2RlZmluZSBNQ1RfVTIzMl9NQVhfU0laRQkJNAkvKiBvZiBNQ1RfWFhYX1NJWkUgKi8KKwogLyoKICAqIEJhdWQgcmF0ZSAoZGl2aXNvcikKICAqIEFjdHVhbGx5LCB0aGVyZSBhcmUgdHdvIG9mIHRoZW0sIE1DVCB3ZWJzaXRlIGNhbGxzIHRoZW0gIlBoaWxpcHMgc29sdXRpb24iCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzcyMC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc3MjAuYwppbmRleCA3NjNlMzJhLi4wZDQ3ZjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzcyMC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3NzIwLmMKQEAgLTgxLDEyICs4MSwxNSBAQAogCiBzdGF0aWMgaW50IGRlYnVnOwogCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIG1vc2NoaXA3NzIwXzJwb3J0X2RyaXZlcjsKKwogI2RlZmluZSBVU0JfVkVORE9SX0lEX01PU0NISVAJCTB4OTcxMAogI2RlZmluZSBNT1NDSElQX0RFVklDRV9JRF83NzIwCQkweDc3MjAKICNkZWZpbmUgTU9TQ0hJUF9ERVZJQ0VfSURfNzcxNQkJMHg3NzE1CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtb3NjaGlwX3BvcnRfaWRfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBtb3NjaGlwX3BvcnRfaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NT1NDSElQLCBNT1NDSElQX0RFVklDRV9JRF83NzIwKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01PU0NISVAsIE1PU0NISVBfREVWSUNFX0lEXzc3MTUpIH0sCiAJeyB9IC8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIG1vc2NoaXBfcG9ydF9pZF90YWJsZSk7CkBAIC0xMDYsNyArMTA5LDcgQEAKIAlfX3U4IHNwMTsKIAlfX3U4IHNwMjsKIAotCWRiZygiJXMiLCAiIDogRW50ZXJpbmdcbiIpOworCWRiZygiIDogRW50ZXJpbmciKTsKIAogCXN3aXRjaCAoc3RhdHVzKSB7CiAJY2FzZSAwOgpAQCAtMTg2LDYgKzE4OSw3NSBAQAogfQogCiAvKgorICogbW9zNzcxNV9pbnRlcnJ1cHRfY2FsbGJhY2sKKyAqCXRoaXMgaXMgdGhlIDc3MTUncyBjYWxsYmFjayBmdW5jdGlvbiBmb3Igd2hlbiB3ZSBoYXZlIHJlY2VpdmVkIGRhdGEgb24KKyAqCXRoZSBpbnRlcnJ1cHQgZW5kcG9pbnQuCisgKi8KK3N0YXRpYyB2b2lkIG1vczc3MTVfaW50ZXJydXB0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKK3sKKwlpbnQgcmVzdWx0OworCWludCBsZW5ndGg7CisJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOworCV9fdTggKmRhdGE7CisJX191OCBpaXI7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX2Z1bmNfXywKKwkJICAgIHN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLAorCQkgICAgc3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCWxlbmd0aCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwlkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwkvKiBTdHJ1Y3R1cmUgb2YgZGF0YSBmcm9tIDc3MTUgZGV2aWNlOgorCSAqIEJ5dGUgMTogSUlSIHNlcmlhbCBQb3J0CisJICogQnl0ZSAyOiB1bnVzZWQKKwkgKiBCeXRlIDI6IERTUiBwYXJhbGxlbCBwb3J0CisJICogQnl0ZSA0OiBGSUZPIHN0YXR1cyBmb3IgYm90aCAqLworCisJaWYgKHVubGlrZWx5KGxlbmd0aCAhPSA0KSkgeworCQlkYmcoIldyb25nIGRhdGEgISEhIik7CisJCXJldHVybjsKKwl9CisKKwlpaXIgPSBkYXRhWzBdOworCWlmICghKGlpciAmIDB4MDEpKSB7CS8qIHNlcmlhbCBwb3J0IGludGVycnVwdCBwZW5kaW5nICovCisJCXN3aXRjaCAoaWlyICYgMHgwZikgeworCQljYXNlIFNFUklBTF9JSVJfUkxTOgorCQkJZGJnKCJTZXJpYWwgUG9ydDogUmVjZWl2ZXIgc3RhdHVzIGVycm9yIG9yIGFkZHJlc3MgIgorCQkJICAgICJiaXQgZGV0ZWN0ZWQgaW4gOS1iaXQgbW9kZVxuIik7CisJCQlicmVhazsKKwkJY2FzZSBTRVJJQUxfSUlSX0NUSToKKwkJCWRiZygiU2VyaWFsIFBvcnQ6IFJlY2VpdmVyIHRpbWUgb3V0Iik7CisJCQlicmVhazsKKwkJY2FzZSBTRVJJQUxfSUlSX01TOgorCQkJZGJnKCJTZXJpYWwgUG9ydDogTW9kZW0gc3RhdHVzIGNoYW5nZSIpOworCQkJYnJlYWs7CisJCX0KKwl9CisKK2V4aXQ6CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LAorCQkJIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyBjb250cm9sIHVyYlxuIiwKKwkJCV9fZnVuY19fLCByZXN1bHQpOworCXJldHVybjsKK30KKworLyoKICAqIG1vczc3MjBfYnVsa19pbl9jYWxsYmFjawogICoJdGhpcyBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHdoZW4gd2UgaGF2ZSByZWNlaXZlZCBkYXRhIG9uIHRoZQogICoJYnVsayBpbiBlbmRwb2ludC4KQEAgLTIwNiw3ICsyNzgsNyBAQAogCiAJbW9zNzcyMF9wb3J0ID0gdXJiLT5jb250ZXh0OwogCWlmICghbW9zNzcyMF9wb3J0KSB7Ci0JCWRiZygiJXMiLCAiTlVMTCBtb3M3NzIwX3BvcnQgcG9pbnRlciBcbiIpOworCQlkYmcoIk5VTEwgbW9zNzcyMF9wb3J0IHBvaW50ZXIiKTsKIAkJcmV0dXJuIDsKIAl9CiAKQEAgLTIxOCw3ICsyOTAsNiBAQAogCiAJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKLQkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAl9CkBAIC0yNzUsMTcgKzM0NiwxNSBAQAogICoJdGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgZm9yIHNlbmRpbmcgY29tbWFuZCB0byBkZXZpY2UKICAqLwogc3RhdGljIGludCBzZW5kX21vc19jbWQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwgX191OCByZXF1ZXN0LCBfX3UxNiB2YWx1ZSwKLQkJCV9fdTE2IGluZGV4LCB2b2lkICpkYXRhKQorCQkJX191MTYgaW5kZXgsIHU4ICpkYXRhKQogewogCWludCBzdGF0dXM7Ci0JdW5zaWduZWQgaW50IHBpcGU7CisJdTggKmJ1ZjsKIAl1MTYgcHJvZHVjdCA9IGxlMTZfdG9fY3B1KHNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCk7Ci0JX191OCByZXF1ZXN0dHlwZTsKLQlfX3UxNiBzaXplID0gMHgwMDAwOwogCiAJaWYgKHZhbHVlIDwgTU9TX01BWF9QT1JUKSB7CiAJCWlmIChwcm9kdWN0ID09IE1PU0NISVBfREVWSUNFX0lEXzc3MTUpCi0JCQl2YWx1ZSA9IHZhbHVlKjB4MTAwKzB4MTAwOworCQkJdmFsdWUgPSAweDAyMDA7IC8qIGlkZW50aWZpZXMgdGhlIDc3MTUncyBzZXJpYWwgcG9ydCAqLwogCQllbHNlCiAJCQl2YWx1ZSA9IHZhbHVlKjB4MTAwKzB4MjAwOwogCX0gZWxzZSB7CkBAIC0yOTgsMjcgKzM2Nyw1OCBAQAogCX0KIAogCWlmIChyZXF1ZXN0ID09IE1PU19XUklURSkgewotCQlyZXF1ZXN0ID0gKF9fdTgpTU9TX1dSSVRFOwotCQlyZXF1ZXN0dHlwZSA9IChfX3U4KTB4NDA7Ci0JCXZhbHVlICA9IHZhbHVlICsgKF9fdTE2KSooKHVuc2lnbmVkIGNoYXIgKilkYXRhKTsKLQkJZGF0YSA9IE5VTEw7Ci0JCXBpcGUgPSB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApOworCQl2YWx1ZSA9IHZhbHVlICsgKmRhdGE7CisJCXN0YXR1cyA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKKwkJCQl1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLCBNT1NfV1JJVEUsCisJCQkJMHg0MCwgdmFsdWUsIGluZGV4LCBOVUxMLCAwLCBNT1NfV0RSX1RJTUVPVVQpOwogCX0gZWxzZSB7Ci0JCXJlcXVlc3QgPSAoX191OClNT1NfUkVBRDsKLQkJcmVxdWVzdHR5cGUgPSAoX191OCkweEMwOwotCQlzaXplID0gMHgwMTsKLQkJcGlwZSA9IHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCk7CisJCWJ1ZiA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmKSB7CisJCQlzdGF0dXMgPSAtRU5PTUVNOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAorCQkJCXVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksIE1PU19SRUFELAorCQkJCTB4YzAsIHZhbHVlLCBpbmRleCwgYnVmLCAxLCBNT1NfV0RSX1RJTUVPVVQpOworCQkqZGF0YSA9ICpidWY7CisJCWtmcmVlKGJ1Zik7CiAJfQotCi0Jc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCBwaXBlLCByZXF1ZXN0LCByZXF1ZXN0dHlwZSwKLQkJCQkgdmFsdWUsIGluZGV4LCBkYXRhLCBzaXplLCBNT1NfV0RSX1RJTUVPVVQpOwotCitvdXQ6CiAJaWYgKHN0YXR1cyA8IDApCi0JCWRiZygiQ29tbWFuZCBXcml0ZSBmYWlsZWQgVmFsdWUgJXggaW5kZXggJXhcbiIsIHZhbHVlLCBpbmRleCk7CisJCWRiZygiQ29tbWFuZCBXcml0ZSBmYWlsZWQgVmFsdWUgJXggaW5kZXggJXgiLCB2YWx1ZSwgaW5kZXgpOwogCiAJcmV0dXJuIHN0YXR1czsKIH0KIAorCisvKgorICogbW9zNzd4eF9wcm9iZQorICoJdGhpcyBmdW5jdGlvbiBpbnN0YWxscyB0aGUgYXBwcm9wcmlhdGUgcmVhZCBpbnRlcnJ1cHQgZW5kcG9pbnQgY2FsbGJhY2sKKyAqCWRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBkZXZpY2UgaXMgYSA3NzIwIG9yIDc3MTUsIHRodXMgYXZvaWRpbmcgY29zdGx5CisgKglydW4tdGltZSBjaGVja3MgaW4gdGhlIGhpZ2gtZnJlcXVlbmN5IGNhbGxiYWNrIHJvdXRpbmUgaXRzZWxmLgorICovCitzdGF0aWMgaW50IG1vczc3eHhfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCSBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJaWYgKGlkLT5pZFByb2R1Y3QgPT0gTU9TQ0hJUF9ERVZJQ0VfSURfNzcxNSkKKwkJbW9zY2hpcDc3MjBfMnBvcnRfZHJpdmVyLnJlYWRfaW50X2NhbGxiYWNrID0KKwkJCW1vczc3MTVfaW50ZXJydXB0X2NhbGxiYWNrOworCWVsc2UKKwkJbW9zY2hpcDc3MjBfMnBvcnRfZHJpdmVyLnJlYWRfaW50X2NhbGxiYWNrID0KKwkJCW1vczc3MjBfaW50ZXJydXB0X2NhbGxiYWNrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbW9zNzd4eF9jYWxjX251bV9wb3J0cyhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXUxNiBwcm9kdWN0ID0gbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKwlpZiAocHJvZHVjdCA9PSBNT1NDSElQX0RFVklDRV9JRF83NzE1KQorCQlyZXR1cm4gMTsKKworCXJldHVybiAyOworfQorCiBzdGF0aWMgaW50IG1vczc3MjBfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CkBAIC0zOTAsNyArNDkwLDcgQEAKIAkgICovCiAJcG9ydF9udW1iZXIgPSBwb3J0LT5udW1iZXIgLSBwb3J0LT5zZXJpYWwtPm1pbm9yOwogCXNlbmRfbW9zX2NtZChwb3J0LT5zZXJpYWwsIE1PU19SRUFELCBwb3J0X251bWJlciwgVUFSVF9MU1IsICZkYXRhKTsKLQlkYmcoIlNTOjolcCBMU1I6JXhcbiIsIG1vczc3MjBfcG9ydCwgZGF0YSk7CisJZGJnKCJTUzo6JXAgTFNSOiV4IiwgbW9zNzcyMF9wb3J0LCBkYXRhKTsKIAogCWRiZygiQ2hlY2s6U2VuZGluZyBDb21tYW5kIC4uLi4uLi4uLi4iKTsKIApAQCAtNzI5LDcgKzgyOSw3IEBACiAJc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzcyMF9wb3J0OwogCWludCBzdGF0dXM7CiAKLQlkYmcoIiVzLSBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwlkYmcoIiVzLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKIAltb3M3NzIwX3BvcnQgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKQEAgLTEyMDgsNyArMTMwOCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlkYmcoIiVzXG4iLCAic2V0dGluZyB0ZXJtaW9zIC0gQVNQSVJFIik7CisJZGJnKCJzZXR0aW5nIHRlcm1pb3MgLSBBU1BJUkUiKTsKIAogCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOwogCkBAIC0xMjI2LDcgKzEzMjYsNyBAQAogCWNoYW5nZV9wb3J0X3NldHRpbmdzKHR0eSwgbW9zNzcyMF9wb3J0LCBvbGRfdGVybWlvcyk7CiAKIAlpZiAoIXBvcnQtPnJlYWRfdXJiKSB7Ci0JCWRiZygiJXMiLCAiVVJCIEtJTExFRCAhISEhIVxuIik7CisJCWRiZygiVVJCIEtJTExFRCAhISEhISIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xNDk1LDYgKzE1OTUsNyBAQAogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXY7CiAJaW50IGk7CiAJY2hhciBkYXRhOworCXUxNiBwcm9kdWN0ID0gbGUxNl90b19jcHUoc2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKIAogCWRiZygiJXM6IEVudGVyaW5nIC4uLi4uLi4uLi4iLCBfX2Z1bmNfXyk7CiAKQEAgLTE1MTQsNiArMTYxNSwyOSBAQAogCiAJdXNiX3NldF9zZXJpYWxfZGF0YShzZXJpYWwsIG1vczc3MjBfc2VyaWFsKTsKIAorCS8qCisJICogVGhlIDc3MTUgdXNlcyB0aGUgZmlyc3QgYnVsayBpbi9vdXQgZW5kcG9pbnQgcGFpciBmb3IgdGhlIHBhcmFsbGVsCisJICogcG9ydCwgYW5kIHRoZSBzZWNvbmQgZm9yIHRoZSBzZXJpYWwgcG9ydC4gIEJlY2F1c2UgdGhlIHVzYnNlcmlhbCBjb3JlCisJICogYXNzdW1lcyBib3RoIHBhaXJzIGFyZSBzZXJpYWwgcG9ydHMsIHdlIG11c3QgZW5nYWdlIGluIGEgYml0IG9mCisJICogc3VidGVyZnVnZSBhbmQgc3dhcCB0aGUgcG9pbnRlcnMgZm9yIHBvcnRzIDAgYW5kIDEgaW4gb3JkZXIgdG8gbWFrZQorCSAqIHBvcnQgMCBwb2ludCB0byB0aGUgc2VyaWFsIHBvcnQuICBIb3dldmVyLCBib3RoIG1vc2NoaXAgZGV2aWNlcyB1c2UgYQorCSAqIHNpbmdsZSBpbnRlcnJ1cHQtaW4gZW5kcG9pbnQgZm9yIGJvdGggcG9ydHMgKGFzIG1lbnRpb25lZCBhIGxpdHRsZQorCSAqIGZ1cnRoZXIgZG93biksIGFuZCB0aGlzIGVuZHBvaW50IHdhcyBhc3NpZ25lZCB0byBwb3J0IDAuICBTbyBhZnRlcgorCSAqIHRoZSBzd2FwLCB3ZSBtdXN0IGNvcHkgdGhlIGludGVycnVwdCBlbmRwb2ludCBlbGVtZW50cyBmcm9tIHBvcnQgMQorCSAqIChhcyBuZXdseSBhc3NpZ25lZCkgdG8gcG9ydCAwLCBhbmQgbnVsbCBvdXQgcG9ydCAxIHBvaW50ZXJzLgorCSAqLworCWlmIChwcm9kdWN0ID09IE1PU0NISVBfREVWSUNFX0lEXzc3MTUpIHsKKwkJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqdG1wID0gc2VyaWFsLT5wb3J0WzBdOworCQlzZXJpYWwtPnBvcnRbMF0gPSBzZXJpYWwtPnBvcnRbMV07CisJCXNlcmlhbC0+cG9ydFsxXSA9IHRtcDsKKwkJc2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fdXJiID0gdG1wLT5pbnRlcnJ1cHRfaW5fdXJiOworCQlzZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl9idWZmZXIgPSB0bXAtPmludGVycnVwdF9pbl9idWZmZXI7CisJCXNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzcyA9CisJCQl0bXAtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3M7CisJCXNlcmlhbC0+cG9ydFsxXS0+aW50ZXJydXB0X2luX3VyYiA9IE5VTEw7CisJCXNlcmlhbC0+cG9ydFsxXS0+aW50ZXJydXB0X2luX2J1ZmZlciA9IE5VTEw7CisJfQorCiAJLyogd2Ugc2V0IHVwIHRoZSBwb2ludGVycyB0byB0aGUgZW5kcG9pbnRzIGluIHRoZSBtb3M3NzIwX29wZW4gKgogCSAqIGZ1bmN0aW9uLCBhcyB0aGUgc3RydWN0dXJlcyBhcmVuJ3QgY3JlYXRlZCB5ZXQuICAgICAgICAgICAgICovCiAKQEAgLTE1MjksNyArMTY1Myw3IEBACiAKIAkJLyogSW5pdGlhbGl6ZSBhbGwgcG9ydCBpbnRlcnJ1cHQgZW5kIHBvaW50IHRvIHBvcnQgMCBpbnQKIAkJICogZW5kcG9pbnQuICBPdXIgZGV2aWNlIGhhcyBvbmx5IG9uZSBpbnRlcnJ1cHQgZW5kcG9pbnQKLQkJICogY29tbWFuIHRvIGFsbCBwb3J0cyAqLworCQkgKiBjb21tb24gdG8gYWxsIHBvcnRzICovCiAJCXNlcmlhbC0+cG9ydFtpXS0+aW50ZXJydXB0X2luX2VuZHBvaW50QWRkcmVzcyA9CiAJCQkJc2VyaWFsLT5wb3J0WzBdLT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzOwogCkBAIC0xNTg0LDExICsxNzA4LDEyIEBACiAJLmRlc2NyaXB0aW9uCQk9ICJNb3NjaGlwIDIgcG9ydCBhZGFwdGVyIiwKIAkudXNiX2RyaXZlcgkJPSAmdXNiX2RyaXZlciwKIAkuaWRfdGFibGUJCT0gbW9zY2hpcF9wb3J0X2lkX3RhYmxlLAotCS5udW1fcG9ydHMJCT0gMiwKKwkuY2FsY19udW1fcG9ydHMJCT0gbW9zNzd4eF9jYWxjX251bV9wb3J0cywKIAkub3BlbgkJCT0gbW9zNzcyMF9vcGVuLAogCS5jbG9zZQkJCT0gbW9zNzcyMF9jbG9zZSwKIAkudGhyb3R0bGUJCT0gbW9zNzcyMF90aHJvdHRsZSwKIAkudW50aHJvdHRsZQkJPSBtb3M3NzIwX3VudGhyb3R0bGUsCisJLnByb2JlCQkJPSBtb3M3N3h4X3Byb2JlLAogCS5hdHRhY2gJCQk9IG1vczc3MjBfc3RhcnR1cCwKIAkucmVsZWFzZQkJPSBtb3M3NzIwX3JlbGVhc2UsCiAJLmlvY3RsCQkJPSBtb3M3NzIwX2lvY3RsLApAQCAtMTYwMCw3ICsxNzI1LDcgQEAKIAkuY2hhcnNfaW5fYnVmZmVyCT0gbW9zNzcyMF9jaGFyc19pbl9idWZmZXIsCiAJLmJyZWFrX2N0bAkJPSBtb3M3NzIwX2JyZWFrLAogCS5yZWFkX2J1bGtfY2FsbGJhY2sJPSBtb3M3NzIwX2J1bGtfaW5fY2FsbGJhY2ssCi0JLnJlYWRfaW50X2NhbGxiYWNrCT0gbW9zNzcyMF9pbnRlcnJ1cHRfY2FsbGJhY2ssCisJLnJlYWRfaW50X2NhbGxiYWNrCT0gTlVMTCAgLyogZHluYW1pY2FsbHkgYXNzaWduZWQgaW4gcHJvYmUoKSAqLwogfTsKIAogc3RhdGljIGludCBfX2luaXQgbW9zY2hpcDc3MjBfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9tb3M3ODQwLmMKaW5kZXggMmNmZTI0NS4uMmZkYTFjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jCkBAIC0xODEsNyArMTgxLDcgQEAKICNkZWZpbmUgVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFICAgICAgICAzMgkvKiBVUkIgU2l6ZSAgKi8KIAogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgbW9zY2hpcF9wb3J0X2lkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgbW9zY2hpcF9wb3J0X2lkX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NT1NDSElQLCBNT1NDSElQX0RFVklDRV9JRF83ODQwKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9NT1NDSElQLCBNT1NDSElQX0RFVklDRV9JRF83ODIwKX0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9CQU5EQiwgQkFOREJfREVWSUNFX0lEX1VTTzlNTDJfMil9LApAQCAtMTk4LDcgKzE5OCw3IEBACiAJe30JCQkvKiB0ZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAotc3RhdGljIF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgbW9zY2hpcF9pZF90YWJsZV9jb21iaW5lZFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIG1vc2NoaXBfaWRfdGFibGVfY29tYmluZWRbXSBfX2RldmluaXRjb25zdCA9IHsKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01PU0NISVAsIE1PU0NISVBfREVWSUNFX0lEXzc4NDApfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01PU0NISVAsIE1PU0NISVBfREVWSUNFX0lEXzc4MjApfSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0JBTkRCLCBCQU5EQl9ERVZJQ0VfSURfVVNPOU1MMl8yKX0sCkBAIC0yODMsMTIgKzI4MywxOSBAQAogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAlpbnQgcmV0ID0gMDsKKwl1OCAqYnVmOworCisJYnVmID0ga21hbGxvYyhWRU5ET1JfUkVBRF9MRU5HVEgsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBNQ1NfUkRSRVEsCi0JCQkgICAgICBNQ1NfUkRfUlRZUEUsIDAsIHJlZywgdmFsLCBWRU5ET1JfUkVBRF9MRU5HVEgsCisJCQkgICAgICBNQ1NfUkRfUlRZUEUsIDAsIHJlZywgYnVmLCBWRU5ET1JfUkVBRF9MRU5HVEgsCiAJCQkgICAgICBNT1NfV0RSX1RJTUVPVVQpOworCSp2YWwgPSBidWZbMF07CiAJZGJnKCJtb3M3ODQwX2dldF9yZWdfc3luYyBvZmZzZXQgaXMgJXgsIHJldHVybiB2YWwgJXgiLCByZWcsICp2YWwpOwotCSp2YWwgPSAoKnZhbCkgJiAweDAwZmY7CisKKwlrZnJlZShidWYpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM0MSw2ICszNDgsMTEgQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJaW50IHJldCA9IDA7CiAJX191MTYgV3ZhbDsKKwl1OCAqYnVmOworCisJYnVmID0ga21hbGxvYyhWRU5ET1JfUkVBRF9MRU5HVEgsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIGRiZygiYXBwbGljYXRpb24gbnVtYmVyIGlzICU0eCIsCiAJICAgICgoKF9fdTE2KXBvcnQtPm51bWJlciAtIChfX3UxNikocG9ydC0+c2VyaWFsLT5taW5vcikpKzEpPDw4KTsgKi8KQEAgLTM2NCw5ICszNzYsMTEgQEAKIAkJfQogCX0KIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgTUNTX1JEUkVRLAotCQkJICAgICAgTUNTX1JEX1JUWVBFLCBXdmFsLCByZWcsIHZhbCwgVkVORE9SX1JFQURfTEVOR1RILAorCQkJICAgICAgTUNTX1JEX1JUWVBFLCBXdmFsLCByZWcsIGJ1ZiwgVkVORE9SX1JFQURfTEVOR1RILAogCQkJICAgICAgTU9TX1dEUl9USU1FT1VUKTsKLQkqdmFsID0gKCp2YWwpICYgMHgwMGZmOworCSp2YWwgPSBidWZbMF07CisKKwlrZnJlZShidWYpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc1MCw3ICs3NjQsNiBAQAogCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKIAkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmbW9zNzg0MF9wb3J0LT5wb3J0LT5wb3J0KTsKIAkJaWYgKHR0eSkgewotCQkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCQlkYmcoIiAlcyAiLCBkYXRhKTsKIAkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW90b19tb2RlbS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vdG9fbW9kZW0uYwppbmRleCA5OWJkMDBmNS4uY2YxNzE4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL21vdG9fbW9kZW0uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbW90b19tb2RlbS5jCkBAIC0yMSw3ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHgwNWM2LCAweDMxOTcpIH0sCS8qIHVua25vd24gTW90b3JvbGEgcGhvbmUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwYzQ0LCAweDAwMjIpIH0sCS8qIHVua25vd24gTW9yb3JvbGEgcGhvbmUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgyMmI4LCAweDJhNjQpIH0sCS8qIE1vdG9yb2xhIEtSWlIgSzFtICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbmF2bWFuLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbmF2bWFuLmMKaW5kZXggNWNlYWE0YzYuLjA0YTZjYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9uYXZtYW4uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvbmF2bWFuLmMKQEAgLTIyLDcgKzIyLDcgQEAKIAogc3RhdGljIGludCBkZWJ1ZzsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4MGE5OSwgMHgwMDAxKSB9LAkvKiBUYWxvbiBUZWNobm9sb2d5IGRldmljZSAqLwogCXsgfSwKIH07CkBAIC02Niw3ICs2Niw2IEBACiAKIAl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCmluZGV4IDA2MjI2NTAuLjg5YzcyNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL29tbmluZXQuYwpAQCAtNzUsNyArNzUsNyBAQAogc3RhdGljIHZvaWQgb21uaW5ldF9yZWxlYXNlKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwogc3RhdGljIGludCBvbW5pbmV0X2F0dGFjaChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoWllYRUxfVkVORE9SX0lELCBaWVhFTF9PTU5JTkVUX0lEKSB9LAogCXsgVVNCX0RFVklDRShaWVhFTF9WRU5ET1JfSUQsIEJUX0lHTklUSU9OUFJPX0lEKSB9LAogCXsgfQkJCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCkBAIC0yMTgsOCArMjE4LDggQEAKIAogCWlmIChkZWJ1ZyAmJiBoZWFkZXItPm9oX3h4eCAhPSAweDMwKSB7CiAJCWlmICh1cmItPmFjdHVhbF9sZW5ndGgpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fCi0JCQkJCSI6IG9tbmluZXRfcmVhZCAlZDogIiwgaGVhZGVyLT5vaF9sZW4pOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBvbW5pbmV0X3JlYWQgJWQ6ICIsCisJCQkgICAgICAgX19GSUxFX18sIGhlYWRlci0+b2hfbGVuKTsKIAkJCWZvciAoaSA9IDA7IGkgPCAoaGVhZGVyLT5vaF9sZW4gKwogCQkJCQkJT01OSU5FVF9IRUFERVJMRU4pOyBpKyspCiAJCQkJcHJpbnRrKCIlLjJ4ICIsIGRhdGFbaV0pOwpAQCAtMzMyLDcgKzMzMiw3IEBACiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAJKnBvcnQgICA9ICB1cmItPmNvbnRleHQ7CiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCi0JZGJnKCIlcyAtIHBvcnQgJTB4XG4iLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKKwlkYmcoIiVzIC0gcG9ydCAlMHgiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCXBvcnQtPndyaXRlX3VyYl9idXN5ID0gMDsKIAlpZiAoc3RhdHVzKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL29wdGljb24uYwppbmRleCA0Y2RiOTc1Li43MDE0NTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aWNvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpY29uLmMKQEAgLTIyLDcgKzIyLDcgQEAKIAogc3RhdGljIGludCBkZWJ1ZzsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHgwNjVhLCAweDAwMDkpIH0sCiAJeyB9LAogfTsKQEAgLTU1LDcgKzU1LDYgQEAKIAlpbnQgc3RhdHVzID0gdXJiLT5zdGF0dXM7CiAJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKIAlpbnQgcmVzdWx0OwotCWludCBhdmFpbGFibGVfcm9vbSA9IDA7CiAJaW50IGRhdGFfbGVuZ3RoOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKQEAgLTk2LDEzICs5NSw5IEBACiAJCQkvKiByZWFsIGRhdGEsIHNlbmQgaXQgdG8gdGhlIHR0eSBsYXllciAqLwogCQkJdHR5ID0gdHR5X3BvcnRfdHR5X2dldCgmcG9ydC0+cG9ydCk7CiAJCQlpZiAodHR5KSB7Ci0JCQkJYXZhaWxhYmxlX3Jvb20gPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksCi0JCQkJCQkJCWRhdGFfbGVuZ3RoKTsKLQkJCQlpZiAoYXZhaWxhYmxlX3Jvb20pIHsKLQkJCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsCi0JCQkJCQkJICAgICAgIGF2YWlsYWJsZV9yb29tKTsKLQkJCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKLQkJCQl9CisJCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsCisJCQkJCQkJICAgICAgIGRhdGFfbGVuZ3RoKTsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCQkJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQkJfQogCQl9IGVsc2UgewpAQCAtMTIwLDcgKzExNSw3IEBACiAJCX0KIAl9IGVsc2UgewogCQlkZXZfZGJnKCZwcml2LT51ZGV2LT5kZXYsCi0JCQkiSW1wcm9wZXIgYW1tb3VudCBvZiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZSwgIgorCQkJIkltcHJvcGVyIGFtb3VudCBvZiBkYXRhIHJlY2VpdmVkIGZyb20gdGhlIGRldmljZSwgIgogCQkJIiVkIGJ5dGVzIiwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAl9CiAKQEAgLTIxNyw3ICsyMTIsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKHByaXYtPm91dHN0YW5kaW5nX3VyYnMgPiBVUkJfVVBQRVJfTElNSVQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlkYmcoIiVzIC0gd3JpdGUgbGltaXQgaGl0XG4iLCBfX2Z1bmNfXyk7CisJCWRiZygiJXMgLSB3cml0ZSBsaW1pdCBoaXQiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KIAlwcml2LT5vdXRzdGFuZGluZ191cmJzKys7CkBAIC0yODgsNyArMjgzLDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWlmIChwcml2LT5vdXRzdGFuZGluZ191cmJzID4gVVJCX1VQUEVSX0xJTUlUICogMiAvIDMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlkYmcoIiVzIC0gd3JpdGUgbGltaXQgaGl0XG4iLCBfX2Z1bmNfXyk7CisJCWRiZygiJXMgLSB3cml0ZSBsaW1pdCBoaXQiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3B0aW9uLmMKaW5kZXggNmU5NGE2Ny4uODQ3YjgwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL29wdGlvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vcHRpb24uYwpAQCAtMzM2LDE1ICszMzYsNDIgQEAKICNkZWZpbmUgQUlSUExVU19WRU5ET1JfSUQJCQkweDEwMTEKICNkZWZpbmUgQUlSUExVU19QUk9EVUNUX01DRDY1MAkJCTB4MzE5OAogCisvKiBMb25nY2hlZXIvTG9uZ3N1bmcgdmVuZG9yIElEOyBtYWtlcyB3aGl0ZWxhYmVsIGRldmljZXMgdGhhdAorICogbWFueSBvdGhlciB2ZW5kb3JzIGxpa2UgNEcgU3lzdGVtcywgQWxjYXRlbCwgQ2hpbmFCaXJkLAorICogTW9iaWRhdGEsIGV0YyBzZWxsIHVuZGVyIHRoZWlyIG93biBicmFuZCBuYW1lcy4KKyAqLworI2RlZmluZSBMT05HQ0hFRVJfVkVORE9SX0lECQkJMHgxYzllCisKIC8qIDRHIFN5c3RlbXMgcHJvZHVjdHMgKi8KLSNkZWZpbmUgRk9VUl9HX1NZU1RFTVNfVkVORE9SX0lECQkweDFjOWUKKy8qIFRoaXMgaXMgdGhlIDRHIFhTIFN0aWNrIFcxNCBhLmsuYS4gTW9iaWxjb20gRGViaXRlbCBTdXJmLVN0aWNrICoKKyAqIEl0IHNlZW1zIHRvIGNvbnRhaW4gYSBRdWFsY29tbSBRU0M2MjQwLzYyOTAgY2hpcHNldCAgICAgICAgICAgICovCiAjZGVmaW5lIEZPVVJfR19TWVNURU1TX1BST0RVQ1RfVzE0CQkweDk2MDMKIAogLyogSGFpZXIgcHJvZHVjdHMgKi8KICNkZWZpbmUgSEFJRVJfVkVORE9SX0lECQkJCTB4MjAxZQogI2RlZmluZSBIQUlFUl9QUk9EVUNUX0NFMTAwCQkJMHgyMDA5CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBvcHRpb25faWRzW10gPSB7CisvKiBzb21lIGRldmljZXMgaW50ZXJmYWNlcyBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgZHVlIHRvIGEgbnVtYmVyIG9mIHJlYXNvbnMgKi8KK2VudW0gb3B0aW9uX2JsYWNrbGlzdF9yZWFzb24geworCQlPUFRJT05fQkxBQ0tMSVNUX05PTkUgPSAwLAorCQlPUFRJT05fQkxBQ0tMSVNUX1NFTkRTRVRVUCA9IDEsCisJCU9QVElPTl9CTEFDS0xJU1RfUkVTRVJWRURfSUYgPSAyCit9OworCitzdHJ1Y3Qgb3B0aW9uX2JsYWNrbGlzdF9pbmZvIHsKKwljb25zdCB1MzIgaW5mb2xlbjsJLyogbnVtYmVyIG9mIGludGVyZmFjZSBudW1iZXJzIG9uIGJsYWNrbGlzdCAqLworCWNvbnN0IHU4ICAqaWZhY2VpbmZvOwkvKiBwb2ludGVyIHRvIHRoZSBhcnJheSBob2xkaW5nIHRoZSBudW1iZXJzICovCisJZW51bSBvcHRpb25fYmxhY2tsaXN0X3JlYXNvbiByZWFzb247Cit9OworCitzdGF0aWMgY29uc3QgdTggZm91cl9nX3cxNF9ub19zZW5kc2V0dXBbXSA9IHsgMCwgMSB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb25fYmxhY2tsaXN0X2luZm8gZm91cl9nX3cxNF9ibGFja2xpc3QgPSB7CisJLmluZm9sZW4gPSBBUlJBWV9TSVpFKGZvdXJfZ193MTRfbm9fc2VuZHNldHVwKSwKKwkuaWZhY2VpbmZvID0gZm91cl9nX3cxNF9ub19zZW5kc2V0dXAsCisJLnJlYXNvbiA9IE9QVElPTl9CTEFDS0xJU1RfU0VORFNFVFVQCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgb3B0aW9uX2lkc1tdID0gewogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9DT0xUKSB9LAogCXsgVVNCX0RFVklDRShPUFRJT05fVkVORE9SX0lELCBPUFRJT05fUFJPRFVDVF9SSUNPTEEpIH0sCiAJeyBVU0JfREVWSUNFKE9QVElPTl9WRU5ET1JfSUQsIE9QVElPTl9QUk9EVUNUX1JJQ09MQV9MSUdIVCkgfSwKQEAgLTY0NCw3ICs2NzEsOSBAQAogCXsgVVNCX0RFVklDRShBTENBVEVMX1ZFTkRPUl9JRCwgQUxDQVRFTF9QUk9EVUNUX1gwNjBTKSB9LAogCXsgVVNCX0RFVklDRShBSVJQTFVTX1ZFTkRPUl9JRCwgQUlSUExVU19QUk9EVUNUX01DRDY1MCkgfSwKIAl7IFVTQl9ERVZJQ0UoVExBWVRFQ0hfVkVORE9SX0lELCBUTEFZVEVDSF9QUk9EVUNUX1RFVTgwMCkgfSwKLQl7IFVTQl9ERVZJQ0UoRk9VUl9HX1NZU1RFTVNfVkVORE9SX0lELCBGT1VSX0dfU1lTVEVNU19QUk9EVUNUX1cxNCkgfSwKKwl7IFVTQl9ERVZJQ0UoTE9OR0NIRUVSX1ZFTkRPUl9JRCwgRk9VUl9HX1NZU1RFTVNfUFJPRFVDVF9XMTQpLAorICAJICAuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJmZvdXJfZ193MTRfYmxhY2tsaXN0CisgIAl9LAogCXsgVVNCX0RFVklDRShIQUlFUl9WRU5ET1JfSUQsIEhBSUVSX1BST0RVQ1RfQ0UxMDApIH0sCiAJeyB9IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwpAQCAtNzA5LDYgKzczOCw3IEBACiAJc3BpbmxvY2tfdCBzdXNwX2xvY2s7CiAJdW5zaWduZWQgaW50IHN1c3BlbmRlZDoxOwogCWludCBpbl9mbGlnaHQ7CisJc3RydWN0IG9wdGlvbl9ibGFja2xpc3RfaW5mbyAqYmxhY2tsaXN0X2luZm87CiB9OwogCiBzdHJ1Y3Qgb3B0aW9uX3BvcnRfcHJpdmF0ZSB7CkBAIC03NzgsOSArODA4LDI3IEBACiAJaWYgKCFkYXRhKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzcGluX2xvY2tfaW5pdCgmZGF0YS0+c3VzcF9sb2NrKTsKKwlkYXRhLT5ibGFja2xpc3RfaW5mbyA9IChzdHJ1Y3Qgb3B0aW9uX2JsYWNrbGlzdF9pbmZvKikgaWQtPmRyaXZlcl9pbmZvOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgZW51bSBvcHRpb25fYmxhY2tsaXN0X3JlYXNvbiBpc19ibGFja2xpc3RlZChjb25zdCB1OCBpZm51bSwKKwkJCQljb25zdCBzdHJ1Y3Qgb3B0aW9uX2JsYWNrbGlzdF9pbmZvICpibGFja2xpc3QpCit7CisJY29uc3QgdTggICppbmZvOworCWludCBpOworCisJaWYgKGJsYWNrbGlzdCkgeworCQlpbmZvID0gYmxhY2tsaXN0LT5pZmFjZWluZm87CisKKwkJZm9yIChpID0gMDsgaSA8IGJsYWNrbGlzdC0+aW5mb2xlbjsgaSsrKSB7CisJCQlpZiAoaW5mb1tpXSA9PSBpZm51bSkKKwkJCQlyZXR1cm4gYmxhY2tsaXN0LT5yZWFzb247CisJCX0KKwl9CisJcmV0dXJuIE9QVElPTl9CTEFDS0xJU1RfTk9ORTsKK30KKwogc3RhdGljIHZvaWQgb3B0aW9uX3NldF90ZXJtaW9zKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksCiAJCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBrdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CkBAIC05MjEsNyArOTY5LDYgQEAKIAl9IGVsc2UgewogCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQkJdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CiAJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCQl9IGVsc2UgCkBAIC05MjksOSArOTc2LDkgQEAKIAkJdHR5X2tyZWZfcHV0KHR0eSk7CiAKIAkJLyogUmVzdWJtaXQgdXJiIHNvIHdlIGNvbnRpbnVlIHJlY2VpdmluZyAqLwotCQlpZiAocG9ydC0+cG9ydC5jb3VudCAmJiBzdGF0dXMgIT0gLUVTSFVURE9XTikgeworCQlpZiAoc3RhdHVzICE9IC1FU0hVVERPV04pIHsKIAkJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoZXJyKQorCQkJaWYgKGVyciAmJiBlcnIgIT0gLUVQRVJNKQogCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4gIgogCQkJCQkiKCVkKSIsIF9fZnVuY19fLCBlcnIpOwogCQkJZWxzZQpAQCAtOTg1LDcgKzEwMzIsNyBAQAogCQkJCShzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICopdXJiLT50cmFuc2Zlcl9idWZmZXI7CiAKIAkJaWYgKCFyZXFfcGt0KSB7Ci0JCQlkYmcoIiVzOiBOVUxMIHJlcV9wa3RcbiIsIF9fZnVuY19fKTsKKwkJCWRiZygiJXM6IE5VTEwgcmVxX3BrdCIsIF9fZnVuY19fKTsKIAkJCXJldHVybjsKIAkJfQogCQlpZiAoKHJlcV9wa3QtPmJSZXF1ZXN0VHlwZSA9PSAweEExKSAmJgpAQCAtMTIxMSwxMSArMTI1OCwxOSBAQAogc3RhdGljIGludCBvcHRpb25fc2VuZF9zZXR1cChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisJc3RydWN0IG9wdGlvbl9pbnRmX3ByaXZhdGUgKmludGZkYXRhID0KKwkJKHN0cnVjdCBvcHRpb25faW50Zl9wcml2YXRlICopIHNlcmlhbC0+cHJpdmF0ZTsKIAlzdHJ1Y3Qgb3B0aW9uX3BvcnRfcHJpdmF0ZSAqcG9ydGRhdGE7CiAJaW50IGlmTnVtID0gc2VyaWFsLT5pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXI7CiAJaW50IHZhbCA9IDA7CiAJZGJnKCIlcyIsIF9fZnVuY19fKTsKIAorCWlmIChpc19ibGFja2xpc3RlZChpZk51bSwgaW50ZmRhdGEtPmJsYWNrbGlzdF9pbmZvKSA9PQorCQkJCQkJT1BUSU9OX0JMQUNLTElTVF9TRU5EU0VUVVApIHsKKwkJZGJnKCJObyBzZW5kX3NldHVwIG9uIGJsYWNrbGlzdGVkIGludGVyZmFjZSAjJWRcbiIsIGlmTnVtKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCiAJcG9ydGRhdGEgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKIAlpZiAocG9ydGRhdGEtPmR0cl9zdGF0ZSkKQEAgLTE0MDEsNyArMTQ1Niw3IEBACiAJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKIAkJcG9ydCA9IHNlcmlhbC0+cG9ydFtpXTsKIAkJaWYgKCFwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKSB7Ci0JCQlkYmcoIiVzOiBObyBpbnRlcnJ1cHQgVVJCIGZvciBwb3J0ICVkXG4iLCBfX2Z1bmNfXywgaSk7CisJCQlkYmcoIiVzOiBObyBpbnRlcnJ1cHQgVVJCIGZvciBwb3J0ICVkIiwgX19mdW5jX18sIGkpOwogCQkJY29udGludWU7CiAJCX0KIAkJZXJyID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX05PSU8pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vdGk2ODU4LmMKaW5kZXggYzY0NGUyNi4uZGVlYWNkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL290aTY4NTguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb3RpNjg1OC5jCkBAIC01OCw3ICs1OCw3IEBACiAjZGVmaW5lIE9USTY4NThfQVVUSE9SICJUb21hc3ogTWljaGFsIEx1a2FzemV3c2tpIDxGSVhNRUBGSVhNRT4iCiAjZGVmaW5lIE9USTY4NThfVkVSU0lPTiAiMC4xIgogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoT1RJNjg1OF9WRU5ET1JfSUQsIE9USTY4NThfUFJPRFVDVF9JRCkgfSwKIAl7IH0KIH07CkBAIC0zMDIsNyArMzAyLDcgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gcHJpdi0+cG9ydDsKIAlpbnQgY291bnQgPSAwLCByZXN1bHQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBjaGFyIGFsbG93OworCXU4ICphbGxvdzsKIAogCWRiZygiJXMocG9ydCA9ICVkKSIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCkBAIC0zMjEsMTMgKzMyMSwyMCBAQAogCQljb3VudCA9IHBvcnQtPmJ1bGtfb3V0X3NpemU7CiAKIAlpZiAoY291bnQgIT0gMCkgeworCQlhbGxvdyA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYWxsb3cpIHsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzKCk6IGttYWxsb2MgZmFpbGVkXG4iLAorCQkJCQlfX2Z1bmNfXyk7CisJCQlyZXR1cm47CisJCX0KIAkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHBvcnQtPnNlcmlhbC0+ZGV2LAogCQkJCXVzYl9yY3ZjdHJscGlwZShwb3J0LT5zZXJpYWwtPmRldiwgMCksCiAJCQkJT1RJNjg1OF9SRVFfVF9DSEVDS19UWEJVRkYsCiAJCQkJT1RJNjg1OF9SRVFfQ0hFQ0tfVFhCVUZGLAotCQkJCWNvdW50LCAwLCAmYWxsb3csIDEsIDEwMCk7Ci0JCWlmIChyZXN1bHQgIT0gMSB8fCBhbGxvdyAhPSAwKQorCQkJCWNvdW50LCAwLCBhbGxvdywgMSwgMTAwKTsKKwkJaWYgKHJlc3VsdCAhPSAxIHx8ICphbGxvdyAhPSAwKQogCQkJY291bnQgPSAwOworCQlrZnJlZShhbGxvdyk7CiAJfQogCiAJaWYgKGNvdW50ID09IDApIHsKQEAgLTU3OCw5ICs1ODUsNiBAQAogCXVzYl9jbGVhcl9oYWx0KHNlcmlhbC0+ZGV2LCBwb3J0LT53cml0ZV91cmItPnBpcGUpOwogCXVzYl9jbGVhcl9oYWx0KHNlcmlhbC0+ZGV2LCBwb3J0LT5yZWFkX3VyYi0+cGlwZSk7CiAKLQlpZiAocG9ydC0+cG9ydC5jb3VudCAhPSAxKQotCQlyZXR1cm4gMDsKLQogCWJ1ZiA9IGttYWxsb2MoT1RJNjg1OF9DVFJMX1BLVF9TSVpFLCBHRlBfS0VSTkVMKTsKIAlpZiAoYnVmID09IE5VTEwpIHsKIAkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMoKTogb3V0IG9mIG1lbW9yeSFcbiIsIF9fZnVuY19fKTsKQEAgLTkyNywxMCArOTMxLDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKIAlpZiAoc3RhdHVzICE9IDApIHsKLQkJaWYgKCFwb3J0LT5wb3J0LmNvdW50KSB7Ci0JCQlkYmcoIiVzKCk6IHBvcnQgaXMgY2xvc2VkLCBleGl0aW5nIiwgX19mdW5jX18pOwotCQkJcmV0dXJuOwotCQl9CiAJCS8qCiAJCWlmIChzdGF0dXMgPT0gLUVQUk9UTykgewogCQkJKiBQTDIzMDMgbXlzdGVyaW91c2x5IGZhaWxzIHdpdGggLUVQUk9UTyByZXNjaGVkdWxlCkBAIC05NTQsMTQgKzk1NCwxMiBAQAogCX0KIAl0dHlfa3JlZl9wdXQodHR5KTsKIAotCS8qIHNjaGVkdWxlIHRoZSBpbnRlcnJ1cHQgdXJiIGlmIHdlIGFyZSBzdGlsbCBvcGVuICovCi0JaWYgKHBvcnQtPnBvcnQuY291bnQgIT0gMCkgewotCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChyZXN1bHQgIT0gMCkgewotCQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMoKTogdXNiX3N1Ym1pdF91cmIoKSBmYWlsZWQsIgotCQkJCQkiIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKLQkJfQorCS8qIHNjaGVkdWxlIHRoZSBpbnRlcnJ1cHQgdXJiICovCisJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCAhPSAwICYmIHJlc3VsdCAhPSAtRVBFUk0pIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMoKTogdXNiX3N1Ym1pdF91cmIoKSBmYWlsZWQsIgorCQkJCSIgZXJyb3IgJWRcbiIsIF9fZnVuY19fLCByZXN1bHQpOwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCmluZGV4IDllYzFhNDkuLjczZDVmMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAljaGFyCQkqYnVmX3B1dDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShQTDIzMDNfVkVORE9SX0lELCBQTDIzMDNfUFJPRFVDVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoUEwyMzAzX1ZFTkRPUl9JRCwgUEwyMzAzX1BST0RVQ1RfSURfUlNBUTIpIH0sCiAJeyBVU0JfREVWSUNFKFBMMjMwM19WRU5ET1JfSUQsIFBMMjMwM19QUk9EVUNUX0lEX0RDVTExKSB9LApAQCAtNDUxLDcgKzQ1MSw2IEBACiAJCQkgICAgICBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcik7CiAKIAlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBjb3VudDsKLQlwb3J0LT53cml0ZV91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CiAJaWYgKHJlc3VsdCkgewogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHdyaXRlIHVyYiwiCkBAIC03NjksNyArNzY4LDYgQEAKIAkJcGwyMzAzX3NldF90ZXJtaW9zKHR0eSwgcG9ydCwgJnRtcF90ZXJtaW9zKTsKIAogCWRiZygiJXMgLSBzdWJtaXR0aW5nIHJlYWQgdXJiIiwgX19mdW5jX18pOwotCXBvcnQtPnJlYWRfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlc3VsdCkgewogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCIKQEAgLTc3OSw3ICs3NzcsNiBAQAogCX0KIAogCWRiZygiJXMgLSBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIiLCBfX2Z1bmNfXyk7Ci0JcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CiAJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlc3VsdCkgewogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIsIgpAQCAtODk1LDEwICs4OTIsMjMgQEAKIHN0YXRpYyBpbnQgcGwyMzAzX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CisJc3RydWN0IHNlcmlhbF9zdHJ1Y3Qgc2VyOwogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCWRiZygiJXMgKCVkKSBjbWQgPSAweCUwNHgiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyLCBjbWQpOwogCiAJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRJT0NHU0VSSUFMOgorCQltZW1zZXQoJnNlciwgMCwgc2l6ZW9mIHNlcik7CisJCXNlci50eXBlID0gUE9SVF8xNjY1NDsKKwkJc2VyLmxpbmUgPSBwb3J0LT5zZXJpYWwtPm1pbm9yOworCQlzZXIucG9ydCA9IHBvcnQtPm51bWJlcjsKKwkJc2VyLmJhdWRfYmFzZSA9IDQ2MDgwMDsKKworCQlpZiAoY29weV90b191c2VyKCh2b2lkIF9fdXNlciAqKWFyZywgJnNlciwgc2l6ZW9mIHNlcikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKworCQlyZXR1cm4gMDsKKwogCWNhc2UgVElPQ01JV0FJVDoKIAkJZGJnKCIlcyAoJWQpIFRJT0NNSVdBSVQiLCBfX2Z1bmNfXywgIHBvcnQtPm51bWJlcik7CiAJCXJldHVybiB3YWl0X21vZGVtX2luZm8ocG9ydCwgYXJnKTsKQEAgLTEwNDIsNyArMTA1Miw2IEBACiAJCXR0eV9mbGFnID0gVFRZX0ZSQU1FOwogCWRiZygiJXMgLSB0dHlfZmxhZyA9ICVkIiwgX19mdW5jX18sIHR0eV9mbGFnKTsKIAotCXR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgdXJiLT5hY3R1YWxfbGVuZ3RoICsgMSk7CiAJLyogb3ZlcnJ1biBpcyBzcGVjaWFsLCBub3QgYXNzb2NpYXRlZCB3aXRoIGEgY2hhciAqLwogCWlmIChsaW5lX3N0YXR1cyAmIFVBUlRfT1ZFUlJVTl9FUlJPUikKIAkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAwLCBUVFlfT1ZFUlJVTik7CkBAIC0xMDcyLDE2ICsxMDgxLDExIEBACiAKIAlpZiAoc3RhdHVzKSB7CiAJCWRiZygiJXMgLSB1cmIgc3RhdHVzID0gJWQiLCBfX2Z1bmNfXywgc3RhdHVzKTsKLQkJaWYgKCFwb3J0LT5wb3J0LmNvdW50KSB7Ci0JCQlkYmcoIiVzIC0gcG9ydCBpcyBjbG9zZWQsIGV4aXRpbmcuIiwgX19mdW5jX18pOwotCQkJcmV0dXJuOwotCQl9CiAJCWlmIChzdGF0dXMgPT0gLUVQUk9UTykgewogCQkJLyogUEwyMzAzIG15c3RlcmlvdXNseSBmYWlscyB3aXRoIC1FUFJPVE8gcmVzY2hlZHVsZQogCQkJICogdGhlIHJlYWQgKi8KIAkJCWRiZygiJXMgLSBjYXVnaHQgLUVQUk9UTywgcmVzdWJtaXR0aW5nIHRoZSB1cmIiLAogCQkJICAgIF9fZnVuY19fKTsKLQkJCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCQkJaWYgKHJlc3VsdCkKIAkJCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBmYWlsZWQiCkBAIC0xMTA4LDE1ICsxMTEyLDEwIEBACiAJfQogCXR0eV9rcmVmX3B1dCh0dHkpOwogCS8qIFNjaGVkdWxlIHRoZSBuZXh0IHJlYWQgX2lmXyB3ZSBhcmUgc3RpbGwgb3BlbiAqLwotCWlmIChwb3J0LT5wb3J0LmNvdW50KSB7Ci0JCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7Ci0JCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChyZXN1bHQpCi0JCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIgotCQkJCSIgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmVzdWx0KTsKLQl9Ci0KLQlyZXR1cm47CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0ICYmIHJlc3VsdCAhPSAtRVBFUk0pCisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmciCisJCQkiIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJlc3VsdCk7CiB9CiAKIHN0YXRpYyB2b2lkIHBsMjMwM193cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKQEAgLTExNDYsNyArMTE0NSw2IEBACiAJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fZnVuY19fLAogCQkgICAgc3RhdHVzKTsKIAkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMTsKLQkJcG9ydC0+d3JpdGVfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJlc3VsdCkKIAkJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgd3JpdGUiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcWNhdXguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9xY2F1eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiOTM2MjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcWNhdXguYwpAQCAtMCwwICsxLDk2IEBACisvKgorICogUXVhbGNvbW0gVVNCIEF1eGlsaWFyeSBTZXJpYWwgUG9ydCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAxMCBEYW4gV2lsbGlhbXMgPGRjYndAcmVkaGF0LmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIERldmljZXMgbGlzdGVkIGhlcmUgdXN1YWxseSBwcm92aWRlIGEgQ0RDIEFDTSBwb3J0IG9uIHdoaWNoIG5vcm1hbCBtb2RlbQorICogQVQgY29tbWFuZHMgYW5kIFBQUCBjYW4gYmUgdXNlZC4gIEJ1dCB3aGVuIHRoYXQgcG9ydCBpcyBpbi11c2UgYnkgUFBQIGl0CisgKiBjYW5ub3QgYmUgdXNlZCBzaW11bHRhbmVvdXNseSBmb3Igc3RhdHVzIG9yIHNpZ25hbCBzdHJlbmd0aC4gIEluc3RlYWQsIHRoZQorICogcG9ydHMgaGVyZSBjYW4gYmUgcXVlcmllZCBmb3IgdGhhdCBpbmZvcm1hdGlvbiB1c2luZyB0aGUgUXVhbGNvbW0gRE0KKyAqIHByb3RvY29sLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgorCisvKiBOT1RFOiBmb3Igbm93LCBvbmx5IHVzZSB0aGlzIGRyaXZlciBmb3IgZGV2aWNlcyB0aGF0IHByb3ZpZGUgYSBDREMtQUNNIHBvcnQKKyAqIGZvciBub3JtYWwgQVQgY29tbWFuZHMsIGJ1dCBhbHNvIHByb3ZpZGUgc2Vjb25kYXJ5IFVTQiBpbnRlcmZhY2VzIGZvciB0aGUKKyAqIFFDRE0tY2FwYWJsZSBwb3J0cy4gIERldmljZXMgdGhhdCBkbyBub3QgcHJvdmlkZSBhIENEQy1BQ00gcG9ydCBzaG91bGQKKyAqIHByb2JhYmx5IGJlIGRyaXZlbiBieSBvcHRpb24ua28uCisgKi8KKworLyogVVRTdGFyY29tL1BhbnRlY2gvQ3VyaXRlbCBkZXZpY2VzICovCisjZGVmaW5lIFVUU1RBUkNPTV9WRU5ET1JfSUQJCQkweDEwNmMKKyNkZWZpbmUgVVRTVEFSQ09NX1BST0RVQ1RfUEM1NzQwCQkweDM3MDEKKyNkZWZpbmUgVVRTVEFSQ09NX1BST0RVQ1RfUEM1NzUwCQkweDM3MDIgLyogYWthIFBhbnRlY2ggUFgtNTAwICovCisjZGVmaW5lIFVUU1RBUkNPTV9QUk9EVUNUX1VNMTUwCQkJMHgzNzExCisjZGVmaW5lIFVUU1RBUkNPTV9QUk9EVUNUX1VNMTc1X1YxCQkweDM3MTIKKyNkZWZpbmUgVVRTVEFSQ09NX1BST0RVQ1RfVU0xNzVfVjIJCTB4MzcxNAorI2RlZmluZSBVVFNUQVJDT01fUFJPRFVDVF9VTTE3NV9BTExURUwJCTB4MzcxNQorCisvKiBDTU9URUNIIGRldmljZXMgKi8KKyNkZWZpbmUgQ01PVEVDSF9WRU5ET1JfSUQJCQkweDE2ZDgKKyNkZWZpbmUgQ01PVEVDSF9QUk9EVUNUX0NEVTU1MAkJCTB4NTU1MworI2RlZmluZSBDTU9URUNIX1BST0RVQ1RfQ0RYNjUwCQkJMHg2NTEyCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oVVRTVEFSQ09NX1ZFTkRPUl9JRCwgVVRTVEFSQ09NX1BST0RVQ1RfUEM1NzQwLCAweGZmLCAweDAwLCAweDAwKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oVVRTVEFSQ09NX1ZFTkRPUl9JRCwgVVRTVEFSQ09NX1BST0RVQ1RfUEM1NzUwLCAweGZmLCAweDAwLCAweDAwKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oVVRTVEFSQ09NX1ZFTkRPUl9JRCwgVVRTVEFSQ09NX1BST0RVQ1RfVU0xNTAsIDB4ZmYsIDB4MDAsIDB4MDApIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhVVFNUQVJDT01fVkVORE9SX0lELCBVVFNUQVJDT01fUFJPRFVDVF9VTTE3NV9WMSwgMHhmZiwgMHgwMCwgMHgwMCkgfSwKKwl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKFVUU1RBUkNPTV9WRU5ET1JfSUQsIFVUU1RBUkNPTV9QUk9EVUNUX1VNMTc1X1YyLCAweGZmLCAweDAwLCAweDAwKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oVVRTVEFSQ09NX1ZFTkRPUl9JRCwgVVRTVEFSQ09NX1BST0RVQ1RfVU0xNzVfQUxMVEVMLCAweGZmLCAweDAwLCAweDAwKSB9LAorCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oQ01PVEVDSF9WRU5ET1JfSUQsIENNT1RFQ0hfUFJPRFVDVF9DRFU1NTAsIDB4ZmYsIDB4ZmYsIDB4MDApIH0sCisJeyBVU0JfREVWSUNFX0FORF9JTlRFUkZBQ0VfSU5GTyhDTU9URUNIX1ZFTkRPUl9JRCwgQ01PVEVDSF9QUk9EVUNUX0NEWDY1MCwgMHhmZiwgMHhmZiwgMHgwMCkgfSwKKwl7IH0sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGlkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHFjYXV4X2RyaXZlciA9IHsKKwkubmFtZSA9CQkicWNhdXgiLAorCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaWRfdGFibGUsCisJLm5vX2R5bmFtaWNfaWQgPSAJMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgcWNhdXhfZGV2aWNlID0geworCS5kcml2ZXIgPSB7CisJCS5vd25lciA9CVRISVNfTU9EVUxFLAorCQkubmFtZSA9CQkicWNhdXgiLAorCX0sCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5udW1fcG9ydHMgPQkJMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHFjYXV4X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmcWNhdXhfZGV2aWNlKTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmcWNhdXhfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnFjYXV4X2RldmljZSk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHFjYXV4X2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmcWNhdXhfZHJpdmVyKTsKKwl1c2Jfc2VyaWFsX2RlcmVnaXN0ZXIoJnFjYXV4X2RldmljZSk7Cit9CisKK21vZHVsZV9pbml0KHFjYXV4X2luaXQpOworbW9kdWxlX2V4aXQocWNhdXhfZXhpdCk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcWNzZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jCmluZGV4IDc1MjhiOGQuLjMxMGZmNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9xY3NlcmlhbC5jCkBAIC0yMSw3ICsyMSw3IEBACiAKIHN0YXRpYyBpbnQgZGVidWc7CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoMHgwNWM2LCAweDkyMTEpfSwJLyogQWNlciBHb2JpIFFETCBkZXZpY2UgKi8KIAl7VVNCX0RFVklDRSgweDA1YzYsIDB4OTIxMil9LAkvKiBBY2VyIEdvYmkgTW9kZW0gRGV2aWNlICovCiAJe1VTQl9ERVZJQ0UoMHgwM2YwLCAweDFmMWQpfSwJLyogSFAgdW4yNDAwIEdvYmkgTW9kZW0gRGV2aWNlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llbWVuc19tcGkuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVtZW5zX21waS5jCmluZGV4IDk1MWVhMGMuLmNiODE5NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVtZW5zX21waS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zaWVtZW5zX21waS5jCkBAIC0yMiw3ICsyMiw3IEBACiAjZGVmaW5lIERSSVZFUl9ERVNDICJEcml2ZXIgZm9yIFNpZW1lbnMgVVNCL01QSSBhZGFwdGVyIgogCiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJLyogVmVuZG9yIGFuZCBwcm9kdWN0IGlkIGZvciA2RVM3LTk3Mi0wQ0IyMC0wWEEwICovCiAJeyBVU0JfREVWSUNFKDB4OTA4LCAweDAwMDQpIH0sCiAJeyB9LApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCmluZGV4IDNlYjYxNDMuLjM0ZTZmODk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2llcnJhLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NpZXJyYS5jCkBAIC0yMjYsNyArMjI2LDcgQEAKIAkuaWZhY2VpbmZvID0gZGlyZWN0X2lwX25vbl9zZXJpYWxfaWZhY2VzLAogfTsKIAotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4MEYzRCwgMHgwMTEyKSB9LCAvKiBBaXJwcmltZS9TaWVycmEgUEMgNTIyMCAqLwogCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MUIxRCkgfSwJLyogSFAgZXYyMjAwIGEuay5hIE1DNTcyMCAqLwogCXsgVVNCX0RFVklDRSgweDAzRjAsIDB4MUUxRCkgfSwJLyogSFAgaHMyMzAwIGEuay5hIE1DODc3NSAqLwpAQCAtMzA0LDE2ICszMDQsNiBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzaWVycmFfZHJpdmVyID0gewotCS5uYW1lICAgICAgID0gInNpZXJyYSIsCi0JLnByb2JlICAgICAgPSB1c2Jfc2VyaWFsX3Byb2JlLAotCS5kaXNjb25uZWN0ID0gdXNiX3NlcmlhbF9kaXNjb25uZWN0LAotCS5zdXNwZW5kICAgID0gdXNiX3NlcmlhbF9zdXNwZW5kLAotCS5yZXN1bWUgICAgID0gdXNiX3NlcmlhbF9yZXN1bWUsCi0JLmlkX3RhYmxlICAgPSBpZF90YWJsZSwKLQkubm9fZHluYW1pY19pZCA9IAkxLAotCS5zdXBwb3J0c19hdXRvc3VzcGVuZCA9CTEsCi19OwogCiBzdHJ1Y3Qgc2llcnJhX3BvcnRfcHJpdmF0ZSB7CiAJc3BpbmxvY2tfdCBsb2NrOwkvKiBsb2NrIHRoZSBzdHJ1Y3R1cmUgKi8KQEAgLTQ3Nyw3ICs0NjcsNyBAQAogc3RhdGljIGludCBzaWVycmFfd3JpdGUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKIAkJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCiB7Ci0Jc3RydWN0IHNpZXJyYV9wb3J0X3ByaXZhdGUgKnBvcnRkYXRhID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCBzaWVycmFfcG9ydF9wcml2YXRlICpwb3J0ZGF0YTsKIAlzdHJ1Y3Qgc2llcnJhX2ludGZfcHJpdmF0ZSAqaW50ZmRhdGE7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjA0LDE0ICs1OTQsMTUgQEAKIAl9IGVsc2UgewogCQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CiAJCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKKwkJCWlmICh0dHkpIHsKKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwKKwkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwogCi0JCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Ci0KLQkJCXR0eV9rcmVmX3B1dCh0dHkpOwotCQkJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX2Z1bmNfXywKLQkJCQl1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCQkJCXR0eV9rcmVmX3B1dCh0dHkpOworCQkJCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwKKwkJCQkJX19mdW5jX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisJCQl9CiAJCX0gZWxzZSB7CiAJCQlkZXZfZGJnKCZwb3J0LT5kZXYsICIlczogZW1wdHkgcmVhZCB1cmIiCiAJCQkJIiByZWNlaXZlZFxuIiwgX19mdW5jX18pOwpAQCAtNjE5LDEwICs2MTAsMTAgQEAKIAl9CiAKIAkvKiBSZXN1Ym1pdCB1cmIgc28gd2UgY29udGludWUgcmVjZWl2aW5nICovCi0JaWYgKHBvcnQtPnBvcnQuY291bnQgJiYgc3RhdHVzICE9IC1FU0hVVERPV04gJiYgc3RhdHVzICE9IC1FUEVSTSkgeworCWlmIChzdGF0dXMgIT0gLUVTSFVURE9XTiAmJiBzdGF0dXMgIT0gLUVQRVJNKSB7CiAJCXVzYl9tYXJrX2xhc3RfYnVzeShwb3J0LT5zZXJpYWwtPmRldik7CiAJCWVyciA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChlcnIpCisJCWlmIChlcnIgJiYgZXJyICE9IC1FUEVSTSkKIAkJCWRldl9lcnIoJnBvcnQtPmRldiwgInJlc3VibWl0IHJlYWQgdXJiIGZhaWxlZC4iCiAJCQkJIiglZClcbiIsIGVycik7CiAJfQpAQCAtNjgxLDExICs2NzIsMTEgQEAKIAkJZGV2X2RiZygmcG9ydC0+ZGV2LCAiJXM6IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgc3RhdHVzKTsKIAogCS8qIFJlc3VibWl0IHVyYiBzbyB3ZSBjb250aW51ZSByZWNlaXZpbmcgSVJRIGRhdGEgKi8KLQlpZiAocG9ydC0+cG9ydC5jb3VudCAmJiBzdGF0dXMgIT0gLUVTSFVURE9XTiAmJiBzdGF0dXMgIT0gLUVOT0VOVCkgeworCWlmIChzdGF0dXMgIT0gLUVTSFVURE9XTiAmJiBzdGF0dXMgIT0gLUVOT0VOVCkgewogCQl1c2JfbWFya19sYXN0X2J1c3koc2VyaWFsLT5kZXYpOwogCQl1cmItPmRldiA9IHNlcmlhbC0+ZGV2OwogCQllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwotCQlpZiAoZXJyKQorCQlpZiAoZXJyICYmIGVyciAhPSAtRVBFUk0pCiAJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlczogcmVzdWJtaXQgaW50ciB1cmIgIgogCQkJCSJmYWlsZWQuICglZClcbiIsIF9fZnVuY19fLCBlcnIpOwogCX0KQEAgLTEwNjEsMTEgKzEwNTIsMzEgQEAKIAogCXJldHVybiBlYyA/IC1FSU8gOiAwOwogfQorCitzdGF0aWMgaW50IHNpZXJyYV9yZXNldF9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIiVzXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIHVzYl9zZXJpYWxfcmVzdW1lKGludGYpOworfQogI2Vsc2UKICNkZWZpbmUgc2llcnJhX3N1c3BlbmQgTlVMTAogI2RlZmluZSBzaWVycmFfcmVzdW1lIE5VTEwKKyNkZWZpbmUgc2llcnJhX3Jlc2V0X3Jlc3VtZSBOVUxMCiAjZW5kaWYKIAorc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNpZXJyYV9kcml2ZXIgPSB7CisJLm5hbWUgICAgICAgPSAic2llcnJhIiwKKwkucHJvYmUgICAgICA9IHVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLnN1c3BlbmQgICAgPSB1c2Jfc2VyaWFsX3N1c3BlbmQsCisJLnJlc3VtZSAgICAgPSB1c2Jfc2VyaWFsX3Jlc3VtZSwKKwkucmVzZXRfcmVzdW1lID0gc2llcnJhX3Jlc2V0X3Jlc3VtZSwKKwkuaWRfdGFibGUgICA9IGlkX3RhYmxlLAorCS5ub19keW5hbWljX2lkID0gCTEsCisJLnN1cHBvcnRzX2F1dG9zdXNwZW5kID0JMSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgc2llcnJhX2RldmljZSA9IHsKIAkuZHJpdmVyID0gewogCQkub3duZXIgPQlUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvc3BjcDh4NS5jCmluZGV4IDFlNTgyMjAuLjVkMzkxOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zcGNwOHg1LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3NwY3A4eDUuYwpAQCAtNDUsNyArNDUsNyBAQAogI2RlZmluZSBTUENQOHg1XzgzNV9WSUQJCTB4MDRmYwogI2RlZmluZSBTUENQOHg1XzgzNV9QSUQJCTB4MDIzMQogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoU1BDUDh4NV9QSElMSVBTX1ZJRCAsIFNQQ1A4eDVfUEhJTElQU19QSUQpfSwKIAl7IFVTQl9ERVZJQ0UoU1BDUDh4NV9JTlRFUk1BVElDX1ZJRCwgU1BDUDh4NV9JTlRFUk1BVElDX1BJRCl9LAogCXsgVVNCX0RFVklDRShTUENQOHg1XzgzNV9WSUQsIFNQQ1A4eDVfODM1X1BJRCl9LApAQCAtNjA5LDcgKzYwOSw3IEBACiAJaWYgKGkgPCAwKQogCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJTZXQgVUFSVCBmb3JtYXQgJSN4IGZhaWxlZCAoZXJyb3IgPSAlZClcbiIsCiAJCQl1YXJ0ZGF0YSwgaSk7Ci0JZGJnKCIweDIxOjB4NDA6MDowICAlZFxuIiwgaSk7CisJZGJnKCIweDIxOjB4NDA6MDowICAlZCIsIGkpOwogCiAJaWYgKGNmbGFnICYgQ1JUU0NUUykgewogCQkvKiBlbmFibGUgaGFyZHdhcmUgZmxvdyBjb250cm9sICovCkBAIC02NzcsNyArNjc3LDYgQEAKIAlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBpOwogCWludCByZXN1bHQgPSB1cmItPnN0YXR1czsKIAl1OCBzdGF0dXM7CiAJY2hhciB0dHlfZmxhZzsKQEAgLTY4Nyw4ICs2ODYsNiBAQAogCiAJLyogY2hlY2sgdGhlIHVyYiBzdGF0dXMgKi8KIAlpZiAocmVzdWx0KSB7Ci0JCWlmICghcG9ydC0+cG9ydC5jb3VudCkKLQkJCXJldHVybjsKIAkJaWYgKHJlc3VsdCA9PSAtRVBST1RPKSB7CiAJCQkvKiBzcGNwOHg1IG15c3RlcmlvdXNseSBmYWlscyB3aXRoIC1FUFJPVE8gKi8KIAkJCS8qIHJlc2NoZWR1bGUgdGhlIHJlYWQgKi8KQEAgLTcyNiwyNiArNzIzLDIwIEBACiAKIAl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCArIDEpOwogCQkvKiBvdmVycnVuIGlzIHNwZWNpYWwsIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBjaGFyICovCiAJCWlmIChzdGF0dXMgJiBVQVJUX09WRVJSVU5fRVJST1IpCiAJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9PVkVSUlVOKTsKLQkJZm9yIChpID0gMDsgaSA8IHVyYi0+YWN0dWFsX2xlbmd0aDsgKytpKQotCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCB0dHlfZmxhZyk7CisJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZml4ZWRfZmxhZyh0dHksIGRhdGEsCisJCQkJCQl1cmItPmFjdHVhbF9sZW5ndGgsIHR0eV9mbGFnKTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAl9CiAJdHR5X2tyZWZfcHV0KHR0eSk7CiAKLQkvKiBTY2hlZHVsZSB0aGUgbmV4dCByZWFkIF9pZl8gd2UgYXJlIHN0aWxsIG9wZW4gKi8KLQlpZiAocG9ydC0+cG9ydC5jb3VudCkgewotCQl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYih1cmIgLCBHRlBfQVRPTUlDKTsKLQkJaWYgKHJlc3VsdCkKLQkJCWRldl9kYmcoJnBvcnQtPmRldiwgImZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiICVkXG4iLAotCQkJCXJlc3VsdCk7Ci0JfQotCi0JcmV0dXJuOworCS8qIFNjaGVkdWxlIHRoZSBuZXh0IHJlYWQgKi8KKwl1cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiAsIEdGUF9BVE9NSUMpOworCWlmIChyZXN1bHQpCisJCWRldl9kYmcoJnBvcnQtPmRldiwgImZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiICVkXG4iLCByZXN1bHQpOwogfQogCiAvKiBnZXQgZGF0YSBmcm9tIHJpbmcgYnVmZmVyIGFuZCB0aGVuIHdyaXRlIHRvIHVzYiBidXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zeW1ib2xzZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zeW1ib2xzZXJpYWwuYwppbmRleCBiMjgyYzBmLi5lZTE5MGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvc3ltYm9sc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3N5bWJvbHNlcmlhbC5jCkBAIC0yMSw3ICsyMSw3IEBACiAKIHN0YXRpYyBpbnQgZGVidWc7CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4MDVlMCwgMHgwNjAwKSB9LAogCXsgfSwKIH07CkBAIC01MSw3ICs1MSw2IEBACiAJaW50IHN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CiAJaW50IHJlc3VsdDsKLQlpbnQgYXZhaWxhYmxlX3Jvb20gPSAwOwogCWludCBkYXRhX2xlbmd0aDsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CkBAIC04OSwxOCArODgsMTMgQEAKIAkJICovCiAJCXR0eSA9IHR0eV9wb3J0X3R0eV9nZXQoJnBvcnQtPnBvcnQpOwogCQlpZiAodHR5KSB7Ci0JCQlhdmFpbGFibGVfcm9vbSA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwKLQkJCQkJCQlkYXRhX2xlbmd0aCk7Ci0JCQlpZiAoYXZhaWxhYmxlX3Jvb20pIHsKLQkJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgJmRhdGFbMV0sCi0JCQkJCQkgICAgICAgYXZhaWxhYmxlX3Jvb20pOwotCQkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7Ci0JCQl9CisJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgJmRhdGFbMV0sIGRhdGFfbGVuZ3RoKTsKKwkJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJCQl0dHlfa3JlZl9wdXQodHR5KTsKIAkJfQogCX0gZWxzZSB7CiAJCWRldl9kYmcoJnByaXYtPnVkZXYtPmRldiwKLQkJCSJJbXByb3BlciBhbW1vdW50IG9mIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlLCAiCisJCQkiSW1wcm9wZXIgYW1vdW50IG9mIGRhdGEgcmVjZWl2ZWQgZnJvbSB0aGUgZGV2aWNlLCAiCiAJCQkiJWQgYnl0ZXMiLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC90aV91c2JfMzQxMF81MDUyLmMKaW5kZXggMWU5ZGM4OC4uMGFmZTVjNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3RpX3VzYl8zNDEwXzUwNTIuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdGlfdXNiXzM0MTBfNTA1Mi5jCkBAIC0xMjcxLDE0ICsxMjcxLDEzIEBACiAJaW50IGNudDsKIAogCWRvIHsKLQkJY250ID0gdHR5X2J1ZmZlcl9yZXF1ZXN0X3Jvb20odHR5LCBsZW5ndGgpOworCQljbnQgPSB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgbGVuZ3RoKTsKIAkJaWYgKGNudCA8IGxlbmd0aCkgewogCQkJZGV2X2VycihkZXYsICIlcyAtIGRyb3BwaW5nIGRhdGEsICVkIGJ5dGVzIGxvc3RcbiIsCiAJCQkJCQlfX2Z1bmNfXywgbGVuZ3RoIC0gY250KTsKIAkJCWlmIChjbnQgPT0gMCkKIAkJCQlicmVhazsKIAkJfQotCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgY250KTsKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAkJZGF0YSArPSBjbnQ7CiAJCWxlbmd0aCAtPSBjbnQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwppbmRleCAzM2M4NWY3Li4zODczNjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKQEAgLTM1OCwxMCArMzU4LDYgQEAKIAogCWRiZygiJXMgLSBwb3J0ICVkLCAlZCBieXRlKHMpIiwgX19mdW5jX18sIHBvcnQtPm51bWJlciwgY291bnQpOwogCi0JLyogY291bnQgaXMgbWFuYWdlZCB1bmRlciB0aGUgbXV0ZXggbG9jayBmb3IgdGhlIHR0eSBzbyBjYW5ub3QKLQkgICBkcm9wIHRvIHplcm8gdW50aWwgYWZ0ZXIgdGhlIGxhc3QgY2xvc2UgY29tcGxldGVzICovCi0JV0FSTl9PTighcG9ydC0+cG9ydC5jb3VudCk7Ci0KIAkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uICovCiAJcmV0dmFsID0gcG9ydC0+c2VyaWFsLT50eXBlLT53cml0ZSh0dHksIHBvcnQsIGJ1ZiwgY291bnQpOwogCkBAIC0zNzMsNyArMzY5LDYgQEAKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwotCVdBUk5fT04oIXBvcnQtPnBvcnQuY291bnQpOwogCS8qIHBhc3Mgb24gdG8gdGhlIGRyaXZlciBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoaXMgZnVuY3Rpb24gKi8KIAlyZXR1cm4gcG9ydC0+c2VyaWFsLT50eXBlLT53cml0ZV9yb29tKHR0eSk7CiB9CkBAIC0zODEsNyArMzc2LDcgQEAKIHN0YXRpYyBpbnQgc2VyaWFsX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwotCWRiZygiJXMgPSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAogCS8qIGlmIHRoZSBkZXZpY2Ugd2FzIHVucGx1Z2dlZCB0aGVuIGFueSByZW1haW5pbmcgY2hhcmFjdGVycwogCSAgIGZlbGwgb3V0IG9mIHRoZSBjb25uZWN0b3IgOykgKi8KQEAgLTM5Niw3ICszOTEsNiBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlXQVJOX09OKCFwb3J0LT5wb3J0LmNvdW50KTsKIAkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uICovCiAJaWYgKHBvcnQtPnNlcmlhbC0+dHlwZS0+dGhyb3R0bGUpCiAJCXBvcnQtPnNlcmlhbC0+dHlwZS0+dGhyb3R0bGUodHR5KTsKQEAgLTQwNyw3ICs0MDEsNiBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB0dHktPmRyaXZlcl9kYXRhOwogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19mdW5jX18sIHBvcnQtPm51bWJlcik7CiAKLQlXQVJOX09OKCFwb3J0LT5wb3J0LmNvdW50KTsKIAkvKiBwYXNzIG9uIHRvIHRoZSBkcml2ZXIgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uICovCiAJaWYgKHBvcnQtPnNlcmlhbC0+dHlwZS0+dW50aHJvdHRsZSkKIAkJcG9ydC0+c2VyaWFsLT50eXBlLT51bnRocm90dGxlKHR0eSk7CkBAIC00MjEsOCArNDE0LDYgQEAKIAogCWRiZygiJXMgLSBwb3J0ICVkLCBjbWQgMHglLjR4IiwgX19mdW5jX18sIHBvcnQtPm51bWJlciwgY21kKTsKIAotCVdBUk5fT04oIXBvcnQtPnBvcnQuY291bnQpOwotCiAJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbgogCSAgIGlmIGl0IGlzIGF2YWlsYWJsZSAqLwogCWlmIChwb3J0LT5zZXJpYWwtPnR5cGUtPmlvY3RsKSB7CkBAIC00MzcsNyArNDI4LDYgQEAKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gdHR5LT5kcml2ZXJfZGF0YTsKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JV0FSTl9PTighcG9ydC0+cG9ydC5jb3VudCk7CiAJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbgogCSAgIGlmIGl0IGlzIGF2YWlsYWJsZSAqLwogCWlmIChwb3J0LT5zZXJpYWwtPnR5cGUtPnNldF90ZXJtaW9zKQpAQCAtNDUyLDcgKzQ0Miw2IEBACiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JV0FSTl9PTighcG9ydC0+cG9ydC5jb3VudCk7CiAJLyogcGFzcyBvbiB0byB0aGUgZHJpdmVyIHNwZWNpZmljIHZlcnNpb24gb2YgdGhpcyBmdW5jdGlvbgogCSAgIGlmIGl0IGlzIGF2YWlsYWJsZSAqLwogCWlmIChwb3J0LT5zZXJpYWwtPnR5cGUtPmJyZWFrX2N0bCkKQEAgLTUxMyw3ICs1MDIsNiBAQAogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX2Z1bmNfXywgcG9ydC0+bnVtYmVyKTsKIAotCVdBUk5fT04oIXBvcnQtPnBvcnQuY291bnQpOwogCWlmIChwb3J0LT5zZXJpYWwtPnR5cGUtPnRpb2NtZ2V0KQogCQlyZXR1cm4gcG9ydC0+c2VyaWFsLT50eXBlLT50aW9jbWdldCh0dHksIGZpbGUpOwogCXJldHVybiAtRUlOVkFMOwpAQCAtNTI2LDcgKzUxNCw2IEBACiAKIAlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fZnVuY19fLCBwb3J0LT5udW1iZXIpOwogCi0JV0FSTl9PTighcG9ydC0+cG9ydC5jb3VudCk7CiAJaWYgKHBvcnQtPnNlcmlhbC0+dHlwZS0+dGlvY21zZXQpCiAJCXJldHVybiBwb3J0LT5zZXJpYWwtPnR5cGUtPnRpb2Ntc2V0KHR0eSwgZmlsZSwgc2V0LCBjbGVhcik7CiAJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX2RlYnVnLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiX2RlYnVnLmMKaW5kZXggN2I1YmZjNC4uMjUyY2MyZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3VzYl9kZWJ1Zy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC91c2JfZGVidWcuYwpAQCAtMjksNyArMjksNyBAQAogCTB4ZmYsCiB9OwogCi1zdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoMHgwNTI1LCAweDEyN2EpIH0sCiAJeyB9LAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC92aXNvci5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKaW5kZXggYWQxZjkyMy4uMDk0OTQyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpc29yLmMKQEAgLTM2OCw3ICszNjgsNyBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKHByaXYtPm91dHN0YW5kaW5nX3VyYnMgPiBVUkJfVVBQRVJfTElNSVQpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlkYmcoIiVzIC0gd3JpdGUgbGltaXQgaGl0XG4iLCBfX2Z1bmNfXyk7CisJCWRiZygiJXMgLSB3cml0ZSBsaW1pdCBoaXQiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KIAlwcml2LT5vdXRzdGFuZGluZ191cmJzKys7CkBAIC00NDYsNyArNDQ2LDcgQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWlmIChwcml2LT5vdXRzdGFuZGluZ191cmJzID4gVVJCX1VQUEVSX0xJTUlUICogMiAvIDMpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCQlkYmcoIiVzIC0gd3JpdGUgbGltaXQgaGl0XG4iLCBfX2Z1bmNfXyk7CisJCWRiZygiJXMgLSB3cml0ZSBsaW1pdCBoaXQiLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAwOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC01MDMsMTMgKzUwMyw5IEBACiAJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCkgewogCQl0dHkgPSB0dHlfcG9ydF90dHlfZ2V0KCZwb3J0LT5wb3J0KTsKIAkJaWYgKHR0eSkgewotCQkJYXZhaWxhYmxlX3Jvb20gPSB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksCi0JCQkJCQkJdXJiLT5hY3R1YWxfbGVuZ3RoKTsKLQkJCWlmIChhdmFpbGFibGVfcm9vbSkgewotCQkJCXR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LCBkYXRhLAotCQkJCQkJCWF2YWlsYWJsZV9yb29tKTsKLQkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwotCQkJfQorCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIGRhdGEsCisJCQkJCQl1cmItPmFjdHVhbF9sZW5ndGgpOworCQkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKIAkJCXR0eV9rcmVmX3B1dCh0dHkpOwogCQl9CiAJCXNwaW5fbG9jaygmcHJpdi0+bG9jayk7CkBAIC04MDcsMTAgKzgwMywxNCBAQAogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZzZXJpYWwtPmRldi0+ZGV2OwogCWludCByZXN1bHQ7Ci0JdTggZGF0YTsKKwl1OCAqZGF0YTsKIAogCWRiZygiJXMiLCBfX2Z1bmNfXyk7CiAKKwlkYXRhID0ga21hbGxvYygxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCiAJLyoKIAkgKiBOb3RlIHRoYXQgUEVHLTMwMCBzZXJpZXMgZGV2aWNlcyBleHBlY3QgdGhlIGZvbGxvd2luZyB0d28gY2FsbHMuCiAJICovCkBAIC04MTgsMzYgKzgxOCw0MiBAQAogCS8qIGdldCB0aGUgY29uZmlnIG51bWJlciAqLwogCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKIAkJCQkgIFVTQl9SRVFfR0VUX0NPTkZJR1VSQVRJT04sIFVTQl9ESVJfSU4sCi0JCQkJICAwLCAwLCAmZGF0YSwgMSwgMzAwMCk7CisJCQkJICAwLCAwLCBkYXRhLCAxLCAzMDAwKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlkZXZfZXJyKGRldiwgIiVzOiBnZXQgY29uZmlnIG51bWJlciBmYWlsZWQ6ICVkXG4iLAogCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwotCQlyZXR1cm4gcmVzdWx0OworCQlnb3RvIG91dDsKIAl9CiAJaWYgKHJlc3VsdCAhPSAxKSB7CiAJCWRldl9lcnIoZGV2LCAiJXM6IGdldCBjb25maWcgbnVtYmVyIGJhZCByZXR1cm4gbGVuZ3RoOiAlZFxuIiwKIAkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKLQkJcmV0dXJuIC1FSU87CisJCXJlc3VsdCA9IC1FSU87CisJCWdvdG8gb3V0OwogCX0KIAogCS8qIGdldCB0aGUgaW50ZXJmYWNlIG51bWJlciAqLwogCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKIAkJCQkgIFVTQl9SRVFfR0VUX0lOVEVSRkFDRSwKIAkJCQkgIFVTQl9ESVJfSU4gfCBVU0JfUkVDSVBfSU5URVJGQUNFLAotCQkJCSAgMCwgMCwgJmRhdGEsIDEsIDMwMDApOworCQkJCSAgMCwgMCwgZGF0YSwgMSwgMzAwMCk7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJZGV2X2VycihkZXYsICIlczogZ2V0IGludGVyZmFjZSBudW1iZXIgZmFpbGVkOiAlZFxuIiwKIAkJCQkJCQlfX2Z1bmNfXywgcmVzdWx0KTsKLQkJcmV0dXJuIHJlc3VsdDsKKwkJZ290byBvdXQ7CiAJfQogCWlmIChyZXN1bHQgIT0gMSkgewogCQlkZXZfZXJyKGRldiwKIAkJCSIlczogZ2V0IGludGVyZmFjZSBudW1iZXIgYmFkIHJldHVybiBsZW5ndGg6ICVkXG4iLAogCQkJCQkJCV9fZnVuY19fLCByZXN1bHQpOwotCQlyZXR1cm4gLUVJTzsKKwkJcmVzdWx0ID0gLUVJTzsKKwkJZ290byBvdXQ7CiAJfQogCi0JcmV0dXJuIGdlbmVyaWNfc3RhcnR1cChzZXJpYWwpOworCXJlc3VsdCA9IGdlbmVyaWNfc3RhcnR1cChzZXJpYWwpOworb3V0OgorCWtmcmVlKGRhdGEpOworCisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGludCB0cmVvX2F0dGFjaChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3Zpdm9wYXktc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdml2b3BheS1zZXJpYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzE5ZDAwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3Zpdm9wYXktc2VyaWFsLmMKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMS0yMDA1IEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgT3V0cG9zdCBFbWJlZGRlZCwgTExDCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivc2VyaWFsLmg+CisKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuMCIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlZpVk9wYXkgVVNCIFNlcmlhbCBEcml2ZXIiCisKKyNkZWZpbmUgVklWT1BBWV9WRU5ET1JfSUQgMHgxZDVmCisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlIFtdID0geworCS8qIFZpVk9wYXkgODgwMCAqLworCXsgVVNCX0RFVklDRShWSVZPUEFZX1ZFTkRPUl9JRCwgMHgxMDA0KSB9LAorCXsgfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciB2aXZvcGF5X3NlcmlhbF9kcml2ZXIgPSB7CisJLm5hbWUgPQkJCSJ2aXZvcGF5LXNlcmlhbCIsCisJLnByb2JlID0JCXVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQkJdXNiX3NlcmlhbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkubm9fZHluYW1pY19pZCA9CTEsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIHZpdm9wYXlfc2VyaWFsX2RldmljZSA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPQlUSElTX01PRFVMRSwKKwkJLm5hbWUgPQkJInZpdm9wYXktc2VyaWFsIiwKKwl9LAorCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKKwkudXNiX2RyaXZlciA9CQkmdml2b3BheV9zZXJpYWxfZHJpdmVyLAorCS5udW1fcG9ydHMgPQkJMSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHZpdm9wYXlfc2VyaWFsX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCXJldHZhbCA9IHVzYl9zZXJpYWxfcmVnaXN0ZXIoJnZpdm9wYXlfc2VyaWFsX2RldmljZSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJnZpdm9wYXlfc2VyaWFsX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogIiBEUklWRVJfVkVSU0lPTiAiOiIKKwkgICAgRFJJVkVSX0RFU0MgIlxuIik7CisJcmV0dXJuIDA7CitmYWlsZWRfdXNiX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3Rlcigmdml2b3BheV9zZXJpYWxfZGV2aWNlKTsKK2ZhaWxlZF91c2Jfc2VyaWFsX3JlZ2lzdGVyOgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2aXZvcGF5X3NlcmlhbF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnZpdm9wYXlfc2VyaWFsX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZ2aXZvcGF5X3NlcmlhbF9kZXZpY2UpOworfQorCittb2R1bGVfaW5pdCh2aXZvcGF5X3NlcmlhbF9pbml0KTsKK21vZHVsZV9leGl0KHZpdm9wYXlfc2VyaWFsX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJGb3Jlc3QgQm9uZCA8Zm9yZXN0LmJvbmRAb3V0cG9zdGVtYmVkZGVkLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfVkVSU0lPTihEUklWRVJfVkVSU0lPTik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvd2hpdGVoZWF0LmMKaW5kZXggMTA5M2QyZS4uMTJlZDgyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL3doaXRlaGVhdC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC93aGl0ZWhlYXQuYwpAQCAtMTExLDE3ICsxMTEsMTcgQEAKICAgIHNlcGFyYXRlIElEIHRhYmxlcywgYW5kIHRoZW4gYSB0aGlyZCB0YWJsZSB0aGF0IGNvbWJpbmVzIHRoZW0KICAgIGp1c3QgZm9yIHRoZSBwdXJwb3NlIG9mIGV4cG9ydGluZyB0aGUgYXV0b2xvYWRpbmcgaW5mb3JtYXRpb24uCiAqLwotc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlX3N0ZCBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9zdGRbXSA9IHsKIAl7IFVTQl9ERVZJQ0UoQ09OTkVDVF9URUNIX1ZFTkRPUl9JRCwgQ09OTkVDVF9URUNIX1dISVRFX0hFQVRfSUQpIH0sCiAJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9wcmVyZW51bWVyYXRpb24gW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGVfcHJlcmVudW1lcmF0aW9uW10gPSB7CiAJeyBVU0JfREVWSUNFKENPTk5FQ1RfVEVDSF9WRU5ET1JfSUQsIENPTk5FQ1RfVEVDSF9GQUtFX1dISVRFX0hFQVRfSUQpIH0sCiAJeyB9CQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZCBbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZV9jb21iaW5lZFtdID0gewogCXsgVVNCX0RFVklDRShDT05ORUNUX1RFQ0hfVkVORE9SX0lELCBDT05ORUNUX1RFQ0hfV0hJVEVfSEVBVF9JRCkgfSwKIAl7IFVTQl9ERVZJQ0UoQ09OTkVDVF9URUNIX1ZFTkRPUl9JRCwgQ09OTkVDVF9URUNIX0ZBS0VfV0hJVEVfSEVBVF9JRCkgfSwKIAl7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwpAQCAtMTQ5MiwyMSArMTQ5Miw5IEBACiAJCXdyYXAgPSBsaXN0X2VudHJ5KHRtcCwgc3RydWN0IHdoaXRlaGVhdF91cmJfd3JhcCwgbGlzdCk7CiAJCXVyYiA9IHdyYXAtPnVyYjsKIAotCQlpZiAodHR5ICYmIHVyYi0+YWN0dWFsX2xlbmd0aCkgewotCQkJaW50IGxlbiA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwKLQkJCQkJCQl1cmItPmFjdHVhbF9sZW5ndGgpOwotCQkJLyogVGhpcyBzdHVmZiBjYW4gZ28gYXdheSBub3cgSSBzdXNwZWN0ICovCi0JCQlpZiAodW5saWtlbHkobGVuIDwgdXJiLT5hY3R1YWxfbGVuZ3RoKSkgewotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZpbmZvLT5sb2NrLCBmbGFncyk7Ci0JCQkJbGlzdF9hZGQodG1wLCAmaW5mby0+cnhfdXJiX3EpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmluZm8tPmxvY2ssIGZsYWdzKTsKLQkJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOwotCQkJCXNjaGVkdWxlX3dvcmsoJmluZm8tPnJ4X3dvcmspOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJdHR5X2luc2VydF9mbGlwX3N0cmluZyh0dHksIHVyYi0+dHJhbnNmZXJfYnVmZmVyLCBsZW4pOwotCQkJc2VudCArPSBsZW47Ci0JCX0KKwkJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpCisJCQlzZW50ICs9IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmcodHR5LAorCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCiAJCXVyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMKaW5kZXggODBlNjVmMi4uMTk4YmIzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYwpAQCAtMjAyLDcgKzIwMiw3IEBACiAJCWdvdG8gZmFpbDE7CiAKIAlvbmV0b3VjaC0+ZGF0YSA9IHVzYl9idWZmZXJfYWxsb2ModWRldiwgT05FVE9VQ0hfUEtUX0xFTiwKLQkJCQkJICBHRlBfQVRPTUlDLCAmb25ldG91Y2gtPmRhdGFfZG1hKTsKKwkJCQkJICBHRlBfS0VSTkVMLCAmb25ldG91Y2gtPmRhdGFfZG1hKTsKIAlpZiAoIW9uZXRvdWNoLT5kYXRhKQogCQlnb3RvIGZhaWwxOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMKaW5kZXggYWFkYzE2Yi4uNGNjMDM1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYwpAQCAtMTMzLDcgKzEzMyw3IEBACiAKIAkJaWYgKHVzLT5mZmxhZ3MgJiBVU19GTF9NQVhfU0VDVE9SU19NSU4pCiAJCQltYXhfc2VjdG9ycyA9IFBBR0VfQ0FDSEVfU0laRSA+PiA5OwotCQlpZiAocXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSkgPiBtYXhfc2VjdG9ycykKKwkJaWYgKHF1ZXVlX21heF9od19zZWN0b3JzKHNkZXYtPnJlcXVlc3RfcXVldWUpID4gbWF4X3NlY3RvcnMpCiAJCQlibGtfcXVldWVfbWF4X2h3X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSwKIAkJCQkJICAgICAgbWF4X3NlY3RvcnMpOwogCX0gZWxzZSBpZiAoc2Rldi0+dHlwZSA9PSBUWVBFX1RBUEUpIHsKQEAgLTQ4NCw3ICs0ODQsNyBAQAogewogCXN0cnVjdCBzY3NpX2RldmljZSAqc2RldiA9IHRvX3Njc2lfZGV2aWNlKGRldik7CiAKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgcXVldWVfbWF4X3NlY3RvcnMoc2Rldi0+cmVxdWVzdF9xdWV1ZSkpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBxdWV1ZV9tYXhfaHdfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlKSk7CiB9CiAKIC8qIElucHV0IHJvdXRpbmUgZm9yIHRoZSBzeXNmcyBtYXhfc2VjdG9ycyBmaWxlICovCkBAIC00OTQsOSArNDk0LDkgQEAKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSB0b19zY3NpX2RldmljZShkZXYpOwogCXVuc2lnbmVkIHNob3J0IG1zOwogCi0JaWYgKHNzY2FuZihidWYsICIlaHUiLCAmbXMpID4gMCAmJiBtcyA8PSBTQ1NJX0RFRkFVTFRfTUFYX1NFQ1RPUlMpIHsKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVodSIsICZtcykgPiAwKSB7CiAJCWJsa19xdWV1ZV9tYXhfaHdfc2VjdG9ycyhzZGV2LT5yZXF1ZXN0X3F1ZXVlLCBtcyk7Ci0JCXJldHVybiBzdHJsZW4oYnVmKTsKKwkJcmV0dXJuIGNvdW50OwogCX0KIAlyZXR1cm4gLUVJTlZBTDsJCiB9CkBAIC01MzksNyArNTM5LDcgQEAKIAkuc2xhdmVfY29uZmlndXJlID0JCXNsYXZlX2NvbmZpZ3VyZSwKIAogCS8qIGxvdHMgb2Ygc2cgc2VnbWVudHMgY2FuIGJlIGhhbmRsZWQgKi8KLQkuc2dfdGFibGVzaXplID0JCQlTR19BTEwsCisJLnNnX3RhYmxlc2l6ZSA9CQkJU0NTSV9NQVhfU0dfQ0hBSU5fU0VHTUVOVFMsCiAKIAkvKiBsaW1pdCB0aGUgdG90YWwgc2l6ZSBvZiBhIHRyYW5zZmVyIHRvIDEyMCBLQiAqLwogCS5tYXhfc2VjdG9ycyA9ICAgICAgICAgICAgICAgICAgMjQwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zaHV0dGxlX3VzYmF0LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYwppbmRleCBiNjJhMjg4Li5iZDNmNDE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3NodXR0bGVfdXNiYXQuYwpAQCAtMTYyOCwxMCArMTYyOCwxMCBAQAogCQlyZXR1cm4gVVNCX1NUT1JfVFJBTlNQT1JUX0VSUk9SOwogCX0KIAotCWlmICggKHJlc3VsdCA9IHVzYmF0X211bHRpcGxlX3dyaXRlKHVzLCAKLQkJCXJlZ2lzdGVycywgZGF0YSwgNykpICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSB7CisJcmVzdWx0ID0gdXNiYXRfbXVsdGlwbGVfd3JpdGUodXMsIHJlZ2lzdGVycywgZGF0YSwgNyk7CisKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQogCQlyZXR1cm4gcmVzdWx0OwotCX0KIAogCS8qCiAJICogV3JpdGUgdGhlIDEyLWJ5dGUgY29tbWFuZCBoZWFkZXIuCkBAIC0xNjQzLDEyICsxNjQzLDExIEBACiAJICogQVQgU1BFRUQgNCBJUyBVTlJFTElBQkxFISEhCiAJICovCiAKLQlpZiAoKHJlc3VsdCA9IHVzYmF0X3dyaXRlX2Jsb2NrKHVzLAotCQkJVVNCQVRfQVRBLCBzcmItPmNtbmQsIDEyLAotCQkJCShzcmItPmNtbmRbMF09PUdQQ01EX0JMQU5LID8gNzUgOiAxMCksIDApICE9Ci0JCQkgICAgIFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKSkgeworCXJlc3VsdCA9IHVzYmF0X3dyaXRlX2Jsb2NrKHVzLCBVU0JBVF9BVEEsIHNyYi0+Y21uZCwgMTIsCisJCQkJICAgc3JiLT5jbW5kWzBdID09IEdQQ01EX0JMQU5LID8gNzUgOiAxMCwgMCk7CisKKwlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1RSQU5TUE9SVF9HT09EKQogCQlyZXR1cm4gcmVzdWx0OwotCX0KIAogCS8qIElmIHRoZXJlIGlzIHJlc3BvbnNlIGRhdGEgdG8gYmUgcmVhZCBpbiB0aGVuIGRvIGl0IGhlcmUuICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCmluZGV4IGNjMzEzZDEuLjQ2ODAzODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYwpAQCAtNDcsNiArNDcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCisjaW5jbHVkZSA8bGludXgvdXNiL3F1aXJrcy5oPgorCiAjaW5jbHVkZSA8c2NzaS9zY3NpLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2VoLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPgpAQCAtMTI5Nyw2ICsxMjk5LDEwIEBACiB7CiAJaW50IHJlc3VsdDsKIAorCS8qZm9yIHRoZXNlIGRldmljZXMgd2UgbXVzdCB1c2UgdGhlIGNsYXNzIHNwZWNpZmljIG1ldGhvZCAqLworCWlmICh1cy0+cHVzYl9kZXYtPnF1aXJrcyAmIFVTQl9RVUlSS19SRVNFVF9NT1JQSFMpCisJCXJldHVybiAtRVBFUk07CisKIAlyZXN1bHQgPSB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KHVzLT5wdXNiX2RldiwgdXMtPnB1c2JfaW50Zik7CiAJaWYgKHJlc3VsdCA8IDApCiAJCVVTX0RFQlVHUCgidW5hYmxlIHRvIGxvY2sgZGV2aWNlIGZvciByZXNldDogJWRcbiIsIHJlc3VsdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAppbmRleCA0OTU3NWZiYS4uOThiNTQ5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaAorKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCkBAIC0xMTQ3LDggKzExNDcsOCBAQAogCQkwICksCiAKIC8qIFJlcG9ydGVkIGJ5IEphbiBEdW1vbiA8ai5kdW1vbkBvcHRpb24uY29tPgotICogVGhpcyBkZXZpY2UgKHdyb25nbHkpIGhhcyBhIHZlbmRvci1zcGVjaWZpYyBkZXZpY2UgZGVzY3JpcHRvci4KLSAqIFRoZSBlbnRyeSBpcyBuZWVkZWQgc28gdXNiLXN0b3JhZ2UgY2FuIGJpbmQgdG8gaXQncyBtYXNzLXN0b3JhZ2UKKyAqIFRoZXNlIGRldmljZXMgKHdyb25nbHkpIGhhdmUgYSB2ZW5kb3Itc3BlY2lmaWMgZGV2aWNlIGRlc2NyaXB0b3IuCisgKiBUaGVzZSBlbnRyaWVzIGFyZSBuZWVkZWQgc28gdXNiLXN0b3JhZ2UgY2FuIGJpbmQgdG8gdGhlaXIgbWFzcy1zdG9yYWdlCiAgKiBpbnRlcmZhY2UgYXMgYW4gaW50ZXJmYWNlIGRyaXZlciAqLwogVU5VU1VBTF9ERVYoIDB4MGFmMCwgMHg3NTAxLCAweDAwMDAsIDB4MDAwMCwKIAkJIk9wdGlvbiIsCkBAIC0xMTU2LDYgKzExNTYsOTAgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCTAgKSwKIAorVU5VU1VBTF9ERVYoIDB4MGFmMCwgMHg3NzAxLCAweDAwMDAsIDB4MDAwMCwKKwkJIk9wdGlvbiIsCisJCSJHSSAwNDUxIFNELUNhcmQiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJMCApLAorCitVTlVTVUFMX0RFViggMHgwYWYwLCAweDc3MDYsIDB4MDAwMCwgMHgwMDAwLAorCQkiT3B0aW9uIiwKKwkJIkdJIDA0NTEgU0QtQ2FyZCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQkwICksCisKK1VOVVNVQUxfREVWKCAweDBhZjAsIDB4NzkwMSwgMHgwMDAwLCAweDAwMDAsCisJCSJPcHRpb24iLAorCQkiR0kgMDQ1MiBTRC1DYXJkIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCTAgKSwKKworVU5VU1VBTF9ERVYoIDB4MGFmMCwgMHg3QTAxLCAweDAwMDAsIDB4MDAwMCwKKwkJIk9wdGlvbiIsCisJCSJHSSAwNDYxIFNELUNhcmQiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJMCApLAorCitVTlVTVUFMX0RFViggMHgwYWYwLCAweDdBMDUsIDB4MDAwMCwgMHgwMDAwLAorCQkiT3B0aW9uIiwKKwkJIkdJIDA0NjEgU0QtQ2FyZCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQkwICksCisKK1VOVVNVQUxfREVWKCAweDBhZjAsIDB4ODMwMCwgMHgwMDAwLCAweDAwMDAsCisJCSJPcHRpb24iLAorCQkiR0kgMDMzeCBTRC1DYXJkIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCTAgKSwKKworVU5VU1VBTF9ERVYoIDB4MGFmMCwgMHg4MzAyLCAweDAwMDAsIDB4MDAwMCwKKwkJIk9wdGlvbiIsCisJCSJHSSAwMzN4IFNELUNhcmQiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJMCApLAorCitVTlVTVUFMX0RFViggMHgwYWYwLCAweDgzMDQsIDB4MDAwMCwgMHgwMDAwLAorCQkiT3B0aW9uIiwKKwkJIkdJIDAzM3ggU0QtQ2FyZCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQkwICksCisKK1VOVVNVQUxfREVWKCAweDBhZjAsIDB4YzEwMCwgMHgwMDAwLCAweDAwMDAsCisJCSJPcHRpb24iLAorCQkiR0kgMDcweCBTRC1DYXJkIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCTAgKSwKKworVU5VU1VBTF9ERVYoIDB4MGFmMCwgMHhkMDU3LCAweDAwMDAsIDB4MDAwMCwKKwkJIk9wdGlvbiIsCisJCSJHSSAxNTA1IFNELUNhcmQiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJMCApLAorCitVTlVTVUFMX0RFViggMHgwYWYwLCAweGQwNTgsIDB4MDAwMCwgMHgwMDAwLAorCQkiT3B0aW9uIiwKKwkJIkdJIDE1MDkgU0QtQ2FyZCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQkwICksCisKK1VOVVNVQUxfREVWKCAweDBhZjAsIDB4ZDE1NywgMHgwMDAwLCAweDAwMDAsCisJCSJPcHRpb24iLAorCQkiR0kgMTUxNSBTRC1DYXJkIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCTAgKSwKKworVU5VU1VBTF9ERVYoIDB4MGFmMCwgMHhkMjU3LCAweDAwMDAsIDB4MDAwMCwKKwkJIk9wdGlvbiIsCisJCSJHSSAxMjE1IFNELUNhcmQiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJMCApLAorCitVTlVTVUFMX0RFViggMHgwYWYwLCAweGQzNTcsIDB4MDAwMCwgMHgwMDAwLAorCQkiT3B0aW9uIiwKKwkJIkdJIDE1MDUgU0QtQ2FyZCIsCisJCVVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAorCQkwICksCisKIC8qIFJlcG9ydGVkIGJ5IEJlbiBFZnJvcyA8YmVuQHBjLWRvY3Rvci5jb20+ICovCiBVTlVTVUFMX0RFViggMHgwYmMyLCAweDMwMTAsIDB4MDAwMCwgMHgwMDAwLAogCQkiU2VhZ2F0ZSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYyBiL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCmluZGV4IGIxZTU3OWMuLjYxNTIyNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCisrKyBiL2RyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCkBAIC0yOCw3ICsyOCw3IEBACiAjZGVmaW5lIFVTQl9TS0VMX1BST0RVQ1RfSUQJMHhmZmYwCiAKIC8qIHRhYmxlIG9mIGRldmljZXMgdGhhdCB3b3JrIHdpdGggdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBza2VsX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgc2tlbF90YWJsZVtdID0gewogCXsgVVNCX0RFVklDRShVU0JfU0tFTF9WRU5ET1JfSUQsIFVTQl9TS0VMX1BST0RVQ1RfSUQpIH0sCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2NiYWYuYyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2NiYWYuYwppbmRleCAyNWVhZTQwLi41MWE4ZTBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi93dXNiY29yZS9jYmFmLmMKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvY2JhZi5jCkBAIC02NDEsNyArNjQxLDcgQEAKIAlremZyZWUoY2JhZik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBjYmFmX2lkX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgY2JhZl9pZF90YWJsZVtdID0gewogCXsgVVNCX0lOVEVSRkFDRV9JTkZPKDB4ZWYsIDB4MDMsIDB4MDEpLCB9LAogCXsgfSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMgYi9kcml2ZXJzL3VzYi93dXNiY29yZS9kZXZjb25uZWN0LmMKaW5kZXggZGNlZDQxOS4uMWM5MTgyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvZGV2Y29ubmVjdC5jCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL2RldmNvbm5lY3QuYwpAQCAtODY4LDcgKzg2OCw3IEBACiAgKiByZWZlcmVuY2UgdGhhdCB3ZSdsbCBkcm9wLgogICoKICAqIEZpcnN0IHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoZSBkZXZpY2UgaXMgYSBXVVNCIGRldmljZSAoZWxzZSB3ZQotICogaWdub3JlIGl0KS4gRm9yIHRoYXQgd2UgdXNlIHRoZSBzcGVlZCBzZXR0aW5nIChVU0JfU1BFRURfVkFSSUFCTEUpCisgKiBpZ25vcmUgaXQpLiBGb3IgdGhhdCB3ZSB1c2UgdGhlIHNwZWVkIHNldHRpbmcgKFVTQl9TUEVFRF9XSVJFTEVTUykKICAqIFtGSVhNRTogbWF5YmUgd2UnZCBuZWVkIHNvbWV0aGluZyBtb3JlIGRlZmluaXRpdmVdLiBJZiBzbywgd2UgdHJhY2sKICAqIGl0J3MgdXNiX2J1c2QgYW5kIGZyb20gdGhlcmUsIHRoZSBXVVNCIEhDLgogICoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL21tYy5jIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvbW1jLmMKaW5kZXggM2I1MjE2MS4uMmQ4MjczOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivd3VzYmNvcmUvbW1jLmMKKysrIGIvZHJpdmVycy91c2Ivd3VzYmNvcmUvbW1jLmMKQEAgLTI2Myw3ICsyNjMsNyBAQAogewogCWludCByZXN1bHQgPSAwOwogCi0JaWYgKG1lbWNtcChjaGlkLCAmd3VzYl9ja2hkaWRfemVybywgc2l6ZW9mKGNoaWQpKSA9PSAwKQorCWlmIChtZW1jbXAoY2hpZCwgJnd1c2JfY2toZGlkX3plcm8sIHNpemVvZigqY2hpZCkpID09IDApCiAJCWNoaWQgPSBOVUxMOwogCiAJbXV0ZXhfbG9jaygmd3VzYmhjLT5tdXRleCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi93dXNiY29yZS93dXNiaGMuaCBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3d1c2JoYy5oCmluZGV4IGZkMmZkNGUuLjc1OWNkYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3d1c2JoYy5oCisrKyBiL2RyaXZlcnMvdXNiL3d1c2Jjb3JlL3d1c2JoYy5oCkBAIC0xOTgsNyArMTk4LDcgQEAKICAqICAgICAgICAgICAgICAgICBwb3J0cykgdGhpcyBIQyB3aWxsIHRha2UuIFJlYWQtb25seS4KICAqCiAgKiBAcG9ydCAgICAgIAkgICBBcnJheSBvZiBwb3J0IHN0YXR1cyBmb3IgZWFjaCBmYWtlIHJvb3QgcG9ydC4gR3VhcmFudGVlZCB0bwotICogICAgICAgICAgICAgICAgIGFsd2F5cyBiZSB0aGUgc2FtZSBsZW5naHQgZHVyaW5nIGRldmljZSBleGlzdGVuY2UKKyAqICAgICAgICAgICAgICAgICBhbHdheXMgYmUgdGhlIHNhbWUgbGVuZ3RoIGR1cmluZyBkZXZpY2UgZXhpc3RlbmNlCiAgKiAgICAgICAgICAgICAgICAgW3RoaXMgYWxsb3dzIGZvciBzb21lIHVubG9ja2VkIGJ1dCByZWZlcmVuY2VkIHJlYWRpbmddLgogICoKICAqIEBtbWNpZXNfbWF4CSAgIE1heCBudW1iZXIgb2YgSW5mb3JtYXRpb24gRWxlbWVudHMgdGhpcyBIQyBjYW4gc2VuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvZHJpdmVyLmMgYi9kcml2ZXJzL3V3Yi9kcml2ZXIuYwppbmRleCBkYTc3ZTQxLi4wOGJkNmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3V3Yi9kcml2ZXIuYworKysgYi9kcml2ZXJzL3V3Yi9kcml2ZXIuYwpAQCAtNzQsMTMgKzc0LDE2IEBACiB1bnNpZ25lZCBsb25nIGJlYWNvbl90aW1lb3V0X21zID0gNTAwOwogCiBzdGF0aWMKLXNzaXplX3QgYmVhY29uX3RpbWVvdXRfbXNfc2hvdyhzdHJ1Y3QgY2xhc3MgKmNsYXNzLCBjaGFyICpidWYpCitzc2l6ZV90IGJlYWNvbl90aW1lb3V0X21zX3Nob3coc3RydWN0IGNsYXNzICpjbGFzcywKKwkJCQlzdHJ1Y3QgY2xhc3NfYXR0cmlidXRlICphdHRyLAorCQkJCWNoYXIgKmJ1ZikKIHsKIAlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJWx1XG4iLCBiZWFjb25fdGltZW91dF9tcyk7CiB9CiAKIHN0YXRpYwogc3NpemVfdCBiZWFjb25fdGltZW91dF9tc19zdG9yZShzdHJ1Y3QgY2xhc3MgKmNsYXNzLAorCQkJCXN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGJ0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvaTE0ODAvaTE0ODAtZXN0LmMgYi9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MC1lc3QuYwppbmRleCA3YmY4YzZmLi5mMmViNGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MC1lc3QuYworKysgYi9kcml2ZXJzL3V3Yi9pMTQ4MC9pMTQ4MC1lc3QuYwpAQCAtNTQsNyArNTQsNyBAQAogCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaTE0ODBfcmNlYikgKyAyIH0sCiB9OwogCi1zdGF0aWMgaW50IGkxNDgwX2VzdF9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCBpMTQ4MF9lc3RfaW5pdCh2b2lkKQogewogCWludCByZXN1bHQgPSB1d2JfZXN0X3JlZ2lzdGVyKGkxNDgwX0NFVF9WUzEsIDB4MDAsIDB4ODA4NiwgMHgwYzNiLAogCQkJCSAgICAgIGkxNDgwX2VzdF9mZDAwLApAQCAtNzMsNyArNzMsNyBAQAogfQogbW9kdWxlX2luaXQoaTE0ODBfZXN0X2luaXQpOwogCi1zdGF0aWMgdm9pZCBpMTQ4MF9lc3RfZXhpdCh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGkxNDgwX2VzdF9leGl0KHZvaWQpCiB7CiAJdXdiX2VzdF91bnJlZ2lzdGVyKGkxNDgwX0NFVF9WUzEsIDB4MDAsIDB4ODA4NiwgMHgwYzNiLAogCQkJICAgaTE0ODBfZXN0X2ZkMDAsIEFSUkFZX1NJWkUoaTE0ODBfZXN0X2ZkMDApKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXdiL3VtYy1idXMuYyBiL2RyaXZlcnMvdXdiL3VtYy1idXMuYwppbmRleCBjZGQ2YzhlLi41ZmFkNGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3V3Yi91bWMtYnVzLmMKKysrIGIvZHJpdmVycy91d2IvdW1jLWJ1cy5jCkBAIC02MiwxMiArNjIsMTIgQEAKIAlzdHJ1Y3QgZGV2aWNlICpwYXJlbnQgPSB1bWMtPmRldi5wYXJlbnQ7CiAJaW50IHJldCA9IDA7CiAKLQlpZihkb3duX3RyeWxvY2soJnBhcmVudC0+c2VtKSkKKwlpZiAoZGV2aWNlX3RyeWxvY2socGFyZW50KSkKIAkJcmV0dXJuIC1FQUdBSU47CiAJcmV0ID0gZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKHBhcmVudCwgcGFyZW50LCB1bWNfYnVzX3ByZV9yZXNldF9oZWxwZXIpOwogCWlmIChyZXQgPj0gMCkKIAkJcmV0ID0gZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKHBhcmVudCwgcGFyZW50LCB1bWNfYnVzX3Bvc3RfcmVzZXRfaGVscGVyKTsKLQl1cCgmcGFyZW50LT5zZW0pOworCWRldmljZV91bmxvY2socGFyZW50KTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi91d2ItaW50ZXJuYWwuaCBiL2RyaXZlcnMvdXdiL3V3Yi1pbnRlcm5hbC5oCmluZGV4IGQ1YmNmYzEuLjE1NzQ4NWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL3V3Yi1pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvdXdiL3V3Yi1pbnRlcm5hbC5oCkBAIC0zNjYsMTIgKzM2NiwxMiBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdXdiX2Rldl9sb2NrKHN0cnVjdCB1d2JfZGV2ICp1d2JfZGV2KQogewotCWRvd24oJnV3Yl9kZXYtPmRldi5zZW0pOworCWRldmljZV9sb2NrKCZ1d2JfZGV2LT5kZXYpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdXdiX2Rldl91bmxvY2soc3RydWN0IHV3Yl9kZXYgKnV3Yl9kZXYpCiB7Ci0JdXAoJnV3Yl9kZXYtPmRldi5zZW0pOworCWRldmljZV91bmxvY2soJnV3Yl9kZXYtPmRldik7CiB9CiAKICNlbmRpZiAvKiAjaWZuZGVmIF9fVVdCX0lOVEVSTkFMX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91d2IvdXdiZC5jIGIvZHJpdmVycy91d2IvdXdiZC5jCmluZGV4IDVhNzc3ZDguLjYyMTBmZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL3V3YmQuYworKysgYi9kcml2ZXJzL3V3Yi91d2JkLmMKQEAgLTQzLDcgKzQzLDcgQEAKICAqCiAgKiBFVkVOVFMKICAqCi0gKiBFdmVudHMgaGF2ZSBhIHR5cGUsIGEgc3VidHlwZSwgYSBsZW5naHQsIHNvbWUgb3RoZXIgc3R1ZmYgYW5kIHRoZQorICogRXZlbnRzIGhhdmUgYSB0eXBlLCBhIHN1YnR5cGUsIGEgbGVuZ3RoLCBzb21lIG90aGVyIHN0dWZmIGFuZCB0aGUKICAqIGRhdGEgYmxvYiwgd2hpY2ggZGVwZW5kcyBvbiB0aGUgZXZlbnQuIFRoZSBoZWFkZXIgaXMgJ3N0cnVjdAogICogdXdiX2V2ZW50JzsgZm9yIHBheWxvYWRzLCBzZWUgJ3N0cnVjdCB1d2JkX2V2dF8qJy4KICAqCmRpZmYgLS1naXQgYS9kcml2ZXJzL3V3Yi93bHAvc3lzZnMuYyBiL2RyaXZlcnMvdXdiL3dscC9zeXNmcy5jCmluZGV4IDAzNzAzOTkuLjY2MjdjOTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXdiL3dscC9zeXNmcy5jCisrKyBiL2RyaXZlcnMvdXdiL3dscC9zeXNmcy5jCkBAIC02MTUsOCArNjE1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMKLXN0cnVjdCBzeXNmc19vcHMgd3NzX3N5c2ZzX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIHdzc19zeXNmc19vcHMgPSB7CiAJLnNob3cJPSB3bHBfd3NzX2F0dHJfc2hvdywKIAkuc3RvcmUJPSB3bHBfd3NzX2F0dHJfc3RvcmUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9LY29uZmlnIGIvZHJpdmVycy92aG9zdC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0ZTJmZDEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3Zob3N0L0tjb25maWcKQEAgLTAsMCArMSwxMSBAQAorY29uZmlnIFZIT1NUX05FVAorCXRyaXN0YXRlICJIb3N0IGtlcm5lbCBhY2NlbGVyYXRvciBmb3IgdmlydGlvIG5ldCAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIE5FVCAmJiBFVkVOVEZEICYmIChUVU4gfHwgIVRVTikgJiYgKE1BQ1ZUQVAgfHwgIU1BQ1ZUQVApICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFRoaXMga2VybmVsIG1vZHVsZSBjYW4gYmUgbG9hZGVkIGluIGhvc3Qga2VybmVsIHRvIGFjY2VsZXJhdGUKKwkgIGd1ZXN0IG5ldHdvcmtpbmcgd2l0aCB2aXJ0aW9fbmV0LiBOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCB2aXJ0aW9fbmV0CisJICBtb2R1bGUgaXRzZWxmIHdoaWNoIG5lZWRzIHRvIGJlIGxvYWRlZCBpbiBndWVzdCBrZXJuZWwuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbAorCSAgYmUgY2FsbGVkIHZob3N0X25ldC4KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9NYWtlZmlsZSBiL2RyaXZlcnMvdmhvc3QvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJkZDAyMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmhvc3QvTWFrZWZpbGUKQEAgLTAsMCArMSwyIEBACitvYmotJChDT05GSUdfVkhPU1RfTkVUKSArPSB2aG9zdF9uZXQubwordmhvc3RfbmV0LXkgOj0gdmhvc3QubyBuZXQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aG9zdC9uZXQuYyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQzN2RhMgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmhvc3QvbmV0LmMKQEAgLTAsMCArMSw2NjkgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBBdXRob3I6IE1pY2hhZWwgUy4gVHNpcmtpbiA8bXN0QHJlZGhhdC5jb20+CisgKgorICogVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCwgdmVyc2lvbiAyLgorICoKKyAqIHZpcnRpby1uZXQgc2VydmVyIGluIGhvc3Qga2VybmVsLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9ldmVudGZkLmg+CisjaW5jbHVkZSA8bGludXgvdmhvc3QuaD4KKyNpbmNsdWRlIDxsaW51eC92aXJ0aW9fbmV0Lmg+CisjaW5jbHVkZSA8bGludXgvbW11X2NvbnRleHQuaD4KKyNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3BhY2tldC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3R1bi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX21hY3ZsYW4uaD4KKworI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisKKyNpbmNsdWRlICJ2aG9zdC5oIgorCisvKiBNYXggbnVtYmVyIG9mIGJ5dGVzIHRyYW5zZmVycmVkIGJlZm9yZSByZXF1ZXVlaW5nIHRoZSBqb2IuCisgKiBVc2luZyB0aGlzIGxpbWl0IHByZXZlbnRzIG9uZSB2aXJ0cXVldWUgZnJvbSBzdGFydmluZyBvdGhlcnMuICovCisjZGVmaW5lIFZIT1NUX05FVF9XRUlHSFQgMHg4MDAwMAorCitlbnVtIHsKKwlWSE9TVF9ORVRfVlFfUlggPSAwLAorCVZIT1NUX05FVF9WUV9UWCA9IDEsCisJVkhPU1RfTkVUX1ZRX01BWCA9IDIsCit9OworCitlbnVtIHZob3N0X25ldF9wb2xsX3N0YXRlIHsKKwlWSE9TVF9ORVRfUE9MTF9ESVNBQkxFRCA9IDAsCisJVkhPU1RfTkVUX1BPTExfU1RBUlRFRCA9IDEsCisJVkhPU1RfTkVUX1BPTExfU1RPUFBFRCA9IDIsCit9OworCitzdHJ1Y3Qgdmhvc3RfbmV0IHsKKwlzdHJ1Y3Qgdmhvc3RfZGV2IGRldjsKKwlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlIHZxc1tWSE9TVF9ORVRfVlFfTUFYXTsKKwlzdHJ1Y3Qgdmhvc3RfcG9sbCBwb2xsW1ZIT1NUX05FVF9WUV9NQVhdOworCS8qIFRlbGxzIHVzIHdoZXRoZXIgd2UgYXJlIHBvbGxpbmcgYSBzb2NrZXQgZm9yIFRYLgorCSAqIFdlIG9ubHkgZG8gdGhpcyB3aGVuIHNvY2tldCBidWZmZXIgZmlsbHMgdXAuCisJICogUHJvdGVjdGVkIGJ5IHR4IHZxIGxvY2suICovCisJZW51bSB2aG9zdF9uZXRfcG9sbF9zdGF0ZSB0eF9wb2xsX3N0YXRlOworfTsKKworLyogUG9wIGZpcnN0IGxlbiBieXRlcyBmcm9tIGlvdmVjLiBSZXR1cm4gbnVtYmVyIG9mIHNlZ21lbnRzIHVzZWQuICovCitzdGF0aWMgaW50IG1vdmVfaW92ZWNfaGRyKHN0cnVjdCBpb3ZlYyAqZnJvbSwgc3RydWN0IGlvdmVjICp0bywKKwkJCSAgc2l6ZV90IGxlbiwgaW50IGlvdl9jb3VudCkKK3sKKwlpbnQgc2VnID0gMDsKKwlzaXplX3Qgc2l6ZTsKKwl3aGlsZSAobGVuICYmIHNlZyA8IGlvdl9jb3VudCkgeworCQlzaXplID0gbWluKGZyb20tPmlvdl9sZW4sIGxlbik7CisJCXRvLT5pb3ZfYmFzZSA9IGZyb20tPmlvdl9iYXNlOworCQl0by0+aW92X2xlbiA9IHNpemU7CisJCWZyb20tPmlvdl9sZW4gLT0gc2l6ZTsKKwkJZnJvbS0+aW92X2Jhc2UgKz0gc2l6ZTsKKwkJbGVuIC09IHNpemU7CisJCSsrZnJvbTsKKwkJKyt0bzsKKwkJKytzZWc7CisJfQorCXJldHVybiBzZWc7Cit9CisKKy8qIENhbGxlciBtdXN0IGhhdmUgVFggVlEgbG9jayAqLworc3RhdGljIHZvaWQgdHhfcG9sbF9zdG9wKHN0cnVjdCB2aG9zdF9uZXQgKm5ldCkKK3sKKwlpZiAobGlrZWx5KG5ldC0+dHhfcG9sbF9zdGF0ZSAhPSBWSE9TVF9ORVRfUE9MTF9TVEFSVEVEKSkKKwkJcmV0dXJuOworCXZob3N0X3BvbGxfc3RvcChuZXQtPnBvbGwgKyBWSE9TVF9ORVRfVlFfVFgpOworCW5ldC0+dHhfcG9sbF9zdGF0ZSA9IFZIT1NUX05FVF9QT0xMX1NUT1BQRUQ7Cit9CisKKy8qIENhbGxlciBtdXN0IGhhdmUgVFggVlEgbG9jayAqLworc3RhdGljIHZvaWQgdHhfcG9sbF9zdGFydChzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2spCit7CisJaWYgKHVubGlrZWx5KG5ldC0+dHhfcG9sbF9zdGF0ZSAhPSBWSE9TVF9ORVRfUE9MTF9TVE9QUEVEKSkKKwkJcmV0dXJuOworCXZob3N0X3BvbGxfc3RhcnQobmV0LT5wb2xsICsgVkhPU1RfTkVUX1ZRX1RYLCBzb2NrLT5maWxlKTsKKwluZXQtPnR4X3BvbGxfc3RhdGUgPSBWSE9TVF9ORVRfUE9MTF9TVEFSVEVEOworfQorCisvKiBFeHBlY3RzIHRvIGJlIGFsd2F5cyBydW4gZnJvbSB3b3JrcXVldWUgLSB3aGljaCBhY3RzIGFzCisgKiByZWFkLXNpemUgY3JpdGljYWwgc2VjdGlvbiBmb3Igb3VyIGtpbmQgb2YgUkNVLiAqLworc3RhdGljIHZvaWQgaGFuZGxlX3R4KHN0cnVjdCB2aG9zdF9uZXQgKm5ldCkKK3sKKwlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9ICZuZXQtPmRldi52cXNbVkhPU1RfTkVUX1ZRX1RYXTsKKwl1bnNpZ25lZCBoZWFkLCBvdXQsIGluLCBzOworCXN0cnVjdCBtc2doZHIgbXNnID0geworCQkubXNnX25hbWUgPSBOVUxMLAorCQkubXNnX25hbWVsZW4gPSAwLAorCQkubXNnX2NvbnRyb2wgPSBOVUxMLAorCQkubXNnX2NvbnRyb2xsZW4gPSAwLAorCQkubXNnX2lvdiA9IHZxLT5pb3YsCisJCS5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVQsCisJfTsKKwlzaXplX3QgbGVuLCB0b3RhbF9sZW4gPSAwOworCWludCBlcnIsIHdtZW07CisJc2l6ZV90IGhkcl9zaXplOworCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSByY3VfZGVyZWZlcmVuY2UodnEtPnByaXZhdGVfZGF0YSk7CisJaWYgKCFzb2NrKQorCQlyZXR1cm47CisKKwl3bWVtID0gYXRvbWljX3JlYWQoJnNvY2stPnNrLT5za193bWVtX2FsbG9jKTsKKwlpZiAod21lbSA+PSBzb2NrLT5zay0+c2tfc25kYnVmKSB7CisJCW11dGV4X2xvY2soJnZxLT5tdXRleCk7CisJCXR4X3BvbGxfc3RhcnQobmV0LCBzb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZ2cS0+bXV0ZXgpOworCQlyZXR1cm47CisJfQorCisJdXNlX21tKG5ldC0+ZGV2Lm1tKTsKKwltdXRleF9sb2NrKCZ2cS0+bXV0ZXgpOworCXZob3N0X2Rpc2FibGVfbm90aWZ5KHZxKTsKKworCWlmICh3bWVtIDwgc29jay0+c2stPnNrX3NuZGJ1ZiAqIDIpCisJCXR4X3BvbGxfc3RvcChuZXQpOworCWhkcl9zaXplID0gdnEtPmhkcl9zaXplOworCisJZm9yICg7OykgeworCQloZWFkID0gdmhvc3RfZ2V0X3ZxX2Rlc2MoJm5ldC0+ZGV2LCB2cSwgdnEtPmlvdiwKKwkJCQkJIEFSUkFZX1NJWkUodnEtPmlvdiksCisJCQkJCSAmb3V0LCAmaW4sCisJCQkJCSBOVUxMLCBOVUxMKTsKKwkJLyogTm90aGluZyBuZXc/ICBXYWl0IGZvciBldmVudGZkIHRvIHRlbGwgdXMgdGhleSByZWZpbGxlZC4gKi8KKwkJaWYgKGhlYWQgPT0gdnEtPm51bSkgeworCQkJd21lbSA9IGF0b21pY19yZWFkKCZzb2NrLT5zay0+c2tfd21lbV9hbGxvYyk7CisJCQlpZiAod21lbSA+PSBzb2NrLT5zay0+c2tfc25kYnVmICogMyAvIDQpIHsKKwkJCQl0eF9wb2xsX3N0YXJ0KG5ldCwgc29jayk7CisJCQkJc2V0X2JpdChTT0NLX0FTWU5DX05PU1BBQ0UsICZzb2NrLT5mbGFncyk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAodW5saWtlbHkodmhvc3RfZW5hYmxlX25vdGlmeSh2cSkpKSB7CisJCQkJdmhvc3RfZGlzYWJsZV9ub3RpZnkodnEpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJaWYgKGluKSB7CisJCQl2cV9lcnIodnEsICJVbmV4cGVjdGVkIGRlc2NyaXB0b3IgZm9ybWF0IGZvciBUWDogIgorCQkJICAgICAgICJvdXQgJWQsIGludCAlZFxuIiwgb3V0LCBpbik7CisJCQlicmVhazsKKwkJfQorCQkvKiBTa2lwIGhlYWRlci4gVE9ETzogc3VwcG9ydCBUU08uICovCisJCXMgPSBtb3ZlX2lvdmVjX2hkcih2cS0+aW92LCB2cS0+aGRyLCBoZHJfc2l6ZSwgb3V0KTsKKwkJbXNnLm1zZ19pb3ZsZW4gPSBvdXQ7CisJCWxlbiA9IGlvdl9sZW5ndGgodnEtPmlvdiwgb3V0KTsKKwkJLyogU2FuaXR5IGNoZWNrICovCisJCWlmICghbGVuKSB7CisJCQl2cV9lcnIodnEsICJVbmV4cGVjdGVkIGhlYWRlciBsZW4gZm9yIFRYOiAiCisJCQkgICAgICAgIiV6ZCBleHBlY3RlZCAlemRcbiIsCisJCQkgICAgICAgaW92X2xlbmd0aCh2cS0+aGRyLCBzKSwgaGRyX3NpemUpOworCQkJYnJlYWs7CisJCX0KKwkJLyogVE9ETzogQ2hlY2sgc3BlY2lmaWMgZXJyb3IgYW5kIGJvbWIgb3V0IHVubGVzcyBFTk9CVUZTPyAqLworCQllcnIgPSBzb2NrLT5vcHMtPnNlbmRtc2coTlVMTCwgc29jaywgJm1zZywgbGVuKTsKKwkJaWYgKHVubGlrZWx5KGVyciA8IDApKSB7CisJCQl2aG9zdF9kaXNjYXJkX3ZxX2Rlc2ModnEpOworCQkJdHhfcG9sbF9zdGFydChuZXQsIHNvY2spOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGVyciAhPSBsZW4pCisJCQlwcl9lcnIoIlRydW5jYXRlZCBUWCBwYWNrZXQ6ICIKKwkJCSAgICAgICAiIGxlbiAlZCAhPSAlemRcbiIsIGVyciwgbGVuKTsKKwkJdmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbCgmbmV0LT5kZXYsIHZxLCBoZWFkLCAwKTsKKwkJdG90YWxfbGVuICs9IGxlbjsKKwkJaWYgKHVubGlrZWx5KHRvdGFsX2xlbiA+PSBWSE9TVF9ORVRfV0VJR0hUKSkgeworCQkJdmhvc3RfcG9sbF9xdWV1ZSgmdnEtPnBvbGwpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwltdXRleF91bmxvY2soJnZxLT5tdXRleCk7CisJdW51c2VfbW0obmV0LT5kZXYubW0pOworfQorCisvKiBFeHBlY3RzIHRvIGJlIGFsd2F5cyBydW4gZnJvbSB3b3JrcXVldWUgLSB3aGljaCBhY3RzIGFzCisgKiByZWFkLXNpemUgY3JpdGljYWwgc2VjdGlvbiBmb3Igb3VyIGtpbmQgb2YgUkNVLiAqLworc3RhdGljIHZvaWQgaGFuZGxlX3J4KHN0cnVjdCB2aG9zdF9uZXQgKm5ldCkKK3sKKwlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSA9ICZuZXQtPmRldi52cXNbVkhPU1RfTkVUX1ZRX1JYXTsKKwl1bnNpZ25lZCBoZWFkLCBvdXQsIGluLCBsb2csIHM7CisJc3RydWN0IHZob3N0X2xvZyAqdnFfbG9nOworCXN0cnVjdCBtc2doZHIgbXNnID0geworCQkubXNnX25hbWUgPSBOVUxMLAorCQkubXNnX25hbWVsZW4gPSAwLAorCQkubXNnX2NvbnRyb2wgPSBOVUxMLCAvKiBGSVhNRTogZ2V0IGFuZCBoYW5kbGUgUlggYXV4IGRhdGEuICovCisJCS5tc2dfY29udHJvbGxlbiA9IDAsCisJCS5tc2dfaW92ID0gdnEtPmlvdiwKKwkJLm1zZ19mbGFncyA9IE1TR19ET05UV0FJVCwKKwl9OworCisJc3RydWN0IHZpcnRpb19uZXRfaGRyIGhkciA9IHsKKwkJLmZsYWdzID0gMCwKKwkJLmdzb190eXBlID0gVklSVElPX05FVF9IRFJfR1NPX05PTkUKKwl9OworCisJc2l6ZV90IGxlbiwgdG90YWxfbGVuID0gMDsKKwlpbnQgZXJyOworCXNpemVfdCBoZHJfc2l6ZTsKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrID0gcmN1X2RlcmVmZXJlbmNlKHZxLT5wcml2YXRlX2RhdGEpOworCWlmICghc29jayB8fCBza2JfcXVldWVfZW1wdHkoJnNvY2stPnNrLT5za19yZWNlaXZlX3F1ZXVlKSkKKwkJcmV0dXJuOworCisJdXNlX21tKG5ldC0+ZGV2Lm1tKTsKKwltdXRleF9sb2NrKCZ2cS0+bXV0ZXgpOworCXZob3N0X2Rpc2FibGVfbm90aWZ5KHZxKTsKKwloZHJfc2l6ZSA9IHZxLT5oZHJfc2l6ZTsKKworCXZxX2xvZyA9IHVubGlrZWx5KHZob3N0X2hhc19mZWF0dXJlKCZuZXQtPmRldiwgVkhPU1RfRl9MT0dfQUxMKSkgPworCQl2cS0+bG9nIDogTlVMTDsKKworCWZvciAoOzspIHsKKwkJaGVhZCA9IHZob3N0X2dldF92cV9kZXNjKCZuZXQtPmRldiwgdnEsIHZxLT5pb3YsCisJCQkJCSBBUlJBWV9TSVpFKHZxLT5pb3YpLAorCQkJCQkgJm91dCwgJmluLAorCQkJCQkgdnFfbG9nLCAmbG9nKTsKKwkJLyogT0ssIG5vdyB3ZSBuZWVkIHRvIGtub3cgYWJvdXQgYWRkZWQgZGVzY3JpcHRvcnMuICovCisJCWlmIChoZWFkID09IHZxLT5udW0pIHsKKwkJCWlmICh1bmxpa2VseSh2aG9zdF9lbmFibGVfbm90aWZ5KHZxKSkpIHsKKwkJCQkvKiBUaGV5IGhhdmUgc2xpcHBlZCBvbmUgaW4gYXMgd2Ugd2VyZQorCQkJCSAqIGRvaW5nIHRoYXQ6IGNoZWNrIGFnYWluLiAqLworCQkJCXZob3N0X2Rpc2FibGVfbm90aWZ5KHZxKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIE5vdGhpbmcgbmV3PyAgV2FpdCBmb3IgZXZlbnRmZCB0byB0ZWxsIHVzCisJCQkgKiB0aGV5IHJlZmlsbGVkLiAqLworCQkJYnJlYWs7CisJCX0KKwkJLyogV2UgZG9uJ3QgbmVlZCB0byBiZSBub3RpZmllZCBhZ2Fpbi4gKi8KKwkJaWYgKG91dCkgeworCQkJdnFfZXJyKHZxLCAiVW5leHBlY3RlZCBkZXNjcmlwdG9yIGZvcm1hdCBmb3IgUlg6ICIKKwkJCSAgICAgICAib3V0ICVkLCBpbnQgJWRcbiIsCisJCQkgICAgICAgb3V0LCBpbik7CisJCQlicmVhazsKKwkJfQorCQkvKiBTa2lwIGhlYWRlci4gVE9ETzogc3VwcG9ydCBUU08vbWVyZ2VhYmxlIHJ4IGJ1ZmZlcnMuICovCisJCXMgPSBtb3ZlX2lvdmVjX2hkcih2cS0+aW92LCB2cS0+aGRyLCBoZHJfc2l6ZSwgaW4pOworCQltc2cubXNnX2lvdmxlbiA9IGluOworCQlsZW4gPSBpb3ZfbGVuZ3RoKHZxLT5pb3YsIGluKTsKKwkJLyogU2FuaXR5IGNoZWNrICovCisJCWlmICghbGVuKSB7CisJCQl2cV9lcnIodnEsICJVbmV4cGVjdGVkIGhlYWRlciBsZW4gZm9yIFJYOiAiCisJCQkgICAgICAgIiV6ZCBleHBlY3RlZCAlemRcbiIsCisJCQkgICAgICAgaW92X2xlbmd0aCh2cS0+aGRyLCBzKSwgaGRyX3NpemUpOworCQkJYnJlYWs7CisJCX0KKwkJZXJyID0gc29jay0+b3BzLT5yZWN2bXNnKE5VTEwsIHNvY2ssICZtc2csCisJCQkJCSBsZW4sIE1TR19ET05UV0FJVCB8IE1TR19UUlVOQyk7CisJCS8qIFRPRE86IENoZWNrIHNwZWNpZmljIGVycm9yIGFuZCBib21iIG91dCB1bmxlc3MgRUFHQUlOPyAqLworCQlpZiAoZXJyIDwgMCkgeworCQkJdmhvc3RfZGlzY2FyZF92cV9kZXNjKHZxKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIFRPRE86IFNob3VsZCBjaGVjayBhbmQgaGFuZGxlIGNoZWNrc3VtLiAqLworCQlpZiAoZXJyID4gbGVuKSB7CisJCQlwcl9lcnIoIkRpc2NhcmRlZCB0cnVuY2F0ZWQgcnggcGFja2V0OiAiCisJCQkgICAgICAgIiBsZW4gJWQgPiAlemRcbiIsIGVyciwgbGVuKTsKKwkJCXZob3N0X2Rpc2NhcmRfdnFfZGVzYyh2cSk7CisJCQljb250aW51ZTsKKwkJfQorCQlsZW4gPSBlcnI7CisJCWVyciA9IG1lbWNweV90b2lvdmVjKHZxLT5oZHIsICh1bnNpZ25lZCBjaGFyICopJmhkciwgaGRyX3NpemUpOworCQlpZiAoZXJyKSB7CisJCQl2cV9lcnIodnEsICJVbmFibGUgdG8gd3JpdGUgdm5ldF9oZHIgYXQgYWRkciAlcDogJWRcbiIsCisJCQkgICAgICAgdnEtPmlvdi0+aW92X2Jhc2UsIGVycik7CisJCQlicmVhazsKKwkJfQorCQlsZW4gKz0gaGRyX3NpemU7CisJCXZob3N0X2FkZF91c2VkX2FuZF9zaWduYWwoJm5ldC0+ZGV2LCB2cSwgaGVhZCwgbGVuKTsKKwkJaWYgKHVubGlrZWx5KHZxX2xvZykpCisJCQl2aG9zdF9sb2dfd3JpdGUodnEsIHZxX2xvZywgbG9nLCBsZW4pOworCQl0b3RhbF9sZW4gKz0gbGVuOworCQlpZiAodW5saWtlbHkodG90YWxfbGVuID49IFZIT1NUX05FVF9XRUlHSFQpKSB7CisJCQl2aG9zdF9wb2xsX3F1ZXVlKCZ2cS0+cG9sbCk7CisJCQlicmVhazsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmdnEtPm11dGV4KTsKKwl1bnVzZV9tbShuZXQtPmRldi5tbSk7Cit9CisKK3N0YXRpYyB2b2lkIGhhbmRsZV90eF9raWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTsKKwlzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQ7CisJdnEgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSwgcG9sbC53b3JrKTsKKwluZXQgPSBjb250YWluZXJfb2YodnEtPmRldiwgc3RydWN0IHZob3N0X25ldCwgZGV2KTsKKwloYW5kbGVfdHgobmV0KTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3J4X2tpY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxOworCXN0cnVjdCB2aG9zdF9uZXQgKm5ldDsKKwl2cSA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlLCBwb2xsLndvcmspOworCW5ldCA9IGNvbnRhaW5lcl9vZih2cS0+ZGV2LCBzdHJ1Y3Qgdmhvc3RfbmV0LCBkZXYpOworCWhhbmRsZV9yeChuZXQpOworfQorCitzdGF0aWMgdm9pZCBoYW5kbGVfdHhfbmV0KHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgdmhvc3RfbmV0ICpuZXQ7CisJbmV0ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB2aG9zdF9uZXQsIHBvbGxbVkhPU1RfTkVUX1ZRX1RYXS53b3JrKTsKKwloYW5kbGVfdHgobmV0KTsKK30KKworc3RhdGljIHZvaWQgaGFuZGxlX3J4X25ldChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IHZob3N0X25ldCAqbmV0OworCW5ldCA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgdmhvc3RfbmV0LCBwb2xsW1ZIT1NUX05FVF9WUV9SWF0ud29yayk7CisJaGFuZGxlX3J4KG5ldCk7Cit9CisKK3N0YXRpYyBpbnQgdmhvc3RfbmV0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpCit7CisJc3RydWN0IHZob3N0X25ldCAqbiA9IGttYWxsb2Moc2l6ZW9mICpuLCBHRlBfS0VSTkVMKTsKKwlpbnQgcjsKKwlpZiAoIW4pCisJCXJldHVybiAtRU5PTUVNOworCW4tPnZxc1tWSE9TVF9ORVRfVlFfVFhdLmhhbmRsZV9raWNrID0gaGFuZGxlX3R4X2tpY2s7CisJbi0+dnFzW1ZIT1NUX05FVF9WUV9SWF0uaGFuZGxlX2tpY2sgPSBoYW5kbGVfcnhfa2ljazsKKwlyID0gdmhvc3RfZGV2X2luaXQoJm4tPmRldiwgbi0+dnFzLCBWSE9TVF9ORVRfVlFfTUFYKTsKKwlpZiAociA8IDApIHsKKwkJa2ZyZWUobik7CisJCXJldHVybiByOworCX0KKworCXZob3N0X3BvbGxfaW5pdChuLT5wb2xsICsgVkhPU1RfTkVUX1ZRX1RYLCBoYW5kbGVfdHhfbmV0LCBQT0xMT1VUKTsKKwl2aG9zdF9wb2xsX2luaXQobi0+cG9sbCArIFZIT1NUX05FVF9WUV9SWCwgaGFuZGxlX3J4X25ldCwgUE9MTElOKTsKKwluLT50eF9wb2xsX3N0YXRlID0gVkhPU1RfTkVUX1BPTExfRElTQUJMRUQ7CisKKwlmLT5wcml2YXRlX2RhdGEgPSBuOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHZob3N0X25ldF9kaXNhYmxlX3ZxKHN0cnVjdCB2aG9zdF9uZXQgKm4sCisJCQkJIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQoreworCWlmICghdnEtPnByaXZhdGVfZGF0YSkKKwkJcmV0dXJuOworCWlmICh2cSA9PSBuLT52cXMgKyBWSE9TVF9ORVRfVlFfVFgpIHsKKwkJdHhfcG9sbF9zdG9wKG4pOworCQluLT50eF9wb2xsX3N0YXRlID0gVkhPU1RfTkVUX1BPTExfRElTQUJMRUQ7CisJfSBlbHNlCisJCXZob3N0X3BvbGxfc3RvcChuLT5wb2xsICsgVkhPU1RfTkVUX1ZRX1JYKTsKK30KKworc3RhdGljIHZvaWQgdmhvc3RfbmV0X2VuYWJsZV92cShzdHJ1Y3Qgdmhvc3RfbmV0ICpuLAorCQkJCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQoreworCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSB2cS0+cHJpdmF0ZV9kYXRhOworCWlmICghc29jaykKKwkJcmV0dXJuOworCWlmICh2cSA9PSBuLT52cXMgKyBWSE9TVF9ORVRfVlFfVFgpIHsKKwkJbi0+dHhfcG9sbF9zdGF0ZSA9IFZIT1NUX05FVF9QT0xMX1NUT1BQRUQ7CisJCXR4X3BvbGxfc3RhcnQobiwgc29jayk7CisJfSBlbHNlCisJCXZob3N0X3BvbGxfc3RhcnQobi0+cG9sbCArIFZIT1NUX05FVF9WUV9SWCwgc29jay0+ZmlsZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ja2V0ICp2aG9zdF9uZXRfc3RvcF92cShzdHJ1Y3Qgdmhvc3RfbmV0ICpuLAorCQkJCQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCisJbXV0ZXhfbG9jaygmdnEtPm11dGV4KTsKKwlzb2NrID0gdnEtPnByaXZhdGVfZGF0YTsKKwl2aG9zdF9uZXRfZGlzYWJsZV92cShuLCB2cSk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHZxLT5wcml2YXRlX2RhdGEsIE5VTEwpOworCW11dGV4X3VubG9jaygmdnEtPm11dGV4KTsKKwlyZXR1cm4gc29jazsKK30KKworc3RhdGljIHZvaWQgdmhvc3RfbmV0X3N0b3Aoc3RydWN0IHZob3N0X25ldCAqbiwgc3RydWN0IHNvY2tldCAqKnR4X3NvY2ssCisJCQkgICBzdHJ1Y3Qgc29ja2V0ICoqcnhfc29jaykKK3sKKwkqdHhfc29jayA9IHZob3N0X25ldF9zdG9wX3ZxKG4sIG4tPnZxcyArIFZIT1NUX05FVF9WUV9UWCk7CisJKnJ4X3NvY2sgPSB2aG9zdF9uZXRfc3RvcF92cShuLCBuLT52cXMgKyBWSE9TVF9ORVRfVlFfUlgpOworfQorCitzdGF0aWMgdm9pZCB2aG9zdF9uZXRfZmx1c2hfdnEoc3RydWN0IHZob3N0X25ldCAqbiwgaW50IGluZGV4KQoreworCXZob3N0X3BvbGxfZmx1c2gobi0+cG9sbCArIGluZGV4KTsKKwl2aG9zdF9wb2xsX2ZsdXNoKCZuLT5kZXYudnFzW2luZGV4XS5wb2xsKTsKK30KKworc3RhdGljIHZvaWQgdmhvc3RfbmV0X2ZsdXNoKHN0cnVjdCB2aG9zdF9uZXQgKm4pCit7CisJdmhvc3RfbmV0X2ZsdXNoX3ZxKG4sIFZIT1NUX05FVF9WUV9UWCk7CisJdmhvc3RfbmV0X2ZsdXNoX3ZxKG4sIFZIT1NUX05FVF9WUV9SWCk7Cit9CisKK3N0YXRpYyBpbnQgdmhvc3RfbmV0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmYpCit7CisJc3RydWN0IHZob3N0X25ldCAqbiA9IGYtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc29ja2V0ICp0eF9zb2NrOworCXN0cnVjdCBzb2NrZXQgKnJ4X3NvY2s7CisKKwl2aG9zdF9uZXRfc3RvcChuLCAmdHhfc29jaywgJnJ4X3NvY2spOworCXZob3N0X25ldF9mbHVzaChuKTsKKwl2aG9zdF9kZXZfY2xlYW51cCgmbi0+ZGV2KTsKKwlpZiAodHhfc29jaykKKwkJZnB1dCh0eF9zb2NrLT5maWxlKTsKKwlpZiAocnhfc29jaykKKwkJZnB1dChyeF9zb2NrLT5maWxlKTsKKwkvKiBXZSBkbyBhbiBleHRyYSBmbHVzaCBiZWZvcmUgZnJlZWluZyBtZW1vcnksCisJICogc2luY2Ugam9icyBjYW4gcmUtcXVldWUgdGhlbXNlbHZlcy4gKi8KKwl2aG9zdF9uZXRfZmx1c2gobik7CisJa2ZyZWUobik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ja2V0ICpnZXRfcmF3X3NvY2tldChpbnQgZmQpCit7CisJc3RydWN0IHsKKwkJc3RydWN0IHNvY2thZGRyX2xsIHNhOworCQljaGFyICBidWZbTUFYX0FERFJfTEVOXTsKKwl9IHVhZGRyOworCWludCB1YWRkcl9sZW4gPSBzaXplb2YgdWFkZHIsIHI7CisJc3RydWN0IHNvY2tldCAqc29jayA9IHNvY2tmZF9sb29rdXAoZmQsICZyKTsKKwlpZiAoIXNvY2spCisJCXJldHVybiBFUlJfUFRSKC1FTk9UU09DSyk7CisKKwkvKiBQYXJhbWV0ZXIgY2hlY2tpbmcgKi8KKwlpZiAoc29jay0+c2stPnNrX3R5cGUgIT0gU09DS19SQVcpIHsKKwkJciA9IC1FU09DS1ROT1NVUFBPUlQ7CisJCWdvdG8gZXJyOworCX0KKworCXIgPSBzb2NrLT5vcHMtPmdldG5hbWUoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZ1YWRkci5zYSwKKwkJCSAgICAgICAmdWFkZHJfbGVuLCAwKTsKKwlpZiAocikKKwkJZ290byBlcnI7CisKKwlpZiAodWFkZHIuc2Euc2xsX2ZhbWlseSAhPSBBRl9QQUNLRVQpIHsKKwkJciA9IC1FUEZOT1NVUFBPUlQ7CisJCWdvdG8gZXJyOworCX0KKwlyZXR1cm4gc29jazsKK2VycjoKKwlmcHV0KHNvY2stPmZpbGUpOworCXJldHVybiBFUlJfUFRSKHIpOworfQorCitzdGF0aWMgc3RydWN0IHNvY2tldCAqZ2V0X3RhcF9zb2NrZXQoaW50IGZkKQoreworCXN0cnVjdCBmaWxlICpmaWxlID0gZmdldChmZCk7CisJc3RydWN0IHNvY2tldCAqc29jazsKKwlpZiAoIWZpbGUpCisJCXJldHVybiBFUlJfUFRSKC1FQkFERik7CisJc29jayA9IHR1bl9nZXRfc29ja2V0KGZpbGUpOworCWlmICghSVNfRVJSKHNvY2spKQorCQlyZXR1cm4gc29jazsKKwlzb2NrID0gbWFjdnRhcF9nZXRfc29ja2V0KGZpbGUpOworCWlmIChJU19FUlIoc29jaykpCisJCWZwdXQoZmlsZSk7CisJcmV0dXJuIHNvY2s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ja2V0ICpnZXRfc29ja2V0KGludCBmZCkKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOworCS8qIHNwZWNpYWwgY2FzZSB0byBkaXNhYmxlIGJhY2tlbmQgKi8KKwlpZiAoZmQgPT0gLTEpCisJCXJldHVybiBOVUxMOworCXNvY2sgPSBnZXRfcmF3X3NvY2tldChmZCk7CisJaWYgKCFJU19FUlIoc29jaykpCisJCXJldHVybiBzb2NrOworCXNvY2sgPSBnZXRfdGFwX3NvY2tldChmZCk7CisJaWYgKCFJU19FUlIoc29jaykpCisJCXJldHVybiBzb2NrOworCXJldHVybiBFUlJfUFRSKC1FTk9UU09DSyk7Cit9CisKK3N0YXRpYyBsb25nIHZob3N0X25ldF9zZXRfYmFja2VuZChzdHJ1Y3Qgdmhvc3RfbmV0ICpuLCB1bnNpZ25lZCBpbmRleCwgaW50IGZkKQoreworCXN0cnVjdCBzb2NrZXQgKnNvY2ssICpvbGRzb2NrOworCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxOworCWludCByOworCisJbXV0ZXhfbG9jaygmbi0+ZGV2Lm11dGV4KTsKKwlyID0gdmhvc3RfZGV2X2NoZWNrX293bmVyKCZuLT5kZXYpOworCWlmIChyKQorCQlnb3RvIGVycjsKKworCWlmIChpbmRleCA+PSBWSE9TVF9ORVRfVlFfTUFYKSB7CisJCXIgPSAtRU5PQlVGUzsKKwkJZ290byBlcnI7CisJfQorCXZxID0gbi0+dnFzICsgaW5kZXg7CisJbXV0ZXhfbG9jaygmdnEtPm11dGV4KTsKKworCS8qIFZlcmlmeSB0aGF0IHJpbmcgaGFzIGJlZW4gc2V0dXAgY29ycmVjdGx5LiAqLworCWlmICghdmhvc3RfdnFfYWNjZXNzX29rKHZxKSkgeworCQlyID0gLUVGQVVMVDsKKwkJZ290byBlcnI7CisJfQorCXNvY2sgPSBnZXRfc29ja2V0KGZkKTsKKwlpZiAoSVNfRVJSKHNvY2spKSB7CisJCXIgPSBQVFJfRVJSKHNvY2spOworCQlnb3RvIGVycjsKKwl9CisKKwkvKiBzdGFydCBwb2xsaW5nIG5ldyBzb2NrZXQgKi8KKwlvbGRzb2NrID0gdnEtPnByaXZhdGVfZGF0YTsKKwlpZiAoc29jayA9PSBvbGRzb2NrKQorCQlnb3RvIGRvbmU7CisKKwl2aG9zdF9uZXRfZGlzYWJsZV92cShuLCB2cSk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHZxLT5wcml2YXRlX2RhdGEsIHNvY2spOworCXZob3N0X25ldF9lbmFibGVfdnEobiwgdnEpOworCW11dGV4X3VubG9jaygmdnEtPm11dGV4KTsKK2RvbmU6CisJaWYgKG9sZHNvY2spIHsKKwkJdmhvc3RfbmV0X2ZsdXNoX3ZxKG4sIGluZGV4KTsKKwkJZnB1dChvbGRzb2NrLT5maWxlKTsKKwl9CitlcnI6CisJbXV0ZXhfdW5sb2NrKCZuLT5kZXYubXV0ZXgpOworCXJldHVybiByOworfQorCitzdGF0aWMgbG9uZyB2aG9zdF9uZXRfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X25ldCAqbikKK3sKKwlzdHJ1Y3Qgc29ja2V0ICp0eF9zb2NrID0gTlVMTDsKKwlzdHJ1Y3Qgc29ja2V0ICpyeF9zb2NrID0gTlVMTDsKKwlsb25nIGVycjsKKwltdXRleF9sb2NrKCZuLT5kZXYubXV0ZXgpOworCWVyciA9IHZob3N0X2Rldl9jaGVja19vd25lcigmbi0+ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGRvbmU7CisJdmhvc3RfbmV0X3N0b3AobiwgJnR4X3NvY2ssICZyeF9zb2NrKTsKKwl2aG9zdF9uZXRfZmx1c2gobik7CisJZXJyID0gdmhvc3RfZGV2X3Jlc2V0X293bmVyKCZuLT5kZXYpOworZG9uZToKKwltdXRleF91bmxvY2soJm4tPmRldi5tdXRleCk7CisJaWYgKHR4X3NvY2spCisJCWZwdXQodHhfc29jay0+ZmlsZSk7CisJaWYgKHJ4X3NvY2spCisJCWZwdXQocnhfc29jay0+ZmlsZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB2aG9zdF9uZXRfc2V0X2ZlYXR1cmVzKHN0cnVjdCB2aG9zdF9uZXQgKm4sIHU2NCBmZWF0dXJlcykKK3sKKwlzaXplX3QgaGRyX3NpemUgPSBmZWF0dXJlcyAmICgxIDw8IFZIT1NUX05FVF9GX1ZJUlRJT19ORVRfSERSKSA/CisJCXNpemVvZihzdHJ1Y3QgdmlydGlvX25ldF9oZHIpIDogMDsKKwlpbnQgaTsKKwltdXRleF9sb2NrKCZuLT5kZXYubXV0ZXgpOworCWlmICgoZmVhdHVyZXMgJiAoMSA8PCBWSE9TVF9GX0xPR19BTEwpKSAmJgorCSAgICAhdmhvc3RfbG9nX2FjY2Vzc19vaygmbi0+ZGV2KSkgeworCQltdXRleF91bmxvY2soJm4tPmRldi5tdXRleCk7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwluLT5kZXYuYWNrZWRfZmVhdHVyZXMgPSBmZWF0dXJlczsKKwlzbXBfd21iKCk7CisJZm9yIChpID0gMDsgaSA8IFZIT1NUX05FVF9WUV9NQVg7ICsraSkgeworCQltdXRleF9sb2NrKCZuLT52cXNbaV0ubXV0ZXgpOworCQluLT52cXNbaV0uaGRyX3NpemUgPSBoZHJfc2l6ZTsKKwkJbXV0ZXhfdW5sb2NrKCZuLT52cXNbaV0ubXV0ZXgpOworCX0KKwl2aG9zdF9uZXRfZmx1c2gobik7CisJbXV0ZXhfdW5sb2NrKCZuLT5kZXYubXV0ZXgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyB2aG9zdF9uZXRfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3Qgdmhvc3RfbmV0ICpuID0gZi0+cHJpdmF0ZV9kYXRhOworCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOworCXU2NCBfX3VzZXIgKmZlYXR1cmVwID0gYXJncDsKKwlzdHJ1Y3Qgdmhvc3RfdnJpbmdfZmlsZSBiYWNrZW5kOworCXU2NCBmZWF0dXJlczsKKwlpbnQgcjsKKwlzd2l0Y2ggKGlvY3RsKSB7CisJY2FzZSBWSE9TVF9ORVRfU0VUX0JBQ0tFTkQ6CisJCXIgPSBjb3B5X2Zyb21fdXNlcigmYmFja2VuZCwgYXJncCwgc2l6ZW9mIGJhY2tlbmQpOworCQlpZiAociA8IDApCisJCQlyZXR1cm4gcjsKKwkJcmV0dXJuIHZob3N0X25ldF9zZXRfYmFja2VuZChuLCBiYWNrZW5kLmluZGV4LCBiYWNrZW5kLmZkKTsKKwljYXNlIFZIT1NUX0dFVF9GRUFUVVJFUzoKKwkJZmVhdHVyZXMgPSBWSE9TVF9GRUFUVVJFUzsKKwkJcmV0dXJuIGNvcHlfdG9fdXNlcihmZWF0dXJlcCwgJmZlYXR1cmVzLCBzaXplb2YgZmVhdHVyZXMpOworCWNhc2UgVkhPU1RfU0VUX0ZFQVRVUkVTOgorCQlyID0gY29weV9mcm9tX3VzZXIoJmZlYXR1cmVzLCBmZWF0dXJlcCwgc2l6ZW9mIGZlYXR1cmVzKTsKKwkJaWYgKHIgPCAwKQorCQkJcmV0dXJuIHI7CisJCWlmIChmZWF0dXJlcyAmIH5WSE9TVF9GRUFUVVJFUykKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJcmV0dXJuIHZob3N0X25ldF9zZXRfZmVhdHVyZXMobiwgZmVhdHVyZXMpOworCWNhc2UgVkhPU1RfUkVTRVRfT1dORVI6CisJCXJldHVybiB2aG9zdF9uZXRfcmVzZXRfb3duZXIobik7CisJZGVmYXVsdDoKKwkJbXV0ZXhfbG9jaygmbi0+ZGV2Lm11dGV4KTsKKwkJciA9IHZob3N0X2Rldl9pb2N0bCgmbi0+ZGV2LCBpb2N0bCwgYXJnKTsKKwkJdmhvc3RfbmV0X2ZsdXNoKG4pOworCQltdXRleF91bmxvY2soJm4tPmRldi5tdXRleCk7CisJCXJldHVybiByOworCX0KK30KKworI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyBsb25nIHZob3N0X25ldF9jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmYsIHVuc2lnbmVkIGludCBpb2N0bCwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlyZXR1cm4gdmhvc3RfbmV0X2lvY3RsKGYsIGlvY3RsLCAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpOworfQorI2VuZGlmCisKK2NvbnN0IHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHZob3N0X25ldF9mb3BzID0geworCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorCS5yZWxlYXNlICAgICAgICA9IHZob3N0X25ldF9yZWxlYXNlLAorCS51bmxvY2tlZF9pb2N0bCA9IHZob3N0X25ldF9pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bCAgID0gdmhvc3RfbmV0X2NvbXBhdF9pb2N0bCwKKyNlbmRpZgorCS5vcGVuICAgICAgICAgICA9IHZob3N0X25ldF9vcGVuLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIHZob3N0X25ldF9taXNjID0geworCVZIT1NUX05FVF9NSU5PUiwKKwkidmhvc3QtbmV0IiwKKwkmdmhvc3RfbmV0X2ZvcHMsCit9OworCitpbnQgdmhvc3RfbmV0X2luaXQodm9pZCkKK3sKKwlpbnQgciA9IHZob3N0X2luaXQoKTsKKwlpZiAocikKKwkJZ290byBlcnJfaW5pdDsKKwlyID0gbWlzY19yZWdpc3Rlcigmdmhvc3RfbmV0X21pc2MpOworCWlmIChyKQorCQlnb3RvIGVycl9yZWc7CisJcmV0dXJuIDA7CitlcnJfcmVnOgorCXZob3N0X2NsZWFudXAoKTsKK2Vycl9pbml0OgorCXJldHVybiByOworCit9Cittb2R1bGVfaW5pdCh2aG9zdF9uZXRfaW5pdCk7CisKK3ZvaWQgdmhvc3RfbmV0X2V4aXQodm9pZCkKK3sKKwltaXNjX2RlcmVnaXN0ZXIoJnZob3N0X25ldF9taXNjKTsKKwl2aG9zdF9jbGVhbnVwKCk7Cit9Cittb2R1bGVfZXhpdCh2aG9zdF9uZXRfZXhpdCk7CisKK01PRFVMRV9WRVJTSU9OKCIwLjAuMSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOworTU9EVUxFX0FVVEhPUigiTWljaGFlbCBTLiBUc2lya2luIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkhvc3Qga2VybmVsIGFjY2VsZXJhdG9yIGZvciB2aXJ0aW8gbmV0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmMgYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NkNTVlMAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuYwpAQCAtMCwwICsxLDExMDQgQEAKKy8qIENvcHlyaWdodCAoQykgMjAwOSBSZWQgSGF0LCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUnVzdHkgUnVzc2VsbCBJQk0gQ29ycG9yYXRpb24KKyAqCisgKiBBdXRob3I6IE1pY2hhZWwgUy4gVHNpcmtpbiA8bXN0QHJlZGhhdC5jb20+CisgKgorICogSW5zcGlyYXRpb24sIHNvbWUgY29kZSwgYW5kIG1vc3Qgd2l0dHkgY29tbWVudHMgY29tZSBmcm9tCisgKiBEb2N1bWVudGF0aW9uL2xndWVzdC9sZ3Vlc3QuYywgYnkgUnVzdHkgUnVzc2VsbAorICoKKyAqIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHUEwsIHZlcnNpb24gMi4KKyAqCisgKiBHZW5lcmljIGNvZGUgZm9yIHZpcnRpbyBzZXJ2ZXIgaW4gaG9zdCBrZXJuZWwuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2V2ZW50ZmQuaD4KKyNpbmNsdWRlIDxsaW51eC92aG9zdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisKKyNpbmNsdWRlIDxsaW51eC9uZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9wYWNrZXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKworI2luY2x1ZGUgPG5ldC9zb2NrLmg+CisKKyNpbmNsdWRlICJ2aG9zdC5oIgorCitlbnVtIHsKKwlWSE9TVF9NRU1PUllfTUFYX05SRUdJT05TID0gNjQsCisJVkhPU1RfTUVNT1JZX0ZfTE9HID0gMHgxLAorfTsKKworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp2aG9zdF93b3JrcXVldWU7CisKK3N0YXRpYyB2b2lkIHZob3N0X3BvbGxfZnVuYyhzdHJ1Y3QgZmlsZSAqZmlsZSwgd2FpdF9xdWV1ZV9oZWFkX3QgKndxaCwKKwkJCSAgICBwb2xsX3RhYmxlICpwdCkKK3sKKwlzdHJ1Y3Qgdmhvc3RfcG9sbCAqcG9sbDsKKwlwb2xsID0gY29udGFpbmVyX29mKHB0LCBzdHJ1Y3Qgdmhvc3RfcG9sbCwgdGFibGUpOworCisJcG9sbC0+d3FoID0gd3FoOworCWFkZF93YWl0X3F1ZXVlKHdxaCwgJnBvbGwtPndhaXQpOworfQorCitzdGF0aWMgaW50IHZob3N0X3BvbGxfd2FrZXVwKHdhaXRfcXVldWVfdCAqd2FpdCwgdW5zaWduZWQgbW9kZSwgaW50IHN5bmMsCisJCQkgICAgIHZvaWQgKmtleSkKK3sKKwlzdHJ1Y3Qgdmhvc3RfcG9sbCAqcG9sbDsKKwlwb2xsID0gY29udGFpbmVyX29mKHdhaXQsIHN0cnVjdCB2aG9zdF9wb2xsLCB3YWl0KTsKKwlpZiAoISgodW5zaWduZWQgbG9uZylrZXkgJiBwb2xsLT5tYXNrKSkKKwkJcmV0dXJuIDA7CisKKwlxdWV1ZV93b3JrKHZob3N0X3dvcmtxdWV1ZSwgJnBvbGwtPndvcmspOworCXJldHVybiAwOworfQorCisvKiBJbml0IHBvbGwgc3RydWN0dXJlICovCit2b2lkIHZob3N0X3BvbGxfaW5pdChzdHJ1Y3Qgdmhvc3RfcG9sbCAqcG9sbCwgd29ya19mdW5jX3QgZnVuYywKKwkJICAgICB1bnNpZ25lZCBsb25nIG1hc2spCit7CisJSU5JVF9XT1JLKCZwb2xsLT53b3JrLCBmdW5jKTsKKwlpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KCZwb2xsLT53YWl0LCB2aG9zdF9wb2xsX3dha2V1cCk7CisJaW5pdF9wb2xsX2Z1bmNwdHIoJnBvbGwtPnRhYmxlLCB2aG9zdF9wb2xsX2Z1bmMpOworCXBvbGwtPm1hc2sgPSBtYXNrOworfQorCisvKiBTdGFydCBwb2xsaW5nIGEgZmlsZS4gV2UgYWRkIG91cnNlbHZlcyB0byBmaWxlJ3Mgd2FpdCBxdWV1ZS4gVGhlIGNhbGxlciBtdXN0CisgKiBrZWVwIGEgcmVmZXJlbmNlIHRvIGEgZmlsZSB1bnRpbCBhZnRlciB2aG9zdF9wb2xsX3N0b3AgaXMgY2FsbGVkLiAqLwordm9pZCB2aG9zdF9wb2xsX3N0YXJ0KHN0cnVjdCB2aG9zdF9wb2xsICpwb2xsLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwl1bnNpZ25lZCBsb25nIG1hc2s7CisJbWFzayA9IGZpbGUtPmZfb3AtPnBvbGwoZmlsZSwgJnBvbGwtPnRhYmxlKTsKKwlpZiAobWFzaykKKwkJdmhvc3RfcG9sbF93YWtldXAoJnBvbGwtPndhaXQsIDAsIDAsICh2b2lkICopbWFzayk7Cit9CisKKy8qIFN0b3AgcG9sbGluZyBhIGZpbGUuIEFmdGVyIHRoaXMgZnVuY3Rpb24gcmV0dXJucywgaXQgYmVjb21lcyBzYWZlIHRvIGRyb3AgdGhlCisgKiBmaWxlIHJlZmVyZW5jZS4gWW91IG11c3QgYWxzbyBmbHVzaCBhZnRlcndhcmRzLiAqLwordm9pZCB2aG9zdF9wb2xsX3N0b3Aoc3RydWN0IHZob3N0X3BvbGwgKnBvbGwpCit7CisJcmVtb3ZlX3dhaXRfcXVldWUocG9sbC0+d3FoLCAmcG9sbC0+d2FpdCk7Cit9CisKKy8qIEZsdXNoIGFueSB3b3JrIHRoYXQgaGFzIGJlZW4gc2NoZWR1bGVkLiBXaGVuIGNhbGxpbmcgdGhpcywgZG9uJ3QgaG9sZCBhbnkKKyAqIGxvY2tzIHRoYXQgYXJlIGFsc28gdXNlZCBieSB0aGUgY2FsbGJhY2suICovCit2b2lkIHZob3N0X3BvbGxfZmx1c2goc3RydWN0IHZob3N0X3BvbGwgKnBvbGwpCit7CisJZmx1c2hfd29yaygmcG9sbC0+d29yayk7Cit9CisKK3ZvaWQgdmhvc3RfcG9sbF9xdWV1ZShzdHJ1Y3Qgdmhvc3RfcG9sbCAqcG9sbCkKK3sKKwlxdWV1ZV93b3JrKHZob3N0X3dvcmtxdWV1ZSwgJnBvbGwtPndvcmspOworfQorCitzdGF0aWMgdm9pZCB2aG9zdF92cV9yZXNldChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsCisJCQkgICBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKK3sKKwl2cS0+bnVtID0gMTsKKwl2cS0+ZGVzYyA9IE5VTEw7CisJdnEtPmF2YWlsID0gTlVMTDsKKwl2cS0+dXNlZCA9IE5VTEw7CisJdnEtPmxhc3RfYXZhaWxfaWR4ID0gMDsKKwl2cS0+YXZhaWxfaWR4ID0gMDsKKwl2cS0+bGFzdF91c2VkX2lkeCA9IDA7CisJdnEtPnVzZWRfZmxhZ3MgPSAwOworCXZxLT51c2VkX2ZsYWdzID0gMDsKKwl2cS0+bG9nX3VzZWQgPSBmYWxzZTsKKwl2cS0+bG9nX2FkZHIgPSAtMXVsbDsKKwl2cS0+aGRyX3NpemUgPSAwOworCXZxLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXZxLT5sb2dfYmFzZSA9IE5VTEw7CisJdnEtPmVycm9yX2N0eCA9IE5VTEw7CisJdnEtPmVycm9yID0gTlVMTDsKKwl2cS0+a2ljayA9IE5VTEw7CisJdnEtPmNhbGxfY3R4ID0gTlVMTDsKKwl2cS0+Y2FsbCA9IE5VTEw7CisJdnEtPmxvZ19jdHggPSBOVUxMOworfQorCitsb25nIHZob3N0X2Rldl9pbml0KHN0cnVjdCB2aG9zdF9kZXYgKmRldiwKKwkJICAgIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxcywgaW50IG52cXMpCit7CisJaW50IGk7CisJZGV2LT52cXMgPSB2cXM7CisJZGV2LT5udnFzID0gbnZxczsKKwltdXRleF9pbml0KCZkZXYtPm11dGV4KTsKKwlkZXYtPmxvZ19jdHggPSBOVUxMOworCWRldi0+bG9nX2ZpbGUgPSBOVUxMOworCWRldi0+bWVtb3J5ID0gTlVMTDsKKwlkZXYtPm1tID0gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm52cXM7ICsraSkgeworCQlkZXYtPnZxc1tpXS5kZXYgPSBkZXY7CisJCW11dGV4X2luaXQoJmRldi0+dnFzW2ldLm11dGV4KTsKKwkJdmhvc3RfdnFfcmVzZXQoZGV2LCBkZXYtPnZxcyArIGkpOworCQlpZiAoZGV2LT52cXNbaV0uaGFuZGxlX2tpY2spCisJCQl2aG9zdF9wb2xsX2luaXQoJmRldi0+dnFzW2ldLnBvbGwsCisJCQkJCWRldi0+dnFzW2ldLmhhbmRsZV9raWNrLAorCQkJCQlQT0xMSU4pOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogQ2FsbGVyIHNob3VsZCBoYXZlIGRldmljZSBtdXRleCAqLworbG9uZyB2aG9zdF9kZXZfY2hlY2tfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2KQoreworCS8qIEFyZSB5b3UgdGhlIG93bmVyPyBJZiBub3QsIEkgZG9uJ3QgdGhpbmsgeW91IG1lYW4gdG8gZG8gdGhhdCAqLworCXJldHVybiBkZXYtPm1tID09IGN1cnJlbnQtPm1tID8gMCA6IC1FUEVSTTsKK30KKworLyogQ2FsbGVyIHNob3VsZCBoYXZlIGRldmljZSBtdXRleCAqLworc3RhdGljIGxvbmcgdmhvc3RfZGV2X3NldF9vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYpCit7CisJLyogSXMgdGhlcmUgYW4gb3duZXIgYWxyZWFkeT8gKi8KKwlpZiAoZGV2LT5tbSkKKwkJcmV0dXJuIC1FQlVTWTsKKwkvKiBObyBvd25lciwgYmVjb21lIG9uZSAqLworCWRldi0+bW0gPSBnZXRfdGFza19tbShjdXJyZW50KTsKKwlyZXR1cm4gMDsKK30KKworLyogQ2FsbGVyIHNob3VsZCBoYXZlIGRldmljZSBtdXRleCAqLworbG9uZyB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqZGV2KQoreworCXN0cnVjdCB2aG9zdF9tZW1vcnkgKm1lbW9yeTsKKworCS8qIFJlc3RvcmUgbWVtb3J5IHRvIGRlZmF1bHQgZW1wdHkgbWFwcGluZy4gKi8KKwltZW1vcnkgPSBrbWFsbG9jKG9mZnNldG9mKHN0cnVjdCB2aG9zdF9tZW1vcnksIHJlZ2lvbnMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1lbW9yeSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl2aG9zdF9kZXZfY2xlYW51cChkZXYpOworCisJbWVtb3J5LT5ucmVnaW9ucyA9IDA7CisJZGV2LT5tZW1vcnkgPSBtZW1vcnk7CisJcmV0dXJuIDA7Cit9CisKKy8qIENhbGxlciBzaG91bGQgaGF2ZSBkZXZpY2UgbXV0ZXggKi8KK3ZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqZGV2KQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBkZXYtPm52cXM7ICsraSkgeworCQlpZiAoZGV2LT52cXNbaV0ua2ljayAmJiBkZXYtPnZxc1tpXS5oYW5kbGVfa2ljaykgeworCQkJdmhvc3RfcG9sbF9zdG9wKCZkZXYtPnZxc1tpXS5wb2xsKTsKKwkJCXZob3N0X3BvbGxfZmx1c2goJmRldi0+dnFzW2ldLnBvbGwpOworCQl9CisJCWlmIChkZXYtPnZxc1tpXS5lcnJvcl9jdHgpCisJCQlldmVudGZkX2N0eF9wdXQoZGV2LT52cXNbaV0uZXJyb3JfY3R4KTsKKwkJaWYgKGRldi0+dnFzW2ldLmVycm9yKQorCQkJZnB1dChkZXYtPnZxc1tpXS5lcnJvcik7CisJCWlmIChkZXYtPnZxc1tpXS5raWNrKQorCQkJZnB1dChkZXYtPnZxc1tpXS5raWNrKTsKKwkJaWYgKGRldi0+dnFzW2ldLmNhbGxfY3R4KQorCQkJZXZlbnRmZF9jdHhfcHV0KGRldi0+dnFzW2ldLmNhbGxfY3R4KTsKKwkJaWYgKGRldi0+dnFzW2ldLmNhbGwpCisJCQlmcHV0KGRldi0+dnFzW2ldLmNhbGwpOworCQl2aG9zdF92cV9yZXNldChkZXYsIGRldi0+dnFzICsgaSk7CisJfQorCWlmIChkZXYtPmxvZ19jdHgpCisJCWV2ZW50ZmRfY3R4X3B1dChkZXYtPmxvZ19jdHgpOworCWRldi0+bG9nX2N0eCA9IE5VTEw7CisJaWYgKGRldi0+bG9nX2ZpbGUpCisJCWZwdXQoZGV2LT5sb2dfZmlsZSk7CisJZGV2LT5sb2dfZmlsZSA9IE5VTEw7CisJLyogTm8gb25lIHdpbGwgYWNjZXNzIG1lbW9yeSBhdCB0aGlzIHBvaW50ICovCisJa2ZyZWUoZGV2LT5tZW1vcnkpOworCWRldi0+bWVtb3J5ID0gTlVMTDsKKwlpZiAoZGV2LT5tbSkKKwkJbW1wdXQoZGV2LT5tbSk7CisJZGV2LT5tbSA9IE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgbG9nX2FjY2Vzc19vayh2b2lkIF9fdXNlciAqbG9nX2Jhc2UsIHU2NCBhZGRyLCB1bnNpZ25lZCBsb25nIHN6KQoreworCXU2NCBhID0gYWRkciAvIFZIT1NUX1BBR0VfU0laRSAvIDg7CisJLyogTWFrZSBzdXJlIDY0IGJpdCBtYXRoIHdpbGwgbm90IG92ZXJmbG93LiAqLworCWlmIChhID4gVUxPTkdfTUFYIC0gKHVuc2lnbmVkIGxvbmcpbG9nX2Jhc2UgfHwKKwkgICAgYSArICh1bnNpZ25lZCBsb25nKWxvZ19iYXNlID4gVUxPTkdfTUFYKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCXJldHVybiBhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBsb2dfYmFzZSArIGEsCisJCQkgKHN6ICsgVkhPU1RfUEFHRV9TSVpFICogOCAtIDEpIC8gVkhPU1RfUEFHRV9TSVpFIC8gOCk7Cit9CisKKy8qIENhbGxlciBzaG91bGQgaGF2ZSB2cSBtdXRleCBhbmQgZGV2aWNlIG11dGV4LiAqLworc3RhdGljIGludCB2cV9tZW1vcnlfYWNjZXNzX29rKHZvaWQgX191c2VyICpsb2dfYmFzZSwgc3RydWN0IHZob3N0X21lbW9yeSAqbWVtLAorCQkJICAgICAgIGludCBsb2dfYWxsKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBtZW0tPm5yZWdpb25zOyArK2kpIHsKKwkJc3RydWN0IHZob3N0X21lbW9yeV9yZWdpb24gKm0gPSBtZW0tPnJlZ2lvbnMgKyBpOworCQl1bnNpZ25lZCBsb25nIGEgPSBtLT51c2Vyc3BhY2VfYWRkcjsKKwkJaWYgKG0tPm1lbW9yeV9zaXplID4gVUxPTkdfTUFYKQorCQkJcmV0dXJuIDA7CisJCWVsc2UgaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCAodm9pZCBfX3VzZXIgKilhLAorCQkJCSAgICBtLT5tZW1vcnlfc2l6ZSkpCisJCQlyZXR1cm4gMDsKKwkJZWxzZSBpZiAobG9nX2FsbCAmJiAhbG9nX2FjY2Vzc19vayhsb2dfYmFzZSwKKwkJCQkJCSAgIG0tPmd1ZXN0X3BoeXNfYWRkciwKKwkJCQkJCSAgIG0tPm1lbW9yeV9zaXplKSkKKwkJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworLyogQ2FuIHdlIHN3aXRjaCB0byB0aGlzIG1lbW9yeSB0YWJsZT8gKi8KKy8qIENhbGxlciBzaG91bGQgaGF2ZSBkZXZpY2UgbXV0ZXggYnV0IG5vdCB2cSBtdXRleCAqLworc3RhdGljIGludCBtZW1vcnlfYWNjZXNzX29rKHN0cnVjdCB2aG9zdF9kZXYgKmQsIHN0cnVjdCB2aG9zdF9tZW1vcnkgKm1lbSwKKwkJCSAgICBpbnQgbG9nX2FsbCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSAwOyBpIDwgZC0+bnZxczsgKytpKSB7CisJCWludCBvazsKKwkJbXV0ZXhfbG9jaygmZC0+dnFzW2ldLm11dGV4KTsKKwkJLyogSWYgcmluZyBpcyBpbmFjdGl2ZSwgd2lsbCBjaGVjayB3aGVuIGl0J3MgZW5hYmxlZC4gKi8KKwkJaWYgKGQtPnZxc1tpXS5wcml2YXRlX2RhdGEpCisJCQlvayA9IHZxX21lbW9yeV9hY2Nlc3Nfb2soZC0+dnFzW2ldLmxvZ19iYXNlLCBtZW0sCisJCQkJCQkgbG9nX2FsbCk7CisJCWVsc2UKKwkJCW9rID0gMTsKKwkJbXV0ZXhfdW5sb2NrKCZkLT52cXNbaV0ubXV0ZXgpOworCQlpZiAoIW9rKQorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHZxX2FjY2Vzc19vayh1bnNpZ25lZCBpbnQgbnVtLAorCQkJc3RydWN0IHZyaW5nX2Rlc2MgX191c2VyICpkZXNjLAorCQkJc3RydWN0IHZyaW5nX2F2YWlsIF9fdXNlciAqYXZhaWwsCisJCQlzdHJ1Y3QgdnJpbmdfdXNlZCBfX3VzZXIgKnVzZWQpCit7CisJcmV0dXJuIGFjY2Vzc19vayhWRVJJRllfUkVBRCwgZGVzYywgbnVtICogc2l6ZW9mICpkZXNjKSAmJgorCSAgICAgICBhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGF2YWlsLAorCQkJIHNpemVvZiAqYXZhaWwgKyBudW0gKiBzaXplb2YgKmF2YWlsLT5yaW5nKSAmJgorCSAgICAgICBhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCB1c2VkLAorCQkJc2l6ZW9mICp1c2VkICsgbnVtICogc2l6ZW9mICp1c2VkLT5yaW5nKTsKK30KKworLyogQ2FuIHdlIGxvZyB3cml0ZXM/ICovCisvKiBDYWxsZXIgc2hvdWxkIGhhdmUgZGV2aWNlIG11dGV4IGJ1dCBub3QgdnEgbXV0ZXggKi8KK2ludCB2aG9zdF9sb2dfYWNjZXNzX29rKHN0cnVjdCB2aG9zdF9kZXYgKmRldikKK3sKKwlyZXR1cm4gbWVtb3J5X2FjY2Vzc19vayhkZXYsIGRldi0+bWVtb3J5LCAxKTsKK30KKworLyogVmVyaWZ5IGFjY2VzcyBmb3Igd3JpdGUgbG9nZ2luZy4gKi8KKy8qIENhbGxlciBzaG91bGQgaGF2ZSB2cSBtdXRleCBhbmQgZGV2aWNlIG11dGV4ICovCitzdGF0aWMgaW50IHZxX2xvZ19hY2Nlc3Nfb2soc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHZvaWQgX191c2VyICpsb2dfYmFzZSkKK3sKKwlyZXR1cm4gdnFfbWVtb3J5X2FjY2Vzc19vayhsb2dfYmFzZSwgdnEtPmRldi0+bWVtb3J5LAorCQkJICAgIHZob3N0X2hhc19mZWF0dXJlKHZxLT5kZXYsIFZIT1NUX0ZfTE9HX0FMTCkpICYmCisJCSghdnEtPmxvZ191c2VkIHx8IGxvZ19hY2Nlc3Nfb2sobG9nX2Jhc2UsIHZxLT5sb2dfYWRkciwKKwkJCQkJc2l6ZW9mICp2cS0+dXNlZCArCisJCQkJCXZxLT5udW0gKiBzaXplb2YgKnZxLT51c2VkLT5yaW5nKSk7Cit9CisKKy8qIENhbiB3ZSBzdGFydCB2cT8gKi8KKy8qIENhbGxlciBzaG91bGQgaGF2ZSB2cSBtdXRleCBhbmQgZGV2aWNlIG11dGV4ICovCitpbnQgdmhvc3RfdnFfYWNjZXNzX29rKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQoreworCXJldHVybiB2cV9hY2Nlc3Nfb2sodnEtPm51bSwgdnEtPmRlc2MsIHZxLT5hdmFpbCwgdnEtPnVzZWQpICYmCisJCXZxX2xvZ19hY2Nlc3Nfb2sodnEsIHZxLT5sb2dfYmFzZSk7Cit9CisKK3N0YXRpYyBsb25nIHZob3N0X3NldF9tZW1vcnkoc3RydWN0IHZob3N0X2RldiAqZCwgc3RydWN0IHZob3N0X21lbW9yeSBfX3VzZXIgKm0pCit7CisJc3RydWN0IHZob3N0X21lbW9yeSBtZW0sICpuZXdtZW0sICpvbGRtZW07CisJdW5zaWduZWQgbG9uZyBzaXplID0gb2Zmc2V0b2Yoc3RydWN0IHZob3N0X21lbW9yeSwgcmVnaW9ucyk7CisJbG9uZyByOworCXIgPSBjb3B5X2Zyb21fdXNlcigmbWVtLCBtLCBzaXplKTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisJaWYgKG1lbS5wYWRkaW5nKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJaWYgKG1lbS5ucmVnaW9ucyA+IFZIT1NUX01FTU9SWV9NQVhfTlJFR0lPTlMpCisJCXJldHVybiAtRTJCSUc7CisJbmV3bWVtID0ga21hbGxvYyhzaXplICsgbWVtLm5yZWdpb25zICogc2l6ZW9mICptLT5yZWdpb25zLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld21lbSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkobmV3bWVtLCAmbWVtLCBzaXplKTsKKwlyID0gY29weV9mcm9tX3VzZXIobmV3bWVtLT5yZWdpb25zLCBtLT5yZWdpb25zLAorCQkJICAgbWVtLm5yZWdpb25zICogc2l6ZW9mICptLT5yZWdpb25zKTsKKwlpZiAocikgeworCQlrZnJlZShuZXdtZW0pOworCQlyZXR1cm4gcjsKKwl9CisKKwlpZiAoIW1lbW9yeV9hY2Nlc3Nfb2soZCwgbmV3bWVtLCB2aG9zdF9oYXNfZmVhdHVyZShkLCBWSE9TVF9GX0xPR19BTEwpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJb2xkbWVtID0gZC0+bWVtb3J5OworCXJjdV9hc3NpZ25fcG9pbnRlcihkLT5tZW1vcnksIG5ld21lbSk7CisJc3luY2hyb25pemVfcmN1KCk7CisJa2ZyZWUob2xkbWVtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpbml0X3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCisJCSAgICAgc3RydWN0IHZyaW5nX3VzZWQgX191c2VyICp1c2VkKQoreworCWludCByID0gcHV0X3VzZXIodnEtPnVzZWRfZmxhZ3MsICZ1c2VkLT5mbGFncyk7CisJaWYgKHIpCisJCXJldHVybiByOworCXJldHVybiBnZXRfdXNlcih2cS0+bGFzdF91c2VkX2lkeCwgJnVzZWQtPmlkeCk7Cit9CisKK3N0YXRpYyBsb25nIHZob3N0X3NldF92cmluZyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkLCBpbnQgaW9jdGwsIHZvaWQgX191c2VyICphcmdwKQoreworCXN0cnVjdCBmaWxlICpldmVudGZwLCAqZmlsZXAgPSBOVUxMLAorCQkgICAgKnBvbGxzdGFydCA9IE5VTEwsICpwb2xsc3RvcCA9IE5VTEw7CisJc3RydWN0IGV2ZW50ZmRfY3R4ICpjdHggPSBOVUxMOworCXUzMiBfX3VzZXIgKmlkeHAgPSBhcmdwOworCXN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxOworCXN0cnVjdCB2aG9zdF92cmluZ19zdGF0ZSBzOworCXN0cnVjdCB2aG9zdF92cmluZ19maWxlIGY7CisJc3RydWN0IHZob3N0X3ZyaW5nX2FkZHIgYTsKKwl1MzIgaWR4OworCWxvbmcgcjsKKworCXIgPSBnZXRfdXNlcihpZHgsIGlkeHApOworCWlmIChyIDwgMCkKKwkJcmV0dXJuIHI7CisJaWYgKGlkeCA+IGQtPm52cXMpCisJCXJldHVybiAtRU5PQlVGUzsKKworCXZxID0gZC0+dnFzICsgaWR4OworCisJbXV0ZXhfbG9jaygmdnEtPm11dGV4KTsKKworCXN3aXRjaCAoaW9jdGwpIHsKKwljYXNlIFZIT1NUX1NFVF9WUklOR19OVU06CisJCS8qIFJlc2l6aW5nIHJpbmcgd2l0aCBhbiBhY3RpdmUgYmFja2VuZD8KKwkJICogWW91IGRvbid0IHdhbnQgdG8gZG8gdGhhdC4gKi8KKwkJaWYgKHZxLT5wcml2YXRlX2RhdGEpIHsKKwkJCXIgPSAtRUJVU1k7CisJCQlicmVhazsKKwkJfQorCQlyID0gY29weV9mcm9tX3VzZXIoJnMsIGFyZ3AsIHNpemVvZiBzKTsKKwkJaWYgKHIgPCAwKQorCQkJYnJlYWs7CisJCWlmICghcy5udW0gfHwgcy5udW0gPiAweGZmZmYgfHwgKHMubnVtICYgKHMubnVtIC0gMSkpKSB7CisJCQlyID0gLUVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXZxLT5udW0gPSBzLm51bTsKKwkJYnJlYWs7CisJY2FzZSBWSE9TVF9TRVRfVlJJTkdfQkFTRToKKwkJLyogTW92aW5nIGJhc2Ugd2l0aCBhbiBhY3RpdmUgYmFja2VuZD8KKwkJICogWW91IGRvbid0IHdhbnQgdG8gZG8gdGhhdC4gKi8KKwkJaWYgKHZxLT5wcml2YXRlX2RhdGEpIHsKKwkJCXIgPSAtRUJVU1k7CisJCQlicmVhazsKKwkJfQorCQlyID0gY29weV9mcm9tX3VzZXIoJnMsIGFyZ3AsIHNpemVvZiBzKTsKKwkJaWYgKHIgPCAwKQorCQkJYnJlYWs7CisJCWlmIChzLm51bSA+IDB4ZmZmZikgeworCQkJciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQl2cS0+bGFzdF9hdmFpbF9pZHggPSBzLm51bTsKKwkJLyogRm9yZ2V0IHRoZSBjYWNoZWQgaW5kZXggdmFsdWUuICovCisJCXZxLT5hdmFpbF9pZHggPSB2cS0+bGFzdF9hdmFpbF9pZHg7CisJCWJyZWFrOworCWNhc2UgVkhPU1RfR0VUX1ZSSU5HX0JBU0U6CisJCXMuaW5kZXggPSBpZHg7CisJCXMubnVtID0gdnEtPmxhc3RfYXZhaWxfaWR4OworCQlyID0gY29weV90b191c2VyKGFyZ3AsICZzLCBzaXplb2Ygcyk7CisJCWJyZWFrOworCWNhc2UgVkhPU1RfU0VUX1ZSSU5HX0FERFI6CisJCXIgPSBjb3B5X2Zyb21fdXNlcigmYSwgYXJncCwgc2l6ZW9mIGEpOworCQlpZiAociA8IDApCisJCQlicmVhazsKKwkJaWYgKGEuZmxhZ3MgJiB+KDB4MSA8PCBWSE9TVF9WUklOR19GX0xPRykpIHsKKwkJCXIgPSAtRU9QTk9UU1VQUDsKKwkJCWJyZWFrOworCQl9CisJCS8qIEZvciAzMmJpdCwgdmVyaWZ5IHRoYXQgdGhlIHRvcCAzMmJpdHMgb2YgdGhlIHVzZXIKKwkJICAgZGF0YSBhcmUgc2V0IHRvIHplcm8uICovCisJCWlmICgodTY0KSh1bnNpZ25lZCBsb25nKWEuZGVzY191c2VyX2FkZHIgIT0gYS5kZXNjX3VzZXJfYWRkciB8fAorCQkgICAgKHU2NCkodW5zaWduZWQgbG9uZylhLnVzZWRfdXNlcl9hZGRyICE9IGEudXNlZF91c2VyX2FkZHIgfHwKKwkJICAgICh1NjQpKHVuc2lnbmVkIGxvbmcpYS5hdmFpbF91c2VyX2FkZHIgIT0gYS5hdmFpbF91c2VyX2FkZHIpIHsKKwkJCXIgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKChhLmF2YWlsX3VzZXJfYWRkciAmIChzaXplb2YgKnZxLT5hdmFpbC0+cmluZyAtIDEpKSB8fAorCQkgICAgKGEudXNlZF91c2VyX2FkZHIgJiAoc2l6ZW9mICp2cS0+dXNlZC0+cmluZyAtIDEpKSB8fAorCQkgICAgKGEubG9nX2d1ZXN0X2FkZHIgJiAoc2l6ZW9mICp2cS0+dXNlZC0+cmluZyAtIDEpKSkgeworCQkJciA9IC1FSU5WQUw7CisJCQlicmVhazsKKwkJfQorCisJCS8qIFdlIG9ubHkgdmVyaWZ5IGFjY2VzcyBoZXJlIGlmIGJhY2tlbmQgaXMgY29uZmlndXJlZC4KKwkJICogSWYgaXQgaXMgbm90LCB3ZSBkb24ndCBhcyBzaXplIG1pZ2h0IG5vdCBoYXZlIGJlZW4gc2V0dXAuCisJCSAqIFdlIHdpbGwgdmVyaWZ5IHdoZW4gYmFja2VuZCBpcyBjb25maWd1cmVkLiAqLworCQlpZiAodnEtPnByaXZhdGVfZGF0YSkgeworCQkJaWYgKCF2cV9hY2Nlc3Nfb2sodnEtPm51bSwKKwkJCQkodm9pZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZylhLmRlc2NfdXNlcl9hZGRyLAorCQkJCSh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWEuYXZhaWxfdXNlcl9hZGRyLAorCQkJCSh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWEudXNlZF91c2VyX2FkZHIpKSB7CisJCQkJciA9IC1FSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCS8qIEFsc28gdmFsaWRhdGUgbG9nIGFjY2VzcyBmb3IgdXNlZCByaW5nIGlmIGVuYWJsZWQuICovCisJCQlpZiAoKGEuZmxhZ3MgJiAoMHgxIDw8IFZIT1NUX1ZSSU5HX0ZfTE9HKSkgJiYKKwkJCSAgICAhbG9nX2FjY2Vzc19vayh2cS0+bG9nX2Jhc2UsIGEubG9nX2d1ZXN0X2FkZHIsCisJCQkJCSAgIHNpemVvZiAqdnEtPnVzZWQgKworCQkJCQkgICB2cS0+bnVtICogc2l6ZW9mICp2cS0+dXNlZC0+cmluZykpIHsKKwkJCQlyID0gLUVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCXIgPSBpbml0X3VzZWQodnEsIChzdHJ1Y3QgdnJpbmdfdXNlZCBfX3VzZXIgKikodW5zaWduZWQgbG9uZykKKwkJCSAgICAgIGEudXNlZF91c2VyX2FkZHIpOworCQlpZiAocikKKwkJCWJyZWFrOworCQl2cS0+bG9nX3VzZWQgPSAhIShhLmZsYWdzICYgKDB4MSA8PCBWSE9TVF9WUklOR19GX0xPRykpOworCQl2cS0+ZGVzYyA9ICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWEuZGVzY191c2VyX2FkZHI7CisJCXZxLT5hdmFpbCA9ICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWEuYXZhaWxfdXNlcl9hZGRyOworCQl2cS0+bG9nX2FkZHIgPSBhLmxvZ19ndWVzdF9hZGRyOworCQl2cS0+dXNlZCA9ICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWEudXNlZF91c2VyX2FkZHI7CisJCWJyZWFrOworCWNhc2UgVkhPU1RfU0VUX1ZSSU5HX0tJQ0s6CisJCXIgPSBjb3B5X2Zyb21fdXNlcigmZiwgYXJncCwgc2l6ZW9mIGYpOworCQlpZiAociA8IDApCisJCQlicmVhazsKKwkJZXZlbnRmcCA9IGYuZmQgPT0gLTEgPyBOVUxMIDogZXZlbnRmZF9mZ2V0KGYuZmQpOworCQlpZiAoSVNfRVJSKGV2ZW50ZnApKQorCQkJcmV0dXJuIFBUUl9FUlIoZXZlbnRmcCk7CisJCWlmIChldmVudGZwICE9IHZxLT5raWNrKSB7CisJCQlwb2xsc3RvcCA9IGZpbGVwID0gdnEtPmtpY2s7CisJCQlwb2xsc3RhcnQgPSB2cS0+a2ljayA9IGV2ZW50ZnA7CisJCX0gZWxzZQorCQkJZmlsZXAgPSBldmVudGZwOworCQlicmVhazsKKwljYXNlIFZIT1NUX1NFVF9WUklOR19DQUxMOgorCQlyID0gY29weV9mcm9tX3VzZXIoJmYsIGFyZ3AsIHNpemVvZiBmKTsKKwkJaWYgKHIgPCAwKQorCQkJYnJlYWs7CisJCWV2ZW50ZnAgPSBmLmZkID09IC0xID8gTlVMTCA6IGV2ZW50ZmRfZmdldChmLmZkKTsKKwkJaWYgKElTX0VSUihldmVudGZwKSkKKwkJCXJldHVybiBQVFJfRVJSKGV2ZW50ZnApOworCQlpZiAoZXZlbnRmcCAhPSB2cS0+Y2FsbCkgeworCQkJZmlsZXAgPSB2cS0+Y2FsbDsKKwkJCWN0eCA9IHZxLT5jYWxsX2N0eDsKKwkJCXZxLT5jYWxsID0gZXZlbnRmcDsKKwkJCXZxLT5jYWxsX2N0eCA9IGV2ZW50ZnAgPworCQkJCWV2ZW50ZmRfY3R4X2ZpbGVnZXQoZXZlbnRmcCkgOiBOVUxMOworCQl9IGVsc2UKKwkJCWZpbGVwID0gZXZlbnRmcDsKKwkJYnJlYWs7CisJY2FzZSBWSE9TVF9TRVRfVlJJTkdfRVJSOgorCQlyID0gY29weV9mcm9tX3VzZXIoJmYsIGFyZ3AsIHNpemVvZiBmKTsKKwkJaWYgKHIgPCAwKQorCQkJYnJlYWs7CisJCWV2ZW50ZnAgPSBmLmZkID09IC0xID8gTlVMTCA6IGV2ZW50ZmRfZmdldChmLmZkKTsKKwkJaWYgKElTX0VSUihldmVudGZwKSkKKwkJCXJldHVybiBQVFJfRVJSKGV2ZW50ZnApOworCQlpZiAoZXZlbnRmcCAhPSB2cS0+ZXJyb3IpIHsKKwkJCWZpbGVwID0gdnEtPmVycm9yOworCQkJdnEtPmVycm9yID0gZXZlbnRmcDsKKwkJCWN0eCA9IHZxLT5lcnJvcl9jdHg7CisJCQl2cS0+ZXJyb3JfY3R4ID0gZXZlbnRmcCA/CisJCQkJZXZlbnRmZF9jdHhfZmlsZWdldChldmVudGZwKSA6IE5VTEw7CisJCX0gZWxzZQorCQkJZmlsZXAgPSBldmVudGZwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyID0gLUVOT0lPQ1RMQ01EOworCX0KKworCWlmIChwb2xsc3RvcCAmJiB2cS0+aGFuZGxlX2tpY2spCisJCXZob3N0X3BvbGxfc3RvcCgmdnEtPnBvbGwpOworCisJaWYgKGN0eCkKKwkJZXZlbnRmZF9jdHhfcHV0KGN0eCk7CisJaWYgKGZpbGVwKQorCQlmcHV0KGZpbGVwKTsKKworCWlmIChwb2xsc3RhcnQgJiYgdnEtPmhhbmRsZV9raWNrKQorCQl2aG9zdF9wb2xsX3N0YXJ0KCZ2cS0+cG9sbCwgdnEtPmtpY2spOworCisJbXV0ZXhfdW5sb2NrKCZ2cS0+bXV0ZXgpOworCisJaWYgKHBvbGxzdG9wICYmIHZxLT5oYW5kbGVfa2ljaykKKwkJdmhvc3RfcG9sbF9mbHVzaCgmdnEtPnBvbGwpOworCXJldHVybiByOworfQorCisvKiBDYWxsZXIgbXVzdCBoYXZlIGRldmljZSBtdXRleCAqLworbG9uZyB2aG9zdF9kZXZfaW9jdGwoc3RydWN0IHZob3N0X2RldiAqZCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKKwlzdHJ1Y3QgZmlsZSAqZXZlbnRmcCwgKmZpbGVwID0gTlVMTDsKKwlzdHJ1Y3QgZXZlbnRmZF9jdHggKmN0eCA9IE5VTEw7CisJdTY0IHA7CisJbG9uZyByOworCWludCBpLCBmZDsKKworCS8qIElmIHlvdSBhcmUgbm90IHRoZSBvd25lciwgeW91IGNhbiBiZWNvbWUgb25lICovCisJaWYgKGlvY3RsID09IFZIT1NUX1NFVF9PV05FUikgeworCQlyID0gdmhvc3RfZGV2X3NldF9vd25lcihkKTsKKwkJZ290byBkb25lOworCX0KKworCS8qIFlvdSBtdXN0IGJlIHRoZSBvd25lciB0byBkbyBhbnl0aGluZyBlbHNlICovCisJciA9IHZob3N0X2Rldl9jaGVja19vd25lcihkKTsKKwlpZiAocikKKwkJZ290byBkb25lOworCisJc3dpdGNoIChpb2N0bCkgeworCWNhc2UgVkhPU1RfU0VUX01FTV9UQUJMRToKKwkJciA9IHZob3N0X3NldF9tZW1vcnkoZCwgYXJncCk7CisJCWJyZWFrOworCWNhc2UgVkhPU1RfU0VUX0xPR19CQVNFOgorCQlyID0gY29weV9mcm9tX3VzZXIoJnAsIGFyZ3AsIHNpemVvZiBwKTsKKwkJaWYgKHIgPCAwKQorCQkJYnJlYWs7CisJCWlmICgodTY0KSh1bnNpZ25lZCBsb25nKXAgIT0gcCkgeworCQkJciA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgZC0+bnZxczsgKytpKSB7CisJCQlzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cTsKKwkJCXZvaWQgX191c2VyICpiYXNlID0gKHZvaWQgX191c2VyICopKHVuc2lnbmVkIGxvbmcpcDsKKwkJCXZxID0gZC0+dnFzICsgaTsKKwkJCW11dGV4X2xvY2soJnZxLT5tdXRleCk7CisJCQkvKiBJZiByaW5nIGlzIGluYWN0aXZlLCB3aWxsIGNoZWNrIHdoZW4gaXQncyBlbmFibGVkLiAqLworCQkJaWYgKHZxLT5wcml2YXRlX2RhdGEgJiYgIXZxX2xvZ19hY2Nlc3Nfb2sodnEsIGJhc2UpKQorCQkJCXIgPSAtRUZBVUxUOworCQkJZWxzZQorCQkJCXZxLT5sb2dfYmFzZSA9IGJhc2U7CisJCQltdXRleF91bmxvY2soJnZxLT5tdXRleCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWSE9TVF9TRVRfTE9HX0ZEOgorCQlyID0gZ2V0X3VzZXIoZmQsIChpbnQgX191c2VyICopYXJncCk7CisJCWlmIChyIDwgMCkKKwkJCWJyZWFrOworCQlldmVudGZwID0gZmQgPT0gLTEgPyBOVUxMIDogZXZlbnRmZF9mZ2V0KGZkKTsKKwkJaWYgKElTX0VSUihldmVudGZwKSkgeworCQkJciA9IFBUUl9FUlIoZXZlbnRmcCk7CisJCQlicmVhazsKKwkJfQorCQlpZiAoZXZlbnRmcCAhPSBkLT5sb2dfZmlsZSkgeworCQkJZmlsZXAgPSBkLT5sb2dfZmlsZTsKKwkJCWN0eCA9IGQtPmxvZ19jdHg7CisJCQlkLT5sb2dfY3R4ID0gZXZlbnRmcCA/CisJCQkJZXZlbnRmZF9jdHhfZmlsZWdldChldmVudGZwKSA6IE5VTEw7CisJCX0gZWxzZQorCQkJZmlsZXAgPSBldmVudGZwOworCQlmb3IgKGkgPSAwOyBpIDwgZC0+bnZxczsgKytpKSB7CisJCQltdXRleF9sb2NrKCZkLT52cXNbaV0ubXV0ZXgpOworCQkJZC0+dnFzW2ldLmxvZ19jdHggPSBkLT5sb2dfY3R4OworCQkJbXV0ZXhfdW5sb2NrKCZkLT52cXNbaV0ubXV0ZXgpOworCQl9CisJCWlmIChjdHgpCisJCQlldmVudGZkX2N0eF9wdXQoY3R4KTsKKwkJaWYgKGZpbGVwKQorCQkJZnB1dChmaWxlcCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXIgPSB2aG9zdF9zZXRfdnJpbmcoZCwgaW9jdGwsIGFyZ3ApOworCQlicmVhazsKKwl9Citkb25lOgorCXJldHVybiByOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHZob3N0X21lbW9yeV9yZWdpb24gKmZpbmRfcmVnaW9uKHN0cnVjdCB2aG9zdF9tZW1vcnkgKm1lbSwKKwkJCQkJCSAgICAgX191NjQgYWRkciwgX191MzIgbGVuKQoreworCXN0cnVjdCB2aG9zdF9tZW1vcnlfcmVnaW9uICpyZWc7CisJaW50IGk7CisJLyogbGluZWFyIHNlYXJjaCBpcyBub3QgYnJpbGxpYW50LCBidXQgd2UgcmVhbGx5IGhhdmUgb24gdGhlIG9yZGVyIG9mIDYKKwkgKiByZWdpb25zIGluIHByYWN0aWNlICovCisJZm9yIChpID0gMDsgaSA8IG1lbS0+bnJlZ2lvbnM7ICsraSkgeworCQlyZWcgPSBtZW0tPnJlZ2lvbnMgKyBpOworCQlpZiAocmVnLT5ndWVzdF9waHlzX2FkZHIgPD0gYWRkciAmJgorCQkgICAgcmVnLT5ndWVzdF9waHlzX2FkZHIgKyByZWctPm1lbW9yeV9zaXplIC0gMSA+PSBhZGRyKQorCQkJcmV0dXJuIHJlZzsKKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKKy8qIFRPRE86IFRoaXMgaXMgcmVhbGx5IGluZWZmaWNpZW50LiAgV2UgbmVlZCBzb21ldGhpbmcgbGlrZSBnZXRfdXNlcigpCisgKiAoaW5zdHJ1Y3Rpb24gZGlyZWN0bHkgYWNjZXNzZXMgdGhlIGRhdGEsIHdpdGggYW4gZXhjZXB0aW9uIHRhYmxlIGVudHJ5CisgKiByZXR1cm5pbmcgLUVGQVVMVCkuIFNlZSBEb2N1bWVudGF0aW9uL3g4Ni9leGNlcHRpb24tdGFibGVzLnR4dC4KKyAqLworc3RhdGljIGludCBzZXRfYml0X3RvX3VzZXIoaW50IG5yLCB2b2lkIF9fdXNlciAqYWRkcikKK3sKKwl1bnNpZ25lZCBsb25nIGxvZyA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdm9pZCAqYmFzZTsKKwlpbnQgYml0ID0gbnIgKyAobG9nICUgUEFHRV9TSVpFKSAqIDg7CisJaW50IHI7CisJciA9IGdldF91c2VyX3BhZ2VzX2Zhc3QobG9nLCAxLCAxLCAmcGFnZSk7CisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKwlCVUdfT04ociAhPSAxKTsKKwliYXNlID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCXNldF9iaXQoYml0LCBiYXNlKTsKKwlrdW5tYXBfYXRvbWljKGJhc2UsIEtNX1VTRVIwKTsKKwlzZXRfcGFnZV9kaXJ0eV9sb2NrKHBhZ2UpOworCXB1dF9wYWdlKHBhZ2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvZ193cml0ZSh2b2lkIF9fdXNlciAqbG9nX2Jhc2UsCisJCSAgICAgdTY0IHdyaXRlX2FkZHJlc3MsIHU2NCB3cml0ZV9sZW5ndGgpCit7CisJaW50IHI7CisJaWYgKCF3cml0ZV9sZW5ndGgpCisJCXJldHVybiAwOworCXdyaXRlX2FkZHJlc3MgLz0gVkhPU1RfUEFHRV9TSVpFOworCWZvciAoOzspIHsKKwkJdTY0IGJhc2UgPSAodTY0KSh1bnNpZ25lZCBsb25nKWxvZ19iYXNlOworCQl1NjQgbG9nID0gYmFzZSArIHdyaXRlX2FkZHJlc3MgLyA4OworCQlpbnQgYml0ID0gd3JpdGVfYWRkcmVzcyAlIDg7CisJCWlmICgodTY0KSh1bnNpZ25lZCBsb25nKWxvZyAhPSBsb2cpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJciA9IHNldF9iaXRfdG9fdXNlcihiaXQsICh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWxvZyk7CisJCWlmIChyIDwgMCkKKwkJCXJldHVybiByOworCQlpZiAod3JpdGVfbGVuZ3RoIDw9IFZIT1NUX1BBR0VfU0laRSkKKwkJCWJyZWFrOworCQl3cml0ZV9sZW5ndGggLT0gVkhPU1RfUEFHRV9TSVpFOworCQl3cml0ZV9hZGRyZXNzICs9IFZIT1NUX1BBR0VfU0laRTsKKwl9CisJcmV0dXJuIHI7Cit9CisKK2ludCB2aG9zdF9sb2dfd3JpdGUoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHN0cnVjdCB2aG9zdF9sb2cgKmxvZywKKwkJICAgIHVuc2lnbmVkIGludCBsb2dfbnVtLCB1NjQgbGVuKQoreworCWludCBpLCByOworCisJLyogTWFrZSBzdXJlIGRhdGEgd3JpdHRlbiBpcyBzZWVuIGJlZm9yZSBsb2cuICovCisJc21wX3dtYigpOworCWZvciAoaSA9IDA7IGkgPCBsb2dfbnVtOyArK2kpIHsKKwkJdTY0IGwgPSBtaW4obG9nW2ldLmxlbiwgbGVuKTsKKwkJciA9IGxvZ193cml0ZSh2cS0+bG9nX2Jhc2UsIGxvZ1tpXS5hZGRyLCBsKTsKKwkJaWYgKHIgPCAwKQorCQkJcmV0dXJuIHI7CisJCWxlbiAtPSBsOworCQlpZiAoIWxlbikKKwkJCXJldHVybiAwOworCX0KKwlpZiAodnEtPmxvZ19jdHgpCisJCWV2ZW50ZmRfc2lnbmFsKHZxLT5sb2dfY3R4LCAxKTsKKwkvKiBMZW5ndGggd3JpdHRlbiBleGNlZWRzIHdoYXQgd2UgaGF2ZSBzdG9yZWQuIFRoaXMgaXMgYSBidWcuICovCisJQlVHKCk7CisJcmV0dXJuIDA7Cit9CisKK2ludCB0cmFuc2xhdGVfZGVzYyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHU2NCBhZGRyLCB1MzIgbGVuLAorCQkgICBzdHJ1Y3QgaW92ZWMgaW92W10sIGludCBpb3Zfc2l6ZSkKK3sKKwljb25zdCBzdHJ1Y3Qgdmhvc3RfbWVtb3J5X3JlZ2lvbiAqcmVnOworCXN0cnVjdCB2aG9zdF9tZW1vcnkgKm1lbTsKKwlzdHJ1Y3QgaW92ZWMgKl9pb3Y7CisJdTY0IHMgPSAwOworCWludCByZXQgPSAwOworCisJcmN1X3JlYWRfbG9jaygpOworCisJbWVtID0gcmN1X2RlcmVmZXJlbmNlKGRldi0+bWVtb3J5KTsKKwl3aGlsZSAoKHU2NClsZW4gPiBzKSB7CisJCXU2NCBzaXplOworCQlpZiAocmV0ID49IGlvdl9zaXplKSB7CisJCQlyZXQgPSAtRU5PQlVGUzsKKwkJCWJyZWFrOworCQl9CisJCXJlZyA9IGZpbmRfcmVnaW9uKG1lbSwgYWRkciwgbGVuKTsKKwkJaWYgKCFyZWcpIHsKKwkJCXJldCA9IC1FRkFVTFQ7CisJCQlicmVhazsKKwkJfQorCQlfaW92ID0gaW92ICsgcmV0OworCQlzaXplID0gcmVnLT5tZW1vcnlfc2l6ZSAtIGFkZHIgKyByZWctPmd1ZXN0X3BoeXNfYWRkcjsKKwkJX2lvdi0+aW92X2xlbiA9IG1pbigodTY0KWxlbiwgc2l6ZSk7CisJCV9pb3YtPmlvdl9iYXNlID0gKHZvaWQgKikodW5zaWduZWQgbG9uZykKKwkJCShyZWctPnVzZXJzcGFjZV9hZGRyICsgYWRkciAtIHJlZy0+Z3Vlc3RfcGh5c19hZGRyKTsKKwkJcyArPSBzaXplOworCQlhZGRyICs9IHNpemU7CisJCSsrcmV0OworCX0KKworCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiByZXQ7Cit9CisKKy8qIEVhY2ggYnVmZmVyIGluIHRoZSB2aXJ0cXVldWVzIGlzIGFjdHVhbGx5IGEgY2hhaW4gb2YgZGVzY3JpcHRvcnMuICBUaGlzCisgKiBmdW5jdGlvbiByZXR1cm5zIHRoZSBuZXh0IGRlc2NyaXB0b3IgaW4gdGhlIGNoYWluLAorICogb3IgLTFVIGlmIHdlJ3JlIGF0IHRoZSBlbmQuICovCitzdGF0aWMgdW5zaWduZWQgbmV4dF9kZXNjKHN0cnVjdCB2cmluZ19kZXNjICpkZXNjKQoreworCXVuc2lnbmVkIGludCBuZXh0OworCisJLyogSWYgdGhpcyBkZXNjcmlwdG9yIHNheXMgaXQgZG9lc24ndCBjaGFpbiwgd2UncmUgZG9uZS4gKi8KKwlpZiAoIShkZXNjLT5mbGFncyAmIFZSSU5HX0RFU0NfRl9ORVhUKSkKKwkJcmV0dXJuIC0xVTsKKworCS8qIENoZWNrIHRoZXkncmUgbm90IGxlYWRpbmcgdXMgb2ZmIGVuZCBvZiBkZXNjcmlwdG9ycy4gKi8KKwluZXh0ID0gZGVzYy0+bmV4dDsKKwkvKiBNYWtlIHN1cmUgY29tcGlsZXIga25vd3MgdG8gZ3JhYiB0aGF0OiB3ZSBkb24ndCB3YW50IGl0IGNoYW5naW5nISAqLworCS8qIFdlIHdpbGwgdXNlIHRoZSByZXN1bHQgYXMgYW4gaW5kZXggaW4gYW4gYXJyYXksIHNvIG1vc3QKKwkgKiBhcmNoaXRlY3R1cmVzIG9ubHkgbmVlZCBhIGNvbXBpbGVyIGJhcnJpZXIgaGVyZS4gKi8KKwlyZWFkX2JhcnJpZXJfZGVwZW5kcygpOworCisJcmV0dXJuIG5leHQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBnZXRfaW5kaXJlY3Qoc3RydWN0IHZob3N0X2RldiAqZGV2LCBzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwKKwkJCSAgICAgc3RydWN0IGlvdmVjIGlvdltdLCB1bnNpZ25lZCBpbnQgaW92X3NpemUsCisJCQkgICAgIHVuc2lnbmVkIGludCAqb3V0X251bSwgdW5zaWduZWQgaW50ICppbl9udW0sCisJCQkgICAgIHN0cnVjdCB2aG9zdF9sb2cgKmxvZywgdW5zaWduZWQgaW50ICpsb2dfbnVtLAorCQkJICAgICBzdHJ1Y3QgdnJpbmdfZGVzYyAqaW5kaXJlY3QpCit7CisJc3RydWN0IHZyaW5nX2Rlc2MgZGVzYzsKKwl1bnNpZ25lZCBpbnQgaSA9IDAsIGNvdW50LCBmb3VuZCA9IDA7CisJaW50IHJldDsKKworCS8qIFNhbml0eSBjaGVjayAqLworCWlmIChpbmRpcmVjdC0+bGVuICUgc2l6ZW9mIGRlc2MpIHsKKwkJdnFfZXJyKHZxLCAiSW52YWxpZCBsZW5ndGggaW4gaW5kaXJlY3QgZGVzY3JpcHRvcjogIgorCQkgICAgICAgImxlbiAweCVsbHggbm90IG11bHRpcGxlIG9mIDB4JXp4XG4iLAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbmRpcmVjdC0+bGVuLAorCQkgICAgICAgc2l6ZW9mIGRlc2MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSB0cmFuc2xhdGVfZGVzYyhkZXYsIGluZGlyZWN0LT5hZGRyLCBpbmRpcmVjdC0+bGVuLCB2cS0+aW5kaXJlY3QsCisJCQkgICAgIEFSUkFZX1NJWkUodnEtPmluZGlyZWN0KSk7CisJaWYgKHJldCA8IDApIHsKKwkJdnFfZXJyKHZxLCAiVHJhbnNsYXRpb24gZmFpbHVyZSAlZCBpbiBpbmRpcmVjdC5cbiIsIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJLyogV2Ugd2lsbCB1c2UgdGhlIHJlc3VsdCBhcyBhbiBhZGRyZXNzIHRvIHJlYWQgZnJvbSwgc28gbW9zdAorCSAqIGFyY2hpdGVjdHVyZXMgb25seSBuZWVkIGEgY29tcGlsZXIgYmFycmllciBoZXJlLiAqLworCXJlYWRfYmFycmllcl9kZXBlbmRzKCk7CisKKwljb3VudCA9IGluZGlyZWN0LT5sZW4gLyBzaXplb2YgZGVzYzsKKwkvKiBCdWZmZXJzIGFyZSBjaGFpbmVkIHZpYSBhIDE2IGJpdCBuZXh0IGZpZWxkLCBzbworCSAqIHdlIGNhbiBoYXZlIGF0IG1vc3QgMl4xNiBvZiB0aGVzZS4gKi8KKwlpZiAoY291bnQgPiBVU0hPUlRfTUFYICsgMSkgeworCQl2cV9lcnIodnEsICJJbmRpcmVjdCBidWZmZXIgbGVuZ3RoIHRvbyBiaWc6ICVkXG4iLAorCQkgICAgICAgaW5kaXJlY3QtPmxlbik7CisJCXJldHVybiAtRTJCSUc7CisJfQorCisJZG8geworCQl1bnNpZ25lZCBpb3ZfY291bnQgPSAqaW5fbnVtICsgKm91dF9udW07CisJCWlmICgrK2ZvdW5kID4gY291bnQpIHsKKwkJCXZxX2Vycih2cSwgIkxvb3AgZGV0ZWN0ZWQ6IGxhc3Qgb25lIGF0ICV1ICIKKwkJCSAgICAgICAiaW5kaXJlY3Qgc2l6ZSAldVxuIiwKKwkJCSAgICAgICBpLCBjb3VudCk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlpZiAobWVtY3B5X2Zyb21pb3ZlYygodW5zaWduZWQgY2hhciAqKSZkZXNjLCB2cS0+aW5kaXJlY3QsCisJCQkJICAgICBzaXplb2YgZGVzYykpIHsKKwkJCXZxX2Vycih2cSwgIkZhaWxlZCBpbmRpcmVjdCBkZXNjcmlwdG9yOiBpZHggJWQsICV6eFxuIiwKKwkJCSAgICAgICBpLCAoc2l6ZV90KWluZGlyZWN0LT5hZGRyICsgaSAqIHNpemVvZiBkZXNjKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWlmIChkZXNjLmZsYWdzICYgVlJJTkdfREVTQ19GX0lORElSRUNUKSB7CisJCQl2cV9lcnIodnEsICJOZXN0ZWQgaW5kaXJlY3QgZGVzY3JpcHRvcjogaWR4ICVkLCAlenhcbiIsCisJCQkgICAgICAgaSwgKHNpemVfdClpbmRpcmVjdC0+YWRkciArIGkgKiBzaXplb2YgZGVzYyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXJldCA9IHRyYW5zbGF0ZV9kZXNjKGRldiwgZGVzYy5hZGRyLCBkZXNjLmxlbiwgaW92ICsgaW92X2NvdW50LAorCQkJCSAgICAgaW92X3NpemUgLSBpb3ZfY291bnQpOworCQlpZiAocmV0IDwgMCkgeworCQkJdnFfZXJyKHZxLCAiVHJhbnNsYXRpb24gZmFpbHVyZSAlZCBpbmRpcmVjdCBpZHggJWRcbiIsCisJCQkgICAgICAgcmV0LCBpKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwkJLyogSWYgdGhpcyBpcyBhbiBpbnB1dCBkZXNjcmlwdG9yLCBpbmNyZW1lbnQgdGhhdCBjb3VudC4gKi8KKwkJaWYgKGRlc2MuZmxhZ3MgJiBWUklOR19ERVNDX0ZfV1JJVEUpIHsKKwkJCSppbl9udW0gKz0gcmV0OworCQkJaWYgKHVubGlrZWx5KGxvZykpIHsKKwkJCQlsb2dbKmxvZ19udW1dLmFkZHIgPSBkZXNjLmFkZHI7CisJCQkJbG9nWypsb2dfbnVtXS5sZW4gPSBkZXNjLmxlbjsKKwkJCQkrKypsb2dfbnVtOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogSWYgaXQncyBhbiBvdXRwdXQgZGVzY3JpcHRvciwgdGhleSdyZSBhbGwgc3VwcG9zZWQKKwkJCSAqIHRvIGNvbWUgYmVmb3JlIGFueSBpbnB1dCBkZXNjcmlwdG9ycy4gKi8KKwkJCWlmICgqaW5fbnVtKSB7CisJCQkJdnFfZXJyKHZxLCAiSW5kaXJlY3QgZGVzY3JpcHRvciAiCisJCQkJICAgICAgICJoYXMgb3V0IGFmdGVyIGluOiBpZHggJWRcbiIsIGkpOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQkJKm91dF9udW0gKz0gcmV0OworCQl9CisJfSB3aGlsZSAoKGkgPSBuZXh0X2Rlc2MoJmRlc2MpKSAhPSAtMSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgbG9va3MgaW4gdGhlIHZpcnRxdWV1ZSBhbmQgZm9yIHRoZSBmaXJzdCBhdmFpbGFibGUgYnVmZmVyLCBhbmQgY29udmVydHMKKyAqIGl0IHRvIGFuIGlvdmVjIGZvciBjb252ZW5pZW50IGFjY2Vzcy4gIFNpbmNlIGRlc2NyaXB0b3JzIGNvbnNpc3Qgb2Ygc29tZQorICogbnVtYmVyIG9mIG91dHB1dCB0aGVuIHNvbWUgbnVtYmVyIG9mIGlucHV0IGRlc2NyaXB0b3JzLCBpdCdzIGFjdHVhbGx5IHR3bworICogaW92ZWNzLCBidXQgd2UgcGFjayB0aGVtIGludG8gb25lIGFuZCBub3RlIGhvdyBtYW55IG9mIGVhY2ggdGhlcmUgd2VyZS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGRlc2NyaXB0b3IgbnVtYmVyIGZvdW5kLCBvciB2cS0+bnVtICh3aGljaAorICogaXMgbmV2ZXIgYSB2YWxpZCBkZXNjcmlwdG9yIG51bWJlcikgaWYgbm9uZSB3YXMgZm91bmQuICovCit1bnNpZ25lZCB2aG9zdF9nZXRfdnFfZGVzYyhzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxLAorCQkJICAgc3RydWN0IGlvdmVjIGlvdltdLCB1bnNpZ25lZCBpbnQgaW92X3NpemUsCisJCQkgICB1bnNpZ25lZCBpbnQgKm91dF9udW0sIHVuc2lnbmVkIGludCAqaW5fbnVtLAorCQkJICAgc3RydWN0IHZob3N0X2xvZyAqbG9nLCB1bnNpZ25lZCBpbnQgKmxvZ19udW0pCit7CisJc3RydWN0IHZyaW5nX2Rlc2MgZGVzYzsKKwl1bnNpZ25lZCBpbnQgaSwgaGVhZCwgZm91bmQgPSAwOworCXUxNiBsYXN0X2F2YWlsX2lkeDsKKwlpbnQgcmV0OworCisJLyogQ2hlY2sgaXQgaXNuJ3QgZG9pbmcgdmVyeSBzdHJhbmdlIHRoaW5ncyB3aXRoIGRlc2NyaXB0b3IgbnVtYmVycy4gKi8KKwlsYXN0X2F2YWlsX2lkeCA9IHZxLT5sYXN0X2F2YWlsX2lkeDsKKwlpZiAoZ2V0X3VzZXIodnEtPmF2YWlsX2lkeCwgJnZxLT5hdmFpbC0+aWR4KSkgeworCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gYWNjZXNzIGF2YWlsIGlkeCBhdCAlcFxuIiwKKwkJICAgICAgICZ2cS0+YXZhaWwtPmlkeCk7CisJCXJldHVybiB2cS0+bnVtOworCX0KKworCWlmICgodTE2KSh2cS0+YXZhaWxfaWR4IC0gbGFzdF9hdmFpbF9pZHgpID4gdnEtPm51bSkgeworCQl2cV9lcnIodnEsICJHdWVzdCBtb3ZlZCB1c2VkIGluZGV4IGZyb20gJXUgdG8gJXUiLAorCQkgICAgICAgbGFzdF9hdmFpbF9pZHgsIHZxLT5hdmFpbF9pZHgpOworCQlyZXR1cm4gdnEtPm51bTsKKwl9CisKKwkvKiBJZiB0aGVyZSdzIG5vdGhpbmcgbmV3IHNpbmNlIGxhc3Qgd2UgbG9va2VkLCByZXR1cm4gaW52YWxpZC4gKi8KKwlpZiAodnEtPmF2YWlsX2lkeCA9PSBsYXN0X2F2YWlsX2lkeCkKKwkJcmV0dXJuIHZxLT5udW07CisKKwkvKiBPbmx5IGdldCBhdmFpbCByaW5nIGVudHJpZXMgYWZ0ZXIgdGhleSBoYXZlIGJlZW4gZXhwb3NlZCBieSBndWVzdC4gKi8KKwlzbXBfcm1iKCk7CisKKwkvKiBHcmFiIHRoZSBuZXh0IGRlc2NyaXB0b3IgbnVtYmVyIHRoZXkncmUgYWR2ZXJ0aXNpbmcsIGFuZCBpbmNyZW1lbnQKKwkgKiB0aGUgaW5kZXggd2UndmUgc2Vlbi4gKi8KKwlpZiAoZ2V0X3VzZXIoaGVhZCwgJnZxLT5hdmFpbC0+cmluZ1tsYXN0X2F2YWlsX2lkeCAlIHZxLT5udW1dKSkgeworCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gcmVhZCBoZWFkOiBpZHggJWQgYWRkcmVzcyAlcFxuIiwKKwkJICAgICAgIGxhc3RfYXZhaWxfaWR4LAorCQkgICAgICAgJnZxLT5hdmFpbC0+cmluZ1tsYXN0X2F2YWlsX2lkeCAlIHZxLT5udW1dKTsKKwkJcmV0dXJuIHZxLT5udW07CisJfQorCisJLyogSWYgdGhlaXIgbnVtYmVyIGlzIHNpbGx5LCB0aGF0J3MgYW4gZXJyb3IuICovCisJaWYgKGhlYWQgPj0gdnEtPm51bSkgeworCQl2cV9lcnIodnEsICJHdWVzdCBzYXlzIGluZGV4ICV1ID4gJXUgaXMgYXZhaWxhYmxlIiwKKwkJICAgICAgIGhlYWQsIHZxLT5udW0pOworCQlyZXR1cm4gdnEtPm51bTsKKwl9CisKKwkvKiBXaGVuIHdlIHN0YXJ0IHRoZXJlIGFyZSBub25lIG9mIGVpdGhlciBpbnB1dCBub3Igb3V0cHV0LiAqLworCSpvdXRfbnVtID0gKmluX251bSA9IDA7CisJaWYgKHVubGlrZWx5KGxvZykpCisJCSpsb2dfbnVtID0gMDsKKworCWkgPSBoZWFkOworCWRvIHsKKwkJdW5zaWduZWQgaW92X2NvdW50ID0gKmluX251bSArICpvdXRfbnVtOworCQlpZiAoaSA+PSB2cS0+bnVtKSB7CisJCQl2cV9lcnIodnEsICJEZXNjIGluZGV4IGlzICV1ID4gJXUsIGhlYWQgPSAldSIsCisJCQkgICAgICAgaSwgdnEtPm51bSwgaGVhZCk7CisJCQlyZXR1cm4gdnEtPm51bTsKKwkJfQorCQlpZiAoKytmb3VuZCA+IHZxLT5udW0pIHsKKwkJCXZxX2Vycih2cSwgIkxvb3AgZGV0ZWN0ZWQ6IGxhc3Qgb25lIGF0ICV1ICIKKwkJCSAgICAgICAidnEgc2l6ZSAldSBoZWFkICV1XG4iLAorCQkJICAgICAgIGksIHZxLT5udW0sIGhlYWQpOworCQkJcmV0dXJuIHZxLT5udW07CisJCX0KKwkJcmV0ID0gY29weV9mcm9tX3VzZXIoJmRlc2MsIHZxLT5kZXNjICsgaSwgc2l6ZW9mIGRlc2MpOworCQlpZiAocmV0KSB7CisJCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gZ2V0IGRlc2NyaXB0b3I6IGlkeCAlZCBhZGRyICVwXG4iLAorCQkJICAgICAgIGksIHZxLT5kZXNjICsgaSk7CisJCQlyZXR1cm4gdnEtPm51bTsKKwkJfQorCQlpZiAoZGVzYy5mbGFncyAmIFZSSU5HX0RFU0NfRl9JTkRJUkVDVCkgeworCQkJcmV0ID0gZ2V0X2luZGlyZWN0KGRldiwgdnEsIGlvdiwgaW92X3NpemUsCisJCQkJCSAgIG91dF9udW0sIGluX251bSwKKwkJCQkJICAgbG9nLCBsb2dfbnVtLCAmZGVzYyk7CisJCQlpZiAocmV0IDwgMCkgeworCQkJCXZxX2Vycih2cSwgIkZhaWx1cmUgZGV0ZWN0ZWQgIgorCQkJCSAgICAgICAiaW4gaW5kaXJlY3QgZGVzY3JpcHRvciBhdCBpZHggJWRcbiIsIGkpOworCQkJCXJldHVybiB2cS0+bnVtOworCQkJfQorCQkJY29udGludWU7CisJCX0KKworCQlyZXQgPSB0cmFuc2xhdGVfZGVzYyhkZXYsIGRlc2MuYWRkciwgZGVzYy5sZW4sIGlvdiArIGlvdl9jb3VudCwKKwkJCQkgICAgIGlvdl9zaXplIC0gaW92X2NvdW50KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXZxX2Vycih2cSwgIlRyYW5zbGF0aW9uIGZhaWx1cmUgJWQgZGVzY3JpcHRvciBpZHggJWRcbiIsCisJCQkgICAgICAgcmV0LCBpKTsKKwkJCXJldHVybiB2cS0+bnVtOworCQl9CisJCWlmIChkZXNjLmZsYWdzICYgVlJJTkdfREVTQ19GX1dSSVRFKSB7CisJCQkvKiBJZiB0aGlzIGlzIGFuIGlucHV0IGRlc2NyaXB0b3IsCisJCQkgKiBpbmNyZW1lbnQgdGhhdCBjb3VudC4gKi8KKwkJCSppbl9udW0gKz0gcmV0OworCQkJaWYgKHVubGlrZWx5KGxvZykpIHsKKwkJCQlsb2dbKmxvZ19udW1dLmFkZHIgPSBkZXNjLmFkZHI7CisJCQkJbG9nWypsb2dfbnVtXS5sZW4gPSBkZXNjLmxlbjsKKwkJCQkrKypsb2dfbnVtOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogSWYgaXQncyBhbiBvdXRwdXQgZGVzY3JpcHRvciwgdGhleSdyZSBhbGwgc3VwcG9zZWQKKwkJCSAqIHRvIGNvbWUgYmVmb3JlIGFueSBpbnB1dCBkZXNjcmlwdG9ycy4gKi8KKwkJCWlmICgqaW5fbnVtKSB7CisJCQkJdnFfZXJyKHZxLCAiRGVzY3JpcHRvciBoYXMgb3V0IGFmdGVyIGluOiAiCisJCQkJICAgICAgICJpZHggJWRcbiIsIGkpOworCQkJCXJldHVybiB2cS0+bnVtOworCQkJfQorCQkJKm91dF9udW0gKz0gcmV0OworCQl9CisJfSB3aGlsZSAoKGkgPSBuZXh0X2Rlc2MoJmRlc2MpKSAhPSAtMSk7CisKKwkvKiBPbiBzdWNjZXNzLCBpbmNyZW1lbnQgYXZhaWwgaW5kZXguICovCisJdnEtPmxhc3RfYXZhaWxfaWR4Kys7CisJcmV0dXJuIGhlYWQ7Cit9CisKKy8qIFJldmVyc2UgdGhlIGVmZmVjdCBvZiB2aG9zdF9nZXRfdnFfZGVzYy4gVXNlZnVsIGZvciBlcnJvciBoYW5kbGluZy4gKi8KK3ZvaWQgdmhvc3RfZGlzY2FyZF92cV9kZXNjKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQoreworCXZxLT5sYXN0X2F2YWlsX2lkeC0tOworfQorCisvKiBBZnRlciB3ZSd2ZSB1c2VkIG9uZSBvZiB0aGVpciBidWZmZXJzLCB3ZSB0ZWxsIHRoZW0gYWJvdXQgaXQuICBXZSdsbCB0aGVuCisgKiB3YW50IHRvIG5vdGlmeSB0aGUgZ3Vlc3QsIHVzaW5nIGV2ZW50ZmQuICovCitpbnQgdmhvc3RfYWRkX3VzZWQoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsIHVuc2lnbmVkIGludCBoZWFkLCBpbnQgbGVuKQoreworCXN0cnVjdCB2cmluZ191c2VkX2VsZW0gKnVzZWQ7CisKKwkvKiBUaGUgdmlydHF1ZXVlIGNvbnRhaW5zIGEgcmluZyBvZiB1c2VkIGJ1ZmZlcnMuICBHZXQgYSBwb2ludGVyIHRvIHRoZQorCSAqIG5leHQgZW50cnkgaW4gdGhhdCB1c2VkIHJpbmcuICovCisJdXNlZCA9ICZ2cS0+dXNlZC0+cmluZ1t2cS0+bGFzdF91c2VkX2lkeCAlIHZxLT5udW1dOworCWlmIChwdXRfdXNlcihoZWFkLCAmdXNlZC0+aWQpKSB7CisJCXZxX2Vycih2cSwgIkZhaWxlZCB0byB3cml0ZSB1c2VkIGlkIik7CisJCXJldHVybiAtRUZBVUxUOworCX0KKwlpZiAocHV0X3VzZXIobGVuLCAmdXNlZC0+bGVuKSkgeworCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gd3JpdGUgdXNlZCBsZW4iKTsKKwkJcmV0dXJuIC1FRkFVTFQ7CisJfQorCS8qIE1ha2Ugc3VyZSBidWZmZXIgaXMgd3JpdHRlbiBiZWZvcmUgd2UgdXBkYXRlIGluZGV4LiAqLworCXNtcF93bWIoKTsKKwlpZiAocHV0X3VzZXIodnEtPmxhc3RfdXNlZF9pZHggKyAxLCAmdnEtPnVzZWQtPmlkeCkpIHsKKwkJdnFfZXJyKHZxLCAiRmFpbGVkIHRvIGluY3JlbWVudCB1c2VkIGlkeCIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJaWYgKHVubGlrZWx5KHZxLT5sb2dfdXNlZCkpIHsKKwkJLyogTWFrZSBzdXJlIGRhdGEgaXMgc2VlbiBiZWZvcmUgbG9nLiAqLworCQlzbXBfd21iKCk7CisJCS8qIExvZyB1c2VkIHJpbmcgZW50cnkgd3JpdGUuICovCisJCWxvZ193cml0ZSh2cS0+bG9nX2Jhc2UsCisJCQkgIHZxLT5sb2dfYWRkciArICgodm9pZCAqKXVzZWQgLSAodm9pZCAqKXZxLT51c2VkKSwKKwkJCSAgc2l6ZW9mICp1c2VkKTsKKwkJLyogTG9nIHVzZWQgaW5kZXggdXBkYXRlLiAqLworCQlsb2dfd3JpdGUodnEtPmxvZ19iYXNlLAorCQkJICB2cS0+bG9nX2FkZHIgKyBvZmZzZXRvZihzdHJ1Y3QgdnJpbmdfdXNlZCwgaWR4KSwKKwkJCSAgc2l6ZW9mIHZxLT51c2VkLT5pZHgpOworCQlpZiAodnEtPmxvZ19jdHgpCisJCQlldmVudGZkX3NpZ25hbCh2cS0+bG9nX2N0eCwgMSk7CisJfQorCXZxLT5sYXN0X3VzZWRfaWR4Kys7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgYWN0dWFsbHkgc2lnbmFscyB0aGUgZ3Vlc3QsIHVzaW5nIGV2ZW50ZmQuICovCit2b2lkIHZob3N0X3NpZ25hbChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKQoreworCV9fdTE2IGZsYWdzID0gMDsKKwlpZiAoZ2V0X3VzZXIoZmxhZ3MsICZ2cS0+YXZhaWwtPmZsYWdzKSkgeworCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gZ2V0IGZsYWdzIik7CisJCXJldHVybjsKKwl9CisKKwkvKiBJZiB0aGV5IGRvbid0IHdhbnQgYW4gaW50ZXJydXB0LCBkb24ndCBzaWduYWwsIHVubGVzcyBlbXB0eS4gKi8KKwlpZiAoKGZsYWdzICYgVlJJTkdfQVZBSUxfRl9OT19JTlRFUlJVUFQpICYmCisJICAgICh2cS0+YXZhaWxfaWR4ICE9IHZxLT5sYXN0X2F2YWlsX2lkeCB8fAorCSAgICAgIXZob3N0X2hhc19mZWF0dXJlKGRldiwgVklSVElPX0ZfTk9USUZZX09OX0VNUFRZKSkpCisJCXJldHVybjsKKworCS8qIFNpZ25hbCB0aGUgR3Vlc3QgdGVsbCB0aGVtIHdlIHVzZWQgc29tZXRoaW5nIHVwLiAqLworCWlmICh2cS0+Y2FsbF9jdHgpCisJCWV2ZW50ZmRfc2lnbmFsKHZxLT5jYWxsX2N0eCwgMSk7Cit9CisKKy8qIEFuZCBoZXJlJ3MgdGhlIGNvbWJvIG1lYWwgZGVhbC4gIFN1cGVyc2l6ZSBtZSEgKi8KK3ZvaWQgdmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbChzdHJ1Y3Qgdmhvc3RfZGV2ICpkZXYsCisJCQkgICAgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnEsCisJCQkgICAgICAgdW5zaWduZWQgaW50IGhlYWQsIGludCBsZW4pCit7CisJdmhvc3RfYWRkX3VzZWQodnEsIGhlYWQsIGxlbik7CisJdmhvc3Rfc2lnbmFsKGRldiwgdnEpOworfQorCisvKiBPSywgbm93IHdlIG5lZWQgdG8ga25vdyBhYm91dCBhZGRlZCBkZXNjcmlwdG9ycy4gKi8KK2Jvb2wgdmhvc3RfZW5hYmxlX25vdGlmeShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKK3sKKwl1MTYgYXZhaWxfaWR4OworCWludCByOworCWlmICghKHZxLT51c2VkX2ZsYWdzICYgVlJJTkdfVVNFRF9GX05PX05PVElGWSkpCisJCXJldHVybiBmYWxzZTsKKwl2cS0+dXNlZF9mbGFncyAmPSB+VlJJTkdfVVNFRF9GX05PX05PVElGWTsKKwlyID0gcHV0X3VzZXIodnEtPnVzZWRfZmxhZ3MsICZ2cS0+dXNlZC0+ZmxhZ3MpOworCWlmIChyKSB7CisJCXZxX2Vycih2cSwgIkZhaWxlZCB0byBlbmFibGUgbm90aWZpY2F0aW9uIGF0ICVwOiAlZFxuIiwKKwkJICAgICAgICZ2cS0+dXNlZC0+ZmxhZ3MsIHIpOworCQlyZXR1cm4gZmFsc2U7CisJfQorCS8qIFRoZXkgY291bGQgaGF2ZSBzbGlwcGVkIG9uZSBpbiBhcyB3ZSB3ZXJlIGRvaW5nIHRoYXQ6IG1ha2UKKwkgKiBzdXJlIGl0J3Mgd3JpdHRlbiwgdGhlbiBjaGVjayBhZ2Fpbi4gKi8KKwlzbXBfbWIoKTsKKwlyID0gZ2V0X3VzZXIoYXZhaWxfaWR4LCAmdnEtPmF2YWlsLT5pZHgpOworCWlmIChyKSB7CisJCXZxX2Vycih2cSwgIkZhaWxlZCB0byBjaGVjayBhdmFpbCBpZHggYXQgJXA6ICVkXG4iLAorCQkgICAgICAgJnZxLT5hdmFpbC0+aWR4LCByKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiBhdmFpbF9pZHggIT0gdnEtPmxhc3RfYXZhaWxfaWR4OworfQorCisvKiBXZSBkb24ndCBuZWVkIHRvIGJlIG5vdGlmaWVkIGFnYWluLiAqLwordm9pZCB2aG9zdF9kaXNhYmxlX25vdGlmeShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSkKK3sKKwlpbnQgcjsKKwlpZiAodnEtPnVzZWRfZmxhZ3MgJiBWUklOR19VU0VEX0ZfTk9fTk9USUZZKQorCQlyZXR1cm47CisJdnEtPnVzZWRfZmxhZ3MgfD0gVlJJTkdfVVNFRF9GX05PX05PVElGWTsKKwlyID0gcHV0X3VzZXIodnEtPnVzZWRfZmxhZ3MsICZ2cS0+dXNlZC0+ZmxhZ3MpOworCWlmIChyKQorCQl2cV9lcnIodnEsICJGYWlsZWQgdG8gZW5hYmxlIG5vdGlmaWNhdGlvbiBhdCAlcDogJWRcbiIsCisJCSAgICAgICAmdnEtPnVzZWQtPmZsYWdzLCByKTsKK30KKworaW50IHZob3N0X2luaXQodm9pZCkKK3sKKwl2aG9zdF93b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgidmhvc3QiKTsKKwlpZiAoIXZob3N0X3dvcmtxdWV1ZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgdmhvc3RfY2xlYW51cCh2b2lkKQoreworCWRlc3Ryb3lfd29ya3F1ZXVlKHZob3N0X3dvcmtxdWV1ZSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Zob3N0L3Zob3N0LmggYi9kcml2ZXJzL3Zob3N0L3Zob3N0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQ1OTFiYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmhvc3Qvdmhvc3QuaApAQCAtMCwwICsxLDE2MSBAQAorI2lmbmRlZiBfVkhPU1RfSAorI2RlZmluZSBfVkhPU1RfSAorCisjaW5jbHVkZSA8bGludXgvZXZlbnRmZC5oPgorI2luY2x1ZGUgPGxpbnV4L3Zob3N0Lmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvdWlvLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19yaW5nLmg+CisKK3N0cnVjdCB2aG9zdF9kZXZpY2U7CisKK2VudW0geworCS8qIEVub3VnaCBwbGFjZSBmb3IgYWxsIGZyYWdtZW50cywgaGVhZCwgYW5kIHZpcnRpbyBuZXQgaGVhZGVyLiAqLworCVZIT1NUX05FVF9NQVhfU0cgPSBNQVhfU0tCX0ZSQUdTICsgMiwKK307CisKKy8qIFBvbGwgYSBmaWxlIChldmVudGZkIG9yIHNvY2tldCkgKi8KKy8qIE5vdGU6IHRoZXJlJ3Mgbm90aGluZyB2aG9zdCBzcGVjaWZpYyBhYm91dCB0aGlzIHN0cnVjdHVyZS4gKi8KK3N0cnVjdCB2aG9zdF9wb2xsIHsKKwlwb2xsX3RhYmxlICAgICAgICAgICAgICAgIHRhYmxlOworCXdhaXRfcXVldWVfaGVhZF90ICAgICAgICAqd3FoOworCXdhaXRfcXVldWVfdCAgICAgICAgICAgICAgd2FpdDsKKwkvKiBzdHJ1Y3Qgd2hpY2ggd2lsbCBoYW5kbGUgYWxsIGFjdHVhbCB3b3JrLiAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICAgd29yazsKKwl1bnNpZ25lZCBsb25nCQkgIG1hc2s7Cit9OworCit2b2lkIHZob3N0X3BvbGxfaW5pdChzdHJ1Y3Qgdmhvc3RfcG9sbCAqcG9sbCwgd29ya19mdW5jX3QgZnVuYywKKwkJICAgICB1bnNpZ25lZCBsb25nIG1hc2spOwordm9pZCB2aG9zdF9wb2xsX3N0YXJ0KHN0cnVjdCB2aG9zdF9wb2xsICpwb2xsLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Cit2b2lkIHZob3N0X3BvbGxfc3RvcChzdHJ1Y3Qgdmhvc3RfcG9sbCAqcG9sbCk7Cit2b2lkIHZob3N0X3BvbGxfZmx1c2goc3RydWN0IHZob3N0X3BvbGwgKnBvbGwpOwordm9pZCB2aG9zdF9wb2xsX3F1ZXVlKHN0cnVjdCB2aG9zdF9wb2xsICpwb2xsKTsKKworc3RydWN0IHZob3N0X2xvZyB7CisJdTY0IGFkZHI7CisJdTY0IGxlbjsKK307CisKKy8qIFRoZSB2aXJ0cXVldWUgc3RydWN0dXJlIGRlc2NyaWJlcyBhIHF1ZXVlIGF0dGFjaGVkIHRvIGEgZGV2aWNlLiAqLworc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSB7CisJc3RydWN0IHZob3N0X2RldiAqZGV2OworCisJLyogVGhlIGFjdHVhbCByaW5nIG9mIGJ1ZmZlcnMuICovCisJc3RydWN0IG11dGV4IG11dGV4OworCXVuc2lnbmVkIGludCBudW07CisJc3RydWN0IHZyaW5nX2Rlc2MgX191c2VyICpkZXNjOworCXN0cnVjdCB2cmluZ19hdmFpbCBfX3VzZXIgKmF2YWlsOworCXN0cnVjdCB2cmluZ191c2VkIF9fdXNlciAqdXNlZDsKKwlzdHJ1Y3QgZmlsZSAqa2ljazsKKwlzdHJ1Y3QgZmlsZSAqY2FsbDsKKwlzdHJ1Y3QgZmlsZSAqZXJyb3I7CisJc3RydWN0IGV2ZW50ZmRfY3R4ICpjYWxsX2N0eDsKKwlzdHJ1Y3QgZXZlbnRmZF9jdHggKmVycm9yX2N0eDsKKwlzdHJ1Y3QgZXZlbnRmZF9jdHggKmxvZ19jdHg7CisKKwlzdHJ1Y3Qgdmhvc3RfcG9sbCBwb2xsOworCisJLyogVGhlIHJvdXRpbmUgdG8gY2FsbCB3aGVuIHRoZSBHdWVzdCBwaW5ncyB1cywgb3IgdGltZW91dC4gKi8KKwl3b3JrX2Z1bmNfdCBoYW5kbGVfa2ljazsKKworCS8qIExhc3QgYXZhaWxhYmxlIGluZGV4IHdlIHNhdy4gKi8KKwl1MTYgbGFzdF9hdmFpbF9pZHg7CisKKwkvKiBDYWNoZXMgYXZhaWxhYmxlIGluZGV4IHZhbHVlIGZyb20gdXNlci4gKi8KKwl1MTYgYXZhaWxfaWR4OworCisJLyogTGFzdCBpbmRleCB3ZSB1c2VkLiAqLworCXUxNiBsYXN0X3VzZWRfaWR4OworCisJLyogVXNlZCBmbGFncyAqLworCXUxNiB1c2VkX2ZsYWdzOworCisJLyogTG9nIHdyaXRlcyB0byB1c2VkIHN0cnVjdHVyZS4gKi8KKwlib29sIGxvZ191c2VkOworCXU2NCBsb2dfYWRkcjsKKworCXN0cnVjdCBpb3ZlYyBpbmRpcmVjdFtWSE9TVF9ORVRfTUFYX1NHXTsKKwlzdHJ1Y3QgaW92ZWMgaW92W1ZIT1NUX05FVF9NQVhfU0ddOworCXN0cnVjdCBpb3ZlYyBoZHJbVkhPU1RfTkVUX01BWF9TR107CisJc2l6ZV90IGhkcl9zaXplOworCS8qIFdlIHVzZSBhIGtpbmQgb2YgUkNVIHRvIGFjY2VzcyBwcml2YXRlIHBvaW50ZXIuCisJICogQWxsIHJlYWRlcnMgYWNjZXNzIGl0IGZyb20gd29ya3F1ZXVlLCB3aGljaCBtYWtlcyBpdCBwb3NzaWJsZSB0bworCSAqIGZsdXNoIHRoZSB3b3JrcXVldWUgaW5zdGVhZCBvZiBzeW5jaHJvbml6ZV9yY3UuIFRoZXJlZm9yZSByZWFkZXJzIGRvCisJICogbm90IG5lZWQgdG8gY2FsbCByY3VfcmVhZF9sb2NrL3JjdV9yZWFkX3VubG9jazogdGhlIGJlZ2lubmluZyBvZgorCSAqIHdvcmsgaXRlbSBleGVjdXRpb24gYWN0cyBpbnN0ZWFkIG9mIHJjdV9yZWFkX2xvY2soKSBhbmQgdGhlIGVuZCBvZgorCSAqIHdvcmsgaXRlbSBleGVjdXRpb24gYWN0cyBpbnN0ZWFkIG9mIHJjdV9yZWFkX2xvY2soKS4KKwkgKiBXcml0ZXJzIHVzZSB2aXJ0cXVldWUgbXV0ZXguICovCisJdm9pZCAqcHJpdmF0ZV9kYXRhOworCS8qIExvZyB3cml0ZSBkZXNjcmlwdG9ycyAqLworCXZvaWQgX191c2VyICpsb2dfYmFzZTsKKwlzdHJ1Y3Qgdmhvc3RfbG9nIGxvZ1tWSE9TVF9ORVRfTUFYX1NHXTsKK307CisKK3N0cnVjdCB2aG9zdF9kZXYgeworCS8qIFJlYWRlcnMgdXNlIFJDVSB0byBhY2Nlc3MgbWVtb3J5IHRhYmxlIHBvaW50ZXIKKwkgKiBsb2cgYmFzZSBwb2ludGVyIGFuZCBmZWF0dXJlcy4KKwkgKiBXcml0ZXJzIHVzZSBtdXRleCBiZWxvdy4qLworCXN0cnVjdCB2aG9zdF9tZW1vcnkgKm1lbW9yeTsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKwlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CisJdW5zaWduZWQgYWNrZWRfZmVhdHVyZXM7CisJc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnFzOworCWludCBudnFzOworCXN0cnVjdCBmaWxlICpsb2dfZmlsZTsKKwlzdHJ1Y3QgZXZlbnRmZF9jdHggKmxvZ19jdHg7Cit9OworCitsb25nIHZob3N0X2Rldl9pbml0KHN0cnVjdCB2aG9zdF9kZXYgKiwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqdnFzLCBpbnQgbnZxcyk7Citsb25nIHZob3N0X2Rldl9jaGVja19vd25lcihzdHJ1Y3Qgdmhvc3RfZGV2ICopOworbG9uZyB2aG9zdF9kZXZfcmVzZXRfb3duZXIoc3RydWN0IHZob3N0X2RldiAqKTsKK3ZvaWQgdmhvc3RfZGV2X2NsZWFudXAoc3RydWN0IHZob3N0X2RldiAqKTsKK2xvbmcgdmhvc3RfZGV2X2lvY3RsKHN0cnVjdCB2aG9zdF9kZXYgKiwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZyk7CitpbnQgdmhvc3RfdnFfYWNjZXNzX29rKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKnZxKTsKK2ludCB2aG9zdF9sb2dfYWNjZXNzX29rKHN0cnVjdCB2aG9zdF9kZXYgKik7CisKK3Vuc2lnbmVkIHZob3N0X2dldF92cV9kZXNjKHN0cnVjdCB2aG9zdF9kZXYgKiwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqLAorCQkJICAgc3RydWN0IGlvdmVjIGlvdltdLCB1bnNpZ25lZCBpbnQgaW92X2NvdW50LAorCQkJICAgdW5zaWduZWQgaW50ICpvdXRfbnVtLCB1bnNpZ25lZCBpbnQgKmluX251bSwKKwkJCSAgIHN0cnVjdCB2aG9zdF9sb2cgKmxvZywgdW5zaWduZWQgaW50ICpsb2dfbnVtKTsKK3ZvaWQgdmhvc3RfZGlzY2FyZF92cV9kZXNjKHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKik7CisKK2ludCB2aG9zdF9hZGRfdXNlZChzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICosIHVuc2lnbmVkIGludCBoZWFkLCBpbnQgbGVuKTsKK3ZvaWQgdmhvc3Rfc2lnbmFsKHN0cnVjdCB2aG9zdF9kZXYgKiwgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKTsKK3ZvaWQgdmhvc3RfYWRkX3VzZWRfYW5kX3NpZ25hbChzdHJ1Y3Qgdmhvc3RfZGV2ICosIHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKiwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgaGVhZCwgaW50IGxlbik7Cit2b2lkIHZob3N0X2Rpc2FibGVfbm90aWZ5KHN0cnVjdCB2aG9zdF92aXJ0cXVldWUgKik7Citib29sIHZob3N0X2VuYWJsZV9ub3RpZnkoc3RydWN0IHZob3N0X3ZpcnRxdWV1ZSAqKTsKKworaW50IHZob3N0X2xvZ193cml0ZShzdHJ1Y3Qgdmhvc3RfdmlydHF1ZXVlICp2cSwgc3RydWN0IHZob3N0X2xvZyAqbG9nLAorCQkgICAgdW5zaWduZWQgaW50IGxvZ19udW0sIHU2NCBsZW4pOworCitpbnQgdmhvc3RfaW5pdCh2b2lkKTsKK3ZvaWQgdmhvc3RfY2xlYW51cCh2b2lkKTsKKworI2RlZmluZSB2cV9lcnIodnEsIGZtdCwgLi4uKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJcHJfZGVidWcocHJfZm10KGZtdCksICMjX19WQV9BUkdTX18pOyAgICAgICBcCisJCWlmICgodnEpLT5lcnJvcl9jdHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCQlldmVudGZkX3NpZ25hbCgodnEpLT5lcnJvcl9jdHgsIDEpO1wKKwl9IHdoaWxlICgwKQorCitlbnVtIHsKKwlWSE9TVF9GRUFUVVJFUyA9ICgxIDw8IFZJUlRJT19GX05PVElGWV9PTl9FTVBUWSkgfAorCQkJICgxIDw8IFZJUlRJT19SSU5HX0ZfSU5ESVJFQ1RfREVTQykgfAorCQkJICgxIDw8IFZIT1NUX0ZfTE9HX0FMTCkgfAorCQkJICgxIDw8IFZIT1NUX05FVF9GX1ZJUlRJT19ORVRfSERSKSwKK307CisKK3N0YXRpYyBpbmxpbmUgaW50IHZob3N0X2hhc19mZWF0dXJlKHN0cnVjdCB2aG9zdF9kZXYgKmRldiwgaW50IGJpdCkKK3sKKwl1bnNpZ25lZCBhY2tlZF9mZWF0dXJlcyA9IHJjdV9kZXJlZmVyZW5jZShkZXYtPmFja2VkX2ZlYXR1cmVzKTsKKwlyZXR1cm4gYWNrZWRfZmVhdHVyZXMgJiAoMSA8PCBiaXQpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vNjgzMjhmYi5jIGIvZHJpdmVycy92aWRlby82ODMyOGZiLmMKaW5kZXggMGIxNzgyNC4uMjExMDU1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby82ODMyOGZiLmMKKysrIGIvZHJpdmVycy92aWRlby82ODMyOGZiLmMKQEAgLTMwOCw3ICszMDgsNyBAQAogCSAqIFBzZXVkb2NvbG9yOgogCSAqICAgIHVzZXMgb2Zmc2V0ID0gMCAmJiBsZW5ndGggPSBSQU1EQUMgcmVnaXN0ZXIgd2lkdGguCiAJICogICAgdmFyLT57Y29sb3J9Lm9mZnNldCBpcyAwCi0JICogICAgdmFyLT57Y29sb3J9Lmxlbmd0aCBjb250YWlucyB3aWRodCBvZiBEQUMKKwkgKiAgICB2YXItPntjb2xvcn0ubGVuZ3RoIGNvbnRhaW5zIHdpZHRoIG9mIERBQwogCSAqICAgIGNtYXAgaXMgbm90IHVzZWQKIAkgKiAgICBSQU1EQUNbWF0gaXMgcHJvZ3JhbW1lZCB0byAocmVkLCBncmVlbiwgYmx1ZSkKIAkgKiBUcnVlY29sb3I6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKaW5kZXggNWE1YzMwMy4uMWM2MDA1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vS2NvbmZpZwpAQCAtNDAwLDkgKzQwMCwxMiBAQAogCSAgSWYgeW91IHBsYW4gdG8gdXNlIHRoZSBMQ0QgZGlzcGxheSB3aXRoIHlvdXIgU0EtMTEwMCBzeXN0ZW0sIHNheQogCSAgWSBoZXJlLgogCitjb25maWcgSEFWRV9GQl9JTVgKKwlib29sCisKIGNvbmZpZyBGQl9JTVgKIAl0cmlzdGF0ZSAiTW90b3JvbGEgaS5NWCBMQ0Qgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIEZCICYmIChBUkNIX01YMSB8fCBBUkNIX01YMikKKwlkZXBlbmRzIG9uIEZCICYmIChIQVZFX0ZCX0lNWCB8fCBBUkNIX01YMSB8fCBBUkNIX01YMikKIAlzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCiAJc2VsZWN0IEZCX0NGQl9DT1BZQVJFQQogCXNlbGVjdCBGQl9DRkJfSU1BR0VCTElUCkBAIC0xNDk0LDcgKzE0OTcsNiBAQAogICAgICAgIHNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKICAgICAgICBzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAgICAgICAgc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKLSAgICAgICBzZWxlY3QgRkJfU09GVF9DVVJTT1IKICAgICAgICBzZWxlY3QgSTJDX0FMR09CSVQKICAgICAgICBzZWxlY3QgSTJDCiAgICAgICAgaGVscApAQCAtMTk0NSw2ICsxOTQ3LDI3IEBACiAJICBUdXJuIG9uIGRlYnVnZ2luZyBtZXNzYWdlcy4gTm90ZSB0aGF0IHlvdSBjYW4gc2V0L3Vuc2V0IGF0IHJ1biB0aW1lCiAJICB0aHJvdWdoIHN5c2ZzCiAKK2NvbmZpZyBGQl9OVUM5MDAKKyAgICAgICAgYm9vbCAiTlVDOTAwIExDRCBmcmFtZWJ1ZmZlciBzdXBwb3J0IgorICAgICAgICBkZXBlbmRzIG9uIEZCICYmIEFSQ0hfVzkwWDkwMAorICAgICAgICBzZWxlY3QgRkJfQ0ZCX0ZJTExSRUNUCisgICAgICAgIHNlbGVjdCBGQl9DRkJfQ09QWUFSRUEKKyAgICAgICAgc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKKyAgICAgICAgLS0taGVscC0tLQorICAgICAgICAgIEZyYW1lIGJ1ZmZlciBkcml2ZXIgZm9yIHRoZSBidWlsdC1pbiBMQ0QgY29udHJvbGxlciBpbiB0aGUgTnV2b3RvbgorICAgICAgICAgIE5VQzkwMCBwcm9jZXNzb3IKKworY29uZmlnIEdQTTEwNDBBMF8zMjBYMjQwCisgICAgICAgIGJvb2wgIkdpYW50cGx1cyBUZWNobm9sb2d5IEdQTTEwNDBBMCAzMjB4MjQwIENvbG9yIFRGVCBMQ0QiCisgICAgICAgIGRlcGVuZHMgb24gRkJfTlVDOTAwCisKK2NvbmZpZyBGQl9OVUM5MDBfREVCVUcKKyAgICAgICAgYm9vbCAiTlVDOTAwIGxjZCBkZWJ1ZyBtZXNzYWdlcyIKKyAgICAgICAgZGVwZW5kcyBvbiBGQl9OVUM5MDAKKyAgICAgICAgaGVscAorICAgICAgICAgIFR1cm4gb24gZGVidWdnaW5nIG1lc3NhZ2VzLiBOb3RlIHRoYXQgeW91IGNhbiBzZXQvdW5zZXQgYXQgcnVuIHRpbWUKKyAgICAgICAgICB0aHJvdWdoIHN5c2ZzCisKIGNvbmZpZyBGQl9TTTUwMQogCXRyaXN0YXRlICJTaWxpY29uIE1vdGlvbiBTTTUwMSBmcmFtZWJ1ZmZlciBzdXBwb3J0IgogCWRlcGVuZHMgb24gRkIgJiYgTUZEX1NNNTAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlIGIvZHJpdmVycy92aWRlby9NYWtlZmlsZQppbmRleCA0ZWNiMzBjLi5hNDJhZDU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdmlkZW8vTWFrZWZpbGUKQEAgLTEyOSw2ICsxMjksNyBAQAogb2JqLSQoQ09ORklHX0ZCX0NBUk1JTkUpICAgICAgICAgICs9IGNhcm1pbmVmYi5vCiBvYmotJChDT05GSUdfRkJfTUI4NjJYWCkJICArPSBtYjg2Mnh4Lwogb2JqLSQoQ09ORklHX0ZCX01TTSkgICAgICAgICAgICAgICs9IG1zbS8KK29iai0kKENPTkZJR19GQl9OVUM5MDApICAgICAgICAgICArPSBudWM5MDBmYi5vCiAKICMgUGxhdGZvcm0gb3IgZmFsbGJhY2sgZHJpdmVycyBnbyBoZXJlCiBvYmotJChDT05GSUdfRkJfVVZFU0EpICAgICAgICAgICAgKz0gdXZlc2FmYi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2Fjb3JuZmIuYyBiL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jCmluZGV4IDBiY2M1OWUuLjQzZDdkNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYWNvcm5mYi5jCkBAIC0xMjIxLDcgKzEyMjEsNyBAQAogCXByaW50aygiYWNvcm5mYjogZnJlZWQgJWRLIG1lbW9yeVxuIiwgbWJfZnJlZWQpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBhY29ybmZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGFjb3JuZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIGxvbmcgc2l6ZTsKIAl1X2ludCBoX3N5bmMsIHZfc3luYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXJjZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXJjZmIuYwppbmRleCBjMzQzMTY5Li4wMTU1NGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2FyY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9hcmNmYi5jCkBAIC01MDQsNyArNTA0LDcgQEAKIAkuZmJfaW9jdGwgCT0gYXJjZmJfaW9jdGwsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBhcmNmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhcmNmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJaW50IHJldHZhbCA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2FzaWxpYW50ZmIuYyBiL2RyaXZlcnMvdmlkZW8vYXNpbGlhbnRmYi5jCmluZGV4IDlmZTkwY2UuLmU3MGJjMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYXNpbGlhbnRmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYXNpbGlhbnRmYi5jCkBAIC0xNDAsNyArMTQwLDcgQEAKIAogCQkvKiAzIDw9IG0gPD0gMjU3ICovCiAJCWlmIChtID49IDMgJiYgbSA8PSAyNTcpIHsKLQkJCXVuc2lnbmVkIG5ld19lcnJvciA9ICgoRnRhcmdldCAqIG4pIC0gKEZyZWYgKiBtKSkgPj0gMCA/CisJCQl1bnNpZ25lZCBuZXdfZXJyb3IgPSBGdGFyZ2V0ICogbiA+PSBGcmVmICogbSA/CiAJCQkJCSAgICAgICAoKEZ0YXJnZXQgKiBuKSAtIChGcmVmICogbSkpIDogKChGcmVmICogbSkgLSAoRnRhcmdldCAqIG4pKTsKIAkJCWlmIChuZXdfZXJyb3IgPCBiZXN0X2Vycm9yKSB7CiAJCQkJYmVzdF9uID0gbjsKQEAgLTE1Miw3ICsxNTIsNyBAQAogCQllbHNlIGlmIChtIDw9IDEwMjgpIHsKIAkJCS8qIHJlbWVtYmVyIHRoZXJlIGFyZSBzdGlsbCBvbmx5IDgtYml0cyBvZiBwcmVjaXNpb24gaW4gbSwgc28KIAkJCSAqIGF2b2lkIG92ZXItb3B0aW1pc3RpYyBlcnJvciBjYWxjdWxhdGlvbnMgKi8KLQkJCXVuc2lnbmVkIG5ld19lcnJvciA9ICgoRnRhcmdldCAqIG4pIC0gKEZyZWYgKiAobSAmIH4zKSkpID49IDAgPworCQkJdW5zaWduZWQgbmV3X2Vycm9yID0gRnRhcmdldCAqIG4gPj0gRnJlZiAqIChtICYgfjMpID8KIAkJCQkJICAgICAgICgoRnRhcmdldCAqIG4pIC0gKEZyZWYgKiAobSAmIH4zKSkpIDogKChGcmVmICogKG0gJiB+MykpIC0gKEZ0YXJnZXQgKiBuKSk7CiAJCQlpZiAobmV3X2Vycm9yIDwgYmVzdF9lcnJvcikgewogCQkJCWJlc3RfbiA9IG47CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC84OHBtODYweF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvODhwbTg2MHhfYmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGY3MDVjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvODhwbTg2MHhfYmwuYwpAQCAtMCwwICsxLDMwNCBAQAorLyoKKyAqIEJhY2tsaWdodCBkcml2ZXIgZm9yIE1hcnZlbGwgU2VtaWNvbmR1Y3RvciA4OFBNODYwNgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoJSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tsaWdodC5oPgorI2luY2x1ZGUgPGxpbnV4L21mZC84OHBtODYweC5oPgorCisjZGVmaW5lIE1BWF9CUklHSFRORVNTCQkoMHhGRikKKyNkZWZpbmUgTUlOX0JSSUdIVE5FU1MJCSgwKQorCisjZGVmaW5lIENVUlJFTlRfTUFTSwkJKDB4MUYgPDwgMSkKKworc3RydWN0IHBtODYweF9iYWNrbGlnaHRfZGF0YSB7CisJc3RydWN0IHBtODYweF9jaGlwICpjaGlwOworCXN0cnVjdCBpMmNfY2xpZW50ICppMmM7CisJaW50CWN1cnJlbnRfYnJpZ2h0bmVzczsKKwlpbnQJcG9ydDsKKwlpbnQJcHdtOworCWludAlpc2V0OworfTsKKworc3RhdGljIGlubGluZSBpbnQgd2xlZF9hKGludCBwb3J0KQoreworCWludCByZXQ7CisKKwlyZXQgPSAoKHBvcnQgLSBQTTg2MDZfQkFDS0xJR0hUMSkgPDwgMSkgKyAyOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHdsZWRfYihpbnQgcG9ydCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gKChwb3J0IC0gUE04NjA2X0JBQ0tMSUdIVDEpIDw8IDEpICsgMzsKKwlyZXR1cm4gcmV0OworfQorCisvKiBXTEVEMiAmIFdMRUQzIHNoYXJlIHRoZSBzYW1lIElEQyAqLworc3RhdGljIGlubGluZSBpbnQgd2xlZF9pZGMoaW50IHBvcnQpCit7CisJaW50IHJldDsKKworCXN3aXRjaCAocG9ydCkgeworCWNhc2UgUE04NjA2X0JBQ0tMSUdIVDE6CisJY2FzZSBQTTg2MDZfQkFDS0xJR0hUMjoKKwkJcmV0ID0gKChwb3J0IC0gUE04NjA2X0JBQ0tMSUdIVDEpIDw8IDEpICsgMzsKKwkJYnJlYWs7CisJY2FzZSBQTTg2MDZfQkFDS0xJR0hUMzoKKwlkZWZhdWx0OgorCQlyZXQgPSAoKHBvcnQgLSBQTTg2MDZfQkFDS0xJR0hUMikgPDwgMSkgKyAzOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwbTg2MHhfYmFja2xpZ2h0X3NldChzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwsIGludCBicmlnaHRuZXNzKQoreworCXN0cnVjdCBwbTg2MHhfYmFja2xpZ2h0X2RhdGEgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CisJc3RydWN0IHBtODYweF9jaGlwICpjaGlwID0gZGF0YS0+Y2hpcDsKKwl1bnNpZ25lZCBjaGFyIHZhbHVlOworCWludCByZXQ7CisKKwlpZiAoYnJpZ2h0bmVzcyA+IE1BWF9CUklHSFRORVNTKQorCQl2YWx1ZSA9IE1BWF9CUklHSFRORVNTOworCWVsc2UKKwkJdmFsdWUgPSBicmlnaHRuZXNzOworCisJcmV0ID0gcG04NjB4X3JlZ193cml0ZShkYXRhLT5pMmMsIHdsZWRfYShkYXRhLT5wb3J0KSwgdmFsdWUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWlmICgoZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID09IDApICYmIGJyaWdodG5lc3MpIHsKKwkJaWYgKGRhdGEtPmlzZXQpIHsKKwkJCXJldCA9IHBtODYweF9zZXRfYml0cyhkYXRhLT5pMmMsIHdsZWRfaWRjKGRhdGEtPnBvcnQpLAorCQkJCQkgICAgICBDVVJSRU5UX01BU0ssIGRhdGEtPmlzZXQpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKGRhdGEtPnB3bSkgeworCQkJcmV0ID0gcG04NjB4X3NldF9iaXRzKGRhdGEtPmkyYywgUE04NjA2X1BXTSwKKwkJCQkJICAgICAgUE04NjA2X1BXTV9GUkVRX01BU0ssIGRhdGEtPnB3bSk7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoYnJpZ2h0bmVzcyA9PSBNQVhfQlJJR0hUTkVTUykgeworCQkJLyogc2V0IFdMRURfT04gYml0IGFzIDEwMCUgKi8KKwkJCXJldCA9IHBtODYweF9zZXRfYml0cyhkYXRhLT5pMmMsIHdsZWRfYihkYXRhLT5wb3J0KSwKKwkJCQkJICAgICAgUE04NjA2X1dMRURfT04sIFBNODYwNl9XTEVEX09OKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChicmlnaHRuZXNzID09IE1BWF9CUklHSFRORVNTKSB7CisJCQkvKiBzZXQgV0xFRF9PTiBiaXQgYXMgMTAwJSAqLworCQkJcmV0ID0gcG04NjB4X3NldF9iaXRzKGRhdGEtPmkyYywgd2xlZF9iKGRhdGEtPnBvcnQpLAorCQkJCQkgICAgICBQTTg2MDZfV0xFRF9PTiwgUE04NjA2X1dMRURfT04pOworCQl9IGVsc2UgeworCQkJLyogY2xlYXIgV0xFRF9PTiBiaXQgc2luY2UgaXQncyBub3QgMTAwJSAqLworCQkJcmV0ID0gcG04NjB4X3NldF9iaXRzKGRhdGEtPmkyYywgd2xlZF9iKGRhdGEtPnBvcnQpLAorCQkJCQkgICAgICBQTTg2MDZfV0xFRF9PTiwgMCk7CisJCX0KKwl9CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCisJZGV2X2RiZyhjaGlwLT5kZXYsICJzZXQgYnJpZ2h0bmVzcyAlZFxuIiwgdmFsdWUpOworCWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA9IHZhbHVlOworCXJldHVybiAwOworb3V0OgorCWRldl9kYmcoY2hpcC0+ZGV2LCAic2V0IGJyaWdodG5lc3MgJWQgZmFpbHVyZSB3aXRoIHJldHVybiAiCisJCSJ2YWx1ZTolZFxuIiwgdmFsdWUsIHJldCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwbTg2MHhfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsKQoreworCWludCBicmlnaHRuZXNzID0gYmwtPnByb3BzLmJyaWdodG5lc3M7CisKKwlpZiAoYmwtPnByb3BzLnBvd2VyICE9IEZCX0JMQU5LX1VOQkxBTkspCisJCWJyaWdodG5lc3MgPSAwOworCisJaWYgKGJsLT5wcm9wcy5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQlicmlnaHRuZXNzID0gMDsKKworCWlmIChibC0+cHJvcHMuc3RhdGUgJiBCTF9DT1JFX1NVU1BFTkRFRCkKKwkJYnJpZ2h0bmVzcyA9IDA7CisKKwlyZXR1cm4gcG04NjB4X2JhY2tsaWdodF9zZXQoYmwsIGJyaWdodG5lc3MpOworfQorCitzdGF0aWMgaW50IHBtODYweF9iYWNrbGlnaHRfZ2V0X2JyaWdodG5lc3Moc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsKQoreworCXN0cnVjdCBwbTg2MHhfYmFja2xpZ2h0X2RhdGEgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CisJc3RydWN0IHBtODYweF9jaGlwICpjaGlwID0gZGF0YS0+Y2hpcDsKKwlpbnQgcmV0OworCisJcmV0ID0gcG04NjB4X3JlZ19yZWFkKGRhdGEtPmkyYywgd2xlZF9hKGRhdGEtPnBvcnQpKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gcmV0OworCWRldl9kYmcoY2hpcC0+ZGV2LCAiZ2V0IGJyaWdodG5lc3MgJWRcbiIsIGRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyk7CisJcmV0dXJuIGRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzczsKK291dDoKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIHN0cnVjdCBiYWNrbGlnaHRfb3BzIHBtODYweF9iYWNrbGlnaHRfb3BzID0geworCS5vcHRpb25zCT0gQkxfQ09SRV9TVVNQRU5EUkVTVU1FLAorCS51cGRhdGVfc3RhdHVzCT0gcG04NjB4X2JhY2tsaWdodF91cGRhdGVfc3RhdHVzLAorCS5nZXRfYnJpZ2h0bmVzcwk9IHBtODYweF9iYWNrbGlnaHRfZ2V0X2JyaWdodG5lc3MsCit9OworCitzdGF0aWMgaW50IF9fY2hlY2tfZGV2aWNlKHN0cnVjdCBwbTg2MHhfYmFja2xpZ2h0X3BkYXRhICpwZGF0YSwgY2hhciAqbmFtZSkKK3sKKwlzdHJ1Y3QgcG04NjB4X2JhY2tsaWdodF9wZGF0YSAqcCA9IHBkYXRhOworCWludCByZXQgPSAtRUlOVkFMOworCisJd2hpbGUgKHAgJiYgcC0+aWQpIHsKKwkJaWYgKChwLT5pZCAhPSBQTTg2MDZfSURfQkFDS0xJR0hUKSB8fCAocC0+ZmxhZ3MgPCAwKSkKKwkJCWJyZWFrOworCisJCWlmICghc3RybmNtcChuYW1lLCBwbTg2MHhfYmFja2xpZ2h0X25hbWVbcC0+ZmxhZ3NdLAorCQkJTUZEX05BTUVfU0laRSkpIHsKKwkJCXJldCA9IChpbnQpcC0+ZmxhZ3M7CisJCQlicmVhazsKKwkJfQorCQlwKys7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcG04NjB4X2JhY2tsaWdodF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBwbTg2MHhfY2hpcCAqY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShwZGV2LT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgcG04NjB4X3BsYXRmb3JtX2RhdGEgKnBtODYweF9wZGF0YTsKKwlzdHJ1Y3QgcG04NjB4X2JhY2tsaWdodF9wZGF0YSAqcGRhdGEgPSBOVUxMOworCXN0cnVjdCBwbTg2MHhfYmFja2xpZ2h0X2RhdGEgKmRhdGE7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXVuc2lnbmVkIGNoYXIgdmFsdWU7CisJY2hhciBuYW1lW01GRF9OQU1FX1NJWkVdOworCWludCByZXQ7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CisJaWYgKHJlcyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5vIEkvTyByZXNvdXJjZSFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAocGRldi0+ZGV2LnBhcmVudC0+cGxhdGZvcm1fZGF0YSkgeworCQlwbTg2MHhfcGRhdGEgPSBwZGV2LT5kZXYucGFyZW50LT5wbGF0Zm9ybV9kYXRhOworCQlwZGF0YSA9IHBtODYweF9wZGF0YS0+YmFja2xpZ2h0OworCX0KKwlpZiAocGRhdGEgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJwbGF0Zm9ybSBkYXRhIGlzbid0IGFzc2lnbmVkIHRvICIKKwkJCSJiYWNrbGlnaHRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHBtODYweF9iYWNrbGlnaHRfZGF0YSksIEdGUF9LRVJORUwpOworCWlmIChkYXRhID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXN0cm5jcHkobmFtZSwgcmVzLT5uYW1lLCBNRkRfTkFNRV9TSVpFKTsKKwlkYXRhLT5jaGlwID0gY2hpcDsKKwlkYXRhLT5pMmMgPSAoY2hpcC0+aWQgPT0gQ0hJUF9QTTg2MDYpID8gY2hpcC0+Y2xpZW50CVwKKwkJCTogY2hpcC0+Y29tcGFuaW9uOworCWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA9IE1BWF9CUklHSFRORVNTOworCWRhdGEtPnB3bSA9IHBkYXRhLT5wd207CisJZGF0YS0+aXNldCA9IHBkYXRhLT5pc2V0OworCWRhdGEtPnBvcnQgPSBfX2NoZWNrX2RldmljZShwZGF0YSwgbmFtZSk7CisJaWYgKGRhdGEtPnBvcnQgPCAwKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIndyb25nIHBsYXRmb3JtIGRhdGEgaXMgYXNzaWduZWQiKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYmwgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKG5hbWUsICZwZGV2LT5kZXYsIGRhdGEsCisJCQkJCSZwbTg2MHhfYmFja2xpZ2h0X29wcyk7CisJaWYgKElTX0VSUihibCkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIGJhY2tsaWdodFxuIik7CisJCWtmcmVlKGRhdGEpOworCQlyZXR1cm4gUFRSX0VSUihibCk7CisJfQorCWJsLT5wcm9wcy5tYXhfYnJpZ2h0bmVzcyA9IE1BWF9CUklHSFRORVNTOworCWJsLT5wcm9wcy5icmlnaHRuZXNzID0gTUFYX0JSSUdIVE5FU1M7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBibCk7CisKKwkvKiBFbmFibGUgcmVmZXJlbmNlIFZTWVMgKi8KKwlyZXQgPSBwbTg2MHhfcmVnX3JlYWQoZGF0YS0+aTJjLCBQTTg2MDZfVlNZUyk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gb3V0OworCWlmICgocmV0ICYgUE04NjA2X1ZTWVNfRU4pID09IDApIHsKKwkJdmFsdWUgPSByZXQgfCBQTTg2MDZfVlNZU19FTjsKKwkJcmV0ID0gcG04NjB4X3JlZ193cml0ZShkYXRhLT5pMmMsIFBNODYwNl9WU1lTLCB2YWx1ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCS8qIEVuYWJsZSByZWZlcmVuY2UgT1NDICovCisJcmV0ID0gcG04NjB4X3JlZ19yZWFkKGRhdGEtPmkyYywgUE04NjA2X01JU0MpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKwlpZiAoKHJldCAmIFBNODYwNl9NSVNDX09TQ19FTikgPT0gMCkgeworCQl2YWx1ZSA9IHJldCB8IFBNODYwNl9NSVNDX09TQ19FTjsKKwkJcmV0ID0gcG04NjB4X3JlZ193cml0ZShkYXRhLT5pMmMsIFBNODYwNl9NSVNDLCB2YWx1ZSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJfQorCS8qIHJlYWQgY3VycmVudCBiYWNrbGlnaHQgKi8KKwlyZXQgPSBwbTg2MHhfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzKGJsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhibCk7CisJcmV0dXJuIDA7CitvdXQ6CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBwbTg2MHhfYmFja2xpZ2h0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBwbTg2MHhfYmFja2xpZ2h0X2RhdGEgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CisKKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmwpOworCWtmcmVlKGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBwbTg2MHhfYmFja2xpZ2h0X2RyaXZlciA9IHsKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAiODhwbTg2MHgtYmFja2xpZ2h0IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gcG04NjB4X2JhY2tsaWdodF9wcm9iZSwKKwkucmVtb3ZlCQk9IHBtODYweF9iYWNrbGlnaHRfcmVtb3ZlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcG04NjB4X2JhY2tsaWdodF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmcG04NjB4X2JhY2tsaWdodF9kcml2ZXIpOworfQorbW9kdWxlX2luaXQocG04NjB4X2JhY2tsaWdodF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IHBtODYweF9iYWNrbGlnaHRfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZwbTg2MHhfYmFja2xpZ2h0X2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChwbTg2MHhfYmFja2xpZ2h0X2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkJhY2tsaWdodCBEcml2ZXIgZm9yIE1hcnZlbGwgU2VtaWNvbmR1Y3RvciA4OFBNODYwNiIpOworTU9EVUxFX0FVVEhPUigiSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FMSUFTKCJwbGF0Zm9ybTo4OHBtODYweC1iYWNrbGlnaHQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9LY29uZmlnCmluZGV4IDA5YmZhOTYuLjBjNzdmYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvS2NvbmZpZwpAQCAtMjEyLDYgKzIxMiwxMyBAQAogCSAgSWYgeW91IGhhdmUgYSBMQ0QgYmFja2xpZ2h0IGNvbm5lY3RlZCB0byB0aGUgV0xFRCBvdXRwdXQgb2YgREE5MDMwCiAJICBvciBEQTkwMzQgV0xFRCBvdXRwdXQsIHNheSBZIGhlcmUgdG8gZW5hYmxlIHRoaXMgZHJpdmVyLgogCitjb25maWcgQkFDS0xJR0hUX01BWDg5MjUKKwl0cmlzdGF0ZSAiQmFja2xpZ2h0IGRyaXZlciBmb3IgTUFYODkyNSIKKwlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgJiYgTUZEX01BWDg5MjUKKwloZWxwCisJICBJZiB5b3UgaGF2ZSBhIExDRCBiYWNrbGlnaHQgY29ubmVjdGVkIHRvIHRoZSBXTEVEIG91dHB1dCBvZiBNQVg4OTI1CisJICBXTEVEIG91dHB1dCwgc2F5IFkgaGVyZSB0byBlbmFibGUgdGhpcyBkcml2ZXIuCisKIGNvbmZpZyBCQUNLTElHSFRfTUJQX05WSURJQQogICAgICAgIHRyaXN0YXRlICJNYWNCb29rIFBybyBOdmlkaWEgQmFja2xpZ2h0IERyaXZlciIKICAgICAgICBkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgJiYgWDg2CkBAIC0yNjIsMyArMjY5LDkgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUgd2lsbAogCSAgYmUgY2FsbGVkIGFkcDU1MjBfYmwuCiAKK2NvbmZpZyBCQUNLTElHSFRfODhQTTg2MFgKKwl0cmlzdGF0ZSAiQmFja2xpZ2h0IERyaXZlciBmb3IgODhQTTg2MDYgdXNpbmcgV0xFRCIKKwlkZXBlbmRzIG9uIEJBQ0tMSUdIVF9DTEFTU19ERVZJQ0UgJiYgTUZEXzg4UE04NjBYCisJaGVscAorCSAgU2F5IFkgdG8gZW5hYmxlIHRoZSBiYWNrbGlnaHQgZHJpdmVyIGZvciBNYXJ2ZWxsIDg4UE04NjA2LgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlCmluZGV4IDlhNDA1NTQuLjZjNzA0ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L01ha2VmaWxlCkBAIC0yMiwxMCArMjIsMTIgQEAKIG9iai0kKENPTkZJR19CQUNLTElHSFRfQ0FSSUxMT19SQU5DSCkgKz0gY3JfYmxsY2Qubwogb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9QV00pCSs9IHB3bV9ibC5vCiBvYmotJChDT05GSUdfQkFDS0xJR0hUX0RBOTAzWCkJKz0gZGE5MDN4X2JsLm8KK29iai0kKENPTkZJR19CQUNLTElHSFRfTUFYODkyNSkJKz0gbWF4ODkyNV9ibC5vCiBvYmotJChDT05GSUdfQkFDS0xJR0hUX01CUF9OVklESUEpICs9IG1icF9udmlkaWFfYmwubwogb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9UT1NBKQkrPSB0b3NhX2JsLm8KIG9iai0kKENPTkZJR19CQUNLTElHSFRfU0FIQVJBKQkrPSBrYjM4ODZfYmwubwogb2JqLSQoQ09ORklHX0JBQ0tMSUdIVF9XTTgzMVgpCSs9IHdtODMxeF9ibC5vCiBvYmotJChDT05GSUdfQkFDS0xJR0hUX0FEWCkgICAgKz0gYWR4X2JsLm8KIG9iai0kKENPTkZJR19CQUNLTElHSFRfQURQNTUyMCkJKz0gYWRwNTUyMF9ibC5vCitvYmotJChDT05GSUdfQkFDS0xJR0hUXzg4UE04NjBYKSArPSA4OHBtODYweF9ibC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L21heDg5MjVfYmwuYyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L21heDg5MjVfYmwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjY3MDY5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbWF4ODkyNV9ibC5jCkBAIC0wLDAgKzEsMjAwIEBACisvKgorICogQmFja2xpZ2h0IGRyaXZlciBmb3IgTWF4aW0gTUFYODkyNQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICogICAgICBIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2xpZ2h0Lmg+CisjaW5jbHVkZSA8bGludXgvbWZkL21heDg5MjUuaD4KKworI2RlZmluZSBNQVhfQlJJR0hUTkVTUwkJKDB4ZmYpCisjZGVmaW5lIE1JTl9CUklHSFRORVNTCQkoMCkKKworI2RlZmluZSBMV1hfRlJFUSh4KQkJKCgoeCAtIDYwMSkgLyAxMDApICYgMHg3KQorCitzdHJ1Y3QgbWF4ODkyNV9iYWNrbGlnaHRfZGF0YSB7CisJc3RydWN0IG1heDg5MjVfY2hpcAkqY2hpcDsKKworCWludAkJY3VycmVudF9icmlnaHRuZXNzOworfTsKKworc3RhdGljIGludCBtYXg4OTI1X2JhY2tsaWdodF9zZXQoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsLCBpbnQgYnJpZ2h0bmVzcykKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9iYWNrbGlnaHRfZGF0YSAqZGF0YSA9IGJsX2dldF9kYXRhKGJsKTsKKwlzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwID0gZGF0YS0+Y2hpcDsKKwl1bnNpZ25lZCBjaGFyIHZhbHVlOworCWludCByZXQ7CisKKwlpZiAoYnJpZ2h0bmVzcyA+IE1BWF9CUklHSFRORVNTKQorCQl2YWx1ZSA9IE1BWF9CUklHSFRORVNTOworCWVsc2UKKwkJdmFsdWUgPSBicmlnaHRuZXNzOworCisJcmV0ID0gbWF4ODkyNV9yZWdfd3JpdGUoY2hpcC0+aTJjLCBNQVg4OTI1X1dMRURfQ05UTCwgdmFsdWUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWlmICghZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzICYmIGJyaWdodG5lc3MpCisJCS8qIGVuYWJsZSBXTEVEIG91dHB1dCAqLworCQlyZXQgPSBtYXg4OTI1X3NldF9iaXRzKGNoaXAtPmkyYywgTUFYODkyNV9XTEVEX01PREVfQ05UTCwgMSwgMSk7CisJZWxzZSBpZiAoIWJyaWdodG5lc3MpCisJCS8qIGRpc2FibGUgV0xFRCBvdXRwdXQgKi8KKwkJcmV0ID0gbWF4ODkyNV9zZXRfYml0cyhjaGlwLT5pMmMsIE1BWDg5MjVfV0xFRF9NT0RFX0NOVEwsIDEsIDApOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKwlkZXZfZGJnKGNoaXAtPmRldiwgInNldCBicmlnaHRuZXNzICVkXG4iLCB2YWx1ZSk7CisJZGF0YS0+Y3VycmVudF9icmlnaHRuZXNzID0gdmFsdWU7CisJcmV0dXJuIDA7CitvdXQ6CisJZGV2X2RiZyhjaGlwLT5kZXYsICJzZXQgYnJpZ2h0bmVzcyAlZCBmYWlsdXJlIHdpdGggcmV0dXJuIHZhbHVlOiVkXG4iLAorCQl2YWx1ZSwgcmV0KTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1heDg5MjVfYmFja2xpZ2h0X3VwZGF0ZV9zdGF0dXMoc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsKQoreworCWludCBicmlnaHRuZXNzID0gYmwtPnByb3BzLmJyaWdodG5lc3M7CisKKwlpZiAoYmwtPnByb3BzLnBvd2VyICE9IEZCX0JMQU5LX1VOQkxBTkspCisJCWJyaWdodG5lc3MgPSAwOworCisJaWYgKGJsLT5wcm9wcy5mYl9ibGFuayAhPSBGQl9CTEFOS19VTkJMQU5LKQorCQlicmlnaHRuZXNzID0gMDsKKworCWlmIChibC0+cHJvcHMuc3RhdGUgJiBCTF9DT1JFX1NVU1BFTkRFRCkKKwkJYnJpZ2h0bmVzcyA9IDA7CisKKwlyZXR1cm4gbWF4ODkyNV9iYWNrbGlnaHRfc2V0KGJsLCBicmlnaHRuZXNzKTsKK30KKworc3RhdGljIGludCBtYXg4OTI1X2JhY2tsaWdodF9nZXRfYnJpZ2h0bmVzcyhzdHJ1Y3QgYmFja2xpZ2h0X2RldmljZSAqYmwpCit7CisJc3RydWN0IG1heDg5MjVfYmFja2xpZ2h0X2RhdGEgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CisJc3RydWN0IG1heDg5MjVfY2hpcCAqY2hpcCA9IGRhdGEtPmNoaXA7CisJaW50IHJldDsKKworCXJldCA9IG1heDg5MjVfcmVnX3JlYWQoY2hpcC0+aTJjLCBNQVg4OTI1X1dMRURfQ05UTCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAtRUlOVkFMOworCWRhdGEtPmN1cnJlbnRfYnJpZ2h0bmVzcyA9IHJldDsKKwlkZXZfZGJnKGNoaXAtPmRldiwgImdldCBicmlnaHRuZXNzICVkXG4iLCBkYXRhLT5jdXJyZW50X2JyaWdodG5lc3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFja2xpZ2h0X29wcyBtYXg4OTI1X2JhY2tsaWdodF9vcHMgPSB7CisJLm9wdGlvbnMJPSBCTF9DT1JFX1NVU1BFTkRSRVNVTUUsCisJLnVwZGF0ZV9zdGF0dXMJPSBtYXg4OTI1X2JhY2tsaWdodF91cGRhdGVfc3RhdHVzLAorCS5nZXRfYnJpZ2h0bmVzcwk9IG1heDg5MjVfYmFja2xpZ2h0X2dldF9icmlnaHRuZXNzLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgbWF4ODkyNV9iYWNrbGlnaHRfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbWF4ODkyNV9jaGlwICpjaGlwID0gZGV2X2dldF9kcnZkYXRhKHBkZXYtPmRldi5wYXJlbnQpOworCXN0cnVjdCBtYXg4OTI1X3BsYXRmb3JtX2RhdGEgKm1heDg5MjVfcGRhdGE7CisJc3RydWN0IG1heDg5MjVfYmFja2xpZ2h0X3BkYXRhICpwZGF0YSA9IE5VTEw7CisJc3RydWN0IG1heDg5MjVfYmFja2xpZ2h0X2RhdGEgKmRhdGE7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWNoYXIgbmFtZVtNQVg4OTI1X05BTUVfU0laRV07CisJdW5zaWduZWQgY2hhciB2YWx1ZTsKKwlpbnQgcmV0OworCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJL08gcmVzb3VyY2UhXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKHBkZXYtPmRldi5wYXJlbnQtPnBsYXRmb3JtX2RhdGEpIHsKKwkJbWF4ODkyNV9wZGF0YSA9IHBkZXYtPmRldi5wYXJlbnQtPnBsYXRmb3JtX2RhdGE7CisJCXBkYXRhID0gbWF4ODkyNV9wZGF0YS0+YmFja2xpZ2h0OworCX0KKworCWlmICghcGRhdGEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAicGxhdGZvcm0gZGF0YSBpc24ndCBhc3NpZ25lZCB0byAiCisJCQkiYmFja2xpZ2h0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtYXg4OTI1X2JhY2tsaWdodF9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisJc3RybmNweShuYW1lLCByZXMtPm5hbWUsIE1BWDg5MjVfTkFNRV9TSVpFKTsKKwlkYXRhLT5jaGlwID0gY2hpcDsKKwlkYXRhLT5jdXJyZW50X2JyaWdodG5lc3MgPSAwOworCisJYmwgPSBiYWNrbGlnaHRfZGV2aWNlX3JlZ2lzdGVyKG5hbWUsICZwZGV2LT5kZXYsIGRhdGEsCisJCQkJCSZtYXg4OTI1X2JhY2tsaWdodF9vcHMpOworCWlmIChJU19FUlIoYmwpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBiYWNrbGlnaHRcbiIpOworCQlrZnJlZShkYXRhKTsKKwkJcmV0dXJuIFBUUl9FUlIoYmwpOworCX0KKwlibC0+cHJvcHMubWF4X2JyaWdodG5lc3MgPSBNQVhfQlJJR0hUTkVTUzsKKwlibC0+cHJvcHMuYnJpZ2h0bmVzcyA9IE1BWF9CUklHSFRORVNTOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgYmwpOworCisJdmFsdWUgPSAwOworCWlmIChwZGF0YS0+bHh3X3NjbCkKKwkJdmFsdWUgfD0gKDEgPDwgNyk7CisJaWYgKHBkYXRhLT5seHdfZnJlcSkKKwkJdmFsdWUgfD0gKExXWF9GUkVRKHBkYXRhLT5seHdfZnJlcSkgPDwgNCk7CisJaWYgKHBkYXRhLT5kdWFsX3N0cmluZykKKwkJdmFsdWUgfD0gKDEgPDwgMSk7CisJcmV0ID0gbWF4ODkyNV9zZXRfYml0cyhjaGlwLT5pMmMsIE1BWDg5MjVfV0xFRF9NT0RFX0NOVEwsIDB4ZmUsIHZhbHVlKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdXQ7CisKKwliYWNrbGlnaHRfdXBkYXRlX3N0YXR1cyhibCk7CisJcmV0dXJuIDA7CitvdXQ6CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbWF4ODkyNV9iYWNrbGlnaHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IG1heDg5MjVfYmFja2xpZ2h0X2RhdGEgKmRhdGEgPSBibF9nZXRfZGF0YShibCk7CisKKwliYWNrbGlnaHRfZGV2aWNlX3VucmVnaXN0ZXIoYmwpOworCWtmcmVlKGRhdGEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtYXg4OTI1X2JhY2tsaWdodF9kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm1heDg5MjUtYmFja2xpZ2h0IiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKKwkucHJvYmUJCT0gbWF4ODkyNV9iYWNrbGlnaHRfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChtYXg4OTI1X2JhY2tsaWdodF9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWF4ODkyNV9iYWNrbGlnaHRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1heDg5MjVfYmFja2xpZ2h0X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChtYXg4OTI1X2JhY2tsaWdodF9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IG1heDg5MjVfYmFja2xpZ2h0X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmbWF4ODkyNV9iYWNrbGlnaHRfZHJpdmVyKTsKK307Cittb2R1bGVfZXhpdChtYXg4OTI1X2JhY2tsaWdodF9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJCYWNrbGlnaHQgRHJpdmVyIGZvciBNYXhpbSBNQVg4OTI1Iik7CitNT0RVTEVfQVVUSE9SKCJIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVMoInBsYXRmb3JtOm1heDg5MjUtYmFja2xpZ2h0Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JmNTR4LWxxMDQzZmIuYyBiL2RyaXZlcnMvdmlkZW8vYmY1NHgtbHEwNDNmYi5jCmluZGV4IGU0OWFlNWVkLi44MTQzMTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JmNTR4LWxxMDQzZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JmNTR4LWxxMDQzZmIuYwpAQCAtODIsNyArODIsNiBAQAogCXVuc2lnbmVkIGNoYXIgKmZiX2J1ZmZlcjsJLyogUkdCIEJ1ZmZlciAqLwogCiAJZG1hX2FkZHJfdCBkbWFfaGFuZGxlOwotCWludCBscTA0M19tbWFwOwogCWludCBscTA0M19vcGVuX2NudDsKIAlpbnQgaXJxOwogCXNwaW5sb2NrX3QgbG9jazsJLyogbG9jayAqLwpAQCAtMzE2LDcgKzMxNSw2IEBACiAJc3Bpbl9sb2NrKCZmYmktPmxvY2spOwogCiAJZmJpLT5scTA0M19vcGVuX2NudC0tOwotCWZiaS0+bHEwNDNfbW1hcCA9IDA7CiAKIAlpZiAoZmJpLT5scTA0M19vcGVuX2NudCA8PSAwKSB7CiAKQEAgLTM3NCwzMyArMzcyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBiZmluX2JmNTR4X2ZiX21tYXAoc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQotewotCi0Jc3RydWN0IGJmaW5fYmY1NHhmYl9pbmZvICpmYmkgPSBpbmZvLT5wYXI7Ci0KLQlpZiAoZmJpLT5scTA0M19tbWFwKQotCQlyZXR1cm4gLTE7Ci0KLQlzcGluX2xvY2soJmZiaS0+bG9jayk7Ci0JZmJpLT5scTA0M19tbWFwID0gMTsKLQlzcGluX3VubG9jaygmZmJpLT5sb2NrKTsKLQotCXZtYS0+dm1fc3RhcnQgPSAodW5zaWduZWQgbG9uZykoZmJpLT5mYl9idWZmZXIpOwotCi0Jdm1hLT52bV9lbmQgPSB2bWEtPnZtX3N0YXJ0ICsgaW5mby0+Zml4LnNtZW1fbGVuOwotCS8qIEZvciB0aG9zZSB3aG8gZG9uJ3QgdW5kZXJzdGFuZCBob3cgbW1hcCB3b3JrcywgZ28gcmVhZAotCSAqICAgRG9jdW1lbnRhdGlvbi9ub21tdS1tbWFwLnR4dC4KLQkgKiBGb3IgdGhvc2UgdGhhdCBkbywgeW91IHdpbGwga25vdyB0aGF0IHRoZSBWTV9NQVlTSEFSRSBmbGFnCi0JICogbXVzdCBiZSBzZXQgaW4gdGhlIHZtYS0+dm1fZmxhZ3Mgc3RydWN0dXJlIG9uIG5vTU1VCi0JICogICBPdGhlciBmbGFncyBjYW4gYmUgc2V0LCBhbmQgYXJlIGRvY3VtZW50ZWQgaW4KLQkgKiAgIGluY2x1ZGUvbGludXgvbW0uaAotCSAqLwotCXZtYS0+dm1fZmxhZ3MgfD0gIFZNX01BWVNIQVJFIHwgVk1fU0hBUkVEOwotCi0JcmV0dXJuIDA7Ci19Ci0KIGludCBiZmluX2JmNTR4X2ZiX2N1cnNvcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IGZiX2N1cnNvciAqY3Vyc29yKQogewogCWlmIChub2N1cnNvcikKQEAgLTQ1Miw3ICs0MjMsNiBAQAogCS5mYl9maWxscmVjdCA9IGNmYl9maWxscmVjdCwKIAkuZmJfY29weWFyZWEgPSBjZmJfY29weWFyZWEsCiAJLmZiX2ltYWdlYmxpdCA9IGNmYl9pbWFnZWJsaXQsCi0JLmZiX21tYXAgPSBiZmluX2JmNTR4X2ZiX21tYXAsCiAJLmZiX2N1cnNvciA9IGJmaW5fYmY1NHhfZmJfY3Vyc29yLAogCS5mYl9zZXRjb2xyZWcgPSBiZmluX2JmNTR4X2ZiX3NldGNvbHJlZywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JmaW4tbHEwMzVxMS1mYi5jIGIvZHJpdmVycy92aWRlby9iZmluLWxxMDM1cTEtZmIuYwppbmRleCBiNjkwYzI2Li4wMzg3MjM2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JmaW4tbHEwMzVxMS1mYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmZpbi1scTAzNXExLWZiLmMKQEAgLTIyLDcgKzIyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaS9zcGkuaD4KLSNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8YXNtL2JsYWNrZmluLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iZmluLXQzNTBtY3FiLWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2JmaW4tdDM1MG1jcWItZmIuYwppbmRleCAyNTQ5YzUzLi41NjUzZDA4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JmaW4tdDM1MG1jcWItZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JmaW4tdDM1MG1jcWItZmIuYwpAQCAtODcsNyArODcsNiBAQAogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAl1bnNpZ25lZCBjaGFyICpmYl9idWZmZXI7CS8qIFJHQiBCdWZmZXIgKi8KIAlkbWFfYWRkcl90IGRtYV9oYW5kbGU7Ci0JaW50IGxxMDQzX21tYXA7CiAJaW50IGxxMDQzX29wZW5fY250OwogCWludCBpcnE7CiAJc3BpbmxvY2tfdCBsb2NrOwkvKiBsb2NrICovCkBAIC0yMzUsNyArMjM0LDYgQEAKIAlzcGluX2xvY2soJmZiaS0+bG9jayk7CiAKIAlmYmktPmxxMDQzX29wZW5fY250LS07Ci0JZmJpLT5scTA0M19tbWFwID0gMDsKIAogCWlmIChmYmktPmxxMDQzX29wZW5fY250IDw9IDApIHsKIAkJYmZpbl90MzUwbWNxYl9kaXNhYmxlX3BwaSgpOwpAQCAtMjkzLDMyICsyOTEsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJmaW5fdDM1MG1jcWJfZmJfbW1hcChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IGJmaW5fdDM1MG1jcWJmYl9pbmZvICpmYmkgPSBpbmZvLT5wYXI7Ci0KLQlpZiAoZmJpLT5scTA0M19tbWFwKQotCQlyZXR1cm4gLTE7Ci0KLQlzcGluX2xvY2soJmZiaS0+bG9jayk7Ci0JZmJpLT5scTA0M19tbWFwID0gMTsKLQlzcGluX3VubG9jaygmZmJpLT5sb2NrKTsKLQotCXZtYS0+dm1fc3RhcnQgPSAodW5zaWduZWQgbG9uZykoZmJpLT5mYl9idWZmZXIgKyBBQ1RJVkVfVklERU9fTUVNX09GRlNFVCk7Ci0KLQl2bWEtPnZtX2VuZCA9IHZtYS0+dm1fc3RhcnQgKyBpbmZvLT5maXguc21lbV9sZW47Ci0JLyogRm9yIHRob3NlIHdobyBkb24ndCB1bmRlcnN0YW5kIGhvdyBtbWFwIHdvcmtzLCBnbyByZWFkCi0JICogICBEb2N1bWVudGF0aW9uL25vbW11LW1tYXAudHh0LgotCSAqIEZvciB0aG9zZSB0aGF0IGRvLCB5b3Ugd2lsbCBrbm93IHRoYXQgdGhlIFZNX01BWVNIQVJFIGZsYWcKLQkgKiBtdXN0IGJlIHNldCBpbiB0aGUgdm1hLT52bV9mbGFncyBzdHJ1Y3R1cmUgb24gbm9NTVUKLQkgKiAgIE90aGVyIGZsYWdzIGNhbiBiZSBzZXQsIGFuZCBhcmUgZG9jdW1lbnRlZCBpbgotCSAqICAgaW5jbHVkZS9saW51eC9tbS5oCi0JICovCi0Jdm1hLT52bV9mbGFncyB8PSBWTV9NQVlTSEFSRSB8IFZNX1NIQVJFRDsKLQotCXJldHVybiAwOwotfQotCiBpbnQgYmZpbl90MzUwbWNxYl9mYl9jdXJzb3Ioc3RydWN0IGZiX2luZm8gKmluZm8sIHN0cnVjdCBmYl9jdXJzb3IgKmN1cnNvcikKIHsKIAlpZiAobm9jdXJzb3IpCkBAIC0zNzAsNyArMzQyLDYgQEAKIAkuZmJfZmlsbHJlY3QgPSBjZmJfZmlsbHJlY3QsCiAJLmZiX2NvcHlhcmVhID0gY2ZiX2NvcHlhcmVhLAogCS5mYl9pbWFnZWJsaXQgPSBjZmJfaW1hZ2VibGl0LAotCS5mYl9tbWFwID0gYmZpbl90MzUwbWNxYl9mYl9tbWFwLAogCS5mYl9jdXJzb3IgPSBiZmluX3QzNTBtY3FiX2ZiX2N1cnNvciwKIAkuZmJfc2V0Y29scmVnID0gYmZpbl90MzUwbWNxYl9mYl9zZXRjb2xyZWcsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9icm9hZHNoZWV0ZmIuYyBiL2RyaXZlcnMvdmlkZW8vYnJvYWRzaGVldGZiLmMKaW5kZXggZGY5Y2NiOS4uZWJkYTY4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9icm9hZHNoZWV0ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2Jyb2Fkc2hlZXRmYi5jCkBAIC0yOSwxMSArMjksNjUgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSA8dmlkZW8vYnJvYWRzaGVldGZiLmg+CiAKLS8qIERpc3BsYXkgc3BlY2lmaWMgaW5mb3JtYXRpb24gKi8KKy8qIHRyYWNrIHBhbmVsIHNwZWNpZmljIHBhcmFtZXRlcnMgKi8KK3N0cnVjdCBwYW5lbF9pbmZvIHsKKwlpbnQgdzsKKwlpbnQgaDsKKwl1MTYgc2RjZmc7CisJdTE2IGdkY2ZnOworCXUxNiBsdXRmbXQ7CisJdTE2IGZzeW5jbGVuOworCXUxNiBmZW5kZmJlZ2luOworCXUxNiBsc3luY2xlbjsKKwl1MTYgbGVuZGxiZWdpbjsKKwl1MTYgcGl4Y2xrOworfTsKKworLyogdGFibGUgb2YgcGFuZWwgc3BlY2lmaWMgcGFyYW1ldGVycyB0byBiZSBpbmRleGVkIGludG8gYnkgdGhlIGJvYXJkIGRyaXZlcnMgKi8KK3N0YXRpYyBzdHJ1Y3QgcGFuZWxfaW5mbyBwYW5lbF90YWJsZVtdID0geworCXsJLyogc3RhbmRhcmQgNiIgb24gVEZUIGJhY2twbGFuZSAqLworCQkudyA9IDgwMCwKKwkJLmggPSA2MDAsCisJCS5zZGNmZyA9ICgxMDAgfCAoMSA8PCA4KSB8ICgxIDw8IDkpKSwKKwkJLmdkY2ZnID0gMiwKKwkJLmx1dGZtdCA9ICg0IHwgKDEgPDwgNykpLAorCQkuZnN5bmNsZW4gPSA0LAorCQkuZmVuZGZiZWdpbiA9ICgxMCA8PCA4KSB8IDQsCisJCS5sc3luY2xlbiA9IDEwLAorCQkubGVuZGxiZWdpbiA9ICgxMDAgPDwgOCkgfCA0LAorCQkucGl4Y2xrID0gNiwKKwl9LAorCXsJLyogY3VzdG9tIDMuNyIgZmxleGlibGUgb24gUEVUIG9yIHN0ZWVsICovCisJCS53ID0gMzIwLAorCQkuaCA9IDI0MCwKKwkJLnNkY2ZnID0gKDY3IHwgKDAgPDwgOCkgfCAoMCA8PCA5KSB8ICgwIDw8IDEwKSB8ICgwIDw8IDEyKSksCisJCS5nZGNmZyA9IDMsCisJCS5sdXRmbXQgPSAoNCB8ICgxIDw8IDcpKSwKKwkJLmZzeW5jbGVuID0gMCwKKwkJLmZlbmRmYmVnaW4gPSAoODAgPDwgOCkgfCA0LAorCQkubHN5bmNsZW4gPSAxMCwKKwkJLmxlbmRsYmVnaW4gPSAoODAgPDwgOCkgfCAyMCwKKwkJLnBpeGNsayA9IDE0LAorCX0sCisJewkvKiBzdGFuZGFyZCA5LjciIG9uIFRGVCBiYWNrcGxhbmUgKi8KKwkJLncgPSAxMjAwLAorCQkuaCA9IDgyNSwKKwkJLnNkY2ZnID0gKDEwMCB8ICgxIDw8IDgpIHwgKDEgPDwgOSkgfCAoMCA8PCAxMCkgfCAoMCA8PCAxMikpLAorCQkuZ2RjZmcgPSAyLAorCQkubHV0Zm10ID0gKDQgfCAoMSA8PCA3KSksCisJCS5mc3luY2xlbiA9IDAsCisJCS5mZW5kZmJlZ2luID0gKDQgPDwgOCkgfCA0LAorCQkubHN5bmNsZW4gPSA0LAorCQkubGVuZGxiZWdpbiA9ICg2MCA8PCA4KSB8IDEwLAorCQkucGl4Y2xrID0gMywKKwl9LAorfTsKKwogI2RlZmluZSBEUFlfVyA4MDAKICNkZWZpbmUgRFBZX0ggNjAwCiAKQEAgLTYyLDMwICsxMTYsMzAgQEAKIH07CiAKIC8qIG1haW4gYnJvYWRzaGVldGZiIGZ1bmN0aW9ucyAqLwotc3RhdGljIHZvaWQgYnJvYWRzaGVldF9pc3N1ZV9kYXRhKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsIHUxNiBkYXRhKQorc3RhdGljIHZvaWQgYnJvYWRzaGVldF9ncGlvX2lzc3VlX2RhdGEoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgdTE2IGRhdGEpCiB7CiAJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX1dSLCAwKTsKIAlwYXItPmJvYXJkLT5zZXRfaGRiKHBhciwgZGF0YSk7CiAJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX1dSLCAxKTsKIH0KIAotc3RhdGljIHZvaWQgYnJvYWRzaGVldF9pc3N1ZV9jbWQoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgdTE2IGRhdGEpCitzdGF0aWMgdm9pZCBicm9hZHNoZWV0X2dwaW9faXNzdWVfY21kKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsIHUxNiBkYXRhKQogewogCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19EQywgMCk7Ci0JYnJvYWRzaGVldF9pc3N1ZV9kYXRhKHBhciwgZGF0YSk7CisJYnJvYWRzaGVldF9ncGlvX2lzc3VlX2RhdGEocGFyLCBkYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgYnJvYWRzaGVldF9zZW5kX2NvbW1hbmQoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgdTE2IGRhdGEpCitzdGF0aWMgdm9pZCBicm9hZHNoZWV0X2dwaW9fc2VuZF9jb21tYW5kKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsIHUxNiBkYXRhKQogewogCXBhci0+Ym9hcmQtPndhaXRfZm9yX3JkeShwYXIpOwogCiAJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0NTLCAwKTsKLQlicm9hZHNoZWV0X2lzc3VlX2NtZChwYXIsIGRhdGEpOworCWJyb2Fkc2hlZXRfZ3Bpb19pc3N1ZV9jbWQocGFyLCBkYXRhKTsKIAlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfREMsIDEpOwogCXBhci0+Ym9hcmQtPnNldF9jdGwocGFyLCBCU19DUywgMSk7CiB9CiAKLXN0YXRpYyB2b2lkIGJyb2Fkc2hlZXRfc2VuZF9jbWRhcmdzKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsIHUxNiBjbWQsCitzdGF0aWMgdm9pZCBicm9hZHNoZWV0X2dwaW9fc2VuZF9jbWRhcmdzKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsIHUxNiBjbWQsCiAJCQkJCWludCBhcmdjLCB1MTYgKmFyZ3YpCiB7CiAJaW50IGk7CkBAIC05MywxNSArMTQ3LDQzIEBACiAJcGFyLT5ib2FyZC0+d2FpdF9mb3JfcmR5KHBhcik7CiAKIAlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfQ1MsIDApOwotCWJyb2Fkc2hlZXRfaXNzdWVfY21kKHBhciwgY21kKTsKKwlicm9hZHNoZWV0X2dwaW9faXNzdWVfY21kKHBhciwgY21kKTsKIAlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfREMsIDEpOwogCiAJZm9yIChpID0gMDsgaSA8IGFyZ2M7IGkrKykKLQkJYnJvYWRzaGVldF9pc3N1ZV9kYXRhKHBhciwgYXJndltpXSk7CisJCWJyb2Fkc2hlZXRfZ3Bpb19pc3N1ZV9kYXRhKHBhciwgYXJndltpXSk7CiAJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0NTLCAxKTsKIH0KIAotc3RhdGljIHZvaWQgYnJvYWRzaGVldF9idXJzdF93cml0ZShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyLCBpbnQgc2l6ZSwKK3N0YXRpYyB2b2lkIGJyb2Fkc2hlZXRfbW1pb19zZW5kX2NtZGFyZ3Moc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgdTE2IGNtZCwKKwkJCQkgICAgaW50IGFyZ2MsIHUxNiAqYXJndikKK3sKKwlpbnQgaTsKKworCXBhci0+Ym9hcmQtPm1taW9fd3JpdGUocGFyLCBCU19NTUlPX0NNRCwgY21kKTsKKworCWZvciAoaSA9IDA7IGkgPCBhcmdjOyBpKyspCisJCXBhci0+Ym9hcmQtPm1taW9fd3JpdGUocGFyLCBCU19NTUlPX0RBVEEsIGFyZ3ZbaV0pOworfQorCitzdGF0aWMgdm9pZCBicm9hZHNoZWV0X3NlbmRfY29tbWFuZChzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyLCB1MTYgZGF0YSkKK3sKKwlpZiAocGFyLT5ib2FyZC0+bW1pb193cml0ZSkKKwkJcGFyLT5ib2FyZC0+bW1pb193cml0ZShwYXIsIEJTX01NSU9fQ01ELCBkYXRhKTsKKwllbHNlCisJCWJyb2Fkc2hlZXRfZ3Bpb19zZW5kX2NvbW1hbmQocGFyLCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgYnJvYWRzaGVldF9zZW5kX2NtZGFyZ3Moc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgdTE2IGNtZCwKKwkJCQkgICAgaW50IGFyZ2MsIHUxNiAqYXJndikKK3sKKwlpZiAocGFyLT5ib2FyZC0+bW1pb193cml0ZSkKKwkJYnJvYWRzaGVldF9tbWlvX3NlbmRfY21kYXJncyhwYXIsIGNtZCwgYXJnYywgYXJndik7CisJZWxzZQorCQlicm9hZHNoZWV0X2dwaW9fc2VuZF9jbWRhcmdzKHBhciwgY21kLCBhcmdjLCBhcmd2KTsKK30KKworc3RhdGljIHZvaWQgYnJvYWRzaGVldF9ncGlvX2J1cnN0X3dyaXRlKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsIGludCBzaXplLAogCQkJCQl1MTYgKmRhdGEpCiB7CiAJaW50IGk7CkBAIC0xMjEsNyArMjAzLDMwIEBACiAJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0NTLCAxKTsKIH0KIAotc3RhdGljIHUxNiBicm9hZHNoZWV0X2dldF9kYXRhKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIpCitzdGF0aWMgdm9pZCBicm9hZHNoZWV0X21taW9fYnVyc3Rfd3JpdGUoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgaW50IHNpemUsCisJCQkJICAgdTE2ICpkYXRhKQoreworCWludCBpOworCXUxNiB0bXA7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCXRtcCA9IChkYXRhW2ldICYgMHgwRikgPDwgNDsKKwkJdG1wIHw9IChkYXRhW2ldICYgMHgwRjAwKSA8PCA0OworCQlwYXItPmJvYXJkLT5tbWlvX3dyaXRlKHBhciwgQlNfTU1JT19EQVRBLCB0bXApOworCX0KKworfQorCitzdGF0aWMgdm9pZCBicm9hZHNoZWV0X2J1cnN0X3dyaXRlKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsIGludCBzaXplLAorCQkJCSAgIHUxNiAqZGF0YSkKK3sKKwlpZiAocGFyLT5ib2FyZC0+bW1pb193cml0ZSkKKwkJYnJvYWRzaGVldF9tbWlvX2J1cnN0X3dyaXRlKHBhciwgc2l6ZSwgZGF0YSk7CisJZWxzZQorCQlicm9hZHNoZWV0X2dwaW9fYnVyc3Rfd3JpdGUocGFyLCBzaXplLCBkYXRhKTsKK30KKworc3RhdGljIHUxNiBicm9hZHNoZWV0X2dwaW9fZ2V0X2RhdGEoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhcikKIHsKIAl1MTYgcmVzOwogCS8qIHdhaXQgZm9yIHJlYWR5IHRvIGdvIGhpLiAobG8gaXMgYnVzeSkgKi8KQEAgLTE0MSw3ICsyNDYsMTYgQEAKIAlyZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgdm9pZCBicm9hZHNoZWV0X3dyaXRlX3JlZyhzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyLCB1MTYgcmVnLAorCitzdGF0aWMgdTE2IGJyb2Fkc2hlZXRfZ2V0X2RhdGEoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhcikKK3sKKwlpZiAocGFyLT5ib2FyZC0+bW1pb19yZWFkKQorCQlyZXR1cm4gcGFyLT5ib2FyZC0+bW1pb19yZWFkKHBhcik7CisJZWxzZQorCQlyZXR1cm4gYnJvYWRzaGVldF9ncGlvX2dldF9kYXRhKHBhcik7Cit9CisKK3N0YXRpYyB2b2lkIGJyb2Fkc2hlZXRfZ3Bpb193cml0ZV9yZWcoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgdTE2IHJlZywKIAkJCQkJdTE2IGRhdGEpCiB7CiAJLyogd2FpdCBmb3IgcmVhZHkgdG8gZ28gaGkuIChsbyBpcyBidXN5KSAqLwpAQCAtMTUwLDQ0ICsyNjQsNTQxIEBACiAJLyogY3MgbG8sIGRjIGxvIGZvciBjbWQsIHdlIGxvIGZvciBlYWNoIGRhdGEsIGRiIGFzIHVzdWFsICovCiAJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0NTLCAwKTsKIAotCWJyb2Fkc2hlZXRfaXNzdWVfY21kKHBhciwgQlNfQ01EX1dSX1JFRyk7CisJYnJvYWRzaGVldF9ncGlvX2lzc3VlX2NtZChwYXIsIEJTX0NNRF9XUl9SRUcpOwogCiAJcGFyLT5ib2FyZC0+c2V0X2N0bChwYXIsIEJTX0RDLCAxKTsKIAotCWJyb2Fkc2hlZXRfaXNzdWVfZGF0YShwYXIsIHJlZyk7Ci0JYnJvYWRzaGVldF9pc3N1ZV9kYXRhKHBhciwgZGF0YSk7CisJYnJvYWRzaGVldF9ncGlvX2lzc3VlX2RhdGEocGFyLCByZWcpOworCWJyb2Fkc2hlZXRfZ3Bpb19pc3N1ZV9kYXRhKHBhciwgZGF0YSk7CiAKIAlwYXItPmJvYXJkLT5zZXRfY3RsKHBhciwgQlNfQ1MsIDEpOwogfQogCitzdGF0aWMgdm9pZCBicm9hZHNoZWV0X21taW9fd3JpdGVfcmVnKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsIHUxNiByZWcsCisJCQkJIHUxNiBkYXRhKQoreworCXBhci0+Ym9hcmQtPm1taW9fd3JpdGUocGFyLCBCU19NTUlPX0NNRCwgQlNfQ01EX1dSX1JFRyk7CisJcGFyLT5ib2FyZC0+bW1pb193cml0ZShwYXIsIEJTX01NSU9fREFUQSwgcmVnKTsKKwlwYXItPmJvYXJkLT5tbWlvX3dyaXRlKHBhciwgQlNfTU1JT19EQVRBLCBkYXRhKTsKKworfQorCitzdGF0aWMgdm9pZCBicm9hZHNoZWV0X3dyaXRlX3JlZyhzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyLCB1MTYgcmVnLAorCQkJCQl1MTYgZGF0YSkKK3sKKwlpZiAocGFyLT5ib2FyZC0+bW1pb193cml0ZSkKKwkJYnJvYWRzaGVldF9tbWlvX3dyaXRlX3JlZyhwYXIsIHJlZywgZGF0YSk7CisJZWxzZQorCQlicm9hZHNoZWV0X2dwaW9fd3JpdGVfcmVnKHBhciwgcmVnLCBkYXRhKTsKK30KKworc3RhdGljIHZvaWQgYnJvYWRzaGVldF93cml0ZV9yZWczMihzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyLCB1MTYgcmVnLAorCQkJCQl1MzIgZGF0YSkKK3sKKwlicm9hZHNoZWV0X3dyaXRlX3JlZyhwYXIsIHJlZywgY3B1X3RvX2xlMzIoZGF0YSkgJiAweEZGRkYpOworCWJyb2Fkc2hlZXRfd3JpdGVfcmVnKHBhciwgcmVnICsgMiwgKGNwdV90b19sZTMyKGRhdGEpID4+IDE2KSAmIDB4RkZGRik7Cit9CisKKwogc3RhdGljIHUxNiBicm9hZHNoZWV0X3JlYWRfcmVnKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsIHUxNiByZWcpCiB7Ci0JYnJvYWRzaGVldF9zZW5kX2NvbW1hbmQocGFyLCByZWcpOwotCW1zbGVlcCgxMDApOworCWJyb2Fkc2hlZXRfc2VuZF9jbWRhcmdzKHBhciwgQlNfQ01EX1JEX1JFRywgMSwgJnJlZyk7CisJcGFyLT5ib2FyZC0+d2FpdF9mb3JfcmR5KHBhcik7CiAJcmV0dXJuIGJyb2Fkc2hlZXRfZ2V0X2RhdGEocGFyKTsKIH0KIAorLyogZnVuY3Rpb25zIGZvciB3YXZlZm9ybSBtYW5pcHVsYXRpb24gKi8KK3N0YXRpYyBpbnQgaXNfYnJvYWRzaGVldF9wbGxfbG9ja2VkKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIpCit7CisJcmV0dXJuIGJyb2Fkc2hlZXRfcmVhZF9yZWcocGFyLCAweDAwMEEpICYgMHgwMDAxOworfQorCitzdGF0aWMgaW50IGJyb2Fkc2hlZXRfc2V0dXBfcGxscyhzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyKQoreworCWludCByZXRyeV9jb3VudCA9IDA7CisJdTE2IHRtcDsKKworCS8qIGRpc2FibGUgYXJyYWwgc2FlbWlwdSBtb2RlICovCisJYnJvYWRzaGVldF93cml0ZV9yZWcocGFyLCAweDAwMDYsIDB4MDAwMCk7CisKKwlicm9hZHNoZWV0X3dyaXRlX3JlZyhwYXIsIDB4MDAxMCwgMHgwMDA0KTsKKwlicm9hZHNoZWV0X3dyaXRlX3JlZyhwYXIsIDB4MDAxMiwgMHg1OTQ5KTsKKwlicm9hZHNoZWV0X3dyaXRlX3JlZyhwYXIsIDB4MDAxNCwgMHgwMDQwKTsKKwlicm9hZHNoZWV0X3dyaXRlX3JlZyhwYXIsIDB4MDAxNiwgMHgwMDAwKTsKKworCWRvIHsKKwkJaWYgKHJldHJ5X2NvdW50KysgPiAxMDApCisJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJbWRlbGF5KDEpOworCX0gd2hpbGUgKCFpc19icm9hZHNoZWV0X3BsbF9sb2NrZWQocGFyKSk7CisKKwl0bXAgPSBicm9hZHNoZWV0X3JlYWRfcmVnKHBhciwgMHgwMDA2KTsKKwl0bXAgJj0gfjB4MTsKKwlicm9hZHNoZWV0X3dyaXRlX3JlZyhwYXIsIDB4MDAwNiwgdG1wKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJyb2Fkc2hlZXRfc2V0dXBfc3BpKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIpCit7CisKKwlicm9hZHNoZWV0X3dyaXRlX3JlZyhwYXIsIDB4MDIwNCwgKCgzIDw8IDMpIHwgMSkpOworCWJyb2Fkc2hlZXRfd3JpdGVfcmVnKHBhciwgMHgwMjA4LCAweDAwMDEpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnJvYWRzaGVldF9zZXR1cF9zcGlmbGFzaChzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyLAorCQkJCQkJdTE2ICpvcmlnX3NmbWNkKQoreworCisJKm9yaWdfc2ZtY2QgPSBicm9hZHNoZWV0X3JlYWRfcmVnKHBhciwgMHgwMjA0KTsKKwlicm9hZHNoZWV0X3dyaXRlX3JlZyhwYXIsIDB4MDIwOCwgMCk7CisJYnJvYWRzaGVldF93cml0ZV9yZWcocGFyLCAweDAyMDQsIDApOworCWJyb2Fkc2hlZXRfd3JpdGVfcmVnKHBhciwgMHgwMjA0LCAoKDMgPDwgMykgfCAxKSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBicm9hZHNoZWV0X3NwaWZsYXNoX3dhaXRfZm9yX2JpdChzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyLAorCQkJCQkJdTE2IHJlZywgaW50IGJpdG51bSwgaW50IHZhbCwKKwkJCQkJCWludCB0aW1lb3V0KQoreworCXUxNiB0bXA7CisKKwlkbyB7CisJCXRtcCA9IGJyb2Fkc2hlZXRfcmVhZF9yZWcocGFyLCByZWcpOworCQlpZiAoKCh0bXAgPj4gYml0bnVtKSAmIDEpID09IHZhbCkKKwkJCXJldHVybiAwOworCQltZGVsYXkoMSk7CisJfSB3aGlsZSAodGltZW91dC0tKTsKKworCXJldHVybiAtRVRJTUVET1VUOworfQorCitzdGF0aWMgaW50IGJyb2Fkc2hlZXRfc3BpZmxhc2hfd3JpdGVfYnl0ZShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyLCB1OCBkYXRhKQoreworCWJyb2Fkc2hlZXRfd3JpdGVfcmVnKHBhciwgMHgwMjAyLCAoZGF0YSB8IDB4MTAwKSk7CisKKwlyZXR1cm4gYnJvYWRzaGVldF9zcGlmbGFzaF93YWl0X2Zvcl9iaXQocGFyLCAweDAyMDYsIDMsIDAsIDEwMCk7Cit9CisKK3N0YXRpYyBpbnQgYnJvYWRzaGVldF9zcGlmbGFzaF9yZWFkX2J5dGUoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgdTggKmRhdGEpCit7CisJaW50IGVycjsKKwl1MTYgdG1wOworCisJYnJvYWRzaGVldF93cml0ZV9yZWcocGFyLCAweDAyMDIsIDApOworCisJZXJyID0gYnJvYWRzaGVldF9zcGlmbGFzaF93YWl0X2Zvcl9iaXQocGFyLCAweDAyMDYsIDMsIDAsIDEwMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXRtcCA9IGJyb2Fkc2hlZXRfcmVhZF9yZWcocGFyLCAweDIwMCk7CisKKwkqZGF0YSA9IHRtcCAmIDB4RkY7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBicm9hZHNoZWV0X3NwaWZsYXNoX3dhaXRfZm9yX3N0YXR1cyhzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyLAorCQkJCQkJCQlpbnQgdGltZW91dCkKK3sKKwl1OCB0bXA7CisJaW50IGVycjsKKworCWRvIHsKKwkJYnJvYWRzaGVldF93cml0ZV9yZWcocGFyLCAweDAyMDgsIDEpOworCisJCWVyciA9IGJyb2Fkc2hlZXRfc3BpZmxhc2hfd3JpdGVfYnl0ZShwYXIsIDB4MDUpOworCQlpZiAoZXJyKQorCQkJZ290byBmYWlsb3V0OworCisJCWVyciA9IGJyb2Fkc2hlZXRfc3BpZmxhc2hfcmVhZF9ieXRlKHBhciwgJnRtcCk7CisJCWlmIChlcnIpCisJCQlnb3RvIGZhaWxvdXQ7CisKKwkJYnJvYWRzaGVldF93cml0ZV9yZWcocGFyLCAweDAyMDgsIDApOworCisJCWlmICghKHRtcCAmIDB4MSkpCisJCQlyZXR1cm4gMDsKKworCQltZGVsYXkoNSk7CisJfSB3aGlsZSAodGltZW91dC0tKTsKKworCWRldl9lcnIocGFyLT5pbmZvLT5kZXZpY2UsICJUaW1lZCBvdXQgd2FpdGluZyBmb3Igc3BpZmxhc2ggc3RhdHVzXG4iKTsKKwlyZXR1cm4gLUVUSU1FRE9VVDsKKworZmFpbG91dDoKKwlicm9hZHNoZWV0X3dyaXRlX3JlZyhwYXIsIDB4MDIwOCwgMCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBicm9hZHNoZWV0X3NwaWZsYXNoX29wX29uX2FkZHJlc3Moc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwKKwkJCQkJCQl1OCBvcCwgdTMyIGFkZHIpCit7CisJaW50IGk7CisJdTggdG1wOworCWludCBlcnI7CisKKwlicm9hZHNoZWV0X3dyaXRlX3JlZyhwYXIsIDB4MDIwOCwgMSk7CisKKwllcnIgPSBicm9hZHNoZWV0X3NwaWZsYXNoX3dyaXRlX2J5dGUocGFyLCBvcCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWZvciAoaSA9IDI7IGkgPj0gMDsgaS0tKSB7CisJCXRtcCA9ICgoYWRkciA+PiAoaSAqIDgpKSAmIDB4RkYpOworCQllcnIgPSBicm9hZHNoZWV0X3NwaWZsYXNoX3dyaXRlX2J5dGUocGFyLCB0bXApOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJyb2Fkc2hlZXRfdmVyaWZ5X3NwaWZsYXNoKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsCisJCQkJCQlpbnQgKmZsYXNoX3R5cGUpCit7CisJaW50IGVyciA9IDA7CisJdTggc2lnOworCisJZXJyID0gYnJvYWRzaGVldF9zcGlmbGFzaF9vcF9vbl9hZGRyZXNzKHBhciwgMHhBQiwgMHgwMDAwMDAwMCk7CisJaWYgKGVycikKKwkJZ290byBmYWlsb3V0OworCisJZXJyID0gYnJvYWRzaGVldF9zcGlmbGFzaF9yZWFkX2J5dGUocGFyLCAmc2lnKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxvdXQ7CisKKwlpZiAoKHNpZyAhPSAweDEwKSAmJiAoc2lnICE9IDB4MTEpKSB7CisJCWRldl9lcnIocGFyLT5pbmZvLT5kZXZpY2UsICJVbmV4cGVjdGVkIGZsYXNoIHR5cGVcbiIpOworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIGZhaWxvdXQ7CisJfQorCisJKmZsYXNoX3R5cGUgPSBzaWc7CisKK2ZhaWxvdXQ6CisJYnJvYWRzaGVldF93cml0ZV9yZWcocGFyLCAweDAyMDgsIDApOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYnJvYWRzaGVldF9zZXR1cF9mb3Jfd2ZtX3dyaXRlKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsCisJCQkJCXUxNiAqaW5pdGlhbF9zZm1jZCwgaW50ICpmbGFzaF90eXBlKQorCit7CisJaW50IGVycjsKKworCWVyciA9IGJyb2Fkc2hlZXRfc2V0dXBfcGxscyhwYXIpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlicm9hZHNoZWV0X3dyaXRlX3JlZyhwYXIsIDB4MDEwNiwgMHgwMjAzKTsKKworCWVyciA9IGJyb2Fkc2hlZXRfc2V0dXBfc3BpKHBhcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGJyb2Fkc2hlZXRfc2V0dXBfc3BpZmxhc2gocGFyLCBpbml0aWFsX3NmbWNkKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJcmV0dXJuIGJyb2Fkc2hlZXRfdmVyaWZ5X3NwaWZsYXNoKHBhciwgZmxhc2hfdHlwZSk7Cit9CisKK3N0YXRpYyBpbnQgYnJvYWRzaGVldF9zcGlmbGFzaF93cml0ZV9jb250cm9sKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsCisJCQkJCQlpbnQgbW9kZSkKK3sKKwlpbnQgZXJyOworCisJYnJvYWRzaGVldF93cml0ZV9yZWcocGFyLCAweDAyMDgsIDEpOworCWlmIChtb2RlKQorCQllcnIgPSBicm9hZHNoZWV0X3NwaWZsYXNoX3dyaXRlX2J5dGUocGFyLCAweDA2KTsKKwllbHNlCisJCWVyciA9IGJyb2Fkc2hlZXRfc3BpZmxhc2hfd3JpdGVfYnl0ZShwYXIsIDB4MDQpOworCisJYnJvYWRzaGVldF93cml0ZV9yZWcocGFyLCAweDAyMDgsIDApOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgYnJvYWRzaGVldF9zcGlmbGFzaF9lcmFzZV9zZWN0b3Ioc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwKKwkJCQkJCWludCBhZGRyKQoreworCWludCBlcnI7CisKKwlicm9hZHNoZWV0X3NwaWZsYXNoX3dyaXRlX2NvbnRyb2wocGFyLCAxKTsKKworCWVyciA9IGJyb2Fkc2hlZXRfc3BpZmxhc2hfb3Bfb25fYWRkcmVzcyhwYXIsIDB4RDgsIGFkZHIpOworCisJYnJvYWRzaGVldF93cml0ZV9yZWcocGFyLCAweDAyMDgsIDApOworCisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWVyciA9IGJyb2Fkc2hlZXRfc3BpZmxhc2hfd2FpdF9mb3Jfc3RhdHVzKHBhciwgMTAwMCk7CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJyb2Fkc2hlZXRfc3BpZmxhc2hfcmVhZF9yYW5nZShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyLAorCQkJCQkJaW50IGFkZHIsIGludCBzaXplLCBjaGFyICpkYXRhKQoreworCWludCBlcnI7CisJaW50IGk7CisKKwllcnIgPSBicm9hZHNoZWV0X3NwaWZsYXNoX29wX29uX2FkZHJlc3MocGFyLCAweDAzLCBhZGRyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxvdXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisJCWVyciA9IGJyb2Fkc2hlZXRfc3BpZmxhc2hfcmVhZF9ieXRlKHBhciwgJmRhdGFbaV0pOworCQlpZiAoZXJyKQorCQkJZ290byBmYWlsb3V0OworCX0KKworZmFpbG91dDoKKwlicm9hZHNoZWV0X3dyaXRlX3JlZyhwYXIsIDB4MDIwOCwgMCk7CisJcmV0dXJuIGVycjsKK30KKworI2RlZmluZSBCU19TUElGTEFTSF9QQUdFX1NJWkUgMjU2CitzdGF0aWMgaW50IGJyb2Fkc2hlZXRfc3BpZmxhc2hfd3JpdGVfcGFnZShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyLAorCQkJCQkJaW50IGFkZHIsIGNvbnN0IGNoYXIgKmRhdGEpCit7CisJaW50IGVycjsKKwlpbnQgaTsKKworCWJyb2Fkc2hlZXRfc3BpZmxhc2hfd3JpdGVfY29udHJvbChwYXIsIDEpOworCisJZXJyID0gYnJvYWRzaGVldF9zcGlmbGFzaF9vcF9vbl9hZGRyZXNzKHBhciwgMHgwMiwgYWRkcik7CisJaWYgKGVycikKKwkJZ290byBmYWlsb3V0OworCisJZm9yIChpID0gMDsgaSA8IEJTX1NQSUZMQVNIX1BBR0VfU0laRTsgaSsrKSB7CisJCWVyciA9IGJyb2Fkc2hlZXRfc3BpZmxhc2hfd3JpdGVfYnl0ZShwYXIsIGRhdGFbaV0pOworCQlpZiAoZXJyKQorCQkJZ290byBmYWlsb3V0OworCX0KKworCWJyb2Fkc2hlZXRfd3JpdGVfcmVnKHBhciwgMHgwMjA4LCAwKTsKKworCWVyciA9IGJyb2Fkc2hlZXRfc3BpZmxhc2hfd2FpdF9mb3Jfc3RhdHVzKHBhciwgMTAwKTsKKworZmFpbG91dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJyb2Fkc2hlZXRfc3BpZmxhc2hfd3JpdGVfc2VjdG9yKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsCisJCQkJaW50IGFkZHIsIGNvbnN0IGNoYXIgKmRhdGEsIGludCBzZWN0b3Jfc2l6ZSkKK3sKKwlpbnQgaTsKKwlpbnQgZXJyOworCisJZm9yIChpID0gMDsgaSA8IHNlY3Rvcl9zaXplOyBpICs9IEJTX1NQSUZMQVNIX1BBR0VfU0laRSkgeworCQllcnIgPSBicm9hZHNoZWV0X3NwaWZsYXNoX3dyaXRlX3BhZ2UocGFyLCBhZGRyICsgaSwgJmRhdGFbaV0pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBUaGUgY2FsbGVyIG11c3QgZ3VhcmFudGVlIHRoYXQgdGhlIGRhdGEgdG8gYmUgcmV3cml0dGVuIGlzIGVudGlyZWx5CisgKiBjb250YWluZWQgd2l0aGluIHRoaXMgc2VjdG9yLiBUaGF0IGlzLCBkYXRhX3N0YXJ0X2FkZHIgKyBkYXRhX2xlbgorICogbXVzdCBiZSBsZXNzIHRoYW4gc2VjdG9yX3N0YXJ0X2FkZHIgKyBzZWN0b3Jfc2l6ZS4KKyAqLworc3RhdGljIGludCBicm9hZHNoZWV0X3NwaWZsYXNoX3Jld3JpdGVfc2VjdG9yKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICpwYXIsCisJCQkJCWludCBzZWN0b3Jfc2l6ZSwgaW50IGRhdGFfc3RhcnRfYWRkciwKKwkJCQkJaW50IGRhdGFfbGVuLCBjb25zdCBjaGFyICpkYXRhKQoreworCWludCBlcnI7CisJY2hhciAqc2VjdG9yX2J1ZmZlcjsKKwlpbnQgdGFpbF9zdGFydF9hZGRyOworCWludCBzdGFydF9zZWN0b3JfYWRkcjsKKworCXNlY3Rvcl9idWZmZXIgPSBremFsbG9jKHNpemVvZihjaGFyKSpzZWN0b3Jfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzZWN0b3JfYnVmZmVyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCS8qIHRoZSBzdGFydCBhZGRyZXNzIG9mIHRoZSBzZWN0b3IgaXMgdGhlIDB0aCBieXRlIG9mIHRoYXQgc2VjdG9yICovCisJc3RhcnRfc2VjdG9yX2FkZHIgPSAoZGF0YV9zdGFydF9hZGRyIC8gc2VjdG9yX3NpemUpICogc2VjdG9yX3NpemU7CisKKwkvKgorCSAqIGNoZWNrIGlmIHRoZXJlIGlzIGhlYWQgZGF0YSB0aGF0IHdlIG5lZWQgdG8gcmVhZGJhY2sgaW50byBvdXIgc2VjdG9yCisJICogYnVmZmVyIGZpcnN0CisJICovCisJaWYgKGRhdGFfc3RhcnRfYWRkciAhPSBzdGFydF9zZWN0b3JfYWRkcikgeworCQkvKgorCQkgKiB3ZSBuZWVkIHRvIHJlYWQgZXZlcnkgYnl0ZSB1cCB0aWxsIHRoZSBzdGFydCBhZGRyZXNzIG9mIG91cgorCQkgKiBkYXRhIGFuZCB3ZSBwdXQgaXQgaW50byBvdXIgc2VjdG9yIGJ1ZmZlci4KKwkJICovCisJCWVyciA9IGJyb2Fkc2hlZXRfc3BpZmxhc2hfcmVhZF9yYW5nZShwYXIsIHN0YXJ0X3NlY3Rvcl9hZGRyLAorCQkJCQkJZGF0YV9zdGFydF9hZGRyLCBzZWN0b3JfYnVmZmVyKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJLyogbm93IHdlIGNvcHkgb3VyIGRhdGEgaW50byB0aGUgcmlnaHQgcGxhY2UgaW4gdGhlIHNlY3RvciBidWZmZXIgKi8KKwltZW1jcHkoc2VjdG9yX2J1ZmZlciArIGRhdGFfc3RhcnRfYWRkciwgZGF0YSwgZGF0YV9sZW4pOworCisJLyoKKwkgKiBub3cgd2UgY2hlY2sgaWYgdGhlcmUgaXMgYSB0YWlsIHNlY3Rpb24gb2YgdGhlIHNlY3RvciB0aGF0IHdlIG5lZWQgdG8KKwkgKiByZWFkYmFjay4KKwkgKi8KKwl0YWlsX3N0YXJ0X2FkZHIgPSAoZGF0YV9zdGFydF9hZGRyICsgZGF0YV9sZW4pICUgc2VjdG9yX3NpemU7CisKKwlpZiAodGFpbF9zdGFydF9hZGRyKSB7CisJCWludCB0YWlsX2xlbjsKKworCQl0YWlsX2xlbiA9IHNlY3Rvcl9zaXplIC0gdGFpbF9zdGFydF9hZGRyOworCisJCS8qIG5vdyB3ZSByZWFkIHRoaXMgdGFpbCBpbnRvIG91ciBzZWN0b3IgYnVmZmVyICovCisJCWVyciA9IGJyb2Fkc2hlZXRfc3BpZmxhc2hfcmVhZF9yYW5nZShwYXIsIHRhaWxfc3RhcnRfYWRkciwKKwkJCXRhaWxfbGVuLCBzZWN0b3JfYnVmZmVyICsgdGFpbF9zdGFydF9hZGRyKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJLyogaWYgd2UgZ290IGhlcmUgd2UgaGF2ZSB0aGUgZnVsbCBzZWN0b3IgdGhhdCB3ZSB3YW50IHRvIHJld3JpdGUuICovCisKKwkvKiBmaXJzdCBlcmFzZSB0aGUgc2VjdG9yICovCisJZXJyID0gYnJvYWRzaGVldF9zcGlmbGFzaF9lcmFzZV9zZWN0b3IocGFyLCBzdGFydF9zZWN0b3JfYWRkcik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCS8qIG5vdyB3cml0ZSBpdCAqLworCWVyciA9IGJyb2Fkc2hlZXRfc3BpZmxhc2hfd3JpdGVfc2VjdG9yKHBhciwgc3RhcnRfc2VjdG9yX2FkZHIsCisJCQkJCXNlY3Rvcl9idWZmZXIsIHNlY3Rvcl9zaXplKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGJyb2Fkc2hlZXRfd3JpdGVfc3BpZmxhc2goc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwgdTMyIHdmbV9hZGRyLAorCQkJCWNvbnN0IHU4ICp3Zm0sIGludCBieXRlY291bnQsIGludCBmbGFzaF90eXBlKQoreworCWludCBzZWN0b3Jfc2l6ZTsKKwlpbnQgZXJyOworCWludCBjdXJfYWRkcjsKKwlpbnQgd3JpdGVjb3VudDsKKwlpbnQgbWF4bGVuOworCWludCBvZmZzZXQgPSAwOworCisJc3dpdGNoIChmbGFzaF90eXBlKSB7CisJY2FzZSAweDEwOgorCQlzZWN0b3Jfc2l6ZSA9IDMyKjEwMjQ7CisJCWJyZWFrOworCWNhc2UgMHgxMToKKwlkZWZhdWx0OgorCQlzZWN0b3Jfc2l6ZSA9IDY0KjEwMjQ7CisJCWJyZWFrOworCX0KKworCXdoaWxlIChieXRlY291bnQpIHsKKwkJY3VyX2FkZHIgPSB3Zm1fYWRkciArIG9mZnNldDsKKwkJbWF4bGVuID0gcm91bmR1cChjdXJfYWRkciwgc2VjdG9yX3NpemUpIC0gY3VyX2FkZHI7CisJCXdyaXRlY291bnQgPSBtaW4oYnl0ZWNvdW50LCBtYXhsZW4pOworCisJCWVyciA9IGJyb2Fkc2hlZXRfc3BpZmxhc2hfcmV3cml0ZV9zZWN0b3IocGFyLCBzZWN0b3Jfc2l6ZSwKKwkJCQljdXJfYWRkciwgd3JpdGVjb3VudCwgd2ZtICsgb2Zmc2V0KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJb2Zmc2V0ICs9IHdyaXRlY291bnQ7CisJCWJ5dGVjb3VudCAtPSB3cml0ZWNvdW50OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJyb2Fkc2hlZXRfc3RvcmVfd2F2ZWZvcm1fdG9fc3BpZmxhc2goc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciwKKwkJCQkJCWNvbnN0IHU4ICp3Zm0sIHNpemVfdCB3Zm1fc2l6ZSkKK3sKKwlpbnQgZXJyID0gMDsKKwl1MTYgaW5pdGlhbF9zZm1jZCA9IDA7CisJaW50IGZsYXNoX3R5cGUgPSAwOworCisJZXJyID0gYnJvYWRzaGVldF9zZXR1cF9mb3Jfd2ZtX3dyaXRlKHBhciwgJmluaXRpYWxfc2ZtY2QsICZmbGFzaF90eXBlKTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWxvdXQ7CisKKwllcnIgPSBicm9hZHNoZWV0X3dyaXRlX3NwaWZsYXNoKHBhciwgMHg4ODYsIHdmbSwgd2ZtX3NpemUsIGZsYXNoX3R5cGUpOworCitmYWlsb3V0OgorCWJyb2Fkc2hlZXRfd3JpdGVfcmVnKHBhciwgMHgwMjA0LCBpbml0aWFsX3NmbWNkKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgc3NpemVfdCBicm9hZHNoZWV0X2xvYWRzdG9yZV93YXZlZm9ybShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBmYl9pbmZvICppbmZvID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3X2VudHJ5OworCisJaWYgKGxlbiA8IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJZXJyID0gcmVxdWVzdF9maXJtd2FyZSgmZndfZW50cnksICJicm9hZHNoZWV0LndiZiIsIGRldik7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGJyb2Fkc2hlZXQgd2F2ZWZvcm1cbiIpOworCQlnb3RvIGVycl9mYWlsZWQ7CisJfQorCisJLyogdHJ5IHRvIGVuZm9yY2UgcmVhc29uYWJsZSBtaW4gbWF4IG9uIHdhdmVmb3JtICovCisJaWYgKChmd19lbnRyeS0+c2l6ZSA8IDgqMTAyNCkgfHwgKGZ3X2VudHJ5LT5zaXplID4gNjQqMTAyNCkpIHsKKwkJZGV2X2VycihkZXYsICJJbnZhbGlkIHdhdmVmb3JtXG4iKTsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBlcnJfZmFpbGVkOworCX0KKworCW11dGV4X2xvY2soJihwYXItPmlvX2xvY2spKTsKKwllcnIgPSBicm9hZHNoZWV0X3N0b3JlX3dhdmVmb3JtX3RvX3NwaWZsYXNoKHBhciwgZndfZW50cnktPmRhdGEsCisJCQkJCQkJZndfZW50cnktPnNpemUpOworCisJbXV0ZXhfdW5sb2NrKCYocGFyLT5pb19sb2NrKSk7CisJaWYgKGVyciA8IDApIHsKKwkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gc3RvcmUgYnJvYWRzaGVldCB3YXZlZm9ybVxuIik7CisJCWdvdG8gZXJyX2ZhaWxlZDsKKwl9CisKKwlkZXZfaW5mbyhkZXYsICJTdG9yZWQgYnJvYWRzaGVldCB3YXZlZm9ybSwgc2l6ZSAlemRcbiIsIGZ3X2VudHJ5LT5zaXplKTsKKworCXJldHVybiBsZW47CisKK2Vycl9mYWlsZWQ6CisJcmV0dXJuIGVycjsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihsb2Fkc3RvcmVfd2F2ZWZvcm0sIFNfSVdVU1IsIE5VTEwsCisJCQlicm9hZHNoZWV0X2xvYWRzdG9yZV93YXZlZm9ybSk7CisKKy8qIHVwcGVyIGxldmVsIGZ1bmN0aW9ucyB0aGF0IG1hbmlwdWxhdGUgdGhlIGRpc3BsYXkgYW5kIG90aGVyIHN0dWZmICovCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgYnJvYWRzaGVldF9pbml0X2Rpc3BsYXkoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhcikKIHsKIAl1MTYgYXJnc1s1XTsKKwlpbnQgeHJlcyA9IHBhci0+aW5mby0+dmFyLnhyZXM7CisJaW50IHlyZXMgPSBwYXItPmluZm8tPnZhci55cmVzOwogCi0JYXJnc1swXSA9IERQWV9XOwotCWFyZ3NbMV0gPSBEUFlfSDsKLQlhcmdzWzJdID0gKDEwMCB8ICgxIDw8IDgpIHwgKDEgPDwgOSkpOyAvKiBzZGNmZyAqLwotCWFyZ3NbM10gPSAyOyAvKiBnZHJ2IGNmZyAqLwotCWFyZ3NbNF0gPSAoNCB8ICgxIDw8IDcpKTsgLyogbHV0IGluZGV4IGZvcm1hdCAqLworCWFyZ3NbMF0gPSBwYW5lbF90YWJsZVtwYXItPnBhbmVsX2luZGV4XS53OworCWFyZ3NbMV0gPSBwYW5lbF90YWJsZVtwYXItPnBhbmVsX2luZGV4XS5oOworCWFyZ3NbMl0gPSBwYW5lbF90YWJsZVtwYXItPnBhbmVsX2luZGV4XS5zZGNmZzsKKwlhcmdzWzNdID0gcGFuZWxfdGFibGVbcGFyLT5wYW5lbF9pbmRleF0uZ2RjZmc7CisJYXJnc1s0XSA9IHBhbmVsX3RhYmxlW3Bhci0+cGFuZWxfaW5kZXhdLmx1dGZtdDsKIAlicm9hZHNoZWV0X3NlbmRfY21kYXJncyhwYXIsIEJTX0NNRF9JTklUX0RTUEVfQ0ZHLCA1LCBhcmdzKTsKIAogCS8qIGRpZCB0aGUgY29udHJvbGxlciByZWFsbHkgc2V0IGl0PyAqLwogCWJyb2Fkc2hlZXRfc2VuZF9jbWRhcmdzKHBhciwgQlNfQ01EX0lOSVRfRFNQRV9DRkcsIDUsIGFyZ3MpOwogCi0JYXJnc1swXSA9IDQ7IC8qIGZzeW5jIGxlbiAqLwotCWFyZ3NbMV0gPSAoMTAgPDwgOCkgfCA0OyAvKiBmZW5kL2ZiZWdpbiBsZW4gKi8KLQlhcmdzWzJdID0gMTA7IC8qIGxpbmUgc3luYyBsZW4gKi8KLQlhcmdzWzNdID0gKDEwMCA8PCA4KSB8IDQ7IC8qIGxpbmUgZW5kL2JlZ2luIGxlbiAqLwotCWFyZ3NbNF0gPSA2OyAvKiBwaXhlbCBjbG9jayBjZmcgKi8KKwlhcmdzWzBdID0gcGFuZWxfdGFibGVbcGFyLT5wYW5lbF9pbmRleF0uZnN5bmNsZW47CisJYXJnc1sxXSA9IHBhbmVsX3RhYmxlW3Bhci0+cGFuZWxfaW5kZXhdLmZlbmRmYmVnaW47CisJYXJnc1syXSA9IHBhbmVsX3RhYmxlW3Bhci0+cGFuZWxfaW5kZXhdLmxzeW5jbGVuOworCWFyZ3NbM10gPSBwYW5lbF90YWJsZVtwYXItPnBhbmVsX2luZGV4XS5sZW5kbGJlZ2luOworCWFyZ3NbNF0gPSBwYW5lbF90YWJsZVtwYXItPnBhbmVsX2luZGV4XS5waXhjbGs7CiAJYnJvYWRzaGVldF9zZW5kX2NtZGFyZ3MocGFyLCBCU19DTURfSU5JVF9EU1BFX1RNRywgNSwgYXJncyk7CiAKKwlicm9hZHNoZWV0X3dyaXRlX3JlZzMyKHBhciwgMHgzMTAsIHhyZXMqeXJlcyoyKTsKKwogCS8qIHNldHVwIHdhdmVmb3JtICovCiAJYXJnc1swXSA9IDB4ODg2OwogCWFyZ3NbMV0gPSAwOwpAQCAtMjA3LDggKzgxOCw5IEBACiAJYXJnc1swXSA9IDB4MTU0OwogCWJyb2Fkc2hlZXRfc2VuZF9jbWRhcmdzKHBhciwgQlNfQ01EX1dSX1JFRywgMSwgYXJncyk7CiAKLQlicm9hZHNoZWV0X2J1cnN0X3dyaXRlKHBhciwgRFBZX1cqRFBZX0gvMiwKLQkJCQkodTE2ICopIHBhci0+aW5mby0+c2NyZWVuX2Jhc2UpOworCWJyb2Fkc2hlZXRfYnVyc3Rfd3JpdGUocGFyLCAocGFuZWxfdGFibGVbcGFyLT5wYW5lbF9pbmRleF0udyAqCisJCQkJCXBhbmVsX3RhYmxlW3Bhci0+cGFuZWxfaW5kZXhdLmgpLzIsCisJCQkJCSh1MTYgKikgcGFyLT5pbmZvLT5zY3JlZW5fYmFzZSk7CiAKIAlicm9hZHNoZWV0X3NlbmRfY29tbWFuZChwYXIsIEJTX0NNRF9MRF9JTUdfRU5EKTsKIApAQCAtMjIyLDYgKzgzNCwyMSBAQAogCXBhci0+Ym9hcmQtPndhaXRfZm9yX3JkeShwYXIpOwogfQogCitzdGF0aWMgdm9pZCBfX2RldmluaXQgYnJvYWRzaGVldF9pZGVudGlmeShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyKQoreworCXUxNiByZXYsIHByYzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwYXItPmluZm8tPmRldmljZTsKKworCXJldiA9IGJyb2Fkc2hlZXRfcmVhZF9yZWcocGFyLCBCU19SRUdfUkVWKTsKKwlwcmMgPSBicm9hZHNoZWV0X3JlYWRfcmVnKHBhciwgQlNfUkVHX1BSQyk7CisJZGV2X2luZm8oZGV2LCAiQnJvYWRzaGVldCBSZXYgMHgleCwgUHJvZHVjdCBDb2RlIDB4JXhcbiIsIHJldiwgcHJjKTsKKworCWlmIChwcmMgIT0gMHgwMDQ3KQorCQlkZXZfd2FybihkZXYsICJVbnJlY29nbml6ZWQgQnJvYWRzaGVldCBQcm9kdWN0IENvZGVcbiIpOworCWlmIChyZXYgIT0gMHgwMTAwKQorCQlkZXZfd2FybihkZXYsICJVbnJlY29nbml6ZWQgQnJvYWRzaGVldCBSZXZpc2lvblxuIik7Cit9CisKIHN0YXRpYyB2b2lkIF9fZGV2aW5pdCBicm9hZHNoZWV0X2luaXQoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhcikKIHsKIAlicm9hZHNoZWV0X3NlbmRfY29tbWFuZChwYXIsIEJTX0NNRF9JTklUX1NZU19SVU4pOwpAQCAtMjM2LDYgKzg2Myw3IEBACiAJdTE2IGFyZ3NbNV07CiAJdW5zaWduZWQgY2hhciAqYnVmID0gKHVuc2lnbmVkIGNoYXIgKilwYXItPmluZm8tPnNjcmVlbl9iYXNlOwogCisJbXV0ZXhfbG9jaygmKHBhci0+aW9fbG9jaykpOwogCS8qIHkxIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0IHNvIGRyb3AgdGhlIGxvd2VyIGJpdHMgKi8KIAl5MSAmPSAweEZGRkM7CiAJLyogeTIgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQgLCBidXQgLSAxIHNvIHVwIHRoZSBsb3dlciBiaXRzICovCkBAIC0yNjUsNiArODkzLDcgQEAKIAlicm9hZHNoZWV0X3NlbmRfY29tbWFuZChwYXIsIEJTX0NNRF9XQUlUX0RTUEVfRlJFTkQpOwogCiAJcGFyLT5ib2FyZC0+d2FpdF9mb3JfcmR5KHBhcik7CisJbXV0ZXhfdW5sb2NrKCYocGFyLT5pb19sb2NrKSk7CiAKIH0KIApAQCAtMjcyLDEzICs5MDEsMTUgQEAKIHsKIAl1MTYgYXJnc1s1XTsKIAorCW11dGV4X2xvY2soJihwYXItPmlvX2xvY2spKTsKIAlhcmdzWzBdID0gMHgzIDw8IDQ7CiAJYnJvYWRzaGVldF9zZW5kX2NtZGFyZ3MocGFyLCBCU19DTURfTERfSU1HLCAxLCBhcmdzKTsKIAogCWFyZ3NbMF0gPSAweDE1NDsKIAlicm9hZHNoZWV0X3NlbmRfY21kYXJncyhwYXIsIEJTX0NNRF9XUl9SRUcsIDEsIGFyZ3MpOwotCWJyb2Fkc2hlZXRfYnVyc3Rfd3JpdGUocGFyLCBEUFlfVypEUFlfSC8yLAotCQkJCSh1MTYgKikgcGFyLT5pbmZvLT5zY3JlZW5fYmFzZSk7CisJYnJvYWRzaGVldF9idXJzdF93cml0ZShwYXIsIChwYW5lbF90YWJsZVtwYXItPnBhbmVsX2luZGV4XS53ICoKKwkJCQkJcGFuZWxfdGFibGVbcGFyLT5wYW5lbF9pbmRleF0uaCkvMiwKKwkJCQkJKHUxNiAqKSBwYXItPmluZm8tPnNjcmVlbl9iYXNlKTsKIAogCWJyb2Fkc2hlZXRfc2VuZF9jb21tYW5kKHBhciwgQlNfQ01EX0xEX0lNR19FTkQpOwogCkBAIC0yOTAsNyArOTIxLDcgQEAKIAlicm9hZHNoZWV0X3NlbmRfY29tbWFuZChwYXIsIEJTX0NNRF9XQUlUX0RTUEVfRlJFTkQpOwogCiAJcGFyLT5ib2FyZC0+d2FpdF9mb3JfcmR5KHBhcik7Ci0KKwltdXRleF91bmxvY2soJihwYXItPmlvX2xvY2spKTsKIH0KIAogLyogdGhpcyBpcyBjYWxsZWQgYmFjayBmcm9tIHRoZSBkZWZlcnJlZCBpbyB3b3JrcXVldWUgKi8KQEAgLTQzNiw2ICsxMDY3LDggQEAKIAl1bnNpZ25lZCBjaGFyICp2aWRlb21lbW9yeTsKIAlzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqcGFyOwogCWludCBpOworCWludCBkcHl3LCBkcHloOworCWludCBwYW5lbF9pbmRleDsKIAogCS8qIHBpY2sgdXAgYm9hcmQgc3BlY2lmaWMgcm91dGluZXMgKi8KIAlib2FyZCA9IGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CkBAIC00NTAsNyArMTA4MywyNCBAQAogCWlmICghaW5mbykKIAkJZ290byBlcnI7CiAKLQl2aWRlb21lbW9yeXNpemUgPSAoRFBZX1cqRFBZX0gpOworCXN3aXRjaCAoYm9hcmQtPmdldF9wYW5lbF90eXBlKCkpIHsKKwljYXNlIDM3OgorCQlwYW5lbF9pbmRleCA9IDE7CisJCWJyZWFrOworCWNhc2UgOTc6CisJCXBhbmVsX2luZGV4ID0gMjsKKwkJYnJlYWs7CisJY2FzZSA2OgorCWRlZmF1bHQ6CisJCXBhbmVsX2luZGV4ID0gMDsKKwkJYnJlYWs7CisJfQorCisJZHB5dyA9IHBhbmVsX3RhYmxlW3BhbmVsX2luZGV4XS53OworCWRweWggPSBwYW5lbF90YWJsZVtwYW5lbF9pbmRleF0uaDsKKworCXZpZGVvbWVtb3J5c2l6ZSA9IHJvdW5kdXAoKGRweXcqZHB5aCksIFBBR0VfU0laRSk7CisKIAl2aWRlb21lbW9yeSA9IHZtYWxsb2ModmlkZW9tZW1vcnlzaXplKTsKIAlpZiAoIXZpZGVvbWVtb3J5KQogCQlnb3RvIGVycl9mYl9yZWw7CkBAIC00NjAsMTYgKzExMTAsMjUgQEAKIAlpbmZvLT5zY3JlZW5fYmFzZSA9IChjaGFyICopdmlkZW9tZW1vcnk7CiAJaW5mby0+ZmJvcHMgPSAmYnJvYWRzaGVldGZiX29wczsKIAorCWJyb2Fkc2hlZXRmYl92YXIueHJlcyA9IGRweXc7CisJYnJvYWRzaGVldGZiX3Zhci55cmVzID0gZHB5aDsKKwlicm9hZHNoZWV0ZmJfdmFyLnhyZXNfdmlydHVhbCA9IGRweXc7CisJYnJvYWRzaGVldGZiX3Zhci55cmVzX3ZpcnR1YWwgPSBkcHloOwogCWluZm8tPnZhciA9IGJyb2Fkc2hlZXRmYl92YXI7CisKKwlicm9hZHNoZWV0ZmJfZml4LmxpbmVfbGVuZ3RoID0gZHB5dzsKIAlpbmZvLT5maXggPSBicm9hZHNoZWV0ZmJfZml4OwogCWluZm8tPmZpeC5zbWVtX2xlbiA9IHZpZGVvbWVtb3J5c2l6ZTsKIAlwYXIgPSBpbmZvLT5wYXI7CisJcGFyLT5wYW5lbF9pbmRleCA9IHBhbmVsX2luZGV4OwogCXBhci0+aW5mbyA9IGluZm87CiAJcGFyLT5ib2FyZCA9IGJvYXJkOwogCXBhci0+d3JpdGVfcmVnID0gYnJvYWRzaGVldF93cml0ZV9yZWc7CiAJcGFyLT5yZWFkX3JlZyA9IGJyb2Fkc2hlZXRfcmVhZF9yZWc7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmcGFyLT53YWl0cSk7CiAKKwltdXRleF9pbml0KCZwYXItPmlvX2xvY2spOworCiAJaW5mby0+ZmxhZ3MgPSBGQklORk9fRkxBR19ERUZBVUxUIHwgRkJJTkZPX1ZJUlRGQjsKIAogCWluZm8tPmZiZGVmaW8gPSAmYnJvYWRzaGVldGZiX2RlZmlvOwpAQCAtNDk2LDEzICsxMTU1LDIwIEBACiAJaWYgKHJldHZhbCA8IDApCiAJCWdvdG8gZXJyX2ZyZWVfaXJxOwogCisJYnJvYWRzaGVldF9pZGVudGlmeShwYXIpOworCiAJYnJvYWRzaGVldF9pbml0KHBhcik7CiAKIAlyZXR2YWwgPSByZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAlpZiAocmV0dmFsIDwgMCkKIAkJZ290byBlcnJfZnJlZV9pcnE7CisKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShkZXYsIGluZm8pOwogCisJcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZkZXYtPmRldiwgJmRldl9hdHRyX2xvYWRzdG9yZV93YXZlZm9ybSk7CisJaWYgKHJldHZhbCA8IDApCisJCWdvdG8gZXJyX3VucmVnX2ZiOworCiAJcHJpbnRrKEtFUk5fSU5GTwogCSAgICAgICAiZmIlZDogQnJvYWRzaGVldCBmcmFtZSBidWZmZXIsIHVzaW5nICVkSyBvZiB2aWRlbyBtZW1vcnlcbiIsCiAJICAgICAgIGluZm8tPm5vZGUsIHZpZGVvbWVtb3J5c2l6ZSA+PiAxMCk7CkBAIC01MTAsNiArMTE3Niw4IEBACiAKIAlyZXR1cm4gMDsKIAorZXJyX3VucmVnX2ZiOgorCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoaW5mbyk7CiBlcnJfZnJlZV9pcnE6CiAJYm9hcmQtPmNsZWFudXAocGFyKTsKIGVycl9jbWFwOgpAQCAtNTMwLDYgKzExOTgsOCBAQAogCiAJaWYgKGluZm8pIHsKIAkJc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKnBhciA9IGluZm8tPnBhcjsKKworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoaW5mby0+ZGV2LCAmZGV2X2F0dHJfbG9hZHN0b3JlX3dhdmVmb3JtKTsKIAkJdW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcihpbmZvKTsKIAkJZmJfZGVmZXJyZWRfaW9fY2xlYW51cChpbmZvKTsKIAkJcGFyLT5ib2FyZC0+Y2xlYW51cChwYXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb2JhbHRfbGNkZmIuYyBiL2RyaXZlcnMvdmlkZW8vY29iYWx0X2xjZGZiLmMKaW5kZXggMTA4Yjg5ZS4uNWViNjFiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb2JhbHRfbGNkZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2NvYmFsdF9sY2RmYi5jCkBAIC0yODcsNyArMjg3LDcgQEAKIAkuZmJfY3Vyc29yCT0gY29iYWx0X2xjZGZiX2N1cnNvciwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGNvYmFsdF9sY2RmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjb2JhbHRfbGNkZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9jb25zb2xlL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZwppbmRleCBmYzdkOWJiLi44ZThmMThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZwpAQCAtMzcsNiArMzcsNyBAQAogY29uZmlnIFZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0tfU0laRQogICAgICAgIGludCAiU2Nyb2xsYmFjayBCdWZmZXIgU2l6ZSAoaW4gS0IpIgogICAgICAgIGRlcGVuZHMgb24gVkdBQ09OX1NPRlRfU0NST0xMQkFDSworICAgICAgIHJhbmdlIDEgMTAyNAogICAgICAgIGRlZmF1bHQgIjY0IgogICAgICAgIGhlbHAKICAgICAgICAgIEVudGVyIHRoZSBhbW91bnQgb2YgU3lzdGVtIFJBTSB0byBhbGxvY2F0ZSBmb3IgdGhlIHNjcm9sbGJhY2sKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9mYmNvbi5jIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKaW5kZXggMzY4MWM2YS4uYjBhM2ZhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKKysrIGIvZHJpdmVycy92aWRlby9jb25zb2xlL2ZiY29uLmMKQEAgLTMwMjUsNiArMzAyNSwyMCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBmYmNvbl9yZW1hcF9hbGwoaW50IGlkeCkKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSBmaXJzdF9mYl92YzsgaSA8PSBsYXN0X2ZiX3ZjOyBpKyspCisJCXNldF9jb24yZmJfbWFwKGksIGlkeCwgMCk7CisKKwlpZiAoY29uX2lzX2JvdW5kKCZmYl9jb24pKSB7CisJCXByaW50ayhLRVJOX0lORk8gImZiY29uOiBSZW1hcHBpbmcgcHJpbWFyeSBkZXZpY2UsICIKKwkJICAgICAgICJmYiVpLCB0byB0dHkgJWktJWlcbiIsIGlkeCwKKwkJICAgICAgIGZpcnN0X2ZiX3ZjICsgMSwgbGFzdF9mYl92YyArIDEpOworCQlpbmZvX2lkeCA9IGlkeDsKKwl9Cit9CisKICNpZmRlZiBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWQogc3RhdGljIHZvaWQgZmJjb25fc2VsZWN0X3ByaW1hcnkoc3RydWN0IGZiX2luZm8gKmluZm8pCiB7CkBAIC0zMjI1LDYgKzMyMzksMTAgQEAKIAkJY2FwcyA9IGV2ZW50LT5kYXRhOwogCQlmYmNvbl9nZXRfcmVxdWlyZW1lbnQoaW5mbywgY2Fwcyk7CiAJCWJyZWFrOworCWNhc2UgRkJfRVZFTlRfUkVNQVBfQUxMX0NPTlNPTEU6CisJCWlkeCA9IGluZm8tPm5vZGU7CisJCWZiY29uX3JlbWFwX2FsbChpZHgpOworCQlicmVhazsKIAl9CiBkb25lOgogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMgYi9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvdmdhY29uLmMKaW5kZXggY2M0YmJiZS4uMTgyZGQ2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9jb25zb2xlL3ZnYWNvbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS92Z2Fjb24uYwpAQCAtMTEyLDcgKzExMiw3IEBACiBzdGF0aWMgaW50IAkJdmdhX3NjYW5fbGluZXMJCV9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgdW5zaWduZWQgaW50IAl2Z2Ffcm9sbGVkX292ZXI7CiAKLWludCB2Z2Fjb25fdGV4dF9tb2RlX2ZvcmNlID0gMDsKK3N0YXRpYyBpbnQgdmdhY29uX3RleHRfbW9kZV9mb3JjZTsKIAogYm9vbCB2Z2Fjb25fdGV4dF9mb3JjZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9lZmlmYi5jIGIvZHJpdmVycy92aWRlby9lZmlmYi5jCmluZGV4IGQyNWRmNTEuLjU4MWQyZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vZWZpZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL2VmaWZiLmMKQEAgLTIxMCw3ICsyMTAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBlZmlmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBlZmlmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vZXBzb24xMzU1ZmIuYyBiL2RyaXZlcnMvdmlkZW8vZXBzb24xMzU1ZmIuYwppbmRleCAyNzM1Yjc5Li42ZDc1NWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2Vwc29uMTM1NWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9lcHNvbjEzNTVmYi5jCkBAIC02MDIsNyArNjAyLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IF9faW5pdCBlcHNvbjEzNTVmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitpbnQgX19kZXZpbml0IGVwc29uMTM1NWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZXBzb24xMzU1X3BhciAqZGVmYXVsdF9wYXI7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMgYi9kcml2ZXJzL3ZpZGVvL2ZibWVtLmMKaW5kZXggOTliYmQyOC4uYTE1YjQ0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9mYm1lbS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZmJtZW0uYwpAQCAtMTUxMyw3ICsxNTEzLDYgQEAKIAkJCQkgICAgICAgZmJfaW5mby0+Zml4LmlkLAogCQkJCSAgICAgICByZWdpc3RlcmVkX2ZiW2ldLT5maXguaWQpOwogCQkJCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIocmVnaXN0ZXJlZF9mYltpXSk7Ci0JCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2diZWZiLmMgYi9kcml2ZXJzL3ZpZGVvL2diZWZiLmMKaW5kZXggNjk1ZmEwMS4uNTY0M2EzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9nYmVmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vZ2JlZmIuYwpAQCAtMTEyOCw3ICsxMTI4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgZ2JlZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcF9kZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBnYmVmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwX2RldikKIHsKIAlpbnQgaSwgcmV0ID0gMDsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaGdhZmIuYyBiL2RyaXZlcnMvdmlkZW8vaGdhZmIuYwppbmRleCAwMTI5YzA0Li5kYjliNzg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2hnYWZiLmMKKysrIGIvZHJpdmVycy92aWRlby9oZ2FmYi5jCkBAIC01NTEsNyArNTUxLDcgQEAKIAkgKiAgSW5pdGlhbGl6YXRpb24KIAkgKi8KIAotc3RhdGljIGludCBfX2luaXQgaGdhZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGhnYWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaGl0ZmIuYyBiL2RyaXZlcnMvdmlkZW8vaGl0ZmIuYwppbmRleCA3M2M4M2E4Li5iZjc4Nzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2hpdGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9oaXRmYi5jCkBAIC0zMjUsNyArMzI1LDcgQEAKIAkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IGhpdGZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IGhpdGZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKIAl1bnNpZ25lZCBzaG9ydCBsY2RjbG9yLCBsZHIzLCBsZHZuZHI7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL21iODYyeHgvbWI4NjJ4eGZiLmMgYi9kcml2ZXJzL3ZpZGVvL21iODYyeHgvbWI4NjJ4eGZiLmMKaW5kZXggZmFiYjBjNS4uODI4MGE1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYjg2Mnh4L21iODYyeHhmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vbWI4NjJ4eC9tYjg2Mnh4ZmIuYwpAQCAtMzEsMTUgKzMxLDYgQEAKICNkZWZpbmUgQ0FSTUlORV9NRU1fU0laRQkweDgwMDAwMDAKICNkZWZpbmUgRFJWX05BTUUJCSJtYjg2Mnh4ZmIiCiAKLSNpZiBkZWZpbmVkKENPTkZJR19MV01PTjUpCi1zdGF0aWMgc3RydWN0IG1iODYyeHhfZ2NfbW9kZSBsd21vbjVfZ2NfbW9kZSA9IHsKLQkvKiBNb2RlIGZvciBTaGFycCBMUTEwNFYxREc2MSBURlQgTENEIFBhbmVsICovCi0JeyAiNjQweDQ4MCIsIDYwLCA2NDAsIDQ4MCwgNDAwMDAsIDQ4LCAxNiwgMzIsIDExLCA5NiwgMiwgMCwgMCwgMCB9LAotCS8qIDE2IGJpdHMvcGl4ZWwsIDMyTUIsIDEwME1IeiwgU0RSQU0gbWVtb3J5IG1vZGUgdmFsdWUgKi8KLQkxNiwgMHgyMDAwMDAwLCBHQ19DQ0ZfQ09UXzEwMCwgMHg0MTRmYjdmMgotfTsKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfU09DUkFURVMpCiBzdGF0aWMgc3RydWN0IG1iODYyeHhfZ2NfbW9kZSBzb2NyYXRlc19nY19tb2RlID0gewogCS8qIE1vZGUgZm9yIFByaW1lIFZpZXcgUE0wNzBXTDQgVEZUIExDRCBQYW5lbCAqLwpAQCAtNjAwLDEwICs1OTEsNiBAQAogCQlnb3RvIGlycWRpc3A7CiAJfQogCi0jaWYgZGVmaW5lZChDT05GSUdfTFdNT041KQotCXBhci0+Z2NfbW9kZSA9ICZsd21vbjVfZ2NfbW9kZTsKLSNlbmRpZgotCiAjaWYgZGVmaW5lZChDT05GSUdfU09DUkFURVMpCiAJcGFyLT5nY19tb2RlID0gJnNvY3JhdGVzX2djX21vZGU7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWJ4L21ieGZiLmMgYi9kcml2ZXJzL3ZpZGVvL21ieC9tYnhmYi5jCmluZGV4IDAxZjc3YmMuLmFmZWE5YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbWJ4L21ieGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9tYngvbWJ4ZmIuYwpAQCAtNjkzLDcgKzY5Myw3IEBACiAJdW5zaWduZWQgbG9uZyB0bXA7CiAJaW50IGk7CiAKLQkvKiBGSVhNRTogdXNlIHBsYXRmcm9tIHNwZWNpZmljIHBhcmFtZXRlcnMgKi8KKwkvKiBGSVhNRTogdXNlIHBsYXRmb3JtIHNwZWNpZmljIHBhcmFtZXRlcnMgKi8KIAkvKiBzZXR1cCBTRFJBTSBjb250cm9sbGVyICovCiAJd3JpdGVfcmVnX2RseSgoTE1DRkdfTE1DX0RTIHwgTE1DRkdfTE1DX1RTIHwgTE1DRkdfTE1EX1RTIHwKIAkJTE1DRkdfTE1BX1RTKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbW9kZWRiLmMgYi9kcml2ZXJzL3ZpZGVvL21vZGVkYi5jCmluZGV4IDAxMjlmMWIuLmI4OTVhYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vbW9kZWRiLmMKKysrIGIvZHJpdmVycy92aWRlby9tb2RlZGIuYwpAQCAtODkzLDcgKzg5Myw3IEBACiB9CiAKIC8qKgotICogZmJfYWRkX3ZpZGVvbW9kZTogYWRkcyB2aWRlb21vZGUgZW50cnkgdG8gbW9kZWxpc3QKKyAqIGZiX2FkZF92aWRlb21vZGUgLSBhZGRzIHZpZGVvbW9kZSBlbnRyeSB0byBtb2RlbGlzdAogICogQG1vZGU6IHZpZGVvbW9kZSB0byBhZGQKICAqIEBoZWFkOiBzdHJ1Y3QgbGlzdF9oZWFkIG9mIG1vZGVsaXN0CiAgKgpAQCAtOTI4LDcgKzkyOCw3IEBACiB9CiAKIC8qKgotICogZmJfZGVsZXRlX3ZpZGVvbW9kZTogcmVtb3ZlZCB2aWRlb21vZGUgZW50cnkgZnJvbSBtb2RlbGlzdAorICogZmJfZGVsZXRlX3ZpZGVvbW9kZSAtIHJlbW92ZWQgdmlkZW9tb2RlIGVudHJ5IGZyb20gbW9kZWxpc3QKICAqIEBtb2RlOiB2aWRlb21vZGUgdG8gcmVtb3ZlCiAgKiBAaGVhZDogc3RydWN0IGxpc3RfaGVhZCBvZiBtb2RlbGlzdAogICoKQEAgLTk1Myw3ICs5NTMsNyBAQAogfQogCiAvKioKLSAqIGZiX2Rlc3Ryb3lfbW9kZWxpc3Q6IGRlc3Ryb3kgbW9kZWxpc3QKKyAqIGZiX2Rlc3Ryb3lfbW9kZWxpc3QgLSBkZXN0cm95IG1vZGVsaXN0CiAgKiBAaGVhZDogc3RydWN0IGxpc3RfaGVhZCBvZiBtb2RlbGlzdAogICovCiB2b2lkIGZiX2Rlc3Ryb3lfbW9kZWxpc3Qoc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKQEAgLTk2OCw3ICs5NjgsNyBAQAogRVhQT1JUX1NZTUJPTF9HUEwoZmJfZGVzdHJveV9tb2RlbGlzdCk7CiAKIC8qKgotICogZmJfdmlkZW9tb2RlX3RvX21vZGVsaXN0OiBjb252ZXJ0IG1vZGUgYXJyYXkgdG8gbW9kZSBsaXN0CisgKiBmYl92aWRlb21vZGVfdG9fbW9kZWxpc3QgLSBjb252ZXJ0IG1vZGUgYXJyYXkgdG8gbW9kZSBsaXN0CiAgKiBAbW9kZWRiOiBhcnJheSBvZiBzdHJ1Y3QgZmJfdmlkZW9tb2RlCiAgKiBAbnVtOiBudW1iZXIgb2YgZW50cmllcyBpbiBhcnJheQogICogQGhlYWQ6IHN0cnVjdCBsaXN0X2hlYWQgb2YgbW9kZWxpc3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbnVjOTAwZmIuYyBiL2RyaXZlcnMvdmlkZW8vbnVjOTAwZmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmYwZDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9udWM5MDBmYi5jCkBAIC0wLDAgKzEsNzc5IEBACisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgRGVzY3JpcHRpb246CisgKiAgICBOdXZvdG9uIExDRCBDb250cm9sbGVyIERyaXZlcgorICogIEF1dGhvcjoKKyAqICAgIFdhbmcgUWlhbmcgKHJ1cmFsaXR5LmxpbnV4QGdtYWlsLmNvbSkgMjAwOS8xMi8xMQorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWZyZXEuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxtYWNoL21hcC5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1jbG9jay5oPgorI2luY2x1ZGUgPG1hY2gvcmVncy1sZG0uaD4KKyNpbmNsdWRlIDxtYWNoL2ZiLmg+CisjaW5jbHVkZSA8bWFjaC9jbGtkZXYuaD4KKworI2luY2x1ZGUgIm51YzkwMGZiLmgiCisKKworLyoKKyAqICBJbml0aWFsaXplIHRoZSBudWM5MDAgdmlkZW8gKGR1YWwpIGJ1ZmZlciBhZGRyZXNzCisgKi8KK3N0YXRpYyB2b2lkIG51YzkwMGZiX3NldF9sY2RhZGRyKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBudWM5MDBmYl9pbmZvICpmYmkgPSBpbmZvLT5wYXI7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gZmJpLT5pbzsKKwl1bnNpZ25lZCBsb25nIHZiYWRkcjEsIHZiYWRkcjI7CisKKwl2YmFkZHIxICA9IGluZm8tPmZpeC5zbWVtX3N0YXJ0OworCXZiYWRkcjIgID0gaW5mby0+Zml4LnNtZW1fc3RhcnQ7CisJdmJhZGRyMiArPSBpbmZvLT5maXgubGluZV9sZW5ndGggKiBpbmZvLT52YXIueXJlczsKKworCS8qIHNldCBmcmFtYnVmZmVyIHN0YXJ0IHBoeSBhZGRyKi8KKwl3cml0ZWwodmJhZGRyMSwgcmVncyArIFJFR19MQ01fVkFfQkFERFIwKTsKKwl3cml0ZWwodmJhZGRyMiwgcmVncyArIFJFR19MQ01fVkFfQkFERFIxKTsKKworCXdyaXRlbChmYmktPnJlZ3MubGNkX3ZhX2ZiY3RybCwgcmVncyArIFJFR19MQ01fVkFfRkJDVFJMKTsKKwl3cml0ZWwoZmJpLT5yZWdzLmxjZF92YV9zY2FsZSwgcmVncyArIFJFR19MQ01fVkFfU0NBTEUpOworfQorCisvKgorICoJY2FsY3VsYXRlIGRpdmlkZXIgZm9yIGxjZCBkaXYKKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBudWM5MDBmYl9jYWxjX3BpeGNsayhzdHJ1Y3QgbnVjOTAwZmJfaW5mbyAqZmJpLAorCQkJCQkgdW5zaWduZWQgbG9uZyBwaXhjbGspCit7CisJdW5zaWduZWQgbG9uZyBjbGsgPSBmYmktPmNsa19yYXRlOworCXVuc2lnbmVkIGxvbmcgbG9uZyBkaXY7CisKKwkvKiBwaXhjbGsgaXMgaW4gcGljc2Vjb25kcy4gb3VyIGNsb2NrIGlzIGluIEh6Ki8KKwkvKiBkaXYgPSAoY2xrICogcGl4Y2xrKS8xMF4xMiAqLworCWRpdiA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY2xrICogcGl4Y2xrOworCWRpdiA+Pj0gMTI7CisJZG9fZGl2KGRpdiwgNjI1ICogNjI1VUwgKiA2MjUpOworCisJZGV2X2RiZyhmYmktPmRldiwgInBpeGNsayAlbGQsIGRpdmlzb3IgaXMgJWxsZFxuIiwgcGl4Y2xrLCBkaXYpOworCisJcmV0dXJuIGRpdjsKK30KKworLyoKKyAqCUNoZWNrIHRoZSB2aWRlbyBwYXJhbXMgb2YgJ3ZhcicuCisgKi8KK3N0YXRpYyBpbnQgbnVjOTAwZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAorCQkJICAgICAgIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBudWM5MDBmYl9pbmZvICpmYmkgPSBpbmZvLT5wYXI7CisJc3RydWN0IG51YzkwMGZiX21hY2hfaW5mbyAqbWFjaF9pbmZvID0gZmJpLT5kZXYtPnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG51YzkwMGZiX2Rpc3BsYXkgKmRpc3BsYXkgPSBOVUxMOworCXN0cnVjdCBudWM5MDBmYl9kaXNwbGF5ICpkZWZhdWx0X2Rpc3BsYXkgPSBtYWNoX2luZm8tPmRpc3BsYXlzICsKKwkJCQkJCSAgIG1hY2hfaW5mby0+ZGVmYXVsdF9kaXNwbGF5OworCWludCBpOworCisJZGV2X2RiZyhmYmktPmRldiwgImNoZWNrX3Zhcih2YXI9JXAsIGluZm89JXApXG4iLCB2YXIsIGluZm8pOworCisJLyogdmFsaWRhdGUgeC95IHJlc29sdXRpb24gKi8KKwkvKiBjaG9vc2UgZGVmYXVsdCBtb2RlIGlmIHBvc3NpYmxlICovCisJaWYgKHZhci0+eHJlcyA9PSBkZWZhdWx0X2Rpc3BsYXktPnhyZXMgJiYKKwkgICAgdmFyLT55cmVzID09IGRlZmF1bHRfZGlzcGxheS0+eXJlcyAmJgorCSAgICB2YXItPmJpdHNfcGVyX3BpeGVsID09IGRlZmF1bHRfZGlzcGxheS0+YnBwKQorCQlkaXNwbGF5ID0gZGVmYXVsdF9kaXNwbGF5OworCWVsc2UKKwkJZm9yIChpID0gMDsgaSA8IG1hY2hfaW5mby0+bnVtX2Rpc3BsYXlzOyBpKyspCisJCQlpZiAodmFyLT54cmVzID09IG1hY2hfaW5mby0+ZGlzcGxheXNbaV0ueHJlcyAmJgorCQkJICAgIHZhci0+eXJlcyA9PSBtYWNoX2luZm8tPmRpc3BsYXlzW2ldLnlyZXMgJiYKKwkJCSAgICB2YXItPmJpdHNfcGVyX3BpeGVsID09IG1hY2hfaW5mby0+ZGlzcGxheXNbaV0uYnBwKSB7CisJCQkJZGlzcGxheSA9IG1hY2hfaW5mby0+ZGlzcGxheXMgKyBpOworCQkJCWJyZWFrOworCQkJfQorCisJaWYgKGRpc3BsYXkgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgIndyb25nIHJlc29sdXRpb24gb3IgZGVwdGggJWR4JWQgYXQgJWQgYml0IHBlciBwaXhlbFxuIiwKKwkJCXZhci0+eHJlcywgdmFyLT55cmVzLCB2YXItPmJpdHNfcGVyX3BpeGVsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogaXQgc2hvdWxkIGJlIHRoZSBzYW1lIHNpemUgYXMgdGhlIGRpc3BsYXkgKi8KKwl2YXItPnhyZXNfdmlydHVhbAk9IGRpc3BsYXktPnhyZXM7CisJdmFyLT55cmVzX3ZpcnR1YWwJPSBkaXNwbGF5LT55cmVzOworCXZhci0+aGVpZ2h0CQk9IGRpc3BsYXktPmhlaWdodDsKKwl2YXItPndpZHRoCQk9IGRpc3BsYXktPndpZHRoOworCisJLyogY29weSBsY2Qgc2V0dGluZ3MgKi8KKwl2YXItPnBpeGNsb2NrCQk9IGRpc3BsYXktPnBpeGNsb2NrOworCXZhci0+bGVmdF9tYXJnaW4JPSBkaXNwbGF5LT5sZWZ0X21hcmdpbjsKKwl2YXItPnJpZ2h0X21hcmdpbgk9IGRpc3BsYXktPnJpZ2h0X21hcmdpbjsKKwl2YXItPnVwcGVyX21hcmdpbgk9IGRpc3BsYXktPnVwcGVyX21hcmdpbjsKKwl2YXItPmxvd2VyX21hcmdpbgk9IGRpc3BsYXktPmxvd2VyX21hcmdpbjsKKwl2YXItPnZzeW5jX2xlbgkJPSBkaXNwbGF5LT52c3luY19sZW47CisJdmFyLT5oc3luY19sZW4JCT0gZGlzcGxheS0+aHN5bmNfbGVuOworCisJdmFyLT50cmFuc3Aub2Zmc2V0CT0gMDsKKwl2YXItPnRyYW5zcC5sZW5ndGgJPSAwOworCisJZmJpLT5yZWdzLmxjZF9kY2NzID0gZGlzcGxheS0+ZGNjczsKKwlmYmktPnJlZ3MubGNkX2RldmljZV9jdHJsID0gZGlzcGxheS0+ZGV2Y3RsOworCWZiaS0+cmVncy5sY2RfdmFfZmJjdHJsID0gZGlzcGxheS0+ZmJjdHJsOworCWZiaS0+cmVncy5sY2RfdmFfc2NhbGUgPSBkaXNwbGF5LT5zY2FsZTsKKworCS8qIHNldCBSL0cvQiBwb3NzaW9ucyAqLworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMToKKwljYXNlIDI6CisJY2FzZSA0OgorCWNhc2UgODoKKwlkZWZhdWx0OgorCQl2YXItPnJlZC5vZmZzZXQgCT0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoIAk9IHZhci0+Yml0c19wZXJfcGl4ZWw7CisJCXZhci0+Z3JlZW4gCQk9IHZhci0+cmVkOworCQl2YXItPmJsdWUJCT0gdmFyLT5yZWQ7CisJCWJyZWFrOworCWNhc2UgMTI6CisJCXZhci0+cmVkLmxlbmd0aAkJPSA0OworCQl2YXItPmdyZWVuLmxlbmd0aAk9IDQ7CisJCXZhci0+Ymx1ZS5sZW5ndGgJPSA0OworCQl2YXItPnJlZC5vZmZzZXQJCT0gODsKKwkJdmFyLT5ncmVlbi5vZmZzZXQJPSA0OworCQl2YXItPmJsdWUub2Zmc2V0CT0gMDsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJdmFyLT5yZWQubGVuZ3RoCQk9IDU7CisJCXZhci0+Z3JlZW4ubGVuZ3RoCT0gNjsKKwkJdmFyLT5ibHVlLmxlbmd0aAk9IDU7CisJCXZhci0+cmVkLm9mZnNldAkJPSAxMTsKKwkJdmFyLT5ncmVlbi5vZmZzZXQJPSA1OworCQl2YXItPmJsdWUub2Zmc2V0CT0gMDsKKwkJYnJlYWs7CisJY2FzZSAxODoKKwkJdmFyLT5yZWQubGVuZ3RoCQk9IDY7CisJCXZhci0+Z3JlZW4ubGVuZ3RoCT0gNjsKKwkJdmFyLT5ibHVlLmxlbmd0aAk9IDY7CisJCXZhci0+cmVkLm9mZnNldAkJPSAxMjsKKwkJdmFyLT5ncmVlbi5vZmZzZXQJPSA2OworCQl2YXItPmJsdWUub2Zmc2V0CT0gMDsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwkJdmFyLT5yZWQubGVuZ3RoCQk9IDg7CisJCXZhci0+Z3JlZW4ubGVuZ3RoCT0gODsKKwkJdmFyLT5ibHVlLmxlbmd0aAk9IDg7CisJCXZhci0+cmVkLm9mZnNldAkJPSAxNjsKKwkJdmFyLT5ncmVlbi5vZmZzZXQJPSA4OworCQl2YXItPmJsdWUub2Zmc2V0CT0gMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKglDYWxjdWxhdGUgbGNkIHJlZ2lzdGVyIHZhbHVlcyBmcm9tIHZhciBzZXR0aW5nICYgc2F2ZSBpbnRvIGh3CisgKi8KK3N0YXRpYyB2b2lkIG51YzkwMGZiX2NhbGN1bGF0ZV9sY2RfcmVncyhjb25zdCBzdHJ1Y3QgZmJfaW5mbyAqaW5mbywKKwkJCQkJc3RydWN0IG51YzkwMGZiX2h3ICpyZWdzKQoreworCWNvbnN0IHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmluZm8tPnZhcjsKKwlpbnQgdnR0ID0gdmFyLT5oZWlnaHQgKyB2YXItPnVwcGVyX21hcmdpbiArIHZhci0+bG93ZXJfbWFyZ2luOworCWludCBodHQgPSB2YXItPndpZHRoICsgdmFyLT5sZWZ0X21hcmdpbiArIHZhci0+cmlnaHRfbWFyZ2luOworCWludCBoc3luYyA9IHZhci0+d2lkdGggKyB2YXItPnJpZ2h0X21hcmdpbjsKKwlpbnQgdnN5bmMgPSB2YXItPmhlaWdodCArIHZhci0+bG93ZXJfbWFyZ2luOworCisJcmVncy0+bGNkX2NydGNfc2l6ZSA9IExDTV9DUlRDX1NJWkVfVlRUVkFMKHZ0dCkgfAorCQkJICAgICAgTENNX0NSVENfU0laRV9IVFRWQUwoaHR0KTsKKwlyZWdzLT5sY2RfY3J0Y19kZW5kID0gTENNX0NSVENfREVORF9WREVORFZBTCh2YXItPmhlaWdodCkgfAorCQkJICAgICAgTENNX0NSVENfREVORF9IREVORFZBTCh2YXItPndpZHRoKTsKKwlyZWdzLT5sY2RfY3J0Y19ociA9IExDTV9DUlRDX0hSX0VWQUwodmFyLT53aWR0aCArIDUpIHwKKwkJCSAgICBMQ01fQ1JUQ19IUl9TVkFMKHZhci0+d2lkdGggKyAxKTsKKwlyZWdzLT5sY2RfY3J0Y19oc3luYyA9IExDTV9DUlRDX0hTWU5DX0VWQUwoaHN5bmMgKyB2YXItPmhzeW5jX2xlbikgfAorCQkJICAgICAgIExDTV9DUlRDX0hTWU5DX1NWQUwoaHN5bmMpOworCXJlZ3MtPmxjZF9jcnRjX3ZyID0gTENNX0NSVENfVlJfRVZBTCh2c3luYyArIHZhci0+dnN5bmNfbGVuKSB8CisJCQkgICAgTENNX0NSVENfVlJfU1ZBTCh2c3luYyk7CisKK30KKworLyoKKyAqCUFjdGl2YXRlIChzZXQpIHRoZSBjb250cm9sbGVyIGZyb20gdGhlIGdpdmVuIGZyYW1lYnVmZmVyCisgKglpbmZvcm1hdGlvbgorICovCitzdGF0aWMgdm9pZCBudWM5MDBmYl9hY3RpdmF0ZV92YXIoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IG51YzkwMGZiX2luZm8gKmZiaSA9IGluZm8tPnBhcjsKKwl2b2lkIF9faW9tZW0gKnJlZ3MgPSBmYmktPmlvOworCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmluZm8tPnZhcjsKKwlpbnQgY2xrZGl2OworCisJY2xrZGl2ID0gbnVjOTAwZmJfY2FsY19waXhjbGsoZmJpLCB2YXItPnBpeGNsb2NrKSAtIDE7CisJaWYgKGNsa2RpdiA8IDApCisJCWNsa2RpdiA9IDA7CisKKwludWM5MDBmYl9jYWxjdWxhdGVfbGNkX3JlZ3MoaW5mbywgJmZiaS0+cmVncyk7CisKKwkvKiBzZXQgdGhlIG5ldyBsY2QgcmVnaXN0ZXJzKi8KKworCWRldl9kYmcoZmJpLT5kZXYsICJuZXcgbGNkIHJlZ2lzdGVyIHNldDpcbiIpOworCWRldl9kYmcoZmJpLT5kZXYsICJkY2NzICAgICAgID0gMHglMDh4XG4iLCBmYmktPnJlZ3MubGNkX2RjY3MpOworCWRldl9kYmcoZmJpLT5kZXYsICJkZXZfY3RsICAgID0gMHglMDh4XG4iLCBmYmktPnJlZ3MubGNkX2RldmljZV9jdHJsKTsKKwlkZXZfZGJnKGZiaS0+ZGV2LCAiY3J0Y19zaXplICA9IDB4JTA4eFxuIiwgZmJpLT5yZWdzLmxjZF9jcnRjX3NpemUpOworCWRldl9kYmcoZmJpLT5kZXYsICJjcnRjX2RlbmQgID0gMHglMDh4XG4iLCBmYmktPnJlZ3MubGNkX2NydGNfZGVuZCk7CisJZGV2X2RiZyhmYmktPmRldiwgImNydGNfaHIgICAgPSAweCUwOHhcbiIsIGZiaS0+cmVncy5sY2RfY3J0Y19ocik7CisJZGV2X2RiZyhmYmktPmRldiwgImNydGNfaHN5bmMgPSAweCUwOHhcbiIsIGZiaS0+cmVncy5sY2RfY3J0Y19oc3luYyk7CisJZGV2X2RiZyhmYmktPmRldiwgImNydGNfdnIgICAgPSAweCUwOHhcbiIsIGZiaS0+cmVncy5sY2RfY3J0Y192cik7CisKKwl3cml0ZWwoZmJpLT5yZWdzLmxjZF9kZXZpY2VfY3RybCwgcmVncyArIFJFR19MQ01fREVWX0NUUkwpOworCXdyaXRlbChmYmktPnJlZ3MubGNkX2NydGNfc2l6ZSwgcmVncyArIFJFR19MQ01fQ1JUQ19TSVpFKTsKKwl3cml0ZWwoZmJpLT5yZWdzLmxjZF9jcnRjX2RlbmQsIHJlZ3MgKyBSRUdfTENNX0NSVENfREVORCk7CisJd3JpdGVsKGZiaS0+cmVncy5sY2RfY3J0Y19ociwgcmVncyArIFJFR19MQ01fQ1JUQ19IUik7CisJd3JpdGVsKGZiaS0+cmVncy5sY2RfY3J0Y19oc3luYywgcmVncyArIFJFR19MQ01fQ1JUQ19IU1lOQyk7CisJd3JpdGVsKGZiaS0+cmVncy5sY2RfY3J0Y192ciwgcmVncyArIFJFR19MQ01fQ1JUQ19WUik7CisKKwkvKiBzZXQgbGNkIGFkZHJlc3MgcG9pbnRlcnMgKi8KKwludWM5MDBmYl9zZXRfbGNkYWRkcihpbmZvKTsKKworCXdyaXRlbChmYmktPnJlZ3MubGNkX2RjY3MsIHJlZ3MgKyBSRUdfTENNX0RDQ1MpOworfQorCisvKgorICogICAgICBBbHRlcnMgdGhlIGhhcmR3YXJlIHN0YXRlLgorICoKKyAqLworc3RhdGljIGludCBudWM5MDBmYl9zZXRfcGFyKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyID0gJmluZm8tPnZhcjsKKworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgMzI6CisJY2FzZSAyNDoKKwljYXNlIDE4OgorCWNhc2UgMTY6CisJY2FzZSAxMjoKKwkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9UUlVFQ09MT1I7CisJCWJyZWFrOworCWNhc2UgMToKKwkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9NT05PMDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfUFNFVURPQ09MT1I7CisJCWJyZWFrOworCX0KKworCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9ICh2YXItPnhyZXNfdmlydHVhbCAqIHZhci0+Yml0c19wZXJfcGl4ZWwpIC8gODsKKworCS8qIGFjdGl2YXRlIHRoaXMgbmV3IGNvbmZpZ3VyYXRpb24gKi8KKwludWM5MDBmYl9hY3RpdmF0ZV92YXIoaW5mbyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGNoYW5fdG9fZmllbGQodW5zaWduZWQgaW50IGNoYW4sCisJCQkJCSBzdHJ1Y3QgZmJfYml0ZmllbGQgKmJmKQoreworCWNoYW4gJj0gMHhmZmZmOworCWNoYW4gPj49IDE2IC0gYmYtPmxlbmd0aDsKKwlyZXR1cm4gY2hhbiA8PCBiZi0+b2Zmc2V0OworfQorCitzdGF0aWMgaW50IG51YzkwMGZiX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywKKwkJCSAgICAgICB1bnNpZ25lZCByZWQsIHVuc2lnbmVkIGdyZWVuLCB1bnNpZ25lZCBibHVlLAorCQkJICAgICAgIHVuc2lnbmVkIHRyYW5zcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCXN3aXRjaCAoaW5mby0+Zml4LnZpc3VhbCkgeworCWNhc2UgRkJfVklTVUFMX1RSVUVDT0xPUjoKKwkJLyogdHJ1ZS1jb2xvdXIsIHVzZSBwc2V1by1wYWxldHRlICovCisJCWlmIChyZWdubyA8IDE2KSB7CisJCQl1MzIgKnBhbCA9IGluZm8tPnBzZXVkb19wYWxldHRlOworCisJCQl2YWwgID0gY2hhbl90b19maWVsZChyZWQsICZpbmZvLT52YXIucmVkKTsKKwkJCXZhbCB8PSBjaGFuX3RvX2ZpZWxkKGdyZWVuLCAmaW5mby0+dmFyLmdyZWVuKTsKKwkJCXZhbCB8PSBjaGFuX3RvX2ZpZWxkKGJsdWUsICZpbmZvLT52YXIuYmx1ZSk7CisJCQlwYWxbcmVnbm9dID0gdmFsOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIDE7ICAgLyogdW5rbm93biB0eXBlICovCisJfQorCXJldHVybiAwOworfQorCisvKioKKyAqICAgICAgbnVjOTAwZmJfYmxhbmsKKyAqCisgKi8KK3N0YXRpYyBpbnQgbnVjOTAwZmJfYmxhbmsoaW50IGJsYW5rX21vZGUsIHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmJfb3BzIG51YzkwMGZiX29wcyA9IHsKKwkub3duZXIJCQk9IFRISVNfTU9EVUxFLAorCS5mYl9jaGVja192YXIJCT0gbnVjOTAwZmJfY2hlY2tfdmFyLAorCS5mYl9zZXRfcGFyCQk9IG51YzkwMGZiX3NldF9wYXIsCisJLmZiX2JsYW5rCQk9IG51YzkwMGZiX2JsYW5rLAorCS5mYl9zZXRjb2xyZWcJCT0gbnVjOTAwZmJfc2V0Y29scmVnLAorCS5mYl9maWxscmVjdAkJPSBjZmJfZmlsbHJlY3QsCisJLmZiX2NvcHlhcmVhCQk9IGNmYl9jb3B5YXJlYSwKKwkuZmJfaW1hZ2VibGl0CQk9IGNmYl9pbWFnZWJsaXQsCit9OworCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtb2RpZnlfZ3Bpbyh2b2lkIF9faW9tZW0gKnJlZywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHNldCwgdW5zaWduZWQgbG9uZyBtYXNrKQoreworCXVuc2lnbmVkIGxvbmcgdG1wOworCXRtcCA9IHJlYWRsKHJlZykgJiB+bWFzazsKKwl3cml0ZWwodG1wIHwgc2V0LCByZWcpOworfQorCisvKgorICogSW5pdGlhbGlzZSBMQ0QtcmVsYXRlZCByZWdpc3RlcnMKKyAqLworc3RhdGljIGludCBudWM5MDBmYl9pbml0X3JlZ2lzdGVycyhzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgbnVjOTAwZmJfaW5mbyAqZmJpID0gaW5mby0+cGFyOworCXN0cnVjdCBudWM5MDBmYl9tYWNoX2luZm8gKm1hY2hfaW5mbyA9IGZiaS0+ZGV2LT5wbGF0Zm9ybV9kYXRhOworCXZvaWQgX19pb21lbSAqcmVncyA9IGZiaS0+aW87CisKKwkvKnJlc2V0IHRoZSBkaXNwbGF5IGVuZ2luZSovCisJd3JpdGVsKDAsIHJlZ3MgKyBSRUdfTENNX0RDQ1MpOworCXdyaXRlbChyZWFkbChyZWdzICsgUkVHX0xDTV9EQ0NTKSB8IExDTV9EQ0NTX0VOR19SU1QsCisJICAgICAgIHJlZ3MgKyBSRUdfTENNX0RDQ1MpOworCW5kZWxheSgxMDApOworCXdyaXRlbChyZWFkbChyZWdzICsgUkVHX0xDTV9EQ0NTKSAmICh+TENNX0RDQ1NfRU5HX1JTVCksCisJICAgICAgIHJlZ3MgKyBSRUdfTENNX0RDQ1MpOworCW5kZWxheSgxMDApOworCisJd3JpdGVsKDAsIHJlZ3MgKyBSRUdfTENNX0RFVl9DVFJMKTsKKworCS8qIGNvbmZpZyBncGlvIG91dHB1dCAqLworCW1vZGlmeV9ncGlvKFc5MFg5MDBfVkFfR1BJTyArIDB4NTQsIG1hY2hfaW5mby0+Z3Bpb19kaXIsCisJCSAgICBtYWNoX2luZm8tPmdwaW9fZGlyX21hc2spOworCW1vZGlmeV9ncGlvKFc5MFg5MDBfVkFfR1BJTyArIDB4NTgsIG1hY2hfaW5mby0+Z3Bpb19kYXRhLAorCQkgICAgbWFjaF9pbmZvLT5ncGlvX2RhdGFfbWFzayk7CisKKwlyZXR1cm4gMDsKK30KKworCisvKgorICogICAgQWxsb2MgdGhlIFNEUkFNIHJlZ2lvbiBvZiBOVUM5MDAgZm9yIHRoZSBmcmFtZSBidWZmZXIuCisgKiAgICBUaGUgYnVmZmVyIHNob3VsZCBiZSBhIG5vbi1jYWNoZWQsIG5vbi1idWZmZXJlZCwgbWVtb3J5IHJlZ2lvbgorICogICAgdG8gYWxsb3cgcGFsZXR0ZSBhbmQgcGl4ZWwgd3JpdGVzIHdpdGhvdXQgZmx1c2hpbmcgdGhlIGNhY2hlLgorICovCitzdGF0aWMgaW50IF9faW5pdCBudWM5MDBmYl9tYXBfdmlkZW9fbWVtb3J5KHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBudWM5MDBmYl9pbmZvICpmYmkgPSBpbmZvLT5wYXI7CisJZG1hX2FkZHJfdCBtYXBfZG1hOworCXVuc2lnbmVkIGxvbmcgbWFwX3NpemUgPSBQQUdFX0FMSUdOKGluZm8tPmZpeC5zbWVtX2xlbik7CisKKwlkZXZfZGJnKGZiaS0+ZGV2LCAibnVjOTAwZmJfbWFwX3ZpZGVvX21lbW9yeShmYmk9JXApIG1hcF9zaXplICVsdVxuIiwKKwkJZmJpLCBtYXBfc2l6ZSk7CisKKwlpbmZvLT5zY3JlZW5fYmFzZSA9IGRtYV9hbGxvY193cml0ZWNvbWJpbmUoZmJpLT5kZXYsIG1hcF9zaXplLAorCQkJCQkJCSZtYXBfZG1hLCBHRlBfS0VSTkVMKTsKKworCWlmICghaW5mby0+c2NyZWVuX2Jhc2UpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtc2V0KGluZm8tPnNjcmVlbl9iYXNlLCAweDAwLCBtYXBfc2l6ZSk7CisJaW5mby0+Zml4LnNtZW1fc3RhcnQgPSBtYXBfZG1hOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBudWM5MDBmYl91bm1hcF92aWRlb19tZW1vcnkoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJc3RydWN0IG51YzkwMGZiX2luZm8gKmZiaSA9IGluZm8tPnBhcjsKKwlkbWFfZnJlZV93cml0ZWNvbWJpbmUoZmJpLT5kZXYsIFBBR0VfQUxJR04oaW5mby0+Zml4LnNtZW1fbGVuKSwKKwkJCSAgICAgIGluZm8tPnNjcmVlbl9iYXNlLCBpbmZvLT5maXguc21lbV9zdGFydCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBudWM5MDBmYl9pcnFoYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3sKKwlzdHJ1Y3QgbnVjOTAwZmJfaW5mbyAqZmJpID0gZGV2X2lkOworCXZvaWQgX19pb21lbSAqcmVncyA9IGZiaS0+aW87CisJdm9pZCBfX2lvbWVtICppcnFfYmFzZSA9IGZiaS0+aXJxX2Jhc2U7CisJdW5zaWduZWQgbG9uZyBsY2RpcnEgPSByZWFkbChyZWdzICsgUkVHX0xDTV9JTlRfQ1MpOworCisJaWYgKGxjZGlycSAmIExDTV9JTlRfQ1NfRElTUF9GX1NUQVRVUykgeworCQl3cml0ZWwocmVhZGwoaXJxX2Jhc2UpIHwgMTw8MzAsIGlycV9iYXNlKTsKKworCQkvKiB3YWl0IFZBX0VOIGxvdyAqLworCQlpZiAoKHJlYWRsKHJlZ3MgKyBSRUdfTENNX0RDQ1MpICYKKwkJICAgIExDTV9EQ0NTX1NJTkdMRSkgPT0gTENNX0RDQ1NfU0lOR0xFKQorCQkJd2hpbGUgKChyZWFkbChyZWdzICsgUkVHX0xDTV9EQ0NTKSAmCisJCQkgICAgICAgTENNX0RDQ1NfVkFfRU4pID09IExDTV9EQ0NTX1ZBX0VOKQorCQkJCTsKKwkJLyogZGlzcGxheV9vdXQtZW5hYmxlICovCisJCXdyaXRlbChyZWFkbChyZWdzICsgUkVHX0xDTV9EQ0NTKSB8IExDTV9EQ0NTX0RJU1BfT1VUX0VOLAorCQkJcmVncyArIFJFR19MQ01fRENDUyk7CisJCS8qIHZhLWVuYWJsZSovCisJCXdyaXRlbChyZWFkbChyZWdzICsgUkVHX0xDTV9EQ0NTKSB8IExDTV9EQ0NTX1ZBX0VOLAorCQkJcmVncyArIFJFR19MQ01fRENDUyk7CisJfSBlbHNlIGlmIChsY2RpcnEgJiBMQ01fSU5UX0NTX1VOREVSUlVOX0lOVCkgeworCQl3cml0ZWwocmVhZGwoaXJxX2Jhc2UpIHwgTENNX0lOVF9DU19VTkRFUlJVTl9JTlQsIGlycV9iYXNlKTsKKwl9IGVsc2UgaWYgKGxjZGlycSAmIExDTV9JTlRfQ1NfQlVTX0VSUk9SX0lOVCkgeworCQl3cml0ZWwocmVhZGwoaXJxX2Jhc2UpIHwgTENNX0lOVF9DU19CVVNfRVJST1JfSU5ULCBpcnFfYmFzZSk7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisjaWZkZWYgQ09ORklHX0NQVV9GUkVRCisKK3N0YXRpYyBpbnQgbnVjOTAwZmJfY3B1ZnJlcV90cmFuc2l0aW9uKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBudWM5MDBmYl9pbmZvICppbmZvOworCXN0cnVjdCBmYl9pbmZvICpmYmluZm87CisJbG9uZyBkZWx0YV9mOworCWluZm8gPSBjb250YWluZXJfb2YobmIsIHN0cnVjdCBudWM5MDBmYl9pbmZvLCBmcmVxX3RyYW5zaXRpb24pOworCWZiaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHRvX3BsYXRmb3JtX2RldmljZShpbmZvLT5kZXYpKTsKKworCWRlbHRhX2YgPSBpbmZvLT5jbGtfcmF0ZSAtIGNsa19nZXRfcmF0ZShpbmZvLT5jbGspOworCisJaWYgKCh2YWwgPT0gQ1BVRlJFUV9QT1NUQ0hBTkdFICYmIGRlbHRhX2YgPiAwKSB8fAorCSAgICh2YWwgPT0gQ1BVRlJFUV9QUkVDSEFOR0UgJiYgZGVsdGFfZiA8IDApKSB7CisJCWluZm8tPmNsa19yYXRlID0gY2xrX2dldF9yYXRlKGluZm8tPmNsayk7CisJCW51YzkwMGZiX2FjdGl2YXRlX3ZhcihmYmluZm8pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBudWM5MDBmYl9jcHVmcmVxX3JlZ2lzdGVyKHN0cnVjdCBudWM5MDBmYl9pbmZvICpmYmkpCit7CisJZmJpLT5mcmVxX3RyYW5zaXRpb24ubm90aWZpZXJfY2FsbCA9IG51YzkwMGZiX2NwdWZyZXFfdHJhbnNpdGlvbjsKKwlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9ub3RpZmllcigmZmJpLT5mcmVxX3RyYW5zaXRpb24sCisJCQkJICBDUFVGUkVRX1RSQU5TSVRJT05fTk9USUZJRVIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbnVjOTAwZmJfY3B1ZnJlcV9kZXJlZ2lzdGVyKHN0cnVjdCBudWM5MDBmYl9pbmZvICpmYmkpCit7CisJY3B1ZnJlcV91bnJlZ2lzdGVyX25vdGlmaWVyKCZmYmktPmZyZXFfdHJhbnNpdGlvbiwKKwkJCQkgICAgQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBudWM5MDBmYl9jcHVmcmVxX3RyYW5zaXRpb24oc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG51YzkwMGZiX2NwdWZyZXFfcmVnaXN0ZXIoc3RydWN0IG51YzkwMGZiX2luZm8gKmZiaSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG51YzkwMGZiX2NwdWZyZXFfZGVyZWdpc3RlcihzdHJ1Y3QgbnVjOTAwZmJfaW5mbyAqaW5mbykKK3sKK30KKyNlbmRpZgorCitzdGF0aWMgY2hhciBkcml2ZXJfbmFtZVtdID0gIm51YzkwMGZiIjsKKworc3RhdGljIGludCBfX2RldmluaXQgbnVjOTAwZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbnVjOTAwZmJfaW5mbyAqZmJpOworCXN0cnVjdCBudWM5MDBmYl9kaXNwbGF5ICpkaXNwbGF5OworCXN0cnVjdCBmYl9pbmZvCSAgICpmYmluZm87CisJc3RydWN0IG51YzkwMGZiX21hY2hfaW5mbyAqbWFjaF9pbmZvOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQ7CisJaW50IGlycTsKKwlpbnQgaTsKKwlpbnQgc2l6ZTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgImRldmluaXRcbiIpOworCW1hY2hfaW5mbyA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmIChtYWNoX2luZm8gPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsCisJCQkibm8gcGxhdGZvcm0gZGF0YSBmb3IgbGNkLCBjYW5ub3QgYXR0YWNoXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKG1hY2hfaW5mby0+ZGVmYXVsdF9kaXNwbGF5ID4gbWFjaF9pbmZvLT5udW1fZGlzcGxheXMpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJImRlZmF1bHQgZGlzcGxheSBOby4gaXMgJWQgYnV0IG9ubHkgJWQgZGlzcGxheXMgXG4iLAorCQkJbWFjaF9pbmZvLT5kZWZhdWx0X2Rpc3BsYXksIG1hY2hfaW5mby0+bnVtX2Rpc3BsYXlzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisKKwlkaXNwbGF5ID0gbWFjaF9pbmZvLT5kaXNwbGF5cyArIG1hY2hfaW5mby0+ZGVmYXVsdF9kaXNwbGF5OworCisJaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAoaXJxIDwgMCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBpcnEgZm9yIGRldmljZVxuIik7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCWZiaW5mbyA9IGZyYW1lYnVmZmVyX2FsbG9jKHNpemVvZihzdHJ1Y3QgbnVjOTAwZmJfaW5mbyksICZwZGV2LT5kZXYpOworCWlmICghZmJpbmZvKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGZiaW5mbyk7CisKKwlmYmkgPSBmYmluZm8tPnBhcjsKKwlmYmktPmRldiA9ICZwZGV2LT5kZXY7CisKKyNpZmRlZiBDT05GSUdfQ1BVX05VQzk1MAorCWZiaS0+ZHJ2X3R5cGUgPSBMQ0REUlZfTlVDOTUwOworI2VuZGlmCisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCisJc2l6ZSA9IChyZXMtPmVuZCAtIHJlcy0+c3RhcnQpICsgMTsKKwlmYmktPm1lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBzaXplLCBwZGV2LT5uYW1lKTsKKwlpZiAoZmJpLT5tZW0gPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJmYWlsZWQgdG8gYWxsb2MgbWVtb3J5IHJlZ2lvblxuIik7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gZnJlZV9mYjsKKwl9CisKKwlmYmktPmlvID0gaW9yZW1hcChyZXMtPnN0YXJ0LCBzaXplKTsKKwlpZiAoZmJpLT5pbyA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImlvcmVtYXAoKSBvZiBsY2QgcmVnaXN0ZXJzIGZhaWxlZFxuIik7CisJCXJldCA9IC1FTlhJTzsKKwkJZ290byByZWxlYXNlX21lbV9yZWdpb247CisJfQorCisJZmJpLT5pcnFfYmFzZSA9IGZiaS0+aW8gKyBSRUdfTENNX0lOVF9DUzsKKworCisJLyogU3RvcCB0aGUgTENEICovCisJd3JpdGVsKDAsIGZiaS0+aW8gKyBSRUdfTENNX0RDQ1MpOworCisJLyogZmlsbCB0aGUgZmJpbmZvKi8KKwlzdHJjcHkoZmJpbmZvLT5maXguaWQsIGRyaXZlcl9uYW1lKTsKKwlmYmluZm8tPmZpeC50eXBlCQk9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUzsKKwlmYmluZm8tPmZpeC50eXBlX2F1eAkJPSAwOworCWZiaW5mby0+Zml4LnhwYW5zdGVwCQk9IDA7CisJZmJpbmZvLT5maXgueXBhbnN0ZXAJCT0gMDsKKwlmYmluZm8tPmZpeC55d3JhcHN0ZXAJCT0gMDsKKwlmYmluZm8tPmZpeC5hY2NlbAkJPSBGQl9BQ0NFTF9OT05FOworCWZiaW5mby0+dmFyLm5vbnN0ZAkJPSAwOworCWZiaW5mby0+dmFyLmFjdGl2YXRlCQk9IEZCX0FDVElWQVRFX05PVzsKKwlmYmluZm8tPnZhci5hY2NlbF9mbGFncwkJPSAwOworCWZiaW5mby0+dmFyLnZtb2RlCQk9IEZCX1ZNT0RFX05PTklOVEVSTEFDRUQ7CisJZmJpbmZvLT5mYm9wcwkJCT0gJm51YzkwMGZiX29wczsKKwlmYmluZm8tPmZsYWdzCQkJPSBGQklORk9fRkxBR19ERUZBVUxUOworCWZiaW5mby0+cHNldWRvX3BhbGV0dGUJCT0gJmZiaS0+cHNldWRvX3BhbDsKKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgbnVjOTAwZmJfaXJxaGFuZGxlciwgSVJRRl9ESVNBQkxFRCwKKwkJCSAgcGRldi0+bmFtZSwgZmJpbmZvKTsKKwlpZiAocmV0KSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbm5vdCByZWdpc3RlciBpcnEgaGFuZGxlciAlZCAtZXJyICVkXG4iLAorCQkJaXJxLCByZXQpOworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gcmVsZWFzZV9yZWdzOworCX0KKworCW51YzkwMF9kcml2ZXJfY2xrc3JjX2RpdigmcGRldi0+ZGV2LCAiZXh0IiwgMHgyKTsKKworCWZiaS0+Y2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCBOVUxMKTsKKwlpZiAoIWZiaS0+Y2xrIHx8IElTX0VSUihmYmktPmNsaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJudWM5MDAtbGNkOmZhaWxlZCB0byBnZXQgbGNkIGNsb2NrIHNvdXJjZVxuIik7CisJCXJldCA9IC1FTk9FTlQ7CisJCWdvdG8gcmVsZWFzZV9pcnE7CisJfQorCisJY2xrX2VuYWJsZShmYmktPmNsayk7CisJZGV2X2RiZygmcGRldi0+ZGV2LCAiZ290IGFuZCBlbmFibGVkIGNsb2NrXG4iKTsKKworCWZiaS0+Y2xrX3JhdGUgPSBjbGtfZ2V0X3JhdGUoZmJpLT5jbGspOworCisJLyogY2FsdXRhdGUgdGhlIHZpZGVvIGJ1ZmZlciBzaXplICovCisJZm9yIChpID0gMDsgaSA8IG1hY2hfaW5mby0+bnVtX2Rpc3BsYXlzOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBzbWVtX2xlbiA9IG1hY2hfaW5mby0+ZGlzcGxheXNbaV0ueHJlczsKKwkJc21lbV9sZW4gKj0gbWFjaF9pbmZvLT5kaXNwbGF5c1tpXS55cmVzOworCQlzbWVtX2xlbiAqPSBtYWNoX2luZm8tPmRpc3BsYXlzW2ldLmJwcDsKKwkJc21lbV9sZW4gPj49IDM7CisJCWlmIChmYmluZm8tPmZpeC5zbWVtX2xlbiA8IHNtZW1fbGVuKQorCQkJZmJpbmZvLT5maXguc21lbV9sZW4gPSBzbWVtX2xlbjsKKwl9CisKKwkvKiBJbml0aWFsaXplIFZpZGVvIE1lbW9yeSAqLworCXJldCA9IG51YzkwMGZiX21hcF92aWRlb19tZW1vcnkoZmJpbmZvKTsKKwlpZiAocmV0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIGFsbG9jYXRlIHZpZGVvIFJBTTogJXhcbiIsIHJldCk7CisJCWdvdG8gcmVsZWFzZV9jbG9jazsKKwl9CisKKwlkZXZfZGJnKCZwZGV2LT5kZXYsICJnb3QgdmlkZW8gbWVtb3J5XG4iKTsKKworCWZiaW5mby0+dmFyLnhyZXMgPSBkaXNwbGF5LT54cmVzOworCWZiaW5mby0+dmFyLnlyZXMgPSBkaXNwbGF5LT55cmVzOworCWZiaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID0gZGlzcGxheS0+YnBwOworCisJbnVjOTAwZmJfaW5pdF9yZWdpc3RlcnMoZmJpbmZvKTsKKworCW51YzkwMGZiX2NoZWNrX3ZhcigmZmJpbmZvLT52YXIsIGZiaW5mbyk7CisKKwlyZXQgPSBudWM5MDBmYl9jcHVmcmVxX3JlZ2lzdGVyKGZiaSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGNwdWZyZXFcbiIpOworCQlnb3RvIGZyZWVfdmlkZW9fbWVtb3J5OworCX0KKworCXJldCA9IHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKGZiaW5mbyk7CisJaWYgKHJldCkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byByZWdpc3RlciBmcmFtZWJ1ZmZlciBkZXZpY2U6ICVkXG4iLAorCQkJcmV0KTsKKwkJZ290byBmcmVlX2NwdWZyZXE7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiZmIlZDogJXMgZnJhbWUgYnVmZmVyIGRldmljZVxuIiwKKwkJZmJpbmZvLT5ub2RlLCBmYmluZm8tPmZpeC5pZCk7CisKKwlyZXR1cm4gMDsKKworZnJlZV9jcHVmcmVxOgorCW51YzkwMGZiX2NwdWZyZXFfZGVyZWdpc3RlcihmYmkpOworZnJlZV92aWRlb19tZW1vcnk6CisJbnVjOTAwZmJfdW5tYXBfdmlkZW9fbWVtb3J5KGZiaW5mbyk7CityZWxlYXNlX2Nsb2NrOgorCWNsa19kaXNhYmxlKGZiaS0+Y2xrKTsKKwljbGtfcHV0KGZiaS0+Y2xrKTsKK3JlbGVhc2VfaXJxOgorCWZyZWVfaXJxKGlycSwgZmJpKTsKK3JlbGVhc2VfcmVnczoKKwlpb3VubWFwKGZiaS0+aW8pOworcmVsZWFzZV9tZW1fcmVnaW9uOgorCXJlbGVhc2VfbWVtX3JlZ2lvbigodW5zaWduZWQgbG9uZylmYmktPm1lbSwgc2l6ZSk7CitmcmVlX2ZiOgorCWZyYW1lYnVmZmVyX3JlbGVhc2UoZmJpbmZvKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogc2h1dGRvd24gdGhlIGxjZCBjb250cm9sbGVyCisgKi8KK3N0YXRpYyB2b2lkIG51YzkwMGZiX3N0b3BfbGNkKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCXN0cnVjdCBudWM5MDBmYl9pbmZvICpmYmkgPSBpbmZvLT5wYXI7CisJdm9pZCBfX2lvbWVtICpyZWdzID0gZmJpLT5pbzsKKworCXdyaXRlbCgofkxDTV9EQ0NTX0RJU1BfSU5UX0VOKSB8ICh+TENNX0RDQ1NfVkFfRU4pIHwgKH5MQ01fRENDU19PU0RfRU4pLAorCQlyZWdzICsgUkVHX0xDTV9EQ0NTKTsKK30KKworLyoKKyAqICBDbGVhbnVwCisgKi8KK3N0YXRpYyBpbnQgbnVjOTAwZmJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IGZiX2luZm8gKmZiaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBudWM5MDBmYl9pbmZvICpmYmkgPSBmYmluZm8tPnBhcjsKKwlpbnQgaXJxOworCisJbnVjOTAwZmJfc3RvcF9sY2QoZmJpbmZvKTsKKwltc2xlZXAoMSk7CisKKwludWM5MDBmYl91bm1hcF92aWRlb19tZW1vcnkoZmJpbmZvKTsKKworCWlvdW5tYXAoZmJpLT5pbyk7CisKKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCWZyZWVfaXJxKGlycSwgZmJpKTsKKworCXJlbGVhc2VfcmVzb3VyY2UoZmJpLT5tZW0pOworCWtmcmVlKGZiaS0+bWVtKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWZyYW1lYnVmZmVyX3JlbGVhc2UoZmJpbmZvKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1BNCisKKy8qCisgKglzdXNwZW5kIGFuZCByZXN1bWUgc3VwcG9ydCBmb3IgdGhlIGxjZCBjb250cm9sbGVyCisgKi8KKworc3RhdGljIGludCBudWM5MDBmYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBmYl9pbmZvCSAgICpmYmluZm8gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBudWM5MDBmYl9pbmZvICppbmZvID0gZmJpbmZvLT5wYXI7CisKKwludWM5MDBmYl9zdG9wX2xjZCgpOworCW1zbGVlcCgxKTsKKwljbGtfZGlzYWJsZShpbmZvLT5jbGspOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG51YzkwMGZiX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGZiX2luZm8JICAgKmZiaW5mbyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKGRldik7CisJc3RydWN0IG51YzkwMGZiX2luZm8gKmZiaSA9IGZiaW5mby0+cGFyOworCisJcHJpbnRrKEtFUk5fSU5GTyAibnVjOTAwZmIgcmVzdW1lXG4iKTsKKworCWNsa19lbmFibGUoZmJpLT5jbGspOworCW1zbGVlcCgxKTsKKworCW51YzkwMGZiX2luaXRfcmVnaXN0ZXJzKGZiaW5mbyk7CisJbnVjOTAwZmJfYWN0aXZhdGVfdmFyKGJmaW5mbyk7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKyNkZWZpbmUgbnVjOTAwZmJfc3VzcGVuZCBOVUxMCisjZGVmaW5lIG51YzkwMGZiX3Jlc3VtZSAgTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG51YzkwMGZiX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gbnVjOTAwZmJfcHJvYmUsCisJLnJlbW92ZQkJPSBudWM5MDBmYl9yZW1vdmUsCisJLnN1c3BlbmQJPSBudWM5MDBmYl9zdXNwZW5kLAorCS5yZXN1bWUJCT0gbnVjOTAwZmJfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJudWM5MDAtbGNkIiwKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK2ludCBfX2RldmluaXQgbnVjOTAwZmJfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm51YzkwMGZiX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBudWM5MDBmYl9jbGVhbnVwKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm51YzkwMGZiX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG51YzkwMGZiX2luaXQpOworbW9kdWxlX2V4aXQobnVjOTAwZmJfY2xlYW51cCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiRnJhbWVidWZmZXIgZHJpdmVyIGZvciB0aGUgTlVDOTAwIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL251YzkwMGZiLmggYi9kcml2ZXJzL3ZpZGVvL251YzkwMGZiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMyM2FhMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vbnVjOTAwZmIuaApAQCAtMCwwICsxLDU1IEBACisvKgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwOSBOdXZvdG9uIHRlY2hub2xvZ3kgY29ycG9yYXRpb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgIEF1dGhlcjoKKyAqICAgICAgICBXYW5nIFFpYW5nKHJ1cmFsaXR5LmxpbnV4QGdtYWlsLmNvbSkgIDIwMDkvMTIvMTYKKyAqLworCisjaWZuZGVmIF9fTlVDOTAwRkJfSAorI2RlZmluZSBfX05VQzkwMEZCX0gKKworI2luY2x1ZGUgPG1hY2gvbWFwLmg+CisjaW5jbHVkZSA8bWFjaC9mYi5oPgorCitlbnVtIG51YzkwMF9sY2RkcnZfdHlwZSB7CisJTENERFJWX05VQzkxMCwKKwlMQ0REUlZfTlVDOTMwLAorCUxDRERSVl9OVUM5MzIsCisJTENERFJWX05VQzk1MCwKKwlMQ0REUlZfTlVDOTYwLAorfTsKKworCisjZGVmaW5lIFBBTEVUVEVfQlVGRkVSX1NJWkUJMjU2CisjZGVmaW5lIFBBTEVUVEVfQlVGRl9DTEVBUiAJKDB4ODAwMDAwMDApIC8qIGVudHJ5IGlzIGNsZWFyL2ludmFsaWQgKi8KKworc3RydWN0IG51YzkwMGZiX2luZm8geworCXN0cnVjdCBkZXZpY2UJCSpkZXY7CisJc3RydWN0IGNsawkJKmNsazsKKworCXN0cnVjdCByZXNvdXJjZQkJKm1lbTsKKwl2b2lkIF9faW9tZW0JCSppbzsKKwl2b2lkIF9faW9tZW0JCSppcnFfYmFzZTsKKwlpbnQgCQkJZHJ2X3R5cGU7CisJc3RydWN0IG51YzkwMGZiX2h3CXJlZ3M7CisJdW5zaWduZWQgbG9uZwkJY2xrX3JhdGU7CisKKyNpZmRlZiBDT05GSUdfQ1BVX0ZSRVEKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJZnJlcV90cmFuc2l0aW9uOworI2VuZGlmCisKKwkvKiBrZWVwIHRoZXNlIHJlZ2lzdGVycyBpbiBjYXNlIHdlIG5lZWQgdG8gcmUtd3JpdGUgcGFsZXR0ZSAqLworCXUzMgkJCXBhbGV0dGVfYnVmZmVyW1BBTEVUVEVfQlVGRkVSX1NJWkVdOworCXUzMgkJCXBzZXVkb19wYWxbMTZdOworfTsKKworaW50IG51YzkwMGZiX2luaXQodm9pZCk7CisKKyNlbmRpZiAvKiBfX05VQzkwMEZCX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfYW1zX2RlbHRhLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkX2Ftc19kZWx0YS5jCmluZGV4IDU2N2RiNmEuLjY5NzhhZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RfYW1zX2RlbHRhLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZF9hbXNfZGVsdGEuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9sY2QuaD4KIAogI2luY2x1ZGUgPHBsYXQvYm9hcmQtYW1zLWRlbHRhLmg+CiAjaW5jbHVkZSA8bWFjaC9oYXJkd2FyZS5oPgpAQCAtMzIsNiArMzMsNzEgQEAKIAogI2RlZmluZSBBTVNfREVMVEFfREVGQVVMVF9DT05UUkFTVAkxMTIKIAorI2RlZmluZSBBTVNfREVMVEFfTUFYX0NPTlRSQVNUCQkweDAwRkYKKyNkZWZpbmUgQU1TX0RFTFRBX0xDRF9QT1dFUgkJMHgwMTAwCisKKworLyogTENEIGNsYXNzIGRldmljZSBzZWN0aW9uICovCisKK3N0YXRpYyBpbnQgYW1zX2RlbHRhX2xjZDsKKworc3RhdGljIGludCBhbXNfZGVsdGFfbGNkX3NldF9wb3dlcihzdHJ1Y3QgbGNkX2RldmljZSAqZGV2LCBpbnQgcG93ZXIpCit7CisJaWYgKHBvd2VyID09IEZCX0JMQU5LX1VOQkxBTkspIHsKKwkJaWYgKCEoYW1zX2RlbHRhX2xjZCAmIEFNU19ERUxUQV9MQ0RfUE9XRVIpKSB7CisJCQlvbWFwX3dyaXRlYihhbXNfZGVsdGFfbGNkICYgQU1TX0RFTFRBX01BWF9DT05UUkFTVCwKKwkJCQkJT01BUF9QV0xfRU5BQkxFKTsKKwkJCW9tYXBfd3JpdGViKDEsIE9NQVBfUFdMX0NMS19FTkFCTEUpOworCQkJYW1zX2RlbHRhX2xjZCB8PSBBTVNfREVMVEFfTENEX1BPV0VSOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKGFtc19kZWx0YV9sY2QgJiBBTVNfREVMVEFfTENEX1BPV0VSKSB7CisJCQlvbWFwX3dyaXRlYigwLCBPTUFQX1BXTF9FTkFCTEUpOworCQkJb21hcF93cml0ZWIoMCwgT01BUF9QV0xfQ0xLX0VOQUJMRSk7CisJCQlhbXNfZGVsdGFfbGNkICY9IH5BTVNfREVMVEFfTENEX1BPV0VSOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFtc19kZWx0YV9sY2Rfc2V0X2NvbnRyYXN0KHN0cnVjdCBsY2RfZGV2aWNlICpkZXYsIGludCB2YWx1ZSkKK3sKKwlpZiAoKHZhbHVlID49IDApICYmICh2YWx1ZSA8PSBBTVNfREVMVEFfTUFYX0NPTlRSQVNUKSkgeworCQlvbWFwX3dyaXRlYih2YWx1ZSwgT01BUF9QV0xfRU5BQkxFKTsKKwkJYW1zX2RlbHRhX2xjZCAmPSB+QU1TX0RFTFRBX01BWF9DT05UUkFTVDsKKwkJYW1zX2RlbHRhX2xjZCB8PSB2YWx1ZTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfTENEX0NMQVNTX0RFVklDRQorc3RhdGljIGludCBhbXNfZGVsdGFfbGNkX2dldF9wb3dlcihzdHJ1Y3QgbGNkX2RldmljZSAqZGV2KQoreworCWlmIChhbXNfZGVsdGFfbGNkICYgQU1TX0RFTFRBX0xDRF9QT1dFUikKKwkJcmV0dXJuIEZCX0JMQU5LX1VOQkxBTks7CisJZWxzZQorCQlyZXR1cm4gRkJfQkxBTktfUE9XRVJET1dOOworfQorCitzdGF0aWMgaW50IGFtc19kZWx0YV9sY2RfZ2V0X2NvbnRyYXN0KHN0cnVjdCBsY2RfZGV2aWNlICpkZXYpCit7CisJaWYgKCEoYW1zX2RlbHRhX2xjZCAmIEFNU19ERUxUQV9MQ0RfUE9XRVIpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiBhbXNfZGVsdGFfbGNkICYgQU1TX0RFTFRBX01BWF9DT05UUkFTVDsKK30KKworc3RhdGljIHN0cnVjdCBsY2Rfb3BzIGFtc19kZWx0YV9sY2Rfb3BzID0geworCS5nZXRfcG93ZXIgPSBhbXNfZGVsdGFfbGNkX2dldF9wb3dlciwKKwkuc2V0X3Bvd2VyID0gYW1zX2RlbHRhX2xjZF9zZXRfcG93ZXIsCisJLmdldF9jb250cmFzdCA9IGFtc19kZWx0YV9sY2RfZ2V0X2NvbnRyYXN0LAorCS5zZXRfY29udHJhc3QgPSBhbXNfZGVsdGFfbGNkX3NldF9jb250cmFzdCwKK307CisjZW5kaWYKKworCisvKiBvbWFwZmIgcGFuZWwgc2VjdGlvbiAqLworCiBzdGF0aWMgaW50IGFtc19kZWx0YV9wYW5lbF9pbml0KHN0cnVjdCBsY2RfcGFuZWwgKnBhbmVsLAogCQlzdHJ1Y3Qgb21hcGZiX2RldmljZSAqZmJkZXYpCiB7CkBAIC00OCwxMCArMTE0LDYgQEAKIAkJCUFNU19ERUxUQV9MQVRDSDJfTENEX05ESVNQKTsKIAlhbXNfZGVsdGFfbGF0Y2gyX3dyaXRlKEFNU19ERUxUQV9MQVRDSDJfTENEX1ZCTEVOLAogCQkJQU1TX0RFTFRBX0xBVENIMl9MQ0RfVkJMRU4pOwotCi0Jb21hcF93cml0ZWIoMSwgT01BUF9QV0xfQ0xLX0VOQUJMRSk7Ci0Jb21hcF93cml0ZWIoQU1TX0RFTFRBX0RFRkFVTFRfQ09OVFJBU1QsIE9NQVBfUFdMX0VOQUJMRSk7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtOTEsOCArMTUzLDMxIEBACiAJLmdldF9jYXBzCT0gYW1zX2RlbHRhX3BhbmVsX2dldF9jYXBzLAogfTsKIAorCisvKiBwbGF0Zm9ybSBkcml2ZXIgc2VjdGlvbiAqLworCiBzdGF0aWMgaW50IGFtc19kZWx0YV9wYW5lbF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCXN0cnVjdCBsY2RfZGV2aWNlICpsY2RfZGV2aWNlID0gTlVMTDsKKyNpZmRlZiBDT05GSUdfTENEX0NMQVNTX0RFVklDRQorCWludCByZXQ7CisKKwlsY2RfZGV2aWNlID0gbGNkX2RldmljZV9yZWdpc3Rlcigib21hcGZiIiwgJnBkZXYtPmRldiwgTlVMTCwKKwkJCQkJCSZhbXNfZGVsdGFfbGNkX29wcyk7CisKKwlpZiAoSVNfRVJSKGxjZF9kZXZpY2UpKSB7CisJCXJldCA9IFBUUl9FUlIobGNkX2RldmljZSk7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZWdpc3RlciBkZXZpY2VcbiIpOworCQlyZXR1cm4gcmV0OworCX0KKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGxjZF9kZXZpY2UpOworCWxjZF9kZXZpY2UtPnByb3BzLm1heF9jb250cmFzdCA9IEFNU19ERUxUQV9NQVhfQ09OVFJBU1Q7CisjZW5kaWYKKworCWFtc19kZWx0YV9sY2Rfc2V0X2NvbnRyYXN0KGxjZF9kZXZpY2UsIEFNU19ERUxUQV9ERUZBVUxUX0NPTlRSQVNUKTsKKwlhbXNfZGVsdGFfbGNkX3NldF9wb3dlcihsY2RfZGV2aWNlLCBGQl9CTEFOS19VTkJMQU5LKTsKKwogCW9tYXBmYl9yZWdpc3Rlcl9wYW5lbCgmYW1zX2RlbHRhX3BhbmVsKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RjLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvbGNkYy5jCmluZGV4IGEzMzQ4MzkuLjk1NTdmOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcC9sY2RjLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwL2xjZGMuYwpAQCAtMzg5LDcgKzM4OSw3IEBACiAvKgogICogQ29uZmlndXJlIHRoZSBMQ0QgRE1BIGZvciBhIHBhbGV0dGUgbG9hZCBvcGVyYXRpb24gYW5kIGRvIHRoZSBwYWxldHRlCiAgKiBkb3dubG9hZGluZyBzeW5jaHJvbm91c2x5LiBXZSBkb24ndCB1c2UgdGhlIGZyYW1lK3BhbGV0dGUgbG9hZCBtb2RlIG9mCi0gKiB0aGUgY29udHJvbGxlciwgc2luY2UgdGhlIHBhbGV0dGUgY2FuIGFsd2F5cyBiZSBkb3dubG9hZGVkIHNlcGVyYXRlbHkuCisgKiB0aGUgY29udHJvbGxlciwgc2luY2UgdGhlIHBhbGV0dGUgY2FuIGFsd2F5cyBiZSBkb3dubG9hZGVkIHNlcGFyYXRlbHkuCiAgKi8KIHN0YXRpYyB2b2lkIGxvYWRfcGFsZXR0ZSh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwL29tYXBmYl9tYWluLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYwppbmRleCAyYzRmNDcwLi44Y2U2MGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAvb21hcGZiX21haW4uYwpAQCAtNDg2LDEwICs0ODYsMTEgQEAKIAkJcmV0dXJuIDA7CiAJY2FzZSAxMjoKIAkJdmFyLT5iaXRzX3Blcl9waXhlbCA9IDE2OwotCQlwbGFuZS0+Y29sb3JfbW9kZSA9IE9NQVBGQl9DT0xPUl9SR0I0NDQ7Ci0JCXJldHVybiAwOwogCWNhc2UgMTY6Ci0JCXBsYW5lLT5jb2xvcl9tb2RlID0gT01BUEZCX0NPTE9SX1JHQjU2NTsKKwkJaWYgKHBsYW5lLT5mYmRldi0+cGFuZWwtPmJwcCA9PSAxMikKKwkJCXBsYW5lLT5jb2xvcl9tb2RlID0gT01BUEZCX0NPTE9SX1JHQjQ0NDsKKwkJZWxzZQorCQkJcGxhbmUtPmNvbG9yX21vZGUgPSBPTUFQRkJfQ09MT1JfUkdCNTY1OwogCQlyZXR1cm4gMDsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvS2NvbmZpZwppbmRleCBiMTJhNTljLi5kZmI1N2VlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL0tjb25maWcKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9LY29uZmlnCkBAIC0xMywxMCArMTMsMjggQEAKICAgICAgICAgaGVscAogICAgICAgICAgIExDRCBQYW5lbCB1c2VkIGluIFRJJ3MgU0RQMzQzMCBhbmQgRVZNIGJvYXJkcwogCitjb25maWcgUEFORUxfU0hBUlBfTFEwNDNUMURHMDEKKyAgICAgICAgdHJpc3RhdGUgIlNoYXJwIExRMDQzVDFERzAxIExDRCBQYW5lbCIKKyAgICAgICAgZGVwZW5kcyBvbiBPTUFQMl9EU1MKKyAgICAgICAgaGVscAorICAgICAgICAgIExDRCBQYW5lbCB1c2VkIGluIFRJJ3MgT01BUDM1MTcgRVZNIGJvYXJkcworCiBjb25maWcgUEFORUxfVEFBTAogICAgICAgICB0cmlzdGF0ZSAiVGFhbCBEU0kgUGFuZWwiCiAgICAgICAgIGRlcGVuZHMgb24gT01BUDJfRFNTX0RTSQogICAgICAgICBoZWxwCiAgICAgICAgICAgVGFhbCBEU0kgY29tbWFuZCBtb2RlIHBhbmVsIGZyb20gVFBPLgogCitjb25maWcgUEFORUxfVE9QUE9MWV9URE8zNVMKKyAgICAgICAgdHJpc3RhdGUgIlRvcHBvbHkgVERPMzVTIExDRCBQYW5lbCBzdXBwb3J0IgorICAgICAgICBkZXBlbmRzIG9uIE9NQVAyX0RTUworICAgICAgICBoZWxwCisgICAgICAgICAgTENEIFBhbmVsIHVzZWQgaW4gQ00tVDM1CisKK2NvbmZpZyBQQU5FTF9UUE9fVEQwNDNNVEVBMQorICAgICAgICB0cmlzdGF0ZSAiVFBPIFREMDQzTVRFQTEgTENEIFBhbmVsIgorICAgICAgICBkZXBlbmRzIG9uIE9NQVAyX0RTUyAmJiBJMkMKKyAgICAgICAgaGVscAorICAgICAgICAgIExDRCBQYW5lbCB1c2VkIGluIE9NQVAzIFBhbmRvcmEKKwogZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9NYWtlZmlsZSBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvTWFrZWZpbGUKaW5kZXggOTU1NjQ2NC4uZTJiYjMyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL01ha2VmaWxlCkBAIC0xLDQgKzEsNyBAQAogb2JqLSQoQ09ORklHX1BBTkVMX0dFTkVSSUMpICs9IHBhbmVsLWdlbmVyaWMubwogb2JqLSQoQ09ORklHX1BBTkVMX1NIQVJQX0xTMDM3VjdEVzAxKSArPSBwYW5lbC1zaGFycC1sczAzN3Y3ZHcwMS5vCitvYmotJChDT05GSUdfUEFORUxfU0hBUlBfTFEwNDNUMURHMDEpICs9IHBhbmVsLXNoYXJwLWxxMDQzdDFkZzAxLm8KIAogb2JqLSQoQ09ORklHX1BBTkVMX1RBQUwpICs9IHBhbmVsLXRhYWwubworb2JqLSQoQ09ORklHX1BBTkVMX1RPUFBPTFlfVERPMzVTKSArPSBwYW5lbC10b3Bwb2x5LXRkbzM1cy5vCitvYmotJChDT05GSUdfUEFORUxfVFBPX1REMDQzTVRFQTEpICs9IHBhbmVsLXRwby10ZDA0M210ZWExLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtZ2VuZXJpYy5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC1nZW5lcmljLmMKaW5kZXggZWI0OGQxYS4uYzU5ZTRiYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC1nZW5lcmljLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC1nZW5lcmljLmMKQEAgLTM1LDYgKzM1LDM1IEBACiAJLnZicAkJPSA3LAogfTsKIAorc3RhdGljIGludCBnZW5lcmljX3BhbmVsX3Bvd2VyX29uKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlpbnQgcjsKKworCXIgPSBvbWFwZHNzX2RwaV9kaXNwbGF5X2VuYWJsZShkc3NkZXYpOworCWlmIChyKQorCQlnb3RvIGVycjA7CisKKwlpZiAoZHNzZGV2LT5wbGF0Zm9ybV9lbmFibGUpIHsKKwkJciA9IGRzc2Rldi0+cGxhdGZvcm1fZW5hYmxlKGRzc2Rldik7CisJCWlmIChyKQorCQkJZ290byBlcnIxOworCX0KKworCXJldHVybiAwOworZXJyMToKKwlvbWFwZHNzX2RwaV9kaXNwbGF5X2Rpc2FibGUoZHNzZGV2KTsKK2VycjA6CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIGdlbmVyaWNfcGFuZWxfcG93ZXJfb2ZmKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlpZiAoZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKQorCQlkc3NkZXYtPnBsYXRmb3JtX2Rpc2FibGUoZHNzZGV2KTsKKworCW9tYXBkc3NfZHBpX2Rpc3BsYXlfZGlzYWJsZShkc3NkZXYpOworfQorCiBzdGF0aWMgaW50IGdlbmVyaWNfcGFuZWxfcHJvYmUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewogCWRzc2Rldi0+cGFuZWwuY29uZmlnID0gT01BUF9EU1NfTENEX1RGVDsKQEAgLTUxLDI3ICs4MCw0MCBAQAogewogCWludCByID0gMDsKIAotCWlmIChkc3NkZXYtPnBsYXRmb3JtX2VuYWJsZSkKLQkJciA9IGRzc2Rldi0+cGxhdGZvcm1fZW5hYmxlKGRzc2Rldik7CisJciA9IGdlbmVyaWNfcGFuZWxfcG93ZXJfb24oZHNzZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CiAKLQlyZXR1cm4gcjsKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZ2VuZXJpY19wYW5lbF9kaXNhYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKLQlpZiAoZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKQotCQlkc3NkZXYtPnBsYXRmb3JtX2Rpc2FibGUoZHNzZGV2KTsKKwlnZW5lcmljX3BhbmVsX3Bvd2VyX29mZihkc3NkZXYpOworCisJZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfRElTQUJMRUQ7CiB9CiAKIHN0YXRpYyBpbnQgZ2VuZXJpY19wYW5lbF9zdXNwZW5kKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKLQlnZW5lcmljX3BhbmVsX2Rpc2FibGUoZHNzZGV2KTsKKwlnZW5lcmljX3BhbmVsX3Bvd2VyX29mZihkc3NkZXYpOworCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX1NVU1BFTkRFRDsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBnZW5lcmljX3BhbmVsX3Jlc3VtZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0JcmV0dXJuIGdlbmVyaWNfcGFuZWxfZW5hYmxlKGRzc2Rldik7CisJaW50IHIgPSAwOworCisJciA9IGdlbmVyaWNfcGFuZWxfcG93ZXJfb24oZHNzZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kcml2ZXIgZ2VuZXJpY19kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXNoYXJwLWxxMDQzdDFkZzAxLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXNoYXJwLWxxMDQzdDFkZzAxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAyNjc0NgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtc2hhcnAtbHEwNDN0MWRnMDEuYwpAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIExDRCBwYW5lbCBkcml2ZXIgZm9yIFNoYXJwIExRMDQzVDFERzAxCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFRleGFzIEluc3RydW1lbnRzIEluYworICogQXV0aG9yOiBWYWliaGF2IEhpcmVtYXRoIDxodmFpYmhhdkB0aS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAqIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAqIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKworI2luY2x1ZGUgPHBsYXQvZGlzcGxheS5oPgorCitzdGF0aWMgc3RydWN0IG9tYXBfdmlkZW9fdGltaW5ncyBzaGFycF9scV90aW1pbmdzID0geworCS54X3JlcyA9IDQ4MCwKKwkueV9yZXMgPSAyNzIsCisKKwkucGl4ZWxfY2xvY2sJPSA5MDAwLAorCisJLmhzdwkJPSA0MiwKKwkuaGZwCQk9IDMsCisJLmhicAkJPSAyLAorCisJLnZzdwkJPSAxMSwKKwkudmZwCQk9IDMsCisJLnZicAkJPSAyLAorfTsKKworc3RhdGljIGludCBzaGFycF9scV9wYW5lbF9wb3dlcl9vbihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJaW50IHI7CisKKwlyID0gb21hcGRzc19kcGlfZGlzcGxheV9lbmFibGUoZHNzZGV2KTsKKwlpZiAocikKKwkJZ290byBlcnIwOworCisJLyogd2FpdCBjb3VwbGUgb2YgdnN5bmNzIHVudGlsIGVuYWJsaW5nIHRoZSBMQ0QgKi8KKwltc2xlZXAoNTApOworCisJaWYgKGRzc2Rldi0+cGxhdGZvcm1fZW5hYmxlKSB7CisJCXIgPSBkc3NkZXYtPnBsYXRmb3JtX2VuYWJsZShkc3NkZXYpOworCQlpZiAocikKKwkJCWdvdG8gZXJyMTsKKwl9CisKKwlyZXR1cm4gMDsKK2VycjE6CisJb21hcGRzc19kcGlfZGlzcGxheV9kaXNhYmxlKGRzc2Rldik7CitlcnIwOgorCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZCBzaGFycF9scV9wYW5lbF9wb3dlcl9vZmYoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWlmIChkc3NkZXYtPnBsYXRmb3JtX2Rpc2FibGUpCisJCWRzc2Rldi0+cGxhdGZvcm1fZGlzYWJsZShkc3NkZXYpOworCisJLyogd2FpdCBhdCBsZWFzdCA1IHZzeW5jcyBhZnRlciBkaXNhYmxpbmcgdGhlIExDRCAqLworCW1zbGVlcCgxMDApOworCisJb21hcGRzc19kcGlfZGlzcGxheV9kaXNhYmxlKGRzc2Rldik7Cit9CisKK3N0YXRpYyBpbnQgc2hhcnBfbHFfcGFuZWxfcHJvYmUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCisJZHNzZGV2LT5wYW5lbC5jb25maWcgPSBPTUFQX0RTU19MQ0RfVEZUIHwgT01BUF9EU1NfTENEX0lWUyB8CisJCU9NQVBfRFNTX0xDRF9JSFMgfCBPTUFQX0RTU19MQ0RfSUVPOworCWRzc2Rldi0+cGFuZWwuYWNiID0gMHgwOworCWRzc2Rldi0+cGFuZWwudGltaW5ncyA9IHNoYXJwX2xxX3RpbWluZ3M7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2hhcnBfbHFfcGFuZWxfcmVtb3ZlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKK30KKworc3RhdGljIGludCBzaGFycF9scV9wYW5lbF9lbmFibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWludCByID0gMDsKKworCXIgPSBzaGFycF9scV9wYW5lbF9wb3dlcl9vbihkc3NkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzaGFycF9scV9wYW5lbF9kaXNhYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlzaGFycF9scV9wYW5lbF9wb3dlcl9vZmYoZHNzZGV2KTsKKworCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX0RJU0FCTEVEOworfQorCitzdGF0aWMgaW50IHNoYXJwX2xxX3BhbmVsX3N1c3BlbmQoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCXNoYXJwX2xxX3BhbmVsX3Bvd2VyX29mZihkc3NkZXYpOworCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX1NVU1BFTkRFRDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaGFycF9scV9wYW5lbF9yZXN1bWUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWludCByID0gMDsKKworCXIgPSBzaGFycF9scV9wYW5lbF9wb3dlcl9vbihkc3NkZXYpOworCWlmIChyKQorCQlyZXR1cm4gcjsKKworCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RyaXZlciBzaGFycF9scV9kcml2ZXIgPSB7CisJLnByb2JlCQk9IHNoYXJwX2xxX3BhbmVsX3Byb2JlLAorCS5yZW1vdmUJCT0gc2hhcnBfbHFfcGFuZWxfcmVtb3ZlLAorCisJLmVuYWJsZQkJPSBzaGFycF9scV9wYW5lbF9lbmFibGUsCisJLmRpc2FibGUJPSBzaGFycF9scV9wYW5lbF9kaXNhYmxlLAorCS5zdXNwZW5kCT0gc2hhcnBfbHFfcGFuZWxfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNoYXJwX2xxX3BhbmVsX3Jlc3VtZSwKKworCS5kcml2ZXIgICAgICAgICA9IHsKKwkJLm5hbWUgICA9ICJzaGFycF9scV9wYW5lbCIsCisJCS5vd25lciAgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2hhcnBfbHFfcGFuZWxfZHJ2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb21hcF9kc3NfcmVnaXN0ZXJfZHJpdmVyKCZzaGFycF9scV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2hhcnBfbHFfcGFuZWxfZHJ2X2V4aXQodm9pZCkKK3sKKwlvbWFwX2Rzc191bnJlZ2lzdGVyX2RyaXZlcigmc2hhcnBfbHFfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQoc2hhcnBfbHFfcGFuZWxfZHJ2X2luaXQpOworbW9kdWxlX2V4aXQoc2hhcnBfbHFfcGFuZWxfZHJ2X2V4aXQpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC1zaGFycC1sczAzN3Y3ZHcwMS5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC1zaGFycC1sczAzN3Y3ZHcwMS5jCmluZGV4IGJiZTg4MGJiLi44ZDUxYTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXNoYXJwLWxzMDM3djdkdzAxLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC1zaGFycC1sczAzN3Y3ZHcwMS5jCkBAIC0yMCwxOSArMjAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCiAjaW5jbHVkZSA8cGxhdC9kaXNwbGF5Lmg+CiAKLXN0cnVjdCBzaGFycF9kYXRhIHsKLQkvKiBYWFggVGhpcyByZWd1bGF0b3Igc2hvdWxkIGFjdHVhbGx5IGJlIGluIFNEUCBib2FyZCBmaWxlLCBub3QgaGVyZSwKLQkgKiBhcyBpdCBkb2Vzbid0IGFjdHVhbGx5IHBvd2VyIHRoZSBMQ0QsIGJ1dCBzb21ldGhpbmcgZWxzZSB0aGF0Ci0JICogYWZmZWN0cyB0aGUgb3V0cHV0IHRvIExDRCAoSSB0aGluay4gU29tZWJvZHkgY2xhcmlmeSkuIEl0IGRvZXNuJ3QgZG8KLQkgKiBoYXJtIGhlcmUsIGFzIFNEUCBpcyB0aGUgb25seSBib2FyZCB1c2luZyB0aGlzIGN1cnJlbnRseSAqLwotCXN0cnVjdCByZWd1bGF0b3IgKnZkdmlfcmVnOwotfTsKLQogc3RhdGljIHN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3Mgc2hhcnBfbHNfdGltaW5ncyA9IHsKIAkueF9yZXMgPSA0ODAsCiAJLnlfcmVzID0gNjQwLApAQCAtNTAsNzcgKzQxLDgxIEBACiAKIHN0YXRpYyBpbnQgc2hhcnBfbHNfcGFuZWxfcHJvYmUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewotCXN0cnVjdCBzaGFycF9kYXRhICpzZDsKLQogCWRzc2Rldi0+cGFuZWwuY29uZmlnID0gT01BUF9EU1NfTENEX1RGVCB8IE9NQVBfRFNTX0xDRF9JVlMgfAogCQlPTUFQX0RTU19MQ0RfSUhTOwogCWRzc2Rldi0+cGFuZWwuYWNiID0gMHgyODsKIAlkc3NkZXYtPnBhbmVsLnRpbWluZ3MgPSBzaGFycF9sc190aW1pbmdzOwogCi0Jc2QgPSBremFsbG9jKHNpemVvZigqc2QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXNkKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWRldl9zZXRfZHJ2ZGF0YSgmZHNzZGV2LT5kZXYsIHNkKTsKLQotCXNkLT52ZHZpX3JlZyA9IHJlZ3VsYXRvcl9nZXQoJmRzc2Rldi0+ZGV2LCAidmR2aSIpOwotCWlmIChJU19FUlIoc2QtPnZkdmlfcmVnKSkgewotCQlrZnJlZShzZCk7Ci0JCXByX2VycigiZmFpbGVkIHRvIGdldCBWRFZJIHJlZ3VsYXRvclxuIik7Ci0JCXJldHVybiBQVFJfRVJSKHNkLT52ZHZpX3JlZyk7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIHNoYXJwX2xzX3BhbmVsX3JlbW92ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0Jc3RydWN0IHNoYXJwX2RhdGEgKnNkID0gZGV2X2dldF9kcnZkYXRhKCZkc3NkZXYtPmRldik7Ci0KLQlyZWd1bGF0b3JfcHV0KHNkLT52ZHZpX3JlZyk7Ci0KLQlrZnJlZShzZCk7CiB9CiAKLXN0YXRpYyBpbnQgc2hhcnBfbHNfcGFuZWxfZW5hYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3N0YXRpYyBpbnQgc2hhcnBfbHNfcG93ZXJfb24oc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewotCXN0cnVjdCBzaGFycF9kYXRhICpzZCA9IGRldl9nZXRfZHJ2ZGF0YSgmZHNzZGV2LT5kZXYpOwogCWludCByID0gMDsKIAorCXIgPSBvbWFwZHNzX2RwaV9kaXNwbGF5X2VuYWJsZShkc3NkZXYpOworCWlmIChyKQorCQlnb3RvIGVycjA7CisKIAkvKiB3YWl0IGNvdXBsZSBvZiB2c3luY3MgdW50aWwgZW5hYmxpbmcgdGhlIExDRCAqLwogCW1zbGVlcCg1MCk7CiAKLQlyZWd1bGF0b3JfZW5hYmxlKHNkLT52ZHZpX3JlZyk7Ci0KLQlpZiAoZHNzZGV2LT5wbGF0Zm9ybV9lbmFibGUpCisJaWYgKGRzc2Rldi0+cGxhdGZvcm1fZW5hYmxlKSB7CiAJCXIgPSBkc3NkZXYtPnBsYXRmb3JtX2VuYWJsZShkc3NkZXYpOworCQlpZiAocikKKwkJCWdvdG8gZXJyMTsKKwl9CiAKKwlyZXR1cm4gMDsKK2VycjE6CisJb21hcGRzc19kcGlfZGlzcGxheV9kaXNhYmxlKGRzc2Rldik7CitlcnIwOgorCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZCBzaGFycF9sc19wb3dlcl9vZmYoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWlmIChkc3NkZXYtPnBsYXRmb3JtX2Rpc2FibGUpCisJCWRzc2Rldi0+cGxhdGZvcm1fZGlzYWJsZShkc3NkZXYpOworCisJLyogd2FpdCBhdCBsZWFzdCA1IHZzeW5jcyBhZnRlciBkaXNhYmxpbmcgdGhlIExDRCAqLworCisJbXNsZWVwKDEwMCk7CisKKwlvbWFwZHNzX2RwaV9kaXNwbGF5X2Rpc2FibGUoZHNzZGV2KTsKK30KKworc3RhdGljIGludCBzaGFycF9sc19wYW5lbF9lbmFibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWludCByOworCXIgPSBzaGFycF9sc19wb3dlcl9vbihkc3NkZXYpOworCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRTsKIAlyZXR1cm4gcjsKIH0KIAogc3RhdGljIHZvaWQgc2hhcnBfbHNfcGFuZWxfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0Jc3RydWN0IHNoYXJwX2RhdGEgKnNkID0gZGV2X2dldF9kcnZkYXRhKCZkc3NkZXYtPmRldik7Ci0KLQlpZiAoZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKQotCQlkc3NkZXYtPnBsYXRmb3JtX2Rpc2FibGUoZHNzZGV2KTsKLQotCXJlZ3VsYXRvcl9kaXNhYmxlKHNkLT52ZHZpX3JlZyk7Ci0KLQkvKiB3YWl0IGF0IGxlYXN0IDUgdnN5bmNzIGFmdGVyIGRpc2FibGluZyB0aGUgTENEICovCi0KLQltc2xlZXAoMTAwKTsKKwlzaGFycF9sc19wb3dlcl9vZmYoZHNzZGV2KTsKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9ESVNBQkxFRDsKIH0KIAogc3RhdGljIGludCBzaGFycF9sc19wYW5lbF9zdXNwZW5kKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKLQlzaGFycF9sc19wYW5lbF9kaXNhYmxlKGRzc2Rldik7CisJc2hhcnBfbHNfcG93ZXJfb2ZmKGRzc2Rldik7CisJZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfU1VTUEVOREVEOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNoYXJwX2xzX3BhbmVsX3Jlc3VtZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0JcmV0dXJuIHNoYXJwX2xzX3BhbmVsX2VuYWJsZShkc3NkZXYpOworCWludCByOworCXIgPSBzaGFycF9sc19wb3dlcl9vbihkc3NkZXYpOworCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRTsKKwlyZXR1cm4gcjsKIH0KIAogc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kcml2ZXIgc2hhcnBfbHNfZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC10YWFsLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXRhYWwuYwppbmRleCAxZjAxZGZjLi5mY2Q2YTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXRhYWwuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXRhYWwuYwpAQCAtNjMsNiArNjMsOCBAQAogLyogI2RlZmluZSBUQUFMX1VTRV9FU0RfQ0hFQ0sgKi8KICNkZWZpbmUgVEFBTF9FU0RfQ0hFQ0tfUEVSSU9ECW1zZWNzX3RvX2ppZmZpZXMoNTAwMCkKIAorc3RhdGljIGludCBfdGFhbF9lbmFibGVfdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LCBib29sIGVuYWJsZSk7CisKIHN0cnVjdCB0YWFsX2RhdGEgewogCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibGRldjsKIApAQCAtNTEwLDE1ICs1MTIsMTIgQEAKIAlpZiAodGQtPmVzZF93cSA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmRzc2Rldi0+ZGV2LCAiY2FuJ3QgY3JlYXRlIEVTRCB3b3JrcXVldWVcbiIpOwogCQlyID0gLUVOT01FTTsKLQkJZ290byBlcnIyOworCQlnb3RvIGVycjE7CiAJfQogCUlOSVRfREVMQVlFRF9XT1JLX0RFRkVSUkFCTEUoJnRkLT5lc2Rfd29yaywgdGFhbF9lc2Rfd29yayk7CiAKIAlkZXZfc2V0X2RydmRhdGEoJmRzc2Rldi0+ZGV2LCB0ZCk7CiAKLQlkc3NkZXYtPmdldF90aW1pbmdzID0gdGFhbF9nZXRfdGltaW5nczsKLQlkc3NkZXYtPmdldF9yZXNvbHV0aW9uID0gdGFhbF9nZXRfcmVzb2x1dGlvbjsKLQogCS8qIGlmIG5vIHBsYXRmb3JtIHNldF9iYWNrbGlnaHQoKSBkZWZpbmVkLCBwcmVzdW1lIERTSSBiYWNrbGlnaHQKIAkgKiBjb250cm9sICovCiAJaWYgKCFkc3NkZXYtPnNldF9iYWNrbGlnaHQpCkBAIC01MjgsNyArNTI3LDcgQEAKIAkJCSZ0YWFsX2JsX29wcyk7CiAJaWYgKElTX0VSUihibGRldikpIHsKIAkJciA9IFBUUl9FUlIoYmxkZXYpOwotCQlnb3RvIGVycjE7CisJCWdvdG8gZXJyMjsKIAl9CiAKIAl0ZC0+YmxkZXYgPSBibGRldjsKQEAgLTYyMSwxNCArNjIwLDEyIEBACiAJa2ZyZWUodGQpOwogfQogCi1zdGF0aWMgaW50IHRhYWxfZW5hYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3N0YXRpYyBpbnQgdGFhbF9wb3dlcl9vbihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7CiAJc3RydWN0IHRhYWxfZGF0YSAqdGQgPSBkZXZfZ2V0X2RydmRhdGEoJmRzc2Rldi0+ZGV2KTsKIAl1OCBpZDEsIGlkMiwgaWQzOwogCWludCByOwogCi0JZGV2X2RiZygmZHNzZGV2LT5kZXYsICJlbmFibGVcbiIpOwotCiAJaWYgKGRzc2Rldi0+cGxhdGZvcm1fZW5hYmxlKSB7CiAJCXIgPSBkc3NkZXYtPnBsYXRmb3JtX2VuYWJsZShkc3NkZXYpOwogCQlpZiAocikKQEAgLTYzOCw2ICs2MzUsMTYgQEAKIAkvKiBpdCBzZWVtcyB3ZSBoYXZlIHRvIHdhaXQgYSBiaXQgdW50aWwgdGFhbCBpcyByZWFkeSAqLwogCW1zbGVlcCg1KTsKIAorCWRzaV9idXNfbG9jaygpOworCisJciA9IG9tYXBkc3NfZHNpX2Rpc3BsYXlfZW5hYmxlKGRzc2Rldik7CisJaWYgKHIpIHsKKwkJZGV2X2VycigmZHNzZGV2LT5kZXYsICJmYWlsZWQgdG8gZW5hYmxlIERTSVxuIik7CisJCWdvdG8gZXJyMDsKKwl9CisKKwlvbWFwZHNzX2RzaV92Y19lbmFibGVfaHMoVENILCBmYWxzZSk7CisKIAlyID0gdGFhbF9zbGVlcF9vdXQodGQpOwogCWlmIChyKQogCQlnb3RvIGVycjsKQEAgLTY2MSw2ICs2NjgsMTAgQEAKIAogCXRhYWxfZGNzX3dyaXRlXzAoRENTX0RJU1BMQVlfT04pOwogCisJciA9IF90YWFsX2VuYWJsZV90ZShkc3NkZXYsIHRkLT50ZV9lbmFibGVkKTsKKwlpZiAocikKKwkJZ290byBlcnI7CisKICNpZmRlZiBUQUFMX1VTRV9FU0RfQ0hFQ0sKIAlxdWV1ZV9kZWxheWVkX3dvcmsodGQtPmVzZF93cSwgJnRkLT5lc2Rfd29yaywgVEFBTF9FU0RfQ0hFQ0tfUEVSSU9EKTsKICNlbmRpZgpAQCAtNjc2LDE5ICs2ODcsMjcgQEAKIAkJdGQtPmludHJvX3ByaW50ZWQgPSB0cnVlOwogCX0KIAorCW9tYXBkc3NfZHNpX3ZjX2VuYWJsZV9ocyhUQ0gsIHRydWUpOworCisJZHNpX2J1c191bmxvY2soKTsKKwogCXJldHVybiAwOwogZXJyOgorCWRzaV9idXNfdW5sb2NrKCk7CisKKwlvbWFwZHNzX2RzaV9kaXNwbGF5X2Rpc2FibGUoZHNzZGV2KTsKK2VycjA6CiAJaWYgKGRzc2Rldi0+cGxhdGZvcm1fZGlzYWJsZSkKIAkJZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKGRzc2Rldik7CiAKIAlyZXR1cm4gcjsKIH0KIAotc3RhdGljIHZvaWQgdGFhbF9kaXNhYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3N0YXRpYyB2b2lkIHRhYWxfcG93ZXJfb2ZmKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKIAlzdHJ1Y3QgdGFhbF9kYXRhICp0ZCA9IGRldl9nZXRfZHJ2ZGF0YSgmZHNzZGV2LT5kZXYpOwogCi0JZGV2X2RiZygmZHNzZGV2LT5kZXYsICJkaXNhYmxlXG4iKTsKKwlkc2lfYnVzX2xvY2soKTsKIAogCWNhbmNlbF9kZWxheWVkX3dvcmsoJnRkLT5lc2Rfd29yayk7CiAKQEAgLTY5OCw0MSArNzE3LDEyNCBAQAogCS8qIHdhaXQgYSBiaXQgc28gdGhhdCB0aGUgbWVzc2FnZSBnb2VzIHRocm91Z2ggKi8KIAltc2xlZXAoMTApOwogCisJb21hcGRzc19kc2lfZGlzcGxheV9kaXNhYmxlKGRzc2Rldik7CisKIAlpZiAoZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKQogCQlkc3NkZXYtPnBsYXRmb3JtX2Rpc2FibGUoZHNzZGV2KTsKIAogCXRkLT5lbmFibGVkID0gMDsKKworCWRzaV9idXNfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyBpbnQgdGFhbF9lbmFibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWludCByOworCWRldl9kYmcoJmRzc2Rldi0+ZGV2LCAiZW5hYmxlXG4iKTsKKworCWlmIChkc3NkZXYtPnN0YXRlICE9IE9NQVBfRFNTX0RJU1BMQVlfRElTQUJMRUQpCisJCXJldHVybiAtRUlOVkFMOworCisJciA9IHRhYWxfcG93ZXJfb24oZHNzZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7CisKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgdGFhbF9kaXNhYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlkZXZfZGJnKCZkc3NkZXYtPmRldiwgImRpc2FibGVcbiIpOworCisJaWYgKGRzc2Rldi0+c3RhdGUgPT0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkUpCisJCXRhYWxfcG93ZXJfb2ZmKGRzc2Rldik7CisKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9ESVNBQkxFRDsKIH0KIAogc3RhdGljIGludCB0YWFsX3N1c3BlbmQoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewotCXN0cnVjdCB0YWFsX2RhdGEgKnRkID0gZGV2X2dldF9kcnZkYXRhKCZkc3NkZXYtPmRldik7Ci0Jc3RydWN0IGJhY2tsaWdodF9kZXZpY2UgKmJsZGV2ID0gdGQtPmJsZGV2OworCWRldl9kYmcoJmRzc2Rldi0+ZGV2LCAic3VzcGVuZFxuIik7CiAKLQlibGRldi0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19QT1dFUkRPV047Ci0JdGFhbF9ibF91cGRhdGVfc3RhdHVzKGJsZGV2KTsKKwlpZiAoZHNzZGV2LT5zdGF0ZSAhPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl0YWFsX3Bvd2VyX29mZihkc3NkZXYpOworCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX1NVU1BFTkRFRDsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHRhYWxfcmVzdW1lKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKLQlzdHJ1Y3QgdGFhbF9kYXRhICp0ZCA9IGRldl9nZXRfZHJ2ZGF0YSgmZHNzZGV2LT5kZXYpOwotCXN0cnVjdCBiYWNrbGlnaHRfZGV2aWNlICpibGRldiA9IHRkLT5ibGRldjsKKwlpbnQgcjsKKwlkZXZfZGJnKCZkc3NkZXYtPmRldiwgInJlc3VtZVxuIik7CiAKLQlibGRldi0+cHJvcHMucG93ZXIgPSBGQl9CTEFOS19VTkJMQU5LOwotCXRhYWxfYmxfdXBkYXRlX3N0YXR1cyhibGRldik7CisJaWYgKGRzc2Rldi0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9TVVNQRU5ERUQpCisJCXJldHVybiAtRUlOVkFMOworCisJciA9IHRhYWxfcG93ZXJfb24oZHNzZGV2KTsKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB2b2lkIHRhYWxfZnJhbWVkb25lX2NiKGludCBlcnIsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2ID0gZGF0YTsKKwlkZXZfZGJnKCZkc3NkZXYtPmRldiwgImZyYW1lZG9uZSwgZXJyICVkXG4iLCBlcnIpOworCWRzaV9idXNfdW5sb2NrKCk7Cit9CisKK3N0YXRpYyBpbnQgdGFhbF91cGRhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAorCQkJCSAgICB1MTYgeCwgdTE2IHksIHUxNiB3LCB1MTYgaCkKK3sKKwlzdHJ1Y3QgdGFhbF9kYXRhICp0ZCA9IGRldl9nZXRfZHJ2ZGF0YSgmZHNzZGV2LT5kZXYpOworCWludCByOworCisJZGV2X2RiZygmZHNzZGV2LT5kZXYsICJ1cGRhdGUgJWQsICVkLCAlZCB4ICVkXG4iLCB4LCB5LCB3LCBoKTsKKworCWRzaV9idXNfbG9jaygpOworCisJaWYgKCF0ZC0+ZW5hYmxlZCkgeworCQlyID0gMDsKKwkJZ290byBlcnI7CisJfQorCisJciA9IG9tYXBfZHNpX3ByZXBhcmVfdXBkYXRlKGRzc2RldiwgJngsICZ5LCAmdywgJmgpOworCWlmIChyKQorCQlnb3RvIGVycjsKKworCXIgPSB0YWFsX3NldF91cGRhdGVfd2luZG93KHgsIHksIHcsIGgpOworCWlmIChyKQorCQlnb3RvIGVycjsKKworCXIgPSBvbWFwX2RzaV91cGRhdGUoZHNzZGV2LCBUQ0gsIHgsIHksIHcsIGgsCisJCQl0YWFsX2ZyYW1lZG9uZV9jYiwgZHNzZGV2KTsKKwlpZiAocikKKwkJZ290byBlcnI7CisKKwkvKiBub3RlOiBubyBidXNfdW5sb2NrIGhlcmUuIHVubG9jayBpcyBpbiBmcmFtZWRvbmVfY2IgKi8KKwlyZXR1cm4gMDsKK2VycjoKKwlkc2lfYnVzX3VubG9jaygpOworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IHRhYWxfc3luYyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJZGV2X2RiZygmZHNzZGV2LT5kZXYsICJzeW5jXG4iKTsKKworCWRzaV9idXNfbG9jaygpOworCWRzaV9idXNfdW5sb2NrKCk7CisKKwlkZXZfZGJnKCZkc3NkZXYtPmRldiwgInN5bmMgZG9uZVxuIik7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdGFhbF9zZXR1cF91cGRhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQkJCSAgICB1MTYgeCwgdTE2IHksIHUxNiB3LCB1MTYgaCkKLXsKLQl0YWFsX3NldF91cGRhdGVfd2luZG93KHgsIHksIHcsIGgpOwotfQotCi1zdGF0aWMgaW50IHRhYWxfZW5hYmxlX3RlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgYm9vbCBlbmFibGUpCitzdGF0aWMgaW50IF90YWFsX2VuYWJsZV90ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsIGJvb2wgZW5hYmxlKQogewogCXN0cnVjdCB0YWFsX2RhdGEgKnRkID0gZGV2X2dldF9kcnZkYXRhKCZkc3NkZXYtPmRldik7CiAJaW50IHI7CkBAIC03NDQsMjUgKzg0NiwzMiBAQAogCWVsc2UKIAkJciA9IHRhYWxfZGNzX3dyaXRlXzAoRENTX1RFQVJfT0ZGKTsKIAorCW9tYXBkc3NfZHNpX2VuYWJsZV90ZShkc3NkZXYsIGVuYWJsZSk7CisKKwkvKiBYWFggZm9yIHNvbWUgcmVhc29uLCBEU0kgVEUgYnJlYWtzIGlmIHdlIGRvbid0IHdhaXQgaGVyZS4KKwkgKiBQYW5lbCBidWc/IE5lZWRzIG1vcmUgc3R1ZHlpbmcgKi8KKwltc2xlZXAoMTAwKTsKKwogCXJldHVybiByOwogfQogCi1zdGF0aWMgaW50IHRhYWxfd2FpdF90ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCitzdGF0aWMgaW50IHRhYWxfZW5hYmxlX3RlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgYm9vbCBlbmFibGUpCit7CisJaW50IHI7CisKKwlkc2lfYnVzX2xvY2soKTsKKworCXIgPSBfdGFhbF9lbmFibGVfdGUoZHNzZGV2LCBlbmFibGUpOworCisJZHNpX2J1c191bmxvY2soKTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgaW50IHRhYWxfZ2V0X3RlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKIAlzdHJ1Y3QgdGFhbF9kYXRhICp0ZCA9IGRldl9nZXRfZHJ2ZGF0YSgmZHNzZGV2LT5kZXYpOwotCWxvbmcgd2FpdCA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKLQotCWlmICghdGQtPnVzZV9leHRfdGUgfHwgIXRkLT50ZV9lbmFibGVkKQotCQlyZXR1cm4gMDsKLQotCUlOSVRfQ09NUExFVElPTih0ZC0+dGVfY29tcGxldGlvbik7Ci0Jd2FpdCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmdGQtPnRlX2NvbXBsZXRpb24sIHdhaXQpOwotCWlmICh3YWl0ID09IDApIHsKLQkJZGV2X2VycigmZHNzZGV2LT5kZXYsICJ0aW1lb3V0IHdhaXRpbmcgVEVcbiIpOwotCQlyZXR1cm4gLUVUSU1FOwotCX0KLQotCXJldHVybiAwOworCXJldHVybiB0ZC0+dGVfZW5hYmxlZDsKIH0KIAogc3RhdGljIGludCB0YWFsX3JvdGF0ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsIHU4IHJvdGF0ZSkKQEAgLTc3MiwxNiArODgxLDIxIEBACiAKIAlkZXZfZGJnKCZkc3NkZXYtPmRldiwgInJvdGF0ZSAlZFxuIiwgcm90YXRlKTsKIAorCWRzaV9idXNfbG9jaygpOworCiAJaWYgKHRkLT5lbmFibGVkKSB7CiAJCXIgPSB0YWFsX3NldF9hZGRyX21vZGUocm90YXRlLCB0ZC0+bWlycm9yKTsKLQogCQlpZiAocikKLQkJCXJldHVybiByOworCQkJZ290byBlcnI7CiAJfQogCiAJdGQtPnJvdGF0ZSA9IHJvdGF0ZTsKIAorCWRzaV9idXNfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CitlcnI6CisJZHNpX2J1c191bmxvY2soKTsKKwlyZXR1cm4gcjsKIH0KIAogc3RhdGljIHU4IHRhYWxfZ2V0X3JvdGF0ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCkBAIC03OTcsMTYgKzkxMSwyMCBAQAogCiAJZGV2X2RiZygmZHNzZGV2LT5kZXYsICJtaXJyb3IgJWRcbiIsIGVuYWJsZSk7CiAKKwlkc2lfYnVzX2xvY2soKTsKIAlpZiAodGQtPmVuYWJsZWQpIHsKIAkJciA9IHRhYWxfc2V0X2FkZHJfbW9kZSh0ZC0+cm90YXRlLCBlbmFibGUpOwotCiAJCWlmIChyKQotCQkJcmV0dXJuIHI7CisJCQlnb3RvIGVycjsKIAl9CiAKIAl0ZC0+bWlycm9yID0gZW5hYmxlOwogCisJZHNpX2J1c191bmxvY2soKTsKIAlyZXR1cm4gMDsKK2VycjoKKwlkc2lfYnVzX3VubG9jaygpOworCXJldHVybiByOwogfQogCiBzdGF0aWMgYm9vbCB0YWFsX2dldF9taXJyb3Ioc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQpAQCAtODIwLDE3ICs5MzgsMjMgQEAKIAl1OCBpZDEsIGlkMiwgaWQzOwogCWludCByOwogCisJZHNpX2J1c19sb2NrKCk7CisKIAlyID0gdGFhbF9kY3NfcmVhZF8xKERDU19HRVRfSUQxLCAmaWQxKTsKIAlpZiAocikKLQkJcmV0dXJuIHI7CisJCWdvdG8gZXJyOwogCXIgPSB0YWFsX2Rjc19yZWFkXzEoRENTX0dFVF9JRDIsICZpZDIpOwogCWlmIChyKQotCQlyZXR1cm4gcjsKKwkJZ290byBlcnI7CiAJciA9IHRhYWxfZGNzX3JlYWRfMShEQ1NfR0VUX0lEMywgJmlkMyk7CiAJaWYgKHIpCi0JCXJldHVybiByOworCQlnb3RvIGVycjsKIAorCWRzaV9idXNfdW5sb2NrKCk7CiAJcmV0dXJuIDA7CitlcnI6CisJZHNpX2J1c191bmxvY2soKTsKKwlyZXR1cm4gcjsKIH0KIAogc3RhdGljIGludCB0YWFsX21lbW9yeV9yZWFkKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKQEAgLTg0MSw2ICs5NjUsMTAgQEAKIAlpbnQgZmlyc3QgPSAxOwogCWludCBwbGVuOwogCXVuc2lnbmVkIGJ1Zl91c2VkID0gMDsKKwlzdHJ1Y3QgdGFhbF9kYXRhICp0ZCA9IGRldl9nZXRfZHJ2ZGF0YSgmZHNzZGV2LT5kZXYpOworCisJaWYgKCF0ZC0+ZW5hYmxlZCkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZiAoc2l6ZSA8IHcgKiBoICogMykKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC04NDksNiArOTc3LDggQEAKIAkJCWRzc2Rldi0+cGFuZWwudGltaW5ncy54X3JlcyAqCiAJCQlkc3NkZXYtPnBhbmVsLnRpbWluZ3MueV9yZXMgKiAzKTsKIAorCWRzaV9idXNfbG9jaygpOworCiAJLyogcGxlbiAxIG9yIDIgZ29lcyBpbnRvIHNob3J0IHBhY2tldC4gdW50aWwgY2hlY2tzdW0gZXJyb3IgaXMgZml4ZWQsCiAJICogdXNlIHNob3J0IHBhY2tldHMuIHBsZW4gMzIgd29ya3MsIGJ1dCBiaWdnZXIgcGFja2V0cyBzZWVtIHRvIGNhdXNlCiAJICogYW4gZXJyb3IuICovCkBAIC04NTcsMTEgKzk4NywxMSBAQAogCWVsc2UKIAkJcGxlbiA9IDI7CiAKLQl0YWFsX3NldHVwX3VwZGF0ZShkc3NkZXYsIHgsIHksIHcsIGgpOworCXRhYWxfc2V0X3VwZGF0ZV93aW5kb3coeCwgeSwgdywgaCk7CiAKIAlyID0gZHNpX3ZjX3NldF9tYXhfcnhfcGFja2V0X3NpemUoVENILCBwbGVuKTsKIAlpZiAocikKLQkJcmV0dXJuIHI7CisJCWdvdG8gZXJyMDsKIAogCXdoaWxlIChidWZfdXNlZCA8IHNpemUpIHsKIAkJdTggZGNzX2NtZCA9IGZpcnN0ID8gMHgyZSA6IDB4M2U7CkBAIC04OTQsNyArMTAyNCw4IEBACiAKIGVycjoKIAlkc2lfdmNfc2V0X21heF9yeF9wYWNrZXRfc2l6ZShUQ0gsIDEpOwotCitlcnIwOgorCWRzaV9idXNfdW5sb2NrKCk7CiAJcmV0dXJuIHI7CiB9CiAKQEAgLTkzOSw4ICsxMDcwLDExIEBACiAJfQogCS8qIFNlbGYtZGlhZ25vc3RpY3MgcmVzdWx0IGlzIGFsc28gc2hvd24gb24gVEUgR1BJTyBsaW5lLiBXZSBuZWVkCiAJICogdG8gcmUtZW5hYmxlIFRFIGFmdGVyIHNlbGYgZGlhZ25vc3RpY3MgKi8KLQlpZiAodGQtPnVzZV9leHRfdGUgJiYgdGQtPnRlX2VuYWJsZWQpCi0JCXRhYWxfZW5hYmxlX3RlKGRzc2RldiwgdHJ1ZSk7CisJaWYgKHRkLT51c2VfZXh0X3RlICYmIHRkLT50ZV9lbmFibGVkKSB7CisJCXIgPSB0YWFsX2Rjc193cml0ZV8xKERDU19URUFSX09OLCAwKTsKKwkJaWYgKHIpCisJCQlnb3RvIGVycjsKKwl9CiAKIAlkc2lfYnVzX3VubG9jaygpOwogCkBAIC05NTgsNiArMTA5MiwyMCBAQAogCXF1ZXVlX2RlbGF5ZWRfd29yayh0ZC0+ZXNkX3dxLCAmdGQtPmVzZF93b3JrLCBUQUFMX0VTRF9DSEVDS19QRVJJT0QpOwogfQogCitzdGF0aWMgaW50IHRhYWxfc2V0X3VwZGF0ZV9tb2RlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKKwkJZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSBtb2RlKQoreworCWlmIChtb2RlICE9IE9NQVBfRFNTX1VQREFURV9NQU5VQUwpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCitzdGF0aWMgZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSB0YWFsX2dldF91cGRhdGVfbW9kZSgKKwkJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCXJldHVybiBPTUFQX0RTU19VUERBVEVfTUFOVUFMOworfQorCiBzdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RyaXZlciB0YWFsX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gdGFhbF9wcm9iZSwKIAkucmVtb3ZlCQk9IHRhYWxfcmVtb3ZlLApAQCAtOTY3LDkgKzExMTUsMTggQEAKIAkuc3VzcGVuZAk9IHRhYWxfc3VzcGVuZCwKIAkucmVzdW1lCQk9IHRhYWxfcmVzdW1lLAogCi0JLnNldHVwX3VwZGF0ZQk9IHRhYWxfc2V0dXBfdXBkYXRlLAorCS5zZXRfdXBkYXRlX21vZGUgPSB0YWFsX3NldF91cGRhdGVfbW9kZSwKKwkuZ2V0X3VwZGF0ZV9tb2RlID0gdGFhbF9nZXRfdXBkYXRlX21vZGUsCisKKwkudXBkYXRlCQk9IHRhYWxfdXBkYXRlLAorCS5zeW5jCQk9IHRhYWxfc3luYywKKworCS5nZXRfcmVzb2x1dGlvbgk9IHRhYWxfZ2V0X3Jlc29sdXRpb24sCisJLmdldF9yZWNvbW1lbmRlZF9icHAgPSBvbWFwZHNzX2RlZmF1bHRfZ2V0X3JlY29tbWVuZGVkX2JwcCwKKwogCS5lbmFibGVfdGUJPSB0YWFsX2VuYWJsZV90ZSwKLQkud2FpdF9mb3JfdGUJPSB0YWFsX3dhaXRfdGUsCisJLmdldF90ZQkJPSB0YWFsX2dldF90ZSwKKwogCS5zZXRfcm90YXRlCT0gdGFhbF9yb3RhdGUsCiAJLmdldF9yb3RhdGUJPSB0YWFsX2dldF9yb3RhdGUsCiAJLnNldF9taXJyb3IJPSB0YWFsX21pcnJvciwKQEAgLTk3Nyw2ICsxMTM0LDggQEAKIAkucnVuX3Rlc3QJPSB0YWFsX3J1bl90ZXN0LAogCS5tZW1vcnlfcmVhZAk9IHRhYWxfbWVtb3J5X3JlYWQsCiAKKwkuZ2V0X3RpbWluZ3MJPSB0YWFsX2dldF90aW1pbmdzLAorCiAJLmRyaXZlciAgICAgICAgID0gewogCQkubmFtZSAgID0gInRhYWwiLAogCQkub3duZXIgID0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXRvcHBvbHktdGRvMzVzLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rpc3BsYXlzL3BhbmVsLXRvcHBvbHktdGRvMzVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE0MzRjYQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtdG9wcG9seS10ZG8zNXMuYwpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIExDRCBwYW5lbCBkcml2ZXIgZm9yIFRvcHBvbHkgVERPMzVTCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IENvbXB1TGFiLCBMdGQuCisgKiBBdXRob3I6IE1pa2UgUmFwb3BvcnQgPG1pa2VAY29tcHVsYWIuY28uaWw+CisgKgorICogQmFzZWQgb24gZ2VuZXJpYyBwYW5lbCBzdXBwb3J0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogVG9taSBWYWxrZWluZW4gPHRvbWkudmFsa2VpbmVuQG5va2lhLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICogdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorCisjaW5jbHVkZSA8cGxhdC9kaXNwbGF5Lmg+CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzIHRvcHBvbHlfdGRvX3BhbmVsX3RpbWluZ3MgPSB7CisJLyogNjQwIHggNDgwIEAgNjAgSHogIFJlZHVjZWQgYmxhbmtpbmcgVkVTQSBDVlQgMC4zMU0zLVIgKi8KKwkueF9yZXMJCT0gNDgwLAorCS55X3JlcwkJPSA2NDAsCisKKwkucGl4ZWxfY2xvY2sJPSAyNjAwMCwKKworCS5oZnAJCT0gMTA0LAorCS5oc3cJCT0gOCwKKwkuaGJwCQk9IDgsCisKKwkudmZwCQk9IDQsCisJLnZzdwkJPSAyLAorCS52YnAJCT0gMiwKK307CisKK3N0YXRpYyBpbnQgdG9wcG9seV90ZG9fcGFuZWxfcG93ZXJfb24oc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWludCByOworCisJciA9IG9tYXBkc3NfZHBpX2Rpc3BsYXlfZW5hYmxlKGRzc2Rldik7CisJaWYgKHIpCisJCWdvdG8gZXJyMDsKKworCWlmIChkc3NkZXYtPnBsYXRmb3JtX2VuYWJsZSkgeworCQlyID0gZHNzZGV2LT5wbGF0Zm9ybV9lbmFibGUoZHNzZGV2KTsKKwkJaWYgKHIpCisJCQlnb3RvIGVycjE7CisJfQorCisJcmV0dXJuIDA7CitlcnIxOgorCW9tYXBkc3NfZHBpX2Rpc3BsYXlfZGlzYWJsZShkc3NkZXYpOworZXJyMDoKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgdG9wcG9seV90ZG9fcGFuZWxfcG93ZXJfb2ZmKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlpZiAoZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKQorCQlkc3NkZXYtPnBsYXRmb3JtX2Rpc2FibGUoZHNzZGV2KTsKKworCW9tYXBkc3NfZHBpX2Rpc3BsYXlfZGlzYWJsZShkc3NkZXYpOworfQorCitzdGF0aWMgaW50IHRvcHBvbHlfdGRvX3BhbmVsX3Byb2JlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlkc3NkZXYtPnBhbmVsLmNvbmZpZyA9IE9NQVBfRFNTX0xDRF9URlQgfCBPTUFQX0RTU19MQ0RfSVZTIHwKKwkJT01BUF9EU1NfTENEX0lIUzsKKwlkc3NkZXYtPnBhbmVsLnRpbWluZ3MgPSB0b3Bwb2x5X3Rkb19wYW5lbF90aW1pbmdzOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRvcHBvbHlfdGRvX3BhbmVsX3JlbW92ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7Cit9CisKK3N0YXRpYyBpbnQgdG9wcG9seV90ZG9fcGFuZWxfZW5hYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlpbnQgciA9IDA7CisKKwlyID0gdG9wcG9seV90ZG9fcGFuZWxfcG93ZXJfb24oZHNzZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdG9wcG9seV90ZG9fcGFuZWxfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJdG9wcG9seV90ZG9fcGFuZWxfcG93ZXJfb2ZmKGRzc2Rldik7CisKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9ESVNBQkxFRDsKK30KKworc3RhdGljIGludCB0b3Bwb2x5X3Rkb19wYW5lbF9zdXNwZW5kKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwl0b3Bwb2x5X3Rkb19wYW5lbF9wb3dlcl9vZmYoZHNzZGV2KTsKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9TVVNQRU5ERUQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdG9wcG9seV90ZG9fcGFuZWxfcmVzdW1lKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlpbnQgciA9IDA7CisKKwlyID0gdG9wcG9seV90ZG9fcGFuZWxfcG93ZXJfb24oZHNzZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kcml2ZXIgZ2VuZXJpY19kcml2ZXIgPSB7CisJLnByb2JlCQk9IHRvcHBvbHlfdGRvX3BhbmVsX3Byb2JlLAorCS5yZW1vdmUJCT0gdG9wcG9seV90ZG9fcGFuZWxfcmVtb3ZlLAorCisJLmVuYWJsZQkJPSB0b3Bwb2x5X3Rkb19wYW5lbF9lbmFibGUsCisJLmRpc2FibGUJPSB0b3Bwb2x5X3Rkb19wYW5lbF9kaXNhYmxlLAorCS5zdXNwZW5kCT0gdG9wcG9seV90ZG9fcGFuZWxfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHRvcHBvbHlfdGRvX3BhbmVsX3Jlc3VtZSwKKworCS5kcml2ZXIgICAgICAgICA9IHsKKwkJLm5hbWUgICA9ICJ0b3Bwb2x5X3RkbzM1c19wYW5lbCIsCisJCS5vd25lciAgPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgdG9wcG9seV90ZG9fcGFuZWxfZHJ2X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gb21hcF9kc3NfcmVnaXN0ZXJfZHJpdmVyKCZnZW5lcmljX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB0b3Bwb2x5X3Rkb19wYW5lbF9kcnZfZXhpdCh2b2lkKQoreworCW9tYXBfZHNzX3VucmVnaXN0ZXJfZHJpdmVyKCZnZW5lcmljX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHRvcHBvbHlfdGRvX3BhbmVsX2Rydl9pbml0KTsKK21vZHVsZV9leGl0KHRvcHBvbHlfdGRvX3BhbmVsX2Rydl9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtdHBvLXRkMDQzbXRlYTEuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZGlzcGxheXMvcGFuZWwtdHBvLXRkMDQzbXRlYTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTc4ZmVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kaXNwbGF5cy9wYW5lbC10cG8tdGQwNDNtdGVhMS5jCkBAIC0wLDAgKzEsNTI4IEBACisvKgorICogTENEIHBhbmVsIGRyaXZlciBmb3IgVFBPIFREMDQzTVRFQTEKKyAqCisgKiBBdXRob3I6IEdyYcW+dnlkYXMgSWdub3RhcyA8bm90YXNhc0BnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmg+CisjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisjaW5jbHVkZSA8cGxhdC9kaXNwbGF5Lmg+CisKKyNkZWZpbmUgVFBPX1IwMl9NT0RFKHgpCQkoKHgpICYgNykKKyNkZWZpbmUgVFBPX1IwMl9NT0RFXzgwMHg0ODAJNworI2RlZmluZSBUUE9fUjAyX05DTEtfUklTSU5HCUJJVCgzKQorI2RlZmluZSBUUE9fUjAyX0hTWU5DX0hJR0gJQklUKDQpCisjZGVmaW5lIFRQT19SMDJfVlNZTkNfSElHSAlCSVQoNSkKKworI2RlZmluZSBUUE9fUjAzX05TVEFOREJZCUJJVCgwKQorI2RlZmluZSBUUE9fUjAzX0VOX0NQX0NMSwlCSVQoMSkKKyNkZWZpbmUgVFBPX1IwM19FTl9WR0xfUFVNUAlCSVQoMikKKyNkZWZpbmUgVFBPX1IwM19FTl9QV00JCUJJVCgzKQorI2RlZmluZSBUUE9fUjAzX0RSSVZJTkdfQ0FQXzEwMAlCSVQoNCkKKyNkZWZpbmUgVFBPX1IwM19FTl9QUkVfQ0hBUkdFCUJJVCg2KQorI2RlZmluZSBUUE9fUjAzX1NPRlRXQVJFX0NUTAlCSVQoNykKKworI2RlZmluZSBUUE9fUjA0X05GTElQX0gJCUJJVCgwKQorI2RlZmluZSBUUE9fUjA0X05GTElQX1YJCUJJVCgxKQorI2RlZmluZSBUUE9fUjA0X0NQX0NMS19GUkVRXzFICUJJVCgyKQorI2RlZmluZSBUUE9fUjA0X1ZHTF9GUkVRXzFICUJJVCg0KQorCisjZGVmaW5lIFRQT19SMDNfVkFMX05PUk1BTCAoVFBPX1IwM19OU1RBTkRCWSB8IFRQT19SMDNfRU5fQ1BfQ0xLIHwgXAorCQkJVFBPX1IwM19FTl9WR0xfUFVNUCB8ICBUUE9fUjAzX0VOX1BXTSB8IFwKKwkJCVRQT19SMDNfRFJJVklOR19DQVBfMTAwIHwgVFBPX1IwM19FTl9QUkVfQ0hBUkdFIHwgXAorCQkJVFBPX1IwM19TT0ZUV0FSRV9DVEwpCisKKyNkZWZpbmUgVFBPX1IwM19WQUxfU1RBTkRCWSAoVFBPX1IwM19EUklWSU5HX0NBUF8xMDAgfCBcCisJCQlUUE9fUjAzX0VOX1BSRV9DSEFSR0UgfCBUUE9fUjAzX1NPRlRXQVJFX0NUTCkKKworc3RhdGljIGNvbnN0IHUxNiB0cG9fdGQwNDNfZGVmX2dhbW1hWzEyXSA9IHsKKwkxMDYsIDIwMCwgMjg5LCAzNzUsIDQ2MCwgNTQzLCA2MjUsIDcwNSwgNzg1LCA4NjQsIDk0MiwgMTAyMAorfTsKKworc3RydWN0IHRwb190ZDA0M19kZXZpY2UgeworCXN0cnVjdCBzcGlfZGV2aWNlICpzcGk7CisJc3RydWN0IHJlZ3VsYXRvciAqdmNjX3JlZzsKKwl1MTYgZ2FtbWFbMTJdOworCXUzMiBtb2RlOworCXUzMiBobWlycm9yOjE7CisJdTMyIHZtaXJyb3I6MTsKK307CisKK3N0YXRpYyBpbnQgdHBvX3RkMDQzX3dyaXRlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHU4IGFkZHIsIHU4IGRhdGEpCit7CisJc3RydWN0IHNwaV9tZXNzYWdlCW07CisJc3RydWN0IHNwaV90cmFuc2Zlcgl4ZmVyOworCXUxNgkJCXc7CisJaW50CQkJcjsKKworCXNwaV9tZXNzYWdlX2luaXQoJm0pOworCisJbWVtc2V0KCZ4ZmVyLCAwLCBzaXplb2YoeGZlcikpOworCisJdyA9ICgodTE2KWFkZHIgPDwgMTApIHwgKDEgPDwgOCkgfCBkYXRhOworCXhmZXIudHhfYnVmID0gJnc7CisJeGZlci5iaXRzX3Blcl93b3JkID0gMTY7CisJeGZlci5sZW4gPSAyOworCXNwaV9tZXNzYWdlX2FkZF90YWlsKCZ4ZmVyLCAmbSk7CisKKwlyID0gc3BpX3N5bmMoc3BpLCAmbSk7CisJaWYgKHIgPCAwKQorCQlkZXZfd2Fybigmc3BpLT5kZXYsICJmYWlsZWQgdG8gd3JpdGUgdG8gTENEIHJlZyAoJWQpXG4iLCByKTsKKwlyZXR1cm4gcjsKK30KKworc3RhdGljIHZvaWQgdHBvX3RkMDQzX3dyaXRlX2dhbW1hKHN0cnVjdCBzcGlfZGV2aWNlICpzcGksIHUxNiBnYW1tYVsxMl0pCit7CisJdTggaSwgdmFsOworCisJLyogZ2FtbWEgYml0cyBbOTo4XSAqLworCWZvciAodmFsID0gaSA9IDA7IGkgPCA0OyBpKyspCisJCXZhbCB8PSAoZ2FtbWFbaV0gJiAweDMwMCkgPj4gKChpICsgMSkgKiAyKTsKKwl0cG9fdGQwNDNfd3JpdGUoc3BpLCAweDExLCB2YWwpOworCisJZm9yICh2YWwgPSBpID0gMDsgaSA8IDQ7IGkrKykKKwkJdmFsIHw9IChnYW1tYVtpKzRdICYgMHgzMDApID4+ICgoaSArIDEpICogMik7CisJdHBvX3RkMDQzX3dyaXRlKHNwaSwgMHgxMiwgdmFsKTsKKworCWZvciAodmFsID0gaSA9IDA7IGkgPCA0OyBpKyspCisJCXZhbCB8PSAoZ2FtbWFbaSs4XSAmIDB4MzAwKSA+PiAoKGkgKyAxKSAqIDIpOworCXRwb190ZDA0M193cml0ZShzcGksIDB4MTMsIHZhbCk7CisKKwkvKiBnYW1tYSBiaXRzIFs3OjBdICovCisJZm9yICh2YWwgPSBpID0gMDsgaSA8IDEyOyBpKyspCisJCXRwb190ZDA0M193cml0ZShzcGksIDB4MTQgKyBpLCBnYW1tYVtpXSAmIDB4ZmYpOworfQorCitzdGF0aWMgaW50IHRwb190ZDA0M193cml0ZV9taXJyb3Ioc3RydWN0IHNwaV9kZXZpY2UgKnNwaSwgYm9vbCBoLCBib29sIHYpCit7CisJdTggcmVnNCA9IFRQT19SMDRfTkZMSVBfSCB8IFRQT19SMDRfTkZMSVBfViB8IFwKKwkJVFBPX1IwNF9DUF9DTEtfRlJFUV8xSCB8IFRQT19SMDRfVkdMX0ZSRVFfMUg7CisJaWYgKGgpCisJCXJlZzQgJj0gflRQT19SMDRfTkZMSVBfSDsKKwlpZiAodikKKwkJcmVnNCAmPSB+VFBPX1IwNF9ORkxJUF9WOworCisJcmV0dXJuIHRwb190ZDA0M193cml0ZShzcGksIDQsIHJlZzQpOworfQorCitzdGF0aWMgaW50IHRwb190ZDA0M19zZXRfaG1pcnJvcihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsIGJvb2wgZW5hYmxlKQoreworCXN0cnVjdCB0cG9fdGQwNDNfZGV2aWNlICp0cG9fdGQwNDMgPSBkZXZfZ2V0X2RydmRhdGEoJmRzc2Rldi0+ZGV2KTsKKworCXRwb190ZDA0My0+aG1pcnJvciA9IGVuYWJsZTsKKwlyZXR1cm4gdHBvX3RkMDQzX3dyaXRlX21pcnJvcih0cG9fdGQwNDMtPnNwaSwgdHBvX3RkMDQzLT5obWlycm9yLAorCQkJdHBvX3RkMDQzLT52bWlycm9yKTsKK30KKworc3RhdGljIGJvb2wgdHBvX3RkMDQzX2dldF9obWlycm9yKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlzdHJ1Y3QgdHBvX3RkMDQzX2RldmljZSAqdHBvX3RkMDQzID0gZGV2X2dldF9kcnZkYXRhKCZkc3NkZXYtPmRldik7CisKKwlyZXR1cm4gdHBvX3RkMDQzLT5obWlycm9yOworfQorCitzdGF0aWMgc3NpemVfdCB0cG9fdGQwNDNfdm1pcnJvcl9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB0cG9fdGQwNDNfZGV2aWNlICp0cG9fdGQwNDMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCB0cG9fdGQwNDMtPnZtaXJyb3IpOworfQorCitzdGF0aWMgc3NpemVfdCB0cG9fdGQwNDNfdm1pcnJvcl9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB0cG9fdGQwNDNfZGV2aWNlICp0cG9fdGQwNDMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlsb25nIHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDAsICZ2YWwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gdHBvX3RkMDQzX3dyaXRlX21pcnJvcih0cG9fdGQwNDMtPnNwaSwgdHBvX3RkMDQzLT5obWlycm9yLCB2YWwpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJdHBvX3RkMDQzLT52bWlycm9yID0gdmFsOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdCB0cG9fdGQwNDNfbW9kZV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB0cG9fdGQwNDNfZGV2aWNlICp0cG9fdGQwNDMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVkXG4iLCB0cG9fdGQwNDMtPm1vZGUpOworfQorCitzdGF0aWMgc3NpemVfdCB0cG9fdGQwNDNfbW9kZV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB0cG9fdGQwNDNfZGV2aWNlICp0cG9fdGQwNDMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlsb25nIHZhbDsKKwlpbnQgcmV0OworCisJcmV0ID0gc3RyaWN0X3N0cnRvbChidWYsIDAsICZ2YWwpOworCWlmIChyZXQgIT0gMCB8fCB2YWwgJiB+NykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl0cG9fdGQwNDMtPm1vZGUgPSB2YWw7CisKKwl2YWwgfD0gVFBPX1IwMl9OQ0xLX1JJU0lORzsKKwl0cG9fdGQwNDNfd3JpdGUodHBvX3RkMDQzLT5zcGksIDIsIHZhbCk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHRwb190ZDA0M19nYW1tYV9zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwKKwlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCB0cG9fdGQwNDNfZGV2aWNlICp0cG9fdGQwNDMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzc2l6ZV90IGxlbiA9IDA7CisJaW50IHJldDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRwb190ZDA0My0+Z2FtbWEpOyBpKyspIHsKKwkJcmV0ID0gc25wcmludGYoYnVmICsgbGVuLCBQQUdFX1NJWkUgLSBsZW4sICIldSAiLAorCQkJCXRwb190ZDA0My0+Z2FtbWFbaV0pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCWxlbiArPSByZXQ7CisJfQorCWJ1ZltsZW4gLSAxXSA9ICdcbic7CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3NpemVfdCB0cG9fdGQwNDNfZ2FtbWFfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LAorCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdHBvX3RkMDQzX2RldmljZSAqdHBvX3RkMDQzID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgaW50IGdbMTJdOworCWludCByZXQ7CisJaW50IGk7CisKKwlyZXQgPSBzc2NhbmYoYnVmLCAiJXUgJXUgJXUgJXUgJXUgJXUgJXUgJXUgJXUgJXUgJXUgJXUiLAorCQkJJmdbMF0sICZnWzFdLCAmZ1syXSwgJmdbM10sICZnWzRdLCAmZ1s1XSwKKwkJCSZnWzZdLCAmZ1s3XSwgJmdbOF0sICZnWzldLCAmZ1sxMF0sICZnWzExXSk7CisKKwlpZiAocmV0ICE9IDEyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKQorCQl0cG9fdGQwNDMtPmdhbW1hW2ldID0gZ1tpXTsKKworCXRwb190ZDA0M193cml0ZV9nYW1tYSh0cG9fdGQwNDMtPnNwaSwgdHBvX3RkMDQzLT5nYW1tYSk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUih2bWlycm9yLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJdHBvX3RkMDQzX3ZtaXJyb3Jfc2hvdywgdHBvX3RkMDQzX3ZtaXJyb3Jfc3RvcmUpOworc3RhdGljIERFVklDRV9BVFRSKG1vZGUsIFNfSVJVR08gfCBTX0lXVVNSLAorCQl0cG9fdGQwNDNfbW9kZV9zaG93LCB0cG9fdGQwNDNfbW9kZV9zdG9yZSk7CitzdGF0aWMgREVWSUNFX0FUVFIoZ2FtbWEsIFNfSVJVR08gfCBTX0lXVVNSLAorCQl0cG9fdGQwNDNfZ2FtbWFfc2hvdywgdHBvX3RkMDQzX2dhbW1hX3N0b3JlKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnRwb190ZDA0M19hdHRyc1tdID0geworCSZkZXZfYXR0cl92bWlycm9yLmF0dHIsCisJJmRldl9hdHRyX21vZGUuYXR0ciwKKwkmZGV2X2F0dHJfZ2FtbWEuYXR0ciwKKwlOVUxMLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdHBvX3RkMDQzX2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gdHBvX3RkMDQzX2F0dHJzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3MgdHBvX3RkMDQzX3RpbWluZ3MgPSB7CisJLnhfcmVzCQk9IDgwMCwKKwkueV9yZXMJCT0gNDgwLAorCisJLnBpeGVsX2Nsb2NrCT0gMzYwMDAsCisKKwkuaHN3CQk9IDEsCisJLmhmcAkJPSA2OCwKKwkuaGJwCQk9IDIxNCwKKworCS52c3cJCT0gMSwKKwkudmZwCQk9IDM5LAorCS52YnAJCT0gMzQsCit9OworCitzdGF0aWMgaW50IHRwb190ZDA0M19wb3dlcl9vbihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJc3RydWN0IHRwb190ZDA0M19kZXZpY2UgKnRwb190ZDA0MyA9IGRldl9nZXRfZHJ2ZGF0YSgmZHNzZGV2LT5kZXYpOworCWludCBucmVzZXRfZ3BpbyA9IGRzc2Rldi0+cmVzZXRfZ3BpbzsKKwlpbnQgcjsKKworCXIgPSBvbWFwZHNzX2RwaV9kaXNwbGF5X2VuYWJsZShkc3NkZXYpOworCWlmIChyKQorCQlnb3RvIGVycjA7CisKKwlpZiAoZHNzZGV2LT5wbGF0Zm9ybV9lbmFibGUpIHsKKwkJciA9IGRzc2Rldi0+cGxhdGZvcm1fZW5hYmxlKGRzc2Rldik7CisJCWlmIChyKQorCQkJZ290byBlcnIxOworCX0KKworCXJlZ3VsYXRvcl9lbmFibGUodHBvX3RkMDQzLT52Y2NfcmVnKTsKKworCS8qIHdhaXQgZm9yIHBvd2VyIHVwICovCisJbXNsZWVwKDE2MCk7CisKKwlpZiAoZ3Bpb19pc192YWxpZChucmVzZXRfZ3BpbykpCisJCWdwaW9fc2V0X3ZhbHVlKG5yZXNldF9ncGlvLCAxKTsKKworCXRwb190ZDA0M193cml0ZSh0cG9fdGQwNDMtPnNwaSwgMiwKKwkJCVRQT19SMDJfTU9ERSh0cG9fdGQwNDMtPm1vZGUpIHwgVFBPX1IwMl9OQ0xLX1JJU0lORyk7CisJdHBvX3RkMDQzX3dyaXRlKHRwb190ZDA0My0+c3BpLCAzLCBUUE9fUjAzX1ZBTF9OT1JNQUwpOworCXRwb190ZDA0M193cml0ZSh0cG9fdGQwNDMtPnNwaSwgMHgyMCwgMHhmMCk7CisJdHBvX3RkMDQzX3dyaXRlKHRwb190ZDA0My0+c3BpLCAweDIxLCAweGYwKTsKKwl0cG9fdGQwNDNfd3JpdGVfbWlycm9yKHRwb190ZDA0My0+c3BpLCB0cG9fdGQwNDMtPmhtaXJyb3IsCisJCQl0cG9fdGQwNDMtPnZtaXJyb3IpOworCXRwb190ZDA0M193cml0ZV9nYW1tYSh0cG9fdGQwNDMtPnNwaSwgdHBvX3RkMDQzLT5nYW1tYSk7CisKKwlyZXR1cm4gMDsKK2VycjE6CisJb21hcGRzc19kcGlfZGlzcGxheV9kaXNhYmxlKGRzc2Rldik7CitlcnIwOgorCXJldHVybiByOworfQorCitzdGF0aWMgdm9pZCB0cG9fdGQwNDNfcG93ZXJfb2ZmKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlzdHJ1Y3QgdHBvX3RkMDQzX2RldmljZSAqdHBvX3RkMDQzID0gZGV2X2dldF9kcnZkYXRhKCZkc3NkZXYtPmRldik7CisJaW50IG5yZXNldF9ncGlvID0gZHNzZGV2LT5yZXNldF9ncGlvOworCisJdHBvX3RkMDQzX3dyaXRlKHRwb190ZDA0My0+c3BpLCAzLAorCQkJVFBPX1IwM19WQUxfU1RBTkRCWSB8IFRQT19SMDNfRU5fUFdNKTsKKworCWlmIChncGlvX2lzX3ZhbGlkKG5yZXNldF9ncGlvKSkKKwkJZ3Bpb19zZXRfdmFsdWUobnJlc2V0X2dwaW8sIDApOworCisJLyogd2FpdCBmb3IgYXQgbGVhc3QgMiB2c3luY3MgYmVmb3JlIGN1dHRpbmcgb2ZmIHBvd2VyICovCisJbXNsZWVwKDUwKTsKKworCXRwb190ZDA0M193cml0ZSh0cG9fdGQwNDMtPnNwaSwgMywgVFBPX1IwM19WQUxfU1RBTkRCWSk7CisKKwlyZWd1bGF0b3JfZGlzYWJsZSh0cG9fdGQwNDMtPnZjY19yZWcpOworCisJaWYgKGRzc2Rldi0+cGxhdGZvcm1fZGlzYWJsZSkKKwkJZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKGRzc2Rldik7CisKKwlvbWFwZHNzX2RwaV9kaXNwbGF5X2Rpc2FibGUoZHNzZGV2KTsKK30KKworc3RhdGljIGludCB0cG9fdGQwNDNfZW5hYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlpbnQgcmV0OworCisJZGV2X2RiZygmZHNzZGV2LT5kZXYsICJlbmFibGVcbiIpOworCisJcmV0ID0gdHBvX3RkMDQzX3Bvd2VyX29uKGRzc2Rldik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB0cG9fdGQwNDNfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJZGV2X2RiZygmZHNzZGV2LT5kZXYsICJkaXNhYmxlXG4iKTsKKworCXRwb190ZDA0M19wb3dlcl9vZmYoZHNzZGV2KTsKKworCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX0RJU0FCTEVEOworfQorCitzdGF0aWMgaW50IHRwb190ZDA0M19zdXNwZW5kKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwl0cG9fdGQwNDNfcG93ZXJfb2ZmKGRzc2Rldik7CisJZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfU1VTUEVOREVEOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRwb190ZDA0M19yZXN1bWUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCWludCByID0gMDsKKworCXIgPSB0cG9fdGQwNDNfcG93ZXJfb24oZHNzZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0cG9fdGQwNDNfcHJvYmUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoreworCXN0cnVjdCB0cG9fdGQwNDNfZGV2aWNlICp0cG9fdGQwNDMgPSBkZXZfZ2V0X2RydmRhdGEoJmRzc2Rldi0+ZGV2KTsKKwlpbnQgbnJlc2V0X2dwaW8gPSBkc3NkZXYtPnJlc2V0X2dwaW87CisJaW50IHJldCA9IDA7CisKKwlkZXZfZGJnKCZkc3NkZXYtPmRldiwgInByb2JlXG4iKTsKKworCWlmICh0cG9fdGQwNDMgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZkc3NkZXYtPmRldiwgIm1pc3NpbmcgdHBvX3RkMDQzX2RldmljZVxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWRzc2Rldi0+cGFuZWwuY29uZmlnID0gT01BUF9EU1NfTENEX1RGVCB8IE9NQVBfRFNTX0xDRF9JSFMgfAorCQkJCU9NQVBfRFNTX0xDRF9JVlMgfCBPTUFQX0RTU19MQ0RfSVBDOworCWRzc2Rldi0+cGFuZWwudGltaW5ncyA9IHRwb190ZDA0M190aW1pbmdzOworCWRzc2Rldi0+Y3RybC5waXhlbF9zaXplID0gMjQ7CisKKwl0cG9fdGQwNDMtPm1vZGUgPSBUUE9fUjAyX01PREVfODAweDQ4MDsKKwltZW1jcHkodHBvX3RkMDQzLT5nYW1tYSwgdHBvX3RkMDQzX2RlZl9nYW1tYSwgc2l6ZW9mKHRwb190ZDA0My0+Z2FtbWEpKTsKKworCXRwb190ZDA0My0+dmNjX3JlZyA9IHJlZ3VsYXRvcl9nZXQoJmRzc2Rldi0+ZGV2LCAidmNjIik7CisJaWYgKElTX0VSUih0cG9fdGQwNDMtPnZjY19yZWcpKSB7CisJCWRldl9lcnIoJmRzc2Rldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBMQ0QgVkNDIHJlZ3VsYXRvclxuIik7CisJCXJldCA9IFBUUl9FUlIodHBvX3RkMDQzLT52Y2NfcmVnKTsKKwkJZ290byBmYWlsX3JlZ3VsYXRvcjsKKwl9CisKKwlpZiAoZ3Bpb19pc192YWxpZChucmVzZXRfZ3BpbykpIHsKKwkJcmV0ID0gZ3Bpb19yZXF1ZXN0KG5yZXNldF9ncGlvLCAibGNkIHJlc2V0Iik7CisJCWlmIChyZXQgPCAwKSB7CisJCQlkZXZfZXJyKCZkc3NkZXYtPmRldiwgImNvdWxkbid0IHJlcXVlc3QgcmVzZXQgR1BJT1xuIik7CisJCQlnb3RvIGZhaWxfZ3Bpb19yZXE7CisJCX0KKworCQlyZXQgPSBncGlvX2RpcmVjdGlvbl9vdXRwdXQobnJlc2V0X2dwaW8sIDApOworCQlpZiAocmV0IDwgMCkgeworCQkJZGV2X2VycigmZHNzZGV2LT5kZXYsICJjb3VsZG4ndCBzZXQgR1BJTyBkaXJlY3Rpb25cbiIpOworCQkJZ290byBmYWlsX2dwaW9fZGlyZWN0aW9uOworCQl9CisJfQorCisJcmV0ID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkc3NkZXYtPmRldi5rb2JqLCAmdHBvX3RkMDQzX2F0dHJfZ3JvdXApOworCWlmIChyZXQpCisJCWRldl93YXJuKCZkc3NkZXYtPmRldiwgImZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZmlsZXNcbiIpOworCisJcmV0dXJuIDA7CisKK2ZhaWxfZ3Bpb19kaXJlY3Rpb246CisJZ3Bpb19mcmVlKG5yZXNldF9ncGlvKTsKK2ZhaWxfZ3Bpb19yZXE6CisJcmVndWxhdG9yX3B1dCh0cG9fdGQwNDMtPnZjY19yZWcpOworZmFpbF9yZWd1bGF0b3I6CisJa2ZyZWUodHBvX3RkMDQzKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB0cG9fdGQwNDNfcmVtb3ZlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlzdHJ1Y3QgdHBvX3RkMDQzX2RldmljZSAqdHBvX3RkMDQzID0gZGV2X2dldF9kcnZkYXRhKCZkc3NkZXYtPmRldik7CisJaW50IG5yZXNldF9ncGlvID0gZHNzZGV2LT5yZXNldF9ncGlvOworCisJZGV2X2RiZygmZHNzZGV2LT5kZXYsICJyZW1vdmVcbiIpOworCisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkc3NkZXYtPmRldi5rb2JqLCAmdHBvX3RkMDQzX2F0dHJfZ3JvdXApOworCXJlZ3VsYXRvcl9wdXQodHBvX3RkMDQzLT52Y2NfcmVnKTsKKwlpZiAoZ3Bpb19pc192YWxpZChucmVzZXRfZ3BpbykpCisJCWdwaW9fZnJlZShucmVzZXRfZ3Bpbyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgb21hcF9kc3NfZHJpdmVyIHRwb190ZDA0M19kcml2ZXIgPSB7CisJLnByb2JlCQk9IHRwb190ZDA0M19wcm9iZSwKKwkucmVtb3ZlCQk9IHRwb190ZDA0M19yZW1vdmUsCisKKwkuZW5hYmxlCQk9IHRwb190ZDA0M19lbmFibGUsCisJLmRpc2FibGUJPSB0cG9fdGQwNDNfZGlzYWJsZSwKKwkuc3VzcGVuZAk9IHRwb190ZDA0M19zdXNwZW5kLAorCS5yZXN1bWUJCT0gdHBvX3RkMDQzX3Jlc3VtZSwKKwkuc2V0X21pcnJvcgk9IHRwb190ZDA0M19zZXRfaG1pcnJvciwKKwkuZ2V0X21pcnJvcgk9IHRwb190ZDA0M19nZXRfaG1pcnJvciwKKworCS5kcml2ZXIgICAgICAgICA9IHsKKwkJLm5hbWUJPSAidHBvX3RkMDQzbXRlYTFfcGFuZWwiLAorCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgdHBvX3RkMDQzX3NwaV9wcm9iZShzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpKQoreworCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiA9IHNwaS0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IHRwb190ZDA0M19kZXZpY2UgKnRwb190ZDA0MzsKKwlpbnQgcmV0OworCisJaWYgKGRzc2RldiA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnNwaS0+ZGV2LCAibWlzc2luZyBkc3NkZXZcbiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlzcGktPmJpdHNfcGVyX3dvcmQgPSAxNjsKKwlzcGktPm1vZGUgPSBTUElfTU9ERV8wOworCisJcmV0ID0gc3BpX3NldHVwKHNwaSk7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2Vycigmc3BpLT5kZXYsICJzcGlfc2V0dXAgZmFpbGVkOiAlZFxuIiwgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwl0cG9fdGQwNDMgPSBremFsbG9jKHNpemVvZigqdHBvX3RkMDQzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHRwb190ZDA0MyA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRwb190ZDA0My0+c3BpID0gc3BpOworCWRldl9zZXRfZHJ2ZGF0YSgmc3BpLT5kZXYsIHRwb190ZDA0Myk7CisJZGV2X3NldF9kcnZkYXRhKCZkc3NkZXYtPmRldiwgdHBvX3RkMDQzKTsKKworCW9tYXBfZHNzX3JlZ2lzdGVyX2RyaXZlcigmdHBvX3RkMDQzX2RyaXZlcik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgdHBvX3RkMDQzX3NwaV9yZW1vdmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSkKK3sKKwlzdHJ1Y3QgdHBvX3RkMDQzX2RldmljZSAqdHBvX3RkMDQzID0gZGV2X2dldF9kcnZkYXRhKCZzcGktPmRldik7CisKKwlvbWFwX2Rzc191bnJlZ2lzdGVyX2RyaXZlcigmdHBvX3RkMDQzX2RyaXZlcik7CisJa2ZyZWUodHBvX3RkMDQzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNwaV9kcml2ZXIgdHBvX3RkMDQzX3NwaV9kcml2ZXIgPSB7CisJLmRyaXZlciA9IHsKKwkJLm5hbWUJPSAidHBvX3RkMDQzbXRlYTFfcGFuZWxfc3BpIiwKKwkJLmJ1cwk9ICZzcGlfYnVzX3R5cGUsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCT0gdHBvX3RkMDQzX3NwaV9wcm9iZSwKKwkucmVtb3ZlCT0gX19kZXZleGl0X3AodHBvX3RkMDQzX3NwaV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdHBvX3RkMDQzX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3BpX3JlZ2lzdGVyX2RyaXZlcigmdHBvX3RkMDQzX3NwaV9kcml2ZXIpOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgdHBvX3RkMDQzX2V4aXQodm9pZCkKK3sKKwlzcGlfdW5yZWdpc3Rlcl9kcml2ZXIoJnRwb190ZDA0M19zcGlfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQodHBvX3RkMDQzX2luaXQpOworbW9kdWxlX2V4aXQodHBvX3RkMDQzX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJHcmHFvnZ5ZGFzIElnbm90YXMgPG5vdGFzYXNAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUUE8gVEQwNDNNVEVBMSBMQ0QgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9LY29uZmlnIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvS2NvbmZpZwppbmRleCBjNjNjZTc2Li44N2FmYjgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL0tjb25maWcKQEAgLTMwLDE5ICszMCwyOSBAQAogCWRlcGVuZHMgb24gT01BUDJfRFNTX0RFQlVHX1NVUFBPUlQKIAlkZWZhdWx0IG4KIAloZWxwCi0JICBDb2xsZWN0IERTUyBJUlEgc3RhdGlzdGljcywgcHJpbnRhYmxlIHZpYSBkZWJ1Z2ZzCisJICBDb2xsZWN0IERTUyBJUlEgc3RhdGlzdGljcywgcHJpbnRhYmxlIHZpYSBkZWJ1Z2ZzLgorCisJICBUaGUgc3RhdGlzdGljcyBjYW4gYmUgZm91bmQgZnJvbQorCSAgPGRlYnVnZnM+L29tYXBkc3MvZGlzcGNfaXJxIGZvciBESVNQQyBpbnRlcnJ1cHRzLCBhbmQKKwkgIDxkZWJ1Z2ZzPi9vbWFwZHNzL2RzaV9pcnEgZm9yIERTSSBpbnRlcnJ1cHRzLgogCiBjb25maWcgT01BUDJfRFNTX1JGQkkKIAlib29sICJSRkJJIHN1cHBvcnQiCiAgICAgICAgIGRlZmF1bHQgbgogCWhlbHAKLQkgIE1JUEkgREJJLCBvciBSRkJJIChSZW1vdGUgRnJhbWVidWZmZXIgSW50ZXJmYWNlKSwgc3VwcG9ydC4KKwkgIE1JUEkgREJJIHN1cHBvcnQgKFJGQkksIFJlbW90ZSBGcmFtZWJ1ZmZlciBJbnRlcmZhY2UsIGluIFRleGFzCisJICBJbnN0cnVtZW50J3MgdGVybWlub2xvZ3kpLgorCisJICBEQkkgaXMgYSBidXMgYmV0d2VlbiB0aGUgaG9zdCBwcm9jZXNzb3IgYW5kIGEgcGVyaXBoZXJhbCwKKwkgIHN1Y2ggYXMgYSBkaXNwbGF5IG9yIGEgZnJhbWVidWZmZXIgY2hpcC4KKworCSAgU2VlIGh0dHA6Ly93d3cubWlwaS5vcmcvIGZvciBEQkkgc3Blc2lmaWNhdGlvbnMuCiAKIGNvbmZpZyBPTUFQMl9EU1NfVkVOQwogCWJvb2wgIlZFTkMgc3VwcG9ydCIKICAgICAgICAgZGVmYXVsdCB5CiAJaGVscAotCSAgT01BUCBWaWRlbyBFbmNvZGVyIHN1cHBvcnQuCisJICBPTUFQIFZpZGVvIEVuY29kZXIgc3VwcG9ydCBmb3IgUy1WaWRlbyBhbmQgY29tcG9zaXRlIFRWLW91dC4KIAogY29uZmlnIE9NQVAyX0RTU19TREkKIAlib29sICJTREkgc3VwcG9ydCIKQEAgLTUxLDEyICs2MSwyMCBAQAogCWhlbHAKIAkgIFNESSAoU2VyaWFsIERpc3BsYXkgSW50ZXJmYWNlKSBzdXBwb3J0LgogCisJICBTREkgaXMgYSBoaWdoIHNwZWVkIG9uZS13YXkgZGlzcGxheSBzZXJpYWwgYnVzIGJldHdlZW4gdGhlIGhvc3QKKwkgIHByb2Nlc3NvciBhbmQgYSBkaXNwbGF5LgorCiBjb25maWcgT01BUDJfRFNTX0RTSQogCWJvb2wgIkRTSSBzdXBwb3J0IgogCWRlcGVuZHMgb24gQVJDSF9PTUFQMwogICAgICAgICBkZWZhdWx0IG4KIAloZWxwCi0JICBNSVBJIERTSSBzdXBwb3J0LgorCSAgTUlQSSBEU0kgKERpc3BsYXkgU2VyaWFsIEludGVyZmFjZSkgc3VwcG9ydC4KKworCSAgRFNJIGlzIGEgaGlnaCBzcGVlZCBoYWxmLWR1cGxleCBzZXJpYWwgaW50ZXJmYWNlIGJldHdlZW4gdGhlIGhvc3QKKwkgIHByb2Nlc3NvciBhbmQgYSBwZXJpcGhlcmFsLCBzdWNoIGFzIGEgZGlzcGxheSBvciBhIGZyYW1lYnVmZmVyIGNoaXAuCisKKwkgIFNlZSBodHRwOi8vd3d3Lm1pcGkub3JnLyBmb3IgRFNJIHNwZXNpZmljYXRpb25zLgogCiBjb25maWcgT01BUDJfRFNTX1VTRV9EU0lfUExMCiAJYm9vbCAiVXNlIERTSSBQTEwgZm9yIFBDTEsgKEVYUEVSSU1FTlRBTCkiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9jb3JlLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9jb3JlLmMKaW5kZXggODI5MThlZS4uN2ViZTUwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvY29yZS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2NvcmUuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oPgogCiAjaW5jbHVkZSA8cGxhdC9kaXNwbGF5Lmg+CiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgpAQCAtNDcsNiArNDgsMTAgQEAKIAlzdHJ1Y3QgY2xrICAgICAgKmRzc181NG1fZmNrOwogCXN0cnVjdCBjbGsJKmRzc185Nm1fZmNrOwogCXVuc2lnbmVkCW51bV9jbGtzX2VuYWJsZWQ7CisKKwlzdHJ1Y3QgcmVndWxhdG9yICp2ZGRzX2RzaV9yZWc7CisJc3RydWN0IHJlZ3VsYXRvciAqdmRkc19zZGlfcmVnOworCXN0cnVjdCByZWd1bGF0b3IgKnZkZGFfZGFjX3JlZzsKIH0gY29yZTsKIAogc3RhdGljIHZvaWQgZHNzX2Nsa19lbmFibGVfYWxsX25vX2N0eCh2b2lkKTsKQEAgLTI4NCw5ICsyODksMTEgQEAKIAogdm9pZCBkc3NfY2xrX2VuYWJsZShlbnVtIGRzc19jbG9jayBjbGtzKQogeworCWJvb2wgY2hlY2tfY3R4ID0gY29yZS5udW1fY2xrc19lbmFibGVkID09IDA7CisKIAlkc3NfY2xrX2VuYWJsZV9ub19jdHgoY2xrcyk7CiAKLQlpZiAoY3B1X2lzX29tYXAzNHh4KCkgJiYgZHNzX25lZWRfY3R4X3Jlc3RvcmUoKSkKKwlpZiAoY2hlY2tfY3R4ICYmIGNwdV9pc19vbWFwMzR4eCgpICYmIGRzc19uZWVkX2N0eF9yZXN0b3JlKCkpCiAJCXJlc3RvcmVfYWxsX2N0eCgpOwogfQogCkBAIC0zNTIsNiArMzU5LDUwIEBACiAJZHNzX2Nsa19kaXNhYmxlKGNsa3MpOwogfQogCisvKiBSRUdVTEFUT1JTICovCisKK3N0cnVjdCByZWd1bGF0b3IgKmRzc19nZXRfdmRkc19kc2kodm9pZCkKK3sKKwlzdHJ1Y3QgcmVndWxhdG9yICpyZWc7CisKKwlpZiAoY29yZS52ZGRzX2RzaV9yZWcgIT0gTlVMTCkKKwkJcmV0dXJuIGNvcmUudmRkc19kc2lfcmVnOworCisJcmVnID0gcmVndWxhdG9yX2dldCgmY29yZS5wZGV2LT5kZXYsICJ2ZGRzX2RzaSIpOworCWlmICghSVNfRVJSKHJlZykpCisJCWNvcmUudmRkc19kc2lfcmVnID0gcmVnOworCisJcmV0dXJuIHJlZzsKK30KKworc3RydWN0IHJlZ3VsYXRvciAqZHNzX2dldF92ZGRzX3NkaSh2b2lkKQoreworCXN0cnVjdCByZWd1bGF0b3IgKnJlZzsKKworCWlmIChjb3JlLnZkZHNfc2RpX3JlZyAhPSBOVUxMKQorCQlyZXR1cm4gY29yZS52ZGRzX3NkaV9yZWc7CisKKwlyZWcgPSByZWd1bGF0b3JfZ2V0KCZjb3JlLnBkZXYtPmRldiwgInZkZHNfc2RpIik7CisJaWYgKCFJU19FUlIocmVnKSkKKwkJY29yZS52ZGRzX3NkaV9yZWcgPSByZWc7CisKKwlyZXR1cm4gcmVnOworfQorCitzdHJ1Y3QgcmVndWxhdG9yICpkc3NfZ2V0X3ZkZGFfZGFjKHZvaWQpCit7CisJc3RydWN0IHJlZ3VsYXRvciAqcmVnOworCisJaWYgKGNvcmUudmRkYV9kYWNfcmVnICE9IE5VTEwpCisJCXJldHVybiBjb3JlLnZkZGFfZGFjX3JlZzsKKworCXJlZyA9IHJlZ3VsYXRvcl9nZXQoJmNvcmUucGRldi0+ZGV2LCAidmRkYV9kYWMiKTsKKwlpZiAoIUlTX0VSUihyZWcpKQorCQljb3JlLnZkZGFfZGFjX3JlZyA9IHJlZzsKKworCXJldHVybiByZWc7Cit9CisKIC8qIERFQlVHRlMgKi8KICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19GUykgJiYgZGVmaW5lZChDT05GSUdfT01BUDJfRFNTX0RFQlVHX1NVUFBPUlQpCiBzdGF0aWMgdm9pZCBkc3NfZGVidWdfZHVtcF9jbG9ja3Moc3RydWN0IHNlcV9maWxlICpzKQpAQCAtMzk3LDEwICs0NDgsMTIgQEAKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJjbGsiLCBTX0lSVUdPLCBkc3NfZGVidWdmc19kaXIsCiAJCQkmZHNzX2RlYnVnX2R1bXBfY2xvY2tzLCAmZHNzX2RlYnVnX2ZvcHMpOwogCisjaWZkZWYgQ09ORklHX09NQVAyX0RTU19DT0xMRUNUX0lSUV9TVEFUUwogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImRpc3BjX2lycSIsIFNfSVJVR08sIGRzc19kZWJ1Z2ZzX2RpciwKIAkJCSZkaXNwY19kdW1wX2lycXMsICZkc3NfZGVidWdfZm9wcyk7CisjZW5kaWYKIAotI2lmZGVmIENPTkZJR19PTUFQMl9EU1NfRFNJCisjaWYgZGVmaW5lZChDT05GSUdfT01BUDJfRFNTX0RTSSkgJiYgZGVmaW5lZChDT05GSUdfT01BUDJfRFNTX0NPTExFQ1RfSVJRX1NUQVRTKQogCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImRzaV9pcnEiLCBTX0lSVUdPLCBkc3NfZGVidWdmc19kaXIsCiAJCQkmZHNpX2R1bXBfaXJxcywgJmRzc19kZWJ1Z19mb3BzKTsKICNlbmRpZgpAQCAtNDczLDcgKzUyNiw3IEBACiAJfQogI2VuZGlmCiAKLQlyID0gZHBpX2luaXQoKTsKKwlyID0gZHBpX2luaXQocGRldik7CiAJaWYgKHIpIHsKIAkJRFNTRVJSKCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBkcGlcbiIpOwogCQlnb3RvIGZhaWwwOwpAQCAtNzE4LDE2ICs3NzEsMTQgQEAKIAogCWRzc19pbml0X2RldmljZShjb3JlLnBkZXYsIGRzc2Rldik7CiAKLQkvKiBza2lwIHRoaXMgaWYgdGhlIGRldmljZSBpcyBiZWhpbmQgYSBjdHJsICovCi0JaWYgKCFkc3NkZXYtPnBhbmVsLmN0cmwpIHsKLQkJZm9yY2UgPSBwZGF0YS0+ZGVmYXVsdF9kZXZpY2UgPT0gZHNzZGV2OwotCQlkc3NfcmVjaGVja19jb25uZWN0aW9ucyhkc3NkZXYsIGZvcmNlKTsKLQl9CisJZm9yY2UgPSBwZGF0YS0+ZGVmYXVsdF9kZXZpY2UgPT0gZHNzZGV2OworCWRzc19yZWNoZWNrX2Nvbm5lY3Rpb25zKGRzc2RldiwgZm9yY2UpOwogCiAJciA9IGRzc2Rydi0+cHJvYmUoZHNzZGV2KTsKIAogCWlmIChyKSB7CiAJCURTU0VSUigiZHJpdmVyIHByb2JlIGZhaWxlZDogJWRcbiIsIHIpOworCQlkc3NfdW5pbml0X2RldmljZShjb3JlLnBkZXYsIGRzc2Rldik7CiAJCXJldHVybiByOwogCX0KIApAQCAtNzYwLDYgKzgxMSwxMyBAQAogCWRzc2RyaXZlci0+ZHJpdmVyLmJ1cyA9ICZkc3NfYnVzX3R5cGU7CiAJZHNzZHJpdmVyLT5kcml2ZXIucHJvYmUgPSBkc3NfZHJpdmVyX3Byb2JlOwogCWRzc2RyaXZlci0+ZHJpdmVyLnJlbW92ZSA9IGRzc19kcml2ZXJfcmVtb3ZlOworCisJaWYgKGRzc2RyaXZlci0+Z2V0X3Jlc29sdXRpb24gPT0gTlVMTCkKKwkJZHNzZHJpdmVyLT5nZXRfcmVzb2x1dGlvbiA9IG9tYXBkc3NfZGVmYXVsdF9nZXRfcmVzb2x1dGlvbjsKKwlpZiAoZHNzZHJpdmVyLT5nZXRfcmVjb21tZW5kZWRfYnBwID09IE5VTEwpCisJCWRzc2RyaXZlci0+Z2V0X3JlY29tbWVuZGVkX2JwcCA9CisJCQlvbWFwZHNzX2RlZmF1bHRfZ2V0X3JlY29tbWVuZGVkX2JwcDsKKwogCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJmRzc2RyaXZlci0+ZHJpdmVyKTsKIH0KIEVYUE9SVF9TWU1CT0wob21hcF9kc3NfcmVnaXN0ZXJfZHJpdmVyKTsKQEAgLTgwOCw4ICs4NjYsNiBAQAogaW50IG9tYXBfZHNzX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7CiAJc3RhdGljIGludCBkZXZfbnVtOwotCXN0YXRpYyBpbnQgcGFuZWxfbnVtOwotCWludCByOwogCiAJV0FSTl9PTighZHNzZGV2LT5kcml2ZXJfbmFtZSk7CiAKQEAgLTgxOCwzNiArODc0LDEyIEBACiAJZHNzZGV2LT5kZXYucGFyZW50ID0gJmRzc19idXM7CiAJZHNzZGV2LT5kZXYucmVsZWFzZSA9IG9tYXBfZHNzX2Rldl9yZWxlYXNlOwogCWRldl9zZXRfbmFtZSgmZHNzZGV2LT5kZXYsICJkaXNwbGF5JWQiLCBkZXZfbnVtKyspOwotCXIgPSBkZXZpY2VfcmVnaXN0ZXIoJmRzc2Rldi0+ZGV2KTsKLQlpZiAocikKLQkJcmV0dXJuIHI7Ci0KLQlpZiAoZHNzZGV2LT5jdHJsLnBhbmVsKSB7Ci0JCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKnBhbmVsID0gZHNzZGV2LT5jdHJsLnBhbmVsOwotCi0JCXBhbmVsLT5wYW5lbC5jdHJsID0gZHNzZGV2OwotCi0JCXJlc2V0X2RldmljZSgmcGFuZWwtPmRldiwgMSk7Ci0JCXBhbmVsLT5kZXYuYnVzID0gJmRzc19idXNfdHlwZTsKLQkJcGFuZWwtPmRldi5wYXJlbnQgPSAmZHNzZGV2LT5kZXY7Ci0JCXBhbmVsLT5kZXYucmVsZWFzZSA9IG9tYXBfZHNzX2Rldl9yZWxlYXNlOwotCQlkZXZfc2V0X25hbWUoJnBhbmVsLT5kZXYsICJwYW5lbCVkIiwgcGFuZWxfbnVtKyspOwotCQlyID0gZGV2aWNlX3JlZ2lzdGVyKCZwYW5lbC0+ZGV2KTsKLQkJaWYgKHIpCi0JCQlyZXR1cm4gcjsKLQl9Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gZGV2aWNlX3JlZ2lzdGVyKCZkc3NkZXYtPmRldik7CiB9CiAKIHZvaWQgb21hcF9kc3NfdW5yZWdpc3Rlcl9kZXZpY2Uoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewogCWRldmljZV91bnJlZ2lzdGVyKCZkc3NkZXYtPmRldik7Ci0KLQlpZiAoZHNzZGV2LT5jdHJsLnBhbmVsKSB7Ci0JCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKnBhbmVsID0gZHNzZGV2LT5jdHJsLnBhbmVsOwotCQlkZXZpY2VfdW5yZWdpc3RlcigmcGFuZWwtPmRldik7Ci0JfQogfQogCiAvKiBCVVMgKi8KQEAgLTkwMSw2ICs5MzMsMjEgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IG9tYXBfZHNzX2V4aXQodm9pZCkKIHsKKwlpZiAoY29yZS52ZGRzX2RzaV9yZWcgIT0gTlVMTCkgeworCQlyZWd1bGF0b3JfcHV0KGNvcmUudmRkc19kc2lfcmVnKTsKKwkJY29yZS52ZGRzX2RzaV9yZWcgPSBOVUxMOworCX0KKworCWlmIChjb3JlLnZkZHNfc2RpX3JlZyAhPSBOVUxMKSB7CisJCXJlZ3VsYXRvcl9wdXQoY29yZS52ZGRzX3NkaV9yZWcpOworCQljb3JlLnZkZHNfc2RpX3JlZyA9IE5VTEw7CisJfQorCisJaWYgKGNvcmUudmRkYV9kYWNfcmVnICE9IE5VTEwpIHsKKwkJcmVndWxhdG9yX3B1dChjb3JlLnZkZGFfZGFjX3JlZyk7CisJCWNvcmUudmRkYV9kYWNfcmVnID0gTlVMTDsKKwl9CisKIAlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb21hcF9kc3NfZHJpdmVyKTsKIAogCW9tYXBfZHNzX2J1c191bnJlZ2lzdGVyKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kaXNwYy5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZGlzcGMuYwppbmRleCBkZThiZmJhLi5lNzc3ZTM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kaXNwYy5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rpc3BjLmMKQEAgLTE3MjUsNyArMTcyNSw3IEBACiAJUkVHX0ZMRF9NT0QoRElTUENfQ09OVFJPTCwgZW5hYmxlID8gMSA6IDAsIDAsIDApOwogfQogCi12b2lkIGRpc3BjX2VuYWJsZV9sY2Rfb3V0KGJvb2wgZW5hYmxlKQorc3RhdGljIHZvaWQgZGlzcGNfZW5hYmxlX2xjZF9vdXQoYm9vbCBlbmFibGUpCiB7CiAJc3RydWN0IGNvbXBsZXRpb24gZnJhbWVfZG9uZV9jb21wbGV0aW9uOwogCWJvb2wgaXNfb247CkBAIC0xNzcyLDcgKzE3NzIsNyBAQAogCVJFR19GTERfTU9EKERJU1BDX0NPTlRST0wsIGVuYWJsZSA/IDEgOiAwLCAxLCAxKTsKIH0KIAotdm9pZCBkaXNwY19lbmFibGVfZGlnaXRfb3V0KGJvb2wgZW5hYmxlKQorc3RhdGljIHZvaWQgZGlzcGNfZW5hYmxlX2RpZ2l0X291dChib29sIGVuYWJsZSkKIHsKIAlzdHJ1Y3QgY29tcGxldGlvbiBmcmFtZV9kb25lX2NvbXBsZXRpb247CiAJaW50IHI7CkBAIC0xODM2LDYgKzE4MzYsMjYgQEAKIAllbmFibGVfY2xvY2tzKDApOwogfQogCitib29sIGRpc3BjX2lzX2NoYW5uZWxfZW5hYmxlZChlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsKQoreworCWlmIChjaGFubmVsID09IE9NQVBfRFNTX0NIQU5ORUxfTENEKQorCQlyZXR1cm4gISFSRUdfR0VUKERJU1BDX0NPTlRST0wsIDAsIDApOworCWVsc2UgaWYgKGNoYW5uZWwgPT0gT01BUF9EU1NfQ0hBTk5FTF9ESUdJVCkKKwkJcmV0dXJuICEhUkVHX0dFVChESVNQQ19DT05UUk9MLCAxLCAxKTsKKwllbHNlCisJCUJVRygpOworfQorCit2b2lkIGRpc3BjX2VuYWJsZV9jaGFubmVsKGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwsIGJvb2wgZW5hYmxlKQoreworCWlmIChjaGFubmVsID09IE9NQVBfRFNTX0NIQU5ORUxfTENEKQorCQlkaXNwY19lbmFibGVfbGNkX291dChlbmFibGUpOworCWVsc2UgaWYgKGNoYW5uZWwgPT0gT01BUF9EU1NfQ0hBTk5FTF9ESUdJVCkKKwkJZGlzcGNfZW5hYmxlX2RpZ2l0X291dChlbmFibGUpOworCWVsc2UKKwkJQlVHKCk7Cit9CisKIHZvaWQgZGlzcGNfbGNkX2VuYWJsZV9zaWduYWxfcG9sYXJpdHkoYm9vbCBhY3RfaGlnaCkKIHsKIAllbmFibGVfY2xvY2tzKDEpOwpAQCAtMjE5OCw3ICsyMjE4LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nIHIgPSAwOwogCi0JaWYgKGRzc19nZXRfZGlzcGNfY2xrX3NvdXJjZSgpID09IDApCisJaWYgKGRzc19nZXRfZGlzcGNfY2xrX3NvdXJjZSgpID09IERTU19TUkNfRFNTMV9BTFdPTl9GQ0xLKQogCQlyID0gZHNzX2Nsa19nZXRfcmF0ZShEU1NfQ0xLX0ZDSzEpOwogCWVsc2UKICNpZmRlZiBDT05GSUdfT01BUDJfRFNTX0RTSQpAQCAtMjI1MSw3ICsyMjcxLDcgQEAKIAlzZXFfcHJpbnRmKHMsICItIERJU1BDIC1cbiIpOwogCiAJc2VxX3ByaW50ZihzLCAiZGlzcGMgZmNsayBzb3VyY2UgPSAlc1xuIiwKLQkJCWRzc19nZXRfZGlzcGNfY2xrX3NvdXJjZSgpID09IDAgPworCQkJZHNzX2dldF9kaXNwY19jbGtfc291cmNlKCkgPT0gRFNTX1NSQ19EU1MxX0FMV09OX0ZDTEsgPwogCQkJImRzczFfYWx3b25fZmNsayIgOiAiZHNpMV9wbGxfZmNsayIpOwogCiAJc2VxX3ByaW50ZihzLCAiZmNrXHRcdCUtMTZsdVxuIiwgZGlzcGNfZmNsa19yYXRlKCkpOwpAQCAtMjMwMSw4ICsyMzIxLDYgQEAKIAlQSVMoV0FLRVVQKTsKICN1bmRlZiBQSVMKIH0KLSNlbHNlCi12b2lkIGRpc3BjX2R1bXBfaXJxcyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMpIHsgfQogI2VuZGlmCiAKIHZvaWQgZGlzcGNfZHVtcF9yZWdzKHN0cnVjdCBzZXFfZmlsZSAqcykKQEAgLTI4NTQsMTIgKzI4NzIsMTMgQEAKIAkJCQltYW5hZ2VyID0gbWdyOwogCQkJCWVuYWJsZSA9IG1nci0+ZGV2aWNlLT5zdGF0ZSA9PQogCQkJCQkJT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7Ci0JCQkJbWdyLT5kZXZpY2UtPmRpc2FibGUobWdyLT5kZXZpY2UpOworCQkJCW1nci0+ZGV2aWNlLT5kcml2ZXItPmRpc2FibGUobWdyLT5kZXZpY2UpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAKIAkJaWYgKG1hbmFnZXIpIHsKKwkJCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiA9IG1hbmFnZXItPmRldmljZTsKIAkJCWZvciAoaSA9IDA7IGkgPCBvbWFwX2Rzc19nZXRfbnVtX292ZXJsYXlzKCk7ICsraSkgewogCQkJCXN0cnVjdCBvbWFwX292ZXJsYXkgKm92bDsKIAkJCQlvdmwgPSBvbWFwX2Rzc19nZXRfb3ZlcmxheShpKTsKQEAgLTI4NzQsNyArMjg5Myw3IEBACiAJCQlkaXNwY19nbyhtYW5hZ2VyLT5pZCk7CiAJCQltZGVsYXkoNTApOwogCQkJaWYgKGVuYWJsZSkKLQkJCQltYW5hZ2VyLT5kZXZpY2UtPmVuYWJsZShtYW5hZ2VyLT5kZXZpY2UpOworCQkJCWRzc2Rldi0+ZHJpdmVyLT5lbmFibGUoZHNzZGV2KTsKIAkJfQogCX0KIApAQCAtMjg5MiwxMiArMjkxMSwxMyBAQAogCQkJCW1hbmFnZXIgPSBtZ3I7CiAJCQkJZW5hYmxlID0gbWdyLT5kZXZpY2UtPnN0YXRlID09CiAJCQkJCQlPTUFQX0RTU19ESVNQTEFZX0FDVElWRTsKLQkJCQltZ3ItPmRldmljZS0+ZGlzYWJsZShtZ3ItPmRldmljZSk7CisJCQkJbWdyLT5kZXZpY2UtPmRyaXZlci0+ZGlzYWJsZShtZ3ItPmRldmljZSk7CiAJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAogCQlpZiAobWFuYWdlcikgeworCQkJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2ID0gbWFuYWdlci0+ZGV2aWNlOwogCQkJZm9yIChpID0gMDsgaSA8IG9tYXBfZHNzX2dldF9udW1fb3ZlcmxheXMoKTsgKytpKSB7CiAJCQkJc3RydWN0IG9tYXBfb3ZlcmxheSAqb3ZsOwogCQkJCW92bCA9IG9tYXBfZHNzX2dldF9vdmVybGF5KGkpOwpAQCAtMjkxMiw3ICsyOTMyLDcgQEAKIAkJCWRpc3BjX2dvKG1hbmFnZXItPmlkKTsKIAkJCW1kZWxheSg1MCk7CiAJCQlpZiAoZW5hYmxlKQotCQkJCW1hbmFnZXItPmRldmljZS0+ZW5hYmxlKG1hbmFnZXItPmRldmljZSk7CisJCQkJZHNzZGV2LT5kcml2ZXItPmVuYWJsZShkc3NkZXYpOwogCQl9CiAJfQogCkBAIC0yOTIzLDcgKzI5NDMsNyBAQAogCQkJbWdyID0gb21hcF9kc3NfZ2V0X292ZXJsYXlfbWFuYWdlcihpKTsKIAogCQkJaWYgKG1nci0+Y2FwcyAmIE9NQVBfRFNTX09WTF9DQVBfRElTUEMpCi0JCQkJbWdyLT5kZXZpY2UtPmRpc2FibGUobWdyLT5kZXZpY2UpOworCQkJCW1nci0+ZGV2aWNlLT5kcml2ZXItPmRpc2FibGUobWdyLT5kZXZpY2UpOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kaXNwbGF5LmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kaXNwbGF5LmMKaW5kZXggM2I5MmI4NC4uNmE3NGVhMSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZGlzcGxheS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rpc3BsYXkuYwpAQCAtNTMsMTEgKzUzLDExIEBACiAKIAlpZiAoZW5hYmxlZCAhPSAoZHNzZGV2LT5zdGF0ZSAhPSBPTUFQX0RTU19ESVNQTEFZX0RJU0FCTEVEKSkgewogCQlpZiAoZW5hYmxlZCkgewotCQkJciA9IGRzc2Rldi0+ZW5hYmxlKGRzc2Rldik7CisJCQlyID0gZHNzZGV2LT5kcml2ZXItPmVuYWJsZShkc3NkZXYpOwogCQkJaWYgKHIpCiAJCQkJcmV0dXJuIHI7CiAJCX0gZWxzZSB7Ci0JCQlkc3NkZXYtPmRpc2FibGUoZHNzZGV2KTsKKwkJCWRzc2Rldi0+ZHJpdmVyLT5kaXNhYmxlKGRzc2Rldik7CiAJCX0KIAl9CiAKQEAgLTY5LDggKzY5LDggQEAKIHsKIAlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYgPSB0b19kc3NfZGV2aWNlKGRldik7CiAJZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSBtb2RlID0gT01BUF9EU1NfVVBEQVRFX0FVVE87Ci0JaWYgKGRzc2Rldi0+Z2V0X3VwZGF0ZV9tb2RlKQotCQltb2RlID0gZHNzZGV2LT5nZXRfdXBkYXRlX21vZGUoZHNzZGV2KTsKKwlpZiAoZHNzZGV2LT5kcml2ZXItPmdldF91cGRhdGVfbW9kZSkKKwkJbW9kZSA9IGRzc2Rldi0+ZHJpdmVyLT5nZXRfdXBkYXRlX21vZGUoZHNzZGV2KTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwgbW9kZSk7CiB9CiAKQEAgLTk0LDcgKzk0LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JciA9IGRzc2Rldi0+c2V0X3VwZGF0ZV9tb2RlKGRzc2RldiwgbW9kZSk7CisJciA9IGRzc2Rldi0+ZHJpdmVyLT5zZXRfdXBkYXRlX21vZGUoZHNzZGV2LCBtb2RlKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKQEAgLTEwNiw3ICsxMDYsOCBAQAogewogCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiA9IHRvX2Rzc19kZXZpY2UoZGV2KTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIlZFxuIiwKLQkJCWRzc2Rldi0+Z2V0X3RlID8gZHNzZGV2LT5nZXRfdGUoZHNzZGV2KSA6IDApOworCQkJZHNzZGV2LT5kcml2ZXItPmdldF90ZSA/CisJCQlkc3NkZXYtPmRyaXZlci0+Z2V0X3RlKGRzc2RldikgOiAwKTsKIH0KIAogc3RhdGljIHNzaXplX3QgZGlzcGxheV90ZWFyX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwKQEAgLTExNiwxMiArMTE3LDEyIEBACiAJdW5zaWduZWQgbG9uZyB0ZTsKIAlpbnQgcjsKIAotCWlmICghZHNzZGV2LT5lbmFibGVfdGUgfHwgIWRzc2Rldi0+Z2V0X3RlKQorCWlmICghZHNzZGV2LT5kcml2ZXItPmVuYWJsZV90ZSB8fCAhZHNzZGV2LT5kcml2ZXItPmdldF90ZSkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAl0ZSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CiAKLQlyID0gZHNzZGV2LT5lbmFibGVfdGUoZHNzZGV2LCB0ZSk7CisJciA9IGRzc2Rldi0+ZHJpdmVyLT5lbmFibGVfdGUoZHNzZGV2LCB0ZSk7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCkBAIC0xMzQsMTAgKzEzNSwxMCBAQAogCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiA9IHRvX2Rzc19kZXZpY2UoZGV2KTsKIAlzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzIHQ7CiAKLQlpZiAoIWRzc2Rldi0+Z2V0X3RpbWluZ3MpCisJaWYgKCFkc3NkZXYtPmRyaXZlci0+Z2V0X3RpbWluZ3MpCiAJCXJldHVybiAtRU5PRU5UOwogCi0JZHNzZGV2LT5nZXRfdGltaW5ncyhkc3NkZXYsICZ0KTsKKwlkc3NkZXYtPmRyaXZlci0+Z2V0X3RpbWluZ3MoZHNzZGV2LCAmdCk7CiAKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldSwldS8ldS8ldS8ldSwldS8ldS8ldS8ldVxuIiwKIAkJCXQucGl4ZWxfY2xvY2ssCkBAIC0xNTIsNyArMTUzLDcgQEAKIAlzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzIHQ7CiAJaW50IHIsIGZvdW5kOwogCi0JaWYgKCFkc3NkZXYtPnNldF90aW1pbmdzIHx8ICFkc3NkZXYtPmNoZWNrX3RpbWluZ3MpCisJaWYgKCFkc3NkZXYtPmRyaXZlci0+c2V0X3RpbWluZ3MgfHwgIWRzc2Rldi0+ZHJpdmVyLT5jaGVja190aW1pbmdzKQogCQlyZXR1cm4gLUVOT0VOVDsKIAogCWZvdW5kID0gMDsKQEAgLTE3MSwxMSArMTcyLDExIEBACiAJCQkJJnQueV9yZXMsICZ0LnZmcCwgJnQudmJwLCAmdC52c3cpICE9IDkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JciA9IGRzc2Rldi0+Y2hlY2tfdGltaW5ncyhkc3NkZXYsICZ0KTsKKwlyID0gZHNzZGV2LT5kcml2ZXItPmNoZWNrX3RpbWluZ3MoZHNzZGV2LCAmdCk7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCi0JZHNzZGV2LT5zZXRfdGltaW5ncyhkc3NkZXYsICZ0KTsKKwlkc3NkZXYtPmRyaXZlci0+c2V0X3RpbWluZ3MoZHNzZGV2LCAmdCk7CiAKIAlyZXR1cm4gc2l6ZTsKIH0KQEAgLTE4NSw5ICsxODYsOSBAQAogewogCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiA9IHRvX2Rzc19kZXZpY2UoZGV2KTsKIAlpbnQgcm90YXRlOwotCWlmICghZHNzZGV2LT5nZXRfcm90YXRlKQorCWlmICghZHNzZGV2LT5kcml2ZXItPmdldF9yb3RhdGUpCiAJCXJldHVybiAtRU5PRU5UOwotCXJvdGF0ZSA9IGRzc2Rldi0+Z2V0X3JvdGF0ZShkc3NkZXYpOworCXJvdGF0ZSA9IGRzc2Rldi0+ZHJpdmVyLT5nZXRfcm90YXRlKGRzc2Rldik7CiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsIHJvdGF0ZSk7CiB9CiAKQEAgLTE5OCwxMiArMTk5LDEyIEBACiAJdW5zaWduZWQgbG9uZyByb3Q7CiAJaW50IHI7CiAKLQlpZiAoIWRzc2Rldi0+c2V0X3JvdGF0ZSB8fCAhZHNzZGV2LT5nZXRfcm90YXRlKQorCWlmICghZHNzZGV2LT5kcml2ZXItPnNldF9yb3RhdGUgfHwgIWRzc2Rldi0+ZHJpdmVyLT5nZXRfcm90YXRlKQogCQlyZXR1cm4gLUVOT0VOVDsKIAogCXJvdCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMCk7CiAKLQlyID0gZHNzZGV2LT5zZXRfcm90YXRlKGRzc2Rldiwgcm90KTsKKwlyID0gZHNzZGV2LT5kcml2ZXItPnNldF9yb3RhdGUoZHNzZGV2LCByb3QpOwogCWlmIChyKQogCQlyZXR1cm4gcjsKIApAQCAtMjE1LDkgKzIxNiw5IEBACiB7CiAJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2ID0gdG9fZHNzX2RldmljZShkZXYpOwogCWludCBtaXJyb3I7Ci0JaWYgKCFkc3NkZXYtPmdldF9taXJyb3IpCisJaWYgKCFkc3NkZXYtPmRyaXZlci0+Z2V0X21pcnJvcikKIAkJcmV0dXJuIC1FTk9FTlQ7Ci0JbWlycm9yID0gZHNzZGV2LT5nZXRfbWlycm9yKGRzc2Rldik7CisJbWlycm9yID0gZHNzZGV2LT5kcml2ZXItPmdldF9taXJyb3IoZHNzZGV2KTsKIAlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwgbWlycm9yKTsKIH0KIApAQCAtMjI4LDEyICsyMjksMTIgQEAKIAl1bnNpZ25lZCBsb25nIG1pcnJvcjsKIAlpbnQgcjsKIAotCWlmICghZHNzZGV2LT5zZXRfbWlycm9yIHx8ICFkc3NkZXYtPmdldF9taXJyb3IpCisJaWYgKCFkc3NkZXYtPmRyaXZlci0+c2V0X21pcnJvciB8fCAhZHNzZGV2LT5kcml2ZXItPmdldF9taXJyb3IpCiAJCXJldHVybiAtRU5PRU5UOwogCiAJbWlycm9yID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAwKTsKIAotCXIgPSBkc3NkZXYtPnNldF9taXJyb3IoZHNzZGV2LCBtaXJyb3IpOworCXIgPSBkc3NkZXYtPmRyaXZlci0+c2V0X21pcnJvcihkc3NkZXYsIG1pcnJvcik7CiAJaWYgKHIpCiAJCXJldHVybiByOwogCkBAIC0yNDYsMTAgKzI0NywxMCBAQAogCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiA9IHRvX2Rzc19kZXZpY2UoZGV2KTsKIAl1bnNpZ25lZCBpbnQgd3NzOwogCi0JaWYgKCFkc3NkZXYtPmdldF93c3MpCisJaWYgKCFkc3NkZXYtPmRyaXZlci0+Z2V0X3dzcykKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKLQl3c3MgPSBkc3NkZXYtPmdldF93c3MoZHNzZGV2KTsKKwl3c3MgPSBkc3NkZXYtPmRyaXZlci0+Z2V0X3dzcyhkc3NkZXYpOwogCiAJcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiMHglMDV4XG4iLCB3c3MpOwogfQpAQCAtMjYxLDcgKzI2Miw3IEBACiAJdW5zaWduZWQgbG9uZyB3c3M7CiAJaW50IHI7CiAKLQlpZiAoIWRzc2Rldi0+Z2V0X3dzcyB8fCAhZHNzZGV2LT5zZXRfd3NzKQorCWlmICghZHNzZGV2LT5kcml2ZXItPmdldF93c3MgfHwgIWRzc2Rldi0+ZHJpdmVyLT5zZXRfd3NzKQogCQlyZXR1cm4gLUVOT0VOVDsKIAogCWlmIChzdHJpY3Rfc3RydG91bChidWYsIDAsICZ3c3MpKQpAQCAtMjcwLDcgKzI3MSw3IEBACiAJaWYgKHdzcyA+IDB4ZmZmZmYpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JciA9IGRzc2Rldi0+c2V0X3dzcyhkc3NkZXYsIHdzcyk7CisJciA9IGRzc2Rldi0+ZHJpdmVyLT5zZXRfd3NzKGRzc2Rldiwgd3NzKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKQEAgLTMwMywxMiArMzA0LDEzIEBACiAJTlVMTAogfTsKIAotc3RhdGljIHZvaWQgZGVmYXVsdF9nZXRfcmVzb2x1dGlvbihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCit2b2lkIG9tYXBkc3NfZGVmYXVsdF9nZXRfcmVzb2x1dGlvbihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCiAJCQl1MTYgKnhyZXMsIHUxNiAqeXJlcykKIHsKIAkqeHJlcyA9IGRzc2Rldi0+cGFuZWwudGltaW5ncy54X3JlczsKIAkqeXJlcyA9IGRzc2Rldi0+cGFuZWwudGltaW5ncy55X3JlczsKIH0KK0VYUE9SVF9TWU1CT0wob21hcGRzc19kZWZhdWx0X2dldF9yZXNvbHV0aW9uKTsKIAogdm9pZCBkZWZhdWx0X2dldF9vdmVybGF5X2ZpZm9fdGhyZXNob2xkcyhlbnVtIG9tYXBfcGxhbmUgcGxhbmUsCiAJCXUzMiBmaWZvX3NpemUsIGVudW0gb21hcF9idXJzdF9zaXplICpidXJzdF9zaXplLApAQCAtMzIzLDI0ICszMjUsOCBAQAogCSpmaWZvX2xvdyA9IGZpZm9fc2l6ZSAtIGJ1cnN0X3NpemVfYnl0ZXM7CiB9CiAKLXN0YXRpYyBpbnQgZGVmYXVsdF93YWl0X3ZzeW5jKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK2ludCBvbWFwZHNzX2RlZmF1bHRfZ2V0X3JlY29tbWVuZGVkX2JwcChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gbXNlY3NfdG9famlmZmllcyg1MDApOwotCXUzMiBpcnE7Ci0KLQlpZiAoZHNzZGV2LT50eXBlID09IE9NQVBfRElTUExBWV9UWVBFX1ZFTkMpCi0JCWlycSA9IERJU1BDX0lSUV9FVlNZTkNfT0REOwotCWVsc2UKLQkJaXJxID0gRElTUENfSVJRX1ZTWU5DOwotCi0JcmV0dXJuIG9tYXBfZGlzcGNfd2FpdF9mb3JfaXJxX2ludGVycnVwdGlibGVfdGltZW91dChpcnEsIHRpbWVvdXQpOwotfQotCi1zdGF0aWMgaW50IGRlZmF1bHRfZ2V0X3JlY29tbWVuZGVkX2JwcChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0JaWYgKGRzc2Rldi0+cGFuZWwucmVjb21tZW5kZWRfYnBwKQotCQlyZXR1cm4gZHNzZGV2LT5wYW5lbC5yZWNvbW1lbmRlZF9icHA7Ci0KIAlzd2l0Y2ggKGRzc2Rldi0+dHlwZSkgewogCWNhc2UgT01BUF9ESVNQTEFZX1RZUEVfRFBJOgogCQlpZiAoZHNzZGV2LT5waHkuZHBpLmRhdGFfbGluZXMgPT0gMjQpCkBAIC0zNjIsNiArMzQ4LDcgQEAKIAkJQlVHKCk7CiAJfQogfQorRVhQT1JUX1NZTUJPTChvbWFwZHNzX2RlZmF1bHRfZ2V0X3JlY29tbWVuZGVkX2JwcCk7CiAKIC8qIENoZWNrcyBpZiByZXBsaWNhdGlvbiBsb2dpYyBzaG91bGQgYmUgdXNlZC4gT25seSB1c2UgZm9yIGFjdGl2ZSBtYXRyaXgsCiAgKiB3aGVuIG92ZXJsYXkgaXMgaW4gUkdCMTJVIG9yIFJHQjE2IG1vZGUsIGFuZCBMQ0QgaW50ZXJmYWNlIGlzCkBAIC00MjUsMTAgKzQxMiw2IEBACiAJCXJldHVybjsKIAl9CiAKLQlkc3NkZXYtPmdldF9yZXNvbHV0aW9uID0gZGVmYXVsdF9nZXRfcmVzb2x1dGlvbjsKLQlkc3NkZXYtPmdldF9yZWNvbW1lbmRlZF9icHAgPSBkZWZhdWx0X2dldF9yZWNvbW1lbmRlZF9icHA7Ci0JZHNzZGV2LT53YWl0X3ZzeW5jID0gZGVmYXVsdF93YWl0X3ZzeW5jOwotCiAJc3dpdGNoIChkc3NkZXYtPnR5cGUpIHsKIAljYXNlIE9NQVBfRElTUExBWV9UWVBFX0RQSToKIAkJciA9IGRwaV9pbml0X2Rpc3BsYXkoZHNzZGV2KTsKQEAgLTUwMiwxMyArNDg1LDEzIEBACiAJCXJldHVybiAwOwogCX0KIAotCWlmICghZHNzZGV2LT5zdXNwZW5kKSB7CisJaWYgKCFkc3NkZXYtPmRyaXZlci0+c3VzcGVuZCkgewogCQlEU1NFUlIoImRpc3BsYXkgJyVzJyBkb2Vzbid0IGltcGxlbWVudCBzdXNwZW5kXG4iLAogCQkJCWRzc2Rldi0+bmFtZSk7CiAJCXJldHVybiAtRU5PU1lTOwogCX0KIAotCXIgPSBkc3NkZXYtPnN1c3BlbmQoZHNzZGV2KTsKKwlyID0gZHNzZGV2LT5kcml2ZXItPnN1c3BlbmQoZHNzZGV2KTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKQEAgLTUzNyw4ICs1MjAsOCBAQAogCWludCByOwogCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiA9IHRvX2Rzc19kZXZpY2UoZGV2KTsKIAotCWlmIChkc3NkZXYtPmFjdGl2YXRlX2FmdGVyX3Jlc3VtZSAmJiBkc3NkZXYtPnJlc3VtZSkgewotCQlyID0gZHNzZGV2LT5yZXN1bWUoZHNzZGV2KTsKKwlpZiAoZHNzZGV2LT5hY3RpdmF0ZV9hZnRlcl9yZXN1bWUgJiYgZHNzZGV2LT5kcml2ZXItPnJlc3VtZSkgeworCQlyID0gZHNzZGV2LT5kcml2ZXItPnJlc3VtZShkc3NkZXYpOwogCQlpZiAocikKIAkJCXJldHVybiByOwogCX0KQEAgLTU1OCw3ICs1NDEsNyBAQAogc3RhdGljIGludCBkc3NfZGlzYWJsZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiA9IHRvX2Rzc19kZXZpY2UoZGV2KTsKLQlkc3NkZXYtPmRpc2FibGUoZHNzZGV2KTsKKwlkc3NkZXYtPmRyaXZlci0+ZGlzYWJsZShkc3NkZXYpOwogCXJldHVybiAwOwogfQogCkBAIC01OTEsMTAgKzU3NCw2IEBACiAKIAlpbnQgbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpkYXRhKQogCXsKLQkJLyogc2tpcCBwYW5lbHMgY29ubmVjdGVkIHRvIGNvbnRyb2xsZXJzICovCi0JCWlmICh0b19kc3NfZGV2aWNlKGRldiktPnBhbmVsLmN0cmwpCi0JCQlyZXR1cm4gMDsKLQogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTYyNiw0NSArNjA1LDIxIEBACiAKIGludCBvbWFwX2Rzc19zdGFydF9kZXZpY2Uoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewotCWludCByOwotCiAJaWYgKCFkc3NkZXYtPmRyaXZlcikgewogCQlEU1NEQkcoIm5vIGRyaXZlclxuIik7Ci0JCXIgPSAtRU5PREVWOwotCQlnb3RvIGVycjA7Ci0JfQotCi0JaWYgKGRzc2Rldi0+Y3RybC5wYW5lbCAmJiAhZHNzZGV2LT5jdHJsLnBhbmVsLT5kcml2ZXIpIHsKLQkJRFNTREJHKCJubyBwYW5lbCBkcml2ZXJcbiIpOwotCQlyID0gLUVOT0RFVjsKLQkJZ290byBlcnIwOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGRzc2Rldi0+ZGV2LmRyaXZlci0+b3duZXIpKSB7Ci0JCXIgPSAtRU5PREVWOwotCQlnb3RvIGVycjA7Ci0JfQotCi0JaWYgKGRzc2Rldi0+Y3RybC5wYW5lbCkgewotCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KGRzc2Rldi0+Y3RybC5wYW5lbC0+ZGV2LmRyaXZlci0+b3duZXIpKSB7Ci0JCQlyID0gLUVOT0RFVjsKLQkJCWdvdG8gZXJyMTsKLQkJfQorCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKIAlyZXR1cm4gMDsKLWVycjE6Ci0JbW9kdWxlX3B1dChkc3NkZXYtPmRldi5kcml2ZXItPm93bmVyKTsKLWVycjA6Ci0JcmV0dXJuIHI7CiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfZHNzX3N0YXJ0X2RldmljZSk7CiAKIHZvaWQgb21hcF9kc3Nfc3RvcF9kZXZpY2Uoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewotCWlmIChkc3NkZXYtPmN0cmwucGFuZWwpCi0JCW1vZHVsZV9wdXQoZHNzZGV2LT5jdHJsLnBhbmVsLT5kZXYuZHJpdmVyLT5vd25lcik7Ci0KIAltb2R1bGVfcHV0KGRzc2Rldi0+ZGV2LmRyaXZlci0+b3duZXIpOwogfQogRVhQT1JUX1NZTUJPTChvbWFwX2Rzc19zdG9wX2RldmljZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kcGkuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2RwaS5jCmluZGV4IDJkNzEwMzEuLjk2MGU5NzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2RwaS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2RwaS5jCkBAIC0yNSw3ICsyNSwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KIAogI2luY2x1ZGUgPHBsYXQvZGlzcGxheS5oPgogI2luY2x1ZGUgPHBsYXQvY3B1Lmg+CkBAIC0zMyw3ICszNiw3IEBACiAjaW5jbHVkZSAiZHNzLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgewotCWludCB1cGRhdGVfZW5hYmxlZDsKKwlzdHJ1Y3QgcmVndWxhdG9yICp2ZGRzX2RzaV9yZWc7CiB9IGRwaTsKIAogI2lmZGVmIENPTkZJR19PTUFQMl9EU1NfVVNFX0RTSV9QTEwKQEAgLTUzLDcgKzU2LDcgQEAKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKLQlkc3Nfc2VsZWN0X2Nsa19zb3VyY2UoMCwgMSk7CisJZHNzX3NlbGVjdF9kaXNwY19jbGtfc291cmNlKERTU19TUkNfRFNJMV9QTExfRkNMSyk7CiAKIAlyID0gZGlzcGNfc2V0X2Nsb2NrX2RpdigmZGlzcGNfY2luZm8pOwogCWlmIChyKQpAQCAtMTUwLDcgKzE1Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHBpX2Rpc3BsYXlfZW5hYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK2ludCBvbWFwZHNzX2RwaV9kaXNwbGF5X2VuYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7CiAJaW50IHI7CiAKQEAgLTE2MCwxMCArMTYzLDEwIEBACiAJCWdvdG8gZXJyMDsKIAl9CiAKLQlpZiAoZHNzZGV2LT5zdGF0ZSAhPSBPTUFQX0RTU19ESVNQTEFZX0RJU0FCTEVEKSB7Ci0JCURTU0VSUigiZGlzcGxheSBhbHJlYWR5IGVuYWJsZWRcbiIpOwotCQlyID0gLUVJTlZBTDsKLQkJZ290byBlcnIxOworCWlmIChjcHVfaXNfb21hcDM0eHgoKSkgeworCQlyID0gcmVndWxhdG9yX2VuYWJsZShkcGkudmRkc19kc2lfcmVnKTsKKwkJaWYgKHIpCisJCQlnb3RvIGVycjE7CiAJfQogCiAJZHNzX2Nsa19lbmFibGUoRFNTX0NMS19JQ0sgfCBEU1NfQ0xLX0ZDSzEpOwpAQCAtMTg0LDE4ICsxODcsMTAgQEAKIAogCW1kZWxheSgyKTsKIAotCWRpc3BjX2VuYWJsZV9sY2Rfb3V0KDEpOwotCi0JciA9IGRzc2Rldi0+ZHJpdmVyLT5lbmFibGUoZHNzZGV2KTsKLQlpZiAocikKLQkJZ290byBlcnI1OwotCi0JZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFOworCWRzc2Rldi0+bWFuYWdlci0+ZW5hYmxlKGRzc2Rldi0+bWFuYWdlcik7CiAKIAlyZXR1cm4gMDsKIAotZXJyNToKLQlkaXNwY19lbmFibGVfbGNkX291dCgwKTsKIGVycjQ6CiAjaWZkZWYgQ09ORklHX09NQVAyX0RTU19VU0VfRFNJX1BMTAogCWRzaV9wbGxfdW5pbml0KCk7CkBAIC0yMDQsNzggKzE5OSwzNSBAQAogI2VuZGlmCiBlcnIyOgogCWRzc19jbGtfZGlzYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLMSk7CisJaWYgKGNwdV9pc19vbWFwMzR4eCgpKQorCQlyZWd1bGF0b3JfZGlzYWJsZShkcGkudmRkc19kc2lfcmVnKTsKIGVycjE6CiAJb21hcF9kc3Nfc3RvcF9kZXZpY2UoZHNzZGV2KTsKIGVycjA6CiAJcmV0dXJuIHI7CiB9CitFWFBPUlRfU1lNQk9MKG9tYXBkc3NfZHBpX2Rpc3BsYXlfZW5hYmxlKTsKIAotc3RhdGljIGludCBkcGlfZGlzcGxheV9yZXN1bWUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKLQotc3RhdGljIHZvaWQgZHBpX2Rpc3BsYXlfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit2b2lkIG9tYXBkc3NfZHBpX2Rpc3BsYXlfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0JaWYgKGRzc2Rldi0+c3RhdGUgPT0gT01BUF9EU1NfRElTUExBWV9ESVNBQkxFRCkKLQkJcmV0dXJuOwotCi0JaWYgKGRzc2Rldi0+c3RhdGUgPT0gT01BUF9EU1NfRElTUExBWV9TVVNQRU5ERUQpCi0JCWRwaV9kaXNwbGF5X3Jlc3VtZShkc3NkZXYpOwotCi0JZHNzZGV2LT5kcml2ZXItPmRpc2FibGUoZHNzZGV2KTsKLQotCWRpc3BjX2VuYWJsZV9sY2Rfb3V0KDApOworCWRzc2Rldi0+bWFuYWdlci0+ZGlzYWJsZShkc3NkZXYtPm1hbmFnZXIpOwogCiAjaWZkZWYgQ09ORklHX09NQVAyX0RTU19VU0VfRFNJX1BMTAotCWRzc19zZWxlY3RfY2xrX3NvdXJjZSgwLCAwKTsKKwlkc3Nfc2VsZWN0X2Rpc3BjX2Nsa19zb3VyY2UoRFNTX1NSQ19EU1MxX0FMV09OX0ZDTEspOwogCWRzaV9wbGxfdW5pbml0KCk7CiAJZHNzX2Nsa19kaXNhYmxlKERTU19DTEtfRkNLMik7CiAjZW5kaWYKIAogCWRzc19jbGtfZGlzYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLMSk7CiAKLQlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9ESVNBQkxFRDsKKwlpZiAoY3B1X2lzX29tYXAzNHh4KCkpCisJCXJlZ3VsYXRvcl9kaXNhYmxlKGRwaS52ZGRzX2RzaV9yZWcpOwogCiAJb21hcF9kc3Nfc3RvcF9kZXZpY2UoZHNzZGV2KTsKIH0KK0VYUE9SVF9TWU1CT0wob21hcGRzc19kcGlfZGlzcGxheV9kaXNhYmxlKTsKIAotc3RhdGljIGludCBkcGlfZGlzcGxheV9zdXNwZW5kKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlpZiAoZHNzZGV2LT5zdGF0ZSAhPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlEU1NEQkcoImRwaV9kaXNwbGF5X3N1c3BlbmRcbiIpOwotCi0JaWYgKGRzc2Rldi0+ZHJpdmVyLT5zdXNwZW5kKQotCQlkc3NkZXYtPmRyaXZlci0+c3VzcGVuZChkc3NkZXYpOwotCi0JZGlzcGNfZW5hYmxlX2xjZF9vdXQoMCk7Ci0KLQlkc3NfY2xrX2Rpc2FibGUoRFNTX0NMS19JQ0sgfCBEU1NfQ0xLX0ZDSzEpOwotCi0JZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfU1VTUEVOREVEOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZHBpX2Rpc3BsYXlfcmVzdW1lKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlpZiAoZHNzZGV2LT5zdGF0ZSAhPSBPTUFQX0RTU19ESVNQTEFZX1NVU1BFTkRFRCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlEU1NEQkcoImRwaV9kaXNwbGF5X3Jlc3VtZVxuIik7Ci0KLQlkc3NfY2xrX2VuYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLMSk7Ci0KLQlkaXNwY19lbmFibGVfbGNkX291dCgxKTsKLQotCWlmIChkc3NkZXYtPmRyaXZlci0+cmVzdW1lKQotCQlkc3NkZXYtPmRyaXZlci0+cmVzdW1lKGRzc2Rldik7Ci0KLQlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgZHBpX3NldF90aW1pbmdzKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKK3ZvaWQgZHBpX3NldF90aW1pbmdzKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKIAkJCXN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3MgKnRpbWluZ3MpCiB7CiAJRFNTREJHKCJkcGlfc2V0X3RpbWluZ3NcbiIpOwpAQCAtMjg1LDggKzIzNyw5IEBACiAJCWRpc3BjX2dvKE9NQVBfRFNTX0NIQU5ORUxfTENEKTsKIAl9CiB9CitFWFBPUlRfU1lNQk9MKGRwaV9zZXRfdGltaW5ncyk7CiAKLXN0YXRpYyBpbnQgZHBpX2NoZWNrX3RpbWluZ3Moc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAoraW50IGRwaV9jaGVja190aW1pbmdzKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKIAkJCXN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3MgKnRpbWluZ3MpCiB7CiAJYm9vbCBpc190ZnQ7CkBAIC0zNDAsNTYgKzI5MywyNSBAQAogCiAJcmV0dXJuIDA7CiB9Ci0KLXN0YXRpYyB2b2lkIGRwaV9nZXRfdGltaW5ncyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCi0JCQlzdHJ1Y3Qgb21hcF92aWRlb190aW1pbmdzICp0aW1pbmdzKQotewotCSp0aW1pbmdzID0gZHNzZGV2LT5wYW5lbC50aW1pbmdzOwotfQotCi1zdGF0aWMgaW50IGRwaV9kaXNwbGF5X3NldF91cGRhdGVfbW9kZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCi0JCWVudW0gb21hcF9kc3NfdXBkYXRlX21vZGUgbW9kZSkKLXsKLQlpZiAobW9kZSA9PSBPTUFQX0RTU19VUERBVEVfTUFOVUFMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChtb2RlID09IE9NQVBfRFNTX1VQREFURV9ESVNBQkxFRCkgewotCQlkaXNwY19lbmFibGVfbGNkX291dCgwKTsKLQkJZHBpLnVwZGF0ZV9lbmFibGVkID0gMDsKLQl9IGVsc2UgewotCQlkaXNwY19lbmFibGVfbGNkX291dCgxKTsKLQkJZHBpLnVwZGF0ZV9lbmFibGVkID0gMTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGVudW0gb21hcF9kc3NfdXBkYXRlX21vZGUgZHBpX2Rpc3BsYXlfZ2V0X3VwZGF0ZV9tb2RlKAotCQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0JcmV0dXJuIGRwaS51cGRhdGVfZW5hYmxlZCA/IE9NQVBfRFNTX1VQREFURV9BVVRPIDoKLQkJT01BUF9EU1NfVVBEQVRFX0RJU0FCTEVEOwotfQorRVhQT1JUX1NZTUJPTChkcGlfY2hlY2tfdGltaW5ncyk7CiAKIGludCBkcGlfaW5pdF9kaXNwbGF5KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKIAlEU1NEQkcoImluaXRfZGlzcGxheVxuIik7CiAKLQlkc3NkZXYtPmVuYWJsZSA9IGRwaV9kaXNwbGF5X2VuYWJsZTsKLQlkc3NkZXYtPmRpc2FibGUgPSBkcGlfZGlzcGxheV9kaXNhYmxlOwotCWRzc2Rldi0+c3VzcGVuZCA9IGRwaV9kaXNwbGF5X3N1c3BlbmQ7Ci0JZHNzZGV2LT5yZXN1bWUgPSBkcGlfZGlzcGxheV9yZXN1bWU7Ci0JZHNzZGV2LT5zZXRfdGltaW5ncyA9IGRwaV9zZXRfdGltaW5nczsKLQlkc3NkZXYtPmNoZWNrX3RpbWluZ3MgPSBkcGlfY2hlY2tfdGltaW5nczsKLQlkc3NkZXYtPmdldF90aW1pbmdzID0gZHBpX2dldF90aW1pbmdzOwotCWRzc2Rldi0+c2V0X3VwZGF0ZV9tb2RlID0gZHBpX2Rpc3BsYXlfc2V0X3VwZGF0ZV9tb2RlOwotCWRzc2Rldi0+Z2V0X3VwZGF0ZV9tb2RlID0gZHBpX2Rpc3BsYXlfZ2V0X3VwZGF0ZV9tb2RlOwotCiAJcmV0dXJuIDA7CiB9CiAKLWludCBkcGlfaW5pdCh2b2lkKQoraW50IGRwaV9pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CisJaWYgKGNwdV9pc19vbWFwMzR4eCgpKSB7CisJCWRwaS52ZGRzX2RzaV9yZWcgPSBkc3NfZ2V0X3ZkZHNfZHNpKCk7CisJCWlmIChJU19FUlIoZHBpLnZkZHNfZHNpX3JlZykpIHsKKwkJCURTU0VSUigiY2FuJ3QgZ2V0IFZERFNfRFNJIHJlZ3VsYXRvclxuIik7CisJCQlyZXR1cm4gUFRSX0VSUihkcGkudmRkc19kc2lfcmVnKTsKKwkJfQorCX0KKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc2kuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2RzaS5jCmluZGV4IDYxMjIxNzguLjNhZjIwN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2RzaS5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2RzaS5jCkBAIC0yNywxMSArMjcsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc2VtYXBob3JlLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaD4KLSNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCiAjaW5jbHVkZSA8cGxhdC9kaXNwbGF5Lmg+CiAjaW5jbHVkZSA8cGxhdC9jbG9jay5oPgpAQCAtMTk5LDcgKzIwMCw2IEBACiB9OwogCiBzdHJ1Y3QgZHNpX3VwZGF0ZV9yZWdpb24gewotCWJvb2wgZGlydHk7CiAJdTE2IHgsIHksIHcsIGg7CiAJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZGV2aWNlOwogfTsKQEAgLTIyNCwyOSArMjI0LDI1IEBACiAJCWVudW0gZHNpX3ZjX21vZGUgbW9kZTsKIAkJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2OwogCQllbnVtIGZpZm9fc2l6ZSBmaWZvX3NpemU7Ci0JCWludCBkZXN0X3BlcjsJLyogZGVzdGluYXRpb24gcGVyaXBoZXJhbCAwLTMgKi8KIAl9IHZjWzRdOwogCiAJc3RydWN0IG11dGV4IGxvY2s7Ci0Jc3RydWN0IG11dGV4IGJ1c19sb2NrOworCXN0cnVjdCBzZW1hcGhvcmUgYnVzX2xvY2s7CiAKIAl1bnNpZ25lZCBwbGxfbG9ja2VkOwogCiAJc3RydWN0IGNvbXBsZXRpb24gYnRhX2NvbXBsZXRpb247CiAKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRocmVhZDsKLQl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0cXVldWU7Ci0KLQlzcGlubG9ja190IHVwZGF0ZV9sb2NrOwotCWJvb2wgZnJhbWVkb25lX3JlY2VpdmVkOworCWludCB1cGRhdGVfY2hhbm5lbDsKIAlzdHJ1Y3QgZHNpX3VwZGF0ZV9yZWdpb24gdXBkYXRlX3JlZ2lvbjsKLQlzdHJ1Y3QgZHNpX3VwZGF0ZV9yZWdpb24gYWN0aXZlX3VwZGF0ZV9yZWdpb247Ci0Jc3RydWN0IGNvbXBsZXRpb24gdXBkYXRlX2NvbXBsZXRpb247CiAKLQllbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlIHVzZXJfdXBkYXRlX21vZGU7Ci0JZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSB1cGRhdGVfbW9kZTsKIAlib29sIHRlX2VuYWJsZWQ7Ci0JYm9vbCB1c2VfZXh0X3RlOworCisJc3RydWN0IHdvcmtfc3RydWN0IGZyYW1lZG9uZV93b3JrOworCXZvaWQgKCpmcmFtZWRvbmVfY2FsbGJhY2spKGludCwgdm9pZCAqKTsKKwl2b2lkICpmcmFtZWRvbmVfZGF0YTsKKworCXN0cnVjdCBkZWxheWVkX3dvcmsgZnJhbWVkb25lX3RpbWVvdXRfd29yazsKIAogI2lmZGVmIERTSV9DQVRDSF9NSVNTSU5HX1RFCiAJc3RydWN0IHRpbWVyX2xpc3QgdGVfdGltZXI7CkBAIC0yNjEsOCArMjU3LDYgQEAKICNpZmRlZiBERUJVRwogCWt0aW1lX3QgcGVyZl9zZXR1cF90aW1lOwogCWt0aW1lX3QgcGVyZl9zdGFydF90aW1lOwotCWt0aW1lX3QgcGVyZl9zdGFydF90aW1lX2F1dG87Ci0JaW50IHBlcmZfbWVhc3VyZV9mcmFtZXM7CiAjZW5kaWYKIAlpbnQgZGVidWdfcmVhZDsKIAlpbnQgZGVidWdfd3JpdGU7CkBAIC0yOTksMTYgKzI5MywyMSBAQAogCiB2b2lkIGRzaV9idXNfbG9jayh2b2lkKQogewotCW11dGV4X2xvY2soJmRzaS5idXNfbG9jayk7CisJZG93bigmZHNpLmJ1c19sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0woZHNpX2J1c19sb2NrKTsKIAogdm9pZCBkc2lfYnVzX3VubG9jayh2b2lkKQogewotCW11dGV4X3VubG9jaygmZHNpLmJ1c19sb2NrKTsKKwl1cCgmZHNpLmJ1c19sb2NrKTsKIH0KIEVYUE9SVF9TWU1CT0woZHNpX2J1c191bmxvY2spOwogCitzdGF0aWMgYm9vbCBkc2lfYnVzX2lzX2xvY2tlZCh2b2lkKQoreworCXJldHVybiBkc2kuYnVzX2xvY2suY291bnQgPT0gMDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgd2FpdF9mb3JfYml0X2NoYW5nZShjb25zdCBzdHJ1Y3QgZHNpX3JlZyBpZHgsIGludCBiaXRudW0sCiAJCWludCB2YWx1ZSkKIHsKQEAgLTMzMywxMiArMzMyLDYgQEAKIAlkc2kucGVyZl9zdGFydF90aW1lID0ga3RpbWVfZ2V0KCk7CiB9CiAKLXN0YXRpYyB2b2lkIGRzaV9wZXJmX21hcmtfc3RhcnRfYXV0byh2b2lkKQotewotCWRzaS5wZXJmX21lYXN1cmVfZnJhbWVzID0gMDsKLQlkc2kucGVyZl9zdGFydF90aW1lX2F1dG8gPSBrdGltZV9nZXQoKTsKLX0KLQogc3RhdGljIHZvaWQgZHNpX3BlcmZfc2hvdyhjb25zdCBjaGFyICpuYW1lKQogewogCWt0aW1lX3QgdCwgc2V0dXBfdGltZSwgdHJhbnNfdGltZTsKQEAgLTM0OCw5ICszNDEsNiBAQAogCWlmICghZHNpX3BlcmYpCiAJCXJldHVybjsKIAotCWlmIChkc2kudXBkYXRlX21vZGUgPT0gT01BUF9EU1NfVVBEQVRFX0RJU0FCTEVEKQotCQlyZXR1cm47Ci0KIAl0ID0ga3RpbWVfZ2V0KCk7CiAKIAlzZXR1cF90aW1lID0ga3RpbWVfc3ViKGRzaS5wZXJmX3N0YXJ0X3RpbWUsIGRzaS5wZXJmX3NldHVwX3RpbWUpOwpAQCAtMzY1LDc2ICszNTUsMjMgQEAKIAogCXRvdGFsX3VzID0gc2V0dXBfdXMgKyB0cmFuc191czsKIAotCXRvdGFsX2J5dGVzID0gZHNpLmFjdGl2ZV91cGRhdGVfcmVnaW9uLncgKgotCQlkc2kuYWN0aXZlX3VwZGF0ZV9yZWdpb24uaCAqCi0JCWRzaS5hY3RpdmVfdXBkYXRlX3JlZ2lvbi5kZXZpY2UtPmN0cmwucGl4ZWxfc2l6ZSAvIDg7CisJdG90YWxfYnl0ZXMgPSBkc2kudXBkYXRlX3JlZ2lvbi53ICoKKwkJZHNpLnVwZGF0ZV9yZWdpb24uaCAqCisJCWRzaS51cGRhdGVfcmVnaW9uLmRldmljZS0+Y3RybC5waXhlbF9zaXplIC8gODsKIAotCWlmIChkc2kudXBkYXRlX21vZGUgPT0gT01BUF9EU1NfVVBEQVRFX0FVVE8pIHsKLQkJc3RhdGljIHUzMiBzX3RvdGFsX3RyYW5zX3VzLCBzX3RvdGFsX3NldHVwX3VzOwotCQlzdGF0aWMgdTMyIHNfbWluX3RyYW5zX3VzID0gMHhmZmZmZmZmZiwgc19taW5fc2V0dXBfdXM7Ci0JCXN0YXRpYyB1MzIgc19tYXhfdHJhbnNfdXMsIHNfbWF4X3NldHVwX3VzOwotCQljb25zdCBpbnQgbnVtZnJhbWVzID0gMTAwOwotCQlrdGltZV90IHRvdGFsX3RpbWVfYXV0bzsKLQkJdTMyIHRvdGFsX3RpbWVfYXV0b191czsKLQotCQlkc2kucGVyZl9tZWFzdXJlX2ZyYW1lcysrOwotCi0JCWlmIChzZXR1cF91cyA8IHNfbWluX3NldHVwX3VzKQotCQkJc19taW5fc2V0dXBfdXMgPSBzZXR1cF91czsKLQotCQlpZiAoc2V0dXBfdXMgPiBzX21heF9zZXR1cF91cykKLQkJCXNfbWF4X3NldHVwX3VzID0gc2V0dXBfdXM7Ci0KLQkJc190b3RhbF9zZXR1cF91cyArPSBzZXR1cF91czsKLQotCQlpZiAodHJhbnNfdXMgPCBzX21pbl90cmFuc191cykKLQkJCXNfbWluX3RyYW5zX3VzID0gdHJhbnNfdXM7Ci0KLQkJaWYgKHRyYW5zX3VzID4gc19tYXhfdHJhbnNfdXMpCi0JCQlzX21heF90cmFuc191cyA9IHRyYW5zX3VzOwotCi0JCXNfdG90YWxfdHJhbnNfdXMgKz0gdHJhbnNfdXM7Ci0KLQkJaWYgKGRzaS5wZXJmX21lYXN1cmVfZnJhbWVzIDwgbnVtZnJhbWVzKQotCQkJcmV0dXJuOwotCi0JCXRvdGFsX3RpbWVfYXV0byA9IGt0aW1lX3N1Yih0LCBkc2kucGVyZl9zdGFydF90aW1lX2F1dG8pOwotCQl0b3RhbF90aW1lX2F1dG9fdXMgPSAodTMyKWt0aW1lX3RvX3VzKHRvdGFsX3RpbWVfYXV0byk7Ci0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiRFNJKCVzKTogJXUgZnBzLCBzZXR1cCAldS8ldS8ldSwgIgotCQkJCSJ0cmFucyAldS8ldS8ldVxuIiwKLQkJCQluYW1lLAotCQkJCTEwMDAgKiAxMDAwICogbnVtZnJhbWVzIC8gdG90YWxfdGltZV9hdXRvX3VzLAotCQkJCXNfbWluX3NldHVwX3VzLAotCQkJCXNfbWF4X3NldHVwX3VzLAotCQkJCXNfdG90YWxfc2V0dXBfdXMgLyBudW1mcmFtZXMsCi0JCQkJc19taW5fdHJhbnNfdXMsCi0JCQkJc19tYXhfdHJhbnNfdXMsCi0JCQkJc190b3RhbF90cmFuc191cyAvIG51bWZyYW1lcyk7Ci0KLQkJc190b3RhbF9zZXR1cF91cyA9IDA7Ci0JCXNfbWluX3NldHVwX3VzID0gMHhmZmZmZmZmZjsKLQkJc19tYXhfc2V0dXBfdXMgPSAwOwotCQlzX3RvdGFsX3RyYW5zX3VzID0gMDsKLQkJc19taW5fdHJhbnNfdXMgPSAweGZmZmZmZmZmOwotCQlzX21heF90cmFuc191cyA9IDA7Ci0JCWRzaV9wZXJmX21hcmtfc3RhcnRfYXV0bygpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkRTSSglcyk6ICV1IHVzICsgJXUgdXMgPSAldSB1cyAoJXVIeiksICIKLQkJCQkiJXUgYnl0ZXMsICV1IGtieXRlcy9zZWNcbiIsCi0JCQkJbmFtZSwKLQkJCQlzZXR1cF91cywKLQkJCQl0cmFuc191cywKLQkJCQl0b3RhbF91cywKLQkJCQkxMDAwKjEwMDAgLyB0b3RhbF91cywKLQkJCQl0b3RhbF9ieXRlcywKLQkJCQl0b3RhbF9ieXRlcyAqIDEwMDAgLyB0b3RhbF91cyk7Ci0JfQorCXByaW50ayhLRVJOX0lORk8gIkRTSSglcyk6ICV1IHVzICsgJXUgdXMgPSAldSB1cyAoJXVIeiksICIKKwkJCSIldSBieXRlcywgJXUga2J5dGVzL3NlY1xuIiwKKwkJCW5hbWUsCisJCQlzZXR1cF91cywKKwkJCXRyYW5zX3VzLAorCQkJdG90YWxfdXMsCisJCQkxMDAwKjEwMDAgLyB0b3RhbF91cywKKwkJCXRvdGFsX2J5dGVzLAorCQkJdG90YWxfYnl0ZXMgKiAxMDAwIC8gdG90YWxfdXMpOwogfQogI2Vsc2UKICNkZWZpbmUgZHNpX3BlcmZfbWFya19zZXR1cCgpCiAjZGVmaW5lIGRzaV9wZXJmX21hcmtfc3RhcnQoKQotI2RlZmluZSBkc2lfcGVyZl9tYXJrX3N0YXJ0X2F1dG8oKQogI2RlZmluZSBkc2lfcGVyZl9zaG93KHgpCiAjZW5kaWYKIApAQCAtNzc0LDcgKzcxMSw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyByOwogCi0JaWYgKGRzc19nZXRfZHNpX2Nsa19zb3VyY2UoKSA9PSAwKSB7CisJaWYgKGRzc19nZXRfZHNpX2Nsa19zb3VyY2UoKSA9PSBEU1NfU1JDX0RTUzFfQUxXT05fRkNMSykgewogCQkvKiBEU0kgRkNMSyBzb3VyY2UgaXMgRFNTMV9BTFdPTl9GQ0ssIHdoaWNoIGlzIGRzczFfZmNrICovCiAJCXIgPSBkc3NfY2xrX2dldF9yYXRlKERTU19DTEtfRkNLMSk7CiAJfSBlbHNlIHsKQEAgLTEyMjcsMTcgKzExNjQsMTkgQEAKIAlzZXFfcHJpbnRmKHMsCSJkc2kxX3BsbF9mY2tcdCUtMTZsdXJlZ20zICV1XHQoJXMpXG4iLAogCQkJY2luZm8tPmRzaTFfcGxsX2ZjbGssCiAJCQljaW5mby0+cmVnbTMsCi0JCQlkc3NfZ2V0X2Rpc3BjX2Nsa19zb3VyY2UoKSA9PSAwID8gIm9mZiIgOiAib24iKTsKKwkJCWRzc19nZXRfZGlzcGNfY2xrX3NvdXJjZSgpID09IERTU19TUkNfRFNTMV9BTFdPTl9GQ0xLID8KKwkJCSJvZmYiIDogIm9uIik7CiAKIAlzZXFfcHJpbnRmKHMsCSJkc2kyX3BsbF9mY2tcdCUtMTZsdXJlZ200ICV1XHQoJXMpXG4iLAogCQkJY2luZm8tPmRzaTJfcGxsX2ZjbGssCiAJCQljaW5mby0+cmVnbTQsCi0JCQlkc3NfZ2V0X2RzaV9jbGtfc291cmNlKCkgPT0gMCA/ICJvZmYiIDogIm9uIik7CisJCQlkc3NfZ2V0X2RzaV9jbGtfc291cmNlKCkgPT0gRFNTX1NSQ19EU1MxX0FMV09OX0ZDTEsgPworCQkJIm9mZiIgOiAib24iKTsKIAogCXNlcV9wcmludGYocywJIi0gRFNJIC1cbiIpOwogCiAJc2VxX3ByaW50ZihzLAkiZHNpIGZjbGsgc291cmNlID0gJXNcbiIsCi0JCQlkc3NfZ2V0X2RzaV9jbGtfc291cmNlKCkgPT0gMCA/CisJCQlkc3NfZ2V0X2RzaV9jbGtfc291cmNlKCkgPT0gRFNTX1NSQ19EU1MxX0FMV09OX0ZDTEsgPwogCQkJImRzczFfYWx3b25fZmNsayIgOiAiZHNpMl9wbGxfZmNsayIpOwogCiAJc2VxX3ByaW50ZihzLAkiRFNJX0ZDTEtcdCVsdVxuIiwgZHNpX2ZjbGtfcmF0ZSgpKTsKQEAgLTE3NTYsMjkgKzE2OTUsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZHNpX3ZjX3ByaW50X3N0YXR1cyhpbnQgY2hhbm5lbCkKLXsKLQl1MzIgcjsKLQotCXIgPSBkc2lfcmVhZF9yZWcoRFNJX1ZDX0NUUkwoY2hhbm5lbCkpOwotCURTU0RCRygidmMgJWQ6IFRYX0ZJRk9fTk9UX0VNUFRZICVkLCBCVEFfRU4gJWQsIFZDX0JVU1kgJWQsICIKLQkJCSJUWF9GSUZPX0ZVTEwgJWQsIFJYX0ZJRk9fTk9UX0VNUFRZICVkLCAiLAotCQkJY2hhbm5lbCwKLQkJCUZMRF9HRVQociwgNSwgNSksCi0JCQlGTERfR0VUKHIsIDYsIDYpLAotCQkJRkxEX0dFVChyLCAxNSwgMTUpLAotCQkJRkxEX0dFVChyLCAxNiwgMTYpLAotCQkJRkxEX0dFVChyLCAyMCwgMjApKTsKLQotCXIgPSBkc2lfcmVhZF9yZWcoRFNJX1RYX0ZJRk9fVkNfRU1QVElORVNTKTsKLQlEU1NEQkcoIkVNUFRJTkVTUyAlZFxuIiwgKHIgPj4gKDggKiBjaGFubmVsKSkgJiAweGZmKTsKLX0KLQogc3RhdGljIGludCBkc2lfdmNfZW5hYmxlKGludCBjaGFubmVsLCBib29sIGVuYWJsZSkKIHsKLQlpZiAoZHNpLnVwZGF0ZV9tb2RlICE9IE9NQVBfRFNTX1VQREFURV9BVVRPKQotCQlEU1NEQkcoImRzaV92Y19lbmFibGUgY2hhbm5lbCAlZCwgZW5hYmxlICVkXG4iLAotCQkJCWNoYW5uZWwsIGVuYWJsZSk7CisJRFNTREJHKCJkc2lfdmNfZW5hYmxlIGNoYW5uZWwgJWQsIGVuYWJsZSAlZFxuIiwKKwkJCWNoYW5uZWwsIGVuYWJsZSk7CiAKIAllbmFibGUgPSBlbmFibGUgPyAxIDogMDsKIApAQCAtMTg1OSwxMCArMTc3OSwxMiBAQAogfQogCiAKLXN0YXRpYyB2b2lkIGRzaV92Y19lbmFibGVfaHMoaW50IGNoYW5uZWwsIGJvb2wgZW5hYmxlKQordm9pZCBvbWFwZHNzX2RzaV92Y19lbmFibGVfaHMoaW50IGNoYW5uZWwsIGJvb2wgZW5hYmxlKQogewogCURTU0RCRygiZHNpX3ZjX2VuYWJsZV9ocyglZCwgJWQpXG4iLCBjaGFubmVsLCBlbmFibGUpOwogCisJV0FSTl9PTighZHNpX2J1c19pc19sb2NrZWQoKSk7CisKIAlkc2lfdmNfZW5hYmxlKGNoYW5uZWwsIDApOwogCWRzaV9pZl9lbmFibGUoMCk7CiAKQEAgLTE4NzMsNiArMTc5NSw3IEBACiAKIAlkc2lfZm9yY2VfdHhfc3RvcF9tb2RlX2lvKCk7CiB9CitFWFBPUlRfU1lNQk9MKG9tYXBkc3NfZHNpX3ZjX2VuYWJsZV9ocyk7CiAKIHN0YXRpYyB2b2lkIGRzaV92Y19mbHVzaF9sb25nX2RhdGEoaW50IGNoYW5uZWwpCiB7CkBAIC0xOTU1LDExICsxODc4LDEwIEBACiAKIHN0YXRpYyBpbnQgZHNpX3ZjX3NlbmRfYnRhKGludCBjaGFubmVsKQogewotCWlmIChkc2kudXBkYXRlX21vZGUgIT0gT01BUF9EU1NfVVBEQVRFX0FVVE8gJiYKLQkJCShkc2kuZGVidWdfd3JpdGUgfHwgZHNpLmRlYnVnX3JlYWQpKQorCWlmIChkc2kuZGVidWdfd3JpdGUgfHwgZHNpLmRlYnVnX3JlYWQpCiAJCURTU0RCRygiZHNpX3ZjX3NlbmRfYnRhICVkXG4iLCBjaGFubmVsKTsKIAotCVdBUk5fT04oIW11dGV4X2lzX2xvY2tlZCgmZHNpLmJ1c19sb2NrKSk7CisJV0FSTl9PTighZHNpX2J1c19pc19sb2NrZWQoKSk7CiAKIAlpZiAoUkVHX0dFVChEU0lfVkNfQ1RSTChjaGFubmVsKSwgMjAsIDIwKSkgewkvKiBSWF9GSUZPX05PVF9FTVBUWSAqLwogCQlEU1NFUlIoInJ4IGZpZm8gbm90IGVtcHR5IHdoZW4gc2VuZGluZyBCVEEsIGR1bXBpbmcgZGF0YTpcbiIpOwpAQCAtMjAxMCwxMCArMTkzMiw5IEBACiAJdTMyIHZhbDsKIAl1OCBkYXRhX2lkOwogCi0JV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZkc2kuYnVzX2xvY2spKTsKKwlXQVJOX09OKCFkc2lfYnVzX2lzX2xvY2tlZCgpKTsKIAotCS8qZGF0YV9pZCA9IGRhdGFfdHlwZSB8IGNoYW5uZWwgPDwgNjsgKi8KLQlkYXRhX2lkID0gZGF0YV90eXBlIHwgZHNpLnZjW2NoYW5uZWxdLmRlc3RfcGVyIDw8IDY7CisJZGF0YV9pZCA9IGRhdGFfdHlwZSB8IGNoYW5uZWwgPDwgNjsKIAogCXZhbCA9IEZMRF9WQUwoZGF0YV9pZCwgNywgMCkgfCBGTERfVkFMKGxlbiwgMjMsIDgpIHwKIAkJRkxEX1ZBTChlY2MsIDMxLCAyNCk7CkBAIC0yMDU2LDEzICsxOTc3LDEwIEBACiAKIAlkc2lfdmNfd3JpdGVfbG9uZ19oZWFkZXIoY2hhbm5lbCwgZGF0YV90eXBlLCBsZW4sIGVjYyk7CiAKLQkvKmRzaV92Y19wcmludF9zdGF0dXMoMCk7ICovCi0KIAlwID0gZGF0YTsKIAlmb3IgKGkgPSAwOyBpIDwgbGVuID4+IDI7IGkrKykgewogCQlpZiAoZHNpLmRlYnVnX3dyaXRlKQogCQkJRFNTREJHKCJcdHNlbmRpbmcgZnVsbCBwYWNrZXQgJWRcbiIsIGkpOwotCQkvKmRzaV92Y19wcmludF9zdGF0dXMoMCk7ICovCiAKIAkJYjEgPSAqcCsrOwogCQliMiA9ICpwKys7CkBAIC0yMTA1LDcgKzIwMjMsNyBAQAogCXUzMiByOwogCXU4IGRhdGFfaWQ7CiAKLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmRzaS5idXNfbG9jaykpOworCVdBUk5fT04oIWRzaV9idXNfaXNfbG9ja2VkKCkpOwogCiAJaWYgKGRzaS5kZWJ1Z193cml0ZSkKIAkJRFNTREJHKCJkc2lfdmNfc2VuZF9zaG9ydChjaCVkLCBkdCAlI3gsIGIxICUjeCwgYjIgJSN4KVxuIiwKQEAgLTIxMTksNyArMjAzNyw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWRhdGFfaWQgPSBkYXRhX3R5cGUgfCBkc2kudmNbY2hhbm5lbF0uZGVzdF9wZXIgPDwgNjsKKwlkYXRhX2lkID0gZGF0YV90eXBlIHwgY2hhbm5lbCA8PCA2OwogCiAJciA9IChkYXRhX2lkIDw8IDApIHwgKGRhdGEgPDwgOCkgfCAoZWNjIDw8IDI0KTsKIApAQCAtMjE2MywxNCArMjA4MSwzNSBAQAogCiAJciA9IGRzaV92Y19kY3Nfd3JpdGVfbm9zeW5jKGNoYW5uZWwsIGRhdGEsIGxlbik7CiAJaWYgKHIpCi0JCXJldHVybiByOworCQlnb3RvIGVycjsKIAogCXIgPSBkc2lfdmNfc2VuZF9idGFfc3luYyhjaGFubmVsKTsKKwlpZiAocikKKwkJZ290byBlcnI7CiAKKwlyZXR1cm4gMDsKK2VycjoKKwlEU1NFUlIoImRzaV92Y19kY3Nfd3JpdGUoY2ggJWQsIGNtZCAweCUwMngsIGxlbiAlZCkgZmFpbGVkXG4iLAorCQkJY2hhbm5lbCwgZGF0YVswXSwgbGVuKTsKIAlyZXR1cm4gcjsKIH0KIEVYUE9SVF9TWU1CT0woZHNpX3ZjX2Rjc193cml0ZSk7CiAKK2ludCBkc2lfdmNfZGNzX3dyaXRlXzAoaW50IGNoYW5uZWwsIHU4IGRjc19jbWQpCit7CisJcmV0dXJuIGRzaV92Y19kY3Nfd3JpdGUoY2hhbm5lbCwgJmRjc19jbWQsIDEpOworfQorRVhQT1JUX1NZTUJPTChkc2lfdmNfZGNzX3dyaXRlXzApOworCitpbnQgZHNpX3ZjX2Rjc193cml0ZV8xKGludCBjaGFubmVsLCB1OCBkY3NfY21kLCB1OCBwYXJhbSkKK3sKKwl1OCBidWZbMl07CisJYnVmWzBdID0gZGNzX2NtZDsKKwlidWZbMV0gPSBwYXJhbTsKKwlyZXR1cm4gZHNpX3ZjX2Rjc193cml0ZShjaGFubmVsLCBidWYsIDIpOworfQorRVhQT1JUX1NZTUJPTChkc2lfdmNfZGNzX3dyaXRlXzEpOworCiBpbnQgZHNpX3ZjX2Rjc19yZWFkKGludCBjaGFubmVsLCB1OCBkY3NfY21kLCB1OCAqYnVmLCBpbnQgYnVmbGVuKQogewogCXUzMiB2YWw7CkBAIC0yMTgyLDE2ICsyMTIxLDE3IEBACiAKIAlyID0gZHNpX3ZjX3NlbmRfc2hvcnQoY2hhbm5lbCwgRFNJX0RUX0RDU19SRUFELCBkY3NfY21kLCAwKTsKIAlpZiAocikKLQkJcmV0dXJuIHI7CisJCWdvdG8gZXJyOwogCiAJciA9IGRzaV92Y19zZW5kX2J0YV9zeW5jKGNoYW5uZWwpOwogCWlmIChyKQotCQlyZXR1cm4gcjsKKwkJZ290byBlcnI7CiAKIAkvKiBSWF9GSUZPX05PVF9FTVBUWSAqLwogCWlmIChSRUdfR0VUKERTSV9WQ19DVFJMKGNoYW5uZWwpLCAyMCwgMjApID09IDApIHsKIAkJRFNTRVJSKCJSWCBmaWZvIGVtcHR5IHdoZW4gdHJ5aW5nIHRvIHJlYWQuXG4iKTsKLQkJcmV0dXJuIC1FSU87CisJCXIgPSAtRUlPOworCQlnb3RvIGVycjsKIAl9CiAKIAl2YWwgPSBkc2lfcmVhZF9yZWcoRFNJX1ZDX1NIT1JUX1BBQ0tFVF9IRUFERVIoY2hhbm5lbCkpOwpAQCAtMjIwMSwxNSArMjE0MSwxOCBAQAogCWlmIChkdCA9PSBEU0lfRFRfUlhfQUNLX1dJVEhfRVJSKSB7CiAJCXUxNiBlcnIgPSBGTERfR0VUKHZhbCwgMjMsIDgpOwogCQlkc2lfc2hvd19yeF9hY2tfd2l0aF9lcnIoZXJyKTsKLQkJcmV0dXJuIC1FSU87CisJCXIgPSAtRUlPOworCQlnb3RvIGVycjsKIAogCX0gZWxzZSBpZiAoZHQgPT0gRFNJX0RUX1JYX1NIT1JUX1JFQURfMSkgewogCQl1OCBkYXRhID0gRkxEX0dFVCh2YWwsIDE1LCA4KTsKIAkJaWYgKGRzaS5kZWJ1Z19yZWFkKQogCQkJRFNTREJHKCJcdERDUyBzaG9ydCByZXNwb25zZSwgMSBieXRlOiAlMDJ4XG4iLCBkYXRhKTsKIAotCQlpZiAoYnVmbGVuIDwgMSkKLQkJCXJldHVybiAtRUlPOworCQlpZiAoYnVmbGVuIDwgMSkgeworCQkJciA9IC1FSU87CisJCQlnb3RvIGVycjsKKwkJfQogCiAJCWJ1ZlswXSA9IGRhdGE7CiAKQEAgLTIyMTksOCArMjE2MiwxMCBAQAogCQlpZiAoZHNpLmRlYnVnX3JlYWQpCiAJCQlEU1NEQkcoIlx0RENTIHNob3J0IHJlc3BvbnNlLCAyIGJ5dGU6ICUwNHhcbiIsIGRhdGEpOwogCi0JCWlmIChidWZsZW4gPCAyKQotCQkJcmV0dXJuIC1FSU87CisJCWlmIChidWZsZW4gPCAyKSB7CisJCQlyID0gLUVJTzsKKwkJCWdvdG8gZXJyOworCQl9CiAKIAkJYnVmWzBdID0gZGF0YSAmIDB4ZmY7CiAJCWJ1ZlsxXSA9IChkYXRhID4+IDgpICYgMHhmZjsKQEAgLTIyMzIsOCArMjE3NywxMCBAQAogCQlpZiAoZHNpLmRlYnVnX3JlYWQpCiAJCQlEU1NEQkcoIlx0RENTIGxvbmcgcmVzcG9uc2UsIGxlbiAlZFxuIiwgbGVuKTsKIAotCQlpZiAobGVuID4gYnVmbGVuKQotCQkJcmV0dXJuIC1FSU87CisJCWlmIChsZW4gPiBidWZsZW4pIHsKKwkJCXIgPSAtRUlPOworCQkJZ290byBlcnI7CisJCX0KIAogCQkvKiB0d28gYnl0ZSBjaGVja3N1bSBlbmRzIHRoZSBwYWNrZXQsIG5vdCBpbmNsdWRlZCBpbiBsZW4gKi8KIAkJZm9yICh3ID0gMDsgdyA8IGxlbiArIDI7KSB7CkBAIC0yMjU1LDE0ICsyMjAyLDUyIEBACiAJCX0KIAogCQlyZXR1cm4gbGVuOwotCiAJfSBlbHNlIHsKIAkJRFNTRVJSKCJcdHVua25vd24gZGF0YXR5cGUgMHglMDJ4XG4iLCBkdCk7Ci0JCXJldHVybiAtRUlPOworCQlyID0gLUVJTzsKKwkJZ290byBlcnI7CiAJfQorCisJQlVHKCk7CitlcnI6CisJRFNTRVJSKCJkc2lfdmNfZGNzX3JlYWQoY2ggJWQsIGNtZCAweCUwMngpIGZhaWxlZFxuIiwKKwkJCWNoYW5uZWwsIGRjc19jbWQpOworCXJldHVybiByOworCiB9CiBFWFBPUlRfU1lNQk9MKGRzaV92Y19kY3NfcmVhZCk7CiAKK2ludCBkc2lfdmNfZGNzX3JlYWRfMShpbnQgY2hhbm5lbCwgdTggZGNzX2NtZCwgdTggKmRhdGEpCit7CisJaW50IHI7CisKKwlyID0gZHNpX3ZjX2Rjc19yZWFkKGNoYW5uZWwsIGRjc19jbWQsIGRhdGEsIDEpOworCisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCWlmIChyICE9IDEpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRzaV92Y19kY3NfcmVhZF8xKTsKKworaW50IGRzaV92Y19kY3NfcmVhZF8yKGludCBjaGFubmVsLCB1OCBkY3NfY21kLCB1MTYgKmRhdGEpCit7CisJaW50IHI7CisKKwlyID0gZHNpX3ZjX2Rjc19yZWFkKGNoYW5uZWwsIGRjc19jbWQsICh1OCAqKWRhdGEsIDIpOworCisJaWYgKHIgPCAwKQorCQlyZXR1cm4gcjsKKworCWlmIChyICE9IDIpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKGRzaV92Y19kY3NfcmVhZF8yKTsKIAogaW50IGRzaV92Y19zZXRfbWF4X3J4X3BhY2tldF9zaXplKGludCBjaGFubmVsLCB1MTYgbGVuKQogewpAQCAtMjQ5MSwxNSArMjQ3NiwxNSBAQAogCXUzMiByOwogCWludCBidXN3aWR0aCA9IDA7CiAKLQlkc2lfY29uZmlnX3R4X2ZpZm8oRFNJX0ZJRk9fU0laRV8xMjgsCi0JCQlEU0lfRklGT19TSVpFXzAsCi0JCQlEU0lfRklGT19TSVpFXzAsCi0JCQlEU0lfRklGT19TSVpFXzApOworCWRzaV9jb25maWdfdHhfZmlmbyhEU0lfRklGT19TSVpFXzMyLAorCQkJRFNJX0ZJRk9fU0laRV8zMiwKKwkJCURTSV9GSUZPX1NJWkVfMzIsCisJCQlEU0lfRklGT19TSVpFXzMyKTsKIAotCWRzaV9jb25maWdfcnhfZmlmbyhEU0lfRklGT19TSVpFXzEyOCwKLQkJCURTSV9GSUZPX1NJWkVfMCwKLQkJCURTSV9GSUZPX1NJWkVfMCwKLQkJCURTSV9GSUZPX1NJWkVfMCk7CisJZHNpX2NvbmZpZ19yeF9maWZvKERTSV9GSUZPX1NJWkVfMzIsCisJCQlEU0lfRklGT19TSVpFXzMyLAorCQkJRFNJX0ZJRk9fU0laRV8zMiwKKwkJCURTSV9GSUZPX1NJWkVfMzIpOwogCiAJLyogWFhYIHdoYXQgdmFsdWVzIGZvciB0aGUgdGltZW91dHM/ICovCiAJZHNpX3NldF9zdG9wX3N0YXRlX2NvdW50ZXIoMTAwMCk7CkBAIC0yNTM3LDEyICsyNTIyLDkgQEAKIAlkc2lfd3JpdGVfcmVnKERTSV9DVFJMLCByKTsKIAogCWRzaV92Y19pbml0aWFsX2NvbmZpZygwKTsKLQotCS8qIHNldCBhbGwgdmMgdGFyZ2V0cyB0byBwZXJpcGhlcmFsIDAgKi8KLQlkc2kudmNbMF0uZGVzdF9wZXIgPSAwOwotCWRzaS52Y1sxXS5kZXN0X3BlciA9IDA7Ci0JZHNpLnZjWzJdLmRlc3RfcGVyID0gMDsKLQlkc2kudmNbM10uZGVzdF9wZXIgPSAwOworCWRzaV92Y19pbml0aWFsX2NvbmZpZygxKTsKKwlkc2lfdmNfaW5pdGlhbF9jb25maWcoMik7CisJZHNpX3ZjX2luaXRpYWxfY29uZmlnKDMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNzc3LDE4ICsyNzU5LDE2IEBACiAJdW5zaWduZWQgcGFja2V0X3BheWxvYWQ7CiAJdW5zaWduZWQgcGFja2V0X2xlbjsKIAl1MzIgbDsKLQlib29sIHVzZV90ZV90cmlnZ2VyOwotCWNvbnN0IHVuc2lnbmVkIGNoYW5uZWwgPSAwOworCWNvbnN0IHVuc2lnbmVkIGNoYW5uZWwgPSBkc2kudXBkYXRlX2NoYW5uZWw7CiAJLyogbGluZSBidWZmZXIgaXMgMTAyNCB4IDI0Yml0cyAqLwogCS8qIFhYWDogZm9yIHNvbWUgcmVhc29uIHVzaW5nIGZ1bGwgYnVmZmVyIHNpemUgY2F1c2VzIGNvbnNpZGVyYWJsZSBUWAogCSAqIHNsb3dkb3duIHdpdGggdXBkYXRlIHNpemVzIHRoYXQgZmlsbCB0aGUgd2hvbGUgYnVmZmVyICovCiAJY29uc3QgdW5zaWduZWQgbGluZV9idWZfc2l6ZSA9IDEwMjMgKiAzOwogCi0JdXNlX3RlX3RyaWdnZXIgPSBkc2kudGVfZW5hYmxlZCAmJiAhZHNpLnVzZV9leHRfdGU7CisJRFNTREJHKCJkc2lfdXBkYXRlX3NjcmVlbl9kaXNwYyglZCwlZCAlZHglZClcbiIsCisJCQl4LCB5LCB3LCBoKTsKIAotCWlmIChkc2kudXBkYXRlX21vZGUgIT0gT01BUF9EU1NfVVBEQVRFX0FVVE8pCi0JCURTU0RCRygiZHNpX3VwZGF0ZV9zY3JlZW5fZGlzcGMoJWQsJWQgJWR4JWQpXG4iLAotCQkJCXgsIHksIHcsIGgpOworCWRzaV92Y19jb25maWdfdnAoY2hhbm5lbCk7CiAKIAlieXRlc3BwCT0gZHNzZGV2LT5jdHJsLnBpeGVsX3NpemUgLyA4OwogCWJ5dGVzcGwgPSB3ICogYnl0ZXNwcDsKQEAgLTI4MDgsMTUgKzI3ODgsMTIgQEAKIAlpZiAoYnl0ZXNwZiAlIHBhY2tldF9wYXlsb2FkKQogCQl0b3RhbF9sZW4gKz0gKGJ5dGVzcGYgJSBwYWNrZXRfcGF5bG9hZCkgKyAxOwogCi0JaWYgKDApCi0JCWRzaV92Y19wcmludF9zdGF0dXMoMSk7Ci0KIAlsID0gRkxEX1ZBTCh0b3RhbF9sZW4sIDIzLCAwKTsgLyogVEVfU0laRSAqLwogCWRzaV93cml0ZV9yZWcoRFNJX1ZDX1RFKGNoYW5uZWwpLCBsKTsKIAogCWRzaV92Y193cml0ZV9sb25nX2hlYWRlcihjaGFubmVsLCBEU0lfRFRfRENTX0xPTkdfV1JJVEUsIHBhY2tldF9sZW4sIDApOwogCi0JaWYgKHVzZV90ZV90cmlnZ2VyKQorCWlmIChkc2kudGVfZW5hYmxlZCkKIAkJbCA9IEZMRF9NT0QobCwgMSwgMzAsIDMwKTsgLyogVEVfRU4gKi8KIAllbHNlCiAJCWwgPSBGTERfTU9EKGwsIDEsIDMxLCAzMSk7IC8qIFRFX1NUQVJUICovCkBAIC0yODMwLDkgKzI4MDcsMTQgQEAKIAkgKi8KIAlkaXNwY19kaXNhYmxlX3NpZGxlKCk7CiAKKwlkc2lfcGVyZl9tYXJrX3N0YXJ0KCk7CisKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRzaS5mcmFtZWRvbmVfdGltZW91dF93b3JrLAorCQkJbXNlY3NfdG9famlmZmllcygyNTApKTsKKwogCWRzc19zdGFydF91cGRhdGUoZHNzZGV2KTsKIAotCWlmICh1c2VfdGVfdHJpZ2dlcikgeworCWlmIChkc2kudGVfZW5hYmxlZCkgewogCQkvKiBkaXNhYmxlIExQX1JYX1RPLCBzbyB0aGF0IHdlIGNhbiByZWNlaXZlIFRFLiAgVGltZSB0byB3YWl0CiAJCSAqIGZvciBURSBpcyBsb25nZXIgdGhhbiB0aGUgdGltZXIgYWxsb3dzICovCiAJCVJFR19GTERfTU9EKERTSV9USU1JTkcyLCAwLCAxNSwgMTUpOyAvKiBMUF9SWF9UTyAqLwpAQCAtMjg1MiwxMTAgKzI4MzQsMTcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBkc2lfZnJhbWVkb25lX2lycV9jYWxsYmFjayh2b2lkICpkYXRhLCB1MzIgbWFzaykKK3N0YXRpYyB2b2lkIGRzaV9mcmFtZWRvbmVfdGltZW91dF93b3JrX2NhbGxiYWNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQkvKiBOb3RlOiBXZSBnZXQgRlJBTUVET05FIHdoZW4gRElTUEMgaGFzIGZpbmlzaGVkIHNlbmRpbmcgcGl4ZWxzIGFuZAotCSAqIHR1cm5zIGl0c2VsZiBvZmYuIEhvd2V2ZXIsIERTSSBzdGlsbCBoYXMgdGhlIHBpeGVscyBpbiBpdHMgYnVmZmVycywKLQkgKiBhbmQgaXMgc2VuZGluZyB0aGUgZGF0YS4KLQkgKi8KKwlpbnQgcjsKKwljb25zdCBpbnQgY2hhbm5lbCA9IGRzaS51cGRhdGVfY2hhbm5lbDsKKworCURTU0VSUigiRnJhbWVkb25lIG5vdCByZWNlaXZlZCBmb3IgMjUwbXMhXG4iKTsKIAogCS8qIFNJRExFTU9ERSBiYWNrIHRvIHNtYXJ0LWlkbGUgKi8KIAlkaXNwY19lbmFibGVfc2lkbGUoKTsKIAotCWRzaS5mcmFtZWRvbmVfcmVjZWl2ZWQgPSB0cnVlOwotCXdha2VfdXAoJmRzaS53YWl0cXVldWUpOwotfQotCi1zdGF0aWMgdm9pZCBkc2lfc2V0X3VwZGF0ZV9yZWdpb24oc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQl1MTYgeCwgdTE2IHksIHUxNiB3LCB1MTYgaCkKLXsKLQlzcGluX2xvY2soJmRzaS51cGRhdGVfbG9jayk7Ci0JaWYgKGRzaS51cGRhdGVfcmVnaW9uLmRpcnR5KSB7Ci0JCWRzaS51cGRhdGVfcmVnaW9uLnggPSBtaW4oeCwgZHNpLnVwZGF0ZV9yZWdpb24ueCk7Ci0JCWRzaS51cGRhdGVfcmVnaW9uLnkgPSBtaW4oeSwgZHNpLnVwZGF0ZV9yZWdpb24ueSk7Ci0JCWRzaS51cGRhdGVfcmVnaW9uLncgPSBtYXgodywgZHNpLnVwZGF0ZV9yZWdpb24udyk7Ci0JCWRzaS51cGRhdGVfcmVnaW9uLmggPSBtYXgoaCwgZHNpLnVwZGF0ZV9yZWdpb24uaCk7Ci0JfSBlbHNlIHsKLQkJZHNpLnVwZGF0ZV9yZWdpb24ueCA9IHg7Ci0JCWRzaS51cGRhdGVfcmVnaW9uLnkgPSB5OwotCQlkc2kudXBkYXRlX3JlZ2lvbi53ID0gdzsKLQkJZHNpLnVwZGF0ZV9yZWdpb24uaCA9IGg7Ci0JfQotCi0JZHNpLnVwZGF0ZV9yZWdpb24uZGV2aWNlID0gZHNzZGV2OwotCWRzaS51cGRhdGVfcmVnaW9uLmRpcnR5ID0gdHJ1ZTsKLQotCXNwaW5fdW5sb2NrKCZkc2kudXBkYXRlX2xvY2spOwotCi19Ci0KLXN0YXRpYyBpbnQgZHNpX3NldF91cGRhdGVfbW9kZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCi0JCWVudW0gb21hcF9kc3NfdXBkYXRlX21vZGUgbW9kZSkKLXsKLQlpbnQgciA9IDA7Ci0JaW50IGk7Ci0KLQlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmRzaS5idXNfbG9jaykpOwotCi0JaWYgKGRzaS51cGRhdGVfbW9kZSAhPSBtb2RlKSB7Ci0JCWRzaS51cGRhdGVfbW9kZSA9IG1vZGU7Ci0KLQkJLyogTWFyayB0aGUgb3ZlcmxheXMgZGlydHksIGFuZCBkbyBhcHBseSgpLCBzbyB0aGF0IHdlIGdldCB0aGUKLQkJICogb3ZlcmxheXMgY29uZmlndXJlZCBwcm9wZXJseSBhZnRlciB1cGRhdGUgbW9kZSBjaGFuZ2UuICovCi0JCWZvciAoaSA9IDA7IGkgPCBvbWFwX2Rzc19nZXRfbnVtX292ZXJsYXlzKCk7ICsraSkgewotCQkJc3RydWN0IG9tYXBfb3ZlcmxheSAqb3ZsOwotCQkJb3ZsID0gb21hcF9kc3NfZ2V0X292ZXJsYXkoaSk7Ci0JCQlpZiAob3ZsLT5tYW5hZ2VyID09IGRzc2Rldi0+bWFuYWdlcikKLQkJCQlvdmwtPmluZm9fZGlydHkgPSB0cnVlOwotCQl9Ci0KLQkJciA9IGRzc2Rldi0+bWFuYWdlci0+YXBwbHkoZHNzZGV2LT5tYW5hZ2VyKTsKLQotCQlpZiAoZHNzZGV2LT5zdGF0ZSA9PSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRSAmJgotCQkJCW1vZGUgPT0gT01BUF9EU1NfVVBEQVRFX0FVVE8pIHsKLQkJCXUxNiB3LCBoOwotCi0JCQlEU1NEQkcoInN0YXJ0aW5nIGF1dG8gdXBkYXRlXG4iKTsKLQotCQkJZHNzZGV2LT5nZXRfcmVzb2x1dGlvbihkc3NkZXYsICZ3LCAmaCk7Ci0KLQkJCWRzaV9zZXRfdXBkYXRlX3JlZ2lvbihkc3NkZXYsIDAsIDAsIHcsIGgpOwotCi0JCQlkc2lfcGVyZl9tYXJrX3N0YXJ0X2F1dG8oKTsKLQotCQkJd2FrZV91cCgmZHNpLndhaXRxdWV1ZSk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIGludCBkc2lfc2V0X3RlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgYm9vbCBlbmFibGUpCi17Ci0JaW50IHIgPSAwOwotCi0JaWYgKGRzc2Rldi0+ZHJpdmVyLT5lbmFibGVfdGUpIHsKLQkJciA9IGRzc2Rldi0+ZHJpdmVyLT5lbmFibGVfdGUoZHNzZGV2LCBlbmFibGUpOwotCQkvKiBYWFggZm9yIHNvbWUgcmVhc29uLCBEU0kgVEUgYnJlYWtzIGlmIHdlIGRvbid0IHdhaXQgaGVyZS4KLQkJICogUGFuZWwgYnVnPyBOZWVkcyBtb3JlIHN0dWR5aW5nICovCi0JCW1zbGVlcCgxMDApOwotCX0KLQotCXJldHVybiByOwotfQotCi1zdGF0aWMgdm9pZCBkc2lfaGFuZGxlX2ZyYW1lZG9uZSh2b2lkKQotewotCWludCByOwotCWNvbnN0IGludCBjaGFubmVsID0gMDsKLQlib29sIHVzZV90ZV90cmlnZ2VyOwotCi0JdXNlX3RlX3RyaWdnZXIgPSBkc2kudGVfZW5hYmxlZCAmJiAhZHNpLnVzZV9leHRfdGU7Ci0KLQlpZiAoZHNpLnVwZGF0ZV9tb2RlICE9IE9NQVBfRFNTX1VQREFURV9BVVRPKQotCQlEU1NEQkcoIkZSQU1FRE9ORVxuIik7Ci0KLQlpZiAodXNlX3RlX3RyaWdnZXIpIHsKKwlpZiAoZHNpLnRlX2VuYWJsZWQpIHsKIAkJLyogZW5hYmxlIExQX1JYX1RPIGFnYWluIGFmdGVyIHRoZSBURSAqLwogCQlSRUdfRkxEX01PRChEU0lfVElNSU5HMiwgMSwgMTUsIDE1KTsgLyogTFBfUlhfVE8gKi8KIAl9CkBAIC0yOTc2LDcgKzI4NjUsNTQgQEAKIAkvKiBSWF9GSUZPX05PVF9FTVBUWSAqLwogCWlmIChSRUdfR0VUKERTSV9WQ19DVFJMKGNoYW5uZWwpLCAyMCwgMjApKSB7CiAJCURTU0VSUigiUmVjZWl2ZWQgZXJyb3IgZHVyaW5nIGZyYW1lIHRyYW5zZmVyOlxuIik7Ci0JCWRzaV92Y19mbHVzaF9yZWNlaXZlX2RhdGEoMCk7CisJCWRzaV92Y19mbHVzaF9yZWNlaXZlX2RhdGEoY2hhbm5lbCk7CisJfQorCisJZHNpLmZyYW1lZG9uZV9jYWxsYmFjaygtRVRJTUVET1VULCBkc2kuZnJhbWVkb25lX2RhdGEpOworfQorCitzdGF0aWMgdm9pZCBkc2lfZnJhbWVkb25lX2lycV9jYWxsYmFjayh2b2lkICpkYXRhLCB1MzIgbWFzaykKK3sKKwkvKiBOb3RlOiBXZSBnZXQgRlJBTUVET05FIHdoZW4gRElTUEMgaGFzIGZpbmlzaGVkIHNlbmRpbmcgcGl4ZWxzIGFuZAorCSAqIHR1cm5zIGl0c2VsZiBvZmYuIEhvd2V2ZXIsIERTSSBzdGlsbCBoYXMgdGhlIHBpeGVscyBpbiBpdHMgYnVmZmVycywKKwkgKiBhbmQgaXMgc2VuZGluZyB0aGUgZGF0YS4KKwkgKi8KKworCS8qIFNJRExFTU9ERSBiYWNrIHRvIHNtYXJ0LWlkbGUgKi8KKwlkaXNwY19lbmFibGVfc2lkbGUoKTsKKworCXNjaGVkdWxlX3dvcmsoJmRzaS5mcmFtZWRvbmVfd29yayk7Cit9CisKK3N0YXRpYyB2b2lkIGRzaV9oYW5kbGVfZnJhbWVkb25lKHZvaWQpCit7CisJaW50IHI7CisJY29uc3QgaW50IGNoYW5uZWwgPSBkc2kudXBkYXRlX2NoYW5uZWw7CisKKwlEU1NEQkcoIkZSQU1FRE9ORVxuIik7CisKKwlpZiAoZHNpLnRlX2VuYWJsZWQpIHsKKwkJLyogZW5hYmxlIExQX1JYX1RPIGFnYWluIGFmdGVyIHRoZSBURSAqLworCQlSRUdfRkxEX01PRChEU0lfVElNSU5HMiwgMSwgMTUsIDE1KTsgLyogTFBfUlhfVE8gKi8KKwl9CisKKwkvKiBTZW5kIEJUQSBhZnRlciB0aGUgZnJhbWUuIFdlIG5lZWQgdGhpcyBmb3IgdGhlIFRFIHRvIHdvcmssIGFzIFRFCisJICogdHJpZ2dlciBpcyBvbmx5IHNlbnQgZm9yIEJUQXMgd2l0aG91dCBwcmVjZWRpbmcgcGFja2V0LiBUaHVzIHdlIG5lZWQKKwkgKiB0byBCVEEgYWZ0ZXIgdGhlIHBpeGVsIHBhY2tldHMgc28gdGhhdCBuZXh0IEJUQSB3aWxsIGNhdXNlIFRFCisJICogdHJpZ2dlci4KKwkgKgorCSAqIFRoaXMgaXMgbm90IG5lZWRlZCB3aGVuIFRFIGlzIG5vdCBpbiB1c2UsIGJ1dCB3ZSBkbyBpdCBhbnl3YXkgdG8KKwkgKiBtYWtlIHN1cmUgdGhhdCB0aGUgdHJhbnNmZXIgaGFzIGJlZW4gY29tcGxldGVkLiBJdCB3b3VsZCBiZSBtb3JlCisJICogb3B0aW1hbCwgYnV0IG1vcmUgY29tcGxleCwgdG8gd2FpdCBvbmx5IGp1c3QgYmVmb3JlIHN0YXJ0aW5nIG5leHQKKwkgKiB0cmFuc2Zlci4gKi8KKwlyID0gZHNpX3ZjX3NlbmRfYnRhX3N5bmMoY2hhbm5lbCk7CisJaWYgKHIpCisJCURTU0VSUigiQlRBIGFmdGVyIGZyYW1lZG9uZSBmYWlsZWRcbiIpOworCisJLyogUlhfRklGT19OT1RfRU1QVFkgKi8KKwlpZiAoUkVHX0dFVChEU0lfVkNfQ1RSTChjaGFubmVsKSwgMjAsIDIwKSkgeworCQlEU1NFUlIoIlJlY2VpdmVkIGVycm9yIGR1cmluZyBmcmFtZSB0cmFuc2ZlcjpcbiIpOworCQlkc2lfdmNfZmx1c2hfcmVjZWl2ZV9kYXRhKGNoYW5uZWwpOwogCX0KIAogI2lmZGVmIENPTkZJR19PTUFQMl9EU1NfRkFLRV9WU1lOQwpAQCAtMjk4NCwxMTggKzI5MjAsNzkgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgaW50IGRzaV91cGRhdGVfdGhyZWFkKHZvaWQgKmRhdGEpCitzdGF0aWMgdm9pZCBkc2lfZnJhbWVkb25lX3dvcmtfY2FsbGJhY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKLQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkZXZpY2U7Ci0JdTE2IHgsIHksIHcsIGg7CisJRFNTREJHRigpOwogCi0Jd2hpbGUgKDEpIHsKLQkJYm9vbCBzY2hlZDsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmRzaS5mcmFtZWRvbmVfdGltZW91dF93b3JrKTsKIAotCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZHNpLndhaXRxdWV1ZSwKLQkJCQlkc2kudXBkYXRlX21vZGUgPT0gT01BUF9EU1NfVVBEQVRFX0FVVE8gfHwKLQkJCQkoZHNpLnVwZGF0ZV9tb2RlID09IE9NQVBfRFNTX1VQREFURV9NQU5VQUwgJiYKLQkJCQkgZHNpLnVwZGF0ZV9yZWdpb24uZGlydHkgPT0gdHJ1ZSkgfHwKLQkJCQlrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOworCWRzaV9oYW5kbGVfZnJhbWVkb25lKCk7CiAKLQkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKLQkJCWJyZWFrOworCWRzaV9wZXJmX3Nob3coIkRJU1BDIik7CiAKLQkJZHNpX2J1c19sb2NrKCk7CisJZHNpLmZyYW1lZG9uZV9jYWxsYmFjaygwLCBkc2kuZnJhbWVkb25lX2RhdGEpOworfQogCi0JCWlmIChkc2kudXBkYXRlX21vZGUgPT0gT01BUF9EU1NfVVBEQVRFX0RJU0FCTEVEIHx8Ci0JCQkJa3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCQlkc2lfYnVzX3VubG9jaygpOwotCQkJYnJlYWs7Ci0JCX0KK2ludCBvbWFwX2RzaV9wcmVwYXJlX3VwZGF0ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCQkJICAgIHUxNiAqeCwgdTE2ICp5LCB1MTYgKncsIHUxNiAqaCkKK3sKKwl1MTYgZHcsIGRoOwogCi0JCWRzaV9wZXJmX21hcmtfc2V0dXAoKTsKKwlkc3NkZXYtPmRyaXZlci0+Z2V0X3Jlc29sdXRpb24oZHNzZGV2LCAmZHcsICZkaCk7CiAKLQkJaWYgKGRzaS51cGRhdGVfcmVnaW9uLmRpcnR5KSB7Ci0JCQlzcGluX2xvY2soJmRzaS51cGRhdGVfbG9jayk7Ci0JCQlkc2kuYWN0aXZlX3VwZGF0ZV9yZWdpb24gPSBkc2kudXBkYXRlX3JlZ2lvbjsKLQkJCWRzaS51cGRhdGVfcmVnaW9uLmRpcnR5ID0gZmFsc2U7Ci0JCQlzcGluX3VubG9jaygmZHNpLnVwZGF0ZV9sb2NrKTsKLQkJfQorCWlmICAoKnggPiBkdyB8fCAqeSA+IGRoKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlkZXZpY2UgPSBkc2kuYWN0aXZlX3VwZGF0ZV9yZWdpb24uZGV2aWNlOwotCQl4ID0gZHNpLmFjdGl2ZV91cGRhdGVfcmVnaW9uLng7Ci0JCXkgPSBkc2kuYWN0aXZlX3VwZGF0ZV9yZWdpb24ueTsKLQkJdyA9IGRzaS5hY3RpdmVfdXBkYXRlX3JlZ2lvbi53OwotCQloID0gZHNpLmFjdGl2ZV91cGRhdGVfcmVnaW9uLmg7CisJaWYgKCp4ICsgKncgPiBkdykKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKGRldmljZS0+bWFuYWdlci0+Y2FwcyAmIE9NQVBfRFNTX09WTF9NR1JfQ0FQX0RJU1BDKSB7CisJaWYgKCp5ICsgKmggPiBkaCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJCWlmIChkc2kudXBkYXRlX21vZGUgPT0gT01BUF9EU1NfVVBEQVRFX01BTlVBTCkKLQkJCQlkc3Nfc2V0dXBfcGFydGlhbF9wbGFuZXMoZGV2aWNlLAotCQkJCQkJJngsICZ5LCAmdywgJmgpOworCWlmICgqdyA9PSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkJZGlzcGNfc2V0X2xjZF9zaXplKHcsIGgpOwotCQl9CisJaWYgKCp3ID09IDAgfHwgKmggPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJaWYgKGRzaS5hY3RpdmVfdXBkYXRlX3JlZ2lvbi5kaXJ0eSkgewotCQkJZHNpLmFjdGl2ZV91cGRhdGVfcmVnaW9uLmRpcnR5ID0gZmFsc2U7Ci0JCQkvKiBYWFggVE9ETyB3ZSBkb24ndCBuZWVkIHRvIHNlbmQgdGhlIGNvb3JkcywgaWYgdGhleQotCQkJICogYXJlIHRoZSBzYW1lIHRoYXQgYXJlIGFscmVhZHkgcHJvZ3JhbW1lZCB0byB0aGUKLQkJCSAqIHBhbmVsLiBUaGF0IHNob3VsZCBzcGVlZCB1cCBtYW51YWwgdXBkYXRlIGEgYml0ICovCi0JCQlkZXZpY2UtPmRyaXZlci0+c2V0dXBfdXBkYXRlKGRldmljZSwgeCwgeSwgdywgaCk7Ci0JCX0KKwlkc2lfcGVyZl9tYXJrX3NldHVwKCk7CiAKLQkJZHNpX3BlcmZfbWFya19zdGFydCgpOwotCi0JCWlmIChkZXZpY2UtPm1hbmFnZXItPmNhcHMgJiBPTUFQX0RTU19PVkxfTUdSX0NBUF9ESVNQQykgewotCQkJZHNpX3ZjX2NvbmZpZ192cCgwKTsKLQotCQkJaWYgKGRzaS50ZV9lbmFibGVkICYmIGRzaS51c2VfZXh0X3RlKQotCQkJCWRldmljZS0+ZHJpdmVyLT53YWl0X2Zvcl90ZShkZXZpY2UpOwotCi0JCQlkc2kuZnJhbWVkb25lX3JlY2VpdmVkID0gZmFsc2U7Ci0KLQkJCWRzaV91cGRhdGVfc2NyZWVuX2Rpc3BjKGRldmljZSwgeCwgeSwgdywgaCk7Ci0KLQkJCS8qIHdhaXQgZm9yIGZyYW1lZG9uZSAqLwotCQkJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMTAwMCk7Ci0JCQl3YWl0X2V2ZW50X3RpbWVvdXQoZHNpLndhaXRxdWV1ZSwKLQkJCQkJZHNpLmZyYW1lZG9uZV9yZWNlaXZlZCA9PSB0cnVlLAotCQkJCQl0aW1lb3V0KTsKLQotCQkJaWYgKCFkc2kuZnJhbWVkb25lX3JlY2VpdmVkKSB7Ci0JCQkJRFNTRVJSKCJmcmFtZWRvbmUgdGltZW91dFxuIik7Ci0JCQkJRFNTRVJSKCJmYWlsZWQgdXBkYXRlICVkLCVkICVkeCVkXG4iLAotCQkJCQkJeCwgeSwgdywgaCk7Ci0KLQkJCQlkaXNwY19lbmFibGVfc2lkbGUoKTsKLQkJCQlkaXNwY19lbmFibGVfbGNkX291dCgwKTsKLQotCQkJCWRzaV9yZXNldF90eF9maWZvKDApOwotCQkJfSBlbHNlIHsKLQkJCQlkc2lfaGFuZGxlX2ZyYW1lZG9uZSgpOwotCQkJCWRzaV9wZXJmX3Nob3coIkRJU1BDIik7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlkc2lfdXBkYXRlX3NjcmVlbl9sNChkZXZpY2UsIHgsIHksIHcsIGgpOwotCQkJZHNpX3BlcmZfc2hvdygiTDQiKTsKLQkJfQotCi0JCXNjaGVkID0gYXRvbWljX3JlYWQoJmRzaS5idXNfbG9jay5jb3VudCkgPCAwOwotCi0JCWNvbXBsZXRlX2FsbCgmZHNpLnVwZGF0ZV9jb21wbGV0aW9uKTsKLQotCQlkc2lfYnVzX3VubG9jaygpOwotCi0JCS8qIFhYWCBXZSBuZWVkIHRvIGdpdmUgb3RoZXJzIGNoYW5jZSB0byBnZXQgdGhlIGJ1cyBsb2NrLiBJcwotCQkgKiB0aGVyZSBhIGJldHRlciB3YXkgZm9yIHRoaXM/ICovCi0JCWlmIChkc2kudXBkYXRlX21vZGUgPT0gT01BUF9EU1NfVVBEQVRFX0FVVE8gJiYgc2NoZWQpCi0JCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoMSk7CisJaWYgKGRzc2Rldi0+bWFuYWdlci0+Y2FwcyAmIE9NQVBfRFNTX09WTF9NR1JfQ0FQX0RJU1BDKSB7CisJCWRzc19zZXR1cF9wYXJ0aWFsX3BsYW5lcyhkc3NkZXYsIHgsIHksIHcsIGgpOworCQlkaXNwY19zZXRfbGNkX3NpemUoKncsICpoKTsKIAl9CiAKLQlEU1NEQkcoInVwZGF0ZSB0aHJlYWQgZXhpdGluZ1xuIik7Ci0KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0wob21hcF9kc2lfcHJlcGFyZV91cGRhdGUpOwogCitpbnQgb21hcF9kc2lfdXBkYXRlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKKwkJaW50IGNoYW5uZWwsCisJCXUxNiB4LCB1MTYgeSwgdTE2IHcsIHUxNiBoLAorCQl2b2lkICgqY2FsbGJhY2spKGludCwgdm9pZCAqKSwgdm9pZCAqZGF0YSkKK3sKKwlkc2kudXBkYXRlX2NoYW5uZWwgPSBjaGFubmVsOwogCisJaWYgKGRzc2Rldi0+bWFuYWdlci0+Y2FwcyAmIE9NQVBfRFNTX09WTF9NR1JfQ0FQX0RJU1BDKSB7CisJCWRzaS5mcmFtZWRvbmVfY2FsbGJhY2sgPSBjYWxsYmFjazsKKwkJZHNpLmZyYW1lZG9uZV9kYXRhID0gZGF0YTsKKworCQlkc2kudXBkYXRlX3JlZ2lvbi54ID0geDsKKwkJZHNpLnVwZGF0ZV9yZWdpb24ueSA9IHk7CisJCWRzaS51cGRhdGVfcmVnaW9uLncgPSB3OworCQlkc2kudXBkYXRlX3JlZ2lvbi5oID0gaDsKKwkJZHNpLnVwZGF0ZV9yZWdpb24uZGV2aWNlID0gZHNzZGV2OworCisJCWRzaV91cGRhdGVfc2NyZWVuX2Rpc3BjKGRzc2RldiwgeCwgeSwgdywgaCk7CisJfSBlbHNlIHsKKwkJZHNpX3VwZGF0ZV9zY3JlZW5fbDQoZHNzZGV2LCB4LCB5LCB3LCBoKTsKKwkJZHNpX3BlcmZfc2hvdygiTDQiKTsKKwkJY2FsbGJhY2soMCwgZGF0YSk7CisJfQorCisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKG9tYXBfZHNpX3VwZGF0ZSk7CiAKIC8qIERpc3BsYXkgZnVuY3MgKi8KIApAQCAtMzIwMyw3ICszMTAwLDggQEAKIAlpZiAocikKIAkJZ290byBlcnIxOwogCi0JZHNzX3NlbGVjdF9jbGtfc291cmNlKHRydWUsIHRydWUpOworCWRzc19zZWxlY3RfZGlzcGNfY2xrX3NvdXJjZShEU1NfU1JDX0RTSTFfUExMX0ZDTEspOworCWRzc19zZWxlY3RfZHNpX2Nsa19zb3VyY2UoRFNTX1NSQ19EU0kyX1BMTF9GQ0xLKTsKIAogCURTU0RCRygiUExMIE9LXG4iKTsKIApAQCAtMzIyOSwyNSArMzEyNywxOCBAQAogCiAJLyogZW5hYmxlIGludGVyZmFjZSAqLwogCWRzaV92Y19lbmFibGUoMCwgMSk7CisJZHNpX3ZjX2VuYWJsZSgxLCAxKTsKKwlkc2lfdmNfZW5hYmxlKDIsIDEpOworCWRzaV92Y19lbmFibGUoMywgMSk7CiAJZHNpX2lmX2VuYWJsZSgxKTsKIAlkc2lfZm9yY2VfdHhfc3RvcF9tb2RlX2lvKCk7CiAKLQlpZiAoZHNzZGV2LT5kcml2ZXItPmVuYWJsZSkgewotCQlyID0gZHNzZGV2LT5kcml2ZXItPmVuYWJsZShkc3NkZXYpOwotCQlpZiAocikKLQkJCWdvdG8gZXJyNDsKLQl9Ci0KLQkvKiBlbmFibGUgaGlnaC1zcGVlZCBhZnRlciBpbml0aWFsIGNvbmZpZyAqLwotCWRzaV92Y19lbmFibGVfaHMoMCwgMSk7Ci0KIAlyZXR1cm4gMDsKLWVycjQ6Ci0JZHNpX2lmX2VuYWJsZSgwKTsKIGVycjM6CiAJZHNpX2NvbXBsZXhpb191bmluaXQoKTsKIGVycjI6Ci0JZHNzX3NlbGVjdF9jbGtfc291cmNlKGZhbHNlLCBmYWxzZSk7CisJZHNzX3NlbGVjdF9kaXNwY19jbGtfc291cmNlKERTU19TUkNfRFNTMV9BTFdPTl9GQ0xLKTsKKwlkc3Nfc2VsZWN0X2RzaV9jbGtfc291cmNlKERTU19TUkNfRFNTMV9BTFdPTl9GQ0xLKTsKIGVycjE6CiAJZHNpX3BsbF91bmluaXQoKTsKIGVycjA6CkBAIC0zMjU2LDEwICszMTQ3LDggQEAKIAogc3RhdGljIHZvaWQgZHNpX2Rpc3BsYXlfdW5pbml0X2RzaShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0JaWYgKGRzc2Rldi0+ZHJpdmVyLT5kaXNhYmxlKQotCQlkc3NkZXYtPmRyaXZlci0+ZGlzYWJsZShkc3NkZXYpOwotCi0JZHNzX3NlbGVjdF9jbGtfc291cmNlKGZhbHNlLCBmYWxzZSk7CisJZHNzX3NlbGVjdF9kaXNwY19jbGtfc291cmNlKERTU19TUkNfRFNTMV9BTFdPTl9GQ0xLKTsKKwlkc3Nfc2VsZWN0X2RzaV9jbGtfc291cmNlKERTU19TUkNfRFNTMV9BTFdPTl9GQ0xLKTsKIAlkc2lfY29tcGxleGlvX3VuaW5pdCgpOwogCWRzaV9wbGxfdW5pbml0KCk7CiB9CkBAIC0zMjgwLDE0ICszMTY5LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfZW5hYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK2ludCBvbWFwZHNzX2RzaV9kaXNwbGF5X2VuYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7CiAJaW50IHIgPSAwOwogCiAJRFNTREJHKCJkc2lfZGlzcGxheV9lbmFibGVcbiIpOwogCisJV0FSTl9PTighZHNpX2J1c19pc19sb2NrZWQoKSk7CisKIAltdXRleF9sb2NrKCZkc2kubG9jayk7Ci0JZHNpX2J1c19sb2NrKCk7CiAKIAlyID0gb21hcF9kc3Nfc3RhcnRfZGV2aWNlKGRzc2Rldik7CiAJaWYgKHIpIHsKQEAgLTMyOTUsNzMgKzMxODUsNDcgQEAKIAkJZ290byBlcnIwOwogCX0KIAotCWlmIChkc3NkZXYtPnN0YXRlICE9IE9NQVBfRFNTX0RJU1BMQVlfRElTQUJMRUQpIHsKLQkJRFNTRVJSKCJkc3NkZXYgYWxyZWFkeSBlbmFibGVkXG4iKTsKLQkJciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyMTsKLQl9Ci0KIAllbmFibGVfY2xvY2tzKDEpOwogCWRzaV9lbmFibGVfcGxsX2Nsb2NrKDEpOwogCiAJciA9IF9kc2lfcmVzZXQoKTsKIAlpZiAocikKLQkJZ290byBlcnIyOworCQlnb3RvIGVycjE7CiAKIAlkc2lfY29yZV9pbml0KCk7CiAKIAlyID0gZHNpX2Rpc3BsYXlfaW5pdF9kaXNwYyhkc3NkZXYpOwogCWlmIChyKQotCQlnb3RvIGVycjI7CisJCWdvdG8gZXJyMTsKIAogCXIgPSBkc2lfZGlzcGxheV9pbml0X2RzaShkc3NkZXYpOwogCWlmIChyKQotCQlnb3RvIGVycjM7CisJCWdvdG8gZXJyMjsKIAotCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRTsKLQotCWRzaS51c2VfZXh0X3RlID0gZHNzZGV2LT5waHkuZHNpLmV4dF90ZTsKLQlyID0gZHNpX3NldF90ZShkc3NkZXYsIGRzaS50ZV9lbmFibGVkKTsKLQlpZiAocikKLQkJZ290byBlcnI0OwotCi0JZHNpX3NldF91cGRhdGVfbW9kZShkc3NkZXYsIGRzaS51c2VyX3VwZGF0ZV9tb2RlKTsKLQotCWRzaV9idXNfdW5sb2NrKCk7CiAJbXV0ZXhfdW5sb2NrKCZkc2kubG9jayk7CiAKIAlyZXR1cm4gMDsKIAotZXJyNDoKLQotCWRzaV9kaXNwbGF5X3VuaW5pdF9kc2koZHNzZGV2KTsKLWVycjM6Ci0JZHNpX2Rpc3BsYXlfdW5pbml0X2Rpc3BjKGRzc2Rldik7CiBlcnIyOgorCWRzaV9kaXNwbGF5X3VuaW5pdF9kaXNwYyhkc3NkZXYpOworZXJyMToKIAllbmFibGVfY2xvY2tzKDApOwogCWRzaV9lbmFibGVfcGxsX2Nsb2NrKDApOwotZXJyMToKIAlvbWFwX2Rzc19zdG9wX2RldmljZShkc3NkZXYpOwogZXJyMDoKLQlkc2lfYnVzX3VubG9jaygpOwogCW11dGV4X3VubG9jaygmZHNpLmxvY2spOwogCURTU0RCRygiZHNpX2Rpc3BsYXlfZW5hYmxlIEZBSUxFRFxuIik7CiAJcmV0dXJuIHI7CiB9CitFWFBPUlRfU1lNQk9MKG9tYXBkc3NfZHNpX2Rpc3BsYXlfZW5hYmxlKTsKIAotc3RhdGljIHZvaWQgZHNpX2Rpc3BsYXlfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit2b2lkIG9tYXBkc3NfZHNpX2Rpc3BsYXlfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7CiAJRFNTREJHKCJkc2lfZGlzcGxheV9kaXNhYmxlXG4iKTsKIAorCVdBUk5fT04oIWRzaV9idXNfaXNfbG9ja2VkKCkpOworCiAJbXV0ZXhfbG9jaygmZHNpLmxvY2spOwotCWRzaV9idXNfbG9jaygpOwotCi0JaWYgKGRzc2Rldi0+c3RhdGUgPT0gT01BUF9EU1NfRElTUExBWV9ESVNBQkxFRCB8fAotCQkJZHNzZGV2LT5zdGF0ZSA9PSBPTUFQX0RTU19ESVNQTEFZX1NVU1BFTkRFRCkKLQkJZ290byBlbmQ7Ci0KLQlkc2kudXBkYXRlX21vZGUgPSBPTUFQX0RTU19VUERBVEVfRElTQUJMRUQ7Ci0JZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfRElTQUJMRUQ7CiAKIAlkc2lfZGlzcGxheV91bmluaXRfZGlzcGMoZHNzZGV2KTsKIApAQCAtMzM3MSwzMzcgKzMyMzUsMTcgQEAKIAlkc2lfZW5hYmxlX3BsbF9jbG9jaygwKTsKIAogCW9tYXBfZHNzX3N0b3BfZGV2aWNlKGRzc2Rldik7Ci1lbmQ6Ci0JZHNpX2J1c191bmxvY2soKTsKKwogCW11dGV4X3VubG9jaygmZHNpLmxvY2spOwogfQorRVhQT1JUX1NZTUJPTChvbWFwZHNzX2RzaV9kaXNwbGF5X2Rpc2FibGUpOwogCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3N1c3BlbmQoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoraW50IG9tYXBkc3NfZHNpX2VuYWJsZV90ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsIGJvb2wgZW5hYmxlKQogewotCURTU0RCRygiZHNpX2Rpc3BsYXlfc3VzcGVuZFxuIik7Ci0KLQltdXRleF9sb2NrKCZkc2kubG9jayk7Ci0JZHNpX2J1c19sb2NrKCk7Ci0KLQlpZiAoZHNzZGV2LT5zdGF0ZSA9PSBPTUFQX0RTU19ESVNQTEFZX0RJU0FCTEVEIHx8Ci0JCQlkc3NkZXYtPnN0YXRlID09IE9NQVBfRFNTX0RJU1BMQVlfU1VTUEVOREVEKQotCQlnb3RvIGVuZDsKLQotCWRzaS51cGRhdGVfbW9kZSA9IE9NQVBfRFNTX1VQREFURV9ESVNBQkxFRDsKLQlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9TVVNQRU5ERUQ7Ci0KLQlkc2lfZGlzcGxheV91bmluaXRfZGlzcGMoZHNzZGV2KTsKLQotCWRzaV9kaXNwbGF5X3VuaW5pdF9kc2koZHNzZGV2KTsKLQotCWVuYWJsZV9jbG9ja3MoMCk7Ci0JZHNpX2VuYWJsZV9wbGxfY2xvY2soMCk7Ci1lbmQ6Ci0JZHNpX2J1c191bmxvY2soKTsKLQltdXRleF91bmxvY2soJmRzaS5sb2NrKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3Jlc3VtZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0JaW50IHI7Ci0KLQlEU1NEQkcoImRzaV9kaXNwbGF5X3Jlc3VtZVxuIik7Ci0KLQltdXRleF9sb2NrKCZkc2kubG9jayk7Ci0JZHNpX2J1c19sb2NrKCk7Ci0KLQlpZiAoZHNzZGV2LT5zdGF0ZSAhPSBPTUFQX0RTU19ESVNQTEFZX1NVU1BFTkRFRCkgewotCQlEU1NFUlIoImRzc2RldiBub3Qgc3VzcGVuZGVkXG4iKTsKLQkJciA9IC1FSU5WQUw7Ci0JCWdvdG8gZXJyMDsKLQl9Ci0KLQllbmFibGVfY2xvY2tzKDEpOwotCWRzaV9lbmFibGVfcGxsX2Nsb2NrKDEpOwotCi0JciA9IF9kc2lfcmVzZXQoKTsKLQlpZiAocikKLQkJZ290byBlcnIxOwotCi0JZHNpX2NvcmVfaW5pdCgpOwotCi0JciA9IGRzaV9kaXNwbGF5X2luaXRfZGlzcGMoZHNzZGV2KTsKLQlpZiAocikKLQkJZ290byBlcnIxOwotCi0JciA9IGRzaV9kaXNwbGF5X2luaXRfZHNpKGRzc2Rldik7Ci0JaWYgKHIpCi0JCWdvdG8gZXJyMjsKLQotCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRTsKLQotCXIgPSBkc2lfc2V0X3RlKGRzc2RldiwgZHNpLnRlX2VuYWJsZWQpOwotCWlmIChyKQotCQlnb3RvIGVycjI7Ci0KLQlkc2lfc2V0X3VwZGF0ZV9tb2RlKGRzc2RldiwgZHNpLnVzZXJfdXBkYXRlX21vZGUpOwotCi0JZHNpX2J1c191bmxvY2soKTsKLQltdXRleF91bmxvY2soJmRzaS5sb2NrKTsKLQotCXJldHVybiAwOwotCi1lcnIyOgotCWRzaV9kaXNwbGF5X3VuaW5pdF9kaXNwYyhkc3NkZXYpOwotZXJyMToKLQllbmFibGVfY2xvY2tzKDApOwotCWRzaV9lbmFibGVfcGxsX2Nsb2NrKDApOwotZXJyMDoKLQlkc2lfYnVzX3VubG9jaygpOwotCW11dGV4X3VubG9jaygmZHNpLmxvY2spOwotCURTU0RCRygiZHNpX2Rpc3BsYXlfcmVzdW1lIEZBSUxFRFxuIik7Ci0JcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfdXBkYXRlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKLQkJCXUxNiB4LCB1MTYgeSwgdTE2IHcsIHUxNiBoKQotewotCWludCByID0gMDsKLQl1MTYgZHcsIGRoOwotCi0JRFNTREJHKCJkc2lfZGlzcGxheV91cGRhdGUoJWQsJWQgJWR4JWQpXG4iLCB4LCB5LCB3LCBoKTsKLQotCW11dGV4X2xvY2soJmRzaS5sb2NrKTsKLQotCWlmIChkc2kudXBkYXRlX21vZGUgIT0gT01BUF9EU1NfVVBEQVRFX01BTlVBTCkKLQkJZ290byBlbmQ7Ci0KLQlpZiAoZHNzZGV2LT5zdGF0ZSAhPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRSkKLQkJZ290byBlbmQ7Ci0KLQlkc3NkZXYtPmdldF9yZXNvbHV0aW9uKGRzc2RldiwgJmR3LCAmZGgpOwotCi0JaWYgICh4ID4gZHcgfHwgeSA+IGRoKQotCQlnb3RvIGVuZDsKLQotCWlmICh4ICsgdyA+IGR3KQotCQl3ID0gZHcgLSB4OwotCi0JaWYgKHkgKyBoID4gZGgpCi0JCWggPSBkaCAtIHk7Ci0KLQlpZiAodyA9PSAwIHx8IGggPT0gMCkKLQkJZ290byBlbmQ7Ci0KLQlpZiAodyA9PSAxKSB7Ci0JCXIgPSAtRUlOVkFMOwotCQlnb3RvIGVuZDsKLQl9Ci0KLQlkc2lfc2V0X3VwZGF0ZV9yZWdpb24oZHNzZGV2LCB4LCB5LCB3LCBoKTsKLQotCXdha2VfdXAoJmRzaS53YWl0cXVldWUpOwotCi1lbmQ6Ci0JbXV0ZXhfdW5sb2NrKCZkc2kubG9jayk7Ci0KLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9zeW5jKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlib29sIHdhaXQ7Ci0KLQlEU1NEQkcoImRzaV9kaXNwbGF5X3N5bmMoKVxuIik7Ci0KLQltdXRleF9sb2NrKCZkc2kubG9jayk7Ci0JZHNpX2J1c19sb2NrKCk7Ci0KLQlpZiAoZHNpLnVwZGF0ZV9tb2RlID09IE9NQVBfRFNTX1VQREFURV9NQU5VQUwgJiYKLQkJCWRzaS51cGRhdGVfcmVnaW9uLmRpcnR5KSB7Ci0JCUlOSVRfQ09NUExFVElPTihkc2kudXBkYXRlX2NvbXBsZXRpb24pOwotCQl3YWl0ID0gdHJ1ZTsKLQl9IGVsc2UgewotCQl3YWl0ID0gZmFsc2U7Ci0JfQotCi0JZHNpX2J1c191bmxvY2soKTsKLQltdXRleF91bmxvY2soJmRzaS5sb2NrKTsKLQotCWlmICh3YWl0KQotCQl3YWl0X2Zvcl9jb21wbGV0aW9uX2ludGVycnVwdGlibGUoJmRzaS51cGRhdGVfY29tcGxldGlvbik7Ci0KLQlEU1NEQkcoImRzaV9kaXNwbGF5X3N5bmMoKSBkb25lXG4iKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9zZXRfdXBkYXRlX21vZGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQllbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlIG1vZGUpCi17Ci0JaW50IHIgPSAwOwotCi0JRFNTREJHRigiJWQiLCBtb2RlKTsKLQotCW11dGV4X2xvY2soJmRzaS5sb2NrKTsKLQlkc2lfYnVzX2xvY2soKTsKLQotCWRzaS51c2VyX3VwZGF0ZV9tb2RlID0gbW9kZTsKLQlyID0gZHNpX3NldF91cGRhdGVfbW9kZShkc3NkZXYsIG1vZGUpOwotCi0JZHNpX2J1c191bmxvY2soKTsKLQltdXRleF91bmxvY2soJmRzaS5sb2NrKTsKLQotCXJldHVybiByOwotfQotCi1zdGF0aWMgZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSBkc2lfZGlzcGxheV9nZXRfdXBkYXRlX21vZGUoCi0JCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlyZXR1cm4gZHNpLnVwZGF0ZV9tb2RlOwotfQotCi0KLXN0YXRpYyBpbnQgZHNpX2Rpc3BsYXlfZW5hYmxlX3RlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwgYm9vbCBlbmFibGUpCi17Ci0JaW50IHIgPSAwOwotCi0JRFNTREJHRigiJWQiLCBlbmFibGUpOwotCi0JaWYgKCFkc3NkZXYtPmRyaXZlci0+ZW5hYmxlX3RlKQotCQlyZXR1cm4gLUVOT0VOVDsKLQotCWRzaV9idXNfbG9jaygpOwotCiAJZHNpLnRlX2VuYWJsZWQgPSBlbmFibGU7Ci0KLQlpZiAoZHNzZGV2LT5zdGF0ZSAhPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRSkKLQkJZ290byBlbmQ7Ci0KLQlyID0gZHNpX3NldF90ZShkc3NkZXYsIGVuYWJsZSk7Ci1lbmQ6Ci0JZHNpX2J1c191bmxvY2soKTsKLQotCXJldHVybiByOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X2dldF90ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0JcmV0dXJuIGRzaS50ZV9lbmFibGVkOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3NldF9yb3RhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LCB1OCByb3RhdGUpCi17Ci0KLQlEU1NEQkdGKCIlZCIsIHJvdGF0ZSk7Ci0KLQlpZiAoIWRzc2Rldi0+ZHJpdmVyLT5zZXRfcm90YXRlIHx8ICFkc3NkZXYtPmRyaXZlci0+Z2V0X3JvdGF0ZSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkc2lfYnVzX2xvY2soKTsKLQlkc3NkZXYtPmRyaXZlci0+c2V0X3JvdGF0ZShkc3NkZXYsIHJvdGF0ZSk7Ci0JaWYgKGRzaS51cGRhdGVfbW9kZSA9PSBPTUFQX0RTU19VUERBVEVfQVVUTykgewotCQl1MTYgdywgaDsKLQkJLyogdGhlIGRpc3BsYXkgZGltZW5zaW9ucyBtYXkgaGF2ZSBjaGFuZ2VkLCBzbyBzZXQgYSBuZXcKLQkJICogdXBkYXRlIHJlZ2lvbiAqLwotCQlkc3NkZXYtPmdldF9yZXNvbHV0aW9uKGRzc2RldiwgJncsICZoKTsKLQkJZHNpX3NldF91cGRhdGVfcmVnaW9uKGRzc2RldiwgMCwgMCwgdywgaCk7Ci0JfQotCWRzaV9idXNfdW5sb2NrKCk7Ci0KIAlyZXR1cm4gMDsKIH0KLQotc3RhdGljIHU4IGRzaV9kaXNwbGF5X2dldF9yb3RhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCWlmICghZHNzZGV2LT5kcml2ZXItPnNldF9yb3RhdGUgfHwgIWRzc2Rldi0+ZHJpdmVyLT5nZXRfcm90YXRlKQotCQlyZXR1cm4gMDsKLQotCXJldHVybiBkc3NkZXYtPmRyaXZlci0+Z2V0X3JvdGF0ZShkc3NkZXYpOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X3NldF9taXJyb3Ioc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LCBib29sIG1pcnJvcikKLXsKLQlEU1NEQkdGKCIlZCIsIG1pcnJvcik7Ci0KLQlpZiAoIWRzc2Rldi0+ZHJpdmVyLT5zZXRfbWlycm9yIHx8ICFkc3NkZXYtPmRyaXZlci0+Z2V0X21pcnJvcikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkc2lfYnVzX2xvY2soKTsKLQlkc3NkZXYtPmRyaXZlci0+c2V0X21pcnJvcihkc3NkZXYsIG1pcnJvcik7Ci0JZHNpX2J1c191bmxvY2soKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgYm9vbCBkc2lfZGlzcGxheV9nZXRfbWlycm9yKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlpZiAoIWRzc2Rldi0+ZHJpdmVyLT5zZXRfbWlycm9yIHx8ICFkc3NkZXYtPmRyaXZlci0+Z2V0X21pcnJvcikKLQkJcmV0dXJuIDA7Ci0KLQlyZXR1cm4gZHNzZGV2LT5kcml2ZXItPmdldF9taXJyb3IoZHNzZGV2KTsKLX0KLQotc3RhdGljIGludCBkc2lfZGlzcGxheV9ydW5fdGVzdChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsIGludCB0ZXN0X251bSkKLXsKLQlpbnQgcjsKLQotCWlmIChkc3NkZXYtPnN0YXRlICE9IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFKQotCQlyZXR1cm4gLUVJTzsKLQotCURTU0RCR0YoIiVkIiwgdGVzdF9udW0pOwotCi0JZHNpX2J1c19sb2NrKCk7Ci0KLQkvKiBydW4gdGVzdCBmaXJzdCBpbiBsb3cgc3BlZWQgbW9kZSAqLwotCWRzaV92Y19lbmFibGVfaHMoMCwgMCk7Ci0KLQlpZiAoZHNzZGV2LT5kcml2ZXItPnJ1bl90ZXN0KSB7Ci0JCXIgPSBkc3NkZXYtPmRyaXZlci0+cnVuX3Rlc3QoZHNzZGV2LCB0ZXN0X251bSk7Ci0JCWlmIChyKQotCQkJZ290byBlbmQ7Ci0JfQotCi0JLyogdGhlbiBpbiBoaWdoIHNwZWVkICovCi0JZHNpX3ZjX2VuYWJsZV9ocygwLCAxKTsKLQotCWlmIChkc3NkZXYtPmRyaXZlci0+cnVuX3Rlc3QpIHsKLQkJciA9IGRzc2Rldi0+ZHJpdmVyLT5ydW5fdGVzdChkc3NkZXYsIHRlc3RfbnVtKTsKLQkJaWYgKHIpCi0JCQlnb3RvIGVuZDsKLQl9Ci0KLWVuZDoKLQlkc2lfdmNfZW5hYmxlX2hzKDAsIDEpOwotCi0JZHNpX2J1c191bmxvY2soKTsKLQotCXJldHVybiByOwotfQotCi1zdGF0aWMgaW50IGRzaV9kaXNwbGF5X21lbW9yeV9yZWFkKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKLQkJdm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSwKLQkJdTE2IHgsIHUxNiB5LCB1MTYgdywgdTE2IGgpCi17Ci0JaW50IHI7Ci0KLQlEU1NEQkdGKCIiKTsKLQotCWlmICghZHNzZGV2LT5kcml2ZXItPm1lbW9yeV9yZWFkKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChkc3NkZXYtPnN0YXRlICE9IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFKQotCQlyZXR1cm4gLUVJTzsKLQotCWRzaV9idXNfbG9jaygpOwotCi0JciA9IGRzc2Rldi0+ZHJpdmVyLT5tZW1vcnlfcmVhZChkc3NkZXYsIGJ1Ziwgc2l6ZSwKLQkJCXgsIHksIHcsIGgpOwotCi0JLyogTWVtb3J5IHJlYWQgdXN1YWxseSBjaGFuZ2VzIHRoZSB1cGRhdGUgYXJlYS4gVGhpcyB3aWxsCi0JICogZm9yY2UgdGhlIG5leHQgdXBkYXRlIHRvIHJlLXNldCB0aGUgdXBkYXRlIGFyZWEgKi8KLQlkc2kuYWN0aXZlX3VwZGF0ZV9yZWdpb24uZGlydHkgPSB0cnVlOwotCi0JZHNpX2J1c191bmxvY2soKTsKLQotCXJldHVybiByOwotfQorRVhQT1JUX1NZTUJPTChvbWFwZHNzX2RzaV9lbmFibGVfdGUpOwogCiB2b2lkIGRzaV9nZXRfb3ZlcmxheV9maWZvX3RocmVzaG9sZHMoZW51bSBvbWFwX3BsYW5lIHBsYW5lLAogCQl1MzIgZmlmb19zaXplLCBlbnVtIG9tYXBfYnVyc3Rfc2l6ZSAqYnVyc3Rfc2l6ZSwKQEAgLTM3MjAsMjYgKzMyNjQsNiBAQAogewogCURTU0RCRygiRFNJIGluaXRcbiIpOwogCi0JZHNzZGV2LT5lbmFibGUgPSBkc2lfZGlzcGxheV9lbmFibGU7Ci0JZHNzZGV2LT5kaXNhYmxlID0gZHNpX2Rpc3BsYXlfZGlzYWJsZTsKLQlkc3NkZXYtPnN1c3BlbmQgPSBkc2lfZGlzcGxheV9zdXNwZW5kOwotCWRzc2Rldi0+cmVzdW1lID0gZHNpX2Rpc3BsYXlfcmVzdW1lOwotCWRzc2Rldi0+dXBkYXRlID0gZHNpX2Rpc3BsYXlfdXBkYXRlOwotCWRzc2Rldi0+c3luYyA9IGRzaV9kaXNwbGF5X3N5bmM7Ci0JZHNzZGV2LT5zZXRfdXBkYXRlX21vZGUgPSBkc2lfZGlzcGxheV9zZXRfdXBkYXRlX21vZGU7Ci0JZHNzZGV2LT5nZXRfdXBkYXRlX21vZGUgPSBkc2lfZGlzcGxheV9nZXRfdXBkYXRlX21vZGU7Ci0JZHNzZGV2LT5lbmFibGVfdGUgPSBkc2lfZGlzcGxheV9lbmFibGVfdGU7Ci0JZHNzZGV2LT5nZXRfdGUgPSBkc2lfZGlzcGxheV9nZXRfdGU7Ci0KLQlkc3NkZXYtPmdldF9yb3RhdGUgPSBkc2lfZGlzcGxheV9nZXRfcm90YXRlOwotCWRzc2Rldi0+c2V0X3JvdGF0ZSA9IGRzaV9kaXNwbGF5X3NldF9yb3RhdGU7Ci0KLQlkc3NkZXYtPmdldF9taXJyb3IgPSBkc2lfZGlzcGxheV9nZXRfbWlycm9yOwotCWRzc2Rldi0+c2V0X21pcnJvciA9IGRzaV9kaXNwbGF5X3NldF9taXJyb3I7Ci0KLQlkc3NkZXYtPnJ1bl90ZXN0ID0gZHNpX2Rpc3BsYXlfcnVuX3Rlc3Q7Ci0JZHNzZGV2LT5tZW1vcnlfcmVhZCA9IGRzaV9kaXNwbGF5X21lbW9yeV9yZWFkOwotCiAJLyogWFhYIHRoZXNlIHNob3VsZCBiZSBmaWd1cmVkIG91dCBkeW5hbWljYWxseSAqLwogCWRzc2Rldi0+Y2FwcyA9IE9NQVBfRFNTX0RJU1BMQVlfQ0FQX01BTlVBTF9VUERBVEUgfAogCQlPTUFQX0RTU19ESVNQTEFZX0NBUF9URUFSX0VMSU07CkBAIC0zNzU0LDkgKzMyNzgsNiBAQAogewogCXUzMiByZXY7CiAJaW50IHI7Ci0Jc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtID0gewotCQkuc2NoZWRfcHJpb3JpdHkgPSBNQVhfVVNFUl9SVF9QUklPLTEKLQl9OwogCiAJc3Bpbl9sb2NrX2luaXQoJmRzaS5lcnJvcnNfbG9jayk7CiAJZHNpLmVycm9ycyA9IDA7CkBAIC0zNzY3LDMxICszMjg4LDE5IEBACiAjZW5kaWYKIAogCWluaXRfY29tcGxldGlvbigmZHNpLmJ0YV9jb21wbGV0aW9uKTsKLQlpbml0X2NvbXBsZXRpb24oJmRzaS51cGRhdGVfY29tcGxldGlvbik7Ci0KLQlkc2kudGhyZWFkID0ga3RocmVhZF9jcmVhdGUoZHNpX3VwZGF0ZV90aHJlYWQsIE5VTEwsICJkc2kiKTsKLQlpZiAoSVNfRVJSKGRzaS50aHJlYWQpKSB7Ci0JCURTU0VSUigiY2Fubm90IGNyZWF0ZSBrdGhyZWFkXG4iKTsKLQkJciA9IFBUUl9FUlIoZHNpLnRocmVhZCk7Ci0JCWdvdG8gZXJyMDsKLQl9Ci0Jc2NoZWRfc2V0c2NoZWR1bGVyKGRzaS50aHJlYWQsIFNDSEVEX0ZJRk8sICZwYXJhbSk7Ci0KLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkc2kud2FpdHF1ZXVlKTsKLQlzcGluX2xvY2tfaW5pdCgmZHNpLnVwZGF0ZV9sb2NrKTsKIAogCW11dGV4X2luaXQoJmRzaS5sb2NrKTsKLQltdXRleF9pbml0KCZkc2kuYnVzX2xvY2spOworCXNlbWFfaW5pdCgmZHNpLmJ1c19sb2NrLCAxKTsKKworCUlOSVRfV09SSygmZHNpLmZyYW1lZG9uZV93b3JrLCBkc2lfZnJhbWVkb25lX3dvcmtfY2FsbGJhY2spOworCUlOSVRfREVMQVlFRF9XT1JLX0RFRkVSUkFCTEUoJmRzaS5mcmFtZWRvbmVfdGltZW91dF93b3JrLAorCQkJZHNpX2ZyYW1lZG9uZV90aW1lb3V0X3dvcmtfY2FsbGJhY2spOwogCiAjaWZkZWYgRFNJX0NBVENIX01JU1NJTkdfVEUKIAlpbml0X3RpbWVyKCZkc2kudGVfdGltZXIpOwogCWRzaS50ZV90aW1lci5mdW5jdGlvbiA9IGRzaV90ZV90aW1lb3V0OwogCWRzaS50ZV90aW1lci5kYXRhID0gMDsKICNlbmRpZgotCi0JZHNpLnVwZGF0ZV9tb2RlID0gT01BUF9EU1NfVVBEQVRFX0RJU0FCTEVEOwotCWRzaS51c2VyX3VwZGF0ZV9tb2RlID0gT01BUF9EU1NfVVBEQVRFX0RJU0FCTEVEOwotCiAJZHNpLmJhc2UgPSBpb3JlbWFwKERTSV9CQVNFLCBEU0lfU1pfUkVHUyk7CiAJaWYgKCFkc2kuYmFzZSkgewogCQlEU1NFUlIoImNhbid0IGlvcmVtYXAgRFNJXG4iKTsKQEAgLTM3OTksNyArMzMwOCw3IEBACiAJCWdvdG8gZXJyMTsKIAl9CiAKLQlkc2kudmRkc19kc2lfcmVnID0gcmVndWxhdG9yX2dldCgmcGRldi0+ZGV2LCAidmRkc19kc2kiKTsKKwlkc2kudmRkc19kc2lfcmVnID0gZHNzX2dldF92ZGRzX2RzaSgpOwogCWlmIChJU19FUlIoZHNpLnZkZHNfZHNpX3JlZykpIHsKIAkJaW91bm1hcChkc2kuYmFzZSk7CiAJCURTU0VSUigiY2FuJ3QgZ2V0IFZERFNfRFNJIHJlZ3VsYXRvclxuIik7CkBAIC0zODE1LDIzICszMzI0LDE1IEBACiAKIAllbmFibGVfY2xvY2tzKDApOwogCi0Jd2FrZV91cF9wcm9jZXNzKGRzaS50aHJlYWQpOwotCiAJcmV0dXJuIDA7CiBlcnIyOgogCWlvdW5tYXAoZHNpLmJhc2UpOwogZXJyMToKLQlrdGhyZWFkX3N0b3AoZHNpLnRocmVhZCk7Ci1lcnIwOgogCXJldHVybiByOwogfQogCiB2b2lkIGRzaV9leGl0KHZvaWQpCiB7Ci0Ja3RocmVhZF9zdG9wKGRzaS50aHJlYWQpOwotCi0JcmVndWxhdG9yX3B1dChkc2kudmRkc19kc2lfcmVnKTsKLQogCWlvdW5tYXAoZHNpLmJhc2UpOwogCiAJRFNTREJHKCJvbWFwX2RzaV9leGl0XG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzcy5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZHNzLmMKaW5kZXggMGEyNmI3ZC4uODI1NGE0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZHNzLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvZHNzLmMKQEAgLTY4LDYgKzY4LDkgQEAKIAlzdHJ1Y3QgZHNzX2Nsb2NrX2luZm8gY2FjaGVfZHNzX2NpbmZvOwogCXN0cnVjdCBkaXNwY19jbG9ja19pbmZvIGNhY2hlX2Rpc3BjX2NpbmZvOwogCisJZW51bSBkc3NfY2xrX3NvdXJjZSBkc2lfY2xrX3NvdXJjZTsKKwllbnVtIGRzc19jbGtfc291cmNlIGRpc3BjX2Nsa19zb3VyY2U7CisKIAl1MzIJCWN0eFtEU1NfU1pfUkVHUyAvIHNpemVvZih1MzIpXTsKIH0gZHNzOwogCkBAIC0yNDcsMjMgKzI1MCw0MiBAQAogI3VuZGVmIERVTVBSRUcKIH0KIAotdm9pZCBkc3Nfc2VsZWN0X2Nsa19zb3VyY2UoYm9vbCBkc2ksIGJvb2wgZGlzcGMpCit2b2lkIGRzc19zZWxlY3RfZGlzcGNfY2xrX3NvdXJjZShlbnVtIGRzc19jbGtfc291cmNlIGNsa19zcmMpCiB7Ci0JdTMyIHI7Ci0JciA9IGRzc19yZWFkX3JlZyhEU1NfQ09OVFJPTCk7Ci0JciA9IEZMRF9NT0QociwgZHNpLCAxLCAxKTsJLyogRFNJX0NMS19TV0lUQ0ggKi8KLQlyID0gRkxEX01PRChyLCBkaXNwYywgMCwgMCk7CS8qIERJU1BDX0NMS19TV0lUQ0ggKi8KLQlkc3Nfd3JpdGVfcmVnKERTU19DT05UUk9MLCByKTsKKwlpbnQgYjsKKworCUJVR19PTihjbGtfc3JjICE9IERTU19TUkNfRFNJMV9QTExfRkNMSyAmJgorCQkJY2xrX3NyYyAhPSBEU1NfU1JDX0RTUzFfQUxXT05fRkNMSyk7CisKKwliID0gY2xrX3NyYyA9PSBEU1NfU1JDX0RTUzFfQUxXT05fRkNMSyA/IDAgOiAxOworCisJUkVHX0ZMRF9NT0QoRFNTX0NPTlRST0wsIGIsIDAsIDApOwkvKiBESVNQQ19DTEtfU1dJVENIICovCisKKwlkc3MuZGlzcGNfY2xrX3NvdXJjZSA9IGNsa19zcmM7CiB9CiAKLWludCBkc3NfZ2V0X2RzaV9jbGtfc291cmNlKHZvaWQpCit2b2lkIGRzc19zZWxlY3RfZHNpX2Nsa19zb3VyY2UoZW51bSBkc3NfY2xrX3NvdXJjZSBjbGtfc3JjKQogewotCXJldHVybiBGTERfR0VUKGRzc19yZWFkX3JlZyhEU1NfQ09OVFJPTCksIDEsIDEpOworCWludCBiOworCisJQlVHX09OKGNsa19zcmMgIT0gRFNTX1NSQ19EU0kyX1BMTF9GQ0xLICYmCisJCQljbGtfc3JjICE9IERTU19TUkNfRFNTMV9BTFdPTl9GQ0xLKTsKKworCWIgPSBjbGtfc3JjID09IERTU19TUkNfRFNTMV9BTFdPTl9GQ0xLID8gMCA6IDE7CisKKwlSRUdfRkxEX01PRChEU1NfQ09OVFJPTCwgYiwgMSwgMSk7CS8qIERTSV9DTEtfU1dJVENIICovCisKKwlkc3MuZHNpX2Nsa19zb3VyY2UgPSBjbGtfc3JjOwogfQogCi1pbnQgZHNzX2dldF9kaXNwY19jbGtfc291cmNlKHZvaWQpCitlbnVtIGRzc19jbGtfc291cmNlIGRzc19nZXRfZGlzcGNfY2xrX3NvdXJjZSh2b2lkKQogewotCXJldHVybiBGTERfR0VUKGRzc19yZWFkX3JlZyhEU1NfQ09OVFJPTCksIDAsIDApOworCXJldHVybiBkc3MuZGlzcGNfY2xrX3NvdXJjZTsKK30KKworZW51bSBkc3NfY2xrX3NvdXJjZSBkc3NfZ2V0X2RzaV9jbGtfc291cmNlKHZvaWQpCit7CisJcmV0dXJuIGRzcy5kc2lfY2xrX3NvdXJjZTsKIH0KIAogLyogY2FsY3VsYXRlIGNsb2NrIHJhdGVzIHVzaW5nIGRpdmlkZXJzIGluIGNpbmZvICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9kc3MuaCBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzcy5oCmluZGV4IDJiY2IxMjQuLjI0MzI2YTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzcy5oCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL2Rzcy5oCkBAIC0xMTksNiArMTE5LDEyIEBACiAJRFNTX0NMS185Nk0JPSAxIDw8IDQsCiB9OwogCitlbnVtIGRzc19jbGtfc291cmNlIHsKKwlEU1NfU1JDX0RTSTFfUExMX0ZDTEssCisJRFNTX1NSQ19EU0kyX1BMTF9GQ0xLLAorCURTU19TUkNfRFNTMV9BTFdPTl9GQ0xLLAorfTsKKwogc3RydWN0IGRzc19jbG9ja19pbmZvIHsKIAkvKiByYXRlcyB0aGF0IHdlIGdldCB3aXRoIGRpdmlkZXJzIGJlbG93ICovCiAJdW5zaWduZWQgbG9uZyBmY2s7CkBAIC0xNjksNiArMTc1LDkgQEAKIGludCBkc3NfbmVlZF9jdHhfcmVzdG9yZSh2b2lkKTsKIHZvaWQgZHNzX2R1bXBfY2xvY2tzKHN0cnVjdCBzZXFfZmlsZSAqcyk7CiBzdHJ1Y3QgYnVzX3R5cGUgKmRzc19nZXRfYnVzKHZvaWQpOworc3RydWN0IHJlZ3VsYXRvciAqZHNzX2dldF92ZGRzX2RzaSh2b2lkKTsKK3N0cnVjdCByZWd1bGF0b3IgKmRzc19nZXRfdmRkc19zZGkodm9pZCk7CitzdHJ1Y3QgcmVndWxhdG9yICpkc3NfZ2V0X3ZkZGFfZGFjKHZvaWQpOwogCiAvKiBkaXNwbGF5ICovCiBpbnQgZHNzX3N1c3BlbmRfYWxsX2RldmljZXModm9pZCk7CkBAIC0yMTYsOSArMjI1LDExIEBACiBpbnQgZHNzX3NkaV9lbmFibGUodm9pZCk7CiB2b2lkIGRzc19zZGlfZGlzYWJsZSh2b2lkKTsKIAotdm9pZCBkc3Nfc2VsZWN0X2Nsa19zb3VyY2UoYm9vbCBkc2ksIGJvb2wgZGlzcGMpOwotaW50IGRzc19nZXRfZHNpX2Nsa19zb3VyY2Uodm9pZCk7Ci1pbnQgZHNzX2dldF9kaXNwY19jbGtfc291cmNlKHZvaWQpOwordm9pZCBkc3Nfc2VsZWN0X2Rpc3BjX2Nsa19zb3VyY2UoZW51bSBkc3NfY2xrX3NvdXJjZSBjbGtfc3JjKTsKK3ZvaWQgZHNzX3NlbGVjdF9kc2lfY2xrX3NvdXJjZShlbnVtIGRzc19jbGtfc291cmNlIGNsa19zcmMpOworZW51bSBkc3NfY2xrX3NvdXJjZSBkc3NfZ2V0X2Rpc3BjX2Nsa19zb3VyY2Uodm9pZCk7CitlbnVtIGRzc19jbGtfc291cmNlIGRzc19nZXRfZHNpX2Nsa19zb3VyY2Uodm9pZCk7CisKIHZvaWQgZHNzX3NldF92ZW5jX291dHB1dChlbnVtIG9tYXBfZHNzX3ZlbmNfdHlwZSB0eXBlKTsKIHZvaWQgZHNzX3NldF9kYWNfcHdyZG5fYmd6KGJvb2wgZW5hYmxlKTsKIApAQCAtMjYxLDcgKzI3Miw3IEBACiAJCXUzMiAqZmlmb19sb3csIHUzMiAqZmlmb19oaWdoKTsKIAogLyogRFBJICovCi1pbnQgZHBpX2luaXQodm9pZCk7CitpbnQgZHBpX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiB2b2lkIGRwaV9leGl0KHZvaWQpOwogaW50IGRwaV9pbml0X2Rpc3BsYXkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KTsKIApAQCAtMzEzLDggKzMyNCw4IEBACiAKIGJvb2wgZGlzcGNfZ29fYnVzeShlbnVtIG9tYXBfY2hhbm5lbCBjaGFubmVsKTsKIHZvaWQgZGlzcGNfZ28oZW51bSBvbWFwX2NoYW5uZWwgY2hhbm5lbCk7Ci12b2lkIGRpc3BjX2VuYWJsZV9sY2Rfb3V0KGJvb2wgZW5hYmxlKTsKLXZvaWQgZGlzcGNfZW5hYmxlX2RpZ2l0X291dChib29sIGVuYWJsZSk7Cit2b2lkIGRpc3BjX2VuYWJsZV9jaGFubmVsKGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwsIGJvb2wgZW5hYmxlKTsKK2Jvb2wgZGlzcGNfaXNfY2hhbm5lbF9lbmFibGVkKGVudW0gb21hcF9jaGFubmVsIGNoYW5uZWwpOwogaW50IGRpc3BjX2VuYWJsZV9wbGFuZShlbnVtIG9tYXBfcGxhbmUgcGxhbmUsIGJvb2wgZW5hYmxlKTsKIHZvaWQgZGlzcGNfZW5hYmxlX3JlcGxpY2F0aW9uKGVudW0gb21hcF9wbGFuZSBwbGFuZSwgYm9vbCBlbmFibGUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9tYW5hZ2VyLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9tYW5hZ2VyLmMKaW5kZXggMjdkOWM0Ni4uOWFjZWYwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvbWFuYWdlci5jCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL21hbmFnZXIuYwpAQCAtMzQxLDcgKzM0MSw3IEBACiAJcmV0dXJuIG1hbmFnZXJfYXR0ci0+c3RvcmUobWFuYWdlciwgYnVmLCBzaXplKTsKIH0KIAotc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgbWFuYWdlcl9zeXNmc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBtYW5hZ2VyX3N5c2ZzX29wcyA9IHsKIAkuc2hvdyA9IG1hbmFnZXJfYXR0cl9zaG93LAogCS5zdG9yZSA9IG1hbmFnZXJfYXR0cl9zdG9yZSwKIH07CkBAIC01MDEsNiArNTAxLDE5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgZHNzX21ncl93YWl0X2Zvcl92c3luYyhzdHJ1Y3Qgb21hcF9vdmVybGF5X21hbmFnZXIgKm1ncikKK3sKKwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDUwMCk7CisJdTMyIGlycTsKKworCWlmIChtZ3ItPmRldmljZS0+dHlwZSA9PSBPTUFQX0RJU1BMQVlfVFlQRV9WRU5DKQorCQlpcnEgPSBESVNQQ19JUlFfRVZTWU5DX09ERDsKKwllbHNlCisJCWlycSA9IERJU1BDX0lSUV9WU1lOQzsKKworCXJldHVybiBvbWFwX2Rpc3BjX3dhaXRfZm9yX2lycV9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoaXJxLCB0aW1lb3V0KTsKK30KKwogc3RhdGljIGludCBkc3NfbWdyX3dhaXRfZm9yX2dvKHN0cnVjdCBvbWFwX292ZXJsYXlfbWFuYWdlciAqbWdyKQogewogCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoNTAwKTsKQEAgLTUwOSwxNyArNTIyLDE4IEBACiAJdTMyIGlycTsKIAlpbnQgcjsKIAlpbnQgaTsKKwlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYgPSBtZ3ItPmRldmljZTsKIAotCWlmICghbWdyLT5kZXZpY2UpCisJaWYgKCFkc3NkZXYpCiAJCXJldHVybiAwOwogCi0JaWYgKG1nci0+ZGV2aWNlLT50eXBlID09IE9NQVBfRElTUExBWV9UWVBFX1ZFTkMpIHsKKwlpZiAoZHNzZGV2LT50eXBlID09IE9NQVBfRElTUExBWV9UWVBFX1ZFTkMpIHsKIAkJaXJxID0gRElTUENfSVJRX0VWU1lOQ19PREQgfCBESVNQQ19JUlFfRVZTWU5DX0VWRU47CiAJCWNoYW5uZWwgPSBPTUFQX0RTU19DSEFOTkVMX0RJR0lUOwogCX0gZWxzZSB7Ci0JCWlmIChtZ3ItPmRldmljZS0+Y2FwcyAmIE9NQVBfRFNTX0RJU1BMQVlfQ0FQX01BTlVBTF9VUERBVEUpIHsKKwkJaWYgKGRzc2Rldi0+Y2FwcyAmIE9NQVBfRFNTX0RJU1BMQVlfQ0FQX01BTlVBTF9VUERBVEUpIHsKIAkJCWVudW0gb21hcF9kc3NfdXBkYXRlX21vZGUgbW9kZTsKLQkJCW1vZGUgPSBtZ3ItPmRldmljZS0+Z2V0X3VwZGF0ZV9tb2RlKG1nci0+ZGV2aWNlKTsKKwkJCW1vZGUgPSBkc3NkZXYtPmRyaXZlci0+Z2V0X3VwZGF0ZV9tb2RlKGRzc2Rldik7CiAJCQlpZiAobW9kZSAhPSBPTUFQX0RTU19VUERBVEVfQVVUTykKIAkJCQlyZXR1cm4gMDsKIApAQCAtNTkyLDcgKzYwNiw3IEBACiAJfSBlbHNlIHsKIAkJaWYgKGRzc2Rldi0+Y2FwcyAmIE9NQVBfRFNTX0RJU1BMQVlfQ0FQX01BTlVBTF9VUERBVEUpIHsKIAkJCWVudW0gb21hcF9kc3NfdXBkYXRlX21vZGUgbW9kZTsKLQkJCW1vZGUgPSBkc3NkZXYtPmdldF91cGRhdGVfbW9kZShkc3NkZXYpOworCQkJbW9kZSA9IGRzc2Rldi0+ZHJpdmVyLT5nZXRfdXBkYXRlX21vZGUoZHNzZGV2KTsKIAkJCWlmIChtb2RlICE9IE9NQVBfRFNTX1VQREFURV9BVVRPKQogCQkJCXJldHVybiAwOwogCkBAIC0xMDY0LDcgKzEwNzgsNyBAQAogCQltYy0+c2hhZG93X2RpcnR5ID0gZmFsc2U7CiAJfQogCi0JZGlzcGNfZW5hYmxlX2xjZF9vdXQoMSk7CisJZHNzZGV2LT5tYW5hZ2VyLT5lbmFibGUoZHNzZGV2LT5tYW5hZ2VyKTsKIH0KIAogc3RhdGljIHZvaWQgZHNzX2FwcGx5X2lycV9oYW5kbGVyKHZvaWQgKmRhdGEsIHUzMiBtYXNrKQpAQCAtMTE5Niw3ICsxMjEwLDggQEAKIAogCQlvYy0+bWFudWFsX3VwZGF0ZSA9CiAJCQlkc3NkZXYtPmNhcHMgJiBPTUFQX0RTU19ESVNQTEFZX0NBUF9NQU5VQUxfVVBEQVRFICYmCi0JCQlkc3NkZXYtPmdldF91cGRhdGVfbW9kZShkc3NkZXYpICE9IE9NQVBfRFNTX1VQREFURV9BVVRPOworCQkJZHNzZGV2LT5kcml2ZXItPmdldF91cGRhdGVfbW9kZShkc3NkZXYpICE9CisJCQkJT01BUF9EU1NfVVBEQVRFX0FVVE87CiAKIAkJKytudW1fcGxhbmVzX2VuYWJsZWQ7CiAJfQpAQCAtMTIzNyw3ICsxMjUyLDggQEAKIAogCQltYy0+bWFudWFsX3VwZGF0ZSA9CiAJCQlkc3NkZXYtPmNhcHMgJiBPTUFQX0RTU19ESVNQTEFZX0NBUF9NQU5VQUxfVVBEQVRFICYmCi0JCQlkc3NkZXYtPmdldF91cGRhdGVfbW9kZShkc3NkZXYpICE9IE9NQVBfRFNTX1VQREFURV9BVVRPOworCQkJZHNzZGV2LT5kcml2ZXItPmdldF91cGRhdGVfbW9kZShkc3NkZXYpICE9CisJCQkJT01BUF9EU1NfVVBEQVRFX0FVVE87CiAJfQogCiAJLyogWFhYIFRPRE86IFRyeSB0byBnZXQgZmlmb21lcmdlIHdvcmtpbmcuIFRoZSBwcm9ibGVtIGlzIHRoYXQgaXQKQEAgLTEzNTEsNiArMTM2NywxOCBAQAogCSppbmZvID0gbWdyLT5pbmZvOwogfQogCitzdGF0aWMgaW50IGRzc19tZ3JfZW5hYmxlKHN0cnVjdCBvbWFwX292ZXJsYXlfbWFuYWdlciAqbWdyKQoreworCWRpc3BjX2VuYWJsZV9jaGFubmVsKG1nci0+aWQsIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRzc19tZ3JfZGlzYWJsZShzdHJ1Y3Qgb21hcF9vdmVybGF5X21hbmFnZXIgKm1ncikKK3sKKwlkaXNwY19lbmFibGVfY2hhbm5lbChtZ3ItPmlkLCAwKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgb21hcF9kc3NfYWRkX292ZXJsYXlfbWFuYWdlcihzdHJ1Y3Qgb21hcF9vdmVybGF5X21hbmFnZXIgKm1hbmFnZXIpCiB7CiAJKytudW1fbWFuYWdlcnM7CkBAIC0xMzk0LDYgKzE0MjIsMTAgQEAKIAkJbWdyLT5zZXRfbWFuYWdlcl9pbmZvID0gJm9tYXBfZHNzX21ncl9zZXRfaW5mbzsKIAkJbWdyLT5nZXRfbWFuYWdlcl9pbmZvID0gJm9tYXBfZHNzX21ncl9nZXRfaW5mbzsKIAkJbWdyLT53YWl0X2Zvcl9nbyA9ICZkc3NfbWdyX3dhaXRfZm9yX2dvOworCQltZ3ItPndhaXRfZm9yX3ZzeW5jID0gJmRzc19tZ3Jfd2FpdF9mb3JfdnN5bmM7CisKKwkJbWdyLT5lbmFibGUgPSAmZHNzX21ncl9lbmFibGU7CisJCW1nci0+ZGlzYWJsZSA9ICZkc3NfbWdyX2Rpc2FibGU7CiAKIAkJbWdyLT5jYXBzID0gT01BUF9EU1NfT1ZMX01HUl9DQVBfRElTUEM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL292ZXJsYXkuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL292ZXJsYXkuYwppbmRleCBiN2Y5YTczLi5hZWQzZjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9vdmVybGF5LmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3Mvb3ZlcmxheS5jCkBAIC0zMjAsNyArMzIwLDcgQEAKIAlyZXR1cm4gb3ZlcmxheV9hdHRyLT5zdG9yZShvdmVybGF5LCBidWYsIHNpemUpOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBvdmVybGF5X3N5c2ZzX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIG92ZXJsYXlfc3lzZnNfb3BzID0gewogCS5zaG93ID0gb3ZlcmxheV9hdHRyX3Nob3csCiAJLnN0b3JlID0gb3ZlcmxheV9hdHRyX3N0b3JlLAogfTsKQEAgLTM1MCw3ICszNTAsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlkc3NkZXYtPmdldF9yZXNvbHV0aW9uKGRzc2RldiwgJmR3LCAmZGgpOworCWRzc2Rldi0+ZHJpdmVyLT5nZXRfcmVzb2x1dGlvbihkc3NkZXYsICZkdywgJmRoKTsKIAogCURTU0RCRygiY2hlY2tfb3ZlcmxheSAlZDogKCVkLCVkICVkeCVkIC0+ICVkeCVkKSBkaXNwICglZHglZClcbiIsCiAJCQlvdmwtPmlkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvcmZiaS5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvcmZiaS5jCmluZGV4IGI5MzY0OTUuLmNjMjNmNTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL3JmYmkuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9yZmJpLmMKQEAgLTM2LDggKzM2LDYgQEAKICNpbmNsdWRlIDxwbGF0L2Rpc3BsYXkuaD4KICNpbmNsdWRlICJkc3MuaCIKIAotLyojZGVmaW5lIE1FQVNVUkVfUEVSRiovCi0KICNkZWZpbmUgUkZCSV9CQVNFICAgICAgICAgICAgICAgMHg0ODA1MDgwMAogCiBzdHJ1Y3QgcmZiaV9yZWcgeyB1MTYgaWR4OyB9OwpAQCAtNjYsOCArNjQsNiBAQAogI2RlZmluZSBSRkJJX1ZTWU5DX1dJRFRICVJGQklfUkVHKDB4MDA5MCkKICNkZWZpbmUgUkZCSV9IU1lOQ19XSURUSAlSRkJJX1JFRygweDAwOTQpCiAKLSNkZWZpbmUgUkZCSV9DTURfRklGT19MRU5fQllURVMgKDE2ICogc2l6ZW9mKHN0cnVjdCB1cGRhdGVfcGFyYW0pKQotCiAjZGVmaW5lIFJFR19GTERfTU9EKGlkeCwgdmFsLCBzdGFydCwgZW5kKSBcCiAJcmZiaV93cml0ZV9yZWcoaWR4LCBGTERfTU9EKHJmYmlfcmVhZF9yZWcoaWR4KSwgdmFsLCBzdGFydCwgZW5kKSkKIApAQCAtMTAyLDcgKzk4LDYgQEAKIAogc3RhdGljIGludCByZmJpX2NvbnZlcnRfdGltaW5ncyhzdHJ1Y3QgcmZiaV90aW1pbmdzICp0KTsKIHN0YXRpYyB2b2lkIHJmYmlfZ2V0X2Nsa19pbmZvKHUzMiAqY2xrX3BlcmlvZCwgdTMyICptYXhfY2xrX2Rpdik7Ci1zdGF0aWMgdm9pZCBwcm9jZXNzX2NtZF9maWZvKHZvaWQpOwogCiBzdGF0aWMgc3RydWN0IHsKIAl2b2lkIF9faW9tZW0JKmJhc2U7CkBAIC0xMjUsMTEgKzEyMCw2IEBACiAJc3RydWN0IGNvbXBsZXRpb24gY21kX2RvbmU7CiAJYXRvbWljX3QgICAgICAgICAgY21kX2ZpZm9fZnVsbDsKIAlhdG9taWNfdCAgICAgICAgICBjbWRfcGVuZGluZzsKLSNpZmRlZiBNRUFTVVJFX1BFUkYKLQl1bnNpZ25lZCBwZXJmX2J5dGVzOwotCWt0aW1lX3QgcGVyZl9zZXR1cF90aW1lOwotCWt0aW1lX3QgcGVyZl9zdGFydF90aW1lOwotI2VuZGlmCiB9IHJmYmk7CiAKIHN0cnVjdCB1cGRhdGVfcmVnaW9uIHsKQEAgLTEzOSwxNiArMTI5LDYgQEAKIAl1MTYgICAgIGg7CiB9OwogCi1zdHJ1Y3QgdXBkYXRlX3BhcmFtIHsKLQl1OCByZmJpX21vZHVsZTsKLQl1OCBjbWQ7Ci0KLQl1bmlvbiB7Ci0JCXN0cnVjdCB1cGRhdGVfcmVnaW9uIHI7Ci0JCXN0cnVjdCBjb21wbGV0aW9uICpzeW5jOwotCX0gcGFyOwotfTsKLQogc3RhdGljIGlubGluZSB2b2lkIHJmYmlfd3JpdGVfcmVnKGNvbnN0IHN0cnVjdCByZmJpX3JlZyBpZHgsIHUzMiB2YWwpCiB7CiAJX19yYXdfd3JpdGVsKHZhbCwgcmZiaS5iYXNlICsgaWR4LmlkeCk7CkBAIC0zMjEsNTUgKzMwMSw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKG9tYXBfcmZiaV93cml0ZV9waXhlbHMpOwogCi0jaWZkZWYgTUVBU1VSRV9QRVJGCi1zdGF0aWMgdm9pZCBwZXJmX21hcmtfc2V0dXAodm9pZCkKLXsKLQlyZmJpLnBlcmZfc2V0dXBfdGltZSA9IGt0aW1lX2dldCgpOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmX21hcmtfc3RhcnQodm9pZCkKLXsKLQlyZmJpLnBlcmZfc3RhcnRfdGltZSA9IGt0aW1lX2dldCgpOwotfQotCi1zdGF0aWMgdm9pZCBwZXJmX3Nob3coY29uc3QgY2hhciAqbmFtZSkKLXsKLQlrdGltZV90IHQsIHNldHVwX3RpbWUsIHRyYW5zX3RpbWU7Ci0JdTMyIHRvdGFsX2J5dGVzOwotCXUzMiBzZXR1cF91cywgdHJhbnNfdXMsIHRvdGFsX3VzOwotCi0JdCA9IGt0aW1lX2dldCgpOwotCi0Jc2V0dXBfdGltZSA9IGt0aW1lX3N1YihyZmJpLnBlcmZfc3RhcnRfdGltZSwgcmZiaS5wZXJmX3NldHVwX3RpbWUpOwotCXNldHVwX3VzID0gKHUzMilrdGltZV90b191cyhzZXR1cF90aW1lKTsKLQlpZiAoc2V0dXBfdXMgPT0gMCkKLQkJc2V0dXBfdXMgPSAxOwotCi0JdHJhbnNfdGltZSA9IGt0aW1lX3N1Yih0LCByZmJpLnBlcmZfc3RhcnRfdGltZSk7Ci0JdHJhbnNfdXMgPSAodTMyKWt0aW1lX3RvX3VzKHRyYW5zX3RpbWUpOwotCWlmICh0cmFuc191cyA9PSAwKQotCQl0cmFuc191cyA9IDE7Ci0KLQl0b3RhbF91cyA9IHNldHVwX3VzICsgdHJhbnNfdXM7Ci0KLQl0b3RhbF9ieXRlcyA9IHJmYmkucGVyZl9ieXRlczsKLQotCURTU0lORk8oIiVzIHVwZGF0ZSAldSB1cyArICV1IHVzID0gJXUgdXMgKCV1SHopLCAldSBieXRlcywgIgotCQkJIiV1IGtieXRlcy9zZWNcbiIsCi0JCQluYW1lLAotCQkJc2V0dXBfdXMsCi0JCQl0cmFuc191cywKLQkJCXRvdGFsX3VzLAotCQkJMTAwMCoxMDAwIC8gdG90YWxfdXMsCi0JCQl0b3RhbF9ieXRlcywKLQkJCXRvdGFsX2J5dGVzICogMTAwMCAvIHRvdGFsX3VzKTsKLX0KLSNlbHNlCi0jZGVmaW5lIHBlcmZfbWFya19zZXR1cCgpCi0jZGVmaW5lIHBlcmZfbWFya19zdGFydCgpCi0jZGVmaW5lIHBlcmZfc2hvdyh4KQotI2VuZGlmCi0KIHZvaWQgcmZiaV90cmFuc2Zlcl9hcmVhKHUxNiB3aWR0aCwgdTE2IGhlaWdodCwKIAkJCSAgICAgdm9pZCAoY2FsbGJhY2spKHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKQogewpAQCAtMzgyLDcgKzMxMyw3IEBACiAKIAlkaXNwY19zZXRfbGNkX3NpemUod2lkdGgsIGhlaWdodCk7CiAKLQlkaXNwY19lbmFibGVfbGNkX291dCgxKTsKKwlkaXNwY19lbmFibGVfY2hhbm5lbChPTUFQX0RTU19DSEFOTkVMX0xDRCwgdHJ1ZSk7CiAKIAlyZmJpLmZyYW1lZG9uZV9jYWxsYmFjayA9IGNhbGxiYWNrOwogCXJmYmkuZnJhbWVkb25lX2NhbGxiYWNrX2RhdGEgPSBkYXRhOwpAQCAtMzk2LDggKzMyNyw2IEBACiAJaWYgKCFyZmJpLnRlX2VuYWJsZWQpCiAJCWwgPSBGTERfTU9EKGwsIDEsIDQsIDQpOyAvKiBJVEUgKi8KIAotCXBlcmZfbWFya19zdGFydCgpOwotCiAJcmZiaV93cml0ZV9yZWcoUkZCSV9DT05UUk9MLCBsKTsKIH0KIApAQCAtNDA3LDggKzMzNiw2IEBACiAKIAlEU1NEQkcoIkZSQU1FRE9ORVxuIik7CiAKLQlwZXJmX3Nob3coIkRJU1BDIik7Ci0KIAlSRUdfRkxEX01PRChSRkJJX0NPTlRST0wsIDAsIDAsIDApOwogCiAJcmZiaV9lbmFibGVfY2xvY2tzKDApOwpAQCAtNDE2LDExICszNDMsMTAgQEAKIAljYWxsYmFjayA9IHJmYmkuZnJhbWVkb25lX2NhbGxiYWNrOwogCXJmYmkuZnJhbWVkb25lX2NhbGxiYWNrID0gTlVMTDsKIAotCS8qY2FsbGJhY2socmZiaS5mcmFtZWRvbmVfY2FsbGJhY2tfZGF0YSk7Ki8KKwlpZiAoY2FsbGJhY2sgIT0gTlVMTCkKKwkJY2FsbGJhY2socmZiaS5mcmFtZWRvbmVfY2FsbGJhY2tfZGF0YSk7CiAKIAlhdG9taWNfc2V0KCZyZmJpLmNtZF9wZW5kaW5nLCAwKTsKLQotCXByb2Nlc3NfY21kX2ZpZm8oKTsKIH0KIAogI2lmIDEgLyogVkVSQk9TRSAqLwpAQCAtOTM3LDUyICs4NjMsNDMgQEAKIH0KIEVYUE9SVF9TWU1CT0wocmZiaV9jb25maWd1cmUpOwogCi1zdGF0aWMgaW50IHJmYmlfZmluZF9kaXNwbGF5KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK2ludCBvbWFwX3JmYmlfcHJlcGFyZV91cGRhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAorCQl1MTYgKngsIHUxNiAqeSwgdTE2ICp3LCB1MTYgKmgpCiB7Ci0JaWYgKGRzc2RldiA9PSByZmJpLmRzc2RldlswXSkKLQkJcmV0dXJuIDA7CisJdTE2IGR3LCBkaDsKIAotCWlmIChkc3NkZXYgPT0gcmZiaS5kc3NkZXZbMV0pCi0JCXJldHVybiAxOworCWRzc2Rldi0+ZHJpdmVyLT5nZXRfcmVzb2x1dGlvbihkc3NkZXYsICZkdywgJmRoKTsKIAotCUJVRygpOwotCXJldHVybiAtMTsKLX0KKwlpZiAgKCp4ID4gZHcgfHwgKnkgPiBkaCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoKnggKyAqdyA+IGR3KQorCQlyZXR1cm4gLUVJTlZBTDsKIAotc3RhdGljIHZvaWQgc2lnbmFsX2ZpZm9fd2FpdGVycyh2b2lkKQotewotCWlmIChhdG9taWNfcmVhZCgmcmZiaS5jbWRfZmlmb19mdWxsKSA+IDApIHsKLQkJLyogRFNTREJHKCJTSUdOQUxJTkc6IEZpZm8gbm90IGZ1bGwgZm9yIHdhaXRlciFcbiIpOyAqLwotCQljb21wbGV0ZSgmcmZiaS5jbWRfZG9uZSk7Ci0JCWF0b21pY19kZWMoJnJmYmkuY21kX2ZpZm9fZnVsbCk7Ci0JfQotfQorCWlmICgqeSArICpoID4gZGgpCisJCXJldHVybiAtRUlOVkFMOwogCi0vKiByZXR1cm5zIDEgZm9yIGFzeW5jIG9wLCBhbmQgMCBmb3Igc3luYyBvcCAqLwotc3RhdGljIGludCBkb191cGRhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LCBzdHJ1Y3QgdXBkYXRlX3JlZ2lvbiAqdXBkKQotewotCXUxNiB4ID0gdXBkLT54OwotCXUxNiB5ID0gdXBkLT55OwotCXUxNiB3ID0gdXBkLT53OwotCXUxNiBoID0gdXBkLT5oOworCWlmICgqdyA9PSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBlcmZfbWFya19zZXR1cCgpOworCWlmICgqdyA9PSAwIHx8ICpoID09IDApCisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGRzc2Rldi0+bWFuYWdlci0+Y2FwcyAmIE9NQVBfRFNTX09WTF9NR1JfQ0FQX0RJU1BDKSB7Ci0JCS8qZHNzZGV2LT5kcml2ZXItPmVuYWJsZV90ZShkc3NkZXYsIDEpOyAqLwotCQlkc3Nfc2V0dXBfcGFydGlhbF9wbGFuZXMoZHNzZGV2LCAmeCwgJnksICZ3LCAmaCk7CisJCWRzc19zZXR1cF9wYXJ0aWFsX3BsYW5lcyhkc3NkZXYsIHgsIHksIHcsIGgpOworCQlkaXNwY19zZXRfbGNkX3NpemUoKncsICpoKTsKIAl9CiAKLSNpZmRlZiBNRUFTVVJFX1BFUkYKLQlyZmJpLnBlcmZfYnl0ZXMgPSB3ICogaCAqIDI7IC8qIFhYWCBhbHdheXMgMTZiaXQgKi8KLSNlbmRpZgorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTChvbWFwX3JmYmlfcHJlcGFyZV91cGRhdGUpOwogCi0JZHNzZGV2LT5kcml2ZXItPnNldHVwX3VwZGF0ZShkc3NkZXYsIHgsIHksIHcsIGgpOwotCitpbnQgb21hcF9yZmJpX3VwZGF0ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCisJCXUxNiB4LCB1MTYgeSwgdTE2IHcsIHUxNiBoLAorCQl2b2lkICgqY2FsbGJhY2spKHZvaWQgKiksIHZvaWQgKmRhdGEpCit7CiAJaWYgKGRzc2Rldi0+bWFuYWdlci0+Y2FwcyAmIE9NQVBfRFNTX09WTF9NR1JfQ0FQX0RJU1BDKSB7Ci0JCXJmYmlfdHJhbnNmZXJfYXJlYSh3LCBoLCBOVUxMLCBOVUxMKTsKLQkJcmV0dXJuIDE7CisJCXJmYmlfdHJhbnNmZXJfYXJlYSh3LCBoLCBjYWxsYmFjaywgZGF0YSk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IG9tYXBfb3ZlcmxheSAqb3ZsOwogCQl2b2lkIF9faW9tZW0gKmFkZHI7CkBAIC05OTQsMTIzICs5MTEsMTIgQEAKIAogCQlvbWFwX3JmYmlfd3JpdGVfcGl4ZWxzKGFkZHIsIHNjcl93aWR0aCwgeCwgeSwgdywgaCk7CiAKLQkJcGVyZl9zaG93KCJMNCIpOwotCi0JCXJldHVybiAwOwotCX0KLX0KLQotc3RhdGljIHZvaWQgcHJvY2Vzc19jbWRfZmlmbyh2b2lkKQotewotCWludCBsZW47Ci0Jc3RydWN0IHVwZGF0ZV9wYXJhbSBwOwotCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldjsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JaWYgKGF0b21pY19pbmNfcmV0dXJuKCZyZmJpLmNtZF9wZW5kaW5nKSAhPSAxKQotCQlyZXR1cm47Ci0KLQl3aGlsZSAodHJ1ZSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcmZiaS5jbWRfbG9jaywgZmxhZ3MpOwotCi0JCWxlbiA9IGtmaWZvX291dCgmcmZiaS5jbWRfZmlmbywgKHVuc2lnbmVkIGNoYXIgKikmcCwKLQkJCQkgIHNpemVvZihzdHJ1Y3QgdXBkYXRlX3BhcmFtKSk7Ci0JCWlmIChsZW4gPT0gMCkgewotCQkJRFNTREJHKCJub3RoaW5nIG1vcmUgaW4gZmlmb1xuIik7Ci0JCQlhdG9taWNfc2V0KCZyZmJpLmNtZF9wZW5kaW5nLCAwKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJmYmkuY21kX2xvY2ssIGZsYWdzKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogRFNTREJHKCJmaWZvIGZ1bGwgJWRcbiIsIHJmYmkuY21kX2ZpZm9fZnVsbC5jb3VudGVyKTsqLwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJmYmkuY21kX2xvY2ssIGZsYWdzKTsKLQotCQlCVUdfT04obGVuICE9IHNpemVvZihzdHJ1Y3QgdXBkYXRlX3BhcmFtKSk7Ci0JCUJVR19PTihwLnJmYmlfbW9kdWxlID4gMSk7Ci0KLQkJZHNzZGV2ID0gcmZiaS5kc3NkZXZbcC5yZmJpX21vZHVsZV07Ci0KLQkJaWYgKHAuY21kID09IFJGQklfQ01EX1VQREFURSkgewotCQkJaWYgKGRvX3VwZGF0ZShkc3NkZXYsICZwLnBhci5yKSkKLQkJCQlicmVhazsgLyogYXN5bmMgb3AgKi8KLQkJfSBlbHNlIGlmIChwLmNtZCA9PSBSRkJJX0NNRF9TWU5DKSB7Ci0JCQlEU1NEQkcoIlNpZ25hbGluZyBTWU5DIGRvbmUhXG4iKTsKLQkJCWNvbXBsZXRlKHAucGFyLnN5bmMpOwotCQl9IGVsc2UKLQkJCUJVRygpOworCQljYWxsYmFjayhkYXRhKTsKIAl9CiAKLQlzaWduYWxfZmlmb193YWl0ZXJzKCk7CisJcmV0dXJuIDA7CiB9Ci0KLXN0YXRpYyB2b2lkIHJmYmlfcHVzaF9jbWQoc3RydWN0IHVwZGF0ZV9wYXJhbSAqcCkKLXsKLQlpbnQgcmV0OwotCi0Jd2hpbGUgKDEpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJaW50IGF2YWlsYWJsZTsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmcmZiaS5jbWRfbG9jaywgZmxhZ3MpOwotCQlhdmFpbGFibGUgPSBSRkJJX0NNRF9GSUZPX0xFTl9CWVRFUyAtCi0JCQlrZmlmb19sZW4oJnJmYmkuY21kX2ZpZm8pOwotCi0vKgkJRFNTREJHKCIlZCBieXRlcyBsZWZ0IGluIGZpZm9cbiIsIGF2YWlsYWJsZSk7ICovCi0JCWlmIChhdmFpbGFibGUgPCBzaXplb2Yoc3RydWN0IHVwZGF0ZV9wYXJhbSkpIHsKLQkJCURTU0RCRygiR29pbmcgdG8gd2FpdCBiZWNhdXNlIEZJRk8gRlVMTC4uXG4iKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJmYmkuY21kX2xvY2ssIGZsYWdzKTsKLQkJCWF0b21pY19pbmMoJnJmYmkuY21kX2ZpZm9fZnVsbCk7Ci0JCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZyZmJpLmNtZF9kb25lKTsKLQkJCS8qRFNTREJHKCJXb2tlIHVwIGJlY2F1c2UgZmlmbyBub3QgZnVsbCBhbnltb3JlXG4iKTsqLwotCQkJY29udGludWU7Ci0JCX0KLQotCQlyZXQgPSBrZmlmb19pbigmcmZiaS5jbWRfZmlmbywgKHVuc2lnbmVkIGNoYXIgKilwLAotCQkJCSAgc2l6ZW9mKHN0cnVjdCB1cGRhdGVfcGFyYW0pKTsKLS8qCQlEU1NEQkcoInB1c2hlZCAlZCBieXRlc1xuIiwgcmV0KTsqLwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJmYmkuY21kX2xvY2ssIGZsYWdzKTsKLQotCQlCVUdfT04ocmV0ICE9IHNpemVvZihzdHJ1Y3QgdXBkYXRlX3BhcmFtKSk7Ci0KLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCByZmJpX3B1c2hfdXBkYXRlKGludCByZmJpX21vZHVsZSwgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCi17Ci0Jc3RydWN0IHVwZGF0ZV9wYXJhbSBwOwotCi0JcC5yZmJpX21vZHVsZSA9IHJmYmlfbW9kdWxlOwotCXAuY21kID0gUkZCSV9DTURfVVBEQVRFOwotCi0JcC5wYXIuci54ID0geDsKLQlwLnBhci5yLnkgPSB5OwotCXAucGFyLnIudyA9IHc7Ci0JcC5wYXIuci5oID0gaDsKLQotCURTU0RCRygiUkZCSSBwdXNoZWQgJWQsJWQgJWR4JWRcbiIsIHgsIHksIHcsIGgpOwotCi0JcmZiaV9wdXNoX2NtZCgmcCk7Ci0KLQlwcm9jZXNzX2NtZF9maWZvKCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHJmYmlfcHVzaF9zeW5jKGludCByZmJpX21vZHVsZSwgc3RydWN0IGNvbXBsZXRpb24gKnN5bmNfY29tcCkKLXsKLQlzdHJ1Y3QgdXBkYXRlX3BhcmFtIHA7Ci0KLQlwLnJmYmlfbW9kdWxlID0gcmZiaV9tb2R1bGU7Ci0JcC5jbWQgPSBSRkJJX0NNRF9TWU5DOwotCXAucGFyLnN5bmMgPSBzeW5jX2NvbXA7Ci0KLQlyZmJpX3B1c2hfY21kKCZwKTsKLQotCURTU0RCRygiUkZCSSBzeW5jIHB1c2hlZCB0byBjbWQgZmlmb1xuIik7Ci0KLQlwcm9jZXNzX2NtZF9maWZvKCk7Ci19CitFWFBPUlRfU1lNQk9MKG9tYXBfcmZiaV91cGRhdGUpOwogCiB2b2lkIHJmYmlfZHVtcF9yZWdzKHN0cnVjdCBzZXFfZmlsZSAqcykKIHsKQEAgLTExNTUsMTIgKzk2MSw4IEBACiB7CiAJdTMyIHJldjsKIAl1MzIgbDsKLQlpbnQgcjsKIAogCXNwaW5fbG9ja19pbml0KCZyZmJpLmNtZF9sb2NrKTsKLQlyID0ga2ZpZm9fYWxsb2MoJnJmYmkuY21kX2ZpZm8sIFJGQklfQ01EX0ZJRk9fTEVOX0JZVEVTLCBHRlBfS0VSTkVMKTsKLQlpZiAocikKLQkJcmV0dXJuIHI7CiAKIAlpbml0X2NvbXBsZXRpb24oJnJmYmkuY21kX2RvbmUpOwogCWF0b21pY19zZXQoJnJmYmkuY21kX2ZpZm9fZnVsbCwgMCk7CkBAIC0xMTk2LDQ5ICs5OTgsMTAgQEAKIHsKIAlEU1NEQkcoInJmYmlfZXhpdFxuIik7CiAKLQlrZmlmb19mcmVlKCZyZmJpLmNtZF9maWZvKTsKLQogCWlvdW5tYXAocmZiaS5iYXNlKTsKIH0KIAotLyogc3RydWN0IG9tYXBfZGlzcGxheSBzdXBwb3J0ICovCi1zdGF0aWMgaW50IHJmYmlfZGlzcGxheV91cGRhdGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQkJdTE2IHgsIHUxNiB5LCB1MTYgdywgdTE2IGgpCi17Ci0JaW50IHJmYmlfbW9kdWxlOwotCi0JaWYgKHcgPT0gMCB8fCBoID09IDApCi0JCXJldHVybiAwOwotCi0JcmZiaV9tb2R1bGUgPSByZmJpX2ZpbmRfZGlzcGxheShkc3NkZXYpOwotCi0JcmZiaV9wdXNoX3VwZGF0ZShyZmJpX21vZHVsZSwgeCwgeSwgdywgaCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCByZmJpX2Rpc3BsYXlfc3luYyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0Jc3RydWN0IGNvbXBsZXRpb24gc3luY19jb21wOwotCWludCByZmJpX21vZHVsZTsKLQotCXJmYmlfbW9kdWxlID0gcmZiaV9maW5kX2Rpc3BsYXkoZHNzZGV2KTsKLQotCWluaXRfY29tcGxldGlvbigmc3luY19jb21wKTsKLQlyZmJpX3B1c2hfc3luYyhyZmJpX21vZHVsZSwgJnN5bmNfY29tcCk7Ci0JRFNTREJHKCJXYWl0aW5nIGZvciBTWU5DIHRvIGhhcHBlbi4uLlxuIik7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmc3luY19jb21wKTsKLQlEU1NEQkcoIlJlbGVhc2VkIGZyb20gU1lOQ1xuIik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcmZiaV9kaXNwbGF5X2VuYWJsZV90ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsIGJvb2wgZW5hYmxlKQotewotCWRzc2Rldi0+ZHJpdmVyLT5lbmFibGVfdGUoZHNzZGV2LCBlbmFibGUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJmYmlfZGlzcGxheV9lbmFibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQoraW50IG9tYXBkc3NfcmZiaV9kaXNwbGF5X2VuYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7CiAJaW50IHI7CiAKQEAgLTEyNjksNDEgKzEwMzIsMjUgQEAKIAkJCSAmZHNzZGV2LT5jdHJsLnJmYmlfdGltaW5ncyk7CiAKIAotCWlmIChkc3NkZXYtPmRyaXZlci0+ZW5hYmxlKSB7Ci0JCXIgPSBkc3NkZXYtPmRyaXZlci0+ZW5hYmxlKGRzc2Rldik7Ci0JCWlmIChyKQotCQkJZ290byBlcnIyOwotCX0KLQogCXJldHVybiAwOwotZXJyMjoKLQlvbWFwX2Rpc3BjX3VucmVnaXN0ZXJfaXNyKGZyYW1lZG9uZV9jYWxsYmFjaywgTlVMTCwKLQkJCURJU1BDX0lSUV9GUkFNRURPTkUpOwogZXJyMToKIAlvbWFwX2Rzc19zdG9wX2RldmljZShkc3NkZXYpOwogZXJyMDoKIAlyZXR1cm4gcjsKIH0KK0VYUE9SVF9TWU1CT0wob21hcGRzc19yZmJpX2Rpc3BsYXlfZW5hYmxlKTsKIAotc3RhdGljIHZvaWQgcmZiaV9kaXNwbGF5X2Rpc2FibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQordm9pZCBvbWFwZHNzX3JmYmlfZGlzcGxheV9kaXNhYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKLQlkc3NkZXYtPmRyaXZlci0+ZGlzYWJsZShkc3NkZXYpOwogCW9tYXBfZGlzcGNfdW5yZWdpc3Rlcl9pc3IoZnJhbWVkb25lX2NhbGxiYWNrLCBOVUxMLAogCQkJRElTUENfSVJRX0ZSQU1FRE9ORSk7CiAJb21hcF9kc3Nfc3RvcF9kZXZpY2UoZHNzZGV2KTsKIH0KK0VYUE9SVF9TWU1CT0wob21hcGRzc19yZmJpX2Rpc3BsYXlfZGlzYWJsZSk7CiAKIGludCByZmJpX2luaXRfZGlzcGxheShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7Ci0JZHNzZGV2LT5lbmFibGUgPSByZmJpX2Rpc3BsYXlfZW5hYmxlOwotCWRzc2Rldi0+ZGlzYWJsZSA9IHJmYmlfZGlzcGxheV9kaXNhYmxlOwotCWRzc2Rldi0+dXBkYXRlID0gcmZiaV9kaXNwbGF5X3VwZGF0ZTsKLQlkc3NkZXYtPnN5bmMgPSByZmJpX2Rpc3BsYXlfc3luYzsKLQlkc3NkZXYtPmVuYWJsZV90ZSA9IHJmYmlfZGlzcGxheV9lbmFibGVfdGU7Ci0KIAlyZmJpLmRzc2Rldltkc3NkZXYtPnBoeS5yZmJpLmNoYW5uZWxdID0gZHNzZGV2OwotCiAJZHNzZGV2LT5jYXBzID0gT01BUF9EU1NfRElTUExBWV9DQVBfTUFOVUFMX1VQREFURTsKLQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9vbWFwMi9kc3Mvc2RpLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9zZGkuYwppbmRleCBjMjRmMzA3Li4xMmViNDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9zZGkuYworKysgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy9zZGkuYwpAQCAtNDEsNyArNDEsNyBAQAogCWRpc3BjX2xjZF9lbmFibGVfc2lnbmFsX3BvbGFyaXR5KDEpOwogfQogCi1zdGF0aWMgaW50IHNkaV9kaXNwbGF5X2VuYWJsZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCitpbnQgb21hcGRzc19zZGlfZGlzcGxheV9lbmFibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewogCXN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3MgKnQgPSAmZHNzZGV2LT5wYW5lbC50aW1pbmdzOwogCXN0cnVjdCBkc3NfY2xvY2tfaW5mbyBkc3NfY2luZm87CkBAIC01NywxMiArNTcsNiBAQAogCQlnb3RvIGVycjA7CiAJfQogCi0JaWYgKGRzc2Rldi0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9ESVNBQkxFRCkgewotCQlEU1NFUlIoImRzc2RldiBhbHJlYWR5IGVuYWJsZWRcbiIpOwotCQlyID0gLUVJTlZBTDsKLQkJZ290byBlcnIxOwotCX0KLQogCS8qIEluIGNhc2Ugb2Ygc2tpcF9pbml0IHNkaV9pbml0IGhhcyBhbHJlYWR5IGVuYWJsZWQgdGhlIGNsb2NrcyAqLwogCWlmICghc2RpLnNraXBfaW5pdCkKIAkJZHNzX2Nsa19lbmFibGUoRFNTX0NMS19JQ0sgfCBEU1NfQ0xLX0ZDSzEpOwpAQCAtMTE5LDcgKzExMyw3IEBACiAJCW1kZWxheSgyKTsKIAl9CiAKLQlkaXNwY19lbmFibGVfbGNkX291dCgxKTsKKwlkc3NkZXYtPm1hbmFnZXItPmVuYWJsZShkc3NkZXYtPm1hbmFnZXIpOwogCiAJaWYgKGRzc2Rldi0+ZHJpdmVyLT5lbmFibGUpIHsKIAkJciA9IGRzc2Rldi0+ZHJpdmVyLT5lbmFibGUoZHNzZGV2KTsKQEAgLTEyNywxMyArMTIxLDExIEBACiAJCQlnb3RvIGVycjM7CiAJfQogCi0JZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFOwotCiAJc2RpLnNraXBfaW5pdCA9IDA7CiAKIAlyZXR1cm4gMDsKIGVycjM6Ci0JZGlzcGNfZW5hYmxlX2xjZF9vdXQoMCk7CisJZHNzZGV2LT5tYW5hZ2VyLT5kaXNhYmxlKGRzc2Rldi0+bWFuYWdlcik7CiBlcnIyOgogCWRzc19jbGtfZGlzYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLMSk7CiBlcnIxOgpAQCAtMTQxLDEyMCArMTMzLDI3IEBACiBlcnIwOgogCXJldHVybiByOwogfQorRVhQT1JUX1NZTUJPTChvbWFwZHNzX3NkaV9kaXNwbGF5X2VuYWJsZSk7CiAKLXN0YXRpYyBpbnQgc2RpX2Rpc3BsYXlfcmVzdW1lKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7Ci0KLXN0YXRpYyB2b2lkIHNkaV9kaXNwbGF5X2Rpc2FibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQordm9pZCBvbWFwZHNzX3NkaV9kaXNwbGF5X2Rpc2FibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewotCWlmIChkc3NkZXYtPnN0YXRlID09IE9NQVBfRFNTX0RJU1BMQVlfRElTQUJMRUQpCi0JCXJldHVybjsKLQotCWlmIChkc3NkZXYtPnN0YXRlID09IE9NQVBfRFNTX0RJU1BMQVlfU1VTUEVOREVEKQotCQlpZiAoc2RpX2Rpc3BsYXlfcmVzdW1lKGRzc2RldikpCi0JCQlyZXR1cm47Ci0KIAlpZiAoZHNzZGV2LT5kcml2ZXItPmRpc2FibGUpCiAJCWRzc2Rldi0+ZHJpdmVyLT5kaXNhYmxlKGRzc2Rldik7CiAKLQlkaXNwY19lbmFibGVfbGNkX291dCgwKTsKKwlkc3NkZXYtPm1hbmFnZXItPmRpc2FibGUoZHNzZGV2LT5tYW5hZ2VyKTsKIAogCWRzc19zZGlfZGlzYWJsZSgpOwogCiAJZHNzX2Nsa19kaXNhYmxlKERTU19DTEtfSUNLIHwgRFNTX0NMS19GQ0sxKTsKIAotCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX0RJU0FCTEVEOwotCiAJb21hcF9kc3Nfc3RvcF9kZXZpY2UoZHNzZGV2KTsKIH0KLQotc3RhdGljIGludCBzZGlfZGlzcGxheV9zdXNwZW5kKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlpZiAoZHNzZGV2LT5zdGF0ZSAhPSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoZHNzZGV2LT5kcml2ZXItPnN1c3BlbmQpCi0JCWRzc2Rldi0+ZHJpdmVyLT5zdXNwZW5kKGRzc2Rldik7Ci0KLQlkaXNwY19lbmFibGVfbGNkX291dCgwKTsKLQotCWRzc19zZGlfZGlzYWJsZSgpOwotCi0JZHNzX2Nsa19kaXNhYmxlKERTU19DTEtfSUNLIHwgRFNTX0NMS19GQ0sxKTsKLQotCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX1NVU1BFTkRFRDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNkaV9kaXNwbGF5X3Jlc3VtZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0JaW50IHI7Ci0KLQlpZiAoZHNzZGV2LT5zdGF0ZSAhPSBPTUFQX0RTU19ESVNQTEFZX1NVU1BFTkRFRCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkc3NfY2xrX2VuYWJsZShEU1NfQ0xLX0lDSyB8IERTU19DTEtfRkNLMSk7Ci0KLQlyID0gZHNzX3NkaV9lbmFibGUoKTsKLQlpZiAocikKLQkJZ290byBlcnI7Ci0JbWRlbGF5KDIpOwotCi0JZGlzcGNfZW5hYmxlX2xjZF9vdXQoMSk7Ci0KLQlpZiAoZHNzZGV2LT5kcml2ZXItPnJlc3VtZSkKLQkJZHNzZGV2LT5kcml2ZXItPnJlc3VtZShkc3NkZXYpOwotCi0JZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFOwotCi0JcmV0dXJuIDA7Ci1lcnI6Ci0JZHNzX2Nsa19kaXNhYmxlKERTU19DTEtfSUNLIHwgRFNTX0NMS19GQ0sxKTsKLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIGludCBzZGlfZGlzcGxheV9zZXRfdXBkYXRlX21vZGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2LAotCQllbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlIG1vZGUpCi17Ci0JaWYgKG1vZGUgPT0gT01BUF9EU1NfVVBEQVRFX01BTlVBTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAobW9kZSA9PSBPTUFQX0RTU19VUERBVEVfRElTQUJMRUQpIHsKLQkJZGlzcGNfZW5hYmxlX2xjZF9vdXQoMCk7Ci0JCXNkaS51cGRhdGVfZW5hYmxlZCA9IDA7Ci0JfSBlbHNlIHsKLQkJZGlzcGNfZW5hYmxlX2xjZF9vdXQoMSk7Ci0JCXNkaS51cGRhdGVfZW5hYmxlZCA9IDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBlbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlIHNkaV9kaXNwbGF5X2dldF91cGRhdGVfbW9kZSgKLQkJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCXJldHVybiBzZGkudXBkYXRlX2VuYWJsZWQgPyBPTUFQX0RTU19VUERBVEVfQVVUTyA6Ci0JCU9NQVBfRFNTX1VQREFURV9ESVNBQkxFRDsKLX0KLQotc3RhdGljIHZvaWQgc2RpX2dldF90aW1pbmdzKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKLQkJCXN0cnVjdCBvbWFwX3ZpZGVvX3RpbWluZ3MgKnRpbWluZ3MpCi17Ci0JKnRpbWluZ3MgPSBkc3NkZXYtPnBhbmVsLnRpbWluZ3M7Ci19CitFWFBPUlRfU1lNQk9MKG9tYXBkc3Nfc2RpX2Rpc3BsYXlfZGlzYWJsZSk7CiAKIGludCBzZGlfaW5pdF9kaXNwbGF5KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKIAlEU1NEQkcoIlNESSBpbml0XG4iKTsKIAotCWRzc2Rldi0+ZW5hYmxlID0gc2RpX2Rpc3BsYXlfZW5hYmxlOwotCWRzc2Rldi0+ZGlzYWJsZSA9IHNkaV9kaXNwbGF5X2Rpc2FibGU7Ci0JZHNzZGV2LT5zdXNwZW5kID0gc2RpX2Rpc3BsYXlfc3VzcGVuZDsKLQlkc3NkZXYtPnJlc3VtZSA9IHNkaV9kaXNwbGF5X3Jlc3VtZTsKLQlkc3NkZXYtPnNldF91cGRhdGVfbW9kZSA9IHNkaV9kaXNwbGF5X3NldF91cGRhdGVfbW9kZTsKLQlkc3NkZXYtPmdldF91cGRhdGVfbW9kZSA9IHNkaV9kaXNwbGF5X2dldF91cGRhdGVfbW9kZTsKLQlkc3NkZXYtPmdldF90aW1pbmdzID0gc2RpX2dldF90aW1pbmdzOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL3ZlbmMuYyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvZHNzL3ZlbmMuYwppbmRleCA3NDlhNWEwLi5mMGJhNTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL2Rzcy92ZW5jLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9kc3MvdmVuYy5jCkBAIC00MDAsMTE0ICs0MDAsNiBAQAogCUJVRygpOwogfQogCi0KLQotCi0KLS8qIGRyaXZlciAqLwotc3RhdGljIGludCB2ZW5jX3BhbmVsX3Byb2JlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlkc3NkZXYtPnBhbmVsLnRpbWluZ3MgPSBvbWFwX2Rzc19wYWxfdGltaW5nczsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCB2ZW5jX3BhbmVsX3JlbW92ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci19Ci0KLXN0YXRpYyBpbnQgdmVuY19wYW5lbF9lbmFibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCWludCByID0gMDsKLQotCS8qIHdhaXQgY291cGxlIG9mIHZzeW5jcyB1bnRpbCBlbmFibGluZyB0aGUgTENEICovCi0JbXNsZWVwKDUwKTsKLQotCWlmIChkc3NkZXYtPnBsYXRmb3JtX2VuYWJsZSkKLQkJciA9IGRzc2Rldi0+cGxhdGZvcm1fZW5hYmxlKGRzc2Rldik7Ci0KLQlyZXR1cm4gcjsKLX0KLQotc3RhdGljIHZvaWQgdmVuY19wYW5lbF9kaXNhYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKLXsKLQlpZiAoZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKQotCQlkc3NkZXYtPnBsYXRmb3JtX2Rpc2FibGUoZHNzZGV2KTsKLQotCS8qIHdhaXQgYXQgbGVhc3QgNSB2c3luY3MgYWZ0ZXIgZGlzYWJsaW5nIHRoZSBMQ0QgKi8KLQotCW1zbGVlcCgxMDApOwotfQotCi1zdGF0aWMgaW50IHZlbmNfcGFuZWxfc3VzcGVuZChzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCi17Ci0JdmVuY19wYW5lbF9kaXNhYmxlKGRzc2Rldik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmVuY19wYW5lbF9yZXN1bWUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQotewotCXJldHVybiB2ZW5jX3BhbmVsX2VuYWJsZShkc3NkZXYpOwotfQotCi1zdGF0aWMgc3RydWN0IG9tYXBfZHNzX2RyaXZlciB2ZW5jX2RyaXZlciA9IHsKLQkucHJvYmUJCT0gdmVuY19wYW5lbF9wcm9iZSwKLQkucmVtb3ZlCQk9IHZlbmNfcGFuZWxfcmVtb3ZlLAotCi0JLmVuYWJsZQkJPSB2ZW5jX3BhbmVsX2VuYWJsZSwKLQkuZGlzYWJsZQk9IHZlbmNfcGFuZWxfZGlzYWJsZSwKLQkuc3VzcGVuZAk9IHZlbmNfcGFuZWxfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHZlbmNfcGFuZWxfcmVzdW1lLAotCi0JLmRyaXZlciAgICAgICAgID0gewotCQkubmFtZSAgID0gInZlbmMiLAotCQkub3duZXIgID0gVEhJU19NT0RVTEUsCi0JfSwKLX07Ci0vKiBkcml2ZXIgZW5kICovCi0KLQotCi1pbnQgdmVuY19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCi17Ci0JdTggcmV2X2lkOwotCi0JbXV0ZXhfaW5pdCgmdmVuYy52ZW5jX2xvY2spOwotCi0JdmVuYy53c3NfZGF0YSA9IDA7Ci0KLQl2ZW5jLmJhc2UgPSBpb3JlbWFwKFZFTkNfQkFTRSwgU1pfMUspOwotCWlmICghdmVuYy5iYXNlKSB7Ci0JCURTU0VSUigiY2FuJ3QgaW9yZW1hcCBWRU5DXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JdmVuYy52ZGRhX2RhY19yZWcgPSByZWd1bGF0b3JfZ2V0KCZwZGV2LT5kZXYsICJ2ZGRhX2RhYyIpOwotCWlmIChJU19FUlIodmVuYy52ZGRhX2RhY19yZWcpKSB7Ci0JCWlvdW5tYXAodmVuYy5iYXNlKTsKLQkJRFNTRVJSKCJjYW4ndCBnZXQgVkREQV9EQUMgcmVndWxhdG9yXG4iKTsKLQkJcmV0dXJuIFBUUl9FUlIodmVuYy52ZGRhX2RhY19yZWcpOwotCX0KLQotCXZlbmNfZW5hYmxlX2Nsb2NrcygxKTsKLQotCXJldl9pZCA9ICh1OCkodmVuY19yZWFkX3JlZyhWRU5DX1JFVl9JRCkgJiAweGZmKTsKLQlwcmludGsoS0VSTl9JTkZPICJPTUFQIFZFTkMgcmV2ICVkXG4iLCByZXZfaWQpOwotCi0JdmVuY19lbmFibGVfY2xvY2tzKDApOwotCi0JcmV0dXJuIG9tYXBfZHNzX3JlZ2lzdGVyX2RyaXZlcigmdmVuY19kcml2ZXIpOwotfQotCi12b2lkIHZlbmNfZXhpdCh2b2lkKQotewotCW9tYXBfZHNzX3VucmVnaXN0ZXJfZHJpdmVyKCZ2ZW5jX2RyaXZlcik7Ci0KLQlyZWd1bGF0b3JfcHV0KHZlbmMudmRkYV9kYWNfcmVnKTsKLQotCWlvdW5tYXAodmVuYy5iYXNlKTsKLX0KLQogc3RhdGljIHZvaWQgdmVuY19wb3dlcl9vbihzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCiB7CiAJdTMyIGw7CkBAIC01NDAsNyArNDMyLDcgQEAKIAlpZiAoZHNzZGV2LT5wbGF0Zm9ybV9lbmFibGUpCiAJCWRzc2Rldi0+cGxhdGZvcm1fZW5hYmxlKGRzc2Rldik7CiAKLQlkaXNwY19lbmFibGVfZGlnaXRfb3V0KDEpOworCWRzc2Rldi0+bWFuYWdlci0+ZW5hYmxlKGRzc2Rldi0+bWFuYWdlcik7CiB9CiAKIHN0YXRpYyB2b2lkIHZlbmNfcG93ZXJfb2ZmKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKQEAgLTU0OCw3ICs0NDAsNyBAQAogCXZlbmNfd3JpdGVfcmVnKFZFTkNfT1VUUFVUX0NPTlRST0wsIDApOwogCWRzc19zZXRfZGFjX3B3cmRuX2JneigwKTsKIAotCWRpc3BjX2VuYWJsZV9kaWdpdF9vdXQoMCk7CisJZHNzZGV2LT5tYW5hZ2VyLT5kaXNhYmxlKGRzc2Rldi0+bWFuYWdlcik7CiAKIAlpZiAoZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKQogCQlkc3NkZXYtPnBsYXRmb3JtX2Rpc2FibGUoZHNzZGV2KTsKQEAgLTU1OCw3ICs0NTAsMjMgQEAKIAl2ZW5jX2VuYWJsZV9jbG9ja3MoMCk7CiB9CiAKLXN0YXRpYyBpbnQgdmVuY19lbmFibGVfZGlzcGxheShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCisKKworCisKKy8qIGRyaXZlciAqLworc3RhdGljIGludCB2ZW5jX3BhbmVsX3Byb2JlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlkc3NkZXYtPnBhbmVsLnRpbWluZ3MgPSBvbWFwX2Rzc19wYWxfdGltaW5nczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCB2ZW5jX3BhbmVsX3JlbW92ZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7Cit9CisKK3N0YXRpYyBpbnQgdmVuY19wYW5lbF9lbmFibGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQogewogCWludCByID0gMDsKIApAQCAtNTY4LDcgKzQ3NiwxMyBAQAogCiAJaWYgKGRzc2Rldi0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9ESVNBQkxFRCkgewogCQlyID0gLUVJTlZBTDsKLQkJZ290byBlcnI7CisJCWdvdG8gZXJyMTsKKwl9CisKKwlpZiAoZHNzZGV2LT5wbGF0Zm9ybV9lbmFibGUpIHsKKwkJciA9IGRzc2Rldi0+cGxhdGZvcm1fZW5hYmxlKGRzc2Rldik7CisJCWlmIChyKQorCQkJZ290byBlcnIyOwogCX0KIAogCXZlbmNfcG93ZXJfb24oZHNzZGV2KTsKQEAgLTU3NiwxMyArNDkwLDIxIEBACiAJdmVuYy53c3NfZGF0YSA9IDA7CiAKIAlkc3NkZXYtPnN0YXRlID0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkU7Ci1lcnI6CisKKwkvKiB3YWl0IGNvdXBsZSBvZiB2c3luY3MgdW50aWwgZW5hYmxpbmcgdGhlIExDRCAqLworCW1zbGVlcCg1MCk7CisKIAltdXRleF91bmxvY2soJnZlbmMudmVuY19sb2NrKTsKIAogCXJldHVybiByOworZXJyMjoKKwl2ZW5jX3Bvd2VyX29mZihkc3NkZXYpOworZXJyMToKKwltdXRleF91bmxvY2soJnZlbmMudmVuY19sb2NrKTsKKwlyZXR1cm4gcjsKIH0KIAotc3RhdGljIHZvaWQgdmVuY19kaXNhYmxlX2Rpc3BsYXkoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQorc3RhdGljIHZvaWQgdmVuY19wYW5lbF9kaXNhYmxlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKIAlEU1NEQkcoInZlbmNfZGlzYWJsZV9kaXNwbGF5XG4iKTsKIApAQCAtNTk5LDUzICs1MjEsNDAgQEAKIAogCXZlbmNfcG93ZXJfb2ZmKGRzc2Rldik7CiAKKwkvKiB3YWl0IGF0IGxlYXN0IDUgdnN5bmNzIGFmdGVyIGRpc2FibGluZyB0aGUgTENEICovCisJbXNsZWVwKDEwMCk7CisKKwlpZiAoZHNzZGV2LT5wbGF0Zm9ybV9kaXNhYmxlKQorCQlkc3NkZXYtPnBsYXRmb3JtX2Rpc2FibGUoZHNzZGV2KTsKKwogCWRzc2Rldi0+c3RhdGUgPSBPTUFQX0RTU19ESVNQTEFZX0RJU0FCTEVEOwogZW5kOgogCW11dGV4X3VubG9jaygmdmVuYy52ZW5jX2xvY2spOwogfQogCi1zdGF0aWMgaW50IHZlbmNfZGlzcGxheV9zdXNwZW5kKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3N0YXRpYyBpbnQgdmVuY19wYW5lbF9zdXNwZW5kKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKLQlpbnQgciA9IDA7Ci0KLQlEU1NEQkcoInZlbmNfZGlzcGxheV9zdXNwZW5kXG4iKTsKLQotCW11dGV4X2xvY2soJnZlbmMudmVuY19sb2NrKTsKLQotCWlmIChkc3NkZXYtPnN0YXRlICE9IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFKSB7Ci0JCXIgPSAtRUlOVkFMOwotCQlnb3RvIGVycjsKLQl9Ci0KLQl2ZW5jX3Bvd2VyX29mZihkc3NkZXYpOwotCi0JZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfU1VTUEVOREVEOwotZXJyOgotCW11dGV4X3VubG9jaygmdmVuYy52ZW5jX2xvY2spOwotCi0JcmV0dXJuIHI7CisJdmVuY19wYW5lbF9kaXNhYmxlKGRzc2Rldik7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmVuY19kaXNwbGF5X3Jlc3VtZShzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCitzdGF0aWMgaW50IHZlbmNfcGFuZWxfcmVzdW1lKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKLQlpbnQgciA9IDA7CisJcmV0dXJuIHZlbmNfcGFuZWxfZW5hYmxlKGRzc2Rldik7Cit9CiAKLQlEU1NEQkcoInZlbmNfZGlzcGxheV9yZXN1bWVcbiIpOworc3RhdGljIGVudW0gb21hcF9kc3NfdXBkYXRlX21vZGUgdmVuY19nZXRfdXBkYXRlX21vZGUoCisJCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKK3sKKwlyZXR1cm4gT01BUF9EU1NfVVBEQVRFX0FVVE87Cit9CiAKLQltdXRleF9sb2NrKCZ2ZW5jLnZlbmNfbG9jayk7Ci0KLQlpZiAoZHNzZGV2LT5zdGF0ZSAhPSBPTUFQX0RTU19ESVNQTEFZX1NVU1BFTkRFRCkgewotCQlyID0gLUVJTlZBTDsKLQkJZ290byBlcnI7Ci0JfQotCi0JdmVuY19wb3dlcl9vbihkc3NkZXYpOwotCi0JZHNzZGV2LT5zdGF0ZSA9IE9NQVBfRFNTX0RJU1BMQVlfQUNUSVZFOwotZXJyOgotCW11dGV4X3VubG9jaygmdmVuYy52ZW5jX2xvY2spOwotCi0JcmV0dXJuIHI7CitzdGF0aWMgaW50IHZlbmNfc2V0X3VwZGF0ZV9tb2RlKHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldiwKKwkJZW51bSBvbWFwX2Rzc191cGRhdGVfbW9kZSBtb2RlKQoreworCWlmIChtb2RlICE9IE9NQVBfRFNTX1VQREFURV9BVVRPKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgdmVuY19nZXRfdGltaW5ncyhzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYsCkBAIC02NjYsOCArNTc1LDggQEAKIAlkc3NkZXYtPnBhbmVsLnRpbWluZ3MgPSAqdGltaW5nczsKIAlpZiAoZHNzZGV2LT5zdGF0ZSA9PSBPTUFQX0RTU19ESVNQTEFZX0FDVElWRSkgewogCQkvKiB0dXJuIHRoZSB2ZW5jIG9mZiBhbmQgb24gdG8gZ2V0IG5ldyB0aW1pbmdzIHRvIHVzZSAqLwotCQl2ZW5jX2Rpc2FibGVfZGlzcGxheShkc3NkZXYpOwotCQl2ZW5jX2VuYWJsZV9kaXNwbGF5KGRzc2Rldik7CisJCXZlbmNfcGFuZWxfZGlzYWJsZShkc3NkZXYpOworCQl2ZW5jX3BhbmVsX2VuYWJsZShkc3NkZXYpOwogCX0KIH0KIApAQCAtNzE2LDMwICs2MjUsNzkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGVudW0gb21hcF9kc3NfdXBkYXRlX21vZGUgdmVuY19kaXNwbGF5X2dldF91cGRhdGVfbW9kZSgKLQkJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZHNzZGV2KQorc3RhdGljIHN0cnVjdCBvbWFwX2Rzc19kcml2ZXIgdmVuY19kcml2ZXIgPSB7CisJLnByb2JlCQk9IHZlbmNfcGFuZWxfcHJvYmUsCisJLnJlbW92ZQkJPSB2ZW5jX3BhbmVsX3JlbW92ZSwKKworCS5lbmFibGUJCT0gdmVuY19wYW5lbF9lbmFibGUsCisJLmRpc2FibGUJPSB2ZW5jX3BhbmVsX2Rpc2FibGUsCisJLnN1c3BlbmQJPSB2ZW5jX3BhbmVsX3N1c3BlbmQsCisJLnJlc3VtZQkJPSB2ZW5jX3BhbmVsX3Jlc3VtZSwKKworCS5nZXRfcmVzb2x1dGlvbgk9IG9tYXBkc3NfZGVmYXVsdF9nZXRfcmVzb2x1dGlvbiwKKwkuZ2V0X3JlY29tbWVuZGVkX2JwcCA9IG9tYXBkc3NfZGVmYXVsdF9nZXRfcmVjb21tZW5kZWRfYnBwLAorCisJLnNldF91cGRhdGVfbW9kZSA9IHZlbmNfc2V0X3VwZGF0ZV9tb2RlLAorCS5nZXRfdXBkYXRlX21vZGUgPSB2ZW5jX2dldF91cGRhdGVfbW9kZSwKKworCS5nZXRfdGltaW5ncwk9IHZlbmNfZ2V0X3RpbWluZ3MsCisJLnNldF90aW1pbmdzCT0gdmVuY19zZXRfdGltaW5ncywKKwkuY2hlY2tfdGltaW5ncwk9IHZlbmNfY2hlY2tfdGltaW5ncywKKworCS5nZXRfd3NzCT0gdmVuY19nZXRfd3NzLAorCS5zZXRfd3NzCT0gdmVuY19zZXRfd3NzLAorCisJLmRyaXZlciAgICAgICAgID0geworCQkubmFtZSAgID0gInZlbmMiLAorCQkub3duZXIgID0gVEhJU19NT0RVTEUsCisJfSwKK307CisvKiBkcml2ZXIgZW5kICovCisKKworCitpbnQgdmVuY19pbml0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JaWYgKGRzc2Rldi0+c3RhdGUgPT0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkUpCi0JCXJldHVybiBPTUFQX0RTU19VUERBVEVfQVVUTzsKLQllbHNlCi0JCXJldHVybiBPTUFQX0RTU19VUERBVEVfRElTQUJMRUQ7CisJdTggcmV2X2lkOworCisJbXV0ZXhfaW5pdCgmdmVuYy52ZW5jX2xvY2spOworCisJdmVuYy53c3NfZGF0YSA9IDA7CisKKwl2ZW5jLmJhc2UgPSBpb3JlbWFwKFZFTkNfQkFTRSwgU1pfMUspOworCWlmICghdmVuYy5iYXNlKSB7CisJCURTU0VSUigiY2FuJ3QgaW9yZW1hcCBWRU5DXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJdmVuYy52ZGRhX2RhY19yZWcgPSBkc3NfZ2V0X3ZkZGFfZGFjKCk7CisJaWYgKElTX0VSUih2ZW5jLnZkZGFfZGFjX3JlZykpIHsKKwkJaW91bm1hcCh2ZW5jLmJhc2UpOworCQlEU1NFUlIoImNhbid0IGdldCBWRERBX0RBQyByZWd1bGF0b3JcbiIpOworCQlyZXR1cm4gUFRSX0VSUih2ZW5jLnZkZGFfZGFjX3JlZyk7CisJfQorCisJdmVuY19lbmFibGVfY2xvY2tzKDEpOworCisJcmV2X2lkID0gKHU4KSh2ZW5jX3JlYWRfcmVnKFZFTkNfUkVWX0lEKSAmIDB4ZmYpOworCXByaW50ayhLRVJOX0lORk8gIk9NQVAgVkVOQyByZXYgJWRcbiIsIHJldl9pZCk7CisKKwl2ZW5jX2VuYWJsZV9jbG9ja3MoMCk7CisKKwlyZXR1cm4gb21hcF9kc3NfcmVnaXN0ZXJfZHJpdmVyKCZ2ZW5jX2RyaXZlcik7Cit9CisKK3ZvaWQgdmVuY19leGl0KHZvaWQpCit7CisJb21hcF9kc3NfdW5yZWdpc3Rlcl9kcml2ZXIoJnZlbmNfZHJpdmVyKTsKKworCWlvdW5tYXAodmVuYy5iYXNlKTsKIH0KIAogaW50IHZlbmNfaW5pdF9kaXNwbGF5KHN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2RldikKIHsKIAlEU1NEQkcoImluaXRfZGlzcGxheVxuIik7CiAKLQlkc3NkZXYtPmVuYWJsZSA9IHZlbmNfZW5hYmxlX2Rpc3BsYXk7Ci0JZHNzZGV2LT5kaXNhYmxlID0gdmVuY19kaXNhYmxlX2Rpc3BsYXk7Ci0JZHNzZGV2LT5zdXNwZW5kID0gdmVuY19kaXNwbGF5X3N1c3BlbmQ7Ci0JZHNzZGV2LT5yZXN1bWUgPSB2ZW5jX2Rpc3BsYXlfcmVzdW1lOwotCWRzc2Rldi0+Z2V0X3RpbWluZ3MgPSB2ZW5jX2dldF90aW1pbmdzOwotCWRzc2Rldi0+c2V0X3RpbWluZ3MgPSB2ZW5jX3NldF90aW1pbmdzOwotCWRzc2Rldi0+Y2hlY2tfdGltaW5ncyA9IHZlbmNfY2hlY2tfdGltaW5nczsKLQlkc3NkZXYtPmdldF93c3MgPSB2ZW5jX2dldF93c3M7Ci0JZHNzZGV2LT5zZXRfd3NzID0gdmVuY19zZXRfd3NzOwotCWRzc2Rldi0+Z2V0X3VwZGF0ZV9tb2RlID0gdmVuY19kaXNwbGF5X2dldF91cGRhdGVfbW9kZTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL29tYXBmYi9LY29uZmlnIGIvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvS2NvbmZpZwppbmRleCBiYjY5NGNjLi40MzQ5NmQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL29tYXAyL29tYXBmYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL0tjb25maWcKQEAgLTE2LDE2ICsxNiw3IEBACiAJZGVwZW5kcyBvbiBGQl9PTUFQMgogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIGRlYnVnIG91dHB1dC4gWW91IGhhdmUgdG8gZW5hYmxlIHRoZSBhY3R1YWwgcHJpbnRpbmcKLQkgIHdpdGggZGVidWcgbW9kdWxlIHBhcmFtZXRlci4KLQotY29uZmlnIEZCX09NQVAyX0ZPUkNFX0FVVE9fVVBEQVRFCi0JYm9vbCAiRm9yY2UgbWFpbiBkaXNwbGF5IHRvIGF1dG9tYXRpYyB1cGRhdGUgbW9kZSIKLQlkZXBlbmRzIG9uIEZCX09NQVAyCi0JaGVscAotCSAgRm9yY2VzIG1haW4gZGlzcGxheSB0byBhdXRvbWF0aWMgdXBkYXRlIG1vZGUgKGlmIHBvc3NpYmxlKSwKLQkgIGFuZCBhbHNvIGVuYWJsZXMgdGVhcnN5bmMgKGlmIHBvc3NpYmxlKS4gQnkgZGVmYXVsdAotCSAgZGlzcGxheXMgdGhhdCBzdXBwb3J0IG1hbnVhbCB1cGRhdGUgYXJlIHN0YXJ0ZWQgaW4gbWFudWFsCi0JICB1cGRhdGUgbW9kZS4KKwkgIHdpdGggJ2RlYnVnJyBtb2R1bGUgcGFyYW1ldGVyLgogCiBjb25maWcgRkJfT01BUDJfTlVNX0ZCUwogCWludCAiTnVtYmVyIG9mIGZyYW1lYnVmZmVycyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1pb2N0bC5jIGIvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLWlvY3RsLmMKaW5kZXggNGM0YmFmZC4uMWZmYTc2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLWlvY3RsLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLWlvY3RsLmMKQEAgLTE2NywxMiArMTY3LDEyIEBACiAJaWYgKHcgPT0gMCB8fCBoID09IDApCiAJCXJldHVybiAwOwogCi0JZGlzcGxheS0+Z2V0X3Jlc29sdXRpb24oZGlzcGxheSwgJmR3LCAmZGgpOworCWRpc3BsYXktPmRyaXZlci0+Z2V0X3Jlc29sdXRpb24oZGlzcGxheSwgJmR3LCAmZGgpOwogCiAJaWYgKHggKyB3ID4gZHcgfHwgeSArIGggPiBkaCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gZGlzcGxheS0+dXBkYXRlKGRpc3BsYXksIHgsIHksIHcsIGgpOworCXJldHVybiBkaXNwbGF5LT5kcml2ZXItPnVwZGF0ZShkaXNwbGF5LCB4LCB5LCB3LCBoKTsKIH0KIAogLyogVGhpcyBmdW5jdGlvbiBpcyBleHBvcnRlZCBmb3IgU0dYIGRyaXZlciB1c2UgKi8KQEAgLTIwMiw3ICsyMDIsNyBAQAogCWVudW0gb21hcF9kc3NfdXBkYXRlX21vZGUgdW07CiAJaW50IHI7CiAKLQlpZiAoIWRpc3BsYXkgfHwgIWRpc3BsYXktPnNldF91cGRhdGVfbW9kZSkKKwlpZiAoIWRpc3BsYXkgfHwgIWRpc3BsYXktPmRyaXZlci0+c2V0X3VwZGF0ZV9tb2RlKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN3aXRjaCAobW9kZSkgewpAQCAtMjIyLDcgKzIyMiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXIgPSBkaXNwbGF5LT5zZXRfdXBkYXRlX21vZGUoZGlzcGxheSwgdW0pOworCXIgPSBkaXNwbGF5LT5kcml2ZXItPnNldF91cGRhdGVfbW9kZShkaXNwbGF5LCB1bSk7CiAKIAlyZXR1cm4gcjsKIH0KQEAgLTIzMywxMCArMjMzLDE1IEBACiAJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZGlzcGxheSA9IGZiMmRpc3BsYXkoZmJpKTsKIAllbnVtIG9tYXBfZHNzX3VwZGF0ZV9tb2RlIG07CiAKLQlpZiAoIWRpc3BsYXkgfHwgIWRpc3BsYXktPmdldF91cGRhdGVfbW9kZSkKKwlpZiAoIWRpc3BsYXkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbSA9IGRpc3BsYXktPmdldF91cGRhdGVfbW9kZShkaXNwbGF5KTsKKwlpZiAoIWRpc3BsYXktPmRyaXZlci0+Z2V0X3VwZGF0ZV9tb2RlKSB7CisJCSptb2RlID0gT01BUEZCX0FVVE9fVVBEQVRFOworCQlyZXR1cm4gMDsKKwl9CisKKwltID0gZGlzcGxheS0+ZHJpdmVyLT5nZXRfdXBkYXRlX21vZGUoZGlzcGxheSk7CiAKIAlzd2l0Y2ggKG0pIHsKIAljYXNlIE9NQVBfRFNTX1VQREFURV9ESVNBQkxFRDoKQEAgLTM3NCw3ICszNzksNyBAQAogCXZvaWQgKmJ1ZjsKIAlpbnQgcjsKIAotCWlmICghZGlzcGxheSB8fCAhZGlzcGxheS0+bWVtb3J5X3JlYWQpCisJaWYgKCFkaXNwbGF5IHx8ICFkaXNwbGF5LT5kcml2ZXItPm1lbW9yeV9yZWFkKQogCQlyZXR1cm4gLUVOT0VOVDsKIAogCWlmICghYWNjZXNzX29rKFZFUklGWV9XUklURSwgbXItPmJ1ZmZlciwgbXItPmJ1ZmZlcl9zaXplKSkKQEAgLTM4OSw3ICszOTQsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlyID0gZGlzcGxheS0+bWVtb3J5X3JlYWQoZGlzcGxheSwgYnVmLCBtci0+YnVmZmVyX3NpemUsCisJciA9IGRpc3BsYXktPmRyaXZlci0+bWVtb3J5X3JlYWQoZGlzcGxheSwgYnVmLCBtci0+YnVmZmVyX3NpemUsCiAJCQltci0+eCwgbXItPnksIG1yLT53LCBtci0+aCk7CiAKIAlpZiAociA+IDApIHsKQEAgLTQ4Myw2ICs0ODgsNyBAQAogCQlzdHJ1Y3Qgb21hcGZiX21lbW9yeV9yZWFkCW1lbW9yeV9yZWFkOwogCQlzdHJ1Y3Qgb21hcGZiX3ZyYW1faW5mbwkJdnJhbV9pbmZvOwogCQlzdHJ1Y3Qgb21hcGZiX3RlYXJzeW5jX2luZm8JdGVhcnN5bmNfaW5mbzsKKwkJc3RydWN0IG9tYXBmYl9kaXNwbGF5X2luZm8JZGlzcGxheV9pbmZvOwogCX0gcDsKIAogCWludCByID0gMDsKQEAgLTQ5MCwxOCArNDk2LDE4IEBACiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIE9NQVBGQl9TWU5DX0dGWDoKIAkJREJHKCJpb2N0bCBTWU5DX0dGWFxuIik7Ci0JCWlmICghZGlzcGxheSB8fCAhZGlzcGxheS0+c3luYykgeworCQlpZiAoIWRpc3BsYXkgfHwgIWRpc3BsYXktPmRyaXZlci0+c3luYykgewogCQkJLyogRFNTMSBuZXZlciByZXR1cm5zIGFuIGVycm9yIGhlcmUsIHNvIHdlIG5laXRoZXIgKi8KIAkJCS8qciA9IC1FSU5WQUw7Ki8KIAkJCWJyZWFrOwogCQl9CiAKLQkJciA9IGRpc3BsYXktPnN5bmMoZGlzcGxheSk7CisJCXIgPSBkaXNwbGF5LT5kcml2ZXItPnN5bmMoZGlzcGxheSk7CiAJCWJyZWFrOwogCiAJY2FzZSBPTUFQRkJfVVBEQVRFX1dJTkRPV19PTEQ6CiAJCURCRygiaW9jdGwgVVBEQVRFX1dJTkRPV19PTERcbiIpOwotCQlpZiAoIWRpc3BsYXkgfHwgIWRpc3BsYXktPnVwZGF0ZSkgeworCQlpZiAoIWRpc3BsYXkgfHwgIWRpc3BsYXktPmRyaXZlci0+dXBkYXRlKSB7CiAJCQlyID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CkBAIC01MTksNyArNTI1LDcgQEAKIAogCWNhc2UgT01BUEZCX1VQREFURV9XSU5ET1c6CiAJCURCRygiaW9jdGwgVVBEQVRFX1dJTkRPV1xuIik7Ci0JCWlmICghZGlzcGxheSB8fCAhZGlzcGxheS0+dXBkYXRlKSB7CisJCWlmICghZGlzcGxheSB8fCAhZGlzcGxheS0+ZHJpdmVyLT51cGRhdGUpIHsKIAkJCXIgPSAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KQEAgLTY0OCw3ICs2NTQsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlyID0gZGlzcGxheS0+d2FpdF92c3luYyhkaXNwbGF5KTsKKwkJciA9IGRpc3BsYXktPm1hbmFnZXItPndhaXRfZm9yX3ZzeW5jKGRpc3BsYXktPm1hbmFnZXIpOwogCQlicmVhazsKIAogCWNhc2UgT01BUEZCX1dBSVRGT1JHTzoKQEAgLTY2OSwxMiArNjc1LDEyIEBACiAJCQlyID0gLUVGQVVMVDsKIAkJCWJyZWFrOwogCQl9Ci0JCWlmICghZGlzcGxheSB8fCAhZGlzcGxheS0+cnVuX3Rlc3QpIHsKKwkJaWYgKCFkaXNwbGF5IHx8ICFkaXNwbGF5LT5kcml2ZXItPnJ1bl90ZXN0KSB7CiAJCQlyID0gLUVJTlZBTDsKIAkJCWJyZWFrOwogCQl9CiAKLQkJciA9IGRpc3BsYXktPnJ1bl90ZXN0KGRpc3BsYXksIHAudGVzdF9udW0pOworCQlyID0gZGlzcGxheS0+ZHJpdmVyLT5ydW5fdGVzdChkaXNwbGF5LCBwLnRlc3RfbnVtKTsKIAogCQlicmVhazsKIApAQCAtNjg0LDEyICs2OTAsMTIgQEAKIAkJCXIgPSAtRUZBVUxUOwogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKCFkaXNwbGF5IHx8ICFkaXNwbGF5LT5ydW5fdGVzdCkgeworCQlpZiAoIWRpc3BsYXkgfHwgIWRpc3BsYXktPmRyaXZlci0+cnVuX3Rlc3QpIHsKIAkJCXIgPSAtRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KIAotCQlyID0gZGlzcGxheS0+cnVuX3Rlc3QoZGlzcGxheSwgcC50ZXN0X251bSk7CisJCXIgPSBkaXNwbGF5LT5kcml2ZXItPnJ1bl90ZXN0KGRpc3BsYXksIHAudGVzdF9udW0pOwogCiAJCWJyZWFrOwogCkBAIC03MzEsMTYgKzczNyw0MCBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoIWRpc3BsYXktPmVuYWJsZV90ZSkgeworCQlpZiAoIWRpc3BsYXktPmRyaXZlci0+ZW5hYmxlX3RlKSB7CiAJCQlyID0gLUVOT0RFVjsKIAkJCWJyZWFrOwogCQl9CiAKLQkJciA9IGRpc3BsYXktPmVuYWJsZV90ZShkaXNwbGF5LCAhIXAudGVhcnN5bmNfaW5mby5lbmFibGVkKTsKKwkJciA9IGRpc3BsYXktPmRyaXZlci0+ZW5hYmxlX3RlKGRpc3BsYXksCisJCQkJISFwLnRlYXJzeW5jX2luZm8uZW5hYmxlZCk7CiAKIAkJYnJlYWs7CiAJfQogCisJY2FzZSBPTUFQRkJfR0VUX0RJU1BMQVlfSU5GTzogeworCQl1MTYgeHJlcywgeXJlczsKKworCQlEQkcoImlvY3RsIEdFVF9ESVNQTEFZX0lORk9cbiIpOworCisJCWlmIChkaXNwbGF5ID09IE5VTEwpIHsKKwkJCXIgPSAtRU5PREVWOworCQkJYnJlYWs7CisJCX0KKworCQlkaXNwbGF5LT5kcml2ZXItPmdldF9yZXNvbHV0aW9uKGRpc3BsYXksICZ4cmVzLCAmeXJlcyk7CisKKwkJcC5kaXNwbGF5X2luZm8ueHJlcyA9IHhyZXM7CisJCXAuZGlzcGxheV9pbmZvLnlyZXMgPSB5cmVzOworCQlwLmRpc3BsYXlfaW5mby53aWR0aCA9IDA7CisJCXAuZGlzcGxheV9pbmZvLmhlaWdodCA9IDA7CisKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCBfX3VzZXIgKilhcmcsICZwLmRpc3BsYXlfaW5mbywKKwkJCQkJc2l6ZW9mKHAuZGlzcGxheV9pbmZvKSkpCisJCQlyID0gLUVGQVVMVDsKKwkJYnJlYWs7CisJfQorCiAJZGVmYXVsdDoKIAkJZGV2X2VycihmYmRldi0+ZGV2LCAiVW5rbm93biBpb2N0bCAweCV4XG4iLCBjbWQpOwogCQlyID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1tYWluLmMgYi9kcml2ZXJzL3ZpZGVvL29tYXAyL29tYXBmYi9vbWFwZmItbWFpbi5jCmluZGV4IGQxN2NhZWYuLjRhNzY5MTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi1tYWluLmMKKysrIGIvZHJpdmVycy92aWRlby9vbWFwMi9vbWFwZmIvb21hcGZiLW1haW4uYwpAQCAtNTQsNiArNTQsOCBAQAogI2VuZGlmCiAKIHN0YXRpYyBpbnQgb21hcGZiX2ZiX2luaXQoc3RydWN0IG9tYXBmYjJfZGV2aWNlICpmYmRldiwgc3RydWN0IGZiX2luZm8gKmZiaSk7CitzdGF0aWMgaW50IG9tYXBmYl9nZXRfcmVjb21tZW5kZWRfYnBwKHN0cnVjdCBvbWFwZmIyX2RldmljZSAqZmJkZXYsCisJCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRzc2Rldik7CiAKICNpZmRlZiBERUJVRwogc3RhdGljIHZvaWQgZHJhd19waXhlbChzdHJ1Y3QgZmJfaW5mbyAqZmJpLCBpbnQgeCwgaW50IHksIHVuc2lnbmVkIGNvbG9yKQpAQCAtMTUyLDkgKzE1NCw5IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHVuc2lnbmVkIG9tYXBmYl9nZXRfdnJmYl9vZmZzZXQoc3RydWN0IG9tYXBmYl9pbmZvICpvZmJpLCBpbnQgcm90KQorc3RhdGljIHVuc2lnbmVkIG9tYXBmYl9nZXRfdnJmYl9vZmZzZXQoY29uc3Qgc3RydWN0IG9tYXBmYl9pbmZvICpvZmJpLCBpbnQgcm90KQogewotCXN0cnVjdCB2cmZiICp2cmZiID0gJm9mYmktPnJlZ2lvbi52cmZiOworCWNvbnN0IHN0cnVjdCB2cmZiICp2cmZiID0gJm9mYmktPnJlZ2lvbi52cmZiOwogCXVuc2lnbmVkIG9mZnNldDsKIAogCXN3aXRjaCAocm90KSB7CkBAIC0xNzksNyArMTgxLDcgQEAKIAlyZXR1cm4gb2Zmc2V0OwogfQogCi1zdGF0aWMgdTMyIG9tYXBmYl9nZXRfcmVnaW9uX3JvdF9wYWRkcihzdHJ1Y3Qgb21hcGZiX2luZm8gKm9mYmksIGludCByb3QpCitzdGF0aWMgdTMyIG9tYXBmYl9nZXRfcmVnaW9uX3JvdF9wYWRkcihjb25zdCBzdHJ1Y3Qgb21hcGZiX2luZm8gKm9mYmksIGludCByb3QpCiB7CiAJaWYgKG9mYmktPnJvdGF0aW9uX3R5cGUgPT0gT01BUF9EU1NfUk9UX1ZSRkIpIHsKIAkJcmV0dXJuIG9mYmktPnJlZ2lvbi52cmZiLnBhZGRyW3JvdF0KQEAgLTE4OSw3ICsxOTEsNyBAQAogCX0KIH0KIAotc3RhdGljIHUzMiBvbWFwZmJfZ2V0X3JlZ2lvbl9wYWRkcihzdHJ1Y3Qgb21hcGZiX2luZm8gKm9mYmkpCitzdGF0aWMgdTMyIG9tYXBmYl9nZXRfcmVnaW9uX3BhZGRyKGNvbnN0IHN0cnVjdCBvbWFwZmJfaW5mbyAqb2ZiaSkKIHsKIAlpZiAob2ZiaS0+cm90YXRpb25fdHlwZSA9PSBPTUFQX0RTU19ST1RfVlJGQikKIAkJcmV0dXJuIG9mYmktPnJlZ2lvbi52cmZiLnBhZGRyWzBdOwpAQCAtMTk3LDcgKzE5OSw3IEBACiAJCXJldHVybiBvZmJpLT5yZWdpb24ucGFkZHI7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW9tZW0gKm9tYXBmYl9nZXRfcmVnaW9uX3ZhZGRyKHN0cnVjdCBvbWFwZmJfaW5mbyAqb2ZiaSkKK3N0YXRpYyB2b2lkIF9faW9tZW0gKm9tYXBmYl9nZXRfcmVnaW9uX3ZhZGRyKGNvbnN0IHN0cnVjdCBvbWFwZmJfaW5mbyAqb2ZiaSkKIHsKIAlpZiAob2ZiaS0+cm90YXRpb25fdHlwZSA9PSBPTUFQX0RTU19ST1RfVlJGQikKIAkJcmV0dXJuIG9mYmktPnJlZ2lvbi52cmZiLnZhZGRyWzBdOwpAQCAtNzAzLDkgKzcwNSw5IEBACiAJdmFyLT53aWR0aCAgICAgICAgICAgICAgPSAtMTsKIAl2YXItPmdyYXlzY2FsZSAgICAgICAgICA9IDA7CiAKLQlpZiAoZGlzcGxheSAmJiBkaXNwbGF5LT5nZXRfdGltaW5ncykgeworCWlmIChkaXNwbGF5ICYmIGRpc3BsYXktPmRyaXZlci0+Z2V0X3RpbWluZ3MpIHsKIAkJc3RydWN0IG9tYXBfdmlkZW9fdGltaW5ncyB0aW1pbmdzOwotCQlkaXNwbGF5LT5nZXRfdGltaW5ncyhkaXNwbGF5LCAmdGltaW5ncyk7CisJCWRpc3BsYXktPmRyaXZlci0+Z2V0X3RpbWluZ3MoZGlzcGxheSwgJnRpbWluZ3MpOwogCiAJCS8qIHBpeGNsb2NrIGluIHBzLCB0aGUgcmVzdCBpbiBwaXhjbG9jayAqLwogCQl2YXItPnBpeGNsb2NrID0gdGltaW5ncy5waXhlbF9jbG9jayAhPSAwID8KQEAgLTc3OCw4ICs3ODAsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgY2FsY19yb3RhdGlvbl9vZmZzZXRfZG1hKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAotCQlzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCwgaW50IHJvdGF0aW9uKQorc3RhdGljIHVuc2lnbmVkIGNhbGNfcm90YXRpb25fb2Zmc2V0X2RtYShjb25zdCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKKwkJY29uc3Qgc3RydWN0IGZiX2ZpeF9zY3JlZW5pbmZvICpmaXgsIGludCByb3RhdGlvbikKIHsKIAl1bnNpZ25lZCBvZmZzZXQ7CiAKQEAgLTc4OSw4ICs3OTEsOCBAQAogCXJldHVybiBvZmZzZXQ7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjYWxjX3JvdGF0aW9uX29mZnNldF92cmZiKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAotCQlzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCwgaW50IHJvdGF0aW9uKQorc3RhdGljIHVuc2lnbmVkIGNhbGNfcm90YXRpb25fb2Zmc2V0X3ZyZmIoY29uc3Qgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJCWNvbnN0IHN0cnVjdCBmYl9maXhfc2NyZWVuaW5mbyAqZml4LCBpbnQgcm90YXRpb24pCiB7CiAJdW5zaWduZWQgb2Zmc2V0OwogCkBAIC0xMjIxLDExICsxMjIzLDExIEBACiAJCWlmIChkaXNwbGF5LT5zdGF0ZSAhPSBPTUFQX0RTU19ESVNQTEFZX1NVU1BFTkRFRCkKIAkJCWdvdG8gZXhpdDsKIAotCQlpZiAoZGlzcGxheS0+cmVzdW1lKQotCQkJciA9IGRpc3BsYXktPnJlc3VtZShkaXNwbGF5KTsKKwkJaWYgKGRpc3BsYXktPmRyaXZlci0+cmVzdW1lKQorCQkJciA9IGRpc3BsYXktPmRyaXZlci0+cmVzdW1lKGRpc3BsYXkpOwogCi0JCWlmIChyID09IDAgJiYgZGlzcGxheS0+Z2V0X3VwZGF0ZV9tb2RlICYmCi0JCQkJZGlzcGxheS0+Z2V0X3VwZGF0ZV9tb2RlKGRpc3BsYXkpID09CisJCWlmIChyID09IDAgJiYgZGlzcGxheS0+ZHJpdmVyLT5nZXRfdXBkYXRlX21vZGUgJiYKKwkJCQlkaXNwbGF5LT5kcml2ZXItPmdldF91cGRhdGVfbW9kZShkaXNwbGF5KSA9PQogCQkJCU9NQVBfRFNTX1VQREFURV9NQU5VQUwpCiAJCQlkb191cGRhdGUgPSAxOwogCkBAIC0xMjQwLDggKzEyNDIsOCBAQAogCQlpZiAoZGlzcGxheS0+c3RhdGUgIT0gT01BUF9EU1NfRElTUExBWV9BQ1RJVkUpCiAJCQlnb3RvIGV4aXQ7CiAKLQkJaWYgKGRpc3BsYXktPnN1c3BlbmQpCi0JCQlyID0gZGlzcGxheS0+c3VzcGVuZChkaXNwbGF5KTsKKwkJaWYgKGRpc3BsYXktPmRyaXZlci0+c3VzcGVuZCkKKwkJCXIgPSBkaXNwbGF5LT5kcml2ZXItPnN1c3BlbmQoZGlzcGxheSk7CiAKIAkJYnJlYWs7CiAKQEAgLTEyNTIsMTEgKzEyNTQsMTEgQEAKIGV4aXQ6CiAJb21hcGZiX3VubG9jayhmYmRldik7CiAKLQlpZiAociA9PSAwICYmIGRvX3VwZGF0ZSAmJiBkaXNwbGF5LT51cGRhdGUpIHsKKwlpZiAociA9PSAwICYmIGRvX3VwZGF0ZSAmJiBkaXNwbGF5LT5kcml2ZXItPnVwZGF0ZSkgewogCQl1MTYgdywgaDsKLQkJZGlzcGxheS0+Z2V0X3Jlc29sdXRpb24oZGlzcGxheSwgJncsICZoKTsKKwkJZGlzcGxheS0+ZHJpdmVyLT5nZXRfcmVzb2x1dGlvbihkaXNwbGF5LCAmdywgJmgpOwogCi0JCXIgPSBkaXNwbGF5LT51cGRhdGUoZGlzcGxheSwgMCwgMCwgdywgaCk7CisJCXIgPSBkaXNwbGF5LT5kcml2ZXItPnVwZGF0ZShkaXNwbGF5LCAwLCAwLCB3LCBoKTsKIAl9CiAKIAlyZXR1cm4gcjsKQEAgLTE0MDQsNiArMTQwNiw3IEBACiAJCXVuc2lnbmVkIGxvbmcgcGFkZHIpCiB7CiAJc3RydWN0IG9tYXBmYl9pbmZvICpvZmJpID0gRkIyT0ZCKGZiaSk7CisJc3RydWN0IG9tYXBmYjJfZGV2aWNlICpmYmRldiA9IG9mYmktPmZiZGV2OwogCXN0cnVjdCBvbWFwX2Rzc19kZXZpY2UgKmRpc3BsYXk7CiAJaW50IGJ5dGVzcHA7CiAKQEAgLTE0MTIsNyArMTQxNSw3IEBACiAJaWYgKCFkaXNwbGF5KQogCQlyZXR1cm4gMDsKIAotCXN3aXRjaCAoZGlzcGxheS0+Z2V0X3JlY29tbWVuZGVkX2JwcChkaXNwbGF5KSkgeworCXN3aXRjaCAob21hcGZiX2dldF9yZWNvbW1lbmRlZF9icHAoZmJkZXYsIGRpc3BsYXkpKSB7CiAJY2FzZSAxNjoKIAkJYnl0ZXNwcCA9IDI7CiAJCWJyZWFrOwpAQCAtMTQyNyw3ICsxNDMwLDcgQEAKIAlpZiAoIXNpemUpIHsKIAkJdTE2IHcsIGg7CiAKLQkJZGlzcGxheS0+Z2V0X3Jlc29sdXRpb24oZGlzcGxheSwgJncsICZoKTsKKwkJZGlzcGxheS0+ZHJpdmVyLT5nZXRfcmVzb2x1dGlvbihkaXNwbGF5LCAmdywgJmgpOwogCiAJCWlmIChvZmJpLT5yb3RhdGlvbl90eXBlID09IE9NQVBfRFNTX1JPVF9WUkZCKSB7CiAJCQlzaXplID0gbWF4KG9tYXBfdnJmYl9taW5fcGh5c19zaXplKHcsIGgsIGJ5dGVzcHApLApAQCAtMTYzNiw4ICsxNjM5LDggQEAKIAlpZiAob2xkX3NpemUgPT0gc2l6ZSAmJiBvbGRfdHlwZSA9PSB0eXBlKQogCQlyZXR1cm4gMDsKIAotCWlmIChkaXNwbGF5ICYmIGRpc3BsYXktPnN5bmMpCi0JCQlkaXNwbGF5LT5zeW5jKGRpc3BsYXkpOworCWlmIChkaXNwbGF5ICYmIGRpc3BsYXktPmRyaXZlci0+c3luYykKKwkJCWRpc3BsYXktPmRyaXZlci0+c3luYyhkaXNwbGF5KTsKIAogCW9tYXBmYl9mcmVlX2ZibWVtKGZiaSk7CiAKQEAgLTE3NDUsNyArMTc0OCw3IEBACiAJCXUxNiB3LCBoOwogCQlpbnQgcm90YXRpb24gPSAodmFyLT5yb3RhdGUgKyBvZmJpLT5yb3RhdGlvblswXSkgJSA0OwogCi0JCWRpc3BsYXktPmdldF9yZXNvbHV0aW9uKGRpc3BsYXksICZ3LCAmaCk7CisJCWRpc3BsYXktPmRyaXZlci0+Z2V0X3Jlc29sdXRpb24oZGlzcGxheSwgJncsICZoKTsKIAogCQlpZiAocm90YXRpb24gPT0gRkJfUk9UQVRFX0NXIHx8CiAJCQkJcm90YXRpb24gPT0gRkJfUk9UQVRFX0NDVykgewpAQCAtMTc2MCw3ICsxNzYzLDcgQEAKIAkJdmFyLT55cmVzX3ZpcnR1YWwgPSB2YXItPnlyZXM7CiAKIAkJaWYgKCF2YXItPmJpdHNfcGVyX3BpeGVsKSB7Ci0JCQlzd2l0Y2ggKGRpc3BsYXktPmdldF9yZWNvbW1lbmRlZF9icHAoZGlzcGxheSkpIHsKKwkJCXN3aXRjaCAob21hcGZiX2dldF9yZWNvbW1lbmRlZF9icHAoZmJkZXYsIGRpc3BsYXkpKSB7CiAJCQljYXNlIDE2OgogCQkJCXZhci0+Yml0c19wZXJfcGl4ZWwgPSAxNjsKIAkJCQlicmVhazsKQEAgLTE4MjgsNyArMTgzMSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgZmJkZXYtPm51bV9kaXNwbGF5czsgaSsrKSB7CiAJCWlmIChmYmRldi0+ZGlzcGxheXNbaV0tPnN0YXRlICE9IE9NQVBfRFNTX0RJU1BMQVlfRElTQUJMRUQpCi0JCQlmYmRldi0+ZGlzcGxheXNbaV0tPmRpc2FibGUoZmJkZXYtPmRpc3BsYXlzW2ldKTsKKwkJCWZiZGV2LT5kaXNwbGF5c1tpXS0+ZHJpdmVyLT5kaXNhYmxlKGZiZGV2LT5kaXNwbGF5c1tpXSk7CiAKIAkJb21hcF9kc3NfcHV0X2RldmljZShmYmRldi0+ZGlzcGxheXNbaV0pOwogCX0KQEAgLTIwMTEsNyArMjAxNCw4IEBACiAJfQogfQogCi1zdGF0aWMgaW50IG9tYXBmYl9zZXRfZGVmX21vZGUoc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZGlzcGxheSwgY2hhciAqbW9kZV9zdHIpCitzdGF0aWMgaW50IG9tYXBmYl9zZXRfZGVmX21vZGUoc3RydWN0IG9tYXBmYjJfZGV2aWNlICpmYmRldiwKKwkJc3RydWN0IG9tYXBfZHNzX2RldmljZSAqZGlzcGxheSwgY2hhciAqbW9kZV9zdHIpCiB7CiAJaW50IHI7CiAJdTggYnBwOwpAQCAtMjAyMSwyMCArMjAyNSwzNyBAQAogCWlmIChyKQogCQlyZXR1cm4gcjsKIAotCWRpc3BsYXktPnBhbmVsLnJlY29tbWVuZGVkX2JwcCA9IGJwcDsKKwlmYmRldi0+YnBwX292ZXJyaWRlc1tmYmRldi0+bnVtX2JwcF9vdmVycmlkZXNdLmRzc2RldiA9IGRpc3BsYXk7CisJZmJkZXYtPmJwcF9vdmVycmlkZXNbZmJkZXYtPm51bV9icHBfb3ZlcnJpZGVzXS5icHAgPSBicHA7CisJKytmYmRldi0+bnVtX2JwcF9vdmVycmlkZXM7CiAKLQlpZiAoIWRpc3BsYXktPmNoZWNrX3RpbWluZ3MgfHwgIWRpc3BsYXktPnNldF90aW1pbmdzKQorCWlmICghZGlzcGxheS0+ZHJpdmVyLT5jaGVja190aW1pbmdzIHx8ICFkaXNwbGF5LT5kcml2ZXItPnNldF90aW1pbmdzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXIgPSBkaXNwbGF5LT5jaGVja190aW1pbmdzKGRpc3BsYXksICZ0aW1pbmdzKTsKKwlyID0gZGlzcGxheS0+ZHJpdmVyLT5jaGVja190aW1pbmdzKGRpc3BsYXksICZ0aW1pbmdzKTsKIAlpZiAocikKIAkJcmV0dXJuIHI7CiAKLQlkaXNwbGF5LT5zZXRfdGltaW5ncyhkaXNwbGF5LCAmdGltaW5ncyk7CisJZGlzcGxheS0+ZHJpdmVyLT5zZXRfdGltaW5ncyhkaXNwbGF5LCAmdGltaW5ncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBvbWFwZmJfZ2V0X3JlY29tbWVuZGVkX2JwcChzdHJ1Y3Qgb21hcGZiMl9kZXZpY2UgKmZiZGV2LAorCQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXYpCit7CisJaW50IGk7CisKKwlCVUdfT04oZHNzZGV2LT5kcml2ZXItPmdldF9yZWNvbW1lbmRlZF9icHAgPT0gTlVMTCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZmJkZXYtPm51bV9icHBfb3ZlcnJpZGVzOyArK2kpIHsKKwkJaWYgKGRzc2RldiA9PSBmYmRldi0+YnBwX292ZXJyaWRlc1tpXS5kc3NkZXYpCisJCQlyZXR1cm4gZmJkZXYtPmJwcF9vdmVycmlkZXNbaV0uYnBwOworCX0KKworCXJldHVybiBkc3NkZXYtPmRyaXZlci0+Z2V0X3JlY29tbWVuZGVkX2JwcChkc3NkZXYpOworfQorCiBzdGF0aWMgaW50IG9tYXBmYl9wYXJzZV9kZWZfbW9kZXMoc3RydWN0IG9tYXBmYjJfZGV2aWNlICpmYmRldikKIHsKIAljaGFyICpzdHIsICpvcHRpb25zLCAqdGhpc19vcHQ7CkBAIC0yMDczLDcgKzIwOTQsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlyID0gb21hcGZiX3NldF9kZWZfbW9kZShkaXNwbGF5LCBtb2RlX3N0cik7CisJCXIgPSBvbWFwZmJfc2V0X2RlZl9tb2RlKGZiZGV2LCBkaXNwbGF5LCBtb2RlX3N0cik7CiAJCWlmIChyKQogCQkJYnJlYWs7CiAJfQpAQCAtMjExMSwxOCArMjEzMiwyMyBAQAogCWZiZGV2LT5kZXYgPSAmcGRldi0+ZGV2OwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGZiZGV2KTsKIAorCXIgPSAwOwogCWZiZGV2LT5udW1fZGlzcGxheXMgPSAwOwogCWRzc2RldiA9IE5VTEw7CiAJZm9yX2VhY2hfZHNzX2Rldihkc3NkZXYpIHsKIAkJb21hcF9kc3NfZ2V0X2RldmljZShkc3NkZXYpOworCiAJCWlmICghZHNzZGV2LT5kcml2ZXIpIHsKIAkJCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vIGRyaXZlciBmb3IgZGlzcGxheVxuIik7Ci0JCQlyID0gLUVJTlZBTDsKLQkJCWdvdG8gY2xlYW51cDsKKwkJCXIgPSAtRU5PREVWOwogCQl9CisKIAkJZmJkZXYtPmRpc3BsYXlzW2ZiZGV2LT5udW1fZGlzcGxheXMrK10gPSBkc3NkZXY7CiAJfQogCisJaWYgKHIpCisJCWdvdG8gY2xlYW51cDsKKwogCWlmIChmYmRldi0+bnVtX2Rpc3BsYXlzID09IDApIHsKIAkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gZGlzcGxheXNcbiIpOwogCQlyID0gLUVJTlZBTDsKQEAgLTIxNjcsMzUgKzIxOTMsMjggQEAKIAl9CiAKIAlpZiAoZGVmX2Rpc3BsYXkpIHsKLSNpZm5kZWYgQ09ORklHX0ZCX09NQVAyX0ZPUkNFX0FVVE9fVVBEQVRFCi0JCXUxNiB3LCBoOwotI2VuZGlmCi0JCXIgPSBkZWZfZGlzcGxheS0+ZW5hYmxlKGRlZl9kaXNwbGF5KTsKLQkJaWYgKHIpCisJCXN0cnVjdCBvbWFwX2Rzc19kcml2ZXIgKmRzc2RydiA9IGRlZl9kaXNwbGF5LT5kcml2ZXI7CisKKwkJciA9IGRlZl9kaXNwbGF5LT5kcml2ZXItPmVuYWJsZShkZWZfZGlzcGxheSk7CisJCWlmIChyKSB7CiAJCQlkZXZfd2FybihmYmRldi0+ZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBkaXNwbGF5ICclcydcbiIsCiAJCQkJCWRlZl9kaXNwbGF5LT5uYW1lKTsKKwkJCWdvdG8gY2xlYW51cDsKKwkJfQogCi0JCS8qIHNldCB0aGUgdXBkYXRlIG1vZGUgKi8KIAkJaWYgKGRlZl9kaXNwbGF5LT5jYXBzICYgT01BUF9EU1NfRElTUExBWV9DQVBfTUFOVUFMX1VQREFURSkgewotI2lmZGVmIENPTkZJR19GQl9PTUFQMl9GT1JDRV9BVVRPX1VQREFURQotCQkJaWYgKGRlZl9kaXNwbGF5LT5lbmFibGVfdGUpCi0JCQkJZGVmX2Rpc3BsYXktPmVuYWJsZV90ZShkZWZfZGlzcGxheSwgMSk7Ci0JCQlpZiAoZGVmX2Rpc3BsYXktPnNldF91cGRhdGVfbW9kZSkKLQkJCQlkZWZfZGlzcGxheS0+c2V0X3VwZGF0ZV9tb2RlKGRlZl9kaXNwbGF5LAotCQkJCQkJT01BUF9EU1NfVVBEQVRFX0FVVE8pOwotI2Vsc2UgLyogTUFOVUFMX1VQREFURSAqLwotCQkJaWYgKGRlZl9kaXNwbGF5LT5lbmFibGVfdGUpCi0JCQkJZGVmX2Rpc3BsYXktPmVuYWJsZV90ZShkZWZfZGlzcGxheSwgMCk7Ci0JCQlpZiAoZGVmX2Rpc3BsYXktPnNldF91cGRhdGVfbW9kZSkKLQkJCQlkZWZfZGlzcGxheS0+c2V0X3VwZGF0ZV9tb2RlKGRlZl9kaXNwbGF5LAorCQkJdTE2IHcsIGg7CisJCQlpZiAoZHNzZHJ2LT5lbmFibGVfdGUpCisJCQkJZHNzZHJ2LT5lbmFibGVfdGUoZGVmX2Rpc3BsYXksIDEpOworCQkJaWYgKGRzc2Rydi0+c2V0X3VwZGF0ZV9tb2RlKQorCQkJCWRzc2Rydi0+c2V0X3VwZGF0ZV9tb2RlKGRlZl9kaXNwbGF5LAogCQkJCQkJT01BUF9EU1NfVVBEQVRFX01BTlVBTCk7CiAKLQkJCWRlZl9kaXNwbGF5LT5nZXRfcmVzb2x1dGlvbihkZWZfZGlzcGxheSwgJncsICZoKTsKLQkJCWRlZl9kaXNwbGF5LT51cGRhdGUoZGVmX2Rpc3BsYXksIDAsIDAsIHcsIGgpOwotI2VuZGlmCisJCQlkc3NkcnYtPmdldF9yZXNvbHV0aW9uKGRlZl9kaXNwbGF5LCAmdywgJmgpOworCQkJZGVmX2Rpc3BsYXktPmRyaXZlci0+dXBkYXRlKGRlZl9kaXNwbGF5LCAwLCAwLCB3LCBoKTsKIAkJfSBlbHNlIHsKLQkJCWlmIChkZWZfZGlzcGxheS0+c2V0X3VwZGF0ZV9tb2RlKQotCQkJCWRlZl9kaXNwbGF5LT5zZXRfdXBkYXRlX21vZGUoZGVmX2Rpc3BsYXksCisJCQlpZiAoZHNzZHJ2LT5zZXRfdXBkYXRlX21vZGUpCisJCQkJZHNzZHJ2LT5zZXRfdXBkYXRlX21vZGUoZGVmX2Rpc3BsYXksCiAJCQkJCQlPTUFQX0RTU19VUERBVEVfQVVUTyk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL29tYXAyL29tYXBmYi9vbWFwZmIuaCBiL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi5oCmluZGV4IGY3YzljNzMuLmNkNTRmZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vb21hcDIvb21hcGZiL29tYXBmYi5oCkBAIC04Myw2ICs4MywxMiBAQAogCXN0cnVjdCBvbWFwX292ZXJsYXkgKm92ZXJsYXlzWzEwXTsKIAl1bnNpZ25lZCBudW1fbWFuYWdlcnM7CiAJc3RydWN0IG9tYXBfb3ZlcmxheV9tYW5hZ2VyICptYW5hZ2Vyc1sxMF07CisKKwl1bnNpZ25lZCBudW1fYnBwX292ZXJyaWRlczsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3Qgb21hcF9kc3NfZGV2aWNlICpkc3NkZXY7CisJCXU4IGJwcDsKKwl9IGJwcF9vdmVycmlkZXNbMTBdOwogfTsKIAogc3RydWN0IG9tYXBmYl9jb2xvcm1vZGUgewpAQCAtMTA1LDYgKzExMSw5IEBACiAKIGludCBvbWFwZmJfaW9jdGwoc3RydWN0IGZiX2luZm8gKmZiaSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCitpbnQgb21hcGZiX3VwZGF0ZV93aW5kb3coc3RydWN0IGZiX2luZm8gKmZiaSwKKwkJdTMyIHgsIHUzMiB5LCB1MzIgdywgdTMyIGgpOworCiBpbnQgZHNzX21vZGVfdG9fZmJfbW9kZShlbnVtIG9tYXBfY29sb3JfbW9kZSBkc3Ntb2RlLAogCQkJc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3BtMmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3BtMmZiLmMKaW5kZXggMzY0MzZlZS4uMjdmOTNhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wbTJmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vcG0yZmIuYwpAQCAtODk2LDcgKzg5Niw3IEBACiAJICogUHNldWRvY29sb3I6CiAJICogICAgdXNlcyBvZmZzZXQgPSAwICYmIGxlbmd0aCA9IERBQyByZWdpc3RlciB3aWR0aC4KIAkgKiAgICB2YXItPntjb2xvcn0ub2Zmc2V0IGlzIDAKLQkgKiAgICB2YXItPntjb2xvcn0ubGVuZ3RoIGNvbnRhaW5zIHdpZGh0IG9mIERBQworCSAqICAgIHZhci0+e2NvbG9yfS5sZW5ndGggY29udGFpbnMgd2lkdGggb2YgREFDCiAJICogICAgY21hcCBpcyBub3QgdXNlZAogCSAqICAgIERBQ1tYXSBpcyBwcm9ncmFtbWVkIHRvIChyZWQsIGdyZWVuLCBibHVlKQogCSAqIFRydWVjb2xvcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vcTQwZmIuYyBiL2RyaXZlcnMvdmlkZW8vcTQwZmIuYwppbmRleCA0YmVhYzFkLi5kZTQwYTYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3E0MGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9xNDBmYi5jCkBAIC04NSw3ICs4NSw3IEBACiAJLmZiX2ltYWdlYmxpdAk9IGNmYl9pbWFnZWJsaXQsCiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBxNDBmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBxNDBmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vczFkMTN4eHhmYi5jIGIvZHJpdmVycy92aWRlby9zMWQxM3h4eGZiLmMKaW5kZXggMGRlYjBhOC4uN2I2MzQyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zMWQxM3h4eGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zMWQxM3h4eGZiLmMKQEAgLTUxNywxMiArNTE3LDEyIEBACiAJCXNyYyA9IChzeSAqIHN0cmlkZSkgKyAoYnBwICogc3gpOwogCX0KIAotCS8qIHNldCBzb3VyY2UgYWRyZXNzICovCisJLyogc2V0IHNvdXJjZSBhZGRyZXNzICovCiAJczFkMTN4eHhmYl93cml0ZXJlZyhpbmZvLT5wYXIsIFMxRFJFR19CQkxUX1NSQ19TVEFSVDAsIChzcmMgJiAweGZmKSk7CiAJczFkMTN4eHhmYl93cml0ZXJlZyhpbmZvLT5wYXIsIFMxRFJFR19CQkxUX1NSQ19TVEFSVDEsIChzcmMgPj4gOCkgJiAweDAwZmYpOwogCXMxZDEzeHh4ZmJfd3JpdGVyZWcoaW5mby0+cGFyLCBTMURSRUdfQkJMVF9TUkNfU1RBUlQyLCAoc3JjID4+IDE2KSAmIDB4MDBmZik7CiAKLQkvKiBzZXQgZGVzdGluYXRpb24gYWRyZXNzICovCisJLyogc2V0IGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KIAlzMWQxM3h4eGZiX3dyaXRlcmVnKGluZm8tPnBhciwgUzFEUkVHX0JCTFRfRFNUX1NUQVJUMCwgKGRzdCAmIDB4ZmYpKTsKIAlzMWQxM3h4eGZiX3dyaXRlcmVnKGluZm8tPnBhciwgUzFEUkVHX0JCTFRfRFNUX1NUQVJUMSwgKGRzdCA+PiA4KSAmIDB4MDBmZik7CiAJczFkMTN4eHhmYl93cml0ZXJlZyhpbmZvLT5wYXIsIFMxRFJFR19CQkxUX0RTVF9TVEFSVDIsIChkc3QgPj4gMTYpICYgMHgwMGZmKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3MzYzI0MTBmYi5jCmluZGV4IGFhYzY2MTIuLjJiMDk0ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vczNjMjQxMGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zM2MyNDEwZmIuYwpAQCAtMTAwNCwxMiArMTAwNCwxMiBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHMzYzI0MTBmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgczNjMjQxMGZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJcmV0dXJuIHMzYzI0eHhmYl9wcm9iZShwZGV2LCBEUlZfUzNDMjQxMCk7CiB9CiAKLXN0YXRpYyBpbnQgX19pbml0IHMzYzI0MTJmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgczNjMjQxMmZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJcmV0dXJuIHMzYzI0eHhmYl9wcm9iZShwZGV2LCBEUlZfUzNDMjQxMik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NhMTEwMGZiLmMKaW5kZXggY2RhYTg3My4uZThiNzZkNiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zYTExMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2ExMTAwZmIuYwpAQCAtMTQzNSw3ICsxNDM1LDcgQEAKIAlyZXR1cm4gZmJpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCBzYTExMDBmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgc2ExMTAwZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3Qgc2ExMTAwZmJfaW5mbyAqZmJpOwogCWludCByZXQsIGlycTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2dpdndmYi5jIGIvZHJpdmVycy92aWRlby9zZ2l2d2ZiLmMKaW5kZXggZjg2MDEyMi4uN2EzYTVlMiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zZ2l2d2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zZ2l2d2ZiLmMKQEAgLTc0NSw3ICs3NDUsNyBAQAogLyoKICAqICBJbml0aWFsaXNhdGlvbgogICovCi1zdGF0aWMgaW50IF9faW5pdCBzZ2l2d2ZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNnaXZ3ZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBzZ2l2d19wYXIgKnBhcjsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc2hfbW9iaWxlX2xjZGNmYi5jIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKaW5kZXggOGQ3NjUzZS4uYmJkMWRiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zaF9tb2JpbGVfbGNkY2ZiLmMKQEAgLTk0Myw3ICs5NDMsNyBAQAogCiBzdGF0aWMgaW50IHNoX21vYmlsZV9sY2RjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKIAotc3RhdGljIGludCBfX2luaXQgc2hfbW9iaWxlX2xjZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHNoX21vYmlsZV9sY2RjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJc3RydWN0IHNoX21vYmlsZV9sY2RjX3ByaXYgKnByaXY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3Npcy9zaXNfbWFpbi5jIGIvZHJpdmVycy92aWRlby9zaXMvc2lzX21haW4uYwppbmRleCA5ZDJiNmJjLi5hNTMxYTBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3Npcy9zaXNfbWFpbi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vc2lzL3Npc19tYWluLmMKQEAgLTE4OTEsOSArMTg5MSw2IEBACiAJLmZiX2ZpbGxyZWN0CT0gZmJjb25fc2lzX2ZpbGxyZWN0LAogCS5mYl9jb3B5YXJlYQk9IGZiY29uX3Npc19jb3B5YXJlYSwKIAkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKLSNpZmRlZiBDT05GSUdfRkJfU09GVF9DVVJTT1IKLQkuZmJfY3Vyc29yCT0gc29mdF9jdXJzb3IsCi0jZW5kaWYKIAkuZmJfc3luYwk9IGZiY29uX3Npc19zeW5jLAogI2lmZGVmIFNJU19ORVdfQ09ORklHX0NPTVBBVAogCS5mYl9jb21wYXRfaW9jdGw9IHNpc2ZiX2lvY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9zbTUwMWZiLmMgYi9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYwppbmRleCAzNTM3MGQwLi5iN2RjMTgwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NtNTAxZmIuYwpAQCAtNDExLDcgKzQxMSw3IEBACiAJc3RydWN0IHNtNTAxZmJfcGFyICAqcGFyID0gaW5mby0+cGFyOwogCXN0cnVjdCBzbTUwMWZiX2luZm8gKmZiaSA9IHBhci0+aW5mbzsKIAl1bnNpZ25lZCBsb25nIHBpeGNsb2NrOyAgICAgIC8qIHBpeGVsY2xvY2sgaW4gSHogKi8KLQl1bnNpZ25lZCBsb25nIHNtNTAxcGl4Y2xvY2s7IC8qIHBpeGVsY2xvY2sgdGhlIDUwMSBjYW4gYWNoaXZlIGluIEh6ICovCisJdW5zaWduZWQgbG9uZyBzbTUwMXBpeGNsb2NrOyAvKiBwaXhlbGNsb2NrIHRoZSA1MDEgY2FuIGFjaGlldmUgaW4gSHogKi8KIAl1bnNpZ25lZCBpbnQgbWVtX3R5cGU7CiAJdW5zaWduZWQgaW50IGNsb2NrX3R5cGU7CiAJdW5zaWduZWQgaW50IGhlYWRfYWRkcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc3N0ZmIuYyBiL2RyaXZlcnMvdmlkZW8vc3N0ZmIuYwppbmRleCA2MDlkMGE1Li43OTg0MGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NzdGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9zc3RmYi5jCkBAIC0xMTAyLDcgKzExMDIsNyBAQAogICogZGV0ZWN0IGRhYyB0eXBlCiAgKiBwcmVyZXF1aXNpdGUgOiB3cml0ZSB0byBGYmlJbml0eCBlbmFibGVkLCB2aWRlbyBhbmQgZmJpIGFuZCBwY2kgZmlmbyByZXNldCwKICAqIGRyYW0gcmVmcmVzaCBkaXNhYmxlZCwgRmJpSW5pdCByZW1hcGVkLgotICogVE9ETzogbW1oLi4gbWF5YmUgaSBzaG91ZCBwdXQgdGhlICJwcmVyZXF1aXNpdGUiIGluIHRoZSBmdW5jIC4uLgorICogVE9ETzogbW1oLi4gbWF5YmUgaSBzaG91bGQgcHV0IHRoZSAicHJlcmVxdWlzaXRlIiBpbiB0aGUgZnVuYyAuLi4KICAqLwogCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vc3VueHZyNTAwLmMgYi9kcml2ZXJzL3ZpZGVvL3N1bnh2cjUwMC5jCmluZGV4IDE4Yjk1MDcuLjRjZDUwNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vc3VueHZyNTAwLmMKKysrIGIvZHJpdmVycy92aWRlby9zdW54dnI1MDAuYwpAQCAtNDAwLDYgKzQwMCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBlM2RfcGNpX3RhYmxlW10gPSB7CiAJewlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfM0RMQUJTLCAweDdhMCksCX0sCisJewlQQ0lfREVWSUNFKDB4MTA5MSwgMHg3YTApLAkJCX0sCiAJewlQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfM0RMQUJTLCAweDdhMiksCX0sCiAJewkudmVuZG9yID0gUENJX1ZFTkRPUl9JRF8zRExBQlMsCiAJCS5kZXZpY2UgPSBQQ0lfQU5ZX0lELApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92ZXNhZmIuYyBiL2RyaXZlcnMvdmlkZW8vdmVzYWZiLmMKaW5kZXggYmQzN2VlMS4uZWY0MTI4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92ZXNhZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3Zlc2FmYi5jCkBAIC0yMjYsNyArMjI2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBfX2luaXQgdmVzYWZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHZlc2FmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJaW50IGksIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3ZmYi5jCmluZGV4IDA1MGQ0MzIuLmI4YWI5OTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmZiLmMKKysrIGIvZHJpdmVycy92aWRlby92ZmIuYwpAQCAtNDc5LDcgKzQ3OSw3IEBACiAgICAgICogIEluaXRpYWxpc2F0aW9uCiAgICAgICovCiAKLXN0YXRpYyBpbnQgX19pbml0IHZmYl9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCB2ZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCWludCByZXR2YWwgPSAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92Z2ExNmZiLmMgYi9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYwppbmRleCA1YjI5Mzg5Li43NmQ4ZGFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZnYTE2ZmIuYwpAQCAtMTI5Myw3ICsxMjkzLDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IF9faW5pdCB2Z2ExNmZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IHZnYTE2ZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmYl9pbmZvICppbmZvOwogCXN0cnVjdCB2Z2ExNmZiX3BhciAqcGFyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9NYWtlZmlsZQppbmRleCBlNTMzYjRiLi5lZWVkMjM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9NYWtlZmlsZQpAQCAtNCw0ICs0LDQgQEAKIAogb2JqLSQoQ09ORklHX0ZCX1ZJQSkgKz0gdmlhZmIubwogCi12aWFmYi15CTo9dmlhZmJkZXYubyBody5vIGlmYWNlLm8gIHZpYV9pMmMubyBkdmkubyBsY2QubyBpb2N0bC5vIGFjY2VsLm8gdmlhX3V0aWxpdHkubyB2dDE2MzYubyBnbG9iYWwubyB0YmxEUEFTZXR0aW5nLm8gdmlhbW9kZS5vIHRibDE2MzYubwordmlhZmIteQk6PXZpYWZiZGV2Lm8gaHcubyB2aWFfaTJjLm8gZHZpLm8gbGNkLm8gaW9jdGwubyBhY2NlbC5vIHZpYV91dGlsaXR5Lm8gdnQxNjM2Lm8gZ2xvYmFsLm8gdGJsRFBBU2V0dGluZy5vIHZpYW1vZGUubyB0YmwxNjM2Lm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2NoaXAuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL2NoaXAuaAppbmRleCA0NzRmNDI4Li44YzA2YmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9jaGlwLmgKKysrIGIvZHJpdmVycy92aWRlby92aWEvY2hpcC5oCkBAIC0xMDcsNyArMTA3LDYgQEAKIHN0cnVjdCB0bWRzX2NoaXBfaW5mb3JtYXRpb24gewogCWludCB0bWRzX2NoaXBfbmFtZTsKIAlpbnQgdG1kc19jaGlwX3NsYXZlX2FkZHI7Ci0JaW50IGR2aV9wYW5lbF9pZDsKIAlpbnQgZGF0YV9tb2RlOwogCWludCBvdXRwdXRfaW50ZXJmYWNlOwogCWludCBpMmNfcG9ydDsKQEAgLTE0MiwxNCArMTQxLDkgQEAKIAlpbnQgaWdhX3BhdGg7CiAJaW50IGhfYWN0aXZlOwogCWludCB2X2FjdGl2ZTsKLQlpbnQgYnBwOwotCWludCByZWZyZXNoX3JhdGU7Ci0JaW50IGdldF9kdmlfc2l6ZV9tZXRob2Q7CiAJaW50IG1heF9waXhlbF9jbG9jazsKLQlpbnQgZHZpX3BhbmVsX3NpemU7Ci0JaW50IGR2aV9wYW5lbF9ocmVzOwotCWludCBkdmlfcGFuZWxfdnJlczsKLQlpbnQgbmF0aXZlX3NpemU7CisJaW50IG1heF9ocmVzOworCWludCBtYXhfdnJlczsKIH07CiAKIHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gewpAQCAtMTYwLDcgKzE1NCw2IEBACiAJaW50IHJlZnJlc2hfcmF0ZTsKIAlpbnQgZ2V0X2xjZF9zaXplX21ldGhvZDsKIAlpbnQgbGNkX3BhbmVsX2lkOwotCWludCBsY2RfcGFuZWxfc2l6ZTsKIAlpbnQgbGNkX3BhbmVsX2hyZXM7CiAJaW50IGxjZF9wYW5lbF92cmVzOwogCWludCBkaXNwbGF5X21ldGhvZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2R2aS5jIGIvZHJpdmVycy92aWRlby92aWEvZHZpLmMKaW5kZXggNjdiMzY5My4uYWJlNTliOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvZHZpLmMKKysrIGIvZHJpdmVycy92aWRlby92aWEvZHZpLmMKQEAgLTIzLDExICsyMywxMCBAQAogc3RhdGljIHZvaWQgdG1kc19yZWdpc3Rlcl93cml0ZShpbnQgaW5kZXgsIHU4IGRhdGEpOwogc3RhdGljIGludCB0bWRzX3JlZ2lzdGVyX3JlYWQoaW50IGluZGV4KTsKIHN0YXRpYyBpbnQgdG1kc19yZWdpc3Rlcl9yZWFkX2J5dGVzKGludCBpbmRleCwgdTggKmJ1ZmYsIGludCBidWZmX2xlbik7Ci1zdGF0aWMgaW50IGNoZWNrX3JlZHVjZV9ibGFua2luZ19tb2RlKGludCBtb2RlX2luZGV4LAotCWludCByZWZyZXNoX3JhdGUpOwotc3RhdGljIGludCBkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2MSh2b2lkKTsKLXN0YXRpYyBpbnQgZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjIodm9pZCk7Ci1zdGF0aWMgdW5zaWduZWQgY2hhciBkdmlfZ2V0X3BhbmVsX2luZm8odm9pZCk7CitzdGF0aWMgdm9pZCBkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2MShzdHJ1Y3QgdG1kc19jaGlwX2luZm9ybWF0aW9uCisJKnRtZHNfY2hpcCwgc3RydWN0IHRtZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqdG1kc19zZXR0aW5nKTsKK3N0YXRpYyB2b2lkIGR2aV9nZXRfcGFuZWxfc2l6ZV9mcm9tX0REQ3YyKHN0cnVjdCB0bWRzX2NoaXBfaW5mb3JtYXRpb24KKwkqdG1kc19jaGlwLCBzdHJ1Y3QgdG1kc19zZXR0aW5nX2luZm9ybWF0aW9uICp0bWRzX3NldHRpbmcpOwogc3RhdGljIGludCB2aWFmYl9kdmlfcXVlcnlfRURJRCh2b2lkKTsKIAogc3RhdGljIGludCBjaGVja190bWRzX2NoaXAoaW50IGRldmljZV9pZF9zdWJhZGRyLCBpbnQgZGV2aWNlX2lkKQpAQCAtMzgsMjMgKzM3LDI0IEBACiAJCXJldHVybiBGQUlMOwogfQogCi12b2lkIHZpYWZiX2luaXRfZHZpX3NpemUodm9pZCkKK3ZvaWQgdmlhZmJfaW5pdF9kdmlfc2l6ZShzdHJ1Y3QgdG1kc19jaGlwX2luZm9ybWF0aW9uICp0bWRzX2NoaXAsCisJc3RydWN0IHRtZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqdG1kc19zZXR0aW5nKQogewogCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX2luaXRfZHZpX3NpemUoKVxuIik7Ci0JREVCVUdfTVNHKEtFUk5fSU5GTwotCQkidmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmdldF9kdmlfc2l6ZV9tZXRob2QgJWRcbiIsCi0JCSAgdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmdldF9kdmlfc2l6ZV9tZXRob2QpOwogCi0Jc3dpdGNoICh2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+Z2V0X2R2aV9zaXplX21ldGhvZCkgewotCWNhc2UgR0VUX0RWSV9TSVpFX0JZX1NZU1RFTV9CSU9TOgorCXZpYWZiX2R2aV9zZW5zZSgpOworCXN3aXRjaCAodmlhZmJfZHZpX3F1ZXJ5X0VESUQoKSkgeworCWNhc2UgMToKKwkJZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjEodG1kc19jaGlwLCB0bWRzX3NldHRpbmcpOwogCQlicmVhazsKLQljYXNlIEdFVF9EVklfU1pJRV9CWV9IV19TVFJBUFBJTkc6CisJY2FzZSAyOgorCQlkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2Mih0bWRzX2NoaXAsIHRtZHNfc2V0dGluZyk7CiAJCWJyZWFrOwotCWNhc2UgR0VUX0RWSV9TSVpFX0JZX1ZHQV9CSU9TOgogCWRlZmF1bHQ6Ci0JCWR2aV9nZXRfcGFuZWxfaW5mbygpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2aWFmYl9pbml0X2R2aV9zaXplOiBEVkkgcGFuZWwgc2l6ZSB1bmRldGVjdGVkIVxuIik7CiAJCWJyZWFrOwogCX0KKwogCXJldHVybjsKIH0KIApAQCAtMTg5LDQyICsxODksMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjaGVja19yZWR1Y2VfYmxhbmtpbmdfbW9kZShpbnQgbW9kZV9pbmRleCwKLQlpbnQgcmVmcmVzaF9yYXRlKQotewotCWlmIChyZWZyZXNoX3JhdGUgIT0gNjApCi0JCXJldHVybiBmYWxzZTsKLQotCXN3aXRjaCAobW9kZV9pbmRleCkgewotCQkvKiBGb2xsb3dpbmcgbW9kZXMgaGF2ZSByZWR1Y2UgYmxhbmtpbmcgbW9kZS4gKi8KLQljYXNlIFZJQV9SRVNfMTM2MFg3Njg6Ci0JY2FzZSBWSUFfUkVTXzE0MDBYMTA1MDoKLQljYXNlIFZJQV9SRVNfMTQ0MFg5MDA6Ci0JY2FzZSBWSUFfUkVTXzE2MDBYOTAwOgotCWNhc2UgVklBX1JFU18xNjgwWDEwNTA6Ci0JY2FzZSBWSUFfUkVTXzE5MjBYMTA4MDoKLQljYXNlIFZJQV9SRVNfMTkyMFgxMjAwOgotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCURFQlVHX01TRyhLRVJOX0lORk8KLQkJCSAgIlRoaXMgZHZpIG1vZGUgJWQgaGF2ZSBubyByZWR1Y2UgYmxhbmtpbmcgbW9kZSFcbiIsCi0JCQkgIG1vZGVfaW5kZXgpOwotCQlyZXR1cm4gZmFsc2U7Ci0JfQotCi0JcmV0dXJuIHRydWU7Ci19Ci0KIC8qIERWSSBTZXQgTW9kZSAqLwotdm9pZCB2aWFmYl9kdmlfc2V0X21vZGUoaW50IHZpZGVvX2luZGV4LCBpbnQgbW9kZV9icHAsIGludCBzZXRfaWdhKQordm9pZCB2aWFmYl9kdmlfc2V0X21vZGUoc3RydWN0IFZpZGVvTW9kZVRhYmxlICptb2RlLCBpbnQgbW9kZV9icHAsCisJaW50IHNldF9pZ2EpCiB7Ci0Jc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2aWRlb01vZGUgPSBOVUxMOworCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqcmJfbW9kZTsKIAlzdHJ1Y3QgY3J0X21vZGVfdGFibGUgKnBEdmlUaW1pbmc7CiAJdW5zaWduZWQgbG9uZyBkZXNpcmVQaXhlbENsb2NrLCBtYXhQaXhlbENsb2NrOwotCWludCBzdGF0dXMgPSAwOwotCXZpZGVvTW9kZSA9IHZpYWZiX2dldF9tb2RldGJsX3BvaW50ZXIodmlkZW9faW5kZXgpOwotCXBEdmlUaW1pbmcgPSB2aWRlb01vZGUtPmNydGM7CisJcER2aVRpbWluZyA9IG1vZGUtPmNydGM7CiAJZGVzaXJlUGl4ZWxDbG9jayA9IHBEdmlUaW1pbmctPmNsayAvIDEwMDAwMDA7CiAJbWF4UGl4ZWxDbG9jayA9ICh1bnNpZ25lZCBsb25nKXZpYXBhcmluZm8tPgogCQl0bWRzX3NldHRpbmdfaW5mby0+bWF4X3BpeGVsX2Nsb2NrOwpAQCAtMjMyLDIwICsyMDQsMTQgQEAKIAlERUJVR19NU0coS0VSTl9JTkZPICJcbkRWSV9zZXRfbW9kZSEhXG4iKTsKIAogCWlmICgobWF4UGl4ZWxDbG9jayAhPSAwKSAmJiAoZGVzaXJlUGl4ZWxDbG9jayA+IG1heFBpeGVsQ2xvY2spKSB7Ci0JCS8qQ2hlY2sgaWYgcmVkdWNlLWJsYW5raW5nIG1vZGUgaXMgZXhpc3QgKi8KLQkJc3RhdHVzID0KLQkJICAgIGNoZWNrX3JlZHVjZV9ibGFua2luZ19tb2RlKHZpZGVvX2luZGV4LAotCQkJCQkgICAgICAgcER2aVRpbWluZy0+cmVmcmVzaF9yYXRlKTsKLQkJaWYgKHN0YXR1cykgewotCQkJdmlkZW9faW5kZXggKz0gMTAwOwkvKlVzZSByZWR1Y2UtYmxhbmtpbmcgbW9kZSAqLwotCQkJdmlkZW9Nb2RlID0gdmlhZmJfZ2V0X21vZGV0YmxfcG9pbnRlcih2aWRlb19pbmRleCk7Ci0JCQlwRHZpVGltaW5nID0gdmlkZW9Nb2RlLT5jcnRjOwotCQkJREVCVUdfTVNHKEtFUk5fSU5GTwotCQkJCSAgIkRWSSB1c2UgcmVkdWNlIGJsYW5raW5nIG1vZGUgJWQhIVxuIiwKLQkJCQkgIHZpZGVvX2luZGV4KTsKKwkJcmJfbW9kZSA9IHZpYWZiX2dldF9yYl9tb2RlKG1vZGUtPmNydGNbMF0uY3J0Yy5ob3JfYWRkciwKKwkJCW1vZGUtPmNydGNbMF0uY3J0Yy52ZXJfYWRkcik7CisJCWlmIChyYl9tb2RlKSB7CisJCQltb2RlID0gcmJfbW9kZTsKKwkJCXBEdmlUaW1pbmcgPSByYl9tb2RlLT5jcnRjOwogCQl9CiAJfQotCXZpYWZiX2ZpbGxfY3J0Y190aW1pbmcocER2aVRpbWluZywgdmlkZW9faW5kZXgsIG1vZGVfYnBwIC8gOCwgc2V0X2lnYSk7CisJdmlhZmJfZmlsbF9jcnRjX3RpbWluZyhwRHZpVGltaW5nLCBtb2RlLCBtb2RlX2JwcCAvIDgsIHNldF9pZ2EpOwogCXZpYWZiX3NldF9vdXRwdXRfcGF0aChERVZJQ0VfRFZJLCBzZXRfaWdhLAogCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby5vdXRwdXRfaW50ZXJmYWNlKTsKIH0KQEAgLTM1MCwyNSArMzE2LDE4IEBACiAJCXJldHVybiBmYWxzZTsKIH0KIAotLyoKLSAqCi0gKiBpbnQgZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjEodm9pZCkKLSAqCi0gKiAgICAgLSBHZXQgUGFuZWwgU2l6ZSBVc2luZyBFRElEMSBUYWJsZQotICoKLSAqIFJldHVybiBUeXBlOiAgICBpbnQKLSAqCi0gKi8KLXN0YXRpYyBpbnQgZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjEodm9pZCkKKy8qIEdldCBQYW5lbCBTaXplIFVzaW5nIEVESUQxIFRhYmxlICovCitzdGF0aWMgdm9pZCBkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2MShzdHJ1Y3QgdG1kc19jaGlwX2luZm9ybWF0aW9uCisJKnRtZHNfY2hpcCwgc3RydWN0IHRtZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqdG1kc19zZXR0aW5nKQogewotCWludCBpLCBtYXhfaCA9IDAsIG1heF92ID0gMCwgdG1wLCByZXN0b3JlOworCWludCBpLCBtYXhfaCA9IDAsIHRtcCwgcmVzdG9yZTsKIAl1bnNpZ25lZCBjaGFyIHJEYXRhOwogCXVuc2lnbmVkIGNoYXIgRURJRF9EQVRBWzE4XTsKIAogCURFQlVHX01TRyhLRVJOX0lORk8gIlxuIGR2aV9nZXRfcGFuZWxfc2l6ZV9mcm9tX0REQ3YxIFxuIik7CiAKLQlyZXN0b3JlID0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfc2xhdmVfYWRkcjsKLQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLnRtZHNfY2hpcF9zbGF2ZV9hZGRyID0gMHhBMDsKKwlyZXN0b3JlID0gdG1kc19jaGlwLT50bWRzX2NoaXBfc2xhdmVfYWRkcjsKKwl0bWRzX2NoaXAtPnRtZHNfY2hpcF9zbGF2ZV9hZGRyID0gMHhBMDsKIAogCXJEYXRhID0gdG1kc19yZWdpc3Rlcl9yZWFkKDB4MjMpOwogCWlmIChyRGF0YSAmIDB4M0MpCkBAIC00MTQsOCArMzczLDggQEAKIAkJCQkvKiBUaGUgZmlyc3QgdHdvIGJ5dGUgbXVzdCBiZSB6ZXJvLiAqLwogCQkJCWlmIChFRElEX0RBVEFbM10gPT0gMHhGRCkgewogCQkJCQkvKiBUbyBnZXQgbWF4IHBpeGVsIGNsb2NrLiAqLwotCQkJCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+Ci0JCQkJCW1heF9waXhlbF9jbG9jayA9IEVESURfREFUQVs5XSAqIDEwOworCQkJCQl0bWRzX3NldHRpbmctPm1heF9waXhlbF9jbG9jayA9CisJCQkJCQlFRElEX0RBVEFbOV0gKiAxMDsKIAkJCQl9CiAJCQl9CiAJCQlicmVhazsKQEAgLTQyNSwxNTQgKzM4NCw4OCBAQAogCQl9CiAJfQogCisJdG1kc19zZXR0aW5nLT5tYXhfaHJlcyA9IG1heF9oOwogCXN3aXRjaCAobWF4X2gpIHsKIAljYXNlIDY0MDoKLQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KLQkJCVZJQV9SRVNfNjQwWDQ4MDsKKwkJdG1kc19zZXR0aW5nLT5tYXhfdnJlcyA9IDQ4MDsKIAkJYnJlYWs7CiAJY2FzZSA4MDA6Ci0JCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9Ci0JCQlWSUFfUkVTXzgwMFg2MDA7CisJCXRtZHNfc2V0dGluZy0+bWF4X3ZyZXMgPSA2MDA7CiAJCWJyZWFrOwogCWNhc2UgMTAyNDoKLQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KLQkJCVZJQV9SRVNfMTAyNFg3Njg7CisJCXRtZHNfc2V0dGluZy0+bWF4X3ZyZXMgPSA3Njg7CiAJCWJyZWFrOwogCWNhc2UgMTI4MDoKLQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KLQkJCVZJQV9SRVNfMTI4MFgxMDI0OworCQl0bWRzX3NldHRpbmctPm1heF92cmVzID0gMTAyNDsKIAkJYnJlYWs7CiAJY2FzZSAxNDAwOgotCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQotCQkJVklBX1JFU18xNDAwWDEwNTA7CisJCXRtZHNfc2V0dGluZy0+bWF4X3ZyZXMgPSAxMDUwOwogCQlicmVhazsKIAljYXNlIDE0NDA6Ci0JCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9Ci0JCQlWSUFfUkVTXzE0NDBYMTA1MDsKKwkJdG1kc19zZXR0aW5nLT5tYXhfdnJlcyA9IDEwNTA7CiAJCWJyZWFrOwogCWNhc2UgMTYwMDoKLQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KLQkJCVZJQV9SRVNfMTYwMFgxMjAwOworCQl0bWRzX3NldHRpbmctPm1heF92cmVzID0gMTIwMDsKIAkJYnJlYWs7CiAJY2FzZSAxOTIwOgotCQlpZiAobWF4X3YgPT0gMTIwMCkgewotCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KLQkJCQlWSUFfUkVTXzE5MjBYMTIwMDsKLQkJfSBlbHNlIHsKLQkJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9Ci0JCQkJVklBX1JFU18xOTIwWDEwODA7Ci0JCX0KLQorCQl0bWRzX3NldHRpbmctPm1heF92cmVzID0gMTA4MDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KLQkJCVZJQV9SRVNfMTAyNFg3Njg7Ci0JCURFQlVHX01TRyhLRVJOX0lORk8gIlVua25vd24gcGFuZWwgc2l6ZSBtYXggcmVzb2x1dGlvbiA9ICVkICFcCi0JCQkJCSBzZXQgZGVmYXVsdCBwYW5lbCBzaXplLlxuIiwgbWF4X2gpOworCQlERUJVR19NU0coS0VSTl9JTkZPICJVbmtub3duIHBhbmVsIHNpemUgbWF4IHJlc29sdXRpb24gPSAlZCAhICIKKwkJCQkJICJzZXQgZGVmYXVsdCBwYW5lbCBzaXplLlxuIiwgbWF4X2gpOwogCQlicmVhazsKIAl9CiAKIAlERUJVR19NU0coS0VSTl9JTkZPICJEVkkgbWF4IHBpeGVsY2xvY2sgPSAlZFxuIiwKLQkJICB2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+bWF4X3BpeGVsX2Nsb2NrKTsKLQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLnRtZHNfY2hpcF9zbGF2ZV9hZGRyID0gcmVzdG9yZTsKLQlyZXR1cm4gdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplOworCQl0bWRzX3NldHRpbmctPm1heF9waXhlbF9jbG9jayk7CisJdG1kc19jaGlwLT50bWRzX2NoaXBfc2xhdmVfYWRkciA9IHJlc3RvcmU7CiB9CiAKLS8qCi0gKgotICogaW50IGR2aV9nZXRfcGFuZWxfc2l6ZV9mcm9tX0REQ3YyKHZvaWQpCi0gKgotICogICAgIC0gR2V0IFBhbmVsIFNpemUgVXNpbmcgRURJRDIgVGFibGUKLSAqCi0gKiBSZXR1cm4gVHlwZTogICAgaW50Ci0gKgotICovCi1zdGF0aWMgaW50IGR2aV9nZXRfcGFuZWxfc2l6ZV9mcm9tX0REQ3YyKHZvaWQpCisvKiBHZXQgUGFuZWwgU2l6ZSBVc2luZyBFRElEMiBUYWJsZSAqLworc3RhdGljIHZvaWQgZHZpX2dldF9wYW5lbF9zaXplX2Zyb21fRERDdjIoc3RydWN0IHRtZHNfY2hpcF9pbmZvcm1hdGlvbgorCSp0bWRzX2NoaXAsIHN0cnVjdCB0bWRzX3NldHRpbmdfaW5mb3JtYXRpb24gKnRtZHNfc2V0dGluZykKIHsKLQlpbnQgSFNpemUgPSAwLCByZXN0b3JlOworCWludCByZXN0b3JlOwogCXVuc2lnbmVkIGNoYXIgUl9CdWZmZXJbMl07CiAKIAlERUJVR19NU0coS0VSTl9JTkZPICJcbiBkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2MiBcbiIpOwogCi0JcmVzdG9yZSA9IHZpYXBhcmluZm8tPmNoaXBfaW5mby0+dG1kc19jaGlwX2luZm8udG1kc19jaGlwX3NsYXZlX2FkZHI7Ci0JdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfc2xhdmVfYWRkciA9IDB4QTI7CisJcmVzdG9yZSA9IHRtZHNfY2hpcC0+dG1kc19jaGlwX3NsYXZlX2FkZHI7CisJdG1kc19jaGlwLT50bWRzX2NoaXBfc2xhdmVfYWRkciA9IDB4QTI7CiAKIAkvKiBIb3Jpem9udGFsOiAweDc2LCAweDc3ICovCiAJdG1kc19yZWdpc3Rlcl9yZWFkX2J5dGVzKDB4NzYsIFJfQnVmZmVyLCAyKTsKLQlIU2l6ZSA9IFJfQnVmZmVyWzBdOwotCUhTaXplICs9IFJfQnVmZmVyWzFdIDw8IDg7CisJdG1kc19zZXR0aW5nLT5tYXhfaHJlcyA9IFJfQnVmZmVyWzBdICsgKFJfQnVmZmVyWzFdIDw8IDgpOwogCi0Jc3dpdGNoIChIU2l6ZSkgeworCXN3aXRjaCAodG1kc19zZXR0aW5nLT5tYXhfaHJlcykgewogCWNhc2UgNjQwOgotCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQotCQkJVklBX1JFU182NDBYNDgwOworCQl0bWRzX3NldHRpbmctPm1heF92cmVzID0gNDgwOwogCQlicmVhazsKIAljYXNlIDgwMDoKLQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KLQkJCVZJQV9SRVNfODAwWDYwMDsKKwkJdG1kc19zZXR0aW5nLT5tYXhfdnJlcyA9IDYwMDsKIAkJYnJlYWs7CiAJY2FzZSAxMDI0OgotCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQotCQkJVklBX1JFU18xMDI0WDc2ODsKKwkJdG1kc19zZXR0aW5nLT5tYXhfdnJlcyA9IDc2ODsKIAkJYnJlYWs7CiAJY2FzZSAxMjgwOgotCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQotCQkJVklBX1JFU18xMjgwWDEwMjQ7CisJCXRtZHNfc2V0dGluZy0+bWF4X3ZyZXMgPSAxMDI0OwogCQlicmVhazsKIAljYXNlIDE0MDA6Ci0JCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSA9Ci0JCQlWSUFfUkVTXzE0MDBYMTA1MDsKKwkJdG1kc19zZXR0aW5nLT5tYXhfdnJlcyA9IDEwNTA7CiAJCWJyZWFrOwogCWNhc2UgMTQ0MDoKLQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplID0KLQkJCVZJQV9SRVNfMTQ0MFgxMDUwOworCQl0bWRzX3NldHRpbmctPm1heF92cmVzID0gMTA1MDsKIAkJYnJlYWs7CiAJY2FzZSAxNjAwOgotCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQotCQkJVklBX1JFU18xNjAwWDEyMDA7CisJCXRtZHNfc2V0dGluZy0+bWF4X3ZyZXMgPSAxMjAwOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+ZHZpX3BhbmVsX3NpemUgPQotCQkJVklBX1JFU18xMDI0WDc2ODsKLQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiVW5rbm93biBwYW5lbCBzaXplIG1heCByZXNvbHV0aW9uID0gJWQhXAotCQkJCQlzZXQgZGVmYXVsdCBwYW5lbCBzaXplLlxuIiwgSFNpemUpOworCQlERUJVR19NU0coS0VSTl9JTkZPICJVbmtub3duIHBhbmVsIHNpemUgbWF4IHJlc29sdXRpb24gPSAlZCEgIgorCQkJInNldCBkZWZhdWx0IHBhbmVsIHNpemUuXG4iLCB0bWRzX3NldHRpbmctPm1heF9ocmVzKTsKIAkJYnJlYWs7CiAJfQogCi0JdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT50bWRzX2NoaXBfaW5mby50bWRzX2NoaXBfc2xhdmVfYWRkciA9IHJlc3RvcmU7Ci0JcmV0dXJuIHZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZTsKLX0KLQotLyoKLSAqCi0gKiB1bnNpZ25lZCBjaGFyIGR2aV9nZXRfcGFuZWxfaW5mbyh2b2lkKQotICoKLSAqICAgICAtIEdldCBQYW5lbCBTaXplCi0gKgotICogUmV0dXJuIFR5cGU6ICAgIHVuc2lnbmVkIGNoYXIKLSAqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgZHZpX2dldF9wYW5lbF9pbmZvKHZvaWQpCi17Ci0JdW5zaWduZWQgY2hhciBkdmlwYW5lbHNpemU7Ci0JREVCVUdfTVNHKEtFUk5fSU5GTyAiZHZpX2dldF9wYW5lbF9pbmZvISBcbiIpOwotCi0JdmlhZmJfZHZpX3NlbnNlKCk7Ci0Jc3dpdGNoICh2aWFmYl9kdmlfcXVlcnlfRURJRCgpKSB7Ci0JY2FzZSAxOgotCQlkdmlfZ2V0X3BhbmVsX3NpemVfZnJvbV9EREN2MSgpOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWR2aV9nZXRfcGFuZWxfc2l6ZV9mcm9tX0REQ3YyKCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCURFQlVHX01TRyhLRVJOX0lORk8gImR2aSBwYW5lbCBzaXplIGlzICUyZCBcbiIsCi0JCSAgdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmR2aV9wYW5lbF9zaXplKTsKLQlkdmlwYW5lbHNpemUgPSAodW5zaWduZWQgY2hhcikodmlhcGFyaW5mby0+Ci0JCXRtZHNfc2V0dGluZ19pbmZvLT5kdmlfcGFuZWxfc2l6ZSk7Ci0JcmV0dXJuIGR2aXBhbmVsc2l6ZTsKKwl0bWRzX2NoaXAtPnRtZHNfY2hpcF9zbGF2ZV9hZGRyID0gcmVzdG9yZTsKIH0KIAogLyogSWYgRGlzYWJsZSBEVkksIHR1cm4gb2ZmIHBhZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvZHZpLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9kdmkuaAppbmRleCBlMWVjMzdmLi4wZGZmY2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9kdmkuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9kdmkuaApAQCAtNTMsMTIgKzUzLDEzIEBACiAjZGVmaW5lICAgICBERVZfQ09OTkVDVF9EVkkgICAgIDB4MDEKICNkZWZpbmUgICAgIERFVl9DT05ORUNUX0hETUkgICAgMHgwMgogCi1zdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZpYWZiX2dldF9jZWFfbW9kZV90YmxfcG9pbnRlcihpbnQgSW5kZXgpOwogaW50IHZpYWZiX2R2aV9zZW5zZSh2b2lkKTsKIHZvaWQgdmlhZmJfZHZpX2Rpc2FibGUodm9pZCk7CiB2b2lkIHZpYWZiX2R2aV9lbmFibGUodm9pZCk7CiBpbnQgdmlhZmJfdG1kc190cmFzbWl0dGVyX2lkZW50aWZ5KHZvaWQpOwotdm9pZCB2aWFmYl9pbml0X2R2aV9zaXplKHZvaWQpOwotdm9pZCB2aWFmYl9kdmlfc2V0X21vZGUoaW50IHZpZGVvX2luZGV4LCBpbnQgbW9kZV9icHAsIGludCBzZXRfaWdhKTsKK3ZvaWQgdmlhZmJfaW5pdF9kdmlfc2l6ZShzdHJ1Y3QgdG1kc19jaGlwX2luZm9ybWF0aW9uICp0bWRzX2NoaXAsCisJc3RydWN0IHRtZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqdG1kc19zZXR0aW5nKTsKK3ZvaWQgdmlhZmJfZHZpX3NldF9tb2RlKHN0cnVjdCBWaWRlb01vZGVUYWJsZSAqdmlkZW9Nb2RlLCBpbnQgbW9kZV9icHAsCisJaW50IHNldF9pZ2EpOwogCiAjZW5kaWYgLyogX19EVklfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9nbG9iYWwuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5jCmluZGV4IGI2NzVjZGIuLjFlZTUxMWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5jCkBAIC0yMywxNSArMjMsMTIgQEAKIGludCB2aWFmYl9kZXZpY2VfbGNkX2R1YWxlZGdlID0gU1RBVEVfT0ZGOwogaW50IHZpYWZiX2J1c193aWR0aCA9IDEyOwogaW50IHZpYWZiX2Rpc3BsYXlfaGFyZHdhcmVfbGF5b3V0ID0gSFdfTEFZT1VUX0xDRF9EVkk7Ci1pbnQgdmlhZmJfbWVtc2l6ZTsKIGludCB2aWFmYl9EZXZpY2VTdGF0dXMgPSBDUlRfRGV2aWNlOwogaW50IHZpYWZiX2hvdHBsdWc7CiBpbnQgdmlhZmJfcmVmcmVzaCA9IDYwOwogaW50IHZpYWZiX3JlZnJlc2gxID0gNjA7CiBpbnQgdmlhZmJfbGNkX2RzcF9tZXRob2QgPSBMQ0RfRVhQQU5EU0lPTjsKIGludCB2aWFmYl9sY2RfbW9kZSA9IExDRF9PUEVOTERJOwotaW50IHZpYWZiX2JwcCA9IDMyOwotaW50IHZpYWZiX2JwcDEgPSAzMjsKIGludCB2aWFmYl9DUlRfT04gPSAxOwogaW50IHZpYWZiX0RWSV9PTjsKIGludCB2aWFmYl9MQ0RfT04gOwpAQCAtNDIsOCArMzksNiBAQAogaW50IHZpYWZiX2hvdHBsdWdfWXJlcyA9IDQ4MDsKIGludCB2aWFmYl9ob3RwbHVnX2JwcCA9IDMyOwogaW50IHZpYWZiX2hvdHBsdWdfcmVmcmVzaCA9IDYwOwotdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF9vZmZzZXQ7Ci1pbnQgdmlhZmJfc2Vjb25kX3NpemU7CiBpbnQgdmlhZmJfcHJpbWFyeV9kZXYgPSBOb25lX0RldmljZTsKIHVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfeHJlcyA9IDY0MDsKIHVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfeXJlcyA9IDQ4MDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2dsb2JhbC5oIGIvZHJpdmVycy92aWRlby92aWEvZ2xvYmFsLmgKaW5kZXggZDY5ZDBjYS4uOGQ5NWQ1ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvZ2xvYmFsLmgKKysrIGIvZHJpdmVycy92aWRlby92aWEvZ2xvYmFsLmgKQEAgLTM1LDcgKzM1LDYgQEAKIAogI2luY2x1ZGUgImRlYnVnLmgiCiAKLSNpbmNsdWRlICJpZmFjZS5oIgogI2luY2x1ZGUgInZpYWZiZGV2LmgiCiAjaW5jbHVkZSAiY2hpcC5oIgogI2luY2x1ZGUgImFjY2VsLmgiCkBAIC02OCw4ICs2Nyw2IEBACiBleHRlcm4gaW50IHZpYWZiX3JlZnJlc2gxOwogZXh0ZXJuIGludCB2aWFmYl9sY2RfZHNwX21ldGhvZDsKIGV4dGVybiBpbnQgdmlhZmJfbGNkX21vZGU7Ci1leHRlcm4gaW50IHZpYWZiX2JwcDsKLWV4dGVybiBpbnQgdmlhZmJfYnBwMTsKIAogZXh0ZXJuIGludCB2aWFmYl9DUlRfT047CiBleHRlcm4gaW50IHZpYWZiX2hvdHBsdWdfWHJlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5jCmluZGV4IDNlMDgzZmYuLmYyNTgzYjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmMKKysrIGIvZHJpdmVycy92aWRlby92aWEvaHcuYwpAQCAtNTI0LDcgKzUyNCw2IEBACiBzdGF0aWMgdm9pZCBkdmlfcGF0Y2hfc2tld19kdnBfbG93KHZvaWQpOwogc3RhdGljIHZvaWQgc2V0X2R2aV9vdXRwdXRfcGF0aChpbnQgc2V0X2lnYSwgaW50IG91dHB1dF9pbnRlcmZhY2UpOwogc3RhdGljIHZvaWQgc2V0X2xjZF9vdXRwdXRfcGF0aChpbnQgc2V0X2lnYSwgaW50IG91dHB1dF9pbnRlcmZhY2UpOwotc3RhdGljIGludCBzZWFyY2hfbW9kZV9zZXR0aW5nKGludCBNb2RlSW5mb0luZGV4KTsKIHN0YXRpYyB2b2lkIGxvYWRfZml4X2JpdF9jcnRjX3JlZyh2b2lkKTsKIHN0YXRpYyB2b2lkIGluaXRfZ2Z4X2NoaXBfaW5mbyhzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGRpKTsKQEAgLTY4Niw2ICs2ODUsODQgQEAKIAl2aWFmYl93cml0ZV9yZWdfbWFzaygweDcxLCBWSUFDUiwgKHBpdGNoID4+ICgxMCAtIDcpKSAmIDB4ODAsIDB4ODApOwogfQogCit2b2lkIHZpYWZiX3NldF9wcmltYXJ5X2NvbG9yX2RlcHRoKHU4IGRlcHRoKQoreworCXU4IHZhbHVlOworCisJREVCVUdfTVNHKEtFUk5fREVCVUcgInZpYWZiX3NldF9wcmltYXJ5X2NvbG9yX2RlcHRoKCVkKVxuIiwgZGVwdGgpOworCXN3aXRjaCAoZGVwdGgpIHsKKwljYXNlIDg6CisJCXZhbHVlID0gMHgwMDsKKwkJYnJlYWs7CisJY2FzZSAxNToKKwkJdmFsdWUgPSAweDA0OworCQlicmVhazsKKwljYXNlIDE2OgorCQl2YWx1ZSA9IDB4MTQ7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJCXZhbHVlID0gMHgwQzsKKwkJYnJlYWs7CisJY2FzZSAzMDoKKwkJdmFsdWUgPSAweDA4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2aWFmYl9zZXRfcHJpbWFyeV9jb2xvcl9kZXB0aDogIgorCQkJIlVuc3VwcG9ydGVkIGRlcHRoOiAlZFxuIiwgZGVwdGgpOworCQlyZXR1cm47CisJfQorCisJdmlhZmJfd3JpdGVfcmVnX21hc2soMHgxNSwgVklBU1IsIHZhbHVlLCAweDFDKTsKK30KKwordm9pZCB2aWFmYl9zZXRfc2Vjb25kYXJ5X2NvbG9yX2RlcHRoKHU4IGRlcHRoKQoreworCXU4IHZhbHVlOworCisJREVCVUdfTVNHKEtFUk5fREVCVUcgInZpYWZiX3NldF9zZWNvbmRhcnlfY29sb3JfZGVwdGgoJWQpXG4iLCBkZXB0aCk7CisJc3dpdGNoIChkZXB0aCkgeworCWNhc2UgODoKKwkJdmFsdWUgPSAweDAwOworCQlicmVhazsKKwljYXNlIDE2OgorCQl2YWx1ZSA9IDB4NDA7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJCXZhbHVlID0gMHhDMDsKKwkJYnJlYWs7CisJY2FzZSAzMDoKKwkJdmFsdWUgPSAweDgwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoS0VSTl9XQVJOSU5HICJ2aWFmYl9zZXRfc2Vjb25kYXJ5X2NvbG9yX2RlcHRoOiAiCisJCQkiVW5zdXBwb3J0ZWQgZGVwdGg6ICVkXG4iLCBkZXB0aCk7CisJCXJldHVybjsKKwl9CisKKwl2aWFmYl93cml0ZV9yZWdfbWFzaygweDY3LCBWSUFDUiwgdmFsdWUsIDB4QzApOworfQorCitzdGF0aWMgdm9pZCBzZXRfY29sb3JfcmVnaXN0ZXIodTggaW5kZXgsIHU4IHJlZCwgdTggZ3JlZW4sIHU4IGJsdWUpCit7CisJb3V0YigweEZGLCAweDNDNik7IC8qIGJpdCBtYXNrIG9mIHBhbGV0dGUgKi8KKwlvdXRiKGluZGV4LCAweDNDOCk7CisJb3V0YihyZWQsIDB4M0M5KTsKKwlvdXRiKGdyZWVuLCAweDNDOSk7CisJb3V0YihibHVlLCAweDNDOSk7Cit9CisKK3ZvaWQgdmlhZmJfc2V0X3ByaW1hcnlfY29sb3JfcmVnaXN0ZXIodTggaW5kZXgsIHU4IHJlZCwgdTggZ3JlZW4sIHU4IGJsdWUpCit7CisJdmlhZmJfd3JpdGVfcmVnX21hc2soMHgxQSwgVklBU1IsIDB4MDAsIDB4MDEpOworCXNldF9jb2xvcl9yZWdpc3RlcihpbmRleCwgcmVkLCBncmVlbiwgYmx1ZSk7Cit9CisKK3ZvaWQgdmlhZmJfc2V0X3NlY29uZGFyeV9jb2xvcl9yZWdpc3Rlcih1OCBpbmRleCwgdTggcmVkLCB1OCBncmVlbiwgdTggYmx1ZSkKK3sKKwl2aWFmYl93cml0ZV9yZWdfbWFzaygweDFBLCBWSUFTUiwgMHgwMSwgMHgwMSk7CisJc2V0X2NvbG9yX3JlZ2lzdGVyKGluZGV4LCByZWQsIGdyZWVuLCBibHVlKTsKK30KKwogdm9pZCB2aWFmYl9zZXRfb3V0cHV0X3BhdGgoaW50IGRldmljZSwgaW50IHNldF9pZ2EsIGludCBvdXRwdXRfaW50ZXJmYWNlKQogewogCXN3aXRjaCAoZGV2aWNlKSB7CkBAIC03MTAsMTEgKzc4Nyw4IEBACiAJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMTYsIFZJQVNSLCAweDAwLCBCSVQ2KTsKIAkJYnJlYWs7CiAJY2FzZSBJR0EyOgotCWNhc2UgSUdBMV9JR0EyOgogCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMHhDMCwgQklUNiArIEJJVDcpOwogCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjE2LCBWSUFTUiwgMHg0MCwgQklUNik7Ci0JCWlmIChzZXRfaWdhID09IElHQTFfSUdBMikKLQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkIsIFZJQUNSLCAweDA4LCBCSVQzKTsKIAkJYnJlYWs7CiAJfQogfQpAQCAtOTA0LDEzICs5NzgsNiBAQAogCiAJCWVuYWJsZV9zZWNvbmRfZGlzcGxheV9jaGFubmVsKCk7CiAJCWJyZWFrOwotCi0JY2FzZSBJR0ExX0lHQTI6Ci0JCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkIsIFZJQUNSLCAweDA4LCBCSVQzKTsKLQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIDB4MDgsIEJJVDMpOwotCi0JCWRpc2FibGVfc2Vjb25kX2Rpc3BsYXlfY2hhbm5lbCgpOwotCQlicmVhazsKIAl9CiAKIAlzd2l0Y2ggKG91dHB1dF9pbnRlcmZhY2UpIHsKQEAgLTk4Nyw0OSArMTA1NCw2IEBACiAJfQogfQogCi0vKiBTZWFyY2ggTW9kZSBJbmRleCAqLwotc3RhdGljIGludCBzZWFyY2hfbW9kZV9zZXR0aW5nKGludCBNb2RlSW5mb0luZGV4KQotewotCWludCBpID0gMDsKLQotCXdoaWxlICgoaSA8IE5VTV9UT1RBTF9NT0RFVEFCTEUpICYmCi0JCQkoTW9kZUluZm9JbmRleCAhPSBDTEUyNjZNb2Rlc1tpXS5Nb2RlSW5kZXgpKQotCQlpKys7Ci0JaWYgKGkgPj0gTlVNX1RPVEFMX01PREVUQUJMRSkKLQkJaSA9IDA7Ci0JcmV0dXJuIGk7Ci0KLX0KLQotc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2aWFmYl9nZXRfbW9kZXRibF9wb2ludGVyKGludCBJbmRleCkKLXsKLQlzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKlRtcFRibCA9IE5VTEw7Ci0JVG1wVGJsID0gJkNMRTI2Nk1vZGVzW3NlYXJjaF9tb2RlX3NldHRpbmcoSW5kZXgpXTsKLQlyZXR1cm4gVG1wVGJsOwotfQotCi1zdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZpYWZiX2dldF9jZWFfbW9kZV90YmxfcG9pbnRlcihpbnQgSW5kZXgpCi17Ci0Jc3RydWN0IFZpZGVvTW9kZVRhYmxlICpUbXBUYmwgPSBOVUxMOwotCWludCBpID0gMDsKLQl3aGlsZSAoKGkgPCBOVU1fVE9UQUxfQ0VBX01PREVTKSAmJgotCQkJKEluZGV4ICE9IENFQV9IRE1JX01vZGVzW2ldLk1vZGVJbmRleCkpCi0JCWkrKzsKLQlpZiAoKGkgPCBOVU1fVE9UQUxfQ0VBX01PREVTKSkKLQkJVG1wVGJsID0gJkNFQV9IRE1JX01vZGVzW2ldOwotCSBlbHNlIHsKLQkJLypTdGlsbCB1c2UgZ2VuZXJhbCB0aW1pbmcgaWYgZG9uJ3QgZmluZCBDRUEgdGltaW5nICovCi0JCWkgPSAwOwotCQl3aGlsZSAoKGkgPCBOVU1fVE9UQUxfTU9ERVRBQkxFKSAmJgotCQkJCShJbmRleCAhPSBDTEUyNjZNb2Rlc1tpXS5Nb2RlSW5kZXgpKQotCQkgICAgICAgaSsrOwotCQlpZiAoaSA+PSBOVU1fVE9UQUxfTU9ERVRBQkxFKQotCQkJaSA9IDA7Ci0JCVRtcFRibCA9ICZDTEUyNjZNb2Rlc1tpXTsKLQl9Ci0JcmV0dXJuIFRtcFRibDsKLX0KLQogc3RhdGljIHZvaWQgbG9hZF9maXhfYml0X2NydGNfcmVnKHZvaWQpCiB7CiAJLyogYWx3YXlzIHNldCB0byAxICovCkBAIC0xMTIxLDE1ICsxMTQ1LDEzIEBACiAJc3RydWN0IGlvX3JlZ2lzdGVyICpyZWcgPSBOVUxMOwogCiAJc3dpdGNoIChzZXRfaWdhKSB7Ci0JY2FzZSBJR0ExX0lHQTI6CiAJY2FzZSBJR0ExOgogCQlyZWdfdmFsdWUgPSBJR0ExX0ZFVENIX0NPVU5UX0ZPUk1VTEEoaF9hZGRyLCBicHBfYnl0ZSk7CiAJCXZpYWZiX2xvYWRfcmVnX251bSA9IGZldGNoX2NvdW50X3JlZy4KIAkJCWlnYTFfZmV0Y2hfY291bnRfcmVnLnJlZ19udW07CiAJCXJlZyA9IGZldGNoX2NvdW50X3JlZy5pZ2ExX2ZldGNoX2NvdW50X3JlZy5yZWc7CiAJCXZpYWZiX2xvYWRfcmVnKHJlZ192YWx1ZSwgdmlhZmJfbG9hZF9yZWdfbnVtLCByZWcsIFZJQVNSKTsKLQkJaWYgKHNldF9pZ2EgPT0gSUdBMSkKLQkJCWJyZWFrOworCQlicmVhazsKIAljYXNlIElHQTI6CiAJCXJlZ192YWx1ZSA9IElHQTJfRkVUQ0hfQ09VTlRfRk9STVVMQShoX2FkZHIsIGJwcF9ieXRlKTsKIAkJdmlhZmJfbG9hZF9yZWdfbnVtID0gZmV0Y2hfY291bnRfcmVnLgpAQCAtMTQ5OSw3ICsxNTIxLDcgQEAKIAkvKiBILlcuIFJlc2V0IDogT04gKi8KIAl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjE3LCBWSUFDUiwgMHgwMCwgQklUNyk7CiAKLQlpZiAoKHNldF9pZ2EgPT0gSUdBMSkgfHwgKHNldF9pZ2EgPT0gSUdBMV9JR0EyKSkgeworCWlmIChzZXRfaWdhID09IElHQTEpIHsKIAkJLyogQ2hhbmdlIEQsTiBGT1IgVkNMSyAqLwogCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgewogCQljYXNlIFVOSUNIUk9NRV9DTEUyNjY6CkBAIC0xNTI4LDcgKzE1NTAsNyBAQAogCQl9CiAJfQogCi0JaWYgKChzZXRfaWdhID09IElHQTIpIHx8IChzZXRfaWdhID09IElHQTFfSUdBMikpIHsKKwlpZiAoc2V0X2lnYSA9PSBJR0EyKSB7CiAJCS8qIENoYW5nZSBELE4gRk9SIExDSyAqLwogCQlzd2l0Y2ggKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkgewogCQljYXNlIFVOSUNIUk9NRV9DTEUyNjY6CkBAIC0xNTU3LDEyICsxNTc5LDEyIEBACiAJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IxNywgVklBQ1IsIDB4ODAsIEJJVDcpOwogCiAJLyogUmVzZXQgUExMICovCi0JaWYgKChzZXRfaWdhID09IElHQTEpIHx8IChzZXRfaWdhID09IElHQTFfSUdBMikpIHsKKwlpZiAoc2V0X2lnYSA9PSBJR0ExKSB7CiAJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSNDAsIFZJQVNSLCAweDAyLCBCSVQxKTsKIAkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1I0MCwgVklBU1IsIDB4MDAsIEJJVDEpOwogCX0KIAotCWlmICgoc2V0X2lnYSA9PSBJR0EyKSB8fCAoc2V0X2lnYSA9PSBJR0ExX0lHQTIpKSB7CisJaWYgKHNldF9pZ2EgPT0gSUdBMikgewogCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjQwLCBWSUFTUiwgMHgwMSwgQklUMCk7CiAJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSNDAsIFZJQVNSLCAweDAwLCBCSVQwKTsKIAl9CkBAIC0xODA1LDQ3ICsxODI3LDE1IEBACiAJdmlhZmJfbG9ja19jcnQoKTsKIH0KIAotdm9pZCB2aWFmYl9zZXRfY29sb3JfZGVwdGgoaW50IGJwcF9ieXRlLCBpbnQgc2V0X2lnYSkKLXsKLQlpZiAoc2V0X2lnYSA9PSBJR0ExKSB7Ci0JCXN3aXRjaCAoYnBwX2J5dGUpIHsKLQkJY2FzZSBNT0RFXzhCUFA6Ci0JCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjE1LCBWSUFTUiwgMHgyMiwgMHg3RSk7Ci0JCQlicmVhazsKLQkJY2FzZSBNT0RFXzE2QlBQOgotCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxNSwgVklBU1IsIDB4QjYsIDB4RkUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgTU9ERV8zMkJQUDoKLQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMTUsIFZJQVNSLCAweEFFLCAweEZFKTsKLQkJCWJyZWFrOwotCQl9Ci0JfSBlbHNlIHsKLQkJc3dpdGNoIChicHBfYnl0ZSkgewotCQljYXNlIE1PREVfOEJQUDoKLQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNjcsIFZJQUNSLCAweDAwLCBCSVQ2ICsgQklUNyk7Ci0JCQlicmVhazsKLQkJY2FzZSBNT0RFXzE2QlBQOgotCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2NywgVklBQ1IsIDB4NDAsIEJJVDYgKyBCSVQ3KTsKLQkJCWJyZWFrOwotCQljYXNlIE1PREVfMzJCUFA6Ci0JCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjY3LCBWSUFDUiwgMHhDMCwgQklUNiArIEJJVDcpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0KIHZvaWQgdmlhZmJfZmlsbF9jcnRjX3RpbWluZyhzdHJ1Y3QgY3J0X21vZGVfdGFibGUgKmNydF90YWJsZSwKLQlpbnQgbW9kZV9pbmRleCwgaW50IGJwcF9ieXRlLCBpbnQgc2V0X2lnYSkKKwlzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZpZGVvX21vZGUsIGludCBicHBfYnl0ZSwgaW50IHNldF9pZ2EpCiB7Ci0Jc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2aWRlb19tb2RlOwogCXN0cnVjdCBkaXNwbGF5X3RpbWluZyBjcnRfcmVnOwogCWludCBpOwogCWludCBpbmRleCA9IDA7CiAJaW50IGhfYWRkciwgdl9hZGRyOwogCXUzMiBwbGxfRF9OOwogCi0JdmlkZW9fbW9kZSA9ICZDTEUyNjZNb2Rlc1tzZWFyY2hfbW9kZV9zZXR0aW5nKG1vZGVfaW5kZXgpXTsKLQogCWZvciAoaSA9IDA7IGkgPCB2aWRlb19tb2RlLT5tb2RlX2FycmF5OyBpKyspIHsKIAkJaW5kZXggPSBpOwogCkBAIC0xODU4LDggKzE4NDgsMTAgQEAKIAogCS8qIE1vZGUgNjQweDQ4MCBoYXMgYm9yZGVyLCBidXQgTENEL0RGUCBkaWRuJ3QgaGF2ZSBib3JkZXIuICovCiAJLyogU28gd2Ugd291bGQgZGVsZXRlIGJvcmRlci4gKi8KLQlpZiAoKHZpYWZiX0xDRF9PTiB8IHZpYWZiX0RWSV9PTikgJiYgKG1vZGVfaW5kZXggPT0gVklBX1JFU182NDBYNDgwKQotCSAgICAmJiAodmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+cmVmcmVzaF9yYXRlID09IDYwKSkgeworCWlmICgodmlhZmJfTENEX09OIHwgdmlhZmJfRFZJX09OKQorCSAgICAmJiB2aWRlb19tb2RlLT5jcnRjWzBdLmNydGMuaG9yX2FkZHIgPT0gNjQwCisJICAgICYmIHZpZGVvX21vZGUtPmNydGNbMF0uY3J0Yy52ZXJfYWRkciA9PSA0ODAKKwkgICAgJiYgdmlhcGFyaW5mby0+Y3J0X3NldHRpbmdfaW5mby0+cmVmcmVzaF9yYXRlID09IDYwKSB7CiAJCS8qIFRoZSBib3JkZXIgaXMgOCBwaXhlbHMuICovCiAJCWNydF9yZWcuaG9yX2JsYW5rX3N0YXJ0ID0gY3J0X3JlZy5ob3JfYmxhbmtfc3RhcnQgLSA4OwogCkBAIC0xOTEyLDkgKzE5MDQsNiBAQAogCSAgICAmJiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lICE9IFVOSUNIUk9NRV9LNDAwKSkKIAkJdmlhZmJfbG9hZF9GSUZPX3JlZyhzZXRfaWdhLCBoX2FkZHIsIHZfYWRkcik7CiAKLQkvKiBsb2FkIFNSIFJlZ2lzdGVyIEFib3V0IE1lbW9yeSBhbmQgQ29sb3IgcGFydCAqLwotCXZpYWZiX3NldF9jb2xvcl9kZXB0aChicHBfYnl0ZSwgc2V0X2lnYSk7Ci0KIAlwbGxfRF9OID0gdmlhZmJfZ2V0X2Nsa192YWx1ZShjcnRfdGFibGVbaW5kZXhdLmNsayk7CiAJREVCVUdfTVNHKEtFUk5fSU5GTyAiUExMPSV4IiwgcGxsX0RfTik7CiAJdmlhZmJfc2V0X3ZjbG9jayhwbGxfRF9OLCBzZXRfaWdhKTsKQEAgLTE5NTYsOSArMTk0NSw2IEBACiAKIAkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmhfYWN0aXZlID0gaHJlczsKIAkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPnZfYWN0aXZlID0gdnJlczsKLQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmJwcCA9IGJwcDsKLQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPnJlZnJlc2hfcmF0ZSA9Ci0JCQl2bW9kZV9yZWZyZXNoOwogCiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5oX2FjdGl2ZSA9IGhyZXM7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT52X2FjdGl2ZSA9IHZyZXM7CkBAIC0xOTc1LDkgKzE5NjEsNiBAQAogCQlpZiAodmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTIpIHsKIAkJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5oX2FjdGl2ZSA9IGhyZXM7CiAJCQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+dl9hY3RpdmUgPSB2cmVzOwotCQkJdmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmJwcCA9IGJwcDsKLQkJCXZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5yZWZyZXNoX3JhdGUgPQotCQkJCXZtb2RlX3JlZnJlc2g7CiAJCX0KIAogCQlpZiAodmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTIpIHsKQEAgLTIwNzYsOSArMjA1OSw4IEBACiAKIAlERUJVR19NU0coS0VSTl9JTkZPICJUTURTIENoaXAgPSAlZFxuIiwKIAkJICB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPnRtZHNfY2hpcF9pbmZvLnRtZHNfY2hpcF9uYW1lKTsKLQl2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+Z2V0X2R2aV9zaXplX21ldGhvZCA9Ci0JCUdFVF9EVklfU0laRV9CWV9WR0FfQklPUzsKLQl2aWFmYl9pbml0X2R2aV9zaXplKCk7CisJdmlhZmJfaW5pdF9kdmlfc2l6ZSgmdmlhcGFyaW5mby0+c2hhcmVkLT5jaGlwX2luZm8udG1kc19jaGlwX2luZm8sCisJCSZ2aWFwYXJpbmZvLT5zaGFyZWQtPnRtZHNfc2V0dGluZ19pbmZvKTsKIH0KIAogc3RhdGljIHZvaWQgaW5pdF9sdmRzX2NoaXBfaW5mbyh2b2lkKQpAQCAtMjE5NSwyOCArMjE3NywxOSBAQAogCX0KIH0KIAotaW50IHZpYWZiX3NldG1vZGUoaW50IHZtb2RlX2luZGV4LCBpbnQgaG9yX3JlcywgaW50IHZlcl9yZXMsIGludCB2aWRlb19icHAsCi0JaW50IHZtb2RlX2luZGV4MSwgaW50IGhvcl9yZXMxLCBpbnQgdmVyX3JlczEsIGludCB2aWRlb19icHAxKQoraW50IHZpYWZiX3NldG1vZGUoc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2bW9kZV90YmwsIGludCB2aWRlb19icHAsCisJc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2bW9kZV90YmwxLCBpbnQgdmlkZW9fYnBwMSkKIHsKIAlpbnQgaSwgajsKIAlpbnQgcG9ydDsKIAl1OCB2YWx1ZSwgaW5kZXgsIG1hc2s7Ci0Jc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2bW9kZV90Ymw7CiAJc3RydWN0IGNydF9tb2RlX3RhYmxlICpjcnRfdGltaW5nOwotCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqdm1vZGVfdGJsMSA9IE5VTEw7CiAJc3RydWN0IGNydF9tb2RlX3RhYmxlICpjcnRfdGltaW5nMSA9IE5VTEw7CiAKLQlERUJVR19NU0coS0VSTl9JTkZPICJTZXQgTW9kZSEhXG4iKTsKLQlERUJVR19NU0coS0VSTl9JTkZPCi0JCSAgInZtb2RlX2luZGV4PSVkIGhvcl9yZXM9JWQgdmVyX3Jlcz0lZCB2aWRlb19icHA9JWRcbiIsCi0JCSAgdm1vZGVfaW5kZXgsIGhvcl9yZXMsIHZlcl9yZXMsIHZpZGVvX2JwcCk7Ci0KIAlkZXZpY2Vfc2NyZWVuX29mZigpOwotCXZtb2RlX3RibCA9ICZDTEUyNjZNb2Rlc1tzZWFyY2hfbW9kZV9zZXR0aW5nKHZtb2RlX2luZGV4KV07CiAJY3J0X3RpbWluZyA9IHZtb2RlX3RibC0+Y3J0YzsKIAogCWlmICh2aWFmYl9TQU1NX09OID09IDEpIHsKLQkJdm1vZGVfdGJsMSA9ICZDTEUyNjZNb2Rlc1tzZWFyY2hfbW9kZV9zZXR0aW5nKHZtb2RlX2luZGV4MSldOwogCQljcnRfdGltaW5nMSA9IHZtb2RlX3RibDEtPmNydGM7CiAJfQogCkBAIC0yMjY3LDEyICsyMjQwLDExIEBACiAJCW91dGIoVlBJVC5TUltpIC0gMV0sIFZJQVNSICsgMSk7CiAJfQogCi0JdmlhZmJfc2V0X3ByaW1hcnlfYWRkcmVzcygwKTsKLQl2aWFmYl9zZXRfc2Vjb25kYXJ5X2FkZHJlc3ModmlhZmJfU0FNTV9PTiA/IHZpYWZiX3NlY29uZF9vZmZzZXQgOiAwKTsKKwl2aWFmYl93cml0ZV9yZWdfbWFzaygweDE1LCBWSUFTUiwgMHhBMiwgMHhBMik7CiAJdmlhZmJfc2V0X2lnYV9wYXRoKCk7CiAKIAkvKiBXcml0ZSBDUlRDICovCi0JdmlhZmJfZmlsbF9jcnRjX3RpbWluZyhjcnRfdGltaW5nLCB2bW9kZV9pbmRleCwgdmlkZW9fYnBwIC8gOCwgSUdBMSk7CisJdmlhZmJfZmlsbF9jcnRjX3RpbWluZyhjcnRfdGltaW5nLCB2bW9kZV90YmwsIHZpZGVvX2JwcCAvIDgsIElHQTEpOwogCiAJLyogV3JpdGUgR3JhcGhpYyBDb250cm9sbGVyICovCiAJZm9yIChpID0gMDsgaSA8IFN0ZEdSOyBpKyspIHsKQEAgLTIyOTIsNjUgKzIyNjQsMjUgQEAKIAogCS8qIFVwZGF0ZSBQYXRjaCBSZWdpc3RlciAqLwogCi0JaWYgKCh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NikKLQkgICAgfHwgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfSzQwMCkpIHsKLQkJZm9yIChpID0gMDsgaSA8IE5VTV9UT1RBTF9QQVRDSF9NT0RFOyBpKyspIHsKLQkJCWlmIChyZXNfcGF0Y2hfdGFibGVbaV0ubW9kZV9pbmRleCA9PSB2bW9kZV9pbmRleCkgewotCQkJCWZvciAoaiA9IDA7Ci0JCQkJICAgICBqIDwgcmVzX3BhdGNoX3RhYmxlW2ldLnRhYmxlX2xlbmd0aDsgaisrKSB7Ci0JCQkJCWluZGV4ID0KLQkJCQkJICAgIHJlc19wYXRjaF90YWJsZVtpXS4KLQkJCQkJICAgIGlvX3JlZ190YWJsZVtqXS5pbmRleDsKLQkJCQkJcG9ydCA9Ci0JCQkJCSAgICByZXNfcGF0Y2hfdGFibGVbaV0uCi0JCQkJCSAgICBpb19yZWdfdGFibGVbal0ucG9ydDsKLQkJCQkJdmFsdWUgPQotCQkJCQkgICAgcmVzX3BhdGNoX3RhYmxlW2ldLgotCQkJCQkgICAgaW9fcmVnX3RhYmxlW2pdLnZhbHVlOwotCQkJCQltYXNrID0KLQkJCQkJICAgIHJlc19wYXRjaF90YWJsZVtpXS4KLQkJCQkJICAgIGlvX3JlZ190YWJsZVtqXS5tYXNrOwotCQkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhpbmRleCwgcG9ydCwgdmFsdWUsCi0JCQkJCQkgICAgICAgbWFzayk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCi0JaWYgKHZpYWZiX1NBTU1fT04gPT0gMSkgewotCQlpZiAoKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PSBVTklDSFJPTUVfQ0xFMjY2KQotCQkgICAgfHwgKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSA9PQotCQkgICAgVU5JQ0hST01FX0s0MDApKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgTlVNX1RPVEFMX1BBVENIX01PREU7IGkrKykgewotCQkJCWlmIChyZXNfcGF0Y2hfdGFibGVbaV0ubW9kZV9pbmRleCA9PQotCQkJCSAgICB2bW9kZV9pbmRleDEpIHsKLQkJCQkJZm9yIChqID0gMDsKLQkJCQkJICAgICBqIDwKLQkJCQkJICAgICByZXNfcGF0Y2hfdGFibGVbaV0uCi0JCQkJCSAgICAgdGFibGVfbGVuZ3RoOyBqKyspIHsKLQkJCQkJCWluZGV4ID0KLQkJCQkJCSAgICByZXNfcGF0Y2hfdGFibGVbaV0uCi0JCQkJCQkgICAgaW9fcmVnX3RhYmxlW2pdLmluZGV4OwotCQkJCQkJcG9ydCA9Ci0JCQkJCQkgICAgcmVzX3BhdGNoX3RhYmxlW2ldLgotCQkJCQkJICAgIGlvX3JlZ190YWJsZVtqXS5wb3J0OwotCQkJCQkJdmFsdWUgPQotCQkJCQkJICAgIHJlc19wYXRjaF90YWJsZVtpXS4KLQkJCQkJCSAgICBpb19yZWdfdGFibGVbal0udmFsdWU7Ci0JCQkJCQltYXNrID0KLQkJCQkJCSAgICByZXNfcGF0Y2hfdGFibGVbaV0uCi0JCQkJCQkgICAgaW9fcmVnX3RhYmxlW2pdLm1hc2s7Ci0JCQkJCQl2aWFmYl93cml0ZV9yZWdfbWFzayhpbmRleCwKLQkJCQkJCQlwb3J0LCB2YWx1ZSwgbWFzayk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9CisJaWYgKCh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0NMRTI2NgorCSAgICB8fCB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgPT0gVU5JQ0hST01FX0s0MDApCisJICAgICYmIHZtb2RlX3RibC0+Y3J0Y1swXS5jcnRjLmhvcl9hZGRyID09IDEwMjQKKwkgICAgJiYgdm1vZGVfdGJsLT5jcnRjWzBdLmNydGMudmVyX2FkZHIgPT0gNzY4KSB7CisJCWZvciAoaiA9IDA7IGogPCByZXNfcGF0Y2hfdGFibGVbMF0udGFibGVfbGVuZ3RoOyBqKyspIHsKKwkJCWluZGV4ID0gcmVzX3BhdGNoX3RhYmxlWzBdLmlvX3JlZ190YWJsZVtqXS5pbmRleDsKKwkJCXBvcnQgPSByZXNfcGF0Y2hfdGFibGVbMF0uaW9fcmVnX3RhYmxlW2pdLnBvcnQ7CisJCQl2YWx1ZSA9IHJlc19wYXRjaF90YWJsZVswXS5pb19yZWdfdGFibGVbal0udmFsdWU7CisJCQltYXNrID0gcmVzX3BhdGNoX3RhYmxlWzBdLmlvX3JlZ190YWJsZVtqXS5tYXNrOworCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soaW5kZXgsIHBvcnQsIHZhbHVlLCBtYXNrKTsKIAkJfQogCX0KIAogCXZpYWZiX3NldF9wcmltYXJ5X3BpdGNoKHZpYWZiaW5mby0+Zml4LmxpbmVfbGVuZ3RoKTsKIAl2aWFmYl9zZXRfc2Vjb25kYXJ5X3BpdGNoKHZpYWZiX2R1YWxfZmIgPyB2aWFmYmluZm8xLT5maXgubGluZV9sZW5ndGgKIAkJOiB2aWFmYmluZm8tPmZpeC5saW5lX2xlbmd0aCk7CisJdmlhZmJfc2V0X3ByaW1hcnlfY29sb3JfZGVwdGgodmlhcGFyaW5mby0+ZGVwdGgpOworCXZpYWZiX3NldF9zZWNvbmRhcnlfY29sb3JfZGVwdGgodmlhZmJfZHVhbF9mYiA/IHZpYXBhcmluZm8xLT5kZXB0aAorCQk6IHZpYXBhcmluZm8tPmRlcHRoKTsKIAkvKiBVcGRhdGUgUmVmcmVzaCBSYXRlIFNldHRpbmcgKi8KIAogCS8qIENsZWFyIE9uIFNjcmVlbiAqLwpAQCAtMjM1OSwxMSArMjI5MSwxMSBAQAogCWlmICh2aWFmYl9DUlRfT04pIHsKIAkJaWYgKHZpYWZiX1NBTU1fT04gJiYgKHZpYXBhcmluZm8tPmNydF9zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09CiAJCQlJR0EyKSkgewotCQkJdmlhZmJfZmlsbF9jcnRjX3RpbWluZyhjcnRfdGltaW5nMSwgdm1vZGVfaW5kZXgxLAorCQkJdmlhZmJfZmlsbF9jcnRjX3RpbWluZyhjcnRfdGltaW5nMSwgdm1vZGVfdGJsMSwKIAkJCQl2aWRlb19icHAxIC8gOCwKIAkJCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCk7CiAJCX0gZWxzZSB7Ci0JCQl2aWFmYl9maWxsX2NydGNfdGltaW5nKGNydF90aW1pbmcsIHZtb2RlX2luZGV4LAorCQkJdmlhZmJfZmlsbF9jcnRjX3RpbWluZyhjcnRfdGltaW5nLCB2bW9kZV90YmwsCiAJCQkJdmlkZW9fYnBwIC8gOCwKIAkJCQl2aWFwYXJpbmZvLT5jcnRfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCk7CiAJCX0KQEAgLTIzNzMsNyArMjMwNSw3IEBACiAJCS8qIFBhdGNoIGlmIHNldF9ocmVzIGlzIG5vdCA4IGFsaWdubWVudCAoMTM2NikgdG8gdmlhZmJfc2V0bW9kZQogCQl0byA4IGFsaWdubWVudCAoMTM2OCksdGhlcmUgaXMgc2V2ZXJhbCBwaXhlbHMgKDIgcGl4ZWxzKQogCQlvbiByaWdodCBzaWRlIG9mIHNjcmVlbi4gKi8KLQkJaWYgKGhvcl9yZXMgJSA4KSB7CisJCWlmICh2bW9kZV90YmwtPmNydGNbMF0uY3J0Yy5ob3JfYWRkciAlIDgpIHsKIAkJCXZpYWZiX3VubG9ja19jcnQoKTsKIAkJCXZpYWZiX3dyaXRlX3JlZyhDUjAyLCBWSUFDUiwKIAkJCQl2aWFmYl9yZWFkX3JlZyhWSUFDUiwgQ1IwMikgLSAxKTsKQEAgLTIzODQsMTQgKzIzMTYsMTQgQEAKIAlpZiAodmlhZmJfRFZJX09OKSB7CiAJCWlmICh2aWFmYl9TQU1NX09OICYmCiAJCQkodmlhcGFyaW5mby0+dG1kc19zZXR0aW5nX2luZm8tPmlnYV9wYXRoID09IElHQTIpKSB7Ci0JCQl2aWFmYl9kdmlfc2V0X21vZGUodmlhZmJfZ2V0X21vZGVfaW5kZXgKKwkJCXZpYWZiX2R2aV9zZXRfbW9kZSh2aWFmYl9nZXRfbW9kZQogCQkJCSAgICAgKHZpYXBhcmluZm8tPnRtZHNfc2V0dGluZ19pbmZvLT5oX2FjdGl2ZSwKIAkJCQkgICAgICB2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+CiAJCQkJICAgICAgdl9hY3RpdmUpLAogCQkJCSAgICAgdmlkZW9fYnBwMSwgdmlhcGFyaW5mby0+CiAJCQkJICAgICB0bWRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGgpOwogCQl9IGVsc2UgewotCQkJdmlhZmJfZHZpX3NldF9tb2RlKHZpYWZiX2dldF9tb2RlX2luZGV4CisJCQl2aWFmYl9kdmlfc2V0X21vZGUodmlhZmJfZ2V0X21vZGUKIAkJCQkgICAgICh2aWFwYXJpbmZvLT50bWRzX3NldHRpbmdfaW5mby0+aF9hY3RpdmUsCiAJCQkJICAgICAgdmlhcGFyaW5mby0+CiAJCQkJICAgICAgdG1kc19zZXR0aW5nX2luZm8tPnZfYWN0aXZlKSwKQEAgLTI0NDUsOCArMjM3Nyw4IEBACiAKIAkvKiBJZiBzZXQgbW9kZSBub3JtYWxseSwgc2F2ZSByZXNvbHV0aW9uIGluZm9ybWF0aW9uIGZvciBob3QtcGx1ZyAuICovCiAJaWYgKCF2aWFmYl9ob3RwbHVnKSB7Ci0JCXZpYWZiX2hvdHBsdWdfWHJlcyA9IGhvcl9yZXM7Ci0JCXZpYWZiX2hvdHBsdWdfWXJlcyA9IHZlcl9yZXM7CisJCXZpYWZiX2hvdHBsdWdfWHJlcyA9IHZtb2RlX3RibC0+Y3J0Y1swXS5jcnRjLmhvcl9hZGRyOworCQl2aWFmYl9ob3RwbHVnX1lyZXMgPSB2bW9kZV90YmwtPmNydGNbMF0uY3J0Yy52ZXJfYWRkcjsKIAkJdmlhZmJfaG90cGx1Z19icHAgPSB2aWRlb19icHA7CiAJCXZpYWZiX2hvdHBsdWdfcmVmcmVzaCA9IHZpYWZiX3JlZnJlc2g7CiAKQEAgLTI3MDYsMTMgKzI2MzgsMTEgQEAKIAogLypBY2NvcmRpbmcgdmFyJ3MgeHJlcywgeXJlcyBmaWxsIHZhcidzIG90aGVyIHRpbWluZyBpbmZvcm1hdGlvbiovCiB2b2lkIHZpYWZiX2ZpbGxfdmFyX3RpbWluZ19pbmZvKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLCBpbnQgcmVmcmVzaCwKLQkJCSAgaW50IG1vZGVfaW5kZXgpCisJc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2bW9kZV90YmwpCiB7Ci0Jc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2bW9kZV90YmwgPSBOVUxMOwogCXN0cnVjdCBjcnRfbW9kZV90YWJsZSAqY3J0X3RpbWluZyA9IE5VTEw7CiAJc3RydWN0IGRpc3BsYXlfdGltaW5nIGNydF9yZWc7CiAJaW50IGkgPSAwLCBpbmRleCA9IDA7Ci0Jdm1vZGVfdGJsID0gJkNMRTI2Nk1vZGVzW3NlYXJjaF9tb2RlX3NldHRpbmcobW9kZV9pbmRleCldOwogCWNydF90aW1pbmcgPSB2bW9kZV90YmwtPmNydGM7CiAJZm9yIChpID0gMDsgaSA8IHZtb2RlX3RibC0+bW9kZV9hcnJheTsgaSsrKSB7CiAJCWluZGV4ID0gaTsKQEAgLTI3MjEsMzYgKzI2NTEsNiBAQAogCX0KIAogCWNydF9yZWcgPSBjcnRfdGltaW5nW2luZGV4XS5jcnRjOwotCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgewotCWNhc2UgODoKLQkJdmFyLT5yZWQub2Zmc2V0ID0gMDsKLQkJdmFyLT5ncmVlbi5vZmZzZXQgPSAwOwotCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKLQkJdmFyLT5yZWQubGVuZ3RoID0gNjsKLQkJdmFyLT5ncmVlbi5sZW5ndGggPSA2OwotCQl2YXItPmJsdWUubGVuZ3RoID0gNjsKLQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQkJdmFyLT5yZWQub2Zmc2V0ID0gMTE7Ci0JCXZhci0+Z3JlZW4ub2Zmc2V0ID0gNTsKLQkJdmFyLT5ibHVlLm9mZnNldCA9IDA7Ci0JCXZhci0+cmVkLmxlbmd0aCA9IDU7Ci0JCXZhci0+Z3JlZW4ubGVuZ3RoID0gNjsKLQkJdmFyLT5ibHVlLmxlbmd0aCA9IDU7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCXZhci0+cmVkLm9mZnNldCA9IDE2OwotCQl2YXItPmdyZWVuLm9mZnNldCA9IDg7Ci0JCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOwotCQl2YXItPnJlZC5sZW5ndGggPSA4OwotCQl2YXItPmdyZWVuLmxlbmd0aCA9IDg7Ci0JCXZhci0+Ymx1ZS5sZW5ndGggPSA4OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBuZXZlciBoYXBwZWQsIHB1dCBoZXJlIHRvIGtlZXAgY29uc2lzdGVudCAqLwotCQlicmVhazsKLQl9Ci0KIAl2YXItPnBpeGNsb2NrID0gdmlhZmJfZ2V0X3BpeGNsb2NrKHZhci0+eHJlcywgdmFyLT55cmVzLCByZWZyZXNoKTsKIAl2YXItPmxlZnRfbWFyZ2luID0KIAkgICAgY3J0X3JlZy5ob3JfdG90YWwgLSAoY3J0X3JlZy5ob3Jfc3luY19zdGFydCArIGNydF9yZWcuaG9yX3N5bmNfZW5kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9ody5oCmluZGV4IGI4NzRkOTUuLjEyZWYzMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2h3LmgKKysrIGIvZHJpdmVycy92aWRlby92aWEvaHcuaApAQCAtMjIsNiArMjIsNyBAQAogI2lmbmRlZiBfX0hXX0hfXwogI2RlZmluZSBfX0hXX0hfXwogCisjaW5jbHVkZSAidmlhbW9kZS5oIgogI2luY2x1ZGUgImdsb2JhbC5oIgogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC04NjIsOCArODYzLDYgQEAKIH07CiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlczsKLWV4dGVybiB1bnNpZ25lZCBpbnQgdmlhZmJfc2Vjb25kX29mZnNldDsKLWV4dGVybiBpbnQgdmlhZmJfc2Vjb25kX3NpemU7CiBleHRlcm4gaW50IHZpYWZiX1NBTU1fT047CiBleHRlcm4gaW50IHZpYWZiX2R1YWxfZmI7CiBleHRlcm4gaW50IHZpYWZiX0xDRDJfT047CkBAIC04NzQsOCArODczLDkgQEAKIHZvaWQgdmlhZmJfd3JpdGVfcmVnX21hc2sodTggaW5kZXgsIGludCBpb19wb3J0LCB1OCBkYXRhLCB1OCBtYXNrKTsKIHZvaWQgdmlhZmJfc2V0X291dHB1dF9wYXRoKGludCBkZXZpY2UsIGludCBzZXRfaWdhLAogCWludCBvdXRwdXRfaW50ZXJmYWNlKTsKKwogdm9pZCB2aWFmYl9maWxsX2NydGNfdGltaW5nKHN0cnVjdCBjcnRfbW9kZV90YWJsZSAqY3J0X3RhYmxlLAotCQkgICAgICBpbnQgbW9kZV9pbmRleCwgaW50IGJwcF9ieXRlLCBpbnQgc2V0X2lnYSk7CisJc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2aWRlb19tb2RlLCBpbnQgYnBwX2J5dGUsIGludCBzZXRfaWdhKTsKIAogdm9pZCB2aWFmYl9zZXRfdmNsb2NrKHUzMiBDTEssIGludCBzZXRfaWdhKTsKIHZvaWQgdmlhZmJfbG9hZF9yZWcoaW50IHRpbWluZ192YWx1ZSwgaW50IHZpYWZiX2xvYWRfcmVnX251bSwKQEAgLTg5MSwxNiArODkxLDE1IEBACiB2b2lkIHZpYWZiX3VubG9ja19jcnQodm9pZCk7CiB2b2lkIHZpYWZiX2xvYWRfZmV0Y2hfY291bnRfcmVnKGludCBoX2FkZHIsIGludCBicHBfYnl0ZSwgaW50IHNldF9pZ2EpOwogdm9pZCB2aWFmYl93cml0ZV9yZWd4KHN0cnVjdCBpb19yZWcgUmVnVGFibGVbXSwgaW50IEl0ZW1OdW0pOwotc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2aWFmYl9nZXRfbW9kZXRibF9wb2ludGVyKGludCBJbmRleCk7CiB1MzIgdmlhZmJfZ2V0X2Nsa192YWx1ZShpbnQgY2xrKTsKIHZvaWQgdmlhZmJfbG9hZF9GSUZPX3JlZyhpbnQgc2V0X2lnYSwgaW50IGhvcl9hY3RpdmUsIGludCB2ZXJfYWN0aXZlKTsKLXZvaWQgdmlhZmJfc2V0X2NvbG9yX2RlcHRoKGludCBicHBfYnl0ZSwgaW50IHNldF9pZ2EpOwogdm9pZCB2aWFmYl9zZXRfZHBhX2dmeChpbnQgb3V0cHV0X2ludGVyZmFjZSwgc3RydWN0IEdGWF9EUEFfU0VUVElOR1wKIAkJCQkJKnBfZ2Z4X2RwYV9zZXR0aW5nKTsKIAotaW50IHZpYWZiX3NldG1vZGUoaW50IHZtb2RlX2luZGV4LCBpbnQgaG9yX3JlcywgaW50IHZlcl9yZXMsCi0JICAgIGludCB2aWRlb19icHAsIGludCB2bW9kZV9pbmRleDEsIGludCBob3JfcmVzMSwKLQkgICAgaW50IHZlcl9yZXMxLCBpbnQgdmlkZW9fYnBwMSk7CitpbnQgdmlhZmJfc2V0bW9kZShzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZtb2RlX3RibCwgaW50IHZpZGVvX2JwcCwKKwlzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZtb2RlX3RibDEsIGludCB2aWRlb19icHAxKTsKK3ZvaWQgdmlhZmJfZmlsbF92YXJfdGltaW5nX2luZm8oc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIGludCByZWZyZXNoLAorCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqdm1vZGVfdGJsKTsKIHZvaWQgdmlhZmJfaW5pdF9jaGlwX2luZm8oc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwZGkpOwogdm9pZCB2aWFmYl9pbml0X2RhYyhpbnQgc2V0X2lnYSk7CkBAIC05MTUsNiArOTE0LDggQEAKIHZvaWQgdmlhZmJfc2V0X3NlY29uZGFyeV9hZGRyZXNzKHUzMiBhZGRyKTsKIHZvaWQgdmlhZmJfc2V0X3ByaW1hcnlfcGl0Y2godTMyIHBpdGNoKTsKIHZvaWQgdmlhZmJfc2V0X3NlY29uZGFyeV9waXRjaCh1MzIgcGl0Y2gpOwordm9pZCB2aWFmYl9zZXRfcHJpbWFyeV9jb2xvcl9yZWdpc3Rlcih1OCBpbmRleCwgdTggcmVkLCB1OCBncmVlbiwgdTggYmx1ZSk7Cit2b2lkIHZpYWZiX3NldF9zZWNvbmRhcnlfY29sb3JfcmVnaXN0ZXIodTggaW5kZXgsIHU4IHJlZCwgdTggZ3JlZW4sIHU4IGJsdWUpOwogdm9pZCB2aWFmYl9nZXRfZmJfaW5mbyh1bnNpZ25lZCBpbnQgKmZiX2Jhc2UsIHVuc2lnbmVkIGludCAqZmJfbGVuKTsKIAogI2VuZGlmIC8qIF9fSFdfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS9pZmFjZS5jIGIvZHJpdmVycy92aWRlby92aWEvaWZhY2UuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTU3MDYzNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9pZmFjZS5jCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAxOTk4LTIwMDggVklBIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IDIwMDEtMjAwOCBTMyBHcmFwaGljcywgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247Ci0gKiBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUzsgd2l0aG91dCBldmVuCi0gKiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFLlNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0KLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogRm91bmRhdGlvbiwgSW5jLiwKLSAqIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgImdsb2JhbC5oIgotCi0vKiBHZXQgZnJhbWUgYnVmZmVyIHNpemUgZnJvbSBWR0EgQklPUyAqLwotCi11bnNpZ25lZCBpbnQgdmlhZmJfZ2V0X21lbXNpemUodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgbTsKLQotCS8qIElmIG1lbW9yeSBzaXplIHByb3ZpZGVkIGJ5IHVzZXIgKi8KLQlpZiAodmlhZmJfbWVtc2l6ZSkKLQkJbSA9IHZpYWZiX21lbXNpemUgKiBNYjsKLQllbHNlIHsKLQkJbSA9ICh1bnNpZ25lZCBpbnQpdmlhZmJfcmVhZF9yZWcoVklBU1IsIFNSMzkpOwotCQltID0gbSAqICg0ICogTWIpOwotCi0JCWlmICgobSA8ICgxNiAqIE1iKSkgfHwgKG0gPiAoNjQgKiBNYikpKQotCQkJbSA9IDE2ICogTWI7Ci0JfQotCURFQlVHX01TRyhLRVJOX0lORk8gImZyYW1lYnVmZmVyIHNpemUgPSAlZCBNYlxuIiwgbSAvIE1iKTsKLQlyZXR1cm4gbTsKLX0KLQotLyogR2V0IFZpZGVvIEJ1ZmZlciBTdGFydGluZyBQaHlzaWNhbCBBZGRyZXNzKGJhY2sgZG9vcikqLwotCi11bnNpZ25lZCBsb25nIHZpYWZiX2dldF92aWRlb2J1Zl9hZGRyKHZvaWQpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwotCXVuc2lnbmVkIGNoYXIgc3lzX21lbTsKLQl1bnNpZ25lZCBjaGFyIHZpZGVvX21lbTsKLQl1bnNpZ25lZCBsb25nIHN5c19tZW1fc2l6ZTsKLQl1bnNpZ25lZCBsb25nIHZpZGVvX21lbV9zaXplOwotCS8qc3lzdGVtIG1lbW9yeSA9IDI1NiBNQiwgdmlkZW8gbWVtb3J5IDY0IE1CICovCi0JdW5zaWduZWQgbG9uZyB2bWVtX3N0YXJ0aW5nX2FkciA9IDB4MEMwMDAwMDA7Ci0KLQlwZGV2ID0KLQkgICAgKHN0cnVjdCBwY2lfZGV2ICopcGNpX2dldF9kZXZpY2UoVklBX0s4MDBfQlJJREdFX1ZJRCwKLQkJCQkJICAgICBWSUFfSzgwMF9CUklER0VfRElELCBOVUxMKTsKLQlpZiAocGRldiAhPSBOVUxMKSB7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFZJQV9LODAwX1NZU1RFTV9NRU1PUllfUkVHLAotCQkJCSAgICAgJnN5c19tZW0pOwotCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBWSUFfSzgwMF9WSURFT19NRU1PUllfUkVHLAotCQkJCSAgICAgJnZpZGVvX21lbSk7Ci0JCXZpZGVvX21lbSA9ICh2aWRlb19tZW0gJiAweDcwKSA+PiA0OwotCQlzeXNfbWVtX3NpemUgPSAoKHVuc2lnbmVkIGxvbmcpc3lzX21lbSkgPDwgMjQ7Ci0JCWlmICh2aWRlb19tZW0gIT0gMCkKLQkJCXZpZGVvX21lbV9zaXplID0gKDEgPDwgKHZpZGVvX21lbSkpICogMTAyNCAqIDEwMjQ7Ci0JCWVsc2UKLQkJCXZpZGVvX21lbV9zaXplID0gMDsKLQotCQl2bWVtX3N0YXJ0aW5nX2FkciA9IHN5c19tZW1fc2l6ZSAtIHZpZGVvX21lbV9zaXplOwotCQlwY2lfZGV2X3B1dChwZGV2KTsKLQl9Ci0KLQlERUJVR19NU0coS0VSTl9JTkZPICJWaWRlbyBNZW1vcnkgU3RhcnRpbmcgQWRkcmVzcyA9ICVseCBcbiIsCi0JCSAgdm1lbV9zdGFydGluZ19hZHIpOwotCXJldHVybiB2bWVtX3N0YXJ0aW5nX2FkcjsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL2lmYWNlLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS9pZmFjZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OTBlYzNlLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL2lmYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDE5OTgtMjAwOCBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgMjAwMS0yMDA4IFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0KLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsKLSAqIGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TOyB3aXRob3V0IGV2ZW4KLSAqIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UuU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogZm9yIG1vcmUgZGV0YWlscy4KLQotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLAotICogNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0jaWZuZGVmIF9fSUZBQ0VfSF9fCi0jZGVmaW5lIF9fSUZBQ0VfSF9fCi0KLSNkZWZpbmUgS2IgICgxMDI0KQotI2RlZmluZSBNYiAgKEtiKktiKQotCi0jZGVmaW5lIFZJQV9LODAwX0JSSURHRV9WSUQgICAgICAgICAweDExMDYKLSNkZWZpbmUgVklBX0s4MDBfQlJJREdFX0RJRCAgICAgICAgIDB4MzIwNAotCi0jZGVmaW5lIFZJQV9LODAwX1NZU1RFTV9NRU1PUllfUkVHICAweDQ3Ci0jZGVmaW5lIFZJQV9LODAwX1ZJREVPX01FTU9SWV9SRUcgICAweEExCi0KLWV4dGVybiBpbnQgdmlhZmJfbWVtc2l6ZTsKLXVuc2lnbmVkIGludCB2aWFmYl9nZXRfbWVtc2l6ZSh2b2lkKTsKLXVuc2lnbmVkIGxvbmcgdmlhZmJfZ2V0X3ZpZGVvYnVmX2FkZHIodm9pZCk7Ci0KLSNlbmRpZiAvKiBfX0lGQUNFX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuYwppbmRleCAwOTM1M2UyLi4xYjFjY2RjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9sY2QuYwpAQCAtMjIsMjUgKzIyLDcgQEAKICNpbmNsdWRlICJnbG9iYWwuaCIKICNpbmNsdWRlICJsY2R0YmwuaCIKIAotc3RhdGljIHN0cnVjdCBpZ2EyX3NoYWRvd19jcnRjX3RpbWluZyBpZ2EyX3NoYWRvd19jcnRjX3JlZyA9IHsKLQkvKiBJR0EyIFNoYWRvdyBIb3Jpem9udGFsIFRvdGFsICovCi0Je0lHQTJfU0hBRE9XX0hPUl9UT1RBTF9SRUdfTlVNLCB7e0NSNkQsIDAsIDd9LCB7Q1I3MSwgMywgM30gfSB9LAotCS8qIElHQTIgU2hhZG93IEhvcml6b250YWwgQmxhbmsgRW5kICovCi0Je0lHQTJfU0hBRE9XX0hPUl9CTEFOS19FTkRfUkVHX05VTSwge3tDUjZFLCAwLCA3fSB9IH0sCi0JLyogSUdBMiBTaGFkb3cgVmVydGljYWwgVG90YWwgKi8KLQl7SUdBMl9TSEFET1dfVkVSX1RPVEFMX1JFR19OVU0sIHt7Q1I2RiwgMCwgN30sIHtDUjcxLCAwLCAyfSB9IH0sCi0JLyogSUdBMiBTaGFkb3cgVmVydGljYWwgQWRkcmVzc2FibGUgVmlkZW8gKi8KLQl7SUdBMl9TSEFET1dfVkVSX0FERFJfUkVHX05VTSwge3tDUjcwLCAwLCA3fSwge0NSNzEsIDQsIDZ9IH0gfSwKLQkvKiBJR0EyIFNoYWRvdyBWZXJ0aWNhbCBCbGFuayBTdGFydCAqLwotCXtJR0EyX1NIQURPV19WRVJfQkxBTktfU1RBUlRfUkVHX05VTSwKLQkge3tDUjcyLCAwLCA3fSwge0NSNzQsIDQsIDZ9IH0gfSwKLQkvKiBJR0EyIFNoYWRvdyBWZXJ0aWNhbCBCbGFuayBFbmQgKi8KLQl7SUdBMl9TSEFET1dfVkVSX0JMQU5LX0VORF9SRUdfTlVNLCB7e0NSNzMsIDAsIDd9LCB7Q1I3NCwgMCwgMn0gfSB9LAotCS8qIElHQTIgU2hhZG93IFZlcnRpY2FsIFN5bmMgU3RhcnQgKi8KLQl7SUdBMl9TSEFET1dfVkVSX1NZTkNfU1RBUlRfUkVHX05VTSwge3tDUjc1LCAwLCA3fSwge0NSNzYsIDQsIDZ9IH0gfSwKLQkvKiBJR0EyIFNoYWRvdyBWZXJ0aWNhbCBTeW5jIEVuZCAqLwotCXtJR0EyX1NIQURPV19WRVJfU1lOQ19FTkRfUkVHX05VTSwge3tDUjc2LCAwLCAzfSB9IH0KLX07CisjZGVmaW5lIHZpYWZiX2NvbXBhY3RfcmVzKHgsIHkpICgoKHgpPDwxNil8KHkpKQogCiBzdGF0aWMgc3RydWN0IF9sY2Rfc2NhbGluZ19mYWN0b3IgbGNkX3NjYWxpbmdfZmFjdG9yID0gewogCS8qIExDRCBIb3Jpem9udGFsIFNjYWxpbmcgRmFjdG9yIFJlZ2lzdGVyICovCkBAIC01OSwxNiArNDEsMTAgQEAKIAogc3RhdGljIGludCBjaGVja19sdmRzX2NoaXAoaW50IGRldmljZV9pZF9zdWJhZGRyLCBpbnQgZGV2aWNlX2lkKTsKIHN0YXRpYyBib29sIGx2ZHNfaWRlbnRpZnlfaW50ZWdyYXRlZGx2ZHModm9pZCk7Ci1zdGF0aWMgaW50IGZwX2lkX3RvX3ZpbmRleChpbnQgcGFuZWxfaWQpOworc3RhdGljIHZvaWQgZnBfaWRfdG9fdmluZGV4KGludCBwYW5lbF9pZCk7CiBzdGF0aWMgaW50IGx2ZHNfcmVnaXN0ZXJfcmVhZChpbnQgaW5kZXgpOwogc3RhdGljIHZvaWQgbG9hZF9sY2Rfc2NhbGluZyhpbnQgc2V0X2hyZXMsIGludCBzZXRfdnJlcywgaW50IHBhbmVsX2hyZXMsCiAJCSAgICAgIGludCBwYW5lbF92cmVzKTsKLXN0YXRpYyB2b2lkIGxvYWRfbGNkX2s0MDBfcGF0Y2hfdGJsKGludCBzZXRfaHJlcywgaW50IHNldF92cmVzLAotCWludCBwYW5lbF9pZCk7Ci1zdGF0aWMgdm9pZCBsb2FkX2xjZF9wODgwX3BhdGNoX3RibChpbnQgc2V0X2hyZXMsIGludCBzZXRfdnJlcywKLQlpbnQgcGFuZWxfaWQpOwotc3RhdGljIHZvaWQgbG9hZF9sY2RfcGF0Y2hfcmVncyhpbnQgc2V0X2hyZXMsIGludCBzZXRfdnJlcywKLQlpbnQgcGFuZWxfaWQsIGludCBzZXRfaWdhKTsKIHN0YXRpYyB2b2lkIHZpYV9waXRjaF9hbGlnbm1lbnRfcGF0Y2hfbGNkKAogCXN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24gKnBsdmRzX3NldHRpbmdfaW5mbywKIAkJCQkgICBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uCkBAIC05OCw4ICs3NCw2IEBACiBzdGF0aWMgc3RydWN0IGRpc3BsYXlfdGltaW5nIGxjZF9jZW50ZXJpbmdfdGltZ2luZyhzdHJ1Y3QgZGlzcGxheV90aW1pbmcKIAkJCQkJICAgIG1vZGVfY3J0X3JlZywKIAkJCQkJICAgc3RydWN0IGRpc3BsYXlfdGltaW5nIHBhbmVsX2NydF9yZWcpOwotc3RhdGljIHZvaWQgbG9hZF9jcnRjX3NoYWRvd190aW1pbmcoc3RydWN0IGRpc3BsYXlfdGltaW5nIG1vZGVfdGltaW5nLAotCQkJICAgICBzdHJ1Y3QgZGlzcGxheV90aW1pbmcgcGFuZWxfdGltaW5nKTsKIHN0YXRpYyB2b2lkIHZpYWZiX2xvYWRfc2NhbGluZ19mYWN0b3JfZm9yX3A0bTkwMChpbnQgc2V0X2hyZXMsCiAJaW50IHNldF92cmVzLCBpbnQgcGFuZWxfaHJlcywgaW50IHBhbmVsX3ZyZXMpOwogCkBAIC0xMjUsMzMgKzk5LDI0IEBACiAJCWJyZWFrOwogCWNhc2UgR0VUX0xDRF9TSVpFX0JZX1ZHQV9CSU9TOgogCQlERUJVR19NU0coS0VSTl9JTkZPICJHZXQgTENEIFNpemUgbWV0aG9kIGJ5IFZHQSBCSU9TICEhXG4iKTsKLQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9zaXplID0KLQkJICAgIGZwX2lkX3RvX3ZpbmRleCh2aWFmYl9sY2RfcGFuZWxfaWQpOworCQlmcF9pZF90b192aW5kZXgodmlhZmJfbGNkX3BhbmVsX2lkKTsKIAkJREVCVUdfTVNHKEtFUk5fSU5GTyAiTENEIFBhbmVsX0lEID0gJWRcbiIsCiAJCQkgIHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQpOwotCQlERUJVR19NU0coS0VSTl9JTkZPICJMQ0QgUGFuZWwgU2l6ZSA9ICVkXG4iLAotCQkJICB2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3NpemUpOwogCQlicmVhazsKIAljYXNlIEdFVF9MQ0RfU0laRV9CWV9VU0VSX1NFVFRJTkc6CiAJCURFQlVHX01TRyhLRVJOX0lORk8gIkdldCBMQ0QgU2l6ZSBtZXRob2QgYnkgdXNlciBzZXR0aW5nICEhXG4iKTsKLQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9zaXplID0KLQkJICAgIGZwX2lkX3RvX3ZpbmRleCh2aWFmYl9sY2RfcGFuZWxfaWQpOworCQlmcF9pZF90b192aW5kZXgodmlhZmJfbGNkX3BhbmVsX2lkKTsKIAkJREVCVUdfTVNHKEtFUk5fSU5GTyAiTENEIFBhbmVsX0lEID0gJWRcbiIsCiAJCQkgIHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaWQpOwotCQlERUJVR19NU0coS0VSTl9JTkZPICJMQ0QgUGFuZWwgU2l6ZSA9ICVkXG4iLAotCQkJICB2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3NpemUpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9pbml0X2xjZF9zaXplIGZhaWxcbiIpOwogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkID0KIAkJCUxDRF9QQU5FTF9JRDFfODAwWDYwMDsKLQkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9zaXplID0KLQkJICAgIGZwX2lkX3RvX3ZpbmRleChMQ0RfUEFORUxfSUQxXzgwMFg2MDApOworCQlmcF9pZF90b192aW5kZXgoTENEX1BBTkVMX0lEMV84MDBYNjAwKTsKIAl9CiAJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5sY2RfcGFuZWxfaWQgPQogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkOwotCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvMi0+bGNkX3BhbmVsX3NpemUgPQotCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX3NpemU7CiAJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8yLT5sY2RfcGFuZWxfaHJlcyA9CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlczsKIAl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mbzItPmxjZF9wYW5lbF92cmVzID0KQEAgLTE3MSwxMyArMTM2LDEzIEBACiAJCWlmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvLmx2ZHNfY2hpcF9uYW1lKSB7CiAJCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMi5sdmRzX2NoaXBfbmFtZSA9CiAJCQkgICAgSU5URUdSQVRFRF9MVkRTOwotCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiU3VwcG9ydCB0d28gZHVhbCBjaGFubmVsIExWRFMhXAotCQkJCSAgKEludGVybmFsIExWRFMgKyBFeHRlcm5hbCBMVkRTKVxuIik7CisJCQlERUJVR19NU0coS0VSTl9JTkZPICJTdXBwb3J0IHR3byBkdWFsIGNoYW5uZWwgTFZEUyEgIgorCQkJCSAgIihJbnRlcm5hbCBMVkRTICsgRXh0ZXJuYWwgTFZEUylcbiIpOwogCQl9IGVsc2UgewogCQkJdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5sdmRzX2NoaXBfaW5mby5sdmRzX2NoaXBfbmFtZSA9CiAJCQkgICAgSU5URUdSQVRFRF9MVkRTOwotCQkJREVCVUdfTVNHKEtFUk5fSU5GTyAiTm90IGZvdW5kIGV4dGVybmFsIExWRFMsXAotCQkJCSAgc28gY2FuJ3Qgc3VwcG9ydCB0d28gZHVhbCBjaGFubmVsIExWRFMhXG4iKTsKKwkJCURFQlVHX01TRyhLRVJOX0lORk8gIk5vdCBmb3VuZCBleHRlcm5hbCBMVkRTLCAiCisJCQkJICAic28gY2FuJ3Qgc3VwcG9ydCB0d28gZHVhbCBjaGFubmVsIExWRFMhXG4iKTsKIAkJfQogCX0gZWxzZSBpZiAodmlhZmJfZGlzcGxheV9oYXJkd2FyZV9sYXlvdXQgPT0gSFdfTEFZT1VUX0xDRDFfTENEMikgewogCQkvKiBUd28gc2luZ2xlIGNoYW5uZWwgTENEIChJbnRlcm5hbCBMVkRTICsgSW50ZXJuYWwgTFZEUyk6ICovCkBAIC0xODUsOCArMTUwLDggQEAKIAkJSU5URUdSQVRFRF9MVkRTOwogCQl2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmx2ZHNfY2hpcF9pbmZvMi5sdmRzX2NoaXBfbmFtZSA9CiAJCQlJTlRFR1JBVEVEX0xWRFM7Ci0JCURFQlVHX01TRyhLRVJOX0lORk8gIlN1cHBvcnQgdHdvIHNpbmdsZSBjaGFubmVsIExWRFMhXAotCQkJICAoSW50ZXJuYWwgTFZEUyArIEludGVybmFsIExWRFMpXG4iKTsKKwkJREVCVUdfTVNHKEtFUk5fSU5GTyAiU3VwcG9ydCB0d28gc2luZ2xlIGNoYW5uZWwgTFZEUyEgIgorCQkJICAiKEludGVybmFsIExWRFMgKyBJbnRlcm5hbCBMVkRTKVxuIik7CiAJfSBlbHNlIGlmICh2aWFmYl9kaXNwbGF5X2hhcmR3YXJlX2xheW91dCAhPSBIV19MQVlPVVRfRFZJX09OTFkpIHsKIAkJLyogSWYgd2UgaGF2ZSBmb3VuZCBleHRlcm5hbCBMVkRTLCBqdXN0IHVzZSBpdCwKIAkJICAgb3RoZXJ3aXNlLCB3ZSB3aWxsIHVzZSBpbnRlcm5hbCBMVkRTIGFzIGRlZmF1bHQuICovCkBAIC0yNDgsNyArMjEzLDcgQEAKIAlyZXR1cm4gRkFJTDsKIH0KIAotc3RhdGljIGludCBmcF9pZF90b192aW5kZXgoaW50IHBhbmVsX2lkKQorc3RhdGljIHZvaWQgZnBfaWRfdG9fdmluZGV4KGludCBwYW5lbF9pZCkKIHsKIAlERUJVR19NU0coS0VSTl9JTkZPICJmcF9nZXRfcGFuZWxfaWQoKVxuIik7CiAKQEAgLTI2NCw3ICsyMjksNiBAQAogCQkJTENEX1BBTkVMX0lEMF82NDBYNDgwOwogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDA7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOwotCQlyZXR1cm4gVklBX1JFU182NDBYNDgwOwogCQlicmVhazsKIAljYXNlIDB4MToKIAkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9ocmVzID0gODAwOwpAQCAtMjczLDcgKzIzNyw2IEBACiAJCQlMQ0RfUEFORUxfSUQxXzgwMFg2MDA7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKIAkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7Ci0JCXJldHVybiBWSUFfUkVTXzgwMFg2MDA7CiAJCWJyZWFrOwogCWNhc2UgMHgyOgogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMDI0OwpAQCAtMjgyLDcgKzI0NSw2IEBACiAJCQlMQ0RfUEFORUxfSUQyXzEwMjRYNzY4OwogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDA7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOwotCQlyZXR1cm4gVklBX1JFU18xMDI0WDc2ODsKIAkJYnJlYWs7CiAJY2FzZSAweDM6CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDEyODA7CkBAIC0yOTEsNyArMjUzLDYgQEAKIAkJCUxDRF9QQU5FTF9JRDNfMTI4MFg3Njg7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKIAkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7Ci0JCXJldHVybiBWSUFfUkVTXzEyODBYNzY4OwogCQlicmVhazsKIAljYXNlIDB4NDoKIAkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9ocmVzID0gMTI4MDsKQEAgLTMwMCw3ICsyNjEsNiBAQAogCQkJTENEX1BBTkVMX0lENF8xMjgwWDEwMjQ7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMTsKIAkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7Ci0JCXJldHVybiBWSUFfUkVTXzEyODBYMTAyNDsKIAkJYnJlYWs7CiAJY2FzZSAweDU6CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDE0MDA7CkBAIC0zMDksNyArMjY5LDYgQEAKIAkJCUxDRF9QQU5FTF9JRDVfMTQwMFgxMDUwOwogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOwotCQlyZXR1cm4gVklBX1JFU18xNDAwWDEwNTA7CiAJCWJyZWFrOwogCWNhc2UgMHg2OgogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxNjAwOwpAQCAtMzE4LDcgKzI3Nyw2IEBACiAJCQlMQ0RfUEFORUxfSUQ2XzE2MDBYMTIwMDsKIAkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAxOwogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMTsKLQkJcmV0dXJuIFZJQV9SRVNfMTYwMFgxMjAwOwogCQlicmVhazsKIAljYXNlIDB4ODoKIAkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9ocmVzID0gODAwOwpAQCAtMzI3LDcgKzI4NSw2IEBACiAJCQlMQ0RfUEFORUxfSURBXzgwMFg0ODA7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKIAkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7Ci0JCXJldHVybiBWSUFfUkVTXzgwMFg0ODA7CiAJCWJyZWFrOwogCWNhc2UgMHg5OgogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMDI0OwpAQCAtMzM2LDcgKzI5Myw2IEBACiAJCQlMQ0RfUEFORUxfSUQyXzEwMjRYNzY4OwogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOwotCQlyZXR1cm4gVklBX1JFU18xMDI0WDc2ODsKIAkJYnJlYWs7CiAJY2FzZSAweEE6CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDEwMjQ7CkBAIC0zNDUsNyArMzAxLDYgQEAKIAkJCUxDRF9QQU5FTF9JRDJfMTAyNFg3Njg7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKIAkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDA7Ci0JCXJldHVybiBWSUFfUkVTXzEwMjRYNzY4OwogCQlicmVhazsKIAljYXNlIDB4QjoKIAkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9ocmVzID0gMTAyNDsKQEAgLTM1NCw3ICszMDksNiBAQAogCQkJTENEX1BBTkVMX0lEMl8xMDI0WDc2ODsKIAkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAxOwogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMDsKLQkJcmV0dXJuIFZJQV9SRVNfMTAyNFg3Njg7CiAJCWJyZWFrOwogCWNhc2UgMHhDOgogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMjgwOwpAQCAtMzYzLDcgKzMxNyw2IEBACiAJCQlMQ0RfUEFORUxfSUQzXzEyODBYNzY4OwogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDA7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAwOwotCQlyZXR1cm4gVklBX1JFU18xMjgwWDc2ODsKIAkJYnJlYWs7CiAJY2FzZSAweEQ6CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlcyA9IDEyODA7CkBAIC0zNzIsNyArMzI1LDYgQEAKIAkJCUxDRF9QQU5FTF9JRDRfMTI4MFgxMDI0OwogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAwOwotCQlyZXR1cm4gVklBX1JFU18xMjgwWDEwMjQ7CiAJCWJyZWFrOwogCWNhc2UgMHhFOgogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxNDAwOwpAQCAtMzgxLDcgKzMzMyw2IEBACiAJCQlMQ0RfUEFORUxfSUQ1XzE0MDBYMTA1MDsKIAkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAxOwogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMDsKLQkJcmV0dXJuIFZJQV9SRVNfMTQwMFgxMDUwOwogCQlicmVhazsKIAljYXNlIDB4RjoKIAkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9ocmVzID0gMTYwMDsKQEAgLTM5MCw3ICszNDEsNiBAQAogCQkJTENEX1BBTkVMX0lENl8xNjAwWDEyMDA7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMTsKIAkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDA7Ci0JCXJldHVybiBWSUFfUkVTXzE2MDBYMTIwMDsKIAkJYnJlYWs7CiAJY2FzZSAweDEwOgogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMzY2OwpAQCAtMzk5LDcgKzM0OSw2IEBACiAJCQlMQ0RfUEFORUxfSUQ3XzEzNjZYNzY4OwogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDA7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAwOwotCQlyZXR1cm4gVklBX1JFU18xMzY4WDc2ODsKIAkJYnJlYWs7CiAJY2FzZSAweDExOgogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMDI0OwpAQCAtNDA4LDcgKzM1Nyw2IEBACiAJCQlMQ0RfUEFORUxfSUQ4XzEwMjRYNjAwOwogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDA7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOwotCQlyZXR1cm4gVklBX1JFU18xMDI0WDYwMDsKIAkJYnJlYWs7CiAJY2FzZSAweDEyOgogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMjgwOwpAQCAtNDE3LDcgKzM2NSw2IEBACiAJCQlMQ0RfUEFORUxfSUQzXzEyODBYNzY4OwogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOwotCQlyZXR1cm4gVklBX1JFU18xMjgwWDc2ODsKIAkJYnJlYWs7CiAJY2FzZSAweDEzOgogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMjgwOwpAQCAtNDI2LDcgKzM3Myw2IEBACiAJCQlMQ0RfUEFORUxfSUQ5XzEyODBYODAwOwogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDA7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAxOwotCQlyZXR1cm4gVklBX1JFU18xMjgwWDgwMDsKIAkJYnJlYWs7CiAJY2FzZSAweDE0OgogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMzYwOwpAQCAtNDM1LDcgKzM4MSw2IEBACiAJCQlMQ0RfUEFORUxfSURCXzEzNjBYNzY4OwogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDA7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAwOwotCQlyZXR1cm4gVklBX1JFU18xMzYwWDc2ODsKIAkJYnJlYWs7CiAJY2FzZSAweDE1OgogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSAxMjgwOwpAQCAtNDQ0LDcgKzM4OSw2IEBACiAJCQlMQ0RfUEFORUxfSUQzXzEyODBYNzY4OwogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGV2aWNlX2xjZF9kdWFsZWRnZSA9IDE7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5MQ0REaXRoZXJpbmcgPSAwOwotCQlyZXR1cm4gVklBX1JFU18xMjgwWDc2ODsKIAkJYnJlYWs7CiAJY2FzZSAweDE2OgogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXMgPSA0ODA7CkBAIC00NTMsNyArMzk3LDYgQEAKIAkJCUxDRF9QQU5FTF9JRENfNDgwWDY0MDsKIAkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmRldmljZV9sY2RfZHVhbGVkZ2UgPSAwOwogCQl2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+TENERGl0aGVyaW5nID0gMTsKLQkJcmV0dXJuIFZJQV9SRVNfNDgwWDY0MDsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9ocmVzID0gODAwOwpAQCAtNDYyLDcgKzQwNSw2IEBACiAJCQlMQ0RfUEFORUxfSUQxXzgwMFg2MDA7CiAJCXZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5kZXZpY2VfbGNkX2R1YWxlZGdlID0gMDsKIAkJdmlhcGFyaW5mby0+bHZkc19zZXR0aW5nX2luZm8tPkxDRERpdGhlcmluZyA9IDE7Ci0JCXJldHVybiBWSUFfUkVTXzgwMFg2MDA7CiAJfQogfQogCkBAIC01NzMsMjg0ICs1MTUsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgbG9hZF9sY2RfazQwMF9wYXRjaF90YmwoaW50IHNldF9ocmVzLCBpbnQgc2V0X3ZyZXMsCi0JaW50IHBhbmVsX2lkKQotewotCWludCB2bW9kZV9pbmRleDsKLQlpbnQgcmVnX251bSA9IDA7Ci0Jc3RydWN0IGlvX3JlZyAqbGNkX3BhdGNoX3JlZyA9IE5VTEw7Ci0KLQl2bW9kZV9pbmRleCA9IHZpYWZiX2dldF9tb2RlX2luZGV4KHNldF9ocmVzLCBzZXRfdnJlcyk7Ci0Jc3dpdGNoIChwYW5lbF9pZCkgewotCQkvKiBMQ0QgODAweDYwMCAqLwotCWNhc2UgTENEX1BBTkVMX0lEMV84MDBYNjAwOgotCQlzd2l0Y2ggKHZtb2RlX2luZGV4KSB7Ci0JCWNhc2UgVklBX1JFU182NDBYNDAwOgotCQljYXNlIFZJQV9SRVNfNjQwWDQ4MDoKLQkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzZYNF84WDY7Ci0JCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzZYNF84WDY7Ci0JCQlicmVhazsKLQkJY2FzZSBWSUFfUkVTXzcyMFg0ODA6Ci0JCWNhc2UgVklBX1JFU183MjBYNTc2OgotCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfN1g0XzhYNjsKLQkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfN1g0XzhYNjsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCi0JCS8qIExDRCAxMDI0eDc2OCAqLwotCWNhc2UgTENEX1BBTkVMX0lEMl8xMDI0WDc2ODoKLQkJc3dpdGNoICh2bW9kZV9pbmRleCkgewotCQljYXNlIFZJQV9SRVNfNjQwWDQwMDoKLQkJY2FzZSBWSUFfUkVTXzY0MFg0ODA6Ci0JCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU182WDRfMTBYNzsKLQkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfNlg0XzEwWDc7Ci0JCQlicmVhazsKLQkJY2FzZSBWSUFfUkVTXzcyMFg0ODA6Ci0JCWNhc2UgVklBX1JFU183MjBYNTc2OgotCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfN1g0XzEwWDc7Ci0JCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzdYNF8xMFg3OwotCQkJYnJlYWs7Ci0JCWNhc2UgVklBX1JFU184MDBYNjAwOgotCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfOFg2XzEwWDc7Ci0JCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzhYNl8xMFg3OwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0KLQkJLyogTENEIDEyODB4MTAyNCAqLwotCWNhc2UgTENEX1BBTkVMX0lENF8xMjgwWDEwMjQ6Ci0JCXN3aXRjaCAodm1vZGVfaW5kZXgpIHsKLQkJY2FzZSBWSUFfUkVTXzY0MFg0MDA6Ci0JCWNhc2UgVklBX1JFU182NDBYNDgwOgotCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfNlg0XzEyWDEwOwotCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU182WDRfMTJYMTA7Ci0JCQlicmVhazsKLQkJY2FzZSBWSUFfUkVTXzcyMFg0ODA6Ci0JCWNhc2UgVklBX1JFU183MjBYNTc2OgotCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfN1g0XzEyWDEwOwotCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU183WDRfMTJYMTA7Ci0JCQlicmVhazsKLQkJY2FzZSBWSUFfUkVTXzgwMFg2MDA6Ci0JCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTJYMTA7Ci0JCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzhYNl8xMlgxMDsKLQkJCWJyZWFrOwotCQljYXNlIFZJQV9SRVNfMTAyNFg3Njg6Ci0JCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU18xMFg3XzEyWDEwOwotCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU18xMFg3XzEyWDEwOwotCQkJYnJlYWs7Ci0KLQkJfQotCQlicmVhazsKLQotCQkvKiBMQ0QgMTQwMHgxMDUwICovCi0JY2FzZSBMQ0RfUEFORUxfSUQ1XzE0MDBYMTA1MDoKLQkJc3dpdGNoICh2bW9kZV9pbmRleCkgewotCQljYXNlIFZJQV9SRVNfNjQwWDQ4MDoKLQkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzZYNF8xNFgxMDsKLQkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfNlg0XzE0WDEwOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklBX1JFU184MDBYNjAwOgotCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfOFg2XzE0WDEwOwotCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU184WDZfMTRYMTA7Ci0JCQlicmVhazsKLQkJY2FzZSBWSUFfUkVTXzEwMjRYNzY4OgotCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTBYN18xNFgxMDsKLQkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfMTBYN18xNFgxMDsKLQkJCWJyZWFrOwotCQljYXNlIFZJQV9SRVNfMTI4MFg3Njg6Ci0JCWNhc2UgVklBX1JFU18xMjgwWDgwMDoKLQkJY2FzZSBWSUFfUkVTXzEyODBYOTYwOgotCQljYXNlIFZJQV9SRVNfMTI4MFgxMDI0OgotCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTJYMTBfMTRYMTA7Ci0JCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzEyWDEwXzE0WDEwOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0KLQkJLyogTENEIDE2MDB4MTIwMCAqLwotCWNhc2UgTENEX1BBTkVMX0lENl8xNjAwWDEyMDA6Ci0JCXN3aXRjaCAodm1vZGVfaW5kZXgpIHsKLQkJY2FzZSBWSUFfUkVTXzY0MFg0MDA6Ci0JCWNhc2UgVklBX1JFU182NDBYNDgwOgotCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfNlg0XzE2WDEyOwotCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU182WDRfMTZYMTI7Ci0JCQlicmVhazsKLQkJY2FzZSBWSUFfUkVTXzcyMFg0ODA6Ci0JCWNhc2UgVklBX1JFU183MjBYNTc2OgotCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfN1g0XzE2WDEyOwotCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU183WDRfMTZYMTI7Ci0JCQlicmVhazsKLQkJY2FzZSBWSUFfUkVTXzgwMFg2MDA6Ci0JCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTZYMTI7Ci0JCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzhYNl8xNlgxMjsKLQkJCWJyZWFrOwotCQljYXNlIFZJQV9SRVNfMTAyNFg3Njg6Ci0JCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU18xMFg3XzE2WDEyOwotCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU18xMFg3XzE2WDEyOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklBX1JFU18xMjgwWDc2ODoKLQkJY2FzZSBWSUFfUkVTXzEyODBYODAwOgotCQljYXNlIFZJQV9SRVNfMTI4MFg5NjA6Ci0JCWNhc2UgVklBX1JFU18xMjgwWDEwMjQ6Ci0JCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU18xMlgxMF8xNlgxMjsKLQkJCWxjZF9wYXRjaF9yZWcgPSBLNDAwX0xDRF9SRVNfMTJYMTBfMTZYMTI7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQotCQkvKiBMQ0QgMTM2Nng3NjggKi8KLQljYXNlIExDRF9QQU5FTF9JRDdfMTM2Nlg3Njg6Ci0JCXN3aXRjaCAodm1vZGVfaW5kZXgpIHsKLQkJY2FzZSBWSUFfUkVTXzY0MFg0ODA6Ci0JCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU182WDRfMTM2Nlg3OwotCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU182WDRfMTM2Nlg3OwotCQkJYnJlYWs7Ci0JCWNhc2UgVklBX1JFU183MjBYNDgwOgotCQljYXNlIFZJQV9SRVNfNzIwWDU3NjoKLQkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzdYNF8xMzY2WDc7Ci0JCQlsY2RfcGF0Y2hfcmVnID0gSzQwMF9MQ0RfUkVTXzdYNF8xMzY2WDc7Ci0JCQlicmVhazsKLQkJY2FzZSBWSUFfUkVTXzgwMFg2MDA6Ci0JCQlyZWdfbnVtID0gTlVNX1RPVEFMX0s0MDBfTENEX1JFU184WDZfMTM2Nlg3OwotCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU184WDZfMTM2Nlg3OwotCQkJYnJlYWs7Ci0JCWNhc2UgVklBX1JFU18xMDI0WDc2ODoKLQkJCXJlZ19udW0gPSBOVU1fVE9UQUxfSzQwMF9MQ0RfUkVTXzEwWDdfMTM2Nlg3OwotCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU18xMFg3XzEzNjZYNzsKLQkJCWJyZWFrOwotCQljYXNlIFZJQV9SRVNfMTI4MFg3Njg6Ci0JCWNhc2UgVklBX1JFU18xMjgwWDgwMDoKLQkJY2FzZSBWSUFfUkVTXzEyODBYOTYwOgotCQljYXNlIFZJQV9SRVNfMTI4MFgxMDI0OgotCQkJcmVnX251bSA9IE5VTV9UT1RBTF9LNDAwX0xDRF9SRVNfMTJYMTBfMTM2Nlg3OwotCQkJbGNkX3BhdGNoX3JlZyA9IEs0MDBfTENEX1JFU18xMlgxMF8xMzY2WDc7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQotCQkvKiBMQ0QgMTM2MHg3NjggKi8KLQljYXNlIExDRF9QQU5FTF9JREJfMTM2MFg3Njg6Ci0JCWJyZWFrOwotCX0KLQlpZiAocmVnX251bSAhPSAwKSB7Ci0JCS8qIEguVy4gUmVzZXQgOiBPTiAqLwotCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjE3LCBWSUFDUiwgMHgwMCwgQklUNyk7Ci0KLQkJdmlhZmJfd3JpdGVfcmVneChsY2RfcGF0Y2hfcmVnLCByZWdfbnVtKTsKLQotCQkvKiBILlcuIFJlc2V0IDogT0ZGICovCi0JCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMTcsIFZJQUNSLCAweDgwLCBCSVQ3KTsKLQotCQkvKiBSZXNldCBQTEwgKi8KLQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1I0MCwgVklBU1IsIDB4MDIsIEJJVDEpOwotCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjQwLCBWSUFTUiwgMHgwMCwgQklUMSk7Ci0KLQkJLyogRmlyZSEgKi8KLQkJb3V0YihpbmIoVklBUk1pc2MpIHwgKEJJVDIgKyBCSVQzKSwgVklBV01pc2MpOwotCX0KLX0KLQotc3RhdGljIHZvaWQgbG9hZF9sY2RfcDg4MF9wYXRjaF90YmwoaW50IHNldF9ocmVzLCBpbnQgc2V0X3ZyZXMsCi0JaW50IHBhbmVsX2lkKQotewotCWludCB2bW9kZV9pbmRleDsKLQlpbnQgcmVnX251bSA9IDA7Ci0Jc3RydWN0IGlvX3JlZyAqbGNkX3BhdGNoX3JlZyA9IE5VTEw7Ci0KLQl2bW9kZV9pbmRleCA9IHZpYWZiX2dldF9tb2RlX2luZGV4KHNldF9ocmVzLCBzZXRfdnJlcyk7Ci0KLQlzd2l0Y2ggKHBhbmVsX2lkKSB7Ci0JY2FzZSBMQ0RfUEFORUxfSUQ1XzE0MDBYMTA1MDoKLQkJc3dpdGNoICh2bW9kZV9pbmRleCkgewotCQljYXNlIFZJQV9SRVNfNjQwWDQ4MDoKLQkJCXJlZ19udW0gPSBOVU1fVE9UQUxfUDg4MF9MQ0RfUkVTXzZYNF8xNFgxMDsKLQkJCWxjZF9wYXRjaF9yZWcgPSBQODgwX0xDRF9SRVNfNlg0XzE0WDEwOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklBX1JFU184MDBYNjAwOgotCQkJcmVnX251bSA9IE5VTV9UT1RBTF9QODgwX0xDRF9SRVNfOFg2XzE0WDEwOwotCQkJbGNkX3BhdGNoX3JlZyA9IFA4ODBfTENEX1JFU184WDZfMTRYMTA7Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQljYXNlIExDRF9QQU5FTF9JRDZfMTYwMFgxMjAwOgotCQlzd2l0Y2ggKHZtb2RlX2luZGV4KSB7Ci0JCWNhc2UgVklBX1JFU182NDBYNDAwOgotCQljYXNlIFZJQV9SRVNfNjQwWDQ4MDoKLQkJCXJlZ19udW0gPSBOVU1fVE9UQUxfUDg4MF9MQ0RfUkVTXzZYNF8xNlgxMjsKLQkJCWxjZF9wYXRjaF9yZWcgPSBQODgwX0xDRF9SRVNfNlg0XzE2WDEyOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklBX1JFU183MjBYNDgwOgotCQljYXNlIFZJQV9SRVNfNzIwWDU3NjoKLQkJCXJlZ19udW0gPSBOVU1fVE9UQUxfUDg4MF9MQ0RfUkVTXzdYNF8xNlgxMjsKLQkJCWxjZF9wYXRjaF9yZWcgPSBQODgwX0xDRF9SRVNfN1g0XzE2WDEyOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklBX1JFU184MDBYNjAwOgotCQkJcmVnX251bSA9IE5VTV9UT1RBTF9QODgwX0xDRF9SRVNfOFg2XzE2WDEyOwotCQkJbGNkX3BhdGNoX3JlZyA9IFA4ODBfTENEX1JFU184WDZfMTZYMTI7Ci0JCQlicmVhazsKLQkJY2FzZSBWSUFfUkVTXzEwMjRYNzY4OgotCQkJcmVnX251bSA9IE5VTV9UT1RBTF9QODgwX0xDRF9SRVNfMTBYN18xNlgxMjsKLQkJCWxjZF9wYXRjaF9yZWcgPSBQODgwX0xDRF9SRVNfMTBYN18xNlgxMjsKLQkJCWJyZWFrOwotCQljYXNlIFZJQV9SRVNfMTI4MFg3Njg6Ci0JCWNhc2UgVklBX1JFU18xMjgwWDk2MDoKLQkJY2FzZSBWSUFfUkVTXzEyODBYMTAyNDoKLQkJCXJlZ19udW0gPSBOVU1fVE9UQUxfUDg4MF9MQ0RfUkVTXzEyWDEwXzE2WDEyOwotCQkJbGNkX3BhdGNoX3JlZyA9IFA4ODBfTENEX1JFU18xMlgxMF8xNlgxMjsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCi0JfQotCWlmIChyZWdfbnVtICE9IDApIHsKLQkJLyogSC5XLiBSZXNldCA6IE9OICovCi0JCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSMTcsIFZJQUNSLCAweDAwLCBCSVQ3KTsKLQotCQl2aWFmYl93cml0ZV9yZWd4KGxjZF9wYXRjaF9yZWcsIHJlZ19udW0pOwotCi0JCS8qIEguVy4gUmVzZXQgOiBPRkYgKi8KLQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1IxNywgVklBQ1IsIDB4ODAsIEJJVDcpOwotCi0JCS8qIFJlc2V0IFBMTCAqLwotCQl2aWFmYl93cml0ZV9yZWdfbWFzayhTUjQwLCBWSUFTUiwgMHgwMiwgQklUMSk7Ci0JCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSNDAsIFZJQVNSLCAweDAwLCBCSVQxKTsKLQotCQkvKiBGaXJlISAqLwotCQlvdXRiKGluYihWSUFSTWlzYykgfCAoQklUMiArIEJJVDMpLCBWSUFXTWlzYyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBsb2FkX2xjZF9wYXRjaF9yZWdzKGludCBzZXRfaHJlcywgaW50IHNldF92cmVzLAotCWludCBwYW5lbF9pZCwgaW50IHNldF9pZ2EpCi17Ci0JaW50IHZtb2RlX2luZGV4OwotCi0Jdm1vZGVfaW5kZXggPSB2aWFmYl9nZXRfbW9kZV9pbmRleChzZXRfaHJlcywgc2V0X3ZyZXMpOwotCi0JdmlhZmJfdW5sb2NrX2NydCgpOwotCi0JLyogUGF0Y2ggZm9yIHNpbXVsdGFuZW91cyAmIEV4cGFuc2lvbiAqLwotCWlmICgoc2V0X2lnYSA9PSBJR0ExX0lHQTIpICYmCi0JCSh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGlzcGxheV9tZXRob2QgPT0KLQkgICAgTENEX0VYUEFORFNJT04pKSB7Ci0JCXN3aXRjaCAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7Ci0JCWNhc2UgVU5JQ0hST01FX0NMRTI2NjoKLQkJY2FzZSBVTklDSFJPTUVfSzQwMDoKLQkJCWxvYWRfbGNkX2s0MDBfcGF0Y2hfdGJsKHNldF9ocmVzLCBzZXRfdnJlcywgcGFuZWxfaWQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVU5JQ0hST01FX0s4MDA6Ci0JCQlicmVhazsKLQkJY2FzZSBVTklDSFJPTUVfUE04MDA6Ci0JCWNhc2UgVU5JQ0hST01FX0NONzAwOgotCQljYXNlIFVOSUNIUk9NRV9DWDcwMDoKLQkJCWxvYWRfbGNkX3A4ODBfcGF0Y2hfdGJsKHNldF9ocmVzLCBzZXRfdnJlcywgcGFuZWxfaWQpOwotCQl9Ci0JfQotCi0JdmlhZmJfbG9ja19jcnQoKTsKLX0KLQogc3RhdGljIHZvaWQgdmlhX3BpdGNoX2FsaWdubWVudF9wYXRjaF9sY2QoCiAJc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqcGx2ZHNfc2V0dGluZ19pbmZvLAogCQkJCSAgIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24KQEAgLTk0OSwyOSArNjEzLDI1IEBACiAJCSAgc3RydWN0IGx2ZHNfc2V0dGluZ19pbmZvcm1hdGlvbiAqcGx2ZHNfc2V0dGluZ19pbmZvLAogCQkgIHN0cnVjdCBsdmRzX2NoaXBfaW5mb3JtYXRpb24gKnBsdmRzX2NoaXBfaW5mbykKIHsKLQlpbnQgdmlkZW9faW5kZXggPSBwbHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9zaXplOwogCWludCBzZXRfaWdhID0gcGx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aDsKIAlpbnQgbW9kZV9icHAgPSBwbHZkc19zZXR0aW5nX2luZm8tPmJwcDsKLQlpbnQgc2V0X2hyZXMsIHNldF92cmVzOwotCWludCBwYW5lbF9ocmVzLCBwYW5lbF92cmVzOworCWludCBzZXRfaHJlcyA9IHBsdmRzX3NldHRpbmdfaW5mby0+aF9hY3RpdmU7CisJaW50IHNldF92cmVzID0gcGx2ZHNfc2V0dGluZ19pbmZvLT52X2FjdGl2ZTsKKwlpbnQgcGFuZWxfaHJlcyA9IHBsdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2hyZXM7CisJaW50IHBhbmVsX3ZyZXMgPSBwbHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF92cmVzOwogCXUzMiBwbGxfRF9OOwotCWludCBvZmZzZXQ7CiAJc3RydWN0IGRpc3BsYXlfdGltaW5nIG1vZGVfY3J0X3JlZywgcGFuZWxfY3J0X3JlZzsKIAlzdHJ1Y3QgY3J0X21vZGVfdGFibGUgKnBhbmVsX2NydF90YWJsZSA9IE5VTEw7Ci0Jc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2bW9kZV90YmwgPSBOVUxMOworCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqdm1vZGVfdGJsID0gdmlhZmJfZ2V0X21vZGUocGFuZWxfaHJlcywKKwkJcGFuZWxfdnJlcyk7CiAKIAlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9sY2Rfc2V0X21vZGUhIVxuIik7CiAJLyogR2V0IG1vZGUgdGFibGUgKi8KIAltb2RlX2NydF9yZWcgPSBtb2RlX2NydF90YWJsZS0+Y3J0YzsKIAkvKiBHZXQgcGFuZWwgdGFibGUgUG9pbnRlciAqLwotCXZtb2RlX3RibCA9IHZpYWZiX2dldF9tb2RldGJsX3BvaW50ZXIodmlkZW9faW5kZXgpOwogCXBhbmVsX2NydF90YWJsZSA9IHZtb2RlX3RibC0+Y3J0YzsKIAlwYW5lbF9jcnRfcmVnID0gcGFuZWxfY3J0X3RhYmxlLT5jcnRjOwogCURFQlVHX01TRyhLRVJOX0lORk8gImJlbGxvdyB2aWFmYl9sY2Rfc2V0X21vZGUhIVxuIik7Ci0Jc2V0X2hyZXMgPSBwbHZkc19zZXR0aW5nX2luZm8tPmhfYWN0aXZlOwotCXNldF92cmVzID0gcGx2ZHNfc2V0dGluZ19pbmZvLT52X2FjdGl2ZTsKLQlwYW5lbF9ocmVzID0gcGx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfaHJlczsKLQlwYW5lbF92cmVzID0gcGx2ZHNfc2V0dGluZ19pbmZvLT5sY2RfcGFuZWxfdnJlczsKIAlpZiAoVlQxNjM2X0xWRFMgPT0gcGx2ZHNfY2hpcF9pbmZvLT5sdmRzX2NoaXBfbmFtZSkKIAkJdmlhZmJfaW5pdF9sdmRzX3Z0MTYzNihwbHZkc19zZXR0aW5nX2luZm8sIHBsdmRzX2NoaXBfaW5mbyk7CiAJcGx2ZHNfc2V0dGluZ19pbmZvLT52Y2xrID0gcGFuZWxfY3J0X3RhYmxlLT5jbGs7CkBAIC0xMDAxLDU0ICs2NjEsMTIgQEAKIAkJfQogCX0KIAotCWlmIChzZXRfaWdhID09IElHQTFfSUdBMikgewotCQlsb2FkX2NydGNfc2hhZG93X3RpbWluZyhtb2RlX2NydF9yZWcsIHBhbmVsX2NydF9yZWcpOwotCQkvKiBGaWxsIHNoYWRvdyByZWdpc3RlcnMgKi8KKwkvKiBGZXRjaCBjb3VudCBmb3IgSUdBMiBvbmx5ICovCisJdmlhZmJfbG9hZF9mZXRjaF9jb3VudF9yZWcoc2V0X2hyZXMsIG1vZGVfYnBwIC8gOCwgc2V0X2lnYSk7CiAKLQkJc3dpdGNoIChwbHZkc19zZXR0aW5nX2luZm8tPmxjZF9wYW5lbF9pZCkgewotCQljYXNlIExDRF9QQU5FTF9JRDBfNjQwWDQ4MDoKLQkJCW9mZnNldCA9IDgwOwotCQkJYnJlYWs7Ci0JCWNhc2UgTENEX1BBTkVMX0lEMV84MDBYNjAwOgotCQljYXNlIExDRF9QQU5FTF9JREFfODAwWDQ4MDoKLQkJCW9mZnNldCA9IDExMDsKLQkJCWJyZWFrOwotCQljYXNlIExDRF9QQU5FTF9JRDJfMTAyNFg3Njg6Ci0JCQlvZmZzZXQgPSAxNTA7Ci0JCQlicmVhazsKLQkJY2FzZSBMQ0RfUEFORUxfSUQzXzEyODBYNzY4OgotCQljYXNlIExDRF9QQU5FTF9JRDRfMTI4MFgxMDI0OgotCQljYXNlIExDRF9QQU5FTF9JRDVfMTQwMFgxMDUwOgotCQljYXNlIExDRF9QQU5FTF9JRDlfMTI4MFg4MDA6Ci0JCQlvZmZzZXQgPSAxOTA7Ci0JCQlicmVhazsKLQkJY2FzZSBMQ0RfUEFORUxfSUQ2XzE2MDBYMTIwMDoKLQkJCW9mZnNldCA9IDI1MDsKLQkJCWJyZWFrOwotCQljYXNlIExDRF9QQU5FTF9JRDdfMTM2Nlg3Njg6Ci0JCWNhc2UgTENEX1BBTkVMX0lEQl8xMzYwWDc2ODoKLQkJCW9mZnNldCA9IDIxMjsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJb2Zmc2V0ID0gMTQwOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBPZmZzZXQgZm9yIHNpbXVsdGFuZW91cyAqLwotCQl2aWFmYl9zZXRfc2Vjb25kYXJ5X3BpdGNoKG9mZnNldCA8PCAzKTsKLQkJREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfbG9hZF9yZWchIVxuIik7Ci0JCXZpYWZiX2xvYWRfZmV0Y2hfY291bnRfcmVnKHNldF9ocmVzLCA0LCBJR0EyKTsKLQkJLyogRmV0Y2ggY291bnQgZm9yIHNpbXVsdGFuZW91cyAqLwotCX0gZWxzZSB7CQkvKiBTQU1NICovCi0JCS8qIEZldGNoIGNvdW50IGZvciBJR0EyIG9ubHkgKi8KLQkJdmlhZmJfbG9hZF9mZXRjaF9jb3VudF9yZWcoc2V0X2hyZXMsIG1vZGVfYnBwIC8gOCwgc2V0X2lnYSk7Ci0KLQkJaWYgKCh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgIT0gVU5JQ0hST01FX0NMRTI2NikKLQkJICAgICYmICh2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgIT0gVU5JQ0hST01FX0s0MDApKQotCQkJdmlhZmJfbG9hZF9GSUZPX3JlZyhzZXRfaWdhLCBzZXRfaHJlcywgc2V0X3ZyZXMpOwotCi0JCXZpYWZiX3NldF9jb2xvcl9kZXB0aChtb2RlX2JwcCAvIDgsIHNldF9pZ2EpOwotCX0KKwlpZiAoKHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSAhPSBVTklDSFJPTUVfQ0xFMjY2KQorCQkmJiAodmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lICE9IFVOSUNIUk9NRV9LNDAwKSkKKwkJdmlhZmJfbG9hZF9GSUZPX3JlZyhzZXRfaWdhLCBzZXRfaHJlcywgc2V0X3ZyZXMpOwogCiAJZmlsbF9sY2RfZm9ybWF0KCk7CiAKQEAgLTEwNjUsMTEgKzY4Myw2IEBACiAJICAgIHx8IChVTklDSFJPTUVfSzhNODkwID09IHZpYXBhcmluZm8tPmNoaXBfaW5mby0+Z2Z4X2NoaXBfbmFtZSkpCiAJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAweDAxLCBCSVQwKTsKIAotCWxvYWRfbGNkX3BhdGNoX3JlZ3Moc2V0X2hyZXMsIHNldF92cmVzLAotCQkJICAgIHBsdmRzX3NldHRpbmdfaW5mby0+bGNkX3BhbmVsX2lkLCBzZXRfaWdhKTsKLQotCURFQlVHX01TRyhLRVJOX0lORk8gImxvYWRfbGNkX3BhdGNoX3JlZ3MhIVxuIik7Ci0KIAkvKiBQYXRjaCBmb3Igbm9uIDMyYml0IGFsaWdubWVudCBtb2RlICovCiAJdmlhX3BpdGNoX2FsaWdubWVudF9wYXRjaF9sY2QocGx2ZHNfc2V0dGluZ19pbmZvLCBwbHZkc19jaGlwX2luZm8pOwogfQpAQCAtMTI4Myw4ICs4OTYsNyBAQAogCQl2aWFmYl93cml0ZV9yZWdfbWFzayhDUjZBLCBWSUFDUiwgMHg0OCwgMHg0OCk7CiAJfQogCi0JaWYgKCh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+aWdhX3BhdGggPT0gSUdBMSkKLQkgICAgfHwgKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9PSBJR0ExX0lHQTIpKSB7CisJaWYgKHZpYXBhcmluZm8tPmx2ZHNfc2V0dGluZ19pbmZvLT5pZ2FfcGF0aCA9PSBJR0ExKSB7CiAJCS8qIENSVCBwYXRoIHNldCB0byBJR0EyICAgICovCiAJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMTYsIFZJQVNSLCAweDQwLCAweDQwKTsKIAkJLyogSUdBMiBwYXRoIGRpc2FibGVkICAgICAgKi8KQEAgLTE0NzYsMjEwICsxMDg4LDYgQEAKIAlyZXR1cm4gY3J0X3JlZzsKIH0KIAotc3RhdGljIHZvaWQgbG9hZF9jcnRjX3NoYWRvd190aW1pbmcoc3RydWN0IGRpc3BsYXlfdGltaW5nIG1vZGVfdGltaW5nLAotCQkJICAgICBzdHJ1Y3QgZGlzcGxheV90aW1pbmcgcGFuZWxfdGltaW5nKQotewotCXN0cnVjdCBpb19yZWdpc3RlciAqcmVnID0gTlVMTDsKLQlpbnQgaTsKLQlpbnQgdmlhZmJfbG9hZF9yZWdfTnVtID0gMDsKLQlpbnQgcmVnX3ZhbHVlID0gMDsKLQotCWlmICh2aWFwYXJpbmZvLT5sdmRzX3NldHRpbmdfaW5mby0+ZGlzcGxheV9tZXRob2QgPT0gTENEX0VYUEFORFNJT04pIHsKLQkJLyogRXhwYW5zaW9uICovCi0JCWZvciAoaSA9IDEyOyBpIDwgMjA7IGkrKykgewotCQkJc3dpdGNoIChpKSB7Ci0JCQljYXNlIEhfVE9UQUxfU0hBRE9XX0lOREVYOgotCQkJCXJlZ192YWx1ZSA9Ci0JCQkJICAgIElHQTJfSE9SX1RPVEFMX1NIQURPV19GT1JNVUxBCi0JCQkJICAgIChwYW5lbF90aW1pbmcuaG9yX3RvdGFsKTsKLQkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQotCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy5ob3JfdG90YWxfc2hhZG93LgotCQkJCSAgICByZWdfbnVtOwotCQkJCXJlZyA9IGlnYTJfc2hhZG93X2NydGNfcmVnLmhvcl90b3RhbF9zaGFkb3cucmVnOwotCQkJCWJyZWFrOwotCQkJY2FzZSBIX0JMQU5LX0VORF9TSEFET1dfSU5ERVg6Ci0JCQkJcmVnX3ZhbHVlID0KLQkJCQkgICAgSUdBMl9IT1JfQkxBTktfRU5EX1NIQURPV19GT1JNVUxBCi0JCQkJICAgIChwYW5lbF90aW1pbmcuaG9yX2JsYW5rX3N0YXJ0LAotCQkJCSAgICAgcGFuZWxfdGltaW5nLmhvcl9ibGFua19lbmQpOwotCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9Ci0JCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgotCQkJCSAgICBob3JfYmxhbmtfZW5kX3NoYWRvdy5yZWdfbnVtOwotCQkJCXJlZyA9Ci0JCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgotCQkJCSAgICBob3JfYmxhbmtfZW5kX3NoYWRvdy5yZWc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFZfVE9UQUxfU0hBRE9XX0lOREVYOgotCQkJCXJlZ192YWx1ZSA9Ci0JCQkJICAgIElHQTJfVkVSX1RPVEFMX1NIQURPV19GT1JNVUxBCi0JCQkJICAgIChwYW5lbF90aW1pbmcudmVyX3RvdGFsKTsKLQkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQotCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy52ZXJfdG90YWxfc2hhZG93LgotCQkJCSAgICByZWdfbnVtOwotCQkJCXJlZyA9IGlnYTJfc2hhZG93X2NydGNfcmVnLnZlcl90b3RhbF9zaGFkb3cucmVnOwotCQkJCWJyZWFrOwotCQkJY2FzZSBWX0FERFJfU0hBRE9XX0lOREVYOgotCQkJCXJlZ192YWx1ZSA9Ci0JCQkJICAgIElHQTJfVkVSX0FERFJfU0hBRE9XX0ZPUk1VTEEKLQkJCQkgICAgKHBhbmVsX3RpbWluZy52ZXJfYWRkcik7Ci0JCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KLQkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcudmVyX2FkZHJfc2hhZG93LgotCQkJCSAgICByZWdfbnVtOwotCQkJCXJlZyA9IGlnYTJfc2hhZG93X2NydGNfcmVnLnZlcl9hZGRyX3NoYWRvdy5yZWc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFZfQkxBTktfU0FUUlRfU0hBRE9XX0lOREVYOgotCQkJCXJlZ192YWx1ZSA9Ci0JCQkJICAgIElHQTJfVkVSX0JMQU5LX1NUQVJUX1NIQURPV19GT1JNVUxBCi0JCQkJICAgIChwYW5lbF90aW1pbmcudmVyX2JsYW5rX3N0YXJ0KTsKLQkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQotCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KLQkJCQkgICAgdmVyX2JsYW5rX3N0YXJ0X3NoYWRvdy5yZWdfbnVtOwotCQkJCXJlZyA9Ci0JCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgotCQkJCSAgICB2ZXJfYmxhbmtfc3RhcnRfc2hhZG93LnJlZzsKLQkJCQlicmVhazsKLQkJCWNhc2UgVl9CTEFOS19FTkRfU0hBRE9XX0lOREVYOgotCQkJCXJlZ192YWx1ZSA9Ci0JCQkJICAgIElHQTJfVkVSX0JMQU5LX0VORF9TSEFET1dfRk9STVVMQQotCQkJCSAgICAocGFuZWxfdGltaW5nLnZlcl9ibGFua19zdGFydCwKLQkJCQkgICAgIHBhbmVsX3RpbWluZy52ZXJfYmxhbmtfZW5kKTsKLQkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQotCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KLQkJCQkgICAgdmVyX2JsYW5rX2VuZF9zaGFkb3cucmVnX251bTsKLQkJCQlyZWcgPQotCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KLQkJCQkgICAgdmVyX2JsYW5rX2VuZF9zaGFkb3cucmVnOwotCQkJCWJyZWFrOwotCQkJY2FzZSBWX1NZTkNfU0FUUlRfU0hBRE9XX0lOREVYOgotCQkJCXJlZ192YWx1ZSA9Ci0JCQkJICAgIElHQTJfVkVSX1NZTkNfU1RBUlRfU0hBRE9XX0ZPUk1VTEEKLQkJCQkgICAgKHBhbmVsX3RpbWluZy52ZXJfc3luY19zdGFydCk7Ci0JCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KLQkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCi0JCQkJICAgIHZlcl9zeW5jX3N0YXJ0X3NoYWRvdy5yZWdfbnVtOwotCQkJCXJlZyA9Ci0JCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgotCQkJCSAgICB2ZXJfc3luY19zdGFydF9zaGFkb3cucmVnOwotCQkJCWJyZWFrOwotCQkJY2FzZSBWX1NZTkNfRU5EX1NIQURPV19JTkRFWDoKLQkJCQlyZWdfdmFsdWUgPQotCQkJCSAgICBJR0EyX1ZFUl9TWU5DX0VORF9TSEFET1dfRk9STVVMQQotCQkJCSAgICAocGFuZWxfdGltaW5nLnZlcl9zeW5jX3N0YXJ0LAotCQkJCSAgICAgcGFuZWxfdGltaW5nLnZlcl9zeW5jX2VuZCk7Ci0JCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KLQkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCi0JCQkJICAgIHZlcl9zeW5jX2VuZF9zaGFkb3cucmVnX251bTsKLQkJCQlyZWcgPQotCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KLQkJCQkgICAgdmVyX3N5bmNfZW5kX3NoYWRvdy5yZWc7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQl2aWFmYl9sb2FkX3JlZyhyZWdfdmFsdWUsCi0JCQkJdmlhZmJfbG9hZF9yZWdfTnVtLCByZWcsIFZJQUNSKTsKLQkJfQotCX0gZWxzZSB7CQkvKiBDZW50ZXJpbmcgKi8KLQkJZm9yIChpID0gMTI7IGkgPCAyMDsgaSsrKSB7Ci0JCQlzd2l0Y2ggKGkpIHsKLQkJCWNhc2UgSF9UT1RBTF9TSEFET1dfSU5ERVg6Ci0JCQkJcmVnX3ZhbHVlID0KLQkJCQkgICAgSUdBMl9IT1JfVE9UQUxfU0hBRE9XX0ZPUk1VTEEKLQkJCQkgICAgKHBhbmVsX3RpbWluZy5ob3JfdG90YWwpOwotCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9Ci0JCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLmhvcl90b3RhbF9zaGFkb3cuCi0JCQkJICAgIHJlZ19udW07Ci0JCQkJcmVnID0gaWdhMl9zaGFkb3dfY3J0Y19yZWcuaG9yX3RvdGFsX3NoYWRvdy5yZWc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIEhfQkxBTktfRU5EX1NIQURPV19JTkRFWDoKLQkJCQlyZWdfdmFsdWUgPQotCQkJCSAgICBJR0EyX0hPUl9CTEFOS19FTkRfU0hBRE9XX0ZPUk1VTEEKLQkJCQkgICAgKHBhbmVsX3RpbWluZy5ob3JfYmxhbmtfc3RhcnQsCi0JCQkJICAgICBwYW5lbF90aW1pbmcuaG9yX2JsYW5rX2VuZCk7Ci0JCQkJdmlhZmJfbG9hZF9yZWdfTnVtID0KLQkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCi0JCQkJICAgIGhvcl9ibGFua19lbmRfc2hhZG93LnJlZ19udW07Ci0JCQkJcmVnID0KLQkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcuCi0JCQkJICAgIGhvcl9ibGFua19lbmRfc2hhZG93LnJlZzsKLQkJCQlicmVhazsKLQkJCWNhc2UgVl9UT1RBTF9TSEFET1dfSU5ERVg6Ci0JCQkJcmVnX3ZhbHVlID0KLQkJCQkgICAgSUdBMl9WRVJfVE9UQUxfU0hBRE9XX0ZPUk1VTEEKLQkJCQkgICAgKHBhbmVsX3RpbWluZy52ZXJfdG90YWwpOwotCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9Ci0JCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLnZlcl90b3RhbF9zaGFkb3cuCi0JCQkJICAgIHJlZ19udW07Ci0JCQkJcmVnID0gaWdhMl9zaGFkb3dfY3J0Y19yZWcudmVyX3RvdGFsX3NoYWRvdy5yZWc7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFZfQUREUl9TSEFET1dfSU5ERVg6Ci0JCQkJcmVnX3ZhbHVlID0KLQkJCQkgICAgSUdBMl9WRVJfQUREUl9TSEFET1dfRk9STVVMQQotCQkJCSAgICAobW9kZV90aW1pbmcudmVyX2FkZHIpOwotCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9Ci0JCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLnZlcl9hZGRyX3NoYWRvdy4KLQkJCQkgICAgcmVnX251bTsKLQkJCQlyZWcgPSBpZ2EyX3NoYWRvd19jcnRjX3JlZy52ZXJfYWRkcl9zaGFkb3cucmVnOwotCQkJCWJyZWFrOwotCQkJY2FzZSBWX0JMQU5LX1NBVFJUX1NIQURPV19JTkRFWDoKLQkJCQlyZWdfdmFsdWUgPQotCQkJCSAgICBJR0EyX1ZFUl9CTEFOS19TVEFSVF9TSEFET1dfRk9STVVMQQotCQkJCSAgICAobW9kZV90aW1pbmcudmVyX2JsYW5rX3N0YXJ0KTsKLQkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQotCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KLQkJCQkgICAgdmVyX2JsYW5rX3N0YXJ0X3NoYWRvdy5yZWdfbnVtOwotCQkJCXJlZyA9Ci0JCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLgotCQkJCSAgICB2ZXJfYmxhbmtfc3RhcnRfc2hhZG93LnJlZzsKLQkJCQlicmVhazsKLQkJCWNhc2UgVl9CTEFOS19FTkRfU0hBRE9XX0lOREVYOgotCQkJCXJlZ192YWx1ZSA9Ci0JCQkJICAgIElHQTJfVkVSX0JMQU5LX0VORF9TSEFET1dfRk9STVVMQQotCQkJCSAgICAocGFuZWxfdGltaW5nLnZlcl9ibGFua19zdGFydCwKLQkJCQkgICAgIHBhbmVsX3RpbWluZy52ZXJfYmxhbmtfZW5kKTsKLQkJCQl2aWFmYl9sb2FkX3JlZ19OdW0gPQotCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KLQkJCQkgICAgdmVyX2JsYW5rX2VuZF9zaGFkb3cucmVnX251bTsKLQkJCQlyZWcgPQotCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy4KLQkJCQkgICAgdmVyX2JsYW5rX2VuZF9zaGFkb3cucmVnOwotCQkJCWJyZWFrOwotCQkJY2FzZSBWX1NZTkNfU0FUUlRfU0hBRE9XX0lOREVYOgotCQkJCXJlZ192YWx1ZSA9Ci0JCQkJICAgIElHQTJfVkVSX1NZTkNfU1RBUlRfU0hBRE9XX0ZPUk1VTEEoCi0JCQkJICAgIChwYW5lbF90aW1pbmcudmVyX3N5bmNfc3RhcnQgLQotCQkJCSAgICBwYW5lbF90aW1pbmcudmVyX2JsYW5rX3N0YXJ0KSArCi0JCQkJICAgIChwYW5lbF90aW1pbmcudmVyX2FkZHIgLQotCQkJCSAgICBtb2RlX3RpbWluZy52ZXJfYWRkcikgLyAyICsKLQkJCQkgICAgbW9kZV90aW1pbmcudmVyX2FkZHIpOwotCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9Ci0JCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLnZlcl9zeW5jX3N0YXJ0X3NoYWRvdy4KLQkJCQkgICAgcmVnX251bTsKLQkJCQlyZWcgPQotCQkJCSAgICBpZ2EyX3NoYWRvd19jcnRjX3JlZy52ZXJfc3luY19zdGFydF9zaGFkb3cuCi0JCQkJICAgIHJlZzsKLQkJCQlicmVhazsKLQkJCWNhc2UgVl9TWU5DX0VORF9TSEFET1dfSU5ERVg6Ci0JCQkJcmVnX3ZhbHVlID0KLQkJCQkgICAgSUdBMl9WRVJfU1lOQ19FTkRfU0hBRE9XX0ZPUk1VTEEoCi0JCQkJICAgIChwYW5lbF90aW1pbmcudmVyX3N5bmNfc3RhcnQgLQotCQkJCSAgICBwYW5lbF90aW1pbmcudmVyX2JsYW5rX3N0YXJ0KSArCi0JCQkJICAgIChwYW5lbF90aW1pbmcudmVyX2FkZHIgLQotCQkJCSAgICBtb2RlX3RpbWluZy52ZXJfYWRkcikgLyAyICsKLQkJCQkgICAgbW9kZV90aW1pbmcudmVyX2FkZHIsCi0JCQkJICAgIHBhbmVsX3RpbWluZy52ZXJfc3luY19lbmQpOwotCQkJCXZpYWZiX2xvYWRfcmVnX051bSA9Ci0JCQkJICAgIGlnYTJfc2hhZG93X2NydGNfcmVnLnZlcl9zeW5jX2VuZF9zaGFkb3cuCi0JCQkJICAgIHJlZ19udW07Ci0JCQkJcmVnID0KLQkJCQkgICAgaWdhMl9zaGFkb3dfY3J0Y19yZWcudmVyX3N5bmNfZW5kX3NoYWRvdy4KLQkJCQkgICAgcmVnOwotCQkJCWJyZWFrOwotCQkJfQotCQkJdmlhZmJfbG9hZF9yZWcocmVnX3ZhbHVlLAotCQkJCXZpYWZiX2xvYWRfcmVnX051bSwgcmVnLCBWSUFDUik7Ci0JCX0KLQl9Ci19Ci0KIGJvb2wgdmlhZmJfbGNkX2dldF9tb2JpbGVfc3RhdGUoYm9vbCAqbW9iaWxlKQogewogCXVuc2lnbmVkIGNoYXIgKnJvbXB0ciwgKnRhYmxlcHRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvc2hhcmUuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL3NoYXJlLmgKaW5kZXggN2NkMDNlMi4uZDU1YWFhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvc2hhcmUuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS9zaGFyZS5oCkBAIC00Myw2MSArNDMsNiBAQAogLyogVmlkZW8gTWVtb3J5IFNpemUgKi8KICNkZWZpbmUgVklERU9fTUVNT1JZX1NJWkVfMTZNICAgIDB4MTAwMDAwMAogCi0vKiBEZWZpbml0aW9uIE1vZGUgSW5kZXgKLSovCi0jZGVmaW5lICAgICBWSUFfUkVTXzY0MFg0ODAgICAgICAgICAgICAgICAgIAkwCi0jZGVmaW5lICAgICBWSUFfUkVTXzgwMFg2MDAgICAgICAgICAgICAgICAgIAkxCi0jZGVmaW5lICAgICBWSUFfUkVTXzEwMjRYNzY4ICAgICAgICAgICAgICAgIAkyCi0jZGVmaW5lICAgICBWSUFfUkVTXzExNTJYODY0ICAgICAgICAgICAgICAgIAkzCi0jZGVmaW5lICAgICBWSUFfUkVTXzEyODBYMTAyNCAgICAgICAgICAgICAgIAk0Ci0jZGVmaW5lICAgICBWSUFfUkVTXzE2MDBYMTIwMCAgICAgICAgICAgICAgIAk1Ci0jZGVmaW5lICAgICBWSUFfUkVTXzE0NDBYMTA1MCAgICAgICAgICAgICAgIAk2Ci0jZGVmaW5lICAgICBWSUFfUkVTXzEyODBYNzY4ICAgICAgICAgICAgICAgIAk3Ci0jZGVmaW5lICAgICBWSUFfUkVTXzEyODBYOTYwICAgICAgICAgICAgICAgIAk4Ci0jZGVmaW5lICAgICBWSUFfUkVTXzE5MjBYMTQ0MCAgICAgICAgICAgICAgIAk5Ci0jZGVmaW5lICAgICBWSUFfUkVTXzg0OFg0ODAgICAgICAgICAgICAgICAgIAkxMAotI2RlZmluZSAgICAgVklBX1JFU18xNDAwWDEwNTAgICAgICAgICAgICAgICAJMTEKLSNkZWZpbmUgICAgIFZJQV9SRVNfNzIwWDQ4MCAgICAgICAgICAgICAgICAgCTEyCi0jZGVmaW5lICAgICBWSUFfUkVTXzcyMFg1NzYgICAgICAgICAgICAgICAgIAkxMwotI2RlZmluZSAgICAgVklBX1JFU18xMDI0WDUxMiAgICAgICAgICAgICAgICAJMTQKLSNkZWZpbmUgICAgIFZJQV9SRVNfODU2WDQ4MCAgICAgICAgICAgICAgICAgCTE1Ci0jZGVmaW5lICAgICBWSUFfUkVTXzEwMjRYNTc2ICAgICAgICAgICAgICAgIAkxNgotI2RlZmluZSAgICAgVklBX1JFU182NDBYNDAwICAgICAgICAgICAgICAgICAJMTcKLSNkZWZpbmUgICAgIFZJQV9SRVNfMTI4MFg3MjAgICAgICAgICAgICAgICAgCTE4Ci0jZGVmaW5lICAgICBWSUFfUkVTXzE5MjBYMTA4MCAgICAgICAgICAgICAgIAkxOQotI2RlZmluZSAgICAgVklBX1JFU184MDBYNDgwICAgICAgICAgICAgICAgICAJMjAKLSNkZWZpbmUgICAgIFZJQV9SRVNfMTM2OFg3NjggICAgICAgICAgICAgICAgCTIxCi0jZGVmaW5lICAgICBWSUFfUkVTXzEwMjRYNjAwICAgICAgICAgICAgICAgIAkyMgotI2RlZmluZSAgICAgVklBX1JFU18xMjgwWDgwMCAgICAgICAgICAgICAgICAJMjMKLSNkZWZpbmUgICAgIFZJQV9SRVNfMTY4MFgxMDUwICAgICAgICAgICAgICAgCTI0Ci0jZGVmaW5lICAgICBWSUFfUkVTXzk2MFg2MDAJCQkyNQotI2RlZmluZSAgICAgVklBX1JFU18xMDAwWDYwMCAgICAgICAgICAgICAgIAkyNgotI2RlZmluZSAgICAgVklBX1JFU18xMDg4WDYxMiAgICAgICAgICAgICAgIAkyNwotI2RlZmluZSAgICAgVklBX1JFU18xMTUyWDcyMCAgICAgICAgICAgICAgIAkyOAotI2RlZmluZSAgICAgVklBX1JFU18xMjAwWDcyMCAgICAgICAgICAgICAgIAkyOQotI2RlZmluZSAgICAgVklBX1JFU18xMjgwWDYwMCAgICAgICAgICAgICAgIAkzMAotI2RlZmluZSAgICAgVklBX1JFU18xMzYwWDc2OCAgICAgICAgICAgICAgIAkzMQotI2RlZmluZSAgICAgVklBX1JFU18xMzY2WDc2OCAgICAgICAgICAgICAgIAkzMgotI2RlZmluZSAgICAgVklBX1JFU18xNDQwWDkwMCAgICAgICAgICAgICAgIAkzMwotI2RlZmluZSAgICAgVklBX1JFU18xNjAwWDkwMCAgICAgICAgICAgICAgIAkzNAotI2RlZmluZSAgICAgVklBX1JFU18xNjAwWDEwMjQgICAgICAgICAgICAgIAkzNQotI2RlZmluZSAgICAgVklBX1JFU18xNzkyWDEzNDQgICAgICAgICAgICAgIAkzNgotI2RlZmluZSAgICAgVklBX1JFU18xODU2WDEzOTIgICAgICAgICAgICAgIAkzNwotI2RlZmluZSAgICAgVklBX1JFU18xOTIwWDEyMDAgICAgICAgICAgICAgIAkzOAotI2RlZmluZSAgICAgVklBX1JFU18yMDQ4WDE1MzYgICAgICAgICAgICAgIAkzOQotI2RlZmluZSAgICAgVklBX1JFU180ODBYNjQwICAgICAgICAgICAgICAgICAgCTQwCi0KLS8qUmVkdWNlIEJsYW5raW5nKi8KLSNkZWZpbmUgICAgIFZJQV9SRVNfMTM2MFg3NjhfUkIgICAgICAgICAgCTEzMQotI2RlZmluZSAgICAgVklBX1JFU18xNDQwWDkwMF9SQiAgICAgICAgICAJMTMzCi0jZGVmaW5lICAgICBWSUFfUkVTXzE0MDBYMTA1MF9SQiAgICAgICAgCTExMQotI2RlZmluZSAgICAgVklBX1JFU18xNjAwWDkwMF9SQiAgICAgICAgICAJMTM0Ci0jZGVmaW5lICAgICBWSUFfUkVTXzE2ODBYMTA1MF9SQiAgICAgICAgCTEyNAotI2RlZmluZSAgICAgVklBX1JFU18xOTIwWDEwODBfUkIgICAgICAgIAkxMTkKLSNkZWZpbmUgICAgIFZJQV9SRVNfMTkyMFgxMjAwX1JCICAgICAgICAJMTM4Ci0KLSNkZWZpbmUgICAgIFZJQV9SRVNfSU5WQUxJRCAgICAgICAgICAgICAgICAgCTI1NQotCiAvKiBzdGFuZGFyZCBWR0EgSU8gcG9ydAogKi8KICNkZWZpbmUgVklBUk1pc2MgICAgMHgzQ0MKQEAgLTExOCw3ICs2Myw2IEBACiAvKiBEaXNwbGF5IHBhdGggKi8KICNkZWZpbmUgSUdBMSAgICAgICAgMQogI2RlZmluZSBJR0EyICAgICAgICAyCi0jZGVmaW5lIElHQTFfSUdBMiAgIDMKIAogLyogRGVmaW5lIENvbG9yIERlcHRoICAqLwogI2RlZmluZSBNT0RFXzhCUFAgICAgICAgMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhX3V0aWxpdHkuYyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV91dGlsaXR5LmMKaW5kZXggZDUzYzNkNS4uYWVmZGVlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvdmlhX3V0aWxpdHkuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfdXRpbGl0eS5jCkBAIC0yMzksMTUgKzIzOSwzIEBACiAJZWxzZQogCQkqc3VwcG9ydF9zdGF0ZSA9IENSVF9EZXZpY2UgfCBEVklfRGV2aWNlIHwgTENEX0RldmljZTsKIH0KLQotaW50IHZpYWZiX2lucHV0X3BhcmFtZXRlcl9jb252ZXJ0ZXIoaW50IHBhcmFtZXRlcl92YWx1ZSkKLXsKLQlpbnQgcmVzdWx0OwotCi0JaWYgKHBhcmFtZXRlcl92YWx1ZSA+PSAxICYmIHBhcmFtZXRlcl92YWx1ZSA8PSA5KQotCQlyZXN1bHQgPSAxIDw8IChwYXJhbWV0ZXJfdmFsdWUgLSAxKTsKLQllbHNlCi0JCXJlc3VsdCA9IDE7Ci0KLQlyZXR1cm4gcmVzdWx0OwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhX3V0aWxpdHkuaCBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYV91dGlsaXR5LmgKaW5kZXggMmZkNDU1Mi4uMTY3MGJhOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvdmlhX3V0aWxpdHkuaAorKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFfdXRpbGl0eS5oCkBAIC0zMCw2ICszMCw1IEBACiB2b2lkIHZpYWZiX3NldF9nYW1tYV90YWJsZShpbnQgYnBwLCB1bnNpZ25lZCBpbnQgKmdhbW1hX3RhYmxlKTsKIHZvaWQgdmlhZmJfZ2V0X2dhbW1hX3RhYmxlKHVuc2lnbmVkIGludCAqZ2FtbWFfdGFibGUpOwogdm9pZCB2aWFmYl9nZXRfZ2FtbWFfc3VwcG9ydF9zdGF0ZShpbnQgYnBwLCB1bnNpZ25lZCBpbnQgKnN1cHBvcnRfc3RhdGUpOwotaW50IHZpYWZiX2lucHV0X3BhcmFtZXRlcl9jb252ZXJ0ZXIoaW50IHBhcmFtZXRlcl92YWx1ZSk7CiAKICNlbmRpZiAvKiBfX1ZJQVVUSUxJVFlfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuYwppbmRleCAzMDI4ZTdkLi5jZTc3ODNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMKQEAgLTI2LDE4ICsyNiwyMiBAQAogCiAjaW5jbHVkZSAiZ2xvYmFsLmgiCiAKLXN0YXRpYyBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gZGVmYXVsdF92YXI7CiBzdGF0aWMgY2hhciAqdmlhZmJfbmFtZSA9ICJWaWEiOwogc3RhdGljIHUzMiBwc2V1ZG9fcGFsWzE3XTsKIAogLyogdmlkZW8gbW9kZSAqLwotc3RhdGljIGNoYXIgKnZpYWZiX21vZGUgPSAiNjQweDQ4MCI7Ci1zdGF0aWMgY2hhciAqdmlhZmJfbW9kZTEgPSAiNjQweDQ4MCI7CitzdGF0aWMgY2hhciAqdmlhZmJfbW9kZTsKK3N0YXRpYyBjaGFyICp2aWFmYl9tb2RlMTsKK3N0YXRpYyBpbnQgdmlhZmJfYnBwID0gMzI7CitzdGF0aWMgaW50IHZpYWZiX2JwcDEgPSAzMjsKKworc3RhdGljIHVuc2lnbmVkIGludCB2aWFmYl9zZWNvbmRfb2Zmc2V0Oworc3RhdGljIGludCB2aWFmYl9zZWNvbmRfc2l6ZTsKIAogc3RhdGljIGludCB2aWFmYl9hY2NlbCA9IDE7CiAKIC8qIEFkZGVkIGZvciBzcGVjaWZ5aW5nIGFjdGl2ZSBkZXZpY2VzLiovCi1jaGFyICp2aWFmYl9hY3RpdmVfZGV2ID0gIiI7CitjaGFyICp2aWFmYl9hY3RpdmVfZGV2OwogCiAvKkFkZGVkIGZvciBzcGVjaWZ5IGxjZCBvdXRwdXQgcG9ydCovCiBjaGFyICp2aWFmYl9sY2RfcG9ydCA9ICIiOwpAQCAtNTAsMTggKzU0LDc4IEBACiAJKnNlY192YXIpOwogc3RhdGljIHZvaWQgcmV0cmlldmVfZGV2aWNlX3NldHRpbmcoc3RydWN0IHZpYWZiX2lvY3RsX3NldHRpbmcKIAkqc2V0dGluZ19pbmZvKTsKK3N0YXRpYyBpbnQgdmlhZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCisJc3RydWN0IGZiX2luZm8gKmluZm8pOwogCiBzdGF0aWMgc3RydWN0IGZiX29wcyB2aWFmYl9vcHM7CiAKIAorc3RhdGljIHZvaWQgdmlhZmJfZmlsbF92YXJfY29sb3JfaW5mbyhzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgdTggZGVwdGgpCit7CisJdmFyLT5ncmF5c2NhbGUgPSAwOworCXZhci0+cmVkLm1zYl9yaWdodCA9IDA7CisJdmFyLT5ncmVlbi5tc2JfcmlnaHQgPSAwOworCXZhci0+Ymx1ZS5tc2JfcmlnaHQgPSAwOworCXZhci0+dHJhbnNwLm9mZnNldCA9IDA7CisJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKKwl2YXItPnRyYW5zcC5tc2JfcmlnaHQgPSAwOworCXZhci0+bm9uc3RkID0gMDsKKwlzd2l0Y2ggKGRlcHRoKSB7CisJY2FzZSA4OgorCQl2YXItPmJpdHNfcGVyX3BpeGVsID0gODsKKwkJdmFyLT5yZWQub2Zmc2V0ID0gMDsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSAwOworCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoID0gODsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA4OworCQl2YXItPmJsdWUubGVuZ3RoID0gODsKKwkJYnJlYWs7CisJY2FzZSAxNToKKwkJdmFyLT5iaXRzX3Blcl9waXhlbCA9IDE2OworCQl2YXItPnJlZC5vZmZzZXQgPSAxMDsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSA1OworCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoID0gNTsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA1OworCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKKwkJYnJlYWs7CisJY2FzZSAxNjoKKwkJdmFyLT5iaXRzX3Blcl9waXhlbCA9IDE2OworCQl2YXItPnJlZC5vZmZzZXQgPSAxMTsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSA1OworCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoID0gNTsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA2OworCQl2YXItPmJsdWUubGVuZ3RoID0gNTsKKwkJYnJlYWs7CisJY2FzZSAyNDoKKwkJdmFyLT5iaXRzX3Blcl9waXhlbCA9IDMyOworCQl2YXItPnJlZC5vZmZzZXQgPSAxNjsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSA4OworCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoID0gODsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA4OworCQl2YXItPmJsdWUubGVuZ3RoID0gODsKKwkJYnJlYWs7CisJY2FzZSAzMDoKKwkJdmFyLT5iaXRzX3Blcl9waXhlbCA9IDMyOworCQl2YXItPnJlZC5vZmZzZXQgPSAyMDsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSAxMDsKKwkJdmFyLT5ibHVlLm9mZnNldCA9IDA7CisJCXZhci0+cmVkLmxlbmd0aCA9IDEwOworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDEwOworCQl2YXItPmJsdWUubGVuZ3RoID0gMTA7CisJCWJyZWFrOworCX0KK30KKwogc3RhdGljIHZvaWQgdmlhZmJfdXBkYXRlX2ZpeChzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAl1MzIgYnBwID0gaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsOwogCiAJaW5mby0+Zml4LnZpc3VhbCA9CiAJCWJwcCA9PSA4ID8gRkJfVklTVUFMX1BTRVVET0NPTE9SIDogRkJfVklTVUFMX1RSVUVDT0xPUjsKLQlpbmZvLT5maXgubGluZV9sZW5ndGggPQotCQkoKGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKyA3KSAmIH43KSAqIGJwcCAvIDg7CisJaW5mby0+Zml4LmxpbmVfbGVuZ3RoID0gKGluZm8tPnZhci54cmVzX3ZpcnR1YWwgKiBicHAgLyA4ICsgNykgJiB+NzsKIH0KIAogc3RhdGljIHZvaWQgdmlhZmJfc2V0dXBfZml4aW5mbyhzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gKmZpeCwKQEAgLTc1LDYgKzEzOSw3IEBACiAKIAlmaXgtPnR5cGUgPSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFM7CiAJZml4LT50eXBlX2F1eCA9IDA7CisJZml4LT52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOwogCiAJZml4LT54cGFuc3RlcCA9IGZpeC0+eXdyYXBzdGVwID0gMDsKIAlmaXgtPnlwYW5zdGVwID0gMTsKQEAgLTk3LDkgKzE2MiwxMCBAQAogc3RhdGljIGludCB2aWFmYl9jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCiAJc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0JaW50IHZtb2RlX2luZGV4LCBodG90YWwsIHZ0b3RhbDsKKwlpbnQgaHRvdGFsLCB2dG90YWwsIGRlcHRoOworCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqdm1vZGVfZW50cnk7CiAJc3RydWN0IHZpYWZiX3BhciAqcHBhciA9IGluZm8tPnBhcjsKLQl1MzIgbG9uZ19yZWZyZXNoOworCXUzMiBsb25nX3JlZnJlc2gsIGxpbmU7CiAKIAlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9jaGVja192YXIhXG4iKTsKIAkvKiBTYW5pdHkgY2hlY2sgKi8KQEAgLTEwNywyNiArMTczLDM2IEBACiAJaWYgKHZhci0+dm1vZGUgJiBGQl9WTU9ERV9JTlRFUkxBQ0VEIHx8IHZhci0+dm1vZGUgJiBGQl9WTU9ERV9ET1VCTEUpCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jdm1vZGVfaW5kZXggPSB2aWFmYl9nZXRfbW9kZV9pbmRleCh2YXItPnhyZXMsIHZhci0+eXJlcyk7Ci0JaWYgKHZtb2RlX2luZGV4ID09IFZJQV9SRVNfSU5WQUxJRCkgeworCXZtb2RlX2VudHJ5ID0gdmlhZmJfZ2V0X21vZGUodmFyLT54cmVzLCB2YXItPnlyZXMpOworCWlmICghdm1vZGVfZW50cnkpIHsKIAkJREVCVUdfTVNHKEtFUk5fSU5GTwogCQkJICAidmlhZmI6IE1vZGUgJWR4JWR4JWQgbm90IHN1cHBvcnRlZCEhXG4iLAogCQkJICB2YXItPnhyZXMsIHZhci0+eXJlcywgdmFyLT5iaXRzX3Blcl9waXhlbCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICgyNCA9PSB2YXItPmJpdHNfcGVyX3BpeGVsKQotCQl2YXItPmJpdHNfcGVyX3BpeGVsID0gMzI7CisJZGVwdGggPSBmYl9nZXRfY29sb3JfZGVwdGgodmFyLCAmaW5mby0+Zml4KTsKKwlpZiAoIWRlcHRoKQorCQlkZXB0aCA9IHZhci0+Yml0c19wZXJfcGl4ZWw7CiAKLQlpZiAodmFyLT5iaXRzX3Blcl9waXhlbCAhPSA4ICYmIHZhci0+Yml0c19wZXJfcGl4ZWwgIT0gMTYgJiYKLQkJdmFyLT5iaXRzX3Blcl9waXhlbCAhPSAzMikKKwlpZiAoZGVwdGggPCAwIHx8IGRlcHRoID4gMzIpCiAJCXJldHVybiAtRUlOVkFMOworCWVsc2UgaWYgKCFkZXB0aCkKKwkJZGVwdGggPSAyNDsKKwllbHNlIGlmIChkZXB0aCA9PSAxNSAmJiB2aWFmYl9kdWFsX2ZiICYmIHBwYXItPmlnYV9wYXRoID09IElHQTEpCisJCWRlcHRoID0gMTU7CisJZWxzZSBpZiAoZGVwdGggPT0gMzApCisJCWRlcHRoID0gMzA7CisJZWxzZSBpZiAoZGVwdGggPD0gOCkKKwkJZGVwdGggPSA4OworCWVsc2UgaWYgKGRlcHRoIDw9IDE2KQorCQlkZXB0aCA9IDE2OworCWVsc2UKKwkJZGVwdGggPSAyNDsKIAotCWlmICgodmFyLT54cmVzX3ZpcnR1YWwgKiAodmFyLT5iaXRzX3Blcl9waXhlbCA+PiAzKSkgJiAweDFGKQotCQkvKjMyIHBpeGVsIGFsaWdubWVudCAqLwotCQl2YXItPnhyZXNfdmlydHVhbCA9ICh2YXItPnhyZXNfdmlydHVhbCArIDMxKSAmIH4zMTsKLQlpZiAodmFyLT54cmVzX3ZpcnR1YWwgKiB2YXItPnlyZXNfdmlydHVhbCAqIHZhci0+Yml0c19wZXJfcGl4ZWwgLyA4ID4KLQkJcHBhci0+bWVtc2l6ZSkKKwl2aWFmYl9maWxsX3Zhcl9jb2xvcl9pbmZvKHZhciwgZGVwdGgpOworCWxpbmUgPSAodmFyLT54cmVzX3ZpcnR1YWwgKiB2YXItPmJpdHNfcGVyX3BpeGVsIC8gOCArIDcpICYgfjc7CisJaWYgKGxpbmUgKiB2YXItPnlyZXNfdmlydHVhbCA+IHBwYXItPm1lbXNpemUpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogQmFzZWQgb24gdmFyIHBhc3NlZCBpbiB0byBjYWxjdWxhdGUgdGhlIHJlZnJlc2gsCkBAIC0xNDIsNyArMjE4LDcgQEAKIAl2aWFmYl9yZWZyZXNoID0gdmlhZmJfZ2V0X3JlZnJlc2godmFyLT54cmVzLCB2YXItPnlyZXMsIGxvbmdfcmVmcmVzaCk7CiAKIAkvKiBBZGp1c3QgdmFyIGFjY29yZGluZyB0byBvdXIgZHJpdmVyJ3Mgb3duIHRhYmxlICovCi0JdmlhZmJfZmlsbF92YXJfdGltaW5nX2luZm8odmFyLCB2aWFmYl9yZWZyZXNoLCB2bW9kZV9pbmRleCk7CisJdmlhZmJfZmlsbF92YXJfdGltaW5nX2luZm8odmFyLCB2aWFmYl9yZWZyZXNoLCB2bW9kZV9lbnRyeSk7CiAJaWYgKGluZm8tPnZhci5hY2NlbF9mbGFncyAmIEZCX0FDQ0VMRl9URVhUICYmCiAJCSFwcGFyLT5zaGFyZWQtPmVuZ2luZV9tbWlvKQogCQlpbmZvLT52YXIuYWNjZWxfZmxhZ3MgPSAwOwpAQCAtMTUzLDM5ICsyMjksNDUgQEAKIHN0YXRpYyBpbnQgdmlhZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgdmlhZmJfcGFyICp2aWFwYXIgPSBpbmZvLT5wYXI7Ci0JaW50IHZtb2RlX2luZGV4OwotCWludCB2bW9kZV9pbmRleDEgPSAwOworCXN0cnVjdCBWaWRlb01vZGVUYWJsZSAqdm1vZGVfZW50cnksICp2bW9kZV9lbnRyeTEgPSBOVUxMOwogCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3NldF9wYXIhXG4iKTsKIAogCXZpYXBhci0+ZGVwdGggPSBmYl9nZXRfY29sb3JfZGVwdGgoJmluZm8tPnZhciwgJmluZm8tPmZpeCk7Ci0JdmlhZmJfdXBkYXRlX2RldmljZV9zZXR0aW5nKGluZm8tPnZhci54cmVzLCBpbmZvLT52YXIueXJlcywKLQkJCSAgICAgIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCwgdmlhZmJfcmVmcmVzaCwgMCk7CisJdmlhZmJfdXBkYXRlX2RldmljZV9zZXR0aW5nKHZpYWZiaW5mby0+dmFyLnhyZXMsIHZpYWZiaW5mby0+dmFyLnlyZXMsCisJCXZpYWZiaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsLCB2aWFmYl9yZWZyZXNoLCAwKTsKIAotCXZtb2RlX2luZGV4ID0gdmlhZmJfZ2V0X21vZGVfaW5kZXgoaW5mby0+dmFyLnhyZXMsIGluZm8tPnZhci55cmVzKTsKLQotCWlmICh2aWFmYl9TQU1NX09OID09IDEpIHsKKwl2bW9kZV9lbnRyeSA9IHZpYWZiX2dldF9tb2RlKHZpYWZiaW5mby0+dmFyLnhyZXMsIHZpYWZiaW5mby0+dmFyLnlyZXMpOworCWlmICh2aWFmYl9kdWFsX2ZiKSB7CisJCXZtb2RlX2VudHJ5MSA9IHZpYWZiX2dldF9tb2RlKHZpYWZiaW5mbzEtPnZhci54cmVzLAorCQkJdmlhZmJpbmZvMS0+dmFyLnlyZXMpOworCQl2aWFmYl91cGRhdGVfZGV2aWNlX3NldHRpbmcodmlhZmJpbmZvMS0+dmFyLnhyZXMsCisJCQl2aWFmYmluZm8xLT52YXIueXJlcywgdmlhZmJpbmZvMS0+dmFyLmJpdHNfcGVyX3BpeGVsLAorCQkJdmlhZmJfcmVmcmVzaDEsIDEpOworCX0gZWxzZSBpZiAodmlhZmJfU0FNTV9PTiA9PSAxKSB7CiAJCURFQlVHX01TRyhLRVJOX0lORk8KIAkJInZpYWZiX3NlY29uZF94cmVzID0gJWQsIHZpYWZiX3NlY29uZF95cmVzID0gJWQsIGJwcCA9ICVkXG4iLAogCQkJICB2aWFmYl9zZWNvbmRfeHJlcywgdmlhZmJfc2Vjb25kX3lyZXMsIHZpYWZiX2JwcDEpOwotCQl2bW9kZV9pbmRleDEgPSB2aWFmYl9nZXRfbW9kZV9pbmRleCh2aWFmYl9zZWNvbmRfeHJlcywKKwkJdm1vZGVfZW50cnkxID0gdmlhZmJfZ2V0X21vZGUodmlhZmJfc2Vjb25kX3hyZXMsCiAJCQl2aWFmYl9zZWNvbmRfeXJlcyk7Ci0JCURFQlVHX01TRyhLRVJOX0lORk8gIi0+dmlhZmJfU0FNTV9PTjogaW5kZXg9JWRcbiIsCi0JCQl2bW9kZV9pbmRleDEpOwogCiAJCXZpYWZiX3VwZGF0ZV9kZXZpY2Vfc2V0dGluZyh2aWFmYl9zZWNvbmRfeHJlcywKIAkJCXZpYWZiX3NlY29uZF95cmVzLCB2aWFmYl9icHAxLCB2aWFmYl9yZWZyZXNoMSwgMSk7CiAJfQogCi0JaWYgKHZtb2RlX2luZGV4ICE9IFZJQV9SRVNfSU5WQUxJRCkgeworCWlmICh2bW9kZV9lbnRyeSkgewogCQl2aWFmYl91cGRhdGVfZml4KGluZm8pOwotCQl2aWFmYl9icHAgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWw7CisJCWlmICh2aWFmYl9kdWFsX2ZiICYmIHZpYXBhci0+aWdhX3BhdGggPT0gSUdBMikKKwkJCXZpYWZiX2JwcDEgPSBpbmZvLT52YXIuYml0c19wZXJfcGl4ZWw7CisJCWVsc2UKKwkJCXZpYWZiX2JwcCA9IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbDsKKwogCQlpZiAoaW5mby0+dmFyLmFjY2VsX2ZsYWdzICYgRkJfQUNDRUxGX1RFWFQpCiAJCQlpbmZvLT5mbGFncyAmPSB+RkJJTkZPX0hXQUNDRUxfRElTQUJMRUQ7CiAJCWVsc2UKIAkJCWluZm8tPmZsYWdzIHw9IEZCSU5GT19IV0FDQ0VMX0RJU0FCTEVEOwotCQl2aWFmYl9zZXRtb2RlKHZtb2RlX2luZGV4LCBpbmZvLT52YXIueHJlcywgaW5mby0+dmFyLnlyZXMsCi0JCQlpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwsIHZtb2RlX2luZGV4MSwKLQkJCXZpYWZiX3NlY29uZF94cmVzLCB2aWFmYl9zZWNvbmRfeXJlcywgdmlhZmJfYnBwMSk7CisJCXZpYWZiX3NldG1vZGUodm1vZGVfZW50cnksIGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCwKKwkJCXZtb2RlX2VudHJ5MSwgdmlhZmJfYnBwMSk7CisJCXZpYWZiX3Bhbl9kaXNwbGF5KCZpbmZvLT52YXIsIGluZm8pOwogCX0KIAogCXJldHVybiAwOwpAQCAtMTk1LDIzNCArMjc3LDUyIEBACiBzdGF0aWMgaW50IHZpYWZiX3NldGNvbHJlZyh1bnNpZ25lZCByZWdubywgdW5zaWduZWQgcmVkLCB1bnNpZ25lZCBncmVlbiwKIHVuc2lnbmVkIGJsdWUsIHVuc2lnbmVkIHRyYW5zcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCiB7Ci0JdTggc3IxYSwgc3IxYiwgY3I2NywgY3I2YSwgcmV2ID0gMCwgc2hpZnQgPSAxMDsKLQl1bnNpZ25lZCBjbWFwX2VudHJpZXMgPSAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsID09IDgpID8gMjU2IDogMTY7Ci0JREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfc2V0Y29scmVnIVxuIik7Ci0JaWYgKHJlZ25vID49IGNtYXBfZW50cmllcykKLQkJcmV0dXJuIDE7Ci0JaWYgKFVOSUNIUk9NRV9DTEUyNjYgPT0gdmlhcGFyaW5mby0+Y2hpcF9pbmZvLT5nZnhfY2hpcF9uYW1lKSB7Ci0JCS8qCi0JCSAqIFJlYWQgUENJIGJ1cyAwLGRldiAwLGZ1bmN0aW9uIDAsaW5kZXggMHhGNiB0byBnZXQgY2hpcCByZXYuCi0JCSAqLwotCQlvdXRsKDB4ODAwMDAwMDAgfCAoMHhmNiAmIH4zKSwgKHVuc2lnbmVkIGxvbmcpMHhDRjgpOwotCQlyZXYgPSAoaW5sKCh1bnNpZ25lZCBsb25nKTB4Q0ZDKSA+PiAoKDB4ZjYgJiAzKSAqIDgpKSAmIDB4ZmY7Ci0JfQotCXN3aXRjaCAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSB7Ci0JY2FzZSA4OgotCQlvdXRiKDB4MUEsIDB4M0M0KTsKLQkJc3IxYSA9IGluYigweDNDNSk7Ci0JCW91dGIoMHgxQiwgMHgzQzQpOwotCQlzcjFiID0gaW5iKDB4M0M1KTsKLQkJb3V0YigweDY3LCAweDNENCk7Ci0JCWNyNjcgPSBpbmIoMHgzRDUpOwotCQlvdXRiKDB4NkEsIDB4M0Q0KTsKLQkJY3I2YSA9IGluYigweDNENSk7CisJc3RydWN0IHZpYWZiX3BhciAqdmlhcGFyID0gaW5mby0+cGFyOworCXUzMiByLCBnLCBiOwogCi0JCS8qIE1hcCB0aGUgM0M2LzcvOC85IHRvIHRoZSBJR0EyICovCi0JCW91dGIoMHgxQSwgMHgzQzQpOwotCQlvdXRiKHNyMWEgfCAweDAxLCAweDNDNSk7Ci0JCS8qIFNlY29uZCBEaXNwbGF5IEVuZ2luZSBjb2xjayBhbHdheXMgb24gKi8KLQkJb3V0YigweDFCLCAweDNDNCk7Ci0JCW91dGIoc3IxYiB8IDB4ODAsIDB4M0M1KTsKLQkJLyogU2Vjb25kIERpc3BsYXkgQ29sb3IgRGVwdGggOCAqLwotCQlvdXRiKDB4NjcsIDB4M0Q0KTsKLQkJb3V0YihjcjY3ICYgMHgzRiwgMHgzRDUpOwotCQlvdXRiKDB4NkEsIDB4M0Q0KTsKLQkJLyogU2Vjb25kIERpc3BsYXkgQ2hhbm5lbCBSZXNldCBDUjZBWzZdKSAqLwotCQlvdXRiKGNyNmEgJiAweEJGLCAweDNENSk7Ci0JCS8qIFNlY29uZCBEaXNwbGF5IENoYW5uZWwgRW5hYmxlIENSNkFbN10gKi8KLQkJb3V0YihjcjZhIHwgMHg4MCwgMHgzRDUpOwotCQkvKiBTZWNvbmQgRGlzcGxheSBDaGFubmVsIHN0b3AgcmVzZXQpICovCi0JCW91dGIoY3I2YSB8IDB4NDAsIDB4M0Q1KTsKKwlpZiAoaW5mby0+Zml4LnZpc3VhbCA9PSBGQl9WSVNVQUxfUFNFVURPQ09MT1IpIHsKKwkJaWYgKHJlZ25vID4gMjU1KQorCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJLyogQml0IG1hc2sgb2YgcGFsZXR0ZSAqLwotCQlvdXRiKDB4RkYsIDB4M2M2KTsKLQkJLyogV3JpdGUgb25lIHJlZ2lzdGVyIG9mIElHQTIgKi8KLQkJb3V0YihyZWdubywgMHgzQzgpOwotCQlpZiAoVU5JQ0hST01FX0NMRTI2NiA9PSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgJiYKLQkJCXJldiA+PSAxNSkgewotCQkJc2hpZnQgPSA4OwotCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIEJJVDUsIEJJVDUpOwotCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxNSwgVklBU1IsIEJJVDcsIEJJVDcpOwotCQl9IGVsc2UgewotCQkJc2hpZnQgPSAxMDsKLQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAwLCBCSVQ1KTsKLQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMTUsIFZJQVNSLCAwLCBCSVQ3KTsKLQkJfQotCQlvdXRiKHJlZCA+PiBzaGlmdCwgMHgzQzkpOwotCQlvdXRiKGdyZWVuID4+IHNoaWZ0LCAweDNDOSk7Ci0JCW91dGIoYmx1ZSA+PiBzaGlmdCwgMHgzQzkpOworCQlpZiAoIXZpYWZiX2R1YWxfZmIgfHwgdmlhcGFyLT5pZ2FfcGF0aCA9PSBJR0ExKQorCQkJdmlhZmJfc2V0X3ByaW1hcnlfY29sb3JfcmVnaXN0ZXIocmVnbm8sIHJlZCA+PiA4LAorCQkJCWdyZWVuID4+IDgsIGJsdWUgPj4gOCk7CiAKLQkJLyogTWFwIHRoZSAzQzYvNy84LzkgdG8gdGhlIElHQTEgKi8KLQkJb3V0YigweDFBLCAweDNDNCk7Ci0JCW91dGIoc3IxYSAmIDB4RkUsIDB4M0M1KTsKLQkJLyogQml0IG1hc2sgb2YgcGFsZXR0ZSAqLwotCQlvdXRiKDB4RkYsIDB4M2M2KTsKLQkJLyogV3JpdGUgb25lIHJlZ2lzdGVyIG9mIElHQTEgKi8KLQkJb3V0YihyZWdubywgMHgzQzgpOwotCQlvdXRiKHJlZCA+PiBzaGlmdCwgMHgzQzkpOwotCQlvdXRiKGdyZWVuID4+IHNoaWZ0LCAweDNDOSk7Ci0JCW91dGIoYmx1ZSA+PiBzaGlmdCwgMHgzQzkpOworCQlpZiAoIXZpYWZiX2R1YWxfZmIgfHwgdmlhcGFyLT5pZ2FfcGF0aCA9PSBJR0EyKQorCQkJdmlhZmJfc2V0X3NlY29uZGFyeV9jb2xvcl9yZWdpc3RlcihyZWdubywgcmVkID4+IDgsCisJCQkJZ3JlZW4gPj4gOCwgYmx1ZSA+PiA4KTsKKwl9IGVsc2UgeworCQlpZiAocmVnbm8gPiAxNSkKKwkJCXJldHVybiAtRUlOVkFMOwogCi0JCW91dGIoMHgxQSwgMHgzQzQpOwotCQlvdXRiKHNyMWEsIDB4M0M1KTsKLQkJb3V0YigweDFCLCAweDNDNCk7Ci0JCW91dGIoc3IxYiwgMHgzQzUpOwotCQlvdXRiKDB4NjcsIDB4M0Q0KTsKLQkJb3V0YihjcjY3LCAweDNENSk7Ci0JCW91dGIoMHg2QSwgMHgzRDQpOwotCQlvdXRiKGNyNmEsIDB4M0Q1KTsKLQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQkJKCh1MzIgKikgaW5mby0+cHNldWRvX3BhbGV0dGUpW3JlZ25vXSA9IChyZWQgJiAweEY4MDApIHwKLQkJICAgICgoZ3JlZW4gJiAweEZDMDApID4+IDUpIHwgKChibHVlICYgMHhGODAwKSA+PiAxMSk7Ci0JCWJyZWFrOwotCWNhc2UgMzI6Ci0JCSgodTMyICopIGluZm8tPnBzZXVkb19wYWxldHRlKVtyZWdub10gPQotCQkgICAgKCh0cmFuc3AgJiAweEZGMDApIDw8IDE2KSB8Ci0JCSAgICAoKHJlZCAmIDB4RkYwMCkgPDwgOCkgfAotCQkgICAgKChncmVlbiAmIDB4RkYwMCkpIHwgKChibHVlICYgMHhGRjAwKSA+PiA4KTsKLQkJYnJlYWs7CisJCXIgPSAocmVkID4+ICgxNiAtIGluZm8tPnZhci5yZWQubGVuZ3RoKSkKKwkJCTw8IGluZm8tPnZhci5yZWQub2Zmc2V0OworCQliID0gKGJsdWUgPj4gKDE2IC0gaW5mby0+dmFyLmJsdWUubGVuZ3RoKSkKKwkJCTw8IGluZm8tPnZhci5ibHVlLm9mZnNldDsKKwkJZyA9IChncmVlbiA+PiAoMTYgLSBpbmZvLT52YXIuZ3JlZW4ubGVuZ3RoKSkKKwkJCTw8IGluZm8tPnZhci5ncmVlbi5vZmZzZXQ7CisJCSgodTMyICopIGluZm8tPnBzZXVkb19wYWxldHRlKVtyZWdub10gPSByIHwgZyB8IGI7CiAJfQogCiAJcmV0dXJuIDA7Ci0KLX0KLQotLypDQUxMRUQgQlk6IGZiX3NldF9jbWFwICovCi0vKiAgICAgICAgICAgZmJfc2V0X3ZhciwgcGFzcyAyNTYgY29sb3JzICovCi0vKkNBTExFRCBCWTogZmJfc2V0X2NtYXAgKi8KLS8qICAgICAgICAgICBmYmNvbl9zZXRfcGFsZXR0ZSwgcGFzcyAxNiBjb2xvcnMgKi8KLXN0YXRpYyBpbnQgdmlhZmJfc2V0Y21hcChzdHJ1Y3QgZmJfY21hcCAqY21hcCwgc3RydWN0IGZiX2luZm8gKmluZm8pCi17Ci0JdTMyIGxlbiA9IGNtYXAtPmxlbjsKLQl1MzIgaTsKLQl1MTYgKnByZWQgPSBjbWFwLT5yZWQ7Ci0JdTE2ICpwZ3JlZW4gPSBjbWFwLT5ncmVlbjsKLQl1MTYgKnBibHVlID0gY21hcC0+Ymx1ZTsKLQl1MTYgKnB0cmFuc3AgPSBjbWFwLT50cmFuc3A7Ci0JdTggc3IxYSwgc3IxYiwgY3I2NywgY3I2YSwgcmV2ID0gMCwgc2hpZnQgPSAxMDsKLQlpZiAobGVuID4gMjU2KQotCQlyZXR1cm4gMTsKLQlpZiAoVU5JQ0hST01FX0NMRTI2NiA9PSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUpIHsKLQkJLyoKLQkJICogUmVhZCBQQ0kgYnVzIDAsIGRldiAwLCBmdW5jdGlvbiAwLCBpbmRleCAweEY2IHRvIGdldCBjaGlwCi0JCSAqIHJldi4KLQkJICovCi0JCW91dGwoMHg4MDAwMDAwMCB8ICgweGY2ICYgfjMpLCAodW5zaWduZWQgbG9uZykweENGOCk7Ci0JCXJldiA9IChpbmwoKHVuc2lnbmVkIGxvbmcpMHhDRkMpID4+ICgoMHhmNiAmIDMpICogOCkpICYgMHhmZjsKLQl9Ci0Jc3dpdGNoIChpbmZvLT52YXIuYml0c19wZXJfcGl4ZWwpIHsKLQljYXNlIDg6Ci0JCW91dGIoMHgxQSwgMHgzQzQpOwotCQlzcjFhID0gaW5iKDB4M0M1KTsKLQkJb3V0YigweDFCLCAweDNDNCk7Ci0JCXNyMWIgPSBpbmIoMHgzQzUpOwotCQlvdXRiKDB4NjcsIDB4M0Q0KTsKLQkJY3I2NyA9IGluYigweDNENSk7Ci0JCW91dGIoMHg2QSwgMHgzRDQpOwotCQljcjZhID0gaW5iKDB4M0Q1KTsKLQkJLyogTWFwIHRoZSAzQzYvNy84LzkgdG8gdGhlIElHQTIgKi8KLQkJb3V0YigweDFBLCAweDNDNCk7Ci0JCW91dGIoc3IxYSB8IDB4MDEsIDB4M0M1KTsKLQkJb3V0YigweDFCLCAweDNDNCk7Ci0JCS8qIFNlY29uZCBEaXNwbGF5IEVuZ2luZSBjb2xjayBhbHdheXMgb24gKi8KLQkJb3V0YihzcjFiIHwgMHg4MCwgMHgzQzUpOwotCQlvdXRiKDB4NjcsIDB4M0Q0KTsKLQkJLyogU2Vjb25kIERpc3BsYXkgQ29sb3IgRGVwdGggOCAqLwotCQlvdXRiKGNyNjcgJiAweDNGLCAweDNENSk7Ci0JCW91dGIoMHg2QSwgMHgzRDQpOwotCQkvKiBTZWNvbmQgRGlzcGxheSBDaGFubmVsIFJlc2V0IENSNkFbNl0pICovCi0JCW91dGIoY3I2YSAmIDB4QkYsIDB4M0Q1KTsKLQkJLyogU2Vjb25kIERpc3BsYXkgQ2hhbm5lbCBFbmFibGUgQ1I2QVs3XSAqLwotCQlvdXRiKGNyNmEgfCAweDgwLCAweDNENSk7Ci0JCS8qIFNlY29uZCBEaXNwbGF5IENoYW5uZWwgc3RvcCByZXNldCkgKi8KLQkJb3V0YihjcjZhIHwgMHhDMCwgMHgzRDUpOwotCi0JCS8qIEJpdCBtYXNrIG9mIHBhbGV0dGUgKi8KLQkJb3V0YigweEZGLCAweDNjNik7Ci0JCW91dGIoMHgwMCwgMHgzQzgpOwotCQlpZiAoVU5JQ0hST01FX0NMRTI2NiA9PSB2aWFwYXJpbmZvLT5jaGlwX2luZm8tPmdmeF9jaGlwX25hbWUgJiYKLQkJCXJldiA+PSAxNSkgewotCQkJc2hpZnQgPSA4OwotCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soQ1I2QSwgVklBQ1IsIEJJVDUsIEJJVDUpOwotCQkJdmlhZmJfd3JpdGVfcmVnX21hc2soU1IxNSwgVklBU1IsIEJJVDcsIEJJVDcpOwotCQl9IGVsc2UgewotCQkJc2hpZnQgPSAxMDsKLQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKENSNkEsIFZJQUNSLCAwLCBCSVQ1KTsKLQkJCXZpYWZiX3dyaXRlX3JlZ19tYXNrKFNSMTUsIFZJQVNSLCAwLCBCSVQ3KTsKLQkJfQotCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJCW91dGIoKCoocHJlZCArIGkpKSA+PiBzaGlmdCwgMHgzQzkpOwotCQkJb3V0YigoKihwZ3JlZW4gKyBpKSkgPj4gc2hpZnQsIDB4M0M5KTsKLQkJCW91dGIoKCoocGJsdWUgKyBpKSkgPj4gc2hpZnQsIDB4M0M5KTsKLQkJfQotCi0JCW91dGIoMHgxQSwgMHgzQzQpOwotCQkvKiBNYXAgdGhlIDNDNi83LzgvOSB0byB0aGUgSUdBMSAqLwotCQlvdXRiKHNyMWEgJiAweEZFLCAweDNDNSk7Ci0JCS8qIEJpdCBtYXNrIG9mIHBhbGV0dGUgKi8KLQkJb3V0YigweEZGLCAweDNjNik7Ci0JCW91dGIoMHgwMCwgMHgzQzgpOwotCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJCW91dGIoKCoocHJlZCArIGkpKSA+PiBzaGlmdCwgMHgzQzkpOwotCQkJb3V0YigoKihwZ3JlZW4gKyBpKSkgPj4gc2hpZnQsIDB4M0M5KTsKLQkJCW91dGIoKCoocGJsdWUgKyBpKSkgPj4gc2hpZnQsIDB4M0M5KTsKLQkJfQotCi0JCW91dGIoMHgxQSwgMHgzQzQpOwotCQlvdXRiKHNyMWEsIDB4M0M1KTsKLQkJb3V0YigweDFCLCAweDNDNCk7Ci0JCW91dGIoc3IxYiwgMHgzQzUpOwotCQlvdXRiKDB4NjcsIDB4M0Q0KTsKLQkJb3V0YihjcjY3LCAweDNENSk7Ci0JCW91dGIoMHg2QSwgMHgzRDQpOwotCQlvdXRiKGNyNmEsIDB4M0Q1KTsKLQkJYnJlYWs7Ci0JY2FzZSAxNjoKLQkJaWYgKGxlbiA+IDE3KQotCQkJcmV0dXJuIDA7CS8qIEJlY2F1c2Ugc3RhdGljIHUzMiBwc2V1ZG9fcGFsWzE3XTsgKi8KLQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQkJKCh1MzIgKikgaW5mby0+cHNldWRvX3BhbGV0dGUpW2ldID0KLQkJCSAgICAoKihwcmVkICsgaSkgJiAweEY4MDApIHwKLQkJCSAgICAoKCoocGdyZWVuICsgaSkgJiAweEZDMDApID4+IDUpIHwKLQkJCSAgICAoKCoocGJsdWUgKyBpKSAmIDB4RjgwMCkgPj4gMTEpOwotCQlicmVhazsKLQljYXNlIDMyOgotCQlpZiAobGVuID4gMTcpCi0JCQlyZXR1cm4gMDsKLQkJaWYgKHB0cmFuc3ApIHsKLQkJCWZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKLQkJCQkoKHUzMiAqKSBpbmZvLT5wc2V1ZG9fcGFsZXR0ZSlbaV0gPQotCQkJCSAgICAoKCoocHRyYW5zcCArIGkpICYgMHhGRjAwKSA8PCAxNikgfAotCQkJCSAgICAoKCoocHJlZCArIGkpICYgMHhGRjAwKSA8PCA4KSB8Ci0JCQkJICAgICgoKihwZ3JlZW4gKyBpKSAmIDB4RkYwMCkpIHwKLQkJCQkgICAgKCgqKHBibHVlICsgaSkgJiAweEZGMDApID4+IDgpOwotCQl9IGVsc2UgewotCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKQotCQkJCSgodTMyICopIGluZm8tPnBzZXVkb19wYWxldHRlKVtpXSA9Ci0JCQkJICAgIDB4MDAwMDAwMDAgfAotCQkJCSAgICAoKCoocHJlZCArIGkpICYgMHhGRjAwKSA8PCA4KSB8Ci0JCQkJICAgICgoKihwZ3JlZW4gKyBpKSAmIDB4RkYwMCkpIHwKLQkJCQkgICAgKCgqKHBibHVlICsgaSkgJiAweEZGMDApID4+IDgpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWFmYl9wYW5fZGlzcGxheShzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbykKIHsKLQl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCXN0cnVjdCB2aWFmYl9wYXIgKnZpYXBhciA9IGluZm8tPnBhcjsKKwl1MzIgdnJhbV9hZGRyID0gKHZhci0+eW9mZnNldCAqIHZhci0+eHJlc192aXJ0dWFsICsgdmFyLT54b2Zmc2V0KQorCQkqICh2YXItPmJpdHNfcGVyX3BpeGVsIC8gOCkgKyB2aWFwYXItPnZyYW1fYWRkcjsKIAotCURFQlVHX01TRyhLRVJOX0lORk8gInZpYWZiX3Bhbl9kaXNwbGF5IVxuIik7CisJREVCVUdfTVNHKEtFUk5fREVCVUcgInZpYWZiX3Bhbl9kaXNwbGF5LCBhZGRyZXNzID0gJWRcbiIsIHZyYW1fYWRkcik7CisJaWYgKCF2aWFmYl9kdWFsX2ZiKSB7CisJCXZpYWZiX3NldF9wcmltYXJ5X2FkZHJlc3ModnJhbV9hZGRyKTsKKwkJdmlhZmJfc2V0X3NlY29uZGFyeV9hZGRyZXNzKHZyYW1fYWRkcik7CisJfSBlbHNlIGlmICh2aWFwYXItPmlnYV9wYXRoID09IElHQTEpCisJCXZpYWZiX3NldF9wcmltYXJ5X2FkZHJlc3ModnJhbV9hZGRyKTsKKwllbHNlCisJCXZpYWZiX3NldF9zZWNvbmRhcnlfYWRkcmVzcyh2cmFtX2FkZHIpOwogCi0Jb2Zmc2V0ID0gKHZhci0+eG9mZnNldCArICh2YXItPnlvZmZzZXQgKiB2YXItPnhyZXNfdmlydHVhbCkpICoKLQkgICAgdmFyLT5iaXRzX3Blcl9waXhlbCAvIDE2OwotCi0JREVCVUdfTVNHKEtFUk5fSU5GTyAiXG52aWFmYl9wYW5fZGlzcGxheSxvZmZzZXQgPSVkICIsIG9mZnNldCk7Ci0JdmlhZmJfc2V0X3ByaW1hcnlfYWRkcmVzcyhvZmZzZXQpOwogCXJldHVybiAwOwogfQogCkBAIC00NzYsNiArMzc2LDcgQEAKIAl1MzIgZ3B1MzI7CiAKIAlERUJVR19NU0coS0VSTl9JTkZPICJ2aWFmYl9pb2N0bDogMHglWCAhIVxuIiwgY21kKTsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJ2aWFmYl9pb2N0bDogUGxlYXNlIGF2b2lkIHRoaXMgaW50ZXJmYWNlIGFzIGl0IGlzIHVuc3RhYmxlIGFuZCBtaWdodCBjaGFuZ2Ugb3IgdmFuaXNoIGF0IGFueSB0aW1lIVxuIik7CiAJbWVtc2V0KCZ1LCAwLCBzaXplb2YodSkpOwogCiAJc3dpdGNoIChjbWQpIHsKQEAgLTEwMTUsMjMgKzkxNiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCB2aWFmYl9nZXRfbW9kZV9pbmRleChpbnQgaHJlcywgaW50IHZyZXMpCi17Ci0JdTMyIGk7Ci0JREVCVUdfTVNHKEtFUk5fSU5GTyAidmlhZmJfZ2V0X21vZGVfaW5kZXghXG4iKTsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1fVE9UQUxfTU9ERVRBQkxFOyBpKyspCi0JCWlmIChDTEUyNjZNb2Rlc1tpXS5tb2RlX2FycmF5ICYmCi0JCQlDTEUyNjZNb2Rlc1tpXS5jcnRjWzBdLmNydGMuaG9yX2FkZHIgPT0gaHJlcyAmJgotCQkJQ0xFMjY2TW9kZXNbaV0uY3J0Y1swXS5jcnRjLnZlcl9hZGRyID09IHZyZXMpCi0JCQlicmVhazsKLQotCWlmIChpID09IE5VTV9UT1RBTF9NT0RFVEFCTEUpCi0JCXJldHVybiBWSUFfUkVTX0lOVkFMSUQ7Ci0KLQlyZXR1cm4gQ0xFMjY2TW9kZXNbaV0uTW9kZUluZGV4OwotfQotCiBzdGF0aWMgdm9pZCBjaGVja19hdmFpbGFibGVfZGV2aWNlX3RvX2VuYWJsZShpbnQgZGV2aWNlX2lkKQogewogCWludCBkZXZpY2VfbnVtID0gMDsKQEAgLTEzMzAsNyArMTIxNCw3IEBACiAJc2V0dGluZ19pbmZvLT5sY2RfYXR0cmlidXRlcy5sY2RfbW9kZSA9IHZpYWZiX2xjZF9tb2RlOwogfQogCi1zdGF0aWMgdm9pZCBwYXJzZV9hY3RpdmVfZGV2KHZvaWQpCitzdGF0aWMgaW50IHBhcnNlX2FjdGl2ZV9kZXYodm9pZCkKIHsKIAl2aWFmYl9DUlRfT04gPSBTVEFURV9PRkY7CiAJdmlhZmJfRFZJX09OID0gU1RBVEVfT0ZGOwpAQCAtMTM0MSw2MCArMTIyNSw2MyBAQAogCSAgIElHQSBwYXRoIHRvIGRldmljZXMgaW4gU0FNTSBjYXNlLiAqLwogCS8qICAgIE5vdGU6IFRoZSBwcmV2aW91cyBvZiBhY3RpdmVfZGV2IGlzIHByaW1hcnkgZGV2aWNlLAogCSAgIGFuZCB0aGUgZm9sbG93aW5nIGlzIHNlY29uZGFyeSBkZXZpY2UuICovCi0JaWYgKCFzdHJuY21wKHZpYWZiX2FjdGl2ZV9kZXYsICJDUlQrRFZJIiwgNykpIHsKKwlpZiAoIXZpYWZiX2FjdGl2ZV9kZXYpIHsKKwkJdmlhZmJfQ1JUX09OID0gU1RBVEVfT047CisJCXZpYWZiX1NBTU1fT04gPSBTVEFURV9PRkY7CisJfSBlbHNlIGlmICghc3RyY21wKHZpYWZiX2FjdGl2ZV9kZXYsICJDUlQrRFZJIikpIHsKIAkJLyogQ1JUK0RWSSAqLwogCQl2aWFmYl9DUlRfT04gPSBTVEFURV9PTjsKIAkJdmlhZmJfRFZJX09OID0gU1RBVEVfT047CiAJCXZpYWZiX3ByaW1hcnlfZGV2ID0gQ1JUX0RldmljZTsKLQl9IGVsc2UgaWYgKCFzdHJuY21wKHZpYWZiX2FjdGl2ZV9kZXYsICJEVkkrQ1JUIiwgNykpIHsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodmlhZmJfYWN0aXZlX2RldiwgIkRWSStDUlQiKSkgewogCQkvKiBEVkkrQ1JUICovCiAJCXZpYWZiX0NSVF9PTiA9IFNUQVRFX09OOwogCQl2aWFmYl9EVklfT04gPSBTVEFURV9PTjsKIAkJdmlhZmJfcHJpbWFyeV9kZXYgPSBEVklfRGV2aWNlOwotCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkNSVCtMQ0QiLCA3KSkgeworCX0gZWxzZSBpZiAoIXN0cmNtcCh2aWFmYl9hY3RpdmVfZGV2LCAiQ1JUK0xDRCIpKSB7CiAJCS8qIENSVCtMQ0QgKi8KIAkJdmlhZmJfQ1JUX09OID0gU1RBVEVfT047CiAJCXZpYWZiX0xDRF9PTiA9IFNUQVRFX09OOwogCQl2aWFmYl9wcmltYXJ5X2RldiA9IENSVF9EZXZpY2U7Ci0JfSBlbHNlIGlmICghc3RybmNtcCh2aWFmYl9hY3RpdmVfZGV2LCAiTENEK0NSVCIsIDcpKSB7CisJfSBlbHNlIGlmICghc3RyY21wKHZpYWZiX2FjdGl2ZV9kZXYsICJMQ0QrQ1JUIikpIHsKIAkJLyogTENEK0NSVCAqLwogCQl2aWFmYl9DUlRfT04gPSBTVEFURV9PTjsKIAkJdmlhZmJfTENEX09OID0gU1RBVEVfT047CiAJCXZpYWZiX3ByaW1hcnlfZGV2ID0gTENEX0RldmljZTsKLQl9IGVsc2UgaWYgKCFzdHJuY21wKHZpYWZiX2FjdGl2ZV9kZXYsICJEVkkrTENEIiwgNykpIHsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodmlhZmJfYWN0aXZlX2RldiwgIkRWSStMQ0QiKSkgewogCQkvKiBEVkkrTENEICovCiAJCXZpYWZiX0RWSV9PTiA9IFNUQVRFX09OOwogCQl2aWFmYl9MQ0RfT04gPSBTVEFURV9PTjsKIAkJdmlhZmJfcHJpbWFyeV9kZXYgPSBEVklfRGV2aWNlOwotCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkxDRCtEVkkiLCA3KSkgeworCX0gZWxzZSBpZiAoIXN0cmNtcCh2aWFmYl9hY3RpdmVfZGV2LCAiTENEK0RWSSIpKSB7CiAJCS8qIExDRCtEVkkgKi8KIAkJdmlhZmJfRFZJX09OID0gU1RBVEVfT047CiAJCXZpYWZiX0xDRF9PTiA9IFNUQVRFX09OOwogCQl2aWFmYl9wcmltYXJ5X2RldiA9IExDRF9EZXZpY2U7Ci0JfSBlbHNlIGlmICghc3RybmNtcCh2aWFmYl9hY3RpdmVfZGV2LCAiTENEK0xDRDIiLCA4KSkgeworCX0gZWxzZSBpZiAoIXN0cmNtcCh2aWFmYl9hY3RpdmVfZGV2LCAiTENEK0xDRDIiKSkgewogCQl2aWFmYl9MQ0RfT04gPSBTVEFURV9PTjsKIAkJdmlhZmJfTENEMl9PTiA9IFNUQVRFX09OOwogCQl2aWFmYl9wcmltYXJ5X2RldiA9IExDRF9EZXZpY2U7Ci0JfSBlbHNlIGlmICghc3RybmNtcCh2aWFmYl9hY3RpdmVfZGV2LCAiTENEMitMQ0QiLCA4KSkgeworCX0gZWxzZSBpZiAoIXN0cmNtcCh2aWFmYl9hY3RpdmVfZGV2LCAiTENEMitMQ0QiKSkgewogCQl2aWFmYl9MQ0RfT04gPSBTVEFURV9PTjsKIAkJdmlhZmJfTENEMl9PTiA9IFNUQVRFX09OOwogCQl2aWFmYl9wcmltYXJ5X2RldiA9IExDRDJfRGV2aWNlOwotCX0gZWxzZSBpZiAoIXN0cm5jbXAodmlhZmJfYWN0aXZlX2RldiwgIkNSVCIsIDMpKSB7CisJfSBlbHNlIGlmICghc3RyY21wKHZpYWZiX2FjdGl2ZV9kZXYsICJDUlQiKSkgewogCQkvKiBDUlQgb25seSAqLwogCQl2aWFmYl9DUlRfT04gPSBTVEFURV9PTjsKIAkJdmlhZmJfU0FNTV9PTiA9IFNUQVRFX09GRjsKLQl9IGVsc2UgaWYgKCFzdHJuY21wKHZpYWZiX2FjdGl2ZV9kZXYsICJEVkkiLCAzKSkgeworCX0gZWxzZSBpZiAoIXN0cmNtcCh2aWFmYl9hY3RpdmVfZGV2LCAiRFZJIikpIHsKIAkJLyogRFZJIG9ubHkgKi8KIAkJdmlhZmJfRFZJX09OID0gU1RBVEVfT047CiAJCXZpYWZiX1NBTU1fT04gPSBTVEFURV9PRkY7Ci0JfSBlbHNlIGlmICghc3RybmNtcCh2aWFmYl9hY3RpdmVfZGV2LCAiTENEIiwgMykpIHsKKwl9IGVsc2UgaWYgKCFzdHJjbXAodmlhZmJfYWN0aXZlX2RldiwgIkxDRCIpKSB7CiAJCS8qIExDRCBvbmx5ICovCiAJCXZpYWZiX0xDRF9PTiA9IFNUQVRFX09OOwogCQl2aWFmYl9TQU1NX09OID0gU1RBVEVfT0ZGOwotCX0gZWxzZSB7Ci0JCXZpYWZiX0NSVF9PTiA9IFNUQVRFX09OOwotCQl2aWFmYl9TQU1NX09OID0gU1RBVEVfT0ZGOwotCX0KKwl9IGVsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwYXJzZV9wb3J0KGNoYXIgKm9wdF9zdHIsIGludCAqb3V0cHV0X2ludGVyZmFjZSkKQEAgLTE4MjMsMzUgKzE3MTAsMzcgQEAKIAlyZW1vdmVfcHJvY19lbnRyeSgidmlhZmIiLCBOVUxMKTsKIH0KIAotc3RhdGljIHZvaWQgcGFyc2VfbW9kZShjb25zdCBjaGFyICpzdHIsIHUzMiAqeHJlcywgdTMyICp5cmVzKQorc3RhdGljIGludCBwYXJzZV9tb2RlKGNvbnN0IGNoYXIgKnN0ciwgdTMyICp4cmVzLCB1MzIgKnlyZXMpCiB7CiAJY2hhciAqcHRyOwogCisJaWYgKCFzdHIpIHsKKwkJKnhyZXMgPSA2NDA7CisJCSp5cmVzID0gNDgwOworCQlyZXR1cm4gMDsKKwl9CisKIAkqeHJlcyA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgJnB0ciwgMTApOwogCWlmIChwdHJbMF0gIT0gJ3gnKQotCQlnb3RvIG91dF9kZWZhdWx0OworCQlyZXR1cm4gLUVJTlZBTDsKIAogCSp5cmVzID0gc2ltcGxlX3N0cnRvdWwoJnB0clsxXSwgJnB0ciwgMTApOwogCWlmIChwdHJbMF0pCi0JCWdvdG8gb3V0X2RlZmF1bHQ7CisJCXJldHVybiAtRUlOVkFMOwogCi0JcmV0dXJuOwotCi1vdXRfZGVmYXVsdDoKLQlwcmludGsoS0VSTl9XQVJOSU5HICJ2aWFmYiByZWNlaXZlZCBpbnZhbGlkIG1vZGUgc3RyaW5nOiAlc1xuIiwgc3RyKTsKLQkqeHJlcyA9IDY0MDsKLQkqeXJlcyA9IDQ4MDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2RldmluaXQgdmlhX3BjaV9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCXUzMiBkZWZhdWx0X3hyZXMsIGRlZmF1bHRfeXJlczsKLQlpbnQgdm1vZGVfaW5kZXg7CisJc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2bW9kZV9lbnRyeTsKKwlzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gZGVmYXVsdF92YXI7CiAJdTMyIHZpYWZiX3Bhcl9sZW5ndGg7CiAKIAlERUJVR19NU0coS0VSTl9JTkZPICJWSUFGQiBQQ0kgUHJvYmUhIVxuIik7Ci0KKwltZW1zZXQoJmRlZmF1bHRfdmFyLCAwLCBzaXplb2YoZGVmYXVsdF92YXIpKTsKIAl2aWFmYl9wYXJfbGVuZ3RoID0gQUxJR04oc2l6ZW9mKHN0cnVjdCB2aWFmYl9wYXIpLCBCSVRTX1BFUl9MT05HLzgpOwogCiAJLyogQWxsb2NhdGUgZmJfaW5mbyBhbmQgKioqX3BhciBoZXJlLCBhbHNvIGluY2x1ZGluZyBzb21lIG90aGVyIG5lZWRlZApAQCAtMTg3Nyw3ICsxNzY2LDYgQEAKIAogCWlmICh2aWFmYl9kdWFsX2ZiKQogCQl2aWFmYl9TQU1NX09OID0gMTsKLQlwYXJzZV9hY3RpdmVfZGV2KCk7CiAJcGFyc2VfbGNkX3BvcnQoKTsKIAlwYXJzZV9kdmlfcG9ydCgpOwogCkBAIC0xOTI2LDkgKzE4MTQsNyBAQAogCX0KIAogCXBhcnNlX21vZGUodmlhZmJfbW9kZSwgJmRlZmF1bHRfeHJlcywgJmRlZmF1bHRfeXJlcyk7Ci0Jdm1vZGVfaW5kZXggPSB2aWFmYl9nZXRfbW9kZV9pbmRleChkZWZhdWx0X3hyZXMsIGRlZmF1bHRfeXJlcyk7Ci0JREVCVUdfTVNHKEtFUk5fSU5GTyAiMC0+aW5kZXg9JWRcbiIsIHZtb2RlX2luZGV4KTsKLQorCXZtb2RlX2VudHJ5ID0gdmlhZmJfZ2V0X21vZGUoZGVmYXVsdF94cmVzLCBkZWZhdWx0X3lyZXMpOwogCWlmICh2aWFmYl9TQU1NX09OID09IDEpIHsKIAkJcGFyc2VfbW9kZSh2aWFmYl9tb2RlMSwgJnZpYWZiX3NlY29uZF94cmVzLAogCQkJJnZpYWZiX3NlY29uZF95cmVzKTsKQEAgLTE5NDcsMTkgKzE4MzMsNiBAQAogCQkJdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeXJlcyA9IHZpYWZiX3NlY29uZF95cmVzOwogCX0KIAotCXN3aXRjaCAodmlhZmJfYnBwKSB7Ci0JY2FzZSAwIC4uLiA4OgotCQl2aWFmYl9icHAgPSA4OwotCQlicmVhazsKLQljYXNlIDkgLi4uIDE2OgotCQl2aWFmYl9icHAgPSAxNjsKLQkJYnJlYWs7Ci0JY2FzZSAxNyAuLi4gMzI6Ci0JCXZpYWZiX2JwcCA9IDMyOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQl2aWFmYl9icHAgPSA4OwotCX0KIAlkZWZhdWx0X3Zhci54cmVzID0gZGVmYXVsdF94cmVzOwogCWRlZmF1bHRfdmFyLnlyZXMgPSBkZWZhdWx0X3lyZXM7CiAJc3dpdGNoIChkZWZhdWx0X3hyZXMpIHsKQEAgLTE5NzIsOCArMTg0NSw2IEBACiAJfQogCWRlZmF1bHRfdmFyLnlyZXNfdmlydHVhbCA9IGRlZmF1bHRfeXJlczsKIAlkZWZhdWx0X3Zhci5iaXRzX3Blcl9waXhlbCA9IHZpYWZiX2JwcDsKLQlpZiAoZGVmYXVsdF92YXIuYml0c19wZXJfcGl4ZWwgPT0gMTUpCi0JCWRlZmF1bHRfdmFyLmJpdHNfcGVyX3BpeGVsID0gMTY7CiAJZGVmYXVsdF92YXIucGl4Y2xvY2sgPQogCSAgICB2aWFmYl9nZXRfcGl4Y2xvY2soZGVmYXVsdF94cmVzLCBkZWZhdWx0X3lyZXMsIHZpYWZiX3JlZnJlc2gpOwogCWRlZmF1bHRfdmFyLmxlZnRfbWFyZ2luID0gKGRlZmF1bHRfeHJlcyA+PiAzKSAmIDB4Zjg7CkBAIC0xOTgyLDYgKzE4NTMsOCBAQAogCWRlZmF1bHRfdmFyLmxvd2VyX21hcmdpbiA9IDQ7CiAJZGVmYXVsdF92YXIuaHN5bmNfbGVuID0gZGVmYXVsdF92YXIubGVmdF9tYXJnaW47CiAJZGVmYXVsdF92YXIudnN5bmNfbGVuID0gNDsKKwl2aWFmYl9zZXR1cF9maXhpbmZvKCZ2aWFmYmluZm8tPmZpeCwgdmlhcGFyaW5mbyk7CisJdmlhZmJpbmZvLT52YXIgPSBkZWZhdWx0X3ZhcjsKIAogCWlmICh2aWFmYl9kdWFsX2ZiKSB7CiAJCXZpYWZiaW5mbzEgPSBmcmFtZWJ1ZmZlcl9hbGxvYyh2aWFmYl9wYXJfbGVuZ3RoLCAmcGRldi0+ZGV2KTsKQEAgLTIwMTYsOCArMTg4OSw2IEBACiAJCWRlZmF1bHRfdmFyLnlyZXMgPSB2aWFmYl9zZWNvbmRfeXJlczsKIAkJZGVmYXVsdF92YXIueHJlc192aXJ0dWFsID0gdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeHJlczsKIAkJZGVmYXVsdF92YXIueXJlc192aXJ0dWFsID0gdmlhZmJfc2Vjb25kX3ZpcnR1YWxfeXJlczsKLQkJaWYgKHZpYWZiX2JwcDEgIT0gdmlhZmJfYnBwKQotCQkJdmlhZmJfYnBwMSA9IHZpYWZiX2JwcDsKIAkJZGVmYXVsdF92YXIuYml0c19wZXJfcGl4ZWwgPSB2aWFmYl9icHAxOwogCQlkZWZhdWx0X3Zhci5waXhjbG9jayA9CiAJCSAgICB2aWFmYl9nZXRfcGl4Y2xvY2sodmlhZmJfc2Vjb25kX3hyZXMsIHZpYWZiX3NlY29uZF95cmVzLApAQCAtMjAzNyw5ICsxOTA4LDcgQEAKIAkJCSZ2aWFmYmluZm8xLT5maXgpOwogCX0KIAotCXZpYWZiX3NldHVwX2ZpeGluZm8oJnZpYWZiaW5mby0+Zml4LCB2aWFwYXJpbmZvKTsKLQl2aWFmYl9jaGVja192YXIoJmRlZmF1bHRfdmFyLCB2aWFmYmluZm8pOwotCXZpYWZiaW5mby0+dmFyID0gZGVmYXVsdF92YXI7CisJdmlhZmJfY2hlY2tfdmFyKCZ2aWFmYmluZm8tPnZhciwgdmlhZmJpbmZvKTsKIAl2aWFmYl91cGRhdGVfZml4KHZpYWZiaW5mbyk7CiAJdmlhcGFyaW5mby0+ZGVwdGggPSBmYl9nZXRfY29sb3JfZGVwdGgoJnZpYWZiaW5mby0+dmFyLAogCQkmdmlhZmJpbmZvLT5maXgpOwpAQCAtMjE5NywxMiArMjA2NiwyMCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCB2aWFmYl9pbml0KHZvaWQpCiB7CisJdTMyIGR1bW15OwogI2lmbmRlZiBNT0RVTEUKIAljaGFyICpvcHRpb24gPSBOVUxMOwogCWlmIChmYl9nZXRfb3B0aW9ucygidmlhZmIiLCAmb3B0aW9uKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJdmlhZmJfc2V0dXAob3B0aW9uKTsKICNlbmRpZgorCWlmIChwYXJzZV9tb2RlKHZpYWZiX21vZGUsICZkdW1teSwgJmR1bW15KQorCQl8fCBwYXJzZV9tb2RlKHZpYWZiX21vZGUxLCAmZHVtbXksICZkdW1teSkKKwkJfHwgdmlhZmJfYnBwIDwgMCB8fCB2aWFmYl9icHAgPiAzMgorCQl8fCB2aWFmYl9icHAxIDwgMCB8fCB2aWFmYl9icHAxID4gMzIKKwkJfHwgcGFyc2VfYWN0aXZlX2RldigpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXByaW50ayhLRVJOX0lORk8KICAgICAgICAiVklBIEdyYXBoaWNzIEludGVyZ3JhdGlvbiBDaGlwc2V0IGZyYW1lYnVmZmVyICVkLiVkIGluaXRpYWxpemluZ1xuIiwKIAkgICAgICAgVkVSU0lPTl9NQUpPUiwgVkVSU0lPTl9NSU5PUik7CkBAIC0yMjMwLDE1ICsyMTA3LDEyIEBACiAJLmZiX2N1cnNvciA9IHZpYWZiX2N1cnNvciwKIAkuZmJfaW9jdGwgPSB2aWFmYl9pb2N0bCwKIAkuZmJfc3luYyA9IHZpYWZiX3N5bmMsCi0JLmZiX3NldGNtYXAgPSB2aWFmYl9zZXRjbWFwLAogfTsKIAogbW9kdWxlX2luaXQodmlhZmJfaW5pdCk7CiBtb2R1bGVfZXhpdCh2aWFmYl9leGl0KTsKIAogI2lmZGVmIE1PRFVMRQotbW9kdWxlX3BhcmFtKHZpYWZiX21lbXNpemUsIGludCwgU19JUlVTUik7Ci0KIG1vZHVsZV9wYXJhbSh2aWFmYl9tb2RlLCBjaGFycCwgU19JUlVTUik7CiBNT0RVTEVfUEFSTV9ERVNDKHZpYWZiX21vZGUsICJTZXQgcmVzb2x1dGlvbiAoZGVmYXVsdD02NDB4NDgwKSIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5oIGIvZHJpdmVycy92aWRlby92aWEvdmlhZmJkZXYuaAppbmRleCAwYzk0ZDI0Li42MWI1OTUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmgKQEAgLTgzLDIyICs4MywxNiBAQAogCiBleHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF92aXJ0dWFsX3lyZXM7CiBleHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF92aXJ0dWFsX3hyZXM7Ci1leHRlcm4gdW5zaWduZWQgaW50IHZpYWZiX3NlY29uZF9vZmZzZXQ7Ci1leHRlcm4gaW50IHZpYWZiX3NlY29uZF9zaXplOwogZXh0ZXJuIGludCB2aWFmYl9TQU1NX09OOwogZXh0ZXJuIGludCB2aWFmYl9kdWFsX2ZiOwogZXh0ZXJuIGludCB2aWFmYl9MQ0QyX09OOwogZXh0ZXJuIGludCB2aWFmYl9MQ0RfT047CiBleHRlcm4gaW50IHZpYWZiX0RWSV9PTjsKIGV4dGVybiBpbnQgdmlhZmJfaG90cGx1ZzsKLWV4dGVybiBpbnQgdmlhZmJfbWVtc2l6ZTsKIAogZXh0ZXJuIGludCBzdHJpY3Rfc3RydG91bChjb25zdCBjaGFyICpjcCwgdW5zaWduZWQgaW50IGJhc2UsCiAJdW5zaWduZWQgbG9uZyAqcmVzKTsKIAotdm9pZCB2aWFmYl9maWxsX3Zhcl90aW1pbmdfaW5mbyhzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgaW50IHJlZnJlc2gsCi0JCQkgIGludCBtb2RlX2luZGV4KTsKLWludCB2aWFmYl9nZXRfbW9kZV9pbmRleChpbnQgaHJlcywgaW50IHZyZXMpOwogdTggdmlhZmJfZ3Bpb19pMmNfcmVhZF9sdmRzKHN0cnVjdCBsdmRzX3NldHRpbmdfaW5mb3JtYXRpb24KIAkqcGx2ZHNfc2V0dGluZ19pbmZvLCBzdHJ1Y3QgbHZkc19jaGlwX2luZm9ybWF0aW9uCiAJKnBsdmRzX2NoaXBfaW5mbywgdTggaW5kZXgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby92aWEvdmlhbW9kZS5jIGIvZHJpdmVycy92aWRlby92aWEvdmlhbW9kZS5jCmluZGV4IGI3NGY4YTYuLmFmNTBlMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuYworKysgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmMKQEAgLTQxMiw3ICs0MTIsNyBAQAogfTsKIAogc3RydWN0IHBhdGNoX3RhYmxlIHJlc19wYXRjaF90YWJsZVtdID0gewotCXtWSUFfUkVTXzEwMjRYNzY4LCBBUlJBWV9TSVpFKFBNMTAyNHg3NjgpLCBQTTEwMjR4NzY4fQorCXtBUlJBWV9TSVpFKFBNMTAyNHg3NjgpLCBQTTEwMjR4NzY4fQogfTsKIAogLyogc3RydWN0IFZQSVRUYWJsZSB7CkBAIC04NzksMTY5ICs4NzksMTUxIEBACiAJIHsyODAwLCAyMDQ4LCAyMDQ4LCA3NTIsIDIyMDAsIDIyNCwgMTU5MiwgMTUzNiwgMTUzNiwgNTYsIDE1MzksIDR9IH0KIH07CiAKLS8qIFZpZGVvIE1vZGUgVGFibGUgKi8KLS8qIHN0cnVjdCBWaWRlb01vZGVUYWJsZSB7Ki8KLS8qICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTW9kZUluZGV4OyovCi0vKiAgc3RydWN0IGNydF9tb2RlX3RhYmxlICAgICAgICAgICAgICpjcnRjOyovCi0vKiAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVfYXJyYXk7Ki8KLS8qIH07Ki8KLXN0cnVjdCBWaWRlb01vZGVUYWJsZSBDTEUyNjZNb2Rlc1tdID0geworc3RydWN0IFZpZGVvTW9kZVRhYmxlIHZpYWZiX21vZGVzW10gPSB7CiAJLyogRGlzcGxheSA6IDQ4MHg2NDAgKEdURikgKi8KLQl7VklBX1JFU180ODBYNjQwLCBDUlRNNDgweDY0MCwgQVJSQVlfU0laRShDUlRNNDgweDY0MCl9LAorCXtDUlRNNDgweDY0MCwgQVJSQVlfU0laRShDUlRNNDgweDY0MCl9LAogCiAJLyogRGlzcGxheSA6IDY0MHg0ODAgKi8KLQl7VklBX1JFU182NDBYNDgwLCBDUlRNNjQweDQ4MCwgQVJSQVlfU0laRShDUlRNNjQweDQ4MCl9LAorCXtDUlRNNjQweDQ4MCwgQVJSQVlfU0laRShDUlRNNjQweDQ4MCl9LAogCiAJLyogRGlzcGxheSA6IDcyMHg0ODAgKEdURikgKi8KLQl7VklBX1JFU183MjBYNDgwLCBDUlRNNzIweDQ4MCwgQVJSQVlfU0laRShDUlRNNzIweDQ4MCl9LAorCXtDUlRNNzIweDQ4MCwgQVJSQVlfU0laRShDUlRNNzIweDQ4MCl9LAogCiAJLyogRGlzcGxheSA6IDcyMHg1NzYgKEdURikgKi8KLQl7VklBX1JFU183MjBYNTc2LCBDUlRNNzIweDU3NiwgQVJSQVlfU0laRShDUlRNNzIweDU3Nil9LAorCXtDUlRNNzIweDU3NiwgQVJSQVlfU0laRShDUlRNNzIweDU3Nil9LAogCiAJLyogRGlzcGxheSA6IDgwMHg2MDAgKi8KLQl7VklBX1JFU184MDBYNjAwLCBDUlRNODAweDYwMCwgQVJSQVlfU0laRShDUlRNODAweDYwMCl9LAorCXtDUlRNODAweDYwMCwgQVJSQVlfU0laRShDUlRNODAweDYwMCl9LAogCiAJLyogRGlzcGxheSA6IDgwMHg0ODAgKENWVCkgKi8KLQl7VklBX1JFU184MDBYNDgwLCBDUlRNODAweDQ4MCwgQVJSQVlfU0laRShDUlRNODAweDQ4MCl9LAorCXtDUlRNODAweDQ4MCwgQVJSQVlfU0laRShDUlRNODAweDQ4MCl9LAogCiAJLyogRGlzcGxheSA6IDg0OHg0ODAgKENWVCkgKi8KLQl7VklBX1JFU184NDhYNDgwLCBDUlRNODQ4eDQ4MCwgQVJSQVlfU0laRShDUlRNODQ4eDQ4MCl9LAorCXtDUlRNODQ4eDQ4MCwgQVJSQVlfU0laRShDUlRNODQ4eDQ4MCl9LAogCiAJLyogRGlzcGxheSA6IDg1Mng0ODAgKEdURikgKi8KLQl7VklBX1JFU184NTZYNDgwLCBDUlRNODUyeDQ4MCwgQVJSQVlfU0laRShDUlRNODUyeDQ4MCl9LAorCXtDUlRNODUyeDQ4MCwgQVJSQVlfU0laRShDUlRNODUyeDQ4MCl9LAogCiAJLyogRGlzcGxheSA6IDEwMjR4NTEyIChHVEYpICovCi0Je1ZJQV9SRVNfMTAyNFg1MTIsIENSVE0xMDI0eDUxMiwgQVJSQVlfU0laRShDUlRNMTAyNHg1MTIpfSwKKwl7Q1JUTTEwMjR4NTEyLCBBUlJBWV9TSVpFKENSVE0xMDI0eDUxMil9LAogCiAJLyogRGlzcGxheSA6IDEwMjR4NjAwICovCi0Je1ZJQV9SRVNfMTAyNFg2MDAsIENSVE0xMDI0eDYwMCwgQVJSQVlfU0laRShDUlRNMTAyNHg2MDApfSwKLQotCS8qIERpc3BsYXkgOiAxMDI0eDU3NiAoR1RGKSAqLwotCS8qeyBWSUFfUkVTXzEwMjRYNTc2LCBDUlRNMTAyNHg1NzYsIEFSUkFZX1NJWkUoQ1JUTTEwMjR4NTc2KX0sICovCisJe0NSVE0xMDI0eDYwMCwgQVJSQVlfU0laRShDUlRNMTAyNHg2MDApfSwKIAogCS8qIERpc3BsYXkgOiAxMDI0eDc2OCAqLwotCXtWSUFfUkVTXzEwMjRYNzY4LCBDUlRNMTAyNHg3NjgsIEFSUkFZX1NJWkUoQ1JUTTEwMjR4NzY4KX0sCisJe0NSVE0xMDI0eDc2OCwgQVJSQVlfU0laRShDUlRNMTAyNHg3NjgpfSwKIAogCS8qIERpc3BsYXkgOiAxMTUyeDg2NCAqLwotCXtWSUFfUkVTXzExNTJYODY0LCBDUlRNMTE1Mng4NjQsIEFSUkFZX1NJWkUoQ1JUTTExNTJ4ODY0KX0sCisJe0NSVE0xMTUyeDg2NCwgQVJSQVlfU0laRShDUlRNMTE1Mng4NjQpfSwKIAogCS8qIERpc3BsYXkgOiAxMjgweDc2OCAoR1RGKSAqLwotCXtWSUFfUkVTXzEyODBYNzY4LCBDUlRNMTI4MHg3NjgsIEFSUkFZX1NJWkUoQ1JUTTEyODB4NzY4KX0sCisJe0NSVE0xMjgweDc2OCwgQVJSQVlfU0laRShDUlRNMTI4MHg3NjgpfSwKIAogCS8qIERpc3BsYXkgOiA5NjB4NjAwIChDVlQpICovCi0Je1ZJQV9SRVNfOTYwWDYwMCwgQ1JUTTk2MHg2MDAsIEFSUkFZX1NJWkUoQ1JUTTk2MHg2MDApfSwKKwl7Q1JUTTk2MHg2MDAsIEFSUkFZX1NJWkUoQ1JUTTk2MHg2MDApfSwKIAogCS8qIERpc3BsYXkgOiAxMDAweDYwMCAoR1RGKSAqLwotCXtWSUFfUkVTXzEwMDBYNjAwLCBDUlRNMTAwMHg2MDAsIEFSUkFZX1NJWkUoQ1JUTTEwMDB4NjAwKX0sCisJe0NSVE0xMDAweDYwMCwgQVJSQVlfU0laRShDUlRNMTAwMHg2MDApfSwKIAogCS8qIERpc3BsYXkgOiAxMDI0eDU3NiAoR1RGKSAqLwotCXtWSUFfUkVTXzEwMjRYNTc2LCBDUlRNMTAyNHg1NzYsIEFSUkFZX1NJWkUoQ1JUTTEwMjR4NTc2KX0sCisJe0NSVE0xMDI0eDU3NiwgQVJSQVlfU0laRShDUlRNMTAyNHg1NzYpfSwKIAogCS8qIERpc3BsYXkgOiAxMDg4eDYxMiAoR1RGKSAqLwotCXtWSUFfUkVTXzEwODhYNjEyLCBDUlRNMTA4OHg2MTIsIEFSUkFZX1NJWkUoQ1JUTTEwODh4NjEyKX0sCisJe0NSVE0xMDg4eDYxMiwgQVJSQVlfU0laRShDUlRNMTA4OHg2MTIpfSwKIAogCS8qIERpc3BsYXkgOiAxMTUyeDcyMCAoQ1ZUKSAqLwotCXtWSUFfUkVTXzExNTJYNzIwLCBDUlRNMTE1Mng3MjAsIEFSUkFZX1NJWkUoQ1JUTTExNTJ4NzIwKX0sCisJe0NSVE0xMTUyeDcyMCwgQVJSQVlfU0laRShDUlRNMTE1Mng3MjApfSwKIAogCS8qIERpc3BsYXkgOiAxMjAweDcyMCAoR1RGKSAqLwotCXtWSUFfUkVTXzEyMDBYNzIwLCBDUlRNMTIwMHg3MjAsIEFSUkFZX1NJWkUoQ1JUTTEyMDB4NzIwKX0sCisJe0NSVE0xMjAweDcyMCwgQVJSQVlfU0laRShDUlRNMTIwMHg3MjApfSwKIAogCS8qIERpc3BsYXkgOiAxMjgweDYwMCAoR1RGKSAqLwotCXtWSUFfUkVTXzEyODBYNjAwLCBDUlRNMTI4MHg2MDAsIEFSUkFZX1NJWkUoQ1JUTTEyODB4NjAwKX0sCisJe0NSVE0xMjgweDYwMCwgQVJSQVlfU0laRShDUlRNMTI4MHg2MDApfSwKIAogCS8qIERpc3BsYXkgOiAxMjgweDgwMCAoQ1ZUKSAqLwotCXtWSUFfUkVTXzEyODBYODAwLCBDUlRNMTI4MHg4MDAsIEFSUkFZX1NJWkUoQ1JUTTEyODB4ODAwKX0sCi0KLQkvKiBEaXNwbGF5IDogMTI4MHg4MDAgKEdURikgKi8KLQkvKnsgTTEyODB4ODAwLCBDUlRNMTI4MHg4MDAsIEFSUkFZX1NJWkUoQ1JUTTEyODB4ODAwKX0sICovCisJe0NSVE0xMjgweDgwMCwgQVJSQVlfU0laRShDUlRNMTI4MHg4MDApfSwKIAogCS8qIERpc3BsYXkgOiAxMjgweDk2MCAqLwotCXtWSUFfUkVTXzEyODBYOTYwLCBDUlRNMTI4MHg5NjAsIEFSUkFZX1NJWkUoQ1JUTTEyODB4OTYwKX0sCisJe0NSVE0xMjgweDk2MCwgQVJSQVlfU0laRShDUlRNMTI4MHg5NjApfSwKIAogCS8qIERpc3BsYXkgOiAxMjgweDEwMjQgKi8KLQl7VklBX1JFU18xMjgwWDEwMjQsIENSVE0xMjgweDEwMjQsIEFSUkFZX1NJWkUoQ1JUTTEyODB4MTAyNCl9LAorCXtDUlRNMTI4MHgxMDI0LCBBUlJBWV9TSVpFKENSVE0xMjgweDEwMjQpfSwKIAogCS8qIERpc3BsYXkgOiAxMzYweDc2OCAoQ1ZUKSAqLwotCXtWSUFfUkVTXzEzNjBYNzY4LCBDUlRNMTM2MHg3NjgsIEFSUkFZX1NJWkUoQ1JUTTEzNjB4NzY4KX0sCi0KLQkvKiBEaXNwbGF5IDogMTM2MHg3NjggKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCi0Je1ZJQV9SRVNfMTM2MFg3NjhfUkIsIENSVE0xMzYweDc2OF9SQiwKLQkgQVJSQVlfU0laRShDUlRNMTM2MHg3NjhfUkIpfSwKKwl7Q1JUTTEzNjB4NzY4LCBBUlJBWV9TSVpFKENSVE0xMzYweDc2OCl9LAogCiAJLyogRGlzcGxheSA6IDEzNjZ4NzY4ICovCi0Je1ZJQV9SRVNfMTM2Nlg3NjgsIENSVE0xMzY2eDc2OCwgQVJSQVlfU0laRShDUlRNMTM2Nng3NjgpfSwKKwl7Q1JUTTEzNjZ4NzY4LCBBUlJBWV9TSVpFKENSVE0xMzY2eDc2OCl9LAogCiAJLyogRGlzcGxheSA6IDEzNjh4NzY4IChHVEYpICovCi0JLyp7IE0xMzY4eDc2OCxDUlRNMTM2OHg3NjgsQVJSQVlfU0laRShDUlRNMTM2OHg3NjgpfSwgKi8KLQkvKiBEaXNwbGF5IDogMTM2OHg3NjggKEdURikgKi8KLQl7VklBX1JFU18xMzY4WDc2OCwgQ1JUTTEzNjh4NzY4LCBBUlJBWV9TSVpFKENSVE0xMzY4eDc2OCl9LAorCXtDUlRNMTM2OHg3NjgsIEFSUkFZX1NJWkUoQ1JUTTEzNjh4NzY4KX0sCiAKIAkvKiBEaXNwbGF5IDogMTQ0MHg5MDAgKENWVCkgKi8KLQl7VklBX1JFU18xNDQwWDkwMCwgQ1JUTTE0NDB4OTAwLCBBUlJBWV9TSVpFKENSVE0xNDQweDkwMCl9LAotCi0JLyogRGlzcGxheSA6IDE0NDB4OTAwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLwotCXtWSUFfUkVTXzE0NDBYOTAwX1JCLCBDUlRNMTQ0MHg5MDBfUkIsCi0JIEFSUkFZX1NJWkUoQ1JUTTE0NDB4OTAwX1JCKX0sCisJe0NSVE0xNDQweDkwMCwgQVJSQVlfU0laRShDUlRNMTQ0MHg5MDApfSwKIAogCS8qIERpc3BsYXkgOiAxNDQweDEwNTAgKEdURikgKi8KLQl7VklBX1JFU18xNDQwWDEwNTAsIENSVE0xNDQweDEwNTAsIEFSUkFZX1NJWkUoQ1JUTTE0NDB4MTA1MCl9LAotCi0JLyogRGlzcGxheSA6IDE0MDB4MTA1MCAoQ1ZUIFJlZHVjZSBCbGFua2luZykgKi8KLQl7VklBX1JFU18xNDAwWDEwNTBfUkIsIENSVE0xNDAweDEwNTBfUkIsCi0JIEFSUkFZX1NJWkUoQ1JUTTE0MDB4MTA1MF9SQil9LAorCXtDUlRNMTQ0MHgxMDUwLCBBUlJBWV9TSVpFKENSVE0xNDQweDEwNTApfSwKIAogCS8qIERpc3BsYXkgOiAxNjAweDkwMCAoQ1ZUKSAqLwotCXtWSUFfUkVTXzE2MDBYOTAwLCBDUlRNMTYwMHg5MDAsIEFSUkFZX1NJWkUoQ1JUTTE2MDB4OTAwKX0sCi0KLQkvKiBEaXNwbGF5IDogMTYwMHg5MDAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCi0Je1ZJQV9SRVNfMTYwMFg5MDBfUkIsIENSVE0xNjAweDkwMF9SQiwKLQkgQVJSQVlfU0laRShDUlRNMTYwMHg5MDBfUkIpfSwKKwl7Q1JUTTE2MDB4OTAwLCBBUlJBWV9TSVpFKENSVE0xNjAweDkwMCl9LAogCiAJLyogRGlzcGxheSA6IDE2MDB4MTAyNCAoR1RGKSAqLwotCXtWSUFfUkVTXzE2MDBYMTAyNCwgQ1JUTTE2MDB4MTAyNCwgQVJSQVlfU0laRShDUlRNMTYwMHgxMDI0KX0sCisJe0NSVE0xNjAweDEwMjQsIEFSUkFZX1NJWkUoQ1JUTTE2MDB4MTAyNCl9LAogCiAJLyogRGlzcGxheSA6IDE2MDB4MTIwMCAqLwotCXtWSUFfUkVTXzE2MDBYMTIwMCwgQ1JUTTE2MDB4MTIwMCwgQVJSQVlfU0laRShDUlRNMTYwMHgxMjAwKX0sCisJe0NSVE0xNjAweDEyMDAsIEFSUkFZX1NJWkUoQ1JUTTE2MDB4MTIwMCl9LAogCiAJLyogRGlzcGxheSA6IDE2ODB4MTA1MCAoQ1ZUKSAqLwotCXtWSUFfUkVTXzE2ODBYMTA1MCwgQ1JUTTE2ODB4MTA1MCwgQVJSQVlfU0laRShDUlRNMTY4MHgxMDUwKX0sCi0KLQkvKiBEaXNwbGF5IDogMTY4MHgxMDUwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLwotCXtWSUFfUkVTXzE2ODBYMTA1MF9SQiwgQ1JUTTE2ODB4MTA1MF9SQiwKLQkgQVJSQVlfU0laRShDUlRNMTY4MHgxMDUwX1JCKX0sCisJe0NSVE0xNjgweDEwNTAsIEFSUkFZX1NJWkUoQ1JUTTE2ODB4MTA1MCl9LAogCiAJLyogRGlzcGxheSA6IDE3OTJ4MTM0NCAoRE1UKSAqLwotCXtWSUFfUkVTXzE3OTJYMTM0NCwgQ1JUTTE3OTJ4MTM0NCwgQVJSQVlfU0laRShDUlRNMTc5MngxMzQ0KX0sCisJe0NSVE0xNzkyeDEzNDQsIEFSUkFZX1NJWkUoQ1JUTTE3OTJ4MTM0NCl9LAogCiAJLyogRGlzcGxheSA6IDE4NTZ4MTM5MiAoRE1UKSAqLwotCXtWSUFfUkVTXzE4NTZYMTM5MiwgQ1JUTTE4NTZ4MTM5MiwgQVJSQVlfU0laRShDUlRNMTg1NngxMzkyKX0sCisJe0NSVE0xODU2eDEzOTIsIEFSUkFZX1NJWkUoQ1JUTTE4NTZ4MTM5Mil9LAogCiAJLyogRGlzcGxheSA6IDE5MjB4MTQ0MCAqLwotCXtWSUFfUkVTXzE5MjBYMTQ0MCwgQ1JUTTE5MjB4MTQ0MCwgQVJSQVlfU0laRShDUlRNMTkyMHgxNDQwKX0sCisJe0NSVE0xOTIweDE0NDAsIEFSUkFZX1NJWkUoQ1JUTTE5MjB4MTQ0MCl9LAogCiAJLyogRGlzcGxheSA6IDIwNDh4MTUzNiAqLwotCXtWSUFfUkVTXzIwNDhYMTUzNiwgQ1JUTTIwNDh4MTUzNiwgQVJSQVlfU0laRShDUlRNMjA0OHgxNTM2KX0sCisJe0NSVE0yMDQ4eDE1MzYsIEFSUkFZX1NJWkUoQ1JUTTIwNDh4MTUzNil9LAogCiAJLyogRGlzcGxheSA6IDEyODB4NzIwICovCi0Je1ZJQV9SRVNfMTI4MFg3MjAsIENSVE0xMjgweDcyMCwgQVJSQVlfU0laRShDUlRNMTI4MHg3MjApfSwKKwl7Q1JUTTEyODB4NzIwLCBBUlJBWV9TSVpFKENSVE0xMjgweDcyMCl9LAogCiAJLyogRGlzcGxheSA6IDE5MjB4MTA4MCAoQ1ZUKSAqLwotCXtWSUFfUkVTXzE5MjBYMTA4MCwgQ1JUTTE5MjB4MTA4MCwgQVJSQVlfU0laRShDUlRNMTkyMHgxMDgwKX0sCi0KLQkvKiBEaXNwbGF5IDogMTkyMHgxMDgwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLwotCXtWSUFfUkVTXzE5MjBYMTA4MF9SQiwgQ1JUTTE5MjB4MTA4MF9SQiwKLQkgQVJSQVlfU0laRShDUlRNMTkyMHgxMDgwX1JCKX0sCisJe0NSVE0xOTIweDEwODAsIEFSUkFZX1NJWkUoQ1JUTTE5MjB4MTA4MCl9LAogCiAJLyogRGlzcGxheSA6IDE5MjB4MTIwMCAoQ1ZUKSAqLwotCXtWSUFfUkVTXzE5MjBYMTIwMCwgQ1JUTTE5MjB4MTIwMCwgQVJSQVlfU0laRShDUlRNMTkyMHgxMjAwKX0sCi0KLQkvKiBEaXNwbGF5IDogMTkyMHgxMjAwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLwotCXtWSUFfUkVTXzE5MjBYMTIwMF9SQiwgQ1JUTTE5MjB4MTIwMF9SQiwKLQkgQVJSQVlfU0laRShDUlRNMTkyMHgxMjAwX1JCKX0sCisJe0NSVE0xOTIweDEyMDAsIEFSUkFZX1NJWkUoQ1JUTTE5MjB4MTIwMCl9LAogCiAJLyogRGlzcGxheSA6IDE0MDB4MTA1MCAoQ1ZUKSAqLwotCXtWSUFfUkVTXzE0MDBYMTA1MCwgQ1JUTTE0MDB4MTA1MCwgQVJSQVlfU0laRShDUlRNMTQwMHgxMDUwKX0KKwl7Q1JUTTE0MDB4MTA1MCwgQVJSQVlfU0laRShDUlRNMTQwMHgxMDUwKX0KIH07CisKK3N0cnVjdCBWaWRlb01vZGVUYWJsZSB2aWFmYl9yYl9tb2Rlc1tdID0geworCS8qIERpc3BsYXkgOiAxMzYweDc2OCAoQ1ZUIFJlZHVjZSBCbGFua2luZykgKi8KKwl7Q1JUTTEzNjB4NzY4X1JCLCBBUlJBWV9TSVpFKENSVE0xMzYweDc2OF9SQil9LAorCisJLyogRGlzcGxheSA6IDE0NDB4OTAwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLworCXtDUlRNMTQ0MHg5MDBfUkIsIEFSUkFZX1NJWkUoQ1JUTTE0NDB4OTAwX1JCKX0sCisKKwkvKiBEaXNwbGF5IDogMTQwMHgxMDUwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLworCXtDUlRNMTQwMHgxMDUwX1JCLCBBUlJBWV9TSVpFKENSVE0xNDAweDEwNTBfUkIpfSwKKworCS8qIERpc3BsYXkgOiAxNjAweDkwMCAoQ1ZUIFJlZHVjZSBCbGFua2luZykgKi8KKwl7Q1JUTTE2MDB4OTAwX1JCLCBBUlJBWV9TSVpFKENSVE0xNjAweDkwMF9SQil9LAorCisJLyogRGlzcGxheSA6IDE2ODB4MTA1MCAoQ1ZUIFJlZHVjZSBCbGFua2luZykgKi8KKwl7Q1JUTTE2ODB4MTA1MF9SQiwgQVJSQVlfU0laRShDUlRNMTY4MHgxMDUwX1JCKX0sCisKKwkvKiBEaXNwbGF5IDogMTkyMHgxMDgwIChDVlQgUmVkdWNlIEJsYW5raW5nKSAqLworCXtDUlRNMTkyMHgxMDgwX1JCLCBBUlJBWV9TSVpFKENSVE0xOTIweDEwODBfUkIpfSwKKworCS8qIERpc3BsYXkgOiAxOTIweDEyMDAgKENWVCBSZWR1Y2UgQmxhbmtpbmcpICovCisJe0NSVE0xOTIweDEyMDBfUkIsIEFSUkFZX1NJWkUoQ1JUTTE5MjB4MTIwMF9SQil9Cit9OworCiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ0VBTTEyODB4NzIwW10gPSB7CiAJe1JFRlJFU0hfNjAsIENMS183NF8yNzBNLCBNMTI4MFg3MjBfQ0VBX1I2MF9IU1AsCiAJIE0xMjgwWDcyMF9DRUFfUjYwX1ZTUCwKQEAgLTEwNTYsOCArMTAzOCw4IEBACiB9Owogc3RydWN0IFZpZGVvTW9kZVRhYmxlIENFQV9IRE1JX01vZGVzW10gPSB7CiAJLyogRGlzcGxheSA6IDEyODB4NzIwICovCi0Je1ZJQV9SRVNfMTI4MFg3MjAsIENFQU0xMjgweDcyMCwgQVJSQVlfU0laRShDRUFNMTI4MHg3MjApfSwKLQl7VklBX1JFU18xOTIwWDEwODAsIENFQU0xOTIweDEwODAsIEFSUkFZX1NJWkUoQ0VBTTE5MjB4MTA4MCl9CisJe0NFQU0xMjgweDcyMCwgQVJSQVlfU0laRShDRUFNMTI4MHg3MjApfSwKKwl7Q0VBTTE5MjB4MTA4MCwgQVJSQVlfU0laRShDRUFNMTkyMHgxMDgwKX0KIH07CiAKIGludCBOVU1fVE9UQUxfUkVTX01BUF9SRUZSRVNIID0gQVJSQVlfU0laRShyZXNfbWFwX3JlZnJlc2hfdGJsKTsKQEAgLTEwNjksNCArMTA1MSwyOCBAQAogaW50IE5VTV9UT1RBTF9WWDg1NV9Nb2RlWHJlZ3MgPSBBUlJBWV9TSVpFKFZYODU1X01vZGVYcmVncyk7CiBpbnQgTlVNX1RPVEFMX0NMRTI2Nl9Nb2RlWHJlZ3MgPSBBUlJBWV9TSVpFKENMRTI2Nl9Nb2RlWHJlZ3MpOwogaW50IE5VTV9UT1RBTF9QQVRDSF9NT0RFID0gQVJSQVlfU0laRShyZXNfcGF0Y2hfdGFibGUpOwotaW50IE5VTV9UT1RBTF9NT0RFVEFCTEUgPSBBUlJBWV9TSVpFKENMRTI2Nk1vZGVzKTsKKworCitzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZpYWZiX2dldF9tb2RlKGludCBocmVzLCBpbnQgdnJlcykKK3sKKwl1MzIgaTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2aWFmYl9tb2Rlcyk7IGkrKykKKwkJaWYgKHZpYWZiX21vZGVzW2ldLm1vZGVfYXJyYXkgJiYKKwkJCXZpYWZiX21vZGVzW2ldLmNydGNbMF0uY3J0Yy5ob3JfYWRkciA9PSBocmVzICYmCisJCQl2aWFmYl9tb2Rlc1tpXS5jcnRjWzBdLmNydGMudmVyX2FkZHIgPT0gdnJlcykKKwkJCXJldHVybiAmdmlhZmJfbW9kZXNbaV07CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IFZpZGVvTW9kZVRhYmxlICp2aWFmYl9nZXRfcmJfbW9kZShpbnQgaHJlcywgaW50IHZyZXMpCit7CisJdTMyIGk7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodmlhZmJfcmJfbW9kZXMpOyBpKyspCisJCWlmICh2aWFmYl9yYl9tb2Rlc1tpXS5tb2RlX2FycmF5ICYmCisJCQl2aWFmYl9yYl9tb2Rlc1tpXS5jcnRjWzBdLmNydGMuaG9yX2FkZHIgPT0gaHJlcyAmJgorCQkJdmlhZmJfcmJfbW9kZXNbaV0uY3J0Y1swXS5jcnRjLnZlcl9hZGRyID09IHZyZXMpCisJCQlyZXR1cm4gJnZpYWZiX3JiX21vZGVzW2ldOworCisJcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmggYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFtb2RlLmgKaW5kZXggYTlkNjU1NC4uNWIxY2VkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby92aWEvdmlhbW9kZS5oCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYW1vZGUuaApAQCAtMzIsMTMgKzMyLDExIEBACiB9OwogCiBzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgewotCWludCBNb2RlSW5kZXg7CiAJc3RydWN0IGNydF9tb2RlX3RhYmxlICpjcnRjOwogCWludCBtb2RlX2FycmF5OwogfTsKIAogc3RydWN0IHBhdGNoX3RhYmxlIHsKLQlpbnQgbW9kZV9pbmRleDsKIAlpbnQgdGFibGVfbGVuZ3RoOwogCXN0cnVjdCBpb19yZWcgKmlvX3JlZ190YWJsZTsKIH07CkBAIC01OSwxMyArNTcsMTEgQEAKIGV4dGVybiBpbnQgTlVNX1RPVEFMX1ZYODU1X01vZGVYcmVnczsKIGV4dGVybiBpbnQgTlVNX1RPVEFMX0NMRTI2Nl9Nb2RlWHJlZ3M7CiBleHRlcm4gaW50IE5VTV9UT1RBTF9QQVRDSF9NT0RFOwotZXh0ZXJuIGludCBOVU1fVE9UQUxfTU9ERVRBQkxFOwogCiAvKioqKioqKioqKioqKioqKioqKiovCiAvKiBNb2RlIFRhYmxlICAgICAgICovCiAvKioqKioqKioqKioqKioqKioqKiovCiAKLWV4dGVybiBzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgQ0xFMjY2TW9kZXNbXTsKIGV4dGVybiBzdHJ1Y3QgY3J0X21vZGVfdGFibGUgQ0VBTTEyODB4NzIwW107CiBleHRlcm4gc3RydWN0IGNydF9tb2RlX3RhYmxlIENFQU0xOTIweDEwODBbXTsKIGV4dGVybiBzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgQ0VBX0hETUlfTW9kZXNbXTsKQEAgLTgxLDQgKzc3LDggQEAKIGV4dGVybiBzdHJ1Y3QgaW9fcmVnIFBNMTAyNHg3NjhbXTsKIGV4dGVybiBzdHJ1Y3QgcGF0Y2hfdGFibGUgcmVzX3BhdGNoX3RhYmxlW107CiBleHRlcm4gc3RydWN0IFZQSVRUYWJsZSBWUElUOworCitzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZpYWZiX2dldF9tb2RlKGludCBocmVzLCBpbnQgdnJlcyk7CitzdHJ1Y3QgVmlkZW9Nb2RlVGFibGUgKnZpYWZiX2dldF9yYl9tb2RlKGludCBocmVzLCBpbnQgdnJlcyk7CisKICNlbmRpZiAvKiBfX1ZJQU1PREVfSF9fICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3cxMDBmYi5jIGIvZHJpdmVycy92aWRlby93MTAwZmIuYwppbmRleCAyMzc2ZjY4Li41ZDIyMzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3cxMDBmYi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdzEwMGZiLmMKQEAgLTYyOCw3ICs2MjgsNyBAQAogI2VuZGlmCiAKIAotaW50IF9faW5pdCB3MTAwZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK2ludCBfX2RldmluaXQgdzEwMGZiX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJaW50IGVyciA9IC1FSU87CiAJc3RydWN0IHcxMDBmYl9tYWNoX2luZm8gKmluZjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYyBiL2RyaXZlcnMvdmlydGlvL3ZpcnRpb19wY2kuYwppbmRleCAxYjY1NzMyLi42MjU0NDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpcnRpby92aXJ0aW9fcGNpLmMKKysrIGIvZHJpdmVycy92aXJ0aW8vdmlydGlvX3BjaS5jCkBAIC02NDksNiArNjQ5LDcgQEAKIAkJZ290byBvdXRfcmVxX3JlZ2lvbnM7CiAKIAlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgdnBfZGV2KTsKKwlwY2lfc2V0X21hc3RlcihwY2lfZGV2KTsKIAogCS8qIHdlIHVzZSB0aGUgc3Vic3lzdGVtIHZlbmRvci9kZXZpY2UgaWQgYXMgdGhlIHZpcnRpbyB2ZW5kb3IvZGV2aWNlCiAJICogaWQuICB0aGlzIGFsbG93cyB1cyB0byB1c2UgdGhlIHNhbWUgUENJIHZlbmRvci9kZXZpY2UgaWQgZm9yIGFsbApkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL0tjb25maWcgYi9kcml2ZXJzL3cxL21hc3RlcnMvS2NvbmZpZwppbmRleCAzMTk1ZmI4Li44MGIzYjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvS2NvbmZpZworKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvS2NvbmZpZwpAQCAtNjAsNyArNjAsNyBAQAogCiBjb25maWcgSERRX01BU1RFUl9PTUFQCiAJdHJpc3RhdGUgIk9NQVAgSERRIGRyaXZlciIKLQlkZXBlbmRzIG9uIEFSQ0hfT01BUDI0MzAgfHwgQVJDSF9PTUFQMzRYWAorCWRlcGVuZHMgb24gQVJDSF9PTUFQMjQzMCB8fCBBUkNIX09NQVAzCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgMS13aXJlIG9yIEhEUSBJbnRlcmZhY2UKIAkgIG9uIGFuIE9NQVAgcHJvY2Vzc29yLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL2RzMjQ4Mi5jIGIvZHJpdmVycy93MS9tYXN0ZXJzL2RzMjQ4Mi5jCmluZGV4IDQwNmNhYTZhLi5lNWY3NDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvZHMyNDgyLmMKKysrIGIvZHJpdmVycy93MS9tYXN0ZXJzL2RzMjQ4Mi5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIAkJCSAoKytyZXRyaWVzIDwgRFMyNDgyX1dBSVRfSURMRV9USU1FT1VUKSk7CiAJfQogCi0JaWYgKHJldHJpZXMgPiBEUzI0ODJfV0FJVF9JRExFX1RJTUVPVVQpCisJaWYgKHJldHJpZXMgPj0gRFMyNDgyX1dBSVRfSURMRV9USU1FT1VUKQogCQlwcmludGsoS0VSTl9FUlIgIiVzOiB0aW1lb3V0IG9uIGNoYW5uZWwgJWRcbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgcGRldi0+Y2hhbm5lbCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvbWFzdGVycy9teGNfdzEuYyBiL2RyaXZlcnMvdzEvbWFzdGVycy9teGNfdzEuYwppbmRleCA2NTI0NGMwLi40OTI2NzAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvbXhjX3cxLmMKKysrIGIvZHJpdmVycy93MS9tYXN0ZXJzL214Y193MS5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAlyZXR1cm4gKChfX3Jhd19yZWFkYihjdHJsX2FkZHIpKSA+PiAzKSAmIDB4MTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgbXhjX3cxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IF9fZGV2aW5pdCBteGNfdzFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbXhjX3cxX2RldmljZSAqbWRldjsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKQEAgLTE2Niw3ICsxNjYsNyBAQAogLyoKICAqIGRpc2Fzc29jaWF0ZSB0aGUgdzEgZGV2aWNlIGZyb20gdGhlIGRyaXZlcgogICovCi1zdGF0aWMgaW50IG14Y193MV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZleGl0IG14Y193MV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgbXhjX3cxX2RldmljZSAqbWRldiA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOwogCXN0cnVjdCByZXNvdXJjZSAqcmVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93MS9tYXN0ZXJzL29tYXBfaGRxLmMgYi9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYwppbmRleCAwZDkyOTY5Li4yMjk3N2QzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYworKysgYi9kcml2ZXJzL3cxL21hc3RlcnMvb21hcF9oZHEuYwpAQCAtNzIsNyArNzIsNyBAQAogCWludAkJCWluaXRfdHJhbnM7CiB9OwogCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX2hkcV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9tYXBfaGRxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpOwogc3RhdGljIGludCBvbWFwX2hkcV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldik7CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBfaGRxX2RyaXZlciA9IHsKQEAgLTU1OCw3ICs1NTgsNyBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGludCBfX2luaXQgb21hcF9oZHFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9tYXBfaGRxX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IGhkcV9kYXRhICpoZHFfZGF0YTsKIAlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdzEvdzEuYyBiL2RyaXZlcnMvdzEvdzEuYwppbmRleCBhY2M3ZTNiLi5hZDU4OTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3cxL3cxLmMKKysrIGIvZHJpdmVycy93MS93MS5jCkBAIC05ODYsNyArOTg2LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3MV9pbml0KHZvaWQpCitzdGF0aWMgaW50IF9faW5pdCB3MV9pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbDsKIApAQCAtMTAzNCw3ICsxMDM0LDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgdm9pZCB3MV9maW5pKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgdzFfZmluaSh2b2lkKQogewogCXN0cnVjdCB3MV9tYXN0ZXIgKmRldjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCmluZGV4IDA1MGVlMTQuLmJkY2RiZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZworKysgYi9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKQEAgLTU1LDYgKzU1LDExIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzb2Z0ZG9nLgogCitjb25maWcgTUFYNjNYWF9XQVRDSERPRworICAgICAgIHRyaXN0YXRlICJNYXg2M3h4IHdhdGNoZG9nIgorICAgICAgIGhlbHAKKyAgICAgICAgIFN1cHBvcnQgZm9yIG1lbW9yeSBtYXBwZWQgbWF4NjN7NjksNzAsNzEsNzIsNzMsNzR9IHdhdGNoZG9nIHRpbWVyLgorCiBjb25maWcgV004MzFYX1dBVENIRE9HCiAJdHJpc3RhdGUgIldNODMxeCB3YXRjaGRvZyIKIAlkZXBlbmRzIG9uIE1GRF9XTTgzMVgKQEAgLTE5NCw3ICsxOTksNyBAQAogCiBjb25maWcgT01BUF9XQVRDSERPRwogCXRyaXN0YXRlICJPTUFQIFdhdGNoZG9nIgotCWRlcGVuZHMgb24gQVJDSF9PTUFQMTZYWCB8fCBBUkNIX09NQVAyNFhYIHx8IEFSQ0hfT01BUDM0WFgKKwlkZXBlbmRzIG9uIEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQMiB8fCBBUkNIX09NQVAzCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgVEkgT01BUDE2MTAvT01BUDE3MTAvT01BUDI0MjAvT01BUDM0MzAgd2F0Y2hkb2cuICBTYXkgJ1knCiAJICBoZXJlIHRvIGVuYWJsZSB0aGUgT01BUDE2MTAvT01BUDE3MTAvT01BUDI0MjAvT01BUDM0MzAgd2F0Y2hkb2cgdGltZXIuCkBAIC0yODksNiArMjk0LDE3IEBACiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSB3YXRjaGRvZyB0aW1lciBvbiBBdmlvbmljCiAJICBEZXNpZ24gWGFudGhvcyBib2FyZHMuCiAKK2NvbmZpZyBUUzcyWFhfV0FUQ0hET0cKKwl0cmlzdGF0ZSAiVFMtNzJYWCBTQkMgV2F0Y2hkb2ciCisJZGVwZW5kcyBvbiBNQUNIX1RTNzJYWAorCWhlbHAKKwkgIFRlY2hub2xvZ2ljIFN5c3RlbXMgVFMtNzIwMCwgVFMtNzI1MCBhbmQgVFMtNzI2MCBib2FyZHMgaGF2ZQorCSAgd2F0Y2hkb2cgdGltZXIgaW1wbGVtZW50ZWQgaW4gYSBleHRlcm5hbCBDUExEIGNoaXAuIFNheSBZIGhlcmUKKwkgIGlmIHlvdSB3YW50IHRvIHN1cHBvcnQgZm9yIHRoZSB3YXRjaGRvZyB0aW1lciBvbiBUUy03MlhYIGJvYXJkcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdHM3Mnh4X3dkdC4KKwogIyBBVlIzMiBBcmNoaXRlY3R1cmUKIAogY29uZmlnIEFUMzJBUDcwMFhfV0RUCkBAIC04NDUsMTAgKzg2MSwxMCBAQAogIyBQT1dFUlBDIEFyY2hpdGVjdHVyZQogCiBjb25maWcgR0VGX1dEVAotCXRyaXN0YXRlICJHRSBGYW51YyBXYXRjaGRvZyBUaW1lciIKKwl0cmlzdGF0ZSAiR0UgV2F0Y2hkb2cgVGltZXIiCiAJZGVwZW5kcyBvbiBHRUZfU0JDNjEwIHx8IEdFRl9TQkMzMTAgfHwgR0VGX1BQQzlBCiAJLS0taGVscC0tLQotCSAgV2F0Y2hkb2cgdGltZXIgZm91bmQgaW4gYSBudW1iZXIgb2YgR0UgRmFudWMgc2luZ2xlIGJvYXJkIGNvbXB1dGVycy4KKwkgIFdhdGNoZG9nIHRpbWVyIGZvdW5kIGluIGEgbnVtYmVyIG9mIEdFIHNpbmdsZSBib2FyZCBjb21wdXRlcnMuCiAKIGNvbmZpZyBNUEM1MjAwX1dEVAogCWJvb2wgIk1QQzUyeHggV2F0Y2hkb2cgVGltZXIiCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlIGIvZHJpdmVycy93YXRjaGRvZy9NYWtlZmlsZQppbmRleCA0NzVjNjExLi41ZTNjYjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvTWFrZWZpbGUKQEAgLTQ2LDYgKzQ2LDcgQEAKIG9iai0kKENPTkZJR19TVE1QM1hYWF9XQVRDSERPRykgKz0gc3RtcDN4eHhfd2R0Lm8KIG9iai0kKENPTkZJR19OVUM5MDBfV0FUQ0hET0cpICs9IG51YzkwMF93ZHQubwogb2JqLSQoQ09ORklHX0FEWF9XQVRDSERPRykgKz0gYWR4X3dkdC5vCitvYmotJChDT05GSUdfVFM3MlhYX1dBVENIRE9HKSArPSB0czcyeHhfd2R0Lm8KIAogIyBBVlIzMiBBcmNoaXRlY3R1cmUKIG9iai0kKENPTkZJR19BVDMyQVA3MDBYX1dEVCkgKz0gYXQzMmFwNzAweF93ZHQubwpAQCAtMTQyLDQgKzE0Myw1IEBACiAjIEFyY2hpdGVjdHVyZSBJbmRlcGVuZGFudAogb2JqLSQoQ09ORklHX1dNODMxWF9XQVRDSERPRykgKz0gd204MzF4X3dkdC5vCiBvYmotJChDT05GSUdfV004MzUwX1dBVENIRE9HKSArPSB3bTgzNTBfd2R0Lm8KK29iai0kKENPTkZJR19NQVg2M1hYX1dBVENIRE9HKSArPSBtYXg2M3h4X3dkdC5vCiBvYmotJChDT05GSUdfU09GVF9XQVRDSERPRykgKz0gc29mdGRvZy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2FjcXVpcmV3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jCmluZGV4IDRkMThjODcuLjJmZmNlNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWNxdWlyZXdkdC5jCkBAIC0xNTAsNyArMTUwLDcgQEAKIAlpbnQgb3B0aW9ucywgcmV0dmFsID0gLUVJTlZBTDsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgX191c2VyICpwID0gYXJncDsKLQlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0gewogCQkub3B0aW9ucyA9IFdESU9GX0tFRVBBTElWRVBJTkcgfCBXRElPRl9NQUdJQ0NMT1NFLAogCQkuZmlybXdhcmVfdmVyc2lvbiA9IDEsCiAJCS5pZGVudGl0eSA9IFdBVENIRE9HX05BTUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2FkdmFudGVjaHdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hZHZhbnRlY2h3ZHQuYwppbmRleCA4MjRkMDc2YS4uNGQ0MDk2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hZHZhbnRlY2h3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2FkdmFudGVjaHdkdC5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIAlpbnQgbmV3X3RpbWVvdXQ7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IF9fdXNlciAqcCA9IGFyZ3A7Ci0Jc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKIAkJLm9wdGlvbnMgPSBXRElPRl9LRUVQQUxJVkVQSU5HIHwKIAkJCSAgIFdESU9GX1NFVFRJTUVPVVQgfAogCQkJICAgV0RJT0ZfTUFHSUNDTE9TRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYWR4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hZHhfd2R0LmMKaW5kZXggOWQ3ZDE1NS4uYTVjYTdhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hZHhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hZHhfd2R0LmMKQEAgLTM3LDcgKzM3LDcgQEAKIAlzcGlubG9ja190IGxvY2s7CiB9OwogCi1zdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gYWR4X3dkdF9pbmZvID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGFkeF93ZHRfaW5mbyA9IHsKIAkuaWRlbnRpdHkgPSAiQXZpb25pYyBEZXNpZ24gWGFudGhvcyBXYXRjaGRvZyIsCiAJLm9wdGlvbnMgPSBXRElPRl9TRVRUSU1FT1VUIHwgV0RJT0ZfS0VFUEFMSVZFUElORywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2FsaW0xNTM1X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9hbGltMTUzNV93ZHQuYwppbmRleCA5MzdhODBmLi4xZTljYWVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2FsaW0xNTM1X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTE1MzVfd2R0LmMKQEAgLTE4MCw3ICsxODAsNyBAQAogewogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCBfX3VzZXIgKnAgPSBhcmdwOwotCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJCS5vcHRpb25zID0JCVdESU9GX0tFRVBBTElWRVBJTkcgfAogCQkJCQlXRElPRl9TRVRUSU1FT1VUIHwKIAkJCQkJV0RJT0ZfTUFHSUNDTE9TRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTcxMDFfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2FsaW03MTAxX3dkdC5jCmluZGV4IGY5MGFmZGIuLmQ4ZDRkYTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYWxpbTcxMDFfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9hbGltNzEwMV93ZHQuYwpAQCAtMjM4LDcgKzIzOCw3IEBACiB7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IF9fdXNlciAqcCA9IGFyZ3A7Ci0Jc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKIAkJLm9wdGlvbnMgPSBXRElPRl9LRUVQQUxJVkVQSU5HIHwgV0RJT0ZfU0VUVElNRU9VVAogCQkJCQkJCXwgV0RJT0ZfTUFHSUNDTE9TRSwKIAkJLmZpcm13YXJlX3ZlcnNpb24gPSAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9hcjdfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2FyN193ZHQuYwppbmRleCAyYmI5NWNkLi5jNzY0YzUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2FyN193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2FyN193ZHQuYwpAQCAtMjE5LDcgKzIxOSw3IEBACiBzdGF0aWMgbG9uZyBhcjdfd2R0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0gewogCQkuaWRlbnRpdHkgPSBMT05HTkFNRSwKIAkJLmZpcm13YXJlX3ZlcnNpb24gPSAxLAogCQkub3B0aW9ucyA9IChXRElPRl9TRVRUSU1FT1VUIHwgV0RJT0ZfS0VFUEFMSVZFUElORyB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2F0MzJhcDcwMHhfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2F0MzJhcDcwMHhfd2R0LmMKaW5kZXggMDM3ODQ3OS4uNjg3MzM3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hdDMyYXA3MDB4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYXQzMmFwNzAweF93ZHQuYwpAQCAtMjAyLDcgKzIwMiw3IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGF0MzJfd2R0X2luZm8gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gYXQzMl93ZHRfaW5mbyA9IHsKIAkuaWRlbnRpdHkJPSAiYXQzMmFwNzAweCB3YXRjaGRvZyIsCiAJLm9wdGlvbnMJPSBXRElPRl9TRVRUSU1FT1VUIHwKIAkJCSAgV0RJT0ZfS0VFUEFMSVZFUElORyB8CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2F0OTFybTkyMDBfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2F0OTFybTkyMDBfd2R0LmMKaW5kZXggYjE4NWRhZi4uYjMwNDZkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9hdDkxcm05MjAwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvYXQ5MXJtOTIwMF93ZHQuYwpAQCAtMTIxLDcgKzEyMSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBhdDkxX3dkdF9pbmZvID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGF0OTFfd2R0X2luZm8gPSB7CiAJLmlkZW50aXR5CT0gImF0OTEgd2F0Y2hkb2ciLAogCS5vcHRpb25zCT0gV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX0tFRVBBTElWRVBJTkcsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9iY200N3h4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9iY200N3h4X3dkdC5jCmluZGV4IDc1MWMwMDMuLjVmMjQ1NTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYmNtNDd4eF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2JjbTQ3eHhfd2R0LmMKQEAgLTE0OSw3ICsxNDksNyBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBiY200N3h4X3dkdF9pbmZvID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGJjbTQ3eHhfd2R0X2luZm8gPSB7CiAJLmlkZW50aXR5IAk9IERSVl9OQU1FLAogCS5vcHRpb25zIAk9IFdESU9GX1NFVFRJTUVPVVQgfAogCQkJCVdESU9GX0tFRVBBTElWRVBJTkcgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9iZmluX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9iZmluX3dkdC5jCmluZGV4IDIxNTllNjYuLjljN2NjZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvYmZpbl93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2JmaW5fd2R0LmMKQEAgLTE5LDggKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9taXNjZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KQEAgLTc0LDcgKzcyLDcgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCB0aW1lb3V0ID0gV0FUQ0hET0dfVElNRU9VVDsKIHN0YXRpYyBpbnQgbm93YXlvdXQgPSBXQVRDSERPR19OT1dBWU9VVDsKLXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBiZmluX3dkdF9pbmZvOworc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGJmaW5fd2R0X2luZm87CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBvcGVuX2NoZWNrOwogc3RhdGljIGNoYXIgZXhwZWN0X2Nsb3NlOwogc3RhdGljIERFRklORV9TUElOTE9DSyhiZmluX3dkdF9zcGlubG9jayk7CkBAIC0zMDksMjYgKzMwNyw2IEBACiAJfQogfQogCi0vKioKLSAqCWJmaW5fd2R0X25vdGlmeV9zeXMgLSBOb3RpZmllciBIYW5kbGVyCi0gKglAdGhpczogbm90aWZpZXIgYmxvY2sKLSAqCUBjb2RlOiBub3RpZmllciBldmVudAotICoJQHVudXNlZDogdW51c2VkCi0gKgotICoJSGFuZGxlcyBzcGVjaWZpYyBldmVudHMsIHN1Y2ggYXMgdHVybmluZyBvZmYgdGhlIHdhdGNoZG9nIGR1cmluZyBhCi0gKglzaHV0ZG93biBldmVudC4KLSAqLwotc3RhdGljIGludCBiZmluX3dkdF9ub3RpZnlfc3lzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywKLQkJCQkJdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICp1bnVzZWQpCi17Ci0Jc3RhbXBpdCgpOwotCi0JaWYgKGNvZGUgPT0gU1lTX0RPV04gfHwgY29kZSA9PSBTWVNfSEFMVCkKLQkJYmZpbl93ZHRfc3RvcCgpOwotCi0JcmV0dXJuIE5PVElGWV9ET05FOwotfQotCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IHN0YXRlX2JlZm9yZV9zdXNwZW5kOwogCkBAIC0zODgsNDAgKzM2NiwyOCBAQAogCS5mb3BzICAgICA9ICZiZmluX3dkdF9mb3BzLAogfTsKIAotc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGJmaW5fd2R0X2luZm8gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gYmZpbl93ZHRfaW5mbyA9IHsKIAkuaWRlbnRpdHkgPSAiQmxhY2tmaW4gV2F0Y2hkb2ciLAogCS5vcHRpb25zICA9IFdESU9GX1NFVFRJTUVPVVQgfAogCQkgICAgV0RJT0ZfS0VFUEFMSVZFUElORyB8CiAJCSAgICBXRElPRl9NQUdJQ0NMT1NFLAogfTsKIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBiZmluX3dkdF9ub3RpZmllciA9IHsKLQkubm90aWZpZXJfY2FsbCA9IGJmaW5fd2R0X25vdGlmeV9zeXMsCi19OwotCiAvKioKICAqCWJmaW5fd2R0X3Byb2JlIC0gSW5pdGlhbGl6ZSBtb2R1bGUKICAqCi0gKglSZWdpc3RlcnMgdGhlIG1pc2MgZGV2aWNlIGFuZCBub3RpZmllciBoYW5kbGVyLiAgQWN0dWFsIGRldmljZQorICoJUmVnaXN0ZXJzIHRoZSBtaXNjIGRldmljZS4gIEFjdHVhbCBkZXZpY2UKICAqCWluaXRpYWxpemF0aW9uIGlzIGhhbmRsZWQgYnkgYmZpbl93ZHRfb3BlbigpLgogICovCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBiZmluX3dkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogewogCWludCByZXQ7CiAKLQlyZXQgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmJmaW5fd2R0X25vdGlmaWVyKTsKLQlpZiAocmV0KSB7Ci0JCXByX2RldmluaXQoS0VSTl9FUlIgUEZYCi0JCQkiY2Fubm90IHJlZ2lzdGVyIHJlYm9vdCBub3RpZmllciAoZXJyPSVkKVxuIiwgcmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0KIAlyZXQgPSBtaXNjX3JlZ2lzdGVyKCZiZmluX3dkdF9taXNjZGV2KTsKIAlpZiAocmV0KSB7CiAJCXByX2RldmluaXQoS0VSTl9FUlIgUEZYCiAJCQkiY2Fubm90IHJlZ2lzdGVyIG1pc2NkZXYgb24gbWlub3I9JWQgKGVycj0lZClcbiIsCiAJCQkJV0FUQ0hET0dfTUlOT1IsIHJldCk7Ci0JCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZiZmluX3dkdF9ub3RpZmllcik7CiAJCXJldHVybiByZXQ7CiAJfQogCkBAIC00MzQsMjEgKzQwMCwzMyBAQAogLyoqCiAgKgliZmluX3dkdF9yZW1vdmUgLSBJbml0aWFsaXplIG1vZHVsZQogICoKLSAqCVVucmVnaXN0ZXJzIHRoZSBtaXNjIGRldmljZSBhbmQgbm90aWZpZXIgaGFuZGxlci4gIEFjdHVhbCBkZXZpY2UKKyAqCVVucmVnaXN0ZXJzIHRoZSBtaXNjIGRldmljZS4gIEFjdHVhbCBkZXZpY2UKICAqCWRlaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZCBieSBiZmluX3dkdF9jbG9zZSgpLgogICovCiBzdGF0aWMgaW50IF9fZGV2ZXhpdCBiZmluX3dkdF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAltaXNjX2RlcmVnaXN0ZXIoJmJmaW5fd2R0X21pc2NkZXYpOwotCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZiZmluX3dkdF9ub3RpZmllcik7CiAJcmV0dXJuIDA7CiB9CiAKKy8qKgorICoJYmZpbl93ZHRfc2h1dGRvd24gLSBTb2Z0IFNodXRkb3duIEhhbmRsZXIKKyAqCisgKglIYW5kbGVzIHRoZSBzb2Z0IHNodXRkb3duIGV2ZW50LgorICovCitzdGF0aWMgdm9pZCBiZmluX3dkdF9zaHV0ZG93bihzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0YW1waXQoKTsKKworCWJmaW5fd2R0X3N0b3AoKTsKK30KKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmJmaW5fd2R0X2RldmljZTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYmZpbl93ZHRfZHJpdmVyID0gewogCS5wcm9iZSAgICAgPSBiZmluX3dkdF9wcm9iZSwKIAkucmVtb3ZlICAgID0gX19kZXZleGl0X3AoYmZpbl93ZHRfcmVtb3ZlKSwKKwkuc2h1dGRvd24gID0gYmZpbl93ZHRfc2h1dGRvd24sCiAJLnN1c3BlbmQgICA9IGJmaW5fd2R0X3N1c3BlbmQsCiAJLnJlc3VtZSAgICA9IGJmaW5fd2R0X3Jlc3VtZSwKIAkuZHJpdmVyICAgID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9ib29rZV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvYm9va2Vfd2R0LmMKaW5kZXggZTgzODBlZi4uOGI3MjRhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9ib29rZV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2Jvb2tlX3dkdC5jCkBAIC0xMjEsNyArMTIxLDcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKIAkub3B0aW9ucyA9IFdESU9GX1NFVFRJTUVPVVQgfCBXRElPRl9LRUVQQUxJVkVQSU5HLAogCS5pZGVudGl0eSA9ICJQb3dlclBDIEJvb2stRSBXYXRjaGRvZyIsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9jb2g5MDEzMjdfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2NvaDkwMTMyN193ZHQuYwppbmRleCA5MjNjYzY4Li45MjkxNTA2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2NvaDkwMTMyN193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2NvaDkwMTMyN193ZHQuYwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAJCXN0cnVjdCB3YXRjaGRvZ19pbmZvIF9fdXNlciAqaWRlbnQ7CiAJCWludCBfX3VzZXIgKmk7CiAJfSB1YXJnOwotCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJCS5vcHRpb25zCQk9IFdESU9GX0NBUkRSRVNFVCB8CiAJCQkJCSAgV0RJT0ZfU0VUVElNRU9VVCB8CiAJCQkJCSAgV0RJT0ZfS0VFUEFMSVZFUElORywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvY3B1NXdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9jcHU1d2R0LmMKaW5kZXggNzFmNmQ3ZS4uZWRkMzQ3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9jcHU1d2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9jcHU1d2R0LmMKQEAgLTE1NCw3ICsxNTQsNyBAQAogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCBfX3VzZXIgKnAgPSBhcmdwOwogCXVuc2lnbmVkIGludCB2YWx1ZTsKLQlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0gewogCQkub3B0aW9ucyA9IFdESU9GX0NBUkRSRVNFVCwKIAkJLmlkZW50aXR5ID0gIkNQVTUgV0RUIiwKIAl9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9jcHdkLmMgYi9kcml2ZXJzL3dhdGNoZG9nL2Nwd2QuYwppbmRleCAwODFmMjk1Li4zN2VhMDUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2Nwd2QuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2Nwd2QuYwpAQCAtNDAzLDcgKzQwMyw3IEBACiAKIHN0YXRpYyBsb25nIGNwd2RfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpbmZvID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpbmZvID0gewogCQkub3B0aW9ucwkJPSBXRElPRl9TRVRUSU1FT1VULAogCQkuZmlybXdhcmVfdmVyc2lvbgk9IDEsCiAJCS5pZGVudGl0eQkJPSBEUklWRVJfTkFNRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvZGF2aW5jaV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvZGF2aW5jaV93ZHQuYwppbmRleCA4ODcxMzZkLi41NjE2MmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2RhdmluY2lfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9kYXZpbmNpX3dkdC5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJLm9wdGlvbnMgPSBXRElPRl9LRUVQQUxJVkVQSU5HLAogCS5pZGVudGl0eSA9ICJEYVZpbmNpIFdhdGNoZG9nIiwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2VwOTN4eF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvZXA5M3h4X3dkdC5jCmluZGV4IGNkZDU1ZTAuLjg4ZWQ1NGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvZXA5M3h4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvZXA5M3h4X3dkdC5jCkBAIC0xMzEsNyArMTMxLDcgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJLm9wdGlvbnMgPSBXRElPRl9DQVJEUkVTRVQgfCBXRElPRl9NQUdJQ0NMT1NFLAogCS5pZGVudGl0eSA9ICJFUDkzeHggV2F0Y2hkb2ciLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvZXVyb3RlY2h3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvZXVyb3RlY2h3ZHQuYwppbmRleCA5YWRkMzU0Li5kMWM0ZTU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2V1cm90ZWNod2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9ldXJvdGVjaHdkdC5jCkBAIC0yMzgsNyArMjM4LDcgQEAKIHsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgX191c2VyICpwID0gYXJncDsKLQlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0gewogCQkub3B0aW9ucwkgID0gV0RJT0ZfS0VFUEFMSVZFUElORyB8IFdESU9GX1NFVFRJTUVPVVQKIAkJCQkJCQl8IFdESU9GX01BR0lDQ0xPU0UsCiAJCS5maXJtd2FyZV92ZXJzaW9uID0gMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvZ2VmX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9nZWZfd2R0LmMKaW5kZXggNzM0ZDk4MC4uYWJkYmFkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9nZWZfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9nZWZfd2R0LmMKQEAgLTEsOSArMSw5IEBACiAvKgotICogR0UgRmFudWMgd2F0Y2hkb2cgdXNlcnNwYWNlIGludGVyZmFjZQorICogR0Ugd2F0Y2hkb2cgdXNlcnNwYWNlIGludGVyZmFjZQogICoKLSAqIEF1dGhvcjogIE1hcnR5biBXZWxjaCA8bWFydHluLndlbGNoQGdlZmFudWMuY29tPgorICogQXV0aG9yOiAgTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2UuY29tPgogICoKLSAqIENvcHlyaWdodCAyMDA4IEdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBHRSBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgRW1iZWRkZWQgU3lzdGVtcywgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0xNjEsMTEgKzE2MSwxMSBAQAogCWludCB0aW1lb3V0OwogCWludCBvcHRpb25zOwogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwotCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpbmZvID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpbmZvID0gewogCQkub3B0aW9ucyA9CVdESU9GX1NFVFRJTUVPVVQgfCBXRElPRl9NQUdJQ0NMT1NFIHwKIAkJCQlXRElPRl9LRUVQQUxJVkVQSU5HLAogCQkuZmlybXdhcmVfdmVyc2lvbiA9IDAsCi0JCS5pZGVudGl0eSA9ICJHRSBGYW51YyB3YXRjaGRvZyIsCisJCS5pZGVudGl0eSA9ICJHRSB3YXRjaGRvZyIsCiAJfTsKIAogCXN3aXRjaCAoY21kKSB7CkBAIC0zMTEsNyArMzExLDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgZ2VmX3dkdF9pbml0KHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiR0UgRmFudWMgd2F0Y2hkb2cgZHJpdmVyXG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJHRSB3YXRjaGRvZyBkcml2ZXJcbiIpOwogCXJldHVybiBvZl9yZWdpc3Rlcl9wbGF0Zm9ybV9kcml2ZXIoJmdlZl93ZHRfZHJpdmVyKTsKIH0KIApAQCAtMzIzLDggKzMyMyw4IEBACiBtb2R1bGVfaW5pdChnZWZfd2R0X2luaXQpOwogbW9kdWxlX2V4aXQoZ2VmX3dkdF9leGl0KTsKIAotTU9EVUxFX0FVVEhPUigiTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2VmYW51Yy5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkdFIEZhbnVjIHdhdGNoZG9nIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2UuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHRSB3YXRjaGRvZyBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKIE1PRFVMRV9BTElBUygicGxhdGZvcm06IGdlZl93ZHQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvZ2VvZGV3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvZ2VvZGV3ZHQuYwppbmRleCAzODI1MmZmLi45YjQ5YjEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2dlb2Rld2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9nZW9kZXdkdC5jCkBAIC0xNDIsNyArMTQyLDcgQEAKIAlpbnQgX191c2VyICpwID0gYXJncDsKIAlpbnQgaW50ZXJ2YWw7CiAKLQlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0gewogCQkub3B0aW9ucyA9IFdESU9GX1NFVFRJTUVPVVQgfCBXRElPRl9LRUVQQUxJVkVQSU5HCiAJCXwgV0RJT0ZfTUFHSUNDTE9TRSwKIAkJLmZpcm13YXJlX3ZlcnNpb24gPSAgICAgMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaHB3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaHB3ZHQuYwppbmRleCBhNmM1Njc0Li43MGMyYzI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2hwd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9ocHdkdC5jCkBAIC01NTQsNyArNTU0LDcgQEAKIAlyZXR1cm4gbGVuOwogfQogCi1zdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJLm9wdGlvbnMgPSBXRElPRl9TRVRUSU1FT1VUIHwKIAkJICAgV0RJT0ZfS0VFUEFMSVZFUElORyB8CiAJCSAgIFdESU9GX01BR0lDQ0xPU0UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2k2MzAwZXNiLmMgYi9kcml2ZXJzL3dhdGNoZG9nL2k2MzAwZXNiLmMKaW5kZXggN2JhMGIxMS4uYmI5NzUwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9pNjMwMGVzYi5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvaTYzMDBlc2IuYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+Ci0jaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgpAQCAtNDIsNyArNDEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKIC8qIE1vZHVsZSBhbmQgdmVyc2lvbiBpbmZvcm1hdGlvbiAqLwotI2RlZmluZSBFU0JfVkVSU0lPTiAiMC4wNCIKKyNkZWZpbmUgRVNCX1ZFUlNJT04gIjAuMDUiCiAjZGVmaW5lIEVTQl9NT0RVTEVfTkFNRSAiaTYzMDBFU0IgdGltZXIiCiAjZGVmaW5lIEVTQl9EUklWRVJfTkFNRSBFU0JfTU9EVUxFX05BTUUgIiwgdiIgRVNCX1ZFUlNJT04KICNkZWZpbmUgUEZYIEVTQl9NT0RVTEVfTkFNRSAiOiAiCkBAIC02NSw3ICs2NCw3IEBACiAvKiBDb25maWcgcmVnaXN0ZXIgYml0cyAqLwogI2RlZmluZSBFU0JfV0RUX1JFQk9PVCAgKDB4MDEgPDwgNSkgICAvKiBFbmFibGUgcmVib290IG9uIHRpbWVvdXQgICAgICAgICAgKi8KICNkZWZpbmUgRVNCX1dEVF9GUkVRICAgICgweDAxIDw8IDIpICAgLyogRGVjcmVtZW50IGZyZXF1ZW5jeSAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVTQl9XRFRfSU5UVFlQRSAoMHgxMSA8PCAwKSAgIC8qIEludGVycnVwdCB0eXBlIG9uIHRpbWVyMSB0aW1lb3V0ICAqLworI2RlZmluZSBFU0JfV0RUX0lOVFRZUEUgKDB4MDMgPDwgMCkgICAvKiBJbnRlcnJ1cHQgdHlwZSBvbiB0aW1lcjEgdGltZW91dCAgKi8KIAogLyogUmVsb2FkIHJlZ2lzdGVyIGJpdHMgKi8KICNkZWZpbmUgRVNCX1dEVF9USU1FT1VUICgweDAxIDw8IDkpICAgIC8qIFdhdGNoZG9nIHRpbWVkIG91dCAgICAgICAgICAgICAgICAqLwpAQCAtODIsNyArODEsOSBAQAogc3RhdGljIHN0cnVjdCBwY2lfZGV2ICplc2JfcGNpOwogc3RhdGljIHVuc2lnbmVkIHNob3J0IHRyaWdnZXJlZDsgLyogVGhlIHN0YXR1cyBvZiB0aGUgd2F0Y2hkb2cgdXBvbiBib290ICovCiBzdGF0aWMgY2hhciBlc2JfZXhwZWN0X2Nsb3NlOwotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmVzYl9wbGF0Zm9ybV9kZXZpY2U7CisKKy8qIFdlIGNhbiBvbmx5IHVzZSAxIGNhcmQgZHVlIHRvIHRoZSAvZGV2L3dhdGNoZG9nIHJlc3RyaWN0aW9uICovCitzdGF0aWMgaW50IGNhcmRzX2ZvdW5kOwogCiAvKiBtb2R1bGUgcGFyYW1ldGVycyAqLwogLyogMzAgc2VjIGRlZmF1bHQgaGVhcnRiZWF0ICgxIDwgaGVhcnRiZWF0IDwgMioxMDIzKSAqLwpAQCAtMTExLDggKzExMiw4IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBlc2JfdW5sb2NrX3JlZ2lzdGVycyh2b2lkKQogewotCXdyaXRlYihFU0JfVU5MT0NLMSwgRVNCX1JFTE9BRF9SRUcpOwotCXdyaXRlYihFU0JfVU5MT0NLMiwgRVNCX1JFTE9BRF9SRUcpOworCXdyaXRldyhFU0JfVU5MT0NLMSwgRVNCX1JFTE9BRF9SRUcpOworCXdyaXRldyhFU0JfVU5MT0NLMiwgRVNCX1JFTE9BRF9SRUcpOwogfQogCiBzdGF0aWMgaW50IGVzYl90aW1lcl9zdGFydCh2b2lkKQpAQCAtMjU2LDcgKzI1Nyw3IEBACiAJaW50IG5ld19oZWFydGJlYXQ7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IF9fdXNlciAqcCA9IGFyZ3A7Ci0Jc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKIAkJLm9wdGlvbnMgPQkJV0RJT0ZfU0VUVElNRU9VVCB8CiAJCQkJCVdESU9GX0tFRVBBTElWRVBJTkcgfAogCQkJCQlXRElPRl9NQUdJQ0NMT1NFLApAQCAtMzMyLDExICszMzMsNiBAQAogCiAvKgogICogRGF0YSBmb3IgUENJIGRyaXZlciBpbnRlcmZhY2UKLSAqCi0gKiBUaGlzIGRhdGEgb25seSBleGlzdHMgZm9yIGV4cG9ydGluZyB0aGUgc3VwcG9ydGVkCi0gKiBQQ0kgaWRzIHZpYSBNT0RVTEVfREVWSUNFX1RBQkxFLiAgV2UgZG8gbm90IGFjdHVhbGx5Ci0gKiByZWdpc3RlciBhIHBjaV9kcml2ZXIsIGJlY2F1c2Ugc29tZW9uZSBlbHNlIG1pZ2h0IG9uZSBkYXkKLSAqIHdhbnQgdG8gcmVnaXN0ZXIgYW5vdGhlciBkcml2ZXIgb24gdGhlIHNhbWUgUENJIGlkLgogICovCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZXNiX3BjaV90YmxbXSA9IHsKIAl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF9FU0JfOSksIH0sCkBAIC0zNDgsMjkgKzM0NCwxOSBAQAogICogICAgICBJbml0ICYgZXhpdCByb3V0aW5lcwogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIF9fZGV2aW5pdCBlc2JfZ2V0ZGV2aWNlKHZvaWQpCitzdGF0aWMgdW5zaWduZWQgY2hhciBfX2RldmluaXQgZXNiX2dldGRldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQkvKgotCSAqICAgICAgRmluZCB0aGUgUENJIGRldmljZQotCSAqLwotCi0JZXNiX3BjaSA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsCi0JCQkJCVBDSV9ERVZJQ0VfSURfSU5URUxfRVNCXzksIE5VTEwpOwotCi0JaWYgKCFlc2JfcGNpKQotCQlyZXR1cm4gMDsKLQotCWlmIChwY2lfZW5hYmxlX2RldmljZShlc2JfcGNpKSkgeworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewogCQlwcmludGsoS0VSTl9FUlIgUEZYICJmYWlsZWQgdG8gZW5hYmxlIGRldmljZVxuIik7CiAJCWdvdG8gZXJyX2RldnB1dDsKIAl9CiAKLQlpZiAocGNpX3JlcXVlc3RfcmVnaW9uKGVzYl9wY2ksIDAsIEVTQl9NT0RVTEVfTkFNRSkpIHsKKwlpZiAocGNpX3JlcXVlc3RfcmVnaW9uKHBkZXYsIDAsIEVTQl9NT0RVTEVfTkFNRSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJlcXVlc3QgcmVnaW9uXG4iKTsKIAkJZ290byBlcnJfZGlzYWJsZTsKIAl9CiAKLQlCQVNFQUREUiA9IHBjaV9pb3JlbWFwX2Jhcihlc2JfcGNpLCAwKTsKKwlCQVNFQUREUiA9IHBjaV9pb3JlbWFwX2JhcihwZGV2LCAwKTsKIAlpZiAoQkFTRUFERFIgPT0gTlVMTCkgewogCQkvKiBTb21ldGhpbmcncyB3cm9uZyBoZXJlLCBCQVNFQUREUiBoYXMgdG8gYmUgc2V0ICovCiAJCXByaW50ayhLRVJOX0VSUiBQRlggImZhaWxlZCB0byBnZXQgQkFTRUFERFJcbiIpOwpAQCAtMzc4LDE0ICszNjQsMTQgQEAKIAl9CiAKIAkvKiBEb25lICovCisJZXNiX3BjaSA9IHBkZXY7CiAJcmV0dXJuIDE7CiAKIGVycl9yZWxlYXNlOgotCXBjaV9yZWxlYXNlX3JlZ2lvbihlc2JfcGNpLCAwKTsKKwlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7CiBlcnJfZGlzYWJsZToKLQlwY2lfZGlzYWJsZV9kZXZpY2UoZXNiX3BjaSk7CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOwogZXJyX2RldnB1dDoKLQlwY2lfZGV2X3B1dChlc2JfcGNpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDMwLDEyICs0MTYsMjMgQEAKIAllc2JfdGltZXJfc2V0X2hlYXJ0YmVhdChoZWFydGJlYXQpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBlc2JfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIGludCBfX2RldmluaXQgZXNiX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCWludCByZXQ7CiAKKwljYXJkc19mb3VuZCsrOworCWlmIChjYXJkc19mb3VuZCA9PSAxKQorCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiSW50ZWwgNjMwMEVTQiBXYXRjaERvZyBUaW1lciBEcml2ZXIgdiVzXG4iLAorCQkJRVNCX1ZFUlNJT04pOworCisJaWYgKGNhcmRzX2ZvdW5kID4gMSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJUaGlzIGRyaXZlciBvbmx5IHN1cHBvcnRzIDEgZGV2aWNlXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCiAJLyogQ2hlY2sgd2hldGhlciBvciBub3QgdGhlIGhhcmR3YXJlIHdhdGNoZG9nIGlzIHRoZXJlICovCi0JaWYgKCFlc2JfZ2V0ZGV2aWNlKCkgfHwgZXNiX3BjaSA9PSBOVUxMKQorCWlmICghZXNiX2dldGRldmljZShwZGV2KSB8fCBlc2JfcGNpID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogQ2hlY2sgdGhhdCB0aGUgaGVhcnRiZWF0IHZhbHVlIGlzIHdpdGhpbiBpdCdzIHJhbmdlOwpAQCAtNDY3LDExICs0NjQsMTEgQEAKIAlpb3VubWFwKEJBU0VBRERSKTsKIAlwY2lfcmVsZWFzZV9yZWdpb24oZXNiX3BjaSwgMCk7CiAJcGNpX2Rpc2FibGVfZGV2aWNlKGVzYl9wY2kpOwotCXBjaV9kZXZfcHV0KGVzYl9wY2kpOworCWVzYl9wY2kgPSBOVUxMOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgX19kZXZleGl0IGVzYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgX19kZXZleGl0IGVzYl9yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CiAJLyogU3RvcCB0aGUgdGltZXIgYmVmb3JlIHdlIGxlYXZlICovCiAJaWYgKCFub3dheW91dCkKQEAgLTQ4Miw1NCArNDc5LDMwIEBACiAJaW91bm1hcChCQVNFQUREUik7CiAJcGNpX3JlbGVhc2VfcmVnaW9uKGVzYl9wY2ksIDApOwogCXBjaV9kaXNhYmxlX2RldmljZShlc2JfcGNpKTsKLQlwY2lfZGV2X3B1dChlc2JfcGNpKTsKLQlyZXR1cm4gMDsKKwllc2JfcGNpID0gTlVMTDsKIH0KIAotc3RhdGljIHZvaWQgZXNiX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIGVzYl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAllc2JfdGltZXJfc3RvcCgpOwogfQogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBlc2JfcGxhdGZvcm1fZHJpdmVyID0geworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGVzYl9kcml2ZXIgPSB7CisJLm5hbWUJCT0gRVNCX01PRFVMRV9OQU1FLAorCS5pZF90YWJsZQk9IGVzYl9wY2lfdGJsLAogCS5wcm9iZSAgICAgICAgICA9IGVzYl9wcm9iZSwKIAkucmVtb3ZlICAgICAgICAgPSBfX2RldmV4aXRfcChlc2JfcmVtb3ZlKSwKIAkuc2h1dGRvd24gICAgICAgPSBlc2Jfc2h1dGRvd24sCi0JLmRyaXZlciAgICAgICAgID0gewotCQkub3duZXIgID0gVEhJU19NT0RVTEUsCi0JCS5uYW1lICAgPSBFU0JfTU9EVUxFX05BTUUsCi0JfSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHdhdGNoZG9nX2luaXQodm9pZCkKIHsKLQlpbnQgZXJyOwotCi0JcHJpbnRrKEtFUk5fSU5GTyBQRlggIkludGVsIDYzMDBFU0IgV2F0Y2hEb2cgVGltZXIgRHJpdmVyIHYlc1xuIiwKLQkJRVNCX1ZFUlNJT04pOwotCi0JZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZlc2JfcGxhdGZvcm1fZHJpdmVyKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JZXNiX3BsYXRmb3JtX2RldmljZSA9IHBsYXRmb3JtX2RldmljZV9yZWdpc3Rlcl9zaW1wbGUoRVNCX01PRFVMRV9OQU1FLAotCQkJCQkJCQktMSwgTlVMTCwgMCk7Ci0JaWYgKElTX0VSUihlc2JfcGxhdGZvcm1fZGV2aWNlKSkgewotCQllcnIgPSBQVFJfRVJSKGVzYl9wbGF0Zm9ybV9kZXZpY2UpOwotCQlnb3RvIHVucmVnX3BsYXRmb3JtX2RyaXZlcjsKLQl9Ci0KLQlyZXR1cm4gMDsKLQotdW5yZWdfcGxhdGZvcm1fZHJpdmVyOgotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZlc2JfcGxhdGZvcm1fZHJpdmVyKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZlc2JfZHJpdmVyKTsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHdhdGNoZG9nX2NsZWFudXAodm9pZCkKIHsKLQlwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcihlc2JfcGxhdGZvcm1fZGV2aWNlKTsKLQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmZXNiX3BsYXRmb3JtX2RyaXZlcik7CisJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZlc2JfZHJpdmVyKTsKIAlwcmludGsoS0VSTl9JTkZPIFBGWCAiV2F0Y2hkb2cgTW9kdWxlIFVubG9hZGVkLlxuIik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaVRDT193ZHQuYwppbmRleCA0YmRiN2YxLi40NGJjNmFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2lUQ09fd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pVENPX3dkdC5jCkBAIC01ODQsNyArNTg0LDcgQEAKIAlpbnQgbmV3X2hlYXJ0YmVhdDsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgX191c2VyICpwID0gYXJncDsKLQlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0gewogCQkub3B0aW9ucyA9CQlXRElPRl9TRVRUSU1FT1VUIHwKIAkJCQkJV0RJT0ZfS0VFUEFMSVZFUElORyB8CiAJCQkJCVdESU9GX01BR0lDQ0xPU0UsCkBAIC02OTgsNyArNjk4LDcgQEAKIAlpZiAoaVRDT193ZHRfcHJpdmF0ZS5pVENPX3ZlcnNpb24gPT0gMikgewogCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHhmMCwgJmJhc2VfYWRkcmVzcyk7CiAJCWlmICgoYmFzZV9hZGRyZXNzICYgMSkgPT0gMCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUkNCQSBpcyBkaXNhYmxlZCBieSBoYXJkZHdhcmVcbiIpOworCQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiUkNCQSBpcyBkaXNhYmxlZCBieSBoYXJkd2FyZVxuIik7CiAJCQlyZXQgPSAtRU5PREVWOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTcwOCw4ICs3MDgsOCBAQAogCiAJLyogQ2hlY2sgY2hpcHNldCdzIE5PX1JFQk9PVCBiaXQgKi8KIAlpZiAoaVRDT193ZHRfdW5zZXRfTk9fUkVCT09UX2JpdCgpICYmIGlUQ09fdmVuZG9yX2NoZWNrX25vcmVib290X29uKCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZmFpbGVkIHRvIHJlc2V0IE5PX1JFQk9PVCBmbGFnLCAiCi0JCQkJCSJyZWJvb3QgZGlzYWJsZWQgYnkgaGFyZHdhcmVcbiIpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAidW5hYmxlIHRvIHJlc2V0IE5PX1JFQk9PVCBmbGFnLCAiCisJCQkJCSJwbGF0Zm9ybSBtYXkgaGF2ZSBkaXNhYmxlZCBpdFxuIik7CiAJCXJldCA9IC1FTk9ERVY7CS8qIENhbm5vdCByZXNldCBOT19SRUJPT1QgYml0ICovCiAJCWdvdG8gb3V0X3VubWFwOwogCX0KQEAgLTgwNSw2ICs4MDUsNyBAQAogCiBzdGF0aWMgaW50IF9fZGV2aW5pdCBpVENPX3dkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CisJaW50IHJldCA9IC1FTk9ERVY7CiAJaW50IGZvdW5kID0gMDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudDsKQEAgLTgxNCwxOSArODE1LDE3IEBACiAJZm9yX2VhY2hfcGNpX2RldihwZGV2KSB7CiAJCWVudCA9IHBjaV9tYXRjaF9pZChpVENPX3dkdF9wY2lfdGJsLCBwZGV2KTsKIAkJaWYgKGVudCkgewotCQkJaWYgKCEoaVRDT193ZHRfaW5pdChwZGV2LCBlbnQsIGRldikpKSB7Ci0JCQkJZm91bmQrKzsKKwkJCWZvdW5kKys7CisJCQlyZXQgPSBpVENPX3dkdF9pbml0KHBkZXYsIGVudCwgZGV2KTsKKwkJCWlmICghcmV0KQogCQkJCWJyZWFrOwotCQkJfQogCQl9CiAJfQogCi0JaWYgKCFmb3VuZCkgeworCWlmICghZm91bmQpCiAJCXByaW50ayhLRVJOX0lORk8gUEZYICJObyBjYXJkIGRldGVjdGVkXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCBfX2RldmV4aXQgaVRDT193ZHRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaWI3MDB3ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaWI3MDB3ZHQuYwppbmRleCA0YmVmM2RkLi4wMTQ5ZDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2liNzAwd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pYjcwMHdkdC5jCkBAIC0xNzQsNyArMTc0LDcgQEAKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgX191c2VyICpwID0gYXJncDsKIAotCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJCS5vcHRpb25zID0gV0RJT0ZfS0VFUEFMSVZFUElORyB8IFdESU9GX1NFVFRJTUVPVVQKIAkJCQkJCQl8IFdESU9GX01BR0lDQ0xPU0UsCiAJCS5maXJtd2FyZV92ZXJzaW9uID0gMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaW5keWRvZy5jIGIvZHJpdmVycy93YXRjaGRvZy9pbmR5ZG9nLmMKaW5kZXggYmVhOGExMi4uMWNjNTYwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9pbmR5ZG9nLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pbmR5ZG9nLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogCQkJCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQogewogCWludCBvcHRpb25zLCByZXR2YWwgPSAtRUlOVkFMOwotCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJCS5vcHRpb25zCQk9IFdESU9GX0tFRVBBTElWRVBJTkcsCiAJCS5maXJtd2FyZV92ZXJzaW9uCT0gMCwKIAkJLmlkZW50aXR5CQk9ICJIYXJkd2FyZSBXYXRjaGRvZyBmb3IgU0dJIElQMjIiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9pdDg3MTJmX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9pdDg3MTJmX3dkdC5jCmluZGV4IGRhZWQ0OGQuLmY1MmMxNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaXQ4NzEyZl93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2l0ODcxMmZfd2R0LmMKQEAgLTIzNiw3ICsyMzYsNyBAQAogewogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCBfX3VzZXIgKnAgPSBhcmdwOwotCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJCS5pZGVudGl0eSA9ICJJVDg3MTJGIFdhdGNoZG9nIiwKIAkJLmZpcm13YXJlX3ZlcnNpb24gPSAxLAogCQkub3B0aW9ucyA9IFdESU9GX1NFVFRJTUVPVVQgfCBXRElPRl9LRUVQQUxJVkVQSU5HIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaXQ4N193ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaXQ4N193ZHQuYwppbmRleCBjYzEzM2M1Li5iNzA5YjNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2l0ODdfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9pdDg3X3dkdC5jCkBAIC00MjEsNyArNDIxLDcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKIAkub3B0aW9ucyA9IFdESU9GX1NFVFRJTUVPVVQgfCBXRElPRl9NQUdJQ0NMT1NFIHwgV0RJT0ZfS0VFUEFMSVZFUElORywKIAkuZmlybXdhcmVfdmVyc2lvbiA9CTEsCiAJLmlkZW50aXR5ID0gV0FUQ0hET0dfTkFNRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvaXhwMjAwMF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaXhwMjAwMF93ZHQuYwppbmRleCAzYzc5ZGM1Li5lODY5NTJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2l4cDIwMDBfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9peHAyMDAwX3dkdC5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJLm9wdGlvbnMJPSBXRElPRl9NQUdJQ0NMT1NFIHwgV0RJT0ZfU0VUVElNRU9VVCB8CiAJCQkJV0RJT0ZfS0VFUEFMSVZFUElORywKIAkuaWRlbnRpdHkJPSAiSVhQMjAwMCBXYXRjaGRvZyIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL2l4cDR4eF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvaXhwNHh4X3dkdC5jCmluZGV4IDE0N2I0ZDUuLmUwMmMwZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaXhwNHh4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvaXhwNHh4X3dkdC5jCkBAIC04OSw3ICs4OSw3IEBACiAJcmV0dXJuIGxlbjsKIH0KIAotc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0gewogCS5vcHRpb25zCT0gV0RJT0ZfQ0FSRFJFU0VUIHwgV0RJT0ZfTUFHSUNDTE9TRSB8CiAJCQkgIFdESU9GX1NFVFRJTUVPVVQgfCBXRElPRl9LRUVQQUxJVkVQSU5HLAogCS5pZGVudGl0eQk9ICJJWFA0eHggV2F0Y2hkb2ciLApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9rczg2OTVfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL2tzODY5NV93ZHQuYwppbmRleCBlMWM4Mjc2Li4yODUyYmIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL2tzODY5NV93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2tzODY5NV93ZHQuYwpAQCAtMTQ1LDcgKzE0NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBrczg2OTVfd2R0X2luZm8gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8ga3M4Njk1X3dkdF9pbmZvID0gewogCS5pZGVudGl0eQk9ICJrczg2OTUgd2F0Y2hkb2ciLAogCS5vcHRpb25zCT0gV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX0tFRVBBTElWRVBJTkcsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9tYWNoendkLmMgYi9kcml2ZXJzL3dhdGNoZG9nL21hY2h6d2QuYwppbmRleCA0N2Q3MTk3Li4yZDExOGNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL21hY2h6d2QuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL21hY2h6d2QuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAKICNkZWZpbmUgUEZYICJtYWNoendkIgogCi1zdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gemZfaW5mbyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyB6Zl9pbmZvID0gewogCS5vcHRpb25zCQk9IFdESU9GX0tFRVBBTElWRVBJTkcgfCBXRElPRl9NQUdJQ0NMT1NFLAogCS5maXJtd2FyZV92ZXJzaW9uCT0gMSwKIAkuaWRlbnRpdHkJCT0gIlpGLUxvZ2ljIHdhdGNoZG9nIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbWF4NjN4eF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbWF4NjN4eF93ZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWI5MWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy93YXRjaGRvZy9tYXg2M3h4X3dkdC5jCkBAIC0wLDAgKzEsMzk3IEBACisvKgorICogZHJpdmVycy9jaGFyL3dhdGNoZG9nL21heDYzeHhfd2R0LmMKKyAqCisgKiBEcml2ZXIgZm9yIG1heDYzezY5LDcwLDcxLDcyLDczLDc0fSB3YXRjaGRvZyB0aW1lcnMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFyYyBaeW5naWVyIDxtYXpAbWlzdGVyam9uZXMub3JnPgorICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICogVGhpcyBkcml2ZXIgYXNzdW1lcyB0aGUgd2F0Y2hkb2cgcGlucyBhcmUgbWVtb3J5IG1hcHBlZCAoYXMgaXQgaXMKKyAqIHRoZSBjYXNlIGZvciB0aGUgQXJjb20gWmV1cykuIFNob3VsZCBpdCBiZSBjb25uZWN0ZWQgb3ZlciBHUElPcyBvcgorICogYW5vdGhlciBpbnRlcmZhY2UsIHNvbWUgYWJzdHJhY3Rpb24gd2lsbCBoYXZlIHRvIGJlIGludHJvZHVjZWQuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorCisjZGVmaW5lIERFRkFVTFRfSEVBUlRCRUFUIDYwCisjZGVmaW5lIE1BWF9IRUFSVEJFQVQgICAgIDYwCisKK3N0YXRpYyBpbnQgaGVhcnRiZWF0ID0gREVGQVVMVF9IRUFSVEJFQVQ7CitzdGF0aWMgaW50IG5vd2F5b3V0ICA9IFdBVENIRE9HX05PV0FZT1VUOworCisvKgorICogTWVtb3J5IG1hcHBpbmc6IGEgc2luZ2xlIGJ5dGUsIDMgZmlyc3QgbG93ZXIgYml0cyB0byBzZWxlY3QgYml0IDMKKyAqIHRvIHBpbmcgdGhlIHdhdGNoZG9nLgorICovCisjZGVmaW5lIE1BWDYzNjlfV0RTRVQJKDcgPDwgMCkKKyNkZWZpbmUgTUFYNjM2OV9XREkgICAJKDEgPDwgMykKKworc3RhdGljIERFRklORV9TUElOTE9DSyhpb19sb2NrKTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgd2R0X3N0YXR1czsKKyNkZWZpbmUgV0RUX0lOX1VTRQkwCisjZGVmaW5lIFdEVF9SVU5OSU5HCTEKKyNkZWZpbmUgV0RUX09LX1RPX0NMT1NFIDIKKworc3RhdGljIGludCBub2RlbGF5Oworc3RhdGljIHN0cnVjdCByZXNvdXJjZQkqd2R0X21lbTsKK3N0YXRpYyB2b2lkIF9faW9tZW0JKndkdF9iYXNlOworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm1heDYzeHhfcGRldjsKKworLyoKKyAqIFRoZSB0aW1lb3V0IHZhbHVlcyB1c2VkIGFyZSBhY3R1YWxseSB0aGUgYWJzb2x1dGUgbWluaW11bSB0aGUgY2hpcAorICogb2ZmZXJzLiBUeXBpY2FsIHZhbHVlcyBvbiBteSBib2FyZCBhcmUgc2xpZ2h0bHkgb3ZlciB0d2ljZSBhcyBsb25nCisgKiAoMTBzIHNldHRpbmcgZW5kcyB1cCB3aXRoIGEgMjVzIHRpbWVvdXQpLCBhbmQgY2FuIGJlIHVwIHRvIDMgdGltZXMKKyAqIHRoZSBub21pbmFsIHNldHRpbmcgKGFjY29yZGluZyB0byB0aGUgZGF0YXNoZWV0KS4gU28gcGxlYXNlIHRha2UKKyAqIHRoZXNlIHZhbHVlcyB3aXRoIGEgZ3JhaW4gb2Ygc2FsdC4gU2FtZSBnb2VzIGZvciB0aGUgaW5pdGlhbCBkZWxheQorICogImZlYXR1cmUiLiBPbmx5IG1heDYzNzMvNzQgaGF2ZSBhIGZldyBzZXR0aW5ncyB3aXRob3V0IHRoaXMgaW5pdGlhbAorICogZGVsYXkgKHNlbGVjdGVkIHdpdGggdGhlICJub2RlbGF5IiBwYXJhbWV0ZXIpLgorICoKKyAqIEkgYWxzbyBkZWNpZGVkIHRvIHJlbW92ZSBmcm9tIHRoZSB0YWJsZXMgYW55IHRpbWVvdXQgc21hbGxlciB0aGFuIGEKKyAqIHNlY29uZCwgYXMgaXQgbG9va2VkIGNvbXBsZXRseSBvdmVya2lsbC4uLgorICovCisKKy8qIFRpbWVvdXRzIGluIHNlY29uZCAqLworc3RydWN0IG1heDYzeHhfdGltZW91dCB7CisJdTggd2RzZXQ7CisJdTggdGRlbGF5OworCXU4IHR3ZDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF4NjN4eF90aW1lb3V0IG1heDYzNjlfdGFibGVbXSA9IHsKKwl7IDUsICAxLCAgMSB9LAorCXsgNiwgMTAsIDEwIH0sCisJeyA3LCA2MCwgNjAgfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IG1heDYzeHhfdGltZW91dCBtYXg2MzcxX3RhYmxlW10gPSB7CisJeyA2LCA2MCwgIDMgfSwKKwl7IDcsIDYwLCA2MCB9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWF4NjN4eF90aW1lb3V0IG1heDYzNzNfdGFibGVbXSA9IHsKKwl7IDIsIDYwLCAgMSB9LAorCXsgNSwgIDAsICAxIH0sCisJeyAxLCAgMywgIDMgfSwKKwl7IDcsIDYwLCAxMCB9LAorCXsgNiwgIDAsIDEwIH0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCBtYXg2M3h4X3RpbWVvdXQgKmN1cnJlbnRfdGltZW91dDsKKworc3RhdGljIHN0cnVjdCBtYXg2M3h4X3RpbWVvdXQgKgorbWF4NjN4eF9zZWxlY3RfdGltZW91dChzdHJ1Y3QgbWF4NjN4eF90aW1lb3V0ICp0YWJsZSwgaW50IHZhbHVlKQoreworCXdoaWxlICh0YWJsZS0+dHdkKSB7CisJCWlmICh2YWx1ZSA8PSB0YWJsZS0+dHdkKSB7CisJCQlpZiAobm9kZWxheSAmJiB0YWJsZS0+dGRlbGF5ID09IDApCisJCQkJcmV0dXJuIHRhYmxlOworCisJCQlpZiAoIW5vZGVsYXkpCisJCQkJcmV0dXJuIHRhYmxlOworCQl9CisKKwkJdGFibGUrKzsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQgbWF4NjN4eF93ZHRfcGluZyh2b2lkKQoreworCXU4IHZhbDsKKworCXNwaW5fbG9jaygmaW9fbG9jayk7CisKKwl2YWwgPSBfX3Jhd19yZWFkYih3ZHRfYmFzZSk7CisKKwlfX3Jhd193cml0ZWIodmFsIHwgTUFYNjM2OV9XREksIHdkdF9iYXNlKTsKKwlfX3Jhd193cml0ZWIodmFsICYgfk1BWDYzNjlfV0RJLCB3ZHRfYmFzZSk7CisKKwlzcGluX3VubG9jaygmaW9fbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIG1heDYzeHhfd2R0X2VuYWJsZShzdHJ1Y3QgbWF4NjN4eF90aW1lb3V0ICplbnRyeSkKK3sKKwl1OCB2YWw7CisKKwlpZiAodGVzdF9hbmRfc2V0X2JpdChXRFRfUlVOTklORywgJndkdF9zdGF0dXMpKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2soJmlvX2xvY2spOworCisJdmFsID0gX19yYXdfcmVhZGIod2R0X2Jhc2UpOworCXZhbCAmPSB+TUFYNjM2OV9XRFNFVDsKKwl2YWwgfD0gZW50cnktPndkc2V0OworCV9fcmF3X3dyaXRlYih2YWwsIHdkdF9iYXNlKTsKKworCXNwaW5fdW5sb2NrKCZpb19sb2NrKTsKKworCS8qIGNoZWNrIGZvciBhIGVkZ2UgdHJpZ2dlcmVkIHN0YXJ0dXAgKi8KKwlpZiAoZW50cnktPnRkZWxheSA9PSAwKQorCQltYXg2M3h4X3dkdF9waW5nKCk7Cit9CisKK3N0YXRpYyB2b2lkIG1heDYzeHhfd2R0X2Rpc2FibGUodm9pZCkKK3sKKwlzcGluX2xvY2soJmlvX2xvY2spOworCisJX19yYXdfd3JpdGViKDMsIHdkdF9iYXNlKTsKKworCXNwaW5fdW5sb2NrKCZpb19sb2NrKTsKKworCWNsZWFyX2JpdChXRFRfUlVOTklORywgJndkdF9zdGF0dXMpOworfQorCitzdGF0aWMgaW50IG1heDYzeHhfd2R0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoV0RUX0lOX1VTRSwgJndkdF9zdGF0dXMpKQorCQlyZXR1cm4gLUVCVVNZOworCisJbWF4NjN4eF93ZHRfZW5hYmxlKGN1cnJlbnRfdGltZW91dCk7CisJY2xlYXJfYml0KFdEVF9PS19UT19DTE9TRSwgJndkdF9zdGF0dXMpOworCisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCitzdGF0aWMgc3NpemVfdCBtYXg2M3h4X3dkdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqZGF0YSwKKwkJCQkgc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKQoreworCWlmIChsZW4pIHsKKwkJaWYgKCFub3dheW91dCkgeworCQkJc2l6ZV90IGk7CisKKwkJCWNsZWFyX2JpdChXRFRfT0tfVE9fQ0xPU0UsICZ3ZHRfc3RhdHVzKTsKKwkJCWZvciAoaSA9IDA7IGkgIT0gbGVuOyBpKyspIHsKKwkJCQljaGFyIGM7CisKKwkJCQlpZiAoZ2V0X3VzZXIoYywgZGF0YSArIGkpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJCWlmIChjID09ICdWJykKKwkJCQkJc2V0X2JpdChXRFRfT0tfVE9fQ0xPU0UsICZ3ZHRfc3RhdHVzKTsKKwkJCX0KKwkJfQorCisJCW1heDYzeHhfd2R0X3BpbmcoKTsKKwl9CisKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CisJLm9wdGlvbnMgPSBXRElPRl9NQUdJQ0NMT1NFIHwgV0RJT0ZfS0VFUEFMSVZFUElORywKKwkuaWRlbnRpdHkgPSAibWF4NjN4eCBXYXRjaGRvZyIsCit9OworCitzdGF0aWMgbG9uZyBtYXg2M3h4X3dkdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCByZXQgPSAtRU5PVFRZOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFdESU9DX0dFVFNVUFBPUlQ6CisJCXJldCA9IGNvcHlfdG9fdXNlcigoc3RydWN0IHdhdGNoZG9nX2luZm8gKilhcmcsICZpZGVudCwKKwkJCQkgICBzaXplb2YoaWRlbnQpKSA/IC1FRkFVTFQgOiAwOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgorCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKKwkJcmV0ID0gcHV0X3VzZXIoMCwgKGludCAqKWFyZyk7CisJCWJyZWFrOworCisJY2FzZSBXRElPQ19LRUVQQUxJVkU6CisJCW1heDYzeHhfd2R0X3BpbmcoKTsKKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisKKwljYXNlIFdESU9DX0dFVFRJTUVPVVQ6CisJCXJldCA9IHB1dF91c2VyKGhlYXJ0YmVhdCwgKGludCAqKWFyZyk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1heDYzeHhfd2R0X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaWYgKHRlc3RfYml0KFdEVF9PS19UT19DTE9TRSwgJndkdF9zdGF0dXMpKQorCQltYXg2M3h4X3dkdF9kaXNhYmxlKCk7CisJZWxzZQorCQlkZXZfY3JpdCgmbWF4NjN4eF9wZGV2LT5kZXYsCisJCQkgImRldmljZSBjbG9zZWQgdW5leHBlY3RlZGx5IC0gdGltZXIgd2lsbCBub3Qgc3RvcFxuIik7CisKKwljbGVhcl9iaXQoV0RUX0lOX1VTRSwgJndkdF9zdGF0dXMpOworCWNsZWFyX2JpdChXRFRfT0tfVE9fQ0xPU0UsICZ3ZHRfc3RhdHVzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtYXg2M3h4X3dkdF9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKKwkud3JpdGUJCT0gbWF4NjN4eF93ZHRfd3JpdGUsCisJLnVubG9ja2VkX2lvY3RsCT0gbWF4NjN4eF93ZHRfaW9jdGwsCisJLm9wZW4JCT0gbWF4NjN4eF93ZHRfb3BlbiwKKwkucmVsZWFzZQk9IG1heDYzeHhfd2R0X3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgbWF4NjN4eF93ZHRfbWlzY2RldiA9IHsKKwkubWlub3IJPSBXQVRDSERPR19NSU5PUiwKKwkubmFtZQk9ICJ3YXRjaGRvZyIsCisJLmZvcHMJPSAmbWF4NjN4eF93ZHRfZm9wcywKK307CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG1heDYzeHhfd2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJaW50IHJldCA9IDA7CisJaW50IHNpemU7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwlzdHJ1Y3QgbWF4NjN4eF90aW1lb3V0ICp0YWJsZTsKKworCXRhYmxlID0gKHN0cnVjdCBtYXg2M3h4X3RpbWVvdXQgKilwZGV2LT5pZF9lbnRyeS0+ZHJpdmVyX2RhdGE7CisKKwlpZiAoaGVhcnRiZWF0IDwgMSB8fCBoZWFydGJlYXQgPiBNQVhfSEVBUlRCRUFUKQorCQloZWFydGJlYXQgPSBERUZBVUxUX0hFQVJUQkVBVDsKKworCWRldl9pbmZvKGRldiwgInJlcXVlc3RpbmcgJWRzIGhlYXJ0YmVhdFxuIiwgaGVhcnRiZWF0KTsKKwljdXJyZW50X3RpbWVvdXQgPSBtYXg2M3h4X3NlbGVjdF90aW1lb3V0KHRhYmxlLCBoZWFydGJlYXQpOworCisJaWYgKCFjdXJyZW50X3RpbWVvdXQpIHsKKwkJZGV2X2VycihkZXYsICJ1bmFibGUgdG8gc2F0aXNmeSBoZWFydGJlYXQgcmVxdWVzdFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWRldl9pbmZvKGRldiwgInVzaW5nICVkcyBoZWFydGJlYXQgd2l0aCAlZHMgaW5pdGlhbCBkZWxheVxuIiwKKwkJIGN1cnJlbnRfdGltZW91dC0+dHdkLCBjdXJyZW50X3RpbWVvdXQtPnRkZWxheSk7CisKKwloZWFydGJlYXQgPSBjdXJyZW50X3RpbWVvdXQtPnR3ZDsKKworCW1heDYzeHhfcGRldiA9IHBkZXY7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlZ2lvbiByZXNvdXJjZVxuIik7CisJCXJldHVybiAtRU5PRU5UOworCX0KKworCXNpemUgPSByZXNvdXJjZV9zaXplKHJlcyk7CisJd2R0X21lbSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihyZXMtPnN0YXJ0LCBzaXplLCBwZGV2LT5uYW1lKTsKKworCWlmICh3ZHRfbWVtID09IE5VTEwpIHsKKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IG1lbW9yeSByZWdpb25cbiIpOworCQlyZXR1cm4gLUVOT0VOVDsKKwl9CisKKwl3ZHRfYmFzZSA9IGlvcmVtYXAocmVzLT5zdGFydCwgc2l6ZSk7CisJaWYgKCF3ZHRfYmFzZSkgeworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBtYXAgbWVtb3J5IHJlZ2lvblxuIik7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gb3V0X3JlcXVlc3Q7CisJfQorCisJcmV0ID0gbWlzY19yZWdpc3RlcigmbWF4NjN4eF93ZHRfbWlzY2Rldik7CisJaWYgKHJldCA8IDApIHsKKwkJZGV2X2VycihkZXYsICJjYW5ub3QgcmVnaXN0ZXIgbWlzYyBkZXZpY2VcbiIpOworCQlnb3RvIG91dF91bm1hcDsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X3VubWFwOgorCWlvdW5tYXAod2R0X2Jhc2UpOworb3V0X3JlcXVlc3Q6CisJcmVsZWFzZV9yZXNvdXJjZSh3ZHRfbWVtKTsKKwlrZnJlZSh3ZHRfbWVtKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IG1heDYzeHhfd2R0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCW1pc2NfZGVyZWdpc3RlcigmbWF4NjN4eF93ZHRfbWlzY2Rldik7CisJaWYgKHdkdF9tZW0pIHsKKwkJcmVsZWFzZV9yZXNvdXJjZSh3ZHRfbWVtKTsKKwkJa2ZyZWUod2R0X21lbSk7CisJCXdkdF9tZW0gPSBOVUxMOworCX0KKworCWlmICh3ZHRfYmFzZSkKKwkJaW91bm1hcCh3ZHRfYmFzZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgbWF4NjN4eF9pZF90YWJsZVtdID0geworCXsgIm1heDYzNjlfd2R0IiwgKGtlcm5lbF91bG9uZ190KW1heDYzNjlfdGFibGUsIH0sCisJeyAibWF4NjM3MF93ZHQiLCAoa2VybmVsX3Vsb25nX3QpbWF4NjM2OV90YWJsZSwgfSwKKwl7ICJtYXg2MzcxX3dkdCIsIChrZXJuZWxfdWxvbmdfdCltYXg2MzcxX3RhYmxlLCB9LAorCXsgIm1heDYzNzJfd2R0IiwgKGtlcm5lbF91bG9uZ190KW1heDYzNzFfdGFibGUsIH0sCisJeyAibWF4NjM3M193ZHQiLCAoa2VybmVsX3Vsb25nX3QpbWF4NjM3M190YWJsZSwgfSwKKwl7ICJtYXg2Mzc0X3dkdCIsIChrZXJuZWxfdWxvbmdfdCltYXg2MzczX3RhYmxlLCB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHBsYXRmb3JtLCBtYXg2M3h4X2lkX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbWF4NjN4eF93ZHRfZHJpdmVyID0geworCS5wcm9iZQkJPSBtYXg2M3h4X3dkdF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG1heDYzeHhfd2R0X3JlbW92ZSksCisJLmlkX3RhYmxlCT0gbWF4NjN4eF9pZF90YWJsZSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAibWF4NjN4eF93ZHQiLAorCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2luaXQgbWF4NjN4eF93ZHRfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm1heDYzeHhfd2R0X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtYXg2M3h4X3dkdF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm1heDYzeHhfd2R0X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1heDYzeHhfd2R0X2luaXQpOworbW9kdWxlX2V4aXQobWF4NjN4eF93ZHRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1hcmMgWnluZ2llciA8bWF6QG1pc3RlcmpvbmVzLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigibWF4NjN4eCBXYXRjaGRvZyBEcml2ZXIiKTsKKworbW9kdWxlX3BhcmFtKGhlYXJ0YmVhdCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaGVhcnRiZWF0LAorCQkgIldhdGNoZG9nIGhlYXJ0YmVhdCBwZXJpb2QgaW4gc2Vjb25kcyBmcm9tIDEgdG8gIgorCQkgX19NT0RVTEVfU1RSSU5HKE1BWF9IRUFSVEJFQVQpICIsIGRlZmF1bHQgIgorCQkgX19NT0RVTEVfU1RSSU5HKERFRkFVTFRfSEVBUlRCRUFUKSk7CisKK21vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9IgorCQkgX19NT0RVTEVfU1RSSU5HKFdBVENIRE9HX05PV0FZT1VUKSAiKSIpOworCittb2R1bGVfcGFyYW0obm9kZWxheSwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0Mobm9kZWxheSwKKwkJICJGb3JjZSBzZWxlY3Rpb24gb2YgYSB0aW1lb3V0IHNldHRpbmcgd2l0aG91dCBpbml0aWFsIGRlbGF5ICIKKwkJICIobWF4NjM3My83NCBvbmx5LCBkZWZhdWx0PTApIik7CisKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBU19NSVNDREVWKFdBVENIRE9HX01JTk9SKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbWl4Y29td2QuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbWl4Y29td2QuYwppbmRleCA0MDdiMDI1Li5iYzgyMGQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL21peGNvbXdkLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9taXhjb213ZC5jCkBAIC0yMDEsNyArMjAxLDcgQEAKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgX191c2VyICpwID0gYXJncDsKIAlpbnQgc3RhdHVzOwotCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJCS5vcHRpb25zID0gV0RJT0ZfS0VFUEFMSVZFUElORyB8IFdESU9GX01BR0lDQ0xPU0UsCiAJCS5maXJtd2FyZV92ZXJzaW9uID0gMSwKIAkJLmlkZW50aXR5ID0gIk1peENPTSB3YXRjaGRvZyIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL21wYzh4eHhfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL21wYzh4eHhfd2R0LmMKaW5kZXggMzhjNTg4ZS4uNGUzOTQxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9tcGM4eHh4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXBjOHh4eF93ZHQuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiB7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IF9fdXNlciAqcCA9IGFyZ3A7Ci0Jc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKIAkJLm9wdGlvbnMgPSBXRElPRl9LRUVQQUxJVkVQSU5HLAogCQkuZmlybXdhcmVfdmVyc2lvbiA9IDEsCiAJCS5pZGVudGl0eSA9ICJNUEM4eHh4IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbXBjb3JlX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9tcGNvcmVfd2R0LmMKaW5kZXggYTJkYzA3Yy4uYjA2NDZkYSAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9tcGNvcmVfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9tcGNvcmVfd2R0LmMKQEAgLTIxMyw3ICsyMTMsNyBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKIAkub3B0aW9ucwkJPSBXRElPRl9TRVRUSU1FT1VUIHwKIAkJCQkgIFdESU9GX0tFRVBBTElWRVBJTkcgfAogCQkJCSAgV0RJT0ZfTUFHSUNDTE9TRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvbXY2NHg2MF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvbXY2NHg2MF93ZHQuYwppbmRleCBhNTFkYmU0Li45N2Y4YTQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL212NjR4NjBfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9tdjY0eDYwX3dkdC5jCkBAIC0xNzksNyArMTc5LDcgQEAKIAlpbnQgdGltZW91dDsKIAlpbnQgb3B0aW9uczsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKLQlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaW5mbyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaW5mbyA9IHsKIAkJLm9wdGlvbnMgPQlXRElPRl9TRVRUSU1FT1VUCXwKIAkJCQlXRElPRl9NQUdJQ0NMT1NFCXwKIAkJCQlXRElPRl9LRUVQQUxJVkVQSU5HLApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wYzg3NDEzX3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9wYzg3NDEzX3dkdC5jCmluZGV4IDFhMmI5MTYuLmQzYWEyZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcGM4NzQxM193ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3BjODc0MTNfd2R0LmMKQEAgLTQwNyw3ICs0MDcsNyBAQAogCQlpbnQgX191c2VyICppOwogCX0gdWFyZzsKIAotCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJCS5vcHRpb25zICAgICAgICAgID0gV0RJT0ZfS0VFUEFMSVZFUElORyB8CiAJCQkJICAgIFdESU9GX1NFVFRJTUVPVVQgfAogCQkJCSAgICBXRElPRl9NQUdJQ0NMT1NFLApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wY3dkLmMgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2QuYwppbmRleCBhYTk1MTIzLi4wNmY3OTIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Bjd2QuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2QuYwpAQCAtNjA2LDcgKzYwNiw3IEBACiAJaW50IHRlbXBlcmF0dXJlOwogCWludCBuZXdfaGVhcnRiZWF0OwogCWludCBfX3VzZXIgKmFyZ3AgPSAoaW50IF9fdXNlciAqKWFyZzsKLQlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0gewogCQkub3B0aW9ucyA9CQlXRElPRl9PVkVSSEVBVCB8CiAJCQkJCVdESU9GX0NBUkRSRVNFVCB8CiAJCQkJCVdESU9GX0tFRVBBTElWRVBJTkcgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wY3dkX3BjaS5jIGIvZHJpdmVycy93YXRjaGRvZy9wY3dkX3BjaS5jCmluZGV4IDY5OGY1MWJmLi42NDM3NGQ2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfcGNpLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9wY3dkX3BjaS5jCkBAIC00ODEsNyArNDgxLDcgQEAKIHsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgX191c2VyICpwID0gYXJncDsKLQlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CisJc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0gewogCQkub3B0aW9ucyA9CQlXRElPRl9PVkVSSEVBVCB8CiAJCQkJCVdESU9GX0NBUkRSRVNFVCB8CiAJCQkJCVdESU9GX0tFRVBBTElWRVBJTkcgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wY3dkX3VzYi5jIGIvZHJpdmVycy93YXRjaGRvZy9wY3dkX3VzYi5jCmluZGV4IDA1MmZlNDUuLjhlNGVhY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcGN3ZF91c2IuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3Bjd2RfdXNiLmMKQEAgLTQwNCw3ICs0MDQsNyBAQAogewogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCWludCBfX3VzZXIgKnAgPSBhcmdwOwotCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJCS5vcHRpb25zID0JCVdESU9GX0tFRVBBTElWRVBJTkcgfAogCQkJCQlXRElPRl9TRVRUSU1FT1VUIHwKIAkJCQkJV0RJT0ZfTUFHSUNDTE9TRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcGlrYV93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcGlrYV93ZHQuYwppbmRleCAyZDIyZTk5Li40MzVlYzJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Bpa2Ffd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9waWthX3dkdC5jCkBAIC01Miw3ICs1Miw3IEBACiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CS8qIFRoZSB0aW1lciB0aGF0IHBpbmdzIHRoZSB3YXRjaGRvZyAqLwogfSBwaWthd2R0X3ByaXZhdGU7CiAKLXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKIAkuaWRlbnRpdHkJPSBEUlZfTkFNRSwKIAkub3B0aW9ucwk9IFdESU9GX0NBUkRSRVNFVCB8CiAJCQkgIFdESU9GX1NFVFRJTUVPVVQgfApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9wbng4MzN4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9wbng4MzN4X3dkdC5jCmluZGV4IDUzOGVjMmMuLjA5MTAyZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvcG54ODMzeF93ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3BueDgzM3hfd2R0LmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCWludCBvcHRpb25zLCBuZXdfdGltZW91dCA9IDA7CiAJdWludDMyX3QgdGltZW91dCwgdGltZW91dF9sZWZ0ID0gMDsKIAotCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJCS5vcHRpb25zID0gV0RJT0ZfS0VFUEFMSVZFUElORyB8IFdESU9GX1NFVFRJTUVPVVQsCiAJCS5maXJtd2FyZV92ZXJzaW9uID0gMCwKIAkJLmlkZW50aXR5ID0gIkhhcmR3YXJlIFdhdGNoZG9nIGZvciBQTlg4MzN4IiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcmMzMjQzNF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcmMzMjQzNF93ZHQuYwppbmRleCBiZjEyZDA2Li5kNGMyOWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3JjMzI0MzRfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9yYzMyNDM0X3dkdC5jCkBAIC0xOTgsNyArMTk4LDcgQEAKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAlpbnQgbmV3X3RpbWVvdXQ7CiAJdW5zaWduZWQgaW50IHZhbHVlOwotCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJCS5vcHRpb25zID0JCVdESU9GX1NFVFRJTUVPVVQgfAogCQkJCQlXRElPRl9LRUVQQUxJVkVQSU5HIHwKIAkJCQkJV0RJT0ZfTUFHSUNDTE9TRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcmRjMzIxeF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcmRjMzIxeF93ZHQuYwppbmRleCA0OTc2YmZkLi42OWM2YWRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3JkYzMyMXhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9yZGMzMjF4X3dkdC5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIHsKIAl2b2lkIF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWFyZzsKIAl1bnNpZ25lZCBpbnQgdmFsdWU7Ci0Jc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKIAkJLm9wdGlvbnMgPSBXRElPRl9DQVJEUkVTRVQsCiAJCS5pZGVudGl0eSA9ICJSREMzMjF4IFdEVCIsCiAJfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvcmlvd2QuYwppbmRleCBjMTRhZTg2Li5hZTU3YmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3Jpb3dkLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9yaW93ZC5jCkBAIC04NSw3ICs4NSw3IEBACiAKIHN0YXRpYyBsb25nIHJpb3dkX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKLQlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaW5mbyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaW5mbyA9IHsKIAkJLm9wdGlvbnMJCT0gV0RJT0ZfU0VUVElNRU9VVCwKIAkJLmZpcm13YXJlX3ZlcnNpb24JPSAxLAogCQkuaWRlbnRpdHkJCT0gRFJJVkVSX05BTUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3NiY19maXRwYzJfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3NiY19maXRwYzJfd2R0LmMKaW5kZXggZTY3NjNkMi4uOGQ0NGM5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy9zYmNfZml0cGMyX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2JjX2ZpdHBjMl93ZHQuYwpAQCAtMTExLDcgKzExMSw3IEBACiB9CiAKIAotc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0gewogCS5vcHRpb25zCT0gV0RJT0ZfTUFHSUNDTE9TRSB8IFdESU9GX1NFVFRJTUVPVVQgfAogCQkJCVdESU9GX0tFRVBBTElWRVBJTkcsCiAJLmlkZW50aXR5CT0gV0FUQ0hET0dfTkFNRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc2NoMzExeF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvc2NoMzExeF93ZHQuYwppbmRleCA1NjllYjI5Li45YzQwZjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3NjaDMxMXhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zY2gzMTF4X3dkdC5jCkBAIC0yNTAsNyArMjUwLDcgQEAKIAlpbnQgbmV3X3RpbWVvdXQ7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IF9fdXNlciAqcCA9IGFyZ3A7Ci0Jc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIGlkZW50ID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKIAkJLm9wdGlvbnMJCT0gV0RJT0ZfS0VFUEFMSVZFUElORyB8CiAJCQkJCSAgV0RJT0ZfU0VUVElNRU9VVCB8CiAJCQkJCSAgV0RJT0ZfTUFHSUNDTE9TRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvc3RtcDN4eHhfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3N0bXAzeHh4X3dkdC5jCmluZGV4IDVkZDk1MjYuLmIzNDIxZmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvc3RtcDN4eHhfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy9zdG1wM3h4eF93ZHQuYwpAQCAtOTQsNyArOTQsNyBAQAogCXJldHVybiBsZW47CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKIAkub3B0aW9ucwk9IFdESU9GX0NBUkRSRVNFVCB8CiAJCQkgIFdESU9GX01BR0lDQ0xPU0UgfAogCQkJICBXRElPRl9TRVRUSU1FT1VUIHwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvdHM3Mnh4X3dkdC5jIGIvZHJpdmVycy93YXRjaGRvZy90czcyeHhfd2R0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY1YTJjMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvdHM3Mnh4X3dkdC5jCkBAIC0wLDAgKzEsNTIwIEBACisvKgorICogV2F0Y2hkb2cgZHJpdmVyIGZvciBUZWNobm9sb2dpYyBTeXN0ZW1zIFRTLTcyeHggYmFzZWQgU0JDcworICogKFRTLTcyMDAsIFRTLTcyNTAgYW5kIFRTLTcyNjApLiBUaGVzZSBib2FyZHMgaGF2ZSBleHRlcm5hbAorICogZ2x1ZSBsb2dpYyBDUExEIGNoaXAsIHdoaWNoIGluY2x1ZGVzIHByb2dyYW1tYWJsZSB3YXRjaGRvZworICogdGltZXIuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA5IE1pa2EgV2VzdGVyYmVyZyA8bWlrYS53ZXN0ZXJiZXJnQGlraS5maT4KKyAqCisgKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiBlcDkzeHhfd2R0IGFuZCB3bTgzMXhfd2R0IGRyaXZlcnMuCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvd2F0Y2hkb2cuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisKKyNkZWZpbmUgVFM3MlhYX1dEVF9GRUVEX1ZBTAkJMHgwNQorI2RlZmluZSBUUzcyWFhfV0RUX0RFRkFVTFRfVElNRU9VVAk4CisKK3N0YXRpYyBpbnQgdGltZW91dCA9IFRTNzJYWF9XRFRfREVGQVVMVF9USU1FT1VUOworbW9kdWxlX3BhcmFtKHRpbWVvdXQsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKHRpbWVvdXQsICJXYXRjaGRvZyB0aW1lb3V0IGluIHNlY29uZHMuICIKKwkJCSAgIigxIDw9IHRpbWVvdXQgPD0gOCwgZGVmYXVsdD0iCisJCQkgIF9fTU9EVUxFX1NUUklORyhUUzcyWFhfV0RUX0RFRkFVTFRfVElNRU9VVCkKKwkJCSAgIikiKTsKKworc3RhdGljIGludCBub3dheW91dCA9IFdBVENIRE9HX05PV0FZT1VUOworbW9kdWxlX3BhcmFtKG5vd2F5b3V0LCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIkRpc2FibGUgd2F0Y2hkb2cgc2h1dGRvd24gb24gY2xvc2UiKTsKKworLyoqCisgKiBzdHJ1Y3QgdHM3Mnh4X3dkdCAtIHdhdGNoZG9nIGNvbnRyb2wgc3RydWN0dXJlCisgKiBAbG9jazogbG9jayB0aGF0IHByb3RlY3RzIHRoaXMgc3RydWN0dXJlCisgKiBAcmVndmFsOiB3YXRjaGRvZyB0aW1lb3V0IHZhbHVlIHN1aXRhYmxlIGZvciBjb250cm9sIHJlZ2lzdGVyCisgKiBAZmxhZ3M6IGZsYWdzIGNvbnRyb2xsaW5nIHdhdGNoZG9nIGRldmljZSBzdGF0ZQorICogQGNvbnRyb2xfcmVnOiB3YXRjaGRvZyBjb250cm9sIHJlZ2lzdGVyCisgKiBAZmVlZF9yZWc6IHdhdGNoZG9nIGZlZWQgcmVnaXN0ZXIKKyAqIEBwZGV2OiBiYWNrIHBvaW50ZXIgdG8gcGxhdGZvcm0gZGV2CisgKi8KK3N0cnVjdCB0czcyeHhfd2R0IHsKKwlzdHJ1Y3QgbXV0ZXgJbG9jazsKKwlpbnQJCXJlZ3ZhbDsKKworI2RlZmluZSBUUzcyWFhfV0RUX0JVU1lfRkxBRwkJMQorI2RlZmluZSBUUzcyWFhfV0RUX0VYUEVDVF9DTE9TRV9GTEFHCTIKKwlpbnQJCWZsYWdzOworCisJdm9pZCBfX2lvbWVtCSpjb250cm9sX3JlZzsKKwl2b2lkIF9faW9tZW0JKmZlZWRfcmVnOworCisJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnRzNzJ4eF93ZHRfcGRldjsKKworLyoKKyAqIFRTLTcyeHggV2F0Y2hkb2cgc3VwcG9ydHMgZm9sbG93aW5nIHRpbWVvdXRzICh2YWx1ZSB3cml0dGVuCisgKiB0byBjb250cm9sIHJlZ2lzdGVyKToKKyAqCXZhbHVlCWRlc2NyaXB0aW9uCisgKgktLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAJMHgwMAl3YXRjaGRvZyBkaXNhYmxlZAorICoJMHgwMQkyNTBtcworICoJMHgwMgk1MDBtcworICoJMHgwMwkxcworICoJMHgwNAlyZXNlcnZlZAorICoJMHgwNQkycworICoJMHgwNgk0cworICoJMHgwNwk4cworICoKKyAqIFRpbWVvdXRzIGJlbG93IDFzIGFyZSBub3QgdmVyeSB1c2FibGUgc28gd2UgZG9uJ3QKKyAqIGFsbG93IHRoZW0gYXQgYWxsLgorICoKKyAqIFdlIHByb3ZpZGUgdHdvIGZ1bmN0aW9ucyB0aGF0IGNvbnZlcnQgYmV0d2VlbiB0aGVzZToKKyAqIHRpbWVvdXRfdG9fcmVndmFsKCkgYW5kIHJlZ3ZhbF90b190aW1lb3V0KCkuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgeworCWludAl0aW1lb3V0OworCWludAlyZWd2YWw7Cit9IHRzNzJ4eF93ZHRfbWFwW10gPSB7CisJeyAxLCAzIH0sCisJeyAyLCA1IH0sCisJeyA0LCA2IH0sCisJeyA4LCA3IH0sCit9OworCisvKioKKyAqIHRpbWVvdXRfdG9fcmVndmFsKCkgLSBjb252ZXJ0cyBnaXZlbiB0aW1lb3V0IHRvIGNvbnRyb2wgcmVnaXN0ZXIgdmFsdWUKKyAqIEBuZXdfdGltZW91dDogdGltZW91dCBpbiBzZWNvbmRzIHRvIGJlIGNvbnZlcnRlZAorICoKKyAqIEZ1bmN0aW9uIGNvbnZlcnRzIGdpdmVuIEBuZXdfdGltZW91dCBpbnRvIHZhbGlkIHZhbHVlIHRoYXQgY2FuCisgKiBiZSBwcm9ncmFtbWVkIGludG8gd2F0Y2hkb2cgY29udHJvbCByZWdpc3Rlci4gV2hlbiBjb252ZXJzaW9uIGlzCisgKiBub3QgcG9zc2libGUsIGZ1bmN0aW9uIHJldHVybnMgJS1FSU5WQUwuCisgKi8KK3N0YXRpYyBpbnQgdGltZW91dF90b19yZWd2YWwoaW50IG5ld190aW1lb3V0KQoreworCWludCBpOworCisJLyogZmlyc3QgbGltaXQgaXQgdG8gMSAtIDggc2Vjb25kcyAqLworCW5ld190aW1lb3V0ID0gY2xhbXBfdmFsKG5ld190aW1lb3V0LCAxLCA4KTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRzNzJ4eF93ZHRfbWFwKTsgaSsrKSB7CisJCWlmICh0czcyeHhfd2R0X21hcFtpXS50aW1lb3V0ID49IG5ld190aW1lb3V0KQorCQkJcmV0dXJuIHRzNzJ4eF93ZHRfbWFwW2ldLnJlZ3ZhbDsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLyoqCisgKiByZWd2YWxfdG9fdGltZW91dCgpIC0gY29udmVydHMgY29udHJvbCByZWdpc3RlciB2YWx1ZSB0byB0aW1lb3V0CisgKiBAcmVndmFsOiBjb250cm9sIHJlZ2lzdGVyIHZhbHVlIHRvIGJlIGNvbnZlcnRlZAorICoKKyAqIEZ1bmN0aW9uIGNvbnZlcnRzIGdpdmVuIEByZWd2YWwgdG8gdGltZW91dCBpbiBzZWNvbmRzICgxLCAyLCA0IG9yIDgpLgorICogSWYgQHJlZ3ZhbCBjYW5ub3QgYmUgY29udmVydGVkLCBmdW5jdGlvbiByZXR1cm5zICUtRUlOVkFMLgorICovCitzdGF0aWMgaW50IHJlZ3ZhbF90b190aW1lb3V0KGludCByZWd2YWwpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0czcyeHhfd2R0X21hcCk7IGkrKykgeworCQlpZiAodHM3Mnh4X3dkdF9tYXBbaV0ucmVndmFsID09IHJlZ3ZhbCkKKwkJCXJldHVybiB0czcyeHhfd2R0X21hcFtpXS50aW1lb3V0OworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCisvKioKKyAqIHRzNzJ4eF93ZHRfa2ljaygpIC0ga2ljayB0aGUgd2F0Y2hkb2cKKyAqIEB3ZHQ6IHdhdGNoZG9nIHRvIGJlIGtpY2tlZAorICoKKyAqIENhbGxlZCB3aXRoIEB3ZHQtPmxvY2sgaGVsZC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIHRzNzJ4eF93ZHRfa2ljayhzdHJ1Y3QgdHM3Mnh4X3dkdCAqd2R0KQoreworCV9fcmF3X3dyaXRlYihUUzcyWFhfV0RUX0ZFRURfVkFMLCB3ZHQtPmZlZWRfcmVnKTsKK30KKworLyoqCisgKiB0czcyeHhfd2R0X3N0YXJ0KCkgLSBzdGFydHMgdGhlIHdhdGNoZG9nIHRpbWVyCisgKiBAd2R0OiB3YXRjaGRvZyB0byBiZSBzdGFydGVkCisgKgorICogVGhpcyBmdW5jdGlvbiBwcm9ncmFtcyB0aW1lb3V0IHRvIHdhdGNoZG9nIHRpbWVyCisgKiBhbmQgc3RhcnRzIGl0LgorICoKKyAqIENhbGxlZCB3aXRoIEB3ZHQtPmxvY2sgaGVsZC4KKyAqLworc3RhdGljIHZvaWQgdHM3Mnh4X3dkdF9zdGFydChzdHJ1Y3QgdHM3Mnh4X3dkdCAqd2R0KQoreworCS8qCisJICogVG8gcHJvZ3JhbSB0aGUgd2R0LCBpdCBmaXJzdCBtdXN0IGJlICJmZWQiIGFuZAorCSAqIG9ubHkgYWZ0ZXIgdGhhdCAod2l0aGluIDMwIHVzZWNzKSB0aGUgY29uZmlndXJhdGlvbgorCSAqIGNhbiBiZSBjaGFuZ2VkLgorCSAqLworCXRzNzJ4eF93ZHRfa2ljayh3ZHQpOworCV9fcmF3X3dyaXRlYigodTgpd2R0LT5yZWd2YWwsIHdkdC0+Y29udHJvbF9yZWcpOworfQorCisvKioKKyAqIHRzNzJ4eF93ZHRfc3RvcCgpIC0gc3RvcHMgdGhlIHdhdGNoZG9nIHRpbWVyCisgKiBAd2R0OiB3YXRjaGRvZyB0byBiZSBzdG9wcGVkCisgKgorICogQ2FsbGVkIHdpdGggQHdkdC0+bG9jayBoZWxkLgorICovCitzdGF0aWMgdm9pZCB0czcyeHhfd2R0X3N0b3Aoc3RydWN0IHRzNzJ4eF93ZHQgKndkdCkKK3sKKwl0czcyeHhfd2R0X2tpY2sod2R0KTsKKwlfX3Jhd193cml0ZWIoMCwgd2R0LT5jb250cm9sX3JlZyk7Cit9CisKK3N0YXRpYyBpbnQgdHM3Mnh4X3dkdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCB0czcyeHhfd2R0ICp3ZHQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YSh0czcyeHhfd2R0X3BkZXYpOworCWludCByZWd2YWw7CisKKwkvKgorCSAqIFRyeSB0byBjb252ZXJ0IGRlZmF1bHQgdGltZW91dCB0byB2YWxpZCByZWdpc3RlcgorCSAqIHZhbHVlIGZpcnN0LgorCSAqLworCXJlZ3ZhbCA9IHRpbWVvdXRfdG9fcmVndmFsKHRpbWVvdXQpOworCWlmIChyZWd2YWwgPCAwKSB7CisJCWRldl9lcnIoJndkdC0+cGRldi0+ZGV2LAorCQkJImZhaWxlZCB0byBjb252ZXJ0IHRpbWVvdXQgKCVkKSB0byByZWdpc3RlciB2YWx1ZVxuIiwKKwkJCXRpbWVvdXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ3ZHQtPmxvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJaWYgKCh3ZHQtPmZsYWdzICYgVFM3MlhYX1dEVF9CVVNZX0ZMQUcpICE9IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZ3ZHQtPmxvY2spOworCQlyZXR1cm4gLUVCVVNZOworCX0KKworCXdkdC0+ZmxhZ3MgPSBUUzcyWFhfV0RUX0JVU1lfRkxBRzsKKwl3ZHQtPnJlZ3ZhbCA9IHJlZ3ZhbDsKKwlmaWxlLT5wcml2YXRlX2RhdGEgPSB3ZHQ7CisKKwl0czcyeHhfd2R0X3N0YXJ0KHdkdCk7CisKKwltdXRleF91bmxvY2soJndkdC0+bG9jayk7CisJcmV0dXJuIG5vbnNlZWthYmxlX29wZW4oaW5vZGUsIGZpbGUpOworfQorCitzdGF0aWMgaW50IHRzNzJ4eF93ZHRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgdHM3Mnh4X3dkdCAqd2R0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmd2R0LT5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCWlmICgod2R0LT5mbGFncyAmIFRTNzJYWF9XRFRfRVhQRUNUX0NMT1NFX0ZMQUcpICE9IDApIHsKKwkJdHM3Mnh4X3dkdF9zdG9wKHdkdCk7CisJfSBlbHNlIHsKKwkJZGV2X3dhcm4oJndkdC0+cGRldi0+ZGV2LAorCQkJICJUUy03MlhYIFdEVCBkZXZpY2UgY2xvc2VkIHVuZXhwZWN0bHkuICIKKwkJCSAiV2F0Y2hkb2cgdGltZXIgd2lsbCBub3Qgc3RvcCFcbiIpOworCQkvKgorCQkgKiBLaWNrIGl0IG9uZSBtb3JlIHRpbWUsIHRvIGdpdmUgdXNlcmxhbmQgc29tZSB0aW1lCisJCSAqIHRvIHJlY292ZXIgKGZvciBleGFtcGxlLCByZXNwYXduaW5nIHRoZSBraWNrZXIKKwkJICogZGFlbW9uKS4KKwkJICovCisJCXRzNzJ4eF93ZHRfa2ljayh3ZHQpOworCX0KKworCXdkdC0+ZmxhZ3MgPSAwOworCisJbXV0ZXhfdW5sb2NrKCZ3ZHQtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCB0czcyeHhfd2R0X3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCWNvbnN0IGNoYXIgX191c2VyICpkYXRhLAorCQkJCXNpemVfdCBsZW4sCisJCQkJbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCB0czcyeHhfd2R0ICp3ZHQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoIWxlbikKKwkJcmV0dXJuIDA7CisKKwlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ3ZHQtPmxvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJdHM3Mnh4X3dkdF9raWNrKHdkdCk7CisKKwkvKgorCSAqIFN1cHBvcnQgZm9yIG1hZ2ljIGNoYXJhY3RlciBjbG9zaW5nLiBVc2VyIHByb2Nlc3MKKwkgKiB3cml0ZXMgJ1YnIGludG8gdGhlIGRldmljZSwganVzdCBiZWZvcmUgaXQgaXMgY2xvc2VkLgorCSAqIFRoaXMgbWVhbnMgdGhhdCB3ZSBrbm93IHRoYXQgdGhlIHdkdCB0aW1lciBjYW4gYmUKKwkgKiBzdG9wcGVkIGFmdGVyIHVzZXIgY2xvc2VzIHRoZSBkZXZpY2UuCisJICovCisJaWYgKCFub3dheW91dCkgeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJCWNoYXIgYzsKKworCQkJLyogSW4gY2FzZSBpdCB3YXMgc2V0IGxvbmcgYWdvICovCisJCQl3ZHQtPmZsYWdzICY9IH5UUzcyWFhfV0RUX0VYUEVDVF9DTE9TRV9GTEFHOworCisJCQlpZiAoZ2V0X3VzZXIoYywgZGF0YSArIGkpKSB7CisJCQkJbXV0ZXhfdW5sb2NrKCZ3ZHQtPmxvY2spOworCQkJCXJldHVybiAtRUZBVUxUOworCQkJfQorCQkJaWYgKGMgPT0gJ1YnKSB7CisJCQkJd2R0LT5mbGFncyB8PSBUUzcyWFhfV0RUX0VYUEVDVF9DTE9TRV9GTEFHOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJbXV0ZXhfdW5sb2NrKCZ3ZHQtPmxvY2spOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyB3aW5mbyA9IHsKKwkub3B0aW9ucwkJPSBXRElPRl9LRUVQQUxJVkVQSU5HIHwgV0RJT0ZfU0VUVElNRU9VVCB8CisJCQkJICBXRElPRl9NQUdJQ0NMT1NFLAorCS5maXJtd2FyZV92ZXJzaW9uCT0gMSwKKwkuaWRlbnRpdHkJCT0gIlRTLTcyWFggV0RUIiwKK307CisKK3N0YXRpYyBsb25nIHRzNzJ4eF93ZHRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCB0czcyeHhfd2R0ICp3ZHQgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CisJaW50IF9fdXNlciAqcCA9IChpbnQgX191c2VyICopYXJncDsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmd2R0LT5sb2NrKSkKKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBXRElPQ19HRVRTVVBQT1JUOgorCQllcnJvciA9IGNvcHlfdG9fdXNlcihhcmdwLCAmd2luZm8sIHNpemVvZih3aW5mbykpOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfR0VUU1RBVFVTOgorCWNhc2UgV0RJT0NfR0VUQk9PVFNUQVRVUzoKKwkJcmV0dXJuIHB1dF91c2VyKDAsIHApOworCisJY2FzZSBXRElPQ19LRUVQQUxJVkU6CisJCXRzNzJ4eF93ZHRfa2ljayh3ZHQpOworCQlicmVhazsKKworCWNhc2UgV0RJT0NfU0VUT1BUSU9OUzogeworCQlpbnQgb3B0aW9uczsKKworCQlpZiAoZ2V0X3VzZXIob3B0aW9ucywgcCkpIHsKKwkJCWVycm9yID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwkJZXJyb3IgPSAtRUlOVkFMOworCisJCWlmICgob3B0aW9ucyAmIFdESU9TX0RJU0FCTEVDQVJEKSAhPSAwKSB7CisJCQl0czcyeHhfd2R0X3N0b3Aod2R0KTsKKwkJCWVycm9yID0gMDsKKwkJfQorCQlpZiAoKG9wdGlvbnMgJiBXRElPU19FTkFCTEVDQVJEKSAhPSAwKSB7CisJCQl0czcyeHhfd2R0X3N0YXJ0KHdkdCk7CisJCQllcnJvciA9IDA7CisJCX0KKworCQlicmVhazsKKwl9CisKKwljYXNlIFdESU9DX1NFVFRJTUVPVVQ6IHsKKwkJaW50IG5ld190aW1lb3V0OworCisJCWlmIChnZXRfdXNlcihuZXdfdGltZW91dCwgcCkpIHsKKwkJCWVycm9yID0gLUVGQVVMVDsKKwkJfSBlbHNlIHsKKwkJCWludCByZWd2YWw7CisKKwkJCXJlZ3ZhbCA9IHRpbWVvdXRfdG9fcmVndmFsKG5ld190aW1lb3V0KTsKKwkJCWlmIChyZWd2YWwgPCAwKSB7CisJCQkJZXJyb3IgPSAtRUlOVkFMOworCQkJfSBlbHNlIHsKKwkJCQl0czcyeHhfd2R0X3N0b3Aod2R0KTsKKwkJCQl3ZHQtPnJlZ3ZhbCA9IHJlZ3ZhbDsKKwkJCQl0czcyeHhfd2R0X3N0YXJ0KHdkdCk7CisJCQl9CisJCX0KKwkJaWYgKGVycm9yKQorCQkJYnJlYWs7CisKKwkJLypGQUxMVEhST1VHSCovCisJfQorCisJY2FzZSBXRElPQ19HRVRUSU1FT1VUOgorCQlpZiAocHV0X3VzZXIocmVndmFsX3RvX3RpbWVvdXQod2R0LT5yZWd2YWwpLCBwKSkKKwkJCWVycm9yID0gLUVGQVVMVDsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQllcnJvciA9IC1FTk9UVFk7CisJCWJyZWFrOworCX0KKworCW11dGV4X3VubG9jaygmd2R0LT5sb2NrKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRzNzJ4eF93ZHRfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmxsc2VlawkJPSBub19sbHNlZWssCisJLm9wZW4JCT0gdHM3Mnh4X3dkdF9vcGVuLAorCS5yZWxlYXNlCT0gdHM3Mnh4X3dkdF9yZWxlYXNlLAorCS53cml0ZQkJPSB0czcyeHhfd2R0X3dyaXRlLAorCS51bmxvY2tlZF9pb2N0bAk9IHRzNzJ4eF93ZHRfaW9jdGwsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgdHM3Mnh4X3dkdF9taXNjZGV2ID0geworCS5taW5vcgkJPSBXQVRDSERPR19NSU5PUiwKKwkubmFtZQkJPSAid2F0Y2hkb2ciLAorCS5mb3BzCQk9ICZ0czcyeHhfd2R0X2ZvcHMsCit9OworCitzdGF0aWMgX19kZXZpbml0IGludCB0czcyeHhfd2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHRzNzJ4eF93ZHQgKndkdDsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnIxLCAqcjI7CisJaW50IGVycm9yID0gMDsKKworCXdkdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0czcyeHhfd2R0KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3ZHQpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXIxID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXIxKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byBnZXQgbWVtb3J5IHJlc291cmNlXG4iKTsKKwkJZXJyb3IgPSAtRU5PREVWOworCQlnb3RvIGZhaWw7CisJfQorCisJcjEgPSByZXF1ZXN0X21lbV9yZWdpb24ocjEtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIxKSwgcGRldi0+bmFtZSk7CisJaWYgKCFyMSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJjYW5ub3QgcmVxdWVzdCBtZW1vcnkgcmVnaW9uXG4iKTsKKwkJZXJyb3IgPSAtRUJVU1k7CisJCWdvdG8gZmFpbDsKKwl9CisKKwl3ZHQtPmNvbnRyb2xfcmVnID0gaW9yZW1hcChyMS0+c3RhcnQsIHJlc291cmNlX3NpemUocjEpKTsKKwlpZiAoIXdkdC0+Y29udHJvbF9yZWcpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIG1hcCBtZW1vcnlcbiIpOworCQllcnJvciA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9mcmVlX2NvbnRyb2w7CisJfQorCisJcjIgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDEpOworCWlmICghcjIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVzb3VyY2VcbiIpOworCQllcnJvciA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF91bm1hcF9jb250cm9sOworCX0KKworCXIyID0gcmVxdWVzdF9tZW1fcmVnaW9uKHIyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyMiksIHBkZXYtPm5hbWUpOworCWlmICghcjIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiY2Fubm90IHJlcXVlc3QgbWVtb3J5IHJlZ2lvblxuIik7CisJCWVycm9yID0gLUVCVVNZOworCQlnb3RvIGZhaWxfdW5tYXBfY29udHJvbDsKKwl9CisKKwl3ZHQtPmZlZWRfcmVnID0gaW9yZW1hcChyMi0+c3RhcnQsIHJlc291cmNlX3NpemUocjIpKTsKKwlpZiAoIXdkdC0+ZmVlZF9yZWcpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIG1hcCBtZW1vcnlcbiIpOworCQllcnJvciA9IC1FTk9ERVY7CisJCWdvdG8gZmFpbF9mcmVlX2ZlZWQ7CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgd2R0KTsKKwl0czcyeHhfd2R0X3BkZXYgPSBwZGV2OworCXdkdC0+cGRldiA9IHBkZXY7CisJbXV0ZXhfaW5pdCgmd2R0LT5sb2NrKTsKKworCWVycm9yID0gbWlzY19yZWdpc3RlcigmdHM3Mnh4X3dkdF9taXNjZGV2KTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIG1pc2NkZXZcbiIpOworCQlnb3RvIGZhaWxfdW5tYXBfZmVlZDsKKwl9CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LCAiVFMtNzJ4eCBXYXRjaGRvZyBkcml2ZXJcbiIpOworCisJcmV0dXJuIDA7CisKK2ZhaWxfdW5tYXBfZmVlZDoKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwlpb3VubWFwKHdkdC0+ZmVlZF9yZWcpOworZmFpbF9mcmVlX2ZlZWQ6CisJcmVsZWFzZV9tZW1fcmVnaW9uKHIyLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyMikpOworZmFpbF91bm1hcF9jb250cm9sOgorCWlvdW5tYXAod2R0LT5jb250cm9sX3JlZyk7CitmYWlsX2ZyZWVfY29udHJvbDoKKwlyZWxlYXNlX21lbV9yZWdpb24ocjEtPnN0YXJ0LCByZXNvdXJjZV9zaXplKHIxKSk7CitmYWlsOgorCWtmcmVlKHdkdCk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgX19kZXZleGl0IGludCB0czcyeHhfd2R0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCB0czcyeHhfd2R0ICp3ZHQgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IG1pc2NfZGVyZWdpc3RlcigmdHM3Mnh4X3dkdF9taXNjZGV2KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWlvdW5tYXAod2R0LT5mZWVkX3JlZyk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAxKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKworCWlvdW5tYXAod2R0LT5jb250cm9sX3JlZyk7CisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZXMpKTsKKworCWtmcmVlKHdkdCk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB0czcyeHhfd2R0X2RyaXZlciA9IHsKKwkucHJvYmUJCT0gdHM3Mnh4X3dkdF9wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHRzNzJ4eF93ZHRfcmVtb3ZlKSwKKwkuZHJpdmVyCQk9IHsKKwkJLm5hbWUJPSAidHM3Mnh4LXdkdCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgX19pbml0IGludCB0czcyeHhfd2R0X2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ0czcyeHhfd2R0X2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdCh0czcyeHhfd2R0X2luaXQpOworCitzdGF0aWMgX19leGl0IHZvaWQgdHM3Mnh4X3dkdF9leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnRzNzJ4eF93ZHRfZHJpdmVyKTsKK30KK21vZHVsZV9leGl0KHRzNzJ4eF93ZHRfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIk1pa2EgV2VzdGVyYmVyZyA8bWlrYS53ZXN0ZXJiZXJnQGlraS5maT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiVFMtNzJ4eCBTQkMgV2F0Y2hkb2ciKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBUygicGxhdGZvcm06dHM3Mnh4LXdkdCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy90eHg5d2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3R4eDl3ZHQuYwppbmRleCBkNjM1NTY2Li45ZTllZDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3R4eDl3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL3R4eDl3ZHQuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC93YXRjaGRvZy5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KQEAgLTE2NiwxNCArMTY1LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgdHh4OXdkdF9ub3RpZnlfc3lzKHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBjb2RlLAotCXZvaWQgKnVudXNlZCkKLXsKLQlpZiAoY29kZSA9PSBTWVNfRE9XTiB8fCBjb2RlID09IFNZU19IQUxUKQotCQl0eHg5d2R0X3N0b3AoKTsKLQlyZXR1cm4gTk9USUZZX0RPTkU7Ci19Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR4eDl3ZHRfZm9wcyA9IHsKIAkub3duZXIJCT0JVEhJU19NT0RVTEUsCiAJLmxsc2VlawkJPQlub19sbHNlZWssCkBAIC0xODksMTAgKzE4MCw2IEBACiAJLmZvcHMJPQkmdHh4OXdkdF9mb3BzLAogfTsKIAotc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayB0eHg5d2R0X25vdGlmaWVyID0gewotCS5ub3RpZmllcl9jYWxsID0gdHh4OXdkdF9ub3RpZnlfc3lzLAotfTsKLQogc3RhdGljIGludCBfX2luaXQgdHh4OXdkdF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHJlc291cmNlICpyZXM7CkBAIC0yMjEsMTMgKzIwOCw4IEBACiAJaWYgKCF0eHg5d2R0X3JlZykKIAkJZ290byBleGl0X2J1c3k7CiAKLQlyZXQgPSByZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnR4eDl3ZHRfbm90aWZpZXIpOwotCWlmIChyZXQpCi0JCWdvdG8gZXhpdDsKLQogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnR4eDl3ZHRfbWlzY2Rldik7CiAJaWYgKHJldCkgewotCQl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmdHh4OXdkdF9ub3RpZmllcik7CiAJCWdvdG8gZXhpdDsKIAl9CiAKQEAgLTI0OSwxNCArMjMxLDE5IEBACiBzdGF0aWMgaW50IF9fZXhpdCB0eHg5d2R0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJbWlzY19kZXJlZ2lzdGVyKCZ0eHg5d2R0X21pc2NkZXYpOwotCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyKCZ0eHg5d2R0X25vdGlmaWVyKTsKIAljbGtfZGlzYWJsZSh0eHg5X2ltY2xrKTsKIAljbGtfcHV0KHR4eDlfaW1jbGspOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCB0eHg5d2R0X3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwl0eHg5d2R0X3N0b3AoKTsKK30KKwogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdHh4OXdkdF9kcml2ZXIgPSB7CiAJLnJlbW92ZSA9IF9fZXhpdF9wKHR4eDl3ZHRfcmVtb3ZlKSwKKwkuc2h1dGRvd24gPSB0eHg5d2R0X3NodXRkb3duLAogCS5kcml2ZXIgPSB7CiAJCS5uYW1lID0gInR4eDl3ZHQiLAogCQkub3duZXIgPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjI3aGZfd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3c4MzYyN2hmX3dkdC5jCmluZGV4IGYyMDFhY2MuLjBmNTI4OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvdzgzNjI3aGZfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy93ODM2MjdoZl93ZHQuYwpAQCAtMjAxLDcgKzIwMSw3IEBACiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IF9fdXNlciAqcCA9IGFyZ3A7CiAJaW50IG5ld190aW1lb3V0OwotCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJCS5vcHRpb25zID0gV0RJT0ZfS0VFUEFMSVZFUElORyB8IFdESU9GX1NFVFRJTUVPVVQgfAogCQkJCQkJCVdESU9GX01BR0lDQ0xPU0UsCiAJCS5maXJtd2FyZV92ZXJzaW9uID0gMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvdzgzOTc3Zl93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvdzgzOTc3Zl93ZHQuYwppbmRleCAwNTYwMTgyLi42ZTY3NDNkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3c4Mzk3N2Zfd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy93ODM5NzdmX3dkdC5jCkBAIC0zNzEsNyArMzcxLDcgQEAKICAqICAgICAgYWNjb3JkaW5nIHRvIHRoZWlyIGF2YWlsYWJsZSBmZWF0dXJlcy4KICAqLwogCi1zdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJLm9wdGlvbnMgPSBXRElPRl9TRVRUSU1FT1VUIHwgV0RJT0ZfTUFHSUNDTE9TRSB8IFdESU9GX0tFRVBBTElWRVBJTkcsCiAJLmZpcm13YXJlX3ZlcnNpb24gPQkxLAogCS5pZGVudGl0eSA9IFdBVENIRE9HX05BTUUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3dkcnRhcy5jIGIvZHJpdmVycy93YXRjaGRvZy93ZHJ0YXMuYwppbmRleCA1YmZiMWYyLi45NGVjMjJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL3dkcnRhcy5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvd2RydGFzLmMKQEAgLTMxMiw3ICszMTIsNyBAQAogewogCWludCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IGk7Ci0Jc3RhdGljIHN0cnVjdCB3YXRjaGRvZ19pbmZvIHdkaW5mbyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHdhdGNoZG9nX2luZm8gd2RpbmZvID0gewogCQkub3B0aW9ucyA9IFdEUlRBU19TVVBQT1JURURfTUFTSywKIAkJLmZpcm13YXJlX3ZlcnNpb24gPSAwLAogCQkuaWRlbnRpdHkgPSAid2RydGFzIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvd2R0LmMgYi9kcml2ZXJzL3dhdGNoZG9nL3dkdC5jCmluZGV4IDNiYmVmZTkuLmJmZGEyZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvd2R0LmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy93ZHQuYwpAQCAtMzU4LDcgKzM1OCw3IEBACiAJaW50IG5ld19oZWFydGJlYXQ7CiAJaW50IHN0YXR1czsKIAotCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKKwlzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKIAkJLm9wdGlvbnMgPQkJV0RJT0ZfU0VUVElNRU9VVHwKIAkJCQkJV0RJT0ZfTUFHSUNDTE9TRXwKIAkJCQkJV0RJT0ZfS0VFUEFMSVZFUElORywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvd2R0X3BjaS5jIGIvZHJpdmVycy93YXRjaGRvZy93ZHRfcGNpLmMKaW5kZXggZjM2OGRkOC4uN2IyMmUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy93YXRjaGRvZy93ZHRfcGNpLmMKKysrIGIvZHJpdmVycy93YXRjaGRvZy93ZHRfcGNpLmMKQEAgLTQxMiw3ICs0MTIsNyBAQAogCWludCBuZXdfaGVhcnRiZWF0OwogCWludCBzdGF0dXM7CiAKLQlzdGF0aWMgc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CisJc3RydWN0IHdhdGNoZG9nX2luZm8gaWRlbnQgPSB7CiAJCS5vcHRpb25zID0JCVdESU9GX1NFVFRJTUVPVVR8CiAJCQkJCVdESU9GX01BR0lDQ0xPU0V8CiAJCQkJCVdESU9GX0tFRVBBTElWRVBJTkcsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3dtODMxeF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvd204MzF4X3dkdC5jCmluZGV4IDc3NWJjZDguLjhjNGIyZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvd204MzF4X3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvd204MzF4X3dkdC5jCkBAIC0yMTMsNyArMjEzLDcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKIAkub3B0aW9ucyA9IFdESU9GX1NFVFRJTUVPVVQgfCBXRElPRl9LRUVQQUxJVkVQSU5HIHwgV0RJT0ZfTUFHSUNDTE9TRSwKIAkuaWRlbnRpdHkgPSAiV004MzF4IFdhdGNoZG9nIiwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3dhdGNoZG9nL3dtODM1MF93ZHQuYyBiL2RyaXZlcnMvd2F0Y2hkb2cvd204MzUwX3dkdC5jCmluZGV4IGEyZDJlOGUuLjg5ZGQ3YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvd204MzUwX3dkdC5jCisrKyBiL2RyaXZlcnMvd2F0Y2hkb2cvd204MzUwX3dkdC5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKIAkub3B0aW9ucyA9IFdESU9GX1NFVFRJTUVPVVQgfCBXRElPRl9LRUVQQUxJVkVQSU5HIHwgV0RJT0ZfTUFHSUNDTE9TRSwKIAkuaWRlbnRpdHkgPSAiV004MzUwIFdhdGNoZG9nIiwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9LY29uZmlnIGIvZHJpdmVycy94ZW4vS2NvbmZpZwppbmRleCBjYWIxMDBhLi5mYWQzZGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9LY29uZmlnCisrKyBiL2RyaXZlcnMveGVuL0tjb25maWcKQEAgLTEsNiArMSw4IEBACittZW51ICJYZW4gZHJpdmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBYRU4KKwogY29uZmlnIFhFTl9CQUxMT09OCiAJYm9vbCAiWGVuIG1lbW9yeSBiYWxsb29uIGRyaXZlciIKLQlkZXBlbmRzIG9uIFhFTgogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoZSBiYWxsb29uIGRyaXZlciBhbGxvd3MgdGhlIFhlbiBkb21haW4gdG8gcmVxdWVzdCBtb3JlIG1lbW9yeSBmcm9tCkBAIC0yMCw3ICsyMiw2IEBACiAKIGNvbmZpZyBYRU5fREVWX0VWVENITgogCXRyaXN0YXRlICJYZW4gL2Rldi94ZW4vZXZ0Y2huIGRldmljZSIKLQlkZXBlbmRzIG9uIFhFTgogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFRoZSBldnRjaG4gZHJpdmVyIGFsbG93cyBhIHVzZXJzcGFjZSBwcm9jZXNzIHRvIHRyaWdlciBldmVudApAQCAtMzAsNyArMzEsNiBAQAogCiBjb25maWcgWEVORlMKIAl0cmlzdGF0ZSAiWGVuIGZpbGVzeXN0ZW0iCi0JZGVwZW5kcyBvbiBYRU4KIAlkZWZhdWx0IHkKIAloZWxwCiAJICBUaGUgeGVuIGZpbGVzeXN0ZW0gcHJvdmlkZXMgYSB3YXkgZm9yIGRvbWFpbnMgdG8gc2hhcmUKQEAgLTUzLDExICs1MywxMyBAQAogCiBjb25maWcgWEVOX1NZU19IWVBFUlZJU09SCiAgICAgICAgYm9vbCAiQ3JlYXRlIHhlbiBlbnRyaWVzIHVuZGVyIC9zeXMvaHlwZXJ2aXNvciIKLSAgICAgICBkZXBlbmRzIG9uIFhFTiAmJiBTWVNGUworICAgICAgIGRlcGVuZHMgb24gU1lTRlMKICAgICAgICBzZWxlY3QgU1lTX0hZUEVSVklTT1IKICAgICAgICBkZWZhdWx0IHkKICAgICAgICBoZWxwCiAgICAgICAgICBDcmVhdGUgZW50cmllcyB1bmRlciAvc3lzL2h5cGVydmlzb3IgZGVzY3JpYmluZyB0aGUgWGVuCiAJIGh5cGVydmlzb3IgZW52aXJvbm1lbnQuICBXaGVuIHJ1bm5pbmcgbmF0aXZlIG9yIGluIGFub3RoZXIKIAkgdmlydHVhbCBlbnZpcm9ubWVudCwgL3N5cy9oeXBlcnZpc29yIHdpbGwgc3RpbGwgYmUgcHJlc2VudCwKLQkgYnV0IHdpbGwgaGF2ZSBubyB4ZW4gY29udGVudHMuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQorCSBidXQgd2lsbCBoYXZlIG5vIHhlbiBjb250ZW50cy4KKworZW5kbWVudQpkaWZmIC0tZ2l0IGEvZHJpdmVycy94ZW4vZXZlbnRzLmMgYi9kcml2ZXJzL3hlbi9ldmVudHMuYwppbmRleCBjZTYwMmRkLi4yZjg0MTM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9ldmVudHMuYworKysgYi9kcml2ZXJzL3hlbi9ldmVudHMuYwpAQCAtNjQ5LDkgKzY0OSwxMyBAQAogCQkJCWludCBiaXRfaWR4ID0gX19mZnMocGVuZGluZ19iaXRzKTsKIAkJCQlpbnQgcG9ydCA9ICh3b3JkX2lkeCAqIEJJVFNfUEVSX0xPTkcpICsgYml0X2lkeDsKIAkJCQlpbnQgaXJxID0gZXZ0Y2huX3RvX2lycVtwb3J0XTsKKwkJCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAKLQkJCQlpZiAoaXJxICE9IC0xKQotCQkJCQloYW5kbGVfaXJxKGlycSwgcmVncyk7CisJCQkJaWYgKGlycSAhPSAtMSkgeworCQkJCQlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKKwkJCQkJaWYgKGRlc2MpCisJCQkJCQlnZW5lcmljX2hhbmRsZV9pcnFfZGVzYyhpcnEsIGRlc2MpOworCQkJCX0KIAkJCX0KIAkJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9zeXMtaHlwZXJ2aXNvci5jIGIvZHJpdmVycy94ZW4vc3lzLWh5cGVydmlzb3IuYwppbmRleCBhZTVjYjA1Li5iYjcxYWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3hlbi9zeXMtaHlwZXJ2aXNvci5jCisrKyBiL2RyaXZlcnMveGVuL3N5cy1oeXBlcnZpc29yLmMKQEAgLTQyNiw3ICs0MjYsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBoeXBfc3lzZnNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgaHlwX3N5c2ZzX29wcyA9IHsKIAkuc2hvdyA9IGh5cF9zeXNmc19zaG93LAogCS5zdG9yZSA9IGh5cF9zeXNmc19zdG9yZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3pvcnJvL3pvcnJvLmlkcyBiL2RyaXZlcnMvem9ycm8vem9ycm8uaWRzCmluZGV4IDBjMGY5OWUuLmRlMjRlM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvem9ycm8vem9ycm8uaWRzCisrKyBiL2RyaXZlcnMvem9ycm8vem9ycm8uaWRzCkBAIC0xMDgsNyArMTA4LDcgQEAKIAkwYzAwICA1MDBYUC9TdXByYURyaXZlIFdvcmRTeW5jIFtTQ1NJIEhvc3QgQWRhcHRlcl0KIAkwZDAwICBTdXByYURyaXZlIFdvcmRTeW5jIElJIFtTQ1NJIEhvc3QgQWRhcHRlcl0KIAkxMDAwICAyNDAwemkrIFtNb2RlbV0KLTA0MjIgIENvbXB1dGVyIFN5c3RlbXMgQXNzb3NpYXRlcworMDQyMiAgQ29tcHV0ZXIgU3lzdGVtcyBBc3NvY2lhdGVzCiAJMTEwMCAgTWFnbnVtIDQwIFtBY2NlbGVyYXRvciBhbmQgU0NTSSBIb3N0IEFkYXB0ZXJdCiAJMTUwMCAgMTIgR2F1Z2UgW1NDU0kgSG9zdCBBZGFwdGVyXQogMDQzOSAgTWFyYyBNaWNoYWVsIEdyb3RoCmRpZmYgLS1naXQgYS9maXJtd2FyZS9NYWtlZmlsZSBiL2Zpcm13YXJlL01ha2VmaWxlCmluZGV4IDFjMDBkMDUuLjhhZjBmYzcgMTAwNjQ0Ci0tLSBhL2Zpcm13YXJlL01ha2VmaWxlCisrKyBiL2Zpcm13YXJlL01ha2VmaWxlCkBAIC0zMiwxMSArMzIsMTEgQEAKIAkJCQkJIGFkYXB0ZWMvc3RhcmZpcmVfdHguYmluCiBmdy1zaGlwcGVkLSQoQ09ORklHX0FUQVJJX0RTUDU2SykgKz0gZHNwNTZrL2Jvb3RzdHJhcC5iaW4KIGZ3LXNoaXBwZWQtJChDT05GSUdfQVRNX0FNQkFTU0FET1IpICs9IGF0bXNhcjExLmZ3Ci1mdy1zaGlwcGVkLSQoQ09ORklHX0JOWDJYKSArPSBibngyeC1lMS01LjIuNy4wLmZ3IGJueDJ4LWUxaC01LjIuNy4wLmZ3Ci1mdy1zaGlwcGVkLSQoQ09ORklHX0JOWDIpICs9IGJueDIvYm54Mi1taXBzLTA5LTUuMC4wLmozLmZ3IFwKLQkJCSAgICAgYm54Mi9ibngyLXJ2MnAtMDktNS4wLjAuajMuZncgXAotCQkJICAgICBibngyL2JueDItcnYycC0wOWF4LTUuMC4wLmozLmZ3IFwKLQkJCSAgICAgYm54Mi9ibngyLW1pcHMtMDYtNS4wLjAuajMuZncgXAorZnctc2hpcHBlZC0kKENPTkZJR19CTlgyWCkgKz0gYm54MngtZTEtNS4yLjEzLjAuZncgYm54MngtZTFoLTUuMi4xMy4wLmZ3Citmdy1zaGlwcGVkLSQoQ09ORklHX0JOWDIpICs9IGJueDIvYm54Mi1taXBzLTA5LTUuMC4wLmo5LmZ3IFwKKwkJCSAgICAgYm54Mi9ibngyLXJ2MnAtMDktNS4wLjAuajEwLmZ3IFwKKwkJCSAgICAgYm54Mi9ibngyLXJ2MnAtMDlheC01LjAuMC5qMTAuZncgXAorCQkJICAgICBibngyL2JueDItbWlwcy0wNi01LjAuMC5qNi5mdyBcCiAJCQkgICAgIGJueDIvYm54Mi1ydjJwLTA2LTUuMC4wLmozLmZ3CiBmdy1zaGlwcGVkLSQoQ09ORklHX0NBU1NJTkkpICs9IHN1bi9jYXNzaW5pLmJpbgogZnctc2hpcHBlZC0kKENPTkZJR19DT01QVVRPTkUpICs9IGludGVsbGlwb3J0Mi5iaW4KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL1dIRU5DRSBiL2Zpcm13YXJlL1dIRU5DRQppbmRleCBhYzE3NGZlLi5lOGU1NTBmIDEwMDY0NAotLS0gYS9maXJtd2FyZS9XSEVOQ0UKKysrIGIvZmlybXdhcmUvV0hFTkNFCkBAIC02NzksMTEgKzY3OSwxMSBAQAogCiBEcml2ZXI6IGJueDJ4OiBCcm9hZGNvbSBFdmVyZXN0CiAKLUZpbGU6IGJueDJ4LWUxLTUuMi43LjAuZncuaWhleAotRmlsZTogYm54MngtZTFoLTUuMi43LjAuZncuaWhleAorRmlsZTogYm54MngtZTEtNS4yLjEzLjAuZncKK0ZpbGU6IGJueDJ4LWUxaC01LjIuMTMuMC5mdwogCiBMaWNlbnNlOgotICBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICBDb3B5cmlnaHQgKGMpIDIwMDctMjAxMCBCcm9hZGNvbSBDb3Jwb3JhdGlvbgogCiAgIFRoaXMgZmlsZSBjb250YWlucyBmaXJtd2FyZSBkYXRhIGRlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZAogICBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA3LTIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyL2JueDItbWlwcy0wNi01LjAuMC5qMy5mdy5paGV4IGIvZmlybXdhcmUvYm54Mi9ibngyLW1pcHMtMDYtNS4wLjAuajMuZncuaWhleApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjUyZTZjOC4uMDAwMDAwMAotLS0gYS9maXJtd2FyZS9ibngyL2JueDItbWlwcy0wNi01LjAuMC5qMy5mdy5paGV4CisrKyAvZGV2L251bGwKQEAgLTEsNTg0MSArMCwwIEBACi06MTAwMDAwMDAwODAwMDExMDA4MDAwMDAwMDAwMDRDQzgwMDAwMDBDOEYzCi06MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwNENDOEM0Ci06MTAwMDIwMDAwMDAwMDAxNDAwMDA0RDkwMDgwMDAwODgwODAwMDAwMDQ3Ci06MTAwMDMwMDAwMDAwNThEMDAwMDA0REE0MDgwMDVBNDAwMDAwMDA4NDgxCi06MTAwMDQwMDAwMDAwQTY3NDA4MDA1OEQwMDAwMDAxNTQwMDAwQTZGODczCi06MTAwMDUwMDAwODAwMzFEODA4MDAwMDAwMDAwMDcwRjAwMDAwQTg0QzMzCi06MTAwMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwNzBGMDI4Ci06MTAwMDcwMDAwMDAwMDAyNDAwMDExOTNDMDgwMDA0ODgwODAwMDQwMDY2Ci06MTAwMDgwMDAwMDAwMTc1QzAwMDExOTYwMDAwMDAwMDAwMDAwMDAwMDgzCi06MTAwMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCi06MTAwMEEwMDAwODAwMDBBODA4MDAwMDAwMDAwMDNCMzgwMDAxMzBCQzM4Ci06MTAwMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCi06MDgwMEMwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLTowODAwQzgwMDBBMDAwMDQ0MDAwMDAwMDBFMgotOjEwMDBEMDAwMDAwMDAwMDAwMDAwMDAwRDYzNkY2RDM1MkUzMDJFMzBFMwotOjEwMDBFMDAwNkEzMzAwMDAwNTAwMDAwMjAwMDAwMDAwMDAwMDAwMDM2OQotOjEwMDBGMDAwMDAwMDAwMTQwMDAwMDAzMjAwMDAwMDAzMDAwMDAwMDBCNwotOjEwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgotOjEwMDExMDAwMDAwMDAwMTAwMDAwMDEzNjAwMDBFQTYwMDAwMDAwMDU0OQotOjEwMDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDNwotOjEwMDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgotOjEwMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgotOjEwMDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgotOjEwMDE2MDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAotOjEwMDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgotOjEwMDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDA1RgotOjEwMDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgotOjEwMDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgotOjEwMDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgotOjEwMDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgotOjEwMDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDMwQwotOjEwMDFFMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDBBRgotOjEwMDFGMDAwMjQ0MjREMDAzQzAzMDgwMDI0NjM0REZDQUM0MDAwMDA0OQotOjEwMDIwMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDAwNQotOjEwMDIxMDAwMzdCRDdGRkMwM0EwRjAyMTNDMTAwODAwMjYxMDAxMTAyMAotOjEwMDIyMDAwM0MxQzA4MDAyNzlDNEQwMDBFMDAwMjE0MDAwMDAwMDAzQQotOjEwMDIzMDAwMDAwMDAwMEQyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTBGNQotOjEwMDI0MDAwOTc0MjAxMDgzMDQzNzAwMDI0MDIyMDAwMTA2MjAwMEIyNgotOjEwMDI1MDAwMjg2MjIwMDExNDQwMDAyRjAwMDAxMDIxMjQwMjQwMDBEOQotOjEwMDI2MDAwMTA2MjAwMjUwMDAwMDAwMDI0MDI2MDAwMTA2MjAwMjZEOQotOjEwMDI3MDAwMDAwMDEwMjEwQTAwMDA5NDhGQkYwMDE0Mjc1MDAxMDBENQotOjEwMDI4MDAwOTIwMjAwMDkxMDQwMDAxQTI0MDMwMDAxM0MwMjA4MDBGOQotOjEwMDI5MDAwOEM0MjAwMjAxMDQwMDAxNjAwMDAxODIxMEUwMDA1MkI5MwotOjEwMDJBMDAwMDAwMDAwMDA5NjAzMDAwODNDMDYwODAwOTRDNjREQkVGRQotOjEwMDJCMDAwOEUwNDAwMTg4RjgyMDAyMDk2MDUwMDBDMDAwMzFDMDA5RAotOjEwMDJDMDAwMDA2NjE4MjVBQzQ0MDAwMEFDNDUwMDA0MjQwNDAwMDE3RAotOjEwMDJEMDAwQUM0MDAwMDhBQzQwMDAwQ0FDNDAwMDEwQUM0MDAwMTQzNgotOjEwMDJFMDAwQUM0MDAwMTgwRTAwMDU1MEFDNDMwMDFDMDAwMDE4MjE2MwotOjEwMDJGMDAwMEEwMDAwOTMwMDYwMTAyMTBFMDAwM0JEMDAwMDAwMDAwMgotOjEwMDMwMDAwMEEwMDAwOTMwMDAwMTAyMTBFMDAwRjgxMDAwMDAwMDA4MQotOjEwMDMxMDAwMDAwMDEwMjE4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgxMAotOjEwMDMyMDAwMjdCRDAwMTgyN0JERkZFMEFGQjAwMDEwQUZCRjAwMTgxOQotOjEwMDMzMDAwQUZCMTAwMTQyNzUwMDEwMDkyMDMwMDBCMjQwMjAwMUFGMQotOjEwMDM0MDAwOTYxMTAwMDgxNDYyMDA1QjAwMDAyODIxMzIyMjAwMDE4RgotOjEwMDM1MDAwMTA0MDAwMDgwMDAwMDAwMDhFMDIwMDAwOTYwMzAwMTQwOAotOjEwMDM2MDAwMDAwMjExQzIwMDAyMTA0MDAwNUExMDIxMEEwMDAwREJGNgotOjEwMDM3MDAwQTQ0MzAwODAzQzAyMDgwMDhDNDIwMDIwMTA0MDAwMjg2QQotOjEwMDM4MDAwMDAwMDAwMDAwRTAwMDUyQjAwMDAwMDAwOTc0MjAxMDg0RAotOjEwMDM5MDAwOTc0MzAxMEM4Rjg1MDAyMDMwNDIwMDNFMzA2M0ZGRkYwMQotOjEwMDNBMDAwMDAwMjE0MDAwMDQzMTAyNUFDQTIwMDAwOEY0MjAxMDA5RgotOjEwMDNCMDAwM0MwNjA4MDA5NEM2NERCRUFDQTIwMDA0OTc0MzAxMTY0QgotOjEwMDNDMDAwOTc0NDAxMEUzQzAyMjAwMDAwMDMxQzAwMzA4NEZGRkYxNAotOjEwMDNEMDAwMDA2NDE4MjVBQ0EzMDAwODAwQzIzMDI1OTc0MjAxMTAyNAotOjEwMDNFMDAwOTc0MzAxMTIyNDA0MDAwMTAwMDIxNDAwMzA2M0ZGRkY1MAotOjEwMDNGMDAwMDA0MzEwMjVBQ0EyMDAwQzk3NDIwMTE0MzA0MkZGRkZDRAotOjEwMDQwMDAwQUNBMjAwMTA4RjQyMDExOEFDQTIwMDE0OTM0MjAxMEI2MQotOjEwMDQxMDAwMzA0MjAwRkZBQ0EyMDAxODBFMDAwNTUwQUNBNjAwMUMzNAotOjEwMDQyMDAwM0MwMjA4MDA4QzQyMDA0MDI0NDIwMDAxM0MwMTA4MDBDQwotOjEwMDQzMDAwQUMyMjAwNDAzQzAzMDgwMDhDNjMwMDQ0MzIyMjAwMDJERQotOjEwMDQ0MDAwMzIyNDAwMDQyNDYzMDAwMTNDMDEwODAwQUMyMzAwNDQ3MgotOjEwMDQ1MDAwMTA4MDAwMTgwMDAyMjgyQjhGNDIwMkI4MDQ0MzAwMDhDNQotOjEwMDQ2MDAwOEUwMjAwMjAzQzAyMDgwMDhDNDIwMDYwMjQ0MjAwMDEwMQotOjEwMDQ3MDAwM0MwMTA4MDBBQzIyMDA2MDBBMDAwMEZCMjQwNTAwMDFEQQotOjEwMDQ4MDAwOTYwMzAwMTYwMDAwMjgyMUFGNDIwMjgwOEUwMjAwMDQ2RAotOjEwMDQ5MDAwQTc0MzAyODRBRjQyMDI4ODNDMDIxMDAwQUY0MjAyQjg3OAotOjEwMDRBMDAwM0MwMjA4MDA4QzQyMDA1QzI0NDIwMDAxM0MwMTA4MDAzMAotOjEwMDRCMDAwQUMyMjAwNUM4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwOQotOjEwMDRDMDAwMDBBMDEwMjEwM0UwMDAwODI3QkQwMDIwMjdCREZGRTBBOQotOjEwMDREMDAwQUZCMDAwMTBBRkJGMDAxOEFGQjEwMDE0Mjc1MDAxMDAzQgotOjEwMDRFMDAwOTIwMzAwMEIyNDAyMDAwMzk2MTEwMDA4MTQ2MjAwNkRCMQotOjEwMDRGMDAwMDAwMDIwMjEzMjIyMDAwMTEwNDAwMDA4MDAwMDAwMDAwRQotOjEwMDUwMDAwOEUwMjAwMDA5NjAzMDAxNDAwMDIxMUMyMDAwMjEwNDA4NwotOjEwMDUxMDAwMDA1QTEwMjEwQTAwMDE0MkE0NDMwMDgwM0MwMjA4MDA1NgotOjEwMDUyMDAwOEM0MjAwMjAxMDQwMDAyNTAwMDAwMDAwMEUwMDA1MkIyQQotOjEwMDUzMDAwMDAwMDAwMDA5NzQyMDEwODk3NDMwMTBDOEY4NTAwMjBCRQotOjEwMDU0MDAwMzA0MjAwM0UzMDYzRkZGRjAwMDIxNDAwMDA0MzEwMjVEQwotOjEwMDU1MDAwQUNBMjAwMDA4RjQyMDEwMDNDMDYwODAwOTRDNjREQkVDQwotOjEwMDU2MDAwQUNBMjAwMDQ5NzQzMDExNjk3NDQwMTBFM0MwMjIwMDAwMAotOjEwMDU3MDAwMDAwMzFDMDAzMDg0RkZGRjAwNjQxODI1QUNBMzAwMDhCMgotOjEwMDU4MDAwMDBDMjMwMjU5NzQyMDExMDk3NDMwMTEyMjQwNDAwMDE1NAotOjEwMDU5MDAwMDAwMjE0MDAzMDYzRkZGRjAwNDMxMDI1QUNBMjAwMENFMgotOjEwMDVBMDAwOTc0MjAxMTQzMDQyRkZGRkFDQTIwMDEwQUNBMDAwMTQyRgotOjEwMDVCMDAwQUNBMDAwMTgwRTAwMDU1MEFDQTYwMDFDM0MwMjA4MDBDMAotOjEwMDVDMDAwOEM0MjAwNDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNDA2MwotOjEwMDVEMDAwM0MwMjA4MDA4QzQyMDA0NDMyMjMwMDA0MjQ0MjAwMDEwMwotOjEwMDVFMDAwM0MwMTA4MDBBQzIyMDA0NDEwNjAwMDFBMzIyMjAwMDJENAotOjEwMDVGMDAwOEY0MjAyQjgwNDQzMDAwODhFMDIwMDIwM0MwMjA4MDAyQgotOjEwMDYwMDAwOEM0MjAwNjAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNjBFMgotOjEwMDYxMDAwMEEwMDAxNzcyNDA0MDAwMTk2MDMwMDE2MDAwMDIwMjEzRgotOjEwMDYyMDAwQUY0MjAyODA4RTAyMDAwNEE3NDMwMjg0QUY0MjAyODhEOAotOjEwMDYzMDAwM0MwMjEwMDBBRjQyMDJCODNDMDIwODAwOEM0MjAwNUM1MQotOjEwMDY0MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDVDMEEwMDAxNzg1MQotOjEwMDY1MDAwOEZCRjAwMTgxMDQwMDAxMzAwMDAyMDIxOEY0MzAxMDRCOQotOjEwMDY2MDAwM0MwMjYwMjBBQzQzMDAxNDhDNDIwMDA0MjQwMzAxRkVEMQotOjEwMDY3MDAwMzA0MjAzRkYxNDQzMDAwQjAwMDAyMDIxOEY0MjAxMDA5MQotOjEwMDY4MDAwMDAwMjExQzAyNDQyRkZGQzJDNDIwMDA4MTA0MDAwMDI2RQotOjEwMDY5MDAwMjQwMzAwMDIwMDAzMUY0MDNDMDI2MDAwQUM0MzY5MTRDNQotOjEwMDZBMDAwMDAwMDIwMjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwMAotOjEwMDZCMDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwOEY0MzAxMDBDNwotOjEwMDZDMDAwMjQwMjAxMDA1MDYyMDAwMzAwMDMxMUMyMDAwMDAwMEQ2QgotOjEwMDZEMDAwMDAwMzExQzIwMDAyMTA0MDAwNUExMDIxQTQ0MDAwODAwMwotOjEwMDZFMDAwMDNFMDAwMDgwMDAwMTAyMTkzNjIwMDAwMDNFMDAwMDgwRQotOjEwMDZGMDAwQUY4MDAwMDAwM0UwMDAwODAwMDAxMDIxMDNFMDAwMDhDNAotOjEwMDcwMDAwMDAwMDEwMjEyNDAyMDEwMDE0ODIwMDA4MDAwMDAwMDBGMwotOjEwMDcxMDAwM0MwMjA4MDA4QzQyMDBGQzI0NDIwMDAxM0MwMTA4MDAxRAotOjEwMDcyMDAwQUMyMjAwRkMwQTAwMDE5RjMwQTIwMDIwM0MwMjA4MDAxRAotOjEwMDczMDAwOEM0MjAwODQyNDQyMDAwMTNDMDEwODAwQUMyMjAwODQ2OQotOjEwMDc0MDAwMzBBMjAwMjAxMDQwMDAwODMwQTMwMDEwM0MwMjA4MDAzNgotOjEwMDc1MDAwOEM0MjAxMDgyNDQyMDAwMTNDMDEwODAwQUMyMjAxMDgzRgotOjEwMDc2MDAwMDNFMDAwMDgwMDAwMDAwMDEwNjAwMDA4MDAwMDAwMDAyNgotOjEwMDc3MDAwM0MwMjA4MDA4QzQyMDEwNDI0NDIwMDAxM0MwMTA4MDBCNAotOjEwMDc4MDAwQUMyMjAxMDQwM0UwMDAwODAwMDAwMDAwM0MwMjA4MDA2NQotOjEwMDc5MDAwOEM0MjAxMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAxMDAwRgotOjEwMDdBMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkU4QUZCRjAwMTAxNQotOjEwMDdCMDAwMjc0NDAxMDA5NDgzMDAwODMwNjIwMDA0MTA0MDAwMUJBRAotOjEwMDdDMDAwMzA2NjAwMDI4RjQyMDJCODA0NDEwMDA4MjQwNTAwMDE4RgotOjEwMDdEMDAwM0MwMjA4MDA4QzQyMDA2MDI0NDIwMDAxM0MwMTA4MDBGOQotOjEwMDdFMDAwQUMyMjAwNjAwQTAwMDFFQjhGQkYwMDEwOEM4MjAwMjA1OQotOjEwMDdGMDAwOTQ4MzAwMTYwMDAwMjgyMUFGNDIwMjgwOEM4MjAwMDRGRQotOjEwMDgwMDAwQTc0MzAyODRBRjQyMDI4ODNDMDIxMDAwQUY0MjAyQjgwNAotOjEwMDgxMDAwM0MwMjA4MDA4QzQyMDA1QzI0NDIwMDAxM0MwMTA4MDBCQwotOjEwMDgyMDAwQUMyMjAwNUMwQTAwMDFFQjhGQkYwMDEwMTBDMDAwMDY3NAotOjEwMDgzMDAwMDA2MDI4MjE4RjQ0MDEwMDBFMDAwMThGMDAwMDAwMDA5RAotOjEwMDg0MDAwMEEwMDAxRUEyNDA1MDAwMThGODIwMDA4OEY0MzAxMDQ5OQotOjEwMDg1MDAwNTA0MzAwMDcwMDAwMjgyMThGNDQwMTAwMEUwMDAxOEY0MwotOjEwMDg2MDAwMDAwMDAwMDA4RjQyMDEwNEFGODIwMDA4MDAwMDI4MjEzMAotOjEwMDg3MDAwOEZCRjAwMTAwMEEwMTAyMTAzRTAwMDA4MjdCRDAwMTg2MgotOjEwMDg4MDAwM0MwMjA4MDA4QzQyMDA4ODI3NDMwMTAwOTQ2NTAwMEM1QwotOjEwMDg5MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDg4OEM2NDAwMTg0RQotOjEwMDhBMDAwMDM0NTEwMjE5MDQ1NDAwMEFGNDQwMDM4OEM2MjAwMUM4NQotOjEwMDhCMDAwMjQwM0ZGRjgwMDA1MkUwMDAwNDMxMDI0MzQ0MjAwMDRGNgotOjEwMDhDMDAwQUY0MjAwM0MzQzAyMDAwNUFGNDIwMDMwMDAwMDAwMDA5NwotOjEwMDhEMDAwMDAwMDAwMDAwMDAwMDAwMEFGNDUwNDA0MDAwMDAwMDAxQwotOjEwMDhFMDAwMDAwMDAwMDAwMDAwMDAwMDNDMDIwMDA2MzQ0MjAwMDE0RAotOjEwMDhGMDAwQUY0MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENwotOjEwMDkwMDAwOEY0MjAwMDAzMDQyMDAxMDEwNDBGRkZEMDAwMDEwMjExNwotOjEwMDkxMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkUwQUZCMjAwMThCMAotOjEwMDkyMDAwM0MwMzYwMTBBRkJGMDAxQ0FGQjEwMDE0QUZCMDAwMTBBQgotOjEwMDkzMDAwOEM2NDUwMDAyNDAyRkY3RjNDMUE4MDAwMDA4MjIwMjQzNwotOjEwMDk0MDAwMzQ4NDM4MEMyNDAyMDAzN0FDNjQ1MDAwM0MxMjA4MDA5OAotOjEwMDk1MDAwMjY1MjREMzhBRjQyMDAwODI0MDIwQzgwQUY0MjAwMjREQQotOjEwMDk2MDAwM0MxQjgwMDgzQzA2MDgwMDI0QzYwNjJDMDI0MDEwMjFDRgotOjEwMDk3MDAwMjQwNDAwMUMyNDg0RkZGRkFDNDYwMDAwMDQ4MUZGRkQxQQotOjEwMDk4MDAwMjQ0MjAwMDQzQzAyMDgwMDI0NDIwMTZDM0MwMTA4MDA5RgotOjEwMDk5MDAwQUMyMjRENDAzQzAyMDgwMDI0NDIwNDA0M0MwMTA4MDAwMwotOjEwMDlBMDAwQUMyMjRENDQzQzAyMDgwMDI0NDIwN0I4M0MwMTA4MDAzOAotOjEwMDlCMDAwQUMyMjREODgzQzAyMDgwMDI0NDIwMjVDM0MwMzA4MDA0MwotOjEwMDlDMDAwMjQ2MzA2MzQzQzA0MDgwMDI0ODQwNkUwM0MwNTA4MDA0NwotOjEwMDlEMDAwMjRBNTNCNTAzQzAxMDgwMEFDMjI0REEwM0MwMjA4MDA3RAotOjEwMDlFMDAwMjQ0MjA1RjQzQzAxMDgwMEFDMjY0RDg0M0MwMTA4MDA3QgotOjEwMDlGMDAwQUMyNTREOTQzQzAxMDgwMEFDMjM0RDlDM0MwMTA4MDAwMwotOjEwMEEwMDAwQUMyNDREQTQzQzAxMDgwMEFDMjI0REE4M0MwMTA4MDBEOAotOjEwMEExMDAwQUMyMzREM0MzQzAxMDgwMEFDMjA0RDQ4M0MwMTA4MDA5MwotOjEwMEEyMDAwQUMyMDRENEMzQzAxMDgwMEFDMjA0RDUwM0MwMTA4MDA2RQotOjEwMEEzMDAwQUMyMDRENTQzQzAxMDgwMEFDMjA0RDU4M0MwMTA4MDA0RQotOjEwMEE0MDAwQUMyMDRENUMzQzAxMDgwMEFDMjA0RDYwM0MwMTA4MDAyRQotOjEwMEE1MDAwQUMyNDRENjQzQzAxMDgwMEFDMjA0RDY4M0MwMTA4MDAwQQotOjEwMEE2MDAwQUMyMDRENkMzQzAxMDgwMEFDMjA0RDcwM0MwMTA4MDBFRQotOjEwMEE3MDAwQUMyMDRENzQzQzAxMDgwMEFDMjA0RDc4M0MwMTA4MDBDRQotOjEwMEE4MDAwQUMyNjREN0MzQzAxMDgwMEFDMjY0RDgwM0MwMTA4MDBBMgotOjEwMEE5MDAwQUMyMDREOEMzQzAxMDgwMEFDMjU0RDkwM0MwMTA4MDA3OQotOjEwMEFBMDAwQUMyMzREOTgwRTAwMDZCQjAwMDAwMDAwM0MwMjgwMDAwNQotOjEwMEFCMDAwMzQ0MjAwNzA4QzQyMDAwMEFGODIwMDE0M0MwMzA4MDBGNgotOjEwMEFDMDAwOEM2MzAwMjA4RjgyMDAwNDEwNDMwMDA0M0MwMjgwMDBFRAotOjEwMEFEMDAwMEUwMDA0RjNBRjgzMDAwNDNDMDI4MDAwMzQ0NjAwNzAzMwotOjEwMEFFMDAwM0MwMzA4MDA4QzYzMDBBMDNDMDIwODAwOEM0MjAwQTQ3OAotOjEwMEFGMDAwMTA0MzAwMDQ4Rjg0MDAxNDNDMDEwODAwQUMyMzAwQTRDMAotOjEwMEIwMDAwQTc0MzAwOUU4Q0NBMDAwMDNDMDMwODAwOEM2MzAwQkMxNQotOjEwMEIxMDAwM0MwMjA4MDA4QzQyMDBCODAxNDQyMDIzMDA2NDE4MjFFNAotOjEwMEIyMDAwMDAwMDQwMjEwMDY0MjAyQjAwNDgxMDIxMDA0NDEwMjFDNwotOjEwMEIzMDAwM0MwMTA4MDBBQzIzMDBCQzNDMDEwODAwQUMyMjAwQjgxQQotOjEwMEI0MDAwOEY1MTAwMDAzMjIyMDAwNzEwNDBGRkRDQUY4QTAwMTRGMgotOjEwMEI1MDAwOENDNjAwMDAzQzA1MDgwMDhDQTUwMEJDM0MwNDA4MDBDNQotOjEwMEI2MDAwOEM4NDAwQjgwMENBMzAyMzAwQTYyODIxMDAwMDEwMjE4MAotOjEwMEI3MDAwMDBBNjMwMkIwMDgyMjAyMTAwODYyMDIxMzIyNzAwMDE5MAotOjEwMEI4MDAwM0MwMTA4MDBBQzI1MDBCQzNDMDEwODAwQUMyNDAwQjhDNgotOjEwMEI5MDAwMTBFMDAwMUYzMjIyMDAwMjhGNDIwMTAwQUY0MjAwMjAwRAotOjEwMEJBMDAwOEY0MjAxMDRBRjQyMDBBODkzNDIwMTBCMEUwMDAxODg1RQotOjEwMEJCMDAwMzA1MDAwRkYyRTAyMDAxRDU0NDAwMDA0MDAxMDEwODAzMQotOjEwMEJDMDAwMEUwMDAxOEIwQTAwMDJDNTAwMDAwMDAwMDA1MjEwMjEzNwotOjEwMEJEMDAwOEM0MjAwMDAwMDQwRjgwOTAwMDAwMDAwMTA0MDAwMDVCMQotOjEwMEJFMDAwM0MwMjQwMDA4RjQzMDEwNDNDMDI2MDIwQUM0MzAwMTRFRgotOjEwMEJGMDAwM0MwMjQwMDBBRjQyMDEzODNDMDIwODAwOEM0MjAwMzQwNQotOjEwMEMwMDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDM0MzIyMjAwMDJFMAotOjEwMEMxMDAwMTA0MDAwMEUzMjIyMDAwNDhGNDIwMTQwMEUwMDAxODg3NQotOjEwMEMyMDAwQUY0MjAwMjAwRTAwMDM0QjAwMDAwMDAwM0MwMjQwMDBEOQotOjEwMEMzMDAwQUY0MjAxNzgzQzAyMDgwMDhDNDIwMDM4MjQ0MjAwMDE5NwotOjEwMEM0MDAwM0MwMTA4MDBBQzIyMDAzODMyMjIwMDA0MTA0MEZGOTgxQQotOjEwMEM1MDAwM0MwMjgwMDA4RjQyMDE4MDBFMDAwMTg4QUY0MjAwMjBEQwotOjEwMEM2MDAwOEY0MzAxODAyNDAyMEYwMDE0NjIwMDA1MDAwMDAwMDA4MQotOjEwMEM3MDAwOEY0MjAxODhBNzQyMDA5QzBBMDAwMkZBM0MwMjQwMDAxMQotOjEwMEM4MDAwOTM2MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDgyOAotOjEwMEM5MDAwM0MwMjQwMDAwRTAwMDMyRDAwMDAwMDAwNTQ0MDAwMDQwMAotOjEwMENBMDAwM0MwMjQwMDAwRTAwMEUwRDAwMDAwMDAwM0MwMjQwMDAxRgotOjEwMENCMDAwQUY0MjAxQjgzQzAyMDgwMDhDNDIwMDNDMjQ0MjAwMDFEMwotOjEwMENDMDAwM0MwMTA4MDBBQzIyMDAzQzBBMDAwMjdBM0MwMjgwMDA5MQotOjEwMENEMDAwM0MwMjkwMDAzNDQyMDAwMTAwODIyMDI1QUY0NDAwMjBGNQotOjEwMENFMDAwOEY0MjAwMjAwNDQwRkZGRTAwMDAwMDAwMDNFMDAwMDhFNwotOjEwMENGMDAwMDAwMDAwMDAzQzAyODAwMDM0NDIwMDAxMDA4MjIwMjVGOAotOjEwMEQwMDAwMDNFMDAwMDhBRjQ0MDAyMDI3QkRGRkUwQUZCMTAwMTRBRQotOjEwMEQxMDAwQUZCMDAwMTAwMDgwODgyMUFGQkYwMDE4MEUwMDAzMDJBMgotOjEwMEQyMDAwMzBCMDAwRkY5MzYyMDA3RDAyMjAyMDIxMDIwMjgwMjU2NgotOjEwMEQzMDAwQTM3MDAwN0Q4RjcwMDA3NDNDMDI4MDAwMEUwMDAzMEJENgotOjEwMEQ0MDAwMDIwMjgwMjQxNjAwMDAwOThGQkYwMDE4OEY0MjAxRjhBQwotOjEwMEQ1MDAwMDQ0MEZGRkUyNDAyMDAwMkFGNTEwMUMwQTM0MjAxQzRCRgotOjEwMEQ2MDAwM0MwMjEwMDBBRjQyMDFGODhGQkYwMDE4OEZCMTAwMTQ5MQotOjEwMEQ3MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMjdCREZGRTg2QQotOjEwMEQ4MDAwQUZCRjAwMTA5NzQyMDE4NDMwNDIwMjAwMTA0MDAwMDVCRQotOjEwMEQ5MDAwMDAwMDIwMjEwRTAwMTA0MjAwMDAwMDAwMEEwMDAzNDE2NAotOjEwMERBMDAwMjQwNDAwMDE4RjQyMDE4ODA0NDAwMDA5OEZCRjAwMTAxNQotOjEwMERCMDAwOEY0MjAxODgzQzAzRkYwMDAwNDMxMDI0M0MwMzA0MDBFMQotOjEwMERDMDAwMTQ0MzAwMDMyNDA0MDAwMTkzNjIwMDNFOEZCRjAwMTAwRgotOjEwMEREMDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDE4MjQwMjAwMDE1NAotOjEwMERFMDAwQTM2MDAwMjJBNzYyMDAxNjhGNDQwMTQwMEEwMDAzMTA4RQotOjEwMERGMDAwMjQwNTAwMDEyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTAwRAotOjEwMEUwMDAwOTM2MjAwMDAzMDQ0MDBGRjM4ODMwMDIwMzg4MjAwMzBCNQotOjEwMEUxMDAwMDAwMzE4MkIwMDAyMTAyQjAwNjIxODI0MTA2MDAwMDMzRQotOjEwMEUyMDAwMjQwMjAwNTAxNDgyMDA2MjhGQkYwMDE0OTM0MjAxNDhENAotOjEwMEUzMDAwMzA0MjAwRkYyNDQzRkZGRjJDNjIwMDA1MTA0MDAwNUM5RAotOjEwMEU0MDAwOEZCRjAwMTQwMDAzMTA4MDNDMDMwODAwMjQ2MzRDQzhDQgotOjEwMEU1MDAwMDA0MzEwMjE4QzQyMDAwMDAwNDAwMDA4MDAwMDAwMDAwOAotOjEwMEU2MDAwMEUwMDAzMDI4RjQ0MDE0MDhGNzAwMDBDOEY0MjAxNDQzQQotOjEwMEU3MDAwMTYwMjAwMDIyNDAyMDAwMUFGNjIwMDBDMEUwMDAzMEJGOAotOjEwMEU4MDAwOEY0NDAxNDA4RjQyMDE0NDE0NTAwMDA0OEZCRjAwMTQ2RQotOjEwMEU5MDAwOEZCMDAwMTAwQTAwMEZCODI3QkQwMDE4OEY2MjAwMEMzOQotOjEwMEVBMDAwMEEwMDAzQjMwMDAwMDAwMDk3NjIwMDEwOEY0MzAxNDQ2MgotOjEwMEVCMDAwMzA0MkZGRkYxNDYyMDAwOTAwMDAwMDAwMjQwMjAwMDExQwotOjEwMEVDMDAwQTc2MjAwMTA4RjQyMDE0MEFGNDIwMjAwM0MwMjEwMDBCNgotOjEwMEVEMDAwQUY0MjAyMzgwQTAwMDNCQThGQkYwMDE0OTc2MjAwMTBCNQotOjEwMEVFMDAwMEEwMDAzQjMwMDAwMDAwMDBFMDAwMzAyOEY0NDAxNDAxQgotOjEwMEVGMDAwOTc2MjAwMTI4RjQzMDE0NDMwNTBGRkZGMTYwMzAwMDIzNwotOjEwMEYwMDAwMjQwMjAwMDFBNzYyMDAxMjBFMDAwMzBCOEY0NDAxNDA2RgotOjEwMEYxMDAwOEY0MjAxNDQxNjAyMDAwNDhGQkYwMDE0OEZCMDAwMTBFRQotOjEwMEYyMDAwMEEwMDAzNDUyN0JEMDAxODk3NjIwMDEyMEEwMDAzQjNBOAotOjEwMEYzMDAwMDAwMDAwMDA5NzYyMDAxNDhGNDMwMTQ0MzA0MkZGRkYxRAotOjEwMEY0MDAwMTQ2MjAwMDY4RkJGMDAxNDI0MDIwMDAxOEZCMDAwMTA0RAotOjEwMEY1MDAwQTc2MjAwMTQwQTAwMTJFMjI3QkQwMDE4OTc2MjAwMTQ2RAotOjEwMEY2MDAwMEEwMDAzQjMwMDAwMDAwMDk3NjIwMDE2OEY0MzAxNDQ5QgotOjEwMEY3MDAwMzA0MkZGRkYxNDYyMDAwNjI0MDIwMDAxOEZCRjAwMTRGQwotOjEwMEY4MDAwOEZCMDAwMTBBNzYyMDAxNjBBMDAwQkFBMjdCRDAwMTgzOAotOjEwMEY5MDAwOTc2MjAwMTYxNDQwMDAwNjhGQkYwMDE0M0MwMjA4MDA0MAotOjEwMEZBMDAwOEM0MjAwNzAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNzAxOQotOjEwMEZCMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4MjdCREZGRTgzMAotOjEwMEZDMDAwQUZCRjAwMTRBRkIwMDAxMDhGNTAwMTAwOTM2MjAwMDA1QgotOjEwMEZEMDAwOTM0MzAxMDkzMDQ0MDBGRjI0MDIwMDFGMTA2MjAwQTU2MgotOjEwMEZFMDAwMjg2MjAwMjAxMDQwMDAxODI0MDIwMDM4Mjg2MjAwMEFGRAotOjEwMEZGMDAwMTA0MDAwMEMyNDAyMDAwQjI4NjIwMDA4MTA0MDAwMkM1NgotOjEwMTAwMDAwMDAwMDAwMDAwNDYwMDBFNTI4NjIwMDAyMTQ0MDAwMjg4RgotOjEwMTAxMDAwMjQwMjAwMDYxMDYyMDAyNjhGQkYwMDE0MEEwMDA0QjdFNQotOjEwMTAyMDAwOEZCMDAwMTAxMDYyMDA1RTI4NjIwMDBCMTQ0MDAwRENEQwotOjEwMTAzMDAwOEZCRjAwMTQyNDAyMDAwRTEwNjIwMDczOEZCMDAwMTBFNgotOjEwMTA0MDAwMEEwMDA0QjcwMDAwMDAwMDEwNjIwMEMwMjg2MjAwMzlFNgotOjEwMTA1MDAwMTA0MDAwMEEyNDAyMDA4MDI0MDIwMDM2MTA2MjAwQ0FGOAotOjEwMTA2MDAwMjg2MjAwMzcxMDQwMDBCNDI0MDIwMDM1MTA2MjAwQzEyRAotOjEwMTA3MDAwOEZCRjAwMTQwQTAwMDRCNzhGQjAwMDEwMTA2MjAwMkI1RAotOjEwMTA4MDAwMjg2MjAwODExMDQwMDAwNjI0MDIwMEM4MjQwMjAwMzlCMgotOjEwMTA5MDAwMTA2MjAwQjQ4RkJGMDAxNDBBMDAwNEI3OEZCMDAwMTBCNAotOjEwMTBBMDAwMTA2MjAwOTk4RkJGMDAxNDBBMDAwNEI3OEZCMDAwMTBCRgotOjEwMTBCMDAwM0MwMjA4MDA4QzQyMDAyMDEwNDAwMEI5OEZCRjAwMTQ5MQotOjEwMTBDMDAwMEUwMDA1MkIwMDAwMDAwMDhGNDIwMTAwOEY4MzAwMjBERQotOjEwMTBEMDAwOTc0NTAxMEM5NzQ2MDEwOEFDNjIwMDAwOEY0MjAxMDQ1RAotOjEwMTBFMDAwM0MwNDA4MDA5NDg0NERCRTAwMDUyQzAwQUM2MjAwMDQ1MgotOjEwMTBGMDAwOEY0MjAxMTgwMDA2MzQwMDAwQzQzMDI1QUM2MjAwMDg5RAotOjEwMTEwMDAwOEY0MjAxMUMyNDA0MDAwMUFDNjIwMDBDOTM0MjAxMEFDRQotOjEwMTExMDAwMDBBMjI4MjVBQzY1MDAxMEFDNjAwMDE0QUM2MDAwMTg3QgotOjEwMTEyMDAwQUM2NjAwMUMwQTAwMDQ4RDhGQkYwMDE0M0MwMjA4MDA0RQotOjEwMTEzMDAwOEM0MjAwMjAxMDQwMDA5QThGQkYwMDE0MEUwMDA1MkIzNwotOjEwMTE0MDAwMDAwMDAwMDA5NzQ0MDEwODNDMDMwODAwOTQ2MzREQkU3MgotOjEwMTE1MDAwOTc0NTAxMEMwMDA0MjIwMjk3NDYwMTBFOEY4MjAwMjA2MQotOjEwMTE2MDAwMDAwNDI2MDAwMDgzMjAyNTAwMDUyQzAwM0MwMzAwODA5RAotOjEwMTE3MDAwMDBBNjI4MjUwMDgzMjAyNUFDNDAwMDAwQUM0MDAwMDREOAotOjEwMTE4MDAwQUM0MDAwMDhBQzQwMDAwQ0FDNDUwMDEwQUM0MDAwMTQ3MgotOjEwMTE5MDAwQUM0MDAwMThBQzQ0MDAxQzBBMDAwNDhDMjQwNDAwMDE3QwotOjEwMTFBMDAwOTc0MjAxMEMxNDQwMDAxNTAwMDAwMDAwOTM2MjAwMDVGNgotOjEwMTFCMDAwMzA0MjAwMTAxNDQwMDAxMTAwMDAwMDAwMEUwMDAzMDIzNQotOjEwMTFDMDAwMDIwMDIwMjE5MzYyMDAwNTAyMDAyMDIxMzQ0MjAwMTAxOQotOjEwMTFEMDAwMEUwMDAzMEJBMzYyMDAwNTkzNjIwMDAwMjQwMzAwMjBBRAotOjEwMTFFMDAwMzA0MjAwRkYxMDQzMDA2RDAyMDAyMDIxOEZCRjAwMTQyOQotOjEwMTFGMDAwOEZCMDAwMTAwQTAwMTA1ODI3QkQwMDE4MDAwMDAwMEQyNQotOjEwMTIwMDAwMEEwMDA0QjY4RkJGMDAxNDNDMDIwODAwOEM0MjAwMjA4NAotOjEwMTIxMDAwMTA0MDAwNjM4RkJGMDAxNDBFMDAwNTJCMDAwMDAwMDA3QgotOjEwMTIyMDAwOEY0MjAxMDQ4RjgzMDAyMDk3NDQwMTBDM0MwNTA4MDA4NQotOjEwMTIzMDAwOTRBNTREQkVBQzYyMDAwMDk3NjIwMDJDMDAwNDI0MDAwRgotOjEwMTI0MDAwMzA0MkZGRkYwMDgyMjAyNTNDMDI0MDBFMDBBMjI4MjVFQwotOjEwMTI1MDAwQUM2NDAwMDRBQzYwMDAwOEFDNjAwMDBDQUM2MDAwMTAzMgotOjEwMTI2MDAwQUM2MDAwMTRBQzYwMDAxOEFDNjUwMDFDMEEwMDA0OEM3MwotOjEwMTI3MDAwMjQwNDAwMDEwRTAwMDMwMjAyMDAyMDIxQTc2MDAwMDhFMAotOjEwMTI4MDAwMEUwMDAzMEIwMjAwMjAyMTAyMDAyMDIxMEUwMDAzMTA5QgotOjEwMTI5MDAwMjQwNTAwMDEzQzAyMDgwMDhDNDIwMDIwMTA0MDAwNDA2MAotOjEwMTJBMDAwOEZCRjAwMTQwRTAwMDUyQjAwMDAwMDAwOTc0MjAxMENCOAotOjEwMTJCMDAwOEY4MzAwMjAzQzA1MDgwMDk0QTU0REJFMDAwMjE0MDA1OQotOjEwMTJDMDAwQUM3MDAwMDBBQzYyMDAwNEFDNjAwMDA4OEY2NDAwNEM5RAotOjEwMTJEMDAwM0MwMjQwMUYwMEEyMjgyNUFDNjQwMDBDOEY2MjAwNTAyNQotOjEwMTJFMDAwMjQwNDAwMDFBQzYyMDAxMDhGNjIwMDU0QUM2MjAwMTQ1MAotOjEwMTJGMDAwQUM2MDAwMThBQzY1MDAxQzhGQkYwMDE0OEZCMDAwMTBFQwotOjEwMTMwMDAwMEEwMDA1NTAyN0JEMDAxODI0MDIwMDIwNTA4MjAwMjU0NQotOjEwMTMxMDAwOEZCMDAwMTAwRTAwMEZBMjAyMDAyMDIxMTA0MDAwMjAwQwotOjEwMTMyMDAwOEZCRjAwMTQwMjAwMjAyMThGQjAwMDEwMDAwMDI4MjE4MAotOjEwMTMzMDAwMEEwMDAzMTAyN0JEMDAxODAyMDAyMDIxOEZCRjAwMTRFRgotOjEwMTM0MDAwOEZCMDAwMTAwQTAwMDYxODI3QkQwMDE4OTc0NTAxMEM0MQotOjEwMTM1MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwMEEwMDA2Mzg1MQotOjEwMTM2MDAwMjdCRDAwMTgwMjAwMjAyMThGQjAwMDEwMEEwMDA2NUQ4MgotOjEwMTM3MDAwMjdCRDAwMTg5MzQ1MDEwRDAyMDAyMDIxOEZCMDAwMTBGOQotOjEwMTM4MDAwMEEwMDA2QTcyN0JEMDAxODAyMDAyMDIxOEZCRjAwMTQwNQotOjEwMTM5MDAwOEZCMDAwMTAwQTAwMDY4MzI3QkQwMDE4OEZCRjAwMTQwRAotOjEwMTNBMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4OEY0MjAyNzhCQwotOjEwMTNCMDAwMDQ0MEZGRkUyNDAyMDAwMjM0ODQwMDgwQUY0NDAyNDA1NwotOjEwMTNDMDAwQTM0MjAyNDQzQzAyMTAwMDAzRTAwMDA4QUY0MjAyNzg0RQotOjEwMTNEMDAwM0MwNDA4MDA5NDg0NERDQTNDMDIwODAwOEM0MjRERDQ2MQotOjEwMTNFMDAwMzA4M0ZGRkYwMDAzMThDMDAwNDMxMDIxQUY0MjAwM0NEMAotOjEwMTNGMDAwM0MwMjA4MDA4QzQyNEREMEFGNDIwMDM4M0MwMjAwNTAwNQotOjEwMTQwMDAwMzQ0MjAwMDhBRjQyMDAzMDAwMDAwMDAwMDAwMDAwMDAzRAotOjEwMTQxMDAwMDAwMDAwMDA4RjQyMDAwMDMwNDIwMDIwMTA0MEZGRkQxRAotOjEwMTQyMDAwMDAwMDAwMDA4RjQyMDQwMDNDMDEwODAwQUMyMjREQzBDNwotOjEwMTQzMDAwOEY0MjA0MDQzQzAxMDgwMEFDMjI0REM0M0MwMjAwMjA1MQotOjEwMTQ0MDAwQUY0MjAwMzAwMDAwMDAwMDNDMDIwODAwOTQ0MjREQzg0QQotOjEwMTQ1MDAwM0MwMzA4MDA5NDYzNERDQzNDMDUwODAwOTRBNTREQ0U5OAotOjEwMTQ2MDAwMjQ4NDAwMDEwMDQzMTAyMTMwODNGRkZGM0MwMTA4MDA2OQotOjEwMTQ3MDAwQTQyMjREQzgzQzAxMDgwMEE0MjQ0RENBMTQ2NTAwMDNGMQotOjEwMTQ4MDAwMDAwMDAwMDAzQzAxMDgwMEE0MjA0RENBMDNFMDAwMDg1MQotOjEwMTQ5MDAwMDAwMDAwMDAzQzA1MDAwQTI3QkRGRkU4MDM0NTI4MjFBNQotOjEwMTRBMDAwM0MwNDA4MDAyNDg0NERCMEFGQkYwMDEwMEUwMDA1QjUwOQotOjEwMTRCMDAwMjQwNjAwMEEzQzAyMDgwMDk0NDI0REIyM0MwMzA4MDA5NgotOjEwMTRDMDAwOTQ2MzREQ0UzMDQyMDAwRjI0NDIwMDAzMDA0MzE4MDRDMQotOjEwMTREMDAwMjQwMjdGRkYwMDQzMTAyQjEwNDAwMDAyQUY4MzAwMUM0QQotOjEwMTRFMDAwMDAwMDAwMEQwRTAwMDRDMjAwMDAwMDAwM0MwMjA4MDBENQotOjEwMTRGMDAwOTQ0MjREQkE4RkJGMDAxMDI3QkQwMDE4MDNFMDAwMDhDQQotOjEwMTUwMDAwQTc0MjAwQTIzQzAyMDAwQTAzNDIxMDIxOTQ0MzAwMDZCNQotOjEwMTUxMDAwM0MwMjA4MDA5NDQyNERCQTNDMDEwODAwQTQyMzREQjY5OQotOjEwMTUyMDAwMDA0MzEwMjM4RjgzMDAxQzAwMDIxNDAwMDAwMjE0MDNFOAotOjEwMTUzMDAwMDA0MzEwMkIwM0UwMDAwODM4NDIwMDAxMjdCREZGRThGQwotOjEwMTU0MDAwQUZCRjAwMTAzQzAyMDAwQTAzNDIxMDIxOTQ0MjAwMDY4MwotOjEwMTU1MDAwM0MwMTA4MDBBNDIyNERCNjBFMDAwNTBGMDAwMDAwMDA1QgotOjEwMTU2MDAwNTQ0MEZGRjkzQzAyMDAwQThGQkYwMDEwMDNFMDAwMDg1RQotOjEwMTU3MDAwMjdCRDAwMTgyN0JERkZFOEFGQkYwMDEwMEUwMDA1MEYwNAotOjEwMTU4MDAwMDAwMDAwMDAxMDQwMDAwMzAwMDAwMDAwMEUwMDA1MUREOAotOjEwMTU5MDAwMDAwMDAwMDAzQzAyMDgwMDhDNDI0REMwOEZCRjAwMTBDQwotOjEwMTVBMDAwMjc0MzA0MDBBRjQyMDAzODNDMDIwODAwOEM0MjREQzQ3RgotOjEwMTVCMDAwMjdCRDAwMThBRjgzMDAyMEFGNDIwMDNDM0MwMjAwMDU2RAotOjEwMTVDMDAwQUY0MjAwMzAwM0UwMDAwOEFGODAwMDE4OEY4MjAwMTg5RgotOjEwMTVEMDAwM0MwMzAwMDYwMDAyMTE0MDAwNDMxMDI1QUY0MjAwMzBEQQotOjEwMTVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEY0MjAwMDAyQQotOjEwMTVGMDAwMzA0MjAwMTAxMDQwRkZGRDI3NDIwNDAwQUY4MjAwMjA1RgotOjEwMTYwMDAwMDNFMDAwMDhBRjgwMDAxODNDMDYwODAwOENDNjREQzRGQgotOjEwMTYxMDAwOEY4NTAwMTg4RjgzMDAyMDNDMDIwODAwOTQ0MjREQkE0OQotOjEwMTYyMDAwMjdCREZGRTAyNEE1MDAwMTI0NjMwMDIwMjQ0MjAwMDExRgotOjEwMTYzMDAwMjRDNzAwMjBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMTgzNgotOjEwMTY0MDAwQUY4NTAwMThBRjgzMDAyMDNDMDEwODAwQTQyMjREQkFFQQotOjEwMTY1MDAwMzA5MDAwRkYzQzAxMDgwMEFDMjc0REM0MDRDMTAwMDhENQotOjEwMTY2MDAwMDAwMDg4MjEwNEUwMDAwNjAwMDAwMDAwM0MwMjA4MDBBMQotOjEwMTY3MDAwOEM0MjREQzAyNDQyMDAwMTNDMDEwODAwQUMyMjREQzAwOAotOjEwMTY4MDAwM0MwMjA4MDA5NDQyNERCQTNDMDMwODAwOTQ2MzREQzhFNAotOjEwMTY5MDAwMDAxMDIwMkIwMDQzMTAyNjJDNDIwMDAxMDA0NDEwMjU4RQotOjEwMTZBMDAwMTQ0MDAwMDQ4RjgzMDAxODI0MDIwMDEwMTQ2MjAwMEZGRAotOjEwMTZCMDAwMDAwMDAwMDAwRTAwMDU0MTI0MTEwMDAxM0MwMzA4MDA1OQotOjEwMTZDMDAwOTQ2MzREQkEzQzAyMDgwMDk0NDI0REM4MTQ2MjAwMDM3MgotOjEwMTZEMDAwMDAwMDAwMDAwRTAwMDRDMjAwMDAwMDAwMTYwMDAwMDMxRAotOjEwMTZFMDAwMDAwMDAwMDAwRTAwMDUyQjAwMDAwMDAwM0MwMzA4MDA3NQotOjEwMTZGMDAwOTQ2MzREQkUzQzAyMDgwMDk0NDI0REJDMjQ2MzAwMDEzQgotOjEwMTcwMDAwMzA2NEZGRkYzQzAxMDgwMEE0MjM0REJFMTQ4MjAwMDM5NwotOjEwMTcxMDAwMDAwMDAwMDAzQzAxMDgwMEE0MjA0REJFMTIwMDAwMDY5RAotOjEwMTcyMDAwMDAwMDAwMDAzQzAyMDgwMDk0NDI0REJBQTc0MjAwQTIwQgotOjEwMTczMDAwMEEwMDA1QTMwMjIwMTAyMTBFMDAwNTBGMDAwMDAwMDA4MgotOjEwMTc0MDAwMTA0MDAwMDQwMjIwMTAyMTBFMDAwNTFEMDAwMDAwMDBDMgotOjEwMTc1MDAwMDIyMDEwMjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAyRAotOjEwMTc2MDAwMDNFMDAwMDgyN0JEMDAyMDMwODRGRkZGMzBBNUZGRkYwNQotOjEwMTc3MDAwMDAwMDE4MjExMDgwMDAwNzAwMDAwMDAwMzA4MjAwMDFFNgotOjEwMTc4MDAwMTA0MDAwMDIwMDA0MjA0MjAwNjUxODIxMEEwMDA1QUI0OQotOjEwMTc5MDAwMDAwNTI4NDAwM0UwMDAwODAwNjAxMDIxMTBDMDAwMDY4QQotOjEwMTdBMDAwMjRDNkZGRkY4Q0EyMDAwMDI0QTUwMDA0QUM4MjAwMDAyOAotOjEwMTdCMDAwMEEwMDA1QjUyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDBDRQotOjEwMTdDMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwMDAwMDAwMDA2QQotOjEwMTdEMDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGMTQ2MkZGRkFGMQotOjEwMTdFMDAwMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMjQwMjAwMDEzQgotOjEwMTdGMDAwQUY2MjAwMENBNzYyMDAxMEE3NjIwMDEyQTc2MjAwMTQ3QgotOjEwMTgwMDAwMDNFMDAwMDhBNzYyMDAxNjMwODIwMDdGMDM0MjEwMjEyNwotOjEwMTgxMDAwM0MwODAwMEUwMDQ4MTgyMTNDMDIwODAwOEM0MjAwMjBDMQotOjEwMTgyMDAwMjdCREZGRDgyNDA3RkY4MEFGQjMwMDFDQUZCMjAwMTg1QwotOjEwMTgzMDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDIwMDA4MDgwMjExNgotOjEwMTg0MDAwMzBCMTAwRkYwMDg3MjAyNDMwRDIwMEZGMTA0MDAwMkY2RAotOjEwMTg1MDAwMDAwMDk4MjFBRjQ0MDAyQzkwNjIwMDAwMjQwMzAwNTA0NwotOjEwMTg2MDAwMzA0MjAwRkYxNDQzMDAwRTAwMDAwMDAwM0MwMjA4MDA1QwotOjEwMTg3MDAwOEM0MjAwRTAwMjAyMTAyMTAwNDcxMDI0QUY0MjAwMkNFRAotOjEwMTg4MDAwM0MwMjA4MDA4QzQyMDBFMDAyMDIxMDIxMzA0MjAwN0YzRQotOjEwMTg5MDAwMDM0MjEwMjEwMDQ4MTAyMTk0NDIwMEQ0MzA1M0ZGRkYyRQotOjEwMThBMDAwMEUwMDA1MkIwMDAwMDAwMDNDMDIwODAwOTQ0MjREQkVEMwotOjEwMThCMDAwOEY4MzAwMjAwMDExMzQwMDAwQzIzMDI1MDAxMjJDMDA1QwotOjEwMThDMDAwM0MwMjQwMDAwMEMyMzAyNTM0QTUwMDAxQUM3MDAwMDA4RAotOjEwMThEMDAwOEZCRjAwMjBBQzYwMDAwNDhGQjIwMDE4QUM3MzAwMDgwQQotOjEwMThFMDAwOEZCMTAwMTRBQzYwMDAwQzhGQjMwMDFDQUM2NTAwMTAwRAotOjEwMThGMDAwOEZCMDAwMTBBQzYwMDAxNDI0MDQwMDAxQUM2MDAwMTgyQwotOjEwMTkwMDAwMjdCRDAwMjgwQTAwMDU1MEFDNjYwMDFDOEZCRjAwMjBEMAotOjEwMTkxMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA2RAotOjEwMTkyMDAwMDNFMDAwMDgyN0JEMDAyODkzNDMwMTBGMjQwMjAwMTBBNAotOjEwMTkzMDAwMTA2MjAwMEUyODY1MDAxMTEwQTAwMDA3MjQwMjAwMTI5QQotOjEwMTk0MDAwMjQwMjAwMDgyNDA1MDAzQTEwNjIwMDA2MDAwMDMwMjEzRAotOjEwMTk1MDAwMDNFMDAwMDgwMDAwMDAwMDI0MDUwMDM1MTQ2MkZGRkNDRAotOjEwMTk2MDAwMDAwMDMwMjEwQTAwMDVEMDAwMDAwMDAwOEY0MjAwNzQwMgotOjEwMTk3MDAwMjQ0MjBGQTAwM0UwMDAwOEFGNjIwMDBDMjdCREZGRTg3RgotOjEwMTk4MDAwQUZCRjAwMTAwRTAwMDMxMDI0MDUwMDAxOEZCRjAwMTAzMAotOjEwMTk5MDAwMjQwMjAwMDFBNzYyMDAxMjI3QkQwMDE4MjQwMjAwMDFFMgotOjEwMTlBMDAwMDNFMDAwMDhBMzYwMDAyMjI3QkRGRkUwQUZCMTAwMTRGMAotOjEwMTlCMDAwQUZCMDAwMTBBRkJGMDAxODMwQjFGRkZGMEUwMDAzMDI0MAotOjEwMTlDMDAwMDA4MDgwMjE5MzYyMDAzRjI0MDMwMDA0MzA0MjAwRkYyNgotOjEwMTlEMDAwMTQ0MzAwMEMwMjAwMjAyMTEyMjAwMDA4MjQwMjAwMEFGNwotOjEwMTlFMDAwMEUwMDA1QzkwMDAwMDAwMDkzNjIwMDA1MjQwM0ZGRkVGRAotOjEwMTlGMDAwMDA0MzEwMjRBMzYyMDAwNTI0MDIwMDEyQTM2MjAwM0ZFQQotOjEwMUEwMDAwMDIwMDIwMjEwRTAwMDMwQkEzNjAwMDgxMTYyMDAwMDNCQQotOjEwMUExMDAwMDIwMDIwMjEwRTAwMDYyRDAwMDAwMDAwMDIwMDIwMjFGRgotOjEwMUEyMDAwMzIyNjAwRkY4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA1NgotOjEwMUEzMDAwMjQwNTAwMzgwQTAwMDVEMDI3QkQwMDIwMjdCREZGRTA5RgotOjEwMUE0MDAwQUZCRjAwMUNBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBCMAotOjEwMUE1MDAwMEUwMDAzMDIwMDgwODAyMTBFMDAwNUM5MDAwMDAwMDA3NgotOjEwMUE2MDAwOTM2MjAwM0YyNDEyMDAxODMwNTEwMEZGMTIzMjAwMDMyRAotOjEwMUE3MDAwMDIwMDIwMjEyNDAyMDAxMkEzNjIwMDNGOTM2MjAwMDVBRAotOjEwMUE4MDAwMjQwM0ZGRkUwMDQzMTAyNDBFMDAwMzBCQTM2MjAwMDU5NQotOjEwMUE5MDAwMDIwMDIwMjEyNDA1MDAyMDE2MzIwMDA3MDAwMDMwMjExQQotOjEwMUFBMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBEMAotOjEwMUFCMDAwMEEwMDAzMTAyN0JEMDAyMDhGQkYwMDFDOEZCMjAwMTg0MgotOjEwMUFDMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDM5MEEwMDA1RDAzMgotOjEwMUFEMDAwMjdCRDAwMjAyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTQ0NgotOjEwMUFFMDAwOTc0MjAxMEMyNDA1MDAzNjAwODA4MDIxMTQ0MDAwMTAyQwotOjEwMUFGMDAwMzA0NjAwRkYwRTAwMDMwMjAwMDAwMDAwMjQwMjAwMTIyNgotOjEwMUIwMDAwQTM2MjAwM0Y5MzYyMDAwNTM0NDIwMDEwMEUwMDA1QzkzNQotOjEwMUIxMDAwQTM2MjAwMDUwRTAwMDMwQjAyMDAyMDIxMDIwMDIwMjExOQotOjEwMUIyMDAwMEUwMDAzMTAyNDA1MDAyMDBBMDAwNjlDMDAwMDAwMDA5RgotOjEwMUIzMDAwMEUwMDA1RDAwMDAwMDAwMDBFMDAwMzAyMDIwMDIwMjE2QwotOjEwMUI0MDAwOTM2MjAwMjMyNDAzRkY5RjAyMDAyMDIxMDA0MzEwMjRGRQotOjEwMUI1MDAwOEZCRjAwMTQ4RkIwMDAxMEEzNjIwMDIzMEEwMDAzMEI5NAotOjEwMUI2MDAwMjdCRDAwMTgyN0JERkZFMEFGQkYwMDE4QUZCMTAwMTRCQwotOjEwMUI3MDAwQUZCMDAwMTAzMEIxMDBGRjBFMDAwMzAyMDA4MDgwMjFFMgotOjEwMUI4MDAwMjQwMjAwMTIwRTAwMDVDOUEzNjIwMDNGMEUwMDAzMEJFMQotOjEwMUI5MDAwMDIwMDIwMjEwMjAwMjAyMTAyMjAzMDIxOEZCRjAwMThFNgotOjEwMUJBMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDM1MEEwMDA1RDA1NQotOjEwMUJCMDAwMjdCRDAwMjBBMzgwMDAyQzAzRTAwMDA4QTM4MDAwMkQ5NwotOjEwMUJDMDAwOEY0MjAyNzgwNDQwRkZGRThGODIwMDM0QUY0MjAyNDAxMQotOjEwMUJEMDAwMjQwMjAwMDJBMzQyMDI0NDNDMDIxMDAwMDNFMDAwMDg3OQotOjEwMUJFMDAwQUY0MjAyNzgzQzAzNjAwMDhDNjI1NDAwMzA0MjAwMDgyRgotOjEwMUJGMDAwMTQ0MEZGRkQwMDAwMDAwMDhDNjI1NDA4QUY4MjAwMEMwRQotOjEwMUMwMDAwMjQwMjAwNTJBQzYwNTQwOEFDNjQ1NDMwQUM2MjU0MzRDQQotOjEwMUMxMDAwMjQwMjAwMDgwM0UwMDAwOEFDNjI1NDAwM0MwMjYwMDBBQgotOjEwMUMyMDAwOEM0MjU0MDAzMDQyMDAwODEwNDAwMDA1M0MwMzYwMDAyNAotOjEwMUMzMDAwOEM2MjU0MDAzMDQyMDAwODE0NDBGRkZEMDAwMDAwMDA5OAotOjEwMUM0MDAwOEY4MzAwMEMzQzAyNjAwMDAzRTAwMDA4QUM0MzU0MDhBMgotOjEwMUM1MDAwOTBBMzAwMDAyNDAyMDAwNTAwODA0MDIxMzA2MzAwM0Y3MwotOjEwMUM2MDAwMDAwMDQ4MjExNDYyMDAwNTAwMDA1MDIxOTBBMjAwMUNEMQotOjEwMUM3MDAwOTRBMzAwMUUzMDQ5MDBGRjMwNkFGRkZGQUQwMDAwMEM0NgotOjEwMUM4MDAwQUQwMDAwMTBBRDAwMDAyNDk1MDIwMDE0OEQwNTAwMUM2RAotOjEwMUM5MDAwOEQwNDAwMTgzMDQyRkZGRjAwNDkxMDIzMDAwMjExMDA5QwotOjEwMUNBMDAwMDAwMjM3QzMwMDQwMzgyMTAwODYyMDIzMDBBMjEwMkJGOQotOjEwMUNCMDAwMDA4MjIwMjMwMEE3MjgyM0FEMDUwMDFDQUQwNDAwMThENgotOjEwMUNDMDAwQTUwOTAwMTRBNTA5MDAyMEE1MEEwMDE2MDNFMDAwMDhENAotOjEwMUNEMDAwQTUwQTAwMjI4RjQyMDFGODA0NDBGRkZFMjQwMjAwMDIwMAotOjEwMUNFMDAwQUY0NDAxQzBBMzQyMDFDNDNDMDIxMDAwMDNFMDAwMDg1RAotOjEwMUNGMDAwQUY0MjAxRjgzQzAyMDgwMDhDNDIwMEI0MjdCREZGRTg2NwotOjEwMUQwMDAwQUZCRjAwMTQyNDQyMDAwMUFGQjAwMDEwM0MwMTA4MDAzNgotOjEwMUQxMDAwQUMyMjAwQjQ4RjQzMDAyNDNDMDIwMDFGMzBBQTAwRkYxNQotOjEwMUQyMDAwMzQ0MkZGODAzMEQ4MDBGRjAwNjI4MDI0MDA4MEY4MjExOAotOjEwMUQzMDAwMzBFRjAwRkYxMTU4MDAzQjAxNDA1ODIxMjQwQ0ZGODA3OAotOjEwMUQ0MDAwM0MxOTAwMEEzMTYzMDA3RjAwMDMxMEMwMDAwMzE5NDBGMgotOjEwMUQ1MDAwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDMjU2ODAwMDE2QQotOjEwMUQ2MDAwMzEwRDAwN0YwM0UyMTAyMTAwNDMxMDIxMzA0MzAwN0YzQQotOjEwMUQ3MDAwMDM0MzE4MjEwMDRDMTAyNDAwNzk0ODIxQUY0MjAwMjQ2RAotOjEwMUQ4MDAwOEQyMjAwMjQwMTZDMTgyNDAwNkM3MDI2QUQyMjAwMENGQQotOjEwMUQ5MDAwOEQyMjAwMjQzMTA4MDBGRkFEMjIwMDEwOTUyMjAwMTQ4RQotOjEwMURBMDAwOTUyMzAwMjA4RDI3MDAxQzMwNDJGRkZGMzA2M0ZGRkY4QQotOjEwMURCMDAwOEQyNjAwMTgwMDQzMTAyMzAwMDIxMTAwMDAwMjI3QzNFMwotOjEwMURDMDAwMDA0MDI4MjEwMEM0MzAyMzAwRTIxMDJCMDBDMjMwMjM0MQotOjEwMUREMDAwMDBFNTM4MjNBRDI3MDAxQ0FEMjYwMDE4OTUyMjAwMjAxMQotOjEwMURFMDAwQTUyMjAwMTQ5NTIyMDAyMjE1NEIwMDBBQTUyMjAwMTZGOAotOjEwMURGMDAwOEQyMzAwMjQ4RDIyMDAwODI1NDYwMDAxMzE0NTAwODBGNgotOjEwMUUwMDAwMTQ2MjAwMDQzMEM0MDA3RjEwOEYwMDAyMzhBQTAwODBFMgotOjEwMUUxMDAwMDBDMDUwMjE1MUFGMDAwMTMxQzgwMEZGMTUxOEZGQzlBMwotOjEwMUUyMDAwMDEwMDU4MjE4Rjg0MDAzNDMwODIwMDdGMDM0MjE4MjE0MgotOjEwMUUzMDAwM0MwMjAwMEEwMDYyMTgyMTI0MDJGRjgwMDA4MjIwMjQ1NAotOjEwMUU0MDAwQUY0NDAwMjRBMDZBMDA3OUEwNkEwMDgzOEM2MjAwNTAyRAotOjEwMUU1MDAwOEY4NDAwMzRBQzYyMDA3MDhDNjUwMDc0M0MwMjdGRkY5QwotOjEwMUU2MDAwMzQ0MkZGRkYwMEEyMjgyNDBFMDAwNzAzQUM2NTAwNzQ3MwotOjEwMUU3MDAwQUY1MDAwMjQ4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDhBMwotOjEwMUU4MDAwMjdCRDAwMTgyN0JERkZDMEFGQkUwMDM4QUZCNzAwMzQ3NAotOjEwMUU5MDAwQUZCNTAwMkNBRkIyMDAyMEFGQjEwMDFDQUZCMDAwMTgzRQotOjEwMUVBMDAwQUZCRjAwM0NBRkI2MDAzMEFGQjQwMDI4QUZCMzAwMjRFMgotOjEwMUVCMDAwOEY0NTAwMjQ4RjQ2MDAyODhGNDMwMDJDM0MwMjAwMUZEMgotOjEwMUVDMDAwMzQ0MkZGODAwMDYyMTgyNDAwQzIzMDI0MDA4MEE4MjEyMAotOjEwMUVEMDAwQUZBMzAwMTQwMEEyRjAyNDBFMDAwNkM3QUZBNjAwMTBBNgotOjEwMUVFMDAwM0MwMjA4MDA4QzQyMDBFMDI0MTBGRjgwMDM2MDg4MjEzRgotOjEwMUVGMDAwMDJBMjEwMjEwMDUwMTAyNEFGNDIwMDI0M0MwMjA4MDAyRQotOjEwMUYwMDAwOEM0MjAwRTAwMkEyMTAyMTMwNDIwMDdGMDM0MjE4MjFERgotOjEwMUYxMDAwM0MwMjAwMEEwMDYyOTAyMTkyNDIwMEQyOTM2MzAwODQ0NgotOjEwMUYyMDAwMzA1NzAwRkYzMDYzMDBGRjI0MDIwMDAxMTA2MjAwMzRDQwotOjEwMUYzMDAwMDM2MDIwMjEyNDAyMDAwMjE0NjIwMDM2MDAwMDAwMDAyOQotOjEwMUY0MDAwMEUwMDEyQUUwMjQwMjgyMTkyMjMwMDgzOTIyMjAwODNDOQotOjEwMUY1MDAwMzA2MzAwN0YzMDQyMDA3RjAwMDIxMEMwMDAwMzE5NDA1MAotOjEwMUY2MDAwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDMDJBMjEwMjExMQotOjEwMUY3MDAwMDA0MzM4MjEwMEYwMTAyNEFGNDIwMDI4OTIyNTAwNzg1OQotOjEwMUY4MDAwOTIyNDAwODMzMEUyMDA3RjAzNDIxODIxM0MwMjAwMENCRgotOjEwMUY5MDAwMTQ4NTAwMDcwMDYyODAyMTI0MDJGRkZGQTI0MjAwRjFBNQotOjEwMUZBMDAwMjQwMkZGRkZBNjQyMDBGMjBBMDAwN0JGMjQwMkZGRkYzRgotOjEwMUZCMDAwOTYwMjAwMjBBMjQyMDBGMTk2MDIwMDIyQTY0MjAwRjIwMAotOjEwMUZDMDAwOEUwMjAwMjRBRTQyMDBGNDkyMjIwMDgzQTI0MjAwRjA2RQotOjEwMUZEMDAwOEU0MjAwQzhBRTQyMDBGQzhFNDIwMEM0QUU0MjAwRjgwMQotOjEwMUZFMDAwOEUyMjAwNTBBRTQyMDEwMDhFNDIwMENDQUU0MjAxMDQ2RgotOjEwMUZGMDAwOTIyMjAwODUzMDQyMDAzRjBBMDAwODFBMzQ0MjAwNDAxNQotOjEwMjAwMDAwMEUwMDEyRDEwMjQwMjgyMTkyMjIwMDg1MEEwMDA4MUFFRgotOjEwMjAxMDAwMzA0MjAwM0Y5MzYyMDA4NTI0MDNGRkRGMzA0MjAwM0ZERgotOjEwMjAyMDAwQTM2MjAwODU5MzYyMDA4NTAwNDMxMDI0QTM2MjAwODVBQgotOjEwMjAzMDAwOTM2MzAwODM5MzYyMDA3ODMwNzQwMEZGMzA0MjAwRkZBNgotOjEwMjA0MDAwMTA1NDAwMzYyNDBBRkY4MDNDMEMwMDBDMzI4MzAwN0ZDMQotOjEwMjA1MDAwMDAwMzEwQzAwMDAzMTk0MDAwNjIxODIxM0MwMjA4MDA3MAotOjEwMjA2MDAwOEM0MjAwREMyNjg4MDAwMTMxMDkwMDdGMDJBMjEwMjE4OQotOjEwMjA3MDAwMDA0MzM4MjEzMEUyMDA3RjAzNDIxODIxMDBFQTEwMjQ5NwotOjEwMjA4MDAwQUY0MjAwMjgwMDZDODAyMThFMDIwMDI0MDI4QTE4MjRBRQotOjEwMjA5MDAwMDA2QTU4MjZBRTAyMDAwQzhFMDIwMDI0MzEwODAwRkZCMAotOjEwMjBBMDAwQUUwMjAwMTA5NjAyMDAxNDk2MDMwMDIwOEUwNzAwMUM1QQotOjEwMjBCMDAwMzA0MkZGRkYzMDYzRkZGRjhFMDYwMDE4MDA0MzEwMjNGRAotOjEwMjBDMDAwMDAwMjExMDAwMDAyMjdDMzAwNDAyODIxMDBDNDMwMjM3MQotOjEwMjBEMDAwMDBFMjEwMkIwMEMyMzAyMzAwRTUzODIzQUUwNzAwMUNCRAotOjEwMjBFMDAwQUUwNjAwMTg5NjAyMDAyMEE2MDIwMDE0OTYwMjAwMjJGNgotOjEwMjBGMDAwQTYwMjAwMTY5MjIyMDA3OTMwNDIwMEZGMTA1NDAwMDcxOQotOjEwMjEwMDAwMDAwMDAwMDA1MTM3MDAwMTMxNjgwMEZGOTIyMjAwNzg4MgotOjEwMjExMDAwMzA0MjAwRkYxNDQ4RkZDRDAxMDBBMDIxOTIyMjAwODMyRAotOjEwMjEyMDAwQTIyMjAwNzk4RTIyMDA1MDBBMDAwODdBQUUyMjAwNzBBNgotOjEwMjEzMDAwQTIyMjAwODU4RTIyMDA0QzI0MDVGRjgwQUU0MjAxMENCNQotOjEwMjE0MDAwOTIyMjAwODUzNDQyMDAyMEEyMjIwMDg1OTI0MjAwRDFEMgotOjEwMjE1MDAwM0MwMzA4MDA4QzYzMDBEQzMwNTQwMEZGM0MwMjA4MDBBNAotOjEwMjE2MDAwOEM0MjAwRTQwMDE0MzE0MDAwMTQyMEMwMDJBMzE4MjE2NgotOjEwMjE3MDAwMDBDNDIwMjEwMkEyMTAyMTAwNjQzODIxMDA0NjEwMjE1MQotOjEwMjE4MDAwMDA0NTE4MjQwMEU1MjgyNEFGNDUwMDI4QUY0MzAwMkM2MwotOjEwMjE5MDAwMzA0MjAwN0Y5MjQ0MDBEMDMwRTMwMDdGMDM0MjI4MjE4OAotOjEwMjFBMDAwMDM0MzE4MjEzQzAyMDAwQzAwNjI4MDIxM0MwMjAwMEUxNwotOjEwMjFCMDAwMzA5NjAwRkYwMEEyOTgyMTEyOTYwMDJBMDAwMDAwMDAyRAotOjEwMjFDMDAwOEUwMjAwMEMwMjAwMjAyMTAyNjAyODIxMTA0MDAwMjUxMAotOjEwMjFEMDAwMjYxMDAwMjgwRTAwMDZFMjAwMDAwMDAwOTI2MjAwMERBQQotOjEwMjFFMDAwMjY4MzAwMDEzMDc0MDBGRjMwNDIwMDdGQTI2MjAwMERBMAotOjEwMjFGMDAwMjQwNEZGODAxNjk3RkZGMDI2NzMwMDIwM0MwMjA4MDA5RAotOjEwMjIwMDAwOEM0MjAwREMwMDAwQTAyMTAyQTIxMDIxMDA0NDEwMjQxNgotOjEwMjIxMDAwQUY0MjAwMjgzQzAyMDgwMDhDNDIwMEU0M0MwMzA4MDA2NgotOjEwMjIyMDAwOEM2MzAwREMwMkEyMTAyMTAwNDQxMDI0QUY0MjAwMkM3OQotOjEwMjIzMDAwM0MwMjA4MDA4QzQyMDBFNDAyQTMxODIxMzA2MzAwN0ZCNgotOjEwMjI0MDAwMDJBMjEwMjEzMDQyMDA3RjAzNDIyMDIxMDM0MzE4MjFDMwotOjEwMjI1MDAwM0MwMjAwMEMwMDYyODAyMTNDMDIwMDBFMEEwMDA4M0M5NwotOjEwMjI2MDAwMDA4Mjk4MjE4RTQyMDBEOEFFMjIwMDUwOEU0MjAwRDhDMwotOjEwMjI3MDAwQUUyMjAwNzA5MjI1MDA4MzkyNDYwMEQxOTIyMzAwODMwMwotOjEwMjI4MDAwOTI0NDAwRDEyNDAyRkY4MDAwQTIyODI0MzA2MzAwN0YwMgotOjEwMjI5MDAwMzA4NDAwRkYwMEE2MjgyNTAwNjQxODJBMTA2MDAwMDI4MAotOjEwMjJBMDAwMzBBNTAwRkYzOEE1MDA4MEEyMjUwMDgzQTIyNTAwNzk3MwotOjEwMjJCMDAwMEUwMDA2RDUwMDAwMDAwMDkyMjIwMDdFMDJBMDIwMjEyMAotOjEwMjJDMDAwQTIyMjAwN0E4RTIzMDA3NDNDMDI3RkZGMzQ0MkZGRkY3QgotOjEwMjJEMDAwMDA2MjE4MjQwRTAwMDcwM0FFMjMwMDc0OEZBMjAwMTBDMgotOjEwMjJFMDAwQUY1RTAwMjQ4RkJGMDAzQ0FGNDIwMDI4OEZCRTAwMzg5NQotOjEwMjJGMDAwOEZBMjAwMTQ4RkI3MDAzNDhGQjYwMDMwOEZCNTAwMkMzQQotOjEwMjMwMDAwOEZCNDAwMjg4RkIzMDAyNDhGQjIwMDIwOEZCMTAwMUMzRgotOjEwMjMxMDAwOEZCMDAwMTgyN0JEMDA0MDAzRTAwMDA4QUY0MjAwMkMzQQotOjEwMjMyMDAwOTBBMjAwMDAyNDQyMDAwMUEwQTIwMDAwM0MwMzA4MDA4QgotOjEwMjMzMDAwOEM2MzAwRjQzMDQyMDBGRjE0NDMwMDBGMDA4MDMwMjExMgotOjEwMjM0MDAwQTBBMDAwMDAzQzAyMDgwMDhDNDIwMEU0OEY4NDAwMzQwRQotOjEwMjM1MDAwMDA4MjIwMjEzMDgyMDA3RjAzNDIxODIxM0MwMjAwMENDMQotOjEwMjM2MDAwMDA2MjE4MjEyNDAyRkY4MDAwODIyMDI0QUNDMzAwMDBGOAotOjEwMjM3MDAwMDNFMDAwMDhBRjQ0MDAyODhDODIwMDAwMjQ0MjAwMjBDMwotOjEwMjM4MDAwMDNFMDAwMDhBQzgyMDAwMDk0QzIwMDAwM0MwODA4MDA5MgotOjEwMjM5MDAwOTUwODAwQ0EzMEU3RkZGRjAwODA0ODIxMDEwMjEwMjFBNAotOjEwMjNBMDAwQTRDMjAwMDA5NEMyMDAwMDMwNDJGRkZGMDBFMjEwMkJFNAotOjEwMjNCMDAwNTQ0MDAwMDFBNEM3MDAwMDk0QTIwMDAwM0MwMzA4MDBBMAotOjEwMjNDMDAwOEM2MzAwQ0MyNDQyMDAwMUE0QTIwMDAwOTRBMjAwMDA2RgotOjEwMjNEMDAwMzA0MkZGRkY1NDQzMDAwNzhGODYwMDI4MDEwNzEwMkI2RgotOjEwMjNFMDAwQTRBMDAwMDA1NDQwMDAwMTAxMDAzODIxQTRDNzAwMDA0RgotOjEwMjNGMDAwOEY4NjAwMjg4Q0M0MDAxQ0FGNDQwMDNDOTRBMjAwMDBDRgotOjEwMjQwMDAwOEY0MzAwM0MzMDQyRkZGRjAwMDIxMEMwMDA2MjE4MjFFMQotOjEwMjQxMDAwQUY0MzAwM0M4RjQyMDAzQzAwODIyMDIzMTg4MDAwMDQyMAotOjEwMjQyMDAwMDAwMDAwMDA4Q0MyMDAxODBBMDAwOERCMjQ0MjAwMDFGMgotOjEwMjQzMDAwOENDMjAwMThBRjQyMDAzODNDMDIwMDUwMzQ0MjAwMTBGOQotOjEwMjQ0MDAwQUY0MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgotOjEwMjQ1MDAwOEY0MjAwMDAzMDQyMDAyMDEwNDBGRkZEMDAwMDAwMDBDRAotOjEwMjQ2MDAwOEY0MjA0MDRBRDIyMDAwNDhGNDIwNDAwQUQyMjAwMDAxQwotOjEwMjQ3MDAwM0MwMjAwMjBBRjQyMDAzMDAzRTAwMDA4MDAwMDAwMDBGMgotOjEwMjQ4MDAwMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTAyRAotOjEwMjQ5MDAwQUZCRjAwMUM5NEMyMDAwMDAwQzA4MDIxM0MxMjA4MDBBNQotOjEwMjRBMDAwOTY1MjAwQzYyNDQyMDAwMUE2MDIwMDAwOTYwMzAwMDBENgotOjEwMjRCMDAwOTRFMjAwMDAwMEUwMzAyMTE0NDMwMDA1OEZCMTAwMzBBOQotOjEwMjRDMDAwMEUwMDA4QjAwMjQwMzgyMTBBMDAwOTBEMDAwMDAwMDA4QgotOjEwMjREMDAwOEM4MzAwMDQ4QzgyMDAwNDI0NDIwMDQwMDQ2MTAwMDdDNQotOjEwMjRFMDAwQUM4MjAwMDQ4QzgyMDAwNDA0NDAwMDA0MDAwMDAwMDA2MAotOjEwMjRGMDAwOEM4MjAwMDAyNDQyMDAwMUFDODIwMDAwOTYwMjAwMDBBMQotOjEwMjUwMDAwMzA0MkZGRkY1MDUyMDAwMUE2MDAwMDAwOTYyMjAwMDA1QQotOjEwMjUxMDAwMjQ0MjAwMDFBNjIyMDAwMDhGODIwMDI4OTYyMzAwMDA5QQotOjEwMjUyMDAwOTQ0MjAwMTYxNDQzMDAwNDhGQkYwMDFDMjQwMjAwMDFEMwotOjEwMjUzMDAwQTYyMjAwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTRCQwotOjEwMjU0MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwOEY4OTAwMjgwRAotOjEwMjU1MDAwMjdCREZGRTBBRkJGMDAxODhEMjIwMDI4Mjc0ODA0MDBFOAotOjEwMjU2MDAwMzBFNzAwRkZBRjQyMDAzODhEMjIwMDJDQUY4ODAwMzBFQQotOjEwMjU3MDAwQUY0MjAwM0MzQzAyMDAwNUFGNDIwMDMwMDAwMDAwMDBDQQotOjEwMjU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgotOjEwMjU5MDAwMDAwMDAwMDA4QzgyMDAwQzhDODIwMDBDQUQwMjAwMDA1OAotOjEwMjVBMDAwOEM4MjAwMTBBRDAyMDAwNDhDODIwMDE4QUQwMjAwMDg3RAotOjEwMjVCMDAwOEM4MjAwMUNBRDAyMDAwQzhDQTIwMDE0QUQwMjAwMTAzNQotOjEwMjVDMDAwOEM4MjAwMjBBRDAyMDAxNDkwODIwMDA1MzA0MjAwRkY5MgotOjEwMjVEMDAwMDAwMjEyMDBBRDAyMDAxODhDQTIwMDE4QUQwMjAwMUMwRgotOjEwMjVFMDAwOENBMjAwMENBRDAyMDAyMDhDQTIwMDEwQUQwMjAwMjREMQotOjEwMjVGMDAwOENBMjAwMUNBRDAyMDAyODhDQTIwMDIwQUQwMjAwMkM5MQotOjEwMjYwMDAwQUQwNjAwMzBBRDAwMDAzNDk3ODMwMDI2MzQwMkZGRkY5MgotOjEwMjYxMDAwMTQ2MjAwMDIwMDYwMjAyMTM0MDRGRkZGMTBFMDAwMTE2QQotOjEwMjYyMDAwQUQwNDAwMzg5NTIzMDAzNjk1MjQwMDM2MjQwMjAwMDFCRAotOjEwMjYzMDAwMzA2M0ZGRkYwMDAzMThDMjAwNjkxODIxOTA2NTAwNDA1NQotOjEwMjY0MDAwMzA4NDAwMDcwMDgyMTAwNDAwNDUxMDI1QTA2MjAwNDA3RAotOjEwMjY1MDAwOEY4MjAwMjg5NDQyMDA1NjMwNDJGRkZGMEEwMDA5NzQxRQotOjEwMjY2MDAwQUQwMjAwM0M5NTIzMDAzNjk1MjQwMDM2MjQwMjAwMDE3QgotOjEwMjY3MDAwMzA2M0ZGRkYwMDAzMThDMjAwNjkxODIxOTA2NTAwNDAxNQotOjEwMjY4MDAwMzA4NDAwMDcwMDgyMTAwNDAwMDIxMDI3MDA0NTEwMjQ0NwotOjEwMjY5MDAwQTA2MjAwNDBBRDAwMDAzQzAwMDAwMDAwMDAwMDAwMDAwRgotOjEwMjZBMDAwMDAwMDAwMDAzQzAyMDAwNjM0NDIwMDQwQUY0MjAwMzAwRgotOjEwMjZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEY0MjAwMDA0OQotOjEwMjZDMDAwMzA0MjAwMTAxMDQwRkZGRDhGODYwMDI4QUY4ODAwMzA5OAotOjEwMjZEMDAwMjRDMjAwNTYyNEM3MDAzQzI0QzQwMDI4MjRDNTAwMzI2QwotOjEwMjZFMDAwMjRDNjAwMzYwRTAwMDhFRUFGQTIwMDEwOEZCRjAwMThGRgotOjEwMjZGMDAwMDNFMDAwMDgyN0JEMDAyMDhGODMwMDI0M0MwNjA4MDA2QgotOjEwMjcwMDAwOENDNjAwRTg4RjgyMDAzNDMwNjMzRkZGMDAwMzE5ODBERAotOjEwMjcxMDAwMDA0NjEwMjEwMDQzMTAyMTI0MDNGRjgwMzA0NjAwN0YzMwotOjEwMjcyMDAwMDA0MzEwMjRBRjQyMDAyODAzNDYxODIxM0MwMjAwMEM0RAotOjEwMjczMDAwMDA2MjMwMjE5MEMyMDAwRDMwQTUwMEZGMDAwMDM4MjE1QQotOjEwMjc0MDAwMzQ0MjAwMTBBMEMyMDAwRDhGODkwMDI4OEY4QTAwMjQxNwotOjEwMjc1MDAwOTUyMzAwMzYwMDBBMTM4MjMwNDgwMDAzMjQwMjAwMDE0QQotOjEwMjc2MDAwQTRDMzAwMEUxMTAyMDAwQjI5MDIwMDAyMTA0MDAwMDU1NAotOjEwMjc3MDAwMjQwMjAwMDIxMTAwMDAwQzI0MDMwMDAxMEEwMDA5QjgyMQotOjEwMjc4MDAwMDAwMDE4MjExMTAyMDAwNjAwMDAwMDAwMEEwMDA5QjgyQwotOjEwMjc5MDAwMDAwMDE4MjE4Q0MyMDAyQzBBMDAwOUI4MjQ0MzAwMDE1MwotOjEwMjdBMDAwOENDMjAwMTQyNDQzMDAwMThDQzIwMDE4MDA0MzEwMkI3QgotOjEwMjdCMDAwNTA0MDAwMDkyNDA3MDAwMTI0MDIwMDI3MTRBMjAwMDM0RQotOjEwMjdDMDAwMDAwMDAwMDAwQTAwMDlDNDI0MDcwMDAxOTUyMjAwM0UxMQotOjEwMjdEMDAwMjQ0MjAwMDFBNTIyMDAzRTAwMEExMzgyMzA0MzAwMDM3OAotOjEwMjdFMDAwMkM2MjAwMDIxMDQwMDAwOTAwODAyODIxMTQ2MDAwMDRCRgotOjEwMjdGMDAwMDAwMDAwMDA5NEMyMDAzNjBBMDAwOUQ0MzA0NkZGRkZGMgotOjEwMjgwMDAwOENDNjAwMzgwQTAwMDlENDAwODAyODIxMDAwMDMwMjEzRAotOjEwMjgxMDAwM0MwNDA4MDAyNDg0NEREODBBMDAwOTIxMDAwMDAwMDA2RgotOjEwMjgyMDAwMjc0OTAxMDA4RDIyMDAwQzk1MjMwMDA2MDEyMDIwMjE1QwotOjEwMjgzMDAwMDAwMjE2MDIzMDQ2MDAzRjMwNjNGRkZGMjQwMjAwMjdFQgotOjEwMjg0MDAwMDBDMDI4MjEyOEM3MDAyODEwQzIwMDBFQUY4MzAwMjQzMgotOjEwMjg1MDAwMTBFMDAwMDgyNDAyMDAzMTI0MDIwMDIxMTBDMjAwMDkwNwotOjEwMjg2MDAwMjQwMjAwMjUxMEMyMDAwNzkzODIwMDJEMEEwMDA5RjNGQwotOjEwMjg3MDAwMDAwMDAwMDAxMEMyMDAwNTkzODIwMDJEMEEwMDA5RjMzOQotOjEwMjg4MDAwMDAwMDAwMDAwQTAwMDk4QzAwMDAwMDAwMEEwMDA2QkVEQgotOjEwMjg5MDAwMDAwMDAwMDA5NTIzMDAwNjkxMjQwMDA1OEQyNTAwMEMwMgotOjEwMjhBMDAwOEQyNjAwMTA4RDI3MDAxODhEMjgwMDFDOEQyOTAwMjBGMgotOjEwMjhCMDAwMjQ0MjAwMDEzQzAxMDgwMEE0MjM0RERFM0MwMTA4MDAzNQotOjEwMjhDMDAwQTAyNDREREQzQzAxMDgwMEFDMjU0REU0M0MwMTA4MDA4RQotOjEwMjhEMDAwQUMyNjRERTgzQzAxMDgwMEFDMjc0REYwM0MwMTA4MDA1NwotOjEwMjhFMDAwQUMyODRERjQzQzAxMDgwMEFDMjk0REY4MDNFMDAwMDg4OQotOjEwMjhGMDAwQTM4MjAwMkQ4Rjg3MDAyODI3QkRGRkMwQUZCMzAwMzQwRgotOjEwMjkwMDAwQUZCMjAwMzBBRkIxMDAyQ0FGQjAwMDI4QUZCRjAwMzg3RAotOjEwMjkxMDAwM0MwMjA4MDA4QzQyMDBEMDk0RTMwMDMwMzBCMEZGRkY0RQotOjEwMjkyMDAwMDA1MDEwMDczMDQ1RkZGRjMwNjNGRkZGMDBDMDk4MjFDMwotOjEwMjkzMDAwQTdBMjAwMTAzQzExMDgwMDk2MzEwMEM2MTRBMzAwMDY5RgotOjEwMjk0MDAwMzA5MkZGRkY4Q0UyMDAyNDI0NDIwMDMwQUY0MjAwM0M3MgotOjEwMjk1MDAwMEEwMDBBMkM4Q0UyMDAyMDk0RTIwMDMyMzA0MkZGRkY5MQotOjEwMjk2MDAwNTRBMjAwMDgyN0E0MDAxODhDRTIwMDJDMjQ0MjAwMzA1NgotOjEwMjk3MDAwQUY0MjAwM0M4Q0UyMDAyOEFGNDIwMDM4MEEwMDBBM0ExRAotOjEwMjk4MDAwOEY4NDAwMjgyN0E1MDAxMDI3QTYwMDIwMDIyMDM4MjFDOAotOjEwMjk5MDAwMEUwMDA4QjBBN0EwMDAyMDhGQTIwMDE4MjQ0MjAwMzAyQgotOjEwMjlBMDAwQUY0MjAwMzg4RkEyMDAxQ0FGNDIwMDNDOEY4NDAwMjg0OQotOjEwMjlCMDAwM0MwMjAwMDVBRjQyMDAzMDk0ODIwMDM0Mjc0MzA0MDBGQgotOjEwMjlDMDAwMzA0MkZGRkYwMjAyMTAyQjE0NDAwMDA3QUY4MzAwMzA5QgotOjEwMjlEMDAwOTQ4MjAwNTQ5NDgzMDAzNDAyMDIxMDIxMDA0MzEwMjM5NwotOjEwMjlFMDAwMEEwMDBBNEUzMDQzRkZGRjk0ODMwMDU0OTQ4MjAwMzQ1RgotOjEwMjlGMDAwMDIyMzE4MjEwMDUwMTAyMzAwNjIxODIzMzA2M0ZGRkZDOAotOjEwMkEwMDAwOTQ4MjAwMTYzMDQyRkZGRjE0NDMwMDAzMDAwMDAwMDBEMAotOjEwMkExMDAwMEEwMDBBNUMyNDAzMDAwMTk0ODIwMDE2MzA0MkZGRkY4MgotOjEwMkEyMDAwMDA0MzEwMkIxMDQwMDAwNThGODIwMDMwOTQ4MjAwMTY2NgotOjEwMkEzMDAwMDA2MjEwMjMzMDQzRkZGRjhGODIwMDMwQUM1MzAwMDA1MAotOjEwMkE0MDAwQUM0MDAwMDRBQzUyMDAwOEFDNDMwMDBDM0MwMjAwMDY1MQotOjEwMkE1MDAwMzQ0MjAwMTBBRjQyMDAzMDAwMDAwMDAwMDAwMDAwMDBDRgotOjEwMkE2MDAwMDAwMDAwMDA4RjQyMDAwMDMwNDIwMDEwMTA0MEZGRkRDNwotOjEwMkE3MDAwMDAxMDE4QzIwMDY0MTgyMTkwNjUwMDQwMzIwNDAwMDc1RAotOjEwMkE4MDAwMjQwMjAwMDE4RkJGMDAzODhGQjMwMDM0OEZCMjAwMzBCMgotOjEwMkE5MDAwOEZCMTAwMkM4RkIwMDAyODAwODIxMDA0MDA0NTEwMjU1MwotOjEwMkFBMDAwMjdCRDAwNDAwM0UwMDAwOEEwNjIwMDQwMjdCREZGQTg0QQotOjEwMkFCMDAwQUZCNjAwNTBBRkI1MDA0Q0FGQjQwMDQ4QUZCMzAwNDQ2MAotOjEwMkFDMDAwQUZCMTAwM0NBRkJGMDA1NEFGQjIwMDQwQUZCMDAwMzg3MAotOjEwMkFEMDAwOEM5MDAwMDAzQzAyMDgwMDhDNDIwMEU4OEY4NjAwMzQ5NQotOjEwMkFFMDAwOTYwMzAwMDIyNDEzRkY4MDAwQzIzMDIxMzA2MzNGRkZCMQotOjEwMkFGMDAwMDAwMzE5ODAwMEMzMzgyMTAwRjMxMDI0OTBCMjAwMDBCNQotOjEwMkIwMDAwQUY0MjAwMkM5MjAzMDAwMjMwRTIwMDdGMDM0MjMwMjFFQQotOjEwMkIxMDAwM0MwMjAwMEUwMEMyODgyMTMwNjMwMEMwMjQwMjAwNDA0NQotOjEwMkIyMDAwMDA4MEE4MjEwMEEwQjAyMTE0NjIwMDI2MDAwMEEwMjE4RQotOjEwMkIzMDAwOEUzNDAwMzg4RTIyMDAxODE0NDAwMDAyMjQwMjAwMDE1NgotOjEwMkI0MDAwQUUyMjAwMTg5MjAyMDAwRDMwNDIwMDIwMTQ0MDAwMTUwMQotOjEwMkI1MDAwOEY4MjAwMzQzQzAzMDgwMDhDNjMwMERDMDAxMjM4QzAxNAotOjEwMkI2MDAwMDAxMjMxNDAwMDQzMTAyMTAwQzczMDIxMDA0NjM4MjFCNwotOjEwMkI3MDAwMzBFMzAwMDczQzAyMDA4MDMwRTYwMDc4MDBDMjMwMjVEOAotOjEwMkI4MDAwMDM0MzE4MjEwMEYzMTAyNEFGNDIwODAwMjQ2MzA5MDAxNgotOjEwMkI5MDAwQUY0NjA4MTA4RTIyMDAxODhDNjMwMDA4MDA0MzEwMjFGNQotOjEwMkJBMDAwQUUyMjAwMTg4RTIyMDAyQzhFMjMwMDE4MjQ0MjAwMDEzMQotOjEwMkJCMDAwMDA2MjE4MkIxMDYwMDAzRDAwMDAwMDAwMEEwMDBCMTA5RQotOjEwMkJDMDAwMDAwMDAwMDA5MjAzMDAwMjI0MDJGRkMwMDA0MzEwMjQxMgotOjEwMkJEMDAwMzA0MjAwRkYxNDQwMDAwNTI0MDIwMDAxQUUyMjAwMTgxQwotOjEwMkJFMDAwOTYyMjAwMzYwQTAwMEFGOTMwNTRGRkZGOEUyMjAwMTRBNAotOjEwMkJGMDAwMjQ0MjAwMDFBRTIyMDAxODkyMDIwMDAwMDAwMjE2MDBEQQotOjEwMkMwMDAwMDAwMjE2MDMwNDQxMDAyOTAwMDAwMDAwOTYwMjAwMDJBMQotOjEwMkMxMDAwMjdBNDAwMTAwMDgwMjgyMUE3QTIwMDE2OTYwMjAwMDIxNwotOjEwMkMyMDAwMjQwNzAwMDEwMDAwMzAyMTMwNDJGRkZGQUY4MjAwMjQ2MgotOjEwMkMzMDAwMEUwMDA5MjFBRkEwMDAxQzk2MDMwMDAyM0MwNDA4MDAwRQotOjEwMkM0MDAwOEM4NDAwRTg4RjgyMDAzNDMwNjMzRkZGMDAwMzE5ODBEQQotOjEwMkM1MDAwMDA0NDEwMjEwMDQzMTAyMTMwNDMwMDdGM0MwNTAwMEM0QwotOjEwMkM2MDAwMDA1MzEwMjQwMzQzMTgyMUFGNDIwMDI4MDA2NTE4MjFBNwotOjEwMkM3MDAwOTA2MjAwMEQwMDEyMjE0MDMwNDIwMDdGQTA2MjAwMERFMgotOjEwMkM4MDAwM0MwMzA4MDA4QzYzMDBFNDhGODIwMDM0MDA0MzEwMjE3MQotOjEwMkM5MDAwMDA0NDM4MjEzMEUyMDA3RjAzNDIxMDIxMDA0NTEwMjExQQotOjEwMkNBMDAwMDBGMzE4MjRBRjQzMDAyOEFFQTIwMDAwOTIyMjAwMERDQQotOjEwMkNCMDAwMzA0MjAwMTAxMDQwMDAxMzAyQTAyMDIxOEY4MzAwMjgxMgotOjEwMkNDMDAwOEVBNDAwMDAwMjgwMzAyMTk0NjIwMDNFMjQ0MkZGRkY2NwotOjEwMkNEMDAwQTQ2MjAwM0U5NDg0MDAwMjk2MjUwMDBFMzA4NEZGRkYxQgotOjEwMkNFMDAwMEUwMDBBMEIzMEE1RkZGRjhGODIwMDI4OTQ0MzAwMzRBQQotOjEwMkNGMDAwOTYyMjAwMEUxNDQzMDAwMzAyQTAyMDIxMjQwMjAwMDFBQQotOjEwMkQwMDAwQTM4MjAwMkMwMkMwMjgyMTBFMDAwODk2MDAwMDAwMDBCQgotOjEwMkQxMDAwOEZCRjAwNTQ4RkI2MDA1MDhGQjUwMDRDOEZCNDAwNDg2MQotOjEwMkQyMDAwOEZCMzAwNDQ4RkIyMDA0MDhGQjEwMDNDOEZCMDAwMzhBOQotOjEwMkQzMDAwMDNFMDAwMDgyN0JEMDA1ODhGODIwMDI4MjdCREZGRDA4MAotOjEwMkQ0MDAwQUZCNDAwMjhBRkIyMDAyMEFGQkYwMDJDQUZCMzAwMjQ1NwotOjEwMkQ1MDAwQUZCMTAwMUNBRkIwMDAxODkwNDQwMEQwOTA0MzAwRDEzOAotOjEwMkQ2MDAwMDAwMEEwMjEzMDkyMDBGRkEzQTMwMDEwMzA2MzAwRkZGOQotOjEwMkQ3MDAwOEM1MTAwRDg4QzUzMDBEQzEwNzIwMDJCMjQwMjAwMDEwRgotOjEwMkQ4MDAwM0MwMzA4MDA4QzYzMDBFNDkzQTQwMDEwOEY4MjAwMzQ5RAotOjEwMkQ5MDAwMjQwNkZGODAwMDA0MjE0MDAwNDMxMDIxMDA0NDEwMjEzQwotOjEwMkRBMDAwMzA0MzAwN0YwMDQ2MTAyNEFGNDIwMDI4MDM0MzE4MjExRgotOjEwMkRCMDAwM0MwMjAwMEMwMDYyMTgyMThDNjIwMDA0MjdBNDAwMTQ1RAotOjEwMkRDMDAwMjdBNTAwMTAwMjIyODAyMTAyNzAxMDIzMDQ0MDAwMTU2NAotOjEwMkREMDAwQUZBMzAwMTQ5MDYyMDAwRDAwQzIxMDI0MzA0MjAwRkYyNwotOjEwMkRFMDAwMTQ0MDAwMDcwMjAwODgyMTkwNjIwMDBEMzQ0MjAwNDAyOAotOjEwMkRGMDAwMEUwMDA4OTZBMDYyMDAwRDBBMDAwQjU1OTNBMjAwMTA2OQotOjEwMkUwMDAwMEUwMDBBNzkyNDE0MDAwMThGODMwMDI4QUM3MDAwRDhDQQotOjEwMkUxMDAwOTNBMjAwMTBBMDYyMDBEMTkzQTIwMDEwMTQ1MkZGRDgxOAotOjEwMkUyMDAwMDAwMDAwMDAyNDAyMDAwMTE2ODIwMDA0OEZCRjAwMkM2NQotOjEwMkUzMDAwMEUwMDA2QkUwMDAwMDAwMDhGQkYwMDJDOEZCNDAwMjhEQgotOjEwMkU0MDAwOEZCMzAwMjQ4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMTgwOAotOjEwMkU1MDAwMDNFMDAwMDgyN0JEMDAzMDI3QkRGRkQ4QUZCMzAwMUMzQQotOjEwMkU2MDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjA3OAotOjEwMkU3MDAwMDA4MDk4MjEwMEUwODAyMTMwQjFGRkZGMEUwMDA1MkI3QgotOjEwMkU4MDAwMzBEMjAwRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQotOjEwMkU5MDAwOEY4MjAwMjBBQzUxMDAwMEFDNTIwMDA0QUM1MzAwMDhGQgotOjEwMkVBMDAwQUM0MDAwMENBQzQwMDAxMEFDNDAwMDE0QUM0MDAwMTgyQQotOjEwMkVCMDAwM0MwMzA4MDA5NDYzNERCRTAyMDM4MDI1QUM1MDAwMUMwNwotOjEwMkVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwNDAwMDFEOQotOjEwMkVEMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ3OQotOjEwMkVFMDAwOEZCMDAwMTAwQTAwMDU1MDI3QkQwMDI4MjdCREZGRTg1RAotOjEwMkVGMDAwQUZCMDAwMTBBRkJGMDAxNDMwQTVGRkZGMzBDNjAwRkYxOQotOjEwMkYwMDAwMDA4MDgwMjEyNDAyMEM4MEFGNDIwMDI0MDAwMDAwMDBEOQotOjEwMkYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQotOjEwMkYyMDAwMEUwMDBCNjQwMDAwMDAwMDNDMDQwODAwMjQ4NDAwRTA1NAotOjEwMkYzMDAwOEM4MjAwMDAyNDAzRkY4MDhGQkYwMDE0MDIwMjEwMjE0NgotOjEwMkY0MDAwMDA0MzEwMjRBRjQyMDAyNDhDODIwMDAwM0MwMzAwMEE5RQotOjEwMkY1MDAwMDIwMjgwMjEzMjEwMDA3RjAzNTAxMDIxOEZCMDAwMTAzOAotOjEwMkY2MDAwMDA0MzEwMjEyN0JEMDAxODAzRTAwMDA4QUY4MjAwMjhBRAotOjEwMkY3MDAwMjdCREZGRThBRkJGMDAxMDhGNDQwMTQwM0MwMzA4MDBBRAotOjEwMkY4MDAwOEM2MzAwRTAyNDAyRkY4MEFGODQwMDM0MDA4MzE4MjFBQQotOjEwMkY5MDAwMDA2MjEwMjRBRjQyMDAyNDNDMDIwMDA4MDM0MjQwMjE5QQotOjEwMkZBMDAwOTUwNTAwMDIzMDYzMDA3RjNDMDIwMDBBMDM0MzE4MjFBQwotOjEwMkZCMDAwMDA2MjE4MjEzMEE1RkZGRjM0MDJGRkZGMDAwMDMwMjExRQotOjEwMkZDMDAwM0MwNzYwMjAxMEEyMDAwNkFGODMwMDI4MjQwMkZGRkYwOAotOjEwMkZEMDAwQTUwMjAwMDI5NDY1MDBENDBFMDAwQjg5MzBBNUZGRkYwNgotOjEwMkZFMDAwOEZCRjAwMTAyNDAyMEM4MDI3QkQwMDE4MDNFMDAwMDhFQQotOjEwMkZGMDAwQUY0MjAwMjQzQzAyMDAwODAzNDI0MDIxOTUwMjAwMDIzNwotOjEwMzAwMDAwM0MwQTA4MDA5NTRBMDBDNjMwNDZGRkZGMTRDMDAwMDc3RQotOjEwMzAxMDAwMzQwMkZGRkY4RjgyMDAyODhGODQwMDM0M0MwNzYwMjAzOQotOjEwMzAyMDAwOTQ0NTAwRDQwQTAwMEJGMjMwQTVGRkZGMTBDMjAwMjQyMwotOjEwMzAzMDAwOEY4NzAwMjg5NEUyMDA1NDk0RTQwMDE2MzA0NUZGRkY4NwotOjEwMzA0MDAwMDBBNjEwMjMwMEE2MTgyQjMwODlGRkZGMTA2MDAwMDQ5MwotOjEwMzA1MDAwMzA0NEZGRkYwMEM1MTAyMzAxMjIxMDIzMzA0NEZGRkYzRQotOjEwMzA2MDAwMDA4QTEwMkIxMDQwMDAwQzAxMkExMDIzMjQwMjAwMDFCQQotOjEwMzA3MDAwQTUwMjAwMTYyNDAyRkZGRkE1MDIwMDAyOTRFNTAwRDQ3OQotOjEwMzA4MDAwOEY4NDAwMzQwMDAwMzAyMTMwQTVGRkZGM0MwNzYwMjAxMgotOjEwMzA5MDAwMEEwMDBCODkwMDAwMDAwMDAwNDQxMDJBMTA0MDAwMDhCQwotOjEwMzBBMDAwMDAwMDAwMDA5NTAyMDAxNjMwNDIwMDAxMTA0MDAwMDRBQwotOjEwMzBCMDAwMDAwMDAwMDA5NzQyMDA3RTI0NDIwMDE0QTUwMjAwMTY4MgotOjEwMzBDMDAwMDNFMDAwMDgwMDAwMDAwMDhGODQwMDI4MjdCREZGRTAxNwotOjEwMzBEMDAwQUZCRjAwMTg5NDgyMDAzNDk0ODMwMDNFMTA2MDAwMUE0MQotOjEwMzBFMDAwMzA0OEZGRkY5MzgzMDAyQzI0MDIwMDAxMTQ2MjAwMjc2NAotOjEwMzBGMDAwOEZCRjAwMTg4RjgyMDAyODAwMDgxOEMyMzEwODAwMDcwRgotOjEwMzEwMDAwMDA2MjE4MjEyNDQ3MDAzQTI0NDkwMDU0MjQ0NDAwMjAzNgotOjEwMzExMDAwMjQ0NTAwMzAyNDQ2MDAzNDkwNjIwMDQwMzA0MjAwRkZENQotOjEwMzEyMDAwMDEwMjEwMDczMDQyMDAwMTEwNDAwMDE2OEZCRjAwMTg0NgotOjEwMzEzMDAwMEUwMDA4RUVBRkE5MDAxMDhGODIwMDI4OTQ0MjAwMzRFMAotOjEwMzE0MDAwMEEwMDBDMEIzMDQ4RkZGRjk0ODMwMDM2OTQ4MjAwMzQ1MQotOjEwMzE1MDAwMTA0MzAwMEU4RkJGMDAxODk0ODIwMDM2QTQ4MjAwMzQwMgotOjEwMzE2MDAwOTQ4MjAwNTZBNDgyMDA1NDhDODIwMDJDQUM4MjAwMjRFRAotOjEwMzE3MDAwOTQ4MjAwMzJBNDgyMDAzMDk0ODIwMDNDQTQ4MjAwM0FGRgotOjEwMzE4MDAwOEZCRjAwMTgwQTAwMEJDQjI3QkQwMDIwMDNFMDAwMDgwQQotOjEwMzE5MDAwMjdCRDAwMjAyN0JERkZFOEFGQkYwMDEwOEY0QTAxMDAwOAotOjEwMzFBMDAwM0MwNTA4MDA4Q0E1MDBFMDNDMDIwODAwOTA0MjRERTQ3QwotOjEwMzFCMDAwM0MwQzA4MDA5NThDNERERTAxNDUyODIxMzA0QjAwM0YyQQotOjEwMzFDMDAwMzBBMjAwN0YwMzQyNDAyMTM5NjkwMDMyM0MwMjAwMEFFQwotOjEwMzFEMDAwMzk2MzAwM0YyQzYzMDAwMTAxMDI0MDIxMkQyOTAwMDFDOQotOjEwMzFFMDAwMjQwMkZGODAwMEEyMjgyNDAxMjM0ODI1QUY4QTAwMzQ0RQotOjEwMzFGMDAwMDA4MDE4MjFBRjQ1MDAyNDAwMDAzMDIxMDA4MDI4MjFFNAotOjEwMzIwMDAwMjQwNzAwMDFBRjg4MDAyODNDMDQwODAwMjQ4NDRERDgxRQotOjEwMzIxMDAwQUY4QzAwMjQxNTIwMDAwN0EzODAwMDJEMjQwMjAwMjA3RAotOjEwMzIyMDAwNTU2MjAwMEYwMDYwMjAyMTM0MDJGRkZGNTU4MjAwMEMyMAotOjEwMzIzMDAwMDA2MDIwMjEyNDAyMDAyMDE1NjIwMDA1MDAwMDAwMDAyQgotOjEwMzI0MDAwOEM2MzAwMTQyNDAyRkZGRjEwNjIwMDA3MDAwMDAwMDBERQotOjEwMzI1MDAwMEUwMDA5MjEwMDAwMDAwMDBBMDAwQzY4MDAwMDAwMDBCOAotOjEwMzI2MDAwMEUwMDA5OEMwMTYwMjgyMTBFMDAwQzAwMDAwMDAwMDBGNwotOjEwMzI3MDAwOEZCRjAwMTAyNDAyMEM4MDI3QkQwMDE4MDNFMDAwMDg1NwotOjEwMzI4MDAwQUY0MjAwMjQzQzAyMDgwMDhDNDIwMEUwMjdCREZGQTBCMgotOjEwMzI5MDAwQUZCMTAwM0MwMDgyMTAyMTI0MTFGRjgwQUZCRTAwNTg2NgotOjEwMzJBMDAwQUZCNzAwNTRBRkIyMDA0MEFGQjAwMDM4QUZCRjAwNUM2MgotOjEwMzJCMDAwQUZCNjAwNTBBRkI1MDA0Q0FGQjQwMDQ4QUZCMzAwNDQ1OAotOjEwMzJDMDAwMDA1MTEwMjQ4RjQ4MDAyNDhGNDkwMDI4OEY0NzAwMjg4MAotOjEwMzJEMDAwQUY0MjAwMjQzQzAyMDgwMDhDNDIwMEUwMDA4MDkwMjFCNAotOjEwMzJFMDAwMjQwNjAwMDYwMDgyMTAyMTMwNDIwMDdGMDM0MjE4MjE4QwotOjEwMzJGMDAwM0MwMjAwMEEwMDYyODAyMTNDMDIwMDFGMzQ0MkZGODAzMQotOjEwMzMwMDAwMDBFMjM4MjQyN0E0MDAxMDI2MDUwMEYwMDEyMkYwMjQ1MgotOjEwMzMxMDAwMDEwMkI4MjQwRTAwMDVCNUFGQTcwMDMwOEZBMjAwMTgzNwotOjEwMzMyMDAwQUUwMjAwQzQ4RkEyMDAxQ0FFMDIwMEM4OEZBMjAwMjQwRgotOjEwMzMzMDAwQUUwMjAwQ0M5M0E0MDAxMDkyMDMwMEQxMjQwMkZGODBCRgotOjEwMzM0MDAwMDA4MjEwMjQwMDQzMTAyNTMwNDkwMEZGMzA4MzAwN0ZBNQotOjEwMzM1MDAwMzEyMjAwN0YwMDYyMTAyQTEwNDAwMDA0MDAwMzEwQzBEOAotOjEwMzM2MDAwMDEzMTEwMjYzMDQ5MDBGRjAwMDMxMEMwMDAwMzE5NDA0RQotOjEwMzM3MDAwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDOTIwNDAwRDI1QQotOjEwMzM4MDAwMDI0MjEwMjEwMDQzMTAyMTAwNTExMDI0QUY0MjAwMjhCNgotOjEwMzM5MDAwOTNBMzAwMTAzMDYzMDA3RjAwMDMxMEMwMDAwMzE5NDBBNgotOjEwMzNBMDAwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDMDI0MjEwMjExRAotOjEwMzNCMDAwMDA0MzEwMjEzMDQyMDA3RjAzNDIxODIxM0MwMjAwMENFMAotOjEwMzNDMDAwMDA2MjQwMjE4RkEzMDAxNDI0MDJGRkZGMTA2MjAwMzAyRQotOjEwMzNEMDAwMzA5NTAwRkY5M0EyMDAxMTk1MDMwMDE0MzA0NDAwRkZDNAotOjEwMzNFMDAwMzA2M0ZGRkYwMDY0MTgyQjEwNjAwMDBEMDAwMDAwMDAyOAotOjEwMzNGMDAwOTUwNDAwMTQ4RDA3MDAxQzhEMDYwMDE4MzA4NEZGRkYxMwotOjEwMzQwMDAwMDA0NDIwMjMwMDA0MjEwMDAwMDAxMDIxMDBFNDM4MjFBMgotOjEwMzQxMDAwMDBFNDIwMkIwMEMyMzAyMTBBMDAwQ0UyMDBDNDMwMjE1RAotOjEwMzQyMDAwOTUwNDAwMTQ4RDA3MDAxQzhEMDYwMDE4MzA4NEZGRkZFMgotOjEwMzQzMDAwMDA4MjIwMjMwMDA0MjEwMDAwMDAxMDIxMDA4MDE4MjFCOAotOjEwMzQ0MDAwMDBDMjMwMjMwMEU0MjAyQjAwQzQzMDIzMDBFMzM4MjNFMwotOjEwMzQ1MDAwQUQwNzAwMUNBRDA2MDAxODkzQTIwMDExQTUwMjAwMTREMAotOjEwMzQ2MDAwOTdBMjAwMTJBNTAyMDAxNjhGQTIwMDE0QUQwMjAwMTA1MAotOjEwMzQ3MDAwOEZBMjAwMTRBRDAyMDAwQzkzQTIwMDExQTUwMjAwMjAzRgotOjEwMzQ4MDAwOTdBMjAwMTJBNTAyMDAyMjhGQTIwMDE0QUQwMjAwMjQxMAotOjEwMzQ5MDAwMjQwNkZGODAwMjQ2MTAyNDMyNTYwMDdGQUY0MjAwMjRFQgotOjEwMzRBMDAwMDM1NjE4MjEzQzAyMDAwQTAwNjI4MDIxOEUwMjAwNEM2MwotOjEwMzRCMDAwOEZBMjAwMjAzMTI0MDA3RjAwMDQyOEMwQUUwMjAwNTBGQgotOjEwMzRDMDAwOEZBMjAwMjAwMDA0MjE0MDAwODUyODIxQUUwMjAwNzA1OAotOjEwMzREMDAwOTNBMjAwMTAwMTIwODgyMUEyMDIwMDgzOTNBMjAwMTA3MQotOjEwMzRFMDAwQTIwMjAwNzk5MjAyMDA4NTMwNDIwMDNGQTIwMjAwODVDQwotOjEwMzRGMDAwM0MwMjA4MDA4QzQyMDBEQzAyNDIxMDIxMDA0NTEwMjFGMQotOjEwMzUwMDAwMDA0NjEwMjRBRjQyMDAyQzNDMDIwODAwOEM0MjAwRTQyQwotOjEwMzUxMDAwM0MwMzA4MDA4QzYzMDBEQzAyNDIxMDIxMDA0NDEwMjFBRgotOjEwMzUyMDAwMDA0NjEwMjRBRjQyMDAyODNDMDIwODAwOEM0MjAwRTQxMAotOjEwMzUzMDAwMDI0MzE4MjEwMDY1MTgyMTAyNDIxMDIxMDA0NDEwMjE4NQotOjEwMzU0MDAwMzA0MjAwN0YzMDYzMDA3RjkzQTUwMDEwMDM0MjIwMjFBQQotOjEwMzU1MDAwMDM0MzE4MjEzQzAyMDAwRTAwNjI0MDIxM0MwMjAwMEM5MwotOjEwMzU2MDAwMTBCMTAwOEMwMDgyNDgyMTMyMzMwMDdGMTY2MDAwMTlCMAotOjEwMzU3MDAwMjQwNEZGODAzQzAyMDgwMDhDNDIwMERDMDI0MjEwMjEzRgotOjEwMzU4MDAwMDA0NDEwMjRBRjQyMDAyQzNDMDIwODAwOEM0MjAwRTRBRQotOjEwMzU5MDAwM0MwMzA4MDA4QzYzMDBEQzAyNDIxMDIxMDA0NDEwMjQyQwotOjEwMzVBMDAwQUY0MjAwMjgzQzAyMDgwMDhDNDIwMEU0MDI0MzE4MjE4QwotOjEwMzVCMDAwMzA2MzAwN0YwMjQyMTAyMTMwNDIwMDdGMDM0MjIwMjEwRAotOjEwMzVDMDAwMDM0MzE4MjEzQzAyMDAwRTAwNjI0MDIxM0MwMjAwMEMyMwotOjEwMzVEMDAwMDA4MjQ4MjE5MTI0MDAwRDI0MTRGRjgwMDAwMDEwMjE1NgotOjEwMzVFMDAwMDA5NDIwMjVBMTI0MDAwRDk1MDQwMDAyOTUwNTAwMTRFNwotOjEwMzVGMDAwOEQwNzAwMUMzMDg0RkZGRjMwQTVGRkZGOEQwNjAwMThFQgotOjEwMzYwMDAwMDA4NTIwMjMwMDA0MjEwMDAwRTQzODIxMDBDMjMwMjE3RAotOjEwMzYxMDAwMDBFNDIwMkIwMEM0MzAyMUFEMDcwMDFDQUQwNjAwMThDQgotOjEwMzYyMDAwOTUwMjAwMDJBNTAyMDAxNEE1MDAwMDE2OEQwMjAwMDhGNAotOjEwMzYzMDAwQUQwMjAwMTA4RDAyMDAwOEFEMDIwMDBDOTUwMjAwMDJFMAotOjEwMzY0MDAwQTUwMjAwMjBBNTAwMDAyMjhEMDIwMDA4QUQwMjAwMjQ4MgotOjEwMzY1MDAwOTEyMjAwMEQzMDQyMDA0MDEwNDAwMDQyMjYyMjAwMDExRAotOjEwMzY2MDAwM0MwMjA4MDA4QzQyMDBFMEEzQjMwMDI4M0MxMDAwMEE5MgotOjEwMzY3MDAwMDI0MjEwMjEwMDU0MTAyNEFGNDIwMDI0M0MwMjA4MDBGMgotOjEwMzY4MDAwOEM0MjAwRTBBMzgwMDAyQzI3QTQwMDJDMDI0MjEwMjFEMQotOjEwMzY5MDAwMzA0MjAwN0YwMzQyMTgyMTAwNzAxODIxOEM2MjAwRDg0QwotOjEwMzZBMDAwOEQyNjAwMDQyN0E1MDAyOEFGQTkwMDJDMDA0NjEwMjE3NAotOjEwMzZCMDAwQUM2MjAwRDgwRTAwMEE3OUFGODMwMDI4OTNBMzAwMjhEQgotOjEwMzZDMDAwOEY4MjAwMjgwRTAwMDZCRUEwNDMwMEQxMEUwMDBDMDAyMQotOjEwMzZEMDAwMDAwMDAwMDAwMjU0MTAyNEFGNDIwMDI0M0MwMjA4MDAwNQotOjEwMzZFMDAwOEM0MjAwREMwMDEzMjk0MDAwMTMyMEMwMDBBNDIwMjFEQwotOjEwMzZGMDAwMDI0MjEwMjEwMDQ0MTAyMTAwNTQxMDI0QUY0MjAwMkMzQgotOjEwMzcwMDAwM0MwMjA4MDA4QzQyMDBFNDNDMDMwODAwOEM2MzAwRENBRgotOjEwMzcxMDAwMDM1NjMwMjEwMjQyMTAyMTAwNDUxMDIxMDA1NDEwMjQ4QwotOjEwMzcyMDAwQUY0MjAwMjgzQzAyMDgwMDhDNDIwMEU0MDI0MzE4MjEwQQotOjEwMzczMDAwMDA2NDE4MjEwMjQyMTAyMTAwNDUxMDIxMzA0MjAwN0YxMAotOjEwMzc0MDAwMzA2MzAwN0YwMzQyMjAyMTAzNDMxODIxM0MwMjAwMEUxNgotOjEwMzc1MDAwMDA2MjQwMjEzQzAyMDAwQzAwRDA4MDIxMDA4MjQ4MjEwMAotOjEwMzc2MDAwMjYyMjAwMDEzMDQzMDA3RjE0NzUwMDA1MzA0NDAwRkYxRAotOjEwMzc3MDAwMjQwM0ZGODAwMjIzMTAyNDAwNDMxMDI2MzA0NDAwRkY1RQotOjEwMzc4MDAwOTNBMjAwMTAwMDgwODgyMTI1MDgwMDI4MTQ0NEZGNzZBOQotOjEwMzc5MDAwMjUyOTAwMjA5M0E0MDAxMDhGQTMwMDE0MjQwMkZGRkYwQQotOjEwMzdBMDAwMTA2MjAwMEEzMDg5MDBGRjI0ODIwMDAxMjQ4MzAwMDE5NgotOjEwMzdCMDAwMzA0MjAwN0YxNDU1MDAwNTMwNjkwMEZGMjQwM0ZGODA2QwotOjEwMzdDMDAwMDA4MzEwMjQwMDQzMTAyNjMwNDkwMEZGOTIwMjAwNzg0NQotOjEwMzdEMDAwMzA1MzAwRkYxMTMzMDAzMjAxMjA4ODIxM0MwMjA4MDBFMQotOjEwMzdFMDAwOEM0MjAwREMzMjI1MDA3RjAwMDUyMEMwMDAwNTI5NDAwNgotOjEwMzdGMDAwMDBBNDIwMjEwMjQyMTAyMTI0MDZGRjgwMDA0NDEwMjE1MQotOjEwMzgwMDAwMDA0NjEwMjRBRjQyMDAyQzNDMDMwODAwOEM2MzAwREMwRgotOjEwMzgxMDAwM0MwMjA4MDA4QzQyMDBFNDAyNDMxODIxMDI0MjEwMjFCRAotOjEwMzgyMDAwMDA0NTEwMjEwMDY0MTgyMTAwNDYxMDI0MzA2MzAwN0ZGOQotOjEwMzgzMDAwQUY0MjAwMjgwMzQzMTgyMTNDMDIwMDBFMDA2MjQwMjFFMQotOjEwMzg0MDAwM0MwMjA4MDA4QzQyMDBFNDhEMDYwMDBDMDEwMDIwMjE5RgotOjEwMzg1MDAwMDI0MjEwMjEwMDQ1MTAyMTMwNDIwMDdGMDM0MjE4MjEwRQotOjEwMzg2MDAwM0MwMjAwMEMwMDYyNDgyMTEwQzAwMDBEMDEyMDI4MjFGQwotOjEwMzg3MDAwMEUwMDA2RTIwMDAwMDAwMDI0MDJGRjgwMDIyMjE4MjQ0RAotOjEwMzg4MDAwMjYyNDAwMDEwMDYyMjgyNjMwODIwMDdGMTQ1NTAwMDJBMQotOjEwMzg5MDAwMzA4MzAwRkYzMEEzMDBGRjE0NzNGRkQwMDA2MDg4MjE0NQotOjEwMzhBMDAwOEUwMzAwNzQzQzAyN0ZGRjM0NDJGRkZGMDA2MjE4MjQ0NQotOjEwMzhCMDAwQUUwMzAwNzQwRTAwMDcwMzAyNDAyMDIxQUY1NzAwMjQxRQotOjEwMzhDMDAwOEZBMjAwMzBBRjVFMDAyODhGQkYwMDVDOEZCRTAwNTgxMwotOjEwMzhEMDAwOEZCNzAwNTQ4RkI2MDA1MDhGQjUwMDRDOEZCNDAwNDg5RQotOjEwMzhFMDAwOEZCMzAwNDQ4RkIyMDA0MDhGQjEwMDNDOEZCMDAwMzhERQotOjEwMzhGMDAwMjdCRDAwNjAwM0UwMDAwOEFGNDIwMDJDMjdCREZGRDhDMQotOjEwMzkwMDAwQUZCMTAwMUNBRkJGMDAyMEFGQjAwMDE4Mjc1MTAxODgzNQotOjEwMzkxMDAwOTIyMjAwMDMyNDA4RkY4MDNDMDMwMDBBMzA0NzAwN0YwNgotOjEwMzkyMDAwQTNBNzAwMTA4RjQ2MDE4MDNDMDIwODAwOEM0MjAwRTBGMwotOjEwMzkzMDAwQUY4NjAwMzQwMEMyMjgyMTAwQTgxMDI0QUY0MjAwMjQyMgotOjEwMzk0MDAwOTIyNDAwMDAzMEEyMDA3RjAzNDIxMDIxMDA0MzEwMjE4NgotOjEwMzk1MDAwQUY4MjAwMjgzMDg0MDA3RjI0MDIwMDAyMTQ4MjAwMjVGOAotOjEwMzk2MDAwMDAwNzE5NDAzQzAyMDgwMDhDNDIwMEU0MDBDMjEwMjEwQwotOjEwMzk3MDAwMDA0MzI4MjEzMEEyMDA3RjAzNDIxODIxMDBBODEwMjQxMAotOjEwMzk4MDAwQUY0MjAwMjgzQzAyMDAwQzAwNjIxODIxOTA2MjAwMEQzQQotOjEwMzk5MDAwQUZBMzAwMTQwMDQ4MTAyNUEwNjIwMDBEOEZBMzAwMTRFRgotOjEwMzlBMDAwOTA2MjAwMEQzMDQyMDA0MDUwNDAwMDZBOEZCRjAwMjBGRQotOjEwMzlCMDAwOEY4NjAwMjhBMzgwMDAyQzI3QTQwMDE0OENDMjAwRDg3NgotOjEwMzlDMDAwOEM2MzAwMDQyN0E1MDAxMDAwNDMxMDIxMEUwMDBBNzkyMwotOjEwMzlEMDAwQUNDMjAwRDg5M0EzMDAxMDhGODIwMDI4MEUwMDA2QkU1MAotOjEwMzlFMDAwQTA0MzAwRDEwRTAwMEMwMDAwMDAwMDAwMEEwMDBFQTM0RQotOjEwMzlGMDAwOEZCRjAwMjAwRTAwMDZDNzAwQzAyMDIxMEUwMDA2RDU5NAotOjEwM0EwMDAwMDAwMDAwMDAzQzAyMDAwODAzNDI4MDIxOTIyMzAwMDFENAotOjEwM0ExMDAwOTIwMjAwN0IxNDQzMDA0RjhGQkYwMDIwOTIyMjAwMDBDRgotOjEwM0EyMDAwMzA0NDAwN0YyNDAyMDAwNDEwODIwMDE3Mjg4MjAwMDUyMQotOjEwM0EzMDAwMTA0MDAwMDYyNDAyMDAwNTI0MDIwMDAzMTA4MjAwMDc0MwotOjEwM0E0MDAwOEZCMTAwMUMwQTAwMEVBNDAwMDAwMDAwMTA4MjAwMTJCQQotOjEwM0E1MDAwOEZCRjAwMjAwQTAwMEVBNDhGQjEwMDFDOTIwNTAwODNDNgotOjEwM0E2MDAwOTIwNjAwNzg4RTA3MDA3NDhGODQwMDM0MzBBNTAwRkYyMgotOjEwM0E3MDAwMDAwNzNFMDIzMEM2MDBGRjBFMDAwNzBCMzBFNzAwN0Y1NAotOjEwM0E4MDAwMEEwMDBFQTM4RkJGMDAyMDBFMDAwQzZGOEY4NDAwMzQzRAotOjEwM0E5MDAwMEEwMDBFQTM4RkJGMDAyMDI0MDIwQzgwQUY0MjAwMjQzNgotOjEwM0FBMDAwOTIwMjAwM0UzMDQyMDA0MDEwNDAwMDIwMDAwMDAwMDAyMgotOjEwM0FCMDAwOTIwMjAwM0UwMDAyMTYwMDAwMDIxNjAzMDQ0MTAwMDZCNgotOjEwM0FDMDAwMDAwMDAwMDA4Rjg0MDAzNDBFMDAwNjM4MjQwNTAwOTNBNwotOjEwM0FEMDAwMEEwMDBFQTM4RkJGMDAyMDkyMDIwMDNGMjQwMzAwMThBQgotOjEwM0FFMDAwMzA0MjAwRkYxNDQzMDAwQzhGODQwMDM0MjQwNTAwMzk1OQotOjEwM0FGMDAwMEUwMDA1RDAwMDAwMzAyMTBFMDAwMzAyOEY4NDAwMzQzOAotOjEwM0IwMDAwMjQwMjAwMTJBMjAyMDAzRjBFMDAwMzBCOEY4NDAwMzQzNwotOjEwM0IxMDAwMEEwMDBFQTM4RkJGMDAyMDI0MDUwMDM2MEUwMDA1RDAzQQotOjEwM0IyMDAwMDAwMDMwMjEwQTAwMEVBMzhGQkYwMDIwMEUwMDAzMDIwOAotOjEwM0IzMDAwOEY4NDAwMzQ5MjAyMDAwNTM0NDIwMDIwQTIwMjAwMDU2NgotOjEwM0I0MDAwMEUwMDAzMEI4Rjg0MDAzNDBFMDAxMDU4OEY4NDAwMzQ1NQotOjEwM0I1MDAwOEZCRjAwMjA4RkIxMDAxQzhGQjAwMDE4MjQwMjBDODA5MgotOjEwM0I2MDAwMjdCRDAwMjgwM0UwMDAwOEFGNDIwMDI0MjdCREZGRTg3RQotOjEwM0I3MDAwQUZCMDAwMTBBRkJGMDAxNDI3NDMwMTAwOTQ2MjAwMDhFQgotOjEwM0I4MDAwMDAwMjE0MDAwMDAyMTQwMzA0NDEwMDAyMDAwMDgwMjExRQotOjEwM0I5MDAwMjQxMDAwMDE5NDYyMDAwODMwNDIwMDgwMTA0MDAwMUE5NgotOjEwM0JBMDAwMDIwMDEwMjE5NDYyMDAwODMwNDIyMDAwMTA0MDAwMTZFQwotOjEwM0JCMDAwMDIwMDEwMjE4QzYzMDAxODNDMDIxQzJEMzQ0MjE5RURDOAotOjEwM0JDMDAwMjQwNjAwMDYxMDYyMDAwRjNDMDc2MDIxM0MwMjA4MDAzQQotOjEwM0JEMDAwOEM0MjAwRDQxMDQwMDAwNzhGODIwMDI4OEY4MzAwMjg3OQotOjEwM0JFMDAwOTA2MjAwNjIzMDQyMDAwRjM0NDIwMDQwQTA2MjAwNjJFNgotOjEwM0JGMDAwOEY4MjAwMjg4Rjg0MDAzNDk0NDUwMEQ0MEUwMDBCODlGNgotOjEwM0MwMDAwMzBBNUZGRkYwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTBGRAotOjEwM0MxMDAwMDNFMDAwMDgyN0JEMDAxODI3QkRGRkUwQUZCMTAwMTQ4NgotOjEwM0MyMDAwQUZCMDAwMTBBMzgwMDAyQ0FGQkYwMDE4OEY0NTAxMDA3QgotOjEwM0MzMDAwM0MwMzA4MDA4QzYzMDBFMDI0MDJGRjgwQUY4NTAwMzQ2MQotOjEwM0M0MDAwMDBBMzE4MjEzMDY0MDA3RjAzNDQyMDIxMDA2MjE4MjQ1RgotOjEwM0M1MDAwM0MwMjAwMEEwMDgyMjAyMUFGNDMwMDI0Mjc1MDAxMDBDQgotOjEwM0M2MDAwOEUwMjAwMTQ4QzgzMDBEQ0FGODQwMDI4MDA0MzEwMjNGNAotOjEwM0M3MDAwMTg0MDAwMDQwMDAwODgyMThFMDIwMDE0MEUwMDBCMUM2NgotOjEwM0M4MDAwQUM4MjAwREM5MjAyMDAwQjI0MDMwMDAyMzA0MjAwRkZGMQotOjEwM0M5MDAwMTQ0MzAwMkYwMDAwMDAwMDk2MDIwMDA4MzA0MzAwRkY4QwotOjEwM0NBMDAwMjQwMjAwODIxNDYyMDAwNTI0MDIwMDg0MEUwMDA5RDY1QQotOjEwM0NCMDAwMDAwMDAwMDAwQTAwMEYyRjAwMDAwMDAwMTQ2MjAwMDkzRAotOjEwM0NDMDAwMjQwMjAwODE4RjgyMDAyODhGODQwMDM0M0MwNzYwMjEwOQotOjEwM0NEMDAwOTQ0NTAwRDQ5MjA2MDAwNTMwQTVGRkZGMEEwMDBGMUU5MAotOjEwM0NFMDAwMzBDNjAwRkYxNDYyMDAyNzAwMDAwMDAwOTIwMjAwMEFBNAotOjEwM0NGMDAwMzA0MzAwRkYzMDYyMDAyMDEwNDAwMDA0MzA2MjAwNDA3QQotOjEwM0QwMDAwOEY4NDAwMzQwQTAwMEYxQTI0MDYwMDQwMTA0MDAwMDQ3QgotOjEwM0QxMDAwMDAwMzE2MDA4Rjg0MDAzNDBBMDAwRjFBMjQwNjAwNDFBNQotOjEwM0QyMDAwMDAwMjE2MDMwNDQxMDAxNzhGODQwMDM0MjQwNjAwNDI2OQotOjEwM0QzMDAwOEY4MjAwMjgzQzA3NjAxOTk0NDUwMEQ0MzBBNUZGRkYwRQotOjEwM0Q0MDAwMEUwMDBCODkwMDAwMDAwMDBBMDAwRjJGMDAwMDAwMDA4OQotOjEwM0Q1MDAwOTIwMjAwMEIyNDAzMDAxNjMwNDIwMEZGMTA0MzAwMDZCRAotOjEwM0Q2MDAwMDAwMDAwMDA5MjAyMDAwQjI0MDMwMDE3MzA0MjAwRkYwNQotOjEwM0Q3MDAwMTQ0MzAwMDQwMDAwMDAwMDBFMDAwRUE5MDAwMDAwMDAyMwotOjEwM0Q4MDAwMDA0MDg4MjEwRTAwMEMwMDAwMDAwMDAwOTIwMjAwMEE5MgotOjEwM0Q5MDAwMzA0MjAwMDgxMDQwMDAwNjI0MDIwQzgwOEY4NTAwMjg2NQotOjEwM0RBMDAwM0MwNDAwMDgwRTAwMTI4NjAzNDQyMDIxMjQwMjBDODBFQgotOjEwM0RCMDAwQUY0MjAwMjQ4RkJGMDAxODAyMjAxMDIxOEZCMDAwMTBFNgotOjEwM0RDMDAwOEZCMTAwMTQwM0UwMDAwODI3QkQwMDIwMjdCREZGRThFNQotOjEwM0REMDAwQUZCRjAwMTRBRkIwMDAxMDhGNTAwMDI0M0MwMzA4MDBBOAotOjEwM0RFMDAwOEM2MzAwRTA4RjQ1MDEwMDI0MDJGRjgwMDBBMzE4MjFBRQotOjEwM0RGMDAwMzA2NDAwN0YwMzQ0MjAyMTAwNjIxODI0M0MwMjAwMEE0MgotOjEwM0UwMDAwMDA4MjIwMjFBRjg1MDAzNEFGNDMwMDI0OTA4MjAwNjJGRAotOjEwM0UxMDAwQUY4NDAwMjgzMDQyMDAwRjM0NDIwMDUwQTA4MjAwNjI3QwotOjEwM0UyMDAwM0MwMjAwMUYzNDQyRkY4MDBFMDAwNkJFMDIwMjgwMjRDNgotOjEwM0UzMDAwQUY1MDAwMjQ4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDhDMwotOjEwM0U0MDAwMjdCRDAwMTgzQzAyMDgwMDhDNDIwMDIwMTA0MDAwMURENQotOjEwM0U1MDAwMjc0NTAxMDA5MEEzMDAwOTNDMDIwMDA4MDM0MjIwMjFFRAotOjEwM0U2MDAwMjQwMjAwMTg1NDYyMDAwMzNDMDIwMDA4MEEwMDBGNzA4QwotOjEwM0U3MDAwMjQwMjAwMDgwMzQyMjAyMTI0MDIwMDE2MTQ2MjAwMDVENwotOjEwM0U4MDAwMjQwMjAwMTcyNDAyMDAxMkEwODIwMDNGMEEwMDBGN0FDOQotOjEwM0U5MDAwOTRBNzAwMDg1NDYyMDAwNjk0QTcwMDA4OTM2MjAwMDVFNgotOjEwM0VBMDAwMjQwM0ZGRkUwMDQzMTAyNEEzNjIwMDA1OTRBNzAwMDgyQQotOjEwM0VCMDAwOTBBNjAwMUI4Q0E0MDAwMDk0QTUwMDA2MEEwMDBCNjRDOQotOjEwM0VDMDAwMDAwNzNDMDAwM0UwMDAwODAwMDAwMDAwMjc0NDAxMDA1OAotOjEwM0VEMDAwOTQ4MjAwMDgzMDQ1MDBGRjM4QTMwMDgyMzhBMjAwODQ5NQotOjEwM0VFMDAwMkM2MzAwMDEyQzQyMDAwMTAwNjIxODI1MTA2MDAwMDZCRQotOjEwM0VGMDAwMjQwMjAwODM5MzgyMDAyRDEwNDAwMDBEMDAwMDAwMDA3QQotOjEwM0YwMDAwMEEwMDBDMzMwMDAwMDAwMDE0QTIwMDA1MjRBMkZGODA2OAotOjEwM0YxMDAwOEY0MzAxMDQzQzAyNjAyMDAzRTAwMDA4QUM0MzAwMTQxRQotOjEwM0YyMDAwMzA0MjAwRkYyQzQyMDAwMjEwNDAwMDAzMjQwMjAwMjIxNQotOjEwM0YzMDAwMEEwMDBFRDQwMDAwMDAwMDE0QTIwMDAzMDAwMDAwMDBEQwotOjEwM0Y0MDAwMEEwMDBGNDEwMDAwMDAwMDBBMDAwRjVGMDAwMDAwMDA5RgotOjEwM0Y1MDAwOTM2MzAwN0U5MzYyMDA3QTE0NDMwMDA5MDAwMDIwMjFERAotOjEwM0Y2MDAwOTM2MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDQxOQotOjEwM0Y3MDAwMjQwNDAwMDE5MzYyMDA3RTI0NDIwMDAxQTM2MjAwN0VCQgotOjEwM0Y4MDAwMDNFMDAwMDgwMDgwMTAyMThGNDIwMUY4MDQ0MEZGRkU4QQotOjEwM0Y5MDAwMjQwMjAwMDJBRjQ0MDFDMEEzNDIwMUM0M0MwMjEwMDA0RAotOjEwM0ZBMDAwMDNFMDAwMDhBRjQyMDFGODI3QkRGRkU4QUZCRjAwMTBGMwotOjEwM0ZCMDAwOTM2MjAwM0YyNDAzMDAwQTMwNDIwMEZGMTQ0MzAwNDY4RQotOjEwM0ZDMDAwMDAwMDAwMDA4RjYzMDA1NDhGNjIwMDRDMTA2MjAwN0Q3RgotOjEwM0ZEMDAwMDM2MDMwMjE5MzYyMDAwMDI0MDMwMDUwMzA0MjAwRkY1MAotOjEwM0ZFMDAwMTQ0MzAwMkYwMDAwMDAwMDhGNDQwMTQwM0MwMjA4MDBGMQotOjEwM0ZGMDAwOEM0MjAwRTAyNDAzRkY4MDAwODIxMDIxMDA0MzEwMjQ0MwotOjEwNDAwMDAwQUY0MjAwMjQzQzAyMDgwMDhDNDIwMEUwOEY2NTAwNTQ1RgotOjEwNDAxMDAwM0MwMzAwMEEwMDgyMjAyMTMwODQwMDdGMDM0NDEwMjFFOQotOjEwNDAyMDAwMDA0MzEwMjFBQzQ1MDEwODk3NjIwMDNDOEY2MzAwNENBRgotOjEwNDAzMDAwMzA0MkZGRkYwMDAyMTA0MDAwNjIxODIxQUY2MzAwNUNCNQotOjEwNDA0MDAwOEY2MzAwNTQ4RjY0MDA0Qzk3NjIwMDNDMDA2NDE4MjMxNwotOjEwNDA1MDAwMzA0MkZGRkYwMDAzMTg0MzAwMDIxMDQwMDA0MzEwMkFDMwotOjEwNDA2MDAwMTA0MDAwMDYwMDAwMDAwMDhGNjIwMDU0OEY2MzAwNEM3NwotOjEwNDA3MDAwMDA0MzEwMjMwQTAwMEZGMDAwMDIxMDQzOTc2MjAwM0MzNwotOjEwNDA4MDAwMzA0MkZGRkYwMDAyMTA0MEFDQzIwMDY0MjQwMjAwMDE3NQotOjEwNDA5MDAwQTBDMDAwN0NBMEMyMDA4NDI0MDIwQzgwQUY0MjAwMjQ5NwotOjEwNDBBMDAwMEUwMDBGQTI4RjQ0MDE0MDEwNDAwMDQ3OEZCRjAwMTA0OAotOjEwNDBCMDAwOEY0MzAxNDA4RjQyMDFGODA0NDBGRkZFMjQwMjAwMDJCQQotOjEwNDBDMDAwQUY0MzAxQzBBMzQyMDFDNDNDMDIxMDAwQUY0MjAxRjg1QgotOjEwNDBEMDAwMEEwMDEwNDA4RkJGMDAxMDkzNjIwMDNGMjQwMzAwMTBCRAotOjEwNDBFMDAwMzA0MjAwRkYxNDQzMDAwNDAwMDAwMDAwOEY0NDAxNDBGMAotOjEwNDBGMDAwMEEwMDEwMkMwMDAwMjgyMTkzNjIwMDNGMjQwMzAwMTZDMAotOjEwNDEwMDAwMzA0MjAwRkYxNDQzMDAwNDI0MDIwMDE0QTM2MjAwM0Y2NQotOjEwNDExMDAwMEEwMDEwM0EwMDAwMDAwMDhGNjIwMDRDOEY2MzAwNTBDQwotOjEwNDEyMDAwMDA0MzEwMjMwNDQxMDAyODhGQkYwMDEwOTM2MjAwODFEOAotOjEwNDEzMDAwMjQ0MjAwMDFBMzYyMDA4MTkzNjIwMDgxMkM0MjAwMDRBQQotOjEwNDE0MDAwMTQ0MDAwMTAwMDAwMDAwMDkzNjIwMDNGMjQwMzAwMDRBQwotOjEwNDE1MDAwMzA0MjAwRkYxNDQzMDAwNjAwMDAwMDAwOEY0NDAxNDA3RAotOjEwNDE2MDAwOEZCRjAwMTAyNDA1MDA5MzBBMDAwNjM4MjdCRDAwMThGMQotOjEwNDE3MDAwOEY0NDAxNDAyNDA1MDA5MzhGQkYwMDEwMEEwMDA2QTc1QQotOjEwNDE4MDAwMjdCRDAwMTg4RjQ0MDE0MDBFMDAwMzAyMDAwMDAwMDAwQwotOjEwNDE5MDAwOEY2MjAwNTQyNDQyRkZGRkFGNjIwMDU0OEY2MjAwNTBEMAotOjEwNDFBMDAwMjQ0MkZGRkZBRjYyMDA1MDBFMDAwMzBCOEY0NDAxNDAxQQotOjEwNDFCMDAwOEY0NDAxNDA4RkJGMDAxMDI0MDUwMDA0MEEwMDAzMTA0MwotOjEwNDFDMDAwMjdCRDAwMTg4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMThBRQotOjEwNDFEMDAwOEY0MjAxODg5MzYzMDA3RTAwMDIxNDAyMzA0NDAwRkY4NgotOjEwNDFFMDAwMzA2MzAwRkYxNDY0MDAwRDAwMDAwMDAwOTM2MjAwODA0MwotOjEwNDFGMDAwMzA0MjAwRkYxMDQ0MDAwOTAwMDAwMDAwQTM2NDAwODA2QQotOjEwNDIwMDAwOTM2MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDQ3NgotOjEwNDIxMDAwMDAwMDAwMDAwQTAwMDc2RjhGNDQwMTgwQTM2NDAwODA0MwotOjEwNDIyMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkU4QUZCMDAwMTA2OQotOjEwNDIzMDAwQUZCRjAwMTQ5MzYyMDAwNTI0MDMwMDMwMzA0MjAwMzAwOQotOjEwNDI0MDAwMTQ0MzAwODkwMDgwODAyMTNDMDIwODAwOEM0MjAwMjAzOQotOjEwNDI1MDAwMTA0MDAwODAwMjAwMjAyMTBFMDAwNTJCMDAwMDAwMDAwRAotOjEwNDI2MDAwOEY4NTAwMjBBQ0IwMDAwMDkzNjIwMDNFOTM2MzAwM0Y1NgotOjEwNDI3MDAwMzA0MjAwRkYwMDAyMTIwMDMwNjMwMEZGMDA0MzEwMjVBRgotOjEwNDI4MDAwQUNBMjAwMDQ5MzYyMDA4MjAwMDIxNjAwMDAwMjE2MDMzMgotOjEwNDI5MDAwMDQ0MTAwMDUwMDAwMDAwMDNDMDMwODAwOEM2MzAwNDg1NgotOjEwNDJBMDAwMEEwMDEwN0UwMDAwMDAwMDkzNjIwMDNFMzA0MjAwNDA5MQotOjEwNDJCMDAwMTQ0MDAwMDMwMDAwMTgyMTkzNjIwMDgxMzA0MzAwRkY4NgotOjEwNDJDMDAwOTM2MjAwODIwMDAzMUUwMDMwNDIwMEZGMDAwMjE0MDBDRgotOjEwNDJEMDAwMDA2MjE4MjVBQ0EzMDAwODhGNjIwMDQwQUNBMjAwMEM1RAotOjEwNDJFMDAwOEY2MjAwNDhBQ0EyMDAxMDhGNjIwMDRDQUNBMjAwMTQ5OAotOjEwNDJGMDAwOEY2MjAwNTA4RjYzMDA0QzAwNDMxMDIzMDQ0MTAwMDM4MQotOjEwNDMwMDAwMDAwMDAwMDAwQTAwMTA5MjhGNjIwMDRDOEY2MjAwNTA4MwotOjEwNDMxMDAwQUNBMjAwMTgzQzAyMDgwMDk0NDI0REJFM0MwM0MwMEIwNgotOjEwNDMyMDAwMDAwMDIwMjEwMDQzMTAyNTBFMDAwNTUwQUNBMjAwMUMwNwotOjEwNDMzMDAwOEY2MjAwNTQ4Rjg0MDAyMEFDODIwMDAwOEY2MjAwNTg4RQotOjEwNDM0MDAwQUM4MjAwMDQ4RjYyMDA1Q0FDODIwMDA4OEY2MjAwNjA2NwotOjEwNDM1MDAwOEY0MzAwNzQwMDQzMTAyMUFDODIwMDBDOEY2MjAwNjQxNAotOjEwNDM2MDAwQUM4MjAwMTA5NzYzMDA2ODk3NjIwMDZBMDAwMzFDMDAyQgotOjEwNDM3MDAwMzA0MkZGRkYwMDYyMTgyNUFDODMwMDE0OTM2MjAwODI3NAotOjEwNDM4MDAwMjQwMzAwODAzMDQyMDBGRjE0NDMwMDAzMDAwMDAwMDBCQgotOjEwNDM5MDAwMEEwMDEwQzZBQzgwMDAxODhGNjMwMDBDMjQwMjAwMDFENAotOjEwNDNBMDAwMTA2MjAwMEUyNDAyRkZGRjkzNjIwMDNFMzA0MjAwNDA4NAotOjEwNDNCMDAwMTQ0MDAwMEEyNDAyRkZGRjhGNjMwMDBDOEY0MjAwNzQzOAotOjEwNDNDMDAwMDA2MjE4MjMzQzAyMDgwMDAwNjIxMDI0MTQ0MDAwMDIxRQotOjEwNDNEMDAwMDAwMDI4MjEwMDYwMjgyMTAwMDUxMDQzQUM4MjAwMTg0RAotOjEwNDNFMDAwM0MwMjA4MDA5NDQyNERCRTNDMDNDMDBDMDAwMDIwMjE1QQotOjEwNDNGMDAwMDA0MzEwMjU4RjgzMDAyMDBFMDAwNTUwQUM2MjAwMUM4NgotOjEwNDQwMDAwOEY2MjAwMTg4RjgzMDAyMDNDMDUwODAwOTRBNTREQkVFNAotOjEwNDQxMDAwMjQwNDAwMDFBQzYyMDAwMEFDNjAwMDA0OEY2NjAwNkNGNAotOjEwNDQyMDAwM0MwMjQwMEQwMEEyMjgyNUFDNjYwMDA4OEY2MjAwREMyQgotOjEwNDQzMDAwQUM2MjAwMENBQzYwMDAxMDkzNjIwMDA1MDAwMjE2MDAzNAotOjEwNDQ0MDAwQUM2MjAwMTRBQzYwMDAxODBFMDAwNTUwQUM2NTAwMUM5NgotOjEwNDQ1MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwQTM2MDAwMDU2MAotOjEwNDQ2MDAwMEEwMDA0QjkyN0JEMDAxODhGQkYwMDE0OEZCMDAwMTBEOAotOjEwNDQ3MDAwMDNFMDAwMDgyN0JEMDAxODk3NDIwMDdDMzBDNjAwRkYwQgotOjEwNDQ4MDAwQTA4NjAwODQzMDQ3RkZGRjI0MDIwMDA1MTRDMjAwMEIwMQotOjEwNDQ5MDAwMjRFMzQ2NTA5MEEyMDExMjJDNDIwMDA3MTA0MDAwMDc2RQotOjEwNDRBMDAwMjRFMzBBMDA5MEEzMDExMjI0MDIwMDE0MDA2MjEwMDQwNQotOjEwNDRCMDAwMDBFMjEwMjEwQTAwMTBGRTMwNDdGRkZGMzA2N0ZGRkZDNwotOjEwNDRDMDAwMDNFMDAwMDhBNDg3MDAxNEFDODcwMDRDOENBMjAxMDgwQwotOjEwNDREMDAwMDA4MDQwMjEwMEEwNDgyMTAwRTIxMDIzMzBDNjAwRkZFOAotOjEwNDRFMDAwMTg0MDAwMDM5M0FBMDAxMzI0RTJGRkZDQUNBMjAxMDhDOQotOjEwNDRGMDAwMzBDMjAwMDExMDQwMDAwODAwMDAwMDAwOEQwMjAwNTA5MgotOjEwNDUwMDAwMDBFMjEwMjMwNDQxMDAxMzI0MDYwMDA1OEQwMjAwNTQyQwotOjEwNDUxMDAwMTBFMjAwMTAwMDAwMDAwMDhEMDIwMDU0MTRFMjAwMUFBNgotOjEwNDUyMDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMEQ4MzA0MjAwMjAwRAotOjEwNDUzMDAwMTA0MDAwMEEyNDAyMDAwMTkxMDMwMDc4OTEwMjAwODNEOAotOjEwNDU0MDAwMTQ0MzAwMDYyNDAyMDAwMTAxMDAyMDIxMDEyMDI4MjEzQgotOjEwNDU1MDAwMjQwNjAwMDQwQTAwMTBFQzAwMDAwMDAwQTEwMDAwODQwMgotOjEwNDU2MDAwMTE0MDAwMDlBNTAyMDAxNDhGNDMwMTAwOEY0MjAxRjg5OQotOjEwNDU3MDAwMDQ0MEZGRkUyNDAyMDAwMkFGNDMwMUMwQTM0MjAxQzQ3NQotOjEwNDU4MDAwM0MwMjEwMDBBRjQyMDFGODAzRTAwMDA4MDAwMDAwMDAwOAotOjEwNDU5MDAwMjdCREZGRTg4RkE5MDAyOEFGQkYwMDEwMDA4MDQwMjE5MQotOjEwNDVBMDAwMDBFOTE4MjMxODYwMDA3MzMwQzYwMEZGQTA4MDAwN0M2QgotOjEwNDVCMDAwQTA4MDAwODE4Q0EyMDEwODAwRTIxMDIzMDQ0MDAwNEQ3RAotOjEwNDVDMDAwMDAwMDAwMDA4QzgyMDA1MDk0ODMwMDNDOEM4NDAwNjRDNgotOjEwNDVEMDAwMDA0NzQ4MjMzMDYzRkZGRjAxMjMxODIxMDA4MzIwMkI2RAotOjEwNDVFMDAwMTA4MDAwMDQwMDAwMDAwMDhEMDIwMDY0MEEwMDExNEZEQQotOjEwNDVGMDAwMDBFMjEwMjE5NTAyMDAzQzMwNDJGRkZGMDEyMjEwMjExMQotOjEwNDYwMDAwMDBFMjEwMjFBRDAyMDA1Qzk1MDIwMDNDOEQwMzAwNUNDRAotOjEwNDYxMDAwMzA0MkZGRkYwMDAyMTA0MDAwRTIxMDIxMDA0MzEwMkI0NwotOjEwNDYyMDAwMTA0MDAwMDMwMDAwMDAwMDBBMDAxMTVFOEQwMjAwNUNEMwotOjEwNDYzMDAwOTUwMjAwM0MzMDQyRkZGRjAwMDIxMDQwMDBFMjEwMjFEMgotOjEwNDY0MDAwQUQwMjAwNUNBMTAwMDA4NEFEMDcwMDRDOENBMjAxMDgwMwotOjEwNDY1MDAwMDBFMjEwMjMxODQwMDAwMjI0RTJGRkZDQUNBMjAxMDg5MwotOjEwNDY2MDAwMzBDMjAwMDExMDQwMDAwQTAwMDAwMDAwOEQwMjAwNTAxRQotOjEwNDY3MDAwMDBFMjEwMjMwNDQxMDAwNDAxMDAyMDIxOEQwMjAwNTRCNwotOjEwNDY4MDAwMTRFMjAwMDMwMDAwMDAwMDBBMDAxMTgwMjQwNjAwMDU2NwotOjEwNDY5MDAwOEQwMjAwNTQxNEUyMDA0NzhGQkYwMDEwM0MwMjA4MDA1NgotOjEwNDZBMDAwOEM0MjAwRDgzMDQyMDAyMDEwNDAwMDBBMjQwMjAwMDE1MQotOjEwNDZCMDAwOTEwMzAwNzg5MTAyMDA4MzE0NDMwMDA2MjQwMjAwMDE1NAotOjEwNDZDMDAwMDEwMDIwMjEyNDA2MDAwNDhGQkYwMDEwMEEwMDEwRUMxNgotOjEwNDZEMDAwMjdCRDAwMThBMTAwMDA4NEE1MDIwMDE0OEY0MzAxMDAyQgotOjEwNDZFMDAwOEY0MjAxRjgwNDQwRkZGRTI0MDIwMDAyMEEwMDExQTVENwotOjEwNDZGMDAwMDAwMDAwMDA4QzgyMDA1QzAwNDkxMDIzMDA0MzEwMkI1NgotOjEwNDcwMDAwNTQ0MDAwMDFBQzg3MDA1Qzk1MDIwMDNDMzA0MkZGRkY0MgotOjEwNDcxMDAwMDA2MjEwMkIxNDQwMDAwNzI0MDIwMDAyOTUwMjAwM0NBNgotOjEwNDcyMDAwOEQwMzAwNUMzMDQyRkZGRjAwNjIxODIxQUQwMzAwNUM4NgotOjEwNDczMDAwMjQwMjAwMDJBRDA3MDA0Q0ExMDIwMDg0MEUwMDBGQTI2QgotOjEwNDc0MDAwOEY0NDAxMDAxMDQwMDAxQjhGQkYwMDEwOEY0MzAxMDBGOQotOjEwNDc1MDAwOEY0MjAxRjgwNDQwRkZGRTI0MDIwMDAyQUY0MzAxQzA3MwotOjEwNDc2MDAwQTM0MjAxQzQzQzAyMTAwMEFGNDIwMUY4MEEwMDExQkI5MQotOjEwNDc3MDAwOEZCRjAwMTAzMEMyMDAxMDEwNDAwMDBFOEZCRjAwMTAxRAotOjEwNDc4MDAwOEM4MzAwNUM5NDgyMDAzQzAwNjkxODIzMzA0MkZGRkY1OAotOjEwNDc5MDAwMDA2MjE4MjEzQzAyM0ZGRjM0NDRGRkZGMDA4MzEwMkJDRQotOjEwNDdBMDAwNTQ0MDAwMDEwMDgwMTgyMTAxMjMxMDIxQUQwMjAwNUM1QgotOjEwNDdCMDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4MjdCREZGRThFOQotOjEwNDdDMDAwOEZBQTAwMjhBRkJGMDAxMDAwODA0MDIxMDBFQTQ4MjNENAotOjEwNDdEMDAwMTkyMDAwMjEzMEM2MDBGRjhDODMwMDVDOEM4MjAwNjRBRAotOjEwNDdFMDAwMDA2QTE4MjMwMDQzMTAyQjUwNDAwMDEwMDA2OTE4MjE2NAotOjEwNDdGMDAwOTRBMjAxMTAwMTIyMTAyMUE0QTIwMTEwOTRBMjAxMTA4MAotOjEwNDgwMDAwMzA0MkZGRkYwMDQzMTAyQjE0NDAwMDBBM0MwMjNGRkZFMAotOjEwNDgxMDAwOTRBMjAxMTAwMDQzMTAyM0E0QTIwMTEwOTQ4MjAwM0MzMgotOjEwNDgyMDAwMzA0MkZGRkYwQTAwMTFEQTAwNjIxODIxQTRBMDAxMTAzMwotOjEwNDgzMDAwM0MwMjNGRkYzNDQ0RkZGRjAwODMxMDJCNTQ0MDAwMDEzMwotOjEwNDg0MDAwMDA4MDE4MjEwMDY3MTAyMUFEMDIwMDVDQTEwMDAwN0NFRgotOjEwNDg1MDAwMEEwMDEyMjJBMTAwMDA4MTMwQzIwMDEwMTA0MDAwM0M2QQotOjEwNDg2MDAwMDAwMDAwMDA4QzgyMDA1MDAwNEExMDIzMTg0MDAwMzhERAotOjEwNDg3MDAwMDAwMDAwMDA5MDgyMDA3QzI0NDIwMDAxQTA4MjAwN0NBNQotOjEwNDg4MDAwOTA4MjAwN0MzQzAzMDgwMDhDNjMwMDI0MzA0MjAwRkZDRgotOjEwNDg5MDAwMDA0MzEwMkIxNDQwMDA1QzhGQkYwMDEwOENBMjAxMDg1NQotOjEwNDhBMDAwMDBFMjEwMjMxODQwMDA1ODAwMDAwMDAwOEM4MzAwNTRFMAotOjEwNDhCMDAwOTQ4MjAwM0MwMDZBMTgyMzMwNDJGRkZGMDAwMzE4NDMzMwotOjEwNDhDMDAwMDAwMjEwNDAwMDQzMTAyQTEwNDAwMDA1MDAwMDAwMDBDNAotOjEwNDhEMDAwOEM4MjAwNTQwMDRBMTAyMzBBMDAxMjA5MDAwMjEwNDM3RgotOjEwNDhFMDAwOTQ4MjAwM0MzMDQyRkZGRjAwMDIxMDQwQUQwMjAwNjRBMQotOjEwNDhGMDAwOTUwMjAwM0M4RDA0MDA2NDk1MDMwMDNDMzA0MkZGRkZBQwotOjEwNDkwMDAwMDAwMjEwNDAwMDgyMjAyMTMwNjNGRkZGMDA4MzE4MjE0NQotOjEwNDkxMDAwMDE0MzEwMjFBRDAyMDA1QzhEMDIwMDU0QUNBMjAxMDhERAotOjEwNDkyMDAwMjQwMjAwMDJBMTAyMDA4NDBFMDAwRkEyOEY0NDAxMDBBNQotOjEwNDkzMDAwMTA0MDAwMzU4RkJGMDAxMDhGNDMwMTAwOEY0MjAxRjhGNwotOjEwNDk0MDAwMDQ0MEZGRkUyNDAyMDAwMjBBMDAxMjRCMDAwMDAwMDA5NwotOjEwNDk1MDAwQUQwNzAwNEM4Q0EyMDEwODAwRTIxMDIzMTg0MDAwMDJCMQotOjEwNDk2MDAwMjRFMkZGRkNBQ0EyMDEwODMwQzIwMDAxMTA0MDAwMEFBMgotOjEwNDk3MDAwMDAwMDAwMDA4RDAyMDA1MDAwRTIxMDIzMDQ0MTAwMDRGQQotOjEwNDk4MDAwMDEwMDIwMjE4RDAyMDA1NDE0RTIwMDAzMDAwMDAwMDAwOQotOjEwNDk5MDAwMEEwMDEyNDIyNDA2MDAwNThEMDIwMDU0MTRFMjAwMUE5NwotOjEwNDlBMDAwOEZCRjAwMTAzQzAyMDgwMDhDNDIwMEQ4MzA0MjAwMjAyQgotOjEwNDlCMDAwMTA0MDAwMEEyNDAyMDAwMTkxMDMwMDc4OTEwMjAwODM1NAotOjEwNDlDMDAwMTQ0MzAwMDYyNDAyMDAwMTAxMDAyMDIxMjQwNjAwMDRGMwotOjEwNDlEMDAwOEZCRjAwMTAwQTAwMTBFQzI3QkQwMDE4QTEwMDAwODQ1MgotOjEwNDlFMDAwQTUwMjAwMTQ4RjQzMDEwMDhGNDIwMUY4MDQ0MEZGRkUyRQotOjEwNDlGMDAwMjQwMjAwMDJBRjQzMDFDMEEzNDIwMUM0M0MwMjEwMDBFNAotOjEwNEEwMDAwQUY0MjAxRjg4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMTg3NwotOjEwNEExMDAwOEZBQTAwMTA4QzgyMDA1MDAwODA0MDIxMzBDNjAwRkYxOQotOjEwNEEyMDAwMDA0QTEwMjMwMEEwNDgyMTE4NDAwMDA3MDBFMDE4MjE4OAotOjEwNEEzMDAwMjQwMjAwMDFBMDgwMDA4NEEwQTAwMTEyQTQ4MjAwMTQxRQotOjEwNEE0MDAwMEEwMDExQkRBRkFBMDAxMEEwODAwMDgxQUQwNzAwNEM4NAotOjEwNEE1MDAwOENBMjAxMDgwMEUyMTAyMzE4NDAwMDAyMjRFMkZGRkNBRgotOjEwNEE2MDAwQUNBMjAxMDgzMEMyMDAwMTEwNDAwMDA4MDAwMDAwMDBBNAotOjEwNEE3MDAwOEQwMjAwNTAwMDYyMTAyMzA0NDEwMDEzMjQwNjAwMDUzQgotOjEwNEE4MDAwOEQwMjAwNTQxMDYyMDAxMDAwMDAwMDAwOEQwMjAwNTRERQotOjEwNEE5MDAwMTQ2MjAwMTEwMDAwMDAwMDNDMDIwODAwOEM0MjAwRDhBMwotOjEwNEFBMDAwMzA0MjAwMjAxMDQwMDAwQTI0MDIwMDAxOTEwMzAwNzhFNwotOjEwNEFCMDAwOTEwMjAwODMxNDQzMDAwNjI0MDIwMDAxMDEwMDIwMjExQQotOjEwNEFDMDAwMDEyMDI4MjEyNDA2MDAwNDBBMDAxMEVDMDAwMDAwMDA0OAotOjEwNEFEMDAwQTEwMDAwODRBNTAyMDAxNDAzRTAwMDA4MDAwMDAwMDAwQgotOjEwNEFFMDAwMjdCREZGRTBBRkJGMDAxODI3NDIwMTAwOTA0NjAwMEEzMwotOjEwNEFGMDAwOEM0ODAwMTQ4QzhCMDA0QzkwODIwMDg0MzBDOTAwRkZERAotOjEwNEIwMDAwMDE2ODE4MjMzMDRBMDBGRjFDNjAwMDFBMkQ0NjAwMDY3OQotOjEwNEIxMDAwMjQwMjAwMDEwMTQyMTAwNDEwQzAwMDE2MzA0MzAwMDNCQgotOjEwNEIyMDAwMDEyMDMwMjEwMTAwMzgyMTE0NjAwMDA3MzA0QzAwMENCNgotOjEwNEIzMDAwMTU4MDAwMDkzMDQyMDAzMDE0NDAwMDBCOEZCRjAwMTg3MAotOjEwNEI0MDAwMEEwMDEyQUMwMDAwMDAwMDBFMDAxMUJEQUZBQjAwMTA1NwotOjEwNEI1MDAwMEEwMDEyQUM4RkJGMDAxODBFMDAxMTMyQUZBQjAwMTA2QwotOjEwNEI2MDAwMEEwMDEyQUM4RkJGMDAxOEFGQUIwMDEwMEUwMDEyNTIzQgotOjEwNEI3MDAwQUZBQTAwMTQ4RkJGMDAxODAzRTAwMDA4MjdCRDAwMjA3MwotOjEwNEI4MDAwMjQwMjAwMDNBMDgyMDA4NDhDODIwMDU0MDNFMDAwMDgwOQotOjEwNEI5MDAwQUNBMjAxMDgzQzAyMDAwODAzNDIxODIxOTA2MjAwODE4NwotOjEwNEJBMDAwMjQwNjAwNDMzQzA3NjAxOTI0NDIwMDAxQTA2MjAwODFGMgotOjEwNEJCMDAwOTA2MzAwODEzQzAyMDgwMDhDNDIwMEMwMzA2MzAwRkYxQgotOjEwNEJDMDAwMTQ2MjAwMTAyNDAzRkY4MDNDMDIwODAwOEM0MjAwRTBDNQotOjEwNEJEMDAwMDA4MjEwMjEwMDQzMTAyNEFGNDIwMDI0M0MwMjA4MDA1MAotOjEwNEJFMDAwOEM0MjAwRTAzQzAzMDAwQTAwODIxMDIxMzA0MjAwN0YyQQotOjEwNEJGMDAwMDM0MjEwMjEwMDQzMTAyMTk0NDUwMEQ0MEEwMDBCODk4MAotOjEwNEMwMDAwMzBBNUZGRkYwM0UwMDAwODAwMDAwMDAwMjdCREZGRTAyMwotOjEwNEMxMDAwQUZCRjAwMThBRkIxMDAxNEFGQjAwMDEwOEY0MjAxODBEOQotOjEwNEMyMDAwMDA4MDgwMjEwMEEwODgyMTBFMDAxMkIzMDA0MDIwMjFDNgotOjEwNEMzMDAwQTIwMDAwODQ4RTAyMDA1NDhGQkYwMDE4OEZCMDAwMTBCNQotOjEwNEM0MDAwQUUyMjAxMDg4RkIxMDAxNDAzRTAwMDA4MjdCRDAwMjA0OAotOjEwNEM1MDAwMjdCREZGRTAzQzAyMDAwOEFGQjAwMDEwQUZCRjAwMTg1NgotOjEwNEM2MDAwQUZCMTAwMTQwMzQyODAyMThGNTEwMTQwOTIwMzAwODRCMAotOjEwNEM3MDAwOEUwNDAwNTA4RTAyMDA0QzE0ODIwMDQwMzA2NjAwRkYwQgotOjEwNEM4MDAwM0MwMjA4MDA4QzQyMDBFMDI0MDNGRjgwMDIyMjEwMjEzNQotOjEwNEM5MDAwMDA0MzEwMjRBRjQyMDAyNDNDMDIwODAwOEM0MjAwRTA5NAotOjEwNENBMDAwOTc0NDAwN0M5MjA1MDA4MTAyMjIxMDIxMzA0MjAwN0Y0RgotOjEwNENCMDAwMDM0MjE4MjEzQzAyMDAwQTAwNjIxODIxMTRBMDAwMEJENAotOjEwNENDMDAwMzA4NEZGRkYyNDAyMDAwNTU0QzIwMDE0MjQ4MjA1REM1NgotOjEwNENEMDAwOTA2MjAxMTIyNDQyMDAwMUEwNjIwMTEyMjQwMjBDODBBMQotOjEwNENFMDAwQUY0MjAwMjQwQTAwMTMwQjI0MDIwMDA1QTA2MDAxMTI0OQotOjEwNENGMDAwMjQwMjAwMDUxNEMyMDAwOTI0ODIwNURDOTIwMjAwODEwRQotOjEwNEQwMDAwMkM0MjAwMDc1MDQwMDAwNTI0ODIwQTAwOTIwMzAwODFEMwotOjEwNEQxMDAwMjQwMjAwMTQwMDYyMTAwNDAwODIxMDIxMzA0NEZGRkZCRQotOjEwNEQyMDAwQTYwNDAwMTQwRTAwMTJCMzAyMjAyMDIxOTYwMjAwM0NCQgotOjEwNEQzMDAwOEUwMzAwNEMwMjIwMjAyMTMwNDJGRkZGMDAwMjEwNDA3MQotOjEwNEQ0MDAwMDA2MjE4MjEwRTAwMDMwMkFFMDMwMDVDOTIwMjAwN0Q5NwotOjEwNEQ1MDAwMDIyMDIwMjEzNDQyMDA0MDBFMDAwMzBCQTIwMjAwN0RGRAotOjEwNEQ2MDAwOEY0MjAxRjgwNDQwRkZGRTI0MDIwMDAyQUY1MTAxQzA0RgotOjEwNEQ3MDAwQTM0MjAxQzQzQzAyMTAwMEFGNDIwMUY4OEZCRjAwMThFQgotOjEwNEQ4MDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA5MQotOjEwNEQ5MDAwMDgwMDBEOTgwODAwMERFMDA4MDAwRTIwMDgwMDBFNkNCOQotOjA0NERBMDAwMDgwMDBFQTA1OQotOjBDNERBNDAwMEEwMDAwMjIwMDAwMDAwMDAwMDAwMDAwRDcKLToxMDREQjAwMDAwMDAwMDBENjM3MDM1MkUzMDJFMzA2QTMzMDAwMDAwODUKLToxMDREQzAwMDA1MDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKLToxMDRERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMDRERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwQTMKLToxMDRERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKLToxMDRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKLToxMDRFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOTEKLToxMDRFMjAwMDAwMDAwMDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMDRFMzAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBENDUKLToxMDRFNDAwMDNDMDIwODAwMjQ0MjVBQzQzQzAzMDgwMDI0NjM2MTkwRDkKLToxMDRFNTAwMEFDNDAwMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0REUKLToxMDRFNjAwMDNDMUQwODAwMzdCRDdGRkMwM0EwRjAyMTNDMTAwODAwNkEKLToxMDRFNzAwMDI2MTAwMDg4M0MxQzA4MDAyNzlDNUFDNDBFMDAwMUE2N0UKLToxMDRFODAwMDAwMDAwMDAwMDAwMDAwMEQyN0JERkZFODNDMDk2MDE4OEQKLToxMDRFOTAwMEFGQkYwMDEwOEQyQzUwMDAyNDBERkY3RjI0MDgwMDMxN0YKLToxMDRFQTAwMDAxOEQ1ODI0MzU2QTM4MEMyNDA3MEMwMDNDMUE4MDAwMDgKLToxMDRFQjAwMEFEMkE1MDAwM0MwNDgwMEFBRjQ4MDAwODNDMUI4MDA4MjMKLToxMDRFQzAwMEFGNDcwMDI0MEUwMDA5MzhBRjg0MDAxMDBFMDAwOEZCMjUKLToxMDRFRDAwMDAwMDAwMDAwMEUwMDA4NDgwMDAwMDAwMDBFMDAxMkRGNzUKLToxMDRFRTAwMDAwMDAwMDAwM0MwNDYwMTY4Qzg1MDAwMDNDMDZGRkZGQkIKLToxMDRFRjAwMDNDMDI1MzUzMDBBNjE4MjQxMDYyMDA0NzM0ODY3QzAwRkQKLToxMDRGMDAwMDk0QzIwMUYyQTc4MDAwMkMxMDQwMDAwM0E3ODAwMENDQkYKLToxMDRGMTAwMDM4NTgxRTFFQTc5ODAwMkM5NEMyMDFGODEwNDAwMDA0QjcKLToxMDRGMjAwMDk3ODMwMENDMzg1OTFFMUVBNzk5MDBDQzk3ODMwMENDREMKLToxMDRGMzAwMDJDN0YwMDY3NTNFMDAwMDEyNDAzMDA2Njk3ODQwMDJDNTcKLToxMDRGNDAwMDJDODIwNDAxMTQ0MDAwMDIwMDYwMjgyMTI0MDQwNDAwODMKLToxMDRGNTAwMDNDMDc2MDAwOENFOTA0MzgyNDAzMTAzQzMxMjhGRkZGMzMKLToxMDRGNjAwMDExMDMwMDFGMzBCOUZGRkY1NzIwMDAxMEEzODAwMENFQUYKLToxMDRGNzAwMDI0MDIwMDUwQTM4MjAwQ0U5MzlGMDBDRTUzRTAwMDBGODYKLToxMDRGODAwMEE3ODUwMENDQTc4MDAwQ0M5Nzg1MDBDQzhGQkYwMDEwRjAKLToxMDRGOTAwMEE3ODAwMDJDQTc4MDAwMzRBNzgwMDBFNjNDMDEwODAwMTEKLToxMDRGQTAwMEFDMjUwMDgwMDNFMDAwMDgyN0JEMDAxODkzOUYwMENFQzkKLToxMDRGQjAwMDU3RTBGRkY1QTc4MDAwQ0NBNzg1MDBDQzk3ODUwMENDRjMKLToxMDRGQzAwMDhGQkYwMDEwQTc4NDAwMkNBNzgwMDAzNEE3ODAwMEU2QzQKLToxMDRGRDAwMDNDMDEwODAwQUMyNTAwODAwM0UwMDAwODI3QkQwMDE4NTQKLToxMDRGRTAwMEEzODAwMENFOENDQjAwM0MzMTZBMDAwMTExNDAwMDBFNDIKLToxMDRGRjAwMDAwMDAwMDAwMzBBN0ZGRkYxMEUwRkZERTI0MDIwMDUwOTkKLToxMDUwMDAwMDhDQ0MwMEM4MzE4NjAwMDExNEMwRkZEQzkzOUYwMENFMTkKLToxMDUwMTAwMDBBMDAwMDc0MjQwMjAwNTE4QzhGMDAwNDNDMEU2MDAwRDIKLToxMDUwMjAwMDBBMDAwMDU3MDFFRTMwMjE4Q0VGMDgwODI0MEQ1NzA4QzQKLToxMDUwMzAwMDAwMEY3NDAyMTFDRDAwMDQzMEI4RkZGRjI0MDUwMDY2OTQKLToxMDUwNDAwMDBBMDAwMDc1MjQwNDA0MDAxNzAwRkZDQzkzOUYwMENFRDMKLToxMDUwNTAwMDBBMDAwMDc0MjQwMjAwNTA4Rjg2MDAxMDMwODlGRkZGODAKLToxMDUwNjAwMDAwMDkzOTQwOENDMzAwMTAzQzA4MDA1MDAwRTgyMDI1OUUKLToxMDUwNzAwMEFGNDMwMDM4OENDNTAwMTQyNzQyMDQwMEFGODIwMDFDRTcKLToxMDUwODAwMEFGNDUwMDNDQUY0NDAwMzAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMDUwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLToxMDUwQTAwMDAwMDAwMDAwMDAwMDAwMDA4RjRCMDAwMDMxNkEwMDIwNkIKLToxMDUwQjAwMDExNDBGRkZEMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwQjgKLToxMDUwQzAwMDhGODQwMDEwOTQ4QTAwMUE4Qzg3MDAyNDMxNDlGRkZGRDYKLToxMDUwRDAwMDAwMDk0MEMwMDBFODMwMjFBRjQ2MDAzQzhDODUwMDI0MjgKLToxMDUwRTAwMDhGNDMwMDNDMDBBMzEwMjMxODQwMDAyOTAwMDAwMDAwNUIKLToxMDUwRjAwMDhDOEIwMDIwMjU2MjAwMDEzQzBEMDA1MDM1QUMwMDA4NkYKLToxMDUxMDAwMEFGNDIwMDM4QUY0QzAwMzAwMDAwMDAwMDAwMDAwMDAwNEIKLToxMDUxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMDUxMjAwMDAwMDAwMDAwMDAwMDAwMDA4RjRGMDAwMDMxRUUwMDIwNjIKLToxMDUxMzAwMDExQzBGRkZEMDAwMDAwMDA4RjRBMDQwMDNDMDgwMDIwNjEKLToxMDUxNDAwMEFDOEEwMDEwOEY0OTA0MDRBQzg5MDAxNEFGNDgwMDMwQzkKLToxMDUxNTAwMDAwMDAwMDAwOTQ4NjAwMTg5NDg3MDAxQzAwQzcxODIxRTYKLToxMDUxNjAwMEE0ODMwMDE4OTQ4NTAwMUEyNEEyMDAwMUE0ODIwMDFBQzYKLToxMDUxNzAwMDk0OTgwMDFBOTQ5OTAwMUUxMzM4MDAwMzAwMDAwMDAwNTAKLToxMDUxODAwMDAzRTAwMDA4MDAwMDAwMDAwM0UwMDAwOEE0ODAwMDFBMEIKLToxMDUxOTAwMDhDODIwMDIwMEEwMDAwRDYzQzBEMDA1MDBBMDAwMEM3OTcKLToxMDUxQTAwMDAwMDAwMDAwM0MwMzA4MDA4QzYzMDAyMDhGODIwMDE4ODAKLToxMDUxQjAwMDI3QkRGRkU4MTA2MjAwMDhBRkJGMDAxMDBFMDAwMEZFMjAKLToxMDUxQzAwMEFGODMwMDE4M0MwMzA4MDA4QzYzMDAyMDI0MDQwMDAxMTYKLToxMDUxRDAwMDEwNjQwMDA0OEY4OTAwMTA4RkJGMDAxMDAzRTAwMDA4RTYKLToxMDUxRTAwMDI3QkQwMDE4OEZCRjAwMTAzQzA3NjAxMkE1MjAwMDBBRTEKLToxMDUxRjAwMDk1MjgwMDBBMzRFNTAwMTAyN0JEMDAxODMxMDZGRkZGOEUKLToxMDUyMDAwMDAzRTAwMDA4QUNBNjAwOTAzQzAyMDgwMDhDNDIwMDIwOUQKLToxMDUyMTAwMDI3QkRGRkM4QUZCRjAwMzRBRkJFMDAzMEFGQjcwMDJDMTIKLToxMDUyMjAwMEFGQjYwMDI4QUZCNTAwMjRBRkI0MDAyMEFGQjMwMDFDNjgKLToxMDUyMzAwMEFGQjIwMDE4QUZCMTAwMTQxMDQwMDA1MEFGQjAwMDEwNzIKLToxMDUyNDAwMDhGODQwMDEwOTQ4NjAwMDY5NDgzMDAwQTAwQzMyODIzRUMKLToxMDUyNTAwMDMwQjZGRkZGMTJDMDAwNEE4RkJGMDAzNDk0ODkwMDE4OTcKLToxMDUyNjAwMDk0OEEwMDBBMDEyQTQwMjMzMTAyRkZGRjAyQzIzODJCMzAKLToxMDUyNzAwMDE0RTAwMDAyMDJDMDIwMjEwMDQwMjAyMTJDOEMwMDA1RjcKLToxMDUyODAwMDE1ODAwMDAyMDA4MEEwMjEyNDE0MDAwNDBFMDAwMEFENEYKLToxMDUyOTAwMDAyODAyMDIxOEY4NzAwMTAwMjgwOTgyMUFGODAwMDE0QTcKLToxMDUyQTAwMDk0RUQwMDBBMDI4MDg4MjExMjgwMDA0RTMxQjJGRkZGODcKLToxMDUyQjAwMDNDMTc3MDAwM0MxNTQwMDAzQzFFNjAwMDhGOEYwMDFDQTYKLToxMDUyQzAwMDhERUUwMDAwMDFENzE4MjQ1MDc1MDA1MDAyMjAyMDIxRDcKLToxMDUyRDAwMDAyQTM4MDJCMTYwMDAwMzUzQzE4MjAwMDUwNzgwMDQ3QjAKLToxMDUyRTAwMDAyMjAyMDIxMjQxMDAwMDE4RjgzMDAxNDE0NjAwMDM5NTMKLToxMDUyRjAwMDAyOTE1ODIzMDIzMEY4MjMwMjUwQzgyMTMzRjFGRkZGRjYKLToxMDUzMDAwMDE2MjBGRkVFMzMzMkZGRkY4Rjg3MDAxMDNDMTEwMDIwODQKLToxMDUzMTAwMEFGNTEwMDMwMDAwMDAwMDA5NEU2MDAwQTNDMUU2MDEyMEQKLToxMDUzMjAwMDM3RDUwMDEwMDI2NjI4MjFBNEU1MDAwQTk0RTIwMDBBOUQKLToxMDUzMzAwMDk0RjIwMDBBOTRGNDAwMTgzMDU3RkZGRjEyOTIwMDNCRDkKLToxMDUzNDAwMEFFQjcwMDkwOENFRDAwMTQ4Q0U0MDAxMDAwMTM3MTQwOTcKLToxMDUzNTAwMDAxQUU0MDIxMDAwRTVGQzMwMTBFNTAyQjAwOEI0ODIxOEYKLToxMDUzNjAwMDAxMkExODIxQUNFODAwMTRBQ0UzMDAxMDAyRDMzODIzNjIKLToxMDUzNzAwMDMwRjZGRkZGMTZDMEZGQjk4Rjg0MDAxMDhGQkYwMDM0RDYKLToxMDUzODAwMDhGQkUwMDMwOEZCNzAwMkM4RkI2MDAyODhGQjUwMDI0NTkKLToxMDUzOTAwMDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OUYKLToxMDUzQTAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAzODEwN0UwMDFCRkUKLToxMDUzQjAwMDAwMDAwMDAwMTQ3N0ZGQ0MyNDEwMDAwMTBFMDAxNjJBMTQKLToxMDUzQzAwMDAwMDAwMDAwOEY4MzAwMTQxMDYwRkZDQjAyMzBGODIzMzAKLToxMDUzRDAwMDAyOTE1ODIzOEY4NzAwMTAwMTcwMjAyMTBBMDAwMTkxNEIKLToxMDUzRTAwMDMwOTNGRkZGOEY4MzAwMTQxNDYwRkZDQjNDMTEwMDIwMkIKLToxMDUzRjAwMEFGNTEwMDMwMEEwMDAxNUQwMDAwMDAwMDBFMDAwN0ExNUYKLToxMDU0MDAwMDAyNDAyODIxMEEwMDAxNTEwMDQwODAyMTBFMDAwMzRCNzgKLToxMDU0MTAwMDAyNDAyODIxMEEwMDAxNTEwMDQwODAyMTBFMDAxNEYyQjAKLToxMDU0MjAwMDAyMjAyMDIxMEEwMDAxNTEwMDQwODAyMTBFMDAwMEM3MDcKLToxMDU0MzAwMDAwMDAwMDAwMEEwMDAxNzMwMkQzMzgyMzI3QkRGRkU4RjMKLToxMDU0NDAwMEFGQjAwMDEwQUZCRjAwMTQwRTAwMDAzOTAwMDAwMDAwMjQKLToxMDU0NTAwMDNDMDI4MDAwMzQ1MDAwNzAwQTAwMDFCNDhFMDYwMDAwNDcKLToxMDU0NjAwMDhGNEYwMDAwMzlFRTAwMDEzMUMyMDAwMTEwNDAwMDI0Q0UKLToxMDU0NzAwMDhGODYwMEE4OEUwNzAwMDAzQzBDMDgwMDhEOEMwMDNDMzUKLToxMDU0ODAwMDNDMDkwODAwOEQyOTAwMzgwMEU2NjgyMzAxOEQyODIxOTkKLToxMDU0OTAwMDAwMDA1MDIxMDBBRDMwMkIwMTJBNDAyMTAxMDYyMDIxQkYKLToxMDU0QTAwMDNDMDEwODAwQUMyNTAwM0NBRjg3MDBBODNDMDEwODAwODcKLToxMDU0QjAwMEFDMjQwMDM4MEUwMDAxMDAwMDAwMDAwMDNDMDMwODAwOEUKLToxMDU0QzAwMDhDNjMwMDcwMTA2MEZGRTYwMDYwMjAyMTNDMDUwODAwM0UKLToxMDU0RDAwMDhDQTUwMDY4M0MwNjA4MDA4Q0M2MDA2QzBFMDAxNUI5NEYKLToxMDU0RTAwMDAwMDAwMDAwM0MwMTA4MDBBQzIwMDA3MDhGNEYwMDAwNUQKLToxMDU0RjAwMDM5RUUwMDAxMzFDMjAwMDExNDQwRkZERThGODYwMEE4QTIKLToxMDU1MDAwMDhFMEEwMDAwOEY4QjAwQTgzQzA1MDgwMDhDQTUwMDNDOEIKLToxMDU1MTAwMDNDMDQwODAwOEM4NDAwMzgwMTRCNDgyMzAwQTkzODIxNDIKLToxMDU1MjAwMDAwODIxODIxMDBFOTQwMkIwMDY4MTAyMTNDMDEwODAwOEUKLToxMDU1MzAwMEFDMjcwMDNDM0MwMTA4MDBBQzIyMDAzODhGNUYwMTAwMjIKLToxMDU1NDAwMDI0MTlGRjAwMjQxODBDMDAwM0Y5MjAyNDEwOTgwMDEyREQKLToxMDU1NTAwMEFGODQwMDAwQUY0NDAwMjA5MzZEMDAwMDI0MEMwMDIwQjUKLToxMDU1NjAwMDMxQTYwMEZGMTBDQzAwMTIyNDBFMDA1MDEwQ0UwMDA0MTMKLToxMDU1NzAwMDNDMTk0MDAwQUY1OTAxMzgwQTAwMDFBRDAwMDAwMDAwOUQKLToxMDU1ODAwMDBFMDAxMjU1MDAwMDAwMDAzQzE5NDAwMEFGNTkwMTM4RDAKLToxMDU1OTAwMDBBMDAwMUFEMDAwMDAwMDAwRTAwMDExOTAwMDAwMDAwMkIKLToxMDU1QTAwMDNDMTk0MDAwQUY1OTAxMzgwQTAwMDFBRDAwMDAwMDAwNkQKLToxMDU1QjAwMDhGNTgwMTAwMDA4MDI4MjEzMzBGMDBGRjAxRTAyMDIxRDcKLToxMDU1QzAwMDBFMDAwMkY4QUY4RjAwMDQzQzE5NDAwMEFGNTkwMTM4QkIKLToxMDU1RDAwMDBBMDAwMUFEMDAwMDAwMDAwMEE0MTAyQjI0MDMwMDAxMEMKLToxMDU1RTAwMDEwNDAwMDA5MDAwMDMwMjEwMDA1Mjg0MDAwQTQxMDJCQzUKLToxMDU1RjAwMDA0QTAwMDAzMDAwMzE4NDA1NDQwRkZGQzAwMDUyODQwQUQKLToxMDU2MDAwMDUwNjAwMDBBMDAwNDE4MkIwMDg1MzgyQjU0RTAwMDA0NzkKLToxMDU2MTAwMDAwMDMxODQyMDBDMzMwMjUwMDg1MjAyMzAwMDMxODQyRjAKLToxMDU2MjAwMDE0NjBGRkY5MDAwNTI4NDIwMDA0MTgyQjAzRTAwMDA4NkQKLToxMDU2MzAwMDAwQzMxMDIxMzA4NEZGRkYzMEE1RkZGRjhGNDIwMUI4NjcKLToxMDU2NDAwMDA0NDBGRkZFM0MwNzQwODAwMDg3MzAyNTNDMDMxMDAwRUIKLToxMDU2NTAwMEFGNDAwMTgwQUY0NTAxODRBRjQ2MDE4ODAzRTAwMDA4RjgKLToxMDU2NjAwMEFGNDMwMUI4MzA4NEZGRkY4RjQyMDFCODA0NDBGRkZFMTIKLToxMDU2NzAwMDNDMDc0MDM4OENBNjAwMDAwMDg3MjgyNTNDMDMxMDAwMUEKLToxMDU2ODAwMEFGNDYwMTgwQUY0NTAxODgwM0UwMDAwOEFGNDMwMUI4OTEKLToxMDU2OTAwMDhGODMwMDM4OEY4NjAwMzAxMDY2MDAwQjAwODA0MDIxMTkKLToxMDU2QTAwMDNDMDcwODAwMjRFNzVDMzgwMDAzMjhDMDAwQTcxMDIxNEQKLToxMDU2QjAwMDhDNDQwMDAwMjQ2MzAwMDExMDg4MDAwNTMwNjMwMDBGNTMKLToxMDU2QzAwMDU0NjZGRkZBMDAwMzI4QzAwM0UwMDAwODAwMDAxMDIxMjAKLToxMDU2RDAwMDNDMDcwODAwMjRFNzVDM0MwMEE3MzAyMTAzRTAwMDA4RjkKLToxMDU2RTAwMDhDQzIwMDAwM0MwMzkwMDAzNDYyMDAwMTAwODIyMDI1M0YKLToxMDU2RjAwMEFGNDQwMDIwOEY0NTAwMjAwNEEwRkZGRTAwMDAwMDAwMDIKLToxMDU3MDAwMDAzRTAwMDA4MDAwMDAwMDAzQzAzODAwMDM0NjIwMDAxNTgKLToxMDU3MTAwMDAwODIyMDI1MDNFMDAwMDhBRjQ0MDAyMDI3QkRGRkUwMDEKLToxMDU3MjAwMEFGQjEwMDE0MzA5MUZGRkZBRkIwMDAxMEFGQkYwMDE4NTEKLToxMDU3MzAwMDEyMjAwMDE1MDBBMDgwMjE4Q0E1MDAwMDEwQTAwMDEzRUQKLToxMDU3NDAwMDI0MDQwMDAyMEUwMDBDN0YyNDA2MDE0MEFFMDAwMDAwN0QKLToxMDU3NTAwMDhGNDIwMUI4MDQ0MDAwMEQwMDAwMjgyMTNDMDY0MDAwQTMKLToxMDU3NjAwMDAyMjYyMDI1OEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQzMKLToxMDU3NzAwMDNDMDMxMDAwMjdCRDAwMjBBRjQ1MDE4MEFGNDQwMTg4RTUKLToxMDU3ODAwMDAzRTAwMDA4QUY0MzAxQjg4Q0E1MDAwMDhGNDIwMUI4QzgKLToxMDU3OTAwMDA0NDBGRkZFM0MwNjQwMDAwMjI2MjAyNThGQkYwMDE4NzMKLToxMDU3QTAwMDhGQjEwMDE0OEZCMDAwMTAzQzAzMTAwMDI3QkQwMDIwMDMKLToxMDU3QjAwMEFGNDUwMTgwQUY0NDAxODgwM0UwMDAwOEFGNDMwMUI4NjIKLToxMDU3QzAwMDMwODZGRkZGOEY0MjAxQjgwNDQwRkZGRTNDMDk0MDA2Q0YKLToxMDU3RDAwMDhDQTgwMDAwMDBDOTM4MjVBRjQ4MDE4MDhDQTQwMDA0QzMKLToxMDU3RTAwMDNDMDMxMDAwQUY0NDAxODRBRjQ3MDE4ODAzRTAwMDA4ODgKLToxMDU3RjAwMEFGNDMwMUI4MjdCREZGRTBBRkIwMDAxMEFGQkYwMDE4NDYKLToxMDU4MDAwMEFGQjEwMDE0OTM2MzAwM0UwMDgwODAyMTAwODAyODIxMDYKLToxMDU4MTAwMDMwNjIwMDQwMDAwMDIwMjExMDQwMDAwRjhFMTEwMDAwNzcKLToxMDU4MjAwMDBFMDAwODc0MDIyMDIwMjE5MzY3MDAwMDI0MDQwMDUwMTkKLToxMDU4MzAwMDMwRTUwMEZGNTBBNDAwMTI4RTBGMDAwMDAyMjAyMDIxNEUKLToxMDU4NDAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEE3NjIwMTNDMDkKLToxMDU4NTAwMDBBMDAwOTM0MjdCRDAwMjAwRTAwMDI4NzAwMDAwMDAwNjYKLToxMDU4NjAwMDBFMDAwODc0MDIyMDIwMjE5MzY3MDAwMDI0MDQwMDUwRDkKLToxMDU4NzAwMDMwRTUwMEZGMTRBNEZGRjIwMjIwMjAyMThFMEYwMDAwNkIKLToxMDU4ODAwMDNDMTAwODAwOEUxMDAwNTAzQzBEMDAwQzI0MEJGRjgwRDMKLToxMDU4OTAwMDAxRjA1MDIxMzE0RTAwN0YwMURBNjAyMTAxOEQ0MDIxNUQKLToxMDU4QTAwMDAxNEI0ODI0QUY0OTAwMjgwMjIwMjAyMThGQkYwMDE4NTcKLToxMDU4QjAwMDhGQjEwMDE0OEZCMDAwMTBBNTAyMDBENjI3QkQwMDIwQzQKLToxMDU4QzAwMDBBMDAwOTM0QUY4ODAwRDAyN0JERkZFMEFGQkYwMDE4NDEKLToxMDU4RDAwMEFGQjEwMDE0QUZCMDAwMTA5MzY2MDAwMTAwODA4MDIxQ0EKLToxMDU4RTAwMDBFMDAwMjUwMzBEMTAwMDQ5MzY0MDAwNTAwMTAyOUMyNUMKLToxMDU4RjAwMEE3NjUwMDAwMzQ4MzAwNDBBMzYzMDAwNTBFMDAwMjU5MzEKLToxMDU5MDAwMDAyMDAyMDIxMEUwMDA5MzYwMjAwMjAyMTI0MDIwMDAxOUQKLToxMDU5MTAwMEFGNjIwMDBDMDIwMDI4MjFBNzYyMDAxMDI0MDQwMDAyREMKLToxMDU5MjAwMEE3NjIwMDEyMjQwNjAxNDBBNzYyMDAxNDBFMDAwQzdGM0IKLToxMDU5MzAwMEE3NjIwMDE2MTYyMDAwMEY4RkJGMDAxODk3OEMwMDM0NDYKLToxMDU5NDAwMDNDMEIwODAwOEQ2QjAwNzgyNTg4RkZGRjMxMDlGRkZGQjUKLToxMDU5NTAwMDI1NkEwMDAxMDEyQTM4MkIxMEUwMDAwNkE3ODgwMDM0RDAKLToxMDU5NjAwMDNDMEY2MDA2MjQwRTAwMTYzNUVEMDAxMEFEQUUwMDUwNjEKLToxMDU5NzAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MzMKLToxMDU5ODAwMDI3QkQwMDIwMjdCREZGRTBBRkIxMDAxNEFGQkYwMDE4NTYKLToxMDU5OTAwMEFGQjAwMDEwMDBBMDg4MjExMDgwMDAwQTNDMDM2MDAwMTYKLToxMDU5QTAwMDI0MDIwMDgwMTA4MjAwMTIwMDAwMDAwMDAwMDAwMDBEQTAKLToxMDU5QjAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4RjMKLToxMDU5QzAwMDI3QkQwMDIwOEM2ODJCRjgwNTAwRkZGRTAwMDAwMDAwQkEKLToxMDU5RDAwMEFDNzEyQkMwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQjYKLToxMDU5RTAwMDNDMDkxMDAwMjdCRDAwMjAwM0UwMDAwOEFDNjkyQkY4M0IKLToxMDU5RjAwMDBFMDAwMjUwMDBBMDIwMjE5MzY1MDAwNTAyMjAyMDIxMDYKLToxMDVBMDAwMDBFMDAwMjU5MzBCMDAwRkYyNDAzMDAzRTE2MDNGRkU3RUEKLToxMDVBMTAwMDAwMDAwMDAwOEY0NDAxNzgwNDgwRkZGRTI0MDcwMDA3ODcKLToxMDVBMjAwMDNDMDYxMDAwQUY1MTAxNDAwMjIwMjAyMUEzNDcwMTQ0NTEKLToxMDVBMzAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEFGNDYwMTc4RUYKLToxMDVBNDAwMDBBMDAwMkM5MjdCRDAwMjAyN0JERkZFOEFGQkYwMDE0MzAKLToxMDVBNTAwMEFGQjAwMDEwOEY1MDAwMjAwMDAwMDAwMDBFMDAwOTM2OEIKLToxMDVBNjAwMEFGNDQwMDIwQUY1MDAwMjA4RkJGMDAxNDhGQjAwMDEwNTMKLToxMDVBNzAwMDAzRTAwMDA4MjdCRDAwMTgzMDg0RkZGRjhGNDIwMUI4MDMKLToxMDVBODAwMDA0NDBGRkZFM0MwNzQwMzUwMDg3MzAyNTNDMDMxMDAwRjIKLToxMDVBOTAwMEFGNDUwMTgwQUY0MDAxODRBRjQ2MDE4ODAzRTAwMDA4QjQKLToxMDVBQTAwMEFGNDMwMUI4MzA4NEZGRkY4RjQyMDFCODA0NDBGRkZFQ0UKLToxMDVBQjAwMDNDMDc0MDM2MDA4NzMwMjUzQzAzMTAwMEFGNDUwMTgwOEQKLToxMDVBQzAwMEFGNDAwMTg0QUY0NjAxODgwM0UwMDAwOEFGNDMwMUI4NEUKLToxMDVBRDAwMDI3QkRGRkQwQUZCMzAwMUMzMDkzRkZGRkFGQjUwMDI0NEMKLToxMDVBRTAwMEFGQjIwMDE4QUZCRjAwMjhBRkI0MDAyMEFGQjEwMDE0QjAKLToxMDVBRjAwMEFGQjAwMDEwMzBCNUZGRkYxMjYwMDAyNzAwMDA5MDIxMEEKLToxMDVCMDAwMDhGOTAwMDFDOEUwMzAwMDAzQzA2ODAwMDI0MDIwMDQwQTEKLToxMDVCMTAwMDAwMDMzRTAyMDAwMzJDMDIzMEU0MDA3RjAwNjY4ODI0NkMKLToxMDVCMjAwMDE0ODIwMDFEMzBBNTAwRkY4RjgzMDAyODJDNjgwMDBBMTYKLToxMDVCMzAwMDUxMDAwMDEwOEY5MTAwMTQwMDAzNTg4MDNDMEMwODAwQTUKLToxMDVCNDAwMDI1OEM1OEQwMDE2QzUwMjE4RDQ5MDAwMDAxMjAwMDA4OUYKLToxMDVCNTAwMDAwMDAwMDAwMDJCMjE4MjEzMDY1RkZGRjBFMDAwMjI0OTEKLToxMDVCNjAwMDI0MDQwMDg0MTYyMDAwMDI4RjkwMDAxQ0FGODAwMDI4QkYKLToxMDVCNzAwMDhGOTEwMDE0MjYwQzAwMjAyNjRCMDAwMTAxODA4MDIxMEIKLToxMDVCODAwMDMxNzJGRkZGMTYyMDAwMDRBRjhDMDAxQzAyNTMyODJCM0IKLToxMDVCOTAwMDE0QTBGRkRDMDAwMDAwMDAwMjQwMTAyMThGQkYwMDI4OEQKLToxMDVCQTAwMDhGQjUwMDI0OEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4NzMKLToxMDVCQjAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDMwNDMKLToxMDVCQzAwMDI0MEQwMDM0MTRBRDAwRjYwMDAwMDAwMDkyMEIwMDBFMEUKLToxMDVCRDAwMDI0MEExNjgwM0MwNzAwMENBMzZCMDAyMTkyMDMwMDBERTEKLToxMDVCRTAwMDAzNDdGODIxM0MwNjYwMDBBMzYzMDAyMDk2MTEwMDEyRDEKLToxMDVCRjAwMDNDMDU3RkZGMzRBQ0ZGRkZBNzcxMDAzQzk2MDIwMDEwMEMKLToxMDVDMDAwMDI0MEIwMDA1MzA1NEZGRkZBRjc0MDA4NDhFMTkwMDFDNzQKLToxMDVDMTAwMEFGNEEwMDI4OEZGODAwMDA4Q0NGNDQ0ODAzMTk3MDI2NDMKLToxMDVDMjAwMDAxRUUzMDIxQUY2NjAwNEM4RjY5MDA0QzI0Q0QwMDAxOUQKLToxMDVDMzAwMDNDMTk3RjAwQUY2OTAwNTA4RjY0MDA1MEFGNjQwMDU0N0UKLToxMDVDNDAwMEFGNjYwMDcwQUY2RDAwNTg4RjY4MDA1ODI0MDQwMDUwOTQKLToxMDVDNTAwMEFGNjgwMDVDQTM2MDAwMjNBRjZDMDA2NEEzNkIwMDM3RTcKLToxMDVDNjAwMDhFMDMwMDE0QUY2MzAwNDg4RjcxMDA0OEFGNzEwMDI0QTkKLToxMDVDNzAwMDhFMDIwMDE4QUY2MjAwNkM5MjE0MDAwQ0EzNzQwMDM2MDAKLToxMDVDODAwMDkzNkEwMDNFMzU1RjAwMjBBMzdGMDAzRThGNzgwMDc0NEEKLToxMDVDOTAwMDAzMTk3ODI0MzVFRTQwMDBBRjZFMDA3NDkzNjkwMDAwNUMKLToxMDVDQTAwMDMxMzAwMEZGMTIwNDAyMkIyNDE4RkY4MDNDMDQwODAwNEUKLToxMDVDQjAwMDI0ODQ1Q0I4MEUwMDAyOTQwMDAwMDAwMDI0MDYwMDA0NTYKLToxMDVDQzAwMDI0MDcwMDAxM0MwNDA4MDA4Qzg0NUNCOEEzNjYwMDdEQjYKLToxMDVDRDAwMEEzNjcwMDA1OEY0QTAxNzgwNTQwRkZGRTI0MDIwMDAyRjkKLToxMDVDRTAwMEFGNDQwMTQwQTM0MjAxNDQ4RjkwMDAxQzNDMTQxMDAwQkIKLToxMDVDRjAwMEFGNTQwMTc4MEEwMDAzNzNBRjgwMDAyODJDQUQwMDM3NDEKLToxMDVEMDAwMDUxQTBGRjlDOEY5MTAwMTQwMDA1QTA4MDNDMTgwODAwNTIKLToxMDVEMTAwMDI3MTg1OEY4MDI5ODc4MjE4REVFMDAwMDAxQzAwMDA4N0QKLToxMDVEMjAwMDAwMDAwMDAwMjQwNjAwMDYxNEE2MDAxMTAwMDAwMDAwNzgKLToxMDVEMzAwMDNDMUYwODAwOEZGRjVDQjgyNDA0MDAwNUFGNUYwMDIwMDMKLToxMDVENDAwMDhFMTkwMDE4QUY3OTAwMTg4Rjc4MDA0Q0FGNzgwMDFDQkUKLToxMDVENTAwMDhGNkYwMDUwMTIyMDAwQzJBRjZGMDA3MDBBMDAwMzczRjMKLToxMDVENjAwMEFGODQwMDI4MjQwQTAwMDcxMEFBMDA4NDI0MDMwMDA2MzgKLToxMDVENzAwMDNDMDUwODAwMjRBNTVDQjgwRTAwMDI1RTI0MDQwMDgxRTYKLToxMDVEODAwMDhGOTAwMDFDMDAxMTEwMkIwQTAwMDM3M0FGODIwMDI4QjMKLToxMDVEOTAwMDI0MDIwMDA0MTRBMkZGRjYyNDBBMDA1MDNDMDkwODAwNjMKLToxMDVEQTAwMDhEMjk1Q0I4QUY0OTAwMjA4RTA0MDAwOEFGNjQwMDQwMjQKLToxMDVEQjAwMDhFMDYwMDA4QUY2NjAwNDQ4RTA3MDAwQ0FGNjcwMDQ4RUYKLToxMDVEQzAwMDhFMEQwMDEwQUY2RDAwNEM4RTA4MDAxMEFGNjgwMDg0N0YKLToxMDVERDAwMDhFMDUwMDE0QUY2NTAwNTA4RTBDMDAxOEFGNkMwMDU0OTcKLToxMDVERTAwMDhFMEIwMDFDQUY2QjAwNTg5Mzc0MDAwMDMyODMwMEZGRDEKLToxMDVERjAwMDEwNkEwMUVEMDAwMDAwMDA4RjY3MDA0ODhGNjYwMDQwQzgKLToxMDVFMDAwMDAwRTY2ODIzMDVBMDAwMDQyNDA0MDA4QzE2MjBGRkRFQjEKLToxMDVFMTAwMDI0MDIwMDAzMjQwNDAwODIzQzA1MDgwMDI0QTU1Q0I4ODkKLToxMDVFMjAwMDBFMDAwMjg3MDAwMDAwMDA4RjkwMDAxQzAwMDAxMDIxNkYKLToxMDVFMzAwMDBBMDAwMzczQUY4MjAwMjgyNDA0MDAwNTE0QTRGRkNDRDkKLToxMDVFNDAwMDI0MDUyMDAwM0MxRjA4MDA4RkZGNUNCOEFGNUYwMDIwRDYKLToxMDVFNTAwMDhFMTkwMDA0QUY3OTAwNUM5MjE4MDAwODI0MTAwMDA4MjUKLToxMDVFNjAwMEEzNzgwMDIxOEY4RjAwMUM5MUVFMDAwOUEzNkUwMDIwMDMKLToxMDVFNzAwMDhGODYwMDFDOTBDOTAwMEEzMTI0MDBGRjEwOTAwMDEwOEEKLToxMDVFODAwMDI4OEEwMDA5MTU0MDAwNkMyNDAyMDAwMjI0MEMwMDIwMUUKLToxMDVFOTAwMDEwOEMwMDBCMzQwNTgwMDAyODg1MDAyMTE0QTAwMDA4MTgKLToxMDVFQTAwMDI0MDU0MDAwMjQwODAwNDAxMDg4MDAwNTNDMDUwMDAxM0UKLToxMDVFQjAwMDI0MEQwMDgwMTA4RDAwMDIzQzA1MDAwMjI0MDU0MDAwRTYKLToxMDVFQzAwMDhGNkUwMDc0M0MwRkZGMDAwMUNGNDgyNDAxMjU4MDI1MTAKLToxMDVFRDAwMEFGNzAwMDc0OTBDNDAwMEJBMzY0MDA4MThGODQwMDFDMTkKLToxMDVFRTAwMDk0ODcwMDBDMTBFMDAxOTMwMDAwMDAwMDk0OEUwMDBDRDkKLToxMDVFRjAwMDI0MUZGRkJGMjQwNjAwMDRBNzZFMDAzQzkwODkwMDBFRkIKLToxMDVGMDAwMEEzNjkwMDNFOEY5MDAwMUM5MjA0MDAwRkEzNjQwMDNGMjEKLToxMDVGMTAwMDhGOTQwMDFDOEU4RDAwMTA4RjQ3MDA3NDAxQTc0MDIzQzIKLToxMDVGMjAwMEFGNjgwMDYwOEU4NTAwMTRBRjY1MDA2NDk2OEMwMDE4MjEKLToxMDVGMzAwMEE3NkMwMDY4OTY4QjAwMUFBNzZCMDA2QThFODMwMDFDMDIKLToxMDVGNDAwMEFGNjMwMDZDOTY4MjAwMDJBNzYyMDEzRTkyOEEwMDBFNDcKLToxMDVGNTAwMEEzNkEwMDNFOTM3OTAwM0UwMzNGQzAyNDEyMjAwMTY2RUQKLToxMDVGNjAwMEEzNzgwMDNFOEY5MDAwMUMwQTAwMDM3M0FGODYwMDI4QzAKLToxMDVGNzAwMDI0MTQwMDIyMTRCNEZGN0UyNDAzMDAwNzNDMDIwODAwMEUKLToxMDVGODAwMDhDNDI1Q0I4MTIyMDAwMENBRjQyMDAyMDBBMDAwMzczNjAKLToxMDVGOTAwMEFGODMwMDI4MjQwQzAwMzMxMEFDMDAxNDI0MDUwMDI4MjMKLToxMDVGQTAwMDNDMDUwODAwMjRBNTVDQjgwRTAwMDIzMDI0MDQwMDgxRTIKLToxMDVGQjAwMDBBMDAwM0Y4OEY5MDAwMUMzQzA0MDgwMDI0ODQ1Q0I4OUQKLToxMDVGQzAwMDBFMDAwMjk0MDAwMDAwMDA5MzZCMDAwMDI0MTEwMDUwQUEKLToxMDVGRDAwMDMxNjMwMEZGMTA3MTAxNTAwMDAwMDAwMDhGOTAwMDFDMjEKLToxMDVGRTAwMDAwMDAxODIxMEEwMDAzNzNBRjgzMDAyODNDMDgwODAwNTIKLToxMDVGRjAwMDhEMDg1Q0I4MjQwNDAwODFBRjQ4MDAyMEEzNjUwMDM0RkMKLToxMDYwMDAwMDNDMDUwODAwMjRBNTVDQjgwRTAwMDIzMDAwMDAwMDAwMkEKLToxMDYwMTAwMDhGOTAwMDFDMjQwMjAwMDkwQTAwMDM3M0FGODIwMDI4M0QKLToxMDYwMjAwMDAyQjI4ODIxMzIyNUZGRkYwRTAwMDIyNDI0MDQwMDg0REUKLToxMDYwMzAwMDBBMDAwMzczOEY5MDAwMUMxMDgyRkZBMTI0MDUwNDAwNDYKLToxMDYwNDAwMDI4ODMwMDAzMTA2MDAxNkUyNDBCMDAwNDI0MTQwMDAxNTcKLToxMDYwNTAwMDU0OTRGRjlCMjQwNTQwMDAwQTAwMDQ0NzI0MDUwMTAwRDYKLToxMDYwNjAwMDNDMDQwODAwMjQ4NDVDQjg4RjYyMDA0QzBFMDAwMjk0NEIKLToxMDYwNzAwMDhGNjMwMDUwOEY5MDAwMUMwMDAwMjAyMTBBMDAwMzczRTIKLToxMDYwODAwMEFGODQwMDI4OEUxMDAwMDQyNDA0MDA4QUFGNTAwMDIwNDIKLToxMDYwOTAwMDkzNkUwMDA1MzFDOTAwMDIxNTIwMDE1RDAyMDAyODIxMjAKLToxMDYwQTAwMDkzNzgwMDIzMDIwMDI4MjEzMzBGMDAyMDE1RTAwMTU4QzcKLToxMDYwQjAwMDI0MDQwMDhEOTM2MjAwM0YyNDE5MDAxMjMwNUYwMEZGMUEKLToxMDYwQzAwMDEzRjkwMTUzMjQwNDAwODEwRTAwMDI1MDAyMDAyMDIxMjQKLToxMDYwRDAwMDkzNzQwMDIzMjQwQTAwMDQwMjAwMjAyMTM2ODMwMDQyMjYKLToxMDYwRTAwMEEzNjMwMDIzMEUwMDAyNTlBMzZBMDA3RDhGNEIwMTc4NDEKLToxMDYwRjAwMDA1NjBGRkZFMjQwNTAwMDJBRjUwMDE0MEEzNDUwMTQ0QTYKLToxMDYxMDAwMDhGOTAwMDFDM0MwQzEwMDBBRjRDMDE3ODBBMDAwM0Y5ODIKLToxMDYxMTAwMDAwMTExMDJCOEUxMDAwMDRBRjUwMDAyMDkzNkQwMDA1NkQKLToxMDYxMjAwMDMxQTgwMDAyNTUwMDAxNzgyNDA0MDA4QTkzNjQwMDNGREUKLToxMDYxMzAwMDI0MDcwMDA0MDIwMDI4MjEzMDg2MDBGRjEwQzcwMDEwNDkKLToxMDYxNDAwMDI0MDQwMDgxMEUwMDAyNTAwMjAwMjAyMTkzN0YwMDIzQ0UKLToxMDYxNTAwMDI0MTgwMDEyMjQwRkZGRkUzN0Y5MDAyMEEzNzkwMDIzMzIKLToxMDYxNjAwMEEzNzgwMDNGOTM2RTAwMDUwMjAwMjAyMTAxQ0Y0ODI0NTAKLToxMDYxNzAwMDBFMDAwMjU5QTM2OTAwMDUwMjAwMjgyMTAwMDAyMDIxMTkKLToxMDYxODAwMDBFMDAwMzQwMDAwMDAwMDAwQTAwMDNGODhGOTAwMDFDN0UKLToxMDYxOTAwMDhFMDUwMDA0M0MwRjAwMDgwMzRGNDAyMUFGNDUwMDIwNEUKLToxMDYxQTAwMDkxMEUwMDAwMjQwNjAwNTAzMUM5MDBGRjExMjYwMTdBMkIKLToxMDYxQjAwMDI0MDQwMDg4OEY1OTAxQjgwNzIwRkZGRTNDMEM0MDBFRDQKLToxMDYxQzAwMDAwOEM1ODI1M0MwMzEwMDBBRjQ1MDE4MEFGNDAwMTg0OEUKLToxMDYxRDAwMEFGNEIwMTg4QUY0MzAxQjg5MTAyMDAwMDI0MEFGRjgwNTEKLToxMDYxRTAwMDI0MDQwMDA0MDA0QUY4MjVBMTFGMDAwMDBFMDAwQzdGQzMKLToxMDYxRjAwMDI0MDYwMDMwMEEwMDAzRjg4RjkwMDAxQzhFMEYwMDA0NjQKLToxMDYyMDAwMDNDMTQwODAwMjY5NDVDQjgzQzAxMDgwMEFDMkY1Q0I4MzQKLToxMDYyMTAwMEFGNEYwMDIwOTIwRTAwMDMzMUM5MDAwNDExMjAwMDAyOEMKLToxMDYyMjAwMDI0MDIwMDEyMjQwMjAwMDZBMzYyMDAzRjkyMDMwMDFCMTYKLToxMDYyMzAwMDI0MEFGRkMwMzA2MjAwM0YwMDRBRjgyNUEzN0YwMDNFRDkKLToxMDYyNDAwMDkyMTkwMDAzMzMzODAwMDExNzAwMDEyMjAwMDAwMDAwRkEKLToxMDYyNTAwMDhFMDIwMDA4QUU4MjAwMDgzQzAyMDgwMDhDNDI1Q0MwM0UKLToxMDYyNjAwMDEwNDAwMTJEMDAwMDAwMDAwMDAyMjFDMkE3NjQwMDA4QjgKLToxMDYyNzAwMDhFMEQwMDBDMjQwQjAwMDEyNDE0MDAxNEFGNkQwMDJDQjMKLToxMDYyODAwMDhFMDgwMDEwQUY2ODAwMzA5NjA1MDAxNkE3NjUwMDM4MkMKLToxMDYyOTAwMDk2MEMwMDE0QTc2QzAwM0FBRjZCMDAwQ0E3NkIwMDEwQjMKLToxMDYyQTAwMEE3NkIwMDEyQTc2QjAwMTRBNzZCMDAxNjEyMjAwMTRBRkYKLToxMDYyQjAwMEEzNzQwMDM0OTIwNjAwMDMzMEM3MDAwMjJDRjAwMDAxRTIKLToxMDYyQzAwMDI2MDIwMDA4OEY5MDAwMUMwQTAwMDM3M0FGODIwMDI4OEEKLToxMDYyRDAwMDhFMTQwMDA0MjQwMzAwODFBRjU0MDAyMDkzNjgwMDIzMkYKLToxMDYyRTAwMDMxMDUwMDEwMTBBMDAxMTMwMDAwMDAwMDhGNDQwMUI4MTgKLToxMDYyRjAwMDA0ODBGRkZFM0MwNjQwMUYwMDExMzgyQjAwNjYxMDI1NkQKLToxMDYzMDAwMDNDMTExMDAwQUY1NDAxODBBRjg3MDAyOEFGNDAwMTg0REEKLToxMDYzMTAwMEFGNDIwMTg4QUY1MTAxQjgwQTAwMDM3NDhGOTEwMDE0OTUKLToxMDYzMjAwMDhFMDYwMDA0M0MxOTAwMDgwMzU5MjAyMUFGNDYwMDIwQzYKLToxMDYzMzAwMDhFMDcwMDA4OTA5ODAwMDAyNDBGMDA1MDMzMTQwMEZGQ0YKLToxMDYzNDAwMDEyOEYwMTA2MjQwNTAwODg4RjQ0MDFCODA0ODBGRkZFRTcKLToxMDYzNTAwMDNDMEQ0MDA5MDAxMTYwMkIwMEFEMTAyNTNDMTExMDAwRDAKLToxMDYzNjAwMEFGNDYwMTgwQUY4QzAwMjhBRjQ3MDE4NEFGNDIwMTg4NUYKLToxMDYzNzAwMEFGNTEwMUI4MEEwMDAzNzQ4RjkxMDAxNDhFMDQwMDFDMDEKLToxMDYzODAwMDBFMDAwMjNCMDAwMDAwMDAxMDQwMDBENzAwNDA0ODIxRjIKLToxMDYzOTAwMDhGOTAwMDFDMjQwNTAwODk4RjREMDFCODA1QTBGRkZFRDkKLToxMDYzQTAwMDAwMDAwMDAwQUY0OTAxODA4RTBGMDAxQzNDMTQ0MDAxMkEKLToxMDYzQjAwMDAwMTE3MDJCMDBCNDQ4MjUzQzExMTAwMEFGNEYwMTg0MzAKLToxMDYzQzAwMEFGOEUwMDI4QUY0OTAxODhBRjUxMDFCODBBMDAwMzc0QUQKLToxMDYzRDAwMDhGOTEwMDE0OTYxOTAwMDIzQzE0MDgwMDI2OTQ1Q0I4QjIKLToxMDYzRTAwMDMzMzgwMDA0MTMwMDAwOEUzQzAyNjAwMDhFMUYwMDFDMzYKLToxMDYzRjAwMDNDMDEwODAwQUMzRjVDQjhBRjVGMDAyMDkyMEMwMDEwN0QKLToxMDY0MDAwMDI0MEIwMDE0MzE4NDAwRkYxNDhCMDBBQzAwMDAwMDAwNEEKLToxMDY0MTAwMDk2MDkwMDAyMzEyRDAwMDExNUEwMDE1MjAwMDAwMDAwNzQKLToxMDY0MjAwMDhFMDIwMDA0QUU4MjAwMDgzQzBFMDgwMDhEQ0U1Q0MwRDcKLToxMDY0MzAwMDExQzAwMTQ4MDAwMDAwMDA4RjY5MDA3NDNDMEU4MDAwMEMKLToxMDY0NDAwMDI0MDQwMDAxMDEyRTY4MjVBRjZEMDA3NEEzNjAwMDA1Q0YKLToxMDY0NTAwMEFGNjQwMDBDM0MwQzA4MDA4RDhDNUNDMDhGODgwMDFDNjUKLToxMDY0NjAwMEE3NjQwMDEwMDAwQzU5QzJBNzY0MDAxMkE3NjQwMDE0QUUKLToxMDY0NzAwMEE3NjQwMDE2QTc2QjAwMDg4RDAzMDAwODI0MDQwMDAyMUYKLToxMDY0ODAwMEFGNjMwMDJDOEQwQTAwMENBRjZBMDAzMDkxMDcwMDEwM0EKLToxMDY0OTAwMEEzNjcwMDM0OEY4MjAwMUM5MDQ1MDAxMUEzNjUwMDM1NkUKLToxMDY0QTAwMDhGODYwMDFDOTBEMDAwMTJBMzcwMDAzNjhGOUYwMDFDQjYKLToxMDY0QjAwMDkzRjkwMDEzQTM3OTAwMzc4RjkwMDAxQzk2MTgwMDE0RUQKLToxMDY0QzAwMEE3NzgwMDM4OTYxNDAwMTZBNzc0MDAzQThFMEYwMDE4QUIKLToxMDY0RDAwMEFGNkYwMDI0NTYyMEZEQTZBRjg0MDAyODNDMDUwODAwQkQKLToxMDY0RTAwMDI0QTU1Q0I4MEUwMDAyNUUwMDAwMjAyMThGOTAwMDFDRTUKLToxMDY0RjAwMDBBMDAwNEI2MDAwMDIwMjEzQzA1MDgwMDI0QTU1Q0I4NzEKLToxMDY1MDAwMDBFMDAwMjg3MjQwNDAwODI4RjkwMDAxQzAwMDAzMDIxQkUKLToxMDY1MTAwMDBBMDAwMzczQUY4NjAwMjgzQzA0MDgwMDhDODQ1Q0I4MzIKLToxMDY1MjAwMDBFMDAxNTc3MDAwMDAwMDA4RjkwMDAxQzBBMDAwNDkwRjgKLToxMDY1MzAwMDAwMDAxODIxM0MwNTA4MDAyNEE1NUNCODBFMDAwMjg3NjUKLToxMDY1NDAwMDI0MDQwMDhCOEY5MDAwMUMwMDExMzAyQjBBMDAwMzczNzEKLToxMDY1NTAwMEFGODYwMDI4M0MxOTA4MDA4RjM5NUNCODNDMUYwODAwNDIKLToxMDY1NjAwMDhGRkYwMDUwMjRDQ0ZGRkUwMzNGNzgyMTAxRjg3MDI0RjgKLToxMDY1NzAwMEFGNEUwMDI4M0MwNDA4MDA4Qzg0NUNCODNDMDkwODAwM0QKLToxMDY1ODAwMDhEMjkwMDUwMDA4OTY4MjEzMUE4MDA3RjAxMUEyODIxMzcKLToxMDY1OTAwMDAwQTc4MDIxQUUwNjAwRDhBRjkwMDBEMEFFMDAwMERDOEUKLToxMDY1QTAwMDBBMDAwM0MyQUUwQzAxMDhBRjYwMDA4NDNDMDUwODAwN0QKLToxMDY1QjAwMDhDQTU1Q0I4M0MwODA4MDA4RDA4MDA1MDI0MENGRjgwQjYKLToxMDY1QzAwMDNDMDIwMDBDMDBBOEEwMjEwMjhDNTgyNEFGNEIwMDI4RUMKLToxMDY1RDAwMDhFMUYwMDE0MzI4MzAwN0YwMDdBNTAyMTAxNDI3MDIxMDcKLToxMDY1RTAwMEFEREYwMEQ4OEUxOTAwMTRBRjhFMDBEMEFERDkwMERDMUQKLToxMDY1RjAwMDhFMTgwMDEwMjcwRkZGRkUwQTAwMDQxNUFEQ0YwMTA4MEEKLToxMDY2MDAwMDU0OEJGRTJGMjQwNTQwMDAwQTAwMDQ0NzI0MDUxMDAwODcKLToxMDY2MTAwMDBFMDAwMzM1MDAwMDAwMDAwQTAwMDNGODhGOTAwMDFDRjQKLToxMDY2MjAwMDhDNDY0NDJDM0MwNTZDNjIzNEIwNzk3MDNDMDEwODAwMDcKLToxMDY2MzAwMEFDMjA1Q0I4MTREMDAwMDgyNDA0MDAwMjk3ODgwMDM0MTEKLToxMDY2NDAwMDk3OEEwMDJDMDI4MDI4MjEwMTBBMzgyQjEwRTAwMDExQzMKLToxMDY2NTAwMDI0MDQwMDkyMjQwNDAwMDIwRTAwMEM5RDI0MDUwMTQwMzUKLToxMDY2NjAwMDNDMDEwODAwQUMyMjVDQjhBRjQyMDAyMDNDMDMwODAwQUIKLToxMDY2NzAwMDhDNjM1Q0I4MTA2MDAwMDUyNDA0MDA4MzBFMDAwODY4NzkKLToxMDY2ODAwMDAwMDAwMDAwMTA0MDAwMDkyNDA0MDA4MzNDMDUwODAwQkQKLToxMDY2OTAwMDI0QTU1Q0I4MEUwMDAyNUUwMDAwMDAwMDhGOTAwMDFDNzQKLToxMDY2QTAwMDAwMTEyMDJCMEEwMDAzNzNBRjg0MDAyODBFMDAwODZDMzEKLToxMDY2QjAwMDAwMDAwMDAwMEEwMDA1OTY4RjkwMDAxQzBFMDAwODcwNzQKLToxMDY2QzAwMDAwMDAwMDAwM0MwNTA4MDAyNEE1NUNCODBBMDAwNjNDNTgKLToxMDY2RDAwMDI0MDQwMDhCOEUwNDAwMDgwRTAwMDIzQjAwMDAwMDAwMjIKLToxMDY2RTAwMDBBMDAwNTJEQUU4MjAwMDgyNDA0MDAwNDBFMDAwQzlENTMKLToxMDY2RjAwMDI0MDUwMDMwMTQ0MDAwM0YwMDQwNDgyMThGOTAwMDFDQ0EKLToxMDY3MDAwMDBBMDAwNTdEMjQwNTAwODMwRTAwMDM0MDAyMDAyODIxQjUKLToxMDY3MTAwMDBBMDAwNEUyMDAwMDAwMDAzQzA1MDgwMDI0QTU1Q0I4NjMKLToxMDY3MjAwMDBFMDAwMjMwMjQwNDAwODc4RjkwMDAxQzBBMDAwNTQ5RTcKLToxMDY3MzAwMDAwMTExMDJCMEUwMDAyNTAwMjgwMjAyMTkzNzAwMDIzQzQKLToxMDY3NDAwMDAyODAyMDIxMzYwRDAwMTAwRTAwMDI1OUEzNkQwMDIzOTcKLToxMDY3NTAwMDhGOTAwMDFDMEEwMDA1NTIwMDAwMTgyMTkyMDUwMDBDQzEKLToxMDY3NjAwMDMwQkYwMDAxMTNFMDAwMDMwMDAwMDAwMDk2MDIwMDBFOUQKLToxMDY3NzAwMEE0ODIwMDJDOTIwQTAwMEMzMTQ4MDAwMjExMDBGRUYyQTMKLToxMDY3ODAwMDAwMDAyODIxOTYwQjAwMTI4RTAzMDAxNEE0OEIwMDFBMUYKLToxMDY3OTAwMDBBMDAwNTY5QUM4MzAwMUM4RjgzMDAzODhGODcwMDMwQTYKLToxMDY3QTAwMDEwNjdGRTg0MDAwMDIwMjEzQzA5MDgwMDI1Mjk1QzNDN0MKLToxMDY3QjAwMDAwMDMyMEMwMDA4OTMwMjE4Q0Q0MDAwMDEyODUwMDVFQzcKLToxMDY3QzAwMDI0NzgwMDAxMzMwMzAwMEY1NDY3RkZGQTAwMDMyMEMwNTAKLToxMDY3RDAwMDBBMDAwNTA0MDAwMDIwMjEzQzA1MDgwMDI0QTU1Q0I4M0YKLToxMDY3RTAwMDBFMDAwMjg3MjQwNDAwODI4RjkwMDAxQzBBMDAwNTQ5RDUKLToxMDY3RjAwMDAwMDAxMDIxM0MwQjAwMDgwMzRCMjAyMTI0MDMwMDUwMTMKLToxMDY4MDAwMDI0MEEwMDAxQUY0MjAwMjBBMDgzMDAwMEEwOEEwMDAxRkEKLToxMDY4MTAwMDhGODgwMDFDOTEwNzAwMDRBMDg3MDAxODhGODIwMDFDM0QKLToxMDY4MjAwMDkwNDUwMDA1QTA4NTAwMTk4Rjg2MDAxQzkwREYwMDA2QUEKLToxMDY4MzAwMEEwOUYwMDFBOEY5OTAwMUM5MzM4MDAwN0EwOTgwMDFCOTYKLToxMDY4NDAwMDhGOTQwMDFDOTI4RjAwMDhBMDhGMDAxQzhGOTAwMDFDNUEKLToxMDY4NTAwMDkyMEUwMDA5QTA4RTAwMUQ4RjhEMDAxQzkxQUMwMDBBQzUKLToxMDY4NjAwMEEwOEMwMDFFOEY4QjAwMUMzQzBDMDgwMDI1OEM1QzNDMEYKLToxMDY4NzAwMDkxNjMwMDBCM0MwQjA4MDAyNTZCNUMzOEEwODMwMDFGNjQKLToxMDY4ODAwMDhGOEEwMDFDOTE0ODAwMENBMDg4MDAyMDhGODcwMDFDNzQKLToxMDY4OTAwMDkwRTUwMDBEQTA4NTAwMjE4RjgyMDAxQzI0MDU0NjQ2NEUKLToxMDY4QTAwMDkwNDYwMDBFQTA4NjAwMjI4RjlGMDAxQzkzRjkwMDBGRDcKLToxMDY4QjAwMEEwOTkwMDIzOEY5ODAwMUM5MzE0MDAxMEEwOTQwMDI0MkEKLToxMDY4QzAwMDhGOEYwMDFDOTFGMDAwMTFBMDkwMDAyNThGOTAwMDFDNkMKLToxMDY4RDAwMDhGOEUwMDMwOEY5OTAwMzg5NjBEMDAxNDAwMEUxOEMwNkUKLToxMDY4RTAwMDI1QzgwMDAxQTQ4RDAwMjg5NjBBMDAxNjAwNkMzMDIxRUUKLToxMDY4RjAwMDAwNkJGODIxQTQ4QTAwMkE5NjA3MDAxODMxMDgwMDBGQkYKLToxMDY5MDAwMEE0ODcwMDJDQTQ4NTAwMkU4RTAyMDAxQ0FDQzkwMDAwQjgKLToxMDY5MTAwMEFGODgwMDMwMTExOTAwMDNBRkUyMDAwMDBBMDAwNTdEQzYKLToxMDY5MjAwMDAwMDAyODIxMjUwQzAwMDEzMTg0MDAwRjAwMDAyODIxREYKLToxMDY5MzAwMDBBMDAwNTdEQUY4NDAwMzgzQzA3MDgwMDI0RTc1QzM4NzYKLToxMDY5NDAwMDAwODc4MDIxMDAwMDIwMjFBQ0MwMDAwMDBBMDAwNTA0NUYKLToxMDY5NTAwMEFFMDAwMDAwM0MwNTA4MDAyNEE1NUNCODBBMDAwNjNDMTcKLToxMDY5NjAwMDI0MDQwMDg3OEUwNDAwMDQwRTAwMDIzQjAwMDAwMDAwOTcKLToxMDY5NzAwMDBBMDAwNUExQUU4MjAwMDgzMDg0RkZGRjMwQzYwMEZGODgKLToxMDY5ODAwMDhGNDIwMUI4MDQ0MEZGRkUwMDA2NDQwMDAxMDQzMDI1OTgKLToxMDY5OTAwMDNDMDcyMDAwMDBDNzIwMjUzQzAzMTAwMEFGNDAwMTgwQzkKLToxMDY5QTAwMEFGNDUwMTg0QUY0NDAxODgwM0UwMDAwOEFGNDMwMUI4NUMKLToxMDY5QjAwMDI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNDNDMDc2MDAwNzgKLToxMDY5QzAwMDI0MDYwMDAyMTA4MDAwMDYwMEEwODAyMTAwMTAxMDJCNzkKLToxMDY5RDAwMDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4MUYKLToxMDY5RTAwMDNDMDk2MDBFQUQyMDAwMzQ4Q0U1MjAxQzhGODIwMDFDMTkKLToxMDY5RjAwMDI0MDhGRkZDMDBBODE4MjRBQ0UzMjAxQzBFMDAwNkY1QjgKLToxMDZBMDAwMDhDNDUwMDBDMDAxMDEwMkI4RkJGMDAxNDhGQjAwMDEwQUQKLToxMDZBMTAwMDAzRTAwMDA4MjdCRDAwMTgzQzAyNjAwRTM0NDcwMTAwNjcKLToxMDZBMjAwMDI0MDkwMDE4Mjc0QTA0MDAwMDAwMDAwMDAwMDAwMDAwQUMKLToxMDZBMzAwMDAwMDAwMDAwM0MwNjAwNTAzNEMzMDIwMEFGNDQwMDM4QTAKLToxMDZBNDAwMEFGNDUwMDNDQUY0MzAwMzAwMTQwMTgyMThGNEIwMDAwQTAKLToxMDZBNTAwMDMxNjgwMDIwMTEwMEZGRkQyNDA2MDA3RjI0MDhGRkZGOUQKLToxMDZBNjAwMDhDNkMwMDAwMjRDNkZGRkYyNDYzMDAwNEFDRUMwMDAwMjMKLToxMDZBNzAwMDE0QzhGRkZCMjRFNzAwMDQwMDAwMDAwMDAwMDAwMDAwMzEKLToxMDZBODAwMDAwMDAwMDAwM0MwRjAwMjBBRjRGMDAzMDAwMDAwMDAwNkQKLToxMDZBOTAwMDI0QUQwMjAwMDFBNTcwMkIyNTI5RkZGRjAwOEUyMDIxQzcKLToxMDZBQTAwMDE1MjBGRkUxMDFBMDI4MjEwM0UwMDAwODAwMDAwMDAwRkMKLToxMDZBQjAwMDI3QkRGRkUwQUZCMTAwMTRBRkJGMDAxOEFGQjAwMDEwQUEKLToxMDZBQzAwMDNDMDU2MDBFOENBMjAwMzQwMDgwODgyMTE0NDAwMDA2MzIKLToxMDZBRDAwMDNDMDQ2MDAwOEM4NzIwMUMyNDA4RkZGQzAwRTgzMDI0NjQKLToxMDZBRTAwMDM0QzMwMDAxQUM4MzIwMUM4RjhCMDAxQzI0MDkwMDAxREYKLToxMDZBRjAwMEFDQTkwMDM0OTU2OTAwMDI4RDY1MDAxNDhENzAwMDBDRkUKLToxMDZCMDAwMDJEMjQwMDgxOEQ2NzAwMDQ4RDY2MDAwODEwODAwMDA3MjkKLToxMDZCMTAwMDhENkEwMDEwMkQyQzAwMDQxNTgwMDAwRTMwQ0UwMDA3NjkKLToxMDZCMjAwMDMxMkQwMDAzMTFBMDAwMEIwMDAwMDAwMDI0MDQwMDhCOTUKLToxMDZCMzAwMDAyMDAyODIxMEUwMDA2RjUyNDA2MDAwMzAwMTExMDJCODgKLToxMDZCNDAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4NTEKLToxMDZCNTAwMDI3QkQwMDIwMTVDMEZGRjYyNDA0MDA4QjNDMDMwMDIwNTUKLToxMDZCNjAwMEFGNDMwMDMwMDAwMDAwMDAyNDAyMDAwMUFGODIwMDE0OTcKLToxMDZCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDMUYwMTUwNjkKLToxMDZCODAwMDAxM0ZDODI1MjUzODAwMDMzQzBGNjAwRUFGNDcwMDM4OTEKLToxMDZCOTAwMDAwMTgxODgyQUY0NjAwM0MzNUU4MDAzQ0FGNTkwMDMwODEKLToxMDZCQTAwMDI3NDcwNDAwOEY0NDAwMDAzMDg2MDAyMDEwQzBGRkZERkUKLToxMDZCQjAwMDAwMDAwMDAwMTA2MDAwMDgyNDY2RkZGRjI0MDNGRkZGQjAKLToxMDZCQzAwMDhDRUIwMDAwMjRDNkZGRkYyNEU3MDAwNEFEMEIwMDAwOUYKLToxMDZCRDAwMDE0QzNGRkZCMjUwODAwMDQzQzA4NjAwRUFEMDkwMDM4MTMKLToxMDZCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDMDcwMDIwNDIKLToxMDZCRjAwMEFGNDcwMDMwMDAwMDAwMDAwRTAwMDcxRDAxNDAyMDIxQkIKLToxMDZDMDAwMDAyMDAyODIxMDAwMDIwMjEwRTAwMDZGNTI0MDYwMDAzQzIKLToxMDZDMTAwMDAwMTExMDJCOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMUYKLToxMDZDMjAwMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZEOEFGQjIwMDE4NDEKLToxMDZDMzAwMDMwOTJGRkZGQUZCMTAwMTRBRkJGMDAyMEFGQjMwMDFDMTQKLToxMDZDNDAwMEFGQjAwMDEwMTI0MDAwMkMwMDAwODgyMTBBMDAwN0I1RTgKLToxMDZDNTAwMDI0MTMwMDAxNTBCMzAwNDA4Q0U1MDAwQzAwMDAwMDBEMkYKLToxMDZDNjAwMDI2MzkwMDAxMzMzMUZGRkYyNEY4MDAyMDAyMzIzODJCOEYKLToxMDZDNzAwMDEwRTAwMDIxQUY5ODAwMUM4RjgyMDAxNDE0NDAwMDFFMDkKLToxMDZDODAwMDhGODcwMDFDM0MwNjcwMDAzQzAzMjAwMDhDRTQwMDAwNTEKLToxMDZDOTAwMDAwODYyODI0MTRBMzAwMTg4Rjg1MDAzQzAwMDQ0NDAyQjkKLToxMDZDQTAwMDNDMDk4MDAwMDA4OTgwMjQxNEEwRkZFQTMxMDYwMEZGMUYKLToxMDZDQjAwMDI0MEEwMDAyMTBDQTAwMkUyOENCMDAwMzExNjAwMDE2MUYKLToxMDZDQzAwMDI0MEMwMDAzMTREM0ZGRTcyNjM5MDAwMTAyMDAyODIxMTkKLToxMDZDRDAwMDBFMDAwNzAzMjQwNDAwMDE4Rjg3MDAxQ0FGODIwMDNDRDQKLToxMDZDRTAwMDI2MzkwMDAxMzMzMUZGRkYyNEY4MDAyMDAyMzIzODJCMEYKLToxMDZDRjAwMDE0RTBGRkUxQUY5ODAwMUMwMjIwMTAyMThGQkYwMDIwOUMKLToxMDZEMDAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjkKLToxMDZEMTAwMDAzRTAwMDA4MjdCRDAwMjgxMENDMDAxQTI0MEQwMDA0NTEKLToxMDZEMjAwMDE0Q0RGRkQwMjYzOTAwMDEzMDhFRkZGRjAwMEUxOUMwQjAKLToxMDZEMzAwMDhGNDQwMUI4MDQ4MEZGRkUzQzBGMTAwMDNDMTAyMDA0N0IKLToxMDZENDAwMEFGNDMwMTgwQUY0MDAxODRBRjUwMDE4OEFGNEYwMUI4MUQKLToxMDZENTAwMDBBMDAwN0IwMjYzOTAwMDEwRTAwMDZGNTI0MDQwMDg0NUQKLToxMDZENjAwMDE2MDBGRkJGOEY4NzAwMUMwQTAwMDdBRkFGODAwMDNDRjIKLToxMDZENzAwMDAyMDAyODIxMEUwMDA3MDMwMDAwMjAyMTBBMDAwN0NFOTAKLToxMDZEODAwMDhGODcwMDFDMEUwMDA3NDMwMjAwMjAyMThGODcwMDFDMDQKLToxMDZEOTAwMDBBMDAwN0NGQUY4MjAwM0MzMDgyRkZGRjE0NDAwMDAzOUYKLToxMDZEQTAwMDAwMDAxODIxMDAwNDI0MDIyNDAzMDAxMDMwODUwMEZGOTUKLToxMDZEQjAwMDE0QTAwMDA1MzA4NzAwMEYyNDY2MDAwODAwMDQyMjAyOUEKLToxMDZEQzAwMDMwQzMwMEZGMzA4NzAwMEYxNEUwMDAwNTMwODkwMDAzNTYKLToxMDZERDAwMDI0NjgwMDA0MDAwNDIxMDIzMTAzMDBGRjMwODkwMDAzMEQKLToxMDZERTAwMDE1MjAwMDA1Mzg4QjAwMDEyNDZBMDAwMjAwMDQyMDgyNkYKLToxMDZERjAwMDMxNDMwMEZGMzg4QjAwMDEzMTY0MDAwMTEwODAwMDAyMzQKLToxMDZFMDAwMDI0NkMwMDAxMzE4MzAwRkYwM0UwMDAwODAwNjAxMDIxQzIKLToxMDZFMTAwMDMwOEJGRkZGMDAwQjM5NDIzMEU2MDBGRjNDMDkwODAwRDEKLToxMDZFMjAwMDI1Mjk1QkI4MDAwNjQwODAwMTA5NjAyMThEODcwMDAwOUMKLToxMDZFMzAwMDMxNjQwMDFGMjQwQTAwMDEwMDhBMTgwNDMwQTUwMEZGRjUKLToxMDZFNDAwMDAwRTMyMDI1MTRBMDAwMDIwMDAzMTAyNzAwRTIyMDI0MDQKLToxMDZFNTAwMDI0MEYwMDAxMDBDRjcwMDQwMTA5NjgyMTAwMEUyODI3Q0IKLToxMDZFNjAwMDE0ODAwMDA1QURBNDAwMDA4Rjg2MDAwQzAwQTYxMDI0M0QKLToxMDZFNzAwMDAzRTAwMDA4QUY4MjAwMEM4Rjg4MDAwQzAxQzgxMDI1QzkKLToxMDZFODAwMDAzRTAwMDA4QUY4MjAwMEMzQzA2MDAxRjNDMDM2MDAwREEKLToxMDZFOTAwMDMwODRGRkZGMzRDNUZGODAyNDAyMDAyMEFDNjAyMDA4NEUKLToxMDZFQTAwMEFDNjAyMDBDQUM2MDIwMTBBQzY1MjAxNEFDNjQyMDE4RTEKLToxMDZFQjAwMEFDNjIyMDAwMDAwMDAwMDAwMDAwMDAwMDAzRTAwMDA4QjkKLToxMDZFQzAwMDAwMDAwMDAwMjdCREZGRTgyNDAyRkZGRkFGQkYwMDEwNTUKLToxMDZFRDAwMEFGODIwMDBDMDAwMDIwMjEzQzA2MDgwMDI0QzY1QkI4RUQKLToxMDZFRTAwMDI0MDVGRkZGMjQ4OTAwMDEwMDA0NDA4MDMxMjRGRkZGQjYKLToxMDZFRjAwMDAxMDYxODIxMkM4NzAwMjAxNEUwRkZGQUFDNjUwMDAwODEKLToxMDZGMDAwMDBFMDAwODM5MDAwMDIwMjEyNDAyMDAwMTNDMDQ2MDAwMkEKLToxMDZGMTAwMDI0MDUwMDIwQUM4MjIwMThBQzg1MjAwMDAwMDAwMDAwNzEKLToxMDZGMjAwMDAwMDAwMDAwMDAwMDAwMDAyNDRBMDAwMTMxNDJGRkZGODEKLToxMDZGMzAwMDJDNDYwNDAwMTRDMEZGRjc4RkJGMDAxMDAzRTAwMDA4QzgKLToxMDZGNDAwMDI3QkQwMDE4OEY4MzAwMDgyQzYyMDQwMDAzRTAwMDA4QUUKLToxMDZGNTAwMDM4NDIwMDAxOEY4MzAwMDgyNDYyMDAwMTAzRTAwMDA4MkEKLToxMDZGNjAwMEFGODIwMDA4OEY4MzAwMDgyNDYyRkZGRjAzRTAwMDA4NUYKLToxMDZGNzAwMEFGODIwMDA4MjdCREZGRTBBRkIxMDAxNEFGQkYwMDE4MUIKLToxMDZGODAwMEFGQjAwMDEwOEY2QjAwMzAzQzA2NjAwMDAwODA4ODIxOUQKLToxMDZGOTAwMEFDQ0IyMDA4OEY2QTAwMkMzQzAyODAwMDI0MDMwMDA4NDAKLToxMDZGQTAwMEFDQ0EyMDBDOTc2OTAwM0E5NzY4MDAzODAwMDkyQzAwOTkKLToxMDZGQjAwMDMxMDdGRkZGMDBBNzIwMjVBQ0M0MjAxMEFDQzIyMDE0NkQKLToxMDZGQzAwMEFDQzMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMDZGRDAwMDNDMDM2MDAwOEM2RDIwMDAzMUFDMDAwODE1ODBGRkY5ODcKLToxMDZGRTAwMDAwMDAwMDAwOEM2RTIwMTQwNUMwMDAyMDAwMDAwMDAwOEUKLToxMDZGRjAwMDBFMDAwN0ZEOEY4NDAwMEMwMDAyNDA4MDNDMDkwODAwNTEKLToxMDcwMDAwMDI1Mjk1QkI4MDEwOTM4MjE4Q0U0MDAwMDBFMDAwN0ZEM0EKLToxMDcwMTAwMDAwMDI4MTQwMDIwMjIwMjEzMDkwRkZGRjAyMDAyMDIxNjcKLToxMDcwMjAwMDBFMDAwODFCMDAwMDI4MjEzQzBDODAwMDAyMkM1ODI1NzMKLToxMDcwMzAwMDMyMTBGRkZGM0MxMTYwMDAyNDBBMDAyMEFFMkIyMDE0MDgKLToxMDcwNDAwMEFFMzAyMDE4QUUyQTIwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMDcwNTAwMDAwMDAwMDAwMDIwMDEwMjE4RkJGMDAxODhGQjEwMDE0NDMKLToxMDcwNjAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDhDNjYyMDE0QkMKLToxMDcwNzAwMDNDMDIwMDFGMzQ0M0ZGODAzQzFGRkZFODAwQzNDMDI0RDQKLToxMDcwODAwMDM3RjkwODAwMDMxOTgwMjEwMDEwNzlDMjNDMEM4MDAwRjgKLToxMDcwOTAwMDAyMkM1ODI1MzFGMEZGRkYzQzExNjAwMDI0MEEwMDIwMkIKLToxMDcwQTAwMEFFMkIyMDE0QUUzMDIwMThBRTJBMjAwMDAwMDAwMDAwQzUKLToxMDcwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMTAyMThGQkYwMDE4MzcKLToxMDcwQzAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMkUKLToxMDcwRDAwMDI3QkRGRkU4QUZCMDAwMTAzNDAyRkZGRjMwOTBGRkZGODQKLToxMDcwRTAwMEFGQkYwMDE0MTIwMjAwMDYwMjAwMjAyMTBFMDAwODM5NzIKLToxMDcwRjAwMDAwMDAwMDAwMDIwMDIwMjEwRTAwMDgxQjI0MDUwMDAxRjIKLToxMDcxMDAwMDhGODQwMDA4OEZCRjAwMTQ4RkIwMDAxMDI0ODNGRkZGMEUKLToxMDcxMTAwMDI3QkQwMDE4MDNFMDAwMDhBRjgzMDAwODAwMDQzOUMyNEYKLToxMDcxMjAwMDMwRTYwMDNGMDAwNDNCNDIwMDA3MTg0MDI0MDIxMDAwRjQKLToxMDcxMzAwMDJDQzQwMDIwMjRDOEZGRTBBRjQyMDAyQzI0NjMwMDAxQ0YKLToxMDcxNDAwMDE0ODAwMDAzMzBBOTAwRkYwMDA3MTg0MDMxMDYwMEZGM0IKLToxMDcxNTAwMDAwMDM2MDgwMjQwODAwMDEwMTlBNTgyMTNDMEEwMDBFQjcKLToxMDcxNjAwMDAwQzgyODA0MDE2QTM4MjExMTIwMDAwNTAwMDUzMDI3RDUKLToxMDcxNzAwMDhDRTkwMDAwMDEyNTMwMjUwM0UwMDAwOEFDRTYwMDAwQTIKLToxMDcxODAwMDhDRUUwMDAwMDFDNjY4MjQwM0UwMDAwOEFDRUQwMDAwQUUKLToxMDcxOTAwMDI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDNDMDQ2MDAwOTMKLToxMDcxQTAwMDhDODUwODA4MzQwM0YwMDAzMEEyRjAwMDUwNDMwMDA2M0MKLToxMDcxQjAwMDI0MDIwMDAxOEM4NzA4MDgzNDA0RTAwMDMwRTZGMDAwNjcKLToxMDcxQzAwMDEwQzQwMDFFMjQwMjAwMDJBRjgyMDA0MDNDMTA2MDAwODgKLToxMDcxRDAwMDNDMEEwMjAwQUUwQTA4MTQyNDA5MTAwMDNDMDgwMDBFMDQKLToxMDcxRTAwMDhFMDM0NDAwMDM0ODIwMjFBRjQ5MDAyQzI0MDUwMTIwRDAKLToxMDcxRjAwMDBFMDAwQ0UzMDAwMDMwMjE4RjgzMDA0MDEwNjAwMDA0N0IKLToxMDcyMDAwMDNDMDIxNjkxMjQwQjAwMDExMDZCMDAwRTNDMDIzRDZDRjkKLToxMDcyMTAwMDM0NEYwMDkwQUUwRjQ0MDg4RkJGMDAxNDhGQjAwMDEwQTEKLToxMDcyMjAwMDNDMEM2MDAwMjQwRTEwMDAzQzBEMDIwMDI3QkQwMDE4MkQKLToxMDcyMzAwMEFEOEU0NDIwMDNFMDAwMDhBRDhEMDgxMDBBMDAwOTBBNTUKLToxMDcyNDAwMEFGODAwMDQwM0MwMjE4REEzNDRGMDA5MEFFMEY0NDA4ODMKLToxMDcyNTAwMDhGQkYwMDE0OEZCMDAwMTAzQzBDNjAwMDI0MEUxMDAwOTMKLToxMDcyNjAwMDNDMEQwMjAwMjdCRDAwMThBRDhFNDQyMDAzRTAwMDA4NEQKLToxMDcyNzAwMEFEOEQwODEwMEEwMDA4REUyNDA1MDAwMTBBMDAwOERFQjIKLToxMDcyODAwMDAwMDAyODIxM0MwODA4MDAyNTA4NUZDNDI0MDRGRkZGRjMKLToxMDcyOTAwMDAxMDAxODIxMjQwMjAwMUUyNDQyRkZGRkFDNjQwMDAwRkMKLToxMDcyQTAwMDA0NDFGRkZEMjQ2MzAwMDQzQzA3MDgwMDI0RTc2MDQwMUMKLToxMDcyQjAwMDhDRTVGRkZDMjQwNDAwMUMyNDA2MDAwMTMwOEEwMDFGMUEKLToxMDcyQzAwMDAxNDY0ODA0MjQ4NDAwMDEwMDA5MTAyNzJDODMwMDIwNzMKLToxMDcyRDAwMDE0NjBGRkZBMDBBMjI4MjRBQ0U1RkZGQzNDMDU2NjY2QkEKLToxMDcyRTAwMDM0QTQ2MTZFM0MwNjA4MDAyNEM2NjEwMEFGODQwMDU4RDcKLToxMDcyRjAwMEFGODgwMDlDMjQwNEZGRkYwMEMwMTgyMTI0MDIwMDFGNTcKLToxMDczMDAwMDI0NDJGRkZGQUM2NDAwMDAwNDQxRkZGRDI0NjMwMDA0M0QKLToxMDczMTAwMDNDMDc2NjY2M0MwNTA4MDAyNEE1NjBDMEFGODYwMDQ4QUYKLToxMDczMjAwMDM0RTY2MTZFQUY4NjAwOTgyNDA0RkZGRjAwQTAxODIxQTgKLToxMDczMzAwMDI0MDIwMDBGMjQ0MkZGRkZBQzY0MDAwMDA0NDFGRkZENjMKLToxMDczNDAwMDI0NjMwMDA0M0MwQjY2NjYzQzA2MDgwMDI0QzY2MDQwQ0IKLToxMDczNTAwMDM1Njg2MTZFQUY4NTAwQTRBRjg4MDA3MDI0MDRGRkZGMUMKLToxMDczNjAwMDAwQzAxODIxMjQwMjAwMUYyNDQyRkZGRkFDNjQwMDAwNkIKLToxMDczNzAwMDA0NDFGRkZEMjQ2MzAwMDQzQzBENjY2NjNDMEEwODAwREUKLToxMDczODAwMDI1NEE2MTgwMzVBQzYxNkVBRjg2MDA5MEFGOEMwMDVDQTEKLToxMDczOTAwMDI0MDRGRkZGMDE0MDE4MjEyNDAyMDAwMzI0NDJGRkZGQzAKLToxMDczQTAwMEFDNjQwMDAwMDQ0MUZGRkQyNDYzMDAwNDNDMDkwODAwQjQKLToxMDczQjAwMDI1Mjk2MTkwOEQyN0ZGRkMyNDA0MDAwNjI0MDUwMDAxODcKLToxMDczQzAwMDMwOTkwMDFGMDMyNUMwMDQyNDg0MDAwMTAwMTg3ODI3ODkKLToxMDczRDAwMDJDOEUwMDIwMTVDMEZGRkEwMEVGMzgyNEFEMjdGRkZDRUIKLToxMDczRTAwMDNDMDk2NjY2MjQwMzA0MDAyNDA0MDNEQzI0MDUwMjAwMkYKLToxMDczRjAwMDI0MDYwMDY2MzUyMjYxNkUzQzA4MDgwMDI1MDg1Q0M0M0UKLToxMDc0MDAwMEFGODIwMDc0QUY4MzAwNDRBRjgzMDA2Q0FGODMwMDUwNDEKLToxMDc0MTAwMEFGODMwMDg0QUY4QTAwOENBRjg0MDA2NEFGODUwMDRDREEKLToxMDc0MjAwMEFGODYwMDU0QUY4NDAwNzhBRjg1MDA2MEFGODYwMDgwREYKLToxMDc0MzAwMDAxMDAxODIxMjQwMjAwMDIyNDQyRkZGRkFDNjAwMDAwN0EKLToxMDc0NDAwMDA0NDFGRkZEMjQ2MzAwMDQyNDA0MDAwMzI0MDMwMDBDMTIKLToxMDc0NTAwMDNDMEEwODAwMjU0QTVDRDBBRjhBMDA2ODBBMDAwOUIxREUKLToxMDc0NjAwMDI0MDVGRkZGMDAwNDE4ODAyNDg0MDAwMTAwNjg1ODIxQ0YKLToxMDc0NzAwMDJDODcwMEMwMTRFMEZGRkJBRDY1MDAwMDNDMEU2NjY2ODMKLToxMDc0ODAwMDM1Q0Q2MTZFMjQwQzE3QTAyNDA4MTgwMEFGOEQwMDg4M0MKLToxMDc0OTAwMEFGOEMwMDk0MDNFMDAwMDhBRjg4MDA3QzI0ODQwMDdGNTgKLToxMDc0QTAwMDAwMDQyMUMyMDAwMDQwMjEwMDAwMzAyMTAwMDAzODIxRUEKLToxMDc0QjAwMDAwMDAyODIxMEEwMDA5QzhBRjg0MDBBMDEwNjAwMDA2NUYKLToxMDc0QzAwMDI0RTcwMDAxMDBDNDMwMjEyNEE1MDAwMTJDQzIwQkY1RTMKLToxMDc0RDAwMDE0NDBGRkZBMkNBMzAwNjYzQzA5MDgwMDI1Mjk2MTgwQUUKLToxMDc0RTAwMDAxMjAxODIxMjQwMjAwMDMyNDQyRkZGRkFDNjAwMDAwQTkKLToxMDc0RjAwMDA0NDFGRkZEMjQ2MzAwMDQxMEUwMDAxQTI0RTNGRkZGQjEKLToxMDc1MDAwMDAwMDMyOTQyMTBBMDAwMEEwMDAwMjAyMTI0MDZGRkZGRUEKLToxMDc1MTAwMDNDMDMwODAwMjQ2MzYxODAyNDg0MDAwMTAwODU1MDJCMTMKLToxMDc1MjAwMEFDNjYwMDAwMjUwODAwMDExNTQwRkZGQjI0NjMwMDA0NDEKLToxMDc1MzAwMDMwRTIwMDFGMTA0MDAwMDgwMDA4Njg4MDI0MEMwMDAxQTEKLToxMDc1NDAwMDAwNEMzODA0MDAwODU4ODAwMTY5MjgyMTI0RTZGRkZGMTgKLToxMDc1NTAwMDAzRTAwMDA4QUNBNjAwMDAwMUE5NDAyMTI0MDlGRkZGQjgKLToxMDc1NjAwMEFEMDkwMDAwMDNFMDAwMDgwMDAwMDAwMEFGNDQwMDI4NUYKLToxMDc1NzAwMDNDMDQwMDBDMDM0NDIwMjEwMDA1Mjg4MjBBMDAwQ0UzOEYKLToxMDc1ODAwMDAwMDAzMDIxMDAwNDIxODAzQzAzNjAwMEFDNjQxMDA4M0UKLToxMDc1OTAwMDAwMDAwMDAwMDAwNTI5ODBBQzY1MTAwQzAwMDAwMDAwMTAKLToxMDc1QTAwMDAzRTAwMDA4OEM2MjEwMEMyN0JERkZFODAwODAyODIxNTIKLToxMDc1QjAwMDI0MDQwMDM4QUZCRjAwMTQwRTAwMDlGOEFGQjAwMDEwNkIKLToxMDc1QzAwMDI0MDQwRTAwQUY0NDAwMjgzQzEwMDAwQzAzNTAyMDIxN0UKLToxMDc1RDAwMDI0MDUwMDEwMEUwMDBDRTMwMDAwMzAyMTAzNTAxMDIxQTAKLToxMDc1RTAwMEFDNDAwMDAwQUM0MDAwMDQyNDA0MDAzODhGQkYwMDE0RkQKLToxMDc1RjAwMDhGQjAwMDEwMjQwNTNGRkYyN0JEMDAxODBBMDAwOUY4Q0UKLToxMDc2MDAwMDhDNDMwMDAwMDAwNDIxODAzQzAzNjAwMEFDNjQxMDA4M0YKLToxMDc2MTAwMDAwMDAwMDAwOEM2MjEwMEMwM0UwMDAwODAwMDIxMTgyRTAKLToxMDc2MjAwMDI3QkRGRkM4QUZCNDAwMjA4Rjk0MDA2OEFGQkUwMDMwMDQKLToxMDc2MzAwMEFGQjcwMDJDQUZCNjAwMjgwMDAwQjgyMTAwODBCMDIxMDEKLToxMDc2NDAwMDI0MUUwMEMwQUZCRjAwMzRBRkI1MDAyNEFGQjMwMDFDOTAKLToxMDc2NTAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMDBBMDAwQTM1ODUKLToxMDc2NjAwMEFGQTUwMDNDNTA0MDAwMDE4Rjk0MDA2ODI3REVGRkZGNkIKLToxMDc2NzAwMDEzQzAwMDI4MjY5NDAwMDQ4RTkyMDAwMDNDMDMwODAwRUEKLToxMDc2ODAwMDI0NjM1RkMwMTI0MEZGRjcwMjgzMTAyQjNDMDQwODAwMDQKLToxMDc2OTAwMDI0ODQ1Q0M0MDI4NDEwMjMwMDAyQThDMDAwMDA5ODIxNDYKLToxMDc2QTAwMDBBMDAwQTQ0MjQxMTAwMDEwMDExODg0MDEyMjAwMDI2MUIKLToxMDc2QjAwMDAwMDAwMDAwMDJCMzgwMjEwMjUxMjgyNDAyMDAyMDIxOTIKLToxMDc2QzAwMDEwQTBGRkY5MjY3MzAwMDEwRTAwMEEwMTAwMDAwMDAwNUYKLToxMDc2RDAwMDAwMTY2ODQwMzJFQzAwMDEwMUFDMjAyMTBFMDAwOUY4RDAKLToxMDc2RTAwMDAyMDAyODIxOEY4OTAwOTQyNkY3MDAwMThGQTYwMDNDMTQKLToxMDc2RjAwMDNBRUIwMDAxMzE2QTAwMDEyNTI4RkZGRjAwMTEzODI3MEQKLToxMDc3MDAwMDAyQ0FCMDIxQUY4ODAwOTQxNkU2RkZFNzAyNDc5MDI0MzIKLToxMDc3MTAwMEFFOTIwMDAwMDJFMDEwMjE4RkJGMDAzNDhGQkUwMDMwMTcKLToxMDc3MjAwMDhGQjcwMDJDOEZCNjAwMjg4RkI1MDAyNDhGQjQwMDIwQUYKLToxMDc3MzAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwRUYKLToxMDc3NDAwMDAzRTAwMDA4MjdCRDAwMzgzQzBFMDgwMDI1Q0U1RkMwQ0UKLToxMDc3NTAwMDAyOEUxMDJCMEEwMDBBMzBBRTkyMDAwMDI3QkRGRkQ4MUYKLToxMDc3NjAwMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyMEFGQjMwMDFDMkEKLToxMDc3NzAwMEFGQjIwMDE4MDBBMDg4MjExMEEwMDAxRjAwMDQ4MDQwQjQKLToxMDc3ODAwMDNDMTMwODAwMjY3MzVDQzQwQTAwMEE3RDI0MTIwMDAxMjEKLToxMDc3OTAwMDEyMjAwMDE5MjYxMDAwMDEwRTAwMEExODAyMDAyMDIxRjQKLToxMDc3QTAwMDAwMDIzMTQyMjQ0NEZGQTAwMDA2MTg4MDMwNDUwMDFGMkIKLToxMDc3QjAwMDJDODIxN0ExMDA3MzE4MjEyNjMxRkZGRjEwNDBGRkY0MUYKLToxMDc3QzAwMDAwQjIzMDA0OEM2OTAwMDAwMjAwMjAyMTI0MDUzRkZGMzQKLToxMDc3RDAwMDAxMjY0MDI0MTUwMEZGRUUwMTI2MzgyNTBFMDAwOUY4ODkKLToxMDc3RTAwMEFDNjcwMDAwOEY4QTAwOTQyNjEwMDAwMTI1NDcwMDAxMzUKLToxMDc3RjAwMDE2MjBGRkU5QUY4NzAwOTQ4RkJGMDAyMDhGQjMwMDFDRDUKLToxMDc4MDAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4OTEKLToxMDc4MTAwMDI3QkQwMDI4OEY4NTAwOUMwMDgwNTgyMTAwMDA0MDIxNTIKLToxMDc4MjAwMDAwMDA0ODIxMjQwQTAwMUYzQzBDMDgwMDI1OEM2MDNDMDUKLToxMDc4MzAwMDNDMEQwODAwMjVBRDVGQzQ4Q0E2MDAwMDUwQzAwMDE0QUMKLToxMDc4NDAwMDAwMDA0MDIxMDBBRDEwMjMwMDAyMzhDMDI0MDMwMDAxRDUKLToxMDc4NTAwMDBBMDAwQUI2MDAwMDIwMjExNTAwMDAwMzAwRTQxMDIxRjAKLToxMDc4NjAwMDI0NDgyMDI0MDAwMDQ4MjEyNTI5MDAwMTUxMkIwMDEzMjEKLToxMDc4NzAwMDI1MDZERkRDMTA2MDAwMDYyNDg0MDAwMTAwQzM3MDI0QUMKLToxMDc4ODAwMDE1QzBGRkY1MDAwMzE4NDAwQTAwMEFCNDAwMDA0MDIxQUIKLToxMDc4OTAwMDEwQUMwMDI2MjRBMzAwMDQwMDYwMjgyMTI1NEFGRkZGMjUKLToxMDc4QTAwMDE1NDBGRkU1QUY4NTAwOUM1MTJCMDAwNDI1MDZERkRDNjkKLToxMDc4QjAwMDAwMDA0MDIxMDNFMDAwMDgwMTAwMTAyMTAwMDY2MTQyQTEKLToxMDc4QzAwMDMwQzUwMDFGMDAwQzUwODAzQzA3MDgwMDI0RTc1RkM0NEYKLToxMDc4RDAwMDI0MDQwMDAxMDE0NzMwMjExMTIwMDAwRjAwQTQyMDA0REUKLToxMDc4RTAwMDNDMDUwODAwMjRBNTYwNDAxNDgwMDAwNTI1MjlGRkZGMDEKLToxMDc4RjAwMDI0QzYwMDA0MTBDNTAwMTEwMDAwMDAwMDI0MDQwMDAxOEIKLToxMDc5MDAwMDhDQ0YwMDAwMDAwNEMwMjcwMDA0MjA0MDAxRjg2ODI0NDgKLToxMDc5MTAwMDE1MjBGRkY1QUNDRDAwMDA4Rjk5MDA3ODAxMDAxMDIxRjMKLToxMDc5MjAwMDAzMkI0ODIzMDNFMDAwMDhBRjg5MDA3ODNDMDUwODAwREEKLToxMDc5MzAwMDI0QTU1RkM0MEEwMDBBQkUwMDAwNDAyMTNDMDYwODAwREUKLToxMDc5NDAwMDI0QzY1RkM0MEEwMDBBRDcyNDA0MDAwMTMwODgwMEZGNUYKLToxMDc5NTAwMDI0MDIwMDAyMTEwMjAwMEEyNDAzMDAwMzExMDMwMDVDNDgKLToxMDc5NjAwMDhGODkwMEE0MjQwNDAwMDQxMTA0MDA1RjI0MDUwMDA1OEQKLToxMDc5NzAwMDExMDUwMDY3MDAwMDE4MjEwM0UwMDAwODAwNjAxMDIxRDUKLToxMDc5ODAwMDhGODkwMDQ4M0MwQzA4MDAyNThDNjEwMDNDMDQwODAwRUQKLToxMDc5OTAwMDI0ODQ2MTgwMjQwMzAwMjAxMDYwMDAwRjAwMDA1ODIxMUYKLToxMDc5QTAwMDI0MEQwMDAyMjQwRTAwMDMzQzBGMDgwMDI1RUY2MTAwQTcKLToxMDc5QjAwMDhEMjcwMDAwMTRFMDAwMEIzMEY5RkZGRjI1MjkwMDA0OUIKLToxMDc5QzAwMDAxMjRDMDJCNTMwMDAwMDEwMTgwNDgyMTI0NjNGRkZGRTQKLToxMDc5RDAwMDU0NjBGRkY4OEQyNzAwMDAwMTYwMTgyMTAzRTAwMDA4QzMKLToxMDc5RTAwMDAwNjAxMDIxMTMyMDAwMzIzQzA1MDBGRjMwRTIwMEZGNTAKLToxMDc5RjAwMDAwNDAzMDIxMTA0MDAwNDIwMDAwNTAyMTI0MDUwMDAxQzkKLToxMDdBMDAwMDAwMDAyMDIxMDAwNUM4NDAwMEE2QzAyNDE3MDAwMDAzODQKLToxMDdBMTAwMDMzMjUwMEZGMTRBMEZGRkIyNDg0MDAwMTAxMkNDMDIzQTgKLToxMDdBMjAwMDAwMTgyOEMwMDBBQTYwMjEwMDhDNTAyMTMxNDQwMDFGOUEKLToxMDdBMzAwMDI0MEMwMDAxMDA4QzE4MDQwMDAzMTAyNzAwRTIzMDI0RkQKLToxMDdBNDAwMDExMEQwMDQxQUQyNjAwMDAxMTBFMDA0QzAwMEExODQwMzcKLToxMDdBNTAwMDExMEQwMDM2OEY4NzAwNkM1MTBFMDA1NjhGOEMwMDYwMjAKLToxMDdBNjAwMDI0MEQwMDA0MTEwRDAwNUE4RjhFMDA4NDI0MEUwMDA1OTEKLToxMDdBNzAwMDE1MEVGRkRBMDE2MDE4MjEyNDBCMTQzMDExNDAwMDA2QTYKLToxMDdBODAwMDAwMDAxODIxOEY4NDAwQTAyNDYzMDAwMTAwNkE0MDJCQUQKLToxMDdBOTAwMDE1MDBGRkZEMDE2NDU4MjE4RjhBMDA4MEFGODkwMDhDOUEKLToxMDdBQTAwMDAxNjAxODIxMjU0OUZGRkYwQTAwMEIwRUFGODkwMDgwRjUKLToxMDdBQjAwMDAwRTUyMDI0MDAwNzM2MDIxMDgwRkZEMDI0MEEwMDE4QjkKLToxMDdBQzAwMDAwMDc1NDAyMzE0NjAwRkYwQTAwMEIxNjI0MEEwMDEwN0EKLToxMDdBRDAwMDNDMEMwODAwMjU4QzYwQzAzQzA0MDgwMDI0ODQ2MTAwMzQKLToxMDdBRTAwMDBBMDAwQUZEMjQwMzAwMTAzQzBDMDgwMDI1OEM2MDQwQUQKLToxMDdBRjAwMDNDMDQwODAwMjQ4NDYwQzAwQTAwMEFGQzhGODkwMDkwQkUKLToxMDdCMDAwMDAwMDcxQTAyMzA2NjAwRkYwQTAwMEIxNjI0MEEwMDA4NUMKLToxMDdCMTAwMDhGODkwMDhDM0MwQzA4MDAyNThDNjE4MDNDMDQwODAwOTcKLToxMDdCMjAwMDI0ODQ2MTkwMEEwMDBBRkQyNDAzMDAwNDAwMEE0MDgwQjYKLToxMDdCMzAwMDI1MEIwMDMwMjRFNkZGRkYwMTYwMTgyMUFGODkwMDQ4QzMKLToxMDdCNDAwMDBBMDAwQjBFQUY4NjAwNkMwMDBBQzk4MjAwMTk3ODgwMEIKLToxMDdCNTAwMDNDMDcwODAwMjRFNzYwQzAwMUU3MjAyMTAwMEExODQyMjIKLToxMDdCNjAwMDhDOEYwMDAwMzA3OTAwMUYwMzJDMzgwNDAwMDdDMDI3RDkKLToxMDdCNzAwMDAxRjg2MDI0MEEwMDBCMkJBQzhDMDAwMDAwMDMzMTQyOUEKLToxMDdCODAwMDAwMDYyODgwMDBBRjI4MjEzMDYyMDAxRjhDQjgwMDAwNUEKLToxMDdCOTAwMDI0NjMwMDAxMDA0Q0M4MDQwMDAzMjE0MjAwMTkzODI3NjcKLToxMDdCQTAwMDAwMDQxMDgwMDMwNzMwMjQwMDRGMjAyMTBBMDAwQjZGQ0YKLToxMDdCQjAwMEFDQTYwMDAwMDAwQTY4QzAyNUFCMDAzMjI1OEFGRkZGOTIKLToxMDdCQzAwMDAxNjAxODIxQUY4OTAwQTQwQTAwMEIwRUFGOEEwMDYwODMKLToxMDdCRDAwMDI1NEIxMDMwQUY4OTAwOTAwMTYwMTgyMTI1QzlGRkZGQTcKLToxMDdCRTAwMDBBMDAwQjBFQUY4OTAwODQzMDg2MDAwNzJDQzIwMDA2MDUKLToxMDdCRjAwMDEwNDAwMDE0MDAwMDAwMDAwMDA2NDA4MDNDMDMwODAwMTQKLToxMDdDMDAwMDI0NjM1OUQ0MDEwMzM4MjE4Q0U0MDAwMDAwODAwMDA4NkIKLToxMDdDMTAwMDAwMDAwMDAwMjQwOTAwMDMxMEE5MDAwRTAwMDAwMDAwNkQKLToxMDdDMjAwMDI0MEEwMDA1MTBBQTAwMEIwMDAwMDAwMDI0MEIwMDAxMkMKLToxMDdDMzAwMDEwQUIwMDA4MDAwMDAwMDA4RjhDMDBBMDEwQUMwMDA1MDUKLToxMDdDNDAwMDAwMDAwMDAwMDNFMDAwMDgwMDAwMTAyMTBBMDAwQTlDNjgKLToxMDdDNTAwMDAwQTAyMDIxMEEwMDBBRUEwMEMwMjAyMTI3QkRGRkU4NzkKLToxMDdDNjAwMDMwODQwMEZGMjQwMzAwMDIxMDgzMDAwQkFGQkYwMDEwMUMKLToxMDdDNzAwMDI0MDYwMDAzMTA4NjAwM0EyNDA4MDAwNDEwODgwMDY4RDcKLToxMDdDODAwMDI0MEUwMDA1MTA4RTAwN0YyQ0FGMTQzMDhGQkYwMDEwMjMKLToxMDdDOTAwMDAzRTAwMDA4MjdCRDAwMTgyQ0EyMDAzMDE0NDBGRkZDQjAKLToxMDdDQTAwMDhGQkYwMDEwMjRBNUZGRDAwMDA1MzFDMjAwMDY2ODgwRjgKLToxMDdDQjAwMDNDMDcwODAwMjRFNzYxMDAwMUE3MzAyMThDQzkwMDAwQkYKLToxMDdDQzAwMDAwMDUyODgyMzBBQzAwMUYyNDBCMDAwMTAxOEI1MDA0RkEKLToxMDdDRDAwMDhGODQwMDQ4MDEyQTQwMjVBQ0M4MDAwMDhDODMwMDAwMzYKLToxMDdDRTAwMDUwNjAwMDAxQUY4NjAwNDg4Rjk4MDA2QzMwQUUwMDAxRjQKLToxMDdDRjAwMDI0QTZGRkZGMjcwRjAwMDExNUMwMDAwMkFGOEYwMDZDMDQKLToxMDdEMDAwMDI0QTYwMDAxMDAwNjQxNDIwMDA4MjA4MDAwODcxODIxQjcKLToxMDdEMTAwMDhDNzkwMDAwMzBDMjAwMUYyNDA2MDAwMTAwNDZGODA0RTAKLToxMDdEMjAwMDAzM0YzODI0MTBFMEZGREE4RkJGMDAxMDAwMDVDMTgyNDYKLToxMDdEMzAwMDAwMTg3MDgwM0MwRjA4MDAyNUVGNjBDMDAxQ0Y0ODIxN0IKLToxMDdENDAwMDhEMkIwMDAwMDAwNTY4NDIzMUE1MDAxRjAwQTY2MDA0Q0QKLToxMDdENTAwMDAxNkM1MDI1MjdCRDAwMTgwM0UwMDAwOEFEMkEwMDAwODMKLToxMDdENjAwMDJDQTcwMDMwMTRFMEZGQ0E4RkJGMDAxMDMwQjkwMDA3MDUKLToxMDdENzAwMDE3MjNGRkM3MjRBOEZGQ0UwMDA4NkEwMjAwMEQ2MDgwMDkKLToxMDdEODAwMDNDMEIwODAwMjU2QjYwQzAwMThCMzAyMThDQzQwMDAwQzcKLToxMDdEOTAwMDAwMDgyOEMyMzBBQTAwMUYyNDA4MDAwMTAxNDg0ODA0MzYKLToxMDdEQTAwMDhGODIwMEE0MDA4OTE4MjVBQ0MzMDAwMDhDNUYwMDAwRkUKLToxMDdEQjAwMDUzRTAwMDAxQUY4NjAwQTQwMDA1NzA0MDAwMEU3OTQyMzgKLToxMDdEQzAwMDAwMEYyODgwM0MwNDA4MDAyNDg0NjEwMDAwQTQxODIxQ0UKLToxMDdERDAwMDhDNkIwMDAwMjVERjAwMDEzMUNEMDAxRjAwMUY1MTQyRDgKLToxMDdERTAwMDAxQTg2MDA0MDE2QzQ4MjUwMDBBMTA4MEFDNjkwMDAwRkQKLToxMDdERjAwMDAwNDQyODIxOENBNjAwMDA4Rjk4MDA2MDMzRjkwMDFGRjIKLToxMDdFMDAwMDhGQkYwMDEwMDMyODM4MDQwMEM3NzgyNTI3MEUwMDAxMTMKLToxMDdFMTAwMDI3QkQwMDE4QUNBRjAwMDAwM0UwMDAwOEFGOEUwMDYwODMKLToxMDdFMjAwMDI0QTVFRkQwMkNCODA0MDAxMzAwRkY5OThGQkYwMDEwRDkKLToxMDdFMzAwMDAwMDUzMTQyMDAwNjU4ODAzQzBBMDgwMDI1NEE2MDQwOEYKLToxMDdFNDAwMDAxNkEzMDIxOENDNDAwMDAzMEEzMDAxRjI0MDkwMDAxMDYKLToxMDdFNTAwMDAwNjkxMDA0OEY5OTAwOTAwMDgyRjgyNUFDREYwMDAwQzMKLToxMDdFNjAwMDhGMjcwMDAwNTBFMDAwMDFBRjg2MDA5MDhGOEQwMDg0QzYKLToxMDdFNzAwMDhGQkYwMDEwMjdCRDAwMTgyNUFDMDAwMTAzRTAwMDA4RUIKLToxMDdFODAwMEFGOEMwMDg0MTVFMEZGODI4RkJGMDAxMDhGODYwMEEwQUEKLToxMDdFOTAwMDAwMDYxMDQwMDA0NkY4MjEwMDFGMjEwMDAzRTRDODIxMUQKLToxMDdFQTAwMDAwMTkzODQwMjRGODE0MzAwMEI4NDAyQjExMDBGRjc4MzYKLToxMDdFQjAwMDhGQkYwMDEwMjRBNEVCRDAwRTAwMDIwRDAwQzAyODIxQkIKLToxMDdFQzAwMDAwMDI3OTQyMDAwRjcwODAzQzBEMDgwMDI1QUQ2MTgwRjIKLToxMDdFRDAwMDAxQ0QyMDIxOEM4QjAwMDAzMDRDMDAxRjI0MDYwMDAxQjYKLToxMDdFRTAwMDAxODYxODA0OEY4OTAwOEMwMTYzNTAyNUFDOEEwMDAwM0MKLToxMDdFRjAwMDhEMjUwMDAwNTBBMDAwMDFBRjg0MDA4QzhGOTgwMDgwNzkKLToxMDdGMDAwMDhGQkYwMDEwMjdCRDAwMTgyNzA4MDAwMTAzRTAwMDA4RkMKLToxMDdGMTAwMEFGODgwMDgwMzBBNTAwMDcyNDAzMDAwMzEwQTMwMDEwRTEKLToxMDdGMjAwMDI4QTIwMDA0MTQ0MDAwMDgyNDA3MDAwMjI0MDMwMDA0Q0YKLToxMDdGMzAwMDEwQTMwMDE1MjQwODAwMDUxMEE4MDAwRjhGODUwMEEwQ0QKLToxMDdGNDAwMDAzRTAwMDA4MDAwMDAwMDAxNEE3RkZGRDAwODAyODIxQzYKLToxMDdGNTAwMDE0QzNGRkZCMjQwNDAwMDIwQTAwMEJBRTAwMDAwMDAwNjMKLToxMDdGNjAwMDI0MDkwMDA1MDA4MDI4MjExMEM5RkZGQjI0MDQwMDAzMTgKLToxMDdGNzAwMDAzRTAwMDA4MDAwMDAwMDAxNEM1RkZGMTAwODAyODIxODQKLToxMDdGODAwMDBBMDAwQkFFMjQwNDAwMDUyNDBBMDAwMTAwODAyODIxMDkKLToxMDdGOTAwMDEwQ0FGRkYxMjQwNDAwMDQwM0UwMDAwODAwMDAwMDAwMDAKLToxMDdGQTAwMDI3QkRGRkUwQUZCMDAwMTAwMDA1ODFDMjI2MDNGRkQwNUYKLToxMDdGQjAwMDI0QzUwMDNGMkM2MjIzRDAyNEM2MDA3RkFGQjIwMDE4MzYKLToxMDdGQzAwMEFGQjEwMDE0QUZCRjAwMUMzMDkxMDBGRjAwMDY5MUMyOUEKLToxMDdGRDAwMDAwMDUyOTgyMDIwMDIwMjExMDQwMDAwODI0MDNGRkZGMzEKLToxMDdGRTAwMDBFMDAwQTZFMDAwMDAwMDAwMjAwMjAyMTAyMjAyODIxNUQKLToxMDdGRjAwMDBFMDAwQzVDMDI0MDMwMjEwMDAwMTgyMThGQkYwMDFDRDUKLToxMDgwMDAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwNjAxMDIxRTMKLToxMDgwMTAwMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZEODI0QTIwMDdGNzEKLToxMDgwMjAwMEFGQjMwMDFDQUZCMjAwMTgwMDAyOTlDMjMwOTIwMEZGM0IKLToxMDgwMzAwMDI0QTMwMDNGMDI0MDIwMjEwMjYwMjgyMUFGQjEwMDE0OTgKLToxMDgwNDAwMEFGQjAwMDEwQUZCRjAwMjAwRTAwMEI5MTAwMDM4OTgyN0IKLToxMDgwNTAwMDAwNDA4MDIxMDA0MDIwMjEwMjIwMjgyMTE0NDAwMDA5RjYKLToxMDgwNjAwMDAwMDAxODIxOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4QjIKLToxMDgwNzAwMDhGQjEwMDE0OEZCMDAwMTAwMDYwMTAyMTAzRTAwMDA4RTEKLToxMDgwODAwMDI3QkQwMDI4MEUwMDBBMUYwMDAwMDAwMDAwNDAyODIxMjQKLToxMDgwOTAwMDAyMDAyMDIxMTA1MUZGRjMwMDEwMTlDMDBFMDAwQTZFREIKLToxMDgwQTAwMDAwMDAwMDAwMDIwMDIwMjEwMjQwMjgyMTBFMDAwQzVDOEMKLToxMDgwQjAwMDAyNjAzMDIxOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4RTgKLToxMDgwQzAwMDhGQjEwMDE0OEZCMDAwMTAwMDAwMTgyMTAwNjAxMDIxNDMKLToxMDgwRDAwMDAzRTAwMDA4MjdCRDAwMjgzMDg0RkZGRjMwQTVGRkZGMjQKLToxMDgwRTAwMDEwODAwMDA3MDAwMDE4MjEzMDgyMDAwMTEwNDAwMDAyQkIKLToxMDgwRjAwMDAwMDQyMDQyMDA2NTE4MjExNDgwRkZGQjAwMDUyODQwODEKLToxMDgxMDAwMDAzRTAwMDA4MDA2MDEwMjExMEMwMDAwNzAwMDAwMDAwMUMKLToxMDgxMTAwMDhDQTIwMDAwMjRDNkZGRkYyNEE1MDAwNEFDODIwMDAwNEUKLToxMDgxMjAwMDE0QzBGRkZCMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwRUEKLToxMDgxMzAwMDEwQTAwMDA4MjRBM0ZGRkZBQzg2MDAwMDAwMDAwMDAwOTAKLToxMDgxNDAwMDAwMDAwMDAwMjQwMkZGRkYyNDYzRkZGRjE0NjJGRkZBMTcKLToxMDgxNTAwMDI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDMwQTVGRkZGQjUKLToxMDgxNjAwMDhGNDIwMUI4MDQ0MEZGRkUzQzA3NjAxNTAwQTczMDI1OTAKLToxMDgxNzAwMDNDMDMxMDAwQUY0NDAxODBBRjQwMDE4NEFGNDYwMTg4NEEKLToxMDgxODAwMDAzRTAwMDA4QUY0MzAxQjg4Rjg1MDBEMDJDODY0MDAwODMKLToxMDgxOTAwMDAwODAxODIxOENBNzAwODQwMDg3MTAyQjE0NDAwMDEwNDkKLToxMDgxQTAwMDAwMDAwMDAwOENBODAwODQyRDA2NDAwMDUwQzAwMDBGODUKLToxMDgxQjAwMDI0MDM0MDAwOENBQTAwODQwMDhBNDgyQjUxMjAwMDAxMkYKLToxMDgxQzAwMDhDQTMwMDg0MDAwMzVBNDIwMDBCMjA4MDNDMDUwODAwNjkKLToxMDgxRDAwMDI0QTU1QTQwMDA4NTE4MjEwM0UwMDAwODhDNjIwMDAwQTUKLToxMDgxRTAwMDE0QzBGRkY0MDAwMDAwMDAyNDAzNDAwMDAwMDM1QTQyQzIKLToxMDgxRjAwMDAwMEIyMDgwM0MwNTA4MDAyNEE1NUE0MDAwODUxODIxNkEKLToxMDgyMDAwMDAzRTAwMDA4OEM2MjAwMDA4RjgzMDBEMDkwNjYwMEQwRUQKLToxMDgyMTAwMDI0QzUwMDAxQTA2NTAwRDA4Rjg1MDBEMDkwNjQwMEQwRjcKLToxMDgyMjAwMDkwQTIwMEQyMTA0NDAwMTcwMDAwMDAwMDkzNkMwMDc4NjgKLToxMDgyMzAwMDhGOEIwMEJDMzE4QTAwRkZBMTZBMDAwQzI1NDkwMDAxMjgKLToxMDgyNDAwMDkzODcwMEM0MzEyMjAwRkYzMDQ4MDA3RjExMDcwMDBCRTQKLToxMDgyNTAwMDAwMDI2ODI3QTM2MjAwNzg4RjRFMDE3ODA1QzBGRkZFRjgKLToxMDgyNjAwMDhGOTkwMEIwMjQxODAwMDIzQzBGMTAwMEFGNTkwMTQwNTQKLToxMDgyNzAwMEEzNTgwMTQ0MDNFMDAwMDhBRjRGMDE3ODBBMDAwRDJDMTkKLToxMDgyODAwMDMxQTIwMDgwQTBBMDAwRDAwQTAwMEQyMjAwMDAwMDAwNTIKLToxMDgyOTAwMDI3QkRGRkQ4QUZCMjAwMTg4RjkyMDBCOEFGQkYwMDIwNDMKLToxMDgyQTAwMEFGQjMwMDFDQUZCMDAwMTBBRkIxMDAxNDhGOTMwMEI0OTcKLToxMDgyQjAwMDhFNTkwMDI4M0MxMDAwODAzQzBFRkZFRkFFNzkwMDAwODQKLToxMDgyQzAwMDhFNTgwMDI0QTI2MDAwMEEzNUNERkZGRkFFNzgwMDA0NkUKLToxMDgyRDAwMDkyNTEwMDJDM0MwQkZGOUYzNTZBRkZGRkEyNzEwMDBDRUUKLToxMDgyRTAwMDhFNkYwMDBDM0MwODAwNDBBMjcxMDAwQjAxRjA2MDI1NkQKLToxMDgyRjAwMDAxOEQ0ODI0MDEyQTM4MjQwMEU4MzAyNUFFNjYwMDBDQTAKLToxMDgzMDAwMDhFNDUwMDA0QUU2MDAwMTgzQzA0MDBGRkFFNjUwMDE0MEEKLToxMDgzMTAwMDhFNDMwMDJDMzQ4MkZGRkZBNjYwMDAwODAwNjJGODI0MjAKLToxMDgzMjAwMEFFN0YwMDEwOEU1OTAwMDg4RjkwMDBCMDk2NEUwMDEyNUMKLToxMDgzMzAwMEFFNzkwMDIwOEU1MTAwMEMzMUQ4M0ZGRjAwMTg3OTgwQjMKLToxMDgzNDAwMEFFNzEwMDI0OEU0RDAwMTQwMUYwNjAyMTMxQ0IwMDAxOEMKLToxMDgzNTAwMEFFNkQwMDI4OEU0QTAwMTgwMDBDNDFDMjAwMEI0QjgwMDUKLToxMDgzNjAwMEFFNkEwMDJDOEU0NjAwMUMwMTA5MzgyMUE2NjcwMDFDNEQKLToxMDgzNzAwMEFFNjYwMDMwOTY0NTAwMDI4RTQ0MDAyMEE2NjUwMDFFQzEKLToxMDgzODAwMEFFNjQwMDM0OTI0MzAwMzMzMDYyMDAwNDU0NDAwMDA1NzAKLToxMDgzOTAwMDkyNDYwMDAwOEY4MzAwRDA4QzdGMDA3Q0FFN0YwMDMwM0YKLToxMDgzQTAwMDkyNDYwMDAwOEY4NTAwQkNBMEE2MDAwMDkyNDQwMDMzRDYKLToxMDgzQjAwMDMwODIwMDAyNTA0MDAwMDc5MjRFMDAwMThGODcwMEJDQkYKLToxMDgzQzAwMDI0MEFGRjgwOTBFOTAwMDAwMTJBNDAyNUEwRTgwMDAwNkYKLToxMDgzRDAwMDkyNEUwMDAxOEY4RDAwQkMyNDA5RkZCRjI0MDRGRkRGRjMKLToxMDgzRTAwMEExQUUwMDAxOEY4QTAwQkM5MTRDMDAwRDMxOEIwMDdGNDMKLToxMDgzRjAwMEExNEIwMDBEOEY4NjAwQkM5MEM4MDAwRDAxMDkzODI0RTgKLToxMDg0MDAwMEEwQzcwMDBEOEY5MTAwQkM4RTY1MDAxNDkyMjMwMDBENTMKLToxMDg0MTAwMDJDQTIwMDAxMDAwMkY5NDAwMDY0QzgyNDAzM0ZDMDI1REIKLToxMDg0MjAwMEEyMzgwMDBEOEY4ODAwQkM5NjUwMDAxMjhGODcwMEQwQjQKLToxMDg0MzAwMEE1MTAwMDAyOEU0NTAwMDQ5MEVEMDBCQzMwQUYwMDAzOTMKLToxMDg0NDAwMDAwMEY3MDIzMzFDQzAwMDMwMEFDMTAyMTMxQUIwMDAyQ0YKLToxMDg0NTAwMDE1NjAwMDAyMjQ0NDAwMzQyNDQ0MDAzMDkwRjEwMEJDMzQKLToxMDg0NjAwMDAwQjE4MDI0MzIwRjAwMDQxNUUwMDAwMjI0ODMwMDA0RDAKLToxMDg0NzAwMDAwODAxODIxOEY4OTAwQUMyNDBBMDAwMkFEMDMwMDA0OUIKLToxMDg0ODAwMEExMkEwMDAwOTI0ODAwM0Y4Rjg3MDBBQ0EwRTgwMDAxQkQKLToxMDg0OTAwMDhGOTEwMEFDOTI0NjAwM0Y4RTQ0MDAwNEE2MjYwMDAyNTUKLToxMDg0QTAwMDk3NjUwMDNDMEUwMDBDRjkzMEIwRkZGRjAwMDIxMzgwMEUKLToxMDg0QjAwMDAwNTAyMDI1M0MwMzQyMDAwMDgzRjgyNUFFM0YwMDA0MTUKLToxMDg0QzAwMDhGODUwMEFDOEU1OTAwMzhBQ0I5MDAxODhFNTgwMDM0MzYKLToxMDg0RDAwMEFDQjgwMDFDQUNBMDAwMENBQ0EwMDAxMEE0QTAwMDE0MTAKLToxMDg0RTAwMEE0QTAwMDE2QTRBMDAwMjBBNEEwMDAyMkFDQTAwMDI0RjgKLToxMDg0RjAwMDhFNjIwMDE0NTA0MDAwMDEyNDAyMDAwMThGQkYwMDIwNTIKLToxMDg1MDAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMTEKLToxMDg1MTAwMEFDQTIwMDA4MEEwMDBEMTkyN0JEMDAyODhGODYwMEQwRTQKLToxMDg1MjAwMDI3QkRGRkQwQUZCRjAwMkNBRkI2MDAyOEFGQjUwMDI0RTkKLToxMDg1MzAwMEFGQjQwMDIwQUZCMzAwMUNBRkIyMDAxOEFGQjEwMDE0NEQKLToxMDg1NDAwMEFGQjAwMDEwOTRDMzAwRTA5NEMyMDBFMjEwNDMwMDQxQjkKLToxMDg1NTAwMDI0MDVGRkZGM0MxNjAwMEU5MEM0MDBEMDkwQzgwMEQxNDcKLToxMDg1NjAwMDMwOTIwMEZGMzEwNDAwRkYwMjQ0MzgyQjEwRTAwMDQ0MzkKLToxMDg1NzAwMDI2NDkwMDAxMTA4OTAwMzc4Rjk4MDBCMDNDMDUwODAwOUIKLToxMDg1ODAwMDhDQTUwMDVDMjQxNEZGODAwMEI4NjAyMTAxOTQ2ODI0NEQKLToxMDg1OTAwMEFGNEQwMDJDOTRDQTAwRTIzMThCMDA3RjAxN0E0ODIxNTQKLToxMDg1QTAwMDMxNDQ3RkZGMDEzNjQwMjEwMDA0MTA0MDAwNDhBODIxREIKLToxMDg1QjAwMDk2QTcwMDAwM0MxRjA4MDA4RkZGMDA1ODMwRjUzRkZGRDIKLToxMDg1QzAwMDAwMTUxOTgwMDNFM0M4MjEwMzE5ODgyMTMyMzMwMDdGODUKLToxMDg1RDAwMDAyN0E3ODIxMDIzNDgwMjRBRjUwMDAyQzAxRjY5ODIxRDEKLToxMDg1RTAwMDkyNkUwMDBEMzFDNTAwMDQxMEEwMDA0ODAwMDAwMDAwOEMKLToxMDg1RjAwMDk0QzMwMEUyOTRDMzAwRTI5NEQ4MDBFMjI0MDQ4MDAwMTMKLToxMDg2MDAwMDMwN0Y3RkZGMjdGOTAwMDEzMzMxN0ZGRjAzMDQ4MDI0OEYKLToxMDg2MTAwMDAyMTE3ODI1QTRDRjAwRTI5NENFMDBFMjNDMTIwODAwQkIKLToxMDg2MjAwMDhFNTIwMDYwMzFENDdGRkYxMjkyMDBERjAwMDAwMDAwMDQKLToxMDg2MzAwMDhFNzIwMDE4MDAwMDI4MjEyNjQ2RkZGRkFFNjYwMDJDMkYKLToxMDg2NDAwMDhGODYwMEQwOTRDODAwRTA5NEM5MDBFMjE1MjhGRkMyQ0MKLToxMDg2NTAwMDAwMDAwMDAwOEZCRjAwMkM4RkI2MDAyODhGQjUwMDI0Q0IKLToxMDg2NjAwMDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OUMKLToxMDg2NzAwMDhGQjAwMDEwMDBBMDEwMjEwM0UwMDAwODI3QkQwMDMwREIKLToxMDg2ODAwMDkwQ0QwMEQyMjY0QTAwMDEzMUFDMDBGRjAwOEM1ODIxNjkKLToxMDg2OTAwMDExNkFGRkYwOEY5ODAwQjAzQzA1MDgwMDhDQTUwMDVDQzMKLToxMDg2QTAwMDI0MTRGRjgwMDBCODYwMjEwMTk0NjgyNEFGNEQwMDJDOTEKLToxMDg2QjAwMDk0Q0EwMEUyMzE4QjAwN0YwMTdBNDgyMTMxNDQ3RkZGNjgKLToxMDg2QzAwMDAxMzY0MDIxMDAwNDEwNDAwMDQ4QTgyMTk2QTcwMDAwNzAKLToxMDg2RDAwMDNDMUYwODAwOEZGRjAwNTgzMEY1M0ZGRjAwMTUxOTgwNDAKLToxMDg2RTAwMDAzRTNDODIxMDMxOTg4MjEzMjMzMDA3RjAyN0E3ODIxRkQKLToxMDg2RjAwMDAyMzQ4MDI0QUY1MDAwMkMwMUY2OTgyMTkyNkUwMDBEQjgKLToxMDg3MDAwMDMxQzUwMDA0MTRBMEZGQkEwMDAwMDAwMDhFNjYwMDEwRkUKLToxMDg3MTAwMDAwMTJDMEMwOEU2RTAwMzAwMDEyOTE0MDAyNTg3ODIxQzUKLToxMDg3MjAwMDAzNkY1ODIxMDBDRTY4MjMyNTZDMDA4ODI0MDIwMDAyQzQKLToxMDg3MzAwMEFFNkQwMDEwQUY4QzAwQUNBMTYyMDA4ODk3NkEwMDNDNUYKLToxMDg3NDAwMDhFNjQwMDMwOEY5MTAwQUMwRTAwMENGOTMxNTBGRkZGQTkKLToxMDg3NTAwMDAwMDIyMzgwMDA5MDQ4MjUzQzAzNDIwMDAxMjM0MDI1NkQKLToxMDg3NjAwMEFFMjgwMDA0OEU2NzAwMDQ4RjhDMDBBQzhFN0YwMDAwNjIKLToxMDg3NzAwMDI0MEQwMDA4QUQ4NzAwMUNBRDlGMDAxOEFEODAwMDBDRDMKLToxMDg3ODAwMEFEODAwMDEwOTI2NTAwMEEzMEI5MDBGRkE1OTkwMDE0NzEKLToxMDg3OTAwMDk2NzgwMDA4M0MwNTAwMENBNTk4MDAxNjkyNzEwMDBBMTYKLToxMDg3QTAwMDMyMkYwMEZGQTU4RjAwMjA5NjcwMDAwODI0MTEwMDA1Q0QKLToxMDg3QjAwMEE1OTAwMDIyQUQ4MDAwMjQ5MjZFMDAwQjI0MTBDMDAwMTIKLToxMDg3QzAwMDMxQzYwMEZGQTU4NjAwMDJBMThEMDAwMThFNkIwMDMwMkUKLToxMDg3RDAwMDhGODIwMEFDOEY4ODAwQjBBQzRCMDAwODNDMEEwODAwQzgKLToxMDg3RTAwMDhENEEwMDU0MDE0ODIwMjEwMDk0NDgyNEFGNDkwMDI4QjQKLToxMDg3RjAwMDNDMDMwODAwOEM2MzAwNTQwMDY4MzgyMTMwRkYwMDdGODAKLToxMDg4MDAwMDAzRkFDODIxMDMyNUMwMjEwMjU4NzgyMUFGOEYwMEJDOEMKLToxMDg4MTAwMEFGOTgwMEMwQTFGMTAwMDA4RjhCMDBCQzI0MDNGRkJGMDQKLToxMDg4MjAwMDI0MDVGRkRGOTU2RTAwMDIwMUQwQTAyNDAyOTU5MDI1NUIKLToxMDg4MzAwMEE1NzIwMDAyOTE2NjAwMDIzMENEMDAzRjM1QUMwMDQwQzkKLToxMDg4NDAwMEExNkMwMDAyOEY4ODAwQkM4RjgyMDBEMDNDMEM3RkZGOUYKLToxMDg4NTAwMEFEMDAwMDA0OEM0QTAwN0MzNThCRkZGRjNDMDI4MDAwOTkKLToxMDg4NjAwMEFEMEEwMDA4OTEwNDAwMEQzMDg5MDA3RkExMDkwMDBEQjgKLToxMDg4NzAwMDhGOUYwMEJDOTNGNTAwMEQwMkEzMzgyNEEzRTcwMDBERTEKLToxMDg4ODAwMDhGOTEwMEJDOTIzOTAwMEQwMzI1QzAyNEEyMzgwMDBENDEKLToxMDg4OTAwMDhFNkYwMDM0OEY4RDAwQkNBREFGMDAxMDhFNkUwMDJDM0IKLToxMDg4QTAwMDhFNzAwMDMwMDFEMEEwMjNBREI0MDAxNDkxQjIwMDE4MzYKLToxMDg4QjAwMDMyNDYwMDdGQTFBNjAwMTg4Rjg3MDBCQzhFNkEwMDMwNjgKLToxMDg4QzAwMDhDRTQwMDE4MDE0QjQ4MjQwMDgyNDAyNDAxMDlBODI1QUIKLToxMDg4RDAwMEFDRjUwMDE4OTI2MzAwMEFBMEUzMDAxQzk2N0YwMDA4MjQKLToxMDg4RTAwMDhGODUwMEJDOEY5OTAwRDBBNEJGMDAxRThFNzAwMDMwMTEKLToxMDg4RjAwMDhFNjQwMDMwMEUwMDAyMEQ4RjI1MDA4NDhGODUwMEQwMUQKLToxMDg5MDAwMDAwMDI4OTQwMDAwMkMxMDA5MEFFMDBCQzAyMzg3ODIxMEMKLToxMDg5MTAwMDAwNDAzMDIxMzFENDAwMDIxMjgwMDAwMzAyMEY4MDIxNzgKLToxMDg5MjAwMDAwMDJBODgwMDIxNTgwMjE5MEIyMDBCQzMyNTQwMDA0REQKLToxMDg5MzAwMDEyODAwMDAyMDAwNkM4ODAwMjE5ODAyMThFNkYwMDMwNkMKLToxMDg5NDAwMDhGOEIwMEJDMjQwNjgwMDAzMUVFMDAwMzAwMEU2ODIzRUMKLToxMDg5NTAwMDMxQUMwMDAzMDIwQzEwMjFBRDYyMDAwNDk0QTQwMEUyQ0IKLToxMDg5NjAwMDk0QUEwMEUyOTRBMzAwRTIzMTUwN0ZGRjI2MDQwMDAxQTQKLToxMDg5NzAwMDMwODk3RkZGMDA2NjQwMjQwMTA5ODgyNUE0QjEwMEUyMDgKLToxMDg5ODAwMDk0QTcwMEUyM0MxMzA4MDA4RTczMDA2MDMwRkY3RkZGNjUKLToxMDg5OTAwMDEzRjMwMDEyMDAwMDAwMDAwRTAwMEQxOTAwMDAwMDAwOEIKLToxMDg5QTAwMDBBMDAwRTI3MDAwMDI4MjE5NENEMDBFMjAxQTQ2MDI0RDMKLToxMDg5QjAwMEE0Q0MwMEUyOTBDQjAwRTI5MEMyMDBFMjMxNkEwMEZGNUEKLToxMDg5QzAwMDAwMEE0OUMyMDAwOTIwMjcwMDA0NDFDMDMwNTUwMDdGMzkKLToxMDg5RDAwMDAyQTgzODI1MEEwMDBFMjNBMEM3MDBFMjk0QjEwMEUyRTUKLToxMDg5RTAwMDAyMjYzODI0QTRBNzAwRTI5MEJGMDBFMjkwQjQwMEUyN0YKLToxMDg5RjAwMDMzRjMwMEZGMDAxM0M5QzIwMDE5OTAyNzMyOTgwMDdGOUIKLToxMDhBMDAwMDAwMTJBOUMwMDMxNTMwMjUwRTAwMEQxOUEwQTYwMEUyMjIKLToxMDhBMTAwMDBBMDAwRTI3MDAwMDI4MjEzMDg0RkZGRjMwQTVGRkZGNDkKLToxMDhBMjAwMEFGNDQwMDE4QUY0NTAwMUMwM0UwMDAwODhGNDIwMDE0NUIKLToxMDhBMzAwMDI3QkRGRkIwQUZCMDAwMjg4RjkwMDBEMEFGQjQwMDM4OTIKLToxMDhBNDAwMEFGQkYwMDRDQUZCRTAwNDhBRkI3MDA0NEFGQjYwMDQwNjgKLToxMDhBNTAwMEFGQjUwMDNDQUZCMzAwMzRBRkIyMDAzMEFGQjEwMDJDQzMKLToxMDhBNjAwMEE3QTAwMDE0OTIwNjAwRDE5MjA1MDBEMDMwOTRGRkZGMTkKLToxMDhBNzAwMDMwQzQwMEZGMzBBMzAwRkYwMDY0MTAyQkE3QTAwMDFFMkQKLToxMDhBODAwMDEwNDAwMDcxQUZBMDAwMTA5MjA5MDBEMDAwMTQ5ODJCODQKLToxMDhBOTAwMDMxMjgwMEZGMDA4ODM4MjMyNEYyRkZGRjAwMTI4ODJCQzIKLToxMDhBQTAwMDAyMzM3ODI0NTFFMDAwNzU4RkIyMDAxMDk2MTgwMDEyM0UKLToxMDhBQjAwMDk2MTkwMDEwMDAxNEY0MDAwMzE5QjgyMzAwMTdCNDAwMkQKLToxMDhBQzAwMDAwMTYxNDAzMDI4MkE4MkExNkEwMDAwMjAwMUUyNDAzMjYKLToxMDhBRDAwMDAwNDAyMDIxMDI0NEY4MkIxM0UwMDAwMjAwODAxODIxRkUKLToxMDhBRTAwMDAyNDAxODIxMDAwMzM0MDAwMDA2MUMwMzMwNjVGRkZGMUMKLToxMDhBRjAwMDJDQTIwMDA5MTQ0MDAwMDIwMDYwOTgyMTI0MTMwMDA4RjEKLToxMDhCMDAwMDhFMDkwMDA4MDAxMzU5ODA4RTA4MDAwQzMxNjRGRkZGQTUKLToxMDhCMTAwMDNDMEEwMDEwMDA4QTM4MjUyNzRBMDQwMEFGNDkwMDM4NzMKLToxMDhCMjAwMEFGOEEwMEI4QUY0ODAwM0NBRjQ3MDAzMDAwMDAwMDAwRkIKLToxMDhCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKLToxMDhCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGNEQwMDAwNDkKLToxMDhCNTAwMDMxQUMwMDIwMTE4MEZGRkQwMDEzNzAyQTAxRDExMDI0RDgKLToxMDhCNjAwMDAwMDBBODIxMTA0MDAxQzAwMDAwMDAwMDhGOTgwMEIwNTQKLToxMDhCNzAwMDNDMEIwODAwOEQ2QjAwNTQyNDExRkY4MDkyMUUwMEQwMjYKLToxMDhCODAwMDAxNzgyMDIxMDA5MTEwMjQ5MjE5MDBEMEFGNDIwMDI4RDIKLToxMDhCOTAwMDhENDUwMDEwM0MwNjA4MDA4Q0M2MDA1ODNDMTcwODAwQTQKLToxMDhCQTAwMDhFRjcwMDU0MzBBNzNGRkYwMDA3MTk4MDAwQzM0MDIxMTMKLToxMDhCQjAwMDAzMDgyMDIxMDA5MUY4MjQ5MjBCMDBEMEFGNUYwMDJDMTUKLToxMDhCQzAwMDkxNDgwMDAwMzNENjAwRkYzMzJGMDBGRjAyRjg3MDIxRDgKLToxMDhCRDAwMDAwMTY2MTQwMDAwRjY4QzAzMUM5MDA3RjAxOEQzODIxNDcKLToxMDhCRTAwMDAxM0EyODIxMzE2MzAwRkYzMDg2MDA3RjNDMDIwMDBDRUYKLToxMDhCRjAwMDAwQTJCMDIxMDAwMzg5NDAwMzY3QzgyMTAwREFGODIxRjAKLToxMDhDMDAwMDMxMDgwMDNGM0MxRTAwMEUwMjM2QjgyMTI3MzgwMDg4OEMKLToxMDhDMTAwMDAzRkU4ODIxMkQwRjAwMDhBRjk4MDBBQ0FGOTcwMEJDNzEKLToxMDhDMjAwMEFGOTYwMEMwMTFFMDAxOEZBRjkxMDBCNDAwMDg2ODgwREEKLToxMDhDMzAwMDNDMEUwODAwMjVDRTU5RUMwMUFFNjAyMThEODkwMDAwNjQKLToxMDhDNDAwMDAxMjAwMDA4MDAwMDAwMDA5MjBFMDBEMjkyMEQwMEQwMUEKLToxMDhDNTAwMDAwMTQ5ODJCMzFDQTAwRkYzMUFDMDBGRjAwOEM1ODIzNjAKLToxMDhDNjAwMDAxNEIyMDIxMjQ5MkZGRkYwMDEyODgyQjAyMzM3ODI0MkQKLToxMDhDNzAwMDE1RTBGRjhFMDAwMDAwMDA4RkIyMDAxMDhGQkYwMDRDODcKLToxMDhDODAwMDhGQkUwMDQ4M0E0MjAwMDE4RkI3MDA0NDhGQjYwMDQwQzMKLToxMDhDOTAwMDhGQjUwMDNDOEZCNDAwMzg4RkIzMDAzNDhGQjIwMDMwRjIKLToxMDhDQTAwMDhGQjEwMDJDOEZCMDAwMjgwM0UwMDAwODI3QkQwMDUwRDIKLToxMDhDQjAwMDkxNTgwMDAxMzMxNzAwMjAxMkUwMDIwNDI0MTYwMDAxMkQKLToxMDhDQzAwMDkyMUYwMEJDMDAwMEIwMjEzM0Y5MDAwMTEzMjAwMDBERjkKLToxMDhDRDAwMDI0MUUwMDAxOEQ0ODAwMTQ4RTAzMDA4NDAxMDNCMDJCNzQKLToxMDhDRTAwMDE2QzAwMDAyMDEwMDMwMjE4RTA2MDA4NDhFMDUwMDY0NEIKLToxMDhDRjAwMDAwQzUzODJCMTRFMDAwMDIwMEMwMjAyMThFMDQwMDY0NUYKLToxMDhEMDAwMDAwODBCMDIxOEQ0MjAwMTQ4RTBCMDA2NDAwNEIzMDJCOEMKLToxMDhEMTAwMDE0QzAwMDAyMDA0MDIwMjE4RTA0MDA2NDAwOTZCODIzOTUKLToxMDhEMjAwMDU2RTAwMDAxMjQxRTAwMDIwMjVFMjAyQjE0ODAwMTQ4NDAKLToxMDhEMzAwMDAwMDAxODIxOEQ1OTAwMzg4RTJGMDAwQzNDMTgwMDgwM0YKLToxMDhENDAwMEFFMzkwMDAwOEQ1MDAwMzQzQzBFRkY5RjAxRjg2MDI1QzUKLToxMDhENTAwMEFFMzAwMDA0OTE0OTAwM0YzNUNERkZGRjAxOEQyMDI0NDYKLToxMDhENjAwMDNDMEEwMDIwM0MwQkZGRUZBMjI5MDAwQjAwOEEzODI1QUIKLToxMDhENzAwMDM1NjJGRkZGMDBFMjI4MjQzQzA2MDAwODhGODcwMEI4MTgKLToxMDhEODAwMDAwQTZDODI1QUUzOTAwMEM4Q0UzMDAxNEFFMjAwMDE4RjQKLToxMDhEOTAwMDNDMDhGRkZCQUUyMzAwMTQ4Q0Y4MDAxODM1MUZGRkZGQzIKLToxMDhEQTAwMDAzM0Y3MDI0QUUzODAwMUM4Q0VGMDAwODAyRDc4MDIxRUUKLToxMDhEQjAwMEFFMkYwMDI0OENFRDAwMENBRTMwMDAyQ0FFMkUwMDBDM0IKLToxMDhEQzAwMEFFMkQwMDIwQUUyMDAwMjhBNjIwMDAzOEE2MjAwMDNBQjQKLToxMDhERDAwMDhDRUMwMDE0MDE5NjQ4MjMwMTM3NTAyMzExNDAwMDExRjgKLToxMDhERTAwMEFFMkEwMDEwOTBFRTAwM0Q4RTJDMDAwNDhFMjQwMDAwNzAKLToxMDhERjAwMDAwMEU2OTAwMDE4RDI4MjEwMDAwNTAyMTAwQUQzMDJCQUMKLToxMDhFMDAwMDAwOEE1ODIxMDE2NjEwMjFBRTI1MDAwNEFFMjIwMDAwMjAKLToxMDhFMTAwMDkwRTMwMDNEQTIyMzAwMEE4Rjg4MDBCODk1MUYwMDA2NEEKLToxMDhFMjAwMEE2M0YwMDA4OEY4QjAwQUMyNDA2MDAwMjAyQzAyMDIxNjAKLToxMDhFMzAwMEExNjYwMDAwOTc2NTAwM0M4RjkwMDBBQzMwQTJGRkZGNTgKLToxMDhFNDAwMDBFMDAwQ0Y5QUZBMjAwMjA4RkEzMDAyMDAwMDI0MzgwODcKLToxMDhFNTAwMDhGODUwMEI4MDEwM0M4MjUzQzFGNDIwMDAzM0ZDMDI1OTEKLToxMDhFNjAwMEFFMTgwMDA0OEY4NDAwQUM4Q0FGMDAzOEFDOEYwMDE4QjMKLToxMDhFNzAwMDhDQjAwMDM0QUM5MDAwMUNBQzgwMDAwQ0FDODAwMDEwQjYKLToxMDhFODAwMEE0ODAwMDE0QTQ4MDAwMTZBNDgwMDAyMEE0ODAwMDIyRTYKLToxMDhFOTAwMEFDODAwMDI0OTBBNzAwM0ZBNDg3MDAwMjEyQzAwMjEwRkIKLToxMDhFQTAwMDI0MEQwMDAxNTJFMDAwMDI5MEEyMDAzRDkwQTIwMDNFN0QKLToxMDhFQjAwMDI0NEEwMDAxQTA4QTAwMDE4Rjg0MDBBQ0FDOTYwMDA4MEYKLToxMDhFQzAwMDhGODMwMEQwMjQwNzAwMzQ5MDZGMDBCQzMxRUUwMDAyODUKLToxMDhFRDAwMDUxQzAwMDAxMjQwNzAwMzA4RjgyMDBCODhGOTkwMEJDNzgKLToxMDhFRTAwMDkwNjgwMEJDOTA1RjAwMDAyNDEwMDAwNDMyQ0YwMDAzQTMKLToxMDhFRjAwMEEzM0YwMDAwOEY5ODAwQjg4RjhDMDBCQzAyMEY3MDIzMzYKLToxMDhGMDAwMDkzMEQwMDAxMjQwNUMwMDAzMUNBMDAwM0ExOEQwMDAxQUEKLToxMDhGMTAwMDhGOTAwMEJDOEY4OTAwQjgwMEY2MzgyMTk2MDQwMDAyQkIKLToxMDhGMjAwMDk1MjYwMDEyMDBFQTM4MjEwMDg1NTgyNDMwQzMzRkZGRkYKLToxMDhGMzAwMDAxNjMxMDI1QTYwMjAwMDI5MjFGMDAwMjMxMDgwMDA0RkUKLToxMDhGNDAwMDMzRjkwMDNGMzczODAwNDBBMjE4MDAwMjEyQzAwMDAyNzcKLToxMDhGNTAwMDhGODUwMEJDMDBFODM4MjE4Rjg2MDBEMEFDQTcwMDA0QzQKLToxMDhGNjAwMDI0MUZGRkJGOENDMzAwN0MyRUNCMDAwMTI0MEZGRkRGMkEKLToxMDhGNzAwMEFDQTMwMDA4OTBBODAwMEQwMDBCNjk0MDMxMDIwMDdGRUYKLToxMDhGODAwMEEwQTIwMDBEOEY5MDAwQkM5MjE5MDAwRDAzM0ZDMDI0RDkKLToxMDhGOTAwMEEyMTgwMDBEOEY4QTAwQkM5MTRFMDAwRDAxQ0Y2MDI0RjUKLToxMDhGQTAwMDAxOEQ0ODI1QTE0OTAwMEQ4Rjg2MDBCODhGOEIwMEJDMkMKLToxMDhGQjAwMDhDQzcwMDIwQUQ2NzAwMTA4Q0M1MDAyNEFENjUwMDE0N0YKLToxMDhGQzAwMDhDQzQwMDI4QUQ2NDAwMTg4Q0MzMDAyQzBFMDAwRDE5NTEKLToxMDhGRDAwMEFENjMwMDFDMjQwODAwMDI1N0M4MDA5QzhGOTAwMEQwOEQKLToxMDhGRTAwMDhGOEYwMEQwOEY4QTAwQzAwMkUwMjAyMTkxRTgwMEQwNEUKLToxMDhGRjAwMDkxRUIwMEQwOTFFNzAwRDAzMTEwMDBGRjMxNkUwMEZGRkYKLToxMDkwMDAwMDAwMTA2OTQwMDAwRTI4QzAwMUE1MTgyMTMwRTkwMEZGQkEKLToxMDkwMTAwMDAzNjNDODIxMDAwOTMxNDAwMENBRjgyMTI3MjIwMDg4RDMKLToxMDkwMjAwMEFGODIwMEFDQUY5RjAwQkNBMzNFMDA4ODBFMDAwQ0Y5REQKLToxMDkwMzAwMDhGOTAwMEFDOEZCODAwMjAwMDAyNjM4MDNDMEY0MjAwOEMKLToxMDkwNDAwMDAxOTg0MDI1OEY4QzAwQjgwMTBGNTgyNUFFMEIwMDA0MDUKLToxMDkwNTAwMDhEODQwMDM4OEY4QjAwQUMwMDAwMjgyMTAwMDUzOTAwN0EKLToxMDkwNjAwMEFENjQwMDE4OEQ4RTAwMzQzQzBGN0ZGRjM1RThGRkZGQTQKLToxMDkwNzAwMEFENkUwMDFDOTE4MzAwM0U4RDY5MDAxQzhENjYwMDE4NEEKLToxMDkwODAwMDAwMDM1MTAwMDAwMzZGMDIwMTJBQzAyMTAwRUQxMDI1RUEKLToxMDkwOTAwMDAzMEFGODJCMDBDMkM4MjEwMzNGODAyMUFENzgwMDFDRDEKLToxMDkwQTAwMEFENzAwMDE4QUQ2MDAwMENBRDYwMDAxMDkxODQwMDNFMDIKLToxMDkwQjAwMDI0MUYwMDA1MjQxMEMwMDBBNTY0MDAxNDk1OEUwMDA0MzAKLToxMDkwQzAwMDAyRTg0MDI0MDJFMDIwMjFBNTZFMDAxNjkxODUwMDNFQjIKLToxMDkwRDAwMEE1NjUwMDIwOTU4RDAwMDRBNTZEMDAyMkFENjAwMDI0REIKLToxMDkwRTAwMDkxODcwMDNGQTU2NzAwMDI5MTgzMDAzRTkxODkwMDNENzIKLToxMDkwRjAwMDAxMjM1MDIzMjU0NjAwMDFBMTY2MDAwMThGODIwMEFDQTgKLToxMDkxMDAwMDhGOTkwMEJDQUM1NzAwMDhBMzNGMDAwMDhGOEEwMEJDQjkKLToxMDkxMTAwMDhGOTgwMEI4OTU0RjAwMDI5NzBFMDAxMjI0MThGRkJGRDkKLToxMDkxMjAwMDAyMEY2ODI0MzFDNTNGRkYwMUE1MzgyNUE1NDcwMDAyN0QKLToxMDkxMzAwMDkxNEMwMDAyMjQwNUZGREYzMTg5MDAzRjM1MjMwMDQwQjgKLToxMDkxNDAwMEExNDMwMDAyOEY5OTAwQkM4Rjg2MDBEMDI0MDlGRkZGNDUKLToxMDkxNTAwMEFGMjAwMDA0OENDQjAwN0MyNDAzRkY4MEFGMkIwMDA4RTEKLToxMDkxNjAwMDkzMjIwMDBEM0MwQjgwMDAzMDVGMDA3RkEzM0YwMDBENzkKLToxMDkxNzAwMDhGOEUwMEJDOTFEMDAwMEQwMjE4NzgyNEExQ0YwMDBENzUKLToxMDkxODAwMDhGOEMwMEJDOTE4RDAwMEQwMUE1MzgyNEExODcwMDBEQTYKLToxMDkxOTAwMDhGODYwMEJDQUNDOTAwMTBBQ0Q2MDAxNDkwQ0EwMDE4NzEKLToxMDkxQTAwMDAxNDNCMDI1QTBENjAwMTg4RjhGMDBCQzhGOTgwMEI4NUYKLToxMDkxQjAwMDhERTIwMDE4MDA0QkY4MjQwM0U4QzgyNUFERjkwMDE4MkIKLToxMDkxQzAwMDkzMTAwMDNFQTFGMDAwMUM4RjhFMDBCODhGOEQwMEJDNjQKLToxMDkxRDAwMDhGODcwMEQwOTVDNTAwMDRBNUE1MDAxRTBFMDAwMjBEQzYKLToxMDkxRTAwMDhDRTUwMDg0OEY4NzAwRDAwMDAyNjE0MDAwMDIyMTAwREUKLToxMDkxRjAwMDkwRUEwMEJDMDE4NDQ4MjEwMDQwMjgyMTMxNTYwMDAyMzkKLToxMDkyMDAwMDEyQzAwMDAzMDJFOTMwMjEwMDAyQjA4MDAwRDYzMDIxRjQKLToxMDkyMTAwMDkwRUMwMEJDMzE4NDAwMDQxMDgwMDAwMzMyRUEwMDAzQUIKLToxMDkyMjAwMDAwMDVDMDgwMDBEODMwMjEyNDA5MDAwNDhGOTcwMEJDQkQKLToxMDkyMzAwMDAxMkExMDIzMzA1RjAwMDMwMERGQzgyMUFFRjkwMDA0Q0IKLToxMDkyNDAwMDBFMDAwRDE5QTYyNTAwMzg4RjkwMDBEMDAzQzAxODIxRkMKLToxMDkyNTAwMDE0NjAwMDAyMDA2MEIwMjEwMDAwOTAyMTU2QzAwMDg2MUEKLToxMDkyNjAwMDhGOTcwMEI4MDAxMjg4MkI5NjA5MDAxMDAyOTU1MDIzQTIKLToxMDkyNzAwMDNDMTQwMDIwMDJBOTEwMjFBNjAyMDAxMEFGNTQwMDMwQjcKLToxMDkyODAwMDMxNTRGRkZGMDAwMDAwMDA5NjEzMDAxMDk2MUYwMDEyREIKLToxMDkyOTAwMDEzRjMwMDExMDAwMDAwMDA4RTE3MDAwQzhFMEMwMDA4NjQKLToxMDkyQTAwMDAwMTVDOTgwMDJGOTQwMjEwMDE5MjdDMzAxMTlCMDJCMEMKLToxMDkyQjAwMDAxODQ3ODIxMDFGNjU4MjFBRTA4MDAwQ0FFMEIwMDA4OUQKLToxMDkyQzAwMDAwMTRBODJCMDIzNTgwMjQxMjAwRkU2QjhGOTAwMEQwNzIKLToxMDkyRDAwMDBBMDAwRjQyMDAwMDAwMDA5NjBCMDAxNDhFMDUwMDA0RTcKLToxMDkyRTAwMDMxNjNGRkZGMDAwMzcwQzAwMEFFMzgyMUFGNDcwMDNDODAKLToxMDkyRjAwMDhFMDYwMDA0OEY0RDAwM0MwMENERjAyMzFCQzAwMDM2Q0QKLToxMDkzMDAwMDAwMDAwMDAwOEUwODAwMDAyNTAyMDAwMTNDMTYwMDEwM0QKLToxMDkzMTAwMDM2Q0YwMDA4QUY0MjAwMzhBRjRGMDAzMDAwMDAwMDAwRTkKLToxMDkzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKLToxMDkzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGNDQwMDAwNUEKLToxMDkzNDAwMDMwOEMwMDIwMTE4MEZGRkQwMDAwMDAwMDhGNTkwNDAwQzgKLToxMDkzNTAwMDNDMTcwMDIwQUUxOTAwMDg4RjU1MDQwNEFFMTUwMDBDMTAKLToxMDkzNjAwMEFGNTcwMDMwMDAwMDAwMDAzQzA2MDgwMDhDQzYwMDQ0RTcKLToxMDkzNzAwMDI0MTgwMDAxMTBEODAwRDMwMDAwMDAwMDk2MDcwMDEyNDYKLToxMDkzODAwMDNDMDUwODAwOENBNTAwNDAwMEE3NjgyMUE2MEQwMDEyMkUKLToxMDkzOTAwMDk2MUUwMDE0MjdDOTAwMDFBNjA5MDAxNDk2MDIwMDE0QTUKLToxMDkzQTAwMDMwNDRGRkZGNTQ4NkZGQzcwMDE0QTgyQjMwQTVGRkZGRjEKLToxMDkzQjAwMDBFMDAwRjFEQTYwMDAwMTQzQzAzMDgwMDhDNjMwMDI0NUYKLToxMDkzQzAwMDk2MDUwMDEyMDA0MzcwMjMwMEFFMzAyM0E2MDYwMDEyNUIKLToxMDkzRDAwMDBBMDAxMTQ4MDAxNEE4MkI4RTAyMDAwMDBBMDAxMTVCM0QKLToxMDkzRTAwMDNDMTYwMDEwOTE1NjAwMDEyNDEwMDAwMTAwMTY3ODQyMkUKLToxMDkzRjAwMDE1RjAwMDFDOTdBODAwMUU4RDVGMDAxNDI0MTFDMDAwRkEKLToxMDk0MDAwMDMzRkUzRkZGMDExMUM4MjQzQzE4MDgwMDhGMTgwMDYwOEMKLToxMDk0MTAwMDAzM0VCODI1MzJFNTNGRkYwMEI4NTAyQjExNDAwMDExNDQKLToxMDk0MjAwMEE3QjcwMDFFM0MxMDA4MDA4RTEwMDA1ODhGOEYwMEIwQTgKLToxMDk0MzAwMDAwMDU3MTgwMjQwQ0ZGODAwMjBGNjgyMTAxQUU0ODIxRDUKLToxMDk0NDAwMDMxMjQwMDdGMDEyQzU4MjQwMDlBMjgyMTNDMDIwMDBFNzAKLToxMDk0NTAwMEFGNEIwMDJDMDBBMjMwMjE5MEM3MDAwRDM0RTMwMDA0NzQKLToxMDk0NjAwMEEwQzMwMDBEMEUwMDBEM0IwMDAwMDAwMDhGOTAwMEQwNDcKLToxMDk0NzAwMDI0MDMwMDAxOEY5NzAwQjgyNkI5MDAwMTAwMTlBQzAwNDEKLToxMDk0ODAwMDAyNDM5MDIzMDAxNUFDMDMyNkY4MDA0MDAyQjMyMDJBQzMKLToxMDk0OTAwMDAwMTI4ODJCMjQwQzAwMDEwMzAwNTAyMTAwOTExMDI0OUQKLToxMDk0QTAwMEFGOTgwMEI4MEEwMDBGNzBBRkFDMDAxMDk1NTYwMDEyQ0MKLToxMDk0QjAwMDhGODQwMEIwMzJDNUZGRkYwRTAwMENFRUE3QjYwMDE0N0IKLToxMDk0QzAwMDhGOTAwMEQwMEEwMDExQjQwMDAwMTgyMThENTkwMDM4ODcKLToxMDk0RDAwMEE2MjAwMDA4MjQwNDAwMDNBRTM5MDAwMDhENTcwMDM0OTQKLToxMDk0RTAwMEEyMjAwMDBBOEY5ODAwQjhBRTM3MDAwNDNDMEYwMDgwMUQKLToxMDk0RjAwMDkzMEMwMDNGQTIyNDAwMEM4RTI4MDAwQzNDMEJGRjlGMTUKLToxMDk1MDAwMEEyMkMwMDBCMDEwRjE4MjUzNTZFRkZGRjNDMDVGRkVGNjUKLToxMDk1MTAwMDhGOTcwMEI4MDA2RTY4MjQzNEE3RkZGRjAxQTczMDI0OUUKLToxMDk1MjAwMEFFMjYwMDBDOEVGRTAwMTQ5NkZGMDAxMjhGODIwMEIwNTMKLToxMDk1MzAwMEFFM0UwMDEwOEVGMDAwMTRBRTIwMDAxOEFFMjAwMDIwQzkKLToxMDk1NDAwMEFFMzAwMDE0QUUyMDAwMjQ4RUU5MDAxODMzRjAzRkZGNDcKLToxMDk1NTAwMDAwMTA1MTgwQUUyOTAwMjg4RUY5MDAwODAxNDJDMDIxNzgKLToxMDk1NjAwMDMzRUMwMDAxQUUzOTAwMzA4RUVCMDAwQzhGODUwMEFDN0YKLToxMDk1NzAwMDAwMTg3OUMyMDAwQzIzODAwMUU0NDAyMTI0MEUwMDAyNkYKLToxMDk1ODAwMEE2MjgwMDFDQTYyMDAwMzZBRTJCMDAyQ0EwQUUwMDAwQTIKLToxMDk1OTAwMDk3NjcwMDNDOEY4QTAwQUMzQzAzNDIwMDMwRURGRkZGMzAKLToxMDk1QTAwMDAxQTMzMDI1QUQ0NjAwMDQ4RjlFMDBCODI0MDIwMDAxQkYKLToxMDk1QjAwMDI0MDhDMDAwOEZEMTAwMzgyNDA2MDAzNEFENTEwMDE4QjMKLToxMDk1QzAwMDhGQzkwMDM0QUQ0OTAwMUNBRDQwMDAwQ0FENDAwMDEwMDcKLToxMDk1RDAwMEE1NDAwMDE0QTU0MDAwMTZBNTQwMDAyMEE1NDAwMDIyOEIKLToxMDk1RTAwMEFENDAwMDI0QTU1NjAwMDJBMTQyMDAwMThGOUYwMEFDQUYKLToxMDk1RjAwMDhGOTkwMEI4OEY5ODAwQkNBRkY2MDAwODkzMzcwMDAwMzEKLToxMDk2MDAwMEEzMTcwMDAwOEY4QzAwQjg4RjhGMDBCQzkxODQwMDAxREQKLToxMDk2MTAwMEExRTQwMDAxOEY4RDAwQkM5NUFCMDAwMjAxNjg3MDI0QUQKLToxMDk2MjAwMDAxRDAyODI1QTVBNTAwMDI5MUE3MDAwMjMwRTMwMDNGNDQKLToxMDk2MzAwMEExQTMwMDAyOEY4MzAwRDA4Rjg0MDBCQzkwNzEwMEJDNzYKLToxMDk2NDAwMDMyM0UwMDAyNTNDMDAwMDEyNDA2MDAzMEFDODYwMDA0MDQKLToxMDk2NTAwMDhDNkYwMDdDMjQwM0ZGQkZBQzhGMDAwODkwODgwMDBENDYKLToxMDk2NjAwMDMxMEIwMDdGQTA4QjAwMEQ4Rjg3MDBCQzkwRUUwMDBEQUEKLToxMDk2NzAwMDAxQzMyODI0QTBFNTAwMEQ4RjlFMDBCQzkzQ0QwMDBERjIKLToxMDk2ODAwMDM1QTYwMDIwQTNDNjAwMEQ4RjhBMDBCODhGOTEwMEJDQkMKLToxMDk2OTAwMDhENTAwMDIwQUUzMDAwMTA4RDQ5MDAyNEFFMjkwMDE0RkEKLToxMDk2QTAwMDhENDIwMDI4QUUyMjAwMTg4RDVGMDAyQ0FFM0YwMDFDQkEKLToxMDk2QjAwMDBFMDAwRDE5MDAwMDAwMDA4RjkwMDBEMDBBMDAxMTJFM0UKLToxMDk2QzAwMDAyQzAxODIxOTYwQTAwMTIzQzFGMDgwMDhGRkYwMDI0RDgKLToxMDk2RDAwMDAzRUE5ODIxQTYxMzAwMTIwQTAwMTE0ODAwMTRBODJCQ0YKLToxMDk2RTAwMEEwOEQwMDAxOEY4OTAwQUMyNDBDMDAwMUFEMkMwMDA4NzYKLToxMDk2RjAwMDBBMDAxMDQ4OEY4MzAwRDAyN0JERkZFMDNDMTgwODAwMDcKLToxMDk3MDAwMDhGMTgwMDUwQUZCMDAwMTBBRkJGMDAxOEFGQjEwMDE0RjkKLToxMDk3MTAwMEFGODQwMEIwOTM3MTAwNzQwMzA0NzgyMTI0MTBGRjgwOUIKLToxMDk3MjAwMDMxRUUwMDdGMzIyNTAwN0YwMUYwNTgyNDAxREE2ODIxRjQKLToxMDk3MzAwMDNDMEMwMDBBQTM4NTAwQzQwMUFDMjgyMUFGNEIwMDI0RDcKLToxMDk3NDAwMDk0QTkwMDEwOTc2ODAwMDY5MEE2MDA2MjAwODAzODIxNTYKLToxMDk3NTAwMDI0MDIwMDMwMDEwOTIwMjMzMEMzMDBGMEFGODUwMEQwN0YKLToxMDk3NjAwMDEwNjIwMDE5MzA5MEZGRkY5MEFFMDA2MjI0MERGRkYwRjAKLToxMDk3NzAwMDI0MEEwMDUwMDFBRTYwMjQzMThCMDBGRjExNkEwMDJGRDMKLToxMDk3ODAwMDAwMDAwMDAwMTYwMDAwMDcyNDFGMEMwMEFGNUYwMDI0M0IKLToxMDk3OTAwMDhGQjEwMDE0OEZCRjAwMTg4RkIwMDAxMDAzRTAwMDA4RDUKLToxMDk3QTAwMDI3QkQwMDIwMEUwMDBGMjMwMjAwMjAyMTI0MUYwQzAwRTMKLToxMDk3QjAwMEFGNUYwMDI0OEZCMTAwMTQ4RkJGMDAxODhGQjAwMDEwNkUKLToxMDk3QzAwMDAzRTAwMDA4MjdCRDAwMjA5NEEyMDBFMDk0QTQwMEUyN0EKLToxMDk3RDAwMDkwQkYwMTEzMDA4MjE4MjYzMDc5RkZGRjMzRTcwMEMwRTUKLToxMDk3RTAwMDE0RTAwMDA5MkYzMTAwMDExNjAwMDAzODAwMDAwMDAwQ0QKLToxMDk3RjAwMDU2MjBGRkU2MjQxRjBDMDAwRTAwMERERTAwMDAwMDAwQzYKLToxMDk4MDAwMDBBMDAxMjdBMjQxRjBDMDAxNjIwRkZERTAwMDAwMDAwNjAKLToxMDk4MTAwMDBFMDAwRERFMDAwMDAwMDAxNDQwRkZEQzI0MUYwQzAwRDEKLToxMDk4MjAwMDE2MDAwMDIyOEY4MzAwRDA5MDY5MDExMzMxMjIwMDNGN0YKLToxMDk4MzAwMEEwNjIwMTEzMEEwMDEyN0EyNDFGMEMwMDk0QUYwMEQ0MTYKLToxMDk4NDAwMDhGODYwMEQ0MDBFMDI4MjEyNDA0MDAwNTBFMDAwQzdGNDAKLToxMDk4NTAwMDMxRjBGRkZGMTQ0MDAwMDUyNDAzMDAwMzk3OTEwMEU2NTgKLToxMDk4NjAwMDAwMDAxODIxMjYyNUZGRkZBNzg1MDBFNjhGNTgwMUI4QzQKLToxMDk4NzAwMDA3MDBGRkZFM0MxOTYwMTNBRjQwMDE4MDI0MUYwQzAwNUQKLToxMDk4ODAwMEFGNTAwMTg0MDA3OTM4MjUzQzEwMTAwMEFGNDcwMTg4QTMKLToxMDk4OTAwMDhGQjEwMDE0QUY1MDAxQjhBRjVGMDAyNDhGQjAwMDEwM0IKLToxMDk4QTAwMDhGQkYwMDE4MDNFMDAwMDgyN0JEMDAyMDBFMDAwRjIzMjMKLToxMDk4QjAwMDAyMDAyMDIxNTA0MEZGQjUyNDFGMEMwMDhGODMwMEQwRjAKLToxMDk4QzAwMDkwNjkwMTEzMEEwMDEyQTMzMTIyMDAzRjBFMDAwRjIzRkEKLToxMDk4RDAwMDAyMDAyMDIxMTQ0MEZGQUQyNDFGMEMwMDEyMjAwMDA3QkQKLToxMDk4RTAwMDhGODMwMEQwOTA2ODAxMTMzMTA2MDAzRjM0QzIwMDQwREUKLToxMDk4RjAwMEEwNjIwMTEzMEEwMDEyN0EyNDFGMEMwMDBFMDAwRERFNzQKLToxMDk5MDAwMDAwMDAwMDAwNTA0MEZGQTEyNDFGMEMwMDhGODMwMEQwRjYKLToxMDk5MTAwMDkwNjgwMTEzMzEwNjAwM0YwQTAwMTJEMzM0QzIwMDQwQTAKLToxMDk5MjAwMEFGOUIwMEM4MDNFMDAwMDhBRjgwMDBFQzMwODlGRkZGNjgKLToxMDk5MzAwMDAwMDk0MDQyMkQwMjAwNDEwMDA5Mjk4MDE0NDAwMDAyMjQKLToxMDk5NDAwMDAwMDk1MDQwMjQwODAwNDAwMDA4Nzk0MDAwMDhDMEMwQzkKLToxMDk5NTAwMDAxRjg1ODIxMjU2NzAxQTgwMEVGNzAyMTI1Q0MwMDdGNzAKLToxMDk5NjAwMDI0MERGRjgwMDE4RDE4MjQwMDY1MzAyMTAwQ0EyODIxQjQKLToxMDk5NzAwMDI1NjQwMDg4MjQwQTAwODgzQzAxMDgwMEFDMkEwMDRDQjkKLToxMDk5ODAwMDNDMDEwODAwQUMyNDAwNTBBRjg1MDBENDNDMDEwODAwMjUKLToxMDk5OTAwMEFDMjkwMDYwM0MwMTA4MDBBQzI4MDA2NDNDMDEwODAwRDAKLToxMDk5QTAwMEFDMjcwMDU0M0MwMTA4MDBBQzIzMDA1ODNDMDEwODAwREYKLToxMDk5QjAwMEFDMjYwMDVDMDNFMDAwMDgwMDAwMDAwMDMwODMwMEZGREMKLToxMDk5QzAwMDMwQzZGRkZGMzBFNDAwRkY4RjQyMDFCODA0NDBGRkZFQzUKLToxMDk5RDAwMDAwMDM0QzAwMDEyNDM4MjUzQzA4NjAwMDAwRTgyMDI1RTUKLToxMDk5RTAwMDNDMDMxMDAwQUY0NTAxODBBRjQ2MDE4NEFGNDQwMTg4QkQKLToxMDk5RjAwMDAzRTAwMDA4QUY0MzAxQjg4Rjg2MDAxQzNDMDk2MDEyRTkKLToxMDlBMDAwMDM1MjcwMDEwOENDQjAwMDQzQzBDNjAwRTM1ODUwMDEwMEYKLToxMDlBMTAwMDMxNkEwMDA2MkQ0ODAwMDFBQ0U4MDBDNDhDQzQwMDA0ODMKLToxMDlBMjAwMEFDQTQzMTgwOENDMjAwMDg5NEMzMDAwMkFDQTIzMTg0ODMKLToxMDlBMzAwMDAzRTAwMDA4QTc4MzAwRTQzQzAzMDgwMDhDNjMwMDUwQTcKLToxMDlBNDAwMDhGODQwMEU4OEY4NjAwMUMyNDAyRkY4MDAwNjRDMDIxMDAKLToxMDlBNTAwMDAzMDJDODI0QUY1OTAwMjg4Q0NEMDAwNDMzMDUwMDdGRDEKLToxMDlBNjAwMDAwQkE3ODIxM0MwRTAwMEMwMUVFMjgyMUFDQUQwMDU4NjQKLToxMDlBNzAwMDhDQzgwMDA4QUY4NTAwRDAzQzA3NjAxMkFDQTgwMDVDMjEKLToxMDlBODAwMDhDQ0MwMDEwMzRFODAwMTBBQ0FDMDAwQzhDQ0IwMDBDN0IKLToxMDlBOTAwMEFDQUIwMDA4OTRBQTAwMTQzQzAyMDgwMDhDNDIwMDQ0QkQKLToxMDlBQTAwMDI1NDkwMDAxQTRBOTAwMTQ5NEE0MDAxNDMwODNGRkZGRTkKLToxMDlBQjAwMDEwNjIwMDE3OEY4NDAwRDAzQzBBMDgwMDhENEEwMDQwRDUKLToxMDlBQzAwMEE0QUEwMDEyOENDRTAwMThBQzhFMDAyNDhDQ0QwMDE0RjkKLToxMDlBRDAwMEFDOEQwMDIwOENDNzAwMThBQzg3MDAyQzhDQ0MwMDE0RjcKLToxMDlBRTAwMDI0MDYwMDAxQUM4QzAwMjg4RDBCMDBCQzUxNjYwMDFBQzYKLToxMDlBRjAwMDhEMDIwMEI0OEQwMjAwQjhBNDgyMDAzQTk0OEYwMDNBMUYKLToxMDlCMDAwMEE0OEYwMDNDOTQ4ODAwRDQwM0UwMDAwODMxMDJGRkZGREEKLToxMDlCMTAwMDNDMDkwODAwOEQyOTAwMjRBNEEwMDAxNDhGODQwMEQwRTMKLToxMDlCMjAwMEE0QTkwMDEyOENDRTAwMThBQzhFMDAyNDhDQ0QwMDE0OTkKLToxMDlCMzAwMEFDOEQwMDIwOENDNzAwMThBQzg3MDAyQzhDQ0MwMDE0OTYKLToxMDlCNDAwMDI0MDYwMDAxQUM4QzAwMjg4RDBCMDBCQzU1NjZGRkVBOTIKLToxMDlCNTAwMDhEMDIwMEI4OEQwMjAwQjRBNDgyMDAzQTk0OEYwMDNBQkUKLToxMDlCNjAwMEE0OEYwMDNDOTQ4ODAwRDQwM0UwMDAwODMxMDJGRkZGN0EKLToxMDlCNzAwMDhGODYwMDFDM0MwQzA4MDA4RDhDMDA1MDI0MEJGRjgwNEQKLToxMDlCODAwMDhDQ0QwMDA4M0MwMzAwMEMwMDBENTFDMDAxOEE0MDIxMUYKLToxMDlCOTAwMDAxMEI0ODI0QUY4QTAwRThBRjQ5MDAyODkwQzcwMDA3QUUKLToxMDlCQTAwMDMxMDUwMDdGMDBCQTEwMjEwMDQzMjgyMTMwRTQwMDA0NzEKLToxMDlCQjAwMDEwODAwMDJGQUY4NTAwRDA5MENGMDAwNzMxRUUwMDA4NTUKLToxMDlCQzAwMDExQzAwMDNDMDAwMDAwMDA4Q0Q5MDAwQzhDQzQwMDE0QjMKLToxMDlCRDAwMDAzMjRDMDJCMTMwMDAwMjYwMDAwMDAwMDhDQzIwMDBDRTAKLToxMDlCRTAwMEFDQTIwMDY0OENDRDAwMTgyNDAyRkZGOEFDQUQwMDY4NzQKLToxMDlCRjAwMDhDQ0MwMDEwQUNBQzAwODA4Q0NCMDAwQ0FDQUIwMDg0RTcKLToxMDlDMDAwMDhDQ0EwMDFDQUNBQTAwN0M5MEE5MDBCQzAxMjI0MDI0OTQKLToxMDlDMTAwMEEwQTgwMEJDOTBDMzAwMDczMDY3MDAwODEwRTAwMDA0NTMKLToxMDlDMjAwMDhGODUwMEQwOTBBRjAwQkMzNUVFMDAwMUEwQUUwMEJDMjcKLToxMDlDMzAwMDkwRDkwMDA3MzMzODAwMDExMzAwMDAwRjhGODQwMEQwNDMKLToxMDlDNDAwMDI0MDcwMDIwOTA4MjAwQkMzNDQ5MDAwMkEwODkwMEJDOTcKLToxMDlDNTAwMDhGODQwMEQwOTA4ODAwNjIzMTAzMDBGMDE0NjcwMDA2MDIKLToxMDlDNjAwMDI0MEEwMDM0QUM4QTAwQzAwQTAwMTNCNTAwMDAwMDAwQ0EKLToxMDlDNzAwMDBBMDAxMzhGOENDMjAwMTQ5MENCMDAwNzMxNjYwMDAyREIKLToxMDlDODAwMDEwQzAwMDA1MDAwMDAwMDA5MDhEMDBCQzM1QUMwMDA0NDEKLToxMDlDOTAwMEEwOEMwMEJDOEY4NDAwRDA5MDk4MDExMzMzMEYwMDNGM0MKLToxMDlDQTAwMEEwOEYwMTEzOEY4RTAwRDA5NUM1MDBENDAzRTAwMDA4NkIKLToxMDlDQjAwMDMwQTJGRkZGQUNBMDAwNjQwQTAwMTM5MDAwMDAwMDAwNzcKLToxMDlDQzAwMDI3QkRGRkQ4QUZCMDAwMTA4RjkwMDAxQ0FGQkYwMDI0OUQKLToxMDlDRDAwMEFGQjQwMDIwQUZCMjAwMThBRkIxMDAxNEFGQjMwMDFDOTYKLToxMDlDRTAwMDk2MTMwMDBFM0MwNzYwMEEzQzE0NjAwNjMyNjRGRkZGQzYKLToxMDlDRjAwMDM2OTMwMDEwMEUwMDEyRTIzNEY0MDQxMDhGODQwMEQ0NjYKLToxMDlEMDAwMDNDMTE2MDBFMEUwMDA5QkUzNjMxMDAxMDkyMEUwMDE1OTcKLToxMDlEMTAwMDNDMDcwODAwOENFNzAwNjAzQzEyNjAxMjMxQ0QwMDBGNTgKLToxMDlEMjAwMEEzOEQwMEYwOEUwRTAwMDQ4RTBEMDAwODk2MDgwMDEyMjAKLToxMDlEMzAwMDk2MUYwMDEwOTYxOTAwMUE5NjE4MDAxRTk2MEYwMDFDMDgKLToxMDlENDAwMDMxMENGRkZGMzNFQkZGRkYzMzJBRkZGRjMzMDlGRkZGMjcKLToxMDlENTAwMDMxRTZGRkZGM0MwMTA4MDBBQzJCMDA0MDNDMDEwODAwNEQKLToxMDlENjAwMEFDMkMwMDI0M0MwMTA4MDBBQzJBMDA0NEFFMjkzMTc4MTgKLToxMDlENzAwMEFFMjYzMTdDOTIwMjAwMTU5NjAzMDAxNjM2NTIwMDEwNzIKLToxMDlEODAwMDMwNDQwMEZGMzA2NUZGRkYzQzA2MDgwMDhDQzYwMDY0Q0QKLToxMDlEOTAwMEFFMjQzMTg4QUU0NTAwQjQ5MjA4MDAxNDk2MTkwMDE4MUMKLToxMDlEQTAwMDI0MUYwMDAxMDExRkMwMDQzMzJGRkZGRjNDMDUwODAwRTIKLToxMDlEQjAwMDhDQTUwMDU4QUU1ODAwQjhBRTRGMDBCQzkyMEMwMDE0RjEKLToxMDlEQzAwMEFGOEUwMEQ4QUY4RDAwREMzMThCMDBGRkFFNEIwMEMwRjIKLToxMDlERDAwMDkyMEEwMDE1QUU2NzAwNDhBRTY2MDA0QzMxNDkwMEZGOUMKLToxMDlERTAwMEFFNDkwMEM4QUU2NTAwN0MzQzAzMDgwMDhDNjMwMDUwOUYKLToxMDlERjAwMDNDMDQwODAwOEM4NDAwNEMzQzA4MDgwMDhEMDgwMDU0OEEKLToxMDlFMDAwMDNDMDIwODAwOEM0MjAwNUM4RkJGMDAyNEFFNjMwMDgwREYKLToxMDlFMTAwMDhGQjAwMDEwQUU4MzAwNzQ4RkIzMDAxQ0FFMjIzMTlDNTMKLToxMDlFMjAwMEFFNDIwMERDQUUyNzMxQTBBRTI2MzFBNEFFMjQzMThDODgKLToxMDlFMzAwMEFFMjMzMTkwQUUyODMxOTRBRTI1MzE5OEFFODcwMDUwRDQKLToxMDlFNDAwMEFFODYwMDU0QUU4NTAwNzA4RkIxMDAxNEFFNDcwMEUwQkUKLToxMDlFNTAwMEFFNDYwMEU0QUU0NDAwQ0NBRTQzMDBEMEFFNDgwMEQ0RTEKLToxMDlFNjAwMEFFNDUwMEQ4OEZCNDAwMjA4RkIyMDAxODAzRTAwMDA4ODAKLToxMDlFNzAwMDI3QkQwMDI4MjdCREZGRTBBRkIxMDAxNEFGQkYwMDE4MTkKLToxMDlFODAwMDI0MTEwMDAxMEUwMDA4NjhBRkIwMDAxMDEwNTEwMDA1NDkKLToxMDlFOTAwMDk3ODQwMEU2OTc4MzAwQ0MwMDgzMTAyQjE0NDAwMDA4QzEKLToxMDlFQTAwMDhGODUwMEQ0MjQwNzAwMDI4RkJGMDAxODhGQjEwMDE0RTMKLToxMDlFQjAwMDhGQjAwMDEwMDBFMDEwMjEwM0UwMDAwODI3QkQwMDIwNTMKLToxMDlFQzAwMDBFMDAwQzlEMjQwNDAwMDVBRjgyMDBFODEwNDBGRkY2NTAKLToxMDlFRDAwMDI0MDcwMDAyMEUwMDA4NkM4RjkwMDAxQzk3OUYwMEU2N0MKLToxMDlFRTAwMDhGOTkwMEU4OEY4RDAwQzgyN0VGMDAwMTI0MEUwMDUwRTUKLToxMDlFRjAwMEFGNTkwMDIwQTc4RjAwRTZBMUFFMDAwMDNDMEMwODAwN0YKLToxMDlGMDAwMDhEOEMwMDY0OEY4NjAwQzgyNDBBODAwMDAwMEM1RTAwREYKLToxMDlGMTAwMEFDQ0IwMDc0QTRDMDAwMDY5NEM5MDAwQTI0MUZGRjgwQzMKLToxMDlGMjAwMDNDMEQwMDBDMDEyQUMwMjRBNEQ4MDAwQTkwQzgwMDBBRTUKLToxMDlGMzAwMDI0MTgyMDAwMDExRjE4MjVBMEMzMDAwQThGODcwMEM4MUQKLToxMDlGNDAwMEEwRTAwMDc4OEY4NTAwQzgwMDAwMzgyMUEwQTAwMDgzMjEKLToxMDlGNTAwMDNDMDIwODAwOEM0MjAwNTA4Rjg0MDBFODAwNDQ3ODIxQzUKLToxMDlGNjAwMDAxRkZDODI0QUY1OTAwMjg5NjBCMDAwMjMxRUUwMDdGOTQKLToxMDlGNzAwMDAxREE2MDIxMDE4RDMwMjFBNENCMDBENDk2MEEwMDAyQzEKLToxMDlGODAwMEFGODYwMEQwM0MwRTAwMDQyNTQ5MjQwMUE0QzkwMEU2OTgKLToxMDlGOTAwMDhFMDgwMDA0QUNDODAwMDQ4RTAzMDAwOEFDQzMwMDAwQTcKLToxMDlGQTAwMEE0QzAwMDEwQTRDMDAwMTRBMEMwMDBEMDhGODUwMEQwQjEKLToxMDlGQjAwMDI0MDNGRkJGQTBBMDAwRDEzQzA0MDgwMDhDODQwMDY0RUYKLToxMDlGQzAwMDhGODIwMEQwQTA0NDAwRDI4RTFGMDAwQzhGOEEwMEQwNTgKLToxMDlGRDAwMDk3OEYwMEU0QUQ1RjAwMUM4RTE5MDAxMDI0MTAwMDMwMzQKLToxMDlGRTAwMEFENTkwMDE4QTU0MDAwMzBBNTUxMDA1NEE1NTEwMDU2QTgKLToxMDlGRjAwMEE1NEYwMDE2QUQ0RTAwNjhBRDU4MDA4MEFENTgwMDg0RTYKLToxMEEwMDAwMDkxNEQwMDYyMzFBQzAwMEYzNThCMDAxMEExNEIwMDYyMDYKLToxMEEwMTAwMDhGODYwMEQwOTBDOTAwNjMzMTI4MDA3RkEwQzgwMDYzRkMKLToxMEEwMjAwMDhGODQwMEQwMjQwNkZGRkY5MDg1MDA2MzAwQTMxMDI0RDYKLToxMEEwMzAwMEEwODIwMDYzOEY5MTAwRDAwMEUwMTAyMTkyM0YwMEJDMEQKLToxMEEwNDAwMDM3RjkwMDAxQTIzOTAwQkM4RjhBMDBEMDkzOEYwMEYwNEQKLToxMEEwNTAwMEFENTgwMDY0QUQ1MDAwQzA5MTRFMDBEMzAwMEY2OTAwQjAKLToxMEEwNjAwMDMxQ0MwMDBGMDE4RDU4MjVBMTRCMDBEMzhGODUwMEQwMzYKLToxMEEwNzAwMDhGODkwMERDQUNBOTAwRTg4Rjg4MDBEODhGQkYwMDE4NUEKLToxMEEwODAwMDhGQjEwMDE0OEZCMDAwMTAyN0JEMDAyMEFDQTgwMEVDRTkKLToxMEEwOTAwMEE0QTYwMEQ2QTRBMDAwRTBBNEEwMDBFMjAzRTAwMDA4NkIKLToxMEEwQTAwMDAwMDAwMDAwMjdCREZGRTBBRkIwMDAxMDhGOTAwMDFDNDMKLToxMEEwQjAwMEFGQjEwMDE0QUZCRjAwMTg4RTE5MDAwNDNDMTgwODAwOUYKLToxMEEwQzAwMDhGMTgwMDUwMjQwRkZGODAwMDE5ODlDMDAyMzg3MDIxQkEKLToxMEEwRDAwMDMxQ0QwMDdGMDFDRjYwMjQwMUJBNTAyMTNDMEIwMDBDMzAKLToxMEEwRTAwMEFGNEMwMDI4MDE0QjQwMjE5NTA5MDBENDk1MDQwMEQ2QkYKLToxMEEwRjAwMDhFMDcwMDA0MzEzMUZGRkZBRjg4MDBEMDBFMDAwOTM2MTMKLToxMEExMDAwMDAwMDcyMUMwOEUwNjAwMDQ4RjgzMDBDODAwMDYyOUMwMDYKLToxMEExMTAwMEFGNDUwMDIwOTA2NDAwM0UzMDgyMDA0MDE0NDAwMDA2QUQKLToxMEExMjAwMDhGODQwMEQwMzQxRkZGRkY5NDgzMDBENjMwNjJGRkZGN0UKLToxMEExMzAwMDE0NUYwMDA0MDAwMDAwMDA5NDg0MDBENjBFMDAwOENCRDkKLToxMEExNDAwMDMwODRGRkZGOEUwNTAwMDQwMjIwMzAyMThGQkYwMDE4RUQKLToxMEExNTAwMDhGQjEwMDE0OEZCMDAwMTAyNDA0MDAyMjAwMDAzODIxQjkKLToxMEExNjAwMDAwMDUyOUMwMEEwMDEzMDYyN0JEMDAyMDI3QkRGRkUwMTcKLToxMEExNzAwMEFGQjEwMDE0MzA5MUZGRkZBRkIwMDAxMEFGQkYwMDE4QjcKLToxMEExODAwMDEyMjAwMDFEMDAwMDgwMjE4Rjg2MDAxQzhDQzUwMDAwNUQKLToxMEExOTAwMDI0MDMwMDA2MDAwNTNGMDIwMDA1MTQwMjMwRTQwMDA3MTYKLToxMEExQTAwMDE0ODMwMDE1MzA0NTAwRkYyQ0E4MDAwNjExMDAwMDRENTcKLToxMEExQjAwMDAwMDU1ODgwM0MwQzA4MDAyNThDNUEwQzAxNkM1MDIxN0QKLToxMEExQzAwMDhENDkwMDAwMDEyMDAwMDgwMDAwMDAwMDhGOEUwMEVDODcKLToxMEExRDAwMDI0MEQwMDAxMTFDRDAwNTkwMDAwMDAwMDI2MEIwMDAxRTQKLToxMEExRTAwMDMxNzBGRkZGMjRDQTAwMjAwMjExMjAyQjAxNDAzMDIxRDIKLToxMEExRjAwMDE0ODBGRkU2QUY4QTAwMUMwMjAwMTAyMThGQkYwMDE4RjgKLToxMEEyMDAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwQkMKLToxMEEyMTAwMDkzODcwMENFMTRFMDAwMzgyNDA0MDAxNDBFMDAxM0M3MDYKLToxMEEyMjAwMDAwMDAwMDAwOEY4NjAwMUMyNDAyMDAwMTBBMDAxNTBFQTkKLToxMEEyMzAwMEFGODIwMEVDOEY4OTAwRUMyNDA4MDAwMjExMjgwMDNCNUIKLToxMEEyNDAwMDI0MDQwMDEzMDAwMDI4MjEwMDAwMzAyMTI0MDcwMDAxMEQKLToxMEEyNTAwMDBFMDAxMzA2MDAwMDAwMDAwQTAwMTUwRThGODYwMDFDNzkKLToxMEEyNjAwMDhGODcwMEVDMjQwNTAwMDIxNEU1RkZGNjI0MDQwMDEyOTkKLToxMEEyNzAwMDBFMDAxMzczMDAwMDAwMDA4Rjg1MDBFODAwNDAzMDIxQkQKLToxMEEyODAwMDI0MDQwMDEyMEUwMDEzMDYwMDAwMzgyMTBBMDAxNTBFRTcKLToxMEEyOTAwMDhGODYwMDFDOEY4MzAwRUMyNDFGMDAwMzE0N0ZGRkQwRTcKLToxMEEyQTAwMDI2MEIwMDAxMEUwMDEzMjUwMDAwMDAwMDhGODUwMEU4M0EKLToxMEEyQjAwMDAwNDAzMDIxMjQwMjAwMDIyNDA0MDAxMDAwMDAzODIxNTQKLToxMEEyQzAwMEFGODIwMEVDMEUwMDEzMDYwMDAwMDAwMDBBMDAxNTBFMUQKLToxMEEyRDAwMDhGODYwMDFDOEY4RjAwRUMyNDA2MDAwMjExRTYwMDBCMTUKLToxMEEyRTAwMDAwMDAwMDAwMjQwNDAwMTAwMDAwMjgyMTAwMDAzMDIxOUMKLToxMEEyRjAwMDBBMDAxNTJCMjQwNzAwMDEwMDAwMjgyMTBFMDAxMzA2NzgKLToxMEEzMDAwMDAwMDAzMDIxMEEwMDE1MEU4Rjg2MDAxQzBFMDAxNDM0NDgKLToxMEEzMTAwMDAwMDAwMDAwMTQ0MDAwMTI4Rjk5MDAxQzhGODYwMDFDNjIKLToxMEEzMjAwMDI0MDIwMDAzMEEwMDE1MEVBRjgyMDBFQzBFMDAxNEMwRDgKLToxMEEzMzAwMDAwMDAwMDAwMEEwMDE1MEU4Rjg2MDAxQzBFMDAxMzE1ODkKLToxMEEzNDAwMDAwMDAwMDAwMjQwMjAwMDIyNDA0MDAxNDAwMDAyODIxNjAKLToxMEEzNTAwMDAwMDAzMDIxMDAwMDM4MjEwQTAwMTU0OEFGODIwMEVDQ0YKLToxMEEzNjAwMDAwNDAzODIxMjQwNDAwMTA5NzM4MDAwMjAwMDAyODIxMDIKLToxMEEzNzAwMDBFMDAxMzA2MzMwNkZGRkYwQTAwMTUwRThGODYwMDFDMjEKLToxMEEzODAwMDhGODQwMEM4M0MwNzdGRkYzNEU2RkZGRjhDODUwMDc0OTQKLToxMEEzOTAwMDI0MDIwMDAxMDBBNjE4MjRBQzgzMDA3NDAzRTAwMDA4MjYKLToxMEEzQTAwMEEwODIwMDA1MTBBMDAwMzYyQ0EyMDA4MDI3NEEwNDAwREQKLToxMEEzQjAwMDNDMEIwMDA1MjQwOTAwODAxMDQwMDAwNzI0MDgwMDgwQTEKLToxMEEzQzAwMDMwQTYwMDBGMDBDNTQwMjEyRDAzMDA4MTE0NjAwMDAyNUIKLToxMEEzRDAwMDAwQTA0ODIxMjQwODAwODBBRjRCMDAzMDAwMDAwMDAwOUUKLToxMEEzRTAwMDAwMDAwMDAwMDAwMDAwMDAxMTAwMDAwOTAwMDAzODIxRkEKLToxMEEzRjAwMDAxNDAzMDIxOEM4RDAwMDAyNEU3MDAwNDAwRTg2MDJCMzAKLToxMEE0MDAwMEFDQ0QwMDAwMjQ4NDAwMDQxNTgwRkZGQTI0QzYwMDA0QUIKLToxMEE0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDMEUwMDA2RUMKLToxMEE0MjAwMDAxMEUzODI1QUY0NzAwMzAwMDAwMDAwMDAwMDAwMDAwOUEKLToxMEE0MzAwMDAwMDAwMDAwOEY0RjAwMDAzMUU4MDAxMDExMDBGRkZEMDgKLToxMEE0NDAwMDAwMDAwMDAwOEY0MjAwM0M4RjQzMDAzQzAwNDlDODIxQkYKLToxMEE0NTAwMDAzMjNDMDJCMTMwMDAwMDQwMDAwMDAwMDhGNEMwMDM4QzEKLToxMEE0NjAwMDI1ODYwMDAxQUY0NjAwMzg4RjQ3MDAzQzAwQTkyODIzMEQKLToxMEE0NzAwMDAwRTk2ODIxQUY0RDAwM0MxNEEwRkZDRTJDQTIwMDgwNjMKLToxMEE0ODAwMDAzRTAwMDA4MDAwMDAwMDAyN0JERkZEMDNDMDIwMDAyRUUKLToxMEE0OTAwMEFGQjEwMDE0M0MxMTAwMENBRjQ1MDAzOEFGQjMwMDFDNDUKLToxMEE0QTAwMEFGNDYwMDNDMDA4MDk4MjFBRjQyMDAzMDI0MDUwMDg4NzAKLToxMEE0QjAwMEFGNDQwMDI4MDM1MTIwMjFBRkJGMDAyOEFGQjUwMDI0Q0UKLToxMEE0QzAwMEFGQjQwMDIwQUZCMjAwMTgwRTAwMTU4MEFGQjAwMDEwN0UKLToxMEE0RDAwMDNDMUYwODAwOEZGRjAwNEMzQzE4MDgwMDhGMTgwMDY0RDgKLToxMEE0RTAwMDI0MTBGRjgwMDNGM0E4MjEzMkI5MDA3RjAyQjA3ODI0NDIKLToxMEE0RjAwMDAwMThBMEMwMDMzQTcwMjEwMDE4OTE0MDAxRDEyMDIxMUEKLToxMEE1MDAwMEFGNEYwMDI4MEUwMDE1ODAwMjU0MjgyMTNDMEQwODAwOTIKLToxMEE1MTAwMDhEQUQwMDUwMjQwNTAxMjAwMUIzNTgyMTMxNkMwMDdGMUUKLToxMEE1MjAwMDAxNzA1MDI0MDE5QTQ4MjEwMTMxMjAyMTBFMDAxNTgwMkMKLToxMEE1MzAwMEFGNEEwMDI4M0MwODA4MDA4RDA4MDA1NDNDMDUwODAwN0MKLToxMEE1NDAwMDhDQTUwMDY0MDExMzM4MjEzMEU2MDA3RjAwRjAxODI0NDgKLToxMEE1NTAwMDAwREEyMDIxMDA5MTIwMjFBRjQzMDAyODBFMDAxNTgwNTEKLToxMEE1NjAwMDAwMDUyOTQwM0MwMjA4MDA4QzQyMDA1ODNDMTAwODAwQkQKLToxMEE1NzAwMDhFMTAwMDYwMTIwMDAwMUMwMDUzODgyMTI0MTVGRjgwRkIKLToxMEE1ODAwMDBBMDAxNjAzM0MxNDAwMEMzMjI2MDA3RjAyMzUxODI0MDIKLToxMEE1OTAwMDAwREEyMDIxMDI0MDI4MjFBRjQzMDAyODAwOTQyMDIxMjYKLToxMEE1QTAwMDBFMDAxNTgwMjYxMEZGQzAxMjAwMDAwRjAyMzI4ODIxMTUKLToxMEE1QjAwMDJFMDUwMDQxMTBBMEZGRjQyNDEyMTAwMDMyMjYwMDdGNjcKLToxMEE1QzAwMDAwMTA5MTgwMDIzNTE4MjQwMERBMjAyMTAyNDAyODIxNTEKLToxMEE1RDAwMEFGNDMwMDI4MDA5NDIwMjEwRTAwMTU4MDAwMDA4MDIxNDgKLToxMEE1RTAwMDE2MDBGRkYzMDIzMjg4MjEzQzBCMDgwMDhENkIwMDVDRTMKLToxMEE1RjAwMDI0MEFGRjgwMjQwNTAwMDIwMTczNDAyMTAxMEE0ODI0MzcKLToxMEE2MDAwMEFGNDkwMDI4M0MwNDA4MDA5NDg0MDA2MjMxMTAwMDdGQTgKLToxMEE2MTAwMDAyMUE4ODIxM0MwNzAwMEMwRTAwMENDRDAyMjc5ODIxNUQKLToxMEE2MjAwMDAwNDAyODIxMDI2MDIwMjE4RkJGMDAyODhGQjUwMDI0MjAKLToxMEE2MzAwMDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0QUMKLToxMEE2NDAwMDhGQjAwMDEwMEEwMDE1ODAyN0JEMDAzMDhGODMwMDFDREEKLToxMEE2NTAwMDhDNjIwMDA0MTA0MDAwMDMwMDAwMDAwMDAzRTAwMDA4Q0EKLToxMEE2NjAwMDAwMDAwMDAwOEM2NDAwMTA4QzY1MDAwODBBMDAxNUI5MTkKLTowNEE2NzAwMDhDNjYwMDBDRTgKLTowQ0E2NzQwMDAwMDAwMDAwMDAwMDAwMUIwMDAwMDAwRkIwCi06MTBBNjgwMDAwMDAwMDAwQTAwMDAwMDA4MDAwMDAwMDYwMDAwMDAwNUFECi06MTBBNjkwMDAwMDAwMDAwNTAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwM0FBCi06MTBBNkEwMDAwMDAwMDAwMzAwMDAwMDAzMDAwMDAwMDMwMDAwMDAwMzlFCi06MTBBNkIwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjkyCi06MTBBNkMwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjgyCi06MTBBNkQwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjcyCi06MTBBNkUwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMTYzCi06MDhBNkYwMDAwMDAwMDAwMTAwMDAwMDAxNjAKLTowOEE2RjgwMDA4MDAwRjU4MDgwMDBEQjAyNgotOjEwQTcwMDAwMDgwMDBGRUMwODAwMTA5NDA4MDAwRjgwMDgwMDBGQzAyQwotOjEwQTcxMDAwMDgwMDExQ0MwODAwMERDQzA4MDAxMUYwMDgwMDBFMUMzOAotOjEwQTcyMDAwMDgwMDE2MzAwODAwMTVEODA4MDAwRENDMDgwMDBEQ0MyNAotOjEwQTczMDAwMDgwMDBEQ0MwODAwMTI3QzA4MDAxMjdDMDgwMDBEQ0MyQgotOjEwQTc0MDAwMDgwMDBEQ0MwODAwMTU3QzA4MDAwRENDMDgwMDBEQ0NDRAotOjEwQTc1MDAwMDgwMDBEQ0MwODAwMERDQzA4MDAxM0VDMDgwMDBEQ0M0RgotOjEwQTc2MDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0M2NQotOjEwQTc3MDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0M1NQotOjEwQTc4MDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0M0NQotOjEwQTc5MDAwMDgwMDBEQ0MwODAwMEZFMDA4MDAwRENDMDgwMDBEQ0MxRgotOjEwQTdBMDAwMDgwMDE1MkMwODAwMERDQzA4MDAwRENDMDgwMDBEQ0NCRAotOjEwQTdCMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0MxNQotOjEwQTdDMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0MwNQotOjEwQTdEMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0NGNQotOjEwQTdFMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAxNDU4MDgwMDBEQ0M1MgotOjEwQTdGMDAwMDgwMDBEQ0MwODAwMTM3MDA4MDAxMkUwMDgwMDJFQTAxRAotOjEwQTgwMDAwMDgwMDJFQTgwODAwMkU3MDA4MDAyRTdDMDgwMDJFODg1NAotOjEwQTgxMDAwMDgwMDJFOTQwODAwNDZDMDA4MDAzRjBDMDgwMDQ2NDA3RgotOjEwQTgyMDAwMDgwMDQ2QzAwODAwNDZDMDA4MDA0NEMwMDgwMDQ2QzBGMgotOjEwQTgzMDAwMDgwMDQ3MDgwODAwNTUzMDA4MDA1NEYwMDgwMDU0QkNEMAotOjBDQTg0MDAwMDgwMDU0OTAwODAwNTQ2QzA4MDA1NDI4RDQKLTowNEE4NEMwMDBBMDAwQzc2N0MKLToxMEE4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcyNzg3MDM1NUMKLToxMEE4NjAwMDJFMzAyRTMwNkEzMzAwMDAwNTAwMDAwMzAwMDAwMDAwODcKLToxMEE4NzAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMEE4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEE4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEE4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEE4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEE4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMEE4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKLToxMEE4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKLToxMEE4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKLToxMEE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKLToxMEE5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKLToxMEE5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKLToxMEE5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKLToxMEE5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMEE5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKLToxMEE5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKLToxMEE5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMEE5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMEE5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKLToxMEE5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMEE5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMEE5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMEE5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMEE5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKLToxMEE5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMEFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKLToxMEFBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKLToxMEFBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKLToxMEFBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMEFBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLToxMEFBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKLToxMEFBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKLToxMEFBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKLToxMEFBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKLToxMEFBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKLToxMEFBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKLToxMEFBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKLToxMEFBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKLToxMEFBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKLToxMEFBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKLToxMEFBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKLToxMEFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKLToxMEFCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKLToxMEFCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKLToxMEFCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKLToxMEFCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLToxMEFCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKLToxMEFCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKLToxMEFCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKLToxMEFCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKLToxMEFCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKLToxMEFCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKLToxMEFCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKLToxMEFCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKLToxMEFCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKLToxMEFCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKLToxMEFCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKLToxMEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKLToxMEFDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKLToxMEFDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKLToxMEFDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKLToxMEFDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLToxMEFDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKLToxMEFDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKLToxMEFDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKLToxMEFDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKLToxMEFDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKLToxMEFDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKLToxMEFDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKLToxMEFDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKLToxMEFDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKLToxMEFDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKLToxMEFDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKLToxMEFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKLToxMEFEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKLToxMEFEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKLToxMEFEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKLToxMEFENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKLToxMEFENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKLToxMEFENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKLToxMEFENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMEFEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKLToxMEFEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKLToxMEFEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKLToxMEFEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKLToxMEFEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKLToxMEFERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKLToxMEFERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKLToxMEFERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKLToxMEFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKLToxMEFFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMEFFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKLToxMEFFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKLToxMEFFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLToxMEFFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKLToxMEFFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKLToxMEFFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKLToxMEFFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKLToxMEFFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKLToxMEFFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKLToxMEFFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKLToxMEFFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKLToxMEFFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKLToxMEFFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKLToxMEFFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKLToxMEFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKLToxMEFGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKLToxMEFGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKLToxMEFGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLToxMEFGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLToxMEFGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKLToxMEFGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKLToxMEFGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKLToxMEFGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKLToxMEFGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKLToxMEFGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKLToxMEFGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKLToxMEFGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKLToxMEFGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKLToxMEFGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKLToxMEFGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKLToxMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKLToxMEIwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKLToxMEIwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKLToxMEIwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLToxMEIwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLToxMEIwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKLToxMEIwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKLToxMEIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKLToxMEIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKLToxMEIwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKLToxMEIwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKLToxMEIwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKLToxMEIwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKLToxMEIwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKLToxMEIwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMEIwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKLToxMEIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKLToxMEIxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKLToxMEIxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKLToxMEIxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKLToxMEIxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKLToxMEIxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKLToxMEIxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKLToxMEIxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKLToxMEIxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKLToxMEIxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKLToxMEIxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKLToxMEIxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMEIxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKLToxMEIxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKLToxMEIxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMEIxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKLToxMEIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKLToxMEIyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMEIyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKLToxMEIyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMEIyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMEIyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKLToxMEIyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKLToxMEIyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKLToxMEIyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKLToxMEIyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKLToxMEIyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKLToxMEIyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKLToxMEIyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKLToxMEIyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKLToxMEIyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKLToxMEIyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKLToxMEIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKLToxMEIzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKLToxMEIzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKLToxMEIzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKLToxMEIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKLToxMEIzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKLToxMEIzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKLToxMEIzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMEIzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKLToxMEIzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMEIzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMEIzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMEIzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMEIzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKLToxMEIzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKLToxMEIzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKLToxMEI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKLToxMEI0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKLToxMEI0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKLToxMEI0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKLToxMEI0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKLToxMEI0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKLToxMEI0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKLToxMEI0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKLToxMEI0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKLToxMEI0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKLToxMEI0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKLToxMEI0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKLToxMEI0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKLToxMEI0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKLToxMEI0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKLToxMEI0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKLToxMEI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKLToxMEI1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKLToxMEI1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKLToxMEI1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIKLToxMEI1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKLToxMEI1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKLToxMEI1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKLToxMEI1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKLToxMEI1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKLToxMEI1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKLToxMEI1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKLToxMEI1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKLToxMEI1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKLToxMEI1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKLToxMEI1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUIKLToxMEI1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKLToxMEI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKLToxMEI2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKLToxMEI2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKLToxMEI2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKLToxMEI2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMEI2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKLToxMEI2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKLToxMEI2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKLToxMEI2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKLToxMEI2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKLToxMEI2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKLToxMEI2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKLToxMEI2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKLToxMEI2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKLToxMEI2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKLToxMEI2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKLToxMEI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKLToxMEI3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKLToxMEI3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKLToxMEI3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLToxMEI3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMEI3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMEI3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKLToxMEI3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKLToxMEI3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMEI3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKLToxMEI3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKLToxMEI3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKLToxMEI3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLToxMEI3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEI3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKLToxMEI3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKLToxMEI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLToxMEI4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKLToxMEI4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMEI4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLToxMEI4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMEI4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMEI4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMEI4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEI4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEI4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEI4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEI4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMEI4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKLToxMEI4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKLToxMEI4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKLToxMEI4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKLToxMEI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKLToxMEI5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKLToxMEI5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKLToxMEI5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMEI5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKLToxMEI5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKLToxMEI5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMEI5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMEI5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKLToxMEI5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMEI5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMEI5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMEI5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMEI5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKLToxMEI5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMEI5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKLToxMEJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKLToxMEJBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKLToxMEJBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMEJBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLToxMEJBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKLToxMEJBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKLToxMEJBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKLToxMEJBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKLToxMEJBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKLToxMEJBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKLToxMEJBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKLToxMEJBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKLToxMEJBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKLToxMEJBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKLToxMEJBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKLToxMEJBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKLToxMEJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKLToxMEJCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKLToxMEJCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKLToxMEJCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLToxMEJCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKLToxMEJCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKLToxMEJCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKLToxMEJCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKLToxMEJCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKLToxMEJCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKLToxMEJCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKLToxMEJCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKLToxMEJCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKLToxMEJCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKLToxMEJCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKLToxMEJCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKLToxMEJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKLToxMEJDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKLToxMEJDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKLToxMEJDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLToxMEJDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKLToxMEJDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKLToxMEJDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKLToxMEJDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKLToxMEJDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKLToxMEJDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKLToxMEJDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKLToxMEJDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKLToxMEJDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKLToxMEJDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKLToxMEJDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKLToxMEJDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKLToxMEJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKLToxMEJEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKLToxMEJEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKLToxMEJEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKLToxMEJENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKLToxMEJENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKLToxMEJENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMEJENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKLToxMEJEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKLToxMEJEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKLToxMEJEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKLToxMEJEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKLToxMEJEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKLToxMEJERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKLToxMEJERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKLToxMEJERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKLToxMEJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMEJFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKLToxMEJFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKLToxMEJFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLToxMEJFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKLToxMEJFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKLToxMEJFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKLToxMEJFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKLToxMEJFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKLToxMEJFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKLToxMEJFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKLToxMEJFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKLToxMEJFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKLToxMEJFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKLToxMEJFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKLToxMEJFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKLToxMEJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKLToxMEJGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKLToxMEJGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLToxMEJGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLToxMEJGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKLToxMEJGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKLToxMEJGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKLToxMEJGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKLToxMEJGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKLToxMEJGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKLToxMEJGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKLToxMEJGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKLToxMEJGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKLToxMEJGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKLToxMEJGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKLToxMEJGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKLToxMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKLToxMEMwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKLToxMEMwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLToxMEMwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLToxMEMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKLToxMEMwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKLToxMEMwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKLToxMEMwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKLToxMEMwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKLToxMEMwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKLToxMEMwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKLToxMEMwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKLToxMEMwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKLToxMEMwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMEMwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKLToxMEMwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKLToxMEMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKLToxMEMxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKLToxMEMxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKLToxMEMxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKLToxMEMxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKLToxMEMxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKLToxMEMxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKLToxMEMxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKLToxMEMxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKLToxMEMxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKLToxMEMxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMEMxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKLToxMEMxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKLToxMEMxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMEMxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKLToxMEMxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKLToxMEMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMEMyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKLToxMEMyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMEMyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMEMyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKLToxMEMyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKLToxMEMyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKLToxMEMyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKLToxMEMyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKLToxMEMyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKLToxMEMyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKLToxMEMyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKLToxMEMyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKLToxMEMyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKLToxMEMyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKLToxMEMyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKLToxMEMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKLToxMEMzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKLToxMEMzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKLToxMEMzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKLToxMEMzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKLToxMEMzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKLToxMEMzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMEMzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKLToxMEMzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMEMzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMEMzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMEMzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMEMzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKLToxMEMzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKLToxMEMzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKLToxMEMzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKLToxMEM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKLToxMEM0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKLToxMEM0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKLToxMEM0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKLToxMEM0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKLToxMEM0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKLToxMEM0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKLToxMEM0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKLToxMEM0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKLToxMEM0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKLToxMEM0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKLToxMEM0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKLToxMEM0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKLToxMEM0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKLToxMEM0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKLToxMEM0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKLToxMEM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKLToxMEM1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKLToxMEM1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIKLToxMEM1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKLToxMEM1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKLToxMEM1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKLToxMEM1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKLToxMEM1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKLToxMEM1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKLToxMEM1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKLToxMEM1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKLToxMEM1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKLToxMEM1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKLToxMEM1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUIKLToxMEM1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKLToxMEM1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKLToxMEM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKLToxMEM2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKLToxMEM2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKLToxMEM2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMEM2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKLToxMEM2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKLToxMEM2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKLToxMEM2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKLToxMEM2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKLToxMEM2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKLToxMEM2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKLToxMEM2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKLToxMEM2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKLToxMEM2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKLToxMEM2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKLToxMEM2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKLToxMEM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKLToxMEM3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKLToxMEM3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLToxMEM3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMEM3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMEM3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKLToxMEM3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKLToxMEM3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMEM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKLToxMEM3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKLToxMEM3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKLToxMEM3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLToxMEM3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEM3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKLToxMEM3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKLToxMEM3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKLToxMEM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKLToxMEM4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMEM4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLToxMEM4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMEM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMEM4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMEM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEM4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEM4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEM4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEM4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMEM4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKLToxMEM4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKLToxMEM4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKLToxMEM4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKLToxMEM4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLToxMEM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKLToxMEM5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKLToxMEM5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMEM5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKLToxMEM5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKLToxMEM5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMEM5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMEM5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKLToxMEM5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMEM5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMEM5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMEM5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMEM5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKLToxMEM5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMEM5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKLToxMEM5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKLToxMENBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKLToxMENBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMENBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLToxMENBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKLToxMENBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKLToxMENBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKLToxMENBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKLToxMENBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKLToxMENBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKLToxMENBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKLToxMENBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKLToxMENBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKLToxMENBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKLToxMENBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKLToxMENBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKLToxMENBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKLToxMENCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKLToxMENCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKLToxMENCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLToxMENCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKLToxMENCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKLToxMENCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKLToxMENCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKLToxMENCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKLToxMENCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKLToxMENCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKLToxMENCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKLToxMENCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKLToxMENCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKLToxMENCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKLToxMENCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKLToxMENCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKLToxMENDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKLToxMENDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKLToxMENDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLToxMENDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKLToxMENDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKLToxMENDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKLToxMENDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKLToxMENDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKLToxMENDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKLToxMENDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKLToxMENDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKLToxMENDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKLToxMENDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKLToxMENDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKLToxMENDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKLToxMENDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKLToxMENEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKLToxMENEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKLToxMENEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKLToxMENEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKLToxMENENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKLToxMENENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMENENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKLToxMENENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKLToxMENEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKLToxMENEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKLToxMENEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKLToxMENEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKLToxMENEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKLToxMENERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKLToxMENERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKLToxMENERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKLToxMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKLToxMENFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKLToxMENFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLToxMENFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKLToxMENFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKLToxMENFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKLToxMENFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKLToxMENFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKLToxMENFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKLToxMENFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKLToxMENFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKLToxMENFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKLToxMENFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKLToxMENFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKLToxMENFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKLToxMENFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMENGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKLToxMENGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLToxMENGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLToxMENGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKLToxMENGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKLToxMENGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKLToxMENGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKLToxMENGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKLToxMENGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKLToxMENGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKLToxMENGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKLToxMENGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKLToxMENGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKLToxMENGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKLToxMENGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKLToxMENGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKLToxMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKLToxMEQwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLToxMEQwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLToxMEQwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKLToxMEQwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKLToxMEQwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKLToxMEQwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKLToxMEQwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKLToxMEQwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKLToxMEQwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKLToxMEQwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKLToxMEQwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKLToxMEQwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMEQwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKLToxMEQwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKLToxMEQwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKLToxMEQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKLToxMEQxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKLToxMEQxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKLToxMEQxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKLToxMEQxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKLToxMEQxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKLToxMEQxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKLToxMEQxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKLToxMEQxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKLToxMEQxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMEQxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKLToxMEQxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKLToxMEQxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMEQxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKLToxMEQxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKLToxMEQxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKLToxMEQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKLToxMEQyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMEQyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMEQyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKLToxMEQyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKLToxMEQyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKLToxMEQyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKLToxMEQyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKLToxMEQyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKLToxMEQyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKLToxMEQyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKLToxMEQyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKLToxMEQyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKLToxMEQyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKLToxMEQyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKLToxMEQyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMEQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKLToxMEQzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKLToxMEQzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKLToxMEQzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKLToxMEQzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKLToxMEQzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMEQzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKLToxMEQzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMEQzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMEQzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMEQzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMEQzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKLToxMEQzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKLToxMEQzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKLToxMEQzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKLToxMEQzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKLToxMEQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKLToxMEQ0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKLToxMEQ0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKLToxMEQ0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKLToxMEQ0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKLToxMEQ0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKLToxMEQ0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKLToxMEQ0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKLToxMEQ0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKLToxMEQ0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKLToxMEQ0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKLToxMEQ0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKLToxMEQ0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKLToxMEQ0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKLToxMEQ0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKLToxMEQ0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKLToxMEQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKLToxMEQ1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIKLToxMEQ1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKLToxMEQ1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKLToxMEQ1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKLToxMEQ1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKLToxMEQ1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKLToxMEQ1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKLToxMEQ1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKLToxMEQ1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKLToxMEQ1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKLToxMEQ1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKLToxMEQ1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUIKLToxMEQ1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKLToxMEQ1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKLToxMEQ1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKLToxMEQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKLToxMEQ2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKLToxMEQ2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMEQ2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKLToxMEQ2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKLToxMEQ2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKLToxMEQ2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKLToxMEQ2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKLToxMEQ2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKLToxMEQ2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKLToxMEQ2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKLToxMEQ2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKLToxMEQ2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKLToxMEQ2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKLToxMEQ2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKLToxMEQ2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKLToxMEQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKLToxMEQ3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLToxMEQ3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMEQ3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMEQ3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKLToxMEQ3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKLToxMEQ3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMEQ3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKLToxMEQ3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKLToxMEQ3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKLToxMEQ3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLToxMEQ3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEQ3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKLToxMEQ3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKLToxMEQ3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKLToxMEQ3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKLToxMEQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMEQ4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLToxMEQ4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMEQ4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMEQ4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMEQ4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEQ4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEQ4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEQ4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEQ4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMEQ4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKLToxMEQ4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKLToxMEQ4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKLToxMEQ4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKLToxMEQ4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLToxMEQ4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKLToxMEQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKLToxMEQ5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMEQ5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKLToxMEQ5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKLToxMEQ5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMEQ5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMEQ5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKLToxMEQ5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMEQ5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMEQ5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMEQ5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMEQ5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKLToxMEQ5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMEQ5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKLToxMEQ5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKLToxMEQ5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKLToxMERBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMERBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLToxMERBMjAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMzAwMDAwMDAwRTMKLToxMERBMzAwMDAwMDAwMDBEMDAwMDAwMEQzQzAyMDgwMDI0NDI3MTQwNkYKLToxMERBNDAwMDNDMDMwODAwMjQ2Mzc1RTBBQzQwMDAwMDAwNDMyMDJCMzkKLToxMERBNTAwMDE0ODBGRkZEMjQ0MjAwMDQzQzFEMDgwMDM3QkQ3RkZDRkMKLToxMERBNjAwMDAzQTBGMDIxM0MxMDA4MDAyNjEwMzFEODNDMUMwODAwMEYKLToxMERBNzAwMDI3OUM3MTQwMEUwMDEwRUQwMDAwMDAwMDAwMDAwMDBEMUEKLToxMERBODAwMDMwQTVGRkZGMzBDNjAwRkYyNzQzMDE4MDhGNDIwMUI4NTkKLToxMERBOTAwMDA0NDBGRkZFMjQwMjAwMDJBQzY0MDAwMEE0NjUwMDA4RkMKLToxMERBQTAwMEEwNjYwMDBBQTA2MjAwMEIzQzAyMTAwMEFDNjcwMDE4RTAKLToxMERBQjAwMDAzRTAwMDA4QUY0MjAxQjgzQzAzNjAwMDhDNjI0RkY4RkQKLToxMERBQzAwMDA0NDBGRkZFM0MwMjAyMDBBQzY0NEZDMEFDNjI0RkM0OTUKLToxMERBRDAwMDNDMDIxMDAwMDNFMDAwMDhBQzYyNEZGODk0ODIwMDBDOTYKLToxMERBRTAwMDI0ODYwMDE0MDBBMDM4MjEwMDAyMTMwMjAwMDIxMDgwRDYKLToxMERBRjAwMDAwODI0MDIxMDBDODEwMkIxMDQwMDA1NzAwMDAwMDAwOTkKLToxMERCMDAwMDkwQzMwMDAwMkM2MjAwMDk1MDQwMDA1MTkwQzIwMDAxRjcKLToxMERCMTAwMDAwMDMxMDgwM0MwMzA4MDAyNDYzNzBGMDAwNDMxMDIxRDAKLToxMERCMjAwMDhDNDIwMDAwMDA0MDAwMDgwMDAwMDAwMDkwQzMwMDAxOEIKLToxMERCMzAwMDI0MDIwMDBBMTQ2MjAwM0EwMDAwMDAwMDAxMDYxMDIzQ0IKLToxMERCNDAwMDJDNDIwMDBBMTQ0MDAwMzYyNEM2MDAwMjhDRTIwMDAwNzkKLToxMERCNTAwMDM0NDIwMTAwQUNFMjAwMDA5MEMyMDAwMDkwQzMwMDAxMUEKLToxMERCNjAwMDkwQzQwMDAyOTBDNTAwMDMwMDAzMUMwMDAwMDIxNjAwRDAKLToxMERCNzAwMDAwNDMxMDI1MDAwNDIyMDAwMDQ0MTAyNTAwNDUxMDI1MTQKLToxMERCODAwMDI0QzYwMDA0QUNFMjAwMDQ5MEMyMDAwMDkwQzMwMDAxNkYKLToxMERCOTAwMDkwQzQwMDAyOTBDNTAwMDMwMDAyMTYwMDAwMDMxQzAwQTAKLToxMERCQTAwMDAwNDMxMDI1MDAwNDIyMDAwMDQ0MTAyNTAwNDUxMDI1RTQKLToxMERCQjAwMDI0QzYwMDA0MEEwMDBDQUFBQ0UyMDAwODkwQzMwMDAxQ0QKLToxMERCQzAwMDI0MDIwMDA0MTQ2MjAwMTYyNEM2MDAwMjkwQzIwMDAwNjEKLToxMERCRDAwMDkwQzQwMDAxOENFMzAwMDAwMDAyMTIwMDAwNDQxMDI1RjQKLToxMERCRTAwMDM0NjMwMDA0MjRDNjAwMDJBQ0UyMDAwQzBBMDAwQ0FBNTQKLToxMERCRjAwMEFDRTMwMDAwOTBDMzAwMDEyNDAyMDAwMzE0NjIwMDA4OUIKLToxMERDMDAwMDI0QzYwMDAyOENFMjAwMDA5MEMzMDAwMDI0QzYwMDAxN0MKLToxMERDMTAwMDM0NDIwMDA4QTBFMzAwMTAwQTAwMENBQUFDRTIwMDAwQTUKLToxMERDMjAwMDAzRTAwMDA4MjQwMjAwMDE5MEMzMDAwMTI0MDIwMDAyNjYKLToxMERDMzAwMDEwNjIwMDAyMjRDNDAwMDIwMTAwMjAyMTBBMDAwQ0FBODQKLToxMERDNDAwMDAwODAzMDIxMEEwMDBDQUEyNEM2MDAwMTkwQzIwMDAxMDUKLToxMERDNTAwMDBBMDAwQ0FBMDBDMjMwMjEwM0UwMDAwODAwMDAxMDIxRDUKLToxMERDNjAwMDI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDBFMDAxMUZFREIKLToxMERDNzAwMDAwODA4MDIxOTM2MjAwMDUyNDAzRkZGRTAyMDAyMDIxMjIKLToxMERDODAwMDAwNDMxMDI0OEZCRjAwMTQ4RkIwMDAxMEEzNjIwMDA1NjIKLToxMERDOTAwMDBBMDAxMjA3MjdCRDAwMTgyN0JERkZFOEFGQjAwMDEwMkIKLToxMERDQTAwMEFGQkYwMDE0MEUwMDBGMTgwMDgwODAyMTkzNjIwMDAwQTcKLToxMERDQjAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAwNDI0MDIwMTAwRkEKLToxMERDQzAwMEFGNDIwMTgwMEEwMDBEMjIwMjAwMjAyMUFGNDAwMTgwRjYKLToxMERDRDAwMDAyMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMDBBMDAwRjc5QkUKLToxMERDRTAwMDI3QkQwMDE4MjdCREZGODBBRkJFMDA3OEFGQjcwMDc0MTYKLToxMERDRjAwMEFGQjMwMDY0QUZCRjAwN0NBRkI2MDA3MEFGQjUwMDZDQ0YKLToxMEREMDAwMEFGQjQwMDY4QUZCMjAwNjBBRkIxMDA1Q0FGQjAwMDU4MTQKLToxMEREMTAwMDhGNTAwMTI4OTM2MzAwM0Y5MzYyMDAwNTAwMDBGMDIxQkIKLToxMEREMjAwMDMwNzMwMEZGMDAwMjEwMjczMDQyMDAwMTAwMDBCODIxQ0MKLToxMEREMzAwMDE0NDAwMDY2QUZBMDAwNTA5MzQyMDExNjkzNDMwMTEyQjUKLToxMERENDAwMDMwNDIwMEZGMzA2MzAwRkYwMzQyMjAyMTAzNDMxMDIxRDMKLToxMERENTAwMDI0NDU0MDAwOEY4MjAwMTgxMDQwMDAxODI0OTE0MDAwOTQKLToxMERENjAwMDhGNDIwMTA0M0MwMzAwMDEwMDQzMTAyNDEwNDAwMDEzQzMKLToxMERENzAwMDAwMDAwMDAwOENBMzAwMEM4RjYyMDAzMDE0NjIwMUI1MUIKLToxMEREODAwMDI0MDIwMDAxOENBMzAwMTA4RjYyMDAyQzE0NjIwMUIxRTgKLToxMEREOTAwMDI0MDIwMDAxOTc2MjAwM0E5NDgzNDAwMDMwNDJGRkZGNjIKLToxMEREQTAwMDE0NjIwMUFDMjQwMjAwMDE5NzYyMDAzODk2MjMwMDAyM0QKLToxMEREQjAwMDMwNDJGRkZGMTQ2MjAxQTcyNDAyMDAwMTkzNjIwMDAwQjkKLToxMEREQzAwMDMwNDMwMEZGMjQwMjAwMjAxMDYyMDAwNTI0MDIwMDUwQUUKLToxMERERDAwMDEwNjIwMDA2MDAwMDAwMDAwQTAwMEQ2QzAwMDAwMDAwNDgKLToxMERERTAwMDAwMDAwMDBEMEEwMDBENzVBRkEwMDAzMDNDMUUwODAwQjkKLToxMERERjAwMDI3REU3MUEwMEEwMDBENzVBRkEwMDAzMDNDMDIwODAwQkMKLToxMERFMDAwMDhDNDIwMERDMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMERDMTIKLToxMERFMTAwMDBFMDAxMkM4MDAwMDAwMDAwQTAwMEYwMzhGQkYwMDdDMzQKLToxMERFMjAwMDhGNDIwMTA0M0MwMzAwMjA5MjM0MDAwRDAwNDMxMDI0NzMKLToxMERFMzAwMDAwMDIyMDJCMDAwNDIxNDBBRkE0MDAzMDhGNDMwMTA0RDYKLToxMERFNDAwMDNDMDIwMDQwMDA2MjE4MjQxNDYwMDAwMjM0ODcwMDQwNDUKLToxMERFNTAwMDAwODAzODIxMzI4MjAwMjBBRkE3MDAzMDE0NDAwMDAyMzkKLToxMERFNjAwMDM0RTYwMDgwMDBFMDMwMjExMEMwMDAwQkFGQTYwMDMwODcKLToxMERFNzAwMDkzQzUwMDA4OEY2NzAwNEMwMjAwMjAyMTAwMDUyQjAwOEQKLToxMERFODAwMDM0QTUwMDgxMzBBNUYwODEwRTAwMEM4RDMwQzYwMEZGNTYKLToxMERFOTAwMDBBMDAwRjAwMDAwMDAwMDA5MzYyMDAzRTMwNDIwMDQwODQKLToxMERFQTAwMDEwNDAwMDBFMjQwMjAwMDQ1NjYyMDAwNjI0MDIwMDEyRjQKLToxMERFQjAwMDAyMDAyMDIxMEUwMDEzRDYwMjIwMzAyMTBBMDAwRjAzOTkKLToxMERFQzAwMDhGQkYwMDdDMTY2MjAwMDUwMDAwMDAwMDBFMDAwRDEzREQKLToxMERFRDAwMDAwMDAyMDIxMEEwMDBGMDM4RkJGMDA3Qzk3NDMwMTFBMjYKLToxMERFRTAwMDk2MjQwMDBFOTM2MjAwMzUzMjg1MDAwNDMwNzZGRkZGRTEKLToxMERFRjAwMDAwNDQyMDA0QUZBNDAwNTQ4RTMyMDAwNDEwQTAwMDE1OEEKLToxMERGMDAwMDhFMzUwMDA4OTM2MjAwM0UzMDQyMDA0MDEwNDAwMDA3MEEKLToxMERGMTAwMDAwMDAwMDAwMEUwMDEzMTgwMjQwMjAyMTEwNDAwMDBERTgKLToxMERGMjAwMDAwMDAwMDAwMEEwMDBGMDAwMDAwMDAwMDhGNjIwMDQ0QTMKLToxMERGMzAwMDAyNDIxMDIzMDQ0MDAxNDUwMDAwMDAwMDhGNjIwMDQ4QTcKLToxMERGNDAwMDAyNDIxMDIzMDQ0MTAxNDEyNDA0MDAxNjBBMDAwRTAzN0EKLToxMERGNTAwMDhGQzIwMDA0OEY2MjAwNDgwMjQyMTAyMzA0NDAwMDA4NzAKLToxMERGNjAwMDAwMDAwMDAwM0MwMjA4MDA4QzQyMzEwMDI0NDIwMDAxMDUKLToxMERGNzAwMDNDMDEwODAwQUMyMjMxMDAwQTAwMEVGNTAwMDAwMDAwNTAKLToxMERGODAwMDhGNjIwMDQwMDI0MjEwMjMxODQwMDAwOTI0MDIwMDBDNTYKLToxMERGOTAwMDNDMDIwODAwOEM0MjMxMDAzMjk0MDBGQzAwMDBCMDIxQTkKLToxMERGQTAwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMzEwMDI0MDIwMDBDOTQKLToxMERGQjAwMEFGQTIwMDMwOEY2MjAwNDAwMDUyMjAyMzE4ODAwMDBENzUKLToxMERGQzAwMDAyQzQxMDJBMTQ0MDAxMTYwMDAwMDAwMDE0OTYwMDA2MzYKLToxMERGRDAwMDAyQzQxMDIzM0E4MjAwMDEzMDQyMDAwMTE0NDAwMTEwQjMKLToxMERGRTAwMDAwMDAwMDAwMDJDNDEwMjMwMjQ0OTAyMTBBMDAwREVCM0YKLToxMERGRjAwMDMwNTZGRkZGMDAwMDIwMjEzMjgyMDAwMjEwNDAwMDFBM0MKLToxMEUwMDAwMDMyODIwMDEwOTM2MjAwM0UzMDQyMDA0MDUwNDAwMDExQzYKLToxMEUwMTAwMDhGQzIwMDA0MEUwMDExRkUwMjAwMjAyMTI0MDIwMDE4MEQKLToxMEUwMjAwMEEzNjIwMDNGOTM2MjAwMDUyNDAzRkZGRTAyMDAyMDIxNEIKLToxMEUwMzAwMDAwNDMxMDI0MEUwMDEyMDdBMzYyMDAwNTI0MDQwMDM5RDcKLToxMEUwNDAwMDAwMDAyODIxMEUwMDEzMDEyNDA2MDAxODBBMDAwRjAyMDgKLToxMEUwNTAwMDI0MDIwMDAxMjQwNDAwMTcwMDQwRjgwOTAwMDAwMDAwMTkKLToxMEUwNjAwMDBBMDAwRjAyMjQwMjAwMDExMDQwMDBGODAwMDAwMDAwMjYKLToxMEUwNzAwMDhGNjMwMDRDOEY2MjAwNTQwMkEyMTAyMzFDNDAwMEYzRjcKLToxMEUwODAwMDAyQTMxMDIzMDQ0MjAwMDEwMDYwQTgyMUFGQTQwMDE4REQKLToxMEUwOTAwMEFGQjIwMDEwQUZCNjAwMTQ5MzQyMDEyMDhGNjUwMDQwNkMKLToxMEUwQTAwMDk3NjMwMDNDMzA0MjAwRkYwMzQyMTAyMTAwNDQxMDIxREUKLToxMEUwQjAwMDhGQTQwMDU0MzA2M0ZGRkYyNDQyNDAwMDAwODMxODJCREMKLToxMEUwQzAwMDhGQTQwMDMwQUZBMjAwMjBBRkE1MDAyODAwODMyMDI1MzgKLToxMEUwRDAwMEFGQTQwMDMwQUZBNTAwMjRBRkEwMDAyQ0FGQjUwMDM0MzIKLToxMEUwRTAwMDkzNjIwMDNFMzA0MjAwMDg1MDQwMDAxMThGQzIwMDAwOTEKLToxMEUwRjAwMDAyMjAyMDIxMjdBNTAwMzgwRTAwMENBNEFGQTAwMDM4NzQKLToxMEUxMDAwMDU0NDAwMDBCOEZDMjAwMDA4RkEyMDAzODMwNDIwMTAwNDMKLToxMEUxMTAwMDUwNDAwMDA3OEZDMjAwMDA4RkEzMDAzQzhGNjIwMDYwNTgKLToxMEUxMjAwMDAwNjIxMDIzMDQ0MzAwMDFBRjYzMDA2MDhGQzIwMDAwNEYKLToxMEUxMzAwMDAwNDBGODA5MjdBNDAwMTA4RkEyMDAzMDMwNDIwMDAyRUUKLToxMEUxNDAwMDU0NDAwMDAxMzI5NDAwRkU5MzYyMDAzRTMwNDIwMDQwOTEKLToxMEUxNTAwMDEwNDAwMDM3OEZBMzAwMTQ4RjYyMDA1NDE2QTIwMDFBREIKLToxMEUxNjAwMDMyODIwMDAxMjQwMjAwMTQxMjYyMDAxMDJBNjIwMDE1OUIKLToxMEUxNzAwMDEwNDAwMDA2MjQwMjAwMTYyNDAyMDAwQzEyNjIwMDA3NjAKLToxMEUxODAwMDMyODIwMDAxMEEwMDBFNUYwMDAwMDAwMDEyNjIwMDA1RUEKLToxMEUxOTAwMDMyODIwMDAxMEEwMDBFNUYwMDAwMDAwMDBBMDAwRTVBRTEKLToxMEUxQTAwMDI0MTcwMDBFMEEwMDBFNUEyNDE3MDAxMDBBMDAwRTVFRjMKLToxMEUxQjAwMDI0MTcwMDEyOTM2MjAwMjMyNDAzRkZCRDAwNDMxMDI0QTAKLToxMEUxQzAwMEEzNjIwMDIzMzI4MjAwMDExMDQwMDAxOThGQTMwMDE0QzMKLToxMEUxRDAwMDI0MDIwMDBDMTI2MjAwMEUyQTYyMDAwRDEwNDAwMDA2OUMKLToxMEUxRTAwMDI0MDIwMDBFMjQwMjAwMEExMjYyMDAwNzhGQTIwMDI0RkIKLToxMEUxRjAwMDBBMDAwRTc3MjQ0MjAwMDExMjYyMDAwODhGQTIwMDI0NTgKLToxMEUyMDAwMDBBMDAwRTc3MjQ0MjAwMDEwQTAwMEU3NTI0MTcwMDA4NDgKLToxMEUyMTAwMDI0MDIwMDBFMTZFMjAwMDIyNDE3MDAxNjI0MTcwMDEwMzQKLToxMEUyMjAwMDhGQTIwMDI0MjQ0MjAwMDFBRkEyMDAyNDhGQTMwMDE0NzcKLToxMEUyMzAwMDhGQTIwMDI0OEY3MzAwNDAwMDQzMTAyMUFGNjIwMDQwODIKLToxMEUyNDAwMDhGQTIwMDU0OTM2NDAwMzY4RjYzMDA0MDAyQTI4ODIxOUQKLToxMEUyNTAwMDM0MDJGRkZGMDA4MjEwMDQwMDYyMTgyMUFGNjMwMDQ4RkYKLToxMEUyNjAwMDhGQTYwMDMwMzBDMjAwMDgxMDQwMDAwRTAwMDAwMDAwRjEKLToxMEUyNzAwMDhGNjIwMDU4MTYyMjAwMDQzMEM2MDBGRjk3NDIwMTFBMzAKLToxMEUyODAwMDUwNDAwMDAxMzRDNjAwMTA5M0M1MDAwODhGQTcwMDM0MjkKLToxMEUyOTAwMDAyMDAyMDIxMDAwNTJCMDAzNEE1MDA4MDBFMDAwQzhEMEIKLToxMEUyQTAwMDMwQTVGMDgwOEY2MjAwNDAwMDUzMTAyMzE4NDAwMDE3MDMKLToxMEUyQjAwMDhGQTIwMDE4M0MwMjA4MDA4QzQyMzE5ODMwNDIwMDEwQjYKLToxMEUyQzAwMDEwNDAwMDA5MjQwMjAwMDE5NzYyMDA2ODE0NDAwMDA2MTMKLToxMEUyRDAwMDI0MDIwMDAxQTc2MjAwNjg5NzQyMDA3QTI0NDIwMDBBRTMKLToxMEUyRTAwMDBBMDAwRUJCQTc2MjAwMTJBNzYyMDAxMjBFMDAxMUZFMDgKLToxMEUyRjAwMDAyMDAyMDIxOTM2MjAwN0QyNDAzMDAwMTAyMDAyMDIxRkUKLToxMEUzMDAwMDM0NDIwMDAxMEEwMDBFQjlBRkEzMDA1MDE4NDAwMDBBQzEKLToxMEUzMTAwMDAwMDAwMDAwMEUwMDExRkUwMjAwMjAyMTkzNjIwMDdEMkIKLToxMEUzMjAwMDI0MDMwMDAxMDIwMDIwMjFBRkEzMDA1MDM0NDIwMDA0NjYKLToxMEUzMzAwMDBFMDAxMjA3QTM2MjAwN0Q5MzYyMDAzRTMwNDIwMDQwNEYKLToxMEUzNDAwMDE0NDAwMDBDMzI4MjAwMDExMDQwMDAwQTAwMDAwMDAwNUUKLToxMEUzNTAwMDhGNjMwMDQwOEZDMjAwMDQyNDA0MDAxODI0NjMwMDAxNkUKLToxMEUzNjAwMDAwNDBGODA5QUY2MzAwNDA4RkEyMDAzMDBBMDAwRjAyOUUKLToxMEUzNzAwMDMwNDIwMDA0OEY2MjAwNTgxMDUxMDAxMDAwMDAwMDAwNkQKLToxMEUzODAwMDhGNjIwMDE4MDI0MjEwMjMxQzQwMDAwODI0MDQwMDAxODAKLToxMEUzOTAwMDhGNjIwMDE4MTY0MjAwMDkwMDAwMDAwMDhGNjIwMDFDMDYKLToxMEUzQTAwMDAyQTIxMDIzMDQ0MDAwMDUwMDAwMDAwMEFGNzEwMDU4RDUKLToxMEUzQjAwMEFGQTQwMDUwQUY3MjAwMThBRjc1MDAxQzEyRTAwMDBCNDQKLToxMEUzQzAwMDhGQTIwMDUwMEUwMDExRkUwMjAwMjAyMUEzNzcwMDNGMTMKLToxMEUzRDAwMDBFMDAxMjA3MDIwMDIwMjEwMkUwMzAyMTI0MDQwMDM3NDEKLToxMEUzRTAwMDBFMDAxMzAxMDAwMDI4MjE4RkEyMDA1MDEwNDAwMDAzRUUKLToxMEUzRjAwMDAwMDAwMDAwMEUwMDBDOUIwMjAwMjAyMTEyQzAwMDA1NEUKLToxMEU0MDAwMDAwMDAxODIxOEZBMjAwMzAzMDQyMDAwNDUwNDAwMDExNUIKLToxMEU0MTAwMDAwNjAxMDIxMjQwMzAwMDEwQTAwMEYwMjAwNjAxMDIxOTcKLToxMEU0MjAwMDBFMDAxMUZFMDIwMDIwMjE5MzYyMDA3RDAyMDAyMDIxRDcKLToxMEU0MzAwMDM0NDIwMDA0MEUwMDEyMDdBMzYyMDA3RDBFMDAwQzlCMDQKLToxMEU0NDAwMDAyMDAyMDIxMEEwMDBGMDIyNDAyMDAwMUFGNDAwMDQ0MTQKLToxMEU0NTAwMDI0MDIwMDAxOEZCRjAwN0M4RkJFMDA3ODhGQjcwMDc0NEMKLToxMEU0NjAwMDhGQjYwMDcwOEZCNTAwNkM4RkI0MDA2ODhGQjMwMDY0RjYKLToxMEU0NzAwMDhGQjIwMDYwOEZCMTAwNUM4RkIwMDA1ODAzRTAwMDA4REQKLToxMEU0ODAwMDI3QkQwMDgwOEM4NzAwMDQ4Qzg2MDAwMDAwMDAxMDIxQ0UKLToxMEU0OTAwMDAwRTUzODIxMDBFNTI4MkIwMEMyMzAyMTAwQzUzMDIxREQKLToxMEU0QTAwMEFDODcwMDA0MDNFMDAwMDhBQzg2MDAwMDhGNDIwMUI4OEUKLToxMEU0QjAwMDA0NDBGRkZFMjQwMjA4MDBBRjQyMDFCODAzRTAwMDA4NTgKLToxMEU0QzAwMDAwMDAwMDAwM0MwMjAwMDgwMzQyMjgyMTk0QTIwMDQ4RkEKLToxMEU0RDAwMDMwODRGRkZGMTA0MDAwMUIyNDg0MDAxMjk0QTIwMDQ4RTcKLToxMEU0RTAwMDMwNDJGRkZGMDA0NDEwMkExMDQwMDAxNzI0MDIwMDAzQUUKLToxMEU0RjAwMDI0MDIwMDFBOTM0MzAxMjBBMzQyMDE4QjhGODIwMDAwNjMKLToxMEU1MDAwMDMwNjMwMEZGMzA0MjQwMDAxMDQwMDAwOTI0NjNGRkZFRUEKLToxMEU1MTAwMDk0QTIwMDQ4MzA0MkZGRkYwMDQzMTAyQjE0NDAwMDA1MzYKLToxMEU1MjAwMDhGODIwMDA0QTc0MzAxOTQwQTAwMEYzQzM0NDIwMDAxOEIKLToxMEU1MzAwMDhGODIwMDA0MjQwM0ZGRkUwMDQzMTAyNDAzRTAwMDA4NDAKLToxMEU1NDAwMEFGODIwMDA0MjQwMjAwMDMwM0UwMDAwOEEzNDIwMThCMTEKLToxMEU1NTAwMDI3QkRGRkUwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwOUMKLToxMEU1NjAwMEFGQkYwMDFDMzBCMUZGRkYzMEQwRkZGRjMwRjJGRkZGMjQKLToxMEU1NzAwMDhGNDIwMUI4MDQ0MEZGRkUwMDAwMDAwMEFGNDQwMTgwNUMKLToxMEU1ODAwMEFGNDQwMDIwMEUwMDBGMUUwMjAwMjAyMThGODMwMDAwRTgKLToxMEU1OTAwMDhGODQwMDA0QTc1MTAxOENBNzUwMDE4RUE3NDMwMTkwREUKLToxMEU1QTAwMDhGODMwMDA4MzA4MjgwMDBBRjQzMDFBOEE3NTIwMTg4MDIKLToxMEU1QjAwMDEwNDAwMDBFOEY4MjAwMDQ5MzQyMDExNjMwNDIwMEZDOEUKLToxMEU1QzAwMDI0NDIwMDA0MDA1QTEwMjE4QzQyNDAwMDMwNDJGRkZGRDgKLToxMEU1RDAwMDE0NDAwMDA2OEY4MjAwMDQzQzAyRkZGRjM0NDI3RkZGOUMKLToxMEU1RTAwMDAwODIxMDI0QUY4MjAwMDQ4RjgyMDAwNDI0MDNCRkZGNDYKLToxMEU1RjAwMDAwNDMxMDI0QTc0MjAxQTY5NzQzMDEwQzhGNDIwMTA0NTcKLToxMEU2MDAwMDAwMDMxQzAwMzA0MkZGRkYwMDYyMTgyNUFGNDMwMUFDM0QKLToxMEU2MTAwMDNDMDIxMDAwQUY0MjAxQjg4RkJGMDAxQzhGQjIwMDE4M0YKLToxMEU2MjAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwNTgKLToxMEU2MzAwMDNDMDIwODAwOEM0MjAwMzgyN0JERkZDOEFGQjIwMDI4NUEKLToxMEU2NDAwMEFGQkYwMDMwQUZCMzAwMkNBRkIxMDAyNEFGQjAwMDIwOUIKLToxMEU2NTAwMDAwMDA5MDIxM0MwRTA4MDAyNUNFMDAzODE0NDAwMDAyMzYKLToxMEU2NjAwMDI0NERGRkZGMDAwMDY4MjE4Rjg0MDAwMDMwODI0MDAwQUQKLToxMEU2NzAwMDEwNDAwMDBBMzA4MjgwMDAzQzAyMDAyMDAwODIxMDI0RkEKLToxMEU2ODAwMDUwNDAwMDA2MzA4MjgwMDA4RjgyMDAwNDI0MDNCRkZGQzgKLToxMEU2OTAwMDAwODMxODI0MEEwMDBGOUQzNDQyMTAwMDEwNDAwMDBBMjUKLToxMEU2QTAwMDNDMDIwMDIwMDA4MjEwMjQxMDQwMDAwNzhGODIwMDA0RUEKLToxMEU2QjAwMDNDMDNGRkZGMzQ2MzdGRkYwMDgzMTgyNDM0NDI4MDAwNTMKLToxMEU2QzAwMEFGODIwMDA0QUY4MzAwMDA4RjQ4MDA3MDkzNDIwMTEyQjQKLToxMEU2RDAwMDhGODYwMDAwMzA0MjAwRkYwMDAyMjg4MjMwQzIwMTAwMTUKLToxMEU2RTAwMDEwNDAwMDQzMjRBNDAwMDMzMEMyNDAwMDEwNDAwMDEwM0EKLToxMEU2RjAwMDMwQzIyMDAwMDAwNDEwODAwMDVBMTAyMThDNDM0MDAwREEKLToxMEU3MDAwMDI0QTQwMDA0MDAwNDEwODBBRkEzMDAxMDAwNUExMDIxQkMKLToxMEU3MTAwMDhDNDI0MDAwQUZBMjAwMTQ5MzQyMDExNjMwNDIwMEZDMkMKLToxMEU3MjAwMDAwNUExMDIxOEM0MjQwMDAwQTAwMEZDNEFGQTIwMDE4MEEKLToxMEU3MzAwMDEwNDAwMDJGMDAwNDEwODAwMDVBMTAyMThDNDM0MDAwMkMKLToxMEU3NDAwMDI0QTQwMDA0MDAwNDEwODBBRkEzMDAxMDAwNUExMDIxN0MKLToxMEU3NTAwMDhDNDI0MDAwQUZBMDAwMThBRkEyMDAxNDhGQTkwMDE4OEYKLToxMEU3NjAwMDAwMDAzODIxMDAwMDIwMjEyNDBDMDAwODI3QUIwMDEwRjUKLToxMEU3NzAwMDNDMEEwODAwMjU0QTAxMDAwMTY0MTAyMTE0OEMwMDAzQTIKLToxMEU3ODAwMDAwMDQyQTAwMTEyMDAwMEEwMDAwMDAwMDkwNDIwMDAwNEUKLToxMEU3OTAwMDI0ODQwMDAxMkM4MzAwMEMwMEEyMTAyMTAwMDIxMDgwQjAKLToxMEU3QTAwMDAwNEExMDIxOEM0MjAwMDAxNDYwRkZGMzAwRTIzODI2N0EKLToxMEU3QjAwMDNDMDQwODAwOEM4NDMxMDQ4RjQyMDA3MDJDODMwMDIwQkMKLToxMEU3QzAwMDEwNjAwMDA5MDA0ODQwMjMzQzAzMDgwMDI0NjMzMTA4MUUKLToxMEU3RDAwMDAwMDQxMDgwMDA0MzEwMjEyNDgzMDAwMUFDNDgwMDAwOTUKLToxMEU3RTAwMDNDMDEwODAwQUMyMzMxMDQwQTAwMEZFRkFGODcwMDA4OUEKLToxMEU3RjAwMDk3NDMwMTFFOTc0MjAxMUMzMDYzRkZGRjAwMDIxNDAwODMKLToxMEU4MDAwMDAwNjIxODI1QUY4MzAwMDg5NzQyMDEwQzhGNDM0MDAwMzcKLToxMEU4MTAwMDMwNDRGRkZGMzQwMkZGRkYxNDYyMDAwMzAwMDAwMDAwRDkKLToxMEU4MjAwMDBBMDAwRkZCMjQxMjAwMjA4RjQyNDAwMDMwNDIwMTAwRkEKLToxMEU4MzAwMDU0NDAwMDAxMjQxMjAwMTAzMEMyMTAwMDUwNDAwMDE0NTcKLToxMEU4NDAwMDM2NTIwMDAxMzBDMjAwMjAxNDQwMDAwQjNDMDIxMDAwODAKLToxMEU4NTAwMDAwQzIxMDI0NTA0MDAwMEUzNjUyMDAwMTNDMDMwRTAwNEUKLToxMEU4NjAwMDNDMDIwREZGMDBDMzE4MjQzNDQyRkZGRjAwNDMxMDJCNkQKLToxMEU4NzAwMDUwNDAwMDA3MzY1MjAwMDEzQzAyMDgwMDhDNDIwMDJDMzgKLToxMEU4ODAwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMDAyQzM2NTIwMDA1NTUKLToxMEU4OTAwMDNDMDUwODAwOENBNTAwMzQ1NEEwMDAyNDhGODQwMDAwOUYKLToxMEU4QTAwMDhGODIwMDBDNTQ0MDAwMjE4Rjg0MDAwMDhGODIwMDA0NkUKLToxMEU4QjAwMDMwNDI0MDAwNTQ0MDAwMUQ4Rjg0MDAwMDNDMDIxRjAxODQKLToxMEU4QzAwMDAwQzI4ODI0M0MwMjEwMDA1NjIyMDAxODhGODQwMDAwRTkKLToxMEU4RDAwMDMwODIwMjAwMTQ0MDAwMTU4Rjg0MDAwMDk3NTAwMTBFMTIKLToxMEU4RTAwMEFGNDAwMTgwQUY0MDAwMjAyNjEwMDAwNDMyMTBGRkZGMkYKLToxMEU4RjAwMDBFMDAwRjFFMDIwMDIwMjE4RjgzMDAwNDI0MDJCRkZGQTAKLToxMEU5MDAwMDM2NDQwMDAyMDA2MjE4MjQyNDAyMDAwMkE3NDIwMThDNEYKLToxMEU5MTAwMDhGODIwMDAwQTc1MDAxOEVBNzQ0MDE4OEE3NDMwMUE2NUIKLToxMEU5MjAwMEE3NDIwMTkwQUY1MTAxQjgwQTAwMTBEOTNDMDIwMDAxODIKLToxMEU5MzAwMDAwODIxMDI0MTA0MDAwMEMzQzAyMTAwMDNDMDIwODAwMzEKLToxMEU5NDAwMDhDNDIwMEQ4OTc0NjAxMEUyNDA0MDA4MDI0NDIwMDAxMjYKLToxMEU5NTAwMDMwQzZGRkZGMjQwNTAwMDIzQzAxMDgwMEFDMjIwMEQ4QUQKLToxMEU5NjAwMDBBMDAxMEUzMjQwNzAwMDMwMDgyMTAyNDEwNDAwMDQ1MzEKLToxMEU5NzAwMDAwMDAwMDAwM0MwMjA4MDA4QzQyMDAzMDEwNDAwMDBERjYKLToxMEU5ODAwMDhGODIwMDA0MzA0MjQwMDAxMDQwMDAwQTNDMDMwRjAwMTgKLToxMEU5OTAwMDAwODMxODI0M0MwMjAxMDAwMDQzMTAyQjE0NDAwMDA1QTIKLToxMEU5QTAwMDAwMDAwMDAwOTc0NjAxMEUzNjQ3MDAwMjBBMDAxMEUwMDIKLToxMEU5QjAwMDI0MDQwMDgwMTBBMDAwMEQzMDgyMDEwMDEwNDAwMDBCRTQKLToxMEU5QzAwMDNDMDIwRjAwMDA4MjEwMjQzQzAzMDIwMDEwNDMwMDA3QTkKLToxMEU5RDAwMDhGODIwMDA4MDA0RDEwMjQwMDRFMTAyMTkwNDIwMDA0NDgKLToxMEU5RTAwMDI0NDIwMDA0MEEwMDEwOEIwMDAyMjFDMDAwMDAwMDAwMzUKLToxMEU5RjAwMDhGODYwMDAwM0MwNTA4MDA4Q0E1MDBEMDAwMDYxNjAyOUEKLToxMEVBMDAwMDMwNTAwMDBGMzhBMjAwMDEyQzQyMDAwMTJFMDMwMDBDRjAKLToxMEVBMTAwMDAwNDMxMDI0MTQ0MDAwMTgwMDEwMjFDMDI2MDJGRkZDRkYKLToxMEVBMjAwMDJDNDIwMDA0NTQ0MDAwMTQwMDAwMjAyMTM4QTIwMDAyQUYKLToxMEVBMzAwMDJDNDIwMDAxMDA0MzEwMjQxMDQwMDAwMzAwMDYxMjQyNDMKLToxMEVBNDAwMDBBMDAxMDhCMDAwMDIwMjEwMDEwMTgyQjAwNDMxMDI0MTYKLToxMEVBNTAwMDUwNDAwMDA5MDAxMDIxQzA5NzQ2MDEwRTAwMDAyMDIxRkYKLToxMEVBNjAwMDI0MDUwMDAyMjRDNjAwMDQzMEM2RkZGRjBFMDAwRjQxM0IKLToxMEVBNzAwMDMyNDdGRkZCMDAxMDIxQzA5NzQ2MDEwRTBBMDAxMEUwNEMKLToxMEVBODAwMDM2NDcwMDAyOEY0MjQwMDAzQzExMDgwMDhFMzEwMDI0QkUKLToxMEVBOTAwMDMwNDIwMTAwMTA0MDAwNDgzMjIyMDAwMTAyMjA4MDIxNTMKLToxMEVBQTAwMDEwQTAwMDE3MzI1MzAwMDQzMDgyMDEwMDEwNDAwMDE1RkUKLToxMEVBQjAwMDI0MDIwMDAxM0MwMjBGMDAwMDgyMTAyNDNDMDMwMjAwRUIKLToxMEVBQzAwMDEwNDMwMDBGOEY4MjAwMDg5NzQ2MDEwRTAyNDAzODIxNDQKLToxMEVBRDAwMDAwNEQxMDI0MDA0RTEwMjE5MDQ0MDAwNDI0QzYwMDA0NzAKLToxMEVBRTAwMDMwQzZGRkZGMjQ4NDAwMDQwMDA0MjFDMDBFMDAwRjQxNDMKLToxMEVBRjAwMDI0MDUwMDAyMjQwMkZGRkUwMjIyODAyNDMyNTJGRkZCODIKLToxMEVCMDAwMDI0MDIwMDAxMTYwMjAwMDczMjAyMDAwMTMyNDIwMDA0MTIKLToxMEVCMTAwMDUwNDAwMDAxMzY1MjAwMDI5NzQ2MDEwRTBBMDAxMERGRjUKLToxMEVCMjAwMDAyNDAzODIxMTA0MDAwMEEzMjAyMDAwNDk3NDYwMTBFQ0MKLToxMEVCMzAwMDAyNDAzODIxMDAwMDIwMjEyNEM2MDAwNDMwQzZGRkZGMTcKLToxMEVCNDAwMDBFMDAwRjQxMjQwNTAwMDIzMjUyRkZGQjMyMDIwMDA0ODYKLToxMEVCNTAwMDEwNDAwMDBCOEY4MjAwMDAzMDQyMDgwMDEwNDAwMDA4NzcKLToxMEVCNjAwMDAwMDAwMDAwOTc0NjAxMEUwMjQwMzgyMTI0MDQwMTAwRjUKLToxMEVCNzAwMDI0QzYwMDA0MzBDNkZGRkYwRTAwMEY0MTI0MDUwMDAyMkEKLToxMEVCODAwMDE2NjAwMDE4OEZCRjAwMzAyNzQzMDE4MDhGNDIwMUI4MDQKLToxMEVCOTAwMDA0NDBGRkZFMjQwMjIwMDBBNDYyMDAwODI0MDIwMDAyQjgKLToxMEVCQTAwMEEwNjIwMDBCQTQ2MDAwMTAzQzAyMTAwMEFGNDIwMUI4NEMKLToxMEVCQjAwMDBBMDAxMEU2OEZCRjAwMzAxMDQwMDAwQThGQkYwMDMwRkYKLToxMEVCQzAwMDk3NDYwMTBFMzY0NzAwMDIwMDAwMjAyMTI0QzYwMDA0QUIKLToxMEVCRDAwMDMwQzZGRkZGMjQwNTAwMDIwRTAwMEY0MTAwMDAwMDAwQjgKLToxMEVCRTAwMDhGQkYwMDMwOEZCMzAwMkM4RkIyMDAyODhGQjEwMDI0NkMKLToxMEVCRjAwMDhGQjAwMDIwMDAwMDEwMjEwM0UwMDAwODI3QkQwMDM4N0UKLToxMEVDMDAwMDI3QkRGRkU4QUZCMDAwMTAzQzA0NjAwQ0FGQkYwMDE0OUMKLToxMEVDMTAwMDhDODI1MDAwMjQwM0ZGN0YzQzFBODAwMDAwNDMxMDI0QTQKLToxMEVDMjAwMDM0NDIzODBDQUM4MjUwMDAyNDAyMDAwMzNDMTA2MDAwRDcKLToxMEVDMzAwMEFGNDIwMDA4OEUwMjA4MDgzQzFCODAwODNDMDEwODAwMTcKLToxMEVDNDAwMEFDMjAwMDIwMzA0MkZGRjAzODQyMDAxMDJDNDIwMDAxN0UKLToxMEVDNTAwMDBFMDAxQjM1QUY4MjAwMTgzQzA0RkZGRjNDMDIwNDAwOEQKLToxMEVDNjAwMDM0ODMwODA2MzQ0MjAwMENBRTAyMTk0OEFFMDMxOTRDMzYKLToxMEVDNzAwMDNDMDU2MDE2OEUwMjE5ODA4Q0EzMDAwMDM0NDIwMjAwMEQKLToxMEVDODAwMDAwNjQxODI0QUUwMjE5ODAzQzAyNTM1MzE0NjIwMDAzM0UKLToxMEVDOTAwMDM0QTQ3QzAwOENBMjAwMDQwMDUwMjAyMThDODIwMDdDRDMKLToxMEVDQTAwMDhDODMwMDc4QUY4MjAwMTRBRjgzMDAxMDNDMDI4MDAwOTgKLToxMEVDQjAwMDM0NDIwMDcwOEM0MzAwMDAwMDQwMzgyMUFGODMwMDFDQjgKLToxMEVDQzAwMDAwNjAzMDIxOENFODAwMDAzQzA1MDgwMDhDQTUwMEZDQTkKLToxMEVDRDAwMDNDMDQwODAwOEM4NDAwRjgwMTA2MzAyMzAwMDAxMDIxNTkKLToxMEVDRTAwMDAwQTYyODIxMDBBNjMwMkIwMDgyMjAyMTAwODYyMDIxQUEKLToxMEVDRjAwMDNDMDEwODAwQUMyNTAwRkMzQzAxMDgwMEFDMjQwMEY4RjUKLToxMEVEMDAwMDhGNTAwMDAwMzIwMjAwMDMxMDQwRkZFRTAxMDAzMDIxNUUKLToxMEVEMTAwMDhDRTYwMDAwM0MwNTA4MDA4Q0E1MDBGQzNDMDQwODAwQzMKLToxMEVEMjAwMDhDODQwMEY4MDBDODMwMjMwMEE2MjgyMTAwMDAxMDIxQTAKLToxMEVEMzAwMDAwQTYzMDJCMDA4MjIwMjEwMDg2MjAyMTMyMDcwMDAxMEUKLToxMEVENDAwMDNDMDEwODAwQUMyNTAwRkNBRjg4MDAxQzNDMDEwODAwMTkKLToxMEVENTAwMEFDMjQwMEY4MTBFMDAwNjQzMjAyMDAwMjhGNDIwMTI4NjcKLToxMEVENjAwMEFGNDIwMDIwOEY0MjAxMDQ4RjQzMDEwMEFGODIwMDAwQjgKLToxMEVENzAwMDBFMDAwRjE4QUY4MzAwMDQ4RjQzNDAwMDM0MDJGRkZGRTIKLToxMEVEODAwMDE0NjIwMDA2MDAwMDAwMDA5NzQ1MDEwRTNDMDQwODAwRDQKLToxMEVEOTAwMDI0ODQwMEYwMEEwMDExNUIwMDAwMDAwMDhGNDI0MDAwNTQKLToxMEVEQTAwMDMwNDIwMTAwMTA0MDAwMEIwMDAwMDAwMDk3NDUwMTBFQUEKLToxMEVEQjAwMDNDMDQwODAwMjQ4NDAwRTgwRTAwMEYwRTMwQTVGRkZGN0QKLToxMEVEQzAwMDk3NDUwMTBFM0MwNDA4MDAyNDg0MzFDODBBMDAxMTcyRTIKLToxMEVERDAwMDAwMDAwMDAwOEY0MzQwMDA4RjgyMDAxMDE0NjIwMDBBODAKLToxMEVERTAwMDAwMDAwMDAwOEY0MzQwMDQ4RjgyMDAxNDE0NjIwMDA2NkMKLToxMEVERjAwMDAwMDAwMDAwOTc0NTAxMEUzQzA0MDgwMDI0ODQzMUI4NEYKLToxMEVFMDAwMDBBMDAxMTcyMDAwMDAwMDA5NzQ1MDEwRTNDMDQwODAwNDIKLToxMEVFMTAwMDI0ODQwMEUwMEUwMDBGMEUzMEE1RkZGRjNDMDIwODAwMjYKLToxMEVFMjAwMDhDNDIwMEMwMTA0MDAwMDg4Rjg0MDAwMDNDMDIwODAwQTMKLToxMEVFMzAwMDhDNDIwMEM0MjQ0MjAwMDEzQzAxMDgwMEFDMjIwMEM0MDIKLToxMEVFNDAwMDBBMDAxMTlGMDAwMDAwMDAzQzAyMDAxMDAwODIxMDI0MDQKLToxMEVFNTAwMDE0NDAwMDBBOEY4MzAwMDQzQzAyMDgwMDhDNDIwMDIwMEEKLToxMEVFNjAwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMDAyMDBFMDAwRjc5NzIKLToxMEVFNzAwMDAwMDAyMDIxMEEwMDExOUQwMDAwMDAwMDI0MDJCRkZGQjUKLToxMEVFODAwMDAwNjIxMDI0MTA0MDAwMDgwMDAwMDAwMDI0MDI4N0ZGRTgKLToxMEVFOTAwMDAwNjIxMDI0MTQ0MDAwMDgzQzAyMDA2MDAwODIxMDI0MkMKLToxMEVFQTAwMDEwNDAwMDA1MDAwMDAwMDAwRTAwMEQyNjAwMDAwMDAwQ0MKLToxMEVFQjAwMDBBMDAxMTlEMDAwMDAwMDAwRTAwMTFFODAwMDAwMDAwOTMKLToxMEVFQzAwMDEwNDAwMDA2M0MwMjQwMDA4RjQzMDEyNDNDMDI2MDIwQjkKLToxMEVFRDAwMEFDNDMwMDE0MDAwMDAwMDAzQzAyNDAwMEFGNDIwMTM4ODcKLToxMEVFRTAwMDAwMDAwMDAwMzIwMjAwMDIxMDQwRkY3MTNDMDI4MDAwNkUKLToxMEVFRjAwMDhGNDIwMTQwM0MwNDQwMDBBRjQyMDAyMDhGNDMwMTQ4NTQKLToxMEVGMDAwMDNDMDI3MDAwMDA2MjE4MjQxMDY0MDAyRDAwMDAwMDAwMTQKLToxMEVGMTAwMDAwODMxMDJCMTQ0MDAwMDYzQzAyNjAwMDNDMDIyMDAwREQKLToxMEVGMjAwMDEwNjIwMDA3M0MwMjQwMDAwQTAwMTFFNDAwMDAwMDAwRUIKLToxMEVGMzAwMDEwNjIwMDI3MDAwMDAwMDAwQTAwMTFFNDNDMDI0MDAwQkIKLToxMEVGNDAwMDhGNDIwMTQ4MjQwMzAwMDQwMDAyMTQwMjMwNDIwMEZGRjMKLToxMEVGNTAwMDE0NDMwMDBCMjc0NDAxODA4RjQzMDE0MDhGNDIwMUI4QzYKLToxMEVGNjAwMDA0NDBGRkZFMjQwMjAwMUNBQzgzMDAwMEEwODIwMDBCQzIKLToxMEVGNzAwMDNDMDIxMDAwQUY0MjAxQjgwQTAwMTFFNDNDMDI0MDAwMUMKLToxMEVGODAwMDhGNDIwMUI4MDQ0MEZGRkUwMDAwMDAwMDhGNDIwMTQ4OUMKLToxMEVGOTAwMDAwMDIxNDAyQTQ4MjAwMDgyNDAyMDAwMkEwODIwMDBCRDYKLToxMEVGQTAwMDhGNDIwMTQ4QTQ4MjAwMTA4RjQyMDE0NEFDODIwMDI0QTkKLToxMEVGQjAwMDNDMDIxMDAwQUY0MjAxQjgwQTAwMTFFNDNDMDI0MDAwREMKLToxMEVGQzAwMDBFMDAxMjBDMDAwMDAwMDAwQTAwMTFFNDNDMDI0MDAwOTgKLToxMEVGRDAwMDBFMDAxQjQyMDAwMDAwMDAzQzAyNDAwMEFGNDIwMTc4REUKLToxMEVGRTAwMDAwMDAwMDAwMEEwMDExMTkzQzAyODAwMDhGNDIwMTAwNUQKLToxMEVGRjAwMDMwNDIwMDNFMTQ0MDAwMTEyNDAyMDAwMUFGNDAwMDQ4OUUKLToxMEYwMDAwMDhGNDIwMTAwMzA0MjA3QzAxMDQwMDAwNTAwMDAwMDAwQTAKLToxMEYwMTAwMEFGNDAwMDRDQUY0MDAwNTAwM0UwMDAwODI0MDIwMDAxNjQKLToxMEYwMjAwMEFGNDAwMDU0QUY0MDAwNDA4RjQyMDEwMDMwNDIzODAwRjIKLToxMEYwMzAwMDU0NDAwMDAxQUY0MDAwNDQyNDAyMDAwMTAzRTAwMDA4RjYKLToxMEYwNDAwMDAwMDAwMDAwM0MwMjkwMDAzNDQyMDAwMTAwODIyMDI1QjQKLToxMEYwNTAwMEFGNDQwMDIwOEY0MjAwMjAwNDQwRkZGRTAwMDAwMDAwNkIKLToxMEYwNjAwMDAzRTAwMDA4MDAwMDAwMDAzQzAyODAwMDM0NDIwMDAxODAKLToxMEYwNzAwMDAwODIyMDI1MDNFMDAwMDhBRjQ0MDAyMDI3QkRGRkUwMDgKLToxMEYwODAwMEFGQjIwMDE4QUZCRjAwMUNBRkIxMDAxNEFGQjAwMDEwOUEKLToxMEYwOTAwMDhGNTAwMTQwOEY1MTAxNDgzQzAyODAwMDAwMTE5NDAyQzIKLToxMEYwQTAwMDAyMjIyMDI0MzI0MzAwRkYyNDAyMDAwRTEwNjIwMDhBNTQKLToxMEYwQjAwMDI4NjIwMDBGMTA0MDAwMTIyODYyMDAzNzI0MDIwMDA2NjgKLToxMEYwQzAwMDEwNjIwMDNCMjg2MjAwMDcxMDQwMDAwNzI0MDIwMDA5N0MKLToxMEYwRDAwMDEwNjAwMDFBMjQwMjAwMDExMDYyMDAyNTAwMDAwMDAwRTgKLToxMEYwRTAwMDBBMDAxMkMxMDAwMDAwMDAxMDYyMDA3QjI0MDIwMDBCMjUKLToxMEYwRjAwMDEwNjIwMDVCMzIyMkZGRkYwQTAwMTJDMTAwMDAwMDAwMTQKLToxMEYxMDAwMDEwNDAwMDA4MjQwMjAwMzgyODYyMDAzNTEwNDAwMDgwQkEKLToxMEYxMTAwMDI0MDIwMDFGMTA2MjAwN0UwMDAwMDAwMDBBMDAxMkMxREQKLToxMEYxMjAwMDAwMDAwMDAwMTA2MjAwN0EyNDAyMDA4MDEwNjIwMDQyOTkKLToxMEYxMzAwMDAwMDAwMDAwMEEwMDEyQzEwMDAwMDAwMDhGNDIwMUI4NjgKLToxMEYxNDAwMDA0NDBGRkZFMjQwMjAwMDFBRjUwMDE4MEFGNDAwMTg0NjMKLToxMEYxNTAwMEE3NTIwMTg4QTM0MjAxOEEyNDAyMDAwMkEzNDIwMThCMjQKLToxMEYxNjAwMEE3NTEwMTkwOEY0MjAxNDQwQTAwMTJCQ0FGNDIwMUE0OTIKLToxMEYxNzAwMDEwODAwMDBBMjQwMjAwMDIzQzAxMDgwMEEwMjI3MTkwQzUKLToxMEYxODAwMDNDMDEwODAwQUMzMDcxOTg4RjQyMDE0NDNDMDEwODAwRkEKLToxMEYxOTAwMEFDMjI3MTk0MEEwMDEyQzM4RkJGMDAxQzhGNDIwMUI4QzkKLToxMEYxQTAwMDA0NDBGRkZFMjQwMjAwMDIwQTAwMTJBNjAwMDAwMDAwMzQKLToxMEYxQjAwMDhGNDIwMUI4MDQ0MEZGRkUwMDAwMDAwMEFGNTAwMTgwMDQKLToxMEYxQzAwMDNDMDIwODAwOTA0MjcxOTAxMDQwMDAwMzAwMDAxODIxOUEKLToxMEYxRDAwMDNDMDMwODAwOEM2MzcxOThBRjQzMDE4NEE3NTIwMTg4RjcKLToxMEYxRTAwMDNDMDIwODAwOTA0MjcxOTAwMDAwMTgyMTM0NDIwMDAxNTYKLToxMEYxRjAwMEEzNDIwMThBMjQwMjAwMDJBMzQyMDE4QkE3NTEwMTkwN0QKLToxMEYyMDAwMDhGNDIwMTQ0QUY0MjAxQTQzQzAyMDgwMDkwNDI3MTkwMzkKLToxMEYyMTAwMDEwNDAwMDAzM0MwMjEwMDAzQzAzMDgwMDhDNjM3MTk0MTIKLToxMEYyMjAwMEFGNDMwMUE4QUY0MjAxQjgzQzAxMDgwMEEwMjA3MTkwOTMKLToxMEYyMzAwMDBBMDAxMkMzOEZCRjAwMUM4RjQyMDFCODA0NDBGRkZFQkEKLToxMEYyNDAwMDI0MDIwMDAyQTM0MjAxOEJBNzUyMDE4OEE3NTEwMTkwMUEKLToxMEYyNTAwMDhGNDIwMTQ0QTc0MjAxOTIwQTAwMTJCRTNDMDIxMDAwRjQKLToxMEYyNjAwMDE0NDAwMDFEMDAwMDAwMDA5MzYyMDAwNTMwNDIwMDA0QkQKLToxMEYyNzAwMDE0NDAwMDM3MDAwMDAwMDAwRTAwMTFGRTAyMDAyMDIxQTMKLToxMEYyODAwMDkzNjIwMDA1MDIwMDIwMjEzNDQyMDAwNDBFMDAxMjA3QTAKLToxMEYyOTAwMEEzNjIwMDA1OTM2MjAwMDUzMDQyMDAwNDE0NDAwMDAyOUUKLToxMEYyQTAwMDAwMDAwMDAwMDAwMDAwMEQ5MzYyMDAwMDI0MDMwMDIwMTUKLToxMEYyQjAwMDMwNDIwMEZGMTQ0MzAwMDgwMDAwMDAwMDhGNDIwMUI4RjQKLToxMEYyQzAwMDA0NDBGRkZFMjQwMjAwMDVBRjUwMDE4MEEzNDIwMThCRTEKLToxMEYyRDAwMDNDMDIxMDAwQUY0MjAxQjg4RjQyMDFCODA0NDBGRkZFNkIKLToxMEYyRTAwMDI0MDIwMDAyQUY0MDAxODBBRjUwMDE4NEE3NTIwMTg4ODAKLToxMEYyRjAwMEEzNDIwMThBQTM0MjAxOEJBNzUxMDE5MEFGNDAwMUE0MTAKLToxMEYzMDAwMDhGNDIwMTQ0QUY0MjAxQTgwQTAwMTJCRTNDMDIxMDAwMjUKLToxMEYzMTAwMDhGNDIwMUI4MDQ0MEZGRkUyNDAyMDAwMUFGNTAwMTgwN0IKLToxMEYzMjAwMEFGNDAwMTg0QTc1MjAxODhBMzQyMDE4QTI0MDIwMDAyNEYKLToxMEYzMzAwMEEzNDIwMThCQTc1MTAxOTBBRjQwMDFBNEFGNDAwMUE4QTcKLToxMEYzNDAwMDNDMDIxMDAwQUY0MjAxQjgwQTAwMTJDMzhGQkYwMDFDN0MKLToxMEYzNTAwMDAwMDAwMDBEOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0ODkKLToxMEYzNjAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkU4OTQKLToxMEYzNzAwMEFGQkYwMDEwMEUwMDBGMTgwMDAwMDAwMEFGNDAwMTgwNkEKLToxMEYzODAwMDhGQkYwMDEwMDAwMDIwMjEwQTAwMEY3OTI3QkQwMDE4NTAKLToxMEYzOTAwMDMwODRGRkZGMzBBNUZGRkYwMDAwMTgyMTEwODAwMDA3MTgKLToxMEYzQTAwMDAwMDAwMDAwMzA4MjAwMDExMDQwMDAwMjAwMDQyMDQyRjIKLToxMEYzQjAwMDAwNjUxODIxMEEwMDEyRDQwMDA1Mjg0MDAzRTAwMDA4NjcKLToxMEYzQzAwMDAwNjAxMDIxMTBDMDAwMDYyNEM2RkZGRjhDQTIwMDAwQzAKLToxMEYzRDAwMDI0QTUwMDA0QUM4MjAwMDAwQTAwMTJERTI0ODQwMDA0OEMKLToxMEYzRTAwMDAzRTAwMDA4MDAwMDAwMDAxMEEwMDAwODI0QTNGRkZGQjUKLToxMEYzRjAwMEFDODYwMDAwMDAwMDAwMDAwMDAwMDAwMDI0MDJGRkZGQjcKLToxMEY0MDAwMDI0NjNGRkZGMTQ2MkZGRkEyNDg0MDAwNDAzRTAwMDA4NzEKLToxMEY0MTAwMDAwMDAwMDAwMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwMzAKLToxMEY0MjAwMDBFMDAxMUZFMDA4MDgwMjE5MzYyMDA3RDAyMDAyMDIxRTkKLToxMEY0MzAwMDM0NDIwMDIwMEUwMDEyMDdBMzYyMDA3RDAyMDAyMDIxNEEKLToxMEY0NDAwMDhGQkYwMDE0OEZCMDAwMTAwQTAwMEM5QjI3QkQwMDE4NUUKLToxMEY0NTAwMDMwODMwMEZGMzBBNTAwRkYzMEM2MDBGRjI3NDcwMTgwNDIKLToxMEY0NjAwMDhGNDIwMUI4MDQ0MEZGRkUwMDAwMDAwMDhGNDIwMTI4RDcKLToxMEY0NzAwMDM0NjM0MDAwQUNFMjAwMDAyNDAyMDAwMUFDRTAwMDA0NzAKLToxMEY0ODAwMEE0RTMwMDA4QTBFMjAwMEEyNDAyMDAwMkEwRTIwMDBCQUMKLToxMEY0OTAwMDNDMDIxMDAwQTRFNTAwMTBBQ0UwMDAyNEFDRTAwMDI4MjEKLToxMEY0QTAwMEE0RTYwMDEyMDNFMDAwMDhBRjQyMDFCODI3QkRGRkU4NjAKLToxMEY0QjAwMEFGQkYwMDEwOTM2MjAwM0YyNDAzMDAxMjMwNDIwMEZGRjAKLToxMEY0QzAwMDEwNDMwMDBEMDA4MDMwMjE4RjYyMDA0NDAwODIxMDIzMjEKLToxMEY0RDAwMDA0NDAwMDBBOEZCRjAwMTA4RjYyMDA0ODI0MDQwMDM5RTYKLToxMEY0RTAwMDAwMDAyODIxMDBDMjEwMjMwNDQxMDAwNDI0MDYwMDEyNTkKLToxMEY0RjAwMDBFMDAxMzAxMDAwMDAwMDA4RkJGMDAxMDI0MDIwMDAxNjUKLToxMEY1MDAwMDAzRTAwMDA4MjdCRDAwMTgyN0JERkZDOEFGQjEwMDJDREQKLToxMEY1MTAwMDAwQTA4ODIxQUZCMjAwMzAyN0E1MDAxMDAwODA5MDIxMDQKLToxMEY1MjAwMDAyMjAyMDIxQUZCRjAwMzRBRkIwMDAyODBFMDAwQ0E0OTEKLToxMEY1MzAwMEFGQTAwMDEwMTA0MDAwMDkwMjQwMjAyMThFMjIwMDA4RDgKLToxMEY1NDAwMEFGNjIwMDg0MEUwMDEyRjJBRjYwMDA0MDI0MDQwMDM4NjUKLToxMEY1NTAwMDI0MDUwMDhEMEEwMDEzQ0QyNDA2MDAxMjkzNjIwMDNFOUMKLToxMEY1NjAwMDMwNDIwMDA4MTA0MDAwMEY4RkEyMDAxMDMwNDIwMTAwMEUKLToxMEY1NzAwMDEwNDAwMDA3OEZBMzAwMTQ4RjYyMDA2MDAwNjIxMDIzMDgKLToxMEY1ODAwMDA0NDMwMDA4QUY2MzAwNjAwQTAwMTM1NjAwMDAwMDAwNDcKLToxMEY1OTAwMEFGNjAwMDYwOTM2MjAwM0UyNDAzRkZGNzAwNDMxMDI0MzUKLToxMEY1QTAwMEEzNjIwMDNFOTM2MjAwM0UzMDQyMDAwODE0NDAwMDAyMTUKLToxMEY1QjAwMDI0MDYwMDAzMDAwMDMwMjE5MzYyMDAzNDkzNjMwMDM3NzcKLToxMEY1QzAwMDhGNjQwMDg0MzA0MjAwRkYzMDYzMDBGRjAwNjYxODIxMjIKLToxMEY1RDAwMDAwMDMxODgwMDA0MzI4MjEwMEE0MjAyQjEwODAwMDBCN0EKLToxMEY1RTAwMDAwMDAwMDAwOTc2MzAwM0M4RjYyMDA4NDMwNjNGRkZGREYKLToxMEY1RjAwMDAwNDUxMDIzMDA2MjE4MkIxNDYwMDAwNDAwMDAwMDAwNzYKLToxMEY2MDAwMDhGNjIwMDg0MEEwMDEzNzIwMDQ1ODAyMzk3NjIwMDNDRDkKLToxMEY2MTAwMDMwNTBGRkZGOEZBMzAwMTAzMDYyMDAwNDEwNDAwMDA0NDAKLToxMEY2MjAwMDAwMDYyODgwOEZBMjAwMUMwQTAwMTM3QTAyMDIxMDJCMDkKLToxMEY2MzAwMDJFMDIwMjE4NTA0MDAwMDMyNDAyMDIxODBBMDAxMzgzMEQKLToxMEY2NDAwMDAyMDUxMDIzMzA2MzAwMDQxMDYwMDAwMzAwNDUxMDIzRkUKLToxMEY2NTAwMDhGQTIwMDFDMDA0NTEwMjMwMDQwODAyMTJDNDIwMDgwMTYKLToxMEY2NjAwMDU0NDAwMDAxMjQxMDAwODAwRTAwMTFGRTAyNDAyMDIxQjEKLToxMEY2NzAwMDI0MDIwMDAxQUY2MjAwMEM5MzYyMDAzRTAwMTAyMDQwQTMKLToxMEY2ODAwMDMwNDIwMDdGQTM2MjAwM0U4RTIyMDAwNDI0NDIwMDAxMkIKLToxMEY2OTAwMEFGNjIwMDQwQTc3MDAwM0M4RjYyMDA1MDk2MjMwMDBFQkUKLToxMEY2QTAwMDAwNDMxMDIxQUY2MjAwNTg4RjYyMDA1MDAwNDQxMDIxQzcKLToxMEY2QjAwMEFGNjIwMDVDOEUyMjAwMDRBRjYyMDAxODhFMjIwMDA4NDgKLToxMEY2QzAwMEFGNjIwMDFDOEZBMjAwMTAzMDQyMDAwODU0NDAwMDBBQjQKLToxMEY2RDAwMDkzQTIwMDIwQTM2MDAwMzY5MzYyMDAzNjI0MDNGRkRGNkMKLToxMEY2RTAwMEEzNjIwMDM1OTM2MjAwM0UwMDQzMTAyNEEzNjIwMDNFRjMKLToxMEY2RjAwMDBBMDAxM0FEOEUyMjAwMDhBMzYyMDAzNThFMjIwMDA4OTYKLToxMEY3MDAwMEFGNjIwMDRDOEY2MjAwMjQ4RjYzMDA0MDAwNDMxMDIxRTEKLToxMEY3MTAwMEFGNjIwMDQ4OTM2MjAwMDAyNDAzMDA1MDMwNDIwMEZGQjMKLToxMEY3MjAwMDE0NDMwMDEyMjQwM0ZGODAzQzAyMDgwMDhDNDIzMUEwRTUKLToxMEY3MzAwMDAyNDIxMDIxMDA0MzEwMjRBRjQyMDAyODNDMDIwODAwN0UKLToxMEY3NDAwMDhDNDIzMUEwOEUyNDAwMDgzQzAzMDAwQzAyNDIxMDIxQTAKLToxMEY3NTAwMDMwNDIwMDdGMDM0MjEwMjEwMDQzMTAyMUFDNDQwMEQ4MDYKLToxMEY3NjAwMDhFMjMwMDA4QUY4MjAwMjRBQzQzMDBEQzBFMDAxMjA3OTkKLToxMEY3NzAwMDAyNDAyMDIxMjQwNDAwMzgwMDAwMjgyMTI0MDYwMDBBMjkKLToxMEY3ODAwMDBFMDAxMzAxMDAwMDAwMDA4RkJGMDAzNDhGQjIwMDMwNjQKLToxMEY3OTAwMDhGQjEwMDJDOEZCMDAwMjgyNDAyMDAwMTAzRTAwMDA4ODQKLToxMEY3QTAwMDI3QkQwMDM4MjdCREZGRThBRkJGMDAxMDkwQzcwMDBEOTAKLToxMEY3QjAwMDAwQzAyODIxMzBFNjAwMTAxMEMwMDAwQTMwRTIwMDA0MkEKLToxMEY3QzAwMDhDQTMwMDA4OEY2MjAwNTQxMDYyMDAwNjMwRTIwMDA0MkYKLToxMEY3RDAwMDE0NDAwMDE3OEZCRjAwMTAwMDAwMjAyMTBBMDAwRDEzRjUKLToxMEY3RTAwMDI3QkQwMDE4MTA0MDAwMEQzMEUzMDAxMjEwQzAwMDEwQkIKLToxMEY3RjAwMDhGQkYwMDEwOENBMzAwMDg4RjYyMDA1NDE0NjIwMDBEQUMKLToxMEY4MDAwMDI0MDIwMDAxMjQwNDAwMzgyNDA1MDA4RDBFMDAxMzAxOTkKLToxMEY4MTAwMDI0MDYwMDEyMEEwMDEzRjk4RkJGMDAxMDI0MDIwMDEyMDAKLToxMEY4MjAwMDE0NjIwMDAzOEZCRjAwMTAwQTAwMTMyRjI3QkQwMDE4QjkKLToxMEY4MzAwMDI0MDIwMDAxMDNFMDAwMDgyN0JEMDAxODI3QkRGRkY4REYKLToxMEY4NDAwMDI3NDIwMTgwQUZBMjAwMDAzMDhBMDBGRjhGNDIwMUI4M0EKLToxMEY4NTAwMDA0NDBGRkZFMDAwMDAwMDA4RjQ2MDEyODNDMDIwODAwMjMKLToxMEY4NjAwMDhDNDIzMUEwMjQwM0ZGODBBRjg2MDA0QzAwQzIxMDIxREYKLToxMEY4NzAwMDAwNDMxMDI0QUY0MjAwMjQzQzAyMDgwMDhDNDIzMUEwMTcKLToxMEY4ODAwMDhGQTkwMDAwOEZBODAwMDAwMEMyMTAyMTMwNDIwMDdGMjUKLToxMEY4OTAwMDAzNDIxODIxM0MwMjAwMEEwMDYyMTgyMTk0NjQwMEQ0M0IKLToxMEY4QTAwMDhGQTcwMDAwOEZBNTAwMDAyNDAyMDAwMkFGODMwMDI0NzAKLToxMEY4QjAwMEEwQTIwMDBCOEZBMzAwMDAzNTQyNjAwMDMwODRGRkZGNDAKLToxMEY4QzAwMEE0RTIwMDA4M0MwMjEwMDBBRDI2MDAwMEFEMDQwMDA0RDQKLToxMEY4RDAwMEFDNjAwMDI0MjdCRDAwMDhBRjQyMDFCODAzRTAwMDA4NzcKLToxMEY4RTAwMDI0MDIwMDAxOEM4MjAwMDQ4RjgzMDAyNDAwNDUxMDIzMzEKLToxMEY4RjAwMEFDODIwMDA0OTA2MjAwNjMzMDQyMDA3RkEwNjIwMDYzMkIKLToxMEY5MDAwMDhDODIwMDIwOTM4MzAwMkM4Rjg1MDAyNDM0NDIwMDAyRDcKLToxMEY5MTAwMEFGODMwMDQwQTc4MDAwM0VBQzgyMDAyMEE0QTAwMEU0OUEKLToxMEY5MjAwMDkwQTIwMDYzMjQwM0ZGQkYwMDQzMTAyNDAzRTAwMDA4RkIKLToxMEY5MzAwMEEwQTIwMDYzMjc0MzAxODA4RjQyMDFCODA0NDBGRkZFNkMKLToxMEY5NDAwMDhGODIwMDRDQUM2MjAwMDA4RjQyMDEyNEFDNjIwMDA0NDQKLToxMEY5NTAwMDI0MDI2MDgzQTQ2MjAwMDgyNDAyMDAwMkEwNjIwMDBCNUIKLToxMEY5NjAwMDNDMDIxMDAwMDNFMDAwMDhBRjQyMDFCODhGODgwMDQwNUQKLToxMEY5NzAwMDkzODIwMDJDOEY4MzAwMjQzQzA3MDgwMDI0RTc3NUFDOTkKLToxMEY5ODAwMDAwNDgxMDIzMzA0MjAwRkYzMDQ5MDBGQzI0NjUwMDg4MDUKLToxMEY5OTAwMDhGODYwMDQ0MzA0QTAwMDMxMTIwMDAwOTAwMDAyMDIxMTYKLToxMEY5QTAwMDI0ODIwMDA0OENBMzAwMDAzMDQ0MDBGRjAwODkxMDJBNDgKLToxMEY5QjAwMEFDRTMwMDAwMjRBNTAwMDQxNDQwRkZGOTI0RTcwMDA0OTAKLToxMEY5QzAwMDExNDAwMDA5MDAwMDIwMjEyNDgyMDAwMTkwQTMwMDAwQzIKLToxMEY5RDAwMDMwNDQwMEZGMDA4QTEwMkJBMEUzMDAwMDI0QTUwMDAxQTIKLToxMEY5RTAwMDE0NDBGRkY5MjRFNzAwMDEzMEMyMDAwMzE0NDAwMDA0NzIKLToxMEY5RjAwMDhGODUwMDQwMzEwMjAwMDMxMDQwMDAwRDAwMDAwMDAwMjAKLToxMEZBMDAwMDEwQTAwMDA5MDAwMDIwMjEyNDgyMDAwMTkwQzMwMDAwMDIKLToxMEZBMTAwMDMwNDQwMEZGMDA4NTEwMkJBMEUzMDAwMDI0QzYwMDAxNDUKLToxMEZBMjAwMDE0NDBGRkY5MjRFNzAwMDEwM0UwMDAwODAwMDAwMDAwOTMKLToxMEZBMzAwMDExMDBGRkZEMDAwMDIwMjEyNDgyMDAwNDhDQzMwMDAwN0YKLToxMEZBNDAwMDMwNDQwMEZGMDA4ODEwMkJBQ0UzMDAwMDI0QzYwMDA0MDMKLToxMEZBNTAwMDE0NDBGRkY5MjRFNzAwMDQwM0UwMDAwODAwMDAwMDAwNjAKLToxMEZBNjAwMDhGODMwMDQwOTM4MjAwMkMzMEM2MDBGRjMwQTUwMEZGM0EKLToxMEZBNzAwMDAwNDMxMDIzMzA0MzAwRkY4RjgyMDAyNDAwODAzODIxOTAKLToxMEZBODAwMDAwNDMxMDIxMTRDMDAwMDIyNDQ4MDA4ODAwODMzODIxNUMKLToxMEZBOTAwMDMwRTIwMDAzMTQ0MDAwMDUzMEEyMDAwMzE0NDAwMDAzQ0MKLToxMEZBQTAwMDMwNjIwMDAzMTA0MDAwMEQwMDAwMDAwMDEwQTAwMDA5QUIKLToxMEZBQjAwMDAwMDAyMDIxMjQ4MjAwMDE5MEUzMDAwMDMwNDQwMEZGNzgKLToxMEZBQzAwMDAwODUxMDJCQTEwMzAwMDAyNEU3MDAwMTE0NDBGRkY5N0EKLToxMEZBRDAwMDI1MDgwMDAxMDNFMDAwMDgwMDAwMDAwMDEwQTBGRkZENjEKLToxMEZBRTAwMDAwMDAyMDIxMjQ4MjAwMDQ4Q0UzMDAwMDMwNDQwMEZGNDkKLToxMEZBRjAwMDAwODUxMDJCQUQwMzAwMDAyNEU3MDAwNDE0NDBGRkY5M0IKLToxMEZCMDAwMDI1MDgwMDA0MDNFMDAwMDgwMDAwMDAwMDI3QkRGRkY4RkUKLToxMEZCMTAwMDI0MDJGRkZGQUZBMjAwMDAwMDgwMzgyMTI0MDUwMDJGM0YKLToxMEZCMjAwMDNDMDkwODAwMjUyOTcxQUMyNDA4MDBGRjI0MDZGRkZGQ0EKLToxMEZCMzAwMDkwRTIwMDAwMjRBM0ZGRkYwMDA2MjIwMjAwQzIxMDI2NkMKLToxMEZCNDAwMDMwNDIwMEZGMDAwMjEwODAwMDQ5MTAyMThDNDIwMDAwNkEKLToxMEZCNTAwMDMwNjUwMEZGMjRFNzAwMDExNEE4RkZGNTAwODIzMDI2N0QKLToxMEZCNjAwMDAwMDYxMDI3QUZBMjAwMDRBRkEyMDAwMDAwMDAyODIxNjkKLToxMEZCNzAwMDI3QTYwMDA0MDBDNTEwMjM5MDQ0MDAwMzI0QTIwMDAxMUUKLToxMEZCODAwMDAwQkQxODIxMzA0NTAwRkYyQ0EyMDAwNDE0NDBGRkY5RUQKLToxMEZCOTAwMEEwNjQwMDAwOEZBMjAwMDAwM0UwMDAwODI3QkQwMDA4NTkKLToxMEZCQTAwMDAwODA0ODIxMzBBQUZGRkYzMEM2MDBGRjMwRTdGRkZGOEEKLToxMEZCQjAwMDI3NDgwMTgwOEY0MjAxQjgwNDQwRkZGRThGODIwMDRDMkQKLToxMEZCQzAwMEFEMDIwMDAwOEY0MjAxMjRBRDAyMDAwNDhEMjIwMDIwMEUKLToxMEZCRDAwMEE1MDcwMDA4QTEwMjAwMEEyNDAyMDAxNkExMDIwMDBCREEKLToxMEZCRTAwMDkzNDMwMTIwOEQyMjAwMDg4RDI0MDAwNDMwNjMwMEZGMjAKLToxMEZCRjAwMDAwNDMxMDIxOTc4MzAwM0UwMDQ0MTAyMThEMjUwMDI0RUUKLToxMEZDMDAwMDAwNDMxMDIzM0MwMzA4MDA4QzYzMzFBMDhGODQwMDI0NDAKLToxMEZDMTAwMEE1MDIwMDBDMjQ2MzAwRTgyNDAyRkZGRkE1MEEwMDBFRTEKLToxMEZDMjAwMEE1MDMwMDEwQTUwNjAwMTJBRDA1MDAxOEFEMDIwMDI0QzIKLToxMEZDMzAwMDk0ODIwMTE0MjQwM0ZGRjczMDQyRkZGRkFEMDIwMDI4MzUKLToxMEZDNDAwMDhDODIwMTE4QUQwMjAwMkMzQzAyMTAwMEFEMDAwMDMwODcKLToxMEZDNTAwMEFGNDIwMUI4OEQyMjAwMjAwMDQzMTAyNDAzRTAwMDA4QzkKLToxMEZDNjAwMEFEMjIwMDIwOEY4MjAwMjQzMEU3RkZGRjAwODA0ODIxNzIKLToxMEZDNzAwMDkwNDIwMEQzMzBBNUZGRkYzMEM2MDBGRjAwMDIxMTAwMDQKLToxMEZDODAwMDMwNDIwRjAwMDBFMjM4MjUyNzQ4MDE4MDhGNDIwMUI4M0EKLToxMEZDOTAwMDA0NDBGRkZFOEY4MjAwNENBRDAyMDAwMDhGNDIwMTI0MjEKLToxMEZDQTAwMEFEMDIwMDA0OEQyMjAwMjBBNTA3MDAwOEExMDIwMDBBNzEKLToxMEZDQjAwMDI0MDIwMDE3QTEwMjAwMEI5MzQzMDEyMDhEMjIwMDA4QUIKLToxMEZDQzAwMDhEMjQwMDA0MzA2MzAwRkYwMDQzMTAyMTk3ODMwMDNFMjEKLToxMEZDRDAwMDAwNDQxMDIxOEY4NDAwMjQwMDQzMTAyMzNDMDMwODAwQkIKLToxMEZDRTAwMDhDNjMzMUEwQTUwMjAwMENBNTA1MDAwRTI0NjMwMEU4N0EKLToxMEZDRjAwMEE1MDMwMDEwQTUwNjAwMTJBRDAwMDAxNDhEMjIwMDI0RkIKLToxMEZEMDAwMEFEMDIwMDE4OEM4MjAwNUNBRDAyMDAxQzhDODIwMDU4OTEKLToxMEZEMTAwMEFEMDIwMDIwMjQwMkZGRkZBRDAyMDAyNDk0ODIwMEU2MjEKLToxMEZEMjAwMDMwNDJGRkZGQUQwMjAwMjg5NDgyMDA2MDk0ODMwMEJFNDEKLToxMEZEMzAwMDMwNDI3RkZGMzA2M0ZGRkYwMDAyMTIwMDAwNDMxMDIxQkEKLToxMEZENDAwMEFEMDIwMDJDM0MwMjEwMDBBRDAwMDAzMEFGNDIwMUI4MDMKLToxMEZENTAwMDk0ODIwMEJFMjQwM0ZGRjcwMEEyMTAyMUE0ODIwMEJFRkIKLToxMEZENjAwMDhEMjIwMDIwMDA0MzEwMjQwM0UwMDAwOEFEMjIwMDIwNzMKLToxMEZENzAwMDI3NDMwMTgwOEY0MjAxQjgwNDQwRkZGRTI0MDIwMDE4OEYKLToxMEZEODAwMEFDNjQwMDAwQTA2MjAwMEI4RjgyMDAyNDk0NDIwMEU2NjUKLToxMEZEOTAwMEE0NjIwMDEwM0MwMjEwMDBBQzYwMDAzMDAzRTAwMDA4RDgKLToxMEZEQTAwMEFGNDIwMUI4Mjc0MzAxODA4RjQyMDFCODA0NDBGRkZFRjMKLToxMEZEQjAwMDhGODIwMDI4OTQ0MjAwMUMzMDQyRkZGRjAwMDIxMUMwRDUKLToxMEZEQzAwMEFDNjIwMDAwMjQwMjAwMTlBMDYyMDAwQjNDMDIxMDAwOEIKLToxMEZERDAwMEFDNjAwMDMwMDNFMDAwMDhBRjQyMDFCODhGODcwMDMwMEMKLToxMEZERTAwMDMwQzMwMEZGOEY0MjAxQjgwNDQwRkZGRThGODIwMDRDRjkKLToxMEZERjAwMDM0NjM2MDAwQUNBMjAwMDA5MzgyMDA0OEEwQTIwMDA1MUEKLToxMEZFMDAwMDhDRTIwMDEwQTRBMjAwMDZBNEEzMDAwODhDODIwMDIwQUIKLToxMEZFMTAwMDI0MDNGRkY3QTBBMjAwMEEyNDAyMDAwMkEwQTIwMDBCMDQKLToxMEZFMjAwMDhDRTIwMDAwQUNBMjAwMTA4Q0UyMDAwNEFDQTIwMDE0MzIKLToxMEZFMzAwMDhDRTIwMDFDQUNBMjAwMjQ4Q0UyMDAyMEFDQTIwMDI4QzIKLToxMEZFNDAwMDhDRTIwMDJDQUNBMjAwMkM4QzgyMDAyNEFDQTIwMDE4MDYKLToxMEZFNTAwMDNDMDIxMDAwQUY0MjAxQjg4QzgyMDAyMDAwNDMxMDI0MDUKLToxMEZFNjAwMDAzRTAwMDA4QUM4MjAwMjA5MzgyMDA0ODI0MDMwMDAxRDQKLToxMEZFNzAwMDI3QkRGRkU4MDA0MzMwMDQyQzQyMDAyMEFGQjAwMDEwNDMKLToxMEZFODAwMEFGQkYwMDE0MjQxMEZGRkUxMDQwMDAwNTI3NDUwMTgwN0QKLToxMEZFOTAwMDNDMDIwODAwOEM0MjMxOTAwQTAwMTU5ODAwNDYxMDI0NUMKLToxMEZFQTAwMDNDMDIwODAwOEM0MjMxOTQwMDQ2MTAyNDE0NDAwMDA3QTQKLToxMEZFQjAwMDI0MDYwMDg0OEY4MzAwMjQyNDEwRkZGRjkwNjIwMDYyRDgKLToxMEZFQzAwMDMwNDIwMDBGMzQ0MjAwNDBBMDYyMDA2MjBFMDAxNTY0MTAKLToxMEZFRDAwMDAwMDAwMDAwMDIwMDEwMjE4RkJGMDAxNDhGQjAwMDEwM0UKLToxMEZFRTAwMDAzRTAwMDA4MjdCRDAwMTg4RjgzMDAyODI3QkRGRkUwMkUKLToxMEZFRjAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDFDMUMKLToxMEZGMDAwMDkwNjIwMDBEMDBBMDkwMjEzMEQxMDBGRjMwNDIwMDdGQjAKLToxMEZGMTAwMEEwNjIwMDBEOEY4NTAwMjQ4RTQzMDAxODAwODA4MDIxOTAKLToxMEZGMjAwMDhDQTIwMDdDMTQ2MjAwMDUyNDAyMDAwRTkwQTIwMDYzRTMKLToxMEZGMzAwMDM0NDIwMDIwMEEwMDE1QzFBMEEyMDA2MzBFMDAxNTg3RkMKLToxMEZGNDAwMEEzODIwMDQ4MjQwM0ZGRkYxMDQzMDA0NzI0MDRGRkZGNUYKLToxMEZGNTAwMDUyMjAwMDQ1MDAwMDIwMjE4RTQzMDAwMDNDMDIwMDEwOEEKLToxMEZGNjAwMDAwNjIxMDI0NTA0MDAwMDQzQzAyMDAwODAyMDAyMDIxREUKLToxMEZGNzAwMDBBMDAxNUQwMjQwMjAwMTUwMDYyMTAyNDUwNDAwMDA5MjgKLToxMEZGODAwMDhFNDUwMDAwMDIwMDIwMjEyNDAyMDAxNDBFMDAxNTg3NzcKLToxMEZGOTAwMEEzODIwMDQ4MjQwM0ZGRkYxMDQzMDAzMzI0MDRGRkZGMjMKLToxMEZGQTAwMDhFNDUwMDAwM0MwMjAwMDIwMEEyMTAyNDEwNDAwMDE2MDIKLToxMEZGQjAwMDNDMDIwMDA0OEY4NjAwMjg4Q0MyMDAxNDhDQzMwMDEwMDEKLToxMEZGQzAwMDhDQzQwMDE0MDA0MzEwMjMwMDQ0MTAyQjUwNDAwMDA1NDMKLToxMEZGRDAwMDAyMDAyMDIxOEU0MzAwMkM4Q0MyMDAxMDEwNjIwMDAzMEUKLToxMEZGRTAwMDAyMDAyMDIxMEEwMDE2MDEyNDAyMDAxMjNDMDIwMDA0MzMKLToxMEZGRjAwMDAwQTIxMDI0NTA0MDAwMUMwMDAwMjAyMTAyMDAyMDIxRkIKLTowMjAwMDAwNDAwMDFGOQotOjEwMDAwMDAwMEEwMDE2MDEyNDAyMDAxMzAwQTIxMDI0MTA0MDAwMDY2QQotOjEwMDAxMDAwOEY4MzAwMjg4QzYyMDAxMDUwNDAwMDEzMDAwMDIwMjFDNAotOjEwMDAyMDAwMEEwMDE1RkIwMjAwMjAyMThDNjIwMDEwNTA0MDAwMDRFMQotOjEwMDAzMDAwOEU0MjAwMkMwMjAwMjAyMTBBMDAxNjAxMjQwMjAwMTEyOQotOjEwMDA0MDAwNTA0MDAwMDkwMDAwMjAyMTAyMDAyMDIxMjQwMjAwMTc1NgotOjEwMDA1MDAwMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGMTA0MzAwMDIwRgotOjEwMDA2MDAwMjQwNEZGRkYwMDAwMjAyMThGQkYwMDFDOEZCMjAwMTg2NgotOjEwMDA3MDAwOEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDg0MQotOjEwMDA4MDAwMjdCRDAwMjA5MzgzMDAyQzI3QkRGRkUwMjQwMjAwMzQwRAotOjEwMDA5MDAwQUZCMjAwMThBRkIxMDAxNEFGQkYwMDFDQUZCMDAwMTA3QQotOjEwMDBBMDAwMDA4MDg4MjExNDYyMDAwQzAwQTA5MDIxOEY4NDAwMzAxMQotOjEwMDBCMDAwMEUwMDE0QjA4QzkwMDAzMDEyMDIwMDA3MjQwMjAwMDVEQwotOjEwMDBDMDAwMDIyMDIwMjEwRTAwMTU4N0EzODIwMDQ4MjQwM0ZGRkY5MQotOjEwMDBEMDAwMTA0MzAwNUYyNDA0RkZGRjkyNDIwMDA0MTA0MDAwMDkxNwotOjEwMDBFMDAwOEY4MjAwMjQwMjIwMjAyMTI0MDIwMDBDMEUwMDE1ODc5QwotOjEwMDBGMDAwQTM4MjAwNDgyNDAzRkZGRjEwNDMwMDU1MjQwNEZGRkZBMAotOjEwMDEwMDAwOEY4MjAwMjRBMzgwMDAyMDhFNDMwMDA0OEM0NDAwODA1MgotOjEwMDExMDAwM0MwMjAwRkYzNDQyRkZGRjAwNjIxODI0MDA4MzIwMkJDMgotOjEwMDEyMDAwMTA4MDAwMDhBRjgzMDAzODAyMjAyMDIxMjQwMjAwMTkyQgotOjEwMDEzMDAwMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGMTA0MzAwNDRFQwotOjEwMDE0MDAwMjQwNEZGRkY5NzgyMDAzRThGODcwMDQwOEY4ODAwMzg4RAotOjEwMDE1MDAwMDA0NzEwMjMxMTAwMDAzOUE3ODIwMDNFOEY4NjAwMjQzQgotOjEwMDE2MDAwMzA0NUZGRkY4Rjg0MDA0QzkwQzMwMEJDM0MwMjA4MDA2OAotOjEwMDE3MDAwOEM0MjMxQTAwMDAzMTg4MjMwNzAwMDAxMDA4MjIwMjFERgotOjEwMDE4MDAwMDAxMDEwODAwMTAyMTAyMTAwQTIyODJCMTBBMDAwMTBFNgotOjEwMDE5MDAwMjQ4MjAwODg4Rjg0MDAzMDEwODIwMDBEM0MwMzNGMDFEMAotOjEwMDFBMDAwOEU0MjAwMDAwMDQzMTAyNDNDMDMyNTAwMTQ0MzAwMDY0NwotOjEwMDFCMDAwMzBFNTAwRkY4QzgyMDAwMEFDQzIwMDg4OEM4MjAwMTAwOQotOjEwMDFDMDAwMEEwMDE2NjFBQ0MyMDA5ODBFMDAxNDg1MDAwMDMwMjFCMAotOjEwMDFEMDAwOEY4NTAwMzg5MzgzMDAyMDhGODYwMDI0MzBBMjAwMDM4RgotOjEwMDFFMDAwMDAwMjEwMjMzMDQyMDAwMzAwNDMzODIxQTM4NzAwMjA3RgotOjEwMDFGMDAwOTRDNDAwRTQwMEEyMjgyMThGODMwMDQwOEY4MjAwNDQzMQotOjEwMDIwMDAwMzQ4NDEwMDBBNEM0MDBFNDAwNDMxMDIxQUY4MjAwNDRGMQotOjEwMDIxMDAwMTIwMDAwMEVBRjg1MDA0MDI0RTIwMDA0QTM4MjAwMjBGQgotOjEwMDIyMDAwOTRDMjAwRTQyNEEzMDAwNEFGODMwMDQwMzQ0MjIwMDBDMQotOjEwMDIzMDAwQTRDMjAwRTQwQTAwMTY4MTAwMDAyMDIxOEY4MjAwNDQzRAotOjEwMDI0MDAwQUY4MDAwNDAwMDQ3MTAyMUFGODIwMDQ0MDAwMDIwMjExMQotOjEwMDI1MDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAzOAotOjEwMDI2MDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwOEY4NjAwMjRCNQotOjEwMDI3MDAwMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwOTBDMjAwNjMwRAotOjEwMDI4MDAwMzA0MjAwMjAxMDQwMDAwODMwQTUwMEZGOENDMjAwN0NFNgotOjEwMDI5MDAwMjQwM0ZGREYyNDQyMDAwMUFDQzIwMDdDOTBDMjAwNjM1MwotOjEwMDJBMDAwMDA0MzEwMjRBMEMyMDA2MzEwQTAwMDIzOEY4MzAwMjQwOQotOjEwMDJCMDAwMjc1MDAxODAwMjAwMjgyMTBFMDAxNTY0MjQwNjAwODJDOAotOjEwMDJDMDAwOEY4MjAwMjQ5MDQyMDA2MzMwNDIwMDQwNTA0MDAwMTk2OQotOjEwMDJEMDAwQTM4MDAwNDg4RjgzMDAzMDhGNDIwMUI4MDQ0MEZGRkVBNgotOjEwMDJFMDAwOEY4MjAwNENBRTAyMDAwMDI0MDI2MDgyQTYwMjAwMDg0OQotOjEwMDJGMDAwMjQwMjAwMDJBMjAyMDAwQjhDNjIwMDA4QUUwMjAwMTA3MQotOjEwMDMwMDAwOEM2MjAwMENBRTAyMDAxNDhDNjIwMDE0QUUwMjAwMTg2NQotOjEwMDMxMDAwOEM2MjAwMThBRTAyMDAyNDhDNjIwMDI0QUUwMjAwMjgxOQotOjEwMDMyMDAwOEM2MjAwMjhBRTAyMDAyQzNDMDIxMDAwQUY0MjAxQjhFMwotOjEwMDMzMDAwQTM4MDAwNDg4RjgzMDAyNDhGQkYwMDE0OEZCMDAwMTA2QgotOjEwMDM0MDAwOTA2MjAwNjMyN0JEMDAxODMwNDIwMDdGQTA2MjAwNjMwNgotOjEwMDM1MDAwOTc4MjAwM0U4Rjg2MDA0MDhGODUwMDI0OTM4MzAwMkM3NwotOjEwMDM2MDAwMDA0NjEwMjNBNzgyMDAzRUE0QTAwMEU0OTBBNDAwNjNFRQotOjEwMDM3MDAwOEY4MjAwNDRBRjgzMDA0MDI0MDNGRkJGMDA0NjEwMjE1QQotOjEwMDM4MDAwMDA4MzIwMjRBRjgyMDA0NEEwQTQwMDYzOEY4MjAwMjQ1NQotOjEwMDM5MDAwQTA0MDAwQkQ4RjgyMDAyNDAzRTAwMDA4QTQ0MDAwQkVGRQotOjEwMDNBMDAwOEY4QTAwMjQyN0JERkZFMEFGQjEwMDE0QUZCMDAwMTA2QQotOjEwMDNCMDAwOEY4ODAwNDBBRkJGMDAxODkzODkwMDIwOTU0MjAwRTQ2OQotOjEwMDNDMDAwMzBEMTAwRkYwMTA5MTgyQjAwODA4MDIxMzBBQzAwRkZFNAotOjEwMDNEMDAwMzA0N0ZGRkYwMDAwNTgyMTE0NjAwMDAzMzEwNjAwRkY4MgotOjEwMDNFMDAwMDEyMDMwMjEwMTA5NTgyMzk3ODMwMDNFMDA2ODEwMkIxQgotOjEwMDNGMDAwMTQ0MDAwMzIwMDAwMDAwMDE0NjgwMDA3MjQwMjAwMDFDRAotOjEwMDQwMDAwOEUwMjAwMjAyNDAzRkZGQjM0RTc4MDAwMDA0MzEwMjQwOQotOjEwMDQxMDAwQUUwMjAwMjAyNDAyMDAwMTM0RTcwODgwMTU4MjAwMDVBNgotOjEwMDQyMDAwMzE2NUZGRkYwRTAwMTRENTAyMDAyMDIxMEEwMDE3MTZDNwotOjEwMDQzMDAwMDIwMDIwMjEwRTAwMTUwNjAyMDAyMDIxMEUwMDE1NDlBMQotOjEwMDQ0MDAwOEY4NDAwNEM4Rjg0MDAyNDk0ODIwMDYwMjQ0MjAwMDEzOQotOjEwMDQ1MDAwQTQ4MjAwNjA5NDgyMDA2MDNDMDMwODAwOEM2MzMxODhCMQotOjEwMDQ2MDAwMzA0MjdGRkY1NDQzMDAwRjAyMDAyMDIxOTQ4MjAwNjAzRAotOjEwMDQ3MDAwMjQwMzgwMDAwMDQzMTAyNEE0ODIwMDYwOTA4MjAwNjA2NgotOjEwMDQ4MDAwOTA4MzAwNjAzMDQyMDBGRjAwMDIxMUMyMDAwMjEwMjc3QQotOjEwMDQ5MDAwMDAwMjExQzAzMDYzMDA3RjAwNjIxODI1QTA4MzAwNjA1NQotOjEwMDRBMDAwMDIwMDIwMjEwMjIwMjgyMThGQkYwMDE4OEZCMTAwMTRFNAotOjEwMDRCMDAwOEZCMDAwMTAwQTAwMTY4ODI3QkQwMDIwOTE0MjAwNjMwQgotOjEwMDRDMDAwMjQwM0ZGODAwMDQzMTAyNUExNDIwMDYzOTc4MjAwM0U3MQotOjEwMDREMDAwMzA0OEZGRkYxMTAwMDAyMDkzODMwMDIwOEY4NDAwMjQwOAotOjEwMDRFMDAwMDA0QjEwMjMzMDQ2MDBGRjk0ODMwMEU0MjQwMkVGRkYwQQotOjEwMDRGMDAwMDE2ODI4MkIwMDYyMTgyNEE0ODMwMEU0MTRBMDAwMDNFMAotOjEwMDUwMDAwOEUwMjAwMjAwMTAwNTgyMTAwMDAzMDIxMjQwM0ZGRkI0RgotOjEwMDUxMDAwMzRFNzgwMDAwMDQzMTAyNEFFMDIwMDIwMjQwMjAwMDFEMgotOjEwMDUyMDAwMTU4MjAwMDUzMTY1RkZGRjBFMDAxNEQ1MDIwMDIwMjE2MQotOjEwMDUzMDAwMEEwMDE3M0U5NzgzMDAzRTBFMDAxNTA2MDIwMDIwMjE5OAotOjEwMDU0MDAwOTc4MzAwM0U4RjgyMDA0MEE3ODAwMDNFMDA0MzEwMjMyNwotOjEwMDU1MDAwQUY4MjAwNDA5MzgzMDAyMDhGODIwMDI0OEZCRjAwMTg1OQotOjEwMDU2MDAwOEZCMTAwMTQ4RkIwMDAxMDI3QkQwMDIwMDNFMDAwMDhGOQotOjEwMDU3MDAwQTA0MzAwQkQ4RjgyMDAyNDkwNDMwMDg4OTA0NTAwQkRCOQotOjEwMDU4MDAwMjQ0OTAwODgzMDYzMDAzRjI0NjNGRkUwMjQwMjAwMDExNwotOjEwMDU5MDAwMDA2MjM4MDQyQzYzMDAyMDMwRTgwMDE5QTM4NTAwMjA5NQotOjEwMDVBMDAwMTA2MDAwMTBBRjg5MDAzMDNDMDI4MDAwMzQ0MjAwMDIyRAotOjEwMDVCMDAwMjQwNTAwMDEyNDA2MDAwMTE1MDAwMDA4MDBFMjE4MjRBQgotOjEwMDVDMDAwMDAwMDI4MjExNDYwMDAwNTMwRTIwMDIwMTA0MDAwMDVFMgotOjEwMDVEMDAwMjQwNTAwMDE5MTI2MDAwMTMwQzYwMDAxMEEwMDE2RDU0RAotOjEwMDVFMDAwMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRDg2NQotOjEwMDVGMDAwQUZCMDAwMTA4RjkwMDAzMEFGQjQwMDIwQUZCMTAwMTQ0NgotOjEwMDYwMDAwQUZCRjAwMjRBRkIzMDAxQ0FGQjIwMDE4OEUwNTAwMTBCRQotOjEwMDYxMDAwM0MwMjA4MDA4QzQyMzFCMDhGODYwMDM0MzBBMzNGRkY4QgotOjEwMDYyMDAwMDA2MjE4MkI4Q0QzMDAxNDAwODA4ODIxOENEMjAwMjAwQgotOjEwMDYzMDAwMTA2MDAwNzgwMDAwQTAyMTkwQzMwMDBEMjQwMkZGODAwQwotOjEwMDY0MDAwMDA0MzEwMjQzMDQyMDBGRjUwNDAwMDczMDIyMDIwMjE1QwotOjEwMDY1MDAwMDAwNTEzODIzMDQyMDAwMzU0NDAwMDZGMDIyMDIwMjEyNQotOjEwMDY2MDAwOTRDMzAwMUM4RjgyMDAyNDhFMDUwMDI4QTQ0MzAxMTQyQgotOjEwMDY3MDAwOENDMjAwMTAwMjYyMTgyMzE0NjUwMDA3MjQwMjAwMUZCOAotOjEwMDY4MDAwOEY4MjAwMzgwMDYyMTAyMTAyNjIxMDJCMTA0MDAwMDg5NwotOjEwMDY5MDAwOEY4MzAwMjgyNDAyMDAxODBFMDAxNTg3QTM4MjAwNDhDQgotOjEwMDZBMDAwMjQwM0ZGRkYxMDQzMDA2RjI0MDRGRkZGOEY4MzAwMjgwMwotOjEwMDZCMDAwOEY4NDAwMzg4QzYyMDAxMDAyNDQ5MDIxMDA0NDEwMjM4MwotOjEwMDZDMDAwQUM2MjAwMTA4RjgyMDAyNEFDNzIwMDIwOEM0MjAwNjg2MwotOjEwMDZEMDAwMDA1MjEwMkIxMDQwMDAwOThGODMwMDM0MDIyMDIwMjE4QgotOjEwMDZFMDAwMjQwMjAwMUQwRTAwMTU4N0EzODIwMDQ4MjQwM0ZGRkY4QgotOjEwMDZGMDAwMTA0MzAwNUMyNDA0RkZGRjhGODMwMDM0OEUwMjAwMjQyQgotOjEwMDcwMDAwOEM2MzAwMjQxMDQzMDAwNzAyMjAyMDIxMjQwMjAwMUNENwotOjEwMDcxMDAwMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGMTA0MzAwNTFGOQotOjEwMDcyMDAwMjQwNEZGRkY4Rjg0MDAyODhDODIwMDI0MjQ0MjAwMDFDRgotOjEwMDczMDAwQUM4MjAwMjQxMjUzMDAwNDhGODIwMDI0OEM0MjAwNjg5MwotOjEwMDc0MDAwNTY0MjAwMEU4RTAyMDAwMDhFMDIwMDAwM0MwMzAwODAyNAotOjEwMDc1MDAwMDA0MzEwMjQxNDQwMDAwRDI0MDIwMDFBMDIyMDIwMjExRQotOjEwMDc2MDAwMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGMTA0MzAwM0RCRAotOjEwMDc3MDAwMjQwNEZGRkYwQTAwMTdEMjhFMDIwMDE0M0MwMzAwODBGRAotOjEwMDc4MDAwMDA0MzEwMjQ1MDQwMDAwMzhFMDIwMDE0QUM4MDAwMjA2RgotOjEwMDc5MDAwOEUwMjAwMTQyNDEyRkZGRjEwNTIwMDA2MjQwMjAwMUJEOAotOjEwMDdBMDAwMDIyMDIwMjEwRTAwMTU4N0EzODIwMDQ4MTA1MjAwMkQ0MAotOjEwMDdCMDAwMjQwNEZGRkY4RTAzMDAwMDNDMDIwMDAxMDA2MjEwMjRBRAotOjEwMDdDMDAwMTA0MDAwMUYzQzAyMDA4MDAwNjIxMDI0MTQ0MDAwMDgwQQotOjEwMDdEMDAwMDIyMDIwMjEyNDAyMDAxQTBFMDAxNTg3QTM4MjAwNDg1RgotOjEwMDdFMDAwMjQwM0ZGRkYxMDQzMDAxRjI0MDRGRkZGMDIyMDIwMjFFOQotOjEwMDdGMDAwMDIwMDI4MjEwRTAwMTVBNzI0MDYwMDAxMjQwM0ZGRkY5NAotOjEwMDgwMDAwMjQwNEZGRkYxNDQzMDAwRTI0MTQwMDAxMEEwMDE4MDdGQgotOjEwMDgxMDAwOEZCRjAwMjQwMjIwMjAyMTI0MDIwMDBEOEZCRjAwMjQ1RQotOjEwMDgyMDAwOEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ1QQotOjEwMDgzMDAwOEZCMDAwMTAyN0JEMDAyODBBMDAxNTg3QTM4MjAwNDg0QQotOjEwMDg0MDAwOEY4MzAwMjgwMjIwMjAyMTAyODAzMDIxOTQ2MjAwMzYwQwotOjEwMDg1MDAwMjQwNTAwMDEyNDQyMDAwMTBFMDAxNkQ1QTQ2MjAwMzZEMgotOjEwMDg2MDAwMDAwMDIwMjE4RkJGMDAyNDhGQjQwMDIwOEZCMzAwMUMxNAotOjEwMDg3MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjFDQgotOjEwMDg4MDAwMDNFMDAwMDgyN0JEMDAyODhGODMwMDI0MjdCREZGRDg4MAotOjEwMDg5MDAwQUZCNDAwMjBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTQ2QQotOjEwMDhBMDAwQUZCMDAwMTBBRkJGMDAyNDkwNjIwMDYzOEY5MTAwMzBBMgotOjEwMDhCMDAwMjQxMkZGRkYzNDQyMDA0MDkyMjUwMDAwQTA2MjAwNjMzMgotOjEwMDhDMDAwOEUyMjAwMTAwMDgwOTgyMTMwQjAwMDNGMTA1MjAwMDZBOAotOjEwMDhEMDAwMDM2MEEwMjEyNDAyMDAwRDBFMDAxNTg3QTM4MjAwNDhBQQotOjEwMDhFMDAwMTA1MjAwNTIyNDA0RkZGRjhGODMwMDI0OEUyMjAwMTgzMAotOjEwMDhGMDAwOEM2MzAwN0MxMDQzMDAwNzAyNjAyMDIxMjQwMjAwMEU1QwotOjEwMDkwMDAwMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGMTA0MzAwNDcxMQotOjEwMDkxMDAwMjQwNEZGRkYyNDA0MDAyMDEyMDQwMDA0OEY4MzAwMjQxOQotOjEwMDkyMDAwOTA2MjAwNjMzNDQyMDAyMEEwNjIwMDYzOEY4NTAwMzgyQgotOjEwMDkzMDAwMTBBMDAwMUUwMDAwMDAwMDU2MDQwMDA0OEY4MjAwMjQ1NgotOjEwMDk0MDAwMDI2MDIwMjEwQTAwMTg1MTI0MDIwMDBBOTY4MzAwMEEzRQotOjEwMDk1MDAwMjQwNEZGRkQ5NDQyMDA2MDMwNDJGRkZGMTA0MzAwMzQ0NgotOjEwMDk2MDAwOEZCRjAwMjQzQzAyMDgwMDhDNDIzMThDMDA0NTEwMkJDNAotOjEwMDk3MDAwMTQ0MDAwMDYwMjYwMjAyMTAwMDAyODIxMEUwMDE2RDUzOAotOjEwMDk4MDAwMjQwNjAwMDEwQTAwMTg3ODAwMDAyMDIxMjQwMjAwMkQwRQotOjEwMDk5MDAwMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGMTA0MzAwMjNBNQotOjEwMDlBMDAwMjQwNEZGRkYwQTAwMTg3ODAwMDAyMDIxMTYwNDAwMDUyNwotOjEwMDlCMDAwOEY4NDAwMjQ4RTIzMDAxNDI0MDJGRkZGNTA2MjAwMTg0RAotOjEwMDlDMDAwMDI2MDIwMjE5NDgyMDA2MDI0NDIwMDAxQTQ4MjAwNjAyMQotOjEwMDlEMDAwOTQ4MjAwNjAzQzAzMDgwMDhDNjMzMTg4MzA0MjdGRkZDMgotOjEwMDlFMDAwNTQ0MzAwMEYwMjYwMjAyMTk0ODIwMDYwMjQwMzgwMDBBMQotOjEwMDlGMDAwMDA0MzEwMjRBNDgyMDA2MDkwODIwMDYwOTA4MzAwNjAxNQotOjEwMEEwMDAwMzA0MjAwRkYwMDAyMTFDMjAwMDIxMDI3MDAwMjExQzA5NAotOjEwMEExMDAwMzA2MzAwN0YwMDYyMTgyNUEwODMwMDYwMDI2MDIwMjFGRgotOjEwMEEyMDAwMEUwMDE2ODgyNDA1MDAwMTAwMDAyMDIxOEZCRjAwMjQzRAotOjEwMEEzMDAwOEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ0OAotOjEwMEE0MDAwOEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjhBRgotOjEwMEE1MDAwOEY4MzAwMjQyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTRBNAotOjEwMEE2MDAwOTA2MjAwNjM4Rjg3MDAzMDAwODA4MDIxMzQ0MjAwNDAxNAotOjEwMEE3MDAwOENFNjAwMTBBMDYyMDA2MzNDMDMwODAwOEM2MzMxQjA3OAotOjEwMEE4MDAwMzBDMjNGRkYwMDQzMTAyQjEwNDAwMDRFOEY4NTAwMzREMgotOjEwMEE5MDAwMjQwMkZGODA5MEEzMDAwRDAwNDMxMDI0MzA0MjAwRkY4OQotOjEwMEFBMDAwNTA0MDAwNDkwMjAwMjAyMTAwMDYxMzgyMzA0ODAwMDMxNAotOjEwMEFCMDAwMjQwMjAwMDI1NTAyMDA0NDAyMDAyMDIxOTRBMjAwMUNERQotOjEwMEFDMDAwOEY4NTAwMjQyNDAzMDAyM0E0QTIwMTE0OENFNjAwMDBENwotOjEwMEFEMDAwMDAwNjE2MDIzMDQyMDAzRjEwNDMwMDEwM0MwMzAwODMyMgotOjEwMEFFMDAwOENFMzAwMTg4Q0EyMDA3QzEwNjIwMDA2MjQwMjAwMEUyOQotOjEwMEFGMDAwMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGMTA0MzAwMzgyRgotOjEwMEIwMDAwMjQwNEZGRkY4RjgzMDAyNDkwNjIwMDYzMzQ0MjAwMjA5RQotOjEwMEIxMDAwQTA2MjAwNjMwQTAwMThCRDhGODMwMDI4MDBDMzEwMjQ2MAotOjEwMEIyMDAwMTQ0MzAwMDc4RjgzMDAyODkwQTIwMDYyMzA0MjAwMEYxOAotOjEwMEIzMDAwMzQ0MjAwMjBBMEEyMDA2MkEzODgwMDNDOEY4MzAwMjhEQQotOjEwMEI0MDAwOTA2MjAwMEQzMDQyMDA3RkEwNjIwMDBEOEY4MzAwMzg1QwotOjEwMEI1MDAwMTA2MDAwMTgwMjAwMjAyMThGODQwMDM0OEM4MjAwMTA2NQotOjEwMEI2MDAwMDA0MzEwMkIxMDQwMDAwOTI0MDIwMDE4MDIwMDIwMjEyRAotOjEwMEI3MDAwMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGMTA0MzAwMThDRQotOjEwMEI4MDAwMjQwNEZGRkYwQTAwMThFNTAwMDAyMDIxOEM4MjAwMTBEOQotOjEwMEI5MDAwMjQwNTAwMDEwMjAwMjAyMTAwNDMxMDIzOEY4MzAwMjgzOAotOjEwMEJBMDAwMjQwNjAwMDEwRTAwMTZENUFDNjIwMDEwMEEwMDE4RTVGQwotOjEwMEJCMDAwMDAwMDIwMjEwRTAwMTY4ODI0MDUwMDAxMEEwMDE4RTUxNwotOjEwMEJDMDAwMDAwMDIwMjEwMjAwMjAyMTI0MDIwMDBEOEZCRjAwMTQwQwotOjEwMEJEMDAwOEZCMDAwMTAyN0JEMDAxODBBMDAxNTg3QTM4MjAwNDhCNwotOjEwMEJFMDAwOEZCRjAwMTQ4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDhCOAotOjEwMEJGMDAwMjdCRDAwMTgyN0JERkZEOEFGQjAwMDEwOEY5MDAwMzA4MAotOjEwMEMwMDAwQUZCMzAwMUNBRkJGMDAyMEFGQjIwMDE4QUZCMTAwMTRFQgotOjEwMEMxMDAwOEUxMjAwMTAzQzAzMDgwMDhDNjMzMUIwMzI0MjNGRkY1QgotOjEwMEMyMDAwMDA0MzEwMkIxMDQwMDA3QzAwODA5ODIxOEY4NTAwMzRGOQotOjEwMEMzMDAwMjQwMkZGODA5MEEzMDAwRDAwNDMxMDI0MzA0MjAwRkZFNwotOjEwMEM0MDAwNTA0MDAwNzYwMjYwMjAyMTAwMTIxMzgyMzA0MjAwMDNERgotOjEwMEM1MDAwMjQwMzAwMDE1NDQzMDA3MTAyNjAyMDIxOTBBMjAwMEQ4MgotOjEwMEM2MDAwMzA0MjAwMDg1NDQwMDAwMzhGODIwMDM4MEEwMDE5MTVGMgotOjEwMEM3MDAwMjQwMjAwMjQ1MDQwMDAwMzhFMDMwMDBDMEEwMDE5MTVDMgotOjEwMEM4MDAwMjQwMjAwMjc4Q0EyMDAyMDE0NjIwMDA1MjQwMjAwMjAwOAotOjEwMEM5MDAwOEUwMzAwMDg4Q0EyMDAyNDEwNjIwMDA4MjQwMjAwMjBBOQotOjEwMENBMDAwMEUwMDE1ODdBMzgyMDA0ODI0MDNGRkZGMTA0MzAwNkE0QgotOjEwMENCMDAwMjQwNEZGRkYwQTAwMTk0MDhGODQwMDI4OEUwMjAwMTRDQwotOjEwMENDMDAwMjQxMUZGRkYxNDUxMDAwMzhGODcwMDI0MEEwMDE5M0JGMQotOjEwMENEMDAwMjQwMjAwMjU4RTAzMDAxODhDRTIwMDdDMTQ2MjAwMTZBQQotOjEwMENFMDAwMjQwMjAwMEU4RTAzMDAyNDhDQTIwMDI4MTQ2MjAwMTIzRAotOjEwMENGMDAwMjQwMjAwMjE4RTA2MDAyODhDQTIwMDJDMTRDMjAwMEVCMwotOjEwMEQwMDAwMjQwMjAwMUY4RTAzMDAyQzEwNjAwMDBCMjQwMjAwMjMxRAotOjEwMEQxMDAwOENFMjAwNjgwMDQzMTAyQjE0NDAwMDA3MjQwMjAwMjZEOAotOjEwMEQyMDAwOENBMjAwMTQwMDY2MTgyMTAwNDMxMDJCNTA0MDAwMDdDRAotOjEwMEQzMDAwOEY4NDAwMjgyNDAyMDAyMjBFMDAxNTg3QTM4MjAwNDgxOQotOjEwMEQ0MDAwMTA1MTAwNDUyNDA0RkZGRjhGODQwMDI4MjQwM0ZGRjc3RgotOjEwMEQ1MDAwOTA4MjAwMEQwMDQzMTAyNEEwODIwMDBEOEY4NjAwMjQ5NQotOjEwMEQ2MDAwM0MwMzA4MDA4QzYzMzFBQzhGODIwMDRDOTRDNDAwRTBEQgotOjEwMEQ3MDAwOEY4NTAwMjgwMDQzMTAyMTMwODQ3RkZGMDAwNDIwNDAyRAotOjEwMEQ4MDAwMDA0NDEwMjEzMDQzMDA3RjAzNDMyMDIxM0MwMzAwMEUyOAotOjEwMEQ5MDAwMDA4MzIwMjEyNDAzRkY4MDAwNDMxMDI0QUY0MjAwMkM1NQotOjEwMERBMDAwQTQ5MjAwMDA4Q0EyMDAyODI0NDIwMDAxQUNBMjAwMjhEQQotOjEwMERCMDAwOENBMjAwMkM4RTAzMDAyQzAwNDMxMDIxQUNBMjAwMkMyRQotOjEwMERDMDAwOEUwMjAwMkNBQ0EyMDAzMDhFMDIwMDE0QUNBMjAwMzRDMwotOjEwMEREMDAwOTRBMjAwM0EyNDQyMDAwMUE0QTIwMDNBOTRDNjAwRTA4MgotOjEwMERFMDAwM0MwMjA4MDA4QzQyMzFCMDI0QzQwMDAxMzA4MzdGRkZGNAotOjEwMERGMDAwMTQ2MjAwMTMwMDgwMzAyMTI0MDI4MDAwMDA4MjMwMjQxRAotOjEwMEUwMDAwMzBDMkZGRkYwMDAyMTNDMjMwNDIwMEZGMDAwMjEwMjc3MQotOjEwMEUxMDAwMEEwMDE5N0QwMDAyMzNDMDAyNjAyMDIxMjQwMjAwMEQ2NwotOjEwMEUyMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ0OQotOjEwMEUzMDAwOEZCMDAwMTAyN0JEMDAyODBBMDAxNTg3QTM4MjAwNDg0NAotOjEwMEU0MDAwOEY4MjAwMjQwMjYwMjAyMTI0MDUwMDAxMEUwMDE2ODhGNAotOjEwMEU1MDAwQTQ0NjAwRTAwMDAwMjAyMThGQkYwMDIwOEZCMzAwMUNCQgotOjEwMEU2MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjFENQotOjEwMEU3MDAwMDNFMDAwMDgyN0JEMDAyODI3QkRGRkUwQUZCMTAwMTQ0NAotOjEwMEU4MDAwOEY5MTAwMzBBRkIwMDAxMEFGQkYwMDE4OEUyNjAwMTA1OQotOjEwMEU5MDAwM0MwMzA4MDA4QzYzMzFCMDMwQzIzRkZGMDA0MzEwMkI4RAotOjEwMEVBMDAwMTA0MDAwNUUwMDgwODAyMThGODUwMDM0MjQwMkZGODA4NgotOjEwMEVCMDAwOTBBMzAwMEQwMDQzMTAyNDMwNDIwMEZGNTA0MDAwNTgyMgotOjEwMEVDMDAwMDIwMDIwMjE4RjgyMDAzODEwNDAwMDA4MDAwNjEzODJBMwotOjEwMEVEMDAwOEY4MjAwMjQ5NzYzMDAwQTI0MDRGRkZEOTQ0MjAwNjA3RgotOjEwMEVFMDAwMzA0MkZGRkYxMDQzMDA1NTAwMDYxMzgyMzA0MjAwMDNEQQotOjEwMEVGMDAwMTQ0MDAwMEUwMDAwMDAwMDkyMjIwMDAyMTA0MDAwMDU4NQotOjEwMEYwMDAwOEUyMzAwMjQ1MDYwMDAxNTkyMjMwMDAzMEEwMDE5QjZCNgotOjEwMEYxMDAwMDIwMDIwMjE4Q0EyMDAyNDUwNjIwMDEwOTIyMzAwMDNDMgotOjEwMEYyMDAwMDIwMDIwMjEwQTAwMTlCRTI0MDIwMDBGOTBBMjAwMEQyOQotOjEwMEYzMDAwMzA0MjAwMDg1NDQwMDAwOTkyMjMwMDAzMDIwMDIwMjE5RgotOjEwMEY0MDAwMjQwMjAwMTAwRTAwMTU4N0EzODIwMDQ4MjQwM0ZGRkYyRgotOjEwMEY1MDAwMTA0MzAwM0EyNDA0RkZGRjkyMjMwMDAzMjQwMjAwMDJGRQotOjEwMEY2MDAwNTQ2MjAwMEM5MjIyMDAwMzhGODIwMDM4NTQ0MDAwMDkyMgotOjEwMEY3MDAwOTIyMjAwMDMwMjAwMjAyMTI0MDIwMDJDMEUwMDE1ODc3QgotOjEwMEY4MDAwQTM4MjAwNDgyNDAzRkZGRjEwNDMwMDJDMjQwNEZGRkYyQQotOjEwMEY5MDAwOTIyMjAwMDMwMjIwMjgyMTAyMDAyMDIxMzg0NjAwMTA1RQotOjEwMEZBMDAwMkNDNjAwMDEyQzQyMDAwMTBFMDAxNUE3MDA0NjMwMjU3QQotOjEwMEZCMDAwMjQxMUZGRkYxMDUxMDAyMTI0MDRGRkZGOEY4MzAwMzgwQwotOjEwMEZDMDAwMTA2MDAwMTIwMjAwMjAyMTNDMDIwODAwOEM0MjMxOEM4QgotOjEwMEZEMDAwMDA0MzEwMkIxNDQwMDAwNjAwMDAwMDAwMDAwMDI4MjFGMAotOjEwMEZFMDAwMEUwMDE2RDUyNDA2MDAwMTBBMDAxOUZDMDAwMDIwMjE3RAotOjEwMEZGMDAwMjQwMjAwMkQwRTAwMTU4N0EzODIwMDQ4MTA1MTAwMEYxNwotOjEwMTAwMDAwMjQwNEZGRkYwQTAwMTlGQzAwMDAyMDIxMEUwMDE2ODhBRQotOjEwMTAxMDAwMjQwNTAwMDEwQTAwMTlGQzAwMDAyMDIxMDIwMDIwMjEwMwotOjEwMTAyMDAwMjQwMjAwMEQ4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA4NAotOjEwMTAzMDAwMjdCRDAwMjAwQTAwMTU4N0EzODIwMDQ4OEZCRjAwMTgzMwotOjEwMTA0MDAwOEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDg2MQotOjEwMTA1MDAwMjdCRDAwMjA5MzgzMDAzQzI3QkRGRkUwMjQwMjAwMDI0RgotOjEwMTA2MDAwQUZCMTAwMTRBRkIwMDAxMDAwODA4ODIxQUZCRjAwMThFRQotOjEwMTA3MDAwMDAwMDgwMjExMDYyMDA4QzI0MDRGRkZEOTc4NTAwM0U1MwotOjEwMTA4MDAwOEY4MzAwNDAzMEEyRkZGRjAwNDMxMDJCNTQ0MDAwN0RBRgotOjEwMTA5MDAwOEY4NDAwNDQwRTAwMTQ0ODAwMDAwMDAwM0MwMjA4MDA0OQotOjEwMTBBMDAwMjQ0Mjc1QUMwMjIwMjAyMTAwNDAyODIxMEUwMDE2MEU5QgotOjEwMTBCMDAwQUY4MjAwMzAyNDA5RkZGRjEwNDkwMDdCMjQwNEZGRkZBQQotOjEwMTBDMDAwM0MwODA4MDA4RDA4NzVCQzNDMDIwODAwOEM0MjMxQjAxOQotOjEwMTBEMDAwM0MwMzA4MDA5MDYzNzVBQzMxMDQzRkZGMDA4MjEwMkI4NQotOjEwMTBFMDAwMTA0MDAwMUIzMDY3MDAzRjNDMDIwODAwOEM0MjMxQThEMgotOjEwMTBGMDAwOEY4MzAwNEMwMDA0MjE4MDAwNjIxODIxMDA2NDE4MjFCNQotOjEwMTEwMDAwMzA2MjAwN0YwMzQyMjgyMTNDMDIwMDBDMDBBMjI4MjEwQgotOjEwMTExMDAwM0MwMjAwODAzNDQyMDAwMTMwNjYwMDc4MDBDMjMwMjU3NQotOjEwMTEyMDAwMjQwMkZGODAwMDYyMTAyNEFGNDIwMDI4MzA2NDAwMDdEMAotOjEwMTEzMDAwQUY0MjA4MDQ4RjgyMDAyNDAzNDQyMDIxMjQ4NDA5NDAwNAotOjEwMTE0MDAwQUY0NjA4MTRBRjg1MDAyOEFGODQwMDM0QUM0MzAxMThDMwotOjEwMTE1MDAwOTM4MzAwM0MyNDAyMDAwMzE0NjIwMDNCMjQwMjAwMDEzQwotOjEwMTE2MDAwMjQwMjAwMjYxMEUyMDAzRDI4RTIwMDI3MTA0MDAwMTM3MAotOjEwMTE3MDAwMjQwMjAwMzIyNDAyMDAyMjEwRTIwMDM4MjhFMjAwMjM3OAotOjEwMTE4MDAwMTA0MDAwMDgyNDAyMDAyNDI0MDIwMDIwMTBFMjAwMjQ2MQotOjEwMTE5MDAwMjQwMjAwMjExMEUyMDAxRTAyMjAyMDIxMEEwMDFBN0JGNgotOjEwMTFBMDAwMjQwMjAwMEIxMEUyMDAyRDI0MDIwMDI1MTBFMjAwMTBBMgotOjEwMTFCMDAwMDIyMDIwMjEwQTAwMUE3QjI0MDIwMDBCMTBFMjAwMUFGMAotOjEwMTFDMDAwMjhFMjAwMzMxMDQwMDAwNjI0MDIwMDNGMjQwMjAwMzFEMAotOjEwMTFEMDAwMTBFMjAwMEIwMjIwMjAyMTBBMDAxQTdCMjQwMjAwMEJERgotOjEwMTFFMDAwMTBFMjAwMTEwMjIwMjAyMTBBMDAxQTdCMjQwMjAwMEJDOQotOjEwMTFGMDAwMEUwMDE3NjgwMjIwMjAyMTBBMDAxQTk2MDA0MDgwMjE2NAotOjEwMTIwMDAwMEUwMDE4RUEwMjIwMjAyMTBBMDAxQTk2MDA0MDgwMjFEMAotOjEwMTIxMDAwMEUwMDE5OEIwMjIwMjAyMTBBMDAxQTk2MDA0MDgwMjExRQotOjEwMTIyMDAwMTUwOTAwMEUwMDAwMDAwMDBFMDAxODBGMDIyMDIwMjFGQQotOjEwMTIzMDAwMEEwMDFBOTYwMDQwODAyMTBFMDAxNTg3QTM4MjAwNDhGQwotOjEwMTI0MDAwMEEwMDFBOTYwMDQwODAyMTE0NjIwMDE3MDIwMDIwMjEzMwotOjEwMTI1MDAwMjQwMjAwMjMxNEUyMDAwNTI0MDIwMDBCMEUwMDE4ODE3MgotOjEwMTI2MDAwMDIyMDIwMjEwQTAwMUE5NjAwNDA4MDIxMDIyMDIwMjExRAotOjEwMTI3MDAwQTM4MjAwNDgwRTAwMTU4NzI0MTBGRkZGMEEwMDFBOTc2QQotOjEwMTI4MDAwMDIwMDIwMjEzMEE1MDBGRjBFMDAxNDg1MjQwNjAwMDE3NQotOjEwMTI5MDAwOTc4MzAwM0U4RjgyMDA0MEE3ODAwMDNFMDA0MzEwMjNDQQotOjEwMTJBMDAwQUY4MjAwNDAwMjAwMjAyMThGQkYwMDE4OEZCMTAwMTREMAotOjEwMTJCMDAwOEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjAzRgotOjEwMTJDMDAwMjdCREZGRTBBRkIxMDAxNEFGQkYwMDE4QUZCMDAwMTBGMgotOjEwMTJEMDAwOEY0NjAxMjgzQzAzMDgwMDhDNjMzMUEwMjQwMkZGODA2NAotOjEwMTJFMDAwQUY4NjAwNEMwMEMzMTgyMTMwNjUwMDdGMDM0NTI4MjFEQwotOjEwMTJGMDAwMDA2MjE4MjQzQzAyMDAwQUFGNDMwMDI0MDBBMjI4MjEwNwotOjEwMTMwMDAwOTBBMjAwNjIwMDgwODgyMUFGODUwMDI0MzA0MjAwRkY1NwotOjEwMTMxMDAwMDAwMjExMDJBMzgyMDAzQzkwQTIwMEJDMzA0MjAwMDJGNQotOjEwMTMyMDAwMTQ0MDAwMDIyNDAzMDAzNDI0MDMwMDMwOEY4MjAwMjQ4MAotOjEwMTMzMDAwQTM4MzAwMkM5MzgzMDAzQzhDNDIwMEMwQTM4MDAwNDgxMAotOjEwMTM0MDAwQUY4MjAwNDAyNDAyMDAwNDEwNjIwMDMwOEY4NDAwNDAwRAotOjEwMTM1MDAwOEUyNDAwMDQ1MDgwMDAyRDhGODQwMDQwOEUyMjAwMTBDNwotOjEwMTM2MDAwMzA4M0ZGRkZBNzg0MDAzRTEwNjAwMDFGQUY4MjAwNDQ1RgotOjEwMTM3MDAwOEY4MzAwMjQyNDA1RkY4MDAyMjAyMDIxOTA2MjAwNjNENwotOjEwMTM4MDAwMDBBMjEwMjQzMDQyMDBGRjE0NDAwMDBEMDAwMDAwMDBCNQotOjEwMTM5MDAwMEUwMDFBMDI5NzkwMDAzRTEwNDAwMDEwMDA0MDE4MjFFNQotOjEwMTNBMDAwMjQwMkZGRkQ1NDYyMDAxMThFMjMwMDIwMDIwMDI4MjEzOAotOjEwMTNCMDAwMEUwMDE0MjYwMjIwMjAyMTBBMDAxQUU4OEUyMzAwMjBBNQotOjEwMTNDMDAwOTA2MjAwNjMwMEEyMTAyNDMwNDIwMEZGMTA0MDAwMDMyRQotOjEwMTNEMDAwMDIyMDIwMjEwRTAwMTc0QTAwMDAwMDAwOTc4MjAwM0VFNAotOjEwMTNFMDAwMTQ0MEZGRTQ4RjgzMDAyNDhFMjMwMDIwMzA2MjAwMDQyOQotOjEwMTNGMDAwMTA0MDAwMDY4Rjg0MDA0MDI0MDJGRkZCMDA2MjEwMjQ4RQotOjEwMTQwMDAwMEUwMDE0M0FBRTIyMDAyMDhGODQwMDQwOEY4MzAwMjQwNwotOjEwMTQxMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwMjAwMDE5QwotOjEwMTQyMDAwMjdCRDAwMjAwM0UwMDAwOEFDNjQwMEMwMzBBNTAwRkYyOQotOjEwMTQzMDAwMjQwMzAwMDEyNEE5MDAwMTAwNjkxMDJCMTA0MDAwMENCNgotOjEwMTQ0MDAwMDAwMDQwMjEyNDBBMDAwMTAwQTMxMDIzMDA0QTM4MDRCMAotOjEwMTQ1MDAwMjQ2MzAwMDEzMDgyMDAwMTAwNjkzMDJCMTA0MDAwMDIzQgotOjEwMTQ2MDAwMDAwNDIwNDIwMTA3NDAyNTU0QzBGRkY4MDBBMzEwMjNDOAotOjEwMTQ3MDAwMDNFMDAwMDgwMTAwMTAyMTI3QkRGRkUwM0MwMjFFREM1NAotOjEwMTQ4MDAwQUZCMjAwMThBRkIxMDAxNEFGQkYwMDFDQUZCMDAwMTA3NgotOjEwMTQ5MDAwMzQ1MjZGNDEwMDAwODgyMTI0MDUwMDA4MEUwMDFBRjgxQwotOjEwMTRBMDAwMDIyMDIwMjEwMDExODA4MDNDMDcwODAwMjRFNzcxQUM1NQotOjEwMTRCMDAwMDAwMjE2MDAwMjA3MTgyMUFDNjIwMDAwMDAwMDI4MjE3QgotOjEwMTRDMDAwMjRBMjAwMDEzMDQ1RkZGRjhDNjIwMDAwMkNBNjAwMDgxQQotOjEwMTREMDAwMDQ0MTAwMDIwMDAyMjA0MDAwOTIyMDI2MTRDMEZGRjhDMAotOjEwMTRFMDAwQUM2NDAwMDAwMjA3ODAyMThFMDQwMDAwMEUwMDFBRjg5MAotOjEwMTRGMDAwMjQwNTAwMjAyNjIzMDAwMTMwNzFGRkZGMkUyMzAxMDA2OAotOjEwMTUwMDAwMTQ2MEZGRTVBRTAyMDAwMDhGQkYwMDFDOEZCMjAwMTgxMAotOjEwMTUxMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAzOQotOjEwMTUyMDAwM0MwMjA4MDAyNDQyNkE3NDNDMDEwODAwQUMyMjcxQTAwRAotOjEwMTUzMDAwM0MwMjA4MDAyNDQyNEZGMDNDMDEwODAwQUMyMjcxQTQ5OAotOjEwMTU0MDAwMjQwMjAwMDYzQzAxMDgwMEEwMjI3MUE4MEEwMDFCMEIxRgotOjEwMTU1MDAwMDAwMDAwMDAyN0JERkZEOEFGQjMwMDFDQUZCMjAwMThEOQotOjEwMTU2MDAwQUZCRjAwMjBBRkIxMDAxNEFGQjAwMDEwOEY1MTAxNDBFOQotOjEwMTU3MDAwOEY0ODAxNDgwMDA4OTQwMjMyNDMwMEZGMzExMzAwRkZGNgotOjEwMTU4MDAwOEY0MjAxQjgwNDQwRkZGRTI3NTAwMTgwQUUxMTAwMDBEOQotOjEwMTU5MDAwOEY0MjAxNDRBRTAyMDAwNDI0MDIwMDAyQTYxMjAwMDg5OQotOjEwMTVBMDAwQTIwMjAwMEIyNDAyMDAxNEFFMTMwMDI0MTA2MjAwMjVENgotOjEwMTVCMDAwMjg2MjAwMTUxMDQwMDAwODI0MDIwMDE1MjQwMjAwMTBDMwotOjEwMTVDMDAwMTA2MjAwMzAyNDAyMDAxMjEwNjIwMDA5OEZCRjAwMjA1OAotOjEwMTVEMDAwMEEwMDFDMzU4RkIzMDAxQzEwNjIwMDcwMjQwMjAwMjIyOAotOjEwMTVFMDAwMTA2MjAwMzc4RkJGMDAyMDBBMDAxQzM1OEZCMzAwMUMyQgotOjEwMTVGMDAwM0MwMjA4MDA4QzQyMzFBMDI0MDNGRjgwMDIyMjEwMjEwQgotOjEwMTYwMDAwMDA0MzEwMjRBRjQyMDAyNDNDMDIwODAwOEM0MjMxQTA2OQotOjEwMTYxMDAwMDIyMjEwMjEzMDQyMDA3RjAzNDIxODIxM0MwMjAwMEFCRQotOjEwMTYyMDAwMDA2MjE4MjExNjYwMDBCQ0FGODMwMDI0OTA2MjAwNjI0MwotOjEwMTYzMDAwMzA0MjAwMEYzNDQyMDAzMEEwNjIwMDYyMEEwMDFDMzRDNQotOjEwMTY0MDAwOEZCRjAwMjAzQzA0NjAwMDhDODMyQzA4M0MwMkYwMDMxOAotOjEwMTY1MDAwMzQ0MkZGRkYwMDYyMTgyNEFDODMyQzA4M0MwMjA4MDBDRgotOjEwMTY2MDAwOEM0MjMxQTA4QzgzMkMwODI0NDIwMDc0MDAwMjEwODIyQQotOjEwMTY3MDAwMDAwMjE0ODAwMDYyMTgyNUFDODMyQzA4MEEwMDFDMzQ3OAotOjEwMTY4MDAwOEZCRjAwMjAzQzAyMDgwMDhDNDIzMUEwMjQwM0ZGODA2MQotOjEwMTY5MDAwMDIyMjEwMjEwMDQzMTAyNEFGNDIwMDI0M0MwMjA4MDAyMwotOjEwMTZBMDAwOEM0MjMxQTAzQzAzMDAwQTAyMjIxMDIxMzA0MjAwN0YwQwotOjEwMTZCMDAwMDM0MjEwMjEwMDQzMTAyMTBBMDAxQzMzQUY4MjAwMjQ5MgotOjEwMTZDMDAwM0MwMjA4MDA4QzQyMzFBMDI0MDVGRjgwMDIyMjEwMjEzOAotOjEwMTZEMDAwMDA0NTEwMjRBRjQyMDAyNDNDMDIwODAwOEM0MjMxQTA5NwotOjEwMTZFMDAwMDIyMjEwMjEzMDQyMDA3RjAzNDIxODIxM0MwMjAwMEFFRQotOjEwMTZGMDAwMDA2MjE4MjE5MDYyMDA2MzAwQTIxMDI0MzA0MjAwRkZCMwotOjEwMTcwMDAwMTA0MDAwODVBRjgzMDAyNDI0NjIwMDg4OTQ0MzAwMTJCNwotOjEwMTcxMDAwM0MwMjA4MDA4QzQyMzFBODMwNjMzRkZGMDAwMzE5ODA2RgotOjEwMTcyMDAwMDIyMjEwMjEwMDQzMTAyMTMwNDMwMDdGMDM0MzIwMjE3NwotOjEwMTczMDAwMDA0NTEwMjQzQzAzMDAwQzAwODMyMDIxQUY0MjAwMjgwOAotOjEwMTc0MDAwOTA4MjAwMEQwMEEyMTAyNDMwNDIwMEZGMTA0MDAwNzI3MQotOjEwMTc1MDAwQUY4NDAwMjg5MDgyMDAwRDMwNDIwMDEwMTQ0MDAwNkZDQQotOjEwMTc2MDAwOEZCRjAwMjAwRTAwMTU1NjAwMDAwMDAwOEY0MjAxQjgwOAotOjEwMTc3MDAwMDQ0MEZGRkUwMDAwMDAwMEFFMTEwMDAwOEY0MjAxNDQ1MwotOjEwMTc4MDAwQUUwMjAwMDQyNDAyMDAwMkE2MTIwMDA4QTIwMjAwMEIwRQotOjEwMTc5MDAwQUUxMzAwMjQwQTAwMUMzNDhGQkYwMDIwMjQwNkZGODBGMwotOjEwMTdBMDAwMDIyNjEwMjRBRjQyMDAyMDNDMDIwODAwOEM0MjMxQTBFNwotOjEwMTdCMDAwMzEwNDNGRkYwMDA0MjE4MDAyMjIxMDIxMDA0NjEwMjQ0MgotOjEwMTdDMDAwQUY0MjAwMjQzQzAzMDgwMDhDNjMzMUE4M0MwMjA4MDBBRgotOjEwMTdEMDAwOEM0MjMxQTAzMjI3MDA3RjAyMjMxODIxMDIyMjEwMjFERgotOjEwMTdFMDAwMDA2NDE4MjEzMDQyMDA3RjMwNjQwMDdGMDM0MjI4MjFDQQotOjEwMTdGMDAwM0MwMjAwMEEwMDY2MTgyNDAwQTIyODIxMDM0NDIwMjE4QwotOjEwMTgwMDAwM0MwMjAwMEMwMDgyMjAyMUFGNDMwMDI4M0MwMjAwMDg2QgotOjEwMTgxMDAwMDM0NzE4MjEwMDYyOTAyMUFGODUwMDI0QUY4NDAwMjg3RgotOjEwMTgyMDAwMEUwMDE1NTYwMTAwODAyMThGNDIwMUI4MDQ0MEZGRkVEMgotOjEwMTgzMDAwOEY4MjAwMjg4Rjg0MDAyNDI3NDUwMTgwOTA0MjAwMEQ2QwotOjEwMTg0MDAwQUNCMTAwMDBBNEIwMDAwNjAwMDIxNjAwMDAwMjE2MDNBRQotOjEwMTg1MDAwMDAwMjEwMjcwMDAyMzdDMjE0QzAwMDE2MjQ4MjAwODgzQwotOjEwMTg2MDAwOTQ0MjAwMTIzMjAzM0ZGRjMwNDIzRkZGMTQ0MzAwMTIwNAotOjEwMTg3MDAwMjQwMjYwODI5MDgzMDA2MzI0MDJGRjgwMDA0MzEwMjRDRQotOjEwMTg4MDAwMzA0MjAwRkY1MDQwMDAwQzI0MDI2MDgyOTA4MjAwNjJDRgotOjEwMTg5MDAwMzA0MjAwMEYzNDQyMDA0MEEwODIwMDYyMjQwMjYwODQ4MwotOjEwMThBMDAwQTRBMjAwMDgyNDAyMDAwREEwQTIwMDA1MEEwMDFDMUUyQwotOjEwMThCMDAwM0MwMjI3MDAyNDAyNjA4MkE0QTIwMDA4QTBBMDAwMDUyOAotOjEwMThDMDAwM0MwMjI3MDAwMDA2MUMwMDAwNjIxODI1MjQwMjAwMDJDQQotOjEwMThEMDAwQTBBMjAwMEJBQ0EzMDAxMEFDQTAwMDE0QUNBMDAwMjQ4QwotOjEwMThFMDAwQUNBMDAwMjhBQ0EwMDAyQzhFNDIwMDRDOEY4NDAwMjhCNQotOjEwMThGMDAwQUNBMjAwMTg5MDgzMDAwRDI0MDJGRjgwMDA0MzEwMjQ0NgotOjEwMTkwMDAwMzA0MjAwRkYxMDQwMDAwNThGQkYwMDIwOTA4MjAwMEQ4NAotOjEwMTkxMDAwMzA0MjAwN0ZBMDgyMDAwRDhGQkYwMDIwOEZCMzAwMUNEQgotOjEwMTkyMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwM0MwMjEwMDA2RAotOjBDMTkzMDAwMjdCRDAwMjgwM0UwMDAwOEFGNDIwMUI4MEEKLTowNDE5M0MwMDA4MDAzM0Y4NzQKLToxMDE5NDAwMDA4MDAzM0Y4MDgwMDMzNzAwODAwMzNBODA4MDAzM0RDQkYKLToxMDE5NTAwMDA4MDAzNDAwMDgwMDM0MDAwODAwMzQwMDA4MDAzMkUwQjkKLToxMDE5NjAwMDBBMDAwMTIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEM0QKLToxMDE5NzAwMDc0NzA2MTM1MkUzMDJFMzA2QTMzMDAwMDA1MDAwMDAxOEUKLToxMDE5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMDE5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKLToxMDE5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKLToxMDE5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKLToxMDE5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKLToxMDE5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMDE5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAzRTQKLToxMDE5RjAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwRDNDMDIwODAwODcKLToxMDFBMDAwMDI0NDIxQjgwM0MwMzA4MDAyNDYzMjAxNEFDNDAwMDAwRTcKLToxMDFBMTAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNDNDMUQwODAwREQKLToxMDFBMjAwMDM3QkQyRkZDMDNBMEYwMjEzQzEwMDgwMDI2MTAwNDg4Q0QKLToxMDFBMzAwMDNDMUMwODAwMjc5QzFCODAwRTAwMDE1QTAwMDAwMDAwN0YKLToxMDFBNDAwMDAwMDAwMDBEMzA4NEZGRkYzMDgyMDAwNzhGODUwMDE4RjIKLToxMDFBNTAwMDEwNDAwMDAyMjQ4MzAwMDczMDY0RkZGODAwODUzMDIxMjUKLToxMDFBNjAwMDMwQzQxRkZGMDM0NDE4MjEyNDdCNDAwMEFGODUwMDFDQjUKLToxMDFBNzAwMEFGODQwMDE4MDNFMDAwMDhBRjQ0MDA4NDMwODRGRkZGMDcKLToxMDFBODAwMDMwODIwMDA3OEY4NTAwMjA4Rjg2MDAyODEwNDAwMDAyREEKLToxMDFBOTAwMDI0ODMwMDA3MzA2NEZGRjgwMDg1MjAyMTAwODYxODJCN0UKLToxMDFBQTAwMDE0NjAwMDAyQUY4NTAwMjQwMDg2MjAyMzAzNDQyODIxMEYKLToxMDFBQjAwMDM0MDY4MDAwQUY4NDAwMjBBRjQ0MDA4MDAwQTYyMDIxQkYKLToxMDFBQzAwMDAzRTAwMDA4QUY4NDAwMzgyN0JERkZEOEFGQjMwMDFDODcKLToxMDFBRDAwMEFGQjIwMDE4QUZCMDAwMTBBRkJGMDAyNEFGQjQwMDIwMDkKLToxMDFBRTAwMEFGQjEwMDE0M0MwODYwMDg4RDE0NTAwMDI0MThGRjdGMkIKLToxMDFBRjAwMDNDMUE4MDAwMDI5ODk4MjQzNjcyMzgwQ0FEMTI1MDAwQkYKLToxMDFCMDAwMDhGNTEwMDA4M0MwNzYwMUMzQzA4NjAwMDM2MzAwMDAxMjMKLToxMDFCMTAwMEFGNTAwMDA4QUY4MDAwMThBRjQwMDA4MEFGNDAwMDg0OTUKLToxMDFCMjAwMDhDRTYwMDA4OEQwRjA4MDgzQzA3NjAxNjhDRUMwMDAwNUUKLToxMDFCMzAwMDMxRUVGRkYwMzlDQTAwMTAzQzBERkZGRjM0MEI4MDAwN0UKLToxMDFCNDAwMDNDMDMwMDgwMDM0QjQ4MjEyRDQ0MDAwMTAxOEQyODI0RDMKLToxMDFCNTAwMDNDMDI1MzUzM0MwMTA4MDBBQzIzMDQyMEFGODkwMDM4RjkKLToxMDFCNjAwMEFGODYwMDI4QUY4NDAwMTAyNzVCNDAwMDE0QTIwMDAzNUEKLToxMDFCNzAwMDM0RTM3QzAwOENGOTAwMDQwMzI4MTgyMThDN0YwMDdDNUUKLToxMDFCODAwMDhDNjUwMDc4M0MwMjgwMDAzNDUyMDA3MEFGODUwMDNDQzgKLToxMDFCOTAwMEFGOUYwMDQwM0MxMzA4MDAyNjczMUJDNDAyNDBBMDIxRTUKLToxMDFCQTAwMDhFNDgwMDAwOEY0NjAwMDAzOEMzMDAwMTMwNjQwMDAxRjkKLToxMDFCQjAwMDEwODAwMDE3QUY4ODAwMzQwMjgwNDgyMThEMkQwMDAwNkUKLToxMDFCQzAwMDNDMTkwODAwOEYzOTA0NUMzQzExMDgwMDhFMzEwNDU4MjAKLToxMDFCRDAwMDAxQThGODIzMDMzRjc4MjEwMDAwNDAyMTAyMjgzODIxODIKLToxMDFCRTAwMDAxRkY4MDJCMDBGMDcwMjEzQzAxMDgwMEFDMkYwNDVDNDkKLToxMDFCRjAwMDNDMDEwODAwQUMyRTA0NTg4RjRDMDAwMDM5OEIwMDAxQ0EKLToxMDFDMDAwMDMxNkEwMDAxMTU0MEZGRUQwMUEwNDAyMUFGOEQwMDM0ODUKLToxMDFDMTAwMDhFNEUwMDAwM0MwQzA4MDA4RDhDMDQ1QzNDMEEwODAwRDEKLToxMDFDMjAwMDhENEEwNDU4MDFDODY4MjMwMThEMjgyMTAwMDA1ODIxREQKLToxMDFDMzAwMDAwQUQzMDJCMDE0QjIwMjEwMDg2MTAyMTNDMDEwODAwMTMKLToxMDFDNDAwMEFDMjUwNDVDM0MwMTA4MDBBQzIyMDQ1ODhGNDUwMTA4MTcKLToxMDFDNTAwMDhGNDQwMTAwMzBBOTIwMDBBRjg1MDAwMEFGODQwMDBDNDQKLToxMDFDNjAwMDExMjAwMDBBMDBBMDMwMjEzQzA3MDgwMDhDRTcwNDJDNUEKLToxMDFDNzAwMDI0RUYwMDAxM0MwMTA4MDBBQzJGMDQyQzNDMTA0MDAwNzQKLToxMDFDODAwMEFGNTAwMTM4MEEwMDAxOTAwMDAwMDAwMDMwQjAwMjAwOUYKLToxMDFDOTAwMDE2MDAwMDE0MjQxMTBGMDAxMDkxMDAxMjI0MDcwRDAwRUIKLToxMDFDQTAwMDEwODcwMjMzMzBCMDAwMDY1MjAwRkZGNTNDMTA0MDAwQjAKLToxMDFDQjAwMDkzNkQwMDAwMjQwQzAwMTAzMUE2MDBGMDEwQ0MwMjY5RDYKLToxMDFDQzAwMDI0MEUwMDcwMTBDRTAyREQ4RjhCMDAxNDI1NjcwMDAxRkEKLToxMDFDRDAwMEFGODcwMDE0M0MxMDQwMDBBRjUwMDEzODBBMDAwMTkwNUIKLToxMDFDRTAwMDAwMDAwMDAwOTc0ODAxMDQxMTAwRkZFNTNDMTA0MDAwOEYKLToxMDFDRjAwMDMwQjg0MDAwMTcwMDAwQTIwMDAwMDAwMDhGNTkwMTc4QTIKLToxMDFEMDAwMDA3MjBGRkZFOEY4NzAwMzgyNDA5MDAwODI0MDUwODAwRkIKLToxMDFEMTAwMDhDRTMwMDA4QUY0NTAxNzhBNzQ5MDE0MEE3NDAwMTQyODQKLToxMDFEMjAwMDk3NDIwMTA0OEY4NjAwMDAzMDQ5RkZGRjMwREYwMDAxMzkKLToxMDFEMzAwMDEzRTAwMkQ1MDEyMDQwMjEyNTI0RkZGRTI0MEEwMDAyRTEKLToxMDFENDAwMEE3NEEwMTQ2MzA4OEZGRkZBNzQ0MDE0ODNDMEIwODAwMjIKLToxMDFENTAwMDhENkIwNDNDMTU2MDAyQzQ4RjhGMDAwQzMwQzMwMDIwRDMKLToxMDFENjAwMDE0NjAwMDAyMjQwNDAwMDkyNDA0MDAwMTMwQ0QwQzAwOUEKLToxMDFENzAwMDI0MEMwNDAwNTFBQzAwMDEzNDg0MDAwNEE3NDQwMTRBM0YKLToxMDFEODAwMDNDMDUwODAwOENBNTA0MjAzQzAyMDA0ODNDMTkwMDAxRDkKLToxMDFEOTAwMDAwQTJGODI1MzBEODAwMDIwM0Y5MjgyNTEzMDAwMDA0MUEKLToxMDFEQTAwMDAwMDAxODIxM0MwNDAxMDAwMEE0MjgyNTI0MDMwMDAxQTAKLToxMDFEQjAwMDMwQ0EwMDA0NTE0MDAwMDVBRjgzMDAwODNDMDYwMDEwMDMKLToxMDFEQzAwMDAwQTYyODI1MjQwMzAwMDFBRjgzMDAwOEFGNDUxMDAwQkEKLToxMDFERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKLToxMDFERTAwMDhGODMwMDA4MTA2MDAwMjMwMDAwMDAwMDhGNEIxMDAwNUMKLToxMDFERjAwMDA1NjFGRkZFMDAwMDAwMDAxMDYwMDAxRTAwMDAwMDAwRjIKLToxMDFFMDAwMDhGNEQxMDAwM0MwMzAwMjAwMUEzNjAyNDExODAwMDE5QjUKLToxMDFFMTAwMDhGOEYwMDAwMzFFRTAwMDIxMUMwMDAxNjAwMDAwMDAwOUMKLToxMDFFMjAwMDk3NTAxMDE0MTYwMDAwMTMwMDAwMDAwMDk3NDUxMDA4OEEKLToxMDFFMzAwMDMwQkZGRkZGMjdGODAwMDYwMDE4Qzg4MjAwMTkzMDgwNjUKLToxMDFFNDAwMDAwQzcyODIxMzMxMTAwMDEzMzAzMDAwMzEyMjAwMzIwQUYKLToxMDFFNTAwMDhDQTIwMDAwMDAwMDAwMEQwMEM3RjgyMUFGRTIwMDAwRDYKLToxMDFFNjAwMDNDMTkwODAwOEYzOTA0MzAyNzI2MDAwMTNDMDEwODAwODYKLToxMDFFNzAwMEFDMjYwNDMwOEY2QTAwMDAzNDA1RkZGRkFGOEEwMDA0RUYKLToxMDFFODAwMDhDRTIwMDAwMTA0NTAyOUEwMDAwMjAyMThDRTUwMDAwNDEKLToxMDFFOTAwMDMwQkYwMTAwMTNFMDAyN0UwMTAwMjAyMTNDMDcwODAwNTIKLToxMDFFQTAwMDhDRTcwNDc0M0MxMDA4MDA4RTEwMDQ0QzAwRTg1ODIxQTQKLToxMDFFQjAwMDNDMTgwODAwOEYxODA0NzAwMTY4ODgyQjNDMDgwODAwNDMKLToxMDFFQzAwMDhEMDgwNDQ4MDAwMDc4MjEwMjA0NjAyMTAzMEYxODIxQzYKLToxMDFFRDAwMDAxODQ3MDJCMDEwRjY4MjEwMDcxNTAyMTAxQUUxMDIxODcKLToxMDFFRTAwMDNDMDEwODAwQUMyQzA0NEMzQzAxMDgwMEFDMjIwNDQ4MjYKLToxMDFFRjAwMDNDMDEwODAwQUMyQjA0NzQzQzAxMDgwMEFDMkEwNDcwQkYKLToxMDFGMDAwMDhGOEQwMDE4MDEyMDMwMjEzMTI5MDAwNzI1QUUwMDA4RUYKLToxMDFGMTAwMDMxQzIxRkZGMDM0MjYwMjFBRjhEMDAxQ0FGODIwMDE4NDkKLToxMDFGMjAwMDI1OUI0MDAwQUY0MjAwODQxMTIwMDAwMzhGOTAwMDIwQzkKLToxMDFGMzAwMDI0QzgwMDA3MzEwNkZGRjg4Rjg0MDAyODAwRDAyODIxMkMKLToxMDFGNDAwMDAwQTQ3ODJCMTVFMDAwMDJBRjkwMDAyNDAwQTQyODIzMDEKLToxMDFGNTAwMDAzNDUyMDIxMzQwMzgwMDAwMDgzMTAyMTNDMDYxMDAwM0IKLToxMDFGNjAwMEFGODUwMDIwQUY4MjAwMzhBRjQ1MDA4MEFGNDYwMTc4RDIKLToxMDFGNzAwMDhGOEIwMDE0MjU2NzAwMDEwQTAwMDFEREFGODcwMDE0NzQKLToxMDFGODAwMDhGNjIwMDA4OEY2NzAwMDAyNDExMDAzMDAwMDdDNjAyMkUKLToxMDFGOTAwMDMzMDMwMEYwMTA3MTAwQTIyNDE5MDA0MDE0NzlGRjRCQTQKLToxMDFGQTAwMDhGOEIwMDE0OEY0QTAxNzgwNTQwRkZGRTMwQTcwMjAwOTYKLToxMDFGQjAwMDE0RTAwMDAzMDAwNTEyODIwMDAwMDAwRDAwMDUxMjgyRUIKLToxMDFGQzAwMDMwNTAwMDAzMDAxMDQ5MDAwMTMwNzAyMTAwMEU2ODgwN0QKLToxMDFGRDAwMDAxQjA2MDIxMDAwQzU4ODAwMTczODAyMThFMDgwMDAwNDAKLToxMDFGRTAwMDE1MDAwMDAyMDAwMDAwMDAwMDAwMDAwRDhGNkYwMDA0Q0IKLToxMDFGRjAwMDA1RTIwMkIxOTIwMzAwMDY5MjA3MDAwNTkyMEYwMDA0NjkKLToxMDIwMDAwMDNDMDIwMDAxMDAwNzI4ODAwMEIwNjAyMThEODkwMDE4ODMKLToxMDIwMTAwMDI3NzEwMDA4MjVFRTAwMDUwMTIyNjgyMTAwMEUzMDgyOUMKLToxMDIwMjAwMEFEOEQwMDE4MDIyMDIwMjEwRTAwMDU4MDI2MDUwMDE0MjkKLToxMDIwMzAwMDkyMEIwMDA2OEY3RjAwMDQzQzA4N0ZGRjAwMEIyMDgwN0UKLToxMDIwNDAwMDAwOTEzMDIxOENDMzAwMDQzNTBBRkZGRjAzRUFDODI0NDUKLToxMDIwNTAwMDAwNzlDMDIxQUNEODAwMDQ5MjA3MDAwNTkyMDkwMDA0NjEKLToxMDIwNjAwMDk2MEQwMDA4MDAwNzI4ODAwMEIxRjgyMThGRUYwMDAwQ0UKLToxMDIwNzAwMDk3NDIwMTA0M0MwN0ZGRkYwMUU3NTAyNDMwNEVGRkZGNjkKLToxMDIwODAwMDAxQzk2MDIxMDE4RDU4MjMzMTY4RkZGRjAxNDgyMDI1RDcKLToxMDIwOTAwMEFGRTQwMDAwOTIwMzAwMDcyNDE5MDAwMTEwNzkwMjY5REYKLToxMDIwQTAwMDI0MDYwMDAzMTA2NjAyNzkwMDAwMDAwMDhFMTkwMDEwNUIKLToxMDIwQjAwMDI0MUYwMDBBQTc1RjAxNDBBNzU5MDE0MjkyMDMwMDA0QjAKLToxMDIwQzAwMDhGODYwMDAwMjQwNzAwMDFBNzQzMDE0NEE3NDAwMTQ2NzIKLToxMDIwRDAwMDk3NTgwMTA0MzBEMTAwMDIzQzA1MDA0MUE3NTgwMTQ4M0YKLToxMDIwRTAwMDAwMDAxODIxQTc0NzAxNEExMjIwMDAwMzMwQ0EwMDA0NEIKLToxMDIwRjAwMDNDMDUwMTQxMjQwMzAwMDE1MTQwMDAwNUFGODMwMDA4NjUKLToxMDIxMDAwMDNDMDgwMDEwMDBBODI4MjUyNDAzMDAwMUFGODMwMDA4MjQKLToxMDIxMTAwMEFGNDUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKLToxMDIxMjAwMDAwMDAwMDAwOEY4QjAwMDgxMTYwMDAwNDAwMDAwMDAwMTgKLToxMDIxMzAwMDhGNDQxMDAwMDQ4MUZGRkUwMDAwMDAwMDhGNkEwMDAwNDEKLToxMDIxNDAwMDkyMDcwMDA0M0MwNTA4MDA4Q0E1MDQ0NEFGOEEwMDA0RjMKLToxMDIxNTAwMDk3NUYwMTA0M0MwRjA4MDA4REVGMDQ0MDMwRTMwMEZGNUYKLToxMDIxNjAwMDMzRjlGRkZGMDA3OUMwMjEwMEI4NjgyMTAwMDAxMDIxNzkKLToxMDIxNzAwMDI0RTYwMDBBMzBDOEZGRkYwMUI4NDgyQjAxRTI3MDIxQjUKLToxMDIxODAwMDAxQzk2MDIxMzExMDAwMDczQzAxMDgwMEFDMkQwNDQ0NTYKLToxMDIxOTAwMDNDMDEwODAwQUMyQzA0NDAxMjAwMDAwMzhGOEQwMDE4OTUKLToxMDIxQTAwMDI1MEIwMDA3MzE2OEZGRjgwMTBENzAyMTMxQ0MxRkZGQUUKLToxMDIxQjAwMEFGOEQwMDFDQUY4QzAwMThBRjRDMDA4NDk3NDQwMTA0MTUKLToxMDIxQzAwMDAzNEM4MDIxMzA4NEZGRkYzMDg4MDAwNzExMDAwMDAzOUEKLToxMDIxRDAwMDI2MUI0MDAwMjQ4OTAwMDczMTI0RkZGODhGODIwMDIwNEQKLToxMDIxRTAwMDhGODUwMDI4MDA4MjIwMjEwMDg1NzgyQjE1RTAwMDAyRDEKLToxMDIxRjAwMEFGODIwMDI0MDA4NTIwMjMwMzQ0ODgyMTM0MDU4MDAwMTkKLToxMDIyMDAwMDAyMjUxMDIxM0MwNjEwMDBBRjg0MDAyMEFGODIwMDM4NjgKLToxMDIyMTAwMEFGNDQwMDgwQUY0NjAxNzgwQTAwMDI4NThGOEIwMDE0MUUKLToxMDIyMjAwMDhGNUYwMTc4MDdFMEZGRkUzMEFBMDIwMDE1NDAwMDAzMkYKLToxMDIyMzAwMDAwMDU0MjgyMDAwMDAwMEQwMDA1NDI4MjMxMDIwMDAzQzkKLToxMDIyNDAwMDAwMDI3MTAwMDFDMjY4MjEwMDBENjA4MDAxODI0ODIxRjYKLToxMDIyNTAwMDAwMDkyODgwMDBCMzgwMjE4RTBCMDAwMDExNjAwMDAyNkQKLToxMDIyNjAwMDAwMDAwMDAwMDAwMDAwMEQ4RjZGMDAwQzA1RTAwMUYzN0UKLToxMDIyNzAwMDhGODcwMDM4MjQxOTAwMDFBRTE5MDAwMDhDRTMwMDA4OTQKLToxMDIyODAwMEEyMDAwMDA3OEY3ODAwMDQwMDE4MUMwMjMwNjYwMEZGQ0YKLToxMDIyOTAwMDI0RDEwMDA1MDAxMTMwODIyQ0M0MDA0MTE0ODAwMDAyQkEKLToxMDIyQTAwMEEyMDMwMDA0MDAwMDAwMEQ4RjZCMDAwNDNDMEVGRkZGMzIKLToxMDIyQjAwMDAwRTAyODIxMzE2NEZGRkYyNDhGMDAwQjAwMEY0MDgyRDMKLToxMDIyQzAwMDAwMDgxMDgwMDA0NzQ4MjE4RDJEMDAwMDI2MDQwMDE0Q0UKLToxMDIyRDAwMEE2MEIwMDA4MDFBRTYwMjQwRTAwMDU4MEFEMkMwMDAwQTYKLToxMDIyRTAwMDhGNUYwMTA4M0MwQTEwMDAwM0VBMzgyNDEwRTAwMUEzQzQKLToxMDIyRjAwMDAwMDAwMDAwOTc0NjAxMDQ5MjAzMDAwNzI0RDFGRkVDODAKLToxMDIzMDAwMDM0NjUwMDAyMzIyNEZGRkZBMjA1MDAwNzk2MDYwMDA4OEMKLToxMDIzMTAwMDJDQzcwMDEzNTRFMDAwMDU5MjAzMDAwNzkyMEEwMDA3M0YKLToxMDIzMjAwMDM1NUYwMDAxQTIxRjAwMDc5MjAzMDAwNzI0MEIwMDAxODQKLToxMDIzMzAwMDEwNkIwMUJBMjQwOTAwMDMxMDY5MDFDRDhGODgwMDM4QTEKLToxMDIzNDAwMDMwQ0ZGRkZGMjVFNDAwMDIwMDA0Qzg4MzMzM0YwMEZGQzUKLToxMDIzNTAwMDAwMUYyODgwQTIxOTAwMDUwMEE4NTgyMThENzgwMDAwRDAKLToxMDIzNjAwMDk3NTEwMTA0M0MwM0ZGRkYwMzAzNjAyNDMyMjJGRkZGNjcKLToxMDIzNzAwMDAwNEY3MDIzMjVDREZGRkUwMThENDgyNUFENjkwMDAwN0IKLToxMDIzODAwMDkyMDYwMDA1M0MwMkZGRjYzNDRFRkZGRjMwQ0EwMEZGMDQKLToxMDIzOTAwMDAwMEEzODgwMDBGMDIwMjE5MDk5MDAxNDNDMUZGRjdGMzQKLToxMDIzQTAwMDM3RTdGRkZGMzMyMzAwMEYwMDY2NzgyMTMxRjgwMEZGODUKLToxMDIzQjAwMDAwMTgyODgwMDBCMDg4MjE4RTJEMDAyMDAwQTg2MDIxMDAKLToxMDIzQzAwMEEyMEYwMDA2MDFBRTQ4MjRBRTBEMDAwQ0FEODkwMDBDMzIKLToxMDIzRDAwMDkyMEIwMDA2OEUwNDAwMEMwMTI3RjgyNDAwMEI1MDgwOUQKLToxMDIzRTAwMDAxNTBDODIxOTcyNjAwMjYwMTQ4QzAyMTAwODc0MDI0QkIKLToxMDIzRjAwMEFGMjYwMDI0QUUwODAwMENBRjNGMDAyMEFGMDYwMDEwNEYKLToxMDI0MDAwMDhGODYwMDAwMjQwQzAwMTAyNDA5MDAwMkE3NEMwMTQwMTQKLToxMDI0MTAwMEE3NDAwMTQyQTc0MDAxNDRBNzQ5MDE0Njk3NEIwMTA0NDgKLToxMDI0MjAwMDI0MDcwMDAxMzBDODAwMDIyNTZBRkZGRUE3NEEwMTQ4QzAKLToxMDI0MzAwMDNDMDUwMDA5QTc0NzAxNEExMTAwMDAwMzAwMDAxODIxQ0MKLToxMDI0NDAwMDNDMDUwMTA5MjQwMzAwMDEzMENEMDAwNDUxQTAwMDA1MjIKLToxMDI0NTAwMEFGODMwMDA4M0MwNjAwMTAwMEE2MjgyNTI0MDMwMDAxRDUKLToxMDI0NjAwMEFGODMwMDA4QUY0NTEwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMDI0NzAwMDAwMDAwMDAwMDAwMDAwMDA5MjE4MDAwNDI3MTEwMDAyNzQKLToxMDI0ODAwMDMyMkYwMDA3MDAwRjEwMjMzMDRFMDAwN0FFMEUwMDEwNTEKLToxMDI0OTAwMDhGOTAwMDA4MTIwMDAwMDQwMDAwMDAwMDhGNDMxMDAwMUQKLToxMDI0QTAwMDA0NjFGRkZFMDAwMDAwMDA4Rjc4MDAwMDhGOEYwMDE4OEQKLToxMDI0QjAwMDNDMTAwODAwOEUxMDA0NDRBRjk4MDAwNDk3NTEwMTA0QUEKLToxMDI0QzAwMDI1RTYwMDEwMzBDQTFGRkYzMjIyRkZGRkFGOEYwMDFDMkQKLToxMDI0RDAwMEFGOEEwMDE4QUY0QTAwODQyNDQ5RkZGRTNDMEIwODAwNzUKLToxMDI0RTAwMDhENkIwNDQwOTc0RTAxMDQwMTIwNjgyMTAwMDk2N0MzRTkKLToxMDI0RjAwMDAyMEQyODIxMzFDOUZGRkYwMEFENDAyQjAxNkMzODIxQUUKLToxMDI1MDAwMDAwRTgyMDIxMDM0QUY4MjEzMTM5MDAwNzNDMDEwODAwODYKLToxMDI1MTAwMEFDMjUwNDQ0M0MwMTA4MDBBQzI0MDQ0MDEzMjAwMDAzMTMKLToxMDI1MjAwMDI3RkI0MDAwMjUyMzAwMDczMDY5RkZGODhGOUYwMDIwMUMKLToxMDI1MzAwMDhGODQwMDI4MDEzRjM4MjEwMEU0QzgyQjE3MjAwMDAyQjcKLToxMDI1NDAwMEFGOUYwMDI0MDBFNDM4MjMwMzQ3MjAyMTM0MDU4MDAwOTYKLToxMDI1NTAwMDAwODUxMDIxM0MwNjEwMDBBRjg3MDAyMEFGODIwMDM4QjQKLToxMDI1NjAwMEFGNDcwMDgwQUY0NjAxNzgwQTAwMDI4NThGOEIwMDE0QzgKLToxMDI1NzAwMDk3NTgwMTA0MTMwMEZEQzIzQzEwNDAwMDhGNDMwMTc4QkUKLToxMDI1ODAwMDA0NjBGRkZFMzBCOTQwMDAxMzIwMDAwMzNDMDQwMDA4NDMKLToxMDI1OTAwMDAwMDAwMDBEM0MwNDAwMDhBRjQ0MDE0MDI0MDgwODAwN0UKLToxMDI1QTAwMEFGNDgwMTc4OEY4QjAwMDA5NzRBMDEwNDMxN0YwMDAxMEEKLToxMDI1QjAwMDEzRTAwMEU5MzE0NkZGRkYyNEQwRkZGRTI0MEMwMDAyQTcKLToxMDI1QzAwMEE3NEMwMTQ2QTc1MDAxNDg4RjhGMDAxODI0MDUwMDBEMjUKLToxMDI1RDAwMEE3NDUwMTRBOEY3MTAwMDAyNUUyMDAwODMwNDkxRkZGMUUKLToxMDI1RTAwMDAzNDk3MDIxMzBDRDAwMDdBRjkxMDAwNEFGOEYwMDFDNkMKLToxMDI1RjAwMEFGODkwMDE4MDBDMDM4MjFBRjQ5MDA4NDExQTAwMDAzNDIKLToxMDI2MDAwMDI1REI0MDAwMjRDNjAwMDczMEM3RkZGODhGOTgwMDIwNjQKLToxMDI2MTAwMDhGODQwMDI4MDBGODMwMjEwMEM0MzgyQjE0RTAwMDAyMTkKLToxMDI2MjAwMEFGOTgwMDI0MDBDNDMwMjM4RjhBMDAxNDAzNDY1ODIxMzkKLToxMDI2MzAwMDM0MDg4MDAwMDE2OEY4MjEyNTU5MDAwMTNDMDMxMDAwOEUKLToxMDI2NDAwMDNDMTA0MDAwQUY4NjAwMjBBRjlGMDAzOEFGNDYwMDgwQUUKLToxMDI2NTAwMEFGNDMwMTc4QUY5OTAwMTRBRjUwMDEzODBBMDAwMTkwRTAKLToxMDI2NjAwMDAwMDAwMDAwOEY2OTAwMDA5NzQ0MDEwNDMxMjdGRkZGM0MKLToxMDI2NzAwMDMwODhGRkZGOEY0RjAxNzgwNUUwRkZGRTMwRkYwMDA3MzUKLToxMDI2ODAwMDAwMUYxODIzMzA3ODAwMDcyNEU2RkZGRTI0MTkwMDBBRjMKLToxMDI2OTAwMEE3NTkwMTQwQTc1ODAxNDJBNzQ2MDE0NEE3NDAwMTQ2NTcKLToxMDI2QTAwMEE3NDgwMTQ4OEY0MjAxMDgzMDUxMDAyMDE2MjAwMDAyM0YKLToxMDI2QjAwMDI0MDMwMDA5MjQwMzAwMDEzMEFBMDAwMkE3NDMwMTRBQjEKLToxMDI2QzAwMDNDMDQwMDQxMTE0MDAwMDMwMDAwMTgyMTNDMDQwMTQxN0EKLToxMDI2RDAwMDI0MDMwMDAxMzBBQjAwMDQ1MTYwMDAwNUFGODMwMDA4MDMKLToxMDI2RTAwMDNDMDUwMDEwMDA4NTIwMjUyNDAzMDAwMUFGODMwMDA4NkQKLToxMDI2RjAwMEFGNDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMDI3MDAwMDAwMDAwMDAwOEY5MDAwMDgxMjAwMDAwNDAwMDAwMDAwOEMKLToxMDI3MTAwMDhGNEMxMDAwMDU4MUZGRkUwMDAwMDAwMDhGNzgwMDAwNDQKLToxMDI3MjAwMDI3NjIwMDA4OEY4RDAwM0NBRjk4MDAwNDk0NDYwMDA4OTMKLToxMDI3MzAwMDk0NTEwMDBBOTQ0RjAwMEMzMENFRkZGRjAwMTEyNDAwOEEKLToxMDI3NDAwMDMxRTlGRkZGMTFDRDAwQTIwMDg5MjAyNTNDMDMwODAwREMKLToxMDI3NTAwMDhDNjMwNDQ0M0MxODA4MDA4RjE4MDQ0MDAwRTg1MDIxQTIKLToxMDI3NjAwMDI1NUZGRkZFMDA3Rjc4MjEwMDAwMTAyMTAxRkYzMDJCNDQKLToxMDI3NzAwMDAzMDI4ODIxMDIyNjQ4MjEzQzAxMDgwMEFDMkYwNDQ0QjIKLToxMDI3ODAwMDNDMDEwODAwQUMyOTA0NDAyNEVCMDAwODMxNjJGRkZGNDMKLToxMDI3OTAwMDMwNDcwMDA3MTBFMDAwMDM4Rjg1MDAxODI0NTAwMDA3MjEKLToxMDI3QTAwMDMyMDJGRkY4MzEwNkZGRkYzMEM4MDAwNzAwNDU3MDIxRjQKLToxMDI3QjAwMDMxQ0QxRkZGMDM0RDYwMjFBRjg1MDAxQ0FGOEQwMDE4ODgKLToxMDI3QzAwMDI1OUI0MDAwQUY0RDAwODQxMTAwMDAwMzhGOEYwMDIwMzcKLToxMDI3RDAwMDI0QzQwMDA3MzA4NkZGRjg4Rjg0MDAyODAwQ0YyODIxMEEKLToxMDI3RTAwMDAwQTQ0ODJCMTUyMDAwMDJBRjhGMDAyNDAwQTQyODIzNEEKLToxMDI3RjAwMEFGODUwMDIwQUY0NTAwODAzQzExMDgwMDhFMzEwNDM0QzUKLToxMDI4MDAwMDAzNDVDMDIxMzQwMjgwMDAwMzAyMzAyMTEyMjAwMDA1NUMKLToxMDI4MTAwMEFGODYwMDM4OTM4MzAwMTcyNDE5MDAwRTEwNzkwMDBEM0QKLToxMDI4MjAwMDI0MUYwNDNGM0MwQTEwMDBBRjRBMDE3ODhGOEIwMDE0MkMKLToxMDI4MzAwMDI1NjcwMDAxMEEwMDAxRERBRjg3MDAxNDBFMDAwNUE2MjAKLToxMDI4NDAwMDNDMTA0MDAwOEY4QjAwMTQyNTY3MDAwMTBBMDAwMURFNTgKLToxMDI4NTAwMEFGODcwMDE0M0MwQTEwMDBBNzVGMDE0OEFGNEEwMTc4MTcKLToxMDI4NjAwMDBBMDAwNEI0OEY4QjAwMTQyNDBFMEYwMDExRUUwMDNERkIKLToxMDI4NzAwMDMwRDEwMDIwMTYyMDAwMDIyNDAzMDAwOTI0MDMwMDAxQTcKLToxMDI4ODAwMDBBMDAwMjA4QTc0MzAxNEEwQTAwMDFGQkE3NDAwMTQ2Q0IKLToxMDI4OTAwMDk0RTUwMDA4OTRFMjAwMEE5NEVCMDAwQzhGODYwMDNDNUIKLToxMDI4QTAwMDAwMDJGQzAwMzE2QUZGRkYzMEI5RkZGRjEzMjYwMDM3M0EKLToxMDI4QjAwMDAzRUEyMDI1M0MwNTA4MDA4Q0E1MDQ0NDNDMUYwODAwQzEKLToxMDI4QzAwMDhGRkYwNDQwMDAwMDUwMjEwMEE4MzgyMTAwRTgzMDJCODEKLToxMDI4RDAwMDAzRUFDODIxMDMyNkMwMjEzQzAxMDgwMEFDMjcwNDQ0QjgKLToxMDI4RTAwMDNDMDEwODAwQUMzODA0NDAwQTAwMDI2OThGOEQwMDE4RDIKLToxMDI4RjAwMDNDMTkwODAwOEYzOTA0N0MzQzAzMDgwMDhDNjMwNDU0QTUKLToxMDI5MDAwMDNDMDYwODAwOENDNjA0NzgzQzBGMDgwMDhERUYwNDUwOEMKLToxMDI5MTAwMDAzMjgzODIxMDA2ODY4MjEwMEU4QzAyQjAwQzQ4ODIxMDIKLToxMDI5MjAwMDAxQTg0MDJCMDFFNDcwMjEwMjM4NTgyMTAxQzg2MDIxMjAKLToxMDI5MzAwMDNDMDEwODAwQUMyRDA0NTQzQzAxMDgwMEFDMkMwNDUwQjAKLToxMDI5NDAwMDNDMDEwODAwQUMyNzA0N0MzQzAxMDgwMEFDMkIwNDc4NTcKLToxMDI5NTAwMDBBMDAwMjY5OEY4RDAwMThBNzQwMDE0NjBBMDAwNDFCNzcKLToxMDI5NjAwMDhGOEYwMDE4MzBEMDAwMjAxNjAwRkZDNTI0MDMwMDBEMDMKLToxMDI5NzAwMDI0MDMwMDA1MEEwMDAyMDhBNzQzMDE0QTk3NTkwMTA0RUQKLToxMDI5ODAwMDI3MzhGRkYwMEEwMDAzNkIzMzA0RkZGRjhGOEMwMDQwRjEKLToxMDI5OTAwMDE0OENGRkM4MDAwMDgwMjEzQzExMDgwMDhFMzEwNDZDQUIKLToxMDI5QTAwMDNDMDQwODAwOEM4NDA0NjgwMjI4NzAyMTAxQzg3ODJCM0MKLToxMDI5QjAwMDAwOTA0MDIxMDEwRjY4MjEzQzAxMDgwMEFDMkUwNDZDRkUKLToxMDI5QzAwMDNDMDEwODAwQUMyRDA0NjgwQTAwMDI2OThGOEQwMDE4RDQKLToxMDI5RDAwMDhGOTkwMDQwMTQ5OUZGNUQwMDAwNjAyMTNDMDUwODAwQkMKLToxMDI5RTAwMDhDQTUwNDZDM0MxMDA4MDA4RTEwMDQ2ODAwRTgyMDIxQkYKLToxMDI5RjAwMDI0OEVGRkZFMDBBRUY4MjEwM0VFNTgyQjAyMEM1MDIxNkUKLToxMDJBMDAwMDAxNEIxODIxM0MwMTA4MDBBQzNGMDQ2QzNDMDEwODAwNUMKLToxMDJBMTAwMEFDMjMwNDY4MEEwMDA0OEIyNEVCMDAwODhGODgwMDM4N0MKLToxMDJBMjAwMDNDMDJGRkZGOEQwRTAwMEMwMUMyNjgyNDAxQTQ2MDI1NEEKLToxMDJBMzAwMEFEMEMwMDBDMEEwMDAzNzkzMENGRkZGRjBBMDAwM0E5OTgKLToxMDJBNDAwMEFFMDAwMDAwOTc0QjAxMDQ5MjA0MDAwNDhFMkEwMDBDOTMKLToxMDJBNTAwMDAxNjQ0MDIxMjUxRkZGRjIwMTQ3MTgyNDMzRjlGRkZGQ0QKLToxMDJBNjAwMDAwNzlDMDI1QUUzODAwMEMwQTAwMDJENDhFMTkwMDEwN0YKLToxMDJBNzAwMDNDMDNGRkZGOEQxMTAwMTAwMjIzMjgyNDAwQTQ3ODI1QjkKLToxMDJBODAwMEFEMEYwMDEwMEEwMDAzNzkzMENGRkZGRjk3NDUwMTA0MTYKLToxMDJBOTAwMDkyMDYwMDA0OEUyRjAwMTAwMEE2MTAyMTI0NDlGRkVFOUMKLToxMDJBQTAwMDAxRTc2ODI0MzEyRUZGRkYwMUFFNjAyNUFFMkMwMDEwMzcKLToxMDJBQjAwMDBBMDAwMkQ0OEUxOTAwMTA4RTA2MDAwQ0FFMDAwMDAwMzEKLToxMDJBQzAwMDAwMDNDMDgwMDMxMDg4MjEwQTAwMDJBNkFFMjYwMDIwNjEKLToxMDJBRDAwMDE0NjAwMDBEMzA1MEZGRkYzQzA0RkZGRjAwNDQ2MDI0RjEKLToxMDJBRTAwMDAxODQ2ODI2MDAwRDU4MkIwMDBDNTAyQjAxNEIxMDI0M0MKLToxMDJBRjAwMDEwNDAwMDAyMDAwMDAwMDAwMDAwMDAwRDhDQTMwMDAwNDgKLToxMDJCMDAwMDBBMDAwMjNFMDA2NDEwMjUzQTExRkZGRjAwMTE3ODJCRTUKLToxMDJCMTAwMDAwMTA3MDJCMDFDRjIwMjQxMDgwMDAwMjAwMDAwMDAwNjQKLToxMDJCMjAwMDAwMDAwMDBEOENCODAwMDAwQTAwMDIzRTM3MDJGRkZGRDMKLToxMDJCMzAwMDMwODRGRkZGMzBBNUZGRkYxMDgwMDAwNzAwMDAxODIxNDAKLToxMDJCNDAwMDMwODIwMDAxMTA0MDAwMDIwMDA0MjA0MjAwNjUxODIxN0MKLToxMDJCNTAwMDE0ODBGRkZCMDAwNTI4NDAwM0UwMDAwODAwNjAxMDIxRkUKLToxMDJCNjAwMDEwQzAwMDA3MDAwMDAwMDA4Q0EyMDAwMDI0QzZGRkZGNzgKLToxMDJCNzAwMDI0QTUwMDA0QUM4MjAwMDAxNEMwRkZGQjI0ODQwMDA0RTAKLToxMDJCODAwMDAzRTAwMDA4MDAwMDAwMDAxMEEwMDAwODI0QTNGRkZGREQKLToxMDJCOTAwMEFDODYwMDAwMDAwMDAwMDAwMDAwMDAwMDI0MDJGRkZGREYKLToxMDJCQTAwMDI0NjNGRkZGMTQ2MkZGRkEyNDg0MDAwNDAzRTAwMDA4OUEKLToxMDJCQjAwMDAwMDAwMDAwMzA4RUZGRkYzMEQ4RkZGRjAwMDU3QzAwRDIKLToxMDJCQzAwMDAxRjg2MDI1MzlDREZGRkYwMUFDNTAyMTAxNEM1ODJCOTUKLToxMDJCRDAwMDAxNEI0ODIxMDAwOTQ0MDIzMTI3RkZGRjAwRTgzMDIxNjIKLToxMDJCRTAwMDAwMDYyNDAyMzBDNUZGRkYwMEE0MTgyMTM4NjJGRkZGNTEKLToxMDJCRjAwMDAzRTAwMDA4MzA0MkZGRkYzQzBDMDgwMDhEOEMwNDg0ODkKLToxMDJDMDAwMDI0MEJGRjgwMjdCREZGRDAwMTg0NTAyMTAxNEI0ODI0QjUKLToxMDJDMTAwMEFGNDkwMDIwM0MwODA4MDA4RDA4MDQ4NEFGQjIwMDIwQjIKLToxMDJDMjAwMEFGQjAwMDE4QUZCRjAwMjhBRkIzMDAyNEFGQjEwMDFDOTUKLToxMDJDMzAwMDkzNjYwMDA0MDEwNDM4MjEzMEU0MDA3RjAwOUExMDIxREIKLToxMDJDNDAwMDNDMDMwMDA4MDA0MzkwMjEzMEM1MDAyMDAzNjA4MDIxMzAKLToxMDJDNTAwMDNDMDgwMTExMjc3QjAwMDgxNEEwMDAwMjI2NDYwMDcwRTIKLToxMDJDNjAwMDI2NDYwMDZDOTIxMzAwMDQ5NzUxMDEwNDkyMEYwMDA0NTEKLToxMDJDNzAwMDMyNjcwMDBGMzIyRUZGRkYzMUVEMDA0MDAxQzcyODIzREQKLToxMDJDODAwMDExQTAwMDA1MDAwMDQ4MjE5MjU5MDBCQzMzMzgwMDA0MEYKLToxMDJDOTAwMDE3MDAwMDkwMDAwMDAwMDA5MjQzMDBCQzMwN0YwMDA0NDkKLToxMDJDQTAwMDEzRTAwMDBGMDAwMDAwMDAxMEEwMDAwRDAwMDAwMDAwNjUKLToxMDJDQjAwMDk2MEUwMDAyMjQwQUZGODAwMEE3NjAyMTI1Q0RGRkZFQUEKLToxMDJDQzAwMEE3NEQxMDE2OTIwQjAwMDQwMTRCMjAyNDMwODIwMEZGMDgKLToxMDJDRDAwMDEwNDAwMDg1MDEwQzQwMjUzQzBGMDQwMDAxMEY0MDI1RTkKLToxMDJDRTAwMDhGNTMwMTc4MDY2MEZGRkUyNDA0MDAwQUE3NDQwMTQwQzgKLToxMDJDRjAwMDk2MEQwMDAyMjQwNDAwMDkzMUFDMDAwNzAwMEM1ODIzOTMKLToxMDJEMDAwMDMxNkEwMDA3QTc0QTAxNDI5NjAyMDAwMjI0NDNGRkZFRUYKLToxMDJEMTAwMEE3NDMwMTQ0QTc0MDAxNDY5NzVGMDEwNEE3NUYwMTQ4MEMKLToxMDJEMjAwMDhGNTkwMTA4MzMzODAwMjA1MzAwMDAwMTI0MDQwMDAxQUEKLToxMDJEMzAwMDkyMEYwMDA0MzFFRTAwMTAxNUMwMDAwMjM0ODMwMDEwMjEKLToxMDJENDAwMDAwODAxODIxQTc0MzAxNEEwMDAwMDAwMDAwMDAwMDAwOTUKLToxMDJENTAwMDAwMDAwMDAwMDAwMDAwMDBBRjQ4MTAwMDAwMDAwMDAwNkMKLToxMDJENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGNTExMDAwNzMKLToxMDJENzAwMDA2MjFGRkZFMzExM0ZGRkYxMjYwMDAwMzAwMDAwMDAwNzgKLToxMDJEODAwMDhGNDgxMDE4QUNDODAwMDA5NjAzMDAwNjMwN0ZGRkZGODQKLToxMDJEOTAwMDI3RjkwMDAyMDAxOTk4ODIwMDEzODg4MDAyM0IzMDIxMzUKLToxMDJEQTAwMDhDRDgwMDAwMTUyMDAwNTcwMDE4MzQwMjkyMDMwMDA0NEMKLToxMDJEQjAwMDI0MDVGRjgwMDBBM0Y4MjQzM0YxMDBGRjEyMjAwMDJDMkIKLToxMDJEQzAwMDAwMDAwMDAwOTI0NzAwQkMzMEYyMDAwMjEyNDAwMDI4RDAKLToxMDJERDAwMDAwMDAwMDAwOTc0QjEwMEMyNTYyRkZGRUE3NDIxMDE2NjIKLToxMDJERTAwMDAwMDAwMDAwM0MwQTA0MDAzNTQ5MDAzMEFGNDkxMDAwRTMKLToxMDJERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMDJFMDAwMDhGNEMxMDAwMDU4MUZGRkUwMDAwMDAwMDk3NDkxMDBDNTgKLToxMDJFMTAwMDhGNTExMDFDMDBDMDIwMjEzMTI3RkZGRjI0RjIwMDMwMDkKLToxMDJFMjAwMDAwMTIxODgyMDAwMzI4ODAwMEJCRjgyMTMyMjZGRkZGMjEKLToxMDJFMzAwMEFGRjEwMDAwMEUwMDA1OTUwMDExMkMwMjAwMTNDODgwQjAKLToxMDJFNDAwMDAzM0I5ODIxOEU3ODAwMDAwMDAyNzQwMEFGQjgwMDEwOTgKLToxMDJFNTAwMDhGQTgwMDEwMzEwRkZGRkZBRkFGMDAxMDhGQTQwMDEwM0MKLToxMDJFNjAwMDAxQzQ2ODI1QUZBRDAwMTA4RkE2MDAxMEFFNjYwMDAwNEIKLToxMDJFNzAwMDk3NzMwMDA4OTc2RDAwMEE5NzY2MDAwQzhGOEEwMDNDRDQKLToxMDJFODAwMDAwMEQ1QzAwMzBDQ0ZGRkYzMjYyRkZGRjEwNEEwMDM2QkQKLToxMDJFOTAwMDAxNkMyMDI1OTYwNjAwMDIzQzEwMTAwMDI0RDMwMDA4ODcKLToxMDJFQTAwMDBFMDAwMTM5MzI2NEZGRkY5NzRDMDEwNDBFMDAwMTQ3MDgKLToxMDJFQjAwMDMxODRGRkZGQUY1MDAxNzg4RkJGMDAyODhGQjMwMDI0MEIKLToxMDJFQzAwMDhGQjIwMDIwOEZCMTAwMUM4RkIwMDAxODAzRTAwMDA4MDMKLToxMDJFRDAwMDI3QkQwMDMwMTBBMEZGNzAwMDAwMDAwMDI0QTVGRkZDRkIKLToxMDJFRTAwMDBBMDAwNUNFMjQwOTAwMDQ4Q0QxMDAwMEFGNTExMDE4NEYKLToxMDJFRjAwMDhGNTMwMTc4MDY2MEZGN0EyNDA0MDAwQTBBMDAwNUUzNzQKLToxMDJGMDAwMDAwMDAwMDAwMDBBN0M4MjE4Rjg4MDAzODhGNEUxMDFDRDkKLToxMDJGMTAwMDAwMTlDMDgyMDAxODc4ODAwMUU4MjAyMUFDOEUwMDAwRTIKLToxMDJGMjAwMDAwMEUyQzAyMDBDMDIwMjEwRTAwMDU5NTMxQzZGRkZGQzcKLToxMDJGMzAwMDAyM0IyODIxOENBRDAwMDAwMDAyNTQwMDAwNDAzMDIxRUIKLToxMDJGNDAwMEFGQUQwMDEwOEZBQzAwMTAzMThCRkZGRkFGQUIwMDEwQTYKLToxMDJGNTAwMDhGQTIwMDEwMDE0MjQ4MjVBRkE5MDAxMDhGQTcwMDEwRDIKLToxMDJGNjAwMDBBMDAwNjEzQUNBNzAwMDA4RjhGMDA0MDE0OEZGRkM5MjIKLToxMDJGNzAwMDAwMDAwMDAwOTc0MjAxMDQ5NjBCMDAwMjNDMDUwODAwODcKLToxMDJGODAwMDhDQTUwNDZDMzA0OUZGRkYzMTZBRkZGRjNDMTEwODAwM0IKLToxMDJGOTAwMDhFMzEwNDY4MDEyQTM4MjEyNEYyRkZGRTAwQjI0MDIxNUMKLToxMDJGQTAwMDAwMTJGRkMzMDExMkM4MkIwMjNGQzAyMTAzMTkyMDIxQzgKLToxMDJGQjAwMDNDMDEwODAwQUMyODA0NkMzQzAxMDgwMEFDMjQwNDY4MDcKLToxMDJGQzAwMDBBMDAwNjREMDAwMDAwMDAwMEE0MTAyQjEwNDAwMDA5NkMKLToxMDJGRDAwMDI0MDMwMDAxMDAwNTI4NDAwMEE0MTAyQjA0QTAwMDAzRDYKLToxMDJGRTAwMDAwMDMxODQwNTQ0MEZGRkMwMDA1Mjg0MDEwNjAwMDA3MTMKLToxMDJGRjAwMDAwMDAwMDAwMDA4NTMwMkIxNEMwMDAwMjAwMDMxODQyQkUKLToxMDMwMDAwMDAwODUyMDIzMTQ2MEZGRkIwMDA1Mjg0MjAzRTAwMDA4MzAKLToxMDMwMTAwMDAwODAxMDIxOEY4NTAwMkMyN0JERkZFODAwMDUzMDI3OTgKLToxMDMwMjAwMDJDQzMwMDAxMkNBNDAwMDIwMDgzMTAyNTEwNDAwMDAzRDMKLToxMDMwMzAwMEFGQkYwMDEwMjQwNTAwN0ZBRjg1MDAyQzAwMDUyODI3QjYKLToxMDMwNDAwMDMwQTVGRkZGMEUwMDA1NzQyNDA0MjZGNThGODMwMDMwQTEKLToxMDMwNTAwMDI0MDQwMkJEMDA0MDMwMjEwMDgzMzgyQjEwRTAwMDA5MTkKLToxMDMwNjAwMDI0MDUwMDAxMDAwNDIwNDAwMDgzMTAyQjA0ODAwMDAzOEQKLToxMDMwNzAwMDAwMDUyODQwNTQ0MEZGRkMwMDA0MjA0MDEwQTAwMDA4MzgKLToxMDMwODAwMDAwQzM1MDIxMDA2NDQwMkIxNTAwMDAwMjAwMDUyODQyQjcKLToxMDMwOTAwMDAwNjQxODIzMTRBMEZGRkIwMDA0MjA0MjAwQzM1MDIxNDkKLToxMDMwQTAwMDhGQkYwMDEwMDAwQTRDMDIzMTIyMDBGRjI3QkQwMDE4MUMKLTowQzMwQjAwMEFGOEEwMDJDMDNFMDAwMDhBRjg5MDAzMDVDCi06MDQzMEJDMDAwQTAwMDAyQURDCi06MTAzMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3NDc4NzAzNTYyCi06MTAzMEQwMDAyRTMwMkUzMDZBMzMwMDAwMDUwMDAwMDAwMDAwMDAwQTg4Ci06MTAzMEUwMDAwMDAwMDEzNjAwMDBFQTYwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTAzMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTAzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTAzMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNjk5Ci06MTAzMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTAzMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTAzMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTAzMTUwMDAwMDAwMDAwMDAwMDAxMzg4MDAwMDAwMDAwMDAwMDVEQ0YzCi06MTAzMTYwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDMwMDAwMDAwMDRDCi06MTAzMTcwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDAyNDQyM0I2MEVFCi06MTAzMTgwMDAzQzAzMDgwMDI0NjMzRDE0QUM0MDAwMDAwMDQzMjAyQkE2Ci06MTAzMTkwMDAxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDAzN0JEN0ZGQzY1Ci06MTAzMUEwMDAwM0EwRjAyMTNDMTAwODAwMjYxMDAwQTgzQzFDMDgwMEQ5Ci06MTAzMUIwMDAyNzlDM0I2MDBFMDAwMkJBMDAwMDAwMDAwMDAwMDAwRERBCi06MTAzMUMwMDA4RjgzMDAzODNDMDg4MDAwMzUwNzAwNzA4Q0U1MDAwMEQ0Ci06MTAzMUQwMDAwMDgzMzAyNTNDMDI5MDAwMDBDMjIwMjVBRjg1MDAzMERFCi06MTAzMUUwMDBBRjQ0MDAyMDhGNDkwMDIwMDUyMEZGRkUzQzAzODAwMEYzCi06MTAzMUYwMDAzNDYyMDA3MDhDNDUwMDAwOEY4NjAwMzAzQzE5MDgwMDU2Ci06MTAzMjAwMDA4RjM5MDA3QzNDMEUwODAwOERDRTAwNzgwMEE2MjAyMzZDCi06MTAzMjEwMDAwMzI0NTgyMTAwMDA3ODIxMDE2NDY4MkIwMUNGNjAyMTJDCi06MTAzMjIwMDAwMThENTAyMTNDMDEwODAwQUMyQjAwN0MzQzAxMDgwMEMyCi06MTAzMjMwMDBBQzJBMDA3ODAzRTAwMDA4MDAwMDAwMDAwQTAwMDA0MTBBCi06MTAzMjQwMDAyNDA0MDAwMThGODQwMDM4M0MwNTgwMDAzNEEyMDAwMTcyCi06MTAzMjUwMDAwMDgyMTgyNTAzRTAwMDA4QUY0MzAwMjAwM0UwMDAwOEM3Ci06MTAzMjYwMDAwMDAwMTAyMTMwODRGRkZGMzBBNUZGRkYxMDgwMDAwNzExCi06MTAzMjcwMDAwMDAwMTgyMTMwODIwMDAxMTA0MDAwMDIwMDA0MjA0MkFBCi06MTAzMjgwMDAwMDY1MTgyMTE0ODBGRkZCMDAwNTI4NDAwM0UwMDAwOEJBCi06MTAzMjkwMDAwMDYwMTAyMTEwQzAwMDA3MDAwMDAwMDA4Q0EyMDAwMDk4Ci06MTAzMkEwMDAyNEM2RkZGRjI0QTUwMDA0QUM4MjAwMDAxNEMwRkZGQjZECi06MTAzMkIwMDAyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAxMEEwMDAwOEJGCi06MTAzMkMwMDAyNEEzRkZGRkFDODYwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Ci06MTAzMkQwMDAyNDAyRkZGRjI0NjNGRkZGMTQ2MkZGRkEyNDg0MDAwNDJBCi06MTAzMkUwMDAwM0UwMDAwODAwMDAwMDAwMzA4QUZGRkY5M0E4MDAxM0VECi06MTAzMkYwMDBBNzRBMDE0NDk3NDkwRTE2MzBDNjAwRkYzQzAyMTAwMDUxCi06MTAzMzAwMDBBNzQ5MDE0NkFGNDUwMTQ4QTM0NjAxNTJBNzQ4MDE1QUMzCi06MTAzMzEwMDBBRjQ3MDE2MDhGQTQwMDE4OEZBMzAwMTRBNzQ0MDE1ODgxCi06MTAzMzIwMDBBRjQzMDE1NDAzRTAwMDA4QUY0MjAxNzgwM0UwMDAwODE2Ci06MTAzMzMwMDAwMDAwMDAwMDNDMDM4MDAwMzQ2MjAwNzA4QzQ5MDAwMEYzCi06MTAzMzQwMDA4Rjg4MDAwMDI0ODQwMDA3MjdCREZGRjgzMDg0RkZGODMxCi06MTAzMzUwMDBBRjg5MDAzMDk3NEQwMDhBMzFBQ0ZGRkZBRkFDMDAwMDYxCi06MTAzMzYwMDA4RkFCMDAwMDAxNjg1MDIzMjU0N0ZGRkYzMEU2MUZGRkE5Ci06MTAzMzcwMDAwMEM0MjgyQjE0QTBGRkY3M0MwQzgwMDAzNThCMDA3MDk0Ci06MTAzMzgwMDA4RDZBMDAwMDNDMDcwODAwOENFNzAwODQzQzA2MDgwMEJBCi06MTAzMzkwMDA4Q0M2MDA4MDAwMDgxMDgyMDE0OTE4MjMwMDAyNzg4MDQyCi06MTAzM0EwMDAwMEUzNzAyMTAwMDAyMDIxMDFDM0M4MkIwMEM0QzAyMTBDCi06MTAzM0IwMDAwMUZBNDAyMTAzMTk0ODIxMjUwMjQwMDAyN0JEMDAwOEQ5Ci06MTAzM0MwMDAzQzAxMDgwMEFDMkUwMDg0M0MwMTA4MDBBQzI5MDA4MEMwCi06MTAzM0QwMDAwM0UwMDAwODAwMDAwMDAwOEY4MjAwMDAyNDg2MDAwNzQwCi06MTAzM0UwMDAzMEM1RkZGODAwQTIxODIxMzA2NDFGRkYwM0UwMDAwODc5Ci06MTAzM0YwMDBBRjg0MDAwMDhGODcwMDM4OEY4QTAwNDAyN0JERkZCODU4Ci06MTAzNDAwMDA4Rjg2MDA0NEFGQjYwMDQwQUZCRjAwNDRBRkI1MDAzQzZDCi06MTAzNDEwMDBBRkI0MDAzOEFGQjMwMDM0QUZCMjAwMzBBRkIxMDAyQzVFCi06MTAzNDIwMDBBRkIwMDAyODhGNDUwMTA0OEQ0OTAwQUNBRjQ3MDA4MDQ0Ci06MTAzNDMwMDA4Q0M4MDAyMDAwQTkzODIzMDAwMEIwMjFBRjQ4MEUxMDJFCi06MTAzNDQwMDA4RjQ0MEUxMDAwMDA0ODIxQUY0NDBFMTQ4Q0MyMDAyNDlCCi06MTAzNDUwMDBBRjQyMEUxODhGNDMwRTE4QUY0MzBFMUMxMEUwMDEyNTJCCi06MTAzNDYwMDAyRDIzMDAwMTkzNkIwMDA4MTE2MDAwRDQwMDAwMDAwMEMwCi06MTAzNDcwMDA5NzZFMDAxMDMxQ0RGRkZGMDBFRDYwMkIxNTgwMDBDRjVGCi06MTAzNDgwMDAwMDAwMDAwMDk3NzAwMDEwMzIwRkZGRkZBRjRGMEUwMERBCi06MTAzNDkwMDA4RjUyMDAwMDMyNTEwMDA4MTIyMEZGRkQwMDAwMDAwMDkyCi06MTAzNEEwMDA5NzU0MEUwODhGNDYwRTA0MzI4NUZGRkYzMEIzMDAwMTlCCi06MTAzNEIwMDAxMjYwMDEzMjAwMDAwMDAwMDAwMDAwMEQzMEI4QTA0MDkyCi06MTAzNEMwMDAyNDE1MDA0MDEzMTUwMEMwMzBBOUEwMDAxMTIwMDEyREMzCi06MTAzNEQwMDAwMDAwMDAwMDkzN0YwMDA4MTNFMDAwMDgwMDAwMDAwMEQ3Ci06MTAzNEUwMDA5NzYzMDAxMDMwNkJGRkZGMDBDQjQwMkIxMTAwMDAwM0VGCi06MTAzNEYwMDAzMEFDMDA0MDExODAwMTIzMDAwMDAwMDBBNzg1MDAzQzkzCi06MTAzNTAwMDBBRjg2MDAzNDkzNjYwMDA4MDBFMDI4MjFBRkE3MDAyMEIyCi06MTAzNTEwMDAxNEMwMDEyNDI3QjMwMDIwQUY2MDAwMEM5NzgyMDAzQzQ4Ci06MTAzNTIwMDAzMDQ3NDAwMDE0RTAwMDAyMjQwMzAwMTYyNDAzMDAwRTdDCi06MTAzNTMwMDAyNDE5NDAwN0EzNjMwMDBBQUY3OTAwMTQ5MzhBMDAzRTYwCi06MTAzNTQwMDA4Rjc0MDAxNDMxNTgwMDA3MDAxOEFBNDAwMjk1OTAyNTg2Ci06MTAzNTUwMDBBRjcyMDAxNDk3ODQwMDNDOEY3MDAwMTQzMDkxMDAxMEZCCi06MTAzNTYwMDAwMjExNzgyNUFGNkYwMDE0OTc4RTAwM0MzMUNEMDAwODEyCi06MTAzNTcwMDAxMUEwMDE0NzAwMDAyODIxOEY2NzAwMTQzQzAyMTAwMEIxCi06MTAzNTgwMDAzQzBDODEwMDAwRTIyODI1QUY2NTAwMTQ5NzQ2MEUwQTI2Ci06MTAzNTkwMDAyNDA4MDAwRTM0MDVGRkZDMzBDM0ZGRkYwMDZDNTgyNUUzCi06MTAzNUEwMDBBRjZCMDAwNEEzNjgwMDAyOTM3RjAwMEEyN0U5MDAwNEMwCi06MTAzNUIwMDBBMzY5MDAwQTk3ODYwMDNDOTM2MzAwMEEzMENDMUYwMDgxCi06MTAzNUMwMDAwMDBDNTk4MzAxNjM0MDIxMjUxRjAwMjhBMzdGMDAwOUI3Ci06MTAzNUQwMDA5NzQ5MEUwQ0E3NjkwMDEwOTM3OTAwMDkyNzJBMDAwMjY5Ci06MTAzNUUwMDAzMTU4MDAwNzAwMThBODIzMzJCMTAwMDdBMzcxMDAwQjVGCi06MTAzNUYwMDA5Mzc0MDAwOTk3NjQwMDEwOEY5MTAwMzQ5NzhGMDAzQ0ZBCi06MTAzNjAwMDAzMjkyMDBGRjAyNDQ4MDIxMDIwNTcwMjEzMUVEMDA0MDFBCi06MTAzNjEwMDAxMUEwMDAwNTMxQzRGRkZGMDA5MTI4MkIzQzEyODAwMDRGCi06MTAzNjIwMDAxMEEwMDAxNDAwMDBBMDIxMDIyNDM4MkIxNEUwMDExQjdDCi06MTAzNjMwMDA4RkE1MDAyMDhGNEQwRTE0QUY0RDBFMTA4RjQyMEUxQzIzCi06MTAzNjQwMDBBRjQyMEUxOEFGNDQwRTAwOEY0RjAwMDAzMUVFMDAwODVECi06MTAzNjUwMDAxMUMwRkZGRDAwMDAwMDAwOTc1NDBFMDgwMDgwODgyMTczCi06MTAzNjYwMDAwMDAwOTAyMUE3OTQwMDNDOEY1MDBFMDQyNDE0MDAwMTA4Ci06MTAzNjcwMDBBRjkwMDAzNDk3NjQwMDEwMzA5NUZGRkY4RTY4MDAwMDEzCi06MTAzNjgwMDAwMTExRjgyMzE3RTAwMDA5QUU3RjAwMDA4RjY1MDAxNEQ4Ci06MTAzNjkwMDA4RjhCMDA0NDM0QTYwMDQwQUY2NjAwMTQ4RjRDMEUxMDkwCi06MTAzNkEwMDBBRDZDMDAyMDhGNDMwRTE4QUQ2MzAwMjQ5MzY3MDAwOEIzCi06MTAzNkIwMDAxNEUwMDBEMjAwMDAwMDAwMEUwMDAwOUUyNDA0MDAxMDYwCi06MTAzNkMwMDA4Rjg5MDA0ODNDMDgzMjAwMDA0MDI4MjEzMTI2MDBGRjQ1Ci06MTAzNkQwMDAwMDA2RkMwMDAzRTg1MDI1MjUzOTAwMDFBRjk5MDA0ODk5Ci06MTAzNkUwMDBBQzRBMDAwMDkzNzgwMDA5OTM3MDAwMEEzMzA0MDBGRjhECi06MTAzNkYwMDAwMDA0NzQwMDMyMEYwMEZGMDFDRjY4MjVBQzREMDAwNEI4Ci06MTAzNzAwMDA4RjgyMDA0ODA2NDAwMEVBQUNBMjAwMDhBQ0EwMDAwQzgyCi06MTAzNzEwMDA5NzgzMDAzQzMwNkIwMDA4MTU2MDAwMDIyNjI4MDAwNkU1Ci06MTAzNzIwMDAyNjI4MDAwMjk3NEUwRTE0OEY0NTBFMUM4RjY3MDAwNDRBCi06MTAzNzMwMDA5MzZEMDAwMjMxQzRGRkZGMzFBMjAwRkZBRkEyMDAxMDYxCi06MTAzNzQwMDA4RjZDMDAxNEFGQTgwMDE4MEUwMDAwOEJBRkFDMDAxNEYzCi06MTAzNzUwMDAyNDA0MDAxMDBFMDAwMEM3MDAwMDAwMDA4RTcyMDAwMDVDCi06MTAzNzYwMDAxNjQwMDAwNTAwMDAwMDAwOEY2NDAwMTQyNDA1RkZCRjEwCi06MTAzNzcwMDAwMDg1OTgyNEFGNzMwMDE0OEY3OTAwMEMwMzM1MzgyMTJECi06MTAzNzgwMDBBRjY3MDAwQzkzNzUwMDA4MTZBMDAwMDgwMDAwMDAwMDQ5Ci06MTAzNzkwMDAxMjgwMDAwNjAwMDAwMDAwOEY3RjAwMTQzQzBCRUZGRjNBCi06MTAzN0EwMDAzNTY4RkZGRTAzRTg0ODI0QUY2OTAwMTRBMzc0MDAwOERECi06MTAzN0IwMDA4RkE1MDAyMDBBMDAwMjQ2MDIyMDIwMjFBRjQ3MEUwMEZDCi06MTAzN0MwMDAwQTAwMDBGNTAwMDAwMDAwOEY1OTAxNzgwNzIwRkZGRTc1Ci06MTAzN0QwMDAyNDFGMDgwMDhGODQwMDAwQUY1RjAxNzg5NzRCMDA4QTk4Ci06MTAzN0UwMDAzMTZBRkZGRjAxNDQ0ODIzMjUyOEZGRkYzMTAyMUZGRkY0Ci06MTAzN0YwMDAyQzQzMDAwODE0NjBGRkY5MDAwMDAwMDA4RjhFMDA0ODgxCi06MTAzODAwMDA4RjhEMDAzODAwQzA0ODIxMDM0NDIwMjEyNUM2MDAwMUM3Ci06MTAzODEwMDAyNDBDMEYwMEFGODYwMDQ4MDBFOTM4MjMyNDg2NDAwMEJFCi06MTAzODIwMDAzMUNBMDBGRjExQUMwMDA1MjQwODAwMDE5MzkxMDAzRTRECi06MTAzODMwMDAzMjMwMDAwNzAwMTA3QTQwMzVFODAwMDEwMDBBQUMwMDgxCi06MTAzODQwMDAzQzE4MDEwMDAyQjhBMDI1QUM5NDQwMDA4RjkzMDA0OEJBCi06MTAzODUwMDAzMEIyMDAzNjMwQTQwMDA4QUNEMzAwMDQxMDgwMDA5N0NBCi06MTAzODYwMDAwMTEyMzAyNTk3NEUwRTBBOEY4RDAwMDAzQzAyODEwMDE4Ci06MTAzODcwMDAzMUNDRkZGRjI1QUIwMDA4MDE4MjQwMjUzQzAzMTAwMDNFCi06MTAzODgwMDAzMTY1MUZGRjI1MzkwMDA2MjQxRjAwMEVBRjQ4MDE2MDc3Ci06MTAzODkwMDAwMEMzMzAyNUE3NUYwMTVBQUY4NTAwMDBBNzU5MDE1ODIyCi06MTAzOEEwMDAxNEUwMDAwQThGOTMwMDM4MjQxMjBGMDA1MjcyMDAwMkI1Ci06MTAzOEIwMDAyNDE2MDAwMTM0QzYwMDQwOEY1ODBFMTA4Rjk0MDA0NDI3Ci06MTAzOEMwMDBBRTk4MDAyMDhGNTUwRTE4QUU5NTAwMjQ4RjQ1MEUxNDJCCi06MTAzOEQwMDBBRjQ1MDE0NDhGNTkwRTFDQUY1OTAxNDhBMzRBMDE1MjBDCi06MTAzOEUwMDAzQzBBMTAwMEFGNDYwMTU0QUY0QTAxNzgxNEUwRkVEREY3Ci06MTAzOEYwMDAyRDIzMDAwMTAwNzZBMDI1MTI4MDAwMTc4RkJGMDA0NDAxCi06MTAzOTAwMDA4Rjg0MDAzODI0MTYwRjAwMTA5NjAwODQwMDAwMDAwMEY5Ci06MTAzOTEwMDA4RjQ1MDE3ODA0QTBGRkZFMjQxNTBGMDAxMDk1MDA2RTVFCi06MTAzOTIwMDAwMDAwMDAwMDhGNDcwRTE0MjQwMjAyNDAzQzFGMTAwMENDCi06MTAzOTMwMDBBRjQ3MDE0NDhGNDQwRTFDQUY0NDAxNDhBMzQwMDE1MkRECi06MTAzOTQwMDBBNzQwMDE1QUFGNDAwMTYwQTc0MDAxNThBRjQyMDE1NDVGCi06MTAzOTUwMDBBRjVGMDE3ODhGQkYwMDQ0OEZCNjAwNDA4RkI1MDAzQzQ5Ci06MTAzOTYwMDA4RkI0MDAzODhGQjMwMDM0OEZCMjAwMzA4RkIxMDAyQzg5Ci06MTAzOTcwMDA4RkIwMDAyODAzRTAwMDA4MjdCRDAwNDgxNEMwRkVEMDI3Ci06MTAzOTgwMDAzMEI4QTA0MDhGNDIwRTE0OEY4NDAwNDQwMDAwNDgyMUJDCi06MTAzOTkwMDBBQzgyMDAyMDhGNTEwRTFDQUM5MTAwMjQwQTAwMDIwRTU0Ci06MTAzOUEwMDAyRDIzMDAwMThGOTEwMDM0OTc4QTAwM0MzQzEyODAwMDQ3Ci06MTAzOUIwMDAwMjIwQTgyMTMxNTgwMDQwMTcwMEZGMzAwMDAwQTAyMTRDCi06MTAzOUMwMDA5NzY5MDAxMDhGOTIwMDM0MzEzOUZGRkYxMzMyMDAzNUIwCi06MTAzOUQwMDAwMDAwMjAyMTAwODA0ODIxMTQ4MEZFQTAwMEEwMzgyMTkyCi06MTAzOUUwMDA4RjQyMEUxNDhGODQwMDQ0QUM4MjAwMjA4RjUxMEUxQzM1Ci06MTAzOUYwMDBBQzkxMDAyNDBBMDAwMjBFMkQyMzAwMDE5MzZBMDAwOUY1Ci06MTAzQTAwMDA5Mzc4MDAwQjMxNTAwMEZGMzMwRjAwRkYwMjBGNzAyMTNECi06MTAzQTEwMDAyNUMyMDAwQTMwNTBGRkZGMEUwMDAwOUUwMjAwMjAyMTQ4Ci06MTAzQTIwMDA4Rjg2MDA0ODNDMUY0MTAwMjRDRDAwMDFBRjhEMDA0ODI3Ci06MTAzQTMwMDA5MzZDMDAwOTMwQzYwMEZGMDAwNjQ0MDAzMTgzMDBGRjhDCi06MTAzQTQwMDAyNDZCMDAwMjAxMEI0ODI1MDEzRkM4MjVBQzU5MDAwMDNBCi06MTAzQTUwMDA4RjY3MDAwQzk3NDQwRTE0MDBGMjI4MjVBQzQ1MDAwNDMzCi06MTAzQTYwMDA4RjQ1MEUxQzhGNjcwMDA0OTM2QTAwMDIzMDg0RkZGRkFECi06MTAzQTcwMDAzMTU4MDBGRkFGQjgwMDEwOEY2RjAwMTRBRkIxMDAxOEJECi06MTAzQTgwMDAwRTAwMDA4QkFGQUYwMDE0MEEwMDAxQTYwMjAwMjAyMTM3Ci06MTAzQTkwMDBBRjYwMDAwNDBBMDAwMTNFQTM2MDAwMDIwQTAwMDI0NjczCi06MTAzQUEwMDAwMDAwMjAyMTAwMDA5MDIxMEEwMDAxNzAyNDE0MDAwMTcwCi06MTAzQUIwMDAzQzEyODAwMDBBMDAwMTk1QUNCMjAwMEM4RjkxMDAwMDBFCi06MTAzQUMwMDAyNTI0MDAwMkE3NDQwMTU4MjYzMDAwMDgzMjBGMUZGRkFBCi06MTAzQUQwMDAwQTAwMDFGOUFGOEYwMDAwQUY0MDAxNEMxMTIwMDAyQzBCCi06MTAzQUUwMDAwMDAwMDAwMDhGNTkwRTEwQUY1OTAxNDQ4RjQzMEUxODhCCi06MTAzQUYwMDAyNDAyMDA0MDNDMUYxMDAwQUY0MzAxNDhBMzQwMDE1Mjg0Ci06MTAzQjAwMDBBNzQwMDE1QUFGNDAwMTYwQTc0MDAxNThBRjQyMDE1NDlECi06MTAzQjEwMDBBRjVGMDE3ODBBMDAwMjI3OEZCRjAwNDQxMTIwMDAwNjIyCi06MTAzQjIwMDAwMDAwMDAwMDk3NDYwRTA4MzBDQzAwNDAxNTgwMDAwMkNGCi06MTAzQjMwMDAwMDAwMDAwMDAwMDAwMDBEOEY0RDAxNzgwNUEwRkZGRTgxCi06MTAzQjQwMDAwMDAwMDAwMDk3NTMwRTEwM0MxMjA1MDAyNDBFMjAwMEM4Ci06MTAzQjUwMDAzMjZBRkZGRjAxNTJDMDI1QUY1ODAxNEM4RjRGMEUxNDNGCi06MTAzQjYwMDAzQzAyMTAwMEFGNEYwMTQ0OEY1MDBFMUNBRjUwMDE0ODczCi06MTAzQjcwMDBBMzQwMDE1MjhGODQwMDM4QTc0MDAxNUFBRjQwMDE2MDMyCi06MTAzQjgwMDBBNzQwMDE1OEFGNEUwMTU0MEEwMDAyMTVBRjQyMDE3ODE4Ci06MTAzQjkwMDA4RjQ5MEUxNEFGNDkwMTQ0OEY0MzBFMUMwQTAwMDI4RTU4Ci06MTAzQkEwMDAyNDAyMDA0MDNDMEUyMEZGMjdCREZGRTAzQzFBODAwMEFECi06MTAzQkIwMDAzQzBGODAwODM1Q0RGRkZEQUZCRjAwMUNBRkIyMDAxODMxCi06MTAzQkMwMDBBRkIxMDAxNEFGQjAwMDEwQUY4RjAwNDBBRjREMEUwMDhBCi06MTAzQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Ci06MTAzQkUwMDAwMDAwMDAwMDNDMEMwMEZGMzU4QkZGRkRBRjRCMEUwMENBCi06MTAzQkYwMDAzQzA2NjAwNDhDQzk1MDAwMjQwQUZGN0YzQzExNjAwMDIxCi06MTAzQzAwMDAwMTJBNDAyNDM1MDczODBDQUNDNzUwMDA4RTI0MDQzOEY0Ci06MTAzQzEwMDAyNDA1MDAwOUFGNDUwMDA4MzA4M0ZGRkYzODYyMkY3MThCCi06MTAzQzIwMDAyNDUwQzBCM0FGODAwMDQ4MEUwMDAwNjhBRjgwMDAwMDkxCi06MTAzQzMwMDA1MjAwMDAwMUFFMjA0NDJDMEUwMDA0MzUzQzExODAwMERGCi06MTAzQzQwMDAwRTAwMEVBODM2MzAwMDcwOEY4QTAwNDAzQzEyMDgwMDJCCi06MTAzQzUwMDAyNjUyM0JDODAyMDA4ODIxOEUwODAwMDA4RjVGMDAwMEJBCi06MTAzQzYwMDAzQkY5MDAwMTMzMzgwMDAxMTMwMDAwMTdBRjg4MDAzMDIyCi06MTAzQzcwMDAwMjIwNDgyMThEMjcwMDAwM0MwRjA4MDA4REVGMDA2Q0NBCi06MTAzQzgwMDAzQzBDMDgwMDhEOEMwMDY4MDBFOEMwMjMwMUY4MjgyMTU2Ci06MTAzQzkwMDAwMDAwNjgyMTAwQjgzMDJCMDE4RDU4MjEwMTY2NDAyMUI5Ci06MTAzQ0EwMDAzQzAxMDgwMEFDMjUwMDZDM0MwMTA4MDBBQzI4MDA2ODExCi06MTAzQ0IwMDA4RjQ0MDAwMDM4ODMwMDAxMzA2MjAwMDExNDQwRkZFREEyCi06MTAzQ0MwMDAwMEUwNDAyMUFGODcwMDMwOEUwQzAwMDAzQzA1MDgwMDZBCi06MTAzQ0QwMDA4Q0E1MDA2QzNDMDQwODAwOEM4NDAwNjgwMTg4MzAyM0FCCi06MTAzQ0UwMDAwMEE2MzgyMTAwMDAxMDIxMDBFNjQwMkIwMDgyMTgyMTk4Ci06MTAzQ0YwMDAwMDY4RjgyMTNDMDEwODAwQUMyNzAwNkMzQzAxMDgwMDdBCi06MTAzRDAwMDBBQzNGMDA2ODhGNDkwMTAwMjU1OTAwODhBRjk5MDA0NEY1Ci06MTAzRDEwMDBBRjg5MDAzOEFGNDkwMDIwOEUwNzAwMDBBRjg3MDAzMDIwCi06MTAzRDIwMDA4RjREMDE3ODA1QTBGRkZFMDAwMDAwMDA4RTA2MDAwMDA4Ci06MTAzRDMwMDAzQzBCMDgwMDhENkIwMDc0M0MwNDA4MDA4Qzg0MDA3MDAwCi06MTAzRDQwMDAwMEM3MjgyMzAxNjVGODIxMDAwMDEwMjEwM0U1NDAyQjVFCi06MTAzRDUwMDAwMDgyMzgyMTAwRThDODIxMjQwOTA4MDAzQzAxMDgwMDNECi06MTAzRDYwMDBBQzNGMDA3NDNDMDEwODAwQUMzOTAwNzBBRjQ5MDE3OEU5Ci06MTAzRDcwMDA5MzU4MDEwOEEzOTgwMDNFOTM4RjAwM0UzMUVFMDAwMTU2Ci06MTAzRDgwMDAxNUMwMDAxNThGODMwMDM4MjQwRTBEMDAxMDZFMDAxOTI5Ci06MTAzRDkwMDAyNDBGMEYwMDEwNkYwMDFEMDAwMDAwMDA5MTU5MDAwMDVCCi06MTAzREEwMDAyNDE4MDA1MDMzMjkwMEZGMTEzODAwMDQzQzFGNDAwMDQ0Ci06MTAzREIwMDBBRjVGMDEzODBBMDAwMkU3MDAwMDAwMDAwRTAwMDhFRUM1Ci06MTAzREMwMDAwMDAwMDAwMDhGOEEwMDQwM0MxRjQwMDBBRjVGMDEzOEI4Ci06MTAzREQwMDAwQTAwMDJFNzAwMDAwMDAwOTM4RDAwM0UzMUFDMDAwNkFGCi06MTAzREUwMDAwMDBDNTEwMDBFMDAwMENFMDE1MkQ4MjEwQTAwMDM0M0ZFCi06MTAzREYwMDA4RjhBMDA0MDNDMUIwODAwMjc3QjNDNDgwRTAwMDBDRTA5Ci06MTAzRTAwMDAwMDAwMDAwMDBBMDAwMzQzOEY4QTAwNDAzQzFCMDgwMEFBCi06MTAzRTEwMDAyNzdCM0M2ODBFMDAwMENFMDAwMDAwMDAwQTAwMDM0MzMwCi06MTAzRTIwMDA4RjhBMDA0MDkwQUEwMDAxOEZBQjAwMTA4Q0FDMDAxMDZDCi06MTAzRTMwMDAzQzAzMDBGRjhENjgwMDA0QUQ2QzAwMjA4Q0FEMDAxNEM1Ci06MTAzRTQwMDAwMEUwNjAyMTM0NjJGRkZGQUQ2RDAwMjQ4Q0E3MDAxOEY0Ci06MTAzRTUwMDAzQzA5RkYwMDAxMDlDMDI0QUQ2NzAwMjg4Q0FFMDAxQzlFCi06MTAzRTYwMDAwMTgyQzgyNDAzMTk3ODI1QUQ2RjAwMDRBRDZFMDAyQ0MzCi06MTAzRTcwMDA4Q0FEMDAwODMxNEEwMEZGQUQ2RDAwMUM5NEE5MDAwMjEyCi06MTAzRTgwMDAzMTI4RkZGRkFENjgwMDEwOTBBNzAwMDBBNTYwMDAwMjc4Ci06MTAzRTkwMDBBMTYwMDAwNEExNjcwMDAwOTBBMzAwMDIzMDYyMDBGRjRGCi06MTAzRUEwMDAwMDAyMTk4MjEwNjAwMDA1MjQwNTAwMDExMDY1MDAwRTUzCi06MTAzRUIwMDAwMDAwMDAwMDAzRTAwMDA4QTE2QTAwMDE4Q0Q4MDAyODdGCi06MTAzRUMwMDAzNTRBMDA4MEFENzgwMDE4OENDRjAwMTRBRDZGMDAxNDE3Ci06MTAzRUQwMDA4Q0NFMDAzMEFENkUwMDA4OENDNDAwMkNBMTZBMDAwMUFECi06MTAzRUUwMDAwM0UwMDAwOEFENjQwMDBDOENDRDAwMUNBRDZEMDAxODIzCi06MTAzRUYwMDA4Q0M5MDAxNEFENjkwMDE0OENDODAwMjRBRDY4MDAwODlBCi06MTAzRjAwMDA4Q0M3MDAyMEFENjcwMDBDOENDMjAwMTQ4QzgzMDA2NDQ5Ci06MTAzRjEwMDAwMDQzQzgyQjEzMjAwMDA3MDAwMDAwMDA4Q0MyMDAxNENGCi06MTAzRjIwMDAxNDRDRkZFNDAwMDAwMDAwMzU0QTAwODAwM0UwMDAwODY0Ci06MTAzRjMwMDBBMTZBMDAwMThDODIwMDY0MEEwMDAzOTkwMDAwMDAwMDVECi06MTAzRjQwMDA5MEFBMDAwMDI3QkRGRkY4OEZBOTAwMUNBM0FBMDAwMEJCCi06MTAzRjUwMDA4RkFFMDAwMDNDMEZGRjgwOEZBODAwMTgzNUUyRkZGRkY2Ci06MTAzRjYwMDA4Q0NEMDAyQzAxQzI2MDI0QUZBQzAwMDBBMTIwMDAwNDY1Ci06MTAzRjcwMDAwMEUwNjAyMUE3QTAwMDAyOEZCODAwMDA4RDI3MDAwNDk4Ci06MTAzRjgwMDAwMTg4MTgyMTAwQTA1ODIxMDBDMDUwMjEwMDZEMjgyNjZBCi06MTAzRjkwMDAzQzA2RkY3RjNDMEYwMEZGMkNBRDAwMDEzNUVFRkZGRjFDCi06MTAzRkEwMDAzNEQ5RkZGRjNDMDJGRjAwMDMxOTMwMjQwMDBEMURDMDZGCi06MTAzRkIwMDAwMTBFQzgyNDAwRTJDMDI0MDBDMzcwMjUwMzE5NzgyNTJGCi06MTAzRkMwMDBBRDJFMDAwMEFEMkYwMDA0OEQ0NTAwMjRBRkFFMDAwMEUzCi06MTAzRkQwMDBBRDI1MDAwODhENEQwMDIwMjQwNUZGRkZBRDJEMDAwQzAwCi06MTAzRkUwMDA5NTY4MDAwMjMxMDdGRkZGQUQyNzAwMTA5MTY2MDAxOEE5Ci06MTAzRkYwMDAzMEMyMDBGRjAwMDIxOUMyNTA2MDAwMDE4RDQ1MDAzNDNDCi06MTA0MDAwMDBBRDI1MDAxNDhENjcwMDA4MjdCRDAwMDhBRDI3MDAxQ0YyCi06MTA0MDEwMDA4QzhCMDBDQ0FEMkMwMDI4QUQyMDAwMkNBRDJCMDAyNEM3Ci06MTA0MDIwMDBBRDIwMDAxODAzRTAwMDA4QUQyMDAwMjAyN0JERkZFMDEwCi06MTA0MDMwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQzlBCi06MTA0MDQwMDA5MDk4MDAwMDAwQzA4ODIxM0MwRDAwRkYzMzBGMDA3RkQ2Ci06MTA0MDUwMDBBMENGMDAwMDkwOEUwMDAxMzVBQ0ZGRkYzQzBBRkYwMEFFCi06MTA0MDYwMDBBMENFMDAwMTk0QTYwMDFFQTIyMDAwMDQ4Q0FCMDAxNDc4Ci06MTA0MDcwMDA4RTI5MDAwNDAwQTA4MDIxMDE2QzI4MjQwMTJBNDAyNEZDCi06MTA0MDgwMDAwMDgwOTAyMTAxMDUyMDI1QTYyNjAwMDJBRTI0MDAwNDEwCi06MTA0MDkwMDAyNjA1MDAyMDI2MjQwMDA4MEUwMDAwNzYyNDA2MDAwMkQzCi06MTA0MEEwMDA5MjQ3MDAwMDI2MDUwMDI4MjYyNDAwMTQwMDA3MUUwMDYxCi06MTA0MEIwMDAwMDAzMTYwMzI0MDYwMDA0MDQ0MDAwMDMyNDAzRkZGRjRBCi06MTA0MEMwMDA5NjU5MDAwMjMzMjNGRkZGMEUwMDAwNzZBRTIzMDAxMDQ2Ci06MTA0MEQwMDAyNjI0MDAyNDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDVCCi06MTA0MEUwMDA4RkIwMDAxMDI0MDUwMDAzMDAwMDMwMjEwQTAwMDA4MDdBCi06MTA0MEYwMDAyN0JEMDAyMDI3QkRGRkQ4QUZCMTAwMUNBRkIwMDAxODBFCi06MTA0MTAwMDBBRkJGMDAyMDkwQTgwMDAwMjQwMjAwMDE4RkIwMDAzQzQ3Ci06MTA0MTEwMDAzMTAzMDAzRjAwODA4ODIxMTA2MjAwMTQ4RkFBMDAzODBDCi06MTA0MTIwMDAyNDBCMDAwNTUwNkIwMDE2QUZBQTAwMTAwMEEwMjAyMTQwCi06MTA0MTMwMDAwMEMwMjgyMTBFMDAwM0RDMDIwMDMwMjE5MjI0MDBCQ0M0Ci06MTA0MTQwMDAzMDgzMDAwMjEwNjAwMDAzMjYwNjAwMzBBQ0MwMDAwMDdGCi06MTA0MTUwMDAyNEM2MDAwNDhGQkYwMDIwOEZCMTAwMUM4RkIwMDAxODUwCi06MTA0MTYwMDAwMEMwMTAyMTAzRTAwMDA4MjdCRDAwMjgwMTQwMzgyMUNECi06MTA0MTcwMDAwRTAwMDM1QUFGQjAwMDEwMEEwMDA0MjAwMDAwMDAwMDM3Ci06MTA0MTgwMDAwRTAwMDNBMUFGQjAwMDE0MEEwMDA0MjAwMDAwMDAwMERDCi06MTA0MTkwMDAzQzAyMDAwQTAzNDIxODIxM0MwNDA4MDAyNDg0M0NBQzgxCi06MTA0MUEwMDAyNDA1MDAxQTAwMDAzMDIxMEEwMDAwODBBRjgzMDA1NDZCCi06MTA0MUIwMDAzQzAzODAwMDM0NjIwMDcwOEM0ODAwMDAwMEEwNTgyMTRECi06MTA0MUMwMDAwMEMwNDgyMTMwOEEwMEZGQUY4ODAwMzA4RjQ0MDE3ODVBCi06MTA0MUQwMDAwNDgwRkZGRTNDMEM4MDAwMzU4NjAwNzA4Q0M1MDAwMDFBCi06MTA0MUUwMDAzQzAzMDgwMDhDNjMwMDc0M0MxODA4MDA4RjE4MDA3MEIyCi06MTA0MUYwMDAwMEE4MjAyMzAwNjQ2ODIxMDAwMEM4MjEwMUE0NzgyQkI2Ci06MTA0MjAwMDAwMzE5NzAyMTAxQ0Y2MDIxM0MwMTA4MDBBQzJEMDA3NDFFCi06MTA0MjEwMDAzQzAxMDgwMEFDMkMwMDcwOEY0ODBFMTRBRjQ4MDE0NERDCi06MTA0MjIwMDBBRjQ3MDE0Q0EzNEEwMTUyQTc0QjAxNTg5MzQ2MDEwOERFCi06MTA0MjMwMDAzMEM1MDAwODU0QTAwMDAxMzUyOTEwMDA5MzRCMDkwMDM3Ci06MTA0MjQwMDAyNDA3MDA1MDMxNkEwMEZGMTE0NzAwMDcwMDAwMDAwMEZBCi06MTA0MjUwMDA4RjQ1MEUxQ0FGNDUwMTQ4QUY0OTAxNTQzQzA5MTAwMDgxCi06MTA0MjYwMDAwM0UwMDAwOEFGNDkwMTc4OTM0RDAxMDgzMUE4MDAwODI4Ci06MTA0MjcwMDAxMTAwMDAxMDAwMDAwMDAwOTM0RjAxMDgzMUVFMDAxMDAzCi06MTA0MjgwMDA1MUMwMDAwMTM1MjkwMDA4M0MwNDA4MDA5MDg0M0QxMDBECi06MTA0MjkwMDBBMzQ0MDE1MDhGNDMwOUE0QUY0MzAxNDg4RjQyMDlBMEIyCi06MTA0MkEwMDBBRjQyMDE0NEFGNDkwMTU0M0MwOTEwMDAwM0UwMDAwODRCCi06MTA0MkIwMDBBRjQ5MDE3ODNDMTkwODAwOEYzOTNDQ0MzMzM4MDAwOEVECi06MTA0MkMwMDA1NzAwRkZGMTM1MjkwMDA4MEEwMDA0NzMwMDAwMDAwMEMwCi06MTA0MkQwMDAyNDA3MDA0MEFGNDcwODE0QUY0MDA4MTA4RjQyMDk0NDNDCi06MTA0MkUwMDA4RjQzMDk1MDhGNDQwOTU0OEY0NTA5NUM4RjQ2MDk0QzEwCi06MTA0MkYwMDBBRjgyMDA2NEFGODMwMDUwQUY4NDAwNENBRjg1MDA1Qzk4Ci06MTA0MzAwMDAwM0UwMDAwOEFGODYwMDYwOTM0NjAxMDkzMEM1MDA3RkQ2Ci06MTA0MzEwMDAwMDA1MThDMDAwMDUyMTQwMDA4MzEwMjEwM0UwMDAwOEJCCi06MTA0MzIwMDAyNDQyMDA4ODNDMEEwODAwOTE0QTNDRDEzQzA5MDgwMDFDCi06MTA0MzMwMDA5NTI5M0NDQTNDMDUxMTAwMDAwQTNDMDAyNTI4MDAwMkQyCi06MTA0MzQwMDAwMEU4MzAyNTAwQzUxODI1MjQ4MjAwMDhBQzgzMDAwMDUxCi06MTA0MzUwMDAwM0UwMDAwOEFDODAwMDA0OEY0QTAwMkM5NzRFMDkwODQ3Ci06MTA0MzYwMDAzQzBGMDAwRTAzNEYzODIxMzFDREZGRkYwMDBENDFDMDNGCi06MTA0MzcwMDBBRjQ4MDAyQzk3NDMwOTA4OTRFQzAwMUEwMDgwNDAyMUI0Ci06MTA0MzgwMDAyNDAyMDAwMTMxOEJGRkZGQUM4QjAwMDA4Q0U5MDAxQzg0Ci06MTA0MzkwMDAwMEEwNTgyMTAwQzA2MDIxQUM4OTAwMDQ4Q0U0MDAyMEZBCi06MTA0M0EwMDBBRDA0MDAwODkwRTMwMDE5MzA2MzAwMDMxMDYyMDA0MDgwCi06MTA0M0IwMDAwMDAwMDAwMDI4NjUwMDAyMTRBMDAwNzMyNDA2MDAwMjFCCi06MTA0M0MwMDAxMDY2MDA0RTAwMDAwMDAwMjQxODAwMDMxMDc4MDA1NzBCCi06MTA0M0QwMDAwMDAwMDAwMDNDMDkwODAwOTUyOTNDQzA5MzQ1MDkzNEMxCi06MTA0M0UwMDA5MzQ2MDkyMTNDMEUwODAwOTVDRTNDQzYzMEEyMDBGRjQyCi06MTA0M0YwMDAwMDAyQzg4Mjk0RTUwMDJBMzBDNDAwRkY5Nzg3MDA1ODY1Ci06MTA0NDAwMDAwMDE5QzYwMDAwMDQxQzAwMzEyRkZGRkYwMzAzMTAyNTE0Ci06MTA0NDEwMDAwMUNGNjgyMTAwNERDODI1MDBBNzIwMjEzQzA2NDAwMDlGCi06MTA0NDIwMDAwMzI2QzAyNTAwMDQ0QzAwQUQwOTAwMDRBRDE4MDAwMEFGCi06MTA0NDMwMDA5MzRGMDkyMDNDMDMwMDA2MjUwOTAwMTQwMDBGNzYwMDY1Ci06MTA0NDQwMDAwMUMzNjgyNUFEMEQwMDA4OEY0MjA5MkMyNEU1MDAwMTQ5Ci06MTA0NDUwMDAzMEE2N0ZGRkFEMDIwMDBDOEY1OTA5MzAyNTAyMDAyOERECi06MTA0NDYwMDBBNzg2MDA1OEFEMTkwMDEwOEY0NDA5MzhBRDA0MDAxNDE4Ci06MTA0NDcwMDBBRDJCMDAwNDhGNTgwOTQwQUQzODAwMDg5MzRGMDkzNzIxCi06MTA0NDgwMDAzQzBEMDgwMDkxQUQzQ0QwQUQyMDAwMTAzMUVFMDBGRjk2Ci06MTA0NDkwMDAwMUNDMTgyMTAwMDM2NzAwMDAwRDQ0MDAwMTg4NTgyNTU1Ci06MTA0NEEwMDAzNTY3RkZGRkFEMjcwMDBDMDNFMDAwMDhBRjRBMDAyQzgyCi06MTA0NEIwMDAzQzA5MDgwMDk1MjkzQ0MwM0MwNTA4MDA5NEE1M0NDQTZECi06MTA0NEMwMDAzQzBGMDgwMDk1RUYzQ0JDOTRFNDAwMjQzMTI2RkZGRjJDCi06MTA0NEQwMDAwMEE2NzAyMTAxQ0Y2ODIzMDAwNDFDMDAyNUEyRkZGMjcyCi06MTA0NEUwMDAwMDYyQzgyNTI0MTgwODAwQUQxOTAwMENBRDE4MDAxNDhFCi06MTA0NEYwMDBBRDAwMDAxMDBBMDAwNEM4MjUwODAwMTg5NEU2MDAyNDQ2Ci06MTA0NTAwMDA5NEU1MDAyODNDMDkwODAwOTUyOTNDQzAwMDA2N0MwMDgxCi06MTA0NTEwMDAwMDA1NzQwMDM1RUQ4MTAwMzVDNDA4MDBBRDBEMDAwQ0I4Ci06MTA0NTIwMDBBRDA0MDAxMDBBMDAwNEM4MjUwODAwMTQzQzA5MDgwMDY2Ci06MTA0NTMwMDA5NTI5M0NDMDNDMDIwODAwOTQ0MjNDQ0EzQzA2MDgwMDU1Ci06MTA0NTQwMDA5NEM2M0NCQzk0RTQwMDI0MzEyNUZGRkY5NEY4MDAyODc1Ci06MTA0NTUwMDAwMDQ1QzgyMTAzMjY3ODIzMDAxODFDMDAwMDA0NkMwMEM1Ci06MTA0NTYwMDAyNUVFRkZFRTAwNkVDODI1MzVBMjgxMDAyNDE4MDgwMDU0Ci06MTA0NTcwMDBBRDAyMDAwQ0FEMTkwMDEwQUQxODAwMThBRDAwMDAxNDBDCi06MTA0NTgwMDAwQTAwMDRDODI1MDgwMDFDMTQ2MEZGOTIwMDAwMDAwMDA3Ci06MTA0NTkwMDA5NEUzMDAyNDNDMDkwODAwOTUyOTNDQzAwMDAzMTQwMDYyCi06MTA0NUEwMDAzNDU5MDgwMEFEMTkwMDBDMEEwMDA0QzgyNTA4MDAxMDkxCi06MTA0NUIwMDAwM0UwMDAwODI0MDIwMUY0MjdCREZGRThBRkIwMDAxMEJCCi06MTA0NUMwMDBBRkJGMDAxNDBFMDAwMDYwMDA4MDgwMjEyNDA1MDA0MDcxCi06MTA0NUQwMDBBRjQ1MDgxNDhGODMwMDUwOEY4NDAwNEM4Rjg1MDA1QzlBCi06MTA0NUUwMDAwMDcwMTgyMTAwNjQxMDIzMTg0MDAwMDRBRjgzMDA1MEFECi06MTA0NUYwMDBBRjYzMDA1NDhGNjYwMDU0QUY4NjAwNEMxMjAwMDAwQzZECi06MTA0NjAwMDAwMDAwMDAwMDhGNDQwMDc0OTM2ODAwODEzNDA5RkEwMEIwCi06MTA0NjEwMDAyRDA3MDAwNzEwRTAwMDA1MDA4OTEwMjE5MzZDMDA4MTMwCi06MTA0NjIwMDAyNDBCMDFGNDAxOEI1MDA0MDE0NDEwMjFBRjYyMDAwQ0YzCi06MTA0NjMwMDA4RjRFMDk1QzAxQzU2ODIzMTlBMDAwMDQ4RkJGMDAxNEM4Ci06MTA0NjQwMDA4RjRGMDk1Q0FGOEYwMDVDOEZCRjAwMTQ4RkIwMDAxMERDCi06MTA0NjUwMDAwQTAwMDA2MjI3QkQwMDE4OEY4NDAwNjQ4RjgzMDA1MDE5Ci06MTA0NjYwMDA4RjgyMDA0Q0FGNjQwMDQ0QUY2MzAwNTAwM0UwMDAwODQ5Ci06MTA0NjcwMDBBRjYyMDA1NDNDMDM4MDAwMzQ2MjAwNzA4QzQzMDAwMDQxCi06MTA0NjgwMDAyN0JERkZGODMwODcwMEZGMzBBOTAwRkYzMEM4MDBGRkNBCi06MTA0NjkwMDBBRjgzMDAzMDhGNDQwMTc4MDQ4MEZGRkUzQzAyODAwMDJECi06MTA0NkEwMDAzNDU5MDA3MDhGMzgwMDAwQTNBNzAwMDMzQzA3MDgwMEFFCi06MTA0NkIwMDA4Q0U3MDA3NDhGQUMwMDAwM0MwNjA4MDA4Q0M2MDA3MENDCi06MTA0NkMwMDAwMzAzNzgyMzNDMEU3RkZGMDBFRkM4MjEzNUNERkZGRkE5Ci06MTA0NkQwMDAwMDAwNTAyMTAxOEQyODI0MDBDQTE4MjEwMDA4NDdDMDdECi06MTA0NkUwMDAwMzJGMjAyQjAwQTgxMDI1MDA2NEMwMjFBRkEyMDAwMERBCi06MTA0NkYwMDAzQzAxMDgwMEFDMzkwMDc0M0MwMTA4MDBBQzM4MDA3MDgzCi06MTA0NzAwMDA5MzRGMDEwQUEzQTAwMDAyM0MwRTgwRkZBM0FGMDAwMTVCCi06MTA0NzEwMDA4RkFDMDAwMDMxMkIwMDdGMzVDREZGRkYwMThENDgyNDg5Ci06MTA0NzIwMDAwMDBCNTYwMDAxMkE0MDI1MjQwNzMwMDAyNDA2RkY4MDk0Ci06MTA0NzMwMDAzQzA1MTAwMDI3QkQwMDA4QUY0ODAxNENBRjQ3MDE1NEFECi06MTA0NzQwMDBBNzQwMDE1OEEzNDYwMTUyMDNFMDAwMDhBRjQ1MDE3ODk1Ci06MTA0NzUwMDAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTA4RjY1MDA3NDM1Ci06MTA0NzYwMDAzQzA2ODAwMDMwOTAwMEZGMDBBNjIwMjUwRTAwMDA2MDZGCi06MTA0NzcwMDBBRjY0MDA3NDkzNjMwMDA1MzQ2MjAwMDgwRTAwMDA2MkE5Ci06MTA0NzgwMDBBMzYyMDAwNTAyMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMDJCCi06MTA0NzkwMDAyNDA1MDAwNTI0MDYwMDAxMEEwMDA1NkUyN0JEMDAxODQ3Ci06MTA0N0EwMDAyN0JERkZFMDNDMDM4MDAwQUZCMDAwMTBBRkJGMDAxODkyCi06MTA0N0IwMDBBRkIxMDAxNDM0NjIwMDcwOEM0NzAwMDAzMDkwMDBGRkVECi06MTA0N0MwMDAzMEE4MDBGRkFGODcwMDMwOEY0NDAxNzgwNDgwRkZGRURGCi06MTA0N0QwMDAzQzE4ODAwMDM3MTEwMDcwOEUyRjAwMDAzQzBEMDgwMDNGCi06MTA0N0UwMDA4REFEMDA3NDNDMEEwODAwOEQ0QTAwNzAwMUU3NzAyMzBCCi06MTA0N0YwMDAwMUFFMjgyMTAwMDA1ODIxMDBBRTMwMkIwMTRCNDgyMThBCi06MTA0ODAwMDAwMTI2MzgyMTNDMDEwODAwQUMyNTAwNzQwMDAwODgyMUY1Ci06MTA0ODEwMDAzQzAxMDgwMEFDMjcwMDcwMTEwMDAwMEYwMDAwMDAwMEYwCi06MTA0ODIwMDA4RjYyMDA3NDI2MTlGRkZGMzIwODAwN0YwMDAyRkUwMjJCCi06MTA0ODMwMDAzM0U1MDA3RjE1MDAwMDA2MzMyMjAwRkYyNDA3RkY4MEM4Ci06MTA0ODQwMDAwMjA3MjAyNjI0QTNGRkZGMDA4MzgwMjUzMjAyMDBGRkY5Ci06MTA0ODUwMDAwMDQwODAyMTI0MTExMDA4MEUwMDAwNjAwMDAwMDAwMEJDCi06MTA0ODYwMDA4RjQ5MDgxODMxMjUwMDA0MTRBMEZGRkQzMjE4MDA3RjdECi06MTA0ODcwMDAwMDE4NzhDMDAwMTg3MTQwMDFDRjY4MjEyNUFDMDA4ODZECi06MTA0ODgwMDBBRjRDMDgxODI3NEEwOTgwOEQ0QjAwMjBBRjRCMDE0NERDCi06MTA0ODkwMDA4RDQ2MDAyNEFGNDYwMTQ4QTM1MDAxNTAwRTAwMDA2MjJGCi06MTA0OEEwMDBBNzQwMDE1ODAyMjAxMDIxOEZCRjAwMTg4RkIxMDAxNEJCCi06MTA0OEIwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZFOEVGCi06MTA0OEMwMDAzMDg0MDBGRkFGQkYwMDEwMEUwMDA1QjkzMEE1MDBGRjE3Ci06MTA0OEQwMDA4RjgzMDA1MDhGQkYwMDEwMzQ0NTAwNDAyNDA0RkY5MEE4Ci06MTA0OEUwMDAzQzAyMTAwMDI3QkQwMDE4QUY0MzAxNENBMzQ0MDE1MjA1Ci06MTA0OEYwMDBBRjQ1MDE1NDAzRTAwMDA4QUY0MjAxNzg5MzQzMDkzRUZECi06MTA0OTAwMDAzMDYyMDAwODEwNDAwMDBEM0MwOTAxMDEzNTI4MDgwQUZBCi06MTA0OTEwMDBBQzg4MDAwMDhGNDcwMDc0QUM4NzAwMDQzQzA2MDgwMDk4Ci06MTA0OTIwMDA5MEM2M0NEMDMwQzUwMDEwNTBBMDAwMDZBQzgwMDAwOEY2Ci06MTA0OTMwMDA4RjZBMDA2MEFDOEEwMDA4MjQ4NDAwMEMwM0UwMDAwODQxCi06MTA0OTQwMDAwMDgwMTAyMTBBMDAwNjIwMjQ4NDAwMEMyN0JERkZFODA3Ci06MTA0OTUwMDBBRkJGMDAxNEFGQjAwMDEwOTM0NjA5M0YwMEEwNTAyMTM0Ci06MTA0OTYwMDAwMDA1Mjg4MDAwODUzODIzMzBDMjAwRkYyNDAzMDAwNjlDCi06MTA0OTcwMDAzQzA5MDgwMDk1MjkzQ0M2MjRFOEZGRDgyNDA1MDAwNDFBCi06MTA0OTgwMDAxMDQzMDAzNzI0MDYwMDAyOTc1MDA5M0MzQzBGMDIwNEY0Ci06MTA0OTkwMDAwMDA2MzQwMDMyMEVGRkZGMDFDRjY4MjVBQzhEMDAwMDA5Ci06MTA0OUEwMDA5MzRDMDkzRTMxOEIwMDIwMTE2MDAwMDgwMDAwMDAwMDhDCi06MTA0OUIwMDA5MzQzMDkzNjNDMDIwMTAzMzQ1RjAzMDAzMDc5MDBGRjYyCi06MTA0OUMwMDAwMzNGQzAyNTI0MDUwMDA4QUM5ODAwMDQ5MzQzMDkzNDM0Ci06MTA0OUQwMDA5MzU5MDkyMTAwMDVGODgyMzA2MjAwRkYwMDAyQzA4MjZECi06MTA0OUUwMDAzMzJGMDBGRjAwMTg2RTAwMDAwRjc0MDAwMUFFNjAyNTI5Ci06MTA0OUYwMDAwMTg5MjAyNTNDMDk0MDAwMDA4OTgwMjVBQ0YwRkZEOEMyCi06MTA0QTAwMDA5MzQzMDkzNzhGNEYwOTQ4OEY1ODA5NDAzMDYyMDBGRkEwCi06MTA0QTEwMDAwMDRBQzgyMTAzM0Y3MDIxMDFGODYwMjMwMDBFNkYwMDk3Ci06MTA0QTIwMDAwMUE2NTAyNTMxODVGRkZGMDAxRjU4ODAwMTQ1NDgyNTBDCi06MTA0QTMwMDAwMTY4MzgyMUFEMDkwMDIwMEUwMDAwNjAyNEYwMDAyODM0Ci06MTA0QTQwMDAyNDA0MDAwNDBFMDAwMDYyQTM2NDAwM0YwMjAwMTAyMTUxCi06MTA0QTUwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxOEJFCi06MTA0QTYwMDAwQTAwMDYzMzI0MDYwMDEyMjdCREZGRDAyNDA5MDAxMEQ3Ci06MTA0QTcwMDBBRkI2MDAyOEFGQjUwMDI0QUZCNDAwMjBBRkIxMDAxNDJBCi06MTA0QTgwMDBBRkIwMDAxMDNDMDEwODAwQTAyOTNDRDBBRkJGMDAyQzAzCi06MTA0QTkwMDBBRkIzMDAxQ0FGQjIwMDE4OTc0ODA5MDgzMDk1MDBGRjZCCi06MTA0QUEwMDAzQzAyMDAwRTMxMDdGRkZGMDAwNzMxQzBBRjQ2MDAyQzZCCi06MTA0QUIwMDA5NzQ0MDkwODkzNDQwMTBCMzBCNDAwRkYwMzQyODAyMTVFCi06MTA0QUMwMDAzMDgzMDAzMDAwMDBCMDIxMTA2MDAxMDcwMDAwODgyMTExCi06MTA0QUQwMDAyNDBDMDAwNDNDMDEwODAwQTAyQzNDRDA5MzRCMDkzRTYwCi06MTA0QUUwMDAwMDBCNTYwMDAwMEEyRTAzMDRBMDAxNEIwMDAwMDAwMDNBCi06MTA0QUYwMDBBRjQwMDA0ODkzNEYwMTBCMzFFRTAwMjAxMUMwMDAwNjdCCi06MTA0QjAwMDAwMDAwMDAwMDkzNTgwOTNFMDAxODlFMDAwMDEzOTYwMzExCi06MTA0QjEwMDAwNjQwMDE2QjAwMDAwMDAwOTM0NDAxMEIzMDgzMDA0MDBECi06MTA0QjIwMDAxMDYwMDAwMzhGOTMwMDUwOEY4MjAwNTAyNDUzRkZGRkNBCi06MTA0QjMwMDA5MzQ3MDkzRTMwRTYwMDA4MTRDMDAwMDIyNDEyMDAwMzI3Ci06MTA0QjQwMDAwMDAwOTAyMTk2MTkwMDJDOTM1ODA5MzQ5MzRGMDkzNzhGCi06MTA0QjUwMDBBNzk5MDA1ODMzMEMwMEZGMzFFRTAwRkYwMjRFNjgyMTg4Ci06MTA0QjYwMDAwMDBENTg4MDAxNkM1MDIxMDE1MTQwMjEzQzAxMDgwMDhBCi06MTA0QjcwMDBBNDI4M0NDNjkyMDUwMDE4MzBBOTAwRkYwMTA5MTgyMTlECi06MTA0QjgwMDAzQzAxMDgwMEE0MjMzQ0M4OTIxMTAwMTgxNjIwMDAwMzIxCi06MTA0QjkwMDAyNDY3MDAwQTAwMDAwMDBEMjQ2NzAwMEEzMEYwRkZGRkMwCi06MTA0QkEwMDAzQzAxMDgwMEE0MjMzQ0NBM0MwMTA4MDBBNDIwM0NDMEVFCi06MTA0QkIwMDAzQzAxMDgwMEE0MjAzQ0JDMEUwMDAwOUUwMjAwMjAyMTA1Ci06MTA0QkMwMDAwRTAwMDQ5QTAwNDAyMDIxOEY0QjAwMkM5NzRBMDkwOEMwCi06MTA0QkQwMDAzQzBDMDAwRTAzNEMzODIxMzE0NUZGRkYwMDA1NDlDMDU1Ci06MTA0QkUwMDBBRjQ5MDAyQzk3NDMwOTA4OTRGMTAwMUEwMDQwNDAyMTc2Ci06MTA0QkYwMDAyNDFGMDAwMTMyMjZGRkZGQUM0NjAwMDA4Q0UyMDAxQzlGCi06MTA0QzAwMDBBRDAyMDAwNDhDRTQwMDIwQUQwNDAwMDg5MEUzMDAxOTFDCi06MTA0QzEwMDAzMDYzMDAwMzEwN0YwMEQ2Mjg2RDAwMDIxNUEwMDExQzMwCi06MTA0QzIwMDAyNDBFMDAwMjEwNkUwMTBFMjQwRjAwMDMxMDZGMDBFMzJCCi06MTA0QzMwMDAwMDAwMDAwMDNDMDkwODAwOTUyOTNDQzA5MzRFMDkzNDRGCi06MTA0QzQwMDA5MzUxMDkyMTNDMEEwODAwOTU0QTNDQzYzMUNEMDBGRjJBCi06MTA0QzUwMDA5NEY5MDAyQTAwMEQxODgyOTc4NzAwNTgzMjJDMDBGRjIzCi06MTA0QzYwMDAwMDAzMkUwMDAwMEMyNDAwMzEyNkZGRkYzMTQyRkZGRjFECi06MTA0QzcwMDAwMEE0RjgyNTAwNDY0ODIxMDNFOTc4MjUwMzI3NzAyMTgwCi06MTA0QzgwMDAzQzE4NDAwMDAxRjg2ODI1MDAwRThDMDBBRDBEMDAwMEI2Ci06MTA0QzkwMDBBRDExMDAwNDkzNEMwOTIwM0MwMzAwMDYyNTExMDAxNEJCCi06MTA0Q0EwMDAwMDBDMkUwMDAwQTMxMDI1QUQwMjAwMDg4RjQ5MDkyQzJFCi06MTA0Q0IwMDAyNEU0MDAwMTMwOUY3RkZGQUQwOTAwMEM4RjQ2MDkzMENFCi06MTA0Q0MwMDAyNTA5MDAyOEE3OUYwMDU4QUQwNjAwMTA4RjU5MDkzODA0Ci06MTA0Q0QwMDAwMTIwMzAyMUFEMTkwMDE0QUUzMzAwMDQ4RjU4MDk0MDczCi06MTA0Q0UwMDBBRTM4MDAwODkzNEYwOTM3M0MwQzA4MDA5MThDM0NEMDNCCi06MTA0Q0YwMDBBRTIwMDAxMDMxRUUwMEZGMDFEMjY4MjEwMDBEMkYwMDIwCi06MTA0RDAwMDAwMDBDMUMwMDAwQTMxMDI1MzQ0N0ZGRkZBRTI3MDAwQzQ5Ci06MTA0RDEwMDBBRjRCMDAyQzkzNEIwOTNFMzE3MzAwMDgxMjYwMDAwRDFECi06MTA0RDIwMDAzQzBGMDEwMTM1RTcwODBBQUQwNzAwMjg4RjRCMDA3NERFCi06MTA0RDMwMDBBRDJCMDAwNDNDMTMwODAwOTI3MzNDRDAzMjY4MDAxMDg1Ci06MTA0RDQwMDA1MTAwMDAwM0FEMjAwMDA4OEY3ODAwNjBBRDM4MDAwOEU2Ci06MTA0RDUwMDAyNTI2MDAwQzEyQzAwMDM4MDAwMDAwMDA5MzVGMDkzRkI4Ci06MTA0RDYwMDAyNDE2MDAwNjI0MDcwMDA0MzNGOTAwRkYxMzM2MDBEMjhFCi06MTA0RDcwMDAyNDA4MDAwMjk3NDMwOTNDM0MwQzAyMDQzMDY0RkZGRjA2Ci06MTA0RDgwMDAwMDhDMjgyNUFDQzUwMDAwOTM0MjA5M0UzMDQ5MDAyMDI0Ci06MTA0RDkwMDAxMTIwMDAwODAwMDAwMDAwOTM0QjA5MzYzQzEzMDEwMzZBCi06MTA0REEwMDAzNjZFMDMwMDMxNkQwMEZGMDFBRTg4MjVBQ0QxMDAwNEUyCi06MTA0REIwMDAyNDA3MDAwODkzNDkwOTM0OTM1OTA5MjEzMTRCRkZGRjE3Ci06MTA0REMwMDAzMTNGMDBGRjAwMUZCMDgyMzMzODAwRkYwMDE2NTYwMDRECi06MTA0REQwMDAwMDE4N0MwMDAxNEY5ODI1MDAxMjI4ODAwMjZCNjgyNTdFCi06MTA0REUwMDAzQzBFNDAwMDAwQzU1MDIzMDFBRTg4MjVBRDUxRkZEOEQwCi06MTA0REYwMDA5MzQzMDkzNzhGNUYwOTQ4OEY0OTA5NDAzMDZDMDBGRkEyCi06MTA0RTAwMDAwMTkyMTAyMTAwMDcyMDgyMDA0NEM4MjEwM0U5NzgyMzgxCi06MTA0RTEwMDAwMDE5QzcwMDAwMDhCNDAwMDMxNjQwMjUzMUU3RkZGRjYyCi06MTA0RTIwMDAwMTA3MzAyNTBFMDAwMDYwQUQ0NkZGRjgyNDEyMDAwNDkzCi06MTA0RTMwMDAwRTAwMDA2MkEzNzIwMDNGMEUwMDAwQzcwMjAwMjAyMTk2Ci06MTA0RTQwMDAzQzEyMDgwMDkyNTIzQ0QwMzI1MDAwMDMxMjAwMDAwRjc2Ci06MTA0RTUwMDAwMkEwMjAyMThGODIwMDUwMjQ0NzAwMDFBRjg3MDA1MDFDCi06MTA0RTYwMDBBRjY3MDA1MDhGNjgwMDU0MDEwNzMwMjMxOEMwMDAwMjVDCi06MTA0RTcwMDAwMEUwMjAyMThGNjQwMDU0QUY2NDAwNTQ4RjRDMDA3NDE0Ci06MTA0RTgwMDAyNTg0MDFGNEFGNjQwMDBDMDJBMDIwMjEwMjgwMjgyMUI3Ci06MTA0RTkwMDBBNzYwMDA2ODBFMDAwNUI5M0MxNDEwMDA4RjhEMDA1MDBCCi06MTA0RUEwMDAzNDU1MDAwNkFGNEQwMTRDOEY5MTAwNDg4RkJGMDAyQzQ4Ci06MTA0RUIwMDA4RkI2MDAyODI2MjMwMDAxQUY4MzAwNDg4RkIzMDAxQzYzCi06MTA0RUMwMDBBMzUxMDE1MjhGQjIwMDE4QUY1NTAxNTQ4RkIxMDAxNDk1Ci06MTA0RUQwMDBBRjU0MDE3ODhGQjUwMDI0OEZCNDAwMjA4RkIwMDAxMDNDCi06MTA0RUUwMDAwM0UwMDAwODI3QkQwMDMwOTM1ODA5M0UwMDE4OUUwMERCCi06MTA0RUYwMDAwMDEzOTYwMzA2NDIwMDUxMjQxMTAwMDI5MzQ0MDkyMzMzCi06MTA0RjAwMDAzMDgzMDAwMjEwNjBGRUZCOEY4NjAwNjA4RjgyMDA1MEFECi06MTA0RjEwMDAxNEMyRkVGODAwMDAwMDAwMEUwMDAwNjAwMDAwMDAwMDU3Ci06MTA0RjIwMDA5MzY5MDAzRjI0MDcwMDE2MzEyODAwRkYxMTA3MDAwQzg5Ci06MTA0RjMwMDAyNDA1MDAwODNDMEMwODAwOTE4QzNDRDAzNThCMDAwMTA2Ci06MTA0RjQwMDAzQzAxMDgwMEEwMkIzQ0QwOTM2QTAwM0YzMTQzMDBGRjk2Ci06MTA0RjUwMDAxMDY1MDA2NTI0MEQwMDBBMTA2RDAwNUUyNDAyMDAwQzJGCi06MTA0RjYwMDAwRTAwMDA2MjAwMDAwMDAwMEEwMDA2OEUwMDAwMDAwMDMzCi06MTA0RjcwMDAzQzA5MDgwMDk1MjkzQ0MwM0MwNDA4MDA5NDg0M0NDQUM0Ci06MTA0RjgwMDAzQzFGMDgwMDk3RkYzQ0JDOTRGODAwMjQzMTIzRkZGRjJFCi06MTA0RjkwMDAwMDgzQzgyMTAzM0Y3ODIzMDAxODZDMDAyNUVFRkZGMjQwCi06MTA0RkEwMDAwMUFFNjAyNTI0MEEwODAwQUQwQzAwMENBRDBBMDAxNDA3Ci06MTA0RkIwMDBBRDAwMDAxMDBBMDAwNkUwMjUwODAwMTgzQzA5MDgwMEIyCi06MTA0RkMwMDA5NTI5M0NDMDNDMUYwODAwOTdGRjNDQ0EzQzE5MDgwMENCCi06MTA0RkQwMDA5NzM5M0NCQzk0RUYwMDI0MzEyNEZGRkY5NEVFMDAyODY1Ci06MTA0RkUwMDAwM0U0QzAyMTAzMTk2ODIzMDAwRjJDMDAwMDBFNTQwMEI1Ci06MTA0RkYwMDAyNUFDRkZFRTAxNEM4ODI1MzRBMjgxMDAyNDA2MDgwMDcwCi06MTA1MDAwMDBBRDAyMDAwQ0FEMTEwMDEwQUQwNjAwMThBRDAwMDAxNDhCCi06MTA1MDEwMDAwQTAwMDZFMDI1MDgwMDFDOEY2RTAwODQ4RjREMDk0MEIxCi06MTA1MDIwMDAxMUEwRkVCM0FGOEUwMDUwMjQwRjAwMTQzQzAxMDgwMDA1Ci06MTA1MDMwMDBBMDJGM0NEMDBBMDAwNjhEMDAwMDAwMDAzQzAxMDgwMEIzCi06MTA1MDQwMDBBMDMxM0NEMDkzNUYwOTNFMjQxNjAwMDEzM0Y5MDAyMEMzCi06MTA1MDUwMDAxNzIwRkVBODI0MTEwMDA4MEEwMDA2OEUyNDExMDAwNDVGCi06MTA1MDYwMDA5NEU1MDAyNDk0RjEwMDI4M0MwOTA4MDA5NTI5M0NDMEVGCi06MTA1MDcwMDAwMDA1MTQwMDAwMTEzNDAwMzQ0NDgxMDAzNEMzMDgwMERBCi06MTA1MDgwMDBBRDA0MDAwQ0FEMDMwMDEwMEEwMDA2RTAyNTA4MDAxNDcyCi06MTA1MDkwMDAxNDYwRkVFODAwMDAwMDAwOTRGRjAwMjQzQzA5MDgwMEIyCi06MTA1MEEwMDA5NTI5M0NDMDAwMUZDQzAwMzczODA4MDBBRDE4MDAwQzEzCi06MTA1MEIwMDAwQTAwMDZFMDI1MDgwMDEwMEEwMDA3MkUyNDA4MDAxMjQ2Ci06MTA1MEMwMDA4RjdGMDA0Q0FGN0YwMDU0OEY3OTAwNTQwQTAwMDY5NzAxCi06MTA1MEQwMDBBRjc5MDA1MEEzNjIwMDNGMEUwMDAwNjIwMDAwMDAwMEE0Ci06MTA1MEUwMDAwQTAwMDY4RTAwMDAwMDAwMjQwMjAwMTQwQTAwMDgwN0NGCi06MTA1MEYwMDBBMzYyMDAzRjI3QkRGRkU4MzA4NDAwRkZBRkJGMDAxMDcwCi06MTA1MTAwMDAwRTAwMDVCOTMwQTUwMEZGOTM3ODAwN0U5Mzc5MDA3RkVCCi06MTA1MTEwMDA5MzZFMDA4MDkzNjgwMDdBMzMyRjAwRkYwMDE4NjYwMEJBCi06MTA1MTIwMDAwMDBGNkMwMDMxQ0IwMEZGMDE4RDQ4MjUwMDBCNTIwMEIxCi06MTA1MTMwMDA4RkJGMDAxMDAxMkEzODI1MzEwNjAwRkYzNDQ0NzAwMDZCCi06MTA1MTQwMDAwMEU2MjgyNTI0MDJGRjgxM0MwMzEwMDAyN0JEMDAxODNCCi06MTA1MTUwMDBBRjQ1MDE0Q0FGNDQwMTU0QTM0MjAxNTIwM0UwMDAwOEEzCi06MTA1MTYwMDBBRjQzMDE3ODI3QkRGRkQ4QUZCMjAwMThBRkIxMDAxNDJDCi06MTA1MTcwMDBBRkIwMDAxMEFGQkYwMDIwQUZCMzAwMUM5MzQyMDEwOUQ1Ci06MTA1MTgwMDAzMDg2MDBGRjMwQjAwMEZGMDAwNjE4QzIzMjA0MDAwMjczCi06MTA1MTkwMDAzMDcxMDAwMTE0ODAwMDA1MzA1MjAwRkY5MzY3MDAwNTU0Ci06MTA1MUEwMDAzMEU1MDAwODEwQTAwMDBEMzBDODAwMTAwMjQwMjAyMTlBCi06MTA1MUIwMDAwRTAwMDVBNTAyMjAyODIxMjQwNDAwMDE4RkJGMDAyMDM1Ci06MTA1MUMwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDg1Ci06MTA1MUQwMDAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjgxNTAwMDAzMkUwCi06MTA1MUUwMDAwMDAwMDAwMDkzNDMwMTA5MDAwMDI4MjEzMDYyMDA3Rjg1Ci06MTA1MUYwMDAwMDAyMjBDMDAwMDJGOTQwMDNFNDk4MjEyNjc5MDA4OENCCi06MTA1MjAwMDAwMzNCOTgyMThFNzgwMDI0OEU2RjAwMDgxMzBGMDA0NjEwCi06MTA1MjEwMDAwMDAwMDAwMDhGNjQwMDg0MjQxODAwMDIwMDA0RkQ4MjU2Ci06MTA1MjIwMDAzM0Y5MDAwMzEzMzgwMDdDMDAwMDAwMDA5MzY2MDA4MzBDCi06MTA1MjMwMDA5MzRBMDEwOTUxNDYwMDA0MzIwNTAwN0MxMEEwMDA2MDI5Ci06MTA1MjQwMDAwMDAwMDAwMDMyMDUwMDdDMTRBMDAwNTMwMjQwMjAyMTIxCi06MTA1MjUwMDAxNjIwMDAwNjMyMDQwMDAxOEU3RjAwMjQ4RjU5MDEwNEJECi06MTA1MjYwMDAxN0Y5RkZENjAwMDAyMDIxMzIwNDAwMDExMDgwMDAwQTQ3Ci06MTA1MjcwMDAwMjQwMjAyMThGNDIwOTQwOEY5MzAwNjQxMDUzMDAwNkEyCi06MTA1MjgwMDAwMDAwMDAwMDBFMDAwNjZCMDIyMDI4MjE4RjQzMDk0MDE5Ci06MTA1MjkwMDBBRjYzMDA0NDAyNDAyMDIxMEUwMDA2MDAwMjIwMjgyMUI2Ci06MTA1MkEwMDAwQTAwMDg0MDI0MDQwMDAxM0MwOTA4MDA4RDI5MDA2NDFDCi06MTA1MkIwMDAyNTI2MDAwMTNDMDEwODAwQUMyNjAwNjQxNjAwMDAxMkZGCi06MTA1MkMwMDAwMDAwMDAwMDhGNkQwMDg0M0MwRTAwQzAwMUFFNjAyNDIxCi06MTA1MkQwMDAxNTgwMDAwNTAyNDAyMDIxMEUwMDA4MEUwMjIwMjgyMTIyCi06MTA1MkUwMDAwQTAwMDg0MDI0MDQwMDAxMjQwNTAwMDQwRTAwMDU2RTk1Ci06MTA1MkYwMDAyNDA2MDAwMTAyNDAyMDIxMEUwMDA4MEUwMjIwMjgyMTcxCi06MTA1MzAwMDAwQTAwMDg0MDI0MDQwMDAxMEUwMDAwNDEyNDA0MDAwMUFBCi06MTA1MzEwMDA5MzZCMDA3RDAyMEI1MDI1MEUwMDAwNjJBMzZBMDA3RDk2Ci06MTA1MzIwMDAwQTAwMDg4MzhGNkQwMDg0OEY2NjAwNzQ4RjQ4MDEwNDIzCi06MTA1MzMwMDA4RTY3MDAyNDAwMDY0RTAyMTUwN0ZGQjYzMTI2MDA3RjU3Ci06MTA1MzQwMDA5MzZCMDA4MzI2NDQwMDAxMzA4QTAwN0YxMTQ2MDA0MzlFCi06MTA1MzUwMDAzMTYzMDBGRjU0NjRGRkIwOEY2NDAwODQyNjQ1MDAwMTcwCi06MTA1MzYwMDAzMEIxMDA3RjMwQTIwMEZGMTIyNjAwMDQyNDA1MDAwMUE2Ci06MTA1MzcwMDAwMDQwOTAyMTBBMDAwODU2MjQxMTAwMDEyNDBGRkY4MEVDCi06MTA1MzgwMDAwMjRGNzAyNDAxQ0Y5MDI2MzI0MjAwRkYwMDQwOTAyMTRFCi06MTA1MzkwMDAwQTAwMDg1NjI0MTEwMDAxMEUwMDA2NkIwMjIwMjgyMTg1Ci06MTA1M0EwMDAzMjE4MDAzMDEzMDBGRkFBMzIxMDAwODIwMjQwMjAyMTgwCi06MTA1M0IwMDAwRTAwMDVBNTAyMjAyODIxMEEwMDA4NDAyNDA0MDAwMTRGCi06MTA1M0MwMDA4RjZFMDA3NDNDMEY4MDAwMjQwNTAwMDMwMUNGOTAyNUYwCi06MTA1M0QwMDBBRjcyMDA3NDkzNzEwMDgzMjQwNjAwMDEwRTAwMDU2RTA1Ci06MTA1M0UwMDAzMjI0MDBGRjBFMDAwMDQxMjQwNDAwMDE5MzZEMDA3RDczCi06MTA1M0YwMDAwMjBENjAyNTBFMDAwMDYyQTM2QzAwN0QzQzBCMDgwMENFCi06MTA1NDAwMDA4RDZCMDA1NDI1NzAwMDAxM0MwMTA4MDBBQzMwMDA1NDQ1Ci06MTA1NDEwMDAwQTAwMDg0MDI0MDQwMDAxOEY2ODAwNzQzQzA5ODAwMEUxCi06MTA1NDIwMDAyNDA1MDAwNDAxMDkzODI1QUY2NzAwNzQ5MzYzMDA4M0U1Ci06MTA1NDMwMDAyNDA2MDAwMTBFMDAwNTZFMzA2NDAwRkYwRTAwMDA0MURFCi06MTA1NDQwMDAyNDA0MDAwMTkzNjIwMDdEMDIwMjk4MjUwRTAwMDA2MjkwCi06MTA1NDUwMDBBMzczMDA3RDBBMDAwODQwMjQwNDAwMDEzMjREMDA4MDNGCi06MTA1NDYwMDAzOUFDMDA4MDU0NkNGRjZDOEY2NDAwODQwQTAwMDhBOTdBCi06MTA1NDcwMDAyNjQ1MDAwMTI3QkRGRkM4M0MwQTAwMDhBRkJGMDAzMDI5Ci06MTA1NDgwMDBBRkI1MDAyQ0FGQjQwMDI4QUZCMzAwMjRBRkIyMDAyMEZBCi06MTA1NDkwMDBBRkIxMDAxQ0FGQjAwMDE4MDM0QUQ4MjEyNDA5MDA0MDY2Ci06MTA1NEEwMDBBRjQ5MDgxNEFGNDAwODEwOEY0MjA5NDQ4RjQzMDk1MDk4Ci06MTA1NEIwMDA4RjQ2MDk1NDhGNDcwOTVDOEY0ODA5NEM5MzQ0MDEwODczCi06MTA1NEMwMDA5MzQ1MDEwQkFGODIwMDY0MzA4NDAwRkYzMEE1MDBGRkRDCi06MTA1NEQwMDBBRjgzMDA1MEFGODYwMDRDQUY4NzAwNUMwRTAwMDgyQUY3Ci06MTA1NEUwMDBBRjg4MDA2MDE0NDAwMTc0OEZCRjAwMzBBNzYwMDA2ODZGCi06MTA1NEYwMDA5MzREMDkwMDI0MEIwMDUwM0MxNTA4MDAyNkI1M0M4ODRDCi06MTA1NTAwMDAzMUFDMDBGRjNDMTIwODAwMjY1MjNDOTgxMThCMDAwMzdFCi06MTA1NTEwMDAwMDAwMDAwMDAwMDBBODIxMDAwMDkwMjE5MzUxMDEwOTIzCi06MTA1NTIwMDA4RjlGMDA1MDI0MDQwMDEwMzIyRTAwN0YwMDBFNjhDMEIwCi06MTA1NTMwMDAwMDBFNjE0MDAxOEQyODIxMjRCNDAwODhBRjU0MDgxODYyCi06MTA1NTQwMDA4RjQ5MDEwNDhGNEEwOUE0M0MwQjAwMEUwMzRCQzAyMTc0Ci06MTA1NTUwMDAwMTJBMTAyMzNDMDEwODAwQUMyMjNDQUM4RjQzMDk1OEJGCi06MTA1NTYwMDAzQzAxMDgwMEEwMjQzQ0QwOTc0NzA5MDgwMDdGMzAyMzY1Ci06MTA1NTcwMDAzQzAxMDgwMEFDMjYzQ0IwMzBFOEZGRkYwMDA4QzlDMDgxCi06MTA1NTgwMDAzQzAxMDgwMEFDM0YzQ0Q0QUY1OTAwMkM5NzQyMDkwOEJECi06MTA1NTkwMDA5NzEwMDAyQzhFQjEwMDAwOTMwRjAwMTgwMzc0OTgyMTBGCi06MTA1NUEwMDBBNzkwMDA1OEFGOTMwMDQ0MDIyMEY4MDkzMUYwMDBGRkEzCi06MTA1NUIwMDAzMDRFMDAwMjE1QzAwMUE5MzA0RjAwMDExMUUwMDE1RDFECi06MTA1NUMwMDAwMDAwMDAwMDkzNDMwOTNFMzA2NjAwMDgxNEMwMDAwMjRBCi06MTA1NUQwMDAyNDE0MDAwMzAwMDBBMDIxOEY1ODA5QTQyNDEzMDAwMTAzCi06MTA1NUUwMDAzQzAxMDgwMEFDMzgzQ0Q4OTM0RjA5MzQ5MzUxMDkzNzNCCi06MTA1NUYwMDAzMUVDMDBGRjMyMkUwMEZGMDI4RTY4MjEwMDBEMjg4MDYyCi06MTA1NjAwMDAwMEFDNTAyMTAxNTA1ODIxM0MwMTA4MDBBNDJCM0NDODlCCi06MTA1NjEwMDAzQzAxMDgwMEE0MkEzQ0M2OTM0OTA5MzQzMTIyMDBGRjBBCi06MTA1NjIwMDAwMjAyMjAyMTI0OTAwMDEwM0MwMTA4MDBBNDMwM0NDNDU4Ci06MTA1NjMwMDAyNDA3MDAwNjhGOUYwMDUwM0MwMTA4MDBBQzI3M0NDQzlCCi06MTA1NjQwMDA4Rjg4MDA1QzhGNTkwOTU4MDAwMDgwMjEwMTFGMjgyMzkyCi06MTA1NjUwMDAwNEEwMDE1MTAzM0YyMDIzMDQ4MDAxNEYwMEE0MzAyQkZDCi06MTA1NjYwMDAxMEMwMDE1MTAwMDAwMDAwM0MwMTA4MDBBQzI1M0NCMDE2Ci06MTA1NjcwMDA4RTQyMDAwMDAwNDBGODA5MDAwMDAwMDAzMDQzMDAwMkE0Ci06MTA1NjgwMDAxNDYwMDBGMTAwNDA4ODIxMzA0NDAwMDE1NDgwMDAxMDczCi06MTA1NjkwMDA4RTQyMDAwNDNDMDkwODAwOEQyOTNDQjQzQzBBQzAwMDNECi06MTA1NkEwMDAwMTJBODAyNUFGNTAwRTAwOEY0NTAwMDAzMEFCMDAwODY2Ci06MTA1NkIwMDAxMTYwRkZGRDAwMDAwMDAwOTc0RDBFMDgyNDEwMDAwMTRFCi06MTA1NkMwMDBBNzhEMDAzQzhGNEMwRTA0QUY4QzAwMzQ4RTQyMDAwNDNBCi06MTA1NkQwMDAwMDQwRjgwOTAwMDAwMDAwMDIyMjg4MjUzMjJFMDAwMjU2Ci06MTA1NkUwMDAxNUMwMDE2RjAwMDAwMDAwM0MwOTA4MDA5NTI5M0NCQzcyCi06MTA1NkYwMDAzQzA2MDgwMDk0QzYzQ0M4M0MwNDA4MDA5NDg0M0NCRUE4Ci06MTA1NzAwMDAzQzE4MDgwMDhGMTgzQ0I0MDEyNjU4MjEzQzBGMDgwMEIzCi06MTA1NzEwMDA4REVGM0NEODNDMUYwODAwOTdGRjNDRDIwMTY0MTgyMTU0Ci06MTA1NzIwMDA4RjREMDk0MDAzMDlDODIxMjQ2RTAwMDIwMzNGMjgyMTQwCi06MTA1NzMwMDAwMUY4NjAyMTNDMDEwODAwQTQyQjNDQ0FBRjhEMDA2NDM1Ci06MTA1NzQwMDAzQzAxMDgwMEFDMkMzQ0Q4M0MwMTA4MDBBNDI1M0NDMDFFCi06MTA1NzUwMDAwRTAwMDA5RTMxQzRGRkZGOEY4NzAwNDgwMDQwMjAyMUNCCi06MTA1NzYwMDAzQzAxMDgwMEEwMjczQ0QxOEU0MjAwMDgyNEU4MDAwMTNCCi06MTA1NzcwMDBBRjg4MDA0ODAwNDBGODA5MDAwMDAwMDA4RjRCMDAyQzYzCi06MTA1NzgwMDA5NzQ5MDkwODNDMEEwMDBFMDM0QTM4MjEzMTI0RkZGRkRCCi06MTA1NzkwMDAwMDA0MTlDMDhGOEEwMDUwQUY0MzAwMkM5NzQzMDkwOEJBCi06MTA1N0EwMDA5NEU2MDAxQTAwNDA0MDIxMzBERkZGRkZBQzVGMDAwMEFDCi06MTA1N0IwMDA4Q0Y5MDAxQ0FDNTkwMDA0OENGODAwMjBBQzU4MDAwODhGCi06MTA1N0MwMDA5MEVGMDAxOTMxRTMwMDAzMTA3MzAwRkIwMDAwMDAwMEFDCi06MTA1N0QwMDAyODYyMDAwMjE0NDAwMTE3MjQwNTAwMDIxMDY1MDEwOTI3Ci06MTA1N0UwMDAyNDBDMDAwMzEwNkMwMEJDMDAwMDAwMDAzQzA5MDgwMDAxCi06MTA1N0YwMDA5NTI5M0NDMDkzNUYwOTM0OTM0QzA5MjEzQzBEMDgwMDY2Ci06MTA1ODAwMDA5NUFEM0NDNjMzRjkwMEZGOTRFNTAwMkEwMDE5QzA4MjJCCi06MTA1ODEwMDAzMThGMDBGRjk3OEMwMDU4MDAxODE2MDAwMDBGNzQwMDlECi06MTA1ODIwMDAzMTI0RkZGRjAwNEUzODI1MDFBNDMwMjEwMEU2RjgyNTgxCi06MTA1ODMwMDAwMEFDQzgyMTNDMDM0MDAwMDNFM0MwMjUwMDE5NEMwMDI0Ci06MTA1ODQwMDBBRDE4MDAwMEFEMDkwMDA0OTM0RjA5MjAzQzBFMDAwNjdFCi06MTA1ODUwMDAyNTA5MDAxNDAwMEY2RTAwMDFBRTI4MjVBRDA1MDAwOEQzCi06MTA1ODYwMDA4RjQ2MDkyQzI1ODIwMDAxMzA0NzdGRkZBRDA2MDAwQ0QyCi06MTA1ODcwMDA4RjQ0MDkzMEE3ODcwMDU4MjUwNjAwMjhBRDA0MDAxMDgyCi06MTA1ODgwMDA4RjQzMDkzODAwQzAyMDIxQUQwMzAwMTRBRDJBMDAwNDY1Ci06MTA1ODkwMDA4RjVGMDk0MEFEM0YwMDA4OTM1OTA5MzczQzBFMDgwMDVGCi06MTA1OEEwMDA5MUNFM0NEMEFEMjAwMDEwMzMzODAwRkYwMzE0NzgyMTk2Ci06MTA1OEIwMDAwMDBGNjcwMDAwMEU2QzAwMDE4RDI4MjUzNEEyRkZGRjQ5Ci06MTA1OEMwMDBBRDIyMDAwQ0FGNEIwMDJDOTM0NzA5M0UzMEVBMDAwODk0Ci06MTA1OEQwMDA1MTQwMDAwRjhFNTgwMDBDM0MwMzAxMDEzNDY5MDgwQTQ2Ci06MTA1OEUwMDBBRDA5MDAyODhGNEEwMDc0QUNDQTAwMDQzQzBCMDgwMEM0Ci06MTA1OEYwMDA5MTZCM0NEMDMxNjgwMDEwNTEwMDAwMDNBQ0MwMDAwODJGCi06MTA1OTAwMDA4RjY1MDA2MEFDQzUwMDA4MjRDNDAwMEM4RTU4MDAwQ0U0Ci06MTA1OTEwMDAwMzAwRjgwOTAwMDAwMDAwM0MwRjA4MDA5NUVGM0NDQUE2Ci06MTA1OTIwMDAzQzAyMDgwMDk0NDIzQ0JFMDFFMjcwMjEyNUM0MDAwMjAyCi06MTA1OTMwMDAwRTAwMDBDNzMwODRGRkZGM0MwNjA4MDA4Q0M2M0NBQzVDCi06MTA1OTQwMDAzQzBEMDgwMDhEQUQzQ0I0MDBDRDM4MjMzQzAxMDgwMDZGCi06MTA1OTUwMDBBQzI3M0NBQzE0RTAwMDA2MDAwMDAwMDAzQzE5MDgwMDM1Ci06MTA1OTYwMDA4RjM5M0NDQzM3MkMwMDQwM0MwMTA4MDBBQzJDM0NDQzlGCi06MTA1OTcwMDAxMjAwMDA4NThGOEIwMDQ0OEY0ODBFMTA4RjkwMDA0NERBCi06MTA1OTgwMDBBRTA4MDAyMDhGNUYwRTE4QUUxRjAwMjQzQzEwMDgwMEU4Ci06MTA1OTkwMDA5NjEwM0NDMDBFMDAwMDYwMDAwMDAwMDAyNDA1MDA0MDhFCi06MTA1OUEwMDBBRjQ1MDgxNDhGODMwMDUwOEY4OTAwNEMwMDcwMTgyMTc4Ci06MTA1OUIwMDAwMDY5NTAyMzE5NDAwMDA0QUY4MzAwNTBBRjYzMDA1NEM2Ci06MTA1OUMwMDA4RjY3MDA1NEFGODcwMDRDMTIwMDAwMEMwMDAwMDAwMEVECi06MTA1OUQwMDA4RjQ0MDA3NDkzNkQwMDgxMzQwRUZBMDAyREE2MDAwN0U5Ci06MTA1OUUwMDAxMEMwMDAwNTAwOEUxODIxOTM3ODAwODEyNDAyMDFGNDc0Ci06MTA1OUYwMDAwMzAyNzgwNDAxRTQxODIxQUY2MzAwMEM4RjRDMDk1Q0FBCi06MTA1QTAwMDA4Rjk5MDA1QzAxOTkyMDIzMTg4MDAwMDMwMDAwMDAwMDlBCi06MTA1QTEwMDA4RjUwMDk1Q0FGOTAwMDVDMEUwMDAwNjIwMDAwMDAwMDM3Ci06MTA1QTIwMDA4RjhCMDA1MDhFNDgwMDEwM0MwMTA4MDBBQzJCM0NENEZBCi06MTA1QTMwMDAwMTAwRjgwOTAwMDAwMDAwM0MxRjA4MDA4RkZGM0NBQzhCCi06MTA1QTQwMDAxN0UwRkVGQzI0MDcwMDA2OEY0NTAwMjQ5NzQyMDkwODUyCi06MTA1QTUwMDA4RjhBMDA2NDhGOTQwMDUwM0MwRjAwMUY5Nzg3MDA1ODc2Ci06MTA1QTYwMDA4RjgzMDA1NDhGOTMwMDRDMzA0REZGRkYzNUVFRkY4MDQ1Ci06MTA1QTcwMDAwMEFFNDgyNDAwMEQzMUMwMzIzMjAwMTBBRjQ2MDAyNDgxCi06MTA1QTgwMDBBNDY3MDAyQ0FGNDkwMDI0QUY2QTAwNDRBRjc0MDA1MEYzCi06MTA1QTkwMDBBRjczMDA1NDU2NDAwMDdFOEVCODAwMDQzMjI0MDA0MDlDCi06MTA1QUEwMDA1NDgwMDAzMjhFQjEwMDA4OEVBQzAwMEMwMTgwRjgwOUUxCi06MTA1QUIwMDAwMDAwMDAwMDhGQkYwMDMwOEZCNTAwMkM4RkI0MDAyODhECi06MTA1QUMwMDA4RkIzMDAyNDhGQjIwMDIwOEZCMTAwMUM4RkIwMDAxODVDCi06MTA1QUQwMDAwM0UwMDAwODI3QkQwMDM4M0MwOTA4MDA5NTI5M0NDMEI4Ci06MTA1QUUwMDAzQzA0MDgwMDk0ODQzQ0NBM0MxRjA4MDA5N0ZGM0NCQzVGCi06MTA1QUYwMDA5NEY4MDAyNDMxMjNGRkZGOTRFRjAwMjgwMDgzQzgyMThECi06MTA1QjAwMDAwMzNGNzAyMzAwMTgyQzAwMDAwRjY0MDAyNUNERkZFRTJBCi06MTA1QjEwMDAwMThEMzAyNTM0QTI4MTAwMjQwMzA4MDBBRDAyMDAwQzYxCi06MTA1QjIwMDBBRDA2MDAxMEFEMDMwMDE4QUQwMDAwMTQwQTAwMDlDRTQ4Ci06MTA1QjMwMDAyNTA4MDAxQzkzNDcwMTA5OEY4ODAwMzgwMDA3RkUwMEU0Ci06MTA1QjQwMDAwM0U4QzgyNUFGNTkwMDgwOEY1ODA5QTA4RjUzMDlBNEQ2Ci06MTA1QjUwMDBBRkI4MDAxMEFGNTgwRTE0OEZCNDAwMTBBRjU0MEUxMDMxCi06MTA1QjYwMDBBRjUzMEUxQzBBMDAwOTQyQUY1MzBFMTgwMjIwRjgwOTY5Ci06MTA1QjcwMDAwMDAwMDAwMDhFQUMwMDBDMDE4MEY4MDkwMDAwMDAwMDVECi06MTA1QjgwMDAwQTAwMEE3RjhGQkYwMDMwQTU2MDAwMjBBNTczMDAyMkE1Ci06MTA1QjkwMDAwQTAwMEEzNEFENzMwMDI0M0MwMTA4MDBBQzIwM0NCMDdDCi06MTA1QkEwMDAwQTAwMDk2RThFNDIwMDAwM0MwMTA4MDBBQzI0M0NCMEEzCi06MTA1QkIwMDAwQTAwMDk2RThFNDIwMDAwM0MwOTA4MDA5NTI5M0NDMDhECi06MTA1QkMwMDAzQzFGMDgwMDk3RkYzQ0NBM0MxOTA4MDA5NzM5M0NCQ0IxCi06MTA1QkQwMDA5NEVGMDAyNDMxMjRGRkZGMDNFNEMwMjEwMzE5NzAyMzU0Ci06MTA1QkUwMDAwMDBGNjQwMDI1Q0RGRkYyMDE4RDI4MjVBQzQ1MDAwQzg3Ci06MTA1QkYwMDAyNDAyMDgwMEFEMDIwMDE0QUQwMDAwMTAwQTAwMDlDRTE2Ci06MTA1QzAwMDAyNTA4MDAxODk0RTYwMDI0OTRFMzAwMjgzQzA5MDgwMEM1Ci06MTA1QzEwMDA5NTI5M0NDMDAwMDYyNDAwMDAwM0ZDMDAzNDk5ODEwMDUzCi06MTA1QzIwMDAzN0Y4MDgwMEFEMTkwMDBDQUQxODAwMTAwQTAwMDlDRUI1Ci06MTA1QzMwMDAyNTA4MDAxNDE0NjBGRUVEMDAwMDAwMDA5NEVGMDAyNDFECi06MTA1QzQwMDAzQzA5MDgwMDk1MjkzQ0MwMDAwRjc0MDAzNUNEMDgwMEMwCi06MTA1QzUwMDBBRDBEMDAwQzBBMDAwOUNFMjUwODAwMTA5MzUyMDEwOTcxCi06MTA1QzYwMDAwMDAwMjgyMTBFMDAwNjAwMzI0NDAwRkY4RkJGMDAzMEU0Ci06MTA1QzcwMDA4RkI1MDAyQzhGQjQwMDI4OEZCMzAwMjQ4RkIyMDAyMDgyCi06MTA1QzgwMDA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDgyN0JEMDAzODVBCi06MTA1QzkwMDAwMzAwRjgwOTAwMDAwMDAwMEEwMDBBNzkzMjI0MDA0MERECi06MTA1Q0EwMDAxMjAwRkY2OTAwMDAwMDAwOEY1NDBFMTQ4RjkyMDA0NDEwCi06MTA1Q0IwMDBBRTU0MDAyMDhGNTMwRTFDMEEwMDBBNjNBRTUzMDAyNDFBCi06MTA1Q0MwMDA4RjgyMDAxQzAwODA0MDIxM0MwNDAxMDA5MDQ3MDA4NTI5Ci06MTA1Q0QwMDAzMEUzMDAyMDEwNjAwMDA5MDAwMDAwMDAzQzA3MDgwMENECi06MTA1Q0UwMDA4Q0U3M0NENDhGODMwMDE4MDBFMzIwMjMwNDgwMDAwODU1Ci06MTA1Q0YwMDA5Mzg5MDAwNDE0RTMwMDAzMDEwMDIwMjEwM0UwMDAwODVECi06MTA1RDAwMDAwMDgwMTAyMTNDMDQwMTAwMDNFMDAwMDgwMDgwMTAyMTA1Ci06MTA1RDEwMDAxMTIwMDAwQjAwNjczODIzOEY4QzAwMjAyNDA5MDAzNEU5Ci06MTA1RDIwMDA5MThCMDBCQzMxNkEwMDAyNTE0MDAwMDEyNDA5MDAzMDBGCi06MTA1RDMwMDAwMEU5NjgyQjE1QTBGRkYxMDEwMDIwMjEwMEU5MzgyM0JDCi06MTA1RDQwMDAyNDE5RkZGQzAwQjlDMDI0MDBGOTc4MjQwMEY4NzAyQjU2Ci06MTA1RDUwMDAxNUMwRkZFQTAxRTgyMDIxMzBDMjAwMDMwMDAyMTgyMzI5Ci06MTA1RDYwMDAxNEMwMDAxMjMwNjkwMDAzMDAwMDMwMjEwMEE5NzAyMTI2Ci06MTA1RDcwMDAwMUM2NjgyMTAwRUQ2MDJCMTE4MEZGRTAzQzA0MDEwMEFBCi06MTA1RDgwMDAyRDJGMDAwMTAwMDY0ODJCMDEwNTM4MjEwMUU5MzAyNEEwCi06MTA1RDkwMDAxNEMwRkZEQTI0RTRGRkZDMjQxOUZGRkMwMEI5QzAyNDdFCi06MTA1REEwMDAwMzA4MjAyMTAzRTAwMDA4MDA4MDEwMjE4RjhCMDAyMEQxCi06MTA1REIwMDAyNDA2MDAwNDkxNkEwMEJDMzE0NDAwMDQxNDgwRkZFQzA2Ci06MTA1REMwMDAwMEE5NzAyMTBBMDAwQjJEMDAwMDMwMjEyN0JERkZFODNCCi06MTA1REQwMDBBRkJGMDAxMDhGNDYwMTAwOTM0QTAxMDkzQzFGMDgwMDI1Ci06MTA1REUwMDA4RkZGMDA5MDI0MDdGRjgwMzE0RjAwRkYzMUU4MDA3RkQ0Ci06MTA1REYwMDAwMDA4NjE0MDAzRTZDODIxMDMyQ0MwMjEyNzA5MDEyMEM3Ci06MTA1RTAwMDAwMTI3NzAyNDNDMDEwODAwQTAyRjNEMTBBRjRFMDgwQzY0Ci06MTA1RTEwMDAzQzBEMDgwMDhEQUQwMDkwM0MwNDAwODAzNDgyMDAwM0VFCi06MTA1RTIwMDAwMUE2NTgyMTAxNkMxODIxMjQ2NTAxMjAzMEFBMDA3OEIwCi06MTA1RTMwMDAwMTQyNDAyNUFGNDgwODFDM0MxRjA4MDA4RkZGMDA5MDFFCi06MTA1RTQwMDA4Rjg4MDA0MDAzRTZDMDIxMzMxOTAwMDcwMzA3NDgyNDY4Ci06MTA1RTUwMDAwMzNBNzgyMUFGNDkwMDI4MjVFOTA5QzA5NTJFMDAwMkIwCi06MTA1RTYwMDAzQzBEMDgwMDhEQUQwMDhDM0MwQTA4MDA4RDRBMDA5MDY2Ci06MTA1RTcwMDAzMUNDM0ZGRjAxQTYxODIxMDAwQzU5ODAwMDZCMjgyMTZFCi06MTA1RTgwMDAwMEE3MjAyNEFGNDQwMDJDOTUyMjAwMDIzQzFGMDgwMEVDCi06MTA1RTkwMDA4RkZGMDA4QzkxMDcwMDg1MzA1OTNGRkYwM0U2NzgyMTgyCi06MTA1RUEwMDAwMDE5QzE4MDAxNDY3MDIxMDFGODY4MjEzMUNDMDA3RkMyCi06MTA1RUIwMDAzMUFCMDA3RjAxOUEyODIxMDE3QTUwMjEzQzAzMDAwQzZDCi06MTA1RUMwMDAzQzA0MDAwRTAwQTMyODIxMDE0NDEwMjEzMEU2MDAyMEVDCi06MTA1RUQwMDAyNzQ3MDk4MEFGODIwMDJDQUY4ODAwMUNBRjg5MDAyNEJGCi06MTA1RUUwMDBBRjg1MDAyMDEwQzAwMDA2QUY4NzAwMjg4RDAyMDA1MDRCCi06MTA1RUYwMDA4Q0E0MDEwQzAwNDQzMDIzMThDMDAwNzcwMDAwMDAwMDdGCi06MTA1RjAwMDA5MTBDMDA4NTI0MERGRkRGMDE4RDM4MjRBMTA3MDA4NTQ5Ci06MTA1RjEwMDA4RjhCMDAxQzhGODkwMDI0OEY4NzAwMjg4RDY1MDA0QzkzCi06MTA1RjIwMDBBRjg1MDAxODkxMkYwMDBEMzFFRTAwMjAxMUMwMDAxNzMxCi06MTA1RjMwMDAwMDAwMDAwMDI0MDkwMDAxQTM4OTAwMDRBRjgwMDAwQ0M4Ci06MTA1RjQwMDA4Q0U0MDAyNDhGODUwMDBDMjQwQTAwMDhBRjgwMDAwODMwCi06MTA1RjUwMDBBRjgwMDAxMDNDMDEwODAwQTQyQTNDQkUzQzAxMDgwMEIwCi06MTA1RjYwMDBBNDIwM0NEMjBFMDAwQjAxMDAwMDMwMjE4Rjg1MDAyNEJDCi06MTA1RjcwMDA4RkJGMDAxMEFGODIwMDE0OTBBODAwMEQyN0JEMDAxODNECi06MTA1RjgwMDAwMDA4Mzk0MjAzRTAwMDA4MzBFMjAwMDE5MTNGMDAwMkJFCi06MTA1RjkwMDAyNDE4MDAwMTMzRjkwMEZGMDAxOTIxODIxMDk4MDAzOUZDCi06MTA1RkEwMDAyNDA4MDAwMjEwODgwMDVCOEY4NjAwMkM4Q0U1MDAyNEZBCi06MTA1RkIwMDAxNEEwMDAxQjhGOUYwMDIwOTEyMjAwMDAyNDBBMDAwNURFCi06MTA1RkMwMDAzMDQ2MDAzRjEwQ0EwMDQ3MjQwNDAwMDE4Rjg2MDAwOEI1Ci06MTA1RkQwMDBBMzg0MDAwNEFGODYwMDEwQUY4NjAwMEM4Q0U0MDAyNDdDCi06MTA1RkUwMDA4Rjg1MDAwQzI0MEEwMDA4M0MwMTA4MDBBNDJBM0NCRTRFCi06MTA1RkYwMDAzQzAxMDgwMEE0MjAzQ0QyMEUwMDBCMDEwMDAwMDAwMDcwCi06MTA2MDAwMDA4Rjg1MDAyNDhGQkYwMDEwQUY4MjAwMTQ5MEE4MDAwRDcwCi06MTA2MDEwMDAyN0JEMDAxODAwMDgzOTQyMDNFMDAwMDgzMEUyMDAwMTAzCi06MTA2MDIwMDA4Q0Y4MDAwODhDRjkwMDI0OEZFRTAwQzRBMzgwMDAwNEQzCi06MTA2MDMwMDA4Q0U0MDAyNEFGOEUwMDBDOEY4NTAwMEM4Rjg2MDAwODQ2Ci06MTA2MDQwMDAwMzE5NzgyMzI0MEEwMDA4QUY4RjAwMTAzQzAxMDgwMEQwCi06MTA2MDUwMDBBNDJBM0NCRTNDMDEwODAwQTQyMDNDRDIwRTAwMEIwMTQ3Ci06MTA2MDYwMDAwMDAwMDAwMDhGODUwMDI0OEZCRjAwMTBBRjgyMDAxNDU1Ci06MTA2MDcwMDA5MEE4MDAwRDI3QkQwMDE4MDAwODM5NDIwM0UwMDAwODcxCi06MTA2MDgwMDAzMEUyMDAwMTkxMjMwMDAwMzA2MjAwM0YxMDQ0MDAyN0ZECi06MTA2MDkwMDA4Rjg1MDAyMDhDRTQwMDI0MTQ4MDAwMjEwMDAwMDAwMDgzCi06MTA2MEEwMDA4RDJFMDAxODNDMTg3RkZGOEY4NTAwMjAzNzBGRkZGRkQzCi06MTA2MEIwMDAwMUNGMTgyNEFGODMwMDA4OEY5RjAwMDg4Q0E4MDA4NEFDCi06MTA2MEMwMDAwM0U4QzgyQjE3MjAwMDAyMDNFMDIwMjE4Q0E0MDA4NEUxCi06MTA2MEQwMDAwQTAwMEJCQ0FGODQwMDA4OENBMzAxMEMwQTAwMEI5QUM5Ci06MTA2MEUwMDBBRjgzMDAxODhEMkMwMDE4OEY4NjAwMDgzQzBEN0ZGRkIxCi06MTA2MEYwMDA4Rjg5MDAyMDM1QTNGRkZGMDE4MzU4MjQyNDA0MDAwMTY5Ci06MTA2MTAwMDBBRjhCMDAxMEFEMjAwMENDQTM4NDAwMDQwQTAwMEJDOEE0Ci06MTA2MTEwMDBBRjg2MDAwQzhDQ0EwMDE0MEEwMDBCQkNBRjhBMDAwOEMyCi06MTA2MTIwMDA4Q0EzMDBDODBBMDAwQkZGQUY4MzAwMDg4Rjg0MDAyQ0VCCi06MTA2MTMwMDA4Q0FDMDA2NDhDOEQwMDE0MDE4RDU4MkIxMTYwMDAwNDEwCi06MTA2MTQwMDAwMDAwMDAwMDhDQTIwMDY0MEEwMDBCRkZBRjgyMDAwODcwCi06MTA2MTUwMDA4QzgyMDAxNDBBMDAwQkZGQUY4MjAwMDg4Rjg1MDAwQ0IwCi06MTA2MTYwMDAyN0JERkZFMEFGQkYwMDE4QUZCMTAwMTQxNEEwMDAwN0I3Ci06MTA2MTcwMDBBRkIwMDAxMDhGODYwMDI0MjQwMjAwMDU5MEM0MDAwMEY4Ci06MTA2MTgwMDAzMDgzMDAzRjEwNjIwMEI2OEY4NDAwMjA4RjkxMDAwODlBCi06MTA2MTkwMDAwMEEwODAyMThGOEMwMDI4M0MwNTA4MDA4Q0E1M0NCMDE1Ci06MTA2MUEwMDA4RDhCMDAwNDMxNjYzRkZGMDBDNTUwMkI1NTQwMDAwMTI4Ci06MTA2MUIwMDAwMEMwMjgyMTkzOEQwMDA0MTFBMDAwNzMwMEIwRjgyQkJCCi06MTA2MUMwMDA4Rjk4MDAyMDI0MDQwMDM0OTMwRjAwQkMzMUVFMDAwMkFECi06MTA2MUQwMDA1MUMwMDAwMTI0MDQwMDMwMDBBNEM4MkIxNzIwMDBEMUI2Ci06MTA2MUUwMDAwMDAwMDAwMDAwQTQyODIzMDBCMEY4MkIzQzAxMDgwMEE4Ci06MTA2MUYwMDBBNDI0M0NCQzE3RTAwMDY4MDIwMDIwMjEzQzAzMDgwMEY2Ci06MTA2MjAwMDA4QzYzM0NBQzAwODMxMDJCNTQ0MDAwMDEwMDgwMTgyMUFCCi06MTA2MjEwMDA4Rjg4MDAyNDNDMDEwODAwQUMyMzNDQjQwMDAwNDgyMUQ2Ci06MTA2MjIwMDA5MTA0MDAwRDMwODMwMDIwNTA2MDAwMDE4RjQ5MEUxODRBCi06MTA2MjMwMDA4RjgzMDAxNDAxMjMzODJCMTBFMDAwNTkwMDAwMDAwMDY4Ci06MTA2MjQwMDAzQzA0MDgwMDhDODQzQ0I0MDA4OTU4MjEwMDZCNTAyQjFFCi06MTA2MjUwMDAxMTQwMDA1NjAwOTA2MDJCMDA2OTMwMjMwMEMwMjAyMUJGCi06MTA2MjYwMDAzQzAxMDgwMEFDMjYzQ0I0MTIwMDAwMDMyNDFGRkZGQ0Q0Ci06MTA2MjcwMDAxMDkwMDA4QTMyMjcwMDAzMDA5RkM4MjQzQzAxMDgwMEM4Ci06MTA2MjgwMDBBQzM5M0NCNDNDMDEwODAwQTQyMDNDRDI4Rjg0MDAwQzAzCi06MTA2MjkwMDAxMjA0MDAwNzhGODMwMDIwQUY5MTAwMDgwMjAwMjAyMTI0Ci06MTA2MkEwMDA4QzcxMDBDQ0FGOTAwMDBDMjYzMDAwMDFBQzcwMDBDQzlCCi06MTA2MkIwMDAzQzAyMDgwMDhDNDIzQ0I0OEY4QTAwMTAyNDA3MDAxODZFCi06MTA2MkMwMDAwMDgyMjAyMzAxNDIyODIzQUY4NDAwMEMxMDgwMDAwMkFBCi06MTA2MkQwMDBBRjg1MDAxMDI0MDcwMDEwOEY4NjAwMUMzQzAxMDgwMEM5Ci06MTA2MkUwMDBBMDI3M0NEMDI0MDcwMDQwOTBDQzAwODUzMThCMDBDMDEzCi06MTA2MkYwMDAxMTY3MDA0MDhGOEQwMDE0MTRBMDAwMTUwMDAwMjAyMUFDCi06MTA2MzAwMDA5MzRBMDEwOThGNDIwOTc0MzE0NTAwRkYwMDAyMjYwMkI5Ci06MTA2MzEwMDAyNEEzMDAwMTMwOTAwMDdGMzA3MTAwN0YxMjMwMDA3QTlBCi06MTA2MzIwMDAyNDA3RkY4MEEwQzMwMDgzM0MwOTA4MDA4RDI5M0NDQ0QyCi06MTA2MzMwMDA4Rjg4MDAyNDI0MEQwMDAyMzUyQzAwMDgzQzAxMDgwMDQxCi06MTA2MzQwMDBBMDJEM0QxMTNDMDEwODAwQUMyQzNDQ0MyNDA0MDAxMEQ1Ci06MTA2MzUwMDA5MTBFMDAwRDMxQzYwMDIwMTBDMDAwMDUwMDgwMTgyMUVDCi06MTA2MzYwMDAyNDA4MDAwMTNDMDEwODAwQUMyODNDQjQzNDgzMDAwMTNGCi06MTA2MzcwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwMDYwMTAyMTgzCi06MTA2MzgwMDAwM0UwMDAwODI3QkQwMDIwM0MwMTA4MDBBNDIwM0NCQzFECi06MTA2MzkwMDAxM0UwRkY5QTAyMDAyMDIxMEEwMDBDNTAwMEEwMjAyMUU3Ci06MTA2M0EwMDAzQzA0MDgwMDhDODQzQ0I0MDA5MDYwMkIxMTgwRkZBRTRDCi06MTA2M0IwMDAwMDAwMDAwMDNDMEYwODAwOTVFRjNDQkMwMUU0NzAyMTk4Ci06MTA2M0MwMDAwMUM2NjgyQjExQTAwMDA3MkM4MjAwMDQzQzFGNjAwMDRFCi06MTA2M0QwMDA4RkY5NTQwNDMzMzgwMDNGMTcwMEZGRTUyNDAzMDA0MkNGCi06MTA2M0UwMDAyQzgyMDAwNDEwNDBGRkEwMjQwMzAwNDIwQTAwMENBRURGCi06MTA2M0YwMDA4RkJGMDAxODE1MkRGRkMwMDAwMDAwMDA4Q0RGMDA3NDU3Ci06MTA2NDAwMDAzQzAzODAwMDI0MDVGRjgwMDNFM0M4MjVBQ0Q5MDA3NDU5Ci06MTA2NDEwMDA5MEQ4MDA4NTI0MEUwMDA0MjQwNDAwMTAzMzBGMDAzRkEwCi06MTA2NDIwMDAwMUU1NDAyNUEwQzgwMDg1OEY4ODAwMjQzQzAxMDgwMEI0Ci06MTA2NDMwMDBBMDJFM0QxMTI0MDMwMDAxOTEwNjAwMEQzMEM5MDAyMDVCCi06MTA2NDQwMDAxNTIwMDAwMzAwMDAwMDAwM0MwMzA4MDA4QzYzM0NCNEVFCi06MTA2NDUwMDAzQzAxMDgwMEFDMjMzQ0FDMEEwMDBDQTUwMDAwMDAwMDg1Ci06MTA2NDYwMDA4Rjg3MDAxMDhDODgwMDg0MDBFODI4MkIxNEEwMDAwMjdECi06MTA2NDcwMDAwMEUwODgyMThDOTEwMDg0MjQwOTAwMDFBMzg5MDAwNDk0Ci06MTA2NDgwMDA4RjQ0MEUxODAyMjAyODIxMEUwMDBCMDEwMjIwMzAyMTFCCi06MTA2NDkwMDAwMjIwODAyMTBBMDAwQzM2QUY4MjAwMTQwMDA3MTgyMzY2Ci06MTA2NEEwMDAzMDY2MDAwMzNDMDEwODAwQTQyNjNDRDIxMjIwMDAwNUZGCi06MTA2NEIwMDA4RjhDMDAyMDkxOEIwMEJDMzE2QTAwMDQxNTQwMDAxNUMwCi06MTA2NEMwMDAyNENEMDAwNDNDMEYwODAwOTVFRjNDRDIwMUU0NzAyMTdDCi06MTA2NEQwMDAwMEFFMzAyQjUwQzBGRjZFOEY4NDAwMEMyQzg1MDAwNTYxCi06MTA2NEUwMDAxNEEwRkZBMzI0MDMwMDQyMzA5ODAwMDMxNzAwMDAwMjA5Ci06MTA2NEYwMDAwMDk4MTgyMzI0ODNGRkZDM0MwMTA4MDBBQzIzM0NCNDIzCi06MTA2NTAwMDAwQTAwMEM3MjAwMDAwMDAwMDBBNzU4MjQwQTAwMEM5QTMwCi06MTA2NTEwMDAwMTY3MTgyNjNDMDEwODAwQTQyRDNDRDIwQTAwMEQwMjk4Ci06MTA2NTIwMDAwMDAwMDAwMDNDMDEwODAwQUMyMDNDQjQwQTAwMENBREE3Ci06MTA2NTMwMDAyNDAzMDA0MjhGODMwMDEwMTQ2MDAwMDcwMDAwMTAyMTI0Ci06MTA2NTQwMDA4Rjg4MDAyNDI0MDUwMDA1OTEwNjAwMDAzMEM0MDBGRjU4Ci06MTA2NTUwMDAxMDg1MDAwMzAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMEI4Ci06MTA2NTYwMDA5MTBBMDAxODMxNDkwMEZGMDAwOTM5QzIxNEUwRkZGQTBFCi06MTA2NTcwMDA4Rjg1MDAxQzNDMDQwODAwOTQ4NDNDQkMzQzAzMDgwMDRDCi06MTA2NTgwMDA4QzYzM0NENDNDMTkwODAwOEYzOTNDQjQzQzBGMDgwMEE0Ci06MTA2NTkwMDA5NUVGM0NEMjAwNjRDMDIxOENBRDAwNTQwMzE5NzAyMUVBCi06MTA2NUEwMDAwMUNGNjAyMTAxOEQ1ODIzMTk2MDAwMUQwMDAwMDAwMEZCCi06MTA2NUIwMDA5MTBFMDAxQzhGOEMwMDJDOTc0QjBFMTAzMUNEMDBGRkRDCi06MTA2NUMwMDA4RDg1MDAwNDAxNkQzMDIzOEQ4ODAwMDAzMENFRkZGRkUzCi06MTA2NUQwMDAwMDBFNTEwMDAwQUFDODIxMDAwMDM4MjEwMTA3MjAyMTI3Ci06MTA2NUUwMDAwMzJBMTgyQjAwODNDMDIxQUQ5OTAwMDRBRDk4MDAwMDQ4Ci06MTA2NUYwMDA5MThGMDAwQTAxQ0Y2ODIxQTE4RDAwMEE4Rjg4MDAyQzlECi06MTA2NjAwMDA5NzRCMEUxMkE1MEIwMDA4OTUwQTAwMzgyNTQ5MDAwMThBCi06MTA2NjEwMDBBNTA5MDAzODkxMDcwMDBEMzRFNjAwMDhBMTA2MDAwRDE5Ci06MTA2NjIwMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRTA5Mzg3MDAwNDlFCi06MTA2NjMwMDA4RjhGMDAyNDhGQUQwMDE0M0MwRTdGRkY4Rjg5MDAwQ0RDCi06MTA2NjQwMDAzNUM4RkZGRkFGQkYwMDFDQUZCMDAwMTgwMUE4MTgyNDY5Ci06MTA2NjUwMDA5MUVBMDAwRDAwMDcxN0MwM0MxRkJGRkYwMDYyNTgyNURDCi06MTA2NjYwMDAyRDJFMDAwMThGOTAwMDE4MzdGOUZGRkYzQzE4MDgwMDBECi06MTA2NjcwMDA4RjE4M0NENDNDMEYwODAwOTVFRjNDQ0EwMTc5NjgyNDgwCi06MTA2NjgwMDAwMDBFNDc4MDNDMDdFRkZGM0MwNUYwRkYwMUE4MTgyNUVFCi06MTA2NjkwMDAzMTQ5MDAyMDM0RTJGRkZGMzRBQ0ZGRkYwMzEwNTgyM0UwCi06MTA2NkEwMDAyN0E1MDAxMDI0MDYwMDAyMjVFQTAwMDIwMDYyMTgyNDMzCi06MTA2NkIwMDAwMDgwODAyMTE1MjAwMDAyMDAwMDQwMjE4RjQ4MEUxQzIwCi06MTA2NkMwMDBBN0FBMDAxMjA1NjAwMDM3MjQwNzAwMDAzMEZGMDBGRjcyCi06MTA2NkQwMDAwMDFGQ0YwMDhGOEIwMDFDMDA3OTM4MjVBRkE3MDAxNDU2Ci06MTA2NkUwMDA5MTZGMDA4NTNDMDgwODAwOTEwODNDRDEzQzE4REZGRjAxCi06MTA2NkYwMDAzMUVFMDBDMDM3MEFGRkZGMDAwRTE4MkIzQzFGMDgwMEM4Ci06MTA2NzAwMDA5N0ZGM0NDNDAwRUE2ODI0QTNBODAwMTEwMDAzMTc0MEM3Ci06MTA2NzEwMDAwMUEyNDgyNThGQjkwMDEwQUZBOTAwMTQzQzBBMDgwMDU3Ci06MTA2NzIwMDA5MTRBM0NEM0E3QkYwMDE2OEZBODAwMTQwMzJDQzAyNEE1Ci06MTA2NzMwMDAzQzBCMDEwMDNDMEYwRkZGMDMwQjE4MjUzMTQ3MDAwM0YyCi06MTA2NzQwMDAzNUVFRkZGRjAxMEM2ODI0MDAwNzE2MDAwMDZFRjgyNEU4Ci06MTA2NzUwMDAzQzA5NzAwMDAxQTJDODI1MDNFOTU4MjVBRkI5MDAxNDBGCi06MTA2NzYwMDBBRkFCMDAxMDBFMDAwMDc2QTNBMDAwMTU4RjhDMDAyNEE0Ci06MTA2NzcwMDAyNjAyMDAwODkxODYwMDBEMzBDNDAwMjAxMDgwMDAwNjFCCi06MTA2NzgwMDA4RkJGMDAxQzNDMDUwODAwOTRBNTNDQzAyNEIwRkZGRjRGCi06MTA2NzkwMDAzQzAxMDgwMEE0MzAzQ0MwOEZCMDAwMTgwM0UwMDAwOEEyCi06MTA2N0EwMDAyN0JEMDAyMDhGOTgwMDE0MDExODUwMkI1NTQwRkZDN0JCCi06MTA2N0IwMDAyNDA3MDAwMTBBMDAwRDg1MzBGRjAwRkY5MzgyMDAwNENBCi06MTA2N0MwMDAyN0JERkZFMEFGQkYwMDE4MTA0MDAwMEYwMDgwNTAyMTMwCi06MTA2N0QwMDA4Rjg4MDAyNDI0MEIwMDA1OEY4OTAwMDg5MTA3MDAwMDkyCi06MTA2N0UwMDA4Rjg0MDAyMDAxMDAyODIxMzBFMzAwM0Y4Rjg2MDAyQzk5Ci06MTA2N0YwMDAxMDZCMDAwODAwMDAzODIxQUZBOTAwMTAwRTAwMDQwRTM1Ci06MTA2ODAwMDBBRkFBMDAxNEEzODAwMDA0OEZCRjAwMTgwM0UwMDAwOEEzCi06MTA2ODEwMDAyN0JEMDAyMDhEMTkwMDE4M0MwRjA4MDA4REVGM0NCNEY3Ci06MTA2ODIwMDA4Rjk4MDAxMDNDMDI3RkZGOEQwODAwMTQzNDVGRkZGRjNCCi06MTA2ODMwMDAwMzNGNjgyNDAxRjg3MDIxMDFBRTYwMjMwMTg4MzgyMUVDCi06MTA2ODQwMDBBRkE5MDAxMDBFMDAwNDBFQUZBQTAwMTQwQTAwMEREMzY5Ci06MTA2ODUwMDBBMzgwMDAwNDhGODcwMDI0M0MwNTA4MDA5NEE1M0NEMjQ3Ci06MTA2ODYwMDAzQzAyMDgwMDhDNDIzQ0NDOTBFNjAwMEQwMDA1MjQwMDYwCi06MTA2ODcwMDAzMEMzMDAyMDEwNjAwMDJDMDA0NDQwMjU4Rjg1MDAxQzkwCi06MTA2ODgwMDAwMDAwNjAyMTI0MEIwMDAxOTBBMzAwODUwMDAwNDgyMTM2Ci06MTA2ODkwMDAyNDBBMDAwMTNDMEY4MDAwMzVFRTAwNzA4REM3MDAwMDE3Ci06MTA2OEEwMDBBRjg3MDAzMDhGNTgwMTc4MDcwMEZGRkUzQzAzODAwMDVGCi06MTA2OEIwMDAzNDc5MDA3MDhGMzgwMDAwM0MwNTA4MDA4Q0E1MDA3NDA2Ci06MTA2OEMwMDAzQzBEMDgwMDhEQUQwMDcwMDMwNzc4MjMwMEFGMzgyMTIwCi06MTA2OEQwMDAwMDAwMTAyMTAwRUYzMDJCMDFBMjIwMjEwMDg2MTgyMTlBCi06MTA2OEUwMDAzQzAxMDgwMEFDMjcwMDc0M0MwMTA4MDBBQzIzMDA3MDk4Ci06MTA2OEYwMDBBRjRCMDE0ODNDMTkwODAwOEYzOTNDRDRBNzQ5MDE0NEVCCi06MTA2OTAwMDBBNzRBMDE0NkFGNTkwMTRDM0MwQjA4MDA5MTZCM0NEMUEyCi06MTA2OTEwMDBBMzRCMDE1MkFGNDgwMTU0M0MwODEwMDBBNzRDMDE1ODRBCi06MTA2OTIwMDAwM0UwMDAwOEFGNDgwMTc4OEY0QjBFMUMzQzBBMDgwMEJBCi06MTA2OTMwMDA4RDRBM0NCNDk3NDkwRTE2OTc0RDBFMTQwMTQ1NjAyMUJGCi06MTA2OTQwMDAzMTJBRkZGRjBBMDAwREY2MzFBOUZGRkY4RjgzMDAyNEQzCi06MTA2OTUwMDA5MDY0MDAwRDMwODIwMDIwMTA0MDAwMjkwMDAwMDAwMEVCCi06MTA2OTYwMDAwMDAwNDgyMTAwMDA1MDIxMDAwMDQwMjEzQzA3ODAwMDI5Ci06MTA2OTcwMDAzNEVCMDA3MDhENjcwMDAwQUY4NzAwMzA4RjRDMDE3OERBCi06MTA2OTgwMDAwNTgwRkZGRTNDMEQ4MDAwMzVBQzAwNzA4RDhCMDAwMDUzCi06MTA2OTkwMDAzQzA1MDgwMDhDQTUwMDc0M0MwNDA4MDA4Qzg0MDA3MDQxCi06MTA2OUEwMDAwMTY3MzAyMzAwQTY3ODIxMDAwMDEwMjEwMUU2QzgyQkUyCi06MTA2OUIwMDAwMDgyQzAyMTAzMTk3MDIxM0MwMTA4MDBBQzJGMDA3NDMzCi06MTA2OUMwMDAzQzAxMDgwMEFDMkUwMDcwQUY0OTAxNDgzQzBEMDgwMEE2Ci06MTA2OUQwMDA4REFEM0NENEE3NDgwMTQ0MjQwOTAwNDBBNzRBMDE0Njk0Ci06MTA2OUUwMDAzQzA4MTAwMDI0MEFGRjkxQUY0RDAxNENBMzRBMDE1MjBDCi06MTA2OUYwMDBBRjQ5MDE1NEE3NDAwMTU4MDNFMDAwMDhBRjQ4MDE3OEFGCi06MTA2QTAwMDA4RjQ5MEUxODk3NDYwRTEyOTc0NTBFMTAzMENBRkZGRjk5Ci06MTA2QTEwMDAwQTAwMEUyQzMwQThGRkZGOEY4MzAwMjQyN0JERkZGODRCCi06MTA2QTIwMDA5MDY0MDAwRDMwODIwMDIwMTA0MDAwM0EwMDAwMDAwMDA5Ci06MTA2QTMwMDAyNDBCMDAwMTAwMDA0ODIxMjQwQTAwMDEzQzA4ODAwMENBCi06MTA2QTQwMDAzNTA3MDA3MDhDRTMwMDAwQUY4MzAwMzA4RjRDMDE3ODc1Ci06MTA2QTUwMDAwNTgwRkZGRTNDMEU4MDAwM0MwNDA4MDA5MDg0M0QxMDQxCi06MTA2QTYwMDAzNUM3MDA3MDhDRUMwMDAwM0MwNTA4MDA4Q0E1MDA3NDU0Ci06MTA2QTcwMDBBM0E0MDAwMzNDMTkwODAwOEYzOTAwNzA4RkFEMDAwMEZCCi06MTA2QTgwMDAwMTgzMzAyMzAwQTYzODIxMDAwMDEwMjEwMzIyNzgyMTQxCi06MTA2QTkwMDAwMEU2QzAyQjAxRjg2MDIxMDFBRTQwMjVBRkE4MDAwMDQwCi06MTA2QUEwMDAzQzAxMDgwMEFDMjcwMDc0M0MwMTA4MDBBQzJDMDA3MENECi06MTA2QUIwMDA5MzQ2MDEwQTNDMDQwODAwOTA4NDNEMTFBM0EwMDAwMjAzCi06MTA2QUMwMDBBM0E2MDAwMThGQTMwMDAwM0MwNTgwRkYzMDk5MDA3RjQyCi06MTA2QUQwMDAzNEEyRkZGRjAwNjI3ODI0MDAxOUM2MDAwMUY4NzAyNTc3Ci06MTA2QUUwMDAyNDBEMzAwMEFGNEUwMTRDMjdCRDAwMDhBRjREMDE1NEJFCi06MTA2QUYwMDBBNzQwMDE1OEFGNEIwMTQ4QTc0OTAxNDRBNzRBMDE0NkE2Ci06MTA2QjAwMDAzQzA5MTAwMDI0MEFGRjgwQTM0QTAxNTIwM0UwMDAwODU4Ci06MTA2QjEwMDBBRjQ5MDE3ODhGNEIwRTE4OTc0NjBFMTI5NzQ1MEUxMDBECi06MTA2QjIwMDAzMENBRkZGRjBBMDAwRTYwMzBBOUZGRkY4Rjg1MDAxQ0VFCi06MTA2QjMwMDAyNDAyMDA4MDkwQTQwMDg1MzA4MzAwQzAxMDYyMDAwNTBDCi06MTA2QjQwMDA4Rjg2MDAyMDhGODgwMDA4OEY4NzAwMENBQ0M4MDBDODkzCi06MTA2QjUwMDBBQ0M3MDBDNDAzRTAwMDA4MDAwMDAwMDAzQzBBMDgwMEM1Ci06MTA2QjYwMDAyNTRBMzg5MDNDMDkwODAwMjUyOTM5NUMzQzA4MDgwMDcyCi06MTA2QjcwMDAyNTA4MkQxMDNDMDcwODAwMjRFNzNBNzAzQzA2MDgwMDYxCi06MTA2QjgwMDAyNEM2MzcwMDNDMDUwODAwMjRBNTM0NzgzQzA0MDgwMERFCi06MTA2QjkwMDAyNDg0MzBBMDNDMDMwODAwMjQ2MzM3OTgzQzAyMDgwMDlBCi06MTA2QkEwMDAyNDQyMzU2QzNDMDEwODAwQUMyQTNDOTAzQzAxMDgwMEIyCi06MTA2QkIwMDBBQzI5M0M4QzNDMDEwODAwQUMyODNDODgzQzAxMDgwMDE2Ci06MTA2QkMwMDBBQzI3M0M5NDNDMDEwODAwQUMyNjNDQTQzQzAxMDgwMEU2Ci06MTA2QkQwMDBBQzI1M0M5QzNDMDEwODAwQUMyNDNDOTgzQzAxMDgwMERFCi06MTA2QkUwMDBBQzIzM0NBODNDMDEwODAwQUMyMjNDQTAwM0UwMDAwODE4Ci06MDQ2QkYwMDAwMDAwMDAwMEExCi06MDAwMDAwMDFGRgotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBmaXJtd2FyZSBkYXRhIGRlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZAotICogc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKLSAqIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKLSAqIGFjY29tcGFueWluZyBpdC4KLSAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54Mi9ibngyLW1pcHMtMDYtNS4wLjAuajYuZncuaWhleCBiL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA2LTUuMC4wLmo2LmZ3LmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQzNzliZgotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA2LTUuMC4wLmo2LmZ3LmloZXgKQEAgLTAsMCArMSw1OTA4IEBACis6MTAwMDAwMDAwODAwMDExMDA4MDAwMDAwMDAwMDRDQzgwMDAwMDBDOEYzCis6MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwNENDOEM0Cis6MTAwMDIwMDAwMDAwMDAxNDAwMDA0RDkwMDgwMDAwODgwODAwMDAwMDQ3Cis6MTAwMDMwMDAwMDAwNThDNDAwMDA0REE0MDgwMDVBNDAwMDAwMDA4NDhECis6MTAwMDQwMDAwMDAwQTY2ODA4MDA1OEM0MDAwMDAxNTQwMDAwQTZFQzk3Cis6MTAwMDUwMDAwODAwMzFEODA4MDAwMDAwMDAwMDc1MzQwMDAwQTg0MEY2Cis6MTAwMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwNzUzNERGCis6MTAwMDcwMDAwMDAwMDAyNDAwMDExRDc0MDgwMDA0ODgwODAwMDQwMDJBCis6MTAwMDgwMDAwMDAwMTc1QzAwMDExRDk4MDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTAwMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTAwMEEwMDAwODAwMDBBODA4MDAwMDAwMDAwMDNCMzgwMDAxMzRGNEZDCis6MTAwMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MDgwMEMwMDAwMDAwMDAwMDAwMDAwMDAwMzgKKzowODAwQzgwMDBBMDAwMDQ0MDAwMDAwMDBFMgorOjEwMDBEMDAwMDAwMDAwMDAwMDAwMDAwRDYzNkY2RDM1MkUzMDJFMzBFMworOjEwMDBFMDAwNkEzNjAwMDAwNTAwMDAwMjAwMDAwMDAwMDAwMDAwMDM2NgorOjEwMDBGMDAwMDAwMDAwMTQwMDAwMDAzMjAwMDAwMDAzMDAwMDAwMDBCNworOjEwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwMDExMDAwMDAwMDAwMTAwMDAwMDEzNjAwMDBFQTYwMDAwMDAwMDU0OQorOjEwMDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDNworOjEwMDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwMDE2MDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwMDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDA1RgorOjEwMDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwMDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwMDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwMDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwMDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDMwQworOjEwMDFFMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDBBRgorOjEwMDFGMDAwMjQ0MjREMDAzQzAzMDgwMDI0NjM0REZDQUM0MDAwMDA0OQorOjEwMDIwMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDAwNQorOjEwMDIxMDAwMzdCRDdGRkMwM0EwRjAyMTNDMTAwODAwMjYxMDAxMTAyMAorOjEwMDIyMDAwM0MxQzA4MDAyNzlDNEQwMDBFMDAwMjE0MDAwMDAwMDAzQQorOjEwMDIzMDAwMDAwMDAwMEQyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTBGNQorOjEwMDI0MDAwOTc0MjAxMDgzMDQzNzAwMDI0MDIyMDAwMTA2MjAwMEIyNgorOjEwMDI1MDAwMjg2MjIwMDExNDQwMDAyRjAwMDAxMDIxMjQwMjQwMDBEOQorOjEwMDI2MDAwMTA2MjAwMjUwMDAwMDAwMDI0MDI2MDAwMTA2MjAwMjZEOQorOjEwMDI3MDAwMDAwMDEwMjEwQTAwMDA5NDhGQkYwMDE0Mjc1MDAxMDBENQorOjEwMDI4MDAwOTIwMjAwMDkxMDQwMDAxQTI0MDMwMDAxM0MwMjA4MDBGOQorOjEwMDI5MDAwOEM0MjAwMjAxMDQwMDAxNjAwMDAxODIxMEUwMDA1MkI5MworOjEwMDJBMDAwMDAwMDAwMDA5NjAzMDAwODNDMDYwODAwOTRDNjREQkVGRQorOjEwMDJCMDAwOEUwNDAwMTg4RjgyMDAyMDk2MDUwMDBDMDAwMzFDMDA5RAorOjEwMDJDMDAwMDA2NjE4MjVBQzQ0MDAwMEFDNDUwMDA0MjQwNDAwMDE3RAorOjEwMDJEMDAwQUM0MDAwMDhBQzQwMDAwQ0FDNDAwMDEwQUM0MDAwMTQzNgorOjEwMDJFMDAwQUM0MDAwMTgwRTAwMDU1MEFDNDMwMDFDMDAwMDE4MjE2MworOjEwMDJGMDAwMEEwMDAwOTMwMDYwMTAyMTBFMDAwM0JEMDAwMDAwMDAwMgorOjEwMDMwMDAwMEEwMDAwOTMwMDAwMTAyMTBFMDAwRjgxMDAwMDAwMDA4MQorOjEwMDMxMDAwMDAwMDEwMjE4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgxMAorOjEwMDMyMDAwMjdCRDAwMTgyN0JERkZFMEFGQjAwMDEwQUZCRjAwMTgxOQorOjEwMDMzMDAwQUZCMTAwMTQyNzUwMDEwMDkyMDMwMDBCMjQwMjAwMUFGMQorOjEwMDM0MDAwOTYxMTAwMDgxNDYyMDA1QjAwMDAyODIxMzIyMjAwMDE4RgorOjEwMDM1MDAwMTA0MDAwMDgwMDAwMDAwMDhFMDIwMDAwOTYwMzAwMTQwOAorOjEwMDM2MDAwMDAwMjExQzIwMDAyMTA0MDAwNUExMDIxMEEwMDAwREJGNgorOjEwMDM3MDAwQTQ0MzAwODAzQzAyMDgwMDhDNDIwMDIwMTA0MDAwMjg2QQorOjEwMDM4MDAwMDAwMDAwMDAwRTAwMDUyQjAwMDAwMDAwOTc0MjAxMDg0RAorOjEwMDM5MDAwOTc0MzAxMEM4Rjg1MDAyMDMwNDIwMDNFMzA2M0ZGRkYwMQorOjEwMDNBMDAwMDAwMjE0MDAwMDQzMTAyNUFDQTIwMDAwOEY0MjAxMDA5RgorOjEwMDNCMDAwM0MwNjA4MDA5NEM2NERCRUFDQTIwMDA0OTc0MzAxMTY0QgorOjEwMDNDMDAwOTc0NDAxMEUzQzAyMjAwMDAwMDMxQzAwMzA4NEZGRkYxNAorOjEwMDNEMDAwMDA2NDE4MjVBQ0EzMDAwODAwQzIzMDI1OTc0MjAxMTAyNAorOjEwMDNFMDAwOTc0MzAxMTIyNDA0MDAwMTAwMDIxNDAwMzA2M0ZGRkY1MAorOjEwMDNGMDAwMDA0MzEwMjVBQ0EyMDAwQzk3NDIwMTE0MzA0MkZGRkZDRAorOjEwMDQwMDAwQUNBMjAwMTA4RjQyMDExOEFDQTIwMDE0OTM0MjAxMEI2MQorOjEwMDQxMDAwMzA0MjAwRkZBQ0EyMDAxODBFMDAwNTUwQUNBNjAwMUMzNAorOjEwMDQyMDAwM0MwMjA4MDA4QzQyMDA0MDI0NDIwMDAxM0MwMTA4MDBDQworOjEwMDQzMDAwQUMyMjAwNDAzQzAzMDgwMDhDNjMwMDQ0MzIyMjAwMDJERQorOjEwMDQ0MDAwMzIyNDAwMDQyNDYzMDAwMTNDMDEwODAwQUMyMzAwNDQ3MgorOjEwMDQ1MDAwMTA4MDAwMTgwMDAyMjgyQjhGNDIwMkI4MDQ0MzAwMDhDNQorOjEwMDQ2MDAwOEUwMjAwMjAzQzAyMDgwMDhDNDIwMDYwMjQ0MjAwMDEwMQorOjEwMDQ3MDAwM0MwMTA4MDBBQzIyMDA2MDBBMDAwMEZCMjQwNTAwMDFEQQorOjEwMDQ4MDAwOTYwMzAwMTYwMDAwMjgyMUFGNDIwMjgwOEUwMjAwMDQ2RAorOjEwMDQ5MDAwQTc0MzAyODRBRjQyMDI4ODNDMDIxMDAwQUY0MjAyQjg3OAorOjEwMDRBMDAwM0MwMjA4MDA4QzQyMDA1QzI0NDIwMDAxM0MwMTA4MDAzMAorOjEwMDRCMDAwQUMyMjAwNUM4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwOQorOjEwMDRDMDAwMDBBMDEwMjEwM0UwMDAwODI3QkQwMDIwMjdCREZGRTBBOQorOjEwMDREMDAwQUZCMDAwMTBBRkJGMDAxOEFGQjEwMDE0Mjc1MDAxMDAzQgorOjEwMDRFMDAwOTIwMzAwMEIyNDAyMDAwMzk2MTEwMDA4MTQ2MjAwNkRCMQorOjEwMDRGMDAwMDAwMDIwMjEzMjIyMDAwMTEwNDAwMDA4MDAwMDAwMDAwRQorOjEwMDUwMDAwOEUwMjAwMDA5NjAzMDAxNDAwMDIxMUMyMDAwMjEwNDA4NworOjEwMDUxMDAwMDA1QTEwMjEwQTAwMDE0MkE0NDMwMDgwM0MwMjA4MDA1NgorOjEwMDUyMDAwOEM0MjAwMjAxMDQwMDAyNTAwMDAwMDAwMEUwMDA1MkIyQQorOjEwMDUzMDAwMDAwMDAwMDA5NzQyMDEwODk3NDMwMTBDOEY4NTAwMjBCRQorOjEwMDU0MDAwMzA0MjAwM0UzMDYzRkZGRjAwMDIxNDAwMDA0MzEwMjVEQworOjEwMDU1MDAwQUNBMjAwMDA4RjQyMDEwMDNDMDYwODAwOTRDNjREQkVDQworOjEwMDU2MDAwQUNBMjAwMDQ5NzQzMDExNjk3NDQwMTBFM0MwMjIwMDAwMAorOjEwMDU3MDAwMDAwMzFDMDAzMDg0RkZGRjAwNjQxODI1QUNBMzAwMDhCMgorOjEwMDU4MDAwMDBDMjMwMjU5NzQyMDExMDk3NDMwMTEyMjQwNDAwMDE1NAorOjEwMDU5MDAwMDAwMjE0MDAzMDYzRkZGRjAwNDMxMDI1QUNBMjAwMENFMgorOjEwMDVBMDAwOTc0MjAxMTQzMDQyRkZGRkFDQTIwMDEwQUNBMDAwMTQyRgorOjEwMDVCMDAwQUNBMDAwMTgwRTAwMDU1MEFDQTYwMDFDM0MwMjA4MDBDMAorOjEwMDVDMDAwOEM0MjAwNDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNDA2MworOjEwMDVEMDAwM0MwMjA4MDA4QzQyMDA0NDMyMjMwMDA0MjQ0MjAwMDEwMworOjEwMDVFMDAwM0MwMTA4MDBBQzIyMDA0NDEwNjAwMDFBMzIyMjAwMDJENAorOjEwMDVGMDAwOEY0MjAyQjgwNDQzMDAwODhFMDIwMDIwM0MwMjA4MDAyQgorOjEwMDYwMDAwOEM0MjAwNjAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNjBFMgorOjEwMDYxMDAwMEEwMDAxNzcyNDA0MDAwMTk2MDMwMDE2MDAwMDIwMjEzRgorOjEwMDYyMDAwQUY0MjAyODA4RTAyMDAwNEE3NDMwMjg0QUY0MjAyODhEOAorOjEwMDYzMDAwM0MwMjEwMDBBRjQyMDJCODNDMDIwODAwOEM0MjAwNUM1MQorOjEwMDY0MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDVDMEEwMDAxNzg1MQorOjEwMDY1MDAwOEZCRjAwMTgxMDQwMDAxMzAwMDAyMDIxOEY0MzAxMDRCOQorOjEwMDY2MDAwM0MwMjYwMjBBQzQzMDAxNDhDNDIwMDA0MjQwMzAxRkVEMQorOjEwMDY3MDAwMzA0MjAzRkYxNDQzMDAwQjAwMDAyMDIxOEY0MjAxMDA5MQorOjEwMDY4MDAwMDAwMjExQzAyNDQyRkZGQzJDNDIwMDA4MTA0MDAwMDI2RQorOjEwMDY5MDAwMjQwMzAwMDIwMDAzMUY0MDNDMDI2MDAwQUM0MzY5MTRDNQorOjEwMDZBMDAwMDAwMDIwMjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwMAorOjEwMDZCMDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwOEY0MzAxMDBDNworOjEwMDZDMDAwMjQwMjAxMDA1MDYyMDAwMzAwMDMxMUMyMDAwMDAwMEQ2QgorOjEwMDZEMDAwMDAwMzExQzIwMDAyMTA0MDAwNUExMDIxQTQ0MDAwODAwMworOjEwMDZFMDAwMDNFMDAwMDgwMDAwMTAyMTkzNjIwMDAwMDNFMDAwMDgwRQorOjEwMDZGMDAwQUY4MDAwMDAwM0UwMDAwODAwMDAxMDIxMDNFMDAwMDhDNAorOjEwMDcwMDAwMDAwMDEwMjEyNDAyMDEwMDE0ODIwMDA4MDAwMDAwMDBGMworOjEwMDcxMDAwM0MwMjA4MDA4QzQyMDBGQzI0NDIwMDAxM0MwMTA4MDAxRAorOjEwMDcyMDAwQUMyMjAwRkMwQTAwMDE5RjMwQTIwMDIwM0MwMjA4MDAxRAorOjEwMDczMDAwOEM0MjAwODQyNDQyMDAwMTNDMDEwODAwQUMyMjAwODQ2OQorOjEwMDc0MDAwMzBBMjAwMjAxMDQwMDAwODMwQTMwMDEwM0MwMjA4MDAzNgorOjEwMDc1MDAwOEM0MjAxMDgyNDQyMDAwMTNDMDEwODAwQUMyMjAxMDgzRgorOjEwMDc2MDAwMDNFMDAwMDgwMDAwMDAwMDEwNjAwMDA4MDAwMDAwMDAyNgorOjEwMDc3MDAwM0MwMjA4MDA4QzQyMDEwNDI0NDIwMDAxM0MwMTA4MDBCNAorOjEwMDc4MDAwQUMyMjAxMDQwM0UwMDAwODAwMDAwMDAwM0MwMjA4MDA2NQorOjEwMDc5MDAwOEM0MjAxMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAxMDAwRgorOjEwMDdBMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkU4QUZCRjAwMTAxNQorOjEwMDdCMDAwMjc0NDAxMDA5NDgzMDAwODMwNjIwMDA0MTA0MDAwMUJBRAorOjEwMDdDMDAwMzA2NjAwMDI4RjQyMDJCODA0NDEwMDA4MjQwNTAwMDE4RgorOjEwMDdEMDAwM0MwMjA4MDA4QzQyMDA2MDI0NDIwMDAxM0MwMTA4MDBGOQorOjEwMDdFMDAwQUMyMjAwNjAwQTAwMDFFQjhGQkYwMDEwOEM4MjAwMjA1OQorOjEwMDdGMDAwOTQ4MzAwMTYwMDAwMjgyMUFGNDIwMjgwOEM4MjAwMDRGRQorOjEwMDgwMDAwQTc0MzAyODRBRjQyMDI4ODNDMDIxMDAwQUY0MjAyQjgwNAorOjEwMDgxMDAwM0MwMjA4MDA4QzQyMDA1QzI0NDIwMDAxM0MwMTA4MDBCQworOjEwMDgyMDAwQUMyMjAwNUMwQTAwMDFFQjhGQkYwMDEwMTBDMDAwMDY3NAorOjEwMDgzMDAwMDA2MDI4MjE4RjQ0MDEwMDBFMDAwMThGMDAwMDAwMDA5RAorOjEwMDg0MDAwMEEwMDAxRUEyNDA1MDAwMThGODIwMDA4OEY0MzAxMDQ5OQorOjEwMDg1MDAwNTA0MzAwMDcwMDAwMjgyMThGNDQwMTAwMEUwMDAxOEY0MworOjEwMDg2MDAwMDAwMDAwMDA4RjQyMDEwNEFGODIwMDA4MDAwMDI4MjEzMAorOjEwMDg3MDAwOEZCRjAwMTAwMEEwMTAyMTAzRTAwMDA4MjdCRDAwMTg2MgorOjEwMDg4MDAwM0MwMjA4MDA4QzQyMDA4ODI3NDMwMTAwOTQ2NTAwMEM1QworOjEwMDg5MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDg4OEM2NDAwMTg0RQorOjEwMDhBMDAwMDM0NTEwMjE5MDQ1NDAwMEFGNDQwMDM4OEM2MjAwMUM4NQorOjEwMDhCMDAwMjQwM0ZGRjgwMDA1MkUwMDAwNDMxMDI0MzQ0MjAwMDRGNgorOjEwMDhDMDAwQUY0MjAwM0MzQzAyMDAwNUFGNDIwMDMwMDAwMDAwMDA5NworOjEwMDhEMDAwMDAwMDAwMDAwMDAwMDAwMEFGNDUwNDA0MDAwMDAwMDAxQworOjEwMDhFMDAwMDAwMDAwMDAwMDAwMDAwMDNDMDIwMDA2MzQ0MjAwMDE0RAorOjEwMDhGMDAwQUY0MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwMDkwMDAwOEY0MjAwMDAzMDQyMDAxMDEwNDBGRkZEMDAwMDEwMjExNworOjEwMDkxMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkUwQUZCMjAwMThCMAorOjEwMDkyMDAwM0MwMzYwMTBBRkJGMDAxQ0FGQjEwMDE0QUZCMDAwMTBBQgorOjEwMDkzMDAwOEM2NDUwMDAyNDAyRkY3RjNDMUE4MDAwMDA4MjIwMjQzNworOjEwMDk0MDAwMzQ4NDM4MEMyNDAyMDAzN0FDNjQ1MDAwM0MxMjA4MDA5OAorOjEwMDk1MDAwMjY1MjREMzhBRjQyMDAwODI0MDIwQzgwQUY0MjAwMjREQQorOjEwMDk2MDAwM0MxQjgwMDgzQzA2MDgwMDI0QzYwNjJDMDI0MDEwMjFDRgorOjEwMDk3MDAwMjQwNDAwMUMyNDg0RkZGRkFDNDYwMDAwMDQ4MUZGRkQxQQorOjEwMDk4MDAwMjQ0MjAwMDQzQzAyMDgwMDI0NDIwMTZDM0MwMTA4MDA5RgorOjEwMDk5MDAwQUMyMjRENDAzQzAyMDgwMDI0NDIwNDA0M0MwMTA4MDAwMworOjEwMDlBMDAwQUMyMjRENDQzQzAyMDgwMDI0NDIwN0I4M0MwMTA4MDAzOAorOjEwMDlCMDAwQUMyMjREODgzQzAyMDgwMDI0NDIwMjVDM0MwMzA4MDA0MworOjEwMDlDMDAwMjQ2MzA2MzQzQzA0MDgwMDI0ODQwNkUwM0MwNTA4MDA0NworOjEwMDlEMDAwMjRBNTNCNTAzQzAxMDgwMEFDMjI0REEwM0MwMjA4MDA3RAorOjEwMDlFMDAwMjQ0MjA1RjQzQzAxMDgwMEFDMjY0RDg0M0MwMTA4MDA3QgorOjEwMDlGMDAwQUMyNTREOTQzQzAxMDgwMEFDMjM0RDlDM0MwMTA4MDAwMworOjEwMEEwMDAwQUMyNDREQTQzQzAxMDgwMEFDMjI0REE4M0MwMTA4MDBEOAorOjEwMEExMDAwQUMyMzREM0MzQzAxMDgwMEFDMjA0RDQ4M0MwMTA4MDA5MworOjEwMEEyMDAwQUMyMDRENEMzQzAxMDgwMEFDMjA0RDUwM0MwMTA4MDA2RQorOjEwMEEzMDAwQUMyMDRENTQzQzAxMDgwMEFDMjA0RDU4M0MwMTA4MDA0RQorOjEwMEE0MDAwQUMyMDRENUMzQzAxMDgwMEFDMjA0RDYwM0MwMTA4MDAyRQorOjEwMEE1MDAwQUMyNDRENjQzQzAxMDgwMEFDMjA0RDY4M0MwMTA4MDAwQQorOjEwMEE2MDAwQUMyMDRENkMzQzAxMDgwMEFDMjA0RDcwM0MwMTA4MDBFRQorOjEwMEE3MDAwQUMyMDRENzQzQzAxMDgwMEFDMjA0RDc4M0MwMTA4MDBDRQorOjEwMEE4MDAwQUMyNjREN0MzQzAxMDgwMEFDMjY0RDgwM0MwMTA4MDBBMgorOjEwMEE5MDAwQUMyMDREOEMzQzAxMDgwMEFDMjU0RDkwM0MwMTA4MDA3OQorOjEwMEFBMDAwQUMyMzREOTgwRTAwMDZCQjAwMDAwMDAwM0MwMjgwMDAwNQorOjEwMEFCMDAwMzQ0MjAwNzA4QzQyMDAwMEFGODIwMDE0M0MwMzA4MDBGNgorOjEwMEFDMDAwOEM2MzAwMjA4RjgyMDAwNDEwNDMwMDA0M0MwMjgwMDBFRAorOjEwMEFEMDAwMEUwMDA0RjNBRjgzMDAwNDNDMDI4MDAwMzQ0NjAwNzAzMworOjEwMEFFMDAwM0MwMzA4MDA4QzYzMDBBMDNDMDIwODAwOEM0MjAwQTQ3OAorOjEwMEFGMDAwMTA0MzAwMDQ4Rjg0MDAxNDNDMDEwODAwQUMyMzAwQTRDMAorOjEwMEIwMDAwQTc0MzAwOUU4Q0NBMDAwMDNDMDMwODAwOEM2MzAwQkMxNQorOjEwMEIxMDAwM0MwMjA4MDA4QzQyMDBCODAxNDQyMDIzMDA2NDE4MjFFNAorOjEwMEIyMDAwMDAwMDQwMjEwMDY0MjAyQjAwNDgxMDIxMDA0NDEwMjFDNworOjEwMEIzMDAwM0MwMTA4MDBBQzIzMDBCQzNDMDEwODAwQUMyMjAwQjgxQQorOjEwMEI0MDAwOEY1MTAwMDAzMjIyMDAwNzEwNDBGRkRDQUY4QTAwMTRGMgorOjEwMEI1MDAwOENDNjAwMDAzQzA1MDgwMDhDQTUwMEJDM0MwNDA4MDBDNQorOjEwMEI2MDAwOEM4NDAwQjgwMENBMzAyMzAwQTYyODIxMDAwMDEwMjE4MAorOjEwMEI3MDAwMDBBNjMwMkIwMDgyMjAyMTAwODYyMDIxMzIyNzAwMDE5MAorOjEwMEI4MDAwM0MwMTA4MDBBQzI1MDBCQzNDMDEwODAwQUMyNDAwQjhDNgorOjEwMEI5MDAwMTBFMDAwMUYzMjIyMDAwMjhGNDIwMTAwQUY0MjAwMjAwRAorOjEwMEJBMDAwOEY0MjAxMDRBRjQyMDBBODkzNDIwMTBCMEUwMDAxODg1RQorOjEwMEJCMDAwMzA1MDAwRkYyRTAyMDAxRDU0NDAwMDA0MDAxMDEwODAzMQorOjEwMEJDMDAwMEUwMDAxOEIwQTAwMDJDNTAwMDAwMDAwMDA1MjEwMjEzNworOjEwMEJEMDAwOEM0MjAwMDAwMDQwRjgwOTAwMDAwMDAwMTA0MDAwMDVCMQorOjEwMEJFMDAwM0MwMjQwMDA4RjQzMDEwNDNDMDI2MDIwQUM0MzAwMTRFRgorOjEwMEJGMDAwM0MwMjQwMDBBRjQyMDEzODNDMDIwODAwOEM0MjAwMzQwNQorOjEwMEMwMDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDM0MzIyMjAwMDJFMAorOjEwMEMxMDAwMTA0MDAwMEUzMjIyMDAwNDhGNDIwMTQwMEUwMDAxODg3NQorOjEwMEMyMDAwQUY0MjAwMjAwRTAwMDM0QjAwMDAwMDAwM0MwMjQwMDBEOQorOjEwMEMzMDAwQUY0MjAxNzgzQzAyMDgwMDhDNDIwMDM4MjQ0MjAwMDE5NworOjEwMEM0MDAwM0MwMTA4MDBBQzIyMDAzODMyMjIwMDA0MTA0MEZGOTgxQQorOjEwMEM1MDAwM0MwMjgwMDA4RjQyMDE4MDBFMDAwMTg4QUY0MjAwMjBEQworOjEwMEM2MDAwOEY0MzAxODAyNDAyMEYwMDE0NjIwMDA1MDAwMDAwMDA4MQorOjEwMEM3MDAwOEY0MjAxODhBNzQyMDA5QzBBMDAwMkZBM0MwMjQwMDAxMQorOjEwMEM4MDAwOTM2MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDgyOAorOjEwMEM5MDAwM0MwMjQwMDAwRTAwMDMyRDAwMDAwMDAwNTQ0MDAwMDQwMAorOjEwMENBMDAwM0MwMjQwMDAwRTAwMEUwRDAwMDAwMDAwM0MwMjQwMDAxRgorOjEwMENCMDAwQUY0MjAxQjgzQzAyMDgwMDhDNDIwMDNDMjQ0MjAwMDFEMworOjEwMENDMDAwM0MwMTA4MDBBQzIyMDAzQzBBMDAwMjdBM0MwMjgwMDA5MQorOjEwMENEMDAwM0MwMjkwMDAzNDQyMDAwMTAwODIyMDI1QUY0NDAwMjBGNQorOjEwMENFMDAwOEY0MjAwMjAwNDQwRkZGRTAwMDAwMDAwMDNFMDAwMDhFNworOjEwMENGMDAwMDAwMDAwMDAzQzAyODAwMDM0NDIwMDAxMDA4MjIwMjVGOAorOjEwMEQwMDAwMDNFMDAwMDhBRjQ0MDAyMDI3QkRGRkUwQUZCMTAwMTRBRQorOjEwMEQxMDAwQUZCMDAwMTAwMDgwODgyMUFGQkYwMDE4MEUwMDAzMDJBMgorOjEwMEQyMDAwMzBCMDAwRkY5MzYyMDA3RDAyMjAyMDIxMDIwMjgwMjU2NgorOjEwMEQzMDAwQTM3MDAwN0Q4RjcwMDA3NDNDMDI4MDAwMEUwMDAzMEJENgorOjEwMEQ0MDAwMDIwMjgwMjQxNjAwMDAwOThGQkYwMDE4OEY0MjAxRjhBQworOjEwMEQ1MDAwMDQ0MEZGRkUyNDAyMDAwMkFGNTEwMUMwQTM0MjAxQzRCRgorOjEwMEQ2MDAwM0MwMjEwMDBBRjQyMDFGODhGQkYwMDE4OEZCMTAwMTQ5MQorOjEwMEQ3MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMjdCREZGRTg2QQorOjEwMEQ4MDAwQUZCRjAwMTA5NzQyMDE4NDMwNDIwMjAwMTA0MDAwMDVCRQorOjEwMEQ5MDAwMDAwMDIwMjEwRTAwMTA0MjAwMDAwMDAwMEEwMDAzNDE2NAorOjEwMERBMDAwMjQwNDAwMDE4RjQyMDE4ODA0NDAwMDA5OEZCRjAwMTAxNQorOjEwMERCMDAwOEY0MjAxODgzQzAzRkYwMDAwNDMxMDI0M0MwMzA0MDBFMQorOjEwMERDMDAwMTQ0MzAwMDMyNDA0MDAwMTkzNjIwMDNFOEZCRjAwMTAwRgorOjEwMEREMDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDE4MjQwMjAwMDE1NAorOjEwMERFMDAwQTM2MDAwMjJBNzYyMDAxNjhGNDQwMTQwMEEwMDAzMTA4RQorOjEwMERGMDAwMjQwNTAwMDEyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTAwRAorOjEwMEUwMDAwOTM2MjAwMDAzMDQ0MDBGRjM4ODMwMDIwMzg4MjAwMzBCNQorOjEwMEUxMDAwMDAwMzE4MkIwMDAyMTAyQjAwNjIxODI0MTA2MDAwMDMzRQorOjEwMEUyMDAwMjQwMjAwNTAxNDgyMDA2MjhGQkYwMDE0OTM0MjAxNDhENAorOjEwMEUzMDAwMzA0MjAwRkYyNDQzRkZGRjJDNjIwMDA1MTA0MDAwNUM5RAorOjEwMEU0MDAwOEZCRjAwMTQwMDAzMTA4MDNDMDMwODAwMjQ2MzRDQzhDQgorOjEwMEU1MDAwMDA0MzEwMjE4QzQyMDAwMDAwNDAwMDA4MDAwMDAwMDAwOAorOjEwMEU2MDAwMEUwMDAzMDI4RjQ0MDE0MDhGNzAwMDBDOEY0MjAxNDQzQQorOjEwMEU3MDAwMTYwMjAwMDIyNDAyMDAwMUFGNjIwMDBDMEUwMDAzMEJGOAorOjEwMEU4MDAwOEY0NDAxNDA4RjQyMDE0NDE0NTAwMDA0OEZCRjAwMTQ2RQorOjEwMEU5MDAwOEZCMDAwMTAwQTAwMEZCODI3QkQwMDE4OEY2MjAwMEMzOQorOjEwMEVBMDAwMEEwMDAzQjMwMDAwMDAwMDk3NjIwMDEwOEY0MzAxNDQ2MgorOjEwMEVCMDAwMzA0MkZGRkYxNDYyMDAwOTAwMDAwMDAwMjQwMjAwMDExQworOjEwMEVDMDAwQTc2MjAwMTA4RjQyMDE0MEFGNDIwMjAwM0MwMjEwMDBCNgorOjEwMEVEMDAwQUY0MjAyMzgwQTAwMDNCQThGQkYwMDE0OTc2MjAwMTBCNQorOjEwMEVFMDAwMEEwMDAzQjMwMDAwMDAwMDBFMDAwMzAyOEY0NDAxNDAxQgorOjEwMEVGMDAwOTc2MjAwMTI4RjQzMDE0NDMwNTBGRkZGMTYwMzAwMDIzNworOjEwMEYwMDAwMjQwMjAwMDFBNzYyMDAxMjBFMDAwMzBCOEY0NDAxNDA2RgorOjEwMEYxMDAwOEY0MjAxNDQxNjAyMDAwNDhGQkYwMDE0OEZCMDAwMTBFRQorOjEwMEYyMDAwMEEwMDAzNDUyN0JEMDAxODk3NjIwMDEyMEEwMDAzQjNBOAorOjEwMEYzMDAwMDAwMDAwMDA5NzYyMDAxNDhGNDMwMTQ0MzA0MkZGRkYxRAorOjEwMEY0MDAwMTQ2MjAwMDY4RkJGMDAxNDI0MDIwMDAxOEZCMDAwMTA0RAorOjEwMEY1MDAwQTc2MjAwMTQwQTAwMTJFMjI3QkQwMDE4OTc2MjAwMTQ2RAorOjEwMEY2MDAwMEEwMDAzQjMwMDAwMDAwMDk3NjIwMDE2OEY0MzAxNDQ5QgorOjEwMEY3MDAwMzA0MkZGRkYxNDYyMDAwNjI0MDIwMDAxOEZCRjAwMTRGQworOjEwMEY4MDAwOEZCMDAwMTBBNzYyMDAxNjBBMDAwQkFBMjdCRDAwMTgzOAorOjEwMEY5MDAwOTc2MjAwMTYxNDQwMDAwNjhGQkYwMDE0M0MwMjA4MDA0MAorOjEwMEZBMDAwOEM0MjAwNzAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNzAxOQorOjEwMEZCMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4MjdCREZGRTgzMAorOjEwMEZDMDAwQUZCRjAwMTRBRkIwMDAxMDhGNTAwMTAwOTM2MjAwMDA1QgorOjEwMEZEMDAwOTM0MzAxMDkzMDQ0MDBGRjI0MDIwMDFGMTA2MjAwQTU2MgorOjEwMEZFMDAwMjg2MjAwMjAxMDQwMDAxODI0MDIwMDM4Mjg2MjAwMEFGRAorOjEwMEZGMDAwMTA0MDAwMEMyNDAyMDAwQjI4NjIwMDA4MTA0MDAwMkM1NgorOjEwMTAwMDAwMDAwMDAwMDAwNDYwMDBFNTI4NjIwMDAyMTQ0MDAwMjg4RgorOjEwMTAxMDAwMjQwMjAwMDYxMDYyMDAyNjhGQkYwMDE0MEEwMDA0QjdFNQorOjEwMTAyMDAwOEZCMDAwMTAxMDYyMDA1RTI4NjIwMDBCMTQ0MDAwRENEQworOjEwMTAzMDAwOEZCRjAwMTQyNDAyMDAwRTEwNjIwMDczOEZCMDAwMTBFNgorOjEwMTA0MDAwMEEwMDA0QjcwMDAwMDAwMDEwNjIwMEMwMjg2MjAwMzlFNgorOjEwMTA1MDAwMTA0MDAwMEEyNDAyMDA4MDI0MDIwMDM2MTA2MjAwQ0FGOAorOjEwMTA2MDAwMjg2MjAwMzcxMDQwMDBCNDI0MDIwMDM1MTA2MjAwQzEyRAorOjEwMTA3MDAwOEZCRjAwMTQwQTAwMDRCNzhGQjAwMDEwMTA2MjAwMkI1RAorOjEwMTA4MDAwMjg2MjAwODExMDQwMDAwNjI0MDIwMEM4MjQwMjAwMzlCMgorOjEwMTA5MDAwMTA2MjAwQjQ4RkJGMDAxNDBBMDAwNEI3OEZCMDAwMTBCNAorOjEwMTBBMDAwMTA2MjAwOTk4RkJGMDAxNDBBMDAwNEI3OEZCMDAwMTBCRgorOjEwMTBCMDAwM0MwMjA4MDA4QzQyMDAyMDEwNDAwMEI5OEZCRjAwMTQ5MQorOjEwMTBDMDAwMEUwMDA1MkIwMDAwMDAwMDhGNDIwMTAwOEY4MzAwMjBERQorOjEwMTBEMDAwOTc0NTAxMEM5NzQ2MDEwOEFDNjIwMDAwOEY0MjAxMDQ1RAorOjEwMTBFMDAwM0MwNDA4MDA5NDg0NERCRTAwMDUyQzAwQUM2MjAwMDQ1MgorOjEwMTBGMDAwOEY0MjAxMTgwMDA2MzQwMDAwQzQzMDI1QUM2MjAwMDg5RAorOjEwMTEwMDAwOEY0MjAxMUMyNDA0MDAwMUFDNjIwMDBDOTM0MjAxMEFDRQorOjEwMTExMDAwMDBBMjI4MjVBQzY1MDAxMEFDNjAwMDE0QUM2MDAwMTg3QgorOjEwMTEyMDAwQUM2NjAwMUMwQTAwMDQ4RDhGQkYwMDE0M0MwMjA4MDA0RQorOjEwMTEzMDAwOEM0MjAwMjAxMDQwMDA5QThGQkYwMDE0MEUwMDA1MkIzNworOjEwMTE0MDAwMDAwMDAwMDA5NzQ0MDEwODNDMDMwODAwOTQ2MzREQkU3MgorOjEwMTE1MDAwOTc0NTAxMEMwMDA0MjIwMjk3NDYwMTBFOEY4MjAwMjA2MQorOjEwMTE2MDAwMDAwNDI2MDAwMDgzMjAyNTAwMDUyQzAwM0MwMzAwODA5RAorOjEwMTE3MDAwMDBBNjI4MjUwMDgzMjAyNUFDNDAwMDAwQUM0MDAwMDREOAorOjEwMTE4MDAwQUM0MDAwMDhBQzQwMDAwQ0FDNDUwMDEwQUM0MDAwMTQ3MgorOjEwMTE5MDAwQUM0MDAwMThBQzQ0MDAxQzBBMDAwNDhDMjQwNDAwMDE3QworOjEwMTFBMDAwOTc0MjAxMEMxNDQwMDAxNTAwMDAwMDAwOTM2MjAwMDVGNgorOjEwMTFCMDAwMzA0MjAwMTAxNDQwMDAxMTAwMDAwMDAwMEUwMDAzMDIzNQorOjEwMTFDMDAwMDIwMDIwMjE5MzYyMDAwNTAyMDAyMDIxMzQ0MjAwMTAxOQorOjEwMTFEMDAwMEUwMDAzMEJBMzYyMDAwNTkzNjIwMDAwMjQwMzAwMjBBRAorOjEwMTFFMDAwMzA0MjAwRkYxMDQzMDA2RDAyMDAyMDIxOEZCRjAwMTQyOQorOjEwMTFGMDAwOEZCMDAwMTAwQTAwMTA1ODI3QkQwMDE4MDAwMDAwMEQyNQorOjEwMTIwMDAwMEEwMDA0QjY4RkJGMDAxNDNDMDIwODAwOEM0MjAwMjA4NAorOjEwMTIxMDAwMTA0MDAwNjM4RkJGMDAxNDBFMDAwNTJCMDAwMDAwMDA3QgorOjEwMTIyMDAwOEY0MjAxMDQ4RjgzMDAyMDk3NDQwMTBDM0MwNTA4MDA4NQorOjEwMTIzMDAwOTRBNTREQkVBQzYyMDAwMDk3NjIwMDJDMDAwNDI0MDAwRgorOjEwMTI0MDAwMzA0MkZGRkYwMDgyMjAyNTNDMDI0MDBFMDBBMjI4MjVFQworOjEwMTI1MDAwQUM2NDAwMDRBQzYwMDAwOEFDNjAwMDBDQUM2MDAwMTAzMgorOjEwMTI2MDAwQUM2MDAwMTRBQzYwMDAxOEFDNjUwMDFDMEEwMDA0OEM3MworOjEwMTI3MDAwMjQwNDAwMDEwRTAwMDMwMjAyMDAyMDIxQTc2MDAwMDhFMAorOjEwMTI4MDAwMEUwMDAzMEIwMjAwMjAyMTAyMDAyMDIxMEUwMDAzMTA5QgorOjEwMTI5MDAwMjQwNTAwMDEzQzAyMDgwMDhDNDIwMDIwMTA0MDAwNDA2MAorOjEwMTJBMDAwOEZCRjAwMTQwRTAwMDUyQjAwMDAwMDAwOTc0MjAxMENCOAorOjEwMTJCMDAwOEY4MzAwMjAzQzA1MDgwMDk0QTU0REJFMDAwMjE0MDA1OQorOjEwMTJDMDAwQUM3MDAwMDBBQzYyMDAwNEFDNjAwMDA4OEY2NDAwNEM5RAorOjEwMTJEMDAwM0MwMjQwMUYwMEEyMjgyNUFDNjQwMDBDOEY2MjAwNTAyNQorOjEwMTJFMDAwMjQwNDAwMDFBQzYyMDAxMDhGNjIwMDU0QUM2MjAwMTQ1MAorOjEwMTJGMDAwQUM2MDAwMThBQzY1MDAxQzhGQkYwMDE0OEZCMDAwMTBFQworOjEwMTMwMDAwMEEwMDA1NTAyN0JEMDAxODI0MDIwMDIwNTA4MjAwMjU0NQorOjEwMTMxMDAwOEZCMDAwMTAwRTAwMEZBMjAyMDAyMDIxMTA0MDAwMjAwQworOjEwMTMyMDAwOEZCRjAwMTQwMjAwMjAyMThGQjAwMDEwMDAwMDI4MjE4MAorOjEwMTMzMDAwMEEwMDAzMTAyN0JEMDAxODAyMDAyMDIxOEZCRjAwMTRFRgorOjEwMTM0MDAwOEZCMDAwMTAwQTAwMDYxODI3QkQwMDE4OTc0NTAxMEM0MQorOjEwMTM1MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwMEEwMDA2Mzg1MQorOjEwMTM2MDAwMjdCRDAwMTgwMjAwMjAyMThGQjAwMDEwMEEwMDA2NUQ4MgorOjEwMTM3MDAwMjdCRDAwMTg5MzQ1MDEwRDAyMDAyMDIxOEZCMDAwMTBGOQorOjEwMTM4MDAwMEEwMDA2QTcyN0JEMDAxODAyMDAyMDIxOEZCRjAwMTQwNQorOjEwMTM5MDAwOEZCMDAwMTAwQTAwMDY4MzI3QkQwMDE4OEZCRjAwMTQwRAorOjEwMTNBMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4OEY0MjAyNzhCQworOjEwMTNCMDAwMDQ0MEZGRkUyNDAyMDAwMjM0ODQwMDgwQUY0NDAyNDA1NworOjEwMTNDMDAwQTM0MjAyNDQzQzAyMTAwMDAzRTAwMDA4QUY0MjAyNzg0RQorOjEwMTNEMDAwM0MwNDA4MDA5NDg0NERDQTNDMDIwODAwOEM0MjRERDQ2MQorOjEwMTNFMDAwMzA4M0ZGRkYwMDAzMThDMDAwNDMxMDIxQUY0MjAwM0NEMAorOjEwMTNGMDAwM0MwMjA4MDA4QzQyNEREMEFGNDIwMDM4M0MwMjAwNTAwNQorOjEwMTQwMDAwMzQ0MjAwMDhBRjQyMDAzMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwMTQxMDAwMDAwMDAwMDA4RjQyMDAwMDMwNDIwMDIwMTA0MEZGRkQxRAorOjEwMTQyMDAwMDAwMDAwMDA4RjQyMDQwMDNDMDEwODAwQUMyMjREQzBDNworOjEwMTQzMDAwOEY0MjA0MDQzQzAxMDgwMEFDMjI0REM0M0MwMjAwMjA1MQorOjEwMTQ0MDAwQUY0MjAwMzAwMDAwMDAwMDNDMDIwODAwOTQ0MjREQzg0QQorOjEwMTQ1MDAwM0MwMzA4MDA5NDYzNERDQzNDMDUwODAwOTRBNTREQ0U5OAorOjEwMTQ2MDAwMjQ4NDAwMDEwMDQzMTAyMTMwODNGRkZGM0MwMTA4MDA2OQorOjEwMTQ3MDAwQTQyMjREQzgzQzAxMDgwMEE0MjQ0RENBMTQ2NTAwMDNGMQorOjEwMTQ4MDAwMDAwMDAwMDAzQzAxMDgwMEE0MjA0RENBMDNFMDAwMDg1MQorOjEwMTQ5MDAwMDAwMDAwMDAzQzA1MDAwQTI3QkRGRkU4MDM0NTI4MjFBNQorOjEwMTRBMDAwM0MwNDA4MDAyNDg0NERCMEFGQkYwMDEwMEUwMDA1QjUwOQorOjEwMTRCMDAwMjQwNjAwMEEzQzAyMDgwMDk0NDI0REIyM0MwMzA4MDA5NgorOjEwMTRDMDAwOTQ2MzREQ0UzMDQyMDAwRjI0NDIwMDAzMDA0MzE4MDRDMQorOjEwMTREMDAwMjQwMjdGRkYwMDQzMTAyQjEwNDAwMDAyQUY4MzAwMUM0QQorOjEwMTRFMDAwMDAwMDAwMEQwRTAwMDRDMjAwMDAwMDAwM0MwMjA4MDBENQorOjEwMTRGMDAwOTQ0MjREQkE4RkJGMDAxMDI3QkQwMDE4MDNFMDAwMDhDQQorOjEwMTUwMDAwQTc0MjAwQTIzQzAyMDAwQTAzNDIxMDIxOTQ0MzAwMDZCNQorOjEwMTUxMDAwM0MwMjA4MDA5NDQyNERCQTNDMDEwODAwQTQyMzREQjY5OQorOjEwMTUyMDAwMDA0MzEwMjM4RjgzMDAxQzAwMDIxNDAwMDAwMjE0MDNFOAorOjEwMTUzMDAwMDA0MzEwMkIwM0UwMDAwODM4NDIwMDAxMjdCREZGRThGQworOjEwMTU0MDAwQUZCRjAwMTAzQzAyMDAwQTAzNDIxMDIxOTQ0MjAwMDY4MworOjEwMTU1MDAwM0MwMTA4MDBBNDIyNERCNjBFMDAwNTBGMDAwMDAwMDA1QgorOjEwMTU2MDAwNTQ0MEZGRjkzQzAyMDAwQThGQkYwMDEwMDNFMDAwMDg1RQorOjEwMTU3MDAwMjdCRDAwMTgyN0JERkZFOEFGQkYwMDEwMEUwMDA1MEYwNAorOjEwMTU4MDAwMDAwMDAwMDAxMDQwMDAwMzAwMDAwMDAwMEUwMDA1MUREOAorOjEwMTU5MDAwMDAwMDAwMDAzQzAyMDgwMDhDNDI0REMwOEZCRjAwMTBDQworOjEwMTVBMDAwMjc0MzA0MDBBRjQyMDAzODNDMDIwODAwOEM0MjREQzQ3RgorOjEwMTVCMDAwMjdCRDAwMThBRjgzMDAyMEFGNDIwMDNDM0MwMjAwMDU2RAorOjEwMTVDMDAwQUY0MjAwMzAwM0UwMDAwOEFGODAwMDE4OEY4MjAwMTg5RgorOjEwMTVEMDAwM0MwMzAwMDYwMDAyMTE0MDAwNDMxMDI1QUY0MjAwMzBEQQorOjEwMTVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEY0MjAwMDAyQQorOjEwMTVGMDAwMzA0MjAwMTAxMDQwRkZGRDI3NDIwNDAwQUY4MjAwMjA1RgorOjEwMTYwMDAwMDNFMDAwMDhBRjgwMDAxODNDMDYwODAwOENDNjREQzRGQgorOjEwMTYxMDAwOEY4NTAwMTg4RjgzMDAyMDNDMDIwODAwOTQ0MjREQkE0OQorOjEwMTYyMDAwMjdCREZGRTAyNEE1MDAwMTI0NjMwMDIwMjQ0MjAwMDExRgorOjEwMTYzMDAwMjRDNzAwMjBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMTgzNgorOjEwMTY0MDAwQUY4NTAwMThBRjgzMDAyMDNDMDEwODAwQTQyMjREQkFFQQorOjEwMTY1MDAwMzA5MDAwRkYzQzAxMDgwMEFDMjc0REM0MDRDMTAwMDhENQorOjEwMTY2MDAwMDAwMDg4MjEwNEUwMDAwNjAwMDAwMDAwM0MwMjA4MDBBMQorOjEwMTY3MDAwOEM0MjREQzAyNDQyMDAwMTNDMDEwODAwQUMyMjREQzAwOAorOjEwMTY4MDAwM0MwMjA4MDA5NDQyNERCQTNDMDMwODAwOTQ2MzREQzhFNAorOjEwMTY5MDAwMDAxMDIwMkIwMDQzMTAyNjJDNDIwMDAxMDA0NDEwMjU4RQorOjEwMTZBMDAwMTQ0MDAwMDQ4RjgzMDAxODI0MDIwMDEwMTQ2MjAwMEZGRAorOjEwMTZCMDAwMDAwMDAwMDAwRTAwMDU0MTI0MTEwMDAxM0MwMzA4MDA1OQorOjEwMTZDMDAwOTQ2MzREQkEzQzAyMDgwMDk0NDI0REM4MTQ2MjAwMDM3MgorOjEwMTZEMDAwMDAwMDAwMDAwRTAwMDRDMjAwMDAwMDAwMTYwMDAwMDMxRAorOjEwMTZFMDAwMDAwMDAwMDAwRTAwMDUyQjAwMDAwMDAwM0MwMzA4MDA3NQorOjEwMTZGMDAwOTQ2MzREQkUzQzAyMDgwMDk0NDI0REJDMjQ2MzAwMDEzQgorOjEwMTcwMDAwMzA2NEZGRkYzQzAxMDgwMEE0MjM0REJFMTQ4MjAwMDM5NworOjEwMTcxMDAwMDAwMDAwMDAzQzAxMDgwMEE0MjA0REJFMTIwMDAwMDY5RAorOjEwMTcyMDAwMDAwMDAwMDAzQzAyMDgwMDk0NDI0REJBQTc0MjAwQTIwQgorOjEwMTczMDAwMEEwMDA1QTMwMjIwMTAyMTBFMDAwNTBGMDAwMDAwMDA4MgorOjEwMTc0MDAwMTA0MDAwMDQwMjIwMTAyMTBFMDAwNTFEMDAwMDAwMDBDMgorOjEwMTc1MDAwMDIyMDEwMjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAyRAorOjEwMTc2MDAwMDNFMDAwMDgyN0JEMDAyMDMwODRGRkZGMzBBNUZGRkYwNQorOjEwMTc3MDAwMDAwMDE4MjExMDgwMDAwNzAwMDAwMDAwMzA4MjAwMDFFNgorOjEwMTc4MDAwMTA0MDAwMDIwMDA0MjA0MjAwNjUxODIxMEEwMDA1QUI0OQorOjEwMTc5MDAwMDAwNTI4NDAwM0UwMDAwODAwNjAxMDIxMTBDMDAwMDY4QQorOjEwMTdBMDAwMjRDNkZGRkY4Q0EyMDAwMDI0QTUwMDA0QUM4MjAwMDAyOAorOjEwMTdCMDAwMEEwMDA1QjUyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDBDRQorOjEwMTdDMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwMDAwMDAwMDA2QQorOjEwMTdEMDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGMTQ2MkZGRkFGMQorOjEwMTdFMDAwMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMjQwMjAwMDEzQgorOjEwMTdGMDAwQUY2MjAwMENBNzYyMDAxMEE3NjIwMDEyQTc2MjAwMTQ3QgorOjEwMTgwMDAwMDNFMDAwMDhBNzYyMDAxNjMwODIwMDdGMDM0MjEwMjEyNworOjEwMTgxMDAwM0MwODAwMEUwMDQ4MTgyMTNDMDIwODAwOEM0MjAwMjBDMQorOjEwMTgyMDAwMjdCREZGRDgyNDA3RkY4MEFGQjMwMDFDQUZCMjAwMTg1QworOjEwMTgzMDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDIwMDA4MDgwMjExNgorOjEwMTg0MDAwMzBCMTAwRkYwMDg3MjAyNDMwRDIwMEZGMTA0MDAwMkY2RAorOjEwMTg1MDAwMDAwMDk4MjFBRjQ0MDAyQzkwNjIwMDAwMjQwMzAwNTA0NworOjEwMTg2MDAwMzA0MjAwRkYxNDQzMDAwRTAwMDAwMDAwM0MwMjA4MDA1QworOjEwMTg3MDAwOEM0MjAwRTAwMjAyMTAyMTAwNDcxMDI0QUY0MjAwMkNFRAorOjEwMTg4MDAwM0MwMjA4MDA4QzQyMDBFMDAyMDIxMDIxMzA0MjAwN0YzRQorOjEwMTg5MDAwMDM0MjEwMjEwMDQ4MTAyMTk0NDIwMEQ0MzA1M0ZGRkYyRQorOjEwMThBMDAwMEUwMDA1MkIwMDAwMDAwMDNDMDIwODAwOTQ0MjREQkVEMworOjEwMThCMDAwOEY4MzAwMjAwMDExMzQwMDAwQzIzMDI1MDAxMjJDMDA1QworOjEwMThDMDAwM0MwMjQwMDAwMEMyMzAyNTM0QTUwMDAxQUM3MDAwMDA4RAorOjEwMThEMDAwOEZCRjAwMjBBQzYwMDAwNDhGQjIwMDE4QUM3MzAwMDgwQQorOjEwMThFMDAwOEZCMTAwMTRBQzYwMDAwQzhGQjMwMDFDQUM2NTAwMTAwRAorOjEwMThGMDAwOEZCMDAwMTBBQzYwMDAxNDI0MDQwMDAxQUM2MDAwMTgyQworOjEwMTkwMDAwMjdCRDAwMjgwQTAwMDU1MEFDNjYwMDFDOEZCRjAwMjBEMAorOjEwMTkxMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA2RAorOjEwMTkyMDAwMDNFMDAwMDgyN0JEMDAyODkzNDMwMTBGMjQwMjAwMTBBNAorOjEwMTkzMDAwMTA2MjAwMEUyODY1MDAxMTEwQTAwMDA3MjQwMjAwMTI5QQorOjEwMTk0MDAwMjQwMjAwMDgyNDA1MDAzQTEwNjIwMDA2MDAwMDMwMjEzRAorOjEwMTk1MDAwMDNFMDAwMDgwMDAwMDAwMDI0MDUwMDM1MTQ2MkZGRkNDRAorOjEwMTk2MDAwMDAwMDMwMjEwQTAwMDVEMDAwMDAwMDAwOEY0MjAwNzQwMgorOjEwMTk3MDAwMjQ0MjBGQTAwM0UwMDAwOEFGNjIwMDBDMjdCREZGRTg3RgorOjEwMTk4MDAwQUZCRjAwMTAwRTAwMDMxMDI0MDUwMDAxOEZCRjAwMTAzMAorOjEwMTk5MDAwMjQwMjAwMDFBNzYyMDAxMjI3QkQwMDE4MjQwMjAwMDFFMgorOjEwMTlBMDAwMDNFMDAwMDhBMzYwMDAyMjI3QkRGRkUwQUZCMTAwMTRGMAorOjEwMTlCMDAwQUZCMDAwMTBBRkJGMDAxODMwQjFGRkZGMEUwMDAzMDI0MAorOjEwMTlDMDAwMDA4MDgwMjE5MzYyMDAzRjI0MDMwMDA0MzA0MjAwRkYyNgorOjEwMTlEMDAwMTQ0MzAwMEMwMjAwMjAyMTEyMjAwMDA4MjQwMjAwMEFGNworOjEwMTlFMDAwMEUwMDA1QzkwMDAwMDAwMDkzNjIwMDA1MjQwM0ZGRkVGRAorOjEwMTlGMDAwMDA0MzEwMjRBMzYyMDAwNTI0MDIwMDEyQTM2MjAwM0ZFQQorOjEwMUEwMDAwMDIwMDIwMjEwRTAwMDMwQkEzNjAwMDgxMTYyMDAwMDNCQQorOjEwMUExMDAwMDIwMDIwMjEwRTAwMDYyRDAwMDAwMDAwMDIwMDIwMjFGRgorOjEwMUEyMDAwMzIyNjAwRkY4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA1NgorOjEwMUEzMDAwMjQwNTAwMzgwQTAwMDVEMDI3QkQwMDIwMjdCREZGRTA5RgorOjEwMUE0MDAwQUZCRjAwMUNBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBCMAorOjEwMUE1MDAwMEUwMDAzMDIwMDgwODAyMTBFMDAwNUM5MDAwMDAwMDA3NgorOjEwMUE2MDAwOTM2MjAwM0YyNDEyMDAxODMwNTEwMEZGMTIzMjAwMDMyRAorOjEwMUE3MDAwMDIwMDIwMjEyNDAyMDAxMkEzNjIwMDNGOTM2MjAwMDVBRAorOjEwMUE4MDAwMjQwM0ZGRkUwMDQzMTAyNDBFMDAwMzBCQTM2MjAwMDU5NQorOjEwMUE5MDAwMDIwMDIwMjEyNDA1MDAyMDE2MzIwMDA3MDAwMDMwMjExQQorOjEwMUFBMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBEMAorOjEwMUFCMDAwMEEwMDAzMTAyN0JEMDAyMDhGQkYwMDFDOEZCMjAwMTg0MgorOjEwMUFDMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDM5MEEwMDA1RDAzMgorOjEwMUFEMDAwMjdCRDAwMjAyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTQ0NgorOjEwMUFFMDAwOTc0MjAxMEMyNDA1MDAzNjAwODA4MDIxMTQ0MDAwMTAyQworOjEwMUFGMDAwMzA0NjAwRkYwRTAwMDMwMjAwMDAwMDAwMjQwMjAwMTIyNgorOjEwMUIwMDAwQTM2MjAwM0Y5MzYyMDAwNTM0NDIwMDEwMEUwMDA1QzkzNQorOjEwMUIxMDAwQTM2MjAwMDUwRTAwMDMwQjAyMDAyMDIxMDIwMDIwMjExOQorOjEwMUIyMDAwMEUwMDAzMTAyNDA1MDAyMDBBMDAwNjlDMDAwMDAwMDA5RgorOjEwMUIzMDAwMEUwMDA1RDAwMDAwMDAwMDBFMDAwMzAyMDIwMDIwMjE2QworOjEwMUI0MDAwOTM2MjAwMjMyNDAzRkY5RjAyMDAyMDIxMDA0MzEwMjRGRQorOjEwMUI1MDAwOEZCRjAwMTQ4RkIwMDAxMEEzNjIwMDIzMEEwMDAzMEI5NAorOjEwMUI2MDAwMjdCRDAwMTgyN0JERkZFMEFGQkYwMDE4QUZCMTAwMTRCQworOjEwMUI3MDAwQUZCMDAwMTAzMEIxMDBGRjBFMDAwMzAyMDA4MDgwMjFFMgorOjEwMUI4MDAwMjQwMjAwMTIwRTAwMDVDOUEzNjIwMDNGMEUwMDAzMEJFMQorOjEwMUI5MDAwMDIwMDIwMjEwMjAwMjAyMTAyMjAzMDIxOEZCRjAwMThFNgorOjEwMUJBMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDM1MEEwMDA1RDA1NQorOjEwMUJCMDAwMjdCRDAwMjBBMzgwMDAyQzAzRTAwMDA4QTM4MDAwMkQ5NworOjEwMUJDMDAwOEY0MjAyNzgwNDQwRkZGRThGODIwMDM0QUY0MjAyNDAxMQorOjEwMUJEMDAwMjQwMjAwMDJBMzQyMDI0NDNDMDIxMDAwMDNFMDAwMDg3OQorOjEwMUJFMDAwQUY0MjAyNzgzQzAzNjAwMDhDNjI1NDAwMzA0MjAwMDgyRgorOjEwMUJGMDAwMTQ0MEZGRkQwMDAwMDAwMDhDNjI1NDA4QUY4MjAwMEMwRQorOjEwMUMwMDAwMjQwMjAwNTJBQzYwNTQwOEFDNjQ1NDMwQUM2MjU0MzRDQQorOjEwMUMxMDAwMjQwMjAwMDgwM0UwMDAwOEFDNjI1NDAwM0MwMjYwMDBBQgorOjEwMUMyMDAwOEM0MjU0MDAzMDQyMDAwODEwNDAwMDA1M0MwMzYwMDAyNAorOjEwMUMzMDAwOEM2MjU0MDAzMDQyMDAwODE0NDBGRkZEMDAwMDAwMDA5OAorOjEwMUM0MDAwOEY4MzAwMEMzQzAyNjAwMDAzRTAwMDA4QUM0MzU0MDhBMgorOjEwMUM1MDAwOTBBMzAwMDAyNDAyMDAwNTAwODA0MDIxMzA2MzAwM0Y3MworOjEwMUM2MDAwMDAwMDQ4MjExNDYyMDAwNTAwMDA1MDIxOTBBMjAwMUNEMQorOjEwMUM3MDAwOTRBMzAwMUUzMDQ5MDBGRjMwNkFGRkZGQUQwMDAwMEM0NgorOjEwMUM4MDAwQUQwMDAwMTBBRDAwMDAyNDk1MDIwMDE0OEQwNTAwMUM2RAorOjEwMUM5MDAwOEQwNDAwMTgzMDQyRkZGRjAwNDkxMDIzMDAwMjExMDA5QworOjEwMUNBMDAwMDAwMjM3QzMwMDQwMzgyMTAwODYyMDIzMDBBMjEwMkJGOQorOjEwMUNCMDAwMDA4MjIwMjMwMEE3MjgyM0FEMDUwMDFDQUQwNDAwMThENgorOjEwMUNDMDAwQTUwOTAwMTRBNTA5MDAyMEE1MEEwMDE2MDNFMDAwMDhENAorOjEwMUNEMDAwQTUwQTAwMjI4RjQyMDFGODA0NDBGRkZFMjQwMjAwMDIwMAorOjEwMUNFMDAwQUY0NDAxQzBBMzQyMDFDNDNDMDIxMDAwMDNFMDAwMDg1RAorOjEwMUNGMDAwQUY0MjAxRjgzQzAyMDgwMDhDNDIwMEI0MjdCREZGRTg2NworOjEwMUQwMDAwQUZCRjAwMTQyNDQyMDAwMUFGQjAwMDEwM0MwMTA4MDAzNgorOjEwMUQxMDAwQUMyMjAwQjQ4RjQzMDAyNDNDMDIwMDFGMzBBQTAwRkYxNQorOjEwMUQyMDAwMzQ0MkZGODAzMEQ4MDBGRjAwNjI4MDI0MDA4MEY4MjExOAorOjEwMUQzMDAwMzBFRjAwRkYxMTU4MDAzQjAxNDA1ODIxMjQwQ0ZGODA3OAorOjEwMUQ0MDAwM0MxOTAwMEEzMTYzMDA3RjAwMDMxMEMwMDAwMzE5NDBGMgorOjEwMUQ1MDAwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDMjU2ODAwMDE2QQorOjEwMUQ2MDAwMzEwRDAwN0YwM0UyMTAyMTAwNDMxMDIxMzA0MzAwN0YzQQorOjEwMUQ3MDAwMDM0MzE4MjEwMDRDMTAyNDAwNzk0ODIxQUY0MjAwMjQ2RAorOjEwMUQ4MDAwOEQyMjAwMjQwMTZDMTgyNDAwNkM3MDI2QUQyMjAwMENGQQorOjEwMUQ5MDAwOEQyMjAwMjQzMTA4MDBGRkFEMjIwMDEwOTUyMjAwMTQ4RQorOjEwMURBMDAwOTUyMzAwMjA4RDI3MDAxQzMwNDJGRkZGMzA2M0ZGRkY4QQorOjEwMURCMDAwOEQyNjAwMTgwMDQzMTAyMzAwMDIxMTAwMDAwMjI3QzNFMworOjEwMURDMDAwMDA0MDI4MjEwMEM0MzAyMzAwRTIxMDJCMDBDMjMwMjM0MQorOjEwMUREMDAwMDBFNTM4MjNBRDI3MDAxQ0FEMjYwMDE4OTUyMjAwMjAxMQorOjEwMURFMDAwQTUyMjAwMTQ5NTIyMDAyMjE1NEIwMDBBQTUyMjAwMTZGOAorOjEwMURGMDAwOEQyMzAwMjQ4RDIyMDAwODI1NDYwMDAxMzE0NTAwODBGNgorOjEwMUUwMDAwMTQ2MjAwMDQzMEM0MDA3RjEwOEYwMDAyMzhBQTAwODBFMgorOjEwMUUxMDAwMDBDMDUwMjE1MUFGMDAwMTMxQzgwMEZGMTUxOEZGQzlBMworOjEwMUUyMDAwMDEwMDU4MjE4Rjg0MDAzNDMwODIwMDdGMDM0MjE4MjE0MgorOjEwMUUzMDAwM0MwMjAwMEEwMDYyMTgyMTI0MDJGRjgwMDA4MjIwMjQ1NAorOjEwMUU0MDAwQUY0NDAwMjRBMDZBMDA3OUEwNkEwMDgzOEM2MjAwNTAyRAorOjEwMUU1MDAwOEY4NDAwMzRBQzYyMDA3MDhDNjUwMDc0M0MwMjdGRkY5QworOjEwMUU2MDAwMzQ0MkZGRkYwMEEyMjgyNDBFMDAwNzAzQUM2NTAwNzQ3MworOjEwMUU3MDAwQUY1MDAwMjQ4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDhBMworOjEwMUU4MDAwMjdCRDAwMTgyN0JERkZDMEFGQkUwMDM4QUZCNzAwMzQ3NAorOjEwMUU5MDAwQUZCNTAwMkNBRkIyMDAyMEFGQjEwMDFDQUZCMDAwMTgzRQorOjEwMUVBMDAwQUZCRjAwM0NBRkI2MDAzMEFGQjQwMDI4QUZCMzAwMjRFMgorOjEwMUVCMDAwOEY0NTAwMjQ4RjQ2MDAyODhGNDMwMDJDM0MwMjAwMUZEMgorOjEwMUVDMDAwMzQ0MkZGODAwMDYyMTgyNDAwQzIzMDI0MDA4MEE4MjEyMAorOjEwMUVEMDAwQUZBMzAwMTQwMEEyRjAyNDBFMDAwNkM3QUZBNjAwMTBBNgorOjEwMUVFMDAwM0MwMjA4MDA4QzQyMDBFMDI0MTBGRjgwMDM2MDg4MjEzRgorOjEwMUVGMDAwMDJBMjEwMjEwMDUwMTAyNEFGNDIwMDI0M0MwMjA4MDAyRQorOjEwMUYwMDAwOEM0MjAwRTAwMkEyMTAyMTMwNDIwMDdGMDM0MjE4MjFERgorOjEwMUYxMDAwM0MwMjAwMEEwMDYyOTAyMTkyNDIwMEQyOTM2MzAwODQ0NgorOjEwMUYyMDAwMzA1NzAwRkYzMDYzMDBGRjI0MDIwMDAxMTA2MjAwMzRDQworOjEwMUYzMDAwMDM2MDIwMjEyNDAyMDAwMjE0NjIwMDM2MDAwMDAwMDAyOQorOjEwMUY0MDAwMEUwMDEyQUUwMjQwMjgyMTkyMjMwMDgzOTIyMjAwODNDOQorOjEwMUY1MDAwMzA2MzAwN0YzMDQyMDA3RjAwMDIxMEMwMDAwMzE5NDA1MAorOjEwMUY2MDAwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDMDJBMjEwMjExMQorOjEwMUY3MDAwMDA0MzM4MjEwMEYwMTAyNEFGNDIwMDI4OTIyNTAwNzg1OQorOjEwMUY4MDAwOTIyNDAwODMzMEUyMDA3RjAzNDIxODIxM0MwMjAwMENCRgorOjEwMUY5MDAwMTQ4NTAwMDcwMDYyODAyMTI0MDJGRkZGQTI0MjAwRjFBNQorOjEwMUZBMDAwMjQwMkZGRkZBNjQyMDBGMjBBMDAwN0JGMjQwMkZGRkYzRgorOjEwMUZCMDAwOTYwMjAwMjBBMjQyMDBGMTk2MDIwMDIyQTY0MjAwRjIwMAorOjEwMUZDMDAwOEUwMjAwMjRBRTQyMDBGNDkyMjIwMDgzQTI0MjAwRjA2RQorOjEwMUZEMDAwOEU0MjAwQzhBRTQyMDBGQzhFNDIwMEM0QUU0MjAwRjgwMQorOjEwMUZFMDAwOEUyMjAwNTBBRTQyMDEwMDhFNDIwMENDQUU0MjAxMDQ2RgorOjEwMUZGMDAwOTIyMjAwODUzMDQyMDAzRjBBMDAwODFBMzQ0MjAwNDAxNQorOjEwMjAwMDAwMEUwMDEyRDEwMjQwMjgyMTkyMjIwMDg1MEEwMDA4MUFFRgorOjEwMjAxMDAwMzA0MjAwM0Y5MzYyMDA4NTI0MDNGRkRGMzA0MjAwM0ZERgorOjEwMjAyMDAwQTM2MjAwODU5MzYyMDA4NTAwNDMxMDI0QTM2MjAwODVBQgorOjEwMjAzMDAwOTM2MzAwODM5MzYyMDA3ODMwNzQwMEZGMzA0MjAwRkZBNgorOjEwMjA0MDAwMTA1NDAwMzYyNDBBRkY4MDNDMEMwMDBDMzI4MzAwN0ZDMQorOjEwMjA1MDAwMDAwMzEwQzAwMDAzMTk0MDAwNjIxODIxM0MwMjA4MDA3MAorOjEwMjA2MDAwOEM0MjAwREMyNjg4MDAwMTMxMDkwMDdGMDJBMjEwMjE4OQorOjEwMjA3MDAwMDA0MzM4MjEzMEUyMDA3RjAzNDIxODIxMDBFQTEwMjQ5NworOjEwMjA4MDAwQUY0MjAwMjgwMDZDODAyMThFMDIwMDI0MDI4QTE4MjRBRQorOjEwMjA5MDAwMDA2QTU4MjZBRTAyMDAwQzhFMDIwMDI0MzEwODAwRkZCMAorOjEwMjBBMDAwQUUwMjAwMTA5NjAyMDAxNDk2MDMwMDIwOEUwNzAwMUM1QQorOjEwMjBCMDAwMzA0MkZGRkYzMDYzRkZGRjhFMDYwMDE4MDA0MzEwMjNGRAorOjEwMjBDMDAwMDAwMjExMDAwMDAyMjdDMzAwNDAyODIxMDBDNDMwMjM3MQorOjEwMjBEMDAwMDBFMjEwMkIwMEMyMzAyMzAwRTUzODIzQUUwNzAwMUNCRAorOjEwMjBFMDAwQUUwNjAwMTg5NjAyMDAyMEE2MDIwMDE0OTYwMjAwMjJGNgorOjEwMjBGMDAwQTYwMjAwMTY5MjIyMDA3OTMwNDIwMEZGMTA1NDAwMDcxOQorOjEwMjEwMDAwMDAwMDAwMDA1MTM3MDAwMTMxNjgwMEZGOTIyMjAwNzg4MgorOjEwMjExMDAwMzA0MjAwRkYxNDQ4RkZDRDAxMDBBMDIxOTIyMjAwODMyRAorOjEwMjEyMDAwQTIyMjAwNzk4RTIyMDA1MDBBMDAwODdBQUUyMjAwNzBBNgorOjEwMjEzMDAwQTIyMjAwODU4RTIyMDA0QzI0MDVGRjgwQUU0MjAxMENCNQorOjEwMjE0MDAwOTIyMjAwODUzNDQyMDAyMEEyMjIwMDg1OTI0MjAwRDFEMgorOjEwMjE1MDAwM0MwMzA4MDA4QzYzMDBEQzMwNTQwMEZGM0MwMjA4MDBBNAorOjEwMjE2MDAwOEM0MjAwRTQwMDE0MzE0MDAwMTQyMEMwMDJBMzE4MjE2NgorOjEwMjE3MDAwMDBDNDIwMjEwMkEyMTAyMTAwNjQzODIxMDA0NjEwMjE1MQorOjEwMjE4MDAwMDA0NTE4MjQwMEU1MjgyNEFGNDUwMDI4QUY0MzAwMkM2MworOjEwMjE5MDAwMzA0MjAwN0Y5MjQ0MDBEMDMwRTMwMDdGMDM0MjI4MjE4OAorOjEwMjFBMDAwMDM0MzE4MjEzQzAyMDAwQzAwNjI4MDIxM0MwMjAwMEUxNworOjEwMjFCMDAwMzA5NjAwRkYwMEEyOTgyMTEyOTYwMDJBMDAwMDAwMDAyRAorOjEwMjFDMDAwOEUwMjAwMEMwMjAwMjAyMTAyNjAyODIxMTA0MDAwMjUxMAorOjEwMjFEMDAwMjYxMDAwMjgwRTAwMDZFMjAwMDAwMDAwOTI2MjAwMERBQQorOjEwMjFFMDAwMjY4MzAwMDEzMDc0MDBGRjMwNDIwMDdGQTI2MjAwMERBMAorOjEwMjFGMDAwMjQwNEZGODAxNjk3RkZGMDI2NzMwMDIwM0MwMjA4MDA5RAorOjEwMjIwMDAwOEM0MjAwREMwMDAwQTAyMTAyQTIxMDIxMDA0NDEwMjQxNgorOjEwMjIxMDAwQUY0MjAwMjgzQzAyMDgwMDhDNDIwMEU0M0MwMzA4MDA2NgorOjEwMjIyMDAwOEM2MzAwREMwMkEyMTAyMTAwNDQxMDI0QUY0MjAwMkM3OQorOjEwMjIzMDAwM0MwMjA4MDA4QzQyMDBFNDAyQTMxODIxMzA2MzAwN0ZCNgorOjEwMjI0MDAwMDJBMjEwMjEzMDQyMDA3RjAzNDIyMDIxMDM0MzE4MjFDMworOjEwMjI1MDAwM0MwMjAwMEMwMDYyODAyMTNDMDIwMDBFMEEwMDA4M0M5NworOjEwMjI2MDAwMDA4Mjk4MjE4RTQyMDBEOEFFMjIwMDUwOEU0MjAwRDhDMworOjEwMjI3MDAwQUUyMjAwNzA5MjI1MDA4MzkyNDYwMEQxOTIyMzAwODMwMworOjEwMjI4MDAwOTI0NDAwRDEyNDAyRkY4MDAwQTIyODI0MzA2MzAwN0YwMgorOjEwMjI5MDAwMzA4NDAwRkYwMEE2MjgyNTAwNjQxODJBMTA2MDAwMDI4MAorOjEwMjJBMDAwMzBBNTAwRkYzOEE1MDA4MEEyMjUwMDgzQTIyNTAwNzk3MworOjEwMjJCMDAwMEUwMDA2RDUwMDAwMDAwMDkyMjIwMDdFMDJBMDIwMjEyMAorOjEwMjJDMDAwQTIyMjAwN0E4RTIzMDA3NDNDMDI3RkZGMzQ0MkZGRkY3QgorOjEwMjJEMDAwMDA2MjE4MjQwRTAwMDcwM0FFMjMwMDc0OEZBMjAwMTBDMgorOjEwMjJFMDAwQUY1RTAwMjQ4RkJGMDAzQ0FGNDIwMDI4OEZCRTAwMzg5NQorOjEwMjJGMDAwOEZBMjAwMTQ4RkI3MDAzNDhGQjYwMDMwOEZCNTAwMkMzQQorOjEwMjMwMDAwOEZCNDAwMjg4RkIzMDAyNDhGQjIwMDIwOEZCMTAwMUMzRgorOjEwMjMxMDAwOEZCMDAwMTgyN0JEMDA0MDAzRTAwMDA4QUY0MjAwMkMzQQorOjEwMjMyMDAwOTBBMjAwMDAyNDQyMDAwMUEwQTIwMDAwM0MwMzA4MDA4QgorOjEwMjMzMDAwOEM2MzAwRjQzMDQyMDBGRjE0NDMwMDBGMDA4MDMwMjExMgorOjEwMjM0MDAwQTBBMDAwMDAzQzAyMDgwMDhDNDIwMEU0OEY4NDAwMzQwRQorOjEwMjM1MDAwMDA4MjIwMjEzMDgyMDA3RjAzNDIxODIxM0MwMjAwMENDMQorOjEwMjM2MDAwMDA2MjE4MjEyNDAyRkY4MDAwODIyMDI0QUNDMzAwMDBGOAorOjEwMjM3MDAwMDNFMDAwMDhBRjQ0MDAyODhDODIwMDAwMjQ0MjAwMjBDMworOjEwMjM4MDAwMDNFMDAwMDhBQzgyMDAwMDk0QzIwMDAwM0MwODA4MDA5MgorOjEwMjM5MDAwOTUwODAwQ0EzMEU3RkZGRjAwODA0ODIxMDEwMjEwMjFBNAorOjEwMjNBMDAwQTRDMjAwMDA5NEMyMDAwMDMwNDJGRkZGMDBFMjEwMkJFNAorOjEwMjNCMDAwNTQ0MDAwMDFBNEM3MDAwMDk0QTIwMDAwM0MwMzA4MDBBMAorOjEwMjNDMDAwOEM2MzAwQ0MyNDQyMDAwMUE0QTIwMDAwOTRBMjAwMDA2RgorOjEwMjNEMDAwMzA0MkZGRkY1NDQzMDAwNzhGODYwMDI4MDEwNzEwMkI2RgorOjEwMjNFMDAwQTRBMDAwMDA1NDQwMDAwMTAxMDAzODIxQTRDNzAwMDA0RgorOjEwMjNGMDAwOEY4NjAwMjg4Q0M0MDAxQ0FGNDQwMDNDOTRBMjAwMDBDRgorOjEwMjQwMDAwOEY0MzAwM0MzMDQyRkZGRjAwMDIxMEMwMDA2MjE4MjFFMQorOjEwMjQxMDAwQUY0MzAwM0M4RjQyMDAzQzAwODIyMDIzMTg4MDAwMDQyMAorOjEwMjQyMDAwMDAwMDAwMDA4Q0MyMDAxODBBMDAwOERCMjQ0MjAwMDFGMgorOjEwMjQzMDAwOENDMjAwMThBRjQyMDAzODNDMDIwMDUwMzQ0MjAwMTBGOQorOjEwMjQ0MDAwQUY0MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwMjQ1MDAwOEY0MjAwMDAzMDQyMDAyMDEwNDBGRkZEMDAwMDAwMDBDRAorOjEwMjQ2MDAwOEY0MjA0MDRBRDIyMDAwNDhGNDIwNDAwQUQyMjAwMDAxQworOjEwMjQ3MDAwM0MwMjAwMjBBRjQyMDAzMDAzRTAwMDA4MDAwMDAwMDBGMgorOjEwMjQ4MDAwMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTAyRAorOjEwMjQ5MDAwQUZCRjAwMUM5NEMyMDAwMDAwQzA4MDIxM0MxMjA4MDBBNQorOjEwMjRBMDAwOTY1MjAwQzYyNDQyMDAwMUE2MDIwMDAwOTYwMzAwMDBENgorOjEwMjRCMDAwOTRFMjAwMDAwMEUwMzAyMTE0NDMwMDA1OEZCMTAwMzBBOQorOjEwMjRDMDAwMEUwMDA4QjAwMjQwMzgyMTBBMDAwOTBEMDAwMDAwMDA4QgorOjEwMjREMDAwOEM4MzAwMDQ4QzgyMDAwNDI0NDIwMDQwMDQ2MTAwMDdDNQorOjEwMjRFMDAwQUM4MjAwMDQ4QzgyMDAwNDA0NDAwMDA0MDAwMDAwMDA2MAorOjEwMjRGMDAwOEM4MjAwMDAyNDQyMDAwMUFDODIwMDAwOTYwMjAwMDBBMQorOjEwMjUwMDAwMzA0MkZGRkY1MDUyMDAwMUE2MDAwMDAwOTYyMjAwMDA1QQorOjEwMjUxMDAwMjQ0MjAwMDFBNjIyMDAwMDhGODIwMDI4OTYyMzAwMDA5QQorOjEwMjUyMDAwOTQ0MjAwMTYxNDQzMDAwNDhGQkYwMDFDMjQwMjAwMDFEMworOjEwMjUzMDAwQTYyMjAwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTRCQworOjEwMjU0MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwOEY4OTAwMjgwRAorOjEwMjU1MDAwMjdCREZGRTBBRkJGMDAxODhEMjIwMDI4Mjc0ODA0MDBFOAorOjEwMjU2MDAwMzBFNzAwRkZBRjQyMDAzODhEMjIwMDJDQUY4ODAwMzBFQQorOjEwMjU3MDAwQUY0MjAwM0MzQzAyMDAwNUFGNDIwMDMwMDAwMDAwMDBDQQorOjEwMjU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgorOjEwMjU5MDAwMDAwMDAwMDA4QzgyMDAwQzhDODIwMDBDQUQwMjAwMDA1OAorOjEwMjVBMDAwOEM4MjAwMTBBRDAyMDAwNDhDODIwMDE4QUQwMjAwMDg3RAorOjEwMjVCMDAwOEM4MjAwMUNBRDAyMDAwQzhDQTIwMDE0QUQwMjAwMTAzNQorOjEwMjVDMDAwOEM4MjAwMjBBRDAyMDAxNDkwODIwMDA1MzA0MjAwRkY5MgorOjEwMjVEMDAwMDAwMjEyMDBBRDAyMDAxODhDQTIwMDE4QUQwMjAwMUMwRgorOjEwMjVFMDAwOENBMjAwMENBRDAyMDAyMDhDQTIwMDEwQUQwMjAwMjREMQorOjEwMjVGMDAwOENBMjAwMUNBRDAyMDAyODhDQTIwMDIwQUQwMjAwMkM5MQorOjEwMjYwMDAwQUQwNjAwMzBBRDAwMDAzNDk3ODMwMDI2MzQwMkZGRkY5MgorOjEwMjYxMDAwMTQ2MjAwMDIwMDYwMjAyMTM0MDRGRkZGMTBFMDAwMTE2QQorOjEwMjYyMDAwQUQwNDAwMzg5NTIzMDAzNjk1MjQwMDM2MjQwMjAwMDFCRAorOjEwMjYzMDAwMzA2M0ZGRkYwMDAzMThDMjAwNjkxODIxOTA2NTAwNDA1NQorOjEwMjY0MDAwMzA4NDAwMDcwMDgyMTAwNDAwNDUxMDI1QTA2MjAwNDA3RAorOjEwMjY1MDAwOEY4MjAwMjg5NDQyMDA1NjMwNDJGRkZGMEEwMDA5NzQxRQorOjEwMjY2MDAwQUQwMjAwM0M5NTIzMDAzNjk1MjQwMDM2MjQwMjAwMDE3QgorOjEwMjY3MDAwMzA2M0ZGRkYwMDAzMThDMjAwNjkxODIxOTA2NTAwNDAxNQorOjEwMjY4MDAwMzA4NDAwMDcwMDgyMTAwNDAwMDIxMDI3MDA0NTEwMjQ0NworOjEwMjY5MDAwQTA2MjAwNDBBRDAwMDAzQzAwMDAwMDAwMDAwMDAwMDAwRgorOjEwMjZBMDAwMDAwMDAwMDAzQzAyMDAwNjM0NDIwMDQwQUY0MjAwMzAwRgorOjEwMjZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEY0MjAwMDA0OQorOjEwMjZDMDAwMzA0MjAwMTAxMDQwRkZGRDhGODYwMDI4QUY4ODAwMzA5OAorOjEwMjZEMDAwMjRDMjAwNTYyNEM3MDAzQzI0QzQwMDI4MjRDNTAwMzI2QworOjEwMjZFMDAwMjRDNjAwMzYwRTAwMDhFRUFGQTIwMDEwOEZCRjAwMThGRgorOjEwMjZGMDAwMDNFMDAwMDgyN0JEMDAyMDhGODMwMDI0M0MwNjA4MDA2QgorOjEwMjcwMDAwOENDNjAwRTg4RjgyMDAzNDMwNjMzRkZGMDAwMzE5ODBERAorOjEwMjcxMDAwMDA0NjEwMjEwMDQzMTAyMTI0MDNGRjgwMzA0NjAwN0YzMworOjEwMjcyMDAwMDA0MzEwMjRBRjQyMDAyODAzNDYxODIxM0MwMjAwMEM0RAorOjEwMjczMDAwMDA2MjMwMjE5MEMyMDAwRDMwQTUwMEZGMDAwMDM4MjE1QQorOjEwMjc0MDAwMzQ0MjAwMTBBMEMyMDAwRDhGODkwMDI4OEY4QTAwMjQxNworOjEwMjc1MDAwOTUyMzAwMzYwMDBBMTM4MjMwNDgwMDAzMjQwMjAwMDE0QQorOjEwMjc2MDAwQTRDMzAwMEUxMTAyMDAwQjI5MDIwMDAyMTA0MDAwMDU1NAorOjEwMjc3MDAwMjQwMjAwMDIxMTAwMDAwQzI0MDMwMDAxMEEwMDA5QjgyMQorOjEwMjc4MDAwMDAwMDE4MjExMTAyMDAwNjAwMDAwMDAwMEEwMDA5QjgyQworOjEwMjc5MDAwMDAwMDE4MjE4Q0MyMDAyQzBBMDAwOUI4MjQ0MzAwMDE1MworOjEwMjdBMDAwOENDMjAwMTQyNDQzMDAwMThDQzIwMDE4MDA0MzEwMkI3QgorOjEwMjdCMDAwNTA0MDAwMDkyNDA3MDAwMTI0MDIwMDI3MTRBMjAwMDM0RQorOjEwMjdDMDAwMDAwMDAwMDAwQTAwMDlDNDI0MDcwMDAxOTUyMjAwM0UxMQorOjEwMjdEMDAwMjQ0MjAwMDFBNTIyMDAzRTAwMEExMzgyMzA0MzAwMDM3OAorOjEwMjdFMDAwMkM2MjAwMDIxMDQwMDAwOTAwODAyODIxMTQ2MDAwMDRCRgorOjEwMjdGMDAwMDAwMDAwMDA5NEMyMDAzNjBBMDAwOUQ0MzA0NkZGRkZGMgorOjEwMjgwMDAwOENDNjAwMzgwQTAwMDlENDAwODAyODIxMDAwMDMwMjEzRAorOjEwMjgxMDAwM0MwNDA4MDAyNDg0NEREODBBMDAwOTIxMDAwMDAwMDA2RgorOjEwMjgyMDAwMjc0OTAxMDA4RDIyMDAwQzk1MjMwMDA2MDEyMDIwMjE1QworOjEwMjgzMDAwMDAwMjE2MDIzMDQ2MDAzRjMwNjNGRkZGMjQwMjAwMjdFQgorOjEwMjg0MDAwMDBDMDI4MjEyOEM3MDAyODEwQzIwMDBFQUY4MzAwMjQzMgorOjEwMjg1MDAwMTBFMDAwMDgyNDAyMDAzMTI0MDIwMDIxMTBDMjAwMDkwNworOjEwMjg2MDAwMjQwMjAwMjUxMEMyMDAwNzkzODIwMDJEMEEwMDA5RjNGQworOjEwMjg3MDAwMDAwMDAwMDAxMEMyMDAwNTkzODIwMDJEMEEwMDA5RjMzOQorOjEwMjg4MDAwMDAwMDAwMDAwQTAwMDk4QzAwMDAwMDAwMEEwMDA2QkVEQgorOjEwMjg5MDAwMDAwMDAwMDA5NTIzMDAwNjkxMjQwMDA1OEQyNTAwMEMwMgorOjEwMjhBMDAwOEQyNjAwMTA4RDI3MDAxODhEMjgwMDFDOEQyOTAwMjBGMgorOjEwMjhCMDAwMjQ0MjAwMDEzQzAxMDgwMEE0MjM0RERFM0MwMTA4MDAzNQorOjEwMjhDMDAwQTAyNDREREQzQzAxMDgwMEFDMjU0REU0M0MwMTA4MDA4RQorOjEwMjhEMDAwQUMyNjRERTgzQzAxMDgwMEFDMjc0REYwM0MwMTA4MDA1NworOjEwMjhFMDAwQUMyODRERjQzQzAxMDgwMEFDMjk0REY4MDNFMDAwMDg4OQorOjEwMjhGMDAwQTM4MjAwMkQ4Rjg3MDAyODI3QkRGRkMwQUZCMzAwMzQwRgorOjEwMjkwMDAwQUZCMjAwMzBBRkIxMDAyQ0FGQjAwMDI4QUZCRjAwMzg3RAorOjEwMjkxMDAwM0MwMjA4MDA4QzQyMDBEMDk0RTMwMDMwMzBCMEZGRkY0RQorOjEwMjkyMDAwMDA1MDEwMDczMDQ1RkZGRjMwNjNGRkZGMDBDMDk4MjFDMworOjEwMjkzMDAwQTdBMjAwMTAzQzExMDgwMDk2MzEwMEM2MTRBMzAwMDY5RgorOjEwMjk0MDAwMzA5MkZGRkY4Q0UyMDAyNDI0NDIwMDMwQUY0MjAwM0M3MgorOjEwMjk1MDAwMEEwMDBBMkM4Q0UyMDAyMDk0RTIwMDMyMzA0MkZGRkY5MQorOjEwMjk2MDAwNTRBMjAwMDgyN0E0MDAxODhDRTIwMDJDMjQ0MjAwMzA1NgorOjEwMjk3MDAwQUY0MjAwM0M4Q0UyMDAyOEFGNDIwMDM4MEEwMDBBM0ExRAorOjEwMjk4MDAwOEY4NDAwMjgyN0E1MDAxMDI3QTYwMDIwMDIyMDM4MjFDOAorOjEwMjk5MDAwMEUwMDA4QjBBN0EwMDAyMDhGQTIwMDE4MjQ0MjAwMzAyQgorOjEwMjlBMDAwQUY0MjAwMzg4RkEyMDAxQ0FGNDIwMDNDOEY4NDAwMjg0OQorOjEwMjlCMDAwM0MwMjAwMDVBRjQyMDAzMDk0ODIwMDM0Mjc0MzA0MDBGQgorOjEwMjlDMDAwMzA0MkZGRkYwMjAyMTAyQjE0NDAwMDA3QUY4MzAwMzA5QgorOjEwMjlEMDAwOTQ4MjAwNTQ5NDgzMDAzNDAyMDIxMDIxMDA0MzEwMjM5NworOjEwMjlFMDAwMEEwMDBBNEUzMDQzRkZGRjk0ODMwMDU0OTQ4MjAwMzQ1RgorOjEwMjlGMDAwMDIyMzE4MjEwMDUwMTAyMzAwNjIxODIzMzA2M0ZGRkZDOAorOjEwMkEwMDAwOTQ4MjAwMTYzMDQyRkZGRjE0NDMwMDAzMDAwMDAwMDBEMAorOjEwMkExMDAwMEEwMDBBNUMyNDAzMDAwMTk0ODIwMDE2MzA0MkZGRkY4MgorOjEwMkEyMDAwMDA0MzEwMkIxMDQwMDAwNThGODIwMDMwOTQ4MjAwMTY2NgorOjEwMkEzMDAwMDA2MjEwMjMzMDQzRkZGRjhGODIwMDMwQUM1MzAwMDA1MAorOjEwMkE0MDAwQUM0MDAwMDRBQzUyMDAwOEFDNDMwMDBDM0MwMjAwMDY1MQorOjEwMkE1MDAwMzQ0MjAwMTBBRjQyMDAzMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwMkE2MDAwMDAwMDAwMDA4RjQyMDAwMDMwNDIwMDEwMTA0MEZGRkRDNworOjEwMkE3MDAwMDAxMDE4QzIwMDY0MTgyMTkwNjUwMDQwMzIwNDAwMDc1RAorOjEwMkE4MDAwMjQwMjAwMDE4RkJGMDAzODhGQjMwMDM0OEZCMjAwMzBCMgorOjEwMkE5MDAwOEZCMTAwMkM4RkIwMDAyODAwODIxMDA0MDA0NTEwMjU1MworOjEwMkFBMDAwMjdCRDAwNDAwM0UwMDAwOEEwNjIwMDQwMjdCREZGQTg0QQorOjEwMkFCMDAwQUZCNjAwNTBBRkI1MDA0Q0FGQjQwMDQ4QUZCMzAwNDQ2MAorOjEwMkFDMDAwQUZCMTAwM0NBRkJGMDA1NEFGQjIwMDQwQUZCMDAwMzg3MAorOjEwMkFEMDAwOEM5MDAwMDAzQzAyMDgwMDhDNDIwMEU4OEY4NjAwMzQ5NQorOjEwMkFFMDAwOTYwMzAwMDIyNDEzRkY4MDAwQzIzMDIxMzA2MzNGRkZCMQorOjEwMkFGMDAwMDAwMzE5ODAwMEMzMzgyMTAwRjMxMDI0OTBCMjAwMDBCNQorOjEwMkIwMDAwQUY0MjAwMkM5MjAzMDAwMjMwRTIwMDdGMDM0MjMwMjFFQQorOjEwMkIxMDAwM0MwMjAwMEUwMEMyODgyMTMwNjMwMEMwMjQwMjAwNDA0NQorOjEwMkIyMDAwMDA4MEE4MjEwMEEwQjAyMTE0NjIwMDI2MDAwMEEwMjE4RQorOjEwMkIzMDAwOEUzNDAwMzg4RTIyMDAxODE0NDAwMDAyMjQwMjAwMDE1NgorOjEwMkI0MDAwQUUyMjAwMTg5MjAyMDAwRDMwNDIwMDIwMTQ0MDAwMTUwMQorOjEwMkI1MDAwOEY4MjAwMzQzQzAzMDgwMDhDNjMwMERDMDAxMjM4QzAxNAorOjEwMkI2MDAwMDAxMjMxNDAwMDQzMTAyMTAwQzczMDIxMDA0NjM4MjFCNworOjEwMkI3MDAwMzBFMzAwMDczQzAyMDA4MDMwRTYwMDc4MDBDMjMwMjVEOAorOjEwMkI4MDAwMDM0MzE4MjEwMEYzMTAyNEFGNDIwODAwMjQ2MzA5MDAxNgorOjEwMkI5MDAwQUY0NjA4MTA4RTIyMDAxODhDNjMwMDA4MDA0MzEwMjFGNQorOjEwMkJBMDAwQUUyMjAwMTg4RTIyMDAyQzhFMjMwMDE4MjQ0MjAwMDEzMQorOjEwMkJCMDAwMDA2MjE4MkIxMDYwMDAzRDAwMDAwMDAwMEEwMDBCMTA5RQorOjEwMkJDMDAwMDAwMDAwMDA5MjAzMDAwMjI0MDJGRkMwMDA0MzEwMjQxMgorOjEwMkJEMDAwMzA0MjAwRkYxNDQwMDAwNTI0MDIwMDAxQUUyMjAwMTgxQworOjEwMkJFMDAwOTYyMjAwMzYwQTAwMEFGOTMwNTRGRkZGOEUyMjAwMTRBNAorOjEwMkJGMDAwMjQ0MjAwMDFBRTIyMDAxODkyMDIwMDAwMDAwMjE2MDBEQQorOjEwMkMwMDAwMDAwMjE2MDMwNDQxMDAyOTAwMDAwMDAwOTYwMjAwMDJBMQorOjEwMkMxMDAwMjdBNDAwMTAwMDgwMjgyMUE3QTIwMDE2OTYwMjAwMDIxNworOjEwMkMyMDAwMjQwNzAwMDEwMDAwMzAyMTMwNDJGRkZGQUY4MjAwMjQ2MgorOjEwMkMzMDAwMEUwMDA5MjFBRkEwMDAxQzk2MDMwMDAyM0MwNDA4MDAwRQorOjEwMkM0MDAwOEM4NDAwRTg4RjgyMDAzNDMwNjMzRkZGMDAwMzE5ODBEQQorOjEwMkM1MDAwMDA0NDEwMjEwMDQzMTAyMTMwNDMwMDdGM0MwNTAwMEM0QworOjEwMkM2MDAwMDA1MzEwMjQwMzQzMTgyMUFGNDIwMDI4MDA2NTE4MjFBNworOjEwMkM3MDAwOTA2MjAwMEQwMDEyMjE0MDMwNDIwMDdGQTA2MjAwMERFMgorOjEwMkM4MDAwM0MwMzA4MDA4QzYzMDBFNDhGODIwMDM0MDA0MzEwMjE3MQorOjEwMkM5MDAwMDA0NDM4MjEzMEUyMDA3RjAzNDIxMDIxMDA0NTEwMjExQQorOjEwMkNBMDAwMDBGMzE4MjRBRjQzMDAyOEFFQTIwMDAwOTIyMjAwMERDQQorOjEwMkNCMDAwMzA0MjAwMTAxMDQwMDAxMzAyQTAyMDIxOEY4MzAwMjgxMgorOjEwMkNDMDAwOEVBNDAwMDAwMjgwMzAyMTk0NjIwMDNFMjQ0MkZGRkY2NworOjEwMkNEMDAwQTQ2MjAwM0U5NDg0MDAwMjk2MjUwMDBFMzA4NEZGRkYxQgorOjEwMkNFMDAwMEUwMDBBMEIzMEE1RkZGRjhGODIwMDI4OTQ0MzAwMzRBQQorOjEwMkNGMDAwOTYyMjAwMEUxNDQzMDAwMzAyQTAyMDIxMjQwMjAwMDFBQQorOjEwMkQwMDAwQTM4MjAwMkMwMkMwMjgyMTBFMDAwODk2MDAwMDAwMDBCQgorOjEwMkQxMDAwOEZCRjAwNTQ4RkI2MDA1MDhGQjUwMDRDOEZCNDAwNDg2MQorOjEwMkQyMDAwOEZCMzAwNDQ4RkIyMDA0MDhGQjEwMDNDOEZCMDAwMzhBOQorOjEwMkQzMDAwMDNFMDAwMDgyN0JEMDA1ODhGODIwMDI4MjdCREZGRDA4MAorOjEwMkQ0MDAwQUZCNDAwMjhBRkIyMDAyMEFGQkYwMDJDQUZCMzAwMjQ1NworOjEwMkQ1MDAwQUZCMTAwMUNBRkIwMDAxODkwNDQwMEQwOTA0MzAwRDEzOAorOjEwMkQ2MDAwMDAwMEEwMjEzMDkyMDBGRkEzQTMwMDEwMzA2MzAwRkZGOQorOjEwMkQ3MDAwOEM1MTAwRDg4QzUzMDBEQzEwNzIwMDJCMjQwMjAwMDEwRgorOjEwMkQ4MDAwM0MwMzA4MDA4QzYzMDBFNDkzQTQwMDEwOEY4MjAwMzQ5RAorOjEwMkQ5MDAwMjQwNkZGODAwMDA0MjE0MDAwNDMxMDIxMDA0NDEwMjEzQworOjEwMkRBMDAwMzA0MzAwN0YwMDQ2MTAyNEFGNDIwMDI4MDM0MzE4MjExRgorOjEwMkRCMDAwM0MwMjAwMEMwMDYyMTgyMThDNjIwMDA0MjdBNDAwMTQ1RAorOjEwMkRDMDAwMjdBNTAwMTAwMjIyODAyMTAyNzAxMDIzMDQ0MDAwMTU2NAorOjEwMkREMDAwQUZBMzAwMTQ5MDYyMDAwRDAwQzIxMDI0MzA0MjAwRkYyNworOjEwMkRFMDAwMTQ0MDAwMDcwMjAwODgyMTkwNjIwMDBEMzQ0MjAwNDAyOAorOjEwMkRGMDAwMEUwMDA4OTZBMDYyMDAwRDBBMDAwQjU1OTNBMjAwMTA2OQorOjEwMkUwMDAwMEUwMDBBNzkyNDE0MDAwMThGODMwMDI4QUM3MDAwRDhDQQorOjEwMkUxMDAwOTNBMjAwMTBBMDYyMDBEMTkzQTIwMDEwMTQ1MkZGRDgxOAorOjEwMkUyMDAwMDAwMDAwMDAyNDAyMDAwMTE2ODIwMDA0OEZCRjAwMkM2NQorOjEwMkUzMDAwMEUwMDA2QkUwMDAwMDAwMDhGQkYwMDJDOEZCNDAwMjhEQgorOjEwMkU0MDAwOEZCMzAwMjQ4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMTgwOAorOjEwMkU1MDAwMDNFMDAwMDgyN0JEMDAzMDI3QkRGRkQ4QUZCMzAwMUMzQQorOjEwMkU2MDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjA3OAorOjEwMkU3MDAwMDA4MDk4MjEwMEUwODAyMTMwQjFGRkZGMEUwMDA1MkI3QgorOjEwMkU4MDAwMzBEMjAwRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwMkU5MDAwOEY4MjAwMjBBQzUxMDAwMEFDNTIwMDA0QUM1MzAwMDhGQgorOjEwMkVBMDAwQUM0MDAwMENBQzQwMDAxMEFDNDAwMDE0QUM0MDAwMTgyQQorOjEwMkVCMDAwM0MwMzA4MDA5NDYzNERCRTAyMDM4MDI1QUM1MDAwMUMwNworOjEwMkVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwNDAwMDFEOQorOjEwMkVEMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ3OQorOjEwMkVFMDAwOEZCMDAwMTAwQTAwMDU1MDI3QkQwMDI4MjdCREZGRTg1RAorOjEwMkVGMDAwQUZCMDAwMTBBRkJGMDAxNDMwQTVGRkZGMzBDNjAwRkYxOQorOjEwMkYwMDAwMDA4MDgwMjEyNDAyMEM4MEFGNDIwMDI0MDAwMDAwMDBEOQorOjEwMkYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwMkYyMDAwMEUwMDBCNjQwMDAwMDAwMDNDMDQwODAwMjQ4NDAwRTA1NAorOjEwMkYzMDAwOEM4MjAwMDAyNDAzRkY4MDhGQkYwMDE0MDIwMjEwMjE0NgorOjEwMkY0MDAwMDA0MzEwMjRBRjQyMDAyNDhDODIwMDAwM0MwMzAwMEE5RQorOjEwMkY1MDAwMDIwMjgwMjEzMjEwMDA3RjAzNTAxMDIxOEZCMDAwMTAzOAorOjEwMkY2MDAwMDA0MzEwMjEyN0JEMDAxODAzRTAwMDA4QUY4MjAwMjhBRAorOjEwMkY3MDAwMjdCREZGRThBRkJGMDAxMDhGNDQwMTQwM0MwMzA4MDBBRAorOjEwMkY4MDAwOEM2MzAwRTAyNDAyRkY4MEFGODQwMDM0MDA4MzE4MjFBQQorOjEwMkY5MDAwMDA2MjEwMjRBRjQyMDAyNDNDMDIwMDA4MDM0MjQwMjE5QQorOjEwMkZBMDAwOTUwNTAwMDIzMDYzMDA3RjNDMDIwMDBBMDM0MzE4MjFBQworOjEwMkZCMDAwMDA2MjE4MjEzMEE1RkZGRjM0MDJGRkZGMDAwMDMwMjExRQorOjEwMkZDMDAwM0MwNzYwMjAxMEEyMDAwNkFGODMwMDI4MjQwMkZGRkYwOAorOjEwMkZEMDAwQTUwMjAwMDI5NDY1MDBENDBFMDAwQjg5MzBBNUZGRkYwNgorOjEwMkZFMDAwOEZCRjAwMTAyNDAyMEM4MDI3QkQwMDE4MDNFMDAwMDhFQQorOjEwMkZGMDAwQUY0MjAwMjQzQzAyMDAwODAzNDI0MDIxOTUwMjAwMDIzNworOjEwMzAwMDAwM0MwQTA4MDA5NTRBMDBDNjMwNDZGRkZGMTRDMDAwMDc3RQorOjEwMzAxMDAwMzQwMkZGRkY4RjgyMDAyODhGODQwMDM0M0MwNzYwMjAzOQorOjEwMzAyMDAwOTQ0NTAwRDQwQTAwMEJGMjMwQTVGRkZGMTBDMjAwMjQyMworOjEwMzAzMDAwOEY4NzAwMjg5NEUyMDA1NDk0RTQwMDE2MzA0NUZGRkY4NworOjEwMzA0MDAwMDBBNjEwMjMwMEE2MTgyQjMwODlGRkZGMTA2MDAwMDQ5MworOjEwMzA1MDAwMzA0NEZGRkYwMEM1MTAyMzAxMjIxMDIzMzA0NEZGRkYzRQorOjEwMzA2MDAwMDA4QTEwMkIxMDQwMDAwQzAxMkExMDIzMjQwMjAwMDFCQQorOjEwMzA3MDAwQTUwMjAwMTYyNDAyRkZGRkE1MDIwMDAyOTRFNTAwRDQ3OQorOjEwMzA4MDAwOEY4NDAwMzQwMDAwMzAyMTMwQTVGRkZGM0MwNzYwMjAxMgorOjEwMzA5MDAwMEEwMDBCODkwMDAwMDAwMDAwNDQxMDJBMTA0MDAwMDhCQworOjEwMzBBMDAwMDAwMDAwMDA5NTAyMDAxNjMwNDIwMDAxMTA0MDAwMDRBQworOjEwMzBCMDAwMDAwMDAwMDA5NzQyMDA3RTI0NDIwMDE0QTUwMjAwMTY4MgorOjEwMzBDMDAwMDNFMDAwMDgwMDAwMDAwMDhGODQwMDI4MjdCREZGRTAxNworOjEwMzBEMDAwQUZCRjAwMTg5NDgyMDAzNDk0ODMwMDNFMTA2MDAwMUE0MQorOjEwMzBFMDAwMzA0OEZGRkY5MzgzMDAyQzI0MDIwMDAxMTQ2MjAwMjc2NAorOjEwMzBGMDAwOEZCRjAwMTg4RjgyMDAyODAwMDgxOEMyMzEwODAwMDcwRgorOjEwMzEwMDAwMDA2MjE4MjEyNDQ3MDAzQTI0NDkwMDU0MjQ0NDAwMjAzNgorOjEwMzExMDAwMjQ0NTAwMzAyNDQ2MDAzNDkwNjIwMDQwMzA0MjAwRkZENQorOjEwMzEyMDAwMDEwMjEwMDczMDQyMDAwMTEwNDAwMDE2OEZCRjAwMTg0NgorOjEwMzEzMDAwMEUwMDA4RUVBRkE5MDAxMDhGODIwMDI4OTQ0MjAwMzRFMAorOjEwMzE0MDAwMEEwMDBDMEIzMDQ4RkZGRjk0ODMwMDM2OTQ4MjAwMzQ1MQorOjEwMzE1MDAwMTA0MzAwMEU4RkJGMDAxODk0ODIwMDM2QTQ4MjAwMzQwMgorOjEwMzE2MDAwOTQ4MjAwNTZBNDgyMDA1NDhDODIwMDJDQUM4MjAwMjRFRAorOjEwMzE3MDAwOTQ4MjAwMzJBNDgyMDAzMDk0ODIwMDNDQTQ4MjAwM0FGRgorOjEwMzE4MDAwOEZCRjAwMTgwQTAwMEJDQjI3QkQwMDIwMDNFMDAwMDgwQQorOjEwMzE5MDAwMjdCRDAwMjAyN0JERkZFOEFGQkYwMDEwOEY0QTAxMDAwOAorOjEwMzFBMDAwM0MwNTA4MDA4Q0E1MDBFMDNDMDIwODAwOTA0MjRERTQ3QworOjEwMzFCMDAwM0MwQzA4MDA5NThDNERERTAxNDUyODIxMzA0QjAwM0YyQQorOjEwMzFDMDAwMzBBMjAwN0YwMzQyNDAyMTM5NjkwMDMyM0MwMjAwMEFFQworOjEwMzFEMDAwMzk2MzAwM0YyQzYzMDAwMTAxMDI0MDIxMkQyOTAwMDFDOQorOjEwMzFFMDAwMjQwMkZGODAwMEEyMjgyNDAxMjM0ODI1QUY4QTAwMzQ0RQorOjEwMzFGMDAwMDA4MDE4MjFBRjQ1MDAyNDAwMDAzMDIxMDA4MDI4MjFFNAorOjEwMzIwMDAwMjQwNzAwMDFBRjg4MDAyODNDMDQwODAwMjQ4NDRERDgxRQorOjEwMzIxMDAwQUY4QzAwMjQxNTIwMDAwN0EzODAwMDJEMjQwMjAwMjA3RAorOjEwMzIyMDAwNTU2MjAwMEYwMDYwMjAyMTM0MDJGRkZGNTU4MjAwMEMyMAorOjEwMzIzMDAwMDA2MDIwMjEyNDAyMDAyMDE1NjIwMDA1MDAwMDAwMDAyQgorOjEwMzI0MDAwOEM2MzAwMTQyNDAyRkZGRjEwNjIwMDA3MDAwMDAwMDBERQorOjEwMzI1MDAwMEUwMDA5MjEwMDAwMDAwMDBBMDAwQzY4MDAwMDAwMDBCOAorOjEwMzI2MDAwMEUwMDA5OEMwMTYwMjgyMTBFMDAwQzAwMDAwMDAwMDBGNworOjEwMzI3MDAwOEZCRjAwMTAyNDAyMEM4MDI3QkQwMDE4MDNFMDAwMDg1NworOjEwMzI4MDAwQUY0MjAwMjQzQzAyMDgwMDhDNDIwMEUwMjdCREZGQTBCMgorOjEwMzI5MDAwQUZCMTAwM0MwMDgyMTAyMTI0MTFGRjgwQUZCRTAwNTg2NgorOjEwMzJBMDAwQUZCNzAwNTRBRkIyMDA0MEFGQjAwMDM4QUZCRjAwNUM2MgorOjEwMzJCMDAwQUZCNjAwNTBBRkI1MDA0Q0FGQjQwMDQ4QUZCMzAwNDQ1OAorOjEwMzJDMDAwMDA1MTEwMjQ4RjQ4MDAyNDhGNDkwMDI4OEY0NzAwMjg4MAorOjEwMzJEMDAwQUY0MjAwMjQzQzAyMDgwMDhDNDIwMEUwMDA4MDkwMjFCNAorOjEwMzJFMDAwMjQwNjAwMDYwMDgyMTAyMTMwNDIwMDdGMDM0MjE4MjE4QworOjEwMzJGMDAwM0MwMjAwMEEwMDYyODAyMTNDMDIwMDFGMzQ0MkZGODAzMQorOjEwMzMwMDAwMDBFMjM4MjQyN0E0MDAxMDI2MDUwMEYwMDEyMkYwMjQ1MgorOjEwMzMxMDAwMDEwMkI4MjQwRTAwMDVCNUFGQTcwMDMwOEZBMjAwMTgzNworOjEwMzMyMDAwQUUwMjAwQzQ4RkEyMDAxQ0FFMDIwMEM4OEZBMjAwMjQwRgorOjEwMzMzMDAwQUUwMjAwQ0M5M0E0MDAxMDkyMDMwMEQxMjQwMkZGODBCRgorOjEwMzM0MDAwMDA4MjEwMjQwMDQzMTAyNTMwNDkwMEZGMzA4MzAwN0ZBNQorOjEwMzM1MDAwMzEyMjAwN0YwMDYyMTAyQTEwNDAwMDA0MDAwMzEwQzBEOAorOjEwMzM2MDAwMDEzMTEwMjYzMDQ5MDBGRjAwMDMxMEMwMDAwMzE5NDA0RQorOjEwMzM3MDAwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDOTIwNDAwRDI1QQorOjEwMzM4MDAwMDI0MjEwMjEwMDQzMTAyMTAwNTExMDI0QUY0MjAwMjhCNgorOjEwMzM5MDAwOTNBMzAwMTAzMDYzMDA3RjAwMDMxMEMwMDAwMzE5NDBBNgorOjEwMzNBMDAwMDA2MjE4MjEzQzAyMDgwMDhDNDIwMERDMDI0MjEwMjExRAorOjEwMzNCMDAwMDA0MzEwMjEzMDQyMDA3RjAzNDIxODIxM0MwMjAwMENFMAorOjEwMzNDMDAwMDA2MjQwMjE4RkEzMDAxNDI0MDJGRkZGMTA2MjAwMzAyRQorOjEwMzNEMDAwMzA5NTAwRkY5M0EyMDAxMTk1MDMwMDE0MzA0NDAwRkZDNAorOjEwMzNFMDAwMzA2M0ZGRkYwMDY0MTgyQjEwNjAwMDBEMDAwMDAwMDAyOAorOjEwMzNGMDAwOTUwNDAwMTQ4RDA3MDAxQzhEMDYwMDE4MzA4NEZGRkYxMworOjEwMzQwMDAwMDA0NDIwMjMwMDA0MjEwMDAwMDAxMDIxMDBFNDM4MjFBMgorOjEwMzQxMDAwMDBFNDIwMkIwMEMyMzAyMTBBMDAwQ0UyMDBDNDMwMjE1RAorOjEwMzQyMDAwOTUwNDAwMTQ4RDA3MDAxQzhEMDYwMDE4MzA4NEZGRkZFMgorOjEwMzQzMDAwMDA4MjIwMjMwMDA0MjEwMDAwMDAxMDIxMDA4MDE4MjFCOAorOjEwMzQ0MDAwMDBDMjMwMjMwMEU0MjAyQjAwQzQzMDIzMDBFMzM4MjNFMworOjEwMzQ1MDAwQUQwNzAwMUNBRDA2MDAxODkzQTIwMDExQTUwMjAwMTREMAorOjEwMzQ2MDAwOTdBMjAwMTJBNTAyMDAxNjhGQTIwMDE0QUQwMjAwMTA1MAorOjEwMzQ3MDAwOEZBMjAwMTRBRDAyMDAwQzkzQTIwMDExQTUwMjAwMjAzRgorOjEwMzQ4MDAwOTdBMjAwMTJBNTAyMDAyMjhGQTIwMDE0QUQwMjAwMjQxMAorOjEwMzQ5MDAwMjQwNkZGODAwMjQ2MTAyNDMyNTYwMDdGQUY0MjAwMjRFQgorOjEwMzRBMDAwMDM1NjE4MjEzQzAyMDAwQTAwNjI4MDIxOEUwMjAwNEM2MworOjEwMzRCMDAwOEZBMjAwMjAzMTI0MDA3RjAwMDQyOEMwQUUwMjAwNTBGQgorOjEwMzRDMDAwOEZBMjAwMjAwMDA0MjE0MDAwODUyODIxQUUwMjAwNzA1OAorOjEwMzREMDAwOTNBMjAwMTAwMTIwODgyMUEyMDIwMDgzOTNBMjAwMTA3MQorOjEwMzRFMDAwQTIwMjAwNzk5MjAyMDA4NTMwNDIwMDNGQTIwMjAwODVDQworOjEwMzRGMDAwM0MwMjA4MDA4QzQyMDBEQzAyNDIxMDIxMDA0NTEwMjFGMQorOjEwMzUwMDAwMDA0NjEwMjRBRjQyMDAyQzNDMDIwODAwOEM0MjAwRTQyQworOjEwMzUxMDAwM0MwMzA4MDA4QzYzMDBEQzAyNDIxMDIxMDA0NDEwMjFBRgorOjEwMzUyMDAwMDA0NjEwMjRBRjQyMDAyODNDMDIwODAwOEM0MjAwRTQxMAorOjEwMzUzMDAwMDI0MzE4MjEwMDY1MTgyMTAyNDIxMDIxMDA0NDEwMjE4NQorOjEwMzU0MDAwMzA0MjAwN0YzMDYzMDA3RjkzQTUwMDEwMDM0MjIwMjFBQQorOjEwMzU1MDAwMDM0MzE4MjEzQzAyMDAwRTAwNjI0MDIxM0MwMjAwMEM5MworOjEwMzU2MDAwMTBCMTAwOEMwMDgyNDgyMTMyMzMwMDdGMTY2MDAwMTlCMAorOjEwMzU3MDAwMjQwNEZGODAzQzAyMDgwMDhDNDIwMERDMDI0MjEwMjEzRgorOjEwMzU4MDAwMDA0NDEwMjRBRjQyMDAyQzNDMDIwODAwOEM0MjAwRTRBRQorOjEwMzU5MDAwM0MwMzA4MDA4QzYzMDBEQzAyNDIxMDIxMDA0NDEwMjQyQworOjEwMzVBMDAwQUY0MjAwMjgzQzAyMDgwMDhDNDIwMEU0MDI0MzE4MjE4QworOjEwMzVCMDAwMzA2MzAwN0YwMjQyMTAyMTMwNDIwMDdGMDM0MjIwMjEwRAorOjEwMzVDMDAwMDM0MzE4MjEzQzAyMDAwRTAwNjI0MDIxM0MwMjAwMEMyMworOjEwMzVEMDAwMDA4MjQ4MjE5MTI0MDAwRDI0MTRGRjgwMDAwMDEwMjE1NgorOjEwMzVFMDAwMDA5NDIwMjVBMTI0MDAwRDk1MDQwMDAyOTUwNTAwMTRFNworOjEwMzVGMDAwOEQwNzAwMUMzMDg0RkZGRjMwQTVGRkZGOEQwNjAwMThFQgorOjEwMzYwMDAwMDA4NTIwMjMwMDA0MjEwMDAwRTQzODIxMDBDMjMwMjE3RAorOjEwMzYxMDAwMDBFNDIwMkIwMEM0MzAyMUFEMDcwMDFDQUQwNjAwMThDQgorOjEwMzYyMDAwOTUwMjAwMDJBNTAyMDAxNEE1MDAwMDE2OEQwMjAwMDhGNAorOjEwMzYzMDAwQUQwMjAwMTA4RDAyMDAwOEFEMDIwMDBDOTUwMjAwMDJFMAorOjEwMzY0MDAwQTUwMjAwMjBBNTAwMDAyMjhEMDIwMDA4QUQwMjAwMjQ4MgorOjEwMzY1MDAwOTEyMjAwMEQzMDQyMDA0MDEwNDAwMDQyMjYyMjAwMDExRAorOjEwMzY2MDAwM0MwMjA4MDA4QzQyMDBFMEEzQjMwMDI4M0MxMDAwMEE5MgorOjEwMzY3MDAwMDI0MjEwMjEwMDU0MTAyNEFGNDIwMDI0M0MwMjA4MDBGMgorOjEwMzY4MDAwOEM0MjAwRTBBMzgwMDAyQzI3QTQwMDJDMDI0MjEwMjFEMQorOjEwMzY5MDAwMzA0MjAwN0YwMzQyMTgyMTAwNzAxODIxOEM2MjAwRDg0QworOjEwMzZBMDAwOEQyNjAwMDQyN0E1MDAyOEFGQTkwMDJDMDA0NjEwMjE3NAorOjEwMzZCMDAwQUM2MjAwRDgwRTAwMEE3OUFGODMwMDI4OTNBMzAwMjhEQgorOjEwMzZDMDAwOEY4MjAwMjgwRTAwMDZCRUEwNDMwMEQxMEUwMDBDMDAyMQorOjEwMzZEMDAwMDAwMDAwMDAwMjU0MTAyNEFGNDIwMDI0M0MwMjA4MDAwNQorOjEwMzZFMDAwOEM0MjAwREMwMDEzMjk0MDAwMTMyMEMwMDBBNDIwMjFEQworOjEwMzZGMDAwMDI0MjEwMjEwMDQ0MTAyMTAwNTQxMDI0QUY0MjAwMkMzQgorOjEwMzcwMDAwM0MwMjA4MDA4QzQyMDBFNDNDMDMwODAwOEM2MzAwRENBRgorOjEwMzcxMDAwMDM1NjMwMjEwMjQyMTAyMTAwNDUxMDIxMDA1NDEwMjQ4QworOjEwMzcyMDAwQUY0MjAwMjgzQzAyMDgwMDhDNDIwMEU0MDI0MzE4MjEwQQorOjEwMzczMDAwMDA2NDE4MjEwMjQyMTAyMTAwNDUxMDIxMzA0MjAwN0YxMAorOjEwMzc0MDAwMzA2MzAwN0YwMzQyMjAyMTAzNDMxODIxM0MwMjAwMEUxNgorOjEwMzc1MDAwMDA2MjQwMjEzQzAyMDAwQzAwRDA4MDIxMDA4MjQ4MjEwMAorOjEwMzc2MDAwMjYyMjAwMDEzMDQzMDA3RjE0NzUwMDA1MzA0NDAwRkYxRAorOjEwMzc3MDAwMjQwM0ZGODAwMjIzMTAyNDAwNDMxMDI2MzA0NDAwRkY1RQorOjEwMzc4MDAwOTNBMjAwMTAwMDgwODgyMTI1MDgwMDI4MTQ0NEZGNzZBOQorOjEwMzc5MDAwMjUyOTAwMjA5M0E0MDAxMDhGQTMwMDE0MjQwMkZGRkYwQQorOjEwMzdBMDAwMTA2MjAwMEEzMDg5MDBGRjI0ODIwMDAxMjQ4MzAwMDE5NgorOjEwMzdCMDAwMzA0MjAwN0YxNDU1MDAwNTMwNjkwMEZGMjQwM0ZGODA2QworOjEwMzdDMDAwMDA4MzEwMjQwMDQzMTAyNjMwNDkwMEZGOTIwMjAwNzg0NQorOjEwMzdEMDAwMzA1MzAwRkYxMTMzMDAzMjAxMjA4ODIxM0MwMjA4MDBFMQorOjEwMzdFMDAwOEM0MjAwREMzMjI1MDA3RjAwMDUyMEMwMDAwNTI5NDAwNgorOjEwMzdGMDAwMDBBNDIwMjEwMjQyMTAyMTI0MDZGRjgwMDA0NDEwMjE1MQorOjEwMzgwMDAwMDA0NjEwMjRBRjQyMDAyQzNDMDMwODAwOEM2MzAwREMwRgorOjEwMzgxMDAwM0MwMjA4MDA4QzQyMDBFNDAyNDMxODIxMDI0MjEwMjFCRAorOjEwMzgyMDAwMDA0NTEwMjEwMDY0MTgyMTAwNDYxMDI0MzA2MzAwN0ZGOQorOjEwMzgzMDAwQUY0MjAwMjgwMzQzMTgyMTNDMDIwMDBFMDA2MjQwMjFFMQorOjEwMzg0MDAwM0MwMjA4MDA4QzQyMDBFNDhEMDYwMDBDMDEwMDIwMjE5RgorOjEwMzg1MDAwMDI0MjEwMjEwMDQ1MTAyMTMwNDIwMDdGMDM0MjE4MjEwRQorOjEwMzg2MDAwM0MwMjAwMEMwMDYyNDgyMTEwQzAwMDBEMDEyMDI4MjFGQworOjEwMzg3MDAwMEUwMDA2RTIwMDAwMDAwMDI0MDJGRjgwMDIyMjE4MjQ0RAorOjEwMzg4MDAwMjYyNDAwMDEwMDYyMjgyNjMwODIwMDdGMTQ1NTAwMDJBMQorOjEwMzg5MDAwMzA4MzAwRkYzMEEzMDBGRjE0NzNGRkQwMDA2MDg4MjE0NQorOjEwMzhBMDAwOEUwMzAwNzQzQzAyN0ZGRjM0NDJGRkZGMDA2MjE4MjQ0NQorOjEwMzhCMDAwQUUwMzAwNzQwRTAwMDcwMzAyNDAyMDIxQUY1NzAwMjQxRQorOjEwMzhDMDAwOEZBMjAwMzBBRjVFMDAyODhGQkYwMDVDOEZCRTAwNTgxMworOjEwMzhEMDAwOEZCNzAwNTQ4RkI2MDA1MDhGQjUwMDRDOEZCNDAwNDg5RQorOjEwMzhFMDAwOEZCMzAwNDQ4RkIyMDA0MDhGQjEwMDNDOEZCMDAwMzhERQorOjEwMzhGMDAwMjdCRDAwNjAwM0UwMDAwOEFGNDIwMDJDMjdCREZGRDhDMQorOjEwMzkwMDAwQUZCMTAwMUNBRkJGMDAyMEFGQjAwMDE4Mjc1MTAxODgzNQorOjEwMzkxMDAwOTIyMjAwMDMyNDA4RkY4MDNDMDMwMDBBMzA0NzAwN0YwNgorOjEwMzkyMDAwQTNBNzAwMTA4RjQ2MDE4MDNDMDIwODAwOEM0MjAwRTBGMworOjEwMzkzMDAwQUY4NjAwMzQwMEMyMjgyMTAwQTgxMDI0QUY0MjAwMjQyMgorOjEwMzk0MDAwOTIyNDAwMDAzMEEyMDA3RjAzNDIxMDIxMDA0MzEwMjE4NgorOjEwMzk1MDAwQUY4MjAwMjgzMDg0MDA3RjI0MDIwMDAyMTQ4MjAwMjVGOAorOjEwMzk2MDAwMDAwNzE5NDAzQzAyMDgwMDhDNDIwMEU0MDBDMjEwMjEwQworOjEwMzk3MDAwMDA0MzI4MjEzMEEyMDA3RjAzNDIxODIxMDBBODEwMjQxMAorOjEwMzk4MDAwQUY0MjAwMjgzQzAyMDAwQzAwNjIxODIxOTA2MjAwMEQzQQorOjEwMzk5MDAwQUZBMzAwMTQwMDQ4MTAyNUEwNjIwMDBEOEZBMzAwMTRFRgorOjEwMzlBMDAwOTA2MjAwMEQzMDQyMDA0MDUwNDAwMDZBOEZCRjAwMjBGRQorOjEwMzlCMDAwOEY4NjAwMjhBMzgwMDAyQzI3QTQwMDE0OENDMjAwRDg3NgorOjEwMzlDMDAwOEM2MzAwMDQyN0E1MDAxMDAwNDMxMDIxMEUwMDBBNzkyMworOjEwMzlEMDAwQUNDMjAwRDg5M0EzMDAxMDhGODIwMDI4MEUwMDA2QkU1MAorOjEwMzlFMDAwQTA0MzAwRDEwRTAwMEMwMDAwMDAwMDAwMEEwMDBFQTM0RQorOjEwMzlGMDAwOEZCRjAwMjAwRTAwMDZDNzAwQzAyMDIxMEUwMDA2RDU5NAorOjEwM0EwMDAwMDAwMDAwMDAzQzAyMDAwODAzNDI4MDIxOTIyMzAwMDFENAorOjEwM0ExMDAwOTIwMjAwN0IxNDQzMDA0RjhGQkYwMDIwOTIyMjAwMDBDRgorOjEwM0EyMDAwMzA0NDAwN0YyNDAyMDAwNDEwODIwMDE3Mjg4MjAwMDUyMQorOjEwM0EzMDAwMTA0MDAwMDYyNDAyMDAwNTI0MDIwMDAzMTA4MjAwMDc0MworOjEwM0E0MDAwOEZCMTAwMUMwQTAwMEVBNDAwMDAwMDAwMTA4MjAwMTJCQQorOjEwM0E1MDAwOEZCRjAwMjAwQTAwMEVBNDhGQjEwMDFDOTIwNTAwODNDNgorOjEwM0E2MDAwOTIwNjAwNzg4RTA3MDA3NDhGODQwMDM0MzBBNTAwRkYyMgorOjEwM0E3MDAwMDAwNzNFMDIzMEM2MDBGRjBFMDAwNzBCMzBFNzAwN0Y1NAorOjEwM0E4MDAwMEEwMDBFQTM4RkJGMDAyMDBFMDAwQzZGOEY4NDAwMzQzRAorOjEwM0E5MDAwMEEwMDBFQTM4RkJGMDAyMDI0MDIwQzgwQUY0MjAwMjQzNgorOjEwM0FBMDAwOTIwMjAwM0UzMDQyMDA0MDEwNDAwMDIwMDAwMDAwMDAyMgorOjEwM0FCMDAwOTIwMjAwM0UwMDAyMTYwMDAwMDIxNjAzMDQ0MTAwMDZCNgorOjEwM0FDMDAwMDAwMDAwMDA4Rjg0MDAzNDBFMDAwNjM4MjQwNTAwOTNBNworOjEwM0FEMDAwMEEwMDBFQTM4RkJGMDAyMDkyMDIwMDNGMjQwMzAwMThBQgorOjEwM0FFMDAwMzA0MjAwRkYxNDQzMDAwQzhGODQwMDM0MjQwNTAwMzk1OQorOjEwM0FGMDAwMEUwMDA1RDAwMDAwMzAyMTBFMDAwMzAyOEY4NDAwMzQzOAorOjEwM0IwMDAwMjQwMjAwMTJBMjAyMDAzRjBFMDAwMzBCOEY4NDAwMzQzNworOjEwM0IxMDAwMEEwMDBFQTM4RkJGMDAyMDI0MDUwMDM2MEUwMDA1RDAzQQorOjEwM0IyMDAwMDAwMDMwMjEwQTAwMEVBMzhGQkYwMDIwMEUwMDAzMDIwOAorOjEwM0IzMDAwOEY4NDAwMzQ5MjAyMDAwNTM0NDIwMDIwQTIwMjAwMDU2NgorOjEwM0I0MDAwMEUwMDAzMEI4Rjg0MDAzNDBFMDAxMDU4OEY4NDAwMzQ1NQorOjEwM0I1MDAwOEZCRjAwMjA4RkIxMDAxQzhGQjAwMDE4MjQwMjBDODA5MgorOjEwM0I2MDAwMjdCRDAwMjgwM0UwMDAwOEFGNDIwMDI0MjdCREZGRTg3RQorOjEwM0I3MDAwQUZCMDAwMTBBRkJGMDAxNDI3NDMwMTAwOTQ2MjAwMDhFQgorOjEwM0I4MDAwMDAwMjE0MDAwMDAyMTQwMzA0NDEwMDAyMDAwMDgwMjExRQorOjEwM0I5MDAwMjQxMDAwMDE5NDYyMDAwODMwNDIwMDgwMTA0MDAwMUE5NgorOjEwM0JBMDAwMDIwMDEwMjE5NDYyMDAwODMwNDIyMDAwMTA0MDAwMTZFQworOjEwM0JCMDAwMDIwMDEwMjE4QzYzMDAxODNDMDIxQzJEMzQ0MjE5RURDOAorOjEwM0JDMDAwMjQwNjAwMDYxMDYyMDAwRjNDMDc2MDIxM0MwMjA4MDAzQQorOjEwM0JEMDAwOEM0MjAwRDQxMDQwMDAwNzhGODIwMDI4OEY4MzAwMjg3OQorOjEwM0JFMDAwOTA2MjAwNjIzMDQyMDAwRjM0NDIwMDQwQTA2MjAwNjJFNgorOjEwM0JGMDAwOEY4MjAwMjg4Rjg0MDAzNDk0NDUwMEQ0MEUwMDBCODlGNgorOjEwM0MwMDAwMzBBNUZGRkYwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTBGRAorOjEwM0MxMDAwMDNFMDAwMDgyN0JEMDAxODI3QkRGRkUwQUZCMTAwMTQ4NgorOjEwM0MyMDAwQUZCMDAwMTBBMzgwMDAyQ0FGQkYwMDE4OEY0NTAxMDA3QgorOjEwM0MzMDAwM0MwMzA4MDA4QzYzMDBFMDI0MDJGRjgwQUY4NTAwMzQ2MQorOjEwM0M0MDAwMDBBMzE4MjEzMDY0MDA3RjAzNDQyMDIxMDA2MjE4MjQ1RgorOjEwM0M1MDAwM0MwMjAwMEEwMDgyMjAyMUFGNDMwMDI0Mjc1MDAxMDBDQgorOjEwM0M2MDAwOEUwMjAwMTQ4QzgzMDBEQ0FGODQwMDI4MDA0MzEwMjNGNAorOjEwM0M3MDAwMTg0MDAwMDQwMDAwODgyMThFMDIwMDE0MEUwMDBCMUM2NgorOjEwM0M4MDAwQUM4MjAwREM5MjAyMDAwQjI0MDMwMDAyMzA0MjAwRkZGMQorOjEwM0M5MDAwMTQ0MzAwMkYwMDAwMDAwMDk2MDIwMDA4MzA0MzAwRkY4QworOjEwM0NBMDAwMjQwMjAwODIxNDYyMDAwNTI0MDIwMDg0MEUwMDA5RDY1QQorOjEwM0NCMDAwMDAwMDAwMDAwQTAwMEYyRjAwMDAwMDAwMTQ2MjAwMDkzRAorOjEwM0NDMDAwMjQwMjAwODE4RjgyMDAyODhGODQwMDM0M0MwNzYwMjEwOQorOjEwM0NEMDAwOTQ0NTAwRDQ5MjA2MDAwNTMwQTVGRkZGMEEwMDBGMUU5MAorOjEwM0NFMDAwMzBDNjAwRkYxNDYyMDAyNzAwMDAwMDAwOTIwMjAwMEFBNAorOjEwM0NGMDAwMzA0MzAwRkYzMDYyMDAyMDEwNDAwMDA0MzA2MjAwNDA3QQorOjEwM0QwMDAwOEY4NDAwMzQwQTAwMEYxQTI0MDYwMDQwMTA0MDAwMDQ3QgorOjEwM0QxMDAwMDAwMzE2MDA4Rjg0MDAzNDBBMDAwRjFBMjQwNjAwNDFBNQorOjEwM0QyMDAwMDAwMjE2MDMwNDQxMDAxNzhGODQwMDM0MjQwNjAwNDI2OQorOjEwM0QzMDAwOEY4MjAwMjgzQzA3NjAxOTk0NDUwMEQ0MzBBNUZGRkYwRQorOjEwM0Q0MDAwMEUwMDBCODkwMDAwMDAwMDBBMDAwRjJGMDAwMDAwMDA4OQorOjEwM0Q1MDAwOTIwMjAwMEIyNDAzMDAxNjMwNDIwMEZGMTA0MzAwMDZCRAorOjEwM0Q2MDAwMDAwMDAwMDA5MjAyMDAwQjI0MDMwMDE3MzA0MjAwRkYwNQorOjEwM0Q3MDAwMTQ0MzAwMDQwMDAwMDAwMDBFMDAwRUE5MDAwMDAwMDAyMworOjEwM0Q4MDAwMDA0MDg4MjEwRTAwMEMwMDAwMDAwMDAwOTIwMjAwMEE5MgorOjEwM0Q5MDAwMzA0MjAwMDgxMDQwMDAwNjI0MDIwQzgwOEY4NTAwMjg2NQorOjEwM0RBMDAwM0MwNDAwMDgwRTAwMTI4NjAzNDQyMDIxMjQwMjBDODBFQgorOjEwM0RCMDAwQUY0MjAwMjQ4RkJGMDAxODAyMjAxMDIxOEZCMDAwMTBFNgorOjEwM0RDMDAwOEZCMTAwMTQwM0UwMDAwODI3QkQwMDIwMjdCREZGRThFNQorOjEwM0REMDAwQUZCRjAwMTRBRkIwMDAxMDhGNTAwMDI0M0MwMzA4MDBBOAorOjEwM0RFMDAwOEM2MzAwRTA4RjQ1MDEwMDI0MDJGRjgwMDBBMzE4MjFBRQorOjEwM0RGMDAwMzA2NDAwN0YwMzQ0MjAyMTAwNjIxODI0M0MwMjAwMEE0MgorOjEwM0UwMDAwMDA4MjIwMjFBRjg1MDAzNEFGNDMwMDI0OTA4MjAwNjJGRAorOjEwM0UxMDAwQUY4NDAwMjgzMDQyMDAwRjM0NDIwMDUwQTA4MjAwNjI3QworOjEwM0UyMDAwM0MwMjAwMUYzNDQyRkY4MDBFMDAwNkJFMDIwMjgwMjRDNgorOjEwM0UzMDAwQUY1MDAwMjQ4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDhDMworOjEwM0U0MDAwMjdCRDAwMTgzQzAyMDgwMDhDNDIwMDIwMTA0MDAwMURENQorOjEwM0U1MDAwMjc0NTAxMDA5MEEzMDAwOTNDMDIwMDA4MDM0MjIwMjFFRAorOjEwM0U2MDAwMjQwMjAwMTg1NDYyMDAwMzNDMDIwMDA4MEEwMDBGNzA4QworOjEwM0U3MDAwMjQwMjAwMDgwMzQyMjAyMTI0MDIwMDE2MTQ2MjAwMDVENworOjEwM0U4MDAwMjQwMjAwMTcyNDAyMDAxMkEwODIwMDNGMEEwMDBGN0FDOQorOjEwM0U5MDAwOTRBNzAwMDg1NDYyMDAwNjk0QTcwMDA4OTM2MjAwMDVFNgorOjEwM0VBMDAwMjQwM0ZGRkUwMDQzMTAyNEEzNjIwMDA1OTRBNzAwMDgyQQorOjEwM0VCMDAwOTBBNjAwMUI4Q0E0MDAwMDk0QTUwMDA2MEEwMDBCNjRDOQorOjEwM0VDMDAwMDAwNzNDMDAwM0UwMDAwODAwMDAwMDAwMjc0NDAxMDA1OAorOjEwM0VEMDAwOTQ4MjAwMDgzMDQ1MDBGRjM4QTMwMDgyMzhBMjAwODQ5NQorOjEwM0VFMDAwMkM2MzAwMDEyQzQyMDAwMTAwNjIxODI1MTA2MDAwMDZCRQorOjEwM0VGMDAwMjQwMjAwODM5MzgyMDAyRDEwNDAwMDBEMDAwMDAwMDA3QQorOjEwM0YwMDAwMEEwMDBDMzMwMDAwMDAwMDE0QTIwMDA1MjRBMkZGODA2OAorOjEwM0YxMDAwOEY0MzAxMDQzQzAyNjAyMDAzRTAwMDA4QUM0MzAwMTQxRQorOjEwM0YyMDAwMzA0MjAwRkYyQzQyMDAwMjEwNDAwMDAzMjQwMjAwMjIxNQorOjEwM0YzMDAwMEEwMDBFRDQwMDAwMDAwMDE0QTIwMDAzMDAwMDAwMDBEQworOjEwM0Y0MDAwMEEwMDBGNDEwMDAwMDAwMDBBMDAwRjVGMDAwMDAwMDA5RgorOjEwM0Y1MDAwOTM2MzAwN0U5MzYyMDA3QTE0NDMwMDA5MDAwMDIwMjFERAorOjEwM0Y2MDAwOTM2MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDQxOQorOjEwM0Y3MDAwMjQwNDAwMDE5MzYyMDA3RTI0NDIwMDAxQTM2MjAwN0VCQgorOjEwM0Y4MDAwMDNFMDAwMDgwMDgwMTAyMThGNDIwMUY4MDQ0MEZGRkU4QQorOjEwM0Y5MDAwMjQwMjAwMDJBRjQ0MDFDMEEzNDIwMUM0M0MwMjEwMDA0RAorOjEwM0ZBMDAwMDNFMDAwMDhBRjQyMDFGODI3QkRGRkU4QUZCRjAwMTBGMworOjEwM0ZCMDAwOTM2MjAwM0YyNDAzMDAwQTMwNDIwMEZGMTQ0MzAwNDY4RQorOjEwM0ZDMDAwMDAwMDAwMDA4RjYzMDA1NDhGNjIwMDRDMTA2MjAwN0Q3RgorOjEwM0ZEMDAwMDM2MDMwMjE5MzYyMDAwMDI0MDMwMDUwMzA0MjAwRkY1MAorOjEwM0ZFMDAwMTQ0MzAwMkYwMDAwMDAwMDhGNDQwMTQwM0MwMjA4MDBGMQorOjEwM0ZGMDAwOEM0MjAwRTAyNDAzRkY4MDAwODIxMDIxMDA0MzEwMjQ0MworOjEwNDAwMDAwQUY0MjAwMjQzQzAyMDgwMDhDNDIwMEUwOEY2NTAwNTQ1RgorOjEwNDAxMDAwM0MwMzAwMEEwMDgyMjAyMTMwODQwMDdGMDM0NDEwMjFFOQorOjEwNDAyMDAwMDA0MzEwMjFBQzQ1MDEwODk3NjIwMDNDOEY2MzAwNENBRgorOjEwNDAzMDAwMzA0MkZGRkYwMDAyMTA0MDAwNjIxODIxQUY2MzAwNUNCNQorOjEwNDA0MDAwOEY2MzAwNTQ4RjY0MDA0Qzk3NjIwMDNDMDA2NDE4MjMxNworOjEwNDA1MDAwMzA0MkZGRkYwMDAzMTg0MzAwMDIxMDQwMDA0MzEwMkFDMworOjEwNDA2MDAwMTA0MDAwMDYwMDAwMDAwMDhGNjIwMDU0OEY2MzAwNEM3NworOjEwNDA3MDAwMDA0MzEwMjMwQTAwMEZGMDAwMDIxMDQzOTc2MjAwM0MzNworOjEwNDA4MDAwMzA0MkZGRkYwMDAyMTA0MEFDQzIwMDY0MjQwMjAwMDE3NQorOjEwNDA5MDAwQTBDMDAwN0NBMEMyMDA4NDI0MDIwQzgwQUY0MjAwMjQ5NworOjEwNDBBMDAwMEUwMDBGQTI4RjQ0MDE0MDEwNDAwMDQ3OEZCRjAwMTA0OAorOjEwNDBCMDAwOEY0MzAxNDA4RjQyMDFGODA0NDBGRkZFMjQwMjAwMDJCQQorOjEwNDBDMDAwQUY0MzAxQzBBMzQyMDFDNDNDMDIxMDAwQUY0MjAxRjg1QgorOjEwNDBEMDAwMEEwMDEwNDA4RkJGMDAxMDkzNjIwMDNGMjQwMzAwMTBCRAorOjEwNDBFMDAwMzA0MjAwRkYxNDQzMDAwNDAwMDAwMDAwOEY0NDAxNDBGMAorOjEwNDBGMDAwMEEwMDEwMkMwMDAwMjgyMTkzNjIwMDNGMjQwMzAwMTZDMAorOjEwNDEwMDAwMzA0MjAwRkYxNDQzMDAwNDI0MDIwMDE0QTM2MjAwM0Y2NQorOjEwNDExMDAwMEEwMDEwM0EwMDAwMDAwMDhGNjIwMDRDOEY2MzAwNTBDQworOjEwNDEyMDAwMDA0MzEwMjMwNDQxMDAyODhGQkYwMDEwOTM2MjAwODFEOAorOjEwNDEzMDAwMjQ0MjAwMDFBMzYyMDA4MTkzNjIwMDgxMkM0MjAwMDRBQQorOjEwNDE0MDAwMTQ0MDAwMTAwMDAwMDAwMDkzNjIwMDNGMjQwMzAwMDRBQworOjEwNDE1MDAwMzA0MjAwRkYxNDQzMDAwNjAwMDAwMDAwOEY0NDAxNDA3RAorOjEwNDE2MDAwOEZCRjAwMTAyNDA1MDA5MzBBMDAwNjM4MjdCRDAwMThGMQorOjEwNDE3MDAwOEY0NDAxNDAyNDA1MDA5MzhGQkYwMDEwMEEwMDA2QTc1QQorOjEwNDE4MDAwMjdCRDAwMTg4RjQ0MDE0MDBFMDAwMzAyMDAwMDAwMDAwQworOjEwNDE5MDAwOEY2MjAwNTQyNDQyRkZGRkFGNjIwMDU0OEY2MjAwNTBEMAorOjEwNDFBMDAwMjQ0MkZGRkZBRjYyMDA1MDBFMDAwMzBCOEY0NDAxNDAxQQorOjEwNDFCMDAwOEY0NDAxNDA4RkJGMDAxMDI0MDUwMDA0MEEwMDAzMTA0MworOjEwNDFDMDAwMjdCRDAwMTg4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMThBRQorOjEwNDFEMDAwOEY0MjAxODg5MzYzMDA3RTAwMDIxNDAyMzA0NDAwRkY4NgorOjEwNDFFMDAwMzA2MzAwRkYxNDY0MDAwRDAwMDAwMDAwOTM2MjAwODA0MworOjEwNDFGMDAwMzA0MjAwRkYxMDQ0MDAwOTAwMDAwMDAwQTM2NDAwODA2QQorOjEwNDIwMDAwOTM2MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDQ3NgorOjEwNDIxMDAwMDAwMDAwMDAwQTAwMDc2RjhGNDQwMTgwQTM2NDAwODA0MworOjEwNDIyMDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkU4QUZCMDAwMTA2OQorOjEwNDIzMDAwQUZCRjAwMTQ5MzYyMDAwNTI0MDMwMDMwMzA0MjAwMzAwOQorOjEwNDI0MDAwMTQ0MzAwODkwMDgwODAyMTNDMDIwODAwOEM0MjAwMjAzOQorOjEwNDI1MDAwMTA0MDAwODAwMjAwMjAyMTBFMDAwNTJCMDAwMDAwMDAwRAorOjEwNDI2MDAwOEY4NTAwMjBBQ0IwMDAwMDkzNjIwMDNFOTM2MzAwM0Y1NgorOjEwNDI3MDAwMzA0MjAwRkYwMDAyMTIwMDMwNjMwMEZGMDA0MzEwMjVBRgorOjEwNDI4MDAwQUNBMjAwMDQ5MzYyMDA4MjAwMDIxNjAwMDAwMjE2MDMzMgorOjEwNDI5MDAwMDQ0MTAwMDUwMDAwMDAwMDNDMDMwODAwOEM2MzAwNDg1NgorOjEwNDJBMDAwMEEwMDEwN0UwMDAwMDAwMDkzNjIwMDNFMzA0MjAwNDA5MQorOjEwNDJCMDAwMTQ0MDAwMDMwMDAwMTgyMTkzNjIwMDgxMzA0MzAwRkY4NgorOjEwNDJDMDAwOTM2MjAwODIwMDAzMUUwMDMwNDIwMEZGMDAwMjE0MDBDRgorOjEwNDJEMDAwMDA2MjE4MjVBQ0EzMDAwODhGNjIwMDQwQUNBMjAwMEM1RAorOjEwNDJFMDAwOEY2MjAwNDhBQ0EyMDAxMDhGNjIwMDRDQUNBMjAwMTQ5OAorOjEwNDJGMDAwOEY2MjAwNTA4RjYzMDA0QzAwNDMxMDIzMDQ0MTAwMDM4MQorOjEwNDMwMDAwMDAwMDAwMDAwQTAwMTA5MjhGNjIwMDRDOEY2MjAwNTA4MworOjEwNDMxMDAwQUNBMjAwMTgzQzAyMDgwMDk0NDI0REJFM0MwM0MwMEIwNgorOjEwNDMyMDAwMDAwMDIwMjEwMDQzMTAyNTBFMDAwNTUwQUNBMjAwMUMwNworOjEwNDMzMDAwOEY2MjAwNTQ4Rjg0MDAyMEFDODIwMDAwOEY2MjAwNTg4RQorOjEwNDM0MDAwQUM4MjAwMDQ4RjYyMDA1Q0FDODIwMDA4OEY2MjAwNjA2NworOjEwNDM1MDAwOEY0MzAwNzQwMDQzMTAyMUFDODIwMDBDOEY2MjAwNjQxNAorOjEwNDM2MDAwQUM4MjAwMTA5NzYzMDA2ODk3NjIwMDZBMDAwMzFDMDAyQgorOjEwNDM3MDAwMzA0MkZGRkYwMDYyMTgyNUFDODMwMDE0OTM2MjAwODI3NAorOjEwNDM4MDAwMjQwMzAwODAzMDQyMDBGRjE0NDMwMDAzMDAwMDAwMDBCQgorOjEwNDM5MDAwMEEwMDEwQzZBQzgwMDAxODhGNjMwMDBDMjQwMjAwMDFENAorOjEwNDNBMDAwMTA2MjAwMEUyNDAyRkZGRjkzNjIwMDNFMzA0MjAwNDA4NAorOjEwNDNCMDAwMTQ0MDAwMEEyNDAyRkZGRjhGNjMwMDBDOEY0MjAwNzQzOAorOjEwNDNDMDAwMDA2MjE4MjMzQzAyMDgwMDAwNjIxMDI0MTQ0MDAwMDIxRQorOjEwNDNEMDAwMDAwMDI4MjEwMDYwMjgyMTAwMDUxMDQzQUM4MjAwMTg0RAorOjEwNDNFMDAwM0MwMjA4MDA5NDQyNERCRTNDMDNDMDBDMDAwMDIwMjE1QQorOjEwNDNGMDAwMDA0MzEwMjU4RjgzMDAyMDBFMDAwNTUwQUM2MjAwMUM4NgorOjEwNDQwMDAwOEY2MjAwMTg4RjgzMDAyMDNDMDUwODAwOTRBNTREQkVFNAorOjEwNDQxMDAwMjQwNDAwMDFBQzYyMDAwMEFDNjAwMDA0OEY2NjAwNkNGNAorOjEwNDQyMDAwM0MwMjQwMEQwMEEyMjgyNUFDNjYwMDA4OEY2MjAwREMyQgorOjEwNDQzMDAwQUM2MjAwMENBQzYwMDAxMDkzNjIwMDA1MDAwMjE2MDAzNAorOjEwNDQ0MDAwQUM2MjAwMTRBQzYwMDAxODBFMDAwNTUwQUM2NTAwMUM5NgorOjEwNDQ1MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwQTM2MDAwMDU2MAorOjEwNDQ2MDAwMEEwMDA0QjkyN0JEMDAxODhGQkYwMDE0OEZCMDAwMTBEOAorOjEwNDQ3MDAwMDNFMDAwMDgyN0JEMDAxODk3NDIwMDdDMzBDNjAwRkYwQgorOjEwNDQ4MDAwQTA4NjAwODQzMDQ3RkZGRjI0MDIwMDA1MTRDMjAwMEIwMQorOjEwNDQ5MDAwMjRFMzQ2NTA5MEEyMDExMjJDNDIwMDA3MTA0MDAwMDc2RQorOjEwNDRBMDAwMjRFMzBBMDA5MEEzMDExMjI0MDIwMDE0MDA2MjEwMDQwNQorOjEwNDRCMDAwMDBFMjEwMjEwQTAwMTBGRTMwNDdGRkZGMzA2N0ZGRkZDNworOjEwNDRDMDAwMDNFMDAwMDhBNDg3MDAxNEFDODcwMDRDOENBMjAxMDgwQworOjEwNDREMDAwMDA4MDQwMjEwMEEwNDgyMTAwRTIxMDIzMzBDNjAwRkZFOAorOjEwNDRFMDAwMTg0MDAwMDM5M0FBMDAxMzI0RTJGRkZDQUNBMjAxMDhDOQorOjEwNDRGMDAwMzBDMjAwMDExMDQwMDAwODAwMDAwMDAwOEQwMjAwNTA5MgorOjEwNDUwMDAwMDBFMjEwMjMwNDQxMDAxMzI0MDYwMDA1OEQwMjAwNTQyQworOjEwNDUxMDAwMTBFMjAwMTAwMDAwMDAwMDhEMDIwMDU0MTRFMjAwMUFBNgorOjEwNDUyMDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMEQ4MzA0MjAwMjAwRAorOjEwNDUzMDAwMTA0MDAwMEEyNDAyMDAwMTkxMDMwMDc4OTEwMjAwODNEOAorOjEwNDU0MDAwMTQ0MzAwMDYyNDAyMDAwMTAxMDAyMDIxMDEyMDI4MjEzQgorOjEwNDU1MDAwMjQwNjAwMDQwQTAwMTBFQzAwMDAwMDAwQTEwMDAwODQwMgorOjEwNDU2MDAwMTE0MDAwMDlBNTAyMDAxNDhGNDMwMTAwOEY0MjAxRjg5OQorOjEwNDU3MDAwMDQ0MEZGRkUyNDAyMDAwMkFGNDMwMUMwQTM0MjAxQzQ3NQorOjEwNDU4MDAwM0MwMjEwMDBBRjQyMDFGODAzRTAwMDA4MDAwMDAwMDAwOAorOjEwNDU5MDAwMjdCREZGRTg4RkE5MDAyOEFGQkYwMDEwMDA4MDQwMjE5MQorOjEwNDVBMDAwMDBFOTE4MjMxODYwMDA3MzMwQzYwMEZGQTA4MDAwN0M2QgorOjEwNDVCMDAwQTA4MDAwODE4Q0EyMDEwODAwRTIxMDIzMDQ0MDAwNEQ3RAorOjEwNDVDMDAwMDAwMDAwMDA4QzgyMDA1MDk0ODMwMDNDOEM4NDAwNjRDNgorOjEwNDVEMDAwMDA0NzQ4MjMzMDYzRkZGRjAxMjMxODIxMDA4MzIwMkI2RAorOjEwNDVFMDAwMTA4MDAwMDQwMDAwMDAwMDhEMDIwMDY0MEEwMDExNEZEQQorOjEwNDVGMDAwMDBFMjEwMjE5NTAyMDAzQzMwNDJGRkZGMDEyMjEwMjExMQorOjEwNDYwMDAwMDBFMjEwMjFBRDAyMDA1Qzk1MDIwMDNDOEQwMzAwNUNDRAorOjEwNDYxMDAwMzA0MkZGRkYwMDAyMTA0MDAwRTIxMDIxMDA0MzEwMkI0NworOjEwNDYyMDAwMTA0MDAwMDMwMDAwMDAwMDBBMDAxMTVFOEQwMjAwNUNEMworOjEwNDYzMDAwOTUwMjAwM0MzMDQyRkZGRjAwMDIxMDQwMDBFMjEwMjFEMgorOjEwNDY0MDAwQUQwMjAwNUNBMTAwMDA4NEFEMDcwMDRDOENBMjAxMDgwMworOjEwNDY1MDAwMDBFMjEwMjMxODQwMDAwMjI0RTJGRkZDQUNBMjAxMDg5MworOjEwNDY2MDAwMzBDMjAwMDExMDQwMDAwQTAwMDAwMDAwOEQwMjAwNTAxRQorOjEwNDY3MDAwMDBFMjEwMjMwNDQxMDAwNDAxMDAyMDIxOEQwMjAwNTRCNworOjEwNDY4MDAwMTRFMjAwMDMwMDAwMDAwMDBBMDAxMTgwMjQwNjAwMDU2NworOjEwNDY5MDAwOEQwMjAwNTQxNEUyMDA0NzhGQkYwMDEwM0MwMjA4MDA1NgorOjEwNDZBMDAwOEM0MjAwRDgzMDQyMDAyMDEwNDAwMDBBMjQwMjAwMDE1MQorOjEwNDZCMDAwOTEwMzAwNzg5MTAyMDA4MzE0NDMwMDA2MjQwMjAwMDE1NAorOjEwNDZDMDAwMDEwMDIwMjEyNDA2MDAwNDhGQkYwMDEwMEEwMDEwRUMxNgorOjEwNDZEMDAwMjdCRDAwMThBMTAwMDA4NEE1MDIwMDE0OEY0MzAxMDAyQgorOjEwNDZFMDAwOEY0MjAxRjgwNDQwRkZGRTI0MDIwMDAyMEEwMDExQTVENworOjEwNDZGMDAwMDAwMDAwMDA4QzgyMDA1QzAwNDkxMDIzMDA0MzEwMkI1NgorOjEwNDcwMDAwNTQ0MDAwMDFBQzg3MDA1Qzk1MDIwMDNDMzA0MkZGRkY0MgorOjEwNDcxMDAwMDA2MjEwMkIxNDQwMDAwNzI0MDIwMDAyOTUwMjAwM0NBNgorOjEwNDcyMDAwOEQwMzAwNUMzMDQyRkZGRjAwNjIxODIxQUQwMzAwNUM4NgorOjEwNDczMDAwMjQwMjAwMDJBRDA3MDA0Q0ExMDIwMDg0MEUwMDBGQTI2QgorOjEwNDc0MDAwOEY0NDAxMDAxMDQwMDAxQjhGQkYwMDEwOEY0MzAxMDBGOQorOjEwNDc1MDAwOEY0MjAxRjgwNDQwRkZGRTI0MDIwMDAyQUY0MzAxQzA3MworOjEwNDc2MDAwQTM0MjAxQzQzQzAyMTAwMEFGNDIwMUY4MEEwMDExQkI5MQorOjEwNDc3MDAwOEZCRjAwMTAzMEMyMDAxMDEwNDAwMDBFOEZCRjAwMTAxRAorOjEwNDc4MDAwOEM4MzAwNUM5NDgyMDAzQzAwNjkxODIzMzA0MkZGRkY1OAorOjEwNDc5MDAwMDA2MjE4MjEzQzAyM0ZGRjM0NDRGRkZGMDA4MzEwMkJDRQorOjEwNDdBMDAwNTQ0MDAwMDEwMDgwMTgyMTAxMjMxMDIxQUQwMjAwNUM1QgorOjEwNDdCMDAwOEZCRjAwMTAwM0UwMDAwODI3QkQwMDE4MjdCREZGRThFOQorOjEwNDdDMDAwOEZBQTAwMjhBRkJGMDAxMDAwODA0MDIxMDBFQTQ4MjNENAorOjEwNDdEMDAwMTkyMDAwMjEzMEM2MDBGRjhDODMwMDVDOEM4MjAwNjRBRAorOjEwNDdFMDAwMDA2QTE4MjMwMDQzMTAyQjUwNDAwMDEwMDA2OTE4MjE2NAorOjEwNDdGMDAwOTRBMjAxMTAwMTIyMTAyMUE0QTIwMTEwOTRBMjAxMTA4MAorOjEwNDgwMDAwMzA0MkZGRkYwMDQzMTAyQjE0NDAwMDBBM0MwMjNGRkZFMAorOjEwNDgxMDAwOTRBMjAxMTAwMDQzMTAyM0E0QTIwMTEwOTQ4MjAwM0MzMgorOjEwNDgyMDAwMzA0MkZGRkYwQTAwMTFEQTAwNjIxODIxQTRBMDAxMTAzMworOjEwNDgzMDAwM0MwMjNGRkYzNDQ0RkZGRjAwODMxMDJCNTQ0MDAwMDEzMworOjEwNDg0MDAwMDA4MDE4MjEwMDY3MTAyMUFEMDIwMDVDQTEwMDAwN0NFRgorOjEwNDg1MDAwMEEwMDEyMjJBMTAwMDA4MTMwQzIwMDEwMTA0MDAwM0M2QQorOjEwNDg2MDAwMDAwMDAwMDA4QzgyMDA1MDAwNEExMDIzMTg0MDAwMzhERAorOjEwNDg3MDAwMDAwMDAwMDA5MDgyMDA3QzI0NDIwMDAxQTA4MjAwN0NBNQorOjEwNDg4MDAwOTA4MjAwN0MzQzAzMDgwMDhDNjMwMDI0MzA0MjAwRkZDRgorOjEwNDg5MDAwMDA0MzEwMkIxNDQwMDA1QzhGQkYwMDEwOENBMjAxMDg1NQorOjEwNDhBMDAwMDBFMjEwMjMxODQwMDA1ODAwMDAwMDAwOEM4MzAwNTRFMAorOjEwNDhCMDAwOTQ4MjAwM0MwMDZBMTgyMzMwNDJGRkZGMDAwMzE4NDMzMworOjEwNDhDMDAwMDAwMjEwNDAwMDQzMTAyQTEwNDAwMDA1MDAwMDAwMDBDNAorOjEwNDhEMDAwOEM4MjAwNTQwMDRBMTAyMzBBMDAxMjA5MDAwMjEwNDM3RgorOjEwNDhFMDAwOTQ4MjAwM0MzMDQyRkZGRjAwMDIxMDQwQUQwMjAwNjRBMQorOjEwNDhGMDAwOTUwMjAwM0M4RDA0MDA2NDk1MDMwMDNDMzA0MkZGRkZBQworOjEwNDkwMDAwMDAwMjEwNDAwMDgyMjAyMTMwNjNGRkZGMDA4MzE4MjE0NQorOjEwNDkxMDAwMDE0MzEwMjFBRDAyMDA1QzhEMDIwMDU0QUNBMjAxMDhERAorOjEwNDkyMDAwMjQwMjAwMDJBMTAyMDA4NDBFMDAwRkEyOEY0NDAxMDBBNQorOjEwNDkzMDAwMTA0MDAwMzU4RkJGMDAxMDhGNDMwMTAwOEY0MjAxRjhGNworOjEwNDk0MDAwMDQ0MEZGRkUyNDAyMDAwMjBBMDAxMjRCMDAwMDAwMDA5NworOjEwNDk1MDAwQUQwNzAwNEM4Q0EyMDEwODAwRTIxMDIzMTg0MDAwMDJCMQorOjEwNDk2MDAwMjRFMkZGRkNBQ0EyMDEwODMwQzIwMDAxMTA0MDAwMEFBMgorOjEwNDk3MDAwMDAwMDAwMDA4RDAyMDA1MDAwRTIxMDIzMDQ0MTAwMDRGQQorOjEwNDk4MDAwMDEwMDIwMjE4RDAyMDA1NDE0RTIwMDAzMDAwMDAwMDAwOQorOjEwNDk5MDAwMEEwMDEyNDIyNDA2MDAwNThEMDIwMDU0MTRFMjAwMUE5NworOjEwNDlBMDAwOEZCRjAwMTAzQzAyMDgwMDhDNDIwMEQ4MzA0MjAwMjAyQgorOjEwNDlCMDAwMTA0MDAwMEEyNDAyMDAwMTkxMDMwMDc4OTEwMjAwODM1NAorOjEwNDlDMDAwMTQ0MzAwMDYyNDAyMDAwMTAxMDAyMDIxMjQwNjAwMDRGMworOjEwNDlEMDAwOEZCRjAwMTAwQTAwMTBFQzI3QkQwMDE4QTEwMDAwODQ1MgorOjEwNDlFMDAwQTUwMjAwMTQ4RjQzMDEwMDhGNDIwMUY4MDQ0MEZGRkUyRQorOjEwNDlGMDAwMjQwMjAwMDJBRjQzMDFDMEEzNDIwMUM0M0MwMjEwMDBFNAorOjEwNEEwMDAwQUY0MjAxRjg4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMTg3NworOjEwNEExMDAwOEZBQTAwMTA4QzgyMDA1MDAwODA0MDIxMzBDNjAwRkYxOQorOjEwNEEyMDAwMDA0QTEwMjMwMEEwNDgyMTE4NDAwMDA3MDBFMDE4MjE4OAorOjEwNEEzMDAwMjQwMjAwMDFBMDgwMDA4NEEwQTAwMTEyQTQ4MjAwMTQxRQorOjEwNEE0MDAwMEEwMDExQkRBRkFBMDAxMEEwODAwMDgxQUQwNzAwNEM4NAorOjEwNEE1MDAwOENBMjAxMDgwMEUyMTAyMzE4NDAwMDAyMjRFMkZGRkNBRgorOjEwNEE2MDAwQUNBMjAxMDgzMEMyMDAwMTEwNDAwMDA4MDAwMDAwMDBBNAorOjEwNEE3MDAwOEQwMjAwNTAwMDYyMTAyMzA0NDEwMDEzMjQwNjAwMDUzQgorOjEwNEE4MDAwOEQwMjAwNTQxMDYyMDAxMDAwMDAwMDAwOEQwMjAwNTRERQorOjEwNEE5MDAwMTQ2MjAwMTEwMDAwMDAwMDNDMDIwODAwOEM0MjAwRDhBMworOjEwNEFBMDAwMzA0MjAwMjAxMDQwMDAwQTI0MDIwMDAxOTEwMzAwNzhFNworOjEwNEFCMDAwOTEwMjAwODMxNDQzMDAwNjI0MDIwMDAxMDEwMDIwMjExQQorOjEwNEFDMDAwMDEyMDI4MjEyNDA2MDAwNDBBMDAxMEVDMDAwMDAwMDA0OAorOjEwNEFEMDAwQTEwMDAwODRBNTAyMDAxNDAzRTAwMDA4MDAwMDAwMDAwQgorOjEwNEFFMDAwMjdCREZGRTBBRkJGMDAxODI3NDIwMTAwOTA0NjAwMEEzMworOjEwNEFGMDAwOEM0ODAwMTQ4QzhCMDA0QzkwODIwMDg0MzBDOTAwRkZERAorOjEwNEIwMDAwMDE2ODE4MjMzMDRBMDBGRjFDNjAwMDFBMkQ0NjAwMDY3OQorOjEwNEIxMDAwMjQwMjAwMDEwMTQyMTAwNDEwQzAwMDE2MzA0MzAwMDNCQgorOjEwNEIyMDAwMDEyMDMwMjEwMTAwMzgyMTE0NjAwMDA3MzA0QzAwMENCNgorOjEwNEIzMDAwMTU4MDAwMDkzMDQyMDAzMDE0NDAwMDBCOEZCRjAwMTg3MAorOjEwNEI0MDAwMEEwMDEyQUMwMDAwMDAwMDBFMDAxMUJEQUZBQjAwMTA1NworOjEwNEI1MDAwMEEwMDEyQUM4RkJGMDAxODBFMDAxMTMyQUZBQjAwMTA2QworOjEwNEI2MDAwMEEwMDEyQUM4RkJGMDAxOEFGQUIwMDEwMEUwMDEyNTIzQgorOjEwNEI3MDAwQUZBQTAwMTQ4RkJGMDAxODAzRTAwMDA4MjdCRDAwMjA3MworOjEwNEI4MDAwMjQwMjAwMDNBMDgyMDA4NDhDODIwMDU0MDNFMDAwMDgwOQorOjEwNEI5MDAwQUNBMjAxMDgzQzAyMDAwODAzNDIxODIxOTA2MjAwODE4NworOjEwNEJBMDAwMjQwNjAwNDMzQzA3NjAxOTI0NDIwMDAxQTA2MjAwODFGMgorOjEwNEJCMDAwOTA2MzAwODEzQzAyMDgwMDhDNDIwMEMwMzA2MzAwRkYxQgorOjEwNEJDMDAwMTQ2MjAwMTAyNDAzRkY4MDNDMDIwODAwOEM0MjAwRTBDNQorOjEwNEJEMDAwMDA4MjEwMjEwMDQzMTAyNEFGNDIwMDI0M0MwMjA4MDA1MAorOjEwNEJFMDAwOEM0MjAwRTAzQzAzMDAwQTAwODIxMDIxMzA0MjAwN0YyQQorOjEwNEJGMDAwMDM0MjEwMjEwMDQzMTAyMTk0NDUwMEQ0MEEwMDBCODk4MAorOjEwNEMwMDAwMzBBNUZGRkYwM0UwMDAwODAwMDAwMDAwMjdCREZGRTAyMworOjEwNEMxMDAwQUZCRjAwMThBRkIxMDAxNEFGQjAwMDEwOEY0MjAxODBEOQorOjEwNEMyMDAwMDA4MDgwMjEwMEEwODgyMTBFMDAxMkIzMDA0MDIwMjFDNgorOjEwNEMzMDAwQTIwMDAwODQ4RTAyMDA1NDhGQkYwMDE4OEZCMDAwMTBCNQorOjEwNEM0MDAwQUUyMjAxMDg4RkIxMDAxNDAzRTAwMDA4MjdCRDAwMjA0OAorOjEwNEM1MDAwMjdCREZGRTAzQzAyMDAwOEFGQjAwMDEwQUZCRjAwMTg1NgorOjEwNEM2MDAwQUZCMTAwMTQwMzQyODAyMThGNTEwMTQwOTIwMzAwODRCMAorOjEwNEM3MDAwOEUwNDAwNTA4RTAyMDA0QzE0ODIwMDQwMzA2NjAwRkYwQgorOjEwNEM4MDAwM0MwMjA4MDA4QzQyMDBFMDI0MDNGRjgwMDIyMjEwMjEzNQorOjEwNEM5MDAwMDA0MzEwMjRBRjQyMDAyNDNDMDIwODAwOEM0MjAwRTA5NAorOjEwNENBMDAwOTc0NDAwN0M5MjA1MDA4MTAyMjIxMDIxMzA0MjAwN0Y0RgorOjEwNENCMDAwMDM0MjE4MjEzQzAyMDAwQTAwNjIxODIxMTRBMDAwMEJENAorOjEwNENDMDAwMzA4NEZGRkYyNDAyMDAwNTU0QzIwMDE0MjQ4MjA1REM1NgorOjEwNENEMDAwOTA2MjAxMTIyNDQyMDAwMUEwNjIwMTEyMjQwMjBDODBBMQorOjEwNENFMDAwQUY0MjAwMjQwQTAwMTMwQjI0MDIwMDA1QTA2MDAxMTI0OQorOjEwNENGMDAwMjQwMjAwMDUxNEMyMDAwOTI0ODIwNURDOTIwMjAwODEwRQorOjEwNEQwMDAwMkM0MjAwMDc1MDQwMDAwNTI0ODIwQTAwOTIwMzAwODFEMworOjEwNEQxMDAwMjQwMjAwMTQwMDYyMTAwNDAwODIxMDIxMzA0NEZGRkZCRQorOjEwNEQyMDAwQTYwNDAwMTQwRTAwMTJCMzAyMjAyMDIxOTYwMjAwM0NCQgorOjEwNEQzMDAwOEUwMzAwNEMwMjIwMjAyMTMwNDJGRkZGMDAwMjEwNDA3MQorOjEwNEQ0MDAwMDA2MjE4MjEwRTAwMDMwMkFFMDMwMDVDOTIwMjAwN0Q5NworOjEwNEQ1MDAwMDIyMDIwMjEzNDQyMDA0MDBFMDAwMzBCQTIwMjAwN0RGRAorOjEwNEQ2MDAwOEY0MjAxRjgwNDQwRkZGRTI0MDIwMDAyQUY1MTAxQzA0RgorOjEwNEQ3MDAwQTM0MjAxQzQzQzAyMTAwMEFGNDIwMUY4OEZCRjAwMThFQgorOjEwNEQ4MDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA5MQorOjEwNEQ5MDAwMDgwMDBEOTgwODAwMERFMDA4MDAwRTIwMDgwMDBFNkNCOQorOjA0NERBMDAwMDgwMDBFQTA1OQorOjBDNERBNDAwMEEwMDAwMjIwMDAwMDAwMDAwMDAwMDAwRDcKKzoxMDREQjAwMDAwMDAwMDBENjM3MDM1MkUzMDJFMzA2QTM2MDAwMDAwODIKKzoxMDREQzAwMDA1MDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKKzoxMDRERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKKzoxMDRERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwQTMKKzoxMDRERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKKzoxMDRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKKzoxMDRFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOTEKKzoxMDRFMjAwMDAwMDAwMDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKKzoxMDRFMzAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBENDUKKzoxMDRFNDAwMDNDMDIwODAwMjQ0MjVBQzQzQzAzMDgwMDI0NjM2MTkwRDkKKzoxMDRFNTAwMEFDNDAwMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0REUKKzoxMDRFNjAwMDNDMUQwODAwMzdCRDdGRkMwM0EwRjAyMTNDMTAwODAwNkEKKzoxMDRFNzAwMDI2MTAwMDg4M0MxQzA4MDAyNzlDNUFDNDBFMDAwMUE2N0UKKzoxMDRFODAwMDAwMDAwMDAwMDAwMDAwMEQyN0JERkZFODNDMDk2MDE4OEQKKzoxMDRFOTAwMEFGQkYwMDEwOEQyQzUwMDAyNDBERkY3RjI0MDgwMDMxN0YKKzoxMDRFQTAwMDAxOEQ1ODI0MzU2QTM4MEMyNDA3MEMwMDNDMUE4MDAwMDgKKzoxMDRFQjAwMEFEMkE1MDAwM0MwNDgwMEFBRjQ4MDAwODNDMUI4MDA4MjMKKzoxMDRFQzAwMEFGNDcwMDI0MEUwMDA5MzVBRjg0MDAxMDBFMDAwOEY4MkIKKzoxMDRFRDAwMDAwMDAwMDAwMEUwMDA4NDUwMDAwMDAwMDBFMDAxMkRDN0IKKzoxMDRFRTAwMDAwMDAwMDAwM0MwNDYwMTY4Qzg1MDAwMDNDMDZGRkZGQkIKKzoxMDRFRjAwMDNDMDI1MzUzMDBBNjE4MjQxMDYyMDA0NzM0ODY3QzAwRkQKKzoxMDRGMDAwMDk0QzIwMUYyQTc4MDAwMkMxMDQwMDAwM0E3ODAwMENDQkYKKzoxMDRGMTAwMDM4NTgxRTFFQTc5ODAwMkM5NEMyMDFGODEwNDAwMDA0QjcKKzoxMDRGMjAwMDk3ODMwMENDMzg1OTFFMUVBNzk5MDBDQzk3ODMwMENDREMKKzoxMDRGMzAwMDJDN0YwMDY3NTNFMDAwMDEyNDAzMDA2Njk3ODQwMDJDNTcKKzoxMDRGNDAwMDJDODIwNDAxMTQ0MDAwMDIwMDYwMjgyMTI0MDQwNDAwODMKKzoxMDRGNTAwMDNDMDc2MDAwOENFOTA0MzgyNDAzMTAzQzMxMjhGRkZGMzMKKzoxMDRGNjAwMDExMDMwMDFGMzBCOUZGRkY1NzIwMDAxMEEzODAwMENFQUYKKzoxMDRGNzAwMDI0MDIwMDUwQTM4MjAwQ0U5MzlGMDBDRTUzRTAwMDBGODYKKzoxMDRGODAwMEE3ODUwMENDQTc4MDAwQ0M5Nzg1MDBDQzhGQkYwMDEwRjAKKzoxMDRGOTAwMEE3ODAwMDJDQTc4MDAwMzRBNzgwMDBFNjNDMDEwODAwMTEKKzoxMDRGQTAwMEFDMjUwMDgwMDNFMDAwMDgyN0JEMDAxODkzOUYwMENFQzkKKzoxMDRGQjAwMDU3RTBGRkY1QTc4MDAwQ0NBNzg1MDBDQzk3ODUwMENDRjMKKzoxMDRGQzAwMDhGQkYwMDEwQTc4NDAwMkNBNzgwMDAzNEE3ODAwMEU2QzQKKzoxMDRGRDAwMDNDMDEwODAwQUMyNTAwODAwM0UwMDAwODI3QkQwMDE4NTQKKzoxMDRGRTAwMEEzODAwMENFOENDQjAwM0MzMTZBMDAwMTExNDAwMDBFNDIKKzoxMDRGRjAwMDAwMDAwMDAwMzBBN0ZGRkYxMEUwRkZERTI0MDIwMDUwOTkKKzoxMDUwMDAwMDhDQ0MwMEM4MzE4NjAwMDExNEMwRkZEQzkzOUYwMENFMTkKKzoxMDUwMTAwMDBBMDAwMDc0MjQwMjAwNTE4QzhGMDAwNDNDMEU2MDAwRDIKKzoxMDUwMjAwMDBBMDAwMDU3MDFFRTMwMjE4Q0VGMDgwODI0MEQ1NzA4QzQKKzoxMDUwMzAwMDAwMEY3NDAyMTFDRDAwMDQzMEI4RkZGRjI0MDUwMDY2OTQKKzoxMDUwNDAwMDBBMDAwMDc1MjQwNDA0MDAxNzAwRkZDQzkzOUYwMENFRDMKKzoxMDUwNTAwMDBBMDAwMDc0MjQwMjAwNTA4Rjg2MDAxMDMwODlGRkZGODAKKzoxMDUwNjAwMDAwMDkzOTQwOENDMzAwMTAzQzA4MDA1MDAwRTgyMDI1OUUKKzoxMDUwNzAwMEFGNDMwMDM4OENDNTAwMTQyNzQyMDQwMEFGODIwMDFDRTcKKzoxMDUwODAwMEFGNDUwMDNDQUY0NDAwMzAwMDAwMDAwMDAwMDAwMDAwQ0QKKzoxMDUwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDUwQTAwMDAwMDAwMDAwMDAwMDAwMDA4RjRCMDAwMDMxNkEwMDIwNkIKKzoxMDUwQjAwMDExNDBGRkZEMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwQjgKKzoxMDUwQzAwMDhGODQwMDEwOTQ4QTAwMUE4Qzg3MDAyNDMxNDlGRkZGRDYKKzoxMDUwRDAwMDAwMDk0MEMwMDBFODMwMjFBRjQ2MDAzQzhDODUwMDI0MjgKKzoxMDUwRTAwMDhGNDMwMDNDMDBBMzEwMjMxODQwMDAyOTAwMDAwMDAwNUIKKzoxMDUwRjAwMDhDOEIwMDIwMjU2MjAwMDEzQzBEMDA1MDM1QUMwMDA4NkYKKzoxMDUxMDAwMEFGNDIwMDM4QUY0QzAwMzAwMDAwMDAwMDAwMDAwMDAwNEIKKzoxMDUxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKKzoxMDUxMjAwMDAwMDAwMDAwMDAwMDAwMDA4RjRGMDAwMDMxRUUwMDIwNjIKKzoxMDUxMzAwMDExQzBGRkZEMDAwMDAwMDA4RjRBMDQwMDNDMDgwMDIwNjEKKzoxMDUxNDAwMEFDOEEwMDEwOEY0OTA0MDRBQzg5MDAxNEFGNDgwMDMwQzkKKzoxMDUxNTAwMDAwMDAwMDAwOTQ4NjAwMTg5NDg3MDAxQzAwQzcxODIxRTYKKzoxMDUxNjAwMEE0ODMwMDE4OTQ4NTAwMUEyNEEyMDAwMUE0ODIwMDFBQzYKKzoxMDUxNzAwMDk0OTgwMDFBOTQ5OTAwMUUxMzM4MDAwMzAwMDAwMDAwNTAKKzoxMDUxODAwMDAzRTAwMDA4MDAwMDAwMDAwM0UwMDAwOEE0ODAwMDFBMEIKKzoxMDUxOTAwMDhDODIwMDIwMEEwMDAwRDYzQzBEMDA1MDBBMDAwMEM3OTcKKzoxMDUxQTAwMDAwMDAwMDAwM0MwMzA4MDA4QzYzMDAyMDhGODIwMDE4ODAKKzoxMDUxQjAwMDI3QkRGRkU4MTA2MjAwMDhBRkJGMDAxMDBFMDAwMEZFMjAKKzoxMDUxQzAwMEFGODMwMDE4M0MwMzA4MDA4QzYzMDAyMDI0MDQwMDAxMTYKKzoxMDUxRDAwMDEwNjQwMDA0OEY4OTAwMTA4RkJGMDAxMDAzRTAwMDA4RTYKKzoxMDUxRTAwMDI3QkQwMDE4OEZCRjAwMTAzQzA3NjAxMkE1MjAwMDBBRTEKKzoxMDUxRjAwMDk1MjgwMDBBMzRFNTAwMTAyN0JEMDAxODMxMDZGRkZGOEUKKzoxMDUyMDAwMDAzRTAwMDA4QUNBNjAwOTAzQzAyMDgwMDhDNDIwMDIwOUQKKzoxMDUyMTAwMDI3QkRGRkM4QUZCRjAwMzRBRkJFMDAzMEFGQjcwMDJDMTIKKzoxMDUyMjAwMEFGQjYwMDI4QUZCNTAwMjRBRkI0MDAyMEFGQjMwMDFDNjgKKzoxMDUyMzAwMEFGQjIwMDE4QUZCMTAwMTQxMDQwMDA1MEFGQjAwMDEwNzIKKzoxMDUyNDAwMDhGODQwMDEwOTQ4NjAwMDY5NDgzMDAwQTAwQzMyODIzRUMKKzoxMDUyNTAwMDMwQjZGRkZGMTJDMDAwNEE4RkJGMDAzNDk0ODkwMDE4OTcKKzoxMDUyNjAwMDk0OEEwMDBBMDEyQTQwMjMzMTAyRkZGRjAyQzIzODJCMzAKKzoxMDUyNzAwMDE0RTAwMDAyMDJDMDIwMjEwMDQwMjAyMTJDOEMwMDA1RjcKKzoxMDUyODAwMDE1ODAwMDAyMDA4MEEwMjEyNDE0MDAwNDBFMDAwMEFENEYKKzoxMDUyOTAwMDAyODAyMDIxOEY4NzAwMTAwMjgwOTgyMUFGODAwMDE0QTcKKzoxMDUyQTAwMDk0RUQwMDBBMDI4MDg4MjExMjgwMDA0RTMxQjJGRkZGODcKKzoxMDUyQjAwMDNDMTc3MDAwM0MxNTQwMDAzQzFFNjAwMDhGOEYwMDFDQTYKKzoxMDUyQzAwMDhERUUwMDAwMDFENzE4MjQ1MDc1MDA1MDAyMjAyMDIxRDcKKzoxMDUyRDAwMDAyQTM4MDJCMTYwMDAwMzUzQzE4MjAwMDUwNzgwMDQ3QjAKKzoxMDUyRTAwMDAyMjAyMDIxMjQxMDAwMDE4RjgzMDAxNDE0NjAwMDM5NTMKKzoxMDUyRjAwMDAyOTE1ODIzMDIzMEY4MjMwMjUwQzgyMTMzRjFGRkZGRjYKKzoxMDUzMDAwMDE2MjBGRkVFMzMzMkZGRkY4Rjg3MDAxMDNDMTEwMDIwODQKKzoxMDUzMTAwMEFGNTEwMDMwMDAwMDAwMDA5NEU2MDAwQTNDMUU2MDEyMEQKKzoxMDUzMjAwMDM3RDUwMDEwMDI2NjI4MjFBNEU1MDAwQTk0RTIwMDBBOUQKKzoxMDUzMzAwMDk0RjIwMDBBOTRGNDAwMTgzMDU3RkZGRjEyOTIwMDNCRDkKKzoxMDUzNDAwMEFFQjcwMDkwOENFRDAwMTQ4Q0U0MDAxMDAwMTM3MTQwOTcKKzoxMDUzNTAwMDAxQUU0MDIxMDAwRTVGQzMwMTBFNTAyQjAwOEI0ODIxOEYKKzoxMDUzNjAwMDAxMkExODIxQUNFODAwMTRBQ0UzMDAxMDAyRDMzODIzNjIKKzoxMDUzNzAwMDMwRjZGRkZGMTZDMEZGQjk4Rjg0MDAxMDhGQkYwMDM0RDYKKzoxMDUzODAwMDhGQkUwMDMwOEZCNzAwMkM4RkI2MDAyODhGQjUwMDI0NTkKKzoxMDUzOTAwMDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OUYKKzoxMDUzQTAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAzODEwN0UwMDFCRkUKKzoxMDUzQjAwMDAwMDAwMDAwMTQ3N0ZGQ0MyNDEwMDAwMTBFMDAxNjI3MTcKKzoxMDUzQzAwMDAwMDAwMDAwOEY4MzAwMTQxMDYwRkZDQjAyMzBGODIzMzAKKzoxMDUzRDAwMDAyOTE1ODIzOEY4NzAwMTAwMTcwMjAyMTBBMDAwMTkxNEIKKzoxMDUzRTAwMDMwOTNGRkZGOEY4MzAwMTQxNDYwRkZDQjNDMTEwMDIwMkIKKzoxMDUzRjAwMEFGNTEwMDMwMEEwMDAxNUQwMDAwMDAwMDBFMDAwNzlFNjIKKzoxMDU0MDAwMDAyNDAyODIxMEEwMDAxNTEwMDQwODAyMTBFMDAwMzRCNzgKKzoxMDU0MTAwMDAyNDAyODIxMEEwMDAxNTEwMDQwODAyMTBFMDAxNEVGQjMKKzoxMDU0MjAwMDAyMjAyMDIxMEEwMDAxNTEwMDQwODAyMTBFMDAwMEM3MDcKKzoxMDU0MzAwMDAwMDAwMDAwMEEwMDAxNzMwMkQzMzgyMzI3QkRGRkU4RjMKKzoxMDU0NDAwMEFGQjAwMDEwQUZCRjAwMTQwRTAwMDAzOTAwMDAwMDAwMjQKKzoxMDU0NTAwMDNDMDI4MDAwMzQ1MDAwNzAwQTAwMDFCNDhFMDYwMDAwNDcKKzoxMDU0NjAwMDhGNEYwMDAwMzlFRTAwMDEzMUMyMDAwMTEwNDAwMDI0Q0UKKzoxMDU0NzAwMDhGODYwMEE4OEUwNzAwMDAzQzBDMDgwMDhEOEMwMDNDMzUKKzoxMDU0ODAwMDNDMDkwODAwOEQyOTAwMzgwMEU2NjgyMzAxOEQyODIxOTkKKzoxMDU0OTAwMDAwMDA1MDIxMDBBRDMwMkIwMTJBNDAyMTAxMDYyMDIxQkYKKzoxMDU0QTAwMDNDMDEwODAwQUMyNTAwM0NBRjg3MDBBODNDMDEwODAwODcKKzoxMDU0QjAwMEFDMjQwMDM4MEUwMDAxMDAwMDAwMDAwMDNDMDMwODAwOEUKKzoxMDU0QzAwMDhDNjMwMDcwMTA2MEZGRTYwMDYwMjAyMTNDMDUwODAwM0UKKzoxMDU0RDAwMDhDQTUwMDY4M0MwNjA4MDA4Q0M2MDA2QzBFMDAxNUI2NTIKKzoxMDU0RTAwMDAwMDAwMDAwM0MwMTA4MDBBQzIwMDA3MDhGNEYwMDAwNUQKKzoxMDU0RjAwMDM5RUUwMDAxMzFDMjAwMDExNDQwRkZERThGODYwMEE4QTIKKzoxMDU1MDAwMDhFMEEwMDAwOEY4QjAwQTgzQzA1MDgwMDhDQTUwMDNDOEIKKzoxMDU1MTAwMDNDMDQwODAwOEM4NDAwMzgwMTRCNDgyMzAwQTkzODIxNDIKKzoxMDU1MjAwMDAwODIxODIxMDBFOTQwMkIwMDY4MTAyMTNDMDEwODAwOEUKKzoxMDU1MzAwMEFDMjcwMDNDM0MwMTA4MDBBQzIyMDAzODhGNUYwMTAwMjIKKzoxMDU1NDAwMDI0MTlGRjAwMjQxODBDMDAwM0Y5MjAyNDEwOTgwMDEyREQKKzoxMDU1NTAwMEFGODQwMDAwQUY0NDAwMjA5MzZEMDAwMDI0MEMwMDIwQjUKKzoxMDU1NjAwMDMxQTYwMEZGMTBDQzAwMTIyNDBFMDA1MDEwQ0UwMDA0MTMKKzoxMDU1NzAwMDNDMTk0MDAwQUY1OTAxMzgwQTAwMDFBRDAwMDAwMDAwOUQKKzoxMDU1ODAwMDBFMDAxMjUyMDAwMDAwMDAzQzE5NDAwMEFGNTkwMTM4RDMKKzoxMDU1OTAwMDBBMDAwMUFEMDAwMDAwMDAwRTAwMDExOTAwMDAwMDAwMkIKKzoxMDU1QTAwMDNDMTk0MDAwQUY1OTAxMzgwQTAwMDFBRDAwMDAwMDAwNkQKKzoxMDU1QjAwMDhGNTgwMTAwMDA4MDI4MjEzMzBGMDBGRjAxRTAyMDIxRDcKKzoxMDU1QzAwMDBFMDAwMkY4QUY4RjAwMDQzQzE5NDAwMEFGNTkwMTM4QkIKKzoxMDU1RDAwMDBBMDAwMUFEMDAwMDAwMDAwMEE0MTAyQjI0MDMwMDAxMEMKKzoxMDU1RTAwMDEwNDAwMDA5MDAwMDMwMjEwMDA1Mjg0MDAwQTQxMDJCQzUKKzoxMDU1RjAwMDA0QTAwMDAzMDAwMzE4NDA1NDQwRkZGQzAwMDUyODQwQUQKKzoxMDU2MDAwMDUwNjAwMDBBMDAwNDE4MkIwMDg1MzgyQjU0RTAwMDA0NzkKKzoxMDU2MTAwMDAwMDMxODQyMDBDMzMwMjUwMDg1MjAyMzAwMDMxODQyRjAKKzoxMDU2MjAwMDE0NjBGRkY5MDAwNTI4NDIwMDA0MTgyQjAzRTAwMDA4NkQKKzoxMDU2MzAwMDAwQzMxMDIxMzA4NEZGRkYzMEE1RkZGRjhGNDIwMUI4NjcKKzoxMDU2NDAwMDA0NDBGRkZFM0MwNzQwODAwMDg3MzAyNTNDMDMxMDAwRUIKKzoxMDU2NTAwMEFGNDAwMTgwQUY0NTAxODRBRjQ2MDE4ODAzRTAwMDA4RjgKKzoxMDU2NjAwMEFGNDMwMUI4MzA4NEZGRkY4RjQyMDFCODA0NDBGRkZFMTIKKzoxMDU2NzAwMDNDMDc0MDM4OENBNjAwMDAwMDg3MjgyNTNDMDMxMDAwMUEKKzoxMDU2ODAwMEFGNDYwMTgwQUY0NTAxODgwM0UwMDAwOEFGNDMwMUI4OTEKKzoxMDU2OTAwMDhGODMwMDM4OEY4NjAwMzAxMDY2MDAwQjAwODA0MDIxMTkKKzoxMDU2QTAwMDNDMDcwODAwMjRFNzVDMzgwMDAzMjhDMDAwQTcxMDIxNEQKKzoxMDU2QjAwMDhDNDQwMDAwMjQ2MzAwMDExMDg4MDAwNTMwNjMwMDBGNTMKKzoxMDU2QzAwMDU0NjZGRkZBMDAwMzI4QzAwM0UwMDAwODAwMDAxMDIxMjAKKzoxMDU2RDAwMDNDMDcwODAwMjRFNzVDM0MwMEE3MzAyMTAzRTAwMDA4RjkKKzoxMDU2RTAwMDhDQzIwMDAwM0MwMzkwMDAzNDYyMDAwMTAwODIyMDI1M0YKKzoxMDU2RjAwMEFGNDQwMDIwOEY0NTAwMjAwNEEwRkZGRTAwMDAwMDAwMDIKKzoxMDU3MDAwMDAzRTAwMDA4MDAwMDAwMDAzQzAzODAwMDM0NjIwMDAxNTgKKzoxMDU3MTAwMDAwODIyMDI1MDNFMDAwMDhBRjQ0MDAyMDI3QkRGRkUwMDEKKzoxMDU3MjAwMEFGQjEwMDE0MzA5MUZGRkZBRkIwMDAxMEFGQkYwMDE4NTEKKzoxMDU3MzAwMDEyMjAwMDE1MDBBMDgwMjE4Q0E1MDAwMDEwQTAwMDEzRUQKKzoxMDU3NDAwMDI0MDQwMDAyMEUwMDBDN0MyNDA2MDE0MEFFMDAwMDAwODAKKzoxMDU3NTAwMDhGNDIwMUI4MDQ0MDAwMEQwMDAwMjgyMTNDMDY0MDAwQTMKKzoxMDU3NjAwMDAyMjYyMDI1OEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQzMKKzoxMDU3NzAwMDNDMDMxMDAwMjdCRDAwMjBBRjQ1MDE4MEFGNDQwMTg4RTUKKzoxMDU3ODAwMDAzRTAwMDA4QUY0MzAxQjg4Q0E1MDAwMDhGNDIwMUI4QzgKKzoxMDU3OTAwMDA0NDBGRkZFM0MwNjQwMDAwMjI2MjAyNThGQkYwMDE4NzMKKzoxMDU3QTAwMDhGQjEwMDE0OEZCMDAwMTAzQzAzMTAwMDI3QkQwMDIwMDMKKzoxMDU3QjAwMEFGNDUwMTgwQUY0NDAxODgwM0UwMDAwOEFGNDMwMUI4NjIKKzoxMDU3QzAwMDMwODZGRkZGOEY0MjAxQjgwNDQwRkZGRTNDMDk0MDA2Q0YKKzoxMDU3RDAwMDhDQTgwMDAwMDBDOTM4MjVBRjQ4MDE4MDhDQTQwMDA0QzMKKzoxMDU3RTAwMDNDMDMxMDAwQUY0NDAxODRBRjQ3MDE4ODAzRTAwMDA4ODgKKzoxMDU3RjAwMEFGNDMwMUI4MjdCREZGRTBBRkIwMDAxMEFGQkYwMDE4NDYKKzoxMDU4MDAwMEFGQjEwMDE0OTM2MzAwM0UwMDgwODAyMTAwODAyODIxMDYKKzoxMDU4MTAwMDMwNjIwMDQwMDAwMDIwMjExMDQwMDAwRjhFMTEwMDAwNzcKKzoxMDU4MjAwMDBFMDAwODcxMDIyMDIwMjE5MzY3MDAwMDI0MDQwMDUwMUMKKzoxMDU4MzAwMDMwRTUwMEZGNTBBNDAwMTI4RTBGMDAwMDAyMjAyMDIxNEUKKzoxMDU4NDAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEE3NjIwMTNDMDkKKzoxMDU4NTAwMDBBMDAwOTMxMjdCRDAwMjAwRTAwMDI4NzAwMDAwMDAwNjkKKzoxMDU4NjAwMDBFMDAwODcxMDIyMDIwMjE5MzY3MDAwMDI0MDQwMDUwREMKKzoxMDU4NzAwMDMwRTUwMEZGMTRBNEZGRjIwMjIwMjAyMThFMEYwMDAwNkIKKzoxMDU4ODAwMDNDMTAwODAwOEUxMDAwNTAzQzBEMDAwQzI0MEJGRjgwRDMKKzoxMDU4OTAwMDAxRjA1MDIxMzE0RTAwN0YwMURBNjAyMTAxOEQ0MDIxNUQKKzoxMDU4QTAwMDAxNEI0ODI0QUY0OTAwMjgwMjIwMjAyMThGQkYwMDE4NTcKKzoxMDU4QjAwMDhGQjEwMDE0OEZCMDAwMTBBNTAyMDBENjI3QkQwMDIwQzQKKzoxMDU4QzAwMDBBMDAwOTMxQUY4ODAwRDAyN0JERkZFMEFGQkYwMDE4NDQKKzoxMDU4RDAwMEFGQjEwMDE0QUZCMDAwMTA5MzY2MDAwMTAwODA4MDIxQ0EKKzoxMDU4RTAwMDBFMDAwMjUwMzBEMTAwMDQ5MzY0MDAwNTAwMTAyOUMyNUMKKzoxMDU4RjAwMEE3NjUwMDAwMzQ4MzAwNDBBMzYzMDAwNTBFMDAwMjU5MzEKKzoxMDU5MDAwMDAyMDAyMDIxMEUwMDA5MzMwMjAwMjAyMTI0MDIwMDAxQTAKKzoxMDU5MTAwMEFGNjIwMDBDMDIwMDI4MjFBNzYyMDAxMDI0MDQwMDAyREMKKzoxMDU5MjAwMEE3NjIwMDEyMjQwNjAxNDBBNzYyMDAxNDBFMDAwQzdDM0UKKzoxMDU5MzAwMEE3NjIwMDE2MTYyMDAwMEY4RkJGMDAxODk3OEMwMDM0NDYKKzoxMDU5NDAwMDNDMEIwODAwOEQ2QjAwNzgyNTg4RkZGRjMxMDlGRkZGQjUKKzoxMDU5NTAwMDI1NkEwMDAxMDEyQTM4MkIxMEUwMDAwNkE3ODgwMDM0RDAKKzoxMDU5NjAwMDNDMEY2MDA2MjQwRTAwMTYzNUVEMDAxMEFEQUUwMDUwNjEKKzoxMDU5NzAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MzMKKzoxMDU5ODAwMDI3QkQwMDIwMjdCREZGRTBBRkIxMDAxNEFGQkYwMDE4NTYKKzoxMDU5OTAwMEFGQjAwMDEwMDBBMDg4MjExMDgwMDAwQTNDMDM2MDAwMTYKKzoxMDU5QTAwMDI0MDIwMDgwMTA4MjAwMTIwMDAwMDAwMDAwMDAwMDBEQTAKKzoxMDU5QjAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4RjMKKzoxMDU5QzAwMDI3QkQwMDIwOEM2ODJCRjgwNTAwRkZGRTAwMDAwMDAwQkEKKzoxMDU5RDAwMEFDNzEyQkMwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQjYKKzoxMDU5RTAwMDNDMDkxMDAwMjdCRDAwMjAwM0UwMDAwOEFDNjkyQkY4M0IKKzoxMDU5RjAwMDBFMDAwMjUwMDBBMDIwMjE5MzY1MDAwNTAyMjAyMDIxMDYKKzoxMDVBMDAwMDBFMDAwMjU5MzBCMDAwRkYyNDAzMDAzRTE2MDNGRkU3RUEKKzoxMDVBMTAwMDAwMDAwMDAwOEY0NDAxNzgwNDgwRkZGRTI0MDcwMDA3ODcKKzoxMDVBMjAwMDNDMDYxMDAwQUY1MTAxNDAwMjIwMjAyMUEzNDcwMTQ0NTEKKzoxMDVBMzAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEFGNDYwMTc4RUYKKzoxMDVBNDAwMDBBMDAwMkM5MjdCRDAwMjAyN0JERkZFOEFGQkYwMDE0MzAKKzoxMDVBNTAwMEFGQjAwMDEwOEY1MDAwMjAwMDAwMDAwMDBFMDAwOTMzOEUKKzoxMDVBNjAwMEFGNDQwMDIwQUY1MDAwMjA4RkJGMDAxNDhGQjAwMDEwNTMKKzoxMDVBNzAwMDAzRTAwMDA4MjdCRDAwMTgzMDg0RkZGRjhGNDIwMUI4MDMKKzoxMDVBODAwMDA0NDBGRkZFM0MwNzQwMzUwMDg3MzAyNTNDMDMxMDAwRjIKKzoxMDVBOTAwMEFGNDUwMTgwQUY0MDAxODRBRjQ2MDE4ODAzRTAwMDA4QjQKKzoxMDVBQTAwMEFGNDMwMUI4MzA4NEZGRkY4RjQyMDFCODA0NDBGRkZFQ0UKKzoxMDVBQjAwMDNDMDc0MDM2MDA4NzMwMjUzQzAzMTAwMEFGNDUwMTgwOEQKKzoxMDVBQzAwMEFGNDAwMTg0QUY0NjAxODgwM0UwMDAwOEFGNDMwMUI4NEUKKzoxMDVBRDAwMDI3QkRGRkQwQUZCMzAwMUMzMDkzRkZGRkFGQjUwMDI0NEMKKzoxMDVBRTAwMEFGQjIwMDE4QUZCRjAwMjhBRkI0MDAyMEFGQjEwMDE0QjAKKzoxMDVBRjAwMEFGQjAwMDEwMzBCNUZGRkYxMjYwMDAyNzAwMDA5MDIxMEEKKzoxMDVCMDAwMDhGOTAwMDFDOEUwMzAwMDAzQzA2ODAwMDI0MDIwMDQwQTEKKzoxMDVCMTAwMDAwMDMzRTAyMDAwMzJDMDIzMEU0MDA3RjAwNjY4ODI0NkMKKzoxMDVCMjAwMDE0ODIwMDFEMzBBNTAwRkY4RjgzMDAyODJDNjgwMDBBMTYKKzoxMDVCMzAwMDUxMDAwMDEwOEY5MTAwMTQwMDAzNTg4MDNDMEMwODAwQTUKKzoxMDVCNDAwMDI1OEM1OEM0MDE2QzUwMjE4RDQ5MDAwMDAxMjAwMDA4QUIKKzoxMDVCNTAwMDAwMDAwMDAwMDJCMjE4MjEzMDY1RkZGRjBFMDAwMjI0OTEKKzoxMDVCNjAwMDI0MDQwMDg0MTYyMDAwMDI4RjkwMDAxQ0FGODAwMDI4QkYKKzoxMDVCNzAwMDhGOTEwMDE0MjYwQzAwMjAyNjRCMDAwMTAxODA4MDIxMEIKKzoxMDVCODAwMDMxNzJGRkZGMTYyMDAwMDRBRjhDMDAxQzAyNTMyODJCM0IKKzoxMDVCOTAwMDE0QTBGRkRDMDAwMDAwMDAwMjQwMTAyMThGQkYwMDI4OEQKKzoxMDVCQTAwMDhGQjUwMDI0OEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4NzMKKzoxMDVCQjAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDMwNDMKKzoxMDVCQzAwMDI0MEQwMDM0MTRBRDAwRjYwMDAwMDAwMDkyMEIwMDBFMEUKKzoxMDVCRDAwMDI0MEExNjgwM0MwNzAwMENBMzZCMDAyMTkyMDMwMDBERTEKKzoxMDVCRTAwMDAzNDdGODIxM0MwNjYwMDBBMzYzMDAyMDk2MTEwMDEyRDEKKzoxMDVCRjAwMDNDMDU3RkZGMzRBQ0ZGRkZBNzcxMDAzQzk2MDIwMDEwMEMKKzoxMDVDMDAwMDI0MEIwMDA1MzA1NEZGRkZBRjc0MDA4NDhFMTkwMDFDNzQKKzoxMDVDMTAwMEFGNEEwMDI4OEZGODAwMDA4Q0NGNDQ0ODAzMTk3MDI2NDMKKzoxMDVDMjAwMDAxRUUzMDIxQUY2NjAwNEM4RjY5MDA0QzI0Q0QwMDAxOUQKKzoxMDVDMzAwMDNDMTk3RjAwQUY2OTAwNTA4RjY0MDA1MEFGNjQwMDU0N0UKKzoxMDVDNDAwMEFGNjYwMDcwQUY2RDAwNTg4RjY4MDA1ODI0MDQwMDUwOTQKKzoxMDVDNTAwMEFGNjgwMDVDQTM2MDAwMjNBRjZDMDA2NEEzNkIwMDM3RTcKKzoxMDVDNjAwMDhFMDMwMDE0QUY2MzAwNDg4RjcxMDA0OEFGNzEwMDI0QTkKKzoxMDVDNzAwMDhFMDIwMDE4QUY2MjAwNkM5MjE0MDAwQ0EzNzQwMDM2MDAKKzoxMDVDODAwMDkzNkEwMDNFMzU1RjAwMjBBMzdGMDAzRThGNzgwMDc0NEEKKzoxMDVDOTAwMDAzMTk3ODI0MzVFRTQwMDBBRjZFMDA3NDkzNjkwMDAwNUMKKzoxMDVDQTAwMDMxMzAwMEZGMTIwNDAyMkMyNDE4RkY4MDNDMDQwODAwNEQKKzoxMDVDQjAwMDI0ODQ1Q0I4MEUwMDAyOTQwMDAwMDAwMDI0MDYwMDA0NTYKKzoxMDVDQzAwMDI0MDcwMDAxM0MwNDA4MDA4Qzg0NUNCOEEzNjYwMDdEQjYKKzoxMDVDRDAwMEEzNjcwMDA1OEY0QTAxNzgwNTQwRkZGRTI0MDIwMDAyRjkKKzoxMDVDRTAwMEFGNDQwMTQwQTM0MjAxNDQ4RjkwMDAxQzNDMTQxMDAwQkIKKzoxMDVDRjAwMEFGNTQwMTc4MEEwMDAzNzNBRjgwMDAyODJDQUQwMDM3NDEKKzoxMDVEMDAwMDUxQTBGRjlDOEY5MTAwMTQwMDA1QTA4MDNDMTgwODAwNTIKKzoxMDVEMTAwMDI3MTg1OEVDMDI5ODc4MjE4REVFMDAwMDAxQzAwMDA4ODkKKzoxMDVEMjAwMDAwMDAwMDAwMjQwNjAwMDYxNEE2MDAxMTAwMDAwMDAwNzgKKzoxMDVEMzAwMDNDMUYwODAwOEZGRjVDQjgyNDA0MDAwNUFGNUYwMDIwMDMKKzoxMDVENDAwMDhFMTkwMDE4QUY3OTAwMTg4Rjc4MDA0Q0FGNzgwMDFDQkUKKzoxMDVENTAwMDhGNkYwMDUwMTIyMDAwQzJBRjZGMDA3MDBBMDAwMzczRjMKKzoxMDVENjAwMEFGODQwMDI4MjQwQTAwMDcxMEFBMDA4NDI0MDMwMDA2MzgKKzoxMDVENzAwMDNDMDUwODAwMjRBNTVDQjgwRTAwMDI1RTI0MDQwMDgxRTYKKzoxMDVEODAwMDhGOTAwMDFDMDAxMTEwMkIwQTAwMDM3M0FGODIwMDI4QjMKKzoxMDVEOTAwMDI0MDIwMDA0MTRBMkZGRjYyNDBBMDA1MDNDMDkwODAwNjMKKzoxMDVEQTAwMDhEMjk1Q0I4QUY0OTAwMjA4RTA0MDAwOEFGNjQwMDQwMjQKKzoxMDVEQjAwMDhFMDYwMDA4QUY2NjAwNDQ4RTA3MDAwQ0FGNjcwMDQ4RUYKKzoxMDVEQzAwMDhFMEQwMDEwQUY2RDAwNEM4RTA4MDAxMEFGNjgwMDg0N0YKKzoxMDVERDAwMDhFMDUwMDE0QUY2NTAwNTA4RTBDMDAxOEFGNkMwMDU0OTcKKzoxMDVERTAwMDhFMEIwMDFDQUY2QjAwNTg5Mzc0MDAwMDMyODMwMEZGRDEKKzoxMDVERjAwMDEwNkEwMUVFMDAwMDAwMDA4RjY3MDA0ODhGNjYwMDQwQzcKKzoxMDVFMDAwMDAwRTY2ODIzMDVBMDAwMDQyNDA0MDA4QzE2MjBGRkRFQjEKKzoxMDVFMTAwMDI0MDIwMDAzMjQwNDAwODIzQzA1MDgwMDI0QTU1Q0I4ODkKKzoxMDVFMjAwMDBFMDAwMjg3MDAwMDAwMDA4RjkwMDAxQzAwMDAxMDIxNkYKKzoxMDVFMzAwMDBBMDAwMzczQUY4MjAwMjgyNDA0MDAwNTE0QTRGRkNDRDkKKzoxMDVFNDAwMDI0MDUyMDAwM0MxRjA4MDA4RkZGNUNCOEFGNUYwMDIwRDYKKzoxMDVFNTAwMDhFMTkwMDA0QUY3OTAwNUM5MjE4MDAwODI0MTAwMDA4MjUKKzoxMDVFNjAwMEEzNzgwMDIxOEY4RjAwMUM5MUVFMDAwOUEzNkUwMDIwMDMKKzoxMDVFNzAwMDhGODYwMDFDOTBDOTAwMEEzMTI0MDBGRjEwOTAwMDEwOEEKKzoxMDVFODAwMDI4OEEwMDA5MTU0MDAwNkMyNDAyMDAwMjI0MEMwMDIwMUUKKzoxMDVFOTAwMDEwOEMwMDBCMzQwNTgwMDAyODg1MDAyMTE0QTAwMDA4MTgKKzoxMDVFQTAwMDI0MDU0MDAwMjQwODAwNDAxMDg4MDAwNTNDMDUwMDAxM0UKKzoxMDVFQjAwMDI0MEQwMDgwMTA4RDAwMDIzQzA1MDAwMjI0MDU0MDAwRTYKKzoxMDVFQzAwMDhGNkUwMDc0M0MwRkZGMDAwMUNGNDgyNDAxMjU4MDI1MTAKKzoxMDVFRDAwMEFGNzAwMDc0OTBDNDAwMEJBMzY0MDA4MThGODQwMDFDMTkKKzoxMDVFRTAwMDk0ODcwMDBDMTBFMDAxOTQwMDAwMDAwMDk0OEUwMDBDRDgKKzoxMDVFRjAwMDI0MUZGRkJGMjQwNjAwMDRBNzZFMDAzQzkwODkwMDBFRkIKKzoxMDVGMDAwMEEzNjkwMDNFOEY5MDAwMUM5MjA0MDAwRkEzNjQwMDNGMjEKKzoxMDVGMTAwMDhGOTQwMDFDOEU4RDAwMTA4RjQ3MDA3NDAxQTc0MDIzQzIKKzoxMDVGMjAwMEFGNjgwMDYwOEU4NTAwMTRBRjY1MDA2NDk2OEMwMDE4MjEKKzoxMDVGMzAwMEE3NkMwMDY4OTY4QjAwMUFBNzZCMDA2QThFODMwMDFDMDIKKzoxMDVGNDAwMEFGNjMwMDZDOTY4MjAwMDJBNzYyMDEzRTkyOEEwMDBFNDcKKzoxMDVGNTAwMEEzNkEwMDNFOTM3OTAwM0UwMzNGQzAyNDEyMjAwMTY3RUMKKzoxMDVGNjAwMEEzNzgwMDNFOEY5MDAwMUMwQTAwMDM3M0FGODYwMDI4QzAKKzoxMDVGNzAwMDI0MTQwMDIyMTRCNEZGN0UyNDAzMDAwNzNDMDIwODAwMEUKKzoxMDVGODAwMDhDNDI1Q0I4MTIyMDAwMENBRjQyMDAyMDBBMDAwMzczNjAKKzoxMDVGOTAwMEFGODMwMDI4MjQwQzAwMzMxMEFDMDAxNDI0MDUwMDI4MjMKKzoxMDVGQTAwMDNDMDUwODAwMjRBNTVDQjgwRTAwMDIzMDI0MDQwMDgxRTIKKzoxMDVGQjAwMDBBMDAwM0Y4OEY5MDAwMUMzQzA0MDgwMDI0ODQ1Q0I4OUQKKzoxMDVGQzAwMDBFMDAwMjk0MDAwMDAwMDA5MzZCMDAwMDI0MTEwMDUwQUEKKzoxMDVGRDAwMDMxNjMwMEZGMTA3MTAxNTEwMDAwMDAwMDhGOTAwMDFDMjAKKzoxMDVGRTAwMDAwMDAxODIxMEEwMDAzNzNBRjgzMDAyODNDMDgwODAwNTIKKzoxMDVGRjAwMDhEMDg1Q0I4MjQwNDAwODFBRjQ4MDAyMEEzNjUwMDM0RkMKKzoxMDYwMDAwMDNDMDUwODAwMjRBNTVDQjgwRTAwMDIzMDAwMDAwMDAwMkEKKzoxMDYwMTAwMDhGOTAwMDFDMjQwMjAwMDkwQTAwMDM3M0FGODIwMDI4M0QKKzoxMDYwMjAwMDAyQjI4ODIxMzIyNUZGRkYwRTAwMDIyNDI0MDQwMDg0REUKKzoxMDYwMzAwMDBBMDAwMzczOEY5MDAwMUMxMDgyRkZBMTI0MDUwNDAwNDYKKzoxMDYwNDAwMDI4ODMwMDAzMTA2MDAxNkYyNDBCMDAwNDI0MTQwMDAxNTYKKzoxMDYwNTAwMDU0OTRGRjlCMjQwNTQwMDAwQTAwMDQ0NzI0MDUwMTAwRDYKKzoxMDYwNjAwMDNDMDQwODAwMjQ4NDVDQjg4RjYyMDA0QzBFMDAwMjk0NEIKKzoxMDYwNzAwMDhGNjMwMDUwOEY5MDAwMUMwMDAwMjAyMTBBMDAwMzczRTIKKzoxMDYwODAwMEFGODQwMDI4OEUxMDAwMDQyNDA0MDA4QUFGNTAwMDIwNDIKKzoxMDYwOTAwMDkzNkUwMDA1MzFDOTAwMDIxNTIwMDE1RTAyMDAyODIxMUYKKzoxMDYwQTAwMDkzNzgwMDIzMDIwMDI4MjEzMzBGMDAyMDE1RTAwMTU5QzYKKzoxMDYwQjAwMDI0MDQwMDhEOTM2MjAwM0YyNDE5MDAxMjMwNUYwMEZGMUEKKzoxMDYwQzAwMDEzRjkwMTU0MjQwNDAwODEwRTAwMDI1MDAyMDAyMDIxMjMKKzoxMDYwRDAwMDkzNzQwMDIzMjQwQTAwMDQwMjAwMjAyMTM2ODMwMDQyMjYKKzoxMDYwRTAwMEEzNjMwMDIzMEUwMDAyNTlBMzZBMDA3RDhGNEIwMTc4NDEKKzoxMDYwRjAwMDA1NjBGRkZFMjQwNTAwMDJBRjUwMDE0MEEzNDUwMTQ0QTYKKzoxMDYxMDAwMDhGOTAwMDFDM0MwQzEwMDBBRjRDMDE3ODBBMDAwM0Y5ODIKKzoxMDYxMTAwMDAwMTExMDJCOEUxMDAwMDQyNDA0MDA4QUFGNTAwMDIwQzAKKzoxMDYxMjAwMDkzNkQwMDA1MzFBODAwMDIxNTAwMDAxNjAyMDAyODIxMTkKKzoxMDYxMzAwMDkzNjQwMDNGMjQwNzAwMDQwMjAwMjgyMTMwODYwMEZGRkEKKzoxMDYxNDAwMDEwQzcwMDEwMjQwNDAwODEwRTAwMDI1MDAyMDAyMDIxMUMKKzoxMDYxNTAwMDkzN0YwMDIzMjQxODAwMTIyNDBGRkZGRTM3RjkwMDIwM0MKKzoxMDYxNjAwMEEzNzkwMDIzQTM3ODAwM0Y5MzZFMDAwNTAyMDAyMDIxNEQKKzoxMDYxNzAwMDAxQ0Y0ODI0MEUwMDAyNTlBMzY5MDAwNTAyMDAyODIxMUUKKzoxMDYxODAwMDAwMDAyMDIxMEUwMDAzNDAwMDAwMDAwMDBBMDAwM0Y4NzgKKzoxMDYxOTAwMDhGOTAwMDFDOEUwNTAwMDQzQzBGMDAwODAzNEY0MDIxMjcKKzoxMDYxQTAwMEFGNDUwMDIwOTEwRTAwMDAyNDA2MDA1MDMxQzkwMEZGQzkKKzoxMDYxQjAwMDExMjYwMTc2MjQwNDAwODg4RjU5MDFCODA3MjBGRkZFQkMKKzoxMDYxQzAwMDNDMEM0MDBFMDA4QzU4MjUzQzAzMTAwMEFGNDUwMTgwNkMKKzoxMDYxRDAwMEFGNDAwMTg0QUY0QjAxODhBRjQzMDFCODkxMDIwMDAwOEEKKzoxMDYxRTAwMDI0MEFGRjgwMjQwNDAwMDQwMDRBRjgyNUExMUYwMDAwQUYKKzoxMDYxRjAwMDBFMDAwQzdDMjQwNjAwMzAwQTAwMDNGODhGOTAwMDFDNkYKKzoxMDYyMDAwMDhFMEYwMDA0M0MxNDA4MDAyNjk0NUNCODNDMDEwODAwODIKKzoxMDYyMTAwMEFDMkY1Q0I4QUY0RjAwMjA5MjBFMDAwMzMxQzkwMDA0RDAKKzoxMDYyMjAwMDExMjAwMDAyMjQwMjAwMTIyNDAyMDAwNkEzNjIwMDNGOTMKKzoxMDYyMzAwMDkyMDMwMDFCMjQwQUZGQzAzMDYyMDAzRjAwNEFGODI1ODkKKzoxMDYyNDAwMEEzN0YwMDNFOTIxOTAwMDMzMzM4MDAwMTE3MDAwMTFDQTAKKzoxMDYyNTAwMDAwMDAwMDAwOEUwMjAwMDhBRTgyMDAwODNDMDIwODAwMjgKKzoxMDYyNjAwMDhDNDI1Q0MwMTA0MDAxMUIwMDAwMDAwMDAwMDIyMUMyRjMKKzoxMDYyNzAwMEE3NjQwMDA4OEUwRDAwMEMyNDBCMDAwMTI0MTQwMDE0RTgKKzoxMDYyODAwMEFGNkQwMDJDOEUwODAwMTBBRjY4MDAzMDk2MDUwMDE2MjgKKzoxMDYyOTAwMEE3NjUwMDM4OTYwQzAwMTRBNzZDMDAzQUFGNkIwMDBDOTEKKzoxMDYyQTAwMEE3NkIwMDEwQTc2QjAwMTJBNzZCMDAxNEE3NkIwMDE2NUEKKzoxMDYyQjAwMDEyMjAwMTQ2QTM3NDAwMzQ5MjA2MDAwMzMwQzcwMDAyODYKKzoxMDYyQzAwMDJDRjAwMDAxMjYwMjAwMDg4RjkwMDAxQzBBMDAwMzczQzYKKzoxMDYyRDAwMEFGODIwMDI4OEUxNDAwMDQyNDAzMDA4MUFGNTQwMDIwRjQKKzoxMDYyRTAwMDkzNjgwMDIzMzEwNTAwMTAxMEEwMDEwNzAwMDAwMDAwOTIKKzoxMDYyRjAwMDhGNDQwMUI4MDQ4MEZGRkUzQzA2NDAxRjAwMTEzODJCN0MKKzoxMDYzMDAwMDAwNjYxMDI1M0MxMTEwMDBBRjU0MDE4MEFGODcwMDI4QjMKKzoxMDYzMTAwMEFGNDAwMTg0QUY0MjAxODhBRjUxMDFCODBBMDAwMzc0NTUKKzoxMDYzMjAwMDhGOTEwMDE0OEUwNjAwMDQzQzE5MDAwODAzNTkyMDIxQTcKKzoxMDYzMzAwMEFGNDYwMDIwOEUwNzAwMDg5MDk4MDAwMDI0MEYwMDUwMDAKKzoxMDYzNDAwMDMzMTQwMEZGMTI4RjAxMDIyNDA1MDA4ODhGNDQwMUI4MjYKKzoxMDYzNTAwMDA0ODBGRkZFM0MwRDQwMDkwMDExNjAyQjAwQUQxMDI1QUMKKzoxMDYzNjAwMDNDMTExMDAwQUY0NjAxODBBRjhDMDAyOEFGNDcwMTg0N0MKKzoxMDYzNzAwMEFGNDIwMTg4QUY1MTAxQjgwQTAwMDM3NDhGOTEwMDE0MzUKKzoxMDYzODAwMDhFMDQwMDFDMEUwMDAyM0IwMDAwMDAwMDEwNDAwMEU4REMKKzoxMDYzOTAwMDAwNDA0ODIxOEY5MDAwMUMyNDA1MDA4OThGNEQwMUI4RDIKKzoxMDYzQTAwMDA1QTBGRkZFMDAwMDAwMDBBRjQ5MDE4MDhFMEYwMDFDMTkKKzoxMDYzQjAwMDNDMTQ0MDAxMDAxMTcwMkIwMEI0NDgyNTNDMTExMDAwMjIKKzoxMDYzQzAwMEFGNEYwMTg0QUY4RTAwMjhBRjQ5MDE4OEFGNTEwMUI4QUIKKzoxMDYzRDAwMDBBMDAwMzc0OEY5MTAwMTQ5NjE5MDAwMjNDMTQwODAwRkYKKzoxMDYzRTAwMDI2OTQ1Q0I4MzMzODAwMDQxMzAwMDA4RTNDMDI2MDAwMzEKKzoxMDYzRjAwMDhFMUYwMDFDM0MwMTA4MDBBQzNGNUNCOEFGNUYwMDIwNjIKKzoxMDY0MDAwMDkyMEMwMDEwMjQwQjAwMTQzMTg0MDBGRjE0OEIwMEI4OTAKKzoxMDY0MTAwMDAwMDAwMDAwOTYwOTAwMDIzMTJEMDAwMTE1QTAwMTRFNzgKKzoxMDY0MjAwMDAwMDAwMDAwOEUwMjAwMDRBRTgyMDAwODNDMEUwODAwNEUKKzoxMDY0MzAwMDhEQ0U1Q0MwMTFDMDAxNDQwMDAwMDAwMDhGNjkwMDc0NjMKKzoxMDY0NDAwMDNDMEU4MDAwMjQwNDAwMDEwMTJFNjgyNUFGNkQwMDc0MEQKKzoxMDY0NTAwMEEzNjAwMDA1QUY2NDAwMEMzQzBDMDgwMDhEOEM1Q0MwOTAKKzoxMDY0NjAwMDhGODgwMDFDQTc2NDAwMTAwMDBDNTlDMkE3NjQwMDEyOUEKKzoxMDY0NzAwMEE3NjQwMDE0QTc2NDAwMTZBNzZCMDAwODhEMDMwMDA4MkEKKzoxMDY0ODAwMDI0MDQwMDAyQUY2MzAwMkM4RDBBMDAwQ0FGNkEwMDMwQjgKKzoxMDY0OTAwMDkxMDcwMDEwQTM2NzAwMzQ4RjgyMDAxQzkwNDUwMDExMDMKKzoxMDY0QTAwMEEzNjUwMDM1OEY4NjAwMUM5MEQwMDAxMkEzNzAwMDM2QzMKKzoxMDY0QjAwMDhGOUYwMDFDOTNGOTAwMTNBMzc5MDAzNzhGOTAwMDFDNjUKKzoxMDY0QzAwMDk2MTgwMDE0QTc3ODAwMzg5NjE0MDAxNkE3NzQwMDNBOUUKKzoxMDY0RDAwMDhFMEYwMDE4QUY2RjAwMjQ1NjIwRkRBNUFGODQwMDI4NTIKKzoxMDY0RTAwMDNDMDUwODAwMjRBNTVDQjgwRTAwMDI1RTAwMDAyMDIxRDcKKzoxMDY0RjAwMDhGOTAwMDFDMEEwMDA0QjYwMDAwMjAyMTNDMDUwODAwMTMKKzoxMDY1MDAwMDI0QTU1Q0I4MEUwMDAyODcyNDA0MDA4MjhGOTAwMDFDMzIKKzoxMDY1MTAwMDAwMDAzMDIxMEEwMDAzNzNBRjg2MDAyODNDMDQwODAwMDUKKzoxMDY1MjAwMDhDODQ1Q0I4MEUwMDE1NzQwMDAwMDAwMDhGOTAwMDFDNzUKKzoxMDY1MzAwMDBBMDAwNDkwMDAwMDE4MjEzQzA1MDgwMDI0QTU1Q0I4NUUKKzoxMDY1NDAwMDBFMDAwMjg3MjQwNDAwOEI4RjkwMDAxQzAwMTEzMDJCNUEKKzoxMDY1NTAwMDBBMDAwMzczQUY4NjAwMjgzQzE5MDgwMDhGMzk1Q0I4MjUKKzoxMDY1NjAwMDNDMUYwODAwOEZGRjAwNTAyNENDRkZGRTAzM0Y3ODIxMjIKKzoxMDY1NzAwMDAxRjg3MDI0QUY0RTAwMjgzQzA0MDgwMDhDODQ1Q0I4RkQKKzoxMDY1ODAwMDNDMDkwODAwOEQyOTAwNTAwMDg5NjgyMTMxQTgwMDdGNEUKKzoxMDY1OTAwMDAxMUEyODIxMDBBNzgwMjFBRTA2MDBEOEFGOTAwMEQwQjQKKzoxMDY1QTAwMEFFMDAwMERDMEEwMDAzQzJBRTBDMDEwOEFGNjAwMDg0M0MKKzoxMDY1QjAwMDNDMDUwODAwOENBNTVDQjgzQzA4MDgwMDhEMDgwMDUwMUMKKzoxMDY1QzAwMDI0MENGRjgwM0MwMjAwMEMwMEE4QTAyMTAyOEM1ODI0NUYKKzoxMDY1RDAwMEFGNEIwMDI4OEUxRjAwMTQzMjgzMDA3RjAwN0E1MDIxQjkKKzoxMDY1RTAwMDAxNDI3MDIxQURERjAwRDg4RTE5MDAxNEFGOEUwMEQwQUIKKzoxMDY1RjAwMEFERDkwMERDOEUxODAwMTAyNzBGRkZGRTBBMDAwNDE1MkQKKzoxMDY2MDAwMEFEQ0YwMTA4NTQ4QkZFMkUyNDA1NDAwMDBBMDAwNDQ3M0MKKzoxMDY2MTAwMDI0MDUxMDAwMEUwMDAzMzUwMDAwMDAwMDBBMDAwM0Y4RjYKKzoxMDY2MjAwMDhGOTAwMDFDOEM0NjQ0MkMzQzA1NkM2MjM0QjA3OTcwMTEKKzoxMDY2MzAwMDNDMDEwODAwQUMyMDVDQjgxNEQwMDAwODI0MDQwMDAyMUYKKzoxMDY2NDAwMDk3ODgwMDM0OTc4QTAwMkMwMjgwMjgyMTAxMEEzODJCNzEKKzoxMDY2NTAwMDEwRTAwMDExMjQwNDAwOTIyNDA0MDAwMjBFMDAwQzlBQTEKKzoxMDY2NjAwMDI0MDUwMTQwM0MwMTA4MDBBQzIyNUNCOEFGNDIwMDIwODgKKzoxMDY2NzAwMDNDMDMwODAwOEM2MzVDQjgxMDYwMDAwNTI0MDQwMDgzQjAKKzoxMDY2ODAwMDBFMDAwODY1MDAwMDAwMDAxMDQwMDAwOTI0MDQwMDgzOEIKKzoxMDY2OTAwMDNDMDUwODAwMjRBNTVDQjgwRTAwMDI1RTAwMDAwMDAwNjYKKzoxMDY2QTAwMDhGOTAwMDFDMDAxMTIwMkIwQTAwMDM3M0FGODQwMDI4NzgKKzoxMDY2QjAwMDBFMDAwODY5MDAwMDAwMDAwQTAwMDU5NzhGOTAwMDFDN0EKKzoxMDY2QzAwMDhFMDQwMDA4MEUwMDAyM0IwMDAwMDAwMDBBMDAwNTJFQTgKKzoxMDY2RDAwMEFFODIwMDA4M0MwNTA4MDAyNEE1NUNCODBFMDAwMjMwMUMKKzoxMDY2RTAwMDI0MDQwMDg3OEY5MDAwMUMwQTAwMDU0QTAwMTExMDJCMUIKKzoxMDY2RjAwMDBFMDAwODZEMDAwMDAwMDAzQzA1MDgwMDI0QTU1Q0I4RjEKKzoxMDY3MDAwMDBBMDAwNjNEMjQwNDAwOEIwRTAwMDI1MDAyODAyMDIxNjYKKzoxMDY3MTAwMDkzNzAwMDIzMDI4MDIwMjEzNjBEMDAxMDBFMDAwMjU5RDQKKzoxMDY3MjAwMEEzNkQwMDIzOEY5MDAwMUMwQTAwMDU1MzAwMDAxODIxNjAKKzoxMDY3MzAwMDI0MDQwMDA0MEUwMDBDOUEyNDA1MDAzMDE0NDAwMDJBQTIKKzoxMDY3NDAwMDAwNDA0ODIxOEY5MDAwMUMwQTAwMDU3RTI0MDUwMDgzMkMKKzoxMDY3NTAwMDkyMDUwMDBDMzBCRjAwMDExM0UwMDAwMzAwMDAwMDAwQjAKKzoxMDY3NjAwMDk2MDIwMDBFQTQ4MjAwMkM5MjBBMDAwQzMxNDgwMDAyMEUKKzoxMDY3NzAwMDExMDBGRUY2MDAwMDI4MjE5NjBCMDAxMjhFMDMwMDE0NzMKKzoxMDY3ODAwMEE0OEIwMDFBMEEwMDA1NkFBQzgzMDAxQzhGODMwMDM4QjIKKzoxMDY3OTAwMDhGODcwMDMwMTA2N0ZFODgwMDAwMjAyMTNDMDkwODAwMjgKKzoxMDY3QTAwMDI1Mjk1QzNDMDAwMzIwQzAwMDg5MzAyMThDRDQwMDAwRTYKKzoxMDY3QjAwMDEyODUwMDVFMjQ3ODAwMDEzMzAzMDAwRjU0NjdGRkZBNEUKKzoxMDY3QzAwMDAwMDMyMEMwMEEwMDA1MDUwMDAwMjAyMTNDMDUwODAwNDgKKzoxMDY3RDAwMDI0QTU1Q0I4MEUwMDAyODcyNDA0MDA4MjhGOTAwMDFDNjAKKzoxMDY3RTAwMDBBMDAwNTRBMDAwMDEwMjEzQzBCMDAwODAzNEIyMDIxNDEKKzoxMDY3RjAwMDI0MDMwMDUwMjQwQTAwMDFBRjQyMDAyMEEwODMwMDAwQkYKKzoxMDY4MDAwMEEwOEEwMDAxOEY4ODAwMUM5MTA3MDAwNEEwODcwMDE4NEYKKzoxMDY4MTAwMDhGODIwMDFDOTA0NTAwMDVBMDg1MDAxOThGODYwMDFDMDIKKzoxMDY4MjAwMDkwREYwMDA2QTA5RjAwMUE4Rjk5MDAxQzkzMzgwMDA3ODQKKzoxMDY4MzAwMEEwOTgwMDFCOEY5NDAwMUM5MjhGMDAwOEEwOEYwMDFDNTIKKzoxMDY4NDAwMDhGOTAwMDFDOTIwRTAwMDlBMDhFMDAxRDhGOEQwMDFDRTEKKzoxMDY4NTAwMDkxQUMwMDBBQTA4QzAwMUU4RjhCMDAxQzNDMEMwODAwMjEKKzoxMDY4NjAwMDI1OEM1QzNDOTE2MzAwMEIzQzBCMDgwMDI1NkI1QzM4NkQKKzoxMDY4NzAwMEEwODMwMDFGOEY4QTAwMUM5MTQ4MDAwQ0EwODgwMDIwNzQKKzoxMDY4ODAwMDhGODcwMDFDOTBFNTAwMERBMDg1MDAyMThGODIwMDFDRTEKKzoxMDY4OTAwMDI0MDU0NjQ2OTA0NjAwMEVBMDg2MDAyMjhGOUYwMDFDQ0QKKzoxMDY4QTAwMDkzRjkwMDBGQTA5OTAwMjM4Rjk4MDAxQzkzMTQwMDEwRjcKKzoxMDY4QjAwMEEwOTQwMDI0OEY4RjAwMUM5MUYwMDAxMUEwOTAwMDI1NUYKKzoxMDY4QzAwMDhGOTAwMDFDOEY4RTAwMzA4Rjk5MDAzODk2MEQwMDE0MjkKKzoxMDY4RDAwMDAwMEUxOEMwMjVDODAwMDFBNDhEMDAyODk2MEEwMDE2RDUKKzoxMDY4RTAwMDAwNkMzMDIxMDA2QkY4MjFBNDhBMDAyQTk2MDcwMDE4NUEKKzoxMDY4RjAwMDMxMDgwMDBGQTQ4NzAwMkNBNDg1MDAyRThFMDIwMDFDRjYKKzoxMDY5MDAwMEFDQzkwMDAwQUY4ODAwMzAxMTE5MDAwM0FGRTIwMDAwRUQKKzoxMDY5MTAwMDBBMDAwNTdFMDAwMDI4MjEyNTBDMDAwMTMxODQwMDBGQUIKKzoxMDY5MjAwMDAwMDAyODIxMEEwMDA1N0VBRjg0MDAzODNDMDcwODAwREIKKzoxMDY5MzAwMDI0RTc1QzM4MDA4NzgwMjEwMDAwMjAyMUFDQzAwMDAwRTMKKzoxMDY5NDAwMDBBMDAwNTA1QUUwMDAwMDAzQzA1MDgwMDI0QTU1Q0I4NUYKKzoxMDY5NTAwMDBBMDAwNjNEMjQwNDAwODc4RTA0MDAwNDBFMDAwMjNCNUEKKzoxMDY5NjAwMDAwMDAwMDAwMEEwMDA1QTJBRTgyMDAwODMwODRGRkZGOEMKKzoxMDY5NzAwMDMwQzYwMEZGOEY0MjAxQjgwNDQwRkZGRTAwMDY0NDAwMEQKKzoxMDY5ODAwMDAxMDQzMDI1M0MwNzIwMDAwMEM3MjAyNTNDMDMxMDAwRUYKKzoxMDY5OTAwMEFGNDAwMTgwQUY0NTAxODRBRjQ0MDE4ODAzRTAwMDA4QTcKKzoxMDY5QTAwMEFGNDMwMUI4MjdCREZGRThBRkIwMDAxMEFGQkYwMDE0ODAKKzoxMDY5QjAwMDNDMDc2MDAwMjQwNjAwMDIxMDgwMDAwNjAwQTA4MDIxMzEKKzoxMDY5QzAwMDAwMTAxMDJCOEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4RTAKKzoxMDY5RDAwMDI3QkQwMDE4M0MwOTYwMEVBRDIwMDAzNDhDRTUyMDFDNUEKKzoxMDY5RTAwMDhGODIwMDFDMjQwOEZGRkMwMEE4MTgyNEFDRTMyMDFDQTQKKzoxMDY5RjAwMDBFMDAwNkYyOEM0NTAwMEMwMDEwMTAyQjhGQkYwMDE0MDcKKzoxMDZBMDAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODNDMDI2MDBFQTQKKzoxMDZBMTAwMDM0NDcwMTAwMjQwOTAwMTgyNzRBMDQwMDAwMDAwMDAwNDAKKzoxMDZBMjAwMDAwMDAwMDAwMDAwMDAwMDAzQzA2MDA1MDM0QzMwMjAwREIKKzoxMDZBMzAwMEFGNDQwMDM4QUY0NTAwM0NBRjQzMDAzMDAxNDAxODIxNUYKKzoxMDZBNDAwMDhGNEIwMDAwMzE2ODAwMjAxMTAwRkZGRDI0MDYwMDdGRkQKKzoxMDZBNTAwMDI0MDhGRkZGOEM2QzAwMDAyNEM2RkZGRjI0NjMwMDA0QTEKKzoxMDZBNjAwMEFDRUMwMDAwMTRDOEZGRkIyNEU3MDAwNDAwMDAwMDAwQTkKKzoxMDZBNzAwMDAwMDAwMDAwMDAwMDAwMDAzQzBGMDAyMEFGNEYwMDMwN0QKKzoxMDZBODAwMDAwMDAwMDAwMjRBRDAyMDAwMUE1NzAyQjI1MjlGRkZGQTYKKzoxMDZBOTAwMDAwOEUyMDIxMTUyMEZGRTEwMUEwMjgyMTAzRTAwMDA4M0QKKzoxMDZBQTAwMDAwMDAwMDAwMjdCREZGRTBBRkIxMDAxNEFGQkYwMDE4MjkKKzoxMDZBQjAwMEFGQjAwMDEwM0MwNTYwMEU4Q0EyMDAzNDAwODA4ODIxMkQKKzoxMDZBQzAwMDE0NDAwMDA2M0MwNDYwMDA4Qzg3MjAxQzI0MDhGRkZDNTYKKzoxMDZBRDAwMDAwRTgzMDI0MzRDMzAwMDFBQzgzMjAxQzhGOEIwMDFDRTEKKzoxMDZBRTAwMDI0MDkwMDAxQUNBOTAwMzQ5NTY5MDAwMjhENjUwMDE0RTkKKzoxMDZBRjAwMDhENzAwMDBDMkQyNDAwODE4RDY3MDAwNDhENjYwMDA4QzgKKzoxMDZCMDAwMDEwODAwMDA3OEQ2QTAwMTAyRDJDMDAwNDE1ODAwMDBFRTcKKzoxMDZCMTAwMDMwQ0UwMDA3MzEyRDAwMDMxMUEwMDAwQjAwMDAwMDAwNTMKKzoxMDZCMjAwMDI0MDQwMDhCMDIwMDI4MjEwRTAwMDZGMjI0MDYwMDAzMzQKKzoxMDZCMzAwMDAwMTExMDJCOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMDAKKzoxMDZCNDAwMDAzRTAwMDA4MjdCRDAwMjAxNUMwRkZGNjI0MDQwMDhCRDkKKzoxMDZCNTAwMDNDMDMwMDIwQUY0MzAwMzAwMDAwMDAwMDI0MDIwMDAxOEQKKzoxMDZCNjAwMEFGODIwMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKKzoxMDZCNzAwMDNDMUYwMTUwMDEzRkM4MjUyNTM4MDAwMzNDMEY2MDBFMjMKKzoxMDZCODAwMEFGNDcwMDM4MDAxODE4ODJBRjQ2MDAzQzM1RTgwMDNDOUIKKzoxMDZCOTAwMEFGNTkwMDMwMjc0NzA0MDA4RjQ0MDAwMDMwODYwMDIwQTIKKzoxMDZCQTAwMDEwQzBGRkZEMDAwMDAwMDAxMDYwMDAwODI0NjZGRkZGMTkKKzoxMDZCQjAwMDI0MDNGRkZGOENFQjAwMDAyNEM2RkZGRjI0RTcwMDA0NDIKKzoxMDZCQzAwMEFEMEIwMDAwMTRDM0ZGRkIyNTA4MDAwNDNDMDg2MDBFNTkKKzoxMDZCRDAwMEFEMDkwMDM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKKzoxMDZCRTAwMDNDMDcwMDIwQUY0NzAwMzAwMDAwMDAwMDBFMDAwNzFBRUQKKzoxMDZCRjAwMDAxNDAyMDIxMDIwMDI4MjEwMDAwMjAyMTBFMDAwNkYyODEKKzoxMDZDMDAwMDI0MDYwMDAzMDAxMTEwMkI4RkJGMDAxODhGQjEwMDE0NTEKKzoxMDZDMTAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkQ4N0IKKzoxMDZDMjAwMEFGQjIwMDE4MzA5MkZGRkZBRkIxMDAxNEFGQkYwMDIwMjkKKzoxMDZDMzAwMEFGQjMwMDFDQUZCMDAwMTAxMjQwMDAyQzAwMDA4ODIxNDAKKzoxMDZDNDAwMDBBMDAwN0IyMjQxMzAwMDE1MEIzMDA0MDhDRTUwMDBDODkKKzoxMDZDNTAwMDAwMDAwMDBEMjYzOTAwMDEzMzMxRkZGRjI0RjgwMDIwMjkKKzoxMDZDNjAwMDAyMzIzODJCMTBFMDAwMjFBRjk4MDAxQzhGODIwMDE0RjQKKzoxMDZDNzAwMDE0NDAwMDFFOEY4NzAwMUMzQzA2NzAwMDNDMDMyMDAwNUYKKzoxMDZDODAwMDhDRTQwMDAwMDA4NjI4MjQxNEEzMDAxODhGODUwMDNDQTMKKzoxMDZDOTAwMDAwMDQ0NDAyM0MwOTgwMDAwMDg5ODAyNDE0QTBGRkVBMUIKKzoxMDZDQTAwMDMxMDYwMEZGMjQwQTAwMDIxMENBMDAyRTI4Q0IwMDAzODAKKzoxMDZDQjAwMDExNjAwMDE2MjQwQzAwMDMxNEQzRkZFNzI2MzkwMDAxRUQKKzoxMDZDQzAwMDAyMDAyODIxMEUwMDA3MDAyNDA0MDAwMThGODcwMDFDMDkKKzoxMDZDRDAwMEFGODIwMDNDMjYzOTAwMDEzMzMxRkZGRjI0RjgwMDIwNDkKKzoxMDZDRTAwMDAyMzIzODJCMTRFMEZGRTFBRjk4MDAxQzAyMjAxMDIxODMKKzoxMDZDRjAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0MUIKKzoxMDZEMDAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyODEwQ0MwMDFBNDcKKzoxMDZEMTAwMDI0MEQwMDA0MTRDREZGRDAyNjM5MDAwMTMwOEVGRkZGNzIKKzoxMDZEMjAwMDAwMEUxOUMwOEY0NDAxQjgwNDgwRkZGRTNDMEYxMDAwMTQKKzoxMDZEMzAwMDNDMTAyMDA0QUY0MzAxODBBRjQwMDE4NEFGNTAwMTg4NzQKKzoxMDZENDAwMEFGNEYwMUI4MEEwMDA3QUQyNjM5MDAwMTBFMDAwNkYyNjgKKzoxMDZENTAwMDI0MDQwMDg0MTYwMEZGQkY4Rjg3MDAxQzBBMDAwN0FDQzQKKzoxMDZENjAwMEFGODAwMDNDMDIwMDI4MjEwRTAwMDcwMDAwMDAyMDIxMTcKKzoxMDZENzAwMDBBMDAwN0NCOEY4NzAwMUMwRTAwMDc0MDAyMDAyMDIxNkQKKzoxMDZEODAwMDhGODcwMDFDMEEwMDA3Q0NBRjgyMDAzQzMwODJGRkZGRDcKKzoxMDZEOTAwMDE0NDAwMDAzMDAwMDE4MjEwMDA0MjQwMjI0MDMwMDEwMDIKKzoxMDZEQTAwMDMwODUwMEZGMTRBMDAwMDUzMDg3MDAwRjI0NjYwMDA4MUUKKzoxMDZEQjAwMDAwMDQyMjAyMzBDMzAwRkYzMDg3MDAwRjE0RTAwMDA1RkEKKzoxMDZEQzAwMDMwODkwMDAzMjQ2ODAwMDQwMDA0MjEwMjMxMDMwMEZGMUQKKzoxMDZERDAwMDMwODkwMDAzMTUyMDAwMDUzODhCMDAwMTI0NkEwMDAyNjkKKzoxMDZERTAwMDAwMDQyMDgyMzE0MzAwRkYzODhCMDAwMTMxNjQwMDAxMzAKKzoxMDZERjAwMDEwODAwMDAyMjQ2QzAwMDEzMTgzMDBGRjAzRTAwMDA4RDIKKzoxMDZFMDAwMDAwNjAxMDIxMzA4QkZGRkYwMDBCMzk0MjMwRTYwMEZGOUQKKzoxMDZFMTAwMDNDMDkwODAwMjUyOTVCQjgwMDA2NDA4MDAxMDk2MDIxNzMKKzoxMDZFMjAwMDhEODcwMDAwMzE2NDAwMUYyNDBBMDAwMTAwOEExODA0QzUKKzoxMDZFMzAwMDMwQTUwMEZGMDBFMzIwMjUxNEEwMDAwMjAwMDMxMDI3NjYKKzoxMDZFNDAwMDAwRTIyMDI0MjQwRjAwMDEwMENGNzAwNDAxMDk2ODIxMTIKKzoxMDZFNTAwMDAwMEUyODI3MTQ4MDAwMDVBREE0MDAwMDhGODYwMDBDQ0EKKzoxMDZFNjAwMDAwQTYxMDI0MDNFMDAwMDhBRjgyMDAwQzhGODgwMDBDRkQKKzoxMDZFNzAwMDAxQzgxMDI1MDNFMDAwMDhBRjgyMDAwQzNDMDYwMDFGOEIKKzoxMDZFODAwMDNDMDM2MDAwMzA4NEZGRkYzNEM1RkY4MDI0MDIwMDIwRjMKKzoxMDZFOTAwMEFDNjAyMDA4QUM2MDIwMENBQzYwMjAxMEFDNjUyMDE0MDUKKzoxMDZFQTAwMEFDNjQyMDE4QUM2MjIwMDAwMDAwMDAwMDAwMDAwMDAwNkMKKzoxMDZFQjAwMDAzRTAwMDA4MDAwMDAwMDAyN0JERkZFODI0MDJGRkZGRjgKKzoxMDZFQzAwMEFGQkYwMDEwQUY4MjAwMEMwMDAwMjAyMTNDMDYwODAwN0MKKzoxMDZFRDAwMDI0QzY1QkI4MjQwNUZGRkYyNDg5MDAwMTAwMDQ0MDgwMUMKKzoxMDZFRTAwMDMxMjRGRkZGMDEwNjE4MjEyQzg3MDAyMDE0RTBGRkZBNEYKKzoxMDZFRjAwMEFDNjUwMDAwMEUwMDA4MzYwMDAwMjAyMTI0MDIwMDAxQ0QKKzoxMDZGMDAwMDNDMDQ2MDAwMjQwNTAwMjBBQzgyMjAxOEFDODUyMDAwRTEKKzoxMDZGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0NEEwMDAxMDIKKzoxMDZGMjAwMDMxNDJGRkZGMkM0NjA0MDAxNEMwRkZGNzhGQkYwMDEwNTIKKzoxMDZGMzAwMDAzRTAwMDA4MjdCRDAwMTg4RjgzMDAwODJDNjIwNDAwQkUKKzoxMDZGNDAwMDAzRTAwMDA4Mzg0MjAwMDE4RjgzMDAwODI0NjIwMDAxM0EKKzoxMDZGNTAwMDAzRTAwMDA4QUY4MjAwMDg4RjgzMDAwODI0NjJGRkZGNkYKKzoxMDZGNjAwMDAzRTAwMDA4QUY4MjAwMDgyN0JERkZFMEFGQjEwMDE0QzYKKzoxMDZGNzAwMEFGQkYwMDE4QUZCMDAwMTA4RjZCMDAzMDNDMDY2MDAwNTAKKzoxMDZGODAwMDAwODA4ODIxQUNDQjIwMDg4RjZBMDAyQzNDMDI4MDAwNTYKKzoxMDZGOTAwMDI0MDMwMDA4QUNDQTIwMEM5NzY5MDAzQTk3NjgwMDM4QUYKKzoxMDZGQTAwMDAwMDkyQzAwMzEwN0ZGRkYwMEE3MjAyNUFDQzQyMDEwRUEKKzoxMDZGQjAwMEFDQzIyMDE0QUNDMzIwMDAwMDAwMDAwMDAwMDAwMDAwQTAKKzoxMDZGQzAwMDAwMDAwMDAwM0MwMzYwMDA4QzZEMjAwMDMxQUMwMDA4MjQKKzoxMDZGRDAwMDE1ODBGRkY5MDAwMDAwMDA4QzZFMjAxNDA1QzAwMDIwMTEKKzoxMDZGRTAwMDAwMDAwMDAwMEUwMDA3RkE4Rjg0MDAwQzAwMDI0MDgwQjEKKzoxMDZGRjAwMDNDMDkwODAwMjUyOTVCQjgwMTA5MzgyMThDRTQwMDAwMTAKKzoxMDcwMDAwMDBFMDAwN0ZBMDAwMjgxNDAwMjAyMjAyMTMwOTBGRkZGQUIKKzoxMDcwMTAwMDAyMDAyMDIxMEUwMDA4MTgwMDAwMjgyMTNDMEM4MDAwRUUKKzoxMDcwMjAwMDAyMkM1ODI1MzIxMEZGRkYzQzExNjAwMDI0MEEwMDIwN0EKKzoxMDcwMzAwMEFFMkIyMDE0QUUzMDIwMThBRTJBMjAwMDAwMDAwMDAwMzUKKzoxMDcwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAwMTAyMThGQkYwMDE4QTcKKzoxMDcwNTAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwOUUKKzoxMDcwNjAwMDhDNjYyMDE0M0MwMjAwMUYzNDQzRkY4MDNDMUZGRkU4NjUKKzoxMDcwNzAwMDAwQzNDMDI0MzdGOTA4MDAwMzE5ODAyMTAwMTA3OUMyMjkKKzoxMDcwODAwMDNDMEM4MDAwMDIyQzU4MjUzMUYwRkZGRjNDMTE2MDAwQzEKKzoxMDcwOTAwMDI0MEEwMDIwQUUyQjIwMTRBRTMwMjAxOEFFMkEyMDAwODcKKzoxMDcwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDAxMDIxQUQKKzoxMDcwQjAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4REMKKzoxMDcwQzAwMDI3QkQwMDIwMjdCREZGRThBRkIwMDAxMDM0MDJGRkZGNEUKKzoxMDcwRDAwMDMwOTBGRkZGQUZCRjAwMTQxMjAyMDAwNjAyMDAyMDIxMTMKKzoxMDcwRTAwMDBFMDAwODM2MDAwMDAwMDAwMjAwMjAyMTBFMDAwODE4RTMKKzoxMDcwRjAwMDI0MDUwMDAxOEY4NDAwMDg4RkJGMDAxNDhGQjAwMDEwOUEKKzoxMDcxMDAwMDI0ODNGRkZGMjdCRDAwMTgwM0UwMDAwOEFGODMwMDA4QjkKKzoxMDcxMTAwMDAwMDQzOUMyMzBFNjAwM0YwMDA0M0I0MjAwMDcxODQwM0IKKzoxMDcxMjAwMDI0MDIxMDAwMkNDNDAwMjAyNEM4RkZFMEFGNDIwMDJDMzEKKzoxMDcxMzAwMDI0NjMwMDAxMTQ4MDAwMDMzMEE5MDBGRjAwMDcxODQwRjkKKzoxMDcxNDAwMDMxMDYwMEZGMDAwMzYwODAyNDA4MDAwMTAxOUE1ODIxRTUKKzoxMDcxNTAwMDNDMEEwMDBFMDBDODI4MDQwMTZBMzgyMTExMjAwMDA1RUQKKzoxMDcxNjAwMDAwMDUzMDI3OENFOTAwMDAwMTI1MzAyNTAzRTAwMDA4RTgKKzoxMDcxNzAwMEFDRTYwMDAwOENFRTAwMDAwMUM2NjgyNDAzRTAwMDA4QzUKKzoxMDcxODAwMEFDRUQwMDAwMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwQUEKKzoxMDcxOTAwMDNDMDQ2MDAwOEM4NTA4MDgzNDAzRjAwMDMwQTJGMDAwNDUKKzoxMDcxQTAwMDUwNDMwMDA2MjQwMjAwMDE4Qzg3MDgwODM0MDRFMDAwRTQKKzoxMDcxQjAwMDMwRTZGMDAwMTBDNDAwMUUyNDAyMDAwMkFGODIwMDQwM0UKKzoxMDcxQzAwMDNDMTA2MDAwM0MwQTAyMDBBRTBBMDgxNDI0MDkxMDAwQkEKKzoxMDcxRDAwMDNDMDgwMDBFOEUwMzQ0MDAwMzQ4MjAyMUFGNDkwMDJDRDgKKzoxMDcxRTAwMDI0MDUwMTIwMEUwMDBDRTAwMDAwMzAyMThGODMwMDQwQjgKKzoxMDcxRjAwMDEwNjAwMDA0M0MwMjE2OTEyNDBCMDAwMTEwNkIwMDBFN0QKKzoxMDcyMDAwMDNDMDIzRDZDMzQ0RjAwOTBBRTBGNDQwODhGQkYwMDE0MTkKKzoxMDcyMTAwMDhGQjAwMDEwM0MwQzYwMDAyNDBFMTAwMDNDMEQwMjAwRUEKKzoxMDcyMjAwMDI3QkQwMDE4QUQ4RTQ0MjAwM0UwMDAwOEFEOEQwODEwODYKKzoxMDcyMzAwMDBBMDAwOTA3QUY4MDAwNDAzQzAyMThEQTM0NEYwMDkwODIKKzoxMDcyNDAwMEFFMEY0NDA4OEZCRjAwMTQ4RkIwMDAxMDNDMEM2MDAwREMKKzoxMDcyNTAwMDI0MEUxMDAwM0MwRDAyMDAyN0JEMDAxOEFEOEU0NDIwMDYKKzoxMDcyNjAwMDAzRTAwMDA4QUQ4RDA4MTAwQTAwMDhEQjI0MDUwMDAxQ0EKKzoxMDcyNzAwMDBBMDAwOERCMDAwMDI4MjEzQzA4MDgwMDI1MDg1RkM0M0MKKzoxMDcyODAwMDI0MDRGRkZGMDEwMDE4MjEyNDAyMDAxRTI0NDJGRkZGRjYKKzoxMDcyOTAwMEFDNjQwMDAwMDQ0MUZGRkQyNDYzMDAwNDNDMDcwODAwQzcKKzoxMDcyQTAwMDI0RTc2MDQwOENFNUZGRkMyNDA0MDAxQzI0MDYwMDAxNTgKKzoxMDcyQjAwMDMwOEEwMDFGMDE0NjQ4MDQyNDg0MDAwMTAwMDkxMDI3NzkKKzoxMDcyQzAwMDJDODMwMDIwMTQ2MEZGRkEwMEEyMjgyNEFDRTVGRkZDMDgKKzoxMDcyRDAwMDNDMDU2NjY2MzRBNDYxNkUzQzA2MDgwMDI0QzY2MTAwNjUKKzoxMDcyRTAwMEFGODQwMDU4QUY4ODAwOUMyNDA0RkZGRjAwQzAxODIxMjEKKzoxMDcyRjAwMDI0MDIwMDFGMjQ0MkZGRkZBQzY0MDAwMDA0NDFGRkZEOTQKKzoxMDczMDAwMDI0NjMwMDA0M0MwNzY2NjYzQzA1MDgwMDI0QTU2MEMwQjEKKzoxMDczMTAwMEFGODYwMDQ4MzRFNjYxNkVBRjg2MDA5ODI0MDRGRkZGMTQKKzoxMDczMjAwMDAwQTAxODIxMjQwMjAwMEYyNDQyRkZGRkFDNjQwMDAwREIKKzoxMDczMzAwMDA0NDFGRkZEMjQ2MzAwMDQzQzBCNjY2NjNDMDYwODAwMjQKKzoxMDczNDAwMDI0QzY2MDQwMzU2ODYxNkVBRjg1MDBBNEFGODgwMDcwQzgKKzoxMDczNTAwMDI0MDRGRkZGMDBDMDE4MjEyNDAyMDAxRjI0NDJGRkZGNjUKKzoxMDczNjAwMEFDNjQwMDAwMDQ0MUZGRkQyNDYzMDAwNDNDMEQ2NjY2MkMKKzoxMDczNzAwMDNDMEEwODAwMjU0QTYxODAzNUFDNjE2RUFGODYwMDkwRkEKKzoxMDczODAwMEFGOEMwMDVDMjQwNEZGRkYwMTQwMTgyMTI0MDIwMDAzOUQKKzoxMDczOTAwMDI0NDJGRkZGQUM2NDAwMDAwNDQxRkZGRDI0NjMwMDA0QUQKKzoxMDczQTAwMDNDMDkwODAwMjUyOTYxOTA4RDI3RkZGQzI0MDQwMDA2NzQKKzoxMDczQjAwMDI0MDUwMDAxMzA5OTAwMUYwMzI1QzAwNDI0ODQwMDAxMjYKKzoxMDczQzAwMDAwMTg3ODI3MkM4RTAwMjAxNUMwRkZGQTAwRUYzODI0MTMKKzoxMDczRDAwMEFEMjdGRkZDM0MwOTY2NjYyNDAzMDQwMDI0MDQwM0RDOUIKKzoxMDczRTAwMDI0MDUwMjAwMjQwNjAwNjYzNTIyNjE2RTNDMDgwODAwNzAKKzoxMDczRjAwMDI1MDg1Q0M0QUY4MjAwNzRBRjgzMDA0NEFGODMwMDZDODcKKzoxMDc0MDAwMEFGODMwMDUwQUY4MzAwODRBRjhBMDA4Q0FGODQwMDY0RTgKKzoxMDc0MTAwMEFGODUwMDRDQUY4NjAwNTRBRjg0MDA3OEFGODUwMDYwMjQKKzoxMDc0MjAwMEFGODYwMDgwMDEwMDE4MjEyNDAyMDAwMjI0NDJGRkZGRTEKKzoxMDc0MzAwMEFDNjAwMDAwMDQ0MUZGRkQyNDYzMDAwNDI0MDQwMDAzNDkKKzoxMDc0NDAwMDI0MDMwMDBDM0MwQTA4MDAyNTRBNUNEMEFGOEEwMDY4N0YKKzoxMDc0NTAwMDBBMDAwOUFFMjQwNUZGRkYwMDA0MTg4MDI0ODQwMDAxRkYKKzoxMDc0NjAwMDAwNjg1ODIxMkM4NzAwQzAxNEUwRkZGQkFENjUwMDAwQzgKKzoxMDc0NzAwMDNDMEU2NjY2MzVDRDYxNkUyNDBDMTdBMDI0MDgxODAwRkEKKzoxMDc0ODAwMEFGOEQwMDg4QUY4QzAwOTQwM0UwMDAwOEFGODgwMDdDQ0IKKzoxMDc0OTAwMDI0ODQwMDdGMDAwNDIxQzIwMDAwNDAyMTAwMDAzMDIxMkMKKzoxMDc0QTAwMDAwMDAzODIxMDAwMDI4MjEwQTAwMDlDNUFGODQwMEEwOEYKKzoxMDc0QjAwMDEwNjAwMDA2MjRFNzAwMDEwMEM0MzAyMTI0QTUwMDAxNkIKKzoxMDc0QzAwMDJDQzIwQkY1MTQ0MEZGRkEyQ0EzMDA2NjNDMDkwODAwRkYKKzoxMDc0RDAwMDI1Mjk2MTgwMDEyMDE4MjEyNDAyMDAwMzI0NDJGRkZGOTYKKzoxMDc0RTAwMEFDNjAwMDAwMDQ0MUZGRkQyNDYzMDAwNDEwRTAwMDFBQkEKKzoxMDc0RjAwMDI0RTNGRkZGMDAwMzI5NDIxMEEwMDAwQTAwMDAyMDIxMUUKKzoxMDc1MDAwMDI0MDZGRkZGM0MwMzA4MDAyNDYzNjE4MDI0ODQwMDAxRkIKKzoxMDc1MTAwMDAwODU1MDJCQUM2NjAwMDAyNTA4MDAwMTE1NDBGRkZCREMKKzoxMDc1MjAwMDI0NjMwMDA0MzBFMjAwMUYxMDQwMDAwODAwMDg2ODgwNTcKKzoxMDc1MzAwMDI0MEMwMDAxMDA0QzM4MDQwMDA4NTg4MDAxNjkyODIxRkYKKzoxMDc1NDAwMDI0RTZGRkZGMDNFMDAwMDhBQ0E2MDAwMDAxQTk0MDIxRUIKKzoxMDc1NTAwMDI0MDlGRkZGQUQwOTAwMDAwM0UwMDAwODAwMDAwMDAwNUYKKzoxMDc1NjAwMEFGNDQwMDI4M0MwNDAwMEMwMzQ0MjAyMTAwMDUyODgyN0QKKzoxMDc1NzAwMDBBMDAwQ0UwMDAwMDMwMjEwMDA0MjE4MDNDMDM2MDAwODAKKzoxMDc1ODAwMEFDNjQxMDA4MDAwMDAwMDAwMDA1Mjk4MEFDNjUxMDBDRjgKKzoxMDc1OTAwMDAwMDAwMDAwMDNFMDAwMDg4QzYyMTAwQzI3QkRGRkU4MkIKKzoxMDc1QTAwMDAwODAyODIxMjQwNDAwMzhBRkJGMDAxNDBFMDAwOUY1MjQKKzoxMDc1QjAwMEFGQjAwMDEwMjQwNDBFMDBBRjQ0MDAyODNDMTAwMDBDQjMKKzoxMDc1QzAwMDAzNTAyMDIxMjQwNTAwMTAwRTAwMENFMDAwMDAzMDIxQTMKKzoxMDc1RDAwMDAzNTAxMDIxQUM0MDAwMDBBQzQwMDAwNDI0MDQwMDM4RUIKKzoxMDc1RTAwMDhGQkYwMDE0OEZCMDAwMTAyNDA1M0ZGRjI3QkQwMDE4ODcKKzoxMDc1RjAwMDBBMDAwOUY1OEM0MzAwMDAwMDA0MjE4MDNDMDM2MDAwNzAKKzoxMDc2MDAwMEFDNjQxMDA4MDAwMDAwMDA4QzYyMTAwQzAzRTAwMDA4NUQKKzoxMDc2MTAwMDAwMDIxMTgyMjdCREZGQzhBRkI0MDAyMDhGOTQwMDY4MUMKKzoxMDc2MjAwMEFGQkUwMDMwQUZCNzAwMkNBRkI2MDAyODAwMDBCODIxQzUKKzoxMDc2MzAwMDAwODBCMDIxMjQxRTAwQzBBRkJGMDAzNEFGQjUwMDI0Q0QKKzoxMDc2NDAwMEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwNjAKKzoxMDc2NTAwMDBBMDAwQTMyQUZBNTAwM0M1MDQwMDAwMThGOTQwMDY4MzgKKzoxMDc2NjAwMDI3REVGRkZGMTNDMDAwMjgyNjk0MDAwNDhFOTIwMDAwM0UKKzoxMDc2NzAwMDNDMDMwODAwMjQ2MzVGQzAxMjQwRkZGNzAyODMxMDJCMTUKKzoxMDc2ODAwMDNDMDQwODAwMjQ4NDVDQzQwMjg0MTAyMzAwMDJBOEMwQzcKKzoxMDc2OTAwMDAwMDA5ODIxMEEwMDBBNDEyNDExMDAwMTAwMTE4ODQwQ0QKKzoxMDc2QTAwMDEyMjAwMDI2MDAwMDAwMDAwMkIzODAyMTAyNTEyODI0OEQKKzoxMDc2QjAwMDAyMDAyMDIxMTBBMEZGRjkyNjczMDAwMTBFMDAwOUZFMzAKKzoxMDc2QzAwMDAwMDAwMDAwMDAxNjY4NDAzMkVDMDAwMTAxQUMyMDIxRUYKKzoxMDc2RDAwMDBFMDAwOUY1MDIwMDI4MjE4Rjg5MDA5NDI2RjcwMDAxODkKKzoxMDc2RTAwMDhGQTYwMDNDM0FFQjAwMDEzMTZBMDAwMTI1MjhGRkZGMUMKKzoxMDc2RjAwMDAwMTEzODI3MDJDQUIwMjFBRjg4MDA5NDE2RTZGRkU3RDAKKzoxMDc3MDAwMDAyNDc5MDI0QUU5MjAwMDAwMkUwMTAyMThGQkYwMDM0QTcKKzoxMDc3MTAwMDhGQkUwMDMwOEZCNzAwMkM4RkI2MDAyODhGQjUwMDI0QTUKKzoxMDc3MjAwMDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0RUIKKzoxMDc3MzAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAzODNDMEUwODAwQTEKKzoxMDc3NDAwMDI1Q0U1RkMwMDI4RTEwMkIwQTAwMEEyREFFOTIwMDAwREIKKzoxMDc3NTAwMDI3QkRGRkQ4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDIwRkQKKzoxMDc3NjAwMEFGQjMwMDFDQUZCMjAwMTgwMEEwODgyMTEwQTAwMDFGMEEKKzoxMDc3NzAwMDAwMDQ4MDQwM0MxMzA4MDAyNjczNUNDNDBBMDAwQTdBQTcKKzoxMDc3ODAwMDI0MTIwMDAxMTIyMDAwMTkyNjEwMDAwMTBFMDAwQTE1MTMKKzoxMDc3OTAwMDAyMDAyMDIxMDAwMjMxNDIyNDQ0RkZBMDAwMDYxODgwOEMKKzoxMDc3QTAwMDMwNDUwMDFGMkM4MjE3QTEwMDczMTgyMTI2MzFGRkZGREUKKzoxMDc3QjAwMDEwNDBGRkY0MDBCMjMwMDQ4QzY5MDAwMDAyMDAyMDIxNjgKKzoxMDc3QzAwMDI0MDUzRkZGMDEyNjQwMjQxNTAwRkZFRTAxMjYzODI1NDEKKzoxMDc3RDAwMDBFMDAwOUY1QUM2NzAwMDA4RjhBMDA5NDI2MTAwMDAxQTYKKzoxMDc3RTAwMDI1NDcwMDAxMTYyMEZGRTlBRjg3MDA5NDhGQkYwMDIwRDYKKzoxMDc3RjAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMkYKKzoxMDc4MDAwMDAzRTAwMDA4MjdCRDAwMjg4Rjg1MDA5QzAwODA1ODIxRDgKKzoxMDc4MTAwMDAwMDA0MDIxMDAwMDQ4MjEyNDBBMDAxRjNDMEMwODAwMDEKKzoxMDc4MjAwMDI1OEM2MDNDM0MwRDA4MDAyNUFENUZDNDhDQTYwMDAwOTMKKzoxMDc4MzAwMDUwQzAwMDE0MDAwMDQwMjEwMEFEMTAyMzAwMDIzOEMwRTkKKzoxMDc4NDAwMDI0MDMwMDAxMEEwMDBBQjMwMDAwMjAyMTE1MDAwMDAzRjAKKzoxMDc4NTAwMDAwRTQxMDIxMjQ0ODIwMjQwMDAwNDgyMTI1MjkwMDAxQUIKKzoxMDc4NjAwMDUxMkIwMDEzMjUwNkRGREMxMDYwMDAwNjI0ODQwMDAxODQKKzoxMDc4NzAwMDAwQzM3MDI0MTVDMEZGRjUwMDAzMTg0MDBBMDAwQUIxQzgKKzoxMDc4ODAwMDAwMDA0MDIxMTBBQzAwMjYyNEEzMDAwNDAwNjAyODIxNDEKKzoxMDc4OTAwMDI1NEFGRkZGMTU0MEZGRTVBRjg1MDA5QzUxMkIwMDA0RjIKKzoxMDc4QTAwMDI1MDZERkRDMDAwMDQwMjEwM0UwMDAwODAxMDAxMDIxNzQKKzoxMDc4QjAwMDAwMDY2MTQyMzBDNTAwMUYwMDBDNTA4MDNDMDcwODAwRTQKKzoxMDc4QzAwMDI0RTc1RkM0MjQwNDAwMDEwMTQ3MzAyMTExMjAwMDBGODgKKzoxMDc4RDAwMDAwQTQyMDA0M0MwNTA4MDAyNEE1NjA0MDE0ODAwMDA1OTUKKzoxMDc4RTAwMDI1MjlGRkZGMjRDNjAwMDQxMEM1MDAxMTAwMDAwMDAwNzgKKzoxMDc4RjAwMDI0MDQwMDAxOENDRjAwMDAwMDA0QzAyNzAwMDQyMDQwQjUKKzoxMDc5MDAwMDAxRjg2ODI0MTUyMEZGRjVBQ0NEMDAwMDhGOTkwMDc4QjAKKzoxMDc5MTAwMDAxMDAxMDIxMDMyQjQ4MjMwM0UwMDAwOEFGODkwMDc4MDEKKzoxMDc5MjAwMDNDMDUwODAwMjRBNTVGQzQwQTAwMEFCQjAwMDA0MDIxRjIKKzoxMDc5MzAwMDNDMDYwODAwMjRDNjVGQzQwQTAwMEFENDI0MDQwMDAxREYKKzoxMDc5NDAwMDMwODgwMEZGMjQwMjAwMDIxMTAyMDAwQTI0MDMwMDAzMTEKKzoxMDc5NTAwMDExMDMwMDVDOEY4OTAwQTQyNDA0MDAwNDExMDQwMDVGNUIKKzoxMDc5NjAwMDI0MDUwMDA1MTEwNTAwNjcwMDAwMTgyMTAzRTAwMDA4NDgKKzoxMDc5NzAwMDAwNjAxMDIxOEY4OTAwNDgzQzBDMDgwMDI1OEM2MTAwQjQKKzoxMDc5ODAwMDNDMDQwODAwMjQ4NDYxODAyNDAzMDAyMDEwNjAwMDBGNjAKKzoxMDc5OTAwMDAwMDA1ODIxMjQwRDAwMDIyNDBFMDAwMzNDMEYwODAwQjMKKzoxMDc5QTAwMDI1RUY2MTAwOEQyNzAwMDAxNEUwMDAwQjMwRjlGRkZGODgKKzoxMDc5QjAwMDI1MjkwMDA0MDEyNEMwMkI1MzAwMDAwMTAxODA0ODIxMjcKKzoxMDc5QzAwMDI0NjNGRkZGNTQ2MEZGRjg4RDI3MDAwMDAxNjAxODIxMzkKKzoxMDc5RDAwMDAzRTAwMDA4MDA2MDEwMjExMzIwMDAzMjNDMDUwMEZGODYKKzoxMDc5RTAwMDMwRTIwMEZGMDA0MDMwMjExMDQwMDA0MjAwMDA1MDIxRjIKKzoxMDc5RjAwMDI0MDUwMDAxMDAwMDIwMjEwMDA1Qzg0MDAwQTZDMDI0ODUKKzoxMDdBMDAwMDE3MDAwMDAzMzMyNTAwRkYxNEEwRkZGQjI0ODQwMDAxQUUKKzoxMDdBMTAwMDAxMkNDMDIzMDAxODI4QzAwMEFBNjAyMTAwOEM1MDIxMkUKKzoxMDdBMjAwMDMxNDQwMDFGMjQwQzAwMDEwMDhDMTgwNDAwMDMxMDI3QUYKKzoxMDdBMzAwMDAwRTIzMDI0MTEwRDAwNDFBRDI2MDAwMDExMEUwMDRDNzMKKzoxMDdBNDAwMDAwMEExODQwMTEwRDAwMzY4Rjg3MDA2QzUxMEUwMDU2NDkKKzoxMDdBNTAwMDhGOEMwMDYwMjQwRDAwMDQxMTBEMDA1QThGOEUwMDg0NUQKKzoxMDdBNjAwMDI0MEUwMDA1MTUwRUZGREEwMTYwMTgyMTI0MEIxNDMwRDYKKzoxMDdBNzAwMDExNDAwMDA2MDAwMDE4MjE4Rjg0MDBBMDI0NjMwMDAxM0IKKzoxMDdBODAwMDAwNkE0MDJCMTUwMEZGRkQwMTY0NTgyMThGOEEwMDgwOTkKKzoxMDdBOTAwMEFGODkwMDhDMDE2MDE4MjEyNTQ5RkZGRjBBMDAwQjBCRkMKKzoxMDdBQTAwMEFGODkwMDgwMDBFNTIwMjQwMDA3MzYwMjEwODBGRkQwNTcKKzoxMDdBQjAwMDI0MEEwMDE4MDAwNzU0MDIzMTQ2MDBGRjBBMDAwQjEzODUKKzoxMDdBQzAwMDI0MEEwMDEwM0MwQzA4MDAyNThDNjBDMDNDMDQwODAwMEYKKzoxMDdBRDAwMDI0ODQ2MTAwMEEwMDBBRkEyNDAzMDAxMDNDMEMwODAwMDgKKzoxMDdBRTAwMDI1OEM2MDQwM0MwNDA4MDAyNDg0NjBDMDBBMDAwQUY5MjgKKzoxMDdBRjAwMDhGODkwMDkwMDAwNzFBMDIzMDY2MDBGRjBBMDAwQjEzRkUKKzoxMDdCMDAwMDI0MEEwMDA4OEY4OTAwOEMzQzBDMDgwMDI1OEM2MTgwQjkKKzoxMDdCMTAwMDNDMDQwODAwMjQ4NDYxOTAwQTAwMEFGQTI0MDMwMDA0NEIKKzoxMDdCMjAwMDAwMEE0MDgwMjUwQjAwMzAyNEU2RkZGRjAxNjAxODIxODkKKzoxMDdCMzAwMEFGODkwMDQ4MEEwMDBCMEJBRjg2MDA2QzAwMEFDOTgyQUYKKzoxMDdCNDAwMDAwMTk3ODgwM0MwNzA4MDAyNEU3NjBDMDAxRTcyMDIxODUKKzoxMDdCNTAwMDAwMEExODQyOEM4RjAwMDAzMDc5MDAxRjAzMkMzODA0NzMKKzoxMDdCNjAwMDAwMDdDMDI3MDFGODYwMjQwQTAwMEIyOEFDOEMwMDAwMzUKKzoxMDdCNzAwMDAwMDMzMTQyMDAwNjI4ODAwMEFGMjgyMTMwNjIwMDFGMzgKKzoxMDdCODAwMDhDQjgwMDAwMjQ2MzAwMDEwMDRDQzgwNDAwMDMyMTQyQUIKKzoxMDdCOTAwMDAwMTkzODI3MDAwNDEwODAwMzA3MzAyNDAwNEYyMDIxRUIKKzoxMDdCQTAwMDBBMDAwQjZDQUNBNjAwMDAwMDBBNjhDMDI1QUIwMDMyQ0UKKzoxMDdCQjAwMDI1OEFGRkZGMDE2MDE4MjFBRjg5MDBBNDBBMDAwQjBCODIKKzoxMDdCQzAwMEFGOEEwMDYwMjU0QjEwMzBBRjg5MDA5MDAxNjAxODIxMEEKKzoxMDdCRDAwMDI1QzlGRkZGMEEwMDBCMEJBRjg5MDA4NDMwODYwMDA3MjAKKzoxMDdCRTAwMDJDQzIwMDA2MTA0MDAwMTQwMDAwMDAwMDAwMDY0MDgwNzcKKzoxMDdCRjAwMDNDMDMwODAwMjQ2MzU5QzgwMTAzMzgyMThDRTQwMDAwQzkKKzoxMDdDMDAwMDAwODAwMDA4MDAwMDAwMDAyNDA5MDAwMzEwQTkwMDBFRjUKKzoxMDdDMTAwMDAwMDAwMDAwMjQwQTAwMDUxMEFBMDAwQjAwMDAwMDAwNkMKKzoxMDdDMjAwMDI0MEIwMDAxMTBBQjAwMDgwMDAwMDAwMDhGOEMwMEEwQTYKKzoxMDdDMzAwMDEwQUMwMDA1MDAwMDAwMDAwM0UwMDAwODAwMDAxMDIxNjcKKzoxMDdDNDAwMDBBMDAwQTk5MDBBMDIwMjEwQTAwMEFFNzAwQzAyMDIxQUEKKzoxMDdDNTAwMDI3QkRGRkU4MzA4NDAwRkYyNDAzMDAwMjEwODMwMDBCREYKKzoxMDdDNjAwMEFGQkYwMDEwMjQwNjAwMDMxMDg2MDAzQTI0MDgwMDA0NjkKKzoxMDdDNzAwMDEwODgwMDY4MjQwRTAwMDUxMDhFMDA3RjJDQUYxNDMwOTEKKzoxMDdDODAwMDhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxODJDQTIwMDMwQjEKKzoxMDdDOTAwMDE0NDBGRkZDOEZCRjAwMTAyNEE1RkZEMDAwMDUzMUMyQTcKKzoxMDdDQTAwMDAwMDY2ODgwM0MwNzA4MDAyNEU3NjEwMDAxQTczMDIxMzYKKzoxMDdDQjAwMDhDQzkwMDAwMDAwNTI4ODIzMEFDMDAxRjI0MEIwMDAxOTUKKzoxMDdDQzAwMDAxOEI1MDA0OEY4NDAwNDgwMTJBNDAyNUFDQzgwMDAwNzUKKzoxMDdDRDAwMDhDODMwMDAwNTA2MDAwMDFBRjg2MDA0ODhGOTgwMDZDRDQKKzoxMDdDRTAwMDMwQUUwMDAxMjRBNkZGRkYyNzBGMDAwMTE1QzAwMDAyREYKKzoxMDdDRjAwMEFGOEYwMDZDMjRBNjAwMDEwMDA2NDE0MjAwMDgyMDgwREUKKzoxMDdEMDAwMDAwODcxODIxOEM3OTAwMDAzMEMyMDAxRjI0MDYwMDAxNzIKKzoxMDdEMTAwMDAwNDZGODA0MDMzRjM4MjQxMEUwRkZEQThGQkYwMDEwNUMKKzoxMDdEMjAwMDAwMDVDMTgyMDAxODcwODAzQzBGMDgwMDI1RUY2MEMwN0MKKzoxMDdEMzAwMDAxQ0Y0ODIxOEQyQjAwMDAwMDA1Njg0MjMxQTUwMDFGQUUKKzoxMDdENDAwMDAwQTY2MDA0MDE2QzUwMjUyN0JEMDAxODAzRTAwMDA4NjAKKzoxMDdENTAwMEFEMkEwMDAwMkNBNzAwMzAxNEUwRkZDQThGQkYwMDEwMkUKKzoxMDdENjAwMDMwQjkwMDA3MTcyM0ZGQzcyNEE4RkZDRTAwMDg2QTAyMTYKKzoxMDdENzAwMDAwMEQ2MDgwM0MwQjA4MDAyNTZCNjBDMDAxOEIzMDIxM0EKKzoxMDdEODAwMDhDQzQwMDAwMDAwODI4QzIzMEFBMDAxRjI0MDgwMDAxOEIKKzoxMDdEOTAwMDAxNDg0ODA0OEY4MjAwQTQwMDg5MTgyNUFDQzMwMDAwNjQKKzoxMDdEQTAwMDhDNUYwMDAwNTNFMDAwMDFBRjg2MDBBNDAwMDU3MDQwMjYKKzoxMDdEQjAwMDAwMEU3OTQyMDAwRjI4ODAzQzA0MDgwMDI0ODQ2MTAwRjIKKzoxMDdEQzAwMDAwQTQxODIxOEM2QjAwMDAyNURGMDAwMTMxQ0QwMDFGQkQKKzoxMDdERDAwMDAwMUY1MTQyMDFBODYwMDQwMTZDNDgyNTAwMEExMDgwNzAKKzoxMDdERTAwMEFDNjkwMDAwMDA0NDI4MjE4Q0E2MDAwMDhGOTgwMDYwMzgKKzoxMDdERjAwMDMzRjkwMDFGOEZCRjAwMTAwMzI4MzgwNDAwQzc3ODI1MEYKKzoxMDdFMDAwMDI3MEUwMDAxMjdCRDAwMThBQ0FGMDAwMDAzRTAwMDA4RkEKKzoxMDdFMTAwMEFGOEUwMDYwMjRBNUVGRDAyQ0I4MDQwMDEzMDBGRjk5QUEKKzoxMDdFMjAwMDhGQkYwMDEwMDAwNTMxNDIwMDA2NTg4MDNDMEEwODAwNTAKKzoxMDdFMzAwMDI1NEE2MDQwMDE2QTMwMjE4Q0M0MDAwMDMwQTMwMDFGMzUKKzoxMDdFNDAwMDI0MDkwMDAxMDA2OTEwMDQ4Rjk5MDA5MDAwODJGODI1MzAKKzoxMDdFNTAwMEFDREYwMDAwOEYyNzAwMDA1MEUwMDAwMUFGODYwMDkwRUIKKzoxMDdFNjAwMDhGOEQwMDg0OEZCRjAwMTAyN0JEMDAxODI1QUMwMDAxNDYKKzoxMDdFNzAwMDAzRTAwMDA4QUY4QzAwODQxNUUwRkY4MjhGQkYwMDEwODQKKzoxMDdFODAwMDhGODYwMEEwMDAwNjEwNDAwMDQ2RjgyMTAwMUYyMTAwNDgKKzoxMDdFOTAwMDAzRTRDODIxMDAxOTM4NDAyNEY4MTQzMDAwQjg0MDJCRkUKKzoxMDdFQTAwMDExMDBGRjc4OEZCRjAwMTAyNEE0RUJEMDBFMDAwMjBENEMKKzoxMDdFQjAwMDAwQzAyODIxMDAwMjc5NDIwMDBGNzA4MDNDMEQwODAwQUMKKzoxMDdFQzAwMDI1QUQ2MTgwMDFDRDIwMjE4QzhCMDAwMDMwNEMwMDFGM0UKKzoxMDdFRDAwMDI0MDYwMDAxMDE4NjE4MDQ4Rjg5MDA4QzAxNjM1MDI1NTcKKzoxMDdFRTAwMEFDOEEwMDAwOEQyNTAwMDA1MEEwMDAwMUFGODQwMDhDRkEKKzoxMDdFRjAwMDhGOTgwMDgwOEZCRjAwMTAyN0JEMDAxODI3MDgwMDAxNTEKKzoxMDdGMDAwMDAzRTAwMDA4QUY4ODAwODAzMEE1MDAwNzI0MDMwMDAzQzkKKzoxMDdGMTAwMDEwQTMwMDEwMjhBMjAwMDQxNDQwMDAwODI0MDcwMDAyNDcKKzoxMDdGMjAwMDI0MDMwMDA0MTBBMzAwMTUyNDA4MDAwNTEwQTgwMDBGNjYKKzoxMDdGMzAwMDhGODUwMEEwMDNFMDAwMDgwMDAwMDAwMDE0QTdGRkZERUIKKzoxMDdGNDAwMDAwODAyODIxMTRDM0ZGRkIyNDA0MDAwMjBBMDAwQkFCQUQKKzoxMDdGNTAwMDAwMDAwMDAwMjQwOTAwMDUwMDgwMjgyMTEwQzlGRkZCNTMKKzoxMDdGNjAwMDI0MDQwMDAzMDNFMDAwMDgwMDAwMDAwMDE0QzVGRkYxMzIKKzoxMDdGNzAwMDAwODAyODIxMEEwMDBCQUIyNDA0MDAwNTI0MEEwMDAxMUMKKzoxMDdGODAwMDAwODAyODIxMTBDQUZGRjEyNDA0MDAwNDAzRTAwMDA4NDcKKzoxMDdGOTAwMDAwMDAwMDAwMjdCREZGRTBBRkIwMDAxMDAwMDU4MUMyNjcKKzoxMDdGQTAwMDI2MDNGRkQwMjRDNTAwM0YyQzYyMjNEMDI0QzYwMDdGQzcKKzoxMDdGQjAwMEFGQjIwMDE4QUZCMTAwMTRBRkJGMDAxQzMwOTEwMEZGOEEKKzoxMDdGQzAwMDAwMDY5MUMyMDAwNTI5ODIwMjAwMjAyMTEwNDAwMDA4MEQKKzoxMDdGRDAwMDI0MDNGRkZGMEUwMDBBNkIwMDAwMDAwMDAyMDAyMDIxQjYKKzoxMDdGRTAwMDAyMjAyODIxMEUwMDBDNTkwMjQwMzAyMTAwMDAxODIxRTcKKzoxMDdGRjAwMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMUIKKzoxMDgwMDAwMDAwNjAxMDIxMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkQ4MzUKKzoxMDgwMTAwMDI0QTIwMDdGQUZCMzAwMUNBRkIyMDAxODAwMDI5OUMyQzcKKzoxMDgwMjAwMDMwOTIwMEZGMjRBMzAwM0YwMjQwMjAyMTAyNjAyODIxNUIKKzoxMDgwMzAwMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyMDBFMDAwQjhFMjgKKzoxMDgwNDAwMDAwMDM4OTgyMDA0MDgwMjEwMDQwMjAyMTAyMjAyODIxNTUKKzoxMDgwNTAwMDE0NDAwMDA5MDAwMDE4MjE4RkJGMDAyMDhGQjMwMDFDQkUKKzoxMDgwNjAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwNjAxMDIxODMKKzoxMDgwNzAwMDAzRTAwMDA4MjdCRDAwMjgwRTAwMEExQzAwMDAwMDAwRDUKKzoxMDgwODAwMDAwNDAyODIxMDIwMDIwMjExMDUxRkZGMzAwMTAxOUMwRTgKKzoxMDgwOTAwMDBFMDAwQTZCMDAwMDAwMDAwMjAwMjAyMTAyNDAyODIxOEYKKzoxMDgwQTAwMDBFMDAwQzU5MDI2MDMwMjE4RkJGMDAyMDhGQjMwMDFDREUKKzoxMDgwQjAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwMDAxODIxOEIKKzoxMDgwQzAwMDAwNjAxMDIxMDNFMDAwMDgyN0JEMDAyODMwODRGRkZGNzYKKzoxMDgwRDAwMDMwQTVGRkZGMTA4MDAwMDcwMDAwMTgyMTMwODIwMDAxNEEKKzoxMDgwRTAwMDEwNDAwMDAyMDAwNDIwNDIwMDY1MTgyMTE0ODBGRkZCQUMKKzoxMDgwRjAwMDAwMDUyODQwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA3QzAKKzoxMDgxMDAwMDAwMDAwMDAwOENBMjAwMDAyNEM2RkZGRjI0QTUwMDA0OEMKKzoxMDgxMTAwMEFDODIwMDAwMTRDMEZGRkIyNDg0MDAwNDAzRTAwMDA4Q0MKKzoxMDgxMjAwMDAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwQTAKKzoxMDgxMzAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGOTYKKzoxMDgxNDAwMDE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMjkKKzoxMDgxNTAwMDMwQTVGRkZGOEY0MjAxQjgwNDQwRkZGRTNDMDc2MDE1QzkKKzoxMDgxNjAwMDAwQTczMDI1M0MwMzEwMDBBRjQ0MDE4MEFGNDAwMTg0REMKKzoxMDgxNzAwMEFGNDYwMTg4MDNFMDAwMDhBRjQzMDFCODhGODUwMEQwMDcKKzoxMDgxODAwMDJDODY0MDAwMDA4MDE4MjE4Q0E3MDA4NDAwODcxMDJCQ0IKKzoxMDgxOTAwMDE0NDAwMDEwMDAwMDAwMDA4Q0E4MDA4NDJEMDY0MDAwNTAKKzoxMDgxQTAwMDUwQzAwMDBGMjQwMzQwMDA4Q0FBMDA4NDAwOEE0ODJCOTIKKzoxMDgxQjAwMDUxMjAwMDAxOENBMzAwODQwMDAzNUE0MjAwMEIyMDgwNTAKKzoxMDgxQzAwMDNDMDUwODAwMjRBNTVBNDAwMDg1MTgyMTAzRTAwMDA4NUEKKzoxMDgxRDAwMDhDNjIwMDAwMTRDMEZGRjQwMDAwMDAwMDI0MDM0MDAwODMKKzoxMDgxRTAwMDAwMDM1QTQyMDAwQjIwODAzQzA1MDgwMDI0QTU1QTQwOTkKKzoxMDgxRjAwMDAwODUxODIxMDNFMDAwMDg4QzYyMDAwMDhGODMwMEQwMDYKKzoxMDgyMDAwMDkwNjYwMEQwMjRDNTAwMDFBMDY1MDBEMDhGODUwMEQwMDUKKzoxMDgyMTAwMDkwNjQwMEQwOTBBMjAwRDIxMDQ0MDAxNzAwMDAwMDAwMkIKKzoxMDgyMjAwMDkzNkMwMDc4OEY4QjAwQkMzMThBMDBGRkExNkEwMDBDMzAKKzoxMDgyMzAwMDI1NDkwMDAxOTM4NzAwQzQzMTIyMDBGRjMwNDgwMDdGQTgKKzoxMDgyNDAwMDExMDcwMDBCMDAwMjY4MjdBMzYyMDA3ODhGNEUwMTc4QTcKKzoxMDgyNTAwMDA1QzBGRkZFOEY5OTAwQjAyNDE4MDAwMjNDMEYxMDAwRUIKKzoxMDgyNjAwMEFGNTkwMTQwQTM1ODAxNDQwM0UwMDAwOEFGNEYwMTc4MjMKKzoxMDgyNzAwMDBBMDAwRDI5MzFBMjAwODBBMEEwMDBEMDBBMDAwRDFGMjUKKzoxMDgyODAwMDAwMDAwMDAwMjdCREZGRDhBRkIyMDAxODhGOTIwMEI4RTEKKzoxMDgyOTAwMEFGQkYwMDIwQUZCMzAwMUNBRkIwMDAxMEFGQjEwMDE0RUYKKzoxMDgyQTAwMDhGOTMwMEI0OEU1OTAwMjgzQzEwMDA4MDNDMEVGRkVGRTUKKzoxMDgyQjAwMEFFNzkwMDAwOEU1ODAwMjRBMjYwMDAwQTM1Q0RGRkZGODEKKzoxMDgyQzAwMEFFNzgwMDA0OTI1MTAwMkMzQzBCRkY5RjM1NkFGRkZGRjMKKzoxMDgyRDAwMEEyNzEwMDBDOEU2RjAwMEMzQzA4MDA0MEEyNzEwMDBCRDQKKzoxMDgyRTAwMDAxRjA2MDI1MDE4RDQ4MjQwMTJBMzgyNDAwRTgzMDI1NUEKKzoxMDgyRjAwMEFFNjYwMDBDOEU0NTAwMDRBRTYwMDAxODNDMDQwMEZGMjIKKzoxMDgzMDAwMEFFNjUwMDE0OEU0MzAwMkMzNDgyRkZGRkE2NjAwMDA4ODcKKzoxMDgzMTAwMDAwNjJGODI0QUU3RjAwMTA4RTU5MDAwODhGOTAwMEIwRTQKKzoxMDgzMjAwMDk2NEUwMDEyQUU3OTAwMjA4RTUxMDAwQzMxRDgzRkZGREUKKzoxMDgzMzAwMDAwMTg3OTgwQUU3MTAwMjQ4RTREMDAxNDAxRjA2MDIxODgKKzoxMDgzNDAwMDMxQ0IwMDAxQUU2RDAwMjg4RTRBMDAxODAwMEM0MUMyRUUKKzoxMDgzNTAwMDAwMEI0QjgwQUU2QTAwMkM4RTQ2MDAxQzAxMDkzODIxQjAKKzoxMDgzNjAwMEE2NjcwMDFDQUU2NjAwMzA5NjQ1MDAwMjhFNDQwMDIwRDEKKzoxMDgzNzAwMEE2NjUwMDFFQUU2NDAwMzQ5MjQzMDAzMzMwNjIwMDA0RjAKKzoxMDgzODAwMDU0NDAwMDA1OTI0NjAwMDA4RjgzMDBEMDhDN0YwMDdDMTMKKzoxMDgzOTAwMEFFN0YwMDMwOTI0NjAwMDA4Rjg1MDBCQ0EwQTYwMDAwOTIKKzoxMDgzQTAwMDkyNDQwMDMzMzA4MjAwMDI1MDQwMDAwNzkyNEUwMDAxOTgKKzoxMDgzQjAwMDhGODcwMEJDMjQwQUZGODA5MEU5MDAwMDAxMkE0MDI1MzUKKzoxMDgzQzAwMEEwRTgwMDAwOTI0RTAwMDE4RjhEMDBCQzI0MDlGRkJGODEKKzoxMDgzRDAwMDI0MDRGRkRGQTFBRTAwMDE4RjhBMDBCQzkxNEMwMDBEODgKKzoxMDgzRTAwMDMxOEIwMDdGQTE0QjAwMEQ4Rjg2MDBCQzkwQzgwMDBEMjMKKzoxMDgzRjAwMDAxMDkzODI0QTBDNzAwMEQ4RjkxMDBCQzhFNjUwMDE0QzAKKzoxMDg0MDAwMDkyMjMwMDBEMkNBMjAwMDEwMDAyRjk0MDAwNjRDODI0NTAKKzoxMDg0MTAwMDAzM0ZDMDI1QTIzODAwMEQ4Rjg4MDBCQzk2NTAwMDEyODMKKzoxMDg0MjAwMDhGODcwMEQwQTUxMDAwMDI4RTQ1MDAwNDkwRUQwMEJDOUYKKzoxMDg0MzAwMDMwQUYwMDAzMDAwRjcwMjMzMUNDMDAwMzAwQUMxMDIxREIKKzoxMDg0NDAwMDMxQUIwMDAyMTU2MDAwMDIyNDQ0MDAzNDI0NDQwMDMwQTMKKzoxMDg0NTAwMDkwRjEwMEJDMDBCMTgwMjQzMjBGMDAwNDE1RTAwMDAyNEUKKzoxMDg0NjAwMDI0ODMwMDA0MDA4MDE4MjE4Rjg5MDBBQzI0MEEwMDAyQjQKKzoxMDg0NzAwMEFEMDMwMDA0QTEyQTAwMDA5MjQ4MDAzRjhGODcwMEFDQTIKKzoxMDg0ODAwMEEwRTgwMDAxOEY5MTAwQUM5MjQ2MDAzRjhFNDQwMDA0QUEKKzoxMDg0OTAwMEE2MjYwMDAyOTc2NTAwM0MwRTAwMENGNjMwQjBGRkZGRTgKKzoxMDg0QTAwMDAwMDIxMzgwMDA1MDIwMjUzQzAzNDIwMDAwODNGODI1ODEKKzoxMDg0QjAwMEFFM0YwMDA0OEY4NTAwQUM4RTU5MDAzOEFDQjkwMDE4NkYKKzoxMDg0QzAwMDhFNTgwMDM0QUNCODAwMUNBQ0EwMDAwQ0FDQTAwMDEwNUUKKzoxMDg0RDAwMEE0QTAwMDE0QTRBMDAwMTZBNEEwMDAyMEE0QTAwMDIyMjAKKzoxMDg0RTAwMEFDQTAwMDI0OEU2MjAwMTQ1MDQwMDAwMTI0MDIwMDAxNjAKKzoxMDg0RjAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0MDMKKzoxMDg1MDAwMDhGQjAwMDEwQUNBMjAwMDgwQTAwMEQxNjI3QkQwMDI4OEQKKzoxMDg1MTAwMDhGODYwMEQwMjdCREZGRDBBRkJGMDAyQ0FGQjYwMDI4OUMKKzoxMDg1MjAwMEFGQjUwMDI0QUZCNDAwMjBBRkIzMDAxQ0FGQjIwMDE4NDkKKzoxMDg1MzAwMEFGQjEwMDE0QUZCMDAwMTA5NEMzMDBFMDk0QzIwMEUyRTkKKzoxMDg1NDAwMDEwNDMwMDQxMjQwNUZGRkYzQzE2MDAwRTkwQzQwMEQwRUMKKzoxMDg1NTAwMDkwQzgwMEQxMzA5MjAwRkYzMTA0MDBGRjAyNDQzODJCNTQKKzoxMDg1NjAwMDEwRTAwMDQ0MjY0OTAwMDExMDg5MDAzNzhGOTgwMEIwQzAKKzoxMDg1NzAwMDNDMDUwODAwOENBNTAwNUMyNDE0RkY4MDAwQjg2MDIxMzUKKzoxMDg1ODAwMDAxOTQ2ODI0QUY0RDAwMkM5NENBMDBFMjMxOEIwMDdGMjcKKzoxMDg1OTAwMDAxN0E0ODIxMzE0NDdGRkYwMTM2NDAyMTAwMDQxMDQwMTgKKzoxMDg1QTAwMDAwNDhBODIxOTZBNzAwMDAzQzFGMDgwMDhGRkYwMDU4MzQKKzoxMDg1QjAwMDMwRjUzRkZGMDAxNTE5ODAwM0UzQzgyMTAzMTk4ODIxMTYKKzoxMDg1QzAwMDMyMzMwMDdGMDI3QTc4MjEwMjM0ODAyNEFGNTAwMDJDQUQKKzoxMDg1RDAwMDAxRjY5ODIxOTI2RTAwMEQzMUM1MDAwNDEwQTAwMDQ4RUMKKzoxMDg1RTAwMDAwMDAwMDAwOTRDMzAwRTI5NEMzMDBFMjk0RDgwMEUyQ0IKKzoxMDg1RjAwMDI0MDQ4MDAwMzA3RjdGRkYyN0Y5MDAwMTMzMzE3RkZGQTMKKzoxMDg2MDAwMDAzMDQ4MDI0MDIxMTc4MjVBNENGMDBFMjk0Q0UwMEUyNzYKKzoxMDg2MTAwMDNDMTIwODAwOEU1MjAwNjAzMUQ0N0ZGRjEyOTIwMERGQkUKKzoxMDg2MjAwMDAwMDAwMDAwOEU3MjAwMTgwMDAwMjgyMTI2NDZGRkZGN0YKKzoxMDg2MzAwMEFFNjYwMDJDOEY4NjAwRDA5NEM4MDBFMDk0QzkwMEUyOUEKKzoxMDg2NDAwMDE1MjhGRkMyMDAwMDAwMDA4RkJGMDAyQzhGQjYwMDI4NDUKKzoxMDg2NTAwMDhGQjUwMDI0OEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4OTgKKzoxMDg2NjAwMDhGQjEwMDE0OEZCMDAwMTAwMEEwMTAyMTAzRTAwMDA4QUIKKzoxMDg2NzAwMDI3QkQwMDMwOTBDRDAwRDIyNjRBMDAwMTMxQUMwMEZGNkEKKzoxMDg2ODAwMDAwOEM1ODIxMTE2QUZGRjA4Rjk4MDBCMDNDMDUwODAwNUIKKzoxMDg2OTAwMDhDQTUwMDVDMjQxNEZGODAwMEI4NjAyMTAxOTQ2ODI0M0MKKzoxMDg2QTAwMEFGNEQwMDJDOTRDQTAwRTIzMThCMDA3RjAxN0E0ODIxNDMKKzoxMDg2QjAwMDMxNDQ3RkZGMDEzNjQwMjEwMDA0MTA0MDAwNDhBODIxQ0EKKzoxMDg2QzAwMDk2QTcwMDAwM0MxRjA4MDA4RkZGMDA1ODMwRjUzRkZGQzEKKzoxMDg2RDAwMDAwMTUxOTgwMDNFM0M4MjEwMzE5ODgyMTMyMzMwMDdGNzQKKzoxMDg2RTAwMDAyN0E3ODIxMDIzNDgwMjRBRjUwMDAyQzAxRjY5ODIxQzAKKzoxMDg2RjAwMDkyNkUwMDBEMzFDNTAwMDQxNEEwRkZCQTAwMDAwMDAwMDYKKzoxMDg3MDAwMDhFNjYwMDEwMDAxMkMwQzA4RTZFMDAzMDAwMTI5MTQwQzQKKzoxMDg3MTAwMDAyNTg3ODIxMDM2RjU4MjEwMENFNjgyMzI1NkMwMDg4MDkKKzoxMDg3MjAwMDI0MDIwMDAyQUU2RDAwMTBBRjhDMDBBQ0ExNjIwMDg4ODQKKzoxMDg3MzAwMDk3NkEwMDNDOEU2NDAwMzA4RjkxMDBBQzBFMDAwQ0Y2RkUKKzoxMDg3NDAwMDMxNTBGRkZGMDAwMjIzODAwMDkwNDgyNTNDMDM0MjAwODcKKzoxMDg3NTAwMDAxMjM0MDI1QUUyODAwMDQ4RTY3MDAwNDhGOEMwMEFDRjYKKzoxMDg3NjAwMDhFN0YwMDAwMjQwRDAwMDhBRDg3MDAxQ0FEOUYwMDE4MEYKKzoxMDg3NzAwMEFEODAwMDBDQUQ4MDAwMTA5MjY1MDAwQTMwQjkwMEZGOUEKKzoxMDg3ODAwMEE1OTkwMDE0OTY3ODAwMDgzQzA1MDAwQ0E1OTgwMDE2RTEKKzoxMDg3OTAwMDkyNzEwMDBBMzIyRjAwRkZBNThGMDAyMDk2NzAwMDA4MEEKKzoxMDg3QTAwMDI0MTEwMDA1QTU5MDAwMjJBRDgwMDAyNDkyNkUwMDBCREMKKzoxMDg3QjAwMDI0MTBDMDAwMzFDNjAwRkZBNTg2MDAwMkExOEQwMDAxNzMKKzoxMDg3QzAwMDhFNkIwMDMwOEY4MjAwQUM4Rjg4MDBCMEFDNEIwMDA4RkQKKzoxMDg3RDAwMDNDMEEwODAwOEQ0QTAwNTQwMTQ4MjAyMTAwOTQ0ODI0OTYKKzoxMDg3RTAwMEFGNDkwMDI4M0MwMzA4MDA4QzYzMDA1NDAwNjgzODIxMUUKKzoxMDg3RjAwMDMwRkYwMDdGMDNGQUM4MjEwMzI1QzAyMTAyNTg3ODIxRTkKKzoxMDg4MDAwMEFGOEYwMEJDQUY5ODAwQzBBMUYxMDAwMDhGOEIwMEJDRkYKKzoxMDg4MTAwMDI0MDNGRkJGMjQwNUZGREY5NTZFMDAwMjAxRDBBMDI0RDIKKzoxMDg4MjAwMDAyOTU5MDI1QTU3MjAwMDI5MTY2MDAwMjMwQ0QwMDNGQUUKKzoxMDg4MzAwMDM1QUMwMDQwQTE2QzAwMDI4Rjg4MDBCQzhGODIwMEQwNTQKKzoxMDg4NDAwMDNDMEM3RkZGQUQwMDAwMDQ4QzRBMDA3QzM1OEJGRkZGQTEKKzoxMDg4NTAwMDNDMDI4MDAwQUQwQTAwMDg5MTA0MDAwRDMwODkwMDdGQzEKKzoxMDg4NjAwMEExMDkwMDBEOEY5RjAwQkM5M0Y1MDAwRDAyQTMzODI0RDEKKzoxMDg4NzAwMEEzRTcwMDBEOEY5MTAwQkM5MjM5MDAwRDAzMjVDMDI0QTEKKzoxMDg4ODAwMEEyMzgwMDBEOEU2RjAwMzQ4RjhEMDBCQ0FEQUYwMDEwOEMKKzoxMDg4OTAwMDhFNkUwMDJDOEU3MDAwMzAwMUQwQTAyM0FEQjQwMDE0NzkKKzoxMDg4QTAwMDkxQjIwMDE4MzI0NjAwN0ZBMUE2MDAxODhGODcwMEJDNDUKKzoxMDg4QjAwMDhFNkEwMDMwOENFNDAwMTgwMTRCNDgyNDAwODI0MDI0NkEKKzoxMDg4QzAwMDAxMDlBODI1QUNGNTAwMTg5MjYzMDAwQUEwRTMwMDFDN0EKKzoxMDg4RDAwMDk2N0YwMDA4OEY4NTAwQkM4Rjk5MDBEMEE0QkYwMDFFMzIKKzoxMDg4RTAwMDhFNzAwMDMwOEU2NDAwMzAwRTAwMDIwRDhGMjUwMDg0RTMKKzoxMDg4RjAwMDhGODUwMEQwMDAwMjg5NDAwMDAyQzEwMDkwQUUwMEJDMEMKKzoxMDg5MDAwMDAyMzg3ODIxMDA0MDMwMjEzMUQ0MDAwMjEyODAwMDAzNjcKKzoxMDg5MTAwMDAyMEY4MDIxMDAwMkE4ODAwMjE1ODAyMTkwQjIwMEJDQzUKKzoxMDg5MjAwMDMyNTQwMDA0MTI4MDAwMDIwMDA2Qzg4MDAyMTk4MDIxMUYKKzoxMDg5MzAwMDhFNkYwMDMwOEY4QjAwQkMyNDA2ODAwMDMxRUUwMDAzNjgKKzoxMDg5NDAwMDAwMEU2ODIzMzFBQzAwMDMwMjBDMTAyMUFENjIwMDA0NUMKKzoxMDg5NTAwMDk0QTQwMEUyOTRBQTAwRTI5NEEzMDBFMjMxNTA3RkZGQzUKKzoxMDg5NjAwMDI2MDQwMDAxMzA4OTdGRkYwMDY2NDAyNDAxMDk4ODI1MjQKKzoxMDg5NzAwMEE0QjEwMEUyOTRBNzAwRTIzQzEzMDgwMDhFNzMwMDYwRUIKKzoxMDg5ODAwMDMwRkY3RkZGMTNGMzAwMTIwMDAwMDAwMDBFMDAwRDE2RjEKKzoxMDg5OTAwMDAwMDAwMDAwMEEwMDBFMjQwMDAwMjgyMTk0Q0QwMEUyMEYKKzoxMDg5QTAwMDAxQTQ2MDI0QTRDQzAwRTI5MENCMDBFMjkwQzIwMEUyREIKKzoxMDg5QjAwMDMxNkEwMEZGMDAwQTQ5QzIwMDA5MjAyNzAwMDQ0MUMwQjMKKzoxMDg5QzAwMDMwNTUwMDdGMDJBODM4MjUwQTAwMEUyMEEwQzcwMEUyMUIKKzoxMDg5RDAwMDk0QjEwMEUyMDIyNjM4MjRBNEE3MDBFMjkwQkYwMEUyOEUKKzoxMDg5RTAwMDkwQjQwMEUyMzNGMzAwRkYwMDEzQzlDMjAwMTk5MDI3Q0UKKzoxMDg5RjAwMDMyOTgwMDdGMDAxMkE5QzAwMzE1MzAyNTBFMDAwRDE2MTUKKzoxMDhBMDAwMEEwQTYwMEUyMEEwMDBFMjQwMDAwMjgyMTMwODRGRkZGMDcKKzoxMDhBMTAwMDMwQTVGRkZGQUY0NDAwMThBRjQ1MDAxQzAzRTAwMDA4N0QKKzoxMDhBMjAwMDhGNDIwMDE0MjdCREZGQjBBRkIwMDAyODhGOTAwMEQwNTgKKzoxMDhBMzAwMEFGQjQwMDM4QUZCRjAwNENBRkJFMDA0OEFGQjcwMDQ0ODIKKzoxMDhBNDAwMEFGQjYwMDQwQUZCNTAwM0NBRkIzMDAzNEFGQjIwMDMwQkEKKzoxMDhBNTAwMEFGQjEwMDJDQTdBMDAwMTQ5MjA2MDBEMTkyMDUwMEQwNUYKKzoxMDhBNjAwMDMwOTRGRkZGMzBDNDAwRkYzMEEzMDBGRjAwNjQxMDJCRTAKKzoxMDhBNzAwMEE3QTAwMDFFMTA0MDAwNzFBRkEwMDAxMDkyMDkwMEQwMDYKKzoxMDhBODAwMDAwMTQ5ODJCMzEyODAwRkYwMDg4MzgyMzI0RjJGRkZGQzAKKzoxMDhBOTAwMDAwMTI4ODJCMDIzMzc4MjQ1MUUwMDA3NThGQjIwMDEwNDkKKzoxMDhBQTAwMDk2MTgwMDEyOTYxOTAwMTAwMDE0RjQwMDAzMTlCODIzNDgKKzoxMDhBQjAwMDAwMTdCNDAwMDAxNjE0MDMwMjgyQTgyQTE2QTAwMDAyQjAKKzoxMDhBQzAwMDAwMUUyNDAzMDA0MDIwMjEwMjQ0RjgyQjEzRTAwMDAyODIKKzoxMDhBRDAwMDAwODAxODIxMDI0MDE4MjEwMDAzMzQwMDAwMDYxQzAzMDYKKzoxMDhBRTAwMDMwNjVGRkZGMkNBMjAwMDkxNDQwMDAwMjAwNjA5ODIxQUQKKzoxMDhBRjAwMDI0MTMwMDA4OEUwOTAwMDgwMDEzNTk4MDhFMDgwMDBDMEEKKzoxMDhCMDAwMDMxNjRGRkZGM0MwQTAwMTAwMDhBMzgyNTI3NEEwNDAwMjAKKzoxMDhCMTAwMEFGNDkwMDM4QUY4QTAwQjhBRjQ4MDAzQ0FGNDcwMDMwREIKKzoxMDhCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKKzoxMDhCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKKzoxMDhCNDAwMDhGNEQwMDAwMzFBQzAwMjAxMTgwRkZGRDAwMTM3MDJBMTIKKzoxMDhCNTAwMDAxRDExMDI0MDAwMEE4MjExMDQwMDFDMDAwMDAwMDAwMzUKKzoxMDhCNjAwMDhGOTgwMEIwM0MwQjA4MDA4RDZCMDA1NDI0MTFGRjgwREYKKzoxMDhCNzAwMDkyMUUwMEQwMDE3ODIwMjEwMDkxMTAyNDkyMTkwMEQwN0IKKzoxMDhCODAwMEFGNDIwMDI4OEQ0NTAwMTAzQzA2MDgwMDhDQzYwMDU4RjYKKzoxMDhCOTAwMDNDMTcwODAwOEVGNzAwNTQzMEE3M0ZGRjAwMDcxOTgwRUMKKzoxMDhCQTAwMDAwQzM0MDIxMDMwODIwMjEwMDkxRjgyNDkyMEIwMEQwM0IKKzoxMDhCQjAwMEFGNUYwMDJDOTE0ODAwMDAzM0Q2MDBGRjMzMkYwMEZGMzkKKzoxMDhCQzAwMDAyRjg3MDIxMDAxNjYxNDAwMDBGNjhDMDMxQzkwMDdGQjMKKzoxMDhCRDAwMDAxOEQzODIxMDEzQTI4MjEzMTYzMDBGRjMwODYwMDdGNjIKKzoxMDhCRTAwMDNDMDIwMDBDMDBBMkIwMjEwMDAzODk0MDAzNjdDODIxQTkKKzoxMDhCRjAwMDAwREFGODIxMzEwODAwM0YzQzFFMDAwRTAyMzZCODIxOTEKKzoxMDhDMDAwMDI3MzgwMDg4MDNGRTg4MjEyRDBGMDAwOEFGOTgwMEFDOUMKKzoxMDhDMTAwMEFGOTcwMEJDQUY5NjAwQzAxMUUwMDE4RkFGOTEwMEI0RDgKKzoxMDhDMjAwMDAwMDg2ODgwM0MwRTA4MDAyNUNFNTlFMDAxQUU2MDIxQTYKKzoxMDhDMzAwMDhEODkwMDAwMDEyMDAwMDgwMDAwMDAwMDkyMEUwMEQyODMKKzoxMDhDNDAwMDkyMEQwMEQwMDAxNDk4MkIzMUNBMDBGRjMxQUMwMEZGMDgKKzoxMDhDNTAwMDAwOEM1ODIzMDE0QjIwMjEyNDkyRkZGRjAwMTI4ODJCMDcKKzoxMDhDNjAwMDAyMzM3ODI0MTVFMEZGOEUwMDAwMDAwMDhGQjIwMDEwNjAKKzoxMDhDNzAwMDhGQkYwMDRDOEZCRTAwNDgzQTQyMDAwMThGQjcwMDQ0QkUKKzoxMDhDODAwMDhGQjYwMDQwOEZCNTAwM0M4RkI0MDAzODhGQjMwMDM0RUUKKzoxMDhDOTAwMDhGQjIwMDMwOEZCMTAwMkM4RkIwMDAyODAzRTAwMDA4QTUKKzoxMDhDQTAwMDI3QkQwMDUwOTE1ODAwMDEzMzE3MDAyMDEyRTAwMjA0NDQKKzoxMDhDQjAwMDI0MTYwMDAxOTIxRjAwQkMwMDAwQjAyMTMzRjkwMDAxMEUKKzoxMDhDQzAwMDEzMjAwMDBEMjQxRTAwMDE4RDQ4MDAxNDhFMDMwMDg0MjMKKzoxMDhDRDAwMDAxMDNCMDJCMTZDMDAwMDIwMTAwMzAyMThFMDYwMDg0NzMKKzoxMDhDRTAwMDhFMDUwMDY0MDBDNTM4MkIxNEUwMDAwMjAwQzAyMDIxNkUKKzoxMDhDRjAwMDhFMDQwMDY0MDA4MEIwMjE4RDQyMDAxNDhFMEIwMDY0NEQKKzoxMDhEMDAwMDAwNEIzMDJCMTRDMDAwMDIwMDQwMjAyMThFMDQwMDY0NzAKKzoxMDhEMTAwMDAwOTZCODIzNTZFMDAwMDEyNDFFMDAwMjAyNUUyMDJCQkMKKzoxMDhEMjAwMDE0ODAwMTQ4MDAwMDE4MjE4RDU5MDAzODhFMkYwMDBDNDYKKzoxMDhEMzAwMDNDMTgwMDgwQUUzOTAwMDA4RDUwMDAzNDNDMEVGRjlGN0YKKzoxMDhENDAwMDAxRjg2MDI1QUUzMDAwMDQ5MTQ5MDAzRjM1Q0RGRkZGQUEKKzoxMDhENTAwMDAxOEQyMDI0M0MwQTAwMjAzQzBCRkZFRkEyMjkwMDBCRDAKKzoxMDhENjAwMDAwOEEzODI1MzU2MkZGRkYwMEUyMjgyNDNDMDYwMDA4MEYKKzoxMDhENzAwMDhGODcwMEI4MDBBNkM4MjVBRTM5MDAwQzhDRTMwMDE0MUMKKzoxMDhEODAwMEFFMjAwMDE4M0MwOEZGRkJBRTIzMDAxNDhDRjgwMDE4M0UKKzoxMDhEOTAwMDM1MUZGRkZGMDMzRjcwMjRBRTM4MDAxQzhDRUYwMDA4MjYKKzoxMDhEQTAwMDAyRDc4MDIxQUUyRjAwMjQ4Q0VEMDAwQ0FFMzAwMDJDQjkKKzoxMDhEQjAwMEFFMkUwMDBDQUUyRDAwMjBBRTIwMDAyOEE2MjAwMDM4REMKKzoxMDhEQzAwMEE2MjAwMDNBOENFQzAwMTQwMTk2NDgyMzAxMzc1MDIzNkEKKzoxMDhERDAwMDExNDAwMDExQUUyQTAwMTA5MEVFMDAzRDhFMkMwMDA0RDAKKzoxMDhERTAwMDhFMjQwMDAwMDAwRTY5MDAwMThEMjgyMTAwMDA1MDIxMTIKKzoxMDhERjAwMDAwQUQzMDJCMDA4QTU4MjEwMTY2MTAyMUFFMjUwMDA0RjkKKzoxMDhFMDAwMEFFMjIwMDAwOTBFMzAwM0RBMjIzMDAwQThGODgwMEI4NDQKKzoxMDhFMTAwMDk1MUYwMDA2QTYzRjAwMDg4RjhCMDBBQzI0MDYwMDAyQjkKKzoxMDhFMjAwMDAyQzAyMDIxQTE2NjAwMDA5NzY1MDAzQzhGOTAwMEFDMzUKKzoxMDhFMzAwMDMwQTJGRkZGMEUwMDBDRjZBRkEyMDAyMDhGQTMwMDIwOEYKKzoxMDhFNDAwMDAwMDI0MzgwOEY4NTAwQjgwMTAzQzgyNTNDMUY0MjAwMDMKKzoxMDhFNTAwMDAzM0ZDMDI1QUUxODAwMDQ4Rjg0MDBBQzhDQUYwMDM4RUYKKzoxMDhFNjAwMEFDOEYwMDE4OENCMDAwMzRBQzkwMDAxQ0FDODAwMDBDQUYKKzoxMDhFNzAwMEFDODAwMDEwQTQ4MDAwMTRBNDgwMDAxNkE0ODAwMDIwMDAKKzoxMDhFODAwMEE0ODAwMDIyQUM4MDAwMjQ5MEE3MDAzRkE0ODcwMDAyQTkKKzoxMDhFOTAwMDEyQzAwMjEwMjQwRDAwMDE1MkUwMDAwMjkwQTIwMDNEMTkKKzoxMDhFQTAwMDkwQTIwMDNFMjQ0QTAwMDFBMDhBMDAwMThGODQwMEFDRjkKKzoxMDhFQjAwMEFDOTYwMDA4OEY4MzAwRDAyNDA3MDAzNDkwNkYwMEJDNkMKKzoxMDhFQzAwMDMxRUUwMDAyNTFDMDAwMDEyNDA3MDAzMDhGODIwMEI4NEIKKzoxMDhFRDAwMDhGOTkwMEJDOTA2ODAwQkM5MDVGMDAwMDI0MTAwMDA0RDMKKzoxMDhFRTAwMDMyQ0YwMDAzQTMzRjAwMDA4Rjk4MDBCODhGOEMwMEJDRTYKKzoxMDhFRjAwMDAyMEY3MDIzOTMwRDAwMDEyNDA1QzAwMDMxQ0EwMDAzNDYKKzoxMDhGMDAwMEExOEQwMDAxOEY5MDAwQkM4Rjg5MDBCODAwRjYzODIxMzgKKzoxMDhGMTAwMDk2MDQwMDAyOTUyNjAwMTIwMEVBMzgyMTAwODU1ODI0QTQKKzoxMDhGMjAwMDMwQzMzRkZGMDE2MzEwMjVBNjAyMDAwMjkyMUYwMDAyMUEKKzoxMDhGMzAwMDMxMDgwMDA0MzNGOTAwM0YzNzM4MDA0MEEyMTgwMDAyMUUKKzoxMDhGNDAwMDEyQzAwMDAyOEY4NTAwQkMwMEU4MzgyMThGODYwMEQwNTcKKzoxMDhGNTAwMEFDQTcwMDA0MjQxRkZGQkY4Q0MzMDA3QzJFQ0IwMDAxRjQKKzoxMDhGNjAwMDI0MEZGRkRGQUNBMzAwMDg5MEE4MDAwRDAwMEI2OTQwQTAKKzoxMDhGNzAwMDMxMDIwMDdGQTBBMjAwMEQ4RjkwMDBCQzkyMTkwMDBENUQKKzoxMDhGODAwMDAzM0ZDMDI0QTIxODAwMEQ4RjhBMDBCQzkxNEUwMDBEMzMKKzoxMDhGOTAwMDAxQ0Y2MDI0MDE4RDQ4MjVBMTQ5MDAwRDhGODYwMEI4QkUKKzoxMDhGQTAwMDhGOEIwMEJDOENDNzAwMjBBRDY3MDAxMDhDQzUwMDI0REYKKzoxMDhGQjAwMEFENjUwMDE0OENDNDAwMjhBRDY0MDAxODhDQzMwMDJDNkYKKzoxMDhGQzAwMDBFMDAwRDE2QUQ2MzAwMUMyNDA4MDAwMjU3QzgwMDlDNUIKKzoxMDhGRDAwMDhGOTAwMEQwOEY4RjAwRDA4RjhBMDBDMDAyRTAyMDIxQjgKKzoxMDhGRTAwMDkxRTgwMEQwOTFFQjAwRDA5MUU3MDBEMDMxMTAwMEZGNjQKKzoxMDhGRjAwMDMxNkUwMEZGMDAxMDY5NDAwMDBFMjhDMDAxQTUxODIxNDUKKzoxMDkwMDAwMDMwRTkwMEZGMDM2M0M4MjEwMDA5MzE0MDAwQ0FGODIxOUMKKzoxMDkwMTAwMDI3MjIwMDg4QUY4MjAwQUNBRjlGMDBCQ0EzM0UwMDg4MkYKKzoxMDkwMjAwMDBFMDAwQ0Y2OEY5MDAwQUM4RkI4MDAyMDAwMDI2MzgwMTkKKzoxMDkwMzAwMDNDMEY0MjAwMDE5ODQwMjU4RjhDMDBCODAxMEY1ODI1NDUKKzoxMDkwNDAwMEFFMEIwMDA0OEQ4NDAwMzg4RjhCMDBBQzAwMDAyODIxMEIKKzoxMDkwNTAwMDAwMDUzOTAwQUQ2NDAwMTg4RDhFMDAzNDNDMEY3RkZGOTEKKzoxMDkwNjAwMDM1RThGRkZGQUQ2RTAwMUM5MTgzMDAzRThENjkwMDFDNEEKKzoxMDkwNzAwMDhENjYwMDE4MDAwMzUxMDAwMDAzNkYwMjAxMkFDMDIxMTEKKzoxMDkwODAwMDAwRUQxMDI1MDMwQUY4MkIwMEMyQzgyMTAzM0Y4MDIxMDAKKzoxMDkwOTAwMEFENzgwMDFDQUQ3MDAwMThBRDYwMDAwQ0FENjAwMDEwMjQKKzoxMDkwQTAwMDkxODQwMDNFMjQxRjAwMDUyNDEwQzAwMEE1NjQwMDE0MTQKKzoxMDkwQjAwMDk1OEUwMDA0MDJFODQwMjQwMkUwMjAyMUE1NkUwMDE2RUYKKzoxMDkwQzAwMDkxODUwMDNFQTU2NTAwMjA5NThEMDAwNEE1NkQwMDIyQzgKKzoxMDkwRDAwMEFENjAwMDI0OTE4NzAwM0ZBNTY3MDAwMjkxODMwMDNFQTgKKzoxMDkwRTAwMDkxODkwMDNEMDEyMzUwMjMyNTQ2MDAwMUExNjYwMDAxMUUKKzoxMDkwRjAwMDhGODIwMEFDOEY5OTAwQkNBQzU3MDAwOEEzM0YwMDAwRTIKKzoxMDkxMDAwMDhGOEEwMEJDOEY5ODAwQjg5NTRGMDAwMjk3MEUwMDEyMEUKKzoxMDkxMTAwMDI0MThGRkJGMDIwRjY4MjQzMUM1M0ZGRjAxQTUzODI1ODEKKzoxMDkxMjAwMEE1NDcwMDAyOTE0QzAwMDIyNDA1RkZERjMxODkwMDNGNzIKKzoxMDkxMzAwMDM1MjMwMDQwQTE0MzAwMDI4Rjk5MDBCQzhGODYwMEQwRTgKKzoxMDkxNDAwMDI0MDlGRkZGQUYyMDAwMDQ4Q0NCMDA3QzI0MDNGRjgwQTgKKzoxMDkxNTAwMEFGMkIwMDA4OTMyMjAwMEQzQzBCODAwMDMwNUYwMDdGOTYKKzoxMDkxNjAwMEEzM0YwMDBEOEY4RTAwQkM5MUQwMDAwRDAyMTg3ODI0MTMKKzoxMDkxNzAwMEExQ0YwMDBEOEY4QzAwQkM5MThEMDAwRDAxQTUzODI0NkUKKzoxMDkxODAwMEExODcwMDBEOEY4NjAwQkNBQ0M5MDAxMEFDRDYwMDE0QkUKKzoxMDkxOTAwMDkwQ0EwMDE4MDE0M0IwMjVBMEQ2MDAxODhGOEYwMEJDREMKKzoxMDkxQTAwMDhGOTgwMEI4OERFMjAwMTgwMDRCRjgyNDAzRThDODI1MUEKKzoxMDkxQjAwMEFERjkwMDE4OTMxMDAwM0VBMUYwMDAxQzhGOEUwMEI4OEUKKzoxMDkxQzAwMDhGOEQwMEJDOEY4NzAwRDA5NUM1MDAwNEE1QTUwMDFFMUIKKzoxMDkxRDAwMDBFMDAwMjBEOENFNTAwODQ4Rjg3MDBEMDAwMDI2MTQwRjQKKzoxMDkxRTAwMDAwMDIyMTAwOTBFQTAwQkMwMTg0NDgyMTAwNDAyODIxQUYKKzoxMDkxRjAwMDMxNTYwMDAyMTJDMDAwMDMwMkU5MzAyMTAwMDJCMDgwQTMKKzoxMDkyMDAwMDAwRDYzMDIxOTBFQzAwQkMzMTg0MDAwNDEwODAwMDAzQjMKKzoxMDkyMTAwMDMyRUEwMDAzMDAwNUMwODAwMEQ4MzAyMTI0MDkwMDA0OTAKKzoxMDkyMjAwMDhGOTcwMEJDMDEyQTEwMjMzMDVGMDAwMzAwREZDODIxQTQKKzoxMDkyMzAwMEFFRjkwMDA0MEUwMDBEMTZBNjI1MDAzODhGOTAwMEQwNjAKKzoxMDkyNDAwMDAzQzAxODIxMTQ2MDAwMDIwMDYwQjAyMTAwMDA5MDIxQ0EKKzoxMDkyNTAwMDU2QzAwMDg2OEY5NzAwQjgwMDEyODgyQjk2MDkwMDEwMjAKKzoxMDkyNjAwMDAyOTU1MDIzM0MxNDAwMjAwMkE5MTAyMUE2MDIwMDEwRjAKKzoxMDkyNzAwMEFGNTQwMDMwMzE1NEZGRkYwMDAwMDAwMDk2MTMwMDEwN0YKKzoxMDkyODAwMDk2MUYwMDEyMTNGMzAwMTEwMDAwMDAwMDhFMTcwMDBDNEYKKzoxMDkyOTAwMDhFMEMwMDA4MDAxNUM5ODAwMkY5NDAyMTAwMTkyN0MzNkYKKzoxMDkyQTAwMDAxMTlCMDJCMDE4NDc4MjEwMUY2NTgyMUFFMDgwMDBDNzkKKzoxMDkyQjAwMEFFMEIwMDA4MDAxNEE4MkIwMjM1ODAyNDEyMDBGRTZCQjAKKzoxMDkyQzAwMDhGOTAwMEQwMEEwMDBGM0YwMDAwMDAwMDk2MEIwMDE0QTIKKzoxMDkyRDAwMDhFMDUwMDA0MzE2M0ZGRkYwMDAzNzBDMDAwQUUzODIxMkIKKzoxMDkyRTAwMEFGNDcwMDNDOEUwNjAwMDQ4RjREMDAzQzAwQ0RGMDIzQkMKKzoxMDkyRjAwMDFCQzAwMDM2MDAwMDAwMDA4RTA4MDAwMDI1MDIwMDAxOUYKKzoxMDkzMDAwMDNDMTYwMDEwMzZDRjAwMDhBRjQyMDAzOEFGNEYwMDMwOTcKKzoxMDkzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKKzoxMDkzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKKzoxMDkzMzAwMDhGNDQwMDAwMzA4QzAwMjAxMTgwRkZGRDAwMDAwMDAwRjEKKzoxMDkzNDAwMDhGNTkwNDAwM0MxNzAwMjBBRTE5MDAwODhGNTUwNDA0MDMKKzoxMDkzNTAwMEFFMTUwMDBDQUY1NzAwMzAwMDAwMDAwMDNDMDYwODAwQkUKKzoxMDkzNjAwMDhDQzYwMDQ0MjQxODAwMDExMEQ4MDBEMzAwMDAwMDAwNkYKKzoxMDkzNzAwMDk2MDcwMDEyM0MwNTA4MDA4Q0E1MDA0MDAwQTc2ODIxNTQKKzoxMDkzODAwMEE2MEQwMDEyOTYxRTAwMTQyN0M5MDAwMUE2MDkwMDE0OUMKKzoxMDkzOTAwMDk2MDIwMDE0MzA0NEZGRkY1NDg2RkZDNzAwMTRBODJCMjgKKzoxMDkzQTAwMDMwQTVGRkZGMEUwMDBGMUFBNjAwMDAxNDNDMDMwODAwQjIKKzoxMDkzQjAwMDhDNjMwMDI0OTYwNTAwMTIwMDQzNzAyMzAwQUUzMDIzMTYKKzoxMDkzQzAwMEE2MDYwMDEyMEEwMDExNDUwMDE0QTgyQjhFMDIwMDAwMDgKKzoxMDkzRDAwMDBBMDAxMTU4M0MxNjAwMTA5MTU2MDAwMTI0MTAwMDAxOUIKKzoxMDkzRTAwMDAwMTY3ODQyMTVGMDAwMUM5N0E4MDAxRThENUYwMDE0MkYKKzoxMDkzRjAwMDI0MTFDMDAwMzNGRTNGRkYwMTExQzgyNDNDMTgwODAwQUYKKzoxMDk0MDAwMDhGMTgwMDYwMDMzRUI4MjUzMkU1M0ZGRjAwQjg1MDJCQUYKKzoxMDk0MTAwMDExNDAwMDExQTdCNzAwMUUzQzEwMDgwMDhFMTAwMDU4MjQKKzoxMDk0MjAwMDhGOEYwMEIwMDAwNTcxODAyNDBDRkY4MDAyMEY2ODIxMkYKKzoxMDk0MzAwMDAxQUU0ODIxMzEyNDAwN0YwMTJDNTgyNDAwOUEyODIxQjQKKzoxMDk0NDAwMDNDMDIwMDBFQUY0QjAwMkMwMEEyMzAyMTkwQzcwMDBENTMKKzoxMDk0NTAwMDM0RTMwMDA0QTBDMzAwMEQwRTAwMEQzODAwMDAwMDAwMkUKKzoxMDk0NjAwMDhGOTAwMEQwMjQwMzAwMDE4Rjk3MDBCODI2QjkwMDAxMjcKKzoxMDk0NzAwMDAwMTlBQzAwMDI0MzkwMjMwMDE1QUMwMzI2RjgwMDQwMEQKKzoxMDk0ODAwMDAyQjMyMDJBMDAxMjg4MkIyNDBDMDAwMTAzMDA1MDIxNzMKKzoxMDk0OTAwMDAwOTExMDI0QUY5ODAwQjgwQTAwMEY2REFGQUMwMDEwMTcKKzoxMDk0QTAwMDk1NTYwMDEyOEY4NDAwQjAzMkM1RkZGRjBFMDAwQ0VCMDIKKzoxMDk0QjAwMEE3QjYwMDE0OEY5MDAwRDAwQTAwMTFCMTAwMDAxODIxNDcKKzoxMDk0QzAwMDhENTkwMDM4QTYyMDAwMDgyNDA0MDAwM0FFMzkwMDAwOUUKKzoxMDk0RDAwMDhENTcwMDM0QTIyMDAwMEE4Rjk4MDBCOEFFMzcwMDA0RTAKKzoxMDk0RTAwMDNDMEYwMDgwOTMwQzAwM0ZBMjI0MDAwQzhFMjgwMDBDM0YKKzoxMDk0RjAwMDNDMEJGRjlGQTIyQzAwMEIwMTBGMTgyNTM1NkVGRkZGQzAKKzoxMDk1MDAwMDNDMDVGRkVGOEY5NzAwQjgwMDZFNjgyNDM0QTdGRkZGN0IKKzoxMDk1MTAwMDAxQTczMDI0QUUyNjAwMEM4RUZFMDAxNDk2RkYwMDEyMjgKKzoxMDk1MjAwMDhGODIwMEIwQUUzRTAwMTA4RUYwMDAxNEFFMjAwMDE4MDYKKzoxMDk1MzAwMEFFMjAwMDIwQUUzMDAwMTRBRTIwMDAyNDhFRTkwMDE4Q0EKKzoxMDk1NDAwMDMzRjAzRkZGMDAxMDUxODBBRTI5MDAyODhFRjkwMDA4NEIKKzoxMDk1NTAwMDAxNDJDMDIxMzNFQzAwMDFBRTM5MDAzMDhFRUIwMDBDMkIKKzoxMDk1NjAwMDhGODUwMEFDMDAxODc5QzIwMDBDMjM4MDAxRTQ0MDIxRjMKKzoxMDk1NzAwMDI0MEUwMDAyQTYyODAwMUNBNjIwMDAzNkFFMkIwMDJDQ0MKKzoxMDk1ODAwMEEwQUUwMDAwOTc2NzAwM0M4RjhBMDBBQzNDMDM0MjAwMEQKKzoxMDk1OTAwMDMwRURGRkZGMDFBMzMwMjVBRDQ2MDAwNDhGOUUwMEI4REIKKzoxMDk1QTAwMDI0MDIwMDAxMjQwOEMwMDA4RkQxMDAzODI0MDYwMDM0QjIKKzoxMDk1QjAwMEFENTEwMDE4OEZDOTAwMzRBRDQ5MDAxQ0FENDAwMDBDRkUKKzoxMDk1QzAwMEFENDAwMDEwQTU0MDAwMTRBNTQwMDAxNkE1NDAwMDIwQTUKKzoxMDk1RDAwMEE1NDAwMDIyQUQ0MDAwMjRBNTU2MDAwMkExNDIwMDAxOTIKKzoxMDk1RTAwMDhGOUYwMEFDOEY5OTAwQjg4Rjk4MDBCQ0FGRjYwMDA4MzEKKzoxMDk1RjAwMDkzMzcwMDAwQTMxNzAwMDA4RjhDMDBCODhGOEYwMEJDM0EKKzoxMDk2MDAwMDkxODQwMDAxQTFFNDAwMDE4RjhEMDBCQzk1QUIwMDAyQTQKKzoxMDk2MTAwMDAxNjg3MDI0MDFEMDI4MjVBNUE1MDAwMjkxQTcwMDAyQTkKKzoxMDk2MjAwMDMwRTMwMDNGQTFBMzAwMDI4RjgzMDBEMDhGODQwMEJDRjEKKzoxMDk2MzAwMDkwNzEwMEJDMzIzRTAwMDI1M0MwMDAwMTI0MDYwMDMwOEQKKzoxMDk2NDAwMEFDODYwMDA0OEM2RjAwN0MyNDAzRkZCRkFDOEYwMDA4NDUKKzoxMDk2NTAwMDkwODgwMDBEMzEwQjAwN0ZBMDhCMDAwRDhGODcwMEJDMjAKKzoxMDk2NjAwMDkwRUUwMDBEMDFDMzI4MjRBMEU1MDAwRDhGOUUwMEJDRTQKKzoxMDk2NzAwMDkzQ0QwMDBEMzVBNjAwMjBBM0M2MDAwRDhGOEEwMEI4M0IKKzoxMDk2ODAwMDhGOTEwMEJDOEQ1MDAwMjBBRTMwMDAxMDhENDkwMDI0MTkKKzoxMDk2OTAwMEFFMjkwMDE0OEQ0MjAwMjhBRTIyMDAxODhENUYwMDJDRTgKKzoxMDk2QTAwMEFFM0YwMDFDMEUwMDBEMTYwMDAwMDAwMDhGOTAwMEQwOTEKKzoxMDk2QjAwMDBBMDAxMTJCMDJDMDE4MjE5NjBBMDAxMjNDMUYwODAwNTQKKzoxMDk2QzAwMDhGRkYwMDI0MDNFQTk4MjFBNjEzMDAxMjBBMDAxMTQ1MTcKKzoxMDk2RDAwMDAwMTRBODJCQTA4RDAwMDE4Rjg5MDBBQzI0MEMwMDAxODAKKzoxMDk2RTAwMEFEMkMwMDA4MEEwMDEwNDU4RjgzMDBEMDI3QkRGRkUwOTUKKzoxMDk2RjAwMDNDMTgwODAwOEYxODAwNTBBRkIwMDAxMEFGQkYwMDE4MjIKKzoxMDk3MDAwMEFGQjEwMDE0QUY4NDAwQjA5MzcxMDA3NDAzMDQ3ODIxRUEKKzoxMDk3MTAwMDI0MTBGRjgwMzFFRTAwN0YzMjI1MDA3RjAxRjA1ODI0QjUKKzoxMDk3MjAwMDAxREE2ODIxM0MwQzAwMEFBMzg1MDBDNDAxQUMyODIxQTEKKzoxMDk3MzAwMEFGNEIwMDI0OTRBOTAwMTA5NzY4MDAwNjkwQTYwMDYyMjEKKzoxMDk3NDAwMDAwODAzODIxMjQwMjAwMzAwMTA5MjAyMzMwQzMwMEYwQkEKKzoxMDk3NTAwMEFGODUwMEQwMTA2MjAwMTkzMDkwRkZGRjkwQUUwMDYyMUMKKzoxMDk3NjAwMDI0MERGRkYwMjQwQTAwNTAwMUFFNjAyNDMxOEIwMEZGNkQKKzoxMDk3NzAwMDExNkEwMDJGMDAwMDAwMDAxNjAwMDAwNzI0MUYwQzAwRDMKKzoxMDk3ODAwMEFGNUYwMDI0OEZCMTAwMTQ4RkJGMDAxODhGQjAwMDEwOUUKKzoxMDk3OTAwMDAzRTAwMDA4MjdCRDAwMjAwRTAwMEYyMDAyMDAyMDIxNUEKKzoxMDk3QTAwMDI0MUYwQzAwQUY1RjAwMjQ4RkIxMDAxNDhGQkYwMDE4N0UKKzoxMDk3QjAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDk0QTIwMEUwNTUKKzoxMDk3QzAwMDk0QTQwMEUyOTBCRjAxMTMwMDgyMTgyNjMwNzlGRkZGQjUKKzoxMDk3RDAwMDMzRTcwMEMwMTRFMDAwMDkyRjMxMDAwMTE2MDAwMDM4MDMKKzoxMDk3RTAwMDAwMDAwMDAwNTYyMEZGRTYyNDFGMEMwMDBFMDAwRERCRDkKKzoxMDk3RjAwMDAwMDAwMDAwMEEwMDEyNzcyNDFGMEMwMDE2MjBGRkRFNzQKKzoxMDk4MDAwMDAwMDAwMDAwMEUwMDBEREIwMDAwMDAwMDE0NDBGRkRDMzMKKzoxMDk4MTAwMDI0MUYwQzAwMTYwMDAwMjI4RjgzMDBEMDkwNjkwMTEzRDIKKzoxMDk4MjAwMDMxMjIwMDNGQTA2MjAxMTMwQTAwMTI3NzI0MUYwQzAwQUUKKzoxMDk4MzAwMDk0QUYwMEQ0OEY4NjAwRDQwMEUwMjgyMTI0MDQwMDA1RDIKKzoxMDk4NDAwMDBFMDAwQzdDMzFGMEZGRkYxNDQwMDAwNTI0MDMwMDAzRTAKKzoxMDk4NTAwMDk3OTEwMEU2MDAwMDE4MjEyNjI1RkZGRkE3ODUwMEU2NjYKKzoxMDk4NjAwMDhGNTgwMUI4MDcwMEZGRkUzQzE5NjAxM0FGNDAwMTgwMUMKKzoxMDk4NzAwMDI0MUYwQzAwQUY1MDAxODQwMDc5MzgyNTNDMTAxMDAwRTMKKzoxMDk4ODAwMEFGNDcwMTg4OEZCMTAwMTRBRjUwMDFCOEFGNUYwMDI0MUIKKzoxMDk4OTAwMDhGQjAwMDEwOEZCRjAwMTgwM0UwMDAwODI3QkQwMDIwMjQKKzoxMDk4QTAwMDBFMDAwRjIwMDIwMDIwMjE1MDQwRkZCNTI0MUYwQzAwQTUKKzoxMDk4QjAwMDhGODMwMEQwOTA2OTAxMTMwQTAwMTJBMDMxMjIwMDNGNkIKKzoxMDk4QzAwMDBFMDAwRjIwMDIwMDIwMjExNDQwRkZBRDI0MUYwQzAwQzkKKzoxMDk4RDAwMDEyMjAwMDA3OEY4MzAwRDA5MDY4MDExMzMxMDYwMDNGRUIKKzoxMDk4RTAwMDM0QzIwMDQwQTA2MjAxMTMwQTAwMTI3NzI0MUYwQzAwNEEKKzoxMDk4RjAwMDBFMDAwRERCMDAwMDAwMDA1MDQwRkZBMTI0MUYwQzAwRjMKKzoxMDk5MDAwMDhGODMwMEQwOTA2ODAxMTMzMTA2MDAzRjBBMDAxMkQwMDcKKzoxMDk5MTAwMDM0QzIwMDQwQUY5QjAwQzgwM0UwMDAwOEFGODAwMEVDRjkKKzoxMDk5MjAwMDMwODlGRkZGMDAwOTQwNDIyRDAyMDA0MTAwMDkyOTgwRDMKKzoxMDk5MzAwMDE0NDAwMDAyMDAwOTUwNDAyNDA4MDA0MDAwMDg3OTQwMEIKKzoxMDk5NDAwMDAwMDhDMEMwMDFGODU4MjEyNTY3MDFBODAwRUY3MDIxNjgKKzoxMDk5NTAwMDI1Q0MwMDdGMjQwREZGODAwMThEMTgyNDAwNjUzMDIxNjcKKzoxMDk5NjAwMDAwQ0EyODIxMjU2NDAwODgyNDBBMDA4ODNDMDEwODAwRDgKKzoxMDk5NzAwMEFDMkEwMDRDM0MwMTA4MDBBQzI0MDA1MEFGODUwMEQ0NTgKKzoxMDk5ODAwMDNDMDEwODAwQUMyOTAwNjAzQzAxMDgwMEFDMjgwMDY0RTAKKzoxMDk5OTAwMDNDMDEwODAwQUMyNzAwNTQzQzAxMDgwMEFDMjMwMDU4RUYKKzoxMDk5QTAwMDNDMDEwODAwQUMyNjAwNUMwM0UwMDAwODAwMDAwMDAwNTkKKzoxMDk5QjAwMDMwODMwMEZGMzBDNkZGRkYzMEU0MDBGRjhGNDIwMUI4NjQKKzoxMDk5QzAwMDA0NDBGRkZFMDAwMzRDMDAwMTI0MzgyNTNDMDg2MDAwRTEKKzoxMDk5RDAwMDAwRTgyMDI1M0MwMzEwMDBBRjQ1MDE4MEFGNDYwMTg0MUMKKzoxMDk5RTAwMEFGNDQwMTg4MDNFMDAwMDhBRjQzMDFCODhGODYwMDFDMzQKKzoxMDk5RjAwMDNDMDk2MDEyMzUyNzAwMTA4Q0NCMDAwNDNDMEM2MDBFMzMKKzoxMDlBMDAwMDM1ODUwMDEwMzE2QTAwMDYyRDQ4MDAwMUFDRTgwMEM0MUQKKzoxMDlBMTAwMDhDQzQwMDA0QUNBNDMxODA4Q0MyMDAwODk0QzMwMDAyNDIKKzoxMDlBMjAwMEFDQTIzMTg0MDNFMDAwMDhBNzgzMDBFNDNDMDMwODAwRjMKKzoxMDlBMzAwMDhDNjMwMDUwOEY4NDAwRTg4Rjg2MDAxQzI0MDJGRjgwMTYKKzoxMDlBNDAwMDAwNjRDMDIxMDMwMkM4MjRBRjU5MDAyODhDQ0QwMDA0NTMKKzoxMDlBNTAwMDMzMDUwMDdGMDBCQTc4MjEzQzBFMDAwQzAxRUUyODIxNkUKKzoxMDlBNjAwMEFDQUQwMDU4OENDODAwMDhBRjg1MDBEMDNDMDc2MDEyMzAKKzoxMDlBNzAwMEFDQTgwMDVDOENDQzAwMTAzNEU4MDAxMEFDQUMwMDBDM0UKKzoxMDlBODAwMDhDQ0IwMDBDQUNBQjAwMDg5NEFBMDAxNDNDMDIwODAwN0MKKzoxMDlBOTAwMDhDNDIwMDQ0MjU0OTAwMDFBNEE5MDAxNDk0QTQwMDE0OTgKKzoxMDlBQTAwMDMwODNGRkZGMTA2MjAwMTc4Rjg0MDBEMDNDMEEwODAwNEIKKzoxMDlBQjAwMDhENEEwMDQwQTRBQTAwMTI4Q0NFMDAxOEFDOEUwMDI0NUYKKzoxMDlBQzAwMDhDQ0QwMDE0QUM4RDAwMjA4Q0M3MDAxOEFDODcwMDJDMDYKKzoxMDlBRDAwMDhDQ0MwMDE0MjQwNjAwMDFBQzhDMDAyODhEMEIwMEJDM0IKKzoxMDlBRTAwMDUxNjYwMDFBOEQwMjAwQjQ4RDAyMDBCOEE0ODIwMDNBQkIKKzoxMDlBRjAwMDk0OEYwMDNBQTQ4RjAwM0M5NDg4MDBENDAzRTAwMDA4QkYKKzoxMDlCMDAwMDMxMDJGRkZGM0MwOTA4MDA4RDI5MDAyNEE0QTAwMDE0QTUKKzoxMDlCMTAwMDhGODQwMEQwQTRBOTAwMTI4Q0NFMDAxOEFDOEUwMDI0MzMKKzoxMDlCMjAwMDhDQ0QwMDE0QUM4RDAwMjA4Q0M3MDAxOEFDODcwMDJDQTUKKzoxMDlCMzAwMDhDQ0MwMDE0MjQwNjAwMDFBQzhDMDAyODhEMEIwMEJDREEKKzoxMDlCNDAwMDU1NjZGRkVBOEQwMjAwQjg4RDAyMDBCNEE0ODIwMDNBODcKKzoxMDlCNTAwMDk0OEYwMDNBQTQ4RjAwM0M5NDg4MDBENDAzRTAwMDA4NUUKKzoxMDlCNjAwMDMxMDJGRkZGOEY4NjAwMUMzQzBDMDgwMDhEOEMwMDUwREEKKzoxMDlCNzAwMDI0MEJGRjgwOENDRDAwMDgzQzAzMDAwQzAwMEQ1MUMwNkQKKzoxMDlCODAwMDAxOEE0MDIxMDEwQjQ4MjRBRjhBMDBFOEFGNDkwMDI4MzAKKzoxMDlCOTAwMDkwQzcwMDA3MzEwNTAwN0YwMEJBMTAyMTAwNDMyODIxM0IKKzoxMDlCQTAwMDMwRTQwMDA0MTA4MDAwMkZBRjg1MDBEMDkwQ0YwMDA3NzQKKzoxMDlCQjAwMDMxRUUwMDA4MTFDMDAwM0MwMDAwMDAwMDhDRDkwMDBDMDAKKzoxMDlCQzAwMDhDQzQwMDE0MDMyNEMwMkIxMzAwMDAyNjAwMDAwMDAwRTYKKzoxMDlCRDAwMDhDQzIwMDBDQUNBMjAwNjQ4Q0NEMDAxODI0MDJGRkY4RUIKKzoxMDlCRTAwMEFDQUQwMDY4OENDQzAwMTBBQ0FDMDA4MDhDQ0IwMDBDMTEKKzoxMDlCRjAwMEFDQUIwMDg0OENDQTAwMUNBQ0FBMDA3QzkwQTkwMEJDNTEKKzoxMDlDMDAwMDAxMjI0MDI0QTBBODAwQkM5MEMzMDAwNzMwNjcwMDA4RDAKKzoxMDlDMTAwMDEwRTAwMDA0OEY4NTAwRDA5MEFGMDBCQzM1RUUwMDAxNEQKKzoxMDlDMjAwMEEwQUUwMEJDOTBEOTAwMDczMzM4MDAwMTEzMDAwMDBGMkMKKzoxMDlDMzAwMDhGODQwMEQwMjQwNzAwMjA5MDgyMDBCQzM0NDkwMDAyQTkKKzoxMDlDNDAwMEEwODkwMEJDOEY4NDAwRDA5MDg4MDA2MjMxMDMwMEYwQUUKKzoxMDlDNTAwMDE0NjcwMDA2MjQwQTAwMzRBQzhBMDBDMDBBMDAxM0IyNUMKKzoxMDlDNjAwMDAwMDAwMDAwMEEwMDEzOEM4Q0MyMDAxNDkwQ0IwMDA3ODcKKzoxMDlDNzAwMDMxNjYwMDAyMTBDMDAwMDUwMDAwMDAwMDkwOEQwMEJDOUQKKzoxMDlDODAwMDM1QUMwMDA0QTA4QzAwQkM4Rjg0MDBEMDkwOTgwMTEzRTgKKzoxMDlDOTAwMDMzMEYwMDNGQTA4RjAxMTM4RjhFMDBEMDk1QzUwMEQ0RTUKKzoxMDlDQTAwMDAzRTAwMDA4MzBBMkZGRkZBQ0EwMDA2NDBBMDAxMzhEOUYKKzoxMDlDQjAwMDAwMDAwMDAwMjdCREZGRDhBRkIwMDAxMDhGOTAwMDFDM0YKKzoxMDlDQzAwMEFGQkYwMDI0QUZCNDAwMjBBRkIyMDAxOEFGQjEwMDE0OTIKKzoxMDlDRDAwMEFGQjMwMDFDOTYxMzAwMEUzQzA3NjAwQTNDMTQ2MDA2RUMKKzoxMDlDRTAwMDMyNjRGRkZGMzY5MzAwMTAwRTAwMTJERjM0RjQwNDEwQ0MKKzoxMDlDRjAwMDhGODQwMEQ0M0MxMTYwMEUwRTAwMDlCQjM2MzEwMDEwNzkKKzoxMDlEMDAwMDkyMEUwMDE1M0MwNzA4MDA4Q0U3MDA2MDNDMTI2MDEyQzAKKzoxMDlEMTAwMDMxQ0QwMDBGQTM4RDAwRjA4RTBFMDAwNDhFMEQwMDA4RDMKKzoxMDlEMjAwMDk2MDgwMDEyOTYxRjAwMTA5NjE5MDAxQTk2MTgwMDFFMjkKKzoxMDlEMzAwMDk2MEYwMDFDMzEwQ0ZGRkYzM0VCRkZGRjMzMkFGRkZGQjAKKzoxMDlENDAwMDMzMDlGRkZGMzFFNkZGRkYzQzAxMDgwMEFDMkIwMDQwNjgKKzoxMDlENTAwMDNDMDEwODAwQUMyQzAwMjQzQzAxMDgwMEFDMkEwMDQ0NjMKKzoxMDlENjAwMEFFMjkzMTc4QUUyNjMxN0M5MjAyMDAxNTk2MDMwMDE2OUEKKzoxMDlENzAwMDM2NTIwMDEwMzA0NDAwRkYzMDY1RkZGRjNDMDYwODAwRkIKKzoxMDlEODAwMDhDQzYwMDY0QUUyNDMxODhBRTQ1MDBCNDkyMDgwMDE0M0QKKzoxMDlEOTAwMDk2MTkwMDE4MjQxRjAwMDEwMTFGQzAwNDMzMkZGRkZGNzQKKzoxMDlEQTAwMDNDMDUwODAwOENBNTAwNThBRTU4MDBCOEFFNEYwMEJDNkEKKzoxMDlEQjAwMDkyMEMwMDE0QUY4RTAwRDhBRjhEMDBEQzMxOEIwMEZGMDkKKzoxMDlEQzAwMEFFNEIwMEMwOTIwQTAwMTVBRTY3MDA0OEFFNjYwMDRDNkMKKzoxMDlERDAwMDMxNDkwMEZGQUU0OTAwQzhBRTY1MDA3QzNDMDMwODAwNzUKKzoxMDlERTAwMDhDNjMwMDUwM0MwNDA4MDA4Qzg0MDA0QzNDMDgwODAwNDQKKzoxMDlERjAwMDhEMDgwMDU0M0MwMjA4MDA4QzQyMDA1QzhGQkYwMDI0OTgKKzoxMDlFMDAwMEFFNjMwMDgwOEZCMDAwMTBBRTgzMDA3NDhGQjMwMDFDNkYKKzoxMDlFMTAwMEFFMjIzMTlDQUU0MjAwRENBRTI3MzFBMEFFMjYzMUE0OEEKKzoxMDlFMjAwMEFFMjQzMThDQUUyMzMxOTBBRTI4MzE5NEFFMjUzMTk4REEKKzoxMDlFMzAwMEFFODcwMDUwQUU4NjAwNTRBRTg1MDA3MDhGQjEwMDE0MUUKKzoxMDlFNDAwMEFFNDcwMEUwQUU0NjAwRTRBRTQ0MDBDQ0FFNDMwMEQwRTYKKzoxMDlFNTAwMEFFNDgwMEQ0QUU0NTAwRDg4RkI0MDAyMDhGQjIwMDE4QjEKKzoxMDlFNjAwMDAzRTAwMDA4MjdCRDAwMjgyN0JERkZFMEFGQjEwMDE0QzQKKzoxMDlFNzAwMEFGQkYwMDE4MjQxMTAwMDEwRTAwMDg2NUFGQjAwMDEwM0MKKzoxMDlFODAwMDEwNTEwMDA1OTc4NDAwRTY5NzgzMDBDQzAwODMxMDJCQzcKKzoxMDlFOTAwMDE0NDAwMDA4OEY4NTAwRDQyNDA3MDAwMjhGQkYwMDE4RUIKKzoxMDlFQTAwMDhGQjEwMDE0OEZCMDAwMTAwMEUwMTAyMTAzRTAwMDA4MTMKKzoxMDlFQjAwMDI3QkQwMDIwMEUwMDBDOUEyNDA0MDAwNUFGODIwMEU4QTQKKzoxMDlFQzAwMDEwNDBGRkY2MjQwNzAwMDIwRTAwMDg2OThGOTAwMDFDNjYKKzoxMDlFRDAwMDk3OUYwMEU2OEY5OTAwRTg4RjhEMDBDODI3RUYwMDAxNUIKKzoxMDlFRTAwMDI0MEUwMDUwQUY1OTAwMjBBNzhGMDBFNkExQUUwMDAwNUQKKzoxMDlFRjAwMDNDMEMwODAwOEQ4QzAwNjQ4Rjg2MDBDODI0MEE4MDAwMEEKKzoxMDlGMDAwMDAwMEM1RTAwQUNDQjAwNzRBNEMwMDAwNjk0QzkwMDBBMkIKKzoxMDlGMTAwMDI0MUZGRjgwM0MwRDAwMEMwMTJBQzAyNEE0RDgwMDBBOTUKKzoxMDlGMjAwMDkwQzgwMDBBMjQxODIwMDAwMTFGMTgyNUEwQzMwMDBBQTkKKzoxMDlGMzAwMDhGODcwMEM4QTBFMDAwNzg4Rjg1MDBDODAwMDAzODIxMTYKKzoxMDlGNDAwMEEwQTAwMDgzM0MwMjA4MDA4QzQyMDA1MDhGODQwMEU4RUYKKzoxMDlGNTAwMDAwNDQ3ODIxMDFGRkM4MjRBRjU5MDAyODk2MEIwMDAyNjUKKzoxMDlGNjAwMDMxRUUwMDdGMDFEQTYwMjEwMThEMzAyMUE0Q0IwMEQ0RDUKKzoxMDlGNzAwMDk2MEEwMDAyQUY4NjAwRDAzQzBFMDAwNDI1NDkyNDAxNTkKKzoxMDlGODAwMEE0QzkwMEU2OEUwODAwMDRBQ0M4MDAwNDhFMDMwMDA4RDMKKzoxMDlGOTAwMEFDQzMwMDAwQTRDMDAwMTBBNEMwMDAxNEEwQzAwMEQwMzYKKzoxMDlGQTAwMDhGODUwMEQwMjQwM0ZGQkZBMEEwMDBEMTNDMDQwODAwOEYKKzoxMDlGQjAwMDhDODQwMDY0OEY4MjAwRDBBMDQ0MDBEMjhFMUYwMDBDREQKKzoxMDlGQzAwMDhGOEEwMEQwOTc4RjAwRTRBRDVGMDAxQzhFMTkwMDEwQkYKKzoxMDlGRDAwMDI0MTAwMDMwQUQ1OTAwMThBNTQwMDAzMEE1NTEwMDU0QTAKKzoxMDlGRTAwMEE1NTEwMDU2QTU0RjAwMTZBRDRFMDA2OEFENTgwMDgwMzMKKzoxMDlGRjAwMEFENTgwMDg0OTE0RDAwNjIzMUFDMDAwRjM1OEIwMDEwREMKKzoxMEEwMDAwMEExNEIwMDYyOEY4NjAwRDA5MEM5MDA2MzMxMjgwMDdGODkKKzoxMEEwMTAwMEEwQzgwMDYzOEY4NDAwRDAyNDA2RkZGRjkwODUwMDYzRjIKKzoxMEEwMjAwMDAwQTMxMDI0QTA4MjAwNjM4RjkxMDBEMDAwRTAxMDIxRDMKKzoxMEEwMzAwMDkyM0YwMEJDMzdGOTAwMDFBMjM5MDBCQzhGOEEwMEQwRTIKKzoxMEEwNDAwMDkzOEYwMEYwQUQ1ODAwNjRBRDUwMDBDMDkxNEUwMEQzMjYKKzoxMEEwNTAwMDAwMEY2OTAwMzFDQzAwMEYwMThENTgyNUExNEIwMEQzQjIKKzoxMEEwNjAwMDhGODUwMEQwOEY4OTAwRENBQ0E5MDBFODhGODgwMEQ4RUMKKzoxMEEwNzAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI3QkQwMDIwRDMKKzoxMEEwODAwMEFDQTgwMEVDQTRBNjAwRDZBNEEwMDBFMEE0QTAwMEUyMjYKKzoxMEEwOTAwMDAzRTAwMDA4MDAwMDAwMDAyN0JERkZFMEFGQjAwMDEwQTMKKzoxMEEwQTAwMDhGOTAwMDFDQUZCMTAwMTRBRkJGMDAxODhFMTkwMDA0RDAKKzoxMEEwQjAwMDNDMTgwODAwOEYxODAwNTAyNDBGRkY4MDAwMTk4OUMwMzkKKzoxMEEwQzAwMDAyMzg3MDIxMzFDRDAwN0YwMUNGNjAyNDAxQkE1MDIxQzgKKzoxMEEwRDAwMDNDMEIwMDBDQUY0QzAwMjgwMTRCNDAyMTk1MDkwMEQ0RUIKKzoxMEEwRTAwMDk1MDQwMEQ2OEUwNzAwMDQzMTMxRkZGRkFGODgwMEQwMDEKKzoxMEEwRjAwMDBFMDAwOTMzMDAwNzIxQzA4RTA2MDAwNDhGODMwMEM4QkMKKzoxMEExMDAwMDAwMDYyOUMwQUY0NTAwMjA5MDY0MDAzRTMwODIwMDQwMjgKKzoxMEExMTAwMDE0NDAwMDA2OEY4NDAwRDAzNDFGRkZGRjk0ODMwMEQ2QzQKKzoxMEExMjAwMDMwNjJGRkZGMTQ1RjAwMDQwMDAwMDAwMDk0ODQwMEQ2M0EKKzoxMEExMzAwMDBFMDAwOEM4MzA4NEZGRkY4RTA1MDAwNDAyMjAzMDIxODUKKzoxMEExNDAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI0MDQwMDIyQkMKKzoxMEExNTAwMDAwMDAzODIxMDAwNTI5QzAwQTAwMTMwMzI3QkQwMDIwOTQKKzoxMEExNjAwMDI3QkRGRkUwQUZCMTAwMTQzMDkxRkZGRkFGQjAwMDEwOEEKKzoxMEExNzAwMEFGQkYwMDE4MTIyMDAwMUQwMDAwODAyMThGODYwMDFDMzgKKzoxMEExODAwMDhDQzUwMDAwMjQwMzAwMDYwMDA1M0YwMjAwMDUxNDAyRjAKKzoxMEExOTAwMDMwRTQwMDA3MTQ4MzAwMTUzMDQ1MDBGRjJDQTgwMDA2QUEKKzoxMEExQTAwMDExMDAwMDREMDAwNTU4ODAzQzBDMDgwMDI1OEM1QTAwMTkKKzoxMEExQjAwMDAxNkM1MDIxOEQ0OTAwMDAwMTIwMDAwODAwMDAwMDAwQzIKKzoxMEExQzAwMDhGOEUwMEVDMjQwRDAwMDExMUNEMDA1OTAwMDAwMDAwMUQKKzoxMEExRDAwMDI2MEIwMDAxMzE3MEZGRkYyNENBMDAyMDAyMTEyMDJCNDIKKzoxMEExRTAwMDAxNDAzMDIxMTQ4MEZGRTZBRjhBMDAxQzAyMDAxMDIxREMKKzoxMEExRjAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4NkIKKzoxMEEyMDAwMDI3QkQwMDIwOTM4NzAwQ0UxNEUwMDAzODI0MDQwMDE0RkEKKzoxMEEyMTAwMDBFMDAxM0M0MDAwMDAwMDA4Rjg2MDAxQzI0MDIwMDAxMDEKKzoxMEEyMjAwMDBBMDAxNTBCQUY4MjAwRUM4Rjg5MDBFQzI0MDgwMDAyQjUKKzoxMEEyMzAwMDExMjgwMDNCMjQwNDAwMTMwMDAwMjgyMTAwMDAzMDIxRDUKKzoxMEEyNDAwMDI0MDcwMDAxMEUwMDEzMDMwMDAwMDAwMDBBMDAxNTBCOTQKKzoxMEEyNTAwMDhGODYwMDFDOEY4NzAwRUMyNDA1MDAwMjE0RTVGRkY2QjIKKzoxMEEyNjAwMDI0MDQwMDEyMEUwMDEzNzAwMDAwMDAwMDhGODUwMEU4MjcKKzoxMEEyNzAwMDAwNDAzMDIxMjQwNDAwMTIwRTAwMTMwMzAwMDAzODIxOTYKKzoxMEEyODAwMDBBMDAxNTBCOEY4NjAwMUM4RjgzMDBFQzI0MUYwMDAzMkYKKzoxMEEyOTAwMDE0N0ZGRkQwMjYwQjAwMDEwRTAwMTMyMjAwMDAwMDAwRTcKKzoxMEEyQTAwMDhGODUwMEU4MDA0MDMwMjEyNDAyMDAwMjI0MDQwMDEwQzEKKzoxMEEyQjAwMDAwMDAzODIxQUY4MjAwRUMwRTAwMTMwMzAwMDAwMDAwMDQKKzoxMEEyQzAwMDBBMDAxNTBCOEY4NjAwMUM4RjhGMDBFQzI0MDYwMDAyRkQKKzoxMEEyRDAwMDExRTYwMDBCMDAwMDAwMDAyNDA0MDAxMDAwMDAyODIxRkIKKzoxMEEyRTAwMDAwMDAzMDIxMEEwMDE1MjgyNDA3MDAwMTAwMDAyODIxNjEKKzoxMEEyRjAwMDBFMDAxMzAzMDAwMDMwMjEwQTAwMTUwQjhGODYwMDFDOEUKKzoxMEEzMDAwMDBFMDAxNDMxMDAwMDAwMDAxNDQwMDAxMjhGOTkwMDFDNTAKKzoxMEEzMTAwMDhGODYwMDFDMjQwMjAwMDMwQTAwMTUwQkFGODIwMEVDOUMKKzoxMEEzMjAwMDBFMDAxNEJEMDAwMDAwMDAwQTAwMTUwQjhGODYwMDFDRjMKKzoxMEEzMzAwMDBFMDAxMzEyMDAwMDAwMDAyNDAyMDAwMjI0MDQwMDE0ODYKKzoxMEEzNDAwMDAwMDAyODIxMDAwMDMwMjEwMDAwMzgyMTBBMDAxNTQ1QjYKKzoxMEEzNTAwMEFGODIwMEVDMDA0MDM4MjEyNDA0MDAxMDk3MzgwMDAyM0UKKzoxMEEzNjAwMDAwMDAyODIxMEUwMDEzMDMzMzA2RkZGRjBBMDAxNTBCMUYKKzoxMEEzNzAwMDhGODYwMDFDOEY4NDAwQzgzQzA3N0ZGRjM0RTZGRkZGRjgKKzoxMEEzODAwMDhDODUwMDc0MjQwMjAwMDEwMEE2MTgyNEFDODMwMDc0OUMKKzoxMEEzOTAwMDAzRTAwMDA4QTA4MjAwMDUxMEEwMDAzNjJDQTIwMDgwNzcKKzoxMEEzQTAwMDI3NEEwNDAwM0MwQjAwMDUyNDA5MDA4MDEwNDAwMDA3RTgKKzoxMEEzQjAwMDI0MDgwMDgwMzBBNjAwMEYwMEM1NDAyMTJEMDMwMDgxMzUKKzoxMEEzQzAwMDE0NjAwMDAyMDBBMDQ4MjEyNDA4MDA4MEFGNEIwMDMwMzgKKzoxMEEzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExMDAwMDA5NjMKKzoxMEEzRTAwMDAwMDAzODIxMDE0MDMwMjE4QzhEMDAwMDI0RTcwMDA0NUEKKzoxMEEzRjAwMDAwRTg2MDJCQUNDRDAwMDAyNDg0MDAwNDE1ODBGRkZBMzcKKzoxMEE0MDAwMDI0QzYwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKKzoxMEE0MTAwMDNDMEUwMDA2MDEwRTM4MjVBRjQ3MDAzMDAwMDAwMDAwNUEKKzoxMEE0MjAwMDAwMDAwMDAwMDAwMDAwMDA4RjRGMDAwMDMxRTgwMDEwMjUKKzoxMEE0MzAwMDExMDBGRkZEMDAwMDAwMDA4RjQyMDAzQzhGNDMwMDNDRjQKKzoxMEE0NDAwMDAwNDlDODIxMDMyM0MwMkIxMzAwMDAwNDAwMDAwMDAwQjIKKzoxMEE0NTAwMDhGNEMwMDM4MjU4NjAwMDFBRjQ2MDAzODhGNDcwMDNDRkUKKzoxMEE0NjAwMDAwQTkyODIzMDBFOTY4MjFBRjREMDAzQzE0QTBGRkNFQ0QKKzoxMEE0NzAwMDJDQTIwMDgwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkQwRjAKKzoxMEE0ODAwMDNDMDIwMDAyQUZCMTAwMTQzQzExMDAwQ0FGNDUwMDM4OTMKKzoxMEE0OTAwMEFGQjMwMDFDQUY0NjAwM0MwMDgwOTgyMUFGNDIwMDMwQjMKKzoxMEE0QTAwMDI0MDUwMDg4QUY0NDAwMjgwMzUxMjAyMUFGQkYwMDI4QjUKKzoxMEE0QjAwMEFGQjUwMDI0QUZCNDAwMjBBRkIyMDAxODBFMDAxNTdENzgKKzoxMEE0QzAwMEFGQjAwMDEwM0MxRjA4MDA4RkZGMDA0QzNDMTgwODAwODQKKzoxMEE0RDAwMDhGMTgwMDY0MjQxMEZGODAwM0YzQTgyMTMyQjkwMDdGOTUKKzoxMEE0RTAwMDAyQjA3ODI0MDAxOEEwQzAwMzNBNzAyMTAwMTg5MTQwRUYKKzoxMEE0RjAwMDAxRDEyMDIxQUY0RjAwMjgwRTAwMTU3RDAyNTQyODIxRTQKKzoxMEE1MDAwMDNDMEQwODAwOERBRDAwNTAyNDA1MDEyMDAxQjM1ODIxRjkKKzoxMEE1MTAwMDMxNkMwMDdGMDE3MDUwMjQwMTlBNDgyMTAxMzEyMDIxQzMKKzoxMEE1MjAwMDBFMDAxNTdEQUY0QTAwMjgzQzA4MDgwMDhEMDgwMDU0MzUKKzoxMEE1MzAwMDNDMDUwODAwOENBNTAwNjQwMTEzMzgyMTMwRTYwMDdGM0IKKzoxMEE1NDAwMDAwRjAxODI0MDBEQTIwMjEwMDkxMjAyMUFGNDMwMDI4RDgKKzoxMEE1NTAwMDBFMDAxNTdEMDAwNTI5NDAzQzAyMDgwMDhDNDIwMDU4ODEKKzoxMEE1NjAwMDNDMTAwODAwOEUxMDAwNjAxMjAwMDAxQzAwNTM4ODIxNkYKKzoxMEE1NzAwMDI0MTVGRjgwMEEwMDE2MDAzQzE0MDAwQzMyMjYwMDdGRDAKKzoxMEE1ODAwMDAyMzUxODI0MDBEQTIwMjEwMjQwMjgyMUFGNDMwMDI4OTgKKzoxMEE1OTAwMDAwOTQyMDIxMEUwMDE1N0QyNjEwRkZDMDEyMDAwMDBGMzAKKzoxMEE1QTAwMDAyMzI4ODIxMkUwNTAwNDExMEEwRkZGNDI0MTIxMDAwNzEKKzoxMEE1QjAwMDMyMjYwMDdGMDAxMDkxODAwMjM1MTgyNDAwREEyMDIxMTUKKzoxMEE1QzAwMDAyNDAyODIxQUY0MzAwMjgwMDk0MjAyMTBFMDAxNTdENzEKKzoxMEE1RDAwMDAwMDA4MDIxMTYwMEZGRjMwMjMyODgyMTNDMEIwODAwQTYKKzoxMEE1RTAwMDhENkIwMDVDMjQwQUZGODAyNDA1MDAwMjAxNzM0MDIxNkEKKzoxMEE1RjAwMDAxMEE0ODI0QUY0OTAwMjgzQzA0MDgwMDk0ODQwMDYyMDIKKzoxMEE2MDAwMDMxMTAwMDdGMDIxQTg4MjEzQzA3MDAwQzBFMDAwQ0NBOTIKKzoxMEE2MTAwMDAyMjc5ODIxMDA0MDI4MjEwMjYwMjAyMThGQkYwMDI4QjYKKzoxMEE2MjAwMDhGQjUwMDI0OEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4QTgKKzoxMEE2MzAwMDhGQjEwMDE0OEZCMDAwMTAwQTAwMTU3RDI3QkQwMDMwQzcKKzoxMEE2NDAwMDhGODMwMDFDOEM2MjAwMDQxMDQwMDAwMzAwMDAwMDAwOTcKKzoxMEE2NTAwMDAzRTAwMDA4MDAwMDAwMDA4QzY0MDAxMDhDNjUwMDA4MTYKKzowOEE2NjAwMDBBMDAxNUI2OEM2NjAwMEMxRgorOjA4QTY2ODAwMDAwMDAwMDAwMDAwMDAxQkNGCis6MTBBNjcwMDAwMDAwMDAwRjAwMDAwMDBBMDAwMDAwMDgwMDAwMDAwNkIzCis6MTBBNjgwMDAwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDQwMDAwMDAwNEI4Cis6MTBBNjkwMDAwMDAwMDAwMzAwMDAwMDAzMDAwMDAwMDMwMDAwMDAwM0FFCis6MTBBNkEwMDAwMDAwMDAwMzAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMkExCis6MTBBNkIwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjkyCis6MTBBNkMwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjgyCis6MTBBNkQwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjcyCis6MENBNkUwMDAwMDAwMDAwMTAwMDAwMDAxMDAwMDAwMDE2QgorOjA0QTZFQzAwMDgwMDBGNThGQgorOjEwQTZGMDAwMDgwMDBEQjAwODAwMEZFQzA4MDAxMDk0MDgwMDBGODA0RgorOjEwQTcwMDAwMDgwMDBGQzAwODAwMTFDQzA4MDAwRENDMDgwMDExRjBBMworOjEwQTcxMDAwMDgwMDBFMUMwODAwMTYzNDA4MDAxNURDMDgwMDBEQ0NEQgorOjEwQTcyMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAxMjdDMDgwMDEyN0MzQgorOjEwQTczMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAxNTgwMDgwMDBEQ0NEOQorOjEwQTc0MDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDEzRjA1QgorOjEwQTc1MDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0M3NQorOjEwQTc2MDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0M2NQorOjEwQTc3MDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0M1NQorOjEwQTc4MDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRkUwMDgwMDBEQ0MyRgorOjEwQTc5MDAwMDgwMDBEQ0MwODAwMTUzMDA4MDAwRENDMDgwMDBEQ0NDOQorOjEwQTdBMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0MyNQorOjEwQTdCMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0MxNQorOjEwQTdDMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDBEQ0MwNQorOjEwQTdEMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAwRENDMDgwMDE0NUM1RQorOjEwQTdFMDAwMDgwMDBEQ0MwODAwMERDQzA4MDAxMzcwMDgwMDEyRTAyMgorOjEwQTdGMDAwMDgwMDJFOTQwODAwMkU5QzA4MDAyRTY0MDgwMDJFNzA3RAorOjEwQTgwMDAwMDgwMDJFN0MwODAwMkU4ODA4MDA0NkI0MDgwMDNGMDA4RgorOjEwQTgxMDAwMDgwMDQ2MzQwODAwNDZCNDA4MDA0NkI0MDgwMDQ0QjRCMgorOjEwQTgyMDAwMDgwMDQ2QjQwODAwNDZGQzA4MDA1NTI0MDgwMDU0RTQxQgorOjEwQTgzMDAwMDgwMDU0QjAwODAwNTQ4NDA4MDA1NDYwMDgwMDU0MUNGOAorOjEwQTg0MDAwMEEwMDBDNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2RgorOjEwQTg1MDAwNzI3ODcwMzUyRTMwMkUzMDZBMzYwMDAwMDUwMDAwMDMwNQorOjEwQTg2MDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDBFNworOjEwQTg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAorOjEwQTg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAorOjEwQTg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwQThBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAorOjEwQThCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAorOjEwQThDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwQThEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwQThFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAorOjEwQThGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAorOjEwQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwQTkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwQTkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQTkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwQTk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwQTk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwQTk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwQTk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwQTk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwQTk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwQTlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwQTlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwQTlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwQTlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwQTlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwQTlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwQUExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwQUEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwQUEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQUE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwQUE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgorOjEwQUE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwQUE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwQUE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwQUE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwQUFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwQUFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwQUFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwQUFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwQUFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwQUFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwQUIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwQUIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwQUIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwQUI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQUI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwQUI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwQUI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwQUI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwQUI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwQUJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwQUJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQorOjEwQUJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwQUJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwQUJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwQUJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwQUMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwQUMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwQUMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAorOjEwQUM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwQUM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQUM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwQUM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwQUM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwQUM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwQUNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwQUNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAorOjEwQUNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwQUNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAorOjEwQUNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwQUNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwQUQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwQUQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwQUQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwQUQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwQUQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwQUQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQUQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwQUQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwQUQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwQURBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwQURCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwQURDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwQUREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwQURFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwQURGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwQUUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjEwQUUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwQUUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwQUU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwQUU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwQUU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwQUU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQUU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwQUU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwQUVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwQUVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwQUVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgorOjEwQUVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwQUVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwQUVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwQUYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwQUYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwQUYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwQUY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwQUY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwQUY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwQUY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwQUY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwQUY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwQUZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwQUZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwQUZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwQUZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwQUZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwQUZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwQjAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwQjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwQjAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwQjA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwQjA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwQjA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwQjA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwQjA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwQjA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwQjBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwQjBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwQjBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwQjBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwQjBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwQjBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwQjExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwQjEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwQjEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwQjE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwQjE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwQjE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwQjE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwQjE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwQjE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwQjFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwQjFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwQjFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwQjFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwQjFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwQjFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwQjIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwQjIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwQjIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwQjI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwQjI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQorOjEwQjI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwQjI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwQjI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwQjI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwQjJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQjJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwQjJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwQjJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwQjJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwQjJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwQjMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwQjMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwQjMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwQjM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwQjM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwQjM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwQjM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwQjM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwQjM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwQjNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwQjNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQjNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwQjNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwQjNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwQjNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQworOjEwQjQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQworOjEwQjQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQworOjEwQjQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwQjQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwQjQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjEwQjQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwQjQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQworOjEwQjQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwQjQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwQjRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QworOjEwQjRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwQjRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQjREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwQjRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QworOjEwQjRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QworOjEwQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgorOjEwQjUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgorOjEwQjUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgorOjEwQjUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwQjU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgorOjEwQjU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgorOjEwQjU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgorOjEwQjU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwQjU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwQjU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwQjVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgorOjEwQjVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgorOjEwQjVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwQjVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQjVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgorOjEwQjVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgorOjEwQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQorOjEwQjYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQorOjEwQjYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwQjYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQorOjEwQjY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQorOjEwQjY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQorOjEwQjY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwQjY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQorOjEwQjY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQorOjEwQjY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQorOjEwQjZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQorOjEwQjZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQorOjEwQjZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQorOjEwQjZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwQjZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQjZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwQjcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwQjcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwQjczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwQjc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwQjc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwQjc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwQjc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwQjc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwQjc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwQjdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwQjdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwQjdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwQjdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwQjdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwQjdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQjgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAorOjEwQjgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAorOjEwQjgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorOjEwQjg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAorOjEwQjg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAorOjEwQjg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAorOjEwQjg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAorOjEwQjg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwQjg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAorOjEwQjhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAorOjEwQjhCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwQjhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwQjhEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAorOjEwQjhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAorOjEwQjhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwQjkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQjkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwQjkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwQjk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwQjk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwQjk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwQjk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwQjk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwQjk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwQjlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwQjlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwQjlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwQjlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwQjlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwQjlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwQkExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwQkEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQkEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwQkE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgorOjEwQkE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwQkE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwQkE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwQkE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwQkE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwQkFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwQkFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwQkFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwQkFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwQkFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwQkFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwQkIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwQkIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwQkIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQkI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwQkI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwQkI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwQkI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwQkI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwQkI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwQkJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQorOjEwQkJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwQkJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwQkJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwQkJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwQkJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwQkMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwQkMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAorOjEwQkMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwQkM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQkM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwQkM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwQkM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwQkM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwQkM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwQkNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAorOjEwQkNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwQkNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAorOjEwQkNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwQkNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwQkNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwQkQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwQkQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwQkQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwQkQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwQkQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQkQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwQkQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwQkQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwQkQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwQkRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwQkRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwQkRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwQkREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwQkRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwQkRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjEwQkUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwQkUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwQkUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwQkU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwQkU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwQkU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQkU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwQkU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwQkU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwQkVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwQkVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgorOjEwQkVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwQkVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwQkVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwQkVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwQkYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwQkYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwQkYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwQkY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwQkY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwQkY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwQkY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwQkY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwQkY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwQkZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwQkZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwQkZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwQkZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwQkZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwQkZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwQzAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwQzAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwQzAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwQzA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwQzA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwQzA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwQzA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwQzA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwQzA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwQzBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwQzBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwQzBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwQzBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwQzBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwQzBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwQzExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwQzEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwQzEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwQzE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwQzE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwQzE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwQzE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwQzE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwQzE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwQzFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwQzFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwQzFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwQzFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwQzFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwQzFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwQzIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwQzIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwQzIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwQzI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQorOjEwQzI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwQzI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwQzI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwQzI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwQzI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwQzJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwQzJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwQzJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwQzJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwQzJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwQzJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwQzMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwQzMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwQzMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwQzM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwQzM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwQzM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwQzM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwQzM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwQzM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwQzNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwQzNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwQzNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwQzNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwQzNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwQzNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQworOjEwQzQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQworOjEwQzQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwQzQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwQzQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjEwQzQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwQzQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQworOjEwQzQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwQzQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwQzQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QworOjEwQzRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwQzRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwQzRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwQzREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QworOjEwQzRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QworOjEwQzRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQworOjEwQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgorOjEwQzUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgorOjEwQzUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwQzUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgorOjEwQzU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgorOjEwQzU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgorOjEwQzU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwQzU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwQzU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwQzU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgorOjEwQzVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgorOjEwQzVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwQzVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwQzVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgorOjEwQzVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgorOjEwQzVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgorOjEwQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQorOjEwQzYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwQzYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQorOjEwQzYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQorOjEwQzY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQorOjEwQzY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwQzY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQorOjEwQzY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQorOjEwQzY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQorOjEwQzY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQorOjEwQzZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQorOjEwQzZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQorOjEwQzZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwQzZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwQzZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwQzZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQorOjEwQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwQzcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwQzcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwQzczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwQzc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwQzc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwQzc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwQzc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwQzc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwQzc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwQzdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwQzdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwQzdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwQzdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwQzdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwQzdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAorOjEwQzgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAorOjEwQzgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorOjEwQzgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAorOjEwQzg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAorOjEwQzg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAorOjEwQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAorOjEwQzg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwQzg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAorOjEwQzg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAorOjEwQzhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwQzhCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwQzhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAorOjEwQzhEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAorOjEwQzhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwQzhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwQzkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwQzkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwQzkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwQzk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwQzk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwQzk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwQzk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwQzk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwQzk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwQzlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwQzlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwQzlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwQzlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwQzlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwQzlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwQ0ExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwQ0EyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwQ0EzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNgorOjEwQ0E0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwQ0E1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwQ0E2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwQ0E3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwQ0E4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwQ0E5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwQ0FBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwQ0FCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwQ0FDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwQ0FEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwQ0FFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwQ0FGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNQorOjEwQ0IxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwQ0IyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwQ0IzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwQ0I0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwQ0I1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwQ0I2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwQ0I3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwQ0I4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNQorOjEwQ0I5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NQorOjEwQ0JBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwQ0JCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwQ0JDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwQ0JEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwQ0JFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NQorOjEwQ0JGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwQ0MxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNAorOjEwQ0MyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwQ0MzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwQ0M0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNAorOjEwQ0M1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwQ0M2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNAorOjEwQ0M3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwQ0M4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwQ0M5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NAorOjEwQ0NBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwQ0NCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NAorOjEwQ0NDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NAorOjEwQ0NEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwQ0NFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NAorOjEwQ0NGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNAorOjEwQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwQ0QxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMworOjEwQ0QyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMworOjEwQ0QzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwQ0Q0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMworOjEwQ0Q1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMworOjEwQ0Q2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMworOjEwQ0Q3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMworOjEwQ0Q4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwQ0Q5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwQ0RBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwQ0RCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwQ0RDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MworOjEwQ0REMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwQ0RFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwQ0RGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMworOjEwQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwQ0UxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwQ0UyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgorOjEwQ0UzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwQ0U0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwQ0U1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMgorOjEwQ0U2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwQ0U3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMgorOjEwQ0U4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwQ0U5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwQ0VBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MgorOjEwQ0VCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwQ0VDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MgorOjEwQ0VEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwQ0VFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwQ0VGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMgorOjEwQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMQorOjEwQ0YxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMQorOjEwQ0YyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwQ0YzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMQorOjEwQ0Y0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwQ0Y1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMQorOjEwQ0Y2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwQ0Y3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMQorOjEwQ0Y4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMQorOjEwQ0Y5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwQ0ZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwQ0ZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwQ0ZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwQ0ZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwQ0ZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwQ0ZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMAorOjEwRDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwRDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAorOjEwRDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMAorOjEwRDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwRDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwRDA2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwRDA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwRDA4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMAorOjEwRDA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MAorOjEwRDBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MAorOjEwRDBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MAorOjEwRDBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MAorOjEwRDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MAorOjEwRDBFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MAorOjEwRDBGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMAorOjEwRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwRDExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwRDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRgorOjEwRDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwRDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERgorOjEwRDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRgorOjEwRDE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwRDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwRDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwRDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RgorOjEwRDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwRDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RgorOjEwRDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwRDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwRDFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwRDFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRQorOjEwRDIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRQorOjEwRDIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRQorOjEwRDIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRQorOjEwRDI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERQorOjEwRDI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRQorOjEwRDI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRQorOjEwRDI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRQorOjEwRDI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RQorOjEwRDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RQorOjEwRDJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RQorOjEwRDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RQorOjEwRDJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RQorOjEwRDJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RQorOjEwRDJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRQorOjEwRDJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRAorOjEwRDMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRAorOjEwRDMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGRAorOjEwRDMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwRDM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBERAorOjEwRDM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDRAorOjEwRDM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRAorOjEwRDM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRAorOjEwRDM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RAorOjEwRDM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwRDNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RAorOjEwRDNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2RAorOjEwRDNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwRDNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RAorOjEwRDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRAorOjEwRDNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRAorOjEwRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQworOjEwRDQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQworOjEwRDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwRDQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQworOjEwRDQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQworOjEwRDQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQworOjEwRDQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQworOjEwRDQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQworOjEwRDQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QworOjEwRDQ5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QworOjEwRDRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QworOjEwRDRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwRDRDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QworOjEwRDREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QworOjEwRDRFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQworOjEwRDRGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQworOjEwRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQgorOjEwRDUxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwRDUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQgorOjEwRDUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQgorOjEwRDU0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQgorOjEwRDU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQgorOjEwRDU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwRDU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQgorOjEwRDU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QgorOjEwRDU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QgorOjEwRDVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QgorOjEwRDVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QgorOjEwRDVDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QgorOjEwRDVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QgorOjEwRDVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQgorOjEwRDVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQgorOjEwRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwRDYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQQorOjEwRDYyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQQorOjEwRDYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFQQorOjEwRDY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwRDY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDQQorOjEwRDY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQQorOjEwRDY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBQQorOjEwRDY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5QQorOjEwRDY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4QQorOjEwRDZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3QQorOjEwRDZCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QQorOjEwRDZDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1QQorOjEwRDZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0QQorOjEwRDZFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQQorOjEwRDZGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyQQorOjEwRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOQorOjEwRDcxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOQorOjEwRDcyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOQorOjEwRDczMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOQorOjEwRDc0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwRDc1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOQorOjEwRDc2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOQorOjEwRDc3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOQorOjEwRDc4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OQorOjEwRDc5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OQorOjEwRDdBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OQorOjEwRDdCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OQorOjEwRDdDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OQorOjEwRDdEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OQorOjEwRDdFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOQorOjEwRDdGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOQorOjEwRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxOAorOjEwRDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOAorOjEwRDgyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGOAorOjEwRDgzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFOAorOjEwRDg0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOAorOjEwRDg1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDOAorOjEwRDg2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwRDg3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBOAorOjEwRDg4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5OAorOjEwRDg5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4OAorOjEwRDhBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3OAorOjEwRDhCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2OAorOjEwRDhDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1OAorOjEwRDhEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0OAorOjEwRDhFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzOAorOjEwRDhGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyOAorOjEwRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwRDkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNworOjEwRDkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNworOjEwRDkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwRDk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENworOjEwRDk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwRDk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNworOjEwRDk3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwRDk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwRDk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwRDlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwRDlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwRDlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwRDlEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwRDlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNworOjEwRDlGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwREExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDNGMworOjEwREEyMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDA5NgorOjEwREEzMDAwMjQ0Mjc1ODAzQzAzMDgwMDI0NjM3QTI4QUM0MDAwMDAyRgorOjEwREE0MDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDBFRAorOjEwREE1MDAwMzdCRDdGRkMwM0EwRjAyMTNDMTAwODAwMjYxMDMxRDgxMAorOjEwREE2MDAwM0MxQzA4MDAyNzlDNzU4MDBFMDAxMEVGMDAwMDAwMDA5MQorOjEwREE3MDAwMDAwMDAwMEQzMEE1RkZGRjMwQzYwMEZGMjc0MzAxODBFNgorOjEwREE4MDAwOEY0MjAxQjgwNDQwRkZGRTI0MDIwMDAyQUM2NDAwMDA5MworOjEwREE5MDAwQTQ2NTAwMDhBMDY2MDAwQUEwNjIwMDBCM0MwMjEwMDAwQQorOjEwREFBMDAwQUM2NzAwMTgwM0UwMDAwOEFGNDIwMUI4M0MwMzYwMDAxNworOjEwREFCMDAwOEM2MjRGRjgwNDQwRkZGRTNDMDIwMjAwQUM2NDRGQzA5MQorOjEwREFDMDAwQUM2MjRGQzQzQzAyMTAwMDAzRTAwMDA4QUM2MjRGRjhBNworOjEwREFEMDAwOTQ4MjAwMEMyNDg2MDAxNDAwQTAzODIxMDAwMjEzMDI1NgorOjEwREFFMDAwMDAwMjEwODAwMDgyNDAyMTAwQzgxMDJCMTA0MDAwNTcxNworOjEwREFGMDAwMDAwMDAwMDA5MEMzMDAwMDJDNjIwMDA5NTA0MDAwNTE1QgorOjEwREIwMDAwOTBDMjAwMDEwMDAzMTA4MDNDMDMwODAwMjQ2Mzc1MzRCOAorOjEwREIxMDAwMDA0MzEwMjE4QzQyMDAwMDAwNDAwMDA4MDAwMDAwMDA3QgorOjEwREIyMDAwOTBDMzAwMDEyNDAyMDAwQTE0NjIwMDNBMDAwMDAwMDBDMQorOjEwREIzMDAwMDEwNjEwMjMyQzQyMDAwQTE0NDAwMDM2MjRDNjAwMDJCRAorOjEwREI0MDAwOENFMjAwMDAzNDQyMDEwMEFDRTIwMDAwOTBDMjAwMDAxMAorOjEwREI1MDAwOTBDMzAwMDE5MEM0MDAwMjkwQzUwMDAzMDAwMzFDMDBBNAorOjEwREI2MDAwMDAwMjE2MDAwMDQzMTAyNTAwMDQyMjAwMDA0NDEwMjU4NgorOjEwREI3MDAwMDA0NTEwMjUyNEM2MDAwNEFDRTIwMDA0OTBDMjAwMDA1OQorOjEwREI4MDAwOTBDMzAwMDE5MEM0MDAwMjkwQzUwMDAzMDAwMjE2MDA3QgorOjEwREI5MDAwMDAwMzFDMDAwMDQzMTAyNTAwMDQyMjAwMDA0NDEwMjU0RgorOjEwREJBMDAwMDA0NTEwMjUyNEM2MDAwNDBBMDAwQ0FBQUNFMjAwMDhCNworOjEwREJCMDAwOTBDMzAwMDEyNDAyMDAwNDE0NjIwMDE2MjRDNjAwMDI2RgorOjEwREJDMDAwOTBDMjAwMDA5MEM0MDAwMThDRTMwMDAwMDAwMjEyMDAyQgorOjEwREJEMDAwMDA0NDEwMjUzNDYzMDAwNDI0QzYwMDAyQUNFMjAwMENBQgorOjEwREJFMDAwMEEwMDBDQUFBQ0UzMDAwMDkwQzMwMDAxMjQwMjAwMDM2OQorOjEwREJGMDAwMTQ2MjAwMDgyNEM2MDAwMjhDRTIwMDAwOTBDMzAwMDBGQQorOjEwREMwMDAwMjRDNjAwMDEzNDQyMDAwOEEwRTMwMDEwMEEwMDBDQUE1OAorOjEwREMxMDAwQUNFMjAwMDAwM0UwMDAwODI0MDIwMDAxOTBDMzAwMDExMAorOjEwREMyMDAwMjQwMjAwMDIxMDYyMDAwMjI0QzQwMDAyMDEwMDIwMjEyQworOjEwREMzMDAwMEEwMDBDQUEwMDgwMzAyMTBBMDAwQ0FBMjRDNjAwMDFBOAorOjEwREM0MDAwOTBDMjAwMDEwQTAwMENBQTAwQzIzMDIxMDNFMDAwMDhDMworOjEwREM1MDAwMDAwMDEwMjEyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTBENworOjEwREM2MDAwMEUwMDEzMEUwMDgwODAyMTkzNjIwMDA1MjQwM0ZGRkU0NgorOjEwREM3MDAwMDIwMDIwMjEwMDQzMTAyNDhGQkYwMDE0OEZCMDAwMTAzOQorOjEwREM4MDAwQTM2MjAwMDUwQTAwMTMxNzI3QkQwMDE4MjdCREZGRTg4RgorOjEwREM5MDAwQUZCMDAwMTBBRkJGMDAxNDBFMDAwRjBFMDA4MDgwMjE0NworOjEwRENBMDAwOTM2MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDQzQworOjEwRENCMDAwMjQwMjAxMDBBRjQyMDE4MDBBMDAwRDIyMDIwMDIwMjE0RgorOjEwRENDMDAwQUY0MDAxODAwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTBGMAorOjEwRENEMDAwMEEwMDBGQUQyN0JEMDAxODI3QkRGRjgwQUZCRTAwNzgzQQorOjEwRENFMDAwQUZCNzAwNzRBRkIzMDA2NEFGQkYwMDdDQUZCNjAwNzBENQorOjEwRENGMDAwQUZCNTAwNkNBRkI0MDA2OEFGQjIwMDYwQUZCMTAwNUMwQworOjEwREQwMDAwQUZCMDAwNTg4RjUwMDEyODkzNjMwMDNGOTM2MjAwMDUyNQorOjEwREQxMDAwMDAwMEYwMjEzMDczMDBGRjAwMDIxMDI3MzA0MjAwMDFBNAorOjEwREQyMDAwMDAwMEI4MjExNDQwMDA2NkFGQTAwMDUwOTM0MjAxMTZENQorOjEwREQzMDAwOTM0MzAxMTIzMDQyMDBGRjMwNjMwMEZGMDM0MjIwMjE3MQorOjEwREQ0MDAwMDM0MzEwMjEyNDQ1NDAwMDhGODIwMDFDMTA0MDAwMTgxRQorOjEwREQ1MDAwMjQ5MTQwMDA4RjQyMDEwNDNDMDMwMDAxMDA0MzEwMjQ0MQorOjEwREQ2MDAwMTA0MDAwMTMwMDAwMDAwMDhDQTMwMDBDOEY2MjAwMzBGNAorOjEwREQ3MDAwMTQ2MjAxQjUyNDAyMDAwMThDQTMwMDEwOEY2MjAwMkNGNAorOjEwREQ4MDAwMTQ2MjAxQjEyNDAyMDAwMTk3NjIwMDNBOTQ4MzQwMDBCQQorOjEwREQ5MDAwMzA0MkZGRkYxNDYyMDFBQzI0MDIwMDAxOTc2MjAwMzg5OAorOjEwRERBMDAwOTYyMzAwMDIzMDQyRkZGRjE0NjIwMUE3MjQwMjAwMDEwMworOjEwRERCMDAwOTM2MjAwMDAzMDQzMDBGRjI0MDIwMDIwMTA2MjAwMDUzRgorOjEwRERDMDAwMjQwMjAwNTAxMDYyMDAwNjAwMDAwMDAwMEEwMDBENkNFMgorOjEwREREMDAwMDAwMDAwMDAwMDAwMDAwRDBBMDAwRDc1QUZBMDAwMzAyQgorOjEwRERFMDAwM0MxRTA4MDAyN0RFNzVFODBBMDAwRDc1QUZBMDAwMzA2NAorOjEwRERGMDAwM0MwMjA4MDA4QzQyMDBEQzI0NDIwMDAxM0MwMTA4MDA4NworOjEwREUwMDAwQUMyMjAwREMwRTAwMTNEODAwMDAwMDAwMEEwMDBGMDM1MworOjEwREUxMDAwOEZCRjAwN0M4RjQyMDEwNDNDMDMwMDIwOTIzNDAwMEQzMAorOjEwREUyMDAwMDA0MzEwMjQwMDAyMjAyQjAwMDQyMTQwQUZBNDAwMzA0NgorOjEwREUzMDAwOEY0MzAxMDQzQzAyMDA0MDAwNjIxODI0MTQ2MDAwMDI3OQorOjEwREU0MDAwMzQ4NzAwNDAwMDgwMzgyMTMyODIwMDIwQUZBNzAwMzBBNAorOjEwREU1MDAwMTQ0MDAwMDIzNEU2MDA4MDAwRTAzMDIxMTBDMDAwMEJDNgorOjEwREU2MDAwQUZBNjAwMzA5M0M1MDAwODhGNjcwMDRDMDIwMDIwMjE0OAorOjEwREU3MDAwMDAwNTJCMDAzNEE1MDA4MTMwQTVGMDgxMEUwMDBDOEQyQgorOjEwREU4MDAwMzBDNjAwRkYwQTAwMEYwMDAwMDAwMDAwOTM2MjAwM0U1MQorOjEwREU5MDAwMzA0MjAwNDAxMDQwMDAwRTI0MDIwMDA0NTY2MjAwMDY4QQorOjEwREVBMDAwMjQwMjAwMTIwMjAwMjAyMTBFMDAxNEU2MDIyMDMwMjE3QworOjEwREVCMDAwMEEwMDBGMDM4RkJGMDA3QzE2NjIwMDA1MDAwMDAwMDBGRgorOjEwREVDMDAwMEUwMDBEMTMwMDAwMjAyMTBBMDAwRjAzOEZCRjAwN0NGRAorOjEwREVEMDAwOTc0MzAxMUE5NjI0MDAwRTkzNjIwMDM1MzI4NTAwMDRBMAorOjEwREVFMDAwMzA3NkZGRkYwMDQ0MjAwNEFGQTQwMDU0OEUzMjAwMDRCQgorOjEwREVGMDAwMTBBMDAwMTU4RTM1MDAwODkzNjIwMDNFMzA0MjAwNDBBRAorOjEwREYwMDAwMTA0MDAwMDcwMDAwMDAwMDBFMDAxNDI4MDI0MDIwMjFFRAorOjEwREYxMDAwMTA0MDAwMEQwMDAwMDAwMDBBMDAwRjAwMDAwMDAwMDA4QgorOjEwREYyMDAwOEY2MjAwNDQwMjQyMTAyMzA0NDAwMTQ1MDAwMDAwMDBCQgorOjEwREYzMDAwOEY2MjAwNDgwMjQyMTAyMzA0NDEwMTQxMjQwNDAwMTY2QworOjEwREY0MDAwMEEwMDBFMDM4RkMyMDAwNDhGNjIwMDQ4MDI0MjEwMjNCMQorOjEwREY1MDAwMDQ0MDAwMDgwMDAwMDAwMDNDMDIwODAwOEM0MjMxMDAzMAorOjEwREY2MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIzMTAwMEEwMDBFRjVGOQorOjEwREY3MDAwMDAwMDAwMDA4RjYyMDA0MDAyNDIxMDIzMTg0MDAwMDk5OAorOjEwREY4MDAwMjQwMjAwMEMzQzAyMDgwMDhDNDIzMTAwMzI5NDAwRkM1OAorOjEwREY5MDAwMDAwMEIwMjEyNDQyMDAwMTNDMDEwODAwQUMyMjMxMDAwNQorOjEwREZBMDAwMjQwMjAwMENBRkEyMDAzMDhGNjIwMDQwMDA1MjIwMjNGOAorOjEwREZCMDAwMTg4MDAwMEQwMkM0MTAyQTE0NDAwMTE2MDAwMDAwMDA1MQorOjEwREZDMDAwMTQ5NjAwMDYwMkM0MTAyMzNBODIwMDAxMzA0MjAwMDE3OAorOjEwREZEMDAwMTQ0MDAxMTAwMDAwMDAwMDAyQzQxMDIzMDI0NDkwMjFFQworOjEwREZFMDAwMEEwMDBERUIzMDU2RkZGRjAwMDAyMDIxMzI4MjAwMDJCNAorOjEwREZGMDAwMTA0MDAwMUEzMjgyMDAxMDkzNjIwMDNFMzA0MjAwNDAwRQorOjEwRTAwMDAwNTA0MDAwMTE4RkMyMDAwNDBFMDAxMzBFMDIwMDIwMjFBOAorOjEwRTAxMDAwMjQwMjAwMThBMzYyMDAzRjkzNjIwMDA1MjQwM0ZGRkU2MAorOjEwRTAyMDAwMDIwMDIwMjEwMDQzMTAyNDBFMDAxMzE3QTM2MjAwMDVGNAorOjEwRTAzMDAwMjQwNDAwMzkwMDAwMjgyMTBFMDAxNDExMjQwNjAwMThDMQorOjEwRTA0MDAwMEEwMDBGMDIyNDAyMDAwMTI0MDQwMDE3MDA0MEY4MDkwRQorOjEwRTA1MDAwMDAwMDAwMDAwQTAwMEYwMjI0MDIwMDAxMTA0MDAwRjgzNgorOjEwRTA2MDAwMDAwMDAwMDA4RjYzMDA0QzhGNjIwMDU0MDJBMjEwMjM1NgorOjEwRTA3MDAwMUM0MDAwRjMwMkEzMTAyMzA0NDIwMDAxMDA2MEE4MjEwOQorOjEwRTA4MDAwQUZBNDAwMThBRkIyMDAxMEFGQjYwMDE0OTM0MjAxMjA0NQorOjEwRTA5MDAwOEY2NTAwNDA5NzYzMDAzQzMwNDIwMEZGMDM0MjEwMjEyRgorOjEwRTBBMDAwMDA0NDEwMjE4RkE0MDA1NDMwNjNGRkZGMjQ0MjQwMDAzRAorOjEwRTBCMDAwMDA4MzE4MkI4RkE0MDAzMEFGQTIwMDIwQUZBNTAwMjg0QQorOjEwRTBDMDAwMDA4MzIwMjVBRkE0MDAzMEFGQTUwMDI0QUZBMDAwMkMxMgorOjEwRTBEMDAwQUZCNTAwMzQ5MzYyMDAzRTMwNDIwMDA4NTA0MDAwMTE1QQorOjEwRTBFMDAwOEZDMjAwMDAwMjIwMjAyMTI3QTUwMDM4MEUwMDBDQTRCQQorOjEwRTBGMDAwQUZBMDAwMzg1NDQwMDAwQjhGQzIwMDAwOEZBMjAwMzg0MAorOjEwRTEwMDAwMzA0MjAxMDA1MDQwMDAwNzhGQzIwMDAwOEZBMzAwM0M0NgorOjEwRTExMDAwOEY2MjAwNjAwMDYyMTAyMzA0NDMwMDAxQUY2MzAwNjA1RgorOjEwRTEyMDAwOEZDMjAwMDAwMDQwRjgwOTI3QTQwMDEwOEZBMjAwMzAyMQorOjEwRTEzMDAwMzA0MjAwMDI1NDQwMDAwMTMyOTQwMEZFOTM2MjAwM0VERgorOjEwRTE0MDAwMzA0MjAwNDAxMDQwMDAzNzhGQTMwMDE0OEY2MjAwNTQwQgorOjEwRTE1MDAwMTZBMjAwMUEzMjgyMDAwMTI0MDIwMDE0MTI2MjAwMTA3QQorOjEwRTE2MDAwMkE2MjAwMTUxMDQwMDAwNjI0MDIwMDE2MjQwMjAwMEM0QQorOjEwRTE3MDAwMTI2MjAwMDczMjgyMDAwMTBBMDAwRTVGMDAwMDAwMDBGOAorOjEwRTE4MDAwMTI2MjAwMDUzMjgyMDAwMTBBMDAwRTVGMDAwMDAwMDBFQQorOjEwRTE5MDAwMEEwMDBFNUEyNDE3MDAwRTBBMDAwRTVBMjQxNzAwMTAwNworOjEwRTFBMDAwMEEwMDBFNUUyNDE3MDAxMjkzNjIwMDIzMjQwM0ZGQkRCMQorOjEwRTFCMDAwMDA0MzEwMjRBMzYyMDAyMzMyODIwMDAxMTA0MDAwMTlBMgorOjEwRTFDMDAwOEZBMzAwMTQyNDAyMDAwQzEyNjIwMDBFMkE2MjAwMERCQworOjEwRTFEMDAwMTA0MDAwMDYyNDAyMDAwRTI0MDIwMDBBMTI2MjAwMDcwQQorOjEwRTFFMDAwOEZBMjAwMjQwQTAwMEU3NzI0NDIwMDAxMTI2MjAwMDg2OAorOjEwRTFGMDAwOEZBMjAwMjQwQTAwMEU3NzI0NDIwMDAxMEEwMDBFNzU0NworOjEwRTIwMDAwMjQxNzAwMDgyNDAyMDAwRTE2RTIwMDAyMjQxNzAwMTY0QworOjEwRTIxMDAwMjQxNzAwMTA4RkEyMDAyNDI0NDIwMDAxQUZBMjAwMjQ4MgorOjEwRTIyMDAwOEZBMzAwMTQ4RkEyMDAyNDhGNzMwMDQwMDA0MzEwMjE5RAorOjEwRTIzMDAwQUY2MjAwNDA4RkEyMDA1NDkzNjQwMDM2OEY2MzAwNDBBOQorOjEwRTI0MDAwMDJBMjg4MjEzNDAyRkZGRjAwODIxMDA0MDA2MjE4MjExQworOjEwRTI1MDAwQUY2MzAwNDg4RkE2MDAzMDMwQzIwMDA4MTA0MDAwMEVBNworOjEwRTI2MDAwMDAwMDAwMDA4RjYyMDA1ODE2MjIwMDA0MzBDNjAwRkYzNAorOjEwRTI3MDAwOTc0MjAxMUE1MDQwMDAwMTM0QzYwMDEwOTNDNTAwMDhBRgorOjEwRTI4MDAwOEZBNzAwMzQwMjAwMjAyMTAwMDUyQjAwMzRBNTAwODA1OAorOjEwRTI5MDAwMEUwMDBDOEQzMEE1RjA4MDhGNjIwMDQwMDA1MzEwMjNEQgorOjEwRTJBMDAwMTg0MDAwMTc4RkEyMDAxODNDMDIwODAwOEM0MjMxOThEOQorOjEwRTJCMDAwMzA0MjAwMTAxMDQwMDAwOTI0MDIwMDAxOTc2MjAwNjhGQgorOjEwRTJDMDAwMTQ0MDAwMDYyNDAyMDAwMUE3NjIwMDY4OTc0MjAwN0EwOQorOjEwRTJEMDAwMjQ0MjAwMEEwQTAwMEVCQkE3NjIwMDEyQTc2MjAwMTJDNQorOjEwRTJFMDAwMEUwMDEzMEUwMjAwMjAyMTkzNjIwMDdEMjQwMzAwMDEyMgorOjEwRTJGMDAwMDIwMDIwMjEzNDQyMDAwMTBBMDAwRUI5QUZBMzAwNTBGMQorOjEwRTMwMDAwMTg0MDAwMEEwMDAwMDAwMDBFMDAxMzBFMDIwMDIwMjEzOQorOjEwRTMxMDAwOTM2MjAwN0QyNDAzMDAwMTAyMDAyMDIxQUZBMzAwNTA3RQorOjEwRTMyMDAwMzQ0MjAwMDQwRTAwMTMxN0EzNjIwMDdEOTM2MjAwM0U4NgorOjEwRTMzMDAwMzA0MjAwNDAxNDQwMDAwQzMyODIwMDAxMTA0MDAwMEFCQworOjEwRTM0MDAwMDAwMDAwMDA4RjYzMDA0MDhGQzIwMDA0MjQwNDAwMTgwNgorOjEwRTM1MDAwMjQ2MzAwMDEwMDQwRjgwOUFGNjMwMDQwOEZBMjAwMzA0MQorOjEwRTM2MDAwMEEwMDBGMDIzMDQyMDAwNDhGNjIwMDU4MTA1MTAwMTA2MgorOjEwRTM3MDAwMDAwMDAwMDA4RjYyMDAxODAyNDIxMDIzMUM0MDAwMDhCOQorOjEwRTM4MDAwMjQwNDAwMDE4RjYyMDAxODE2NDIwMDA5MDAwMDAwMDBGQQorOjEwRTM5MDAwOEY2MjAwMUMwMkEyMTAyMzA0NDAwMDA1MDAwMDAwMDA1MAorOjEwRTNBMDAwQUY3MTAwNThBRkE0MDA1MEFGNzIwMDE4QUY3NTAwMUNEOQorOjEwRTNCMDAwMTJFMDAwMEI4RkEyMDA1MDBFMDAxMzBFMDIwMDIwMjE2RAorOjEwRTNDMDAwQTM3NzAwM0YwRTAwMTMxNzAyMDAyMDIxMDJFMDMwMjE0NgorOjEwRTNEMDAwMjQwNDAwMzcwRTAwMTQxMTAwMDAyODIxOEZBMjAwNTBFMQorOjEwRTNFMDAwMTA0MDAwMDMwMDAwMDAwMDBFMDAwQzlCMDIwMDIwMjFFMgorOjEwRTNGMDAwMTJDMDAwMDUwMDAwMTgyMThGQTIwMDMwMzA0MjAwMDQzNgorOjEwRTQwMDAwNTA0MDAwMTEwMDYwMTAyMTI0MDMwMDAxMEEwMDBGMDI5NworOjEwRTQxMDAwMDA2MDEwMjEwRTAwMTMwRTAyMDAyMDIxOTM2MjAwN0Q4NworOjEwRTQyMDAwMDIwMDIwMjEzNDQyMDAwNDBFMDAxMzE3QTM2MjAwN0Q3NQorOjEwRTQzMDAwMEUwMDBDOUIwMjAwMjAyMTBBMDAwRjAyMjQwMjAwMDFBMgorOjEwRTQ0MDAwQUY0MDAwNDQyNDAyMDAwMThGQkYwMDdDOEZCRTAwNzhFMworOjEwRTQ1MDAwOEZCNzAwNzQ4RkI2MDA3MDhGQjUwMDZDOEZCNDAwNjhGMgorOjEwRTQ2MDAwOEZCMzAwNjQ4RkIyMDA2MDhGQjEwMDVDOEZCMDAwNTgzMgorOjEwRTQ3MDAwMDNFMDAwMDgyN0JEMDA4MDhGNDIwMUI4MDQ0MEZGRkU4MgorOjEwRTQ4MDAwMjQwMjA4MDBBRjQyMDFCODAzRTAwMDA4MDAwMDAwMDBDOQorOjEwRTQ5MDAwMzBBNUZGRkYzMEM2RkZGRjhGNDIwMUI4MDQ0MEZGRkVFQQorOjEwRTRBMDAwM0MwMjAwMDhBRjQ0MDE4MDAzNDIxMDIxQUY0NDAwMjAyOQorOjEwRTRCMDAwOTQ0MjAwNDgzMDQ0RkZGRjEwODAwMDE5MjQwMjAwMDNGQQorOjEwRTRDMDAwMjRBMjAwMTIwMDgyMTAyQjEwNDAwMDE1MjQwMjAwMDMyOQorOjEwRTREMDAwOTM0MjAxMjAyNDAzMDAxQUEzNDMwMThCMzA0MjAwRkYyMgorOjEwRTRFMDAwMjQ0N0ZGRkU4RjgyMDAwMDAwODcxODJCMzg2MzAwMDE0RAorOjEwRTRGMDAwMDAwMjEzODIwMDQzMTAyNDEwNDAwMDA1OEY4MzAwMDRBMworOjEwRTUwMDAwMzQ2MjAwMDFBNzQ3MDE5NDBBMDAwRjM5QUY4MjAwMDQ2QQorOjEwRTUxMDAwMjQwMkZGRkUwMDYyMTAyNDBBMDAwRjM5QUY4MjAwMDRCQgorOjEwRTUyMDAwQTM0MjAxOEIyNDAyMDAwMkE3NDIwMThDOEY4MjAwMDBDQgorOjEwRTUzMDAwOEY4NDAwMDRBNzQ1MDE4RUE3NDIwMTkwOEY4MjAwMENCMgorOjEwRTU0MDAwMzA4MzgwMDBBRjQyMDFBOEE3NDYwMTg4MTA2MDAwMEUwQQorOjEwRTU1MDAwOEY4MjAwMDQ5MzQyMDExNjMwNDIwMEZDMjQ0MjAwMDRFMgorOjEwRTU2MDAwMDA1QTEwMjE4QzQyNDAwMDMwNDJGRkZGMTQ0MDAwMDY0OAorOjEwRTU3MDAwOEY4MjAwMDQzQzAyRkZGRjM0NDI3RkZGMDA4MjEwMjRBMAorOjEwRTU4MDAwQUY4MjAwMDQ4RjgyMDAwNDI0MDNCRkZGOTc4NDAwMDIzRgorOjEwRTU5MDAwMDA0MzEwMjRBNzQyMDFBNjk3NDIwMTBDMDAwMjE0MDA3OAorOjEwRTVBMDAwMDA0NDEwMjVBRjQyMDFBQzNDMDIxMDAwQUY0MjAxQjg1QworOjEwRTVCMDAwMDNFMDAwMDgwMDAwMDAwMDhGNDcwMDcwOTM0MjAxMTI0MgorOjEwRTVDMDAwOEY4MzAwMDAyN0JERkZGMDMwNDIwMEZGMDAwMjI4ODI0OQorOjEwRTVEMDAwMzA2MjAxMDAwMDAwMzAyMTEwNDAwMDQzMjRBNDAwMDNGOQorOjEwRTVFMDAwMzA2MjQwMDAxMDQwMDAxMDMwNjIyMDAwMDAwNDEwODBCMworOjEwRTVGMDAwMDA1QTEwMjE4QzQzNDAwMDI0QTQwMDA0MDAwNDEwODAyMQorOjEwRTYwMDAwQUZBMzAwMDAwMDVBMTAyMThDNDI0MDAwQUZBMjAwMDRDQQorOjEwRTYxMDAwOTM0MjAxMTYzMDQyMDBGQzAwNUExMDIxOEM0MjQwMDAwNworOjEwRTYyMDAwMEEwMDBGODZBRkEyMDAwODEwNDAwMDJGMDAwMDMwMjEyMgorOjEwRTYzMDAwMDAwNDEwODAwMDVBMTAyMThDNDM0MDAwMjRBNDAwMDRFMAorOjEwRTY0MDAwMDAwNDEwODBBRkEzMDAwMDAwNUExMDIxOEM0MjQwMDA0QgorOjEwRTY1MDAwQUZBMDAwMDhBRkEyMDAwNDhGQTgwMDA4MDAwMDMwMjE3RQorOjEwRTY2MDAwMDAwMDIwMjEyNDBBMDAwODNDMDkwODAwMjUyOTAxMDA5NworOjEwRTY3MDAwMDNBNDEwMjExNDhBMDAwMzAwMDQyQTAwMTEwMDAwMEFEOAorOjEwRTY4MDAwMDAwMDAwMDA5MDQyMDAwMDI0ODQwMDAxMkM4MzAwMEM1NAorOjEwRTY5MDAwMDBBMjEwMjEwMDAyMTA4MDAwNDkxMDIxOEM0MjAwMDBDRAorOjEwRTZBMDAwMTQ2MEZGRjMwMEMyMzAyNjNDMDQwODAwOEM4NDMxMDQ1RgorOjEwRTZCMDAwOEY0MjAwNzAyQzgzMDAyMDEwNjAwMDA5MDA0NzM4MjMyRgorOjEwRTZDMDAwM0MwMzA4MDAyNDYzMzEwODAwMDQxMDgwMDA0MzEwMjEzQgorOjEwRTZEMDAwMjQ4MzAwMDFBQzQ3MDAwMDNDMDEwODAwQUMyMzMxMDQ1NgorOjEwRTZFMDAwQUY4NjAwMEMyNDA2MDAwMTAwQzAxMDIxMDNFMDAwMDhFMgorOjEwRTZGMDAwMjdCRDAwMTAzQzAyMDgwMDhDNDIwMDM4MjdCREZGRDAyNworOjEwRTcwMDAwQUZCNjAwMjhBRkI0MDAyMEFGQjIwMDE4QUZCRjAwMkNFNgorOjEwRTcxMDAwQUZCNTAwMjRBRkIzMDAxQ0FGQjEwMDE0QUZCMDAwMTAxMAorOjEwRTcyMDAwMDAwMDkwMjEzQzE2MDgwMDI2RDYwMDM4MTQ0MDAwMDI1NAorOjEwRTczMDAwMjQ1NEZGRkYwMDAwQTAyMTk3NDIwMTBFOEY4NDAwMDBBNworOjEwRTc0MDAwMzA0MkZGRkYzMDgzNDAwMDEwNjAwMDBBMjQ1MzAwMDQ3MQorOjEwRTc1MDAwM0MwMjAwMjAwMDgyMTAyNDUwNDAwMDA3MzA4MjgwMDBEQworOjEwRTc2MDAwOEY4MjAwMDQyNDAzQkZGRjAwODMxODI0MEEwMDBGRDcwMAorOjEwRTc3MDAwMzQ0MjEwMDAzMDgyODAwMDEwNDAwMDBBM0MwMjAwMjAyOQorOjEwRTc4MDAwMDA4MjEwMjQxMDQwMDAwNzhGODIwMDA0M0MwM0ZGRkYyQQorOjEwRTc5MDAwMzQ2MzdGRkYwMDgzMTgyNDM0NDI4MDAwQUY4MjAwMDQ3QQorOjEwRTdBMDAwQUY4MzAwMDAwRTAwMEY1RTAwMDAwMDAwMTQ0MDAwMDc2MQorOjEwRTdCMDAwMDAwMDAwMDA5NzQzMDExRTk3NDIwMTFDMzA2M0ZGRkZEOQorOjEwRTdDMDAwMDAwMjE0MDAwMDYyMTgyNUFGODMwMDBDOTc0MjAxMEM3MAorOjEwRTdEMDAwOEY0MzQwMDAzMDQ2RkZGRjM0MDJGRkZGMTQ2MjAwMDMwNgorOjEwRTdFMDAwMDAwMDAwMDAwQTAwMEZFRjI0MTIwMDIwOEY0MjQwMDBCQQorOjEwRTdGMDAwMzA0MjAxMDA1NDQwMDAwMTI0MTIwMDEwOEY4NDAwMDBCOAorOjEwRTgwMDAwMzA4MjEwMDA1MDQwMDAxNDM2NTIwMDAxMzA4MjAwMjA0NworOjEwRTgxMDAwMTQ0MDAwMEIzQzAyMTAwMDAwODIxMDI0NTA0MDAwMEVGNworOjEwRTgyMDAwMzY1MjAwMDEzQzAzMEUwMDNDMDIwREZGMDA4MzE4MjQwOQorOjEwRTgzMDAwMzQ0MkZGRkYwMDQzMTAyQjUwNDAwMDA3MzY1MjAwMDFDNgorOjEwRTg0MDAwM0MwMjA4MDA4QzQyMDAyQzI0NDIwMDAxM0MwMTA4MDBEQworOjEwRTg1MDAwQUMyMjAwMkMzNjUyMDAwNTNDMDUwODAwOENBNTAwMzQ4MworOjEwRTg2MDAwNTRBMDAwNDA4Rjg0MDAwMDhGODIwMDEwNTQ0MDAwM0Q2RgorOjEwRTg3MDAwOEY4NDAwMDA4RjgyMDAwNDMwNDI0MDAwNTQ0MDAwMzlGMQorOjEwRTg4MDAwOEY4NDAwMDAzQzAyMUYwMTAwODIxMDI0M0MwMzEwMDAxMgorOjEwRTg5MDAwMTQ0MzAwMzQ4Rjg0MDAwMDMwQzIwMjAwMTQ0MDAwMzI2MAorOjEwRThBMDAwM0MwMjAwMDEzMjY1RkZGRjM2NDYwMDAyOEY0MjAxQjg4QworOjEwRThCMDAwMDQ0MEZGRkUzQzAyMDAwOEFGNDAwMTgwMDM0MjEwMjFFQgorOjEwRThDMDAwOTQ0MjAwNDgzMDQzRkZGRjEwNjAwMDE5QUY4MzAwMDhGNgorOjEwRThEMDAwMjRBMjAwMTIwMDYyMTAyQjEwNDAwMDE2MjQwMjAwMDMzNAorOjEwRThFMDAwOTM0MjAxMjAyNDAzMDAxQUEzNDMwMThCMzA0MjAwRkYwRQorOjEwRThGMDAwMjQ0M0ZGRkU4RjgyMDAwMDMwNDI0MDAwMTA0MDAwMDg5OQorOjEwRTkwMDAwOEY4MjAwMDQ4RjgyMDAwODAwNDMxMDJCMTQ0MDAwMDQwMworOjEwRTkxMDAwOEY4MjAwMDRBNzQzMDE5NDBBMDAxMDNBMzQ0MjAwMDE5OAorOjEwRTkyMDAwMjQwM0ZGRkUwMDQzMTAyNDBBMDAxMDNFQUY4MjAwMDRCRgorOjEwRTkzMDAwMjQwMjAwMDNBMzQyMDE4QjhGODMwMDA0MjQwMkJGRkY0MworOjEwRTk0MDAwMDA2MjE4MjQyNDAyMDAwMkE3NDIwMThDOEY4MjAwMDA3QQorOjEwRTk1MDAwQTc0NTAxOEVBNzQ2MDE4OEE3NDMwMUE2MEEwMDEwRDk0MgorOjEwRTk2MDAwQTc0MjAxOTAzQzAyMDAwMTAwODIxMDI0MTA0MDAwMEJERAorOjEwRTk3MDAwM0MwMjEwMDAzQzAyMDgwMDhDNDIwMEQ4OTc0NTAxMEU3MgorOjEwRTk4MDAwMjQwNDAwODAyNDQyMDAwMTMwQTVGRkZGM0MwMTA4MDA2MAorOjEwRTk5MDAwQUMyMjAwRDgwQTAwMTBFMjI0MDYwMDAzMDA4MjEwMjRGMgorOjEwRTlBMDAwMTA0MDAwNDEwMDAwMDAwMDNDMDIwODAwOEM0MjAwMzA5MgorOjEwRTlCMDAwMTA0MDAwMEM4RjgyMDAwNDMwNDI0MDAwMTA0MDAwMDlEQgorOjEwRTlDMDAwM0MwMzBGMDAwMDgzMTgyNDNDMDIwMTAwMDA0MzEwMkI3RAorOjEwRTlEMDAwMTQ0MDAwMDQzNjQ2MDAwMjMyNjVGRkZGMEEwMDEwRTJEMAorOjEwRTlFMDAwMjQwNDAwODAxMEEwMDAwRDMwODIwMTAwMTA0MDAwMEJCNAorOjEwRTlGMDAwM0MwMjBGMDAwMDgyMTAyNDNDMDMwMjAwMTA0MzAwMDc3OQorOjEwRUEwMDAwOEY4MjAwMEMwMDU0MTAyNDAwNTYxMDIxOTA0MjAwMDQwNAorOjEwRUExMDAwMjQ0MjAwMDQwQTAwMTA5NzAwMDIyMUMwMDAwMDAwMDBGOAorOjEwRUEyMDAwOEY4NjAwMDAzQzA1MDgwMDhDQTUwMEQwMDAwNjE2MDI2OQorOjEwRUEzMDAwMzA1MDAwMEYzOEEyMDAwMTJDNDIwMDAxMkUwMzAwMENDMAorOjEwRUE0MDAwMDA0MzEwMjQxNDQwMDAxNTAwMTAyMUMwMjYwMkZGRkNEMgorOjEwRUE1MDAwMkM0MjAwMDQ1NDQwMDAxMTAwMDAyMDIxMzhBMjAwMDI4MgorOjEwRUE2MDAwMkM0MjAwMDEwMDQzMTAyNDEwNDAwMDAzMDAwNjEyNDIxMworOjEwRUE3MDAwMEEwMDEwOTcwMDAwMjAyMTAwMTAxODJCMDA0MzEwMjREQQorOjEwRUE4MDAwNTA0MDAwMDYwMDEwMjFDMDAwMDAyMDIxMzI2NUZGRkYyOQorOjEwRUE5MDAwMEUwMDBGMTQzMjQ2RkZGQjAwMTAyMUMwMzI2NUZGRkY0RAorOjEwRUFBMDAwMEEwMDEwRTIzNjQ2MDAwMjhGNDI0MDAwM0MxMTA4MDA4NgorOjEwRUFCMDAwOEUzMTAwMjQzMDQyMDEwMDEwNDAwMDNFMzIyMjAwMDExRAorOjEwRUFDMDAwMDIyMDgwMjExMEEwMDAxNDMyNTUwMDA0MzA4MjAxMDA4MQorOjEwRUFEMDAwMTA0MDAwMTIyNDAyMDAwMTNDMDIwRjAwMDA4MjEwMjRBQQorOjEwRUFFMDAwM0MwMzAyMDAxMDQzMDAwQzhGODIwMDBDMDI0MDMwMjFENgorOjEwRUFGMDAwMzI2NUZGRkYwMDU0MTAyNDAwNTYxMDIxOTA0NDAwMDQ5QQorOjEwRUIwMDAwMzI1MkZGRkIyNDg0MDAwNDBFMDAwRjE0MDAwNDIxQzBDNQorOjEwRUIxMDAwMjQwMkZGRkUwMjIyODAyNDI0MDIwMDAxMTYwMjAwMDdDNAorOjEwRUIyMDAwMzIwMjAwMDEzMjQyMDAwNDUwNDAwMDAxMzY1MjAwMDIxRAorOjEwRUIzMDAwMzI2NUZGRkYwQTAwMTBFMTAyNDAzMDIxMTA0MDAwMDc1QgorOjEwRUI0MDAwMzIwMjAwMDQwMjQwMzAyMTAwMDAyMDIxMEUwMDBGMTQ4OAorOjEwRUI1MDAwMzI2NUZGRkYzMjUyRkZGQjMyMDIwMDA0MTA0MDAwMDcxMworOjEwRUI2MDAwOEY4MjAwMDAzMDQyMDgwMDEwNDAwMDA0MzI2NUZGRkYzMQorOjEwRUI3MDAwMDI0MDMwMjEwRTAwMEYxNDI0MDQwMTAwMTZBMDAwMTVERAorOjEwRUI4MDAwOEZCRjAwMkMyNzQzMDE4MDhGNDIwMUI4MDQ0MEZGRkU1NQorOjEwRUI5MDAwMjQwMjIwMDBBNDYyMDAwODI0MDIwMDAyQTA2MjAwMEJFQworOjEwRUJBMDAwQTQ2MDAwMTAzQzAyMTAwMEFGNDIwMUI4MEEwMDEwRTU1QQorOjEwRUJCMDAwOEZCRjAwMkMxMDQwMDAwNzhGQkYwMDJDMzI2NUZGRkY3NQorOjEwRUJDMDAwMzY0NjAwMDIwMDAwMjAyMTBFMDAwRjE0MDAwMDAwMDA1NQorOjEwRUJEMDAwOEZCRjAwMkM4RkI2MDAyODhGQjUwMDI0OEZCNDAwMjA4MworOjEwRUJFMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBDQgorOjEwRUJGMDAwMDAwMDEwMjEwM0UwMDAwODI3QkQwMDMwMjdCREZGQzgzQQorOjEwRUMwMDAwQUZCMDAwMTAzQzA0NjAwQ0FGQkYwMDMwQUZCNzAwMkNCOQorOjEwRUMxMDAwQUZCNjAwMjhBRkI1MDAyNEFGQjQwMDIwQUZCMzAwMUNERQorOjEwRUMyMDAwQUZCMjAwMThBRkIxMDAxNDhDODI1MDAwMjQwM0ZGN0ZGNAorOjEwRUMzMDAwM0MxQTgwMDAwMDQzMTAyNDM0NDIzODBDQUM4MjUwMDA0RgorOjEwRUM0MDAwMjQwMjAwMDMzQzEwNjAwMEFGNDIwMDA4OEUwMjA4MDg1NgorOjEwRUM1MDAwM0MxQjgwMDgzQzAxMDgwMEFDMjAwMDIwMzA0MkZGRjA0MworOjEwRUM2MDAwMzg0MjAwMTAyQzQyMDAwMTBFMDAxQzQ2QUY4MjAwMUNFRQorOjEwRUM3MDAwM0MwNEZGRkYzQzAyMDQwMDM0ODMwODA2MzQ0MjAwMENDRAorOjEwRUM4MDAwQUUwMjE5NDhBRTAzMTk0QzNDMDU2MDE2OEUwMjE5ODA3RAorOjEwRUM5MDAwOENBMzAwMDAzNDQyMDIwMDAwNjQxODI0QUUwMjE5ODBFNAorOjEwRUNBMDAwM0MwMjUzNTMxNDYyMDAwMzM0QTQ3QzAwOENBMjAwMDQ4MQorOjEwRUNCMDAwMDA1MDIwMjE4QzgyMDA3QzhDODMwMDc4QUY4MjAwMTg2OQorOjEwRUNDMDAwQUY4MzAwMTQzQzAyODAwMDM0NDIwMDcwOEM0MzAwMDA4QgorOjEwRUNEMDAwMDA0MDM4MjFBRjgzMDAyMDAwNjAzMDIxOENFODAwMDAyNAorOjEwRUNFMDAwM0MwNTA4MDA4Q0E1MDBGQzNDMDQwODAwOEM4NDAwRjg1RQorOjEwRUNGMDAwMDEwNjMwMjMwMDAwMTAyMTAwQTYyODIxMDBBNjMwMkI5OQorOjEwRUQwMDAwMDA4MjIwMjEwMDg2MjAyMTNDMDEwODAwQUMyNTAwRkM2NworOjEwRUQxMDAwM0MwMTA4MDBBQzI0MDBGODhGNTYwMDAwMzJDMjAwMDMwQQorOjEwRUQyMDAwMTA0MEZGRUUwMTAwMzAyMThDRTYwMDAwM0MwNTA4MDA5OQorOjEwRUQzMDAwOENBNTAwRkMzQzA0MDgwMDhDODQwMEY4MDBDODMwMjMzQgorOjEwRUQ0MDAwMDBBNjI4MjEwMDAwMTAyMTAwQTYzMDJCMDA4MjIwMjFERgorOjEwRUQ1MDAwMDA4NjIwMjEzMkM3MDAwMTNDMDEwODAwQUMyNTAwRkNFMAorOjEwRUQ2MDAwQUY4ODAwMjAzQzAxMDgwMEFDMjQwMEY4MTBFMDAxNkJFMworOjEwRUQ3MDAwMzJDMjAwMDI4RjQzMDEyODNDMDIwMDA4MDM0MjEwMjFFNgorOjEwRUQ4MDAwQUY0MzAwMjA4RjQzMDEwNDhGNDQwMTAwOTQ0MjAwNDhBOAorOjEwRUQ5MDAwQUY4MzAwMDBBRjg0MDAwNDMwNDJGRkZGMEUwMDBGMEU2RgorOjEwRURBMDAwQUY4MjAwMDgzQzAyMDgwMDhDNDIwMEMwMTA0MDAwMDhGRQorOjEwRURCMDAwOEY4NDAwMDAzQzAyMDgwMDhDNDIwMEM0MjQ0MjAwMDEwMQorOjEwRURDMDAwM0MwMTA4MDBBQzIyMDBDNDBBMDAxMkFGMDAwMDAwMDBBMQorOjEwRUREMDAwM0MwMjAwMTAwMDgyMTAyNDE0NDAwMTM1OEY4MzAwMDQ4RgorOjEwRURFMDAwM0MwMjA4MDA4QzQyMDAyMDNDMDMwODAwOEM2MzAwMzg4MQorOjEwRURGMDAwMDAwMDkwMjEyNDQyMDAwMTNDMDEwODAwQUMyMjAwMjBDOAorOjEwRUUwMDAwM0MxNzA4MDAyNkY3MDAzODE0NjAwMDAyMjQ3NEZGRkY0NgorOjEwRUUxMDAwMDAwMEEwMjE5NzQyMDEwRTMwODM0MDAwMzA0MkZGRkZFNgorOjEwRUUyMDAwMTA2MDAwMEEyNDUzMDAwNDNDMDIwMDIwMDA4MjEwMjREOQorOjEwRUUzMDAwNTA0MDAwMDczMDgyODAwMDhGODIwMDA0MjQwM0JGRkYwRgorOjEwRUU0MDAwMDA4MzE4MjQwQTAwMTE4RDM0NDIxMDAwMzA4MjgwMDBBMworOjEwRUU1MDAwMTA0MDAwMEEzQzAyMDAyMDAwODIxMDI0MTA0MDAwMDdFRAorOjEwRUU2MDAwOEY4MjAwMDQzQzAzRkZGRjM0NjM3RkZGMDA4MzE4MjQ3QworOjEwRUU3MDAwMzQ0MjgwMDBBRjgyMDAwNEFGODMwMDAwMEUwMDBGNUVCQQorOjEwRUU4MDAwMDAwMDAwMDAxNDQwMDAwNzAwMDAwMDAwOTc0MzAxMUUyRQorOjEwRUU5MDAwOTc0MjAxMUMzMDYzRkZGRjAwMDIxNDAwMDA2MjE4MjUzNgorOjEwRUVBMDAwQUY4MzAwMEM5NzQyMDEwQzhGNDM0MDAwMzA0NkZGRkZCOAorOjEwRUVCMDAwMzQwMkZGRkYxNDYyMDAwMzAwMDAwMDAwMEEwMDExQTVFNQorOjEwRUVDMDAwMjQxMjAwMjA4RjQyNDAwMDMwNDIwMTAwNTQ0MDAwMDFEMworOjEwRUVEMDAwMjQxMjAwMTA4Rjg0MDAwMDMwODIxMDAwNTA0MDAwMTQ3MworOjEwRUVFMDAwMzY1MjAwMDEzMDgyMDAyMDE0NDAwMDBCM0MwMjEwMDAxQQorOjEwRUVGMDAwMDA4MjEwMjQ1MDQwMDAwRTM2NTIwMDAxM0MwMzBFMDBFOAorOjEwRUYwMDAwM0MwMjBERkYwMDgzMTgyNDM0NDJGRkZGMDA0MzEwMkIwNgorOjEwRUYxMDAwNTA0MDAwMDczNjUyMDAwMTNDMDIwODAwOEM0MjAwMkM5MQorOjEwRUYyMDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDJDMzY1MjAwMDVBRQorOjEwRUYzMDAwM0MwNTA4MDA4Q0E1MDAzNDU0QTAwMDQwOEY4NDAwMDBEQworOjEwRUY0MDAwOEY4MjAwMTA1NDQwMDAzRDhGODQwMDAwOEY4MjAwMDRBNworOjEwRUY1MDAwMzA0MjQwMDA1NDQwMDAzOThGODQwMDAwM0MwMjFGMDFDMQorOjEwRUY2MDAwMDA4MjEwMjQzQzAzMTAwMDE0NDMwMDM0OEY4NDAwMDBGRQorOjEwRUY3MDAwMzBDMjAyMDAxNDQwMDAzMjNDMDIwMDAxMzI2NUZGRkY0MworOjEwRUY4MDAwMzY0NjAwMDI4RjQyMDFCODA0NDBGRkZFM0MwMjAwMDhGMgorOjEwRUY5MDAwQUY0MDAxODAwMzQyMTAyMTk0NDIwMDQ4MzA0M0ZGRkZGQworOjEwRUZBMDAwMTA2MDAwMTlBRjgzMDAwODI0QTIwMDEyMDA2MjEwMkIyOQorOjEwRUZCMDAwMTA0MDAwMTYyNDAyMDAwMzkzNDIwMTIwMjQwMzAwMUE4QgorOjEwRUZDMDAwQTM0MzAxOEIzMDQyMDBGRjI0NDNGRkZFOEY4MjAwMDBFOQorOjEwRUZEMDAwMzA0MjQwMDAxMDQwMDAwODhGODIwMDA0OEY4MjAwMDhGOQorOjEwRUZFMDAwMDA0MzEwMkIxNDQwMDAwNDhGODIwMDA0QTc0MzAxOTRCNworOjEwRUZGMDAwMEEwMDExRjAzNDQyMDAwMTI0MDNGRkZFMDA0MzEwMjRGNAorOjEwRjAwMDAwMEEwMDExRjRBRjgyMDAwNDI0MDIwMDAzQTM0MjAxOEIyMgorOjEwRjAxMDAwOEY4MzAwMDQyNDAyQkZGRjAwNjIxODI0MjQwMjAwMDIzMAorOjEwRjAyMDAwQTc0MjAxOEM4RjgyMDAwMEE3NDUwMThFQTc0NjAxODg2OAorOjEwRjAzMDAwQTc0MzAxQTYwQTAwMTI4RkE3NDIwMTkwM0MwMjAwMDFEQgorOjEwRjA0MDAwMDA4MjEwMjQ1MDQwMDAwQjNDMDIxMDAwM0MwMjA4MDBEQgorOjEwRjA1MDAwOEM0MjAwRDg5NzQ1MDEwRTI0MDQwMDgwMjQ0MjAwMDExMAorOjEwRjA2MDAwMzBBNUZGRkYzQzAxMDgwMEFDMjIwMEQ4MEEwMDEyOTgyRQorOjEwRjA3MDAwMjQwNjAwMDMwMDgyMTAyNDEwNDAwMDQxMDAwMDAwMDAxQworOjEwRjA4MDAwM0MwMjA4MDA4QzQyMDAzMDEwNDAwMDBDOEY4MjAwMDRDQgorOjEwRjA5MDAwMzA0MjQwMDAxMDQwMDAwOTNDMDMwRjAwMDA4MzE4MjQ1OAorOjEwRjBBMDAwM0MwMjAxMDAwMDQzMTAyQjE0NDAwMDA0MzY0NjAwMDJDRAorOjEwRjBCMDAwMzI2NUZGRkYwQTAwMTI5ODI0MDQwMDgwMTBBMDAwMERBMgorOjEwRjBDMDAwMzA4MjAxMDAxMDQwMDAwQjNDMDIwRjAwMDA4MjEwMjQyRgorOjEwRjBEMDAwM0MwMzAyMDAxMDQzMDAwNzhGODIwMDBDMDA1NDEwMjRGMAorOjEwRjBFMDAwMDA1NzEwMjE5MDQyMDAwNDI0NDIwMDA0MEEwMDEyNERFRgorOjEwRjBGMDAwMDAwMjIxQzAwMDAwMDAwMDhGODYwMDAwM0MwNTA4MDBDRgorOjEwRjEwMDAwOENBNTAwRDAwMDA2MTYwMjMwNTAwMDBGMzhBMjAwMDE3NgorOjEwRjExMDAwMkM0MjAwMDEyRTAzMDAwQzAwNDMxMDI0MTQ0MDAwMTU2MworOjEwRjEyMDAwMDAxMDIxQzAyNjAyRkZGQzJDNDIwMDA0NTQ0MDAwMTFCNAorOjEwRjEzMDAwMDAwMDIwMjEzOEEyMDAwMjJDNDIwMDAxMDA0MzEwMjRDQworOjEwRjE0MDAwNTA0MDAwMDMwMDA2MTI0MjBBMDAxMjREMDAwMDIwMjEyOAorOjEwRjE1MDAwMDAxMDE4MkIwMDQzMTAyNDUwNDAwMDA2MDAxMDIxQzA1RQorOjEwRjE2MDAwMDAwMDIwMjEzMjY1RkZGRjBFMDAwRjE0MzI0NkZGRkIyNgorOjEwRjE3MDAwMDAxMDIxQzAzMjY1RkZGRjBBMDAxMjk4MzY0NjAwMDJENworOjEwRjE4MDAwOEY0MjQwMDAzQzExMDgwMDhFMzEwMDI0MzA0MjAxMDBDMworOjEwRjE5MDAwMTA0MDAwM0UzMjIyMDAwMTAyMjA4MDIxMTBBMDAwMTQwNQorOjEwRjFBMDAwMzI1NTAwMDQzMDgyMDEwMDEwNDAwMDEyMjQwMjAwMDE5OAorOjEwRjFCMDAwM0MwMjBGMDAwMDgyMTAyNDNDMDMwMjAwMTA0MzAwMENBQworOjEwRjFDMDAwOEY4MjAwMEMwMjQwMzAyMTMyNjVGRkZGMDA1NDEwMjQ3MgorOjEwRjFEMDAwMDA1NzEwMjE5MDQ0MDAwNDMyNTJGRkZCMjQ4NDAwMDRBNQorOjEwRjFFMDAwMEUwMDBGMTQwMDA0MjFDMDI0MDJGRkZFMDIyMjgwMjQxRQorOjEwRjFGMDAwMjQwMjAwMDExNjAyMDAwNzMyMDIwMDAxMzI0MjAwMDQxQworOjEwRjIwMDAwNTA0MDAwMDEzNjUyMDAwMjMyNjVGRkZGMEEwMDEyOTc5QgorOjEwRjIxMDAwMDI0MDMwMjExMDQwMDAwNzMyMDIwMDA0MDI0MDMwMjEzOQorOjEwRjIyMDAwMDAwMDIwMjEwRTAwMEYxNDMyNjVGRkZGMzI1MkZGRkI1OQorOjEwRjIzMDAwMzIwMjAwMDQxMDQwMDAwNzhGODIwMDAwMzA0MjA4MDBCNAorOjEwRjI0MDAwMTA0MDAwMDQzMjY1RkZGRjAyNDAzMDIxMEUwMDBGMTQxMQorOjEwRjI1MDAwMjQwNDAxMDAxNkEwMDAyRTNDMDI0MDAwMjc0MzAxODAzOAorOjEwRjI2MDAwOEY0MjAxQjgwNDQwRkZGRTI0MDIyMDAwQTQ2MjAwMDg3RgorOjEwRjI3MDAwMjQwMjAwMDJBMDYyMDAwQkE0NjAwMDEwM0MwMjEwMDBGNworOjEwRjI4MDAwQUY0MjAxQjgwQTAwMTJCNDNDMDI0MDAwNTA0MDAwMjBENgorOjEwRjI5MDAwM0MwMjQwMDAzMjY1RkZGRjM2NDYwMDAyMDAwMDIwMjE5QworOjEwRjJBMDAwMEUwMDBGMTQwMDAwMDAwMDBBMDAxMkI0M0MwMjQwMDBERgorOjEwRjJCMDAwMjQwMkJGRkYwMDYyMTAyNDEwNDAwMDA4MDAwMDAwMDA3QworOjEwRjJDMDAwMjQwMjg3RkYwMDYyMTAyNDE0NDAwMDA4M0MwMjAwNjAwMgorOjEwRjJEMDAwMDA4MjEwMjQxMDQwMDAwNTAwMDAwMDAwMEUwMDBEMjZFMgorOjEwRjJFMDAwMDAwMDAwMDAwQTAwMTJBRDAwMDAwMDAwMEUwMDEyRjgzRAorOjEwRjJGMDAwMDAwMDAwMDAxMDQwMDAwNjNDMDI0MDAwOEY0MzAxMjQ0MworOjEwRjMwMDAwM0MwMjYwMjBBQzQzMDAxNDAwMDAwMDAwM0MwMjQwMDBCRQorOjEwRjMxMDAwQUY0MjAxMzgwMDAwMDAwMDMyQzIwMDAyMTA0MEZFNkExNQorOjEwRjMyMDAwM0MwMjgwMDA4RjQyMDE0MDNDMDQ0MDAwQUY0MjAwMjA3QworOjEwRjMzMDAwOEY0MzAxNDgzQzAyNzAwMDAwNjIxODI0MTA2NDAwMkRDNQorOjEwRjM0MDAwMDAwMDAwMDAwMDgzMTAyQjE0NDAwMDA2M0MwMjYwMDAwNworOjEwRjM1MDAwM0MwMjIwMDAxMDYyMDAwNzNDMDI0MDAwMEEwMDEyRjQ0OAorOjEwRjM2MDAwMDAwMDAwMDAxMDYyMDAyNzAwMDAwMDAwMEEwMDEyRjRGNAorOjEwRjM3MDAwM0MwMjQwMDA4RjQyMDE0ODI0MDMwMDA0MDAwMjE0MDJCMgorOjEwRjM4MDAwMzA0MjAwRkYxNDQzMDAwQjI3NDQwMTgwOEY0MzAxNDBBQgorOjEwRjM5MDAwOEY0MjAxQjgwNDQwRkZGRTI0MDIwMDFDQUM4MzAwMDAzMQorOjEwRjNBMDAwQTA4MjAwMEIzQzAyMTAwMEFGNDIwMUI4MEEwMDEyRjQyOAorOjEwRjNCMDAwM0MwMjQwMDA4RjQyMDFCODA0NDBGRkZFMDAwMDAwMDAwNAorOjEwRjNDMDAwOEY0MjAxNDgwMDAyMTQwMkE0ODIwMDA4MjQwMjAwMDJCNQorOjEwRjNEMDAwQTA4MjAwMEI4RjQyMDE0OEE0ODIwMDEwOEY0MjAxNDQ5QQorOjEwRjNFMDAwQUM4MjAwMjQzQzAyMTAwMEFGNDIwMUI4MEEwMDEyRjRDMworOjEwRjNGMDAwM0MwMjQwMDAwRTAwMTMxQzAwMDAwMDAwMEEwMDEyRjQ0MgorOjEwRjQwMDAwM0MwMjQwMDAwRTAwMUM1MzAwMDAwMDAwM0MwMjQwMDA4MworOjEwRjQxMDAwQUY0MjAxNzgwMDAwMDAwMDBBMDAxMTIyM0MwMjgwMDA4NworOjEwRjQyMDAwOEY0MjAxMDAzMDQyMDAzRTE0NDAwMDExMjQwMjAwMDFDRQorOjEwRjQzMDAwQUY0MDAwNDg4RjQyMDEwMDMwNDIwN0MwMTA0MDAwMDUzNQorOjEwRjQ0MDAwMDAwMDAwMDBBRjQwMDA0Q0FGNDAwMDUwMDNFMDAwMDg1NworOjEwRjQ1MDAwMjQwMjAwMDFBRjQwMDA1NEFGNDAwMDQwOEY0MjAxMDA0MQorOjEwRjQ2MDAwMzA0MjM4MDA1NDQwMDAwMUFGNDAwMDQ0MjQwMjAwMDEwMworOjEwRjQ3MDAwMDNFMDAwMDgwMDAwMDAwMDNDMDI5MDAwMzQ0MjAwMDE1QworOjEwRjQ4MDAwMDA4MjIwMjVBRjQ0MDAyMDhGNDIwMDIwMDQ0MEZGRkU3MAorOjEwRjQ5MDAwMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwM0MwMjgwMDBDMworOjEwRjRBMDAwMzQ0MjAwMDEwMDgyMjAyNTAzRTAwMDA4QUY0NDAwMjAyMAorOjEwRjRCMDAwMjdCREZGRTBBRkIyMDAxOEFGQkYwMDFDQUZCMTAwMTQxMgorOjEwRjRDMDAwQUZCMDAwMTA4RjUwMDE0MDhGNTEwMTQ4M0MwMjgwMDBDNgorOjEwRjREMDAwMDAxMTk0MDIwMjIyMjAyNDMyNDMwMEZGMjQwMjAwMEU3NQorOjEwRjRFMDAwMTA2MjAwOEEyODYyMDAwRjEwNDAwMDEyMjg2MjAwMzc2NAorOjEwRjRGMDAwMjQwMjAwMDYxMDYyMDAzQjI4NjIwMDA3MTA0MDAwMDc0QgorOjEwRjUwMDAwMjQwMjAwMDkxMDYwMDAxQTI0MDIwMDAxMTA2MjAwMjU4NAorOjEwRjUxMDAwMDAwMDAwMDAwQTAwMTNEMTAwMDAwMDAwMTA2MjAwN0IxMAorOjEwRjUyMDAwMjQwMjAwMEIxMDYyMDA1QjMyMjJGRkZGMEEwMDEzRDE5RAorOjEwRjUzMDAwMDAwMDAwMDAxMDQwMDAwODI0MDIwMDM4Mjg2MjAwMzU1NgorOjEwRjU0MDAwMTA0MDAwODAyNDAyMDAxRjEwNjIwMDdFMDAwMDAwMDBCNgorOjEwRjU1MDAwMEEwMDEzRDEwMDAwMDAwMDEwNjIwMDdBMjQwMjAwODAyQgorOjEwRjU2MDAwMTA2MjAwNDIwMDAwMDAwMDBBMDAxM0QxMDAwMDAwMDBGOQorOjEwRjU3MDAwOEY0MjAxQjgwNDQwRkZGRTI0MDIwMDAxQUY1MDAxODAxOQorOjEwRjU4MDAwQUY0MDAxODRBNzUyMDE4OEEzNDIwMThBMjQwMjAwMDJFRAorOjEwRjU5MDAwQTM0MjAxOEJBNzUxMDE5MDhGNDIwMTQ0MEEwMDEzQ0M3MgorOjEwRjVBMDAwQUY0MjAxQTQxMDgwMDAwQTI0MDIwMDAyM0MwMTA4MDBCRQorOjEwRjVCMDAwQTAyMjc1RDgzQzAxMDgwMEFDMzA3NUUwOEY0MjAxNDRCMAorOjEwRjVDMDAwM0MwMTA4MDBBQzIyNzVEQzBBMDAxM0QzOEZCRjAwMUM3RAorOjEwRjVEMDAwOEY0MjAxQjgwNDQwRkZGRTI0MDIwMDAyMEEwMDEzQjY2NQorOjEwRjVFMDAwMDAwMDAwMDA4RjQyMDFCODA0NDBGRkZFMDAwMDAwMDA1MAorOjEwRjVGMDAwQUY1MDAxODAzQzAyMDgwMDkwNDI3NUQ4MTA0MDAwMDNEMworOjEwRjYwMDAwMDAwMDE4MjEzQzAzMDgwMDhDNjM3NUUwQUY0MzAxODRCRgorOjEwRjYxMDAwQTc1MjAxODgzQzAyMDgwMDkwNDI3NUQ4MDAwMDE4MjFDQQorOjEwRjYyMDAwMzQ0MjAwMDFBMzQyMDE4QTI0MDIwMDAyQTM0MjAxOEI1QQorOjEwRjYzMDAwQTc1MTAxOTA4RjQyMDE0NEFGNDIwMUE0M0MwMjA4MDA0RgorOjEwRjY0MDAwOTA0Mjc1RDgxMDQwMDAwMzNDMDIxMDAwM0MwMzA4MDBCMworOjEwRjY1MDAwOEM2Mzc1RENBRjQzMDFBOEFGNDIwMUI4M0MwMTA4MDBFMAorOjEwRjY2MDAwQTAyMDc1RDgwQTAwMTNEMzhGQkYwMDFDOEY0MjAxQjhBOQorOjEwRjY3MDAwMDQ0MEZGRkUyNDAyMDAwMkEzNDIwMThCQTc1MjAxODgyRQorOjEwRjY4MDAwQTc1MTAxOTA4RjQyMDE0NEE3NDIwMTkyMEEwMDEzQ0U3NAorOjEwRjY5MDAwM0MwMjEwMDAxNDQwMDAxRDAwMDAwMDAwOTM2MjAwMDVCMQorOjEwRjZBMDAwMzA0MjAwMDQxNDQwMDAzNzAwMDAwMDAwMEUwMDEzMEUyQQorOjEwRjZCMDAwMDIwMDIwMjE5MzYyMDAwNTAyMDAyMDIxMzQ0MjAwMDQ1MAorOjEwRjZDMDAwMEUwMDEzMTdBMzYyMDAwNTkzNjIwMDA1MzA0MjAwMDQ4OAorOjEwRjZEMDAwMTQ0MDAwMDIwMDAwMDAwMDAwMDAwMDBEOTM2MjAwMDBEMgorOjEwRjZFMDAwMjQwMzAwMjAzMDQyMDBGRjE0NDMwMDA4MDAwMDAwMDAwMworOjEwRjZGMDAwOEY0MjAxQjgwNDQwRkZGRTI0MDIwMDA1QUY1MDAxODA5NAorOjEwRjcwMDAwQTM0MjAxOEIzQzAyMTAwMEFGNDIwMUI4OEY0MjAxQjgwNgorOjEwRjcxMDAwMDQ0MEZGRkUyNDAyMDAwMkFGNDAwMTgwQUY1MDAxODQ4QworOjEwRjcyMDAwQTc1MjAxODhBMzQyMDE4QUEzNDIwMThCQTc1MTAxOTBFRAorOjEwRjczMDAwQUY0MDAxQTQ4RjQyMDE0NEFGNDIwMUE4MEEwMDEzQ0U5QQorOjEwRjc0MDAwM0MwMjEwMDA4RjQyMDFCODA0NDBGRkZFMjQwMjAwMDE3OQorOjEwRjc1MDAwQUY1MDAxODBBRjQwMDE4NEE3NTIwMTg4QTM0MjAxOEFDMworOjEwRjc2MDAwMjQwMjAwMDJBMzQyMDE4QkE3NTEwMTkwQUY0MDAxQTRFMworOjEwRjc3MDAwQUY0MDAxQTgzQzAyMTAwMEFGNDIwMUI4MEEwMDEzRDMwOQorOjEwRjc4MDAwOEZCRjAwMUMwMDAwMDAwRDhGQkYwMDFDOEZCMjAwMTgzRgorOjEwRjc5MDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjBENworOjEwRjdBMDAwMjdCREZGRThBRkJGMDAxMDBFMDAwRjBFMDAwMDAwMDBFNQorOjEwRjdCMDAwQUY0MDAxODA4RkJGMDAxMDAwMDAyMDIxMEEwMDBGQUQ3NAorOjEwRjdDMDAwMjdCRDAwMTgzMDg0RkZGRjMwQTVGRkZGMDAwMDE4MjE3RgorOjEwRjdEMDAwMTA4MDAwMDcwMDAwMDAwMDMwODIwMDAxMTA0MDAwMDI4RAorOjEwRjdFMDAwMDAwNDIwNDIwMDY1MTgyMTBBMDAxM0U0MDAwNTI4NDBBNworOjEwRjdGMDAwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA2MjRDNkZGRkZDRgorOjEwRjgwMDAwOENBMjAwMDAyNEE1MDAwNEFDODIwMDAwMEEwMDEzRUVDNAorOjEwRjgxMDAwMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMTBBMDAwMDg5OQorOjEwRjgyMDAwMjRBM0ZGRkZBQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDBFMQorOjEwRjgzMDAwMjQwMkZGRkYyNDYzRkZGRjE0NjJGRkZBMjQ4NDAwMDQwNAorOjEwRjg0MDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkU4QUZCRjAwMTQ4MAorOjEwRjg1MDAwQUZCMDAwMTAwRTAwMTMwRTAwODA4MDIxOTM2MjAwN0Q3NworOjEwRjg2MDAwMDIwMDIwMjEzNDQyMDAyMDBFMDAxMzE3QTM2MjAwN0QwNQorOjEwRjg3MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwMEEwMDBDOUJFMworOjEwRjg4MDAwMjdCRDAwMTgzMDgzMDBGRjMwQTUwMEZGMzBDNjAwRkYwMQorOjEwRjg5MDAwMjc0NzAxODA4RjQyMDFCODA0NDBGRkZFMDAwMDAwMDBBRQorOjEwRjhBMDAwOEY0MjAxMjgzNDYzNDAwMEFDRTIwMDAwMjQwMjAwMDFEMgorOjEwRjhCMDAwQUNFMDAwMDRBNEUzMDAwOEEwRTIwMDBBMjQwMjAwMDI3NQorOjEwRjhDMDAwQTBFMjAwMEIzQzAyMTAwMEE0RTUwMDEwQUNFMDAwMjQxNAorOjEwRjhEMDAwQUNFMDAwMjhBNEU2MDAxMjAzRTAwMDA4QUY0MjAxQjg0MworOjEwRjhFMDAwMjdCREZGRThBRkJGMDAxMDkzNjIwMDNGMjQwMzAwMTI2MgorOjEwRjhGMDAwMzA0MjAwRkYxMDQzMDAwRDAwODAzMDIxOEY2MjAwNDQzMQorOjEwRjkwMDAwMDA4MjEwMjMwNDQwMDAwQThGQkYwMDEwOEY2MjAwNDg1RAorOjEwRjkxMDAwMjQwNDAwMzkwMDAwMjgyMTAwQzIxMDIzMDQ0MTAwMDRGRgorOjEwRjkyMDAwMjQwNjAwMTIwRTAwMTQxMTAwMDAwMDAwOEZCRjAwMTAwQQorOjEwRjkzMDAwMjQwMjAwMDEwM0UwMDAwODI3QkQwMDE4MjdCREZGQzgwRQorOjEwRjk0MDAwQUZCMTAwMkMwMEEwODgyMUFGQjIwMDMwMjdBNTAwMTA3NQorOjEwRjk1MDAwMDA4MDkwMjEwMjIwMjAyMUFGQkYwMDM0QUZCMDAwMjhFQQorOjEwRjk2MDAwMEUwMDBDQTRBRkEwMDAxMDEwNDAwMDA5MDI0MDIwMjE5RQorOjEwRjk3MDAwOEUyMjAwMDhBRjYyMDA4NDBFMDAxNDAyQUY2MDAwNDBDNworOjEwRjk4MDAwMjQwNDAwMzgyNDA1MDA4RDBBMDAxNEREMjQwNjAwMTIyQQorOjEwRjk5MDAwOTM2MjAwM0UzMDQyMDAwODEwNDAwMDBGOEZBMjAwMTAxQQorOjEwRjlBMDAwMzA0MjAxMDAxMDQwMDAwNzhGQTMwMDE0OEY2MjAwNjBGNgorOjEwRjlCMDAwMDA2MjEwMjMwNDQzMDAwOEFGNjMwMDYwMEEwMDE0NjY2RAorOjEwRjlDMDAwMDAwMDAwMDBBRjYwMDA2MDkzNjIwMDNFMjQwM0ZGRjc3OAorOjEwRjlEMDAwMDA0MzEwMjRBMzYyMDAzRTkzNjIwMDNFMzA0MjAwMDhDMAorOjEwRjlFMDAwMTQ0MDAwMDIyNDA2MDAwMzAwMDAzMDIxOTM2MjAwMzQxQQorOjEwRjlGMDAwOTM2MzAwMzc4RjY0MDA4NDMwNDIwMEZGMzA2MzAwRkY2MAorOjEwRkEwMDAwMDA2NjE4MjEwMDAzMTg4MDAwNDMyODIxMDBBNDIwMkI0MQorOjEwRkExMDAwMTA4MDAwMEIwMDAwMDAwMDk3NjMwMDNDOEY2MjAwODRBMAorOjEwRkEyMDAwMzA2M0ZGRkYwMDQ1MTAyMzAwNjIxODJCMTQ2MDAwMDRCMAorOjEwRkEzMDAwMDAwMDAwMDA4RjYyMDA4NDBBMDAxNDgyMDA0NTgwMjNDOQorOjEwRkE0MDAwOTc2MjAwM0MzMDUwRkZGRjhGQTMwMDEwMzA2MjAwMDQyQgorOjEwRkE1MDAwMTA0MDAwMDQwMDA2Mjg4MDhGQTIwMDFDMEEwMDE0OEFBRgorOjEwRkE2MDAwMDIwMjEwMkIyRTAyMDIxODUwNDAwMDAzMjQwMjAyMTgzQQorOjEwRkE3MDAwMEEwMDE0OTMwMjA1MTAyMzMwNjMwMDA0MTA2MDAwMDM5MQorOjEwRkE4MDAwMDA0NTEwMjM4RkEyMDAxQzAwNDUxMDIzMDA0MDgwMjE1OAorOjEwRkE5MDAwMkM0MjAwODA1NDQwMDAwMTI0MTAwMDgwMEUwMDEzMEUwMAorOjEwRkFBMDAwMDI0MDIwMjEyNDAyMDAwMUFGNjIwMDBDOTM2MjAwM0U1QworOjEwRkFCMDAwMDAxMDIwNDAzMDQyMDA3RkEzNjIwMDNFOEUyMjAwMDRFRQorOjEwRkFDMDAwMjQ0MjAwMDFBRjYyMDA0MEE3NzAwMDNDOEY2MjAwNTBFQQorOjEwRkFEMDAwOTYyMzAwMEUwMDQzMTAyMUFGNjIwMDU4OEY2MjAwNTA0MQorOjEwRkFFMDAwMDA0NDEwMjFBRjYyMDA1QzhFMjIwMDA0QUY2MjAwMTg1NworOjEwRkFGMDAwOEUyMjAwMDhBRjYyMDAxQzhGQTIwMDEwMzA0MjAwMDg2NgorOjEwRkIwMDAwNTQ0MDAwMEE5M0EyMDAyMEEzNjAwMDM2OTM2MjAwMzY5RQorOjEwRkIxMDAwMjQwM0ZGREZBMzYyMDAzNTkzNjIwMDNFMDA0MzEwMjRGQworOjEwRkIyMDAwQTM2MjAwM0UwQTAwMTRCRDhFMjIwMDA4QTM2MjAwMzVDNQorOjEwRkIzMDAwOEUyMjAwMDhBRjYyMDA0QzhGNjIwMDI0OEY2MzAwNDA2OQorOjEwRkI0MDAwMDA0MzEwMjFBRjYyMDA0ODkzNjIwMDAwMjQwMzAwNTA3QworOjEwRkI1MDAwMzA0MjAwRkYxNDQzMDAxMjI0MDNGRjgwM0MwMjA4MDBERgorOjEwRkI2MDAwOEM0MjMxQTAwMjQyMTAyMTAwNDMxMDI0QUY0MjAwMjhGMQorOjEwRkI3MDAwM0MwMjA4MDA4QzQyMzFBMDhFMjQwMDA4M0MwMzAwMEM5QgorOjEwRkI4MDAwMDI0MjEwMjEzMDQyMDA3RjAzNDIxMDIxMDA0MzEwMjEyNQorOjEwRkI5MDAwQUM0NDAwRDg4RTIzMDAwOEFGODIwMDI4QUM0MzAwRENDMAorOjEwRkJBMDAwMEUwMDEzMTcwMjQwMjAyMTI0MDQwMDM4MDAwMDI4MjFGMQorOjEwRkJCMDAwMjQwNjAwMEEwRTAwMTQxMTAwMDAwMDAwOEZCRjAwMzQ1QworOjEwRkJDMDAwOEZCMjAwMzA4RkIxMDAyQzhGQjAwMDI4MjQwMjAwMDFDQQorOjEwRkJEMDAwMDNFMDAwMDgyN0JEMDAzODI3QkRGRkU4QUZCRjAwMTBENQorOjEwRkJFMDAwOTBDNzAwMEQwMEMwMjgyMTMwRTYwMDEwMTBDMDAwMEFBOAorOjEwRkJGMDAwMzBFMjAwMDU4Q0EzMDAwODhGNjIwMDU0MTA2MjAwMDZGQQorOjEwRkMwMDAwMzBFMjAwMDUxNDQwMDAxNzhGQkYwMDEwMDAwMDIwMjFEMworOjEwRkMxMDAwMEEwMDBEMTMyN0JEMDAxODEwNDAwMDBEMzBFMzAwMTIzQworOjEwRkMyMDAwMTBDMDAwMTA4RkJGMDAxMDhDQTMwMDA4OEY2MjAwNTQxQQorOjEwRkMzMDAwMTQ2MjAwMEQyNDAyMDAwMTI0MDQwMDM4MjQwNTAwOEQwNAorOjEwRkM0MDAwMEUwMDE0MTEyNDA2MDAxMjBBMDAxNTA5OEZCRjAwMTBCRgorOjEwRkM1MDAwMjQwMjAwMTIxNDYyMDAwMzhGQkYwMDEwMEEwMDE0M0YzOAorOjEwRkM2MDAwMjdCRDAwMTgyNDAyMDAwMTAzRTAwMDA4MjdCRDAwMTg4QQorOjEwRkM3MDAwMjdCREZGRjgyNzQyMDE4MEFGQTIwMDAwMzA4QTAwRkZCNQorOjEwRkM4MDAwOEY0MjAxQjgwNDQwRkZGRTAwMDAwMDAwOEY0NjAxMjhBQgorOjEwRkM5MDAwM0MwMjA4MDA4QzQyMzFBMDI0MDNGRjgwQUY4NjAwNTA1NAorOjEwRkNBMDAwMDBDMjEwMjEwMDQzMTAyNEFGNDIwMDI0M0MwMjA4MDA4RgorOjEwRkNCMDAwOEM0MjMxQTA4RkE5MDAwMDhGQTgwMDAwMDBDMjEwMjE0MworOjEwRkNDMDAwMzA0MjAwN0YwMzQyMTgyMTNDMDIwMDBBMDA2MjE4MjFFMgorOjEwRkNEMDAwOTQ2NDAwRDQ4RkE3MDAwMDhGQTUwMDAwMjQwMjAwMDJDNgorOjEwRkNFMDAwQUY4MzAwMjhBMEEyMDAwQjhGQTMwMDAwMzU0MjYwMDA2NAorOjEwRkNGMDAwMzA4NEZGRkZBNEUyMDAwODNDMDIxMDAwQUQyNjAwMDBBMworOjEwRkQwMDAwQUQwNDAwMDRBQzYwMDAyNDI3QkQwMDA4QUY0MjAxQjg3OAorOjEwRkQxMDAwMDNFMDAwMDgyNDAyMDAwMThDODIwMDA0OEY4MzAwMjg4NQorOjEwRkQyMDAwMDA0NTEwMjNBQzgyMDAwNDkwNjIwMDYzMzA0MjAwN0ZFMworOjEwRkQzMDAwQTA2MjAwNjM4QzgyMDAyMDkzODMwMDMwOEY4NTAwMjhBRQorOjEwRkQ0MDAwMzQ0MjAwMDJBRjgzMDA0NEE3ODAwMDQyQUM4MjAwMjAwRQorOjEwRkQ1MDAwQTRBMDAwRTQ5MEEyMDA2MzI0MDNGRkJGMDA0MzEwMjQ4QQorOjEwRkQ2MDAwMDNFMDAwMDhBMEEyMDA2MzI3NDMwMTgwOEY0MjAxQjg4RQorOjEwRkQ3MDAwMDQ0MEZGRkU4RjgyMDA1MEFDNjIwMDAwOEY0MjAxMjRERAorOjEwRkQ4MDAwQUM2MjAwMDQyNDAyNjA4M0E0NjIwMDA4MjQwMjAwMDIyMgorOjEwRkQ5MDAwQTA2MjAwMEIzQzAyMTAwMDAzRTAwMDA4QUY0MjAxQjg3MworOjEwRkRBMDAwOEY4ODAwNDQ5MzgyMDAzMDhGODMwMDI4M0MwNzA4MDAyRQorOjEwRkRCMDAwMjRFNzc5RjQwMDQ4MTAyMzMwNDIwMEZGMzA0OTAwRkM2QQorOjEwRkRDMDAwMjQ2NTAwODg4Rjg2MDA0ODMwNEEwMDAzMTEyMDAwMDkwRQorOjEwRkREMDAwMDAwMDIwMjEyNDgyMDAwNDhDQTMwMDAwMzA0NDAwRkY5NgorOjEwRkRFMDAwMDA4OTEwMkFBQ0UzMDAwMDI0QTUwMDA0MTQ0MEZGRjlBOAorOjEwRkRGMDAwMjRFNzAwMDQxMTQwMDAwOTAwMDAyMDIxMjQ4MjAwMDFCMgorOjEwRkUwMDAwOTBBMzAwMDAzMDQ0MDBGRjAwOEExMDJCQTBFMzAwMDAwNAorOjEwRkUxMDAwMjRBNTAwMDExNDQwRkZGOTI0RTcwMDAxMzBDMjAwMDNDQgorOjEwRkUyMDAwMTQ0MDAwMDQ4Rjg1MDA0NDMxMDIwMDAzMTA0MDAwMEQ4RgorOjEwRkUzMDAwMDAwMDAwMDAxMEEwMDAwOTAwMDAyMDIxMjQ4MjAwMDEyMQorOjEwRkU0MDAwOTBDMzAwMDAzMDQ0MDBGRjAwODUxMDJCQTBFMzAwMDBBOQorOjEwRkU1MDAwMjRDNjAwMDExNDQwRkZGOTI0RTcwMDAxMDNFMDAwMDg3NAorOjEwRkU2MDAwMDAwMDAwMDAxMTAwRkZGRDAwMDAyMDIxMjQ4MjAwMDQ5QQorOjEwRkU3MDAwOENDMzAwMDAzMDQ0MDBGRjAwODgxMDJCQUNFMzAwMDA2RQorOjEwRkU4MDAwMjRDNjAwMDQxNDQwRkZGOTI0RTcwMDA0MDNFMDAwMDgzRQorOjEwRkU5MDAwMDAwMDAwMDA4RjgzMDA0NDkzODIwMDMwMzBDNjAwRkZEMgorOjEwRkVBMDAwMzBBNTAwRkYwMDQzMTAyMzMwNDMwMEZGOEY4MjAwMjg1RAorOjEwRkVCMDAwMDA4MDM4MjEwMDQzMTAyMTE0QzAwMDAyMjQ0ODAwODgyQgorOjEwRkVDMDAwMDA4MzM4MjEzMEUyMDAwMzE0NDAwMDA1MzBBMjAwMDMxMworOjEwRkVEMDAwMTQ0MDAwMDMzMDYyMDAwMzEwNDAwMDBEMDAwMDAwMDBEOQorOjEwRkVFMDAwMTBBMDAwMDkwMDAwMjAyMTI0ODIwMDAxOTBFMzAwMDBGRQorOjEwRkVGMDAwMzA0NDAwRkYwMDg1MTAyQkExMDMwMDAwMjRFNzAwMDExRgorOjEwRkYwMDAwMTQ0MEZGRjkyNTA4MDAwMTAzRTAwMDA4MDAwMDAwMDA4QworOjEwRkYxMDAwMTBBMEZGRkQwMDAwMjAyMTI0ODIwMDA0OENFMzAwMDBEQgorOjEwRkYyMDAwMzA0NDAwRkYwMDg1MTAyQkFEMDMwMDAwMjRFNzAwMDRERgorOjEwRkYzMDAwMTQ0MEZGRjkyNTA4MDAwNDAzRTAwMDA4MDAwMDAwMDA1OQorOjEwRkY0MDAwMjdCREZGRjgyNDAyRkZGRkFGQTIwMDAwMDA4MDM4MjE4OAorOjEwRkY1MDAwMjQwNTAwMkYzQzA5MDgwMDI1Mjk3NUY0MjQwODAwRkYxQQorOjEwRkY2MDAwMjQwNkZGRkY5MEUyMDAwMDI0QTNGRkZGMDAwNjIyMDIwOAorOjEwRkY3MDAwMDBDMjEwMjYzMDQyMDBGRjAwMDIxMDgwMDA0OTEwMjEwQworOjEwRkY4MDAwOEM0MjAwMDAzMDY1MDBGRjI0RTcwMDAxMTRBOEZGRjU1MworOjEwRkY5MDAwMDA4MjMwMjYwMDA2MTAyN0FGQTIwMDA0QUZBMjAwMDBBNgorOjEwRkZBMDAwMDAwMDI4MjEyN0E2MDAwNDAwQzUxMDIzOTA0NDAwMDM2OAorOjEwRkZCMDAwMjRBMjAwMDEwMEJEMTgyMTMwNDUwMEZGMkNBMjAwMDQzRQorOjEwRkZDMDAwMTQ0MEZGRjlBMDY0MDAwMDhGQTIwMDAwMDNFMDAwMDhDNQorOjEwRkZEMDAwMjdCRDAwMDgwMDgwNDgyMTMwQUFGRkZGMzBDNjAwRkY3RgorOjEwRkZFMDAwMzBFN0ZGRkYyNzQ4MDE4MDhGNDIwMUI4MDQ0MEZGRkU0MQorOjEwRkZGMDAwOEY4MjAwNTBBRDAyMDAwMDhGNDIwMTI0QUQwMjAwMDQ0OAorOjAyMDAwMDA0MDAwMUY5Cis6MTAwMDAwMDA4RDIyMDAyMEE1MDcwMDA4QTEwMjAwMEEyNDAyMDAxNjg0Cis6MTAwMDEwMDBBMTAyMDAwQjkzNDMwMTIwOEQyMjAwMDg4RDI0MDAwNENGCis6MTAwMDIwMDAzMDYzMDBGRjAwNDMxMDIxOTc4MzAwNDIwMDQ0MTAyMUY5Cis6MTAwMDMwMDA4RDI1MDAyNDAwNDMxMDIzM0MwMzA4MDA4QzYzMzFBMDZECis6MTAwMDQwMDA4Rjg0MDAyOEE1MDIwMDBDMjQ2MzAwRTgyNDAyRkZGRjJGCis6MTAwMDUwMDBBNTBBMDAwRUE1MDMwMDEwQTUwNjAwMTJBRDA1MDAxOEE0Cis6MTAwMDYwMDBBRDAyMDAyNDk0ODIwMTE0MjQwM0ZGRjczMDQyRkZGRjA1Cis6MTAwMDcwMDBBRDAyMDAyODhDODIwMTE4QUQwMjAwMkMzQzAyMTAwMDU5Cis6MTAwMDgwMDBBRDAwMDAzMEFGNDIwMUI4OEQyMjAwMjAwMDQzMTAyNEEzCis6MTAwMDkwMDAwM0UwMDAwOEFEMjIwMDIwOEY4MjAwMjgzMEU3RkZGRjM4Cis6MTAwMEEwMDAwMDgwNDgyMTkwNDIwMEQzMzBBNUZGRkYzMEM2MDBGRkZBCis6MTAwMEIwMDAwMDAyMTEwMDMwNDIwRjAwMDBFMjM4MjUyNzQ4MDE4MDdECis6MTAwMEMwMDA4RjQyMDFCODA0NDBGRkZFOEY4MjAwNTBBRDAyMDAwMDU1Cis6MTAwMEQwMDA4RjQyMDEyNEFEMDIwMDA0OEQyMjAwMjBBNTA3MDAwOEY0Cis6MTAwMEUwMDBBMTAyMDAwQTI0MDIwMDE3QTEwMjAwMEI5MzQzMDEyMDgxCis6MTAwMEYwMDA4RDIyMDAwODhEMjQwMDA0MzA2MzAwRkYwMDQzMTAyMThFCis6MTAwMTAwMDA5NzgzMDA0MjAwNDQxMDIxOEY4NDAwMjgwMDQzMTAyMzZECis6MTAwMTEwMDAzQzAzMDgwMDhDNjMzMUEwQTUwMjAwMENBNTA1MDAwRTZECis6MTAwMTIwMDAyNDYzMDBFOEE1MDMwMDEwQTUwNjAwMTJBRDAwMDAxNDJBCis6MTAwMTMwMDA4RDIyMDAyNEFEMDIwMDE4OEM4MjAwNUNBRDAyMDAxQ0YwCis6MTAwMTQwMDA4QzgyMDA1OEFEMDIwMDIwMjQwMkZGRkZBRDAyMDAyNDgzCis6MTAwMTUwMDA5NDgyMDBFNjMwNDJGRkZGQUQwMjAwMjg5NDgyMDA2MEU2Cis6MTAwMTYwMDA5NDgzMDBCRTMwNDI3RkZGMzA2M0ZGRkYwMDAyMTIwMDI1Cis6MTAwMTcwMDAwMDQzMTAyMUFEMDIwMDJDM0MwMjEwMDBBRDAwMDAzMDA1Cis6MTAwMTgwMDBBRjQyMDFCODk0ODIwMEJFMjQwM0ZGRjcwMEEyMTAyMTAxCis6MTAwMTkwMDBBNDgyMDBCRThEMjIwMDIwMDA0MzEwMjQwM0UwMDAwODRBCis6MTAwMUEwMDBBRDIyMDAyMDI3NDMwMTgwOEY0MjAxQjgwNDQwRkZGRUFBCis6MTAwMUIwMDAyNDAyMDAxOEFDNjQwMDAwQTA2MjAwMEI4RjgyMDAyOEFCCis6MTAwMUMwMDA5NDQyMDBFNkE0NjIwMDEwM0MwMjEwMDBBQzYwMDAzMEQzCis6MTAwMUQwMDAwM0UwMDAwOEFGNDIwMUI4Mjc0MzAxODA4RjQyMDFCODE1Cis6MTAwMUUwMDAwNDQwRkZGRThGODIwMDJDOTQ0MjAwMUMzMDQyRkZGRjJGCis6MTAwMUYwMDAwMDAyMTFDMEFDNjIwMDAwMjQwMjAwMTlBMDYyMDAwQkQyCis6MTAwMjAwMDAzQzAyMTAwMEFDNjAwMDMwMDNFMDAwMDhBRjQyMDFCOENGCis6MTAwMjEwMDA4Rjg3MDAzNDMwQzMwMEZGOEY0MjAxQjgwNDQwRkZGRUQ3Cis6MTAwMjIwMDA4RjgyMDA1MDM0NjM2MDAwQUNBMjAwMDA5MzgyMDA0Q0M3Cis6MTAwMjMwMDBBMEEyMDAwNThDRTIwMDEwQTRBMjAwMDZBNEEzMDAwODVFCis6MTAwMjQwMDA4QzgyMDAyMDI0MDNGRkY3QTBBMjAwMEEyNDAyMDAwMkVGCis6MTAwMjUwMDBBMEEyMDAwQjhDRTIwMDAwQUNBMjAwMTA4Q0UyMDAwNDEzCis6MTAwMjYwMDBBQ0EyMDAxNDhDRTIwMDFDQUNBMjAwMjQ4Q0UyMDAyMEEyCis6MTAwMjcwMDBBQ0EyMDAyODhDRTIwMDJDQUNBMjAwMkM4QzgyMDAyNEMyCis6MTAwMjgwMDBBQ0EyMDAxODNDMDIxMDAwQUY0MjAxQjg4QzgyMDAyMEUyCis6MTAwMjkwMDAwMDQzMTAyNDAzRTAwMDA4QUM4MjAwMjA5MzgyMDA0QzRECis6MTAwMkEwMDAyNDAzMDAwMTI3QkRGRkU4MDA0MzMwMDQyQzQyMDAyMDU2Cis6MTAwMkIwMDBBRkIwMDAxMEFGQkYwMDE0MjQxMEZGRkUxMDQwMDAwNUM3Cis6MTAwMkMwMDAyNzQ1MDE4MDNDMDIwODAwOEM0MjMxOTAwQTAwMTZBOEE0Cis6MTAwMkQwMDAwMDQ2MTAyNDNDMDIwODAwOEM0MjMxOTQwMDQ2MTAyNDUxCis6MTAwMkUwMDAxNDQwMDAwNzI0MDYwMDg0OEY4MzAwMjgyNDEwRkZGRjk5Cis6MTAwMkYwMDA5MDYyMDA2MjMwNDIwMDBGMzQ0MjAwNDBBMDYyMDA2MjBGCis6MTAwMzAwMDAwRTAwMTY3NDAwMDAwMDAwMDIwMDEwMjE4RkJGMDAxNEMwCis6MTAwMzEwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTg4RjgzMDAyQzY5Cis6MTAwMzIwMDAyN0JERkZFMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFFCis6MTAwMzMwMDBBRkJGMDAxQzkwNjIwMDBEMDBBMDkwMjEzMEQxMDBGRkUzCis6MTAwMzQwMDAzMDQyMDA3RkEwNjIwMDBEOEY4NTAwMjg4RTQzMDAxODg4Cis6MTAwMzUwMDAwMDgwODAyMThDQTIwMDdDMTQ2MjAwMDUyNDAyMDAwRTIzCis6MTAwMzYwMDA5MEEyMDA2MzM0NDIwMDIwMEEwMDE2RDFBMEEyMDA2M0NDCis6MTAwMzcwMDAwRTAwMTY5N0EzODIwMDRDMjQwM0ZGRkYxMDQzMDA0NzkyCis6MTAwMzgwMDAyNDA0RkZGRjUyMjAwMDQ1MDAwMDIwMjE4RTQzMDAwMDdFCis6MTAwMzkwMDAzQzAyMDAxMDAwNjIxMDI0NTA0MDAwMDQzQzAyMDAwODlGCis6MTAwM0EwMDAwMjAwMjAyMTBBMDAxNkUwMjQwMjAwMTUwMDYyMTAyNDM5Cis6MTAwM0IwMDA1MDQwMDAwOThFNDUwMDAwMDIwMDIwMjEyNDAyMDAxNDU0Cis6MTAwM0MwMDAwRTAwMTY5N0EzODIwMDRDMjQwM0ZGRkYxMDQzMDAzMzU2Cis6MTAwM0QwMDAyNDA0RkZGRjhFNDUwMDAwM0MwMjAwMDIwMEEyMTAyNDBFCis6MTAwM0UwMDAxMDQwMDAxNjNDMDIwMDA0OEY4NjAwMkM4Q0MyMDAxNEMyCis6MTAwM0YwMDA4Q0MzMDAxMDhDQzQwMDE0MDA0MzEwMjMwMDQ0MTAyQjQ1Cis6MTAwNDAwMDA1MDQwMDAwNTAyMDAyMDIxOEU0MzAwMkM4Q0MyMDAxMEI5Cis6MTAwNDEwMDAxMDYyMDAwMzAyMDAyMDIxMEEwMDE3MTEyNDAyMDAxMkJBCis6MTAwNDIwMDAzQzAyMDAwNDAwQTIxMDI0NTA0MDAwMUMwMDAwMjAyMUM3Cis6MTAwNDMwMDAwMjAwMjAyMTBBMDAxNzExMjQwMjAwMTMwMEEyMTAyNDM4Cis6MTAwNDQwMDAxMDQwMDAwNjhGODMwMDJDOEM2MjAwMTA1MDQwMDAxMzc3Cis6MTAwNDUwMDAwMDAwMjAyMTBBMDAxNzBCMDIwMDIwMjE4QzYyMDAxMEVFCis6MTAwNDYwMDA1MDQwMDAwNDhFNDIwMDJDMDIwMDIwMjEwQTAwMTcxMTg3Cis6MTAwNDcwMDAyNDAyMDAxMTUwNDAwMDA5MDAwMDIwMjEwMjAwMjAyMTI4Cis6MTAwNDgwMDAyNDAyMDAxNzBFMDAxNjk3QTM4MjAwNEMyNDAzRkZGRkRFCis6MTAwNDkwMDAxMDQzMDAwMjI0MDRGRkZGMDAwMDIwMjE4RkJGMDAxQzM2Cis6MTAwNEEwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMTlGCis6MTAwNEIwMDAwM0UwMDAwODI3QkQwMDIwOTM4MzAwMzAyN0JERkZFMDQ0Cis6MTAwNEMwMDAyNDAyMDAzNEFGQjIwMDE4QUZCMTAwMTRBRkJGMDAxQzVCCis6MTAwNEQwMDBBRkIwMDAxMDAwODA4ODIxMTQ2MjAwMEMwMEEwOTAyMUIxCis6MTAwNEUwMDA4Rjg0MDAzNDBFMDAxNUMwOEM5MDAwMzAxMjAyMDAwNzdCCis6MTAwNEYwMDAyNDAyMDAwNTAyMjAyMDIxMEUwMDE2OTdBMzgyMDA0QzQyCis6MTAwNTAwMDAyNDAzRkZGRjEwNDMwMDYwMjQwNEZGRkY5MjQyMDAwNDE1Cis6MTAwNTEwMDAxMDQwMDAwOThGODIwMDI4MDIyMDIwMjEyNDAyMDAwQ0I0Cis6MTAwNTIwMDAwRTAwMTY5N0EzODIwMDRDMjQwM0ZGRkYxMDQzMDA1NkQxCis6MTAwNTMwMDAyNDA0RkZGRjhGODIwMDI4QTM4MDAwMjQ4RTQzMDAwNDQwCis6MTAwNTQwMDA4QzQ0MDA4MDNDMDIwMEZGMzQ0MkZGRkYwMDYyMTgyNDBDCis6MTAwNTUwMDAwMDgzMjAyQjEwODAwMDA4QUY4MzAwM0MwMjIwMjAyMTY0Cis6MTAwNTYwMDAyNDAyMDAxOTBFMDAxNjk3QTM4MjAwNEMyNDAzRkZGRkZCCis6MTAwNTcwMDAxMDQzMDA0NTI0MDRGRkZGOTc4MjAwNDI4Rjg3MDA0NDA4Cis6MTAwNTgwMDA4Rjg1MDAzQzAwNDcyMDIzMTBBMDAwM0FBNzg0MDA0MjNBCis6MTAwNTkwMDA4Rjg2MDAyODMwQTIwMDAzMDAwMjEwMjM5MEMzMDBCQzA1Cis6MTAwNUEwMDAzMDUwMDAwMzAwQjAyODIxMDAwMzE4ODIzMDcxMDAwMTkwCis6MTAwNUIwMDAwMDExMTA4MDAwQTIyODIxM0MwMzA4MDA4QzYzMzFBMEE4Cis6MTAwNUMwMDA4RjgyMDA1MDMwODRGRkZGMDA4NTIwMkIwMDQzMTAyMUQ0Cis6MTAwNUQwMDAxMDgwMDAxMDI0NDIwMDg4OEY4NDAwMzQxMDgyMDAwREE3Cis6MTAwNUUwMDAzQzAzM0YwMThFNDIwMDAwMDA0MzEwMjQzQzAzMjUwMEUxCis6MTAwNUYwMDAxNDQzMDAwNjMwRTUwMEZGOEM4MjAwMDBBQ0MyMDA4ODg2Cis6MTAwNjAwMDA4QzgyMDAxMDBBMDAxNzc1QUNDMjAwOTgwRTAwMTU5NTc4Cis6MTAwNjEwMDAwMDAwMzAyMTkzODIwMDI0OEY4NTAwMjg4RjgzMDA0OEJBCis6MTAwNjIwMDAwMjAyMzgyMThGODIwMDQ0QTM4NzAwMjQ5NEE0MDBFNEFFCis6MTAwNjMwMDAwMDYyMTgyMThGODIwMDNDMzQ4NDEwMDBBRjgzMDA0ODkwCis6MTAwNjQwMDAwMDUwMzAyMUE0QTQwMEU0MTIyMDAwMEVBRjg2MDA0NDI0Cis6MTAwNjUwMDAyNEUyMDAwNEEzODIwMDI0OTRBMjAwRTQyNEMzMDAwNDQyCis6MTAwNjYwMDBBRjgzMDA0NDM0NDIyMDAwQTRBMjAwRTQwQTAwMTc5MkExCis6MTAwNjcwMDAwMDAwMjAyMThGODIwMDQ4QUY4MDAwNDQwMDQ3MTAyMUY1Cis6MTAwNjgwMDBBRjgyMDA0ODAwMDAyMDIxOEZCRjAwMUM4RkIyMDAxOEVECis6MTAwNjkwMDA4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODFCCis6MTAwNkEwMDAyN0JEMDAyMDhGODYwMDI4MjdCREZGRThBRkJGMDAxNEJDCis6MTAwNkIwMDBBRkIwMDAxMDkwQzIwMDYzMzA0MjAwMjAxMDQwMDAwODJDCis6MTAwNkMwMDAzMEE1MDBGRjhDQzIwMDdDMjQwM0ZGREYyNDQyMDAwMTIwCis6MTAwNkQwMDBBQ0MyMDA3QzkwQzIwMDYzMDA0MzEwMjRBMEMyMDA2MzNGCis6MTAwNkUwMDAxMEEwMDAyMzhGODMwMDI4Mjc1MDAxODAwMjAwMjgyMUJBCis6MTAwNkYwMDAwRTAwMTY3NDI0MDYwMDgyOEY4MjAwMjg5MDQyMDA2MzQ4Cis6MTAwNzAwMDAzMDQyMDA0MDUwNDAwMDE5QTM4MDAwNEM4RjgzMDAzNEQ5Cis6MTAwNzEwMDA4RjQyMDFCODA0NDBGRkZFOEY4MjAwNTBBRTAyMDAwMEZECis6MTAwNzIwMDAyNDAyNjA4MkE2MDIwMDA4MjQwMjAwMDJBMjAyMDAwQjNBCis6MTAwNzMwMDA4QzYyMDAwOEFFMDIwMDEwOEM2MjAwMENBRTAyMDAxNDQ1Cis6MTAwNzQwMDA4QzYyMDAxNEFFMDIwMDE4OEM2MjAwMThBRTAyMDAyNDA1Cis6MTAwNzUwMDA4QzYyMDAyNEFFMDIwMDI4OEM2MjAwMjhBRTAyMDAyQ0JECis6MTAwNzYwMDAzQzAyMTAwMEFGNDIwMUI4QTM4MDAwNEM4RjgzMDAyOEU4Cis6MTAwNzcwMDA4RkJGMDAxNDhGQjAwMDEwOTA2MjAwNjMyN0JEMDAxODc3Cis6MTAwNzgwMDAzMDQyMDA3RkEwNjIwMDYzOTc4MjAwNDI4Rjg2MDA0NDVGCis6MTAwNzkwMDA4Rjg1MDAyODkzODMwMDMwMDA0NjEwMjNBNzgyMDA0MkYzCis6MTAwN0EwMDBBNEEwMDBFNDkwQTQwMDYzOEY4MjAwNDhBRjgzMDA0NEJCCis6MTAwN0IwMDAyNDAzRkZCRjAwNDYxMDIxMDA4MzIwMjRBRjgyMDA0ODlECis6MTAwN0MwMDBBMEE0MDA2MzhGODIwMDI4QTA0MDAwQkQ4RjgyMDAyODczCis6MTAwN0QwMDAwM0UwMDAwOEE0NDAwMEJFOEY4QTAwMjgyN0JERkZFMDg4Cis6MTAwN0UwMDBBRkIxMDAxNEFGQjAwMDEwOEY4ODAwNDRBRkJGMDAxODQ1Cis6MTAwN0YwMDA5Mzg5MDAyNDk1NDIwMEU0MzBEMTAwRkYwMTA5MTgyQkIxCis6MTAwODAwMDAwMDgwODAyMTMwQUMwMEZGMzA0N0ZGRkYwMDAwNTgyMUZFCis6MTAwODEwMDAxNDYwMDAwMzMxMDYwMEZGMDEyMDMwMjEwMTA5NTgyMzM0Cis6MTAwODIwMDA5NzgzMDA0MjAwNjgxMDJCMTQ0MDAwMzIwMDAwMDAwMDQzCis6MTAwODMwMDAxNDY4MDAwNzI0MDIwMDAxOEUwMjAwMjAyNDAzRkZGQjNECis6MTAwODQwMDAzNEU3ODAwMDAwNDMxMDI0QUUwMjAwMjAyNDAyMDAwMTlGCis6MTAwODUwMDAzNEU3MDg4MDE1ODIwMDA1MzE2NUZGRkYwRTAwMTVFNUJECis6MTAwODYwMDAwMjAwMjAyMTBBMDAxODI3MDIwMDIwMjEwRTAwMTYxNjdGCis6MTAwODcwMDAwMjAwMjAyMTBFMDAxNjU5OEY4NDAwNTA4Rjg0MDAyODFBCis6MTAwODgwMDA5NDgyMDA2MDI0NDIwMDAxQTQ4MjAwNjA5NDgyMDA2MDhGCis6MTAwODkwMDAzQzAzMDgwMDhDNjMzMTg4MzA0MjdGRkY1NDQzMDAwRkQzCis6MTAwOEEwMDAwMjAwMjAyMTk0ODIwMDYwMjQwMzgwMDAwMDQzMTAyNDcxCis6MTAwOEIwMDBBNDgyMDA2MDkwODIwMDYwOTA4MzAwNjAzMDQyMDBGRjVDCis6MTAwOEMwMDAwMDAyMTFDMjAwMDIxMDI3MDAwMjExQzAzMDYzMDA3RjM1Cis6MTAwOEQwMDAwMDYyMTgyNUEwODMwMDYwMDIwMDIwMjEwMjIwMjgyMTQ4Cis6MTAwOEUwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwQTAwMTc5OTQ1Cis6MTAwOEYwMDAyN0JEMDAyMDkxNDIwMDYzMjQwM0ZGODAwMDQzMTAyNUEwCis6MTAwOTAwMDBBMTQyMDA2Mzk3ODIwMDQyMzA0OEZGRkYxMTAwMDAyMDlGCis6MTAwOTEwMDA5MzgzMDAyNDhGODQwMDI4MDA0QjEwMjMzMDQ2MDBGRjZGCis6MTAwOTIwMDA5NDgzMDBFNDI0MDJFRkZGMDE2ODI4MkIwMDYyMTgyNDVFCis6MTAwOTMwMDBBNDgzMDBFNDE0QTAwMDAzOEUwMjAwMjAwMTAwNTgyMUNCCis6MTAwOTQwMDAwMDAwMzAyMTI0MDNGRkZCMzRFNzgwMDAwMDQzMTAyNDIzCis6MTAwOTUwMDBBRTAyMDAyMDI0MDIwMDAxMTU4MjAwMDUzMTY1RkZGRjcwCis6MTAwOTYwMDAwRTAwMTVFNTAyMDAyMDIxMEEwMDE4NEY5NzgzMDA0MjZGCis6MTAwOTcwMDAwRTAwMTYxNjAyMDAyMDIxOTc4MzAwNDI4RjgyMDA0NDQ5Cis6MTAwOTgwMDBBNzgwMDA0MjAwNDMxMDIzQUY4MjAwNDQ5MzgzMDAyNEQ5Cis6MTAwOTkwMDA4RjgyMDAyODhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDE1Cis6MTAwOUEwMDAyN0JEMDAyMDAzRTAwMDA4QTA0MzAwQkQ4RjgyMDAyODdGCis6MTAwOUIwMDA5MDQzMDA4ODkwNDUwMEJEMjQ0OTAwODgzMDYzMDAzRjgzCis6MTAwOUMwMDAyNDYzRkZFMDI0MDIwMDAxMDA2MjM4MDQyQzYzMDAyMDRECis6MTAwOUQwMDAzMEU4MDAxOUEzODUwMDI0MTA2MDAwMTBBRjg5MDAzNEFFCis6MTAwOUUwMDAzQzAyODAwMDM0NDIwMDAyMjQwNTAwMDEyNDA2MDAwMTdDCis6MTAwOUYwMDAxNTAwMDAwODAwRTIxODI0MDAwMDI4MjExNDYwMDAwNUZBCis6MTAwQTAwMDAzMEUyMDAyMDEwNDAwMDA1MjQwNTAwMDE5MTI2MDAwMTdECis6MTAwQTEwMDAzMEM2MDAwMTBBMDAxN0U2MDAwMDAwMDAwM0UwMDAwOEVECis6MTAwQTIwMDAwMDAwMDAwMDI3QkRGRkQ4QUZCMDAwMTA4RjkwMDAzNDQ5Cis6MTAwQTMwMDBBRkI0MDAyMEFGQjEwMDE0QUZCRjAwMjRBRkIzMDAxQ0FGCis6MTAwQTQwMDBBRkIyMDAxODhFMDUwMDEwM0MwMjA4MDA4QzQyMzFCMDk1Cis6MTAwQTUwMDA4Rjg2MDAzODMwQTMzRkZGMDA2MjE4MkI4Q0QzMDAxNDIwCis6MTAwQTYwMDAwMDgwODgyMThDRDIwMDIwMTA2MDAwNzgwMDAwQTAyMTM2Cis6MTAwQTcwMDA5MEMzMDAwRDI0MDJGRjgwMDA0MzEwMjQzMDQyMDBGRjg5Cis6MTAwQTgwMDA1MDQwMDA3MzAyMjAyMDIxMDAwNTEzODIzMDQyMDAwM0YxCis6MTAwQTkwMDA1NDQwMDA2RjAyMjAyMDIxOTRDMzAwMUM4RjgyMDAyODQ0Cis6MTAwQUEwMDA4RTA1MDAyOEE0NDMwMTE0OENDMjAwMTAwMjYyMTgyMzkyCis6MTAwQUIwMDAxNDY1MDAwNzI0MDIwMDFGOEY4MjAwM0MwMDYyMTAyMTkxCis6MTAwQUMwMDAwMjYyMTAyQjEwNDAwMDA4OEY4MzAwMkMyNDAyMDAxOEIzCis6MTAwQUQwMDAwRTAwMTY5N0EzODIwMDRDMjQwM0ZGRkYxMDQzMDA2RjAzCis6MTAwQUUwMDAyNDA0RkZGRjhGODMwMDJDOEY4NDAwM0M4QzYyMDAxMDU1Cis6MTAwQUYwMDAwMjQ0OTAyMTAwNDQxMDIzQUM2MjAwMTA4RjgyMDAyODMxCis6MTAwQjAwMDBBQzcyMDAyMDhDNDIwMDY4MDA1MjEwMkIxMDQwMDAwOThCCis6MTAwQjEwMDA4RjgzMDAzODAyMjAyMDIxMjQwMjAwMUQwRTAwMTY5NzJBCis6MTAwQjIwMDBBMzgyMDA0QzI0MDNGRkZGMTA0MzAwNUMyNDA0RkZGRjVBCis6MTAwQjMwMDA4RjgzMDAzODhFMDIwMDI0OEM2MzAwMjQxMDQzMDAwNzRBCis6MTAwQjQwMDAwMjIwMjAyMTI0MDIwMDFDMEUwMDE2OTdBMzgyMDA0Q0Q0Cis6MTAwQjUwMDAyNDAzRkZGRjEwNDMwMDUxMjQwNEZGRkY4Rjg0MDAyQzY3Cis6MTAwQjYwMDA4QzgyMDAyNDI0NDIwMDAxQUM4MjAwMjQxMjUzMDAwNDMxCis6MTAwQjcwMDA4RjgyMDAyODhDNDIwMDY4NTY0MjAwMEU4RTAyMDAwMEQwCis6MTAwQjgwMDA4RTAyMDAwMDNDMDMwMDgwMDA0MzEwMjQxNDQwMDAwRDNFCis6MTAwQjkwMDAyNDAyMDAxQTAyMjAyMDIxMEUwMDE2OTdBMzgyMDA0Qzg2Cis6MTAwQkEwMDAyNDAzRkZGRjEwNDMwMDNEMjQwNEZGRkYwQTAwMThFMzY1Cis6MTAwQkIwMDA4RTAyMDAxNDNDMDMwMDgwMDA0MzEwMjQ1MDQwMDAwM0M4Cis6MTAwQkMwMDA4RTAyMDAxNEFDODAwMDIwOEUwMjAwMTQyNDEyRkZGRjVECis6MTAwQkQwMDAxMDUyMDAwNjI0MDIwMDFCMDIyMDIwMjEwRTAwMTY5NzRFCis6MTAwQkUwMDBBMzgyMDA0QzEwNTIwMDJEMjQwNEZGRkY4RTAzMDAwMDRFCis6MTAwQkYwMDAzQzAyMDAwMTAwNjIxMDI0MTA0MDAwMUYzQzAyMDA4MEYzCis6MTAwQzAwMDAwMDYyMTAyNDE0NDAwMDA4MDIyMDIwMjEyNDAyMDAxQTRGCis6MTAwQzEwMDAwRTAwMTY5N0EzODIwMDRDMjQwM0ZGRkYxMDQzMDAxRjExCis6MTAwQzIwMDAyNDA0RkZGRjAyMjAyMDIxMDIwMDI4MjEwRTAwMTZCNzE1Cis6MTAwQzMwMDAyNDA2MDAwMTI0MDNGRkZGMjQwNEZGRkYxNDQzMDAwRUQ5Cis6MTAwQzQwMDAyNDE0MDAwMTBBMDAxOTE4OEZCRjAwMjQwMjIwMjAyMTVCCis6MTAwQzUwMDAyNDAyMDAwRDhGQkYwMDI0OEZCNDAwMjA4RkIzMDAxQzJFCis6MTAwQzYwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyN0JEMDAyODdDCis6MTAwQzcwMDAwQTAwMTY5N0EzODIwMDRDOEY4MzAwMkMwMjIwMjAyMUFCCis6MTAwQzgwMDAwMjgwMzAyMTk0NjIwMDM2MjQwNTAwMDEyNDQyMDAwMUQ0Cis6MTAwQzkwMDAwRTAwMTdFNkE0NjIwMDM2MDAwMDIwMjE4RkJGMDAyNDVBCis6MTAwQ0EwMDA4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNEQ2Cis6MTAwQ0IwMDA4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyODNECis6MTAwQ0MwMDA4RjgzMDAyODI3QkRGRkQ4QUZCNDAwMjBBRkIzMDAxQzJFCis6MTAwQ0QwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyNDI2Cis6MTAwQ0UwMDA5MDYyMDA2MzhGOTEwMDM0MjQxMkZGRkYzNDQyMDA0MDcxCis6MTAwQ0YwMDA5MjI1MDAwMEEwNjIwMDYzOEUyMjAwMTAwMDgwOTgyMURGCis6MTAwRDAwMDAzMEIwMDAzRjEwNTIwMDA2MDM2MEEwMjEyNDAyMDAwRDA1Cis6MTAwRDEwMDAwRTAwMTY5N0EzODIwMDRDMTA1MjAwNTIyNDA0RkZGRkNECis6MTAwRDIwMDA4RjgzMDAyODhFMjIwMDE4OEM2MzAwN0MxMDQzMDAwN0ZDCis6MTAwRDMwMDAwMjYwMjAyMTI0MDIwMDBFMEUwMDE2OTdBMzgyMDA0Q0IwCis6MTAwRDQwMDAyNDAzRkZGRjEwNDMwMDQ3MjQwNEZGRkYyNDA0MDAyMDc2Cis6MTAwRDUwMDAxMjA0MDAwNDhGODMwMDI4OTA2MjAwNjMzNDQyMDAyMDU0Cis6MTAwRDYwMDBBMDYyMDA2MzhGODUwMDNDMTBBMDAwMUUwMDAwMDAwMDAwCis6MTAwRDcwMDA1NjA0MDAwNDhGODIwMDI4MDI2MDIwMjEwQTAwMTk2MkI0Cis6MTAwRDgwMDAyNDAyMDAwQTk2ODMwMDBBMjQwNEZGRkQ5NDQyMDA2MEI2Cis6MTAwRDkwMDAzMDQyRkZGRjEwNDMwMDM0OEZCRjAwMjQzQzAyMDgwMEE0Cis6MTAwREEwMDA4QzQyMzE4QzAwNDUxMDJCMTQ0MDAwMDYwMjYwMjAyMTNCCis6MTAwREIwMDAwMDAwMjgyMTBFMDAxN0U2MjQwNjAwMDEwQTAwMTk4OTA4Cis6MTAwREMwMDAwMDAwMjAyMTI0MDIwMDJEMEUwMDE2OTdBMzgyMDA0QzYzCis6MTAwREQwMDAyNDAzRkZGRjEwNDMwMDIzMjQwNEZGRkYwQTAwMTk4OUE2Cis6MTAwREUwMDAwMDAwMjAyMTE2MDQwMDA1OEY4NDAwMjg4RTIzMDAxNEEzCis6MTAwREYwMDAyNDAyRkZGRjUwNjIwMDE4MDI2MDIwMjE5NDgyMDA2MEVDCis6MTAwRTAwMDAyNDQyMDAwMUE0ODIwMDYwOTQ4MjAwNjAzQzAzMDgwMDM4Cis6MTAwRTEwMDA4QzYzMzE4ODMwNDI3RkZGNTQ0MzAwMEYwMjYwMjAyMUYxCis6MTAwRTIwMDA5NDgyMDA2MDI0MDM4MDAwMDA0MzEwMjRBNDgyMDA2MEE4Cis6MTAwRTMwMDA5MDgyMDA2MDkwODMwMDYwMzA0MjAwRkYwMDAyMTFDMjg3Cis6MTAwRTQwMDAwMDAyMTAyNzAwMDIxMUMwMzA2MzAwN0YwMDYyMTgyNUU1Cis6MTAwRTUwMDBBMDgzMDA2MDAyNjAyMDIxMEUwMDE3OTkyNDA1MDAwMTg0Cis6MTAwRTYwMDAwMDAwMjAyMThGQkYwMDI0OEZCNDAwMjA4RkIzMDAxQzBFCis6MTAwRTcwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMUM1Cis6MTAwRTgwMDAwM0UwMDAwODI3QkQwMDI4OEY4MzAwMjgyN0JERkZFODY2Cis6MTAwRTkwMDBBRkIwMDAxMEFGQkYwMDE0OTA2MjAwNjM4Rjg3MDAzNEMyCis6MTAwRUEwMDAwMDgwODAyMTM0NDIwMDQwOENFNjAwMTBBMDYyMDA2Mzg0Cis6MTAwRUIwMDAzQzAzMDgwMDhDNjMzMUIwMzBDMjNGRkYwMDQzMTAyQjZECis6MTAwRUMwMDAxMDQwMDA0RThGODUwMDM4MjQwMkZGODA5MEEzMDAwRDUzCis6MTAwRUQwMDAwMDQzMTAyNDMwNDIwMEZGNTA0MDAwNDkwMjAwMjAyMTBFCis6MTAwRUUwMDAwMDA2MTM4MjMwNDgwMDAzMjQwMjAwMDI1NTAyMDA0NDI5Cis6MTAwRUYwMDAwMjAwMjAyMTk0QTIwMDFDOEY4NTAwMjgyNDAzMDAyM0Q3Cis6MTAwRjAwMDBBNEEyMDExNDhDRTYwMDAwMDAwNjE2MDIzMDQyMDAzRjQ1Cis6MTAwRjEwMDAxMDQzMDAxMDNDMDMwMDgzOENFMzAwMTg4Q0EyMDA3QzdCCis6MTAwRjIwMDAxMDYyMDAwNjI0MDIwMDBFMEUwMDE2OTdBMzgyMDA0Q0U5Cis6MTAwRjMwMDAyNDAzRkZGRjEwNDMwMDM4MjQwNEZGRkY4RjgzMDAyOEExCis6MTAwRjQwMDA5MDYyMDA2MzM0NDIwMDIwQTA2MjAwNjMwQTAwMTlDRTYwCis6MTAwRjUwMDA4RjgzMDAyQzAwQzMxMDI0MTQ0MzAwMDc4RjgzMDAyQ0MwCis6MTAwRjYwMDA5MEEyMDA2MjMwNDIwMDBGMzQ0MjAwMjBBMEEyMDA2MjMyCis6MTAwRjcwMDBBMzg4MDA0MDhGODMwMDJDOTA2MjAwMEQzMDQyMDA3RkQ4Cis6MTAwRjgwMDBBMDYyMDAwRDhGODMwMDNDMTA2MDAwMTgwMjAwMjAyMTM5Cis6MTAwRjkwMDA4Rjg0MDAzODhDODIwMDEwMDA0MzEwMkIxMDQwMDAwOTExCis6MTAwRkEwMDAyNDAyMDAxODAyMDAyMDIxMEUwMDE2OTdBMzgyMDA0Qzk0Cis6MTAwRkIwMDAyNDAzRkZGRjEwNDMwMDE4MjQwNEZGRkYwQTAwMTlGNjYyCis6MTAwRkMwMDAwMDAwMjAyMThDODIwMDEwMjQwNTAwMDEwMjAwMjAyMTU1Cis6MTAwRkQwMDAwMDQzMTAyMzhGODMwMDJDMjQwNjAwMDEwRTAwMTdFNjI3Cis6MTAwRkUwMDBBQzYyMDAxMDBBMDAxOUY2MDAwMDIwMjEwRTAwMTc5OUNCCis6MTAwRkYwMDAyNDA1MDAwMTBBMDAxOUY2MDAwMDIwMjEwMjAwMjAyMTJBCis6MTAxMDAwMDAyNDAyMDAwRDhGQkYwMDE0OEZCMDAwMTAyN0JEMDAxODAwCis6MTAxMDEwMDAwQTAwMTY5N0EzODIwMDRDOEZCRjAwMTQ4RkIwMDAxMEY3Cis6MTAxMDIwMDAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMTgyN0JERkZEODZECis6MTAxMDMwMDBBRkIwMDAxMDhGOTAwMDM0QUZCMzAwMUNBRkJGMDAyMEUyCis6MTAxMDQwMDBBRkIyMDAxOEFGQjEwMDE0OEUxMjAwMTAzQzAzMDgwMEJDCis6MTAxMDUwMDA4QzYzMzFCMDMyNDIzRkZGMDA0MzEwMkIxMDQwMDA3Q0M0Cis6MTAxMDYwMDAwMDgwOTgyMThGODUwMDM4MjQwMkZGODA5MEEzMDAwRDE2Cis6MTAxMDcwMDAwMDQzMTAyNDMwNDIwMEZGNTA0MDAwNzYwMjYwMjAyMURGCis6MTAxMDgwMDAwMDEyMTM4MjMwNDIwMDAzMjQwMzAwMDE1NDQzMDA3MTE0Cis6MTAxMDkwMDAwMjYwMjAyMTkwQTIwMDBEMzA0MjAwMDg1NDQwMDAwMzVECis6MTAxMEEwMDA4RjgyMDAzQzBBMDAxQTI2MjQwMjAwMjQ1MDQwMDAwM0NDCis6MTAxMEIwMDA4RTAzMDAwQzBBMDAxQTI2MjQwMjAwMjc4Q0EyMDAyMEFFCis6MTAxMEMwMDAxNDYyMDAwNTI0MDIwMDIwOEUwMzAwMDg4Q0EyMDAyNDc0Cis6MTAxMEQwMDAxMDYyMDAwODI0MDIwMDIwMEUwMDE2OTdBMzgyMDA0QzI0Cis6MTAxMEUwMDAyNDAzRkZGRjEwNDMwMDZBMjQwNEZGRkYwQTAwMUE1MTgzCis6MTAxMEYwMDA4Rjg0MDAyQzhFMDIwMDE0MjQxMUZGRkYxNDUxMDAwMzcyCis6MTAxMTAwMDA4Rjg3MDAyODBBMDAxQTRDMjQwMjAwMjU4RTAzMDAxODNECis6MTAxMTEwMDA4Q0UyMDA3QzE0NjIwMDE2MjQwMjAwMEU4RTAzMDAyNDcwCis6MTAxMTIwMDA4Q0EyMDAyODE0NjIwMDEyMjQwMjAwMjE4RTA2MDAyOERFCis6MTAxMTMwMDA4Q0EyMDAyQzE0QzIwMDBFMjQwMjAwMUY4RTAzMDAyQzZGCis6MTAxMTQwMDAxMDYwMDAwQjI0MDIwMDIzOENFMjAwNjgwMDQzMTAyQjg3Cis6MTAxMTUwMDAxNDQwMDAwNzI0MDIwMDI2OENBMjAwMTQwMDY2MTgyMTA3Cis6MTAxMTYwMDAwMDQzMTAyQjUwNDAwMDA3OEY4NDAwMkMyNDAyMDAyMkUzCis6MTAxMTcwMDAwRTAwMTY5N0EzODIwMDRDMTA1MTAwNDUyNDA0RkZGRjc3Cis6MTAxMTgwMDA4Rjg0MDAyQzI0MDNGRkY3OTA4MjAwMEQwMDQzMTAyNDZECis6MTAxMTkwMDBBMDgyMDAwRDhGODYwMDI4M0MwMzA4MDA4QzYzMzFBQ0QwCis6MTAxMUEwMDA4RjgyMDA1MDk0QzQwMEUwOEY4NTAwMkMwMDQzMTAyMUYyCis6MTAxMUIwMDAzMDg0N0ZGRjAwMDQyMDQwMDA0NDEwMjEzMDQzMDA3RjMyCis6MTAxMUMwMDAwMzQzMjAyMTNDMDMwMDBFMDA4MzIwMjEyNDAzRkY4MEUxCis6MTAxMUQwMDAwMDQzMTAyNEFGNDIwMDJDQTQ5MjAwMDA4Q0EyMDAyOEVGCis6MTAxMUUwMDAyNDQyMDAwMUFDQTIwMDI4OENBMjAwMkM4RTAzMDAyQzBCCis6MTAxMUYwMDAwMDQzMTAyMUFDQTIwMDJDOEUwMjAwMkNBQ0EyMDAzMEM3Cis6MTAxMjAwMDA4RTAyMDAxNEFDQTIwMDM0OTRBMjAwM0EyNDQyMDAwMUUxCis6MTAxMjEwMDBBNEEyMDAzQTk0QzYwMEUwM0MwMjA4MDA4QzQyMzFCMDFGCis6MTAxMjIwMDAyNEM0MDAwMTMwODM3RkZGMTQ2MjAwMTMwMDgwMzAyMTRBCis6MTAxMjMwMDAyNDAyODAwMDAwODIzMDI0MzBDMkZGRkYwMDAyMTNDMjZCCis6MTAxMjQwMDAzMDQyMDBGRjAwMDIxMDI3MEEwMDFBOEUwMDAyMzNDMDRECis6MTAxMjUwMDAwMjYwMjAyMTI0MDIwMDBEOEZCRjAwMjA4RkIzMDAxQ0VDCis6MTAxMjYwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyN0JEMDAyODc2Cis6MTAxMjcwMDAwQTAwMTY5N0EzODIwMDRDOEY4MjAwMjgwMjYwMjAyMTZBCis6MTAxMjgwMDAyNDA1MDAwMTBFMDAxNzk5QTQ0NjAwRTAwMDAwMjAyMTZCCis6MTAxMjkwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNEQ1Cis6MTAxMkEwMDA4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyODQ3Cis6MTAxMkIwMDAyN0JERkZFMEFGQjEwMDE0OEY5MTAwMzRBRkIwMDAxMDM0Cis6MTAxMkMwMDBBRkJGMDAxODhFMjYwMDEwM0MwMzA4MDA4QzYzMzFCMEJECis6MTAxMkQwMDAzMEMyM0ZGRjAwNDMxMDJCMTA0MDAwNUUwMDgwODAyMTkxCis6MTAxMkUwMDA4Rjg1MDAzODI0MDJGRjgwOTBBMzAwMEQwMDQzMTAyNDU2Cis6MTAxMkYwMDAzMDQyMDBGRjUwNDAwMDU4MDIwMDIwMjE4RjgyMDAzQzA1Cis6MTAxMzAwMDAxMDQwMDAwODAwMDYxMzgyOEY4MjAwMjg5NzYzMDAwQUFECis6MTAxMzEwMDAyNDA0RkZGRDk0NDIwMDYwMzA0MkZGRkYxMDQzMDA1NTVCCis6MTAxMzIwMDAwMDA2MTM4MjMwNDIwMDAzMTQ0MDAwMEUwMDAwMDAwMDRCCis6MTAxMzMwMDA5MjIyMDAwMjEwNDAwMDA1OEUyMzAwMjQ1MDYwMDAxNTA4Cis6MTAxMzQwMDA5MjIzMDAwMzBBMDAxQUM3MDIwMDIwMjE4Q0EyMDAyNDY1Cis6MTAxMzUwMDA1MDYyMDAxMDkyMjMwMDAzMDIwMDIwMjEwQTAwMUFDRkRECis6MTAxMzYwMDAyNDAyMDAwRjkwQTIwMDBEMzA0MjAwMDg1NDQwMDAwOUYyCis6MTAxMzcwMDA5MjIzMDAwMzAyMDAyMDIxMjQwMjAwMTAwRTAwMTY5NzgxCis6MTAxMzgwMDBBMzgyMDA0QzI0MDNGRkZGMTA0MzAwM0EyNDA0RkZGRjE0Cis6MTAxMzkwMDA5MjIzMDAwMzI0MDIwMDAyNTQ2MjAwMEM5MjIyMDAwM0Y0Cis6MTAxM0EwMDA4RjgyMDAzQzU0NDAwMDA5OTIyMjAwMDMwMjAwMjAyMTU5Cis6MTAxM0IwMDAyNDAyMDAyQzBFMDAxNjk3QTM4MjAwNEMyNDAzRkZGRjhBCis6MTAxM0MwMDAxMDQzMDAyQzI0MDRGRkZGOTIyMjAwMDMwMjIwMjgyMTU2Cis6MTAxM0QwMDAwMjAwMjAyMTM4NDYwMDEwMkNDNjAwMDEyQzQyMDAwMURBCis6MTAxM0UwMDAwRTAwMTZCNzAwNDYzMDI1MjQxMUZGRkYxMDUxMDAyMUQyCis6MTAxM0YwMDAyNDA0RkZGRjhGODMwMDNDMTA2MDAwMTIwMjAwMjAyMUI0Cis6MTAxNDAwMDAzQzAyMDgwMDhDNDIzMThDMDA0MzEwMkIxNDQwMDAwNjMzCis6MTAxNDEwMDAwMDAwMDAwMDAwMDAyODIxMEUwMDE3RTYyNDA2MDAwMTRECis6MTAxNDIwMDAwQTAwMUIwRDAwMDAyMDIxMjQwMjAwMkQwRTAwMTY5NzNCCis6MTAxNDMwMDBBMzgyMDA0QzEwNTEwMDBGMjQwNEZGRkYwQTAwMUIwRDczCis6MTAxNDQwMDAwMDAwMjAyMTBFMDAxNzk5MjQwNTAwMDEwQTAwMUIwRDQxCis6MTAxNDUwMDAwMDAwMjAyMTAyMDAyMDIxMjQwMjAwMEQ4RkJGMDAxODZGCis6MTAxNDYwMDA4RkIxMDAxNDhGQjAwMDEwMjdCRDAwMjAwQTAwMTY5NzFFCis6MTAxNDcwMDBBMzgyMDA0QzhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMEYyCis6MTAxNDgwMDAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjA5MzgzMDA0MDY2Cis6MTAxNDkwMDAyN0JERkZFMDI0MDIwMDAyQUZCMTAwMTRBRkIwMDAxMDdFCis6MTAxNEEwMDAwMDgwODgyMUFGQkYwMDE4MDAwMDgwMjExMDYyMDA4Q0VFCis6MTAxNEIwMDAyNDA0RkZGRDk3ODUwMDQyOEY4MzAwNDQzMEEyRkZGRjg0Cis6MTAxNEMwMDAwMDQzMTAyQjU0NDAwMDdEOEY4NDAwNDgwRTAwMTU1OEI3Cis6MTAxNEQwMDAwMDAwMDAwMDNDMDIwODAwMjQ0Mjc5RjQwMjIwMjAyMTkwCis6MTAxNEUwMDAwMDQwMjgyMTBFMDAxNzFFQUY4MjAwMzQyNDA5RkZGRkEwCis6MTAxNEYwMDAxMDQ5MDA3QjI0MDRGRkZGM0MwODA4MDA4RDA4N0EwNDkzCis6MTAxNTAwMDAzQzAyMDgwMDhDNDIzMUIwM0MwMzA4MDA5MDYzNzlGNDNGCis6MTAxNTEwMDAzMTA0M0ZGRjAwODIxMDJCMTA0MDAwMUIzMDY3MDAzRjVBCis6MTAxNTIwMDAzQzAyMDgwMDhDNDIzMUE4OEY4MzAwNTAwMDA0MjE4MEM3Cis6MTAxNTMwMDAwMDYyMTgyMTAwNjQxODIxMzA2MjAwN0YwMzQyMjgyMUQ0Cis6MTAxNTQwMDAzQzAyMDAwQzAwQTIyODIxM0MwMjAwODAzNDQyMDAwMTMxCis6MTAxNTUwMDAzMDY2MDA3ODAwQzIzMDI1MjQwMkZGODAwMDYyMTAyNDJCCis6MTAxNTYwMDBBRjQyMDAyODMwNjQwMDA3QUY0MjA4MDQ4RjgyMDAyODkxCis6MTAxNTcwMDAwMzQ0MjAyMTI0ODQwOTQwQUY0NjA4MTRBRjg1MDAyQzgxCis6MTAxNTgwMDBBRjg0MDAzOEFDNDMwMTE4OTM4MzAwNDAyNDAyMDAwMzY5Cis6MTAxNTkwMDAxNDYyMDAzQjI0MDIwMDAxMjQwMjAwMjYxMEUyMDAzREY4Cis6MTAxNUEwMDAyOEUyMDAyNzEwNDAwMDEzMjQwMjAwMzIyNDAyMDAyMjA3Cis6MTAxNUIwMDAxMEUyMDAzODI4RTIwMDIzMTA0MDAwMDgyNDAyMDAyNDMyCis6MTAxNUMwMDAyNDAyMDAyMDEwRTIwMDI0MjQwMjAwMjExMEUyMDAxRTY4Cis6MTAxNUQwMDAwMjIwMjAyMTBBMDAxQjhDMjQwMjAwMEIxMEUyMDAyREE3Cis6MTAxNUUwMDAyNDAyMDAyNTEwRTIwMDEwMDIyMDIwMjEwQTAwMUI4QzlBCis6MTAxNUYwMDAyNDAyMDAwQjEwRTIwMDFBMjhFMjAwMzMxMDQwMDAwNjFCCis6MTAxNjAwMDAyNDAyMDAzRjI0MDIwMDMxMTBFMjAwMEIwMjIwMjAyMUJFCis6MTAxNjEwMDAwQTAwMUI4QzI0MDIwMDBCMTBFMjAwMTEwMjIwMjAyMTgyCis6MTAxNjIwMDAwQTAwMUI4QzI0MDIwMDBCMEUwMDE4NzkwMjIwMjAyMUQ2Cis6MTAxNjMwMDAwQTAwMUJBNzAwNDA4MDIxMEUwMDE5RkIwMjIwMjAyMTc4Cis6MTAxNjQwMDAwQTAwMUJBNzAwNDA4MDIxMEUwMDFBOUMwMjIwMjAyMUM2Cis6MTAxNjUwMDAwQTAwMUJBNzAwNDA4MDIxMTUwOTAwMEUwMDAwMDAwMEIxCis6MTAxNjYwMDAwRTAwMTkyMDAyMjAyMDIxMEEwMDFCQTcwMDQwODAyMTIzCis6MTAxNjcwMDAwRTAwMTY5N0EzODIwMDRDMEEwMDFCQTcwMDQwODAyMTkxCis6MTAxNjgwMDAxNDYyMDAxNzAyMDAyMDIxMjQwMjAwMjMxNEUyMDAwNTQ2Cis6MTAxNjkwMDAyNDAyMDAwQjBFMDAxOTkyMDIyMDIwMjEwQTAwMUJBNzMxCis6MTAxNkEwMDAwMDQwODAyMTAyMjAyMDIxQTM4MjAwNEMwRTAwMTY5N0NBCis6MTAxNkIwMDAyNDEwRkZGRjBBMDAxQkE4MDIwMDIwMjEzMEE1MDBGRjE0Cis6MTAxNkMwMDAwRTAwMTU5NTI0MDYwMDAxOTc4MzAwNDI4RjgyMDA0NDg2Cis6MTAxNkQwMDBBNzgwMDA0MjAwNDMxMDIzQUY4MjAwNDQwMjAwMjAyMTczCis6MTAxNkUwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMTQwCis6MTAxNkYwMDAwM0UwMDAwODI3QkQwMDIwMjdCREZGRTBBRkIxMDAxNEM0Cis6MTAxNzAwMDBBRkJGMDAxOEFGQjAwMDEwOEY0NjAxMjgzQzAzMDgwMDlGCis6MTAxNzEwMDA4QzYzMzFBMDI0MDJGRjgwQUY4NjAwNTAwMEMzMTgyMUUzCis6MTAxNzIwMDAzMDY1MDA3RjAzNDUyODIxMDA2MjE4MjQzQzAyMDAwQTJFCis6MTAxNzMwMDBBRjQzMDAyNDAwQTIyODIxOTBBMjAwNjIwMDgwODgyMUVCCis6MTAxNzQwMDBBRjg1MDAyODMwNDIwMEZGMDAwMjExMDJBMzgyMDA0MDUyCis6MTAxNzUwMDA5MEEyMDBCQzMwNDIwMDAyMTQ0MDAwMDIyNDAzMDAzNDc2Cis6MTAxNzYwMDAyNDAzMDAzMDhGODIwMDI4QTM4MzAwMzA5MzgzMDA0MDNECis6MTAxNzcwMDA4QzQyMDBDMEEzODAwMDRDQUY4MjAwNDQyNDAyMDAwNENECis6MTAxNzgwMDAxMDYyMDAzMDhGODQwMDQ0OEUyNDAwMDQ1MDgwMDAyREFECis6MTAxNzkwMDA4Rjg0MDA0NDhFMjIwMDEwMzA4M0ZGRkZBNzg0MDA0MjE0Cis6MTAxN0EwMDAxMDYwMDAxRkFGODIwMDQ4OEY4MzAwMjgyNDA1RkY4MDRGCis6MTAxN0IwMDAwMjIwMjAyMTkwNjIwMDYzMDBBMjEwMjQzMDQyMDBGRjJBCis6MTAxN0MwMDAxNDQwMDAwRDAwMDAwMDAwMEUwMDFCMTM5NzkwMDA0MjEzCis6MTAxN0QwMDAxMDQwMDAxMDAwNDAxODIxMjQwMkZGRkQ1NDYyMDAxMTQ3Cis6MTAxN0UwMDA4RTIzMDAyMDAyMDAyODIxMEUwMDE1MzYwMjIwMjAyMTIxCis6MTAxN0YwMDAwQTAwMUJGOThFMjMwMDIwOTA2MjAwNjMwMEEyMTAyNENGCis6MTAxODAwMDAzMDQyMDBGRjEwNDAwMDAzMDIyMDIwMjEwRTAwMTg1QjMwCis6MTAxODEwMDAwMDAwMDAwMDk3ODIwMDQyMTQ0MEZGRTQ4RjgzMDAyOEZDCis6MTAxODIwMDA4RTIzMDAyMDMwNjIwMDA0MTA0MDAwMDY4Rjg0MDA0NEE0Cis6MTAxODMwMDAyNDAyRkZGQjAwNjIxMDI0MEUwMDE1NEFBRTIyMDAyMDk1Cis6MTAxODQwMDA4Rjg0MDA0NDhGODMwMDI4OEZCRjAwMTg4RkIxMDAxNDRECis6MTAxODUwMDA4RkIwMDAxMDI0MDIwMDAxMjdCRDAwMjAwM0UwMDAwODIzCis6MTAxODYwMDBBQzY0MDBDMDMwQTUwMEZGMjQwMzAwMDEyNEE5MDAwMURFCis6MTAxODcwMDAwMDY5MTAyQjEwNDAwMDBDMDAwMDQwMjEyNDBBMDAwMUQ4Cis6MTAxODgwMDAwMEEzMTAyMzAwNEEzODA0MjQ2MzAwMDEzMDgyMDAwMUMxCis6MTAxODkwMDAwMDY5MzAyQjEwNDAwMDAyMDAwNDIwNDIwMTA3NDAyNTVGCis6MTAxOEEwMDA1NEMwRkZGODAwQTMxMDIzMDNFMDAwMDgwMTAwMTAyMTNBCis6MTAxOEIwMDAyN0JERkZFMDNDMDIxRURDQUZCMjAwMThBRkIxMDAxNDQwCis6MTAxOEMwMDBBRkJGMDAxQ0FGQjAwMDEwMzQ1MjZGNDEwMDAwODgyMTQwCis6MTAxOEQwMDAyNDA1MDAwODBFMDAxQzA5MDIyMDIwMjEwMDExODA4MDMwCis6MTAxOEUwMDAzQzA3MDgwMDI0RTc3NUY0MDAwMjE2MDAwMjA3MTgyMURGCis6MTAxOEYwMDBBQzYyMDAwMDAwMDAyODIxMjRBMjAwMDEzMDQ1RkZGRjU3Cis6MTAxOTAwMDA4QzYyMDAwMDJDQTYwMDA4MDQ0MTAwMDIwMDAyMjA0MDY2Cis6MTAxOTEwMDAwMDkyMjAyNjE0QzBGRkY4QUM2NDAwMDAwMjA3ODAyMTZBCis6MTAxOTIwMDA4RTA0MDAwMDBFMDAxQzA5MjQwNTAwMjAyNjIzMDAwMTVGCis6MTAxOTMwMDAzMDcxRkZGRjJFMjMwMTAwMTQ2MEZGRTVBRTAyMDAwMEFFCis6MTAxOTQwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDMxCis6MTAxOTUwMDAwM0UwMDAwODI3QkQwMDIwM0MwMjA4MDAyNDQyNkVCOEM2Cis6MTAxOTYwMDAzQzAxMDgwMEFDMjI3NUU4M0MwMjA4MDAyNDQyNTQzMEQ3Cis6MTAxOTcwMDAzQzAxMDgwMEFDMjI3NUVDMjQwMjAwMDYzQzAxMDgwMDgyCis6MTAxOTgwMDBBMDIyNzVGMDBBMDAxQzFDMDAwMDAwMDAyN0JERkZEODMzCis6MTAxOTkwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCRjAwMjBBRkIxMDAxNDRFCis6MTAxOUEwMDBBRkIwMDAxMDhGNTEwMTQwOEY0ODAxNDgwMDA4OTQwMkU5Cis6MTAxOUIwMDAzMjQzMDBGRjMxMTMwMEZGOEY0MjAxQjgwNDQwRkZGRUE1Cis6MTAxOUMwMDAyNzUwMDE4MEFFMTEwMDAwOEY0MjAxNDRBRTAyMDAwNDk2Cis6MTAxOUQwMDAyNDAyMDAwMkE2MTIwMDA4QTIwMjAwMEIyNDAyMDAxNDM2Cis6MTAxOUUwMDBBRTEzMDAyNDEwNjIwMDI1Mjg2MjAwMTUxMDQwMDAwODg0Cis6MTAxOUYwMDAyNDAyMDAxNTI0MDIwMDEwMTA2MjAwMzAyNDAyMDAxMjlDCis6MTAxQTAwMDAxMDYyMDAwOThGQkYwMDIwMEEwMDFENDY4RkIzMDAxQzIyCis6MTAxQTEwMDAxMDYyMDA3MDI0MDIwMDIyMTA2MjAwMzc4RkJGMDAyMDg1Cis6MTAxQTIwMDAwQTAwMUQ0NjhGQjMwMDFDM0MwMjA4MDA4QzQyMzFBMDA2Cis6MTAxQTMwMDAyNDAzRkY4MDAyMjIxMDIxMDA0MzEwMjRBRjQyMDAyNDFGCis6MTAxQTQwMDAzQzAyMDgwMDhDNDIzMUEwMDIyMjEwMjEzMDQyMDA3RjZCCis6MTAxQTUwMDAwMzQyMTgyMTNDMDIwMDBBMDA2MjE4MjExNjYwMDBCQ0YzCis6MTAxQTYwMDBBRjgzMDAyODkwNjIwMDYyMzA0MjAwMEYzNDQyMDAzMEExCis6MTAxQTcwMDBBMDYyMDA2MjBBMDAxRDQ1OEZCRjAwMjAzQzA0NjAwMDg4Cis6MTAxQTgwMDA4QzgzMkMwODNDMDJGMDAzMzQ0MkZGRkYwMDYyMTgyNEQwCis6MTAxQTkwMDBBQzgzMkMwODNDMDIwODAwOEM0MjMxQTA4QzgzMkMwOEJCCis6MTAxQUEwMDAyNDQyMDA3NDAwMDIxMDgyMDAwMjE0ODAwMDYyMTgyNTkzCis6MTAxQUIwMDBBQzgzMkMwODBBMDAxRDQ1OEZCRjAwMjAzQzAyMDgwMEEzCis6MTAxQUMwMDA4QzQyMzFBMDI0MDNGRjgwMDIyMjEwMjEwMDQzMTAyNDA1Cis6MTAxQUQwMDBBRjQyMDAyNDNDMDIwODAwOEM0MjMxQTAzQzAzMDAwQUMzCis6MTAxQUUwMDAwMjIyMTAyMTMwNDIwMDdGMDM0MjEwMjEwMDQzMTAyMUM2Cis6MTAxQUYwMDAwQTAwMUQ0NEFGODIwMDI4M0MwMjA4MDA4QzQyMzFBMDNECis6MTAxQjAwMDAyNDA1RkY4MDAyMjIxMDIxMDA0NTEwMjRBRjQyMDAyNDRBCis6MTAxQjEwMDAzQzAyMDgwMDhDNDIzMUEwMDIyMjEwMjEzMDQyMDA3RjlBCis6MTAxQjIwMDAwMzQyMTgyMTNDMDIwMDBBMDA2MjE4MjE5MDYyMDA2M0ZGCis6MTAxQjMwMDAwMEEyMTAyNDMwNDIwMEZGMTA0MDAwODVBRjgzMDAyODJGCis6MTAxQjQwMDAyNDYyMDA4ODk0NDMwMDEyM0MwMjA4MDA4QzQyMzFBOEIxCis6MTAxQjUwMDAzMDYzM0ZGRjAwMDMxOTgwMDIyMjEwMjEwMDQzMTAyMTRGCis6MTAxQjYwMDAzMDQzMDA3RjAzNDMyMDIxMDA0NTEwMjQzQzAzMDAwQzM4Cis6MTAxQjcwMDAwMDgzMjAyMUFGNDIwMDI4OTA4MjAwMEQwMEEyMTAyNDkzCis6MTAxQjgwMDAzMDQyMDBGRjEwNDAwMDcyQUY4NDAwMkM5MDgyMDAwREE0Cis6MTAxQjkwMDAzMDQyMDAxMDE0NDAwMDZGOEZCRjAwMjAwRTAwMTY2NjA4Cis6MTAxQkEwMDAwMDAwMDAwMDhGNDIwMUI4MDQ0MEZGRkUwMDAwMDAwMDZBCis6MTAxQkIwMDBBRTExMDAwMDhGNDIwMTQ0QUUwMjAwMDQyNDAyMDAwMjc0Cis6MTAxQkMwMDBBNjEyMDAwOEEyMDIwMDBCQUUxMzAwMjQwQTAwMUQ0NTU1Cis6MTAxQkQwMDA4RkJGMDAyMDI0MDZGRjgwMDIyNjEwMjRBRjQyMDAyMDgxCis6MTAxQkUwMDAzQzAyMDgwMDhDNDIzMUEwMzEwNDNGRkYwMDA0MjE4MEY4Cis6MTAxQkYwMDAwMjIyMTAyMTAwNDYxMDI0QUY0MjAwMjQzQzAzMDgwMEJBCis6MTAxQzAwMDA4QzYzMzFBODNDMDIwODAwOEM0MjMxQTAzMjI3MDA3RjRGCis6MTAxQzEwMDAwMjIzMTgyMTAyMjIxMDIxMDA2NDE4MjEzMDQyMDA3RjgzCis6MTAxQzIwMDAzMDY0MDA3RjAzNDIyODIxM0MwMjAwMEEwMDY2MTgyNDI5Cis6MTAxQzMwMDAwMEEyMjgyMTAzNDQyMDIxM0MwMjAwMEMwMDgyMjAyMTI0Cis6MTAxQzQwMDBBRjQzMDAyODNDMDIwMDA4MDM0NzE4MjEwMDYyOTAyMTlFCis6MTAxQzUwMDBBRjg1MDAyOEFGODQwMDJDMEUwMDE2NjYwMTAwODAyMTlECis6MTAxQzYwMDA4RjQyMDFCODA0NDBGRkZFOEY4MjAwMkM4Rjg0MDAyODMxCis6MTAxQzcwMDAyNzQ1MDE4MDkwNDIwMDBEQUNCMTAwMDBBNEIwMDAwNkUxCis6MTAxQzgwMDAwMDAyMTYwMDAwMDIxNjAzMDAwMjEwMjcwMDAyMzdDMkVECis6MTAxQzkwMDAxNEMwMDAxNjI0ODIwMDg4OTQ0MjAwMTIzMjAzM0ZGRkQxCis6MTAxQ0EwMDAzMDQyM0ZGRjE0NDMwMDEyMjQwMjYwODI5MDgzMDA2MzlECis6MTAxQ0IwMDAyNDAyRkY4MDAwNDMxMDI0MzA0MjAwRkY1MDQwMDAwQ0ZCCis6MTAxQ0MwMDAyNDAyNjA4MjkwODIwMDYyMzA0MjAwMEYzNDQyMDA0MDYxCis6MTAxQ0QwMDBBMDgyMDA2MjI0MDI2MDg0QTRBMjAwMDgyNDAyMDAwREY1Cis6MTAxQ0UwMDBBMEEyMDAwNTBBMDAxRDJGM0MwMjI3MDAyNDAyNjA4MkVBCis6MTAxQ0YwMDBBNEEyMDAwOEEwQTAwMDA1M0MwMjI3MDAwMDA2MUMwMENBCis6MTAxRDAwMDAwMDYyMTgyNTI0MDIwMDAyQTBBMjAwMEJBQ0EzMDAxMDYwCis6MTAxRDEwMDBBQ0EwMDAxNEFDQTAwMDI0QUNBMDAwMjhBQ0EwMDAyQzA3Cis6MTAxRDIwMDA4RTQyMDA0QzhGODQwMDJDQUNBMjAwMTg5MDgzMDAwREQyCis6MTAxRDMwMDAyNDAyRkY4MDAwNDMxMDI0MzA0MjAwRkYxMDQwMDAwNUMxCis6MTAxRDQwMDA4RkJGMDAyMDkwODIwMDBEMzA0MjAwN0ZBMDgyMDAwREU2Cis6MTAxRDUwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDBBCis6MTAxRDYwMDA4RkIwMDAxMDNDMDIxMDAwMjdCRDAwMjgwM0UwMDAwOERGCis6MDQxRDcwMDBBRjQyMDFCOEM1Cis6MEMxRDc0MDAwODAwMzNGODA4MDAzM0Y4MDgwMDMzNzA1MgorOjEwMUQ4MDAwMDgwMDMzQTgwODAwMzNEQzA4MDAzNDAwMDgwMDM0MDBFMQorOjA4MUQ5MDAwMDgwMDM0MDAwODAwMzJFMEY1Cis6MDgxRDk4MDAwQTAwMDEyMjAwMDAwMDAwMTYKKzoxMDFEQTAwMDAwMDAwMDAwMDAwMDAwMEQ3NDcwNjEzNTJFMzAyRTMwRjAKKzoxMDFEQjAwMDZBMzYwMDAwMDUwMDAwMDEwMDAwMDAwMDAwMDAwMDAwN0QKKzoxMDFEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKKzoxMDFERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMDFERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDFERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMDFFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMDFFMjAwMDAwMDAwMDAwMTAwMDAwMDMwMDAwMDAwMDAwMDAwMDBEOTIKKzoxMDFFMzAwMDAwMDAwMDBEM0MwMjA4MDAyNDQyMUI4MDNDMDMwODAwMDcKKzoxMDFFNDAwMDI0NjMyMDE0QUM0MDAwMDAwMDQzMjAyQjE0ODBGRkZEQ0QKKzoxMDFFNTAwMDI0NDIwMDA0M0MxRDA4MDAzN0JEMkZGQzAzQTBGMDIxRTQKKzoxMDFFNjAwMDNDMTAwODAwMjYxMDA0ODgzQzFDMDgwMDI3OUMxQjgwOUUKKzoxMDFFNzAwMDBFMDAwMTVBMDAwMDAwMDAwMDAwMDAwRDMwODRGRkZGM0EKKzoxMDFFODAwMDMwODIwMDA3OEY4NTAwMTgxMDQwMDAwMjI0ODMwMDA3NkQKKzoxMDFFOTAwMDMwNjRGRkY4MDA4NTMwMjEzMEM0MUZGRjAzNDQxODIxNEYKKzoxMDFFQTAwMDI0N0I0MDAwQUY4NTAwMUNBRjg0MDAxODAzRTAwMDA4Q0QKKzoxMDFFQjAwMEFGNDQwMDg0MzA4NEZGRkYzMDgyMDAwNzhGODUwMDIwMEMKKzoxMDFFQzAwMDhGODYwMDI4MTA0MDAwMDIyNDgzMDAwNzMwNjRGRkY4NEEKKzoxMDFFRDAwMDAwODUyMDIxMDA4NjE4MkIxNDYwMDAwMkFGODUwMDI0QTUKKzoxMDFFRTAwMDAwODYyMDIzMDM0NDI4MjEzNDA2ODAwMEFGODQwMDIwOEMKKzoxMDFFRjAwMEFGNDQwMDgwMDBBNjIwMjEwM0UwMDAwOEFGODQwMDM4MzIKKzoxMDFGMDAwMDI3QkRGRkQ4QUZCMzAwMUNBRkIyMDAxOEFGQjAwMDEwQjAKKzoxMDFGMTAwMEFGQkYwMDI0QUZCNDAwMjBBRkIxMDAxNDNDMDg2MDA4OEMKKzoxMDFGMjAwMDhEMTQ1MDAwMjQxOEZGN0YzQzFBODAwMDAyOTg5ODI0REEKKzoxMDFGMzAwMDM2NzIzODBDQUQxMjUwMDA4RjUxMDAwODNDMDc2MDFDRkYKKzoxMDFGNDAwMDNDMDg2MDAwMzYzMDAwMDFBRjUwMDAwOEFGODAwMDE4MzgKKzoxMDFGNTAwMEFGNDAwMDgwQUY0MDAwODQ4Q0U2MDAwODhEMEYwODA4NzkKKzoxMDFGNjAwMDNDMDc2MDE2OENFQzAwMDAzMUVFRkZGMDM5Q0EwMDEwMUYKKzoxMDFGNzAwMDNDMERGRkZGMzQwQjgwMDAzQzAzMDA4MDAzNEI0ODIxRTUKKzoxMDFGODAwMDJENDQwMDAxMDE4RDI4MjQzQzAyNTM1MzNDMDEwODAwREMKKzoxMDFGOTAwMEFDMjMwNDIwQUY4OTAwMzhBRjg2MDAyOEFGODQwMDEwM0UKKzoxMDFGQTAwMDI3NUI0MDAwMTRBMjAwMDMzNEUzN0MwMDhDRjkwMDA0OUEKKzoxMDFGQjAwMDAzMjgxODIxOEM3RjAwN0M4QzY1MDA3ODNDMDI4MDAwMEYKKzoxMDFGQzAwMDM0NTIwMDcwQUY4NTAwM0NBRjlGMDA0MDNDMTMwODAwQzYKKzoxMDFGRDAwMDI2NzMxQkM0MDI0MEEwMjE4RTQ4MDAwMDhGNDYwMDAwREIKKzoxMDFGRTAwMDM4QzMwMDAxMzA2NDAwMDExMDgwMDAxN0FGODgwMDM0NEUKKzoxMDFGRjAwMDAyODA0ODIxOEQyRDAwMDAzQzE5MDgwMDhGMzkwNDVDQjcKKzoxMDIwMDAwMDNDMTEwODAwOEUzMTA0NTgwMUE4RjgyMzAzM0Y3ODIxQzEKKzoxMDIwMTAwMDAwMDA0MDIxMDIyODM4MjEwMUZGODAyQjAwRjA3MDIxQjAKKzoxMDIwMjAwMDNDMDEwODAwQUMyRjA0NUMzQzAxMDgwMEFDMkUwNDU4QjUKKzoxMDIwMzAwMDhGNEMwMDAwMzk4QjAwMDEzMTZBMDAwMTE1NDBGRkVEMjMKKzoxMDIwNDAwMDAxQTA0MDIxQUY4RDAwMzQ4RTRFMDAwMDNDMEMwODAwRjIKKzoxMDIwNTAwMDhEOEMwNDVDM0MwQTA4MDA4RDRBMDQ1ODAxQzg2ODIzMzIKKzoxMDIwNjAwMDAxOEQyODIxMDAwMDU4MjEwMEFEMzAyQjAxNEIyMDIxOEIKKzoxMDIwNzAwMDAwODYxMDIxM0MwMTA4MDBBQzI1MDQ1QzNDMDEwODAwRUUKKzoxMDIwODAwMEFDMjIwNDU4OEY0NTAxMDg4RjQ0MDEwMDMwQTkyMDAwN0MKKzoxMDIwOTAwMEFGODUwMDAwQUY4NDAwMEMxMTIwMDAwQTAwQTAzMDIxQTEKKzoxMDIwQTAwMDNDMDcwODAwOENFNzA0MkMyNEVGMDAwMTNDMDEwODAwRTkKKzoxMDIwQjAwMEFDMkYwNDJDM0MxMDQwMDBBRjUwMDEzODBBMDAwMTkwQjYKKzoxMDIwQzAwMDAwMDAwMDAwMzBCMDAyMDAxNjAwMDAxNDI0MTEwRjAwQzAKKzoxMDIwRDAwMDEwOTEwMDEyMjQwNzBEMDAxMDg3MDIzMzMwQjAwMDA2NjMKKzoxMDIwRTAwMDUyMDBGRkY1M0MxMDQwMDA5MzZEMDAwMDI0MEMwMDEwREUKKzoxMDIwRjAwMDMxQTYwMEYwMTBDQzAyNjkyNDBFMDA3MDEwQ0UwMkRENzMKKzoxMDIxMDAwMDhGOEIwMDE0MjU2NzAwMDFBRjg3MDAxNDNDMTA0MDAwM0UKKzoxMDIxMTAwMEFGNTAwMTM4MEEwMDAxOTAwMDAwMDAwMDk3NDgwMTA0MDgKKzoxMDIxMjAwMDExMDBGRkU1M0MxMDQwMDAzMEI4NDAwMDE3MDAwMEEyNEQKKzoxMDIxMzAwMDAwMDAwMDAwOEY1OTAxNzgwNzIwRkZGRThGODcwMDM4Q0MKKzoxMDIxNDAwMDI0MDkwMDA4MjQwNTA4MDA4Q0UzMDAwOEFGNDUwMTc4NDUKKzoxMDIxNTAwMEE3NDkwMTQwQTc0MDAxNDI5NzQyMDEwNDhGODYwMDAwMzEKKzoxMDIxNjAwMDMwNDlGRkZGMzBERjAwMDExM0UwMDJENTAxMjA0MDIxOUMKKzoxMDIxNzAwMDI1MjRGRkZFMjQwQTAwMDJBNzRBMDE0NjMwODhGRkZGRkIKKzoxMDIxODAwMEE3NDQwMTQ4M0MwQjA4MDA4RDZCMDQzQzE1NjAwMkM0NTkKKzoxMDIxOTAwMDhGOEYwMDBDMzBDMzAwMjAxNDYwMDAwMjI0MDQwMDA5NUIKKzoxMDIxQTAwMDI0MDQwMDAxMzBDRDBDMDAyNDBDMDQwMDUxQUMwMDAxQ0IKKzoxMDIxQjAwMDM0ODQwMDA0QTc0NDAxNEEzQzA1MDgwMDhDQTUwNDIwOEYKKzoxMDIxQzAwMDNDMDIwMDQ4M0MxOTAwMDEwMEEyRjgyNTMwRDgwMDAyNkEKKzoxMDIxRDAwMDAzRjkyODI1MTMwMDAwMDQwMDAwMTgyMTNDMDQwMTAwMjUKKzoxMDIxRTAwMDAwQTQyODI1MjQwMzAwMDEzMENBMDAwNDUxNDAwMDA1NDIKKzoxMDIxRjAwMEFGODMwMDA4M0MwNjAwMTAwMEE2MjgyNTI0MDMwMDAxMzgKKzoxMDIyMDAwMEFGODMwMDA4QUY0NTEwMDAwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMDIyMTAwMDAwMDAwMDAwMDAwMDAwMDA4RjgzMDAwODEwNjAwMDIzMTEKKzoxMDIyMjAwMDAwMDAwMDAwOEY0QjEwMDAwNTYxRkZGRTAwMDAwMDAwNjEKKzoxMDIyMzAwMDEwNjAwMDFFMDAwMDAwMDA4RjREMTAwMDNDMDMwMDIwQzUKKzoxMDIyNDAwMDAxQTM2MDI0MTE4MDAwMTk4RjhGMDAwMDMxRUUwMDAyN0QKKzoxMDIyNTAwMDExQzAwMDE2MDAwMDAwMDA5NzUwMTAxNDE2MDAwMDEzNjMKKzoxMDIyNjAwMDAwMDAwMDAwOTc0NTEwMDgzMEJGRkZGRjI3RjgwMDA2NjgKKzoxMDIyNzAwMDAwMThDODgyMDAxOTMwODAwMEM3MjgyMTMzMTEwMDAxREUKKzoxMDIyODAwMDMzMDMwMDAzMTIyMDAzMjA4Q0EyMDAwMDAwMDAwMDBEODUKKzoxMDIyOTAwMDAwQzdGODIxQUZFMjAwMDAzQzE5MDgwMDhGMzkwNDMwNzQKKzoxMDIyQTAwMDI3MjYwMDAxM0MwMTA4MDBBQzI2MDQzMDhGNkEwMDAwOUMKKzoxMDIyQjAwMDM0MDVGRkZGQUY4QTAwMDQ4Q0UyMDAwMDEwNDUwMjlBNEIKKzoxMDIyQzAwMDAwMDAyMDIxOENFNTAwMDAzMEJGMDEwMDEzRTAwMjdFRjkKKzoxMDIyRDAwMDAxMDAyMDIxM0MwNzA4MDA4Q0U3MDQ3NDNDMTAwODAwMzIKKzoxMDIyRTAwMDhFMTAwNDRDMDBFODU4MjEzQzE4MDgwMDhGMTgwNDcwMjgKKzoxMDIyRjAwMDAxNjg4ODJCM0MwODA4MDA4RDA4MDQ0ODAwMDA3ODIxRkMKKzoxMDIzMDAwMDAyMDQ2MDIxMDMwRjE4MjEwMTg0NzAyQjAxMEY2ODIxNDIKKzoxMDIzMTAwMDAwNzE1MDIxMDFBRTEwMjEzQzAxMDgwMEFDMkMwNDRDOEUKKzoxMDIzMjAwMDNDMDEwODAwQUMyMjA0NDgzQzAxMDgwMEFDMkIwNDc0QkEKKzoxMDIzMzAwMDNDMDEwODAwQUMyQTA0NzA4RjhEMDAxODAxMjAzMDIxNjgKKzoxMDIzNDAwMDMxMjkwMDA3MjVBRTAwMDgzMUMyMUZGRjAzNDI2MDIxN0EKKzoxMDIzNTAwMEFGOEQwMDFDQUY4MjAwMTgyNTlCNDAwMEFGNDIwMDg0NjcKKzoxMDIzNjAwMDExMjAwMDAzOEY5MDAwMjAyNEM4MDAwNzMxMDZGRkY4RDkKKzoxMDIzNzAwMDhGODQwMDI4MDBEMDI4MjEwMEE0NzgyQjE1RTAwMDAyQ0IKKzoxMDIzODAwMEFGOTAwMDI0MDBBNDI4MjMwMzQ1MjAyMTM0MDM4MDAwQkIKKzoxMDIzOTAwMDAwODMxMDIxM0MwNjEwMDBBRjg1MDAyMEFGODIwMDM4N0EKKzoxMDIzQTAwMEFGNDUwMDgwQUY0NjAxNzg4RjhCMDAxNDI1NjcwMDAxOTAKKzoxMDIzQjAwMDBBMDAwMUREQUY4NzAwMTQ4RjYyMDAwODhGNjcwMDAwRkMKKzoxMDIzQzAwMDI0MTEwMDMwMDAwN0M2MDIzMzAzMDBGMDEwNzEwMEEyOTAKKzoxMDIzRDAwMDI0MTkwMDQwMTQ3OUZGNEI4RjhCMDAxNDhGNEEwMTc4MjkKKzoxMDIzRTAwMDA1NDBGRkZFMzBBNzAyMDAxNEUwMDAwMzAwMDUxMjgyNDIKKzoxMDIzRjAwMDAwMDAwMDBEMDAwNTEyODIzMDUwMDAwMzAwMTA0OTAwNUIKKzoxMDI0MDAwMDAxMzA3MDIxMDAwRTY4ODAwMUIwNjAyMTAwMEM1ODgwRkUKKzoxMDI0MTAwMDAxNzM4MDIxOEUwODAwMDAxNTAwMDAwMjAwMDAwMDAwRkEKKzoxMDI0MjAwMDAwMDAwMDBEOEY2RjAwMDQwNUUyMDJCMTkyMDMwMDA2NjgKKzoxMDI0MzAwMDkyMDcwMDA1OTIwRjAwMDQzQzAyMDAwMTAwMDcyODgwNkIKKzoxMDI0NDAwMDAwQjA2MDIxOEQ4OTAwMTgyNzcxMDAwODI1RUUwMDA1NzUKKzoxMDI0NTAwMDAxMjI2ODIxMDAwRTMwODJBRDhEMDAxODAyMjAyMDIxNUIKKzoxMDI0NjAwMDBFMDAwNTgwMjYwNTAwMTQ5MjBCMDAwNjhGN0YwMDA0RTUKKzoxMDI0NzAwMDNDMDg3RkZGMDAwQjIwODAwMDkxMzAyMThDQzMwMDA0QkEKKzoxMDI0ODAwMDM1MEFGRkZGMDNFQUM4MjQwMDc5QzAyMUFDRDgwMDA0NTQKKzoxMDI0OTAwMDkyMDcwMDA1OTIwOTAwMDQ5NjBEMDAwODAwMDcyODgwQTUKKzoxMDI0QTAwMDAwQjFGODIxOEZFRjAwMDA5NzQyMDEwNDNDMDdGRkZGQzUKKzoxMDI0QjAwMDAxRTc1MDI0MzA0RUZGRkYwMUM5NjAyMTAxOEQ1ODIzRjAKKzoxMDI0QzAwMDMxNjhGRkZGMDE0ODIwMjVBRkU0MDAwMDkyMDMwMDA3QjgKKzoxMDI0RDAwMDI0MTkwMDAxMTA3OTAyNjkyNDA2MDAwMzEwNjYwMjc5QUMKKzoxMDI0RTAwMDAwMDAwMDAwOEUxOTAwMTAyNDFGMDAwQUE3NUYwMTQwQTEKKzoxMDI0RjAwMEE3NTkwMTQyOTIwMzAwMDQ4Rjg2MDAwMDI0MDcwMDAxQkYKKzoxMDI1MDAwMEE3NDMwMTQ0QTc0MDAxNDY5NzU4MDEwNDMwRDEwMDAyNzcKKzoxMDI1MTAwMDNDMDUwMDQxQTc1ODAxNDgwMDAwMTgyMUE3NDcwMTRBN0YKKzoxMDI1MjAwMDEyMjAwMDAzMzBDQTAwMDQzQzA1MDE0MTI0MDMwMDAxQ0QKKzoxMDI1MzAwMDUxNDAwMDA1QUY4MzAwMDgzQzA4MDAxMDAwQTgyODI1ODIKKzoxMDI1NDAwMDI0MDMwMDAxQUY4MzAwMDhBRjQ1MTAwMDAwMDAwMDAwMjUKKzoxMDI1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGOEIwMDA4NTkKKzoxMDI1NjAwMDExNjAwMDA0MDAwMDAwMDA4RjQ0MTAwMDA0ODFGRkZFOTEKKzoxMDI1NzAwMDAwMDAwMDAwOEY2QTAwMDA5MjA3MDAwNDNDMDUwODAwN0MKKzoxMDI1ODAwMDhDQTUwNDQ0QUY4QTAwMDQ5NzVGMDEwNDNDMEYwODAwNDcKKzoxMDI1OTAwMDhERUYwNDQwMzBFMzAwRkYzM0Y5RkZGRjAwNzlDMDIxRTUKKzoxMDI1QTAwMDAwQjg2ODIxMDAwMDEwMjEyNEU2MDAwQTMwQzhGRkZGQUYKKzoxMDI1QjAwMDAxQjg0ODJCMDFFMjcwMjEwMUM5NjAyMTMxMTAwMDA3RTgKKzoxMDI1QzAwMDNDMDEwODAwQUMyRDA0NDQzQzAxMDgwMEFDMkMwNDQwNDQKKzoxMDI1RDAwMDEyMDAwMDAzOEY4RDAwMTgyNTBCMDAwNzMxNjhGRkY4RUIKKzoxMDI1RTAwMDAxMEQ3MDIxMzFDQzFGRkZBRjhEMDAxQ0FGOEMwMDE4ODYKKzoxMDI1RjAwMEFGNEMwMDg0OTc0NDAxMDQwMzRDODAyMTMwODRGRkZGREEKKzoxMDI2MDAwMDMwODgwMDA3MTEwMDAwMDMyNjFCNDAwMDI0ODkwMDA3QzIKKzoxMDI2MTAwMDMxMjRGRkY4OEY4MjAwMjA4Rjg1MDAyODAwODIyMDIxM0UKKzoxMDI2MjAwMDAwODU3ODJCMTVFMDAwMDJBRjgyMDAyNDAwODUyMDIzNkUKKzoxMDI2MzAwMDAzNDQ4ODIxMzQwNTgwMDAwMjI1MTAyMTNDMDYxMDAwNDcKKzoxMDI2NDAwMEFGODQwMDIwQUY4MjAwMzhBRjQ0MDA4MEFGNDYwMTc4RUQKKzoxMDI2NTAwMDBBMDAwMjg1OEY4QjAwMTQ4RjVGMDE3ODA3RTBGRkZFNzAKKzoxMDI2NjAwMDMwQUEwMjAwMTU0MDAwMDMwMDA1NDI4MjAwMDAwMDBENjAKKzoxMDI2NzAwMDAwMDU0MjgyMzEwMjAwMDMwMDAyNzEwMDAxQzI2ODIxOUMKKzoxMDI2ODAwMDAwMEQ2MDgwMDE4MjQ4MjEwMDA5Mjg4MDAwQjM4MDIxNkMKKzoxMDI2OTAwMDhFMEIwMDAwMTE2MDAwMDIwMDAwMDAwMDAwMDAwMDBEMjEKKzoxMDI2QTAwMDhGNkYwMDBDMDVFMDAxRjM4Rjg3MDAzODI0MTkwMDAxQkIKKzoxMDI2QjAwMEFFMTkwMDAwOENFMzAwMDhBMjAwMDAwNzhGNzgwMDA0MjgKKzoxMDI2QzAwMDAwMTgxQzAyMzA2NjAwRkYyNEQxMDAwNTAwMTEzMDgyODIKKzoxMDI2RDAwMDJDQzQwMDQxMTQ4MDAwMDJBMjAzMDAwNDAwMDAwMDBEN0QKKzoxMDI2RTAwMDhGNkIwMDA0M0MwRUZGRkYwMEUwMjgyMTMxNjRGRkZGRTgKKzoxMDI2RjAwMDI0OEYwMDBCMDAwRjQwODIwMDA4MTA4MDAwNDc0ODIxMDMKKzoxMDI3MDAwMDhEMkQwMDAwMjYwNDAwMTRBNjBCMDAwODAxQUU2MDI0RTUKKzoxMDI3MTAwMDBFMDAwNTgwQUQyQzAwMDA4RjVGMDEwODNDMEExMDAwMDAKKzoxMDI3MjAwMDAzRUEzODI0MTBFMDAxQTMwMDAwMDAwMDk3NDYwMTA0RUEKKzoxMDI3MzAwMDkyMDMwMDA3MjREMUZGRUMzNDY1MDAwMjMyMjRGRkZGMkUKKzoxMDI3NDAwMEEyMDUwMDA3OTYwNjAwMDgyQ0M3MDAxMzU0RTAwMDA1RjgKKzoxMDI3NTAwMDkyMDMwMDA3OTIwQTAwMDczNTVGMDAwMUEyMUYwMDA3REQKKzoxMDI3NjAwMDkyMDMwMDA3MjQwQjAwMDExMDZCMDFCQTI0MDkwMDAzMzcKKzoxMDI3NzAwMDEwNjkwMUNEOEY4ODAwMzgzMENGRkZGRjI1RTQwMDAyQkIKKzoxMDI3ODAwMDAwMDRDODgzMzMzRjAwRkYwMDFGMjg4MEEyMTkwMDA1MDIKKzoxMDI3OTAwMDAwQTg1ODIxOEQ3ODAwMDA5NzUxMDEwNDNDMDNGRkZGRTkKKzoxMDI3QTAwMDAzMDM2MDI0MzIyMkZGRkYwMDRGNzAyMzI1Q0RGRkZFN0MKKzoxMDI3QjAwMDAxOEQ0ODI1QUQ2OTAwMDA5MjA2MDAwNTNDMDJGRkY2MzgKKzoxMDI3QzAwMDM0NEVGRkZGMzBDQTAwRkYwMDBBMzg4MDAwRjAyMDIxOUQKKzoxMDI3RDAwMDkwOTkwMDE0M0MxRkZGN0YzN0U3RkZGRjMzMjMwMDBGNjIKKzoxMDI3RTAwMDAwNjY3ODIxMzFGODAwRkYwMDE4Mjg4MDAwQjA4ODIxQTkKKzoxMDI3RjAwMDhFMkQwMDIwMDBBODYwMjFBMjBGMDAwNjAxQUU0ODI0MDMKKzoxMDI4MDAwMEFFMEQwMDBDQUQ4OTAwMEM5MjBCMDAwNjhFMDQwMDBDN0UKKzoxMDI4MTAwMDAxMjdGODI0MDAwQjUwODAwMTUwQzgyMTk3MjYwMDI2N0MKKzoxMDI4MjAwMDAxNDhDMDIxMDA4NzQwMjRBRjI2MDAyNEFFMDgwMDBDRDgKKzoxMDI4MzAwMEFGM0YwMDIwQUYwNjAwMTA4Rjg2MDAwMDI0MEMwMDEwNzAKKzoxMDI4NDAwMDI0MDkwMDAyQTc0QzAxNDBBNzQwMDE0MkE3NDAwMTQ0Q0YKKzoxMDI4NTAwMEE3NDkwMTQ2OTc0QjAxMDQyNDA3MDAwMTMwQzgwMDAyMzQKKzoxMDI4NjAwMDI1NkFGRkZFQTc0QTAxNDgzQzA1MDAwOUE3NDcwMTRBMUYKKzoxMDI4NzAwMDExMDAwMDAzMDAwMDE4MjEzQzA1MDEwOTI0MDMwMDAxOTgKKzoxMDI4ODAwMDMwQ0QwMDA0NTFBMDAwMDVBRjgzMDAwODNDMDYwMDEwQzUKKzoxMDI4OTAwMDAwQTYyODI1MjQwMzAwMDFBRjgzMDAwOEFGNDUxMDAwREYKKzoxMDI4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKKzoxMDI4QjAwMDkyMTgwMDA0MjcxMTAwMDIzMjJGMDAwNzAwMEYxMDIzODYKKzoxMDI4QzAwMDMwNEUwMDA3QUUwRTAwMTA4RjkwMDAwODEyMDAwMDA0N0EKKzoxMDI4RDAwMDAwMDAwMDAwOEY0MzEwMDAwNDYxRkZGRTAwMDAwMDAwQjQKKzoxMDI4RTAwMDhGNzgwMDAwOEY4RjAwMTgzQzEwMDgwMDhFMTAwNDQ0NzEKKzoxMDI4RjAwMEFGOTgwMDA0OTc1MTAxMDQyNUU2MDAxMDMwQ0ExRkZGNkQKKzoxMDI5MDAwMDMyMjJGRkZGQUY4RjAwMUNBRjhBMDAxOEFGNEEwMDg0NEQKKzoxMDI5MTAwMDI0NDlGRkZFM0MwQjA4MDA4RDZCMDQ0MDk3NEUwMTA0RDgKKzoxMDI5MjAwMDAxMjA2ODIxMDAwOTY3QzMwMjBEMjgyMTMxQzlGRkZGN0EKKzoxMDI5MzAwMDAwQUQ0MDJCMDE2QzM4MjEwMEU4MjAyMTAzNEFGODIxMkEKKzoxMDI5NDAwMDMxMzkwMDA3M0MwMTA4MDBBQzI1MDQ0NDNDMDEwODAwNzMKKzoxMDI5NTAwMEFDMjQwNDQwMTMyMDAwMDMyN0ZCNDAwMDI1MjMwMDA3N0MKKzoxMDI5NjAwMDMwNjlGRkY4OEY5RjAwMjA4Rjg0MDAyODAxM0YzODIxQjUKKzoxMDI5NzAwMDAwRTRDODJCMTcyMDAwMDJBRjlGMDAyNDAwRTQzODIzOTYKKzoxMDI5ODAwMDAzNDcyMDIxMzQwNTgwMDAwMDg1MTAyMTNDMDYxMDAwRkIKKzoxMDI5OTAwMEFGODcwMDIwQUY4MjAwMzhBRjQ3MDA4MEFGNDYwMTc4OTQKKzoxMDI5QTAwMDBBMDAwMjg1OEY4QjAwMTQ5NzU4MDEwNDEzMDBGREMyQTIKKzoxMDI5QjAwMDNDMTA0MDAwOEY0MzAxNzgwNDYwRkZGRTMwQjk0MDAwQjYKKzoxMDI5QzAwMDEzMjAwMDAzM0MwNDAwMDgwMDAwMDAwRDNDMDQwMDA4MzQKKzoxMDI5RDAwMEFGNDQwMTQwMjQwODA4MDBBRjQ4MDE3ODhGOEIwMDAwMDUKKzoxMDI5RTAwMDk3NEEwMTA0MzE3RjAwMDExM0UwMDBFOTMxNDZGRkZGRkYKKzoxMDI5RjAwMDI0RDBGRkZFMjQwQzAwMDJBNzRDMDE0NkE3NTAwMTQ4M0EKKzoxMDJBMDAwMDhGOEYwMDE4MjQwNTAwMERBNzQ1MDE0QThGNzEwMDAwMjMKKzoxMDJBMTAwMDI1RTIwMDA4MzA0OTFGRkYwMzQ5NzAyMTMwQ0QwMDA3MkYKKzoxMDJBMjAwMEFGOTEwMDA0QUY4RjAwMUNBRjg5MDAxODAwQzAzODIxOUYKKzoxMDJBMzAwMEFGNDkwMDg0MTFBMDAwMDMyNURCNDAwMDI0QzYwMDA3MzUKKzoxMDJBNDAwMDMwQzdGRkY4OEY5ODAwMjA4Rjg0MDAyODAwRjgzMDIxQ0QKKzoxMDJBNTAwMDAwQzQzODJCMTRFMDAwMDJBRjk4MDAyNDAwQzQzMDIzRDcKKzoxMDJBNjAwMDhGOEEwMDE0MDM0NjU4MjEzNDA4ODAwMDAxNjhGODIxMzkKKzoxMDJBNzAwMDI1NTkwMDAxM0MwMzEwMDAzQzEwNDAwMEFGODYwMDIwQTcKKzoxMDJBODAwMEFGOUYwMDM4QUY0NjAwODBBRjQzMDE3OEFGOTkwMDE0ODQKKzoxMDJBOTAwMEFGNTAwMTM4MEEwMDAxOTAwMDAwMDAwMDhGNjkwMDAwNkIKKzoxMDJBQTAwMDk3NDQwMTA0MzEyN0ZGRkYzMDg4RkZGRjhGNEYwMTc4RTMKKzoxMDJBQjAwMDA1RTBGRkZFMzBGRjAwMDcwMDFGMTgyMzMwNzgwMDA3RjUKKzoxMDJBQzAwMDI0RTZGRkZFMjQxOTAwMEFBNzU5MDE0MEE3NTgwMTQyMzUKKzoxMDJBRDAwMEE3NDYwMTQ0QTc0MDAxNDZBNzQ4MDE0ODhGNDIwMTA4ODQKKzoxMDJBRTAwMDMwNTEwMDIwMTYyMDAwMDIyNDAzMDAwOTI0MDMwMDAxQjUKKzoxMDJBRjAwMDMwQUEwMDAyQTc0MzAxNEEzQzA0MDA0MTExNDAwMDAzRjAKKzoxMDJCMDAwMDAwMDAxODIxM0MwNDAxNDEyNDAzMDAwMTMwQUIwMDA0MDMKKzoxMDJCMTAwMDUxNjAwMDA1QUY4MzAwMDgzQzA1MDAxMDAwODUyMDI1QUEKKzoxMDJCMjAwMDI0MDMwMDAxQUY4MzAwMDhBRjQ0MTAwMDAwMDAwMDAwNDAKKzoxMDJCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGOTAwMDA4NkUKKzoxMDJCNDAwMDEyMDAwMDA0MDAwMDAwMDA4RjRDMTAwMDA1ODFGRkZFMDEKKzoxMDJCNTAwMDAwMDAwMDAwOEY3ODAwMDAyNzYyMDAwODhGOEQwMDNDODUKKzoxMDJCNjAwMEFGOTgwMDA0OTQ0NjAwMDg5NDUxMDAwQTk0NEYwMDBDNUEKKzoxMDJCNzAwMDMwQ0VGRkZGMDAxMTI0MDAzMUU5RkZGRjExQ0QwMEEyOEMKKzoxMDJCODAwMDAwODkyMDI1M0MwMzA4MDA4QzYzMDQ0NDNDMTgwODAwOUQKKzoxMDJCOTAwMDhGMTgwNDQwMDBFODUwMjEyNTVGRkZGRTAwN0Y3ODIxNTgKKzoxMDJCQTAwMDAwMDAxMDIxMDFGRjMwMkIwMzAyODgyMTAyMjY0ODIxNUEKKzoxMDJCQjAwMDNDMDEwODAwQUMyRjA0NDQzQzAxMDgwMEFDMjkwNDQwNEYKKzoxMDJCQzAwMDI0RUIwMDA4MzE2MkZGRkYzMDQ3MDAwNzEwRTAwMDAzRUMKKzoxMDJCRDAwMDhGODUwMDE4MjQ1MDAwMDczMjAyRkZGODMxMDZGRkZGRUUKKzoxMDJCRTAwMDMwQzgwMDA3MDA0NTcwMjEzMUNEMUZGRjAzNEQ2MDIxMjMKKzoxMDJCRjAwMEFGODUwMDFDQUY4RDAwMTgyNTlCNDAwMEFGNEQwMDg0QjEKKzoxMDJDMDAwMDExMDAwMDAzOEY4RjAwMjAyNEM0MDAwNzMwODZGRkY4RDYKKzoxMDJDMTAwMDhGODQwMDI4MDBDRjI4MjEwMEE0NDgyQjE1MjAwMDAyMTMKKzoxMDJDMjAwMEFGOEYwMDI0MDBBNDI4MjNBRjg1MDAyMEFGNDUwMDgwOEIKKzoxMDJDMzAwMDNDMTEwODAwOEUzMTA0MzQwMzQ1QzAyMTM0MDI4MDAwNjkKKzoxMDJDNDAwMDAzMDIzMDIxMTIyMDAwMDVBRjg2MDAzODkzODMwMDE3NUQKKzoxMDJDNTAwMDI0MTkwMDBFMTA3OTAwMEQyNDFGMDQzRjNDMEExMDAwQjcKKzoxMDJDNjAwMEFGNEEwMTc4OEY4QjAwMTQyNTY3MDAwMTBBMDAwMURENEYKKzoxMDJDNzAwMEFGODcwMDE0MEUwMDA1QTYzQzEwNDAwMDhGOEIwMDE0OTcKKzoxMDJDODAwMDI1NjcwMDAxMEEwMDAxREVBRjg3MDAxNDNDMEExMDAwMkUKKzoxMDJDOTAwMEE3NUYwMTQ4QUY0QTAxNzgwQTAwMDRCNDhGOEIwMDE0ODMKKzoxMDJDQTAwMDI0MEUwRjAwMTFFRTAwM0QzMEQxMDAyMDE2MjAwMDAyNEUKKzoxMDJDQjAwMDI0MDMwMDA5MjQwMzAwMDEwQTAwMDIwOEE3NDMwMTRBNzMKKzoxMDJDQzAwMDBBMDAwMUZCQTc0MDAxNDY5NEU1MDAwODk0RTIwMDBBQ0YKKzoxMDJDRDAwMDk0RUIwMDBDOEY4NjAwM0MwMDAyRkMwMDMxNkFGRkZGODEKKzoxMDJDRTAwMDMwQjlGRkZGMTMyNjAwMzcwM0VBMjAyNTNDMDUwODAwMTIKKzoxMDJDRjAwMDhDQTUwNDQ0M0MxRjA4MDA4RkZGMDQ0MDAwMDA1MDIxQjUKKzoxMDJEMDAwMDAwQTgzODIxMDBFODMwMkIwM0VBQzgyMTAzMjZDMDIxOUYKKzoxMDJEMTAwMDNDMDEwODAwQUMyNzA0NDQzQzAxMDgwMEFDMzgwNDQwRTYKKzoxMDJEMjAwMDBBMDAwMjY5OEY4RDAwMTgzQzE5MDgwMDhGMzkwNDdDNTUKKzoxMDJEMzAwMDNDMDMwODAwOEM2MzA0NTQzQzA2MDgwMDhDQzYwNDc4RUQKKzoxMDJENDAwMDNDMEYwODAwOERFRjA0NTAwMzI4MzgyMTAwNjg2ODIxRUIKKzoxMDJENTAwMDAwRThDMDJCMDBDNDg4MjEwMUE4NDAyQjAxRTQ3MDIxQTkKKzoxMDJENjAwMDAyMzg1ODIxMDFDODYwMjEzQzAxMDgwMEFDMkQwNDU0RjAKKzoxMDJENzAwMDNDMDEwODAwQUMyQzA0NTAzQzAxMDgwMEFDMjcwNDdDNEEKKzoxMDJEODAwMDNDMDEwODAwQUMyQjA0NzgwQTAwMDI2OThGOEQwMDE4MDIKKzoxMDJEOTAwMEE3NDAwMTQ2MEEwMDA0MUI4RjhGMDAxODMwRDAwMDIwODYKKzoxMDJEQTAwMDE2MDBGRkM1MjQwMzAwMEQyNDAzMDAwNTBBMDAwMjA4RDUKKzoxMDJEQjAwMEE3NDMwMTRBOTc1OTAxMDQyNzM4RkZGMDBBMDAwMzZCMjMKKzoxMDJEQzAwMDMzMDRGRkZGOEY4QzAwNDAxNDhDRkZDODAwMDA4MDIxNkIKKzoxMDJERDAwMDNDMTEwODAwOEUzMTA0NkMzQzA0MDgwMDhDODQwNDY4QUIKKzoxMDJERTAwMDAyMjg3MDIxMDFDODc4MkIwMDkwNDAyMTAxMEY2ODIxMzIKKzoxMDJERjAwMDNDMDEwODAwQUMyRTA0NkMzQzAxMDgwMEFDMkQwNDY4QkEKKzoxMDJFMDAwMDBBMDAwMjY5OEY4RDAwMTg4Rjk5MDA0MDE0OTlGRjVEQTgKKzoxMDJFMTAwMDAwMDA2MDIxM0MwNTA4MDA4Q0E1MDQ2QzNDMTAwODAwRjMKKzoxMDJFMjAwMDhFMTAwNDY4MDBFODIwMjEyNDhFRkZGRTAwQUVGODIxRjkKKzoxMDJFMzAwMDAzRUU1ODJCMDIwQzUwMjEwMTRCMTgyMTNDMDEwODAwRDUKKzoxMDJFNDAwMEFDM0YwNDZDM0MwMTA4MDBBQzIzMDQ2ODBBMDAwNDhCMEUKKzoxMDJFNTAwMDI0RUIwMDA4OEY4ODAwMzgzQzAyRkZGRjhEMEUwMDBDMjkKKzoxMDJFNjAwMDAxQzI2ODI0MDFBNDYwMjVBRDBDMDAwQzBBMDAwMzc5OUUKKzoxMDJFNzAwMDMwQ0ZGRkZGMEEwMDAzQTlBRTAwMDAwMDk3NEIwMTA0MEEKKzoxMDJFODAwMDkyMDQwMDA0OEUyQTAwMEMwMTY0NDAyMTI1MUZGRkYyRTkKKzoxMDJFOTAwMDAxNDcxODI0MzNGOUZGRkYwMDc5QzAyNUFFMzgwMDBDMzQKKzoxMDJFQTAwMDBBMDAwMkQ0OEUxOTAwMTAzQzAzRkZGRjhEMTEwMDEwQTAKKzoxMDJFQjAwMDAyMjMyODI0MDBBNDc4MjVBRDBGMDAxMDBBMDAwMzc5MEUKKzoxMDJFQzAwMDMwQ0ZGRkZGOTc0NTAxMDQ5MjA2MDAwNDhFMkYwMDEwQkIKKzoxMDJFRDAwMDAwQTYxMDIxMjQ0OUZGRUUwMUU3NjgyNDMxMkVGRkZGRjAKKzoxMDJFRTAwMDAxQUU2MDI1QUUyQzAwMTAwQTAwMDJENDhFMTkwMDEwMkQKKzoxMDJFRjAwMDhFMDYwMDBDQUUwMDAwMDAwMDAzQzA4MDAzMTA4ODIxODUKKzoxMDJGMDAwMDBBMDAwMkE2QUUyNjAwMjAxNDYwMDAwRDMwNTBGRkZGMUMKKzoxMDJGMTAwMDNDMDRGRkZGMDA0NDYwMjQwMTg0NjgyNjAwMEQ1ODJCMDgKKzoxMDJGMjAwMDAwMEM1MDJCMDE0QjEwMjQxMDQwMDAwMjAwMDAwMDAwNDgKKzoxMDJGMzAwMDAwMDAwMDBEOENBMzAwMDAwQTAwMDIzRTAwNjQxMDI1NzIKKzoxMDJGNDAwMDNBMTFGRkZGMDAxMTc4MkIwMDEwNzAyQjAxQ0YyMDI0QzUKKzoxMDJGNTAwMDEwODAwMDAyMDAwMDAwMDAwMDAwMDAwRDhDQjgwMDAwOEUKKzoxMDJGNjAwMDBBMDAwMjNFMzcwMkZGRkYzMDg0RkZGRjMwQTVGRkZGNUIKKzoxMDJGNzAwMDEwODAwMDA3MDAwMDE4MjEzMDgyMDAwMTEwNDAwMDAyN0MKKzoxMDJGODAwMDAwMDQyMDQyMDA2NTE4MjExNDgwRkZGQjAwMDUyODQwNDIKKzoxMDJGOTAwMDAzRTAwMDA4MDA2MDEwMjExMEMwMDAwNzAwMDAwMDAwREUKKzoxMDJGQTAwMDhDQTIwMDAwMjRDNkZGRkYyNEE1MDAwNEFDODIwMDAwMTAKKzoxMDJGQjAwMDE0QzBGRkZCMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwQUMKKzoxMDJGQzAwMDEwQTAwMDA4MjRBM0ZGRkZBQzg2MDAwMDAwMDAwMDAwNTIKKzoxMDJGRDAwMDAwMDAwMDAwMjQwMkZGRkYyNDYzRkZGRjE0NjJGRkZBRDkKKzoxMDJGRTAwMDI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDMwOEVGRkZGOEUKKzoxMDJGRjAwMDMwRDhGRkZGMDAwNTdDMDAwMUY4NjAyNTM5Q0RGRkZGQzgKKzoxMDMwMDAwMDAxQUM1MDIxMDE0QzU4MkIwMTRCNDgyMTAwMDk0NDAyQ0UKKzoxMDMwMTAwMDMxMjdGRkZGMDBFODMwMjEwMDA2MjQwMjMwQzVGRkZGMDIKKzoxMDMwMjAwMDAwQTQxODIxMzg2MkZGRkYwM0UwMDAwODMwNDJGRkZGRDAKKzoxMDMwMzAwMDNDMEMwODAwOEQ4QzA0ODQyNDBCRkY4MDI3QkRGRkQwM0UKKzoxMDMwNDAwMDAxODQ1MDIxMDE0QjQ4MjRBRjQ5MDAyMDNDMDgwODAwNkUKKzoxMDMwNTAwMDhEMDgwNDg0QUZCMjAwMjBBRkIwMDAxOEFGQkYwMDI4QzUKKzoxMDMwNjAwMEFGQjMwMDI0QUZCMTAwMUM5MzY2MDAwNDAxMDQzODIxMDMKKzoxMDMwNzAwMDMwRTQwMDdGMDA5QTEwMjEzQzAzMDAwODAwNDM5MDIxQjcKKzoxMDMwODAwMDMwQzUwMDIwMDM2MDgwMjEzQzA4MDExMTI3N0IwMDA4MjcKKzoxMDMwOTAwMDE0QTAwMDAyMjY0NjAwNzAyNjQ2MDA2QzkyMTMwMDA0MUQKKzoxMDMwQTAwMDk3NTEwMTA0OTIwRjAwMDQzMjY3MDAwRjMyMkVGRkZGODgKKzoxMDMwQjAwMDMxRUQwMDQwMDFDNzI4MjMxMUEwMDAwNTAwMDA0ODIxODAKKzoxMDMwQzAwMDkyNTkwMEJDMzMzODAwMDQxNzAwMDA5MDAwMDAwMDAwNDMKKzoxMDMwRDAwMDkyNDMwMEJDMzA3RjAwMDQxM0UwMDAwRjAwMDAwMDAwQUEKKzoxMDMwRTAwMDEwQTAwMDBEMDAwMDAwMDA5NjBFMDAwMjI0MEFGRjgwRDAKKzoxMDMwRjAwMDAwQTc2MDIxMjVDREZGRkVBNzREMTAxNjkyMEIwMDA0RkUKKzoxMDMxMDAwMDAxNEIyMDI0MzA4MjAwRkYxMDQwMDA4NTAxMEM0MDI1MzcKKzoxMDMxMTAwMDNDMEYwNDAwMDEwRjQwMjU4RjUzMDE3ODA2NjBGRkZFMkQKKzoxMDMxMjAwMDI0MDQwMDBBQTc0NDAxNDA5NjBEMDAwMjI0MDQwMDA5NkIKKzoxMDMxMzAwMDMxQUMwMDA3MDAwQzU4MjMzMTZBMDAwN0E3NEEwMTQyNEUKKzoxMDMxNDAwMDk2MDIwMDAyMjQ0M0ZGRkVBNzQzMDE0NEE3NDAwMTQ2MjQKKzoxMDMxNTAwMDk3NUYwMTA0QTc1RjAxNDg4RjU5MDEwODMzMzgwMDIwQTkKKzoxMDMxNjAwMDUzMDAwMDAxMjQwNDAwMDE5MjBGMDAwNDMxRUUwMDEwMEUKKzoxMDMxNzAwMDE1QzAwMDAyMzQ4MzAwMTAwMDgwMTgyMUE3NDMwMTRBQzMKKzoxMDMxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKKzoxMDMxOTAwMEFGNDgxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKKzoxMDMxQTAwMDAwMDAwMDAwOEY1MTEwMDAwNjIxRkZGRTMxMTNGRkZGQzkKKzoxMDMxQjAwMDEyNjAwMDAzMDAwMDAwMDA4RjQ4MTAxOEFDQzgwMDAwMjcKKzoxMDMxQzAwMDk2MDMwMDA2MzA3RkZGRkYyN0Y5MDAwMjAwMTk5ODgyNUUKKzoxMDMxRDAwMDAwMTM4ODgwMDIzQjMwMjE4Q0Q4MDAwMDE1MjAwMDU3NTYKKzoxMDMxRTAwMDAwMTgzNDAyOTIwMzAwMDQyNDA1RkY4MDAwQTNGODI0OTEKKzoxMDMxRjAwMDMzRjEwMEZGMTIyMDAwMkMwMDAwMDAwMDkyNDcwMEJDQjkKKzoxMDMyMDAwMDMwRjIwMDAyMTI0MDAwMjgwMDAwMDAwMDk3NEIxMDBDMjIKKzoxMDMyMTAwMDI1NjJGRkZFQTc0MjEwMTYwMDAwMDAwMDNDMEEwNDAwRDEKKzoxMDMyMjAwMDM1NDkwMDMwQUY0OTEwMDAwMDAwMDAwMDAwMDAwMDAwRTgKKzoxMDMyMzAwMDAwMDAwMDAwMDAwMDAwMDA4RjRDMTAwMDA1ODFGRkZFMjAKKzoxMDMyNDAwMDAwMDAwMDAwOTc0OTEwMEM4RjUxMTAxQzAwQzAyMDIxNzUKKzoxMDMyNTAwMDMxMjdGRkZGMjRGMjAwMzAwMDEyMTg4MjAwMDMyODgwN0IKKzoxMDMyNjAwMDAwQkJGODIxMzIyNkZGRkZBRkYxMDAwMDBFMDAwNTk1RUMKKzoxMDMyNzAwMDAwMTEyQzAyMDAxM0M4ODAwMzNCOTgyMThFNzgwMDAwQjcKKzoxMDMyODAwMDAwMDI3NDAwQUZCODAwMTA4RkE4MDAxMDMxMEZGRkZGQ0MKKzoxMDMyOTAwMEFGQUYwMDEwOEZBNDAwMTAwMUM0NjgyNUFGQUQwMDEwQkYKKzoxMDMyQTAwMDhGQTYwMDEwQUU2NjAwMDA5NzczMDAwODk3NkQwMDBBQTUKKzoxMDMyQjAwMDk3NjYwMDBDOEY4QTAwM0MwMDBENUMwMDMwQ0NGRkZGNEQKKzoxMDMyQzAwMDMyNjJGRkZGMTA0QTAwMzYwMTZDMjAyNTk2MDYwMDAyOEMKKzoxMDMyRDAwMDNDMTAxMDAwMjREMzAwMDgwRTAwMDEzOTMyNjRGRkZGQjcKKzoxMDMyRTAwMDk3NEMwMTA0MEUwMDAxNDczMTg0RkZGRkFGNTAwMTc4NzUKKzoxMDMyRjAwMDhGQkYwMDI4OEZCMzAwMjQ4RkIyMDAyMDhGQjEwMDFDMzUKKzoxMDMzMDAwMDhGQjAwMDE4MDNFMDAwMDgyN0JEMDAzMDEwQTBGRjcwNDgKKzoxMDMzMTAwMDAwMDAwMDAwMjRBNUZGRkMwQTAwMDVDRTI0MDkwMDA0REIKKzoxMDMzMjAwMDhDRDEwMDAwQUY1MTEwMTg4RjUzMDE3ODA2NjBGRjdBREUKKzoxMDMzMzAwMDI0MDQwMDBBMEEwMDA1RTMwMDAwMDAwMDAwQTdDODIxRDkKKzoxMDMzNDAwMDhGODgwMDM4OEY0RTEwMUMwMDE5QzA4MjAwMTg3ODgwQkEKKzoxMDMzNTAwMDAxRTgyMDIxQUM4RTAwMDAwMDBFMkMwMjAwQzAyMDIxQ0MKKzoxMDMzNjAwMDBFMDAwNTk1MzFDNkZGRkYwMjNCMjgyMThDQUQwMDAwMDEKKzoxMDMzNzAwMDAwMDI1NDAwMDA0MDMwMjFBRkFEMDAxMDhGQUMwMDEwQUYKKzoxMDMzODAwMDMxOEJGRkZGQUZBQjAwMTA4RkEyMDAxMDAxNDI0ODI1MjgKKzoxMDMzOTAwMEFGQTkwMDEwOEZBNzAwMTAwQTAwMDYxM0FDQTcwMDAwMDkKKzoxMDMzQTAwMDhGOEYwMDQwMTQ4RkZGQzkwMDAwMDAwMDk3NDIwMTA0NzYKKzoxMDMzQjAwMDk2MEIwMDAyM0MwNTA4MDA4Q0E1MDQ2QzMwNDlGRkZGMDkKKzoxMDMzQzAwMDMxNkFGRkZGM0MxMTA4MDA4RTMxMDQ2ODAxMkEzODIxNjAKKzoxMDMzRDAwMDI0RjJGRkZFMDBCMjQwMjEwMDEyRkZDMzAxMTJDODJCRUQKKzoxMDMzRTAwMDAyM0ZDMDIxMDMxOTIwMjEzQzAxMDgwMEFDMjgwNDZDRDUKKzoxMDMzRjAwMDNDMDEwODAwQUMyNDA0NjgwQTAwMDY0RDAwMDAwMDAwRUYKKzoxMDM0MDAwMDAwQTQxMDJCMTA0MDAwMDkyNDAzMDAwMTAwMDUyODQwRUYKKzoxMDM0MTAwMDAwQTQxMDJCMDRBMDAwMDMwMDAzMTg0MDU0NDBGRkZDM0MKKzoxMDM0MjAwMDAwMDUyODQwMTA2MDAwMDcwMDAwMDAwMDAwODUzMDJCRDgKKzoxMDM0MzAwMDE0QzAwMDAyMDAwMzE4NDIwMDg1MjAyMzE0NjBGRkZCMjMKKzoxMDM0NDAwMDAwMDUyODQyMDNFMDAwMDgwMDgwMTAyMThGODUwMDJDMzEKKzoxMDM0NTAwMDI3QkRGRkU4MDAwNTMwMjcyQ0MzMDAwMTJDQTQwMDAyODMKKzoxMDM0NjAwMDAwODMxMDI1MTA0MDAwMDNBRkJGMDAxMDI0MDUwMDdGMkIKKzoxMDM0NzAwMEFGODUwMDJDMDAwNTI4MjczMEE1RkZGRjBFMDAwNTc0M0UKKzoxMDM0ODAwMDI0MDQyNkY1OEY4MzAwMzAyNDA0MDJCRDAwNDAzMDIxM0YKKzoxMDM0OTAwMDAwODMzODJCMTBFMDAwMDkyNDA1MDAwMTAwMDQyMDQwQkYKKzoxMDM0QTAwMDAwODMxMDJCMDQ4MDAwMDMwMDA1Mjg0MDU0NDBGRkZDREIKKzoxMDM0QjAwMDAwMDQyMDQwMTBBMDAwMDgwMEMzNTAyMTAwNjQ0MDJCRUQKKzoxMDM0QzAwMDE1MDAwMDAyMDAwNTI4NDIwMDY0MTgyMzE0QTBGRkZCMjkKKzoxMDM0RDAwMDAwMDQyMDQyMDBDMzUwMjE4RkJGMDAxMDAwMEE0QzAyOUMKKzoxMDM0RTAwMDMxMjIwMEZGMjdCRDAwMThBRjhBMDAyQzAzRTAwMDA4M0UKKzowNDM0RjAwMEFGODkwMDMwNzAKKzowQzM0RjQwMDBBMDAwMDJBMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTAzNTAwMDAwMDAwMDAwRDc0Nzg3MDM1MkUzMDJFMzA2QTM2MDAwMEMxCis6MTAzNTEwMDAwNTAwMDAwMDAwMDAwMDBBMDAwMDAxMzYwMDAwRUE2MDFCCis6MTAzNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCis6MTAzNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTAzNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTAzNTUwMDAwMDAwMDAwMDAwMDAwMDE2MDAwMDAwMDAwMDAwMDAwMDU1Cis6MTAzNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTAzNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTAzNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTM4OEEwCis6MTAzNTkwMDAwMDAwMDAwMDAwMDAwNURDMDAwMDAwMDAwMDAwMDAwMDRBCis6MTAzNUEwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwREVFCis6MTAzNUIwMDAzQzAyMDgwMDI0NDIzQjYwM0MwMzA4MDAyNDYzM0QxNEE1Cis6MTAzNUMwMDBBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNDg3Cis6MTAzNUQwMDAzQzFEMDgwMDM3QkQ3RkZDMDNBMEYwMjEzQzEwMDgwMDEzCis6MTAzNUUwMDAyNjEwMDBBODNDMUMwODAwMjc5QzNCNjAwRTAwMDJCQTc1Cis6MTAzNUYwMDAwMDAwMDAwMDAwMDAwMDBEOEY4MzAwMzgzQzA4ODAwMEIwCis6MTAzNjAwMDAzNTA3MDA3MDhDRTUwMDAwMDA4MzMwMjUzQzAyOTAwMEY3Cis6MTAzNjEwMDAwMEMyMjAyNUFGODUwMDMwQUY0NDAwMjA4RjQ5MDAyMDM0Cis6MTAzNjIwMDAwNTIwRkZGRTNDMDM4MDAwMzQ2MjAwNzA4QzQ1MDAwMEUyCis6MTAzNjMwMDA4Rjg2MDAzMDNDMTkwODAwOEYzOTAwN0MzQzBFMDgwMDUyCis6MTAzNjQwMDA4RENFMDA3ODAwQTYyMDIzMDMyNDU4MjEwMDAwNzgyMTg1Cis6MTAzNjUwMDAwMTY0NjgyQjAxQ0Y2MDIxMDE4RDUwMjEzQzAxMDgwMERECis6MTAzNjYwMDBBQzJCMDA3QzNDMDEwODAwQUMyQTAwNzgwM0UwMDAwODg5Cis6MTAzNjcwMDAwMDAwMDAwMDBBMDAwMDQxMjQwNDAwMDE4Rjg0MDAzODhCCis6MTAzNjgwMDAzQzA1ODAwMDM0QTIwMDAxMDA4MjE4MjUwM0UwMDAwOEY4Cis6MTAzNjkwMDBBRjQzMDAyMDAzRTAwMDA4MDAwMDEwMjEzMDg0RkZGRjRBCis6MTAzNkEwMDAzMEE1RkZGRjEwODAwMDA3MDAwMDE4MjEzMDgyMDAwMUM0Cis6MTAzNkIwMDAxMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjExNDgwRkZGQjI2Cis6MTAzNkMwMDAwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjExMEMwMDAwNzNBCis6MTAzNkQwMDAwMDAwMDAwMDhDQTIwMDAwMjRDNkZGRkYyNEE1MDAwNDA3Cis6MTAzNkUwMDBBQzgyMDAwMDE0QzBGRkZCMjQ4NDAwMDQwM0UwMDAwODQ3Cis6MTAzNkYwMDAwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkZBQzg2MDAwMDFCCis6MTAzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkYyNDYzRkZGRjEwCis6MTAzNzEwMDAxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMEEzCis6MTAzNzIwMDAzMDhBRkZGRjkzQTgwMDEzQTc0QTAxNDQ5NzQ5MEUxNjU5Cis6MTAzNzMwMDAzMEM2MDBGRjNDMDIxMDAwQTc0OTAxNDZBRjQ1MDE0OEQyCis6MTAzNzQwMDBBMzQ2MDE1MkE3NDgwMTVBQUY0NzAxNjA4RkE0MDAxODUxCis6MTAzNzUwMDA4RkEzMDAxNEE3NDQwMTU4QUY0MzAxNTQwM0UwMDAwOEFECis6MTAzNzYwMDBBRjQyMDE3ODAzRTAwMDA4MDAwMDAwMDAzQzAzODAwMDQ1Cis6MTAzNzcwMDAzNDYyMDA3MDhDNDkwMDAwOEY4ODAwMDAyNDg0MDAwN0E4Cis6MTAzNzgwMDAyN0JERkZGODMwODRGRkY4QUY4OTAwMzA5NzREMDA4QURECis6MTAzNzkwMDAzMUFDRkZGRkFGQUMwMDAwOEZBQjAwMDAwMTY4NTAyM0RECis6MTAzN0EwMDAyNTQ3RkZGRjMwRTYxRkZGMDBDNDI4MkIxNEEwRkZGN0JBCis6MTAzN0IwMDAzQzBDODAwMDM1OEIwMDcwOEQ2QTAwMDAzQzA3MDgwMENGCis6MTAzN0MwMDA4Q0U3MDA4NDNDMDYwODAwOENDNjAwODAwMDA4MTA4MjRDCis6MTAzN0QwMDAwMTQ5MTgyMzAwMDI3ODgwMDBFMzcwMjEwMDAwMjAyMUI1Cis6MTAzN0UwMDAwMUMzQzgyQjAwQzRDMDIxMDFGQTQwMjEwMzE5NDgyMTlDCis6MTAzN0YwMDAyNTAyNDAwMDI3QkQwMDA4M0MwMTA4MDBBQzJFMDA4NEQzCis6MTAzODAwMDAzQzAxMDgwMEFDMjkwMDgwMDNFMDAwMDgwMDAwMDAwMDMzCis6MTAzODEwMDA4RjgyMDAwMDI0ODYwMDA3MzBDNUZGRjgwMEEyMTgyMTFGCis6MTAzODIwMDAzMDY0MUZGRjAzRTAwMDA4QUY4NDAwMDA4Rjg3MDAzODdBCis6MTAzODMwMDA4RjhBMDA0MDI3QkRGRkI4OEY4NjAwNDRBRkI2MDA0MDk2Cis6MTAzODQwMDBBRkJGMDA0NEFGQjUwMDNDQUZCNDAwMzhBRkIzMDAzNEY1Cis6MTAzODUwMDBBRkIyMDAzMEFGQjEwMDJDQUZCMDAwMjg4RjQ1MDEwNEVCCis6MTAzODYwMDA4RDQ5MDBBQ0FGNDcwMDgwOENDODAwMjAwMEE5MzgyM0U4Cis6MTAzODcwMDAwMDAwQjAyMUFGNDgwRTEwOEY0NDBFMTAwMDAwNDgyMTA4Cis6MTAzODgwMDBBRjQ0MEUxNDhDQzIwMDI0QUY0MjBFMTg4RjQzMEUxOEEyCis6MTAzODkwMDBBRjQzMEUxQzEwRTAwMTI1MkQyMzAwMDE5MzZCMDAwODlGCis6MTAzOEEwMDAxMTYwMDBENDAwMDAwMDAwOTc2RTAwMTAzMUNERkZGRkMyCis6MTAzOEIwMDAwMEVENjAyQjE1ODAwMENGMDAwMDAwMDA5NzcwMDAxMDE1Cis6MTAzOEMwMDAzMjBGRkZGRkFGNEYwRTAwOEY1MjAwMDAzMjUxMDAwODQxCis6MTAzOEQwMDAxMjIwRkZGRDAwMDAwMDAwOTc1NDBFMDg4RjQ2MEUwNEQyCis6MTAzOEUwMDAzMjg1RkZGRjMwQjMwMDAxMTI2MDAxMzIwMDAwMDAwMDlBCis6MTAzOEYwMDAwMDAwMDAwRDMwQjhBMDQwMjQxNTAwNDAxMzE1MDBDMDkyCis6MTAzOTAwMDAzMEE5QTAwMDExMjAwMTJEMDAwMDAwMDA5MzdGMDAwOEM1Cis6MTAzOTEwMDAxM0UwMDAwODAwMDAwMDAwOTc2MzAwMTAzMDZCRkZGRjA5Cis6MTAzOTIwMDAwMENCNDAyQjExMDAwMDAzMzBBQzAwNDAxMTgwMDEyMzdDCis6MTAzOTMwMDAwMDAwMDAwMEE3ODUwMDNDQUY4NjAwMzQ5MzY2MDAwOEI1Cis6MTAzOTQwMDAwMEUwMjgyMUFGQTcwMDIwMTRDMDAxMjQyN0IzMDAyMEU1Cis6MTAzOTUwMDBBRjYwMDAwQzk3ODIwMDNDMzA0NzQwMDAxNEUwMDAwMjRBCis6MTAzOTYwMDAyNDAzMDAxNjI0MDMwMDBFMjQxOTQwMDdBMzYzMDAwQTUxCis6MTAzOTcwMDBBRjc5MDAxNDkzOEEwMDNFOEY3NDAwMTQzMTU4MDAwNzA5Cis6MTAzOTgwMDAwMDE4QUE0MDAyOTU5MDI1QUY3MjAwMTQ5Nzg0MDAzQzVECis6MTAzOTkwMDA4RjcwMDAxNDMwOTEwMDEwMDIxMTc4MjVBRjZGMDAxNDYxCis6MTAzOUEwMDA5NzhFMDAzQzMxQ0QwMDA4MTFBMDAxNDcwMDAwMjgyMTZFCis6MTAzOUIwMDA4RjY3MDAxNDNDMDIxMDAwM0MwQzgxMDAwMEUyMjgyNUI3Cis6MTAzOUMwMDBBRjY1MDAxNDk3NDYwRTBBMjQwODAwMEUzNDA1RkZGQzZDCis6MTAzOUQwMDAzMEMzRkZGRjAwNkM1ODI1QUY2QjAwMDRBMzY4MDAwMkUyCis6MTAzOUUwMDA5MzdGMDAwQTI3RTkwMDA0QTM2OTAwMEE5Nzg2MDAzQzM4Cis6MTAzOUYwMDA5MzYzMDAwQTMwQ0MxRjAwMDAwQzU5ODMwMTYzNDAyMUZGCis6MTAzQTAwMDAyNTFGMDAyOEEzN0YwMDA5OTc0OTBFMENBNzY5MDAxMDA1Cis6MTAzQTEwMDA5Mzc5MDAwOTI3MkEwMDAyMzE1ODAwMDcwMDE4QTgyM0NCCis6MTAzQTIwMDAzMkIxMDAwN0EzNzEwMDBCOTM3NDAwMDk5NzY0MDAxMDcyCis6MTAzQTMwMDA4RjkxMDAzNDk3OEYwMDNDMzI5MjAwRkYwMjQ0ODAyMTI2Cis6MTAzQTQwMDAwMjA1NzAyMTMxRUQwMDQwMTFBMDAwMDUzMUM0RkZGRkQ3Cis6MTAzQTUwMDAwMDkxMjgyQjNDMTI4MDAwMTBBMDAwMTQwMDAwQTAyMTJGCis6MTAzQTYwMDAwMjI0MzgyQjE0RTAwMTFCOEZBNTAwMjA4RjREMEUxNDZCCis6MTAzQTcwMDBBRjREMEUxMDhGNDIwRTFDQUY0MjBFMThBRjQ0MEUwMDE5Cis6MTAzQTgwMDA4RjRGMDAwMDMxRUUwMDA4MTFDMEZGRkQwMDAwMDAwMDY0Cis6MTAzQTkwMDA5NzU0MEUwODAwODA4ODIxMDAwMDkwMjFBNzk0MDAzQ0Q0Cis6MTAzQUEwMDA4RjUwMEUwNDI0MTQwMDAxQUY5MDAwMzQ5NzY0MDAxMDZFCis6MTAzQUIwMDAzMDk1RkZGRjhFNjgwMDAwMDExMUY4MjMxN0UwMDAwOTIwCis6MTAzQUMwMDBBRTdGMDAwMDhGNjUwMDE0OEY4QjAwNDQzNEE2MDA0MDQ5Cis6MTAzQUQwMDBBRjY2MDAxNDhGNEMwRTEwQUQ2QzAwMjA4RjQzMEUxODkzCis6MTAzQUUwMDBBRDYzMDAyNDkzNjcwMDA4MTRFMDAwRDIwMDAwMDAwMERBCis6MTAzQUYwMDAwRTAwMDA5RTI0MDQwMDEwOEY4OTAwNDgzQzA4MzIwMDBDCis6MTAzQjAwMDAwMDQwMjgyMTMxMjYwMEZGMDAwNkZDMDAwM0U4NTAyNTc0Cis6MTAzQjEwMDAyNTM5MDAwMUFGOTkwMDQ4QUM0QTAwMDA5Mzc4MDAwOUFDCis6MTAzQjIwMDA5MzcwMDAwQTMzMDQwMEZGMDAwNDc0MDAzMjBGMDBGRjlBCis6MTAzQjMwMDAwMUNGNjgyNUFDNEQwMDA0OEY4MjAwNDgwNjQwMDBFQUEyCis6MTAzQjQwMDBBQ0EyMDAwOEFDQTAwMDBDOTc4MzAwM0MzMDZCMDAwOENFCis6MTAzQjUwMDAxNTYwMDAwMjI2MjgwMDA2MjYyODAwMDI5NzRFMEUxNDQzCis6MTAzQjYwMDA4RjQ1MEUxQzhGNjcwMDA0OTM2RDAwMDIzMUM0RkZGRjY4Cis6MTAzQjcwMDAzMUEyMDBGRkFGQTIwMDEwOEY2QzAwMTRBRkE4MDAxODk0Cis6MTAzQjgwMDAwRTAwMDA4QkFGQUMwMDE0MjQwNDAwMTAwRTAwMDBDNzIwCis6MTAzQjkwMDAwMDAwMDAwMDhFNzIwMDAwMTY0MDAwMDUwMDAwMDAwMENBCis6MTAzQkEwMDA4RjY0MDAxNDI0MDVGRkJGMDA4NTk4MjRBRjczMDAxNEIwCis6MTAzQkIwMDA4Rjc5MDAwQzAzMzUzODIxQUY2NzAwMEM5Mzc1MDAwODJFCis6MTAzQkMwMDAxNkEwMDAwODAwMDAwMDAwMTI4MDAwMDYwMDAwMDAwMDlGCis6MTAzQkQwMDA4RjdGMDAxNDNDMEJFRkZGMzU2OEZGRkUwM0U4NDgyNDlECis6MTAzQkUwMDBBRjY5MDAxNEEzNzQwMDA4OEZBNTAwMjAwQTAwMDI0NkU0Cis6MTAzQkYwMDAwMjIwMjAyMUFGNDcwRTAwMEEwMDAwRjUwMDAwMDAwMDVGCis6MTAzQzAwMDA4RjU5MDE3ODA3MjBGRkZFMjQxRjA4MDA4Rjg0MDAwMEQxCis6MTAzQzEwMDBBRjVGMDE3ODk3NEIwMDhBMzE2QUZGRkYwMTQ0NDgyMzY4Cis6MTAzQzIwMDAyNTI4RkZGRjMxMDIxRkZGMkM0MzAwMDgxNDYwRkZGOTE1Cis6MTAzQzMwMDAwMDAwMDAwMDhGOEUwMDQ4OEY4RDAwMzgwMEMwNDgyMUEyCis6MTAzQzQwMDAwMzQ0MjAyMTI1QzYwMDAxMjQwQzBGMDBBRjg2MDA0ODQ0Cis6MTAzQzUwMDAwMEU5MzgyMzI0ODY0MDAwMzFDQTAwRkYxMUFDMDAwNTdBCis6MTAzQzYwMDAyNDA4MDAwMTkzOTEwMDNFMzIzMDAwMDcwMDEwN0E0MDkyCis6MTAzQzcwMDAzNUU4MDAwMTAwMEFBQzAwM0MxODAxMDAwMkI4QTAyNTlDCis6MTAzQzgwMDBBQzk0NDAwMDhGOTMwMDQ4MzBCMjAwMzYzMEE0MDAwODU2Cis6MTAzQzkwMDBBQ0QzMDAwNDEwODAwMDk3MDExMjMwMjU5NzRFMEUwQTE1Cis6MTAzQ0EwMDA4RjhEMDAwMDNDMDI4MTAwMzFDQ0ZGRkYyNUFCMDAwODY2Cis6MTAzQ0IwMDAwMTgyNDAyNTNDMDMxMDAwMzE2NTFGRkYyNTM5MDAwNkI1Cis6MTAzQ0MwMDAyNDFGMDAwRUFGNDgwMTYwMDBDMzMwMjVBNzVGMDE1QUQyCis6MTAzQ0QwMDBBRjg1MDAwMEE3NTkwMTU4MTRFMDAwMEE4RjkzMDAzOEZGCis6MTAzQ0UwMDAyNDEyMEYwMDUyNzIwMDAyMjQxNjAwMDEzNEM2MDA0MDU0Cis6MTAzQ0YwMDA4RjU4MEUxMDhGOTQwMDQ0QUU5ODAwMjA4RjU1MEUxOEU4Cis6MTAzRDAwMDBBRTk1MDAyNDhGNDUwRTE0QUY0NTAxNDQ4RjU5MEUxQzBCCis6MTAzRDEwMDBBRjU5MDE0OEEzNEEwMTUyM0MwQTEwMDBBRjQ2MDE1NDcyCis6MTAzRDIwMDBBRjRBMDE3ODE0RTBGRUREMkQyMzAwMDEwMDc2QTAyNUM2Cis6MTAzRDMwMDAxMjgwMDAxNzhGQkYwMDQ0OEY4NDAwMzgyNDE2MEYwMEI0Cis6MTAzRDQwMDAxMDk2MDA4NDAwMDAwMDAwOEY0NTAxNzgwNEEwRkZGRTVCCis6MTAzRDUwMDAyNDE1MEYwMDEwOTUwMDZFMDAwMDAwMDA4RjQ3MEUxNDEwCis6MTAzRDYwMDAyNDAyMDI0MDNDMUYxMDAwQUY0NzAxNDQ4RjQ0MEUxQzQ4Cis6MTAzRDcwMDBBRjQ0MDE0OEEzNDAwMTUyQTc0MDAxNUFBRjQwMDE2MDNGCis6MTAzRDgwMDBBNzQwMDE1OEFGNDIwMTU0QUY1RjAxNzg4RkJGMDA0NDk0Cis6MTAzRDkwMDA4RkI2MDA0MDhGQjUwMDNDOEZCNDAwMzg4RkIzMDAzNDJECis6MTAzREEwMDA4RkIyMDAzMDhGQjEwMDJDOEZCMDAwMjgwM0UwMDAwOEU0Cis6MTAzREIwMDAyN0JEMDA0ODE0QzBGRUQwMzBCOEEwNDA4RjQyMEUxNDdBCis6MTAzREMwMDA4Rjg0MDA0NDAwMDA0ODIxQUM4MjAwMjA4RjUxMEUxQ0RCCis6MTAzREQwMDBBQzkxMDAyNDBBMDAwMjBFMkQyMzAwMDE4RjkxMDAzNEMzCis6MTAzREUwMDA5NzhBMDAzQzNDMTI4MDAwMDIyMEE4MjEzMTU4MDA0MEY0Cis6MTAzREYwMDAxNzAwRkYzMDAwMDBBMDIxOTc2OTAwMTA4RjkyMDAzNDU3Cis6MTAzRTAwMDAzMTM5RkZGRjEzMzIwMDM1MDAwMDIwMjEwMDgwNDgyMUE2Cis6MTAzRTEwMDAxNDgwRkVBMDAwQTAzODIxOEY0MjBFMTQ4Rjg0MDA0NDJECis6MTAzRTIwMDBBQzgyMDAyMDhGNTEwRTFDQUM5MTAwMjQwQTAwMDIwRUJGCis6MTAzRTMwMDAyRDIzMDAwMTkzNkEwMDA5OTM3ODAwMEIzMTUwMDBGRjk1Cis6MTAzRTQwMDAzMzBGMDBGRjAyMEY3MDIxMjVDMjAwMEEzMDUwRkZGRjIwCis6MTAzRTUwMDAwRTAwMDA5RTAyMDAyMDIxOEY4NjAwNDgzQzFGNDEwMDdBCis6MTAzRTYwMDAyNENEMDAwMUFGOEQwMDQ4OTM2QzAwMDkzMEM2MDBGRkRGCis6MTAzRTcwMDAwMDA2NDQwMDMxODMwMEZGMjQ2QjAwMDIwMTBCNDgyNTNCCis6MTAzRTgwMDAwMTNGQzgyNUFDNTkwMDAwOEY2NzAwMEM5NzQ0MEUxNDAxCis6MTAzRTkwMDAwMEYyMjgyNUFDNDUwMDA0OEY0NTBFMUM4RjY3MDAwNEY2Cis6MTAzRUEwMDA5MzZBMDAwMjMwODRGRkZGMzE1ODAwRkZBRkI4MDAxMDYyCis6MTAzRUIwMDA4RjZGMDAxNEFGQjEwMDE4MEUwMDAwOEJBRkFGMDAxNDZECis6MTAzRUMwMDAwQTAwMDFBNjAyMDAyMDIxQUY2MDAwMDQwQTAwMDEzRUEyCis6MTAzRUQwMDBBMzYwMDAwMjBBMDAwMjQ2MDAwMDIwMjEwMDAwOTAyMTk5Cis6MTAzRUUwMDAwQTAwMDE3MDI0MTQwMDAxM0MxMjgwMDAwQTAwMDE5NUIwCis6MTAzRUYwMDBBQ0IyMDAwQzhGOTEwMDAwMjUyNDAwMDJBNzQ0MDE1OEE5Cis6MTAzRjAwMDAyNjMwMDAwODMyMEYxRkZGMEEwMDAxRjlBRjhGMDAwMEIyCis6MTAzRjEwMDBBRjQwMDE0QzExMjAwMDJDMDAwMDAwMDA4RjU5MEUxMDAyCis6MTAzRjIwMDBBRjU5MDE0NDhGNDMwRTE4MjQwMjAwNDAzQzFGMTAwMDdCCis6MTAzRjMwMDBBRjQzMDE0OEEzNDAwMTUyQTc0MDAxNUFBRjQwMDE2MDdFCis6MTAzRjQwMDBBNzQwMDE1OEFGNDIwMTU0QUY1RjAxNzgwQTAwMDIyNzMxCis6MTAzRjUwMDA4RkJGMDA0NDExMjAwMDA2MDAwMDAwMDA5NzQ2MEUwOEE1Cis6MTAzRjYwMDAzMENDMDA0MDE1ODAwMDAyMDAwMDAwMDAwMDAwMDAwRDcxCis6MTAzRjcwMDA4RjREMDE3ODA1QTBGRkZFMDAwMDAwMDA5NzUzMEUxMDQyCis6MTAzRjgwMDAzQzEyMDUwMDI0MEUyMDAwMzI2QUZGRkYwMTUyQzAyNUJBCis6MTAzRjkwMDBBRjU4MDE0QzhGNEYwRTE0M0MwMjEwMDBBRjRGMDE0NDNDCis6MTAzRkEwMDA4RjUwMEUxQ0FGNTAwMTQ4QTM0MDAxNTI4Rjg0MDAzODNGCis6MTAzRkIwMDBBNzQwMDE1QUFGNDAwMTYwQTc0MDAxNThBRjRFMDE1NERECis6MTAzRkMwMDAwQTAwMDIxNUFGNDIwMTc4OEY0OTBFMTRBRjQ5MDE0NDJGCis6MTAzRkQwMDA4RjQzMEUxQzBBMDAwMjhFMjQwMjAwNDAzQzBFMjBGRjdDCis6MTAzRkUwMDAyN0JERkZFMDNDMUE4MDAwM0MwRjgwMDgzNUNERkZGRDY3Cis6MTAzRkYwMDBBRkJGMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMERCCis6MTA0MDAwMDBBRjhGMDA0MEFGNEQwRTAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTA0MDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQzBDMDBGRjU5Cis6MTA0MDIwMDAzNThCRkZGREFGNEIwRTAwM0MwNjYwMDQ4Q0M5NTAwMDgxCis6MTA0MDMwMDAyNDBBRkY3RjNDMTE2MDAwMDEyQTQwMjQzNTA3MzgwQzE4Cis6MTA0MDQwMDBBQ0M3NTAwMDhFMjQwNDM4MjQwNTAwMDlBRjQ1MDAwODkxCis6MTA0MDUwMDAzMDgzRkZGRjM4NjIyRjcxMjQ1MEMwQjNBRjgwMDA0ODE3Cis6MTA0MDYwMDAwRTAwMDA2OEFGODAwMDAwNTIwMDAwMDFBRTIwNDQyQzFBCis6MTA0MDcwMDAwRTAwMDQzNTNDMTE4MDAwMEUwMDBFQTgzNjMwMDA3MDkyCis6MTA0MDgwMDA4RjhBMDA0MDNDMTIwODAwMjY1MjNCQzgwMjAwODgyMTVCCis6MTA0MDkwMDA4RTA4MDAwMDhGNUYwMDAwM0JGOTAwMDEzMzM4MDAwMUZCCis6MTA0MEEwMDAxMzAwMDAxN0FGODgwMDMwMDIyMDQ4MjE4RDI3MDAwMDQwCis6MTA0MEIwMDAzQzBGMDgwMDhERUYwMDZDM0MwQzA4MDA4RDhDMDA2OEY0Cis6MTA0MEMwMDAwMEU4QzAyMzAxRjgyODIxMDAwMDY4MjEwMEI4MzAyQjQ3Cis6MTA0MEQwMDAwMThENTgyMTAxNjY0MDIxM0MwMTA4MDBBQzI1MDA2QzhGCis6MTA0MEUwMDAzQzAxMDgwMEFDMjgwMDY4OEY0NDAwMDAzODgzMDAwMUMwCis6MTA0MEYwMDAzMDYyMDAwMTE0NDBGRkVEMDBFMDQwMjFBRjg3MDAzMDQ2Cis6MTA0MTAwMDA4RTBDMDAwMDNDMDUwODAwOENBNTAwNkMzQzA0MDgwMEU3Cis6MTA0MTEwMDA4Qzg0MDA2ODAxODgzMDIzMDBBNjM4MjEwMDAwMTAyMTFCCis6MTA0MTIwMDAwMEU2NDAyQjAwODIxODIxMDA2OEY4MjEzQzAxMDgwMEJECis6MTA0MTMwMDBBQzI3MDA2QzNDMDEwODAwQUMzRjAwNjg4RjQ5MDEwMENGCis6MTA0MTQwMDAyNTU5MDA4OEFGOTkwMDQ0QUY4OTAwMzhBRjQ5MDAyMDU1Cis6MTA0MTUwMDA4RTA3MDAwMEFGODcwMDMwOEY0RDAxNzgwNUEwRkZGRTZECis6MTA0MTYwMDAwMDAwMDAwMDhFMDYwMDAwM0MwQjA4MDA4RDZCMDA3NDAwCis6MTA0MTcwMDAzQzA0MDgwMDhDODQwMDcwMDBDNzI4MjMwMTY1RjgyMUU2Cis6MTA0MTgwMDAwMDAwMTAyMTAzRTU0MDJCMDA4MjM4MjEwMEU4QzgyMUZGCis6MTA0MTkwMDAyNDA5MDgwMDNDMDEwODAwQUMzRjAwNzQzQzAxMDgwMDAxCis6MTA0MUEwMDBBQzM5MDA3MEFGNDkwMTc4OTM1ODAxMDhBMzk4MDAzRURDCis6MTA0MUIwMDA5MzhGMDAzRTMxRUUwMDAxMTVDMDAwMTU4RjgzMDAzODRCCis6MTA0MUMwMDAyNDBFMEQwMDEwNkUwMDE5MjQwRjBGMDAxMDZGMDAxRDNCCis6MTA0MUQwMDAwMDAwMDAwMDkxNTkwMDAwMjQxODAwNTAzMzI5MDBGRjBFCis6MTA0MUUwMDAxMTM4MDAwNDNDMUY0MDAwQUY1RjAxMzgwQTAwMDJFN0FECis6MTA0MUYwMDAwMDAwMDAwMDBFMDAwOEVFMDAwMDAwMDA4RjhBMDA0MDYyCis6MTA0MjAwMDAzQzFGNDAwMEFGNUYwMTM4MEEwMDAyRTcwMDAwMDAwMEQ5Cis6MTA0MjEwMDA5MzhEMDAzRTMxQUMwMDA2MDAwQzUxMDAwRTAwMDBDRTI0Cis6MTA0MjIwMDAwMTUyRDgyMTBBMDAwMzQzOEY4QTAwNDAzQzFCMDgwMDNBCis6MTA0MjMwMDAyNzdCM0M0ODBFMDAwMENFMDAwMDAwMDAwQTAwMDM0MzJDCis6MTA0MjQwMDA4RjhBMDA0MDNDMUIwODAwMjc3QjNDNjgwRTAwMDBDRTk0Cis6MTA0MjUwMDAwMDAwMDAwMDBBMDAwMzQzOEY4QTAwNDA5MEFBMDAwMTdBCis6MTA0MjYwMDA4RkFCMDAxMDhDQUMwMDEwM0MwMzAwRkY4RDY4MDAwNDg1Cis6MTA0MjcwMDBBRDZDMDAyMDhDQUQwMDE0MDBFMDYwMjEzNDYyRkZGRkMzCis6MTA0MjgwMDBBRDZEMDAyNDhDQTcwMDE4M0MwOUZGMDAwMTA5QzAyNDczCis6MTA0MjkwMDBBRDY3MDAyODhDQUUwMDFDMDE4MkM4MjQwMzE5NzgyNTY0Cis6MTA0MkEwMDBBRDZGMDAwNEFENkUwMDJDOENBRDAwMDgzMTRBMDBGRkVDCis6MTA0MkIwMDBBRDZEMDAxQzk0QTkwMDAyMzEyOEZGRkZBRDY4MDAxMDBECis6MTA0MkMwMDA5MEE3MDAwMEE1NjAwMDAyQTE2MDAwMDRBMTY3MDAwMEEzCis6MTA0MkQwMDA5MEEzMDAwMjMwNjIwMEZGMDAwMjE5ODIxMDYwMDAwNTA2Cis6MTA0MkUwMDAyNDA1MDAwMTEwNjUwMDBFMDAwMDAwMDAwM0UwMDAwODM2Cis6MTA0MkYwMDBBMTZBMDAwMThDRDgwMDI4MzU0QTAwODBBRDc4MDAxOEVBCis6MTA0MzAwMDA4Q0NGMDAxNEFENkYwMDE0OENDRTAwMzBBRDZFMDAwODYxCis6MTA0MzEwMDA4Q0M0MDAyQ0ExNkEwMDAxMDNFMDAwMDhBRDY0MDAwQzBECis6MTA0MzIwMDA4Q0NEMDAxQ0FENkQwMDE4OENDOTAwMTRBRDY5MDAxNDUzCis6MTA0MzMwMDA4Q0M4MDAyNEFENjgwMDA4OENDNzAwMjBBRDY3MDAwQzU1Cis6MTA0MzQwMDA4Q0MyMDAxNDhDODMwMDY0MDA0M0M4MkIxMzIwMDAwNzI4Cis6MTA0MzUwMDAwMDAwMDAwMDhDQzIwMDE0MTQ0Q0ZGRTQwMDAwMDAwMEI4Cis6MTA0MzYwMDAzNTRBMDA4MDAzRTAwMDA4QTE2QTAwMDE4QzgyMDA2NEU1Cis6MTA0MzcwMDAwQTAwMDM5OTAwMDAwMDAwOTBBQTAwMDAyN0JERkZGODgyCis6MTA0MzgwMDA4RkE5MDAxQ0EzQUEwMDAwOEZBRTAwMDAzQzBGRkY4MDg1Cis6MTA0MzkwMDA4RkE4MDAxODM1RTJGRkZGOENDRDAwMkMwMUMyNjAyNEVECis6MTA0M0EwMDBBRkFDMDAwMEExMjAwMDA0MDBFMDYwMjFBN0EwMDAwMjQzCis6MTA0M0IwMDA4RkI4MDAwMDhEMjcwMDA0MDE4ODE4MjEwMEEwNTgyMTIzCis6MTA0M0MwMDAwMEMwNTAyMTAwNkQyODI2M0MwNkZGN0YzQzBGMDBGRkY3Cis6MTA0M0QwMDAyQ0FEMDAwMTM1RUVGRkZGMzREOUZGRkYzQzAyRkYwMDlBCis6MTA0M0UwMDAwMzE5MzAyNDAwMEQxREMwMDEwRUM4MjQwMEUyQzAyNEIyCis6MTA0M0YwMDAwMEMzNzAyNTAzMTk3ODI1QUQyRTAwMDBBRDJGMDAwNEYxCis6MTA0NDAwMDA4RDQ1MDAyNEFGQUUwMDAwQUQyNTAwMDg4RDREMDAyMDg1Cis6MTA0NDEwMDAyNDA1RkZGRkFEMkQwMDBDOTU2ODAwMDIzMTA3RkZGRjVBCis6MTA0NDIwMDBBRDI3MDAxMDkxNjYwMDE4MzBDMjAwRkYwMDAyMTlDMkNCCis6MTA0NDMwMDA1MDYwMDAwMThENDUwMDM0QUQyNTAwMTQ4RDY3MDAwOEUzCis6MTA0NDQwMDAyN0JEMDAwOEFEMjcwMDFDOEM4QjAwQ0NBRDJDMDAyOEFDCis6MTA0NDUwMDBBRDIwMDAyQ0FEMkIwMDI0QUQyMDAwMTgwM0UwMDAwODk3Cis6MTA0NDYwMDBBRDIwMDAyMDI3QkRGRkUwQUZCMjAwMThBRkIxMDAxNEFGCis6MTA0NDcwMDBBRkIwMDAxMEFGQkYwMDFDOTA5ODAwMDAwMEMwODgyMUIyCis6MTA0NDgwMDAzQzBEMDBGRjMzMEYwMDdGQTBDRjAwMDA5MDhFMDAwMTk1Cis6MTA0NDkwMDAzNUFDRkZGRjNDMEFGRjAwQTBDRTAwMDE5NEE2MDAxRTMxCis6MTA0NEEwMDBBMjIwMDAwNDhDQUIwMDE0OEUyOTAwMDQwMEEwODAyMUZGCis6MTA0NEIwMDAwMTZDMjgyNDAxMkE0MDI0MDA4MDkwMjEwMTA1MjAyNTM4Cis6MTA0NEMwMDBBNjI2MDAwMkFFMjQwMDA0MjYwNTAwMjAyNjI0MDAwOEFCCis6MTA0NEQwMDAwRTAwMDA3NjI0MDYwMDAyOTI0NzAwMDAyNjA1MDAyODAwCis6MTA0NEUwMDAyNjI0MDAxNDAwMDcxRTAwMDAwMzE2MDMyNDA2MDAwNEZGCis6MTA0NEYwMDAwNDQwMDAwMzI0MDNGRkZGOTY1OTAwMDIzMzIzRkZGRjBCCis6MTA0NTAwMDAwRTAwMDA3NkFFMjMwMDEwMjYyNDAwMjQ4RkJGMDAxQzZFCis6MTA0NTEwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA1MDAwMzczCis6MTA0NTIwMDAwMDAwMzAyMTBBMDAwMDgwMjdCRDAwMjAyN0JERkZEOEYxCis6MTA0NTMwMDBBRkIxMDAxQ0FGQjAwMDE4QUZCRjAwMjA5MEE4MDAwMEMyCis6MTA0NTQwMDAyNDAyMDAwMThGQjAwMDNDMzEwMzAwM0YwMDgwODgyMTJECis6MTA0NTUwMDAxMDYyMDAxNDhGQUEwMDM4MjQwQjAwMDU1MDZCMDAxNjVGCis6MTA0NTYwMDBBRkFBMDAxMDAwQTAyMDIxMDBDMDI4MjEwRTAwMDNEQzBCCis6MTA0NTcwMDAwMjAwMzAyMTkyMjQwMEJDMzA4MzAwMDIxMDYwMDAwMzRFCis6MTA0NTgwMDAyNjA2MDAzMEFDQzAwMDAwMjRDNjAwMDQ4RkJGMDAyMDA3Cis6MTA0NTkwMDA4RkIxMDAxQzhGQjAwMDE4MDBDMDEwMjEwM0UwMDAwODhDCis6MTA0NUEwMDAyN0JEMDAyODAxNDAzODIxMEUwMDAzNUFBRkIwMDAxMDhCCis6MTA0NUIwMDAwQTAwMDQyMDAwMDAwMDAwMEUwMDAzQTFBRkIwMDAxNEE4Cis6MTA0NUMwMDAwQTAwMDQyMDAwMDAwMDAwM0MwMjAwMEEwMzQyMTgyMUY3Cis6MTA0NUQwMDAzQzA0MDgwMDI0ODQzQ0FDMjQwNTAwMUEwMDAwMzAyMTZGCis6MTA0NUUwMDAwQTAwMDA4MEFGODMwMDU0M0MwMzgwMDAzNDYyMDA3MEY2Cis6MTA0NUYwMDA4QzQ4MDAwMDAwQTA1ODIxMDBDMDQ4MjEzMDhBMDBGRkVDCis6MTA0NjAwMDBBRjg4MDAzMDhGNDQwMTc4MDQ4MEZGRkUzQzBDODAwMEFFCis6MTA0NjEwMDAzNTg2MDA3MDhDQzUwMDAwM0MwMzA4MDA4QzYzMDA3NDc0Cis6MTA0NjIwMDAzQzE4MDgwMDhGMTgwMDcwMDBBODIwMjMwMDY0NjgyMTNGCis6MTA0NjMwMDAwMDAwQzgyMTAxQTQ3ODJCMDMxOTcwMjEwMUNGNjAyMTRCCis6MTA0NjQwMDAzQzAxMDgwMEFDMkQwMDc0M0MwMTA4MDBBQzJDMDA3MDRCCis6MTA0NjUwMDA4RjQ4MEUxNEFGNDgwMTQ0QUY0NzAxNENBMzRBMDE1MkEyCis6MTA0NjYwMDBBNzRCMDE1ODkzNDYwMTA4MzBDNTAwMDg1NEEwMDAwMTJCCis6MTA0NjcwMDAzNTI5MTAwMDkzNEIwOTAwMjQwNzAwNTAzMTZBMDBGRkQwCis6MTA0NjgwMDAxMTQ3MDAwNzAwMDAwMDAwOEY0NTBFMUNBRjQ1MDE0ODkwCis6MTA0NjkwMDBBRjQ5MDE1NDNDMDkxMDAwMDNFMDAwMDhBRjQ5MDE3ODFDCis6MTA0NkEwMDA5MzREMDEwODMxQTgwMDA4MTEwMDAwMTAwMDAwMDAwMDFGCis6MTA0NkIwMDA5MzRGMDEwODMxRUUwMDEwNTFDMDAwMDEzNTI5MDAwODY4Cis6MTA0NkMwMDAzQzA0MDgwMDkwODQzRDEwQTM0NDAxNTA4RjQzMDlBNDhBCis6MTA0NkQwMDBBRjQzMDE0ODhGNDIwOUEwQUY0MjAxNDRBRjQ5MDE1NEEyCis6MTA0NkUwMDAzQzA5MTAwMDAzRTAwMDA4QUY0OTAxNzgzQzE5MDgwMEJDCis6MTA0NkYwMDA4RjM5M0NDQzMzMzgwMDA4NTcwMEZGRjEzNTI5MDAwOENBCis6MTA0NzAwMDAwQTAwMDQ3MzAwMDAwMDAwMjQwNzAwNDBBRjQ3MDgxNEFCCis6MTA0NzEwMDBBRjQwMDgxMDhGNDIwOTQ0OEY0MzA5NTA4RjQ0MDk1NDE5Cis6MTA0NzIwMDA4RjQ1MDk1QzhGNDYwOTRDQUY4MjAwNjRBRjgzMDA1MDBGCis6MTA0NzMwMDBBRjg0MDA0Q0FGODUwMDVDMDNFMDAwMDhBRjg2MDA2MEVBCis6MTA0NzQwMDA5MzQ2MDEwOTMwQzUwMDdGMDAwNTE4QzAwMDA1MjE0MENGCis6MTA0NzUwMDAwMDgzMTAyMTAzRTAwMDA4MjQ0MjAwODgzQzBBMDgwMDdFCis6MTA0NzYwMDA5MTRBM0NEMTNDMDkwODAwOTUyOTNDQ0EzQzA1MTEwMEZFCis6MTA0NzcwMDAwMDBBM0MwMDI1MjgwMDAyMDBFODMwMjUwMEM1MTgyNTY1Cis6MTA0NzgwMDAyNDgyMDAwOEFDODMwMDAwMDNFMDAwMDhBQzgwMDAwNDMxCis6MTA0NzkwMDA4RjRBMDAyQzk3NEUwOTA4M0MwRjAwMEUwMzRGMzgyMTFBCis6MTA0N0EwMDAzMUNERkZGRjAwMEQ0MUMwQUY0ODAwMkM5NzQzMDkwOEYxCis6MTA0N0IwMDA5NEVDMDAxQTAwODA0MDIxMjQwMjAwMDEzMThCRkZGRjlECis6MTA0N0MwMDBBQzhCMDAwMDhDRTkwMDFDMDBBMDU4MjEwMEMwNjAyMUM3Cis6MTA0N0QwMDBBQzg5MDAwNDhDRTQwMDIwQUQwNDAwMDg5MEUzMDAxOUNCCis6MTA0N0UwMDAzMDYzMDAwMzEwNjIwMDQwMDAwMDAwMDAyODY1MDAwMkYyCis6MTA0N0YwMDAxNEEwMDA3MzI0MDYwMDAyMTA2NjAwNEUwMDAwMDAwMEEyCis6MTA0ODAwMDAyNDE4MDAwMzEwNzgwMDU3MDAwMDAwMDAzQzA5MDgwMDNECis6MTA0ODEwMDA5NTI5M0NDMDkzNDUwOTM0OTM0NjA5MjEzQzBFMDgwMDc0Cis6MTA0ODIwMDA5NUNFM0NDNjMwQTIwMEZGMDAwMkM4ODI5NEU1MDAyQTYzCis6MTA0ODMwMDAzMEM0MDBGRjk3ODcwMDU4MDAxOUM2MDAwMDA0MUMwMDEwCis6MTA0ODQwMDAzMTJGRkZGRjAzMDMxMDI1MDFDRjY4MjEwMDREQzgyNTNDCis6MTA0ODUwMDAwMEE3MjAyMTNDMDY0MDAwMDMyNkMwMjUwMDA0NEMwMDkwCis6MTA0ODYwMDBBRDA5MDAwNEFEMTgwMDAwOTM0RjA5MjAzQzAzMDAwNjc5Cis6MTA0ODcwMDAyNTA5MDAxNDAwMEY3NjAwMDFDMzY4MjVBRDBEMDAwODVFCis6MTA0ODgwMDA4RjQyMDkyQzI0RTUwMDAxMzBBNjdGRkZBRDAyMDAwQzA5Cis6MTA0ODkwMDA4RjU5MDkzMDI1MDIwMDI4QTc4NjAwNThBRDE5MDAxMDRECis6MTA0OEEwMDA4RjQ0MDkzOEFEMDQwMDE0QUQyQjAwMDQ4RjU4MDk0MDIzCis6MTA0OEIwMDBBRDM4MDAwODkzNEYwOTM3M0MwRDA4MDA5MUFEM0NEMDRFCis6MTA0OEMwMDBBRDIwMDAxMDMxRUUwMEZGMDFDQzE4MjEwMDAzNjcwMDdECis6MTA0OEQwMDAwMDBENDQwMDAxODg1ODI1MzU2N0ZGRkZBRDI3MDAwQzA3Cis6MTA0OEUwMDAwM0UwMDAwOEFGNEEwMDJDM0MwOTA4MDA5NTI5M0NDMEIxCis6MTA0OEYwMDAzQzA1MDgwMDk0QTUzQ0NBM0MwRjA4MDA5NUVGM0NCQzYxCis6MTA0OTAwMDA5NEU0MDAyNDMxMjZGRkZGMDBBNjcwMjEwMUNGNjgyMzI0Cis6MTA0OTEwMDAwMDA0MUMwMDI1QTJGRkYyMDA2MkM4MjUyNDE4MDgwMDJDCis6MTA0OTIwMDBBRDE5MDAwQ0FEMTgwMDE0QUQwMDAwMTAwQTAwMDRDODQ5Cis6MTA0OTMwMDAyNTA4MDAxODk0RTYwMDI0OTRFNTAwMjgzQzA5MDgwMEE2Cis6MTA0OTQwMDA5NTI5M0NDMDAwMDY3QzAwMDAwNTc0MDAzNUVEODEwMDBGCis6MTA0OTUwMDAzNUM0MDgwMEFEMEQwMDBDQUQwNDAwMTAwQTAwMDRDOEY5Cis6MTA0OTYwMDAyNTA4MDAxNDNDMDkwODAwOTUyOTNDQzAzQzAyMDgwMEI5Cis6MTA0OTcwMDA5NDQyM0NDQTNDMDYwODAwOTRDNjNDQkM5NEU0MDAyNDIzCis6MTA0OTgwMDAzMTI1RkZGRjk0RjgwMDI4MDA0NUM4MjEwMzI2NzgyMzJECis6MTA0OTkwMDAwMDE4MUMwMDAwMDQ2QzAwMjVFRUZGRUUwMDZFQzgyNTE4Cis6MTA0OUEwMDAzNUEyODEwMDI0MTgwODAwQUQwMjAwMENBRDE5MDAxMERBCis6MTA0OUIwMDBBRDE4MDAxOEFEMDAwMDE0MEEwMDA0QzgyNTA4MDAxQzNBCis6MTA0OUMwMDAxNDYwRkY5MjAwMDAwMDAwOTRFMzAwMjQzQzA5MDgwMEZBCis6MTA0OUQwMDA5NTI5M0NDMDAwMDMxNDAwMzQ1OTA4MDBBRDE5MDAwQzlGCis6MTA0OUUwMDAwQTAwMDRDODI1MDgwMDEwMDNFMDAwMDgyNDAyMDFGNEFFCis6MTA0OUYwMDAyN0JERkZFOEFGQjAwMDEwQUZCRjAwMTQwRTAwMDA2MDhECis6MTA0QTAwMDAwMDgwODAyMTI0MDUwMDQwQUY0NTA4MTQ4RjgzMDA1MEFBCis6MTA0QTEwMDA4Rjg0MDA0QzhGODUwMDVDMDA3MDE4MjEwMDY0MTAyMzg3Cis6MTA0QTIwMDAxODQwMDAwNEFGODMwMDUwQUY2MzAwNTQ4RjY2MDA1NEY5Cis6MTA0QTMwMDBBRjg2MDA0QzEyMDAwMDBDMDAwMDAwMDA4RjQ0MDA3NDkwCis6MTA0QTQwMDA5MzY4MDA4MTM0MDlGQTAwMkQwNzAwMDcxMEUwMDAwNTgzCis6MTA0QTUwMDAwMDg5MTAyMTkzNkMwMDgxMjQwQjAxRjQwMThCNTAwNDE4Cis6MTA0QTYwMDAwMTQ0MTAyMUFGNjIwMDBDOEY0RTA5NUMwMUM1NjgyMzIwCis6MTA0QTcwMDAxOUEwMDAwNDhGQkYwMDE0OEY0RjA5NUNBRjhGMDA1QzNBCis6MTA0QTgwMDA4RkJGMDAxNDhGQjAwMDEwMEEwMDAwNjIyN0JEMDAxODBECis6MTA0QTkwMDA4Rjg0MDA2NDhGODMwMDUwOEY4MjAwNENBRjY0MDA0NDg5Cis6MTA0QUEwMDBBRjYzMDA1MDAzRTAwMDA4QUY2MjAwNTQzQzAzODAwMDk1Cis6MTA0QUIwMDAzNDYyMDA3MDhDNDMwMDAwMjdCREZGRjgzMDg3MDBGRjkwCis6MTA0QUMwMDAzMEE5MDBGRjMwQzgwMEZGQUY4MzAwMzA4RjQ0MDE3ODY5Cis6MTA0QUQwMDAwNDgwRkZGRTNDMDI4MDAwMzQ1OTAwNzA4RjM4MDAwMEQzCis6MTA0QUUwMDBBM0E3MDAwMzNDMDcwODAwOENFNzAwNzQ4RkFDMDAwMDBDCis6MTA0QUYwMDAzQzA2MDgwMDhDQzYwMDcwMDMwMzc4MjMzQzBFN0ZGRjQxCis6MTA0QjAwMDAwMEVGQzgyMTM1Q0RGRkZGMDAwMDUwMjEwMThEMjgyNDgyCis6MTA0QjEwMDAwMENBMTgyMTAwMDg0N0MwMDMyRjIwMkIwMEE4MTAyNTI5Cis6MTA0QjIwMDAwMDY0QzAyMUFGQTIwMDAwM0MwMTA4MDBBQzM5MDA3NDUxCis6MTA0QjMwMDAzQzAxMDgwMEFDMzgwMDcwOTM0RjAxMEFBM0EwMDAwMkFBCis6MTA0QjQwMDAzQzBFODBGRkEzQUYwMDAxOEZBQzAwMDAzMTJCMDA3RjMzCis6MTA0QjUwMDAzNUNERkZGRjAxOEQ0ODI0MDAwQjU2MDAwMTJBNDAyNTZBCis6MTA0QjYwMDAyNDA3MzAwMDI0MDZGRjgwM0MwNTEwMDAyN0JEMDAwODA0Cis6MTA0QjcwMDBBRjQ4MDE0Q0FGNDcwMTU0QTc0MDAxNThBMzQ2MDE1MjJBCis6MTA0QjgwMDAwM0UwMDAwOEFGNDUwMTc4MjdCREZGRThBRkJGMDAxNDgwCis6MTA0QjkwMDBBRkIwMDAxMDhGNjUwMDc0M0MwNjgwMDAzMDkwMDBGRkJECis6MTA0QkEwMDAwMEE2MjAyNTBFMDAwMDYwQUY2NDAwNzQ5MzYzMDAwNTJBCis6MTA0QkIwMDAzNDYyMDAwODBFMDAwMDYyQTM2MjAwMDUwMjAwMjAyMTlBCis6MTA0QkMwMDA4RkJGMDAxNDhGQjAwMDEwMjQwNTAwMDUyNDA2MDAwMURCCis6MTA0QkQwMDAwQTAwMDU2RTI3QkQwMDE4MjdCREZGRTAzQzAzODAwMERBCis6MTA0QkUwMDBBRkIwMDAxMEFGQkYwMDE4QUZCMTAwMTQzNDYyMDA3MDU2Cis6MTA0QkYwMDA4QzQ3MDAwMDMwOTAwMEZGMzBBODAwRkZBRjg3MDAzMEU2Cis6MTA0QzAwMDA4RjQ0MDE3ODA0ODBGRkZFM0MxODgwMDAzNzExMDA3MDRCCis6MTA0QzEwMDA4RTJGMDAwMDNDMEQwODAwOERBRDAwNzQzQzBBMDgwMDhBCis6MTA0QzIwMDA4RDRBMDA3MDAxRTc3MDIzMDFBRTI4MjEwMDAwNTgyMTUxCis6MTA0QzMwMDAwMEFFMzAyQjAxNEI0ODIxMDEyNjM4MjEzQzAxMDgwMEYxCis6MTA0QzQwMDBBQzI1MDA3NDAwMDA4ODIxM0MwMTA4MDBBQzI3MDA3MEVFCis6MTA0QzUwMDAxMTAwMDAwRjAwMDAwMDAwOEY2MjAwNzQyNjE5RkZGRjkyCis6MTA0QzYwMDAzMjA4MDA3RjAwMDJGRTAyMzNFNTAwN0YxNTAwMDAwNkQ3Cis6MTA0QzcwMDAzMzIyMDBGRjI0MDdGRjgwMDIwNzIwMjYyNEEzRkZGRjIyCis6MTA0QzgwMDAwMDgzODAyNTMyMDIwMEZGMDA0MDgwMjEyNDExMTAwODlCCis6MTA0QzkwMDAwRTAwMDA2MDAwMDAwMDAwOEY0OTA4MTgzMTI1MDAwNDU0Cis6MTA0Q0EwMDAxNEEwRkZGRDMyMTgwMDdGMDAxODc4QzAwMDE4NzE0MDcyCis6MTA0Q0IwMDAwMUNGNjgyMTI1QUMwMDg4QUY0QzA4MTgyNzRBMDk4MDJECis6MTA0Q0MwMDA4RDRCMDAyMEFGNEIwMTQ0OEQ0NjAwMjRBRjQ2MDE0ODc4Cis6MTA0Q0QwMDBBMzUwMDE1MDBFMDAwMDYyQTc0MDAxNTgwMjIwMTAyMThECis6MTA0Q0UwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwOEQwCis6MTA0Q0YwMDAyN0JEMDAyMDI3QkRGRkU4MzA4NDAwRkZBRkJGMDAxMEI0Cis6MTA0RDAwMDAwRTAwMDVCOTMwQTUwMEZGOEY4MzAwNTA4RkJGMDAxMDQzCis6MTA0RDEwMDAzNDQ1MDA0MDI0MDRGRjkwM0MwMjEwMDAyN0JEMDAxOEQ5Cis6MTA0RDIwMDBBRjQzMDE0Q0EzNDQwMTUyQUY0NTAxNTQwM0UwMDAwOEQ2Cis6MTA0RDMwMDBBRjQyMDE3ODkzNDMwOTNFMzA2MjAwMDgxMDQwMDAwREY1Cis6MTA0RDQwMDAzQzA5MDEwMTM1MjgwODBBQUM4ODAwMDA4RjQ3MDA3NDJGCis6MTA0RDUwMDBBQzg3MDAwNDNDMDYwODAwOTBDNjNDRDAzMEM1MDAxMDZCCis6MTA0RDYwMDA1MEEwMDAwNkFDODAwMDA4OEY2QTAwNjBBQzhBMDAwODgyCis6MTA0RDcwMDAyNDg0MDAwQzAzRTAwMDA4MDA4MDEwMjEwQTAwMDYyMEIzCis6MTA0RDgwMDAyNDg0MDAwQzI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMEIzCis6MTA0RDkwMDA5MzQ2MDkzRjAwQTA1MDIxMDAwNTI4ODAwMDg1MzgyMzU0Cis6MTA0REEwMDAzMEMyMDBGRjI0MDMwMDA2M0MwOTA4MDA5NTI5M0NDNkQ4Cis6MTA0REIwMDAyNEU4RkZEODI0MDUwMDA0MTA0MzAwMzcyNDA2MDAwMjJECis6MTA0REMwMDA5NzUwMDkzQzNDMEYwMjA0MDAwNjM0MDAzMjBFRkZGRkVFCis6MTA0REQwMDAwMUNGNjgyNUFDOEQwMDAwOTM0QzA5M0UzMThCMDAyMDNCCis6MTA0REUwMDAxMTYwMDAwODAwMDAwMDAwOTM0MzA5MzYzQzAyMDEwM0YzCis6MTA0REYwMDAzNDVGMDMwMDMwNzkwMEZGMDMzRkMwMjUyNDA1MDAwODFECis6MTA0RTAwMDBBQzk4MDAwNDkzNDMwOTM0OTM1OTA5MjEwMDA1Rjg4MkIyCis6MTA0RTEwMDAzMDYyMDBGRjAwMDJDMDgyMzMyRjAwRkYwMDE4NkUwMEQ2Cis6MTA0RTIwMDAwMDBGNzQwMDAxQUU2MDI1MDE4OTIwMjUzQzA5NDAwMDc3Cis6MTA0RTMwMDAwMDg5ODAyNUFDRjBGRkQ4OTM0MzA5Mzc4RjRGMDk0ODhDCis6MTA0RTQwMDA4RjU4MDk0MDMwNjIwMEZGMDA0QUM4MjEwMzNGNzAyMTlCCis6MTA0RTUwMDAwMUY4NjAyMzAwMEU2RjAwMDFBNjUwMjUzMTg1RkZGRjg5Cis6MTA0RTYwMDAwMDFGNTg4MDAxNDU0ODI1MDE2ODM4MjFBRDA5MDAyMDAwCis6MTA0RTcwMDAwRTAwMDA2MDI0RjAwMDI4MjQwNDAwMDQwRTAwMDA2MkVDCis6MTA0RTgwMDBBMzY0MDAzRjAyMDAxMDIxOEZCRjAwMTQ4RkIwMDAxMEY4Cis6MTA0RTkwMDAwM0UwMDAwODI3QkQwMDE4MEEwMDA2MzMyNDA2MDAxMkFDCis6MTA0RUEwMDAyN0JERkZEMDI0MDkwMDEwQUZCNjAwMjhBRkI1MDAyNEZECis6MTA0RUIwMDBBRkI0MDAyMEFGQjEwMDE0QUZCMDAwMTAzQzAxMDgwMDQ3Cis6MTA0RUMwMDBBMDI5M0NEMEFGQkYwMDJDQUZCMzAwMUNBRkIyMDAxODdDCis6MTA0RUQwMDA5NzQ4MDkwODMwOTUwMEZGM0MwMjAwMEUzMTA3RkZGRjlDCis6MTA0RUUwMDAwMDA3MzFDMEFGNDYwMDJDOTc0NDA5MDg5MzQ0MDEwQkRBCis6MTA0RUYwMDAzMEI0MDBGRjAzNDI4MDIxMzA4MzAwMzAwMDAwQjAyMTM1Cis6MTA0RjAwMDAxMDYwMDEwNzAwMDA4ODIxMjQwQzAwMDQzQzAxMDgwMDA3Cis6MTA0RjEwMDBBMDJDM0NEMDkzNEIwOTNFMDAwQjU2MDAwMDBBMkUwM0Y4Cis6MTA0RjIwMDAwNEEwMDE0QjAwMDAwMDAwQUY0MDAwNDg5MzRGMDEwQjZDCis6MTA0RjMwMDAzMUVFMDAyMDExQzAwMDA2MDAwMDAwMDA5MzU4MDkzRTI5Cis6MTA0RjQwMDAwMDE4OUUwMDAwMTM5NjAzMDY0MDAxNkIwMDAwMDAwMDRECis6MTA0RjUwMDA5MzQ0MDEwQjMwODMwMDQwMTA2MDAwMDM4RjkzMDA1MDk2Cis6MTA0RjYwMDA4RjgyMDA1MDI0NTNGRkZGOTM0NzA5M0UzMEU2MDAwODJDCis6MTA0RjcwMDAxNEMwMDAwMjI0MTIwMDAzMDAwMDkwMjE5NjE5MDAyQzk2Cis6MTA0RjgwMDA5MzU4MDkzNDkzNEYwOTM3QTc5OTAwNTgzMzBDMDBGRjAxCis6MTA0RjkwMDAzMUVFMDBGRjAyNEU2ODIxMDAwRDU4ODAwMTZDNTAyMTU3Cis6MTA0RkEwMDAwMTUxNDAyMTNDMDEwODAwQTQyODNDQzY5MjA1MDAxODhDCis6MTA0RkIwMDAzMEE5MDBGRjAxMDkxODIxM0MwMTA4MDBBNDIzM0NDOEM2Cis6MTA0RkMwMDA5MjExMDAxODE2MjAwMDAzMjQ2NzAwMEEwMDAwMDAwRDRCCis6MTA0RkQwMDAyNDY3MDAwQTMwRjBGRkZGM0MwMTA4MDBBNDIzM0NDQTBDCis6MTA0RkUwMDAzQzAxMDgwMEE0MjAzQ0MwM0MwMTA4MDBBNDIwM0NCQ0JCCis6MTA0RkYwMDAwRTAwMDA5RTAyMDAyMDIxMEUwMDA0OUEwMDQwMjAyMTk1Cis6MTA1MDAwMDA4RjRCMDAyQzk3NEEwOTA4M0MwQzAwMEUwMzRDMzgyMUFBCis6MTA1MDEwMDAzMTQ1RkZGRjAwMDU0OUMwQUY0OTAwMkM5NzQzMDkwOEZGCis6MTA1MDIwMDA5NEYxMDAxQTAwNDA0MDIxMjQxRjAwMDEzMjI2RkZGRkE2Cis6MTA1MDMwMDBBQzQ2MDAwMDhDRTIwMDFDQUQwMjAwMDQ4Q0U0MDAyMEIxCis6MTA1MDQwMDBBRDA0MDAwODkwRTMwMDE5MzA2MzAwMDMxMDdGMDBENjIwCis6MTA1MDUwMDAyODZEMDAwMjE1QTAwMTFDMjQwRTAwMDIxMDZFMDEwRTI2Cis6MTA1MDYwMDAyNDBGMDAwMzEwNkYwMEUzMDAwMDAwMDAzQzA5MDgwMDVCCis6MTA1MDcwMDA5NTI5M0NDMDkzNEUwOTM0OTM1MTA5MjEzQzBBMDgwMEZDCis6MTA1MDgwMDA5NTRBM0NDNjMxQ0QwMEZGOTRGOTAwMkEwMDBEMTg4MkU0Cis6MTA1MDkwMDA5Nzg3MDA1ODMyMkMwMEZGMDAwMzJFMDAwMDBDMjQwMERDCis6MTA1MEEwMDAzMTI2RkZGRjMxNDJGRkZGMDBBNEY4MjUwMDQ2NDgyMUNBCis6MTA1MEIwMDAwM0U5NzgyNTAzMjc3MDIxM0MxODQwMDAwMUY4NjgyNTkyCis6MTA1MEMwMDAwMDBFOEMwMEFEMEQwMDAwQUQxMTAwMDQ5MzRDMDkyMEMyCis6MTA1MEQwMDAzQzAzMDAwNjI1MTEwMDE0MDAwQzJFMDAwMEEzMTAyNTJGCis6MTA1MEUwMDBBRDAyMDAwODhGNDkwOTJDMjRFNDAwMDEzMDlGN0ZGRkE2Cis6MTA1MEYwMDBBRDA5MDAwQzhGNDYwOTMwMjUwOTAwMjhBNzlGMDA1OEVDCis6MTA1MTAwMDBBRDA2MDAxMDhGNTkwOTM4MDEyMDMwMjFBRDE5MDAxNDY3Cis6MTA1MTEwMDBBRTMzMDAwNDhGNTgwOTQwQUUzODAwMDg5MzRGMDkzNzZBCis6MTA1MTIwMDAzQzBDMDgwMDkxOEMzQ0QwQUUyMDAwMTAzMUVFMDBGRjBBCis6MTA1MTMwMDAwMUQyNjgyMTAwMEQyRjAwMDAwQzFDMDAwMEEzMTAyNUQ3Cis6MTA1MTQwMDAzNDQ3RkZGRkFFMjcwMDBDQUY0QjAwMkM5MzRCMDkzRUJBCis6MTA1MTUwMDAzMTczMDAwODEyNjAwMDBEM0MwRjAxMDEzNUU3MDgwQUE5Cis6MTA1MTYwMDBBRDA3MDAyODhGNEIwMDc0QUQyQjAwMDQzQzEzMDgwMEUyCis6MTA1MTcwMDA5MjczM0NEMDMyNjgwMDEwNTEwMDAwMDNBRDIwMDAwODRCCis6MTA1MTgwMDA4Rjc4MDA2MEFEMzgwMDA4MjUyNjAwMEMxMkMwMDAzODZBCis6MTA1MTkwMDAwMDAwMDAwMDkzNUYwOTNGMjQxNjAwMDYyNDA3MDAwNDY2Cis6MTA1MUEwMDAzM0Y5MDBGRjEzMzYwMEQyMjQwODAwMDI5NzQzMDkzQzZDCis6MTA1MUIwMDAzQzBDMDIwNDMwNjRGRkZGMDA4QzI4MjVBQ0M1MDAwMEM1Cis6MTA1MUMwMDA5MzQyMDkzRTMwNDkwMDIwMTEyMDAwMDgwMDAwMDAwMEYxCis6MTA1MUQwMDA5MzRCMDkzNjNDMTMwMTAzMzY2RTAzMDAzMTZEMDBGRjFCCis6MTA1MUUwMDAwMUFFODgyNUFDRDEwMDA0MjQwNzAwMDg5MzQ5MDkzNDk2Cis6MTA1MUYwMDA5MzU5MDkyMTMxNEJGRkZGMzEzRjAwRkYwMDFGQjA4MjVGCis6MTA1MjAwMDAzMzM4MDBGRjAwMTY1NjAwMDAxODdDMDAwMTRGOTgyNTI3Cis6MTA1MjEwMDAwMDEyMjg4MDAyNkI2ODI1M0MwRTQwMDAwMEM1NTAyMzE4Cis6MTA1MjIwMDAwMUFFODgyNUFENTFGRkQ4OTM0MzA5Mzc4RjVGMDk0OEY4Cis6MTA1MjMwMDA4RjQ5MDk0MDMwNkMwMEZGMDE5MjEwMjEwMDA3MjA4MjQ1Cis6MTA1MjQwMDAwMDQ0QzgyMTAzRTk3ODIzMDAxOUM3MDAwMDA4QjQwMDBFCis6MTA1MjUwMDAwMzE2NDAyNTMxRTdGRkZGMDEwNzMwMjUwRTAwMDA2MEVGCis6MTA1MjYwMDBBRDQ2RkZGODI0MTIwMDA0MEUwMDAwNjJBMzcyMDAzRjU2Cis6MTA1MjcwMDAwRTAwMDBDNzAyMDAyMDIxM0MxMjA4MDA5MjUyM0NEMEQwCis6MTA1MjgwMDAzMjUwMDAwMzEyMDAwMDBGMDJBMDIwMjE4RjgyMDA1MDM0Cis6MTA1MjkwMDAyNDQ3MDAwMUFGODcwMDUwQUY2NzAwNTA4RjY4MDA1NDZCCis6MTA1MkEwMDAwMTA3MzAyMzE4QzAwMDAyMDBFMDIwMjE4RjY0MDA1NDYxCis6MTA1MkIwMDBBRjY0MDA1NDhGNEMwMDc0MjU4NDAxRjRBRjY0MDAwQzdCCis6MTA1MkMwMDAwMkEwMjAyMTAyODAyODIxQTc2MDAwNjgwRTAwMDVCOUY1Cis6MTA1MkQwMDAzQzE0MTAwMDhGOEQwMDUwMzQ1NTAwMDZBRjREMDE0QzJBCis6MTA1MkUwMDA4RjkxMDA0ODhGQkYwMDJDOEZCNjAwMjgyNjIzMDAwMTI1Cis6MTA1MkYwMDBBRjgzMDA0ODhGQjMwMDFDQTM1MTAxNTI4RkIyMDAxODM2Cis6MTA1MzAwMDBBRjU1MDE1NDhGQjEwMDE0QUY1NDAxNzg4RkI1MDAyNDBDCis6MTA1MzEwMDA4RkI0MDAyMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAzMERDCis6MTA1MzIwMDA5MzU4MDkzRTAwMTg5RTAwMDAxMzk2MDMwNjQyMDA1MTUwCis6MTA1MzMwMDAyNDExMDAwMjkzNDQwOTIzMzA4MzAwMDIxMDYwRkVGQjE1Cis6MTA1MzQwMDA4Rjg2MDA2MDhGODIwMDUwMTRDMkZFRjgwMDAwMDAwMEJCCis6MTA1MzUwMDAwRTAwMDA2MDAwMDAwMDAwOTM2OTAwM0YyNDA3MDAxNjYzCis6MTA1MzYwMDAzMTI4MDBGRjExMDcwMDBDMjQwNTAwMDgzQzBDMDgwMDQwCis6MTA1MzcwMDA5MThDM0NEMDM1OEIwMDAxM0MwMTA4MDBBMDJCM0NEMDI3Cis6MTA1MzgwMDA5MzZBMDAzRjMxNDMwMEZGMTA2NTAwNjUyNDBEMDAwQTU5Cis6MTA1MzkwMDAxMDZEMDA1RTI0MDIwMDBDMEUwMDAwNjIwMDAwMDAwMDkwCis6MTA1M0EwMDAwQTAwMDY4RTAwMDAwMDAwM0MwOTA4MDA5NTI5M0NDMDU4Cis6MTA1M0IwMDAzQzA0MDgwMDk0ODQzQ0NBM0MxRjA4MDA5N0ZGM0NCQzk2Cis6MTA1M0MwMDA5NEY4MDAyNDMxMjNGRkZGMDA4M0M4MjEwMzNGNzgyMzkyCis6MTA1M0QwMDAwMDE4NkMwMDI1RUVGRkYyMDFBRTYwMjUyNDBBMDgwMERCCis6MTA1M0UwMDBBRDBDMDAwQ0FEMEEwMDE0QUQwMDAwMTAwQTAwMDZFMDgwCis6MTA1M0YwMDAyNTA4MDAxODNDMDkwODAwOTUyOTNDQzAzQzFGMDgwMEZFCis6MTA1NDAwMDA5N0ZGM0NDQTNDMTkwODAwOTczOTNDQkM5NEVGMDAyNDM0Cis6MTA1NDEwMDAzMTI0RkZGRjk0RUUwMDI4MDNFNEMwMjEwMzE5NjgyMzIwCis6MTA1NDIwMDAwMDBGMkMwMDAwMEU1NDAwMjVBQ0ZGRUUwMTRDODgyNTI3Cis6MTA1NDMwMDAzNEEyODEwMDI0MDYwODAwQUQwMjAwMENBRDExMDAxMDVBCis6MTA1NDQwMDBBRDA2MDAxOEFEMDAwMDE0MEEwMDA2RTAyNTA4MDAxQzk3Cis6MTA1NDUwMDA4RjZFMDA4NDhGNEQwOTQwMTFBMEZFQjNBRjhFMDA1MEI3Cis6MTA1NDYwMDAyNDBGMDAxNDNDMDEwODAwQTAyRjNDRDAwQTAwMDY4RDM4Cis6MTA1NDcwMDAwMDAwMDAwMDNDMDEwODAwQTAzMTNDRDA5MzVGMDkzRUQxCis6MTA1NDgwMDAyNDE2MDAwMTMzRjkwMDIwMTcyMEZFQTgyNDExMDAwODdCCis6MTA1NDkwMDAwQTAwMDY4RTI0MTEwMDA0OTRFNTAwMjQ5NEYxMDAyOEVCCis6MTA1NEEwMDAzQzA5MDgwMDk1MjkzQ0MwMDAwNTE0MDAwMDExMzQwMDk3Cis6MTA1NEIwMDAzNDQ0ODEwMDM0QzMwODAwQUQwNDAwMENBRDAzMDAxMDc3Cis6MTA1NEMwMDAwQTAwMDZFMDI1MDgwMDE0MTQ2MEZFRTgwMDAwMDAwMDUxCis6MTA1NEQwMDA5NEZGMDAyNDNDMDkwODAwOTUyOTNDQzAwMDFGQ0MwMDIzCis6MTA1NEUwMDAzNzM4MDgwMEFEMTgwMDBDMEEwMDA2RTAyNTA4MDAxMDQ3Cis6MTA1NEYwMDAwQTAwMDcyRTI0MDgwMDEyOEY3RjAwNENBRjdGMDA1NDUzCis6MTA1NTAwMDA4Rjc5MDA1NDBBMDAwNjk3QUY3OTAwNTBBMzYyMDAzRkRDCis6MTA1NTEwMDAwRTAwMDA2MjAwMDAwMDAwMEEwMDA2OEUwMDAwMDAwMDdECis6MTA1NTIwMDAyNDAyMDAxNDBBMDAwODA3QTM2MjAwM0YyN0JERkZFODE5Cis6MTA1NTMwMDAzMDg0MDBGRkFGQkYwMDEwMEUwMDA1QjkzMEE1MDBGRjlBCis6MTA1NTQwMDA5Mzc4MDA3RTkzNzkwMDdGOTM2RTAwODA5MzY4MDA3QTUxCis6MTA1NTUwMDAzMzJGMDBGRjAwMTg2NjAwMDAwRjZDMDAzMUNCMDBGRkY2Cis6MTA1NTYwMDAwMThENDgyNTAwMEI1MjAwOEZCRjAwMTAwMTJBMzgyNUZECis6MTA1NTcwMDAzMTA2MDBGRjM0NDQ3MDAwMDBFNjI4MjUyNDAyRkY4MTM0Cis6MTA1NTgwMDAzQzAzMTAwMDI3QkQwMDE4QUY0NTAxNENBRjQ0MDE1NDQ3Cis6MTA1NTkwMDBBMzQyMDE1MjAzRTAwMDA4QUY0MzAxNzgyN0JERkZEOEMyCis6MTA1NUEwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyMDExCis6MTA1NUIwMDBBRkIzMDAxQzkzNDIwMTA5MzA4NjAwRkYzMEIwMDBGRkZBCis6MTA1NUMwMDAwMDA2MThDMjMyMDQwMDAyMzA3MTAwMDExNDgwMDAwNTg4Cis6MTA1NUQwMDAzMDUyMDBGRjkzNjcwMDA1MzBFNTAwMDgxMEEwMDAwRDcxCis6MTA1NUUwMDAzMEM4MDAxMDAyNDAyMDIxMEUwMDA1QTUwMjIwMjgyMTBECis6MTA1NUYwMDAyNDA0MDAwMThGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODVECis6MTA1NjAwMDA4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODVCCis6MTA1NjEwMDAyN0JEMDAyODE1MDAwMDMyMDAwMDAwMDA5MzQzMDEwOTU3Cis6MTA1NjIwMDAwMDAwMjgyMTMwNjIwMDdGMDAwMjIwQzAwMDAyRjk0MDAzCis6MTA1NjMwMDAwM0U0OTgyMTI2NzkwMDg4MDMzQjk4MjE4RTc4MDAyNDgyCis6MTA1NjQwMDA4RTZGMDAwODEzMEYwMDQ2MDAwMDAwMDA4RjY0MDA4NDc2Cis6MTA1NjUwMDAyNDE4MDAwMjAwMDRGRDgyMzNGOTAwMDMxMzM4MDA3QzkzCis6MTA1NjYwMDAwMDAwMDAwMDkzNjYwMDgzOTM0QTAxMDk1MTQ2MDAwNDNDCis6MTA1NjcwMDAzMjA1MDA3QzEwQTAwMDYwMDAwMDAwMDAzMjA1MDA3Q0I0Cis6MTA1NjgwMDAxNEEwMDA1MzAyNDAyMDIxMTYyMDAwMDYzMjA0MDAwMTFECis6MTA1NjkwMDA4RTdGMDAyNDhGNTkwMTA0MTdGOUZGRDYwMDAwMjAyMUM2Cis6MTA1NkEwMDAzMjA0MDAwMTEwODAwMDBBMDI0MDIwMjE4RjQyMDk0MDhDCis6MTA1NkIwMDA4RjkzMDA2NDEwNTMwMDA2MDAwMDAwMDAwRTAwMDY2QjdDCis6MTA1NkMwMDAwMjIwMjgyMThGNDMwOTQwQUY2MzAwNDQwMjQwMjAyMTdCCis6MTA1NkQwMDAwRTAwMDYwMDAyMjAyODIxMEEwMDA4NDAyNDA0MDAwMUQwCis6MTA1NkUwMDAzQzA5MDgwMDhEMjkwMDY0MjUyNjAwMDEzQzAxMDgwMEMyCis6MTA1NkYwMDBBQzI2MDA2NDE2MDAwMDEyMDAwMDAwMDA4RjZEMDA4NENDCis6MTA1NzAwMDAzQzBFMDBDMDAxQUU2MDI0MTU4MDAwMDUwMjQwMjAyMTNGCis6MTA1NzEwMDAwRTAwMDgwRTAyMjAyODIxMEEwMDA4NDAyNDA0MDAwMTdGCis6MTA1NzIwMDAyNDA1MDAwNDBFMDAwNTZFMjQwNjAwMDEwMjQwMjAyMTFECis6MTA1NzMwMDAwRTAwMDgwRTAyMjAyODIxMEEwMDA4NDAyNDA0MDAwMTVGCis6MTA1NzQwMDAwRTAwMDA0MTI0MDQwMDAxOTM2QjAwN0QwMjBCNTAyNUU0Cis6MTA1NzUwMDAwRTAwMDA2MkEzNkEwMDdEMEEwMDA4ODM4RjZEMDA4NDNBCis6MTA1NzYwMDA4RjY2MDA3NDhGNDgwMTA0OEU2NzAwMjQwMDA2NEUwMjg1Cis6MTA1NzcwMDAxNTA3RkZCNjMxMjYwMDdGOTM2QjAwODMyNjQ0MDAwMTk2Cis6MTA1NzgwMDAzMDhBMDA3RjExNDYwMDQzMzE2MzAwRkY1NDY0RkZCMDRDCis6MTA1NzkwMDA4RjY0MDA4NDI2NDUwMDAxMzBCMTAwN0YzMEEyMDBGRkY1Cis6MTA1N0EwMDAxMjI2MDAwNDI0MDUwMDAxMDA0MDkwMjEwQTAwMDg1NjNBCis6MTA1N0IwMDAyNDExMDAwMTI0MEZGRjgwMDI0RjcwMjQwMUNGOTAyNjk2Cis6MTA1N0MwMDAzMjQyMDBGRjAwNDA5MDIxMEEwMDA4NTYyNDExMDAwMUQ3Cis6MTA1N0QwMDAwRTAwMDY2QjAyMjAyODIxMzIxODAwMzAxMzAwRkZBQUE5Cis6MTA1N0UwMDAzMjEwMDA4MjAyNDAyMDIxMEUwMDA1QTUwMjIwMjgyMTRGCis6MTA1N0YwMDAwQTAwMDg0MDI0MDQwMDAxOEY2RTAwNzQzQzBGODAwMEYyCis6MTA1ODAwMDAyNDA1MDAwMzAxQ0Y5MDI1QUY3MjAwNzQ5MzcxMDA4M0NCCis6MTA1ODEwMDAyNDA2MDAwMTBFMDAwNTZFMzIyNDAwRkYwRTAwMDA0MTM4Cis6MTA1ODIwMDAyNDA0MDAwMTkzNkQwMDdEMDIwRDYwMjUwRTAwMDA2MkNFCis6MTA1ODMwMDBBMzZDMDA3RDNDMEIwODAwOEQ2QjAwNTQyNTcwMDAwMUFCCis6MTA1ODQwMDAzQzAxMDgwMEFDMzAwMDU0MEEwMDA4NDAyNDA0MDAwMTY4Cis6MTA1ODUwMDA4RjY4MDA3NDNDMDk4MDAwMjQwNTAwMDQwMTA5MzgyNTg0Cis6MTA1ODYwMDBBRjY3MDA3NDkzNjMwMDgzMjQwNjAwMDEwRTAwMDU2RTg5Cis6MTA1ODcwMDAzMDY0MDBGRjBFMDAwMDQxMjQwNDAwMDE5MzYyMDA3REFCCis6MTA1ODgwMDAwMjAyOTgyNTBFMDAwMDYyQTM3MzAwN0QwQTAwMDg0MDAyCis6MTA1ODkwMDAyNDA0MDAwMTMyNEQwMDgwMzlBQzAwODA1NDZDRkY2QzUwCis6MTA1OEEwMDA4RjY0MDA4NDBBMDAwOEE5MjY0NTAwMDEyN0JERkZDOEFGCis6MTA1OEIwMDAzQzBBMDAwOEFGQkYwMDMwQUZCNTAwMkNBRkI0MDAyOEUxCis6MTA1OEMwMDBBRkIzMDAyNEFGQjIwMDIwQUZCMTAwMUNBRkIwMDAxOERFCis6MTA1OEQwMDAwMzRBRDgyMTI0MDkwMDQwQUY0OTA4MTRBRjQwMDgxMEZBCis6MTA1OEUwMDA4RjQyMDk0NDhGNDMwOTUwOEY0NjA5NTQ4RjQ3MDk1QzAyCis6MTA1OEYwMDA4RjQ4MDk0QzkzNDQwMTA4OTM0NTAxMEJBRjgyMDA2NDIzCis6MTA1OTAwMDAzMDg0MDBGRjMwQTUwMEZGQUY4MzAwNTBBRjg2MDA0QzBECis6MTA1OTEwMDBBRjg3MDA1QzBFMDAwODJBQUY4ODAwNjAxNDQwMDE3NDU1Cis6MTA1OTIwMDA4RkJGMDAzMEE3NjAwMDY4OTM0RDA5MDAyNDBCMDA1MDIyCis6MTA1OTMwMDAzQzE1MDgwMDI2QjUzQzg4MzFBQzAwRkYzQzEyMDgwMDNECis6MTA1OTQwMDAyNjUyM0M5ODExOEIwMDAzMDAwMDAwMDAwMDAwQTgyMUEzCis6MTA1OTUwMDAwMDAwOTAyMTkzNTEwMTA5OEY5RjAwNTAyNDA0MDAxMEYyCis6MTA1OTYwMDAzMjJFMDA3RjAwMEU2OEMwMDAwRTYxNDAwMThEMjgyMTlDCis6MTA1OTcwMDAyNEI0MDA4OEFGNTQwODE4OEY0OTAxMDQ4RjRBMDlBNDQxCis6MTA1OTgwMDAzQzBCMDAwRTAzNEJDMDIxMDEyQTEwMjMzQzAxMDgwMEYwCis6MTA1OTkwMDBBQzIyM0NBQzhGNDMwOTU4M0MwMTA4MDBBMDI0M0NEMDA5Cis6MTA1OUEwMDA5NzQ3MDkwODAwN0YzMDIzM0MwMTA4MDBBQzI2M0NCMDMzCis6MTA1OUIwMDAzMEU4RkZGRjAwMDhDOUMwM0MwMTA4MDBBQzNGM0NENDAwCis6MTA1OUMwMDBBRjU5MDAyQzk3NDIwOTA4OTcxMDAwMkM4RUIxMDAwMEE3Cis6MTA1OUQwMDA5MzBGMDAxODAzNzQ5ODIxQTc5MDAwNThBRjkzMDA0NEM4Cis6MTA1OUUwMDAwMjIwRjgwOTMxRjAwMEZGMzA0RTAwMDIxNUMwMDFBOTc1Cis6MTA1OUYwMDAzMDRGMDAwMTExRTAwMTVEMDAwMDAwMDA5MzQzMDkzRUJCCis6MTA1QTAwMDAzMDY2MDAwODE0QzAwMDAyMjQxNDAwMDMwMDAwQTAyMTI2Cis6MTA1QTEwMDA4RjU4MDlBNDI0MTMwMDAxM0MwMTA4MDBBQzM4M0NEODdECis6MTA1QTIwMDA5MzRGMDkzNDkzNTEwOTM3MzFFQzAwRkYzMjJFMDBGRkI4Cis6MTA1QTMwMDAwMjhFNjgyMTAwMEQyODgwMDBBQzUwMjEwMTUwNTgyMUIxCis6MTA1QTQwMDAzQzAxMDgwMEE0MkIzQ0M4M0MwMTA4MDBBNDJBM0NDNjI5Cis6MTA1QTUwMDA5MzQ5MDkzNDMxMjIwMEZGMDIwMjIwMjEyNDkwMDAxMEQyCis6MTA1QTYwMDAzQzAxMDgwMEE0MzAzQ0M0MjQwNzAwMDY4RjlGMDA1MDZFCis6MTA1QTcwMDAzQzAxMDgwMEFDMjczQ0NDOEY4ODAwNUM4RjU5MDk1ODRBCis6MTA1QTgwMDAwMDAwODAyMTAxMUYyODIzMDRBMDAxNTEwMzNGMjAyMzhGCis6MTA1QTkwMDAwNDgwMDE0RjAwQTQzMDJCMTBDMDAxNTEwMDAwMDAwMDExCis6MTA1QUEwMDAzQzAxMDgwMEFDMjUzQ0IwOEU0MjAwMDAwMDQwRjgwOUUzCis6MTA1QUIwMDAwMDAwMDAwMDMwNDMwMDAyMTQ2MDAwRjEwMDQwODgyMTIzCis6MTA1QUMwMDAzMDQ0MDAwMTU0ODAwMDEwOEU0MjAwMDQzQzA5MDgwMDVDCis6MTA1QUQwMDA4RDI5M0NCNDNDMEFDMDAwMDEyQTgwMjVBRjUwMEUwMDNECis6MTA1QUUwMDA4RjQ1MDAwMDMwQUIwMDA4MTE2MEZGRkQwMDAwMDAwMDkyCis6MTA1QUYwMDA5NzREMEUwODI0MTAwMDAxQTc4RDAwM0M4RjRDMEUwNDFBCis6MTA1QjAwMDBBRjhDMDAzNDhFNDIwMDA0MDA0MEY4MDkwMDAwMDAwMDExCis6MTA1QjEwMDAwMjIyODgyNTMyMkUwMDAyMTVDMDAxNkYwMDAwMDAwMDBECis6MTA1QjIwMDAzQzA5MDgwMDk1MjkzQ0JDM0MwNjA4MDA5NEM2M0NDOENBCis6MTA1QjMwMDAzQzA0MDgwMDk0ODQzQ0JFM0MxODA4MDA4RjE4M0NCNDE4Cis6MTA1QjQwMDAwMTI2NTgyMTNDMEYwODAwOERFRjNDRDgzQzFGMDgwMDZGCis6MTA1QjUwMDA5N0ZGM0NEMjAxNjQxODIxOEY0RDA5NDAwMzA5QzgyMUU5Cis6MTA1QjYwMDAyNDZFMDAwMjAzM0YyODIxMDFGODYwMjEzQzAxMDgwMDU3Cis6MTA1QjcwMDBBNDJCM0NDQUFGOEQwMDY0M0MwMTA4MDBBQzJDM0NEODdGCis6MTA1QjgwMDAzQzAxMDgwMEE0MjUzQ0MwMEUwMDAwOUUzMUM0RkZGRjZDCis6MTA1QjkwMDA4Rjg3MDA0ODAwNDAyMDIxM0MwMTA4MDBBMDI3M0NEMTBECis6MTA1QkEwMDA4RTQyMDAwODI0RTgwMDAxQUY4ODAwNDgwMDQwRjgwOTUwCis6MTA1QkIwMDAwMDAwMDAwMDhGNEIwMDJDOTc0OTA5MDgzQzBBMDAwRTlBCis6MTA1QkMwMDAwMzRBMzgyMTMxMjRGRkZGMDAwNDE5QzA4RjhBMDA1MDk2Cis6MTA1QkQwMDBBRjQzMDAyQzk3NDMwOTA4OTRFNjAwMUEwMDQwNDAyMTg3Cis6MTA1QkUwMDAzMERGRkZGRkFDNUYwMDAwOENGOTAwMUNBQzU5MDAwNEYzCis6MTA1QkYwMDA4Q0Y4MDAyMEFDNTgwMDA4OTBFRjAwMTkzMUUzMDAwMzQ2Cis6MTA1QzAwMDAxMDczMDBGQjAwMDAwMDAwMjg2MjAwMDIxNDQwMDExNzFFCis6MTA1QzEwMDAyNDA1MDAwMjEwNjUwMTA5MjQwQzAwMDMxMDZDMDBCQzZGCis6MTA1QzIwMDAwMDAwMDAwMDNDMDkwODAwOTUyOTNDQzA5MzVGMDkzNDNFCis6MTA1QzMwMDA5MzRDMDkyMTNDMEQwODAwOTVBRDNDQzYzM0Y5MDBGRjlCCis6MTA1QzQwMDA5NEU1MDAyQTAwMTlDMDgyMzE4RjAwRkY5NzhDMDA1ODFDCis6MTA1QzUwMDAwMDE4MTYwMDAwMEY3NDAwMzEyNEZGRkYwMDRFMzgyNTk1Cis6MTA1QzYwMDAwMUE0MzAyMTAwRTZGODI1MDBBQ0M4MjEzQzAzNDAwMDI3Cis6MTA1QzcwMDAwM0UzQzAyNTAwMTk0QzAwQUQxODAwMDBBRDA5MDAwNDc1Cis6MTA1QzgwMDA5MzRGMDkyMDNDMEUwMDA2MjUwOTAwMTQwMDBGNkUwMEZBCis6MTA1QzkwMDAwMUFFMjgyNUFEMDUwMDA4OEY0NjA5MkMyNTgyMDAwMTlDCis6MTA1Q0EwMDAzMDQ3N0ZGRkFEMDYwMDBDOEY0NDA5MzBBNzg3MDA1OEFFCis6MTA1Q0IwMDAyNTA2MDAyOEFEMDQwMDEwOEY0MzA5MzgwMEMwMjAyMUJDCis6MTA1Q0MwMDBBRDAzMDAxNEFEMkEwMDA0OEY1RjA5NDBBRDNGMDAwODBBCis6MTA1Q0QwMDA5MzU5MDkzNzNDMEUwODAwOTFDRTNDRDBBRDIwMDAxMEZFCis6MTA1Q0UwMDAzMzM4MDBGRjAzMTQ3ODIxMDAwRjY3MDAwMDBFNkMwMEFBCis6MTA1Q0YwMDAwMThEMjgyNTM0QTJGRkZGQUQyMjAwMENBRjRCMDAyQ0Y0Cis6MTA1RDAwMDA5MzQ3MDkzRTMwRUEwMDA4NTE0MDAwMEY4RTU4MDAwQ0JFCis6MTA1RDEwMDAzQzAzMDEwMTM0NjkwODBBQUQwOTAwMjg4RjRBMDA3NDY4Cis6MTA1RDIwMDBBQ0NBMDAwNDNDMEIwODAwOTE2QjNDRDAzMTY4MDAxMEY5Cis6MTA1RDMwMDA1MTAwMDAwM0FDQzAwMDA4OEY2NTAwNjBBQ0M1MDAwOENFCis6MTA1RDQwMDAyNEM0MDAwQzhFNTgwMDBDMDMwMEY4MDkwMDAwMDAwMDY5Cis6MTA1RDUwMDAzQzBGMDgwMDk1RUYzQ0NBM0MwMjA4MDA5NDQyM0NCRTUwCis6MTA1RDYwMDAwMUUyNzAyMTI1QzQwMDAyMEUwMDAwQzczMDg0RkZGRjRECis6MTA1RDcwMDAzQzA2MDgwMDhDQzYzQ0FDM0MwRDA4MDA4REFEM0NCNDI0Cis6MTA1RDgwMDAwMENEMzgyMzNDMDEwODAwQUMyNzNDQUMxNEUwMDAwNkYxCis6MTA1RDkwMDAwMDAwMDAwMDNDMTkwODAwOEYzOTNDQ0MzNzJDMDA0MDMzCis6MTA1REEwMDAzQzAxMDgwMEFDMkMzQ0NDMTIwMDAwODU4RjhCMDA0NEQ5Cis6MTA1REIwMDA4RjQ4MEUxMDhGOTAwMDQ0QUUwODAwMjA4RjVGMEUxOEExCis6MTA1REMwMDBBRTFGMDAyNDNDMTAwODAwOTYxMDNDQzAwRTAwMDA2MDdFCis6MTA1REQwMDAwMDAwMDAwMDI0MDUwMDQwQUY0NTA4MTQ4RjgzMDA1MEU4Cis6MTA1REUwMDA4Rjg5MDA0QzAwNzAxODIxMDA2OTUwMjMxOTQwMDAwNDZECis6MTA1REYwMDBBRjgzMDA1MEFGNjMwMDU0OEY2NzAwNTRBRjg3MDA0Q0VGCis6MTA1RTAwMDAxMjAwMDAwQzAwMDAwMDAwOEY0NDAwNzQ5MzZEMDA4MUFDCis6MTA1RTEwMDAzNDBFRkEwMDJEQTYwMDA3MTBDMDAwMDUwMDhFMTgyMUQwCis6MTA1RTIwMDA5Mzc4MDA4MTI0MDIwMUY0MDMwMjc4MDQwMUU0MTgyMTJDCis6MTA1RTMwMDBBRjYzMDAwQzhGNEMwOTVDOEY5OTAwNUMwMTk5MjAyM0EzCis6MTA1RTQwMDAxODgwMDAwMzAwMDAwMDAwOEY1MDA5NUNBRjkwMDA1Q0Q4Cis6MTA1RTUwMDAwRTAwMDA2MjAwMDAwMDAwOEY4QjAwNTA4RTQ4MDAxMDgyCis6MTA1RTYwMDAzQzAxMDgwMEFDMkIzQ0Q0MDEwMEY4MDkwMDAwMDAwMDA0Cis6MTA1RTcwMDAzQzFGMDgwMDhGRkYzQ0FDMTdFMEZFRkMyNDA3MDAwNjI3Cis6MTA1RTgwMDA4RjQ1MDAyNDk3NDIwOTA4OEY4QTAwNjQ4Rjk0MDA1MDQwCis6MTA1RTkwMDAzQzBGMDAxRjk3ODcwMDU4OEY4MzAwNTQ4RjkzMDA0QzRFCis6MTA1RUEwMDAzMDRERkZGRjM1RUVGRjgwMDBBRTQ4MjQwMDBEMzFDMEJECis6MTA1RUIwMDAzMjMyMDAxMEFGNDYwMDI0QTQ2NzAwMkNBRjQ5MDAyNDAyCis6MTA1RUMwMDBBRjZBMDA0NEFGNzQwMDUwQUY3MzAwNTQ1NjQwMDA3RTc4Cis6MTA1RUQwMDA4RUI4MDAwNDMyMjQwMDQwNTQ4MDAwMzI4RUIxMDAwODk1Cis6MTA1RUUwMDA4RUFDMDAwQzAxODBGODA5MDAwMDAwMDA4RkJGMDAzMDZDCis6MTA1RUYwMDA4RkI1MDAyQzhGQjQwMDI4OEZCMzAwMjQ4RkIyMDAyMDAwCis6MTA1RjAwMDA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDgyN0JEMDAzOEQ3Cis6MTA1RjEwMDAzQzA5MDgwMDk1MjkzQ0MwM0MwNDA4MDA5NDg0M0NDQTE0Cis6MTA1RjIwMDAzQzFGMDgwMDk3RkYzQ0JDOTRGODAwMjQzMTIzRkZGRjdFCis6MTA1RjMwMDA5NEVGMDAyODAwODNDODIxMDMzRjcwMjMwMDE4MkMwMDMxCis6MTA1RjQwMDAwMDBGNjQwMDI1Q0RGRkVFMDE4RDMwMjUzNEEyODEwMEM1Cis6MTA1RjUwMDAyNDAzMDgwMEFEMDIwMDBDQUQwNjAwMTBBRDAzMDAxOENDCis6MTA1RjYwMDBBRDAwMDAxNDBBMDAwOUNFMjUwODAwMUM5MzQ3MDEwOTYyCis6MTA1RjcwMDA4Rjg4MDAzODAwMDdGRTAwMDNFOEM4MjVBRjU5MDA4MDZECis6MTA1RjgwMDA4RjU4MDlBMDhGNTMwOUE0QUZCODAwMTBBRjU4MEUxNDUyCis6MTA1RjkwMDA4RkI0MDAxMEFGNTQwRTEwQUY1MzBFMUMwQTAwMDk0MjBDCis6MTA1RkEwMDBBRjUzMEUxODAyMjBGODA5MDAwMDAwMDA4RUFDMDAwQzYwCis6MTA1RkIwMDAwMTgwRjgwOTAwMDAwMDAwMEEwMDBBN0Y4RkJGMDAzMDRFCis6MTA1RkMwMDBBNTYwMDAyMEE1NzMwMDIyMEEwMDBBMzRBRDczMDAyNEU2Cis6MTA1RkQwMDAzQzAxMDgwMEFDMjAzQ0IwMEEwMDA5NkU4RTQyMDAwMDczCis6MTA1RkUwMDAzQzAxMDgwMEFDMjQzQ0IwMEEwMDA5NkU4RTQyMDAwMDVGCis6MTA1RkYwMDAzQzA5MDgwMDk1MjkzQ0MwM0MxRjA4MDA5N0ZGM0NDQTlCCis6MTA2MDAwMDAzQzE5MDgwMDk3MzkzQ0JDOTRFRjAwMjQzMTI0RkZGRjcxCis6MTA2MDEwMDAwM0U0QzAyMTAzMTk3MDIzMDAwRjY0MDAyNUNERkZGMkIzCis6MTA2MDIwMDAwMThEMjgyNUFDNDUwMDBDMjQwMjA4MDBBRDAyMDAxNEE3Cis6MTA2MDMwMDBBRDAwMDAxMDBBMDAwOUNFMjUwODAwMTg5NEU2MDAyNERGCis6MTA2MDQwMDA5NEUzMDAyODNDMDkwODAwOTUyOTNDQzAwMDA2MjQwMDgwCis6MTA2MDUwMDAwMDAzRkMwMDM0OTk4MTAwMzdGODA4MDBBRDE5MDAwQ0VBCis6MTA2MDYwMDBBRDE4MDAxMDBBMDAwOUNFMjUwODAwMTQxNDYwRkVFRERBCis6MTA2MDcwMDAwMDAwMDAwMDk0RUYwMDI0M0MwOTA4MDA5NTI5M0NDMDcyCis6MTA2MDgwMDAwMDBGNzQwMDM1Q0QwODAwQUQwRDAwMEMwQTAwMDlDRURDCis6MTA2MDkwMDAyNTA4MDAxMDkzNTIwMTA5MDAwMDI4MjEwRTAwMDYwMDc3Cis6MTA2MEEwMDAzMjQ0MDBGRjhGQkYwMDMwOEZCNTAwMkM4RkI0MDAyODIyCis6MTA2MEIwMDA4RkIzMDAyNDhGQjIwMDIwOEZCMTAwMUM4RkIwMDAxODY2Cis6MTA2MEMwMDAwM0UwMDAwODI3QkQwMDM4MDMwMEY4MDkwMDAwMDAwMEM1Cis6MTA2MEQwMDAwQTAwMEE3OTMyMjQwMDQwMTIwMEZGNjkwMDAwMDAwMDIzCis6MTA2MEUwMDA4RjU0MEUxNDhGOTIwMDQ0QUU1NDAwMjA4RjUzMEUxQzE4Cis6MTA2MEYwMDAwQTAwMEE2M0FFNTMwMDI0OEY4MjAwMUMwMDgwNDAyMUY2Cis6MTA2MTAwMDAzQzA0MDEwMDkwNDcwMDg1MzBFMzAwMjAxMDYwMDAwOTQ2Cis6MTA2MTEwMDAwMDAwMDAwMDNDMDcwODAwOENFNzNDRDQ4RjgzMDAxODg3Cis6MTA2MTIwMDAwMEUzMjAyMzA0ODAwMDA4OTM4OTAwMDQxNEUzMDAwM0EzCis6MTA2MTMwMDAwMTAwMjAyMTAzRTAwMDA4MDA4MDEwMjEzQzA0MDEwMDQwCis6MTA2MTQwMDAwM0UwMDAwODAwODAxMDIxMTEyMDAwMEIwMDY3MzgyM0I1Cis6MTA2MTUwMDA4RjhDMDAyMDI0MDkwMDM0OTE4QjAwQkMzMTZBMDAwMjJFCis6MTA2MTYwMDA1MTQwMDAwMTI0MDkwMDMwMDBFOTY4MkIxNUEwRkZGMTFGCis6MTA2MTcwMDAwMTAwMjAyMTAwRTkzODIzMjQxOUZGRkMwMEI5QzAyNEM0Cis6MTA2MTgwMDAwMEY5NzgyNDAwRjg3MDJCMTVDMEZGRUEwMUU4MjAyMUZGCis6MTA2MTkwMDAzMEMyMDAwMzAwMDIxODIzMTRDMDAwMTIzMDY5MDAwMzRCCis6MTA2MUEwMDAwMDAwMzAyMTAwQTk3MDIxMDFDNjY4MjEwMEVENjAyQjlDCis6MTA2MUIwMDAxMTgwRkZFMDNDMDQwMTAwMkQyRjAwMDEwMDA2NDgyQjU4Cis6MTA2MUMwMDAwMTA1MzgyMTAxRTkzMDI0MTRDMEZGREEyNEU0RkZGQzgyCis6MTA2MUQwMDAyNDE5RkZGQzAwQjlDMDI0MDMwODIwMjEwM0UwMDAwOEIzCis6MTA2MUUwMDAwMDgwMTAyMThGOEIwMDIwMjQwNjAwMDQ5MTZBMDBCQ0RGCis6MTA2MUYwMDAzMTQ0MDAwNDE0ODBGRkVDMDBBOTcwMjEwQTAwMEIyRDJCCis6MTA2MjAwMDAwMDAwMzAyMTI3QkRGRkU4QUZCRjAwMTA4RjQ2MDEwMDFFCis6MTA2MjEwMDA5MzRBMDEwOTNDMUYwODAwOEZGRjAwOTAyNDA3RkY4MDZDCis6MTA2MjIwMDAzMTRGMDBGRjMxRTgwMDdGMDAwODYxNDAwM0U2QzgyMURDCis6MTA2MjMwMDAwMzJDQzAyMTI3MDkwMTIwMDEyNzcwMjQzQzAxMDgwMEZDCis6MTA2MjQwMDBBMDJGM0QxMEFGNEUwODBDM0MwRDA4MDA4REFEMDA5MDA2Cis6MTA2MjUwMDAzQzA0MDA4MDM0ODIwMDAzMDFBNjU4MjEwMTZDMTgyMUZGCis6MTA2MjYwMDAyNDY1MDEyMDMwQUEwMDc4MDE0MjQwMjVBRjQ4MDgxQzZGCis6MTA2MjcwMDAzQzFGMDgwMDhGRkYwMDkwOEY4ODAwNDAwM0U2QzAyMTdDCis6MTA2MjgwMDAzMzE5MDAwNzAzMDc0ODI0MDMzQTc4MjFBRjQ5MDAyODRGCis6MTA2MjkwMDAyNUU5MDlDMDk1MkUwMDAyM0MwRDA4MDA4REFEMDA4QzRCCis6MTA2MkEwMDAzQzBBMDgwMDhENEEwMDkwMzFDQzNGRkYwMUE2MTgyMTFFCis6MTA2MkIwMDAwMDBDNTk4MDAwNkIyODIxMDBBNzIwMjRBRjQ0MDAyQzNCCis6MTA2MkMwMDA5NTIyMDAwMjNDMUYwODAwOEZGRjAwOEM5MTA3MDA4NTdCCis6MTA2MkQwMDAzMDU5M0ZGRjAzRTY3ODIxMDAxOUMxODAwMTQ2NzAyMTQzCis6MTA2MkUwMDAwMUY4NjgyMTMxQ0MwMDdGMzFBQjAwN0YwMTlBMjgyMTcxCis6MTA2MkYwMDAwMTdBNTAyMTNDMDMwMDBDM0MwNDAwMEUwMEEzMjgyMTJECis6MTA2MzAwMDAwMTQ0MTAyMTMwRTYwMDIwMjc0NzA5ODBBRjgyMDAyQzhECis6MTA2MzEwMDBBRjg4MDAxQ0FGODkwMDI0QUY4NTAwMjAxMEMwMDAwNkE0Cis6MTA2MzIwMDBBRjg3MDAyODhEMDIwMDUwOENBNDAxMEMwMDQ0MzAyMzVDCis6MTA2MzMwMDAxOEMwMDA3NzAwMDAwMDAwOTEwQzAwODUyNDBERkZERkRECis6MTA2MzQwMDAwMThEMzgyNEExMDcwMDg1OEY4QjAwMUM4Rjg5MDAyNEM0Cis6MTA2MzUwMDA4Rjg3MDAyODhENjUwMDRDQUY4NTAwMTg5MTJGMDAwREE4Cis6MTA2MzYwMDAzMUVFMDAyMDExQzAwMDE3MDAwMDAwMDAyNDA5MDAwMUQ4Cis6MTA2MzcwMDBBMzg5MDAwNEFGODAwMDBDOENFNDAwMjQ4Rjg1MDAwQ0ZFCis6MTA2MzgwMDAyNDBBMDAwOEFGODAwMDA4QUY4MDAwMTAzQzAxMDgwMDFDCis6MTA2MzkwMDBBNDJBM0NCRTNDMDEwODAwQTQyMDNDRDIwRTAwMEIwMTA0Cis6MTA2M0EwMDAwMDAwMzAyMThGODUwMDI0OEZCRjAwMTBBRjgyMDAxNEMxCis6MTA2M0IwMDA5MEE4MDAwRDI3QkQwMDE4MDAwODM5NDIwM0UwMDAwODJFCis6MTA2M0MwMDAzMEUyMDAwMTkxM0YwMDAyMjQxODAwMDEzM0Y5MDBGRjgwCis6MTA2M0QwMDAwMDE5MjE4MjEwOTgwMDM5MjQwODAwMDIxMDg4MDA1QkZGCis6MTA2M0UwMDA4Rjg2MDAyQzhDRTUwMDI0MTRBMDAwMUI4RjlGMDAyMEJBCis6MTA2M0YwMDA5MTIyMDAwMDI0MEEwMDA1MzA0NjAwM0YxMENBMDA0N0UxCis6MTA2NDAwMDAyNDA0MDAwMThGODYwMDA4QTM4NDAwMDRBRjg2MDAxMEQ2Cis6MTA2NDEwMDBBRjg2MDAwQzhDRTQwMDI0OEY4NTAwMEMyNDBBMDAwODUxCis6MTA2NDIwMDAzQzAxMDgwMEE0MkEzQ0JFM0MwMTA4MDBBNDIwM0NEMjQ4Cis6MTA2NDMwMDAwRTAwMEIwMTAwMDAwMDAwOEY4NTAwMjQ4RkJGMDAxMEFDCis6MTA2NDQwMDBBRjgyMDAxNDkwQTgwMDBEMjdCRDAwMTgwMDA4Mzk0MjQzCis6MTA2NDUwMDAwM0UwMDAwODMwRTIwMDAxOENGODAwMDg4Q0Y5MDAyNDA5Cis6MTA2NDYwMDA4RkVFMDBDNEEzODAwMDA0OENFNDAwMjRBRjhFMDAwQ0U3Cis6MTA2NDcwMDA4Rjg1MDAwQzhGODYwMDA4MDMxOTc4MjMyNDBBMDAwOEYyCis6MTA2NDgwMDBBRjhGMDAxMDNDMDEwODAwQTQyQTNDQkUzQzAxMDgwMDZDCis6MTA2NDkwMDBBNDIwM0NEMjBFMDAwQjAxMDAwMDAwMDA4Rjg1MDAyNEQ4Cis6MTA2NEEwMDA4RkJGMDAxMEFGODIwMDE0OTBBODAwMEQyN0JEMDAxODA4Cis6MTA2NEIwMDAwMDA4Mzk0MjAzRTAwMDA4MzBFMjAwMDE5MTIzMDAwMEE3Cis6MTA2NEMwMDAzMDYyMDAzRjEwNDQwMDI3OEY4NTAwMjA4Q0U0MDAyNEI4Cis6MTA2NEQwMDAxNDgwMDAyMTAwMDAwMDAwOEQyRTAwMTgzQzE4N0ZGRjYyCis6MTA2NEUwMDA4Rjg1MDAyMDM3MEZGRkZGMDFDRjE4MjRBRjgzMDAwOEVFCis6MTA2NEYwMDA4RjlGMDAwODhDQTgwMDg0MDNFOEM4MkIxNzIwMDAwMjk3Cis6MTA2NTAwMDAwM0UwMjAyMThDQTQwMDg0MEEwMDBCQkNBRjg0MDAwOEE3Cis6MTA2NTEwMDA4Q0EzMDEwQzBBMDAwQjlBQUY4MzAwMTg4RDJDMDAxODc1Cis6MTA2NTIwMDA4Rjg2MDAwODNDMEQ3RkZGOEY4OTAwMjAzNUEzRkZGRjc5Cis6MTA2NTMwMDAwMTgzNTgyNDI0MDQwMDAxQUY4QjAwMTBBRDIwMDBDQzRGCis6MTA2NTQwMDBBMzg0MDAwNDBBMDAwQkM4QUY4NjAwMEM4Q0NBMDAxNDk4Cis6MTA2NTUwMDAwQTAwMEJCQ0FGOEEwMDA4OENBMzAwQzgwQTAwMEJGRjFFCis6MTA2NTYwMDBBRjgzMDAwODhGODQwMDJDOENBQzAwNjQ4QzhEMDAxNEU5Cis6MTA2NTcwMDAwMThENTgyQjExNjAwMDA0MDAwMDAwMDA4Q0EyMDA2NDAzCis6MTA2NTgwMDAwQTAwMEJGRkFGODIwMDA4OEM4MjAwMTQwQTAwMEJGRjg4Cis6MTA2NTkwMDBBRjgyMDAwODhGODUwMDBDMjdCREZGRTBBRkJGMDAxODU5Cis6MTA2NUEwMDBBRkIxMDAxNDE0QTAwMDA3QUZCMDAwMTA4Rjg2MDAyNDE0Cis6MTA2NUIwMDAyNDAyMDAwNTkwQzQwMDAwMzA4MzAwM0YxMDYyMDBCNjQyCis6MTA2NUMwMDA4Rjg0MDAyMDhGOTEwMDA4MDBBMDgwMjE4RjhDMDAyOEVDCis6MTA2NUQwMDAzQzA1MDgwMDhDQTUzQ0IwOEQ4QjAwMDQzMTY2M0ZGRjY0Cis6MTA2NUUwMDAwMEM1NTAyQjU1NDAwMDAxMDBDMDI4MjE5MzhEMDAwNEE4Cis6MTA2NUYwMDAxMUEwMDA3MzAwQjBGODJCOEY5ODAwMjAyNDA0MDAzNDAxCis6MTA2NjAwMDA5MzBGMDBCQzMxRUUwMDAyNTFDMDAwMDEyNDA0MDAzMEExCis6MTA2NjEwMDAwMEE0QzgyQjE3MjAwMEQxMDAwMDAwMDAwMEE0MjgyM0VDCis6MTA2NjIwMDAwMEIwRjgyQjNDMDEwODAwQTQyNDNDQkMxN0UwMDA2ODMzCis6MTA2NjMwMDAwMjAwMjAyMTNDMDMwODAwOEM2MzNDQUMwMDgzMTAyQjNCCis6MTA2NjQwMDA1NDQwMDAwMTAwODAxODIxOEY4ODAwMjQzQzAxMDgwMDdDCis6MTA2NjUwMDBBQzIzM0NCNDAwMDA0ODIxOTEwNDAwMEQzMDgzMDAyMDlECis6MTA2NjYwMDA1MDYwMDAwMThGNDkwRTE4OEY4MzAwMTQwMTIzMzgyQkNFCis6MTA2NjcwMDAxMEUwMDA1OTAwMDAwMDAwM0MwNDA4MDA4Qzg0M0NCNDg5Cis6MTA2NjgwMDAwMDg5NTgyMTAwNkI1MDJCMTE0MDAwNTYwMDkwNjAyQjYwCis6MTA2NjkwMDAwMDY5MzAyMzAwQzAyMDIxM0MwMTA4MDBBQzI2M0NCNDM2Cis6MTA2NkEwMDAxMjAwMDAwMzI0MUZGRkZDMTA5MDAwOEEzMjI3MDAwMzExCis6MTA2NkIwMDAwMDlGQzgyNDNDMDEwODAwQUMzOTNDQjQzQzAxMDgwMEYwCis6MTA2NkMwMDBBNDIwM0NEMjhGODQwMDBDMTIwNDAwMDc4RjgzMDAyMDhBCis6MTA2NkQwMDBBRjkxMDAwODAyMDAyMDIxOEM3MTAwQ0NBRjkwMDAwQzFCCis6MTA2NkUwMDAyNjMwMDAwMUFDNzAwMENDM0MwMjA4MDA4QzQyM0NCNDY3Cis6MTA2NkYwMDA4RjhBMDAxMDI0MDcwMDE4MDA4MjIwMjMwMTQyMjgyM0RCCis6MTA2NzAwMDBBRjg0MDAwQzEwODAwMDAyQUY4NTAwMTAyNDA3MDAxMDM5Cis6MTA2NzEwMDA4Rjg2MDAxQzNDMDEwODAwQTAyNzNDRDAyNDA3MDA0MEM1Cis6MTA2NzIwMDA5MENDMDA4NTMxOEIwMEMwMTE2NzAwNDA4RjhEMDAxNDI0Cis6MTA2NzMwMDAxNEEwMDAxNTAwMDAyMDIxOTM0QTAxMDk4RjQyMDk3NDFBCis6MTA2NzQwMDAzMTQ1MDBGRjAwMDIyNjAyMjRBMzAwMDEzMDkwMDA3RkEzCis6MTA2NzUwMDAzMDcxMDA3RjEyMzAwMDdBMjQwN0ZGODBBMEMzMDA4M0NECis6MTA2NzYwMDAzQzA5MDgwMDhEMjkzQ0NDOEY4ODAwMjQyNDBEMDAwMkIwCis6MTA2NzcwMDAzNTJDMDAwODNDMDEwODAwQTAyRDNEMTEzQzAxMDgwMDBCCis6MTA2NzgwMDBBQzJDM0NDQzI0MDQwMDEwOTEwRTAwMEQzMUM2MDAyMDJFCis6MTA2NzkwMDAxMEMwMDAwNTAwODAxODIxMjQwODAwMDEzQzAxMDgwMEY5Cis6MTA2N0EwMDBBQzI4M0NCNDM0ODMwMDAxOEZCRjAwMTg4RkIxMDAxNEIzCis6MTA2N0IwMDA4RkIwMDAxMDAwNjAxMDIxMDNFMDAwMDgyN0JEMDAyMDBBCis6MTA2N0MwMDAzQzAxMDgwMEE0MjAzQ0JDMTNFMEZGOUEwMjAwMjAyMUY5Cis6MTA2N0QwMDAwQTAwMEM1MDAwQTAyMDIxM0MwNDA4MDA4Qzg0M0NCNDJBCis6MTA2N0UwMDAwMDkwNjAyQjExODBGRkFFMDAwMDAwMDAzQzBGMDgwMEZECis6MTA2N0YwMDA5NUVGM0NCQzAxRTQ3MDIxMDFDNjY4MkIxMUEwMDAwNzk1Cis6MTA2ODAwMDAyQzgyMDAwNDNDMUY2MDAwOEZGOTU0MDQzMzM4MDAzRjkxCis6MTA2ODEwMDAxNzAwRkZFNTI0MDMwMDQyMkM4MjAwMDQxMDQwRkZBMDczCis6MTA2ODIwMDAyNDAzMDA0MjBBMDAwQ0FFOEZCRjAwMTgxNTJERkZDMEQ0Cis6MTA2ODMwMDAwMDAwMDAwMDhDREYwMDc0M0MwMzgwMDAyNDA1RkY4MDEyCis6MTA2ODQwMDAwM0UzQzgyNUFDRDkwMDc0OTBEODAwODUyNDBFMDAwNDU5Cis6MTA2ODUwMDAyNDA0MDAxMDMzMEYwMDNGMDFFNTQwMjVBMEM4MDA4NTQ3Cis6MTA2ODYwMDA4Rjg4MDAyNDNDMDEwODAwQTAyRTNEMTEyNDAzMDAwMTY0Cis6MTA2ODcwMDA5MTA2MDAwRDMwQzkwMDIwMTUyMDAwMDMwMDAwMDAwMDIzCis6MTA2ODgwMDAzQzAzMDgwMDhDNjMzQ0I0M0MwMTA4MDBBQzIzM0NBQ0U2Cis6MTA2ODkwMDAwQTAwMENBNTAwMDAwMDAwOEY4NzAwMTA4Qzg4MDA4NDdGCis6MTA2OEEwMDAwMEU4MjgyQjE0QTAwMDAyMDBFMDg4MjE4QzkxMDA4NENECis6MTA2OEIwMDAyNDA5MDAwMUEzODkwMDA0OEY0NDBFMTgwMjIwMjgyMTE2Cis6MTA2OEMwMDAwRTAwMEIwMTAyMjAzMDIxMDIyMDgwMjEwQTAwMEMzNjJDCis6MTA2OEQwMDBBRjgyMDAxNDAwMDcxODIzMzA2NjAwMDMzQzAxMDgwMDUzCis6MTA2OEUwMDBBNDI2M0NEMjEyMjAwMDA1OEY4QzAwMjA5MThCMDBCQzg2Cis6MTA2OEYwMDAzMTZBMDAwNDE1NDAwMDE1MjRDRDAwMDQzQzBGMDgwMDQ3Cis6MTA2OTAwMDA5NUVGM0NEMjAxRTQ3MDIxMDBBRTMwMkI1MEMwRkY2RUY5Cis6MTA2OTEwMDA4Rjg0MDAwQzJDODUwMDA1MTRBMEZGQTMyNDAzMDA0MkUzCis6MTA2OTIwMDAzMDk4MDAwMzE3MDAwMDAyMDA5ODE4MjMyNDgzRkZGQzBFCis6MTA2OTMwMDAzQzAxMDgwMEFDMjMzQ0I0MEEwMDBDNzIwMDAwMDAwMENCCis6MTA2OTQwMDAwMEE3NTgyNDBBMDAwQzlBMDE2NzE4MjYzQzAxMDgwMDg5Cis6MTA2OTUwMDBBNDJEM0NEMjBBMDAwRDAyMDAwMDAwMDAzQzAxMDgwMEZBCis6MTA2OTYwMDBBQzIwM0NCNDBBMDAwQ0FEMjQwMzAwNDI4RjgzMDAxMDFECis6MTA2OTcwMDAxNDYwMDAwNzAwMDAxMDIxOEY4ODAwMjQyNDA1MDAwNTAyCis6MTA2OTgwMDA5MTA2MDAwMDMwQzQwMEZGMTA4NTAwMDMwMDAwMDAwMEU1Cis6MTA2OTkwMDAwM0UwMDAwODAwMDAwMDAwOTEwQTAwMTgzMTQ5MDBGRkUwCis6MTA2OUEwMDAwMDA5MzlDMjE0RTBGRkZBOEY4NTAwMUMzQzA0MDgwMDdFCis6MTA2OUIwMDA5NDg0M0NCQzNDMDMwODAwOEM2MzNDRDQzQzE5MDgwMDI0Cis6MTA2OUMwMDA4RjM5M0NCNDNDMEYwODAwOTVFRjNDRDIwMDY0QzAyMUU1Cis6MTA2OUQwMDA4Q0FEMDA1NDAzMTk3MDIxMDFDRjYwMjEwMThENTgyMzIzCis6MTA2OUUwMDAxOTYwMDAxRDAwMDAwMDAwOTEwRTAwMUM4RjhDMDAyQzBGCis6MTA2OUYwMDA5NzRCMEUxMDMxQ0QwMEZGOEQ4NTAwMDQwMTZEMzAyM0MzCis6MTA2QTAwMDA4RDg4MDAwMDMwQ0VGRkZGMDAwRTUxMDAwMEFBQzgyMTgzCis6MTA2QTEwMDAwMDAwMzgyMTAxMDcyMDIxMDMyQTE4MkIwMDgzQzAyMTAwCis6MTA2QTIwMDBBRDk5MDAwNEFEOTgwMDAwOTE4RjAwMEEwMUNGNjgyMTU0Cis6MTA2QTMwMDBBMThEMDAwQThGODgwMDJDOTc0QjBFMTJBNTBCMDAwODIxCis6MTA2QTQwMDA5NTBBMDAzODI1NDkwMDAxQTUwOTAwMzg5MTA3MDAwRDc1Cis6MTA2QTUwMDAzNEU2MDAwOEExMDYwMDBEMDNFMDAwMDgwMDAwMDAwMDc1Cis6MTA2QTYwMDAyN0JERkZFMDkzODcwMDA0OEY4RjAwMjQ4RkFEMDAxNEIzCis6MTA2QTcwMDAzQzBFN0ZGRjhGODkwMDBDMzVDOEZGRkZBRkJGMDAxQ0E1Cis6MTA2QTgwMDBBRkIwMDAxODAxQTgxODI0OTFFQTAwMEQwMDA3MTdDMDQ0Cis6MTA2QTkwMDAzQzFGQkZGRjAwNjI1ODI1MkQyRTAwMDE4RjkwMDAxODZCCis6MTA2QUEwMDAzN0Y5RkZGRjNDMTgwODAwOEYxODNDRDQzQzBGMDgwMDUyCis6MTA2QUIwMDA5NUVGM0NDQTAxNzk2ODI0MDAwRTQ3ODAzQzA3RUZGRjQwCis6MTA2QUMwMDAzQzA1RjBGRjAxQTgxODI1MzE0OTAwMjAzNEUyRkZGRjAyCis6MTA2QUQwMDAzNEFDRkZGRjAzMTA1ODIzMjdBNTAwMTAyNDA2MDAwMjQyCis6MTA2QUUwMDAyNUVBMDAwMjAwNjIxODI0MDA4MDgwMjExNTIwMDAwMjlGCis6MTA2QUYwMDAwMDAwNDAyMThGNDgwRTFDQTdBQTAwMTIwNTYwMDAzNzM1Cis6MTA2QjAwMDAyNDA3MDAwMDMwRkYwMEZGMDAxRkNGMDA4RjhCMDAxQzA4Cis6MTA2QjEwMDAwMDc5MzgyNUFGQTcwMDE0OTE2RjAwODUzQzA4MDgwMDY0Cis6MTA2QjIwMDA5MTA4M0NEMTNDMThERkZGMzFFRTAwQzAzNzBBRkZGRjZGCis6MTA2QjMwMDAwMDBFMTgyQjNDMUYwODAwOTdGRjNDQzQwMEVBNjgyNDk1Cis6MTA2QjQwMDBBM0E4MDAxMTAwMDMxNzQwMDFBMjQ4MjU4RkI5MDAxMDI3Cis6MTA2QjUwMDBBRkE5MDAxNDNDMEEwODAwOTE0QTNDRDNBN0JGMDAxNjE1Cis6MTA2QjYwMDA4RkE4MDAxNDAzMkNDMDI0M0MwQjAxMDAzQzBGMEZGRjI2Cis6MTA2QjcwMDAwMzBCMTgyNTMxNDcwMDAzMzVFRUZGRkYwMTBDNjgyNDk1Cis6MTA2QjgwMDAwMDA3MTYwMDAwNkVGODI0M0MwOTcwMDAwMUEyQzgyNTE5Cis6MTA2QjkwMDAwM0U5NTgyNUFGQjkwMDE0QUZBQjAwMTAwRTAwMDA3NjIyCis6MTA2QkEwMDBBM0EwMDAxNThGOEMwMDI0MjYwMjAwMDg5MTg2MDAwREZBCis6MTA2QkIwMDAzMEM0MDAyMDEwODAwMDA2OEZCRjAwMUMzQzA1MDgwMDc4Cis6MTA2QkMwMDA5NEE1M0NDMDI0QjBGRkZGM0MwMTA4MDBBNDMwM0NDMEE5Cis6MTA2QkQwMDA4RkIwMDAxODAzRTAwMDA4MjdCRDAwMjA4Rjk4MDAxNDM0Cis6MTA2QkUwMDAwMTE4NTAyQjU1NDBGRkM3MjQwNzAwMDEwQTAwMEQ4NUVFCis6MTA2QkYwMDAzMEZGMDBGRjkzODIwMDA0MjdCREZGRTBBRkJGMDAxODA1Cis6MTA2QzAwMDAxMDQwMDAwRjAwODA1MDIxOEY4ODAwMjQyNDBCMDAwNUM1Cis6MTA2QzEwMDA4Rjg5MDAwODkxMDcwMDAwOEY4NDAwMjAwMTAwMjgyMTNGCis6MTA2QzIwMDAzMEUzMDAzRjhGODYwMDJDMTA2QjAwMDgwMDAwMzgyMUY1Cis6MTA2QzMwMDBBRkE5MDAxMDBFMDAwNDBFQUZBQTAwMTRBMzgwMDAwNDM4Cis6MTA2QzQwMDA4RkJGMDAxODAzRTAwMDA4MjdCRDAwMjA4RDE5MDAxODMxCis6MTA2QzUwMDAzQzBGMDgwMDhERUYzQ0I0OEY5ODAwMTAzQzAyN0ZGRjgyCis6MTA2QzYwMDA4RDA4MDAxNDM0NUZGRkZGMDMzRjY4MjQwMUY4NzAyMTkyCis6MTA2QzcwMDAwMUFFNjAyMzAxODgzODIxQUZBOTAwMTAwRTAwMDQwRTc4Cis6MTA2QzgwMDBBRkFBMDAxNDBBMDAwREQzQTM4MDAwMDQ4Rjg3MDAyNDRDCis6MTA2QzkwMDAzQzA1MDgwMDk0QTUzQ0QyM0MwMjA4MDA4QzQyM0NDQzQ4Cis6MTA2Q0EwMDA5MEU2MDAwRDAwMDUyNDAwMzBDMzAwMjAxMDYwMDAyQzg5Cis6MTA2Q0IwMDAwMDQ0NDAyNThGODUwMDFDMDAwMDYwMjEyNDBCMDAwMTRBCis6MTA2Q0MwMDA5MEEzMDA4NTAwMDA0ODIxMjQwQTAwMDEzQzBGODAwMEE5Cis6MTA2Q0QwMDAzNUVFMDA3MDhEQzcwMDAwQUY4NzAwMzA4RjU4MDE3ODA3Cis6MTA2Q0UwMDAwNzAwRkZGRTNDMDM4MDAwMzQ3OTAwNzA4RjM4MDAwMEZECis6MTA2Q0YwMDAzQzA1MDgwMDhDQTUwMDc0M0MwRDA4MDA4REFEMDA3MEFCCis6MTA2RDAwMDAwMzA3NzgyMzAwQUYzODIxMDAwMDEwMjEwMEVGMzAyQjVCCis6MTA2RDEwMDAwMUEyMjAyMTAwODYxODIxM0MwMTA4MDBBQzI3MDA3NDQ0Cis6MTA2RDIwMDAzQzAxMDgwMEFDMjMwMDcwQUY0QjAxNDgzQzE5MDgwMDNGCis6MTA2RDMwMDA4RjM5M0NENEE3NDkwMTQ0QTc0QTAxNDZBRjU5MDE0Q0I5Cis6MTA2RDQwMDAzQzBCMDgwMDkxNkIzQ0QxQTM0QjAxNTJBRjQ4MDE1NDVFCis6MTA2RDUwMDAzQzA4MTAwMEE3NEMwMTU4MDNFMDAwMDhBRjQ4MDE3ODM4Cis6MTA2RDYwMDA4RjRCMEUxQzNDMEEwODAwOEQ0QTNDQjQ5NzQ5MEUxNjA2Cis6MTA2RDcwMDA5NzREMEUxNDAxNDU2MDIxMzEyQUZGRkYwQTAwMERGNkUwCis6MTA2RDgwMDAzMUE5RkZGRjhGODMwMDI0OTA2NDAwMEQzMDgyMDAyMDIyCis6MTA2RDkwMDAxMDQwMDAyOTAwMDAwMDAwMDAwMDQ4MjEwMDAwNTAyMUEwCis6MTA2REEwMDAwMDAwNDAyMTNDMDc4MDAwMzRFQjAwNzA4RDY3MDAwMDNDCis6MTA2REIwMDBBRjg3MDAzMDhGNEMwMTc4MDU4MEZGRkUzQzBEODAwMENFCis6MTA2REMwMDAzNUFDMDA3MDhEOEIwMDAwM0MwNTA4MDA4Q0E1MDA3NDZDCis6MTA2REQwMDAzQzA0MDgwMDhDODQwMDcwMDE2NzMwMjMwMEE2NzgyMUYxCis6MTA2REUwMDAwMDAwMTAyMTAxRTZDODJCMDA4MkMwMjEwMzE5NzAyMTg4Cis6MTA2REYwMDAzQzAxMDgwMEFDMkYwMDc0M0MwMTA4MDBBQzJFMDA3MDcwCis6MTA2RTAwMDBBRjQ5MDE0ODNDMEQwODAwOERBRDNDRDRBNzQ4MDE0NDcyCis6MTA2RTEwMDAyNDA5MDA0MEE3NEEwMTQ2M0MwODEwMDAyNDBBRkY5MUJCCis6MTA2RTIwMDBBRjREMDE0Q0EzNEEwMTUyQUY0OTAxNTRBNzQwMDE1ODRDCis6MTA2RTMwMDAwM0UwMDAwOEFGNDgwMTc4OEY0OTBFMTg5NzQ2MEUxMkZDCis6MTA2RTQwMDA5NzQ1MEUxMDMwQ0FGRkZGMEEwMDBFMkMzMEE4RkZGRjM2Cis6MTA2RTUwMDA4RjgzMDAyNDI3QkRGRkY4OTA2NDAwMEQzMDgyMDAyMDRFCis6MTA2RTYwMDAxMDQwMDAzQTAwMDAwMDAwMjQwQjAwMDEwMDAwNDgyMUZGCis6MTA2RTcwMDAyNDBBMDAwMTNDMDg4MDAwMzUwNzAwNzA4Q0UzMDAwMDA0Cis6MTA2RTgwMDBBRjgzMDAzMDhGNEMwMTc4MDU4MEZGRkUzQzBFODAwMDAwCis6MTA2RTkwMDAzQzA0MDgwMDkwODQzRDEwMzVDNzAwNzA4Q0VDMDAwMDY1Cis6MTA2RUEwMDAzQzA1MDgwMDhDQTUwMDc0QTNBNDAwMDMzQzE5MDgwMDRECis6MTA2RUIwMDA4RjM5MDA3MDhGQUQwMDAwMDE4MzMwMjMwMEE2MzgyMTg4Cis6MTA2RUMwMDAwMDAwMTAyMTAzMjI3ODIxMDBFNkMwMkIwMUY4NjAyMTg4Cis6MTA2RUQwMDAwMUFFNDAyNUFGQTgwMDAwM0MwMTA4MDBBQzI3MDA3NEJCCis6MTA2RUUwMDAzQzAxMDgwMEFDMkMwMDcwOTM0NjAxMEEzQzA0MDgwMEU5Cis6MTA2RUYwMDA5MDg0M0QxMUEzQTAwMDAyQTNBNjAwMDE4RkEzMDAwMDZGCis6MTA2RjAwMDAzQzA1ODBGRjMwOTkwMDdGMzRBMkZGRkYwMDYyNzgyNEE3Cis6MTA2RjEwMDAwMDE5QzYwMDAxRjg3MDI1MjQwRDMwMDBBRjRFMDE0QzU5Cis6MTA2RjIwMDAyN0JEMDAwOEFGNEQwMTU0QTc0MDAxNThBRjRCMDE0OEExCis6MTA2RjMwMDBBNzQ5MDE0NEE3NEEwMTQ2M0MwOTEwMDAyNDBBRkY4MEUyCis6MTA2RjQwMDBBMzRBMDE1MjAzRTAwMDA4QUY0OTAxNzg4RjRCMEUxOEE1Cis6MTA2RjUwMDA5NzQ2MEUxMjk3NDUwRTEwMzBDQUZGRkYwQTAwMEU2MENBCis6MTA2RjYwMDAzMEE5RkZGRjhGODUwMDFDMjQwMjAwODA5MEE0MDA4NUJCCis6MTA2RjcwMDAzMDgzMDBDMDEwNjIwMDA1OEY4NjAwMjA4Rjg4MDAwOEQzCis6MTA2RjgwMDA4Rjg3MDAwQ0FDQzgwMEM4QUNDNzAwQzQwM0UwMDAwODgxCis6MTA2RjkwMDAwMDAwMDAwMDNDMEEwODAwMjU0QTM4OTAzQzA5MDgwMDFGCis6MTA2RkEwMDAyNTI5Mzk1QzNDMDgwODAwMjUwODJEMTAzQzA3MDgwMEZECis6MTA2RkIwMDAyNEU3M0E3MDNDMDYwODAwMjRDNjM3MDAzQzA1MDgwMDY4Cis6MTA2RkMwMDAyNEE1MzQ3ODNDMDQwODAwMjQ4NDMwQTAzQzAzMDgwMDQ1Cis6MTA2RkQwMDAyNDYzMzc5ODNDMDIwODAwMjQ0MjM1NkMzQzAxMDgwMEM5Cis6MTA2RkUwMDBBQzJBM0M5MDNDMDEwODAwQUMyOTNDOEMzQzAxMDgwMEQ4Cis6MTA2RkYwMDBBQzI4M0M4ODNDMDEwODAwQUMyNzNDOTQzQzAxMDgwMENDCis6MTA3MDAwMDBBQzI2M0NBNDNDMDEwODAwQUMyNTNDOUMzQzAxMDgwMDlCCis6MTA3MDEwMDBBQzI0M0M5ODNDMDEwODAwQUMyMzNDQTgzQzAxMDgwMDhGCis6MEM3MDIwMDBBQzIyM0NBMDAzRTAwMDA4MDAwMDAwMDBDRgorOjAwMDAwMDAxRkYKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZmlybXdhcmUgZGF0YSBkZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQKKyAqIHNvdXJjZSBjb2RlLCBDb3B5cmlnaHQgKGMpIDIwMDQgLSAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSBkYXRhCisgKiBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCisgKiBhY2NvbXBhbnlpbmcgaXQuCisgKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA5LTUuMC4wLmozLmZ3LmloZXggYi9maXJtd2FyZS9ibngyL2JueDItbWlwcy0wOS01LjAuMC5qMy5mdy5paGV4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5MmUyMjA0Li4wMDAwMDAwCi0tLSBhL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA5LTUuMC4wLmozLmZ3LmloZXgKKysrIC9kZXYvbnVsbApAQCAtMSw2MDUxICswLDAgQEAKLToxMDAwMDAwMDA4MDAwMTEwMDgwMDAwMDAwMDAwNTFDNDAwMDAwMEM4RjIKLToxMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDA1MUM0QzMKLToxMDAwMjAwMDAwMDAwMDM4MDAwMDUyOEMwODAwMDA4ODA4MDAwMDAwMjIKLToxMDAwMzAwMDAwMDA1MUI0MDAwMDUyQzQwODAwNTNBMDAwMDAwMDg0MjYKLToxMDAwNDAwMDAwMDBBNDc4MDgwMDUxQjQwMDAwMDFDMDAwMDBBNEZDMjYKLToxMDAwNTAwMDA4MDAzMUQ4MDgwMDAwMDAwMDAwODBFNDAwMDBBNkJDQzEKLToxMDAwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDA4MEU0MjQKLToxMDAwNzAwMDAwMDAwMTI0MDAwMTI3QTAwODAwMDQ4ODA4MDAwNDAwRjMKLToxMDAwODAwMDAwMDAxN0VDMDAwMTI4QzQwMDAwMDAwMDAwMDAwMDAwODAKLToxMDAwOTAwMDAwMDAwMDAwMDgwMDFCRUMwMDAwMDAwNDAwMDE0MEIwNUMKLToxMDAwQTAwMDA4MDAwMEE4MDgwMDAwMDAwMDAwMzgxNDAwMDE0MEI0NTcKLToxMDAwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MDAzODE0RUMKLTowODAwQzAwMDAwMDAwMDMwMDAwMTc4QzhDNwotOjA4MDBDODAwMEEwMDAwNDQwMDAwMDAwMEUyCi06MTAwMEQwMDAwMDAwMDAwMDAwMDAwMDBENjM2RjZEMzUyRTMwMkUzMEUzCi06MTAwMEUwMDA2QTMzMDAwMDA1MDAwMDAyMDAwMDAwMDAwMDAwMDAwMzY5Ci06MTAwMEYwMDAwMDAwMDAxNDAwMDAwMDMyMDAwMDAwMDMwMDAwMDAwMEI3Ci06MTAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCi06MTAwMTEwMDAwMDAwMDAxMDAwMDAwMTM2MDAwMEVBNjAwMDAwMDAwNTQ5Ci06MTAwMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEM3Ci06MTAwMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCi06MTAwMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTAwMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTAwMTYwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECi06MTAwMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTAwMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDVGCi06MTAwMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCi06MTAwMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCi06MTAwMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCi06MTAwMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCi06MTAwMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMzBDCi06MTAwMUUwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMEQzQzAyMDgwMEFGCi06MTAwMUYwMDAyNDQyNTIyMDNDMDMwODAwMjQ2MzUzNTRBQzQwMDAwMEM2Ci06MTAwMjAwMDAwMDQzMjAyQjE0ODBGRkZEMjQ0MjAwMDQzQzFEMDgwMDA1Ci06MTAwMjEwMDAzN0JEOUZGQzAzQTBGMDIxM0MxMDA4MDAyNjEwMDExMDAwCi06MTAwMjIwMDAzQzFDMDgwMDI3OUM1MjIwMEUwMDAyNUYwMDAwMDAwMENBCi06MTAwMjMwMDAwMDAwMDAwRDI3QkRGRkUwQUZCRjAwMThBRkIxMDAxNEY0Ci06MTAwMjQwMDBBRkIwMDAxMDNDMDQ4MDAwOTQ4MjAxMDgzMDQzNzAwMDdECi06MTAwMjUwMDAyNDAyMjAwMDEwNjIwMDBCMjg2MjIwMDExNDQwMDAzNkE2Ci06MTAwMjYwMDAwMDAwMTAyMTI0MDI0MDAwMTA2MjAwMkMwMDAwMDAwMDU5Ci06MTAwMjcwMDAyNDAyNjAwMDEwNjIwMDJEMDAwMDEwMjEwQTAwMDA5RDgxCi06MTAwMjgwMDA4RkJGMDAxODM0OTEwMTAwOTIyNDAwMDk4RTMwMDAxOEFECi06MTAwMjkwMDAxMDgwMDAyMDI0MDMwMDAxMjQwMjAwMDkxNDgyMDAwNkJCCi06MTAwMkEwMDA4RjgyMDAxQzNDMDI4MDA4OTQ0MjAwMUEwMDAyMTQwMDU1Ci06MTAwMkIwMDAwMjAyODAyNThGODIwMDFDOEM0MjAwMEMxMDQwMDAxNTI5Ci06MTAwMkMwMDAwMDAwMTgyMTBFMDAwRDQ1MDAwMDAwMDA4RjgzMDAxQzY3Ci06MTAwMkQwMDA5NjI0MDAwODhGODIwMDE4OTQ2MzAwMUU5NjI1MDAwQzU3Ci06MTAwMkUwMDAwMDA0MjQwMDAwODMyMDI1QUM1MDAwMDBBQzQ1MDAwNDJECi06MTAwMkYwMDBBQzQwMDAwOEFDNDAwMDBDQUM0MDAwMTBBQzQwMDAxNDE2Ci06MTAwMzAwMDBBQzQwMDAxOEFDNDQwMDFDMEUwMDBENzkyNDA0MDAwMTIwCi06MTAwMzEwMDAwMDAwMTgyMTBBMDAwMDlDMDA2MDEwMjEwRTAwMDQyRTJECi06MTAwMzIwMDAwMDAwMDAwMDBBMDAwMDlDMDAwMDEwMjEwRTAwMEM2NTc3Ci06MTAwMzMwMDAwMDAwMDAwMDAwMDAxMDIxOEZCRjAwMTg4RkIxMDAxNEQyCi06MTAwMzQwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjA4RjgyMDAxQzQyCi06MTAwMzUwMDAyN0JERkZFMEFGQjAwMDEwQUZCRjAwMThBRkIxMDAxNDcxCi06MTAwMzYwMDA4QzQyMDAwQzNDMTA4MDAwOEUxMTAxMDAxMDQwMDAzNEMzCi06MTAwMzcwMDA4RkJGMDAxODBFMDAwRDQ1MDAwMDAwMDA4Rjg1MDAxODhCCi06MTAwMzgwMDAyNDA0N0ZGRjAwOTEyMDJCQUNCMTAwMDA4RTAzMDEwNEY4Ci06MTAwMzkwMDA5NjAyMDEwODAwMDMxQzAwMzA0MkZGRkYwMDYyMTgyNThFCi06MTAwM0EwMDBBQ0EzMDAwNDkyMDIwMTBBOTYwMzAxMTQzMDQyMDBGRjNDCi06MTAwM0IwMDAzMDYzRkZGRjAwMDIxNDAwMDA0MzEwMjVBQ0EyMDAwOEM4Ci06MTAwM0MwMDA5NjAzMDEwQzk2MDIwMTBFMDAwMzFDMDAzMDQyRkZGRjUxCi06MTAwM0QwMDAwMDYyMTgyNUFDQTMwMDBDOTYwMzAxMTA5NjAyMDExMkNFCi06MTAwM0UwMDAwMDAzMUMwMDMwNDJGRkZGMDA2MjE4MjVBQ0EzMDAxMDgwCi06MTAwM0YwMDA4RTAyMDExOEFDQTIwMDE0OEUwMjAxMUNBQ0EyMDAxOERGCi06MTAwNDAwMDAxNDgwMDAwODhGODIwMDFDOTc4MjAwMDAzQzA0MjAwNUE1Ci06MTAwNDEwMDAwMDQ0MTgyNTI0NDIwMDAxQUNBMzAwMUMwQTAwMDBEQkE0Ci06MTAwNDIwMDBBNzgyMDAwMDNDMDM0MDE4OTQ0MjAwMUUwMDQzMTAyNUEwCi06MTAwNDMwMDBBQ0EyMDAxQzBFMDAwRDc5MjQwNDAwMDE4RkJGMDAxODJGCi06MTAwNDQwMDA4RkIxMDAxNDhGQjAwMDEwMDAwMDEwMjEwM0UwMDAwOEVECi06MTAwNDUwMDAyN0JEMDAyMDNDMDY4MDAwOENDMjAyQjgyNDAzMDAwMUE2Ci06MTAwNDYwMDAwNDQxMDAwODAwODAyODIxM0MwMjA4MDA4QzQyMDA2MDAyCi06MTAwNDcwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNjAwM0UwMDAwOEI3Ci06MTAwNDgwMDAwMDYwMTAyMThDODMwMDIwOTQ4MjAwMTZBQ0MzMDI4MDhGCi06MTAwNDkwMDAyNDQyRkZGQ0E0QzIwMjg0M0MwMjA4MDA4QzQyMDA1QzlGCi06MTAwNEEwMDA4Qzg0MDAwNDk0QTMwMDBFMjQ0MjAwMDEzQzAxMDgwMDQ3Ci06MTAwNEIwMDBBQzIyMDA1QzNDMDIxMDAwQTRDMzAyODZBQ0M0MDI4OERCCi06MTAwNEMwMDAwMDAwMTgyMUFDQzIwMkI4MDNFMDAwMDgwMDYwMTAyMTRGCi06MTAwNEQwMDAyN0JERkZFMEFGQjAwMDEwM0MxMDgwMDBBRkIyMDAxOEE1Ci06MTAwNEUwMDBBRkJGMDAxQ0FGQjEwMDE0MzYxMjAxMDA5MjQzMDAwQkU1Ci06MTAwNEYwMDAyNDAyMDAxQTk2NTEwMDA4MTQ2MjAwNUEwMDAwMjgyMUI0Ci06MTAwNTAwMDAzMjIyMDAwMTEwNDAwMDE4OEY4MjAwMUM4RTQyMDAwMDMxCi06MTAwNTEwMDAwMDAyMjM0MDNDMDIwMDNGMzQ0MkZGRkYwMDQ0MTAyQjA2Ci06MTAwNTIwMDAxMDQwMDAwNDNDMDMwMDQwOTY0MjAwMTQwQTAwMDEyNERECi06MTAwNTMwMDAwMDgzMjAyMThFMDMwMTAwMjQwMjAxMDA1NDYyMDAwNjgyCi06MTAwNTQwMDA5NjQyMDAxNDNDMDI4MDA4OTA0MjAwMDQzMDQyMDAwRkEyCi06MTAwNTUwMDAwMDAyMjUwMDk2NDIwMDE0MDA4MjEwMjVBRTAyMDA4MEExCi06MTAwNTYwMDAwQTAwMDE1NzAwMDAwMDAwOEM0MjAwMEMxMDQwMDAyOEQ3Ci06MTAwNTcwMDAwMDAwMDAwMDBFMDAwRDQ1MDAwMDAwMDA5NjAyMDEwODdBCi06MTAwNTgwMDA5NjAzMDEwQzhGODUwMDE4MzA0MjAwM0UzMDYzRkZGRjU4Ci06MTAwNTkwMDAwMDAyMTQwMDAwNDMxMDI1QUNBMjAwMDA4RTAyMDEwMEVFCi06MTAwNUEwMDBBQ0EyMDAwNDk2MDMwMTE2OTYwNDAxMEU4RjgyMDAxQzczCi06MTAwNUIwMDAwMDAzMUMwMDMwODRGRkZGMDA2NDE4MjVBQ0EzMDAwODcyCi06MTAwNUMwMDA5NjAzMDExMDk2MDQwMTEyOTQ0NjAwMUUwMDAzMUMwMEJECi06MTAwNUQwMDAzMDg0RkZGRjAwNjQxODI1QUNBMzAwMEMzQzAyMjAwMDBGCi06MTAwNUUwMDAwMEMyMzAyNTk2MDIwMTE0MjQwNDAwMDEzMDQyRkZGRkFFCi06MTAwNUYwMDBBQ0EyMDAxMDhFMDIwMTE4QUNBMjAwMTQ5MjAyMDEwQkYyCi06MTAwNjAwMDAzMDQyMDBGRkFDQTIwMDE4MEUwMDBENzlBQ0E2MDAxQzExCi06MTAwNjEwMDAzQzAyMDgwMDhDNDIwMDQwMjQ0MjAwMDEzQzAxMDgwMERBCi06MTAwNjIwMDBBQzIyMDA0MDNDMDMwODAwOEM2MzAwNDQzMjIyMDAwMkVDCi06MTAwNjMwMDAzMjI0MDAwNDI0NjMwMDAxM0MwMTA4MDBBQzIzMDA0NDgwCi06MTAwNjQwMDAxMDgwMDAwODAwMDIyODJCMDI0MDIwMjE4RkJGMDAxQ0QwCi06MTAwNjUwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwQTAwMDBFM0IxCi06MTAwNjYwMDAyN0JEMDAyMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDZGCi06MTAwNjcwMDA4RkIwMDAxMDAwQTAxMDIxMDNFMDAwMDgyN0JEMDAyMDZCCi06MTAwNjgwMDAyN0JERkZFMEFGQjAwMDEwM0MxMDgwMDBBRkIyMDAxOEYzCi06MTAwNjkwMDBBRkJGMDAxQ0FGQjEwMDE0MzYxMjAxMDA5MjQzMDAwQjMzCi06MTAwNkEwMDAyNDAyMDAwMzE0NjIwMDZBOTY1MTAwMDgzMjIyMDAwMUZECi06MTAwNkIwMDAxMDQwMDAxNzhGODIwMDFDOEU0MzAwMDAzQzAyMDAzRjU4Ci06MTAwNkMwMDAzNDQyRkZGRjAwMDMyMzQwMDA0NDEwMkI1MDQwMDAwNTNDCi06MTAwNkQwMDAyNDAyMDEwMDk2NDIwMDE0M0MwMzAwNDAwQTAwMDE4RUVGCi06MTAwNkUwMDAwMDgzMjAyMTU0NjIwMDA2OTY0MjAwMTQzQzAyODAwOEQ4Ci06MTAwNkYwMDA5MDQyMDAwNDMwNDIwMDBGMDAwMjI1MDA5NjQyMDAxNDkwCi06MTAwNzAwMDAwMDgyMTAyNUFFMDIwMDgwMEEwMDAxQkUwMDAwMDAwMDM5Ci06MTAwNzEwMDA4QzQyMDAwQzEwNDAwMDI1MDAwMDAwMDAwRTAwMEQ0NTJBCi06MTAwNzIwMDAwMDAwMDAwMDk2MDIwMTA4OTYwMzAxMEM4Rjg1MDAxODU2Ci06MTAwNzMwMDAzMDQyMDAzRTMwNjNGRkZGMDAwMjE0MDAwMDQzMTAyNUVBCi06MTAwNzQwMDBBQ0EyMDAwMDhFMDIwMTAwQUNBMjAwMDQ5NjAzMDExNkM4Ci06MTAwNzUwMDA5NjA0MDEwRThGODIwMDFDMDAwMzFDMDAzMDg0RkZGRkYyCi06MTAwNzYwMDAwMDY0MTgyNUFDQTMwMDA4OTYwMzAxMTA5NjA0MDExMjNBCi06MTAwNzcwMDA5NDQ2MDAxRTAwMDMxQzAwMzA4NEZGRkYwMDY0MTgyNTBGCi06MTAwNzgwMDBBQ0EzMDAwQzNDMDIyMDAwMDBDMjMwMjU5NjAyMDExNEVDCi06MTAwNzkwMDAyNDA0MDAwMTMwNDJGRkZGQUNBMjAwMTBBQ0EwMDAxNDAyCi06MTAwN0EwMDBBQ0EwMDAxODBFMDAwRDc5QUNBNjAwMUMzQzAyMDgwMDlECi06MTAwN0IwMDA4QzQyMDA0MDI0NDIwMDAxM0MwMTA4MDBBQzIyMDA0MDcxCi06MTAwN0MwMDAzQzAyMDgwMDhDNDIwMDQ0MzIyMzAwMDQyNDQyMDAwMTExCi06MTAwN0QwMDAzQzAxMDgwMEFDMjIwMDQ0MTA2MDAwMDgzMjIyMDAwMkY0Ci06MTAwN0UwMDAwMjQwMjAyMThGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDZGCi06MTAwN0YwMDA4RkIwMDAxMDBBMDAwMEUzMjdCRDAwMjAxMDQwMDAxNTU0Ci06MTAwODAwMDA4RkJGMDAxQzNDMDQ4MDAwOEM4MzAxMDQzQzAyNjAyMEVDCi06MTAwODEwMDBBQzQzMDAxNDhDNDIwMDA0MjQwMzAxRkUzMDQyMDNGRjY5Ci06MTAwODIwMDAxNDQzMDAwQzhGQkYwMDFDOEM4MjAxMDAwMDAyMTlDMjBGCi06MTAwODMwMDAyNDYyRkZGQzJDNDIwMDA4MTA0MDAwMDMyNDA0MDAwMjQ0Ci06MTAwODQwMDAyNDYyRkZGRDAwNDQyMDA0M0MwMjYwMDBBQzQ0NjkxNEIzCi06MTAwODUwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDMyCi06MTAwODYwMDAwMDAwMTAyMTAzRTAwMDA4MjdCRDAwMjAzQzA0ODAwMEE4Ci06MTAwODcwMDA4QzgzMDEwMDI0MDIwMTAwNTA2MjAwMDMzQzAyODAwOEM2Ci06MTAwODgwMDAwMDAwMDAwRDNDMDI4MDA4OTA0MzAwMDQwMDAwMTAyMThECi06MTAwODkwMDAzMDYzMDAwRjAwMDMxRDAwMDNFMDAwMDhBQzgzMDA4MEZDCi06MTAwOEEwMDAyQzg0MDc4MTEwODAwMDBBMDAwMDI4MjEzQzAyODAwMDZGCi06MTAwOEIwMDA5NDQyMDEwODI0MDMyMDAwMzA0MjcwMDAxNDQzMDAwNUQ0Ci06MTAwOEMwMDAyNzgzRkZCMDNDMDI4MDA4OTA0MjAwMDUzMDQ1MDBGRkJFCi06MTAwOEQwMDAyNzgzRkZCMDAwMDUyMDgwMDA4MzIwMjEwMDA1MTBDMDgxCi06MTAwOEUwMDAwMDQ1MTAyMzhDODQwMDAwM0MwMzA4MDAyNDYzNTJFNDdDCi06MTAwOEYwMDAwMDAyMTBDMDAwNDMxMDIxM0MwMzgwMDBBQzY0MDA5MDUzCi06MTAwOTAwMDAwM0UwMDAwOEFGODIwMDFDMDNFMDAwMDgwMDAwMTAyMTkzCi06MTAwOTEwMDAwM0UwMDAwODAwMDAxMDIxMjQwMjAxMDAxNDgyMDAwOEY2Ci06MTAwOTIwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAwRkMyNDQyMDAwMTUwCi06MTAwOTMwMDAzQzAxMDgwMEFDMjIwMEZDMEEwMDAyMjQzMEEyMDAyMDg2Ci06MTAwOTQwMDAzQzAyMDgwMDhDNDIwMDg0MjQ0MjAwMDEzQzAxMDgwMDYzCi06MTAwOTUwMDBBQzIyMDA4NDMwQTIwMDIwMTA0MDAwMDgzMEEzMDAxMDE4Ci06MTAwOTYwMDAzQzAyMDgwMDhDNDIwMTA4MjQ0MjAwMDEzQzAxMDgwMEJFCi06MTAwOTcwMDBBQzIyMDEwODAzRTAwMDA4MDAwMDAwMDAxMDYwMDAwODNECi06MTAwOTgwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAxMDQyNDQyMDAwMUU3Ci06MTAwOTkwMDAzQzAxMDgwMEFDMjIwMTA0MDNFMDAwMDgwMDAwMDAwMDU0Ci06MTAwOUEwMDAzQzAyMDgwMDhDNDIwMTAwMjQ0MjAwMDEzQzAxMDgwMDg2Ci06MTAwOUIwMDBBQzIyMDEwMDAzRTAwMDA4MDAwMDAwMDAyN0JERkZFOEIyCi06MTAwOUMwMDBBRkIwMDAxMDNDMTA4MDAwQUZCRjAwMTQzNjA0MDEwMDJGCi06MTAwOUQwMDA5NDgzMDAwODMwNjIwMDA0MTA0MDAwMDUzMDY2MDAwMjc1Ci06MTAwOUUwMDA4RkJGMDAxNDhGQjAwMDEwMEEwMDAwRTMyN0JEMDAxODZECi06MTAwOUYwMDAxMEMwMDAwNjAwNjAyODIxOEUwNDAxMDAwRTAwMDIxNEMxCi06MTAwQTAwMDAwMDAwMDAwMDBBMDAwMjVCMjQwMjAwMDE4RjgyMDAwODNGCi06MTAwQTEwMDA4RTAzMDEwNDEwNDMwMDA3MDAwMDEwMjE4RTA0MDEwMDIyCi06MTAwQTIwMDAwRTAwMDIxNDAwMDAwMDAwOEUwMjAxMDRBRjgyMDAwOEQ0Ci06MTAwQTMwMDAwMDAwMTAyMThGQkYwMDE0OEZCMDAwMTAwM0UwMDAwOEU5Ci06MTAwQTQwMDAyN0JEMDAxODI3QkRGRkQ4M0MwMzYwMTBBRkIzMDAxQ0MyCi06MTAwQTUwMDBBRkJGMDAyMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFDCi06MTAwQTYwMDA4QzY0NTAwMDI0MDJGRjdGM0MxMzA4MDAyNjczNTI0ODE4Ci06MTAwQTcwMDAwMDgyMjAyNDM0ODQzODBDQUM2NDUwMDAzQzAyODAwMDk2Ci06MTAwQTgwMDAyNDAzMDAzN0FDNDMwMDA4M0MwNjA4MDAyNEM2MDg0MDk1Ci06MTAwQTkwMDAwMjYwMTAyMTI0MDQwMDFDMjQ4NEZGRkZBQzQ2MDAwMEU3Ci06MTAwQUEwMDAwNDgxRkZGRDI0NDIwMDA0M0MwMjA4MDAyNDQyMDE2QzQyCi06MTAwQUIwMDAzQzAxMDgwMEFDMjI1MjUwM0MwMjA4MDAyNDQyMDVCODE4Ci06MTAwQUMwMDAzQzAxMDgwMEFDMjI1MjU0M0MwMjA4MDAyNDQyMDI4NDNCCi06MTAwQUQwMDAzQzAxMDgwMEFDMjI1MjkwM0MwMjA4MDAyNDQyMDQwODY5Ci06MTAwQUUwMDAzQzAzMDgwMDI0NjMwODQ4M0MwNDA4MDAyNDg0MDhGNEZDCi06MTAwQUYwMDAzQzA1MDgwMDI0QTUyQzRDM0MwMTA4MDBBQzIyNTJCMDU3Ci06MTAwQjAwMDAzQzAyMDgwMDI0NDIwN0E0M0MwMTA4MDBBQzI2NTI5ODhECi06MTAwQjEwMDAzQzAxMDgwMEFDMjU1MkE0M0MwMTA4MDBBQzIzNTJBQ0I3Ci06MTAwQjIwMDAzQzAxMDgwMEFDMjQ1MkI0M0MwMTA4MDBBQzIyNTJCODhECi06MTAwQjMwMDAzQzAxMDgwMEFDMjM1MjRDM0MwMTA4MDBBQzIwNTI1ODQ4Ci06MTAwQjQwMDAzQzAxMDgwMEFDMjA1MjVDM0MwMTA4MDBBQzIwNTI2MDIzCi06MTAwQjUwMDAzQzAxMDgwMEFDMjA1MjY0M0MwMTA4MDBBQzIwNTI2ODAzCi06MTAwQjYwMDAzQzAxMDgwMEFDMjA1MjZDM0MwMTA4MDBBQzIwNTI3MEUzCi06MTAwQjcwMDAzQzAxMDgwMEFDMjQ1Mjc0M0MwMTA4MDBBQzIwNTI3OEJGCi06MTAwQjgwMDAzQzAxMDgwMEFDMjA1MjdDM0MwMTA4MDBBQzIwNTI4MEEzCi06MTAwQjkwMDAzQzAxMDgwMEFDMjA1Mjg0M0MwMTA4MDBBQzIwNTI4ODgzCi06MTAwQkEwMDAzQzAxMDgwMEFDMjY1MjhDM0MwMTA4MDBBQzI2NTI5NDUzCi06MTAwQkIwMDAzQzAxMDgwMEFDMjA1MjlDM0MwMTA4MDBBQzI1NTJBMDJFCi06MTAwQkMwMDAzQzAxMDgwMEFDMjM1MkE4MEUwMDA1NUEwMDAwMDAwMEFBCi06MTAwQkQwMDA4RjgzMDAwNDNDMDIwODAwOEM0MjAwMjAxMDYyMDAxRjNBCi06MTAwQkUwMDAwMDAwODgyMTI3OTJGRkIwM0MxMDA4MDAyNjEwNTJFNDM0Ci06MTAwQkYwMDAzQzAyMDgwMDhDNDIwMDIwMjQwNTAwMDEwMjI1MTgwNDU0Ci06MTAwQzAwMDAwMDQzMjAyNDhGODIwMDA0MDA0MzEwMjQ1MDQ0MDAwQzMxCi06MTAwQzEwMDAyNjMxMDAwMTEwODAwMDA4QUY5MDAwMUM4RTQzMDAwMEI4Ci06MTAwQzIwMDAzQzAyODAwMEFDNDMwMDkwMEUwMDBEMENBRTA1MDAwQ0ExCi06MTAwQzMwMDAwQTAwMDJERTI2MzEwMDAxQUUwMDAwMEMyNjMxMDAwMTYwCi06MTAwQzQwMDAyRTIyMDAwMjI2MTAwMDM4MTQ0MEZGRTkyNjUyMDAwNDJDCi06MTAwQzUwMDAzQzAyMDgwMDhDNDIwMDIwQUY4MjAwMDQzQzEwODAwMDVGCi06MTAwQzYwMDA4RTExMDAwMDMyMjIwMDA3MTA0MEZGREE4RjgzMDAwNDRCCi06MTAwQzcwMDAzMjIyMDAwMTEwNDAwMDIxMzIyMjAwMDI4RTAyMDEwMEM3Ci06MTAwQzgwMDBBRTAyMDAyMDhFMDIwMTA0QUUwMjAwQTgwRTAwMDFGNkEyCi06MTAwQzkwMDA4RTA0MDEwMDkyMDIwMTBCMzA0MzAwRkYyQzYyMDAxRDA0Ci06MTAwQ0EwMDA1NDQwMDAwNDAwMDMxMDgwMEUwMDAyMTAwQTAwMDJGRkVFCi06MTAwQ0IwMDAwMDAwMDAwMDAwNTMxMDIxOEM0MjAwMDAwMDQwRjgwOUExCi06MTAwQ0MwMDAwMDAwMDAwMDEwNDAwMDA0M0MwMjgwMDA4QzQzMDEwNDNFCi06MTAwQ0QwMDAzQzAyNjAyMEFDNDMwMDE0M0MwMjA4MDA4QzQyMDAzNDBCCi06MTAwQ0UwMDAzQzA0NDAwMDNDMDM4MDAwMjQ0MjAwMDFBQzY0MDEzODE1Ci06MTAwQ0YwMDAzQzAxMDgwMEFDMjIwMDM0MzIyMjAwMDIxMDQwMDAxMEY3Ci06MTAwRDAwMDAzMjIyMDAwNDNDMTA4MDAwOEUwMjAxNDBBRTAyMDAyMDFFCi06MTAwRDEwMDAwRTAwMDFGNjhFMDQwMTQwMEUwMDAzOTcwMDAwMDAwMDUzCi06MTAwRDIwMDAzQzAyNDAwMEFFMDIwMTc4M0MwMjA4MDA4QzQyMDAzOEQwCi06MTAwRDMwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwMzgzMjIyMDAwNEE5Ci06MTAwRDQwMDAxMDQwRkZBNDhGODMwMDA0M0MxMDgwMDA4RTAyMDE4MEJECi06MTAwRDUwMDBBRTAyMDAyMDBFMDAwMUY2OEUwNDAxODA4RTAzMDE4MDk5Ci06MTAwRDYwMDAyNDAyMEYwMDE0NjIwMDA3M0MwMjgwMDg4RTAyMDE4OEYyCi06MTAwRDcwMDAzQzAzMDBFMDMwNDJGRkZGMDA0MzEwMjUwQTAwMDMzQjI0Ci06MTAwRDgwMDBBRTAyMDA4MDM0NDIwMDgwOTA0MjAwMDAyNDAzMDA1MEY0Ci06MTAwRDkwMDAzMDQyMDBGRjE0NDMwMDA3MDAwMDAwMDAwRTAwMDM3NEZGCi06MTAwREEwMDAwMDAwMDAwMDE0NDAwMDAzMDAwMDAwMDAwRTAwMDk1RDc4Ci06MTAwREIwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAwM0MzQzA0NDAwMDYzCi06MTAwREMwMDAzQzAzODAwMDI0NDIwMDAxQUM2NDAxQjgzQzAxMDgwMEVGCi06MTAwREQwMDBBQzIyMDAzQzBBMDAwMkMzOEY4MzAwMDQzQzAyOTAwMDU2Ci06MTAwREUwMDAzNDQyMDAwMTAwODIyMDI1M0MwMjgwMDBBQzQ0MDAyMEY3Ci06MTAwREYwMDAzQzAzODAwMDhDNjIwMDIwMDQ0MEZGRkUwMDAwMDAwMEU1Ci06MTAwRTAwMDAwM0UwMDAwODAwMDAwMDAwM0MwMjgwMDAzNDQzMDAwMUMxCi06MTAwRTEwMDAwMDgzMjAyNTAzRTAwMDA4QUM0NDAwMjAyN0JERkZFMDRDCi06MTAwRTIwMDBBRkIxMDAxNEFGQjAwMDEwMDA4MDg4MjFBRkJGMDAxODMwCi06MTAwRTMwMDAwRTAwMDM0NTMwQjAwMEZGOEY4M0ZGQTgwMjIwMjAyMTYxCi06MTAwRTQwMDA5MDYyMDAyNTAyMDI4MDI1QTA3MDAwMjU4QzcwMDAxODk5Ci06MTAwRTUwMDAzQzAyODAwMDBFMDAwMzUwMDIwMjgwMjQxNjAwMDAwQUFCCi06MTAwRTYwMDA4RkJGMDAxODNDMDM4MDAwOEM2MjAxRjgwNDQwRkZGRTM1Ci06MTAwRTcwMDAyNDAyMDAwMkFDNzEwMUMwQTA2MjAxQzQzQzAyMTAwMDU3Ci06MTAwRTgwMDBBQzYyMDFGODhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDUyCi06MTAwRTkwMDAwM0UwMDAwODI3QkQwMDIwMjdCREZGRThBRkJGMDAxMDFBCi06MTAwRUEwMDAzQzAzODAwMDk0NjIwMTg0MzA0MjAyMDAxMDQwMDAwNTNGCi06MTAwRUIwMDAwMDAwMjAyMTBFMDAwRkNEMDAwMDAwMDAwQTAwMDM4QTcwCi06MTAwRUMwMDAyNDA0MDAwMThDNjIwMTg4MDQ0MDAwMEE4RkJGMDAxMEQ2Ci06MTAwRUQwMDA4QzYyMDE4ODNDMDNGRjAwMDA0MzEwMjQzQzAzMDQwMEEzCi06MTAwRUUwMDAxNDQzMDAwNDI0MDQwMDAxOEY4MkZGQTg5MDQyMDAwOEVDCi06MTAwRUYwMDA4RkJGMDAxMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAxOEZDCi06MTAwRjAwMDA4RjgyRkZBQzI0MDMwMDAxMjQwNTAwMDFBMDQwMDAxQUQ5Ci06MTAwRjEwMDA4RjgyRkZBOEE0NDMwMDE2M0MwMjgwMDAwQTAwMDM1NUZDCi06MTAwRjIwMDA4QzQ0MDE0MDhGODVGRkE4MjdCREZGRTBBRkJGMDAxQ0E4Ci06MTAwRjMwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTA5MEEyMDAwMDIzCi06MTAwRjQwMDAzMDQ0MDBGRjM4ODMwMDIwMzg4MjAwMzAwMDAzMTgyQjIzCi06MTAwRjUwMDAwMDAyMTAyQjAwNjIxODI0MTA2MDAwMDUzQzAyODAwMDgzCi06MTAwRjYwMDAyNDAyMDA1MDE0ODIwMDgxOEZCRjAwMUMzQzAyODAwMENDCi06MTAwRjcwMDA5MDQyMDE0ODMwNDIwMEZGMjQ0M0ZGRkYyQzYyMDAwNUVECi06MTAwRjgwMDAxMDQwMDA3QThGQkYwMDFDMDAwMzEwODAzQzAzMDgwMDUzCi06MTAwRjkwMDAyNDYzNTFEQzAwNDMxMDIxOEM0MjAwMDAwMDQwMDAwODEzCi06MTAwRkEwMDAwMDAwMDAwMDNDMTE4MDAwOEUyNDAxNDAwRTAwMDM0NTJCCi06MTAwRkIwMDA4RjkyRkZBODhFNTAwMDBDOEUyMjAxNDQxNjAyMDAwMjcwCi06MTAwRkMwMDAyNDAyMDAwMUFFNDIwMDBDMEUwMDAzNTA4RTI0MDE0MEFBCi06MTAwRkQwMDA4RTIyMDE0NDE0NTAwMDA2OEZCRjAwMUM4RkIyMDAxOEVGCi06MTAwRkUwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDBGMzkyN0JEMDAyMDA4Ci06MTAwRkYwMDA4RTQyMDAwQzBBMDAwNDIyMDAwMDAwMDA5NEEyMDAxMDlGCi06MTAxMDAwMDAzQzA0ODAwMDhDODMwMTQ0MzA0MkZGRkYxNDYyMDAwOURECi06MTAxMDEwMDAwMDAwMDAwMDI0MDIwMDAxQTRBMjAwMTA4QzgyMDE0MDA0Ci06MTAxMDIwMDBBQzgyMDIwMDNDMDIxMDAwQUM4MjAyMzgwQTAwMDQyOUEzCi06MTAxMDMwMDA4RkJGMDAxQzk0QTIwMDEwMEEwMDA0MjIwMDAwMDAwMEQwCi06MTAxMDQwMDAyNDAyMDAyMDE0ODIwMDBFM0MxMTgwMDA5NEEyMDAxMkExCi06MTAxMDUwMDAzQzAzODAwMDhDNjMwMTQ0MzA0MkZGRkYxNDYyMDAwNUIyCi06MTAxMDYwMDAwMDAwMDAwMDI0MDIwMDAxQTRBMjAwMTIwQTAwMDNGQ0Y4Ci06MTAxMDcwMDA4RkJGMDAxQzk0QTIwMDEyMEEwMDA0MjIwMDAwMDAwMDhFCi06MTAxMDgwMDA4RTI0MDE0MDBFMDAwMzQ1OEY5MkZGQTg5NjQyMDAxMjY1Ci06MTAxMDkwMDA4RTIzMDE0NDMwNTBGRkZGMTYwMzAwMDIyNDAyMDAwMTlBCi06MTAxMEEwMDBBNjQyMDAxMjBFMDAwMzUwOEUyNDAxNDA4RTIyMDE0NEZECi06MTAxMEIwMDAxNjAyMDAwNjhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNEZCCi06MTAxMEMwMDA4RkIwMDAxMDBBMDAwMzhFMjdCRDAwMjA5NjQyMDAxMjQ4Ci06MTAxMEQwMDAwQTAwMDQyMjAwMDAwMDAwOTRBMjAwMTQzQzAzODAwMEQ3Ci06MTAxMEUwMDA4QzYzMDE0NDMwNDJGRkZGMTQ2MjAwMDg4RkJGMDAxQzc0Ci06MTAxMEYwMDAyNDAyMDAwMThGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMENECi06MTAxMTAwMDBBNEEyMDAxNDBBMDAxNDI0MjdCRDAwMjA5NEEyMDAxNEY1Ci06MTAxMTEwMDAwQTAwMDQyMjAwMDAwMDAwOTRBMjAwMTYzQzAzODAwMDk0Ci06MTAxMTIwMDA4QzYzMDE0NDMwNDJGRkZGMTQ2MjAwMDgyNDAyMDAwMTc2Ci06MTAxMTMwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDQ5Ci06MTAxMTQwMDBBNEEyMDAxNjBBMDAwQjAwMjdCRDAwMjA5NEEyMDAxNkRFCi06MTAxMTUwMDAxNDQwMDAwNjhGQkYwMDFDM0MwMjA4MDA4QzQyMDA3MDQ3Ci06MTAxMTYwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNzA4RkIyMDAxODNDCi06MTAxMTcwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMERECi06MTAxMTgwMDAyN0JERkZEOEFGQjIwMDE4OEY5MkZGQThBRkIxMDAxNEVGCi06MTAxMTkwMDBBRkJGMDAyMEFGQjMwMDFDQUZCMDAwMTAzQzAyODAwMDE2Ci06MTAxMUEwMDAzNDUxMDEwMDhDNTAwMTAwOTI0MjAwMDA5MjIzMDAwOTRBCi06MTAxMUIwMDAzMDQ0MDBGRjI0MDIwMDFGMTA2MjAwQUIyODYyMDAyMEIwCi06MTAxMUMwMDAxMDQwMDAxOTI0MDIwMDM4Mjg2MjAwMEExMDQwMDAwRDY3Ci06MTAxMUQwMDAyNDAyMDAwQjI4NjIwMDA4MTA0MDAwMkU4RjgyMDAxQ0ExCi06MTAxMUUwMDAwNDYwMDEwMzI4NjIwMDAyMTQ0MDAwMkE4RjgyMDAxQzYwCi06MTAxMUYwMDAyNDAyMDAwNjEwNjIwMDI2OEZCRjAwMjAwQTAwMDU0QzYyCi06MTAxMjAwMDA4RkIzMDAxQzEwNjIwMDYwMjg2MjAwMEIxNDQwMDBGOUNDCi06MTAxMjEwMDA4RkJGMDAyMDI0MDIwMDBFMTA2MjAwNzg4RjgyMDAxQzE1Ci06MTAxMjIwMDAwQTAwMDU0QzhGQjMwMDFDMTA2MjAwRDEyODYyMDAzOUZGCi06MTAxMjMwMDAxMDQwMDAwQTI0MDIwMDgwMjQwMjAwMzYxMDYyMDBFNEZDCi06MTAxMjQwMDAyODYyMDAzNzEwNDAwMEMyMjQwMjAwMzUxMDYyMDBEODI2Ci06MTAxMjUwMDA4RkJGMDAyMDBBMDAwNTRDOEZCMzAwMUMxMDYyMDAyREM4Ci06MTAxMjYwMDAyODYyMDA4MTEwNDAwMDA2MjQwMjAwQzgyNDAyMDAzOUQwCi06MTAxMjcwMDAxMDYyMDBDODhGQkYwMDIwMEEwMDA1NEM4RkIzMDAxQzBECi06MTAxMjgwMDAxMDYyMDBBMjhGQkYwMDIwMEEwMDA1NEM4RkIzMDAxQzIzCi06MTAxMjkwMDA4RjgyMDAxQzhDNDIwMDBDMTA0MDAwRDY4RkJGMDAyMEIzCi06MTAxMkEwMDAwRTAwMEQ0NTAwMDAwMDAwM0MwMzgwMDAzNDYzMDEwMDg3Ci06MTAxMkIwMDA4QzYyMDAwMDhGODUwMDE4OTQ2NzAwMDg5NDY2MDAwQzBCCi06MTAxMkMwMDBBQ0EyMDAwMDhDNjQwMDA0OEY4MjAwMUMwMDA2MzQwMDc1Ci06MTAxMkQwMDBBQ0E0MDAwNDk0NDgwMDFFOEM2MjAwMTgwMDA3M0MwMDc3Ci06MTAxMkUwMDAwMEU4MzgyNUFDQTIwMDA4OEM2MjAwMUMyNDA0MDAwMTMwCi06MTAxMkYwMDBBQ0EyMDAwQzkwNjIwMDBBMDBDMjMwMjVBQ0E2MDAxMDFGCi06MTAxMzAwMDBBQ0EwMDAxNEFDQTAwMDE4QUNBNzAwMUMwQTAwMDUwQjkwCi06MTAxMzEwMDA4RkJGMDAyMDhGODIwMDFDOEM0MjAwMEMxMDQwMDBCNTUzCi06MTAxMzIwMDA4RkJGMDAyMDBFMDAwRDQ1MDAwMDAwMDA4RjgyMDAxQ0MyCi06MTAxMzMwMDA5NjI0MDAwODk2MjUwMDBDOTQ0MzAwMUUwMDA0MjIwMjA3Ci06MTAxMzQwMDA5NjI2MDAwRThGODIwMDE4MDAwNDI2MDAwMDgzMjAyNUI4Ci06MTAxMzUwMDAwMDA1MkMwMDNDMDMwMDgwMDBBNjI4MjUwMDgzMjAyNUUyCi06MTAxMzYwMDBBQzQwMDAwMEFDNDAwMDA0QUM0MDAwMDhBQzQwMDAwQ0I1Ci06MTAxMzcwMDBBQzQ1MDAxMEFDNDAwMDE0QUM0MDAwMThBQzQ0MDAxQzVDCi06MTAxMzgwMDAwQTAwMDUwQTI0MDQwMDAxOTYyMjAwMEMxNDQwMDAxOEVCCi06MTAxMzkwMDAwMDAwMDAwMDkyNDIwMDA1MzA0MjAwMTAxNDQwMDAxNDhBCi06MTAxM0EwMDAwMDAwMDAwMDBFMDAwMzQ1MDIwMDIwMjE5MjQyMDAwNUNCCi06MTAxM0IwMDAwMjAwMjAyMTM0NDIwMDEwMEUwMDAzNTBBMjQyMDAwNTFBCi06MTAxM0MwMDA5MjQyMDAwMDI0MDMwMDIwMzA0MjAwRkYxMDQzMDA4OEI2Ci06MTAxM0QwMDAwMjAwMjAyMThGQkYwMDIwOEZCMzAwMUM4RkIyMDAxOEE1Ci06MTAxM0UwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDEwMzYyN0JEMDAyOEZFCi06MTAxM0YwMDAwMDAwMDAwRDBBMDAwNTRCOEZCRjAwMjA4QzQyMDAwQzNFCi06MTAxNDAwMDAxMDQwMDA3QzhGQkYwMDIwMEUwMDBENDUwMDAwMDAwMDQyCi06MTAxNDEwMDA4RTIyMDAwNDhGODQwMDE4OTYyMzAwMENBQzgyMDAwMEZBCi06MTAxNDIwMDAzQzAyODAwODk0NDUwMDJDOEY4MjAwMUMwMDAzMUMwMEE1Ci06MTAxNDMwMDAzMEE1RkZGRjk0NDYwMDFFM0MwMjQwMEUwMDY1MTgyNUIzCi06MTAxNDQwMDAwMEMyMzAyNUFDODMwMDA0QUM4MDAwMDhBQzgwMDAwQ0U2Ci06MTAxNDUwMDBBQzgwMDAxMEFDODAwMDE0QUM4MDAwMThBQzg2MDAxQzdFCi06MTAxNDYwMDAwQTAwMDUwQTI0MDQwMDAxMEUwMDAzNDUwMjAwMjAyMUExCi06MTAxNDcwMDA4RjkzRkZBQzAyMDAyMDIxMEUwMDAzNTBBNjYwMDAwQ0U5Ci06MTAxNDgwMDAwMjAwMjAyMTBFMDAwMzU1MjQwNTAwMDE4RjgyMDAxQzVDCi06MTAxNDkwMDA4QzQyMDAwQzEwNDAwMDU3OEZCRjAwMjAwRTAwMEQ0NUZECi06MTAxNEEwMDAwMDAwMDAwMDk2MjIwMDBDOEY4MzAwMTgwMDAyMTQwMDM4Ci06MTAxNEIwMDBBQzcwMDAwMEFDNjIwMDA0QUM2MDAwMDg4RTQ0MDAzOEUwCi06MTAxNEMwMDA4RjgyMDAxQ0FDNjQwMDBDOEU0NjAwM0M5NDQ1MDAxRUNDCi06MTAxNEQwMDAzQzAyNDAxRkFDNjYwMDEwMDBBMjI4MjU4RTYyMDAwNDZBCi06MTAxNEUwMDAyNDA0MDAwMUFDNjIwMDE0QUM2MDAwMThBQzY1MDAxQzYwCi06MTAxNEYwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDczCi06MTAxNTAwMDA4RkIwMDAxMDBBMDAwRDc5MjdCRDAwMjgyNDAyMDAyMEFBCi06MTAxNTEwMDAxMDgyMDAzOThGQjMwMDFDMEUwMDBGMUYwMDAwMDAwMDY2Ci06MTAxNTIwMDAxMDQwMDAzNDhGQkYwMDIwM0MwMzgwMDA4QzYyMDFGODIzCi06MTAxNTMwMDAwNDQwRkZGRTI0MDIwMDAyQUM3MDAxQzBBMDYyMDFDNDlFCi06MTAxNTQwMDAzQzAyMTAwMEFDNjIwMUY4MEEwMDA1NEI4RkJGMDAyMDdFCi06MTAxNTUwMDAwMjAwMjAyMThGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODIzCi06MTAxNTYwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDBFNjgyN0JEMDAyODRDCi06MTAxNTcwMDA5NjI1MDAwQzAyMDAyMDIxOEZCRjAwMjA4RkIzMDAxQzk1Ci06MTAxNTgwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwQTAwMEU4REJBCi06MTAxNTkwMDAyN0JEMDAyODAyMDAyMDIxOEZCMzAwMUM4RkIyMDAxODQ1Ci06MTAxNUEwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDBFQjgyN0JEMDAyOEJDCi06MTAxNUIwMDA5MjI1MDAwRDAyMDAyMDIxOEZCMzAwMUM4RkIyMDAxODZECi06MTAxNUMwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDBGMDkyN0JEMDAyODRBCi06MTAxNUQwMDAwMjAwMjAyMThGQkYwMDIwOEZCMzAwMUM4RkIyMDAxOEEzCi06MTAxNUUwMDA4RkIxMDAxNDhGQjAwMDEwMEEwMDBFRTAyN0JEMDAyODU0Ci06MTAxNUYwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDcyCi06MTAxNjAwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjgzQzAzODAwMEQ1Ci06MTAxNjEwMDA4QzYyMDI3ODA0NDBGRkZFMjQwMjAwMDJBQzY0MDI0MEE3Ci06MTAxNjIwMDBBMDYyMDI0NDNDMDIxMDAwMDNFMDAwMDhBQzYyMDI3OEIxCi06MTAxNjMwMDBBMzgwMDAxMDAzRTAwMDA4QTM4MDAwMTEzQzAzODAwMDk5Ci06MTAxNjQwMDA4QzYyMDI3ODA0NDBGRkZFOEY4MjAwMTRBQzYyMDI0MDdDCi06MTAxNjUwMDAyNDAyMDAwMkEwNjIwMjQ0M0MwMjEwMDAwM0UwMDAwOEUxCi06MTAxNjYwMDBBQzYyMDI3ODNDMDI2MDAwMDNFMDAwMDg4QzQyNTQwNDQzCi06MTAxNjcwMDA5MDgzMDAzMDI0MDIwMDA1MDA4MDQwMjEzMDYzMDAzRjQ5Ci06MTAxNjgwMDAwMDAwNDgyMTE0NjIwMDA1MDAwMDUwMjE5MDgyMDA0Q0E3Ci06MTAxNjkwMDA5NDgzMDA0RTMwNDkwMEZGMzA2QUZGRkZBRDAwMDAwQzFDCi06MTAxNkEwMDBBRDAwMDAxMEFEMDAwMDI0OTUwMjAwMTQ4RDA1MDAxQzUzCi06MTAxNkIwMDA4RDA0MDAxODMwNDJGRkZGMDA0OTEwMjMwMDAyMTEwMDgyCi06MTAxNkMwMDAwMDAyMzdDMzAwNDAzODIxMDA4NjIwMjMwMEEyMTAyQkRGCi06MTAxNkQwMDAwMDgyMjAyMzAwQTcyODIzQUQwNTAwMUNBRDA0MDAxOEJDCi06MTAxNkUwMDBBNTA5MDAxNEE1MDkwMDIwQTUwQTAwMTYwM0UwMDAwOEJBCi06MTAxNkYwMDBBNTBBMDAyMjAzRTAwMDA4MDAwMDAwMDAyN0JERkZEODczCi06MTAxNzAwMDBBRkIyMDAxODNDMTI4MDA4QUZCNDAwMjBBRkIzMDAxQzg5Ci06MTAxNzEwMDBBRkIxMDAxNEFGQkYwMDI0QUZCMDAwMTAzNjUxMDEwMENDCi06MTAxNzIwMDAzQzAyNjAwMDhDNDI1NDA0OTIyMjAwMEMzQzE0MDgwMERECi06MTAxNzMwMDA5Mjk0MDBGNzMwNDMwMEZGMjQwMjAwMDExMDYyMDAzMjRGCi06MTAxNzQwMDAwMDgwOTgyMTI0MDIwMDAyMTQ2MjAwMzUzNjUwMDA4MDg3Ci06MTAxNzUwMDAwRTAwMTNGRTAwMDAwMDAwOTIwMjAwNEMyNDAzRkY4MEU0Ci06MTAxNzYwMDAzQzA0ODAwMDMwNDIwMDdGMDAwMjExQzAyNDQyMDI0MDRECi06MTAxNzcwMDAwMjYyMTAyMTAwNDMxODI0QUM4MzAwOTQ5MjQ1MDAwOEIzCi06MTAxNzgwMDA5MjA0MDA0QzMwNDIwMDdGM0MwMzgwMDYxNDg1MDAwNzIxCi06MTAxNzkwMDAwMDQzODAyMTI0MDJGRkZGQTIyMjAwMTEyNDAyRkZGRjQ4Ci06MTAxN0EwMDBBNjIyMDAxMjBBMDAwNUJFMjQwMkZGRkY5NjAyMDAyMEI2Ci06MTAxN0IwMDBBMjIyMDAxMTk2MDIwMDIyQTYyMjAwMTI4RTAyMDAyNDBDCi06MTAxN0MwMDAzQzA0ODAwOEFFMjIwMDE0MzQ4NTAwODA5MEEyMDA0Q0I2Ci06MTAxN0QwMDAzNDgzMDEwMEEwNjIwMDEwOENBMjAwM0NBQzYyMDAxOEFGCi06MTAxN0UwMDA4QzgyMDA2OEFDNjIwMEU0OEM4MjAwNjRBQzYyMDBFMDMxCi06MTAxN0YwMDA4QzgyMDA2Q0FDNjIwMEU4MjQwMjAwMDFBMEEyMDA2OEE4Ci06MTAxODAwMDAwQTAwMDVEQTNDMDQ4MDA4MEUwMDE0MTcwMDAwMDAwMEVFCi06MTAxODEwMDAzNjQyMDA4MEEwNDAwMDY4MEEwMDA1REEzQzA0ODAwOEQ3Ci06MTAxODIwMDBBMjAwMDA2OEEyMDAwMDY5MEEwMDA2MTUzQzAyODAwOEI4Ci06MTAxODMwMDAzNDgzMDA4MDhDNjIwMDM4MzQ4NTAxMDBBQzYyMDA2QzE3Ci06MTAxODQwMDAyNDAyMDAwMUEwNjIwMDY5OTBBMjAwQzU5MDgzMDAwOEY0Ci06MTAxODUwMDAzMDUxMDBGRjMwNzIwMDdGMTIzMjAwMTkwMDExMTFDMEE4Ci06MTAxODYwMDAyNDQyMDI0MDAyNjIxMDIxMjQwM0ZGODAwMDQzMTgyNDE2Ci06MTAxODcwMDAzQzA0ODAwMEFDODMwMDk0MzA0MjAwN0YzQzAzODAwNjJGCi06MTAxODgwMDAwMDQzODAyMThFMDIwMDBDMTA0MDAwMEQwMjAwMjAyMTM4Ci06MTAxODkwMDAwRTAwMDU2QTAwMDAwMDAwMjYyMjAwMDEzMDUxMDBGRjAyCi06MTAxOEEwMDA5MjAzMDAzQzAyMzQxMDI2MDAwMjEwMkIwMDAyMTAyMzg5Ci06MTAxOEIwMDAzMDYzMDA3RjAyMjI4ODI0MEEwMDA1RTRBMjAzMDAzQzcyCi06MTAxOEMwMDAzQzA4ODAwODM1MDQwMTAwOEM4MjAwRDAzNTA3MDA4MDc4Ci06MTAxOEQwMDBBQ0UyMDAzQzhDODIwMEQwQUQwMjAwMDA5MEU1MDA0Q0YwCi06MTAxOEUwMDA5MDg2MDBDNTkwRTMwMDRDOTA4NDAwQzUyNDAyRkY4MEUwCi06MTAxOEYwMDAwMEEyMjgyNDMwNjMwMDdGMzA4NDAwRkYwMEE2MjgyNTQyCi06MTAxOTAwMDAwMDY0MTgyQTEwNjAwMDAyMzBBNTAwRkYzOEE1MDA4MDhFCi06MTAxOTEwMDBBMEU1MDA0Q0ExMDUwMDA5M0MwMjgwMDg5MDQzMDAwRUEwCi06MTAxOTIwMDAzNDQ0MDA4MDNDMDU4MDAwQTA0MzAwMEE4QzgzMDAxOEVBCi06MTAxOTMwMDAzQzAyN0ZGRjM0NDJGRkZGMDA2MjE4MjRBQzgzMDAxODkyCi06MTAxOTQwMDA4Q0EyMDFGODA0NDBGRkZFMDAwMDAwMDBBQ0IzMDFDMDBGCi06MTAxOTUwMDA4RkJGMDAyNDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxOEZCCi06MTAxOTYwMDA4RkIxMDAxNDhGQjAwMDEwMjQwMjAwMDJBMEEyMDFDNEE1Ci06MTAxOTcwMDAyN0JEMDAyODNDMDIxMDAwMDNFMDAwMDhBQ0EyMDFGOERCCi06MTAxOTgwMDA5MEEyMDAwMDI0NDIwMDAxQTBBMjAwMDAzQzAzMDgwMDM1Ci06MTAxOTkwMDA4QzYzMDBGNDMwNDIwMEZGMTQ0MzAwMDIwMDgwMzAyMUM5Ci06MTAxOUEwMDBBMEEwMDAwMDkwQTIwMDAwOEY4NDAwMTQwMDAyMTFDMENCCi06MTAxOUIwMDAyNDQyMDI0MDI0ODMwMDQwMDA4MjIwMjEyNDAyRkY4MDMwCi06MTAxOUMwMDAwMDgyMjAyNDMwNjMwMDdGM0MwMjgwMEEwMDYyMTgyMURDCi06MTAxOUQwMDAzQzAyODAwMEFDNDQwMDI0MDNFMDAwMDhBQ0MzMDAwMERCCi06MTAxOUUwMDA5NDgyMDAwNjkwODMwMDA1OEM4NTAwMEM4Qzg2MDAxMDg0Ci06MTAxOUYwMDA4Qzg3MDAxODhDODgwMDFDOEM4NDAwMjAzQzAxMDgwMDE3Ci06MTAxQTAwMDBBNDIyNTJDNjNDMDEwODAwQTAyMzUyQzUzQzAxMDgwMDk0Ci06MTAxQTEwMDBBQzI1NTJDQzNDMDEwODAwQUMyNjUyRDAzQzAxMDgwMDU5Ci06MTAxQTIwMDBBQzI3NTJEODNDMDEwODAwQUMyODUyREMzQzAxMDgwMDJECi06MTAxQTMwMDBBQzI0NTJFMDAzRTAwMDA4MDAwMDAwMDAzQzAyODAwOEYzCi06MTAxQTQwMDAzNDQyMDEwMDhDNDQwMDM0M0MwMzgwMDAzNDY1MDQwMEJGCi06MTAxQTUwMDBBQzY0MDAzODhDNDIwMDM4QUY4NTAwMjBBQzYyMDAzQzlBCi06MTAxQTYwMDAzQzAyMDAwNUFDNjIwMDMwMDAwMDAwMDAwMDAwMDAwMEY1Ci06MTAxQTcwMDAwM0UwMDAwODAwMDAwMDAwM0MwMjAwMDYzMDg0MDBGRjg0Ci06MTAxQTgwMDAwMDgyMjAyNTNDMDI4MDAwQUM0NDAwMzAwMDAwMDAwMEIxCi06MTAxQTkwMDAwMDAwMDAwMDAwMDAwMDAwM0MwMzgwMDA4QzYyMDAwMDk5Ci06MTAxQUEwMDAzMDQyMDAxMDEwNDBGRkZEMzQ2MjA0MDAwM0UwMDAwOEUzCi06MTAxQUIwMDBBRjgyMDAyMDk0QzIwMDAwM0MwODA4MDA5NTA4MDBDQUNDCi06MTAxQUMwMDAzMEU3RkZGRjAwODA0ODIxMDEwMjEwMjFBNEMyMDAwMDdFCi06MTAxQUQwMDA5NEMyMDAwMDMwNDJGRkZGMDBFMjEwMkI1NDQwMDAwMThFCi06MTAxQUUwMDBBNEM3MDAwMDk0QTIwMDAwM0MwMzA4MDA4QzYzMDBDQzUzCi06MTAxQUYwMDAyNDQyMDAwMUE0QTIwMDAwOTRBMjAwMDAzMDQyRkZGRjkzCi06MTAxQjAwMDAxNDQzMDAwNzNDMDI4MDA4MDEwNzEwMkJBNEEwMDAwMDJBCi06MTAxQjEwMDA1NDQwMDAwMTAxMDAzODIxQTRDNzAwMDAzQzAyODAwOEE1Ci06MTAxQjIwMDAzNDQ2MDEwMDhDQzMwMDI4OTRBMjAwMDAzQzA0ODAwMENECi06MTAxQjMwMDAzMDQyRkZGRTAwMDIxMEMwMDA2MjEwMjFBQzgyMDAzQzY3Ci06MTAxQjQwMDA4QzgyMDAzQzAwNjIxODIzMTg2MDAwMDQwMDAwMDAwMDMyCi06MTAxQjUwMDA4Q0MyMDAyNDBBMDAwNkE2MjQ0MjAwMDE4Q0MyMDAyNDg0Ci06MTAxQjYwMDBBQzgyMDAzODNDMDIwMDUwMzQ0MjAwMTAzQzAzODAwMDNDCi06MTAxQjcwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Ci06MTAxQjgwMDA4QzYyMDAwMDMwNDIwMDIwMTA0MEZGRkQwMDAwMDAwMDg5Ci06MTAxQjkwMDA5NEEyMDAwMDNDMDQ4MDAwMzA0MjAwMDEwMDAyMTBDMDBBCi06MTAxQkEwMDAwMDQ0MTAyMThDNDMwNDAwQUQyMzAwMDA4QzQyMDQwNDQ3Ci06MTAxQkIwMDBBRDIyMDAwNDNDMDIwMDIwMDNFMDAwMDhBQzgyMDAzMEFCCi06MTAxQkMwMDAyN0JERkZFMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEY2Ci06MTAxQkQwMDBBRkJGMDAxQzk0QzIwMDAwMDBDMDgwMjEzQzEyMDgwMDZFCi06MTAxQkUwMDA5NjUyMDBDNjI0NDIwMDAxQTYwMjAwMDA5NjAzMDAwMDlGCi06MTAxQkYwMDA5NEUyMDAwMDAwRTAzMDIxMTQ0MzAwMDU4RkIxMDAzMDcyCi06MTAxQzAwMDAwRTAwMDY3QjAyNDAzODIxMEEwMDA2REQwMDAwMDAwMEJECi06MTAxQzEwMDA4QzgzMDAwNDhDODIwMDA0MjQ0MjAwNDAwNDYxMDAwNzhECi06MTAxQzIwMDBBQzgyMDAwNDhDODIwMDA0MDQ0MDAwMDQwMDAwMDAwMDI4Ci06MTAxQzMwMDA4QzgyMDAwMDI0NDIwMDAxQUM4MjAwMDA5NjAyMDAwMDY5Ci06MTAxQzQwMDAzMDQyRkZGRjUwNTIwMDAxQTYwMDAwMDA5NjIyMDAwMDIzCi06MTAxQzUwMDAyNDQyMDAwMUE2MjIwMDAwM0MwMjgwMDgzNDQyMDEwMDE4Ci06MTAxQzYwMDA5NjIzMDAwMDk0NDIwMDNDMTQ0MzAwMDQ4RkJGMDAxQ0U0Ci06MTAxQzcwMDAyNDAyMDAwMUE2MjIwMDAwOEZCRjAwMUM4RkIyMDAxOEIyCi06MTAxQzgwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMEMyCi06MTAxQzkwMDAyN0JERkZFMDNDMDI4MDA4QUZCRjAwMTgzNDQyMDEwMEJFCi06MTAxQ0EwMDA4QzQ4MDAzNDNDMDM4MDAwMzQ2OTA0MDBBQzY4MDAzODgwCi06MTAxQ0IwMDA4QzQyMDAzODMwRTcwMEZGQUY4OTAwMjBBQzYyMDAzQzY2Ci06MTAxQ0MwMDAzQzAyMDAwNUFDNjIwMDMwMDAwMDAwMDAwMDAwMDAwMDkzCi06MTAxQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Ci06MTAxQ0UwMDA4QzgyMDAwQzhDODIwMDBDOTc4MzAwMEVBRDIyMDAwMEM5Ci06MTAxQ0YwMDA4QzgyMDAxMDAwNjA0MDIxQUQyMjAwMDQ4QzgyMDAxODBDCi06MTAxRDAwMDBBRDIyMDAwODhDODIwMDFDQUQyMjAwMEM4Q0EyMDAxNEI1Ci06MTAxRDEwMDBBRDIyMDAxMDhDODIwMDIwQUQyMjAwMTQ5MDgyMDAwNUJDCi06MTAxRDIwMDAzMDQyMDBGRjAwMDIxMjAwQUQyMjAwMTg4Q0EyMDAxODAxCi06MTAxRDMwMDBBRDIyMDAxQzhDQTIwMDBDQUQyMjAwMjA4Q0EyMDAxMDUxCi06MTAxRDQwMDBBRDIyMDAyNDhDQTIwMDFDQUQyMjAwMjg4Q0EyMDAyMDExCi06MTAxRDUwMDBBRDIyMDAyQzM0MDJGRkZGQUQyNjAwMzBBRDIwMDAzNDUwCi06MTAxRDYwMDA1MDYyMDAwMTM0MDhGRkZGQUQyODAwMzg1MEUwMDAxMTM4Ci06MTAxRDcwMDAzQzAyODAwODNDMDQ4MDA4MzQ4NDAxMDA5NDgyMDA1MEI2Ci06MTAxRDgwMDAzMDQyRkZGRkFEMjIwMDNDOTQ4MzAwNDQ5NDg1MDA0NDIwCi06MTAxRDkwMDAyNDAyMDAwMTMwNjNGRkZGMDAwMzE4QzIwMDY0MTgyMTExCi06MTAxREEwMDA5MDY0MDA1NDMwQTUwMDA3MDBBMjEwMDQwQTAwMDc0ODAwCi06MTAxREIwMDAwMDQ0MTAyNTM0NDIwMTAwQUQyMDAwM0M5NDQzMDA0NDBGCi06MTAxREMwMDA5NDQ0MDA0NDMwNjNGRkZGMDAwMzE4QzIwMDYyMTgyMUVFCi06MTAxREQwMDAzMDg0MDAwNzkwNjUwMDU0MjQwMjAwMDEwMDgyMTAwNDQyCi06MTAxREUwMDAwMDAyMTAyNzAwNDUxMDI0QTA2MjAwNTQwMDAwMDAwMEVCCi06MTAxREYwMDAwMDAwMDAwMDAwMDAwMDAwM0MwMjAwMDYzNDQyMDA0MEU5Ci06MTAxRTAwMDAzQzAzODAwMEFDNjIwMDMwMDAwMDAwMDAwMDAwMDAwMEQ1Ci06MTAxRTEwMDAwMDAwMDAwMDhDNjIwMDAwMzA0MjAwMTAxMDQwRkZGRDA2Ci06MTAxRTIwMDAzQzA2ODAwODM0QzIwMTUwMzQ2MzA0MDAzNEM3MDE0QUMwCi06MTAxRTMwMDAzNEM0MDEzNDM0QzUwMTQwMzRDNjAxNDRBRkEyMDAxMDlCCi06MTAxRTQwMDAwRTAwMDZCRUFGODMwMDIwOEZCRjAwMTgwM0UwMDAwODFECi06MTAxRTUwMDAyN0JEMDAyMDhGODMwMDBDM0MwNjA4MDA4Q0M2MDBFOERDCi06MTAxRTYwMDA4RjgyMDAxNDMwNjMzRkZGMDAwMzE5ODAwMDQ2MTAyMTY5Ci06MTAxRTcwMDAwMDQzMTAyMTI0MDNGRjgwMDA0MzE4MjQzQzA2ODAwMDA3Ci06MTAxRTgwMDBBQ0MzMDAyODMwNDIwMDdGM0MwMzgwMEMwMDQzMzAyMTZCCi06MTAxRTkwMDA5MEMyMDAwRDMwQTUwMEZGMDAwMDM4MjEzNDQyMDAxMDMwCi06MTAxRUEwMDBBMEMyMDAwRDhGODkwMDBDM0MwMjgwMDgzNDQyMDEwMDYyCi06MTAxRUIwMDA5NDQzMDA0NDAwMDkxMzgyMzA0ODAwMDMyNDAyMDAwMUM3Ci06MTAxRUMwMDBBNEMzMDAwRTExMDIwMDBCMjkwMjAwMDIxMDQwMDAwNUZECi06MTAxRUQwMDAyNDAyMDAwMjExMDAwMDBDMjQwMzAwMDEwQTAwMDc5MEY0Ci06MTAxRUUwMDAwMDAwMTgyMTExMDIwMDA2MDAwMDAwMDAwQTAwMDc5MEZGCi06MTAxRUYwMDAwMDAwMTgyMThDQzIwMDJDMEEwMDA3OTAyNDQzMDAwMTI2Ci06MTAxRjAwMDA4Q0MyMDAxNDI0NDMwMDAxOENDMjAwMTgwMDQzMTAyQjIzCi06MTAxRjEwMDA1MDQwMDAwQTI0MDcwMDAxMjQwMjAwMjcxNEEyMDAwM0Y1Ci06MTAxRjIwMDAzQzAzODAwODBBMDAwNzlEMjQwNzAwMDEzNDYzMDEwMDc4Ci06MTAxRjMwMDA5NDYyMDA0QzI0NDIwMDAxQTQ2MjAwNEMwMDA5MTM4MjA4Ci06MTAxRjQwMDAzMDQzMDAwMzJDNjIwMDAyMTA0MDAwMDkwMDgwMjgyMTY5Ci06MTAxRjUwMDAxNDYwMDAwNDAwMDAwMDAwOTRDMjAwMzQwQTAwMDdBREMxCi06MTAxRjYwMDAzMDQ2RkZGRjhDQzYwMDM4MEEwMDA3QUQwMDgwMjgyMUVDCi06MTAxRjcwMDAwMDAwMzAyMTNDMDQwODAwMjQ4NDUyQzAwQTAwMDZGMjBDCi06MTAxRjgwMDAwMDAwMDAwMDI3QkRGRjkwQUZCNjAwNjhBRkI1MDA2NDQ5Ci06MTAxRjkwMDBBRkI0MDA2MEFGQjMwMDVDQUZCMjAwNThBRkIxMDA1NDUzCi06MTAxRkEwMDBBRkJGMDA2Q0FGQjAwMDUwOEM5MDAwMDAwMDgwQjAyMTNCCi06MTAxRkIwMDAzQzAyMDgwMDhDNDIwMEU4OTYwNDAwMzI4RjgzMDAxNDMzCi06MTAxRkMwMDAyNDE0RkY4MDMwODQzRkZGMDA2MjE4MjEwMDA0MjE4MDI4Ci06MTAxRkQwMDAwMDY0MTgyMTAwNzQxMDI0M0MxMzgwMDAwMEEwOTAyMTlDCi06MTAxRkUwMDA5MEE1MDAwMEFFNjIwMDI4OTIwNDAwMzIzQzAyODAwQ0YyCi06MTAxRkYwMDAzMDYzMDA3RjAwNjI4ODIxMzA4NDAwQzAyNDAyMDA0MEVBCi06MTAyMDAwMDAxNDgyMDAzMjAwMDBBODIxOEUzNTAwMzg4RTIyMDAxODdDCi06MTAyMDEwMDAxNDQwMDAwMjI0MDIwMDAxQUUyMjAwMTg5MjAyMDAzQzhCCi06MTAyMDIwMDAzMDQyMDAyMDE0NDAwMDBFOEY4MzAwMTQwMDA1MTFDMEMwCi06MTAyMDMwMDAyNDQyMDI0MDAwNjIxODIxMzA2NDAwNzgzQzAyMDA4MDkzCi06MTAyMDQwMDAwMDgyMjAyNTAwNzQxODI0QUU2MzA4MDBBRTY0MDgxMEQ2Ci06MTAyMDUwMDA4RTIyMDAxODhFMDMwMDA4MDA0MzEwMjFBRTIyMDAxOEMzCi06MTAyMDYwMDA4RTIyMDAyQzhFMjMwMDE4MjQ0MjAwMDEwMDYyMTgyQkJGCi06MTAyMDcwMDAxMDYwMDA0MzAwMDAwMDAwOTI0MjAwMDAyNDQyMDAwMTcyCi06MTAyMDgwMDBBMjQyMDAwMDNDMDMwODAwOEM2MzAwRjQzMDQyMDBGRkQxCi06MTAyMDkwMDA1MDQzMDAwMUEyNDAwMDAwOTI0MjAwMDA4Rjg0MDAxNENGCi06MTAyMEEwMDAwMDAyMTFDMDI0NDIwMjQwMjQ4MzAwNDAzMDYzMDA3RkJDCi06MTAyMEIwMDAwMDgyMjAyMTNDMDI4MDBBMDA5NDIwMjQwMDYyMTgyMTIyCi06MTAyMEMwMDBBRTY0MDAyNDBBMDAwOEJFQUVDMzAwMDA5MjAzMDAzMkQyCi06MTAyMEQwMDAyNDAyRkZDMDAwNDMxMDI0MzA0MjAwRkYxNDQwMDAwNURBCi06MTAyMEUwMDAyNDAyMDAwMUFFMjIwMDE4OTYyMjAwMzQwQTAwMDgyRUI1Ci06MTAyMEYwMDAzMDU1RkZGRjhFMjIwMDE0MjQ0MjAwMDFBRTIyMDAxODRBCi06MTAyMTAwMDA5MjAyMDAzMDAwMDIxNjAwMDAwMjE2MDMwNDQxMDAxQzc3Ci06MTAyMTEwMDAwMDAwMDAwMDk2MDIwMDMyMjdBNDAwMTAwMDgwMjgyMTUxCi06MTAyMTIwMDBBN0EyMDAxNjk2MDIwMDMyMDAwMDMwMjEyNDA3MDAwMTA5Ci06MTAyMTMwMDAzMDQyRkZGRkFGODIwMDBDMEUwMDA2RjJBRkEwMDAxQzgxCi06MTAyMTQwMDA5NjAyMDAzMjhGODMwMDE0M0MwNDA4MDA4Qzg0MDBFODVGCi06MTAyMTUwMDAzMDQyM0ZGRjAwMDIxMTgwMDA2NDE4MjEwMDYyMTgyMTA0Ci06MTAyMTYwMDAwMDc0MTAyNEFFNjIwMDJDMzA2MzAwN0YzQzAyODAwRUFECi06MTAyMTcwMDAwMDYyMTgyMTkwNjIwMDBEMzA0MjAwN0ZBMDYyMDAwREM1Ci06MTAyMTgwMDA5MjIyMDAwRDMwNDIwMDEwNTA0MDAwNzg5MjQyMDAwMDMwCi06MTAyMTkwMDAzQzAyODAwODM0NDQwMTAwOTQ4MjAwNEM4RUMzMDAwMDRECi06MTAyMUEwMDAzQzEzMDgwMDk2NzMwMEM2MjQ0MkZGRkZBNDgyMDA0QzMzCi06MTAyMUIwMDA5NDYyMDAzMjk2MjMwMDBFMzA1NEZGRkYzMDcwRkZGRjEwCi06MTAyMUMwMDAzQzAzMDgwMDhDNjMwMEQwMDA3MDE4MDdBN0EzMDAzOEY4Ci06MTAyMUQwMDA5NDgyMDAzRTMwNjNGRkZGMzA0MkZGRkYxNDYyMDAwNzJECi06MTAyMUUwMDAwMDAwMDAwMDhDODIwMDMwM0MwMzgwMDAyNDQyMDAzMDVDCi06MTAyMUYwMDBBQzYyMDAzQzBBMDAwODU2OEM4MjAwMkM5NDgyMDA0MDlECi06MTAyMjAwMDAzMDQyRkZGRjU0NjIwMDA5MjdBNDAwNDA4QzgyMDAzODRFCi06MTAyMjEwMDAzQzAzODAwMDI0NDIwMDMwQUM2MjAwM0M4QzgyMDAzNERECi06MTAyMjIwMDBBQzYyMDAzODBBMDAwODY1M0MwMzgwMDAyN0E1MDAzODJFCi06MTAyMjMwMDAyN0E2MDA0ODAyNjAzODIxMEUwMDA2N0JBN0EwMDA0OEIwCi06MTAyMjQwMDA4RkEzMDA0MDNDMDI4MDAwMjQ2MzAwMzBBQzQzMDAzODgwCi06MTAyMjUwMDA4RkEzMDA0NEFDNDMwMDNDM0MwMzgwMDAzQzAyMDAwNURCCi06MTAyMjYwMDBBQzYyMDAzMDNDMDI4MDA4MzQ0NDAxMDA5NDgyMDA0Mjk5Ci06MTAyMjcwMDAzNDYzMDQwMDMwNDJGRkZGMDIwMjEwMkIxNDQwMDAwN0I5Ci06MTAyMjgwMDBBRjgzMDAyMDk0ODIwMDRFOTQ4MzAwNDIwMjAyMTAyMTBBCi06MTAyMjkwMDAwMDQzMTAyMzBBMDAwODdCMzA0M0ZGRkY5NDgzMDA0RTY1Ci06MTAyMkEwMDA5NDgyMDA0MjAyNjMxODIxMDA1MDEwMjMwMDYyMTgyMzE4Ci06MTAyMkIwMDAzMDYzRkZGRjNDMDI4MDA4MzQ0NDAxMDA5NDgyMDAzQ0ZDCi06MTAyMkMwMDAzMDQyRkZGRjE0NDMwMDAzMDAwMDAwMDAwQTAwMDg4QkE3Ci06MTAyMkQwMDAyNDAzMDAwMTk0ODIwMDNDMzA0MkZGRkYwMDYyMTAyQjc3Ci06MTAyMkUwMDAxNDQwMDAwNThGODIwMDIwOTQ4MjAwM0MwMDYyMTAyMzdECi06MTAyMkYwMDAzMDQzRkZGRjhGODIwMDIwQUM1NTAwMDBBQzQwMDAwNDRCCi06MTAyMzAwMDBBQzU0MDAwOEFDNDMwMDBDM0MwMjAwMDYzNDQyMDAxMDAwCi06MTAyMzEwMDAzQzAzODAwMEFDNjIwMDMwMDAwMDAwMDAwMDAwMDAwMEMwCi06MTAyMzIwMDAwMDAwMDAwMDhDNjIwMDAwMzA0MjAwMTAxMDQwRkZGREYxCi06MTAyMzMwMDAzQzA0ODAwODM0ODQwMTAwMDAxMDE4QzIwMDY0MTgyMTk1Ci06MTAyMzQwMDA5MDY1MDA1NDMyMDIwMDA3MjQwNjAwMDEwMDQ2MTAwNDg0Ci06MTAyMzUwMDAwMDQ1MTAyNUEwNjIwMDU0OTQ4MzAwNDI5NjIyMDAwRThFCi06MTAyMzYwMDA1MDQzMDAwMUEzODYwMDEwOTI0MjAwMDAyNDQyMDAwMTY1Ci06MTAyMzcwMDBBMjQyMDAwMDNDMDMwODAwOEM2MzAwRjQzMDQyMDBGRkRFCi06MTAyMzgwMDA1MDQzMDAwMUEyNDAwMDAwOTI0MjAwMDA4Rjg0MDAxNERDCi06MTAyMzkwMDAwMDAyMTFDMDI0NDIwMjQwMjQ4MzAwNDAwMDgyMjAyMTE4Ci06MTAyM0EwMDAyNDAyRkY4MDAwODIyMDI0MzA2MzAwN0YzQzAyODAwQUU4Ci06MTAyM0IwMDAwMDYyMTgyMTNDMDI4MDAwQUM0NDAwMjRBRUMzMDAwMDNGCi06MTAyM0MwMDA4RkJGMDA2QzhGQjYwMDY4OEZCNTAwNjQ4RkI0MDA2MDVCCi06MTAyM0QwMDA4RkIzMDA1QzhGQjIwMDU4OEZCMTAwNTQ4RkIwMDA1MEEzCi06MTAyM0UwMDAwM0UwMDAwODI3QkQwMDcwMjdCREZGRDhBRkIzMDAxQzc1Ci06MTAyM0YwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyMEYzCi06MTAyNDAwMDAwMDgwOTgyMTAwRTA4MDIxMzBCMUZGRkYwRTAwMEQ0NUQzCi06MTAyNDEwMDAzMEQyMDBGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCi06MTAyNDIwMDA4RjgyMDAxODhGODMwMDFDQUM1MTAwMDBBQzUyMDAwNDU2Ci06MTAyNDMwMDBBQzUzMDAwOEFDNDAwMDBDQUM0MDAwMTBBQzQwMDAxNEExCi06MTAyNDQwMDBBQzQwMDAxODk0NjMwMDFFMDIwMzgwMjVBQzUwMDAxQ0IxCi06MTAyNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNDA0MDAwMTUzCi06MTAyNDYwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNEYzCi06MTAyNDcwMDA4RkIwMDAxMDBBMDAwRDc5MjdCRDAwMjgzMEE1RkZGRjlFCi06MTAyNDgwMDAwQTAwMDhDODMwQzYwMEZGM0MwMjgwMDgzNDQzMDEwMDNGCi06MTAyNDkwMDA5NDYyMDAwRTNDMDgwODAwOTUwODAwQzYzMDQ2RkZGRjE1Ci06MTAyNEEwMDAxNEMwMDAwNDM0MDJGRkZGOTQ2NTAwREEwQTAwMDkxNTI1Ci06MTAyNEIwMDA4Rjg0MDAxNDEwQzIwMDI3MDAwMDAwMDA5NDYyMDA0RUI4Ci06MTAyNEMwMDA5NDY0MDAzQzMwNDVGRkZGMDBBNjEwMjMwMEE2MTgyQkEzCi06MTAyNEQwMDAzMDg3RkZGRjEwNjAwMDA0MzA0NEZGRkYwMEM1MTAyMzY5Ci06MTAyNEUwMDAwMEUyMTAyMzMwNDRGRkZGMDA4ODEwMkIxMDQwMDAwRTQ0Ci06MTAyNEYwMDAwMEU4MTAyMzNDMDI4MDA4MzQ0NDAxMDAyNDAzMDAwMTVBCi06MTAyNTAwMDAzNDQyMDA4MEE0NDMwMDE2MjQwMkZGRkZBNDgyMDAwRTgwCi06MTAyNTEwMDA5NDg1MDBEQThGODQwMDE0MDAwMDMwMjEzMEE1RkZGRjdECi06MTAyNTIwMDAwQTAwMDhFRDNDMDc2MDIwMDA0NDEwMkExMDQwMDAwOTEyCi06MTAyNTMwMDAzQzAyODAwODM0NDMwMDgwOTQ2MjAwMTYzMDQyMDAwMTVGCi06MTAyNTQwMDAxMDQwMDAwNDNDMDI4MDAwOTQ0MjAwN0UyNDQyMDAxNEFCCi06MTAyNTUwMDBBNDYyMDAxNjAzRTAwMDA4MDAwMDAwMDAyN0JERkZFMEIxCi06MTAyNTYwMDAzQzAyODAwOEFGQkYwMDFDQUZCMDAwMTgzNDQyMDEwMDJECi06MTAyNTcwMDA5NDQzMDA0Mjk0NDIwMDRDMTA0MDAwMTkzMDY4RkZGRjIxCi06MTAyNTgwMDA5MzgzMDAxMDI0MDIwMDAxMTQ2MjAwMjk4RkJGMDAxQ0Y1Ci06MTAyNTkwMDAzQzA2ODAwODM0RDAwMTAwMDAwODEwQzIwMDUwMTAyMTExCi06MTAyNUEwMDA5MDQyMDA1NDMxMDMwMDA3MzRDNzAxNDgzMDQyMDBGRjE1Ci06MTAyNUIwMDAwMDYyMTAwNzMwNDIwMDAxMzRDOTAxNEUzNEM0MDEyQ0JFCi06MTAyNUMwMDAzNEM1MDEzRTEwNDAwMDE2MzRDNjAxNDIwRTAwMDZCRTVFCi06MTAyNUQwMDBBRkE5MDAxMDk2MDIwMDQyMEEwMDA5MzIzMDQ4RkZGRkZFCi06MTAyNUUwMDAzQzAyODAwODM0NDQwMTAwOTQ4MzAwNDQ5NDgyMDA0MkY5Ci06MTAyNUYwMDAxMDQzMDAwRjhGQkYwMDFDOTQ4MjAwNDRBNDgyMDA0MjRECi06MTAyNjAwMDA5NDgyMDA1MEE0ODIwMDRFOEM4MjAwMzhBQzgyMDAzMDRDCi06MTAyNjEwMDA5NDgyMDA0MEE0ODIwMDNFOTQ4MjAwNEFBNDgyMDA0ODMyCi06MTAyNjIwMDA4RkJGMDAxQzhGQjAwMDE4MEEwMDA4RjAyN0JEMDAyMEUzCi06MTAyNjMwMDA4RkIwMDAxODAzRTAwMDA4MjdCRDAwMjAyN0JERkZBMEQxCi06MTAyNjQwMDBBRkIxMDA0QzNDMTE4MDAwQUZCRjAwNThBRkIzMDA1NDk1Ci06MTAyNjUwMDBBRkIyMDA1MEFGQjAwMDQ4MzYyNjAxODg5MEMyMDAwM0U4Ci06MTAyNjYwMDAzMDQ0MDA3RkEzQTQwMDEwOEUzMjAxODA5MEMyMDAwMDhECi06MTAyNjcwMDAzMDQzMDA3RjI0MDIwMDAzMTA2MjAwM0JBRjkyMDAxNDNECi06MTAyNjgwMDAyODYyMDAwNDEwNDAwMDA2MjQwMjAwMDQyNDAyMDAwMjE0Ci06MTAyNjkwMDAxMDYyMDAwOThGQkYwMDU4MEEwMDBBRkI4RkIzMDA1NDc0Ci06MTAyNkEwMDAxMDYyMDA0RDI0MDIwMDA1MTA2MjAxNEU4RkJGMDA1OEQ5Ci06MTAyNkIwMDAwQTAwMEFGQjhGQjMwMDU0MDAwNDExQzAwMjQyMTAyMTJCCi06MTAyNkMwMDAyNDA0RkY4MDI0NDIwMjQwMDA0NDEwMjQyNjQzMDA0MDlBCi06MTAyNkQwMDBBRTIyMDAyNDMwNjMwMDdGM0MwMjgwMEEwMDYyMTgyMTkxCi06MTAyNkUwMDA5MDYyMDAzQ0FGQTMwMDNDMDA0NDEwMjVBMDYyMDAzQzc3Ci06MTAyNkYwMDA4RkEzMDAzQzkwNjIwMDNDMzA0MjAwNDAxMDQwMDE2Q0NGCi06MTAyNzAwMDA4RkJGMDA1ODNDMTA4MDA4QTM4MDAwMTAzNjEwMDEwMEQ1Ci06MTAyNzEwMDA4RTAyMDBEMDhDNjMwMDM0MjdBNDAwM0MyN0E1MDAxMDUzCi06MTAyNzIwMDAwMDQzMTAyMTBFMDAwN0FGQUUwMjAwRDA5M0EyMDAxMEFDCi06MTAyNzMwMDAzQzAzODAwMEEyMDIwMEM1OEM2MjAyNzgwNDQwRkZGRUM4Ci06MTAyNzQwMDA4RjgyMDAxNEFDNjIwMjQwMjQwMjAwMDJBMDYyMDI0NEE0Ci06MTAyNzUwMDAzQzAyMTAwMEFDNjIwMjc4MEUwMDA5MjUwMDAwMDAwMDY3Ci06MTAyNzYwMDAwQTAwMEFGQThGQkYwMDU4M0MwNTgwMDg5MEMzMDAwMTk4Ci06MTAyNzcwMDA5MEEyMDAwQjE0NDMwMTRFOEZCRjAwNTgzNEE0MDA4MDc4Ci06MTAyNzgwMDA4QzgyMDAxODkwODIwMDRDOTBBMjAwMDgzQzAyNjAwMEVECi06MTAyNzkwMDA4QzQyNTQwNDhDODMwMDE4M0MwMjdGRkYzNDQyRkZGRkJDCi06MTAyN0EwMDAwMDYyMTgyNDNDMDIwODAwOEM0MjAwQjRBQzgzMDAxODdDCi06MTAyN0IwMDAzQzAzODAwMDI0NDIwMDAxM0MwMTA4MDBBQzIyMDBCNDJDCi06MTAyN0MwMDA4QzYyMDFGODA0NDBGRkZFOEY4MjAwMTRBQzYyMDFDMEVECi06MTAyN0QwMDAwQTAwMEFDMjI0MDIwMDAyM0MxMDgwMDg5MEMzMDAwMUQzCi06MTAyN0UwMDA5MjAyMDAwQjE0NDMwMTMyOEZCRjAwNTgyN0E0MDAxODM3Ci06MTAyN0YwMDAzNjA1MDExMDI0MDYwMDAzM0MwMjYwMDA4QzQyNTQwNDlDCi06MTAyODAwMDAwRTAwMEUwODAwMDAwMDAwMjdBNDAwMjgzNjA1MDFFMDk1Ci06MTAyODEwMDAwRTAwMEUwODI0MDYwMDAzOEZBMjAwMjgzNjAzMDEwMEQ0Ci06MTAyODIwMDBBRTAyMDA2NDhGQTIwMDJDQUUwMjAwNjg4RkEyMDAzMEJFCi06MTAyODMwMDBBRTAyMDA2QzkzQTQwMDE4OTA2MzAwQzUyNDAyRkY4MEQwCi06MTAyODQwMDAwMDgyMTAyNDAwNDMxMDI1MzA0OTAwRkYzMDg0MDA3RkFGCi06MTAyODUwMDAzMTIyMDA3RjAwODIxMDJBNTQ0MDAwMDEzOTI5MDA4MDczCi06MTAyODYwMDAwMDA0MTFDMDI0NDIwMjQwMjQwM0ZGODAwMjQyMTAyMUQwCi06MTAyODcwMDAwMDQzMTAyNEFFMjIwMDk0MjY0MjAwNDAzMDQyMDA3RkU0Ci06MTAyODgwMDAzQzAzODAwNjAwNDM0MDIxOEZBMzAwMUMyNDAyRkZGRjZECi06MTAyODkwMDBBRkE4MDA0MDNDMTMwODAwOTI3MzAwRjcxMDYyMDAzM0E5Ci06MTAyOEEwMDA5M0EyMDAxOTk1MDMwMDE0MzA0NDAwRkYzMDYzRkZGRjJBCi06MTAyOEIwMDAwMDY0MTgyQjEwNjAwMDEwMDAwMDAwMDA5NTA0MDAxNDQ0Ci06MTAyOEMwMDA4RDA3MDAxQzhEMDYwMDE4MzA4NEZGRkYwMDQ0MjAyMzc0Ci06MTAyOEQwMDAwMDA0MjEwMDAwRTQzODIxMDAwMDEwMjEwMEU0MjAyQjM2Ci06MTAyOEUwMDAwMEMyMzAyMTAwQzQzMDIxQUQwNzAwMUNBRDA2MDAxODI1Ci06MTAyOEYwMDAwQTAwMEExQjkzQTIwMDE5OTUwNDAwMTQ4RDA3MDAxQ0ZFCi06MTAyOTAwMDA4RDA2MDAxODMwODRGRkZGMDA4MjIwMjMwMDA0MjEwMDgwCi06MTAyOTEwMDAwMDAwMTAyMTAwODAxODIxMDBDMjMwMjMwMEU0MjAyQjg5Ci06MTAyOTIwMDAwMEM0MzAyMzAwRTMzODIzQUQwNzAwMUNBRDA2MDAxOEI3Ci06MTAyOTMwMDA5M0EyMDAxOThGQTMwMDQwQTQ2MjAwMTQ5N0EyMDAxQTZBCi06MTAyOTQwMDBBNDYyMDAxNjhGQTIwMDFDQUM2MjAwMTA4RkEyMDAxQ0IzCi06MTAyOTUwMDBBQzYyMDAwQzkzQTIwMDE5QTQ2MjAwMjA5N0EyMDAxQTk2Ci06MTAyOTYwMDBBNDYyMDAyMjhGQTIwMDFDQUM2MjAwMjQzQzA0ODAwOEY4Ci06MTAyOTcwMDAzNDgzMDA4MDhDNjIwMDM4OEZBMjAwMjAwMTIwODgyMURGCi06MTAyOTgwMDBBQzYyMDAzQzhGQTIwMDIwQUM4MjAwMDA5M0EyMDAxODMxCi06MTAyOTkwMDBBMDYyMDA0QzkzQTIwMDE4QTA4MjAwMDlBMDYwMDA2ODA5Ci06MTAyOUEwMDA5M0EyMDAxODEwNTEwMDUxMjQwN0ZGODAzMjI5MDA3RkE0Ci06MTAyOUIwMDAwMDA5MTFDMDI0NDIwMjQwMDI0MjEwMjEzMDQ2MDA3RjJCCi06MTAyOUMwMDAzQzAzODAwMDAwNDcxMDI0QUM2MjAwOTQzQzAyODAwNjY3Ci06MTAyOUQwMDAwMEMyMzAyMTkwQzIwMDNDQUZBNjAwNDAwMDAwMjAyMTgwCi06MTAyOUUwMDAwMDQ3MTAyNUEwQzIwMDNDOEZBODAwNDA5NTAyMDAwMkJECi06MTAyOUYwMDA5NTAzMDAxNDhEMDcwMDFDMzA0MkZGRkYzMDYzRkZGRjdBCi06MTAyQTAwMDA4RDA2MDAxODAwNDMxMDIzMDAwMjExMDAwMEUyMzgyMTU3Ci06MTAyQTEwMDAwMEUyMTAyQjAwQzQzMDIxMDBDMjMwMjFBRDA3MDAxQ0ExCi06MTAyQTIwMDBBRDA2MDAxODk1MDIwMDAyQTUwMjAwMTRBNTAwMDAxNkNDCi06MTAyQTMwMDA4RDAyMDAwOEFEMDIwMDEwOEQwMjAwMDhBRDAyMDAwQ0VFCi06MTAyQTQwMDA5NTAyMDAwMkE1MDIwMDIwQTUwMDAwMjI4RDAyMDAwOEM4Ci06MTAyQTUwMDBBRDAyMDAyNDkxMDIwMDNDMzA0MjAwNDAxMDQwMDAxQUI4Ci06MTAyQTYwMDAyNjIyMDAwMTNDMTA4MDA4QTNBOTAwMzhBMzgwMDAxMDkyCi06MTAyQTcwMDAzNjEwMDEwMDhFMDIwMEQwOEQwMzAwMzQyN0E0MDA0MEUwCi06MTAyQTgwMDAyN0E1MDAzODAwNDMxMDIxMEUwMDA3QUZBRTAyMDBEMDhBCi06MTAyQTkwMDA5M0EyMDAzODNDMDM4MDAwQTIwMjAwQzU4QzYyMDI3ODM5Ci06MTAyQUEwMDAwNDQwRkZGRThGODIwMDE0QUM2MjAyNDAyNDAyMDAwMjQ4Ci06MTAyQUIwMDBBMDYyMDI0NDNDMDIxMDAwQUM2MjAyNzgwRTAwMDkyNUJDCi06MTAyQUMwMDAwMDAwMDAwMDI2MjIwMDAxMzA0MzAwN0YxNDczMDAwNDQwCi06MTAyQUQwMDAwMDQwMjAyMTI0MDNGRjgwMDIyMzEwMjQwMDQzMjAyNkVECi06MTAyQUUwMDA5M0EyMDAxODBBMDAwQTM3MzA5MTAwRkY5M0E0MDAxODNGCi06MTAyQUYwMDA4RkEzMDAxQzI0MDJGRkZGMTA2MjAwMEEzMDg5MDBGRjMwCi06MTAyQjAwMDAyNDgyMDAwMTI0ODMwMDAxMzA0MjAwN0YxNDUzMDAwNTE5Ci06MTAyQjEwMDAzMDY5MDBGRjI0MDNGRjgwMDA4MzEwMjQwMDQzMTAyNjQ3Ci06MTAyQjIwMDAzMDQ5MDBGRjNDMDI4MDA4OTA0MjAwMDgwMTIwODgyMUMzCi06MTAyQjMwMDAzMDUwMDBGRjEyMzAwMDE5MzIyMjAwN0YwMDAyMTFDMDE1Ci06MTAyQjQwMDAwMjQyMTAyMTI0NDIwMjQwMjQwM0ZGODAwMDQzMTgyNDQzCi06MTAyQjUwMDAzQzA0ODAwMEFDODMwMDk0MzA0MjAwN0YzQzAzODAwNjNDCi06MTAyQjYwMDAwMDQzMTAyMThDNDMwMDBDMDA0MDIwMjExMDYwMDAwQjFBCi06MTAyQjcwMDBBRkEyMDA0MDBFMDAwNTZBMDAwMDAwMDAyNjIzMDAwMUZECi06MTAyQjgwMDAyNDA1RkY4MDMwNjIwMDdGMTQ1MzAwMDIwMjI1MjAyNEI4Ci06MTAyQjkwMDAwMDg1MTgyNjBBMDAwQTlCMzA3MTAwRkYzQzA0ODAwODVCCi06MTAyQkEwMDAzNDg0MDA4MDhDODMwMDE4M0MwMjdGRkYzNDQyRkZGRjk2Ci06MTAyQkIwMDAwMDYyMTgyNEFDODMwMDE4M0MwMzgwMDA4QzYyMDFGODhBCi06MTAyQkMwMDAwNDQwRkZGRTAwMDAwMDAwQUM3MjAxQzAyNDAyMDAwMkJECi06MTAyQkQwMDBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjgwQTAwMEFGQUNCCi06MTAyQkUwMDA4RkJGMDA1ODNDMDQ4MDA4OTBDMzAwMDE5MDgyMDAwQjA2Ci06MTAyQkYwMDAxNDQzMDAyRjhGQkYwMDU4MzQ5MDAwODA5MjAyMDAwOEM5Ci06MTAyQzAwMDAzMDQyMDA0MDEwNDAwMDIwMDAwMDAwMDA5MjAyMDAwODA2Ci06MTAyQzEwMDAwMDAyMTYwMDAwMDIxNjAzMDQ0MTAwMDUwMjQwMjAyMUI0Ci06MTAyQzIwMDAwRTAwMEU4RDI0MDUwMDkzMEEwMDBBRkE4RkJGMDA1ODhCCi06MTAyQzMwMDA5MjAyMDAwOTI0MDMwMDE4MzA0MjAwRkYxNDQzMDAwREUzCi06MTAyQzQwMDAwMjQwMjAyMTI0MDUwMDM5MEUwMDBFMjUwMDAwMzAyMTBECi06MTAyQzUwMDAwRTAwMDM0NThGODQwMDE0OEY4MkZGQTgyNDAzMDAxMjA2Ci06MTAyQzYwMDBBMDQzMDAwOTBFMDAwMzUwOEY4NDAwMTQwQTAwMEFGQUUyCi06MTAyQzcwMDA4RkJGMDA1ODI0MDUwMDM2MEUwMDBFMjUwMDAwMzAyMUJECi06MTAyQzgwMDAwQTAwMEFGQThGQkYwMDU4MEUwMDAzNDUwMjQwMjAyMUI3Ci06MTAyQzkwMDA5MjAyMDAwNThGODQwMDE0MzQ0MjAwMjAwRTAwMDM1MDdECi06MTAyQ0EwMDBBMjAyMDAwNTBFMDAxMDM2OEY4NDAwMTQ4RkJGMDA1ODVBCi06MTAyQ0IwMDA4RkIzMDA1NDhGQjIwMDUwOEZCMTAwNEM4RkIwMDA0OERBCi06MTAyQ0MwMDAwM0UwMDAwODI3QkQwMDYwM0MwMjgwMDgzNDQ1MDEwMDk1Ci06MTAyQ0QwMDAzQzAyODAwMDhDNDIwMTQwOTRBMzAwMEUwMDAwMzAyMTkxCi06MTAyQ0UwMDAwMDQwMjAyMUFGODIwMDE0MzA2M0ZGRkYzNDAyRkZGRjU5Ci06MTAyQ0YwMDAxMDYyMDAwNjNDMDc2MDIwMjQwMkZGRkZBNEEyMDAwRTIxCi06MTAyRDAwMDA5NEE1MDBEQTBBMDAwOEVEMzBBNUZGRkYwM0UwMDAwOEYzCi06MTAyRDEwMDAwMDAwMDAwMDI3QkRGRkM4M0MwMjgwMDAzQzA2ODAwODgwCi06MTAyRDIwMDBBRkI1MDAyQ0FGQjEwMDFDQUZCRjAwMzBBRkI0MDAyODZFCi06MTAyRDMwMDBBRkIzMDAyNEFGQjIwMDIwQUZCMDAwMTgzNDUxMDEwMDhGCi06MTAyRDQwMDAzNEM1MDEwMDhDNDMwMTAwOEUyMjAwMTQ4Q0E0MDBENEYxCi06MTAyRDUwMDAwMDAwQTgyMUFGODMwMDE0MDA0NDEwMjMxODQwMDA1MjQzCi06MTAyRDYwMDBBMzgwMDAxMDhFMjIwMDE0MDAwMDUwMjFBQ0EyMDBENEQ5Ci06MTAyRDcwMDA5MEMzMDAwODkwQTIwMEM1MzA3MzAwN0ZBM0EyMDAxMDhBCi06MTAyRDgwMDA4Q0IyMDBEMDhDQjQwMEQ0MzA0MjAwRkYxMDUzMDAzQjEyCi06MTAyRDkwMDA5M0EyMDAxMDhGODMwMDE0MjQwN0ZGODAwMDAyMTFDMDRCCi06MTAyREEwMDAwMDYyMTAyMTI0NDIwMjQwMjQ2MzAwNDAwMDQ3MTAyNEE2Ci06MTAyREIwMDAzMDYzMDA3RjNDMDk4MDAwM0MwODgwMEEwMDY4MTgyMUNECi06MTAyREMwMDBBRDIyMDAyNDhDNjIwMDM0MjdBNDAwMTQyN0E1MDAxMDMzCi06MTAyREQwMDAwMjQyODAyMTAyOTAxMDIzMDQ0MDAwMjhBRkEzMDAxNDc3Ci06MTAyREUwMDA5MDYyMDAzQzAwRTIxMDI0MzA0MjAwRkYxNDQwMDAxOUMxCi06MTAyREYwMDAwMjAwOTAyMTkwNjIwMDNDMzQ0MjAwNDBBMDYyMDAzQ0ZFCi06MTAyRTAwMDA4Rjg2MDAxNDkzQTMwMDEwMjRDMjAwNDAzMDQyMDA3RjNDCi06MTAyRTEwMDAwMDQ4MjgyMTNDMDIwODAwOEM0MjAwRjQyNDYzMDAwMTkxCi06MTAyRTIwMDAzMDY0MDBGRjE0ODIwMDAyQTNBMzAwMTBBM0EwMDAxMENFCi06MTAyRTMwMDA5M0EyMDAxMEFGQTUwMDE0MDAwMjExQzAyNDQyMDI0MDZBCi06MTAyRTQwMDAwMEMyMTAyMTAwNDcxMDI0QUQyMjAwMjQwQTAwMEIzMURCCi06MTAyRTUwMDA5M0EyMDAxMDBFMDAwN0FGMDAwMDAwMDAzQzAyODAwOEEzCi06MTAyRTYwMDAzNDQyMDEwMEFDNTAwMEQwOTNBMzAwMTAyNDBBMDAwMUFBCi06MTAyRTcwMDBBMDQzMDBDNTBBMDAwQjMxOTNBMjAwMTAyNDAyMDAwMUY4Ci06MTAyRTgwMDAxNTQyMDAwOTNDMDM4MDAwOEM2MjAyNzgwNDQwRkZGRTdBCi06MTAyRTkwMDA4RjgyMDAxNEFDNjIwMjQwMjQwMjAwMDJBMDYyMDI0NDRECi06MTAyRUEwMDAzQzAyMTAwMEFDNjIwMjc4OTIyMjAwMEIyNDAzMDAwMjY0Ci06MTAyRUIwMDAzMDQyMDBGRjE0NDMwMDcyMDAwMDAwMDA5NjIyMDAwODE4Ci06MTAyRUMwMDAzMDQzMDBGRjI0MDIwMDgyMTQ2MjAwNDAyNDAyMDA4NDg4Ci06MTAyRUQwMDAzQzAyODAwMDM0NDkwMTAwOEQyMjAwMEM5NTIzMDAwNjNECi06MTAyRUUwMDAwMDAyMTYwMjMwNjNGRkZGMzA0NTAwM0YyNDAyMDAyNzM2Ci06MTAyRUYwMDAxMEEyMDAwRkFGODMwMDBDMjhBMjAwMjgxMDQwMDAwODg5Ci06MTAyRjAwMDAyNDAyMDAzMTI0MDIwMDIxMTBBMjAwMDkyNDAyMDAyNTFECi06MTAyRjEwMDAxMEEyMDAwNzkzODIwMDExMEEwMDBCQTkwMDAwMDAwMDE0Ci06MTAyRjIwMDAxMEEyMDAwNzkzODIwMDExMEEwMDBCQTkwMDAwMDAwMDA0Ci06MTAyRjMwMDAwRTAwMDc2MzAxMjAyMDIxMEEwMDBDMjkwMDAwMDAwMDc4Ci06MTAyRjQwMDAzQzAzODAwMDhDNjIwMjc4MDQ0MEZGRkU4RjgyMDAxNEY0Ci06MTAyRjUwMDBBQzYyMDI0MDI0MDIwMDAyQTA2MjAyNDQzQzAyMTAwMDYzCi06MTAyRjYwMDBBQzYyMDI3ODBBMDAwQzI5MDAwMDAwMDA5NTIzMDAwNkRDCi06MTAyRjcwMDA5MTI0MDAwNThEMjUwMDBDOEQyNjAwMTA4RDI3MDAxODRBCi06MTAyRjgwMDA4RDI4MDAxQzhEMjkwMDIwMjQ0MjAwMDEzQzAxMDgwMEVFCi06MTAyRjkwMDBBNDIzNTJDNjNDMDEwODAwQTAyNDUyQzUzQzAxMDgwMEVECi06MTAyRkEwMDBBQzI1NTJDQzNDMDEwODAwQUMyNjUyRDAzQzAxMDgwMEI0Ci06MTAyRkIwMDBBQzI3NTJEODNDMDEwODAwQUMyODUyREMzQzAxMDgwMDg4Ci06MTAyRkMwMDBBQzI5NTJFMDBBMDAwQzI5QTM4MjAwMTExNDYyMDAwQTA1Ci06MTAyRkQwMDAyNDAyMDA4MTNDMDI4MDA4MzQ0MjAxMDA5NDQ1MDBEQTVBCi06MTAyRkUwMDA5MjI2MDAwNThGODQwMDE0MzBBNUZGRkYzMEM2MDBGRjM1Ci06MTAyRkYwMDAwQTAwMEJFQTNDMDc2MDIxMTQ2MjAwNUMwMDAwMDAwMDNDCi06MTAzMDAwMDA5MjIyMDAwQTMwNDMwMEZGMzA2MjAwMjAxMDQwMDAwNzg3Ci06MTAzMDEwMDAzMDYyMDA0MDNDMDI4MDA4MzQ0MjAxMDA5NDQ1MDBEQUVFCi06MTAzMDIwMDA4Rjg0MDAxNDBBMDAwQkU4MjQwNjAwNDAxMDQwMDAwN0JCCi06MTAzMDMwMDAwMDAzMTYwMDNDMDI4MDA4MzQ0MjAxMDA5NDQ1MDBEQTg3Ci06MTAzMDQwMDA4Rjg0MDAxNDBBMDAwQkU4MjQwNjAwNDEwMDAyMTYwM0Q2Ci06MTAzMDUwMDAwNDQxMDA0NjNDMDI4MDA4MzQ0MjAxMDA5NDQ1MDBEQUY1Ci06MTAzMDYwMDA4Rjg0MDAxNDI0MDYwMDQyMzBBNUZGRkYzQzA3NjAxOTNFCi06MTAzMDcwMDAwRTAwMDhFRDAwMDAwMDAwMEEwMDBDMjkwMDAwMDAwMDBFCi06MTAzMDgwMDA5MjIyMDAwQjI0MDQwMDE2MzA0MjAwRkYxMDQ0MDAwNjc4Ci06MTAzMDkwMDAzQzA2ODAwMDkyMjIwMDBCMjQwMzAwMTczMDQyMDBGRjAwCi06MTAzMEEwMDAxNDQzMDAzMjAwMDAwMDAwMzRDNTAxMDA5MEEyMDAwQjYwCi06MTAzMEIwMDAzMDQyMDBGRjE0NDQwMDBCMDAwMDgwMjE4Q0EyMDAyMDRECi06MTAzMEMwMDA4Q0E0MDAyMDI0MDNGRjgwMDA0MzEwMjQwMDAyMTE0MDQwCi06MTAzMEQwMDAzMDg0MDA3RjAwNDQxMDI1M0MwMzIwMDAwMDQzMTAyNTZECi06MTAzMEUwMDBBQ0MyMDgzMDk0QTIwMDA4MDAwMjE0MDAwMDAyMTQwM0NECi06MTAzMEYwMDAwNDQyMDAwMTI0MTAwMDAxOTRBMjAwMDgzMDQyMDA4MDI0Ci06MTAzMTAwMDA1MDQwMDAxQTAyMDBBODIxOTRBMjAwMDgzMDQyMjAwMDdBCi06MTAzMTEwMDA1MDQwMDAxNjAyMDBBODIxOENBMzAwMTgzQzAyMUMyRDcwCi06MTAzMTIwMDAzNDQyMTlFRDEwNjIwMDExMDIwMEE4MjEzQzAyMDgwMDhGCi06MTAzMTMwMDA4QzQyMDBENDEwNDAwMDA1M0MwMjgwMDgyNDAzMDAwNEE3Ci06MTAzMTQwMDAzNDQyMDEwMEEwNDMwMEVDM0MwMjgwMDgzNDQyMDEwMEZDCi06MTAzMTUwMDA5NDQ1MDBEQThGODQwMDE0MjQwNjAwMDYzMEE1RkZGRjkyCi06MTAzMTYwMDAwRTAwMDhFRDNDMDc2MDIxMDIwMEE4MjEwRTAwMDkyNTkxCi06MTAzMTcwMDAwMDAwMDAwMDkyMjIwMDBBMzA0MjAwMDgxMDQwMDAwNEMzCi06MTAzMTgwMDAwMkEwMTAyMTBFMDAxMzNBMDAwMDAwMDAwMkEwMTAyMTNFCi06MTAzMTkwMDA4RkJGMDAzMDhGQjUwMDJDOEZCNDAwMjg4RkIzMDAyNDcwCi06MTAzMUEwMDA4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMTgwM0UwMDAwODIwCi06MTAzMUIwMDAyN0JEMDAzODI0MDJGRjgwMDA4MjIwMjQzQzAyOTAwMEJBCi06MTAzMUMwMDAzNDQyMDAwNzAwODIyMDI1M0MwMjgwMDBBQzQ0MDAyMEVECi06MTAzMUQwMDAzQzAzODAwMDhDNjIwMDIwMDQ0MEZGRkUwMDAwMDAwMEUxCi06MTAzMUUwMDAwM0UwMDAwODAwMDAwMDAwM0MwMzgwMDAyNDAyRkY4MDkwCi06MTAzMUYwMDAwMDgyMjAyNDM0NjIwMDA3MDA4MjIwMjVBQzY0MDAyMDc1Ci06MTAzMjAwMDA4QzYyMDAyMDA0NDBGRkZFMDAwMDAwMDAwM0UwMDAwODg0Ci06MTAzMjEwMDAwMDAwMDAwMDNDMDI4MDA4MjQwMzAwMDUzNDQyMDEwMDQ1Ci06MTAzMjIwMDBBMDQzMDBFQzNDMDI4MDAwOEM0MjAxMDAzQzAzODAwMDgzCi06MTAzMjMwMDBBRjgyMDAxNDhDNjIwMjc4MDQ0MEZGRkU4RjgyMDAxNDdCCi06MTAzMjQwMDBBQzYyMDI0MDI0MDIwMDAyQTA2MjAyNDQzQzAyMTAwMDcwCi06MTAzMjUwMDBBQzYyMDI3ODAzRTAwMDA4MDAwMDAwMDAyN0JERkZFODMwCi06MTAzMjYwMDAzQzA2ODAwMEFGQkYwMDEwMzRDNzAxMDA5NEUyMDAwOEE0Ci06MTAzMjcwMDAzMDQ0MDBGRjM4ODMwMDgyMzg4MjAwODQyQzYzMDAwMUQwCi06MTAzMjgwMDAyQzQyMDAwMTAwNjIxODI1MTA2MDAwMkQyNDAyMDA4M0VBCi06MTAzMjkwMDA5MzgyMDAxMTUwNDAwMDM2OEZCRjAwMTAzQzAyMDgwMDlFCi06MTAzMkEwMDA5MDQyNTJDQzhDQzQwMTAwM0MwNjA4MDA5NEM2NTJDNjIxCi06MTAzMkIwMDAzMDQ1MDAzRjM4QTMwMDMyMzhBMjAwM0YyQzYzMDAwMUE0Ci06MTAzMkMwMDAyQzQyMDAwMTAwNjIxODI1QUY4NDAwMTRBRjg2MDAwQzY4Ci06MTAzMkQwMDBBMzgwMDAxMTE0NjAwMDA3MDBFMDIwMjEyNDAyMDAyMEQ4Ci06MTAzMkUwMDAxNEEyMDAxMjAwMDAwMDAwMzQwMkZGRkYxNEMyMDAwRkZECi06MTAzMkYwMDAwMDAwMDAwMDI0MDIwMDIwMTRBMjAwMDUwMEUwMjgyMUE0Ci06MTAzMzAwMDA4Q0UzMDAxNDI0MDJGRkZGNTA2MjAwMEI4RkJGMDAxMEZCCi06MTAzMzEwMDAzQzA0MDgwMDI0ODQ1MkMwMDAwMDMwMjEwRTAwMDZGMjU0Ci06MTAzMzIwMDAyNDA3MDAwMTBBMDAwQzlDOEZCRjAwMTAwRTAwMDc2M0U5Ci06MTAzMzMwMDAwMDAwMDAwMDhGQkYwMDEwMEEwMDA5MjUyN0JEMDAxOEZCCi06MTAzMzQwMDAxNDgyMDAwNjI0ODJGRjgwOENDMzAxMDQzQzAyNjAyMEFBCi06MTAzMzUwMDBBQzQzMDAxNDBBMDAwQ0QyOEZCRjAwMTAzMDQyMDBGRkIzCi06MTAzMzYwMDAyQzQyMDAwMjEwNDAwMDA0MjQwMjAwMjI4RkJGMDAxMEYzCi06MTAzMzcwMDAwQTAwMEIxMzI3QkQwMDE4MTQ4MjAwMDQ4RjgyMDAxQzYyCi06MTAzMzgwMDA4RkJGMDAxMDBBMDAwQzUzMjdCRDAwMTg4QzQyMDAwQ0EwCi06MTAzMzkwMDAxMDQwMDAxRTAwRTAyODIxOTBFMzAwMDkyNDAyMDAxOERDCi06MTAzM0EwMDAxNDYyMDAwMzI0MDIwMDE2MEEwMDBDQkQyNDAzMDAwODY2Ci06MTAzM0IwMDAxNDYyMDAwNzI0MDIwMDE3MjQwMzAwMTIzQzAyODAwODU0Ci06MTAzM0MwMDAzNDQyMDA4MEEwNDMwMDA5MEEwMDBDQ0E5NEE3MDAwOEY4Ci06MTAzM0QwMDA1NDYyMDAwNzk0QTcwMDA4OEY4MkZGQTgyNDA0RkZGRTEwCi06MTAzM0UwMDA5MDQzMDAwNTAwNjQxODI0QTA0MzAwMDU5NEE3MDAwODNBCi06MTAzM0YwMDA5MEE2MDAxQjhDQTQwMDAwOTRBNTAwMDY4RkJGMDAxMEFGCi06MTAzNDAwMDAwMDA3M0MwMDBBMDAwOEM4MjdCRDAwMTg4RkJGMDAxMDQ1Ci06MTAzNDEwMDAwM0UwMDAwODI3QkQwMDE4OEY4NTAwMUMzQzA0ODAwMEQ1Ci06MTAzNDIwMDA5NEEyMDAyQThDQTMwMDM0MDAwMjMwQzAyNDAyRkZGMEQyCi06MTAzNDMwMDAwMEMyMTAyNDAwNjIxODIxQUM4MzAwM0M4Q0EyMDAzMDMyCi06MTAzNDQwMDAzQzAzODAwMEFDODIwMDM4M0MwMjAwNTAzNDQyMDAxMDQzCi06MTAzNDUwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCi06MTAzNDYwMDA4QzYyMDAwMDMwNDIwMDIwMTA0MEZGRkQzMEMyMDAwODk2Ci06MTAzNDcwMDAxMDQwMDAwNjNDMDI4MDAwOEM2MjA0MDhBQ0EyMDAyMEQwCi06MTAzNDgwMDA4QzYyMDQwQzBBMDAwQ0Y1QUNBMjAwMjQ4QzQzMDQwMEVFCi06MTAzNDkwMDBBQ0EzMDAyMDhDNDIwNDA0QUNBMjAwMjQzQzAzMDAyMDE2Ci06MTAzNEEwMDAzQzAyODAwMEFDNDMwMDMwM0MwNDgwMDA4QzgyMDAzMDQxCi06MTAzNEIwMDAwMDQzMTAyNDE0NDBGRkZEOEY4NjAwMUMzQzAyMDA0MDk2Ci06MTAzNEMwMDBBQzgyMDAzMDk0QzMwMDJBOTRDMjAwMjg5NEM0MDAyQzFCCi06MTAzNEQwMDA5NEM1MDAyRTI0NjMwMDAxMDA0NDEwMjEzMDY0RkZGRkQ2Ci06MTAzNEUwMDBBNEMyMDAyODE0ODUwMDAyQTRDMzAwMkFBNEMwMDAyQTk0Ci06MTAzNEYwMDAwM0UwMDAwODAwMDAwMDAwOEY4NDAwMUMyN0JERkZFOEU3Ci06MTAzNTAwMDAzQzA1ODAwNDI0ODQwMDEwQUZCRjAwMTAwRTAwMEUwODlDCi06MTAzNTEwMDAyNDA2MDAwQThGODQwMDFDOTQ4MjAwMTI5NDgzMDAyRURCCi06MTAzNTIwMDAzMDQyMDAwRjI0NDIwMDAzMDA0MzE4MDQyNDAyN0ZGRkFFCi06MTAzNTMwMDAwMDQzMTAyQjEwNDAwMDAyQUM4MzAwMDAwMDAwMDAwRDdGCi06MTAzNTQwMDAwRTAwMENENDAwMDAwMDAwOEY4MzAwMUM4RkJGMDAxMDAxCi06MTAzNTUwMDAyN0JEMDAxODk0NjIwMDE0OTQ2MzAwMUEzMDQyMDAwRkQzCi06MTAzNTYwMDAwMDAyMTUwMDAwNjIxODI1M0MwMjgwMDAwM0UwMDAwOEZDCi06MTAzNTcwMDBBQzQzMDBBMDhGODMwMDFDM0MwMjgwMDQ5NDQ0MDAwNkVFCi06MTAzNTgwMDA5NDYyMDAxQThDNjUwMDAwQTQ2NDAwMTYwMDQ0MTAyM0E1Ci06MTAzNTkwMDAzMDQyRkZGRjAwNDUxMDJCMDNFMDAwMDgzODQyMDAwMUQ1Ci06MTAzNUEwMDA4Rjg0MDAxQzNDMDc4MDA0OTQ4NjAwMUE4Qzg1MDAwMEUwCi06MTAzNUIwMDA5NEUyMDAwNkE0ODIwMDE2OTRFMzAwMDYwMEMzMTAyM0UwCi06MTAzNUMwMDAzMDQyRkZGRjAwNDUxMDJCMzg0MjAwMDExNDQwRkZGODQ1Ci06MTAzNUQwMDBBNDgzMDAxNjAzRTAwMDA4MDAwMDAwMDA4Rjg0MDAxQzk0Ci06MTAzNUUwMDAzQzAyODAwNDk0NDIwMDA2OTQ4MzAwMUE4Qzg1MDAwMEZCCi06MTAzNUYwMDBBNDgyMDAxNjAwNjIxMDIzMzA0MkZGRkYwMDQ1MTAyQjBBCi06MTAzNjAwMDAzODQyMDAwMTUwNDAwMDBEOEY4NTAwMUMwMDYwMzAyMUMxCi06MTAzNjEwMDAzQzA3ODAwNDk0RTIwMDA2QTQ4MjAwMTY5NEUzMDAwNkFFCi06MTAzNjIwMDAwMEMzMTAyMzMwNDJGRkZGMDA0NTEwMkIzODQyMDAwMTM5Ci06MTAzNjMwMDAxNDQwRkZGOEE0ODMwMDE2OEY4NTAwMUMzQzAzODAwMDEzCi06MTAzNjQwMDAzNDYyMDQwMDhDQTQwMDIwQUY4MjAwMThBQzY0MDAzOEZGCi06MTAzNjUwMDA4Q0EyMDAyNEFDNjIwMDNDM0MwMjAwMDVBQzYyMDAzMDRECi06MTAzNjYwMDAwM0UwMDAwOEFDQTAwMDA0OEY4NDAwMUMzQzAzMDAwNkFCCi06MTAzNjcwMDA4QzgyMDAwNDAwMDIxMTQwMDA0MzEwMjUzQzAzODAwMEFFCi06MTAzNjgwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCi06MTAzNjkwMDA4QzYyMDAwMDMwNDIwMDEwMTA0MEZGRkQzNDYyMDQwMEQ0Ci06MTAzNkEwMDBBQzgwMDAwNDAzRTAwMDA4QUY4MjAwMTg4Rjg2MDAxQzg1Ci06MTAzNkIwMDAyN0JERkZFMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxOERFCi06MTAzNkMwMDA4Q0MzMDAwNDhDQzUwMDI0OEY4MjAwMTgzMDkwMDBGRjRBCi06MTAzNkQwMDA5NEM0MDAxQTI0NjMwMDAxMjQ0MjAwMjAyNDg0MDAwMUMxCi06MTAzNkUwMDAyNEE3MDAyMEFDQzMwMDA0QUY4MjAwMThBNEM0MDAxQUIxCi06MTAzNkYwMDBBQ0M3MDAyNDA0QTEwMDA2MDAwMDg4MjEwNEUyMDAwNUY0Ci06MTAzNzAwMDA5NEMyMDAxQThDQzIwMDIwMjQ0MjAwMDFBQ0MyMDAyMEU2Ci06MTAzNzEwMDA5NEMyMDAxQTk0QzMwMDI4MkUwNDAwMDEwMDQzMTAyNjBFCi06MTAzNzIwMDAyQzQyMDAwMTAwNDQxMDI0NTA0MDAwMDU5NEMyMDAxQUFECi06MTAzNzMwMDAyNDAyMDAwMUFDQzIwMDA4OTRDMjAwMUE5NEMzMDAyOEZECi06MTAzNzQwMDAwMDEwMjAyQjAwNDMxMDI2MkM0MjAwMDEwMDQ0MTAyNUJECi06MTAzNzUwMDAxNDQwMDAwNzAwMDAwMDAwOENDMjAwMDgxNDQwMDAwNDYwCi06MTAzNzYwMDAyNDAyMDAxMDhDQzMwMDA0MTQ2MjAwMEY4Rjg1MDAxQzFCCi06MTAzNzcwMDAwRTAwMEQ2ODI0MTEwMDAxOEY4MjAwMUM5NDQzMDAyODY0Ci06MTAzNzgwMDA5NDQyMDAxQTE0NDMwMDAzMDAwMDAwMDAwRTAwMENENDAxCi06MTAzNzkwMDAwMDAwMDAwMDE2MDAwMDA0OEY4NTAwMUMwRTAwMEQ0NTdGCi06MTAzN0EwMDAwMDAwMDAwMDhGODUwMDFDOTRBMjAwMUU5NEE0MDAxQzQxCi06MTAzN0IwMDAyNDQyMDAwMTMwNDNGRkZGMTQ2NDAwMDJBNEEyMDAxRTUzCi06MTAzN0MwMDBBNEEwMDAxRTEyMDAwMDBBM0MwMjgwMDQ5NEEyMDAxNDZGCi06MTAzN0QwMDA5NEEzMDAxQTMwNDIwMDBGMDAwMjE1MDAwMDYyMTgyNTYxCi06MTAzN0UwMDAzQzAyODAwMEFDNDMwMEEwMEEwMDBEREZBQ0EwMDAwODQyCi06MTAzN0YwMDA5NDQyMDAwNjk0QTMwMDFBOENBNDAwMDBBNEEyMDAxNjEwCi06MTAzODAwMDAwMDYyMTAyMzMwNDJGRkZGMDA0NDEwMkIzODQyMDAwMUI5Ci06MTAzODEwMDAxMDQwMDAwRDAyMjAxMDIxMDA2MDMwMjEzQzA3ODAwNDgwCi06MTAzODIwMDA5NEUyMDAwNkE0QTIwMDE2OTRFMzAwMDYwMEMzMTAyMzRECi06MTAzODMwMDAzMDQyRkZGRjAwNDQxMDJCMzg0MjAwMDExNDQwRkZGOEQzCi06MTAzODQwMDBBNEEzMDAxNjAyMjAxMDIxOEZCRjAwMTg4RkIxMDAxNDBFCi06MTAzODUwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAwM0UwMDAwODNGCi06MTAzODYwMDAwMDAwMDAwMDhGODIwMDI0M0MwMzAwMDYwMDAyMTE0MDhCCi06MTAzODcwMDAwMDQzMTAyNTNDMDM4MDAwQUM2MjAwMzAwMDAwMDAwMEQzCi06MTAzODgwMDAwMDAwMDAwMDAwMDAwMDAwOEM2MjAwMDAzMDQyMDAxMEM4Ci06MTAzODkwMDAxMDQwRkZGRDM0NjIwNDAwQUY4MjAwMjAwM0UwMDAwODA2Ci06MTAzOEEwMDBBRjgwMDAyNDAzRTAwMDA4MDAwMDEwMjEwM0UwMDAwOEJFCi06MTAzOEIwMDAwMDAwMDAwMDMwODRGRkZGMzBBNUZGRkYwMDAwMTgyMTRBCi06MTAzOEMwMDAxMDgwMDAwNzAwMDAwMDAwMzA4MjAwMDExMDQwMDAwMjVDCi06MTAzOEQwMDAwMDA0MjA0MjAwNjUxODIxMEEwMDBERkUwMDA1Mjg0MDYyCi06MTAzOEUwMDAwM0UwMDAwODAwNjAxMDIxMTBDMDAwMDYyNEM2RkZGRjlFCi06MTAzOEYwMDA4Q0EyMDAwMDI0QTUwMDA0QUM4MjAwMDAwQTAwMEUwODdGCi06MTAzOTAwMDAyNDg0MDAwNDAzRTAwMDA4MDAwMDAwMDAxMEEwMDAwODY4Ci06MTAzOTEwMDAyNEEzRkZGRkFDODYwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MTAzOTIwMDAyNDAyRkZGRjI0NjNGRkZGMTQ2MkZGRkEyNDg0MDAwNEQzCi06MTAzOTMwMDAwM0UwMDAwODAwMDAwMDAwM0MwMjgwMDgzNDQyMDA4MEUwCi06MTAzOTQwMDAyNDAzMDAwMUFDNDMwMDBDQTQ0MzAwMTBBNDQzMDAxMjY0Ci06MTAzOTUwMDBBNDQzMDAxNDAzRTAwMDA4QTQ0MzAwMTY4RjgyMDAxQzU3Ci06MTAzOTYwMDAyN0JERkZEOEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNDMxCi06MTAzOTcwMDBBRkIwMDAxMEFGQkYwMDIwOEM0NzAwMEMyNDgyMDA4MDQ1Ci06MTAzOTgwMDAyNDA5RkY4MDNDMDg4MDBFMzA0MzAwN0YwMDgwODAyMUE2Ci06MTAzOTkwMDAzQzBBODAwMDAwNDkyMDI0MDA2ODE4MjEzMEIxMDBGRjUzCi06MTAzOUEwMDAzMEQyMDBGRjEwRTAwMDI5MDAwMDk4MjEyNjAyMDEwMDFCCi06MTAzOUIwMDBBRDQ0MDAyQzAwNDkyODI0MzA0MjAwN0YwMDQ4MjAyMURCCi06MTAzOUMwMDA5MDYyMDAwMDI0MDMwMDUwMzA0MjAwRkYxNDQzMDAwNEMyCi06MTAzOUQwMDAwMDAwMDAwMEFENDUwMDJDOTQ4MjAwREEzMDUzRkZGRjU4Ci06MTAzOUUwMDAwRTAwMEQ0NTAwMDAwMDAwOEY4MjAwMUM4RjgzMDAxODIwCi06MTAzOUYwMDAwMDExMkMwMDk0NDIwMDFFMDAxMjI0MDAzNDg0MDAwMUE3Ci06MTAzQTAwMDAwMEEyMjgyNTNDMDI0MDAwMDBBMjI4MjVBQzcwMDAwMDNFCi06MTAzQTEwMDA4RkJGMDAyMEFDNjAwMDA0OEZCMjAwMThBQzczMDAwOEE4Ci06MTAzQTIwMDA4RkIxMDAxNEFDNjAwMDBDOEZCMzAwMUNBQzY0MDAxMEFDCi06MTAzQTMwMDA4RkIwMDAxMEFDNjAwMDE0MjQwNDAwMDFBQzYwMDAxOENBCi06MTAzQTQwMDAyN0JEMDAyODBBMDAwRDc5QUM2NTAwMUM4RkJGMDAyMDNGCi06MTAzQTUwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDBDCi06MTAzQTYwMDAwM0UwMDAwODI3QkQwMDI4M0MwNjgwMDAzNEMyMDEwMEE2Ci06MTAzQTcwMDA5MDQzMDAwRjI0MDIwMDEwMTA2MjAwMEUyODY1MDAxMTEwCi06MTAzQTgwMDAxMEEwMDAwNzI0MDIwMDEyMjQwMjAwMDgyNDA1MDAzQUI2Ci06MTAzQTkwMDAxMDYyMDAwNjAwMDAzMDIxMDNFMDAwMDgwMDAwMDAwMDcyCi06MTAzQUEwMDAyNDA1MDAzNTE0NjJGRkZDMDAwMDMwMjEwQTAwMEUyNUI5Ci06MTAzQUIwMDAwMDAwMDAwMDhDQzIwMDc0OEY4M0ZGQTgyNDQyMEZBMDc2Ci06MTAzQUMwMDAwM0UwMDAwOEFDNjIwMDBDMjdCREZGRThBRkJGMDAxMEE4Ci06MTAzQUQwMDAwRTAwMDM1NTI0MDUwMDAxM0MwNDgwMDg4RkJGMDAxMDMwCi06MTAzQUUwMDAyNDAyMDAwMTM0ODMwMDgwQTQ2MjAwMTIyN0JEMDAxODY0Ci06MTAzQUYwMDAyNDAyMDAwMTAzRTAwMDA4QTA4MDAwMUEyN0JERkZFMEI3Ci06MTAzQjAwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQ0NGCi06MTAzQjEwMDAzMEIyRkZGRjBFMDAwMzQ1MDA4MDg4MjEzQzAyODAwODgwCi06MTAzQjIwMDAzNDUwMDA4MDkyMDIwMDA5MjQwMzAwMDQzMDQyMDBGRjU4Ci06MTAzQjMwMDAxNDQzMDAwQzNDMDI4MDA4MTI0MDAwMDgyNDAyMDAwQUQyCi06MTAzQjQwMDAwRTAwMEUxQzAwMDAwMDAwOTIwMjAwMDUyNDAzRkZGRTgwCi06MTAzQjUwMDAwMDQzMTAyNEEyMDIwMDA1MjQwMjAwMTJBMjAyMDAwOTYwCi06MTAzQjYwMDAzQzAyODAwODM0NDIwMDgwMDIyMDIwMjEwRTAwMDM1MEQ1Ci06MTAzQjcwMDBBMDQwMDAyNzE2NDAwMDAzMDIyMDIwMjEwRTAwMEU4MEU2Ci06MTAzQjgwMDAwMDAwMDAwMDAyMjAyMDIxMzI0NjAwRkY4RkJGMDAxQ0YxCi06MTAzQjkwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA1MDAzOEM4Ci06MTAzQkEwMDAwQTAwMEUyNTI3QkQwMDIwMjdCREZGRTBBRkJGMDAxQzg3Ci06MTAzQkIwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTAwRTAwMDM0NTUzCi06MTAzQkMwMDAwMDgwODAyMTBFMDAwRTFDMDAwMDAwMDAzQzAyODAwOEQ2Ci06MTAzQkQwMDAzNDQ1MDA4MDkwQTIwMDA5MjQxMjAwMTgzMDUxMDBGRkUzCi06MTAzQkUwMDAxMjMyMDAwMzAyMDAyMDIxMjQwMjAwMTJBMEEyMDAwOUM4Ci06MTAzQkYwMDA5MEEyMDAwNTI0MDNGRkZFMDA0MzEwMjQwRTAwMDM1MDkyCi06MTAzQzAwMDBBMEEyMDAwNTAyMDAyMDIxMjQwNTAwMjAxNjMyMDAwNzkyCi06MTAzQzEwMDAwMDAwMzAyMThGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDNDCi06MTAzQzIwMDA4RkIwMDAxMDBBMDAwMzU1MjdCRDAwMjA4RkJGMDAxQzc1Ci06MTAzQzMwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA1MDAzOTI2Ci06MTAzQzQwMDAwQTAwMEUyNTI3QkQwMDIwMjdCREZGRTgzQzAyODAwMEFBCi06MTAzQzUwMDBBRkIwMDAxMEFGQkYwMDE0MzQ0MjAxMDA5NDQyMDAwQzFBCi06MTAzQzYwMDAyNDA1MDAzNjAwODA4MDIxMTQ0MDAwMTIzMDQ2MDBGRkY5Ci06MTAzQzcwMDAwRTAwMDM0NTAwMDAwMDAwM0MwMjgwMDgzNDQyMDA4MDMyCi06MTAzQzgwMDAyNDAzMDAxMkEwNDMwMDA5OTA0MzAwMDUzNDYzMDAxMDkwCi06MTAzQzkwMDAwRTAwMEUxQ0EwNDMwMDA1MEUwMDAzNTAwMjAwMjAyMTYwCi06MTAzQ0EwMDAwMjAwMjAyMTBFMDAwMzU1MjQwNTAwMjAwQTAwMEVGRDBECi06MTAzQ0IwMDAwMDAwMDAwMDBFMDAwRTI1MDAwMDAwMDAwRTAwMDM0NTZECi06MTAzQ0MwMDAwMjAwMjAyMTNDMDI4MDA4OTA0MzAwMUIyNDA1RkY5RjM2Ci06MTAzQ0QwMDAwMjAwMjAyMTAwNjUxODI0OEZCRjAwMTQ4RkIwMDAxMDRGCi06MTAzQ0UwMDBBMDQzMDAxQjBBMDAwMzUwMjdCRDAwMTgyN0JERkZFMEJBCi06MTAzQ0YwMDBBRkJGMDAxOEFGQjEwMDE0QUZCMDAwMTAzMEIxMDBGRjdCCi06MTAzRDAwMDAwRTAwMDM0NTAwODA4MDIxM0MwMjgwMDgyNDAzMDAxMjNECi06MTAzRDEwMDAzNDQyMDA4MDBFMDAwRTFDQTA0MzAwMDkwRTAwMDM1MDI4Ci06MTAzRDIwMDAwMjAwMjAyMTAyMDAyMDIxMDIyMDMwMjE4RkJGMDAxODM0Ci06MTAzRDMwMDA4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzUwQTAwMEUyNTQ1Ci06MTAzRDQwMDAyN0JEMDAyMDNDMDQ4MDA4OTA4MzAwMEU5MDgyMDAwQTZBCi06MTAzRDUwMDAxNDQzMDAwQjAwMDAyODIxOEY4MkZGQTgyNDAzMDA1MDg5Ci06MTAzRDYwMDAyNDA1MDAwMTkwNDIwMDAwMzA0MjAwRkYxNDQzMDAwNDhCCi06MTAzRDcwMDAwMDAwMDAwMDkwODIwMDBFMjQ0MjAwMDFBMDgyMDAwRThDCi06MTAzRDgwMDAwM0UwMDAwODAwQTAxMDIxM0MwMzgwMDA4QzYyMDFGOEQxCi06MTAzRDkwMDAwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzBBMDYyMDFDNDIyCi06MTAzREEwMDAzQzAyMTAwMDAzRTAwMDA4QUM2MjAxRjgyN0JERkZFMDEwCi06MTAzREIwMDBBRkIyMDAxODNDMTI4MDA4QUZCMTAwMTRBRkJGMDAxQ0I2Ci06MTAzREMwMDBBRkIwMDAxMDM2NTEwMDgwOTIyMjAwMDkyNDAzMDAwQThGCi06MTAzREQwMDAzMDQyMDBGRjE0NDMwMDNFMDAwMDAwMDA4RTQzMDAwNDA4Ci06MTAzREUwMDA4RTIyMDAzODUwNjIwMDgwOEZCRjAwMUM5MjIyMDAwMDlCCi06MTAzREYwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMjUzQzAyODAwMEExCi06MTAzRTAwMDA4QzQyMDE0MDhFNDMwMDA0MzY0MjAxMDAwMjIwMjgyMUVBCi06MTAzRTEwMDBBQzQzMDAxQzk2MjIwMDVDOEUyMzAwMzgzMDQyRkZGRjJBCi06MTAzRTIwMDAwMDAyMTA0MDAwNjIxODIxQUUyMzAwMUM4RTQzMDAwNEUzCi06MTAzRTMwMDA4RTI0MDAzODk2MjIwMDVDMDA2NDE4MjMzMDQyRkZGRjc1Ci06MTAzRTQwMDAwMDAzMTg0MzAwMDIxMDQwMDA0MzEwMkExMDQwMDAwNkVGCi06MTAzRTUwMDAwMDAwMDAwMDhFNDIwMDA0OEUyMzAwMzgwMDQzMTAyMzJGCi06MTAzRTYwMDAwQTAwMEY2QjAwMDIyMDQzOTYyMjAwNUMzMDQyRkZGRkU1Ci06MTAzRTcwMDAwMDAyMjA0MDNDMDI4MDA4MzQ0MzAxMDAzNDQyMDA4MEFDCi06MTAzRTgwMDBBQ0E0MDAyQ0EwNDAwMDI0MjQwMjAwMDFBMDYyMDAwQzdECi06MTAzRTkwMDAwRTAwMEYxRjAwMDAwMDAwMTA0MDAwNTM4RkJGMDAxQ0Q5Ci06MTAzRUEwMDAzQzAyODAwMDhDNDQwMTQwM0MwMzgwMDA4QzYyMDFGODlECi06MTAzRUIwMDAwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzBBMDYyMDFDNDAxCi06MTAzRUMwMDAzQzAyMTAwMEFDNjIwMUY4MEEwMDBGQzg4RkJGMDAxQzUyCi06MTAzRUQwMDA5MjIyMDAwOTI0MDMwMDEwMzA0MjAwRkYxNDQzMDAwNDIyCi06MTAzRUUwMDAzQzAyODAwMDhDNDQwMTQwMEEwMDBGQUYwMDAwMjgyMUYyCi06MTAzRUYwMDA5MjIyMDAwOTI0MDMwMDE2MzA0MjAwRkYxNDQzMDAwNkZBCi06MTAzRjAwMDAyNDAyMDAxNEEyMjIwMDA5M0MwMjgwMDA4QzQ0MDE0MERCCi06MTAzRjEwMDAwQTAwMEZDMjhGQkYwMDFDOEUyMjAwMzg4RTIzMDAzQzg3Ci06MTAzRjIwMDAwMDQzMTAyMzA0NDEwMDMwOEZCRjAwMUM5MjIyMDAyNzYxCi06MTAzRjMwMDAyNDQyMDAwMUEyMjIwMDI3OTIyMjAwMjcyQzQyMDAwNEUyCi06MTAzRjQwMDAxNDQwMDAxNjNDMTA4MDAwOTIyMjAwMDkyNDAzMDAwNDUzCi06MTAzRjUwMDAzMDQyMDBGRjE0NDMwMDA5M0MwMjgwMDA4QzQ0MDE0MEMxCi06MTAzRjYwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEVCCi06MTAzRjcwMDAyNDA1MDA5MzBBMDAwRThEMjdCRDAwMjA4QzQ0MDE0MENCCi06MTAzRjgwMDAyNDA1MDA5MzhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDVFCi06MTAzRjkwMDA4RkIwMDAxMDBBMDAwRjA5MjdCRDAwMjA4RTA0MDE0MEQ5Ci06MTAzRkEwMDAwRTAwMDM0NTAwMDAwMDAwOEU0MjAwMDQyNDQyRkZGRjgzCi06MTAzRkIwMDBBRTQyMDAwNDhFMjIwMDNDMjQ0MkZGRkZBRTIyMDAzQ0IxCi06MTAzRkMwMDAwRTAwMDM1MDhFMDQwMTQwOEUwNDAxNDA4RkJGMDAxQzgwCi06MTAzRkQwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA1MDAwNEI4Ci06MTAzRkUwMDAwQTAwMDM1NTI3QkQwMDIwOEZCMjAwMTg4RkIxMDAxNEJFCi06MTAzRkYwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAzQzA2ODAwMEMxCi06MTA0MDAwMDA4Q0MyMDE4ODNDMDM4MDA4MzQ2NTAwODA5MDYzMDAwRUY4Ci06MTA0MDEwMDAwMDAyMTQwMjMwNDQwMEZGMzA2MzAwRkYxNDY0MDAwRUZECi06MTA0MDIwMDAzQzAyODAwODkwQTIwMDI2MzA0MjAwRkYxMDQ0MDAwOUE0Ci06MTA0MDMwMDA4RjgyRkZBOEEwQTQwMDI2MjQwMzAwNTA5MDQyMDAwMDE1Ci06MTA0MDQwMDAzMDQyMDBGRjE0NDMwMDA2MDAwMDAwMDAwQTAwMDU4RDA2Ci06MTA0MDUwMDA4Q0M0MDE4MDNDMDI4MDA4MzQ0MjAwODBBMDQ0MDAyNkM5Ci06MTA0MDYwMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRTAzMEU3MDBGRjhDCi06MTA0MDcwMDBBRkIyMDAxOEFGQkYwMDFDQUZCMTAwMTRBRkIwMDAxMDVBCi06MTA0MDgwMDAwMDgwOTAyMTE0RTAwMDA2MzBDNjAwRkYwMDAwMDAwMDEwCi06MTA0MDkwMDAwMDAwMDAwRDAwMDAwMDAwMEEwMDEwMjEyNDAwMDEwRUE1Ci06MTA0MEEwMDAzQzAzODAwODkwNjIwMDBFMzA0MjAwRkYxNDQ2MDAyMzVCCi06MTA0MEIwMDAzNDYyMDA4MDkwNDIwMDI2MzA0MjAwRkYxNDQ2MDAxRjA4Ci06MTA0MEMwMDAwMDAwMDAwMDkwNjIwMDBGMzA0MjAwRkYxNDQ2MDAxQjA5Ci06MTA0MEQwMDAwMDAwMDAwMDkwNjIwMDBBMzA0MjAwRkYxNDQ2MDAwMzE2Ci06MTA0MEUwMDA4RjkwRkZBODAwMDAwMDBEOEY5MEZGQTg4RjgyRkZBQzdCCi06MTA0MEYwMDAzQzExODAwMEFFMDUwMDNDQUM0NTAwMDBBMDY2MDAwQTAzCi06MTA0MTAwMDAwRTAwMDM0NThFMjQwMTAwQTIwMDAwMjQwRTAwMDM1MDdGCi06MTA0MTEwMDA4RTI0MDEwMDNDMDM4MDAwOEM2MjAxRjgwNDQwRkZGRTA1Ci06MTA0MTIwMDAyNDAyMDAwMkFDNzIwMUMwQTA2MjAxQzQzQzAyMTAwMDczCi06MTA0MTMwMDBBQzYyMDFGODBBMDAxMDIyOEZCRjAwMUMwMDAwMDAwMEQyCi06MTA0MTQwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAxMzc4RkJGMDAxQzlDCi06MTA0MTUwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODc4Ci06MTA0MTYwMDAyN0JEMDAyMDhGODNGRkE4M0MwMjgwMDA4QzQ0MDEwMDAzCi06MTA0MTcwMDAzNDQyMDEwMDhDNjUwMDNDOTA0NjAwMUIwQTAwMEZFOEE5Ci06MTA0MTgwMDAyNDA3MDAwMTNDMDI4MDA4OTA0MzAwMEU5MDQyMDAwQTgwCi06MTA0MTkwMDAwMDQzMTAyNjMwNDIwMEZGMDNFMDAwMDgwMDAyMTAyQjBECi06MTA0MUEwMDAyN0JERkZFMDNDMDI4MDA4QUZCMTAwMTRBRkIwMDAxMEEzCi06MTA0MUIwMDBBRkJGMDAxODM0NTAwMDgwOTIwMjAwMDUyNDAzMDAzMDg1Ci06MTA0MUMwMDAzMDQyMDAzMDE0NDMwMDg1MDA4MDg4MjE4RjgyMDAxQzFCCi06MTA0MUQwMDA4QzQyMDAwQzEwNDAwMDgyOEZCRjAwMTgwRTAwMEQ0NTZECi06MTA0MUUwMDAwMDAwMDAwMDhGODYwMDE4QUNEMTAwMDA5MjAyMDAwODg5Ci06MTA0MUYwMDA5MjAzMDAwOTMwNDIwMEZGMDAwMjEyMDAzMDYzMDBGRjBBCi06MTA0MjAwMDAwMDQzMTAyNUFDQzIwMDA0OTIwMjAwNEQwMDAyMTYwMENCCi06MTA0MjEwMDAwMDAyMTYwMzA0NDEwMDA1MDAwMDAwMDAzQzAzMDgwMEYyCi06MTA0MjIwMDA4QzYzMDA0ODBBMDAxMDYwM0MxMDgwMDg5MjAyMDAwODZECi06MTA0MjMwMDAzMDQyMDA0MDE0NDAwMDAzMDAwMDE4MjE5MjAyMDAyNzgxCi06MTA0MjQwMDAzMDQzMDBGRjNDMTA4MDA4MzYxMTAwODA5MjIyMDA0RDYwCi06MTA0MjUwMDAwMDAzMUUwMDMwNDIwMEZGMDAwMjE0MDAwMDYyMTgyNTE3Ci06MTA0MjYwMDBBQ0MzMDAwODhFMjQwMDMwOEY4MjAwMUNBQ0M0MDAwQzRDCi06MTA0MjcwMDA4RTI1MDAzNDk0NDMwMDFFM0MwMkMwMEJBQ0M1MDAxMEQ4Ci06MTA0MjgwMDAwMDYyMTgyNThFMjIwMDM4MDAwMDIwMjFBQ0MyMDAxNEU0Ci06MTA0MjkwMDA4RTIyMDAzQ0FDQzIwMDE4MEUwMDBENzlBQ0MzMDAxQzhECi06MTA0MkEwMDA4RTAyMDAwNDhGODQwMDE4M0MwNTgwMDBBQzgyMDAwMDYwCi06MTA0MkIwMDA4RTIyMDAyMEFDODIwMDA0OEUyMjAwMUNBQzgyMDAwOEZBCi06MTA0MkMwMDA4RTIyMDA1ODhDQTMwMDc0MDA0MzEwMjFBQzgyMDAwQzk1Ci06MTA0MkQwMDA4RTIyMDAyQ0FDODIwMDEwOEUyMjAwNDA4RTIzMDA0NERGCi06MTA0MkUwMDAwMDAyMTQwMDAwNDMxMDI1QUM4MjAwMTQ5MjIyMDA0REZECi06MTA0MkYwMDAyNDAzMDA4MDMwNDIwMEZGMTQ0MzAwMDQwMDAwMDAwMDRCCi06MTA0MzAwMDBBQzgwMDAxODBBMDAxMEE0OEY4MjAwMUM4RTIzMDAwQ0MxCi06MTA0MzEwMDAyNDAyMDAwMTEwNjIwMDBFMjQwMkZGRkY5MjIyMDAwODE2Ci06MTA0MzIwMDAzMDQyMDA0MDE0NDAwMDBBMjQwMkZGRkY4RTIzMDAwQzlDCi06MTA0MzMwMDA4Q0EyMDA3NDAwNjIxODIzM0MwMjA4MDAwMDYyMTAyNDYyCi06MTA0MzQwMDAxNDQwMDAwMjAwMDAyODIxMDA2MDI4MjEwMDA1MTA0M0NECi06MTA0MzUwMDBBQzgyMDAxODhGODIwMDFDMDAwMDIwMjE5NDQzMDAxRUI0Ci06MTA0MzYwMDAzQzAyQzAwQzAwNjIxODI1OEY4MjAwMTgwRTAwMEQ3OUU3Ci06MTA0MzcwMDBBQzQzMDAxQzNDMDM4MDA4MzQ2MjAxMDA4QzQyMDAwMDA2Ci06MTA0MzgwMDA4Rjg1MDAxODM0NjMwMDgwOEZCRjAwMThBQ0EyMDAwMDM2Ci06MTA0MzkwMDBBQ0EwMDAwNDhDNjQwMDQ4OEY4MjAwMUM4RkIxMDAxNDE0Ci06MTA0M0EwMDBBQ0E0MDAwOEFDQTAwMDBDQUNBMDAwMTA5MDYzMDAwNTA5Ci06MTA0M0IwMDA5NDQ2MDAxRTNDMDI0MDBEMDAwMzFFMDAwMEMyMzAyNTQyCi06MTA0M0MwMDBBQ0EzMDAxNDhGQjAwMDEwQUNBMDAwMTgyNDA0MDAwMUFFCi06MTA0M0QwMDBBQ0E2MDAxQzBBMDAwRDc5MjdCRDAwMjA4RkJGMDAxODc1Ci06MTA0M0UwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDNCCi06MTA0M0YwMDAzQzAyODAwMDk0NDMwMDdDM0MwMjgwMDgzNDQ2MDEwMDZCCi06MTA0NDAwMDAzMDg0MDBGRjMwNjVGRkZGMjQwMjAwMDUyNEEzNDY1MERFCi06MTA0NDEwMDBBMEM0MDAwQzU0ODIwMDBDMzA2NUZGRkY5MEMyMDAwRDU4Ci06MTA0NDIwMDAyQzQyMDAwNzEwNDAwMDA3MjRBMzBBMDA5MEMzMDAwRDhGCi06MTA0NDMwMDAyNDAyMDAxNDAwNjIxMDA0MDBBMjEwMjEwQTAwMTBFMEZGCi06MTA0NDQwMDAzMDQ1RkZGRjMwNjVGRkZGM0MwMjgwMDgzNDQyMDA4MEFBCi06MTA0NDUwMDAwM0UwMDAwOEE0NDUwMDE0M0MwMzgwMDgzNDY4MDA4MDkxCi06MTA0NDYwMDBBRDA1MDAzODM0NjcwMTAwOENFMjAwMUMzMDg0MDBGRjg5Ci06MTA0NDcwMDAwMEEyMTAyMzE4NDAwMDAzMzBDNjAwRkYyNEEyRkZGQzU2Ci06MTA0NDgwMDBBQ0UyMDAxQzMwODIwMDAxNTA0MDAwMDgzQzAzODAwODcwCi06MTA0NDkwMDA4RDAyMDAzQzAwQTIxMDIzMDQ0MTAwMTIyNDA0MDAwNUY4Ci06MTA0NEEwMDA4QzYyMDAwNDEwQTIwMDBGM0MwMzgwMDg4QzYyMDAwNEEwCi06MTA0NEIwMDAxNEEyMDAxRTAwMDAwMDAwM0MwMjA4MDA4QzQyMDBEODNDCi06MTA0NEMwMDAzMDQyMDAyMDEwNDAwMDA5M0MwMjgwMDgzNDYyMDA4MDI1Ci06MTA0NEQwMDA5MDYzMDAwODkwNDIwMDRDMTQ0MzAwMDQzQzAyODAwOEEyCi06MTA0NEUwMDAyNDA0MDAwNDBBMDAxMENBMDAwMDAwMDAzNDQzMDA4MEM1Ci06MTA0NEYwMDAzNDQyMDEwMEEwNDAwMDBDMjQwMjAwMDFBNDYyMDAxNDE4Ci06MTA0NTAwMDAxMEMwMDAwQTNDMDI4MDAwOEM0NDAxMDAzQzAzODAwMDgzCi06MTA0NTEwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDJBQzY0MDFDMDdBCi06MTA0NTIwMDBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjgwM0UwMDAwODg0Ci06MTA0NTMwMDAwMDAwMDAwMDI3QkRGRkU4MDBBNjE4MjNBRkJGMDAxMDUxCi06MTA0NTQwMDAxODYwMDA4MDMwODgwMEZGM0MwMjgwMDgzNDQ3MDA4MEZCCi06MTA0NTUwMDBBMEUwMDAyNDM0NDQwMTAwQTBFMDAwMjc4QzgyMDAxQzZECi06MTA0NTYwMDAwMEEyMTAyMzA0NDAwMDU2MDAwMDAwMDA4Q0UyMDAzQzMyCi06MTA0NTcwMDA5NEUzMDA1QzhDRTQwMDJDMDA0NTMwMjMzMDYzRkZGRkEzCi06MTA0NTgwMDAwMEMzMTgyMTAwODMyMDJCMTA4MDAwMDQwMEUwMTgyMUI0Ci06MTA0NTkwMDA4Q0UyMDAyQzBBMDAxMTM5MDBBMjEwMjE5NEUyMDA1Qzg4Ci06MTA0NUEwMDAzMDQyRkZGRjAwQzIxMDIxMDBBMjEwMjFBQzYyMDAxQ0FCCi06MTA0NUIwMDAzQzAyODAwODM0NDQwMDgwOTQ4MjAwNUM4QzgzMDAxQ0EwCi06MTA0NUMwMDAzMDQyRkZGRjAwMDIxMDQwMDBBMjEwMjEwMDQzMTAyQkQ4Ci06MTA0NUQwMDAxMDQwMDAwNDAwMDAwMDAwOEM4MjAwMUMwQTAwMTE0Q0Y2Ci06MTA0NUUwMDAzQzA2ODAwODk0ODIwMDVDMzA0MkZGRkYwMDAyMTA0MENECi06MTA0NUYwMDAwMEEyMTAyMTNDMDY4MDA4MzRDMzAxMDAzNEM3MDA4MEFCCi06MTA0NjAwMDBBQzgyMDAxQ0EwNjAwMDBDQUNFNTAwMzg4QzYyMDAxQzgxCi06MTA0NjEwMDAwMEEyMTAyMzE4NDAwMDAyMjRBMkZGRkNBQzYyMDAxQzgwCi06MTA0NjIwMDAzMTAyMDAwMTEwNDAwMDA4M0MwMzgwMDg4Q0UyMDAzQzhECi06MTA0NjMwMDAwMEEyMTAyMzA0NDEwMDEyMjQwNDAwMDU4Q0MyMDAwNENGCi06MTA0NjQwMDAxMEEyMDAxMDhGQkYwMDEwOEM2MjAwMDQxNEEyMDA0RjUzCi06MTA0NjUwMDA4RkJGMDAxMDNDMDIwODAwOEM0MjAwRDgzMDQyMDAyMDdFCi06MTA0NjYwMDAxMDQwMDAwQTNDMDI4MDA4MzQ2MjAwODA5MDYzMDAwODE5Ci06MTA0NjcwMDA5MDQyMDA0QzE0NDMwMDA1M0MwMjgwMDgyNDA0MDAwNENFCi06MTA0NjgwMDA4RkJGMDAxMDBBMDAxMENBMjdCRDAwMTgzNDQzMDA4MEY1Ci06MTA0NjkwMDAzNDQyMDEwMEEwNDAwMDBDMjQwMjAwMDFBNDYyMDAxNDc2Ci06MTA0NkEwMDAzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDA4QzYyMDFGOEQ1Ci06MTA0NkIwMDAwNDQwRkZGRTI0MDIwMDAyMEEwMDExOTkwMDAwMDAwMERECi06MTA0NkMwMDA4Q0UyMDAxQzAwNDYxMDIzMDA0MzEwMkI1NDQwMDAwMUQ0Ci06MTA0NkQwMDBBQ0U1MDAxQzk0RTIwMDVDMzA0MkZGRkYwMDYyMTAyQjRFCi06MTA0NkUwMDAxNDQwMDAwNzI0MDIwMDAyOTRFMjAwNUM4Q0UzMDAxQ0VBCi06MTA0NkYwMDAzMDQyRkZGRjAwNjIxODIxQUNFMzAwMUMyNDAyMDAwMkRDCi06MTA0NzAwMDBBQ0U1MDAzODBFMDAwRjFGQTA4MjAwMEMxMDQwMDAxRjA3Ci06MTA0NzEwMDA4RkJGMDAxMDNDMDI4MDAwOEM0NDAxMDAzQzAzODAwMEVECi06MTA0NzIwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDJBQzY0MDFDMDY4Ci06MTA0NzMwMDBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjgwQTAwMTFCMTkxCi06MTA0NzQwMDA4RkJGMDAxMDMxMDIwMDEwMTA0MDAwMTA4RkJGMDAxMDBBCi06MTA0NzUwMDAzQzAyODAwODM0NDUwMDgwOENBMzAwMUM5NEEyMDA1Q0JECi06MTA0NzYwMDAwMDY2MTgyMzMwNDJGRkZGMDA2MjE4MjEzQzAyM0ZGRjIxCi06MTA0NzcwMDAzNDQ0RkZGRjAwODMxMDJCNTQ0MDAwMDEwMDgwMTgyMUI3Ci06MTA0NzgwMDAwMEMzMTAyMUFDQTIwMDFDOEZCRjAwMTAwM0UwMDAwODgyCi06MTA0NzkwMDAyN0JEMDAxODI3QkRGRkU4MDBDMDQwMjEwMEE2MzAyMzM4Ci06MTA0N0EwMDBBRkJGMDAxMDE4QzAwMDI2MzA4QTAwRkYzQzAyODAwODBFCi06MTA0N0IwMDAzNDQ5MDA4MDhEMjQwMDFDOEQyMzAwMkMwMDg4MjAyMzg4Ci06MTA0N0MwMDAwMDY0MTgyQjEwNjAwMDBGMzQ0NzAxMDA4Q0UyMDAyMEI5Ci06MTA0N0QwMDAwMDQ2MTAyMUFDRTIwMDIwOENFMjAwMjAwMDQ0MTAyQkE3Ci06MTA0N0UwMDAxNDQwMDAwQjNDMDIzRkZGOENFMjAwMjAwMDQ0MTAyM0U5Ci06MTA0N0YwMDBBQ0UyMDAyMDk1MjIwMDVDMzA0MkZGRkYwQTAwMTFEMTlDCi06MTA0ODAwMDAwMDgyMjAyMUFDRTAwMDIwMDA4NjIwMjEzQzAyM0ZGRkY2Ci06MTA0ODEwMDAzNDQzRkZGRjAwNjQxMDJCNTQ0MDAwMDEwMDYwMjAyMTRFCi06MTA0ODIwMDAzQzAyODAwODM0NDIwMDgwMDA4NTE4MjFBQzQzMDAxQzAzCi06MTA0ODMwMDBBMDQwMDAyNEEwNDAwMDI3MEEwMDEyMjMzQzAzODAwODY3Ci06MTA0ODQwMDAzMTQyMDAxMDEwNDAwMDQzM0MwMzgwMDgzQzA2ODAwOEMxCi06MTA0ODUwMDAzNEM0MDA4MDhDODIwMDNDMDA0ODEwMjM1ODQwMDAzRTQ1Ci06MTA0ODYwMDAzNDY2MDA4MDkwODIwMDI0MjQ0MjAwMDFBMDgyMDAyNDRCCi06MTA0ODcwMDA5MDgyMDAyNDNDMDMwODAwOEM2MzAwMjQzMDQyMDBGRjM3Ci06MTA0ODgwMDAwMDQzMTAyQjE0NDAwMDY4OEZCRjAwMTAzNEMyMDEwMDk5Ci06MTA0ODkwMDA4QzQyMDAxQzAwQTIxMDIzMTg0MDAwNjMwMDAwMDAwMDlFCi06MTA0OEEwMDA4Q0MzMDAwNDk0ODIwMDVDMDA2ODE4MjMzMDQyRkZGRjMwCi06MTA0OEIwMDAwMDAzMTg0MzAwMDIxMDQwMDA0MzEwMkExMDQwMDAwNTc2Ci06MTA0OEMwMDAwMDAwMDAwMDhDQzIwMDA0MDA0ODEwMjMwQTAwMTIwNkY5Ci06MTA0OEQwMDAwMDAyMTA0Mzk0ODIwMDVDMzA0MkZGRkYwMDAyMTA0MDRGCi06MTA0OEUwMDAzQzA2ODAwOEFDODIwMDJDMzRDNTAwODA5NEEyMDA1Qzk5Ci06MTA0OEYwMDA4Q0E0MDAyQzk0QTMwMDVDMzA0MkZGRkYwMDAyMTA0MDA3Ci06MTA0OTAwMDAwMDgyMjAyMTMwNjNGRkZGMDA4MzIwMjEwMTA0MTAyMTU5Ci06MTA0OTEwMDBBQ0EyMDAxQzhDQzIwMDA0MzRDNjAxMDBBQ0MyMDAxQzU2Ci06MTA0OTIwMDAyNDAyMDAwMjBFMDAwRjFGQTBDMjAwMEMxMDQwMDAzRTI3Ci06MTA0OTMwMDA4RkJGMDAxMDNDMDI4MDAwOEM0NDAxMDAzQzAzODAwMENCCi06MTA0OTQwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDIwQTAwMTI1M0E4Ci06MTA0OTUwMDAwMDAwMDAwMDM0NjYwMDgwQUNDNTAwMzgzNDY0MDEwMEZCCi06MTA0OTYwMDA4QzgyMDAxQzAwQTIxMDIzMTg0MDAwMDIyNEEyRkZGQzJECi06MTA0OTcwMDBBQzgyMDAxQzMxNDIwMDAxNTA0MDAwMEEzQzAzODAwODE4Ci06MTA0OTgwMDA4Q0MyMDAzQzAwQTIxMDIzMDQ0MzAwMTQyNDA0MDAwNTQwCi06MTA0OTkwMDA4QzYyMDAwNDE0QTIwMDAzM0MwMzgwMDgwQTAwMTI0NTQ0Ci06MTA0OUEwMDAyNDA0MDAwNThDNjIwMDA0MTRBMjAwMUY4RkJGMDAxMEI1Ci06MTA0OUIwMDAzQzAyMDgwMDhDNDIwMEQ4MzA0MjAwMjAxMDQwMDAwQTFGCi06MTA0OUMwMDAzQzAyODAwODM0NjIwMDgwOTA2MzAwMDg5MDQyMDA0Q0YyCi06MTA0OUQwMDAxNDQzMDAwNTNDMDI4MDA4MjQwNDAwMDQ4RkJGMDAxMDJCCi06MTA0OUUwMDAwQTAwMTBDQTI3QkQwMDE4MzQ0MzAwODAzNDQyMDEwMDc5Ci06MTA0OUYwMDBBMDQwMDAwQzI0MDIwMDAxQTQ2MjAwMTQzQzAyODAwMENDCi06MTA0QTAwMDA4QzQ0MDEwMDNDMDM4MDAwOEM2MjAxRjgwNDQwRkZGRUVFCi06MTA0QTEwMDAyNDAyMDAwMkFDNjQwMUMwQTA2MjAxQzQzQzAyMTAwMDg4Ci06MTA0QTIwMDBBQzYyMDFGODhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxODNBCi06MTA0QTMwMDAyN0JERkZFODNDMEE4MDA4QUZCRjAwMTAzNTQ5MDA4MDYxCi06MTA0QTQwMDA4RDIyMDAzQzAwQzA0MDIxMzA4NDAwRkYwMDQ2MTAyMzJFCi06MTA0QTUwMDAxODQwMDA5RDMwRTcwMEZGMzU0NzAxMDAyNDAyMDAwMUE3Ci06MTA0QTYwMDAwMEE2MzAyM0EwRTAwMDBDQTBFMDAwMERBNTIyMDAxNDU5Ci06MTA0QTcwMDAxOEMwMDAyNDMwODIwMDEwOEQyMzAwMUM4RDIyMDAyQ0QxCi06MTA0QTgwMDAwMDY4MTgyMzAwNDMxMDJCMTA0MDAwMEYwMDAwMDAwMEE2Ci06MTA0QTkwMDA4Q0UyMDAyMDAwNDYxMDIxQUNFMjAwMjA4Q0UyMDAyMEQ1Ci06MTA0QUEwMDAwMDQzMTAyQjE0NDAwMDBCM0MwMjNGRkY4Q0UyMDAyMDFGCi06MTA0QUIwMDAwMDQzMTAyM0FDRTIwMDIwOTUyMjAwNUMzMDQyRkZGRjRGCi06MTA0QUMwMDAwQTAwMTI4MjAwNjIxODIxQUNFMDAwMjAwMDY2MTgyMTYyCi06MTA0QUQwMDAzQzAyM0ZGRjM0NDZGRkZGMDBDMzEwMkI1NDQwMDAwMTRGCi06MTA0QUUwMDAwMEMwMTgyMTNDMDI4MDA4MzQ0MjAwODAwMDY1MTgyMTczCi06MTA0QUYwMDBBQzQzMDAxQ0EwNDAwMDI0QTA0MDAwMjcwQTAwMTJEMEI0Ci06MTA0QjAwMDAzQzAzODAwODEwNDAwMDQwM0MwMzgwMDg4RDIyMDAzQzlDCi06MTA0QjEwMDAwMDQ4MTAyMzU4NDAwMDNEMzQ2NzAwODA5MTIyMDAyNDUzCi06MTA0QjIwMDAyNDQyMDAwMUExMjIwMDI0OTEyMjAwMjQzQzAzMDgwMDE5Ci06MTA0QjMwMDA4QzYzMDAyNDMwNDIwMEZGMDA0MzEwMkIxNDQwMDA5QTg1Ci06MTA0QjQwMDA4RkJGMDAxMDhDRTIwMDFDMDBBMjEwMjMxODQwMDA5NkJBCi06MTA0QjUwMDAwMDAwMDAwMDhENDMwMDA0OTUyMjAwNUMwMDY4MTgyM0NCCi06MTA0QjYwMDAzMDQyRkZGRjAwMDMxODQzMDAwMjEwNDAwMDQzMTAyQUE4Ci06MTA0QjcwMDAxMDQwMDAwNTAxMjAyMDIxOEQ0MjAwMDQwMDQ4MTAyMzMwCi06MTA0QjgwMDAwQTAwMTJCMzAwMDIxMDQzOTUyMjAwNUMzMDQyRkZGRjdFCi06MTA0QjkwMDAwMDAyMTA0MDNDMDY4MDA4QUM4MjAwMkMzNEM1MDA4MDI2Ci06MTA0QkEwMDA5NEEyMDA1QzhDQTQwMDJDOTRBMzAwNUMzMDQyRkZGRjE0Ci06MTA0QkIwMDAwMDAyMTA0MDAwODIyMDIxMzA2M0ZGRkYwMDgzMTgyMTkzCi06MTA0QkMwMDAwMTAzMTAyMUFDQTIwMDFDOENDMjAwMDQzNEM2MDEwMEY5Ci06MTA0QkQwMDBBQ0MyMDAxQzI0MDIwMDAyMEUwMDBGMUZBMEMyMDAwQzc5Ci06MTA0QkUwMDAxMDQwMDA3MThGQkYwMDEwM0MwMjgwMDA4QzQ0MDEwMDE3Ci06MTA0QkYwMDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkUyNDAyMDAwMkE2Ci06MTA0QzAwMDAwQTAwMTJGQTAwMDAwMDAwMzQ2NzAwODBBQ0U1MDAzOEFBCi06MTA0QzEwMDAzNDY2MDEwMDhDQzIwMDFDMDBBMjEwMjMxODQwMDAwMjYwCi06MTA0QzIwMDAyNEEyRkZGQ0FDQzIwMDFDMzA4MjAwMDE1MDQwMDAwOEVFCi06MTA0QzMwMDAzQzAzODAwODhDRTIwMDNDMDBBMjEwMjMwNDQzMDA1MTk2Ci06MTA0QzQwMDAyNDA0MDAwNThDNjIwMDA0MTBBMjAwM0UzQzAzODAwODhFCi06MTA0QzUwMDA4QzYyMDAwNDU0QTIwMDU0OEZCRjAwMTAzQzAyMDgwMDc0Ci06MTA0QzYwMDA4QzQyMDBEODMwNDIwMDIwMTA0MDAwMDYzQzAyODAwOEYwCi06MTA0QzcwMDAzNDYyMDA4MDkwNjMwMDA4OTA0MjAwNEMxMDQzMDA0MDcyCi06MTA0QzgwMDAzQzAyODAwODM0NDMwMDgwMzQ0MjAxMDBBMDQwMDAwQzA0Ci06MTA0QzkwMDAyNDAyMDAwMUE0NjIwMDE0M0MwMjgwMDA4QzQ0MDEwMDQ0Ci06MTA0Q0EwMDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkUyNDAyMDAwMkY1Ci06MTA0Q0IwMDBBQzY0MDFDMEEwNjIwMUM0M0MwMjEwMDBBQzYyMDFGODA3Ci06MTA0Q0MwMDAwQTAwMTMzODhGQkYwMDEwMjQwMjAwMDVBMTIwMDAyNzFFCi06MTA0Q0QwMDAxNEUyMDAwQTNDMDM4MDA4MzU0MzAxMDA5MDYyMDAwRDk1Ci06MTA0Q0UwMDAyQzQyMDAwNjUwNDAwMDA1M0MwMzgwMDg5MDYyMDAwREY1Ci06MTA0Q0YwMDAyNDQyMDAwMUEwNjIwMDBEM0MwMzgwMDgzNDY3MDA4MDVDCi06MTA0RDAwMDBBQ0U1MDAzODM0NjYwMTAwOENDMjAwMUMwMEEyMTAyMzAwCi06MTA0RDEwMDAxODQwMDAwMjI0QTJGRkZDQUNDMjAwMUMzMDgyMDAwMTNCCi06MTA0RDIwMDA1MDQwMDAwQTNDMDM4MDA4OENFMjAwM0MwMEEyMTAyM0EzCi06MTA0RDMwMDAwNDQxMDAxNDI0MDQwMDA1OEM2MjAwMDQxNEEyMDAwMzQyCi06MTA0RDQwMDAzQzAzODAwODBBMDAxMzJGMjQwNDAwMDU4QzYyMDAwNDMxCi06MTA0RDUwMDAxNEEyMDAxNThGQkYwMDEwM0MwMjA4MDA4QzQyMDBEODNFCi06MTA0RDYwMDAzMDQyMDAyMDEwNDAwMDBBM0MwMjgwMDgzNDYyMDA4MDdCCi06MTA0RDcwMDA5MDYzMDAwODkwNDIwMDRDMTQ0MzAwMDUzQzAyODAwOEY4Ci06MTA0RDgwMDAyNDA0MDAwNDhGQkYwMDEwMEEwMDEwQ0EyN0JEMDAxOEI5Ci06MTA0RDkwMDAzNDQzMDA4MDM0NDIwMTAwQTA0MDAwMEMyNDAyMDAwMTkyCi06MTA0REEwMDBBNDYyMDAxNDhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxOEE0Ci06MTA0REIwMDAzQzBCODAwODI3QkRGRkU4M0MwMjgwMDBBRkJGMDAxMDFECi06MTA0REMwMDAzNDQyMDEwMDM1NkEwMDgwOTA0NDAwMEEzNTY5MDEwMEQwCi06MTA0REQwMDA4QzQ1MDAxNDhENDgwMDM4OTEyMzAwMEMzMDg0MDBGRjZFCi06MTA0REUwMDAwMTA1MTAyMzFDNDAwMEIzMzA2NzAwRkYyQ0UyMDAwNkQxCi06MTA0REYwMDA1MDQwMDBCMThGQkYwMDEwMjQwMjAwMDEwMEUyMzAwNEQ3Ci06MTA0RTAwMDAzMEMyMDAwMzU0NDAwMDA4MDBBODMwMjMzMEMyMDAwQzE4Ci06MTA0RTEwMDAxNDQwMDBBMTMwQzIwMDMwMTQ0MDAwQTM4RkJGMDAxMDI2Ci06MTA0RTIwMDAwQTAwMTNGQzAwMDAwMDAwMThDMDAwMjQzMDgyMDAxMEFCCi06MTA0RTMwMDA4RDQzMDAxQzhENDIwMDJDMDA2ODE4MjMwMDQzMTAyQjZBCi06MTA0RTQwMDAxMDQwMDAwRjAwMDAwMDAwOEQyMjAwMjAwMDQ2MTAyMUJECi06MTA0RTUwMDBBRDIyMDAyMDhEMjIwMDIwMDA0MzEwMkIxNDQwMDAwQkI3Ci06MTA0RTYwMDAzQzAyM0ZGRjhEMjIwMDIwMDA0MzEwMjNBRDIyMDAyMDkyCi06MTA0RTcwMDA5NTQyMDA1QzMwNDJGRkZGMEEwMDEzNzAwMDYyMTgyMTY3Ci06MTA0RTgwMDBBRDIwMDAyMDAwNjYxODIxM0MwMjNGRkYzNDQ2RkZGRkEyCi06MTA0RTkwMDAwMEMzMTAyQjU0NDAwMDAxMDBDMDE4MjEzQzAyODAwOEMwCi06MTA0RUEwMDAzNDQyMDA4MDAwNjUxODIxQUM0MzAwMUNBMDQwMDAyNDVGCi06MTA0RUIwMDBBMDQwMDAyNzBBMDAxM0JFM0MwMzgwMDgxMDQwMDA0MEI5Ci06MTA0RUMwMDAzQzAzODAwODhENDIwMDNDMDA0ODEwMjMxODQwMDAzRDAwCi06MTA0RUQwMDAzNDY3MDA4MDkxNDIwMDI0MjQ0MjAwMDFBMTQyMDAyNDUyCi06MTA0RUUwMDA5MTQyMDAyNDNDMDMwODAwOEM2MzAwMjQzMDQyMDBGRjAwCi06MTA0RUYwMDAwMDQzMTAyQjE0NDAwMDcwOEZCRjAwMTA4RDIyMDAxQzQ3Ci06MTA0RjAwMDAwMEEyMTAyMzE4NDAwMDZDMDAwMDAwMDA4RDYzMDAwNDE0Ci06MTA0RjEwMDA5NTQyMDA1QzAwNjgxODIzMzA0MkZGRkYwMDAzMTg0M0VECi06MTA0RjIwMDAwMDAyMTA0MDAwNDMxMDJBMTA0MDAwMDUwMTQwMjAyMURCCi06MTA0RjMwMDA4RDYyMDAwNDAwNDgxMDIzMEEwMDEzQTEwMDAyMTA0M0YwCi06MTA0RjQwMDA5NTQyMDA1QzMwNDJGRkZGMDAwMjEwNDAzQzA2ODAwOEEyCi06MTA0RjUwMDBBQzgyMDAyQzM0QzUwMDgwOTRBMjAwNUM4Q0E0MDAyQzkwCi06MTA0RjYwMDA5NEEzMDA1QzMwNDJGRkZGMDAwMjEwNDAwMDgyMjAyMTI5Ci06MTA0RjcwMDAzMDYzRkZGRjAwODMxODIxMDEwMzEwMjFBQ0EyMDAxQzQ1Ci06MTA0RjgwMDA4Q0MyMDAwNDM0QzYwMTAwQUNDMjAwMUMyNDAyMDAwMjIyCi06MTA0RjkwMDAwRTAwMEYxRkEwQzIwMDBDMTA0MDAwNDc4RkJGMDAxMDcyCi06MTA0RkEwMDAzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDA4QzYyMDFGOENDCi06MTA0RkIwMDAwNDQwRkZGRTI0MDIwMDAyMEEwMDEzRUUwMDAwMDAwMDdECi06MTA0RkMwMDAzNDY3MDA4MEFDRTUwMDM4MzQ2NjAxMDA4Q0MyMDAxQ0Y4Ci06MTA0RkQwMDAwMEEyMTAyMzE4NDAwMDAyMjRBMkZGRkNBQ0MyMDAxQzU3Ci06MTA0RkUwMDAzMDgyMDAwMTUwNDAwMDBBM0MwMzgwMDg4Q0UyMDAzQzAzCi06MTA0RkYwMDAwMEEyMTAyMzA0NDMwMDE0MjQwNDAwMDU4QzYyMDAwNDYyCi06MTA1MDAwMDAxNEEyMDAwMzNDMDM4MDA4MEEwMDEzRTAyNDA0MDAwNUY2Ci06MTA1MDEwMDA4QzYyMDAwNDE0QTIwMDI4OEZCRjAwMTAzQzAyMDgwMDFDCi06MTA1MDIwMDA4QzQyMDBEODMwNDIwMDIwMTA0MDAwMEEzQzAyODAwODI4Ci06MTA1MDMwMDAzNDYyMDA4MDkwNjMwMDA4OTA0MjAwNEMxNDQzMDAwNUU1Ci06MTA1MDQwMDAzQzAyODAwODI0MDQwMDA0OEZCRjAwMTAwQTAwMTBDQTJDCi06MTA1MDUwMDAyN0JEMDAxODM0NDMwMDgwMzQ0MjAxMDBBMDQwMDAwQ0ZBCi06MTA1MDYwMDAyNDAyMDAwMUE0NjIwMDE0M0MwMjgwMDA4QzQ0MDEwMDcwCi06MTA1MDcwMDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkUyNDAyMDAwMjIxCi06MTA1MDgwMDBBQzY0MDFDMEEwNjIwMUM0M0MwMjEwMDBBQzYyMDFGODMzCi06MTA1MDkwMDAwQTAwMTNGQzhGQkYwMDEwOEZCRjAwMTAwMTAwMzAyMUU5Ci06MTA1MEEwMDAwQTAwMTExQjI3QkQwMDE4MDEwMDMwMjEwQTAwMTI1QTA2Ci06MTA1MEIwMDAyN0JEMDAxODhGQkYwMDEwMDNFMDAwMDgyN0JEMDAxOEFGCi06MTA1MEMwMDAzQzAzODAwODM0NjQwMTAwMjQwMjAwMDNBMDgyMDAwQzI5Ci06MTA1MEQwMDA4QzYyMDAwNDAzRTAwMDA4QUM4MjAwMUMzQzA1ODAwOEUwCi06MTA1MEUwMDAzNEEzMDA4MDkwNjIwMDI3MzRBNTAxMDAyNDA2MDA0MzA5Ci06MTA1MEYwMDAyNDQyMDAwMUEwNjIwMDI3OTA2MzAwMjczQzAyMDgwMEMwCi06MTA1MTAwMDA4QzQyMDA0ODMwNjMwMEZGMTQ2MjAwMDQzQzA3NjAyMUI5Ci06MTA1MTEwMDA5NEE1MDBEQTBBMDAwOEVEMzBBNUZGRkYwM0UwMDAwOEJGCi06MTA1MTIwMDAwMDAwMDAwMDI3QkRGRkU4QUZCRjAwMTAzQzAyODAwMDc4Ci06MTA1MTMwMDAwRTAwMTQwNThDNDQwMTgwM0MwMjgwMDgzNDQzMDEwMEI5Ci06MTA1MTQwMDBBMDYwMDAwQzhDNDIwMDA0OEZCRjAwMTAyN0JEMDAxODI3Ci06MTA1MTUwMDAwM0UwMDAwOEFDNjIwMDFDMjdCREZGRTAzQzAyODAwOEIxCi06MTA1MTYwMDBBRkJGMDAxOEFGQjEwMDE0QUZCMDAwMTAzNDQ1MDA4MERECi06MTA1MTcwMDAzNDQ2MDEwMDNDMDg4MDAwOEQwOTAxNDA5MEMzMDAwQ0JBCi06MTA1MTgwMDA4Q0E0MDAzQzhDQTIwMDM4MTQ4MjAwM0IzMDY3MDBGRkU2Ci06MTA1MTkwMDA5NTAyMDA3QzkwQTMwMDI3MTQ2MDAwMDkzMDQ1RkZGRkIyCi06MTA1MUEwMDAyNDAyMDAwNTU0RTIwMDA4M0MwNDgwMDg5MEMyMDAwRDZGCi06MTA1MUIwMDAyNDQyMDAwMUEwQzIwMDBEMEEwMDE0NDAzQzA0ODAwOEYzCi06MTA1MUMwMDBBMEMwMDAwRDNDMDQ4MDA4MzQ4MjAxMDA5MDQyMDAwQzE1Ci06MTA1MUQwMDAyNDAzMDAwNTMwNDIwMEZGMTQ0MzAwMEEyNEEyMDVEQzJBCi06MTA1MUUwMDAzNDgzMDA4MDkwNjIwMDI3MkM0MjAwMDc1MDQwMDAwNTY1Ci06MTA1MUYwMDAyNEEyMEEwMDkwNjMwMDI3MjQwMjAwMTQwMDYyMTAwNDE1Ci06MTA1MjAwMDAwMEEyMTAyMTNDMTA4MDA4MzYxMDAwODAzMDQ1RkZGRkJFCi06MTA1MjEwMDAwMTIwMjAyMTBFMDAxNDA1QTYwNTAwMTQ5NjAyMDA1QzUyCi06MTA1MjIwMDA4RTAzMDAzODNDMTE4MDAwMzA0MkZGRkYwMDAyMTA0MDI2Ci06MTA1MjMwMDAwMDYyMTgyMUFFMDMwMDFDMEUwMDAzNDU4RTI0MDE0MEJECi06MTA1MjQwMDA5MjAyMDAyNTM0NDIwMDQwQTIwMjAwMjUwRTAwMDM1MEM1Ci06MTA1MjUwMDA4RTI0MDE0MDhFMjQwMTQwM0MwMzgwMDA4QzYyMDFGOEMyCi06MTA1MjYwMDAwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzBBMDYyMDFDNDNECi06MTA1MjcwMDAzQzAyMTAwMEFDNjIwMUY4OEZCRjAwMTg4RkIxMDAxNDFGCi06MEM1MjgwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjBFNAotOjA0NTI4QzAwODAwODAxMDA5NQotOjEwNTI5MDAwODAwODAwODA4MDA4MDAwMDAwMDAwQzgwMDAwMDMyMDBDMAotOjEwNTJBMDAwODAwODAyNDAwODAwMEVEQzA4MDAwRjM0MDgwMDBGNzg2OAotOjEwNTJCMDAwMDgwMDEwMTAwODAwMTA1MDgwMDgwMTAwODAwODAwODBDRAotOjA0NTJDMDAwODAwODAwMDA2MgotOjBDNTJDNDAwMEEwMDAwMjIwMDAwMDAwMDAwMDAwMDAwQjIKLToxMDUyRDAwMDAwMDAwMDBENjM3MDM1MkUzMDJFMzA2QTMzMDAwMDAwNjAKLToxMDUyRTAwMDA1MDAwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKLToxMDUyRjAwMDAwMDAwMDAwMDAwMDAwMDAzODAwM0MwMDAwMDAwMDAwM0EKLToxMDUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwN0QKLToxMDUzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMDUzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMDUzMzAwMDAwMDAwMDAwMDAwMDAwMDAyMTAwMzgwMDAwMDAwMDAxMTMKLToxMDUzNDAwMDAwMDAwMDJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMDUzNTAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBEMjAKLToxMDUzNjAwMDNDMDIwODAwMjQ0MjU0MjQzQzAzMDgwMDI0NjM1NjRDQTkKLToxMDUzNzAwMEFDNDAwMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0QjkKLToxMDUzODAwMDNDMUQwODAwMzdCRDlGRkMwM0EwRjAyMTNDMTAwODAwMjUKLToxMDUzOTAwMDI2MTAwMDg4M0MxQzA4MDAyNzlDNTQyNDBFMDAwMjg4MUMKLToxMDUzQTAwMDAwMDAwMDAwMDAwMDAwMEQwMEEwMTgyMTAwODAxMDIxNjYKLToxMDUzQjAwMDAwODAyODIxM0MwNDYwMDAzQzA3NjAwMDI0MDYwMDA4QUYKLToxMDUzQzAwMDEwNjAwMDA2MzQ4NDIwNzg4QzQyMDAwMEFDRTIyMDA4OTMKLToxMDUzRDAwMDhDNjMwMDAwMDNFMDAwMDhBQ0UzMjAwQzBBMDAwRTJBRjYKLToxMDUzRTAwMDAwMDAwMDAwMjQwMzAwNDAzQzAyNjAwMDAzRTAwMDA4Q0QKLToxMDUzRjAwMEFDNDMyMDAwM0MwNzYwMDA4Rjg2MDAwMDhDRTUyMDc0RTEKLToxMDU0MDAwMDAwODYxMDIxMDBBMjE4MkIxNDYwMDAwNzAwMDAyODIxM0MKLToxMDU0MTAwMDhGOEFGRDk4MjQwNTAwMDFBMTQ0MDAxMzhGODkwMDAwQTQKLToxMDU0MjAwMDAxMjQ0MDIxQUY4ODAwMDAwM0UwMDAwODAwQTAxMDIxMDMKLToxMDU0MzAwMDhGODRGRDk4OEY4NTAwMDA5MDg2MDAxMzMwQzMwMEZGOTUKLToxMDU0NDAwMDAwQTMxMDIzQUY4MjAwMDAwM0UwMDAwOEEwODAwMDEzMzcKLToxMDU0NTAwMDhGODRGRDk4MjdCREZGRThBRkIwMDAxMEFGQkYwMDE0RTgKLToxMDU0NjAwMDkwODkwMDExOTA4NzAwMTEyNDAyMDAyODMxMjgwMEZGNDQKLToxMDU0NzAwMDM5MDYwMDI4MzBFMzAwRkYyNDg1MDAyQzJDRDAwMDAxRTEKLToxMDU0ODAwMDEwNjIwMDE2MjQ4NDAwMUMwRTAwMDAzOTAwMDAwMDAwODkKLToxMDU0OTAwMDhGOEZGRDk4M0MwNTYwMDAyNDAyMDIwNDk1RUUwMDNFQ0IKLToxMDU0QTAwMDk1RUQwMDNDMDAwRTVDMDAzMUFDRkZGRjAxNkM1MDI1MTcKLToxMDU0QjAwMEFDQUEyMDEwNTIwMDAwMDEyNDAyMDAwNEFDQTIyMDAwN0IKLToxMDU0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGQkYwMDE0N0EKLToxMDU0RDAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODBBMDAwMDcxMUIKLToxMDU0RTAwMDAwMDAyODIxOEY4NUZEOTgyN0JERkZEOEFGQkYwMDIwODEKLToxMDU0RjAwMEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwRDIKLToxMDU1MDAwMDAwODA5ODIxOTBBNDAwMTEyNEIwMDAxQzI0QjEwMDJDMkMKLToxMDU1MTAwMDMwODMwMEZGMzg2MjAwMjgwRTAwMDA1QjJDNTIwMDAxMkYKLToxMDU1MjAwMDBFMDAwMDYzMDAwMDAwMDAwMjAwMjAyMTEyNDAwMDAyNzMKLToxMDU1MzAwMDAyMjAyODIxMDAwMDI4MjEwRTAwMDAzOTAwMDAwMDAwNzAKLToxMDU1NDAwMDhGOERGRDk4M0MwODgwMDAzQzA1NjAwMDk1QUMwMDNFQzYKLToxMDU1NTAwMDk1QUIwMDNDMDI2ODMwMjUwMDBDNEMwMDMxNkFGRkZGMUYKLToxMDU1NjAwMDAxMkEzODI1QUNBNzIwMTAyNDAyMDIwMkFDQTYyMDE0ODAKLToxMDU1NzAwMDUyNDAwMDAxMjQwMjAwMDI4RkJGMDAyMDhGQjMwMDFDQTQKLToxMDU1ODAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDI3QkQwMDI4MTMKLToxMDU1OTAwMDAzRTAwMDA4QUNBMjIwMDAyN0JERkZFMEFGQjIwMDE4NzYKLToxMDU1QTAwMEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQzNDMTE2MDAwRTEKLToxMDU1QjAwMDhFMjMyMDc0OEY4MjAwMDAzMEQwRkZGRjMwRjJGRkZGNzcKLToxMDU1QzAwMDEwNjIwMDBDMjQwNjAwOEYwRTAwMDAzOTAwMDAwMDAwNUQKLToxMDU1RDAwMDNDMDY4MDFGMDAxMDQ0MDAzNEM1RkYwMDAxMTIzODI1MkUKLToxMDU1RTAwMDI0MDQwMDAyQUUyNzIwMTAwMDAwMzAyMUFFMjUyMDE0MzQKLToxMDU1RjAwMEFFMjQyMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0QTIKLToxMDU2MDAwMDhGQjAwMDEwMDBDMDEwMjEwM0UwMDAwODI3QkQwMDIwNkIKLToxMDU2MTAwMDI3QkRGRkUwQUZCMDAwMTAzMEQwRkZGRkFGQkYwMDE4RDQKLToxMDU2MjAwMEFGQjEwMDE0MEUwMDAwMzkzMEYxRkZGRjAwMTAyNDAwNkMKLToxMDU2MzAwMDAwOTE4MDI1M0MwMzYwMDBBQzcwMjAxMDhGQkYwMDE4RTMKLToxMDU2NDAwMDhGQjEwMDE0OEZCMDAwMTAyNDAyMDAwNEFDNjIyMDAwNUYKLToxMDU2NTAwMDI3QkQwMDIwMDNFMDAwMDgwMDAwMTAyMTI3QkRGRkU4NUYKLToxMDU2NjAwMDNDMEI2MDE4QUZCRjAwMTA4RDZGNTAwMDI0MThGRjdGRjcKLToxMDU2NzAwMDM0MEM4MDcxMDFGODcwMjQzNUNEMzgwQzI0MEEwMDMxQzcKLToxMDU2ODAwMDNDMDk4MDAwQUQ2RDUwMDAzQzA4ODAwQUFENkM1M0JDRjUKLToxMDU2OTAwMEFEMkEwMDA4MEUwMDA0OUJBRjg4MDAyQzBFMDAwNDU5QjAKLToxMDU2QTAwMDAwMDAwMDAwMEUwMDAwNDgwMDAwMDAwMDNDMDc2MDAwMDEKLToxMDU2QjAwMDhDRTUwODA4MjQwNkZGRjAzQzAzNTcwOTAwQTYyMDI0QzcKLToxMDU2QzAwMDM0NjJGMDAwMTA4MjAwNTAyNDE5MDAwMUFGODAwMDM0RDEKLToxMDU2RDAwMDBFMDAwQkJDMDAwMDAwMDAzQzA2NjAxNjhDQzQwMDAwRUQKLToxMDU2RTAwMDNDMDc2MDE0OENFNTAwQTAzQzAzRkZGRjAwODMxMDI0RkUKLToxMDU2RjAwMDNDMUY1MzUzMDAwNTFGQzIxMDVGMDAzRDM0QzU3QzAwQTIKLToxMDU3MDAwMDk0QTIwMUYyQTc4MDAwNEMxMDQwMDAwM0E3ODAwMDVDMjcKLToxMDU3MTAwMDM4NEIxRTFFQTc4QjAwNEM5NEEyMDFGODEwNDAwMDA0QzkKLToxMDU3MjAwMDhGOEQwMDM0Mzg0QzFFMUVBNzhDMDA1QzhGOEQwMDM0OEEKLToxMDU3MzAwMDExQTAwMDA0OTc4NDAwNUMyNDBFMDAyMEE3OEUwMDRDNkEKLToxMDU3NDAwMDk3ODQwMDVDMkM4RjAwODE1MUUwMDAwMTI0MDQwMDgwQ0MKLToxMDU3NTAwMDk3ODUwMDRDMkNCODA0MDE1MzAwMDAwMTI0MDUwNDAwNzcKLToxMDU3NjAwMDNDMDI2MDAwOEM0MzA0MzgyNDE5MTAzQzMwN0ZGRkZGNUEKLToxMDU3NzAwMDEzRjkwMDAzMzA4N0ZGRkY1MEUwMDAwRjI0MDYwMDUwQUMKLToxMDU3ODAwMEEzODAwMDVFOTM4ODAwNUU1MTAwMDAxMEE3ODQwMDVDMzcKLToxMDU3OTAwMEE3ODAwMDVDOTc4NTAwNUM4RkJGMDAxMEE3ODAwMDRDM0QKLToxMDU3QTAwMEE3ODAwMDU0QTc4MDAwNzIzQzAxMDgwMEFDMjUwMDgwNEYKLToxMDU3QjAwMDAzRTAwMDA4MjdCRDAwMThBMzg2MDA1RTkzODgwMDVFMDIKLToxMDU3QzAwMDU1MDBGRkY0QTc4MDAwNUNBNzg0MDA1Q0E3ODUwMDRDMEYKLToxMDU3RDAwMDhGQkYwMDEwOTc4NTAwNUNBNzgwMDA1NEE3ODAwMDcyREYKLToxMDU3RTAwMDNDMDEwODAwQUMyNTAwODAwM0UwMDAwODI3QkQwMDE4M0MKLToxMDU3RjAwMDAwMDM1MDgwMDE0NjQ4MjE4RDI4MDAwNDNDMDY2MDAwQ0IKLToxMDU4MDAwMDBBMDAwMTBGMDEwNjI4MjEwQTAwMDEwM0FGOTkwMDM0QTQKLToxMDU4MTAwMDMwODNGRkZGOEY4ODAwMkM4Rjg3MDAyODAwMDMyMTQwRjIKLToxMDU4MjAwMDNDMDU4MDAwM0MwMjAwNTAwMDgyNDgyNTNDMDY2MDAwOTgKLToxMDU4MzAwMDNDMEEwMTAwMzRBQzA0MDA4Q0NEMDhFMDAxQUE1ODI0RDUKLToxMDU4NDAwMDExNjAwMDA1MDAwMDAwMDA4Q0NGMDhFMDI0RTcwMDAxOTMKLToxMDU4NTAwMDAxRUE3MDI1QUNDRTA4RTA4RDE5MDAxMDAxODA1ODIxQjYKLToxMDU4NjAwMEFDQjkwMDM4OEQxODAwMTRBQ0I4MDAzQ0FDQTkwMDMwQkQKLToxMDU4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKLToxMDU4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMDU4OTAwMDNDMDM4MDAwOEM2NDAwMDAzMDgyMDAyMDEwNDBGRkZEM0IKLToxMDU4QTAwMDNDMEY2MDAwOERFRDA4RTAzQzBFMDEwMDAxQUUxODI0QjUKLToxMDU4QjAwMDE0NjBGRkUxMDAwMDAwMDBBRjg3MDAyODAzRTAwMDA4NEIKLToxMDU4QzAwMEFGOEIwMDM4OEY4NTAwMkMyNDBCRkZGMDNDMDY4MDAwNDYKLToxMDU4RDAwMDk0QTcwMDFBOENBOTAwMjQzMEVDRkZGRjAwMEMzOEMwRkMKLToxMDU4RTAwMDAwRUI1MDI0MDEyQTQwMjFBQ0M4MDAzQzhDQTQwMDI0QzkKLToxMDU4RjAwMDhDQzMwMDNDMDA4MzEwMjMxODQwMDAzMzAwMDAwMDAwREMKLToxMDU5MDAwMDhDQUQwMDIwMjVBMjAwMDEzQzBGMDA1MEFDQzIwMDM4MzUKLToxMDU5MTAwMDM1RUUwMDEwM0MwNjgwMDBBQ0NFMDAzMDAwMDAwMDAwRTgKLToxMDU5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMDU5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDMDQ4MDAwQTcKLToxMDU5NDAwMDhDOTkwMDAwMzMzODAwMjAxMzAwRkZGRDMwRTIwMDA4N0UKLToxMDU5NTAwMDEwNDAwMDE3M0MwOTgwMDA4Qzg4MDQwOEFDQTgwMDEwOTcKLToxMDU5NjAwMDhDODMwNDBDQUNBMzAwMTQzQzE5MDAyMDNDMTg4MDAwNkMKLToxMDU5NzAwMEFGMTkwMDMwOTRBRTAwMTg5NEFGMDAxQzAxQ0YzMDIxNTUKLToxMDU5ODAwMEE0QTYwMDE4OTRBRDAwMUEyNUE3MDAwMUE0QTcwMDFBMjgKLToxMDU5OTAwMDk0QUIwMDFBOTRBQzAwMUUxMThCMDAwMzAwMDAwMDAwQjEKLToxMDU5QTAwMDAzRTAwMDA4MDAwMDAwMDAwM0UwMDAwOEE0QTAwMDFBQzMKLToxMDU5QjAwMDhEMkEwNDAwQUNBQTAwMTA4RDI0MDQwNEFDQTQwMDE0QTkKLToxMDU5QzAwMDBBMDAwMUFBM0MxOTAwMjA4Q0EyMDAyMDBBMDAwMTkyQzIKLToxMDU5RDAwMDNDMEYwMDUwMEEwMDAxODAwMDAwMDAwMDI3QkRGRkU4RDYKLToxMDU5RTAwMEFGQkYwMDEwMEUwMDAxQzQwMDAwMDAwMDhGODkwMDJDMjIKLToxMDU5RjAwMDhGQkYwMDEwM0MwMzgwMDBBNTIwMDAwQTk1MjgwMDBBRjQKLToxMDVBMDAwMDk1MjcwMDA0MjdCRDAwMTgzMTA1RkZGRjMwRTYwMDBGODEKLToxMDVBMTAwMDAwMDYxNTAwMDBBMjIwMjUwM0UwMDAwOEFDNjQwMDgwMDkKLToxMDVBMjAwMDNDMDUwODAwOENBNTAwMjA4RjgzMDAwNDI3QkRGRkU4RkIKLToxMDVBMzAwMEFGQjAwMDEwQUZCRjAwMTQxMEEzMDAxMDAwMDA4MDIxMTEKLToxMDVBNDAwMDI0MDQwMDAxMDIwNDMwMDQwMEE2MjAyNDAwQzMxMDI0MTIKLToxMDVBNTAwMDUwNDQwMDA2MjYxMDAwMDEwMDEwMTg4MDI3ODdGRDlDODYKLToxMDVBNjAwMDE0ODAwMDBBMDA2NzE4MjEyNjEwMDAwMTJFMDkwMDAyODgKLToxMDVBNzAwMDU1MjBGRkYzOEY4MzAwMDRBRjg1MDAwNDhGQkYwMDE0MEYKLToxMDVBODAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODhDNjgwMDAwRUMKLToxMDVBOTAwMDNDMDU4MDAwQUNBODAwMjQwRTAwMDFDNjI2MTAwMDAxQzEKLToxMDVBQTAwMDNDMDUwODAwOENBNTAwMjAwQTAwMDFFQjJFMDkwMDAyMkQKLToxMDVBQjAwMDI0MDUwMDAxMDA4NTE4MDQzQzA0MDgwMDhDODQwMDIwQTMKLToxMDVBQzAwMDI3QkRGRkM4QUZCRjAwMzQwMDgzMTAyNEFGQkUwMDMwMzUKLToxMDVBRDAwMEFGQjcwMDJDQUZCNjAwMjhBRkI1MDAyNEFGQjQwMDIwOUMKLToxMDVBRTAwMEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNDEwNDAwMDUxQUEKLToxMDVBRjAwMEFGQjAwMDEwOEY4NDAwMkM5NDg3MDAwNjk0ODgwMDBBQjEKLToxMDVCMDAwMDAwRTgzMDIzMzBENUZGRkYxMkEwMDA0QjhGQkYwMDM0RDgKLToxMDVCMTAwMDk0OEIwMDE4OTQ4QzAwMEEwMTZDNTAyMzMxNDJGRkZGRDMKLToxMDVCMjAwMDAyQTI0ODJCMTUyMDAwMDIwMkEwMjAyMTAwNDAyMDIxQzMKLToxMDVCMzAwMDJDOEYwMDA1MTVFMDAwMDIwMDgwOTgyMTI0MTMwMDA0M0EKLToxMDVCNDAwMDBFMDAwMTUzMDI2MDIwMjE4Rjg3MDAyQzAyNjA5MDIxRkIKLToxMDVCNTAwMEFGODAwMDMwOTRGNDAwMEEwMjYwODAyMTEyNjAwMDRFOTEKLToxMDVCNjAwMDMyOTFGRkZGM0MxNjcwMDAzQzE0NDAwMDNDMUUyMDAwQTgKLToxMDVCNzAwMDNDMTc2MDAwOEY5OTAwMzg4RjM4MDAwMDAzMTYxODI0RjYKLToxMDVCODAwMDEwNzQwMDRGMDI4M0Y4MkIxN0UwMDAzNjAwMDAwMDAwNkQKLToxMDVCOTAwMDEwN0UwMDQ3OEY4NjAwMzAxNEMwMDAzQTI0MDMwMDAxQjUKLToxMDVCQTAwMDAyMDMxMDIzMDIyMzIwMjEzMDUwRkZGRjE2MDBGRkYxRDMKLToxMDVCQjAwMDMwOTFGRkZGOEY4NzAwMkMzQzExMDAyMDNDMTA4MDAwQUIKLToxMDVCQzAwMEFFMTEwMDMwOTRFQjAwMEEzQzE3ODAwMDAyNEI1MDIxQ0MKLToxMDVCRDAwMEE0RUEwMDBBOTRFOTAwMEE5NEU4MDAwNDMxMjNGRkZGRDQKLToxMDVCRTAwMDMxMDYwMDBGMDAwNjJEMDAwMDY1RjAyNUFFRkUwMDgwOTYKLToxMDVCRjAwMDk0RjMwMDBBOTRGNjAwMTgxMkQzMDAzNjAwMTIyMTQwRTQKLToxMDVDMDAwMDhDRkYwMDE0OENGNDAwMTAwM0U0NjgyMTAwMDBDMDIxMTQKLToxMDVDMTAwMDAxQTQ3ODJCMDI5ODcwMjEwMUNGNjAyMUFDRUQwMDE0MTMKLToxMDVDMjAwMEFDRUMwMDEwMDJCMjM4MjMzMEY1RkZGRjE2QTBGRkI4MkQKLToxMDVDMzAwMDhGODQwMDJDOEZCRjAwMzQ4RkJFMDAzMDhGQjcwMDJDQjQKLToxMDVDNDAwMDhGQjYwMDI4OEZCNTAwMjQ4RkI0MDAyMDhGQjMwMDFDQkUKLToxMDVDNTAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4NUQKLToxMDVDNjAwMDI3QkQwMDM4MTQ3N0ZGQ0M4Rjg2MDAzMDBFMDAwRDhCRDcKLToxMDVDNzAwMDAyMDAyMDIxMDA0MDE4MjE4Rjg2MDAzMDEwQzBGRkM5OEIKLToxMDVDODAwMDAyMDMxMDIzMDI3MDcwMjM4Rjg3MDAyQzAxQzM2ODIxNDgKLToxMDVDOTAwMDBBMDAwMjc2MzFCMkZGRkY4Rjg2MDAzMDE0QzBGRkM5QzAKLToxMDVDQTAwMDNDMTEwMDIwM0MxMDgwMDAwQTAwMDI0MEFFMTEwMDMwODAKLToxMDVDQjAwMDBFMDAwM0M0MDIwMDIwMjEwQTAwMDI2RDAwNDAxODIxREEKLToxMDVDQzAwMDAyMDAyMDIxMEUwMDA3REIwMjIwMjgyMTBBMDAwMjZEQkQKLToxMDVDRDAwMDAwNDAxODIxMEUwMDAxODAwMDAwMDAwMDBBMDAwMjU5NTcKLToxMDVDRTAwMDAyQjIzODIzMjdCREZGRDhBRkI0MDAyMEFGQjMwMDFDRTkKLToxMDVDRjAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDI0QjYKLToxMDVEMDAwMDBFMDAwMEU2MjQxMzAwMDEzQzAyODAwODNDMDMyMDAwNDIKLToxMDVEMTAwMDNDMDEwODAwQUMyMDAwNzAzNDU0MDA4MDM0NzIwMDAzNTEKLToxMDVEMjAwMDNDMTA4MDAwMjQxMUZGODAwRTAwMDFENzAwMDAwMDAwMEQKLToxMDVEMzAwMDhFMDYwMDAwMzhDNTAwMDEzMEE0MDAwMTE0ODBGRkZBNkYKLToxMDVENDAwMDAwMDAwMDAwOEUwNzAxMDAyNDAzMEMwMDEwRTMwMDA5OEUKLToxMDVENTAwMDNDMDU4MDAwOEUwOTAxMDAyRDI4MzA4MDU1MDAwMDEwODAKLToxMDVENjAwMDNDMDQ4MDAwOEUwQjAxMDAyRDZBMzE4MTExNDAwMDBDMzMKLToxMDVENzAwMDNDMDQ4MDAwOENBQzAxMDAxMTgzMDAwNDAwMDAyMDIxNTEKLToxMDVEODAwMDhDQUUwMTAwMjVDREZGODEzMUE0MDBGRjhFMEYwMTAwRjQKLToxMDVEOTAwMDBFMDAwMUZCQUUwRjAwMjQwQTAwMDJDMTNDMDQ4MDAwOEIKLToxMDVEQTAwMDhDOUYwMTAwMjQxODAwMjBBQzlGMDAyMDkyOTkwMDAwRDUKLToxMDVEQjAwMDMzMjMwMEZGMTA3ODAwMUYyNDAyMDA1MDEwNjIwMDIyREQKLToxMDVEQzAwMDAwMDAwMDAwM0MwNDgwMDA4QzgzMDEwMDE0NjAwMDAzOEMKLToxMDVERDAwMDAwMDAwMDAwNTY2MDAwMTQzQzA0NDAwMDhDODIwMTAwNkEKLToxMDVERTAwMDhDOTkwMTAwMDAwMDk4MjEwMDUxRjgyNDAwMUY3OTQwOEYKLToxMDVERjAwMDMzMzgwMDdGMDFGODcwMjUwMUQyNjgyNUFDOEQwODMwNUEKLToxMDVFMDAwMDhDOEMwMTAwOEM4OTAxMDAyNThCMDEwMDAxNzE1MDI0Q0MKLToxMDVFMTAwMDAwMEEzOTQwMzEyODAwN0YwMEU4MzAyNTAwRDIyODI1Q0IKLToxMDVFMjAwMEFDODUwODMwM0MwNDQwMDBBRTA0MDEzODBBMDAwMjk5RjkKLToxMDVFMzAwMDAwMDAwMDAwOEM4NTAxMDAwRTAwMDc4RDI0MDQwMDgwMDYKLToxMDVFNDAwMDBBMDAwMkMxM0MwNDgwMDA4Qzg0MDEwMDBFMDAxM0VBQTkKLToxMDVFNTAwMDAwMDAwMDAwMEEwMDAyQzEzQzA0ODAwMDAwQTQxMDJCRDYKLToxMDVFNjAwMDI0MDMwMDAxMTA0MDAwMDkwMDAwMzAyMTAwMDUyODQwRjMKLToxMDVFNzAwMDAwQTQxMDJCMDRBMDAwMDMwMDAzMTg0MDU0NDBGRkZDQjIKLToxMDVFODAwMDAwMDUyODQwNTA2MDAwMEEwMDA0MTgyQjAwODUzODJCQkMKLToxMDVFOTAwMDU0RTAwMDA0MDAwMzE4NDIwMEMzMzAyNTAwODUyMDIzOEQKLToxMDVFQTAwMDAwMDMxODQyMTQ2MEZGRjkwMDA1Mjg0MjAwMDQxODJCNzMKLToxMDVFQjAwMDAzRTAwMDA4MDBDMzEwMjEzMDg0RkZGRjMwQzYwMEZGNUMKLToxMDVFQzAwMDNDMDc4MDAwOENFMjAxQjgwNDQwRkZGRTAwMDY0QzAwNTUKLToxMDVFRDAwMDAxMjQzMDI1M0MwODIwMDAwMEM4MjAyNTNDMDMxMDAwODgKLToxMDVFRTAwMEFDRTAwMTgwQUNFNTAxODRBQ0U0MDE4ODAzRTAwMDA4OEIKLToxMDVFRjAwMEFDRTMwMUI4M0MwNjYwMDA4Q0M1MjAxQzI0MDJGRkYwMTYKLToxMDVGMDAwMDMwODMwMjAwMzA4NjAxMDAxMDYwMDAwRTAwQTIyODI0QjkKLToxMDVGMTAwMDM0QTUwMDAxMzA4NzMwMDAxMEUwMDAwNTMwODMwQzAwMEMKLToxMDVGMjAwMDM0QTUwMDA0M0MwNDYwMDAwM0UwMDAwOEFDODUyMDFDOUMKLToxMDVGMzAwMDEwNjBGRkZEM0MwNDYwMDAzNEE1MDAwODAzRTAwMDA4ODkKLToxMDVGNDAwMEFDODUyMDFDNTRDMEZGRjMzNEE1MDAwMjBBMDAwMzE1RTEKLToxMDVGNTAwMDMwODczMDAwMjdCREZGRThBRkIwMDAxMEFGQkYwMDE0OUUKLToxMDVGNjAwMDNDMDc2MDAwMjQwNjAwMDIxMDgwMDAxMTAwQTA4MDIxODAKLToxMDVGNzAwMDhGODMwMDM4MEUwMDAzMEM4QzY0MDAxODhGODIwMDM4NjkKLToxMDVGODAwMDAwMDAyMDIxMjQwNjAwMDE4QzQ1MDAwQzBFMDAwMkZEQkIKLToxMDVGOTAwMDAwMDAwMDAwMTYwMDAwMDIyNDAyMDAwMzAwMDAxMDIxOEYKLToxMDVGQTAwMDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4NTkKLToxMDVGQjAwMDhDRTgyMDFDMjQwOUZGRjAwMTA5MjgyNEFDRTUyMDFDRjIKLToxMDVGQzAwMDhGODcwMDM4MEEwMDAzMzI4Q0U1MDAwQzNDMDI2MDBFMUIKLToxMDVGRDAwMDAwODA0MDIxMzQ0NjAxMDAyNDA5MDAxODAwMDAwMDAwMjAKLToxMDVGRTAwMDAwMDAwMDAwMDAwMDAwMDAzQzBBMDA1MDNDMDM4MDAwNUMKLToxMDVGRjAwMDM1NDcwMjAwQUM2ODAwMzgzNDY0MDQwMEFDNjUwMDNDRUUKLToxMDYwMDAwMEFDNjcwMDMwOEM2QzAwMDAzMThCMDAyMDExNjBGRkZEMEMKLToxMDYwMTAwMDI0MDdGRkZGMjQwMzAwN0Y4QzhEMDAwMDI0NjNGRkZGMTMKLToxMDYwMjAwMDI0ODQwMDA0QUNDRDAwMDAxNDY3RkZGQjI0QzYwMDA0RTgKLToxMDYwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0QTQwMjAwOTYKLToxMDYwNDAwMDAwODUyODJCM0MwMzAwMjAzQzBFODAwMDI1MjlGRkZGMDMKLToxMDYwNTAwMDAxMDU0MDIxQURDMzAwMzAxNTIwRkZFMDAwODAyODIxNUMKLToxMDYwNjAwMDAzRTAwMDA4MDAwMDAwMDA4RjgyMDAzODI3QkRGRkQ4NDEKLToxMDYwNzAwMEFGQjMwMDFDQUZCRjAwMjBBRkIyMDAxOEFGQjEwMDE0MjcKLToxMDYwODAwMEFGQjAwMDEwOTQ0NjAwMDIwMDgwOTgyMThDNTIwMDE4OTYKLToxMDYwOTAwMDJDQzMwMDgxOEM0ODAwMDQ4QzQ3MDAwODhDNTEwMDBDRjQKLToxMDYwQTAwMDhDNDkwMDEwMTA2MDAwMDc4QzRBMDAxNDJDQzQwMDA0QjYKLToxMDYwQjAwMDE0ODAwMDEzMzBFQjAwMDczMEM1MDAwMzEwQTAwMDEwNUYKLToxMDYwQzAwMDAwMDAwMDAwMjQxMDAwOEIwMjAwMjAyMTAyMjAyODIxNjMKLToxMDYwRDAwMDBFMDAwMkZEMjQwNjAwMDMxNjYwMDAwMjI0MDIwMDAzRTUKLToxMDYwRTAwMDAwMDAxMDIxOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4NUEKLToxMDYwRjAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDI4MDYKLToxMDYxMDAwMDE1NjBGRkYxMjQxMDAwOEIzQzBDODAwMDNDMDMwMDIwNDQKLToxMDYxMTAwMDI0MUYwMDAxQUQ4MzAwMzBBRjlGMDAzMDAwMDAwMDAwNUQKLToxMDYxMjAwMDAwMDAwMDAwMDAwMDAwMDAyNDE5RkZGMDI0RDgwMDBGMzgKLToxMDYxMzAwMDAzMTk3ODI0M0MxMDAwRDBBRDg4MDAzODAxRjA3MDI1OTgKLToxMDYxNDAwMDI0Q0QwMDAzM0MwODYwMEVBRDg3MDAzQzM1ODUwNDAwN0IKLToxMDYxNTAwMEFEOEUwMDMwMDAwRDM4ODIzNTA0MDAzQzNDMDM4MDAwRDkKLToxMDYxNjAwMDhDNkIwMDAwMzE2MjAwMjAxMDQwRkZGRDAwMDAwMDAwMzkKLToxMDYxNzAwMDEwRTAwMDA4MjRFM0ZGRkYyNDA3RkZGRjhDQTgwMDAwQzUKLToxMDYxODAwMDI0NjNGRkZGMjRBNTAwMDRBQzg4MDAwMDE0NjdGRkZCMTQKLToxMDYxOTAwMDI0ODQwMDA0M0MwNDYwMEVBQzg2MDAzODAwMDAwMDAwM0IKLToxMDYxQTAwMDAwMDAwMDAwMDAwMDAwMDAzQzA3MDAyMDNDMDY4MDAwQ0EKLToxMDYxQjAwMDAxMjAyMDIxMDE0MDI4MjFBQ0M3MDAzMDBFMDAwMzQyRkQKLToxMDYxQzAwMDAwMDA4MDIxMEUwMDAzMEMwMjQwMjAyMTBBMDAwMzgyRkYKLToxMDYxRDAwMDAyMDAyMDIxMjdCREZGRTBBRkIyMDAxODMwOTJGRkZGODAKLToxMDYxRTAwMEFGQjEwMDE0QUZCRjAwMUNBRkIwMDAxMDE2NDAwMDBEREYKLToxMDYxRjAwMDAwMDA4ODIxMEEwMDAzRjEwMjIwMTAyMTI0MDUwMDAzNzkKLToxMDYyMDAwMDUwODUwMDI3OENFNTAwMEMwMDAwMDAwRDI2MkMwMDAxQjUKLToxMDYyMTAwMDMxOTFGRkZGMjRFQjAwMjAwMjMyNTAyQjExNDAwMDE5NzYKLToxMDYyMjAwMEFGOEIwMDM4OEY4MjAwMzAxNDQwMDAxNjhGODcwMDM4MDMKLToxMDYyMzAwMDNDMDY3MDAwM0MwMzIwMDA4Q0U1MDAwMDAwQTYyMDI0RjIKLToxMDYyNDAwMDE0ODMwMDEwOEY4NDAwNDAwMDA1NDQwMjNDMDk4MDAwNDQKLToxMDYyNTAwMDAwQTk4MDI0MTQ4MEZGRTkzMTA2MDBGRjJDQ0EwMDBCM0UKLToxMDYyNjAwMDExNDBGRkVCMjYyQzAwMDEwMDA2Njg4MDNDMEUwODAwNjAKLToxMDYyNzAwMDI1Q0U1MUM4MDFBRTYwMjE4RDhCMDAwMDAxNjAwMDA4NjEKLToxMDYyODAwMDAwMDAwMDAwMDIyMDEwMjE4RkJGMDAxQzhGQjIwMDE4RjgKLToxMDYyOTAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwNkMKLToxMDYyQTAwMDBFMDAwMkZEMjQwNDAwODQxNjAwRkZEODhGODcwMDM4RkEKLToxMDYyQjAwMDBBMDAwM0QyQUY4MDAwNDAwMjAwMjgyMTBFMDAwMzI0MTAKLToxMDYyQzAwMDI0MDQwMDAxOEY4NzAwMzgwQTAwMDNEMkFGODIwMDQwMDcKLToxMDYyRDAwMDAyMDAyODIxMEUwMDAzMjQwMDAwMjAyMTBBMDAwNDAxRUUKLToxMDYyRTAwMDhGODcwMDM4MEUwMDAzNjkwMjAwMjAyMThGODcwMDM4NTUKLToxMDYyRjAwMDBBMDAwM0QyQUY4MjAwNDAzMEFGRkZGRjAwMEYxOUMwODkKLToxMDYzMDAwMDNDMDQ4MDAwOEM5MDAxQjgwNjAwRkZGRTNDMTkyMDA0N0MKLToxMDYzMTAwMDNDMTgxMDAwQUM4MzAxODBBQzgwMDE4NEFDOTkwMTg4RUEKLToxMDYzMjAwMEFDOTgwMUI4MEEwMDAzRDMyNjJDMDAwMTkwRTIwMDAyQzkKLToxMDYzMzAwMDkwRkYwMDAzMDAwMDIwMjEwMDAyM0EwMDAwRkYyODI1MDIKLToxMDYzNDAwMDI0MDYwMDA4MEUwMDAyRkQwMDAwMDAwMDE2MDBGRkREMUMKLToxMDYzNTAwMDI0MDIwMDAzOEY4NzAwMzgwMDAwMTAyMTBBMDAwM0QyQjYKLToxMDYzNjAwMEFGODIwMDQwOTBFNTAwMDIwMDAwMjAyMTBBMDAwNDIwRDYKLToxMDYzNzAwMDI0MDYwMDA5OTRFNTAwMDQ5MEU5MDAwMzkwRTMwMDAyN0MKLToxMDYzODAwMDAwMDUzNDAwMDAwOTQyMDAwMEM4MjAyNTAwODMyODI1QUMKLToxMDYzOTAwMDI0MDYwMDBBMEEwMDA0MjAwMDAwMjAyMTkwRTUwMDAyRTMKLToxMDYzQTAwMDAwMDAyMDIxMEEwMDA0MjAyNDA2MDAwQjAwMDQ0OUMyM0EKLToxMDYzQjAwMDMxMjcwMDNGMDAwNDQzNDIzQzAyODAwMDAwMDgyMDQwOTcKLToxMDYzQzAwMDI0MDMxNjgwMkNFNjAwMjBBQzQzMDAyQzI0RUFGRkUwRDYKLToxMDYzRDAwMDI0ODIwMDAxMTRDMDAwMDMzMEE5MDBGRjAwODAxMDIxQjYKLToxMDYzRTAwMDMxNDcwMEZGMDAwMjYwODAzQzBEODAwMDI0MEEwMDAxNUMKLToxMDYzRjAwMDAxOEQyMDIxM0MwQjAwMEUwMEVBMjgwNDAwOEIzMDIxODcKLToxMDY0MDAwMDExMjAwMDA1MDAwNTM4Mjc4Q0NFMDAwMDAxQzUzODI1NzUKLToxMDY0MTAwMDAzRTAwMDA4QUNDNzAwMDA4Q0Q4MDAwMDAzMDc3ODI0MTQKLToxMDY0MjAwMDAzRTAwMDA4QUNDRjAwMDAyN0JERkZFMEFGQjEwMDE0Q0YKLToxMDY0MzAwMEFGQjAwMDEwQUZCRjAwMTgzQzA3NjAwMDhDRTQwODA4NDQKLToxMDY0NDAwMDM0MDJGMDAwM0MxMTYwMDAzMDgzRjAwMDI0MDUwMUMwRUMKLToxMDY0NTAwMDNDMDQ4MDBFMDAwMDMwMjExMDYyMDAwNjI0MTAwMDAxNzAKLToxMDY0NjAwMDhDRUEwODA4MzE0OUYwMDAzOTI4RTAwMDAwMDgzODJCOTAKLToxMDY0NzAwMDAwMDc4MDQwM0MwRDAyMDBBRTJEMDgxNDI0MEMxNjgwNEQKLToxMDY0ODAwMDNDMEI4MDAwOEUyNzQ0MDAwRTAwMEUzNEFENkMwMDJDQjcKLToxMDY0OTAwMDEyMDAwMDA0M0MwMjE2OTEyNDA1MDAwMTEyMDUwMDEwQjAKLToxMDY0QTAwMDNDMDIzRDZDMzQ1ODAwRTBBRTM4NDQwODNDMTEwODAwMTIKLToxMDY0QjAwMDhFMzEwMDdDOEZCRjAwMTgzQzA2NjAwMDAwMTE4NTQwQzMKLToxMDY0QzAwMDM2MEYxNjgwOEZCMTAwMTQ4RkIwMDAxMDNDMEUwMjAwMDIKLToxMDY0RDAwMDI3QkQwMDIwQUNDRjQ0MjAwM0UwMDAwOEFDQ0UwODEwNUMKLToxMDY0RTAwMDNDMDIxOERBMzQ1ODAwRTBBRTM4NDQwODNDMTEwODAwODkKLToxMDY0RjAwMDhFMzEwMDdDOEZCRjAwMTgzQzA2NjAwMDAwMTE4NTQwODMKLToxMDY1MDAwMDM2MEYxNjgwOEZCMTAwMTQ4RkIwMDAxMDNDMEUwMjAwQzEKLToxMDY1MTAwMDI3QkQwMDIwQUNDRjQ0MjAwM0UwMDAwOEFDQ0UwODEwMUIKLToxMDY1MjAwMDBBMDAwNDNBMjQwNTAwMDEwQTAwMDQzQTAwMDAyODIxNjgKLToxMDY1MzAwMDI0MDIwNDAwQTc4MjAwMTBBNzgwMDAwODAwMDAyMDIxODgKLToxMDY1NDAwMDNDMDYwODAwMjRDNjU0QjAyNDA1RkZGRjI0ODkwMDAxM0UKLToxMDY1NTAwMDAwMDQ0MDgwMzEyNEZGRkYwMTA2MTgyMTJDODcwMDIwMTEKLToxMDY1NjAwMDE0RTBGRkZBQUM2NTAwMDAyNDA0MDQwMEE3ODQwMDEyQzQKLToxMDY1NzAwMEE3ODAwMDBBMDAwMDIwMjEzQzA2MDgwMDI0QzY1NTMwRjAKLToxMDY1ODAwMDI0MDVGRkZGMjQ4RDAwMDEwMDA0NjA4MDMxQTRGRkZGN0IKLToxMDY1OTAwMDAxODY1ODIxMkM4QTAwMjAxNTQwRkZGQUFENjUwMDAwQzUKLToxMDY1QTAwMEE3ODAwMDE0QTc4MDAwMENBNzgwMDAwRTAwMDAyMDIxMDcKLToxMDY1QjAwMDNDMDYwODAwMjRDNjU1QjAyNDA1RkZGRjI0OTkwMDAxQkQKLToxMDY1QzAwMDAwMDRDMDgwMzMyNEZGRkYwMzA2NzgyMTJDOEUwMDA0RDIKLToxMDY1RDAwMDE1QzBGRkZBQURFNTAwMDAzQzA1NjAwMDhDQTczRDAwNEEKLToxMDY1RTAwMDI0MDNFMDhGMDBFMzEwMjQzNDQ2MDE0MDAzRTAwMDA4NTgKLToxMDY1RjAwMEFDQTYzRDAwMjQ4NzAwN0YwMDA3MzFDMjI0QzVGRkZGMDEKLToxMDY2MDAwMDAwMDUxOEMyMjQ2NDAwMDEzMDgyRkZGRjAwMDIzOEMwNzgKLToxMDY2MTAwMEE3ODQwMDFDM0MwMTA4MDBBQzI3MDAzMEFGODAwMDE4QTQKLToxMDY2MjAwMDAwMDAyODIxMDAwMDIwMjEwMDAwMzAyMTI0ODkwMDAxRTEKLToxMDY2MzAwMDAwQTcyODIxMzEyNEZGRkYyQ0E4MTcwMTExMDAwMDAzMTcKLToxMDY2NDAwMDJDODMwMDgwMTQ2MEZGRjkyNEM2MDAwMTAwQzAyODIxQkIKLToxMDY2NTAwMEFGODYwMDE4MTBDMDAwMURBNzg2MDAxNjI0Q0FGRkZGRDEKLToxMDY2NjAwMDAwMEExMTQyM0MwODA4MDAyNTA4NTVCMDEwNDAwMDBBRjUKLToxMDY2NzAwMDAwMDAyMDIxMDA0MDMwMjEyNDA3RkZGRjI0OEUwMDAxNkMKLToxMDY2ODAwMDAwMDQ2ODgwMzFDNEZGRkYwMUE4NjAyMTAwODY1ODJCRjgKLToxMDY2OTAwMDE1NjBGRkZBQUQ4NzAwMDAzMEEyMDAxRjUwNDAwMDA4Q0YKLToxMDY2QTAwMDAwMDQzMDgwMjQwMzAwMDEwMDQzQzgwNDAwMDQxMDgwNkIKLToxMDY2QjAwMDAwNDg3ODIxMjczOEZGRkYwM0UwMDAwOEFERjgwMDAwMEMKLToxMDY2QzAwMDAwQzgyMDIxMjQwNUZGRkZBQzg1MDAwMDAzRTAwMDA4N0UKLToxMDY2RDAwMDAwMDAwMDAwMzBBNUZGRkYzMEM2RkZGRjMwQTgwMDFGRkMKLToxMDY2RTAwMDAwODA2MDIxMzBFNzAwRkYwMDA1Mjk0MjAwMDA1MDIxQjIKLToxMDY2RjAwMDEwQzAwMDFEMjQwOTAwMDEyNDBCMDAwMTI1MTgwMDAxMTEKLToxMDY3MDAwMDAxMEIyMDA0MzMwODAwRkYwMTI2NzgyNjM5MEUwMDIwRjMKLToxMDY3MTAwMDJERUQwMDAxMkRDMjAwMDEwMUEyMTgyNTEwNjAwMDBEMTEKLToxMDY3MjAwMDAxNDQ1MDI1MDAwNUM4ODAwMzJDNDAyMTAxMDAxODIxOTgKLToxMDY3MzAwMDEwRTAwMDBGMDAwQTIwMjc4RDA0MDAwMDAwOEExODI1QjEKLToxMDY3NDAwMEFEMDMwMDAwMjRBRDAwMDEwMDAwNDAyMTAwMDA1MDIxRjUKLToxMDY3NTAwMDMxQTVGRkZGMjUyRTAwMDEzMUM5RkZGRjAwQzkxMDJCMTUKLToxMDY3NjAwMDEwNDBGRkU3MjUxODAwMDEwM0UwMDAwODAwMDAwMDAwQ0EKLToxMDY3NzAwMDhEMEEwMDAwMDE0NDQwMjQwQTAwMDUyMEFDNjgwMDAwOTYKLToxMDY3ODAwMDI3QkRGRkU4MzBBNUZGRkYzMEM2RkZGRkFGQjAwMDEwMDgKLToxMDY3OTAwMEFGQkYwMDE0MzBFN0ZGRkYwMDAwNTAyMTM0MTBGRkZGQUYKLToxMDY3QTAwMDAwMDA2MDIxMjRBRjAwMUYwMEMwNDgyMTI0MTgwMDAxMTAKLToxMDY3QjAwMDI0MTkwMDIwMDVFMDAwMTYwMUUwMTAyMTAwMDJGOTQzMzEKLToxMDY3QzAwMDAxOUY2ODJBMDAwOTcwMkIwMUFFNDAyNDExMDAwMDE3QjgKLToxMDY3RDAwMDAwMEMxODgwMDA2NDEwMjExMEUwMDAwNThDNEIwMDAwQjQKLToxMDY3RTAwMDAwRjg0MDA0MDAwODM4MjMwMTY3NTgyNDAwMDAzODIxQ0QKLToxMDY3RjAwMDE1NDAwMDQxMDAwMDQwMjE1NTYwMDAxNjMxNjlGRkZGM0YKLToxMDY4MDAwMDI1OEIwMDAxMzE2Q0ZGRkYwNUUxRkZFQzAxRTAxMDIxNTkKLToxMDY4MTAwMDI0QTIwMDNFMDAwMkY5NDMwMTlGNjgyQTAwMDk3MDJCNjAKLToxMDY4MjAwMDAxQUU0MDI0MTUwMEZGRUIwMDBDMTg4MDE1NDYwMDA1NTIKLToxMDY4MzAwMDM0MDJGRkZGMDIwMDI4MjEwRTAwMDUwNDAwMDAzODIxNjkKLToxMDY4NDAwMDAyMDAxMDIxOEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4NzkKLToxMDY4NTAwMDI3QkQwMDE4MTUyMDAwMDMwMTYwMTgyMTAwMEIxQzAyNDEKLToxMDY4NjAwMDI0MDgwMDEwMzA2QTAwRkYxNTQwMDAwNTMwNkUwMDBGNEMKLToxMDY4NzAwMDI1MEQwMDA4MDAwMzFBMDIzMUE4MDBGRjMwNkUwMDBGM0EKLToxMDY4ODAwMDE1QzAwMDA1MzA3RjAwMDMyNTEwMDAwNDAwMDMxOTAyMjUKLToxMDY4OTAwMDMyMDgwMEZGMzA3RjAwMDMxN0UwMDAwNTM4NjkwMDAxNkYKLToxMDY4QTAwMDI1MDIwMDAyMDAwMzE4ODIzMDQ4MDBGRjM4NjkwMDAxMDkKLToxMDY4QjAwMDMxMjMwMDAxMTA2MDAwMDQzMTAzMDBGRjI1MEEwMDAxQUMKLToxMDY4QzAwMDMxNDgwMEZGMzEwMzAwRkYwMDBDNjk0MDAxQTM0MDIxNjMKLToxMDY4RDAwMDI0MEEwMDAxMTBDQUZGRDUzMTEwRkZGRjI0NkUwMDAxMDkKLToxMDY4RTAwMDMxQzgwMEZGMTExOUZGQzYzOEM5MDAwMTJEMUYwMDIwNTMKLToxMDY4RjAwMDUzRTAwMDFDMjU4QjAwMDEyNDBEMDAwMTBBMDAwNTk3QzAKLToxMDY5MDAwMDI0MEUwMDIwNTE0NjAwMTcyNThCMDAwMTI1MDkwMDAxQTcKLToxMDY5MTAwMDMxMjgwMEZGMkQwOTAwMjA1MTIwMDAxMjI1OEIwMDAxOTUKLToxMDY5MjAwMDI1NDMwMDAxMDEwRDUwMDQwMTRCMTAyNDI1MDkwMDAxRUQKLToxMDY5MzAwMDE0NDBGRkY0MzA2QUZGRkYzMTI3RkZGRjEwRUUwMDBDMTgKLToxMDY5NDAwMDI1ODJGRkZGMzA0Q0ZGRkYwMDAwNTAyMTM0MTBGRkZGNzUKLToxMDY5NTAwMDMxMjgwMEZGMkQwOTAwMjA1NTIwRkZGMjI1NDMwMDAxQkEKLToxMDY5NjAwMDI1OEIwMDAxMDE0NjQ4MjYwQTAwMDU1MTMxNkNGRkZGQzYKLToxMDY5NzAwMDAwMDAzODIxMDAwMDUwMjEwQTAwMDVBMzM0MTBGRkZGNTkKLToxMDY5ODAwMDI3QkRGRkQ4QUZCMDAwMTAzMEYwRkZGRkFGQjEwMDE0NEIKLToxMDY5OTAwMDAwMTAzOTQyMzIxMUZGRTAwMDA3MTA4MEFGQjMwMDFDMzUKLToxMDY5QTAwMDAwQjEyODIzMzBEM0ZGRkZBRkIyMDAxODMwQTVGRkZGOUUKLToxMDY5QjAwMDAwODA5MDIxMDI2MDMwMjEwMDQ0MjAyMUFGQkYwMDIwRTAKLToxMDY5QzAwMDBFMDAwNTJGMzIwNzAwMUYwMjIyODgyMTM0MDNGRkZGMkIKLToxMDY5RDAwMDAyNDAyMDIxMDIwMDI4MjEwMjYwMzAyMTAwMDAzODIxREQKLToxMDY5RTAwMDEwNDMwMDA5MzIzMUZGRkYwMjIwMTAyMThGQkYwMDIwMjkKLToxMDY5RjAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwM0QKLToxMDZBMDAwMDAzRTAwMDA4MjdCRDAwMjgwRTAwMDUyRjAwMDAwMDAwNEQKLToxMDZBMTAwMDAwNDA4ODIxMDIyMDEwMjE4RkJGMDAyMDhGQjMwMDFDNkUKLToxMDZBMjAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4N0YKLToxMDZBMzAwMDI3QkQwMDI4MDAwNDI0MDAzQzAzNjAwMEFDNjAzRDA4MzIKLToxMDZBNDAwMDEwQTAwMDAyMzQ4MjEwMDYzNDgyMTAxNjAzRTAwMDA4MDEKLToxMDZBNTAwMEFDNjIzRDA0MjdCREZGRTBBRkIwMDAxMDMwOTAwMEZGRjYKLToxMDZBNjAwMDJFMDIwMDA2QUZCRjAwMTgxMDQwMDAwOEFGQjEwMDE0OUUKLToxMDZBNzAwMDAwMTAzMDgwM0MwMzA4MDAyNDYzNTFGNDAwQzMyODIxMzcKLToxMDZBODAwMDhDQTQwMDAwMDA4MDAwMDgwMDAwMDAwMDAwMDAyMDIxMEQKLToxMDZBOTAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxM0MKLToxMDZBQTAwMDAzRTAwMDA4MjdCRDAwMjA5NzkxMDAxNjE2MjAwMDUxMzIKLToxMDZBQjAwMDAwMDAyMDIxM0MwMjA4MDA5MDQyMDAzMzBBMDAwNjBBMzAKLToxMDZBQzAwMDAwMDAwMDAwOTc4RDAwMTIxNUEwMDAzMTAwMDAyMDIxNjkKLToxMDZBRDAwMDBBMDAwNjBBMjQwMjAwMDg5Nzg3MDAxMDE0RTAwMDFBMzIKLToxMDZBRTAwMDAwMDAxODIxMDA2MDIwMjEyNDAyMDAwMTEwODBGRkU5MkQKLToxMDZBRjAwMDhGQkYwMDE4MDAwNDI5QzIwMDQ1MzAyMTAwQTY1ODJCODIKLToxMDZCMDAwMDExNjBGRkU0M0MwODgwMDAzQzA3MjAwMDAwMDU2OUMwREMKLToxMDZCMTAwMDAxQTc2MDI1QUQwQzAwMjAzQzAzODAwODI0MDIwMDFGNjMKLToxMDZCMjAwMDI0NDJGRkZGQUM2MDAwMDAwNDQxRkZGRDI0NjMwMDA0MjkKLToxMDZCMzAwMDI0QTUwMDAxMDBBNjcwMkIxNUMwRkZGNTAwMDU2OUMwNTMKLToxMDZCNDAwMDBBMDAwNUY0OEZCRjAwMTg5Nzg3MDAwODNDMDQwODAwNkUKLToxMDZCNTAwMDI0ODQ1NEIwMjQwNTA0MDAwRTAwMDVBRjI0MDYwMDAxNkYKLToxMDZCNjAwMDk3OEIwMDEwMjQ0NDAwMDEzMDhBRkZGRjI1NjlGRkZGNDYKLToxMDZCNzAwMDJENDgwNDAwMDA0MDI4MjExNTAwMDA0MEE3ODkwMDEwN0UKLToxMDZCODAwMDI0QUMzODAwMDAwQzE5QzAwQTAwMDYwOEE3ODAwMDA4RDEKLToxMDZCOTAwMDk3ODcwMDBBM0MwNDA4MDAyNDg0NTUzMDI0MDUwNDAwMkIKLToxMDZCQTAwMDBFMDAwNUFGMjQwNjAwMDE5Nzk5MDAxMjI0NDQwMDAxNEQKLToxMDZCQjAwMDMwOThGRkZGMjcyRkZGRkYyRjBFMDQwMDAwNDA4ODIxOTEKLToxMDZCQzAwMDE1QzAwMDJDQTc4RjAwMTJBNzgwMDAwQTNBMDIwMDAzMEMKLToxMDZCRDAwMDI2MjQwMTAwMzA4NEZGRkYwRTAwMDVEQzJDNDUwMDAxNTcKLToxMDZCRTAwMDAwMTFGOEMwMjdGMDAxMDAwMDEwMjFDMDBBMDAwNjBBQjkKLToxMDZCRjAwMDI0MDIwMDA4OTc4NTAwMUE5Nzg3MDAwRTNDMDQwODAwQkQKLToxMDZDMDAwMDI0ODQ1NUIwMEUwMDA1QUYyNDA2MDAwMTk3ODcwMDE2QjYKLToxMDZDMTAwMDhGODkwMDE4MjQ0NTAwMDEzMEE4RkZGRjI0RTNGRkZGRkYKLToxMDZDMjAwMDAxMDkzMDJCMDA0MDgwMjExNEMwMDAxOEE3ODMwMDE2RjIKLToxMDZDMzAwMEE3ODAwMDBFOTc4NTAwMUMwRTAwMEUxRTAyMDAyMDIxNkEKLToxMDZDNDAwMDI0NEEwNTAwMzE0NEZGRkYwRTAwMDVEQzI0MDUwMDAxNDUKLToxMDZDNTAwMDNDMDUwODAwOTRBNTAwMzIwRTAwMEUxRTAyMDAyMDIxMDMKLToxMDZDNjAwMDI0NDUyMTAwM0MwMjA4MDA5MDQyMDAzMzBBMDAwNjBBMzUKLToxMDZDNzAwMDAwMDUyMUMwMEEwMDA2NDJBNzg0MDAwQTI0QUMzODAwOUYKLToxMDZDODAwMDAwMEMxOUMwMEEwMDA2MDhBNzg0MDAwODBBMDAwNjVDNjgKLToxMDZDOTAwMEE3ODUwMDBFMzA4NDAwRkYyN0JERkZFODJDODIwMDA2ODgKLToxMDZDQTAwMEFGQkYwMDE0QUZCMDAwMTAxMDQwMDAxNTAwQTAzODIxOTUKLToxMDZDQjAwMDAwMDQ0MDgwM0MwMzA4MDAyNDYzNTIwQzAxMDMyODIxOTcKLToxMDZDQzAwMDhDQTQwMDAwMDA4MDAwMDgwMDAwMDAwMDI0Q0MwMDdGOUQKLToxMDZDRDAwMDAwMDc1MUMyMDAwQzU5QzIzMTcwRkZGRjI1NDdDNDAwQTQKLToxMDZDRTAwMDMwRTVGRkZGMjc4NDAwMDgwMjAwMzAyMTBFMDAwNTA0NzQKLToxMDZDRjAwMDI0MDcwMDAxOTc4NjAwMTQwMjA2MjAyMUE3ODQwMDE0QUYKLToxMDZEMDAwMDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4RUIKLToxMDZEMTAwMDNDMDUwODAwOENBNTAwMzAwMDA3NzlDMjBFMDAwMkU2OTEKLToxMDZEMjAwMDI1RTRERjAwMzA0NUZGRkYzQzA0MDgwMDI0ODQ1NUIwMTMKLToxMDZEMzAwMDI0MDYwMDAxMEUwMDA1MDQyNDA3MDAwMTk3OEUwMDE2QUEKLToxMDZENDAwMDhGQkYwMDE0OEZCMDAwMTAyNUNEMDAwMTI3QkQwMDE4QTMKLToxMDZENTAwMDAzRTAwMDA4QTc4RDAwMTYwMDA3QzlDMjI3MzhGRjAwMEUKLToxMDZENjAwMDAwMTg3OEMyMzFGMEZGRkYzQzA0MDgwMDI0ODQ1NTMwM0QKLToxMDZENzAwMDAyMDAyODIxMjQwNjAwMDEwRTAwMDUwNDI0MDcwMDAxNUEKLToxMDZEODAwMDk3OEQwMDEyMjYwRTAxMDAwMDBFODQwMDI1QUMwMDAxMzQKLToxMDZEOTAwMDNDMEI2MDAwQTc4QzAwMTJBRDYwM0QwODM2MDQwMDA2NzUKLToxMDZEQTAwMDAwMDAzMDIxM0MwNzYwMDA4Q0UyM0QwNDMwNUYwMDA2QUIKLToxMDZEQjAwMDE3RTBGRkZEMjRDOTAwMDEwMDA2MUIwMDMxMjYwMEZGN0IKLToxMDZEQzAwMDAwNjQ0MDI1MkNDNTAwMDRBQ0U4M0QwNDE0QTBGRkY2ODcKLToxMDZERDAwMDhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDE4MUIKLToxMDZERTAwMDAwMDc1MUMyMjU0OUM4MDAyNDA2MDAwMTI0MDcwMDAxRkMKLToxMDZERjAwMDNDMDQwODAwMjQ4NDU0QjAwRTAwMDUwNDMxMjVGRkZGMzQKLToxMDZFMDAwMDk3ODcwMDEwOEZCRjAwMTQ4RkIwMDAxMDI0RTYwMDAxOTgKLToxMDZFMTAwMDI3QkQwMDE4MDNFMDAwMDhBNzg2MDAxMDMwODRGRkZGOUMKLToxMDZFMjAwMDMwQTVGRkZGM0MwNjgwMDA4Q0MyMDFCODA0NDBGRkZFODUKLToxMDZFMzAwMDNDMDg0MDgwMDA4ODM4MjUzQzAzMTAwMEFDQzAwMTgwMkQKLToxMDZFNDAwMEFDQzUwMTg0QUNDNzAxODgwM0UwMDAwOEFDQzMwMUI4M0QKLToxMDZFNTAwMDMwODRGRkZGM0MwNjgwMDA4Q0MyMDFCODA0NDBGRkZFNzYKLToxMDZFNjAwMDNDMDg0MDM4OENBNzAwMDAwMDg4MjgyNTNDMDMxMDAwMEYKLToxMDZFNzAwMEFDQzcwMTgwQUNDNTAxODgwM0UwMDAwOEFDQzMwMUI4MTEKLToxMDZFODAwMDhGODMwMDU4OEY4NjAwNTAxMDY2MDAwQjAwODA0MDIxRDEKLToxMDZFOTAwMDNDMDcwODAwMjRFNzU1QzAwMDAzMjhDMDAwQTcxMDIxQzQKLToxMDZFQTAwMDhDNDQwMDAwMjQ2MzAwMDExMDg4MDAwNTMwNjMwMDBGNEIKLToxMDZFQjAwMDU0NjZGRkZBMDAwMzI4QzAwM0UwMDAwODAwMDAxMDIxMTgKLToxMDZFQzAwMDNDMDcwODAwMjRFNzU1QzQwMEE3MzAyMTAzRTAwMDA4NzAKLToxMDZFRDAwMDhDQzIwMDAwM0MwMzkwMDAzNDYyMDAwMTAwODIyMDI1MzcKLToxMDZFRTAwMDNDMDM4MDAwQUM2NDAwMjA4QzY1MDAyMDA0QTBGRkZFMDEKLToxMDZFRjAwMDAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDI4MDAwRTkKLToxMDZGMDAwMDM0NDMwMDAxMDA4MzIwMjUwM0UwMDAwOEFDNDQwMDIwNDYKLToxMDZGMTAwMDI3QkRGRkUwQUZCMTAwMTQzMDkxRkZGRkFGQjAwMDEwMEMKLToxMDZGMjAwMEFGQkYwMDE4MTIyMDAwMTIwMEEwODAyMThDQTUwMDAwMjUKLToxMDZGMzAwMDE0QTAwMDExMjQwNDAwMDIzQzA2ODAwMDhDQzIwMUI4OTkKLToxMDZGNDAwMDA0NDBGRkZFM0MwNzQwMDAwMjI3MjAyNThGQkYwMDE4QTkKLToxMDZGNTAwMDhGQjEwMDE0OEZCMDAwMTAzQzAzMTAwMDI3QkQwMDIwM0IKLToxMDZGNjAwMEFDQzUwMTgwQUNDNDAxODgwM0UwMDAwOEFDQzMwMUI4MjMKLToxMDZGNzAwMDBBMDAwNzFEOENBNTAwMDAwRTAwMDY3NDI0MDYwMjAwRkUKLToxMDZGODAwMDAwMDAyODIxMEEwMDA3MURBRTAwMDAwMDMwODdGRkZGMjcKLToxMDZGOTAwMDNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRTNDMEE0MDA2NUIKLToxMDZGQTAwMDhDQTkwMDAwMDBFQTQwMjVBQ0M5MDE4MDhDQTQwMDA0MzMKLToxMDZGQjAwMDNDMDMxMDAwQUNDNDAxODRBQ0M4MDE4ODAzRTAwMDA4QTUKLToxMDZGQzAwMEFDQzMwMUI4OEY4M0ZEOTQyN0JERkZFOEFGQkYwMDE0QTkKLToxMDZGRDAwMEFGQjAwMDEwOTA2NzAwMDgwMDgwMTAyMTAwODAyODIxQzkKLToxMDZGRTAwMDMwRTYwMDQwMDAwMDIwMjExMEMwMDAwODhDNTAwMDAwNTYKLToxMDZGRjAwMDBFMDAwMDg4MDIwMDIwMjEwMjAwMjAyMThGQkYwMDE0MTMKLToxMDcwMDAwMDhGQjAwMDEwMEEwMDA0OTcyN0JEMDAxODBFMDAwNzMyNDkKLToxMDcwMTAwMDAwMDAwMDAwMEUwMDAwODgwMjAwMjAyMTAyMDAyMDIxNTQKLToxMDcwMjAwMDhGQkYwMDE0OEZCMDAwMTAwQTAwMDQ5NzI3QkQwMDE4MEUKLToxMDcwMzAwMDI3QkRGRkUwQUZCMDAwMTA4RjkwRkQ5NEFGQkYwMDFDRTQKLToxMDcwNDAwMEFGQjIwMDE4QUZCMTAwMTQ5MjA2MDAwMTAwODA4ODIxOTEKLToxMDcwNTAwMDBFMDAwNzA0MzBEMjAwMDQ5MjA0MDAwNTAwMTEyOUMyN0EKLToxMDcwNjAwMEE2MDUwMDAwMzQ4MzAwNDBBMjAzMDAwNTBFMDAwNzBFQjEKLToxMDcwNzAwMDAyMjAyMDIxMEUwMDA0OTkwMjIwMjAyMTI0MDIwMDAxNzgKLToxMDcwODAwMEFFMDIwMDBDMDIyMDI4MjFBNjAyMDAxMDI0MDQwMDAyRjcKLToxMDcwOTAwMEE2MDIwMDEyMjQwNjAyMDBBNjAyMDAxNDBFMDAwNjc0QzYKLToxMDcwQTAwMEE2MDIwMDE2MTY0MDAwMEY4RkJGMDAxQzk3OEMwMDU0REMKLToxMDcwQjAwMDNDMEIwODAwOEQ2QjAwNzgyNTg4RkZGRjMxMDlGRkZGMkUKLToxMDcwQzAwMDI1NkEwMDAxMDEyQTM4MkIxMEUwMDAwNkE3ODgwMDU0MjkKLToxMDcwRDAwMDNDMEY2MDA2MjQwRTAwMTYzNUVEMDAxMEFEQUUwMDUwREEKLToxMDcwRTAwMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwM0EKLToxMDcwRjAwMDAzRTAwMDA4MjdCRDAwMjAyN0JERkZFMEFGQjEwMDE0NkEKLToxMDcxMDAwMEFGQkYwMDE4QUZCMDAwMTAxMDgwMDAwNDAwQTA4ODIxQUQKLToxMDcxMTAwMDI0MDIwMDgwMTA4MjAwMDcwMDAwMDAwMDAwMDAwMDBEMjMKLToxMDcxMjAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4NkIKLToxMDcxMzAwMDI3QkQwMDIwMEUwMDA3MDQwMEEwMjAyMThGODZGRDk0QUIKLToxMDcxNDAwMDAyMjAyMDIxOTBDNTAwMDUwRTAwMDcwRTMwQjAwMEZGODAKLToxMDcxNTAwMDI0MDMwMDNFMTYwM0ZGRjEwMDAwMDAwMDNDMDU4MDAwMDAKLToxMDcxNjAwMDhDQTQwMTc4MDQ4MEZGRkUyNDA4MDAwNzNDMDcxMDAwNkYKLToxMDcxNzAwMEFDQjEwMTQwMDIyMDIwMjFBMEE4MDE0NDhGQkYwMDE4MUIKLToxMDcxODAwMDhGQjEwMDE0OEZCMDAwMTBBQ0E3MDE3ODBBMDAwNzVCMjQKLToxMDcxOTAwMDI3QkQwMDIwMjdCREZGRTBBRkIwMDAxMEFGQkYwMDE4MzMKLToxMDcxQTAwMEFGQjEwMDE0M0MxMDgwMDA4RTExMDAyMDAwMDAwMDAwRTAKLToxMDcxQjAwMDBFMDAwNDk5QUUwNDAwMjBBRTExMDAyMDhGQkYwMDE4MEQKLToxMDcxQzAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMkQKLToxMDcxRDAwMDMwODRGRkZGM0MwNjgwMDA4Q0MyMDFCODA0NDBGRkZFRjMKLToxMDcxRTAwMDNDMDg0MDM1MDA4ODM4MjUzQzAzMTAwMEFDQzUwMTgwQzAKLToxMDcxRjAwMEFDQzAwMTg0QUNDNzAxODgwM0UwMDAwOEFDQzMwMUI4OEYKLToxMDcyMDAwMDMwODRGRkZGM0MwNjgwMDA4Q0MyMDFCODA0NDBGRkZFQzIKLToxMDcyMTAwMDNDMDg0MDM2MDA4ODM4MjUzQzAzMTAwMEFDQzUwMTgwOEUKLToxMDcyMjAwMEFDQzAwMTg0QUNDNzAxODgwM0UwMDAwOEFDQzMwMUI4NUUKLToxMDcyMzAwMDI3QkRGRkQwQUZCNTAwMjQzMDk1RkZGRkFGQjYwMDI4QzMKLToxMDcyNDAwMEFGQjQwMDIwQUZCRjAwMkNBRkIzMDAxQ0FGQjIwMDE4MkEKLToxMDcyNTAwMEFGQjEwMDE0QUZCMDAwMTAzMEI2RkZGRjEyQTAwMDI3OEUKLToxMDcyNjAwMDAwMDBBMDIxOEY5MjAwMzg4RTQzMDAwMDNDMDY4MDAwNzEKLToxMDcyNzAwMDI0MDIwMDQwMDAwMzNFMDIwMDAzMkMwMjMwRTQwMDdGQTEKLToxMDcyODAwMDAwNjY5ODI0MTQ4MjAwMUQzMEE1MDBGRjhGODMwMDQ4RkIKLToxMDcyOTAwMDJDNjgwMDBBNTEwMDAwMTA4Rjg2MDAzMDAwMDM1ODgwQ0YKLToxMDcyQTAwMDNDMEMwODAwMjU4QzUyMjgwMTZDNTAyMThENDkwMDAwQUYKLToxMDcyQjAwMDAxMjAwMDA4MDAwMDAwMDAwMkQ0NzAyMTMxQzVGRkZGNEEKLToxMDcyQzAwMDBFMDAwNkQ2MjQwNDAwODQxNjYwMDAwMjhGOTIwMDM4NTcKLToxMDcyRDAwMEFGODAwMDQ4OEY4NjAwMzAyNjRGMDAyMDI2ODkwMDAxQUQKLToxMDcyRTAwMDAxRTA5MDIxMzEzNEZGRkYxNEMwMDAwNEFGOEYwMDM4NUIKLToxMDcyRjAwMDAyOTUyODJCMTRBMEZGREMwMDAwMDAwMDAyODAxMDIxNjIKLToxMDczMDAwMDhGQkYwMDJDOEZCNjAwMjg4RkI1MDAyNDhGQjQwMDIwQ0IKLToxMDczMTAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMTMKLToxMDczMjAwMDAzRTAwMDA4MjdCRDAwMzAyNDA3MDAzNDE0QTcwMTQ2RkQKLToxMDczMzAwMDAwMDAwMDAwOTI0NzAwMEU4Rjk4RkQ5ODhGOTBGRDk0RkEKLToxMDczNDAwMDI0MEYxNjAwQTMwNzAwMTk5MjQ0MDAwRDNDMDg4MDAwOEEKLToxMDczNTAwMDNDMDc4MDBDQTMwNDAwMTg5NjVGMDAxMjNDMDk2MDAwRjMKLToxMDczNjAwMDNDMTE3RkZGQTYxRjAwNUM5NjU5MDAxMDM2MjJGRkZGREMKLToxMDczNzAwMDI0MDQwMDA1MzMyNUZGRkZBRTA1MDA1NDhFNDYwMDFDOTMKLToxMDczODAwMEFEMEYwMDI4OENFRTAwMDA4RDJENDQ0ODAxQzYxODI2NTQKLToxMDczOTAwMDAxQTMzMDIxQUUwNjAwMzg4RTBDMDAzODI0Q0EwMDAxNEIKLToxMDczQTAwMDNDMEQ3RjAwQUUwQzAwM0M4RTBCMDAzQ0FGMEIwMDA0OEMKLToxMDczQjAwMEFFMEEwMDIwOEUxMzAwMjBBRTEzMDAxQ0EzMDAwMDFCOTkKLToxMDczQzAwMEFFMDIwMDJDQTMwNDAwMTI4RTVGMDAxNDI0MTMwMDUwQTAKLToxMDczRDAwMEFFMUYwMDM0OEUxOTAwMzRBRjE5MDAxNDhFNDUwMDE4MEEKLToxMDczRTAwMEFFMDUwMDQ4OTI0RjAwMENBMjBGMDA0RTkyMDkwMDA4MTMKLToxMDczRjAwMDM1MkUwMDIwQTIwRTAwMDg4RTAzMDAxODAwNkQ2MDI0QjgKLToxMDc0MDAwMDM1OEI0MDAwQUUwQjAwMTg5MjBBMDAwMDMxNTIwMEZGOEQKLToxMDc0MTAwMDEyNTMwMkE2MjQxM0ZGODAzQzA0MDgwMDI0ODQ1NjQwMjMKLToxMDc0MjAwMDBFMDAwNzQwMDAwMDAwMDAyNDBDMDAwNDI0MDgwMDAxQTYKLToxMDc0MzAwMDNDMDUwODAwOENBNTU2NDAzQzA0ODAwMEEyMEMwMDI1QTkKLToxMDc0NDAwMEEyMDgwMDA1OEM5MDAxNzgwNjAwRkZGRThGOTIwMDM4OUMKLToxMDc0NTAwMDI0MEQwMDAyM0MwMzEwMDBBQzg1MDE0MEEwOEQwMTQ0QzYKLToxMDc0NjAwMEFDODMwMTc4MEEwMDA4MDRBRjgwMDA0ODJDQUQwMDM3RDcKLToxMDc0NzAwMDExQTBGRjk5OEY4NjAwMzAwMDA1ODA4MDNDMTEwODAwMjQKLToxMDc0ODAwMDI2MzE1MjUwMDIxMTc4MjE4REVFMDAwMDAxQzAwMDA4MTMKLToxMDc0OTAwMDAwMDAwMDAwMjQxMDAwMDQxNEIwMDA4RTNDMDc4MDAwOUYKLToxMDc0QTAwMDNDMEIwODAwOEQ2QjU2NDA4Rjg2RkQ5NEFDRUIwMDIwQTIKLToxMDc0QjAwMDhFNDMwMDA4OEY4RkZEOTgyNDBFMDA1MEFDQzMwMDMwMUYKLToxMDc0QzAwMDhFNEEwMDA4QUNDQTAwNTA4RTQyMDAwQ0FDQzIwMDM0OTgKLToxMDc0RDAwMDhFNDQwMDEwQUNDNDAwMzg4RTVGMDAxMEFDREYwMDU0NDYKLToxMDc0RTAwMDhFNTkwMDE0QUNEOTAwM0M4RTU4MDAxOEFERjgwMDA0MzkKLToxMDc0RjAwMDhFNTEwMDFDQUNEMTAwMjA5MEM1MDAwMDMwQTkwMEZGQzcKLToxMDc1MDAwMDExMkUwMjc2MDAwMDAwMDA4Q0M1MDAzNDhDRDEwMDMwQjIKLToxMDc1MTAwMDAwQjEzMDIzMDRDMDAwRjMyNDA0MDA4QzEyNjAwMEYwOUEKLToxMDc1MjAwMDI0MDIwMDAzMEEwMDA4MDRBRjgyMDA0ODI0MEYwMDA1NkIKLToxMDc1MzAwMDE0QUYwMDY4M0MwQjgwMDAzQzAzMDgwMDhDNjM1NjQwOEQKLToxMDc1NDAwMDhGODZGRDk0QUQ2MzAwMjA4RTRBMDAwNDhGOTlGRDk4Q0MKLToxMDc1NTAwMDI0MDcyMDAwQUNDQTAwMUM5MjQyMDAwODI0MTIwMDA4MzQKLToxMDc1NjAwMEEzMjIwMDE5OEY4NDAwMzg5MDlGMDAwOUEzM0YwMDE4QzAKLToxMDc1NzAwMDhGODUwMDM4OTBCODAwMEEzMzA0MDBGRjEwOTIwMDEwODUKLToxMDc1ODAwMDI4OEMwMDA5MTU4MDAwQkMyNDA4MDAwMjI0MEUwMDIwNkQKLToxMDc1OTAwMDEwOEUwMDBCMzQwNzgwMDAyODg5MDAyMTE1MjAwMDA4NzgKLToxMDc1QTAwMDI0MDc0MDAwMjQxMTAwNDAxMDkxMDAwNTNDMDcwMDAxMTEKLToxMDc1QjAwMDI0MEYwMDgwMTA4RjAwMDIzQzA3MDAwMjI0MDc0MDAwQzcKLToxMDc1QzAwMDhDREYwMDE4M0MwNEZGMDAwM0U0QzgyNDAzMjdDMDI1MTcKLToxMDc1RDAwMEFDRDgwMDE4OTBCMjAwMEJBMEQyMDAyNzhGODMwMDM4REYKLToxMDc1RTAwMDk0NjUwMDBDMTBBMDAyMkEwMDAwMDAwMDk0NjcwMDBDQjMKLToxMDc1RjAwMDNDMTk4MDAwMjQwQkZGQkZBNEM3MDA1QzkwNjIwMDBFMDIKLToxMDc2MDAwMDI0MDcwMDA0QTBDMjAwMDg4Rjg0MDAzODkwOUYwMDBGNTgKLToxMDc2MTAwMEEwREYwMDA5OEY4QzAwMzg4RDkyMDAxMDhGMzgwMDc0MjUKLToxMDc2MjAwMDAyNTgyODIzQUNDNTAwNTg4RDhGMDAxNEFDQ0YwMDJDMTUKLToxMDc2MzAwMDk1OTEwMDE4MzIyOUZGRkZBQ0M5MDA0MDk1OEUwMDFBQzEKLToxMDc2NDAwMDMxRDBGRkZGQUNEMDAwNDQ4RDhEMDAxQ0FDQ0QwMDQ4ODQKLToxMDc2NTAwMDk1ODgwMDAyQTRDODAwNzg5MTgzMDAwRUEwQzMwMDA4OUEKLToxMDc2NjAwMDkwQ0EwMDA4MDE0QjEwMjQxMjYwMDFENEEwQzIwMDA4ODcKLToxMDc2NzAwMDhGOTIwMDM4MEEwMDA4MDRBRjg3MDA0ODI0MDYwMDA2RUQKLToxMDc2ODAwMDE0QTYwMDE0M0MwRDgwMDAzQzEwMDgwMDhFMTA1NjQwREIKLToxMDc2OTAwMDhGOENGRDkwQURCMDAwMjA4RTQ4MDAxODhGODZGRDk0MzEKLToxMDc2QTAwMDhGOEFGRDk4QUQ4ODAwMDA4Q0MzMDAzODI0MDQwMDA1NDMKLToxMDc2QjAwMEFEODMwMDA0OENDQjAwM0MxMjYwMDA4MUFENEIwMDAwMTgKLToxMDc2QzAwMDBBMDAwODA0QUY4NDAwNDgyNDBFMDAwNzEwQUUwMDRCRTcKLToxMDc2RDAwMDI0MDQwMDA2M0MwNTA4MDAyNEE1NTY0MDBFMDAwNzEzQUMKLToxMDc2RTAwMDI0MDQwMDgxOEY5MjAwMzgwMDEzMTAyQjBBMDAwODA0MzQKLToxMDc2RjAwMEFGODIwMDQ4MjQxOTAwMjMxNEI5RkZGNjNDMEI4MDAwMjgKLToxMDc3MDAwMDNDMEMwODAwOEQ4QzU2NDA4RjhBRkQ5OEFENkMwMDIwOTMKLToxMDc3MTAwMDhGOTFGRDk0OEU0NjAwMDQyNTQ0MDAyMDI2NDUwMDE0RDgKLToxMDc3MjAwMEFFMjYwMDI4MjQwNjAwMDMwRTAwMEUyQTI1NTAwMDMwNDUKLToxMDc3MzAwMDhGODcwMDM4MDIwMDIwMjEyNDA2MDAwMzBFMDAwRTJBNDUKLToxMDc3NDAwMDI0RTUwMDA4M0MwNDA4MDAyNDg0NTY0MDBFMDAwNzQwNEQKLToxMDc3NTAwMDAwMDAwMDAwOTIyMjAwMDAyNDFGMDA1MDMwNDQwMEZGNkYKLToxMDc3NjAwMDU0OUZGRkUxOEY5MjAwMzgwRTAwMEUxNTAwMDAwMDAwQkMKLToxMDc3NzAwMDBBMDAwOTA5OEY5MjAwMzgyNDAzMDAzMzE0QTMwMDMyNTEKLToxMDc3ODAwMDNDMDI4MDAwM0MxMTA4MDA4RTMxNTY0MDhGOEVGRDk4REYKLToxMDc3OTAwMEFDNTEwMDIwOEU0NDAwMDgyNDA5MDAyODhGODhGRDk0RjUKLToxMDc3QTAwMEFEQzQwMDMwOEU1RjAwMEMyNDA2MDAwOUFEREYwMDM0NEMKLToxMDc3QjAwMDhFNTkwMDEwQUREOTAwMzg4RTU4MDAxNEFERDgwMDIwNzUKLToxMDc3QzAwMDhFNDUwMDE4QURDNTAwMjQ4RTRGMDAxQ0FEQ0YwMDI4OUIKLToxMDc3RDAwMEExQzkwMDExOEU0RDAwMDQxMjYwMDAzMUFEMEQwMDI4Q0EKLToxMDc3RTAwMDhGOTIwMDM4MEEwMDA4MDRBRjg2MDA0ODI0MDkwMDIyNUUKLToxMDc3RjAwMDE0QTlGRkI4MDAwMDAwMDAyNDA0MDAwNzNDMEYwODAwOTMKLToxMDc4MDAwMDhERUY1NjQwM0MxMTgwMDBBRTJGMDAyMDU2NjBGRUIxMzcKLToxMDc4MTAwMEFGODQwMDQ4M0MwNDA4MDAyNDg0NTY0MDBFMDAwNzQwMTIKLToxMDc4MjAwMDI0MTMwMDUwOEY5OEZEOTQ5MzEyMDAwMDMyNDUwMEZGRkUKLToxMDc4MzAwMDEwQjMwMTY5MDAwMDAwMDA4RjkyMDAzODAwMDAyMDIxODEKLToxMDc4NDAwMDBBMDAwODA0QUY4NDAwNDgzQzA1MDgwMDI0QTU1NjQwRkYKLToxMDc4NTAwMDBFMDAwNkUzMjQwNDAwODEwQTAwMDkwOThGOTIwMDM4MTMKLToxMDc4NjAwMDAyRDQ5ODIxMzI2NUZGRkYwRTAwMDZENjI0MDQwMDg0NUUKLToxMDc4NzAwMDBBMDAwODA0OEY5MjAwMzgxMDg4RkY1MTI0MDcwNDAwODIKLToxMDc4ODAwMDI4ODcwMDAzMTBFMDAxQTMyNDEwMDAwNDI0MEQwMDAxNDgKLToxMDc4OTAwMDU0OERGRjRCMjQwNzQwMDAwQTAwMDhCRjI0MDcwMTAwNTUKLToxMDc4QTAwMDNDMDUwODAwMjRBNTU2NDAwRTAwMDczMjI0MDQwMDgyM0YKLToxMDc4QjAwMDhGOTIwMDM4MDAwMDMwMjEwQTAwMDgwNEFGODYwMDQ4OEIKLToxMDc4QzAwMDNDMDQwODAwMjQ4NDU2NDA4Q0MyMDAzODBFMDAwNzQwNTcKLToxMDc4RDAwMDhDQzMwMDNDOEY5MjAwMzgwQTAwMDk1RjAwMDAyMDIxMTEKLToxMDc4RTAwMDI0MDQwMDgyM0MwNTA4MDAyNEE1NTY0MDBFMDAwNzMyRkYKLToxMDc4RjAwMDAwMDAwMDAwOEY5MjAwMzgwMDAwMTAyMTBBMDAwODA0RTgKLToxMDc5MDAwMEFGODIwMDQ4OEU1MDAwMDQ4RjkxRkQ5NDNDMEE4MDAwQTUKLToxMDc5MTAwMEFENTAwMDIwOTIyMjAwMDUwMjAwMjgyMTMwNDYwMDAyQ0UKLToxMDc5MjAwMDE0QzAwMTgwMjQwNDAwOEE4RjkyRkQ5ODAyMDAyODIxNEYKLToxMDc5MzAwMDI0MDQwMDhEOTI0QjAwMUIzMTYzMDAyMDE0NjAwMTc5RjgKLToxMDc5NDAwMDAwMDAwMDAwOTIyRDAwMDkyNDBDMDAxMjMxQTgwMEZGNTUKLToxMDc5NTAwMDExMEMwMTc0MjQwNDAwODEwRTAwMDcwNDAyMDAyMDIxOTAKLToxMDc5NjAwMDkyNDUwMDFCMjQwRTAwMDQwMjAwMjAyMTM0QTkwMDQyOEQKLToxMDc5NzAwMEEyNDkwMDFCMEUwMDA3MEVBMjJFMDAyNTNDMDQ4MDAwMjkKLToxMDc5ODAwMDhDOTEwMTc4MDYyMEZGRkUyNDE4MDAwMkFDOTAwMTQwODMKLToxMDc5OTAwMEEwOTgwMTQ0OEY5MjAwMzgzQzBGMTAwMEFDOEYwMTc4MDIKLToxMDc5QTAwMDBBMDAwOTBBMDAxMzEwMkI4RTUwMDAwNDhGOTFGRDk0RDkKLToxMDc5QjAwMDNDMUY4MDAwQUZGMDAwMjA5MjM5MDAwNTAyMDAyODIxMTIKLToxMDc5QzAwMDMzMjcwMDAyMTRFMDAwMTcyNDA0MDA4QTkyMjQwMDA5REYKLToxMDc5RDAwMDI0MTIwMDA0MDIwMDI4MjEzMDg2MDBGRjEwRDIwMDExN0EKLToxMDc5RTAwMDI0MDQwMDgxMEUwMDA3MDQwMjAwMjAyMThGOENGRDk4RTIKLToxMDc5RjAwMDI0MEIwMDEyMjQwM0ZGRkU5MThEMDAxQjAyMDAyMDIxQTYKLToxMDdBMDAwMDM1QTgwMDIwQTE4ODAwMUJBMjJCMDAwOTkyMkEwMDA1OUUKLToxMDdBMTAwMDAxNDMxMDI0MEUwMDA3MEVBMjIyMDAwNTAyMDAyODIxQjcKLToxMDdBMjAwMDAwMDAyMDIxMEUwMDA3Q0YwMDAwMDAwMDBBMDAwOTA5MTUKLToxMDdBMzAwMDhGOTIwMDM4OEU1MTAwMDQzQzAyODAwMDNDMTAwODAwRjgKLToxMDdBNDAwMDI2MTA1NjQwQUM1MTAwMjAzQzAxMDgwMEFDMzE1NjQwOTUKLToxMDdBNTAwMDkyNDYwMDAzMzBDNDAwMDQxMDgwMDE2NThGODRGRDk0QjkKLToxMDdBNjAwMDI0MDIwMDA2QTA4MjAwMDk5MjREMDAxQjI0MDhGRkMwREEKLToxMDdBNzAwMDMxQUMwMDNGMDE4ODU4MjVBMDhCMDAwODkyNDMwMDAzRDkKLToxMDdBODAwMDMwNkEwMDAxMTU0MDAxNUMwMDAwMDAwMDhFNDIwMDA4RDEKLToxMDdBOTAwMEFFMDIwMDA4M0MwMjA4MDA4QzQyNTY0ODEwNDAwMTVCRDAKLToxMDdBQTAwMDhGOEVGRDk4MDAwMjgxQzI4Rjg1RkQ5NEE1RDAwMDBDQjkKLToxMDdBQjAwMDhFNUYwMDBDMjQwRjAwMDEyNDA5MDAxNEFEREYwMDJDQTAKLToxMDdBQzAwMDhFNTkwMDEwQUREOTAwMUM5NjQ3MDAxNkE1QzcwMDNDODIKLToxMDdBRDAwMDk2NTgwMDE0QTVEODAwM0VBQ0FGMDAwQ0E0QUYwMDEwMUYKLToxMDdBRTAwMEE0QUYwMDEyQTRBRjAwMTRBNEFGMDAxNjEyNjAwMTVGOEYKLToxMDdBRjAwMEExQzkwMDExOTI0NDAwMDMzMDkyMDAwMjJFNTMwMDAxRUMKLToxMDdCMDAwMDhGOTIwMDM4MjY2MjAwMDgwQTAwMDgwNEFGODIwMDQ4RkQKLToxMDdCMTAwMDhFNDYwMDA0M0MwNTgwMDAzQzA0ODAwOEFDQTYwMDIwOTIKLToxMDdCMjAwMDhFNDcwMDA4OTA4OTAwMDAyNDExMDA1MDMxMjIwMEZGODgKLToxMDdCMzAwMDEwNTEwMEI4MjQwNTAwODgzQzA0ODAwMDhDOEYwMUI4RTcKLToxMDdCNDAwMDA1RTBGRkZFMDAxMzgwMkIzQzE4NDAwOTAwQjgxMDI1MEIKLToxMDdCNTAwMEFGOTAwMDQ4M0MxMDEwMDBBQzg2MDE4MEFDODcwMTg0RDcKLToxMDdCNjAwMEFDODIwMTg4QUM5MDAxQjgwQTAwMDgwNThGODYwMDMwMEQKLToxMDdCNzAwMDhFNDUwMDA0M0MwNjgwMDAzQzA5ODAwOEFDQzUwMDIwMEUKLToxMDdCODAwMDkxM0YwMDAwMjQwNDAwNTAzM0Y5MDBGRjEzMjQwMEIwOUIKLToxMDdCOTAwMDI0MDYwMDg4M0MwNDgwMDA4QzhBMDFCODA1NDBGRkZFNjIKLToxMDdCQTAwMDNDMEU0MDBFMDBDRTY4MjUzQzA4MTAwMEFDODUwMTgwREMKLToxMDdCQjAwMEFDODAwMTg0QUM4RDAxODhBQzg4MDFCODkxMkIwMDAwQTkKLToxMDdCQzAwMDI0MENGRjgwMjQwNDAwMDQwMTZDMTgyNTI0MDYwMDMwRDYKLToxMDdCRDAwMDBFMDAwNjc0QTEyMzAwMDAwQTAwMDkwOThGOTIwMDM4RTQKLToxMDdCRTAwMDhFNTAwMDA0OEY5MUZEOTgzQzBGODAwMEFERjAwMDIwNzYKLToxMDdCRjAwMDkyMjUwMDFCMzBBOTAwMTAxMTIwMDA3QzI0MDMwMDgxNzUKLToxMDdDMDAwMDNDMDQ4MDAwOEM4NzAxQjgwNEUwRkZGRTNDMUY0MDFGNEQKLToxMDdDMTAwMEFDOTAwMTgwMDA3RjEwMjUwMDEzQzgyQjNDMTAxMDAwOTEKLToxMDdDMjAwMEFDODAwMTg0QUY5OTAwNDhBQzgyMDE4OEFDOTAwMUI4NjcKLToxMDdDMzAwMDBBMDAwODA1OEY4NjAwMzA4RTQ0MDAxQzBFMDAwNkVGRjcKLToxMDdDNDAwMDAwMDAwMDAwMTA0MDAwRjgwMDQwMzgyMThGOTIwMDM4RkEKLToxMDdDNTAwMDI0MDYwMDg5M0MwNTgwMDA4Q0FFMDFCODA1QzBGRkZFRkIKLToxMDdDNjAwMDAwMDAwMDAwQUNBNzAxODA4RTUwMDAxQzNDMTE0MDAxQjgKLToxMDdDNzAwMDAwMTM3ODJCMDBEMTM4MjUzQzEzMTAwMEFDQjAwMTg0RTAKLToxMDdDODAwMEFGOEYwMDQ4QUNBNzAxODhBQ0IzMDFCODBBMDAwODA1NjMKLToxMDdDOTAwMDhGODYwMDMwOTY1OTAwMDIzQzEwMDgwMDI2MTA1NjQwOEUKLToxMDdDQTAwMDMzMzgwMDA0MTMwMDAwQTMzQzA0NjAwMDhFNUYwMDFDMDYKLToxMDdDQjAwMDNDMDY4MDAwQUNERjAwMjAzQzAxMDgwMEFDM0Y1NjQwOTEKLToxMDdDQzAwMDk2NEYwMDAyMzFFNzAwMDExNEUwMDBFMzAwMDAwMDAwREQKLToxMDdDRDAwMDhFNDIwMDA0QUUwMjAwMDgzQzEwMDgwMDhFMTA1NjQ4ODgKLToxMDdDRTAwMDEyMDAwMEQ5M0MwNjgwMDA4Rjg1RkQ5NDI0MTAwMDAxMEQKLToxMDdDRjAwMDhDQkYwMDE4OEY5MUZEOTg4Rjg5RkQ5MDAzRTZDODI1RjEKLToxMDdEMDAwMEFDQjkwMDE4QTBBMDAwMDVBQ0IwMDAwQzNDMTgwODAwRUQKLToxMDdEMTAwMDhGMTg1NjQ4OEY4NzAwMzhBNEIwMDAxMDAwMTg3OUMyMTkKLToxMDdEMjAwMEE0QjAwMDEyQTRCMDAwMTRBNEIwMDAxNkE2MkYwMDBDM0EKLToxMDdEMzAwMDhDRUUwMDA4OEY4RDAwMzg4RjhDMDAzOEFFMkUwMDJDMTIKLToxMDdENDAwMDhEQTgwMDBDMjQwNzAwMDJBRTI4MDAxQzkxOEIwMDEwQTcKLToxMDdENTAwMEEyMkIwMDExOEY4MzAwMzg5MDZBMDAxMUExMkEwMDA4MUQKLToxMDdENjAwMDhGODIwMDM4OTA0NDAwMTJBMEE0MDA0RThGOTIwMDM4RjkKLToxMDdENzAwMDkyNDYwMDEzQTIyNjAwMTI4RjkyMDAzODk2NUYwMDE0REMKLToxMDdEODAwMEE2M0YwMDNDOTY1OTAwMTZBNjM5MDAzRThFNTgwMDE4QjIKLToxMDdEOTAwMEFFMzgwMDE0NTY2MEZENEZBRjg3MDA0ODNDMDUwODAwMjAKLToxMDdEQTAwMDI0QTU1NjQwMEUwMDA3MTMwMDAwMjAyMThGOTIwMDM4QjIKLToxMDdEQjAwMDAwMDAzODIxMEEwMDA4MDRBRjg3MDA0ODNDMDUwODAwOEQKLToxMDdEQzAwMDI0QTU1NjQwMEUwMDA3MzIyNDA0MDA4MjhGOTIwMDM4MEEKLToxMDdERDAwMDBBMDAwOEVDMDAwMDM4MjEwRTAwMEUxNTAwMDAwMDAwMUIKLToxMDdERTAwMDhGOTIwMDM4MEEwMDA5NUYwMDAwMjAyMTBFMDAwNzA0NkUKLToxMDdERjAwMDAyMDAyMDIxOTIzMjAwMUIwMjAwMjAyMTM2NTgwMDEwODAKLToxMDdFMDAwMDBFMDAwNzBFQTIzODAwMUI4RjkyMDAzODBBMDAwQTRGOUUKLToxMDdFMTAwMDAwMDAxODIxOTI0MzAwMEMzMDZBMDAwMTExNDAwMDAzNTkKLToxMDdFMjAwMDAwMDAwMDAwOTY0QjAwMEVBNDhCMDAyQzkyNDgwMDBDMjIKLToxMDdFMzAwMDMxMEMwMDAyMTE4MEZGNDAwMDAwMjgyMTk2NEUwMDEyRjQKLToxMDdFNDAwMDhFNEQwMDE0QTQ4RTAwMUEwQTAwMEExREFDOEQwMDFDNzEKLToxMDdFNTAwMDhGODMwMDU4OEY4NzAwNTAxMDY3RkY0RTAwMDAzMDIxM0QKLToxMDdFNjAwMDNDMDgwODAwMjUwODU1QzQwMDAzMjBDMDAwODgzMDIxQzQKLToxMDdFNzAwMDhDRDEwMDAwMTIyNTAwQzgyNDYyMDAwMTMwNDMwMDBGOUQKLToxMDdFODAwMDE0NjdGRkZBMDAwMzIwQzAwQTAwMEEzNDAwMDAzMDIxMDIKLToxMDdFOTAwMDNDMDUwODAwMjRBNTU2NDAwRTAwMDczMjI0MDQwMDhCNDAKLToxMDdFQTAwMDhGOTIwMDM4MEEwMDA4RUMwMDEzMzgyQjNDMEIwODAwQjYKLToxMDdFQjAwMDhENkI1NjQwMjREOEZGRkUyNTcxMDEwMDMyMkEwMDdGQzkKLToxMDdFQzAwMDAxNDc5MDIxMDIzMzEwMjRBRDAyMDAyOEFFNDYwMEQwQjUKLToxMDdFRDAwMEFFNDAwMEQ0MEEwMDA4NTVBRTU4MDAxQ0FDQzAwMDU0OTcKLToxMDdFRTAwMDNDMEUwODAwOERDRTU2NDAzQzA5ODAwQzM1MkMwMTAwMUMKLToxMDdFRjAwMEFDRUUwMDI4OEU1MDAwMTRBRDkwMDBEMDhFNEQwMDE0RDIKLToxMDdGMDAwMEFEOEQwMEQ0OEU0ODAwMTAyNTA3RkZGRTBBMDAwODkxQjEKLToxMDdGMTAwMEFEODcwMDFDNTQ5MEZEQUEyNDA3NDAwMDBBMDAwOEJGNEEKLToxMDdGMjAwMDI0MDcxMDAwMEUwMDA3QzMwMDAwMDAwMDBBMDAwOTA5MjIKLToxMDdGMzAwMDhGOTIwMDM4OEM4MzQ0MkMzQzA1REVBRDM0QjJCRUVGMEEKLToxMDdGNDAwMDNDMDEwODAwQUMyMDU2NDAxMDcyMDA5MDAwMDAwMDAwNzgKLToxMDdGNTAwMDNDMDQ2QzYyMzQ4Mjc5NzAxNDYyMDAwODI0MDQwMDAyQ0MKLToxMDdGNjAwMDk3OEEwMDU0OTc4MzAwNEMwMjAwMjgyMTAxNDM0ODJCMzQKLToxMDdGNzAwMDExMjAwMDE5MjQwNDAwOTIyNDA0MDAwMjBFMDAwNUU0REMKLToxMDdGODAwMDI0MDUwMjAwM0MwQjgwMDBBRDYyMDAyMDNDMDEwODAwOEIKLToxMDdGOTAwMEFDMjI1NjQwMTA0MDAwMEQ4RjhFMDAzODI0MEMwMDI4NzMKLToxMDdGQTAwMDI0MDQwMDAzOTFDRDAwMTAzMUE4MDBGRjU1MEMwMDAxRkUKLToxMDdGQjAwMDI0MDQwMDAxMEUwMDAwNEMwMDAwMDAwMDEwNDAwMDA0RUEKLToxMDdGQzAwMDI0MDQwMDgzMEEwMDBBN0Y4RjkyMDAzODI0MDQwMDgzNkYKLToxMDdGRDAwMDNDMDUwODAwMjRBNTU2NDAwRTAwMDcxMzAwMDAwMDAwRDEKLToxMDdGRTAwMDhGOTIwMDM4MDAxMzM4MkIwQTAwMDgwNEFGODcwMDQ4MkUKLToxMDdGRjAwMDBBMDAwOUU4MjQwMjAwMTI4RTQ0MDAwODBFMDAwNkVGNzEKLToxMDgwMDAwMDAwMDAwMDAwMEEwMDA5RjRBRTAyMDAwODNDMDUwODAwNjgKLToxMDgwMTAwMDI0QTU1NjQwMEUwMDA2RTMyNDA0MDA4NzhGOTIwMDM4MDIKLToxMDgwMjAwMDBBMDAwQTExMDAxMzEwMkIyNDA0MDAwNDBFMDAwNUU0QkEKLToxMDgwMzAwMDI0MDUwMDMwMTQ0MDAwMTQwMDQwMzgyMThGOTIwMDM4OEQKLToxMDgwNDAwMDBBMDAwQTY0MjQwNjAwODMzQzA1MDgwMDI0QTU1NjQwNjMKLToxMDgwNTAwMDBBMDAwQjQ1MjQwNDAwODc4RTQ0MDAwNDBFMDAwNkVGM0UKLToxMDgwNjAwMDAwMDAwMDAwMEEwMDBBODVBRTAyMDAwODNDMDUwODAwNzYKLToxMDgwNzAwMDI0QTU1NjQwMEUwMDA3MzIyNDA0MDA4MjhGOTIwMDM4NTcKLToxMDgwODAwMDBBMDAwQTExMDAwMDEwMjE4RjkyMDAzODNDMDg4MDA4NzUKLToxMDgwOTAwMDNDMEM4MDAwMjQwQjAwNTAyNDBBMDAwMUFEODIwMDIwMUIKLToxMDgwQTAwMEExMEIwMDAwQTEwQTAwMDE5MjQ5MDAwNEExMDkwMDE4RDcKLToxMDgwQjAwMDkyNDQwMDA1QTEwNDAwMTk5MjQzMDAwNjNDMDQwODAwMDQKLToxMDgwQzAwMDI0ODQ1NUM0QTEwMzAwMUE5MjQyMDAwNzNDMDMwODAwMEYKLToxMDgwRDAwMDI0NjM1NUMwQTEwMjAwMUI5MjQ1MDAwOEExMDUwMDFDQTUKLToxMDgwRTAwMDkyNDYwMDA5QTEwNjAwMUQ5MjVGMDAwQUExMUYwMDFFMTIKLToxMDgwRjAwMDkyNTkwMDBCQTExOTAwMUY5MjU4MDAwQ0ExMTgwMDIwRTIKLToxMDgxMDAwMDkyNTEwMDBEQTExMTAwMjE5MjUwMDAwRUExMTAwMDIyRTkKLToxMDgxMTAwMDkyNEYwMDBGQTEwRjAwMjM5MjRFMDAxMEExMEUwMDI0RDkKLToxMDgxMjAwMDkyNEQwMDExQTEwRDAwMjU5NjRDMDAxNEE1MEMwMDI4QkQKLToxMDgxMzAwMDk2NEIwMDE2OEY4QTAwNTA4Rjk4MDA1OEE1MEIwMDJBODYKLToxMDgxNDAwMDk2NDkwMDE4MDAwQTEwQzAyNTQ1MDAwMUE1MDkwMDJDMTkKLToxMDgxNTAwMDhFNDYwMDFDMDA0NEM4MjEwMDQzRjgyMTMwQTUwMDBGQzIKLToxMDgxNjAwMEFGRTYwMDAwQUYyNzAwMDAxMEI4MDAwM0FGODUwMDUwNTUKLToxMDgxNzAwMDBBMDAwQTY0MDAwMDMwMjEyNEFEMDAwMTMxQTgwMDBGN0MKLToxMDgxODAwMDAwMDAzMDIxMEEwMDBBNjRBRjg4MDA1ODhDODM0NDJDMTgKLToxMDgxOTAwMDBBMDAwQjI0M0MwNDZDNjIzQzA3MDgwMDI0RTc1NUMwMkQKLToxMDgxQTAwMDAwODc5MDIxQUNDMDAwMDAwMDAwMzAyMTBBMDAwQTM0OTIKLToxMDgxQjAwMEFFNDAwMDAwM0MwNDgyMDEzQzAzNjAwMDM0ODIwRTAyQTkKLToxMDgxQzAwMEFDNjAzRDY4QUY4MDAwNzgwM0UwMDAwOEFDNjIzRDZDQjUKLToxMDgxRDAwMDI3QkRGRkU4QUZCMDAwMTAzMDkwRkZGRjAwMTAxODQyM0QKLToxMDgxRTAwMDJDNjIwMDQxQUZCRjAwMTQxNDQwMDAwMjI0MDQwMDgwNDAKLToxMDgxRjAwMDI0MDMwMDQwM0MwMTA4MDBBQzMwMDA2MDNDMDEwODAwNTIKLToxMDgyMDAwMEFDMjMwMDY0MEUwMDBFMUUwMDYwMjgyMTI0NDgwMkJGMkIKLToxMDgyMTAwMDI0MDlGRjgwMDEwOTI4MjQwMDEwMzk4MDAwMTAzMDQwMTMKLToxMDgyMjAwMDhGQkYwMDE0OEZCMDAwMTAwMEE3MjAyMTAwODYxODIxRjYKLToxMDgyMzAwMEFGODMwMDYwM0MwMTA4MDBBQzI1MDA1ODNDMDEwODAwRjkKLToxMDgyNDAwMEFDMjQwMDVDMDNFMDAwMDgyN0JEMDAxODMwODMwMEZGNjkKLToxMDgyNTAwMDMwQzZGRkZGMzBFNDAwRkYzQzA4ODAwMDhEMDIwMUI4MEIKLToxMDgyNjAwMDA0NDBGRkZFMDAwMzU0MDAwMTQ0MzgyNTNDMDk2MDAwMkYKLToxMDgyNzAwMDAwRTkyMDI1M0MwMzEwMDBBRDA1MDE4MEFEMDYwMTg0MTYKLToxMDgyODAwMEFEMDQwMTg4MDNFMDAwMDhBRDAzMDFCODhGODYwMDM4MTMKLToxMDgyOTAwMDNDMDk2MDEyMzUyNzAwMTA4Q0NCMDAwNDNDMEM2MDBFQUEKLToxMDgyQTAwMDM1ODUwMDEwMzE2QTAwMDYyRDQ4MDAwMUFDRTgwMEM0OTUKLToxMDgyQjAwMDhDQzQwMDA0QUNBNDMxODA4Q0MyMDAwODk0QzMwMDAyQkEKLToxMDgyQzAwMEFDQTIzMTg0MDNFMDAwMDhBNzgzMDA3MDhGODUwMDM4REEKLToxMDgyRDAwMDhGODdGRjIwOEY4NkZGMjg4Q0FFMDAwNDNDMEY2MDEyMzIKLToxMDgyRTAwMDM1RTgwMDEwQUNFRTAwNjg4Q0FEMDAwOEFDRUQwMDZDMTkKLToxMDgyRjAwMDhDQUMwMDEwQUNDQzAwNEM4Q0FCMDAwQ0FDQ0IwMDQ4NzAKLToxMDgzMDAwMDk0Q0EwMDU0M0MwMjA4MDA4QzQyMDA0NDI1NDkwMDAxRjQKLToxMDgzMTAwMEE0QzkwMDU0OTRDNDAwNTQzMDgzRkZGRjEwNjIwMDE3QjYKLToxMDgzMjAwMDAwMDAwMDAwM0MwMjA4MDA4QzQyMDA0MEE0QzIwMDUyNDEKLToxMDgzMzAwMDhDQTMwMDE4QUNFMzAwMzA4Q0EyMDAxNEFDRTIwMDJDM0IKLToxMDgzNDAwMDhDQjkwMDE4QUNGOTAwMzg4Q0I4MDAxNDI0MDUwMDAxNzEKLToxMDgzNTAwMEFDRjgwMDM0OEQwNjAwQkM1MEM1MDAxOThEMDIwMEI0ODUKLToxMDgzNjAwMDhEMDIwMEI4QTRFMjAwNDg5NEU0MDA0OEE0RTQwMDRBNjYKLToxMDgzNzAwMDk0RTgwMERBMDNFMDAwMDgzMTAyRkZGRjNDMDIwODAwNDUKLToxMDgzODAwMDhDNDIwMDI0QTRDMDAwNTRBNEMyMDA1MjhDQTMwMDE4NDQKLToxMDgzOTAwMEFDRTMwMDMwOENBMjAwMTRBQ0UyMDAyQzhDQjkwMDE4QzUKLToxMDgzQTAwMEFDRjkwMDM4OENCODAwMTQyNDA1MDAwMUFDRjgwMDM0OTYKLToxMDgzQjAwMDhEMDYwMEJDNTRDNUZGRUI4RDAyMDBCODhEMDIwMEI0RTEKLToxMDgzQzAwMEE0RTIwMDQ4OTRFNDAwNDhBNEU0MDA0QTk0RTgwMERBRjcKLToxMDgzRDAwMDAzRTAwMDA4MzEwMkZGRkY4Rjg2MDAzODNDMDQ4MDAwNzQKLToxMDgzRTAwMDhDQzkwMDA4OENDODAwMDgwMDA5MjlDMDAwMDgzOUMwRTEKLToxMDgzRjAwMEFDODcwMDIwOTBDMzAwMDczMDYyMDAwNDEwNDAwMDNBQjAKLToxMDg0MDAwMEFGODUwMDc0OTBDQjAwMDczMTZBMDAwODExNDAwMDM5MzUKLToxMDg0MTAwMDhGODdGRjI0OENDRDAwMEM4Q0NFMDAxNDAxQUU2MDJCMTYKLToxMDg0MjAwMDExODAwMDMyMDAwMDAwMDA4Q0MyMDAwQ0FDRTIwMDcwMzEKLToxMDg0MzAwMDhDQ0IwMDE4OEY4NUZGMjA4Rjg4RkYyOEFDRUIwMDc0NTEKLToxMDg0NDAwMDhDQ0EwMDEwMjQwMkZGRjhBQ0FBMDBDODhDQzkwMDBDMkEKLToxMDg0NTAwMEFEMDkwMDYwOENDNDAwMUNBQ0E0MDBDMDkwRTMwMDdDOUIKLToxMDg0NjAwMDAwNjJDODI0QTBGOTAwN0M5MEQ4MDAwNzMzMEYwMDA4RjAKLToxMDg0NzAwMDExRTAwMDA0MDAwMDAwMDA5MEVEMDA3QzM1QUMwMDAxMkMKLToxMDg0ODAwMEEwRUMwMDdDOTBDRjAwMDczMUVFMDAwMTExQzAwMDA5ODQKLToxMDg0OTAwMDAwMDAwMDAwOTBFNDAwN0MyNDE4MDAwMjM0ODIwMDAyRjYKLToxMDg0QTAwMEEwRTIwMDdDOTBBMzAwRUMzMDc5MDBGRjEzMzgwMDEzQTkKLToxMDg0QjAwMDI0MDgwMDM0OTBDOTAwMDczMTI2MDAwMjEwQzAwMDA0Q0YKLToxMDg0QzAwMDAwMDAwMDAwOTBFQjAwN0MzNTZBMDAwNEEwRUEwMDdDMEMKLToxMDg0RDAwMDkwRUQwMDdEMzFBQzAwM0ZBMEVDMDA3RDk0QTcwMERBNjgKLToxMDg0RTAwMDAzRTAwMDA4MzBFMkZGRkY4Rjg3RkYyNDBBMDAwQzVBRTgKLToxMDg0RjAwMDhDQzIwMDE0MEEwMDBDNUJBQ0UwMDA3MDBBMDAwQzdDMUIKLToxMDg1MDAwMEFDQTgwMENDOEY4QzAwMzgyN0JERkZEOEFGQjMwMDFDQkYKLToxMDg1MTAwMEFGQjIwMDE4QUZCMDAwMTBBRkJGMDAyMEFGQjEwMDE0NzEKLToxMDg1MjAwMDkxOEYwMDE1M0MxMzYwMEUzNjczMDAxMDMxRUIwMDBGNzUKLToxMDg1MzAwMEEzOEIwMDdDOEQ4RjAwMDQ4RDhCMDAwODk1OUYwMDEyMEIKLToxMDg1NDAwMDk1OTkwMDEwOTU4NDAwMUE5NTk4MDAxRTk1OEUwMDFDMzAKLToxMDg1NTAwMDMzRURGRkZGMzMyQUZGRkYzMDg5RkZGRjMzMDhGRkZGQjIKLToxMDg1NjAwMDMxQzdGRkZGM0MwMTA4MDBBQzJEMDAyNDNDMDEwODAwOEUKLToxMDg1NzAwMEFDMjkwMDQ0M0MwMTA4MDBBQzJBMDA0MEFFNjgzMTc4QzgKLToxMDg1ODAwMEFFNjczMTdDOTE4NTAwMTU5NTkxMDAxNjNDMTI2MDEyMDIKLToxMDg1OTAwMDM2NTIwMDEwMzBBMjAwRkYzMjMwRkZGRkFFNjIzMTg4NDkKLToxMDg1QTAwMEFFNTAwMEI0OTE4MzAwMTQ5NTlGMDAxODI0MDYwMDAxN0EKLToxMDg1QjAwMDAwNjZDODA0MzNGOEZGRkZBRTU5MDBCOEFFNTgwMEJDREYKLToxMDg1QzAwMDkxOEUwMDE0QUY4RjAwNjQzQzA4NjAwNjMxQ0QwMEZGMkYKLToxMDg1RDAwMEFFNEQwMEMwOTE4QTAwMTU5NTg0MDAwRTNDMDc2MDBBREMKLToxMDg1RTAwMDMxNDkwMEZGQUY4QjAwNjgzMDg0RkZGRkFFNDkwMEM4RkYKLToxMDg1RjAwMDM1MTEwMDEwMEUwMDBCQzMzNEYwMDQxMDNDMDIwODAwQ0IKLToxMDg2MDAwMDhDNDIwMDYwM0MwMzA4MDA4QzYzMDA2NDNDMDYwODAwNTgKLToxMDg2MTAwMDhDQzYwMDU4M0MwNTA4MDA4Q0E1MDA1QzhGODQwMDYwNjcKLToxMDg2MjAwMDhGQkYwMDIwQUUyMzAwNENBRTY1MzE5Q0FFMDMwMDU0REEKLToxMDg2MzAwMEFFNDUwMERDQUU2MjMxQTBBRTYzMzFBNEFFNjYzMTk4QzcKLToxMDg2NDAwMEFFMjIwMDQ4OEZCMzAwMUNBRTAyMDA1MDhGQjEwMDE0NjAKLToxMDg2NTAwMEFFNDIwMEUwQUU0MzAwRTRBRTQ2MDBEODhGQjAwMDEwNUEKLToxMDg2NjAwMDhGQjIwMDE4MEEwMDA0Q0MyN0JEMDAyODk3ODUwMDcyM0QKLToxMDg2NzAwMDk3ODMwMDVDMjdCREZGRThBRkIwMDAxMDAwQTMxMDJCNkMKLToxMDg2ODAwMEFGQkYwMDE0MjQwNDAwMDU4RjkwMDAzODEwNDAwMDU1M0YKLToxMDg2OTAwMDI0MDkwMDAyMEUwMDA1RTQ4Rjg1MDA2MEFGODIwMDc0OUIKLToxMDg2QTAwMDI0MDQwMDAzMTA0MDAwNEYyNDA5MDAwMjNDMDY4MDAwMEYKLToxMDg2QjAwMDBFMDAwMDRDQUNDMjAwMjAyNDA3MDAwMTI0MDgyMDAwNUEKLToxMDg2QzAwMDEwNDAwMDREMjQwNDAwMDU5NzhFMDA3MjhGOEFGRjI0MEQKLToxMDg2RDAwMDI0MDkwMDUwMjVDNTAwMDFBNzg1MDA3MkExNDkwMDAwQUEKLToxMDg2RTAwMDNDMEQwODAwOERBRDAwNjQyNDAzODAwMDhGODRGRjIwQzIKLToxMDg2RjAwMDAwMEQ2NjAwQUQ0QzAwMThBNTQwMDAwNjk1NEIwMDBBMjEKLToxMDg3MDAwMDhGODVGRjI4MjQwMkZGODAwMTYzMzAyNEE1NDYwMDBBREMKLToxMDg3MTAwMDkxNUYwMDBBMDAwMDQ4MjEwM0UyQzgyNUExNTkwMDBBMjAKLToxMDg3MjAwMEEwQTAwMDA4QTE0MDAwNENBMDgwMDBDNTk2MTgwMDAyM0YKLToxMDg3MzAwMDk3ODMwMDcwM0MwMjAwMDRBNDk4MDBEQTk2MEYwMDAyQjAKLToxMDg3NDAwMDI0MThGRkJGMjVFRTI0MDFBNDhFMDBBRThFMEQwMDA0NzgKLToxMDg3NTAwMEFDQUQwMDQ0OEUwQzAwMDhBQ0FDMDA0MEE0QTAwMDUwQUUKLToxMDg3NjAwMEE0QTAwMDU0OEUwQjAwMEMyNDBDMDAzMEFDOEIwMDI4MEQKLToxMDg3NzAwMDhFMDYwMDEwQUM4NjAwMjRBNDgwMDAzRUE0ODcwMDRFMjQKLToxMDg3ODAwMEE0ODcwMDUwQTQ4MzAwM0NBRDQyMDA3NEFDODgwMEM4QUMKLToxMDg3OTAwMEFDQTgwMDYwQTA4NzAwRUM5MDlGMDBDNDMzRjkwMDdGNzQKLToxMDg3QTAwMEEwOTkwMEM0OTA5MDAwQzQwMjE4NzgyNEEwOEYwMEM0M0YKLToxMDg3QjAwMDkxNEUwMDdDMzVDRDAwMDFBMTREMDA3QzkzOEIwMDdDNTcKLToxMDg3QzAwMEFENDgwMDcwQUM4QzAwQ0NBMDhCMDBDNjhGODgwMDY4RDAKLToxMDg3RDAwMDhGODcwMDY0QUM4ODAwQjRBQzg3MDBCOEE1NDAwMDc4RUYKLToxMDg3RTAwMEE1NDAwMDdBOEZCRjAwMTQ4RkIwMDAxMDAxMjAxMDIxMjcKLToxMDg3RjAwMDAzRTAwMDA4MjdCRDAwMTg4Rjg1MDA3NDBFMDAwNjc0ODIKLToxMDg4MDAwMDhGODYwMDYwMEEwMDBENDgyNDA5MDAwMjI3QkRGRkUwQTIKLToxMDg4MTAwMEFGQjAwMDEwOEY5MDAwMzhBRkIxMDAxNEFGQkYwMDE4OTgKLToxMDg4MjAwMDhFMDkwMDA0MEUwMDA0OTkwMDA5MjFDMDhFMDgwMDA0N0UKLToxMDg4MzAwMDhGODRGRjIwOEY4MkZGMjgwMDA4MzlDMDNDMDY4MDAwMEIKLToxMDg4NDAwMEFDQzcwMDIwOTQ4NTAwREE5MDQzMDAxMzE0NjAwMDFDMkMKLToxMDg4NTAwMDMwQjFGRkZGOEY4Q0ZGMjQ5MThCMDAwODMxNkEwMDQwRkMKLToxMDg4NjAwMDE1NDAwMDBCMDAwMDAwMDA4RTBEMDAwNDAyMjAzMDIxOTYKLToxMDg4NzAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI0MDQwMDIyQTUKLToxMDg4ODAwMDAwMDAzODIxMDAwRDI5QzAwQTAwMEJFMjI3QkQwMDIwOUUKLToxMDg4OTAwMDBFMDAwMDYzMDAwMDAwMDA4RTBEMDAwNDAyMjAzMDIxNTUKLToxMDg4QTAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI0MDQwMDIyNzUKLToxMDg4QjAwMDAwMDAzODIxMDAwRDI5QzAwQTAwMEJFMjI3QkQwMDIwNkUKLToxMDg4QzAwMDBFMDAwMDVCMDAwMDAwMDA4RTBEMDAwNDAyMjAzMDIxMkQKLToxMDg4RDAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI0MDQwMDIyNDUKLToxMDg4RTAwMDAwMDAzODIxMDAwRDI5QzAwQTAwMEJFMjI3QkQwMDIwM0UKLToxMDg4RjAwMDI3QkRGRkUwQUZCMjAwMTgzMDkyRkZGRkFGQjAwMDEwMEQKLToxMDg5MDAwMEFGQkYwMDFDQUZCMTAwMTQxMjQwMDAxRTAwMDA4MDIxNTgKLToxMDg5MTAwMDhGODYwMDM4OENDNTAwMDAyNDAzMDAwNjAwMDUzRjAyNDYKLToxMDg5MjAwMDAwMDUxNDAyMzBFNDAwMDcxNDgzMDAxNjMwNDUwMEZGRjAKLToxMDg5MzAwMDJDQTgwMDA2MTEwMDAwNDAwMDA1NTg4MDNDMEMwODAwREYKLToxMDg5NDAwMDI1OEM1MzJDMDE2QzUwMjE4RDQ5MDAwMDAxMjAwMDA4MUEKLToxMDg5NTAwMDAwMDAwMDAwOEY4RTAwNzgyNDBEMDAwMTExQ0QwMDUwMjIKLToxMDg5NjAwMDI0MDIwMDAyQUY4MjAwNzgyNjA5MDAwMTMxMzBGRkZGQTcKLToxMDg5NzAwMDI0QzgwMDIwMDIxMjIwMkIwMTAwMzAyMTE0ODBGRkU1QzIKLToxMDg5ODAwMEFGODgwMDM4MDIwMDEwMjE4RkJGMDAxQzhGQjIwMDE4ODIKLToxMDg5OTAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwNDUKLToxMDg5QTAwMDkzODcwMDVFNTRFMDAwMzQwMDAwMzAyMTBFMDAwQzkwRUMKLToxMDg5QjAwMDAwMDAwMDAwOEY4NjAwMzgwQTAwMERBODI0MDIwMDAxODQKLToxMDg5QzAwMDhGODcwMDc4MjQwNTAwMDIxMEU1MDAzMTI0MDQwMDEzOEQKLToxMDg5RDAwMDAwMDAyODIxMDAwMDMwMjEyNDA3MDAwMTBFMDAwQkUyRDYKLToxMDg5RTAwMDAwMDAwMDAwMEEwMDBEQTk4Rjg2MDAzODhGODMwMDc4RjAKLToxMDg5RjAwMDI0MDIwMDAyMTQ2MkZGRjYyNDA0MDAxMjBFMDAwQzQ1NEIKLToxMDhBMDAwMDAwMDAwMDAwOEY4NTAwNzQwMDQwMzAyMTI0MDQwMDEyMTMKLToxMDhBMTAwMDBFMDAwQkUyMDAwMDM4MjEwQTAwMERBOThGODYwMDM4RjUKLToxMDhBMjAwMDhGODMwMDc4MjQxMTAwMDMxMDcxMDAyOTI0MUYwMDAyOTUKLToxMDhBMzAwMDEwN0ZGRkNFMjYwOTAwMDEyNDA0MDAxMDAwMDAyODIxMjkKLToxMDhBNDAwMDAwMDAzMDIxMEEwMDBEQzYyNDA3MDAwMThGOTEwMDc4MzQKLToxMDhBNTAwMDI0MDYwMDAyMTYyNkZGRjkyNDA0MDAxMDBFMDAwQ0VBN0EKLToxMDhBNjAwMDAwMDAwMDAwMTQ0MDAwMjM4Rjk4MDAzODhGODYwMDM4RTMKLToxMDhBNzAwMDBBMDAwREE4MjQwMjAwMDMyNDA0MDAxNDBFMDAwQkUyRDcKLToxMDhBODAwMDAwMDAyODIxOEY4NjAwMzgwQTAwMERBODI0MDIwMDAyNjkKLToxMDhBOTAwMDBFMDAwRDUyMDAwMDAwMDAwQTAwMERBOThGODYwMDM4NUMKLToxMDhBQTAwMDBFMDAwQkYyMDAwMDAwMDAyNDE5MDAwMjI0MDQwMDE0NDAKLToxMDhBQjAwMDAwMDAyODIxMDAwMDMwMjEwMDAwMzgyMUFGOTkwMDc4MDMKLToxMDhBQzAwMDBFMDAwQkUyMDAwMDAwMDAwQTAwMERBOThGODYwMDM4OUUKLToxMDhBRDAwMDBFMDAwQzAyMDAwMDAwMDA4Rjg1MDA3NDI0MTkwMDAyQjMKLToxMDhBRTAwMDAwNDAzMDIxMjQwNDAwMTAwMDAwMzgyMTBBMDAwREZGNEUKLToxMDhBRjAwMEFGOTkwMDc4MDA0MDM4MjEyNDA0MDAxMDk3MEYwMDAyM0QKLToxMDhCMDAwMDAwMDAyODIxMEUwMDBCRTIzMUU2RkZGRjhGODYwMDM4QkYKLToxMDhCMTAwMDBBMDAwREE5QUY5MTAwNzg4Rjg0RkYyNDNDMDc3RkZGRTYKLToxMDhCMjAwMDM0RTZGRkZGOEM4NTAwMTgyNDAyMDAwMTAwQTYxODI0RkIKLToxMDhCMzAwMEFDODMwMDE4MDNFMDAwMDhBMDgyMDAwNTMwODRGRkZGMkEKLToxMDhCNDAwMDMwQTVGRkZGMTA4MDAwMDcwMDAwMTgyMTMwODIwMDAxQ0YKLToxMDhCNTAwMDEwNDAwMDAyMDAwNDIwNDIwMDY1MTgyMTE0ODBGRkZCMzEKLToxMDhCNjAwMDAwMDUyODQwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA3NDUKLToxMDhCNzAwMDAwMDAwMDAwOENBMjAwMDAyNEM2RkZGRjI0QTUwMDA0MTIKLToxMDhCODAwMEFDODIwMDAwMTRDMEZGRkIyNDg0MDAwNDAzRTAwMDA4NTIKLToxMDhCOTAwMDAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwMjYKLToxMDhCQTAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGMUMKLToxMDhCQjAwMDE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwQUYKLToxMDhCQzAwMDAwMDQxMUMwMDNFMDAwMDgyNDQyMDI0MDI3QkRGRkU4NzIKLToxMDhCRDAwMEFGQjAwMDEwMDA4MDgwMjFBRkJGMDAxNDBFMDAwRTNGMjgKLToxMDhCRTAwMDAwQTAyMDIxMDA1MDQ4MjEyNDBBRkY4MDhGQkYwMDE0REMKLToxMDhCRjAwMDhGQjAwMDEwMDEyQTMwMjQzMTI3MDA3RjNDMDg4MDBBMDIKLToxMDhDMDAwMDNDMDQyMTAwMDBFODEwMjEwMEM0MjgyNTNDMDM4MDAwMUEKLToxMDhDMTAwMDI3QkQwMDE4QUM2NTAwMjRBRjgyMDAyNEFDNDAwMDAwRTIKLToxMDhDMjAwMEFDNjUwMDI0MDNFMDAwMDhBQzQwMDA0MDNDMEQwODAwQTcKLToxMDhDMzAwMDhEQUQwMDU4MDAwNTYxODAyNDBBRkY4MDAxQTQ1ODIxRjEKLToxMDhDNDAwMDAxNkM0ODIxMDEyQTMwMjQzMTI3MDA3RjNDMDg4MDBDMjgKLToxMDhDNTAwMDNDMDQyMTAwMDBFODEwMjEwMEM0MjgyNTNDMDM4MDAwQ0EKLToxMDhDNjAwMEFDNjUwMDI4QUY4MjAwMjAwM0UwMDAwOEFDNDAwMDI0N0YKLToxMDhDNzAwMDMwQTVGRkZGM0MwNjgwMDA4Q0MyMDFCODA0NDBGRkZFMTcKLToxMDhDODAwMDNDMDg2MDE1MDBBODM4MjUzQzAzMTAwMEFDQzQwMTgwRTYKLToxMDhDOTAwMEFDQzAwMTg0QUNDNzAxODgwM0UwMDAwOEFDQzMwMUI4RDQKLToxMDhDQTAwMDNDMEQwODAwOERBRDAwNTgwMDA1NjE4MDI0MEFGRjgwNEUKLToxMDhDQjAwMDAxQTQ1ODIxMDE2QzQwMjEwMTBBNDgyNDAwMDkzMTQwRDcKLToxMDhDQzAwMDMxMDcwMDdGMDBDNzI4MjUzQzA0MjAwMDAwQTQxODI1OTgKLToxMDhDRDAwMDNDMDI4MDAwQUM0MzA4MzAwM0UwMDAwOEFGODAwMDIwNzUKLToxMDhDRTAwMDI3QkRGRkU4QUZCMDAwMTAwMDgwODAyMUFGQkYwMDE0QTcKLToxMDhDRjAwMDBFMDAwRTNGMDBBMDIwMjEwMDUwNDgyMTI0MEJGRjgwRDEKLToxMDhEMDAwMDAxMkI1MDI0MDAwQTM5NDAzMTI4MDA3RjNDMDYyMDAwMDYKLToxMDhEMTAwMDhGQkYwMDE0OEZCMDAwMTAwMEU4MjgyNTM0QzIwMDAxNzYKLToxMDhEMjAwMDAwQTIxODI1M0MwNDgwMDAyN0JEMDAxOEFDODMwODMwNDEKLToxMDhEMzAwMDAzRTAwMDA4QUY4MDAwMjQzQzA1ODAwODhDQTcwMDYwOTkKLToxMDhENDAwMDNDMDY4MDA4MDA4NzEwMkIxNDQwMDAxMTJDODM0MDAwNDMKLToxMDhENTAwMDhDQTgwMDYwMkQwMzQwMDAxMDYwMDAwRjI0MDM0MDAwMjkKLToxMDhENjAwMDhDQzkwMDYwMDA4OTI4MkIxNEEwMDAwMjAwODAxODIxMDMKLToxMDhENzAwMDhDQzMwMDYwMDAwMzVBNDIwMDBCMzA4MDNDMEEwODAwOUMKLToxMDhEODAwMDI1NEE1M0EwMDBDQTIwMjEwM0UwMDAwODhDODIwMDAwN0QKLToxMDhEOTAwMDE0NjBGRkYzMjQwMzQwMDAwMDAzNUE0MjAwMEIzMDgwQUMKLToxMDhEQTAwMDNDMEEwODAwMjU0QTUzQTAwMENBMjAyMTAzRTAwMDA4MUQKLToxMDhEQjAwMDhDODIwMDAwM0MwNTgwMDg5MEE2MDAwODkzODQwMDg4RkYKLToxMDhEQzAwMDI0QzIwMDAxMzA0MjAwRkYzMDQzMDA3RjEwNjQwMDBDRDkKLToxMDhERDAwMDAwMDIzODI3QTBBMjAwMDgzQzA0ODAwMDhDODUwMTc4OUUKLToxMDhERTAwMDA0QTBGRkZFOEY4QTAwODAyNDA5MDAwMjNDMDgxMDAwQzYKLToxMDhERjAwMEFDOEEwMTQwQTA4OTAxNDQwM0UwMDAwOEFDODgwMTc4RjYKLToxMDhFMDAwMDBBMDAwRUM0MzBFMjAwODAyN0JERkZEOEFGQjIwMDE4QzAKLToxMDhFMTAwMDhGOTIwMDg0QUZCRjAwMjBBRkIzMDAxQ0FGQjAwMDEwMzIKLToxMDhFMjAwMEFGQjEwMDE0OEY5MzAwMjA4RTU5MDAyODNDMTAwMDgwQjEKLToxMDhFMzAwMDNDMEVGRkVGQUU3OTAwMDA4RTU4MDAyNEEyNjAwMDBBQkQKLToxMDhFNDAwMDM1Q0RGRkZGQUU3ODAwMDQ5MjUxMDAyQzNDMEJGRjlGMDQKLToxMDhFNTAwMDM1NkFGRkZGQTI3MTAwMEM4RTZGMDAwQzNDMDgwMDQwQzkKLToxMDhFNjAwMEEyNzEwMDBCMDFGMDYwMjUwMThENDgyNDAxMkEzODI0RUQKLToxMDhFNzAwMDAwRTgzMDI1QUU2NjAwMEM4RTQ1MDAwNEFFNjAwMDE4OTgKLToxMDhFODAwMDNDMDQwMEZGQUU2NTAwMTQ4RTQzMDAyQzM0ODJGRkZGQ0IKLToxMDhFOTAwMEE2NjAwMDA4MDA2MkY4MjRBRTdGMDAxMDhFNTkwMDA4MUEKLToxMDhFQTAwMDhGOTAwMDgwOTY0RTAwMTJBRTc5MDAyMDhFNTEwMDBDRkIKLToxMDhFQjAwMDMxRDgzRkZGMDAxODc5ODBBRTcxMDAyNDhFNEQwMDE0MjgKLToxMDhFQzAwMDAxRjA2MDIxMzFDQjAwMDFBRTZEMDAyODhFNEEwMDE4MDAKLToxMDhFRDAwMDAwMEM0MUMyMDAwQjRCODBBRTZBMDAyQzhFNDYwMDFDNzkKLToxMDhFRTAwMDAxMDkzODIxQTY2NzAwMUNBRTY2MDAzMDk2NDUwMDAyRDUKLToxMDhFRjAwMDhFNDQwMDIwQTY2NTAwMUVBRTY0MDAzNDkyNDMwMDMzMDkKLToxMDhGMDAwMDMwNjIwMDA0NTQ0MDAwMDY5MjQ3MDAwMDNDMDI4MDA4OTIKLToxMDhGMTAwMDM0NDMwMTAwOEM3RjAwQzBBRTdGMDAzMDkyNDcwMDAwRDgKLToxMDhGMjAwMDhGODYwMDI0QTBDNzAwMzA5MjQ1MDAzMzMwQTQwMDAyOTEKLToxMDhGMzAwMDUwODAwMDA3OTI1MTAwMDE4Rjg4MDAyNDI0MEJGRjgwOEQKLToxMDhGNDAwMDkxMEEwMDMwMDE0QjQ4MjVBMTA5MDAzMDkyNTEwMDAxREYKLToxMDhGNTAwMDhGOTAwMDI0MjQwQ0ZGQkYyNDA0RkZERkEyMTEwMDMxRjYKLToxMDhGNjAwMDhGOEQwMDI0M0MxODgwMDgzNzExMDA4MDkxQUYwMDNDQTEKLToxMDhGNzAwMDMxRUUwMDdGQTFBRTAwM0M4Rjg5MDAyNDkxMkIwMDNDOTQKLToxMDhGODAwMDAxNkM1MDI0QTEyQTAwM0M4RjlGMDAyNDhFNjgwMDE0OUQKLToxMDhGOTAwMDkzRTYwMDNDMkQwNzAwMDEwMDA3MTE0MDAwQzQyODI0N0YKLToxMDhGQTAwMDAwQTIxODI1QTNFMzAwM0M4Rjg3MDAyNDk2NTkwMDEyRTUKLToxMDhGQjAwMEE0RjkwMDMyOEU0NTAwMDQ5MjJFMDA3QzMwQjAwMDAzRUMKLToxMDhGQzAwMDAwMTA3ODIzMzFFRDAwMDMwMEFEMTAyMTMxQ0MwMDAyRjgKLToxMDhGRDAwMDE1ODAwMDAyMjQ0NjAwMzQyNDQ2MDAzMDNDMDI4MDA4RkMKLToxMDhGRTAwMDM0NDMwMDgwOTA3RjAwN0MwMEJGQzgyNDMzMzgwMDA0RTUKLToxMDhGRjAwMDE3MDAwMDAyMjRDMjAwMDQwMEMwMTAyMThGOTgwMDI0MzIKLToxMDkwMDAwMDI0MTkwMDAyQUNFMjAwMzRBMzE5MDAwMDkyNEYwMDNGODMKLToxMDkwMTAwMDhGOEUwMDI0M0MwQzgwMDgzNThCMDA4MEExQ0YwMDAxOEUKLToxMDkwMjAwMDhGOTEwMDI0OTI0RDAwM0Y4RTQ0MDAwNEE2MkQwMDAyMzMKLToxMDkwMzAwMDk1NkEwMDVDMEUwMDBFOUQzMTUwRkZGRjAwMDI0QjgwRDAKLToxMDkwNDAwMDAxMzAzODI1M0MwODQyMDAwMEU4MjgyNUFFMjUwMDA0MDAKLToxMDkwNTAwMDhFNDQwMDM4OEY4NTAwMjRBQ0E0MDAxODhFNDYwMDM0NUUKLToxMDkwNjAwMEFDQTYwMDFDQUNBMDAwMENBQ0EwMDAxMEE0QTAwMDE0ODYKLToxMDkwNzAwMEE0QTAwMDE2QTRBMDAwMjBBNEEwMDAyMkFDQTAwMDI0NUMKLToxMDkwODAwMDhFNjIwMDE0NTA0MDAwMDEyNDAyMDAwMThGQkYwMDIwQjYKLToxMDkwOTAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwNzYKLToxMDkwQTAwMEFDQTIwMDA4MEEwMDBFQkMyN0JEMDAyODI3QkRGRkM4REYKLToxMDkwQjAwMDNDMDU4MDA4MzRBNDAwODBBRkJGMDAzNEFGQkUwMDMwNTAKLToxMDkwQzAwMEFGQjcwMDJDQUZCNjAwMjhBRkI1MDAyNEFGQjQwMDIwNzYKLToxMDkwRDAwMEFGQjMwMDFDQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQjYKLToxMDkwRTAwMDk0ODMwMDc4OTQ4MjAwN0ExMDQzMDA1MTI0MDVGRkZGOTYKLToxMDkwRjAwMDAwODBGMDIxMEEwMDBGQ0MwMDgwQjgyMTEwOEIwMDREQjkKLToxMDkxMDAwMDhGQkYwMDM0OEY4NjAwODAzQzE4MDgwMDhGMTgwMDVDRTkKLToxMDkxMTAwMDI0MTFGRjgwM0MxNjgwMDAwMzA2NzgyMTAxRjE4MDI0OTEKLToxMDkxMjAwMEFFRDAwMDJDOTZFRTAwN0EzMUVDMDA3RjNDMEQ4MDBFMjQKLToxMDkxMzAwMDMxQ0I3RkZGMDE4RDUwMjEwMDBCNDg0MDAxMkFBODIxMkYKLToxMDkxNDAwMDk2QTQwMDAwM0MwODA4MDA4RDA4MDA1ODI0MDVGRjgwMDQKLToxMDkxNTAwMDMwOTUzRkZGMDEwNjE4MjEwMDE1Mzk4MDAwNjdDODIxQUUKLToxMDkxNjAwMDAzMjVGODI0M0MwMjAxMDAwM0UyOTAyNTMzMzgwMDdGRjgKLToxMDkxNzAwMDNDMTE4MDBDQUVEMjAwMjgwMzExOTAyMTkyNTAwMDBEQkEKLToxMDkxODAwMDMyMEYwMDA0MTFFMDAwMzcwMkUwOTgyMTk2RTMwMDdBRTQKLToxMDkxOTAwMDk2RTgwMDdBOTZFNTAwN0EyNDA0ODAwMDMxMDc3RkZGODQKLToxMDkxQTAwMDI0RTMwMDAxMzA2MjdGRkYwMEE0RjgyNDAzRTJDODI1MTUKLToxMDkxQjAwMEE2RjkwMDdBOTZFNjAwN0EzQzE0MDgwMDhFOTQwMDYwQzYKLToxMDkxQzAwMDMwRDY3RkZGMTJENDAwQzEwMDAwMDAwMDhFNTgwMDE4NzYKLToxMDkxRDAwMDhGODQwMDgwMDJBMDI4MjEyNzEzRkZGRjBFMDAwRTc3NDYKLToxMDkxRTAwMEFFNTMwMDJDOTdENTAwNzg5N0Q0MDA3QTEyOTUwMDEwRDIKLToxMDkxRjAwMDAwMDAyODIxM0MwOTgwMDgzNTI0MDEwMDNDMEE4MDA4MzEKLToxMDkyMDAwMDkxNDgwMDA4OTA4NzAwQzUzMTE0MDA3RjMwRTQwMEZGQ0EKLToxMDkyMTAwMDAyODQzMDJCMTRDMEZGQjkyNjhCMDAwMTkzOEUwMDg4ODYKLToxMDkyMjAwMDI2OEMwMDAxMDA4RTY4MjExNUFDRkZCNzhGODYwMDgwNjgKLToxMDkyMzAwMDhGQkYwMDM0OEZCRTAwMzA4RkI3MDAyQzhGQjYwMDI4NTAKLToxMDkyNDAwMDhGQjUwMDI0OEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4OUMKLToxMDkyNTAwMDhGQjEwMDE0OEZCMDAwMTAwMEEwMTAyMTAzRTAwMDA4QUYKLToxMDkyNjAwMDI3QkQwMDM4MDBDMDIwMjEwRTAwMEU0MjAyODAyODIxQjgKLToxMDkyNzAwMDhFNEIwMDEwOEU0QzAwMzA4Rjg0MDAyNDI0MDkwMDAyOTUKLToxMDkyODAwMDAxNkM1MDIzQUU0QTAwMTBBMDg5MDAwMDk2RTMwMDVDRjgKLToxMDkyOTAwMDhFNDQwMDMwOEY5MTAwMjQwRTAwMEU5RDMwNzBGRkZGMzEKLToxMDkyQTAwMDAwMDI0MzgwMDExMDI4MjUzQzA3NDIwMDAwQTcxMDI1M0EKLToxMDkyQjAwMEFFMjIwMDA0OEU1RjAwMDQ4RjhBMDAyNDhFNTkwMDAwQzUKLToxMDkyQzAwMDI0MEIwMDA4QUQ1RjAwMUNBRDU5MDAxOEFENDAwMDBDMjgKLToxMDkyRDAwMEFENDAwMDEwOTI0NjAwMEEyNDA0MDAwNTI0MDhDMDAwOTYKLToxMDkyRTAwMDMwRDAwMEZGQTU1MDAwMTQ5NjU4MDAwOEE1NTgwMDE2NkQKLToxMDkyRjAwMDkyNTEwMDBBM0MxODgwMDgzMjJGMDBGRkE1NEYwMDIwMzEKLToxMDkzMDAwMDk2NEUwMDA4MzcxMTAxMDBBNTRFMDAyMkFENDAwMDI0MDIKLToxMDkzMTAwMDkyNEQwMDBCMzFBQzAwRkZBNTRDMDAwMkExNEIwMDAxQTcKLToxMDkzMjAwMDhFNDkwMDMwOEY4MzAwMjQyNDBCRkZCRkFDNjkwMDA4RjYKLToxMDkzMzAwMEEwNjQwMDMwOEY5MDAwMjQyNDAzRkZERjk2MDcwMDMyRTIKLToxMDkzNDAwMDAwRTgyODI0MDBCNTEwMjVBNjAyMDAzMjkyMUYwMDMyNDIKLToxMDkzNTAwMDMzRjkwMDNGMzcyNjAwNDBBMjA2MDAzMjhGOEMwMDI0RUMKLToxMDkzNjAwMEFEODAwMDM0OEUyRjAwQzBBRDhGMDAzODkxOEUwMDNDNTAKLToxMDkzNzAwMDNDMEY3RkZGMzFDRDAwN0ZBMThEMDAzQzhGODQwMDI0MDYKLToxMDkzODAwMDM1RUVGRkZGOTA4QTAwM0MwMTRCNDgyNEEwODkwMDNDNDkKLToxMDkzOTAwMDhGODUwMDI0OTBBODAwM0MwMTAzMzgyNEEwQTcwMDNDM0UKLToxMDkzQTAwMDhFNDIwMDM0OEY5MTAwMjQzQzAzODAwOEFFMjIwMDQwOUUKLToxMDkzQjAwMDhFNTkwMDJDOEU1RjAwMzAwMzNGMzAyM0FFMjYwMDQ0RDAKLToxMDkzQzAwMDkyMzAwMDQ4MzIxODAwN0ZBMjM4MDA0ODhGODgwMDI0NkQKLToxMDkzRDAwMDhFNEQwMDMwOEQwQzAwNDgwMUFFNTgyNDAxOTY1MDI0NkIKLToxMDkzRTAwMDAxNEI0ODI1QUQwOTAwNDg5MjQ0MDAwQUExMDQwMDRDRjUKLToxMDkzRjAwMDk2NDcwMDA4OEY4NTAwMjRBNEE3MDA0RThFNTAwMDMwQTkKLToxMDk0MDAwMDhFNDQwMDMwMEUwMDAyRTY4QzY1MDA2MDkyRjkwMDdDMEMKLToxMDk0MTAwMDAwMDJGOTQwMDA0MDI4MjEwMDAyMTEwMDAzRTIzMDIxM0YKLToxMDk0MjAwMDMzMzYwMDAyMTJDMDAwMDMwMjA2ODAyMTAwMDVCMDgwMUUKLToxMDk0MzAwMDAyMTY4MDIxOTI2RDAwN0MzMUIzMDAwNDEyNjAwMDAyOUMKLToxMDk0NDAwMDAwMDU3MDgwMDIwRTgwMjE4RTRCMDAzMDI0MDU4MDAwQzQKLToxMDk0NTAwMDMxNkEwMDAzMDAwQTQ4MjMzMTI0MDAwMzAyMDQxODIxNjIKLToxMDk0NjAwMDhGOTAwMDI0QUUwMzAwMzQ5NkU0MDA3QTk2RTgwMDdBRTgKLToxMDk0NzAwMDk2RjEwMDdBMzEwNzdGRkYyNEUyMDAwMTMwNUY3RkZGMjEKLToxMDk0ODAwMDAyMjVDODI0MDMzRjMwMjVBNkU2MDA3QTk2RjgwMDdBMjQKLToxMDk0OTAwMDNDMTIwODAwOEU1MjAwNjAzMzBGN0ZGRjExRjIwMDE4NUIKLToxMDk0QTAwMDAwMDAwMDAwOEY4NDAwODAwRTAwMEU3NzAyQTAyODIxQUIKLToxMDk0QjAwMDhGODQwMDgwMEUwMDBFODcwMjgwMjgyMTBFMDAwRUJDRDMKLToxMDk0QzAwMDAwMDAwMDAwMEEwMDBGQzgwMDAwMDAwMDk2RjEwMDdBQkEKLToxMDk0RDAwMDAyMjQ4MDI0QTZGMDAwN0E5MkVGMDA3QTkyRUIwMDdBQzAKLToxMDk0RTAwMDMxRUUwMEZGMDAwRTY5QzIwMDBENjAyNzAwMEM1MUMwNzQKLToxMDk0RjAwMDMxNjkwMDdGMDEyQTIwMjUwQTAwMEZDMkEyRTQwMDdBMDgKLToxMDk1MDAwMDk2RTYwMDdBMDBDNUMwMjRBNkY4MDA3QTkyRUYwMDdBQTkKLToxMDk1MTAwMDkyRjMwMDdBMzFGMjAwRkYwMDEyNzFDMjAwMEU2ODI3NDgKLToxMDk1MjAwMDAwMERCMUMwMzI2QzAwN0YwMTk2MjgyNUEyRTUwMDdBQkIKLToxMDk1MzAwMDBBMDAxMDc5OEY4NDAwODAzQzAzODAwMDMwODRGRkZGOTQKLToxMDk1NDAwMDMwQTVGRkZGQUM2NDAwMThBQzY1MDAxQzAzRTAwMDA4MDgKLToxMDk1NTAwMDhDNjIwMDE0MjdCREZGQTgzQzA2ODAwOEFGQkUwMDUwRjcKLToxMDk1NjAwMEFGQkYwMDU0QUZCNzAwNENBRkI2MDA0OEFGQjUwMDQ0MzIKLToxMDk1NzAwMEFGQjQwMDQwQUZCMzAwM0NBRkIyMDAzOEFGQjEwMDM0N0QKLToxMDk1ODAwMEFGQjAwMDMwMzRDODAxMDA5MTA1MDBDNTkwQzcwMDA4OTUKLToxMDk1OTAwMDMwOUVGRkZGMzBBNTAwRkYzMEUyMDA3RjAwNDUxODJBMTMKLToxMDk1QTAwMEE3QTAwMDE0QTdBMDAwMUUxMDYwMDA1M0FGQTAwMDEwRDkKLToxMDk1QjAwMDkwQzkwMDA4MzEyNjAwN0YwMEE2MjAyMzI0OTNGRkZGRDYKLToxMDk1QzAwMDAwMTM4MDJCMDAxRTg4MkIwMjExNzgyNDUxRTAwMDg0QTgKLToxMDk1RDAwMDhGQjMwMDEwM0MxOTgwMDg5NzM2MDA1Mjk3MzcwMDUwMUYKLToxMDk1RTAwMDAwMUVDNDAwMDJEN0E4MjMwMDE1QTQwMDAwMTQxNDAzMTEKLToxMDk1RjAwMDAzQzI5MDJBMTY0MDAwMDIwMDE4MkMwMzAwNDAyODIxQzQKLToxMDk2MDAwMDAwMTMxNDAwMDAwMjI0MDMwMEE0RjgyQTU3RTAwMDAxMEMKLToxMDk2MTAwMDAwQTAyMDIxMjg4MzAwMDkxNDYwMDAwMjAwODBBMDIxRkUKLToxMDk2MjAwMDI0MTQwMDA4M0MwQTgwMDg4RDQ1MDA0ODAwMTQ0OTgwMzUKLToxMDk2MzAwMDhENDgwMDRDM0MwMzgwMDAzMTI0RkZGRjNDMDYwMDEwQTUKLToxMDk2NDAwMDAwODYzODI1MzQ3MTA0MDBBQzY1MDAzOEFGOTEwMDg0ODEKLToxMDk2NTAwMEFDNjgwMDNDQUM2NzAwMzAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMDk2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMDk2NzAwMDAwMDAwMDAwMDAwMDAwMDA4QzZDMDAwMDMxOEIwMDIwMTYKLToxMDk2ODAwMDExNjBGRkZEMDAxNDY4MkEwMUIwMTAyNDEwNDAwMDM5NTkKLToxMDk2OTAwMDAwMDBBODIxM0MxNjgwMDg5MkQ3MDAwODNDMTI4MDAwRTgKLToxMDk2QTAwMDhFNDQwMTAwMzJGNjAwN0YwRTAwMEU0MjAyQzAyODIxRDcKLToxMDk2QjAwMDhFMkYwMDEwOEU0NDAxMDAwMDAwOTAyMTMxRjczRkZGRjMKLToxMDk2QzAwMDBFMDAwRTVBMDJFMDI4MjE5MjJFMDAwMDMxQzIwMDNGMDcKLToxMDk2RDAwMDJDNTAwMDA4NTIwMDAwMTAwMDAwODgyMTAwMDJGODgwODEKLToxMDk2RTAwMDNDMDMwODAwMjQ2MzUzNTQwM0UzQzgyMThGMzgwMDAwNkYKLToxMDk2RjAwMDAzMDAwMDA4MDAwMDAwMDA5MENFMDAwODkzOEIwMDg4NTMKLToxMDk3MDAwMDMxQ0QwMDdGMDBBRDYwMjMwMTZDNTAyMTBBMDAxMEJGRjUKLToxMDk3MTAwMDI1NTNGRkZGMDAwMDg4MjEzQzEwODAwMDhFMDQwMTAwQ0IKLToxMDk3MjAwMDBFMDAwRTc3MDJFMDI4MjE4RTA0MDEwMDBFMDAwRTg3NDUKLToxMDk3MzAwMDAyQzAyODIxMTIyMDAwMEYwMDEzODAyQjhGOEEwMDg0ODIKLToxMDk3NDAwMDI2QTkwMDAxMDAwOUFDMDAwMjcyOTgyMzAwMTVBQzAzQTEKLToxMDk3NTAwMDI1NDUwMDQwMDJCNEIwMkEwMDEzODAyQjI0MTcwMDAxRDUKLToxMDk3NjAwMDAwQTA4ODIxMDJEMDEwMjRBRjg1MDA4NDE0NDBGRkM5RDYKLToxMDk3NzAwMEFGQjcwMDEwM0MwNzgwMDg5NEYxMDA1MDNDMDU4MDAwMTIKLToxMDk3ODAwMDNDMDYwMDIwMDJCMUM4MjFBNEY5MDA1MEFDQTYwMDMwNkMKLToxMDk3OTAwMDk0RjQwMDUwOTRFMzAwNTIwM0Q1NjAyMzEwNzQwMDFEMkMKLToxMDk3QTAwMDMxOUVGRkZGOENFNTAwNEM4Q0U5MDA0ODAwMTU2MTgwN0MKLToxMDk3QjAwMDAwQUNCMDIxMDAwMEEwMjEwMkNDQTgyQjAxMzQ1MDIxMjQKLToxMDk3QzAwMDAxNTVCODIxQUNGNjAwNENBQ0Y3MDA0ODAwMUU4ODJCQzAKLToxMDk3RDAwMDAyMTE3ODI0MTVFMEZGODAzQzE5ODAwODhGQjMwMDEwMzcKLToxMDk3RTAwMDhGQkYwMDU0OEZCRTAwNTAzQTYyMDAwMThGQjcwMDRDMEIKLToxMDk3RjAwMDhGQjYwMDQ4OEZCNTAwNDQ4RkI0MDA0MDhGQjMwMDNDNTMKLToxMDk4MDAwMDhGQjIwMDM4OEZCMTAwMzQ4RkIwMDAzMDAzRTAwMDA4MTEKLToxMDk4MTAwMDI3QkQwMDU4OTRGMjAwNTQ4Q0VGMDA0NDMyNUZGRkZFRTUKLToxMDk4MjAwMDAwMUZDMEMwMDFGODcwMjFBQ0FFMDAzQzhDRUIwMDQ0QkUKLToxMDk4MzAwMDhDQUQwMDNDMDE2RDQwMjMxOTAwMDAzQjAwMDAwMDAwOEUKLToxMDk4NDAwMDhDRTIwMDQwMjQ0MjAwMDEzQzA3MDA1MDM0RTQwMDEwNDgKLToxMDk4NTAwMDNDMDM4MDAwQUNBMjAwMzhBQzY0MDAzMDAwMDAwMDAwODMKLToxMDk4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMDk4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDNzYwMDAwRTYKLToxMDk4ODAwMDMyRDcwMDIwMTJFMEZGRkQzQzExODAwODk2MjgwMDU0REEKLToxMDk4OTAwMDNDMEE4MDAwM0MwNjgwMDgzMTE5MDAwMTAwMTk2MEMwQjQKLToxMDk4QTAwMDAxOEFBMDIxOEU4MzA0MDAzQzA3MDgwMDhDRTcwMDQ0NTUKLToxMDk4QjAwMDNDMTUwMDIwQUNDMzAwNDg4RTg5MDQwNDI0MDUwMDAxMzcKLToxMDk4QzAwMEFDQzkwMDRDMTBFNTAyNTlBRDU1MDAzMDk2M0YwMDUyMkUKLToxMDk4RDAwMDNDMDUwODAwOENBNTAwNDAwMEJGQzAyMUE2MzgwMDUyRkUKLToxMDk4RTAwMDk2MkYwMDU0MjVFRTAwMDFBNjJFMDA1NDk2MjYwMDU0MTMKLToxMDk4RjAwMDMwQzRGRkZGNTQ4N0ZGMzQwMDFFODgyQjMwQTVGRkZGQzQKLToxMDk5MDAwMDBFMDAxMDlEQTYyMDAwNTQzQzA0MDgwMDhDODQwMDI0MDYKLToxMDk5MTAwMDk2MjcwMDUyMDA0NDEwMjMwMEUyOTAyM0E2MzIwMDUyMDIKLToxMDk5MjAwMDBBMDAxMEMxMDAxRTg4MkI4Q0UyMDA0MDBBMDAxMTYyNjAKLToxMDk5MzAwMDNDMDcwMDUwOTIyODAwMDEyNDA3MDAwMTMxMDIwMDdGRkIKLToxMDk5NDAwMDE0NDcwMDFDOTdBQzAwMUU4RTJBMDAxNDI0MEJDMDAwODQKLToxMDk5NTAwMDMxNDQzRkZGMDE4QjQ4MjQzQzA2MDgwMDhDQzYwMDYwNjAKLToxMDk5NjAwMDAxMjQyODI1MzBBNDNGRkYwMDg2ODgyQjEyMjAwMDExRjcKLToxMDk5NzAwMEE3QTUwMDFFM0MxMTA4MDA4RTMxMDA1ODhGODIwMDgwODAKLToxMDk5ODAwMDAwMDQ0MTgwMjQwN0ZGODAwMjIyMTgyMTAwNjhGODIxOEEKLToxMDk5OTAwMDAzRTdDODI0MzNFRjAwN0YzQzE4ODAwMDNDMTI4MDBFQTAKLToxMDk5QTAwMEFGMTkwMDJDMDFGMjY4MjE5MUFFMDAwRDM1RDAwMDA0RjIKLToxMDk5QjAwMEExQjAwMDBEMEUwMDBFRDEyNDEyMDAwMTI0MTEwMDAxRUYKLToxMDk5QzAwMDNDMTA4MDAwOEUwNDAxMDAwRTAwMEU3NzAyRTAyODIxN0EKLToxMDk5RDAwMDhFMDQwMTAwMEUwMDBFODcwMkMwMjgyMTE2MjBGRjU4QjkKLToxMDk5RTAwMDhGOEEwMDg0MEEwMDExMkMwMDEzODAyQjhGODYwMDg0M0MKLToxMDk5RjAwMDkwQzkwMDAxMzEyNTAwMjAxMEEwMDE4QTI0MTAwMDAxMjcKLToxMDlBMDAwMDNDMDQ4MDA4MzQ4QzAwODA5MThCMDA3QzhGOTEwMDIwNzYKLToxMDlBMTAwMDAwMDA5MDIxMzE2QTAwMDExMTQwMDAwRkFGQjAwMDIwMUEKLToxMDlBMjAwMDhDRDAwMDE0OEM4RTAwNjAwMjBFNjgyQjE1QTAwMDAzRjEKLToxMDlBMzAwMDAyMDAzODIxOEM4NzAwNjAzQzA0ODAwODM0ODMwMDgwNTkKLToxMDlBNDAwMDhDNzIwMDcwMDBGMjc4MkIxNUUwMDAwMjAwRTAyMDIxRkIKLToxMDlBNTAwMDhDNjQwMDcwMDA4MDkwMjEzQzA3ODAwODM0RTUwMDgwMTEKLToxMDlBNjAwMDhDRDkwMDE0OENCRjAwNzAwMzNGQzAyQjE3MDAwMDAyN0MKLToxMDlBNzAwMDAzMjAyMDIxOENBNDAwNzAwMDkyMTgyMzEwNjAwMDAzQTIKLToxMDlBODAwMEFGQTMwMDI4MjQwODAwMDJBRkE4MDAyMDhGQTUwMDIwNjMKLToxMDlBOTAwMDAyNjUxMDJCMTQ0MDAwQjUwMDAwMTgyMThDQzQwMDM4NUEKLToxMDlBQTAwMDhFMkYwMDBDM0MxODAwODBBRTI0MDAwMDhDQ0UwMDM0QjkKLToxMDlBQjAwMDNDMTBGRjlGMDFGODYwMjVBRTJFMDAwNDkwQ0IwMDNGQzQKLToxMDlBQzAwMDM2MERGRkZGMDE4RDQ4MjQzQzBBMDAyMDNDMDZGRkVGQzUKLToxMDlBRDAwMEEyMkIwMDBCMDEyQTM4MjUzNEM1RkZGRjAwRTU0MDI0RTYKLToxMDlBRTAwMDNDMDIwMDA4OEY4NzAwODQwMTAyMjAyNUFFMjQwMDBDNzAKLToxMDlBRjAwMDhDRTMwMDE0QUUyMDAwMTg4RkFGMDAyOEFFMjMwMDE0QjIKLToxMDlCMDAwMDhDRjgwMDE4M0MxRkZGRkIzN0Y5RkZGRkFFMzgwMDFDMzQKLToxMDlCMTAwMDhDRUUwMDA4MDA5OTY4MjQwMjRGODAyMUFFMkUwMDI0QUMKLToxMDlCMjAwMDhDRUMwMDBDQUUyRDAwMENBNjIwMDAzOEE2MjAwMDNBQ0MKLToxMDlCMzAwMEFFMzAwMDJDQUUyQzAwMjBBRTIwMDAyODhDRUIwMDE0QTAKLToxMDlCNDAwMDhGQUEwMDI4MDE3MjQ4MjMwMTJBMzAyMzEwQzAwMDExNzcKLToxMDlCNTAwMEFFMjYwMDEwOTBGMDAwM0Q4RTJDMDAwNDhFMkEwMDAwRUUKLToxMDlCNjAwMDAwMTA2OTAwMDE4RDI4MjEwMDAwMTAyMTAwQUQzMDJCNkMKLToxMDlCNzAwMDAxNDI0ODIxMDEyNjQwMjFBRTI1MDAwNEFFMjgwMDAwMDQKLToxMDlCODAwMDkwRTMwMDNEQTIyMzAwMEE4RjlGMDA4NDk3RjkwMDA2MEUKLToxMDlCOTAwMEE2MzkwMDA4OEY4QTAwMjQyNDAyMDAwMjNDMDY4MDA4QUYKLToxMDlCQTAwMEExNDIwMDAwMzRDOTAwODA5NTI1MDA1QzAyNDAyMDIxQkMKLToxMDlCQjAwMDhGOTAwMDI0MzBBOEZGRkYwRTAwMEU5REFGQTgwMDI0NTgKLToxMDlCQzAwMDhGQTMwMDI0MDAwMkZCODA4Rjg1MDA4NDNDMDQ0MjAwQTgKLToxMDlCRDAwMDAzRTNDODI1MDMyNEMwMjVBRTE4MDAwNDhGODQwMDI0QTUKLToxMDlCRTAwMDhDQUYwMDM4QUM4RjAwMTg4Q0FFMDAzNEFDOEUwMDFDRUIKLToxMDlCRjAwMEFDODAwMDBDQUM4MDAwMTBBNDgwMDAxNEE0ODAwMDE2N0YKLToxMDlDMDAwMEE0ODAwMDIwQTQ4MDAwMjJBQzgwMDAyNDkwQTcwMDNGMDQKLToxMDlDMTAwMEE0ODcwMDAyNTI0MDAxOEMyNDA3MDAwMThGQUIwMDI4NkEKLToxMDlDMjAwMDUxNjAwMDAyOTBBMjAwM0Q5MEEyMDAzRTI0NEMwMDAxMzEKLToxMDlDMzAwMEEwOEMwMDAxOEY4NDAwMjRBQzkyMDAwODNDMTg4MDA4OUUKLToxMDlDNDAwMDM3MTAwMDgwOTIwRjAwN0MzMUVFMDAwMjE1QzAwMDAyMzgKLToxMDlDNTAwMDI0MDcwMDM0MjQwNzAwMzA4Rjg1MDA4NDNDMDg4MDA4RTYKLToxMDlDNjAwMDM1MDkwMDgwOTBBMzAwMDA5MTI4MDA3QzMyNTkwMDAzNDAKLToxMDlDNzAwMEEwODMwMDMwOEY5RjAwODQ4RjkwMDAyNDI0MDQwMDA0NzAKLToxMDlDODAwMDkzRjgwMDAxMDA5OTc4MjMyNDBEQzAwMEEyMTgwMDMxMzgKLToxMDlDOTAwMDhGOTkwMDI0OEY4RTAwODQzMUU1MDAwMzk3MkMwMDMyQzkKLToxMDlDQTAwMDk1Q0IwMDEyMDBGMjQ4MjEwMThENTAyNDMxNjIzRkZGMTQKLToxMDlDQjAwMDAxNDIzMDI1QTcyNjAwMzI5MzIzMDAzMjAxMjUzODIxQTYKLToxMDlDQzAwMDMxMDgwMDA0MzA3RjAwM0YzN0U0MDA0MEEzMjQwMDMyMTUKLToxMDlDRDAwMDEyNDAwMDAyOEY4NTAwMjQwMEU4MzgyMTNDMEM4MDA4RTcKLToxMDlDRTAwMEFDQTcwMDM0MzU4QjAxMDA4RDYyMDBDMDJFNDQwMDAxMEEKLToxMDlDRjAwMDI0MDNGRkRGQUNBMjAwMzg5MEFBMDAzQzAwMDRDOTQwNTYKLToxMDlEMDAwMDMxNDYwMDdGQTBBNjAwM0M4Rjg5MDAyNDI0MDVGRkJGQjgKLToxMDlEMTAwMDkxMjcwMDNDMDBFNTQwMjRBMTI4MDAzQzhGOEYwMDI0QkYKLToxMDlEMjAwMDkxRkYwMDNDMDNFM0MwMjQwMzE5ODAyNUExRjAwMDNDMEYKLToxMDlEMzAwMDhGOEIwMDg0OEY4QTAwMjQ4RDZFMDAyMEFENEUwMDQwRjIKLToxMDlENDAwMDhENkQwMDI0QUQ0RDAwNDQ4RDZDMDAyOEFENEMwMDQ4NTUKLToxMDlENTAwMDhENjIwMDJDMEUwMDBFQkNBRDQyMDA0QzhGQTYwMDIwODAKLToxMDlENjAwMDI0MDcwMDAyMTBDNzAwMTE4RkEzMDAyMDAwMDMyMDJCM0UKLToxMDlENzAwMDAwMDQ4MDIzMDI3MDk4MjQwMDYwODAyMTAwNjA5MDIxRkMKLToxMDlEODAwMDBBMDAxMTE1MDAxMDg4MkI5NjI3MDAxMjhGODQwMDgwN0UKLToxMDlEOTAwMDAwMDA5MDIxMzBFNUZGRkZBN0E3MDAxNDBFMDAwRTZCMTYKLToxMDlEQTAwMDI0MTEwMDAxMEEwMDExQzAzQzEwODAwMDNDMTk4MDAwMDEKLToxMDlEQjAwMDNDMDI4MDA4OEYyNDAxMDA5MDU4MDAwODBFMDAwRTQyREIKLToxMDlEQzAwMDMzMDUwMDdGOEY4RTAwMjQ4RkFGMDAyMDhGQTQwMDI4RTIKLToxMDlERDAwMEExQ0YwMDAwMEUwMDBFOUQ4RjkwMDAyNDhGQUQwMDI0QjcKLToxMDlERTAwMDAwMDIzQjgwM0MwQjQyMDAwMEVENDAyNThGODcwMDg0NDEKLToxMDlERjAwMDAxMEIyMDI1QUUwNDAwMDQ4Q0U1MDAzODhGOTAwMDI0NzAKLToxMDlFMDAwMDAwMDA1MDIxMDAwQTE5MDBBRTA1MDAxODhDRUMwMDM0NDcKLToxMDlFMTAwMDNDMDg3RkZGMzUwNEZGRkZBRTBDMDAxQzkwRTkwMDNFQkMKLToxMDlFMjAwMDhFMUYwMDFDOEUxODAwMTgwMDA5QzkwMDAwMDkzNzAyOTcKLToxMDlFMzAwMDAzRjk2ODIxMDA2NjEwMjUwMUI5NzgyQjAzMDI3MDIxMEYKLToxMDlFNDAwMDAxQ0Y1ODIxQUUwRDAwMUNBRTBCMDAxOEFFMDAwMDBDNjcKLToxMDlFNTAwMEFFMDAwMDEwOTBFNTAwM0U4RkFGMDAyODI0MEUwMDA1RjQKLToxMDlFNjAwMEE2MDUwMDE0OTRFQzAwMDQyNDA1QzAwMDAxRTQ1ODI0NjUKLToxMDlFNzAwMEE2MEMwMDE2OTBFQTAwM0UwMUUwMjAyMUE2MEEwMDIwNzAKLToxMDlFODAwMDk0RTYwMDA0QTYwNjAwMjJBRTAwMDAyNDkwRTMwMDNGMDIKLToxMDlFOTAwMEE2MDMwMDAyOTBFOTAwM0U5MEZGMDAzRDAzRTlDODIzQkQKLToxMDlFQTAwMDI3MzgwMDAxQTIxODAwMDE4RjhEMDAyNDNDMTA4MDA4ODMKLToxMDlFQjAwMEFEQUYwMDA4QTFBRTAwMzA4Rjk4MDAyNDhGODIwMDg0REYKLToxMDlFQzAwMDM2MEYwMTAwOTcwQzAwMzI5NDRBMDAxMjI0MTBGRjgwRDQKLToxMDlFRDAwMDAwQUMzODI0MzE0NjNGRkYwMEU2MTgyNUE3MDMwMDMyQzYKLToxMDlFRTAwMDkzMDkwMDMyMjQwNUZGQkYyNDAzRkZERjMxM0YwMDNGMDkKLToxMDlFRjAwMDM3RjkwMDQwQTMxOTAwMzI4RjhDMDAyNDI0MThGRkZGOEIKLToxMDlGMDAwMEFEODAwMDM0OERFRTAwQzBBRDhFMDAzODkxOEQwMDNDRTgKLToxMDlGMTAwMDMxQTIwMDdGQTE4MjAwM0M4Rjg3MDAyNDkwRUEwMDNDQTAKLToxMDlGMjAwMDAxNDUzMDI0QTBFNjAwM0M4Rjk5MDAyNDkzMjkwMDNDOTEKLToxMDlGMzAwMDAxMjNGODI0QTMzRjAwM0M4RjhEMDAyNDNDMUY4MDA4QTAKLToxMDlGNDAwMEFEQjgwMDQwQURCMjAwNDQ5MUFGMDA0ODNDMTI4MDAwNzMKLToxMDlGNTAwMDAxRjA3MDI1QTFBRTAwNDg4Rjg3MDAyNDhGODYwMDg0MTEKLToxMDlGNjAwMDhDRUMwMDQ4MDE5MjEwMjQwMDRCNTAyNUFDRUEwMDQ4Q0MKLToxMDlGNzAwMDkwQzUwMDNFQTBFNTAwNEM4Rjg4MDA4NDhGODMwMDI0QUMKLToxMDlGODAwMDk1MDkwMDA0QTQ2OTAwNEU4RkU1MDA2MDBFMDAwMkU2MEEKLToxMDlGOTAwMDAwMDAwMDAwOEY5OUZGMkM4RkFFMDAyODAwMDI4MTQwNDYKLToxMDlGQTAwMDkzMkYwMDdDMDAwMkMxMDAwMjE4NjgyMTMxRjIwMDAyRTgKLToxMDlGQjAwMDAwNDAyODIxMTY0MDAwQUEwMUNEMzAyMTNDMEE4MDA4MkIKLToxMDlGQzAwMDM1NDMwMDgwOTA2OTAwN0MzMTNGMDAwNDEzRTAwMDAzQkEKLToxMDlGRDAwMDhGQUUwMDI4MDAwNTYwODAwMENDMzAyMTI0MEQwMDA0RTUKLToxMDlGRTAwMDhGOTAwMDI0MzFDNzAwMDMwMUE3NTgyMzMxNjgwMDAzNzQKLToxMDlGRjAwMDAwQzgyMDIxQUUwNDAwMzQzQzA2ODAwOEE2MjUwMDM4QTUKLToxMEEwMDAwMDNDMDU4MDAwOENBNDAxMDA5MEQxMDAwODBFMDAwRTg3NTIKLToxMEEwMTAwMDMyMjUwMDdGMEUwMDBFQkMwMDAwMDAwMDBBMDAxMkFBQ0MKLToxMEEwMjAwMDhGQTMwMDIwOEY4NTAwMjA4Q0MyMDAzODI0MTgwMDAzRTUKLToxMEEwMzAwMEE0QTAwMDA4QUNBMjAwMDA4Q0RGMDAzNEEwQTAwMDBBOUQKLToxMEEwNDAwMDhGOTIwMDg0QUNCRjAwMDQzQzA0MDA4MDkyNEYwMDNGMUMKLToxMEEwNTAwMEEwQjgwMDBDOENBRTAwMEMzQzBERkY5RkEwQUYwMDBCMTUKLToxMEEwNjAwMDAxQzQ0MDI1MzVBQkZGRkYzQzExRkZFRjhGOTgwMDg0MDIKLToxMEEwNzAwMDAxMEIzMDI0MzYzOUZGRkYwMEQ5NjAyNEFDQUMwMDBDNTIKLToxMEEwODAwMDhGMDMwMDE0OTcxRjAwMTI4Rjg3MDA4MEFDQTMwMDEwNkQKLToxMEEwOTAwMDhGMDkwMDE0QUNBMDAwMThBQ0EwMDAyMEFDQTkwMDE0REIKLToxMEEwQTAwMEFDQTAwMDI0OEYwQTAwMTgzM0U5M0ZGRjAwMDkxMTgwOUIKLToxMEEwQjAwMEFDQUEwMDI4OEYxMjAwMDgwMDQ3NzgyMTMzRUUwMDAxNzcKLToxMEEwQzAwMEFDQjIwMDMwOEYwODAwMEM4Rjk5MDAyNDAwMEY2OUMyRDkKLToxMEEwRDAwMDAwMEUyMzgwMDFBNDU4MjEyNDExMDAwMjNDMDY4MDA4QjAKLToxMEEwRTAwMEE0QUIwMDFDQTRBMDAwMzRBQ0E4MDAyQ0EzMzEwMDAwMzkKLToxMEEwRjAwMDM0RDkwMDgwOTcyQzAwNUM4RjhGMDAyNDNDMDM0MjAwRjEKLToxMEExMDAwMDMxOEFGRkZGMDE0MzM4MjVBREU3MDAwNDhGODIwMDg0QzgKLToxMEExMTAwMDI0MTgwMDAxMjQxMUMwMDA4QzVGMDAzODI0MDcwMDM0OEIKLToxMEExMjAwMEFERkYwMDE4OEM1MjAwMzRBREYyMDAxQ0FERTAwMDBDMDUKLToxMEExMzAwMEFERTAwMDEwQTVFMDAwMTRBNUUwMDAxNkE1RTAwMDIwQTkKLToxMEExNDAwMEE1RTAwMDIyQURFMDAwMjRBNUYwMDAwMkExRjgwMDAxODYKLToxMEExNTAwMDhGOEIwMDI0OEY4RTAwODRBRDcwMDAwODkxQ0QwMDAwOUQKLToxMEExNjAwMEExNkQwMDMwOEY4ODAwODQ4Rjg0MDAyNDkxMDUwMDAxNDgKLToxMEExNzAwMEEwODUwMDMxOEY5MjAwMjQ5NjRDMDAzMjAxOTE1MDI0MkEKLToxMEExODAwMDAxNDkxODI1QTY0MzAwMzI5MjVGMDAzMjMzRTIwMDNGQjYKLToxMEExOTAwMEEyNDIwMDMyOTMzODAwN0MzMzBGMDAwMjE1RTAwMDAyMjcKLToxMEExQTAwMDhGODQwMDI0MjQwNzAwMzAzQzAyODAwOEFDODcwMDM0RjAKLToxMEExQjAwMDM0NTIwMTAwOEU1RjAwQzAyNDBFRkZCRjAyMDA5MDIxQzgKLToxMEExQzAwMEFDOUYwMDM4OTA5ODAwM0MzMzBGMDA3RkEwOEYwMDNDN0MKLToxMEExRDAwMDhGODgwMDI0OTEwRDAwM0MwMUFFNTgyNEExMEIwMDNDNTcKLToxMEExRTAwMDhGODYwMDI0OTBEMTAwM0MzNjM5MDAyMEEwRDkwMDNDNTUKLToxMEExRjAwMDhGOEEwMDg0OEY4NTAwMjQwMDEwODgyQjhENEMwMDIwQ0UKLToxMEEyMDAwMEFDQUMwMDQwOEQ0MzAwMjRBQ0EzMDA0NDhENDkwMDI4MzEKLToxMEEyMTAwMEFDQTkwMDQ4OEQ0NzAwMkNBQ0E3MDA0QzBFMDAwRUJDMkEKLToxMEEyMjAwMDNDMTA4MDAwMEEwMDExMTYwMDAwMDAwMDk0Q0QwMDUyN0UKLToxMEEyMzAwMDNDMEIwODAwOEQ2QjAwMjQwMTZEODgyMUE0RDEwMDUyRDUKLToxMEEyNDAwMDBBMDAxMEMxMDAxRTg4MkJBMDg3MDAwMThGODQwMDI0MDMKLToxMEEyNTAwMDI0MEQwMDAxQUM4RDAwMDgwQTAwMTI1RjNDMTg4MDA4MzQKLToxMEEyNjAwMDAwMDI5MDgwMEEwMDEzM0UwMEQyMzAyMTI3QkRGRkUwOUIKLToxMEEyNzAwMDNDMEQ4MDA4QUZCMjAwMThBRkIwMDAxMEFGQkYwMDFDOUIKLToxMEEyODAwMEFGQjEwMDE0MzVCMjAwODA4RTRDMDAxODM1QTgwMTAwMjMKLToxMEEyOTAwMDk2NEIwMDA2OTVBNzAwNTA5MTA5MDBFQzAwMEM1NjAyNjEKLToxMEEyQTAwMDAxNjcyODIzMzE0MzAwN0YzMTI2MDBGRjI0MDIwMDAzODkKLToxMEEyQjAwMEEzODMwMDg4QUY4NDAwODAxMEMyMDAxQjMwQjBGRkZGNzIKLToxMEEyQzAwMDkxMDYwMEVDMjQxMjAwMDUzMEMyMDBGRjEwNTIwMDMzNEEKLToxMEEyRDAwMDAwMDAwMDAwMTYwMDAwMDk4RkJGMDAxQzhGQjIwMDE4OUMKLToxMEEyRTAwMDhGQjEwMDE0OEZCMDAwMTAyNDBEMEMwMDNDMEM4MDAwQzYKLToxMEEyRjAwMDI3QkQwMDIwMDNFMDAwMDhBRDhEMDAyNDBFMDAxMEE0NEYKLToxMEEzMDAwMDAyMDAyMDIxOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0RjMKLToxMEEzMTAwMDhGQjAwMDEwMjQwRDBDMDAzQzBDODAwMDI3QkQwMDIwRTUKLToxMEEzMjAwMDAzRTAwMDA4QUQ4RDAwMjQ5NjU4MDA3ODk2NTEwMDdBMUQKLToxMEEzMzAwMDkyNEUwMDdEMDIzODc4MjYzMUU4RkZGRjMxQzQwMEMwMUMKLToxMEEzNDAwMDE0ODAwMDA5MkQxMTAwMDExNjAwMDAzNzAwMDAwMDAwRTQKLToxMEEzNTAwMDU2MjBGRkUyOEZCRjAwMUMwRTAwMEY3QTAwMDAwMDAwQTUKLToxMEEzNjAwMDBBMDAxNDA2OEZCRjAwMUMxNjIwRkZEQTAwMDAwMDAwNTAKLToxMEEzNzAwMDBFMDAwRjdBMDAwMDAwMDAxNDQwRkZEODhGQkYwMDFDQjEKLToxMEEzODAwMDE2MDAwMDIyMDAwMDAwMDA5MjVGMDA3RDMzRTIwMDNGRDMKLToxMEEzOTAwMEEyNDIwMDdEMEEwMDE0MDY4RkJGMDAxQzk1MDkwMERBNTYKLToxMEEzQTAwMDhGODYwMDYwMDA4MDI4MjEyNDA0MDAwNTBFMDAwNjc0QkEKLToxMEEzQjAwMDMxMzBGRkZGOTc4MzAwNzIzQzA0ODAwMDI0NjVGRkZGNkIKLToxMEEzQzAwMEE3ODUwMDcyOEM4QTAxQjgwNTQwRkZGRTAwMDAwMDAwREUKLToxMEEzRDAwMEFDODAwMTgwOEZCRjAwMUNBQzkwMDE4NDhGQjIwMDE4NEMKLToxMEEzRTAwMDhGQjEwMDE0OEZCMDAwMTAzQzA3NjAxMzNDMEIxMDAwQkQKLToxMEEzRjAwMDI0MEQwQzAwM0MwQzgwMDAyN0JEMDAyMEFDODcwMTg4OTgKLToxMEE0MDAwMEFDOEIwMUI4MDNFMDAwMDhBRDhEMDAyNDBFMDAxMEE0NTEKLToxMEE0MTAwMDAyMDAyMDIxNTA0MEZGQjE4RkJGMDAxQzkyNUYwMDdERTEKLToxMEE0MjAwMDBBMDAxNDMzMzNFMjAwM0YwRTAwMTBBNDAyMDAyMDIxODIKLToxMEE0MzAwMDE0NDBGRkFBOEZCRjAwMUMxMjIwMDAwNzAwMDAwMDAwN0MKLToxMEE0NDAwMDkyNTkwMDdEMzMzMDAwM0YzNjAyMDA0MEEyNDIwMDdEMjkKLToxMEE0NTAwMDBBMDAxNDA2OEZCRjAwMUMwRTAwMEY3QTAwMDAwMDAwRDcKLToxMEE0NjAwMDUwNDBGRjlFOEZCRjAwMUM5MjU5MDA3RDMzMzAwMDNGNEIKLTowOEE0NzAwMDBBMDAxNDYyMzYwMjAwNDBFQwotOjA4QTQ3ODAwMDAwMDAwMDAwMDAwMDAxQkMxCi06MTBBNDgwMDAwMDAwMDAwRjAwMDAwMDBBMDAwMDAwMDgwMDAwMDAwNkE1Ci06MTBBNDkwMDAwMDAwMDAwNTAwMDAwMDA1MDAwMDAwMDQwMDAwMDAwNEFBCi06MTBBNEEwMDAwMDAwMDAwMzAwMDAwMDAzMDAwMDAwMDMwMDAwMDAwM0EwCi06MTBBNEIwMDAwMDAwMDAwMzAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjkzCi06MTBBNEMwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjg0Ci06MTBBNEQwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjc0Ci06MTBBNEUwMDAwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDIwMDAwMDAwMjY0Ci06MENBNEYwMDAwMDAwMDAwMTAwMDAwMDAxMDAwMDAwMDE1RAotOjA0QTRGQzAwODAwODAxMDBEMwotOjEwQTUwMDAwODAwODAwODA4MDA4MDAwMDAwMDAwQzAwMDAwMDMwODBGRgotOjEwQTUxMDAwMDgwMDBGNDgwODAwMEZGNDA4MDAxMDBDMDgwMDEwMjA3NQotOjEwQTUyMDAwMDgwMDEwMzQwODAwMEY0ODA4MDAwRjQ4MDgwMDEwNjhBMQotOjEwQTUzMDAwMDgwMDEwQTAwODAwMTBCMDA4MDAxMEQ4MDgwMDE3QzhDNAotOjEwQTU0MDAwMDgwMDE3QzgwODAwMTgwMDA4MDAxODAwMDgwMDE4MTRCMAotOjEwQTU1MDAwMDgwMDE3RTQwODAwMUEzQzA4MDAxQTA4MDgwMDFBOTRCQQotOjEwQTU2MDAwMDgwMDFBOTQwODAwMUIxQzA4MDAxQTRDODAwODAyNDBCRQotOjEwQTU3MDAwMDgwMDIxQTgwODAwMUZGNDA4MDAyMUQwMDgwMDIyNjg2NAotOjEwQTU4MDAwMDgwMDIzQjgwODAwMjQwNDA4MDAyNTI4MDgwMDI0MzAwNwotOjEwQTU5MDAwMDgwMDI0QjQwODAwMjA2NDA4MDAyOUQwMDgwMDI5NzRBOQotOjEwQTVBMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDI1OUMzQQotOjEwQTVCMDAwMDgwMDI1OUMwODAwMjAxMDA4MDAyMDEwMDgwMDI4NENFNgotOjEwQTVDMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTBBQgotOjEwQTVEMDAwMDgwMDI4QUMwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTBGNwotOjEwQTVFMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTA4QgotOjEwQTVGMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTA3QgotOjEwQTYwMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDI0MjQ1MgotOjEwQTYxMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyOTFDMDgwMDIwMTA0NQotOjEwQTYyMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTA0QQotOjEwQTYzMDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTAzQQotOjEwQTY0MDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTAyQQotOjEwQTY1MDAwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMDgwMDIwMTAxQQotOjEwQTY2MDAwMDgwMDI3NzAwODAwMjAxMDA4MDAyMDEwMDgwMDI2RTRDOQotOjEwQTY3MDAwMDgwMDI2NDAwODAwMzc4ODA4MDAzNzVDMDgwMDM3MjhBMwotOjEwQTY4MDAwMDgwMDM2RkMwODAwMzZEQzA4MDAzNjkwODAwODAxMDAxRgotOjEwQTY5MDAwODAwODAwODA4MDA4MDAwMDgwMDgwMDgwMDgwMDQ2RjBFNAotOjEwQTZBMDAwMDgwMDQ3MjgwODAwNDY3MDA4MDA0NkYwMDgwMDQ2RjBGOQotOjBDQTZCMDAwMDgwMDQ0NTAwODAwNDZGMDA4MDA0QUM0QUUKLTowNEE2QkMwMDBBMDAwQzc2MEUKLToxMEE2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcyNzg3MDM1RUUKLToxMEE2RDAwMDJFMzAyRTMwNkEzMzAwMDAwNTAwMDAwMzAwMDAwMDAwMTkKLToxMEE2RTAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEE2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKLToxMEE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKLToxMEE3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKLToxMEE3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKLToxMEE3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKLToxMEE3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLToxMEE3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMEE3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMEE3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKLToxMEE3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKLToxMEE3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMEE3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKLToxMEE3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKLToxMEE3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKLToxMEE3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLToxMEE3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEE3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKLToxMEE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKLToxMEE4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLToxMEE4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKLToxMEE4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMEE4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLToxMEE4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMEE4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMEE4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMEE4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEE4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEE4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEE4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEE4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMEE4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKLToxMEE4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKLToxMEE4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKLToxMEE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKLToxMEE5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKLToxMEE5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKLToxMEE5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKLToxMEE5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMEE5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKLToxMEE5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKLToxMEE5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMEE5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMEE5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKLToxMEE5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMEE5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMEE5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMEE5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMEE5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKLToxMEE5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMEFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKLToxMEFBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKLToxMEFBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKLToxMEFBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMEFBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLToxMEFBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKLToxMEFBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKLToxMEFBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKLToxMEFBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKLToxMEFBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKLToxMEFBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKLToxMEFBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKLToxMEFBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKLToxMEFBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKLToxMEFBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKLToxMEFBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKLToxMEFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKLToxMEFCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKLToxMEFCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKLToxMEFCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKLToxMEFCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLToxMEFCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKLToxMEFCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKLToxMEFCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKLToxMEFCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKLToxMEFCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKLToxMEFCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKLToxMEFCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKLToxMEFCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKLToxMEFCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKLToxMEFCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKLToxMEFCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKLToxMEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKLToxMEFDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKLToxMEFDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKLToxMEFDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKLToxMEFDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLToxMEFDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKLToxMEFDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKLToxMEFDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKLToxMEFDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKLToxMEFDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKLToxMEFDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKLToxMEFDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKLToxMEFDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKLToxMEFDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKLToxMEFDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKLToxMEFDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKLToxMEFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKLToxMEFEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKLToxMEFEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKLToxMEFEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKLToxMEFENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKLToxMEFENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKLToxMEFENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKLToxMEFENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMEFEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKLToxMEFEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKLToxMEFEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKLToxMEFEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKLToxMEFEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKLToxMEFERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKLToxMEFERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKLToxMEFERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKLToxMEFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKLToxMEFFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMEFFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKLToxMEFFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKLToxMEFFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLToxMEFFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKLToxMEFFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKLToxMEFFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKLToxMEFFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKLToxMEFFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKLToxMEFFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKLToxMEFFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKLToxMEFFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKLToxMEFFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKLToxMEFFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKLToxMEFFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKLToxMEFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKLToxMEFGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKLToxMEFGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKLToxMEFGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLToxMEFGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLToxMEFGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKLToxMEFGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKLToxMEFGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKLToxMEFGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKLToxMEFGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKLToxMEFGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKLToxMEFGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKLToxMEFGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKLToxMEFGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKLToxMEFGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKLToxMEFGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKLToxMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKLToxMEIwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKLToxMEIwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKLToxMEIwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLToxMEIwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLToxMEIwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKLToxMEIwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKLToxMEIwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKLToxMEIwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKLToxMEIwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKLToxMEIwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKLToxMEIwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKLToxMEIwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKLToxMEIwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKLToxMEIwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMEIwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKLToxMEIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKLToxMEIxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKLToxMEIxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKLToxMEIxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKLToxMEIxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKLToxMEIxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKLToxMEIxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKLToxMEIxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKLToxMEIxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKLToxMEIxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKLToxMEIxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKLToxMEIxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMEIxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKLToxMEIxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKLToxMEIxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMEIxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKLToxMEIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKLToxMEIyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMEIyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKLToxMEIyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMEIyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMEIyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKLToxMEIyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKLToxMEIyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKLToxMEIyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKLToxMEIyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKLToxMEIyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKLToxMEIyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKLToxMEIyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKLToxMEIyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKLToxMEIyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKLToxMEIyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKLToxMEIzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKLToxMEIzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKLToxMEIzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKLToxMEIzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKLToxMEIzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKLToxMEIzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKLToxMEIzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKLToxMEIzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMEIzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKLToxMEIzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMEIzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMEIzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMEIzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMEIzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKLToxMEIzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKLToxMEIzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKLToxMEI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKLToxMEI0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKLToxMEI0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKLToxMEI0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKLToxMEI0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKLToxMEI0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKLToxMEI0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKLToxMEI0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKLToxMEI0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKLToxMEI0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKLToxMEI0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKLToxMEI0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKLToxMEI0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKLToxMEI0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKLToxMEI0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKLToxMEI0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKLToxMEI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKLToxMEI1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKLToxMEI1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKLToxMEI1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIKLToxMEI1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKLToxMEI1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKLToxMEI1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKLToxMEI1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKLToxMEI1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKLToxMEI1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKLToxMEI1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKLToxMEI1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKLToxMEI1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKLToxMEI1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKLToxMEI1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUIKLToxMEI1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKLToxMEI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKLToxMEI2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKLToxMEI2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKLToxMEI2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKLToxMEI2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMEI2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKLToxMEI2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKLToxMEI2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKLToxMEI2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKLToxMEI2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKLToxMEI2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKLToxMEI2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKLToxMEI2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKLToxMEI2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKLToxMEI2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKLToxMEI2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKLToxMEI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKLToxMEI3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKLToxMEI3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKLToxMEI3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLToxMEI3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMEI3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMEI3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKLToxMEI3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKLToxMEI3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMEI3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKLToxMEI3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKLToxMEI3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKLToxMEI3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLToxMEI3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEI3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKLToxMEI3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKLToxMEI4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLToxMEI4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKLToxMEI4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMEI4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLToxMEI4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMEI4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMEI4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMEI4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEI4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEI4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEI4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEI4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMEI4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKLToxMEI4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKLToxMEI4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKLToxMEI4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKLToxMEI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKLToxMEI5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKLToxMEI5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKLToxMEI5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMEI5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKLToxMEI5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKLToxMEI5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMEI5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMEI5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKLToxMEI5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMEI5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMEI5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMEI5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMEI5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKLToxMEI5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMEI5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKLToxMEJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKLToxMEJBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKLToxMEJBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMEJBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLToxMEJBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKLToxMEJBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKLToxMEJBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKLToxMEJBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKLToxMEJBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKLToxMEJBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKLToxMEJBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKLToxMEJBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKLToxMEJBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKLToxMEJBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKLToxMEJBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKLToxMEJBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKLToxMEJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKLToxMEJCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKLToxMEJCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKLToxMEJCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLToxMEJCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKLToxMEJCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKLToxMEJCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKLToxMEJCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKLToxMEJCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKLToxMEJCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKLToxMEJCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKLToxMEJCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKLToxMEJCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKLToxMEJCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKLToxMEJCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKLToxMEJCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKLToxMEJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKLToxMEJDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKLToxMEJDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKLToxMEJDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLToxMEJDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKLToxMEJDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKLToxMEJDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKLToxMEJDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKLToxMEJDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKLToxMEJDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKLToxMEJDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKLToxMEJDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKLToxMEJDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKLToxMEJDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKLToxMEJDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKLToxMEJDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKLToxMEJEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKLToxMEJEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKLToxMEJEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKLToxMEJEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKLToxMEJENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKLToxMEJENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKLToxMEJENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMEJENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKLToxMEJEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKLToxMEJEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKLToxMEJEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKLToxMEJEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKLToxMEJEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKLToxMEJERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKLToxMEJERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKLToxMEJERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKLToxMEJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMEJFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKLToxMEJFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKLToxMEJFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLToxMEJFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKLToxMEJFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKLToxMEJFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKLToxMEJFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKLToxMEJFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKLToxMEJFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKLToxMEJFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKLToxMEJFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKLToxMEJFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKLToxMEJFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKLToxMEJFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKLToxMEJFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKLToxMEJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKLToxMEJGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKLToxMEJGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLToxMEJGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLToxMEJGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKLToxMEJGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKLToxMEJGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKLToxMEJGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKLToxMEJGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKLToxMEJGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKLToxMEJGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKLToxMEJGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKLToxMEJGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKLToxMEJGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKLToxMEJGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKLToxMEJGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKLToxMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKLToxMEMwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKLToxMEMwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLToxMEMwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLToxMEMwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKLToxMEMwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKLToxMEMwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKLToxMEMwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKLToxMEMwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKLToxMEMwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKLToxMEMwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKLToxMEMwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKLToxMEMwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKLToxMEMwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMEMwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKLToxMEMwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKLToxMEMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKLToxMEMxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKLToxMEMxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKLToxMEMxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKLToxMEMxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKLToxMEMxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKLToxMEMxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKLToxMEMxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKLToxMEMxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKLToxMEMxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKLToxMEMxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMEMxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKLToxMEMxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKLToxMEMxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMEMxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKLToxMEMxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKLToxMEMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMEMyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKLToxMEMyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMEMyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMEMyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKLToxMEMyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKLToxMEMyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKLToxMEMyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKLToxMEMyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKLToxMEMyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKLToxMEMyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKLToxMEMyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKLToxMEMyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKLToxMEMyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKLToxMEMyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKLToxMEMyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKLToxMEMzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKLToxMEMzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKLToxMEMzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKLToxMEMzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKLToxMEMzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKLToxMEMzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKLToxMEMzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMEMzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKLToxMEMzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMEMzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMEMzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMEMzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMEMzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKLToxMEMzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKLToxMEMzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKLToxMEMzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKLToxMEM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKLToxMEM0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKLToxMEM0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKLToxMEM0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKLToxMEM0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKLToxMEM0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKLToxMEM0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKLToxMEM0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKLToxMEM0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKLToxMEM0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKLToxMEM0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKLToxMEM0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKLToxMEM0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKLToxMEM0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKLToxMEM0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKLToxMEM0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKLToxMEM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKLToxMEM1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKLToxMEM1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIKLToxMEM1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKLToxMEM1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKLToxMEM1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKLToxMEM1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKLToxMEM1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKLToxMEM1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKLToxMEM1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKLToxMEM1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKLToxMEM1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKLToxMEM1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKLToxMEM1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUIKLToxMEM1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKLToxMEM1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKLToxMEM2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKLToxMEM2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKLToxMEM2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKLToxMEM2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMEM2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKLToxMEM2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKLToxMEM2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKLToxMEM2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKLToxMEM2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKLToxMEM2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKLToxMEM2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKLToxMEM2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKLToxMEM2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKLToxMEM2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKLToxMEM2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKLToxMEM2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKLToxMEM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKLToxMEM3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKLToxMEM3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLToxMEM3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMEM3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMEM3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKLToxMEM3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKLToxMEM3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMEM3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKLToxMEM3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKLToxMEM3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKLToxMEM3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLToxMEM3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEM3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKLToxMEM3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKLToxMEM3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKLToxMEM4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjgKLToxMEM4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMEM4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLToxMEM4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMEM4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMEM4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMEM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEM4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEM4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEM4OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEM4QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODgKLToxMEM4QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzgKLToxMEM4QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjgKLToxMEM4RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTgKLToxMEM4RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDgKLToxMEM4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzgKLToxMEM5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjcKLToxMEM5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTcKLToxMEM5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcKLToxMEM5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjcKLToxMEM5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTcKLToxMEM5NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKLToxMEM5NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMEM5NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKLToxMEM5ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMEM5OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMEM5QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMEM5QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzcKLToxMEM5QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjcKLToxMEM5RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTcKLToxMEM5RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDcKLToxMEM5RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzcKLToxMENBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjYKLToxMENBMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTYKLToxMENBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYKLToxMENBMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjYKLToxMENBNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTYKLToxMENBNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDYKLToxMENBNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzYKLToxMENBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjYKLToxMENBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTYKLToxMENBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTYKLToxMENBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODYKLToxMENBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzYKLToxMENBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjYKLToxMENBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTYKLToxMENBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDYKLToxMENBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzYKLToxMENCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjUKLToxMENCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTUKLToxMENCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUKLToxMENCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjUKLToxMENCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTUKLToxMENCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDUKLToxMENCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzUKLToxMENCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUKLToxMENCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTUKLToxMENCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTUKLToxMENCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODUKLToxMENCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzUKLToxMENCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjUKLToxMENCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTUKLToxMENCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDUKLToxMENCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzUKLToxMENDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKLToxMENDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTQKLToxMENDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKLToxMENDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKLToxMENDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTQKLToxMENDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDQKLToxMENDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzQKLToxMENDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjQKLToxMENDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTQKLToxMENDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTQKLToxMENDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODQKLToxMENDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzQKLToxMENDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjQKLToxMENDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKLToxMENDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDQKLToxMENDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKLToxMENEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKLToxMENEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKLToxMENEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKLToxMENEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKLToxMENENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKLToxMENENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKLToxMENENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKLToxMENENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKLToxMENEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKLToxMENEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTMKLToxMENEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODMKLToxMENEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzMKLToxMENEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjMKLToxMENERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKLToxMENERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKLToxMENERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKLToxMENFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKLToxMENFMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKLToxMENFMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIKLToxMENFMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKLToxMENFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKLToxMENFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKLToxMENFNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKLToxMENFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjIKLToxMENFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKLToxMENFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTIKLToxMENFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODIKLToxMENFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKLToxMENFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKLToxMENFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKLToxMENFRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKLToxMENFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKLToxMENGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjEKLToxMENGMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTEKLToxMENGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEKLToxMENGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjEKLToxMENGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTEKLToxMENGNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDEKLToxMENGNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKLToxMENGNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKLToxMENGODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKLToxMENGOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKLToxMENGQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODEKLToxMENGQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzEKLToxMENGQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjEKLToxMENGRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTEKLToxMENGRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDEKLToxMENGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEKLToxMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjAKLToxMEQwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKLToxMEQwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLToxMEQwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjAKLToxMEQwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTAKLToxMEQwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKLToxMEQwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzAKLToxMEQwNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKLToxMEQwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTAKLToxMEQwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKLToxMEQwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKLToxMEQwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzAKLToxMEQwQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKLToxMEQwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKLToxMEQwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDAKLToxMEQwRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKLToxMEQxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKLToxMEQxMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYKLToxMEQxMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKLToxMEQxMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKLToxMEQxNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREYKLToxMEQxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKLToxMEQxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKLToxMEQxNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUYKLToxMEQxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUYKLToxMEQxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEYKLToxMEQxQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0YKLToxMEQxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkYKLToxMEQxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKLToxMEQxRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKLToxMEQxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0YKLToxMEQxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKLToxMEQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKLToxMEQyMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKLToxMEQyMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKLToxMEQyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKLToxMEQyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKLToxMEQyNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0UKLToxMEQyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkUKLToxMEQyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUUKLToxMEQyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUUKLToxMEQyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEUKLToxMEQyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKLToxMEQyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKLToxMEQyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUUKLToxMEQyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKLToxMEQyRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKLToxMEQyRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKLToxMEQzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKLToxMEQzMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQKLToxMEQzMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkQKLToxMEQzMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUQKLToxMEQzNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREQKLToxMEQzNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0QKLToxMEQzNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkQKLToxMEQzNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUQKLToxMEQzODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUQKLToxMEQzOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQKLToxMEQzQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0QKLToxMEQzQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkQKLToxMEQzQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUQKLToxMEQzRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEQKLToxMEQzRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0QKLToxMEQzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkQKLToxMEQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUMKLToxMEQ0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMKLToxMEQ0MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkMKLToxMEQ0MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUMKLToxMEQ0NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREMKLToxMEQ0NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0MKLToxMEQ0NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkMKLToxMEQ0NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUMKLToxMEQ0ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUMKLToxMEQ0OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEMKLToxMEQ0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0MKLToxMEQ0QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkMKLToxMEQ0QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUMKLToxMEQ0RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEMKLToxMEQ0RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0MKLToxMEQ0RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkMKLToxMEQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKLToxMEQ1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIKLToxMEQ1MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkIKLToxMEQ1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUIKLToxMEQ1NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREIKLToxMEQ1NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0IKLToxMEQ1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkIKLToxMEQ1NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUIKLToxMEQ1ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUIKLToxMEQ1OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEIKLToxMEQ1QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0IKLToxMEQ1QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkIKLToxMEQ1QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUIKLToxMEQ1RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEIKLToxMEQ1RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0IKLToxMEQ1RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkIKLToxMEQ2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUEKLToxMEQ2MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEKLToxMEQ2MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkEKLToxMEQ2MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUEKLToxMEQ2NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREEKLToxMEQ2NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0EKLToxMEQ2NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkEKLToxMEQ2NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQUEKLToxMEQ2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOUEKLToxMEQ2OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEEKLToxMEQ2QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0EKLToxMEQ2QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkEKLToxMEQ2QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUEKLToxMEQ2RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEEKLToxMEQ2RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0EKLToxMEQ2RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkEKLToxMEQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTkKLToxMEQ3MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkKLToxMEQ3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjkKLToxMEQ3MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTkKLToxMEQ3NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDkKLToxMEQ3NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzkKLToxMEQ3NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjkKLToxMEQ3NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTkKLToxMEQ3ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTkKLToxMEQ3OTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODkKLToxMEQ3QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzkKLToxMEQ3QjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjkKLToxMEQ3QzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTkKLToxMEQ3RDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDkKLToxMEQ3RTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzkKLToxMEQ3RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjkKLToxMEQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTgKLToxMEQ4MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgKLToxMEQ4MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKLToxMEQ4MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTgKLToxMEQ4NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMEQ4NTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzgKLToxMEQ4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjgKLToxMEQ4NzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLToxMEQ4ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTgKLToxMEQ4OTAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMzAwMDAwMDAwNzUKLToxMEQ4QTAwMDAwMDAwMDBEMDAwMDAwMEQzQzAyMDgwMTI0NDI4MjIwMEYKLToxMEQ4QjAwMDNDMDMwODAxMjQ2MzgyRTBBQzQwMDAwMDAwNDMyMDJCQkQKLToxMEQ4QzAwMDE0ODBGRkZEMjQ0MjAwMDQzQzFEMDgwMDM3QkQ5RkZDNkUKLToxMEQ4RDAwMDAzQTBGMDIxM0MxMDA4MDAyNjEwMzFEODNDMUMwODAxQTAKLToxMEQ4RTAwMDI3OUM4MjIwMEUwMDExRUEwMDAwMDAwMDAwMDAwMDBEQkQKLToxMEQ4RjAwMDNDMDI4MDAwMzBBNUZGRkYzMEM2MDBGRjM0NDMwMTgwQUEKLToxMEQ5MDAwMDNDMDg4MDAwOEQwOTAxQjgwNTIwRkZGRTAwMDAwMDAwRTIKLToxMEQ5MTAwMEFDNjQwMDAwMjQwNDAwMDJBNDY1MDAwOEEwNjYwMDBBQUMKLToxMEQ5MjAwMEEwNjQwMDBCQUM2NzAwMTgzQzAzMTAwMDAzRTAwMDA4ODMKLToxMEQ5MzAwMEFEMDMwMUI4M0MwNTYwMDA4Q0EyNEZGODA0NDBGRkZFMjcKLToxMEQ5NDAwMDAwMDAwMDAwQUNBNDRGQzAzQzAzMTAwMDNDMDQwMjAwRTcKLToxMEQ5NTAwMEFDQTQ0RkM0MDNFMDAwMDhBQ0EzNEZGODk0ODYwMDBDQkQKLToxMEQ5NjAwMDAwQTA1MDIxMjQ4ODAwMTQwMDA2MkIwMjAwMDUxMDgwMUUKLToxMEQ5NzAwMDAwNDQ0ODIxMDEwOTE4MkIxMDYwMDAxMTAwMDAwMDAwMkMKLToxMEQ5ODAwMDkxMDMwMDAwMkM2NDAwMDk1MDgwMDAwOTkxMTkwMDAxRTYKLToxMEQ5OTAwMDAwMDM2MDgwM0MwRDA4MDEyNUFEODBFNDAxOEQ1ODIxMTUKLToxMEQ5QTAwMDhENjcwMDAwMDBFMDAwMDgwMDAwMDAwMDkxMTkwMDAxRjAKLToxMEQ5QjAwMDAxMTk0MDIxMDEwOTMwMkI1NEMwRkZGMjkxMDMwMDAwRUUKLToxMEQ5QzAwMDAzRTAwMDA4MDAwMDEwMjEwQTAwMENCRTI1MDgwMDAxMzkKLToxMEQ5RDAwMDkxMEYwMDAxMjQwRTAwMEExNUVFMDA0MDAxMjhDODIzMTMKLToxMEQ5RTAwMDJGMzgwMDBBMTcwMDAwM0QyNTBEMDAwMjhENTgwMDAwNTkKLToxMEQ5RjAwMDI1MEYwMDA2MzcwRTAxMDBBRDRFMDAwMDkxMEMwMDAyMEQKLToxMERBMDAwMDkxQUIwMDAxOTFBNDAwMDI5MUE2MDAwMzAwMEMyRTAwMkUKLToxMERBMTAwMDAwMEIzQzAwMDBBNzEwMjUwMDA0MUEwMDAwNDNDODI1OTUKLToxMERBMjAwMDAzMjZDMDI1QUQ1ODAwMDQ5MTBFMDAwNjkxRUQwMDAxQkIKLToxMERBMzAwMDkxRTcwMDAyOTFFNTAwMDMwMDBFNUUwMDAwMEQ2NDAwMTYKLToxMERBNDAwMDAxNkMzMDI1MDAwNzIyMDAwMEM0MTAyNTAwNDUxODI1NzAKLToxMERBNTAwMDI1MDgwMDBBMEEwMDBDQkVBRDQzMDAwODkxMEYwMDAxMjIKLToxMERBNjAwMDI1MDQwMDAyMjQwODAwMDI1NUU4MDAwMTAxMjAyMDIxQkQKLToxMERBNzAwMDBBMDAwQ0JFMDA4MDQwMjE5MTBDMDAwMTI0MEIwMDAzMjEKLToxMERBODAwMDE1OEIwMDE2MDAwMDAwMDA4RDU4MDAwMDkxMEUwMDAyNUEKLToxMERBOTAwMDI1MDgwMDAzMzcwRDAwMDhBMTRFMDAxMDBBMDAwQ0JFMzcKLToxMERBQTAwMEFENEQwMDAwOTExOTAwMDEyNDBGMDAwNDE3MkYwMDBCNDkKLToxMERBQjAwMDAwMDAwMDAwOTEwNzAwMDI5MTA0MDAwMzhENDMwMDAwNjQKLToxMERBQzAwMDAwMDcyQTAwMDBBNDEwMjUzNDY2MDAwNDI1MDgwMDA0N0QKLToxMERBRDAwMEFENDIwMDBDMEEwMDBDQkVBRDQ2MDAwMDAzRTAwMDA4OTkKLToxMERBRTAwMDI0MDIwMDAxMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwNTMKLToxMERBRjAwMDBFMDAxNEUwMDA4MDgwMjEzQzA0ODAwODM0ODUwMDgwMDIKLToxMERCMDAwMDkwQTYwMDA1MjQwM0ZGRkUwMjAwMjAyMTAwQzMxMDI0N0MKLToxMERCMTAwMDhGQkYwMDE0OEZCMDAwMTBBMEEyMDAwNTBBMDAxNEVBMDUKLToxMERCMjAwMDI3QkQwMDE4MjdCREZGRThBRkIwMDAxMEFGQkYwMDE0M0QKLToxMERCMzAwMDBFMDAwRjRFMDA4MDgwMjEzQzA2ODAwODM0QzUwMDgwMTYKLToxMERCNDAwMDkwQTQwMDAwMjQwMjAwNTAzMDgzMDBGRjEwNjIwMDA3MDAKLToxMERCNTAwMDNDMDk4MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwMEMKLToxMERCNjAwMEFEMjAwMTgwMEEwMDEwMTAyN0JEMDAxODI0MDgwMTAwMTQKLToxMERCNzAwMDNDMDc4MDAwMDIwMDIwMjE4RkJGMDAxNDhGQjAwMDEwRUUKLToxMERCODAwMEFDRTgwMTgwMEEwMDEwMTAyN0JEMDAxODI3QkRGRjcwMDcKLToxMERCOTAwMDNDMDg4MDA4QUZCNjAwODBBRkI1MDA3Q0FGQjEwMDZDMjgKLToxMERCQTAwMEFGQkYwMDhDQUZCRTAwODhBRkI3MDA4NEFGQjQwMDc4QzEKLToxMERCQjAwMEFGQjMwMDc0QUZCMjAwNzBBRkIwMDA2ODM1MDUwMDgwM0QKLToxMERCQzAwMDNDMDc4MDAwOENGMjAxMjg5MEE0MDAwOUFDRTAwMDg0OUUKLToxMERCRDAwMDkwQTYwMDA1MzA5MTAwRkYwMDAwQTgyMTAwMDYxODI3M0MKLToxMERCRTAwMDMwNjIwMDAxMDAwMEIwMjExNDQwMDA2N0FGQTAwMDUwNzcKLToxMERCRjAwMDkwQTkwMDAwMjQwNTAwMjAzMTI0MDBGRjEwODUwMDE2QTQKLToxMERDMDAwMDI0MEEwMDUwMTA4QTAwOEMwMDAwMDAwMDNDMEMwODAwMjAKLToxMERDMTAwMDhEOEMwMERDMjU4QjAwMDEzQzAxMDgwMEFDMkIwMERDNjYKLToxMERDMjAwMDBFMDAxNUQ2MDAwMDAwMDA4RkJGMDA4QzhGQkUwMDg4NEMKLToxMERDMzAwMDhGQjcwMDg0OEZCNjAwODA4RkI1MDA3QzhGQjQwMDc4REEKLToxMERDNDAwMDhGQjMwMDc0OEZCMjAwNzA4RkIxMDA2QzhGQjAwMDY4MUEKLToxMERDNTAwMDAzRTAwMDA4MjdCRDAwOTAwMDAwMDAwRDNDMTA4MDAwOEMKLToxMERDNjAwMEFGQTAwMDMwOTYxRjAxMTY4RTE5MDEwNDNDMUUwMDIwNDMKLToxMERDNzAwMDM2MTMwQzAwMDMzRUMwMjQwMDE4QjgyQjAwMTczMTQwQTcKLToxMERDODAwMEFGQTYwMDMwOEUwRTAxMDQzM0Y0RkZGRjNDMEYwMDQwQkUKLToxMERDOTAwMDAyOTM4MDIxMDFDRjY4MjQ5MjEzMDAwRDExQTAwMDQ4NDcKLToxMERDQTAwMDM0QzQwMDQwMzI2MjAwMjAxNDQwMDAwMjM0ODYwMDgwRjgKLToxMERDQjAwMDAwODAzMDIxMTRDMDAwOTNBRkE2MDAzMDNDMDU4MDA4REUKLToxMERDQzAwMDM0QTgwMDgwOTEwNzAwMDgzMEU2MDA0MDUwQzAwMDA2RUMKLToxMERDRDAwMDNDMDY4MDA4MjQwOTAwMDQxMjI5MDBBMjI0MEEwMDEyMkMKLToxMERDRTAwMDEyMkEwMDI5M0MwNjgwMDgzNEQ0MDEwMDNDMTc4MDAwMjkKLToxMERDRjAwMDk2RUYwMTFBOTYwRDAwMEU5MjhFMDAwODMyNkIwMDA0MEEKLToxMEREMDAwMDMxRjdGRkZGMDFDRDYwMDRBRkFDMDA1NDhFMTQwMDA0NjYKLToxMEREMTAwMDExNjAwMDMxOEUxRTAwMDgzNEMzMDA4MDkwNzkwMDA4MjUKLToxMEREMjAwMDMzMzgwMDQwMTcwMDAwMjgwMDAwMDAwMDhDNzMwMDUwQkEKLToxMEREMzAwMDAyOTM5MDIzMDY0MDAwMDYzQzBDODAwMDhDN0UwMDM0NDkKLToxMERENDAwMDAyOUU4MDIzMDYwMjAwODM4RUEyMDAwODNDMEM4MDAwMDUKLToxMERENTAwMEFEODAwMDQ0MjQwMjAwMDE4RkJGMDA4QzhGQkUwMDg4N0MKLToxMERENjAwMDhGQjcwMDg0OEZCNjAwODA4RkI1MDA3QzhGQjQwMDc4QTkKLToxMERENzAwMDhGQjMwMDc0OEZCMjAwNzA4RkIxMDA2QzhGQjAwMDY4RTkKLToxMEREODAwMDAzRTAwMDA4MjdCRDAwOTAwRTAwMEQxQTAwMDAyMDIxQkUKLToxMEREOTAwMDhGQkYwMDhDOEZCRTAwODg4RkI3MDA4NDhGQjYwMDgwNDUKLToxMEREQTAwMDhGQjUwMDdDOEZCNDAwNzg4RkIzMDA3NDhGQjIwMDcwOTEKLToxMEREQjAwMDhGQjEwMDZDOEZCMDAwNjgwM0UwMDAwODI3QkQwMDkwQjEKLToxMEREQzAwMDBBMDAwRDdBMDBDMDIwMjEwRTAwMTYzNzAyODAyMDIxQTMKLToxMERERDAwMDE0NDBGRkRGM0MwQzgwMDAzQzAzODAwODM0NjMwMDgwNkIKLToxMERERTAwMDhDNjIwMDM0MDI4MkY4MjMwN0UwMDAxNzAwMDAwMDAwNzQKLToxMERERjAwMDNDMTUwODAwOEVCNTMxMDAyNkIxMDAwMTNDMDEwODAwMzkKLToxMERFMDAwMEFDMzEzMTAwMEUwMDE0RTAwMjQwMjAyMTNDMEI4MDA4QjAKLToxMERFMTAwMDM1NzAwMDgwOTIwQTAwMjUwMjQwMjAyMTM1NDIwMDA0MUUKLToxMERFMjAwMDBFMDAxNEVBQTIwMjAwMjUwRTAwMEM5RTAyNDAyMDIxRTIKLToxMERFMzAwMDBBMDAwREE3MjQwMjAwMDEzQzE1MDgwMTI2QjU4MkQwNzYKLToxMERFNDAwMDBBMDAwRDY5M0MxMDgwMDA4QzY2MDAzMDAyODYyMDIzOTkKLToxMERFNTAwMDE4ODAwMDA4MjQwOTAwMEMzQzA4MDgwMDhEMDgzMTAwRDcKLToxMERFNjAwMDMyNzMwMEZDMDAwMEI4MjEyNTA3MDAwMTNDMDEwODAwQzYKLToxMERFNzAwMEFDMjczMTAwQUZBOTAwMzA4QzY1MDAzMDAwQjQzODIzRTYKLToxMERFODAwMDE4RTAwMERCMDJFNzUwMkExNTQwRkZERTAwMDAwMDAwMkEKLToxMERFOTAwMDEyRTcwMDJBMDJFNzY4MjMwMjg3QTAyMTMxQjdGRkZGQkIKLToxMERFQTAwMDMyNkUwMDAyMTFDMDAwMzQzMjdGMDAxMDNDMTQ4MDA4MzIKLToxMERFQjAwMDM2OTAwMDgwOTIwRjAwMDgzMUY2MDA0MDUyQzAwMENFMkMKLToxMERFQzAwMDhFQTIwMDA4MDI0MDIwMjEwRTAwMTRFMDI0MTMwMDE4NDYKLToxMERFRDAwMEEyMTMwMDA5OTIxODAwMDUyNDE5RkZGRTAyNDAyMDIxMTgKLToxMERFRTAwMDAzMTlCODI0MEUwMDE0RUFBMjE3MDAwNTI0MDQwMDM5MEYKLToxMERFRjAwMDAwMDAyODIxMEUwMDE2MTIyNDA2MDAxODBBMDAwREE3QTMKLToxMERGMDAwMDI0MDIwMDAxOTJCNjAwMEMzQzA0ODAwODM0ODMwMDgwOTcKLToxMERGMTAwMDhDNjcwMDM4MDAxNkFCMDAzNkIxMDA4MTAyNDAyMDIxMkEKLToxMERGMjAwMDMyMjVGMDgxMEUwMDBDOEQzMEM2MDBGRjNDMEM4MDAwQzUKLToxMERGMzAwMEFEODAwMDQ0MEEwMDBEQTcyNDAyMDAwMTNBNkMwMDAxRTQKLToxMERGNDAwMDMxOEIwMDAxMTU2MEZGQUYwMjg3QTAyMTBBMDAwREY4OTgKLToxMERGNTAwMDAwMDAwMDAwMDA0MEY4MDkyNDA0MDAxNjBBMDAwREE3ODQKLToxMERGNjAwMDI0MDIwMDAxMDI0MDIwMjEwRTAwMTcxNzAyMDAyODIxODAKLToxMERGNzAwMDBBMDAwRDVDOEZCRjAwOEMxM0UwRkY3NDNDMDM4MDA4MjcKLToxMERGODAwMDM0NjgwMDgwOEQwNDAwMzg4QzY2MDAwNDAzQzYxMDIzQkEKLToxMERGOTAwMDFDNDBGRjZGM0MwQzgwMDAwM0M0MjgyMzA0QTIwMDAxMzYKLToxMERGQTAwMDAwODBGMDIxQUZCNDAwMTBBRkI3MDAxNEFGQTcwMDE4ODUKLToxMERGQjAwMDNDMUY4MDAwOTdFMzAxMjA4RDA5MDAzMDk1MDYwMDVDMkUKLToxMERGQzAwMDhGQjkwMDU0OEZBQzAwMzAzMDYyRkZGRjMwRDhGRkZGQjQKLToxMERGRDAwMDAwNDc3MDIxMzdFRjQwMDAwMzM4NjgyQjAxQ0Y1ODIxRUMKLToxMERGRTAwMDAxOEQ1MDI1QUZBQjAwMjBBRkE5MDAyOEFGQUEwMDMwQUIKLToxMERGRjAwMEFGQTkwMDI0QUZBMDAwMkNBRkJFMDAzNDkxMDcwMDA4RTkKLToxMEUwMDAwMDMwRTQwMDA4MTQ4MDAwOEYwMjAwMjAyMThFQTIwMDA0NUEKLToxMEUwMTAwMDAwNDBGODA5MjdBNDAwMTA4RkE5MDAzMDMxMjgwMDAyMjEKLToxMEUwMjAwMDU1MDAwMDAxMzI3MzAwRkUzQzA0ODAwODM0OEMwMDgwRUYKLToxMEUwMzAwMDkxOEIwMDA4MzE2QTAwNDA1MTQwMDAxMjhGQTQwMDI0RTcKLToxMEUwNDAwMDhDOEQwMDA0MTFCRTAwQkUyNDBFMDAxNDMyNjUwMDAxNDgKLToxMEUwNTAwMDEwQTAwMDBDOEZBNDAwMjQyNDA0MDAwQzEyMjQwMEQ0NkYKLToxMEUwNjAwMDJBMjcwMDBEMTBFMDAwQ0UyNDA5MDAwRTI0MDgwMDBBMjMKLToxMEUwNzAwMDUyMjgwMDAxMjQxNjAwMDg4RkEyMDAyNDI0NDQwMDAxMjUKLToxMEUwODAwMEFGQTQwMDI0OEZBNjAwMTQzQzAzODAwODM0NjUwMDgwRjAKLToxMEUwOTAwMDAwODZGODIxOENCMTAwMzBBQ0JGMDAzMDkwQjkwMDRFNDIKLToxMEUwQTAwMDhDQUUwMDMwMzQxOEZGRkYwMzM4NzgwNDAxQ0Y2ODIxQUMKLToxMEUwQjAwMEFDQUQwMDM0OEZBNjAwMzA4RkFDMDA1NDMwQ0EwMDA4REQKLToxMEUwQzAwMDAzQ0M1ODIxMTE0MDAwMENBRkFCMDA1ODhDQTQwMDIwQTkKLToxMEUwRDAwMDhGQjAwMDU4MTA5MDAwOTQzMEM2MDBGRjkyQTIwMDBDNDAKLToxMEUwRTAwMDhGQTcwMDM0MDI0MDIwMjEwMDAyNEIwMDM1MjgwMDgwMTkKLToxMEUwRjAwMDBFMDAwQzhEMzEwNUYwODAzQzBDODAwODM1OTAwMDgwQkUKLToxMEUxMDAwMDhFMEIwMDMwMDE3MTUwMjMxOTQwMDA3MDI2NTkwMDgwOTkKLToxMEUxMTAwMDNDMTgwODAwOEYxODMxOTgyNDFGRkY4MDAzM0Y3ODI0OTMKLToxMEUxMjAwMDMzMkQwMDdGM0MwNjgwMDAzQzBFODAwNDMzMTEwMDEwMkMKLToxMEUxMzAwMEFDQ0YwMDkwMTIyMDAwMzQwMUFFMjgyMTkwQTMwMDZCRDgKLToxMEUxNDAwMDU0NjAwMDMyM0MxMDgwMDgyNDA3MDAwMUEwQTcwMDZCMzcKLToxMEUxNTAwMDk0QzQwMDdBMjQ4NjAwMEFBNjA2MDAxMjNDMEQ4MDA4QUEKLToxMEUxNjAwMDM1QTUwMDgwOTBCMTAwMDgzMjJDMDA0MDE1ODAwMDA0RDUKLToxMEUxNzAwMDNDMDM4MDA4MzI2RTAwMDExNUMwMDA2MjAwMDAwMDAwMDAKLToxMEUxODAwMDM0NjQwMDgwOEM4RjAwMjA4RkIzMDA1ODExRjMwMDBBOTQKLToxMEUxOTAwMDM0NjMwMTAwOEM3OTAwMDAwMjk5QzAyMzFCMDAwMDc3RDIKLToxMEUxQTAwMDhGQTgwMDU4QUM4ODAwMjBBQzc0MDAwMDI0MTQwMDAxMzMKLToxMEUxQjAwMEFDN0UwMDA0QUZCNDAwNTAxNkMwMDAzNzAwMDAwMDAwNzEKLToxMEUxQzAwMDhGQTQwMDUwMTQ4MDAwMzAwMDAwMDAwMDEyRTAwMDA1MTEKLToxMEUxRDAwMDAwMDAxODIxOEZBOTAwMzAzMTM3MDAwNDUyRTBGRTkyNzAKLToxMEUxRTAwMDAwNjAxMDIxMjQwMzAwMDEwQTAwMEQ1QjAwNjAxMDIxNzMKLToxMEUxRjAwMDBBMDAwREY5MDAwMDM4MjEwMDQwRjgwOTI0MDQwMDE3MzYKLToxMEUyMDAwMDBBMDAwREE3MjQwMjAwMDEzQzEwODAwODM2MTAwMDgwOEYKLToxMEUyMTAwMDI0MDkwMDAxMDI0MDIwMjEwRTAwMTRFMEE2MDkwMDEyOEEKLToxMEUyMjAwMDkyMDgwMDI1MjQwNTAwMDFBRkE1MDA1MDM1MDIwMDAxMjkKLToxMEUyMzAwMDAyNDAyMDIxMEUwMDE0RUFBMjAyMDAyNTBBMDAwRUE5QzUKLToxMEUyNDAwMDNDMEQ4MDA4MjdBNTAwMzhBRkE4MDA2MDBFMDAwQ0E4ODAKLToxMEUyNTAwMEFGQTAwMDM4MTQ0MEZGNkQ4RkE4MDA2MDhGQTUwMDM4NzQKLToxMEUyNjAwMDMwQjAwMTAwNTIwMEZGNkE4RUEyMDAwNDhGQTMwMDNDNzAKLToxMEUyNzAwMDhEMDcwMDU4MDA2NzIwMjMwNDgzRkY2NEFEMDMwMDU4MTYKLToxMEUyODAwMDBBMDAwRTU1OEVBMjAwMDQwRTAwMEM5RTAyNDAyMDIxQjIKLToxMEUyOTAwMDBBMDAwRUM0MDAwMDAwMDAwRTAwMTRFMDAyNDAyMDIxMUQKLToxMEUyQTAwMDNDMDU4MDA4MzRBMzAwODAwMjQwMjAyMTBFMDAxNEVBQkYKLToxMEUyQjAwMEEwNzYwMDA5MDJDMDMwMjEyNDA0MDAzNzBFMDAxNjEyOTcKLToxMEUyQzAwMDAwMDAyODIxMEEwMDBFQzI4RkE0MDA1MDhGQTIwMDE4NUYKLToxMEUyRDAwMDU4NDBGRkEzM0MwRDgwMDgwRTAwMTRFMDAyNDAyMDIxQUUKLToxMEUyRTAwMDkyMEEwMDI1MjQwQjAwMDFBRkFCMDA1MDM1NDIwMDA0MTgKLToxMEUyRjAwMDAyNDAyMDIxMEUwMDE0RUFBMjAyMDAyNTBBMDAwRUE5MDUKLToxMEUzMDAwMDNDMEQ4MDA4OENCNjAwMzA4RUJFMDAwODI0MDQwMDE4MzYKLToxMEUzMTAwMDI2RDUwMDAxMDNDMEY4MDlBQ0I1MDAzMDhGQjIwMDMwM0IKLToxMEUzMjAwMDBBMDAwRDVCMzI0MjAwMDQzQzA3ODAwMDk0RTUwMTFBQUMKLToxMEUzMzAwMDUwQTBGRjZBMzRDNjAwMTAwQTAwMEU4OTkyQTIwMDBDOTkKLToxMEUzNDAwMDEyMkUwMDJBMkEyRjAwMTUxMUUwMDAxRTI0MTkwMDE2OTMKLToxMEUzNTAwMDI0MTgwMDBDNTYzOEZGM0UzMjY1MDAwMTNDMUY4MDA4MkYKLToxMEUzNjAwMDkzRTMwMDFCMjQxMEZGQkQyNDE2MDAwRTAwNzAzMDI0MjAKLToxMEUzNzAwMEEzRTYwMDFCMEEwMDBFNjUzMjY1MDAwMThDN0YwMDAwRDkKLToxMEUzODAwMDE3RjRGRjhEMDAwMDAwMDA4QzY3MDAwNDAzQzczMDIzRTIKLToxMEUzOTAwMDA0QzFGRjg0OEZBODAwNTgwQTAwMEVCRjAwMDAwMDAwQ0YKLToxMEUzQTAwMDE2MjlGRjM2OEZBMjAwMjQwQTAwMEU3MDI0MTYwMDEwRDIKLToxMEUzQjAwMDI0MTEwMDBFNTJEMUZGMzAyNDE2MDAxMDBBMDAwRTZGRjcKLToxMEUzQzAwMDI0MTYwMDE2NTYzOUZGMjIzMjY1MDAwMTNDMUY4MDA4RDIKLToxMEUzRDAwMDkzRTMwMDFCMjQxMEZGQkQyNDE2MDAxMDAwNzAzMDI0QUUKLToxMEUzRTAwMEEzRTYwMDFCMEEwMDBFNjUzMjY1MDAwMTBBMDAwRTY0RjgKLToxMEUzRjAwMDI0MTYwMDEyM0MwMzgwMDA4QzYyMDFCODA0NDBGRkZFMkEKLToxMEU0MDAwMDI0MDQwODAwQUM2NDAxQjgwM0UwMDAwODAwMDAwMDAwMjgKLToxMEU0MTAwMDMwQTVGRkZGMzBDNkZGRkYzQzA3ODAwMDhDRTIwMUI4NEIKLToxMEU0MjAwMDA0NDBGRkZFMzRFODAxODBBRDA0MDAwMEFDRTQwMDIwQUQKLToxMEU0MzAwMDNDMDQ4MDA4OTQ4MzAwNDgzMDYzRkZGRjEwNjAwMDFEOTcKLToxMEU0NDAwMDNDMEI4MDAwMjRBQTAwMTIwMDZBNDgyQjUxMjAwMDFBQkQKLToxMEU0NTAwMDI0MEEwMDAzOTRGOTAxMjA4Rjg5MDAwMDI0MEMwMDFBN0IKLToxMEU0NjAwMDMzMzhGRkZGMjcwN0ZGRkUwMDY3NzgyQjM5RUUwMDAxRTYKLToxMEU0NzAwMDAwMDk2QjgyMDFBRTU4MjRBMTBDMDAwQjExNjAwMDQ3MEIKLToxMEU0ODAwMDhGODMwMDA0QTUwNzAwMTQ4Rjg4MDAwNDM1MDcwMDAxNUUKLToxMEU0OTAwMEFGODcwMDA0MzBDQzAwNDA1NTgwMDAwRjNDMDg4MDAwNUUKLToxMEU0QTAwMDNDMEM4MDAwMzU4NDAxODBBNDg1MDAwRTBBMDAwRjk4ODIKLToxMEU0QjAwMDhGOEYwMDBDMjQwQTAwMDMzNTY0MDE4MDMwQ0MwMDQwQUIKLToxMEU0QzAwMDhGODkwMDAwOEY4NzAwMDRBMDhBMDAwQjUxODBGRkY1MjAKLToxMEU0RDAwMDNDMEM4MDAwM0MwODgwMDA5NTAzMDEyMDNDMDg4MDA4MkIKLToxMEU0RTAwMDk1MTgwMDQwMzA3OUZGRkYyNzJFRkZGRTMzMEZGRkZGMDYKLToxMEU0RjAwMDAxQ0Y2ODJCMTFBMDAwMDMwMUMwMjAyMTk1MDIwMDQwMkMKLToxMEU1MDAwMDMwNDRGRkZGM0MwQjgwMDAwMEE0NTAyMzM1NjUwMTgwQTAKLToxMEU1MTAwMEE0QTQwMDBFQTRBQTAwMjQ4RjhGMDAwQzNDMDU4MDAwNDgKLToxMEU1MjAwMDM0QUUwMTgwMjQxODAwMDIzMEVEODAwMEE1RDgwMDBDMjQKLToxMEU1MzAwMEE1QzkwMDEwQURDRjAwMjhBNUM2MDAwODExQTAwMDBFODcKLToxMEU1NDAwMDNDMDQ4MDAwOTRBQTAxMTYzMTQyRkZGQzI0NDgwMDA0RDgKLToxMEU1NTAwMDAxMDUxODIxOEM3OTQwMDAzMzI2RkZGRjE0QzAwMDA3MDUKLToxMEU1NjAwMDI0MEVCRkZGM0MwQkZGRkYzNTY1N0ZGRjAwRTUzODI0MUQKLToxMEU1NzAwMEFGODcwMDA0M0MwNDgwMDAyNDBFQkZGRjM0OEMwMTgwNzAKLToxMEU1ODAwMDAwRUU2ODI0QTU4RDAwMjZBRDg5MDAyQzNDMDcxMDAwMDQKLToxMEU1OTAwMEFDODcwMUI4MDNFMDAwMDgwMDAwMDAwMDI0MDJGRkZFODEKLToxMEU1QTAwMDAwNjIzODI0MEEwMDBGNzZBRjg3MDAwNDNDMDU4MDAwMjMKLToxMEU1QjAwMDM0QTQwMDcwOEM4QTAwMDA5MEE2MDExMjhGODQwMDAwQTEKLToxMEU1QzAwMDI3QkRGRkYwMzBDMzAwRkYwMDAzMTg4MjMwODIwMTAwMzYKLToxMEU1RDAwMDAwMDAzODIxMTA0MDAwMzkyNDY2MDAwMzMwODc0MDAwRDUKLToxMEU1RTAwMDUwRTAwMDM5MzA4ODIwMDAwMDA2MTA4MDAwNDVDODIxMjYKLToxMEU1RjAwMDhGMkY0MDAwMjQ3ODAwMDQwMDE4NzA4MEFGQUYwMDAwMTcKLToxMEU2MDAwMDAxQzU2ODIxOERBQzQwMDBBRkFDMDAwNDk0QUIwMTE2OEQKLToxMEU2MTAwMDMxNjlGRkZDMDEyNTQwMjE4RDA1NDAwMEFGQTUwMDA4QjAKLToxMEU2MjAwMDhGQTkwMDA4MDAwMDMwMjEwMDAwMjgyMTNDMDcwODAwQzUKLToxMEU2MzAwMDI0RTcwMTAwMEEwMDBGRTkyNDA4MDAwODkwNDIwMDAwQzYKLToxMEU2NDAwMDI0QTUwMDAxMkNBRDAwMEMwMDYyQzgyMTAwMTlDMDgwNzcKLToxMEU2NTAwMDAzMDc3ODIxOERFRTAwMDAxMUEwMDAwNjAwQ0UzMDI2QzEKLToxMEU2NjAwMDAzQTUxMDIxMTRBOEZGRjUwMDA1MUEwMDU1MjBGRkY0OUEKLToxMEU2NzAwMDkwNDIwMDAwM0MwNDgwMDAzNDg3MDA3MDNDMDUwODAwOTQKLToxMEU2ODAwMDhDQTUzMTA0OENFMzAwMDAyQ0E4MDAyMDExMDAwMDA5QTcKLToxMEU2OTAwMDAwNkEzODIzMDAwNTU4ODAzQzBDMDgwMDI1OEMzMTA4OUUKLToxMEU2QTAwMDAxNkM0ODIxMjRBQTAwMDFBRDI3MDAwMDNDMDEwODAwQUMKLToxMEU2QjAwMEFDMkEzMTA0QUY4NjAwMEMyNDA3MDAwMTAwRTAxMDIxRDEKLToxMEU2QzAwMDAzRTAwMDA4MjdCRDAwMTAxMTAwRkZGQzAwMDAzODIxMDYKLToxMEU2RDAwMDAwMDY2MDgwMDE4NTU4MjE4RDY0NDAwMDI0NjkwMDA0OTMKLToxMEU2RTAwMDAwMDkzODgwQUZBNDAwMDAwMEU1MTgyMThDNjY0MDAwQzYKLToxMEU2RjAwMEFGQTAwMDA4MEEwMDBGRDlBRkE2MDAwNDI3QkRGRkQ4QkQKLToxMEU3MDAwMEFGQjIwMDE4QUZCMDAwMTBBRkJGMDAyNEFGQjQwMDIwMEMKLToxMEU3MTAwMEFGQjMwMDFDQUZCMTAwMTQ4Rjg3MDAwMDNDMDQ4MDAwMzEKLToxMEU3MjAwMDk0ODMwMTBFMzBFMjQwMDAwMDAwODAyMTEwNDAwMDEwNzAKLToxMEU3MzAwMDMwNzJGRkZGM0MwNjAwMjAwMEU2MjgyNDEwQTAwMDBERTgKLToxMEU3NDAwMDMwRUE4MDAwOEY4ODAwMDQyNDA5QkZGRjAwRTkzODI0RTQKLToxMEU3NTAwMDM1MDMxMDAwQUY4NzAwMDAzMEYxMjAwMDE2MjAwMDBCQjkKLToxMEU3NjAwMDNDMTQwMDA0MjQxOEZGQkYwQTAwMTAzODAwNzgxMDI0NUQKLToxMEU3NzAwMDMwRUE4MDAwMTU0MDAwODYzQzBDMDAyMDMwRjEyMDAwN0IKLToxMEU3ODAwMDEyMjBGRkY4OEY4MzAwMDQzQzE0MDAwNDAwRjQ5ODI0NDYKLToxMEU3OTAwMDEyNjBGRkY1MjQxOEZGQkYzNDYyMDA0MDMwRjkwMTAwMTkKLToxMEU3QTAwMDEzMjAwMDBGQUY4MjAwMDQzQzAyMDAyMDAwRTJGODI0OTYKLToxMEU3QjAwMDEzRTAwMDA1M0MwQjgwMDAzQzA0MDAwNDAwRTQxODI0MzYKLToxMEU3QzAwMDEwNjAwMENGMDAwMDAwMDA5NTZBMDExRTk1NjkwMTFDRDEKLToxMEU3RDAwMDMxNDZGRkZGMDAwOTQ0MDAwMEM4MjgyNUFGODUwMDBDMjIKLToxMEU3RTAwMDNDMEU4MDAwOTVDRDAxMEM4REM0NDAwMDM0MENGRkZGMjEKLToxMEU3RjAwMDEwOEMwMEIwMzFBNUZGRkYzMDhGMDEwMDU1RTAwMDAxMDMKLToxMEU4MDAwMDI0MTAwMDEwMzBGMTEwMDA1MjIwMDAwODM2MTEwMDAxRDEKLToxMEU4MTAwMDMwRjMwMDIwMTY2MDAwOUYzQzE4MTAwMDAwRjhBMDI0ODAKLToxMEU4MjAwMDE2ODAwMDk2M0MwNDBDMDAzNjExMDAwMTMwRTgwMTAwMEYKLToxMEU4MzAwMDE1MDAwMDBCM0MwQTAwMDE4Rjg4MDAwNDMxMDk0MDAwREMKLToxMEU4NDAwMDE1MjAwMDA4MDBFQTMwMjQzQzBDMUYwMTAwRUM1ODI0N0QKLToxMEU4NTAwMDNDMEExMDAwNTE2QTAwQUUzMEFEMDIwMDNDMEEwMDAxRDMKLToxMEU4NjAwMDAwRUEzMDI0MTRDMDAwOTUzQzA1MTAwMDAwRTUyMDI0ODcKLToxMEU4NzAwMDAwMDA0MDIxMTA4MDAwMDcwMDAwOTAyMTAwMDc5RTAyNDgKLToxMEU4ODAwMDMyNzIwMDBGMDAxMjc4ODAzQzBFMDgwMTI1Q0U4MjgwODMKLToxMEU4OTAwMDAxRUU0MDIxOEY5NDAwMTgxMjgwMDA0NzAyMjA4MDIxNTEKLToxMEU4QTAwMDEwODAwMDkxMDAwMDAwMDAzQzA5ODAwMDk1MzkwMTBFQTUKLToxMEU4QjAwMDkxMDMwMDAwMDIyMDMwMjEzMzM4RkZGRjI3MDUwMDA0QjgKLToxMEU4QzAwMDEwNjAwMDA4MDAwMEEwMjEyNDFGMDAwMzEwN0YwMTNBRkYKLToxMEU4RDAwMDI0MDQwMDAyOTEwQzAwMDExMTg0MDExODMwRUEwMDQwNjgKLToxMEU4RTAwMDAwMTJBMUMwOEY5MjAwMUM1MjQwMDAwMTM2MjYwMDQwNDkKLToxMEU4RjAwMDNDMTM4MDAwOEU2RjQwMDAzMUYxMDEwMDEyMjAwMENCRUMKLToxMEU5MDAwMDMwRDFGRkZCM0MxODA4MDA4RjE4MDAyNDMwRDIwMDA0REYKLToxMEU5MTAwMDMzMDYwMDA0MTRDMDAwQ0MzMEIwRkZGRjU2NDAwMDAxQTUKLToxMEU5MjAwMDM2MzEwMDA0MDI4MDIwMjEwMjAwMjgyMTBFMDAwRjU1RkMKLToxMEU5MzAwMDAyMjAzMDIxMTY0MDAwMEQwMDAwMjAyMTM2NjUwMTgwQTQKLToxMEU5NDAwMDNDMDQ4MDAwOEM5MzAxQjgwNjYwRkZGRTI0MTkyMDAwNkYKLToxMEU5NTAwMDI0MTQwMDAyQTRCOTAwMDhBMEI0MDAwQkE0QTAwMDEwNjUKLToxMEU5NjAwMDNDMDUxMDAwQUM4NTAxQjgwMDAwMjAyMThGQkYwMDI0QjkKLToxMEU5NzAwMDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0MjkKLToxMEU5ODAwMDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDI4OTAKLToxMEU5OTAwMDAwRUM1ODI0MTE2MEZGN0EzMEYxMjAwMDhGOEQwMDA0QzQKLToxMEU5QTAwMDNDMEZGRkZGMzVFRTdGRkYwMEVFMzgyNDM1QTM4MDAwREIKLToxMEU5QjAwMDBBMDAxMDI3QUY4NzAwMDAzQzAyMDgwMDhDNDIwMDM4OTQKLToxMEU5QzAwMDNDMDQwODAwMjQ4NDAwMzgxMDQwMDA0QjI0NDlGRkZGMTkKLToxMEU5RDAwMDNDMDM4MDAwOTQ2QzAxMEUzMThCRkZGRjExMDAwMEEwRkUKLToxMEU5RTAwMDI1NzMwMDA0M0MxMDA4MDA4RTEwMDAzMDEyMDAwMDBBNEQKLToxMEU5RjAwMDMwRTYwMTAwOEY4QTAwMDQzMTQzNDAwMDEwNjAwMDA2QjkKLToxMEVBMDAwMDNDMEYwRjAwMDBFRjcwMjQzQzBEMDEwMDAxQUU0MDJCQzUKLToxMEVBMTAwMDExMDAwMERGMzI2NUZGRkYxMEMwMDA2OTNDMTQwRjAwRDkKLToxMEVBMjAwMDAwRjQyODI0M0MxODAyMDAxMEI4MDA2NThGOTkwMDBDRUYKLToxMEVBMzAwMDMyNzBGRkZGMDMyOTk4MjQwMjY0OTAyMTkyNDkwMDA0NTgKLToxMEVBNDAwMDI1MjcwMDA0MDAwNzIxQzAwMjAwMjgyMTM2MjYwMDAyRTUKLToxMEVBNTAwMDBFMDAwRjU1MDAwMDAwMDA4RkJGMDAyNDhGQjQwMDIwNkYKLToxMEVBNjAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwNEMKLToxMEVBNzAwMDAwMDAxMDIxMDNFMDAwMDgyN0JEMDAyODNDMDIwQkZGMjYKLToxMEVBODAwMDAwRTQxODI0MzQ1RkZGRkYwM0UzQzgyQjUzMjBGRjY3MjMKLToxMEVBOTAwMDM2MTEwMDAxM0MwNjA4MDA4Q0M2MDAyQzM2MTEwMDA1MUEKLToxMEVBQTAwMDI0RDAwMDAxM0MwMTA4MDBBQzMwMDAyQzBBMDAxMDVEQUQKLToxMEVBQjAwMDMwRTgwMTAwMEEwMDEwNTIyNDEwMDAyMDAyNDAyODIxRjIKLToxMEVBQzAwMDNDMTIwODAwOEU1MjAwRDgyNDA0MDA4MDI2NEQwMDAxMUMKLToxMEVBRDAwMDNDMDEwODAwQUMyRDAwRDgwRTAwMEY1NTI0MDYwMDAzQTEKLToxMEVBRTAwMDBBMDAxMEU4OEZCRjAwMjQzQzA4MDgwMTI1MDg4MjgwMzYKLToxMEVBRjAwMDBBMDAxMDdDM0MwOTgwMDAwQTAwMTBDNTAwMDA0ODIxNzMKLToxMEVCMDAwMDBFMDAwRkJDMDAwMDAwMDAwQTAwMTA0OThGODcwMDAwQjMKLToxMEVCMTAwMDE1QTBGRjUzM0MwQTAwMDEyNjQ1MDAwNDMwQUFGRkZGNjAKLToxMEVCMjAwMDM2MjYwMDAyM0MwMzgwMDA4QzcyMDFCODA2NDBGRkZFQ0UKLToxMEVCMzAwMDhGODUwMDA4MzQ2OTAxODBBRDIwMDAwMDEwQTAwMEFGNkYKLToxMEVCNDAwMDNDMDQ4MDAwMjU0RjAwMTIwMEFGNzAyQjUxQzAwMEFDNzgKLToxMEVCNTAwMDI0MDMwMDAzOTQ3ODAxMjAyNDE0MDAxQTMwRjE0MDAwQUIKLToxMEVCNjAwMDMzMTNGRkZGQTEzNDAwMEIxMjIwMDBCNjI2NjNGRkZFMTMKLToxMEVCNzAwMDAwQTNDODJCNTcyMDAwQjQyNDFGRkZGRTM1MDgwMDAxNTYKLToxMEVCODAwMEE1MjMwMDE0QUY4ODAwMDQzQzEwODAwMDI0MENCRkZGQjQKLToxMEVCOTAwMDAxMEM0ODI0MjQwQjAwMDIzNjA4MDE4MEE1MEIwMDBDNTAKLToxMEVCQTAwMEE1MEEwMDBFQTUwNjAwMDhBNTA5MDAyNkE1MDcwMDEwNjUKLToxMEVCQjAwMDNDMDcxMDAwQUUwNzAxQjgwQTAwMTBFODhGQkYwMDI0MjAKLToxMEVCQzAwMDNDMDMwODAwOEM2MzAwRDAyRTQ1MDAwQzAwMTIyMUMwQ0QKLToxMEVCRDAwMDM4NkIwMDAxMkQ2MjAwMDEwMDQ1RjgyNDE3RTBGRjlBMTAKLToxMEVCRTAwMDMyNzBGRkZGMjY0Q0ZGRkMyRDg0MDAwNDU0ODAwMDUwM0YKLToxMEVCRjAwMDAwMDAyMDIxMzg2QTAwMDIyRDQzMDAwMTAwNjU4MDI0QjYKLToxMEVDMDAwMDE2MDAwMDRBMzI3MEZGRkYwMDA3NkE0MjAwMTI3MDJCQTQKLToxMEVDMTAwMDAxQUU0MDI0NTUwMDAwNjMwMDAwMjAyMTAwMTIyMUMwRjUKLToxMEVDMjAwMDAyMDAyODIxMEEwMDEwRTUzNjI2MDAwMjM0REYwMDAyMjcKLToxMEVDMzAwMDAyODAyMDIxMzNFNkZGRkYwRTAwMEY1NTMwQTVGRkZGQjUKLToxMEVDNDAwMDBBMDAxMEFDMDAwMDIwMjEyNDA0MDEwMDAyMDAyODIxNDkKLToxMEVDNTAwMDBFMDAwRjU1MDIyMDMwMjEwQTAwMTA5ODAwMDAwMDAwMUQKLToxMEVDNjAwMDhDNjY0MDAwMzBDRjAxMDAxMUUwMDAzRDMwRjgwMTAwMUIKLToxMEVDNzAwMDNDMTIwODAwOEU1MjAwMjQxMzAwMDAxMTMyMzQwMDA0QUMKLToxMEVDODAwMDNDMUYwRjAwMDBGRkM4MjQzQzA1MDIwMDEzMjUwMDBDQTgKLToxMEVDOTAwMDhGOEMwMDBDMDIyMDMwMjEzMjY1RkZGRjAxODk1ODI0M0YKLToxMEVDQTAwMDAxNjQxMDIxOTA0OTAwMDQzMjMwRkZGQjI0MTFGRkZFNjMKLToxMEVDQjAwMDI1MjcwMDA0MEUwMDBGNTUwMDA3MjFDMDAyNTE5MDI0QTMKLToxMEVDQzAwMDI0MDQwMDAxMTI0NDAwNTIzMjQzMDAwMTE0NjAwMDU4MzEKLToxMEVDRDAwMDAyMDAzMDIxMzI0QTAwMDQxMTQwMDAwNDhGOEQwMDAwRjAKLToxMEVDRTAwMDMxQTgwODAwMTUwMDAwNUEzMjY1RkZGRjE2ODBGRjVCNEYKLToxMEVDRjAwMDhGQkYwMDI0M0MxMzgwMDAzNjY1MDE4MDNDMDQ4MDAwRjcKLToxMEVEMDAwMDhDOTAwMUI4MDYwMEZGRkUyNDA2MjAwMDI0MEYwMDAyQUMKLToxMEVEMTAwMEE0QTYwMDA4QTBBRjAwMEJBNEEwMDAxMDNDMEUxMDAwOTkKLToxMEVEMjAwMEFDOEUwMUI4MEEwMDEwRTg4RkJGMDAyNDAwMDAyMDIxM0IKLToxMEVEMzAwMDAyMDAyODIxMEEwMDEwRTUzNjI2MDAwMjExNDBGRUU5RjMKLToxMEVENDAwMDAwMDBBMDIxOTUyRTAxMTA5NTBEMDAwMjMxQzhGRkZGOTMKLToxMEVENTAwMDUxQThGRUU0MDAxMkExQzAwQTAwMTA4QjhGOTIwMDFDODMKLToxMEVENjAwMDNDMDUwODAwOENBNTAwMjQzMEI4MDAwMTUzMDBGRjNCOEYKLToxMEVENzAwMDhGQkYwMDI0MzI2NUZGRkYzNjI2MDAwMjAwMDAyMDIxRUQKLToxMEVEODAwMDBFMDAwRjU1MDAwMDAwMDAwQTAwMTBFODhGQkYwMDI0OUQKLToxMEVEOTAwMDM2MjYwMDAyMEUwMDBGNTUyNDA0MDA4MDBBMDAxMEU4RjkKLToxMEVEQTAwMDhGQkYwMDI0MDIwMDI4MjEwRTAwMEY1NTMyMjZGRkZCRTIKLToxMEVEQjAwMDBBMDAxMTU5MDAxMjIxQzA5MTAzMDAwMTI0MDIwMDAxMzAKLToxMEVEQzAwMDEwNjJGRUVBMjQwNDAwMDEyNDEwMDAwMjE0NzBGRUM1NDMKLToxMEVERDAwMDAwMDBBMDIxMzBFMzAwNDAxMDYwRkVDMzhGOTIwMDFDQjEKLToxMEVERTAwMDk1MkIwMTEwOTUwOTAwMDIzMTY3RkZGRjExMjdGRUUwMDYKLToxMEVERjAwMDhGQkYwMDI0MEEwMDEwOEIwMDAwMDAwMDI0MDMwMDAzRDIKLToxMEVFMDAwMDM0ODIwMTgwQTA0MzAwMEIwQTAwMTEzNDNDMTA4MDAwQzIKLToxMEVFMTAwMDMyMTQwMDA0MTY4MDAwMDMzMjY1RkZGRjM2MTIwMDAyMzAKLToxMEVFMjAwMDMyNTBGRkZGMDIwMDMwMjEwQTAwMTFCMTAwMDAyMDIxMDIKLToxMEVFMzAwMDAwMDAyMDIxMEUwMDBGNTUzMjY1RkZGRjBBMDAxMTg2RTkKLToxMEVFNDAwMDMyMTBGRkZCMjQxRkZGRkUwQTAwMTEzMjAxMUY0MDI0NzUKLToxMEVFNTAwMDAyMDAzMDIxMEUwMDBGNTUyNDA0MDEwMDBBMDAxMThDMUQKLToxMEVFNjAwMDAwMDAwMDAwMjdCREZGQzhBRkIwMDAxMEFGQkYwMDM0RTYKLToxMEVFNzAwMDNDMTA2MDBDQUZCRTAwMzBBRkI3MDAyQ0FGQjYwMDI4MUUKLToxMEVFODAwMEFGQjUwMDI0QUZCNDAwMjBBRkIzMDAxQ0FGQjIwMDE4ODAKLToxMEVFOTAwMEFGQjEwMDE0OEUwQzUwMDAyNDBERkY3RjNDMDU4MDAwQTQKLToxMEVFQTAwMDAxOEQ1ODI0MzU2QTM4MEMyNDA5MDAwM0FFMEE1MDAwM0QKLToxMEVFQjAwMEFDQTkwMDA4M0MwMTA4MDBBQzIwMDAyMDBFMDAxNzQzNUMKLToxMEVFQzAwMDAwMDAwMDAwM0MwNTYwMTY4Q0E3MDAwMDNDMDhGRkZGMTYKLToxMEVFRDAwMDNDMDYwMDEwMzRDMzgwNTEwMEU4MjAyNDNDMDI1MzUzMDgKLToxMEVFRTAwMEFFMDM1MzdDMTA4MjAyNjEzNEEzN0MwMDhDNzQwMDdDREUKLToxMEVFRjAwMDhDNzUwMDc4M0MxMTYwMDAzNjI0MjAyMDNDMDUwODAxMDgKLToxMEVGMDAwMDI0QTU4MTE0MjQwNjAwMEEzQzExODAwMDNDMTMwMDAyNTEKLToxMEVGMTAwMDNDMTI2MDBDQUY5NTAwMTBBRjk0MDAxNDBFMDAxNUVDN0QKLToxMEVGMjAwMDM2M0UwMTgwQUU1MzUzRkM4RTMwMDAwMDMyMTYwMDAzOTMKLToxMEVGMzAwMDEyQzBGRkZEMzIxNzAwMDExNkUwMDA1ODMyMDYwMDAyMzEKLToxMEVGNDAwMDEwQzBGRkY5M0MwNDgwMDA4QzhGMDE0MDI0MTAwMDQwNjkKLToxMEVGNTAwMEFDOEYwMDIwOEM5MjAxNDgwMDEyNzYwMjMxQzMwMDcwMDEKLToxMEVGNjAwMDEwNzAwMTNEMkM2NzAwNDE1MEUwMDAwODI0MDQwMDYwNEYKLToxMEVGNzAwMDI0MTUwMDIwMTA3NTAwMEUzQzAzNDAwMDNDMDc4MDAwNjMKLToxMEVGODAwMEFDRTMwMTc4MEEwMDEyMUIwMDAwMDAwMDE0NjRGRkZCRDAKLToxMEVGOTAwMDNDMDM0MDAwMEUwMDFGNUQwMDAwMDAwMDNDMDM0MDAwRTkKLToxMEVGQTAwMDNDMDc4MDAwQUNFMzAxNzgwQTAwMTIxQjAwMDAwMDAwNUYKLToxMEVGQjAwMDhDODMwMTQ4MjQxNDAwMDQzNDg3MDE4MDAwMDM0QzAyMzAKLToxMEVGQzAwMDMxMjUwMEZGOEM4MzAxNDAxMEI0MDE3MTI0QkZGRkZBOEEKLToxMEVGRDAwMDJGRjkwMDA2NTMyMDAwMTIzQzA1ODAwMDhDODYwMTQ0NjYKLToxMEVGRTAwMDI0MTYwMEZGMzBBNTAwRkYzMENCMDBGRjMwQ0EwMEZGMjEKLToxMEVGRjAwMDExNTYwMUJDMjU2ODAwMDQyNDAyMDAwOTEwQTIwMUFBRDAKLToxMEYwMDAwMDI4QUMwMDBBMTE4MDAxOTYyNDEzMDAwQTI0MEQwMDA4ODAKLToxMEYwMTAwMDEwQUQwMDE0OEY4NTAwMTgwMDA4MTlDMDNDMDU4MDAwNTEKLToxMEYwMjAwMDhDQTgwMUI4MDUwMEZGRkUyNDE3MDAwMkFDRTMwMDAwMjUKLToxMEYwMzAwMEE0RTkwMDA4QTBGNzAwMEI4Q0I0MDE0ODNDMDkxMDAwQkIKLToxMEYwNDAwMDNDMDM0MDAwQTRGNDAwMTA4Q0E0MDE0NEFDRTQwMDI0NzAKLToxMEYwNTAwMDNDMDc4MDAwQUNBOTAxQjhBQ0UzMDE3ODBBMDAxMjFCQTAKLToxMEYwNjAwMDAwMDAwMDAwMDAwNjdBMDIwMDA4QTg4MDNDMDQwODAxQTUKLToxMEYwNzAwMDI0ODQ4MjgwMjRBRTAwMDEwMkE0OTAyMTMxRTUwMEZGQTcKLToxMEYwODAwMDI0MTAwMDAxQTI0RjAwMDAxNEIwRkZFM0FGOEUwMDE4NUYKLToxMEYwOTAwMDAwMDgxOUMwMEEwMDEyNThBRjg1MDAxQzhFMzQwMTI4RTAKLToxMEYwQTAwMDNDMDI4MDA4QUUzNDAwMjA4RTI0MDEwNDhFMjMwMTAwMkYKLToxMEYwQjAwMDk0NUYwMDQ4QUY4NDAwMDBBRjgzMDAwNDMzRjlGRkZGODIKLToxMEYwQzAwMDBFMDAwRjRFQUY5OTAwMDgzQzE4MDgwMDhGMTgwMEMwQzIKLToxMEYwRDAwMDEzMDAwMDI0OEY4NzAwMDAzQzA3MDgwMDhDRTcwMEM0NjEKLToxMEYwRTAwMDI0RTYwMDAxM0MwMTA4MDBBQzI2MDBDNDNDMDM4MDAwN0IKLToxMEYwRjAwMDhDNjQwMTI0M0MwNzYwMjBBQ0U0MDAxNDAwMDAwMDAwOTQKLToxMEYxMDAwMDNDMDY4MDAwM0MxNTQwMDBBQ0Q1MDEzODAwMDAwMDAwRjIKLToxMEYxMTAwMDUyODBGRjhCMzIwNjAwMDIyNjhDMDE0MDI2OEQwMDgwMzMKLToxMEYxMjAwMDI0MDlGRjgwMDE4OTI4MjQwMUE5OTgyNDAwMTM1OTQwNEIKLToxMEYxMzAwMDMxQTIwMDdGMDAwNUIxNDAzMThBMDA3RjNDMUYyMDAwRDIKLToxMEYxNDAwMDM3RTgwMDAyMDE2MkMwMjUwMkNBQzgyNTAzMjhBMDI1QUQKLToxMEYxNTAwMDAzMDhCODI1QUNENzA4MzBBQ0Q0MDgzMDBBMDAxMjIxMTcKLToxMEYxNjAwMDMyMDYwMDAyM0MwNTAwMTAwMEU1NDAyNDE1MDAwMEE2MTAKLToxMEYxNzAwMDhGODMwMDA0M0MwQzA4MDA4RDhDMDAyMDNDMEQ4MDAwMjcKLToxMEYxODAwMDk1QUEwMTBFMjU4QjAwMDEzMEU5NDAwMDNDMDEwODAwRTIKLToxMEYxOTAwMEFDMkIwMDIwMzE1NUZGRkYxMTIwMDBCNjAwMDA5MDIxNUMKLToxMEYxQTAwMDNDMEYwMDIwMDBFRjcwMjQxMUMwMDBCMzMwRjc4MDAwNDYKLToxMEYxQjAwMDhGOTMwMDA0MjQxNkJGRkYwMEY2MzgyNDM2NjMxMDAwMzYKLToxMEYxQzAwMEFGODcwMDAwMzBFMjIwMDAxMDQwMDBCNjI0MDVGRkJGRUEKLToxMEYxRDAwMDNDMDgwMDA0MDBFODMwMjQxMEMwMDAwMjAwNjUxMDI0NDAKLToxMEYxRTAwMDM0NjIwMDQwMzBFOTAxMDAxMTIwMDAwRUFGODIwMDA0QkIKLToxMEYxRjAwMDNDMEIwMDIwMDBFQjUwMjQxMTQwMDAwNDNDMEQwMDA0QTcKLToxMEYyMDAwMDAwRUQ2MDI0MTE4MDAxMzkwMDAwMDAwMDk2MzcwMTFFRDYKLToxMEYyMTAwMDk2MzYwMTFDMzJFRkZGRkYwMDE2OUMwMDAxRjM3MDI1QUIKLToxMEYyMjAwMEFGOEUwMDBDOTYzOTAxMEM4RTI0NDAwMDM0MThGRkZGN0QKLToxMEYyMzAwMDEwOTgwMENBMzMyNUZGRkYzMDlGMDEwMDU3RTAwMDAxRkUKLToxMEYyNDAwMDI0MTIwMDEwMzBFMzEwMDAxMDYwMDAxMzM2NTMwMDAxNDgKLToxMEYyNTAwMDMwRTQwMDIwMTQ4MDAwMEEzQzA2MTAwMDAwRTYxMDI0NzAKLToxMEYyNjAwMDEwNDAwMDBEM0MwQzBDMDAzQzBCMEJGRjAwRUM1MDI0M0MKLToxMEYyNzAwMDM1NjlGRkZGMDEyQTQwMkIxMTAwMDAwODMwRUUwMTAwMjQKLToxMEYyODAwMDNDMEQwODAwOERBRDAwMkMzNjUzMDAwNTI1QjIwMDAxNjEKLToxMEYyOTAwMDNDMDEwODAwQUMzMjAwMkMzMEVFMDEwMDE1QzAwMDBCMjAKLToxMEYyQTAwMDNDMDYwMDAxOEY4ODAwMDQzMTBGNDAwMDU1RTAwMDA4NDMKLToxMEYyQjAwMDAwRTYyODI0M0MxODFGMDEwMEY4QjgyNDNDMTYxMDAwNzIKLToxMEYyQzAwMDUyRjYwMTBFMzBCOTAyMDAzQzA2MDAwMTAwRTYyODI0ODcKLToxMEYyRDAwMDE0QTAwMEE0M0MxRjEwMDAwMEZGMjAyNDAwMDA0MDIxQzcKLToxMEYyRTAwMDEwODAwMDA3MDAwMEE4MjEwMDA3NUUwMjMxNzUwMDBGQTIKLToxMEYyRjAwMDAwMTU1MDgwM0MwMjA4MDEyNDQyODI4MDAxNDI0MDIxRDYKLToxMEYzMDAwMDhGOEMwMDE4MTE4MDAwNjkwMjYwOTAyMTE0ODAwMDAzMjYKLToxMEYzMTAwMDNDMDk4MDAwM0MwODA4MDEyNTA4ODI4MDk1MzIwMTBFRDYKLToxMEYzMjAwMDkxMDMwMDAwMDI2MDMwMjEzMjQ0RkZGRjI0ODUwMDA0NzUKLToxMEYzMzAwMDEwNjAwMDA4MDAwMEI4MjEyNDBEMDAwMzEwNkQwMTIyQTgKLToxMEYzNDAwMDI0MTYwMDAyOTExNzAwMDExMkY2MDAyNjMwRjgwMDQwNDIKLToxMEYzNTAwMDAwMTVCOUMwOEY4MjAwMUM1MDQwMDAwMTM2NjYwMDQwODUKLToxMEYzNjAwMDNDMTY4MDAwOEVDQTQwMDAzMTUzMDEwMDEyNjAwMEM3NzUKLToxMEYzNzAwMDMwRDUwMDA0M0MwQjA4MDA4RDZCMDAyNDMwRDNGRkZCMUMKLToxMEYzODAwMDMxNjYwMDA0MTRDMDAxMEEzMEIyRkZGRjU2QTAwMDAxMkMKLToxMEYzOTAwMDM2NzMwMDA0MDJFMDIwMjEwMjQwMjgyMTBFMDAwRjU1QTAKLToxMEYzQTAwMDAyNjAzMDIxMTZBMDAwMEQwMDAwMjAyMTM2QzUwMTgwMkEKLToxMEYzQjAwMDNDMDQ4MDAwOEM4QzAxQjgwNTgwRkZGRTI0MEQyMDAwRTkKLToxMEYzQzAwMDI0MTIwMDAyQTRBRDAwMDhBMEIyMDAwQkE0QTAwMDEwRkIKLToxMEYzRDAwMDNDMDUxMDAwQUM4NTAxQjgwMDAwMjAyMTBBMDAxMzVGMzUKLToxMEYzRTAwMDAwODAxMDIxMTMwMEZGREIwMDAwQjgyMTk1M0YwMTEwQzEKLToxMEYzRjAwMDk1MTkwMDAyMzNFOEZGRkY1MzI4RkZENjAwMTVCOUMwNjYKLToxMEY0MDAwMDBBMDAxMzI3OEY4MjAwMUMyNDEzQkZGRjAwNzM2ODI0OTcKLToxMEY0MTAwMDExQTAwMDA3MjQwRTg3RkYwMDZFNDgyNDE1MjAwMDBBNjMKLToxMEY0MjAwMDNDMEYwMDYwMDBFRjkwMjQxMjQwMDAwNzAwMDAwMDAwMzUKLToxMEY0MzAwMDBFMDAwRDM0MDAwMDAwMDAxMDQwRkYzMjNDMDY4MDAwM0EKLToxMEY0NDAwMDBBMDAxMjhEM0MwMzgwMDAwRTAwMTRDOTAwMDAwMDAwNjkKLToxMEY0NTAwMDBBMDAxMzVGMDAwMDAwMDAwRTAwMTRFRjAwMDAwMDAwMUYKLToxMEY0NjAwMDNDMDM0MDAwM0MwNzgwMDBBQ0UzMDE3ODBBMDAxMjFCMUIKLToxMEY0NzAwMDAwMDAwMDAwMzBGNzgwMDAxMkUwRkY1MjhGODMwMDA0OEMKLToxMEY0ODAwMDNDMTkwMDIwMDBGOUMwMjQxMzAwRkY0RThGOUYwMDA0OTgKLToxMEY0OTAwMDNDMDRGRkZGMzQ4MzdGRkYwMEUzMzgyNDBBMDAxMkMxREQKLToxMEY0QTAwMDM3RTM4MDAwMEEwMDEyQ0EwMDY1MTAyNDNDMDQwODAwRkIKLToxMEY0QjAwMDhDODQwMDM4MTQ4MDAwMDIyNDg5RkZGRjAwMDA0ODIxNUEKLToxMEY0QzAwMDNDMDM4MDAwOTQ2RjAxMEUzMUVFRkZGRjExMDAwMEVCNTIKLToxMEY0RDAwMDI1RDYwMDA0M0MwMzA4MDA4QzYzMDAzMDEwNjAwMDBBNEQKLToxMEY0RTAwMDMwRUEwMTAwOEY5ODAwMDQzMzE3NDAwMDEyRTAwMDA2NTQKLToxMEY0RjAwMDNDMDIwRjAwMDBFMkY4MjQzQzE5MDEwMDAzM0Y0MDJCQkUKLToxMEY1MDAwMDExMDAwMEQ1MzJDNUZGRkYxMTQwMDAzMDNDMEMwRjAwNDgKLToxMEY1MTAwMDAwRUM1ODI0M0MwNjAyMDAxMTY2MDAyQzAwMDAwMDAwOUMKLToxMEY1MjAwMDhGOTUwMDBDM0MwRDA4MDAyNUFEMDAzODMyRDJGRkZGNEUKLToxMEY1MzAwMDAyQTkyODI0MDBBREIwMjE5MkM3MDAwNDI0RTkwMDA0RTgKLToxMEY1NDAwMDAwMDkyMUMwMDI0MDI4MjEzNjY2MDAwMjBFMDAwRjU1MzYKLToxMEY1NTAwMDAwMDAwMDAwMEEwMDEzNUYwMDAwMTAyMTBBMDAxMkUyMDAKLToxMEY1NjAwMDI0MTIwMDIwM0MxOTA4MDA4RjM5MDBEODAyQTAyODIxNUQKLToxMEY1NzAwMDI0MDQwMDgwMjczODAwMDEzQzAxMDgwMEFDMzgwMEQ4ODIKLToxMEY1ODAwMDBFMDAwRjU1MjQwNjAwMDMwQTAwMTM1RjAwMDAxMDIxMkYKLToxMEY1OTAwMDhDODQwMTQwMDBFMDI4MjEzQzAzODAwMDhDNzcwMUI4NzYKLToxMEY1QTAwMDA2RTBGRkZFMjQwODAwMUNBQ0E0MDAwMEEwQTgwMDBCOEQKLToxMEY1QjAwMDNDMTgxMDAwQUM3ODAxQjgzQzAzNDAwMDNDMDc4MDAwQzgKLToxMEY1QzAwMEFDRTMwMTc4MEEwMDEyMUIwMDAwMDAwMDNDMDMwODAwQjUKLToxMEY1RDAwMDhDNjMwMEQwMkVBNTAwMEMwMDE1MjFDMDM4NkYwMDAxRUYKLToxMEY1RTAwMDJERjIwMDAxMDI0NTcwMjQxNUMwRkZENjMyRDJGRkZGNzQKLToxMEY1RjAwMDI2QjdGRkZDMkVFNDAwMDQxNDgwMDAwODAwMDAyMDIxNDAKLToxMEY2MDAwMDM4NjgwMDAyMkQxODAwMDEwMzA1MTgyNDEwNjAwMDA2NTgKLToxMEY2MTAwMDAwMDdGQTQyMzJEMkZGRkYwMDAwMjAyMTAyNDAyODIxRDkKLToxMEY2MjAwMDBBMDAxM0E0MzY2NjAwMDIwMDE1MTAyQjAzRTJDODI0NUEKLToxMEY2MzAwMDE3MjAwMDA1MzJEMkZGRkYwMDE1MjFDMDAyNDAyODIxMEIKLToxMEY2NDAwMDBBMDAxM0E0MzY2NjAwMDIwMDAwMjAyMTAyNDAyODIxOEYKLToxMEY2NTAwMDBFMDAwRjU1MzI2NkZGRkIwQTAwMTNFMDAwMTUyMUMwQjMKLToxMEY2NjAwMDEwQjMwMDZBMDAwODYwODAyNDA2MDAwQjE0QTZGRTZCMkQKLToxMEY2NzAwMDAwMDgxOUMwMDAwODI4ODAzQzE1MDgwMTI2QjU4MjgwQzIKLToxMEY2ODAwMDAwQjUzMDIxMEEwMDEyNThBMEMwMDAwMTM0RDUwMDAyOTQKLToxMEY2OTAwMDAyRTAyMDIxMzBBNUZGRkYwRTAwMEY1NTMyQTZGRkZGMkMKLToxMEY2QTAwMDBBMDAxMzQ4MDAwMDIwMjEwMDA4Qjg4MDNDMDMwODAxMkMKLToxMEY2QjAwMDI0NjM4MjgwMDJFMzEwMjE5MDU0MDAwMDEyODBGRTU3RTAKLToxMEY2QzAwMDAwMDgxOUMwQTA0MDAwMDA4Rjk5MDAxODI3MzhGRkZGREMKLToxMEY2RDAwMDE3MDBGRTUyQUY5ODAwMTgwMDA4MTlDMDBBMDAxMjU4MEYKLToxMEY2RTAwMEFGODAwMDFDMEEwMDEyNEYyNDA4MDAwMzBFMDAwRkJDNUMKLToxMEY2RjAwMDAwMDAwMDAwMEEwMDEyREE4Rjg3MDAwMDE3MjBGRUYzRDYKLToxMEY3MDAwMDNDMDYwMDAxMjZCRjAwMDQzM0U1RkZGRjM2NjYwMDAyMTkKLToxMEY3MTAwMDNDMDM4MDAwOEM3NTAxQjgwNkEwRkZGRThGODkwMDA4QUQKLToxMEY3MjAwMDNDMDQ4MDAwMzQ5MzAxODBBRTYwMDAwMDExMjAwMDk5RjkKLToxMEY3MzAwMDI0MEYwMDAzMjRBQTAwMTIwMTJBMTAyQjEwNDAwMDk1NjgKLToxMEY3NDAwMDAwMDAwMDAwOTQ2RDAxMjAzQzEyODAwMDI0MDMwMDFBODgKLToxMEY3NTAwMDMxQUNGRkZGMzY0QTAxODAzMEVCNDAwMEExNDMwMDBCODMKLToxMEY3NjAwMDExNjAwMDhGMjU4M0ZGRkUwMTIzNzAyQjE1QzAwMDhERDMKLToxMEY3NzAwMDI0MDlGRkZFMzUwODAwMDFBNTQzMDAxNEFGODgwMDA0RUEKLToxMEY3ODAwMDI0MTdCRkZGMDExN0IwMjQyNDA4MDAwMkE3QzgwMDBDRUIKLToxMEY3OTAwMEE3QzUwMDBFQTdDNjAwMDhBN0Q2MDAyNkE3QzcwMDEwNTkKLToxMEY3QTAwMDNDMDcxMDAwQUUyNzAxQjgwQTAwMTM1RjAwMDAxMDIxQ0IKLToxMEY3QjAwMDI0MDQwMTAwMDI0MDI4MjEwRTAwMEY1NTAyNjAzMDIxNzAKLToxMEY3QzAwMDBBMDAxMzM0MDAwMDAwMDA5MTAzMDAwMTI0MTUwMDAxMTkKLToxMEY3RDAwMDEwNzVGRjAyMjQwNDAwMDEyNDBFMDAwMjE0NkVGRURERTkKLToxMEY3RTAwMDAwMDBCODIxMzBFMzAwNDAxMDYwRkVEQjhGODIwMDFDNzcKLToxMEY3RjAwMDk1MjcwMTEwOTUwRjAwMDIzMEU5RkZGRjExRTlGRjBFNzgKLToxMEY4MDAwMDAwODAxMDIxMEEwMDEzMjc4RjgyMDAxQzNDMEYwODAxODIKLToxMEY4MTAwMDI1RUY4MjgwMDE4RjcwMjEwMDA2OTIwMkExRDIwMDAxQTMKLToxMEY4MjAwMDNDMUY2MDAwOEZFRDE4MjAyNDEwMDAwMTAxMTA5ODA0ODcKLToxMEY4MzAwMDNDMDIwODAxMjQ0MjgyODIwMUIzQjAyNTAxODI1MDIxOUEKLToxMEY4NDAwMDAwMDY1QzAyMDAwODE5QzBBNTRCMDAwMEFGRjYxODIwQTYKLToxMEY4NTAwMDBBMDAxMjU5M0MwNTgwMDAzNjY2MDAwMjBFMDAwRjU1NjIKLToxMEY4NjAwMDI0MDQwMDgwMEEwMDEzNUYwMDAwMTAyMThDQUUwMDA0MDUKLToxMEY4NzAwMDNDMEY2MDAwMEEwMDEyMEMwMUNGMTgyMThDNjY0MDAwN0EKLToxMEY4ODAwMDMwQ0EwMTAwMTE0MDAwMzczMEVCMDEwMDNDMTUwODAwODAKLToxMEY4OTAwMDhFQjUwMDI0MTE2MDAwMTMzMjc3MDAwNDNDMEQwRjAwNzgKLToxMEY4QTAwMDAwRUQyODI0M0MwQzAyMDAxMEFDMDAwRThGODQwMDBDRUMKLToxMEY4QjAwMDNDMEYwODAwMjVFRjAwMzgwMjYwMzAyMTAwODk5MDI0QjkKLToxMEY4QzAwMDAyNEY3MDIxOTFDNzAwMDQzMkM1RkZGRjMyNzJGRkZCNjcKLToxMEY4RDAwMDI0RTkwMDA0MDAwOTIxQzAwRTAwMEY1NTI0MTNGRkZFODcKLToxMEY4RTAwMDAyQjNBODI0MjQwMzAwMDExMkEzMDAzMDMyQjgwMDAxOUYKLToxMEY4RjAwMDEzMDAwMDA3MzJBODAwMDQwMjQwMzAyMTAwMDAyMDIxM0MKLToxMEY5MDAwMDBFMDAwRjU1MzJDNUZGRkYzMjUyRkZGQjMyQTgwMDA0MzQKLToxMEY5MTAwMDExMDAwMDA0OEY5RjAwMDAzM0Y5MDgwMDU3MjAwMDJCQ0UKLToxMEY5MjAwMDMyQzVGRkZGMTZFMEZFQzQwMDAwMTAyMTNDMTY4MDAwMjcKLToxMEY5MzAwMDM2QzQwMTgwM0MwNTgwMDA4Q0EyMDFCODA0NDBGRkZFNjMKLToxMEY5NDAwMDI0MEIyMDAwMjQwNjAwMDJBNDhCMDAwOEEwODYwMDBCRDQKLToxMEY5NTAwMEE0ODAwMDEwM0MwQTEwMDBBQ0FBMDFCODBBMDAxMzVGOTIKLToxMEY5NjAwMDAwMDAxMDIxM0MwNTA4MDA4Q0E1MDAyNDMwQUMwMDAxRUIKLToxMEY5NzAwMDUxODBGRUIxMDAwMDEwMjEzMkM1RkZGRjM2NjYwMDAyNDMKLToxMEY5ODAwMDAwMDAyMDIxMEUwMDBGNTUwMDAwMDAwMDBBMDAxMzVGNDgKLToxMEY5OTAwMDAwMDAxMDIxQTNDRjAwMEIwQTAwMTQzMjI0MTdCRkZGNzAKLToxMEY5QTAwMDI0MDlGRkZFMEEwMDE0MzAwMTA5NDAyNDMyNTUwMDA0RTYKLToxMEY5QjAwMDE2QTAwMDAzMzJDNUZGRkYzNjU3MDAwMjMyRjJGRkZGRTgKLToxMEY5QzAwMDAyNDAzMDIxMEEwMDE0QjIwMDAwMjAyMTAyNDAzMDIxMDAKLToxMEY5RDAwMDBFMDAwRjU1MjQwNDAxMDAwQTAwMTQ5QTAwMDAwMDAwRDQKLToxMEY5RTAwMDNDMDM4MDAwOEM2NDAxMDAzMDgyMDAzRTE0NDAwMDA4MUIKLToxMEY5RjAwMDAwMDAwMDAwQUM2MDAwNDg4QzY2MDEwMDMwQzUwN0MwMDQKLToxMEZBMDAwMDEwQTAwMDA1MDAwMDAwMDBBQzYwMDA0Q0FDNjAwMDUwOEQKLToxMEZBMTAwMDAzRTAwMDA4MjQwMjAwMDFBQzYwMDA1NEFDNjAwMDQwMjgKLToxMEZBMjAwMDhDNjgwMTAwMzEwNzM4MDAxMEUwRkZGOTAwMDAwMDAwODkKLToxMEZBMzAwMDI0MDIwMDAxMDNFMDAwMDhBQzYwMDA0NDNDMDM5MDAwOTUKLToxMEZBNDAwMDM0NjIwMDAxMDA4MjIwMjUzQzAzODAwMEFDNjQwMDIwNjkKLToxMEZBNTAwMDhDNjUwMDIwMDRBMEZGRkUwMDAwMDAwMDAzRTAwMDA4MDkKLToxMEZBNjAwMDAwMDAwMDAwM0MwMjgwMDAzNDQzMDAwMTAwODMyMDI1OTgKLToxMEZBNzAwMDAzRTAwMDA4QUM0NDAwMjAyN0JERkZEOEFGQjEwMDE0NUMKLToxMEZBODAwMDNDMDQ4MDAwQUZCRjAwMjBBRkIzMDAxQ0FGQjIwMDE4MzEKLToxMEZBOTAwMEFGQjAwMDEwOEM5MjAxNDA4QzkwMDE0ODI0MDIwMDBFRkYKLToxMEZBQTAwMDAwMTA4QzAyMzIyMzAwRkYxMDYyMDA1OTAyMDQyODI0NDcKLToxMEZBQjAwMDI4NjYwMDBGMTBDMDAwMTMyODZBMDAzNzI0MDcwMDA2Q0MKLToxMEZBQzAwMDEwNjcwMDhFMjg2ODAwMDc1MTAwMDAyRDI0MDQwMDA5RUIKLToxMEZBRDAwMDEwNjAwMDc4M0MwNjgwMDAyNDA5MDAwMTEwNjkwMEIwMjUKLToxMEZBRTAwMDAwMDAwMDAwMDAwMDAwMEQ4RkJGMDAyMDhGQjMwMDFDM0QKLToxMEZBRjAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MUYKLToxMEZCMDAwMDI3QkQwMDI4MTE0MDAwNTkyNDBEMDAzODI4NkIwMDM1MEUKLToxMEZCMTAwMDExNjAwMDA1M0MwNTgwMDAyNDBDMDAxRjE0NkNGRkYxRUYKLToxMEZCMjAwMDAwMDAwMDAwM0MwNTgwMDA4Q0I4MDFCODA3MDBGRkZFMTMKLToxMEZCMzAwMDM0QjkwMTgwQUYzMjAwMDAyNDFGMDAwMTI0MTIwMDAyRkEKLToxMEZCNDAwMDNDMDIxMDAwQUYyMDAwMDRBNzMxMDAwOEEzM0YwMDBBQzgKLToxMEZCNTAwMEEzMzIwMDBCQTczMDAwMTBBRjIwMDAyNEFGMjAwMDI4RjQKLToxMEZCNjAwMEFDQTIwMUI4OEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4NjkKLToxMEZCNzAwMDhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODI3QkQwMDI4RUIKLToxMEZCODAwMDEwNjQwMDIzMjQwNTAwMEIxNDY1RkZENjMyMThGRkZGMTQKLToxMEZCOTAwMDE3MDAwMDIwM0MwNTgwMDA4RjkzRkVFQzkyN0YwMDA1NEIKLToxMEZCQTAwMDMzRjkwMDA0MTcyMEZGQ0YwMDAwMDAwMDBFMDAxNEUwMUUKLToxMEZCQjAwMDAyNDAyMDIxOTI2OTAwMDUwMjQwMjAyMTM1MjgwMDA0REUKLToxMEZCQzAwMDBFMDAxNEVBQTI2ODAwMDU5MjY3MDAwNTMwRTIwMDA0MDYKLToxMEZCRDAwMDE0NDAwMDAyMDAwMDAwMDAwMDAwMDAwRDkyNkIwMDAwQzUKLToxMEZCRTAwMDI0MDYwMDIwMzE2QTAwRkYxNTQ2MDAwQTNDMDU4MDAwMEIKLToxMEZCRjAwMDhDQTQwMUI4MDQ4MEZGRkUzNEFEMDE4MDI0MEUwMDA1MDIKLToxMEZDMDAwMDNDMEMxMDAwQURCMjAwMDBBMUFFMDAwQkFDQUMwMUI4RDIKLToxMEZDMTAwMDNDMDU4MDAwOENBMzAxQjgwNDYwRkZGRTM0QUYwMTgwNzYKLToxMEZDMjAwMDI0MTMwMDAyQURGMjAwMDBBREYyMDAwNEE1RjEwMDA4QkIKLToxMEZDMzAwMEExRjMwMDBBQTFGMzAwMEJBNUYwMDAxMEFERTAwMDI0MzEKLToxMEZDNDAwMDhDQjEwMTQ0M0MxMDEwMDBBREYxMDAyOEFDQjAwMUI4RkIKLToxMEZDNTAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0MkIKLToxMEZDNjAwMDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyODEwNkRGRkFEMjUKLToxMEZDNzAwMDI0MEUwMDgwMTQ2RUZGOUIwMDAwMDAwMDNDMDU4MDAwRjUKLToxMEZDODAwMDhDQTMwMUI4MDQ2MEZGRkUzNEFGMDE4MDI0MTIwMDAyOEYKLToxMEZDOTAwMEExRjIwMDBCQTVGMTAwMDhBNUYwMDAxMDhDQjMwMTQ0RkYKLToxMEZDQTAwMDNDMDIxMDAwQTVGMzAwMTJBQ0EyMDFCODBBMDAxNTJCMEIKLToxMEZDQjAwMDhGQkYwMDIwOENDMzAxQjgwNDYwRkZGRTM0RDMwMTgwRTUKLToxMEZDQzAwMEFFNzIwMDAwQUU2MDAwMDQyNDEyMDAwMUE2NzEwMDA4QUMKLToxMEZDRDAwMDI0MTEwMDAyQTI3MjAwMEFBMjcxMDAwQkE2NzAwMDEwOEIKLToxMEZDRTAwMDhDRDAwMTQ0M0MwRjEwMDBBRTcwMDAyNEFFNjAwMDI4QTAKLToxMEZDRjAwMEFDQ0YwMUI4MEEwMDE1NjY4RkJGMDAyMDNDMDM4MDAwMUUKLToxMEZEMDAwMDhDNjYwMUI4MDRDMEZGRkUzNDYyMDE4MDNDMDYwODAxMjUKLToxMEZEMTAwMDkwQzY4MkMwQUM1MjAwMDAxMEMwMDAwMzAwMDAzODIxMjEKLToxMEZEMjAwMDNDMDcwODAxOENFNzgyQzgzQzA1ODAwMDM0QUEwMTgwQUEKLToxMEZEMzAwMDI0MDQwMDAyMzRDQzAwMDFBQzQ3MDAwNEE1NTEwMDA4QTMKLToxMEZENDAwMEExNEMwMDBBQTE0NDAwMEJBNTUwMDAxMDhDQUIwMTQ0NEIKLToxMEZENTAwMDAwMDAyMDIxMDE0MDI4MjFBRDRCMDAyNDEwQzAwMDAzRTkKLToxMEZENjAwMDhGQkYwMDIwM0MwNDA4MDE4Qzg0ODJDNDhGQjMwMDFDMjgKLToxMEZENzAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDNDMEUxMDAwMkQKLToxMEZEODAwMDNDMEQ4MDAwMjdCRDAwMjhBQ0E0MDAyOEFEQUUwMUI4MTIKLToxMEZEOTAwMDNDMDEwODAxQTAyMDgyQzAwM0UwMDAwODAwMDAwMDAwMzAKLToxMEZEQTAwMDEwQTAwMDBCM0MwNjgwMDA4Qzk4MDE0NDI0MTkwMDAyMkUKLToxMEZEQjAwMDNDMDEwODAxQTAzOTgyQzAzQzAxMDgwMUFDMzI4MkM4NzQKLToxMEZEQzAwMDNDMDEwODAxQUMzODgyQzQwQTAwMTU2NjhGQkYwMDIwRDAKLToxMEZERDAwMDhDREYwMUI4MDdFMEZGRkUzNEM3MDE4MDI0MDkwMDAyNzAKLToxMEZERTAwMEFDRjIwMDAwQUNGMjAwMDRBNEYxMDAwOEEwRTkwMDBBQTMKLToxMEZERjAwMEEwRTkwMDBCQTRGMDAwMTBBQ0UwMDAyNDhDQzgwMTQ0ODIKLToxMEZFMDAwMDNDMDIxMDAwQUNFODAwMjhBQ0MyMDFCODBBMDAxNTY2M0MKLToxMEZFMTAwMDhGQkYwMDIwMjdCREZGRThBRkJGMDAxMDBFMDAwRjRFQzAKLToxMEZFMjAwMDAwMDAwMDAwM0MwMjgwMDA4RkJGMDAxMDAwMDAyMDIxNzUKLToxMEZFMzAwMEFDNDAwMTgwMEEwMDEwMTAyN0JEMDAxODMwODRGRkZGN0QKLToxMEZFNDAwMDMwQTVGRkZGMTA4MDAwMDcwMDAwMTgyMTMwODIwMDAxNUMKLToxMEZFNTAwMDEwNDAwMDAyMDAwNDIwNDIwMDY1MTgyMTE0ODBGRkZCQkUKLToxMEZFNjAwMDAwMDUyODQwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA3RDIKLToxMEZFNzAwMDAwMDAwMDAwOENBMjAwMDAyNEM2RkZGRjI0QTUwMDA0OUYKLToxMEZFODAwMEFDODIwMDAwMTRDMEZGRkIyNDg0MDAwNDAzRTAwMDA4REYKLToxMEZFOTAwMDAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwQjMKLToxMEZFQTAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGQTkKLToxMEZFQjAwMDE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwM0MKLToxMEZFQzAwMDI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDBFMDAxNEUwNzQKLToxMEZFRDAwMDAwODA4MDIxM0MwNDgwMDgzNDgzMDA4MDkwNjUwMDI1RTgKLToxMEZFRTAwMDAyMDAyMDIxMzRBMjAwMjAwRTAwMTRFQUEwNjIwMDI1QTYKLToxMEZFRjAwMDAyMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMDBBMDAwQzlFNUEKLToxMEZGMDAwMDI3QkQwMDE4M0MwMzgwMDAyN0JERkZGODM0NjIwMTgwNDQKLToxMEZGMTAwMEFGQTIwMDAwMzA4QzAwRkYzMEFEMDBGRjMwQ0UwMEZGRkMKLToxMEZGMjAwMDNDMEI4MDAwOEQ2NDAxQjgwNDgwRkZGRTAwMDAwMDAwREYKLToxMEZGMzAwMDhGQTkwMDAwOEQ2ODAxMjg4RkFBMDAwMDhGQTcwMDAwRkMKLToxMEZGNDAwMDhGQTQwMDAwMjQwNTAwMDEyNDAyMDAwMkEwODUwMDBBRkQKLToxMEZGNTAwMDhGQTMwMDAwMzU5OTQwMDAzQzA1MTAwMEEwNjIwMDBCMDMKLToxMEZGNjAwMDhGQjgwMDAwOEZBQzAwMDA4RkE2MDAwMDhGQUYwMDAwOUMKLToxMEZGNzAwMDI3QkQwMDA4QUQyODAwMDBBRDQwMDAwNEFEODAwMDI0N0UKLToxMEZGODAwMEFDQzAwMDI4QTRGOTAwMDhBNzBEMDAxMEE1RUUwMDEyQ0YKLToxMEZGOTAwMDAzRTAwMDA4QUQ2NTAxQjgzQzA2ODAwODI3QkRGRkU4MTYKLToxMEZGQTAwMDM0QzUwMDgwQUZCRjAwMTA5MEE3MDAwOTI0MDIwMDEyRTIKLToxMEZGQjAwMDMwRTMwMEZGMTA2MjAwMEIwMDgwMzAyMThDQTgwMDUwNUQKLToxMEZGQzAwMDAwODgyMDIzMDQ4MDAwMDg4RkJGMDAxMDhDQUEwMDM0MTIKLToxMEZGRDAwMDI0MDQwMDM5MDAwMDI4MjEwMENBNDgyMzA1MjAwMDA1MTgKLToxMEZGRTAwMDI0MDYwMDEyOEZCRjAwMTAyNDAyMDAwMTAzRTAwMDA4NjUKLToxMEZGRjAwMDI3QkQwMDE4MEUwMDE2MTIwMDAwMDAwMDhGQkYwMDEwNzEKLTowMjAwMDAwNDAwMDFGOQotOjEwMDAwMDAwMjQwMjAwMDEwM0UwMDAwODI3QkQwMDE4MjdCREZGQzgzNwotOjEwMDAxMDAwQUZCMTAwMkMwMEEwODgyMUFGQjIwMDMwMjdBNTAwMTA5RQotOjEwMDAyMDAwMDA4MDkwMjEwMjIwMjAyMUFGQkYwMDM0QUZCMDAwMjgxMwotOjEwMDAzMDAwMEUwMDBDQThBRkEwMDAxMDE0NDAwMDlCM0MwNzgwMDhFNQotOjEwMDA0MDAwMzRFNDAwODA5MDg2MDAwODMwQzUwMDA4MTRBMDAwNjlFMAotOjEwMDA1MDAwOEZBNzAwMTAzQzE4ODAwODM3MTAwMDgwOTIwRjAwMDgwRQotOjEwMDA2MDAwMzFFRTAwMDgxNUMwMDAwMjI0MDgwMDAzMDAwMDQwMjEwMgotOjEwMDA3MDAwM0MwQjgwMDg5MTY1MDAxMTkxNkEwMDEyMzU2NjAwODA4MgotOjEwMDA4MDAwOENERjAwNTQzMTQ5MDBGRjAxMjgyMDIxMzBBMzAwRkZGQwotOjEwMDA5MDAwMDAwNDEwODAwMDYyMjgyMTAwQkZDODJCMTMyMDAwMDgzNAotOjEwMDBBMDAwMDAwMDAwMDA5NEQwMDA1QzhDQ0YwMDU0MzIwREZGRkZBNAotOjEwMDBCMDAwMDFFNTcwMjMwMUFFNjAyQjExODAwMDk0MDAwMDAwMDA2OAotOjEwMDBDMDAwOTREOTAwNUMzMzIzRkZGRjMwRkYwMDA0MTNFMDAwNzQ3OQotOjEwMDBEMDAwMDAwODMwODA4RkE4MDAxQzAwNjgxMDJCNTA0MDAwNEY5MwotOjEwMDBFMDAwMzBFMzAwMDQwMDY2MTAyMzJDNDYwMDgwMTBDMDAwMDI5QwotOjEwMDBGMDAwMDA0MDgwMjEyNDEwMDA4MDBFMDAxNEUwMDI0MDIwMjFFNgotOjEwMDEwMDAwM0MwMzgwMDgzNDY2MDA4MDI0MDcwMDAxQUNDNzAwMEM2MwotOjEwMDExMDAwOTBDODAwMDgwMDEwNjg0MDM0NjcwMTAwMzExRjAwN0Y1QwotOjEwMDEyMDAwQTBERjAwMDg4RTM5MDAwNDI3MzgwMDAxQUNEODAwMzA2OQotOjEwMDEzMDAwQTREMDAwNUM4Q0NGMDAzQzk2MzAwMDBFMDFGMDcwMjEwMgotOjEwMDE0MDAwQUNDRTAwMjA4Q0NDMDAzQzAxOEQ1ODIxQUNDQjAwMUNFNwotOjEwMDE1MDAwOEUyQTAwMDRBQ0VBMDAwMDhFMjkwMDA4QUNFOTAwMDRGNQotOjEwMDE2MDAwOEZBNTAwMTAzMEE0MDAwODU0ODAwMDMyOTNBNjAwMjAxMAotOjEwMDE3MDAwQTBDMDAwNEU5MEM5MDA0RTI0MDJGRkRGM0MxODgwMDg0QQotOjEwMDE4MDAwQTBFOTAwMDg5MEM1MDAwODM3MEQwMDgwMjQwQTAwNTAzRgotOjEwMDE5MDAwMDBBMjIwMjRBMEM0MDAwODhFMzkwMDA4QURCOTAwMzhBMAotOjEwMDFBMDAwOEYwRjAwMTQ4REIwMDAzMDAxRjA3MDIxQURBRTAwMzQxRgotOjEwMDFCMDAwOTFBQzAwMDAzMThCMDBGRjExNkEwMDJDMjY0NTAxMDAzNAotOjEwMDFDMDAwMEUwMDE0RUEwMjQwMjAyMTI0MDQwMDM4MDAwMDI4MjFGNwotOjEwMDFEMDAwMEUwMDE2MTIyNDA2MDAwQThGQkYwMDM0OEZCMjAwMzBDMgotOjEwMDFFMDAwOEZCMTAwMkM4RkIwMDAyODI0MDIwMDAxMDNFMDAwMDgyQQotOjEwMDFGMDAwMjdCRDAwMzgzMEU4MDEwMDExMDAwMDNEOEZBMzAwMTQzNgotOjEwMDIwMDAwOEM4QTAwNTgwMDZBNDgyMzA1MjBGRjkzM0MxODgwMDgxOAotOjEwMDIxMDAwQUM4MzAwNTgwQTAwMTY2NjhGQTcwMDEwMjQwNzAyMTg0NgotOjEwMDIyMDAwMTA2MEZGQjEwMEU2MTAyMzhGQTIwMDFDMEEwMDE2OEI5RAotOjEwMDIzMDAwMDA0NjEwMjMzQzE4ODAwODM3MEQwMDgwQTBFNjAwMDgxNwotOjEwMDI0MDAwOEUzOTAwMDgyNDBBMDA1MEFEQjkwMDM4OEYwRjAwMTQxMQotOjEwMDI1MDAwOERCMDAwMzAwMUYwNzAyMUFEQUUwMDM0OTFBQzAwMDBFMwotOjEwMDI2MDAwMzE4QjAwRkYxNTZBRkZENjI2NDUwMTAwMjQwNkZGODA2QQotOjEwMDI3MDAwMDBBNjEwMjQzQzA5ODAwMEFEMjIwMDI4OEUyNzAwMDgyQgotOjEwMDI4MDAwMzBBMzAwN0YzQzA0ODAwQzAwNjRGODIxQUZFNzAwRDA2RAotOjEwMDI5MDAwOEUyODAwMDhBRjlGMDAyODBBMDAxNkMxQUZFODAwRDRERQotOjEwMDJBMDAwMEEwMDE2ODgyQzYyMDIxODhFMjMwMDA4M0MwNDgwMDg3RAotOjEwMDJCMDAwMzQ4MjAwODBBQzQzMDA1NDAyNDAyMDIxMEUwMDE2MDExRAotOjEwMDJDMDAwQUM0MDAwMzAyNDA0MDAzODI0MDUwMDhEMEUwMDE2MTJDNgotOjEwMDJEMDAwMjQwNjAwMTI4RkJGMDAzNDhGQjIwMDMwOEZCMTAwMkM4MwotOjEwMDJFMDAwOEZCMDAwMjgyNDAyMDAwMTAzRTAwMDA4MjdCRDAwMzg3OQotOjEwMDJGMDAwQUM4MDAwNTg5MDhDMDAwODI0MERGRkY3MDE4RDU4MjQyNQotOjEwMDMwMDAwQTA4QjAwMDgwQTAwMTY2NjhGQTcwMDEwOENEODAwNTQzNgotOjEwMDMxMDAwMEEwMDE2ODMwMzA1MTgyMzI3QkRGRkU4QUZCRjAwMTBBRQotOjEwMDMyMDAwOTBBNjAwMEQzMEM3MDAxMDEwRTAwMDBDMDA4MDQwMjFBNgotOjEwMDMzMDAwM0MwMjgwMDg4QzQ0MDAwNDhDQTMwMDA4MTA2NDAwMDg3MAotOjEwMDM0MDAwMzBDOTAwMDQzMEM1MDAwNDEwQTAwMDFDOEZCRjAwMTA4RAotOjEwMDM1MDAwMjQwMjAwMDEwM0UwMDAwODI3QkQwMDE4MzBDOTAwMDQ5MgotOjEwMDM2MDAwMTEyMDAwMTAzMENCMDAxMjEwRTBGRkY5OEZCRjAwMTBGOQotOjEwMDM3MDAwM0MwODgwMDg4Q0E3MDAwODhEMDYwMDA0MTRFNkZGRjVGMQotOjEwMDM4MDAwMjQwMjAwMDEyNDA0MDAzODI0MDUwMDhEMEUwMDE2MTJGQQotOjEwMDM5MDAwMjQwNjAwMTI4RkJGMDAxMDI0MDIwMDAxMDNFMDAwMDhCMQotOjEwMDNBMDAwMjdCRDAwMTgyNDBBMDAxMjE1NkFGRkU5OEZCRjAwMTA0QwotOjEwMDNCMDAwMDEwMDIwMjEwQTAwMTY1NDI3QkQwMDE4MDAwMDIwMjE0QQotOjEwMDNDMDAwMEEwMDBEMUEyN0JEMDAxODNDMDUwODAwMjRBNTVENTA0MQotOjEwMDNEMDAwM0MwNDA4MDAyNDg0N0IxMDNDMDIwODAwMjQ0MjVENTg0MQotOjEwMDNFMDAwMjQwMzAwMDYzQzAxMDgwMUFDMjU4MkQwM0MwMTA4MDEzMQotOjEwMDNGMDAwQUMyNDgyRDQzQzAxMDgwMUFDMjI4MkQ4M0MwMTA4MDEyMwotOjEwMDQwMDAwQTAyMzgyREMwM0UwMDAwODAwMDAwMDAwMDNFMDAwMDhGNQotOjEwMDQxMDAwMjQwMjAwMDEzQzAyODAwMDMwODgwMEZGMzQ0NzAxODA0NAotOjEwMDQyMDAwM0MwNjgwMDA4Q0MzMDFCODA0NjBGRkZFMDAwMDAwMDBBMQotOjEwMDQzMDAwOENDNTAxMjgyNDE4RkY4MDNDMEQ4MDBBMjRBRjAxMDBFMAotOjEwMDQ0MDAwMDFGODcwMjQzMUVDMDA3RkFDQ0UwMDI0MDE4RDIwMjExNgotOjEwMDQ1MDAwQUNFNTAwMDA5NDhCMDBEQTM1MDk2MDAwMjQwODAwMDI0NgotOjEwMDQ2MDAwMzE2QUZGRkZBQ0VBMDAwNDI0MDIwMDAxQTRFOTAwMDg5RAotOjEwMDQ3MDAwQTBFODAwMEJBQ0UwMDAyNDNDMDcxMDAwQUNDNzAxQjhCQQotOjEwMDQ4MDAwQUY4NDAwMjgwM0UwMDAwOEFGODUwMDU4OEM5OTAwMDQ3MQotOjEwMDQ5MDAwOEY4RDAwMjgyNDA5RkZCRjAzMjVDMDIzQUM5ODAwMDREQQotOjEwMDRBMDAwOTFBRjAwQzQyNDAzRkZFRjMxRUUwMDdGQTFBRTAwQzQ4MgotOjEwMDRCMDAwOEM4QzAwMjA5MzhCMDAzNDhGODYwMDI4MzU4QTAwMDJCNAotOjEwMDRDMDAwQUY4QjAwNENBNzgwMDA0OEFDOEEwMDIwQTRDMDAwQUNEMQotOjEwMDREMDAwOTBDODAwQzQwMTA5MzgyNEEwQzcwMEM0OEY4NDAwMjgzNAotOjEwMDRFMDAwQUM4MDAwREM5MDg1MDBDNDAwQTMxMDI0MDNFMDAwMDg2OQotOjEwMDRGMDAwQTA4MjAwQzQzQzAyODAwMDM0NDUwMTgwM0MwNDgwMDA5RQotOjEwMDUwMDAwOEM4MzAxQjgwNDYwRkZGRThGODkwMDU4MjQwNzYwODM0NAotOjEwMDUxMDAwMjQwNjAwMDJBQ0E5MDAwMDhDODgwMTI0QUNBODAwMDRDOQotOjEwMDUyMDAwQTRBNzAwMDhBMEE2MDAwQjNDMDUxMDAwMDNFMDAwMDhFQgotOjEwMDUzMDAwQUM4NTAxQjg5Mzg4MDAzNDhGODkwMDRDOEY4MjAwMjhFNQotOjEwMDU0MDAwMzBDNjAwRkYwMTA5MzgyMzMwRTkwMEZGMDEyMjE4MjFERAotOjEwMDU1MDAwMzBBNTAwRkYyNDY4MDA3ODEwQzAwMDAyMDEyNDM4MjE3MwotOjEwMDU2MDAwMDA4MDM4MjEzMEU0MDAwMzE0ODAwMDAzMzBBQTAwMDMyNwotOjEwMDU3MDAwMTE0MDAwMEQzMTJCMDAwMzEwQTAwMDA5MDAwMDEwMjFENAotOjEwMDU4MDAwOTBFRDAwMDAyNDRFMDAwMTMxQzIwMEZGMDA0NTYwMkJCOQotOjEwMDU5MDAwQTEwRDAwMDAyNEU3MDAwMTE1ODBGRkY5MjUwODAwMDFFNgotOjEwMDVBMDAwMDNFMDAwMDgwMDAwMDAwMDE1NjBGRkYzMDAwMDAwMDBGOQotOjEwMDVCMDAwMTBBMEZGRkIwMDAwMTAyMThDRjgwMDAwMjQ1OTAwMDQ1QgotOjEwMDVDMDAwMzMyMjAwRkYwMDQ1NzgyQkFEMTgwMDAwMjRFNzAwMDQxQgotOjEwMDVEMDAwMTVFMEZGRjkyNTA4MDAwNDAzRTAwMDA4MDAwMDAwMDAxMgotOjEwMDVFMDAwOTM4NTAwMzQ5Mzg4MDA0NDhGODcwMDRDMDAwNDMyMDBDOAotOjEwMDVGMDAwMzEwMzAwN0YwMEU1MTAyQjMwQzQ3RjAwMTA0MDAwMEY1NgotOjEwMDYwMDAwMDA2NDI4MjU4Rjg0MDAyODNDMDk4MDAwOEM4QTAwREM0NwotOjEwMDYxMDAwQUQyQTAwQTQzQzAzODAwMDAwQTM1ODI1QUM2QjAwQTBDOQotOjEwMDYyMDAwOEM2QzAwQTAwNTgwRkZGRTAwMDAwMDAwOEM2RDAwQUMwQgotOjEwMDYzMDAwQUM4RDAwREMwM0UwMDAwODhDNjIwMEE4MEEwMDE3RDYyRAotOjEwMDY0MDAwOEY4NDAwMjg5Mzg4MDA0NTNDMDI4MDAwMDA4MDUwMjE2MAotOjEwMDY1MDAwMzEwMzAwRkVBMzgzMDA0NTMwQUJGRkZGMzBDQzAwRkYyOQotOjEwMDY2MDAwMzBFN0ZGRkYzNDQ4MDE4MDNDMDk4MDAwOEQyNDAxQjg0OQotOjEwMDY3MDAwMDQ4MEZGRkU4RjhEMDA1ODI0MTgwMDE2QUQwRDAwMDA3OQotOjEwMDY4MDAwOEQyMjAxMjQ4RjhEMDAyOEFEMDIwMDA0OEQ1OTAwMjA5OQotOjEwMDY5MDAwQTUwNzAwMDgyNDAyMDFCNEExMTkwMDBBQTExODAwMEI0MwotOjEwMDZBMDAwOTUyRjAxMjA4RDRFMDAwODhENDcwMDA0OTc4MzAwNDg0OAotOjEwMDZCMDAwOEQ1OTAwMjQwMUNGMzAyMTAwQzcyODIxMDBBMzIwMjMxOQotOjEwMDZDMDAwMjQxOEZGRkZBNTA0MDAwQ0E1MEIwMDBFQTUwMjAwMTBDNgotOjEwMDZEMDAwQTUwQzAwMTJBRDE5MDAxOEFEMTgwMDI0OTVBRjAwRDg3NAotOjEwMDZFMDAwM0MwQjEwMDAyNDA3RkZGNzMxRUVGRkZGQUQwRTAwMjg5MgotOjEwMDZGMDAwOERBQzAwNzRBRDBDMDAyQ0FEMkIwMUI4OEQ0NjAwMjBFNAotOjEwMDcwMDAwMDBDNzI4MjQwM0UwMDAwOEFENDUwMDIwOEY4ODAwMjg5QQotOjEwMDcxMDAwMDA4MDU4MjEzMEU3RkZGRjkxMDkwMEM2M0MwMjgwMDBBRAotOjEwMDcyMDAwMzBBNUZGRkYzMTI0MDBGRjAwMDQxQTAwMDA2NzUwMjVBOAotOjEwMDczMDAwMzBDNjAwRkYzNDQ3MDE4MDNDMDk4MDAwOEQyQzAxQjg5MQotOjEwMDc0MDAwMDU4MEZGRkU4RjgyMDA1ODI0MEYwMDE3QUNFMjAwMDBFNgotOjEwMDc1MDAwOEQzOTAxMjRBQ0Y5MDAwNDhENzgwMDIwQTRFQTAwMDg0QQotOjEwMDc2MDAwMjQxOTAxQjRBMEY4MDAwQUEwRUYwMDBCOTUyMzAxMjA4MgotOjEwMDc3MDAwOEQ2RTAwMDg4RDZEMDAwNDk3ODQwMDQ4MDFDMzUwMjFFMAotOjEwMDc4MDAwMDE0RDYwMjEwMTg0MTAyM0E0RTIwMDBDQTRFNTAwMEVCOQotOjEwMDc5MDAwQTRGOTAwMTBBNEU2MDAxMkFDRTAwMDE0OEQ3ODAwMjQ0NwotOjEwMDdBMDAwMjQwREZGRkZBQ0Y4MDAxODhEMEYwMDZDQUNFRjAwMUM5RgotOjEwMDdCMDAwOEQwRTAwNjgzQzBGMTAwMEFDRUUwMDIwQUNFRDAwMjQ2NAotOjEwMDdDMDAwOTUwQTAwQUUyNDBERkZGNzMxNDZGRkZGQUNFNjAwMjg4NgotOjEwMDdEMDAwOTUwQzAwNzA5NTA0MDA3MjMxODM3RkZGMDAwM0NBMDBGRQotOjEwMDdFMDAwMzA4MkZGRkYwMzIyQzAyMUFDRjgwMDJDQUQyRjAxQjhFRQotOjEwMDdGMDAwOTUwRTAwNzI4RDZBMDAyMDAwQUUzMDIxMDE0RDI4MjQzNAotOjEwMDgwMDAwQTUwNjAwNzIwM0UwMDAwOEFENjUwMDIwM0MwMjgwMDBGMAotOjEwMDgxMDAwMzQ0NjAxODAzQzA1ODAwMDhDQTMwMUI4MDQ2MEZGRkVEMwotOjEwMDgyMDAwMjQwOTAwMThBQ0M0MDAwMEEwQzkwMDBCOEY4ODAwMjg2MAotOjEwMDgzMDAwM0MwNDEwMDA5NTA3MDBBRUE0QzcwMDEwQUNDMDAwMzAwNwotOjEwMDg0MDAwMDNFMDAwMDhBQ0E0MDFCODNDMDI4MDAwMzQ0NTAxODBGQwotOjEwMDg1MDAwM0MwNDgwMDA4QzgzMDFCODA0NjBGRkZFOEY4QTAwMzA2NgotOjEwMDg2MDAwMjQwNjAwMTk5NTQ5MDAxQzMxMjhGRkZGMDAwODM5QzBGMwotOjEwMDg3MDAwQUNBNzAwMDBBMEE2MDAwQjNDMDUxMDAwMDNFMDAwMDg5OAotOjEwMDg4MDAwQUM4NTAxQjg4Rjg3MDAzODAwODA0MDIxMzBDNDAwRkY1QwotOjEwMDg5MDAwM0MwNjgwMDA4Q0MyMDFCODA0NDBGRkZFOEY4OTAwNThERQotOjEwMDhBMDAwOTM4MzAwNTQzNDk5NjAwMEFDQTkwMDAwQTBBMzAwMDUxNAotOjEwMDhCMDAwOENFMjAwMTAyNDBGMDAwMjI0MDNGRkY3QTRBMjAwMDYxQwotOjEwMDhDMDAwQTRCOTAwMDg4RDE4MDAyMEEwQjgwMDBBQTBBRjAwMEI0MgotOjEwMDhEMDAwOENFRTAwMDBBQ0FFMDAxMDhDRUQwMDA0QUNBRDAwMTQ0QQotOjEwMDhFMDAwOENFQzAwMUNBQ0FDMDAyNDhDRUIwMDIwQUNBQjAwMjhFMgotOjEwMDhGMDAwOENFQTAwMkMzQzA3MTAwMEFDQUEwMDJDOEQwOTAwMjRDNwotOjEwMDkwMDAwQUNBOTAwMThBQ0M3MDFCODhEMDUwMDIwMDBBMzIwMjRCNQotOjEwMDkxMDAwMDNFMDAwMDhBRDA0MDAyMDkzODUwMDU0MjQwMzAwMDE4NwotOjEwMDkyMDAwMjdCREZGRTgwMEEzMzAwNDJDQTIwMDIwQUZCMDAwMTBDOAotOjEwMDkzMDAwQUZCRjAwMTQwMEMwMTgyMTEwNDAwMDEzMjQxMEZGRkVBOAotOjEwMDk0MDAwM0MwNzA4MDA4Q0U3MzE5MDAwRTYxMDI0M0MwODgwMDA0QQotOjEwMDk1MDAwMzUwNTAxODAxNDQwMDAwNTI0MDYwMDg0OEY4OTAwMjg5NQotOjEwMDk2MDAwMjQwQTAwMDQyNDEwRkZGRkExMkEwMEVDMEUwMDE4NzJENAotOjEwMDk3MDAwMDAwMDAwMDAwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTA5MwotOjEwMDk4MDAwMDNFMDAwMDgyN0JEMDAxODNDMDYwODAwOENDNjMxOTQxRgotOjEwMDk5MDAwMEEwMDE4QTQwMEMzMTAyNDhGODcwMDMwMjdCREZGRTA5MQotOjEwMDlBMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUM2MQotOjEwMDlCMDAwMzBEMDAwRkY5MEU2MDAwRDAwQTA4ODIxMDA4MDkwMjEzQgotOjEwMDlDMDAwMzBDNTAwN0ZBMEU1MDAwRDhGODUwMDI4OEUyMzAwMTgxQwotOjEwMDlEMDAwOENBMjAwQzAxMDYyMDAyRTI0MEEwMDBFMEUwMDE4OTc5MAotOjEwMDlFMDAwQTM4QTAwNTQyNDA5RkZGRjEwNDkwMDIyMjQwNEZGRkZCQQotOjEwMDlGMDAwNTIwMDAwMjAwMDAwMjAyMThFMjYwMDAwM0MwQzAwMTAzOAotOjEwMEEwMDAwMDBDQzU4MjQxNTYwMDAzOTNDMEUwMDA4MDBDRTY4MjQ0NAotOjEwMEExMDAwNTVBMDAwM0YwMjQwMjAyMTNDMTgwMDAyMDBEODgwMjQ0RAotOjEwMEEyMDAwMTIwMDAwMUYzQzBBMDAwNDhGODcwMDMwOENFMjAwMTQ4MwotOjEwMEEzMDAwOENFMzAwMTA4Q0U1MDAxNDAwNDNGODIzMDNFNUM4MkI3OQotOjEwMEE0MDAwMTMyMDAwMDUwMjQwMjAyMThFMjQwMDJDOENGMTAwMTA4MAotOjEwMEE1MDAwMTA5MTAwMzEwMjQwMjAyMTI0MDIwMDEyQTM4MjAwNTQ5MAotOjEwMEE2MDAwMEUwMDE4OTcyNDEyRkZGRjEwNTIwMDAyMjQwNEZGRkYwQgotOjEwMEE3MDAwMDAwMDIwMjE4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQxRQotOjEwMEE4MDAwOEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjA3NwotOjEwMEE5MDAwOTBBODAwQzQzNTA0MDAyMDBBMDAxOENEQTBBNDAwQzQwQQotOjEwMEFBMDAwMDBDQTQ4MjQxNTIwMDAwQjhGOEIwMDMwOEY4RDAwMzAzQQotOjEwMEFCMDAwOERBQzAwMTAxNTgwMDAwQjAyNDAyMDIxOEUyRTAwMkNFMgotOjEwMEFDMDAwNTFDMEZGRUMwMDAwMjAyMTAyNDAyMDIxMEEwMDE4RTg1QwotOjEwMEFEMDAwMjQwMjAwMTc4RDY2MDAxMDUwQzBGRkU2MDAwMDIwMjFBMAotOjEwMEFFMDAwMDI0MDIwMjEwQTAwMThFODI0MDIwMDExMDI0MDIwMjFCRgotOjEwMEFGMDAwMjQwMjAwMTUwRTAwMTg5N0EzODIwMDU0MjQwRkZGRkY1NAotOjEwMEIwMDAwMTA0RkZGREMyNDA0RkZGRjBBMDAxOEQ3OEUyNjAwMDBEOAotOjEwMEIxMDAwMEEwMDE5MEUyNDAyMDAxNDNDMDgwMDA0MDBDODM4MjRGRQotOjEwMEIyMDAwNTBFMEZGRDQwMDAwMjAyMTAyNDAyMDIxMEEwMDE4RThGNAotOjEwMEIzMDAwMjQwMjAwMTM4Rjg2MDAyODI3QkRGRkUwQUZCMTAwMTQwOAotOjEwMEI0MDAwQUZCRjAwMThBRkIwMDAxMDkwQzMwMEM0MzBBNTAwRkZDNQotOjEwMEI1MDAwMzA2MjAwMjAxMDQwMDAwODAwODA4ODIxOENDQjAwQzA0QgotOjEwMEI2MDAwMjQwOUZGREYyNTZBMDAwMUFDQ0EwMEMwOTBDODAwQzQ5OAotOjEwMEI3MDAwMDEwOTM4MjRBMEM3MDBDNDE0QTAwMDQwM0MwQzgwMDAyOAotOjEwMEI4MDAwOEY4NDAwMjg5MDg3MDBDNDI0MThGRkJGMjQwNkZGRUYzRAotOjEwMEI5MDAwMzBFMzAwN0ZBMDgzMDBDNDk3OUYwMDQ4OEY4MjAwNEMwMQotOjEwMEJBMDAwOEY4RDAwMjgwM0UyQzgyM0E3OTkwMDQ4QTVBMDAwQUNCOAotOjEwMEJCMDAwOTFBRjAwQzQwMUY4NzAyNEExQUUwMEM0OEY4QzAwMjg0RQotOjEwMEJDMDAwQTE4MDAwQzc4RjhBMDAyOEE1NDAwMDcyQUQ0MDAwRENEQwotOjEwMEJEMDAwOTE0NTAwQzQwMEE2NTgyNEExNEIwMEM0OEY5MDAwMjQ2NgotOjEwMEJFMDAwOEY4NDAwNEM5Nzg2MDA0ODAyMDQyODIxMTBDMDAwMEYxMwotOjEwMEJGMDAwQUY4NTAwMjRBMzgwMDA0NDNDMDc4MDAwOEUyQzAwMDhCMQotOjEwMEMwMDAwOTRFRDAxMjA4RTJCMDAwNDAxOEQ1MDIxMDE0QjgwMjE5OQotOjEwMEMxMDAwMDIwNjIwMjMzMDg2RkZGRjMwQzgwMDBGMzkwOTAwMDE4QgotOjEwMEMyMDAwMzEzMTAwMDExNjIwMDAwOUEzODgwMDQ0OTM4NjAwMzQ2NgotOjEwMEMzMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMjdCRDAwMjBBNwotOjEwMEM0MDAwQUY4NTAwNTAwM0UwMDAwOEFGODYwMDRDMDBDODcwMjM1OQotOjEwMEM1MDAwOEZCRjAwMTg5Mzg2MDAzNDhGQjEwMDE0OEZCMDAwMTAzRQotOjEwMEM2MDAwMzRFRjBDMDAwMTBGMjgyMTI3QkQwMDIwQUNFRTAwODREQQotOjEwMEM3MDAwQUY4NTAwNTAwM0UwMDAwOEFGODYwMDRDMzU5MDAxODAzRQotOjEwMEM4MDAwMDIwMDI4MjEwRTAwMTg3MjI0MDYwMDgyOEY4NDAwMjg5QQotOjEwMEM5MDAwOTA4NjAwQzQzMEM1MDA0MDUwQTBGRkJBQTM4MDAwNTQyNQotOjEwMENBMDAwOEY4NTAwMzgzQzA2ODAwMDhDQ0QwMUI4MDVBMEZGRkU4MgotOjEwMENCMDAwOEY4OTAwNTgyNDA4NjA4MjI0MDcwMDAyQUUwOTAwMDBEMgotOjEwMENDMDAwQTYwODAwMDhBMjA3MDAwQjhDQTMwMDA4M0MwRTEwMDAyOQotOjEwMENEMDAwQUUwMzAwMTA4Q0EyMDAwQ0FFMDIwMDE0OENCRjAwMTRGNgotOjEwMENFMDAwQUUxRjAwMTg4Q0I5MDAxOEFFMTkwMDI0OENCODAwMjQ2RgotOjEwMENGMDAwQUUxODAwMjg4Q0FGMDAyOEFFMEYwMDJDQUNDRTAxQjg4NwotOjEwMEQwMDAwMEEwMDE5MzJBMzgwMDA1NDhGOEEwMDI4MjdCREZGRTAxMwotOjEwMEQxMDAwQUZCMTAwMTRBRkIwMDAxMDhGODgwMDRDQUZCRjAwMTgwNwotOjEwMEQyMDAwOTM4OTAwMkM5NTQyMDBBQzMwRDEwMEZGMDEwOTE4MkJBQgotOjEwMEQzMDAwMDA4MDgwMjEzMEFDMDBGRjMwNDdGRkZGMDAwMDU4MjFDOQotOjEwMEQ0MDAwMTQ2MDAwMDMzMTA2MDBGRjAxMjAzMDIxMDEwOTU4MjNGRgotOjEwMEQ1MDAwOTc4MzAwNDgwMDY4MjAyQjE0ODAwMDFCMDAwMDAwMDBDRgotOjEwMEQ2MDAwMTA2ODAwNDMyNDBBMDAwMTExOEEwMDQ4MzRFNzA4ODAxMwotOjEwMEQ3MDAwMzE2NUZGRkYwRTAwMTgxNDAyMDAyMDIxMEUwMDE4NTRFOAotOjEwMEQ4MDAwOEY4NDAwNTg4Rjg0MDAyODk0OEQwMDcwMjVBQzAwMDE1QQotOjEwMEQ5MDAwQTQ4QzAwNzA5NDhCMDA3MDNDMDYwODAwOENDNjMxODhDRgotOjEwMERBMDAwMzE2NzdGRkYxMEU2MDA0RjAwMDAwMDAwMDIwMDIwMjFBNQotOjEwMERCMDAwMDIyMDI4MjE4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTBCRgotOjEwMERDMDAwMEEwMDE5MUUyN0JEMDAyMDkxNDQwMEM0MjQwNkZGODA5QwotOjEwMEREMDAwMDA4Njg4MjVBMTUxMDBDNDk3ODQwMDQ4MzA4OEZGRkYxMQotOjEwMERFMDAwMTEwMDAwMUM5Mzg5MDAyQzhGOEUwMDI4MjQxOUVGRkYxRQotOjEwMERGMDAwMDA4QkY4MjM5NUQ4MDBBQzAxNjg2ODJCMzNFOTAwRkYxRAotOjEwMEUwMDAwMDMxOTc4MjRBNUNGMDBBQzUxQTAwMDJBMDEwMDU4MjE3NQotOjEwMEUxMDAwOEUwNTAwMjAyNDA4RkZGQjI0MDMwMDAxMDBBODEwMjRGNQotOjEwMEUyMDAwQUUwMjAwMjAxMTgzMDAyNTM0RTc4MDAwMDIwMDIwMjE1QgotOjEwMEUzMDAwMzE2NUZGRkYwRTAwMTgxNDAxMjAzMDIxOTc4QjAwNDgwOAotOjEwMEU0MDAwOEY4NzAwNENBNzgwMDA0ODAwRUI4MDIzQUY5MDAwNENCOAotOjEwMEU1MDAwOTM4OTAwMkM4RjhDMDAyODhGQkYwMDE4OEZCMTAwMTQ0RAotOjEwMEU2MDAwOEZCMDAwMTAyN0JEMDAyMDAzRTAwMDA4QTE4OTAwQzc1MwotOjEwMEU3MDAwOEUwODAwMjAyNDA5RkZGQjM0RTc4MDAwMDEwOTI4MjRBNAotOjEwMEU4MDAwQUUwNTAwMjAxNThBRkZCQTM0RTcwODgwMDIwMDIwMjE1MQotOjEwMEU5MDAwMEUwMDE3RTIzMTY1RkZGRjAyMDAyMDIxMDIyMDI4MjEwOQotOjEwMEVBMDAwOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDE5MUVGOAotOjEwMEVCMDAwMjdCRDAwMjAwQTAwMTlENTAwMDA0ODIxMDIwMDIwMjE4QQotOjEwMEVDMDAwMzE2NUZGRkYwRTAwMTdFMjAxMjAzMDIxOTc4QjAwNDhBQgotOjEwMEVEMDAwOEY4NzAwNENBNzgwMDA0ODAwRUI4MDIzMEEwMDE5RTVBQgotOjEwMEVFMDAwQUY5MDAwNEM5NDg5MDA3MDI0MEE4MDAwMDEyQTQwMjRBRAotOjEwMEVGMDAwQTQ4ODAwNzA5MDg1MDA3MDkwOTkwMDcwMzBBMjAwRkY2NwotOjEwMEYwMDAwMDAwMjE5QzIwMDAzRjgyNzAwMUZDMUMwMzMyRjAwN0Y2MQotOjEwMEYxMDAwMDFGODcwMjVBMDhFMDA3MDBBMDAxOUJEMDIwMDIwMjE4MgotOjEwMEYyMDAwOEY4ODAwMjgyNDAzMDAwMTkxMEEwMDc4OTEwNTAwQzdFQQotOjEwMEYzMDAwMjUwOTAwNzgzMTQ3MDAzRjI0RTZGRkUwMDBDMzE4MDQ4QwotOjEwMEY0MDAwMkNDMjAwMjAzMDY3MDAxOUEzODUwMDJDMTA0MDAwMUEyNQotOjEwMEY1MDAwQUY4OTAwMzgzQzBBODAwMDM1NEIwMDAyMjQwNTAwMDFBRgotOjEwMEY2MDAwMjQwNjAwMDExNEUwMDAxNjAwNkIxMDI0MDAwMDI4MjE2NAotOjEwMEY3MDAwMTQ0MDAwMEYzMDYzMDAyMDEwNjAwMDBGMjQwNTAwMDFCMgotOjEwMEY4MDAwOEQwNjAwNzQ4RDE5MDA3NDI0MDNGRjgwMDBDMzEwMjRBMwotOjEwMEY5MDAwMDAwMjc5NDAzMzM4MDA3RjAxRjg2ODI1M0MwRTEwMDBDQwotOjEwMEZBMDAwMDFBRTYwMjVBRDRDMDgzMDkxMjgwMDAxMzEwNjAwMDFFQQotOjEwMEZCMDAwMEEwMDE5OTMwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDA5MAotOjEwMEZDMDAwOEQwRjAwNzQ4RDBEMDA3NDI0MThGRjgwMDFGODcwMjRCQgotOjEwMEZEMDAwMDAwRTQxNDAzMUFDMDA3RjAxMEM1MDI1M0MwQjEwMDA0RAotOjEwMEZFMDAwMDE0QjM4MjUzQzA5ODAwMDBBMDAxOTkzQUQyNzA4MzBEMQotOjEwMEZGMDAwMjdCREZGRDhBRkIwMDAxMDhGOTAwMDM4QUZCNDAwMjBFRAotOjEwMTAwMDAwQUZCMTAwMTRBRkJGMDAyNEFGQjMwMDFDQUZCMjAwMThFMwotOjEwMTAxMDAwOEUwNTAwMTAzQzAyMDgwMDhDNDIzMUIwOEY4NjAwM0NFNwotOjEwMTAyMDAwMzBBNzNGRkYwMEUyMTgyQjhDRDIwMDE0MDA4MDg4MjFFQgotOjEwMTAzMDAwOENEMzAwMjAxMDYwMDAwNzAwMDBBMDIxOTBDQjAwMEQ5MQotOjEwMTA0MDAwMjQwQUZGODAwMTRCNDgyNDMxMjgwMEZGMTUwMDAwMENDMgotOjEwMTA1MDAwMDAwNTYzODIwMjIwMjAyMTI0MTEwMDBEQTM5MTAwNTQ3OQotOjEwMTA2MDAwOEZCRjAwMjQ4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMThGNAotOjEwMTA3MDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAxODk3MjdCRDAwMjgwOAotOjEwMTA4MDAwMzE4NTAwMDM1NEEwRkZGNDAyMjAyMDIxOTRDRjAwMUNERQotOjEwMTA5MDAwOEY4RTAwMjg4RTA3MDAyOEE1Q0YwMEQ4OENDRDAwMTA5OQotOjEwMTBBMDAwMDI0RDMwMjMxMEU2MDA1QzI0MDIwMDFGMEUwMDE4OTc0QQotOjEwMTBCMDAwQTM4MjAwNTQyNDFGRkZGRjEwNUYwMDRFMjQwNEZGRkY5MwotOjEwMTBDMDAwOEY4MzAwNDA4Rjg4MDAzMDAyNjM5ODIxOEQwOTAwMTBDMwotOjEwMTBEMDAwMDEyMzEwMjM4RjgzMDAyMEFEMDIwMDEwQUQxMzAwMjBFOAotOjEwMTBFMDAwOEM2NzAwNzQwMEYzMjAyQjE0ODAwMDYyMDIyMDIwMjEwMgotOjEwMTBGMDAwOEY4NjAwM0M4RTBDMDAyNDhDQzUwMDI0MTE4NTAwMDdDRgotOjEwMTEwMDAwMDIyMDIwMjEyNDBFMDAxQzBFMDAxODk3QTM4RTAwNTRFQwotOjEwMTExMDAwMjQwREZGRkYxMDREMDAzNzI0MDRGRkZGOEY4NDAwMzBBMwotOjEwMTEyMDAwOEM5ODAwMjQyNzBGMDAwMUFDOEYwMDI0MTI3MjAwNDQxOQotOjEwMTEzMDAwOEY5OTAwMjA4RjMyMDA3NDEyNTMwMDQxM0MwQTAwODBDNgotOjEwMTE0MDAwOEUwOTAwMDAwMTJBMTAyNDE0NDAwMDNBMDAwMDAwMDAxQgotOjEwMTE1MDAwOEUwNDAwMTQyNDEyRkZGRjEwOTIwMDA2MjQwQjAwMUJDMwotOjEwMTE2MDAwMDIyMDIwMjEwRTAwMTg5N0EzOEIwMDU0MTA1MjAwMjE1QQotOjEwMTE3MDAwMjQwNEZGRkY4RTAzMDAwMDNDMEMwMDAxMDA2QzI4MjRCNwotOjEwMTE4MDAwMTBBMDAwMTMzQzA2MDA4MDAwNjZBMDI0MTY4MDAwMDkxMQotOjEwMTE5MDAwMDIwMDI4MjEwMjIwMjAyMTI0MEUwMDFBMEUwMDE4OTc5OAotOjEwMTFBMDAwQTM4RTAwNTQyNDBERkZGRjEwNEQwMDEyMjQwNEZGRkZGNgotOjEwMTFCMDAwMDIwMDI4MjEwMjIwMjAyMTBFMDAxOEI3MjQwNjAwMDE3OQotOjEwMTFDMDAwMjQxMEZGRkYyNDA0RkZGRjEwNTAwMDBBMjQxNDAwMDEyNAotOjEwMTFEMDAwOEY4RjAwMzAwMjIwMjAyMTAyODAzMDIxOTVGMjAwMzREMAotOjEwMTFFMDAwMjQwNTAwMDEyNjU4MDAwMTBFMDAxOTkzQTVGODAwMzRDQgotOjEwMTFGMDAwMDAwMDIwMjE4RkJGMDAyNDhGQjQwMDIwOEZCMzAwMUM3QgotOjEwMTIwMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjEzMQotOjEwMTIxMDAwMDNFMDAwMDgyN0JEMDAyODhGODMwMDQwMDBFM0M4MjFCOQotOjEwMTIyMDAwMDI1OUMwMkIxMzAwRkZBODhGODgwMDMwMEEwMDFBN0NENwotOjEwMTIzMDAwMjQwMjAwMThBQzgwMDAyMDBBMDAxQUE2OEUwNDAwMTRCNAotOjEwMTI0MDAwOEUxRjAwMDAzQzA3MDA4MDAzRTc5ODI0MTY2MEZGRjkxQQotOjEwMTI1MDAwMjQwODAwMUEwMjIwMjAyMTBFMDAxODk3QTM4ODAwNTRBOQotOjEwMTI2MDAwMjQwM0ZGRkYxNDQzRkZCQTI0MDRGRkZGMEEwMDFBQ0YzMAotOjEwMTI3MDAwOEZCRjAwMjQyNDBCMDAxRDBFMDAxODk3QTM4QjAwNTQ3MQotOjEwMTI4MDAwMjQwQUZGRkYxNDRBRkY5QTI0MDRGRkZGMEEwMDFBQ0YyMgotOjEwMTI5MDAwOEZCRjAwMjQ4Rjg1MDAyODI3QkRGRkQ4QUZCMzAwMUM2NwotOjEwMTJBMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjA1NAotOjEwMTJCMDAwOTBBNzAwQzQ4RjkwMDAzODI0MTJGRkZGMzRFMjAwNDA1MgotOjEwMTJDMDAwOTIwNjAwMDBBMEEyMDBDNDhFMDMwMDEwMDA4MDk4MjFBNgotOjEwMTJEMDAwMTA3MjAwMDYzMEQxMDAzRjI0MDgwMDBEMEUwMDE4OTc1MAotOjEwMTJFMDAwQTM4ODAwNTQxMDUyMDAyNjI0MDZGRkZGOEY4QTAwMjg4RQotOjEwMTJGMDAwOEUwOTAwMTg4RDQ0MDBDMDExMjQwMDA3MjQwQzAwMEUzNAotOjEwMTMwMDAwMDI2MDIwMjEwRTAwMTg5N0EzOEMwMDU0MjQwQkZGRkZDRAotOjEwMTMxMDAwMTA0QjAwMUIyNDA2RkZGRjI0MDQwMDIwMTIyNDAwMDRBRAotOjEwMTMyMDAwOEY4RDAwMjg5MUFGMDBDNDM1RUUwMDIwQTFBRTAwQzQxRgotOjEwMTMzMDAwOEY4NTAwNDAxMEEwMDAxQTAwMDAwMDAwMTIyNDAwNEIwRQotOjEwMTM0MDAwOEY5ODAwMjg4RjkyRkVFQzI0MDZGRkZEOTcxMDAwNzAwNgotOjEwMTM1MDAwOTY1MTAwMEExMjMwMDAwQjhGQkYwMDIwM0MxRjA4MDA3RQotOjEwMTM2MDAwOEZGRjMxOEMwM0U1QzgyQjE3MjAwMDFFMDI2MDIwMjE1RgotOjEwMTM3MDAwMDAwMDI4MjEwRTAwMTk5MzI0MDYwMDAxMDAwMDMwMjFFRQotOjEwMTM4MDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTRFNAotOjEwMTM5MDAwOEZCMDAwMTAwMEMwMTAyMTAzRTAwMDA4MjdCRDAwMjgxNgotOjEwMTNBMDAwNTIyNDAwMkE4RTAzMDAxNDhGODQwMDI4OTQ4OTAwNzAzMAotOjEwMTNCMDAwMjUyODAwMDFBNDg4MDA3MDk0ODcwMDcwM0MwNTA4MDA2RgotOjEwMTNDMDAwOENBNTMxODgzMEUyN0ZGRjEwNDUwMDBFMDAwMDAwMDA0MAotOjEwMTNEMDAwMDI2MDIwMjEwRTAwMTkxRTI0MDUwMDAxMEEwMDFCMzFBNQotOjEwMTNFMDAwMDAwMDMwMjEyNDAyMDAyREEzODIwMDU0MEUwMDE4OTcyMwotOjEwMTNGMDAwMjQxM0ZGRkYxNDUzRkZFMTI0MDZGRkZGMEEwMDFCMzJGMgotOjEwMTQwMDAwOEZCRjAwMjA5NDk4MDA3MDI0MTk4MDAwMjQwNTAwMDFFQgotOjEwMTQxMDAwMDMxOTkwMjRBNDkyMDA3MDkwOTEwMDcwOTA4RDAwNzAzOAotOjEwMTQyMDAwMzIzMDAwRkYwMDEwNzlDMjAwMEY3MDI3MDAwRTYxQzAzQgotOjEwMTQzMDAwMzFBQjAwN0YwMTZDNTAyNUEwOEEwMDcwMEUwMDE5MUU5MAotOjEwMTQ0MDAwMDI2MDIwMjEwQTAwMUIzMTAwMDAzMDIxMjQwNkZGRkYyQQotOjEwMTQ1MDAwMTQ2NkZGRDY4Rjg0MDAyODAyNjAyMDIxMEUwMDE5MUUxQQotOjEwMTQ2MDAwMjQwNTAwMDEwQTAwMUIzMTAwMDAzMDIxMDI2MDIwMjEwOAotOjEwMTQ3MDAwMEEwMDFCNEIyNDAyMDAwQThGODgwMDI4MjdCREZGRThDMgotOjEwMTQ4MDAwQUZCMDAwMTBBRkJGMDAxNDkxMEEwMEM0OEY4NzAwMzhCRQotOjEwMTQ5MDAwMDA4MDgwMjEzNTQ5MDA0MDhDRTYwMDEwQTEwOTAwQzQ3RAotOjEwMTRBMDAwM0MwMjA4MDA4QzQyMzFCMDMwQzUzRkZGMDBBMjE4MkIyRgotOjEwMTRCMDAwMTA2MDAwMDc4Rjg1MDAzQzI0MERGRjgwOTBBRTAwMEQ2QQotOjEwMTRDMDAwMDFBRTYwMjQzMThCMDBGRjE1NjAwMDA4MDAwNkMzODI2NgotOjEwMTREMDAwMDIwMDIwMjEyNDAzMDAwRDhGQkYwMDE0OEZCMDAwMTBFNAotOjEwMTRFMDAwMjdCRDAwMTgwQTAwMTg5N0EzODMwMDU0MzMwNjAwMDM5MQotOjEwMTRGMDAwMjQwRjAwMDI1NENGRkZGNzAyMDAyMDIxOTRBMjAwMUMwOQotOjEwMTUwMDAwOEY4NTAwMjgyNDE5MDAyM0E0QTIwMEQ4OENFODAwMDBBRAotOjEwMTUxMDAwMDAwODFFMDIzMDdGMDAzRjEzRjkwMDM1M0MwQTAwODNBQgotOjEwMTUyMDAwOENFODAwMTg4Q0E2MDBDMDExMDYwMDA4MDAwMDAwMDAxRQotOjEwMTUzMDAwMjQwNTAwMEUwRTAwMTg5N0EzODUwMDU0MjQwN0ZGRkYxMgotOjEwMTU0MDAwMTA0NzAwMTgyNDA0RkZGRjhGODUwMDI4OTBBOTAwQzRDRAotOjEwMTU1MDAwMzUyNDAwMjBBMEE0MDBDNDhGOEMwMDMwOTE4RTAwMEQ5MwotOjEwMTU2MDAwMzFDRDAwN0ZBMThEMDAwRDhGODMwMDQwMTA2MDAwMUNFNQotOjEwMTU3MDAwMDIwMDIwMjE4Rjg0MDAzQzhDOTgwMDEwMDMwMzc4MkJGQwotOjEwMTU4MDAwMTFFMDAwMEQyNDE5MDAxODAyMDAyMDIxQTM5OTAwNTQzNQotOjEwMTU5MDAwMEUwMDE4OTcyNDEwRkZGRjEwNTAwMDAyMjQwNEZGRkZENAotOjEwMTVBMDAwMDAwMDIwMjE4RkJGMDAxNDhGQjAwMDEwMDA4MDEwMjE5OAotOjEwMTVCMDAwMDNFMDAwMDgyN0JEMDAxODhDODYwMDEwOEY5RjAwMzBDNAotOjEwMTVDMDAwMDIwMDIwMjEwMEMzMTAyM0FGRTIwMDEwMjQwNTAwMDExNwotOjEwMTVEMDAwMEUwMDE5OTMyNDA2MDAwMTBBMDAxQkJBMDAwMDIwMjEwNgotOjEwMTVFMDAwMEUwMDE5MUUyNDA1MDAwMTBBMDAxQkJBMDAwMDIwMjE2QwotOjEwMTVGMDAwMDEwQTU4MjQxNTZBRkZEOThGOEMwMDMwQTBBNjAwRUM5MAotOjEwMTYwMDAwMEEwMDFCQTdBMzg2MDA0NjI3QkRGRkQ4QUZCMDAwMTA3NQotOjEwMTYxMDAwOEY5MDAwMzhBRkIyMDAxOEFGQkYwMDIwQUZCMzAwMUNFRQotOjEwMTYyMDAwQUZCMTAwMTQ4RTExMDAxMDNDMDMwODAwOEM2MzMxQjA4MAotOjEwMTYzMDAwMzIyNTNGRkYwMEEzMTAyQjEwNDAwMDA4MDA4MDkwMjFBRQotOjEwMTY0MDAwOEY4NjAwM0MyNDA5RkY4MDkwQ0EwMDBEMDEyQTQwMjRBNwotOjEwMTY1MDAwMzEwNzAwRkYxNEUwMDAwQjAwMTE2QjgyMDI0MDIwMjFEMwotOjEwMTY2MDAwMjQxMjAwMERBMzkyMDA1NDhGQkYwMDIwOEZCMzAwMUNFMgotOjEwMTY3MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDE4OTdCNQotOjEwMTY4MDAwMjdCRDAwMjgzMUFDMDAwMzI0MEIwMDAxNTU4QkZGRjQ2QgotOjEwMTY5MDAwMDI0MDIwMjE5MENGMDAwRDMxRUUwMDA4MTFDMDAwNjAwMwotOjEwMTZBMDAwOEY5MzAwNDAxNjYwMDAwOTI0MDIwMDI3OEUxOTAwMEM1OQotOjEwMTZCMDAwOENEODAwMjAxNzM4MDAwNTI0MDIwMDIwOEUwMjAwMDg3NAotOjEwMTZDMDAwOENERjAwMjQxMDVGMDA0MDI0MDIwMDIwMEUwMDE4OTdEOQotOjEwMTZEMDAwQTM4MjAwNTQyNDA2RkZGRjEwNDYwMDMzMjQwNEZGRkZCQQotOjEwMTZFMDAwOEY5OTAwMzAyNDBBRkZGNzNDMTM4MDBFOTMyOTAwMEREOAotOjEwMTZGMDAwMjQwNEZGODAzQzBEODAwMDAxMkFGODI0QTMzRjAwMEQ0NAotOjEwMTcwMDAwOEY5OTAwMjAzQzA4MDgwMDhEMDgzMUFDOEY4MzAwNTg2OQotOjEwMTcxMDAwOTcyNzAwNzg4RjlGMDAzMDAxMDMxMDIxMzBFNTdGRkY2RAotOjEwMTcyMDAwMDAwNTMwNDAwMDQ2NzgyMTMxRjgwMDdGMDMxMzYwMjEyNgotOjEwMTczMDAwMDFFNDcwMjRBREFFMDAyQ0E1OTEwMDAwOEZFQjAwMjhEMQotOjEwMTc0MDAwMjU2QTAwMDFBRkVBMDAyODhGRTMwMDJDOEUwOTAwMkNFNwotOjEwMTc1MDAwMDA2OTQwMjFBRkU4MDAyQzhFMDcwMDJDQUZFNzAwMzA3NQotOjEwMTc2MDAwOEUwNTAwMTRBRkU1MDAzNDk3RTYwMDNBMjRDMjAwMDE2QwotOjEwMTc3MDAwQTdFMjAwM0E5NzMzMDA3ODNDMTAwODAwOEUxMDMxQjA5MQotOjEwMTc4MDAwMjY2MzAwMDEzMDcxN0ZGRjEyMzAwMDI3MDA2MDMwMjE5NgotOjEwMTc5MDAwOEY4RjAwMjAwMjQwMjAyMTI0MDUwMDAxMEUwMDE5MUUxOQotOjEwMTdBMDAwQTVFNjAwNzgwMDAwMjAyMThGQkYwMDIwOEZCMzAwMUMyOQotOjEwMTdCMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDA4MDEwMjE3QwotOjEwMTdDMDAwMDNFMDAwMDgyN0JEMDAyODhFMDUwMDE0MjQxM0ZGRkY0NgotOjEwMTdEMDAwMTBCMzAwMUQ4RjgzMDAyODhFMDgwMDE4OEM2NzAwQzA4RQotOjEwMTdFMDAwMTUwNzAwMDkyNDAyMDAwRThFMEEwMDI0OENDOTAwMjg2NwotOjEwMTdGMDAwMTU0OTAwMDUyNDAyMDAyMThFMDcwMDI4OENDQjAwMkNGRgotOjEwMTgwMDAwMTBFQjAwMTMyNDAyMDAxRjBFMDAxODk3QTM4MjAwNTQ0RgotOjEwMTgxMDAwMTQ1M0ZGQjMyNDA0RkZGRjBBMDAxQzNDOEZCRjAwMjBCOQotOjEwMTgyMDAwMEEwMDFDMDQyNDAyMDAyNDI0MEU4MDAwMDA2RTY4MjQ5OAotOjEwMTgzMDAwMzFBQ0ZGRkYwMDBDNUJDMjMxNzEwMEZGMDAxMTgwMjc0QgotOjEwMTg0MDAwMEEwMDFDMzUwMDEwMzNDMDBBMDAxQzUzMjQwMjAwMjU3NgotOjEwMTg1MDAwOEUwNTAwMkMxMEEwRkZFQzI0MDIwMDIzOEY4RTAwMjBBOAotOjEwMTg2MDAwOERDRDAwNzQwMUE1NjAyQjE1ODBGRkU3MjQwMjAwMjZCMgotOjEwMTg3MDAwOENDRjAwMTQwMEE3QzAyMTAxRjgyMDJCMTA4MEZGOTkwNQotOjEwMTg4MDAwOEY5OTAwMzAwMjQwMjAyMTBBMDAxQzUzMjQwMjAwMjJCQwotOjEwMTg5MDAwMjdCREZGRTBBRkIwMDAxMDhGOTAwMDM4QUZCMTAwMTQ0QgotOjEwMThBMDAwQUZCRjAwMTg4RTA1MDAxMDNDMDMwODAwOEM2MzMxQjBGOAotOjEwMThCMDAwMDA4MDg4MjEzMEE0M0ZGRjAwODMxMDJCMTA0MDAwMDdEOAotOjEwMThDMDAwOEY4NjAwM0MyNDA5RkY4MDkwQ0EwMDBEMDEyQTQwMjQyNQotOjEwMThEMDAwMzEwNzAwRkYxNEUwMDAwOThGOEIwMDQwMjQxMDAwMEQzOQotOjEwMThFMDAwMDIyMDIwMjFBMzkwMDA1NDhGQkYwMDE4OEZCMTAwMTQ1NAotOjEwMThGMDAwOEZCMDAwMTAwQTAwMTg5NzI3QkQwMDIwMTE2MDAwMDg2MwotOjEwMTkwMDAwMDAwNUMzODI4RjhGMDAyODhGOEVGRUVDMjQwN0ZGRkQxOQotOjEwMTkxMDAwOTVFQzAwNzA5NUNEMDAwQTExQUMwMDM4OEZCRjAwMTgwRgotOjEwMTkyMDAwMzMwNTAwMDMxNEEwMDAxMDAwMDAwMDAwOTIxOTAwMDIwQgotOjEwMTkzMDAwMTMyMDAwNDEwMDAwMDAwMDhFMDYwMDI0NTBDMDAwMEY1QwotOjEwMTk0MDAwOTIwNDAwMDMwMjIwMjAyMTI0MDIwMDBGMEUwMDE4OTdBOQotOjEwMTk1MDAwQTM4MjAwNTQyNDA4RkZGRjE0NDgwMDA3MjQwN0ZGRkY1OAotOjEwMTk2MDAwMEEwMDFDRDA4RkJGMDAxODkwQzMwMDBEMzA2NDAwMDgxRgotOjEwMTk3MDAwMTA4MDAwMzcwMjIwMjAyMTkyMDQwMDAzMjQwNzAwMDI3NwotOjEwMTk4MDAwMzA4OTAwRkYxNTI3MDAwNTMwOEYwMEZGOEY4QTAwNDA0NwotOjEwMTk5MDAwMTE0MDAwMzEyNDBDMDAyQzMwOEYwMEZGMzlFNTAwMTA3RAotOjEwMTlBMDAwMkNBRDAwMDEyREVFMDAwMTAyMDAyODIxMDFDRDMwMjVEMwotOjEwMTlCMDAwMEUwMDE4QjcwMjIwMjAyMTI0MTBGRkZGMTA1MDAwMEU0NwotOjEwMTlDMDAwMjQwN0ZGRkY4RjgzMDA0MDEwNjAwMDE3MDIyMDIwMjFCMgotOjEwMTlEMDAwM0MxOTA4MDA4RjM5MzE4QzAzMjNDMDJCNTcwMDAwMENCMQotOjEwMTlFMDAwMjQxMTAwMkQwMjIwMjAyMTAwMDAyODIxMEUwMDE5OTMyRgotOjEwMTlGMDAwMjQwNjAwMDEwMDAwMzgyMThGQkYwMDE4OEZCMTAwMTRBOQotOjEwMUEwMDAwOEZCMDAwMTAwMEUwMTAyMTAzRTAwMDA4MjdCRDAwMjA4NwotOjEwMUExMDAwMEUwMDE4OTdBMzkxMDA1NDE0NTBGRkY2MjQwN0ZGRkZGRgotOjEwMUEyMDAwMEEwMDFDRDA4RkJGMDAxODBFMDAxOTFFMjQwNTAwMDFFQgotOjEwMUEzMDAwMEEwMDFDQ0YwMDAwMzgyMThDREYwMDI0OEUwMjAwMjQxNQotOjEwMUE0MDAwNTQ1RkZGQzEwMjIwMjAyMTBBMDAxQ0IwOTIwNDAwMDM1MQotOjEwMUE1MDAwMEEwMDFDQTQyNDAyMDAxMDAyMjAyMDIxMEUwMDE4OTc2NgotOjEwMUE2MDAwQTM4QzAwNTQyNDBCRkZGRjEwNEJGRkUzMjQwN0ZGRkY2MAotOjEwMUE3MDAwMEEwMDFDQjc5MjA0MDAwMzMwQTUwMEZGMjQwNjAwMDFGMQotOjEwMUE4MDAwMjRBOTAwMDEwMEM5MTAyQjEwNDAwMDBDMDAwMDQwMjFDNwotOjEwMUE5MDAwMjQwQTAwMDEwMEE2MTgyMzMwOEIwMDAxMjRDNjAwMDE4RgotOjEwMUFBMDAwMDA2QTM4MDQwMDA0MjA0MjExNjAwMDAyMDBDOTE4MkJBQgotOjEwMUFCMDAwMDEwNzQwMjUxNDYwRkZGODAwQTYxODIzMDNFMDAwMDg4MgotOjEwMUFDMDAwMDEwMDEwMjEyN0JERkZEOEFGQjAwMDE4OEY5MDAwMzg1QgotOjEwMUFEMDAwQUZCMTAwMUNBRkJGMDAyMDI0MDNGRkZGMjQxMTAwMkY3MwotOjEwMUFFMDAwQUZBMzAwMTA5MjA2MDAwMDI0MDUwMDA4MjYxMDAwMDE5NAotOjEwMUFGMDAwMDA2NjIwMjYwRTAwMUNFRjMwODQwMEZGMDAwMjFFMDA0RQotOjEwMUIwMDAwM0MwMjFFREMzNDQ2NkY0MTBBMDAxRDE3MDAwMDEwMjEwNAotOjEwMUIxMDAwMTBBMDAwMDkwMDgwMTgyMTI0NDUwMDAxMzBBMkZGRkYxOQotOjEwMUIyMDAwMkM0NTAwMDgwNDYxRkZGQTAwMDMyMDQwMDA4NjIwMjZBRgotOjEwMUIzMDAwMTRBMEZGRjkwMDgwMTgyMTBFMDAxQ0VGMjQwNTAwMjBERQotOjEwMUI0MDAwOEZBMzAwMTAyNjI5RkZGRjMxMzEwMEZGMDAwMzQyMDI1RQotOjEwMUI1MDAwMjQwNzAwRkYxNjI3RkZFMjAxMDIxODI2MDAwMzUwMjc4MgotOjEwMUI2MDAwQUZBQTAwMTRBRkFBMDAxMDAwMDAzMDIxMjdBODAwMTA2RgotOjEwMUI3MDAwMjdBNzAwMTQwMEU2NzgyMzkxRUQwMDAzMjRDRTAwMDE4RQotOjEwMUI4MDAwMDBDODYwMjEzMUM2MDBGRjJDQ0IwMDA0MTU2MEZGRjlBRQotOjEwMUI5MDAwQTE4RDAwMDA4RkEyMDAxMDhGQkYwMDIwOEZCMTAwMUMwQwotOjEwMUJBMDAwOEZCMDAwMTgwM0UwMDAwODI3QkQwMDI4OTM4MzAwMzQ5RAotOjEwMUJCMDAwMjdCREZGRTAyNDAyMDAzNEFGQjEwMDE0QUZCMDAwMTAyNQotOjEwMUJDMDAwQUZCRjAwMUNBRkIyMDAxODAwODA4ODIxMTA2MjAwNjIxNQotOjEwMUJEMDAwMDBBMDgwMjE5MjA0MDAwNDE0ODAwMDQ1OEY4ODAwMjgxMgotOjEwMUJFMDAwQTM4MDAwMkM4RTA1MDAwNDhEMDYwMEM4M0MwNzAwRkY3MgotOjEwMUJGMDAwMzRFM0ZGRkYwMEEzMjgyNDAwQzUxMDJCMTQ0MDAwNEQ0MAotOjEwMUMwMDAwQUY4NTAwNDA5NzhBMDA0ODhGODcwMDRDMDE0NzEwMjMxQQotOjEwMUMxMDAwMTBBMDAwMzJBNzgyMDA0ODhGOTgwMDIwMzA0Q0ZGRkZCMAotOjEwMUMyMDAwOTMxMjAwN0MwMDEyNzg4MjMxRjEwMDAxMDAxMTcwODA2MwotOjEwMUMzMDAwMDFDNTY4MjEwMThENTgyQjExNjAwMDYxOEY4NjAwMjgzNQotOjEwMUM0MDAwOEY4OTAwMjQ4Rjg0MDA1MDEwODkwMDVFM0MwMjNGMDE4MAotOjEwMUM1MDAwOEUxRjAwMDAzQzEwMjUwMDAzRTJDODI0MTczMDAwN0FENAotOjEwMUM2MDAwOEY4NDAwMzg4Rjg3MDAzODhGODYwMDI4OENFMzAwMDAyRgotOjEwMUM3MDAwQUNDMzAwNzg4Q0U1MDAxMEFDQzUwMDg4OEY4NzAwNENBMQotOjEwMUM4MDAwOEY4NTAwNDA5MzhEMDAyQzMwQUUwMDAzMDAwRTQwMjM2MgotOjEwMUM5MDAwMzEwQTAwMDMwMTRENDAyMUEzODgwMDJDOTRDQjAwQUNGNQotOjEwMUNBMDAwMDEyNzYwMjFBRjhDMDAyNDM1NjkxMDAwQTRDOTAwQUM2NQotOjEwMUNCMDAwMTYyMDAwNTEwMTQ1MjAyMUFGODQwMDRDMDAwMDIwMjE1NgotOjEwMUNDMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBBRQotOjEwMUNEMDAwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwOEY4NDAwMjQyRAotOjEwMUNFMDAwQUY4MDAwNEMwMDg3MzAyMTBBMDAxRDgwQUY4NjAwMjRBMQotOjEwMUNGMDAwMjQxRjAwMENBMzlGMDA1NDBFMDAxODk3MDIyMDIwMjFERgotOjEwMUQwMDAwMjQxOUZGRkYxMDU5RkZFRTI0MDRGRkZGOEY4ODAwMjhERAotOjEwMUQxMDAwQTM4MDAwMkM4RTA1MDAwNDhEMDYwMEM4M0MwNzAwRkY0MAotOjEwMUQyMDAwMzRFM0ZGRkYwMEEzMjgyNDAwQzUxMDJCMTA0MEZGQjVBQgotOjEwMUQzMDAwQUY4NTAwNDAwMjIwMjAyMTI0MDkwMDE5QTM4OTAwNTQwNgotOjEwMUQ0MDAwMEUwMDE4OTcyNDExRkZGRjEwNTFGRkREMjQwNEZGRkY0MAotOjEwMUQ1MDAwMEEwMDFENTI4Rjg1MDA0MDhGODQwMDI4OEY4NzAwMzgyRAotOjEwMUQ2MDAwOENGMjAwMzA5MDg2MDBDNDMwQzUwMDEwMTRBMDAwMTAyMgotOjEwMUQ3MDAwOEY4MzAwNEMyQzY4MDAwNTE1MDAwMDI4MDAwMDAwMDAyRgotOjEwMUQ4MDAwOTA4QTAwQzQyNDZCRkZGQzMxNDkwMDEwMTUyMDAwMDgyNAotOjEwMUQ5MDAwMzE2NDAwRkY4RjhEMDA1MDhGOEMwMDI0MTFBQzAwMDQ0MwotOjEwMURBMDAwMzg4RjAwMDEzMUVFMDAwMTE1QzAwMDJGMDAwMDAwMDA0NwotOjEwMURCMDAwMEUwMDFEMDIwMDAwMDAwMDBBMDAxREQ5MDAwMDAwMDBGNgotOjEwMURDMDAwOEY4OTAwMjQ5MzhEMDAyQzMwQUUwMDAzMDAwRTQwMjMzOQotOjEwMUREMDAwMzEwQTAwMDMwMTRENDAyMUEzODgwMDJDOTRDQjAwQUNCNAotOjEwMURFMDAwMDEyNzYwMjFBRjhDMDAyNDM1NjkxMDAwQTRDOTAwQUMyNAotOjEwMURGMDAwMTIyMEZGQjEwMTQ1MjAyMTI1MTgwMDA0QTM5ODAwMkNEMgotOjEwMUUwMDAwOTRDRjAwQUMyNDkyMDAwNEFGOTIwMDRDMzVGMTIwMDAzNgotOjEwMUUxMDAwQTREMTAwQUMwQTAwMUQ4MTAwMDAyMDIxOEM4MjAwRENDRQotOjEwMUUyMDAwMTI0MkZGNkMwMjIwMjAyMTI0MTgwMDA1QTM5ODAwNTRDMAotOjEwMUUzMDAwMEUwMDE4OTcyNDEyRkZGRjE0NTJGRjY2MjQwNEZGRkZDMAotOjEwMUU0MDAwMEEwMDFEODI4RkJGMDAxQzMwRTUwMEZGMEUwMDE3OUVBOAotOjEwMUU1MDAwMDAwMDMwMjE4Rjg2MDAyODhGODcwMDRDOEY4OTAwMjQ1NgotOjEwMUU2MDAwMEEwMDFENzI4Rjg1MDA0MDBFMDAxN0M5MDAwMDAwMDA5NwotOjEwMUU3MDAwMEEwMDFERDkwMDAwMDAwMDkzODMwMDQ2MjdCREZGRTA0MwotOjEwMUU4MDAwMjQwMjAwMDJBRkIyMDAxOEFGQjEwMDE0QUZCRjAwMUNCMwotOjEwMUU5MDAwMDA4MDg4MjFBRkIwMDAxMDAwMDA5MDIxMTA2MjAwNTUzMgotOjEwMUVBMDAwMjQwNEZGRkQ5NzgzMDA0ODhGODUwMDRDMzA2NkZGRkZCOAotOjEwMUVCMDAwMDBDNTIwMkIxNDgwMDA1QjkzODcwMDM0M0MwODgwMDAxMQotOjEwMUVDMDAwOTUwNDAxMjAxMEU1MDA1MjhGOEEwMDI0OEY4NDAwNTA3MQotOjEwMUVEMDAwMzBBNTAwRkYwRTAwMTc5RTI0MDYwMDAxOEY5RjAwNThCQQotOjEwMUVFMDAwM0MwNTgwMDAzQzE5NDA4MDI3RUQwMTc4MzFCMDAwNzgzNgotOjEwMUVGMDAwMjQwRUZGODAwMjE5NTgyNTM0QUYwOTAwMzFCODAwMDdCRAotOjEwMUYwMDAwMDFBRTYwMjRBQ0FDMDgwMDAzMEY4MDIxQUNBQjA4MTAxQwotOjEwMUYxMDAwMDIyMDIwMjEwMjAwMjgyMTBFMDAxRDNDQUY5MDAwMzgzNQotOjEwMUYyMDAwMjQwM0ZGRkYxMDQzMDAzMzI0MDRGRkZGOEUwQzAwMTAzNgotOjEwMUYzMDAwM0MwNzA4MDA4Q0U3MzFCMDkyMDYwMDAwMzE4NDNGRkY3NwotOjEwMUY0MDAwMDA4NzEwMkIxMDQwMDAyMzMwQ0QwMDNGOEY5ODAwNThBMQotOjEwMUY1MDAwMDAwNDcxODAzQzA0MDgwMDhDODQzMUE4MjQwOUZGODBBRgotOjEwMUY2MDAwOTM5MDAwNDUwMDk4NDAyMTAxMEUyMDIxMDA4OTcwMjRBMwotOjEwMUY3MDAwMDAwRTUxNDAzQzA5ODAwMDMwOTkwMDdGM0MwRjAwODBFQQotOjEwMUY4MDAwOEY4ODAwMjgzNTI1MDk0MDM1RTIwMDAxMDE1OTM4MjVBMAotOjEwMUY5MDAwMzA4QjAwNzgzMDg2MDAwNzNDMDMxMDAwM0MxRjgwMEMxQgotOjEwMUZBMDAwMDBDNUMwMjEwMTYyNTgyNTAwRTM1MDI1MDMzRjc4MjE3OAotOjEwMUZCMDAwMzYwNTAwMDFBRDJFMDgwNEFGOTgwMDNDQUQyQjA4MTQ4NwotOjEwMUZDMDAwQUY4RjAwMzBBRDJFMDAyOEFEMDQwMDc0QUQyQTA4MzA2QwotOjEwMUZEMDAwQTM4NTAwNDU5MzgzMDA0NjI0MTAwMDAzNTA3MDAwMjcxQQotOjEwMUZFMDAwMjVBM0ZGRTAyNDBDMDAwMTEwNkMwMDFDMjQwNjAwMjMzNAotOjEwMUZGMDAwMDI0MDIwMjE4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ0NwotOjEwMjAwMDAwOEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjBFMQotOjEwMjAxMDAwMzE0OTAwMDM1NTIwRkZBRThGODQwMDUwMEEwMDFFMTU4MQotOjEwMjAyMDAwOEY5MDAwNTA4Rjg0MDA1MDMwNjUwMEZGMEUwMDE3OUU4NwotOjEwMjAzMDAwMjQwNjAwMDE5MzhCMDAzNDI0MDUwMDM0MTE2NTAwMTgzOAotOjEwMjA0MDAwOTc4MzAwNDg4Rjg1MDA0QzMwNjJGRkZGMDBBMjU4MjMyMQotOjEwMjA1MDAwQUY4QjAwNEMwQTAwMUU0REE3ODAwMDQ4MTFBNjAwMzcyOAotOjEwMjA2MDAwMDAwMDAwMDAwMjIwMjAyMTI0MTEwMDBCMEUwMDE4OTcxMAotOjEwMjA3MDAwQTM5MTAwNTQwQTAwMUU0RDAwNDA5MDIxMkM3MjAwMjBCNAotOjEwMjA4MDAwMTI0MEZGRjgwMDAzRjg4MDNDMDcwODAxMjRFNzgxM0M3OAotOjEwMjA5MDAwMDNFN0M4MjE4RjJEMDAwMDAxQTAwMDA4MDAwMDAwMDAwOAotOjEwMjBBMDAwOEY4NTAwNEMyQ0EyMDAwNTU0NDAwMDFEQTc4MDAwNDhERAotOjEwMjBCMDAwOTc4QTAwNDgzMTQ4RkZGRjAwQTg0ODIzMkQyRjAwMDVDQwotOjEwMjBDMDAwMTFFMDAwMDMzMTQ0MDBGRjI0QUVGRkZDMzFDNDAwRkZFNwotOjEwMjBEMDAwOEY5MDAwNTA4Rjk4MDAyNDEyMTgwMDA0Mzg5OTAwMDE0NgotOjEwMjBFMDAwMzMyRDAwMDExNUEwMDAyOTAwMDAwMDAwOEY5MTAwMjg2OQotOjEwMjBGMDAwOTIyNTAwQzQzNEEzMDAxMEEyMjMwMEM0OTc4MzAwNDg5MwotOjEwMjEwMDAwOEY4NTAwNEM4Rjg0MDAyODMwNjJGRkZGMDBBMjU4MjM4NwotOjEwMjExMDAwQUM4MDAwRENBNzgwMDA0ODBBMDAxRTREQUY4QjAwNEM0RAotOjEwMjEyMDAwMzA2MkZGRkYwMEEyNTgyMzBBMDAxRTREQUY4QjAwNEMwNwotOjEwMjEzMDAwMjQwM0ZGRkYxMTgzMDAwNTAwMDAwMDAwMEUwMDFCNkY0OQotOjEwMjE0MDAwMDIyMDIwMjEwQTAwMUU0RDAwNDA5MDIxMEUwMDFBRjZBOAotOjEwMjE1MDAwMDIyMDIwMjEwQTAwMUU0RDAwNDA5MDIxMEUwMDFCRDNCQQotOjEwMjE2MDAwMDIyMDIwMjEwQTAwMUU0RDAwNDA5MDIxMEUwMDFBNEQzMQotOjEwMjE3MDAwMDIyMDIwMjEwQTAwMUU0RDAwNDA5MDIxMEUwMDFDNzVGNwotOjEwMjE4MDAwMDIyMDIwMjEwQTAwMUU0RDAwNDA5MDIxMEUwMDE3Qzk5OAotOjEwMjE5MDAwMDAwMDAwMDA5NzgzMDA0ODhGODUwMDRDMzA2Q0ZGRkZFMwotOjEwMjFBMDAwMDBBQzM4MjMyQ0ZGMDAwNTUzRTBGRkE4MzA2MkZGRkY4RQotOjEwMjFCMDAwOEY4NjAwMjhBNzgwMDA0OEFDQzIwMERDMzA2MkZGRkY5OQotOjEwMjFDMDAwMDBBMjU4MjMwQTAwMUU0REFGOEIwMDRDMjdCREZGRDA0NAotOjEwMjFEMDAwQUZCMjAwMThBRkIwMDAxMEFGQkYwMDI4QUZCNTAwMjRGOQotOjEwMjFFMDAwQUZCNDAwMjBBRkIzMDAxQ0FGQjEwMDE0M0MwQzgwMDBCMgotOjEwMjFGMDAwOEQ4ODAxMjgyNDBGRkY4MDNDMDc4MDBBMjUxMDAxMDBFQwotOjEwMjIwMDAwMjUwQjAwODAwMjBGNjgyNDMyMDUwMDdGMDE2RjcwMjRDNwotOjEwMjIxMDAwQUQ4RTAwOTAwMEE3MjgyMUFEOEQwMDI0OTBBNzAwRUM4MgotOjEwMjIyMDAwMzE2OTAwN0YzQzBBODAwNDAxMkExODIxQTM4NzAwNDZGNwotOjEwMjIzMDAwOTA2NjAwN0MwMDgwOTAyMUFGODMwMDIwMzBDMjAwMDJCNQotOjEwMjI0MDAwQUY4ODAwNThBRjg1MDAyODAwQTAxODIxMTQ0MDAwMDI3NAotOjEwMjI1MDAwMjQwNDAwMzQyNDA0MDAzMEEzODQwMDM0OEM2NjAwQ0NCMQotOjEwMjI2MDAwMzBGMTAwRkYyNDA0MDAwNEFGODYwMDRDMTIyNDAwMDQ2NwotOjEwMjI3MDAwQTM4MDAwNTQ4RTUzMDAwNDE2NjAwMDFEM0MwODgwMDBBQgotOjEwMjI4MDAwOTM4NzAwNDUzMEYyMDAwMTEyNDAwMDBGOEZCRjAwMjhGNQotOjEwMjI5MDAwOENCODAwNzQ4Q0E0MDA3NDI0MTlGRjgwMDMxOTg4MjQ1RQotOjEwMjJBMDAwMDAxMTcxNDAzMDhGMDA3RjAxQ0Y2MDI1M0MwRDIwMDA3MAotOjEwMjJCMDAwMDE4RDU4MjUzMEY1MDBGRTNDMEE4MDAwQUQ0QjA4MzBGQQotOjEwMjJDMDAwQTM5NTAwNDU4RkJGMDAyODhGQjUwMDI0OEZCNDAwMjA1MAotOjEwMjJEMDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBBNAotOjEwMjJFMDAwMjQwMjAwMDEyN0JEMDAzMDAzRTAwMDA4QUNBNjAwQ0NBQQotOjEwMjJGMDAwOEU1OTAwMDg5NTFGMDEyMDhFNDYwMDEwMDMzRkMwMjExMwotOjEwMjMwMDAwMzMwN0ZGRkYzMEY1MDAwRjMyQjQwMDAxQUY4NjAwMjQyMQotOjEwMjMxMDAwMTY4MDAwM0JBMzk1MDA0NDM1MDYwQzAwMDJBNjEwMjE1MAotOjEwMjMyMDAwMDBGNTE4MjNBRDAzMDA4NEFGODIwMDUwOEU0OTAwMDRFRAotOjEwMjMzMDAwMzEyOEZGRkYxMTAwMDAyQkE3ODkwMDQ4MjQxMEZGODBERgotOjEwMjM0MDAwM0MxNTgwMDAzQzE0MjAwMDBBMDAxRjNCMjQxM0ZGRkVCNAotOjEwMjM1MDAwOTBBRTAwQzQwMjBFNjgyNDMxQUMwMEZGMTU4MDAwMkE0NAotOjEwMjM2MDAwMDI0MDIwMjE5Mzg0MDA0NTk3ODYwMDQ4MzA4RjAwMDE2OQotOjEwMjM3MDAwMTFFMDAwMEIwMjY0MjgyNDhGODkwMDI4OEQyMzAwNzQ0QgotOjEwMjM4MDAwOEQyODAwNzRBMzg1MDA0NTAwNzAxMDI0MDAwMkM5NDAwOAotOjEwMjM5MDAwMzExRjAwN0YwMzNGQzAyNTAzMTQ4ODI1QUVCMTA4MzBFQwotOjEwMjNBMDAwMTBDMDAwMTA4Rjg1MDAyODkwQTcwMEM0MDIwNzU4MjQ5MQotOjEwMjNCMDAwMzE2QTAwRkYxNTQwRkZFNjAyNDAyMDIxMEUwMDFERUZBQwotOjEwMjNDMDAwOTc5MTAwNDgxMDQwRkZFODkzODQwMDQ1MjQwNUZGRkRFNQotOjEwMjNEMDAwNTQ0NTAwMDU4RTQzMDAyMDAyMjAyODIxMEUwMDE3NzQ2QQotOjEwMjNFMDAwMDI0MDIwMjE4RTQzMDAyMDMwNzAwMDA0MTYwMDAwMEFCNQotOjEwMjNGMDAwMjQxNEZGRkI4Rjg1MDAyODBBMDAxRUYxOEY4NjAwNENGNQotOjEwMjQwMDAwMEEwMDFGMUNBRjg2MDA1MDBFMDAxQTE5MDAwMDAwMDBDMQotOjEwMjQxMDAwMEEwMDFGMkI5Mzg0MDA0NTAwNzQ5ODI0MEUwMDE3OEUyOQotOjEwMjQyMDAwQUU1MzAwMjA4Rjg1MDAyODBBMDAxRUYxOEY4NjAwNENENQotOjEwMjQzMDAwMjdCREZGRDhBRkIzMDAxQ0FGQjEwMDE0QUZCRjAwMjA2MQotOjEwMjQ0MDAwQUZCMjAwMThBRkIwMDAxMDNDMDI4MDAwOEM1MjAxNDBDNwotOjEwMjQ1MDAwOEM0QjAxNDgzQzA0ODAwMDAwMEI4QzAyMzIyMzAwRkZBRgotOjEwMjQ2MDAwMzE3MzAwRkY4Qzg1MDFCODA0QTBGRkZFMzQ5MDAxODAxOQotOjEwMjQ3MDAwQUUxMjAwMDA4Qzg3MDE0NDI0NjRGRkYwMjQwNjAwMDJBMQotOjEwMjQ4MDAwMkM4MzAwMTNBRTA3MDAwNEE2MTEwMDA4QTIwNjAwMEI1RgotOjEwMjQ5MDAwQUUxMzAwMjQxMDYwMDA0RjhGQkYwMDIwMDAwNDQ4ODA1RQotOjEwMjRBMDAwM0MwQTA4MDEyNTRBODFCQzAxMkE0MDIxOEQwNDAwMDAxNAotOjEwMjRCMDAwMDA4MDAwMDgwMDAwMDAwMDNDMTAwODAwOEUxMDMxQThDOQotOjEwMjRDMDAwMzE3MzNGRkYwMDEzODk4MDAyMTJDODIxMjQwNUZGODA2OQotOjEwMjREMDAwMDMzMTIwMjEyNjRDMDEwMDI2NDcwMDgwM0MxRjgwMDA0QwotOjEwMjRFMDAwMDBFNTE4MjQzMThGMDA3RjMwRTkwMDdGMzA4QTAwN0ZCQgotOjEwMjRGMDAwM0MxODgwMEEzQzBFODAwNDNDMEQ4MDBDMDA4NTEwMjRBMgotOjEwMjUwMDAwMDE4NTMwMjQwMTREODAyMUFGRTYwMDI0MDFGODQwMjFFRgotOjEwMjUxMDAwQUZFMzAwOTAwMTJFOTgyMUFGRTIwMDI4QUY5MDAwMzA4OQotOjEwMjUyMDAwQUY4ODAwMjhBRjkzMDAyMDBFMDAxODYzMDE2MDgwMjE1RgotOjEwMjUzMDAwM0MwMzgwMDA4QzZCMDFCODA1NjBGRkZFOEY4NzAwMzA4NAotOjEwMjU0MDAwMzQ2NTAxODA4Rjg2MDAyODkwRTMwMDBEQUNCMjAwMDA1NgotOjEwMjU1MDAwQTRCMDAwMDYwMDAzMTYwMDAwMDJGRTAzMDAxRjkwMjcyRgotOjEwMjU2MDAwMDAxMjI3QzIxMDgwMDA3QTI0QzIwMDc4MjQxOTYwODJFOQotOjEwMjU3MDAwQTRCOTAwMDhBMEEwMDAwNTI0MUYwMDAyQTBCRjAwMEIwMgotOjEwMjU4MDAwMDAwNDFDMDA4RjhCMDAyMDNDMDIyNzAwMDA2MjkwMjU3NQotOjEwMjU5MDAwQUNCMjAwMTBBQ0EwMDAxNEFDQTAwMDI0QUNBMDAwMjg4OQotOjEwMjVBMDAwQUNBMDAwMkM4RDczMDAzODI0MTBGRjgwQUNCMzAwMTg1MQotOjEwMjVCMDAwOTBFNDAwMEQwMjA0ODgyNDMyMjUwMEZGMTBBMDAwMDVERAotOjEwMjVDMDAwOEZCRjAwMjA5MEVDMDAwRDMxODgwMDdGQTBFODAwMEQ0NwotOjEwMjVEMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4MgotOjEwMjVFMDAwOEZCMDAwMTAzQzBEMTAwMDNDMEE4MDAwMjdCRDAwMjg3MQotOjEwMjVGMDAwMDNFMDAwMDhBRDREMDFCODI2NUYwMTAwMjQwNUZGODAwRgotOjEwMjYwMDAwMzNGODAwN0YzQzA2ODAwMDAzRTU3ODI0M0MxOTgwMEFGQgotOjEwMjYxMDAwMDMxOTIwMjFBQ0NGMDAyNDkwOEUwMEM0MDBBRTY4MjRBMgotOjEwMjYyMDAwMzFBQzAwRkYxMTgwRkZFQUFGODQwMDI4MjQ4RTAwNzhDRgotOjEwMjYzMDAwOTVDRDAwMTIzQzBDMDgwMDhEOEMzMUE4MzFBQjNGRkZDQQotOjEwMjY0MDAwMDE5MjQ4MjEwMDBCNTE4MDAxMkE0MDIxMDEwNTIwMjREQwotOjEwMjY1MDAwQUNDNDAwMjgzMTA3MDA3RjNDMDY4MDBDMDBFNjIwMjEzNgotOjEwMjY2MDAwOTA4MzAwMEQwMEEzMTAyNDMwNDUwMEZGMTBBMEZGRDg3OAotOjEwMjY3MDAwQUY4NDAwMzA5MDk4MDAwRDMzMEYwMDEwMTVFMEZGRDVBNwotOjEwMjY4MDAwOEZCRjAwMjAwRTAwMTg2MzAwMDAwMDAwM0MwMzgwMDA5NAotOjEwMjY5MDAwOEM3OTAxQjgwNzIwRkZGRTAwMDAwMDAwQUUxMjAwMDA5OAotOjEwMjZBMDAwOEM3MjAxNDRBRTEyMDAwNEE2MTEwMDA4MjQxMTAwMDIyRAotOjEwMjZCMDAwQTIxMTAwMEJBRTEzMDAyNDBBMDAxRkM2OEZCRjAwMjAxQQotOjEwMjZDMDAwM0MxMjYwMDA4RTQ1MkMwODNDMDNGMDAzMzQ2MkZGRkY4RgotOjEwMjZEMDAwMDBBMkY4MjRBRTVGMkMwODhFNTgyQzA4M0MxOTAxQjBEQgotOjEwMjZFMDAwMDMxOTk4MjVBRTUzMkMwODBBMDAxRkM2OEZCRjAwMjA3RgotOjEwMjZGMDAwMjY0RDAxMDAzMUFGMDA3RjNDMTA4MDBBMjQwRUZGODA4MAotOjEwMjcwMDAwMDFGMDI4MjEwMUFFNjAyNDNDMEI4MDAwQUQ2QzAwMjQ1OAotOjEwMjcxMDAwMTY2MEZGQUZBRjg1MDAyODI0MTEwMDAzQTBCMTAwRUNDNAotOjEwMjcyMDAwMEEwMDFGQzY4RkJGMDAyMDI2NDgwMTAwMzEwQTAwN0YyMwotOjEwMjczMDAwM0MwQjgwMEEyNDA5RkY4MDAxNEIzMDIxMDEwOTIwMjQzMQotOjEwMjc0MDAwM0MwNzgwMDBBQ0U0MDAyNDBBMDAxRkM1QUY4NjAwMjhDNwotOjEwMjc1MDAwOTQ0QTAwMTIzMjA4M0ZGRjMxNEMzRkZGMTU4OEZGODQzNgotOjEwMjc2MDAwMjQxOTYwODI5MENGMDBDNDI0MEVGRjgwMDFDRjQ4MjQzQQotOjEwMjc3MDAwMzEyRDAwRkYxMUEwRkY3RTAwMDAwMDAwMjQwNzAwMDQ5RgotOjEwMjc4MDAwQTBDNzAwRUM4Rjg3MDAzMDI0MTg2MDg0MjQwNjAwMEQ1OQotOjEwMjc5MDAwQTRCODAwMDhBMEE2MDAwNTBBMDAxRkIwMjQxRjAwMDI2QwotOjEwMjdBMDAwMDgwMDMzMEMwODAwMzMwQzA4MDAzM0U4MDgwMDMzQkM4MQotOjEwMjdCMDAwMDgwMDMzQTAwODAwMzJGMDA4MDAzMkYwMDgwMDMyRjBDMAotOjEwMjdDMDAwMDgwMDMzMTQ4MDA4MDEwMDgwMDgwMDgwODAwODAwMDBBMQotOjEwMjdEMDAwNUY4NjU0MzdFNEFDNjJDQzUwMTAzQTQ1MzY2MjE5ODVCNgotOjEwMjdFMDAwQkYxNEMwRTgxQkMyN0ExRTg0RjRCNTU2MDk0RUE2RkU3QgotOjEwMjdGMDAwN0REQTAxRTdDMDRENzQ4MTA4MDA3QTc0MDgwMDdBQzA2MAotOjEwMjgwMDAwMDgwMDdBODAwODAwNzlBODA4MDA3QTgwMDgwMDdBQjA2OQotOjEwMjgxMDAwMDgwMDdBODAwODAwNzlBODA4MDA3OUE4MDgwMDc5QTgzQgotOjEwMjgyMDAwMDgwMDc5QTgwODAwNzlBODA4MDA3OUE4MDgwMDc5QTgwNAotOjEwMjgzMDAwMDgwMDc5QTgwODAwNzlBODA4MDA3OUE4MDgwMDdBQTBGQgotOjEwMjg0MDAwMDgwMDdBOTAwODAwNzlBODA4MDA3OUE4MDgwMDc5QThGQgotOjEwMjg1MDAwMDgwMDc5QTgwODAwNzlBODA4MDA3OUE4MDgwMDc5QThENAotOjEwMjg2MDAwMDgwMDc5QTgwODAwNzlBODA4MDA3OUE4MDgwMDc5QThDNAotOjEwMjg3MDAwMDgwMDc5QTgwODAwN0E5MDA4MDA4MDZDMDgwMDdGMTQ4RQotOjEwMjg4MDAwMDgwMDgwMzQwODAwN0YxNDA4MDA4MDA0MDgwMDdERkNFNAotOjEwMjg5MDAwMDgwMDdGMTQwODAwN0YxNDA4MDA3RjE0MDgwMDdGMTRDQwotOjEwMjhBMDAwMDgwMDdGMTQwODAwN0YxNDA4MDA3RjE0MDgwMDdGMTRCQwotOjEwMjhCMDAwMDgwMDdGMTQwODAwN0YxNDA4MDA3RjE0MDgwMDdGMTRBQwotOjA0MjhDMDAwMDgwMDdGM0M1MQotOjBDMjhDNDAwMEEwMDAxMjIwMDAwMDAwMDAwMDAwMDAwREIKLToxMDI4RDAwMDAwMDAwMDBENzQ3MDYxMzUyRTMwMkUzMDZBMzMwMDAwMTgKLToxMDI4RTAwMDA1MDAwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKLToxMDI4RjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDgKLToxMDI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzcKLToxMDI5MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjcKLToxMDI5MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTcKLToxMDI5MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTcKLToxMDI5NDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODcKLToxMDI5NTAwMDEwMDAwMDAzMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBENEEKLToxMDI5NjAwMDNDMDIwODAwMjQ0MjFDMjAzQzAzMDgwMDI0NjMxRkEwRjIKLToxMDI5NzAwMEFDNDAwMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0RTMKLToxMDI5ODAwMDNDMUQwODAwMzdCRDJGRkMwM0EwRjAyMTNDMTAwODAwQkYKLToxMDI5OTAwMDI2MTAwNDg4M0MxQzA4MDAyNzlDMUMyMDBFMDAwMkUyMjQKLToxMDI5QTAwMDAwMDAwMDAwMDAwMDAwMEQyNDAyRkY4MDI3QkRGRkUwQjIKLToxMDI5QjAwMDAwODIxMDI0QUZCMDAwMTBBRjQyMDAyMEFGQkYwMDE4NUIKLToxMDI5QzAwMEFGQjEwMDE0OTM2NTAwMDQzMDg0MDA3RjAzNDQxODIxRTQKLToxMDI5RDAwMDNDMDIwMDA4MDA2MjE4MjEzMEE1MDAyMDAzNjA4MDIxMUQKLToxMDI5RTAwMDNDMDgwMTExMjc3QjAwMDgxNEEwMDAwMjI0NjYwMDVDNEIKLToxMDI5RjAwMDI0NjYwMDU4OTIwMjAwMDQ5NzQzMDEwNDkyMDQwMDA0RTQKLToxMDJBMDAwMDMwNDcwMDBGMzA2M0ZGRkYzMDg0MDA0MDAwNjcyODIzMDkKLToxMDJBMTAwMDEwODAwMDA5MDAwMDQ4MjE5MjAyMDAwNTMwNDIwMDA0QTUKLToxMDJBMjAwMDEwNDAwMDA1MDAwMDAwMDAxMEEwMDAwMzAwMDAwMDAwOUUKLToxMDJBMzAwMDI0QTVGRkZDMjQwOTAwMDQ5MjAyMDAwNTMwNDIwMDA0OTIKLToxMDJBNDAwMDEwNDAwMDEyMDAwMDAwMDAxMEEwMDAxMDAwMDAwMDAwNjQKLToxMDJBNTAwMDk2MDIwMDAyMDBBNzIwMjEwMTA0NDAyNTI0NDJGRkZFMjcKLToxMDJBNjAwMEE3NDIxMDE2OTIwMzAwMDQyNDAyRkY4MDAwNDMxMDI0QTIKLToxMDJBNzAwMDMwNDIwMEZGMTA0MDAwMDMzQzAyMDQwMDBBMDAwMTcyRDMKLToxMDJBODAwMDAxMDI0MDI1OENDMjAwMDBBRjQyMTAxODhGNDIwMTc4MkQKLToxMDJBOTAwMDA0NDBGRkZFMjQwMjAwMEFBNzQyMDE0MDk2MDIwMDAyMDEKLToxMDJBQTAwMDI0MDQwMDA5MzA0MjAwMDcwMDAyMTAyMzMwNDIwMDA3Q0UKLToxMDJBQjAwMEE3NDIwMTQyOTYwMjAwMDIyNDQyRkZGRUE3NDIwMTQ0QkYKLToxMDJBQzAwMEE3NDAwMTQ2OTc0MjAxMDRBNzQyMDE0ODhGNDIwMTA4RUUKLToxMDJBRDAwMDMwNDIwMDIwNTA0MDAwMDEyNDA0MDAwMTkyMDIwMDA0MTIKLToxMDJBRTAwMDMwNDIwMDEwMTQ0MDAwMDIzNDgzMDAxMDAwODAxODIxOEUKLToxMDJBRjAwMEE3NDMwMTRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTEKLToxMDJCMDAwMDAwMDAwMDAwQUY0ODEwMDAwMDAwMDAwMDAwMDAwMDAwQkUKLToxMDJCMTAwMDAwMDAwMDAwMDAwMDAwMDA4RjQyMTAwMDA0NDFGRkZFOTIKLToxMDJCMjAwMDMxMDJGRkZGMTA0MDAwMDcwMDAwMDAwMDkyMDIwMDA0ODUKLToxMDJCMzAwMDMwNDIwMDQwMTQ0MDAwMDMwMDAwMDAwMDhGNDIxMDE4OTMKLToxMDJCNDAwMEFDQzIwMDAwOTYwMjAwMDYzMDQyRkZGRjI0NDIwMDAyQTEKLToxMDJCNTAwMDAwMDIxMDQzMDAwMjEwNDAwMzYyODgyMTk2MjIwMDAwMDgKLToxMDJCNjAwMDExMjAwMDBEMzA0NEZGRkYwMEE3MTAyMThGODMwMDM4OTMKLToxMDJCNzAwMDhGNDUxMDFDMDAwMjEwODIwMDAyMTA4MDAwNDMxMDIxQkIKLToxMDJCODAwMEFDNDUwMDAwMzBBNkZGRkYwRTAwMDJEMTAwMDUyQzAyNkMKLToxMDJCOTAwMDAwNDAyMDIxQTYyMjAwMDA5MjAzMDAwNDI0MDJGRjgwQUUKLToxMDJCQTAwMDAwNDMxMDI0MzA0MjAwRkYxMDQwMDAxRjAwMDAwMDAwQ0UKLToxMDJCQjAwMDkyMDIwMDA1MzA0MjAwMDIxMDQwMDAxQjAwMDAwMDAwOUQKLToxMDJCQzAwMDk3NDIxMDBDMjQ0MkZGRkVBNzQyMTAxNjAwMDAwMDAwOUUKLToxMDJCRDAwMDNDMDIwNDAwMzQ0MjAwMzBBRjQyMTAwMDAwMDAwMDAwMEMKLToxMDJCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGNDIxMDAwMDQKLToxMDJCRjAwMDA0NDFGRkZFMDAwMDAwMDA5NzQyMTAwQzhGNDUxMDFDOUUKLToxMDJDMDAwMDMwNDJGRkZGMjQ0MjAwMzAwMDAyMTA4MjAwMDIxMDgwOTgKLToxMDJDMTAwMDAwNUIxMDIxQUM0NTAwMDAzMEE2RkZGRjBFMDAwMkQxODIKLToxMDJDMjAwMDAwMDUyQzAyQTYyMjAwMDA5NjA0MDAwMjI0ODQwMDA4NUQKLToxMDJDMzAwMDBFMDAwMUU3MzA4NEZGRkY5NzQ0MDEwNDBFMDAwMUY1MDgKLToxMDJDNDAwMDMwODRGRkZGOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwQzkKLToxMDJDNTAwMDNDMDIxMDAwMjdCRDAwMjAwM0UwMDAwOEFGNDIwMTc4Q0QKLToxMDJDNjAwMDMwODRGRkZGMzA4MjAwMDc4Rjg1MDAyNDEwNDAwMDAyNkYKLToxMDJDNzAwMDI0ODMwMDA3MzA2NEZGRjgwMEE0MTAyMTMwNDIxRkZGQjYKLToxMDJDODAwMDAzNDIxODIxMjQ3QjQwMDBBRjg1MDAyOEFGODIwMDI0MzYKLToxMDJDOTAwMDAzRTAwMDA4QUY0MjAwODQzMDg0RkZGRjMwODIwMDBGNjEKLToxMDJDQTAwMDhGODUwMDJDOEY4NjAwMzQxMDQwMDAwMjI0ODMwMDBGOTMKLToxMDJDQjAwMDMwNjRGRkYwMDBBNDEwMjEwMDQ2MTgyQkFGODUwMDMwQ0YKLToxMDJDQzAwMDAwNDYyMDIzMTQ2MDAwMDJBRjgyMDAyQ0FGODQwMDJDNDkKLToxMDJDRDAwMDhGODIwMDJDMzQwNDgwMDAwMzQyMTgyMTAwNjQxODIxRTQKLToxMDJDRTAwMEFGODMwMDM4MDNFMDAwMDhBRjQyMDA4MDhGODIwMDE0RjkKLToxMDJDRjAwMDEwNDAwMDA4OEY4MjAwMDQ4RjgyRkZDQzE0NDAwMDA1MzIKLToxMDJEMDAwMDhGODIwMDA0M0MwMkZGQkYzNDQyRkZGRjAwODIyMDI0NzgKLToxMDJEMTAwMDhGODIwMDA0MzA0MzAwMDYyNDAyMDAwMjEwNjIwMDBGN0MKLToxMDJEMjAwMDNDMDIwMTAxMkM2MjAwMDM1MDQwMDAwNTI0MDIwMDA0MTMKLToxMDJEMzAwMDEwNjAwMDBGM0MwMjAwMDEwQTAwMDIyRTAwMDAwMDAwOUIKLToxMDJENDAwMDEwNjIwMDA1MjQwMjAwMDYxNDYyMDAwQzNDMDIwMTExMEUKLToxMDJENTAwMDBBMDAwMjI3MDA4MjEwMjUzQzAyMDAxMTAwODIxMDI1ODMKLToxMDJENjAwMEFGNDIxMDAwMjQwMjAwMDEwQTAwMDIyRUFGODIwMDBDQzQKLToxMDJENzAwMDAwODIxMDI1QUY0MjEwMDBBRjgwMDAwQzAwMDAwMDAwNjAKLToxMDJEODAwMDAwMDAwMDAwMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwNTgKLToxMDJEOTAwMDhGODIwMDBDMTA0MDAwMDQwMDAwMDAwMDhGNDIxMDAwRTEKLToxMDJEQTAwMDA0NDFGRkZFMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwRjYKLToxMDJEQjAwMDhGODIwMDEwMjQ0M0Y4MDAwMDAyMjlDMjI0QTJGRkYwRjEKLToxMDJEQzAwMDJDNjMwMzAxMTA2MDAwMDMwMDAyMTA0MjBBMDAwMjU1NDgKLToxMDJERDAwMEFDODIwMDAwOEY4MzAwMTgwMEEzMTAyQjE0NDAwMDBCNUUKLToxMDJERTAwMDAwMDAzODIxMDBBMzEwMjMyNDQ2MDAwMThGODIwMDFDMUMKLToxMDJERjAwMDAwNjIxMDIxMjQ0MkZGRkYwMDQ1MTAyQjU0NDAwMDA0QzQKLToxMDJFMDAwMDI0MDJGRkZGMEEwMDAyNTVBQzg2MDAwMDI0MDJGRkZGRTcKLToxMDJFMTAwMDBBMDAwMjVBQUM4MjAwMDA4QzgyMDAwMDNDMDMwODAwQzkKLToxMDJFMjAwMDI0NjMxQzVDMDAwMjExNDAwMDQzMzgyMTAzRTAwMDA4QzkKLToxMDJFMzAwMDAwRTAxMDIxM0MwOTA4MDA4RDI5MUQ4MDAwMDQ1MTQwNEMKLToxMDJFNDAwMDNDMTkwODAwMjczOTFDNUMwMEMwNzgyMTAwODA2MDIxRjMKLToxMDJFNTAwMDI0MEVGRkZGMDAwMDM4MjEwMTU5NDAyMTExMjAwMDM2QzcKLToxMDJFNjAwMDAwMDAzMDIxM0MxODA4MDAyNzE4MUQ5ODNDMEQwODAwNzAKLToxMDJFNzAwMDI1QUQxRDlDMDAwRjU4MkIwMDA2MTE4MDAwNDYxMDIxMjcKLToxMDJFODAwMDAwMDIxOEMwMDA3ODEwMjE4QzQyMDAwMDE1ODIwMDIwM0EKLToxMDJFOTAwMDAwNkQyMDIxOENBMjAwMDA1NDQwMDAwOThEMDIwMDE4MTIKLToxMDJFQTAwMDNDMDIwODAwOEM0MjFEODQyNDQyMDAwMUFDODIwMDAwRDgKLToxMDJFQjAwMDNDMDEwODAwQUMyMjFEODQwQTAwMDJDRjAwMDAyMDIxNDIKLToxMDJFQzAwMDhGNDcwMDIwMDAwMDMwMjEwMDAyMTFDMDExNjAwMDRBMkQKLToxMDJFRDAwMEFGNDIwMDIwOEQwODAwMUMzQzA5MDAwODhDQTMwMDAwQjQKLToxMDJFRTAwMDAwNjYxODIxMDAwMzE4ODAwMDdBMTAyMTAwNDkxMDIxODMKLToxMDJFRjAwMDhDNDQwMDAwMjRDNjAwMDEwMDY4MTgyMTAwQ0YxMDJCNkMKLToxMDJGMDAwMDE0NDBGRkY2QUM2NDAwMDAwQTAwMDJDRDAwMDAwMDAwOEYKLToxMDJGMTAwMDhDODQwMDAwMDA4RTEwMkI1MDQwMDAwNDI0QzYwMDAxNTkKLToxMDJGMjAwMDAwODA3MDIxMDBDMDM4MjEyNEM2MDAwMTAwQzkxMDJCODgKLToxMDJGMzAwMDE0NDBGRkQyMDAwNjExODAyNDAyMDAwMUFDQTIwMDAwNjAKLToxMDJGNDAwMDNDMDIwODAwOEM0MjFEN0MzQzAzMDgwMDhDNjMxRDgwMDEKLToxMDJGNTAwMDAwNDMxMDJCMTQ0MDAwMkEyNDA0RkZGRTAxNTkxMDIxQzUKLToxMDJGNjAwMDhDNDIwMDE4MTA0MDAwMjYyNDA0RkZGRjAwMDcyMTgwMzcKLToxMDJGNzAwMDNDMDUwODAwOENBNTFEODQwMDg3MjAyMThEMDYwMDE4QzMKLToxMDJGODAwMDAwMDQyMEMwM0MwMjA4MDAyNDQyMUQ5ODAwODIxMDIxNDkKLToxMDJGOTAwMDNDMDMwODAwMjQ2MzFEOUNBQzRDMDAwMDI0QTUwMDAxRTgKLToxMDJGQTAwMDAwODMxODIxM0MwMjA4MDAyNDQyMURBMEFDNjUwMDAwRUIKLToxMDJGQjAwMDAwMDYzMUMwM0MwMTA4MDBBQzI1MUQ4NDAwODIyMDIxQTAKLToxMDJGQzAwMDhGNDcwMDIwQUQwNDAwMUNBRjQ2MDAyMDExRTAwMDBBMkUKLToxMDJGRDAwMDAwMDAzMDIxM0MwMjAwMDgwMzQyMjgyMThDQTIwMDAwOUUKLToxMDJGRTAwMDI0QzYwMDAxMDBDRjE4MkJBQzgyMDAwMDI0QTUwMDA0RTkKLToxMDJGRjAwMDE0NjBGRkZBMjQ4NDAwMDRBRjQ3MDAyMDAwMDAyMDIxNjEKLToxMDMwMDAwMDAzRTAwMDA4MDA4MDEwMjEzMDg0RkZGRjMwQzZGRkZGN0UKLToxMDMwMTAwMDAwMDUyQzAwMDBBNjI4MjUzODgyRkZGRjAwNDUxMDIxNUUKLToxMDMwMjAwMDAwNDUyODJCMDA0NTEwMjEwMDAyMUMwMjMwNDJGRkZGMDIKLToxMDMwMzAwMDAwNDMxMDIxMDAwMjFDMDIzMDQyRkZGRjAwNDMxMDIxMTgKLToxMDMwNDAwMDM4NDJGRkZGMDNFMDAwMDgzMDQyRkZGRjI3QkRGRkM4MDIKLToxMDMwNTAwMEFGQkYwMDMwQUZCMzAwMkNBRkIyMDAyOEFGQjEwMDI0MzcKLToxMDMwNjAwMEFGQjAwMDIwM0MwNDYwMDg4QzgyNTAwMDI0MDNGRjdGMzYKLToxMDMwNzAwMDNDMDY2MDAwMDA0MzEwMjQzNDQyMzgwQ0FDODI1MDAwRkYKLToxMDMwODAwMDhDQzI0QzFDM0MxQTgwMDAwMDAyMTYwMjMwNDIwMDBGMTkKLToxMDMwOTAwMDEwNDAwMDA3QUY4MjAwMUM4Q0MzNEMxQzNDMDIwMDFGNzgKLToxMDMwQTAwMDM0NDJGQzAwMDA2MjE4MjQwMDAzMTlDMkFGODMwMDE4RTgKLToxMDMwQjAwMDhGNDIwMDA4Mjc1QjQwMDAzNDQyMDAwMUFGNDIwMDA4MDUKLToxMDMwQzAwMEFGODAwMDI0M0MwMjYwMUNBRjQwMDA4MEFGNDAwMDg0MTEKLToxMDMwRDAwMDhDNDUwMDA4OENDMzA4MDgzNDAyODAwMDAzNDIyMDIxN0MKLToxMDMwRTAwMDI0MDJGRkYwMDA2MjE4MjQzQzAyMDA4MDNDMDEwODAwMkEKLToxMDMwRjAwMEFDMjIwNDIwM0MwMjU3MDlBRjg0MDAzODE0NjIwMDA0NUIKLToxMDMxMDAwMEFGODUwMDM0MjQwMjAwMDEwQTAwMDMxNEFGODIwMDE0Q0EKLToxMDMxMTAwMEFGODAwMDE0MjQwMzAwM0QyNDAyMDAwNDNDMDEwODAwOTkKLToxMDMxMjAwMEFDMjIxRDk0M0MwMTA4MDBBQzIzMUQ5MDNDMDEwODAwMUEKLToxMDMxMzAwMEFDMjMxRDhDM0MwMTA4MDBBQzIzMUQ4ODNDMTMwODAwMDcKLToxMDMxNDAwMDI2NzMxQzVDMjQwNDAwMDQzQzAyMDgwMDI0NDIxQzc0MDYKLToxMDMxNTAwMDI0MDMwMDA4MjQ2M0ZGRkZBQzQwMDAwNEFDNDAwMDAwREYKLToxMDMxNjAwMDA0NjFGRkZDMjQ0MjAwMjAwMDA0MTBDMDAwNDQxMDIxMzAKLToxMDMxNzAwMDI0NDIwMDNEM0MwMTA4MDBBQzIyMUQ5MDI0MDIwMDAxQzUKLToxMDMxODAwMDNDMDEwODAwQUMyMjFEN0MyNDAyRkZGRjNDMDEwODAwMkEKLToxMDMxOTAwMEFDMjIxRDk4M0MwMTA4MDBBQzIwMUQ4NDhGNDIwMDAwMjkKLToxMDMxQTAwMDM4NDIwMDAxMzA0MjAwMDExNDQwRkZGQzhGODIwMDE0QkQKLToxMDMxQjAwMDEwNDAwMDE2MDAwMDAwMDA5NzQyMDEwNDEwNDAwMDA1NzYKLToxMDMxQzAwMDhGODMwMDAwMTQ2MDAwMDcyNDYyRkZGRjBBMDAwMzRCOTYKLToxMDMxRDAwMDJDNjIwMDBBMkM2MjAwMTA1MDQwMDAwNDhGODMwMDAwMTMKLToxMDMxRTAwMDI0NjIwMDAxQUY4MjAwMDA4RjgzMDAwMDJDNjIwMDBBN0QKLToxMDMxRjAwMDE0NDAwMDAzMkM2MjAwMDcwQTAwMDM1MkFGODBGRkNDOEEKLToxMDMyMDAwMDEwNDAwMDAyMjQwMjAwMDFBRjgyRkZDQzhGNDMwMTA4NkUKLToxMDMyMTAwMDhGNDQwMTAwMzA2MjIwMDBBRjgzMDAwNDEwNDAwMDA4OUEKLToxMDMyMjAwMEFGODQwMDEwM0MwMjA4MDA4QzQyMDQyQzI0NDIwMDAxQjAKLToxMDMyMzAwMDNDMDEwODAwQUMyMjA0MkMwQTAwMDZENzNDMDI0MDAwRTYKLToxMDMyNDAwMDMwNjUwMjAwMTRBMDAwMDMyNDAyMEYwMDE0ODIwMzA5NTkKLToxMDMyNTAwMDI0MDIwRDAwOTc0MjAxMDQxMDQwMDM3MTNDMDI0MDAwMUIKLToxMDMyNjAwMDMwNjI0MDAwMTQ0MDAwQUQ4RjgyMDAzODhDNDQwMDA4NkEKLToxMDMyNzAwMDhGNDIwMTc4MDQ0MEZGRkUyNDAyMDgwMEFGNDIwMTc4MkIKLToxMDMyODAwMDI0MDIwMDA4QTc0MjAxNDBBNzQwMDE0Mjk3NDIwMTA0REUKLToxMDMyOTAwMDhGODQwMDA0MzA1MUZGRkYzMDgyMDAwMTEwNDAwMDA3OEUKLToxMDMyQTAwMDAyMjA4MDIxMjYyM0ZGRkUyNDAyMDAwMjMwNzBGRkZGNEYKLToxMDMyQjAwMEE3NDIwMTQ2MEEwMDAzN0ZBNzQzMDE0OEE3NDAwMTQ2RjEKLToxMDMyQzAwMDNDMDIwODAwOEM0MjA0M0MxNDQwMDAwRDhGODMwMDEwMjcKLToxMDMyRDAwMDMwODIwMDIwMTQ0MDAwMDIyNDAzMDAwOTI0MDMwMDAxNkUKLToxMDMyRTAwMDAwNjAyMDIxOEY4MzAwMTAyNDAyMDkwMDUwNjIwMDAxMzkKLToxMDMyRjAwMDM0ODQwMDA0QTc0NDAxNEEwQTAwMDM5QTAwMDAwMDAwMzUKLToxMDMzMDAwMDI0MDIwRjAwMTQ2MjAwMDUzMDgyMDAyMDE0NDAwMDA2RTEKLToxMDMzMTAwMDI0MDMwMDBEMEEwMDAzOTkyNDAzMDAwNTE0NDAwMDAyNTEKLToxMDMzMjAwMDI0MDMwMDA5MjQwMzAwMDFBNzQzMDE0QTNDMDIwODAwQ0EKLToxMDMzMzAwMDhDNDIwNDIwM0MwNDAwNDgwRTAwMDIwQTAwNDQyMDI1NzAKLToxMDMzNDAwMDBFMDAwMjMzMDAwMDAwMDA4RjgyMDAwQzEwNDAwMDNFOEYKLToxMDMzNTAwMDAwMDAwMDAwOEY0MjEwMDAzQzAzMDAyMDAwNDMxMDI0QjYKLToxMDMzNjAwMDEwNDAwMDM5OEY4MjAwMDQzMDQyMDAwMjEwNDAwMDM2QzUKLToxMDMzNzAwMDAwMDAwMDAwOTc0MjEwMTQxNDQwMDAzMzAwMDAwMDAwQzkKLToxMDMzODAwMDk3NDIxMDA4OEY4ODAwMzgzMDQyRkZGRjI0NDIwMDA2MjEKLToxMDMzOTAwMDAwMDIxODgyMDAwMzM4ODAwMEU4MzAyMTMwNDMwMDAxMjkKLToxMDMzQTAwMDhDQzQwMDAwMTA2MDAwMDQzMDQyMDAwMzAwMDAwMDBERDcKLToxMDMzQjAwMDBBMDAwM0RCMDBFODEwMjE1NDQwMDAxMDMwODRGRkZGQjYKLToxMDMzQzAwMDNDMDVGRkZGMDA4NTIwMjQwMDg1MTgyNjAwMDMxODJCRUMKLToxMDMzRDAwMDAwMDQxMDJCMDA0MzEwMjQxMDQwMDAwNTAwMDAwMDAwRTIKLToxMDMzRTAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDI0MDAwMjFDOEUKLToxMDMzRjAwMDhDQzIwMDAwMEEwMDAzREEwMDQ1MjAyNTM4ODNGRkZGNTUKLToxMDM0MDAwMDAwMDMxODJCMDAwNDEwMkIwMDQzMTAyNDEwNDAwMDA1NkIKLToxMDM0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDAwOUYKLToxMDM0MjAwMDI0MDAwMjI1OENDMjAwMDAzNDQ0RkZGRjAwRTgxMDIxNzQKLToxMDM0MzAwMEFDNDQwMDAwM0MwMjA4MDA4QzQyMDQzMDI0NDIwMDAxRUQKLToxMDM0NDAwMDNDMDEwODAwQUMyMjA0MzA4RjYyMDAwMDhGODQwMDM4RjkKLToxMDM0NTAwMEFGODIwMDA4OEM4MzAwMDAzNDAyRkZGRjE0NjIwMDBGNkIKLToxMDM0NjAwMDAwMDAxMDIxM0MwNTA4MDA4Q0E1MDQ1NDNDMDQwODAwMTEKLToxMDM0NzAwMDhDODQwNDUwMDBCMDI4MjEwMEIwMzAyQjAwODIyMDIxMjEKLToxMDM0ODAwMDAwODYyMDIxM0MwMTA4MDBBQzI1MDQ1NDNDMDEwODAwQzIKLToxMDM0OTAwMEFDMjQwNDUwMEEwMDA2Q0QyNDA0MDAwODhDODIwMDAwRUQKLToxMDM0QTAwMDMwNDIwMTAwMTA0MDAwMEYwMDAwMTAyMTNDMDUwODAwRDAKLToxMDM0QjAwMDhDQTUwNDRDM0MwNDA4MDA4Qzg0MDQ0ODAwQjAyODIxRUUKLToxMDM0QzAwMDAwQjAzMDJCMDA4MjIwMjEwMDg2MjAyMTNDMDEwODAwMjIKLToxMDM0RDAwMEFDMjUwNDRDM0MwMTA4MDBBQzI0MDQ0ODBBMDAwNkNEOEQKLToxMDM0RTAwMDI0MDQwMDA4M0MwNTA4MDA4Q0E1MDQ0NDNDMDQwODAwQTIKLToxMDM0RjAwMDhDODQwNDQwMDBCMDI4MjEwMEIwMzAyQjAwODIyMDIxQjEKLToxMDM1MDAwMDAwODYyMDIxM0MwMTA4MDBBQzI1MDQ0NDNDMDEwODAwNTEKLToxMDM1MTAwMEFDMjQwNDQwMEEwMDA2Q0QyNDA0MDAwODhGNjIwMDA4OTEKLToxMDM1MjAwMDhGNjIwMDAwMDAwMjE2MDIzMDQzMDBGMDI0MDIwMDMwRDcKLToxMDM1MzAwMDEwNjIwMDA1MjQwMjAwNDAxMDYyMDE2QjhGODIwMDIwOUYKLToxMDM1NDAwMDBBMDAwNkQ1MjQ0MjAwMDExNEEwMDAwNTAwMDAwMDAwNzYKLToxMDM1NTAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDI0MDAwMjUwRTgKLToxMDM1NjAwMDhGNDIwMTc4MDQ0MEZGRkUwMDAwMDAwMDBFMDAwMjNCODUKLToxMDM1NzAwMDI3QTQwMDEwMTQ0MDAwMDUwMDQwODAyMTAwMDAwMDAwMzYKLToxMDM1ODAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDI1NzhFMDIwMDAwMjEKLToxMDM1OTAwMDEwNDAwMDA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQzkKLToxMDM1QTAwMDAwMDAwMDAwMjQwMDAyNUE4RjYyMDAwQzA0NDMwMDAzNTQKLToxMDM1QjAwMDI0MDIwMDAxMEEwMDA1NURBRTAwMDAwMEFFMDIwMDAwMUEKLToxMDM1QzAwMDhGODIwMDM4OEM0NTAwMDhBMjAwMDAwNzhGNjUwMDBDMzAKLToxMDM1RDAwMDhGNjQwMDA0MzBBM0ZGRkYwMDA0MjQwMjAwODUyMDIzMzEKLToxMDM1RTAwMDMwODIwMEZGMDA0MzEwMjEyNDQyMDAwNTAwMDI4ODgzM0UKLToxMDM1RjAwMDJFMjIwMDgxQTYwNTAwMEExNDQwMDAwNUEyMDQwMDA0NDIKLToxMDM2MDAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDI0MDAwMjcyMTUKLToxMDM2MTAwMDNDMDcwODAwOENFNzFEODA4RkE4MDAxMDI0MDlGRkZGREQKLToxMDM2MjAwMDAwMDA1MDIxMTBFMDAwMTMwMDAwMzAyMTNDMEMwODAwODUKLToxMDM2MzAwMDI1OEMxRDlDMDE4MDI4MjEwMDAwMTgyMThDQTJGRkZDRjQKLToxMDM2NDAwMDUxMDIwMDJGMDA2QzE4MjE4Q0E0MDAwMDI0NjMwMjA4OTIKLToxMDM2NTAwMDAwODkxMDJCMTA0MDAwMDMyNEE1MDIwODAwODA0ODIxOTcKLToxMDM2NjAwMDAwQzA1MDIxMjRDNjAwMDEwMEM3MTAyQjU0NDBGRkY0QjUKLToxMDM2NzAwMDhDQTJGRkZDM0MwNTA4MDA4Q0E1MUQ4MDNDMDIwODAwQzQKLToxMDM2ODAwMDhDNDIxRDdDM0MwOTA4MDAyNTI5MUM2MDNDMDMwODAwNzUKLToxMDM2OTAwMDI0NjMxRDk4MDBBMjEwMkIzQzBDMDgwMDI1OEMxRDlDNTcKLToxMDM2QTAwMDNDMDQwODAwOEM4NDFEODQzQzBCMDgwMDI1NkIxREEwODUKLToxMDM2QjAwMDEwNDAwMDFBMDAwODMxNDAwMDA1MTE4MDAwNDUxMDIxMUIKLToxMDM2QzAwMDAwMDIxMEMwMDBDOTM4MjEyNDg0MDAwMTAwNEIzMDIxQzEKLToxMDM2RDAwMDAwNDMxODIxMjRBNTAwMDEwMDRDMTAyMUFDNjgwMDAwMTMKLToxMDM2RTAwMEFDRTYwMDE4M0MwMTA4MDBBQzI0MUQ4NEFDNDQwMDAwOEEKLToxMDM2RjAwMDNDMDEwODAwQUMyNTFEODAwQTAwMDRBODhFMDQwMDFDQjMKLToxMDM3MDAwMDNDMDIwODAwOEM0MjFEODQyNDQyMDAwMTNDMDEwODAwNTgKLToxMDM3MTAwMEFDMjIxRDg0MEEwMDA0QTdBQzYyMDAwMDAwMEExMTgwREMKLToxMDM3MjAwMDAwNEExMDIxMDAwMjEwQzAwMDQzMjgyMThDQTMwMDAwOTEKLToxMDM3MzAwMDAwNEMzODIxMjQ4NDAwMDEwMDAzMTk0MDAwQzkzMDIxQzUKLToxMDM3NDAwMDAwNjkxODIxMDA0QjEwMjFBQ0E4MDAwMEFDNjAwMDE4RTMKLToxMDM3NTAwMDNDMDEwODAwQUMyNDFEODRBQ0MyMDAxOEFDRTQwMDAwOUQKLToxMDM3NjAwMDhFMDQwMDFDOEY4NTAwMzgwRTAwMDZFNzAyMjAzMDIxRjEKLToxMDM3NzAwMDhGNjIwMDA0OEY0MzAxMDhBNjAyMDAwODNDMDIxMDAwN0IKLToxMDM3ODAwMDAwNjIxODI0MTA2MDAwMDgwMDAwMDAwMDk3NDIwMTA0NDUKLToxMDM3OTAwMDkyMDMwMDA3MjQ0MkZGRUMzNDYzMDAwMjMwNDVGRkZGMzAKLToxMDM3QTAwMDBBMDAwNEJDQTIwMzAwMDc5NzQyMDEwNDI0NDJGRkYwNzAKLToxMDM3QjAwMDMwNDVGRkZGOTYwNjAwMDgyQ0MyMDAxMzU0NDAwMDA1NTgKLToxMDM3QzAwMDkyMDMwMDA3OTIwMjAwMDczNDQyMDAwMUEyMDIwMDA3QTAKLToxMDM3RDAwMDkyMDMwMDA3MjQwMjAwMDExMDYyMDAwNTI0MDIwMDAzODYKLToxMDM3RTAwMDEwNjIwMDBCMzBDN0ZGRkYwQTAwMDREQjI0RTIwMDAyNzYKLToxMDM3RjAwMDhGODIwMDM4M0MwNEZGRkY4QzQzMDAwQzAwNjQxODI0QzcKLToxMDM4MDAwMDAwNjUxODI1QUM0MzAwMEMwQTAwMDREQTMwQzdGRkZGM0UKLToxMDM4MTAwMDhGODIwMDM4M0MwNEZGRkY4QzQzMDAxMDAwNjQxODI0QTIKLToxMDM4MjAwMDAwNjUxODI1QUM0MzAwMTAzMEM3RkZGRjI0RTIwMDAyRkEKLToxMDM4MzAwMDAwMDIxMDgzQTIwMjAwMDU4RjgzMDAzODMwNDIwMEZGOEYKLToxMDM4NDAwMDAwMDIxMDgwMDA0MzMwMjE4Q0M1MDAwMDhDQzIwMDAwQjMKLToxMDM4NTAwMDI0MDMwMDA0MDAwMjE3MDIxNDQzMDAxMzAwMDAwMDAwQjgKLToxMDM4NjAwMDk3NDIwMTA0M0MwM0ZGRkYwMEEzMTgyNDMwNDJGRkZGRUUKLToxMDM4NzAwMDAwNDcxMDIzMjQ0MkZGRkUwMDYyMjgyNUFDQzUwMDAwNEIKLToxMDM4ODAwMDkyMDQwMDA1OEUwMzAwMUMzMDgyMDBGRjAwMDIxMDgwQUQKLToxMDM4OTAwMDAwNDMxMDIxOTA0MjAwMDAzMDQyMDAwRjAwNDQxMDIxRUMKLToxMDM4QTAwMDBBMDAwNTEwQTIwMjAwMDY4Q0M0MDAwNDk3NDIwMTA0MUQKLToxMDM4QjAwMDk2MDMwMDBBMzA4NUZGRkYzMDQyRkZGRjAwNDcxMDIzQzgKLToxMDM4QzAwMDI0NDJGRkQ2MDAwMjE0MDAwMEEyMjgyNUFDQzUwMDA0NDMKLToxMDM4RDAwMDkyMDIwMDA3OTIwNDAwMDUyNDYzMDAyODAwMDMxODgzNjUKLToxMDM4RTAwMDAwNjQxODIxMzQ0MjAwMDRBMjAzMDAwNkEyMDIwMDA3NkIKLToxMDM4RjAwMDhGODIwMDA0MjQwM0ZGRkIzNDQyMDAwMjAwNDMxMDI0QTMKLToxMDM5MDAwMEFGODIwMDA0OTIwMzAwMDY4RTA3MDAxQzhGODYwMDM4RTkKLToxMDM5MTAwMDAwMDMxODgwMDA2NzEwMjE4QzQ0MDAwQzNDMDJGRkY2NjUKLToxMDM5MjAwMDM0NDJGRkZGMDA4MjI4MjQwMDY2MTgyMUFFMDQwMDBDRjgKLToxMDM5MzAwMEFDNjUwMDBDOTIwMzAwMDY4RTA0MDAwQzNDMDJGRjdGNzUKLToxMDM5NDAwMDM0NDJGRkZGMDAwMzE4ODAwMEEyMjgyNDAwODIyMDI0QjQKLToxMDM5NTAwMDAwNjcxODIxQUUwNDAwMENBQzY1MDAwQzkyMDIwMDA2NTIKLToxMDM5NjAwMDAwMDIxMDgwMDA0NzEwMjE5NDQ1MDAxMkFDNDUwMDEwNjEKLToxMDM5NzAwMDkyMDIwMDA2MDAwMjEwODAwMDQ2MTAyMUFDNDUwMDEwQTMKLToxMDM5ODAwMDhGQTIwMDEwOTIwMzAwMDUwMDAyMTE0MDAwMDMxODgwNkUKLToxMDM5OTAwMDAwNjcxODIxMDA1MzIwMjE4QzYyMDAwNDhDODMwMDE4REEKLToxMDM5QTAwMDE0NjAwMDBFQUUwMjAwMTQzQzAzMDgwMDhDNjMxRDhDRjIKLToxMDM5QjAwMEFDODMwMDE4M0MwMjA4MDA4QzQyMUQ5MDAwNjIxMDJCNjIKLToxMDM5QzAwMDEwNDAwMDE5MDAwMDAwMDAzQzAyMDgwMDhDNDIxRDk0QzkKLToxMDM5RDAwMDAwNjIxMDIxM0MwMTA4MDBBQzIyMUQ4QzhFMDIwMDE4RjAKLToxMDM5RTAwMDhGNDgwMDIwMDAwMDMwMjEwMDAyMTFDMDEyMjAwMDBCN0YKLToxMDM5RjAwMEFGNDIwMDIwM0MwMjAwMDgwMzQyMjgyMTAwRTAyMDIxQzEKLToxMDNBMDAwMDhDODIwMDAwMjRDNjAwMDEwMEQxMTgyQkFDQTIwMDAwNUIKLToxMDNBMTAwMDI0ODQwMDA0MTQ2MEZGRkEyNEE1MDAwNEFGNDgwMDIwQTkKLToxMDNBMjAwMDBBMDAwNTVFMjQwMjAwMTAwMDAwMDAwMDAwMDAwMDBERTYKLToxMDNBMzAwMDAwMDAwMDAwMjQwMDAyRDQyNDAyMDAxMEE3NDIwMTQwMkMKLToxMDNBNDAwMDI0MDIwMDAyQTc0MDAxNDJBNzQwMDE0NEE3NDIwMTQ2QzgKLToxMDNBNTAwMDk3NDIwMTA0M0MwNDAwMDgyNDQyRkZGRUE3NDIwMTQ4QUIKLToxMDNBNjAwMDI0MDIwMDAxMEUwMDAyMEFBNzQyMDE0QTk2MDMwMDBBM0UKLToxMDNBNzAwMDkyMDIwMDA0MDA0MzEwMjEyNDQyMDAwMjMwNDIwMDA3NTkKLToxMDNBODAwMDAwMDIxMDIzMzA0MjAwMDcwRTAwMDIzM0FFMDIwMDEwODUKLToxMDNBOTAwMDhGNjIwMDAwM0MwMzA4MDA4QzYzMDQ0NDI0MDQwMDEwN0YKLToxMDNBQTAwMEFGODIwMDA4OTc0MjAxMDQzMDQyRkZGRjI0NDJGRkZFMkMKLToxMDNBQjAwMDAwNDAzODIxMDAwMjM3QzMzQzAyMDgwMDhDNDIwNDQwMTkKLToxMDNBQzAwMDAwNjcxODIxMDA2NzI4MkIwMDQ2MTAyMTAwNDUxMDIxQUYKLToxMDNBRDAwMDNDMDEwODAwQUMyMzA0NDQzQzAxMDgwMEFDMjIwNDQwMzMKLToxMDNBRTAwMDBBMDAwNjYyMDAwMDAwMDAxNEEwMDAwNTAwMDAwMDAwQUIKLToxMDNBRjAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDI0MDAwMzA0OEUKLToxMDNCMDAwMDhGNDIwMTc4MDQ0MEZGRkUwMDAwMDAwMDBFMDAwMjNCREYKLToxMDNCMTAwMDI3QTQwMDE0MTQ0MDAwMDUwMDQwODAyMTAwMDAwMDAwOEMKLToxMDNCMjAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDMwQjkyMDYwMDA0QkEKLToxMDNCMzAwMDhGQTQwMDE0MjdBNTAwMTgwMDA2MzA4MjBFMDAwMjVDMzYKLToxMDNCNDAwMEFGQTAwMDE4NTA0MDAwMDY4RTAyMDAwMDAwMDAwMDAwRTgKLToxMDNCNTAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDMxMThFMDIwMDAwOTAKLToxMDNCNjAwMDU0NDAwMDA2OTIwMjAwMDcwMDAwMDAwMDAwMDAwMDBEMTMKLToxMDNCNzAwMDAwMDAwMDAwMjQwMDAzMTY5MjAyMDAwNzMwNDIwMDA0RjcKLToxMDNCODAwMDEwNDAwMDA1OEY4MjAwMDQyNDAzRkZGQjM0NDIwMDAyMzIKLToxMDNCOTAwMDAwNDMxMDI0QUY4MjAwMDQ4RjYyMDAwNDA0NDMwMDA5MzQKLToxMDNCQTAwMDkyMDIwMDA3OTIwMjAwMDY4RTAzMDAxQzhFMDQwMDBDOTUKLToxMDNCQjAwMDAwMDIxMDgwMDA0MzEwMjFBQzQ0MDAwQ0FFMDAwMDAwNTUKLToxMDNCQzAwMDkyMDIwMDA3MzA0MjAwMDQ1NDQwMDAwQjkyMDMwMDA0QUMKLToxMDNCRDAwMDkyMDMwMDA1OEUwNDAwMTQ4RTA1MDAxQzAwMDMxODgwNUIKLToxMDNCRTAwMDNDMDIwMDAxMDA4MjIwMjEwMDY1MTgyMUFFMDQwMDE0NkYKLToxMDNCRjAwMEFDNjQwMDA0OTIwMzAwMDQ5NjAyMDAwQTAwNjIxMDIxRTMKLToxMDNDMDAwMDI0NDIwMDA1MDAwMjkwODM4RkEyMDAxODEwNDAwMDBEOEUKLToxMDNDMTAwMDI3NzEwMDA4OEZBNDAwMTQwMDAzMTA4MjAyNDIzMDIzOTEKLToxMDNDMjAwMDI3QTUwMDE4MEUwMDAyNUNBRkEyMDAxODUwNDAwMDA2NDUKLToxMDNDMzAwMDhFMDUwMDFDMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDAwQzgKLToxMDNDNDAwMDI0MDAwMzNGOEUwNTAwMUMwMjIwMjAyMTBFMDAwNkU3MDEKLToxMDNDNTAwMDAyNDAzMDIxOTIwNDAwMDY4RjY1MDAwNDNDMDI3RkZGODEKLToxMDNDNjAwMDAwMDQyMDgwMDA5MTIwMjE4QzgzMDAwNDM0NDJGRkZGNTcKLToxMDNDNzAwMDAwQTIyODI0MDA2NTE4MjFBQzgzMDAwNDkyMDIwMDA3RUEKLToxMDNDODAwMDkyMDMwMDA0OTIwNTAwMDUzMDQyMDAwNDEwNDAwMDE0MjUKLToxMDNDOTAwMDk2MDcwMDA4MzBBNTAwRkYwMDA1Mjg4MDAwQjEyODIxMDQKLToxMDNDQTAwMDhDQTQwMDA0OTc0MjAxMDQ5NjA2MDAwQTMwNjMwMEZGQ0EKLToxMDNDQjAwMDMwNDJGRkZGMDA0MzEwMjEwMDQ2MTAyMTMwRTNGRkZGOTgKLToxMDNDQzAwMDAwNDMxMDIzMjQ0MkZGRDgzMDg0RkZGRjAwMDIxNDAwNzkKLToxMDNDRDAwMDAwODIyMDI1QUNBNDAwMDQwQTAwMDYxNjkyMDMwMDA3MDcKLToxMDNDRTAwMDMwQTUwMEZGMDAwNTI4ODAwMEIxMjgyMThDQTQwMDAwMjkKLToxMDNDRjAwMDk3NDIwMTA0MzA2MzAwRkYzMDQyRkZGRjAwNDMxMDIxNzAKLToxMDNEMDAwMDAwNDcxMDIzM0MwM0ZGRkYwMDgzMjAyNDMwNDJGRkZGQzUKLToxMDNEMTAwMDAwODIyMDI1QUNBNDAwMDA5MjAzMDAwNzI0MDIwMDAxQzkKLToxMDNEMjAwMDEwNjIwMDA2MDAwMDAwMDAyNDAyMDAwMzEwNjIwMDExNkYKLToxMDNEMzAwMDAwMDAwMDAwMEEwMDA2Mzk4RTAzMDAxMDk3NDIwMTA0QkIKLToxMDNENDAwMDkyMDMwMDA0OTYwNTAwMEE4RTI0MDAwQzAwNDMxMDIxMDMKLToxMDNENTAwMDAwNDUxMDIxMjQ0MkZGRjIzQzAzRkZGRjAwODMyMDI0OTIKLToxMDNENjAwMDMwNDJGRkZGMDA4MjIwMjVBRTI0MDAwQzBBMDAwNjM5RjUKLToxMDNENzAwMDhFMDMwMDEwOTc0MjAxMDQ5MjAzMDAwNDk2MDUwMDBBODYKLToxMDNEODAwMDhFMjQwMDEwMDA0MzEwMjEwMDQ1MTAyMTI0NDJGRkVFMzQKLToxMDNEOTAwMDNDMDNGRkZGMDA4MzIwMjQzMDQyRkZGRjAwODIyMDI1RTgKLToxMDNEQTAwMEFFMjQwMDEwOEUwMzAwMTAyNDAyMDAwQUE3NDIwMTQwMzYKLToxMDNEQjAwMEE3NDMwMTQyOTYwMzAwMEE5MjAyMDAwNDNDMDQwMDQwMUIKLToxMDNEQzAwMDAwNDMxMDIxQTc0MjAxNDRBNzQwMDE0Njk3NDIwMTA0NDUKLToxMDNERDAwMEE3NDIwMTQ4MjQwMjAwMDEwRTAwMDIwQUE3NDIwMTRBM0MKLToxMDNERTAwMDBFMDAwMjMzMDAwMDAwMDA4RjYyMDAwMDkyMDMwMDA0MDYKLToxMDNERjAwMDAwMDAyMDIxQUY4MjAwMDg5NzQyMDEwNDk2MDYwMDBBQzUKLToxMDNFMDAwMDMwNDJGRkZGMDA2MjE4MjEwMDYwMjgyMTNDMDMwODAwQjcKLToxMDNFMTAwMDhDNjMwNDQ0M0MwMjA4MDA4QzQyMDQ0MDAwNjUxODIxNzUKLToxMDNFMjAwMDAwNDQxMDIxMDA2NTM4MkIwMDQ3MTAyMTNDMDEwODAwOTgKLToxMDNFMzAwMEFDMjMwNDQ0M0MwMTA4MDBBQzIyMDQ0MDkyMDQwMDA0N0EKLToxMDNFNDAwMDAwODYyMDIxMjQ4NDAwMEEzMDg0RkZGRjBFMDAwMUU3NTEKLToxMDNFNTAwMDAwMDAwMDAwOTc0NDAxMDQzMDg0RkZGRjBFMDAwMUY1Q0MKLToxMDNFNjAwMDAwMDAwMDAwM0MwMjEwMDBBRjQyMDE3ODBBMDAwNkQ0QjYKLToxMDNFNzAwMDhGODIwMDIwMTQ4MjAwMjczMDYyMDAwNjk3NDIwMTA0REUKLToxMDNFODAwMDEwNDAwMDY3M0MwMjQwMDAzMDYyNDAwMDEwNDAwMDA1RDYKLToxMDNFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDAwMTUKLToxMDNFQTAwMDI0MDAwNDFBOEY0MjAxNzgwNDQwRkZGRTI0MDIwODAwMTcKLToxMDNFQjAwMEFGNDIwMTc4MjQwMjAwMDhBNzQyMDE0MEE3NDAwMTQyMTYKLToxMDNFQzAwMDhGODIwMDA0OTc0MzAxMDQzMDQyMDAwMTEwNDAwMDA3MzQKLToxMDNFRDAwMDMwNzBGRkZGMjYwM0ZGRkUyNDAyMDAwMkE3NDIwMTQ2QzYKLToxMDNFRTAwMEE3NDMwMTQ4MEEwMDA2OEMyNDAyMDAwREE3NDAwMTQ2QTIKLToxMDNFRjAwMDI0MDIwMDBEQTc0MjAxNEE4RjYyMDAwMDI0MDQwMDA4M0EKLToxMDNGMDAwMEFGODIwMDA4MEUwMDAxRTcwMDAwMDAwMDBBMDAwNjY2MEMKLToxMDNGMTAwMDAyMDAyMDIxMTA0MDAwNDIzQzAyNDAwMDkzNjIwMDAwNTkKLToxMDNGMjAwMDMwNDMwMEYwMjQwMjAwMTAxMDYyMDAwNTI0MDIwMDcwRUIKLToxMDNGMzAwMDEwNjIwMDM1OEY4MjAwMjAwQTAwMDZENTI0NDIwMDAxNUQKLToxMDNGNDAwMDhGNjIwMDAwOTc0MzAxMDQzMDUwRkZGRjMwNzFGRkZGODQKLToxMDNGNTAwMDhGNDIwMTc4MDQ0MEZGRkUzMjAyMDAwNzAwMDIxMDIzNjYKLToxMDNGNjAwMDMwNDIwMDA3MjQwMzAwMEEyNjA0RkZGRUE3NDMwMTQwNTUKLToxMDNGNzAwMEE3NDIwMTQyQTc0NDAxNDRBNzQwMDE0NkE3NTEwMTQ4NzYKLToxMDNGODAwMDhGNDIwMTA4MzA0MjAwMjAxNDQwMDAwMjI0MDMwMDA5M0YKLToxMDNGOTAwMDI0MDMwMDAxQTc0MzAxNEEwRTAwMDIwQTNDMDQwMDQwMkEKLToxMDNGQTAwMDBFMDAwMjMzMDAwMDAwMDAzQzA3MDgwMDhDRTcwNDQ0QzgKLToxMDNGQjAwMDAyMTExMDIxMjQ0MkZGRkUzQzA2MDgwMDhDQzYwNDQwN0EKLToxMDNGQzAwMDAwNDAxODIxMDBFMzM4MjEwMDAwMTAyMThGNjUwMDAwMTcKLToxMDNGRDAwMDAwRTM0MDJCMDBDMjMwMjEyNjA0MDAwODAwQzgzMDIxMzUKLToxMDNGRTAwMDMwODRGRkZGQUY4NTAwMDgzQzAxMDgwMEFDMjcwNDQ0ODMKLToxMDNGRjAwMDNDMDEwODAwQUMyNjA0NDAwRTAwMDFFNzAwMDAwMDAwNzAKLToxMDQwMDAwMDBBMDAwNjY2MDIyMDIwMjEwRTAwMDEzOTAwMDAwMDAwOEYKLToxMDQwMTAwMDhGODIwMDIwMjQ0MjAwMDFBRjgyMDAyMDNDMDI0MDAwMzkKLToxMDQwMjAwMEFGNDIwMTM4MEEwMDAzMzYwMDAwMDAwMDMwODRGRkZGNzEKLToxMDQwMzAwMDMwQTVGRkZGMDAwMDE4MjExMDgwMDAwNzAwMDAwMDAwREQKLToxMDQwNDAwMDMwODIwMDAxMTA0MDAwMDIwMDA0MjA0MjAwNjUxODIxNjcKLToxMDQwNTAwMDBBMDAwNkREMDAwNTI4NDAwM0UwMDAwODAwNjAxMDIxOEEKLToxMDQwNjAwMDEwQzAwMDA2MjRDNkZGRkY4Q0EyMDAwMDI0QTUwMDA0OTcKLToxMDQwNzAwMEFDODIwMDAwMEEwMDA2RTcyNDg0MDAwNDAzRTAwMDA4ODQKLToxMDQwODAwMDAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkFDODYwMDAwODEKLToxMDQwOTAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRjI0NjNGRkZGNzcKLToxMDQwQTAwMDE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMEEKLTowNDQwQjAwMDAwMDAwMDAxMEIKLTowQzQwQjQwMDBBMDAwMDJBMDAwMDAwMDAwMDAwMDAwMENDCi06MTA0MEMwMDAwMDAwMDAwRDc0Nzg3MDM1MkUzMDJFMzA2QTMzMDAwMEY5Ci06MTA0MEQwMDAwNTAwMDAwMDAwMDAwMDBBMDAwMDAxMzYwMDAwRUE2MDUwCi06MTA0MEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTA0MEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCi06MTA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCi06MTA0MTEwMDAwMDAwMDAwMDAwMDAwMDE2MDAwMDAwMDAwMDAwMDAwMDg5Ci06MTA0MTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCi06MTA0MTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCi06MTA0MTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTM4OEQ0Ci06MTA0MTUwMDAwMDAwMDAwMDAwMDAwNURDMDAwMDAwMDAwMDAwMDAwMDdFCi06MTA0MTYwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwRDIyCi06MTA0MTcwMDAzQzAyMDgwMDI0NDIzODYwM0MwMzA4MDAyNDYzM0IxNERFCi06MTA0MTgwMDBBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNEJCCi06MTA0MTkwMDAzQzFEMDgwMDM3QkQ3RkZDMDNBMEYwMjEzQzEwMDgwMDQ3Ci06MTA0MUEwMDAyNjEwMDBBODNDMUMwODAwMjc5QzM4NjAwRTAwMDQwNzVECi06MTA0MUIwMDAwMDAwMDAwMDAwMDAwMDBEOEY4NjAwM0MzQzAzOTAwMEQyCi06MTA0MUMwMDAzQzAyODAwMDAwODYyODI1MDBBMzIwMjVBQzQ0MDAyMDY2Ci06MTA0MUQwMDAzQzAzODAwMDhDNjcwMDIwMDRFMEZGRkUwMDAwMDAwMDJDCi06MTA0MUUwMDAwM0UwMDAwODAwMDAwMDAwMEEwMDAwNDEyNDA0MDAwMTcwCi06MTA0MUYwMDA4Rjg1MDAzQzNDMDQ4MDAwMzQ4MzAwMDEwMEEzMTAyNTFGCi06MTA0MjAwMDAwM0UwMDAwOEFDODIwMDIwMDNFMDAwMDgwMDAwMTAyMTU5Ci06MTA0MjEwMDAzMDg0RkZGRjMwQTVGRkZGMTA4MDAwMDcwMDAwMTgyMTQ5Ci06MTA0MjIwMDAzMDgyMDAwMTEwNDAwMDAyMDAwNDIwNDIwMDY1MTgyMTg1Ci06MTA0MjMwMDAxNDgwRkZGQjAwMDUyODQwMDNFMDAwMDgwMDYwMTAyMTA3Ci06MTA0MjQwMDAxMEMwMDAwNzAwMDAwMDAwOENBMjAwMDAyNEM2RkZGRjgxCi06MTA0MjUwMDAyNEE1MDAwNEFDODIwMDAwMTRDMEZGRkIyNDg0MDAwNEU5Ci06MTA0MjYwMDAwM0UwMDAwODAwMDAwMDAwMTBBMDAwMDgyNEEzRkZGRkU2Ci06MTA0MjcwMDBBQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDAyNDAyRkZGRkU4Ci06MTA0MjgwMDAyNDYzRkZGRjE0NjJGRkZBMjQ4NDAwMDQwM0UwMDAwOEEzCi06MTA0MjkwMDAwMDAwMDAwMDkwQUEwMDMxOEZBQjAwMTA4Q0FDMDA0MEYxCi06MTA0MkEwMDAzQzAzMDBGRjhENjgwMDA0QUQ2QzAwMjA4Q0FEMDA0NDIxCi06MTA0MkIwMDAwMEUwNjAyMTM0NjJGRkZGQUQ2RDAwMjQ4Q0E3MDA0ODUwCi06MTA0MkMwMDAzQzA5RkYwMDAxMDlDMDI0QUQ2NzAwMjg4Q0FFMDA0Q0ZBCi06MTA0MkQwMDAwMTgyQzgyNDAzMTk3ODI1QUQ2RjAwMDRBRDZFMDAyQzRGCi06MTA0MkUwMDA4Q0FEMDAzODMxNEEwMEZGQUQ2RDAwMUM5NEE5MDAzMjNFCi06MTA0MkYwMDAzMTI4RkZGRkFENjgwMDEwOTBBNzAwMzBBNTYwMDAwMkQ0Ci06MTA0MzAwMDBBMTYwMDAwNEExNjcwMDAwOTBBMzAwMzIzMDYyMDBGRkFBCi06MTA0MzEwMDAwMDAyMTk4MjEwNjAwMDA1MjQwNTAwMDExMDY1MDAwRURFCi06MTA0MzIwMDAwMDAwMDAwMDAzRTAwMDA4QTE2QTAwMDE4Q0Q4MDAyODBBCi06MTA0MzMwMDAzNTRBMDA4MEFENzgwMDE4OENDRjAwMTRBRDZGMDAxNEEyCi06MTA0MzQwMDA4Q0NFMDAzMEFENkUwMDA4OENDNDAwMkNBMTZBMDAwMTM4Ci06MTA0MzUwMDAwM0UwMDAwOEFENjQwMDBDOENDRDAwMUNBRDZEMDAxOEFFCi06MTA0MzYwMDA4Q0M5MDAxNEFENjkwMDE0OENDODAwMjRBRDY4MDAwODI1Ci06MTA0MzcwMDA4Q0M3MDAyMEFENjcwMDBDOENDMjAwMTQ4QzgzMDA3MEM5Ci06MTA0MzgwMDAwMDQzQzgyQjEzMjAwMDA3MDAwMDAwMDA4Q0MyMDAxNDVCCi06MTA0MzkwMDAxNDRDRkZFNDAwMDAwMDAwMzU0QTAwODAwM0UwMDAwOEYwCi06MTA0M0EwMDBBMTZBMDAwMThDODIwMDcwMEEwMDAwQjcwMDAwMDAwMEMyCi06MTA0M0IwMDA5MDg5MDAzMDI3QkRGRkY4OEZBODAwMUNBM0E5MDAwMDNBCi06MTA0M0MwMDA4RkEzMDAwMDNDMERGRjgwMzVBMkZGRkY4Q0FDMDAyQ0JBCi06MTA0M0QwMDAwMDYyNTgyNEFGQUIwMDAwQTEwMDAwMDQwMEMwNTgyMUM3Ci06MTA0M0UwMDBBN0EwMDAwMjhEMDYwMDA0MDBBMDQ4MjEwMTY3QzgyMTkzCi06MTA0M0YwMDA4RkE1MDAwMDAwODA1MDIxM0MxOEZGN0YwMzJDMjAyNjUxCi06MTA0NDAwMDAzQzBFMDBGRjJDOEMwMDAxMzcwRkZGRkYzNUNERkZGRjY2Ci06MTA0NDEwMDAzQzAyRkYwMDAwQUZDODI0MDBFREMwMjQwMEMyNzgyNDk1Ci06MTA0NDIwMDAwMDBDMURDMDAzMjM2ODI1MDFGODcwMjVBRDBEMDAwMEE4Ci06MTA0NDMwMDBBRDBFMDAwNDhEMjQwMDI0QUZBRDAwMDBBRDA0MDAwOEQzCi06MTA0NDQwMDA4RDJDMDAyMDI0MDRGRkZGQUQwQzAwMEM5NTQ3MDAzMjlBCi06MTA0NDUwMDAzMEU2RkZGRkFEMDYwMDEwOTE0NTAwNDgzMEEyMDBGRjk2Ci06MTA0NDYwMDAwMDAyMTlDMjUwNjAwMDAxOEQyNDAwMzRBRDA0MDAxNDE0Ci06MTA0NDcwMDA4RDQ3MDAzODhGQUEwMDE4MjdCRDAwMDhBRDBCMDAyODEzCi06MTA0NDgwMDBBRDBBMDAyNEFEMDcwMDFDQUQwMDAwMkNBRDAwMDAxOEUzCi06MTA0NDkwMDAwM0UwMDAwOEFEMDAwMDIwMjdCREZGRTBBRkIyMDAxODI4Ci06MTA0NEEwMDBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUM5MDk4MDAzMDQ3Ci06MTA0NEIwMDAwMEMwODgyMTNDMEQwMEZGMzMwRjAwN0ZBMENGMDAwMDFCCi06MTA0NEMwMDA5MDhFMDAzMTM1QUNGRkZGM0MwQUZGMDBBMENFMDAwMTBBCi06MTA0NEQwMDA5NEE2MDAxRUEyMjAwMDA0OENBQjAwMTQ4RTI5MDAwNEI4Ci06MTA0NEUwMDAwMEEwODAyMTAxNkMyODI0MDEyQTQwMjQwMDgwOTAyMTEyCi06MTA0NEYwMDAwMTA1MjAyNUE2MjYwMDAyQUUyNDAwMDQyNjA1MDAyMDgyCi06MTA0NTAwMDAyNjI0MDAwODBFMDAwMDYzMjQwNjAwMDI5MjQ3MDAzMEIzCi06MTA0NTEwMDAyNjA1MDAyODI2MjQwMDE0MDAwNzFFMDAwMDAzMTYwM0E5Ci06MTA0NTIwMDAyNDA2MDAwNDA0NDAwMDAzMjQwM0ZGRkY5NjU5MDAzMkQwCi06MTA0NTMwMDAzMzIzRkZGRjBFMDAwMDYzQUUyMzAwMTAyNjI0MDAyNDY3Ci06MTA0NTQwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDA1Ci06MTA0NTUwMDAyNDA1MDAwMzAwMDAzMDIxMEEwMDAwNkQyN0JEMDAyMDYzCi06MTA0NTYwMDAyN0JERkZEOEFGQjEwMDFDQUZCMDAwMThBRkJGMDAyMDBGCi06MTA0NTcwMDA5MEE5MDAzMDI0MDIwMDAxMDBFMDUwMjEzMTIzMDAzRkM3Ci06MTA0NTgwMDAwMEEwNDAyMThGQjAwMDQwMDA4MDg4MjEwMEMwNDgyMTU5Ci06MTA0NTkwMDAxMDYyMDAxNDhGQTcwMDM4MjQwQjAwMDUwMEEwMjAyMTEyCi06MTA0NUEwMDAwMEMwMjgyMTEwNkIwMDEzMDIwMDMwMjEwRTAwMDBGOTFBCi06MTA0NUIwMDAwMDAwMDAwMDkyMjUwMDdDMzBBNDAwMDIxMDgwMDAwMzVGCi06MTA0NUMwMDAyNjAzMDAzMEFFMDAwMDMwMjYwMzAwMzQ4RkJGMDAyMEU5Ci06MTA0NUQwMDA4RkIxMDAxQzhGQjAwMDE4MDA2MDEwMjEwM0UwMDAwOEFDCi06MTA0NUUwMDAyN0JEMDAyODBFMDAwMDc4QUZCMDAwMTAwQTAwMDE0MDdGCi06MTA0NUYwMDAwMDAwMDAwMDhGQTMwMDNDMDEwMDIwMjEwMTIwMjgyMUExCi06MTA0NjAwMDAwMTQwMzAyMUFGQTMwMDEwMEUwMDAwQkZBRkIwMDAxNDc2Ci06MTA0NjEwMDAwQTAwMDE0MDAwMDAwMDAwM0MwNTgwMDA4Q0EzMEUxMDQxCi06MTA0NjIwMDA4Rjg0MDA0NEFDODMwMDIwOENBMjBFMTgwM0UwMDAwOEE1Ci06MTA0NjMwMDBBQzgyMDAyNDNDMDU4MDAwOENBMzBFMTQ4Rjg0MDA0NEJGCi06MTA0NjQwMDBBQzgzMDAyMDhDQTIwRTFDMDNFMDAwMDhBQzgyMDAyNDg2Ci06MTA0NjUwMDA5MzgyMDAwQzEwNDAwMDFCMjQ4MzAwMEYyNDA0RkZGMDAxCi06MTA0NjYwMDAwMDY0MzgyNDEwRTAwMDE5OTc4QjAwMTA5Nzg0MDAwRTI2Ci06MTA0NjcwMDA5Mzg5MDAwRDNDMEE2MDFDMEEwMDAxN0IwMTY0NDAyMzAxCi06MTA0NjgwMDAwMTAzNzAyMTAwNjQyODIzMTEyNjAwMDIzMUMyRkZGRkJDCi06MTA0NjkwMDAzMEEyRkZGRjAwNDczMDJCNTBDMDAwMEUwMEU0NDgyMTNECi06MTA0NkEwMDA4RDREMDAwQzMxQTNGRkZGMDAwMzY0MDAwMDBDMkMwM0IwCi06MTA0NkIwMDAwNEExRkZGMzAwMDAzMDIxMzA2MzdGRkYwQTAwMDE3MzgzCi06MTA0NkMwMDAyNDA2MDAwMTAzRTAwMDA4MDAwMDAwMDA5Nzg0MDAwRUFCCi06MTA0NkQwMDAwMEU0NDgyMTMxMjNGRkZGMzE2OEZGRkYwMDY4MzgyQkQ5Ci06MTA0NkUwMDA1NEUwRkZGOEE3ODMwMDBFOTM4QTAwMEQxMTQwMDAwNUU3Ci06MTA0NkYwMDAyNDBGMDAwMTAwNkJDMDIzQTM4MDAwMEQwM0UwMDAwODFECi06MTA0NzAwMDBBNzk4MDAwRTAwNkJDMDIzQTM4RjAwMEQwM0UwMDAwOEU0Ci06MTA0NzEwMDBBNzk4MDAwRTAzRTAwMDA4MDAwMDAwMDAyN0JERkZFODk2Ci06MTA0NzIwMDBBRkIwMDAxMDMwODRGRkZGM0MxMDgwMDA5M0E4MDAyQjM2Ci06MTA0NzMwMDBBRkJGMDAxNEE2MDQwMTQ0OTYwQTBFMTYzMEM2MDBGRjRGCi06MTA0NzQwMDA4RkE5MDAzMEE2MEEwMTQ2QUUwNTAxNDhBMjA2MDE1MjEzCi06MTA0NzUwMDBBNjA4MDE1QUFFMDcwMTYwOEZBMzAwMkNBNjA5MDE1OEQ0Ci06MTA0NzYwMDAwMTIwMjAyMTBFMDAwMTY3QUUwMzAxNTQzQzAyMTAwMDFECi06MTA0NzcwMDBBRTAyMDE3ODhGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODc0Ci06MTA0NzgwMDAyN0JEMDAxODhGODUwMDAwMjQ4NDAwMDcyN0JERkZGODhGCi06MTA0NzkwMDAzMDg0RkZGODNDMDY4MDAwOTRDQjAwOEEzMTZBRkZGRjJBCi06MTA0N0EwMDBBRkFBMDAwMDhGQTkwMDAwMDEyNTQwMjMyNTA3RkZGRkM1Ci06MTA0N0IwMDAzMEUzMUZGRjAwNjQxMDJCMTQ0MEZGRjcwMDA1Njg4MkYwCi06MTA0N0MwMDAwMDBEMjg4MDM0Q0M0MDAwMDBBQzEwMjEwM0UwMDAwODJDCi06MTA0N0QwMDAyN0JEMDAwODhGODIwMDAwMjQ4NjAwMDczMEM1RkZGODNGCi06MTA0N0UwMDAwMEEyMTgyMTMwNjQxRkZGMDNFMDAwMDhBRjg0MDAwMDFFCi06MTA0N0YwMDA4Rjg1MDA0NDhGOEEwMDNDMjdCREZGQjAzQzA0ODAwMEI5Ci06MTA0ODAwMDBBRkI3MDA0NEFGQjQwMDM4QUZCMTAwMkNBRkJGMDA0ODIxCi06MTA0ODEwMDBBRkI2MDA0MEFGQjUwMDNDQUZCMzAwMzRBRkIyMDAzMDJDCi06MTA0ODIwMDBBRkIwMDAyODhDODcwMTA0OENBOTAwMjRBQzhBMDA4MERBCi06MTA0ODMwMDA4Q0E4MDAyMDAwRTk4ODIzMDAwMEI4MjFBQzg4MEUxMDY1Ci06MTA0ODQwMDA4Q0E2MDAyNDAwMDBBMDIxQUM4NjBFMTg4QzgyMEUxMENECi06MTA0ODUwMDBBQzgyMEUxNDhDODMwRTE4QUM4MzBFMUMxMjIwMDBGQjRECi06MTA0ODYwMDAzQzE2ODAwMDkzNkIwMDA4MTE2MDAwRjEwMDAwMDAwMDBFCi06MTA0ODcwMDA5NzZFMDAxMDMxQ0RGRkZGMDIyRDYwMkIxNTgwMDBFQ0VDCi06MTA0ODgwMDAwMDAwMDAwMDk3NzAwMDEwMzIwRkZGRkZBRUNGMEUwMDQ3Ci06MTA0ODkwMDAzQzA1ODAwMDhDQjMwMDAwMzI3MjAwMDgxMjQwRkZGRDFFCi06MTA0OEEwMDAwMDAwMDAwMDk0QjUwRTA4OENBNzBFMDQzMkE1RkZGRjhGCi06MTA0OEIwMDAzMEI0MDAwMTEyODAwMEUxMDAwMDAwMDAwMDAwMDAwRDkzCi06MTA0OEMwMDAzMEI5QTA0MDI0MTgwMDQwMTMzODAxMTczMEI0QTAwMEJDCi06MTA0OEQwMDAxMjgwMDBEQzAwMDAwMDAwOTM3MzAwMDgxMjYwMDAwOEUyCi06MTA0OEUwMDAwMDAwMDAwMDk3NjkwMDEwMzEyMkZGRkYwMEUyMjAyQjNBCi06MTA0OEYwMDAxMDgwMDAwMzMwQTYwMDQwMTBDMDAwRDIwMDAwMDAwMDZECi06MTA0OTAwMDBBNzg1MDA0MEFGODcwMDM4OTM2QTAwMDgwMjIwMzgyMTRECi06MTA0OTEwMDBBRkIxMDAyMDE1NDAwMEYxMjdCNDAwMjBBRjYwMDAwQ0JCCi06MTA0OTIwMDA5Nzg1MDA0MDMwQjE0MDAwMTYyMDAwMDIyNDAzMDAxNjk1Ci06MTA0OTMwMDAyNDAzMDAwRTI0MTU0MDA3QTM2MzAwMEFBRjc1MDAxNDdBCi06MTA0OTQwMDA5MzkwMDA0MjhGNkYwMDE0MzIxOTAwMDEwMDE5QzI0MDg5Ci06MTA0OTUwMDAwMUY4NDAyNUFGNjgwMDE0OTc4NzAwNDA4RjYzMDAxNDZBCi06MTA0OTYwMDAzMEVFMDAxMDAwNkU2ODI1QUY2RDAwMTQ5NzhDMDA0MDhCCi06MTA0OTcwMDAzMThCMDAwODExNjAwMTY1MDAwMDAwMDA4RjY1MDAxNDk0Ci06MTA0OTgwMDAzQzBCMTAwMDNDMEE4MDAwMDBBQjg4MjVBRjcxMDAxNDdFCi06MTA0OTkwMDA5NTQ2MEUwQTNDMDk4MTAwMjQxMzAwMEUzMEMyRkZGRjI5Ci06MTA0OUEwMDAwMDQ5MjAyNUFGNjQwMDA0QTM3MzAwMDI5MzdGMDAwQTJFCi06MTA0OUIwMDAzNDA2RkZGQzI3RjIwMDA0QTM3MjAwMEE5NzhEMDA0MDIyCi06MTA0OUMwMDAzMUFDMjAwMDExODAwMTU3MDAwMDAwMDAzQzA3ODAwMDNFCi06MTA0OUQwMDA5NzhEMDA0MDk0RUMwRTBDOTc5MTAwNDAwMDBENTg0MkNBCi06MTA0OUUwMDAzMTg1QzAwMDMxNkEwMDAzMDAwNTEzMDMzMjI5MTAwMDJECi06MTA0OUYwMDAwMTQyOTgyNTAwMDkyMjAzMDI2NEY4MjUwMDFGOTBDMDk3Ci06MTA0QTAwMDBBNzcyMDAxMjk3OTUwMDQwOTM3OTAwMEEwMDE1ODE4MkUxCi06MTA0QTEwMDAzMjE4MDAzQzAzMTk3ODIxMjVFODAwM0NBMzY4MDAwOUZFCi06MTA0QTIwMDA5NEVFMEUwQzMxQzMzRkZGQTc2MzAwMTA5NzYzMDAxMjkyCi06MTA0QTMwMDA5MzY3MDAwOTAwRTM3MDIxMjVDRDAwMDIzMUFDMDAwNzI3Ci06MTA0QTQwMDAwMDBDNTgyMzMxNjUwMDA3QTM2NTAwMEI5MzcxMDAwOTIyCi06MTA0QTUwMDA5NzY0MDAxMjk3NkEwMDEwMzIyMjAwRkY4RjkxMDAzODhECi06MTA0QTYwMDA5NzlGMDA0MDAwNDQ0ODIxMDEyQTk4MjEwMjY2OTAyMTI2Ci06MTA0QTcwMDAzM0Y1MDA0MDEyQTAwMDA1MzI0NkZGRkYwMEQxNDAyQjY1Ci06MTA0QTgwMDAzQzEyODAwMDExMDAwMDE2MDAwMDk4MjEwMjI2NzgyQkFECi06MTA0QTkwMDAxNUUwMDEzNjhGQTcwMDIwM0MxODgwMDA4RjEwMEUxNEZGCi06MTA0QUEwMDAzQzA1ODAwMEFGMTAwRTEwOEYxOTBFMUNBRjE5MEUxOEE4Ci06MTA0QUIwMDBBRjA2MEUwMDhDQjIwMDAwMzI1NTAwMDgxMkEwRkZGREI4Ci06MTA0QUMwMDAwMDAwMDAwMDk0QkYwRTA4MDBDMDg4MjEwMDAwOTAyMTYzCi06MTA0QUQwMDBBNzlGMDA0MDhDQTYwRTA0MjQxMzAwMDFBRjg2MDAzODY3Ci06MTA0QUUwMDA5NzY5MDAxMDMxMzVGRkZGOEU4QzAwMDAwMTkxMjAyMzYzCi06MTA0QUYwMDAxMDgwMDExOEFFODQwMDAwOTM2NzAwMDgxNEUwMDBEODBECi06MTA0QjAwMDAwMDAwMDAwMDBFMDAwMUI0MjQwNDAwMTA4RjhFMDA0ODQ1Ci06MTA0QjEwMDAzQzAzMzIwMDAwNDAyODIxMzFDNjAwRkYwMDA2M0MwMDYzCi06MTA0QjIwMDAwMEUzNjAyNTI1Q0QwMDAxQUY4RDAwNDhBQzRDMDAwMEFFCi06MTA0QjMwMDA5MzYyMDAwOTk3NjQwMDEyOTM3RjAwMEEzMDRBMDBGRkQ1Ci06MTA0QjQwMDAzMDhCRkZGRjAxNEI0ODIxMDAwOUNDMDAzM0YwMDBGRjAwCi06MTA0QjUwMDAwMzMwQzAyNUFDQjgwMDA0OEY4RjAwNDg5Nzg4MDA0MDEwCi06MTA0QjYwMDAzMTAzMjAwMDEwNjAwMTAzQUNBRjAwMDg5NzZGMDAxMjAyCi06MTA0QjcwMDAzMUU4RkZGRjA2NDAwMTAxQUNBODAwMEM5NzkwMDA0MDBGCi06MTA0QjgwMDAzMjA1MDAwODE0QTAwMDAyMjYyODAwMDYyNjI4MDAwMjhDCi06MTA0QjkwMDAzQzA0ODAwMDk0OEIwRTE0OEM4NTBFMUM4RjY3MDAwNERGCi06MTA0QkEwMDA5MzZBMDAwMjMxNjRGRkZGMzE0OTAwRkZBRkE5MDAxMDkyCi06MTA0QkIwMDA4RjdGMDAxNEFGQTgwMDE4QUZCRjAwMTQwRTAwMDE5QTM5Ci06MTA0QkMwMDAwMDAwMDAwMDI0MDQwMDEwMEUwMDAxQzgwMDAwMDAwMEQ2Ci06MTA0QkQwMDA4RTkyMDAwMDE2NDAwMDA1MDAwMDAwMDA4Rjc5MDAxNDNFCi06MTA0QkUwMDAyNDA1RkZCRjAzMjVBMDI0QUY3NDAwMTQ4RjY5MDAwQ0I3Ci06MTA0QkYwMDAwMTM1RjgyMUFGN0YwMDBDOTM3NTAwMDgxNkEwMDAwODVFCi06MTA0QzAwMDAwMDAwMDAwMDEyNjAwMDA2MDAwMDAwMDA4RjZCMDAxNDFFCi06MTA0QzEwMDAzQzBDRUZGRjM1ODRGRkZFMDE2NDUwMjRBRjZBMDAxNEEyCi06MTA0QzIwMDBBMzczMDAwODhGQTcwMDIwMEEwMDAzMTYwMjIwMjAyMThBCi06MTA0QzMwMDBBRUQxMEUwMDBBMDAwMUY4M0MwNTgwMDAxNEUwRkYyMTBGCi06MTA0QzQwMDAzMEI5QTA0MDBFMDAwMTYwMDAwMEEwMjEyRTkxMDAwMUFCCi06MTA0QzUwMDAwMjM3QjAyNTEyQzAwMDE3OEZCRjAwNDg4Rjg1MDAzQzc3Ci06MTA0QzYwMDAyNDE3MEYwMDEwQjcwMENEM0MwNDgwMDA4Qzk5MDE3ODA4Ci06MTA0QzcwMDAwNzIwRkZGRTI0MTUwRjAwNTBCNTAwRUIzQzA0ODAwMDE4Ci06MTA0QzgwMDA4Qzg5MEUxNDI0MDUwMjQwM0MxNDEwMDBBQzg5MDE0NEE4Ci06MTA0QzkwMDA4QzlGMEUxQ0FDOUYwMTQ4QTA4MDAxNTJBNDgwMDE1QTM5Ci06MTA0Q0EwMDBBQzgwMDE2MEE0ODAwMTU4QUM4NTAxNTRBQzk0MDE3OEJCCi06MTA0Q0IwMDA4RkJGMDA0ODhGQjcwMDQ0OEZCNjAwNDA4RkI1MDAzQ0NGCi06MTA0Q0MwMDA4RkI0MDAzODhGQjMwMDM0OEZCMjAwMzA4RkIxMDAyQzE2Ci06MTA0Q0QwMDA4RkIwMDAyODAzRTAwMDA4MjdCRDAwNTA4RjkxMDAzOEY2Ci06MTA0Q0UwMDA5NzkzMDA0MDNDMTI4MDAwMDIyMEE4MjEzMjZBMDA0MEM1Ci06MTA0Q0YwMDAxNTQwRkY3RDAwMDA5ODIxOTc2QjAwMTA4Rjg1MDAzOENDCi06MTA0RDAwMDAzMTYyRkZGRjEwNDUwMEEyMDAwMDIwMjEwMDgwQTAyMTk5Ci06MTA0RDEwMDAxMDgwMDBFNTAwRTA4ODIxMTYyMEZFRDIwMDAwMDAwMDhGCi06MTA0RDIwMDAwQTAwMDJFNzJFOTEwMDAxM0MwMzgwMDA4QzdGMDE3ODhECi06MTA0RDMwMDAwN0UwRkZGRTI0MDQwODAwOEY4NjAwMDBBQzY0MDE3OEMxCi06MTA0RDQwMDAzQzAzODAwMDk0NkMwMDhBMzE4QkZGRkYwMTY2NTAyMzg2Ci06MTA0RDUwMDAyNTQ5RkZGRjMxMjgxRkZGMkQwMjAwMDgxNDQwRkZGOUVECi06MTA0RDYwMDAwMDAwMDAwMDhGOEUwMDQ4MzQ2RjQwMDA4RjgzMDAzQ0FECi06MTA0RDcwMDAwMEUwQTAyMTI0MEQwRjAwMjVDNzAwMDFBRjg3MDA0OEU3Ci06MTA0RDgwMDAwMENGMzAyMTAyMzQ4ODIzM0MwODgwMDAzMUQ1MDBGRjU5Ci06MTA0RDkwMDAxMDZEMDAwNTI0MDcwMDAxOTM5MzAwNDIzMjcyMDAwMTU4Ci06MTA0REEwMDAwMDEyODI0MDM2MDcwMDAxMDAxNTE0MDAzQzA5MDEwMDgyCi06MTA0REIwMDAwMDQ5MjAyNUFDQzQwMDAwOEY5RjAwNDgzMEI5MDAzNjYwCi06MTA0REMwMDAzMEI4MDAwOEFDREYwMDA0MTMwMDAwOTAwMEY5OTgyNTBCCi06MTA0REQwMDA5NTA3MEUwQThGOEUwMDAwM0MwMzgxMDAzMEVERkZGRjI3Ci06MTA0REUwMDAyNUNCMDAwODAxQTMyODI1M0MwQzEwMDAzMTZBMUZGRkM5Ci06MTA0REYwMDAyNjkyMDAwNjI0MDYwMDBFQUQwNTAxNjAwMjZDOTgyNTdGCi06MTA0RTAwMDBBNTA2MDE1QUFGOEEwMDAwQTUxMjAxNTgxNjIwMDAwODE1Ci06MTA0RTEwMDAzQzEwODAwMDhGOTkwMDNDMjQxODBGMDA1MzM4MDAwMjhBCi06MTA0RTIwMDAyNDE3MDAwMTM2NzMwMDQwMEUwMDAxNTkzQzEwODAwMDI5Ci06MTA0RTMwMDA4RTFGMEUxNDAyNDAyMDIxQUUxRjAxNDQ4RTEyMEUxQzQ0Ci06MTA0RTQwMDBBRTEyMDE0OEEyMTUwMTUyQUUxMzAxNTQwRTAwMDE2N0MzCi06MTA0RTUwMDAzQzE1MTAwMEFFMTUwMTc4MEEwMDAzMTkwMDAwMDAwMDhGCi06MTA0RTYwMDA5Mzc4MDAwOTk3NjMwMDEyOTM2ODAwMEIzMzBGMDBGRkRCCi06MTA0RTcwMDAwMUUzMzgyMTMxMDIwMEZGMDBFMjcwMjEyNUQwMDAwQTUxCi06MTA0RTgwMDAzMjEwRkZGRjBFMDAwMUI0MDIwMDIwMjE4Rjg2MDA0ODdGCi06MTA0RTkwMDAzQzE5NDEwMDNDMDc4MDAwMjRDRDAwMDFBRjhEMDA0ODQzCi06MTA0RUEwMDA5MzZDMDAwOTk3NjQwMDEyMzBDNjAwRkYzMThBMDBGRjNFCi06MTA0RUIwMDAzMDhCRkZGRjAxNEI0ODIxMDAwNjJDMDAyNTNGMDAwMkVDCi06MTA0RUMwMDAwMEJGQzAyNTAzMTk3ODI1QUM0RjAwMDA4RjY4MDAwQzg3Ci06MTA0RUQwMDA5NEVFMEUxNDAxMTIxODI1QUM0MzAwMDQ4Q0U1MEUxQzUwCi06MTA0RUUwMDA4RjY3MDAwNDkzNkQwMDAyMzFDNEZGRkYzMUFDMDBGRkY3Ci06MTA0RUYwMDBBRkFDMDAxMDhGNjIwMDE0QUZCMTAwMTgwRTAwMDE5QTIxCi06MTA0RjAwMDBBRkEyMDAxNDBBMDAwMkM1MDIwMDIwMjFBRjYwMDAwNDE1Ci06MTA0RjEwMDBBMzYwMDAwMjk3OEQwMDQwMzFBQzIwMDAxNTgwRkVBQkVECi06MTA0RjIwMDAwMDAwMzAyMUE3NjAwMDEyOTc5MDAwNDA5Mzc4MDAwQTlCCi06MTA0RjMwMDAzQzAzODAwMDMyMTkxRjAwMDAxOTc5ODMwMUY4NDAyMUQ5Ci06MTA0RjQwMDAyNTA3MDAyOEEzNjcwMDA5OTQ2RTBFMEMwQTAwMDI1RTc0Ci06MTA0RjUwMDBBNzZFMDAxMDhGNkUwMDE0MzVDRDAwNDAwRTAwMDE1OTcxCi06MTA0RjYwMDBBRjZEMDAxNDBBMDAwMjkxMDAwMDAwMDAwQTAwMDMxNjUxCi06MTA0RjcwMDAwMDAwMjAyMTA2NDFGRjAxQUNBMDAwMEM4Q0I4MDAwQzAxCi06MTA0RjgwMDAzQzE5ODAwMDAzMTk5MDI1MEEwMDAyQjJBQ0IyMDAwQzUzCi06MTA0RjkwMDAwMDAwOTAyMTBBMDAwMjhEMjQxMzAwMDExMjgwMDAwNUY4Ci06MTA0RkEwMDAzQzBEODAwMDk1QTYwRTA4MzBEMzAwNDAxMjYwMDA0MkYwCi06MTA0RkIwMDAwMDAwMDAwMDhDOTAwMTc4MDYwMEZGRkUwMDAwMDAwMDU5Ci06MTA0RkMwMDA5NDkyMEUxMDNDMDMwNTAwMjQwNzIwMDAzMjU4RkZGRjg2Ci06MTA0RkQwMDAwMzAzNzgyNUFDOEYwMTRDOEM4ODBFMTQzQzBFMTAwMDE2Ci06MTA0RkUwMDBBQzg4MDE0NDhDODIwRTFDQUM4MjAxNDhBMDgwMDE1MjI2Ci06MTA0RkYwMDBBNDgwMDE1QUFDODAwMTYwQTQ4MDAxNThBQzg3MDE1NEEwCi06MTA1MDAwMDBBQzhFMDE3ODBBMDAwMkVFM0MwNDgwMDA4RjkwMDAwMDE0Ci06MTA1MDEwMDAyNjkyMDAwMkE1MTIwMTU4MjYwRjAwMDgzMUU4MUZGRjUyCi06MTA1MDIwMDAwQTAwMDM1NkFGODgwMDAwQUM4MDAxNEMxMjgwMDAxOUMyCi06MTA1MDMwMDAwMDAwMDAwMDhDOEEwRTEwQUM4QTAxNDQ4QzgzMEUxODhDCi06MTA1MDQwMDAzQzBDODAwMDI0MTYwMDQwQUM4MzAxNDg4RkJGMDA0ODEwCi06MTA1MDUwMDBBMTgwMDE1MjhGQjcwMDQ0QTU4MDAxNUE4RkI1MDAzQzUyCi06MTA1MDYwMDBBRDgwMDE2MDhGQjQwMDM4QTU4MDAxNTg4RkIzMDAzNDQzCi06MTA1MDcwMDBBRDk2MDE1NDhGQjIwMDMwOEZCNjAwNDA4RkIxMDAyQzM2Ci06MTA1MDgwMDA4RkIwMDAyODNDMDQxMDAwMjdCRDAwNTAwM0UwMDAwODRBCi06MTA1MDkwMDBBRDg0MDE3ODhDOEIwRTE0QUM4QjAxNDQ4QzgzMEUxQzc4Ci06MTA1MEEwMDAwQTAwMDNFNDNDMEM4MDAwMEUwMDAxNjAyRTkxMDAwMTE4Ci06MTA1MEIwMDAwQTAwMDJFODAyMzdCMDI1MDAwMDAwMDAwMDAwMDAwREUxCi06MTA1MEMwMDAwMDAwMDAwMDI0MDAwMzNBMEEwMDAzQzAzQzA0ODAwMEYyCi06MTA1MEQwMDAyN0JERkZFMEFGQkYwMDFDM0MxRjIwRkYzQzA3NjAwMDY2Ci06MTA1MEUwMDAzQzA5ODAwMDI0MDIwMDEwMzdGOUZGRkRBQ0UyMzAwOEQzCi06MTA1MEYwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRDM5MEUwMDYwCi06MTA1MTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCi06MTA1MTEwMDAwMDAwMDAwMDNDMTgwMEZGMzcxMkZGRkRBRDMyMEUwMDBBCi06MTA1MTIwMDAzQzBCNjAwNDhENzA1MDAwMjQxMUZGN0YzQzBFMDAwMjg4Ci06MTA1MTMwMDAwMjExNzgyNDM1RUMzODBDMzVDRDAxMDlBQ0VENEMxODUyCi06MTA1MTQwMDAyNDBBMDAwOUFENkM1MDAwOENFODA0MzhBRDJBMDAwODMwCi06MTA1MTUwMDBBRDIwMDAxNDhDRTU0QzFDMzEwNkZGRkYzOEM0MkY3MUM0Ci06MTA1MTYwMDAwMDA1MUUwMjMwNjIwMDBGMjQ4NkMwQjMxMDQwMDAwNzA1Ci06MTA1MTcwMDBBRjgyMDAwODhDRTU0QzFDM0MwOTAwMUYzNTI4RkMwMDYwCi06MTA1MTgwMDAwMEE4MTgyNDAwMDMyMUMyQUY4NDAwMDQ4Q0YxMDgwODkxCi06MTA1MTkwMDAzQzBGNTcwOTI0MTJGMDAwMDIzMjcwMjQzNUYwMDAxMDQxCi06MTA1MUEwMDAwMUQwNjAyNjAxQ0Y2ODI2MkRBQTAwMDEyRDhCMDAwMUI5Ci06MTA1MUIwMDAwMTRCMzgyNTUwRTAwMDA5QTM4MDAwMEMzQzAyNjAxQzI0Ci06MTA1MUMwMDA4QzU5MDAwODI0MUYwMDAxQTM5RjAwMEMzMzM4N0MwMDc5Ci06MTA1MUQwMDBBNzk4MDAxMEE3ODAwMDBFQTM4MDAwMERBRjgwMDA0OEE0Ci06MTA1MUUwMDAxNEMwMDAwM0FGODAwMDAwM0MwNjYwMDBBQ0MwNDQyQzNCCi06MTA1MUYwMDAwRTAwMDRCNjNDMTA4MDAwMEUwMDBEREYwMDAwMDAwMDIxCi06MTA1MjAwMDAzQzExMDgwMDI2MzEzOEM4M0MxMjA4MDAyNjUyMzk0OEEzCi06MTA1MjEwMDA4RTA1MDAwMDM4QTMwMDAxMzA2NDAwMDExNDgwRkZGQ0ZCCi06MTA1MjIwMDAwMDAwMDAwMDhFMDYwMTAwM0MwQzgwMEEyNDBBRkY4MDZBCi06MTA1MjMwMDAyNEM3MDI0MDMwRUIwMDdGMDE2QzQ4MjEwMEVBNDAyNDgzCi06MTA1MjQwMDBBRTA2MDAyMEFGODkwMDQ0QUUwODAwMjQzQzAzODAwMDc1Ci06MTA1MjUwMDBBRjg2MDAzQzhDNkQwMTc4MDVBMEZGRkUyNDE5MDgwMDg0Ci06MTA1MjYwMDBBQzc5MDE3ODkwNzgwMTA4QTM5ODAwNDI5MzhGMDA0MkFFCi06MTA1MjcwMDAzMUVFMDAwMTExQzAwMDBGMjQwRDBEMDAyNEMyRjgwMDEyCi06MTA1MjgwMDAyQzVGMDMwMTEzRTAwMDFDMDAwNjI5QzIyNEEzRkZGMEQ5Ci06MTA1MjkwMDAwMDAzMjA0MjAwMDQzMTQwMEUwMDAxQ0YwMEQxRDgyMThDCi06MTA1MkEwMDAzQzA0NDAwMDNDMDY4MDAwQUNDNDAxMzgwQTAwMDQ1N0FFCi06MTA1MkIwMDAwMDAwMDAwMDEwQ0QwMDI2MjQwRTBGMDAxMENFMDAyQUEyCi06MTA1MkMwMDAzQzAyODAwODM0NUYwMDgwOTNGOTAwMDAyNDBGMDA1MEY2Ci06MTA1MkQwMDAzMzM4MDBGRjE3MEZGRkYzM0MwNDQwMDAwRTAwMDkxMkEzCi06MTA1MkUwMDAwMDAwMDAwMDNDMDQ0MDAwM0MwNjgwMDBBQ0M0MDEzOEQzCi06MTA1MkYwMDAwQTAwMDQ1NzAwMDAwMDAwOEY4MzAwMDQwMEEzNDAyQjI1Ci06MTA1MzAwMDAxNTAwMDAwQjhGOEIwMDA4MDA2QjUwMjEyNTQ3RkZGRjE1Ci06MTA1MzEwMDAwMEU1NDgyQjE1MjAwMDA2MDBBMzYwMjMwMDBDMjk0MDVGCi06MTA1MzIwMDAwRTAwMDFDRjAwQjJEODIxMEEwMDA0N0MzQzA0NDAwMEVBCi06MTA1MzMwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDNBRDhDCi06MTA1MzQwMDAwRTAwMDFDRjAwMDAwMDAwMEEwMDA0N0MzQzA0NDAwMDc1Ci06MTA1MzUwMDAzQzFCMDgwMDI3N0IzQTQ4MEUwMDAxQ0YwMDAwMDAwMEVDCi06MTA1MzYwMDAwQTAwMDQ3QzNDMDQ0MDAwM0MxQjA4MDAyNzdCM0E2ODkwCi06MTA1MzcwMDAwRTAwMDFDRjAwMDAwMDAwMEEwMDA0N0MzQzA0NDAwMDQ1Ci06MTA1MzgwMDAwMDA0MTFDMDAzRTAwMDA4MjQ0MjAyNDAzQzA0MDgwMDZECi06MTA1MzkwMDAyNDg0M0FBQzI0MDUwMDFBMEEwMDAwNkQwMDAwMzAyMTc0Ci06MTA1M0EwMDAyN0JERkZFMEFGQkYwMDFDQUZCMjAwMThBRkIxMDAxNEMzCi06MTA1M0IwMDBBRkIwMDAxMDNDMTA4MDAwOTIwQjAxMDkyNDEyRkY4MDU2Ci06MTA1M0MwMDAwRTAwMDRCMzMxNjQwMDdGOEY5MTAwM0MwMDUxNTAyMUU2Ci06MTA1M0QwMDAwMTUyNDAyNEFFMDgwMDI0OTIwMzAxMDkwRTAwMDRCM0Q4Ci06MTA1M0UwMDAzMDY0MDA3RjI0MDYwMDgwMjQwNzAwQzAyNDA0MDA0MEFECi06MTA1M0YwMDBBRTAwMDgxMEFFMDQwODE0QUUwNjA4MThBRTA3MDgxQzZDCi06MTA1NDAwMDA5MjBDMDEwOTAwNTFGODIxMzNGODAwN0YzQzE5ODAwQTAxCi06MTA1NDEwMDAwMzE5MTAyMTMxODQwMDdGMEUwMDA0QjNBRjgyMDA0NEQxCi06MTA1NDIwMDA4RTExMDEwMDNDMEMwMDgwMzU4NTAwMDEwMjIyNzgyMTlDCi06MTA1NDMwMDAwMUYyNDgyNEFFMDkwODA0OEUwRTAxMDAzNTk4MDAwMkRFCi06MTA1NDQwMDAzNjA5MDkwMDAxQzI2ODIxMzFBQjAwNzgwMTY1NTAyNTk5Ci06MTA1NDUwMDBBRTBBMDgyMDhFMDUwMTAwOEUwODAxMDAzNjA1MDk4MDdECi06MTA1NDYwMDAwMTAyMTgyMTI0NjQwMDQwMDA5MjMwMjRBRTA2MDgwODhFCi06MTA1NDcwMDA4RTA3MDEwMDAwRTJGODIxMjdGOTAwNDAzMzMyMDA3ODVFCi06MTA1NDgwMDAwMjU4ODgyNUFFMTEwODI0OEUwNDAxMDA5NTJGMDAwQ0M3Ci06MTA1NDkwMDA4RkJGMDAxQzhGQjIwMDE4MzFFRUZGRkYwMDBFNjlDMEY1Ci06MTA1NEEwMDBBRTBEMDgwMEFFMEMwODI4OTUyQjAwMEM4RkIxMDAxNDJGCi06MTA1NEIwMDAzMTZBRkZGRjAwMEE0MUMwQUUwODAwMkM4Q0EzMDA1MEU3Ci06MTA1NEMwMDA4RkIwMDAxMDhDQTIwMDNDOEQyNDAwMDQ4Q0E2MDAxQzIwCi06MTA1NEQwMDA4Q0E3MDAzODI3QkQwMDIwQUY4MzAwNjBBRjgyMDA1MDRBCi06MTA1NEUwMDBBRjg0MDA0Q0FGODYwMDU4MDNFMDAwMDhBRjg3MDA1QzMzCi06MTA1NEYwMDAzQzBBMDgwMDkxNEEzQUQxM0MwOTA4MDA5NTI5M0FDQTY5Ci06MTA1NTAwMDAzQzA1MTEwMDAwMEEzQzAwMjUyODAwMDIwMEU4MzAyNTc3Ci06MTA1NTEwMDAwMEM1MTgyNTI0ODIwMDA4QUM4MzAwMDAwM0UwMDAwOEMxCi06MTA1NTIwMDBBQzgwMDAwNDNDMDk4MDAwMzUyODA5MDA5MTA3MDAxMTc3Ci06MTA1NTMwMDAyNDAyMDAyODAwODA1MDIxMzBFMzAwRkYwMEEwNjgyMUYxCi06MTA1NTQwMDAwMEMwNjAyMTEwNjIwMDAyMzQwQjg2REQyNDBCMDgwMENECi06MTA1NTUwMDAzQzA3ODAwMDM0RTIwQTlBOTQ0MzAwMDAzNEY4MEE5QzI1Ci06MTA1NTYwMDAzNEU2MEFBMDMwNzlGRkZGQUQ1OTAwMDA4RjBGMDAwMDJDCi06MTA1NTcwMDAzNEU4MEE4MDI0MDQwMDAxQUQ0RjAwMDQ4Q0NFMDAwMDAyCi06MTA1NTgwMDBBRDRFMDAwODkxMDUwMDE5MzBBMzAwMDMxMDY0MDA0NkQ5Ci06MTA1NTkwMDAyODY5MDAwMjE1MjAwMEI1MjQwNDAwMDIxMDY0MDA5MDYwCi06MTA1NUEwMDAyNDA1MDAwMzEwNjUwMDlCMzRFNDBBQTQzQzA5MDgwMEFDCi06MTA1NUIwMDA5NTI5M0FDMDI0MDcwODAwNTE2NzAwNTAzQzE4ODAwMDI0Ci06MTA1NUMwMDAzQzAyODAwMDM0NTkwOTAwOTMyODAwMTI5MzJFMDAxOUUwCi06MTA1NUQwMDAzNDU4MDk4MDMxMEYwMEZGOEYwNjAwMjgwMUVDMTgyMTk0Ci06MTA1NUUwMDAwMDAzMzg4MDMxMjRGRkZGMzFDQjAwRkYwMEU0MTAyMTlECi06MTA1NUYwMDAwMDBCMkQwMDAwQTZDMDI1MDAwMjdDMDAzQzA4NjAwMEM2Ci06MTA1NjAwMDAwMzA4MTgyNTM1RTkwNkZGQUQ0MzAwMDBBRDQ5MDAwNDQ1Ci06MTA1NjEwMDA4RjJFMDAyQzNDMDM4MDAwMzQ3ODA5M0NBRDRFMDAwOEVFCi06MTA1NjIwMDA4RjI3MDAzMDI1NDkwMDI4MzQ2RTA5MDBBRDQ3MDAwQzUzCi06MTA1NjMwMDA4RjJCMDAzNEFENEIwMDEwOEYyNDAwMzhBRDQ0MDAxNDg0Ci06MTA1NjQwMDA4RjI1MDAxQ0FENDUwMDE4OEYyMjAwMjBBRDQyMDAxQ0E0Ci06MTA1NjUwMDA4RjI2MDAyNDI1MjIwMDE0QUQ0NjAwMjA4RjI4MDAyODI0Ci06MTA1NjYwMDBBRDQ4MDAyNDhGMEYwMDAwQUQyRDAwMDRBRDJGMDAwMEM5Ci06MTA1NjcwMDA4QzY0MDEwQ0FEMjQwMDA4OTFDNzAwMTIzQzA1MDgwMEExCi06MTA1NjgwMDA5MEE1M0FEMEFEMjAwMDEwMzBFQjAwRkYwMTZDMzAyMTI2Ci06MTA1NjkwMDAwMDA2NkYwMDAwMDVDQzAwMDFCOTYwMjUzNThBRkZGRkM4Ci06MTA1NkEwMDAwM0UwMDAwOEFEMkEwMDBDM0MwOTA4MDA5NTI5M0FDMDI3Ci06MTA1NkIwMDAzQzE5MDgwMDk3MzkzQUNBMzRFMjBBQTQzQzA2MDgwMEFCCi06MTA1NkMwMDA5NEM2M0FCQzk0NEYwMDAwMzEyM0ZGRkYwMzIzQzAyMTRFCi06MTA1NkQwMDAwMzA2NzAyMzAwMEYzQzAwMjVDOEZGRjIwMEU4MjgyNUQwCi06MTA1NkUwMDAyNDA3MDgwMEFENDUwMDBDQUQ0MDAwMTBBRDRCMDAxNDgwCi06MTA1NkYwMDAxNTY3RkZCMzI1NEEwMDE4M0MxODgwMDAzNzA4MDkwMEQ5Ci06MTA1NzAwMDA5MTBGMDAxMTkxMDcwMDE5MzcwMzBBODAzMUVFMDBGRjU1Ci06MTA1NzEwMDAzQzE5MDgwMDk3MzkzQUM2OTQ2RjAwMkEwMDBFNTg4MjQ3Ci06MTA1NzIwMDAzMEU0MDBGRjk3ODcwMDU0MDAwQjE2MDAwMDA0MkMwMEEzCi06MTA1NzMwMDAzMTI2RkZGRjAzMjZDMDIxMDA0NTQ4MjUwMTM4NzAyNThBCi06MTA1NzQwMDAwMUU3NTgyMTNDMDM0MDAwMDFDMzIwMjUwMDBCMkMwMDM5Ci06MTA1NzUwMDBBRDQ0MDAwMEFENDUwMDA0OTEwMjAwMTgzQzA2MDAwNjZGCi06MTA1NzYwMDAzQzAzODAwMDAwMDJDRTAwMDMyNkMwMjVBRDU4MDAwODhGCi06MTA1NzcwMDA4RDBGMDAyQzM0NzgwOTNDMjRFOTAwMDFBRDRGMDAwQzVBCi06MTA1NzgwMDA4RDBCMDAxQzMxMkU3RkZGMjU0OTAwMTRBRDRCMDAxMEZFCi06MTA1NzkwMDA4RjBGMDAwMEFEMkQwMDA0QTc4RTAwNTRBRDJGMDAwMDI4Ci06MTA1N0EwMDA4QzY0MDEwQzM0NkUwOTAwMjUyMjAwMTRBRDI0MDAwODFECi06MTA1N0IwMDA5MUM3MDAxMjNDMDUwODAwOTBBNTNBRDBBRDIwMDAxMDFBCi06MTA1N0MwMDAzMEVCMDBGRjAxNkMzMDIxMDAwNjZGMDAwMDA1Q0MwMEJCCi06MTA1N0QwMDAwMUI5NjAyNTM1OEFGRkZGMDNFMDAwMDhBRDJBMDAwQ0ZGCi06MTA1N0UwMDAzNEU5MEFBNDk1MjQwMDAwOTUwMjAwMjgzQzA5MDgwMDI5Ci06MTA1N0YwMDA5NTI5M0FDMDAwMDQxQzAwMDAwMkNDMDAzNDc4ODEwMEQ2Ci06MTA1ODAwMDAwMzJCNzgyNUFENTgwMDBDQUQ0RjAwMTAwQTAwMDU0MDYxCi06MTA1ODEwMDAyNTRBMDAxNDNDMDkwODAwOTUyOTNBQzAzQzA1MDgwMEI3Ci06MTA1ODIwMDA5NEE1M0FDQTNDMDYwODAwOTRDNjNBQkM5NDk5MDAwMDc0Ci06MTA1ODMwMDAzMTIzRkZGRjk1MTgwMDI4MDBBMzEwMjEwMDQ2NzgyMzhDCi06MTA1ODQwMDAwMDE5M0MwMDAwMTg0NDAwMjVFRUZGRUUwMTBFMjgyNTRCCi06MTA1ODUwMDAzNEU0ODEwMEFENDQwMDBDQUQ0NTAwMTBBRDQwMDAxNEFGCi06MTA1ODYwMDBBRDRCMDAxODBBMDAwNTQwMjU0QTAwMUMxNDYwRkY0RjhDCi06MTA1ODcwMDAzNEU2MEFBNDk0Q0UwMDAwM0MwOTA4MDA5NTI5M0FDMEY5Ci06MTA1ODgwMDAwMDBFNDQwMDAxMEIzODI1QUQ0NzAwMEMwQTAwMDU0MDBFCi06MTA1ODkwMDAyNTRBMDAxMDAzRTAwMDA4MjQwMjA3RDAyN0JERkZFMERFCi06MTA1OEEwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAxQzEyCi06MTA1OEIwMDAwRTAwMDA0RDAwODA4ODIxOEY4ODAwNTA4Rjg3MDA0QzlCCi06MTA1OEMwMDAzQzA1ODAwODM0QjIwMDgwMDExMTI4MjEzQzEwODAwMDgyCi06MTA1OEQwMDAyNDAyMDA4MDI0MDMwMEMwMDBBNzIwMjNBRTAyMDgxODgxCi06MTA1OEUwMDAzQzA2ODAwOEFFMDMwODFDMTg4MDAwMDRBRjg1MDA1MEY5Ci06MTA1OEYwMDBBQ0M1MDAwNDhDQzkwMDA0QUY4OTAwNEMxMjIwMDAwOTFCCi06MTA1OTAwMDAzNjA0MDk4MDBFMDAwNUY4MDAwMDAwMDA5MjRDMDAyN0M0Ci06MTA1OTEwMDA4RTBCMDA3NDAxODI1MDA0MDE0QjMwMjFBRTQ2MDAwQzA2Ci06MTA1OTIwMDAzNjA0MDk4MDhDOEUwMDFDOEY4RjAwNTgwMUNGNjgyM0FECi06MTA1OTMwMDAxOUEwMDAwNDhGQkYwMDFDOEM5MDAwMUNBRjkwMDA1ODcxCi06MTA1OTQwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMEYxCi06MTA1OTUwMDAwQTAwMDA0RjI3QkQwMDIwOEY4NjAwNjA4RjgzMDA1MDEzCi06MTA1OTYwMDA4RjgyMDA0QzNDMDU4MDA4MzRBNDAwODBBQzg2MDA1MDM3Ci06MTA1OTcwMDBBQzgzMDAzQzAzRTAwMDA4QUNBMjAwMDQzQzAzMDgwMDM4Ci06MTA1OTgwMDA4QzYzMDA1NDI3QkRGRkY4MzA4NDAwRkYyNDYyMDAwMUJGCi06MTA1OTkwMDAzMEE1MDBGRjNDMDEwODAwQUMyMjAwNTQzMEM2MDBGRkQ3Ci06MTA1OUEwMDAzQzA3ODAwMDhDRTgwMTc4MDUwMEZGRkUzQzBBN0ZGRjgxCi06MTA1OUIwMDBBM0E0MDAwMzhGQTQwMDAwMzU0OUZGRkYwMDg5MTgyNDI5Ci06MTA1OUMwMDAwMDA2NDdDMDAwNjgxMDI1QUZBMjAwMDA5MEY5MDEwQTQ4Ci06MTA1OUQwMDBBM0EwMDAwMjNDMTg4MEZGQTNCOTAwMDE4RkFFMDAwMDE1Ci06MTA1OUUwMDAzMEFEMDA3RjM3MEZGRkZGMDFDRjU4MjQwMDBENjYwMDU4Ci06MTA1OUYwMDAzQzA5MDAyMDAxNkM1MDI1MzUyNjIwMDAyNDA1RkY4MDNECi06MTA1QTAwMDAzQzA0MTAwMDI3QkQwMDA4QUNFQTAxNENBQ0U2MDE1NDkwCi06MTA1QTEwMDBBNEUwMDE1OEEwRTUwMTUyMDNFMDAwMDhBQ0U0MDE3OERECi06MTA1QTIwMDAzMDg4MDBGRjNDMDM4MDAwMzBBNDAwRkY4QzYyMDE3OEM2Ci06MTA1QTMwMDAwNDQwRkZGRTAwMDAwMDAwM0MwMzgwMDAzNDY2MEEwMEMyCi06MTA1QTQwMDA4Q0NBMDAyMDM0NjcwOTgwMDAwNDQ4MkJBQzZBMDE0NEVBCi06MTA1QTUwMDA4Q0M1MDAyNDAwMDkxNTQwQUM2NTAxNDhBMDY4MDE1MEMwCi06MTA1QTYwMDA5MEU0MDA0Q0EwNjQwMTZEMDNFMDAwMDhBNDYwMDE1OEJDCi06MTA1QTcwMDAyN0JERkZFODMwODQwMEZGQUZCRjAwMTAwRTAwMDY1QkJCCi06MTA1QTgwMDAzMEE1MDBGRjhGODMwMDUwOEZCRjAwMTAzQzA1ODAwMEMxCi06MTA1QTkwMDAzNDQ2MDA0MDI0MDRGRjkwM0MwMjEwMDAyN0JEMDAxODRCCi06MTA1QUEwMDBBQ0EzMDE0Q0EwQTQwMTUyQUNBNjAxNTQwM0UwMDAwODMxCi06MTA1QUIwMDBBQ0EyMDE3ODI3QkRGRkUwM0MwODgwMDhBRkJGMDAxQzA2Ci06MTA1QUMwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTAzNTEwMDA4MEI1Ci06MTA1QUQwMDA4RTA2MDAxODNDMDc4MDAwMzA5MjAwRkYwMEM3MjAyNThBCi06MTA1QUUwMDBBRTA0MDAxODBFMDAwMDREMzBCMTAwRkY5MjAzMDAwNTE3Ci06MTA1QUYwMDAzNDYyMDAwODBFMDAwMDRGQTIwMjAwMDUwMjQwMjAyMTdGCi06MTA1QjAwMDAwRTAwMDY2RjAyMjAyODIxMDI0MDIwMjE4RkJGMDAxQ0JBCi06MTA1QjEwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA1MDAwNTVCCi06MTA1QjIwMDAyNDA2MDAwMTBBMDAwNjMyMjdCRDAwMjAzQzA1ODAwMDQzCi06MTA1QjMwMDAzNEEzMDk4MDkwNjYwMDA4MzBDMjAwMDgxMDQwMDAwRkFFCi06MTA1QjQwMDAzQzBBMDEwMTM1NDkwODBBQUM4OTAwMDA4Q0E4MDA3NEEwCi06MTA1QjUwMDBBQzg4MDAwNDNDMDcwODAwOTBFNzNBRDAzMEU1MDAxMDFDCi06MTA1QjYwMDA1MEEwMDAwOEFDODAwMDA4M0MwRDgwMDgzNUFDMDA4MEQ3Ci06MTA1QjcwMDA4RDhCMDA1OEFDOEIwMDA4MjQ4NDAwMEMwM0UwMDAwOEQ3Ci06MTA1QjgwMDAwMDgwMTAyMTBBMDAwNkIyMjQ4NDAwMEMyN0JERkZFODIzCi06MTA1QjkwMDAzQzA4ODAwMEFGQjAwMDEwQUZCRjAwMTQzNTA2MDk4MDhDCi06MTA1QkEwMDA5MEM3MDAwOTI0MDIwMDA2MzUwOTA5MDAzMEUzMDBGRjEwCi06MTA1QkIwMDAwMDgwODAyMTAwQTA2MDIxMjQwQjAwMDQxMDYyMDA3OTg1Ci06MTA1QkMwMDAyNDA3MDAwMjk0Q0YwMDVDM0MwRTAyMDQzMUVERkZGRjdECi06MTA1QkQwMDAwMUFFNTAyNUFFMEEwMDAwOTBDNTAwMDgzMEE0MDAyMDk4Ci06MTA1QkUwMDAxMDgwMDAwODAwMDAwMDAwOTBDMjAwNEUzQzFGMDEwMzFFCi06MTA1QkYwMDAzN0Y5MDMwMDMwNTgwMEZGMDMxOTMwMjUyNDBCMDAwODQzCi06MTA1QzAwMDBBRTA2MDAwNDkxMzkwMDExOTEyNjAwMTI5MTI0MDAxMTcyCi06MTA1QzEwMDAzMzM4MDBGRjAwMTg3MDgyMzBDRjAwRkYwMUNGNTAyMUQxCi06MTA1QzIwMDAwMTRDNjgyMTMwODgwMEZGMzFBQUZGRkYzOTAzMDAyOEFBCi06MTA1QzMwMDAwMDBBMjg4MDE0NjAwMDJCMDIwNTQwMjM5MTI0MDAxMkUyCi06MTA1QzQwMDAzQzBFODAwMDM1RDkwOTgwMzA4NTAwRkYwMEFDMTgyMTVBCi06MTA1QzUwMDAwMDAzMTA4MDAwNEJGODIxMDAxRjg0MDAzNjA5MDZGRjY2Ci06MTA1QzYwMDBBRDA5MDAwNDM1QzkwOTAwOTEyNjAwMTE5MTJGMDAxMkQ5Ci06MTA1QzcwMDAwMDBCQzA4MjhGMkIwMDM0MzFFRDAwRkY4REM0MDEwQzZFCi06MTA1QzgwMDAwMUFDMjgyMTAwQjgxMDIxMDE2NEY4MjMwMDA3ODQwMDJBCi06MTA1QzkwMDAwMDAyMUYwMDAwNzBDODI1MzNFOUZGRkYzMENGMDBGQzcxCi06MTA1Q0EwMDAwMzI5NzAyNTAxNTgyMDIxMDFFODY4MjEwMDA0NTA4MDUzCi06MTA1Q0IwMDBBREFFMDAwQzBFMDAwMDREMDEwQTgwMjEzQzA3ODAwOEFCCi06MTA1Q0MwMDAyNDBDMDAwNDM0RUIwMDgwMEUwMDAwNEZBMTZDMDAwOThFCi06MTA1Q0QwMDAwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTAwM0UwMDAwOEY1Ci06MTA1Q0UwMDAyN0JEMDAxODkxMjUwMDExOTEyMzAwMTkzQzE4MDgwMEM4Ci06MTA1Q0YwMDA5NzE4M0FDNjMwQTIwMEZGMDAwMkY4ODIzMDcwMDBGRjA5Ci06MTA1RDAwMDAwMDFGQ0UwMDAwMTA0QzAwMDMyOTMwMjUwMEQ4NzAyNTVDCi06MTA1RDEwMDAzQzBGNDAwMDAxQ0Y2ODI1M0MwRTgwMDBBRDBEMDAwMDE3Ci06MTA1RDIwMDAzNUM5MDkwMDkxMjYwMDExOTEyRjAwMTIzNUQ5MDk4MDNCCi06MTA1RDMwMDAwMDBCQzA4MjMxRUQwMEZGOEYyQjAwMzQ4REM0MDEwQ0FECi06MTA1RDQwMDAwMUFDMjgyMTAwQjgxMDIxMDE2NEY4MjMwMDA3ODQwMDY5Ci06MTA1RDUwMDAwMDAyMUYwMDAwNzBDODI1MzNFOUZGRkYzMENGMDBGQ0IwCi06MTA1RDYwMDAwMzI5NzAyNTAxNTgyMDIxMDFFODY4MjEwMDA0NTA4MDkyCi06MTA1RDcwMDBBREFFMDAwQzBFMDAwMDREMDEwQTgwMjEzQzA3ODAwOEVBCi06MTA1RDgwMDAyNDBDMDAwNDM0RUIwMDgwMEUwMDAwNEZBMTZDMDAwOUNECi06MTA1RDkwMDAwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODM0Ci06MTA1REEwMDAyN0JEMDAxODBBMDAwNkM0MjQwNzAwMTIyN0JERkZEMDMzCi06MTA1REIwMDBBRkI1MDAyNEFGQjQwMDIwQUZCMzAwMUNBRkIwMDAxMEVCCi06MTA1REMwMDBBRkJGMDAyOEFGQjIwMDE4QUZCMTAwMTQzQzA2ODAwMDhFCi06MTA1REQwMDA5MEMzMDEwQjMwOTMwMEZGMzBCNDAwRkYzMDYyMDAzMEZECi06MTA1REUwMDAwMDAwQTgyMTEwNDAwMDgyMDAwMDgwMjEzNEM0MDk4MEY2Ci06MTA1REYwMDA5MDg4MDAwODAwMDgzRTAwMDAwNzJFMDMwNEEwMDBBOUI4Ci06MTA1RTAwMDAyNDA0MDAwNDhGODcwMDUwM0MwMTA4MDBBMDI0M0FEMEVECi06MTA1RTEwMDAzQzBDODAwMEFEODAwMDQ4M0MwMzgwMDA5MDZFMDEwQjdDCi06MTA1RTIwMDAzMUM1MDAyMDEwQTAwMDA3M0MwQzgwMDAzNDc4MDk4MEE4Ci06MTA1RTMwMDA5MzEyMDAwODAwMTI4RTAwMDAxMTdFMDMwNUUwMDBBRUYwCi06MTA1RTQwMDAzQzAyODAwODkxOEIwMTBCMzU4NjA5ODA5MEM0MDAwOEM0Ci06MTA1RTUwMDAzMTZBMDA0MDAwMEE0ODJCMzA4ODAwMDgyNDExMDAwM0YyCi06MTA1RTYwMDAxNTAwMDAwMjAwRTk5MDIzMDAwMDg4MjEzQzAzODAwMDE3Ci06MTA1RTcwMDAzNDc4MEE4MDM0NkEwOTAwOTcwNzAwMkM5MTQ0MDAxMTk1Ci06MTA1RTgwMDA5MTQ5MDAxMjkzMDUwMDE4MzA5RjAwRkYzMTI4MDBGRjUwCi06MTA1RTkwMDAwMjI4MTAyMTAwMDJDODgwOTMwRDAwMTgwMzNGNzgyMUNBCi06MTA1RUEwMDAwMUYwNzAyMTMwQjAwMEZGMDFEMDE4MjFBNzg3MDA1NDA1Ci06MTA1RUIwMDAzQzAxMDgwMEE0MkUzQUM2M0MwMTA4MDBBNDIzM0FDOEJECi06MTA1RUMwMDAxNUEwMDAwMzI0NkIwMDBBMDAwMDAwMEQyNDZCMDAwQURCCi06MTA1RUQwMDAzMTcwRkZGRjNDMDEwODAwQTQyMzNBQ0EzQzAxMDgwMENFCi06MTA1RUUwMDBBNDIwM0FDMDNDMDEwODAwQTQyMDNBQkMwRTAwMDFCNDMyCi06MTA1RUYwMDAwMjAwMjAyMTBFMDAwNTBGMDA0MDIwMjEwMDQwMjAyMTNCCi06MTA1RjAwMDAwMjQwMjgyMTBFMDAwNTFDMDIyMDMwMjEwRTAwMDY5RUIyCi06MTA1RjEwMDAwMDQwMjAyMTE2QTAwMDVGMDA0MDIwMjEwRTAwMDFDODkzCi06MTA1RjIwMDAwMjAwMjAyMTNDMTEwODAwOTIzMTNBRDAzMjM1MDAwM0EyCi06MTA1RjMwMDAxMkEwMDAxNjNDMEE4MDA4OEY4NzAwNTAzQzBFODAwODkzCi06MTA1RjQwMDAzNUNEMDA4MDI0RUMwMDAxQURBQzAwM0MzQzA1ODAwODYwCi06MTA1RjUwMDA4Q0E2MDAwNDAxODAyMDIxMDBDQzkwMjMxQTQwMDAwMjZFCi06MTA1RjYwMDBBRjhDMDA1MDhDQTQwMDA0MEUwMDA1RjhBQ0E0MDAwNDEzCi06MTA1RjcwMDAzQzE5ODAwMDhGMzgwMDc0M0MwRjgwMDgzNUYwMDA4MDk5Ci06MTA1RjgwMDAwMDU4MjgyMUFFMDUwMDBDM0MwQTgwMDgzNTQyMDA4MEVDCi06MTA1RjkwMDAwMjYwMjAyMTAyODAyODIxQTA0MDAwNkIwRTAwMDY1QkQ5Ci06MTA1RkEwMDAzQzEzODAwMDhGODQwMDUwMzQ1RjAwMDZBRTY0MDE0Q0M3Ci06MTA1RkIwMDA4Rjg4MDA0ODNDMTQxMDAwOEZCNTAwMjQyNTA5MDAwMThCCi06MTA1RkMwMDBBRjg5MDA0ODhGQjIwMDE4QTI2ODAxNTI4RkIxMDAxNDQ3Ci06MTA1RkQwMDBBRTdGMDE1NDhGQjAwMDEwQUU3NDAxNzg4RkJGMDAyOERGCi06MTA1RkUwMDA4RkI0MDAyMDhGQjMwMDFDMDNFMDAwMDgyN0JEMDAzMEYxCi06MTA1RkYwMDAzNEMzMDk4MDkwNkYwMDA4MDAwRjc2MDAwMDBFNkUwMzE2Ci06MTA2MDAwMDAwNUEwMDAzMzM0QzIwOTAwOTA1OTAwMUIyNDFGMDAxMDYyCi06MTA2MDEwMDAzQzAxMDgwMEEwM0YzQUQwMzMzODAwMDIxMzAwRkY3RTU1Ci06MTA2MDIwMDA4Rjg3MDA1MDhGODMwMDVDMTQ2N0ZGN0MzQzAzODAwMEU3Ci06MTA2MDMwMDAwRTAwMDA0RDAwMDAwMDAwM0MwOTgwMDgzNTI1MDA4MDVFCi06MTA2MDQwMDA5MEE0MDAwOTI0MDcwMDE2MzA4ODAwRkYxMTA3MDAwREY2Ci06MTA2MDUwMDAwMDAwMDAwMDkwQTYwMDA5M0MwQzA4MDA5MThDM0FEMDhBCi06MTA2MDYwMDAyNDBBMDAwODMwQzQwMEZGMzU4QjAwMDEzQzAxMDgwMDAxCi06MTA2MDcwMDBBMDJCM0FEMDEwOEEwMDJGMjQwRDAwMEExMDhEMDAyODgyCi06MTA2MDgwMDAyNDAyMDAwQzBFMDAwMDRGMDAwMDAwMDAwQTAwMDc1OTE3Ci06MTA2MDkwMDA4Rjg3MDA1MDBFMDAwNkI2MDIyMDI4MjEwQTAwMDc5QUJBCi06MTA2MEEwMDAwMDAwMDAwMDNDMEI4MDA4MzU2QTAwODA4RDQ3MDA1NERBCi06MTA2MEIwMDA4Q0M5MDEwQzExMjBGRjU0QUY4NzAwNTAyNDA2MDAxNDM2Ci06MTA2MEMwMDAzQzAxMDgwMEEwMjYzQUQwMEEwMDA3NTgzQzBDODAwMDhBCi06MTA2MEQwMDA5MDcxMDAwODI0MTIwMDAyM0MwMTA4MDBBMDMyM0FEMDVFCi06MTA2MEUwMDAzMjMwMDAyMDEyMDAwMDBCMjQxNTAwMDE4Rjg3MDA1MDcxCi06MTA2MEYwMDAwQTAwMDc1OTI0MTAwMDA4MzQ1OTAwODA4RjIzMDAzODAzCi06MTA2MTAwMDBBQzQzMDAwNDhDNUYwMDA0QUYzRjAwM0MwQTAwMDc2NDBFCi06MTA2MTEwMDAzQzBDODAwMDhGODcwMDUwMEEwMDA3NTkyNDEwMDAwNEFGCi06MTA2MTIwMDBBMEEyMDAwOTBFMDAwMDRGMDAwMDAwMDAwQTAwMDc1OTVECi06MTA2MTMwMDA4Rjg3MDA1MDI0MDIwMDE0MEEwMDA4MUNBMEEyMDAwOTQ2Ci06MTA2MTQwMDAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTAzQzEwODAwMEM3Ci06MTA2MTUwMDA5MjAyMDEwOTI0MDUwMDAxMEUwMDA2NUIzMDQ0MDBGRjk1Ci06MTA2MTYwMDAzQzFGODAwODkzRjgwMDBFMzdFMzAwODA5M0Y5MDAwRjdFCi06MTA2MTcwMDA5MDZFMDAyNjkzRTkwMDBBMzMyRjAwRkYwMDE4NjYwMDk2Ci06MTA2MTgwMDAwMDBGNkMwMDMxQ0IwMEZGMDE4RDUwMjUwMDBCMzIwMDU5Ci06MTA2MTkwMDAwMTQ2MzgyNTMxMjgwMEZGMzQ0NTYwMDAwMEU4MjAyNUZECi06MTA2MUEwMDAyNDAyRkY4MTNDMDMxMDAwQUUwNDAxNEM4RkJGMDAxNDk5Ci06MTA2MUIwMDBBRTA1MDE1NEEyMDIwMTUyQUUwMzAxNzg4RkIwMDAxMDY3Ci06MTA2MUMwMDAwM0UwMDAwODI3QkQwMDE4MjdCREZGRTgzMDg0MDBGRjZBCi06MTA2MUQwMDBBRkJGMDAxMDBFMDAwNjVCMzBBNTAwRkYzNDQ2MDA0MDQ0Ci06MTA2MUUwMDAzQzA0ODAwMDI0MDVGRjkyQUM4NjAxNTRBMDg1MDE1MjM2Ci06MTA2MUYwMDA4RjgzMDA1MDhGQkYwMDEwM0MwMjEwMDAyN0JEMDAxODk1Ci06MTA2MjAwMDBBQzgzMDE0QzAzRTAwMDA4QUM4MjAxNzgyN0JERkZEOEM1Ci06MTA2MjEwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyMDk0Ci06MTA2MjIwMDBBRkIzMDAxQzNDMDc4MDAwOTBFMjAxMDkzMDg2MDBGRkZDCi06MTA2MjMwMDAzMEIwMDBGRjAwMDYxOEMyMzIwNDAwMDIzMDcxMDAwMUM1Ci06MTA2MjQwMDAxNDgwMDAwNzMwNTIwMEZGM0MwOTgwMDgzNTMzMDA4MDdECi06MTA2MjUwMDA5MjY4MDAwNTMxMDUwMDA4MTBBMDAwMEMzMENBMDAxMDNCCi06MTA2MjYwMDAwMjQwMjAyMTBFMDAwNjgwMDIyMDI4MjEyNDAyMDAwMTg1Ci06MTA2MjcwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNEE1Ci06MTA2MjgwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjgxNTQwMDAzMDQzCi06MTA2MjkwMDAzNEU1MEEwMDhDQjkwMDI0OENCODAwMDgxMzM4MDA0Nzk0Ci06MTA2MkEwMDAwMDAwNDAyMTNDMEU4MDA4MzVEMzAwODA5MjZEMDA2OENDCi06MTA2MkIwMDAyNDBCMDAwMjMxQUMwMEZGMTE4QjAwODAzQzA2ODAwMEYzCi06MTA2MkMwMDA5MjdGMDA0QzkwQzQwMTA5NTA5RjAwMDQzMjEzMDA3QzVGCi06MTA2MkQwMDAxMTAwMDA2NzAwMDAwMDAwMzIxMzAwN0MxNjYwMDA1QUI1Ci06MTA2MkUwMDAwMjQwMjAyMTE2MjAwMDA4MzIwQzAwMDEzQzA3ODAwMEVCCi06MTA2MkYwMDAzNEVCMEEwMDhENjUwMDI0OENFODAxMDQxNEE4RkZEQzRGCi06MTA2MzAwMDAwMDAwMTAyMTMyMEMwMDAxMTE4MDAwMEQwMjQwMjAyMUZDCi06MTA2MzEwMDAzQzEwODAwMDhFMEUwMTBDOEY4RDAwNjAxMUNEMDAwOEE2Ci06MTA2MzIwMDAwMDAwMDAwMDBFMDAwNzNFMDIyMDI4MjE4RTBGMDEwQzA1Ci06MTA2MzMwMDAzQzE4ODAwODM3MTAwMDgwQUUwRjAwNTAwMjQwMjAyMTJBCi06MTA2MzQwMDAwRTAwMDY2RjAyMjAyODIxMEEwMDA4NkYyNDAyMDAwMUI3Ci06MTA2MzUwMDAzQzA3MDgwMDhDRTcwMDY0MjRFNjAwMDEzQzAxMDgwMENCCi06MTA2MzYwMDBBQzI2MDA2NDE2MDAwMDBEMDAwMDAwMDAwMjIwMjgyMTY5Ci06MTA2MzcwMDAwRTAwMDY2RjAyNDAyMDIxOTI2RjAwNjgyNDBEMDAwMjdCCi06MTA2MzgwMDAzMUVFMDBGRjExQ0QwMDIyMDI0MDIwMjEwRTAwMDgyMzMzCi06MTA2MzkwMDAwMDAwMDAwMDBBMDAwODZGMjQwMjAwMDEwRTAwMDA0MTA2Ci06MTA2M0EwMDAyNDA0MDAwMTkyNkMwMDI1MDIwQzU4MjUwRTAwMDA0RkI5Ci06MTA2M0IwMDBBMjZCMDAyNTBBMDAwOEFGMDIyMDI4MjE4RTYzMDAxODc2Ci06MTA2M0MwMDA4Q0U0MDEwNDhDQkYwMDI0MDAwMzE2MDIxNDlGRkZCNTY3Ci06MTA2M0QwMDAzMDQ1MDA3RjkyNjkwMDRDMjY0NDAwMDEzMDkzMDA3RkQ1Ci06MTA2M0UwMDAxMjY1MDA0MDMxMjMwMEZGMTQ2NEZGQUYzQzBFODAwOEFCCi06MTA2M0YwMDAyNjQ4MDAwMTMxMTEwMDdGMzEwMjAwRkYxMjI1MDAwQkY5Ci06MTA2NDAwMDAyNDA4MDAwMTAwNDA5MDIxMEEwMDA4N0MyNDExMDAwMUFBCi06MTA2NDEwMDAyNDA1MDAwNDBFMDAwNjMyMjQwNjAwMDEwRTAwMDgyM0E1Ci06MTA2NDIwMDAwMDAwMDAwMDBBMDAwODZGMjQwMjAwMDEyNDA3RkY4MDFBCi06MTA2NDMwMDAwMjQ3MjgyNDAwQTc5MDI2MzI0MjAwRkYwMDQwOTAyMTA2Ci06MTA2NDQwMDAwQTAwMDg3QzI0MTEwMDAxMEUwMDA3M0UwMjIwMjgyMUNBCi06MTA2NDUwMDAzMjA2MDAzMDEwQzBGRkEzMzIxMDAwODIwMjQwMjAyMTFCCi06MTA2NDYwMDAwRTAwMDY4MDAyMjAyODIxMEEwMDA4NkYyNDAyMDAwMTg1Ci06MTA2NDcwMDA4RTYzMDAxODAyNDAyMDIxMDIyMDI4MjEwMDY2MTAyNThBCi06MTA2NDgwMDAwRTAwMDg0NUFFNjIwMDE4OTI2NDAwNEMyNDA1MDAwMzFCCi06MTA2NDkwMDAyNDA2MDAwMTBFMDAwNjMyMzA4NDAwRkYwRTAwMDA0MTg5Ci06MTA2NEEwMDAyNDA0MDAwMTkyNkEwMDI1MDIwQTQ4MjUwRTAwMDA0RkNDCi06MTA2NEIwMDBBMjY5MDAyNTBBMDAwODZGMjQwMjAwMDE4RTc4MDAxOEU2Ci06MTA2NEMwMDAzQzE5ODAwMDAyNDAyMDIxMDMxOTc4MjUwMjIwMjgyMTUwCi06MTA2NEQwMDAwRTAwMDY2RkFFNkYwMDE4OTI2NDAwNEMwQTAwMDhGN0I5Ci06MTA2NEUwMDAyNDA1MDAwNDMyNDYwMDgwMzhDQTAwODAxNDZBRkY2RTFBCi06MTA2NEYwMDAzQzBFODAwODBBMDAwOEQwMjY0ODAwMDEyN0JERkZDMEQ2Ci06MTA2NTAwMDBBRkIwMDAxODNDMTA4MDAwQUZCRjAwMzhBRkI3MDAzNDA4Ci06MTA2NTEwMDBBRkI2MDAzMEFGQjUwMDJDQUZCNDAwMjhBRkIzMDAyNDQ1Ci06MTA2NTIwMDBBRkIyMDAyMDBFMDAwNEJCQUZCMTAwMUM5MjA0MDEwODAyCi06MTA2NTMwMDA5MjA1MDEwQjMwODQwMEZGMEUwMDA4NTYzMEE1MDBGRkM1Ci06MTA2NTQwMDAxNDQwMDBFMzhGQkYwMDM4M0MwOTgwMDgzNTI4MDA4MEU0Ci06MTA2NTUwMDBBMTAwMDA2QjM2MDcwOTgwOTBFNjAwMDAyNDAyMDA1MDdECi06MTA2NTYwMDAzQzE3MDgwMDI2RjczQTg4MzBDMzAwRkYzQzEzMDgwMEE4Ci06MTA2NTcwMDAyNjczM0E5ODEwNjIwMDAzM0MxMDgwMDAwMDAwQjgyMTk2Ci06MTA2NTgwMDAwMDAwOTgyMTI0MUYwMDEwMzYxMTBBMDAzNjE0MDk4MERCCi06MTA2NTkwMDA4RTE2MDEwNDhGOEQwMDUwOEUzODAwMjQzNjE5MEE4MDIzCi06MTA2NUEwMDA4RTkyMDAyMDNDMDEwODAwQTAzRjNBRDA5NzJDMDAyQzhFCi06MTA2NUIwMDA4RUY1MDAwMDkzMkIwMDE4MDI0RDcwMjMwMkQ4NzgyMzJCCi06MTA2NUMwMDAzQzAxMDgwMEFDMkYzQUFDM0MwMTA4MDBBQzJFM0FCMEJDCi06MTA2NUQwMDAzQzAxMDgwMEFDMkQzQUQ0QTc4QzAwNTQwMkEwRjgwOTY1Ci06MTA2NUUwMDAzMTcyMDBGRjMwNEEwMDAyMTU0MDAwRTYzMDQ1MDAwMURDCi06MTA2NUYwMDAxMEEwMDBDMTAwMDAwMDAwOTI4QTAwMDgzMTUwMDAwODdECi06MTA2NjAwMDAxNjAwMDAwMjI0MTQwMDAzMDAwMEEwMjEzQzA2ODAwMEI0Ci06MTA2NjEwMDAzNEM0MDkwMDM0QzMwQTAwOEM2RTAwMjQ5MDg1MDAxMTM0Ci06MTA2NjIwMDA5MDgyMDAxMjkwOTkwMDExMzBCODAwRkYzMDUxMDBGRkE1Ci06MTA2NjMwMDAwMjkxRjgyMTAwMUZCMDgwMzMyRjAwRkYwMkQ4NTgyMUFCCi06MTA2NjQwMDAwMjRGQTgyMTI2QUMwMDEwMDE3MjY4MjEzQzE1ODAwMDgxCi06MTA2NjUwMDAzQzAxMDgwMEFDMkUzQUQ4M0MwMTA4MDBBNDJEM0FDOEYxCi06MTA2NjYwMDAzQzAxMDgwMEE0MkMzQUM0M0MwMTA4MDBBNDJCM0FDNjAzCi06MTA2NjcwMDAzNkI2MDk4MDhGODcwMDUwOEY4OTAwNTg4RUQyMDAyMDRGCi06MTA2NjgwMDAyNDA4MDAwNjAxMjczMDIzMDI0NzI4MjMzQzAxMDgwMDg0Ci06MTA2NjkwMDBBQzI4M0FDQzA0QzAwMEIzMDAwMDkwMjEwNEEwMDBCMUEzCi06MTA2NkEwMDAwMEM1ODAyQjEyMDAwMEIzMDAwMDAwMDAzQzAxMDgwMDcwCi06MTA2NkIwMDBBQzI2M0FCMDhFNzEwMDAwMDIyMEY4MDkwMDAwMDAwMEZDCi06MTA2NkMwMDAzMDRBMDAwMjE1NDAwMDc0MDA0MDgwMjEzMDRCMDAwMTI4Ci06MTA2NkQwMDA1NTYwMDAxMThFNzEwMDA0M0MwRDA4MDA4REFEM0FCNDc4Ci06MTA2NkUwMDAzQzBFQzAwMDNDMDQ4MDAwMDFBRTYwMjVBRUFDMEUwMDQ0Ci06MTA2NkYwMDA4Qzk4MDAwMDMzMEYwMDA4MTFFMEZGRkQwMDAwMDAwMDNGCi06MTA2NzAwMDA5NDlGMEUwODI0MTIwMDAxQTc5RjAwNDA4Qzk5MEUwNDRDCi06MTA2NzEwMDBBRjk5MDAzODhFNzEwMDA0MDIyMEY4MDkwMDAwMDAwMEQzCi06MTA2NzIwMDAwMjAyODAyNTMyMDIwMDAyMTQ0MDAwQTkwMDAwMDAwMDhECi06MTA2NzMwMDAzQzA4MDgwMDk1MDgzQUJDM0MxMTA4MDA5NjMxM0FDODVDCi06MTA2NzQwMDAzQzA5MDgwMDk1MjkzQUJFM0MwMzA4MDA4QzYzM0FCNDIyCi06MTA2NzUwMDAwMTExNjgyMTNDMUYwODAwOEZGRjNBRDgzQzA3MDgwMDUwCi06MTA2NzYwMDA5NEU3M0FEMjNDMTE4MDAwMDFBOTIwMjE4RTM4MDEwQzE3Ci06MTA2NzcwMDAwMDY4MjgyMTI0OTkwMDAyMDBBNzcwMjEwM0UzNzgyMUYyCi06MTA2NzgwMDBBRjk4MDA2MDNDMDEwODAwQUMyRjNBRDgzQzAxMDgwMEVCCi06MTA2NzkwMDBBNDJFM0FDMDNDMDEwODAwQTQyRDNBQ0EwRTAwMDFCNDUwCi06MTA2N0EwMDAzMzI0RkZGRjhGOEMwMDQ4MDA0MDIwMjEzQzAxMDgwMDZCCi06MTA2N0IwMDBBMDJDM0FEMThFNjIwMDA4MjU4QjAwMDFBRjhCMDA0OEQ3Ci06MTA2N0MwMDAwMDQwRjgwOTAwMDAwMDAwOEY4NTAwNTAwMjgwMzAyMTUxCi06MTA2N0QwMDAwRTAwMDUxQzAwNDAyMDIxMEUwMDA2OUUwMDQwMjAyMUQ2Ci06MTA2N0UwMDA4RTZBMDAwQzAxNDBGODA5MDA0MDIwMjEzQzA4MDgwMDk2Ci06MTA2N0YwMDA5NTA4M0FDQTNDMDkwODAwOTUyOTNBQkUwMTA5MzgyMTkyCi06MTA2ODAwMDAyNEU2MDAwMjBFMDAwMUM4MzBDNEZGRkYzQzA0MDgwMDZCCi06MTA2ODEwMDA4Qzg0M0FBQzNDMDMwODAwOEM2MzNBQjQwMDgzMjgyMzkwCi06MTA2ODIwMDAzQzAxMDgwMEFDMjUzQUFDMTRBMDAwMDYwMDAwMDAwMEIyCi06MTA2ODMwMDAzQzBBMDgwMDhENEEzQUNDMzU0NjAwNDAzQzAxMDgwMDJECi06MTA2ODQwMDBBQzI2M0FDQzEyNDAwMDQxOEY4QzAwNDQ4RTJCMEUxMEE3Ci06MTA2ODUwMDA4RjkyMDA0NEFFNEIwMDIwOEUyMjBFMThBRTQyMDAyNEQwCi06MTA2ODYwMDAzQzA0MDgwMDk0ODQzQUMwMEUwMDA1RkEwMDAwMDAwMEMxCi06MTA2ODcwMDA4Rjk5MDA1MDhFNzgwMDEwM0MwMTA4MDBBQzM5M0FENDUyCi06MTA2ODgwMDAwMzAwRjgwOTAwMDAwMDAwM0MwRjA4MDA4REVGM0FBQzRGCi06MTA2ODkwMDAxNUUwRkY3OThGODcwMDUwOTc5NDAwNTQzQzEzODAwRUM5Ci06MTA2OEEwMDAzMjE1MDAxMDBFMDAwNjI5QTY3NDAwMkM1NkEwMDA0NEQ0Ci06MTA2OEIwMDA4RUY2MDAwNDMyMUYwMDQwNTdFMDAwMUQ4RUYwMDAwOEU1Ci06MTA2OEMwMDA4RUUzMDAwQzAwNjBGODA5MDAwMDAwMDA4RkJGMDAzODY0Ci06MTA2OEQwMDA4RkI3MDAzNDhGQjYwMDMwOEZCNTAwMkM4RkI0MDAyOEVFCi06MTA2OEUwMDA4RkIzMDAyNDhGQjIwMDIwOEZCMTAwMUM4RkIwMDAxODJFCi06MTA2OEYwMDAwM0UwMDAwODI3QkQwMDQwOTIwOTAxMDk4Rjg4MDAzQzkxCi06MTA2OTAwMDAwMDA5M0UwMDAwRTgzMDI1QUUwNjAwODA4RTIzMDAyMEZFCi06MTA2OTEwMDA4RTI0MDAyNEFGQTMwMDEwQUUwMzBFMTQ4RkEyMDAxMDJCCi06MTA2OTIwMDBBRTAyMEUxMEFFMDQwRTFDMEEwMDA5NTFBRTA0MEUxODgxCi06MTA2OTMwMDAwMjAwRjgwOTAwMDAwMDAwOEVFMzAwMEMwMDYwRjgwOTc2Ci06MTA2OTQwMDAwMDAwMDAwMDBBMDAwQTA3OEZCRjAwMzgyNDBFMDAwMTczCi06MTA2OTUwMDAyNDBEMDAwMUE1ODAwMDIwQTU4RTAwMjIwQTAwMDlFQjZECi06MTA2OTYwMDBBRDhEMDAyNDNDMDEwODAwQUMyMDNBQjAwQTAwMDk4MTNBCi06MTA2OTcwMDA4RTcxMDAwMDNDMDEwODAwQUMyNTNBQjAwQTAwMDk4MTg0Ci06MTA2OTgwMDA4RTcxMDAwMDkyMTEwMTA5MDAwMDI4MjEwRTAwMDY2RjhGCi06MTA2OTkwMDAzMjI0MDBGRjhGQkYwMDM4OEZCNzAwMzQ4RkI2MDAzMDJECi06MTA2OUEwMDA4RkI1MDAyQzhGQjQwMDI4OEZCMzAwMjQ4RkIyMDAyMDQ1Ci06MTA2OUIwMDA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDgyN0JEMDA0MDE1Ci06MTA2OUMwMDAwMkMwRjgwOTAwMDAwMDAwMEEwMDBBMDEzMjFGMDA0MDVFCi06MTA2OUQwMDA1MjQwRkZCMjk3OTQwMDU0OEVCNjBFMTQ4RjkzMDA0NDI5Ci06MTA2OUUwMDBBRTc2MDAyMDhFQjQwRTFDQUU3NDAwMjQwQTAwMDlGQUE0Ci06MTA2OUYwMDA5Nzk0MDA1NDhGODIwMDE0MDAwNDIxODAwM0UwMDAwODYzCi06MTA2QTAwMDAwMDgyMTAyMTNDMDc4MDA4MzRFMjAwODA5MDQzMDA2OTM2Ci06MTA2QTEwMDAwMDgwNDAyMTEwNjAwMDA5M0MwNDAxMDAzQzA3MDgwMDkwCi06MTA2QTIwMDA4Q0U3M0FENDhGODMwMDMwMDBFMzIwMjMwNDgwMDAwOEYxCi06MTA2QTMwMDA5Mzg5MDAxQzE0RTMwMDAzMDEwMDIwMjEwM0UwMDAwOEY3Ci06MTA2QTQwMDAwMDgwMTAyMTNDMDQwMTAwMDNFMDAwMDgwMDgwMTAyMUI4Ci06MTA2QTUwMDAxMTIwMDAwQjAwNjczODIzM0MwRDgwMDAzNUFDMDk4MDA1Ci06MTA2QTYwMDA5MThCMDA3QzMxNkEwMDAyMTE0MDAwMjAyNDA5MDAzNDFGCi06MTA2QTcwMDAwMEU5NzAyQjE1QzBGRkYxMDEwMDIwMjEwMEU5MzgyMzQ3Ci06MTA2QTgwMDAyNDAzRkZGQzAwQTNDODI0MDBFM0MwMjQwMEY5NzgyQkYyCi06MTA2QTkwMDAxNUUwRkZFQTAzMDgyMDIxMzBDNDAwMDMwMDA0MTAyMzlFCi06MTA2QUEwMDAxNEMwMDAxNDMwNDkwMDAzMDAwMDMwMjEwMEE5NzgyMUVGCi06MTA2QUIwMDAwMUU2NzAyMTAwRUU2ODJCMTFBMEZGRTAzQzA0MDEwMDBDCi06MTA2QUMwMDAyRDM4MDAwMTAwMDZDODJCMDEwNTQ4MjEwMzE5MzgyNDgwCi06MTA2QUQwMDAxNEUwRkZEQTI1MjRGRkZDMjQwMkZGRkMwMEEyMTgyNEE2Ci06MTA2QUUwMDAwMDY4MjAyMTAzRTAwMDA4MDA4MDEwMjEwQTAwMEE2RkRFCi06MTA2QUYwMDAyNDA5MDAzMDNDMEM4MDAwMzU4NjA5ODA5MENCMDA3QzU2Ci06MTA2QjAwMDAzMTZBMDAwNDE1NDBGRkU5MjQwNjAwMDQwQTAwMEE3RUU5Ci06MTA2QjEwMDAwMDAwMzAyMTNDMDMwODAwOEM2MzAwNUM4RjgyMDAxODY5Ci06MTA2QjIwMDAyN0JERkZFOEFGQkYwMDE0MTA2MjAwMDVBRkIwMDAxMDMyCi06MTA2QjMwMDAwMDAzMjlDMDI0QTQwMjgwQUY4NDAwMTRBRjgzMDAxODhFCi06MTA2QjQwMDAzQzEwODAwMDM2MDMwQTAwOTQ2NTAwMzIwRTAwMEE1MEEzCi06MTA2QjUwMDAzMEE0M0ZGRjhFMDQwMTAwM0MxODAwODAzNzBGMDAwMzczCi06MTA2QjYwMDAwMDgyQzgyMTI0MDJGRjgwMDMyMjYwMjQzMzI5MDA3RjkxCi06MTA2QjcwMDAwMDBDRjk0MDAzRTk0MDI1MzMyRTAwNzgzQzBEMTAwMDRECi06MTA2QjgwMDAwMTBENTAyNTAxQ0Y1ODI1QUUwQzAwMjgzNjA4MDk4MDhDCi06MTA2QjkwMDBBRTBDMDgwQ0FFMEIwODJDQUUwQTA4MzA5MTAzMDA2OTRECi06MTA2QkEwMDAzQzA2ODAwQzAxMjYzODIxMTA2MDAwMDZBRjg3MDAzNEI3Ci06MTA2QkIwMDA4RDA5MDAzQzhEMDYwMDZDMDEyNjM4MjMxOEUwMDA3RjBCCi06MTA2QkMwMDAwMDAwMDAwMDNDMEM4MDA4MzU4QjAwODAzQzBBODAwMEVGCi06MTA2QkQwMDBBMTYwMDA2OTM1NTAwOTgwOEUwMjAwMzgzQzA2ODAwMEIzCi06MTA2QkUwMDAzNEM1MEEwMDkwQUQwMDNDMzFBODAwMjAxMTAwMDAxOTA2Ci06MTA2QkYwMDBBRjgyMDAzMDI0MEUwMDAxM0MxOTgwMDAzNzMwMEEwMEJCCi06MTA2QzAwMDBBMzhFMDAxQ0FGODAwMDI0OEUwNDAwMjQ4Rjg1MDAyNEY2Ci06MTA2QzEwMDAyNDE4MDAwOEFGODAwMDIwQUY4MDAwMjgzQzAxMDgwMDQ1Ci06MTA2QzIwMDBBNDM4M0FCRTNDMDEwODAwQTQyMDNBRDIwRTAwMEE1NDBGCi06MTA2QzMwMDAwMDAwMzAyMTkyMEYwMDNDOEZCRjAwMTQ4RkIwMDAxMDc1Ci06MTA2QzQwMDAwMDBGNzE0MkFGODIwMDJDMjdCRDAwMTgwM0UwMDAwODNFCi06MTA2QzUwMDAzMUMyMDAwMTkwQjkwMDMyMjQwRjAwMDEzMzM4MDBGRjI3Ci06MTA2QzYwMDAwMDE4MjE4MjEwOEYwMDNGMjQxRjAwMDIxMDlGMDA2MjM1Ci06MTA2QzcwMDAzNEMyMEFDMDNDMDM4MDAwMzQ2NDBBMDA4Qzk5MDAyNEFBCi06MTA2QzgwMDAxNzIwMDAxRDM0NjYwOTAwOTA4MzAwMzAyNDFGMDAwNTgyCi06MTA2QzkwMDAzMDYyMDAzRjEwNUYwMDRDMjQwNTAwMDE4Rjg2MDAyMDA5Ci06MTA2Q0EwMDBBMzg1MDAxQ0FGODYwMDI4QUY4NjAwMjQzQzE5ODAwMDE1Ci06MTA2Q0IwMDAzNzMwMEEwMDhFMDQwMDI0OEY4NTAwMjQyNDE4MDAwODMxCi06MTA2Q0MwMDAzQzAxMDgwMEE0MzgzQUJFM0MwMTA4MDBBNDIwM0FEMjk2Ci06MTA2Q0QwMDAwRTAwMEE1NDAwMDAwMDAwOTIwRjAwM0M4RkJGMDAxNDA5Ci06MTA2Q0UwMDA4RkIwMDAxMDAwMEY3MTQyQUY4MjAwMkMyN0JEMDAxODNBCi06MTA2Q0YwMDAwM0UwMDAwODMxQzIwMDAxOEM4ODAwMDg4QzhEMDAyNDVDCi06MTA2RDAwMDA4Q0NCMDA2NDNDMTk4MDAwMzczMDBBMDBBRjhCMDAyNDI0Ci06MTA2RDEwMDBBMzgwMDAxQzhFMDQwMDI0OEY4NjAwMjA4Rjg1MDAyNDExCi06MTA2RDIwMDAwMTBENjAyMzI0MTgwMDA4QUY4QzAwMjgzQzAxMDgwMEU2Ci06MTA2RDMwMDBBNDM4M0FCRTNDMDEwODAwQTQyMDNBRDIwRTAwMEE1NEZFCi06MTA2RDQwMDAwMDAwMDAwMDkyMEYwMDNDOEZCRjAwMTQ4RkIwMDAxMEI1Ci06MTA2RDUwMDAwMDBGNzE0MkFGODIwMDJDMjdCRDAwMTgwM0UwMDAwODJECi06MTA2RDYwMDAzMUMyMDAwMTkwQTcwMDMwMzBFMzAwM0Y1MDY0MDAyODlBCi06MTA2RDcwMDAzNEM1MEFDMDhDQUEwMDI0MTU0MDAwMjIzNEM4MDkwMDdBCi06MTA2RDgwMDA4Q0FCMDA0ODNDMEM3RkZGMzU4NUZGRkYwMTY1MTAyNDZDCi06MTA2RDkwMDAzQzE4ODAwMEFGODIwMDIwMzcwNTA5MDA4RjhFMDAyMDRDCi06MTA2REEwMDA4Q0FGMDA2MDAxQ0Y2ODJCMTVBMDAwMDIwMUMwMjAyMTJDCi06MTA2REIwMDA4Q0E0MDA2MDBBMDAwQUYwQUY4NDAwMjA4RDAyMDA2Q0YxCi06MTA2REMwMDAwQTAwMEFDQjNDMDY4MDAwOEM4OTAwNDg4Rjg2MDAyMDkwCi06MTA2REQwMDAzQzBBN0ZGRjM1NTBGRkZGMDEzMDM4MjQzQzA0ODAwODE3Ci06MTA2REUwMDAyNDA1MDAwMUFGODcwMDI4QUM4MDAwNkNBMzg1MDAxQzNGCi06MTA2REYwMDAwQTAwMEFGRUFGODYwMDI0OEM0NDAwMTQwQTAwMEFGMDQwCi06MTA2RTAwMDBBRjg0MDAyMDhEMDIwMDY4MEEwMDBCMzgzQzE4ODAwMDE3Ci06MTA2RTEwMDAzNEM0MDk4MDhDODYwMDcwOENCMDAwMTQwMEQwNDgyQkRDCi06MTA2RTIwMDAxMTIwMDAwNDAwMDAwMDAwOEM4MjAwNzAwQTAwMEIzODYyCi06MTA2RTMwMDAzQzE4ODAwMDhDQTIwMDE0MEEwMDBCMzgzQzE4ODAwMDFCCi06MTA2RTQwMDA4Rjg1MDAyNDI3QkRGRkUwQUZCRjAwMThBRkIxMDAxNDRECi06MTA2RTUwMDAxNEEwMDAwOEFGQjAwMDEwM0MwNDgwMDAzNDg3MEEwMDgyCi06MTA2RTYwMDA5MEU2MDAzMDI0MDIwMDA1MzBDMzAwM0YxMDYyMDBCN0Y2Ci06MTA2RTcwMDAzNDg0MDkwMDhGOTEwMDIwMDBBMDgwMjEzQzA0ODAwMDEwCi06MTA2RTgwMDAzNDhFMEEwMDhEQ0QwMDA0M0MwNjA4MDA4Q0M2M0FCMDUyCi06MTA2RTkwMDAzMUE3M0ZGRjAwRTY2MDJCNTU4MDAwMDEwMEUwMzAyMTY0Ci06MTA2RUEwMDA5MzhGMDAxQzExRTAwMDc2MDBEMDEwMkIzNDk5MDk4MERDCi06MTA2RUIwMDA5MzM4MDA3QzMzMDQwMDAyMTA4MDAwNzcyNDAzMDAzNEYwCi06MTA2RUMwMDAwMEMzRjgyQjE3RTAwMEQ2MDBDMzMwMjMwMEQwMTAyQkVFCi06MTA2RUQwMDAzQzAxMDgwMEE0MjMzQUJDMTQ0MDAwNkQwMjAwMTgyMUI0Ci06MTA2RUUwMDAzQzA0MDgwMDhDODQzQUFDMDA2NDI4MkI1NEEwMDAwMUI4Ci06MTA2RUYwMDAwMDYwMjAyMTNDMDU4MDAwMzRBOTBBMDA5MTI4MDAzQzU0Ci06MTA2RjAwMDAzQzAxMDgwMEFDMjQzQUI0MzEwMzAwMjAxNDYwMDAwMkI0Ci06MTA2RjEwMDAwMDAwNDgyMThDQTkwRTE4OEY4ODAwMkMwMTI4NTAyQkM2Ci06MTA2RjIwMDAxMTQwMDA1RjAwMDAwMDAwM0MwNTA4MDA4Q0E1M0FCNDQ5Ci06MTA2RjMwMDAwMEE5NjAyMTAxMEM1ODJCMTE2MDAwNUMwMEIwNjgyQjg3Ci06MTA2RjQwMDAwMTA5MzgyMzAwRTAyODIxM0MwMTA4MDBBQzI3M0FCNEFECi06MTA2RjUwMDAxMjAwMDAwMzI0MDJGRkZDMTBCMDAwOEMzMjJBMDAwMzUwCi06MTA2RjYwMDAwMEEyRjgyNDNDMDEwODAwQTQyMDNBRDIzQzAxMDgwMDA5Ci06MTA2RjcwMDBBQzNGM0FCNDAzRTAyODIxOEY4NDAwMjQxMjA0MDAwNkI5Ci06MTA2RjgwMDAzQzAzODAwODhDNkEwMDZDMDIwMDIwMjFBRjkxMDAyMDM1Ci06MTA2RjkwMDAyNTUwMDAwMUFDNzAwMDZDOEY4QjAwMjgwMDg1ODgyMzgxCi06MTA2RkEwMDBBRjkxMDAyNDAxNjUyMDIzQUY4NDAwMjgxMjIwMDAwMjQ1Ci06MTA2RkIwMDAyNDA3MDAxODI0MDcwMDEwM0MwRTgwMDgzNUM2MDA4MDA2Ci06MTA2RkMwMDA5MENEMDA2ODI0MEMwMDAxM0MwMTA4MDBBMDI3M0FEMEI1Ci06MTA2RkQwMDAzMUE3MDBGRjEwRUMwMDQ3MDAwMDAwMDAxNDgwMDAxOEVCCi06MTA2RkUwMDAwMDAwMjgyMTNDMEI4MDAwOTE2NTAxMDkzNTcxMDk4MDYyCi06MTA2RkYwMDA4RTIzMDAxODMwQTUwMEZGMDAwMzU2MDIyNEEzMDAwMUQxCi06MTA3MDAwMDAzMTQ2MDA3RjMwNzAwMDdGMTIwNjAwN0UyNDBDRkY4MDI2Ci06MTA3MDEwMDAzQzBGODAwODM1RTkwMDgwQTEyMzAwNEMzQzA4MDgwMEEzCi06MTA3MDIwMDA4RDA4M0FDQzI0MEUwMDAyM0MwMTA4MDBBMDJFM0IxMTMyCi06MTA3MDMwMDAzNTBEMDAwODNDMDEwODAwQUMyRDNBQ0MyNDA1MDAxMEE5Ci06MTA3MDQwMDAzQzFGODAwMDM3RTQwQTAwOTA5OTAwM0MzMzM4MDAyMDUwCi06MTA3MDUwMDAxMzAwMDAwNTAwQTAyMDIxMjQwMjAwMDEzQzAxMDgwMENCCi06MTA3MDYwMDBBQzIyM0FCNDM0QTQwMDAxOEZCRjAwMTg4RkIxMDAxNEQxCi06MTA3MDcwMDA4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyMDIxCi06MTA3MDgwMDAzQzAxMDgwMEE0MjAzQUJDMTA0MEZGOTUwMjAwMTgyMUUyCi06MTA3MDkwMDAwQTAwMEI4QjAwQzAxODIxMEEwMDBCODMyNDAzMDAzMDY4Ci06MTA3MEEwMDAzQzA1MDgwMDhDQTUzQUI0MDBCMDY4MkIxMUEwRkZBOERECi06MTA3MEIwMDAwMDAwMDAwMDNDMDQwODAwOTQ4NDNBQkMwMDg1NzgyMTVDCi06MTA3MEMwMDAwMUU3NzAyQjExQzAwMDA3MkNBMjAwMDQzQzFGNjAwMEQ4Ci06MTA3MEQwMDA4RkY5NTQwNDMzMzgwMDNGMTcwMEZGRTMyNDA0MDA0MkMzCi06MTA3MEUwMDAyQ0EyMDAwNDEwNDBGRjlBMjQwNDAwNDIwQTAwMEJFRTc4Ci06MTA3MEYwMDA4RkJGMDAxODE1MjhGRkI5MDAwMDAwMDA4Q0MyMDAxOENGCi06MTA3MTAwMDAzQzE4ODAwMDI0MTkwMDAyMDA1OEY4MjVBQ0RGMDAxODU0Ci06MTA3MTEwMDAzNzA0MEEwMEEwRDkwMDY4OTA4OTAwM0MyNDBGMDAwNEJECi06MTA3MTIwMDAwMEEwMTAyMTMxMjgwMDIwM0MwMTA4MDBBMDJGM0IxMUI1Ci06MTA3MTMwMDAxMTAwMDAwMjI0MDUwMDEwMjQwMjAwMDEzQzAxMDgwMDk3Ci06MTA3MTQwMDBBQzIyM0FBQzBBMDAwQkU0M0MxRjgwMDA4Rjg4MDAyODc4Ci06MTA3MTUwMDA4Qzg5MDA2MDAxMDkyODJCMTRBMDAwMDIwMTAwODgyMUZECi06MTA3MTYwMDA4QzkxMDA2MDNDMEI4MDAwOEQ2NDBFMTgyNDBBMDAwMTk1Ci06MTA3MTcwMDAwMjIwMjgyMTAyMjAzMDIxQTM4QTAwMUMwRTAwMEE1NDdDCi06MTA3MTgwMDAwMjIwODAyMTBBMDAwQjcyQUY4MjAwMkMwMDBBMTgyMzEzCi06MTA3MTkwMDAxMjIwMDAwNzMwNjQwMDAzM0MwRDgwMDAzNUE3MDk4MEYxCi06MTA3MUEwMDA5MEVDMDA3QzMxOEIwMDA0MTU2MDAwMTkyNDhFMDAwNEUzCi06MTA3MUIwMDAzQzAxMDgwMEE0MjQzQUQyM0MxODA4MDA5NzE4M0FEMjlGCi06MTA3MUMwMDAwMzA1MjAyMTAwQzQ3ODJCMTFFMEZGNkM4Rjg0MDAyNDdDCi06MTA3MUQwMDAyQ0E2MDAwNTE0QzBGRkE0MjQwNDAwNDIzMEI5MDAwMzBCCi06MTA3MUUwMDAxNzIwMDAwMjAwQjkxODIzMjRBM0ZGRkMzQzAxMDgwMDZCCi06MTA3MUYwMDBBQzIzM0FCNDNDMDEwODAwQTQyMDNBRDIwQTAwMEJCMUY3Ci06MTA3MjAwMDAwMDYwMjgyMTAwQUMzODI0MEEwMDBCRDcwMEVDMTgyNkI3Ci06MTA3MjEwMDAzQzAxMDgwMEE0MkUzQUQyMEEwMDBDNDEwMDAwMDAwMEY0Ci06MTA3MjIwMDAzQzAxMDgwMEFDMjAzQUI0MEEwMDBCRUQyNDA0MDA0MkYzCi06MTA3MjMwMDA4RjgzMDAyODNDMEI4MDAwMzU2QTBBMDAxNDYwMDAwNjJBCi06MTA3MjQwMDAwMDAwMTAyMTkxNDYwMDMwMjQwNTAwMDUzMEM0MDBGRkU1Ci06MTA3MjUwMDAxMDg1MDAwMzAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMEFCCi06MTA3MjYwMDA5MTQ5MDA0ODMxMjgwMEZGMDAwODM5QzIxNEUwRkZGQUI0Ci06MTA3MjcwMDAzQzA0ODAwODNDMDYwODAwOTRDNjNBQkMzQzAzMDgwMDY1Ci06MTA3MjgwMDA4QzYzM0FENDNDMDUwODAwOENBNTNBQjQzQzE4MDgwMDNECi06MTA3MjkwMDA5NzE4M0FEMjAwNjZDODIxOEM4RTAwMDQwMzI1NzgyMTA1Ci06MTA3MkEwMDAwMUY4NjgyMTAxQUU2MDIzMTk4MDAwMUQwMDAwMDAwMDc0Ci06MTA3MkIwMDA5MTU4MDA0QzhGOEQwMDM0OTU2RTBFMTAzMzBGMDBGRkU3Ci06MTA3MkMwMDA4REE5MDAwNDAxQ0YzMDIzOERBQTAwMDAzMENGRkZGRjJECi06MTA3MkQwMDAwMDBGNjEwMDAxMkMyODIxMDAwMDM4MjEwMTQ3MjAyMUU2Ci06MTA3MkUwMDAwMEFDMTgyQjAwODNDODIxQURBNTAwMDRBREI5MDAwMDg3Ci06MTA3MkYwMDA5MUI4MDAwQTAxRjg3MDIxQTFBRTAwMEE5NTZDMEUxMjM3Ci06MTA3MzAwMDA4RjhBMDAzNEE1NEMwMDA4OTU0OTAwMzgyNTI4MDAwMUQzCi06MTA3MzEwMDBBNTQ4MDAzODkxNDcwMDBEMzRFQjAwMDhBMTRCMDAwRDQzCi06MTA3MzIwMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRDhBRkIwMDAxODQwCi06MTA3MzMwMDA5MzhGMDAxQzhGQjAwMDE0M0MwODdGRkY4Rjg3MDAyNEMwCi06MTA3MzQwMDAzQzBDODAwMDM1MThGRkZGQUZCRjAwMjBBRkIxMDAxQzIwCi06MTA3MzUwMDAzNTk5MEEwMDAyMTgxODI0OTMyQTAwM0MwMDBGNUZDMEQ4Ci06MTA3MzYwMDAzQzAyQkZGRjJDRjAwMDAxMzQ0OUZGRkYwMDZCRjgyNTAxCi06MTA3MzcwMDAzQzA4MDgwMDhEMDgzQUQ0OEY5OTAwMzAzQzE4MDgwMDZBCi06MTA3MzgwMDA5NzE4M0FDQTAzRTk1ODI0MDAxMDdGODAzQzA3RUZGRkEyCi06MTA3MzkwMDAzQzA1RjBGRjAxNkYxODI1M0MxMTgwMDAzMTQ5MDAyMEE5Ci06MTA3M0EwMDAzNEUyRkZGRjM0QURGRkZGMzYyRTA5ODAyN0E1MDAxMDIxCi06MTA3M0IwMDAyNDA2MDAwMjAxMTk0MDIzMjcwQTAwMDIwMDYyMTgyNDUzCi06MTA3M0MwMDAwMDgwODAyMTE1MjAwMDAyMDAwMDU4MjE4RDhCMEUxQ0FBCi06MTA3M0QwMDBBN0FBMDAxMjA1MDAwMDNBMjQwNzAwMDAzMEVGMDBGRkMyCi06MTA3M0UwMDAwMDBGM0YwMDAwNjc0MDI1M0MwMjgwMDhBRkE4MDAxNDUyCi06MTA3M0YwMDAzNDRCMDA4MDkxNkEwMDY4M0MwRjA4MDA5MUVGM0FEMTRECi06MTA3NDAwMDAzQzA5REZGRjM1M0ZGRkZGMDAwQTYwMkIzQzAyMDgwMDBDCi06MTA3NDEwMDA5NDQyM0FDNEEzQUYwMDExMDExRkMwMjQwMDBDQ0Y0MDE2Ci06MTA3NDIwMDAwMzE5MTgyNThGQTcwMDEwQUZBMzAwMTQzQzFGMDgwMEY0Ci06MTA3NDMwMDA5M0ZGM0FEM0E3QTIwMDE2OEZBODAwMTQwMEVENDgyNEFBCi06MTA3NDQwMDAzQzBCMDEwMDNDMEEwRkZGMDEyQkM4MjUzM0Y4MDAwMzU5Ci06MTA3NDUwMDAzNTRDRkZGRjAxMEQ3ODI0M0MwMjcwMDAwMzJDMzgyNENBCi06MTA3NDYwMDAwMDE4MUUwMDAwRTI0ODI1MDFFMzU4MjVBRkFCMDAxNEM4Ci06MTA3NDcwMDBBRkE5MDAxMDkxREYwMDdDQTNCRjAwMTUwRTAwMDA2M0QwCi06MTA3NDgwMDAwMDAwMDAwMDM2MkQwQTAwOTFBNjAwM0MzMEM0MDAyMDA4Ci06MTA3NDkwMDAxMDgwMDAwNjI2MDIwMDA4M0MxMTA4MDA5NjMxM0FDMDEwCi06MTA3NEEwMDAyNjJFRkZGRjNDMDEwODAwQTQyRTNBQzA4RkJGMDAyMDBCCi06MTA3NEIwMDA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDgyN0JEMDAyODIyCi06MTA3NEMwMDA4RjhBMDAyQzAxNkE2MDJCNTU4MEZGQzQyNDA3MDAwMUJECi06MTA3NEQwMDAwQTAwMENDQjMwRUYwMEZGOTM4MzAwMUMzQzAyODAwMEJECi06MTA3NEUwMDAyN0JERkZEODM0NDgwQTAwMDA4MDUwMjFBRkJGMDAyMERDCi06MTA3NEYwMDAzNDQ2MEFDMDAxMDAyODIxMTA2MDAwMEUzNDQ0MDk4MDdGCi06MTA3NTAwMDA5MTA3MDAzMDI0MEIwMDA1OEY4OTAwMjAzMEVDMDAzRkVDCi06MTA3NTEwMDAxMThCMDAwQjAwMDAzODIxQUZBOTAwMTAzQzBCODAwODM0Ci06MTA3NTIwMDA4RDY5MDA2Q0FGQUEwMDE4MEUwMDAxMkJBRkE5MDAxNEUyCi06MTA3NTMwMDBBMzgwMDAxQzhGQkYwMDIwMDNFMDAwMDgyN0JEMDAyOEE3Ci06MTA3NTQwMDA4RDFGMDA0ODNDMTgwODAwOEYxODNBQjQ4Rjk5MDAyODA2Ci06MTA3NTUwMDAzQzAyN0ZGRjhEMDgwMDQ0MzQ0M0ZGRkZBRkE5MDAxMEI5Ci06MTA3NTYwMDAzQzBCODAwODhENjkwMDZDMDNFMzcwMjQwMzE5NzgyMUJCCi06MTA3NTcwMDAwMUNGNjgyMzAxQTgzODIxQUZBQTAwMTgwRTAwMDEyQjAzCi06MTA3NTgwMDBBRkE5MDAxNDBBMDAwRDIwQTM4MDAwMUMzQzA1ODAwMDU4Ci06MTA3NTkwMDAzNEE2MEEwMDkwQzcwMDNDM0MwNjA4MDA5NEM2M0FEMkM0Ci06MTA3NUEwMDAzQzAyMDgwMDhDNDIzQUNDMzBFMzAwMjAwMDA2MjQwMDY0Ci06MTA3NUIwMDAxMDYwMDAxRTAwNDQzODI1M0MwODgwMDgzNTA1MDA4MDE2Ci06MTA3NUMwMDA5MEEzMDA2ODAwMDAzMDIxMjQwODAwMDEwMDAwMjAyMTYxCi06MTA3NUQwMDAyNDAzMDAwMTNDMDU4MDAwOENBQzAxNzgwNTgwRkZGRThGCi06MTA3NUUwMDAwMDAwMDAwMEFDQTgwMTQ4QTRBNDAxNDRBNEEzMDE0NkUzCi06MTA3NUYwMDAzQzAzMDgwMDhDNjMzQUQ0M0MxODgwMDgzNzBGMDA4MEE1Ci06MTA3NjAwMDBBQ0EzMDE0QzNDMTkwODAwOTMzOTNBRDEzQzBEMTAwMDUxCi06MTA3NjEwMDBBMEI5MDE1MkFDQTcwMTU0QTRBNjAxNTg5MUVFMDA0Q0E4Ci06MTA3NjIwMDBBMEFFMDE2RDAzRTAwMDA4QUNBRDAxNzg4Q0E4MEUxQzgzCi06MTA3NjMwMDAzQzBCMDgwMDhENkIzQUI0OTRBQTBFMTY5NEE5MEUxNDU0Ci06MTA3NjQwMDAwMTY2MzAyMTMxNDNGRkZGMEEwMDBENDgzMTI0RkZGRjVFCi06MTA3NjUwMDAzQzA0ODAwMDM0ODMwQTAwOTA2NTAwM0MzMEEyMDAyMDg2Ci06MTA3NjYwMDAxMDQwMDAxQzAwMDAwMDAwMDAwMDMwMjEwMDAwMjAyMTFDCi06MTA3NjcwMDAwMDAwMTgyMTNDMDU4MDAwOENBOTAxNzgwNTIwRkZGRTQwCi06MTA3NjgwMDAwMDAwMDAwMEFDQTYwMTQ4M0MwRTA4MDA4RENFM0FENEE0Ci06MTA3NjkwMDAyNDBERkY5MTI0MEMwMDQwM0MwQjgwMDhBNEEzMDE0NDVFCi06MTA3NkEwMDAzNTZBMDA4MEE0QTQwMTQ2QUNBRTAxNENBMEFEMDE1MkU1Ci06MTA3NkIwMDBBQ0FDMDE1NEE0QTAwMTU4OTBBMzAxMDk5MTQ0MDA0QzIyCi06MTA3NkMwMDA5MEE2MDEwOTNDMDQxMDAwQTBBNjAxNkQwM0UwMDAwODhCCi06MTA3NkQwMDBBQ0E0MDE3ODhDODYwRTE4OTQ4ODBFMTI5NDg3MEUxMDM0Ci06MTA3NkUwMDAzMTA0RkZGRjBBMDAwRDcwMzBFM0ZGRkYzQzA0ODAwMDBGCi06MTA3NkYwMDAzNDgzMEEwMDkwNjUwMDNDMzBBMjAwMjAxMDQwMDAyNjMwCi06MTA3NzAwMDAyN0JERkZGODI0MDkwMDAxMDAwMDM4MjEyNDA4MDAwMUVBCi06MTA3NzEwMDAzQzA2ODAwMDhDQzQwMTc4MDQ4MEZGRkUwMDAwMDAwMDVECi06MTA3NzIwMDA5MENBMDEwOTNDMDQwODAwOTA4NDNCMTEzQzE4ODBGRjdBCi06MTA3NzMwMDBBM0FBMDAwMzhGQTMwMDAwMzA4NTAwN0YzNzBGRkZGRjRGCi06MTA3NzQwMDAwMDY2MTAyNUFGQTIwMDAwOTBEOTAxMEFBM0EwMDAwMjk0Ci06MTA3NzUwMDAwMDA1NkUwMEEzQjkwMDAxOEZBRTAwMDAyNDBBMzAwMEJFCi06MTA3NzYwMDAyN0JEMDAwODAxQ0Y2MDI0MDE4RDU4MjVBQ0NCMDE0QzBBCi06MTA3NzcwMDBBQ0NBMDE1NEE0QzAwMTU4QUNDOTAxNDhBNEM3MDE0NDEzCi06MTA3NzgwMDAyNDA5RkY4MEE0QzgwMTQ2M0MwODEwMDBBMEM5MDE1MjhBCi06MTA3NzkwMDAwM0UwMDAwOEFDQzgwMTc4OEM4OTBFMTg5NDg3MEUxMjlCCi06MTA3N0EwMDA5NDg2MEUxMDMwRThGRkZGMEEwMDBEOTczMEM3RkZGRkU4Ci06MTA3N0IwMDAyN0JERkZFOEFGQjAwMDEwM0MxMDgwMDBBRkJGMDAxNDQxCi06MTA3N0MwMDAzNjE4MEEwMDk3MEYwMDMyMEUwMDBBNTAzMUU0M0ZGRkNFCi06MTA3N0QwMDA4RTBFMDEwMDI0MERGRjgwM0MwNDIwMDAwMUMyNTgyMUMwCi06MTA3N0UwMDAwMTZENjAyNDAwMEM0OTQwMzE2QTAwN0YwMTJBNDAyNTY4Ci06MTA3N0YwMDAwMTA0MzgyNTNDMDQ4MDA4QUUwNzA4MzAzNDg2MDA4MDM4Ci06MTA3ODAwMDA5MEM1MDA2ODI0MDMwMDAyMzBBMjAwRkYxMDQzMDAwNDZBCi06MTA3ODEwMDA4RjlGMDAyMDhGOTkwMDI0QUM5RjAwNjhBQzk5MDA2NDcyCi06MTA3ODIwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxOEMwCi06MTA3ODMwMDAzQzBBMDgwMDI1NEEzNTlDM0MwOTA4MDAyNTI5MzYzOEIxCi06MTA3ODQwMDAzQzA4MDgwMDI1MDgyQTYwM0MwNzA4MDAyNEU3MzZGQ0FECi06MTA3ODUwMDAzQzA2MDgwMDI0QzYzNDI0M0MwNTA4MDAyNEE1MzE3Q0RECi06MTA3ODYwMDAzQzA0MDgwMDI0ODQyRDhDM0MwMzA4MDAyNDYzMzREODk1Ci06MTA3ODcwMDAzQzAyMDgwMDI0NDIzMjc0M0MwMTA4MDBBQzJBM0E5MEQxCi06MTA3ODgwMDAzQzAxMDgwMEFDMjkzQThDM0MwMTA4MDBBQzI4M0E4ODNECi06MTA3ODkwMDAzQzAxMDgwMEFDMjczQTk0M0MwMTA4MDBBQzI2M0FBNDBECi06MTA3OEEwMDAzQzAxMDgwMEFDMjUzQTlDM0MwMTA4MDBBQzI0M0E5ODA1Ci06MTA3OEIwMDAzQzAxMDgwMEFDMjMzQUE4M0MwMTA4MDBBQzIyM0FBMEU1Ci06MDg3OEMwMDAwM0UwMDAwODAwMDAwMDAwRDUKLTowODc4QzgwMDgwMDAwOTQwODAwMDA5MDA2NgotOjEwNzhEMDAwODAwODAxMDA4MDA4MDA4MDgwMDgwMDAwODAwRTAwMDAwMQotOjEwNzhFMDAwODAwODAwODA4MDA4MDAwMDgwMDAwQTgwODAwMDBBMDA3NAotOjA4NzhGMDAwODAwMDA5ODA4MDAwMDkwMEZFCi06MDAwMDAwMDFGRgotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBmaXJtd2FyZSBkYXRhIGRlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZAotICogc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKLSAqIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKLSAqIGFjY29tcGFueWluZyBpdC4KLSAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54Mi9ibngyLW1pcHMtMDktNS4wLjAuajkuZncuaWhleCBiL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA5LTUuMC4wLmo5LmZ3LmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZlOTIyZQotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2JueDIvYm54Mi1taXBzLTA5LTUuMC4wLmo5LmZ3LmloZXgKQEAgLTAsMCArMSw2MDU4IEBACis6MTAwMDAwMDAwODAwMDExMDA4MDAwMDAwMDAwMDUxQzQwMDAwMDBDOEYyCis6MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwNTFDNEMzCis6MTAwMDIwMDAwMDAwMDAzODAwMDA1MjhDMDgwMDAwODgwODAwMDAwMDIyCis6MTAwMDMwMDAwMDAwNTFCNDAwMDA1MkM0MDgwMDUzQTAwMDAwMDA4NDI2Cis6MTAwMDQwMDAwMDAwQTQ3ODA4MDA1MUI0MDAwMDAxQzAwMDAwQTRGQzI2Cis6MTAwMDUwMDAwODAwMzFEODA4MDAwMDAwMDAwMDgxNTQwMDAwQTZCQzUwCis6MTAwMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwODE1NEIzCis6MTAwMDcwMDAwMDAwMDEyNDAwMDEyODEwMDgwMDA0ODgwODAwMDQwMDgyCis6MTAwMDgwMDAwMDAwMTdFQzAwMDEyOTM0MDAwMDAwMDAwMDAwMDAwMDBGCis6MTAwMDkwMDAwMDAwMDAwMDA4MDAxQkVDMDAwMDAwMDQwMDAxNDEyMEVCCis6MTAwMEEwMDAwODAwMDBBODA4MDAwMDAwMDAwMDM4MTQwMDAxNDEyNEU2Cis6MTAwMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAwMzgxNEVDCis6MDgwMEMwMDAwMDAwMDAzMDAwMDE3OTM4NTYKKzowODAwQzgwMDBBMDAwMDQ0MDAwMDAwMDBFMgorOjEwMDBEMDAwMDAwMDAwMDAwMDAwMDAwRDYzNkY2RDM1MkUzMDJFMzBFMworOjEwMDBFMDAwNkEzOTAwMDAwNTAwMDAwMjAwMDAwMDAwMDAwMDAwMDM2MworOjEwMDBGMDAwMDAwMDAwMTQwMDAwMDAzMjAwMDAwMDAzMDAwMDAwMDBCNworOjEwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRgorOjEwMDExMDAwMDAwMDAwMTAwMDAwMDEzNjAwMDBFQTYwMDAwMDAwMDU0OQorOjEwMDEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDNworOjEwMDEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCRgorOjEwMDE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBRgorOjEwMDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5RgorOjEwMDE2MDAwMDAwMDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RAorOjEwMDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3RgorOjEwMDE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDA1RgorOjEwMDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwMDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwMDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwMDFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwMDFEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDMwQworOjEwMDFFMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDBBRgorOjEwMDFGMDAwMjQ0MjUyMjAzQzAzMDgwMDI0NjM1MzU0QUM0MDAwMDBDNgorOjEwMDIwMDAwMDA0MzIwMkIxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDAwNQorOjEwMDIxMDAwMzdCRDlGRkMwM0EwRjAyMTNDMTAwODAwMjYxMDAxMTAwMAorOjEwMDIyMDAwM0MxQzA4MDAyNzlDNTIyMDBFMDAwMjVGMDAwMDAwMDBDQQorOjEwMDIzMDAwMDAwMDAwMEQyN0JERkZFMEFGQkYwMDE4QUZCMTAwMTRGNAorOjEwMDI0MDAwQUZCMDAwMTAzQzA0ODAwMDk0ODIwMTA4MzA0MzcwMDA3RAorOjEwMDI1MDAwMjQwMjIwMDAxMDYyMDAwQjI4NjIyMDAxMTQ0MDAwMzZBNgorOjEwMDI2MDAwMDAwMDEwMjEyNDAyNDAwMDEwNjIwMDJDMDAwMDAwMDA1OQorOjEwMDI3MDAwMjQwMjYwMDAxMDYyMDAyRDAwMDAxMDIxMEEwMDAwOUQ4MQorOjEwMDI4MDAwOEZCRjAwMTgzNDkxMDEwMDkyMjQwMDA5OEUzMDAwMThBRAorOjEwMDI5MDAwMTA4MDAwMjAyNDAzMDAwMTI0MDIwMDA5MTQ4MjAwMDZCQgorOjEwMDJBMDAwOEY4MjAwMUMzQzAyODAwODk0NDIwMDFBMDAwMjE0MDA1NQorOjEwMDJCMDAwMDIwMjgwMjU4RjgyMDAxQzhDNDIwMDBDMTA0MDAwMTUyOQorOjEwMDJDMDAwMDAwMDE4MjEwRTAwMEQ0NTAwMDAwMDAwOEY4MzAwMUM2NworOjEwMDJEMDAwOTYyNDAwMDg4RjgyMDAxODk0NjMwMDFFOTYyNTAwMEM1NworOjEwMDJFMDAwMDAwNDI0MDAwMDgzMjAyNUFDNTAwMDAwQUM0NTAwMDQyRAorOjEwMDJGMDAwQUM0MDAwMDhBQzQwMDAwQ0FDNDAwMDEwQUM0MDAwMTQxNgorOjEwMDMwMDAwQUM0MDAwMThBQzQ0MDAxQzBFMDAwRDc5MjQwNDAwMDEyMAorOjEwMDMxMDAwMDAwMDE4MjEwQTAwMDA5QzAwNjAxMDIxMEUwMDA0MkUyRAorOjEwMDMyMDAwMDAwMDAwMDAwQTAwMDA5QzAwMDAxMDIxMEUwMDBDNjU3NworOjEwMDMzMDAwMDAwMDAwMDAwMDAwMTAyMThGQkYwMDE4OEZCMTAwMTREMgorOjEwMDM0MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwOEY4MjAwMUM0MgorOjEwMDM1MDAwMjdCREZGRTBBRkIwMDAxMEFGQkYwMDE4QUZCMTAwMTQ3MQorOjEwMDM2MDAwOEM0MjAwMEMzQzEwODAwMDhFMTEwMTAwMTA0MDAwMzRDMworOjEwMDM3MDAwOEZCRjAwMTgwRTAwMEQ0NTAwMDAwMDAwOEY4NTAwMTg4QgorOjEwMDM4MDAwMjQwNDdGRkYwMDkxMjAyQkFDQjEwMDAwOEUwMzAxMDRGOAorOjEwMDM5MDAwOTYwMjAxMDgwMDAzMUMwMDMwNDJGRkZGMDA2MjE4MjU4RQorOjEwMDNBMDAwQUNBMzAwMDQ5MjAyMDEwQTk2MDMwMTE0MzA0MjAwRkYzQworOjEwMDNCMDAwMzA2M0ZGRkYwMDAyMTQwMDAwNDMxMDI1QUNBMjAwMDhDOAorOjEwMDNDMDAwOTYwMzAxMEM5NjAyMDEwRTAwMDMxQzAwMzA0MkZGRkY1MQorOjEwMDNEMDAwMDA2MjE4MjVBQ0EzMDAwQzk2MDMwMTEwOTYwMjAxMTJDRQorOjEwMDNFMDAwMDAwMzFDMDAzMDQyRkZGRjAwNjIxODI1QUNBMzAwMTA4MAorOjEwMDNGMDAwOEUwMjAxMThBQ0EyMDAxNDhFMDIwMTFDQUNBMjAwMThERgorOjEwMDQwMDAwMTQ4MDAwMDg4RjgyMDAxQzk3ODIwMDAwM0MwNDIwMDVBNQorOjEwMDQxMDAwMDA0NDE4MjUyNDQyMDAwMUFDQTMwMDFDMEEwMDAwREJBNAorOjEwMDQyMDAwQTc4MjAwMDAzQzAzNDAxODk0NDIwMDFFMDA0MzEwMjVBMAorOjEwMDQzMDAwQUNBMjAwMUMwRTAwMEQ3OTI0MDQwMDAxOEZCRjAwMTgyRgorOjEwMDQ0MDAwOEZCMTAwMTQ4RkIwMDAxMDAwMDAxMDIxMDNFMDAwMDhFRAorOjEwMDQ1MDAwMjdCRDAwMjAzQzA2ODAwMDhDQzIwMkI4MjQwMzAwMDFBNgorOjEwMDQ2MDAwMDQ0MTAwMDgwMDgwMjgyMTNDMDIwODAwOEM0MjAwNjAwMgorOjEwMDQ3MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDYwMDNFMDAwMDhCNworOjEwMDQ4MDAwMDA2MDEwMjE4QzgzMDAyMDk0ODIwMDE2QUNDMzAyODA4RgorOjEwMDQ5MDAwMjQ0MkZGRkNBNEMyMDI4NDNDMDIwODAwOEM0MjAwNUM5RgorOjEwMDRBMDAwOEM4NDAwMDQ5NEEzMDAwRTI0NDIwMDAxM0MwMTA4MDA0NworOjEwMDRCMDAwQUMyMjAwNUMzQzAyMTAwMEE0QzMwMjg2QUNDNDAyODhEQgorOjEwMDRDMDAwMDAwMDE4MjFBQ0MyMDJCODAzRTAwMDA4MDA2MDEwMjE0RgorOjEwMDREMDAwMjdCREZGRTBBRkIwMDAxMDNDMTA4MDAwQUZCMjAwMThBNQorOjEwMDRFMDAwQUZCRjAwMUNBRkIxMDAxNDM2MTIwMTAwOTI0MzAwMEJFNQorOjEwMDRGMDAwMjQwMjAwMUE5NjUxMDAwODE0NjIwMDVBMDAwMDI4MjFCNAorOjEwMDUwMDAwMzIyMjAwMDExMDQwMDAxODhGODIwMDFDOEU0MjAwMDAzMQorOjEwMDUxMDAwMDAwMjIzNDAzQzAyMDAzRjM0NDJGRkZGMDA0NDEwMkIwNgorOjEwMDUyMDAwMTA0MDAwMDQzQzAzMDA0MDk2NDIwMDE0MEEwMDAxMjRERAorOjEwMDUzMDAwMDA4MzIwMjE4RTAzMDEwMDI0MDIwMTAwNTQ2MjAwMDY4MgorOjEwMDU0MDAwOTY0MjAwMTQzQzAyODAwODkwNDIwMDA0MzA0MjAwMEZBMgorOjEwMDU1MDAwMDAwMjI1MDA5NjQyMDAxNDAwODIxMDI1QUUwMjAwODBBMQorOjEwMDU2MDAwMEEwMDAxNTcwMDAwMDAwMDhDNDIwMDBDMTA0MDAwMjhENworOjEwMDU3MDAwMDAwMDAwMDAwRTAwMEQ0NTAwMDAwMDAwOTYwMjAxMDg3QQorOjEwMDU4MDAwOTYwMzAxMEM4Rjg1MDAxODMwNDIwMDNFMzA2M0ZGRkY1OAorOjEwMDU5MDAwMDAwMjE0MDAwMDQzMTAyNUFDQTIwMDAwOEUwMjAxMDBFRQorOjEwMDVBMDAwQUNBMjAwMDQ5NjAzMDExNjk2MDQwMTBFOEY4MjAwMUM3MworOjEwMDVCMDAwMDAwMzFDMDAzMDg0RkZGRjAwNjQxODI1QUNBMzAwMDg3MgorOjEwMDVDMDAwOTYwMzAxMTA5NjA0MDExMjk0NDYwMDFFMDAwMzFDMDBCRAorOjEwMDVEMDAwMzA4NEZGRkYwMDY0MTgyNUFDQTMwMDBDM0MwMjIwMDAwRgorOjEwMDVFMDAwMDBDMjMwMjU5NjAyMDExNDI0MDQwMDAxMzA0MkZGRkZBRQorOjEwMDVGMDAwQUNBMjAwMTA4RTAyMDExOEFDQTIwMDE0OTIwMjAxMEJGMgorOjEwMDYwMDAwMzA0MjAwRkZBQ0EyMDAxODBFMDAwRDc5QUNBNjAwMUMxMQorOjEwMDYxMDAwM0MwMjA4MDA4QzQyMDA0MDI0NDIwMDAxM0MwMTA4MDBEQQorOjEwMDYyMDAwQUMyMjAwNDAzQzAzMDgwMDhDNjMwMDQ0MzIyMjAwMDJFQworOjEwMDYzMDAwMzIyNDAwMDQyNDYzMDAwMTNDMDEwODAwQUMyMzAwNDQ4MAorOjEwMDY0MDAwMTA4MDAwMDgwMDAyMjgyQjAyNDAyMDIxOEZCRjAwMUNEMAorOjEwMDY1MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDAwRTNCMQorOjEwMDY2MDAwMjdCRDAwMjA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ2RgorOjEwMDY3MDAwOEZCMDAwMTAwMEEwMTAyMTAzRTAwMDA4MjdCRDAwMjA2QgorOjEwMDY4MDAwMjdCREZGRTBBRkIwMDAxMDNDMTA4MDAwQUZCMjAwMThGMworOjEwMDY5MDAwQUZCRjAwMUNBRkIxMDAxNDM2MTIwMTAwOTI0MzAwMEIzMworOjEwMDZBMDAwMjQwMjAwMDMxNDYyMDA2QTk2NTEwMDA4MzIyMjAwMDFGRAorOjEwMDZCMDAwMTA0MDAwMTc4RjgyMDAxQzhFNDMwMDAwM0MwMjAwM0Y1OAorOjEwMDZDMDAwMzQ0MkZGRkYwMDAzMjM0MDAwNDQxMDJCNTA0MDAwMDUzQworOjEwMDZEMDAwMjQwMjAxMDA5NjQyMDAxNDNDMDMwMDQwMEEwMDAxOEVFRgorOjEwMDZFMDAwMDA4MzIwMjE1NDYyMDAwNjk2NDIwMDE0M0MwMjgwMDhEOAorOjEwMDZGMDAwOTA0MjAwMDQzMDQyMDAwRjAwMDIyNTAwOTY0MjAwMTQ5MAorOjEwMDcwMDAwMDA4MjEwMjVBRTAyMDA4MDBBMDAwMUJFMDAwMDAwMDAzOQorOjEwMDcxMDAwOEM0MjAwMEMxMDQwMDAyNTAwMDAwMDAwMEUwMDBENDUyQQorOjEwMDcyMDAwMDAwMDAwMDA5NjAyMDEwODk2MDMwMTBDOEY4NTAwMTg1NgorOjEwMDczMDAwMzA0MjAwM0UzMDYzRkZGRjAwMDIxNDAwMDA0MzEwMjVFQQorOjEwMDc0MDAwQUNBMjAwMDA4RTAyMDEwMEFDQTIwMDA0OTYwMzAxMTZDOAorOjEwMDc1MDAwOTYwNDAxMEU4RjgyMDAxQzAwMDMxQzAwMzA4NEZGRkZGMgorOjEwMDc2MDAwMDA2NDE4MjVBQ0EzMDAwODk2MDMwMTEwOTYwNDAxMTIzQQorOjEwMDc3MDAwOTQ0NjAwMUUwMDAzMUMwMDMwODRGRkZGMDA2NDE4MjUwRgorOjEwMDc4MDAwQUNBMzAwMEMzQzAyMjAwMDAwQzIzMDI1OTYwMjAxMTRFQworOjEwMDc5MDAwMjQwNDAwMDEzMDQyRkZGRkFDQTIwMDEwQUNBMDAwMTQwMgorOjEwMDdBMDAwQUNBMDAwMTgwRTAwMEQ3OUFDQTYwMDFDM0MwMjA4MDA5RAorOjEwMDdCMDAwOEM0MjAwNDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwNDA3MQorOjEwMDdDMDAwM0MwMjA4MDA4QzQyMDA0NDMyMjMwMDA0MjQ0MjAwMDExMQorOjEwMDdEMDAwM0MwMTA4MDBBQzIyMDA0NDEwNjAwMDA4MzIyMjAwMDJGNAorOjEwMDdFMDAwMDI0MDIwMjE4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ2RgorOjEwMDdGMDAwOEZCMDAwMTAwQTAwMDBFMzI3QkQwMDIwMTA0MDAwMTU1NAorOjEwMDgwMDAwOEZCRjAwMUMzQzA0ODAwMDhDODMwMTA0M0MwMjYwMjBFQworOjEwMDgxMDAwQUM0MzAwMTQ4QzQyMDAwNDI0MDMwMUZFMzA0MjAzRkY2OQorOjEwMDgyMDAwMTQ0MzAwMEM4RkJGMDAxQzhDODIwMTAwMDAwMjE5QzIwRgorOjEwMDgzMDAwMjQ2MkZGRkMyQzQyMDAwODEwNDAwMDAzMjQwNDAwMDI0NAorOjEwMDg0MDAwMjQ2MkZGRkQwMDQ0MjAwNDNDMDI2MDAwQUM0NDY5MTRCMworOjEwMDg1MDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAzMgorOjEwMDg2MDAwMDAwMDEwMjEwM0UwMDAwODI3QkQwMDIwM0MwNDgwMDBBOAorOjEwMDg3MDAwOEM4MzAxMDAyNDAyMDEwMDUwNjIwMDAzM0MwMjgwMDhDNgorOjEwMDg4MDAwMDAwMDAwMEQzQzAyODAwODkwNDMwMDA0MDAwMDEwMjE4RAorOjEwMDg5MDAwMzA2MzAwMEYwMDAzMUQwMDAzRTAwMDA4QUM4MzAwODBGQworOjEwMDhBMDAwMkM4NDA3ODExMDgwMDAwQTAwMDAyODIxM0MwMjgwMDA2RgorOjEwMDhCMDAwOTQ0MjAxMDgyNDAzMjAwMDMwNDI3MDAwMTQ0MzAwMDVENAorOjEwMDhDMDAwMjc4M0ZGQjAzQzAyODAwODkwNDIwMDA1MzA0NTAwRkZCRQorOjEwMDhEMDAwMjc4M0ZGQjAwMDA1MjA4MDAwODMyMDIxMDAwNTEwQzA4MQorOjEwMDhFMDAwMDA0NTEwMjM4Qzg0MDAwMDNDMDMwODAwMjQ2MzUyRTQ3QworOjEwMDhGMDAwMDAwMjEwQzAwMDQzMTAyMTNDMDM4MDAwQUM2NDAwOTA1MworOjEwMDkwMDAwMDNFMDAwMDhBRjgyMDAxQzAzRTAwMDA4MDAwMDEwMjE5MworOjEwMDkxMDAwMDNFMDAwMDgwMDAwMTAyMTI0MDIwMTAwMTQ4MjAwMDhGNgorOjEwMDkyMDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMEZDMjQ0MjAwMDE1MAorOjEwMDkzMDAwM0MwMTA4MDBBQzIyMDBGQzBBMDAwMjI0MzBBMjAwMjA4NgorOjEwMDk0MDAwM0MwMjA4MDA4QzQyMDA4NDI0NDIwMDAxM0MwMTA4MDA2MworOjEwMDk1MDAwQUMyMjAwODQzMEEyMDAyMDEwNDAwMDA4MzBBMzAwMTAxOAorOjEwMDk2MDAwM0MwMjA4MDA4QzQyMDEwODI0NDIwMDAxM0MwMTA4MDBCRQorOjEwMDk3MDAwQUMyMjAxMDgwM0UwMDAwODAwMDAwMDAwMTA2MDAwMDgzRAorOjEwMDk4MDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMTA0MjQ0MjAwMDFFNworOjEwMDk5MDAwM0MwMTA4MDBBQzIyMDEwNDAzRTAwMDA4MDAwMDAwMDA1NAorOjEwMDlBMDAwM0MwMjA4MDA4QzQyMDEwMDI0NDIwMDAxM0MwMTA4MDA4NgorOjEwMDlCMDAwQUMyMjAxMDAwM0UwMDAwODAwMDAwMDAwMjdCREZGRThCMgorOjEwMDlDMDAwQUZCMDAwMTAzQzEwODAwMEFGQkYwMDE0MzYwNDAxMDAyRgorOjEwMDlEMDAwOTQ4MzAwMDgzMDYyMDAwNDEwNDAwMDA1MzA2NjAwMDI3NQorOjEwMDlFMDAwOEZCRjAwMTQ4RkIwMDAxMDBBMDAwMEUzMjdCRDAwMTg2RAorOjEwMDlGMDAwMTBDMDAwMDYwMDYwMjgyMThFMDQwMTAwMEUwMDAyMTRDMQorOjEwMEEwMDAwMDAwMDAwMDAwQTAwMDI1QjI0MDIwMDAxOEY4MjAwMDgzRgorOjEwMEExMDAwOEUwMzAxMDQxMDQzMDAwNzAwMDAxMDIxOEUwNDAxMDAyMgorOjEwMEEyMDAwMEUwMDAyMTQwMDAwMDAwMDhFMDIwMTA0QUY4MjAwMDhENAorOjEwMEEzMDAwMDAwMDEwMjE4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDhFOQorOjEwMEE0MDAwMjdCRDAwMTgyN0JERkZEODNDMDM2MDEwQUZCMzAwMUNDMgorOjEwMEE1MDAwQUZCRjAwMjBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBQworOjEwMEE2MDAwOEM2NDUwMDAyNDAyRkY3RjNDMTMwODAwMjY3MzUyNDgxOAorOjEwMEE3MDAwMDA4MjIwMjQzNDg0MzgwQ0FDNjQ1MDAwM0MwMjgwMDA5NgorOjEwMEE4MDAwMjQwMzAwMzdBQzQzMDAwODNDMDYwODAwMjRDNjA4NDA5NQorOjEwMEE5MDAwMDI2MDEwMjEyNDA0MDAxQzI0ODRGRkZGQUM0NjAwMDBFNworOjEwMEFBMDAwMDQ4MUZGRkQyNDQyMDAwNDNDMDIwODAwMjQ0MjAxNkM0MgorOjEwMEFCMDAwM0MwMTA4MDBBQzIyNTI1MDNDMDIwODAwMjQ0MjA1QjgxOAorOjEwMEFDMDAwM0MwMTA4MDBBQzIyNTI1NDNDMDIwODAwMjQ0MjAyODQzQgorOjEwMEFEMDAwM0MwMTA4MDBBQzIyNTI5MDNDMDIwODAwMjQ0MjA0MDg2OQorOjEwMEFFMDAwM0MwMzA4MDAyNDYzMDg0ODNDMDQwODAwMjQ4NDA4RjRGQworOjEwMEFGMDAwM0MwNTA4MDAyNEE1MkM0QzNDMDEwODAwQUMyMjUyQjA1NworOjEwMEIwMDAwM0MwMjA4MDAyNDQyMDdBNDNDMDEwODAwQUMyNjUyOTg4RAorOjEwMEIxMDAwM0MwMTA4MDBBQzI1NTJBNDNDMDEwODAwQUMyMzUyQUNCNworOjEwMEIyMDAwM0MwMTA4MDBBQzI0NTJCNDNDMDEwODAwQUMyMjUyQjg4RAorOjEwMEIzMDAwM0MwMTA4MDBBQzIzNTI0QzNDMDEwODAwQUMyMDUyNTg0OAorOjEwMEI0MDAwM0MwMTA4MDBBQzIwNTI1QzNDMDEwODAwQUMyMDUyNjAyMworOjEwMEI1MDAwM0MwMTA4MDBBQzIwNTI2NDNDMDEwODAwQUMyMDUyNjgwMworOjEwMEI2MDAwM0MwMTA4MDBBQzIwNTI2QzNDMDEwODAwQUMyMDUyNzBFMworOjEwMEI3MDAwM0MwMTA4MDBBQzI0NTI3NDNDMDEwODAwQUMyMDUyNzhCRgorOjEwMEI4MDAwM0MwMTA4MDBBQzIwNTI3QzNDMDEwODAwQUMyMDUyODBBMworOjEwMEI5MDAwM0MwMTA4MDBBQzIwNTI4NDNDMDEwODAwQUMyMDUyODg4MworOjEwMEJBMDAwM0MwMTA4MDBBQzI2NTI4QzNDMDEwODAwQUMyNjUyOTQ1MworOjEwMEJCMDAwM0MwMTA4MDBBQzIwNTI5QzNDMDEwODAwQUMyNTUyQTAyRQorOjEwMEJDMDAwM0MwMTA4MDBBQzIzNTJBODBFMDAwNTVBMDAwMDAwMDBBQQorOjEwMEJEMDAwOEY4MzAwMDQzQzAyMDgwMDhDNDIwMDIwMTA2MjAwMUYzQQorOjEwMEJFMDAwMDAwMDg4MjEyNzkyRkZCMDNDMTAwODAwMjYxMDUyRTQzNAorOjEwMEJGMDAwM0MwMjA4MDA4QzQyMDAyMDI0MDUwMDAxMDIyNTE4MDQ1NAorOjEwMEMwMDAwMDA0MzIwMjQ4RjgyMDAwNDAwNDMxMDI0NTA0NDAwMEMzMQorOjEwMEMxMDAwMjYzMTAwMDExMDgwMDAwOEFGOTAwMDFDOEU0MzAwMDBCOAorOjEwMEMyMDAwM0MwMjgwMDBBQzQzMDA5MDBFMDAwRDBDQUUwNTAwMENBMQorOjEwMEMzMDAwMEEwMDAyREUyNjMxMDAwMUFFMDAwMDBDMjYzMTAwMDE2MAorOjEwMEM0MDAwMkUyMjAwMDIyNjEwMDAzODE0NDBGRkU5MjY1MjAwMDQyQworOjEwMEM1MDAwM0MwMjA4MDA4QzQyMDAyMEFGODIwMDA0M0MxMDgwMDA1RgorOjEwMEM2MDAwOEUxMTAwMDAzMjIyMDAwNzEwNDBGRkRBOEY4MzAwMDQ0QgorOjEwMEM3MDAwMzIyMjAwMDExMDQwMDAyMTMyMjIwMDAyOEUwMjAxMDBDNworOjEwMEM4MDAwQUUwMjAwMjA4RTAyMDEwNEFFMDIwMEE4MEUwMDAxRjZBMgorOjEwMEM5MDAwOEUwNDAxMDA5MjAyMDEwQjMwNDMwMEZGMkM2MjAwMUQwNAorOjEwMENBMDAwNTQ0MDAwMDQwMDAzMTA4MDBFMDAwMjEwMEEwMDAyRkZFRQorOjEwMENCMDAwMDAwMDAwMDAwMDUzMTAyMThDNDIwMDAwMDA0MEY4MDlBMQorOjEwMENDMDAwMDAwMDAwMDAxMDQwMDAwNDNDMDI4MDAwOEM0MzAxMDQzRQorOjEwMENEMDAwM0MwMjYwMjBBQzQzMDAxNDNDMDIwODAwOEM0MjAwMzQwQgorOjEwMENFMDAwM0MwNDQwMDAzQzAzODAwMDI0NDIwMDAxQUM2NDAxMzgxNQorOjEwMENGMDAwM0MwMTA4MDBBQzIyMDAzNDMyMjIwMDAyMTA0MDAwMTBGNworOjEwMEQwMDAwMzIyMjAwMDQzQzEwODAwMDhFMDIwMTQwQUUwMjAwMjAxRQorOjEwMEQxMDAwMEUwMDAxRjY4RTA0MDE0MDBFMDAwMzk3MDAwMDAwMDA1MworOjEwMEQyMDAwM0MwMjQwMDBBRTAyMDE3ODNDMDIwODAwOEM0MjAwMzhEMAorOjEwMEQzMDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDM4MzIyMjAwMDRBOQorOjEwMEQ0MDAwMTA0MEZGQTQ4RjgzMDAwNDNDMTA4MDAwOEUwMjAxODBCRAorOjEwMEQ1MDAwQUUwMjAwMjAwRTAwMDFGNjhFMDQwMTgwOEUwMzAxODA5OQorOjEwMEQ2MDAwMjQwMjBGMDAxNDYyMDAwNzNDMDI4MDA4OEUwMjAxODhGMgorOjEwMEQ3MDAwM0MwMzAwRTAzMDQyRkZGRjAwNDMxMDI1MEEwMDAzM0IyNAorOjEwMEQ4MDAwQUUwMjAwODAzNDQyMDA4MDkwNDIwMDAwMjQwMzAwNTBGNAorOjEwMEQ5MDAwMzA0MjAwRkYxNDQzMDAwNzAwMDAwMDAwMEUwMDAzNzRGRgorOjEwMERBMDAwMDAwMDAwMDAxNDQwMDAwMzAwMDAwMDAwMEUwMDA5NUQ3OAorOjEwMERCMDAwMDAwMDAwMDAzQzAyMDgwMDhDNDIwMDNDM0MwNDQwMDA2MworOjEwMERDMDAwM0MwMzgwMDAyNDQyMDAwMUFDNjQwMUI4M0MwMTA4MDBFRgorOjEwMEREMDAwQUMyMjAwM0MwQTAwMDJDMzhGODMwMDA0M0MwMjkwMDA1NgorOjEwMERFMDAwMzQ0MjAwMDEwMDgyMjAyNTNDMDI4MDAwQUM0NDAwMjBGNworOjEwMERGMDAwM0MwMzgwMDA4QzYyMDAyMDA0NDBGRkZFMDAwMDAwMDBFNQorOjEwMEUwMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDI4MDAwMzQ0MzAwMDFDMQorOjEwMEUxMDAwMDA4MzIwMjUwM0UwMDAwOEFDNDQwMDIwMjdCREZGRTA0QworOjEwMEUyMDAwQUZCMTAwMTRBRkIwMDAxMDAwODA4ODIxQUZCRjAwMTgzMAorOjEwMEUzMDAwMEUwMDAzNDUzMEIwMDBGRjhGODNGRkE4MDIyMDIwMjE2MQorOjEwMEU0MDAwOTA2MjAwMjUwMjAyODAyNUEwNzAwMDI1OEM3MDAwMTg5OQorOjEwMEU1MDAwM0MwMjgwMDAwRTAwMDM1MDAyMDI4MDI0MTYwMDAwMEFBQgorOjEwMEU2MDAwOEZCRjAwMTgzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkUzNQorOjEwMEU3MDAwMjQwMjAwMDJBQzcxMDFDMEEwNjIwMUM0M0MwMjEwMDA1NworOjEwMEU4MDAwQUM2MjAxRjg4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTA1MgorOjEwMEU5MDAwMDNFMDAwMDgyN0JEMDAyMDI3QkRGRkU4QUZCRjAwMTAxQQorOjEwMEVBMDAwM0MwMzgwMDA5NDYyMDE4NDMwNDIwMjAwMTA0MDAwMDUzRgorOjEwMEVCMDAwMDAwMDIwMjEwRTAwMEZDRDAwMDAwMDAwMEEwMDAzOEE3MAorOjEwMEVDMDAwMjQwNDAwMDE4QzYyMDE4ODA0NDAwMDBBOEZCRjAwMTBENgorOjEwMEVEMDAwOEM2MjAxODgzQzAzRkYwMDAwNDMxMDI0M0MwMzA0MDBBMworOjEwMEVFMDAwMTQ0MzAwMDQyNDA0MDAwMThGODJGRkE4OTA0MjAwMDhFQworOjEwMEVGMDAwOEZCRjAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMThGQworOjEwMEYwMDAwOEY4MkZGQUMyNDAzMDAwMTI0MDUwMDAxQTA0MDAwMUFEOQorOjEwMEYxMDAwOEY4MkZGQThBNDQzMDAxNjNDMDI4MDAwMEEwMDAzNTVGQworOjEwMEYyMDAwOEM0NDAxNDA4Rjg1RkZBODI3QkRGRkUwQUZCRjAwMUNBOAorOjEwMEYzMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwOTBBMjAwMDAyMworOjEwMEY0MDAwMzA0NDAwRkYzODgzMDAyMDM4ODIwMDMwMDAwMzE4MkIyMworOjEwMEY1MDAwMDAwMjEwMkIwMDYyMTgyNDEwNjAwMDA1M0MwMjgwMDA4MworOjEwMEY2MDAwMjQwMjAwNTAxNDgyMDA4MThGQkYwMDFDM0MwMjgwMDBDQworOjEwMEY3MDAwOTA0MjAxNDgzMDQyMDBGRjI0NDNGRkZGMkM2MjAwMDVFRAorOjEwMEY4MDAwMTA0MDAwN0E4RkJGMDAxQzAwMDMxMDgwM0MwMzA4MDA1MworOjEwMEY5MDAwMjQ2MzUxREMwMDQzMTAyMThDNDIwMDAwMDA0MDAwMDgxMworOjEwMEZBMDAwMDAwMDAwMDAzQzExODAwMDhFMjQwMTQwMEUwMDAzNDUyQgorOjEwMEZCMDAwOEY5MkZGQTg4RTUwMDAwQzhFMjIwMTQ0MTYwMjAwMDI3MAorOjEwMEZDMDAwMjQwMjAwMDFBRTQyMDAwQzBFMDAwMzUwOEUyNDAxNDBBQQorOjEwMEZEMDAwOEUyMjAxNDQxNDUwMDAwNjhGQkYwMDFDOEZCMjAwMThFRgorOjEwMEZFMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRjM5MjdCRDAwMjAwOAorOjEwMEZGMDAwOEU0MjAwMEMwQTAwMDQyMjAwMDAwMDAwOTRBMjAwMTA5RgorOjEwMTAwMDAwM0MwNDgwMDA4QzgzMDE0NDMwNDJGRkZGMTQ2MjAwMDlERAorOjEwMTAxMDAwMDAwMDAwMDAyNDAyMDAwMUE0QTIwMDEwOEM4MjAxNDAwNAorOjEwMTAyMDAwQUM4MjAyMDAzQzAyMTAwMEFDODIwMjM4MEEwMDA0MjlBMworOjEwMTAzMDAwOEZCRjAwMUM5NEEyMDAxMDBBMDAwNDIyMDAwMDAwMDBEMAorOjEwMTA0MDAwMjQwMjAwMjAxNDgyMDAwRTNDMTE4MDAwOTRBMjAwMTJBMQorOjEwMTA1MDAwM0MwMzgwMDA4QzYzMDE0NDMwNDJGRkZGMTQ2MjAwMDVCMgorOjEwMTA2MDAwMDAwMDAwMDAyNDAyMDAwMUE0QTIwMDEyMEEwMDAzRkNGOAorOjEwMTA3MDAwOEZCRjAwMUM5NEEyMDAxMjBBMDAwNDIyMDAwMDAwMDA4RQorOjEwMTA4MDAwOEUyNDAxNDAwRTAwMDM0NThGOTJGRkE4OTY0MjAwMTI2NQorOjEwMTA5MDAwOEUyMzAxNDQzMDUwRkZGRjE2MDMwMDAyMjQwMjAwMDE5QQorOjEwMTBBMDAwQTY0MjAwMTIwRTAwMDM1MDhFMjQwMTQwOEUyMjAxNDRGRAorOjEwMTBCMDAwMTYwMjAwMDY4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTRGQgorOjEwMTBDMDAwOEZCMDAwMTAwQTAwMDM4RTI3QkQwMDIwOTY0MjAwMTI0OAorOjEwMTBEMDAwMEEwMDA0MjIwMDAwMDAwMDk0QTIwMDE0M0MwMzgwMDBENworOjEwMTBFMDAwOEM2MzAxNDQzMDQyRkZGRjE0NjIwMDA4OEZCRjAwMUM3NAorOjEwMTBGMDAwMjQwMjAwMDE4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBDRAorOjEwMTEwMDAwQTRBMjAwMTQwQTAwMTQyNDI3QkQwMDIwOTRBMjAwMTRGNQorOjEwMTExMDAwMEEwMDA0MjIwMDAwMDAwMDk0QTIwMDE2M0MwMzgwMDA5NAorOjEwMTEyMDAwOEM2MzAxNDQzMDQyRkZGRjE0NjIwMDA4MjQwMjAwMDE3NgorOjEwMTEzMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA0OQorOjEwMTE0MDAwQTRBMjAwMTYwQTAwMEIwMDI3QkQwMDIwOTRBMjAwMTZERQorOjEwMTE1MDAwMTQ0MDAwMDY4RkJGMDAxQzNDMDIwODAwOEM0MjAwNzA0NworOjEwMTE2MDAwMjQ0MjAwMDEzQzAxMDgwMEFDMjIwMDcwOEZCMjAwMTgzQworOjEwMTE3MDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjBERAorOjEwMTE4MDAwMjdCREZGRDhBRkIyMDAxODhGOTJGRkE4QUZCMTAwMTRFRgorOjEwMTE5MDAwQUZCRjAwMjBBRkIzMDAxQ0FGQjAwMDEwM0MwMjgwMDAxNgorOjEwMTFBMDAwMzQ1MTAxMDA4QzUwMDEwMDkyNDIwMDAwOTIyMzAwMDk0QQorOjEwMTFCMDAwMzA0NDAwRkYyNDAyMDAxRjEwNjIwMEFCMjg2MjAwMjBCMAorOjEwMTFDMDAwMTA0MDAwMTkyNDAyMDAzODI4NjIwMDBBMTA0MDAwMEQ2NworOjEwMTFEMDAwMjQwMjAwMEIyODYyMDAwODEwNDAwMDJFOEY4MjAwMUNBMQorOjEwMTFFMDAwMDQ2MDAxMDMyODYyMDAwMjE0NDAwMDJBOEY4MjAwMUM2MAorOjEwMTFGMDAwMjQwMjAwMDYxMDYyMDAyNjhGQkYwMDIwMEEwMDA1NEM2MgorOjEwMTIwMDAwOEZCMzAwMUMxMDYyMDA2MDI4NjIwMDBCMTQ0MDAwRjlDQworOjEwMTIxMDAwOEZCRjAwMjAyNDAyMDAwRTEwNjIwMDc4OEY4MjAwMUMxNQorOjEwMTIyMDAwMEEwMDA1NEM4RkIzMDAxQzEwNjIwMEQxMjg2MjAwMzlGRgorOjEwMTIzMDAwMTA0MDAwMEEyNDAyMDA4MDI0MDIwMDM2MTA2MjAwRTRGQworOjEwMTI0MDAwMjg2MjAwMzcxMDQwMDBDMjI0MDIwMDM1MTA2MjAwRDgyNgorOjEwMTI1MDAwOEZCRjAwMjAwQTAwMDU0QzhGQjMwMDFDMTA2MjAwMkRDOAorOjEwMTI2MDAwMjg2MjAwODExMDQwMDAwNjI0MDIwMEM4MjQwMjAwMzlEMAorOjEwMTI3MDAwMTA2MjAwQzg4RkJGMDAyMDBBMDAwNTRDOEZCMzAwMUMwRAorOjEwMTI4MDAwMTA2MjAwQTI4RkJGMDAyMDBBMDAwNTRDOEZCMzAwMUMyMworOjEwMTI5MDAwOEY4MjAwMUM4QzQyMDAwQzEwNDAwMEQ2OEZCRjAwMjBCMworOjEwMTJBMDAwMEUwMDBENDUwMDAwMDAwMDNDMDM4MDAwMzQ2MzAxMDA4NworOjEwMTJCMDAwOEM2MjAwMDA4Rjg1MDAxODk0NjcwMDA4OTQ2NjAwMEMwQgorOjEwMTJDMDAwQUNBMjAwMDA4QzY0MDAwNDhGODIwMDFDMDAwNjM0MDA3NQorOjEwMTJEMDAwQUNBNDAwMDQ5NDQ4MDAxRThDNjIwMDE4MDAwNzNDMDA3NworOjEwMTJFMDAwMDBFODM4MjVBQ0EyMDAwODhDNjIwMDFDMjQwNDAwMDEzMAorOjEwMTJGMDAwQUNBMjAwMEM5MDYyMDAwQTAwQzIzMDI1QUNBNjAwMTAxRgorOjEwMTMwMDAwQUNBMDAwMTRBQ0EwMDAxOEFDQTcwMDFDMEEwMDA1MEI5MAorOjEwMTMxMDAwOEZCRjAwMjA4RjgyMDAxQzhDNDIwMDBDMTA0MDAwQjU1MworOjEwMTMyMDAwOEZCRjAwMjAwRTAwMEQ0NTAwMDAwMDAwOEY4MjAwMUNDMgorOjEwMTMzMDAwOTYyNDAwMDg5NjI1MDAwQzk0NDMwMDFFMDAwNDIyMDIwNworOjEwMTM0MDAwOTYyNjAwMEU4RjgyMDAxODAwMDQyNjAwMDA4MzIwMjVCOAorOjEwMTM1MDAwMDAwNTJDMDAzQzAzMDA4MDAwQTYyODI1MDA4MzIwMjVFMgorOjEwMTM2MDAwQUM0MDAwMDBBQzQwMDAwNEFDNDAwMDA4QUM0MDAwMENCNQorOjEwMTM3MDAwQUM0NTAwMTBBQzQwMDAxNEFDNDAwMDE4QUM0NDAwMUM1QworOjEwMTM4MDAwMEEwMDA1MEEyNDA0MDAwMTk2MjIwMDBDMTQ0MDAwMThFQgorOjEwMTM5MDAwMDAwMDAwMDA5MjQyMDAwNTMwNDIwMDEwMTQ0MDAwMTQ4QQorOjEwMTNBMDAwMDAwMDAwMDAwRTAwMDM0NTAyMDAyMDIxOTI0MjAwMDVDQgorOjEwMTNCMDAwMDIwMDIwMjEzNDQyMDAxMDBFMDAwMzUwQTI0MjAwMDUxQQorOjEwMTNDMDAwOTI0MjAwMDAyNDAzMDAyMDMwNDIwMEZGMTA0MzAwODhCNgorOjEwMTNEMDAwMDIwMDIwMjE4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMThBNQorOjEwMTNFMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAxMDM2MjdCRDAwMjhGRQorOjEwMTNGMDAwMDAwMDAwMEQwQTAwMDU0QjhGQkYwMDIwOEM0MjAwMEMzRQorOjEwMTQwMDAwMTA0MDAwN0M4RkJGMDAyMDBFMDAwRDQ1MDAwMDAwMDA0MgorOjEwMTQxMDAwOEUyMjAwMDQ4Rjg0MDAxODk2MjMwMDBDQUM4MjAwMDBGQQorOjEwMTQyMDAwM0MwMjgwMDg5NDQ1MDAyQzhGODIwMDFDMDAwMzFDMDBBNQorOjEwMTQzMDAwMzBBNUZGRkY5NDQ2MDAxRTNDMDI0MDBFMDA2NTE4MjVCMworOjEwMTQ0MDAwMDBDMjMwMjVBQzgzMDAwNEFDODAwMDA4QUM4MDAwMENFNgorOjEwMTQ1MDAwQUM4MDAwMTBBQzgwMDAxNEFDODAwMDE4QUM4NjAwMUM3RQorOjEwMTQ2MDAwMEEwMDA1MEEyNDA0MDAwMTBFMDAwMzQ1MDIwMDIwMjFBMQorOjEwMTQ3MDAwOEY5M0ZGQUMwMjAwMjAyMTBFMDAwMzUwQTY2MDAwMENFOQorOjEwMTQ4MDAwMDIwMDIwMjEwRTAwMDM1NTI0MDUwMDAxOEY4MjAwMUM1QworOjEwMTQ5MDAwOEM0MjAwMEMxMDQwMDA1NzhGQkYwMDIwMEUwMDBENDVGRAorOjEwMTRBMDAwMDAwMDAwMDA5NjIyMDAwQzhGODMwMDE4MDAwMjE0MDAzOAorOjEwMTRCMDAwQUM3MDAwMDBBQzYyMDAwNEFDNjAwMDA4OEU0NDAwMzhFMAorOjEwMTRDMDAwOEY4MjAwMUNBQzY0MDAwQzhFNDYwMDNDOTQ0NTAwMUVDQworOjEwMTREMDAwM0MwMjQwMUZBQzY2MDAxMDAwQTIyODI1OEU2MjAwMDQ2QQorOjEwMTRFMDAwMjQwNDAwMDFBQzYyMDAxNEFDNjAwMDE4QUM2NTAwMUM2MAorOjEwMTRGMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ3MworOjEwMTUwMDAwOEZCMDAwMTAwQTAwMEQ3OTI3QkQwMDI4MjQwMjAwMjBBQQorOjEwMTUxMDAwMTA4MjAwMzk4RkIzMDAxQzBFMDAwRjFGMDAwMDAwMDA2NgorOjEwMTUyMDAwMTA0MDAwMzQ4RkJGMDAyMDNDMDM4MDAwOEM2MjAxRjgyMworOjEwMTUzMDAwMDQ0MEZGRkUyNDAyMDAwMkFDNzAwMUMwQTA2MjAxQzQ5RQorOjEwMTU0MDAwM0MwMjEwMDBBQzYyMDFGODBBMDAwNTRCOEZCRjAwMjA3RQorOjEwMTU1MDAwMDIwMDIwMjE4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTgyMworOjEwMTU2MDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRTY4MjdCRDAwMjg0QworOjEwMTU3MDAwOTYyNTAwMEMwMjAwMjAyMThGQkYwMDIwOEZCMzAwMUM5NQorOjEwMTU4MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMEEwMDBFOERCQQorOjEwMTU5MDAwMjdCRDAwMjgwMjAwMjAyMThGQjMwMDFDOEZCMjAwMTg0NQorOjEwMTVBMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRUI4MjdCRDAwMjhCQworOjEwMTVCMDAwOTIyNTAwMEQwMjAwMjAyMThGQjMwMDFDOEZCMjAwMTg2RAorOjEwMTVDMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRjA5MjdCRDAwMjg0QQorOjEwMTVEMDAwMDIwMDIwMjE4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMThBMworOjEwMTVFMDAwOEZCMTAwMTQ4RkIwMDAxMDBBMDAwRUUwMjdCRDAwMjg1NAorOjEwMTVGMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ3MgorOjEwMTYwMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDI4M0MwMzgwMDBENQorOjEwMTYxMDAwOEM2MjAyNzgwNDQwRkZGRTI0MDIwMDAyQUM2NDAyNDBBNworOjEwMTYyMDAwQTA2MjAyNDQzQzAyMTAwMDAzRTAwMDA4QUM2MjAyNzhCMQorOjEwMTYzMDAwQTM4MDAwMTAwM0UwMDAwOEEzODAwMDExM0MwMzgwMDA5OQorOjEwMTY0MDAwOEM2MjAyNzgwNDQwRkZGRThGODIwMDE0QUM2MjAyNDA3QworOjEwMTY1MDAwMjQwMjAwMDJBMDYyMDI0NDNDMDIxMDAwMDNFMDAwMDhFMQorOjEwMTY2MDAwQUM2MjAyNzgzQzAyNjAwMDAzRTAwMDA4OEM0MjU0MDQ0MworOjEwMTY3MDAwOTA4MzAwMzAyNDAyMDAwNTAwODA0MDIxMzA2MzAwM0Y0OQorOjEwMTY4MDAwMDAwMDQ4MjExNDYyMDAwNTAwMDA1MDIxOTA4MjAwNENBNworOjEwMTY5MDAwOTQ4MzAwNEUzMDQ5MDBGRjMwNkFGRkZGQUQwMDAwMEMxQworOjEwMTZBMDAwQUQwMDAwMTBBRDAwMDAyNDk1MDIwMDE0OEQwNTAwMUM1MworOjEwMTZCMDAwOEQwNDAwMTgzMDQyRkZGRjAwNDkxMDIzMDAwMjExMDA4MgorOjEwMTZDMDAwMDAwMjM3QzMwMDQwMzgyMTAwODYyMDIzMDBBMjEwMkJERgorOjEwMTZEMDAwMDA4MjIwMjMwMEE3MjgyM0FEMDUwMDFDQUQwNDAwMThCQworOjEwMTZFMDAwQTUwOTAwMTRBNTA5MDAyMEE1MEEwMDE2MDNFMDAwMDhCQQorOjEwMTZGMDAwQTUwQTAwMjIwM0UwMDAwODAwMDAwMDAwMjdCREZGRDg3MworOjEwMTcwMDAwQUZCMjAwMTgzQzEyODAwOEFGQjQwMDIwQUZCMzAwMUM4OQorOjEwMTcxMDAwQUZCMTAwMTRBRkJGMDAyNEFGQjAwMDEwMzY1MTAxMDBDQworOjEwMTcyMDAwM0MwMjYwMDA4QzQyNTQwNDkyMjIwMDBDM0MxNDA4MDBERAorOjEwMTczMDAwOTI5NDAwRjczMDQzMDBGRjI0MDIwMDAxMTA2MjAwMzI0RgorOjEwMTc0MDAwMDA4MDk4MjEyNDAyMDAwMjE0NjIwMDM1MzY1MDAwODA4NworOjEwMTc1MDAwMEUwMDEzRkUwMDAwMDAwMDkyMDIwMDRDMjQwM0ZGODBFNAorOjEwMTc2MDAwM0MwNDgwMDAzMDQyMDA3RjAwMDIxMUMwMjQ0MjAyNDA0RAorOjEwMTc3MDAwMDI2MjEwMjEwMDQzMTgyNEFDODMwMDk0OTI0NTAwMDhCMworOjEwMTc4MDAwOTIwNDAwNEMzMDQyMDA3RjNDMDM4MDA2MTQ4NTAwMDcyMQorOjEwMTc5MDAwMDA0MzgwMjEyNDAyRkZGRkEyMjIwMDExMjQwMkZGRkY0OAorOjEwMTdBMDAwQTYyMjAwMTIwQTAwMDVCRTI0MDJGRkZGOTYwMjAwMjBCNgorOjEwMTdCMDAwQTIyMjAwMTE5NjAyMDAyMkE2MjIwMDEyOEUwMjAwMjQwQworOjEwMTdDMDAwM0MwNDgwMDhBRTIyMDAxNDM0ODUwMDgwOTBBMjAwNENCNgorOjEwMTdEMDAwMzQ4MzAxMDBBMDYyMDAxMDhDQTIwMDNDQUM2MjAwMThBRgorOjEwMTdFMDAwOEM4MjAwNjhBQzYyMDBFNDhDODIwMDY0QUM2MjAwRTAzMQorOjEwMTdGMDAwOEM4MjAwNkNBQzYyMDBFODI0MDIwMDAxQTBBMjAwNjhBOAorOjEwMTgwMDAwMEEwMDA1REEzQzA0ODAwODBFMDAxNDE3MDAwMDAwMDBFRQorOjEwMTgxMDAwMzY0MjAwODBBMDQwMDA2ODBBMDAwNURBM0MwNDgwMDhENworOjEwMTgyMDAwQTIwMDAwNjhBMjAwMDA2OTBBMDAwNjE1M0MwMjgwMDhCOAorOjEwMTgzMDAwMzQ4MzAwODA4QzYyMDAzODM0ODUwMTAwQUM2MjAwNkMxNworOjEwMTg0MDAwMjQwMjAwMDFBMDYyMDA2OTkwQTIwMEM1OTA4MzAwMDhGNAorOjEwMTg1MDAwMzA1MTAwRkYzMDcyMDA3RjEyMzIwMDE5MDAxMTExQzBBOAorOjEwMTg2MDAwMjQ0MjAyNDAwMjYyMTAyMTI0MDNGRjgwMDA0MzE4MjQxNgorOjEwMTg3MDAwM0MwNDgwMDBBQzgzMDA5NDMwNDIwMDdGM0MwMzgwMDYyRgorOjEwMTg4MDAwMDA0MzgwMjE4RTAyMDAwQzEwNDAwMDBEMDIwMDIwMjEzOAorOjEwMTg5MDAwMEUwMDA1NkEwMDAwMDAwMDI2MjIwMDAxMzA1MTAwRkYwMgorOjEwMThBMDAwOTIwMzAwM0MwMjM0MTAyNjAwMDIxMDJCMDAwMjEwMjM4OQorOjEwMThCMDAwMzA2MzAwN0YwMjIyODgyNDBBMDAwNUU0QTIwMzAwM0M3MgorOjEwMThDMDAwM0MwODgwMDgzNTA0MDEwMDhDODIwMEQwMzUwNzAwODA3OAorOjEwMThEMDAwQUNFMjAwM0M4QzgyMDBEMEFEMDIwMDAwOTBFNTAwNENGMAorOjEwMThFMDAwOTA4NjAwQzU5MEUzMDA0QzkwODQwMEM1MjQwMkZGODBFMAorOjEwMThGMDAwMDBBMjI4MjQzMDYzMDA3RjMwODQwMEZGMDBBNjI4MjU0MgorOjEwMTkwMDAwMDA2NDE4MkExMDYwMDAwMjMwQTUwMEZGMzhBNTAwODA4RQorOjEwMTkxMDAwQTBFNTAwNENBMTA1MDAwOTNDMDI4MDA4OTA0MzAwMEVBMAorOjEwMTkyMDAwMzQ0NDAwODAzQzA1ODAwMEEwNDMwMDBBOEM4MzAwMThFQQorOjEwMTkzMDAwM0MwMjdGRkYzNDQyRkZGRjAwNjIxODI0QUM4MzAwMTg5MgorOjEwMTk0MDAwOENBMjAxRjgwNDQwRkZGRTAwMDAwMDAwQUNCMzAxQzAwRgorOjEwMTk1MDAwOEZCRjAwMjQ4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMThGQgorOjEwMTk2MDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDIwMDAyQTBBMjAxQzRBNQorOjEwMTk3MDAwMjdCRDAwMjgzQzAyMTAwMDAzRTAwMDA4QUNBMjAxRjhEQgorOjEwMTk4MDAwOTBBMjAwMDAyNDQyMDAwMUEwQTIwMDAwM0MwMzA4MDAzNQorOjEwMTk5MDAwOEM2MzAwRjQzMDQyMDBGRjE0NDMwMDAyMDA4MDMwMjFDOQorOjEwMTlBMDAwQTBBMDAwMDA5MEEyMDAwMDhGODQwMDE0MDAwMjExQzBDQgorOjEwMTlCMDAwMjQ0MjAyNDAyNDgzMDA0MDAwODIyMDIxMjQwMkZGODAzMAorOjEwMTlDMDAwMDA4MjIwMjQzMDYzMDA3RjNDMDI4MDBBMDA2MjE4MjFEQworOjEwMTlEMDAwM0MwMjgwMDBBQzQ0MDAyNDAzRTAwMDA4QUNDMzAwMDBEQgorOjEwMTlFMDAwOTQ4MjAwMDY5MDgzMDAwNThDODUwMDBDOEM4NjAwMTA4NAorOjEwMTlGMDAwOEM4NzAwMTg4Qzg4MDAxQzhDODQwMDIwM0MwMTA4MDAxNworOjEwMUEwMDAwQTQyMjUyQzYzQzAxMDgwMEEwMjM1MkM1M0MwMTA4MDA5NAorOjEwMUExMDAwQUMyNTUyQ0MzQzAxMDgwMEFDMjY1MkQwM0MwMTA4MDA1OQorOjEwMUEyMDAwQUMyNzUyRDgzQzAxMDgwMEFDMjg1MkRDM0MwMTA4MDAyRAorOjEwMUEzMDAwQUMyNDUyRTAwM0UwMDAwODAwMDAwMDAwM0MwMjgwMDhGMworOjEwMUE0MDAwMzQ0MjAxMDA4QzQ0MDAzNDNDMDM4MDAwMzQ2NTA0MDBCRgorOjEwMUE1MDAwQUM2NDAwMzg4QzQyMDAzOEFGODUwMDIwQUM2MjAwM0M5QQorOjEwMUE2MDAwM0MwMjAwMDVBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDBGNQorOjEwMUE3MDAwMDNFMDAwMDgwMDAwMDAwMDNDMDIwMDA2MzA4NDAwRkY4NAorOjEwMUE4MDAwMDA4MjIwMjUzQzAyODAwMEFDNDQwMDMwMDAwMDAwMDBCMQorOjEwMUE5MDAwMDAwMDAwMDAwMDAwMDAwMDNDMDM4MDAwOEM2MjAwMDA5OQorOjEwMUFBMDAwMzA0MjAwMTAxMDQwRkZGRDM0NjIwNDAwMDNFMDAwMDhFMworOjEwMUFCMDAwQUY4MjAwMjA5NEMyMDAwMDNDMDgwODAwOTUwODAwQ0FDQworOjEwMUFDMDAwMzBFN0ZGRkYwMDgwNDgyMTAxMDIxMDIxQTRDMjAwMDA3RQorOjEwMUFEMDAwOTRDMjAwMDAzMDQyRkZGRjAwRTIxMDJCNTQ0MDAwMDE4RQorOjEwMUFFMDAwQTRDNzAwMDA5NEEyMDAwMDNDMDMwODAwOEM2MzAwQ0M1MworOjEwMUFGMDAwMjQ0MjAwMDFBNEEyMDAwMDk0QTIwMDAwMzA0MkZGRkY5MworOjEwMUIwMDAwMTQ0MzAwMDczQzAyODAwODAxMDcxMDJCQTRBMDAwMDAyQQorOjEwMUIxMDAwNTQ0MDAwMDEwMTAwMzgyMUE0QzcwMDAwM0MwMjgwMDhBNQorOjEwMUIyMDAwMzQ0NjAxMDA4Q0MzMDAyODk0QTIwMDAwM0MwNDgwMDBDRAorOjEwMUIzMDAwMzA0MkZGRkUwMDAyMTBDMDAwNjIxMDIxQUM4MjAwM0M2NworOjEwMUI0MDAwOEM4MjAwM0MwMDYyMTgyMzE4NjAwMDA0MDAwMDAwMDAzMgorOjEwMUI1MDAwOENDMjAwMjQwQTAwMDZBNjI0NDIwMDAxOENDMjAwMjQ4NAorOjEwMUI2MDAwQUM4MjAwMzgzQzAyMDA1MDM0NDIwMDEwM0MwMzgwMDAzQworOjEwMUI3MDAwQUM2MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwMUI4MDAwOEM2MjAwMDAzMDQyMDAyMDEwNDBGRkZEMDAwMDAwMDA4OQorOjEwMUI5MDAwOTRBMjAwMDAzQzA0ODAwMDMwNDIwMDAxMDAwMjEwQzAwQQorOjEwMUJBMDAwMDA0NDEwMjE4QzQzMDQwMEFEMjMwMDAwOEM0MjA0MDQ0NworOjEwMUJCMDAwQUQyMjAwMDQzQzAyMDAyMDAzRTAwMDA4QUM4MjAwMzBBQgorOjEwMUJDMDAwMjdCREZGRTBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBGNgorOjEwMUJEMDAwQUZCRjAwMUM5NEMyMDAwMDAwQzA4MDIxM0MxMjA4MDA2RQorOjEwMUJFMDAwOTY1MjAwQzYyNDQyMDAwMUE2MDIwMDAwOTYwMzAwMDA5RgorOjEwMUJGMDAwOTRFMjAwMDAwMEUwMzAyMTE0NDMwMDA1OEZCMTAwMzA3MgorOjEwMUMwMDAwMEUwMDA2N0IwMjQwMzgyMTBBMDAwNkREMDAwMDAwMDBCRAorOjEwMUMxMDAwOEM4MzAwMDQ4QzgyMDAwNDI0NDIwMDQwMDQ2MTAwMDc4RAorOjEwMUMyMDAwQUM4MjAwMDQ4QzgyMDAwNDA0NDAwMDA0MDAwMDAwMDAyOAorOjEwMUMzMDAwOEM4MjAwMDAyNDQyMDAwMUFDODIwMDAwOTYwMjAwMDA2OQorOjEwMUM0MDAwMzA0MkZGRkY1MDUyMDAwMUE2MDAwMDAwOTYyMjAwMDAyMworOjEwMUM1MDAwMjQ0MjAwMDFBNjIyMDAwMDNDMDI4MDA4MzQ0MjAxMDAxOAorOjEwMUM2MDAwOTYyMzAwMDA5NDQyMDAzQzE0NDMwMDA0OEZCRjAwMUNFNAorOjEwMUM3MDAwMjQwMjAwMDFBNjIyMDAwMDhGQkYwMDFDOEZCMjAwMThCMgorOjEwMUM4MDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjBDMgorOjEwMUM5MDAwMjdCREZGRTAzQzAyODAwOEFGQkYwMDE4MzQ0MjAxMDBCRQorOjEwMUNBMDAwOEM0ODAwMzQzQzAzODAwMDM0NjkwNDAwQUM2ODAwMzg4MAorOjEwMUNCMDAwOEM0MjAwMzgzMEU3MDBGRkFGODkwMDIwQUM2MjAwM0M2NgorOjEwMUNDMDAwM0MwMjAwMDVBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDA5MworOjEwMUNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMUNFMDAwOEM4MjAwMEM4QzgyMDAwQzk3ODMwMDBFQUQyMjAwMDBDOQorOjEwMUNGMDAwOEM4MjAwMTAwMDYwNDAyMUFEMjIwMDA0OEM4MjAwMTgwQworOjEwMUQwMDAwQUQyMjAwMDg4QzgyMDAxQ0FEMjIwMDBDOENBMjAwMTRCNQorOjEwMUQxMDAwQUQyMjAwMTA4QzgyMDAyMEFEMjIwMDE0OTA4MjAwMDVCQworOjEwMUQyMDAwMzA0MjAwRkYwMDAyMTIwMEFEMjIwMDE4OENBMjAwMTgwMQorOjEwMUQzMDAwQUQyMjAwMUM4Q0EyMDAwQ0FEMjIwMDIwOENBMjAwMTA1MQorOjEwMUQ0MDAwQUQyMjAwMjQ4Q0EyMDAxQ0FEMjIwMDI4OENBMjAwMjAxMQorOjEwMUQ1MDAwQUQyMjAwMkMzNDAyRkZGRkFEMjYwMDMwQUQyMDAwMzQ1MAorOjEwMUQ2MDAwNTA2MjAwMDEzNDA4RkZGRkFEMjgwMDM4NTBFMDAwMTEzOAorOjEwMUQ3MDAwM0MwMjgwMDgzQzA0ODAwODM0ODQwMTAwOTQ4MjAwNTBCNgorOjEwMUQ4MDAwMzA0MkZGRkZBRDIyMDAzQzk0ODMwMDQ0OTQ4NTAwNDQyMAorOjEwMUQ5MDAwMjQwMjAwMDEzMDYzRkZGRjAwMDMxOEMyMDA2NDE4MjExMQorOjEwMURBMDAwOTA2NDAwNTQzMEE1MDAwNzAwQTIxMDA0MEEwMDA3NDgwMAorOjEwMURCMDAwMDA0NDEwMjUzNDQyMDEwMEFEMjAwMDNDOTQ0MzAwNDQwRgorOjEwMURDMDAwOTQ0NDAwNDQzMDYzRkZGRjAwMDMxOEMyMDA2MjE4MjFFRQorOjEwMUREMDAwMzA4NDAwMDc5MDY1MDA1NDI0MDIwMDAxMDA4MjEwMDQ0MgorOjEwMURFMDAwMDAwMjEwMjcwMDQ1MTAyNEEwNjIwMDU0MDAwMDAwMDBFQgorOjEwMURGMDAwMDAwMDAwMDAwMDAwMDAwMDNDMDIwMDA2MzQ0MjAwNDBFOQorOjEwMUUwMDAwM0MwMzgwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwMUUxMDAwMDAwMDAwMDA4QzYyMDAwMDMwNDIwMDEwMTA0MEZGRkQwNgorOjEwMUUyMDAwM0MwNjgwMDgzNEMyMDE1MDM0NjMwNDAwMzRDNzAxNEFDMAorOjEwMUUzMDAwMzRDNDAxMzQzNEM1MDE0MDM0QzYwMTQ0QUZBMjAwMTA5QgorOjEwMUU0MDAwMEUwMDA2QkVBRjgzMDAyMDhGQkYwMDE4MDNFMDAwMDgxRAorOjEwMUU1MDAwMjdCRDAwMjA4RjgzMDAwQzNDMDYwODAwOENDNjAwRThEQworOjEwMUU2MDAwOEY4MjAwMTQzMDYzM0ZGRjAwMDMxOTgwMDA0NjEwMjE2OQorOjEwMUU3MDAwMDA0MzEwMjEyNDAzRkY4MDAwNDMxODI0M0MwNjgwMDAwNworOjEwMUU4MDAwQUNDMzAwMjgzMDQyMDA3RjNDMDM4MDBDMDA0MzMwMjE2QgorOjEwMUU5MDAwOTBDMjAwMEQzMEE1MDBGRjAwMDAzODIxMzQ0MjAwMTAzMAorOjEwMUVBMDAwQTBDMjAwMEQ4Rjg5MDAwQzNDMDI4MDA4MzQ0MjAxMDA2MgorOjEwMUVCMDAwOTQ0MzAwNDQwMDA5MTM4MjMwNDgwMDAzMjQwMjAwMDFDNworOjEwMUVDMDAwQTRDMzAwMEUxMTAyMDAwQjI5MDIwMDAyMTA0MDAwMDVGRAorOjEwMUVEMDAwMjQwMjAwMDIxMTAwMDAwQzI0MDMwMDAxMEEwMDA3OTBGNAorOjEwMUVFMDAwMDAwMDE4MjExMTAyMDAwNjAwMDAwMDAwMEEwMDA3OTBGRgorOjEwMUVGMDAwMDAwMDE4MjE4Q0MyMDAyQzBBMDAwNzkwMjQ0MzAwMDEyNgorOjEwMUYwMDAwOENDMjAwMTQyNDQzMDAwMThDQzIwMDE4MDA0MzEwMkIyMworOjEwMUYxMDAwNTA0MDAwMEEyNDA3MDAwMTI0MDIwMDI3MTRBMjAwMDNGNQorOjEwMUYyMDAwM0MwMzgwMDgwQTAwMDc5RDI0MDcwMDAxMzQ2MzAxMDA3OAorOjEwMUYzMDAwOTQ2MjAwNEMyNDQyMDAwMUE0NjIwMDRDMDAwOTEzODIwOAorOjEwMUY0MDAwMzA0MzAwMDMyQzYyMDAwMjEwNDAwMDA5MDA4MDI4MjE2OQorOjEwMUY1MDAwMTQ2MDAwMDQwMDAwMDAwMDk0QzIwMDM0MEEwMDA3QURDMQorOjEwMUY2MDAwMzA0NkZGRkY4Q0M2MDAzODBBMDAwN0FEMDA4MDI4MjFFQworOjEwMUY3MDAwMDAwMDMwMjEzQzA0MDgwMDI0ODQ1MkMwMEEwMDA2RjIwQworOjEwMUY4MDAwMDAwMDAwMDAyN0JERkY5MEFGQjYwMDY4QUZCNTAwNjQ0OQorOjEwMUY5MDAwQUZCNDAwNjBBRkIzMDA1Q0FGQjIwMDU4QUZCMTAwNTQ1MworOjEwMUZBMDAwQUZCRjAwNkNBRkIwMDA1MDhDOTAwMDAwMDA4MEIwMjEzQgorOjEwMUZCMDAwM0MwMjA4MDA4QzQyMDBFODk2MDQwMDMyOEY4MzAwMTQzMworOjEwMUZDMDAwMjQxNEZGODAzMDg0M0ZGRjAwNjIxODIxMDAwNDIxODAyOAorOjEwMUZEMDAwMDA2NDE4MjEwMDc0MTAyNDNDMTM4MDAwMDBBMDkwMjE5QworOjEwMUZFMDAwOTBBNTAwMDBBRTYyMDAyODkyMDQwMDMyM0MwMjgwMENGMgorOjEwMUZGMDAwMzA2MzAwN0YwMDYyODgyMTMwODQwMEMwMjQwMjAwNDBFQQorOjEwMjAwMDAwMTQ4MjAwMzIwMDAwQTgyMThFMzUwMDM4OEUyMjAwMTg3QworOjEwMjAxMDAwMTQ0MDAwMDIyNDAyMDAwMUFFMjIwMDE4OTIwMjAwM0M4QgorOjEwMjAyMDAwMzA0MjAwMjAxNDQwMDAwRThGODMwMDE0MDAwNTExQzBDMAorOjEwMjAzMDAwMjQ0MjAyNDAwMDYyMTgyMTMwNjQwMDc4M0MwMjAwODA5MworOjEwMjA0MDAwMDA4MjIwMjUwMDc0MTgyNEFFNjMwODAwQUU2NDA4MTBENgorOjEwMjA1MDAwOEUyMjAwMTg4RTAzMDAwODAwNDMxMDIxQUUyMjAwMThDMworOjEwMjA2MDAwOEUyMjAwMkM4RTIzMDAxODI0NDIwMDAxMDA2MjE4MkJCRgorOjEwMjA3MDAwMTA2MDAwNDMwMDAwMDAwMDkyNDIwMDAwMjQ0MjAwMDE3MgorOjEwMjA4MDAwQTI0MjAwMDAzQzAzMDgwMDhDNjMwMEY0MzA0MjAwRkZEMQorOjEwMjA5MDAwNTA0MzAwMDFBMjQwMDAwMDkyNDIwMDAwOEY4NDAwMTRDRgorOjEwMjBBMDAwMDAwMjExQzAyNDQyMDI0MDI0ODMwMDQwMzA2MzAwN0ZCQworOjEwMjBCMDAwMDA4MjIwMjEzQzAyODAwQTAwOTQyMDI0MDA2MjE4MjEyMgorOjEwMjBDMDAwQUU2NDAwMjQwQTAwMDhCRUFFQzMwMDAwOTIwMzAwMzJEMgorOjEwMjBEMDAwMjQwMkZGQzAwMDQzMTAyNDMwNDIwMEZGMTQ0MDAwMDVEQQorOjEwMjBFMDAwMjQwMjAwMDFBRTIyMDAxODk2MjIwMDM0MEEwMDA4MkVCNQorOjEwMjBGMDAwMzA1NUZGRkY4RTIyMDAxNDI0NDIwMDAxQUUyMjAwMTg0QQorOjEwMjEwMDAwOTIwMjAwMzAwMDAyMTYwMDAwMDIxNjAzMDQ0MTAwMUM3NworOjEwMjExMDAwMDAwMDAwMDA5NjAyMDAzMjI3QTQwMDEwMDA4MDI4MjE1MQorOjEwMjEyMDAwQTdBMjAwMTY5NjAyMDAzMjAwMDAzMDIxMjQwNzAwMDEwOQorOjEwMjEzMDAwMzA0MkZGRkZBRjgyMDAwQzBFMDAwNkYyQUZBMDAwMUM4MQorOjEwMjE0MDAwOTYwMjAwMzI4RjgzMDAxNDNDMDQwODAwOEM4NDAwRTg1RgorOjEwMjE1MDAwMzA0MjNGRkYwMDAyMTE4MDAwNjQxODIxMDA2MjE4MjEwNAorOjEwMjE2MDAwMDA3NDEwMjRBRTYyMDAyQzMwNjMwMDdGM0MwMjgwMEVBRAorOjEwMjE3MDAwMDA2MjE4MjE5MDYyMDAwRDMwNDIwMDdGQTA2MjAwMERDNQorOjEwMjE4MDAwOTIyMjAwMEQzMDQyMDAxMDUwNDAwMDc4OTI0MjAwMDAzMAorOjEwMjE5MDAwM0MwMjgwMDgzNDQ0MDEwMDk0ODIwMDRDOEVDMzAwMDA0RAorOjEwMjFBMDAwM0MxMzA4MDA5NjczMDBDNjI0NDJGRkZGQTQ4MjAwNEMzMworOjEwMjFCMDAwOTQ2MjAwMzI5NjIzMDAwRTMwNTRGRkZGMzA3MEZGRkYxMAorOjEwMjFDMDAwM0MwMzA4MDA4QzYzMDBEMDAwNzAxODA3QTdBMzAwMzhGOAorOjEwMjFEMDAwOTQ4MjAwM0UzMDYzRkZGRjMwNDJGRkZGMTQ2MjAwMDcyRAorOjEwMjFFMDAwMDAwMDAwMDA4QzgyMDAzMDNDMDM4MDAwMjQ0MjAwMzA1QworOjEwMjFGMDAwQUM2MjAwM0MwQTAwMDg1NjhDODIwMDJDOTQ4MjAwNDA5RAorOjEwMjIwMDAwMzA0MkZGRkY1NDYyMDAwOTI3QTQwMDQwOEM4MjAwMzg0RQorOjEwMjIxMDAwM0MwMzgwMDAyNDQyMDAzMEFDNjIwMDNDOEM4MjAwMzRERAorOjEwMjIyMDAwQUM2MjAwMzgwQTAwMDg2NTNDMDM4MDAwMjdBNTAwMzgyRQorOjEwMjIzMDAwMjdBNjAwNDgwMjYwMzgyMTBFMDAwNjdCQTdBMDAwNDhCMAorOjEwMjI0MDAwOEZBMzAwNDAzQzAyODAwMDI0NjMwMDMwQUM0MzAwMzg4MAorOjEwMjI1MDAwOEZBMzAwNDRBQzQzMDAzQzNDMDM4MDAwM0MwMjAwMDVEQgorOjEwMjI2MDAwQUM2MjAwMzAzQzAyODAwODM0NDQwMTAwOTQ4MjAwNDI5OQorOjEwMjI3MDAwMzQ2MzA0MDAzMDQyRkZGRjAyMDIxMDJCMTQ0MDAwMDdCOQorOjEwMjI4MDAwQUY4MzAwMjA5NDgyMDA0RTk0ODMwMDQyMDIwMjEwMjEwQQorOjEwMjI5MDAwMDA0MzEwMjMwQTAwMDg3QjMwNDNGRkZGOTQ4MzAwNEU2NQorOjEwMjJBMDAwOTQ4MjAwNDIwMjYzMTgyMTAwNTAxMDIzMDA2MjE4MjMxOAorOjEwMjJCMDAwMzA2M0ZGRkYzQzAyODAwODM0NDQwMTAwOTQ4MjAwM0NGQworOjEwMjJDMDAwMzA0MkZGRkYxNDQzMDAwMzAwMDAwMDAwMEEwMDA4OEJBNworOjEwMjJEMDAwMjQwMzAwMDE5NDgyMDAzQzMwNDJGRkZGMDA2MjEwMkI3NworOjEwMjJFMDAwMTQ0MDAwMDU4RjgyMDAyMDk0ODIwMDNDMDA2MjEwMjM3RAorOjEwMjJGMDAwMzA0M0ZGRkY4RjgyMDAyMEFDNTUwMDAwQUM0MDAwMDQ0QgorOjEwMjMwMDAwQUM1NDAwMDhBQzQzMDAwQzNDMDIwMDA2MzQ0MjAwMTAwMAorOjEwMjMxMDAwM0MwMzgwMDBBQzYyMDAzMDAwMDAwMDAwMDAwMDAwMDBDMAorOjEwMjMyMDAwMDAwMDAwMDA4QzYyMDAwMDMwNDIwMDEwMTA0MEZGRkRGMQorOjEwMjMzMDAwM0MwNDgwMDgzNDg0MDEwMDAwMTAxOEMyMDA2NDE4MjE5NQorOjEwMjM0MDAwOTA2NTAwNTQzMjAyMDAwNzI0MDYwMDAxMDA0NjEwMDQ4NAorOjEwMjM1MDAwMDA0NTEwMjVBMDYyMDA1NDk0ODMwMDQyOTYyMjAwMEU4RQorOjEwMjM2MDAwNTA0MzAwMDFBMzg2MDAxMDkyNDIwMDAwMjQ0MjAwMDE2NQorOjEwMjM3MDAwQTI0MjAwMDAzQzAzMDgwMDhDNjMwMEY0MzA0MjAwRkZERQorOjEwMjM4MDAwNTA0MzAwMDFBMjQwMDAwMDkyNDIwMDAwOEY4NDAwMTREQworOjEwMjM5MDAwMDAwMjExQzAyNDQyMDI0MDI0ODMwMDQwMDA4MjIwMjExOAorOjEwMjNBMDAwMjQwMkZGODAwMDgyMjAyNDMwNjMwMDdGM0MwMjgwMEFFOAorOjEwMjNCMDAwMDA2MjE4MjEzQzAyODAwMEFDNDQwMDI0QUVDMzAwMDAzRgorOjEwMjNDMDAwOEZCRjAwNkM4RkI2MDA2ODhGQjUwMDY0OEZCNDAwNjA1QgorOjEwMjNEMDAwOEZCMzAwNUM4RkIyMDA1ODhGQjEwMDU0OEZCMDAwNTBBMworOjEwMjNFMDAwMDNFMDAwMDgyN0JEMDA3MDI3QkRGRkQ4QUZCMzAwMUM3NQorOjEwMjNGMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjBGMworOjEwMjQwMDAwMDA4MDk4MjEwMEUwODAyMTMwQjFGRkZGMEUwMDBENDVEMworOjEwMjQxMDAwMzBEMjAwRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCQgorOjEwMjQyMDAwOEY4MjAwMTg4RjgzMDAxQ0FDNTEwMDAwQUM1MjAwMDQ1NgorOjEwMjQzMDAwQUM1MzAwMDhBQzQwMDAwQ0FDNDAwMDEwQUM0MDAwMTRBMQorOjEwMjQ0MDAwQUM0MDAwMTg5NDYzMDAxRTAyMDM4MDI1QUM1MDAwMUNCMQorOjEwMjQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwNDAwMDE1MworOjEwMjQ2MDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTRGMworOjEwMjQ3MDAwOEZCMDAwMTAwQTAwMEQ3OTI3QkQwMDI4MzBBNUZGRkY5RQorOjEwMjQ4MDAwMEEwMDA4QzgzMEM2MDBGRjNDMDI4MDA4MzQ0MzAxMDAzRgorOjEwMjQ5MDAwOTQ2MjAwMEUzQzA4MDgwMDk1MDgwMEM2MzA0NkZGRkYxNQorOjEwMjRBMDAwMTRDMDAwMDQzNDAyRkZGRjk0NjUwMERBMEEwMDA5MTUyNQorOjEwMjRCMDAwOEY4NDAwMTQxMEMyMDAyNzAwMDAwMDAwOTQ2MjAwNEVCOAorOjEwMjRDMDAwOTQ2NDAwM0MzMDQ1RkZGRjAwQTYxMDIzMDBBNjE4MkJBMworOjEwMjREMDAwMzA4N0ZGRkYxMDYwMDAwNDMwNDRGRkZGMDBDNTEwMjM2OQorOjEwMjRFMDAwMDBFMjEwMjMzMDQ0RkZGRjAwODgxMDJCMTA0MDAwMEU0NAorOjEwMjRGMDAwMDBFODEwMjMzQzAyODAwODM0NDQwMTAwMjQwMzAwMDE1QQorOjEwMjUwMDAwMzQ0MjAwODBBNDQzMDAxNjI0MDJGRkZGQTQ4MjAwMEU4MAorOjEwMjUxMDAwOTQ4NTAwREE4Rjg0MDAxNDAwMDAzMDIxMzBBNUZGRkY3RAorOjEwMjUyMDAwMEEwMDA4RUQzQzA3NjAyMDAwNDQxMDJBMTA0MDAwMDkxMgorOjEwMjUzMDAwM0MwMjgwMDgzNDQzMDA4MDk0NjIwMDE2MzA0MjAwMDE1RgorOjEwMjU0MDAwMTA0MDAwMDQzQzAyODAwMDk0NDIwMDdFMjQ0MjAwMTRBQgorOjEwMjU1MDAwQTQ2MjAwMTYwM0UwMDAwODAwMDAwMDAwMjdCREZGRTBCMQorOjEwMjU2MDAwM0MwMjgwMDhBRkJGMDAxQ0FGQjAwMDE4MzQ0MjAxMDAyRAorOjEwMjU3MDAwOTQ0MzAwNDI5NDQyMDA0QzEwNDAwMDE5MzA2OEZGRkYyMQorOjEwMjU4MDAwOTM4MzAwMTAyNDAyMDAwMTE0NjIwMDI5OEZCRjAwMUNGNQorOjEwMjU5MDAwM0MwNjgwMDgzNEQwMDEwMDAwMDgxMEMyMDA1MDEwMjExMQorOjEwMjVBMDAwOTA0MjAwNTQzMTAzMDAwNzM0QzcwMTQ4MzA0MjAwRkYxNQorOjEwMjVCMDAwMDA2MjEwMDczMDQyMDAwMTM0QzkwMTRFMzRDNDAxMkNCRQorOjEwMjVDMDAwMzRDNTAxM0UxMDQwMDAxNjM0QzYwMTQyMEUwMDA2QkU1RQorOjEwMjVEMDAwQUZBOTAwMTA5NjAyMDA0MjBBMDAwOTMyMzA0OEZGRkZGRQorOjEwMjVFMDAwM0MwMjgwMDgzNDQ0MDEwMDk0ODMwMDQ0OTQ4MjAwNDJGOQorOjEwMjVGMDAwMTA0MzAwMEY4RkJGMDAxQzk0ODIwMDQ0QTQ4MjAwNDI0RAorOjEwMjYwMDAwOTQ4MjAwNTBBNDgyMDA0RThDODIwMDM4QUM4MjAwMzA0QworOjEwMjYxMDAwOTQ4MjAwNDBBNDgyMDAzRTk0ODIwMDRBQTQ4MjAwNDgzMgorOjEwMjYyMDAwOEZCRjAwMUM4RkIwMDAxODBBMDAwOEYwMjdCRDAwMjBFMworOjEwMjYzMDAwOEZCMDAwMTgwM0UwMDAwODI3QkQwMDIwMjdCREZGQTBEMQorOjEwMjY0MDAwQUZCMTAwNEMzQzExODAwMEFGQkYwMDU4QUZCMzAwNTQ5NQorOjEwMjY1MDAwQUZCMjAwNTBBRkIwMDA0ODM2MjYwMTg4OTBDMjAwMDNFOAorOjEwMjY2MDAwMzA0NDAwN0ZBM0E0MDAxMDhFMzIwMTgwOTBDMjAwMDA4RAorOjEwMjY3MDAwMzA0MzAwN0YyNDAyMDAwMzEwNjIwMDNCQUY5MjAwMTQzRAorOjEwMjY4MDAwMjg2MjAwMDQxMDQwMDAwNjI0MDIwMDA0MjQwMjAwMDIxNAorOjEwMjY5MDAwMTA2MjAwMDk4RkJGMDA1ODBBMDAwQUZCOEZCMzAwNTQ3NAorOjEwMjZBMDAwMTA2MjAwNEQyNDAyMDAwNTEwNjIwMTRFOEZCRjAwNThEOQorOjEwMjZCMDAwMEEwMDBBRkI4RkIzMDA1NDAwMDQxMUMwMDI0MjEwMjEyQgorOjEwMjZDMDAwMjQwNEZGODAyNDQyMDI0MDAwNDQxMDI0MjY0MzAwNDA5QQorOjEwMjZEMDAwQUUyMjAwMjQzMDYzMDA3RjNDMDI4MDBBMDA2MjE4MjE5MQorOjEwMjZFMDAwOTA2MjAwM0NBRkEzMDAzQzAwNDQxMDI1QTA2MjAwM0M3NworOjEwMjZGMDAwOEZBMzAwM0M5MDYyMDAzQzMwNDIwMDQwMTA0MDAxNkNDRgorOjEwMjcwMDAwOEZCRjAwNTgzQzEwODAwOEEzODAwMDEwMzYxMDAxMDBENQorOjEwMjcxMDAwOEUwMjAwRDA4QzYzMDAzNDI3QTQwMDNDMjdBNTAwMTA1MworOjEwMjcyMDAwMDA0MzEwMjEwRTAwMDdBRkFFMDIwMEQwOTNBMjAwMTBBQworOjEwMjczMDAwM0MwMzgwMDBBMjAyMDBDNThDNjIwMjc4MDQ0MEZGRkVDOAorOjEwMjc0MDAwOEY4MjAwMTRBQzYyMDI0MDI0MDIwMDAyQTA2MjAyNDRBNAorOjEwMjc1MDAwM0MwMjEwMDBBQzYyMDI3ODBFMDAwOTI1MDAwMDAwMDA2NworOjEwMjc2MDAwMEEwMDBBRkE4RkJGMDA1ODNDMDU4MDA4OTBDMzAwMDE5OAorOjEwMjc3MDAwOTBBMjAwMEIxNDQzMDE0RThGQkYwMDU4MzRBNDAwODA3OAorOjEwMjc4MDAwOEM4MjAwMTg5MDgyMDA0QzkwQTIwMDA4M0MwMjYwMDBFRAorOjEwMjc5MDAwOEM0MjU0MDQ4QzgzMDAxODNDMDI3RkZGMzQ0MkZGRkZCQworOjEwMjdBMDAwMDA2MjE4MjQzQzAyMDgwMDhDNDIwMEI0QUM4MzAwMTg3QworOjEwMjdCMDAwM0MwMzgwMDAyNDQyMDAwMTNDMDEwODAwQUMyMjAwQjQyQworOjEwMjdDMDAwOEM2MjAxRjgwNDQwRkZGRThGODIwMDE0QUM2MjAxQzBFRAorOjEwMjdEMDAwMEEwMDBBQzIyNDAyMDAwMjNDMTA4MDA4OTBDMzAwMDFEMworOjEwMjdFMDAwOTIwMjAwMEIxNDQzMDEzMjhGQkYwMDU4MjdBNDAwMTgzNworOjEwMjdGMDAwMzYwNTAxMTAyNDA2MDAwMzNDMDI2MDAwOEM0MjU0MDQ5QworOjEwMjgwMDAwMEUwMDBFMDgwMDAwMDAwMDI3QTQwMDI4MzYwNTAxRTA5NQorOjEwMjgxMDAwMEUwMDBFMDgyNDA2MDAwMzhGQTIwMDI4MzYwMzAxMDBENAorOjEwMjgyMDAwQUUwMjAwNjQ4RkEyMDAyQ0FFMDIwMDY4OEZBMjAwMzBCRQorOjEwMjgzMDAwQUUwMjAwNkM5M0E0MDAxODkwNjMwMEM1MjQwMkZGODBEMAorOjEwMjg0MDAwMDA4MjEwMjQwMDQzMTAyNTMwNDkwMEZGMzA4NDAwN0ZBRgorOjEwMjg1MDAwMzEyMjAwN0YwMDgyMTAyQTU0NDAwMDAxMzkyOTAwODA3MworOjEwMjg2MDAwMDAwNDExQzAyNDQyMDI0MDI0MDNGRjgwMDI0MjEwMjFEMAorOjEwMjg3MDAwMDA0MzEwMjRBRTIyMDA5NDI2NDIwMDQwMzA0MjAwN0ZFNAorOjEwMjg4MDAwM0MwMzgwMDYwMDQzNDAyMThGQTMwMDFDMjQwMkZGRkY2RAorOjEwMjg5MDAwQUZBODAwNDAzQzEzMDgwMDkyNzMwMEY3MTA2MjAwMzNBOQorOjEwMjhBMDAwOTNBMjAwMTk5NTAzMDAxNDMwNDQwMEZGMzA2M0ZGRkYyQQorOjEwMjhCMDAwMDA2NDE4MkIxMDYwMDAxMDAwMDAwMDAwOTUwNDAwMTQ0NAorOjEwMjhDMDAwOEQwNzAwMUM4RDA2MDAxODMwODRGRkZGMDA0NDIwMjM3NAorOjEwMjhEMDAwMDAwNDIxMDAwMEU0MzgyMTAwMDAxMDIxMDBFNDIwMkIzNgorOjEwMjhFMDAwMDBDMjMwMjEwMEM0MzAyMUFEMDcwMDFDQUQwNjAwMTgyNQorOjEwMjhGMDAwMEEwMDBBMUI5M0EyMDAxOTk1MDQwMDE0OEQwNzAwMUNGRQorOjEwMjkwMDAwOEQwNjAwMTgzMDg0RkZGRjAwODIyMDIzMDAwNDIxMDA4MAorOjEwMjkxMDAwMDAwMDEwMjEwMDgwMTgyMTAwQzIzMDIzMDBFNDIwMkI4OQorOjEwMjkyMDAwMDBDNDMwMjMwMEUzMzgyM0FEMDcwMDFDQUQwNjAwMThCNworOjEwMjkzMDAwOTNBMjAwMTk4RkEzMDA0MEE0NjIwMDE0OTdBMjAwMUE2QQorOjEwMjk0MDAwQTQ2MjAwMTY4RkEyMDAxQ0FDNjIwMDEwOEZBMjAwMUNCMworOjEwMjk1MDAwQUM2MjAwMEM5M0EyMDAxOUE0NjIwMDIwOTdBMjAwMUE5NgorOjEwMjk2MDAwQTQ2MjAwMjI4RkEyMDAxQ0FDNjIwMDI0M0MwNDgwMDhGOAorOjEwMjk3MDAwMzQ4MzAwODA4QzYyMDAzODhGQTIwMDIwMDEyMDg4MjFERgorOjEwMjk4MDAwQUM2MjAwM0M4RkEyMDAyMEFDODIwMDAwOTNBMjAwMTgzMQorOjEwMjk5MDAwQTA2MjAwNEM5M0EyMDAxOEEwODIwMDA5QTA2MDAwNjgwOQorOjEwMjlBMDAwOTNBMjAwMTgxMDUxMDA1MTI0MDdGRjgwMzIyOTAwN0ZBNAorOjEwMjlCMDAwMDAwOTExQzAyNDQyMDI0MDAyNDIxMDIxMzA0NjAwN0YyQgorOjEwMjlDMDAwM0MwMzgwMDAwMDQ3MTAyNEFDNjIwMDk0M0MwMjgwMDY2NworOjEwMjlEMDAwMDBDMjMwMjE5MEMyMDAzQ0FGQTYwMDQwMDAwMDIwMjE4MAorOjEwMjlFMDAwMDA0NzEwMjVBMEMyMDAzQzhGQTgwMDQwOTUwMjAwMDJCRAorOjEwMjlGMDAwOTUwMzAwMTQ4RDA3MDAxQzMwNDJGRkZGMzA2M0ZGRkY3QQorOjEwMkEwMDAwOEQwNjAwMTgwMDQzMTAyMzAwMDIxMTAwMDBFMjM4MjE1NworOjEwMkExMDAwMDBFMjEwMkIwMEM0MzAyMTAwQzIzMDIxQUQwNzAwMUNBMQorOjEwMkEyMDAwQUQwNjAwMTg5NTAyMDAwMkE1MDIwMDE0QTUwMDAwMTZDQworOjEwMkEzMDAwOEQwMjAwMDhBRDAyMDAxMDhEMDIwMDA4QUQwMjAwMENFRQorOjEwMkE0MDAwOTUwMjAwMDJBNTAyMDAyMEE1MDAwMDIyOEQwMjAwMDhDOAorOjEwMkE1MDAwQUQwMjAwMjQ5MTAyMDAzQzMwNDIwMDQwMTA0MDAwMUFCOAorOjEwMkE2MDAwMjYyMjAwMDEzQzEwODAwOEEzQTkwMDM4QTM4MDAwMTA5MgorOjEwMkE3MDAwMzYxMDAxMDA4RTAyMDBEMDhEMDMwMDM0MjdBNDAwNDBFMAorOjEwMkE4MDAwMjdBNTAwMzgwMDQzMTAyMTBFMDAwN0FGQUUwMjAwRDA4QQorOjEwMkE5MDAwOTNBMjAwMzgzQzAzODAwMEEyMDIwMEM1OEM2MjAyNzgzOQorOjEwMkFBMDAwMDQ0MEZGRkU4RjgyMDAxNEFDNjIwMjQwMjQwMjAwMDI0OAorOjEwMkFCMDAwQTA2MjAyNDQzQzAyMTAwMEFDNjIwMjc4MEUwMDA5MjVCQworOjEwMkFDMDAwMDAwMDAwMDAyNjIyMDAwMTMwNDMwMDdGMTQ3MzAwMDQ0MAorOjEwMkFEMDAwMDA0MDIwMjEyNDAzRkY4MDAyMjMxMDI0MDA0MzIwMjZFRAorOjEwMkFFMDAwOTNBMjAwMTgwQTAwMEEzNzMwOTEwMEZGOTNBNDAwMTgzRgorOjEwMkFGMDAwOEZBMzAwMUMyNDAyRkZGRjEwNjIwMDBBMzA4OTAwRkYzMAorOjEwMkIwMDAwMjQ4MjAwMDEyNDgzMDAwMTMwNDIwMDdGMTQ1MzAwMDUxOQorOjEwMkIxMDAwMzA2OTAwRkYyNDAzRkY4MDAwODMxMDI0MDA0MzEwMjY0NworOjEwMkIyMDAwMzA0OTAwRkYzQzAyODAwODkwNDIwMDA4MDEyMDg4MjFDMworOjEwMkIzMDAwMzA1MDAwRkYxMjMwMDAxOTMyMjIwMDdGMDAwMjExQzAxNQorOjEwMkI0MDAwMDI0MjEwMjEyNDQyMDI0MDI0MDNGRjgwMDA0MzE4MjQ0MworOjEwMkI1MDAwM0MwNDgwMDBBQzgzMDA5NDMwNDIwMDdGM0MwMzgwMDYzQworOjEwMkI2MDAwMDA0MzEwMjE4QzQzMDAwQzAwNDAyMDIxMTA2MDAwMEIxQQorOjEwMkI3MDAwQUZBMjAwNDAwRTAwMDU2QTAwMDAwMDAwMjYyMzAwMDFGRAorOjEwMkI4MDAwMjQwNUZGODAzMDYyMDA3RjE0NTMwMDAyMDIyNTIwMjRCOAorOjEwMkI5MDAwMDA4NTE4MjYwQTAwMEE5QjMwNzEwMEZGM0MwNDgwMDg1QgorOjEwMkJBMDAwMzQ4NDAwODA4QzgzMDAxODNDMDI3RkZGMzQ0MkZGRkY5NgorOjEwMkJCMDAwMDA2MjE4MjRBQzgzMDAxODNDMDM4MDAwOEM2MjAxRjg4QQorOjEwMkJDMDAwMDQ0MEZGRkUwMDAwMDAwMEFDNzIwMUMwMjQwMjAwMDJCRAorOjEwMkJEMDAwQTA2MjAxQzQzQzAyMTAwMEFDNjIwMUY4MEEwMDBBRkFDQgorOjEwMkJFMDAwOEZCRjAwNTgzQzA0ODAwODkwQzMwMDAxOTA4MjAwMEIwNgorOjEwMkJGMDAwMTQ0MzAwMkY4RkJGMDA1ODM0OTAwMDgwOTIwMjAwMDhDOQorOjEwMkMwMDAwMzA0MjAwNDAxMDQwMDAyMDAwMDAwMDAwOTIwMjAwMDgwNgorOjEwMkMxMDAwMDAwMjE2MDAwMDAyMTYwMzA0NDEwMDA1MDI0MDIwMjFCNAorOjEwMkMyMDAwMEUwMDBFOEQyNDA1MDA5MzBBMDAwQUZBOEZCRjAwNTg4QgorOjEwMkMzMDAwOTIwMjAwMDkyNDAzMDAxODMwNDIwMEZGMTQ0MzAwMERFMworOjEwMkM0MDAwMDI0MDIwMjEyNDA1MDAzOTBFMDAwRTI1MDAwMDMwMjEwRAorOjEwMkM1MDAwMEUwMDAzNDU4Rjg0MDAxNDhGODJGRkE4MjQwMzAwMTIwNgorOjEwMkM2MDAwQTA0MzAwMDkwRTAwMDM1MDhGODQwMDE0MEEwMDBBRkFFMgorOjEwMkM3MDAwOEZCRjAwNTgyNDA1MDAzNjBFMDAwRTI1MDAwMDMwMjFCRAorOjEwMkM4MDAwMEEwMDBBRkE4RkJGMDA1ODBFMDAwMzQ1MDI0MDIwMjFCNworOjEwMkM5MDAwOTIwMjAwMDU4Rjg0MDAxNDM0NDIwMDIwMEUwMDAzNTA3RAorOjEwMkNBMDAwQTIwMjAwMDUwRTAwMTAzNjhGODQwMDE0OEZCRjAwNTg1QQorOjEwMkNCMDAwOEZCMzAwNTQ4RkIyMDA1MDhGQjEwMDRDOEZCMDAwNDhEQQorOjEwMkNDMDAwMDNFMDAwMDgyN0JEMDA2MDNDMDI4MDA4MzQ0NTAxMDA5NQorOjEwMkNEMDAwM0MwMjgwMDA4QzQyMDE0MDk0QTMwMDBFMDAwMDMwMjE5MQorOjEwMkNFMDAwMDA0MDIwMjFBRjgyMDAxNDMwNjNGRkZGMzQwMkZGRkY1OQorOjEwMkNGMDAwMTA2MjAwMDYzQzA3NjAyMDI0MDJGRkZGQTRBMjAwMEUyMQorOjEwMkQwMDAwOTRBNTAwREEwQTAwMDhFRDMwQTVGRkZGMDNFMDAwMDhGMworOjEwMkQxMDAwMDAwMDAwMDAyN0JERkZDODNDMDI4MDAwM0MwNjgwMDg4MAorOjEwMkQyMDAwQUZCNTAwMkNBRkIxMDAxQ0FGQkYwMDMwQUZCNDAwMjg2RQorOjEwMkQzMDAwQUZCMzAwMjRBRkIyMDAyMEFGQjAwMDE4MzQ1MTAxMDA4RgorOjEwMkQ0MDAwMzRDNTAxMDA4QzQzMDEwMDhFMjIwMDE0OENBNDAwRDRGMQorOjEwMkQ1MDAwMDAwMEE4MjFBRjgzMDAxNDAwNDQxMDIzMTg0MDAwNTI0MworOjEwMkQ2MDAwQTM4MDAwMTA4RTIyMDAxNDAwMDA1MDIxQUNBMjAwRDREOQorOjEwMkQ3MDAwOTBDMzAwMDg5MEEyMDBDNTMwNzMwMDdGQTNBMjAwMTA4QQorOjEwMkQ4MDAwOENCMjAwRDA4Q0I0MDBENDMwNDIwMEZGMTA1MzAwM0IxMgorOjEwMkQ5MDAwOTNBMjAwMTA4RjgzMDAxNDI0MDdGRjgwMDAwMjExQzA0QgorOjEwMkRBMDAwMDA2MjEwMjEyNDQyMDI0MDI0NjMwMDQwMDA0NzEwMjRBNgorOjEwMkRCMDAwMzA2MzAwN0YzQzA5ODAwMDNDMDg4MDBBMDA2ODE4MjFDRAorOjEwMkRDMDAwQUQyMjAwMjQ4QzYyMDAzNDI3QTQwMDE0MjdBNTAwMTAzMworOjEwMkREMDAwMDI0MjgwMjEwMjkwMTAyMzA0NDAwMDI4QUZBMzAwMTQ3NworOjEwMkRFMDAwOTA2MjAwM0MwMEUyMTAyNDMwNDIwMEZGMTQ0MDAwMTlDMQorOjEwMkRGMDAwMDIwMDkwMjE5MDYyMDAzQzM0NDIwMDQwQTA2MjAwM0NGRQorOjEwMkUwMDAwOEY4NjAwMTQ5M0EzMDAxMDI0QzIwMDQwMzA0MjAwN0YzQworOjEwMkUxMDAwMDA0ODI4MjEzQzAyMDgwMDhDNDIwMEY0MjQ2MzAwMDE5MQorOjEwMkUyMDAwMzA2NDAwRkYxNDgyMDAwMkEzQTMwMDEwQTNBMDAwMTBDRQorOjEwMkUzMDAwOTNBMjAwMTBBRkE1MDAxNDAwMDIxMUMwMjQ0MjAyNDA2QQorOjEwMkU0MDAwMDBDMjEwMjEwMDQ3MTAyNEFEMjIwMDI0MEEwMDBCMzFEQgorOjEwMkU1MDAwOTNBMjAwMTAwRTAwMDdBRjAwMDAwMDAwM0MwMjgwMDhBMworOjEwMkU2MDAwMzQ0MjAxMDBBQzUwMDBEMDkzQTMwMDEwMjQwQTAwMDFBQQorOjEwMkU3MDAwQTA0MzAwQzUwQTAwMEIzMTkzQTIwMDEwMjQwMjAwMDFGOAorOjEwMkU4MDAwMTU0MjAwMDkzQzAzODAwMDhDNjIwMjc4MDQ0MEZGRkU3QQorOjEwMkU5MDAwOEY4MjAwMTRBQzYyMDI0MDI0MDIwMDAyQTA2MjAyNDQ0RAorOjEwMkVBMDAwM0MwMjEwMDBBQzYyMDI3ODkyMjIwMDBCMjQwMzAwMDI2NAorOjEwMkVCMDAwMzA0MjAwRkYxNDQzMDA3MjAwMDAwMDAwOTYyMjAwMDgxOAorOjEwMkVDMDAwMzA0MzAwRkYyNDAyMDA4MjE0NjIwMDQwMjQwMjAwODQ4OAorOjEwMkVEMDAwM0MwMjgwMDAzNDQ5MDEwMDhEMjIwMDBDOTUyMzAwMDYzRAorOjEwMkVFMDAwMDAwMjE2MDIzMDYzRkZGRjMwNDUwMDNGMjQwMjAwMjczNgorOjEwMkVGMDAwMTBBMjAwMEZBRjgzMDAwQzI4QTIwMDI4MTA0MDAwMDg4OQorOjEwMkYwMDAwMjQwMjAwMzEyNDAyMDAyMTEwQTIwMDA5MjQwMjAwMjUxRAorOjEwMkYxMDAwMTBBMjAwMDc5MzgyMDAxMTBBMDAwQkE5MDAwMDAwMDAxNAorOjEwMkYyMDAwMTBBMjAwMDc5MzgyMDAxMTBBMDAwQkE5MDAwMDAwMDAwNAorOjEwMkYzMDAwMEUwMDA3NjMwMTIwMjAyMTBBMDAwQzI5MDAwMDAwMDA3OAorOjEwMkY0MDAwM0MwMzgwMDA4QzYyMDI3ODA0NDBGRkZFOEY4MjAwMTRGNAorOjEwMkY1MDAwQUM2MjAyNDAyNDAyMDAwMkEwNjIwMjQ0M0MwMjEwMDA2MworOjEwMkY2MDAwQUM2MjAyNzgwQTAwMEMyOTAwMDAwMDAwOTUyMzAwMDZEQworOjEwMkY3MDAwOTEyNDAwMDU4RDI1MDAwQzhEMjYwMDEwOEQyNzAwMTg0QQorOjEwMkY4MDAwOEQyODAwMUM4RDI5MDAyMDI0NDIwMDAxM0MwMTA4MDBFRQorOjEwMkY5MDAwQTQyMzUyQzYzQzAxMDgwMEEwMjQ1MkM1M0MwMTA4MDBFRAorOjEwMkZBMDAwQUMyNTUyQ0MzQzAxMDgwMEFDMjY1MkQwM0MwMTA4MDBCNAorOjEwMkZCMDAwQUMyNzUyRDgzQzAxMDgwMEFDMjg1MkRDM0MwMTA4MDA4OAorOjEwMkZDMDAwQUMyOTUyRTAwQTAwMEMyOUEzODIwMDExMTQ2MjAwMEEwNQorOjEwMkZEMDAwMjQwMjAwODEzQzAyODAwODM0NDIwMTAwOTQ0NTAwREE1QQorOjEwMkZFMDAwOTIyNjAwMDU4Rjg0MDAxNDMwQTVGRkZGMzBDNjAwRkYzNQorOjEwMkZGMDAwMEEwMDBCRUEzQzA3NjAyMTE0NjIwMDVDMDAwMDAwMDAzQworOjEwMzAwMDAwOTIyMjAwMEEzMDQzMDBGRjMwNjIwMDIwMTA0MDAwMDc4NworOjEwMzAxMDAwMzA2MjAwNDAzQzAyODAwODM0NDIwMTAwOTQ0NTAwREFFRQorOjEwMzAyMDAwOEY4NDAwMTQwQTAwMEJFODI0MDYwMDQwMTA0MDAwMDdCQgorOjEwMzAzMDAwMDAwMzE2MDAzQzAyODAwODM0NDIwMTAwOTQ0NTAwREE4NworOjEwMzA0MDAwOEY4NDAwMTQwQTAwMEJFODI0MDYwMDQxMDAwMjE2MDNENgorOjEwMzA1MDAwMDQ0MTAwNDYzQzAyODAwODM0NDIwMTAwOTQ0NTAwREFGNQorOjEwMzA2MDAwOEY4NDAwMTQyNDA2MDA0MjMwQTVGRkZGM0MwNzYwMTkzRQorOjEwMzA3MDAwMEUwMDA4RUQwMDAwMDAwMDBBMDAwQzI5MDAwMDAwMDAwRQorOjEwMzA4MDAwOTIyMjAwMEIyNDA0MDAxNjMwNDIwMEZGMTA0NDAwMDY3OAorOjEwMzA5MDAwM0MwNjgwMDA5MjIyMDAwQjI0MDMwMDE3MzA0MjAwRkYwMAorOjEwMzBBMDAwMTQ0MzAwMzIwMDAwMDAwMDM0QzUwMTAwOTBBMjAwMEI2MAorOjEwMzBCMDAwMzA0MjAwRkYxNDQ0MDAwQjAwMDA4MDIxOENBMjAwMjA0RAorOjEwMzBDMDAwOENBNDAwMjAyNDAzRkY4MDAwNDMxMDI0MDAwMjExNDA0MAorOjEwMzBEMDAwMzA4NDAwN0YwMDQ0MTAyNTNDMDMyMDAwMDA0MzEwMjU2RAorOjEwMzBFMDAwQUNDMjA4MzA5NEEyMDAwODAwMDIxNDAwMDAwMjE0MDNDRAorOjEwMzBGMDAwMDQ0MjAwMDEyNDEwMDAwMTk0QTIwMDA4MzA0MjAwODAyNAorOjEwMzEwMDAwNTA0MDAwMUEwMjAwQTgyMTk0QTIwMDA4MzA0MjIwMDA3QQorOjEwMzExMDAwNTA0MDAwMTYwMjAwQTgyMThDQTMwMDE4M0MwMjFDMkQ3MAorOjEwMzEyMDAwMzQ0MjE5RUQxMDYyMDAxMTAyMDBBODIxM0MwMjA4MDA4RgorOjEwMzEzMDAwOEM0MjAwRDQxMDQwMDAwNTNDMDI4MDA4MjQwMzAwMDRBNworOjEwMzE0MDAwMzQ0MjAxMDBBMDQzMDBFQzNDMDI4MDA4MzQ0MjAxMDBGQworOjEwMzE1MDAwOTQ0NTAwREE4Rjg0MDAxNDI0MDYwMDA2MzBBNUZGRkY5MgorOjEwMzE2MDAwMEUwMDA4RUQzQzA3NjAyMTAyMDBBODIxMEUwMDA5MjU5MQorOjEwMzE3MDAwMDAwMDAwMDA5MjIyMDAwQTMwNDIwMDA4MTA0MDAwMDRDMworOjEwMzE4MDAwMDJBMDEwMjEwRTAwMTMzQTAwMDAwMDAwMDJBMDEwMjEzRQorOjEwMzE5MDAwOEZCRjAwMzA4RkI1MDAyQzhGQjQwMDI4OEZCMzAwMjQ3MAorOjEwMzFBMDAwOEZCMjAwMjA4RkIxMDAxQzhGQjAwMDE4MDNFMDAwMDgyMAorOjEwMzFCMDAwMjdCRDAwMzgyNDAyRkY4MDAwODIyMDI0M0MwMjkwMDBCQQorOjEwMzFDMDAwMzQ0MjAwMDcwMDgyMjAyNTNDMDI4MDAwQUM0NDAwMjBFRAorOjEwMzFEMDAwM0MwMzgwMDA4QzYyMDAyMDA0NDBGRkZFMDAwMDAwMDBFMQorOjEwMzFFMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDM4MDAwMjQwMkZGODA5MAorOjEwMzFGMDAwMDA4MjIwMjQzNDYyMDAwNzAwODIyMDI1QUM2NDAwMjA3NQorOjEwMzIwMDAwOEM2MjAwMjAwNDQwRkZGRTAwMDAwMDAwMDNFMDAwMDg4NAorOjEwMzIxMDAwMDAwMDAwMDAzQzAyODAwODI0MDMwMDA1MzQ0MjAxMDA0NQorOjEwMzIyMDAwQTA0MzAwRUMzQzAyODAwMDhDNDIwMTAwM0MwMzgwMDA4MworOjEwMzIzMDAwQUY4MjAwMTQ4QzYyMDI3ODA0NDBGRkZFOEY4MjAwMTQ3QgorOjEwMzI0MDAwQUM2MjAyNDAyNDAyMDAwMkEwNjIwMjQ0M0MwMjEwMDA3MAorOjEwMzI1MDAwQUM2MjAyNzgwM0UwMDAwODAwMDAwMDAwMjdCREZGRTgzMAorOjEwMzI2MDAwM0MwNjgwMDBBRkJGMDAxMDM0QzcwMTAwOTRFMjAwMDhBNAorOjEwMzI3MDAwMzA0NDAwRkYzODgzMDA4MjM4ODIwMDg0MkM2MzAwMDFEMAorOjEwMzI4MDAwMkM0MjAwMDEwMDYyMTgyNTEwNjAwMDJEMjQwMjAwODNFQQorOjEwMzI5MDAwOTM4MjAwMTE1MDQwMDAzNjhGQkYwMDEwM0MwMjA4MDA5RQorOjEwMzJBMDAwOTA0MjUyQ0M4Q0M0MDEwMDNDMDYwODAwOTRDNjUyQzYyMQorOjEwMzJCMDAwMzA0NTAwM0YzOEEzMDAzMjM4QTIwMDNGMkM2MzAwMDFBNAorOjEwMzJDMDAwMkM0MjAwMDEwMDYyMTgyNUFGODQwMDE0QUY4NjAwMEM2OAorOjEwMzJEMDAwQTM4MDAwMTExNDYwMDAwNzAwRTAyMDIxMjQwMjAwMjBEOAorOjEwMzJFMDAwMTRBMjAwMTIwMDAwMDAwMDM0MDJGRkZGMTRDMjAwMEZGRAorOjEwMzJGMDAwMDAwMDAwMDAyNDAyMDAyMDE0QTIwMDA1MDBFMDI4MjFBNAorOjEwMzMwMDAwOENFMzAwMTQyNDAyRkZGRjUwNjIwMDBCOEZCRjAwMTBGQgorOjEwMzMxMDAwM0MwNDA4MDAyNDg0NTJDMDAwMDAzMDIxMEUwMDA2RjI1NAorOjEwMzMyMDAwMjQwNzAwMDEwQTAwMEM5QzhGQkYwMDEwMEUwMDA3NjNFOQorOjEwMzMzMDAwMDAwMDAwMDA4RkJGMDAxMDBBMDAwOTI1MjdCRDAwMThGQgorOjEwMzM0MDAwMTQ4MjAwMDYyNDgyRkY4MDhDQzMwMTA0M0MwMjYwMjBBQQorOjEwMzM1MDAwQUM0MzAwMTQwQTAwMENEMjhGQkYwMDEwMzA0MjAwRkZCMworOjEwMzM2MDAwMkM0MjAwMDIxMDQwMDAwNDI0MDIwMDIyOEZCRjAwMTBGMworOjEwMzM3MDAwMEEwMDBCMTMyN0JEMDAxODE0ODIwMDA0OEY4MjAwMUM2MgorOjEwMzM4MDAwOEZCRjAwMTAwQTAwMEM1MzI3QkQwMDE4OEM0MjAwMENBMAorOjEwMzM5MDAwMTA0MDAwMUUwMEUwMjgyMTkwRTMwMDA5MjQwMjAwMThEQworOjEwMzNBMDAwMTQ2MjAwMDMyNDAyMDAxNjBBMDAwQ0JEMjQwMzAwMDg2NgorOjEwMzNCMDAwMTQ2MjAwMDcyNDAyMDAxNzI0MDMwMDEyM0MwMjgwMDg1NAorOjEwMzNDMDAwMzQ0MjAwODBBMDQzMDAwOTBBMDAwQ0NBOTRBNzAwMDhGOAorOjEwMzNEMDAwNTQ2MjAwMDc5NEE3MDAwODhGODJGRkE4MjQwNEZGRkUxMAorOjEwMzNFMDAwOTA0MzAwMDUwMDY0MTgyNEEwNDMwMDA1OTRBNzAwMDgzQQorOjEwMzNGMDAwOTBBNjAwMUI4Q0E0MDAwMDk0QTUwMDA2OEZCRjAwMTBBRgorOjEwMzQwMDAwMDAwNzNDMDAwQTAwMDhDODI3QkQwMDE4OEZCRjAwMTA0NQorOjEwMzQxMDAwMDNFMDAwMDgyN0JEMDAxODhGODUwMDFDM0MwNDgwMDBENQorOjEwMzQyMDAwOTRBMjAwMkE4Q0EzMDAzNDAwMDIzMEMwMjQwMkZGRjBEMgorOjEwMzQzMDAwMDBDMjEwMjQwMDYyMTgyMUFDODMwMDNDOENBMjAwMzAzMgorOjEwMzQ0MDAwM0MwMzgwMDBBQzgyMDAzODNDMDIwMDUwMzQ0MjAwMTA0MworOjEwMzQ1MDAwQUM2MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRQorOjEwMzQ2MDAwOEM2MjAwMDAzMDQyMDAyMDEwNDBGRkZEMzBDMjAwMDg5NgorOjEwMzQ3MDAwMTA0MDAwMDYzQzAyODAwMDhDNjIwNDA4QUNBMjAwMjBEMAorOjEwMzQ4MDAwOEM2MjA0MEMwQTAwMENGNUFDQTIwMDI0OEM0MzA0MDBFRQorOjEwMzQ5MDAwQUNBMzAwMjA4QzQyMDQwNEFDQTIwMDI0M0MwMzAwMjAxNgorOjEwMzRBMDAwM0MwMjgwMDBBQzQzMDAzMDNDMDQ4MDAwOEM4MjAwMzA0MQorOjEwMzRCMDAwMDA0MzEwMjQxNDQwRkZGRDhGODYwMDFDM0MwMjAwNDA5NgorOjEwMzRDMDAwQUM4MjAwMzA5NEMzMDAyQTk0QzIwMDI4OTRDNDAwMkMxQgorOjEwMzREMDAwOTRDNTAwMkUyNDYzMDAwMTAwNDQxMDIxMzA2NEZGRkZENgorOjEwMzRFMDAwQTRDMjAwMjgxNDg1MDAwMkE0QzMwMDJBQTRDMDAwMkE5NAorOjEwMzRGMDAwMDNFMDAwMDgwMDAwMDAwMDhGODQwMDFDMjdCREZGRThFNworOjEwMzUwMDAwM0MwNTgwMDQyNDg0MDAxMEFGQkYwMDEwMEUwMDBFMDg5QworOjEwMzUxMDAwMjQwNjAwMEE4Rjg0MDAxQzk0ODIwMDEyOTQ4MzAwMkVEQgorOjEwMzUyMDAwMzA0MjAwMEYyNDQyMDAwMzAwNDMxODA0MjQwMjdGRkZBRQorOjEwMzUzMDAwMDA0MzEwMkIxMDQwMDAwMkFDODMwMDAwMDAwMDAwMEQ3RgorOjEwMzU0MDAwMEUwMDBDRDQwMDAwMDAwMDhGODMwMDFDOEZCRjAwMTAwMQorOjEwMzU1MDAwMjdCRDAwMTg5NDYyMDAxNDk0NjMwMDFBMzA0MjAwMEZEMworOjEwMzU2MDAwMDAwMjE1MDAwMDYyMTgyNTNDMDI4MDAwMDNFMDAwMDhGQworOjEwMzU3MDAwQUM0MzAwQTA4RjgzMDAxQzNDMDI4MDA0OTQ0NDAwMDZFRQorOjEwMzU4MDAwOTQ2MjAwMUE4QzY1MDAwMEE0NjQwMDE2MDA0NDEwMjNBNQorOjEwMzU5MDAwMzA0MkZGRkYwMDQ1MTAyQjAzRTAwMDA4Mzg0MjAwMDFENQorOjEwMzVBMDAwOEY4NDAwMUMzQzA3ODAwNDk0ODYwMDFBOEM4NTAwMDBFMAorOjEwMzVCMDAwOTRFMjAwMDZBNDgyMDAxNjk0RTMwMDA2MDBDMzEwMjNFMAorOjEwMzVDMDAwMzA0MkZGRkYwMDQ1MTAyQjM4NDIwMDAxMTQ0MEZGRjg0NQorOjEwMzVEMDAwQTQ4MzAwMTYwM0UwMDAwODAwMDAwMDAwOEY4NDAwMUM5NAorOjEwMzVFMDAwM0MwMjgwMDQ5NDQyMDAwNjk0ODMwMDFBOEM4NTAwMDBGQgorOjEwMzVGMDAwQTQ4MjAwMTYwMDYyMTAyMzMwNDJGRkZGMDA0NTEwMkIwQQorOjEwMzYwMDAwMzg0MjAwMDE1MDQwMDAwRDhGODUwMDFDMDA2MDMwMjFDMQorOjEwMzYxMDAwM0MwNzgwMDQ5NEUyMDAwNkE0ODIwMDE2OTRFMzAwMDZBRQorOjEwMzYyMDAwMDBDMzEwMjMzMDQyRkZGRjAwNDUxMDJCMzg0MjAwMDEzOQorOjEwMzYzMDAwMTQ0MEZGRjhBNDgzMDAxNjhGODUwMDFDM0MwMzgwMDAxMworOjEwMzY0MDAwMzQ2MjA0MDA4Q0E0MDAyMEFGODIwMDE4QUM2NDAwMzhGRgorOjEwMzY1MDAwOENBMjAwMjRBQzYyMDAzQzNDMDIwMDA1QUM2MjAwMzA0RAorOjEwMzY2MDAwMDNFMDAwMDhBQ0EwMDAwNDhGODQwMDFDM0MwMzAwMDZBQgorOjEwMzY3MDAwOEM4MjAwMDQwMDAyMTE0MDAwNDMxMDI1M0MwMzgwMDBBRQorOjEwMzY4MDAwQUM2MjAwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGQworOjEwMzY5MDAwOEM2MjAwMDAzMDQyMDAxMDEwNDBGRkZEMzQ2MjA0MDBENAorOjEwMzZBMDAwQUM4MDAwMDQwM0UwMDAwOEFGODIwMDE4OEY4NjAwMUM4NQorOjEwMzZCMDAwMjdCREZGRTBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMThERQorOjEwMzZDMDAwOENDMzAwMDQ4Q0M1MDAyNDhGODIwMDE4MzA5MDAwRkY0QQorOjEwMzZEMDAwOTRDNDAwMUEyNDYzMDAwMTI0NDIwMDIwMjQ4NDAwMDFDMQorOjEwMzZFMDAwMjRBNzAwMjBBQ0MzMDAwNEFGODIwMDE4QTRDNDAwMUFCMQorOjEwMzZGMDAwQUNDNzAwMjQwNEExMDAwNjAwMDA4ODIxMDRFMjAwMDVGNAorOjEwMzcwMDAwOTRDMjAwMUE4Q0MyMDAyMDI0NDIwMDAxQUNDMjAwMjBFNgorOjEwMzcxMDAwOTRDMjAwMUE5NEMzMDAyODJFMDQwMDAxMDA0MzEwMjYwRQorOjEwMzcyMDAwMkM0MjAwMDEwMDQ0MTAyNDUwNDAwMDA1OTRDMjAwMUFBRAorOjEwMzczMDAwMjQwMjAwMDFBQ0MyMDAwODk0QzIwMDFBOTRDMzAwMjhGRAorOjEwMzc0MDAwMDAxMDIwMkIwMDQzMTAyNjJDNDIwMDAxMDA0NDEwMjVCRAorOjEwMzc1MDAwMTQ0MDAwMDcwMDAwMDAwMDhDQzIwMDA4MTQ0MDAwMDQ2MAorOjEwMzc2MDAwMjQwMjAwMTA4Q0MzMDAwNDE0NjIwMDBGOEY4NTAwMUMxQgorOjEwMzc3MDAwMEUwMDBENjgyNDExMDAwMThGODIwMDFDOTQ0MzAwMjg2NAorOjEwMzc4MDAwOTQ0MjAwMUExNDQzMDAwMzAwMDAwMDAwMEUwMDBDRDQwMQorOjEwMzc5MDAwMDAwMDAwMDAxNjAwMDAwNDhGODUwMDFDMEUwMDBENDU3RgorOjEwMzdBMDAwMDAwMDAwMDA4Rjg1MDAxQzk0QTIwMDFFOTRBNDAwMUM0MQorOjEwMzdCMDAwMjQ0MjAwMDEzMDQzRkZGRjE0NjQwMDAyQTRBMjAwMUU1MworOjEwMzdDMDAwQTRBMDAwMUUxMjAwMDAwQTNDMDI4MDA0OTRBMjAwMTQ2RgorOjEwMzdEMDAwOTRBMzAwMUEzMDQyMDAwRjAwMDIxNTAwMDA2MjE4MjU2MQorOjEwMzdFMDAwM0MwMjgwMDBBQzQzMDBBMDBBMDAwRERGQUNBMDAwMDg0MgorOjEwMzdGMDAwOTQ0MjAwMDY5NEEzMDAxQThDQTQwMDAwQTRBMjAwMTYxMAorOjEwMzgwMDAwMDA2MjEwMjMzMDQyRkZGRjAwNDQxMDJCMzg0MjAwMDFCOQorOjEwMzgxMDAwMTA0MDAwMEQwMjIwMTAyMTAwNjAzMDIxM0MwNzgwMDQ4MAorOjEwMzgyMDAwOTRFMjAwMDZBNEEyMDAxNjk0RTMwMDA2MDBDMzEwMjM0RAorOjEwMzgzMDAwMzA0MkZGRkYwMDQ0MTAyQjM4NDIwMDAxMTQ0MEZGRjhEMworOjEwMzg0MDAwQTRBMzAwMTYwMjIwMTAyMThGQkYwMDE4OEZCMTAwMTQwRQorOjEwMzg1MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwMDNFMDAwMDgzRgorOjEwMzg2MDAwMDAwMDAwMDA4RjgyMDAyNDNDMDMwMDA2MDAwMjExNDA4QgorOjEwMzg3MDAwMDA0MzEwMjUzQzAzODAwMEFDNjIwMDMwMDAwMDAwMDBEMworOjEwMzg4MDAwMDAwMDAwMDAwMDAwMDAwMDhDNjIwMDAwMzA0MjAwMTBDOAorOjEwMzg5MDAwMTA0MEZGRkQzNDYyMDQwMEFGODIwMDIwMDNFMDAwMDgwNgorOjEwMzhBMDAwQUY4MDAwMjQwM0UwMDAwODAwMDAxMDIxMDNFMDAwMDhCRQorOjEwMzhCMDAwMDAwMDAwMDAzMDg0RkZGRjMwQTVGRkZGMDAwMDE4MjE0QQorOjEwMzhDMDAwMTA4MDAwMDcwMDAwMDAwMDMwODIwMDAxMTA0MDAwMDI1QworOjEwMzhEMDAwMDAwNDIwNDIwMDY1MTgyMTBBMDAwREZFMDAwNTI4NDA2MgorOjEwMzhFMDAwMDNFMDAwMDgwMDYwMTAyMTEwQzAwMDA2MjRDNkZGRkY5RQorOjEwMzhGMDAwOENBMjAwMDAyNEE1MDAwNEFDODIwMDAwMEEwMDBFMDg3RgorOjEwMzkwMDAwMjQ4NDAwMDQwM0UwMDAwODAwMDAwMDAwMTBBMDAwMDg2OAorOjEwMzkxMDAwMjRBM0ZGRkZBQzg2MDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjEwMzkyMDAwMjQwMkZGRkYyNDYzRkZGRjE0NjJGRkZBMjQ4NDAwMDREMworOjEwMzkzMDAwMDNFMDAwMDgwMDAwMDAwMDNDMDI4MDA4MzQ0MjAwODBFMAorOjEwMzk0MDAwMjQwMzAwMDFBQzQzMDAwQ0E0NDMwMDEwQTQ0MzAwMTI2NAorOjEwMzk1MDAwQTQ0MzAwMTQwM0UwMDAwOEE0NDMwMDE2OEY4MjAwMUM1NworOjEwMzk2MDAwMjdCREZGRDhBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTQzMQorOjEwMzk3MDAwQUZCMDAwMTBBRkJGMDAyMDhDNDcwMDBDMjQ4MjAwODA0NQorOjEwMzk4MDAwMjQwOUZGODAzQzA4ODAwRTMwNDMwMDdGMDA4MDgwMjFBNgorOjEwMzk5MDAwM0MwQTgwMDAwMDQ5MjAyNDAwNjgxODIxMzBCMTAwRkY1MworOjEwMzlBMDAwMzBEMjAwRkYxMEUwMDAyOTAwMDA5ODIxMjYwMjAxMDAxQgorOjEwMzlCMDAwQUQ0NDAwMkMwMDQ5MjgyNDMwNDIwMDdGMDA0ODIwMjFEQgorOjEwMzlDMDAwOTA2MjAwMDAyNDAzMDA1MDMwNDIwMEZGMTQ0MzAwMDRDMgorOjEwMzlEMDAwMDAwMDAwMDBBRDQ1MDAyQzk0ODIwMERBMzA1M0ZGRkY1OAorOjEwMzlFMDAwMEUwMDBENDUwMDAwMDAwMDhGODIwMDFDOEY4MzAwMTgyMAorOjEwMzlGMDAwMDAxMTJDMDA5NDQyMDAxRTAwMTIyNDAwMzQ4NDAwMDFBNworOjEwM0EwMDAwMDBBMjI4MjUzQzAyNDAwMDAwQTIyODI1QUM3MDAwMDAzRQorOjEwM0ExMDAwOEZCRjAwMjBBQzYwMDAwNDhGQjIwMDE4QUM3MzAwMDhBOAorOjEwM0EyMDAwOEZCMTAwMTRBQzYwMDAwQzhGQjMwMDFDQUM2NDAwMTBBQworOjEwM0EzMDAwOEZCMDAwMTBBQzYwMDAxNDI0MDQwMDAxQUM2MDAwMThDQQorOjEwM0E0MDAwMjdCRDAwMjgwQTAwMEQ3OUFDNjUwMDFDOEZCRjAwMjAzRgorOjEwM0E1MDAwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwQworOjEwM0E2MDAwMDNFMDAwMDgyN0JEMDAyODNDMDY4MDAwMzRDMjAxMDBBNgorOjEwM0E3MDAwOTA0MzAwMEYyNDAyMDAxMDEwNjIwMDBFMjg2NTAwMTExMAorOjEwM0E4MDAwMTBBMDAwMDcyNDAyMDAxMjI0MDIwMDA4MjQwNTAwM0FCNgorOjEwM0E5MDAwMTA2MjAwMDYwMDAwMzAyMTAzRTAwMDA4MDAwMDAwMDA3MgorOjEwM0FBMDAwMjQwNTAwMzUxNDYyRkZGQzAwMDAzMDIxMEEwMDBFMjVCOQorOjEwM0FCMDAwMDAwMDAwMDA4Q0MyMDA3NDhGODNGRkE4MjQ0MjBGQTA3NgorOjEwM0FDMDAwMDNFMDAwMDhBQzYyMDAwQzI3QkRGRkU4QUZCRjAwMTBBOAorOjEwM0FEMDAwMEUwMDAzNTUyNDA1MDAwMTNDMDQ4MDA4OEZCRjAwMTAzMAorOjEwM0FFMDAwMjQwMjAwMDEzNDgzMDA4MEE0NjIwMDEyMjdCRDAwMTg2NAorOjEwM0FGMDAwMjQwMjAwMDEwM0UwMDAwOEEwODAwMDFBMjdCREZGRTBCNworOjEwM0IwMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUNDRgorOjEwM0IxMDAwMzBCMkZGRkYwRTAwMDM0NTAwODA4ODIxM0MwMjgwMDg4MAorOjEwM0IyMDAwMzQ1MDAwODA5MjAyMDAwOTI0MDMwMDA0MzA0MjAwRkY1OAorOjEwM0IzMDAwMTQ0MzAwMEMzQzAyODAwODEyNDAwMDA4MjQwMjAwMEFEMgorOjEwM0I0MDAwMEUwMDBFMUMwMDAwMDAwMDkyMDIwMDA1MjQwM0ZGRkU4MAorOjEwM0I1MDAwMDA0MzEwMjRBMjAyMDAwNTI0MDIwMDEyQTIwMjAwMDk2MAorOjEwM0I2MDAwM0MwMjgwMDgzNDQyMDA4MDAyMjAyMDIxMEUwMDAzNTBENQorOjEwM0I3MDAwQTA0MDAwMjcxNjQwMDAwMzAyMjAyMDIxMEUwMDBFODBFNgorOjEwM0I4MDAwMDAwMDAwMDAwMjIwMjAyMTMyNDYwMEZGOEZCRjAwMUNGMQorOjEwM0I5MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzhDOAorOjEwM0JBMDAwMEEwMDBFMjUyN0JEMDAyMDI3QkRGRkUwQUZCRjAwMUM4NworOjEwM0JCMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwMEUwMDAzNDU1MworOjEwM0JDMDAwMDA4MDgwMjEwRTAwMEUxQzAwMDAwMDAwM0MwMjgwMDhENgorOjEwM0JEMDAwMzQ0NTAwODA5MEEyMDAwOTI0MTIwMDE4MzA1MTAwRkZFMworOjEwM0JFMDAwMTIzMjAwMDMwMjAwMjAyMTI0MDIwMDEyQTBBMjAwMDlDOAorOjEwM0JGMDAwOTBBMjAwMDUyNDAzRkZGRTAwNDMxMDI0MEUwMDAzNTA5MgorOjEwM0MwMDAwQTBBMjAwMDUwMjAwMjAyMTI0MDUwMDIwMTYzMjAwMDc5MgorOjEwM0MxMDAwMDAwMDMwMjE4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQzQworOjEwM0MyMDAwOEZCMDAwMTAwQTAwMDM1NTI3QkQwMDIwOEZCRjAwMUM3NQorOjEwM0MzMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMzkyNgorOjEwM0M0MDAwMEEwMDBFMjUyN0JEMDAyMDI3QkRGRkU4M0MwMjgwMDBBQQorOjEwM0M1MDAwQUZCMDAwMTBBRkJGMDAxNDM0NDIwMTAwOTQ0MjAwMEMxQQorOjEwM0M2MDAwMjQwNTAwMzYwMDgwODAyMTE0NDAwMDEyMzA0NjAwRkZGOQorOjEwM0M3MDAwMEUwMDAzNDUwMDAwMDAwMDNDMDI4MDA4MzQ0MjAwODAzMgorOjEwM0M4MDAwMjQwMzAwMTJBMDQzMDAwOTkwNDMwMDA1MzQ2MzAwMTA5MAorOjEwM0M5MDAwMEUwMDBFMUNBMDQzMDAwNTBFMDAwMzUwMDIwMDIwMjE2MAorOjEwM0NBMDAwMDIwMDIwMjEwRTAwMDM1NTI0MDUwMDIwMEEwMDBFRkQwRAorOjEwM0NCMDAwMDAwMDAwMDAwRTAwMEUyNTAwMDAwMDAwMEUwMDAzNDU2RAorOjEwM0NDMDAwMDIwMDIwMjEzQzAyODAwODkwNDMwMDFCMjQwNUZGOUYzNgorOjEwM0NEMDAwMDIwMDIwMjEwMDY1MTgyNDhGQkYwMDE0OEZCMDAwMTA0RgorOjEwM0NFMDAwQTA0MzAwMUIwQTAwMDM1MDI3QkQwMDE4MjdCREZGRTBCQQorOjEwM0NGMDAwQUZCRjAwMThBRkIxMDAxNEFGQjAwMDEwMzBCMTAwRkY3QgorOjEwM0QwMDAwMEUwMDAzNDUwMDgwODAyMTNDMDI4MDA4MjQwMzAwMTIzRAorOjEwM0QxMDAwMzQ0MjAwODAwRTAwMEUxQ0EwNDMwMDA5MEUwMDAzNTAyOAorOjEwM0QyMDAwMDIwMDIwMjEwMjAwMjAyMTAyMjAzMDIxOEZCRjAwMTgzNAorOjEwM0QzMDAwOEZCMTAwMTQ4RkIwMDAxMDI0MDUwMDM1MEEwMDBFMjU0NQorOjEwM0Q0MDAwMjdCRDAwMjAzQzA0ODAwODkwODMwMDBFOTA4MjAwMEE2QQorOjEwM0Q1MDAwMTQ0MzAwMEIwMDAwMjgyMThGODJGRkE4MjQwMzAwNTA4OQorOjEwM0Q2MDAwMjQwNTAwMDE5MDQyMDAwMDMwNDIwMEZGMTQ0MzAwMDQ4QgorOjEwM0Q3MDAwMDAwMDAwMDA5MDgyMDAwRTI0NDIwMDAxQTA4MjAwMEU4QworOjEwM0Q4MDAwMDNFMDAwMDgwMEEwMTAyMTNDMDM4MDAwOEM2MjAxRjhEMQorOjEwM0Q5MDAwMDQ0MEZGRkUyNDAyMDAwMkFDNjQwMUMwQTA2MjAxQzQyMgorOjEwM0RBMDAwM0MwMjEwMDAwM0UwMDAwOEFDNjIwMUY4MjdCREZGRTAxMAorOjEwM0RCMDAwQUZCMjAwMTgzQzEyODAwOEFGQjEwMDE0QUZCRjAwMUNCNgorOjEwM0RDMDAwQUZCMDAwMTAzNjUxMDA4MDkyMjIwMDA5MjQwMzAwMEE4RgorOjEwM0REMDAwMzA0MjAwRkYxNDQzMDAzRTAwMDAwMDAwOEU0MzAwMDQwOAorOjEwM0RFMDAwOEUyMjAwMzg1MDYyMDA4MDhGQkYwMDFDOTIyMjAwMDA5QgorOjEwM0RGMDAwMjQwMzAwNTAzMDQyMDBGRjE0NDMwMDI1M0MwMjgwMDBBMQorOjEwM0UwMDAwOEM0MjAxNDA4RTQzMDAwNDM2NDIwMTAwMDIyMDI4MjFFQQorOjEwM0UxMDAwQUM0MzAwMUM5NjIyMDA1QzhFMjMwMDM4MzA0MkZGRkYyQQorOjEwM0UyMDAwMDAwMjEwNDAwMDYyMTgyMUFFMjMwMDFDOEU0MzAwMDRFMworOjEwM0UzMDAwOEUyNDAwMzg5NjIyMDA1QzAwNjQxODIzMzA0MkZGRkY3NQorOjEwM0U0MDAwMDAwMzE4NDMwMDAyMTA0MDAwNDMxMDJBMTA0MDAwMDZFRgorOjEwM0U1MDAwMDAwMDAwMDA4RTQyMDAwNDhFMjMwMDM4MDA0MzEwMjMyRgorOjEwM0U2MDAwMEEwMDBGNkIwMDAyMjA0Mzk2MjIwMDVDMzA0MkZGRkZFNQorOjEwM0U3MDAwMDAwMjIwNDAzQzAyODAwODM0NDMwMTAwMzQ0MjAwODBBQworOjEwM0U4MDAwQUNBNDAwMkNBMDQwMDAyNDI0MDIwMDAxQTA2MjAwMEM3RAorOjEwM0U5MDAwMEUwMDBGMUYwMDAwMDAwMDEwNDAwMDUzOEZCRjAwMUNEOQorOjEwM0VBMDAwM0MwMjgwMDA4QzQ0MDE0MDNDMDM4MDAwOEM2MjAxRjg5RAorOjEwM0VCMDAwMDQ0MEZGRkUyNDAyMDAwMkFDNjQwMUMwQTA2MjAxQzQwMQorOjEwM0VDMDAwM0MwMjEwMDBBQzYyMDFGODBBMDAwRkM4OEZCRjAwMUM1MgorOjEwM0VEMDAwOTIyMjAwMDkyNDAzMDAxMDMwNDIwMEZGMTQ0MzAwMDQyMgorOjEwM0VFMDAwM0MwMjgwMDA4QzQ0MDE0MDBBMDAwRkFGMDAwMDI4MjFGMgorOjEwM0VGMDAwOTIyMjAwMDkyNDAzMDAxNjMwNDIwMEZGMTQ0MzAwMDZGQQorOjEwM0YwMDAwMjQwMjAwMTRBMjIyMDAwOTNDMDI4MDAwOEM0NDAxNDBEQgorOjEwM0YxMDAwMEEwMDBGQzI4RkJGMDAxQzhFMjIwMDM4OEUyMzAwM0M4NworOjEwM0YyMDAwMDA0MzEwMjMwNDQxMDAzMDhGQkYwMDFDOTIyMjAwMjc2MQorOjEwM0YzMDAwMjQ0MjAwMDFBMjIyMDAyNzkyMjIwMDI3MkM0MjAwMDRFMgorOjEwM0Y0MDAwMTQ0MDAwMTYzQzEwODAwMDkyMjIwMDA5MjQwMzAwMDQ1MworOjEwM0Y1MDAwMzA0MjAwRkYxNDQzMDAwOTNDMDI4MDAwOEM0NDAxNDBDMQorOjEwM0Y2MDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTBFQgorOjEwM0Y3MDAwMjQwNTAwOTMwQTAwMEU4RDI3QkQwMDIwOEM0NDAxNDBDQgorOjEwM0Y4MDAwMjQwNTAwOTM4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ1RQorOjEwM0Y5MDAwOEZCMDAwMTAwQTAwMEYwOTI3QkQwMDIwOEUwNDAxNDBEOQorOjEwM0ZBMDAwMEUwMDAzNDUwMDAwMDAwMDhFNDIwMDA0MjQ0MkZGRkY4MworOjEwM0ZCMDAwQUU0MjAwMDQ4RTIyMDAzQzI0NDJGRkZGQUUyMjAwM0NCMQorOjEwM0ZDMDAwMEUwMDAzNTA4RTA0MDE0MDhFMDQwMTQwOEZCRjAwMUM4MAorOjEwM0ZEMDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMDRCOAorOjEwM0ZFMDAwMEEwMDAzNTUyN0JEMDAyMDhGQjIwMDE4OEZCMTAwMTRCRQorOjEwM0ZGMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwM0MwNjgwMDBDMQorOjEwNDAwMDAwOENDMjAxODgzQzAzODAwODM0NjUwMDgwOTA2MzAwMEVGOAorOjEwNDAxMDAwMDAwMjE0MDIzMDQ0MDBGRjMwNjMwMEZGMTQ2NDAwMEVGRAorOjEwNDAyMDAwM0MwMjgwMDg5MEEyMDAyNjMwNDIwMEZGMTA0NDAwMDlBNAorOjEwNDAzMDAwOEY4MkZGQThBMEE0MDAyNjI0MDMwMDUwOTA0MjAwMDAxNQorOjEwNDA0MDAwMzA0MjAwRkYxNDQzMDAwNjAwMDAwMDAwMEEwMDA1OEQwNgorOjEwNDA1MDAwOENDNDAxODAzQzAyODAwODM0NDIwMDgwQTA0NDAwMjZDOQorOjEwNDA2MDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkUwMzBFNzAwRkY4QworOjEwNDA3MDAwQUZCMjAwMThBRkJGMDAxQ0FGQjEwMDE0QUZCMDAwMTA1QQorOjEwNDA4MDAwMDA4MDkwMjExNEUwMDAwNjMwQzYwMEZGMDAwMDAwMDAxMAorOjEwNDA5MDAwMDAwMDAwMEQwMDAwMDAwMDBBMDAxMDIxMjQwMDAxMEVBNQorOjEwNDBBMDAwM0MwMzgwMDg5MDYyMDAwRTMwNDIwMEZGMTQ0NjAwMjM1QgorOjEwNDBCMDAwMzQ2MjAwODA5MDQyMDAyNjMwNDIwMEZGMTQ0NjAwMUYwOAorOjEwNDBDMDAwMDAwMDAwMDA5MDYyMDAwRjMwNDIwMEZGMTQ0NjAwMUIwOQorOjEwNDBEMDAwMDAwMDAwMDA5MDYyMDAwQTMwNDIwMEZGMTQ0NjAwMDMxNgorOjEwNDBFMDAwOEY5MEZGQTgwMDAwMDAwRDhGOTBGRkE4OEY4MkZGQUM3QgorOjEwNDBGMDAwM0MxMTgwMDBBRTA1MDAzQ0FDNDUwMDAwQTA2NjAwMEEwMworOjEwNDEwMDAwMEUwMDAzNDU4RTI0MDEwMEEyMDAwMDI0MEUwMDAzNTA3RgorOjEwNDExMDAwOEUyNDAxMDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkUwNQorOjEwNDEyMDAwMjQwMjAwMDJBQzcyMDFDMEEwNjIwMUM0M0MwMjEwMDA3MworOjEwNDEzMDAwQUM2MjAxRjgwQTAwMTAyMjhGQkYwMDFDMDAwMDAwMDBEMgorOjEwNDE0MDAwMDAwMDAwMEQwMDAwMDAwMDI0MDAwMTM3OEZCRjAwMUM5QworOjEwNDE1MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDg3OAorOjEwNDE2MDAwMjdCRDAwMjA4RjgzRkZBODNDMDI4MDAwOEM0NDAxMDAwMworOjEwNDE3MDAwMzQ0MjAxMDA4QzY1MDAzQzkwNDYwMDFCMEEwMDBGRThBOQorOjEwNDE4MDAwMjQwNzAwMDEzQzAyODAwODkwNDMwMDBFOTA0MjAwMEE4MAorOjEwNDE5MDAwMDA0MzEwMjYzMDQyMDBGRjAzRTAwMDA4MDAwMjEwMkIwRAorOjEwNDFBMDAwMjdCREZGRTAzQzAyODAwOEFGQjEwMDE0QUZCMDAwMTBBMworOjEwNDFCMDAwQUZCRjAwMTgzNDUwMDA4MDkyMDIwMDA1MjQwMzAwMzA4NQorOjEwNDFDMDAwMzA0MjAwMzAxNDQzMDA4NTAwODA4ODIxOEY4MjAwMUMxQgorOjEwNDFEMDAwOEM0MjAwMEMxMDQwMDA4MjhGQkYwMDE4MEUwMDBENDU2RAorOjEwNDFFMDAwMDAwMDAwMDA4Rjg2MDAxOEFDRDEwMDAwOTIwMjAwMDg4OQorOjEwNDFGMDAwOTIwMzAwMDkzMDQyMDBGRjAwMDIxMjAwMzA2MzAwRkYwQQorOjEwNDIwMDAwMDA0MzEwMjVBQ0MyMDAwNDkyMDIwMDREMDAwMjE2MDBDQgorOjEwNDIxMDAwMDAwMjE2MDMwNDQxMDAwNTAwMDAwMDAwM0MwMzA4MDBGMgorOjEwNDIyMDAwOEM2MzAwNDgwQTAwMTA2MDNDMTA4MDA4OTIwMjAwMDg2RAorOjEwNDIzMDAwMzA0MjAwNDAxNDQwMDAwMzAwMDAxODIxOTIwMjAwMjc4MQorOjEwNDI0MDAwMzA0MzAwRkYzQzEwODAwODM2MTEwMDgwOTIyMjAwNEQ2MAorOjEwNDI1MDAwMDAwMzFFMDAzMDQyMDBGRjAwMDIxNDAwMDA2MjE4MjUxNworOjEwNDI2MDAwQUNDMzAwMDg4RTI0MDAzMDhGODIwMDFDQUNDNDAwMEM0QworOjEwNDI3MDAwOEUyNTAwMzQ5NDQzMDAxRTNDMDJDMDBCQUNDNTAwMTBEOAorOjEwNDI4MDAwMDA2MjE4MjU4RTIyMDAzODAwMDAyMDIxQUNDMjAwMTRFNAorOjEwNDI5MDAwOEUyMjAwM0NBQ0MyMDAxODBFMDAwRDc5QUNDMzAwMUM4RAorOjEwNDJBMDAwOEUwMjAwMDQ4Rjg0MDAxODNDMDU4MDAwQUM4MjAwMDA2MAorOjEwNDJCMDAwOEUyMjAwMjBBQzgyMDAwNDhFMjIwMDFDQUM4MjAwMDhGQQorOjEwNDJDMDAwOEUyMjAwNTg4Q0EzMDA3NDAwNDMxMDIxQUM4MjAwMEM5NQorOjEwNDJEMDAwOEUyMjAwMkNBQzgyMDAxMDhFMjIwMDQwOEUyMzAwNDRERgorOjEwNDJFMDAwMDAwMjE0MDAwMDQzMTAyNUFDODIwMDE0OTIyMjAwNERGRAorOjEwNDJGMDAwMjQwMzAwODAzMDQyMDBGRjE0NDMwMDA0MDAwMDAwMDA0QgorOjEwNDMwMDAwQUM4MDAwMTgwQTAwMTBBNDhGODIwMDFDOEUyMzAwMENDMQorOjEwNDMxMDAwMjQwMjAwMDExMDYyMDAwRTI0MDJGRkZGOTIyMjAwMDgxNgorOjEwNDMyMDAwMzA0MjAwNDAxNDQwMDAwQTI0MDJGRkZGOEUyMzAwMEM5QworOjEwNDMzMDAwOENBMjAwNzQwMDYyMTgyMzNDMDIwODAwMDA2MjEwMjQ2MgorOjEwNDM0MDAwMTQ0MDAwMDIwMDAwMjgyMTAwNjAyODIxMDAwNTEwNDNDRAorOjEwNDM1MDAwQUM4MjAwMTg4RjgyMDAxQzAwMDAyMDIxOTQ0MzAwMUVCNAorOjEwNDM2MDAwM0MwMkMwMEMwMDYyMTgyNThGODIwMDE4MEUwMDBENzlFNworOjEwNDM3MDAwQUM0MzAwMUMzQzAzODAwODM0NjIwMTAwOEM0MjAwMDAwNgorOjEwNDM4MDAwOEY4NTAwMTgzNDYzMDA4MDhGQkYwMDE4QUNBMjAwMDAzNgorOjEwNDM5MDAwQUNBMDAwMDQ4QzY0MDA0ODhGODIwMDFDOEZCMTAwMTQxNAorOjEwNDNBMDAwQUNBNDAwMDhBQ0EwMDAwQ0FDQTAwMDEwOTA2MzAwMDUwOQorOjEwNDNCMDAwOTQ0NjAwMUUzQzAyNDAwRDAwMDMxRTAwMDBDMjMwMjU0MgorOjEwNDNDMDAwQUNBMzAwMTQ4RkIwMDAxMEFDQTAwMDE4MjQwNDAwMDFBRQorOjEwNDNEMDAwQUNBNjAwMUMwQTAwMEQ3OTI3QkQwMDIwOEZCRjAwMTg3NQorOjEwNDNFMDAwOEZCMTAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjAzQgorOjEwNDNGMDAwM0MwMjgwMDA5NDQzMDA3QzNDMDI4MDA4MzQ0NjAxMDA2QgorOjEwNDQwMDAwMzA4NDAwRkYzMDY1RkZGRjI0MDIwMDA1MjRBMzQ2NTBERQorOjEwNDQxMDAwQTBDNDAwMEM1NDgyMDAwQzMwNjVGRkZGOTBDMjAwMEQ1OAorOjEwNDQyMDAwMkM0MjAwMDcxMDQwMDAwNzI0QTMwQTAwOTBDMzAwMEQ4RgorOjEwNDQzMDAwMjQwMjAwMTQwMDYyMTAwNDAwQTIxMDIxMEEwMDEwRTBGRgorOjEwNDQ0MDAwMzA0NUZGRkYzMDY1RkZGRjNDMDI4MDA4MzQ0MjAwODBBQQorOjEwNDQ1MDAwMDNFMDAwMDhBNDQ1MDAxNDNDMDM4MDA4MzQ2ODAwODA5MQorOjEwNDQ2MDAwQUQwNTAwMzgzNDY3MDEwMDhDRTIwMDFDMzA4NDAwRkY4OQorOjEwNDQ3MDAwMDBBMjEwMjMxODQwMDAwMzMwQzYwMEZGMjRBMkZGRkM1NgorOjEwNDQ4MDAwQUNFMjAwMUMzMDgyMDAwMTUwNDAwMDA4M0MwMzgwMDg3MAorOjEwNDQ5MDAwOEQwMjAwM0MwMEEyMTAyMzA0NDEwMDEyMjQwNDAwMDVGOAorOjEwNDRBMDAwOEM2MjAwMDQxMEEyMDAwRjNDMDM4MDA4OEM2MjAwMDRBMAorOjEwNDRCMDAwMTRBMjAwMUUwMDAwMDAwMDNDMDIwODAwOEM0MjAwRDgzQworOjEwNDRDMDAwMzA0MjAwMjAxMDQwMDAwOTNDMDI4MDA4MzQ2MjAwODAyNQorOjEwNDREMDAwOTA2MzAwMDg5MDQyMDA0QzE0NDMwMDA0M0MwMjgwMDhBMgorOjEwNDRFMDAwMjQwNDAwMDQwQTAwMTBDQTAwMDAwMDAwMzQ0MzAwODBDNQorOjEwNDRGMDAwMzQ0MjAxMDBBMDQwMDAwQzI0MDIwMDAxQTQ2MjAwMTQxOAorOjEwNDUwMDAwMTBDMDAwMEEzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDA4MworOjEwNDUxMDAwOEM2MjAxRjgwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzA3QQorOjEwNDUyMDAwQTA2MjAxQzQzQzAyMTAwMEFDNjIwMUY4MDNFMDAwMDg4NAorOjEwNDUzMDAwMDAwMDAwMDAyN0JERkZFODAwQTYxODIzQUZCRjAwMTA1MQorOjEwNDU0MDAwMTg2MDAwODAzMDg4MDBGRjNDMDI4MDA4MzQ0NzAwODBGQgorOjEwNDU1MDAwQTBFMDAwMjQzNDQ0MDEwMEEwRTAwMDI3OEM4MjAwMUM2RAorOjEwNDU2MDAwMDBBMjEwMjMwNDQwMDA1NjAwMDAwMDAwOENFMjAwM0MzMgorOjEwNDU3MDAwOTRFMzAwNUM4Q0U0MDAyQzAwNDUzMDIzMzA2M0ZGRkZBMworOjEwNDU4MDAwMDBDMzE4MjEwMDgzMjAyQjEwODAwMDA0MDBFMDE4MjFCNAorOjEwNDU5MDAwOENFMjAwMkMwQTAwMTEzOTAwQTIxMDIxOTRFMjAwNUM4OAorOjEwNDVBMDAwMzA0MkZGRkYwMEMyMTAyMTAwQTIxMDIxQUM2MjAwMUNBQgorOjEwNDVCMDAwM0MwMjgwMDgzNDQ0MDA4MDk0ODIwMDVDOEM4MzAwMUNBMAorOjEwNDVDMDAwMzA0MkZGRkYwMDAyMTA0MDAwQTIxMDIxMDA0MzEwMkJEOAorOjEwNDVEMDAwMTA0MDAwMDQwMDAwMDAwMDhDODIwMDFDMEEwMDExNENGNgorOjEwNDVFMDAwM0MwNjgwMDg5NDgyMDA1QzMwNDJGRkZGMDAwMjEwNDBDRAorOjEwNDVGMDAwMDBBMjEwMjEzQzA2ODAwODM0QzMwMTAwMzRDNzAwODBBQgorOjEwNDYwMDAwQUM4MjAwMUNBMDYwMDAwQ0FDRTUwMDM4OEM2MjAwMUM4MQorOjEwNDYxMDAwMDBBMjEwMjMxODQwMDAwMjI0QTJGRkZDQUM2MjAwMUM4MAorOjEwNDYyMDAwMzEwMjAwMDExMDQwMDAwODNDMDM4MDA4OENFMjAwM0M4RAorOjEwNDYzMDAwMDBBMjEwMjMwNDQxMDAxMjI0MDQwMDA1OENDMjAwMDRDRgorOjEwNDY0MDAwMTBBMjAwMTA4RkJGMDAxMDhDNjIwMDA0MTRBMjAwNEY1MworOjEwNDY1MDAwOEZCRjAwMTAzQzAyMDgwMDhDNDIwMEQ4MzA0MjAwMjA3RQorOjEwNDY2MDAwMTA0MDAwMEEzQzAyODAwODM0NjIwMDgwOTA2MzAwMDgxOQorOjEwNDY3MDAwOTA0MjAwNEMxNDQzMDAwNTNDMDI4MDA4MjQwNDAwMDRDRQorOjEwNDY4MDAwOEZCRjAwMTAwQTAwMTBDQTI3QkQwMDE4MzQ0MzAwODBGNQorOjEwNDY5MDAwMzQ0MjAxMDBBMDQwMDAwQzI0MDIwMDAxQTQ2MjAwMTQ3NgorOjEwNDZBMDAwM0MwMjgwMDA4QzQ0MDEwMDNDMDM4MDAwOEM2MjAxRjhENQorOjEwNDZCMDAwMDQ0MEZGRkUyNDAyMDAwMjBBMDAxMTk5MDAwMDAwMDBERAorOjEwNDZDMDAwOENFMjAwMUMwMDQ2MTAyMzAwNDMxMDJCNTQ0MDAwMDFENAorOjEwNDZEMDAwQUNFNTAwMUM5NEUyMDA1QzMwNDJGRkZGMDA2MjEwMkI0RQorOjEwNDZFMDAwMTQ0MDAwMDcyNDAyMDAwMjk0RTIwMDVDOENFMzAwMUNFQQorOjEwNDZGMDAwMzA0MkZGRkYwMDYyMTgyMUFDRTMwMDFDMjQwMjAwMDJEQworOjEwNDcwMDAwQUNFNTAwMzgwRTAwMEYxRkEwODIwMDBDMTA0MDAwMUYwNworOjEwNDcxMDAwOEZCRjAwMTAzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDBFRAorOjEwNDcyMDAwOEM2MjAxRjgwNDQwRkZGRTI0MDIwMDAyQUM2NDAxQzA2OAorOjEwNDczMDAwQTA2MjAxQzQzQzAyMTAwMEFDNjIwMUY4MEEwMDExQjE5MQorOjEwNDc0MDAwOEZCRjAwMTAzMTAyMDAxMDEwNDAwMDEwOEZCRjAwMTAwQQorOjEwNDc1MDAwM0MwMjgwMDgzNDQ1MDA4MDhDQTMwMDFDOTRBMjAwNUNCRAorOjEwNDc2MDAwMDA2NjE4MjMzMDQyRkZGRjAwNjIxODIxM0MwMjNGRkYyMQorOjEwNDc3MDAwMzQ0NEZGRkYwMDgzMTAyQjU0NDAwMDAxMDA4MDE4MjFCNworOjEwNDc4MDAwMDBDMzEwMjFBQ0EyMDAxQzhGQkYwMDEwMDNFMDAwMDg4MgorOjEwNDc5MDAwMjdCRDAwMTgyN0JERkZFODAwQzA0MDIxMDBBNjMwMjMzOAorOjEwNDdBMDAwQUZCRjAwMTAxOEMwMDAyNjMwOEEwMEZGM0MwMjgwMDgwRQorOjEwNDdCMDAwMzQ0OTAwODA4RDI0MDAxQzhEMjMwMDJDMDA4ODIwMjM4OAorOjEwNDdDMDAwMDA2NDE4MkIxMDYwMDAwRjM0NDcwMTAwOENFMjAwMjBCOQorOjEwNDdEMDAwMDA0NjEwMjFBQ0UyMDAyMDhDRTIwMDIwMDA0NDEwMkJBNworOjEwNDdFMDAwMTQ0MDAwMEIzQzAyM0ZGRjhDRTIwMDIwMDA0NDEwMjNFOQorOjEwNDdGMDAwQUNFMjAwMjA5NTIyMDA1QzMwNDJGRkZGMEEwMDExRDE5QworOjEwNDgwMDAwMDA4MjIwMjFBQ0UwMDAyMDAwODYyMDIxM0MwMjNGRkZGNgorOjEwNDgxMDAwMzQ0M0ZGRkYwMDY0MTAyQjU0NDAwMDAxMDA2MDIwMjE0RQorOjEwNDgyMDAwM0MwMjgwMDgzNDQyMDA4MDAwODUxODIxQUM0MzAwMUMwMworOjEwNDgzMDAwQTA0MDAwMjRBMDQwMDAyNzBBMDAxMjIzM0MwMzgwMDg2NworOjEwNDg0MDAwMzE0MjAwMTAxMDQwMDA0MzNDMDM4MDA4M0MwNjgwMDhDMQorOjEwNDg1MDAwMzRDNDAwODA4QzgyMDAzQzAwNDgxMDIzNTg0MDAwM0U0NQorOjEwNDg2MDAwMzQ2NjAwODA5MDgyMDAyNDI0NDIwMDAxQTA4MjAwMjQ0QgorOjEwNDg3MDAwOTA4MjAwMjQzQzAzMDgwMDhDNjMwMDI0MzA0MjAwRkYzNworOjEwNDg4MDAwMDA0MzEwMkIxNDQwMDA2ODhGQkYwMDEwMzRDMjAxMDA5OQorOjEwNDg5MDAwOEM0MjAwMUMwMEEyMTAyMzE4NDAwMDYzMDAwMDAwMDA5RQorOjEwNDhBMDAwOENDMzAwMDQ5NDgyMDA1QzAwNjgxODIzMzA0MkZGRkYzMAorOjEwNDhCMDAwMDAwMzE4NDMwMDAyMTA0MDAwNDMxMDJBMTA0MDAwMDU3NgorOjEwNDhDMDAwMDAwMDAwMDA4Q0MyMDAwNDAwNDgxMDIzMEEwMDEyMDZGOQorOjEwNDhEMDAwMDAwMjEwNDM5NDgyMDA1QzMwNDJGRkZGMDAwMjEwNDA0RgorOjEwNDhFMDAwM0MwNjgwMDhBQzgyMDAyQzM0QzUwMDgwOTRBMjAwNUM5OQorOjEwNDhGMDAwOENBNDAwMkM5NEEzMDA1QzMwNDJGRkZGMDAwMjEwNDAwNworOjEwNDkwMDAwMDA4MjIwMjEzMDYzRkZGRjAwODMyMDIxMDEwNDEwMjE1OQorOjEwNDkxMDAwQUNBMjAwMUM4Q0MyMDAwNDM0QzYwMTAwQUNDMjAwMUM1NgorOjEwNDkyMDAwMjQwMjAwMDIwRTAwMEYxRkEwQzIwMDBDMTA0MDAwM0UyNworOjEwNDkzMDAwOEZCRjAwMTAzQzAyODAwMDhDNDQwMTAwM0MwMzgwMDBDQgorOjEwNDk0MDAwOEM2MjAxRjgwNDQwRkZGRTI0MDIwMDAyMEEwMDEyNTNBOAorOjEwNDk1MDAwMDAwMDAwMDAzNDY2MDA4MEFDQzUwMDM4MzQ2NDAxMDBGQgorOjEwNDk2MDAwOEM4MjAwMUMwMEEyMTAyMzE4NDAwMDAyMjRBMkZGRkMyRAorOjEwNDk3MDAwQUM4MjAwMUMzMTQyMDAwMTUwNDAwMDBBM0MwMzgwMDgxOAorOjEwNDk4MDAwOENDMjAwM0MwMEEyMTAyMzA0NDMwMDE0MjQwNDAwMDU0MAorOjEwNDk5MDAwOEM2MjAwMDQxNEEyMDAwMzNDMDM4MDA4MEEwMDEyNDU0NAorOjEwNDlBMDAwMjQwNDAwMDU4QzYyMDAwNDE0QTIwMDFGOEZCRjAwMTBCNQorOjEwNDlCMDAwM0MwMjA4MDA4QzQyMDBEODMwNDIwMDIwMTA0MDAwMEExRgorOjEwNDlDMDAwM0MwMjgwMDgzNDYyMDA4MDkwNjMwMDA4OTA0MjAwNENGMgorOjEwNDlEMDAwMTQ0MzAwMDUzQzAyODAwODI0MDQwMDA0OEZCRjAwMTAyQgorOjEwNDlFMDAwMEEwMDEwQ0EyN0JEMDAxODM0NDMwMDgwMzQ0MjAxMDA3OQorOjEwNDlGMDAwQTA0MDAwMEMyNDAyMDAwMUE0NjIwMDE0M0MwMjgwMDBDQworOjEwNEEwMDAwOEM0NDAxMDAzQzAzODAwMDhDNjIwMUY4MDQ0MEZGRkVFRQorOjEwNEExMDAwMjQwMjAwMDJBQzY0MDFDMEEwNjIwMUM0M0MwMjEwMDA4OAorOjEwNEEyMDAwQUM2MjAxRjg4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMTgzQQorOjEwNEEzMDAwMjdCREZGRTgzQzBBODAwOEFGQkYwMDEwMzU0OTAwODA2MQorOjEwNEE0MDAwOEQyMjAwM0MwMEMwNDAyMTMwODQwMEZGMDA0NjEwMjMyRQorOjEwNEE1MDAwMTg0MDAwOUQzMEU3MDBGRjM1NDcwMTAwMjQwMjAwMDFBNworOjEwNEE2MDAwMDBBNjMwMjNBMEUwMDAwQ0EwRTAwMDBEQTUyMjAwMTQ1OQorOjEwNEE3MDAwMThDMDAwMjQzMDgyMDAxMDhEMjMwMDFDOEQyMjAwMkNEMQorOjEwNEE4MDAwMDA2ODE4MjMwMDQzMTAyQjEwNDAwMDBGMDAwMDAwMDBBNgorOjEwNEE5MDAwOENFMjAwMjAwMDQ2MTAyMUFDRTIwMDIwOENFMjAwMjBENQorOjEwNEFBMDAwMDA0MzEwMkIxNDQwMDAwQjNDMDIzRkZGOENFMjAwMjAxRgorOjEwNEFCMDAwMDA0MzEwMjNBQ0UyMDAyMDk1MjIwMDVDMzA0MkZGRkY0RgorOjEwNEFDMDAwMEEwMDEyODIwMDYyMTgyMUFDRTAwMDIwMDA2NjE4MjE2MgorOjEwNEFEMDAwM0MwMjNGRkYzNDQ2RkZGRjAwQzMxMDJCNTQ0MDAwMDE0RgorOjEwNEFFMDAwMDBDMDE4MjEzQzAyODAwODM0NDIwMDgwMDA2NTE4MjE3MworOjEwNEFGMDAwQUM0MzAwMUNBMDQwMDAyNEEwNDAwMDI3MEEwMDEyRDBCNAorOjEwNEIwMDAwM0MwMzgwMDgxMDQwMDA0MDNDMDM4MDA4OEQyMjAwM0M5QworOjEwNEIxMDAwMDA0ODEwMjM1ODQwMDAzRDM0NjcwMDgwOTEyMjAwMjQ1MworOjEwNEIyMDAwMjQ0MjAwMDFBMTIyMDAyNDkxMjIwMDI0M0MwMzA4MDAxOQorOjEwNEIzMDAwOEM2MzAwMjQzMDQyMDBGRjAwNDMxMDJCMTQ0MDAwOUE4NQorOjEwNEI0MDAwOEZCRjAwMTA4Q0UyMDAxQzAwQTIxMDIzMTg0MDAwOTZCQQorOjEwNEI1MDAwMDAwMDAwMDA4RDQzMDAwNDk1MjIwMDVDMDA2ODE4MjNDQgorOjEwNEI2MDAwMzA0MkZGRkYwMDAzMTg0MzAwMDIxMDQwMDA0MzEwMkFBOAorOjEwNEI3MDAwMTA0MDAwMDUwMTIwMjAyMThENDIwMDA0MDA0ODEwMjMzMAorOjEwNEI4MDAwMEEwMDEyQjMwMDAyMTA0Mzk1MjIwMDVDMzA0MkZGRkY3RQorOjEwNEI5MDAwMDAwMjEwNDAzQzA2ODAwOEFDODIwMDJDMzRDNTAwODAyNgorOjEwNEJBMDAwOTRBMjAwNUM4Q0E0MDAyQzk0QTMwMDVDMzA0MkZGRkYxNAorOjEwNEJCMDAwMDAwMjEwNDAwMDgyMjAyMTMwNjNGRkZGMDA4MzE4MjE5MworOjEwNEJDMDAwMDEwMzEwMjFBQ0EyMDAxQzhDQzIwMDA0MzRDNjAxMDBGOQorOjEwNEJEMDAwQUNDMjAwMUMyNDAyMDAwMjBFMDAwRjFGQTBDMjAwMEM3OQorOjEwNEJFMDAwMTA0MDAwNzE4RkJGMDAxMDNDMDI4MDAwOEM0NDAxMDAxNworOjEwNEJGMDAwM0MwMzgwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDJBNgorOjEwNEMwMDAwMEEwMDEyRkEwMDAwMDAwMDM0NjcwMDgwQUNFNTAwMzhBQQorOjEwNEMxMDAwMzQ2NjAxMDA4Q0MyMDAxQzAwQTIxMDIzMTg0MDAwMDI2MAorOjEwNEMyMDAwMjRBMkZGRkNBQ0MyMDAxQzMwODIwMDAxNTA0MDAwMDhFRQorOjEwNEMzMDAwM0MwMzgwMDg4Q0UyMDAzQzAwQTIxMDIzMDQ0MzAwNTE5NgorOjEwNEM0MDAwMjQwNDAwMDU4QzYyMDAwNDEwQTIwMDNFM0MwMzgwMDg4RQorOjEwNEM1MDAwOEM2MjAwMDQ1NEEyMDA1NDhGQkYwMDEwM0MwMjA4MDA3NAorOjEwNEM2MDAwOEM0MjAwRDgzMDQyMDAyMDEwNDAwMDA2M0MwMjgwMDhGMAorOjEwNEM3MDAwMzQ2MjAwODA5MDYzMDAwODkwNDIwMDRDMTA0MzAwNDA3MgorOjEwNEM4MDAwM0MwMjgwMDgzNDQzMDA4MDM0NDIwMTAwQTA0MDAwMEMwNAorOjEwNEM5MDAwMjQwMjAwMDFBNDYyMDAxNDNDMDI4MDAwOEM0NDAxMDA0NAorOjEwNENBMDAwM0MwMzgwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDJGNQorOjEwNENCMDAwQUM2NDAxQzBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjgwNworOjEwNENDMDAwMEEwMDEzMzg4RkJGMDAxMDI0MDIwMDA1QTEyMDAwMjcxRQorOjEwNENEMDAwMTRFMjAwMEEzQzAzODAwODM1NDMwMTAwOTA2MjAwMEQ5NQorOjEwNENFMDAwMkM0MjAwMDY1MDQwMDAwNTNDMDM4MDA4OTA2MjAwMERGNQorOjEwNENGMDAwMjQ0MjAwMDFBMDYyMDAwRDNDMDM4MDA4MzQ2NzAwODA1QworOjEwNEQwMDAwQUNFNTAwMzgzNDY2MDEwMDhDQzIwMDFDMDBBMjEwMjMwMAorOjEwNEQxMDAwMTg0MDAwMDIyNEEyRkZGQ0FDQzIwMDFDMzA4MjAwMDEzQgorOjEwNEQyMDAwNTA0MDAwMEEzQzAzODAwODhDRTIwMDNDMDBBMjEwMjNBMworOjEwNEQzMDAwMDQ0MTAwMTQyNDA0MDAwNThDNjIwMDA0MTRBMjAwMDM0MgorOjEwNEQ0MDAwM0MwMzgwMDgwQTAwMTMyRjI0MDQwMDA1OEM2MjAwMDQzMQorOjEwNEQ1MDAwMTRBMjAwMTU4RkJGMDAxMDNDMDIwODAwOEM0MjAwRDgzRQorOjEwNEQ2MDAwMzA0MjAwMjAxMDQwMDAwQTNDMDI4MDA4MzQ2MjAwODA3QgorOjEwNEQ3MDAwOTA2MzAwMDg5MDQyMDA0QzE0NDMwMDA1M0MwMjgwMDhGOAorOjEwNEQ4MDAwMjQwNDAwMDQ4RkJGMDAxMDBBMDAxMENBMjdCRDAwMThCOQorOjEwNEQ5MDAwMzQ0MzAwODAzNDQyMDEwMEEwNDAwMDBDMjQwMjAwMDE5MgorOjEwNERBMDAwQTQ2MjAwMTQ4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMThBNAorOjEwNERCMDAwM0MwQjgwMDgyN0JERkZFODNDMDI4MDAwQUZCRjAwMTAxRAorOjEwNERDMDAwMzQ0MjAxMDAzNTZBMDA4MDkwNDQwMDBBMzU2OTAxMDBEMAorOjEwNEREMDAwOEM0NTAwMTQ4RDQ4MDAzODkxMjMwMDBDMzA4NDAwRkY2RQorOjEwNERFMDAwMDEwNTEwMjMxQzQwMDBCMzMwNjcwMEZGMkNFMjAwMDZEMQorOjEwNERGMDAwNTA0MDAwQjE4RkJGMDAxMDI0MDIwMDAxMDBFMjMwMDRENworOjEwNEUwMDAwMzBDMjAwMDM1NDQwMDAwODAwQTgzMDIzMzBDMjAwMEMxOAorOjEwNEUxMDAwMTQ0MDAwQTEzMEMyMDAzMDE0NDAwMEEzOEZCRjAwMTAyNgorOjEwNEUyMDAwMEEwMDEzRkMwMDAwMDAwMDE4QzAwMDI0MzA4MjAwMTBBQgorOjEwNEUzMDAwOEQ0MzAwMUM4RDQyMDAyQzAwNjgxODIzMDA0MzEwMkI2QQorOjEwNEU0MDAwMTA0MDAwMEYwMDAwMDAwMDhEMjIwMDIwMDA0NjEwMjFCRAorOjEwNEU1MDAwQUQyMjAwMjA4RDIyMDAyMDAwNDMxMDJCMTQ0MDAwMEJCNworOjEwNEU2MDAwM0MwMjNGRkY4RDIyMDAyMDAwNDMxMDIzQUQyMjAwMjA5MgorOjEwNEU3MDAwOTU0MjAwNUMzMDQyRkZGRjBBMDAxMzcwMDA2MjE4MjE2NworOjEwNEU4MDAwQUQyMDAwMjAwMDY2MTgyMTNDMDIzRkZGMzQ0NkZGRkZBMgorOjEwNEU5MDAwMDBDMzEwMkI1NDQwMDAwMTAwQzAxODIxM0MwMjgwMDhDMAorOjEwNEVBMDAwMzQ0MjAwODAwMDY1MTgyMUFDNDMwMDFDQTA0MDAwMjQ1RgorOjEwNEVCMDAwQTA0MDAwMjcwQTAwMTNCRTNDMDM4MDA4MTA0MDAwNDBCOQorOjEwNEVDMDAwM0MwMzgwMDg4RDQyMDAzQzAwNDgxMDIzMTg0MDAwM0QwMAorOjEwNEVEMDAwMzQ2NzAwODA5MTQyMDAyNDI0NDIwMDAxQTE0MjAwMjQ1MgorOjEwNEVFMDAwOTE0MjAwMjQzQzAzMDgwMDhDNjMwMDI0MzA0MjAwRkYwMAorOjEwNEVGMDAwMDA0MzEwMkIxNDQwMDA3MDhGQkYwMDEwOEQyMjAwMUM0NworOjEwNEYwMDAwMDBBMjEwMjMxODQwMDA2QzAwMDAwMDAwOEQ2MzAwMDQxNAorOjEwNEYxMDAwOTU0MjAwNUMwMDY4MTgyMzMwNDJGRkZGMDAwMzE4NDNFRAorOjEwNEYyMDAwMDAwMjEwNDAwMDQzMTAyQTEwNDAwMDA1MDE0MDIwMjFEQgorOjEwNEYzMDAwOEQ2MjAwMDQwMDQ4MTAyMzBBMDAxM0ExMDAwMjEwNDNGMAorOjEwNEY0MDAwOTU0MjAwNUMzMDQyRkZGRjAwMDIxMDQwM0MwNjgwMDhBMgorOjEwNEY1MDAwQUM4MjAwMkMzNEM1MDA4MDk0QTIwMDVDOENBNDAwMkM5MAorOjEwNEY2MDAwOTRBMzAwNUMzMDQyRkZGRjAwMDIxMDQwMDA4MjIwMjEyOQorOjEwNEY3MDAwMzA2M0ZGRkYwMDgzMTgyMTAxMDMxMDIxQUNBMjAwMUM0NQorOjEwNEY4MDAwOENDMjAwMDQzNEM2MDEwMEFDQzIwMDFDMjQwMjAwMDIyMgorOjEwNEY5MDAwMEUwMDBGMUZBMEMyMDAwQzEwNDAwMDQ3OEZCRjAwMTA3MgorOjEwNEZBMDAwM0MwMjgwMDA4QzQ0MDEwMDNDMDM4MDAwOEM2MjAxRjhDQworOjEwNEZCMDAwMDQ0MEZGRkUyNDAyMDAwMjBBMDAxM0VFMDAwMDAwMDA3RAorOjEwNEZDMDAwMzQ2NzAwODBBQ0U1MDAzODM0NjYwMTAwOENDMjAwMUNGOAorOjEwNEZEMDAwMDBBMjEwMjMxODQwMDAwMjI0QTJGRkZDQUNDMjAwMUM1NworOjEwNEZFMDAwMzA4MjAwMDE1MDQwMDAwQTNDMDM4MDA4OENFMjAwM0MwMworOjEwNEZGMDAwMDBBMjEwMjMwNDQzMDAxNDI0MDQwMDA1OEM2MjAwMDQ2MgorOjEwNTAwMDAwMTRBMjAwMDMzQzAzODAwODBBMDAxM0UwMjQwNDAwMDVGNgorOjEwNTAxMDAwOEM2MjAwMDQxNEEyMDAyODhGQkYwMDEwM0MwMjA4MDAxQworOjEwNTAyMDAwOEM0MjAwRDgzMDQyMDAyMDEwNDAwMDBBM0MwMjgwMDgyOAorOjEwNTAzMDAwMzQ2MjAwODA5MDYzMDAwODkwNDIwMDRDMTQ0MzAwMDVFNQorOjEwNTA0MDAwM0MwMjgwMDgyNDA0MDAwNDhGQkYwMDEwMEEwMDEwQ0EyQworOjEwNTA1MDAwMjdCRDAwMTgzNDQzMDA4MDM0NDIwMTAwQTA0MDAwMENGQQorOjEwNTA2MDAwMjQwMjAwMDFBNDYyMDAxNDNDMDI4MDAwOEM0NDAxMDA3MAorOjEwNTA3MDAwM0MwMzgwMDA4QzYyMDFGODA0NDBGRkZFMjQwMjAwMDIyMQorOjEwNTA4MDAwQUM2NDAxQzBBMDYyMDFDNDNDMDIxMDAwQUM2MjAxRjgzMworOjEwNTA5MDAwMEEwMDEzRkM4RkJGMDAxMDhGQkYwMDEwMDEwMDMwMjFFOQorOjEwNTBBMDAwMEEwMDExMUIyN0JEMDAxODAxMDAzMDIxMEEwMDEyNUEwNgorOjEwNTBCMDAwMjdCRDAwMTg4RkJGMDAxMDAzRTAwMDA4MjdCRDAwMThBRgorOjEwNTBDMDAwM0MwMzgwMDgzNDY0MDEwMDI0MDIwMDAzQTA4MjAwMEMyOQorOjEwNTBEMDAwOEM2MjAwMDQwM0UwMDAwOEFDODIwMDFDM0MwNTgwMDhFMAorOjEwNTBFMDAwMzRBMzAwODA5MDYyMDAyNzM0QTUwMTAwMjQwNjAwNDMwOQorOjEwNTBGMDAwMjQ0MjAwMDFBMDYyMDAyNzkwNjMwMDI3M0MwMjA4MDBDMAorOjEwNTEwMDAwOEM0MjAwNDgzMDYzMDBGRjE0NjIwMDA0M0MwNzYwMjFCOQorOjEwNTExMDAwOTRBNTAwREEwQTAwMDhFRDMwQTVGRkZGMDNFMDAwMDhCRgorOjEwNTEyMDAwMDAwMDAwMDAyN0JERkZFOEFGQkYwMDEwM0MwMjgwMDA3OAorOjEwNTEzMDAwMEUwMDE0MDU4QzQ0MDE4MDNDMDI4MDA4MzQ0MzAxMDBCOQorOjEwNTE0MDAwQTA2MDAwMEM4QzQyMDAwNDhGQkYwMDEwMjdCRDAwMTgyNworOjEwNTE1MDAwMDNFMDAwMDhBQzYyMDAxQzI3QkRGRkUwM0MwMjgwMDhCMQorOjEwNTE2MDAwQUZCRjAwMThBRkIxMDAxNEFGQjAwMDEwMzQ0NTAwODBERAorOjEwNTE3MDAwMzQ0NjAxMDAzQzA4ODAwMDhEMDkwMTQwOTBDMzAwMENCQQorOjEwNTE4MDAwOENBNDAwM0M4Q0EyMDAzODE0ODIwMDNCMzA2NzAwRkZFNgorOjEwNTE5MDAwOTUwMjAwN0M5MEEzMDAyNzE0NjAwMDA5MzA0NUZGRkZCMgorOjEwNTFBMDAwMjQwMjAwMDU1NEUyMDAwODNDMDQ4MDA4OTBDMjAwMEQ2RgorOjEwNTFCMDAwMjQ0MjAwMDFBMEMyMDAwRDBBMDAxNDQwM0MwNDgwMDhGMworOjEwNTFDMDAwQTBDMDAwMEQzQzA0ODAwODM0ODIwMTAwOTA0MjAwMEMxNQorOjEwNTFEMDAwMjQwMzAwMDUzMDQyMDBGRjE0NDMwMDBBMjRBMjA1REMyQQorOjEwNTFFMDAwMzQ4MzAwODA5MDYyMDAyNzJDNDIwMDA3NTA0MDAwMDU2NQorOjEwNTFGMDAwMjRBMjBBMDA5MDYzMDAyNzI0MDIwMDE0MDA2MjEwMDQxNQorOjEwNTIwMDAwMDBBMjEwMjEzQzEwODAwODM2MTAwMDgwMzA0NUZGRkZCRQorOjEwNTIxMDAwMDEyMDIwMjEwRTAwMTQwNUE2MDUwMDE0OTYwMjAwNUM1MgorOjEwNTIyMDAwOEUwMzAwMzgzQzExODAwMDMwNDJGRkZGMDAwMjEwNDAyNgorOjEwNTIzMDAwMDA2MjE4MjFBRTAzMDAxQzBFMDAwMzQ1OEUyNDAxNDBCRAorOjEwNTI0MDAwOTIwMjAwMjUzNDQyMDA0MEEyMDIwMDI1MEUwMDAzNTBDNQorOjEwNTI1MDAwOEUyNDAxNDA4RTI0MDE0MDNDMDM4MDAwOEM2MjAxRjhDMgorOjEwNTI2MDAwMDQ0MEZGRkUyNDAyMDAwMkFDNjQwMUMwQTA2MjAxQzQzRAorOjEwNTI3MDAwM0MwMjEwMDBBQzYyMDFGODhGQkYwMDE4OEZCMTAwMTQxRgorOjBDNTI4MDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDIwRTQKKzowNDUyOEMwMDgwMDgwMTAwOTUKKzoxMDUyOTAwMDgwMDgwMDgwODAwODAwMDAwMDAwMEM4MDAwMDAzMjAwQzAKKzoxMDUyQTAwMDgwMDgwMjQwMDgwMDBFREMwODAwMEYzNDA4MDAwRjc4NjgKKzoxMDUyQjAwMDA4MDAxMDEwMDgwMDEwNTA4MDA4MDEwMDgwMDgwMDgwQ0QKKzowNDUyQzAwMDgwMDgwMDAwNjIKKzowQzUyQzQwMDBBMDAwMDIyMDAwMDAwMDAwMDAwMDAwMEIyCis6MTA1MkQwMDAwMDAwMDAwRDYzNzAzNTJFMzAyRTMwNkEzOTAwMDAwMDVBCis6MTA1MkUwMDAwNTAwMDAwNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTA1MkYwMDAwMDAwMDAwMDAwMDAwMDAwMzgwMDNDMDAwMDAwMDAwMDNBCis6MTA1MzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMDdECis6MTA1MzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTA1MzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTA1MzMwMDAwMDAwMDAwMDAwMDAwMDAwMjEwMDM4MDAwMDAwMDAwMTEzCis6MTA1MzQwMDAwMDAwMDAyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTA1MzUwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwRDIwCis6MTA1MzYwMDAzQzAyMDgwMDI0NDI1NDI0M0MwMzA4MDAyNDYzNTY0Q0E5Cis6MTA1MzcwMDBBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNEI5Cis6MTA1MzgwMDAzQzFEMDgwMDM3QkQ5RkZDMDNBMEYwMjEzQzEwMDgwMDI1Cis6MTA1MzkwMDAyNjEwMDA4ODNDMUMwODAwMjc5QzU0MjQwRTAwMDI4ODFDCis6MTA1M0EwMDAwMDAwMDAwMDAwMDAwMDBEMDBBMDE4MjEwMDgwMTAyMTY2Cis6MTA1M0IwMDAwMDgwMjgyMTNDMDQ2MDAwM0MwNzYwMDAyNDA2MDAwOEFGCis6MTA1M0MwMDAxMDYwMDAwNjM0ODQyMDc4OEM0MjAwMDBBQ0UyMjAwODkzCis6MTA1M0QwMDA4QzYzMDAwMDAzRTAwMDA4QUNFMzIwMEMwQTAwMEUyQUY2Cis6MTA1M0UwMDAwMDAwMDAwMDI0MDMwMDQwM0MwMjYwMDAwM0UwMDAwOENECis6MTA1M0YwMDBBQzQzMjAwMDNDMDc2MDAwOEY4NjAwMDA4Q0U1MjA3NEUxCis6MTA1NDAwMDAwMDg2MTAyMTAwQTIxODJCMTQ2MDAwMDcwMDAwMjgyMTNDCis6MTA1NDEwMDA4RjhBRkQ5ODI0MDUwMDAxQTE0NDAwMTM4Rjg5MDAwMEE0Cis6MTA1NDIwMDAwMTI0NDAyMUFGODgwMDAwMDNFMDAwMDgwMEEwMTAyMTAzCis6MTA1NDMwMDA4Rjg0RkQ5ODhGODUwMDAwOTA4NjAwMTMzMEMzMDBGRjk1Cis6MTA1NDQwMDAwMEEzMTAyM0FGODIwMDAwMDNFMDAwMDhBMDgwMDAxMzM3Cis6MTA1NDUwMDA4Rjg0RkQ5ODI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNEU4Cis6MTA1NDYwMDA5MDg5MDAxMTkwODcwMDExMjQwMjAwMjgzMTI4MDBGRjQ0Cis6MTA1NDcwMDAzOTA2MDAyODMwRTMwMEZGMjQ4NTAwMkMyQ0QwMDAwMUUxCis6MTA1NDgwMDAxMDYyMDAxNjI0ODQwMDFDMEUwMDAwMzkwMDAwMDAwMDg5Cis6MTA1NDkwMDA4RjhGRkQ5ODNDMDU2MDAwMjQwMjAyMDQ5NUVFMDAzRUNCCis6MTA1NEEwMDA5NUVEMDAzQzAwMEU1QzAwMzFBQ0ZGRkYwMTZDNTAyNTE3Cis6MTA1NEIwMDBBQ0FBMjAxMDUyMDAwMDAxMjQwMjAwMDRBQ0EyMjAwMDdCCis6MTA1NEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RkJGMDAxNDdBCis6MTA1NEQwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTgwQTAwMDA3MTFCCis6MTA1NEUwMDAwMDAwMjgyMThGODVGRDk4MjdCREZGRDhBRkJGMDAyMDgxCis6MTA1NEYwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEQyCis6MTA1NTAwMDAwMDgwOTgyMTkwQTQwMDExMjRCMDAwMUMyNEIxMDAyQzJDCis6MTA1NTEwMDAzMDgzMDBGRjM4NjIwMDI4MEUwMDAwNUIyQzUyMDAwMTJGCis6MTA1NTIwMDAwRTAwMDA2MzAwMDAwMDAwMDIwMDIwMjExMjQwMDAwMjczCis6MTA1NTMwMDAwMjIwMjgyMTAwMDAyODIxMEUwMDAwMzkwMDAwMDAwMDcwCis6MTA1NTQwMDA4RjhERkQ5ODNDMDg4MDAwM0MwNTYwMDA5NUFDMDAzRUM2Cis6MTA1NTUwMDA5NUFCMDAzQzAyNjgzMDI1MDAwQzRDMDAzMTZBRkZGRjFGCis6MTA1NTYwMDAwMTJBMzgyNUFDQTcyMDEwMjQwMjAyMDJBQ0E2MjAxNDgwCis6MTA1NTcwMDA1MjQwMDAwMTI0MDIwMDAyOEZCRjAwMjA4RkIzMDAxQ0E0Cis6MTA1NTgwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAyN0JEMDAyODEzCis6MTA1NTkwMDAwM0UwMDAwOEFDQTIyMDAwMjdCREZGRTBBRkIyMDAxODc2Cis6MTA1NUEwMDBBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUMzQzExNjAwMEUxCis6MTA1NUIwMDA4RTIzMjA3NDhGODIwMDAwMzBEMEZGRkYzMEYyRkZGRjc3Cis6MTA1NUMwMDAxMDYyMDAwQzI0MDYwMDhGMEUwMDAwMzkwMDAwMDAwMDVECis6MTA1NUQwMDAzQzA2ODAxRjAwMTA0NDAwMzRDNUZGMDAwMTEyMzgyNTJFCis6MTA1NUUwMDAyNDA0MDAwMkFFMjcyMDEwMDAwMDMwMjFBRTI1MjAxNDM0Cis6MTA1NUYwMDBBRTI0MjAwMDhGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNEEyCis6MTA1NjAwMDA4RkIwMDAxMDAwQzAxMDIxMDNFMDAwMDgyN0JEMDAyMDZCCis6MTA1NjEwMDAyN0JERkZFMEFGQjAwMDEwMzBEMEZGRkZBRkJGMDAxOEQ0Cis6MTA1NjIwMDBBRkIxMDAxNDBFMDAwMDM5MzBGMUZGRkYwMDEwMjQwMDZDCis6MTA1NjMwMDAwMDkxODAyNTNDMDM2MDAwQUM3MDIwMTA4RkJGMDAxOEUzCis6MTA1NjQwMDA4RkIxMDAxNDhGQjAwMDEwMjQwMjAwMDRBQzYyMjAwMDVGCis6MTA1NjUwMDAyN0JEMDAyMDAzRTAwMDA4MDAwMDEwMjEyN0JERkZFODVGCis6MTA1NjYwMDAzQzBCNjAxOEFGQkYwMDEwOEQ2RjUwMDAyNDE4RkY3RkY3Cis6MTA1NjcwMDAzNDBDODA3MTAxRjg3MDI0MzVDRDM4MEMyNDBBMDAzMUM3Cis6MTA1NjgwMDAzQzA5ODAwMEFENkQ1MDAwM0MwODgwMEFBRDZDNTNCQ0Y1Cis6MTA1NjkwMDBBRDJBMDAwODBFMDAwNDlCQUY4ODAwMkMwRTAwMDQ1OUIwCis6MTA1NkEwMDAwMDAwMDAwMDBFMDAwMDQ4MDAwMDAwMDAzQzA3NjAwMDAxCis6MTA1NkIwMDA4Q0U1MDgwODI0MDZGRkYwM0MwMzU3MDkwMEE2MjAyNEM3Cis6MTA1NkMwMDAzNDYyRjAwMDEwODIwMDUwMjQxOTAwMDFBRjgwMDAzNEQxCis6MTA1NkQwMDAwRTAwMEJCQzAwMDAwMDAwM0MwNjYwMTY4Q0M0MDAwMEVECis6MTA1NkUwMDAzQzA3NjAxNDhDRTUwMEEwM0MwM0ZGRkYwMDgzMTAyNEZFCis6MTA1NkYwMDAzQzFGNTM1MzAwMDUxRkMyMTA1RjAwM0QzNEM1N0MwMEEyCis6MTA1NzAwMDA5NEEyMDFGMkE3ODAwMDRDMTA0MDAwMDNBNzgwMDA1QzI3Cis6MTA1NzEwMDAzODRCMUUxRUE3OEIwMDRDOTRBMjAxRjgxMDQwMDAwNEM5Cis6MTA1NzIwMDA4RjhEMDAzNDM4NEMxRTFFQTc4QzAwNUM4RjhEMDAzNDhBCis6MTA1NzMwMDAxMUEwMDAwNDk3ODQwMDVDMjQwRTAwMjBBNzhFMDA0QzZBCis6MTA1NzQwMDA5Nzg0MDA1QzJDOEYwMDgxNTFFMDAwMDEyNDA0MDA4MENDCis6MTA1NzUwMDA5Nzg1MDA0QzJDQjgwNDAxNTMwMDAwMDEyNDA1MDQwMDc3Cis6MTA1NzYwMDAzQzAyNjAwMDhDNDMwNDM4MjQxOTEwM0MzMDdGRkZGRjVBCis6MTA1NzcwMDAxM0Y5MDAwMzMwODdGRkZGNTBFMDAwMEYyNDA2MDA1MEFDCis6MTA1NzgwMDBBMzgwMDA1RTkzODgwMDVFNTEwMDAwMTBBNzg0MDA1QzM3Cis6MTA1NzkwMDBBNzgwMDA1Qzk3ODUwMDVDOEZCRjAwMTBBNzgwMDA0QzNECis6MTA1N0EwMDBBNzgwMDA1NEE3ODAwMDcyM0MwMTA4MDBBQzI1MDA4MDRGCis6MTA1N0IwMDAwM0UwMDAwODI3QkQwMDE4QTM4NjAwNUU5Mzg4MDA1RTAyCis6MTA1N0MwMDA1NTAwRkZGNEE3ODAwMDVDQTc4NDAwNUNBNzg1MDA0QzBGCis6MTA1N0QwMDA4RkJGMDAxMDk3ODUwMDVDQTc4MDAwNTRBNzgwMDA3MkRGCis6MTA1N0UwMDAzQzAxMDgwMEFDMjUwMDgwMDNFMDAwMDgyN0JEMDAxODNDCis6MTA1N0YwMDAwMDAzNTA4MDAxNDY0ODIxOEQyODAwMDQzQzA2NjAwMENCCis6MTA1ODAwMDAwQTAwMDEwRjAxMDYyODIxMEEwMDAxMDNBRjk5MDAzNEE0Cis6MTA1ODEwMDAzMDgzRkZGRjhGODgwMDJDOEY4NzAwMjgwMDAzMjE0MEYyCis6MTA1ODIwMDAzQzA1ODAwMDNDMDIwMDUwMDA4MjQ4MjUzQzA2NjAwMDk4Cis6MTA1ODMwMDAzQzBBMDEwMDM0QUMwNDAwOENDRDA4RTAwMUFBNTgyNEQ1Cis6MTA1ODQwMDAxMTYwMDAwNTAwMDAwMDAwOENDRjA4RTAyNEU3MDAwMTkzCis6MTA1ODUwMDAwMUVBNzAyNUFDQ0UwOEUwOEQxOTAwMTAwMTgwNTgyMUI2Cis6MTA1ODYwMDBBQ0I5MDAzODhEMTgwMDE0QUNCODAwM0NBQ0E5MDAzMEJECis6MTA1ODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTA1ODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTA1ODkwMDAzQzAzODAwMDhDNjQwMDAwMzA4MjAwMjAxMDQwRkZGRDNCCis6MTA1OEEwMDAzQzBGNjAwMDhERUQwOEUwM0MwRTAxMDAwMUFFMTgyNEI1Cis6MTA1OEIwMDAxNDYwRkZFMTAwMDAwMDAwQUY4NzAwMjgwM0UwMDAwODRCCis6MTA1OEMwMDBBRjhCMDAzODhGODUwMDJDMjQwQkZGRjAzQzA2ODAwMDQ2Cis6MTA1OEQwMDA5NEE3MDAxQThDQTkwMDI0MzBFQ0ZGRkYwMDBDMzhDMEZDCis6MTA1OEUwMDAwMEVCNTAyNDAxMkE0MDIxQUNDODAwM0M4Q0E0MDAyNEM5Cis6MTA1OEYwMDA4Q0MzMDAzQzAwODMxMDIzMTg0MDAwMzMwMDAwMDAwMERDCis6MTA1OTAwMDA4Q0FEMDAyMDI1QTIwMDAxM0MwRjAwNTBBQ0MyMDAzODM1Cis6MTA1OTEwMDAzNUVFMDAxMDNDMDY4MDAwQUNDRTAwMzAwMDAwMDAwMEU4Cis6MTA1OTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTA1OTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzQzA0ODAwMEE3Cis6MTA1OTQwMDA4Qzk5MDAwMDMzMzgwMDIwMTMwMEZGRkQzMEUyMDAwODdFCis6MTA1OTUwMDAxMDQwMDAxNzNDMDk4MDAwOEM4ODA0MDhBQ0E4MDAxMDk3Cis6MTA1OTYwMDA4QzgzMDQwQ0FDQTMwMDE0M0MxOTAwMjAzQzE4ODAwMDZDCis6MTA1OTcwMDBBRjE5MDAzMDk0QUUwMDE4OTRBRjAwMUMwMUNGMzAyMTU1Cis6MTA1OTgwMDBBNEE2MDAxODk0QUQwMDFBMjVBNzAwMDFBNEE3MDAxQTI4Cis6MTA1OTkwMDA5NEFCMDAxQTk0QUMwMDFFMTE4QjAwMDMwMDAwMDAwMEIxCis6MTA1OUEwMDAwM0UwMDAwODAwMDAwMDAwMDNFMDAwMDhBNEEwMDAxQUMzCis6MTA1OUIwMDA4RDJBMDQwMEFDQUEwMDEwOEQyNDA0MDRBQ0E0MDAxNEE5Cis6MTA1OUMwMDAwQTAwMDFBQTNDMTkwMDIwOENBMjAwMjAwQTAwMDE5MkMyCis6MTA1OUQwMDAzQzBGMDA1MDBBMDAwMTgwMDAwMDAwMDAyN0JERkZFOEQ2Cis6MTA1OUUwMDBBRkJGMDAxMDBFMDAwMUM0MDAwMDAwMDA4Rjg5MDAyQzIyCis6MTA1OUYwMDA4RkJGMDAxMDNDMDM4MDAwQTUyMDAwMEE5NTI4MDAwQUY0Cis6MTA1QTAwMDA5NTI3MDAwNDI3QkQwMDE4MzEwNUZGRkYzMEU2MDAwRjgxCis6MTA1QTEwMDAwMDA2MTUwMDAwQTIyMDI1MDNFMDAwMDhBQzY0MDA4MDA5Cis6MTA1QTIwMDAzQzA1MDgwMDhDQTUwMDIwOEY4MzAwMDQyN0JERkZFOEZCCis6MTA1QTMwMDBBRkIwMDAxMEFGQkYwMDE0MTBBMzAwMTAwMDAwODAyMTExCis6MTA1QTQwMDAyNDA0MDAwMTAyMDQzMDA0MDBBNjIwMjQwMEMzMTAyNDEyCis6MTA1QTUwMDA1MDQ0MDAwNjI2MTAwMDAxMDAxMDE4ODAyNzg3RkQ5Qzg2Cis6MTA1QTYwMDAxNDgwMDAwQTAwNjcxODIxMjYxMDAwMDEyRTA5MDAwMjg4Cis6MTA1QTcwMDA1NTIwRkZGMzhGODMwMDA0QUY4NTAwMDQ4RkJGMDAxNDBGCis6MTA1QTgwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTg4QzY4MDAwMEVDCis6MTA1QTkwMDAzQzA1ODAwMEFDQTgwMDI0MEUwMDAxQzYyNjEwMDAwMUMxCis6MTA1QUEwMDAzQzA1MDgwMDhDQTUwMDIwMEEwMDAxRUIyRTA5MDAwMjJECis6MTA1QUIwMDAyNDA1MDAwMTAwODUxODA0M0MwNDA4MDA4Qzg0MDAyMEEzCis6MTA1QUMwMDAyN0JERkZDOEFGQkYwMDM0MDA4MzEwMjRBRkJFMDAzMDM1Cis6MTA1QUQwMDBBRkI3MDAyQ0FGQjYwMDI4QUZCNTAwMjRBRkI0MDAyMDlDCis6MTA1QUUwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTQxMDQwMDA1MUFBCis6MTA1QUYwMDBBRkIwMDAxMDhGODQwMDJDOTQ4NzAwMDY5NDg4MDAwQUIxCis6MTA1QjAwMDAwMEU4MzAyMzMwRDVGRkZGMTJBMDAwNEI4RkJGMDAzNEQ4Cis6MTA1QjEwMDA5NDhCMDAxODk0OEMwMDBBMDE2QzUwMjMzMTQyRkZGRkQzCis6MTA1QjIwMDAwMkEyNDgyQjE1MjAwMDAyMDJBMDIwMjEwMDQwMjAyMUMzCis6MTA1QjMwMDAyQzhGMDAwNTE1RTAwMDAyMDA4MDk4MjEyNDEzMDAwNDNBCis6MTA1QjQwMDAwRTAwMDE1MzAyNjAyMDIxOEY4NzAwMkMwMjYwOTAyMUZCCis6MTA1QjUwMDBBRjgwMDAzMDk0RjQwMDBBMDI2MDgwMjExMjYwMDA0RTkxCis6MTA1QjYwMDAzMjkxRkZGRjNDMTY3MDAwM0MxNDQwMDAzQzFFMjAwMEE4Cis6MTA1QjcwMDAzQzE3NjAwMDhGOTkwMDM4OEYzODAwMDAwMzE2MTgyNEY2Cis6MTA1QjgwMDAxMDc0MDA0RjAyODNGODJCMTdFMDAwMzYwMDAwMDAwMDZECis6MTA1QjkwMDAxMDdFMDA0NzhGODYwMDMwMTRDMDAwM0EyNDAzMDAwMUI1Cis6MTA1QkEwMDAwMjAzMTAyMzAyMjMyMDIxMzA1MEZGRkYxNjAwRkZGMUQzCis6MTA1QkIwMDAzMDkxRkZGRjhGODcwMDJDM0MxMTAwMjAzQzEwODAwMEFCCis6MTA1QkMwMDBBRTExMDAzMDk0RUIwMDBBM0MxNzgwMDAwMjRCNTAyMUNDCis6MTA1QkQwMDBBNEVBMDAwQTk0RTkwMDBBOTRFODAwMDQzMTIzRkZGRkQ0Cis6MTA1QkUwMDAzMTA2MDAwRjAwMDYyRDAwMDA2NUYwMjVBRUZFMDA4MDk2Cis6MTA1QkYwMDA5NEYzMDAwQTk0RjYwMDE4MTJEMzAwMzYwMDEyMjE0MEU0Cis6MTA1QzAwMDA4Q0ZGMDAxNDhDRjQwMDEwMDNFNDY4MjEwMDAwQzAyMTE0Cis6MTA1QzEwMDAwMUE0NzgyQjAyOTg3MDIxMDFDRjYwMjFBQ0VEMDAxNDEzCis6MTA1QzIwMDBBQ0VDMDAxMDAyQjIzODIzMzBGNUZGRkYxNkEwRkZCODJECis6MTA1QzMwMDA4Rjg0MDAyQzhGQkYwMDM0OEZCRTAwMzA4RkI3MDAyQ0I0Cis6MTA1QzQwMDA4RkI2MDAyODhGQjUwMDI0OEZCNDAwMjA4RkIzMDAxQ0JFCis6MTA1QzUwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODVECis6MTA1QzYwMDAyN0JEMDAzODE0NzdGRkNDOEY4NjAwMzAwRTAwMEQ4QkQ3Cis6MTA1QzcwMDAwMjAwMjAyMTAwNDAxODIxOEY4NjAwMzAxMEMwRkZDOThCCis6MTA1QzgwMDAwMjAzMTAyMzAyNzA3MDIzOEY4NzAwMkMwMUMzNjgyMTQ4Cis6MTA1QzkwMDAwQTAwMDI3NjMxQjJGRkZGOEY4NjAwMzAxNEMwRkZDOUMwCis6MTA1Q0EwMDAzQzExMDAyMDNDMTA4MDAwMEEwMDAyNDBBRTExMDAzMDgwCis6MTA1Q0IwMDAwRTAwMDNDNDAyMDAyMDIxMEEwMDAyNkQwMDQwMTgyMURBCis6MTA1Q0MwMDAwMjAwMjAyMTBFMDAwN0RCMDIyMDI4MjEwQTAwMDI2REJECis6MTA1Q0QwMDAwMDQwMTgyMTBFMDAwMTgwMDAwMDAwMDAwQTAwMDI1OTU3Cis6MTA1Q0UwMDAwMkIyMzgyMzI3QkRGRkQ4QUZCNDAwMjBBRkIzMDAxQ0U5Cis6MTA1Q0YwMDBBRkIyMDAxOEFGQjEwMDE0QUZCMDAwMTBBRkJGMDAyNEI2Cis6MTA1RDAwMDAwRTAwMDBFNjI0MTMwMDAxM0MwMjgwMDgzQzAzMjAwMDQyCis6MTA1RDEwMDAzQzAxMDgwMEFDMjAwMDcwMzQ1NDAwODAzNDcyMDAwMzUxCis6MTA1RDIwMDAzQzEwODAwMDI0MTFGRjgwMEUwMDAxRDcwMDAwMDAwMDBECis6MTA1RDMwMDA4RTA2MDAwMDM4QzUwMDAxMzBBNDAwMDExNDgwRkZGQTZGCis6MTA1RDQwMDAwMDAwMDAwMDhFMDcwMTAwMjQwMzBDMDAxMEUzMDAwOThFCis6MTA1RDUwMDAzQzA1ODAwMDhFMDkwMTAwMkQyODMwODA1NTAwMDAxMDgwCis6MTA1RDYwMDAzQzA0ODAwMDhFMEIwMTAwMkQ2QTMxODExMTQwMDAwQzMzCis6MTA1RDcwMDAzQzA0ODAwMDhDQUMwMTAwMTE4MzAwMDQwMDAwMjAyMTUxCis6MTA1RDgwMDA4Q0FFMDEwMDI1Q0RGRjgxMzFBNDAwRkY4RTBGMDEwMEY0Cis6MTA1RDkwMDAwRTAwMDFGQkFFMEYwMDI0MEEwMDAyQzEzQzA0ODAwMDhCCis6MTA1REEwMDA4QzlGMDEwMDI0MTgwMDIwQUM5RjAwMjA5Mjk5MDAwMEQ1Cis6MTA1REIwMDAzMzIzMDBGRjEwNzgwMDFGMjQwMjAwNTAxMDYyMDAyMkRECis6MTA1REMwMDAwMDAwMDAwMDNDMDQ4MDAwOEM4MzAxMDAxNDYwMDAwMzhDCis6MTA1REQwMDAwMDAwMDAwMDU2NjAwMDE0M0MwNDQwMDA4QzgyMDEwMDZBCis6MTA1REUwMDA4Qzk5MDEwMDAwMDA5ODIxMDA1MUY4MjQwMDFGNzk0MDhGCis6MTA1REYwMDAzMzM4MDA3RjAxRjg3MDI1MDFEMjY4MjVBQzhEMDgzMDVBCis6MTA1RTAwMDA4QzhDMDEwMDhDODkwMTAwMjU4QjAxMDAwMTcxNTAyNENDCis6MTA1RTEwMDAwMDBBMzk0MDMxMjgwMDdGMDBFODMwMjUwMEQyMjgyNUNCCis6MTA1RTIwMDBBQzg1MDgzMDNDMDQ0MDAwQUUwNDAxMzgwQTAwMDI5OUY5Cis6MTA1RTMwMDAwMDAwMDAwMDhDODUwMTAwMEUwMDA3OEQyNDA0MDA4MDA2Cis6MTA1RTQwMDAwQTAwMDJDMTNDMDQ4MDAwOEM4NDAxMDAwRTAwMTNFQUE5Cis6MTA1RTUwMDAwMDAwMDAwMDBBMDAwMkMxM0MwNDgwMDAwMEE0MTAyQkQ2Cis6MTA1RTYwMDAyNDAzMDAwMTEwNDAwMDA5MDAwMDMwMjEwMDA1Mjg0MEYzCis6MTA1RTcwMDAwMEE0MTAyQjA0QTAwMDAzMDAwMzE4NDA1NDQwRkZGQ0IyCis6MTA1RTgwMDAwMDA1Mjg0MDUwNjAwMDBBMDAwNDE4MkIwMDg1MzgyQkJDCis6MTA1RTkwMDA1NEUwMDAwNDAwMDMxODQyMDBDMzMwMjUwMDg1MjAyMzhECis6MTA1RUEwMDAwMDAzMTg0MjE0NjBGRkY5MDAwNTI4NDIwMDA0MTgyQjczCis6MTA1RUIwMDAwM0UwMDAwODAwQzMxMDIxMzA4NEZGRkYzMEM2MDBGRjVDCis6MTA1RUMwMDAzQzA3ODAwMDhDRTIwMUI4MDQ0MEZGRkUwMDA2NEMwMDU1Cis6MTA1RUQwMDAwMTI0MzAyNTNDMDgyMDAwMDBDODIwMjUzQzAzMTAwMDg4Cis6MTA1RUUwMDBBQ0UwMDE4MEFDRTUwMTg0QUNFNDAxODgwM0UwMDAwODhCCis6MTA1RUYwMDBBQ0UzMDFCODNDMDY2MDAwOENDNTIwMUMyNDAyRkZGMDE2Cis6MTA1RjAwMDAzMDgzMDIwMDMwODYwMTAwMTA2MDAwMEUwMEEyMjgyNEI5Cis6MTA1RjEwMDAzNEE1MDAwMTMwODczMDAwMTBFMDAwMDUzMDgzMEMwMDBDCis6MTA1RjIwMDAzNEE1MDAwNDNDMDQ2MDAwMDNFMDAwMDhBQzg1MjAxQzlDCis6MTA1RjMwMDAxMDYwRkZGRDNDMDQ2MDAwMzRBNTAwMDgwM0UwMDAwODg5Cis6MTA1RjQwMDBBQzg1MjAxQzU0QzBGRkYzMzRBNTAwMDIwQTAwMDMxNUUxCis6MTA1RjUwMDAzMDg3MzAwMDI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNDlFCis6MTA1RjYwMDAzQzA3NjAwMDI0MDYwMDAyMTA4MDAwMTEwMEEwODAyMTgwCis6MTA1RjcwMDA4RjgzMDAzODBFMDAwMzBDOEM2NDAwMTg4RjgyMDAzODY5Cis6MTA1RjgwMDAwMDAwMjAyMTI0MDYwMDAxOEM0NTAwMEMwRTAwMDJGREJCCis6MTA1RjkwMDAwMDAwMDAwMDE2MDAwMDAyMjQwMjAwMDMwMDAwMTAyMThGCis6MTA1RkEwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODU5Cis6MTA1RkIwMDA4Q0U4MjAxQzI0MDlGRkYwMDEwOTI4MjRBQ0U1MjAxQ0YyCis6MTA1RkMwMDA4Rjg3MDAzODBBMDAwMzMyOENFNTAwMEMzQzAyNjAwRTFCCis6MTA1RkQwMDAwMDgwNDAyMTM0NDYwMTAwMjQwOTAwMTgwMDAwMDAwMDIwCis6MTA1RkUwMDAwMDAwMDAwMDAwMDAwMDAwM0MwQTAwNTAzQzAzODAwMDVDCis6MTA1RkYwMDAzNTQ3MDIwMEFDNjgwMDM4MzQ2NDA0MDBBQzY1MDAzQ0VFCis6MTA2MDAwMDBBQzY3MDAzMDhDNkMwMDAwMzE4QjAwMjAxMTYwRkZGRDBDCis6MTA2MDEwMDAyNDA3RkZGRjI0MDMwMDdGOEM4RDAwMDAyNDYzRkZGRjEzCis6MTA2MDIwMDAyNDg0MDAwNEFDQ0QwMDAwMTQ2N0ZGRkIyNEM2MDAwNEU4Cis6MTA2MDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNEE0MDIwMDk2Cis6MTA2MDQwMDAwMDg1MjgyQjNDMDMwMDIwM0MwRTgwMDAyNTI5RkZGRjAzCis6MTA2MDUwMDAwMTA1NDAyMUFEQzMwMDMwMTUyMEZGRTAwMDgwMjgyMTVDCis6MTA2MDYwMDAwM0UwMDAwODAwMDAwMDAwOEY4MjAwMzgyN0JERkZEODQxCis6MTA2MDcwMDBBRkIzMDAxQ0FGQkYwMDIwQUZCMjAwMThBRkIxMDAxNDI3Cis6MTA2MDgwMDBBRkIwMDAxMDk0NDYwMDAyMDA4MDk4MjE4QzUyMDAxODk2Cis6MTA2MDkwMDAyQ0MzMDA4MThDNDgwMDA0OEM0NzAwMDg4QzUxMDAwQ0Y0Cis6MTA2MEEwMDA4QzQ5MDAxMDEwNjAwMDA3OEM0QTAwMTQyQ0M0MDAwNEI2Cis6MTA2MEIwMDAxNDgwMDAxMzMwRUIwMDA3MzBDNTAwMDMxMEEwMDAxMDVGCis6MTA2MEMwMDAwMDAwMDAwMDI0MTAwMDhCMDIwMDIwMjEwMjIwMjgyMTYzCis6MTA2MEQwMDAwRTAwMDJGRDI0MDYwMDAzMTY2MDAwMDIyNDAyMDAwM0U1Cis6MTA2MEUwMDAwMDAwMTAyMThGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODVBCis6MTA2MEYwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyODA2Cis6MTA2MTAwMDAxNTYwRkZGMTI0MTAwMDhCM0MwQzgwMDAzQzAzMDAyMDQ0Cis6MTA2MTEwMDAyNDFGMDAwMUFEODMwMDMwQUY5RjAwMzAwMDAwMDAwMDVECis6MTA2MTIwMDAwMDAwMDAwMDAwMDAwMDAwMjQxOUZGRjAyNEQ4MDAwRjM4Cis6MTA2MTMwMDAwMzE5NzgyNDNDMTAwMEQwQUQ4ODAwMzgwMUYwNzAyNTk4Cis6MTA2MTQwMDAyNENEMDAwMzNDMDg2MDBFQUQ4NzAwM0MzNTg1MDQwMDdCCis6MTA2MTUwMDBBRDhFMDAzMDAwMEQzODgyMzUwNDAwM0MzQzAzODAwMEQ5Cis6MTA2MTYwMDA4QzZCMDAwMDMxNjIwMDIwMTA0MEZGRkQwMDAwMDAwMDM5Cis6MTA2MTcwMDAxMEUwMDAwODI0RTNGRkZGMjQwN0ZGRkY4Q0E4MDAwMEM1Cis6MTA2MTgwMDAyNDYzRkZGRjI0QTUwMDA0QUM4ODAwMDAxNDY3RkZGQjE0Cis6MTA2MTkwMDAyNDg0MDAwNDNDMDQ2MDBFQUM4NjAwMzgwMDAwMDAwMDNCCis6MTA2MUEwMDAwMDAwMDAwMDAwMDAwMDAwM0MwNzAwMjAzQzA2ODAwMENBCis6MTA2MUIwMDAwMTIwMjAyMTAxNDAyODIxQUNDNzAwMzAwRTAwMDM0MkZECis6MTA2MUMwMDAwMDAwODAyMTBFMDAwMzBDMDI0MDIwMjEwQTAwMDM4MkZGCis6MTA2MUQwMDAwMjAwMjAyMTI3QkRGRkUwQUZCMjAwMTgzMDkyRkZGRjgwCis6MTA2MUUwMDBBRkIxMDAxNEFGQkYwMDFDQUZCMDAwMTAxNjQwMDAwRERGCis6MTA2MUYwMDAwMDAwODgyMTBBMDAwM0YxMDIyMDEwMjEyNDA1MDAwMzc5Cis6MTA2MjAwMDA1MDg1MDAyNzhDRTUwMDBDMDAwMDAwMEQyNjJDMDAwMUI1Cis6MTA2MjEwMDAzMTkxRkZGRjI0RUIwMDIwMDIzMjUwMkIxMTQwMDAxOTc2Cis6MTA2MjIwMDBBRjhCMDAzODhGODIwMDMwMTQ0MDAwMTY4Rjg3MDAzODAzCis6MTA2MjMwMDAzQzA2NzAwMDNDMDMyMDAwOENFNTAwMDAwMEE2MjAyNEYyCis6MTA2MjQwMDAxNDgzMDAxMDhGODQwMDQwMDAwNTQ0MDIzQzA5ODAwMDQ0Cis6MTA2MjUwMDAwMEE5ODAyNDE0ODBGRkU5MzEwNjAwRkYyQ0NBMDAwQjNFCis6MTA2MjYwMDAxMTQwRkZFQjI2MkMwMDAxMDAwNjY4ODAzQzBFMDgwMDYwCis6MTA2MjcwMDAyNUNFNTFDODAxQUU2MDIxOEQ4QjAwMDAwMTYwMDAwODYxCis6MTA2MjgwMDAwMDAwMDAwMDAyMjAxMDIxOEZCRjAwMUM4RkIyMDAxOEY4Cis6MTA2MjkwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDZDCis6MTA2MkEwMDAwRTAwMDJGRDI0MDQwMDg0MTYwMEZGRDg4Rjg3MDAzOEZBCis6MTA2MkIwMDAwQTAwMDNEMkFGODAwMDQwMDIwMDI4MjEwRTAwMDMyNDEwCis6MTA2MkMwMDAyNDA0MDAwMThGODcwMDM4MEEwMDAzRDJBRjgyMDA0MDA3Cis6MTA2MkQwMDAwMjAwMjgyMTBFMDAwMzI0MDAwMDIwMjEwQTAwMDQwMUVFCis6MTA2MkUwMDA4Rjg3MDAzODBFMDAwMzY5MDIwMDIwMjE4Rjg3MDAzODU1Cis6MTA2MkYwMDAwQTAwMDNEMkFGODIwMDQwMzBBRkZGRkYwMDBGMTlDMDg5Cis6MTA2MzAwMDAzQzA0ODAwMDhDOTAwMUI4MDYwMEZGRkUzQzE5MjAwNDdDCis6MTA2MzEwMDAzQzE4MTAwMEFDODMwMTgwQUM4MDAxODRBQzk5MDE4OEVBCis6MTA2MzIwMDBBQzk4MDFCODBBMDAwM0QzMjYyQzAwMDE5MEUyMDAwMkM5Cis6MTA2MzMwMDA5MEZGMDAwMzAwMDAyMDIxMDAwMjNBMDAwMEZGMjgyNTAyCis6MTA2MzQwMDAyNDA2MDAwODBFMDAwMkZEMDAwMDAwMDAxNjAwRkZERDFDCis6MTA2MzUwMDAyNDAyMDAwMzhGODcwMDM4MDAwMDEwMjEwQTAwMDNEMkI2Cis6MTA2MzYwMDBBRjgyMDA0MDkwRTUwMDAyMDAwMDIwMjEwQTAwMDQyMEQ2Cis6MTA2MzcwMDAyNDA2MDAwOTk0RTUwMDA0OTBFOTAwMDM5MEUzMDAwMjdDCis6MTA2MzgwMDAwMDA1MzQwMDAwMDk0MjAwMDBDODIwMjUwMDgzMjgyNUFDCis6MTA2MzkwMDAyNDA2MDAwQTBBMDAwNDIwMDAwMDIwMjE5MEU1MDAwMkUzCis6MTA2M0EwMDAwMDAwMjAyMTBBMDAwNDIwMjQwNjAwMEIwMDA0NDlDMjNBCis6MTA2M0IwMDAzMTI3MDAzRjAwMDQ0MzQyM0MwMjgwMDAwMDA4MjA0MDk3Cis6MTA2M0MwMDAyNDAzMTY4MDJDRTYwMDIwQUM0MzAwMkMyNEVBRkZFMEQ2Cis6MTA2M0QwMDAyNDgyMDAwMTE0QzAwMDAzMzBBOTAwRkYwMDgwMTAyMUI2Cis6MTA2M0UwMDAzMTQ3MDBGRjAwMDI2MDgwM0MwRDgwMDAyNDBBMDAwMTVDCis6MTA2M0YwMDAwMThEMjAyMTNDMEIwMDBFMDBFQTI4MDQwMDhCMzAyMTg3Cis6MTA2NDAwMDAxMTIwMDAwNTAwMDUzODI3OENDRTAwMDAwMUM1MzgyNTc1Cis6MTA2NDEwMDAwM0UwMDAwOEFDQzcwMDAwOENEODAwMDAwMzA3NzgyNDE0Cis6MTA2NDIwMDAwM0UwMDAwOEFDQ0YwMDAwMjdCREZGRTBBRkIxMDAxNENGCis6MTA2NDMwMDBBRkIwMDAxMEFGQkYwMDE4M0MwNzYwMDA4Q0U0MDgwODQ0Cis6MTA2NDQwMDAzNDAyRjAwMDNDMTE2MDAwMzA4M0YwMDAyNDA1MDFDMEVDCis6MTA2NDUwMDAzQzA0ODAwRTAwMDAzMDIxMTA2MjAwMDYyNDEwMDAwMTcwCis6MTA2NDYwMDA4Q0VBMDgwODMxNDlGMDAwMzkyOEUwMDAwMDA4MzgyQjkwCis6MTA2NDcwMDAwMDA3ODA0MDNDMEQwMjAwQUUyRDA4MTQyNDBDMTY4MDRECis6MTA2NDgwMDAzQzBCODAwMDhFMjc0NDAwMEUwMDBFMzRBRDZDMDAyQ0I3Cis6MTA2NDkwMDAxMjAwMDAwNDNDMDIxNjkxMjQwNTAwMDExMjA1MDAxMEIwCis6MTA2NEEwMDAzQzAyM0Q2QzM0NTgwMEUwQUUzODQ0MDgzQzExMDgwMDEyCis6MTA2NEIwMDA4RTMxMDA3QzhGQkYwMDE4M0MwNjYwMDAwMDExODU0MEMzCis6MTA2NEMwMDAzNjBGMTY4MDhGQjEwMDE0OEZCMDAwMTAzQzBFMDIwMDAyCis6MTA2NEQwMDAyN0JEMDAyMEFDQ0Y0NDIwMDNFMDAwMDhBQ0NFMDgxMDVDCis6MTA2NEUwMDAzQzAyMThEQTM0NTgwMEUwQUUzODQ0MDgzQzExMDgwMDg5Cis6MTA2NEYwMDA4RTMxMDA3QzhGQkYwMDE4M0MwNjYwMDAwMDExODU0MDgzCis6MTA2NTAwMDAzNjBGMTY4MDhGQjEwMDE0OEZCMDAwMTAzQzBFMDIwMEMxCis6MTA2NTEwMDAyN0JEMDAyMEFDQ0Y0NDIwMDNFMDAwMDhBQ0NFMDgxMDFCCis6MTA2NTIwMDAwQTAwMDQzQTI0MDUwMDAxMEEwMDA0M0EwMDAwMjgyMTY4Cis6MTA2NTMwMDAyNDAyMDQwMEE3ODIwMDEwQTc4MDAwMDgwMDAwMjAyMTg4Cis6MTA2NTQwMDAzQzA2MDgwMDI0QzY1NEIwMjQwNUZGRkYyNDg5MDAwMTNFCis6MTA2NTUwMDAwMDA0NDA4MDMxMjRGRkZGMDEwNjE4MjEyQzg3MDAyMDExCis6MTA2NTYwMDAxNEUwRkZGQUFDNjUwMDAwMjQwNDA0MDBBNzg0MDAxMkM0Cis6MTA2NTcwMDBBNzgwMDAwQTAwMDAyMDIxM0MwNjA4MDAyNEM2NTUzMEYwCis6MTA2NTgwMDAyNDA1RkZGRjI0OEQwMDAxMDAwNDYwODAzMUE0RkZGRjdCCis6MTA2NTkwMDAwMTg2NTgyMTJDOEEwMDIwMTU0MEZGRkFBRDY1MDAwMEM1Cis6MTA2NUEwMDBBNzgwMDAxNEE3ODAwMDBDQTc4MDAwMEUwMDAwMjAyMTA3Cis6MTA2NUIwMDAzQzA2MDgwMDI0QzY1NUIwMjQwNUZGRkYyNDk5MDAwMUJECis6MTA2NUMwMDAwMDA0QzA4MDMzMjRGRkZGMDMwNjc4MjEyQzhFMDAwNEQyCis6MTA2NUQwMDAxNUMwRkZGQUFERTUwMDAwM0MwNTYwMDA4Q0E3M0QwMDRBCis6MTA2NUUwMDAyNDAzRTA4RjAwRTMxMDI0MzQ0NjAxNDAwM0UwMDAwODU4Cis6MTA2NUYwMDBBQ0E2M0QwMDI0ODcwMDdGMDAwNzMxQzIyNEM1RkZGRjAxCis6MTA2NjAwMDAwMDA1MThDMjI0NjQwMDAxMzA4MkZGRkYwMDAyMzhDMDc4Cis6MTA2NjEwMDBBNzg0MDAxQzNDMDEwODAwQUMyNzAwMzBBRjgwMDAxOEE0Cis6MTA2NjIwMDAwMDAwMjgyMTAwMDAyMDIxMDAwMDMwMjEyNDg5MDAwMUUxCis6MTA2NjMwMDAwMEE3MjgyMTMxMjRGRkZGMkNBODE3MDExMTAwMDAwMzE3Cis6MTA2NjQwMDAyQzgzMDA4MDE0NjBGRkY5MjRDNjAwMDEwMEMwMjgyMUJCCis6MTA2NjUwMDBBRjg2MDAxODEwQzAwMDFEQTc4NjAwMTYyNENBRkZGRkQxCis6MTA2NjYwMDAwMDBBMTE0MjNDMDgwODAwMjUwODU1QjAxMDQwMDAwQUY1Cis6MTA2NjcwMDAwMDAwMjAyMTAwNDAzMDIxMjQwN0ZGRkYyNDhFMDAwMTZDCis6MTA2NjgwMDAwMDA0Njg4MDMxQzRGRkZGMDFBODYwMjEwMDg2NTgyQkY4Cis6MTA2NjkwMDAxNTYwRkZGQUFEODcwMDAwMzBBMjAwMUY1MDQwMDAwOENGCis6MTA2NkEwMDAwMDA0MzA4MDI0MDMwMDAxMDA0M0M4MDQwMDA0MTA4MDZCCis6MTA2NkIwMDAwMDQ4NzgyMTI3MzhGRkZGMDNFMDAwMDhBREY4MDAwMDBDCis6MTA2NkMwMDAwMEM4MjAyMTI0MDVGRkZGQUM4NTAwMDAwM0UwMDAwODdFCis6MTA2NkQwMDAwMDAwMDAwMDMwQTVGRkZGMzBDNkZGRkYzMEE4MDAxRkZDCis6MTA2NkUwMDAwMDgwNjAyMTMwRTcwMEZGMDAwNTI5NDIwMDAwNTAyMUIyCis6MTA2NkYwMDAxMEMwMDAxRDI0MDkwMDAxMjQwQjAwMDEyNTE4MDAwMTExCis6MTA2NzAwMDAwMTBCMjAwNDMzMDgwMEZGMDEyNjc4MjYzOTBFMDAyMEYzCis6MTA2NzEwMDAyREVEMDAwMTJEQzIwMDAxMDFBMjE4MjUxMDYwMDAwRDExCis6MTA2NzIwMDAwMTQ0NTAyNTAwMDVDODgwMDMyQzQwMjEwMTAwMTgyMTk4Cis6MTA2NzMwMDAxMEUwMDAwRjAwMEEyMDI3OEQwNDAwMDAwMDhBMTgyNUIxCis6MTA2NzQwMDBBRDAzMDAwMDI0QUQwMDAxMDAwMDQwMjEwMDAwNTAyMUY1Cis6MTA2NzUwMDAzMUE1RkZGRjI1MkUwMDAxMzFDOUZGRkYwMEM5MTAyQjE1Cis6MTA2NzYwMDAxMDQwRkZFNzI1MTgwMDAxMDNFMDAwMDgwMDAwMDAwMENBCis6MTA2NzcwMDA4RDBBMDAwMDAxNDQ0MDI0MEEwMDA1MjBBQzY4MDAwMDk2Cis6MTA2NzgwMDAyN0JERkZFODMwQTVGRkZGMzBDNkZGRkZBRkIwMDAxMDA4Cis6MTA2NzkwMDBBRkJGMDAxNDMwRTdGRkZGMDAwMDUwMjEzNDEwRkZGRkFGCis6MTA2N0EwMDAwMDAwNjAyMTI0QUYwMDFGMDBDMDQ4MjEyNDE4MDAwMTEwCis6MTA2N0IwMDAyNDE5MDAyMDA1RTAwMDE2MDFFMDEwMjEwMDAyRjk0MzMxCis6MTA2N0MwMDAwMTlGNjgyQTAwMDk3MDJCMDFBRTQwMjQxMTAwMDAxN0I4Cis6MTA2N0QwMDAwMDBDMTg4MDAwNjQxMDIxMTBFMDAwMDU4QzRCMDAwMEI0Cis6MTA2N0UwMDAwMEY4NDAwNDAwMDgzODIzMDE2NzU4MjQwMDAwMzgyMUNECis6MTA2N0YwMDAxNTQwMDA0MTAwMDA0MDIxNTU2MDAwMTYzMTY5RkZGRjNGCis6MTA2ODAwMDAyNThCMDAwMTMxNkNGRkZGMDVFMUZGRUMwMUUwMTAyMTU5Cis6MTA2ODEwMDAyNEEyMDAzRTAwMDJGOTQzMDE5RjY4MkEwMDA5NzAyQjYwCis6MTA2ODIwMDAwMUFFNDAyNDE1MDBGRkVCMDAwQzE4ODAxNTQ2MDAwNTUyCis6MTA2ODMwMDAzNDAyRkZGRjAyMDAyODIxMEUwMDA1MDQwMDAwMzgyMTY5Cis6MTA2ODQwMDAwMjAwMTAyMThGQkYwMDE0OEZCMDAwMTAwM0UwMDAwODc5Cis6MTA2ODUwMDAyN0JEMDAxODE1MjAwMDAzMDE2MDE4MjEwMDBCMUMwMjQxCis6MTA2ODYwMDAyNDA4MDAxMDMwNkEwMEZGMTU0MDAwMDUzMDZFMDAwRjRDCis6MTA2ODcwMDAyNTBEMDAwODAwMDMxQTAyMzFBODAwRkYzMDZFMDAwRjNBCis6MTA2ODgwMDAxNUMwMDAwNTMwN0YwMDAzMjUxMDAwMDQwMDAzMTkwMjI1Cis6MTA2ODkwMDAzMjA4MDBGRjMwN0YwMDAzMTdFMDAwMDUzODY5MDAwMTZGCis6MTA2OEEwMDAyNTAyMDAwMjAwMDMxODgyMzA0ODAwRkYzODY5MDAwMTA5Cis6MTA2OEIwMDAzMTIzMDAwMTEwNjAwMDA0MzEwMzAwRkYyNTBBMDAwMUFDCis6MTA2OEMwMDAzMTQ4MDBGRjMxMDMwMEZGMDAwQzY5NDAwMUEzNDAyMTYzCis6MTA2OEQwMDAyNDBBMDAwMTEwQ0FGRkQ1MzExMEZGRkYyNDZFMDAwMTA5Cis6MTA2OEUwMDAzMUM4MDBGRjExMTlGRkM2MzhDOTAwMDEyRDFGMDAyMDUzCis6MTA2OEYwMDA1M0UwMDAxQzI1OEIwMDAxMjQwRDAwMDEwQTAwMDU5N0MwCis6MTA2OTAwMDAyNDBFMDAyMDUxNDYwMDE3MjU4QjAwMDEyNTA5MDAwMUE3Cis6MTA2OTEwMDAzMTI4MDBGRjJEMDkwMDIwNTEyMDAwMTIyNThCMDAwMTk1Cis6MTA2OTIwMDAyNTQzMDAwMTAxMEQ1MDA0MDE0QjEwMjQyNTA5MDAwMUVECis6MTA2OTMwMDAxNDQwRkZGNDMwNkFGRkZGMzEyN0ZGRkYxMEVFMDAwQzE4Cis6MTA2OTQwMDAyNTgyRkZGRjMwNENGRkZGMDAwMDUwMjEzNDEwRkZGRjc1Cis6MTA2OTUwMDAzMTI4MDBGRjJEMDkwMDIwNTUyMEZGRjIyNTQzMDAwMUJBCis6MTA2OTYwMDAyNThCMDAwMTAxNDY0ODI2MEEwMDA1NTEzMTZDRkZGRkM2Cis6MTA2OTcwMDAwMDAwMzgyMTAwMDA1MDIxMEEwMDA1QTMzNDEwRkZGRjU5Cis6MTA2OTgwMDAyN0JERkZEOEFGQjAwMDEwMzBGMEZGRkZBRkIxMDAxNDRCCis6MTA2OTkwMDAwMDEwMzk0MjMyMTFGRkUwMDAwNzEwODBBRkIzMDAxQzM1Cis6MTA2OUEwMDAwMEIxMjgyMzMwRDNGRkZGQUZCMjAwMTgzMEE1RkZGRjlFCis6MTA2OUIwMDAwMDgwOTAyMTAyNjAzMDIxMDA0NDIwMjFBRkJGMDAyMEUwCis6MTA2OUMwMDAwRTAwMDUyRjMyMDcwMDFGMDIyMjg4MjEzNDAzRkZGRjJCCis6MTA2OUQwMDAwMjQwMjAyMTAyMDAyODIxMDI2MDMwMjEwMDAwMzgyMURECis6MTA2OUUwMDAxMDQzMDAwOTMyMzFGRkZGMDIyMDEwMjE4RkJGMDAyMDI5Cis6MTA2OUYwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDNECis6MTA2QTAwMDAwM0UwMDAwODI3QkQwMDI4MEUwMDA1MkYwMDAwMDAwMDRECis6MTA2QTEwMDAwMDQwODgyMTAyMjAxMDIxOEZCRjAwMjA4RkIzMDAxQzZFCis6MTA2QTIwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODdGCis6MTA2QTMwMDAyN0JEMDAyODAwMDQyNDAwM0MwMzYwMDBBQzYwM0QwODMyCis6MTA2QTQwMDAxMEEwMDAwMjM0ODIxMDA2MzQ4MjEwMTYwM0UwMDAwODAxCis6MTA2QTUwMDBBQzYyM0QwNDI3QkRGRkUwQUZCMDAwMTAzMDkwMDBGRkY2Cis6MTA2QTYwMDAyRTAyMDAwNkFGQkYwMDE4MTA0MDAwMDhBRkIxMDAxNDlFCis6MTA2QTcwMDAwMDEwMzA4MDNDMDMwODAwMjQ2MzUxRjQwMEMzMjgyMTM3Cis6MTA2QTgwMDA4Q0E0MDAwMDAwODAwMDA4MDAwMDAwMDAwMDAwMjAyMTBECis6MTA2QTkwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMTNDCis6MTA2QUEwMDAwM0UwMDAwODI3QkQwMDIwOTc5MTAwMTYxNjIwMDA1MTMyCis6MTA2QUIwMDAwMDAwMjAyMTNDMDIwODAwOTA0MjAwMzMwQTAwMDYwQTMwCis6MTA2QUMwMDAwMDAwMDAwMDk3OEQwMDEyMTVBMDAwMzEwMDAwMjAyMTY5Cis6MTA2QUQwMDAwQTAwMDYwQTI0MDIwMDA4OTc4NzAwMTAxNEUwMDAxQTMyCis6MTA2QUUwMDAwMDAwMTgyMTAwNjAyMDIxMjQwMjAwMDExMDgwRkZFOTJECis6MTA2QUYwMDA4RkJGMDAxODAwMDQyOUMyMDA0NTMwMjEwMEE2NTgyQjgyCis6MTA2QjAwMDAxMTYwRkZFNDNDMDg4MDAwM0MwNzIwMDAwMDA1NjlDMERDCis6MTA2QjEwMDAwMUE3NjAyNUFEMEMwMDIwM0MwMzgwMDgyNDAyMDAxRjYzCis6MTA2QjIwMDAyNDQyRkZGRkFDNjAwMDAwMDQ0MUZGRkQyNDYzMDAwNDI5Cis6MTA2QjMwMDAyNEE1MDAwMTAwQTY3MDJCMTVDMEZGRjUwMDA1NjlDMDUzCis6MTA2QjQwMDAwQTAwMDVGNDhGQkYwMDE4OTc4NzAwMDgzQzA0MDgwMDZFCis6MTA2QjUwMDAyNDg0NTRCMDI0MDUwNDAwMEUwMDA1QUYyNDA2MDAwMTZGCis6MTA2QjYwMDA5NzhCMDAxMDI0NDQwMDAxMzA4QUZGRkYyNTY5RkZGRjQ2Cis6MTA2QjcwMDAyRDQ4MDQwMDAwNDAyODIxMTUwMDAwNDBBNzg5MDAxMDdFCis6MTA2QjgwMDAyNEFDMzgwMDAwMEMxOUMwMEEwMDA2MDhBNzgwMDAwOEQxCis6MTA2QjkwMDA5Nzg3MDAwQTNDMDQwODAwMjQ4NDU1MzAyNDA1MDQwMDJCCis6MTA2QkEwMDAwRTAwMDVBRjI0MDYwMDAxOTc5OTAwMTIyNDQ0MDAwMTRECis6MTA2QkIwMDAzMDk4RkZGRjI3MkZGRkZGMkYwRTA0MDAwMDQwODgyMTkxCis6MTA2QkMwMDAxNUMwMDAyQ0E3OEYwMDEyQTc4MDAwMEEzQTAyMDAwMzBDCis6MTA2QkQwMDAyNjI0MDEwMDMwODRGRkZGMEUwMDA1REMyQzQ1MDAwMTU3Cis6MTA2QkUwMDAwMDExRjhDMDI3RjAwMTAwMDAxMDIxQzAwQTAwMDYwQUI5Cis6MTA2QkYwMDAyNDAyMDAwODk3ODUwMDFBOTc4NzAwMEUzQzA0MDgwMEJECis6MTA2QzAwMDAyNDg0NTVCMDBFMDAwNUFGMjQwNjAwMDE5Nzg3MDAxNkI2Cis6MTA2QzEwMDA4Rjg5MDAxODI0NDUwMDAxMzBBOEZGRkYyNEUzRkZGRkZGCis6MTA2QzIwMDAwMTA5MzAyQjAwNDA4MDIxMTRDMDAwMThBNzgzMDAxNkYyCis6MTA2QzMwMDBBNzgwMDAwRTk3ODUwMDFDMEUwMDBFMUUwMjAwMjAyMTZBCis6MTA2QzQwMDAyNDRBMDUwMDMxNDRGRkZGMEUwMDA1REMyNDA1MDAwMTQ1Cis6MTA2QzUwMDAzQzA1MDgwMDk0QTUwMDMyMEUwMDBFMUUwMjAwMjAyMTAzCis6MTA2QzYwMDAyNDQ1MjEwMDNDMDIwODAwOTA0MjAwMzMwQTAwMDYwQTM1Cis6MTA2QzcwMDAwMDA1MjFDMDBBMDAwNjQyQTc4NDAwMEEyNEFDMzgwMDlGCis6MTA2QzgwMDAwMDBDMTlDMDBBMDAwNjA4QTc4NDAwMDgwQTAwMDY1QzY4Cis6MTA2QzkwMDBBNzg1MDAwRTMwODQwMEZGMjdCREZGRTgyQzgyMDAwNjg4Cis6MTA2Q0EwMDBBRkJGMDAxNEFGQjAwMDEwMTA0MDAwMTUwMEEwMzgyMTk1Cis6MTA2Q0IwMDAwMDA0NDA4MDNDMDMwODAwMjQ2MzUyMEMwMTAzMjgyMTk3Cis6MTA2Q0MwMDA4Q0E0MDAwMDAwODAwMDA4MDAwMDAwMDAyNENDMDA3RjlECis6MTA2Q0QwMDAwMDA3NTFDMjAwMEM1OUMyMzE3MEZGRkYyNTQ3QzQwMEE0Cis6MTA2Q0UwMDAzMEU1RkZGRjI3ODQwMDA4MDIwMDMwMjEwRTAwMDUwNDc0Cis6MTA2Q0YwMDAyNDA3MDAwMTk3ODYwMDE0MDIwNjIwMjFBNzg0MDAxNEFGCis6MTA2RDAwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxOEVCCis6MTA2RDEwMDAzQzA1MDgwMDhDQTUwMDMwMDAwNzc5QzIwRTAwMDJFNjkxCis6MTA2RDIwMDAyNUU0REYwMDMwNDVGRkZGM0MwNDA4MDAyNDg0NTVCMDEzCis6MTA2RDMwMDAyNDA2MDAwMTBFMDAwNTA0MjQwNzAwMDE5NzhFMDAxNkFBCis6MTA2RDQwMDA4RkJGMDAxNDhGQjAwMDEwMjVDRDAwMDEyN0JEMDAxOEEzCis6MTA2RDUwMDAwM0UwMDAwOEE3OEQwMDE2MDAwN0M5QzIyNzM4RkYwMDBFCis6MTA2RDYwMDAwMDE4NzhDMjMxRjBGRkZGM0MwNDA4MDAyNDg0NTUzMDNECis6MTA2RDcwMDAwMjAwMjgyMTI0MDYwMDAxMEUwMDA1MDQyNDA3MDAwMTVBCis6MTA2RDgwMDA5NzhEMDAxMjI2MEUwMTAwMDAwRTg0MDAyNUFDMDAwMTM0Cis6MTA2RDkwMDAzQzBCNjAwMEE3OEMwMDEyQUQ2MDNEMDgzNjA0MDAwNjc1Cis6MTA2REEwMDAwMDAwMzAyMTNDMDc2MDAwOENFMjNEMDQzMDVGMDAwNkFCCis6MTA2REIwMDAxN0UwRkZGRDI0QzkwMDAxMDAwNjFCMDAzMTI2MDBGRjdCCis6MTA2REMwMDAwMDY0NDAyNTJDQzUwMDA0QUNFODNEMDQxNEEwRkZGNjg3Cis6MTA2REQwMDA4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAxODFCCis6MTA2REUwMDAwMDA3NTFDMjI1NDlDODAwMjQwNjAwMDEyNDA3MDAwMUZDCis6MTA2REYwMDAzQzA0MDgwMDI0ODQ1NEIwMEUwMDA1MDQzMTI1RkZGRjM0Cis6MTA2RTAwMDA5Nzg3MDAxMDhGQkYwMDE0OEZCMDAwMTAyNEU2MDAwMTk4Cis6MTA2RTEwMDAyN0JEMDAxODAzRTAwMDA4QTc4NjAwMTAzMDg0RkZGRjlDCis6MTA2RTIwMDAzMEE1RkZGRjNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRTg1Cis6MTA2RTMwMDAzQzA4NDA4MDAwODgzODI1M0MwMzEwMDBBQ0MwMDE4MDJECis6MTA2RTQwMDBBQ0M1MDE4NEFDQzcwMTg4MDNFMDAwMDhBQ0MzMDFCODNECis6MTA2RTUwMDAzMDg0RkZGRjNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRTc2Cis6MTA2RTYwMDAzQzA4NDAzODhDQTcwMDAwMDA4ODI4MjUzQzAzMTAwMDBGCis6MTA2RTcwMDBBQ0M3MDE4MEFDQzUwMTg4MDNFMDAwMDhBQ0MzMDFCODExCis6MTA2RTgwMDA4RjgzMDA1ODhGODYwMDUwMTA2NjAwMEIwMDgwNDAyMUQxCis6MTA2RTkwMDAzQzA3MDgwMDI0RTc1NUMwMDAwMzI4QzAwMEE3MTAyMUM0Cis6MTA2RUEwMDA4QzQ0MDAwMDI0NjMwMDAxMTA4ODAwMDUzMDYzMDAwRjRCCis6MTA2RUIwMDA1NDY2RkZGQTAwMDMyOEMwMDNFMDAwMDgwMDAwMTAyMTE4Cis6MTA2RUMwMDAzQzA3MDgwMDI0RTc1NUM0MDBBNzMwMjEwM0UwMDAwODcwCis6MTA2RUQwMDA4Q0MyMDAwMDNDMDM5MDAwMzQ2MjAwMDEwMDgyMjAyNTM3Cis6MTA2RUUwMDAzQzAzODAwMEFDNjQwMDIwOEM2NTAwMjAwNEEwRkZGRTAxCis6MTA2RUYwMDAwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDAzQzAyODAwMEU5Cis6MTA2RjAwMDAzNDQzMDAwMTAwODMyMDI1MDNFMDAwMDhBQzQ0MDAyMDQ2Cis6MTA2RjEwMDAyN0JERkZFMEFGQjEwMDE0MzA5MUZGRkZBRkIwMDAxMDBDCis6MTA2RjIwMDBBRkJGMDAxODEyMjAwMDEyMDBBMDgwMjE4Q0E1MDAwMDI1Cis6MTA2RjMwMDAxNEEwMDAxMTI0MDQwMDAyM0MwNjgwMDA4Q0MyMDFCODk5Cis6MTA2RjQwMDAwNDQwRkZGRTNDMDc0MDAwMDIyNzIwMjU4RkJGMDAxOEE5Cis6MTA2RjUwMDA4RkIxMDAxNDhGQjAwMDEwM0MwMzEwMDAyN0JEMDAyMDNCCis6MTA2RjYwMDBBQ0M1MDE4MEFDQzQwMTg4MDNFMDAwMDhBQ0MzMDFCODIzCis6MTA2RjcwMDAwQTAwMDcxRDhDQTUwMDAwMEUwMDA2NzQyNDA2MDIwMEZFCis6MTA2RjgwMDAwMDAwMjgyMTBBMDAwNzFEQUUwMDAwMDAzMDg3RkZGRjI3Cis6MTA2RjkwMDAzQzA2ODAwMDhDQzIwMUI4MDQ0MEZGRkUzQzBBNDAwNjVCCis6MTA2RkEwMDA4Q0E5MDAwMDAwRUE0MDI1QUNDOTAxODA4Q0E0MDAwNDMzCis6MTA2RkIwMDAzQzAzMTAwMEFDQzQwMTg0QUNDODAxODgwM0UwMDAwOEE1Cis6MTA2RkMwMDBBQ0MzMDFCODhGODNGRDk0MjdCREZGRThBRkJGMDAxNEE5Cis6MTA2RkQwMDBBRkIwMDAxMDkwNjcwMDA4MDA4MDEwMjEwMDgwMjgyMUM5Cis6MTA2RkUwMDAzMEU2MDA0MDAwMDAyMDIxMTBDMDAwMDg4QzUwMDAwMDU2Cis6MTA2RkYwMDAwRTAwMDA4ODAyMDAyMDIxMDIwMDIwMjE4RkJGMDAxNDEzCis6MTA3MDAwMDA4RkIwMDAxMDBBMDAwNDk3MjdCRDAwMTgwRTAwMDczMjQ5Cis6MTA3MDEwMDAwMDAwMDAwMDBFMDAwMDg4MDIwMDIwMjEwMjAwMjAyMTU0Cis6MTA3MDIwMDA4RkJGMDAxNDhGQjAwMDEwMEEwMDA0OTcyN0JEMDAxODBFCis6MTA3MDMwMDAyN0JERkZFMEFGQjAwMDEwOEY5MEZEOTRBRkJGMDAxQ0U0Cis6MTA3MDQwMDBBRkIyMDAxOEFGQjEwMDE0OTIwNjAwMDEwMDgwODgyMTkxCis6MTA3MDUwMDAwRTAwMDcwNDMwRDIwMDA0OTIwNDAwMDUwMDExMjlDMjdBCis6MTA3MDYwMDBBNjA1MDAwMDM0ODMwMDQwQTIwMzAwMDUwRTAwMDcwRUIxCis6MTA3MDcwMDAwMjIwMjAyMTBFMDAwNDk5MDIyMDIwMjEyNDAyMDAwMTc4Cis6MTA3MDgwMDBBRTAyMDAwQzAyMjAyODIxQTYwMjAwMTAyNDA0MDAwMkY3Cis6MTA3MDkwMDBBNjAyMDAxMjI0MDYwMjAwQTYwMjAwMTQwRTAwMDY3NEM2Cis6MTA3MEEwMDBBNjAyMDAxNjE2NDAwMDBGOEZCRjAwMUM5NzhDMDA1NERDCis6MTA3MEIwMDAzQzBCMDgwMDhENkIwMDc4MjU4OEZGRkYzMTA5RkZGRjJFCis6MTA3MEMwMDAyNTZBMDAwMTAxMkEzODJCMTBFMDAwMDZBNzg4MDA1NDI5Cis6MTA3MEQwMDAzQzBGNjAwNjI0MEUwMDE2MzVFRDAwMTBBREFFMDA1MERBCis6MTA3MEUwMDA4RkJGMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDNBCis6MTA3MEYwMDAwM0UwMDAwODI3QkQwMDIwMjdCREZGRTBBRkIxMDAxNDZBCis6MTA3MTAwMDBBRkJGMDAxOEFGQjAwMDEwMTA4MDAwMDQwMEEwODgyMUFECis6MTA3MTEwMDAyNDAyMDA4MDEwODIwMDA3MDAwMDAwMDAwMDAwMDAwRDIzCis6MTA3MTIwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwODZCCis6MTA3MTMwMDAyN0JEMDAyMDBFMDAwNzA0MDBBMDIwMjE4Rjg2RkQ5NEFCCis6MTA3MTQwMDAwMjIwMjAyMTkwQzUwMDA1MEUwMDA3MEUzMEIwMDBGRjgwCis6MTA3MTUwMDAyNDAzMDAzRTE2MDNGRkYxMDAwMDAwMDAzQzA1ODAwMDAwCis6MTA3MTYwMDA4Q0E0MDE3ODA0ODBGRkZFMjQwODAwMDczQzA3MTAwMDZGCis6MTA3MTcwMDBBQ0IxMDE0MDAyMjAyMDIxQTBBODAxNDQ4RkJGMDAxODFCCis6MTA3MTgwMDA4RkIxMDAxNDhGQjAwMDEwQUNBNzAxNzgwQTAwMDc1QjI0Cis6MTA3MTkwMDAyN0JEMDAyMDI3QkRGRkUwQUZCMDAwMTBBRkJGMDAxODMzCis6MTA3MUEwMDBBRkIxMDAxNDNDMTA4MDAwOEUxMTAwMjAwMDAwMDAwMEUwCis6MTA3MUIwMDAwRTAwMDQ5OUFFMDQwMDIwQUUxMTAwMjA4RkJGMDAxODBECis6MTA3MUMwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDJECis6MTA3MUQwMDAzMDg0RkZGRjNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRUYzCis6MTA3MUUwMDAzQzA4NDAzNTAwODgzODI1M0MwMzEwMDBBQ0M1MDE4MEMwCis6MTA3MUYwMDBBQ0MwMDE4NEFDQzcwMTg4MDNFMDAwMDhBQ0MzMDFCODhGCis6MTA3MjAwMDAzMDg0RkZGRjNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRUMyCis6MTA3MjEwMDAzQzA4NDAzNjAwODgzODI1M0MwMzEwMDBBQ0M1MDE4MDhFCis6MTA3MjIwMDBBQ0MwMDE4NEFDQzcwMTg4MDNFMDAwMDhBQ0MzMDFCODVFCis6MTA3MjMwMDAyN0JERkZEMEFGQjUwMDI0MzA5NUZGRkZBRkI2MDAyOEMzCis6MTA3MjQwMDBBRkI0MDAyMEFGQkYwMDJDQUZCMzAwMUNBRkIyMDAxODJBCis6MTA3MjUwMDBBRkIxMDAxNEFGQjAwMDEwMzBCNkZGRkYxMkEwMDAyNzhFCis6MTA3MjYwMDAwMDAwQTAyMThGOTIwMDM4OEU0MzAwMDAzQzA2ODAwMDcxCis6MTA3MjcwMDAyNDAyMDA0MDAwMDMzRTAyMDAwMzJDMDIzMEU0MDA3RkExCis6MTA3MjgwMDAwMDY2OTgyNDE0ODIwMDFEMzBBNTAwRkY4RjgzMDA0OEZCCis6MTA3MjkwMDAyQzY4MDAwQTUxMDAwMDEwOEY4NjAwMzAwMDAzNTg4MENGCis6MTA3MkEwMDAzQzBDMDgwMDI1OEM1MjI4MDE2QzUwMjE4RDQ5MDAwMEFGCis6MTA3MkIwMDAwMTIwMDAwODAwMDAwMDAwMDJENDcwMjEzMUM1RkZGRjRBCis6MTA3MkMwMDAwRTAwMDZENjI0MDQwMDg0MTY2MDAwMDI4RjkyMDAzODU3Cis6MTA3MkQwMDBBRjgwMDA0ODhGODYwMDMwMjY0RjAwMjAyNjg5MDAwMUFECis6MTA3MkUwMDAwMUUwOTAyMTMxMzRGRkZGMTRDMDAwMDRBRjhGMDAzODVCCis6MTA3MkYwMDAwMjk1MjgyQjE0QTBGRkRDMDAwMDAwMDAwMjgwMTAyMTYyCis6MTA3MzAwMDA4RkJGMDAyQzhGQjYwMDI4OEZCNTAwMjQ4RkI0MDAyMENCCis6MTA3MzEwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDEzCis6MTA3MzIwMDAwM0UwMDAwODI3QkQwMDMwMjQwNzAwMzQxNEE3MDE0NkZECis6MTA3MzMwMDAwMDAwMDAwMDkyNDcwMDBFOEY5OEZEOTg4RjkwRkQ5NEZBCis6MTA3MzQwMDAyNDBGMTYwMEEzMDcwMDE5OTI0NDAwMEQzQzA4ODAwMDhBCis6MTA3MzUwMDAzQzA3ODAwQ0EzMDQwMDE4OTY1RjAwMTIzQzA5NjAwMEYzCis6MTA3MzYwMDAzQzExN0ZGRkE2MUYwMDVDOTY1OTAwMTAzNjIyRkZGRkRDCis6MTA3MzcwMDAyNDA0MDAwNTMzMjVGRkZGQUUwNTAwNTQ4RTQ2MDAxQzkzCis6MTA3MzgwMDBBRDBGMDAyODhDRUUwMDAwOEQyRDQ0NDgwMUM2MTgyNjU0Cis6MTA3MzkwMDAwMUEzMzAyMUFFMDYwMDM4OEUwQzAwMzgyNENBMDAwMTRCCis6MTA3M0EwMDAzQzBEN0YwMEFFMEMwMDNDOEUwQjAwM0NBRjBCMDAwNDhDCis6MTA3M0IwMDBBRTBBMDAyMDhFMTMwMDIwQUUxMzAwMUNBMzAwMDAxQjk5Cis6MTA3M0MwMDBBRTAyMDAyQ0EzMDQwMDEyOEU1RjAwMTQyNDEzMDA1MEEwCis6MTA3M0QwMDBBRTFGMDAzNDhFMTkwMDM0QUYxOTAwMTQ4RTQ1MDAxODBBCis6MTA3M0UwMDBBRTA1MDA0ODkyNEYwMDBDQTIwRjAwNEU5MjA5MDAwODEzCis6MTA3M0YwMDAzNTJFMDAyMEEyMEUwMDA4OEUwMzAwMTgwMDZENjAyNEI4Cis6MTA3NDAwMDAzNThCNDAwMEFFMEIwMDE4OTIwQTAwMDAzMTUyMDBGRjhECis6MTA3NDEwMDAxMjUzMDJBNjI0MTNGRjgwM0MwNDA4MDAyNDg0NTY0MDIzCis6MTA3NDIwMDAwRTAwMDc0MDAwMDAwMDAwMjQwQzAwMDQyNDA4MDAwMUE2Cis6MTA3NDMwMDAzQzA1MDgwMDhDQTU1NjQwM0MwNDgwMDBBMjBDMDAyNUE5Cis6MTA3NDQwMDBBMjA4MDAwNThDOTAwMTc4MDYwMEZGRkU4RjkyMDAzODlDCis6MTA3NDUwMDAyNDBEMDAwMjNDMDMxMDAwQUM4NTAxNDBBMDhEMDE0NEM2Cis6MTA3NDYwMDBBQzgzMDE3ODBBMDAwODA0QUY4MDAwNDgyQ0FEMDAzN0Q3Cis6MTA3NDcwMDAxMUEwRkY5OThGODYwMDMwMDAwNTgwODAzQzExMDgwMDI0Cis6MTA3NDgwMDAyNjMxNTI1MDAyMTE3ODIxOERFRTAwMDAwMUMwMDAwODEzCis6MTA3NDkwMDAwMDAwMDAwMDI0MTAwMDA0MTRCMDAwOEUzQzA3ODAwMDlGCis6MTA3NEEwMDAzQzBCMDgwMDhENkI1NjQwOEY4NkZEOTRBQ0VCMDAyMEEyCis6MTA3NEIwMDA4RTQzMDAwODhGOEZGRDk4MjQwRTAwNTBBQ0MzMDAzMDFGCis6MTA3NEMwMDA4RTRBMDAwOEFDQ0EwMDUwOEU0MjAwMENBQ0MyMDAzNDk4Cis6MTA3NEQwMDA4RTQ0MDAxMEFDQzQwMDM4OEU1RjAwMTBBQ0RGMDA1NDQ2Cis6MTA3NEUwMDA4RTU5MDAxNEFDRDkwMDNDOEU1ODAwMThBREY4MDAwNDM5Cis6MTA3NEYwMDA4RTUxMDAxQ0FDRDEwMDIwOTBDNTAwMDAzMEE5MDBGRkM3Cis6MTA3NTAwMDAxMTJFMDI3NjAwMDAwMDAwOENDNTAwMzQ4Q0QxMDAzMEIyCis6MTA3NTEwMDAwMEIxMzAyMzA0QzAwMEYzMjQwNDAwOEMxMjYwMDBGMDlBCis6MTA3NTIwMDAyNDAyMDAwMzBBMDAwODA0QUY4MjAwNDgyNDBGMDAwNTZCCis6MTA3NTMwMDAxNEFGMDA2ODNDMEI4MDAwM0MwMzA4MDA4QzYzNTY0MDhECis6MTA3NTQwMDA4Rjg2RkQ5NEFENjMwMDIwOEU0QTAwMDQ4Rjk5RkQ5OENDCis6MTA3NTUwMDAyNDA3MjAwMEFDQ0EwMDFDOTI0MjAwMDgyNDEyMDAwODM0Cis6MTA3NTYwMDBBMzIyMDAxOThGODQwMDM4OTA5RjAwMDlBMzNGMDAxOEMwCis6MTA3NTcwMDA4Rjg1MDAzODkwQjgwMDBBMzMwNDAwRkYxMDkyMDAxMDg1Cis6MTA3NTgwMDAyODhDMDAwOTE1ODAwMEJDMjQwODAwMDIyNDBFMDAyMDZECis6MTA3NTkwMDAxMDhFMDAwQjM0MDc4MDAwMjg4OTAwMjExNTIwMDAwODc4Cis6MTA3NUEwMDAyNDA3NDAwMDI0MTEwMDQwMTA5MTAwMDUzQzA3MDAwMTExCis6MTA3NUIwMDAyNDBGMDA4MDEwOEYwMDAyM0MwNzAwMDIyNDA3NDAwMEM3Cis6MTA3NUMwMDA4Q0RGMDAxODNDMDRGRjAwMDNFNEM4MjQwMzI3QzAyNTE3Cis6MTA3NUQwMDBBQ0Q4MDAxODkwQjIwMDBCQTBEMjAwMjc4RjgzMDAzOERGCis6MTA3NUUwMDA5NDY1MDAwQzEwQTAwMjJBMDAwMDAwMDA5NDY3MDAwQ0IzCis6MTA3NUYwMDAzQzE5ODAwMDI0MEJGRkJGQTRDNzAwNUM5MDYyMDAwRTAyCis6MTA3NjAwMDAyNDA3MDAwNEEwQzIwMDA4OEY4NDAwMzg5MDlGMDAwRjU4Cis6MTA3NjEwMDBBMERGMDAwOThGOEMwMDM4OEQ5MjAwMTA4RjM4MDA3NDI1Cis6MTA3NjIwMDAwMjU4MjgyM0FDQzUwMDU4OEQ4RjAwMTRBQ0NGMDAyQzE1Cis6MTA3NjMwMDA5NTkxMDAxODMyMjlGRkZGQUNDOTAwNDA5NThFMDAxQUMxCis6MTA3NjQwMDAzMUQwRkZGRkFDRDAwMDQ0OEQ4RDAwMUNBQ0NEMDA0ODg0Cis6MTA3NjUwMDA5NTg4MDAwMkE0QzgwMDc4OTE4MzAwMEVBMEMzMDAwODlBCis6MTA3NjYwMDA5MENBMDAwODAxNEIxMDI0MTI2MDAxRDRBMEMyMDAwODg3Cis6MTA3NjcwMDA4RjkyMDAzODBBMDAwODA0QUY4NzAwNDgyNDA2MDAwNkVECis6MTA3NjgwMDAxNEE2MDAxNDNDMEQ4MDAwM0MxMDA4MDA4RTEwNTY0MERCCis6MTA3NjkwMDA4RjhDRkQ5MEFEQjAwMDIwOEU0ODAwMTg4Rjg2RkQ5NDMxCis6MTA3NkEwMDA4RjhBRkQ5OEFEODgwMDAwOENDMzAwMzgyNDA0MDAwNTQzCis6MTA3NkIwMDBBRDgzMDAwNDhDQ0IwMDNDMTI2MDAwODFBRDRCMDAwMDE4Cis6MTA3NkMwMDAwQTAwMDgwNEFGODQwMDQ4MjQwRTAwMDcxMEFFMDA0QkU3Cis6MTA3NkQwMDAyNDA0MDAwNjNDMDUwODAwMjRBNTU2NDAwRTAwMDcxM0FDCis6MTA3NkUwMDAyNDA0MDA4MThGOTIwMDM4MDAxMzEwMkIwQTAwMDgwNDM0Cis6MTA3NkYwMDBBRjgyMDA0ODI0MTkwMDIzMTRCOUZGRjYzQzBCODAwMDI4Cis6MTA3NzAwMDAzQzBDMDgwMDhEOEM1NjQwOEY4QUZEOThBRDZDMDAyMDkzCis6MTA3NzEwMDA4RjkxRkQ5NDhFNDYwMDA0MjU0NDAwMjAyNjQ1MDAxNEQ4Cis6MTA3NzIwMDBBRTI2MDAyODI0MDYwMDAzMEUwMDBFMkEyNTUwMDAzMDQ1Cis6MTA3NzMwMDA4Rjg3MDAzODAyMDAyMDIxMjQwNjAwMDMwRTAwMEUyQTQ1Cis6MTA3NzQwMDAyNEU1MDAwODNDMDQwODAwMjQ4NDU2NDAwRTAwMDc0MDRECis6MTA3NzUwMDAwMDAwMDAwMDkyMjIwMDAwMjQxRjAwNTAzMDQ0MDBGRjZGCis6MTA3NzYwMDA1NDlGRkZFMThGOTIwMDM4MEUwMDBFMTUwMDAwMDAwMEJDCis6MTA3NzcwMDAwQTAwMDkwOThGOTIwMDM4MjQwMzAwMzMxNEEzMDAzMjUxCis6MTA3NzgwMDAzQzAyODAwMDNDMTEwODAwOEUzMTU2NDA4RjhFRkQ5OERGCis6MTA3NzkwMDBBQzUxMDAyMDhFNDQwMDA4MjQwOTAwMjg4Rjg4RkQ5NEY1Cis6MTA3N0EwMDBBREM0MDAzMDhFNUYwMDBDMjQwNjAwMDlBRERGMDAzNDRDCis6MTA3N0IwMDA4RTU5MDAxMEFERDkwMDM4OEU1ODAwMTRBREQ4MDAyMDc1Cis6MTA3N0MwMDA4RTQ1MDAxOEFEQzUwMDI0OEU0RjAwMUNBRENGMDAyODlCCis6MTA3N0QwMDBBMUM5MDAxMThFNEQwMDA0MTI2MDAwMzFBRDBEMDAyOENBCis6MTA3N0UwMDA4RjkyMDAzODBBMDAwODA0QUY4NjAwNDgyNDA5MDAyMjVFCis6MTA3N0YwMDAxNEE5RkZCODAwMDAwMDAwMjQwNDAwMDczQzBGMDgwMDkzCis6MTA3ODAwMDA4REVGNTY0MDNDMTE4MDAwQUUyRjAwMjA1NjYwRkVCMTM3Cis6MTA3ODEwMDBBRjg0MDA0ODNDMDQwODAwMjQ4NDU2NDAwRTAwMDc0MDEyCis6MTA3ODIwMDAyNDEzMDA1MDhGOThGRDk0OTMxMjAwMDAzMjQ1MDBGRkZFCis6MTA3ODMwMDAxMEIzMDE2OTAwMDAwMDAwOEY5MjAwMzgwMDAwMjAyMTgxCis6MTA3ODQwMDAwQTAwMDgwNEFGODQwMDQ4M0MwNTA4MDAyNEE1NTY0MEZGCis6MTA3ODUwMDAwRTAwMDZFMzI0MDQwMDgxMEEwMDA5MDk4RjkyMDAzODEzCis6MTA3ODYwMDAwMkQ0OTgyMTMyNjVGRkZGMEUwMDA2RDYyNDA0MDA4NDVFCis6MTA3ODcwMDAwQTAwMDgwNDhGOTIwMDM4MTA4OEZGNTEyNDA3MDQwMDgyCis6MTA3ODgwMDAyODg3MDAwMzEwRTAwMUEzMjQxMDAwMDQyNDBEMDAwMTQ4Cis6MTA3ODkwMDA1NDhERkY0QjI0MDc0MDAwMEEwMDA4QkYyNDA3MDEwMDU1Cis6MTA3OEEwMDAzQzA1MDgwMDI0QTU1NjQwMEUwMDA3MzIyNDA0MDA4MjNGCis6MTA3OEIwMDA4RjkyMDAzODAwMDAzMDIxMEEwMDA4MDRBRjg2MDA0ODhCCis6MTA3OEMwMDAzQzA0MDgwMDI0ODQ1NjQwOENDMjAwMzgwRTAwMDc0MDU3Cis6MTA3OEQwMDA4Q0MzMDAzQzhGOTIwMDM4MEEwMDA5NUYwMDAwMjAyMTExCis6MTA3OEUwMDAyNDA0MDA4MjNDMDUwODAwMjRBNTU2NDAwRTAwMDczMkZGCis6MTA3OEYwMDAwMDAwMDAwMDhGOTIwMDM4MDAwMDEwMjEwQTAwMDgwNEU4Cis6MTA3OTAwMDBBRjgyMDA0ODhFNTAwMDA0OEY5MUZEOTQzQzBBODAwMEE1Cis6MTA3OTEwMDBBRDUwMDAyMDkyMjIwMDA1MDIwMDI4MjEzMDQ2MDAwMkNFCis6MTA3OTIwMDAxNEMwMDE4MDI0MDQwMDhBOEY5MkZEOTgwMjAwMjgyMTRGCis6MTA3OTMwMDAyNDA0MDA4RDkyNEIwMDFCMzE2MzAwMjAxNDYwMDE3OUY4Cis6MTA3OTQwMDAwMDAwMDAwMDkyMkQwMDA5MjQwQzAwMTIzMUE4MDBGRjU1Cis6MTA3OTUwMDAxMTBDMDE3NDI0MDQwMDgxMEUwMDA3MDQwMjAwMjAyMTkwCis6MTA3OTYwMDA5MjQ1MDAxQjI0MEUwMDA0MDIwMDIwMjEzNEE5MDA0MjhECis6MTA3OTcwMDBBMjQ5MDAxQjBFMDAwNzBFQTIyRTAwMjUzQzA0ODAwMDI5Cis6MTA3OTgwMDA4QzkxMDE3ODA2MjBGRkZFMjQxODAwMDJBQzkwMDE0MDgzCis6MTA3OTkwMDBBMDk4MDE0NDhGOTIwMDM4M0MwRjEwMDBBQzhGMDE3ODAyCis6MTA3OUEwMDAwQTAwMDkwQTAwMTMxMDJCOEU1MDAwMDQ4RjkxRkQ5NEQ5Cis6MTA3OUIwMDAzQzFGODAwMEFGRjAwMDIwOTIzOTAwMDUwMjAwMjgyMTEyCis6MTA3OUMwMDAzMzI3MDAwMjE0RTAwMDE3MjQwNDAwOEE5MjI0MDAwOURGCis6MTA3OUQwMDAyNDEyMDAwNDAyMDAyODIxMzA4NjAwRkYxMEQyMDAxMTdBCis6MTA3OUUwMDAyNDA0MDA4MTBFMDAwNzA0MDIwMDIwMjE4RjhDRkQ5OEUyCis6MTA3OUYwMDAyNDBCMDAxMjI0MDNGRkZFOTE4RDAwMUIwMjAwMjAyMUE2Cis6MTA3QTAwMDAzNUE4MDAyMEExODgwMDFCQTIyQjAwMDk5MjJBMDAwNTlFCis6MTA3QTEwMDAwMTQzMTAyNDBFMDAwNzBFQTIyMjAwMDUwMjAwMjgyMUI3Cis6MTA3QTIwMDAwMDAwMjAyMTBFMDAwN0NGMDAwMDAwMDAwQTAwMDkwOTE1Cis6MTA3QTMwMDA4RjkyMDAzODhFNTEwMDA0M0MwMjgwMDAzQzEwMDgwMEY4Cis6MTA3QTQwMDAyNjEwNTY0MEFDNTEwMDIwM0MwMTA4MDBBQzMxNTY0MDk1Cis6MTA3QTUwMDA5MjQ2MDAwMzMwQzQwMDA0MTA4MDAxNjU4Rjg0RkQ5NEI5Cis6MTA3QTYwMDAyNDAyMDAwNkEwODIwMDA5OTI0RDAwMUIyNDA4RkZDMERBCis6MTA3QTcwMDAzMUFDMDAzRjAxODg1ODI1QTA4QjAwMDg5MjQzMDAwM0Q5Cis6MTA3QTgwMDAzMDZBMDAwMTE1NDAwMTVDMDAwMDAwMDA4RTQyMDAwOEQxCis6MTA3QTkwMDBBRTAyMDAwODNDMDIwODAwOEM0MjU2NDgxMDQwMDE1QkQwCis6MTA3QUEwMDA4RjhFRkQ5ODAwMDI4MUMyOEY4NUZEOTRBNUQwMDAwQ0I5Cis6MTA3QUIwMDA4RTVGMDAwQzI0MEYwMDAxMjQwOTAwMTRBRERGMDAyQ0EwCis6MTA3QUMwMDA4RTU5MDAxMEFERDkwMDFDOTY0NzAwMTZBNUM3MDAzQzgyCis6MTA3QUQwMDA5NjU4MDAxNEE1RDgwMDNFQUNBRjAwMENBNEFGMDAxMDFGCis6MTA3QUUwMDBBNEFGMDAxMkE0QUYwMDE0QTRBRjAwMTYxMjYwMDE1RjhGCis6MTA3QUYwMDBBMUM5MDAxMTkyNDQwMDAzMzA5MjAwMDIyRTUzMDAwMUVDCis6MTA3QjAwMDA4RjkyMDAzODI2NjIwMDA4MEEwMDA4MDRBRjgyMDA0OEZECis6MTA3QjEwMDA4RTQ2MDAwNDNDMDU4MDAwM0MwNDgwMDhBQ0E2MDAyMDkyCis6MTA3QjIwMDA4RTQ3MDAwODkwODkwMDAwMjQxMTAwNTAzMTIyMDBGRjg4Cis6MTA3QjMwMDAxMDUxMDBCODI0MDUwMDg4M0MwNDgwMDA4QzhGMDFCOEU3Cis6MTA3QjQwMDAwNUUwRkZGRTAwMTM4MDJCM0MxODQwMDkwMEI4MTAyNTBCCis6MTA3QjUwMDBBRjkwMDA0ODNDMTAxMDAwQUM4NjAxODBBQzg3MDE4NEQ3Cis6MTA3QjYwMDBBQzgyMDE4OEFDOTAwMUI4MEEwMDA4MDU4Rjg2MDAzMDBECis6MTA3QjcwMDA4RTQ1MDAwNDNDMDY4MDAwM0MwOTgwMDhBQ0M1MDAyMDBFCis6MTA3QjgwMDA5MTNGMDAwMDI0MDQwMDUwMzNGOTAwRkYxMzI0MDBCMDlCCis6MTA3QjkwMDAyNDA2MDA4ODNDMDQ4MDAwOEM4QTAxQjgwNTQwRkZGRTYyCis6MTA3QkEwMDAzQzBFNDAwRTAwQ0U2ODI1M0MwODEwMDBBQzg1MDE4MERDCis6MTA3QkIwMDBBQzgwMDE4NEFDOEQwMTg4QUM4ODAxQjg5MTJCMDAwMEE5Cis6MTA3QkMwMDAyNDBDRkY4MDI0MDQwMDA0MDE2QzE4MjUyNDA2MDAzMEQ2Cis6MTA3QkQwMDAwRTAwMDY3NEExMjMwMDAwMEEwMDA5MDk4RjkyMDAzOEU0Cis6MTA3QkUwMDA4RTUwMDAwNDhGOTFGRDk4M0MwRjgwMDBBREYwMDAyMDc2Cis6MTA3QkYwMDA5MjI1MDAxQjMwQTkwMDEwMTEyMDAwN0MyNDAzMDA4MTc1Cis6MTA3QzAwMDAzQzA0ODAwMDhDODcwMUI4MDRFMEZGRkUzQzFGNDAxRjRECis6MTA3QzEwMDBBQzkwMDE4MDAwN0YxMDI1MDAxM0M4MkIzQzEwMTAwMDkxCis6MTA3QzIwMDBBQzgwMDE4NEFGOTkwMDQ4QUM4MjAxODhBQzkwMDFCODY3Cis6MTA3QzMwMDAwQTAwMDgwNThGODYwMDMwOEU0NDAwMUMwRTAwMDZFRkY3Cis6MTA3QzQwMDAwMDAwMDAwMDEwNDAwMEY4MDA0MDM4MjE4RjkyMDAzOEZBCis6MTA3QzUwMDAyNDA2MDA4OTNDMDU4MDAwOENBRTAxQjgwNUMwRkZGRUZCCis6MTA3QzYwMDAwMDAwMDAwMEFDQTcwMTgwOEU1MDAwMUMzQzExNDAwMUI4Cis6MTA3QzcwMDAwMDEzNzgyQjAwRDEzODI1M0MxMzEwMDBBQ0IwMDE4NEUwCis6MTA3QzgwMDBBRjhGMDA0OEFDQTcwMTg4QUNCMzAxQjgwQTAwMDgwNTYzCis6MTA3QzkwMDA4Rjg2MDAzMDk2NTkwMDAyM0MxMDA4MDAyNjEwNTY0MDhFCis6MTA3Q0EwMDAzMzM4MDAwNDEzMDAwMEEzM0MwNDYwMDA4RTVGMDAxQzA2Cis6MTA3Q0IwMDAzQzA2ODAwMEFDREYwMDIwM0MwMTA4MDBBQzNGNTY0MDkxCis6MTA3Q0MwMDA5NjRGMDAwMjMxRTcwMDAxMTRFMDAwRTMwMDAwMDAwMERECis6MTA3Q0QwMDA4RTQyMDAwNEFFMDIwMDA4M0MxMDA4MDA4RTEwNTY0ODg4Cis6MTA3Q0UwMDAxMjAwMDBEOTNDMDY4MDAwOEY4NUZEOTQyNDEwMDAwMTBECis6MTA3Q0YwMDA4Q0JGMDAxODhGOTFGRDk4OEY4OUZEOTAwM0U2QzgyNUYxCis6MTA3RDAwMDBBQ0I5MDAxOEEwQTAwMDA1QUNCMDAwMEMzQzE4MDgwMEVECis6MTA3RDEwMDA4RjE4NTY0ODhGODcwMDM4QTRCMDAwMTAwMDE4NzlDMjE5Cis6MTA3RDIwMDBBNEIwMDAxMkE0QjAwMDE0QTRCMDAwMTZBNjJGMDAwQzNBCis6MTA3RDMwMDA4Q0VFMDAwODhGOEQwMDM4OEY4QzAwMzhBRTJFMDAyQzEyCis6MTA3RDQwMDA4REE4MDAwQzI0MDcwMDAyQUUyODAwMUM5MThCMDAxMEE3Cis6MTA3RDUwMDBBMjJCMDAxMThGODMwMDM4OTA2QTAwMTFBMTJBMDAwODFECis6MTA3RDYwMDA4RjgyMDAzODkwNDQwMDEyQTBBNDAwNEU4RjkyMDAzOEY5Cis6MTA3RDcwMDA5MjQ2MDAxM0EyMjYwMDEyOEY5MjAwMzg5NjVGMDAxNERDCis6MTA3RDgwMDBBNjNGMDAzQzk2NTkwMDE2QTYzOTAwM0U4RTU4MDAxOEIyCis6MTA3RDkwMDBBRTM4MDAxNDU2NjBGRDRGQUY4NzAwNDgzQzA1MDgwMDIwCis6MTA3REEwMDAyNEE1NTY0MDBFMDAwNzEzMDAwMDIwMjE4RjkyMDAzOEIyCis6MTA3REIwMDAwMDAwMzgyMTBBMDAwODA0QUY4NzAwNDgzQzA1MDgwMDhECis6MTA3REMwMDAyNEE1NTY0MDBFMDAwNzMyMjQwNDAwODI4RjkyMDAzODBBCis6MTA3REQwMDAwQTAwMDhFQzAwMDAzODIxMEUwMDBFMTUwMDAwMDAwMDFCCis6MTA3REUwMDA4RjkyMDAzODBBMDAwOTVGMDAwMDIwMjEwRTAwMDcwNDZFCis6MTA3REYwMDAwMjAwMjAyMTkyMzIwMDFCMDIwMDIwMjEzNjU4MDAxMDgwCis6MTA3RTAwMDAwRTAwMDcwRUEyMzgwMDFCOEY5MjAwMzgwQTAwMEE0RjlFCis6MTA3RTEwMDAwMDAwMTgyMTkyNDMwMDBDMzA2QTAwMDExMTQwMDAwMzU5Cis6MTA3RTIwMDAwMDAwMDAwMDk2NEIwMDBFQTQ4QjAwMkM5MjQ4MDAwQzIyCis6MTA3RTMwMDAzMTBDMDAwMjExODBGRjQwMDAwMDI4MjE5NjRFMDAxMkY0Cis6MTA3RTQwMDA4RTREMDAxNEE0OEUwMDFBMEEwMDBBMURBQzhEMDAxQzcxCis6MTA3RTUwMDA4RjgzMDA1ODhGODcwMDUwMTA2N0ZGNEUwMDAwMzAyMTNECis6MTA3RTYwMDAzQzA4MDgwMDI1MDg1NUM0MDAwMzIwQzAwMDg4MzAyMUM0Cis6MTA3RTcwMDA4Q0QxMDAwMDEyMjUwMEM4MjQ2MjAwMDEzMDQzMDAwRjlECis6MTA3RTgwMDAxNDY3RkZGQTAwMDMyMEMwMEEwMDBBMzQwMDAwMzAyMTAyCis6MTA3RTkwMDAzQzA1MDgwMDI0QTU1NjQwMEUwMDA3MzIyNDA0MDA4QjQwCis6MTA3RUEwMDA4RjkyMDAzODBBMDAwOEVDMDAxMzM4MkIzQzBCMDgwMEI2Cis6MTA3RUIwMDA4RDZCNTY0MDI0RDhGRkZFMjU3MTAxMDAzMjJBMDA3RkM5Cis6MTA3RUMwMDAwMTQ3OTAyMTAyMzMxMDI0QUQwMjAwMjhBRTQ2MDBEMEI1Cis6MTA3RUQwMDBBRTQwMDBENDBBMDAwODU1QUU1ODAwMUNBQ0MwMDA1NDk3Cis6MTA3RUUwMDAzQzBFMDgwMDhEQ0U1NjQwM0MwOTgwMEMzNTJDMDEwMDFDCis6MTA3RUYwMDBBQ0VFMDAyODhFNTAwMDE0QUQ5MDAwRDA4RTREMDAxNEQyCis6MTA3RjAwMDBBRDhEMDBENDhFNDgwMDEwMjUwN0ZGRkUwQTAwMDg5MUIxCis6MTA3RjEwMDBBRDg3MDAxQzU0OTBGREFBMjQwNzQwMDAwQTAwMDhCRjRBCis6MTA3RjIwMDAyNDA3MTAwMDBFMDAwN0MzMDAwMDAwMDAwQTAwMDkwOTIyCis6MTA3RjMwMDA4RjkyMDAzODhDODM0NDJDM0MwNURFQUQzNEIyQkVFRjBBCis6MTA3RjQwMDAzQzAxMDgwMEFDMjA1NjQwMTA3MjAwOTAwMDAwMDAwMDc4Cis6MTA3RjUwMDAzQzA0NkM2MjM0ODI3OTcwMTQ2MjAwMDgyNDA0MDAwMkNDCis6MTA3RjYwMDA5NzhBMDA1NDk3ODMwMDRDMDIwMDI4MjEwMTQzNDgyQjM0Cis6MTA3RjcwMDAxMTIwMDAxOTI0MDQwMDkyMjQwNDAwMDIwRTAwMDVFNERDCis6MTA3RjgwMDAyNDA1MDIwMDNDMEI4MDAwQUQ2MjAwMjAzQzAxMDgwMDhCCis6MTA3RjkwMDBBQzIyNTY0MDEwNDAwMDBEOEY4RTAwMzgyNDBDMDAyODczCis6MTA3RkEwMDAyNDA0MDAwMzkxQ0QwMDEwMzFBODAwRkY1NTBDMDAwMUZFCis6MTA3RkIwMDAyNDA0MDAwMTBFMDAwMDRDMDAwMDAwMDAxMDQwMDAwNEVBCis6MTA3RkMwMDAyNDA0MDA4MzBBMDAwQTdGOEY5MjAwMzgyNDA0MDA4MzZGCis6MTA3RkQwMDAzQzA1MDgwMDI0QTU1NjQwMEUwMDA3MTMwMDAwMDAwMEQxCis6MTA3RkUwMDA4RjkyMDAzODAwMTMzODJCMEEwMDA4MDRBRjg3MDA0ODJFCis6MTA3RkYwMDAwQTAwMDlFODI0MDIwMDEyOEU0NDAwMDgwRTAwMDZFRjcxCis6MTA4MDAwMDAwMDAwMDAwMDBBMDAwOUY0QUUwMjAwMDgzQzA1MDgwMDY4Cis6MTA4MDEwMDAyNEE1NTY0MDBFMDAwNkUzMjQwNDAwODc4RjkyMDAzODAyCis6MTA4MDIwMDAwQTAwMEExMTAwMTMxMDJCMjQwNDAwMDQwRTAwMDVFNEJBCis6MTA4MDMwMDAyNDA1MDAzMDE0NDAwMDE0MDA0MDM4MjE4RjkyMDAzODhECis6MTA4MDQwMDAwQTAwMEE2NDI0MDYwMDgzM0MwNTA4MDAyNEE1NTY0MDYzCis6MTA4MDUwMDAwQTAwMEI0NTI0MDQwMDg3OEU0NDAwMDQwRTAwMDZFRjNFCis6MTA4MDYwMDAwMDAwMDAwMDBBMDAwQTg1QUUwMjAwMDgzQzA1MDgwMDc2Cis6MTA4MDcwMDAyNEE1NTY0MDBFMDAwNzMyMjQwNDAwODI4RjkyMDAzODU3Cis6MTA4MDgwMDAwQTAwMEExMTAwMDAxMDIxOEY5MjAwMzgzQzA4ODAwODc1Cis6MTA4MDkwMDAzQzBDODAwMDI0MEIwMDUwMjQwQTAwMDFBRDgyMDAyMDFCCis6MTA4MEEwMDBBMTBCMDAwMEExMEEwMDAxOTI0OTAwMDRBMTA5MDAxOEQ3Cis6MTA4MEIwMDA5MjQ0MDAwNUExMDQwMDE5OTI0MzAwMDYzQzA0MDgwMDA0Cis6MTA4MEMwMDAyNDg0NTVDNEExMDMwMDFBOTI0MjAwMDczQzAzMDgwMDBGCis6MTA4MEQwMDAyNDYzNTVDMEExMDIwMDFCOTI0NTAwMDhBMTA1MDAxQ0E1Cis6MTA4MEUwMDA5MjQ2MDAwOUExMDYwMDFEOTI1RjAwMEFBMTFGMDAxRTEyCis6MTA4MEYwMDA5MjU5MDAwQkExMTkwMDFGOTI1ODAwMENBMTE4MDAyMEUyCis6MTA4MTAwMDA5MjUxMDAwREExMTEwMDIxOTI1MDAwMEVBMTEwMDAyMkU5Cis6MTA4MTEwMDA5MjRGMDAwRkExMEYwMDIzOTI0RTAwMTBBMTBFMDAyNEQ5Cis6MTA4MTIwMDA5MjREMDAxMUExMEQwMDI1OTY0QzAwMTRBNTBDMDAyOEJECis6MTA4MTMwMDA5NjRCMDAxNjhGOEEwMDUwOEY5ODAwNThBNTBCMDAyQTg2Cis6MTA4MTQwMDA5NjQ5MDAxODAwMEExMEMwMjU0NTAwMDFBNTA5MDAyQzE5Cis6MTA4MTUwMDA4RTQ2MDAxQzAwNDRDODIxMDA0M0Y4MjEzMEE1MDAwRkMyCis6MTA4MTYwMDBBRkU2MDAwMEFGMjcwMDAwMTBCODAwMDNBRjg1MDA1MDU1Cis6MTA4MTcwMDAwQTAwMEE2NDAwMDAzMDIxMjRBRDAwMDEzMUE4MDAwRjdDCis6MTA4MTgwMDAwMDAwMzAyMTBBMDAwQTY0QUY4ODAwNTg4QzgzNDQyQzE4Cis6MTA4MTkwMDAwQTAwMEIyNDNDMDQ2QzYyM0MwNzA4MDAyNEU3NTVDMDJECis6MTA4MUEwMDAwMDg3OTAyMUFDQzAwMDAwMDAwMDMwMjEwQTAwMEEzNDkyCis6MTA4MUIwMDBBRTQwMDAwMDNDMDQ4MjAxM0MwMzYwMDAzNDgyMEUwMkE5Cis6MTA4MUMwMDBBQzYwM0Q2OEFGODAwMDc4MDNFMDAwMDhBQzYyM0Q2Q0I1Cis6MTA4MUQwMDAyN0JERkZFOEFGQjAwMDEwMzA5MEZGRkYwMDEwMTg0MjNECis6MTA4MUUwMDAyQzYyMDA0MUFGQkYwMDE0MTQ0MDAwMDIyNDA0MDA4MDQwCis6MTA4MUYwMDAyNDAzMDA0MDNDMDEwODAwQUMzMDAwNjAzQzAxMDgwMDUyCis6MTA4MjAwMDBBQzIzMDA2NDBFMDAwRTFFMDA2MDI4MjEyNDQ4MDJCRjJCCis6MTA4MjEwMDAyNDA5RkY4MDAxMDkyODI0MDAxMDM5ODAwMDEwMzA0MDEzCis6MTA4MjIwMDA4RkJGMDAxNDhGQjAwMDEwMDBBNzIwMjEwMDg2MTgyMUY2Cis6MTA4MjMwMDBBRjgzMDA2MDNDMDEwODAwQUMyNTAwNTgzQzAxMDgwMEY5Cis6MTA4MjQwMDBBQzI0MDA1QzAzRTAwMDA4MjdCRDAwMTgzMDgzMDBGRjY5Cis6MTA4MjUwMDAzMEM2RkZGRjMwRTQwMEZGM0MwODgwMDA4RDAyMDFCODBCCis6MTA4MjYwMDAwNDQwRkZGRTAwMDM1NDAwMDE0NDM4MjUzQzA5NjAwMDJGCis6MTA4MjcwMDAwMEU5MjAyNTNDMDMxMDAwQUQwNTAxODBBRDA2MDE4NDE2Cis6MTA4MjgwMDBBRDA0MDE4ODAzRTAwMDA4QUQwMzAxQjg4Rjg2MDAzODEzCis6MTA4MjkwMDAzQzA5NjAxMjM1MjcwMDEwOENDQjAwMDQzQzBDNjAwRUFBCis6MTA4MkEwMDAzNTg1MDAxMDMxNkEwMDA2MkQ0ODAwMDFBQ0U4MDBDNDk1Cis6MTA4MkIwMDA4Q0M0MDAwNEFDQTQzMTgwOENDMjAwMDg5NEMzMDAwMkJBCis6MTA4MkMwMDBBQ0EyMzE4NDAzRTAwMDA4QTc4MzAwNzA4Rjg1MDAzOERBCis6MTA4MkQwMDA4Rjg3RkYyMDhGODZGRjI4OENBRTAwMDQzQzBGNjAxMjMyCis6MTA4MkUwMDAzNUU4MDAxMEFDRUUwMDY4OENBRDAwMDhBQ0VEMDA2QzE5Cis6MTA4MkYwMDA4Q0FDMDAxMEFDQ0MwMDRDOENBQjAwMENBQ0NCMDA0ODcwCis6MTA4MzAwMDA5NENBMDA1NDNDMDIwODAwOEM0MjAwNDQyNTQ5MDAwMUY0Cis6MTA4MzEwMDBBNEM5MDA1NDk0QzQwMDU0MzA4M0ZGRkYxMDYyMDAxN0I2Cis6MTA4MzIwMDAwMDAwMDAwMDNDMDIwODAwOEM0MjAwNDBBNEMyMDA1MjQxCis6MTA4MzMwMDA4Q0EzMDAxOEFDRTMwMDMwOENBMjAwMTRBQ0UyMDAyQzNCCis6MTA4MzQwMDA4Q0I5MDAxOEFDRjkwMDM4OENCODAwMTQyNDA1MDAwMTcxCis6MTA4MzUwMDBBQ0Y4MDAzNDhEMDYwMEJDNTBDNTAwMTk4RDAyMDBCNDg1Cis6MTA4MzYwMDA4RDAyMDBCOEE0RTIwMDQ4OTRFNDAwNDhBNEU0MDA0QTY2Cis6MTA4MzcwMDA5NEU4MDBEQTAzRTAwMDA4MzEwMkZGRkYzQzAyMDgwMDQ1Cis6MTA4MzgwMDA4QzQyMDAyNEE0QzAwMDU0QTRDMjAwNTI4Q0EzMDAxODQ0Cis6MTA4MzkwMDBBQ0UzMDAzMDhDQTIwMDE0QUNFMjAwMkM4Q0I5MDAxOEM1Cis6MTA4M0EwMDBBQ0Y5MDAzODhDQjgwMDE0MjQwNTAwMDFBQ0Y4MDAzNDk2Cis6MTA4M0IwMDA4RDA2MDBCQzU0QzVGRkVCOEQwMjAwQjg4RDAyMDBCNEUxCis6MTA4M0MwMDBBNEUyMDA0ODk0RTQwMDQ4QTRFNDAwNEE5NEU4MDBEQUY3Cis6MTA4M0QwMDAwM0UwMDAwODMxMDJGRkZGOEY4NjAwMzgzQzA0ODAwMDc0Cis6MTA4M0UwMDA4Q0M5MDAwODhDQzgwMDA4MDAwOTI5QzAwMDA4MzlDMEUxCis6MTA4M0YwMDBBQzg3MDAyMDkwQzMwMDA3MzA2MjAwMDQxMDQwMDAzQUIwCis6MTA4NDAwMDBBRjg1MDA3NDkwQ0IwMDA3MzE2QTAwMDgxMTQwMDAzOTM1Cis6MTA4NDEwMDA4Rjg3RkYyNDhDQ0QwMDBDOENDRTAwMTQwMUFFNjAyQjE2Cis6MTA4NDIwMDAxMTgwMDAzMjAwMDAwMDAwOENDMjAwMENBQ0UyMDA3MDMxCis6MTA4NDMwMDA4Q0NCMDAxODhGODVGRjIwOEY4OEZGMjhBQ0VCMDA3NDUxCis6MTA4NDQwMDA4Q0NBMDAxMDI0MDJGRkY4QUNBQTAwQzg4Q0M5MDAwQzJBCis6MTA4NDUwMDBBRDA5MDA2MDhDQzQwMDFDQUNBNDAwQzA5MEUzMDA3QzlCCis6MTA4NDYwMDAwMDYyQzgyNEEwRjkwMDdDOTBEODAwMDczMzBGMDAwOEYwCis6MTA4NDcwMDAxMUUwMDAwNDAwMDAwMDAwOTBFRDAwN0MzNUFDMDAwMTJDCis6MTA4NDgwMDBBMEVDMDA3QzkwQ0YwMDA3MzFFRTAwMDExMUMwMDAwOTg0Cis6MTA4NDkwMDAwMDAwMDAwMDkwRTQwMDdDMjQxODAwMDIzNDgyMDAwMkY2Cis6MTA4NEEwMDBBMEUyMDA3QzkwQTMwMEVDMzA3OTAwRkYxMzM4MDAxM0E5Cis6MTA4NEIwMDAyNDA4MDAzNDkwQzkwMDA3MzEyNjAwMDIxMEMwMDAwNENGCis6MTA4NEMwMDAwMDAwMDAwMDkwRUIwMDdDMzU2QTAwMDRBMEVBMDA3QzBDCis6MTA4NEQwMDA5MEVEMDA3RDMxQUMwMDNGQTBFQzAwN0Q5NEE3MDBEQTY4Cis6MTA4NEUwMDAwM0UwMDAwODMwRTJGRkZGOEY4N0ZGMjQwQTAwMEM1QUU4Cis6MTA4NEYwMDA4Q0MyMDAxNDBBMDAwQzVCQUNFMDAwNzAwQTAwMEM3QzFCCis6MTA4NTAwMDBBQ0E4MDBDQzhGOEMwMDM4MjdCREZGRDhBRkIzMDAxQ0JGCis6MTA4NTEwMDBBRkIyMDAxOEFGQjAwMDEwQUZCRjAwMjBBRkIxMDAxNDcxCis6MTA4NTIwMDA5MThGMDAxNTNDMTM2MDBFMzY3MzAwMTAzMUVCMDAwRjc1Cis6MTA4NTMwMDBBMzhCMDA3QzhEOEYwMDA0OEQ4QjAwMDg5NTlGMDAxMjBCCis6MTA4NTQwMDA5NTk5MDAxMDk1ODQwMDFBOTU5ODAwMUU5NThFMDAxQzMwCis6MTA4NTUwMDAzM0VERkZGRjMzMkFGRkZGMzA4OUZGRkYzMzA4RkZGRkIyCis6MTA4NTYwMDAzMUM3RkZGRjNDMDEwODAwQUMyRDAwMjQzQzAxMDgwMDhFCis6MTA4NTcwMDBBQzI5MDA0NDNDMDEwODAwQUMyQTAwNDBBRTY4MzE3OEM4Cis6MTA4NTgwMDBBRTY3MzE3QzkxODUwMDE1OTU5MTAwMTYzQzEyNjAxMjAyCis6MTA4NTkwMDAzNjUyMDAxMDMwQTIwMEZGMzIzMEZGRkZBRTYyMzE4ODQ5Cis6MTA4NUEwMDBBRTUwMDBCNDkxODMwMDE0OTU5RjAwMTgyNDA2MDAwMTdBCis6MTA4NUIwMDAwMDY2QzgwNDMzRjhGRkZGQUU1OTAwQjhBRTU4MDBCQ0RGCis6MTA4NUMwMDA5MThFMDAxNEFGOEYwMDY0M0MwODYwMDYzMUNEMDBGRjJGCis6MTA4NUQwMDBBRTREMDBDMDkxOEEwMDE1OTU4NDAwMEUzQzA3NjAwQURDCis6MTA4NUUwMDAzMTQ5MDBGRkFGOEIwMDY4MzA4NEZGRkZBRTQ5MDBDOEZGCis6MTA4NUYwMDAzNTExMDAxMDBFMDAwQkMzMzRGMDA0MTAzQzAyMDgwMENCCis6MTA4NjAwMDA4QzQyMDA2MDNDMDMwODAwOEM2MzAwNjQzQzA2MDgwMDU4Cis6MTA4NjEwMDA4Q0M2MDA1ODNDMDUwODAwOENBNTAwNUM4Rjg0MDA2MDY3Cis6MTA4NjIwMDA4RkJGMDAyMEFFMjMwMDRDQUU2NTMxOUNBRTAzMDA1NERBCis6MTA4NjMwMDBBRTQ1MDBEQ0FFNjIzMUEwQUU2MzMxQTRBRTY2MzE5OEM3Cis6MTA4NjQwMDBBRTIyMDA0ODhGQjMwMDFDQUUwMjAwNTA4RkIxMDAxNDYwCis6MTA4NjUwMDBBRTQyMDBFMEFFNDMwMEU0QUU0NjAwRDg4RkIwMDAxMDVBCis6MTA4NjYwMDA4RkIyMDAxODBBMDAwNENDMjdCRDAwMjg5Nzg1MDA3MjNECis6MTA4NjcwMDA5NzgzMDA1QzI3QkRGRkU4QUZCMDAwMTAwMEEzMTAyQjZDCis6MTA4NjgwMDBBRkJGMDAxNDI0MDQwMDA1OEY5MDAwMzgxMDQwMDA1NTNGCis6MTA4NjkwMDAyNDA5MDAwMjBFMDAwNUU0OEY4NTAwNjBBRjgyMDA3NDlCCis6MTA4NkEwMDAyNDA0MDAwMzEwNDAwMDRGMjQwOTAwMDIzQzA2ODAwMDBGCis6MTA4NkIwMDAwRTAwMDA0Q0FDQzIwMDIwMjQwNzAwMDEyNDA4MjAwMDVBCis6MTA4NkMwMDAxMDQwMDA0RDI0MDQwMDA1OTc4RTAwNzI4RjhBRkYyNDBECis6MTA4NkQwMDAyNDA5MDA1MDI1QzUwMDAxQTc4NTAwNzJBMTQ5MDAwMEFBCis6MTA4NkUwMDAzQzBEMDgwMDhEQUQwMDY0MjQwMzgwMDA4Rjg0RkYyMEMyCis6MTA4NkYwMDAwMDBENjYwMEFENEMwMDE4QTU0MDAwMDY5NTRCMDAwQTIxCis6MTA4NzAwMDA4Rjg1RkYyODI0MDJGRjgwMDE2MzMwMjRBNTQ2MDAwQURDCis6MTA4NzEwMDA5MTVGMDAwQTAwMDA0ODIxMDNFMkM4MjVBMTU5MDAwQTIwCis6MTA4NzIwMDBBMEEwMDAwOEExNDAwMDRDQTA4MDAwQzU5NjE4MDAwMjNGCis6MTA4NzMwMDA5NzgzMDA3MDNDMDIwMDA0QTQ5ODAwREE5NjBGMDAwMkIwCis6MTA4NzQwMDAyNDE4RkZCRjI1RUUyNDAxQTQ4RTAwQUU4RTBEMDAwNDc4Cis6MTA4NzUwMDBBQ0FEMDA0NDhFMEMwMDA4QUNBQzAwNDBBNEEwMDA1MEFFCis6MTA4NzYwMDBBNEEwMDA1NDhFMEIwMDBDMjQwQzAwMzBBQzhCMDAyODBECis6MTA4NzcwMDA4RTA2MDAxMEFDODYwMDI0QTQ4MDAwM0VBNDg3MDA0RTI0Cis6MTA4NzgwMDBBNDg3MDA1MEE0ODMwMDNDQUQ0MjAwNzRBQzg4MDBDOEFDCis6MTA4NzkwMDBBQ0E4MDA2MEEwODcwMEVDOTA5RjAwQzQzM0Y5MDA3Rjc0Cis6MTA4N0EwMDBBMDk5MDBDNDkwOTAwMEM0MDIxODc4MjRBMDhGMDBDNDNGCis6MTA4N0IwMDA5MTRFMDA3QzM1Q0QwMDAxQTE0RDAwN0M5MzhCMDA3QzU3Cis6MTA4N0MwMDBBRDQ4MDA3MEFDOEMwMENDQTA4QjAwQzY4Rjg4MDA2OEQwCis6MTA4N0QwMDA4Rjg3MDA2NEFDODgwMEI0QUM4NzAwQjhBNTQwMDA3OEVGCis6MTA4N0UwMDBBNTQwMDA3QThGQkYwMDE0OEZCMDAwMTAwMTIwMTAyMTI3Cis6MTA4N0YwMDAwM0UwMDAwODI3QkQwMDE4OEY4NTAwNzQwRTAwMDY3NDgyCis6MTA4ODAwMDA4Rjg2MDA2MDBBMDAwRDQ4MjQwOTAwMDIyN0JERkZFMEEyCis6MTA4ODEwMDBBRkIwMDAxMDhGOTAwMDM4QUZCMTAwMTRBRkJGMDAxODk4Cis6MTA4ODIwMDA4RTA5MDAwNDBFMDAwNDk5MDAwOTIxQzA4RTA4MDAwNDdFCis6MTA4ODMwMDA4Rjg0RkYyMDhGODJGRjI4MDAwODM5QzAzQzA2ODAwMDBCCis6MTA4ODQwMDBBQ0M3MDAyMDk0ODUwMERBOTA0MzAwMTMxNDYwMDAxQzJDCis6MTA4ODUwMDAzMEIxRkZGRjhGOENGRjI0OTE4QjAwMDgzMTZBMDA0MEZDCis6MTA4ODYwMDAxNTQwMDAwQjAwMDAwMDAwOEUwRDAwMDQwMjIwMzAyMTk2Cis6MTA4ODcwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA0MDAyMkE1Cis6MTA4ODgwMDAwMDAwMzgyMTAwMEQyOUMwMEEwMDBCRTIyN0JEMDAyMDlFCis6MTA4ODkwMDAwRTAwMDA2MzAwMDAwMDAwOEUwRDAwMDQwMjIwMzAyMTU1Cis6MTA4OEEwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA0MDAyMjc1Cis6MTA4OEIwMDAwMDAwMzgyMTAwMEQyOUMwMEEwMDBCRTIyN0JEMDAyMDZFCis6MTA4OEMwMDAwRTAwMDA1QjAwMDAwMDAwOEUwRDAwMDQwMjIwMzAyMTJECis6MTA4OEQwMDA4RkJGMDAxODhGQjEwMDE0OEZCMDAwMTAyNDA0MDAyMjQ1Cis6MTA4OEUwMDAwMDAwMzgyMTAwMEQyOUMwMEEwMDBCRTIyN0JEMDAyMDNFCis6MTA4OEYwMDAyN0JERkZFMEFGQjIwMDE4MzA5MkZGRkZBRkIwMDAxMDBECis6MTA4OTAwMDBBRkJGMDAxQ0FGQjEwMDE0MTI0MDAwMUUwMDAwODAyMTU4Cis6MTA4OTEwMDA4Rjg2MDAzODhDQzUwMDAwMjQwMzAwMDYwMDA1M0YwMjQ2Cis6MTA4OTIwMDAwMDA1MTQwMjMwRTQwMDA3MTQ4MzAwMTYzMDQ1MDBGRkYwCis6MTA4OTMwMDAyQ0E4MDAwNjExMDAwMDQwMDAwNTU4ODAzQzBDMDgwMERGCis6MTA4OTQwMDAyNThDNTMyQzAxNkM1MDIxOEQ0OTAwMDAwMTIwMDAwODFBCis6MTA4OTUwMDAwMDAwMDAwMDhGOEUwMDc4MjQwRDAwMDExMUNEMDA1MDIyCis6MTA4OTYwMDAyNDAyMDAwMkFGODIwMDc4MjYwOTAwMDEzMTMwRkZGRkE3Cis6MTA4OTcwMDAyNEM4MDAyMDAyMTIyMDJCMDEwMDMwMjExNDgwRkZFNUMyCis6MTA4OTgwMDBBRjg4MDAzODAyMDAxMDIxOEZCRjAwMUM4RkIyMDAxODgyCis6MTA4OTkwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyMDQ1Cis6MTA4OUEwMDA5Mzg3MDA1RTU0RTAwMDM0MDAwMDMwMjEwRTAwMEM5MEVDCis6MTA4OUIwMDAwMDAwMDAwMDhGODYwMDM4MEEwMDBEQTgyNDAyMDAwMTg0Cis6MTA4OUMwMDA4Rjg3MDA3ODI0MDUwMDAyMTBFNTAwMzEyNDA0MDAxMzhECis6MTA4OUQwMDAwMDAwMjgyMTAwMDAzMDIxMjQwNzAwMDEwRTAwMEJFMkQ2Cis6MTA4OUUwMDAwMDAwMDAwMDBBMDAwREE5OEY4NjAwMzg4RjgzMDA3OEYwCis6MTA4OUYwMDAyNDAyMDAwMjE0NjJGRkY2MjQwNDAwMTIwRTAwMEM0NTRCCis6MTA4QTAwMDAwMDAwMDAwMDhGODUwMDc0MDA0MDMwMjEyNDA0MDAxMjEzCis6MTA4QTEwMDAwRTAwMEJFMjAwMDAzODIxMEEwMDBEQTk4Rjg2MDAzOEY1Cis6MTA4QTIwMDA4RjgzMDA3ODI0MTEwMDAzMTA3MTAwMjkyNDFGMDAwMjk1Cis6MTA4QTMwMDAxMDdGRkZDRTI2MDkwMDAxMjQwNDAwMTAwMDAwMjgyMTI5Cis6MTA4QTQwMDAwMDAwMzAyMTBBMDAwREM2MjQwNzAwMDE4RjkxMDA3ODM0Cis6MTA4QTUwMDAyNDA2MDAwMjE2MjZGRkY5MjQwNDAwMTAwRTAwMENFQTdBCis6MTA4QTYwMDAwMDAwMDAwMDE0NDAwMDIzOEY5ODAwMzg4Rjg2MDAzOEUzCis6MTA4QTcwMDAwQTAwMERBODI0MDIwMDAzMjQwNDAwMTQwRTAwMEJFMkQ3Cis6MTA4QTgwMDAwMDAwMjgyMThGODYwMDM4MEEwMDBEQTgyNDAyMDAwMjY5Cis6MTA4QTkwMDAwRTAwMEQ1MjAwMDAwMDAwMEEwMDBEQTk4Rjg2MDAzODVDCis6MTA4QUEwMDAwRTAwMEJGMjAwMDAwMDAwMjQxOTAwMDIyNDA0MDAxNDQwCis6MTA4QUIwMDAwMDAwMjgyMTAwMDAzMDIxMDAwMDM4MjFBRjk5MDA3ODAzCis6MTA4QUMwMDAwRTAwMEJFMjAwMDAwMDAwMEEwMDBEQTk4Rjg2MDAzODlFCis6MTA4QUQwMDAwRTAwMEMwMjAwMDAwMDAwOEY4NTAwNzQyNDE5MDAwMkIzCis6MTA4QUUwMDAwMDQwMzAyMTI0MDQwMDEwMDAwMDM4MjEwQTAwMERGRjRFCis6MTA4QUYwMDBBRjk5MDA3ODAwNDAzODIxMjQwNDAwMTA5NzBGMDAwMjNECis6MTA4QjAwMDAwMDAwMjgyMTBFMDAwQkUyMzFFNkZGRkY4Rjg2MDAzOEJGCis6MTA4QjEwMDAwQTAwMERBOUFGOTEwMDc4OEY4NEZGMjQzQzA3N0ZGRkU2Cis6MTA4QjIwMDAzNEU2RkZGRjhDODUwMDE4MjQwMjAwMDEwMEE2MTgyNEZCCis6MTA4QjMwMDBBQzgzMDAxODAzRTAwMDA4QTA4MjAwMDUzMDg0RkZGRjJBCis6MTA4QjQwMDAzMEE1RkZGRjEwODAwMDA3MDAwMDE4MjEzMDgyMDAwMUNGCis6MTA4QjUwMDAxMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjExNDgwRkZGQjMxCis6MTA4QjYwMDAwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjExMEMwMDAwNzQ1Cis6MTA4QjcwMDAwMDAwMDAwMDhDQTIwMDAwMjRDNkZGRkYyNEE1MDAwNDEyCis6MTA4QjgwMDBBQzgyMDAwMDE0QzBGRkZCMjQ4NDAwMDQwM0UwMDAwODUyCis6MTA4QjkwMDAwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkZBQzg2MDAwMDI2Cis6MTA4QkEwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkYyNDYzRkZGRjFDCis6MTA4QkIwMDAxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMEFGCis6MTA4QkMwMDAwMDA0MTFDMDAzRTAwMDA4MjQ0MjAyNDAyN0JERkZFODcyCis6MTA4QkQwMDBBRkIwMDAxMDAwODA4MDIxQUZCRjAwMTQwRTAwMEUzRjI4Cis6MTA4QkUwMDAwMEEwMjAyMTAwNTA0ODIxMjQwQUZGODA4RkJGMDAxNERDCis6MTA4QkYwMDA4RkIwMDAxMDAxMkEzMDI0MzEyNzAwN0YzQzA4ODAwQTAyCis6MTA4QzAwMDAzQzA0MjEwMDAwRTgxMDIxMDBDNDI4MjUzQzAzODAwMDFBCis6MTA4QzEwMDAyN0JEMDAxOEFDNjUwMDI0QUY4MjAwMjRBQzQwMDAwMEUyCis6MTA4QzIwMDBBQzY1MDAyNDAzRTAwMDA4QUM0MDAwNDAzQzBEMDgwMEE3Cis6MTA4QzMwMDA4REFEMDA1ODAwMDU2MTgwMjQwQUZGODAwMUE0NTgyMUYxCis6MTA4QzQwMDAwMTZDNDgyMTAxMkEzMDI0MzEyNzAwN0YzQzA4ODAwQzI4Cis6MTA4QzUwMDAzQzA0MjEwMDAwRTgxMDIxMDBDNDI4MjUzQzAzODAwMENBCis6MTA4QzYwMDBBQzY1MDAyOEFGODIwMDIwMDNFMDAwMDhBQzQwMDAyNDdGCis6MTA4QzcwMDAzMEE1RkZGRjNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRTE3Cis6MTA4QzgwMDAzQzA4NjAxNTAwQTgzODI1M0MwMzEwMDBBQ0M0MDE4MEU2Cis6MTA4QzkwMDBBQ0MwMDE4NEFDQzcwMTg4MDNFMDAwMDhBQ0MzMDFCOEQ0Cis6MTA4Q0EwMDAzQzBEMDgwMDhEQUQwMDU4MDAwNTYxODAyNDBBRkY4MDRFCis6MTA4Q0IwMDAwMUE0NTgyMTAxNkM0MDIxMDEwQTQ4MjQwMDA5MzE0MEQ3Cis6MTA4Q0MwMDAzMTA3MDA3RjAwQzcyODI1M0MwNDIwMDAwMEE0MTgyNTk4Cis6MTA4Q0QwMDAzQzAyODAwMEFDNDMwODMwMDNFMDAwMDhBRjgwMDAyMDc1Cis6MTA4Q0UwMDAyN0JERkZFOEFGQjAwMDEwMDA4MDgwMjFBRkJGMDAxNEE3Cis6MTA4Q0YwMDAwRTAwMEUzRjAwQTAyMDIxMDA1MDQ4MjEyNDBCRkY4MEQxCis6MTA4RDAwMDAwMTJCNTAyNDAwMEEzOTQwMzEyODAwN0YzQzA2MjAwMDA2Cis6MTA4RDEwMDA4RkJGMDAxNDhGQjAwMDEwMDBFODI4MjUzNEMyMDAwMTc2Cis6MTA4RDIwMDAwMEEyMTgyNTNDMDQ4MDAwMjdCRDAwMThBQzgzMDgzMDQxCis6MTA4RDMwMDAwM0UwMDAwOEFGODAwMDI0M0MwNTgwMDg4Q0E3MDA2MDk5Cis6MTA4RDQwMDAzQzA2ODAwODAwODcxMDJCMTQ0MDAwMTEyQzgzNDAwMDQzCis6MTA4RDUwMDA4Q0E4MDA2MDJEMDM0MDAwMTA2MDAwMEYyNDAzNDAwMDI5Cis6MTA4RDYwMDA4Q0M5MDA2MDAwODkyODJCMTRBMDAwMDIwMDgwMTgyMTAzCis6MTA4RDcwMDA4Q0MzMDA2MDAwMDM1QTQyMDAwQjMwODAzQzBBMDgwMDlDCis6MTA4RDgwMDAyNTRBNTNBMDAwQ0EyMDIxMDNFMDAwMDg4QzgyMDAwMDdECis6MTA4RDkwMDAxNDYwRkZGMzI0MDM0MDAwMDAwMzVBNDIwMDBCMzA4MEFDCis6MTA4REEwMDAzQzBBMDgwMDI1NEE1M0EwMDBDQTIwMjEwM0UwMDAwODFECis6MTA4REIwMDA4QzgyMDAwMDNDMDU4MDA4OTBBNjAwMDg5Mzg0MDA4OEZGCis6MTA4REMwMDAyNEMyMDAwMTMwNDIwMEZGMzA0MzAwN0YxMDY0MDAwQ0Q5Cis6MTA4REQwMDAwMDAyMzgyN0EwQTIwMDA4M0MwNDgwMDA4Qzg1MDE3ODlFCis6MTA4REUwMDAwNEEwRkZGRThGOEEwMDgwMjQwOTAwMDIzQzA4MTAwMEM2Cis6MTA4REYwMDBBQzhBMDE0MEEwODkwMTQ0MDNFMDAwMDhBQzg4MDE3OEY2Cis6MTA4RTAwMDAwQTAwMEVDNDMwRTIwMDgwMjdCREZGRDhBRkIyMDAxOEMwCis6MTA4RTEwMDA4RjkyMDA4NEFGQkYwMDIwQUZCMzAwMUNBRkIwMDAxMDMyCis6MTA4RTIwMDBBRkIxMDAxNDhGOTMwMDIwOEU1OTAwMjgzQzEwMDA4MEIxCis6MTA4RTMwMDAzQzBFRkZFRkFFNzkwMDAwOEU1ODAwMjRBMjYwMDAwQUJECis6MTA4RTQwMDAzNUNERkZGRkFFNzgwMDA0OTI1MTAwMkMzQzBCRkY5RjA0Cis6MTA4RTUwMDAzNTZBRkZGRkEyNzEwMDBDOEU2RjAwMEMzQzA4MDA0MEM5Cis6MTA4RTYwMDBBMjcxMDAwQjAxRjA2MDI1MDE4RDQ4MjQwMTJBMzgyNEVECis6MTA4RTcwMDAwMEU4MzAyNUFFNjYwMDBDOEU0NTAwMDRBRTYwMDAxODk4Cis6MTA4RTgwMDAzQzA0MDBGRkFFNjUwMDE0OEU0MzAwMkMzNDgyRkZGRkNCCis6MTA4RTkwMDBBNjYwMDAwODAwNjJGODI0QUU3RjAwMTA4RTU5MDAwODFBCis6MTA4RUEwMDA4RjkwMDA4MDk2NEUwMDEyQUU3OTAwMjA4RTUxMDAwQ0ZCCis6MTA4RUIwMDAzMUQ4M0ZGRjAwMTg3OTgwQUU3MTAwMjQ4RTREMDAxNDI4Cis6MTA4RUMwMDAwMUYwNjAyMTMxQ0IwMDAxQUU2RDAwMjg4RTRBMDAxODAwCis6MTA4RUQwMDAwMDBDNDFDMjAwMEI0QjgwQUU2QTAwMkM4RTQ2MDAxQzc5Cis6MTA4RUUwMDAwMTA5MzgyMUE2NjcwMDFDQUU2NjAwMzA5NjQ1MDAwMkQ1Cis6MTA4RUYwMDA4RTQ0MDAyMEE2NjUwMDFFQUU2NDAwMzQ5MjQzMDAzMzA5Cis6MTA4RjAwMDAzMDYyMDAwNDU0NDAwMDA2OTI0NzAwMDAzQzAyODAwODkyCis6MTA4RjEwMDAzNDQzMDEwMDhDN0YwMEMwQUU3RjAwMzA5MjQ3MDAwMEQ4Cis6MTA4RjIwMDA4Rjg2MDAyNEEwQzcwMDMwOTI0NTAwMzMzMEE0MDAwMjkxCis6MTA4RjMwMDA1MDgwMDAwNzkyNTEwMDAxOEY4ODAwMjQyNDBCRkY4MDhECis6MTA4RjQwMDA5MTBBMDAzMDAxNEI0ODI1QTEwOTAwMzA5MjUxMDAwMURGCis6MTA4RjUwMDA4RjkwMDAyNDI0MENGRkJGMjQwNEZGREZBMjExMDAzMUY2Cis6MTA4RjYwMDA4RjhEMDAyNDNDMTg4MDA4MzcxMTAwODA5MUFGMDAzQ0ExCis6MTA4RjcwMDAzMUVFMDA3RkExQUUwMDNDOEY4OTAwMjQ5MTJCMDAzQzk0Cis6MTA4RjgwMDAwMTZDNTAyNEExMkEwMDNDOEY5RjAwMjQ4RTY4MDAxNDlECis6MTA4RjkwMDA5M0U2MDAzQzJEMDcwMDAxMDAwNzExNDAwMEM0MjgyNDdGCis6MTA4RkEwMDAwMEEyMTgyNUEzRTMwMDNDOEY4NzAwMjQ5NjU5MDAxMkU1Cis6MTA4RkIwMDBBNEY5MDAzMjhFNDUwMDA0OTIyRTAwN0MzMEIwMDAwM0VDCis6MTA4RkMwMDAwMDEwNzgyMzMxRUQwMDAzMDBBRDEwMjEzMUNDMDAwMkY4Cis6MTA4RkQwMDAxNTgwMDAwMjI0NDYwMDM0MjQ0NjAwMzAzQzAyODAwOEZDCis6MTA4RkUwMDAzNDQzMDA4MDkwN0YwMDdDMDBCRkM4MjQzMzM4MDAwNEU1Cis6MTA4RkYwMDAxNzAwMDAwMjI0QzIwMDA0MDBDMDEwMjE4Rjk4MDAyNDMyCis6MTA5MDAwMDAyNDE5MDAwMkFDRTIwMDM0QTMxOTAwMDA5MjRGMDAzRjgzCis6MTA5MDEwMDA4RjhFMDAyNDNDMEM4MDA4MzU4QjAwODBBMUNGMDAwMThFCis6MTA5MDIwMDA4RjkxMDAyNDkyNEQwMDNGOEU0NDAwMDRBNjJEMDAwMjMzCis6MTA5MDMwMDA5NTZBMDA1QzBFMDAwRTlEMzE1MEZGRkYwMDAyNEI4MEQwCis6MTA5MDQwMDAwMTMwMzgyNTNDMDg0MjAwMDBFODI4MjVBRTI1MDAwNDAwCis6MTA5MDUwMDA4RTQ0MDAzODhGODUwMDI0QUNBNDAwMTg4RTQ2MDAzNDVFCis6MTA5MDYwMDBBQ0E2MDAxQ0FDQTAwMDBDQUNBMDAwMTBBNEEwMDAxNDg2Cis6MTA5MDcwMDBBNEEwMDAxNkE0QTAwMDIwQTRBMDAwMjJBQ0EwMDAyNDVDCis6MTA5MDgwMDA4RTYyMDAxNDUwNDAwMDAxMjQwMjAwMDE4RkJGMDAyMEI2Cis6MTA5MDkwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDc2Cis6MTA5MEEwMDBBQ0EyMDAwODBBMDAwRUJDMjdCRDAwMjgyN0JERkZDOERGCis6MTA5MEIwMDAzQzA1ODAwODM0QTQwMDgwQUZCRjAwMzRBRkJFMDAzMDUwCis6MTA5MEMwMDBBRkI3MDAyQ0FGQjYwMDI4QUZCNTAwMjRBRkI0MDAyMDc2Cis6MTA5MEQwMDBBRkIzMDAxQ0FGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEI2Cis6MTA5MEUwMDA5NDgzMDA3ODk0ODIwMDdBMTA0MzAwNTEyNDA1RkZGRjk2Cis6MTA5MEYwMDAwMDgwRjAyMTBBMDAwRkNDMDA4MEI4MjExMDhCMDA0REI5Cis6MTA5MTAwMDA4RkJGMDAzNDhGODYwMDgwM0MxODA4MDA4RjE4MDA1Q0U5Cis6MTA5MTEwMDAyNDExRkY4MDNDMTY4MDAwMDMwNjc4MjEwMUYxODAyNDkxCis6MTA5MTIwMDBBRUQwMDAyQzk2RUUwMDdBMzFFQzAwN0YzQzBEODAwRTI0Cis6MTA5MTMwMDAzMUNCN0ZGRjAxOEQ1MDIxMDAwQjQ4NDAwMTJBQTgyMTJGCis6MTA5MTQwMDA5NkE0MDAwMDNDMDgwODAwOEQwODAwNTgyNDA1RkY4MDA0Cis6MTA5MTUwMDAzMDk1M0ZGRjAxMDYxODIxMDAxNTM5ODAwMDY3QzgyMUFFCis6MTA5MTYwMDAwMzI1RjgyNDNDMDIwMTAwMDNFMjkwMjUzMzM4MDA3RkY4Cis6MTA5MTcwMDAzQzExODAwQ0FFRDIwMDI4MDMxMTkwMjE5MjUwMDAwREJBCis6MTA5MTgwMDAzMjBGMDAwNDExRTAwMDM3MDJFMDk4MjE5NkUzMDA3QUU0Cis6MTA5MTkwMDA5NkU4MDA3QTk2RTUwMDdBMjQwNDgwMDAzMTA3N0ZGRjg0Cis6MTA5MUEwMDAyNEUzMDAwMTMwNjI3RkZGMDBBNEY4MjQwM0UyQzgyNTE1Cis6MTA5MUIwMDBBNkY5MDA3QTk2RTYwMDdBM0MxNDA4MDA4RTk0MDA2MEM2Cis6MTA5MUMwMDAzMEQ2N0ZGRjEyRDQwMEMxMDAwMDAwMDA4RTU4MDAxODc2Cis6MTA5MUQwMDA4Rjg0MDA4MDAyQTAyODIxMjcxM0ZGRkYwRTAwMEU3NzQ2Cis6MTA5MUUwMDBBRTUzMDAyQzk3RDUwMDc4OTdENDAwN0ExMjk1MDAxMEQyCis6MTA5MUYwMDAwMDAwMjgyMTNDMDk4MDA4MzUyNDAxMDAzQzBBODAwODMxCis6MTA5MjAwMDA5MTQ4MDAwODkwODcwMEM1MzExNDAwN0YzMEU0MDBGRkNBCis6MTA5MjEwMDAwMjg0MzAyQjE0QzBGRkI5MjY4QjAwMDE5MzhFMDA4ODg2Cis6MTA5MjIwMDAyNjhDMDAwMTAwOEU2ODIxMTVBQ0ZGQjc4Rjg2MDA4MDY4Cis6MTA5MjMwMDA4RkJGMDAzNDhGQkUwMDMwOEZCNzAwMkM4RkI2MDAyODUwCis6MTA5MjQwMDA4RkI1MDAyNDhGQjQwMDIwOEZCMzAwMUM4RkIyMDAxODlDCis6MTA5MjUwMDA4RkIxMDAxNDhGQjAwMDEwMDBBMDEwMjEwM0UwMDAwOEFGCis6MTA5MjYwMDAyN0JEMDAzODAwQzAyMDIxMEUwMDBFNDIwMjgwMjgyMUI4Cis6MTA5MjcwMDA4RTRCMDAxMDhFNEMwMDMwOEY4NDAwMjQyNDA5MDAwMjk1Cis6MTA5MjgwMDAwMTZDNTAyM0FFNEEwMDEwQTA4OTAwMDA5NkUzMDA1Q0Y4Cis6MTA5MjkwMDA4RTQ0MDAzMDhGOTEwMDI0MEUwMDBFOUQzMDcwRkZGRjMxCis6MTA5MkEwMDAwMDAyNDM4MDAxMTAyODI1M0MwNzQyMDAwMEE3MTAyNTNBCis6MTA5MkIwMDBBRTIyMDAwNDhFNUYwMDA0OEY4QTAwMjQ4RTU5MDAwMEM1Cis6MTA5MkMwMDAyNDBCMDAwOEFENUYwMDFDQUQ1OTAwMThBRDQwMDAwQzI4Cis6MTA5MkQwMDBBRDQwMDAxMDkyNDYwMDBBMjQwNDAwMDUyNDA4QzAwMDk2Cis6MTA5MkUwMDAzMEQwMDBGRkE1NTAwMDE0OTY1ODAwMDhBNTU4MDAxNjZECis6MTA5MkYwMDA5MjUxMDAwQTNDMTg4MDA4MzIyRjAwRkZBNTRGMDAyMDMxCis6MTA5MzAwMDA5NjRFMDAwODM3MTEwMTAwQTU0RTAwMjJBRDQwMDAyNDAyCis6MTA5MzEwMDA5MjREMDAwQjMxQUMwMEZGQTU0QzAwMDJBMTRCMDAwMUE3Cis6MTA5MzIwMDA4RTQ5MDAzMDhGODMwMDI0MjQwQkZGQkZBQzY5MDAwOEY2Cis6MTA5MzMwMDBBMDY0MDAzMDhGOTAwMDI0MjQwM0ZGREY5NjA3MDAzMkUyCis6MTA5MzQwMDAwMEU4MjgyNDAwQjUxMDI1QTYwMjAwMzI5MjFGMDAzMjQyCis6MTA5MzUwMDAzM0Y5MDAzRjM3MjYwMDQwQTIwNjAwMzI4RjhDMDAyNEVDCis6MTA5MzYwMDBBRDgwMDAzNDhFMkYwMEMwQUQ4RjAwMzg5MThFMDAzQzUwCis6MTA5MzcwMDAzQzBGN0ZGRjMxQ0QwMDdGQTE4RDAwM0M4Rjg0MDAyNDA2Cis6MTA5MzgwMDAzNUVFRkZGRjkwOEEwMDNDMDE0QjQ4MjRBMDg5MDAzQzQ5Cis6MTA5MzkwMDA4Rjg1MDAyNDkwQTgwMDNDMDEwMzM4MjRBMEE3MDAzQzNFCis6MTA5M0EwMDA4RTQyMDAzNDhGOTEwMDI0M0MwMzgwMDhBRTIyMDA0MDlFCis6MTA5M0IwMDA4RTU5MDAyQzhFNUYwMDMwMDMzRjMwMjNBRTI2MDA0NEQwCis6MTA5M0MwMDA5MjMwMDA0ODMyMTgwMDdGQTIzODAwNDg4Rjg4MDAyNDZECis6MTA5M0QwMDA4RTREMDAzMDhEMEMwMDQ4MDFBRTU4MjQwMTk2NTAyNDZCCis6MTA5M0UwMDAwMTRCNDgyNUFEMDkwMDQ4OTI0NDAwMEFBMTA0MDA0Q0Y1Cis6MTA5M0YwMDA5NjQ3MDAwODhGODUwMDI0QTRBNzAwNEU4RTUwMDAzMEE5Cis6MTA5NDAwMDA4RTQ0MDAzMDBFMDAwMkU2OEM2NTAwNjA5MkY5MDA3QzBDCis6MTA5NDEwMDAwMDAyRjk0MDAwNDAyODIxMDAwMjExMDAwM0UyMzAyMTNGCis6MTA5NDIwMDAzMzM2MDAwMjEyQzAwMDAzMDIwNjgwMjEwMDA1QjA4MDFFCis6MTA5NDMwMDAwMjE2ODAyMTkyNkQwMDdDMzFCMzAwMDQxMjYwMDAwMjlDCis6MTA5NDQwMDAwMDA1NzA4MDAyMEU4MDIxOEU0QjAwMzAyNDA1ODAwMEM0Cis6MTA5NDUwMDAzMTZBMDAwMzAwMEE0ODIzMzEyNDAwMDMwMjA0MTgyMTYyCis6MTA5NDYwMDA4RjkwMDAyNEFFMDMwMDM0OTZFNDAwN0E5NkU4MDA3QUU4Cis6MTA5NDcwMDA5NkYxMDA3QTMxMDc3RkZGMjRFMjAwMDEzMDVGN0ZGRjIxCis6MTA5NDgwMDAwMjI1QzgyNDAzM0YzMDI1QTZFNjAwN0E5NkY4MDA3QTI0Cis6MTA5NDkwMDAzQzEyMDgwMDhFNTIwMDYwMzMwRjdGRkYxMUYyMDAxODVCCis6MTA5NEEwMDAwMDAwMDAwMDhGODQwMDgwMEUwMDBFNzcwMkEwMjgyMUFCCis6MTA5NEIwMDA4Rjg0MDA4MDBFMDAwRTg3MDI4MDI4MjEwRTAwMEVCQ0QzCis6MTA5NEMwMDAwMDAwMDAwMDBBMDAwRkM4MDAwMDAwMDA5NkYxMDA3QUJBCis6MTA5NEQwMDAwMjI0ODAyNEE2RjAwMDdBOTJFRjAwN0E5MkVCMDA3QUMwCis6MTA5NEUwMDAzMUVFMDBGRjAwMEU2OUMyMDAwRDYwMjcwMDBDNTFDMDc0Cis6MTA5NEYwMDAzMTY5MDA3RjAxMkEyMDI1MEEwMDBGQzJBMkU0MDA3QTA4Cis6MTA5NTAwMDA5NkU2MDA3QTAwQzVDMDI0QTZGODAwN0E5MkVGMDA3QUE5Cis6MTA5NTEwMDA5MkYzMDA3QTMxRjIwMEZGMDAxMjcxQzIwMDBFNjgyNzQ4Cis6MTA5NTIwMDAwMDBEQjFDMDMyNkMwMDdGMDE5NjI4MjVBMkU1MDA3QUJCCis6MTA5NTMwMDAwQTAwMTA3OThGODQwMDgwM0MwMzgwMDAzMDg0RkZGRjk0Cis6MTA5NTQwMDAzMEE1RkZGRkFDNjQwMDE4QUM2NTAwMUMwM0UwMDAwODA4Cis6MTA5NTUwMDA4QzYyMDAxNDI3QkRGRkE4M0MwNjgwMDhBRkJFMDA1MEY3Cis6MTA5NTYwMDBBRkJGMDA1NEFGQjcwMDRDQUZCNjAwNDhBRkI1MDA0NDMyCis6MTA5NTcwMDBBRkI0MDA0MEFGQjMwMDNDQUZCMjAwMzhBRkIxMDAzNDdECis6MTA5NTgwMDBBRkIwMDAzMDM0QzgwMTAwOTEwNTAwQzU5MEM3MDAwODk1Cis6MTA5NTkwMDAzMDlFRkZGRjMwQTUwMEZGMzBFMjAwN0YwMDQ1MTgyQTEzCis6MTA5NUEwMDBBN0EwMDAxNEE3QTAwMDFFMTA2MDAwNTNBRkEwMDAxMEQ5Cis6MTA5NUIwMDA5MEM5MDAwODMxMjYwMDdGMDBBNjIwMjMyNDkzRkZGRkQ2Cis6MTA5NUMwMDAwMDEzODAyQjAwMUU4ODJCMDIxMTc4MjQ1MUUwMDA4NEE4Cis6MTA5NUQwMDA4RkIzMDAxMDNDMTk4MDA4OTczNjAwNTI5NzM3MDA1MDFGCis6MTA5NUUwMDAwMDFFQzQwMDAyRDdBODIzMDAxNUE0MDAwMDE0MTQwMzExCis6MTA5NUYwMDAwM0MyOTAyQTE2NDAwMDAyMDAxODJDMDMwMDQwMjgyMUM0Cis6MTA5NjAwMDAwMDEzMTQwMDAwMDIyNDAzMDBBNEY4MkE1N0UwMDAwMTBDCis6MTA5NjEwMDAwMEEwMjAyMTI4ODMwMDA5MTQ2MDAwMDIwMDgwQTAyMUZFCis6MTA5NjIwMDAyNDE0MDAwODNDMEE4MDA4OEQ0NTAwNDgwMDE0NDk4MDM1Cis6MTA5NjMwMDA4RDQ4MDA0QzNDMDM4MDAwMzEyNEZGRkYzQzA2MDAxMEE1Cis6MTA5NjQwMDAwMDg2MzgyNTM0NzEwNDAwQUM2NTAwMzhBRjkxMDA4NDgxCis6MTA5NjUwMDBBQzY4MDAzQ0FDNjcwMDMwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTA5NjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTA5NjcwMDAwMDAwMDAwMDAwMDAwMDAwOEM2QzAwMDAzMThCMDAyMDE2Cis6MTA5NjgwMDAxMTYwRkZGRDAwMTQ2ODJBMDFCMDEwMjQxMDQwMDAzOTU5Cis6MTA5NjkwMDAwMDAwQTgyMTNDMTY4MDA4OTJENzAwMDgzQzEyODAwMEU4Cis6MTA5NkEwMDA4RTQ0MDEwMDMyRjYwMDdGMEUwMDBFNDIwMkMwMjgyMUQ3Cis6MTA5NkIwMDA4RTJGMDAxMDhFNDQwMTAwMDAwMDkwMjEzMUY3M0ZGRkYzCis6MTA5NkMwMDAwRTAwMEU1QTAyRTAyODIxOTIyRTAwMDAzMUMyMDAzRjA3Cis6MTA5NkQwMDAyQzUwMDAwODUyMDAwMDEwMDAwMDg4MjEwMDAyRjg4MDgxCis6MTA5NkUwMDAzQzAzMDgwMDI0NjM1MzU0MDNFM0M4MjE4RjM4MDAwMDZGCis6MTA5NkYwMDAwMzAwMDAwODAwMDAwMDAwOTBDRTAwMDg5MzhCMDA4ODUzCis6MTA5NzAwMDAzMUNEMDA3RjAwQUQ2MDIzMDE2QzUwMjEwQTAwMTBCRkY1Cis6MTA5NzEwMDAyNTUzRkZGRjAwMDA4ODIxM0MxMDgwMDA4RTA0MDEwMENCCis6MTA5NzIwMDAwRTAwMEU3NzAyRTAyODIxOEUwNDAxMDAwRTAwMEU4NzQ1Cis6MTA5NzMwMDAwMkMwMjgyMTEyMjAwMDBGMDAxMzgwMkI4RjhBMDA4NDgyCis6MTA5NzQwMDAyNkE5MDAwMTAwMDlBQzAwMDI3Mjk4MjMwMDE1QUMwM0ExCis6MTA5NzUwMDAyNTQ1MDA0MDAyQjRCMDJBMDAxMzgwMkIyNDE3MDAwMUQ1Cis6MTA5NzYwMDAwMEEwODgyMTAyRDAxMDI0QUY4NTAwODQxNDQwRkZDOUQ2Cis6MTA5NzcwMDBBRkI3MDAxMDNDMDc4MDA4OTRGMTAwNTAzQzA1ODAwMDEyCis6MTA5NzgwMDAzQzA2MDAyMDAyQjFDODIxQTRGOTAwNTBBQ0E2MDAzMDZDCis6MTA5NzkwMDA5NEY0MDA1MDk0RTMwMDUyMDNENTYwMjMxMDc0MDAxRDJDCis6MTA5N0EwMDAzMTlFRkZGRjhDRTUwMDRDOENFOTAwNDgwMDE1NjE4MDdDCis6MTA5N0IwMDAwMEFDQjAyMTAwMDBBMDIxMDJDQ0E4MkIwMTM0NTAyMTI0Cis6MTA5N0MwMDAwMTU1QjgyMUFDRjYwMDRDQUNGNzAwNDgwMDFFODgyQkMwCis6MTA5N0QwMDAwMjExNzgyNDE1RTBGRjgwM0MxOTgwMDg4RkIzMDAxMDM3Cis6MTA5N0UwMDA4RkJGMDA1NDhGQkUwMDUwM0E2MjAwMDE4RkI3MDA0QzBCCis6MTA5N0YwMDA4RkI2MDA0ODhGQjUwMDQ0OEZCNDAwNDA4RkIzMDAzQzUzCis6MTA5ODAwMDA4RkIyMDAzODhGQjEwMDM0OEZCMDAwMzAwM0UwMDAwODExCis6MTA5ODEwMDAyN0JEMDA1ODk0RjIwMDU0OENFRjAwNDQzMjVGRkZGRUU1Cis6MTA5ODIwMDAwMDFGQzBDMDAxRjg3MDIxQUNBRTAwM0M4Q0VCMDA0NEJFCis6MTA5ODMwMDA4Q0FEMDAzQzAxNkQ0MDIzMTkwMDAwM0IwMDAwMDAwMDhFCis6MTA5ODQwMDA4Q0UyMDA0MDI0NDIwMDAxM0MwNzAwNTAzNEU0MDAxMDQ4Cis6MTA5ODUwMDAzQzAzODAwMEFDQTIwMDM4QUM2NDAwMzAwMDAwMDAwMDgzCis6MTA5ODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTA5ODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Qzc2MDAwMEU2Cis6MTA5ODgwMDAzMkQ3MDAyMDEyRTBGRkZEM0MxMTgwMDg5NjI4MDA1NERBCis6MTA5ODkwMDAzQzBBODAwMDNDMDY4MDA4MzExOTAwMDEwMDE5NjBDMEI0Cis6MTA5OEEwMDAwMThBQTAyMThFODMwNDAwM0MwNzA4MDA4Q0U3MDA0NDU1Cis6MTA5OEIwMDAzQzE1MDAyMEFDQzMwMDQ4OEU4OTA0MDQyNDA1MDAwMTM3Cis6MTA5OEMwMDBBQ0M5MDA0QzEwRTUwMjU5QUQ1NTAwMzA5NjNGMDA1MjJFCis6MTA5OEQwMDAzQzA1MDgwMDhDQTUwMDQwMDBCRkMwMjFBNjM4MDA1MkZFCis6MTA5OEUwMDA5NjJGMDA1NDI1RUUwMDAxQTYyRTAwNTQ5NjI2MDA1NDEzCis6MTA5OEYwMDAzMEM0RkZGRjU0ODdGRjM0MDAxRTg4MkIzMEE1RkZGRkM0Cis6MTA5OTAwMDAwRTAwMTA5REE2MjAwMDU0M0MwNDA4MDA4Qzg0MDAyNDA2Cis6MTA5OTEwMDA5NjI3MDA1MjAwNDQxMDIzMDBFMjkwMjNBNjMyMDA1MjAyCis6MTA5OTIwMDAwQTAwMTBDMTAwMUU4ODJCOENFMjAwNDAwQTAwMTE2MjYwCis6MTA5OTMwMDAzQzA3MDA1MDkyMjgwMDAxMjQwNzAwMDEzMTAyMDA3RkZCCis6MTA5OTQwMDAxNDQ3MDAxQzk3QUMwMDFFOEUyQTAwMTQyNDBCQzAwMDg0Cis6MTA5OTUwMDAzMTQ0M0ZGRjAxOEI0ODI0M0MwNjA4MDA4Q0M2MDA2MDYwCis6MTA5OTYwMDAwMTI0MjgyNTMwQTQzRkZGMDA4Njg4MkIxMjIwMDAxMUY3Cis6MTA5OTcwMDBBN0E1MDAxRTNDMTEwODAwOEUzMTAwNTg4RjgyMDA4MDgwCis6MTA5OTgwMDAwMDA0NDE4MDI0MDdGRjgwMDIyMjE4MjEwMDY4RjgyMThBCis6MTA5OTkwMDAwM0U3QzgyNDMzRUYwMDdGM0MxODgwMDAzQzEyODAwRUEwCis6MTA5OUEwMDBBRjE5MDAyQzAxRjI2ODIxOTFBRTAwMEQzNUQwMDAwNEYyCis6MTA5OUIwMDBBMUIwMDAwRDBFMDAwRUQxMjQxMjAwMDEyNDExMDAwMUVGCis6MTA5OUMwMDAzQzEwODAwMDhFMDQwMTAwMEUwMDBFNzcwMkUwMjgyMTdBCis6MTA5OUQwMDA4RTA0MDEwMDBFMDAwRTg3MDJDMDI4MjExNjIwRkY1OEI5Cis6MTA5OUUwMDA4RjhBMDA4NDBBMDAxMTJDMDAxMzgwMkI4Rjg2MDA4NDNDCis6MTA5OUYwMDA5MEM5MDAwMTMxMjUwMDIwMTBBMDAxOEEyNDEwMDAwMTI3Cis6MTA5QTAwMDAzQzA0ODAwODM0OEMwMDgwOTE4QjAwN0M4RjkxMDAyMDc2Cis6MTA5QTEwMDAwMDAwOTAyMTMxNkEwMDAxMTE0MDAwMEZBRkIwMDAyMDFBCis6MTA5QTIwMDA4Q0QwMDAxNDhDOEUwMDYwMDIwRTY4MkIxNUEwMDAwM0YxCis6MTA5QTMwMDAwMjAwMzgyMThDODcwMDYwM0MwNDgwMDgzNDgzMDA4MDU5Cis6MTA5QTQwMDA4QzcyMDA3MDAwRjI3ODJCMTVFMDAwMDIwMEUwMjAyMUZCCis6MTA5QTUwMDA4QzY0MDA3MDAwODA5MDIxM0MwNzgwMDgzNEU1MDA4MDExCis6MTA5QTYwMDA4Q0Q5MDAxNDhDQkYwMDcwMDMzRkMwMkIxNzAwMDAwMjdDCis6MTA5QTcwMDAwMzIwMjAyMThDQTQwMDcwMDA5MjE4MjMxMDYwMDAwM0EyCis6MTA5QTgwMDBBRkEzMDAyODI0MDgwMDAyQUZBODAwMjA4RkE1MDAyMDYzCis6MTA5QTkwMDAwMjY1MTAyQjE0NDAwMEI1MDAwMDE4MjE4Q0M0MDAzODVBCis6MTA5QUEwMDA4RTJGMDAwQzNDMTgwMDgwQUUyNDAwMDA4Q0NFMDAzNEI5Cis6MTA5QUIwMDAzQzEwRkY5RjAxRjg2MDI1QUUyRTAwMDQ5MENCMDAzRkM0Cis6MTA5QUMwMDAzNjBERkZGRjAxOEQ0ODI0M0MwQTAwMjAzQzA2RkZFRkM1Cis6MTA5QUQwMDBBMjJCMDAwQjAxMkEzODI1MzRDNUZGRkYwMEU1NDAyNEU2Cis6MTA5QUUwMDAzQzAyMDAwODhGODcwMDg0MDEwMjIwMjVBRTI0MDAwQzcwCis6MTA5QUYwMDA4Q0UzMDAxNEFFMjAwMDE4OEZBRjAwMjhBRTIzMDAxNEIyCis6MTA5QjAwMDA4Q0Y4MDAxODNDMUZGRkZCMzdGOUZGRkZBRTM4MDAxQzM0Cis6MTA5QjEwMDA4Q0VFMDAwODAwOTk2ODI0MDI0RjgwMjFBRTJFMDAyNEFDCis6MTA5QjIwMDA4Q0VDMDAwQ0FFMkQwMDBDQTYyMDAwMzhBNjIwMDAzQUNDCis6MTA5QjMwMDBBRTMwMDAyQ0FFMkMwMDIwQUUyMDAwMjg4Q0VCMDAxNEEwCis6MTA5QjQwMDA4RkFBMDAyODAxNzI0ODIzMDEyQTMwMjMxMEMwMDAxMTc3Cis6MTA5QjUwMDBBRTI2MDAxMDkwRjAwMDNEOEUyQzAwMDQ4RTJBMDAwMEVFCis6MTA5QjYwMDAwMDEwNjkwMDAxOEQyODIxMDAwMDEwMjEwMEFEMzAyQjZDCis6MTA5QjcwMDAwMTQyNDgyMTAxMjY0MDIxQUUyNTAwMDRBRTI4MDAwMDA0Cis6MTA5QjgwMDA5MEUzMDAzREEyMjMwMDBBOEY5RjAwODQ5N0Y5MDAwNjBFCis6MTA5QjkwMDBBNjM5MDAwODhGOEEwMDI0MjQwMjAwMDIzQzA2ODAwOEFGCis6MTA5QkEwMDBBMTQyMDAwMDM0QzkwMDgwOTUyNTAwNUMwMjQwMjAyMUJDCis6MTA5QkIwMDA4RjkwMDAyNDMwQThGRkZGMEUwMDBFOURBRkE4MDAyNDU4Cis6MTA5QkMwMDA4RkEzMDAyNDAwMDJGQjgwOEY4NTAwODQzQzA0NDIwMEE4Cis6MTA5QkQwMDAwM0UzQzgyNTAzMjRDMDI1QUUxODAwMDQ4Rjg0MDAyNEE1Cis6MTA5QkUwMDA4Q0FGMDAzOEFDOEYwMDE4OENBRTAwMzRBQzhFMDAxQ0VCCis6MTA5QkYwMDBBQzgwMDAwQ0FDODAwMDEwQTQ4MDAwMTRBNDgwMDAxNjdGCis6MTA5QzAwMDBBNDgwMDAyMEE0ODAwMDIyQUM4MDAwMjQ5MEE3MDAzRjA0Cis6MTA5QzEwMDBBNDg3MDAwMjUyNDAwMThDMjQwNzAwMDE4RkFCMDAyODZBCis6MTA5QzIwMDA1MTYwMDAwMjkwQTIwMDNEOTBBMjAwM0UyNDRDMDAwMTMxCis6MTA5QzMwMDBBMDhDMDAwMThGODQwMDI0QUM5MjAwMDgzQzE4ODAwODlFCis6MTA5QzQwMDAzNzEwMDA4MDkyMEYwMDdDMzFFRTAwMDIxNUMwMDAwMjM4Cis6MTA5QzUwMDAyNDA3MDAzNDI0MDcwMDMwOEY4NTAwODQzQzA4ODAwOEU2Cis6MTA5QzYwMDAzNTA5MDA4MDkwQTMwMDAwOTEyODAwN0MzMjU5MDAwMzQwCis6MTA5QzcwMDBBMDgzMDAzMDhGOUYwMDg0OEY5MDAwMjQyNDA0MDAwNDcwCis6MTA5QzgwMDA5M0Y4MDAwMTAwOTk3ODIzMjQwREMwMDBBMjE4MDAzMTM4Cis6MTA5QzkwMDA4Rjk5MDAyNDhGOEUwMDg0MzFFNTAwMDM5NzJDMDAzMkM5Cis6MTA5Q0EwMDA5NUNCMDAxMjAwRjI0ODIxMDE4RDUwMjQzMTYyM0ZGRjE0Cis6MTA5Q0IwMDAwMTQyMzAyNUE3MjYwMDMyOTMyMzAwMzIwMTI1MzgyMUE2Cis6MTA5Q0MwMDAzMTA4MDAwNDMwN0YwMDNGMzdFNDAwNDBBMzI0MDAzMjE1Cis6MTA5Q0QwMDAxMjQwMDAwMjhGODUwMDI0MDBFODM4MjEzQzBDODAwOEU3Cis6MTA5Q0UwMDBBQ0E3MDAzNDM1OEIwMTAwOEQ2MjAwQzAyRTQ0MDAwMTBBCis6MTA5Q0YwMDAyNDAzRkZERkFDQTIwMDM4OTBBQTAwM0MwMDA0Qzk0MDU2Cis6MTA5RDAwMDAzMTQ2MDA3RkEwQTYwMDNDOEY4OTAwMjQyNDA1RkZCRkI4Cis6MTA5RDEwMDA5MTI3MDAzQzAwRTU0MDI0QTEyODAwM0M4RjhGMDAyNEJGCis6MTA5RDIwMDA5MUZGMDAzQzAzRTNDMDI0MDMxOTgwMjVBMUYwMDAzQzBGCis6MTA5RDMwMDA4RjhCMDA4NDhGOEEwMDI0OEQ2RTAwMjBBRDRFMDA0MEYyCis6MTA5RDQwMDA4RDZEMDAyNEFENEQwMDQ0OEQ2QzAwMjhBRDRDMDA0ODU1Cis6MTA5RDUwMDA4RDYyMDAyQzBFMDAwRUJDQUQ0MjAwNEM4RkE2MDAyMDgwCis6MTA5RDYwMDAyNDA3MDAwMjEwQzcwMDExOEZBMzAwMjAwMDAzMjAyQjNFCis6MTA5RDcwMDAwMDA0ODAyMzAyNzA5ODI0MDA2MDgwMjEwMDYwOTAyMUZDCis6MTA5RDgwMDAwQTAwMTExNTAwMTA4ODJCOTYyNzAwMTI4Rjg0MDA4MDdFCis6MTA5RDkwMDAwMDAwOTAyMTMwRTVGRkZGQTdBNzAwMTQwRTAwMEU2QjE2Cis6MTA5REEwMDAyNDExMDAwMTBBMDAxMUMwM0MxMDgwMDAzQzE5ODAwMDAxCis6MTA5REIwMDAzQzAyODAwODhGMjQwMTAwOTA1ODAwMDgwRTAwMEU0MkRCCis6MTA5REMwMDAzMzA1MDA3RjhGOEUwMDI0OEZBRjAwMjA4RkE0MDAyOEUyCis6MTA5REQwMDBBMUNGMDAwMDBFMDAwRTlEOEY5MDAwMjQ4RkFEMDAyNEI3Cis6MTA5REUwMDAwMDAyM0I4MDNDMEI0MjAwMDBFRDQwMjU4Rjg3MDA4NDQxCis6MTA5REYwMDAwMTBCMjAyNUFFMDQwMDA0OENFNTAwMzg4RjkwMDAyNDcwCis6MTA5RTAwMDAwMDAwNTAyMTAwMEExOTAwQUUwNTAwMTg4Q0VDMDAzNDQ3Cis6MTA5RTEwMDAzQzA4N0ZGRjM1MDRGRkZGQUUwQzAwMUM5MEU5MDAzRUJDCis6MTA5RTIwMDA4RTFGMDAxQzhFMTgwMDE4MDAwOUM5MDAwMDA5MzcwMjk3Cis6MTA5RTMwMDAwM0Y5NjgyMTAwNjYxMDI1MDFCOTc4MkIwMzAyNzAyMTBGCis6MTA5RTQwMDAwMUNGNTgyMUFFMEQwMDFDQUUwQjAwMThBRTAwMDAwQzY3Cis6MTA5RTUwMDBBRTAwMDAxMDkwRTUwMDNFOEZBRjAwMjgyNDBFMDAwNUY0Cis6MTA5RTYwMDBBNjA1MDAxNDk0RUMwMDA0MjQwNUMwMDAwMUU0NTgyNDY1Cis6MTA5RTcwMDBBNjBDMDAxNjkwRUEwMDNFMDFFMDIwMjFBNjBBMDAyMDcwCis6MTA5RTgwMDA5NEU2MDAwNEE2MDYwMDIyQUUwMDAwMjQ5MEUzMDAzRjAyCis6MTA5RTkwMDBBNjAzMDAwMjkwRTkwMDNFOTBGRjAwM0QwM0U5QzgyM0JECis6MTA5RUEwMDAyNzM4MDAwMUEyMTgwMDAxOEY4RDAwMjQzQzEwODAwODgzCis6MTA5RUIwMDBBREFGMDAwOEExQUUwMDMwOEY5ODAwMjQ4RjgyMDA4NERGCis6MTA5RUMwMDAzNjBGMDEwMDk3MEMwMDMyOTQ0QTAwMTIyNDEwRkY4MEQ0Cis6MTA5RUQwMDAwMEFDMzgyNDMxNDYzRkZGMDBFNjE4MjVBNzAzMDAzMkM2Cis6MTA5RUUwMDA5MzA5MDAzMjI0MDVGRkJGMjQwM0ZGREYzMTNGMDAzRjA5Cis6MTA5RUYwMDAzN0Y5MDA0MEEzMTkwMDMyOEY4QzAwMjQyNDE4RkZGRjhCCis6MTA5RjAwMDBBRDgwMDAzNDhERUUwMEMwQUQ4RTAwMzg5MThEMDAzQ0U4Cis6MTA5RjEwMDAzMUEyMDA3RkExODIwMDNDOEY4NzAwMjQ5MEVBMDAzQ0EwCis6MTA5RjIwMDAwMTQ1MzAyNEEwRTYwMDNDOEY5OTAwMjQ5MzI5MDAzQzkxCis6MTA5RjMwMDAwMTIzRjgyNEEzM0YwMDNDOEY4RDAwMjQzQzFGODAwOEEwCis6MTA5RjQwMDBBREI4MDA0MEFEQjIwMDQ0OTFBRjAwNDgzQzEyODAwMDczCis6MTA5RjUwMDAwMUYwNzAyNUExQUUwMDQ4OEY4NzAwMjQ4Rjg2MDA4NDExCis6MTA5RjYwMDA4Q0VDMDA0ODAxOTIxMDI0MDA0QjUwMjVBQ0VBMDA0OENDCis6MTA5RjcwMDA5MEM1MDAzRUEwRTUwMDRDOEY4ODAwODQ4RjgzMDAyNEFDCis6MTA5RjgwMDA5NTA5MDAwNEE0NjkwMDRFOEZFNTAwNjAwRTAwMDJFNjBBCis6MTA5RjkwMDAwMDAwMDAwMDhGOTlGRjJDOEZBRTAwMjgwMDAyODE0MDQ2Cis6MTA5RkEwMDA5MzJGMDA3QzAwMDJDMTAwMDIxODY4MjEzMUYyMDAwMkU4Cis6MTA5RkIwMDAwMDQwMjgyMTE2NDAwMEFBMDFDRDMwMjEzQzBBODAwODJCCis6MTA5RkMwMDAzNTQzMDA4MDkwNjkwMDdDMzEzRjAwMDQxM0UwMDAwM0JBCis6MTA5RkQwMDA4RkFFMDAyODAwMDU2MDgwMDBDQzMwMjEyNDBEMDAwNEU1Cis6MTA5RkUwMDA4RjkwMDAyNDMxQzcwMDAzMDFBNzU4MjMzMTY4MDAwMzc0Cis6MTA5RkYwMDAwMEM4MjAyMUFFMDQwMDM0M0MwNjgwMDhBNjI1MDAzOEE1Cis6MTBBMDAwMDAzQzA1ODAwMDhDQTQwMTAwOTBEMTAwMDgwRTAwMEU4NzUyCis6MTBBMDEwMDAzMjI1MDA3RjBFMDAwRUJDMDAwMDAwMDAwQTAwMTJBQUNDCis6MTBBMDIwMDA4RkEzMDAyMDhGODUwMDIwOENDMjAwMzgyNDE4MDAwM0U1Cis6MTBBMDMwMDBBNEEwMDAwOEFDQTIwMDAwOENERjAwMzRBMEEwMDAwQTlECis6MTBBMDQwMDA4RjkyMDA4NEFDQkYwMDA0M0MwNDAwODA5MjRGMDAzRjFDCis6MTBBMDUwMDBBMEI4MDAwQzhDQUUwMDBDM0MwREZGOUZBMEFGMDAwQjE1Cis6MTBBMDYwMDAwMUM0NDAyNTM1QUJGRkZGM0MxMUZGRUY4Rjk4MDA4NDAyCis6MTBBMDcwMDAwMTBCMzAyNDM2MzlGRkZGMDBEOTYwMjRBQ0FDMDAwQzUyCis6MTBBMDgwMDA4RjAzMDAxNDk3MUYwMDEyOEY4NzAwODBBQ0EzMDAxMDZECis6MTBBMDkwMDA4RjA5MDAxNEFDQTAwMDE4QUNBMDAwMjBBQ0E5MDAxNERCCis6MTBBMEEwMDBBQ0EwMDAyNDhGMEEwMDE4MzNFOTNGRkYwMDA5MTE4MDlCCis6MTBBMEIwMDBBQ0FBMDAyODhGMTIwMDA4MDA0Nzc4MjEzM0VFMDAwMTc3Cis6MTBBMEMwMDBBQ0IyMDAzMDhGMDgwMDBDOEY5OTAwMjQwMDBGNjlDMkQ5Cis6MTBBMEQwMDAwMDBFMjM4MDAxQTQ1ODIxMjQxMTAwMDIzQzA2ODAwOEIwCis6MTBBMEUwMDBBNEFCMDAxQ0E0QTAwMDM0QUNBODAwMkNBMzMxMDAwMDM5Cis6MTBBMEYwMDAzNEQ5MDA4MDk3MkMwMDVDOEY4RjAwMjQzQzAzNDIwMEYxCis6MTBBMTAwMDAzMThBRkZGRjAxNDMzODI1QURFNzAwMDQ4RjgyMDA4NEM4Cis6MTBBMTEwMDAyNDE4MDAwMTI0MTFDMDAwOEM1RjAwMzgyNDA3MDAzNDhCCis6MTBBMTIwMDBBREZGMDAxODhDNTIwMDM0QURGMjAwMUNBREUwMDAwQzA1Cis6MTBBMTMwMDBBREUwMDAxMEE1RTAwMDE0QTVFMDAwMTZBNUUwMDAyMEE5Cis6MTBBMTQwMDBBNUUwMDAyMkFERTAwMDI0QTVGMDAwMDJBMUY4MDAwMTg2Cis6MTBBMTUwMDA4RjhCMDAyNDhGOEUwMDg0QUQ3MDAwMDg5MUNEMDAwMDlECis6MTBBMTYwMDBBMTZEMDAzMDhGODgwMDg0OEY4NDAwMjQ5MTA1MDAwMTQ4Cis6MTBBMTcwMDBBMDg1MDAzMThGOTIwMDI0OTY0QzAwMzIwMTkxNTAyNDJBCis6MTBBMTgwMDAwMTQ5MTgyNUE2NDMwMDMyOTI1RjAwMzIzM0UyMDAzRkI2Cis6MTBBMTkwMDBBMjQyMDAzMjkzMzgwMDdDMzMwRjAwMDIxNUUwMDAwMjI3Cis6MTBBMUEwMDA4Rjg0MDAyNDI0MDcwMDMwM0MwMjgwMDhBQzg3MDAzNEYwCis6MTBBMUIwMDAzNDUyMDEwMDhFNUYwMEMwMjQwRUZGQkYwMjAwOTAyMUM4Cis6MTBBMUMwMDBBQzlGMDAzODkwOTgwMDNDMzMwRjAwN0ZBMDhGMDAzQzdDCis6MTBBMUQwMDA4Rjg4MDAyNDkxMEQwMDNDMDFBRTU4MjRBMTBCMDAzQzU3Cis6MTBBMUUwMDA4Rjg2MDAyNDkwRDEwMDNDMzYzOTAwMjBBMEQ5MDAzQzU1Cis6MTBBMUYwMDA4RjhBMDA4NDhGODUwMDI0MDAxMDg4MkI4RDRDMDAyMENFCis6MTBBMjAwMDBBQ0FDMDA0MDhENDMwMDI0QUNBMzAwNDQ4RDQ5MDAyODMxCis6MTBBMjEwMDBBQ0E5MDA0ODhENDcwMDJDQUNBNzAwNEMwRTAwMEVCQzJBCis6MTBBMjIwMDAzQzEwODAwMDBBMDAxMTE2MDAwMDAwMDA5NENEMDA1MjdFCis6MTBBMjMwMDAzQzBCMDgwMDhENkIwMDI0MDE2RDg4MjFBNEQxMDA1MkQ1Cis6MTBBMjQwMDAwQTAwMTBDMTAwMUU4ODJCQTA4NzAwMDE4Rjg0MDAyNDAzCis6MTBBMjUwMDAyNDBEMDAwMUFDOEQwMDA4MEEwMDEyNUYzQzE4ODAwODM0Cis6MTBBMjYwMDAwMDAyOTA4MDBBMDAxMzNFMDBEMjMwMjEyN0JERkZFMDlCCis6MTBBMjcwMDAzQzBEODAwOEFGQjIwMDE4QUZCMDAwMTBBRkJGMDAxQzlCCis6MTBBMjgwMDBBRkIxMDAxNDM1QjIwMDgwOEU0QzAwMTgzNUE4MDEwMDIzCis6MTBBMjkwMDA5NjRCMDAwNjk1QTcwMDUwOTEwOTAwRUMwMDBDNTYwMjYxCis6MTBBMkEwMDAwMTY3MjgyMzMxNDMwMDdGMzEyNjAwRkYyNDAyMDAwMzg5Cis6MTBBMkIwMDBBMzgzMDA4OEFGODQwMDgwMTBDMjAwMUIzMEIwRkZGRjcyCis6MTBBMkMwMDA5MTA2MDBFQzI0MTIwMDA1MzBDMjAwRkYxMDUyMDAzMzRBCis6MTBBMkQwMDAwMDAwMDAwMDE2MDAwMDA5OEZCRjAwMUM4RkIyMDAxODlDCis6MTBBMkUwMDA4RkIxMDAxNDhGQjAwMDEwMjQwRDBDMDAzQzBDODAwMEM2Cis6MTBBMkYwMDAyN0JEMDAyMDAzRTAwMDA4QUQ4RDAwMjQwRTAwMTBBNDRGCis6MTBBMzAwMDAwMjAwMjAyMThGQkYwMDFDOEZCMjAwMTg4RkIxMDAxNEYzCis6MTBBMzEwMDA4RkIwMDAxMDI0MEQwQzAwM0MwQzgwMDAyN0JEMDAyMEU1Cis6MTBBMzIwMDAwM0UwMDAwOEFEOEQwMDI0OTY1ODAwNzg5NjUxMDA3QTFECis6MTBBMzMwMDA5MjRFMDA3RDAyMzg3ODI2MzFFOEZGRkYzMUM0MDBDMDFDCis6MTBBMzQwMDAxNDgwMDAwOTJEMTEwMDAxMTYwMDAwMzcwMDAwMDAwMEU0Cis6MTBBMzUwMDA1NjIwRkZFMjhGQkYwMDFDMEUwMDBGN0EwMDAwMDAwMEE1Cis6MTBBMzYwMDAwQTAwMTQwNjhGQkYwMDFDMTYyMEZGREEwMDAwMDAwMDUwCis6MTBBMzcwMDAwRTAwMEY3QTAwMDAwMDAwMTQ0MEZGRDg4RkJGMDAxQ0IxCis6MTBBMzgwMDAxNjAwMDAyMjAwMDAwMDAwOTI1RjAwN0QzM0UyMDAzRkQzCis6MTBBMzkwMDBBMjQyMDA3RDBBMDAxNDA2OEZCRjAwMUM5NTA5MDBEQTU2Cis6MTBBM0EwMDA4Rjg2MDA2MDAwODAyODIxMjQwNDAwMDUwRTAwMDY3NEJBCis6MTBBM0IwMDAzMTMwRkZGRjk3ODMwMDcyM0MwNDgwMDAyNDY1RkZGRjZCCis6MTBBM0MwMDBBNzg1MDA3MjhDOEEwMUI4MDU0MEZGRkUwMDAwMDAwMERFCis6MTBBM0QwMDBBQzgwMDE4MDhGQkYwMDFDQUM5MDAxODQ4RkIyMDAxODRDCis6MTBBM0UwMDA4RkIxMDAxNDhGQjAwMDEwM0MwNzYwMTMzQzBCMTAwMEJECis6MTBBM0YwMDAyNDBEMEMwMDNDMEM4MDAwMjdCRDAwMjBBQzg3MDE4ODk4Cis6MTBBNDAwMDBBQzhCMDFCODAzRTAwMDA4QUQ4RDAwMjQwRTAwMTBBNDUxCis6MTBBNDEwMDAwMjAwMjAyMTUwNDBGRkIxOEZCRjAwMUM5MjVGMDA3REUxCis6MTBBNDIwMDAwQTAwMTQzMzMzRTIwMDNGMEUwMDEwQTQwMjAwMjAyMTgyCis6MTBBNDMwMDAxNDQwRkZBQThGQkYwMDFDMTIyMDAwMDcwMDAwMDAwMDdDCis6MTBBNDQwMDA5MjU5MDA3RDMzMzAwMDNGMzYwMjAwNDBBMjQyMDA3RDI5Cis6MTBBNDUwMDAwQTAwMTQwNjhGQkYwMDFDMEUwMDBGN0EwMDAwMDAwMEQ3Cis6MTBBNDYwMDA1MDQwRkY5RThGQkYwMDFDOTI1OTAwN0QzMzMwMDAzRjRCCis6MDhBNDcwMDAwQTAwMTQ2MjM2MDIwMDQwRUMKKzowOEE0NzgwMDAwMDAwMDAwMDAwMDAwMUJDMQorOjEwQTQ4MDAwMDAwMDAwMEYwMDAwMDAwQTAwMDAwMDA4MDAwMDAwMDZBNQorOjEwQTQ5MDAwMDAwMDAwMDUwMDAwMDAwNTAwMDAwMDA0MDAwMDAwMDRBQQorOjEwQTRBMDAwMDAwMDAwMDMwMDAwMDAwMzAwMDAwMDAzMDAwMDAwMDNBMAorOjEwQTRCMDAwMDAwMDAwMDMwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDI5MworOjEwQTRDMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDI4NAorOjEwQTREMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDI3NAorOjEwQTRFMDAwMDAwMDAwMDIwMDAwMDAwMjAwMDAwMDAyMDAwMDAwMDI2NAorOjBDQTRGMDAwMDAwMDAwMDEwMDAwMDAwMTAwMDAwMDAxNUQKKzowNEE0RkMwMDgwMDgwMTAwRDMKKzoxMEE1MDAwMDgwMDgwMDgwODAwODAwMDAwMDAwMEMwMDAwMDAzMDgwRkYKKzoxMEE1MTAwMDA4MDAwRjQ4MDgwMDBGRjQwODAwMTAwQzA4MDAxMDIwNzUKKzoxMEE1MjAwMDA4MDAxMDM0MDgwMDBGNDgwODAwMEY0ODA4MDAxMDY4QTEKKzoxMEE1MzAwMDA4MDAxMEEwMDgwMDEwQjAwODAwMTBEODA4MDAxN0M4QzQKKzoxMEE1NDAwMDA4MDAxN0M4MDgwMDE4MDAwODAwMTgwMDA4MDAxODE0QjAKKzoxMEE1NTAwMDA4MDAxN0U0MDgwMDFBM0MwODAwMUEwODA4MDAxQTk0QkEKKzoxMEE1NjAwMDA4MDAxQTk0MDgwMDFCMUMwODAwMUE0QzgwMDgwMjQwQkUKKzoxMEE1NzAwMDA4MDAyMUE4MDgwMDFGRjQwODAwMjFEMDA4MDAyMjY4NjQKKzoxMEE1ODAwMDA4MDAyM0I4MDgwMDI0MDQwODAwMjUyODA4MDAyNDMwMDcKKzoxMEE1OTAwMDA4MDAyNEI0MDgwMDIwNjQwODAwMjlEMDA4MDAyOTc0QTkKKzoxMEE1QTAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyNTlDM0EKKzoxMEE1QjAwMDA4MDAyNTlDMDgwMDIwMTAwODAwMjAxMDA4MDAyODRDRTYKKzoxMEE1QzAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwQUIKKzoxMEE1RDAwMDA4MDAyOEFDMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwRjcKKzoxMEE1RTAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwOEIKKzoxMEE1RjAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwN0IKKzoxMEE2MDAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyNDI0NTIKKzoxMEE2MTAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjkxQzA4MDAyMDEwNDUKKzoxMEE2MjAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwNEEKKzoxMEE2MzAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwM0EKKzoxMEE2NDAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMkEKKzoxMEE2NTAwMDA4MDAyMDEwMDgwMDIwMTAwODAwMjAxMDA4MDAyMDEwMUEKKzoxMEE2NjAwMDA4MDAyNzcwMDgwMDIwMTAwODAwMjAxMDA4MDAyNkU0QzkKKzoxMEE2NzAwMDA4MDAyNjQwMDgwMDM3ODgwODAwMzc1QzA4MDAzNzI4QTMKKzoxMEE2ODAwMDA4MDAzNkZDMDgwMDM2REMwODAwMzY5MDgwMDgwMTAwMUYKKzoxMEE2OTAwMDgwMDgwMDgwODAwODAwMDA4MDA4MDA4MDA4MDA0NkYwRTQKKzoxMEE2QTAwMDA4MDA0NzI4MDgwMDQ2NzAwODAwNDZGMDA4MDA0NkYwRjkKKzowQ0E2QjAwMDA4MDA0NDUwMDgwMDQ2RjAwODAwNEFDNEFFCis6MDRBNkJDMDAwQTAwMEM3NjBFCis6MTBBNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Mjc4NzAzNUVFCis6MTBBNkQwMDAyRTMwMkUzMDZBMzkwMDAwMDUwMDAwMDMwMDAwMDAwMDEzCis6MTBBNkUwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBBNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBBNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBBNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTBBNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTBBNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTBBNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTBBNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTBBNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTBBNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBBNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTBBNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTBBN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTBBN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTBBN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTBBN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTBBN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBBN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTBBODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTBBODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBBODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTBBODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTBBODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTBBODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTBBODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTBBODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTBBODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTBBODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTBBOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTBBOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTBBOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTBBOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTBBOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTBBOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Cis6MTBBOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTBBOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTBBOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBBOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTBBOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTBBOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTBBOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTBBOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTBBOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Cis6MTBBOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTBBOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTBBOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTBBOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTBBOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTBBOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTBBOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTBBQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTBBQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Cis6MTBBQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTBBQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBBQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTBBQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Cis6MTBBQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTBBQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTBBQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Cis6MTBBQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTBBQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTBBQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTBBQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTBBQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTBBQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTBBQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTBBQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTBBQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTBBQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTBBQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTBBQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBBQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTBBQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTBBQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTBBQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTBBQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTBBQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTBBQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTBBQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTBBQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTBBQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTBBQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTBBQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTBBQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTBBQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTBBQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTBBQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTBBQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBBQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTBBQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTBBQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Cis6MTBBQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTBBQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTBBQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTBBQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTBBQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTBBQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTBBQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTBBRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTBBRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTBBRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTBBRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTBBRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTBBRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTBBRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBBRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTBBRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTBBRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTBBREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTBBREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTBBREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTBBREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTBBREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTBBREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTBBRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTBBRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTBBRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTBBRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTBBRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTBBRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTBBRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBBRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBBRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTBBRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTBBRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTBBRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTBBRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTBBRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTBBRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTBBRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTBBRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTBBRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTBBRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTBBRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTBBRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTBBRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTBBRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTBBRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBBRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBBRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTBBRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTBBRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTBBRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTBBRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTBBRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTBBRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTBCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTBCMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTBCMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTBCMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTBCMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTBCMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTBCMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTBCMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTBCMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBCMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBCMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTBCMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTBCMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTBCMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTBCMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTBCMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTBCMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTBCMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTBCMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTBCMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTBCMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTBCMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTBCMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTBCMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTBCMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTBCMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBCMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTBCMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTBCMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTBCMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTBCMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTBCMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTBCMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTBCMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTBCMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTBCMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTBCMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTBCMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTBCMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTBCMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTBCMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTBCMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTBCMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBCMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTBCMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTBCMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTBCMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTBCMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTBCMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTBCMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTBCMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTBCMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTBCMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTBCMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTBCMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTBCMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTBCMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTBCMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTBCM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTBCM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBCM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTBCM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTBCM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTBCM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTBCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCis6MTBCNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCis6MTBCNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCis6MTBCNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTBCNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTBCNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTBCNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTBCNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCis6MTBCNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTBCNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTBCNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCis6MTBCNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTBCNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBCNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCis6MTBCNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTBCNEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCis6MTBCNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCis6MTBCNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCis6MTBCNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCis6MTBCNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCis6MTBCNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCis6MTBCNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCis6MTBCNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCis6MTBCNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCis6MTBCNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCis6MTBCNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTBCNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCis6MTBCNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTBCNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTBCNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBCNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTBCNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTBCNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCis6MTBCNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTBCNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCis6MTBCNjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCis6MTBCNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTBCNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTBCNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTBCNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCis6MTBCNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCis6MTBCNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTBCNkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTBCNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCis6MTBCNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTBCNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTBCNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBCNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTBCNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTBCNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTBCNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTBCNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTBCNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTBCNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTBCNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBCNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTBCNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTBCNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTBCN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTBCN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTBCN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTBCN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBCN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTBCN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBCODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBCODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTBCODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTBCODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTBCODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTBCODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTBCODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTBCODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTBCODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTBCODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTBCOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTBCOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTBCOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTBCOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTBCOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Cis6MTBCOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTBCOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTBCOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBCOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTBCOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTBCOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTBCOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTBCOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTBCOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Cis6MTBCOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTBCOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTBCOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTBCOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTBCOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTBCOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTBCOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTBCOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTBCQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Cis6MTBCQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTBCQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBCQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTBCQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Cis6MTBCQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTBCQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTBCQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Cis6MTBCQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTBCQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTBCQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTBCQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTBCQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTBCQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTBCQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTBCQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTBCQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTBCQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTBCQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTBCQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBCQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTBCQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTBCQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTBCQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTBCQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTBCQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTBCQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTBCQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTBCQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTBCQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTBCQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTBCQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTBCQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTBCQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTBCQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTBCQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTBCQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBCQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTBCQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTBCQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Cis6MTBCQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTBCQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTBCQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTBCQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTBCQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTBCQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTBCQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTBCQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTBCRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTBCRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTBCRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTBCRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTBCRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTBCRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBCRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTBCRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTBCRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTBCRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTBCREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTBCREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTBCREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTBCREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTBCREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTBCREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTBCRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTBCRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTBCRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTBCRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTBCRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTBCRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBCRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBCRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTBCRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTBCRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTBCRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTBCRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTBCRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTBCRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTBCRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTBCRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTBCRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTBCRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTBCRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTBCRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTBCRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTBCRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTBCRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBCRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBCRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTBCRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTBCRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTBCRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTBCRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTBCRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTBCRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTBCRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTBDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTBDMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTBDMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTBDMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTBDMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTBDMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTBDMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTBDMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBDMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBDMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTBDMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTBDMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTBDMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTBDMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTBDMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTBDMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTBDMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTBDMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTBDMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTBDMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTBDMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTBDMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTBDMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTBDMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTBDMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBDMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTBDMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTBDMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTBDMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTBDMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTBDMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTBDMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTBDMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTBDMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTBDMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTBDMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTBDMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTBDMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTBDMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTBDMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTBDMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTBDMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBDMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTBDMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTBDMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTBDMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTBDMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTBDMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTBDMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTBDMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTBDMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTBDMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTBDMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTBDMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTBDMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTBDMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTBDMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTBDMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTBDM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBDM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTBDM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTBDM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTBDM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTBDM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTBDNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCis6MTBDNDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCis6MTBDNDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTBDNDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTBDNDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTBDNDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTBDNDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCis6MTBDNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTBDNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTBDNDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCis6MTBDNEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTBDNEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBDNEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCis6MTBDNEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTBDNEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCis6MTBDNEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCis6MTBDNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCis6MTBDNTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCis6MTBDNTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCis6MTBDNTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCis6MTBDNTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCis6MTBDNTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCis6MTBDNTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCis6MTBDNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCis6MTBDNTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTBDNTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCis6MTBDNUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTBDNUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTBDNUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBDNUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTBDNUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTBDNUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCis6MTBDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTBDNjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCis6MTBDNjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCis6MTBDNjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTBDNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTBDNjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTBDNjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCis6MTBDNjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCis6MTBDNjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTBDNjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTBDNkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCis6MTBDNkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTBDNkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTBDNkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBDNkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTBDNkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCis6MTBDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTBDNzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTBDNzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTBDNzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTBDNzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTBDNzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBDNzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTBDNzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTBDNzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTBDNzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTBDN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTBDN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTBDN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBDN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTBDN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBDN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTBDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI4Cis6MTBDODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTBDODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTBDODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTBDODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTBDODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTBDODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTBDODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTBDODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTBDODkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTBDOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4Cis6MTBDOEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc4Cis6MTBDOEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY4Cis6MTBDOEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU4Cis6MTBDOEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ4Cis6MTBDOEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM4Cis6MTBDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTBDOTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTBDOTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3Cis6MTBDOTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTBDOTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU3Cis6MTBDOTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ3Cis6MTBDOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM3Cis6MTBDOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI3Cis6MTBDOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE3Cis6MTBDOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTBDOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg3Cis6MTBDOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc3Cis6MTBDOUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTBDOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTBDOUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTBDOUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTBDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI2Cis6MTBDQTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE2Cis6MTBDQTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2Cis6MTBDQTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY2Cis6MTBDQTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU2Cis6MTBDQTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ2Cis6MTBDQTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM2Cis6MTBDQTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI2Cis6MTBDQTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE2Cis6MTBDQTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk2Cis6MTBDQUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg2Cis6MTBDQUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc2Cis6MTBDQUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY2Cis6MTBDQUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU2Cis6MTBDQUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ2Cis6MTBDQUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM2Cis6MTBDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI1Cis6MTBDQjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE1Cis6MTBDQjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Cis6MTBDQjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY1Cis6MTBDQjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU1Cis6MTBDQjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ1Cis6MTBDQjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM1Cis6MTBDQjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI1Cis6MTBDQjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE1Cis6MTBDQjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk1Cis6MTBDQkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg1Cis6MTBDQkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc1Cis6MTBDQkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY1Cis6MTBDQkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU1Cis6MTBDQkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1Cis6MTBDQkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM1Cis6MTBDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI0Cis6MTBDQzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE0Cis6MTBDQzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0Cis6MTBDQzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY0Cis6MTBDQzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU0Cis6MTBDQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ0Cis6MTBDQzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM0Cis6MTBDQzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI0Cis6MTBDQzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE0Cis6MTBDQzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk0Cis6MTBDQ0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg0Cis6MTBDQ0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc0Cis6MTBDQ0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY0Cis6MTBDQ0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU0Cis6MTBDQ0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ0Cis6MTBDQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM0Cis6MTBDRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIzCis6MTBDRDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzCis6MTBDRDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzCis6MTBDRDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYzCis6MTBDRDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUzCis6MTBDRDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQzCis6MTBDRDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMzCis6MTBDRDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIzCis6MTBDRDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEzCis6MTBDRDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkzCis6MTBDREEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgzCis6MTBDREIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDczCis6MTBDREMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYzCis6MTBDREQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUzCis6MTBDREUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQzCis6MTBDREYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMzCis6MTBDRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIyCis6MTBDRTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyCis6MTBDRTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCis6MTBDRTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYyCis6MTBDRTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUyCis6MTBDRTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQyCis6MTBDRTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMyCis6MTBDRTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIyCis6MTBDRTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEyCis6MTBDRTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkyCis6MTBDRUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgyCis6MTBDRUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcyCis6MTBDRUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYyCis6MTBDRUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUyCis6MTBDRUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQyCis6MTBDRUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyCis6MTBDRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIxCis6MTBDRjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExCis6MTBDRjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxCis6MTBDRjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYxCis6MTBDRjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUxCis6MTBDRjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQxCis6MTBDRjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMxCis6MTBDRjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIxCis6MTBDRjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEExCis6MTBDRjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkxCis6MTBDRkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgxCis6MTBDRkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTBDRkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYxCis6MTBDRkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUxCis6MTBDRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQxCis6MTBDRkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMxCis6MTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwCis6MTBEMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwCis6MTBEMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCis6MTBEMDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEYwCis6MTBEMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTBEMDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTBEMDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEMwCis6MTBEMDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MTBEMDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEEwCis6MTBEMDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDkwCis6MTBEMEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDgwCis6MTBEMEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcwCis6MTBEMEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDYwCis6MTBEMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUwCis6MTBEMEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQwCis6MTBEMEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTBEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGCis6MTBEMTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGCis6MTBEMTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZGCis6MTBEMTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVGCis6MTBEMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERGCis6MTBEMTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENGCis6MTBEMTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJGCis6MTBEMTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFGCis6MTBEMTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlGCis6MTBEMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhGCis6MTBEMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdGCis6MTBEMUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZGCis6MTBEMUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVGCis6MTBEMUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRGCis6MTBEMUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNGCis6MTBEMUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJGCis6MTBEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFFCis6MTBEMjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFCis6MTBEMjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZFCis6MTBEMjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVFCis6MTBEMjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTBEMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENFCis6MTBEMjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJFCis6MTBEMjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFFCis6MTBEMjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlFCis6MTBEMjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhFCis6MTBEMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdFCis6MTBEMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZFCis6MTBEMkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVFCis6MTBEMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTBEMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNFCis6MTBEMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTBEMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFECis6MTBEMzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBECis6MTBEMzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZECis6MTBEMzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVECis6MTBEMzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERECis6MTBEMzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENECis6MTBEMzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJECis6MTBEMzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFECis6MTBEMzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlECis6MTBEMzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhECis6MTBEM0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdECis6MTBEM0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZECis6MTBEM0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVECis6MTBEM0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRECis6MTBEM0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNECis6MTBEM0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJECis6MTBENDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFDCis6MTBENDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDCis6MTBENDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZDCis6MTBENDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVDCis6MTBENDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERDCis6MTBENDUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENDCis6MTBENDYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJDCis6MTBENDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFDCis6MTBENDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlDCis6MTBENDkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhDCis6MTBENEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdDCis6MTBENEIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZDCis6MTBENEMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVDCis6MTBENEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRDCis6MTBENEUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNDCis6MTBENEYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJDCis6MTBENTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFCCis6MTBENTEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCCis6MTBENTIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZCCis6MTBENTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVCCis6MTBENTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERCCis6MTBENTUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENCCis6MTBENTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJCCis6MTBENTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFCCis6MTBENTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlCCis6MTBENTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhCCis6MTBENUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdCCis6MTBENUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZCCis6MTBENUMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVCCis6MTBENUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRCCis6MTBENUUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNCCis6MTBENUYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJCCis6MTBENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFBCis6MTBENjEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBCis6MTBENjIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEZBCis6MTBENjMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEVBCis6MTBENjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERBCis6MTBENjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMENBCis6MTBENjYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEJBCis6MTBENjcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEFBCis6MTBENjgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDlBCis6MTBENjkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDhBCis6MTBENkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDdBCis6MTBENkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDZBCis6MTBENkMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDVBCis6MTBENkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRBCis6MTBENkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDNBCis6MTBENkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJBCis6MTBENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE5Cis6MTBENzEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5Cis6MTBENzIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY5Cis6MTBENzMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU5Cis6MTBENzQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ5Cis6MTBENzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM5Cis6MTBENzYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI5Cis6MTBENzcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE5Cis6MTBENzgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk5Cis6MTBENzkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg5Cis6MTBEN0EwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc5Cis6MTBEN0IwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY5Cis6MTBEN0MwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU5Cis6MTBEN0QwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ5Cis6MTBEN0UwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM5Cis6MTBEN0YwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5Cis6MTBEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE4Cis6MTBEODEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4Cis6MTBEODIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEY4Cis6MTBEODMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEU4Cis6MTBEODQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTBEODUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEM4Cis6MTBEODYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEI4Cis6MTBEODcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MTBEODgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDk4Cis6MTBEODkwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDAwMDMwMDAwMDAwMDc1Cis6MTBEOEEwMDAwMDAwMDAwRDAwMDAwMDBEM0MwMjA4MDEyNDQyODJBMDhGCis6MTBEOEIwMDAzQzAzMDgwMTI0NjM4MzYwQUM0MDAwMDAwMDQzMjAyQjNDCis6MTBEOEMwMDAxNDgwRkZGRDI0NDIwMDA0M0MxRDA4MDAzN0JEOUZGQzZFCis6MTBEOEQwMDAwM0EwRjAyMTNDMTAwODAwMjYxMDMxRDgzQzFDMDgwMUEwCis6MTBEOEUwMDAyNzlDODJBMDBFMDAxMUVBMDAwMDAwMDAwMDAwMDAwRDNECis6MTBEOEYwMDAzQzAyODAwMDMwQTVGRkZGMzBDNjAwRkYzNDQzMDE4MEFBCis6MTBEOTAwMDAzQzA4ODAwMDhEMDkwMUI4MDUyMEZGRkUwMDAwMDAwMEUyCis6MTBEOTEwMDBBQzY0MDAwMDI0MDQwMDAyQTQ2NTAwMDhBMDY2MDAwQUFDCis6MTBEOTIwMDBBMDY0MDAwQkFDNjcwMDE4M0MwMzEwMDAwM0UwMDAwODgzCis6MTBEOTMwMDBBRDAzMDFCODNDMDU2MDAwOENBMjRGRjgwNDQwRkZGRTI3Cis6MTBEOTQwMDAwMDAwMDAwMEFDQTQ0RkMwM0MwMzEwMDAzQzA0MDIwMEU3Cis6MTBEOTUwMDBBQ0E0NEZDNDAzRTAwMDA4QUNBMzRGRjg5NDg2MDAwQ0JECis6MTBEOTYwMDAwMEEwNTAyMTI0ODgwMDE0MDAwNjJCMDIwMDA1MTA4MDFFCis6MTBEOTcwMDAwMDQ0NDgyMTAxMDkxODJCMTA2MDAwMTEwMDAwMDAwMDJDCis6MTBEOTgwMDA5MTAzMDAwMDJDNjQwMDA5NTA4MDAwMDk5MTE5MDAwMUU2Cis6MTBEOTkwMDAwMDAzNjA4MDNDMEQwODAxMjVBRDgxNTQwMThENTgyMUE0Cis6MTBEOUEwMDA4RDY3MDAwMDAwRTAwMDA4MDAwMDAwMDA5MTE5MDAwMUYwCis6MTBEOUIwMDAwMTE5NDAyMTAxMDkzMDJCNTRDMEZGRjI5MTAzMDAwMEVFCis6MTBEOUMwMDAwM0UwMDAwODAwMDAxMDIxMEEwMDBDQkUyNTA4MDAwMTM5Cis6MTBEOUQwMDA5MTBGMDAwMTI0MEUwMDBBMTVFRTAwNDAwMTI4QzgyMzEzCis6MTBEOUUwMDAyRjM4MDAwQTE3MDAwMDNEMjUwRDAwMDI4RDU4MDAwMDU5Cis6MTBEOUYwMDAyNTBGMDAwNjM3MEUwMTAwQUQ0RTAwMDA5MTBDMDAwMjBECis6MTBEQTAwMDA5MUFCMDAwMTkxQTQwMDAyOTFBNjAwMDMwMDBDMkUwMDJFCis6MTBEQTEwMDAwMDBCM0MwMDAwQTcxMDI1MDAwNDFBMDAwMDQzQzgyNTk1Cis6MTBEQTIwMDAwMzI2QzAyNUFENTgwMDA0OTEwRTAwMDY5MUVEMDAwMUJCCis6MTBEQTMwMDA5MUU3MDAwMjkxRTUwMDAzMDAwRTVFMDAwMDBENjQwMDE2Cis6MTBEQTQwMDAwMTZDMzAyNTAwMDcyMjAwMDBDNDEwMjUwMDQ1MTgyNTcwCis6MTBEQTUwMDAyNTA4MDAwQTBBMDAwQ0JFQUQ0MzAwMDg5MTBGMDAwMTIyCis6MTBEQTYwMDAyNTA0MDAwMjI0MDgwMDAyNTVFODAwMDEwMTIwMjAyMUJECis6MTBEQTcwMDAwQTAwMENCRTAwODA0MDIxOTEwQzAwMDEyNDBCMDAwMzIxCis6MTBEQTgwMDAxNThCMDAxNjAwMDAwMDAwOEQ1ODAwMDA5MTBFMDAwMjVBCis6MTBEQTkwMDAyNTA4MDAwMzM3MEQwMDA4QTE0RTAwMTAwQTAwMENCRTM3Cis6MTBEQUEwMDBBRDREMDAwMDkxMTkwMDAxMjQwRjAwMDQxNzJGMDAwQjQ5Cis6MTBEQUIwMDAwMDAwMDAwMDkxMDcwMDAyOTEwNDAwMDM4RDQzMDAwMDY0Cis6MTBEQUMwMDAwMDA3MkEwMDAwQTQxMDI1MzQ2NjAwMDQyNTA4MDAwNDdECis6MTBEQUQwMDBBRDQyMDAwQzBBMDAwQ0JFQUQ0NjAwMDAwM0UwMDAwODk5Cis6MTBEQUUwMDAyNDAyMDAwMTI3QkRGRkU4QUZCRjAwMTRBRkIwMDAxMDUzCis6MTBEQUYwMDAwRTAwMTRGQzAwODA4MDIxM0MwNDgwMDgzNDg1MDA4MEU2Cis6MTBEQjAwMDA5MEE2MDAwNTI0MDNGRkZFMDIwMDIwMjEwMEMzMTAyNDdDCis6MTBEQjEwMDA4RkJGMDAxNDhGQjAwMDEwQTBBMjAwMDUwQTAwMTUwNkU4Cis6MTBEQjIwMDAyN0JEMDAxODI3QkRGRkU4QUZCMDAwMTBBRkJGMDAxNDNECis6MTBEQjMwMDAwRTAwMEY0RTAwODA4MDIxM0MwNjgwMDgzNEM1MDA4MDE2Cis6MTBEQjQwMDA5MEE0MDAwMDI0MDIwMDUwMzA4MzAwRkYxMDYyMDAwNzAwCis6MTBEQjUwMDAzQzA5ODAwMDAyMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMDBDCis6MTBEQjYwMDBBRDIwMDE4MDBBMDAxMDEwMjdCRDAwMTgyNDA4MDEwMDE0Cis6MTBEQjcwMDAzQzA3ODAwMDAyMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMEVFCis6MTBEQjgwMDBBQ0U4MDE4MDBBMDAxMDEwMjdCRDAwMTgyN0JERkY3MDA3Cis6MTBEQjkwMDAzQzA4ODAwOEFGQjYwMDgwQUZCNTAwN0NBRkIxMDA2QzI4Cis6MTBEQkEwMDBBRkJGMDA4Q0FGQkUwMDg4QUZCNzAwODRBRkI0MDA3OEMxCis6MTBEQkIwMDBBRkIzMDA3NEFGQjIwMDcwQUZCMDAwNjgzNTA1MDA4MDNECis6MTBEQkMwMDAzQzA3ODAwMDhDRjIwMTI4OTBBNDAwMDlBQ0UwMDA4NDlFCis6MTBEQkQwMDA5MEE2MDAwNTMwOTEwMEZGMDAwMEE4MjEwMDA2MTgyNzNDCis6MTBEQkUwMDAzMDYyMDAwMTAwMDBCMDIxMTQ0MDAwNjdBRkEwMDA1MDc3Cis6MTBEQkYwMDA5MEE5MDAwMDI0MDUwMDIwMzEyNDAwRkYxMDg1MDAxNkE0Cis6MTBEQzAwMDAyNDBBMDA1MDEwOEEwMDhDMDAwMDAwMDAzQzBDMDgwMDIwCis6MTBEQzEwMDA4RDhDMDBEQzI1OEIwMDAxM0MwMTA4MDBBQzJCMDBEQzY2Cis6MTBEQzIwMDAwRTAwMTVGMjAwMDAwMDAwOEZCRjAwOEM4RkJFMDA4ODMwCis6MTBEQzMwMDA4RkI3MDA4NDhGQjYwMDgwOEZCNTAwN0M4RkI0MDA3OERBCis6MTBEQzQwMDA4RkIzMDA3NDhGQjIwMDcwOEZCMTAwNkM4RkIwMDA2ODFBCis6MTBEQzUwMDAwM0UwMDAwODI3QkQwMDkwMDAwMDAwMEQzQzEwODAwMDhDCis6MTBEQzYwMDBBRkEwMDAzMDk2MUYwMTE2OEUxOTAxMDQzQzFFMDAyMDQzCis6MTBEQzcwMDAzNjEzMEMwMDAzM0VDMDI0MDAxOEI4MkIwMDE3MzE0MEE3Cis6MTBEQzgwMDBBRkE2MDAzMDhFMEUwMTA0MzNGNEZGRkYzQzBGMDA0MEJFCis6MTBEQzkwMDAwMjkzODAyMTAxQ0Y2ODI0OTIxMzAwMEQxMUEwMDA0ODQ3Cis6MTBEQ0EwMDAzNEM0MDA0MDMyNjIwMDIwMTQ0MDAwMDIzNDg2MDA4MEY4Cis6MTBEQ0IwMDAwMDgwMzAyMTE0QzAwMDkzQUZBNjAwMzAzQzA1ODAwOERFCis6MTBEQ0MwMDAzNEE4MDA4MDkxMDcwMDA4MzBFNjAwNDA1MEMwMDAwNkVDCis6MTBEQ0QwMDAzQzA2ODAwODI0MDkwMDA0MTIyOTAwQTIyNDBBMDAxMjJDCis6MTBEQ0UwMDAxMjJBMDAyOTNDMDY4MDA4MzRENDAxMDAzQzE3ODAwMDI5Cis6MTBEQ0YwMDA5NkVGMDExQTk2MEQwMDBFOTI4RTAwMDgzMjZCMDAwNDBBCis6MTBERDAwMDAzMUY3RkZGRjAxQ0Q2MDA0QUZBQzAwNTQ4RTE0MDAwNDY2Cis6MTBERDEwMDAxMTYwMDAzMThFMUUwMDA4MzRDMzAwODA5MDc5MDAwODI1Cis6MTBERDIwMDAzMzM4MDA0MDE3MDAwMDI4MDAwMDAwMDA4QzczMDA1MEJBCis6MTBERDMwMDAwMjkzOTAyMzA2NDAwMDA2M0MwQzgwMDA4QzdFMDAzNDQ5Cis6MTBERDQwMDAwMjlFODAyMzA2MDIwMDgzOEVBMjAwMDgzQzBDODAwMDA1Cis6MTBERDUwMDBBRDgwMDA0NDI0MDIwMDAxOEZCRjAwOEM4RkJFMDA4ODdDCis6MTBERDYwMDA4RkI3MDA4NDhGQjYwMDgwOEZCNTAwN0M4RkI0MDA3OEE5Cis6MTBERDcwMDA4RkIzMDA3NDhGQjIwMDcwOEZCMTAwNkM4RkIwMDA2OEU5Cis6MTBERDgwMDAwM0UwMDAwODI3QkQwMDkwMEUwMDBEMUEwMDAwMjAyMUJFCis6MTBERDkwMDA4RkJGMDA4QzhGQkUwMDg4OEZCNzAwODQ4RkI2MDA4MDQ1Cis6MTBEREEwMDA4RkI1MDA3QzhGQjQwMDc4OEZCMzAwNzQ4RkIyMDA3MDkxCis6MTBEREIwMDA4RkIxMDA2QzhGQjAwMDY4MDNFMDAwMDgyN0JEMDA5MEIxCis6MTBEREMwMDAwQTAwMEQ3QTAwQzAyMDIxMEUwMDE2NTMwMjgwMjAyMTg3Cis6MTBEREQwMDAxNDQwRkZERjNDMEM4MDAwM0MwMzgwMDgzNDYzMDA4MDZCCis6MTBEREUwMDA4QzYyMDAzNDAyODJGODIzMDdFMDAwMTcwMDAwMDAwMDc0Cis6MTBEREYwMDAzQzE1MDgwMDhFQjUzMTAwMjZCMTAwMDEzQzAxMDgwMDM5Cis6MTBERTAwMDBBQzMxMzEwMDBFMDAxNEZDMDI0MDIwMjEzQzBCODAwODk0Cis6MTBERTEwMDAzNTcwMDA4MDkyMEEwMDI1MDI0MDIwMjEzNTQyMDAwNDFFCis6MTBERTIwMDAwRTAwMTUwNkEyMDIwMDI1MEUwMDBDOUUwMjQwMjAyMUM1Cis6MTBERTMwMDAwQTAwMERBNzI0MDIwMDAxM0MxNTA4MDEyNkI1ODM1MEY1Cis6MTBERTQwMDAwQTAwMEQ2OTNDMTA4MDAwOEM2NjAwMzAwMjg2MjAyMzk5Cis6MTBERTUwMDAxODgwMDAwODI0MDkwMDBDM0MwODA4MDA4RDA4MzEwMEQ3Cis6MTBERTYwMDAzMjczMDBGQzAwMDBCODIxMjUwNzAwMDEzQzAxMDgwMEM2Cis6MTBERTcwMDBBQzI3MzEwMEFGQTkwMDMwOEM2NTAwMzAwMEI0MzgyM0U2Cis6MTBERTgwMDAxOEUwMDBEQjAyRTc1MDJBMTU0MEZGREUwMDAwMDAwMDJBCis6MTBERTkwMDAxMkU3MDAyQTAyRTc2ODIzMDI4N0EwMjEzMUI3RkZGRkJCCis6MTBERUEwMDAzMjZFMDAwMjExQzAwMDM0MzI3RjAwMTAzQzE0ODAwODMyCis6MTBERUIwMDAzNjkwMDA4MDkyMEYwMDA4MzFGNjAwNDA1MkMwMDBDRTJDCis6MTBERUMwMDA4RUEyMDAwODAyNDAyMDIxMEUwMDE0RkMyNDEzMDAxODJBCis6MTBERUQwMDBBMjEzMDAwOTkyMTgwMDA1MjQxOUZGRkUwMjQwMjAyMTE4Cis6MTBERUUwMDAwMzE5QjgyNDBFMDAxNTA2QTIxNzAwMDUyNDA0MDAzOUYyCis6MTBERUYwMDAwMDAwMjgyMTBFMDAxNjJFMjQwNjAwMTgwQTAwMERBNzg3Cis6MTBERjAwMDAyNDAyMDAwMTkyQjYwMDBDM0MwNDgwMDgzNDgzMDA4MDk3Cis6MTBERjEwMDA4QzY3MDAzODAwMTZBQjAwMzZCMTAwODEwMjQwMjAyMTJBCis6MTBERjIwMDAzMjI1RjA4MTBFMDAwQzhEMzBDNjAwRkYzQzBDODAwMEM1Cis6MTBERjMwMDBBRDgwMDA0NDBBMDAwREE3MjQwMjAwMDEzQTZDMDAwMUU0Cis6MTBERjQwMDAzMThCMDAwMTE1NjBGRkFGMDI4N0EwMjEwQTAwMERGODk4Cis6MTBERjUwMDAwMDAwMDAwMDAwNDBGODA5MjQwNDAwMTYwQTAwMERBNzg0Cis6MTBERjYwMDAyNDAyMDAwMTAyNDAyMDIxMEUwMDE3MzMwMjAwMjgyMTY0Cis6MTBERjcwMDAwQTAwMEQ1QzhGQkYwMDhDMTNFMEZGNzQzQzAzODAwODI3Cis6MTBERjgwMDAzNDY4MDA4MDhEMDQwMDM4OEM2NjAwMDQwM0M2MTAyM0JBCis6MTBERjkwMDAxQzQwRkY2RjNDMEM4MDAwMDNDNDI4MjMwNEEyMDAwMTM2Cis6MTBERkEwMDAwMDgwRjAyMUFGQjQwMDEwQUZCNzAwMTRBRkE3MDAxODg1Cis6MTBERkIwMDAzQzFGODAwMDk3RTMwMTIwOEQwOTAwMzA5NTA2MDA1QzJFCis6MTBERkMwMDA4RkI5MDA1NDhGQUMwMDMwMzA2MkZGRkYzMEQ4RkZGRkI0Cis6MTBERkQwMDAwMDQ3NzAyMTM3RUY0MDAwMDMzODY4MkIwMUNGNTgyMUVDCis6MTBERkUwMDAwMThENTAyNUFGQUIwMDIwQUZBOTAwMjhBRkFBMDAzMEFCCis6MTBERkYwMDBBRkE5MDAyNEFGQTAwMDJDQUZCRTAwMzQ5MTA3MDAwOEU5Cis6MTBFMDAwMDAzMEU0MDAwODE0ODAwMDhGMDIwMDIwMjE4RUEyMDAwNDVBCis6MTBFMDEwMDAwMDQwRjgwOTI3QTQwMDEwOEZBOTAwMzAzMTI4MDAwMjIxCis6MTBFMDIwMDA1NTAwMDAwMTMyNzMwMEZFM0MwNDgwMDgzNDhDMDA4MEVGCis6MTBFMDMwMDA5MThCMDAwODMxNkEwMDQwNTE0MDAwMTI4RkE0MDAyNEU3Cis6MTBFMDQwMDA4QzhEMDAwNDExQkUwMEJFMjQwRTAwMTQzMjY1MDAwMTQ4Cis6MTBFMDUwMDAxMEEwMDAwQzhGQTQwMDI0MjQwNDAwMEMxMjI0MDBENDZGCis6MTBFMDYwMDAyQTI3MDAwRDEwRTAwMENFMjQwOTAwMEUyNDA4MDAwQTIzCis6MTBFMDcwMDA1MjI4MDAwMTI0MTYwMDA4OEZBMjAwMjQyNDQ0MDAwMTI1Cis6MTBFMDgwMDBBRkE0MDAyNDhGQTYwMDE0M0MwMzgwMDgzNDY1MDA4MEYwCis6MTBFMDkwMDAwMDg2RjgyMThDQjEwMDMwQUNCRjAwMzA5MEI5MDA0RTQyCis6MTBFMEEwMDA4Q0FFMDAzMDM0MThGRkZGMDMzODc4MDQwMUNGNjgyMUFDCis6MTBFMEIwMDBBQ0FEMDAzNDhGQTYwMDMwOEZBQzAwNTQzMENBMDAwOERECis6MTBFMEMwMDAwM0NDNTgyMTExNDAwMDBDQUZBQjAwNTg4Q0E0MDAyMEE5Cis6MTBFMEQwMDA4RkIwMDA1ODEwOTAwMDk0MzBDNjAwRkY5MkEyMDAwQzQwCis6MTBFMEUwMDA4RkE3MDAzNDAyNDAyMDIxMDAwMjRCMDAzNTI4MDA4MDE5Cis6MTBFMEYwMDAwRTAwMEM4RDMxMDVGMDgwM0MwQzgwMDgzNTkwMDA4MEJFCis6MTBFMTAwMDA4RTBCMDAzMDAxNzE1MDIzMTk0MDAwNzAyNjU5MDA4MDk5Cis6MTBFMTEwMDAzQzE4MDgwMDhGMTgzMTk4MjQxRkZGODAwMzNGNzgyNDkzCis6MTBFMTIwMDAzMzJEMDA3RjNDMDY4MDAwM0MwRTgwMDQzMzExMDAxMDJDCis6MTBFMTMwMDBBQ0NGMDA5MDEyMjAwMDM0MDFBRTI4MjE5MEEzMDA2QkQ4Cis6MTBFMTQwMDA1NDYwMDAzMjNDMTA4MDA4MjQwNzAwMDFBMEE3MDA2QjM3Cis6MTBFMTUwMDA5NEM0MDA3QTI0ODYwMDBBQTYwNjAwMTIzQzBEODAwOEFBCis6MTBFMTYwMDAzNUE1MDA4MDkwQjEwMDA4MzIyQzAwNDAxNTgwMDAwNEQ1Cis6MTBFMTcwMDAzQzAzODAwODMyNkUwMDAxMTVDMDAwNjIwMDAwMDAwMDAwCis6MTBFMTgwMDAzNDY0MDA4MDhDOEYwMDIwOEZCMzAwNTgxMUYzMDAwQTk0Cis6MTBFMTkwMDAzNDYzMDEwMDhDNzkwMDAwMDI5OUMwMjMxQjAwMDA3N0QyCis6MTBFMUEwMDA4RkE4MDA1OEFDODgwMDIwQUM3NDAwMDAyNDE0MDAwMTMzCis6MTBFMUIwMDBBQzdFMDAwNEFGQjQwMDUwMTZDMDAwMzcwMDAwMDAwMDcxCis6MTBFMUMwMDA4RkE0MDA1MDE0ODAwMDMwMDAwMDAwMDAxMkUwMDAwNTExCis6MTBFMUQwMDAwMDAwMTgyMThGQTkwMDMwMzEzNzAwMDQ1MkUwRkU5MjcwCis6MTBFMUUwMDAwMDYwMTAyMTI0MDMwMDAxMEEwMDBENUIwMDYwMTAyMTczCis6MTBFMUYwMDAwQTAwMERGOTAwMDAzODIxMDA0MEY4MDkyNDA0MDAxNzM2Cis6MTBFMjAwMDAwQTAwMERBNzI0MDIwMDAxM0MxMDgwMDgzNjEwMDA4MDhGCis6MTBFMjEwMDAyNDA5MDAwMTAyNDAyMDIxMEUwMDE0RkNBNjA5MDAxMjZFCis6MTBFMjIwMDA5MjA4MDAyNTI0MDUwMDAxQUZBNTAwNTAzNTAyMDAwMTI5Cis6MTBFMjMwMDAwMjQwMjAyMTBFMDAxNTA2QTIwMjAwMjUwQTAwMEVBOUE4Cis6MTBFMjQwMDAzQzBEODAwODI3QTUwMDM4QUZBODAwNjAwRTAwMENBODgwCis6MTBFMjUwMDBBRkEwMDAzODE0NDBGRjZEOEZBODAwNjA4RkE1MDAzODc0Cis6MTBFMjYwMDAzMEIwMDEwMDUyMDBGRjZBOEVBMjAwMDQ4RkEzMDAzQzcwCis6MTBFMjcwMDA4RDA3MDA1ODAwNjcyMDIzMDQ4M0ZGNjRBRDAzMDA1ODE2Cis6MTBFMjgwMDAwQTAwMEU1NThFQTIwMDA0MEUwMDBDOUUwMjQwMjAyMUIyCis6MTBFMjkwMDAwQTAwMEVDNDAwMDAwMDAwMEUwMDE0RkMwMjQwMjAyMTAxCis6MTBFMkEwMDAzQzA1ODAwODM0QTMwMDgwMDI0MDIwMjEwRTAwMTUwNkEyCis6MTBFMkIwMDBBMDc2MDAwOTAyQzAzMDIxMjQwNDAwMzcwRTAwMTYyRTdCCis6MTBFMkMwMDAwMDAwMjgyMTBBMDAwRUMyOEZBNDAwNTA4RkEyMDAxODVGCis6MTBFMkQwMDA1ODQwRkZBMzNDMEQ4MDA4MEUwMDE0RkMwMjQwMjAyMTkyCis6MTBFMkUwMDA5MjBBMDAyNTI0MEIwMDAxQUZBQjAwNTAzNTQyMDAwNDE4Cis6MTBFMkYwMDAwMjQwMjAyMTBFMDAxNTA2QTIwMjAwMjUwQTAwMEVBOUU4Cis6MTBFMzAwMDAzQzBEODAwODhDQjYwMDMwOEVCRTAwMDgyNDA0MDAxODM2Cis6MTBFMzEwMDAyNkQ1MDAwMTAzQzBGODA5QUNCNTAwMzA4RkIyMDAzMDNCCis6MTBFMzIwMDAwQTAwMEQ1QjMyNDIwMDA0M0MwNzgwMDA5NEU1MDExQUFDCis6MTBFMzMwMDA1MEEwRkY2QTM0QzYwMDEwMEEwMDBFODk5MkEyMDAwQzk5Cis6MTBFMzQwMDAxMjJFMDAyQTJBMkYwMDE1MTFFMDAwMUUyNDE5MDAxNjkzCis6MTBFMzUwMDAyNDE4MDAwQzU2MzhGRjNFMzI2NTAwMDEzQzFGODAwODJGCis6MTBFMzYwMDA5M0UzMDAxQjI0MTBGRkJEMjQxNjAwMEUwMDcwMzAyNDIwCis6MTBFMzcwMDBBM0U2MDAxQjBBMDAwRTY1MzI2NTAwMDE4QzdGMDAwMEQ5Cis6MTBFMzgwMDAxN0Y0RkY4RDAwMDAwMDAwOEM2NzAwMDQwM0M3MzAyM0UyCis6MTBFMzkwMDAwNEMxRkY4NDhGQTgwMDU4MEEwMDBFQkYwMDAwMDAwMENGCis6MTBFM0EwMDAxNjI5RkYzNjhGQTIwMDI0MEEwMDBFNzAyNDE2MDAxMEQyCis6MTBFM0IwMDAyNDExMDAwRTUyRDFGRjMwMjQxNjAwMTAwQTAwMEU2RkY3Cis6MTBFM0MwMDAyNDE2MDAxNjU2MzlGRjIyMzI2NTAwMDEzQzFGODAwOEQyCis6MTBFM0QwMDA5M0UzMDAxQjI0MTBGRkJEMjQxNjAwMTAwMDcwMzAyNEFFCis6MTBFM0UwMDBBM0U2MDAxQjBBMDAwRTY1MzI2NTAwMDEwQTAwMEU2NEY4Cis6MTBFM0YwMDAyNDE2MDAxMjNDMDM4MDAwOEM2MjAxQjgwNDQwRkZGRTJBCis6MTBFNDAwMDAyNDA0MDgwMEFDNjQwMUI4MDNFMDAwMDgwMDAwMDAwMDI4Cis6MTBFNDEwMDAzMEE1RkZGRjMwQzZGRkZGM0MwNzgwMDA4Q0UyMDFCODRCCis6MTBFNDIwMDAwNDQwRkZGRTM0RTgwMTgwQUQwNDAwMDBBQ0U0MDAyMEFECis6MTBFNDMwMDAzQzA0ODAwODk0ODMwMDQ4MzA2M0ZGRkYxMDYwMDAxRDk3Cis6MTBFNDQwMDAzQzBCODAwMDI0QUEwMDEyMDA2QTQ4MkI1MTIwMDAxQUJECis6MTBFNDUwMDAyNDBBMDAwMzk0RjkwMTIwOEY4OTAwMDAyNDBDMDAxQTdCCis6MTBFNDYwMDAzMzM4RkZGRjI3MDdGRkZFMDA2Nzc4MkIzOUVFMDAwMUU2Cis6MTBFNDcwMDAwMDA5NkI4MjAxQUU1ODI0QTEwQzAwMEIxMTYwMDA0NzBCCis6MTBFNDgwMDA4RjgzMDAwNEE1MDcwMDE0OEY4ODAwMDQzNTA3MDAwMTVFCis6MTBFNDkwMDBBRjg3MDAwNDMwQ0MwMDQwNTU4MDAwMEYzQzA4ODAwMDVFCis6MTBFNEEwMDAzQzBDODAwMDM1ODQwMTgwQTQ4NTAwMEUwQTAwMEY5ODgyCis6MTBFNEIwMDA4RjhGMDAwQzI0MEEwMDAzMzU2NDAxODAzMENDMDA0MEFCCis6MTBFNEMwMDA4Rjg5MDAwMDhGODcwMDA0QTA4QTAwMEI1MTgwRkZGNTIwCis6MTBFNEQwMDAzQzBDODAwMDNDMDg4MDAwOTUwMzAxMjAzQzA4ODAwODJCCis6MTBFNEUwMDA5NTE4MDA0MDMwNzlGRkZGMjcyRUZGRkUzMzBGRkZGRjA2Cis6MTBFNEYwMDAwMUNGNjgyQjExQTAwMDAzMDFDMDIwMjE5NTAyMDA0MDJDCis6MTBFNTAwMDAzMDQ0RkZGRjNDMEI4MDAwMDBBNDUwMjMzNTY1MDE4MEEwCis6MTBFNTEwMDBBNEE0MDAwRUE0QUEwMDI0OEY4RjAwMEMzQzA1ODAwMDQ4Cis6MTBFNTIwMDAzNEFFMDE4MDI0MTgwMDAyMzBFRDgwMDBBNUQ4MDAwQzI0Cis6MTBFNTMwMDBBNUM5MDAxMEFEQ0YwMDI4QTVDNjAwMDgxMUEwMDAwRTg3Cis6MTBFNTQwMDAzQzA0ODAwMDk0QUEwMTE2MzE0MkZGRkMyNDQ4MDAwNEQ4Cis6MTBFNTUwMDAwMTA1MTgyMThDNzk0MDAwMzMyNkZGRkYxNEMwMDAwNzA1Cis6MTBFNTYwMDAyNDBFQkZGRjNDMEJGRkZGMzU2NTdGRkYwMEU1MzgyNDFECis6MTBFNTcwMDBBRjg3MDAwNDNDMDQ4MDAwMjQwRUJGRkYzNDhDMDE4MDcwCis6MTBFNTgwMDAwMEVFNjgyNEE1OEQwMDI2QUQ4OTAwMkMzQzA3MTAwMDA0Cis6MTBFNTkwMDBBQzg3MDFCODAzRTAwMDA4MDAwMDAwMDAyNDAyRkZGRTgxCis6MTBFNUEwMDAwMDYyMzgyNDBBMDAwRjc2QUY4NzAwMDQzQzA1ODAwMDIzCis6MTBFNUIwMDAzNEE0MDA3MDhDOEEwMDAwOTBBNjAxMTI4Rjg0MDAwMEExCis6MTBFNUMwMDAyN0JERkZGMDMwQzMwMEZGMDAwMzE4ODIzMDgyMDEwMDM2Cis6MTBFNUQwMDAwMDAwMzgyMTEwNDAwMDM5MjQ2NjAwMDMzMDg3NDAwMEQ1Cis6MTBFNUUwMDA1MEUwMDAzOTMwODgyMDAwMDAwNjEwODAwMDQ1QzgyMTI2Cis6MTBFNUYwMDA4RjJGNDAwMDI0NzgwMDA0MDAxODcwODBBRkFGMDAwMDE3Cis6MTBFNjAwMDAwMUM1NjgyMThEQUM0MDAwQUZBQzAwMDQ5NEFCMDExNjhECis6MTBFNjEwMDAzMTY5RkZGQzAxMjU0MDIxOEQwNTQwMDBBRkE1MDAwOEIwCis6MTBFNjIwMDA4RkE5MDAwODAwMDAzMDIxMDAwMDI4MjEzQzA3MDgwMEM1Cis6MTBFNjMwMDAyNEU3MDEwMDBBMDAwRkU5MjQwODAwMDg5MDQyMDAwMEM2Cis6MTBFNjQwMDAyNEE1MDAwMTJDQUQwMDBDMDA2MkM4MjEwMDE5QzA4MDc3Cis6MTBFNjUwMDAwMzA3NzgyMThERUUwMDAwMTFBMDAwMDYwMENFMzAyNkMxCis6MTBFNjYwMDAwM0E1MTAyMTE0QThGRkY1MDAwNTFBMDA1NTIwRkZGNDlBCis6MTBFNjcwMDA5MDQyMDAwMDNDMDQ4MDAwMzQ4NzAwNzAzQzA1MDgwMDk0Cis6MTBFNjgwMDA4Q0E1MzEwNDhDRTMwMDAwMkNBODAwMjAxMTAwMDAwOUE3Cis6MTBFNjkwMDAwMDZBMzgyMzAwMDU1ODgwM0MwQzA4MDAyNThDMzEwODlFCis6MTBFNkEwMDAwMTZDNDgyMTI0QUEwMDAxQUQyNzAwMDAzQzAxMDgwMEFDCis6MTBFNkIwMDBBQzJBMzEwNEFGODYwMDBDMjQwNzAwMDEwMEUwMTAyMUQxCis6MTBFNkMwMDAwM0UwMDAwODI3QkQwMDEwMTEwMEZGRkMwMDAwMzgyMTA2Cis6MTBFNkQwMDAwMDA2NjA4MDAxODU1ODIxOEQ2NDQwMDAyNDY5MDAwNDkzCis6MTBFNkUwMDAwMDA5Mzg4MEFGQTQwMDAwMDBFNTE4MjE4QzY2NDAwMEM2Cis6MTBFNkYwMDBBRkEwMDAwODBBMDAwRkQ5QUZBNjAwMDQyN0JERkZEOEJECis6MTBFNzAwMDBBRkIyMDAxOEFGQjAwMDEwQUZCRjAwMjRBRkI0MDAyMDBDCis6MTBFNzEwMDBBRkIzMDAxQ0FGQjEwMDE0OEY4NzAwMDAzQzA0ODAwMDMxCis6MTBFNzIwMDA5NDgzMDEwRTMwRTI0MDAwMDAwMDgwMjExMDQwMDAxMDcwCis6MTBFNzMwMDAzMDcyRkZGRjNDMDYwMDIwMDBFNjI4MjQxMEEwMDAwREU4Cis6MTBFNzQwMDAzMEVBODAwMDhGODgwMDA0MjQwOUJGRkYwMEU5MzgyNEU0Cis6MTBFNzUwMDAzNTAzMTAwMEFGODcwMDAwMzBGMTIwMDAxNjIwMDAwQkI5Cis6MTBFNzYwMDAzQzE0MDAwNDI0MThGRkJGMEEwMDEwMzgwMDc4MTAyNDVECis6MTBFNzcwMDAzMEVBODAwMDE1NDAwMDg2M0MwQzAwMjAzMEYxMjAwMDdCCis6MTBFNzgwMDAxMjIwRkZGODhGODMwMDA0M0MxNDAwMDQwMEY0OTgyNDQ2Cis6MTBFNzkwMDAxMjYwRkZGNTI0MThGRkJGMzQ2MjAwNDAzMEY5MDEwMDE5Cis6MTBFN0EwMDAxMzIwMDAwRkFGODIwMDA0M0MwMjAwMjAwMEUyRjgyNDk2Cis6MTBFN0IwMDAxM0UwMDAwNTNDMEI4MDAwM0MwNDAwMDQwMEU0MTgyNDM2Cis6MTBFN0MwMDAxMDYwMDBDRjAwMDAwMDAwOTU2QTAxMUU5NTY5MDExQ0QxCis6MTBFN0QwMDAzMTQ2RkZGRjAwMDk0NDAwMDBDODI4MjVBRjg1MDAwQzIyCis6MTBFN0UwMDAzQzBFODAwMDk1Q0QwMTBDOERDNDQwMDAzNDBDRkZGRjIxCis6MTBFN0YwMDAxMDhDMDBCMDMxQTVGRkZGMzA4RjAxMDA1NUUwMDAwMTAzCis6MTBFODAwMDAyNDEwMDAxMDMwRjExMDAwNTIyMDAwMDgzNjExMDAwMUQxCis6MTBFODEwMDAzMEYzMDAyMDE2NjAwMDlGM0MxODEwMDAwMEY4QTAyNDgwCis6MTBFODIwMDAxNjgwMDA5NjNDMDQwQzAwMzYxMTAwMDEzMEU4MDEwMDBGCis6MTBFODMwMDAxNTAwMDAwQjNDMEEwMDAxOEY4ODAwMDQzMTA5NDAwMERDCis6MTBFODQwMDAxNTIwMDAwODAwRUEzMDI0M0MwQzFGMDEwMEVDNTgyNDdECis6MTBFODUwMDAzQzBBMTAwMDUxNkEwMEFFMzBBRDAyMDAzQzBBMDAwMUQzCis6MTBFODYwMDAwMEVBMzAyNDE0QzAwMDk1M0MwNTEwMDAwMEU1MjAyNDg3Cis6MTBFODcwMDAwMDAwNDAyMTEwODAwMDA3MDAwMDkwMjEwMDA3OUUwMjQ4Cis6MTBFODgwMDAzMjcyMDAwRjAwMTI3ODgwM0MwRTA4MDEyNUNFODMwMDAyCis6MTBFODkwMDAwMUVFNDAyMThGOTQwMDFDMTI4MDAwNDcwMjIwODAyMTRECis6MTBFOEEwMDAxMDgwMDA5MTAwMDAwMDAwM0MwOTgwMDA5NTM5MDEwRUE1Cis6MTBFOEIwMDA5MTAzMDAwMDAyMjAzMDIxMzMzOEZGRkYyNzA1MDAwNEI4Cis6MTBFOEMwMDAxMDYwMDAwODAwMDBBMDIxMjQxRjAwMDMxMDdGMDEzQUZGCis6MTBFOEQwMDAyNDA0MDAwMjkxMEMwMDAxMTE4NDAxMTgzMEVBMDA0MDY4Cis6MTBFOEUwMDAwMDEyQTFDMDhGOTIwMDIwNTI0MDAwMDEzNjI2MDA0MDQ1Cis6MTBFOEYwMDAzQzEzODAwMDhFNkY0MDAwMzFGMTAxMDAxMjIwMDBDQkVDCis6MTBFOTAwMDAzMEQxRkZGQjNDMTgwODAwOEYxODAwMjQzMEQyMDAwNERGCis6MTBFOTEwMDAzMzA2MDAwNDE0QzAwMENDMzBCMEZGRkY1NjQwMDAwMUE1Cis6MTBFOTIwMDAzNjMxMDAwNDAyODAyMDIxMDIwMDI4MjEwRTAwMEY1NUZDCis6MTBFOTMwMDAwMjIwMzAyMTE2NDAwMDBEMDAwMDIwMjEzNjY1MDE4MEE0Cis6MTBFOTQwMDAzQzA0ODAwMDhDOTMwMUI4MDY2MEZGRkUyNDE5MjAwMDZGCis6MTBFOTUwMDAyNDE0MDAwMkE0QjkwMDA4QTBCNDAwMEJBNEEwMDAxMDY1Cis6MTBFOTYwMDAzQzA1MTAwMEFDODUwMUI4MDAwMDIwMjE4RkJGMDAyNEI5Cis6MTBFOTcwMDA4RkI0MDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDI5Cis6MTBFOTgwMDA4RkIwMDAxMDAwODAxMDIxMDNFMDAwMDgyN0JEMDAyODkwCis6MTBFOTkwMDAwMEVDNTgyNDExNjBGRjdBMzBGMTIwMDA4RjhEMDAwNEM0Cis6MTBFOUEwMDAzQzBGRkZGRjM1RUU3RkZGMDBFRTM4MjQzNUEzODAwMERCCis6MTBFOUIwMDAwQTAwMTAyN0FGODcwMDAwM0MwMjA4MDA4QzQyMDAzODk0Cis6MTBFOUMwMDAzQzA0MDgwMDI0ODQwMDM4MTA0MDAwNEIyNDQ5RkZGRjE5Cis6MTBFOUQwMDAzQzAzODAwMDk0NkMwMTBFMzE4QkZGRkYxMTAwMDBBMEZFCis6MTBFOUUwMDAyNTczMDAwNDNDMTAwODAwOEUxMDAwMzAxMjAwMDAwQTRECis6MTBFOUYwMDAzMEU2MDEwMDhGOEEwMDA0MzE0MzQwMDAxMDYwMDAwNkI5Cis6MTBFQTAwMDAzQzBGMEYwMDAwRUY3MDI0M0MwRDAxMDAwMUFFNDAyQkM1Cis6MTBFQTEwMDAxMTAwMDBERjMyNjVGRkZGMTBDMDAwNjkzQzE0MEYwMEQ5Cis6MTBFQTIwMDAwMEY0MjgyNDNDMTgwMjAwMTBCODAwNjU4Rjk5MDAwQ0VGCis6MTBFQTMwMDAzMjcwRkZGRjAzMjk5ODI0MDI2NDkwMjE5MjQ5MDAwNDU4Cis6MTBFQTQwMDAyNTI3MDAwNDAwMDcyMUMwMDIwMDI4MjEzNjI2MDAwMkU1Cis6MTBFQTUwMDAwRTAwMEY1NTAwMDAwMDAwOEZCRjAwMjQ4RkI0MDAyMDZGCis6MTBFQTYwMDA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDRDCis6MTBFQTcwMDAwMDAwMTAyMTAzRTAwMDA4MjdCRDAwMjgzQzAyMEJGRjI2Cis6MTBFQTgwMDAwMEU0MTgyNDM0NUZGRkZGMDNFM0M4MkI1MzIwRkY2NzIzCis6MTBFQTkwMDAzNjExMDAwMTNDMDYwODAwOENDNjAwMkMzNjExMDAwNTFBCis6MTBFQUEwMDAyNEQwMDAwMTNDMDEwODAwQUMzMDAwMkMwQTAwMTA1REFECis6MTBFQUIwMDAzMEU4MDEwMDBBMDAxMDUyMjQxMDAwMjAwMjQwMjgyMUYyCis6MTBFQUMwMDAzQzEyMDgwMDhFNTIwMEQ4MjQwNDAwODAyNjREMDAwMTFDCis6MTBFQUQwMDAzQzAxMDgwMEFDMkQwMEQ4MEUwMDBGNTUyNDA2MDAwM0ExCis6MTBFQUUwMDAwQTAwMTBFODhGQkYwMDI0M0MwODA4MDEyNTA4ODMwMEI1Cis6MTBFQUYwMDAwQTAwMTA3QzNDMDk4MDAwMEEwMDEwQzUwMDAwNDgyMTczCis6MTBFQjAwMDAwRTAwMEZCQzAwMDAwMDAwMEEwMDEwNDk4Rjg3MDAwMEIzCis6MTBFQjEwMDAxNUEwRkY1MzNDMEEwMDAxMjY0NTAwMDQzMEFBRkZGRjYwCis6MTBFQjIwMDAzNjI2MDAwMjNDMDM4MDAwOEM3MjAxQjgwNjQwRkZGRUNFCis6MTBFQjMwMDA4Rjg1MDAwODM0NjkwMTgwQUQyMDAwMDAxMEEwMDBBRjZGCis6MTBFQjQwMDAzQzA0ODAwMDI1NEYwMDEyMDBBRjcwMkI1MUMwMDBBQzc4Cis6MTBFQjUwMDAyNDAzMDAwMzk0NzgwMTIwMjQxNDAwMUEzMEYxNDAwMEFCCis6MTBFQjYwMDAzMzEzRkZGRkExMzQwMDBCMTIyMDAwQjYyNjYzRkZGRTEzCis6MTBFQjcwMDAwMEEzQzgyQjU3MjAwMEI0MjQxRkZGRkUzNTA4MDAwMTU2Cis6MTBFQjgwMDBBNTIzMDAxNEFGODgwMDA0M0MxMDgwMDAyNDBDQkZGRkI0Cis6MTBFQjkwMDAwMTBDNDgyNDI0MEIwMDAyMzYwODAxODBBNTBCMDAwQzUwCis6MTBFQkEwMDBBNTBBMDAwRUE1MDYwMDA4QTUwOTAwMjZBNTA3MDAxMDY1Cis6MTBFQkIwMDAzQzA3MTAwMEFFMDcwMUI4MEEwMDEwRTg4RkJGMDAyNDIwCis6MTBFQkMwMDAzQzAzMDgwMDhDNjMwMEQwMkU0NTAwMEMwMDEyMjFDMENECis6MTBFQkQwMDAzODZCMDAwMTJENjIwMDAxMDA0NUY4MjQxN0UwRkY5QTEwCis6MTBFQkUwMDAzMjcwRkZGRjI2NENGRkZDMkQ4NDAwMDQ1NDgwMDA1MDNGCis6MTBFQkYwMDAwMDAwMjAyMTM4NkEwMDAyMkQ0MzAwMDEwMDY1ODAyNEI2Cis6MTBFQzAwMDAxNjAwMDA0QTMyNzBGRkZGMDAwNzZBNDIwMDEyNzAyQkE0Cis6MTBFQzEwMDAwMUFFNDAyNDU1MDAwMDYzMDAwMDIwMjEwMDEyMjFDMEY1Cis6MTBFQzIwMDAwMjAwMjgyMTBBMDAxMEU1MzYyNjAwMDIzNERGMDAwMjI3Cis6MTBFQzMwMDAwMjgwMjAyMTMzRTZGRkZGMEUwMDBGNTUzMEE1RkZGRkI1Cis6MTBFQzQwMDAwQTAwMTBBQzAwMDAyMDIxMjQwNDAxMDAwMjAwMjgyMTQ5Cis6MTBFQzUwMDAwRTAwMEY1NTAyMjAzMDIxMEEwMDEwOTgwMDAwMDAwMDFECis6MTBFQzYwMDA4QzY2NDAwMDMwQ0YwMTAwMTFFMDAwM0QzMEY4MDEwMDFCCis6MTBFQzcwMDAzQzEyMDgwMDhFNTIwMDI0MTMwMDAwMTEzMjM0MDAwNEFDCis6MTBFQzgwMDAzQzFGMEYwMDAwRkZDODI0M0MwNTAyMDAxMzI1MDAwQ0E4Cis6MTBFQzkwMDA4RjhDMDAwQzAyMjAzMDIxMzI2NUZGRkYwMTg5NTgyNDNGCis6MTBFQ0EwMDAwMTY0MTAyMTkwNDkwMDA0MzIzMEZGRkIyNDExRkZGRTYzCis6MTBFQ0IwMDAyNTI3MDAwNDBFMDAwRjU1MDAwNzIxQzAwMjUxOTAyNEEzCis6MTBFQ0MwMDAyNDA0MDAwMTEyNDQwMDUyMzI0MzAwMDExNDYwMDA1ODMxCis6MTBFQ0QwMDAwMjAwMzAyMTMyNEEwMDA0MTE0MDAwMDQ4RjhEMDAwMEYwCis6MTBFQ0UwMDAzMUE4MDgwMDE1MDAwMDVBMzI2NUZGRkYxNjgwRkY1QjRGCis6MTBFQ0YwMDA4RkJGMDAyNDNDMTM4MDAwMzY2NTAxODAzQzA0ODAwMEY3Cis6MTBFRDAwMDA4QzkwMDFCODA2MDBGRkZFMjQwNjIwMDAyNDBGMDAwMkFDCis6MTBFRDEwMDBBNEE2MDAwOEEwQUYwMDBCQTRBMDAwMTAzQzBFMTAwMDk5Cis6MTBFRDIwMDBBQzhFMDFCODBBMDAxMEU4OEZCRjAwMjQwMDAwMjAyMTNCCis6MTBFRDMwMDAwMjAwMjgyMTBBMDAxMEU1MzYyNjAwMDIxMTQwRkVFOUYzCis6MTBFRDQwMDAwMDAwQTAyMTk1MkUwMTEwOTUwRDAwMDIzMUM4RkZGRjkzCis6MTBFRDUwMDA1MUE4RkVFNDAwMTJBMUMwMEEwMDEwOEI4RjkyMDAyMDdGCis6MTBFRDYwMDAzQzA1MDgwMDhDQTUwMDI0MzBCODAwMDE1MzAwRkYzQjhGCis6MTBFRDcwMDA4RkJGMDAyNDMyNjVGRkZGMzYyNjAwMDIwMDAwMjAyMUVECis6MTBFRDgwMDAwRTAwMEY1NTAwMDAwMDAwMEEwMDEwRTg4RkJGMDAyNDlECis6MTBFRDkwMDAzNjI2MDAwMjBFMDAwRjU1MjQwNDAwODAwQTAwMTBFOEY5Cis6MTBFREEwMDA4RkJGMDAyNDAyMDAyODIxMEUwMDBGNTUzMjI2RkZGQkUyCis6MTBFREIwMDAwQTAwMTE1OTAwMTIyMUMwOTEwMzAwMDEyNDAyMDAwMTMwCis6MTBFREMwMDAxMDYyRkVFQTI0MDQwMDAxMjQxMDAwMDIxNDcwRkVDNTQzCis6MTBFREQwMDAwMDAwQTAyMTMwRTMwMDQwMTA2MEZFQzM4RjkyMDAyMEFECis6MTBFREUwMDA5NTJCMDExMDk1MDkwMDAyMzE2N0ZGRkYxMTI3RkVFMDA2Cis6MTBFREYwMDA4RkJGMDAyNDBBMDAxMDhCMDAwMDAwMDAyNDAzMDAwM0QyCis6MTBFRTAwMDAzNDgyMDE4MEEwNDMwMDBCMEEwMDExMzQzQzEwODAwMEMyCis6MTBFRTEwMDAzMjE0MDAwNDE2ODAwMDAzMzI2NUZGRkYzNjEyMDAwMjMwCis6MTBFRTIwMDAzMjUwRkZGRjAyMDAzMDIxMEEwMDExQjEwMDAwMjAyMTAyCis6MTBFRTMwMDAwMDAwMjAyMTBFMDAwRjU1MzI2NUZGRkYwQTAwMTE4NkU5Cis6MTBFRTQwMDAzMjEwRkZGQjI0MUZGRkZFMEEwMDExMzIwMTFGNDAyNDc1Cis6MTBFRTUwMDAwMjAwMzAyMTBFMDAwRjU1MjQwNDAxMDAwQTAwMTE4QzFECis6MTBFRTYwMDAwMDAwMDAwMDI3QkRGRkM4QUZCMDAwMTBBRkJGMDAzNEU2Cis6MTBFRTcwMDAzQzEwNjAwQ0FGQkUwMDMwQUZCNzAwMkNBRkI2MDAyODFFCis6MTBFRTgwMDBBRkI1MDAyNEFGQjQwMDIwQUZCMzAwMUNBRkIyMDAxODgwCis6MTBFRTkwMDBBRkIxMDAxNDhFMEU1MDAwMjQwRkZGN0YzQzA2ODAwMDlGCis6MTBFRUEwMDAwMUNGNjgyNDM1QUMzODBDMjQwQjAwMDNBRTBDNTAwMEE1Cis6MTBFRUIwMDBBQ0NCMDAwODNDMDEwODAwQUMyMDAwMjAwRTAwMTc1RjFFCis6MTBFRUMwMDAwMDAwMDAwMDNDMEEwMDEwMzU0OTgwNTFBRTA5NTM3QzE3Cis6MTBFRUQwMDAzQzA2NjAxNjhDQzcwMDAwM0MwODYwMTQ4RDA1MDBBMDNECis6MTBFRUUwMDAzQzAzRkZGRjAwRTMyMDI0M0MwMjUzNTMwMDA1MkZDMkU0Cis6MTBFRUYwMDAxNDgyMDAwNjM0RDA3QzAwMDAwNUEwODAwMjg2OTgyMTkwCis6MTBFRjAwMDA4RTcyMDAwNDNDMTE2MDAwMDI1MTgwMjE4RTFFMDA3ODM4Cis6MTBFRjEwMDA4RTE3MDA3QzNDMDI2MDAwM0MwNTA4MDEyNEE1ODE4NDFBCis6MTBFRjIwMDAzNDQ0MjAyMDI0MDYwMDBBQUY5RTAwMTAwRTAwMTYwODZDCis6MTBFRjMwMDBBRjk3MDAxNDNDMTgwMDk4MjYwNTAzODgzQzFGMDAxMDZBCis6MTBFRjQwMDAzQzE5NjAwQzM3MTYwMEMwM0MxNTgwMDBBRjNGNTNGQ0U1Cis6MTBFRjUwMDAzQzFFMDgwMDI3REUwMDM4M0MxNzA4MDEyNkY3ODMwMjE0Cis6MTBFRjYwMDBBRUI2MDEzQ0FGODUwMDE4M0MwNDdGRkYzNDg4RkZGRjNDCis6MTBFRjcwMDAzQzA3ODAwMDBBMDAxMjM3M0MwNjYwMDA4Q0FCMDAwMEEyCis6MTBFRjgwMDAzMTZBMDAwMTE1NDAwMDAyMzU2MzAwMDFBQ0EzMDAwMEE2Cis6MTBFRjkwMDA1NDgwMDAwOTMyMDUwMDAxOENGMDAwMDA4Q0M5MTgwQzY3Cis6MTBFRkEwMDAzMjA0MDAwMzA1MjFGRkY1MDEyODE4MjRBQ0MzMTgwQzE2Cis6MTBFRkIwMDAwQTAwMTIzMDAwMDAwMDAwMTRBMDAwNTUzQzExODAwMDJGCis6MTBFRkMwMDAzMjA2MDAwMjEwQzBGRkU4OEY4NTAwMTgzQzA0ODAwMDY0Cis6MTBFRkQwMDA4Qzk5MDE0MDI0MTAwMDQwQUM5OTAwMjA4Qzk4MDE0ODg1Cis6MTBFRkUwMDAwMDE4N0UwMjMxRTMwMDcwMTA3MDAyMkMwMDAwMDAwMDU3Cis6MTBFRkYwMDAyQzY3MDA0MTUwRTAwMDc4MjQwNDAwNjAyNDExMDAyMEI4Cis6MTBGMDAwMDAxMDcxMDAwNjNDMUY0MDAwM0MxMzgwMDBBRTdGMDE3ODY5Cis6MTBGMDEwMDAwMDAwMDAwMDBBMDAxMjJCOEY4NTAwMTg4QzkzMDE0ODE1Cis6MTBGMDIwMDAyNDE2MDAwNDM0ODgwMTgwMDAxMzRDMDIzMTI1MDBGRkFGCis6MTBGMDMwMDA4QzgzMDE0MDEwQjYwMTczMjRCMkZGRkEyRTRCMDAwNkY4Cis6MTBGMDQwMDA1MTYwMDAxMzNDMDU4MDAwOEM4NjAxNDQzMEE0MDBGRjExCis6MTBGMDUwMDAzMEQ0MDBGRjMwQzMwMEZGMkU4NTAwMDgxNEEwMDAwMjRBCis6MTBGMDYwMDAyNDY3MDAwNDI0MDcwMDAzMjQwQzAwMDkxMDhDMDFBQzYxCis6MTBGMDcwMDAyODhEMDAwQTExQTAwMTk4MjQxNTAwMEEyNDBFMDAwODBBCis6MTBGMDgwMDAxMDhFMDAxNThGOTEwMDFDMDAwNzE5QzAzQzA1ODAwMEYwCis6MTBGMDkwMDA4Q0E3MDFCODA0RTBGRkZFMjQxNjAwMDJBRDAzMDAwMEI3Cis6MTBGMEEwMDBBNTA5MDAwOEExMTYwMDBCOENBNDAxNDgzQzFGNDAwMEQ0Cis6MTBGMEIwMDAzQzEzODAwMEE1MDQwMDEwOENBOTAxNDRBRDA5MDAyNDc0Cis6MTBGMEMwMDAzQzA4MTAwMEFDQTgwMUI4QUU3RjAxNzgwMDAwMDAwMDM5Cis6MTBGMEQwMDAwQTAwMTIyQjhGODUwMDE4MDAwNkNBMDIwMDA3MjA4MDQ0Cis6MTBGMEUwMDAzQzE2MDgwMTI2RDY4MzAwMDA5NkMwMjEyNjJGMDAwMTc5Cis6MTBGMEYwMDAzMzI1MDBGRjI0MTAwMDAxQTMxOTAwMDAxNEIwRkZFMjIzCis6MTBGMTAwMDBBRjhGMDAxQzAwMDcxOUMwMEEwMDEyNzRBRjg1MDAyMEUxCis6MTBGMTEwMDA4RTMzMDEyODNDMEQ4MDA4QUUzMzAwMjA4RTJDMDEwNDc0Cis6MTBGMTIwMDA4RTI2MDEwMDk1QTgwMDQ4QUY4QzAwMDBBRjg2MDAwNDMxCis6MTBGMTMwMDAzMTAzRkZGRjBFMDAwRjRFQUY4MzAwMDgzQzA3MDgwMEFECis6MTBGMTQwMDA4Q0U3MDBDMDEwRTAwMDJEOEY4NzAwMDAzQzBGMDgwMDA2Cis6MTBGMTUwMDA4REVGMDBDNDI1RUUwMDAxM0MwMTA4MDBBQzJFMDBDNDc4Cis6MTBGMTYwMDAzQzA0ODAwMDhDOTEwMTI0M0MwNzYwMjBBQ0YxMDAxNDI5Cis6MTBGMTcwMDAwMDAwMDAwMDNDMDY4MDAwM0MxNjQwMDBBQ0Q2MDEzODgwCis6MTBGMTgwMDAwMDAwMDAwMDUyNjBGRjhGMzIwNjAwMDIyNjY5MDE0MDM1Cis6MTBGMTkwMDAyNjZEMDA4MDI0MTVGRjgwMDEzNTYwMjQwMUI1NzAyNEEwCis6MTBGMUEwMDAwMDBFMTk0MDMxQjQwMDdGMDAwQzkxNDAzMTI4MDA3RkRGCis6MTBGMUIwMDAzQzA1MjAwMDM0QTIwMDAyMDA3NDUwMjUwMjQ4NTgyNTY2Cis6MTBGMUMwMDAwMTYyOTgyNTAxNDJGODI1QUNERjA4MzBBQ0QzMDgzMDQ1Cis6MTBGMUQwMDAwQTAwMTI0MjMyMDYwMDAyMTQ2NEZGOEIzQzFGNDAwMEZBCis6MTBGMUUwMDAwRTAwMUY3OTNDMTM4MDAwM0MxRjQwMDBBRTdGMDE3ODY5Cis6MTBGMUYwMDAwMDAwMDAwMDBBMDAxMjJCOEY4NTAwMTgzQzE0MDAxMDNDCis6MTBGMjAwMDAwMEY0OTAyNDE2NDAwMEE3OEY4MzAwMDQzQzE4MDgwMEU3Cis6MTBGMjEwMDA4RjE4MDAyMDk2MzYwMTBFMzBGNTQwMDAyNzExMDAwMUFFCis6MTBGMjIwMDAzQzAxMDgwMEFDMzEwMDIwMzJEMkZGRkYxMkEwMDBCMzM1Cis6MTBGMjMwMDAwMDAwODgyMTNDMUYwMDIwMDBGRkM4MjQxMzIwMDBCMERDCis6MTBGMjQwMDAzMEU5ODAwMDhGODIwMDA0MjQwNEJGRkYwMEU0MzgyNEVBCis6MTBGMjUwMDAzNDQzMTAwMEFGODcwMDAwMzBFNjIwMDAxMEMwMDBBNTQ2Cis6MTBGMjYwMDAyNDBFRkZCRjNDMEQwMDA0MDBFRDYwMjQxMTgwMDAwMjVECis6MTBGMjcwMDAwMDZFMTAyNDM0NjIwMDQwMzBFRjAxMDAxMUUwMDAwRkY2Cis6MTBGMjgwMDBBRjgyMDAwNDNDMTUwMDIwMDBGNUEwMjQxMjgwMDAwNTg4Cis6MTBGMjkwMDAzQzA0ODAwMDNDMTgwMDA0MDBGOEIwMjQxMkMwMDEyRjg4Cis6MTBGMkEwMDAwMDAwMDAwMDk0OEEwMTFFOTQ4OTAxMUMzMTVGRkZGRjU5Cis6MTBGMkIwMDAwMDA5MTQwMDAzRTJDODI1QUY5OTAwMEMzQzA1ODAwMDRBCis6MTBGMkMwMDA5NEEzMDEwQzhDQTQ0MDAwMzQwQkZGRkYxMDhCMDBDQkU3Cis6MTBGMkQwMDAzMDY1RkZGRjMwODgwMTAwNTUwMDAwMDEyNDExMDAxMDQ3Cis6MTBGMkUwMDAzMEU2MTAwMDEwQzAwMDEzMzYzNTAwMDEzMEVDMDAyMDZECis6MTBGMkYwMDAxNTgwMDAwQTNDMEUxMDAwMDBFRTY4MjQxMUEwMDAwRERECis6MTBGMzAwMDAzQzE4MEMwMDNDMTYwQkZGMDBGOEE4MjQzNkQ0RkZGRjc1Cis6MTBGMzEwMDAwMjk1NzgyQjExRTAwMDA3MzYzNTAwMDEzQzE5MDgwMEYyCis6MTBGMzIwMDA4RjM5MDAyQzM2MzUwMDA1MjczMTAwMDEzQzAxMDgwMERCCis6MTBGMzMwMDBBQzMxMDAyQzMwRkYwMTAwMTdFMDAwMEIzQzBBMDAwMTRCCis6MTBGMzQwMDA4Rjg4MDAwNDMxMDI0MDAwMTQ0MDAwMDgwMEVBMzAyNDk1Cis6MTBGMzUwMDAzQzA0MUYwMTAwRTQ1MDI0M0MwOTEwMDAxMTQ5MDEwMzQyCis6MTBGMzYwMDAzMEFCMDIwMDNDMEEwMDAxMDBFQTMwMjQxNEMwMDA5OENGCis6MTBGMzcwMDAzQzAzMTAwMDAwRTMyMDI0MDAwMDQwMjExMDgwMDAwNzFGCis6MTBGMzgwMDAwMDAwQTAyMTAwMDc2RTAyMzFCNDAwMEYwMDE0NjA4MDVECis6MTBGMzkwMDAzQzEyMDgwMTI2NTI4MzAwMDE5MjQwMjE4RjhFMDAxQ0VFCis6MTBGM0EwMDAxMUMwMDA2MjAyQTA4ODIxMTQ4MDAwMDMzQzA5ODAwMDgzCis6MTBGM0IwMDAzQzA4MDgwMTI1MDg4MzAwOTUyRjAxMEU5MTAzMDAwMEU5Cis6MTBGM0MwMDAwMkEwMzAyMTMxRTRGRkZGMjQ4NTAwMDQxMDYwMDAwODEyCis6MTBGM0QwMDAwMDAwQjAyMTI0MTYwMDAzMTA3NjAxMDkyNDBBMDAwMjVGCis6MTBGM0UwMDA5MTBCMDAwMTExNkEwMDI2MzBFMzAwNDAwMDE0QjFDMDA3Cis6MTBGM0YwMDA4RjkyMDAyMDUyNDAwMDAxMzZBNjAwNDAzQzE0ODAwMDRECis6MTBGNDAwMDA4RThDNDAwMDMxOTUwMTAwMTJBMDAwQkUzMEQ1MDAwNDYyCis6MTBGNDEwMDAzQzBEMDgwMDhEQUQwMDI0MzBEMkZGRkIzMUE2MDAwNDY2Cis6MTBGNDIwMDAxNEMwMDBGMTMwQjFGRkZGNTZBMDAwMDEzNjUyMDAwNEI1Cis6MTBGNDMwMDAwMkMwMjAyMTAyMjAyODIxMEUwMDBGNTUwMjQwMzAyMTU5Cis6MTBGNDQwMDAxNkEwMDAwRDAwMDAyMDIxMzY4NDAxODAzQzA1ODAwMEJDCis6MTBGNDUwMDA4Q0FFMDFCODA1QzBGRkZFMjQxNjIwMDAyNDBGMDAwMjY4Cis6MTBGNDYwMDBBNDk2MDAwOEEwOEYwMDBCQTQ4MDAwMTAzQzA0MTAwMDlDCis6MTBGNDcwMDBBQ0E0MDFCODAwMDAyMDIxMEEwMDEzODYwMDgwMTAyMUVFCis6MTBGNDgwMDAxMDYwRkZEQjAwMDBCMDIxOTUyNzAxMTA5NTA5MDAwMkY0Cis6MTBGNDkwMDAzMEU4RkZGRjUxMjhGRkQ2MDAxNEIxQzAwQTAwMTM0RTE4Cis6MTBGNEEwMDA4RjkyMDAyMDI0MEVCRkZGMDA2RTY4MjQxMUEwMDAwNzc5Cis6MTBGNEIwMDAyNDBGODdGRjAwNkZBODI0MTZBMDAwMEEzQzE5MDA2MEUzCis6MTBGNEMwMDAwMEY5QzAyNDEzMDAwMDA3MDAwMDAwMDAwRTAwMEQzNEY2Cis6MTBGNEQwMDAwMDAwMDAwMDEwNDBGRjI4M0MwNjgwMDAwQTAwMTJBQTJECis6MTBGNEUwMDAzQzA0ODAwMDBFMDAxNEU1MDAwMDAwMDAwQTAwMTM4NkIyCis6MTBGNEYwMDAwMDAwMDAwMDBBMDAxMkVGMDA2RTEwMjQzMEU5ODAwMEM2Cis6MTBGNTAwMDAxMTIwRkY1NThGODMwMDA0M0MwQjAwMjAwMEVCNTAyNDlBCis6MTBGNTEwMDAxMTQwRkY1MThGODUwMDA0M0MwOEZGRkYzNTAzN0ZGRjNBCis6MTBGNTIwMDAwMEUzMzgyNDBBMDAxMkU2MzRBMzgwMDAzQzA1MDgwMEZBCis6MTBGNTMwMDA4Q0E1MDAzODE0QTAwMDAyMjRBNEZGRkYwMDAwMjAyMUE1Cis6MTBGNTQwMDAzQzAzODAwMDk0NzkwMTBFMzMzOEZGRkYxMTAwMDBEQThDCis6MTBGNTUwMDAyNzEyMDAwNDNDMTEwODAwOEUzMTAwMzAxMjIwMDAwQUVFCis6MTBGNTYwMDAzMEU5MDEwMDhGODIwMDA0MzA1RjQwMDAxM0UwMDAwNkE0Cis6MTBGNTcwMDAzQzA4MEYwMDAwRTgxODI0M0MwQjAxMDAwMTYzNTAyQkVECis6MTBGNTgwMDAxMTQwMDBDMTMyNDVGRkZGMTEyMDAwMkUzQzBEMEYwMDNECis6MTBGNTkwMDAwMEVEMzAyNDNDMEMwMjAwMTBDQzAwMkE4Rjk2MDAwQ0E5Cis6MTBGNUEwMDAzMjUxRkZGRjAyQzQ3ODI0MDFGRTcwMjE5MUQyMDAwNDgxCis6MTBGNUIwMDAyNjQ3MDAwNDAwMDcyMUMwMDIyMDI4MjEzNkE2MDAwMkE5Cis6MTBGNUMwMDAwRTAwMEY1NTAwMDAwMDAwMEEwMDEzODYwMDAwMTAyMUY1Cis6MTBGNUQwMDAzQzBCMDgwMDhENkIwMEQ4MDI0MDI4MjEyNDA0MDA4MEQ5Cis6MTBGNUUwMDAyNTY3MDAwMTNDMDEwODAwQUMyNzAwRDgwRTAwMEY1NTJDCis6MTBGNUYwMDAyNDA2MDAwMzBBMDAxMzg2MDAwMDEwMjEwQTAwMTMwOUU0Cis6MTBGNjAwMDAyNDExMDAyMDhDODQwMTQwMDEwMDI4MjEzQzAzODAwMDRCCis6MTBGNjEwMDA4QzdGMDFCODA3RTBGRkZFMjQwMjAwMUNBQ0E0MDAwMEIwCis6MTBGNjIwMDBBMEEyMDAwQjNDMEExMDAwQUM2QTAxQjgzQzFGNDAwMENECis6MTBGNjMwMDAzQzEzODAwMEFFN0YwMTc4MDAwMDAwMDAwQTAwMTIyQjBFCis6MTBGNjQwMDA4Rjg1MDAxODNDMDMwODAwOEM2MzAwRDAyRTg1MDAwQ0M5Cis6MTBGNjUwMDAwMDE0MjFDMDM4NzEwMDAxMkUzOTAwMDEwMzI1QzAyNDk3Cis6MTBGNjYwMDAxNzAwRkZENTMyNTFGRkZGMjY5RkZGRkMyRkU0MDAwNDU3Cis6MTBGNjcwMDAxNDgwMDAwODAwMDAyMDIxMzg2QjAwMDIyRDZBMDAwMTcwCis6MTBGNjgwMDAwMTQ1MTAyNDEwNDAwMDA2MDAwNzQyNDIzMjUxRkZGRjlFCis6MTBGNjkwMDAwMDAwMjAyMTAyMjAyODIxMEEwMDEzQzEzNkE2MDAwMjAyCis6MTBGNkEwMDAwMDE0MTgyQjAxMDMyODI0MTRBMDAwMDUzMjUxRkZGRjc5Cis6MTBGNkIwMDAwMDE0MjFDMDAyMjAyODIxMEEwMDEzQzEzNkE2MDAwMjJFCis6MTBGNkMwMDAwMDAwMjAyMTAyMjAyODIxMEUwMDBGNTUzMkE2RkZGQjRBCis6MTBGNkQwMDAwQTAwMTNGRTAwMTQyMUMwMTA5NTAwNUEwMDA3Njg4MDJDCis6MTBGNkUwMDAyNDA2MDAwQjE0ODZGRTY5MDAwNzE5QzAwMDA3Qzg4MEI1Cis6MTBGNkYwMDAzQzExMDgwMTI2MzE4MzAwMDMzMTMwMjEwQTAwMTI3NEM1Cis6MTBGNzAwMDBBMEMwMDAwMTM0RDQwMDAyMDJDMDIwMjEzMEE1RkZGRkI4Cis6MTBGNzEwMDAwRTAwMEY1NTMyODZGRkZGMEEwMDEzNkYwMDAwMjAyMUY0Cis6MTBGNzIwMDAwMDA3Rjg4MDNDMEEwODAxMjU0QTgzMDAwM0VBMTAyMUZCCis6MTBGNzMwMDA5MDUzMDAwMDEyNjBGRTU1MDAwNzE5QzBBMDQwMDAwMDYxCis6MTBGNzQwMDA4RjhCMDAxQzI1NjJGRkZGMTQ0MEZFNTBBRjgyMDAxQzBGCis6MTBGNzUwMDAwMDA3MTlDMDBBMDAxMjc0QUY4MDAwMjAwRTAwMEZCQzExCis6MTBGNzYwMDAwMDAwMDAwMDBBMDAxMzAwOEY4NzAwMDAxNTYwRkVGRUY1Cis6MTBGNzcwMDAzQzBBMDAwMTI2NDMwMDA0MzA2QUZGRkYzNkE2MDAwMjVGCis6MTBGNzgwMDAzQzAzODAwMDhDNzIwMUI4MDY0MEZGRkUzNDY5MDE4MEEyCis6MTBGNzkwMDA4Rjg1MDAwOEFEMjAwMDAwMTBBMDAwOEIzQzE5ODAwMDcwCis6MTBGN0EwMDAyNTREMDAxMjAwQUQ2MDJCMTE4MDAwODgyNDExMDAwMzRDCis6MTBGN0IwMDA5NDc1MDEyMDI0MTQwMDFBMzBFRTQwMDAzMkFGRkZGRjkwCis6MTBGN0MwMDBBMTM0MDAwQjExQzAwMDkxMjVFM0ZGRkUwMEEzQjAyQjc0Cis6MTBGN0QwMDAxNkMwMDA4RjI0MDVGRkZFMzUwODAwMDFBNTIzMDAxNDg0Cis6MTBGN0UwMDAwQTAwMTRDNkFGODgwMDA0MjQwNDAxMDAwMjIwMjgyMTY2Cis6MTBGN0YwMDAwRTAwMEY1NTAyNDAzMDIxMEEwMDEzNUIwMDAwMDAwMDhDCis6MTBGODAwMDA5MTAzMDAwMTI0MTQwMDAxMTA3NEZGMUIyNDA0MDAwMTYzCis6MTBGODEwMDAyNDE4MDAwMjE0NzhGRUY2MDAwMEIwMjEzMEYxMDA0MEY4Cis6MTBGODIwMDAxMjIwRkVGNDhGOTIwMDIwOTUyMjAxMTA5NTFGMDAwMkY1Cis6MTBGODMwMDAzMDU5RkZGRjEzRjlGRjI3MDA4MDEwMjEwQTAwMTM0RUYzCis6MTBGODQwMDAwMDAwMDAwMDNDMTgwODAxMjcxODgzMDAwMUI4ODAyMTNGCis6MTBGODUwMDAwMDA2N0EwMkEyMEYwMDAxM0MxMjYwMDA4RTQzMTgyMEJECis6MTBGODYwMDAyNDE1MDAwMTAwRjU3MDA0MDA2RTI4MjUwMUI3QTAyMUMxCis6MTBGODcwMDAwMDA2NjQwMjAwMDcxOUMwQTY4QzAwMDBBRTQ1MTgyMERGCis6MTBGODgwMDAwQTAwMTI3NTNDMDU4MDAwMzZBNjAwMDIwRTAwMEY1NUQ2Cis6MTBGODkwMDAyNDA0MDA4MDBBMDAxMzg2MDAwMDEwMjEwRTAwMTUwQkJFCis6MTBGOEEwMDAzQzEzODAwMDNDMUY0MDAwQUU3RjAxNzgwMDAwMDAwMDQ4Cis6MTBGOEIwMDAwQTAwMTIyQjhGODUwMDE4OEM2OTQwMDAzMTM0MDEwMDNBCis6MTBGOEMwMDAxMjgwMDAzNTMwRUMwMTAwM0MxNDA4MDA4RTk0MDAyNEI2Cis6MTBGOEQwMDAxMTgwMDAxMTMyQjYwMDA0M0MwRTBGMDAwMEVFNjgyNEM3Cis6MTBGOEUwMDAzQzA2MDIwMDExQTYwMDBDMDJBMDMwMjE4RjkxMDAwQ0YyCis6MTBGOEYwMDAzMjQ1RkZGRjAyMjRDODI0MDMzRUMwMjE5MzBGMDAwNEI5Cis6MTBGOTAwMDAzMkIxRkZGQjI0MTVGRkZFMjVFNzAwMDQwRTAwMEY1NTYyCis6MTBGOTEwMDAwMDA3MjFDMDAyOTVBMDI0MjQwNDAwMDExMjg0MDAzRkE2Cis6MTBGOTIwMDAzMjgyMDAwMTEwNDAwMDA3MzI4QTAwMDQwMjIwMzAyMTk4Cis6MTBGOTMwMDAwMDAwMjAyMTBFMDAwRjU1MzI0NUZGRkYzMjMxRkZGQjQyCis6MTBGOTQwMDAzMjhBMDAwNDExNDAwMDA0OEY4NTAwMDAzMEFCMDgwMEFCCis6MTBGOTUwMDAxNTYwMDAzQTMyNDVGRkZGMTZDMEZFREUwMDAwMTAyMUEwCis6MTBGOTYwMDAzQzEyODAwMDM2NDQwMTgwM0MwNTgwMDA4Q0E4MDFCODIwCis6MTBGOTcwMDAwNTAwRkZGRTI0MTQyMDAwMjQwMzAwMDJBNDk0MDAwOEM0Cis6MTBGOTgwMDBBMDgzMDAwQkE0ODAwMDEwM0MwOTEwMDBBQ0E5MDFCOEIyCis6MTBGOTkwMDAwQTAwMTM4NjAwMDAxMDIxM0MwNjA4MDA4Q0M2MDAyNEQzCis6MTBGOUEwMDAzMENDMDAwMTUxODBGRUNCMDAwMDEwMjEzMjQ1RkZGRjFBCis6MTBGOUIwMDAzNkE2MDAwMjAwMDAyMDIxMEUwMDBGNTUwMDAwMDAwMEI2Cis6MTBGOUMwMDAwQTAwMTM4NjAwMDAxMDIxMjQxMTAwMDMzNzM4MDE4MDNCCis6MTBGOUQwMDBBMzExMDAwQjNDMDU4MDAwMjQwOUJGRkYwMTA5RjgyNDk2Cis6MTBGOUUwMDAyNDAyMDAwMjM0QTgwMTgwQTUwMjAwMENBNTBBMDAwRTIyCis6MTBGOUYwMDBBNTA2MDAwOEE1MUYwMDI2QTUwNzAwMTAzQzA5MTAwMDU5Cis6MTBGQTAwMDBBQ0E5MDFCODBBMDAxMzg2MDAwMDEwMjEyNDA1RkZGRUVFCis6MTBGQTEwMDAwMTA1NDAyNDBBMDAxNEM2QUY4ODAwMDQzMjM2MDAwNEYxCis6MTBGQTIwMDAxNkMwMDAwMzMyNDVGRkZGMzYzRjAwMDIzM0YxRkZGRkVGCis6MTBGQTMwMDAwMjIwMzAyMTBBMDAxNEJGMDAwMDIwMjEwMjIwMzAyMUMyCis6MTBGQTQwMDAwRTAwMEY1NTI0MDQwMTAwMEEwMDE0QTcwMDAwMDAwMDU2Cis6MTBGQTUwMDAzQzAzODAwMDhDNjQwMTAwMzA4MjAwM0UxNDQwMDAwOEFBCis6MTBGQTYwMDAwMDAwMDAwMEFDNjAwMDQ4OEM2NjAxMDAzMEM1MDdDMDkzCis6MTBGQTcwMDAxMEEwMDAwNTAwMDAwMDAwQUM2MDAwNENBQzYwMDA1MDFECis6MTBGQTgwMDAwM0UwMDAwODI0MDIwMDAxQUM2MDAwNTRBQzYwMDA0MEI4Cis6MTBGQTkwMDA4QzY4MDEwMDMxMDczODAwMTBFMEZGRjkwMDAwMDAwMDE5Cis6MTBGQUEwMDAyNDAyMDAwMTAzRTAwMDA4QUM2MDAwNDQzQzAzOTAwMDI1Cis6MTBGQUIwMDAzNDYyMDAwMTAwODIyMDI1M0MwMzgwMDBBQzY0MDAyMEY5Cis6MTBGQUMwMDA4QzY1MDAyMDA0QTBGRkZFMDAwMDAwMDAwM0UwMDAwODk5Cis6MTBGQUQwMDAwMDAwMDAwMDNDMDI4MDAwMzQ0MzAwMDEwMDgzMjAyNTI4Cis6MTBGQUUwMDAwM0UwMDAwOEFDNDQwMDIwMjdCREZGRDhBRkIxMDAxNEVDCis6MTBGQUYwMDAzQzA0ODAwMEFGQkYwMDIwQUZCMzAwMUNBRkIyMDAxOEMxCis6MTBGQjAwMDBBRkIwMDAxMDhDOTIwMTQwOEM5MDAxNDgyNDAyMDAwRThFCis6MTBGQjEwMDAwMDEwOEMwMjMyMjMwMEZGMTA2MjAwNTkwMjA0MjgyNEQ2Cis6MTBGQjIwMDAyODY2MDAwRjEwQzAwMDEzMjg2QTAwMzcyNDA3MDAwNjVCCis6MTBGQjMwMDAxMDY3MDA4RTI4NjgwMDA3NTEwMDAwMkQyNDA0MDAwOTdBCis6MTBGQjQwMDAxMDYwMDA3ODNDMDY4MDAwMjQwOTAwMDExMDY5MDBCMEI0Cis6MTBGQjUwMDAwMDAwMDAwMDAwMDAwMDBEOEZCRjAwMjA4RkIzMDAxQ0NDCis6MTBGQjYwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAwM0UwMDAwOEFFCis6MTBGQjcwMDAyN0JEMDAyODExNDAwMDU5MjQwRDAwMzgyODZCMDAzNTlFCis6MTBGQjgwMDAxMTYwMDAwNTNDMDU4MDAwMjQwQzAwMUYxNDZDRkZGMTdGCis6MTBGQjkwMDAwMDAwMDAwMDNDMDU4MDAwOENCODAxQjgwNzAwRkZGRUEzCis6MTBGQkEwMDAzNEI5MDE4MEFGMzIwMDAwMjQxRjAwMDEyNDEyMDAwMjhBCis6MTBGQkIwMDAzQzAyMTAwMEFGMjAwMDA0QTczMTAwMDhBMzNGMDAwQTU4Cis6MTBGQkMwMDBBMzMyMDAwQkE3MzAwMDEwQUYyMDAwMjRBRjIwMDAyODg0Cis6MTBGQkQwMDBBQ0EyMDFCODhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxOEY5Cis6MTBGQkUwMDA4RkIxMDAxNDhGQjAwMDEwMDNFMDAwMDgyN0JEMDAyODdCCis6MTBGQkYwMDAxMDY0MDAyMzI0MDUwMDBCMTQ2NUZGRDYzMjE4RkZGRkE0Cis6MTBGQzAwMDAxNzAwMDAyMDNDMDU4MDAwOEY5M0ZFREM5MjdGMDAwNUVBCis6MTBGQzEwMDAzM0Y5MDAwNDE3MjBGRkNGMDAwMDAwMDAwRTAwMTRGQzkxCis6MTBGQzIwMDAwMjQwMjAyMTkyNjkwMDA1MDI0MDIwMjEzNTI4MDAwNDZECis6MTBGQzMwMDAwRTAwMTUwNkEyNjgwMDA1OTI2NzAwMDUzMEUyMDAwNDc4Cis6MTBGQzQwMDAxNDQwMDAwMjAwMDAwMDAwMDAwMDAwMEQ5MjZCMDAwMDU0Cis6MTBGQzUwMDAyNDA2MDAyMDMxNkEwMEZGMTU0NjAwMEEzQzA1ODAwMDlBCis6MTBGQzYwMDA4Q0E0MDFCODA0ODBGRkZFMzRBRDAxODAyNDBFMDAwNTkxCis6MTBGQzcwMDAzQzBDMTAwMEFEQjIwMDAwQTFBRTAwMEJBQ0FDMDFCODYyCis6MTBGQzgwMDAzQzA1ODAwMDhDQTMwMUI4MDQ2MEZGRkUzNEFGMDE4MDA2Cis6MTBGQzkwMDAyNDEzMDAwMkFERjIwMDAwQURGMjAwMDRBNUYxMDAwODRCCis6MTBGQ0EwMDBBMUYzMDAwQUExRjMwMDBCQTVGMDAwMTBBREUwMDAyNEMxCis6MTBGQ0IwMDA4Q0IxMDE0NDNDMTAxMDAwQURGMTAwMjhBQ0IwMDFCODhCCis6MTBGQ0MwMDA4RkJGMDAyMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNEJCCis6MTBGQ0QwMDA4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMjgxMDZERkZBREI1Cis6MTBGQ0UwMDAyNDBFMDA4MDE0NkVGRjlCMDAwMDAwMDAzQzA1ODAwMDg1Cis6MTBGQ0YwMDA4Q0EzMDFCODA0NjBGRkZFMzRBRjAxODAyNDEyMDAwMjFGCis6MTBGRDAwMDBBMUYyMDAwQkE1RjEwMDA4QTVGMDAwMTA4Q0IzMDE0NDhFCis6MTBGRDEwMDAzQzAyMTAwMEE1RjMwMDEyQUNBMjAxQjgwQTAwMTU0NzdFCis6MTBGRDIwMDA4RkJGMDAyMDhDQzMwMUI4MDQ2MEZGRkUzNEQzMDE4MDc0Cis6MTBGRDMwMDBBRTcyMDAwMEFFNjAwMDA0MjQxMjAwMDFBNjcxMDAwODNCCis6MTBGRDQwMDAyNDExMDAwMkEyNzIwMDBBQTI3MTAwMEJBNjcwMDAxMDFBCis6MTBGRDUwMDA4Q0QwMDE0NDNDMEYxMDAwQUU3MDAwMjRBRTYwMDAyODJGCis6MTBGRDYwMDBBQ0NGMDFCODBBMDAxNTgyOEZCRjAwMjAzQzAzODAwMDkxCis6MTBGRDcwMDA4QzY2MDFCODA0QzBGRkZFMzQ2MjAxODAzQzA2MDgwMUI1Cis6MTBGRDgwMDA5MEM2ODM0MEFDNTIwMDAwMTBDMDAwMDMwMDAwMzgyMTMwCis6MTBGRDkwMDAzQzA3MDgwMThDRTc4MzQ4M0MwNTgwMDAzNEFBMDE4MEI5Cis6MTBGREEwMDAyNDA0MDAwMjM0Q0MwMDAxQUM0NzAwMDRBNTUxMDAwODMzCis6MTBGREIwMDBBMTRDMDAwQUExNDQwMDBCQTU1MDAwMTA4Q0FCMDE0NERCCis6MTBGREMwMDAwMDAwMjAyMTAxNDAyODIxQUQ0QjAwMjQxMEMwMDAwMzc5Cis6MTBGREQwMDA4RkJGMDAyMDNDMDQwODAxOEM4NDgzNDQ4RkIzMDAxQzM3Cis6MTBGREUwMDA4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTAzQzBFMTAwMEJECis6MTBGREYwMDAzQzBEODAwMDI3QkQwMDI4QUNBNDAwMjhBREFFMDFCOEEyCis6MTBGRTAwMDAzQzAxMDgwMUEwMjA4MzQwMDNFMDAwMDgwMDAwMDAwMDNFCis6MTBGRTEwMDAxMEEwMDAwQjNDMDY4MDAwOEM5ODAxNDQyNDE5MDAwMkJECis6MTBGRTIwMDAzQzAxMDgwMUEwMzk4MzQwM0MwMTA4MDFBQzMyODM0ODAxCis6MTBGRTMwMDAzQzAxMDgwMUFDMzg4MzQ0MEEwMDE1ODI4RkJGMDAyMEMyCis6MTBGRTQwMDA4Q0RGMDFCODA3RTBGRkZFMzRDNzAxODAyNDA5MDAwMkZGCis6MTBGRTUwMDBBQ0YyMDAwMEFDRjIwMDA0QTRGMTAwMDhBMEU5MDAwQTMyCis6MTBGRTYwMDBBMEU5MDAwQkE0RjAwMDEwQUNFMDAwMjQ4Q0M4MDE0NDExCis6MTBGRTcwMDAzQzAyMTAwMEFDRTgwMDI4QUNDMjAxQjgwQTAwMTU4MkIwCis6MTBGRTgwMDA4RkJGMDAyMDI3QkRGRkU4QUZCRjAwMTAwRTAwMEY0RTUwCis6MTBGRTkwMDAwMDAwMDAwMDNDMDI4MDAwOEZCRjAwMTAwMDAwMjAyMTA1Cis6MTBGRUEwMDBBQzQwMDE4MDBBMDAxMDEwMjdCRDAwMTgzMDg0RkZGRjBECis6MTBGRUIwMDAzMEE1RkZGRjEwODAwMDA3MDAwMDE4MjEzMDgyMDAwMUVDCis6MTBGRUMwMDAxMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjExNDgwRkZGQjRFCis6MTBGRUQwMDAwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjExMEMwMDAwNzYyCis6MTBGRUUwMDAwMDAwMDAwMDhDQTIwMDAwMjRDNkZGRkYyNEE1MDAwNDJGCis6MTBGRUYwMDBBQzgyMDAwMDE0QzBGRkZCMjQ4NDAwMDQwM0UwMDAwODZGCis6MTBGRjAwMDAwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkZBQzg2MDAwMDQyCis6MTBGRjEwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkYyNDYzRkZGRjM4Cis6MTBGRjIwMDAxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMENCCis6MTBGRjMwMDAyN0JERkZFOEFGQkYwMDE0QUZCMDAwMTAwRTAwMTRGQ0U3Cis6MTBGRjQwMDAwMDgwODAyMTNDMDQ4MDA4MzQ4MzAwODA5MDY1MDAyNTc3Cis6MTBGRjUwMDAwMjAwMjAyMTM0QTIwMDIwMEUwMDE1MDZBMDYyMDAyNTE4Cis6MTBGRjYwMDAwMjAwMjAyMThGQkYwMDE0OEZCMDAwMTAwQTAwMEM5RUU5Cis6MTBGRjcwMDAyN0JEMDAxODNDMDM4MDAwMjdCREZGRjgzNDYyMDE4MEQ0Cis6MTBGRjgwMDBBRkEyMDAwMDMwOEMwMEZGMzBBRDAwRkYzMENFMDBGRjhDCis6MTBGRjkwMDAzQzBCODAwMDhENjQwMUI4MDQ4MEZGRkUwMDAwMDAwMDZGCis6MTBGRkEwMDA4RkE5MDAwMDhENjgwMTI4OEZBQTAwMDA4RkE3MDAwMDhDCis6MTBGRkIwMDA4RkE0MDAwMDI0MDUwMDAxMjQwMjAwMDJBMDg1MDAwQThECis6MTBGRkMwMDA4RkEzMDAwMDM1OTk0MDAwM0MwNTEwMDBBMDYyMDAwQjkzCis6MTBGRkQwMDA4RkI4MDAwMDhGQUMwMDAwOEZBNjAwMDA4RkFGMDAwMDJDCis6MTBGRkUwMDAyN0JEMDAwOEFEMjgwMDAwQUQ0MDAwMDRBRDgwMDAyNDBFCis6MTBGRkYwMDBBQ0MwMDAyOEE0RjkwMDA4QTcwRDAwMTBBNUVFMDAxMjVGCis6MDIwMDAwMDQwMDAxRjkKKzoxMDAwMDAwMDAzRTAwMDA4QUQ2NTAxQjgzQzA2ODAwODI3QkRGRkU4QTUKKzoxMDAwMTAwMDM0QzUwMDgwQUZCRjAwMTA5MEE3MDAwOTI0MDIwMDEyNzEKKzoxMDAwMjAwMDMwRTMwMEZGMTA2MjAwMEIwMDgwMzAyMThDQTgwMDUwRUMKKzoxMDAwMzAwMDAwODgyMDIzMDQ4MDAwMDg4RkJGMDAxMDhDQUEwMDM0QTEKKzoxMDAwNDAwMDI0MDQwMDM5MDAwMDI4MjEwMENBNDgyMzA1MjAwMDA1QTcKKzoxMDAwNTAwMDI0MDYwMDEyOEZCRjAwMTAyNDAyMDAwMTAzRTAwMDA4RjQKKzoxMDAwNjAwMDI3QkQwMDE4MEUwMDE2MkUwMDAwMDAwMDhGQkYwMDEwRTQKKzoxMDAwNzAwMDI0MDIwMDAxMDNFMDAwMDgyN0JEMDAxODI3QkRGRkM4QzcKKzoxMDAwODAwMEFGQjEwMDJDMDBBMDg4MjFBRkIyMDAzMDI3QTUwMDEwMkUKKzoxMDAwOTAwMDAwODA5MDIxMDIyMDIwMjFBRkJGMDAzNEFGQjAwMDI4QTMKKzoxMDAwQTAwMDBFMDAwQ0E4QUZBMDAwMTAxNDQwMDA5QjNDMDc4MDA4NzUKKzoxMDAwQjAwMDM0RTQwMDgwOTA4NjAwMDgzMEM1MDAwODE0QTAwMDY5NzAKKzoxMDAwQzAwMDhGQTcwMDEwM0MxODgwMDgzNzEwMDA4MDkyMEYwMDA4OUUKKzoxMDAwRDAwMDMxRUUwMDA4MTVDMDAwMDIyNDA4MDAwMzAwMDA0MDIxOTIKKzoxMDAwRTAwMDNDMEI4MDA4OTE2NTAwMTE5MTZBMDAxMjM1NjYwMDgwMTIKKzoxMDAwRjAwMDhDREYwMDU0MzE0OTAwRkYwMTI4MjAyMTMwQTMwMEZGOEMKKzoxMDAxMDAwMDAwMDQxMDgwMDA2MjI4MjEwMEJGQzgyQjEzMjAwMDA4QzMKKzoxMDAxMTAwMDAwMDAwMDAwOTREMDAwNUM4Q0NGMDA1NDMyMERGRkZGMzMKKzoxMDAxMjAwMDAxRTU3MDIzMDFBRTYwMkIxMTgwMDA5NDAwMDAwMDAwRjcKKzoxMDAxMzAwMDk0RDkwMDVDMzMyM0ZGRkYzMEZGMDAwNDEzRTAwMDc0MDgKKzoxMDAxNDAwMDAwMDgzMDgwOEZBODAwMUMwMDY4MTAyQjUwNDAwMDRGMjIKKzoxMDAxNTAwMDMwRTMwMDA0MDA2NjEwMjMyQzQ2MDA4MDEwQzAwMDAyMkIKKzoxMDAxNjAwMDAwNDA4MDIxMjQxMDAwODAwRTAwMTRGQzAyNDAyMDIxNTkKKzoxMDAxNzAwMDNDMDM4MDA4MzQ2NjAwODAyNDA3MDAwMUFDQzcwMDBDRjMKKzoxMDAxODAwMDkwQzgwMDA4MDAxMDY4NDAzNDY3MDEwMDMxMUYwMDdGRUMKKzoxMDAxOTAwMEEwREYwMDA4OEUzOTAwMDQyNzM4MDAwMUFDRDgwMDMwRjkKKzoxMDAxQTAwMEE0RDAwMDVDOENDRjAwM0M5NjMwMDAwRTAxRjA3MDIxOTIKKzoxMDAxQjAwMEFDQ0UwMDIwOENDQzAwM0MwMThENTgyMUFDQ0IwMDFDNzcKKzoxMDAxQzAwMDhFMkEwMDA0QUNFQTAwMDA4RTI5MDAwOEFDRTkwMDA0ODUKKzoxMDAxRDAwMDhGQTUwMDEwMzBBNDAwMDg1NDgwMDAzMjkzQTYwMDIwQTAKKzoxMDAxRTAwMEEwQzAwMDRFOTBDOTAwNEUyNDAyRkZERjNDMTg4MDA4REEKKzoxMDAxRjAwMEEwRTkwMDA4OTBDNTAwMDgzNzBEMDA4MDI0MEEwMDUwQ0YKKzoxMDAyMDAwMDAwQTIyMDI0QTBDNDAwMDg4RTM5MDAwOEFEQjkwMDM4MkYKKzoxMDAyMTAwMDhGMEYwMDE0OERCMDAwMzAwMUYwNzAyMUFEQUUwMDM0QUUKKzoxMDAyMjAwMDkxQUMwMDAwMzE4QjAwRkYxMTZBMDAyQzI2NDUwMTAwQzMKKzoxMDAyMzAwMDBFMDAxNTA2MDI0MDIwMjEyNDA0MDAzODAwMDAyODIxNjkKKzoxMDAyNDAwMDBFMDAxNjJFMjQwNjAwMEE4RkJGMDAzNDhGQjIwMDMwMzUKKzoxMDAyNTAwMDhGQjEwMDJDOEZCMDAwMjgyNDAyMDAwMTAzRTAwMDA4QjkKKzoxMDAyNjAwMDI3QkQwMDM4MzBFODAxMDAxMTAwMDAzRDhGQTMwMDE0QzUKKzoxMDAyNzAwMDhDOEEwMDU4MDA2QTQ4MjMwNTIwRkY5MzNDMTg4MDA4QTgKKzoxMDAyODAwMEFDODMwMDU4MEEwMDE2ODI4RkE3MDAxMDI0MDcwMjE4QkEKKzoxMDAyOTAwMDEwNjBGRkIxMDBFNjEwMjM4RkEyMDAxQzBBMDAxNkE3MTEKKzoxMDAyQTAwMDAwNDYxMDIzM0MxODgwMDgzNzBEMDA4MEEwRTYwMDA4QTcKKzoxMDAyQjAwMDhFMzkwMDA4MjQwQTAwNTBBREI5MDAzODhGMEYwMDE0QTEKKzoxMDAyQzAwMDhEQjAwMDMwMDFGMDcwMjFBREFFMDAzNDkxQUMwMDAwNzMKKzoxMDAyRDAwMDMxOEIwMEZGMTU2QUZGRDYyNjQ1MDEwMDI0MDZGRjgwRkEKKzoxMDAyRTAwMDAwQTYxMDI0M0MwOTgwMDBBRDIyMDAyODhFMjcwMDA4QkIKKzoxMDAyRjAwMDMwQTMwMDdGM0MwNDgwMEMwMDY0RjgyMUFGRTcwMEQwRkQKKzoxMDAzMDAwMDhFMjgwMDA4QUY5RjAwMkMwQTAwMTZEREFGRTgwMEQ0NEQKKzoxMDAzMTAwMDBBMDAxNkE0MkM2MjAyMTg4RTIzMDAwODNDMDQ4MDA4RjAKKzoxMDAzMjAwMDM0ODIwMDgwQUM0MzAwNTQwMjQwMjAyMTBFMDAxNjFEOTAKKzoxMDAzMzAwMEFDNDAwMDMwMjQwNDAwMzgyNDA1MDA4RDBFMDAxNjJFMzkKKzoxMDAzNDAwMDI0MDYwMDEyOEZCRjAwMzQ4RkIyMDAzMDhGQjEwMDJDMTIKKzoxMDAzNTAwMDhGQjAwMDI4MjQwMjAwMDEwM0UwMDAwODI3QkQwMDM4MDgKKzoxMDAzNjAwMEFDODAwMDU4OTA4QzAwMDgyNDBERkZGNzAxOEQ1ODI0QjQKKzoxMDAzNzAwMEEwOEIwMDA4MEEwMDE2ODI4RkE3MDAxMDhDRDgwMDU0QUEKKzoxMDAzODAwMDBBMDAxNjlGMDMwNTE4MjMyN0JERkZFOEFGQkYwMDEwMjIKKzoxMDAzOTAwMDkwQTYwMDBEMzBDNzAwMTAxMEUwMDAwQzAwODA0MDIxMzYKKzoxMDAzQTAwMDNDMDI4MDA4OEM0NDAwMDQ4Q0EzMDAwODEwNjQwMDA4MDAKKzoxMDAzQjAwMDMwQzkwMDA1MzBDNTAwMDUxMEEwMDAxQzhGQkYwMDEwMUIKKzoxMDAzQzAwMDI0MDIwMDAxMDNFMDAwMDgyN0JEMDAxODMwQzkwMDA1MjEKKzoxMDAzRDAwMDExMjAwMDEwMzBDQjAwMTIxMEUwRkZGOThGQkYwMDEwODkKKzoxMDAzRTAwMDNDMDg4MDA4OENBNzAwMDg4RDA2MDAwNDE0RTZGRkY1ODEKKzoxMDAzRjAwMDI0MDIwMDAxMjQwNDAwMzgyNDA1MDA4RDBFMDAxNjJFNkUKKzoxMDA0MDAwMDI0MDYwMDEyOEZCRjAwMTAyNDAyMDAwMTAzRTAwMDA4NDAKKzoxMDA0MTAwMDI3QkQwMDE4MjQwQTAwMTIxNTZBRkZFOThGQkYwMDEwREIKKzoxMDA0MjAwMDAxMDAyMDIxMEEwMDE2NzAyN0JEMDAxODAwMDAyMDIxQkQKKzoxMDA0MzAwMDBBMDAwRDFBMjdCRDAwMTgzQzA1MDgwMDI0QTU1REMwNjAKKzoxMDA0NDAwMDNDMDQwODAwMjQ4NDdCODAzQzAyMDgwMDI0NDI1REM4RjAKKzoxMDA0NTAwMDI0MDMwMDA2M0MwMTA4MDFBQzI1ODM1MDNDMDEwODAxM0YKKzoxMDA0NjAwMEFDMjQ4MzU0M0MwMTA4MDFBQzIyODM1ODNDMDEwODAxQjAKKzoxMDA0NzAwMEEwMjM4MzVDMDNFMDAwMDgwMDAwMDAwMDAzRTAwMDA4MDQKKzoxMDA0ODAwMDI0MDIwMDAxM0MwMjgwMDAzMDg4MDBGRjM0NDcwMTgwRDQKKzoxMDA0OTAwMDNDMDY4MDAwOENDMzAxQjgwNDYwRkZGRTAwMDAwMDAwMzEKKzoxMDA0QTAwMDhDQzUwMTI4MjQxOEZGODAzQzBEODAwQTI0QUYwMTAwNzAKKzoxMDA0QjAwMDAxRjg3MDI0MzFFQzAwN0ZBQ0NFMDAyNDAxOEQyMDIxQTYKKzoxMDA0QzAwMEFDRTUwMDAwOTQ4QjAwREEzNTA5NjAwMDI0MDgwMDAyRDYKKzoxMDA0RDAwMDMxNkFGRkZGQUNFQTAwMDQyNDAyMDAwMUE0RTkwMDA4MkQKKzoxMDA0RTAwMEEwRTgwMDBCQUNFMDAwMjQzQzA3MTAwMEFDQzcwMUI4NEEKKzoxMDA0RjAwMEFGODQwMDJDMDNFMDAwMDhBRjg1MDA1QzhDOTkwMDA0RjkKKzoxMDA1MDAwMDhGOEQwMDJDMjQwOUZGQkYwMzI1QzAyM0FDOTgwMDA0NjUKKzoxMDA1MTAwMDkxQUYwMEM0MjQwM0ZGRUYzMUVFMDA3RkExQUUwMEM0MTEKKzoxMDA1MjAwMDhDOEMwMDIwOTM4QjAwMzg4Rjg2MDAyQzM1OEEwMDAyM0IKKzoxMDA1MzAwMEFGOEIwMDUwQTc4MDAwNENBQzhBMDAyMEE0QzAwMEFDNTgKKzoxMDA1NDAwMDkwQzgwMEM0MDEwOTM4MjRBMEM3MDBDNDhGODQwMDJDQkYKKzoxMDA1NTAwMEFDODAwMERDOTA4NTAwQzQwMEEzMTAyNDAzRTAwMDA4RjgKKzoxMDA1NjAwMEEwODIwMEM0M0MwMjgwMDAzNDQ1MDE4MDNDMDQ4MDAwMkQKKzoxMDA1NzAwMDhDODMwMUI4MDQ2MEZGRkU4Rjg5MDA1QzI0MDc2MDgzRDAKKzoxMDA1ODAwMDI0MDYwMDAyQUNBOTAwMDA4Qzg4MDEyNEFDQTgwMDA0NTkKKzoxMDA1OTAwMEE0QTcwMDA4QTBBNjAwMEIzQzA1MTAwMDAzRTAwMDA4N0IKKzoxMDA1QTAwMEFDODUwMUI4OTM4ODAwMzg4Rjg5MDA1MDhGODIwMDJDNjkKKzoxMDA1QjAwMDMwQzYwMEZGMDEwOTM4MjMzMEU5MDBGRjAxMjIxODIxNkQKKzoxMDA1QzAwMDMwQTUwMEZGMjQ2ODAwNzgxMEMwMDAwMjAxMjQzODIxMDMKKzoxMDA1RDAwMDAwODAzODIxMzBFNDAwMDMxNDgwMDAwMzMwQUEwMDAzQjcKKzoxMDA1RTAwMDExNDAwMDBEMzEyQjAwMDMxMEEwMDAwOTAwMDAxMDIxNjQKKzoxMDA1RjAwMDkwRUQwMDAwMjQ0RTAwMDEzMUMyMDBGRjAwNDU2MDJCNDkKKzoxMDA2MDAwMEExMEQwMDAwMjRFNzAwMDExNTgwRkZGOTI1MDgwMDAxNzUKKzoxMDA2MTAwMDAzRTAwMDA4MDAwMDAwMDAxNTYwRkZGMzAwMDAwMDAwODgKKzoxMDA2MjAwMDEwQTBGRkZCMDAwMDEwMjE4Q0Y4MDAwMDI0NTkwMDA0RUEKKzoxMDA2MzAwMDMzMjIwMEZGMDA0NTc4MkJBRDE4MDAwMDI0RTcwMDA0QUEKKzoxMDA2NDAwMDE1RTBGRkY5MjUwODAwMDQwM0UwMDAwODAwMDAwMDAwQTEKKzoxMDA2NTAwMDkzODUwMDM4OTM4ODAwNDg4Rjg3MDA1MDAwMDQzMjAwNEIKKzoxMDA2NjAwMDMxMDMwMDdGMDBFNTEwMkIzMEM0N0YwMDEwNDAwMDBGRTUKKzoxMDA2NzAwMDAwNjQyODI1OEY4NDAwMkMzQzA5ODAwMDhDOEEwMERDRDMKKzoxMDA2ODAwMEFEMkEwMEE0M0MwMzgwMDAwMEEzNTgyNUFDNkIwMEEwNTkKKzoxMDA2OTAwMDhDNkMwMEEwMDU4MEZGRkUwMDAwMDAwMDhDNkQwMEFDOUIKKzoxMDA2QTAwMEFDOEQwMERDMDNFMDAwMDg4QzYyMDBBODBBMDAxN0YyQTEKKzoxMDA2QjAwMDhGODQwMDJDOTM4ODAwNDkzQzAyODAwMDAwODA1MDIxRTgKKzoxMDA2QzAwMDMxMDMwMEZFQTM4MzAwNDkzMEFCRkZGRjMwQ0MwMEZGQjUKKzoxMDA2RDAwMDMwRTdGRkZGMzQ0ODAxODAzQzA5ODAwMDhEMjQwMUI4RDkKKzoxMDA2RTAwMDA0ODBGRkZFOEY4RDAwNUMyNDE4MDAxNkFEMEQwMDAwMDUKKzoxMDA2RjAwMDhEMjIwMTI0OEY4RDAwMkNBRDAyMDAwNDhENTkwMDIwMjUKKzoxMDA3MDAwMEE1MDcwMDA4MjQwMjAxQjRBMTE5MDAwQUExMTgwMDBCRDIKKzoxMDA3MTAwMDk1MkYwMTIwOEQ0RTAwMDg4RDQ3MDAwNDk3ODMwMDRDRDMKKzoxMDA3MjAwMDhENTkwMDI0MDFDRjMwMjEwMEM3MjgyMTAwQTMyMDIzQTgKKzoxMDA3MzAwMDI0MThGRkZGQTUwNDAwMENBNTBCMDAwRUE1MDIwMDEwNTUKKzoxMDA3NDAwMEE1MEMwMDEyQUQxOTAwMThBRDE4MDAyNDk1QUYwMEQ4MDMKKzoxMDA3NTAwMDNDMEIxMDAwMjQwN0ZGRjczMUVFRkZGRkFEMEUwMDI4MjEKKzoxMDA3NjAwMDhEQUMwMDc0QUQwQzAwMkNBRDJCMDFCODhENDYwMDIwNzMKKzoxMDA3NzAwMDAwQzcyODI0MDNFMDAwMDhBRDQ1MDAyMDhGODgwMDJDMjYKKzoxMDA3ODAwMDAwODA1ODIxMzBFN0ZGRkY5MTA5MDBDNjNDMDI4MDAwM0QKKzoxMDA3OTAwMDMwQTVGRkZGMzEyNDAwRkYwMDA0MUEwMDAwNjc1MDI1MzgKKzoxMDA3QTAwMDMwQzYwMEZGMzQ0NzAxODAzQzA5ODAwMDhEMkMwMUI4MjEKKzoxMDA3QjAwMDA1ODBGRkZFOEY4MjAwNUMyNDBGMDAxN0FDRTIwMDAwNzIKKzoxMDA3QzAwMDhEMzkwMTI0QUNGOTAwMDQ4RDc4MDAyMEE0RUEwMDA4REEKKzoxMDA3RDAwMDI0MTkwMUI0QTBGODAwMEFBMEVGMDAwQjk1MjMwMTIwMTIKKzoxMDA3RTAwMDhENkUwMDA4OEQ2RDAwMDQ5Nzg0MDA0QzAxQzM1MDIxNkMKKzoxMDA3RjAwMDAxNEQ2MDIxMDE4NDEwMjNBNEUyMDAwQ0E0RTUwMDBFNDkKKzoxMDA4MDAwMEE0RjkwMDEwQTRFNjAwMTJBQ0UwMDAxNDhENzgwMDI0RDYKKzoxMDA4MTAwMDI0MERGRkZGQUNGODAwMTg4RDBGMDA2Q0FDRUYwMDFDMkUKKzoxMDA4MjAwMDhEMEUwMDY4M0MwRjEwMDBBQ0VFMDAyMEFDRUQwMDI0RjMKKzoxMDA4MzAwMDk1MEEwMEFFMjQwREZGRjczMTQ2RkZGRkFDRTYwMDI4MTUKKzoxMDA4NDAwMDk1MEMwMDcwOTUwNDAwNzIzMTgzN0ZGRjAwMDNDQTAwOEQKKzoxMDA4NTAwMDMwODJGRkZGMDMyMkMwMjFBQ0Y4MDAyQ0FEMkYwMUI4N0QKKzoxMDA4NjAwMDk1MEUwMDcyOEQ2QTAwMjAwMEFFMzAyMTAxNEQyODI0QzMKKzoxMDA4NzAwMEE1MDYwMDcyMDNFMDAwMDhBRDY1MDAyMDNDMDI4MDAwODAKKzoxMDA4ODAwMDM0NDYwMTgwM0MwNTgwMDA4Q0EzMDFCODA0NjBGRkZFNjMKKzoxMDA4OTAwMDI0MDkwMDE4QUNDNDAwMDBBMEM5MDAwQjhGODgwMDJDRUMKKzoxMDA4QTAwMDNDMDQxMDAwOTUwNzAwQUVBNEM3MDAxMEFDQzAwMDMwOTcKKzoxMDA4QjAwMDAzRTAwMDA4QUNBNDAxQjgzQzAyODAwMDM0NDUwMTgwOEMKKzoxMDA4QzAwMDNDMDQ4MDAwOEM4MzAxQjgwNDYwRkZGRThGOEEwMDM0RjIKKzoxMDA4RDAwMDI0MDYwMDE5OTU0OTAwMUMzMTI4RkZGRjAwMDgzOUMwODMKKzoxMDA4RTAwMEFDQTcwMDAwQTBBNjAwMEIzQzA1MTAwMDAzRTAwMDA4MjgKKzoxMDA4RjAwMEFDODUwMUI4OEY4NzAwM0MwMDgwNDAyMTMwQzQwMEZGRTgKKzoxMDA5MDAwMDNDMDY4MDAwOENDMjAxQjgwNDQwRkZGRThGODkwMDVDNjkKKzoxMDA5MTAwMDkzODMwMDU4MzQ5OTYwMDBBQ0E5MDAwMEEwQTMwMDA1OUYKKzoxMDA5MjAwMDhDRTIwMDEwMjQwRjAwMDIyNDAzRkZGN0E0QTIwMDA2QUIKKzoxMDA5MzAwMEE0QjkwMDA4OEQxODAwMjBBMEI4MDAwQUEwQUYwMDBCRDEKKzoxMDA5NDAwMDhDRUUwMDAwQUNBRTAwMTA4Q0VEMDAwNEFDQUQwMDE0RDkKKzoxMDA5NTAwMDhDRUMwMDFDQUNBQzAwMjQ4Q0VCMDAyMEFDQUIwMDI4NzEKKzoxMDA5NjAwMDhDRUEwMDJDM0MwNzEwMDBBQ0FBMDAyQzhEMDkwMDI0NTYKKzoxMDA5NzAwMEFDQTkwMDE4QUNDNzAxQjg4RDA1MDAyMDAwQTMyMDI0NDUKKzoxMDA5ODAwMDAzRTAwMDA4QUQwNDAwMjA5Mzg1MDA1ODI0MDMwMDAxMTMKKzoxMDA5OTAwMDI3QkRGRkU4MDBBMzMwMDQyQ0EyMDAyMEFGQjAwMDEwNTgKKzoxMDA5QTAwMEFGQkYwMDE0MDBDMDE4MjExMDQwMDAxMzI0MTBGRkZFMzgKKzoxMDA5QjAwMDNDMDcwODAwOENFNzMxOTAwMEU2MTAyNDNDMDg4MDAwREEKKzoxMDA5QzAwMDM1MDUwMTgwMTQ0MDAwMDUyNDA2MDA4NDhGODkwMDJDMjEKKzoxMDA5RDAwMDI0MEEwMDA0MjQxMEZGRkZBMTJBMDBFQzBFMDAxODhFNDgKKzoxMDA5RTAwMDAwMDAwMDAwMDIwMDEwMjE4RkJGMDAxNDhGQjAwMDEwMjMKKzoxMDA5RjAwMDAzRTAwMDA4MjdCRDAwMTgzQzA2MDgwMDhDQzYzMTk0QUYKKzoxMDBBMDAwMDBBMDAxOEMwMDBDMzEwMjQ4Rjg3MDAzNDI3QkRGRkUwMDAKKzoxMDBBMTAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDFDRjAKKzoxMDBBMjAwMDMwRDAwMEZGOTBFNjAwMEQwMEEwODgyMTAwODA5MDIxQ0EKKzoxMDBBMzAwMDMwQzUwMDdGQTBFNTAwMEQ4Rjg1MDAyQzhFMjMwMDE4QTcKKzoxMDBBNDAwMDhDQTIwMEMwMTA2MjAwMkUyNDBBMDAwRTBFMDAxOEIzMDMKKzoxMDBBNTAwMEEzOEEwMDU4MjQwOUZGRkYxMDQ5MDAyMjI0MDRGRkZGNDUKKzoxMDBBNjAwMDUyMDAwMDIwMDAwMDIwMjE4RTI2MDAwMDNDMEMwMDEwQzcKKzoxMDBBNzAwMDAwQ0M1ODI0MTU2MDAwMzkzQzBFMDAwODAwQ0U2ODI0RDQKKzoxMDBBODAwMDU1QTAwMDNGMDI0MDIwMjEzQzE4MDAwMjAwRDg4MDI0REQKKzoxMDBBOTAwMDEyMDAwMDFGM0MwQTAwMDQ4Rjg3MDAzNDhDRTIwMDE0MEYKKzoxMDBBQTAwMDhDRTMwMDEwOENFNTAwMTQwMDQzRjgyMzAzRTVDODJCMDkKKzoxMDBBQjAwMDEzMjAwMDA1MDI0MDIwMjE4RTI0MDAyQzhDRjEwMDEwMTAKKzoxMDBBQzAwMDEwOTEwMDMxMDI0MDIwMjEyNDAyMDAxMkEzODIwMDU4MUMKKzoxMDBBRDAwMDBFMDAxOEIzMjQxMkZGRkYxMDUyMDAwMjI0MDRGRkZGN0YKKzoxMDBBRTAwMDAwMDAyMDIxOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0QUUKKzoxMDBBRjAwMDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwMDcKKzoxMDBCMDAwMDkwQTgwMEM0MzUwNDAwMjAwQTAwMThFOUEwQTQwMEM0N0QKKzoxMDBCMTAwMDAwQ0E0ODI0MTUyMDAwMEI4RjhCMDAzNDhGOEQwMDM0QzEKKzoxMDBCMjAwMDhEQUMwMDEwMTU4MDAwMEIwMjQwMjAyMThFMkUwMDJDNzEKKzoxMDBCMzAwMDUxQzBGRkVDMDAwMDIwMjEwMjQwMjAyMTBBMDAxOTA0Q0UKKzoxMDBCNDAwMDI0MDIwMDE3OEQ2NjAwMTA1MEMwRkZFNjAwMDAyMDIxMkYKKzoxMDBCNTAwMDAyNDAyMDIxMEEwMDE5MDQyNDAyMDAxMTAyNDAyMDIxMzEKKzoxMDBCNjAwMDI0MDIwMDE1MEUwMDE4QjNBMzgyMDA1ODI0MEZGRkZGQzMKKzoxMDBCNzAwMDEwNEZGRkRDMjQwNEZGRkYwQTAwMThGMzhFMjYwMDAwNEMKKzoxMDBCODAwMDBBMDAxOTJBMjQwMjAwMTQzQzA4MDAwNDAwQzgzODI0NzIKKzoxMDBCOTAwMDUwRTBGRkQ0MDAwMDIwMjEwMjQwMjAyMTBBMDAxOTA0NjcKKzoxMDBCQTAwMDI0MDIwMDEzOEY4NjAwMkMyN0JERkZFMEFGQjEwMDE0OTQKKzoxMDBCQjAwMEFGQkYwMDE4QUZCMDAwMTA5MEMzMDBDNDMwQTUwMEZGNTUKKzoxMDBCQzAwMDMwNjIwMDIwMTA0MDAwMDgwMDgwODgyMThDQ0IwMEMwREIKKzoxMDBCRDAwMDI0MDlGRkRGMjU2QTAwMDFBQ0NBMDBDMDkwQzgwMEM0MjgKKzoxMDBCRTAwMDAxMDkzODI0QTBDNzAwQzQxNEEwMDA0MDNDMEM4MDAwQjgKKzoxMDBCRjAwMDhGODQwMDJDOTA4NzAwQzQyNDE4RkZCRjI0MDZGRkVGQzkKKzoxMDBDMDAwMDMwRTMwMDdGQTA4MzAwQzQ5NzlGMDA0QzhGODIwMDUwODgKKzoxMDBDMTAwMDhGOEQwMDJDMDNFMkM4MjNBNzk5MDA0Q0E1QTAwMEFDM0YKKzoxMDBDMjAwMDkxQUYwMEM0MDFGODcwMjRBMUFFMDBDNDhGOEMwMDJDRDkKKzoxMDBDMzAwMEExODAwMEM3OEY4QTAwMkNBNTQwMDA3MkFENDAwMERDNjcKKzoxMDBDNDAwMDkxNDUwMEM0MDBBNjU4MjRBMTRCMDBDNDhGOTAwMDI4RjEKKzoxMDBDNTAwMDhGODQwMDUwOTc4NjAwNEMwMjA0MjgyMTEwQzAwMDBGOUEKKzoxMDBDNjAwMEFGODUwMDI4QTM4MDAwNDgzQzA3ODAwMDhFMkMwMDA4MzgKKzoxMDBDNzAwMDk0RUQwMTIwOEUyQjAwMDQwMThENTAyMTAxNEI4MDIxMjkKKzoxMDBDODAwMDAyMDYyMDIzMzA4NkZGRkYzMEM4MDAwRjM5MDkwMDAxMUIKKzoxMDBDOTAwMDMxMzEwMDAxMTYyMDAwMDlBMzg4MDA0ODkzODYwMDM4RUUKKzoxMDBDQTAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDI3QkQwMDIwMzcKKzoxMDBDQjAwMEFGODUwMDU0MDNFMDAwMDhBRjg2MDA1MDAwQzg3MDIzRTEKKzoxMDBDQzAwMDhGQkYwMDE4OTM4NjAwMzg4RkIxMDAxNDhGQjAwMDEwQ0EKKzoxMDBDRDAwMDM0RUYwQzAwMDEwRjI4MjEyN0JEMDAyMEFDRUUwMDg0NkEKKzoxMDBDRTAwMEFGODUwMDU0MDNFMDAwMDhBRjg2MDA1MDM1OTAwMTgwQzYKKzoxMDBDRjAwMDAyMDAyODIxMEUwMDE4OEUyNDA2MDA4MjhGODQwMDJDMEEKKzoxMDBEMDAwMDkwODYwMEM0MzBDNTAwNDA1MEEwRkZCQUEzODAwMDU4QjAKKzoxMDBEMTAwMDhGODUwMDNDM0MwNjgwMDA4Q0NEMDFCODA1QTBGRkZFMEQKKzoxMDBEMjAwMDhGODkwMDVDMjQwODYwODIyNDA3MDAwMkFFMDkwMDAwNUQKKzoxMDBEMzAwMEE2MDgwMDA4QTIwNzAwMEI4Q0EzMDAwODNDMEUxMDAwQjgKKzoxMDBENDAwMEFFMDMwMDEwOENBMjAwMENBRTAyMDAxNDhDQkYwMDE0ODUKKzoxMDBENTAwMEFFMUYwMDE4OENCOTAwMThBRTE5MDAyNDhDQjgwMDI0RkUKKzoxMDBENjAwMEFFMTgwMDI4OENBRjAwMjhBRTBGMDAyQ0FDQ0UwMUI4MTYKKzoxMDBENzAwMDBBMDAxOTRFQTM4MDAwNTg4RjhBMDAyQzI3QkRGRkUwN0YKKzoxMDBEODAwMEFGQjEwMDE0QUZCMDAwMTA4Rjg4MDA1MEFGQkYwMDE4OTMKKzoxMDBEOTAwMDkzODkwMDMwOTU0MjAwQUMzMEQxMDBGRjAxMDkxODJCMzcKKzoxMDBEQTAwMDAwODA4MDIxMzBBQzAwRkYzMDQ3RkZGRjAwMDA1ODIxNTkKKzoxMDBEQjAwMDE0NjAwMDAzMzEwNjAwRkYwMTIwMzAyMTAxMDk1ODIzOEYKKzoxMDBEQzAwMDk3ODMwMDRDMDA2ODIwMkIxNDgwMDAxQjAwMDAwMDAwNUIKKzoxMDBERDAwMDEwNjgwMDQzMjQwQTAwMDExMThBMDA0ODM0RTcwODgwQTMKKzoxMDBERTAwMDMxNjVGRkZGMEUwMDE4MzAwMjAwMjAyMTBFMDAxODcwNDAKKzoxMDBERjAwMDhGODQwMDVDOEY4NDAwMkM5NDhEMDA3MDI1QUMwMDAxRTIKKzoxMDBFMDAwMEE0OEMwMDcwOTQ4QjAwNzAzQzA2MDgwMDhDQzYzMTg4NUUKKzoxMDBFMTAwMDMxNjc3RkZGMTBFNjAwNEYwMDAwMDAwMDAyMDAyMDIxMzQKKzoxMDBFMjAwMDAyMjAyODIxOEZCRjAwMTg4RkIxMDAxNDhGQjAwMDEwNEUKKzoxMDBFMzAwMDBBMDAxOTNBMjdCRDAwMjA5MTQ0MDBDNDI0MDZGRjgwMEYKKzoxMDBFNDAwMDAwODY4ODI1QTE1MTAwQzQ5Nzg0MDA0QzMwODhGRkZGOUMKKzoxMDBFNTAwMDExMDAwMDFDOTM4OTAwMzA4RjhFMDAyQzI0MTlFRkZGQTUKKzoxMDBFNjAwMDAwOEJGODIzOTVEODAwQUMwMTY4NjgyQjMzRTkwMEZGQUMKKzoxMDBFNzAwMDAzMTk3ODI0QTVDRjAwQUM1MUEwMDAyQTAxMDA1ODIxMDUKKzoxMDBFODAwMDhFMDUwMDIwMjQwOEZGRkIyNDAzMDAwMTAwQTgxMDI0ODUKKzoxMDBFOTAwMEFFMDIwMDIwMTE4MzAwMjUzNEU3ODAwMDAyMDAyMDIxRUIKKzoxMDBFQTAwMDMxNjVGRkZGMEUwMDE4MzAwMTIwMzAyMTk3OEIwMDRDNzgKKzoxMDBFQjAwMDhGODcwMDUwQTc4MDAwNEMwMEVCODAyM0FGOTAwMDUwM0MKKzoxMDBFQzAwMDkzODkwMDMwOEY4QzAwMkM4RkJGMDAxODhGQjEwMDE0RDUKKzoxMDBFRDAwMDhGQjAwMDEwMjdCRDAwMjAwM0UwMDAwOEExODkwMEM3RTMKKzoxMDBFRTAwMDhFMDgwMDIwMjQwOUZGRkIzNEU3ODAwMDAxMDkyODI0MzQKKzoxMDBFRjAwMEFFMDUwMDIwMTU4QUZGQkEzNEU3MDg4MDAyMDAyMDIxRTEKKzoxMDBGMDAwMDBFMDAxN0ZFMzE2NUZGRkYwMjAwMjAyMTAyMjAyODIxN0MKKzoxMDBGMTAwMDhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDBBMDAxOTNBNkIKKzoxMDBGMjAwMDI3QkQwMDIwMEEwMDE5RjEwMDAwNDgyMTAyMDAyMDIxRkQKKzoxMDBGMzAwMDMxNjVGRkZGMEUwMDE3RkUwMTIwMzAyMTk3OEIwMDRDMUEKKzoxMDBGNDAwMDhGODcwMDUwQTc4MDAwNEMwMEVCODAyMzBBMDAxQTAxMTUKKzoxMDBGNTAwMEFGOTAwMDUwOTQ4OTAwNzAyNDBBODAwMDAxMkE0MDI0MzgKKzoxMDBGNjAwMEE0ODgwMDcwOTA4NTAwNzA5MDk5MDA3MDMwQTIwMEZGRjYKKzoxMDBGNzAwMDAwMDIxOUMyMDAwM0Y4MjcwMDFGQzFDMDMzMkYwMDdGRjEKKzoxMDBGODAwMDAxRjg3MDI1QTA4RTAwNzAwQTAwMTlEOTAyMDAyMDIxRjYKKzoxMDBGOTAwMDhGODgwMDJDMjQwMzAwMDE5MTBBMDA3ODkxMDUwMEM3NzYKKzoxMDBGQTAwMDI1MDkwMDc4MzE0NzAwM0YyNEU2RkZFMDAwQzMxODA0MUMKKzoxMDBGQjAwMDJDQzIwMDIwMzA2NzAwMTlBMzg1MDAzMDEwNDAwMDFBQjEKKzoxMDBGQzAwMEFGODkwMDNDM0MwQTgwMDAzNTRCMDAwMjI0MDUwMDAxM0IKKzoxMDBGRDAwMDI0MDYwMDAxMTRFMDAwMTYwMDZCMTAyNDAwMDAyODIxRjQKKzoxMDBGRTAwMDE0NDAwMDBGMzA2MzAwMjAxMDYwMDAwRjI0MDUwMDAxNDIKKzoxMDBGRjAwMDhEMDYwMDc0OEQxOTAwNzQyNDAzRkY4MDAwQzMxMDI0MzMKKzoxMDEwMDAwMDAwMDI3OTQwMzMzODAwN0YwMUY4NjgyNTNDMEUxMDAwNUIKKzoxMDEwMTAwMDAxQUU2MDI1QUQ0QzA4MzA5MTI4MDAwMTMxMDYwMDAxNzkKKzoxMDEwMjAwMDBBMDAxOUFGMDAwMDAwMDAwM0UwMDAwODAwMDAwMDAwMDMKKzoxMDEwMzAwMDhEMEYwMDc0OEQwRDAwNzQyNDE4RkY4MDAxRjg3MDI0NEEKKzoxMDEwNDAwMDAwMEU0MTQwMzFBQzAwN0YwMTBDNTAyNTNDMEIxMDAwREMKKzoxMDEwNTAwMDAxNEIzODI1M0MwOTgwMDAwQTAwMTlBRkFEMjcwODMwNDQKKzoxMDEwNjAwMDI3QkRGRkQ4QUZCMDAwMTA4RjkwMDAzQ0FGQjQwMDIwNzgKKzoxMDEwNzAwMEFGQjEwMDE0QUZCRjAwMjRBRkIzMDAxQ0FGQjIwMDE4NzMKKzoxMDEwODAwMDhFMDUwMDEwM0MwMjA4MDA4QzQyMzFCMDhGODYwMDQwNzMKKzoxMDEwOTAwMDMwQTczRkZGMDBFMjE4MkI4Q0QyMDAxNDAwODA4ODIxN0IKKzoxMDEwQTAwMDhDRDMwMDIwMTA2MDAwMDcwMDAwQTAyMTkwQ0IwMDBEMjEKKzoxMDEwQjAwMDI0MEFGRjgwMDE0QjQ4MjQzMTI4MDBGRjE1MDAwMDBDNTIKKzoxMDEwQzAwMDAwMDU2MzgyMDIyMDIwMjEyNDExMDAwREEzOTEwMDU4MDUKKzoxMDEwRDAwMDhGQkYwMDI0OEZCNDAwMjA4RkIzMDAxQzhGQjIwMDE4ODQKKzoxMDEwRTAwMDhGQjEwMDE0OEZCMDAwMTAwQTAwMThCMzI3QkQwMDI4N0MKKzoxMDEwRjAwMDMxODUwMDAzNTRBMEZGRjQwMjIwMjAyMTk0Q0YwMDFDNkUKKzoxMDExMDAwMDhGOEUwMDJDOEUwNzAwMjhBNUNGMDBEODhDQ0QwMDEwMjQKKzoxMDExMTAwMDAyNEQzMDIzMTBFNjAwNUMyNDAyMDAxRjBFMDAxOEIzQkQKKzoxMDExMjAwMEEzODIwMDU4MjQxRkZGRkYxMDVGMDA0RTI0MDRGRkZGMUUKKzoxMDExMzAwMDhGODMwMDQ0OEY4ODAwMzQwMjYzOTgyMThEMDkwMDEwNEEKKzoxMDExNDAwMDAxMjMxMDIzOEY4MzAwMjRBRDAyMDAxMEFEMTMwMDIwNzMKKzoxMDExNTAwMDhDNjcwMDc0MDBGMzIwMkIxNDgwMDA2MjAyMjAyMDIxOTEKKzoxMDExNjAwMDhGODYwMDQwOEUwQzAwMjQ4Q0M1MDAyNDExODUwMDA3NUEKKzoxMDExNzAwMDAyMjAyMDIxMjQwRTAwMUMwRTAwMThCM0EzOEUwMDU4NUMKKzoxMDExODAwMDI0MERGRkZGMTA0RDAwMzcyNDA0RkZGRjhGODQwMDM0MkYKKzoxMDExOTAwMDhDOTgwMDI0MjcwRjAwMDFBQzhGMDAyNDEyNzIwMDQ0QTkKKzoxMDExQTAwMDhGOTkwMDI0OEYzMjAwNzQxMjUzMDA0MTNDMEEwMDgwNTIKKzoxMDExQjAwMDhFMDkwMDAwMDEyQTEwMjQxNDQwMDAzQTAwMDAwMDAwQUIKKzoxMDExQzAwMDhFMDQwMDE0MjQxMkZGRkYxMDkyMDAwNjI0MEIwMDFCNTMKKzoxMDExRDAwMDAyMjAyMDIxMEUwMDE4QjNBMzhCMDA1ODEwNTIwMDIxQ0EKKzoxMDExRTAwMDI0MDRGRkZGOEUwMzAwMDAzQzBDMDAwMTAwNkMyODI0NDcKKzoxMDExRjAwMDEwQTAwMDEzM0MwNjAwODAwMDY2QTAyNDE2ODAwMDA5QTEKKzoxMDEyMDAwMDAyMDAyODIxMDIyMDIwMjEyNDBFMDAxQTBFMDAxOEIzMEIKKzoxMDEyMTAwMEEzOEUwMDU4MjQwREZGRkYxMDREMDAxMjI0MDRGRkZGODEKKzoxMDEyMjAwMDAyMDAyODIxMDIyMDIwMjEwRTAwMThEMzI0MDYwMDAxRUMKKzoxMDEyMzAwMDI0MTBGRkZGMjQwNEZGRkYxMDUwMDAwQTI0MTQwMDAxQjMKKzoxMDEyNDAwMDhGOEYwMDM0MDIyMDIwMjEwMjgwMzAyMTk1RjIwMDM0NUIKKzoxMDEyNTAwMDI0MDUwMDAxMjY1ODAwMDEwRTAwMTlBRkE1RjgwMDM0M0UKKzoxMDEyNjAwMDAwMDAyMDIxOEZCRjAwMjQ4RkI0MDAyMDhGQjMwMDFDMEEKKzoxMDEyNzAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxQzEKKzoxMDEyODAwMDAzRTAwMDA4MjdCRDAwMjg4RjgzMDA0NDAwRTNDODIxNDUKKzoxMDEyOTAwMDAyNTlDMDJCMTMwMEZGQTg4Rjg4MDAzNDBBMDAxQTk4NDcKKzoxMDEyQTAwMDI0MDIwMDE4QUM4MDAwMjAwQTAwMUFDMjhFMDQwMDE0MjgKKzoxMDEyQjAwMDhFMUYwMDAwM0MwNzAwODAwM0U3OTgyNDE2NjBGRkY5QUEKKzoxMDEyQzAwMDI0MDgwMDFBMDIyMDIwMjEwRTAwMThCM0EzODgwMDU4MTkKKzoxMDEyRDAwMDI0MDNGRkZGMTQ0M0ZGQkEyNDA0RkZGRjBBMDAxQUVCQTQKKzoxMDEyRTAwMDhGQkYwMDI0MjQwQjAwMUQwRTAwMThCM0EzOEIwMDU4RTEKKzoxMDEyRjAwMDI0MEFGRkZGMTQ0QUZGOUEyNDA0RkZGRjBBMDAxQUVCOTYKKzoxMDEzMDAwMDhGQkYwMDI0OEY4NTAwMkMyN0JERkZEOEFGQjMwMDFDRjIKKzoxMDEzMTAwMEFGQjIwMDE4QUZCMTAwMTRBRkIwMDAxMEFGQkYwMDIwRTMKKzoxMDEzMjAwMDkwQTcwMEM0OEY5MDAwM0MyNDEyRkZGRjM0RTIwMDQwREQKKzoxMDEzMzAwMDkyMDYwMDAwQTBBMjAwQzQ4RTAzMDAxMDAwODA5ODIxMzUKKzoxMDEzNDAwMDEwNzIwMDA2MzBEMTAwM0YyNDA4MDAwRDBFMDAxOEIzQzMKKzoxMDEzNTAwMEEzODgwMDU4MTA1MjAwMjYyNDA2RkZGRjhGOEEwMDJDMTUKKzoxMDEzNjAwMDhFMDkwMDE4OEQ0NDAwQzAxMTI0MDAwNzI0MEMwMDBFQzMKKzoxMDEzNzAwMDAyNjAyMDIxMEUwMDE4QjNBMzhDMDA1ODI0MEJGRkZGM0QKKzoxMDEzODAwMDEwNEIwMDFCMjQwNkZGRkYyNDA0MDAyMDEyMjQwMDA0M0QKKzoxMDEzOTAwMDhGOEQwMDJDOTFBRjAwQzQzNUVFMDAyMEExQUUwMEM0QUIKKzoxMDEzQTAwMDhGODUwMDQ0MTBBMDAwMUEwMDAwMDAwMDEyMjQwMDRCOUEKKzoxMDEzQjAwMDhGOTgwMDJDOEY5MkZFREMyNDA2RkZGRDk3MTAwMDcwQTIKKzoxMDEzQzAwMDk2NTEwMDBBMTIzMDAwMEI4RkJGMDAyMDNDMUYwODAwMEUKKzoxMDEzRDAwMDhGRkYzMThDMDNFNUM4MkIxNzIwMDAxRTAyNjAyMDIxRUYKKzoxMDEzRTAwMDAwMDAyODIxMEUwMDE5QUYyNDA2MDAwMTAwMDAzMDIxNjIKKzoxMDEzRjAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0NzQKKzoxMDE0MDAwMDhGQjAwMDEwMDBDMDEwMjEwM0UwMDAwODI3QkQwMDI4QTUKKzoxMDE0MTAwMDUyMjQwMDJBOEUwMzAwMTQ4Rjg0MDAyQzk0ODkwMDcwQkIKKzoxMDE0MjAwMDI1MjgwMDAxQTQ4ODAwNzA5NDg3MDA3MDNDMDUwODAwRkUKKzoxMDE0MzAwMDhDQTUzMTg4MzBFMjdGRkYxMDQ1MDAwRTAwMDAwMDAwQ0YKKzoxMDE0NDAwMDAyNjAyMDIxMEUwMDE5M0EyNDA1MDAwMTBBMDAxQjRERkMKKzoxMDE0NTAwMDAwMDAzMDIxMjQwMjAwMkRBMzgyMDA1ODBFMDAxOEIzOTIKKzoxMDE0NjAwMDI0MTNGRkZGMTQ1M0ZGRTEyNDA2RkZGRjBBMDAxQjRFNjUKKzoxMDE0NzAwMDhGQkYwMDIwOTQ5ODAwNzAyNDE5ODAwMDI0MDUwMDAxN0IKKzoxMDE0ODAwMDAzMTk5MDI0QTQ5MjAwNzA5MDkxMDA3MDkwOEQwMDcwQzgKKzoxMDE0OTAwMDMyMzAwMEZGMDAxMDc5QzIwMDBGNzAyNzAwMEU2MUMwQ0IKKzoxMDE0QTAwMDMxQUIwMDdGMDE2QzUwMjVBMDhBMDA3MDBFMDAxOTNBMDQKKzoxMDE0QjAwMDAyNjAyMDIxMEEwMDFCNEQwMDAwMzAyMTI0MDZGRkZGOUUKKzoxMDE0QzAwMDE0NjZGRkQ2OEY4NDAwMkMwMjYwMjAyMTBFMDAxOTNBOEEKKzoxMDE0RDAwMDI0MDUwMDAxMEEwMDFCNEQwMDAwMzAyMTAyNjAyMDIxN0MKKzoxMDE0RTAwMDBBMDAxQjY3MjQwMjAwMEE4Rjg4MDAyQzI3QkRGRkU4MzIKKzoxMDE0RjAwMEFGQjAwMDEwQUZCRjAwMTQ5MTBBMDBDNDhGODcwMDNDNEEKKzoxMDE1MDAwMDAwODA4MDIxMzU0OTAwNDA4Q0U2MDAxMEExMDkwMEM0MEMKKzoxMDE1MTAwMDNDMDIwODAwOEM0MjMxQjAzMEM1M0ZGRjAwQTIxODJCQkUKKzoxMDE1MjAwMDEwNjAwMDA3OEY4NTAwNDAyNDBERkY4MDkwQUUwMDBERjUKKzoxMDE1MzAwMDAxQUU2MDI0MzE4QjAwRkYxNTYwMDAwODAwMDZDMzgyRjUKKzoxMDE1NDAwMDAyMDAyMDIxMjQwMzAwMEQ4RkJGMDAxNDhGQjAwMDEwNzMKKzoxMDE1NTAwMDI3QkQwMDE4MEEwMDE4QjNBMzgzMDA1ODMzMDYwMDAzMDAKKzoxMDE1NjAwMDI0MEYwMDAyNTRDRkZGRjcwMjAwMjAyMTk0QTIwMDFDOTgKKzoxMDE1NzAwMDhGODUwMDJDMjQxOTAwMjNBNEEyMDBEODhDRTgwMDAwMzkKKzoxMDE1ODAwMDAwMDgxRTAyMzA3RjAwM0YxM0Y5MDAzNTNDMEEwMDgzM0IKKzoxMDE1OTAwMDhDRTgwMDE4OENBNjAwQzAxMTA2MDAwODAwMDAwMDAwQUUKKzoxMDE1QTAwMDI0MDUwMDBFMEUwMDE4QjNBMzg1MDA1ODI0MDdGRkZGODIKKzoxMDE1QjAwMDEwNDcwMDE4MjQwNEZGRkY4Rjg1MDAyQzkwQTkwMEM0NTkKKzoxMDE1QzAwMDM1MjQwMDIwQTBBNDAwQzQ4RjhDMDAzNDkxOEUwMDBEMUYKKzoxMDE1RDAwMDMxQ0QwMDdGQTE4RDAwMEQ4RjgzMDA0NDEwNjAwMDFDNzEKKzoxMDE1RTAwMDAyMDAyMDIxOEY4NDAwNDA4Qzk4MDAxMDAzMDM3ODJCODgKKzoxMDE1RjAwMDExRTAwMDBEMjQxOTAwMTgwMjAwMjAyMUEzOTkwMDU4QzEKKzoxMDE2MDAwMDBFMDAxOEIzMjQxMEZGRkYxMDUwMDAwMjI0MDRGRkZGNDcKKzoxMDE2MTAwMDAwMDAyMDIxOEZCRjAwMTQ4RkIwMDAxMDAwODAxMDIxMjcKKzoxMDE2MjAwMDAzRTAwMDA4MjdCRDAwMTg4Qzg2MDAxMDhGOUYwMDM0NEYKKzoxMDE2MzAwMDAyMDAyMDIxMDBDMzEwMjNBRkUyMDAxMDI0MDUwMDAxQTYKKzoxMDE2NDAwMDBFMDAxOUFGMjQwNjAwMDEwQTAwMUJENjAwMDAyMDIxNUQKKzoxMDE2NTAwMDBFMDAxOTNBMjQwNTAwMDEwQTAwMUJENjAwMDAyMDIxQzMKKzoxMDE2NjAwMDAxMEE1ODI0MTU2QUZGRDk4RjhDMDAzNEEwQTYwMEVDMUIKKzoxMDE2NzAwMDBBMDAxQkMzQTM4NjAwNEEyN0JERkZEOEFGQjAwMDEwRTUKKzoxMDE2ODAwMDhGOTAwMDNDQUZCMjAwMThBRkJGMDAyMEFGQjMwMDFDN0EKKzoxMDE2OTAwMEFGQjEwMDE0OEUxMTAwMTAzQzAzMDgwMDhDNjMzMUIwMTAKKzoxMDE2QTAwMDMyMjUzRkZGMDBBMzEwMkIxMDQwMDAwODAwODA5MDIxM0UKKzoxMDE2QjAwMDhGODYwMDQwMjQwOUZGODA5MENBMDAwRDAxMkE0MDI0MzMKKzoxMDE2QzAwMDMxMDcwMEZGMTRFMDAwMEIwMDExNkI4MjAyNDAyMDIxNjMKKzoxMDE2RDAwMDI0MTIwMDBEQTM5MjAwNTg4RkJGMDAyMDhGQjMwMDFDNkUKKzoxMDE2RTAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDBBMDAxOEIzMjkKKzoxMDE2RjAwMDI3QkQwMDI4MzFBQzAwMDMyNDBCMDAwMTU1OEJGRkY0RkIKKzoxMDE3MDAwMDAyNDAyMDIxOTBDRjAwMEQzMUVFMDAwODExQzAwMDYwOTIKKzoxMDE3MTAwMDhGOTMwMDQ0MTY2MDAwMDkyNDAyMDAyNzhFMTkwMDBDRTQKKzoxMDE3MjAwMDhDRDgwMDIwMTczODAwMDUyNDAyMDAyMDhFMDIwMDA4MDMKKzoxMDE3MzAwMDhDREYwMDI0MTA1RjAwNDAyNDAyMDAyMDBFMDAxOEIzNEMKKzoxMDE3NDAwMEEzODIwMDU4MjQwNkZGRkYxMDQ2MDAzMzI0MDRGRkZGNDUKKzoxMDE3NTAwMDhGOTkwMDM0MjQwQUZGRjczQzEzODAwRTkzMjkwMDBENjMKKzoxMDE3NjAwMDI0MDRGRjgwM0MwRDgwMDAwMTJBRjgyNEEzM0YwMDBERDMKKzoxMDE3NzAwMDhGOTkwMDI0M0MwODA4MDA4RDA4MzFBQzhGODMwMDVDRjEKKzoxMDE3ODAwMDk3MjcwMDc4OEY5RjAwMzQwMTAzMTAyMTMwRTU3RkZGRjkKKzoxMDE3OTAwMDAwMDUzMDQwMDA0Njc4MjEzMUY4MDA3RjAzMTM2MDIxQjYKKzoxMDE3QTAwMDAxRTQ3MDI0QURBRTAwMkNBNTkxMDAwMDhGRUIwMDI4NjEKKzoxMDE3QjAwMDI1NkEwMDAxQUZFQTAwMjg4RkUzMDAyQzhFMDkwMDJDNzcKKzoxMDE3QzAwMDAwNjk0MDIxQUZFODAwMkM4RTA3MDAyQ0FGRTcwMDMwMDUKKzoxMDE3RDAwMDhFMDUwMDE0QUZFNTAwMzQ5N0U2MDAzQTI0QzIwMDAxRkMKKzoxMDE3RTAwMEE3RTIwMDNBOTczMzAwNzgzQzEwMDgwMDhFMTAzMUIwMjEKKzoxMDE3RjAwMDI2NjMwMDAxMzA3MTdGRkYxMjMwMDAyNzAwNjAzMDIxMjYKKzoxMDE4MDAwMDhGOEYwMDI0MDI0MDIwMjEyNDA1MDAwMTBFMDAxOTNBODgKKzoxMDE4MTAwMEE1RTYwMDc4MDAwMDIwMjE4RkJGMDAyMDhGQjMwMDFDQjgKKzoxMDE4MjAwMDhGQjIwMDE4OEZCMTAwMTQ4RkIwMDAxMDAwODAxMDIxMEIKKzoxMDE4MzAwMDAzRTAwMDA4MjdCRDAwMjg4RTA1MDAxNDI0MTNGRkZGRDUKKzoxMDE4NDAwMDEwQjMwMDFEOEY4MzAwMkM4RTA4MDAxODhDNjcwMEMwMTkKKzoxMDE4NTAwMDE1MDcwMDA5MjQwMjAwMEU4RTBBMDAyNDhDQzkwMDI4RjYKKzoxMDE4NjAwMDE1NDkwMDA1MjQwMjAwMjE4RTA3MDAyODhDQ0IwMDJDOEUKKzoxMDE4NzAwMDEwRUIwMDEzMjQwMjAwMUYwRTAwMThCM0EzODIwMDU4QkYKKzoxMDE4ODAwMDE0NTNGRkIzMjQwNEZGRkYwQTAwMUM1ODhGQkYwMDIwMkQKKzoxMDE4OTAwMDBBMDAxQzIwMjQwMjAwMjQyNDBFODAwMDAwNkU2ODI0MEMKKzoxMDE4QTAwMDMxQUNGRkZGMDAwQzVCQzIzMTcxMDBGRjAwMTE4MDI3REIKKzoxMDE4QjAwMDBBMDAxQzUxMDAxMDMzQzAwQTAwMUM2RjI0MDIwMDI1Q0UKKzoxMDE4QzAwMDhFMDUwMDJDMTBBMEZGRUMyNDAyMDAyMzhGOEUwMDI0MzQKKzoxMDE4RDAwMDhEQ0QwMDc0MDFBNTYwMkIxNTgwRkZFNzI0MDIwMDI2NDIKKzoxMDE4RTAwMDhDQ0YwMDE0MDBBN0MwMjEwMUY4MjAyQjEwODBGRjk5OTUKKzoxMDE4RjAwMDhGOTkwMDM0MDI0MDIwMjEwQTAwMUM2RjI0MDIwMDIyMkMKKzoxMDE5MDAwMDI3QkRGRkUwQUZCMDAwMTA4RjkwMDAzQ0FGQjEwMDE0RDYKKzoxMDE5MTAwMEFGQkYwMDE4OEUwNTAwMTAzQzAzMDgwMDhDNjMzMUIwODcKKzoxMDE5MjAwMDAwODA4ODIxMzBBNDNGRkYwMDgzMTAyQjEwNDAwMDA3NjcKKzoxMDE5MzAwMDhGODYwMDQwMjQwOUZGODA5MENBMDAwRDAxMkE0MDI0QjAKKzoxMDE5NDAwMDMxMDcwMEZGMTRFMDAwMDk4RjhCMDA0NDI0MTAwMDBEQzQKKzoxMDE5NTAwMDAyMjAyMDIxQTM5MDAwNTg4RkJGMDAxODhGQjEwMDE0REYKKzoxMDE5NjAwMDhGQjAwMDEwMEEwMDE4QjMyN0JEMDAyMDExNjAwMDA4RDYKKzoxMDE5NzAwMDAwMDVDMzgyOEY4RjAwMkM4RjhFRkVEQzI0MDdGRkZEQjUKKzoxMDE5ODAwMDk1RUMwMDcwOTVDRDAwMEExMUFDMDAzODhGQkYwMDE4OUYKKzoxMDE5OTAwMDMzMDUwMDAzMTRBMDAwMTAwMDAwMDAwMDkyMTkwMDAyOUIKKzoxMDE5QTAwMDEzMjAwMDQxMDAwMDAwMDA4RTA2MDAyNDUwQzAwMDBGRUMKKzoxMDE5QjAwMDkyMDQwMDAzMDIyMDIwMjEyNDAyMDAwRjBFMDAxOEIzMUQKKzoxMDE5QzAwMEEzODIwMDU4MjQwOEZGRkYxNDQ4MDAwNzI0MDdGRkZGRTQKKzoxMDE5RDAwMDBBMDAxQ0VDOEZCRjAwMTg5MEMzMDAwRDMwNjQwMDA4OTMKKzoxMDE5RTAwMDEwODAwMDM3MDIyMDIwMjE5MjA0MDAwMzI0MDcwMDAyMDcKKzoxMDE5RjAwMDMwODkwMEZGMTUyNzAwMDUzMDhGMDBGRjhGOEEwMDQ0RDMKKzoxMDFBMDAwMDExNDAwMDMxMjQwQzAwMkMzMDhGMDBGRjM5RTUwMDEwMEMKKzoxMDFBMTAwMDJDQUQwMDAxMkRFRTAwMDEwMjAwMjgyMTAxQ0QzMDI1NjIKKzoxMDFBMjAwMDBFMDAxOEQzMDIyMDIwMjEyNDEwRkZGRjEwNTAwMDBFQkEKKzoxMDFBMzAwMDI0MDdGRkZGOEY4MzAwNDQxMDYwMDAxNzAyMjAyMDIxM0QKKzoxMDFBNDAwMDNDMTkwODAwOEYzOTMxOEMwMzIzQzAyQjU3MDAwMDBDNDAKKzoxMDFBNTAwMDI0MTEwMDJEMDIyMDIwMjEwMDAwMjgyMTBFMDAxOUFGQTIKKzoxMDFBNjAwMDI0MDYwMDAxMDAwMDM4MjE4RkJGMDAxODhGQjEwMDE0MzgKKzoxMDFBNzAwMDhGQjAwMDEwMDBFMDEwMjEwM0UwMDAwODI3QkQwMDIwMTcKKzoxMDFBODAwMDBFMDAxOEIzQTM5MTAwNTgxNDUwRkZGNjI0MDdGRkZGNkYKKzoxMDFBOTAwMDBBMDAxQ0VDOEZCRjAwMTgwRTAwMTkzQTI0MDUwMDAxNDMKKzoxMDFBQTAwMDBBMDAxQ0VCMDAwMDM4MjE4Q0RGMDAyNDhFMDIwMDI0ODkKKzoxMDFBQjAwMDU0NUZGRkMxMDIyMDIwMjEwQTAwMUNDQzkyMDQwMDAzQzUKKzoxMDFBQzAwMDBBMDAxQ0MwMjQwMjAwMTAwMjIwMjAyMTBFMDAxOEIzQkUKKzoxMDFBRDAwMEEzOEMwMDU4MjQwQkZGRkYxMDRCRkZFMzI0MDdGRkZGRUMKKzoxMDFBRTAwMDBBMDAxQ0QzOTIwNDAwMDMzMEE1MDBGRjI0MDYwMDAxNjUKKzoxMDFBRjAwMDI0QTkwMDAxMDBDOTEwMkIxMDQwMDAwQzAwMDA0MDIxNTcKKzoxMDFCMDAwMDI0MEEwMDAxMDBBNjE4MjMzMDhCMDAwMTI0QzYwMDAxMUUKKzoxMDFCMTAwMDAwNkEzODA0MDAwNDIwNDIxMTYwMDAwMjAwQzkxODJCM0EKKzoxMDFCMjAwMDAxMDc0MDI1MTQ2MEZGRjgwMEE2MTgyMzAzRTAwMDA4MTEKKzoxMDFCMzAwMDAxMDAxMDIxMjdCREZGRDhBRkIwMDAxODhGOTAwMDNDRTYKKzoxMDFCNDAwMEFGQjEwMDFDQUZCRjAwMjAyNDAzRkZGRjI0MTEwMDJGMDIKKzoxMDFCNTAwMEFGQTMwMDEwOTIwNjAwMDAyNDA1MDAwODI2MTAwMDAxMjMKKzoxMDFCNjAwMDAwNjYyMDI2MEUwMDFEMEIzMDg0MDBGRjAwMDIxRTAwQzAKKzoxMDFCNzAwMDNDMDIxRURDMzQ0NjZGNDEwQTAwMUQzMzAwMDAxMDIxNzgKKzoxMDFCODAwMDEwQTAwMDA5MDA4MDE4MjEyNDQ1MDAwMTMwQTJGRkZGQTkKKzoxMDFCOTAwMDJDNDUwMDA4MDQ2MUZGRkEwMDAzMjA0MDAwODYyMDI2M0YKKzoxMDFCQTAwMDE0QTBGRkY5MDA4MDE4MjEwRTAwMUQwQjI0MDUwMDIwNTEKKzoxMDFCQjAwMDhGQTMwMDEwMjYyOUZGRkYzMTMxMDBGRjAwMDM0MjAyRUUKKzoxMDFCQzAwMDI0MDcwMEZGMTYyN0ZGRTIwMTAyMTgyNjAwMDM1MDI3MTIKKzoxMDFCRDAwMEFGQUEwMDE0QUZBQTAwMTAwMDAwMzAyMTI3QTgwMDEwRkYKKzoxMDFCRTAwMDI3QTcwMDE0MDBFNjc4MjM5MUVEMDAwMzI0Q0UwMDAxMUUKKzoxMDFCRjAwMDAwQzg2MDIxMzFDNjAwRkYyQ0NCMDAwNDE1NjBGRkY5M0UKKzoxMDFDMDAwMEExOEQwMDAwOEZBMjAwMTA4RkJGMDAyMDhGQjEwMDFDOUIKKzoxMDFDMTAwMDhGQjAwMDE4MDNFMDAwMDgyN0JEMDAyODkzODMwMDM4MjgKKzoxMDFDMjAwMDI3QkRGRkUwMjQwMjAwMzRBRkIxMDAxNEFGQjAwMDEwQjQKKzoxMDFDMzAwMEFGQkYwMDFDQUZCMjAwMTgwMDgwODAyMTEwNjIwMDY0QUEKKzoxMDFDNDAwMDAwQTA4ODIxOTIyNDAwMDQxNDgwMDA0NzhGODgwMDJDNzMKKzoxMDFDNTAwMEEzODAwMDMwOEUyNTAwMDQ4RDA3MDBDODNDMDYwMEZGREQKKzoxMDFDNjAwMDM0QzNGRkZGMDBBMzMwMjQwMEU2MTAyQjE0NDAwMDRGQzQKKzoxMDFDNzAwMEFGODYwMDQ0OTc4QTAwNEM4Rjg4MDA1MDAxNDgzODIzNzMKKzoxMDFDODAwMDEwQzAwMDM0QTc4NzAwNEM4Rjk5MDAyNDMwREYwMDAzNzgKKzoxMDFDOTAwMDAwMUYyMDIzOTMzMjAwN0MzMDkwMDAwMzAyMDY3MDIxNDUKKzoxMDFDQTAwMDAwMTJDMDgyMzMxMjAwMDEwMDEyNzg4MDAxQ0Y2ODIxMzcKKzoxMDFDQjAwMDMwRUNGRkZGMDE4RDU4MkIxMTYwMDA1RjhGODcwMDJDRTcKKzoxMDFDQzAwMDhGODkwMDI4OEY4MjAwNTQxMDQ5MDA1QzNDMDMzRjAxM0IKKzoxMDFDRDAwMDhFMjUwMDAwM0MxMTI1MDAwMEEzMzgyNDE0RjEwMDc2NjUKKzoxMDFDRTAwMDhGODQwMDNDOEY4ODAwM0M4Rjg3MDAyQzhEMEEwMDAwNzkKKzoxMDFDRjAwMEFDRUEwMDc4OEQwNjAwMTBBQ0U2MDA4ODhGODgwMDUwQjIKKzoxMDFEMDAwMDhGODYwMDQ0OTM4QjAwMzAwMTI4NjAyMTAyMDYyODIxMzEKKzoxMDFEMTAwMDAyMEIxODIxQTM4MzAwMzA5NEU5MDBBQ0FGOEMwMDI4OUIKKzoxMDFEMjAwMDM1MzAxMDAwQTRGMDAwQUMxNjQwMDA1MDI0NzgwMDA0QjgKKzoxMDFEMzAwMEFGODUwMDUwMDAwMDIwMjE4RkJGMDAxQzhGQjIwMDE4MUIKKzoxMDFENDAwMDhGQjEwMDE0OEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4NTQKKzoxMDFENTAwMDI3QkQwMDIwOEY4NDAwMjhBRjgwMDA1MDAwODg5MDIxOEMKKzoxMDFENjAwMDBBMDAxRDlFQUY5MjAwMjgyNDFGMDAwQ0EzOUYwMDU4NUMKKzoxMDFENzAwMDBFMDAxOEIzMDIwMDIwMjEyNDE5RkZGRjEwNTlGRkVFQjYKKzoxMDFEODAwMDI0MDRGRkZGOEY4ODAwMkNBMzgwMDAzMDhFMjUwMDA0RTAKKzoxMDFEOTAwMDhEMDcwMEM4M0MwNjAwRkYzNEMzRkZGRjAwQTMzMDI0QkEKKzoxMDFEQTAwMDAwRTYxMDJCMTA0MEZGQjNBRjg2MDA0NDAyMDAyMDIxNTQKKzoxMDFEQjAwMDI0MDkwMDE5QTM4OTAwNTgwRTAwMThCMzI0MTBGRkZGNEUKKzoxMDFEQzAwMDEwNTBGRkREMjQwNEZGRkYwQTAwMUQ2RThGODYwMDQ0QzMKKzoxMDFERDAwMDhGODQwMDJDOEY4NzAwM0M4Q0YyMDAzMDkwODYwMEM0RUEKKzoxMDFERTAwMDMwQzUwMDEwMTRBMDAwMTA4RjgzMDA1MDJDNjgwMDA1MkYKKzoxMDFERjAwMDE1MDAwMDI2MDAwMDAwMDA5MDhBMDBDNDI0NkJGRkZDNDAKKzoxMDFFMDAwMDMxNDkwMDEwMTUyMDAwMDgzMTY0MDBGRjhGOEQwMDU0MDcKKzoxMDFFMTAwMDhGOEMwMDI4MTFBQzAwMDQzODhGMDAwMTMxRUUwMDAxRDYKKzoxMDFFMjAwMDE1QzAwMDJEMDAwMDAwMDAwRTAwMUQxRTAwMDAwMDAwNjcKKzoxMDFFMzAwMDBBMDAxREY1MDAwMDAwMDA4Rjg5MDAyODkzOEIwMDMwRjgKKzoxMDFFNDAwMDAxMjg2MDIxMDIwNjI4MjEwMjBCMTgyMUEzODMwMDMwRkIKKzoxMDFFNTAwMDk0RTkwMEFDQUY4QzAwMjgzNTMwMTAwMEE0RjAwMEFDNDEKKzoxMDFFNjAwMDUyNDBGRkI0QUY4NTAwNTAyNDc4MDAwNEEzOTgwMDMwOUUKKzoxMDFFNzAwMDk0RUUwMEFDMjRBRjAwMDRBRjhGMDA1MDM1Q0QyMDAwQUQKKzoxMDFFODAwMEE0RUQwMEFDMEEwMDFEOUYwMDAwMjAyMThDODIwMERDMjQKKzoxMDFFOTAwMDEyNDJGRjZDMDIwMDIwMjEyNDE4MDAwNUEzOTgwMDU4NkMKKzoxMDFFQTAwMDBFMDAxOEIzMjQxMkZGRkYxNDUyRkY2NjI0MDRGRkZGMzQKKzoxMDFFQjAwMDBBMDAxREEwOEZCRjAwMUMzMTA1MDBGRjBFMDAxN0JBREQKKzoxMDFFQzAwMDAwMDAzMDIxOEY4NzAwMkM4Rjg4MDA1MDhGODkwMDI4RDgKKzoxMDFFRDAwMDBBMDAxRDkyOEY4NjAwNDQwRTAwMTdFNTAwMDAwMDAwRTYKKzoxMDFFRTAwMDBBMDAxREY1MDAwMDAwMDA5MzgzMDA0QTI3QkRGRkUwQjMKKzoxMDFFRjAwMDI0MDIwMDAyQUZCMjAwMThBRkIxMDAxNEFGQkYwMDFDNDMKKzoxMDFGMDAwMDAwODA4ODIxQUZCMDAwMTAwMDAwOTAyMTEwNjIwMDU1QzEKKzoxMDFGMTAwMDI0MDRGRkZEOTc4MzAwNEM4Rjg1MDA1MDMwNjZGRkZGM0YKKzoxMDFGMjAwMDAwQzUyMDJCMTQ4MDAwNUI5Mzg3MDAzODNDMDg4MDAwOUMKKzoxMDFGMzAwMDk1MDQwMTIwMTBFNTAwNTI4RjhBMDAyODhGODQwMDU0RjgKKzoxMDFGNDAwMDMwQTUwMEZGMEUwMDE3QkEyNDA2MDAwMThGOUYwMDVDMjkKKzoxMDFGNTAwMDNDMDU4MDAwM0MxOTQwODAyN0VEMDE3ODMxQjAwMDc4QzUKKzoxMDFGNjAwMDI0MEVGRjgwMDIxOTU4MjUzNEFGMDkwMDMxQjgwMDA3NEMKKzoxMDFGNzAwMDAxQUU2MDI0QUNBQzA4MDAwMzBGODAyMUFDQUIwODEwQUMKKzoxMDFGODAwMDAyMjAyMDIxMDIwMDI4MjEwRTAwMUQ1OEFGOTAwMDNDQTUKKzoxMDFGOTAwMDI0MDNGRkZGMTA0MzAwMzMyNDA0RkZGRjhFMEMwMDEwQzYKKzoxMDFGQTAwMDNDMDcwODAwOENFNzMxQjA5MjA2MDAwMDMxODQzRkZGMDcKKzoxMDFGQjAwMDAwODcxMDJCMTA0MDAwMjMzMENEMDAzRjhGOTgwMDVDMkQKKzoxMDFGQzAwMDAwMDQ3MTgwM0MwNDA4MDA4Qzg0MzFBODI0MDlGRjgwM0YKKzoxMDFGRDAwMDkzOTAwMDQ5MDA5ODQwMjEwMTBFMjAyMTAwODk3MDI0MkYKKzoxMDFGRTAwMDAwMEU1MTQwM0MwOTgwMDAzMDk5MDA3RjNDMEYwMDgwN0EKKzoxMDFGRjAwMDhGODgwMDJDMzUyNTA5NDAzNUUyMDAwMTAxNTkzODI1MkMKKzoxMDIwMDAwMDMwOEIwMDc4MzA4NjAwMDczQzAzMTAwMDNDMUY4MDBDQUEKKzoxMDIwMTAwMDAwQzVDMDIxMDE2MjU4MjUwMEUzNTAyNTAzM0Y3ODIxMDcKKzoxMDIwMjAwMDM2MDUwMDAxQUQyRTA4MDRBRjk4MDA0MEFEMkIwODE0MTIKKzoxMDIwMzAwMEFGOEYwMDM0QUQyRTAwMjhBRDA0MDA3NEFEMkEwODMwRjcKKzoxMDIwNDAwMEEzODUwMDQ5OTM4MzAwNEEyNDEwMDAwMzUwNzAwMDI3QTEKKzoxMDIwNTAwMDI1QTNGRkUwMjQwQzAwMDExMDZDMDAxQzI0MDYwMDIzQzMKKzoxMDIwNjAwMDAyNDAyMDIxOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0RDYKKzoxMDIwNzAwMDhGQjAwMDEwMDA4MDEwMjEwM0UwMDAwODI3QkQwMDIwNzEKKzoxMDIwODAwMDMxNDkwMDAzNTUyMEZGQUU4Rjg0MDA1NDBBMDAxRTMxRjEKKzoxMDIwOTAwMDhGOTAwMDU0OEY4NDAwNTQzMDY1MDBGRjBFMDAxN0JBRjMKKzoxMDIwQTAwMDI0MDYwMDAxOTM4QjAwMzgyNDA1MDAzNDExNjUwMDE4QzQKKzoxMDIwQjAwMDk3ODMwMDRDOEY4NTAwNTAzMDYyRkZGRjAwQTI1ODIzQTkKKzoxMDIwQzAwMEFGOEIwMDUwMEEwMDFFNjlBNzgwMDA0QzExQTYwMDM3OTQKKzoxMDIwRDAwMDAwMDAwMDAwMDIyMDIwMjEyNDExMDAwQjBFMDAxOEIzODQKKzoxMDIwRTAwMEEzOTEwMDU4MEEwMDFFNjkwMDQwOTAyMTJDNzIwMDIwMjQKKzoxMDIwRjAwMDEyNDBGRkY4MDAwM0Y4ODAzQzA3MDgwMTI0RTc4MUFDOTgKKzoxMDIxMDAwMDAzRTdDODIxOEYyRDAwMDAwMUEwMDAwODAwMDAwMDAwOTcKKzoxMDIxMTAwMDhGODUwMDUwMkNBMjAwMDU1NDQwMDAxREE3ODAwMDRDNjQKKzoxMDIxMjAwMDk3OEEwMDRDMzE0OEZGRkYwMEE4NDgyMzJEMkYwMDA1NTcKKzoxMDIxMzAwMDExRTAwMDAzMzE0NDAwRkYyNEFFRkZGQzMxQzQwMEZGNzYKKzoxMDIxNDAwMDhGOTAwMDU0OEY5ODAwMjgxMjE4MDAwNDM4OTkwMDAxQ0QKKzoxMDIxNTAwMDMzMkQwMDAxMTVBMDAwMjkwMDAwMDAwMDhGOTEwMDJDRjQKKzoxMDIxNjAwMDkyMjUwMEM0MzRBMzAwMTBBMjIzMDBDNDk3ODMwMDRDMUUKKzoxMDIxNzAwMDhGODUwMDUwOEY4NDAwMkMzMDYyRkZGRjAwQTI1ODIzMEYKKzoxMDIxODAwMEFDODAwMERDQTc4MDAwNEMwQTAwMUU2OUFGOEIwMDUwQjkKKzoxMDIxOTAwMDMwNjJGRkZGMDBBMjU4MjMwQTAwMUU2OUFGOEIwMDUwNzcKKzoxMDIxQTAwMDI0MDNGRkZGMTE4MzAwMDUwMDAwMDAwMDBFMDAxQjhCQkQKKzoxMDIxQjAwMDAyMjAyMDIxMEEwMDFFNjkwMDQwOTAyMTBFMDAxQjEyRkYKKzoxMDIxQzAwMDAyMjAyMDIxMEEwMDFFNjkwMDQwOTAyMTBFMDAxQkVGMTIKKzoxMDIxRDAwMDAyMjAyMDIxMEEwMDFFNjkwMDQwOTAyMTBFMDAxQTY5ODkKKzoxMDIxRTAwMDAyMjAyMDIxMEEwMDFFNjkwMDQwOTAyMTBFMDAxQzkxNEYKKzoxMDIxRjAwMDAyMjAyMDIxMEEwMDFFNjkwMDQwOTAyMTBFMDAxN0U1RjAKKzoxMDIyMDAwMDAwMDAwMDAwOTc4MzAwNEM4Rjg1MDA1MDMwNkNGRkZGNkEKKzoxMDIyMTAwMDAwQUMzODIzMkNGRjAwMDU1M0UwRkZBODMwNjJGRkZGMUQKKzoxMDIyMjAwMDhGODYwMDJDQTc4MDAwNENBQ0MyMDBEQzMwNjJGRkZGMjAKKzoxMDIyMzAwMDAwQTI1ODIzMEEwMDFFNjlBRjhCMDA1MDI3QkRGRkQwQjMKKzoxMDIyNDAwMEFGQjIwMDE4QUZCMDAwMTBBRkJGMDAyOEFGQjUwMDI0ODgKKzoxMDIyNTAwMEFGQjQwMDIwQUZCMzAwMUNBRkIxMDAxNDNDMEM4MDAwNDEKKzoxMDIyNjAwMDhEODgwMTI4MjQwRkZGODAzQzA3ODAwQTI1MTAwMTAwN0IKKzoxMDIyNzAwMDI1MEIwMDgwMDIwRjY4MjQzMjA1MDA3RjAxNkY3MDI0NTcKKzoxMDIyODAwMEFEOEUwMDkwMDBBNzI4MjFBRDhEMDAyNDkwQTcwMEVDMTIKKzoxMDIyOTAwMDMxNjkwMDdGM0MwQTgwMDQwMTJBMTgyMUEzODcwMDRBODMKKzoxMDIyQTAwMDkwNjYwMDdDMDA4MDkwMjFBRjgzMDAyNDMwQzIwMDAyNDEKKzoxMDIyQjAwMEFGODgwMDVDQUY4NTAwMkMwMEEwMTgyMTE0NDAwMDAyRkMKKzoxMDIyQzAwMDI0MDQwMDM0MjQwNDAwMzBBMzg0MDAzODhDNjYwMENDM0QKKzoxMDIyRDAwMDMwRjEwMEZGMjQwNDAwMDRBRjg2MDA1MDEyMjQwMDA0RjMKKzoxMDIyRTAwMEEzODAwMDU4OEU1MzAwMDQxNjYwMDAxRDNDMDg4MDAwMzcKKzoxMDIyRjAwMDkzODcwMDQ5MzBGMjAwMDExMjQwMDAwRjhGQkYwMDI4ODEKKzoxMDIzMDAwMDhDQjgwMDc0OENBNDAwNzQyNDE5RkY4MDAzMTk4ODI0RUQKKzoxMDIzMTAwMDAwMTE3MTQwMzA4RjAwN0YwMUNGNjAyNTNDMEQyMDAwRkYKKzoxMDIzMjAwMDAxOEQ1ODI1MzBGNTAwRkUzQzBBODAwMEFENEIwODMwODkKKzoxMDIzMzAwMEEzOTUwMDQ5OEZCRjAwMjg4RkI1MDAyNDhGQjQwMDIwREIKKzoxMDIzNDAwMDhGQjMwMDFDOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMzMKKzoxMDIzNTAwMDI0MDIwMDAxMjdCRDAwMzAwM0UwMDAwOEFDQTYwMENDMzkKKzoxMDIzNjAwMDhFNTkwMDA4OTUxRjAxMjA4RTQ2MDAxMDAzM0ZDMDIxQTIKKzoxMDIzNzAwMDMzMDdGRkZGMzBGNTAwMEYzMkI0MDAwMUFGODYwMDI4QUQKKzoxMDIzODAwMDE2ODAwMDNCQTM5NTAwNDgzNTA2MEMwMDAyQTYxMDIxREMKKzoxMDIzOTAwMDAwRjUxODIzQUQwMzAwODRBRjgyMDA1NDhFNDkwMDA0NzkKKzoxMDIzQTAwMDMxMjhGRkZGMTEwMDAwMkJBNzg5MDA0QzI0MTBGRjgwNkIKKzoxMDIzQjAwMDNDMTU4MDAwM0MxNDIwMDAwQTAwMUY1NzI0MTNGRkZFMjgKKzoxMDIzQzAwMDkwQUUwMEM0MDIwRTY4MjQzMUFDMDBGRjE1ODAwMDJBRDQKKzoxMDIzRDAwMDAyNDAyMDIxOTM4NDAwNDk5Nzg2MDA0QzMwOEYwMDAxRjEKKzoxMDIzRTAwMDExRTAwMDBCMDI2NDI4MjQ4Rjg5MDAyQzhEMjMwMDc0RDcKKzoxMDIzRjAwMDhEMjgwMDc0QTM4NTAwNDkwMDcwMTAyNDAwMDJDOTQwOTQKKzoxMDI0MDAwMDMxMUYwMDdGMDMzRkMwMjUwMzE0ODgyNUFFQjEwODMwN0IKKzoxMDI0MTAwMDEwQzAwMDEwOEY4NTAwMkM5MEE3MDBDNDAyMDc1ODI0MUMKKzoxMDI0MjAwMDMxNkEwMEZGMTU0MEZGRTYwMjQwMjAyMTBFMDAxRTBCMUUKKzoxMDI0MzAwMDk3OTEwMDRDMTA0MEZGRTg5Mzg0MDA0OTI0MDVGRkZENkMKKzoxMDI0NDAwMDU0NDUwMDA1OEU0MzAwMjAwMjIwMjgyMTBFMDAxNzkwREQKKzoxMDI0NTAwMDAyNDAyMDIxOEU0MzAwMjAzMDcwMDAwNDE2MDAwMDBBNDQKKzoxMDI0NjAwMDI0MTRGRkZCOEY4NTAwMkMwQTAwMUYwRDhGODYwMDUwNUYKKzoxMDI0NzAwMDBBMDAxRjM4QUY4NjAwNTQwRTAwMUEzNTAwMDAwMDAwMTUKKzoxMDI0ODAwMDBBMDAxRjQ3OTM4NDAwNDkwMDc0OTgyNDBFMDAxN0FBN0QKKzoxMDI0OTAwMEFFNTMwMDIwOEY4NTAwMkMwQTAwMUYwRDhGODYwMDUwNDAKKzoxMDI0QTAwMDI3QkRGRkQ4QUZCMzAwMUNBRkIxMDAxNEFGQkYwMDIwRjEKKzoxMDI0QjAwMEFGQjIwMDE4QUZCMDAwMTAzQzAyODAwMDhDNTIwMTQwNTcKKzoxMDI0QzAwMDhDNEIwMTQ4M0MwNDgwMDAwMDBCOEMwMjMyMjMwMEZGM0YKKzoxMDI0RDAwMDMxNzMwMEZGOEM4NTAxQjgwNEEwRkZGRTM0OTAwMTgwQTkKKzoxMDI0RTAwMEFFMTIwMDAwOEM4NzAxNDQyNDY0RkZGMDI0MDYwMDAyMzEKKzoxMDI0RjAwMDJDODMwMDEzQUUwNzAwMDRBNjExMDAwOEEyMDYwMDBCRUYKKzoxMDI1MDAwMEFFMTMwMDI0MTA2MDAwNEY4RkJGMDAyMDAwMDQ0ODgwRUQKKzoxMDI1MTAwMDNDMEEwODAxMjU0QTgyMkMwMTJBNDAyMThEMDQwMDAwMzIKKzoxMDI1MjAwMDAwODAwMDA4MDAwMDAwMDAzQzEwMDgwMDhFMTAzMUE4NTgKKzoxMDI1MzAwMDMxNzMzRkZGMDAxMzg5ODAwMjEyQzgyMTI0MDVGRjgwRjgKKzoxMDI1NDAwMDAzMzEyMDIxMjY0QzAxMDAyNjQ3MDA4MDNDMUY4MDAwREIKKzoxMDI1NTAwMDAwRTUxODI0MzE4RjAwN0YzMEU5MDA3RjMwOEEwMDdGNEEKKzoxMDI1NjAwMDNDMTg4MDBBM0MwRTgwMDQzQzBEODAwQzAwODUxMDI0MzEKKzoxMDI1NzAwMDAxODUzMDI0MDE0RDgwMjFBRkU2MDAyNDAxRjg0MDIxN0YKKzoxMDI1ODAwMEFGRTMwMDkwMDEyRTk4MjFBRkUyMDAyOEFGOTAwMDM0MTUKKzoxMDI1OTAwMEFGODgwMDJDQUY5MzAwMjQwRTAwMTg3RjAxNjA4MDIxQ0IKKzoxMDI1QTAwMDNDMDM4MDAwOEM2QjAxQjgwNTYwRkZGRThGODcwMDM0MTAKKzoxMDI1QjAwMDM0NjUwMTgwOEY4NjAwMkM5MEUzMDAwREFDQjIwMDAwRTIKKzoxMDI1QzAwMEE0QjAwMDA2MDAwMzE2MDAwMDAyRkUwMzAwMUY5MDI3QkYKKzoxMDI1RDAwMDAwMTIyN0MyMTA4MDAwN0EyNEMyMDA3ODI0MTk2MDgyNzkKKzoxMDI1RTAwMEE0QjkwMDA4QTBBMDAwMDUyNDFGMDAwMkEwQkYwMDBCOTIKKzoxMDI1RjAwMDAwMDQxQzAwOEY4QjAwMjQzQzAyMjcwMDAwNjI5MDI1MDEKKzoxMDI2MDAwMEFDQjIwMDEwQUNBMDAwMTRBQ0EwMDAyNEFDQTAwMDI4MTgKKzoxMDI2MTAwMEFDQTAwMDJDOEQ3MzAwMzgyNDEwRkY4MEFDQjMwMDE4RTAKKzoxMDI2MjAwMDkwRTQwMDBEMDIwNDg4MjQzMjI1MDBGRjEwQTAwMDA1NkMKKzoxMDI2MzAwMDhGQkYwMDIwOTBFQzAwMEQzMTg4MDA3RkEwRTgwMDBERDYKKzoxMDI2NDAwMDhGQkYwMDIwOEZCMzAwMUM4RkIyMDAxODhGQjEwMDE0MTEKKzoxMDI2NTAwMDhGQjAwMDEwM0MwRDEwMDAzQzBBODAwMDI3QkQwMDI4MDAKKzoxMDI2NjAwMDAzRTAwMDA4QUQ0RDAxQjgyNjVGMDEwMDI0MDVGRjgwOUUKKzoxMDI2NzAwMDMzRjgwMDdGM0MwNjgwMDAwM0U1NzgyNDNDMTk4MDBBOEIKKzoxMDI2ODAwMDAzMTkyMDIxQUNDRjAwMjQ5MDhFMDBDNDAwQUU2ODI0MzIKKzoxMDI2OTAwMDMxQUMwMEZGMTE4MEZGRUFBRjg0MDAyQzI0OEUwMDc4NUIKKzoxMDI2QTAwMDk1Q0QwMDEyM0MwQzA4MDA4RDhDMzFBODMxQUIzRkZGNUEKKzoxMDI2QjAwMDAxOTI0ODIxMDAwQjUxODAwMTJBNDAyMTAxMDUyMDI0NkMKKzoxMDI2QzAwMEFDQzQwMDI4MzEwNzAwN0YzQzA2ODAwQzAwRTYyMDIxQzYKKzoxMDI2RDAwMDkwODMwMDBEMDBBMzEwMjQzMDQ1MDBGRjEwQTBGRkQ4MDgKKzoxMDI2RTAwMEFGODQwMDM0OTA5ODAwMEQzMzBGMDAxMDE1RTBGRkQ1MzMKKzoxMDI2RjAwMDhGQkYwMDIwMEUwMDE4N0YwMDAwMDAwMDNDMDM4MDAwMDgKKzoxMDI3MDAwMDhDNzkwMUI4MDcyMEZGRkUwMDAwMDAwMEFFMTIwMDAwMjcKKzoxMDI3MTAwMDhDNzIwMTQ0QUUxMjAwMDRBNjExMDAwODI0MTEwMDAyQkMKKzoxMDI3MjAwMEEyMTEwMDBCQUUxMzAwMjQwQTAwMUZFMjhGQkYwMDIwOEQKKzoxMDI3MzAwMDNDMTI2MDAwOEU0NTJDMDgzQzAzRjAwMzM0NjJGRkZGMUUKKzoxMDI3NDAwMDAwQTJGODI0QUU1RjJDMDg4RTU4MkMwODNDMTkwMUIwNkEKKzoxMDI3NTAwMDAzMTk5ODI1QUU1MzJDMDgwQTAwMUZFMjhGQkYwMDIwRjIKKzoxMDI3NjAwMDI2NEQwMTAwMzFBRjAwN0YzQzEwODAwQTI0MEVGRjgwMEYKKzoxMDI3NzAwMDAxRjAyODIxMDFBRTYwMjQzQzBCODAwMEFENkMwMDI0RTgKKzoxMDI3ODAwMDE2NjBGRkFGQUY4NTAwMkMyNDExMDAwM0EwQjEwMEVDNTAKKzoxMDI3OTAwMDBBMDAxRkUyOEZCRjAwMjAyNjQ4MDEwMDMxMEEwMDdGOTcKKzoxMDI3QTAwMDNDMEI4MDBBMjQwOUZGODAwMTRCMzAyMTAxMDkyMDI0QzEKKzoxMDI3QjAwMDNDMDc4MDAwQUNFNDAwMjQwQTAwMUZFMUFGODYwMDJDMzcKKzoxMDI3QzAwMDk0NEEwMDEyMzIwODNGRkYzMTRDM0ZGRjE1ODhGRjg0QzYKKzoxMDI3RDAwMDI0MTk2MDgyOTBDRjAwQzQyNDBFRkY4MDAxQ0Y0ODI0Q0EKKzoxMDI3RTAwMDMxMkQwMEZGMTFBMEZGN0UwMDAwMDAwMDI0MDcwMDA0MkYKKzoxMDI3RjAwMEEwQzcwMEVDOEY4NzAwMzQyNDE4NjA4NDI0MDYwMDBERTUKKzoxMDI4MDAwMEE0QjgwMDA4QTBBNjAwMDUwQTAwMUZDQzI0MUYwMDAyREYKKzoxMDI4MTAwMDA4MDAzMzBDMDgwMDMzMEMwODAwMzNFODA4MDAzM0JDMTAKKzoxMDI4MjAwMDA4MDAzM0EwMDgwMDMyRjAwODAwMzJGMDA4MDAzMkYwNEYKKzoxMDI4MzAwMDA4MDAzMzE0ODAwODAxMDA4MDA4MDA4MDgwMDgwMDAwMzAKKzoxMDI4NDAwMDVGODY1NDM3RTRBQzYyQ0M1MDEwM0E0NTM2NjIxOTg1NDUKKzoxMDI4NTAwMEJGMTRDMEU4MUJDMjdBMUU4NEY0QjU1NjA5NEVBNkZFMEEKKzoxMDI4NjAwMDdEREEwMUU3QzA0RDc0ODEwODAwN0FFNDA4MDA3QjMwMEUKKzoxMDI4NzAwMDA4MDA3QUYwMDgwMDdBMTgwODAwN0FGMDA4MDA3QjIwMzcKKzoxMDI4ODAwMDA4MDA3QUYwMDgwMDdBMTgwODAwN0ExODA4MDA3QTE4MDgKKzoxMDI4OTAwMDA4MDA3QTE4MDgwMDdBMTgwODAwN0ExODA4MDA3QTE4RDAKKzoxMDI4QTAwMDA4MDA3QTE4MDgwMDdBMTgwODAwN0ExODA4MDA3QjEwQzcKKzoxMDI4QjAwMDA4MDA3QjAwMDgwMDdBMTgwODAwN0ExODA4MDA3QTE4QzcKKzoxMDI4QzAwMDA4MDA3QTE4MDgwMDdBMTgwODAwN0ExODA4MDA3QTE4QTAKKzoxMDI4RDAwMDA4MDA3QTE4MDgwMDdBMTgwODAwN0ExODA4MDA3QTE4OTAKKzoxMDI4RTAwMDA4MDA3QTE4MDgwMDdCMDAwODAwODBEQzA4MDA3Rjg0NUMKKzoxMDI4RjAwMDA4MDA4MEE0MDgwMDdGODQwODAwODA3NDA4MDA3RTZDQjMKKzoxMDI5MDAwMDA4MDA3Rjg0MDgwMDdGODQwODAwN0Y4NDA4MDA3Rjg0OUIKKzoxMDI5MTAwMDA4MDA3Rjg0MDgwMDdGODQwODAwN0Y4NDA4MDA3Rjg0OEIKKzoxMDI5MjAwMDA4MDA3Rjg0MDgwMDdGODQwODAwN0Y4NDA4MDA3Rjg0N0IKKzowNDI5MzAwMDA4MDA3RkFDNzAKKzowQzI5MzQwMDBBMDAwMTIyMDAwMDAwMDAwMDAwMDAwMDZBCis6MTAyOTQwMDAwMDAwMDAwRDc0NzA2MTM1MkUzMDJFMzA2QTM5MDAwMEExCis6MTAyOTUwMDAwNTAwMDAwMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDcxCis6MTAyOTYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDY3Cis6MTAyOTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDU3Cis6MTAyOTgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ3Cis6MTAyOTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3Cis6MTAyOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI3Cis6MTAyOUIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDE3Cis6MTAyOUMwMDAxMDAwMDAwMzAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwRERBCis6MTAyOUQwMDAzQzAyMDgwMDI0NDIxQzIwM0MwMzA4MDAyNDYzMUZBMDgyCis6MTAyOUUwMDBBQzQwMDAwMDAwNDMyMDJCMTQ4MEZGRkQyNDQyMDAwNDczCis6MTAyOUYwMDAzQzFEMDgwMDM3QkQyRkZDMDNBMEYwMjEzQzEwMDgwMDRGCis6MTAyQTAwMDAyNjEwMDQ4ODNDMUMwODAwMjc5QzFDMjAwRTAwMDJFMkIzCis6MTAyQTEwMDAwMDAwMDAwMDAwMDAwMDBEMjQwMkZGODAyN0JERkZFMDQxCis6MTAyQTIwMDAwMDgyMTAyNEFGQjAwMDEwQUY0MjAwMjBBRkJGMDAxOEVBCis6MTAyQTMwMDBBRkIxMDAxNDkzNjUwMDA0MzA4NDAwN0YwMzQ0MTgyMTczCis6MTAyQTQwMDAzQzAyMDAwODAwNjIxODIxMzBBNTAwMjAwMzYwODAyMUFDCis6MTAyQTUwMDAzQzA4MDExMTI3N0IwMDA4MTRBMDAwMDIyNDY2MDA1Q0RBCis6MTAyQTYwMDAyNDY2MDA1ODkyMDIwMDA0OTc0MzAxMDQ5MjA0MDAwNDczCis6MTAyQTcwMDAzMDQ3MDAwRjMwNjNGRkZGMzA4NDAwNDAwMDY3MjgyMzk5Cis6MTAyQTgwMDAxMDgwMDAwOTAwMDA0ODIxOTIwMjAwMDUzMDQyMDAwNDM1Cis6MTAyQTkwMDAxMDQwMDAwNTAwMDAwMDAwMTBBMDAwMDMwMDAwMDAwMDJFCis6MTAyQUEwMDAyNEE1RkZGQzI0MDkwMDA0OTIwMjAwMDUzMDQyMDAwNDIyCis6MTAyQUIwMDAxMDQwMDAxMjAwMDAwMDAwMTBBMDAwMTAwMDAwMDAwMEY0Cis6MTAyQUMwMDA5NjAyMDAwMjAwQTcyMDIxMDEwNDQwMjUyNDQyRkZGRUI3Cis6MTAyQUQwMDBBNzQyMTAxNjkyMDMwMDA0MjQwMkZGODAwMDQzMTAyNDMyCis6MTAyQUUwMDAzMDQyMDBGRjEwNDAwMDAzM0MwMjA0MDAwQTAwMDE3MjYzCis6MTAyQUYwMDAwMTAyNDAyNThDQzIwMDAwQUY0MjEwMTg4RjQyMDE3OEJECis6MTAyQjAwMDAwNDQwRkZGRTI0MDIwMDBBQTc0MjAxNDA5NjAyMDAwMjkwCis6MTAyQjEwMDAyNDA0MDAwOTMwNDIwMDA3MDAwMjEwMjMzMDQyMDAwNzVECis6MTAyQjIwMDBBNzQyMDE0Mjk2MDIwMDAyMjQ0MkZGRkVBNzQyMDE0NDRFCis6MTAyQjMwMDBBNzQwMDE0Njk3NDIwMTA0QTc0MjAxNDg4RjQyMDEwODdECis6MTAyQjQwMDAzMDQyMDAyMDUwNDAwMDAxMjQwNDAwMDE5MjAyMDAwNEExCis6MTAyQjUwMDAzMDQyMDAxMDE0NDAwMDAyMzQ4MzAwMTAwMDgwMTgyMTFECis6MTAyQjYwMDBBNzQzMDE0QTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMwCis6MTAyQjcwMDAwMDAwMDAwMEFGNDgxMDAwMDAwMDAwMDAwMDAwMDAwMDRFCis6MTAyQjgwMDAwMDAwMDAwMDAwMDAwMDAwOEY0MjEwMDAwNDQxRkZGRTIyCis6MTAyQjkwMDAzMTAyRkZGRjEwNDAwMDA3MDAwMDAwMDA5MjAyMDAwNDE1Cis6MTAyQkEwMDAzMDQyMDA0MDE0NDAwMDAzMDAwMDAwMDA4RjQyMTAxODIzCis6MTAyQkIwMDBBQ0MyMDAwMDk2MDIwMDA2MzA0MkZGRkYyNDQyMDAwMjMxCis6MTAyQkMwMDAwMDAyMTA0MzAwMDIxMDQwMDM2Mjg4MjE5NjIyMDAwMDk4Cis6MTAyQkQwMDAxMTIwMDAwRDMwNDRGRkZGMDBBNzEwMjE4RjgzMDAzODIzCis6MTAyQkUwMDA4RjQ1MTAxQzAwMDIxMDgyMDAwMjEwODAwMDQzMTAyMTRCCis6MTAyQkYwMDBBQzQ1MDAwMDMwQTZGRkZGMEUwMDAyRDEwMDA1MkMwMkZDCis6MTAyQzAwMDAwMDQwMjAyMUE2MjIwMDAwOTIwMzAwMDQyNDAyRkY4MDNECis6MTAyQzEwMDAwMDQzMTAyNDMwNDIwMEZGMTA0MDAwMUYwMDAwMDAwMDVECis6MTAyQzIwMDA5MjAyMDAwNTMwNDIwMDAyMTA0MDAwMUIwMDAwMDAwMDJDCis6MTAyQzMwMDA5NzQyMTAwQzI0NDJGRkZFQTc0MjEwMTYwMDAwMDAwMDJECis6MTAyQzQwMDAzQzAyMDQwMDM0NDIwMDMwQUY0MjEwMDAwMDAwMDAwMDlCCis6MTAyQzUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4RjQyMTAwMDkzCis6MTAyQzYwMDAwNDQxRkZGRTAwMDAwMDAwOTc0MjEwMEM4RjQ1MTAxQzJECis6MTAyQzcwMDAzMDQyRkZGRjI0NDIwMDMwMDAwMjEwODIwMDAyMTA4MDI4Cis6MTAyQzgwMDAwMDVCMTAyMUFDNDUwMDAwMzBBNkZGRkYwRTAwMDJEMTEyCis6MTAyQzkwMDAwMDA1MkMwMkE2MjIwMDAwOTYwNDAwMDIyNDg0MDAwOEVECis6MTAyQ0EwMDAwRTAwMDFFNzMwODRGRkZGOTc0NDAxMDQwRTAwMDFGNTk4Cis6MTAyQ0IwMDAzMDg0RkZGRjhGQkYwMDE4OEZCMTAwMTQ4RkIwMDAxMDU5Cis6MTAyQ0MwMDAzQzAyMTAwMDI3QkQwMDIwMDNFMDAwMDhBRjQyMDE3ODVECis6MTAyQ0QwMDAzMDg0RkZGRjMwODIwMDA3OEY4NTAwMjQxMDQwMDAwMkZGCis6MTAyQ0UwMDAyNDgzMDAwNzMwNjRGRkY4MDBBNDEwMjEzMDQyMUZGRjQ2Cis6MTAyQ0YwMDAwMzQyMTgyMTI0N0I0MDAwQUY4NTAwMjhBRjgyMDAyNEM2Cis6MTAyRDAwMDAwM0UwMDAwOEFGNDIwMDg0MzA4NEZGRkYzMDgyMDAwRkYwCis6MTAyRDEwMDA4Rjg1MDAyQzhGODYwMDM0MTA0MDAwMDIyNDgzMDAwRjIyCis6MTAyRDIwMDAzMDY0RkZGMDAwQTQxMDIxMDA0NjE4MkJBRjg1MDAzMDVFCis6MTAyRDMwMDAwMDQ2MjAyMzE0NjAwMDAyQUY4MjAwMkNBRjg0MDAyQ0Q4Cis6MTAyRDQwMDA4RjgyMDAyQzM0MDQ4MDAwMDM0MjE4MjEwMDY0MTgyMTczCis6MTAyRDUwMDBBRjgzMDAzODAzRTAwMDA4QUY0MjAwODA4RjgyMDAxNDg4Cis6MTAyRDYwMDAxMDQwMDAwODhGODIwMDA0OEY4MkZGQ0MxNDQwMDAwNUMxCis6MTAyRDcwMDA4RjgyMDAwNDNDMDJGRkJGMzQ0MkZGRkYwMDgyMjAyNDA4Cis6MTAyRDgwMDA4RjgyMDAwNDMwNDMwMDA2MjQwMjAwMDIxMDYyMDAwRjBDCis6MTAyRDkwMDAzQzAyMDEwMTJDNjIwMDAzNTA0MDAwMDUyNDAyMDAwNEEzCis6MTAyREEwMDAxMDYwMDAwRjNDMDIwMDAxMEEwMDAyMkUwMDAwMDAwMDJCCis6MTAyREIwMDAxMDYyMDAwNTI0MDIwMDA2MTQ2MjAwMEMzQzAyMDExMTlFCis6MTAyREMwMDAwQTAwMDIyNzAwODIxMDI1M0MwMjAwMTEwMDgyMTAyNTEzCis6MTAyREQwMDBBRjQyMTAwMDI0MDIwMDAxMEEwMDAyMkVBRjgyMDAwQzU0Cis6MTAyREUwMDAwMDgyMTAyNUFGNDIxMDAwQUY4MDAwMEMwMDAwMDAwMEYwCis6MTAyREYwMDAwMDAwMDAwMDAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMEU4Cis6MTAyRTAwMDA4RjgyMDAwQzEwNDAwMDA0MDAwMDAwMDA4RjQyMTAwMDcwCis6MTAyRTEwMDAwNDQxRkZGRTAwMDAwMDAwMDNFMDAwMDgwMDAwMDAwMDg1Cis6MTAyRTIwMDA4RjgyMDAxMDI0NDNGODAwMDAwMjI5QzIyNEEyRkZGMDgwCis6MTAyRTMwMDAyQzYzMDMwMTEwNjAwMDAzMDAwMjEwNDIwQTAwMDI1NUQ3Cis6MTAyRTQwMDBBQzgyMDAwMDhGODMwMDE4MDBBMzEwMkIxNDQwMDAwQkVECis6MTAyRTUwMDAwMDAwMzgyMTAwQTMxMDIzMjQ0NjAwMDE4RjgyMDAxQ0FCCis6MTAyRTYwMDAwMDYyMTAyMTI0NDJGRkZGMDA0NTEwMkI1NDQwMDAwNDUzCis6MTAyRTcwMDAyNDAyRkZGRjBBMDAwMjU1QUM4NjAwMDAyNDAyRkZGRjc3Cis6MTAyRTgwMDAwQTAwMDI1QUFDODIwMDAwOEM4MjAwMDAzQzAzMDgwMDU5Cis6MTAyRTkwMDAyNDYzMUM1QzAwMDIxMTQwMDA0MzM4MjEwM0UwMDAwODU5Cis6MTAyRUEwMDAwMEUwMTAyMTNDMDkwODAwOEQyOTFEODAwMDA0NTE0MERDCis6MTAyRUIwMDAzQzE5MDgwMDI3MzkxQzVDMDBDMDc4MjEwMDgwNjAyMTgzCis6MTAyRUMwMDAyNDBFRkZGRjAwMDAzODIxMDE1OTQwMjExMTIwMDAzNjU3Cis6MTAyRUQwMDAwMDAwMzAyMTNDMTgwODAwMjcxODFEOTgzQzBEMDgwMDAwCis6MTAyRUUwMDAyNUFEMUQ5QzAwMEY1ODJCMDAwNjExODAwMDQ2MTAyMUI3Cis6MTAyRUYwMDAwMDAyMThDMDAwNzgxMDIxOEM0MjAwMDAxNTgyMDAyMENBCis6MTAyRjAwMDAwMDZEMjAyMThDQTIwMDAwNTQ0MDAwMDk4RDAyMDAxOEExCis6MTAyRjEwMDAzQzAyMDgwMDhDNDIxRDg0MjQ0MjAwMDFBQzgyMDAwMDY3Cis6MTAyRjIwMDAzQzAxMDgwMEFDMjIxRDg0MEEwMDAyQ0YwMDAwMjAyMUQxCis6MTAyRjMwMDA4RjQ3MDAyMDAwMDAzMDIxMDAwMjExQzAxMTYwMDA0QUJDCis6MTAyRjQwMDBBRjQyMDAyMDhEMDgwMDFDM0MwOTAwMDg4Q0EzMDAwMDQzCis6MTAyRjUwMDAwMDY2MTgyMTAwMDMxODgwMDA3QTEwMjEwMDQ5MTAyMTEyCis6MTAyRjYwMDA4QzQ0MDAwMDI0QzYwMDAxMDA2ODE4MjEwMENGMTAyQkZCCis6MTAyRjcwMDAxNDQwRkZGNkFDNjQwMDAwMEEwMDAyQ0QwMDAwMDAwMDFGCis6MTAyRjgwMDA4Qzg0MDAwMDAwOEUxMDJCNTA0MDAwMDQyNEM2MDAwMUU5Cis6MTAyRjkwMDAwMDgwNzAyMTAwQzAzODIxMjRDNjAwMDEwMEM5MTAyQjE4Cis6MTAyRkEwMDAxNDQwRkZEMjAwMDYxMTgwMjQwMjAwMDFBQ0EyMDAwMEYwCis6MTAyRkIwMDAzQzAyMDgwMDhDNDIxRDdDM0MwMzA4MDA4QzYzMUQ4MDkxCis6MTAyRkMwMDAwMDQzMTAyQjE0NDAwMDJBMjQwNEZGRkUwMTU5MTAyMTU1Cis6MTAyRkQwMDA4QzQyMDAxODEwNDAwMDI2MjQwNEZGRkYwMDA3MjE4MEM3Cis6MTAyRkUwMDAzQzA1MDgwMDhDQTUxRDg0MDA4NzIwMjE4RDA2MDAxODUzCis6MTAyRkYwMDAwMDA0MjBDMDNDMDIwODAwMjQ0MjFEOTgwMDgyMTAyMUQ5Cis6MTAzMDAwMDAzQzAzMDgwMDI0NjMxRDlDQUM0QzAwMDAyNEE1MDAwMTc3Cis6MTAzMDEwMDAwMDgzMTgyMTNDMDIwODAwMjQ0MjFEQTBBQzY1MDAwMDdBCis6MTAzMDIwMDAwMDA2MzFDMDNDMDEwODAwQUMyNTFEODQwMDgyMjAyMTJGCis6MTAzMDMwMDA4RjQ3MDAyMEFEMDQwMDFDQUY0NjAwMjAxMUUwMDAwQUJECis6MTAzMDQwMDAwMDAwMzAyMTNDMDIwMDA4MDM0MjI4MjE4Q0EyMDAwMDJECis6MTAzMDUwMDAyNEM2MDAwMTAwQ0YxODJCQUM4MjAwMDAyNEE1MDAwNDc4Cis6MTAzMDYwMDAxNDYwRkZGQTI0ODQwMDA0QUY0NzAwMjAwMDAwMjAyMUYwCis6MTAzMDcwMDAwM0UwMDAwODAwODAxMDIxMzA4NEZGRkYzMEM2RkZGRjBFCis6MTAzMDgwMDAwMDA1MkMwMDAwQTYyODI1Mzg4MkZGRkYwMDQ1MTAyMUVFCis6MTAzMDkwMDAwMDQ1MjgyQjAwNDUxMDIxMDAwMjFDMDIzMDQyRkZGRjkyCis6MTAzMEEwMDAwMDQzMTAyMTAwMDIxQzAyMzA0MkZGRkYwMDQzMTAyMUE4Cis6MTAzMEIwMDAzODQyRkZGRjAzRTAwMDA4MzA0MkZGRkYyN0JERkZDODkyCis6MTAzMEMwMDBBRkJGMDAzMEFGQjMwMDJDQUZCMjAwMjhBRkIxMDAyNEM3Cis6MTAzMEQwMDBBRkIwMDAyMDNDMDQ2MDA4OEM4MjUwMDAyNDAzRkY3RkM2Cis6MTAzMEUwMDAzQzA2NjAwMDAwNDMxMDI0MzQ0MjM4MENBQzgyNTAwMDhGCis6MTAzMEYwMDA4Q0MyNEMxQzNDMUE4MDAwMDAwMjE2MDIzMDQyMDAwRkE5Cis6MTAzMTAwMDAxMDQwMDAwN0FGODIwMDFDOENDMzRDMUMzQzAyMDAxRjA3Cis6MTAzMTEwMDAzNDQyRkMwMDAwNjIxODI0MDAwMzE5QzJBRjgzMDAxODc3Cis6MTAzMTIwMDA4RjQyMDAwODI3NUI0MDAwMzQ0MjAwMDFBRjQyMDAwODk0Cis6MTAzMTMwMDBBRjgwMDAyNDNDMDI2MDFDQUY0MDAwODBBRjQwMDA4NEEwCis6MTAzMTQwMDA4QzQ1MDAwODhDQzMwODA4MzQwMjgwMDAwMzQyMjAyMTBCCis6MTAzMTUwMDAyNDAyRkZGMDAwNjIxODI0M0MwMjAwODAzQzAxMDgwMEI5Cis6MTAzMTYwMDBBQzIyMDQyMDNDMDI1NzA5QUY4NDAwMzgxNDYyMDAwNEVBCis6MTAzMTcwMDBBRjg1MDAzNDI0MDIwMDAxMEEwMDAzMTRBRjgyMDAxNDVBCis6MTAzMTgwMDBBRjgwMDAxNDI0MDMwMDNEMjQwMjAwMDQzQzAxMDgwMDI5Cis6MTAzMTkwMDBBQzIyMUQ5NDNDMDEwODAwQUMyMzFEOTAzQzAxMDgwMEFBCis6MTAzMUEwMDBBQzIzMUQ4QzNDMDEwODAwQUMyMzFEODgzQzEzMDgwMDk3Cis6MTAzMUIwMDAyNjczMUM1QzI0MDQwMDA0M0MwMjA4MDAyNDQyMUM3NDk2Cis6MTAzMUMwMDAyNDAzMDAwODI0NjNGRkZGQUM0MDAwMDRBQzQwMDAwMDZGCis6MTAzMUQwMDAwNDYxRkZGQzI0NDIwMDIwMDAwNDEwQzAwMDQ0MTAyMUMwCis6MTAzMUUwMDAyNDQyMDAzRDNDMDEwODAwQUMyMjFEOTAyNDAyMDAwMTU1Cis6MTAzMUYwMDAzQzAxMDgwMEFDMjIxRDdDMjQwMkZGRkYzQzAxMDgwMEJBCis6MTAzMjAwMDBBQzIyMUQ5ODNDMDEwODAwQUMyMDFEODQ4RjQyMDAwMEI4Cis6MTAzMjEwMDAzODQyMDAwMTMwNDIwMDAxMTQ0MEZGRkM4RjgyMDAxNDRDCis6MTAzMjIwMDAxMDQwMDAxNjAwMDAwMDAwOTc0MjAxMDQxMDQwMDAwNTA1Cis6MTAzMjMwMDA4RjgzMDAwMDE0NjAwMDA3MjQ2MkZGRkYwQTAwMDM0QjI1Cis6MTAzMjQwMDAyQzYyMDAwQTJDNjIwMDEwNTA0MDAwMDQ4RjgzMDAwMEEyCis6MTAzMjUwMDAyNDYyMDAwMUFGODIwMDAwOEY4MzAwMDAyQzYyMDAwQTBDCis6MTAzMjYwMDAxNDQwMDAwMzJDNjIwMDA3MEEwMDAzNTJBRjgwRkZDQzE5Cis6MTAzMjcwMDAxMDQwMDAwMjI0MDIwMDAxQUY4MkZGQ0M4RjQzMDEwOEZFCis6MTAzMjgwMDA4RjQ0MDEwMDMwNjIyMDAwQUY4MzAwMDQxMDQwMDAwODJBCis6MTAzMjkwMDBBRjg0MDAxMDNDMDIwODAwOEM0MjA0MkMyNDQyMDAwMTQwCis6MTAzMkEwMDAzQzAxMDgwMEFDMjIwNDJDMEEwMDA2RDczQzAyNDAwMDc2Cis6MTAzMkIwMDAzMDY1MDIwMDE0QTAwMDAzMjQwMjBGMDAxNDgyMDMwOUU5Cis6MTAzMkMwMDAyNDAyMEQwMDk3NDIwMTA0MTA0MDAzNzEzQzAyNDAwMEFCCis6MTAzMkQwMDAzMDYyNDAwMDE0NDAwMEFEOEY4MjAwMzg4QzQ0MDAwOEZBCis6MTAzMkUwMDA4RjQyMDE3ODA0NDBGRkZFMjQwMjA4MDBBRjQyMDE3OEJCCis6MTAzMkYwMDAyNDAyMDAwOEE3NDIwMTQwQTc0MDAxNDI5NzQyMDEwNDZFCis6MTAzMzAwMDA4Rjg0MDAwNDMwNTFGRkZGMzA4MjAwMDExMDQwMDAwNzFECis6MTAzMzEwMDAwMjIwODAyMTI2MjNGRkZFMjQwMjAwMDIzMDcwRkZGRkRFCis6MTAzMzIwMDBBNzQyMDE0NjBBMDAwMzdGQTc0MzAxNDhBNzQwMDE0NjgwCis6MTAzMzMwMDAzQzAyMDgwMDhDNDIwNDNDMTQ0MDAwMEQ4RjgzMDAxMEI2Cis6MTAzMzQwMDAzMDgyMDAyMDE0NDAwMDAyMjQwMzAwMDkyNDAzMDAwMUZECis6MTAzMzUwMDAwMDYwMjAyMThGODMwMDEwMjQwMjA5MDA1MDYyMDAwMUM4Cis6MTAzMzYwMDAzNDg0MDAwNEE3NDQwMTRBMEEwMDAzOUEwMDAwMDAwMEM0Cis6MTAzMzcwMDAyNDAyMEYwMDE0NjIwMDA1MzA4MjAwMjAxNDQwMDAwNjcxCis6MTAzMzgwMDAyNDAzMDAwRDBBMDAwMzk5MjQwMzAwMDUxNDQwMDAwMkUxCis6MTAzMzkwMDAyNDAzMDAwOTI0MDMwMDAxQTc0MzAxNEEzQzAyMDgwMDVBCis6MTAzM0EwMDA4QzQyMDQyMDNDMDQwMDQ4MEUwMDAyMEEwMDQ0MjAyNTAwCis6MTAzM0IwMDAwRTAwMDIzMzAwMDAwMDAwOEY4MjAwMEMxMDQwMDAzRTFGCis6MTAzM0MwMDAwMDAwMDAwMDhGNDIxMDAwM0MwMzAwMjAwMDQzMTAyNDQ2Cis6MTAzM0QwMDAxMDQwMDAzOThGODIwMDA0MzA0MjAwMDIxMDQwMDAzNjU1Cis6MTAzM0UwMDAwMDAwMDAwMDk3NDIxMDE0MTQ0MDAwMzMwMDAwMDAwMDU5Cis6MTAzM0YwMDA5NzQyMTAwODhGODgwMDM4MzA0MkZGRkYyNDQyMDAwNkIxCis6MTAzNDAwMDAwMDAyMTg4MjAwMDMzODgwMDBFODMwMjEzMDQzMDAwMUI4Cis6MTAzNDEwMDA4Q0M0MDAwMDEwNjAwMDA0MzA0MjAwMDMwMDAwMDAwRDY2Cis6MTAzNDIwMDAwQTAwMDNEQjAwRTgxMDIxNTQ0MDAwMTAzMDg0RkZGRjQ1Cis6MTAzNDMwMDAzQzA1RkZGRjAwODUyMDI0MDA4NTE4MjYwMDAzMTgyQjdCCis6MTAzNDQwMDAwMDA0MTAyQjAwNDMxMDI0MTA0MDAwMDUwMDAwMDAwMDcxCis6MTAzNDUwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDIxQzFECis6MTAzNDYwMDA4Q0MyMDAwMDBBMDAwM0RBMDA0NTIwMjUzODgzRkZGRkU0Cis6MTAzNDcwMDAwMDAzMTgyQjAwMDQxMDJCMDA0MzEwMjQxMDQwMDAwNUZCCis6MTAzNDgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDJGCis6MTAzNDkwMDAyNDAwMDIyNThDQzIwMDAwMzQ0NEZGRkYwMEU4MTAyMTA0Cis6MTAzNEEwMDBBQzQ0MDAwMDNDMDIwODAwOEM0MjA0MzAyNDQyMDAwMTdECis6MTAzNEIwMDAzQzAxMDgwMEFDMjIwNDMwOEY2MjAwMDA4Rjg0MDAzODg5Cis6MTAzNEMwMDBBRjgyMDAwODhDODMwMDAwMzQwMkZGRkYxNDYyMDAwRkZCCis6MTAzNEQwMDAwMDAwMTAyMTNDMDUwODAwOENBNTA0NTQzQzA0MDgwMEExCis6MTAzNEUwMDA4Qzg0MDQ1MDAwQjAyODIxMDBCMDMwMkIwMDgyMjAyMUIxCis6MTAzNEYwMDAwMDg2MjAyMTNDMDEwODAwQUMyNTA0NTQzQzAxMDgwMDUyCis6MTAzNTAwMDBBQzI0MDQ1MDBBMDAwNkNEMjQwNDAwMDg4QzgyMDAwMDdDCis6MTAzNTEwMDAzMDQyMDEwMDEwNDAwMDBGMDAwMDEwMjEzQzA1MDgwMDVGCis6MTAzNTIwMDA4Q0E1MDQ0QzNDMDQwODAwOEM4NDA0NDgwMEIwMjgyMTdECis6MTAzNTMwMDAwMEIwMzAyQjAwODIyMDIxMDA4NjIwMjEzQzAxMDgwMEIxCis6MTAzNTQwMDBBQzI1MDQ0QzNDMDEwODAwQUMyNDA0NDgwQTAwMDZDRDFDCis6MTAzNTUwMDAyNDA0MDAwODNDMDUwODAwOENBNTA0NDQzQzA0MDgwMDMxCis6MTAzNTYwMDA4Qzg0MDQ0MDAwQjAyODIxMDBCMDMwMkIwMDgyMjAyMTQwCis6MTAzNTcwMDAwMDg2MjAyMTNDMDEwODAwQUMyNTA0NDQzQzAxMDgwMEUxCis6MTAzNTgwMDBBQzI0MDQ0MDBBMDAwNkNEMjQwNDAwMDg4RjYyMDAwODIxCis6MTAzNTkwMDA4RjYyMDAwMDAwMDIxNjAyMzA0MzAwRjAyNDAyMDAzMDY3Cis6MTAzNUEwMDAxMDYyMDAwNTI0MDIwMDQwMTA2MjAxNkI4RjgyMDAyMDJGCis6MTAzNUIwMDAwQTAwMDZENTI0NDIwMDAxMTRBMDAwMDUwMDAwMDAwMDA2Cis6MTAzNUMwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDI1MDc4Cis6MTAzNUQwMDA4RjQyMDE3ODA0NDBGRkZFMDAwMDAwMDAwRTAwMDIzQjE1Cis6MTAzNUUwMDAyN0E0MDAxMDE0NDAwMDA1MDA0MDgwMjEwMDAwMDAwMEM2Cis6MTAzNUYwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAyNTc4RTAyMDAwMEIxCis6MTAzNjAwMDAxMDQwMDAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDU4Cis6MTAzNjEwMDAwMDAwMDAwMDI0MDAwMjVBOEY2MjAwMEMwNDQzMDAwM0UzCis6MTAzNjIwMDAyNDAyMDAwMTBBMDAwNTVEQUUwMDAwMDBBRTAyMDAwMEE5Cis6MTAzNjMwMDA4RjgyMDAzODhDNDUwMDA4QTIwMDAwMDc4RjY1MDAwQ0JGCis6MTAzNjQwMDA4RjY0MDAwNDMwQTNGRkZGMDAwNDI0MDIwMDg1MjAyM0MwCis6MTAzNjUwMDAzMDgyMDBGRjAwNDMxMDIxMjQ0MjAwMDUwMDAyODg4M0NECis6MTAzNjYwMDAyRTIyMDA4MUE2MDUwMDBBMTQ0MDAwMDVBMjA0MDAwNEQxCis6MTAzNjcwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDI3MkE1Cis6MTAzNjgwMDAzQzA3MDgwMDhDRTcxRDgwOEZBODAwMTAyNDA5RkZGRjZECis6MTAzNjkwMDAwMDAwNTAyMTEwRTAwMDEzMDAwMDMwMjEzQzBDMDgwMDE1Cis6MTAzNkEwMDAyNThDMUQ5QzAxODAyODIxMDAwMDE4MjE4Q0EyRkZGQzg0Cis6MTAzNkIwMDA1MTAyMDAyRjAwNkMxODIxOENBNDAwMDAyNDYzMDIwODIyCis6MTAzNkMwMDAwMDg5MTAyQjEwNDAwMDAzMjRBNTAyMDgwMDgwNDgyMTI3Cis6MTAzNkQwMDAwMEMwNTAyMTI0QzYwMDAxMDBDNzEwMkI1NDQwRkZGNDQ1Cis6MTAzNkUwMDA4Q0EyRkZGQzNDMDUwODAwOENBNTFEODAzQzAyMDgwMDU0Cis6MTAzNkYwMDA4QzQyMUQ3QzNDMDkwODAwMjUyOTFDNjAzQzAzMDgwMDA1Cis6MTAzNzAwMDAyNDYzMUQ5ODAwQTIxMDJCM0MwQzA4MDAyNThDMUQ5Q0U2Cis6MTAzNzEwMDAzQzA0MDgwMDhDODQxRDg0M0MwQjA4MDAyNTZCMURBMDE0Cis6MTAzNzIwMDAxMDQwMDAxQTAwMDgzMTQwMDAwNTExODAwMDQ1MTAyMUFBCis6MTAzNzMwMDAwMDAyMTBDMDAwQzkzODIxMjQ4NDAwMDEwMDRCMzAyMTUwCis6MTAzNzQwMDAwMDQzMTgyMTI0QTUwMDAxMDA0QzEwMjFBQzY4MDAwMEEyCis6MTAzNzUwMDBBQ0U2MDAxODNDMDEwODAwQUMyNDFEODRBQzQ0MDAwMDE5Cis6MTAzNzYwMDAzQzAxMDgwMEFDMjUxRDgwMEEwMDA0QTg4RTA0MDAxQzQyCis6MTAzNzcwMDAzQzAyMDgwMDhDNDIxRDg0MjQ0MjAwMDEzQzAxMDgwMEU4Cis6MTAzNzgwMDBBQzIyMUQ4NDBBMDAwNEE3QUM2MjAwMDAwMDBBMTE4MDZDCis6MTAzNzkwMDAwMDRBMTAyMTAwMDIxMEMwMDA0MzI4MjE4Q0EzMDAwMDIxCis6MTAzN0EwMDAwMDRDMzgyMTI0ODQwMDAxMDAwMzE5NDAwMEM5MzAyMTU1Cis6MTAzN0IwMDAwMDY5MTgyMTAwNEIxMDIxQUNBODAwMDBBQzYwMDAxODczCis6MTAzN0MwMDAzQzAxMDgwMEFDMjQxRDg0QUNDMjAwMThBQ0U0MDAwMDJECis6MTAzN0QwMDA4RTA0MDAxQzhGODUwMDM4MEUwMDA2RTcwMjIwMzAyMTgxCis6MTAzN0UwMDA4RjYyMDAwNDhGNDMwMTA4QTYwMjAwMDgzQzAyMTAwMDBCCis6MTAzN0YwMDAwMDYyMTgyNDEwNjAwMDA4MDAwMDAwMDA5NzQyMDEwNEQ1Cis6MTAzODAwMDA5MjAzMDAwNzI0NDJGRkVDMzQ2MzAwMDIzMDQ1RkZGRkJGCis6MTAzODEwMDAwQTAwMDRCQ0EyMDMwMDA3OTc0MjAxMDQyNDQyRkZGMEZGCis6MTAzODIwMDAzMDQ1RkZGRjk2MDYwMDA4MkNDMjAwMTM1NDQwMDAwNUU3Cis6MTAzODMwMDA5MjAzMDAwNzkyMDIwMDA3MzQ0MjAwMDFBMjAyMDAwNzJGCis6MTAzODQwMDA5MjAzMDAwNzI0MDIwMDAxMTA2MjAwMDUyNDAyMDAwMzE1Cis6MTAzODUwMDAxMDYyMDAwQjMwQzdGRkZGMEEwMDA0REIyNEUyMDAwMjA1Cis6MTAzODYwMDA4RjgyMDAzODNDMDRGRkZGOEM0MzAwMEMwMDY0MTgyNDU2Cis6MTAzODcwMDAwMDY1MTgyNUFDNDMwMDBDMEEwMDA0REEzMEM3RkZGRkNFCis6MTAzODgwMDA4RjgyMDAzODNDMDRGRkZGOEM0MzAwMTAwMDY0MTgyNDMyCis6MTAzODkwMDAwMDY1MTgyNUFDNDMwMDEwMzBDN0ZGRkYyNEUyMDAwMjhBCis6MTAzOEEwMDAwMDAyMTA4M0EyMDIwMDA1OEY4MzAwMzgzMDQyMDBGRjFGCis6MTAzOEIwMDAwMDAyMTA4MDAwNDMzMDIxOENDNTAwMDA4Q0MyMDAwMDQzCis6MTAzOEMwMDAyNDAzMDAwNDAwMDIxNzAyMTQ0MzAwMTMwMDAwMDAwMDQ4Cis6MTAzOEQwMDA5NzQyMDEwNDNDMDNGRkZGMDBBMzE4MjQzMDQyRkZGRjdFCis6MTAzOEUwMDAwMDQ3MTAyMzI0NDJGRkZFMDA2MjI4MjVBQ0M1MDAwMERCCis6MTAzOEYwMDA5MjA0MDAwNThFMDMwMDFDMzA4MjAwRkYwMDAyMTA4MDNECis6MTAzOTAwMDAwMDQzMTAyMTkwNDIwMDAwMzA0MjAwMEYwMDQ0MTAyMTdCCis6MTAzOTEwMDAwQTAwMDUxMEEyMDIwMDA2OENDNDAwMDQ5NzQyMDEwNEFDCis6MTAzOTIwMDA5NjAzMDAwQTMwODVGRkZGMzA0MkZGRkYwMDQ3MTAyMzU3Cis6MTAzOTMwMDAyNDQyRkZENjAwMDIxNDAwMDBBMjI4MjVBQ0M1MDAwNEQyCis6MTAzOTQwMDA5MjAyMDAwNzkyMDQwMDA1MjQ2MzAwMjgwMDAzMTg4M0Y0Cis6MTAzOTUwMDAwMDY0MTgyMTM0NDIwMDA0QTIwMzAwMDZBMjAyMDAwN0ZBCis6MTAzOTYwMDA4RjgyMDAwNDI0MDNGRkZCMzQ0MjAwMDIwMDQzMTAyNDMyCis6MTAzOTcwMDBBRjgyMDAwNDkyMDMwMDA2OEUwNzAwMUM4Rjg2MDAzODc5Cis6MTAzOTgwMDAwMDAzMTg4MDAwNjcxMDIxOEM0NDAwMEMzQzAyRkZGNkY1Cis6MTAzOTkwMDAzNDQyRkZGRjAwODIyODI0MDA2NjE4MjFBRTA0MDAwQzg4Cis6MTAzOUEwMDBBQzY1MDAwQzkyMDMwMDA2OEUwNDAwMEMzQzAyRkY3RjA1Cis6MTAzOUIwMDAzNDQyRkZGRjAwMDMxODgwMDBBMjI4MjQwMDgyMjAyNDQ0Cis6MTAzOUMwMDAwMDY3MTgyMUFFMDQwMDBDQUM2NTAwMEM5MjAyMDAwNkUyCis6MTAzOUQwMDAwMDAyMTA4MDAwNDcxMDIxOTQ0NTAwMTJBQzQ1MDAxMEYxCis6MTAzOUUwMDA5MjAyMDAwNjAwMDIxMDgwMDA0NjEwMjFBQzQ1MDAxMDMzCis6MTAzOUYwMDA4RkEyMDAxMDkyMDMwMDA1MDAwMjExNDAwMDAzMTg4MEZFCis6MTAzQTAwMDAwMDY3MTgyMTAwNTMyMDIxOEM2MjAwMDQ4QzgzMDAxODY5Cis6MTAzQTEwMDAxNDYwMDAwRUFFMDIwMDE0M0MwMzA4MDA4QzYzMUQ4QzgxCis6MTAzQTIwMDBBQzgzMDAxODNDMDIwODAwOEM0MjFEOTAwMDYyMTAyQkYxCis6MTAzQTMwMDAxMDQwMDAxOTAwMDAwMDAwM0MwMjA4MDA4QzQyMUQ5NDU4Cis6MTAzQTQwMDAwMDYyMTAyMTNDMDEwODAwQUMyMjFEOEM4RTAyMDAxODdGCis6MTAzQTUwMDA4RjQ4MDAyMDAwMDAzMDIxMDAwMjExQzAxMjIwMDAwQjBFCis6MTAzQTYwMDBBRjQyMDAyMDNDMDIwMDA4MDM0MjI4MjEwMEUwMjAyMTUwCis6MTAzQTcwMDA4QzgyMDAwMDI0QzYwMDAxMDBEMTE4MkJBQ0EyMDAwMEVCCis6MTAzQTgwMDAyNDg0MDAwNDE0NjBGRkZBMjRBNTAwMDRBRjQ4MDAyMDM5Cis6MTAzQTkwMDAwQTAwMDU1RTI0MDIwMDEwMDAwMDAwMDAwMDAwMDAwRDc2Cis6MTAzQUEwMDAwMDAwMDAwMDI0MDAwMkQ0MjQwMjAwMTBBNzQyMDE0MEJDCis6MTAzQUIwMDAyNDAyMDAwMkE3NDAwMTQyQTc0MDAxNDRBNzQyMDE0NjU4Cis6MTAzQUMwMDA5NzQyMDEwNDNDMDQwMDA4MjQ0MkZGRkVBNzQyMDE0ODNCCis6MTAzQUQwMDAyNDAyMDAwMTBFMDAwMjBBQTc0MjAxNEE5NjAzMDAwQUNFCis6MTAzQUUwMDA5MjAyMDAwNDAwNDMxMDIxMjQ0MjAwMDIzMDQyMDAwN0U5Cis6MTAzQUYwMDAwMDAyMTAyMzMwNDIwMDA3MEUwMDAyMzNBRTAyMDAxMDE1Cis6MTAzQjAwMDA4RjYyMDAwMDNDMDMwODAwOEM2MzA0NDQyNDA0MDAxMDBFCis6MTAzQjEwMDBBRjgyMDAwODk3NDIwMTA0MzA0MkZGRkYyNDQyRkZGRUJCCis6MTAzQjIwMDAwMDQwMzgyMTAwMDIzN0MzM0MwMjA4MDA4QzQyMDQ0MEE4Cis6MTAzQjMwMDAwMDY3MTgyMTAwNjcyODJCMDA0NjEwMjEwMDQ1MTAyMTNFCis6MTAzQjQwMDAzQzAxMDgwMEFDMjMwNDQ0M0MwMTA4MDBBQzIyMDQ0MEMyCis6MTAzQjUwMDAwQTAwMDY2MjAwMDAwMDAwMTRBMDAwMDUwMDAwMDAwMDNBCis6MTAzQjYwMDAwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMDAyNDAwMDMwNDFECis6MTAzQjcwMDA4RjQyMDE3ODA0NDBGRkZFMDAwMDAwMDAwRTAwMDIzQjZGCis6MTAzQjgwMDAyN0E0MDAxNDE0NDAwMDA1MDA0MDgwMjEwMDAwMDAwMDFDCis6MTAzQjkwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAzMEI5MjA2MDAwNDRBCis6MTAzQkEwMDA4RkE0MDAxNDI3QTUwMDE4MDAwNjMwODIwRTAwMDI1Q0M2Cis6MTAzQkIwMDBBRkEwMDAxODUwNDAwMDA2OEUwMjAwMDAwMDAwMDAwMDc4Cis6MTAzQkMwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAzMTE4RTAyMDAwMDIwCis6MTAzQkQwMDA1NDQwMDAwNjkyMDIwMDA3MDAwMDAwMDAwMDAwMDAwREEzCis6MTAzQkUwMDAwMDAwMDAwMDI0MDAwMzE2OTIwMjAwMDczMDQyMDAwNDg3Cis6MTAzQkYwMDAxMDQwMDAwNThGODIwMDA0MjQwM0ZGRkIzNDQyMDAwMkMyCis6MTAzQzAwMDAwMDQzMTAyNEFGODIwMDA0OEY2MjAwMDQwNDQzMDAwOUMzCis6MTAzQzEwMDA5MjAyMDAwNzkyMDIwMDA2OEUwMzAwMUM4RTA0MDAwQzI0Cis6MTAzQzIwMDAwMDAyMTA4MDAwNDMxMDIxQUM0NDAwMENBRTAwMDAwMEU0Cis6MTAzQzMwMDA5MjAyMDAwNzMwNDIwMDA0NTQ0MDAwMEI5MjAzMDAwNDNCCis6MTAzQzQwMDA5MjAzMDAwNThFMDQwMDE0OEUwNTAwMUMwMDAzMTg4MEVBCis6MTAzQzUwMDAzQzAyMDAwMTAwODIyMDIxMDA2NTE4MjFBRTA0MDAxNEZFCis6MTAzQzYwMDBBQzY0MDAwNDkyMDMwMDA0OTYwMjAwMEEwMDYyMTAyMTcyCis6MTAzQzcwMDAyNDQyMDAwNTAwMDI5MDgzOEZBMjAwMTgxMDQwMDAwRDFFCis6MTAzQzgwMDAyNzcxMDAwODhGQTQwMDE0MDAwMzEwODIwMjQyMzAyMzIxCis6MTAzQzkwMDAyN0E1MDAxODBFMDAwMjVDQUZBMjAwMTg1MDQwMDAwNkQ1Cis6MTAzQ0EwMDA4RTA1MDAxQzAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMDU4Cis6MTAzQ0IwMDAyNDAwMDMzRjhFMDUwMDFDMDIyMDIwMjEwRTAwMDZFNzkxCis6MTAzQ0MwMDAwMjQwMzAyMTkyMDQwMDA2OEY2NTAwMDQzQzAyN0ZGRjExCis6MTAzQ0QwMDAwMDA0MjA4MDAwOTEyMDIxOEM4MzAwMDQzNDQyRkZGRkU3Cis6MTAzQ0UwMDAwMEEyMjgyNDAwNjUxODIxQUM4MzAwMDQ5MjAyMDAwNzdBCis6MTAzQ0YwMDA5MjAzMDAwNDkyMDUwMDA1MzA0MjAwMDQxMDQwMDAxNEI1Cis6MTAzRDAwMDA5NjA3MDAwODMwQTUwMEZGMDAwNTI4ODAwMEIxMjgyMTkzCis6MTAzRDEwMDA4Q0E0MDAwNDk3NDIwMTA0OTYwNjAwMEEzMDYzMDBGRjU5Cis6MTAzRDIwMDAzMDQyRkZGRjAwNDMxMDIxMDA0NjEwMjEzMEUzRkZGRjI3Cis6MTAzRDMwMDAwMDQzMTAyMzI0NDJGRkQ4MzA4NEZGRkYwMDAyMTQwMDA4Cis6MTAzRDQwMDAwMDgyMjAyNUFDQTQwMDA0MEEwMDA2MTY5MjAzMDAwNzk2Cis6MTAzRDUwMDAzMEE1MDBGRjAwMDUyODgwMDBCMTI4MjE4Q0E0MDAwMEI4Cis6MTAzRDYwMDA5NzQyMDEwNDMwNjMwMEZGMzA0MkZGRkYwMDQzMTAyMUZGCis6MTAzRDcwMDAwMDQ3MTAyMzNDMDNGRkZGMDA4MzIwMjQzMDQyRkZGRjU1Cis6MTAzRDgwMDAwMDgyMjAyNUFDQTQwMDAwOTIwMzAwMDcyNDAyMDAwMTU5Cis6MTAzRDkwMDAxMDYyMDAwNjAwMDAwMDAwMjQwMjAwMDMxMDYyMDAxMUZGCis6MTAzREEwMDAwMDAwMDAwMDBBMDAwNjM5OEUwMzAwMTA5NzQyMDEwNDRCCis6MTAzREIwMDA5MjAzMDAwNDk2MDUwMDBBOEUyNDAwMEMwMDQzMTAyMTkzCis6MTAzREMwMDAwMDQ1MTAyMTI0NDJGRkYyM0MwM0ZGRkYwMDgzMjAyNDIyCis6MTAzREQwMDAzMDQyRkZGRjAwODIyMDI1QUUyNDAwMEMwQTAwMDYzOTg1Cis6MTAzREUwMDA4RTAzMDAxMDk3NDIwMTA0OTIwMzAwMDQ5NjA1MDAwQTE2Cis6MTAzREYwMDA4RTI0MDAxMDAwNDMxMDIxMDA0NTEwMjEyNDQyRkZFRUM0Cis6MTAzRTAwMDAzQzAzRkZGRjAwODMyMDI0MzA0MkZGRkYwMDgyMjAyNTc3Cis6MTAzRTEwMDBBRTI0MDAxMDhFMDMwMDEwMjQwMjAwMEFBNzQyMDE0MEM1Cis6MTAzRTIwMDBBNzQzMDE0Mjk2MDMwMDBBOTIwMjAwMDQzQzA0MDA0MEFBCis6MTAzRTMwMDAwMDQzMTAyMUE3NDIwMTQ0QTc0MDAxNDY5NzQyMDEwNEQ0Cis6MTAzRTQwMDBBNzQyMDE0ODI0MDIwMDAxMEUwMDAyMEFBNzQyMDE0QUNCCis6MTAzRTUwMDAwRTAwMDIzMzAwMDAwMDAwOEY2MjAwMDA5MjAzMDAwNDk1Cis6MTAzRTYwMDAwMDAwMjAyMUFGODIwMDA4OTc0MjAxMDQ5NjA2MDAwQTU0Cis6MTAzRTcwMDAzMDQyRkZGRjAwNjIxODIxMDA2MDI4MjEzQzAzMDgwMDQ3Cis6MTAzRTgwMDA4QzYzMDQ0NDNDMDIwODAwOEM0MjA0NDAwMDY1MTgyMTA1Cis6MTAzRTkwMDAwMDQ0MTAyMTAwNjUzODJCMDA0NzEwMjEzQzAxMDgwMDI4Cis6MTAzRUEwMDBBQzIzMDQ0NDNDMDEwODAwQUMyMjA0NDA5MjA0MDAwNDBBCis6MTAzRUIwMDAwMDg2MjAyMTI0ODQwMDBBMzA4NEZGRkYwRTAwMDFFN0UxCis6MTAzRUMwMDAwMDAwMDAwMDk3NDQwMTA0MzA4NEZGRkYwRTAwMDFGNTVDCis6MTAzRUQwMDAwMDAwMDAwMDNDMDIxMDAwQUY0MjAxNzgwQTAwMDZENDQ2Cis6MTAzRUUwMDA4RjgyMDAyMDE0ODIwMDI3MzA2MjAwMDY5NzQyMDEwNDZFCis6MTAzRUYwMDAxMDQwMDA2NzNDMDI0MDAwMzA2MjQwMDAxMDQwMDAwNTY2Cis6MTAzRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwMDAwMDAwMEE0Cis6MTAzRjEwMDAyNDAwMDQxQThGNDIwMTc4MDQ0MEZGRkUyNDAyMDgwMEE2Cis6MTAzRjIwMDBBRjQyMDE3ODI0MDIwMDA4QTc0MjAxNDBBNzQwMDE0MkE1Cis6MTAzRjMwMDA4RjgyMDAwNDk3NDMwMTA0MzA0MjAwMDExMDQwMDAwN0MzCis6MTAzRjQwMDAzMDcwRkZGRjI2MDNGRkZFMjQwMjAwMDJBNzQyMDE0NjU1Cis6MTAzRjUwMDBBNzQzMDE0ODBBMDAwNjhDMjQwMjAwMERBNzQwMDE0NjMxCis6MTAzRjYwMDAyNDAyMDAwREE3NDIwMTRBOEY2MjAwMDAyNDA0MDAwOEM5Cis6MTAzRjcwMDBBRjgyMDAwODBFMDAwMUU3MDAwMDAwMDAwQTAwMDY2NjlDCis6MTAzRjgwMDAwMjAwMjAyMTEwNDAwMDQyM0MwMjQwMDA5MzYyMDAwMEU5Cis6MTAzRjkwMDAzMDQzMDBGMDI0MDIwMDEwMTA2MjAwMDUyNDAyMDA3MDdCCis6MTAzRkEwMDAxMDYyMDAzNThGODIwMDIwMEEwMDA2RDUyNDQyMDAwMUVECis6MTAzRkIwMDA4RjYyMDAwMDk3NDMwMTA0MzA1MEZGRkYzMDcxRkZGRjE0Cis6MTAzRkMwMDA4RjQyMDE3ODA0NDBGRkZFMzIwMjAwMDcwMDAyMTAyM0Y2Cis6MTAzRkQwMDAzMDQyMDAwNzI0MDMwMDBBMjYwNEZGRkVBNzQzMDE0MEU1Cis6MTAzRkUwMDBBNzQyMDE0MkE3NDQwMTQ0QTc0MDAxNDZBNzUxMDE0ODA2Cis6MTAzRkYwMDA4RjQyMDEwODMwNDIwMDIwMTQ0MDAwMDIyNDAzMDAwOUNGCis6MTA0MDAwMDAyNDAzMDAwMUE3NDMwMTRBMEUwMDAyMEEzQzA0MDA0MEI5Cis6MTA0MDEwMDAwRTAwMDIzMzAwMDAwMDAwM0MwNzA4MDA4Q0U3MDQ0NDU3Cis6MTA0MDIwMDAwMjExMTAyMTI0NDJGRkZFM0MwNjA4MDA4Q0M2MDQ0MDA5Cis6MTA0MDMwMDAwMDQwMTgyMTAwRTMzODIxMDAwMDEwMjE4RjY1MDAwMEE2Cis6MTA0MDQwMDAwMEUzNDAyQjAwQzIzMDIxMjYwNDAwMDgwMEM4MzAyMUM0Cis6MTA0MDUwMDAzMDg0RkZGRkFGODUwMDA4M0MwMTA4MDBBQzI3MDQ0NDEyCis6MTA0MDYwMDAzQzAxMDgwMEFDMjYwNDQwMEUwMDAxRTcwMDAwMDAwMEZGCis6MTA0MDcwMDAwQTAwMDY2NjAyMjAyMDIxMEUwMDAxMzkwMDAwMDAwMDFGCis6MTA0MDgwMDA4RjgyMDAyMDI0NDIwMDAxQUY4MjAwMjAzQzAyNDAwMEM5Cis6MTA0MDkwMDBBRjQyMDEzODBBMDAwMzM2MDAwMDAwMDAzMDg0RkZGRjAxCis6MTA0MEEwMDAzMEE1RkZGRjAwMDAxODIxMTA4MDAwMDcwMDAwMDAwMDZECis6MTA0MEIwMDAzMDgyMDAwMTEwNDAwMDAyMDAwNDIwNDIwMDY1MTgyMUY3Cis6MTA0MEMwMDAwQTAwMDZERDAwMDUyODQwMDNFMDAwMDgwMDYwMTAyMTFBCis6MTA0MEQwMDAxMEMwMDAwNjI0QzZGRkZGOENBMjAwMDAyNEE1MDAwNDI3Cis6MTA0MEUwMDBBQzgyMDAwMDBBMDAwNkU3MjQ4NDAwMDQwM0UwMDAwODE0Cis6MTA0MEYwMDAwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkZBQzg2MDAwMDExCis6MTA0MTAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkYyNDYzRkZGRjA2Cis6MTA0MTEwMDAxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDgwMDAwMDAwMDk5Cis6MDQ0MTIwMDAwMDAwMDAwMTlBCis6MEM0MTI0MDAwQTAwMDAyQTAwMDAwMDAwMDAwMDAwMDA1QgorOjEwNDEzMDAwMDAwMDAwMEQ3NDc4NzAzNTJFMzAyRTMwNkEzOTAwMDA4MgorOjEwNDE0MDAwMDUwMDAwMDAwMDAwMDAwQTAwMDAwMTM2MDAwMEVBNjBERgorOjEwNDE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RgorOjEwNDE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0RgorOjEwNDE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzRgorOjEwNDE4MDAwMDAwMDAwMDAwMDAwMDAxNjAwMDAwMDAwMDAwMDAwMDAxOQorOjEwNDE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRgorOjEwNDFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRgorOjEwNDFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEzODg2NAorOjEwNDFDMDAwMDAwMDAwMDAwMDAwMDVEQzAwMDAwMDAwMDAwMDAwMDAwRQorOjEwNDFEMDAwMTAwMDAwMDMwMDAwMDAwMDAwMDAwMDBEMDAwMDAwMERCMgorOjEwNDFFMDAwM0MwMjA4MDAyNDQyMzg2MDNDMDMwODAwMjQ2MzNCMTQ2RQorOjEwNDFGMDAwQUM0MDAwMDAwMDQzMjAyQjE0ODBGRkZEMjQ0MjAwMDQ0QgorOjEwNDIwMDAwM0MxRDA4MDAzN0JEN0ZGQzAzQTBGMDIxM0MxMDA4MDBENgorOjEwNDIxMDAwMjYxMDAwQTgzQzFDMDgwMDI3OUMzODYwMEUwMDA0MDdFQworOjEwNDIyMDAwMDAwMDAwMDAwMDAwMDAwRDhGODYwMDNDM0MwMzkwMDA2MQorOjEwNDIzMDAwM0MwMjgwMDAwMDg2MjgyNTAwQTMyMDI1QUM0NDAwMjBGNQorOjEwNDI0MDAwM0MwMzgwMDA4QzY3MDAyMDA0RTBGRkZFMDAwMDAwMDBCQgorOjEwNDI1MDAwMDNFMDAwMDgwMDAwMDAwMDBBMDAwMDQxMjQwNDAwMDFGRgorOjEwNDI2MDAwOEY4NTAwM0MzQzA0ODAwMDM0ODMwMDAxMDBBMzEwMjVBRQorOjEwNDI3MDAwMDNFMDAwMDhBQzgyMDAyMDAzRTAwMDA4MDAwMDEwMjFFOQorOjEwNDI4MDAwMzA4NEZGRkYzMEE1RkZGRjEwODAwMDA3MDAwMDE4MjFEOQorOjEwNDI5MDAwMzA4MjAwMDExMDQwMDAwMjAwMDQyMDQyMDA2NTE4MjExNQorOjEwNDJBMDAwMTQ4MEZGRkIwMDA1Mjg0MDAzRTAwMDA4MDA2MDEwMjE5NworOjEwNDJCMDAwMTBDMDAwMDcwMDAwMDAwMDhDQTIwMDAwMjRDNkZGRkYxMQorOjEwNDJDMDAwMjRBNTAwMDRBQzgyMDAwMDE0QzBGRkZCMjQ4NDAwMDQ3OQorOjEwNDJEMDAwMDNFMDAwMDgwMDAwMDAwMDEwQTAwMDA4MjRBM0ZGRkY3NgorOjEwNDJFMDAwQUM4NjAwMDAwMDAwMDAwMDAwMDAwMDAwMjQwMkZGRkY3OAorOjEwNDJGMDAwMjQ2M0ZGRkYxNDYyRkZGQTI0ODQwMDA0MDNFMDAwMDgzMworOjEwNDMwMDAwMDAwMDAwMDA5MEFBMDAzMThGQUIwMDEwOENBQzAwNDA4MAorOjEwNDMxMDAwM0MwMzAwRkY4RDY4MDAwNEFENkMwMDIwOENBRDAwNDRCMAorOjEwNDMyMDAwMDBFMDYwMjEzNDYyRkZGRkFENkQwMDI0OENBNzAwNDhERgorOjEwNDMzMDAwM0MwOUZGMDAwMTA5QzAyNEFENjcwMDI4OENBRTAwNEM4OQorOjEwNDM0MDAwMDE4MkM4MjQwMzE5NzgyNUFENkYwMDA0QUQ2RTAwMkNERQorOjEwNDM1MDAwOENBRDAwMzgzMTRBMDBGRkFENkQwMDFDOTRBOTAwMzJDRAorOjEwNDM2MDAwMzEyOEZGRkZBRDY4MDAxMDkwQTcwMDMwQTU2MDAwMDI2MworOjEwNDM3MDAwQTE2MDAwMDRBMTY3MDAwMDkwQTMwMDMyMzA2MjAwRkYzQQorOjEwNDM4MDAwMDAwMjE5ODIxMDYwMDAwNTI0MDUwMDAxMTA2NTAwMEU2RQorOjEwNDM5MDAwMDAwMDAwMDAwM0UwMDAwOEExNkEwMDAxOENEODAwMjg5QQorOjEwNDNBMDAwMzU0QTAwODBBRDc4MDAxODhDQ0YwMDE0QUQ2RjAwMTQzMgorOjEwNDNCMDAwOENDRTAwMzBBRDZFMDAwODhDQzQwMDJDQTE2QTAwMDFDOAorOjEwNDNDMDAwMDNFMDAwMDhBRDY0MDAwQzhDQ0QwMDFDQUQ2RDAwMTgzRQorOjEwNDNEMDAwOENDOTAwMTRBRDY5MDAxNDhDQzgwMDI0QUQ2ODAwMDhCNQorOjEwNDNFMDAwOENDNzAwMjBBRDY3MDAwQzhDQzIwMDE0OEM4MzAwNzA1OQorOjEwNDNGMDAwMDA0M0M4MkIxMzIwMDAwNzAwMDAwMDAwOENDMjAwMTRFQgorOjEwNDQwMDAwMTQ0Q0ZGRTQwMDAwMDAwMDM1NEEwMDgwMDNFMDAwMDg3RgorOjEwNDQxMDAwQTE2QTAwMDE4QzgyMDA3MDBBMDAwMEI3MDAwMDAwMDA1MQorOjEwNDQyMDAwOTA4OTAwMzAyN0JERkZGODhGQTgwMDFDQTNBOTAwMDBDOQorOjEwNDQzMDAwOEZBMzAwMDAzQzBERkY4MDM1QTJGRkZGOENBQzAwMkM0OQorOjEwNDQ0MDAwMDA2MjU4MjRBRkFCMDAwMEExMDAwMDA0MDBDMDU4MjE1NgorOjEwNDQ1MDAwQTdBMDAwMDI4RDA2MDAwNDAwQTA0ODIxMDE2N0M4MjEyMgorOjEwNDQ2MDAwOEZBNTAwMDAwMDgwNTAyMTNDMThGRjdGMDMyQzIwMjZFMAorOjEwNDQ3MDAwM0MwRTAwRkYyQzhDMDAwMTM3MEZGRkZGMzVDREZGRkZGNgorOjEwNDQ4MDAwM0MwMkZGMDAwMEFGQzgyNDAwRURDMDI0MDBDMjc4MjQyNQorOjEwNDQ5MDAwMDAwQzFEQzAwMzIzNjgyNTAxRjg3MDI1QUQwRDAwMDAzOAorOjEwNDRBMDAwQUQwRTAwMDQ4RDI0MDAyNEFGQUQwMDAwQUQwNDAwMDg2MworOjEwNDRCMDAwOEQyQzAwMjAyNDA0RkZGRkFEMEMwMDBDOTU0NzAwMzIyQQorOjEwNDRDMDAwMzBFNkZGRkZBRDA2MDAxMDkxNDUwMDQ4MzBBMjAwRkYyNgorOjEwNDREMDAwMDAwMjE5QzI1MDYwMDAwMThEMjQwMDM0QUQwNDAwMTRBNAorOjEwNDRFMDAwOEQ0NzAwMzg4RkFBMDAxODI3QkQwMDA4QUQwQjAwMjhBMworOjEwNDRGMDAwQUQwQTAwMjRBRDA3MDAxQ0FEMDAwMDJDQUQwMDAwMTg3MworOjEwNDUwMDAwMDNFMDAwMDhBRDAwMDAyMDI3QkRGRkUwQUZCMjAwMThCNworOjEwNDUxMDAwQUZCMTAwMTRBRkIwMDAxMEFGQkYwMDFDOTA5ODAwMzBENgorOjEwNDUyMDAwMDBDMDg4MjEzQzBEMDBGRjMzMEYwMDdGQTBDRjAwMDBBQQorOjEwNDUzMDAwOTA4RTAwMzEzNUFDRkZGRjNDMEFGRjAwQTBDRTAwMDE5OQorOjEwNDU0MDAwOTRBNjAwMUVBMjIwMDAwNDhDQUIwMDE0OEUyOTAwMDQ0NworOjEwNDU1MDAwMDBBMDgwMjEwMTZDMjgyNDAxMkE0MDI0MDA4MDkwMjFBMQorOjEwNDU2MDAwMDEwNTIwMjVBNjI2MDAwMkFFMjQwMDA0MjYwNTAwMjAxMQorOjEwNDU3MDAwMjYyNDAwMDgwRTAwMDA2MzI0MDYwMDAyOTI0NzAwMzA0MworOjEwNDU4MDAwMjYwNTAwMjgyNjI0MDAxNDAwMDcxRTAwMDAwMzE2MDMzOQorOjEwNDU5MDAwMjQwNjAwMDQwNDQwMDAwMzI0MDNGRkZGOTY1OTAwMzI2MAorOjEwNDVBMDAwMzMyM0ZGRkYwRTAwMDA2M0FFMjMwMDEwMjYyNDAwMjRGNworOjEwNDVCMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA5NQorOjEwNDVDMDAwMjQwNTAwMDMwMDAwMzAyMTBBMDAwMDZEMjdCRDAwMjBGMworOjEwNDVEMDAwMjdCREZGRDhBRkIxMDAxQ0FGQjAwMDE4QUZCRjAwMjA5RgorOjEwNDVFMDAwOTBBOTAwMzAyNDAyMDAwMTAwRTA1MDIxMzEyMzAwM0Y1NworOjEwNDVGMDAwMDBBMDQwMjE4RkIwMDA0MDAwODA4ODIxMDBDMDQ4MjFFOQorOjEwNDYwMDAwMTA2MjAwMTQ4RkE3MDAzODI0MEIwMDA1MDBBMDIwMjFBMQorOjEwNDYxMDAwMDBDMDI4MjExMDZCMDAxMzAyMDAzMDIxMEUwMDAwRjlBOQorOjEwNDYyMDAwMDAwMDAwMDA5MjI1MDA3QzMwQTQwMDAyMTA4MDAwMDNFRQorOjEwNDYzMDAwMjYwMzAwMzBBRTAwMDAzMDI2MDMwMDM0OEZCRjAwMjA3OAorOjEwNDY0MDAwOEZCMTAwMUM4RkIwMDAxODAwNjAxMDIxMDNFMDAwMDgzQgorOjEwNDY1MDAwMjdCRDAwMjgwRTAwMDA3OEFGQjAwMDEwMEEwMDAxNDAwRQorOjEwNDY2MDAwMDAwMDAwMDA4RkEzMDAzQzAxMDAyMDIxMDEyMDI4MjEzMAorOjEwNDY3MDAwMDE0MDMwMjFBRkEzMDAxMDBFMDAwMEJGQUZCMDAwMTQwNgorOjEwNDY4MDAwMEEwMDAxNDAwMDAwMDAwMDNDMDU4MDAwOENBMzBFMTBEMQorOjEwNDY5MDAwOEY4NDAwNDRBQzgzMDAyMDhDQTIwRTE4MDNFMDAwMDgzNQorOjEwNDZBMDAwQUM4MjAwMjQzQzA1ODAwMDhDQTMwRTE0OEY4NDAwNDQ0RgorOjEwNDZCMDAwQUM4MzAwMjA4Q0EyMEUxQzAzRTAwMDA4QUM4MjAwMjQxNgorOjEwNDZDMDAwOTM4MjAwMEMxMDQwMDAxQjI0ODMwMDBGMjQwNEZGRjA5MQorOjEwNDZEMDAwMDA2NDM4MjQxMEUwMDAxOTk3OEIwMDEwOTc4NDAwMEVCNgorOjEwNDZFMDAwOTM4OTAwMEQzQzBBNjAxQzBBMDAwMTdCMDE2NDQwMjM5MQorOjEwNDZGMDAwMDEwMzcwMjEwMDY0MjgyMzExMjYwMDAyMzFDMkZGRkY0QworOjEwNDcwMDAwMzBBMkZGRkYwMDQ3MzAyQjUwQzAwMDBFMDBFNDQ4MjFDQworOjEwNDcxMDAwOEQ0RDAwMEMzMUEzRkZGRjAwMDM2NDAwMDAwQzJDMDMzRgorOjEwNDcyMDAwMDRBMUZGRjMwMDAwMzAyMTMwNjM3RkZGMEEwMDAxNzMxMgorOjEwNDczMDAwMjQwNjAwMDEwM0UwMDAwODAwMDAwMDAwOTc4NDAwMEUzQQorOjEwNDc0MDAwMDBFNDQ4MjEzMTIzRkZGRjMxNjhGRkZGMDA2ODM4MkI2OAorOjEwNDc1MDAwNTRFMEZGRjhBNzgzMDAwRTkzOEEwMDBEMTE0MDAwMDU3NgorOjEwNDc2MDAwMjQwRjAwMDEwMDZCQzAyM0EzODAwMDBEMDNFMDAwMDhBQworOjEwNDc3MDAwQTc5ODAwMEUwMDZCQzAyM0EzOEYwMDBEMDNFMDAwMDg3NAorOjEwNDc4MDAwQTc5ODAwMEUwM0UwMDAwODAwMDAwMDAwMjdCREZGRTgyNgorOjEwNDc5MDAwQUZCMDAwMTAzMDg0RkZGRjNDMTA4MDAwOTNBODAwMkJDNgorOjEwNDdBMDAwQUZCRjAwMTRBNjA0MDE0NDk2MEEwRTE2MzBDNjAwRkZERgorOjEwNDdCMDAwOEZBOTAwMzBBNjBBMDE0NkFFMDUwMTQ4QTIwNjAxNTJBMworOjEwNDdDMDAwQTYwODAxNUFBRTA3MDE2MDhGQTMwMDJDQTYwOTAxNTg2NAorOjEwNDdEMDAwMDEyMDIwMjEwRTAwMDE2N0FFMDMwMTU0M0MwMjEwMDBBRAorOjEwNDdFMDAwQUUwMjAxNzg4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDgwNAorOjEwNDdGMDAwMjdCRDAwMTg4Rjg1MDAwMDI0ODQwMDA3MjdCREZGRjgxRgorOjEwNDgwMDAwMzA4NEZGRjgzQzA2ODAwMDk0Q0IwMDhBMzE2QUZGRkZCOQorOjEwNDgxMDAwQUZBQTAwMDA4RkE5MDAwMDAxMjU0MDIzMjUwN0ZGRkY1NAorOjEwNDgyMDAwMzBFMzFGRkYwMDY0MTAyQjE0NDBGRkY3MDAwNTY4ODI3RgorOjEwNDgzMDAwMDAwRDI4ODAzNENDNDAwMDAwQUMxMDIxMDNFMDAwMDhCQgorOjEwNDg0MDAwMjdCRDAwMDg4RjgyMDAwMDI0ODYwMDA3MzBDNUZGRjhDRQorOjEwNDg1MDAwMDBBMjE4MjEzMDY0MUZGRjAzRTAwMDA4QUY4NDAwMDBBRAorOjEwNDg2MDAwOEY4NTAwNDQ4RjhBMDAzQzI3QkRGRkIwM0MwNDgwMDA0OAorOjEwNDg3MDAwQUZCNzAwNDRBRkI0MDAzOEFGQjEwMDJDQUZCRjAwNDhCMQorOjEwNDg4MDAwQUZCNjAwNDBBRkI1MDAzQ0FGQjMwMDM0QUZCMjAwMzBCQworOjEwNDg5MDAwQUZCMDAwMjg4Qzg3MDEwNDhDQTkwMDI0QUM4QTAwODA2QQorOjEwNDhBMDAwOENBODAwMjAwMEU5ODgyMzAwMDBCODIxQUM4ODBFMTBGNQorOjEwNDhCMDAwOENBNjAwMjQwMDAwQTAyMUFDODYwRTE4OEM4MjBFMTA1RAorOjEwNDhDMDAwQUM4MjBFMTQ4QzgzMEUxOEFDODMwRTFDMTIyMDAwRkJERAorOjEwNDhEMDAwM0MxNjgwMDA5MzZCMDAwODExNjAwMEYxMDAwMDAwMDA5RQorOjEwNDhFMDAwOTc2RTAwMTAzMUNERkZGRjAyMkQ2MDJCMTU4MDAwRUM3QworOjEwNDhGMDAwMDAwMDAwMDA5NzcwMDAxMDMyMEZGRkZGQUVDRjBFMDBENworOjEwNDkwMDAwM0MwNTgwMDA4Q0IzMDAwMDMyNzIwMDA4MTI0MEZGRkRBRAorOjEwNDkxMDAwMDAwMDAwMDA5NEI1MEUwODhDQTcwRTA0MzJBNUZGRkYxRQorOjEwNDkyMDAwMzBCNDAwMDExMjgwMDBFMTAwMDAwMDAwMDAwMDAwMEQyMgorOjEwNDkzMDAwMzBCOUEwNDAyNDE4MDA0MDEzMzgwMTE3MzBCNEEwMDA0QgorOjEwNDk0MDAwMTI4MDAwREMwMDAwMDAwMDkzNzMwMDA4MTI2MDAwMDg3MQorOjEwNDk1MDAwMDAwMDAwMDA5NzY5MDAxMDMxMjJGRkZGMDBFMjIwMkJDOQorOjEwNDk2MDAwMTA4MDAwMDMzMEE2MDA0MDEwQzAwMEQyMDAwMDAwMDBGQworOjEwNDk3MDAwQTc4NTAwNDBBRjg3MDAzODkzNkEwMDA4MDIyMDM4MjFERAorOjEwNDk4MDAwQUZCMTAwMjAxNTQwMDBGMTI3QjQwMDIwQUY2MDAwMEM0QgorOjEwNDk5MDAwOTc4NTAwNDAzMEIxNDAwMDE2MjAwMDAyMjQwMzAwMTYyNQorOjEwNDlBMDAwMjQwMzAwMEUyNDE1NDAwN0EzNjMwMDBBQUY3NTAwMTQwQQorOjEwNDlCMDAwOTM5MDAwNDI4RjZGMDAxNDMyMTkwMDAxMDAxOUMyNDAxOQorOjEwNDlDMDAwMDFGODQwMjVBRjY4MDAxNDk3ODcwMDQwOEY2MzAwMTRGQQorOjEwNDlEMDAwMzBFRTAwMTAwMDZFNjgyNUFGNkQwMDE0OTc4QzAwNDAxQgorOjEwNDlFMDAwMzE4QjAwMDgxMTYwMDE2NTAwMDAwMDAwOEY2NTAwMTQyNAorOjEwNDlGMDAwM0MwQjEwMDAzQzBBODAwMDAwQUI4ODI1QUY3MTAwMTQwRQorOjEwNEEwMDAwOTU0NjBFMEEzQzA5ODEwMDI0MTMwMDBFMzBDMkZGRkZCOAorOjEwNEExMDAwMDA0OTIwMjVBRjY0MDAwNEEzNzMwMDAyOTM3RjAwMEFCRAorOjEwNEEyMDAwMzQwNkZGRkMyN0YyMDAwNEEzNzIwMDBBOTc4RDAwNDBCMQorOjEwNEEzMDAwMzFBQzIwMDAxMTgwMDE1NzAwMDAwMDAwM0MwNzgwMDBDRAorOjEwNEE0MDAwOTc4RDAwNDA5NEVDMEUwQzk3OTEwMDQwMDAwRDU4NDI1OQorOjEwNEE1MDAwMzE4NUMwMDAzMTZBMDAwMzAwMDUxMzAzMzIyOTEwMDBCQworOjEwNEE2MDAwMDE0Mjk4MjUwMDA5MjIwMzAyNjRGODI1MDAxRjkwQzAyNgorOjEwNEE3MDAwQTc3MjAwMTI5Nzk1MDA0MDkzNzkwMDBBMDAxNTgxODI3MQorOjEwNEE4MDAwMzIxODAwM0MwMzE5NzgyMTI1RTgwMDNDQTM2ODAwMDk4RQorOjEwNEE5MDAwOTRFRTBFMEMzMUMzM0ZGRkE3NjMwMDEwOTc2MzAwMTIyMgorOjEwNEFBMDAwOTM2NzAwMDkwMEUzNzAyMTI1Q0QwMDAyMzFBQzAwMDdCNworOjEwNEFCMDAwMDAwQzU4MjMzMTY1MDAwN0EzNjUwMDBCOTM3MTAwMDlCMgorOjEwNEFDMDAwOTc2NDAwMTI5NzZBMDAxMDMyMjIwMEZGOEY5MTAwMzgxRAorOjEwNEFEMDAwOTc5RjAwNDAwMDQ0NDgyMTAxMkE5ODIxMDI2NjkwMjFCNgorOjEwNEFFMDAwMzNGNTAwNDAxMkEwMDAwNTMyNDZGRkZGMDBEMTQwMkJGNQorOjEwNEFGMDAwM0MxMjgwMDAxMTAwMDAxNjAwMDA5ODIxMDIyNjc4MkIzRAorOjEwNEIwMDAwMTVFMDAxMzY4RkE3MDAyMDNDMTg4MDAwOEYxMDBFMTQ4RQorOjEwNEIxMDAwM0MwNTgwMDBBRjEwMEUxMDhGMTkwRTFDQUYxOTBFMTgzNworOjEwNEIyMDAwQUYwNjBFMDA4Q0IyMDAwMDMyNTUwMDA4MTJBMEZGRkQ0NworOjEwNEIzMDAwMDAwMDAwMDA5NEJGMEUwODAwQzA4ODIxMDAwMDkwMjFGMgorOjEwNEI0MDAwQTc5RjAwNDA4Q0E2MEUwNDI0MTMwMDAxQUY4NjAwMzhGNgorOjEwNEI1MDAwOTc2OTAwMTAzMTM1RkZGRjhFOEMwMDAwMDE5MTIwMjNGMgorOjEwNEI2MDAwMTA4MDAxMThBRTg0MDAwMDkzNjcwMDA4MTRFMDAwRDg5QworOjEwNEI3MDAwMDAwMDAwMDAwRTAwMDFCNDI0MDQwMDEwOEY4RTAwNDhENQorOjEwNEI4MDAwM0MwMzMyMDAwMDQwMjgyMTMxQzYwMEZGMDAwNjNDMDBGMworOjEwNEI5MDAwMDBFMzYwMjUyNUNEMDAwMUFGOEQwMDQ4QUM0QzAwMDAzRQorOjEwNEJBMDAwOTM2MjAwMDk5NzY0MDAxMjkzN0YwMDBBMzA0QTAwRkY2NQorOjEwNEJCMDAwMzA4QkZGRkYwMTRCNDgyMTAwMDlDQzAwMzNGMDAwRkY5MAorOjEwNEJDMDAwMDMzMEMwMjVBQ0I4MDAwNDhGOEYwMDQ4OTc4ODAwNDBBMAorOjEwNEJEMDAwMzEwMzIwMDAxMDYwMDEwM0FDQUYwMDA4OTc2RjAwMTI5MgorOjEwNEJFMDAwMzFFOEZGRkYwNjQwMDEwMUFDQTgwMDBDOTc5MDAwNDA5RgorOjEwNEJGMDAwMzIwNTAwMDgxNEEwMDAwMjI2MjgwMDA2MjYyODAwMDIxQworOjEwNEMwMDAwM0MwNDgwMDA5NDhCMEUxNDhDODUwRTFDOEY2NzAwMDQ2RQorOjEwNEMxMDAwOTM2QTAwMDIzMTY0RkZGRjMxNDkwMEZGQUZBOTAwMTAyMQorOjEwNEMyMDAwOEY3RjAwMTRBRkE4MDAxOEFGQkYwMDE0MEUwMDAxOUFDOAorOjEwNEMzMDAwMDAwMDAwMDAyNDA0MDAxMDBFMDAwMUM4MDAwMDAwMDA2NQorOjEwNEM0MDAwOEU5MjAwMDAxNjQwMDAwNTAwMDAwMDAwOEY3OTAwMTRDRAorOjEwNEM1MDAwMjQwNUZGQkYwMzI1QTAyNEFGNzQwMDE0OEY2OTAwMEM0NgorOjEwNEM2MDAwMDEzNUY4MjFBRjdGMDAwQzkzNzUwMDA4MTZBMDAwMDhFRAorOjEwNEM3MDAwMDAwMDAwMDAxMjYwMDAwNjAwMDAwMDAwOEY2QjAwMTRBRQorOjEwNEM4MDAwM0MwQ0VGRkYzNTg0RkZGRTAxNjQ1MDI0QUY2QTAwMTQzMgorOjEwNEM5MDAwQTM3MzAwMDg4RkE3MDAyMDBBMDAwMzE2MDIyMDIwMjExQQorOjEwNENBMDAwQUVEMTBFMDAwQTAwMDFGODNDMDU4MDAwMTRFMEZGMjE5RgorOjEwNENCMDAwMzBCOUEwNDAwRTAwMDE2MDAwMDBBMDIxMkU5MTAwMDEzQgorOjEwNENDMDAwMDIzN0IwMjUxMkMwMDAxNzhGQkYwMDQ4OEY4NTAwM0MwNworOjEwNENEMDAwMjQxNzBGMDAxMEI3MDBDRDNDMDQ4MDAwOEM5OTAxNzg5OAorOjEwNENFMDAwMDcyMEZGRkUyNDE1MEYwMDUwQjUwMEVCM0MwNDgwMDBBOAorOjEwNENGMDAwOEM4OTBFMTQyNDA1MDI0MDNDMTQxMDAwQUM4OTAxNDQzOAorOjEwNEQwMDAwOEM5RjBFMUNBQzlGMDE0OEEwODAwMTUyQTQ4MDAxNUFDOAorOjEwNEQxMDAwQUM4MDAxNjBBNDgwMDE1OEFDODUwMTU0QUM5NDAxNzg0QQorOjEwNEQyMDAwOEZCRjAwNDg4RkI3MDA0NDhGQjYwMDQwOEZCNTAwM0M1RQorOjEwNEQzMDAwOEZCNDAwMzg4RkIzMDAzNDhGQjIwMDMwOEZCMTAwMkNBNQorOjEwNEQ0MDAwOEZCMDAwMjgwM0UwMDAwODI3QkQwMDUwOEY5MTAwMzg4NQorOjEwNEQ1MDAwOTc5MzAwNDAzQzEyODAwMDAyMjBBODIxMzI2QTAwNDA1NAorOjEwNEQ2MDAwMTU0MEZGN0QwMDAwOTgyMTk3NkIwMDEwOEY4NTAwMzg1QgorOjEwNEQ3MDAwMzE2MkZGRkYxMDQ1MDBBMjAwMDAyMDIxMDA4MEEwMjEyOQorOjEwNEQ4MDAwMTA4MDAwRTUwMEUwODgyMTE2MjBGRUQyMDAwMDAwMDAxRgorOjEwNEQ5MDAwMEEwMDAyRTcyRTkxMDAwMTNDMDM4MDAwOEM3RjAxNzgxRAorOjEwNERBMDAwMDdFMEZGRkUyNDA0MDgwMDhGODYwMDAwQUM2NDAxNzg1MQorOjEwNERCMDAwM0MwMzgwMDA5NDZDMDA4QTMxOEJGRkZGMDE2NjUwMjMxNgorOjEwNERDMDAwMjU0OUZGRkYzMTI4MUZGRjJEMDIwMDA4MTQ0MEZGRjk3RAorOjEwNEREMDAwMDAwMDAwMDA4RjhFMDA0ODM0NkY0MDAwOEY4MzAwM0MzRAorOjEwNERFMDAwMDBFMEEwMjEyNDBEMEYwMDI1QzcwMDAxQUY4NzAwNDg3NworOjEwNERGMDAwMDBDRjMwMjEwMjM0ODgyMzNDMDg4MDAwMzFENTAwRkZFOQorOjEwNEUwMDAwMTA2RDAwMDUyNDA3MDAwMTkzOTMwMDQyMzI3MjAwMDFFNworOjEwNEUxMDAwMDAxMjgyNDAzNjA3MDAwMTAwMTUxNDAwM0MwOTAxMDAxMQorOjEwNEUyMDAwMDA0OTIwMjVBQ0M0MDAwMDhGOUYwMDQ4MzBCOTAwMzZFRgorOjEwNEUzMDAwMzBCODAwMDhBQ0RGMDAwNDEzMDAwMDkwMDBGOTk4MjU5QQorOjEwNEU0MDAwOTUwNzBFMEE4RjhFMDAwMDNDMDM4MTAwMzBFREZGRkZCNgorOjEwNEU1MDAwMjVDQjAwMDgwMUEzMjgyNTNDMEMxMDAwMzE2QTFGRkY1OAorOjEwNEU2MDAwMjY5MjAwMDYyNDA2MDAwRUFEMDUwMTYwMDI2Qzk4MjUwRQorOjEwNEU3MDAwQTUwNjAxNUFBRjhBMDAwMEE1MTIwMTU4MTYyMDAwMDhBNQorOjEwNEU4MDAwM0MxMDgwMDA4Rjk5MDAzQzI0MTgwRjAwNTMzODAwMDIxQQorOjEwNEU5MDAwMjQxNzAwMDEzNjczMDA0MDBFMDAwMTU5M0MxMDgwMDBCOQorOjEwNEVBMDAwOEUxRjBFMTQwMjQwMjAyMUFFMUYwMTQ0OEUxMjBFMUNENAorOjEwNEVCMDAwQUUxMjAxNDhBMjE1MDE1MkFFMTMwMTU0MEUwMDAxNjc1MworOjEwNEVDMDAwM0MxNTEwMDBBRTE1MDE3ODBBMDAwMzE5MDAwMDAwMDAxRgorOjEwNEVEMDAwOTM3ODAwMDk5NzYzMDAxMjkzNjgwMDBCMzMwRjAwRkY2QgorOjEwNEVFMDAwMDFFMzM4MjEzMTAyMDBGRjAwRTI3MDIxMjVEMDAwMEFFMQorOjEwNEVGMDAwMzIxMEZGRkYwRTAwMDFCNDAyMDAyMDIxOEY4NjAwNDgwRgorOjEwNEYwMDAwM0MxOTQxMDAzQzA3ODAwMDI0Q0QwMDAxQUY4RDAwNDhEMgorOjEwNEYxMDAwOTM2QzAwMDk5NzY0MDAxMjMwQzYwMEZGMzE4QTAwRkZDRAorOjEwNEYyMDAwMzA4QkZGRkYwMTRCNDgyMTAwMDYyQzAwMjUzRjAwMDI3QgorOjEwNEYzMDAwMDBCRkMwMjUwMzE5NzgyNUFDNEYwMDAwOEY2ODAwMEMxNgorOjEwNEY0MDAwOTRFRTBFMTQwMTEyMTgyNUFDNDMwMDA0OENFNTBFMUNERgorOjEwNEY1MDAwOEY2NzAwMDQ5MzZEMDAwMjMxQzRGRkZGMzFBQzAwRkY4NgorOjEwNEY2MDAwQUZBQzAwMTA4RjYyMDAxNEFGQjEwMDE4MEUwMDAxOUFCMAorOjEwNEY3MDAwQUZBMjAwMTQwQTAwMDJDNTAyMDAyMDIxQUY2MDAwMDRBNQorOjEwNEY4MDAwQTM2MDAwMDI5NzhEMDA0MDMxQUMyMDAwMTU4MEZFQUI3RAorOjEwNEY5MDAwMDAwMDMwMjFBNzYwMDAxMjk3OTAwMDQwOTM3ODAwMEEyQgorOjEwNEZBMDAwM0MwMzgwMDAzMjE5MUYwMDAwMTk3OTgzMDFGODQwMjE2OQorOjEwNEZCMDAwMjUwNzAwMjhBMzY3MDAwOTk0NkUwRTBDMEEwMDAyNUUwNAorOjEwNEZDMDAwQTc2RTAwMTA4RjZFMDAxNDM1Q0QwMDQwMEUwMDAxNTkwMQorOjEwNEZEMDAwQUY2RDAwMTQwQTAwMDI5MTAwMDAwMDAwMEEwMDAzMTZFMQorOjEwNEZFMDAwMDAwMDIwMjEwNjQxRkYwMUFDQTAwMDBDOENCODAwMEM5MQorOjEwNEZGMDAwM0MxOTgwMDAwMzE5OTAyNTBBMDAwMkIyQUNCMjAwMENFMworOjEwNTAwMDAwMDAwMDkwMjEwQTAwMDI4RDI0MTMwMDAxMTI4MDAwMDU4NworOjEwNTAxMDAwM0MwRDgwMDA5NUE2MEUwODMwRDMwMDQwMTI2MDAwNDI3RgorOjEwNTAyMDAwMDAwMDAwMDA4QzkwMDE3ODA2MDBGRkZFMDAwMDAwMDBFOAorOjEwNTAzMDAwOTQ5MjBFMTAzQzAzMDUwMDI0MDcyMDAwMzI1OEZGRkYxNQorOjEwNTA0MDAwMDMwMzc4MjVBQzhGMDE0QzhDODgwRTE0M0MwRTEwMDBBNQorOjEwNTA1MDAwQUM4ODAxNDQ4QzgyMEUxQ0FDODIwMTQ4QTA4MDAxNTJCNQorOjEwNTA2MDAwQTQ4MDAxNUFBQzgwMDE2MEE0ODAwMTU4QUM4NzAxNTQyRgorOjEwNTA3MDAwQUM4RTAxNzgwQTAwMDJFRTNDMDQ4MDAwOEY5MDAwMDBBNAorOjEwNTA4MDAwMjY5MjAwMDJBNTEyMDE1ODI2MEYwMDA4MzFFODFGRkZFMgorOjEwNTA5MDAwMEEwMDAzNTZBRjg4MDAwMEFDODAwMTRDMTI4MDAwMTk1MgorOjEwNTBBMDAwMDAwMDAwMDA4QzhBMEUxMEFDOEEwMTQ0OEM4MzBFMTgxQworOjEwNTBCMDAwM0MwQzgwMDAyNDE2MDA0MEFDODMwMTQ4OEZCRjAwNDhBMAorOjEwNTBDMDAwQTE4MDAxNTI4RkI3MDA0NEE1ODAwMTVBOEZCNTAwM0NFMgorOjEwNTBEMDAwQUQ4MDAxNjA4RkI0MDAzOEE1ODAwMTU4OEZCMzAwMzREMworOjEwNTBFMDAwQUQ5NjAxNTQ4RkIyMDAzMDhGQjYwMDQwOEZCMTAwMkNDNgorOjEwNTBGMDAwOEZCMDAwMjgzQzA0MTAwMDI3QkQwMDUwMDNFMDAwMDhEQQorOjEwNTEwMDAwQUQ4NDAxNzg4QzhCMEUxNEFDOEIwMTQ0OEM4MzBFMUMwNworOjEwNTExMDAwMEEwMDAzRTQzQzBDODAwMDBFMDAwMTYwMkU5MTAwMDFBNworOjEwNTEyMDAwMEEwMDAyRTgwMjM3QjAyNTAwMDAwMDAwMDAwMDAwMEQ3MAorOjEwNTEzMDAwMDAwMDAwMDAyNDAwMDMzQTBBMDAwM0MwM0MwNDgwMDA4MQorOjEwNTE0MDAwMjdCREZGRTBBRkJGMDAxQzNDMUYyMEZGM0MwNzYwMDBGNQorOjEwNTE1MDAwM0MwOTgwMDAyNDAyMDAxMDM3RjlGRkZEQUNFMjMwMDg2MgorOjEwNTE2MDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUQzOTBFMDBFRgorOjEwNTE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyRgorOjEwNTE4MDAwMDAwMDAwMDAzQzE4MDBGRjM3MTJGRkZEQUQzMjBFMDA5QQorOjEwNTE5MDAwM0MwQjYwMDQ4RDcwNTAwMDI0MTFGRjdGM0MwRTAwMDIxOAorOjEwNTFBMDAwMDIxMTc4MjQzNUVDMzgwQzM1Q0QwMTA5QUNFRDRDMThFMgorOjEwNTFCMDAwMjQwQTAwMDlBRDZDNTAwMDhDRTgwNDM4QUQyQTAwMDhDMAorOjEwNTFDMDAwQUQyMDAwMTQ4Q0U1NEMxQzMxMDZGRkZGMzhDNDJGNzE1NAorOjEwNTFEMDAwMDAwNTFFMDIzMDYyMDAwRjI0ODZDMEIzMTA0MDAwMDc5NQorOjEwNTFFMDAwQUY4MjAwMDg4Q0U1NEMxQzNDMDkwMDFGMzUyOEZDMDBGMAorOjEwNTFGMDAwMDBBODE4MjQwMDAzMjFDMkFGODQwMDA0OENGMTA4MDgyMQorOjEwNTIwMDAwM0MwRjU3MDkyNDEyRjAwMDAyMzI3MDI0MzVGMDAwMTBEMAorOjEwNTIxMDAwMDFEMDYwMjYwMUNGNjgyNjJEQUEwMDAxMkQ4QjAwMDE0OAorOjEwNTIyMDAwMDE0QjM4MjU1MEUwMDAwOUEzODAwMDBDM0MwMjYwMUNCMworOjEwNTIzMDAwOEM1OTAwMDgyNDFGMDAwMUEzOUYwMDBDMzMzODdDMDAwOAorOjEwNTI0MDAwQTc5ODAwMTBBNzgwMDAwRUEzODAwMDBEQUY4MDAwNDgzMworOjEwNTI1MDAwMTRDMDAwMDNBRjgwMDAwMDNDMDY2MDAwQUNDMDQ0MkNDQQorOjEwNTI2MDAwMEUwMDA0QjYzQzEwODAwMDBFMDAwRERGMDAwMDAwMDBCMAorOjEwNTI3MDAwM0MxMTA4MDAyNjMxMzhDODNDMTIwODAwMjY1MjM5NDgzMworOjEwNTI4MDAwOEUwNTAwMDAzOEEzMDAwMTMwNjQwMDAxMTQ4MEZGRkM4QgorOjEwNTI5MDAwMDAwMDAwMDA4RTA2MDEwMDNDMEM4MDBBMjQwQUZGODBGQQorOjEwNTJBMDAwMjRDNzAyNDAzMEVCMDA3RjAxNkM0ODIxMDBFQTQwMjQxMworOjEwNTJCMDAwQUUwNjAwMjBBRjg5MDA0NEFFMDgwMDI0M0MwMzgwMDAwNQorOjEwNTJDMDAwQUY4NjAwM0M4QzZEMDE3ODA1QTBGRkZFMjQxOTA4MDAxNAorOjEwNTJEMDAwQUM3OTAxNzg5MDc4MDEwOEEzOTgwMDQyOTM4RjAwNDIzRQorOjEwNTJFMDAwMzFFRTAwMDExMUMwMDAwRjI0MEQwRDAwMjRDMkY4MDBBMgorOjEwNTJGMDAwMkM1RjAzMDExM0UwMDAxQzAwMDYyOUMyMjRBM0ZGRjA2OQorOjEwNTMwMDAwMDAwMzIwNDIwMDA0MzE0MDBFMDAwMUNGMDBEMUQ4MjExQgorOjEwNTMxMDAwM0MwNDQwMDAzQzA2ODAwMEFDQzQwMTM4MEEwMDA0NTczRAorOjEwNTMyMDAwMDAwMDAwMDAxMENEMDAyNjI0MEUwRjAwMTBDRTAwMkEzMQorOjEwNTMzMDAwM0MwMjgwMDgzNDVGMDA4MDkzRjkwMDAwMjQwRjAwNTA4NQorOjEwNTM0MDAwMzMzODAwRkYxNzBGRkZGMzNDMDQ0MDAwMEUwMDA5MTIzMgorOjEwNTM1MDAwMDAwMDAwMDAzQzA0NDAwMDNDMDY4MDAwQUNDNDAxMzg2MgorOjEwNTM2MDAwMEEwMDA0NTcwMDAwMDAwMDhGODMwMDA0MDBBMzQwMkJCNAorOjEwNTM3MDAwMTUwMDAwMEI4RjhCMDAwODAwNkI1MDIxMjU0N0ZGRkZBNQorOjEwNTM4MDAwMDBFNTQ4MkIxNTIwMDAwNjAwQTM2MDIzMDAwQzI5NDBFRgorOjEwNTM5MDAwMEUwMDAxQ0YwMEIyRDgyMTBBMDAwNDdDM0MwNDQwMDA3QQorOjEwNTNBMDAwMDAwMDAwMDAwMDAwMDAwRDAwMDAwMDAwMjQwMDAzQUQxQworOjEwNTNCMDAwMEUwMDAxQ0YwMDAwMDAwMDBBMDAwNDdDM0MwNDQwMDAwNQorOjEwNTNDMDAwM0MxQjA4MDAyNzdCM0E0ODBFMDAwMUNGMDAwMDAwMDA3QworOjEwNTNEMDAwMEEwMDA0N0MzQzA0NDAwMDNDMUIwODAwMjc3QjNBNjgyMAorOjEwNTNFMDAwMEUwMDAxQ0YwMDAwMDAwMDBBMDAwNDdDM0MwNDQwMDBENQorOjEwNTNGMDAwMDAwNDExQzAwM0UwMDAwODI0NDIwMjQwM0MwNDA4MDBGRAorOjEwNTQwMDAwMjQ4NDNBQUMyNDA1MDAxQTBBMDAwMDZEMDAwMDMwMjEwMworOjEwNTQxMDAwMjdCREZGRTBBRkJGMDAxQ0FGQjIwMDE4QUZCMTAwMTQ1MgorOjEwNTQyMDAwQUZCMDAwMTAzQzEwODAwMDkyMEIwMTA5MjQxMkZGODBFNQorOjEwNTQzMDAwMEUwMDA0QjMzMTY0MDA3RjhGOTEwMDNDMDA1MTUwMjE3NQorOjEwNTQ0MDAwMDE1MjQwMjRBRTA4MDAyNDkyMDMwMTA5MEUwMDA0QjM2NworOjEwNTQ1MDAwMzA2NDAwN0YyNDA2MDA4MDI0MDcwMEMwMjQwNDAwNDAzQworOjEwNTQ2MDAwQUUwMDA4MTBBRTA0MDgxNEFFMDYwODE4QUUwNzA4MUNGQgorOjEwNTQ3MDAwOTIwQzAxMDkwMDUxRjgyMTMzRjgwMDdGM0MxOTgwMEE5MQorOjEwNTQ4MDAwMDMxOTEwMjEzMTg0MDA3RjBFMDAwNEIzQUY4MjAwNDQ2MQorOjEwNTQ5MDAwOEUxMTAxMDAzQzBDMDA4MDM1ODUwMDAxMDIyMjc4MjEyQworOjEwNTRBMDAwMDFGMjQ4MjRBRTA5MDgwNDhFMEUwMTAwMzU5ODAwMDI2RQorOjEwNTRCMDAwMzYwOTA5MDAwMUMyNjgyMTMxQUIwMDc4MDE2NTUwMjUyOQorOjEwNTRDMDAwQUUwQTA4MjA4RTA1MDEwMDhFMDgwMTAwMzYwNTA5ODAwRAorOjEwNTREMDAwMDEwMjE4MjEyNDY0MDA0MDAwOTIzMDI0QUUwNjA4MDgxRQorOjEwNTRFMDAwOEUwNzAxMDAwMEUyRjgyMTI3RjkwMDQwMzMzMjAwNzhFRQorOjEwNTRGMDAwMDI1ODg4MjVBRTExMDgyNDhFMDQwMTAwOTUyRjAwMEM1NworOjEwNTUwMDAwOEZCRjAwMUM4RkIyMDAxODMxRUVGRkZGMDAwRTY5QzA4NAorOjEwNTUxMDAwQUUwRDA4MDBBRTBDMDgyODk1MkIwMDBDOEZCMTAwMTRCRQorOjEwNTUyMDAwMzE2QUZGRkYwMDBBNDFDMEFFMDgwMDJDOENBMzAwNTA3NgorOjEwNTUzMDAwOEZCMDAwMTA4Q0EyMDAzQzhEMjQwMDA0OENBNjAwMUNBRgorOjEwNTU0MDAwOENBNzAwMzgyN0JEMDAyMEFGODMwMDYwQUY4MjAwNTBEOQorOjEwNTU1MDAwQUY4NDAwNENBRjg2MDA1ODAzRTAwMDA4QUY4NzAwNUNDMgorOjEwNTU2MDAwM0MwQTA4MDA5MTRBM0FEMTNDMDkwODAwOTUyOTNBQ0FGOAorOjEwNTU3MDAwM0MwNTExMDAwMDBBM0MwMDI1MjgwMDAyMDBFODMwMjUwNworOjEwNTU4MDAwMDBDNTE4MjUyNDgyMDAwOEFDODMwMDAwMDNFMDAwMDg1MQorOjEwNTU5MDAwQUM4MDAwMDQzQzA5ODAwMDM1MjgwOTAwOTEwNzAwMTEwNworOjEwNTVBMDAwMjQwMjAwMjgwMDgwNTAyMTMwRTMwMEZGMDBBMDY4MjE4MQorOjEwNTVCMDAwMDBDMDYwMjExMDYyMDAwMjM0MEI4NkREMjQwQjA4MDA1RAorOjEwNTVDMDAwM0MwNzgwMDAzNEUyMEE5QTk0NDMwMDAwMzRGODBBOUNCNQorOjEwNTVEMDAwMzRFNjBBQTAzMDc5RkZGRkFENTkwMDAwOEYwRjAwMDBCQworOjEwNTVFMDAwMzRFODBBODAyNDA0MDAwMUFENEYwMDA0OENDRTAwMDA5MgorOjEwNTVGMDAwQUQ0RTAwMDg5MTA1MDAxOTMwQTMwMDAzMTA2NDAwNDY2OQorOjEwNTYwMDAwMjg2OTAwMDIxNTIwMDBCNTI0MDQwMDAyMTA2NDAwOTBFRgorOjEwNTYxMDAwMjQwNTAwMDMxMDY1MDA5QjM0RTQwQUE0M0MwOTA4MDAzQgorOjEwNTYyMDAwOTUyOTNBQzAyNDA3MDgwMDUxNjcwMDUwM0MxODgwMDBCMworOjEwNTYzMDAwM0MwMjgwMDAzNDU5MDkwMDkzMjgwMDEyOTMyRTAwMTk2RgorOjEwNTY0MDAwMzQ1ODA5ODAzMTBGMDBGRjhGMDYwMDI4MDFFQzE4MjEyMworOjEwNTY1MDAwMDAwMzM4ODAzMTI0RkZGRjMxQ0IwMEZGMDBFNDEwMjEyQworOjEwNTY2MDAwMDAwQjJEMDAwMEE2QzAyNTAwMDI3QzAwM0MwODYwMDA1NQorOjEwNTY3MDAwMDMwODE4MjUzNUU5MDZGRkFENDMwMDAwQUQ0OTAwMDRENQorOjEwNTY4MDAwOEYyRTAwMkMzQzAzODAwMDM0NzgwOTNDQUQ0RTAwMDg3RQorOjEwNTY5MDAwOEYyNzAwMzAyNTQ5MDAyODM0NkUwOTAwQUQ0NzAwMENFMworOjEwNTZBMDAwOEYyQjAwMzRBRDRCMDAxMDhGMjQwMDM4QUQ0NDAwMTQxNAorOjEwNTZCMDAwOEYyNTAwMUNBRDQ1MDAxODhGMjIwMDIwQUQ0MjAwMUMzNAorOjEwNTZDMDAwOEYyNjAwMjQyNTIyMDAxNEFENDYwMDIwOEYyODAwMjhCNAorOjEwNTZEMDAwQUQ0ODAwMjQ4RjBGMDAwMEFEMkQwMDA0QUQyRjAwMDA1OQorOjEwNTZFMDAwOEM2NDAxMENBRDI0MDAwODkxQzcwMDEyM0MwNTA4MDAzMQorOjEwNTZGMDAwOTBBNTNBRDBBRDIwMDAxMDMwRUIwMEZGMDE2QzMwMjFCNgorOjEwNTcwMDAwMDAwNjZGMDAwMDA1Q0MwMDAxQjk2MDI1MzU4QUZGRkY1NworOjEwNTcxMDAwMDNFMDAwMDhBRDJBMDAwQzNDMDkwODAwOTUyOTNBQzBCNgorOjEwNTcyMDAwM0MxOTA4MDA5NzM5M0FDQTM0RTIwQUE0M0MwNjA4MDAzQQorOjEwNTczMDAwOTRDNjNBQkM5NDRGMDAwMDMxMjNGRkZGMDMyM0MwMjFERAorOjEwNTc0MDAwMDMwNjcwMjMwMDBGM0MwMDI1QzhGRkYyMDBFODI4MjU1RgorOjEwNTc1MDAwMjQwNzA4MDBBRDQ1MDAwQ0FENDAwMDEwQUQ0QjAwMTQwRgorOjEwNTc2MDAwMTU2N0ZGQjMyNTRBMDAxODNDMTg4MDAwMzcwODA5MDA2OAorOjEwNTc3MDAwOTEwRjAwMTE5MTA3MDAxOTM3MDMwQTgwMzFFRTAwRkZFNQorOjEwNTc4MDAwM0MxOTA4MDA5NzM5M0FDNjk0NkYwMDJBMDAwRTU4ODJENworOjEwNTc5MDAwMzBFNDAwRkY5Nzg3MDA1NDAwMEIxNjAwMDAwNDJDMDAzMworOjEwNTdBMDAwMzEyNkZGRkYwMzI2QzAyMTAwNDU0ODI1MDEzODcwMjUxQQorOjEwNTdCMDAwMDFFNzU4MjEzQzAzNDAwMDAxQzMyMDI1MDAwQjJDMDBDOQorOjEwNTdDMDAwQUQ0NDAwMDBBRDQ1MDAwNDkxMDIwMDE4M0MwNjAwMDZGRgorOjEwNTdEMDAwM0MwMzgwMDAwMDAyQ0UwMDAzMjZDMDI1QUQ1ODAwMDgxRgorOjEwNTdFMDAwOEQwRjAwMkMzNDc4MDkzQzI0RTkwMDAxQUQ0RjAwMENFQQorOjEwNTdGMDAwOEQwQjAwMUMzMTJFN0ZGRjI1NDkwMDE0QUQ0QjAwMTA4RQorOjEwNTgwMDAwOEYwRjAwMDBBRDJEMDAwNEE3OEUwMDU0QUQyRjAwMDBCNworOjEwNTgxMDAwOEM2NDAxMEMzNDZFMDkwMDI1MjIwMDE0QUQyNDAwMDhBQworOjEwNTgyMDAwOTFDNzAwMTIzQzA1MDgwMDkwQTUzQUQwQUQyMDAwMTBBOQorOjEwNTgzMDAwMzBFQjAwRkYwMTZDMzAyMTAwMDY2RjAwMDAwNUNDMDA0QQorOjEwNTg0MDAwMDFCOTYwMjUzNThBRkZGRjAzRTAwMDA4QUQyQTAwMEM4RQorOjEwNTg1MDAwMzRFOTBBQTQ5NTI0MDAwMDk1MDIwMDI4M0MwOTA4MDBCOAorOjEwNTg2MDAwOTUyOTNBQzAwMDA0MUMwMDAwMDJDQzAwMzQ3ODgxMDA2NQorOjEwNTg3MDAwMDMyQjc4MjVBRDU4MDAwQ0FENEYwMDEwMEEwMDA1NDBGMQorOjEwNTg4MDAwMjU0QTAwMTQzQzA5MDgwMDk1MjkzQUMwM0MwNTA4MDA0NworOjEwNTg5MDAwOTRBNTNBQ0EzQzA2MDgwMDk0QzYzQUJDOTQ5OTAwMDAwNAorOjEwNThBMDAwMzEyM0ZGRkY5NTE4MDAyODAwQTMxMDIxMDA0Njc4MjMxQworOjEwNThCMDAwMDAxOTNDMDAwMDE4NDQwMDI1RUVGRkVFMDEwRTI4MjVEQgorOjEwNThDMDAwMzRFNDgxMDBBRDQ0MDAwQ0FENDUwMDEwQUQ0MDAwMTQzRgorOjEwNThEMDAwQUQ0QjAwMTgwQTAwMDU0MDI1NEEwMDFDMTQ2MEZGNEYxQworOjEwNThFMDAwMzRFNjBBQTQ5NENFMDAwMDNDMDkwODAwOTUyOTNBQzA4OQorOjEwNThGMDAwMDAwRTQ0MDAwMTBCMzgyNUFENDcwMDBDMEEwMDA1NDA5RQorOjEwNTkwMDAwMjU0QTAwMTAwM0UwMDAwODI0MDIwN0QwMjdCREZGRTA2RAorOjEwNTkxMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMUNBMQorOjEwNTkyMDAwMEUwMDAwNEQwMDgwODgyMThGODgwMDUwOEY4NzAwNEMyQQorOjEwNTkzMDAwM0MwNTgwMDgzNEIyMDA4MDAxMTEyODIxM0MxMDgwMDAxMQorOjEwNTk0MDAwMjQwMjAwODAyNDAzMDBDMDAwQTcyMDIzQUUwMjA4MTgxMAorOjEwNTk1MDAwM0MwNjgwMDhBRTAzMDgxQzE4ODAwMDA0QUY4NTAwNTA4OAorOjEwNTk2MDAwQUNDNTAwMDQ4Q0M5MDAwNEFGODkwMDRDMTIyMDAwMDlBQQorOjEwNTk3MDAwMzYwNDA5ODAwRTAwMDVGODAwMDAwMDAwOTI0QzAwMjc1NAorOjEwNTk4MDAwOEUwQjAwNzQwMTgyNTAwNDAxNEIzMDIxQUU0NjAwMEM5NgorOjEwNTk5MDAwMzYwNDA5ODA4QzhFMDAxQzhGOEYwMDU4MDFDRjY4MjMzRAorOjEwNTlBMDAwMTlBMDAwMDQ4RkJGMDAxQzhDOTAwMDFDQUY5MDAwNTgwMQorOjEwNTlCMDAwOEZCRjAwMUM4RkIyMDAxODhGQjEwMDE0OEZCMDAwMTA4MQorOjEwNTlDMDAwMEEwMDAwNEYyN0JEMDAyMDhGODYwMDYwOEY4MzAwNTBBMworOjEwNTlEMDAwOEY4MjAwNEMzQzA1ODAwODM0QTQwMDgwQUM4NjAwNTBDNworOjEwNTlFMDAwQUM4MzAwM0MwM0UwMDAwOEFDQTIwMDA0M0MwMzA4MDBDOAorOjEwNTlGMDAwOEM2MzAwNTQyN0JERkZGODMwODQwMEZGMjQ2MjAwMDE0RgorOjEwNUEwMDAwMzBBNTAwRkYzQzAxMDgwMEFDMjIwMDU0MzBDNjAwRkY2NgorOjEwNUExMDAwM0MwNzgwMDA4Q0U4MDE3ODA1MDBGRkZFM0MwQTdGRkYxMAorOjEwNUEyMDAwQTNBNDAwMDM4RkE0MDAwMDM1NDlGRkZGMDA4OTE4MjRCOAorOjEwNUEzMDAwMDAwNjQ3QzAwMDY4MTAyNUFGQTIwMDAwOTBGOTAxMEFENworOjEwNUE0MDAwQTNBMDAwMDIzQzE4ODBGRkEzQjkwMDAxOEZBRTAwMDBBNAorOjEwNUE1MDAwMzBBRDAwN0YzNzBGRkZGRjAxQ0Y1ODI0MDAwRDY2MDBFNworOjEwNUE2MDAwM0MwOTAwMjAwMTZDNTAyNTM1MjYyMDAwMjQwNUZGODBDQworOjEwNUE3MDAwM0MwNDEwMDAyN0JEMDAwOEFDRUEwMTRDQUNFNjAxNTQyMAorOjEwNUE4MDAwQTRFMDAxNThBMEU1MDE1MjAzRTAwMDA4QUNFNDAxNzg2RAorOjEwNUE5MDAwMzA4ODAwRkYzQzAzODAwMDMwQTQwMEZGOEM2MjAxNzg1NgorOjEwNUFBMDAwMDQ0MEZGRkUwMDAwMDAwMDNDMDM4MDAwMzQ2NjBBMDA1MgorOjEwNUFCMDAwOENDQTAwMjAzNDY3MDk4MDAwMDQ0ODJCQUM2QTAxNDQ3QQorOjEwNUFDMDAwOENDNTAwMjQwMDA5MTU0MEFDNjUwMTQ4QTA2ODAxNTA1MAorOjEwNUFEMDAwOTBFNDAwNENBMDY0MDE2RDAzRTAwMDA4QTQ2MDAxNTg0QworOjEwNUFFMDAwMjdCREZGRTgzMDg0MDBGRkFGQkYwMDEwMEUwMDA2NUI0QgorOjEwNUFGMDAwMzBBNTAwRkY4RjgzMDA1MDhGQkYwMDEwM0MwNTgwMDA1MQorOjEwNUIwMDAwMzQ0NjAwNDAyNDA0RkY5MDNDMDIxMDAwMjdCRDAwMThEQQorOjEwNUIxMDAwQUNBMzAxNENBMEE0MDE1MkFDQTYwMTU0MDNFMDAwMDhDMAorOjEwNUIyMDAwQUNBMjAxNzgyN0JERkZFMDNDMDg4MDA4QUZCRjAwMUM5NQorOjEwNUIzMDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwMzUxMDAwODA0NAorOjEwNUI0MDAwOEUwNjAwMTgzQzA3ODAwMDMwOTIwMEZGMDBDNzIwMjUxOQorOjEwNUI1MDAwQUUwNDAwMTgwRTAwMDA0RDMwQjEwMEZGOTIwMzAwMDVBNgorOjEwNUI2MDAwMzQ2MjAwMDgwRTAwMDA0RkEyMDIwMDA1MDI0MDIwMjEwRQorOjEwNUI3MDAwMEUwMDA2NkYwMjIwMjgyMTAyNDAyMDIxOEZCRjAwMUM0QQorOjEwNUI4MDAwOEZCMjAwMTg4RkIxMDAxNDhGQjAwMDEwMjQwNTAwMDVFQgorOjEwNUI5MDAwMjQwNjAwMDEwQTAwMDYzMjI3QkQwMDIwM0MwNTgwMDBEMworOjEwNUJBMDAwMzRBMzA5ODA5MDY2MDAwODMwQzIwMDA4MTA0MDAwMEYzRQorOjEwNUJCMDAwM0MwQTAxMDEzNTQ5MDgwQUFDODkwMDAwOENBODAwNzQzMAorOjEwNUJDMDAwQUM4ODAwMDQzQzA3MDgwMDkwRTczQUQwMzBFNTAwMTBBQworOjEwNUJEMDAwNTBBMDAwMDhBQzgwMDAwODNDMEQ4MDA4MzVBQzAwODA2NworOjEwNUJFMDAwOEQ4QjAwNThBQzhCMDAwODI0ODQwMDBDMDNFMDAwMDg2NworOjEwNUJGMDAwMDA4MDEwMjEwQTAwMDZCMjI0ODQwMDBDMjdCREZGRThCMworOjEwNUMwMDAwM0MwODgwMDBBRkIwMDAxMEFGQkYwMDE0MzUwNjA5ODAxQgorOjEwNUMxMDAwOTBDNzAwMDkyNDAyMDAwNjM1MDkwOTAwMzBFMzAwRkY5RgorOjEwNUMyMDAwMDA4MDgwMjEwMEEwNjAyMTI0MEIwMDA0MTA2MjAwNzkxNAorOjEwNUMzMDAwMjQwNzAwMDI5NENGMDA1QzNDMEUwMjA0MzFFREZGRkYwQworOjEwNUM0MDAwMDFBRTUwMjVBRTBBMDAwMDkwQzUwMDA4MzBBNDAwMjAyNworOjEwNUM1MDAwMTA4MDAwMDgwMDAwMDAwMDkwQzIwMDRFM0MxRjAxMDNBRAorOjEwNUM2MDAwMzdGOTAzMDAzMDU4MDBGRjAzMTkzMDI1MjQwQjAwMDhEMgorOjEwNUM3MDAwQUUwNjAwMDQ5MTM5MDAxMTkxMjYwMDEyOTEyNDAwMTEwMgorOjEwNUM4MDAwMzMzODAwRkYwMDE4NzA4MjMwQ0YwMEZGMDFDRjUwMjE2MQorOjEwNUM5MDAwMDE0QzY4MjEzMDg4MDBGRjMxQUFGRkZGMzkwMzAwMjgzQQorOjEwNUNBMDAwMDAwQTI4ODAxNDYwMDAyQjAyMDU0MDIzOTEyNDAwMTI3MgorOjEwNUNCMDAwM0MwRTgwMDAzNUQ5MDk4MDMwODUwMEZGMDBBQzE4MjFFQQorOjEwNUNDMDAwMDAwMzEwODAwMDRCRjgyMTAwMUY4NDAwMzYwOTA2RkZGNgorOjEwNUNEMDAwQUQwOTAwMDQzNUM5MDkwMDkxMjYwMDExOTEyRjAwMTI2OQorOjEwNUNFMDAwMDAwQkMwODI4RjJCMDAzNDMxRUQwMEZGOERDNDAxMENGRQorOjEwNUNGMDAwMDFBQzI4MjEwMEI4MTAyMTAxNjRGODIzMDAwNzg0MDBCQQorOjEwNUQwMDAwMDAwMjFGMDAwMDcwQzgyNTMzRTlGRkZGMzBDRjAwRkMwMAorOjEwNUQxMDAwMDMyOTcwMjUwMTU4MjAyMTAxRTg2ODIxMDAwNDUwODBFMgorOjEwNUQyMDAwQURBRTAwMEMwRTAwMDA0RDAxMEE4MDIxM0MwNzgwMDgzQQorOjEwNUQzMDAwMjQwQzAwMDQzNEVCMDA4MDBFMDAwMDRGQTE2QzAwMDkxRAorOjEwNUQ0MDAwMDIwMDEwMjE4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDg4NAorOjEwNUQ1MDAwMjdCRDAwMTg5MTI1MDAxMTkxMjMwMDE5M0MxODA4MDA1NworOjEwNUQ2MDAwOTcxODNBQzYzMEEyMDBGRjAwMDJGODgyMzA3MDAwRkY5OAorOjEwNUQ3MDAwMDAxRkNFMDAwMDEwNEMwMDAzMjkzMDI1MDBEODcwMjVFQworOjEwNUQ4MDAwM0MwRjQwMDAwMUNGNjgyNTNDMEU4MDAwQUQwRDAwMDBBNworOjEwNUQ5MDAwMzVDOTA5MDA5MTI2MDAxMTkxMkYwMDEyMzVEOTA5ODBDQgorOjEwNURBMDAwMDAwQkMwODIzMUVEMDBGRjhGMkIwMDM0OERDNDAxMEMzRAorOjEwNURCMDAwMDFBQzI4MjEwMEI4MTAyMTAxNjRGODIzMDAwNzg0MDBGOQorOjEwNURDMDAwMDAwMjFGMDAwMDcwQzgyNTMzRTlGRkZGMzBDRjAwRkM0MAorOjEwNUREMDAwMDMyOTcwMjUwMTU4MjAyMTAxRTg2ODIxMDAwNDUwODAyMgorOjEwNURFMDAwQURBRTAwMEMwRTAwMDA0RDAxMEE4MDIxM0MwNzgwMDg3QQorOjEwNURGMDAwMjQwQzAwMDQzNEVCMDA4MDBFMDAwMDRGQTE2QzAwMDk1RAorOjEwNUUwMDAwMDIwMDEwMjE4RkJGMDAxNDhGQjAwMDEwMDNFMDAwMDhDMworOjEwNUUxMDAwMjdCRDAwMTgwQTAwMDZDNDI0MDcwMDEyMjdCREZGRDBDMgorOjEwNUUyMDAwQUZCNTAwMjRBRkI0MDAyMEFGQjMwMDFDQUZCMDAwMTA3QQorOjEwNUUzMDAwQUZCRjAwMjhBRkIyMDAxOEFGQjEwMDE0M0MwNjgwMDAxRAorOjEwNUU0MDAwOTBDMzAxMEIzMDkzMDBGRjMwQjQwMEZGMzA2MjAwMzA4QworOjEwNUU1MDAwMDAwMEE4MjExMDQwMDA4MjAwMDA4MDIxMzRDNDA5ODA4NQorOjEwNUU2MDAwOTA4ODAwMDgwMDA4M0UwMDAwMDcyRTAzMDRBMDAwQTk0NworOjEwNUU3MDAwMjQwNDAwMDQ4Rjg3MDA1MDNDMDEwODAwQTAyNDNBRDA3RAorOjEwNUU4MDAwM0MwQzgwMDBBRDgwMDA0ODNDMDM4MDAwOTA2RTAxMEIwQworOjEwNUU5MDAwMzFDNTAwMjAxMEEwMDAwNzNDMEM4MDAwMzQ3ODA5ODAzOAorOjEwNUVBMDAwOTMxMjAwMDgwMDEyOEUwMDAwMTE3RTAzMDVFMDAwQUU4MAorOjEwNUVCMDAwM0MwMjgwMDg5MThCMDEwQjM1ODYwOTgwOTBDNDAwMDg1NAorOjEwNUVDMDAwMzE2QTAwNDAwMDBBNDgyQjMwODgwMDA4MjQxMTAwMDM4MgorOjEwNUVEMDAwMTUwMDAwMDIwMEU5OTAyMzAwMDA4ODIxM0MwMzgwMDBBNworOjEwNUVFMDAwMzQ3ODBBODAzNDZBMDkwMDk3MDcwMDJDOTE0NDAwMTEyNQorOjEwNUVGMDAwOTE0OTAwMTI5MzA1MDAxODMwOUYwMEZGMzEyODAwRkZFMAorOjEwNUYwMDAwMDIyODEwMjEwMDAyQzg4MDkzMEQwMDE4MDMzRjc4MjE1OQorOjEwNUYxMDAwMDFGMDcwMjEzMEIwMDBGRjAxRDAxODIxQTc4NzAwNTQ5NAorOjEwNUYyMDAwM0MwMTA4MDBBNDJFM0FDNjNDMDEwODAwQTQyMzNBQzg0QworOjEwNUYzMDAwMTVBMDAwMDMyNDZCMDAwQTAwMDAwMDBEMjQ2QjAwMEE2QQorOjEwNUY0MDAwMzE3MEZGRkYzQzAxMDgwMEE0MjMzQUNBM0MwMTA4MDA1RAorOjEwNUY1MDAwQTQyMDNBQzAzQzAxMDgwMEE0MjAzQUJDMEUwMDAxQjRDMQorOjEwNUY2MDAwMDIwMDIwMjEwRTAwMDUwRjAwNDAyMDIxMDA0MDIwMjFDQQorOjEwNUY3MDAwMDI0MDI4MjEwRTAwMDUxQzAyMjAzMDIxMEUwMDA2OUU0MgorOjEwNUY4MDAwMDA0MDIwMjExNkEwMDA1RjAwNDAyMDIxMEUwMDAxQzgyMworOjEwNUY5MDAwMDIwMDIwMjEzQzExMDgwMDkyMzEzQUQwMzIzNTAwMDMzMgorOjEwNUZBMDAwMTJBMDAwMTYzQzBBODAwODhGODcwMDUwM0MwRTgwMDgyMworOjEwNUZCMDAwMzVDRDAwODAyNEVDMDAwMUFEQUMwMDNDM0MwNTgwMDhGMAorOjEwNUZDMDAwOENBNjAwMDQwMTgwMjAyMTAwQ0M5MDIzMUE0MDAwMDJGRQorOjEwNUZEMDAwQUY4QzAwNTA4Q0E0MDAwNDBFMDAwNUY4QUNBNDAwMDRBMworOjEwNUZFMDAwM0MxOTgwMDA4RjM4MDA3NDNDMEY4MDA4MzVGMDAwODAyOQorOjEwNUZGMDAwMDA1ODI4MjFBRTA1MDAwQzNDMEE4MDA4MzU0MjAwODA3QworOjEwNjAwMDAwMDI2MDIwMjEwMjgwMjgyMUEwNDAwMDZCMEUwMDA2NUI2OAorOjEwNjAxMDAwM0MxMzgwMDA4Rjg0MDA1MDM0NUYwMDA2QUU2NDAxNEM1NgorOjEwNjAyMDAwOEY4ODAwNDgzQzE0MTAwMDhGQjUwMDI0MjUwOTAwMDExQQorOjEwNjAzMDAwQUY4OTAwNDg4RkIyMDAxOEEyNjgwMTUyOEZCMTAwMTRENgorOjEwNjA0MDAwQUU3RjAxNTQ4RkIwMDAxMEFFNzQwMTc4OEZCRjAwMjg2RQorOjEwNjA1MDAwOEZCNDAwMjA4RkIzMDAxQzAzRTAwMDA4MjdCRDAwMzA4MAorOjEwNjA2MDAwMzRDMzA5ODA5MDZGMDAwODAwMEY3NjAwMDAwRTZFMDNBNQorOjEwNjA3MDAwMDVBMDAwMzMzNEMyMDkwMDkwNTkwMDFCMjQxRjAwMTBGMgorOjEwNjA4MDAwM0MwMTA4MDBBMDNGM0FEMDMzMzgwMDAyMTMwMEZGN0VFNQorOjEwNjA5MDAwOEY4NzAwNTA4RjgzMDA1QzE0NjdGRjdDM0MwMzgwMDA3NworOjEwNjBBMDAwMEUwMDAwNEQwMDAwMDAwMDNDMDk4MDA4MzUyNTAwODBFRQorOjEwNjBCMDAwOTBBNDAwMDkyNDA3MDAxNjMwODgwMEZGMTEwNzAwMEQ4NgorOjEwNjBDMDAwMDAwMDAwMDA5MEE2MDAwOTNDMEMwODAwOTE4QzNBRDAxQQorOjEwNjBEMDAwMjQwQTAwMDgzMEM0MDBGRjM1OEIwMDAxM0MwMTA4MDA5MQorOjEwNjBFMDAwQTAyQjNBRDAxMDhBMDAyRjI0MEQwMDBBMTA4RDAwMjgxMgorOjEwNjBGMDAwMjQwMjAwMEMwRTAwMDA0RjAwMDAwMDAwMEEwMDA3NTlBNworOjEwNjEwMDAwOEY4NzAwNTAwRTAwMDZCNjAyMjAyODIxMEEwMDA3OUE0OQorOjEwNjExMDAwMDAwMDAwMDAzQzBCODAwODM1NkEwMDgwOEQ0NzAwNTQ2OQorOjEwNjEyMDAwOENDOTAxMEMxMTIwRkY1NEFGODcwMDUwMjQwNjAwMTRDNQorOjEwNjEzMDAwM0MwMTA4MDBBMDI2M0FEMDBBMDAwNzU4M0MwQzgwMDAxOQorOjEwNjE0MDAwOTA3MTAwMDgyNDEyMDAwMjNDMDEwODAwQTAzMjNBRDBFRAorOjEwNjE1MDAwMzIzMDAwMjAxMjAwMDAwQjI0MTUwMDAxOEY4NzAwNTAwMAorOjEwNjE2MDAwMEEwMDA3NTkyNDEwMDAwODM0NTkwMDgwOEYyMzAwMzg5MgorOjEwNjE3MDAwQUM0MzAwMDQ4QzVGMDAwNEFGM0YwMDNDMEEwMDA3NjQ5RQorOjEwNjE4MDAwM0MwQzgwMDA4Rjg3MDA1MDBBMDAwNzU5MjQxMDAwMDQzRgorOjEwNjE5MDAwQTBBMjAwMDkwRTAwMDA0RjAwMDAwMDAwMEEwMDA3NTlFRAorOjEwNjFBMDAwOEY4NzAwNTAyNDAyMDAxNDBBMDAwODFDQTBBMjAwMDlENgorOjEwNjFCMDAwMjdCREZGRThBRkJGMDAxNEFGQjAwMDEwM0MxMDgwMDA1NworOjEwNjFDMDAwOTIwMjAxMDkyNDA1MDAwMTBFMDAwNjVCMzA0NDAwRkYyNQorOjEwNjFEMDAwM0MxRjgwMDg5M0Y4MDAwRTM3RTMwMDgwOTNGOTAwMEYwRQorOjEwNjFFMDAwOTA2RTAwMjY5M0U5MDAwQTMzMkYwMEZGMDAxODY2MDAyNgorOjEwNjFGMDAwMDAwRjZDMDAzMUNCMDBGRjAxOEQ1MDI1MDAwQjMyMDBFOQorOjEwNjIwMDAwMDE0NjM4MjUzMTI4MDBGRjM0NDU2MDAwMDBFODIwMjU4QworOjEwNjIxMDAwMjQwMkZGODEzQzAzMTAwMEFFMDQwMTRDOEZCRjAwMTQyOAorOjEwNjIyMDAwQUUwNTAxNTRBMjAyMDE1MkFFMDMwMTc4OEZCMDAwMTBGNgorOjEwNjIzMDAwMDNFMDAwMDgyN0JEMDAxODI3QkRGRkU4MzA4NDAwRkZGOQorOjEwNjI0MDAwQUZCRjAwMTAwRTAwMDY1QjMwQTUwMEZGMzQ0NjAwNDBEMworOjEwNjI1MDAwM0MwNDgwMDAyNDA1RkY5MkFDODYwMTU0QTA4NTAxNTJDNQorOjEwNjI2MDAwOEY4MzAwNTA4RkJGMDAxMDNDMDIxMDAwMjdCRDAwMTgyNAorOjEwNjI3MDAwQUM4MzAxNEMwM0UwMDAwOEFDODIwMTc4MjdCREZGRDg1NQorOjEwNjI4MDAwQUZCMjAwMThBRkIxMDAxNEFGQjAwMDEwQUZCRjAwMjAyNAorOjEwNjI5MDAwQUZCMzAwMUMzQzA3ODAwMDkwRTIwMTA5MzA4NjAwRkY4QworOjEwNjJBMDAwMzBCMDAwRkYwMDA2MThDMjMyMDQwMDAyMzA3MTAwMDE1NQorOjEwNjJCMDAwMTQ4MDAwMDczMDUyMDBGRjNDMDk4MDA4MzUzMzAwODAwRAorOjEwNjJDMDAwOTI2ODAwMDUzMTA1MDAwODEwQTAwMDBDMzBDQTAwMTBDQgorOjEwNjJEMDAwMDI0MDIwMjEwRTAwMDY4MDAyMjAyODIxMjQwMjAwMDExNQorOjEwNjJFMDAwOEZCRjAwMjA4RkIzMDAxQzhGQjIwMDE4OEZCMTAwMTQzNQorOjEwNjJGMDAwOEZCMDAwMTAwM0UwMDAwODI3QkQwMDI4MTU0MDAwMzBEMworOjEwNjMwMDAwMzRFNTBBMDA4Q0I5MDAyNDhDQjgwMDA4MTMzODAwNDcyMworOjEwNjMxMDAwMDAwMDQwMjEzQzBFODAwODM1RDMwMDgwOTI2RDAwNjg1QgorOjEwNjMyMDAwMjQwQjAwMDIzMUFDMDBGRjExOEIwMDgwM0MwNjgwMDA4MgorOjEwNjMzMDAwOTI3RjAwNEM5MEM0MDEwOTUwOUYwMDA0MzIxMzAwN0NFRQorOjEwNjM0MDAwMTEwMDAwNjcwMDAwMDAwMDMyMTMwMDdDMTY2MDAwNUE0NAorOjEwNjM1MDAwMDI0MDIwMjExNjIwMDAwODMyMEMwMDAxM0MwNzgwMDA3QQorOjEwNjM2MDAwMzRFQjBBMDA4RDY1MDAyNDhDRTgwMTA0MTRBOEZGRENERQorOjEwNjM3MDAwMDAwMDEwMjEzMjBDMDAwMTExODAwMDBEMDI0MDIwMjE4QworOjEwNjM4MDAwM0MxMDgwMDA4RTBFMDEwQzhGOEQwMDYwMTFDRDAwMDgzNgorOjEwNjM5MDAwMDAwMDAwMDAwRTAwMDczRTAyMjAyODIxOEUwRjAxMEM5NQorOjEwNjNBMDAwM0MxODgwMDgzNzEwMDA4MEFFMEYwMDUwMDI0MDIwMjFCQQorOjEwNjNCMDAwMEUwMDA2NkYwMjIwMjgyMTBBMDAwODZGMjQwMjAwMDE0NworOjEwNjNDMDAwM0MwNzA4MDA4Q0U3MDA2NDI0RTYwMDAxM0MwMTA4MDA1QgorOjEwNjNEMDAwQUMyNjAwNjQxNjAwMDAwRDAwMDAwMDAwMDIyMDI4MjFGOQorOjEwNjNFMDAwMEUwMDA2NkYwMjQwMjAyMTkyNkYwMDY4MjQwRDAwMDIwQgorOjEwNjNGMDAwMzFFRTAwRkYxMUNEMDAyMjAyNDAyMDIxMEUwMDA4MjNDMworOjEwNjQwMDAwMDAwMDAwMDAwQTAwMDg2RjI0MDIwMDAxMEUwMDAwNDE5NQorOjEwNjQxMDAwMjQwNDAwMDE5MjZDMDAyNTAyMEM1ODI1MEUwMDAwNEY0OAorOjEwNjQyMDAwQTI2QjAwMjUwQTAwMDhBRjAyMjAyODIxOEU2MzAwMTgwNQorOjEwNjQzMDAwOENFNDAxMDQ4Q0JGMDAyNDAwMDMxNjAyMTQ5RkZGQjVGNgorOjEwNjQ0MDAwMzA0NTAwN0Y5MjY5MDA0QzI2NDQwMDAxMzA5MzAwN0Y2NAorOjEwNjQ1MDAwMTI2NTAwNDAzMTIzMDBGRjE0NjRGRkFGM0MwRTgwMDgzQQorOjEwNjQ2MDAwMjY0ODAwMDEzMTExMDA3RjMxMDIwMEZGMTIyNTAwMEI4OAorOjEwNjQ3MDAwMjQwODAwMDEwMDQwOTAyMTBBMDAwODdDMjQxMTAwMDEzQQorOjEwNjQ4MDAwMjQwNTAwMDQwRTAwMDYzMjI0MDYwMDAxMEUwMDA4MjMzNQorOjEwNjQ5MDAwMDAwMDAwMDAwQTAwMDg2RjI0MDIwMDAxMjQwN0ZGODBBQQorOjEwNjRBMDAwMDI0NzI4MjQwMEE3OTAyNjMyNDIwMEZGMDA0MDkwMjE5NgorOjEwNjRCMDAwMEEwMDA4N0MyNDExMDAwMTBFMDAwNzNFMDIyMDI4MjE1QQorOjEwNjRDMDAwMzIwNjAwMzAxMEMwRkZBMzMyMTAwMDgyMDI0MDIwMjFBQgorOjEwNjREMDAwMEUwMDA2ODAwMjIwMjgyMTBBMDAwODZGMjQwMjAwMDExNQorOjEwNjRFMDAwOEU2MzAwMTgwMjQwMjAyMTAyMjAyODIxMDA2NjEwMjUxQQorOjEwNjRGMDAwMEUwMDA4NDVBRTYyMDAxODkyNjQwMDRDMjQwNTAwMDNBQgorOjEwNjUwMDAwMjQwNjAwMDEwRTAwMDYzMjMwODQwMEZGMEUwMDAwNDExOAorOjEwNjUxMDAwMjQwNDAwMDE5MjZBMDAyNTAyMEE0ODI1MEUwMDAwNEY1QgorOjEwNjUyMDAwQTI2OTAwMjUwQTAwMDg2RjI0MDIwMDAxOEU3ODAwMTg3NQorOjEwNjUzMDAwM0MxOTgwMDAwMjQwMjAyMTAzMTk3ODI1MDIyMDI4MjFERgorOjEwNjU0MDAwMEUwMDA2NkZBRTZGMDAxODkyNjQwMDRDMEEwMDA4Rjc0OAorOjEwNjU1MDAwMjQwNTAwMDQzMjQ2MDA4MDM4Q0EwMDgwMTQ2QUZGNkVBOQorOjEwNjU2MDAwM0MwRTgwMDgwQTAwMDhEMDI2NDgwMDAxMjdCREZGQzA2NQorOjEwNjU3MDAwQUZCMDAwMTgzQzEwODAwMEFGQkYwMDM4QUZCNzAwMzQ5OAorOjEwNjU4MDAwQUZCNjAwMzBBRkI1MDAyQ0FGQjQwMDI4QUZCMzAwMjRENQorOjEwNjU5MDAwQUZCMjAwMjAwRTAwMDRCQkFGQjEwMDFDOTIwNDAxMDg5MgorOjEwNjVBMDAwOTIwNTAxMEIzMDg0MDBGRjBFMDAwODU2MzBBNTAwRkY1NQorOjEwNjVCMDAwMTQ0MDAwRTM4RkJGMDAzODNDMDk4MDA4MzUyODAwODA3NAorOjEwNjVDMDAwQTEwMDAwNkIzNjA3MDk4MDkwRTYwMDAwMjQwMjAwNTAwRAorOjEwNjVEMDAwM0MxNzA4MDAyNkY3M0E4ODMwQzMwMEZGM0MxMzA4MDAzOAorOjEwNjVFMDAwMjY3MzNBOTgxMDYyMDAwMzNDMTA4MDAwMDAwMEI4MjEyNgorOjEwNjVGMDAwMDAwMDk4MjEyNDFGMDAxMDM2MTEwQTAwMzYxNDA5ODA2QgorOjEwNjYwMDAwOEUxNjAxMDQ4RjhEMDA1MDhFMzgwMDI0MzYxOTBBODBCMgorOjEwNjYxMDAwOEU5MjAwMjAzQzAxMDgwMEEwM0YzQUQwOTcyQzAwMkMxRAorOjEwNjYyMDAwOEVGNTAwMDA5MzJCMDAxODAyNEQ3MDIzMDJEODc4MjNCQQorOjEwNjYzMDAwM0MwMTA4MDBBQzJGM0FBQzNDMDEwODAwQUMyRTNBQjA0QgorOjEwNjY0MDAwM0MwMTA4MDBBQzJEM0FENEE3OEMwMDU0MDJBMEY4MDlGNAorOjEwNjY1MDAwMzE3MjAwRkYzMDRBMDAwMjE1NDAwMEU2MzA0NTAwMDE2QgorOjEwNjY2MDAwMTBBMDAwQzEwMDAwMDAwMDkyOEEwMDA4MzE1MDAwMDgwQworOjEwNjY3MDAwMTYwMDAwMDIyNDE0MDAwMzAwMDBBMDIxM0MwNjgwMDA0NAorOjEwNjY4MDAwMzRDNDA5MDAzNEMzMEEwMDhDNkUwMDI0OTA4NTAwMTFDNAorOjEwNjY5MDAwOTA4MjAwMTI5MDk5MDAxMTMwQjgwMEZGMzA1MTAwRkYzNQorOjEwNjZBMDAwMDI5MUY4MjEwMDFGQjA4MDMzMkYwMEZGMDJEODU4MjEzQgorOjEwNjZCMDAwMDI0RkE4MjEyNkFDMDAxMDAxNzI2ODIxM0MxNTgwMDAxMQorOjEwNjZDMDAwM0MwMTA4MDBBQzJFM0FEODNDMDEwODAwQTQyRDNBQzg4MQorOjEwNjZEMDAwM0MwMTA4MDBBNDJDM0FDNDNDMDEwODAwQTQyQjNBQzY5MworOjEwNjZFMDAwMzZCNjA5ODA4Rjg3MDA1MDhGODkwMDU4OEVEMjAwMjBERgorOjEwNjZGMDAwMjQwODAwMDYwMTI3MzAyMzAyNDcyODIzM0MwMTA4MDAxNAorOjEwNjcwMDAwQUMyODNBQ0MwNEMwMDBCMzAwMDA5MDIxMDRBMDAwQjEzMgorOjEwNjcxMDAwMDBDNTgwMkIxMjAwMDBCMzAwMDAwMDAwM0MwMTA4MDBGRgorOjEwNjcyMDAwQUMyNjNBQjA4RTcxMDAwMDAyMjBGODA5MDAwMDAwMDA4QgorOjEwNjczMDAwMzA0QTAwMDIxNTQwMDA3NDAwNDA4MDIxMzA0QjAwMDFCNworOjEwNjc0MDAwNTU2MDAwMTE4RTcxMDAwNDNDMEQwODAwOERBRDNBQjQwNworOjEwNjc1MDAwM0MwRUMwMDAzQzA0ODAwMDAxQUU2MDI1QUVBQzBFMDBEMworOjEwNjc2MDAwOEM5ODAwMDAzMzBGMDAwODExRTBGRkZEMDAwMDAwMDBDRQorOjEwNjc3MDAwOTQ5RjBFMDgyNDEyMDAwMUE3OUYwMDQwOEM5OTBFMDREQworOjEwNjc4MDAwQUY5OTAwMzg4RTcxMDAwNDAyMjBGODA5MDAwMDAwMDA2MworOjEwNjc5MDAwMDIwMjgwMjUzMjAyMDAwMjE0NDAwMEE5MDAwMDAwMDAxRAorOjEwNjdBMDAwM0MwODA4MDA5NTA4M0FCQzNDMTEwODAwOTYzMTNBQzhFQworOjEwNjdCMDAwM0MwOTA4MDA5NTI5M0FCRTNDMDMwODAwOEM2MzNBQjRCMgorOjEwNjdDMDAwMDExMTY4MjEzQzFGMDgwMDhGRkYzQUQ4M0MwNzA4MDBFMAorOjEwNjdEMDAwOTRFNzNBRDIzQzExODAwMDAxQTkyMDIxOEUzODAxMENBNworOjEwNjdFMDAwMDA2ODI4MjEyNDk5MDAwMjAwQTc3MDIxMDNFMzc4MjE4MgorOjEwNjdGMDAwQUY5ODAwNjAzQzAxMDgwMEFDMkYzQUQ4M0MwMTA4MDA3QgorOjEwNjgwMDAwQTQyRTNBQzAzQzAxMDgwMEE0MkQzQUNBMEUwMDAxQjRERgorOjEwNjgxMDAwMzMyNEZGRkY4RjhDMDA0ODAwNDAyMDIxM0MwMTA4MDBGQQorOjEwNjgyMDAwQTAyQzNBRDE4RTYyMDAwODI1OEIwMDAxQUY4QjAwNDg2NgorOjEwNjgzMDAwMDA0MEY4MDkwMDAwMDAwMDhGODUwMDUwMDI4MDMwMjFFMAorOjEwNjg0MDAwMEUwMDA1MUMwMDQwMjAyMTBFMDAwNjlFMDA0MDIwMjE2NQorOjEwNjg1MDAwOEU2QTAwMEMwMTQwRjgwOTAwNDAyMDIxM0MwODA4MDAyNQorOjEwNjg2MDAwOTUwODNBQ0EzQzA5MDgwMDk1MjkzQUJFMDEwOTM4MjEyMQorOjEwNjg3MDAwMjRFNjAwMDIwRTAwMDFDODMwQzRGRkZGM0MwNDA4MDBGQgorOjEwNjg4MDAwOEM4NDNBQUMzQzAzMDgwMDhDNjMzQUI0MDA4MzI4MjMyMAorOjEwNjg5MDAwM0MwMTA4MDBBQzI1M0FBQzE0QTAwMDA2MDAwMDAwMDA0MgorOjEwNjhBMDAwM0MwQTA4MDA4RDRBM0FDQzM1NDYwMDQwM0MwMTA4MDBCRAorOjEwNjhCMDAwQUMyNjNBQ0MxMjQwMDA0MThGOEMwMDQ0OEUyQjBFMTAzNworOjEwNjhDMDAwOEY5MjAwNDRBRTRCMDAyMDhFMjIwRTE4QUU0MjAwMjQ2MAorOjEwNjhEMDAwM0MwNDA4MDA5NDg0M0FDMDBFMDAwNUZBMDAwMDAwMDA1MQorOjEwNjhFMDAwOEY5OTAwNTA4RTc4MDAxMDNDMDEwODAwQUMzOTNBRDRFMgorOjEwNjhGMDAwMDMwMEY4MDkwMDAwMDAwMDNDMEYwODAwOERFRjNBQUNERgorOjEwNjkwMDAwMTVFMEZGNzk4Rjg3MDA1MDk3OTQwMDU0M0MxMzgwMEU1OAorOjEwNjkxMDAwMzIxNTAwMTAwRTAwMDYyOUE2NzQwMDJDNTZBMDAwNDQ2MworOjEwNjkyMDAwOEVGNjAwMDQzMjFGMDA0MDU3RTAwMDFEOEVGMDAwMDg3NAorOjEwNjkzMDAwOEVFMzAwMEMwMDYwRjgwOTAwMDAwMDAwOEZCRjAwMzhGMworOjEwNjk0MDAwOEZCNzAwMzQ4RkI2MDAzMDhGQjUwMDJDOEZCNDAwMjg3RAorOjEwNjk1MDAwOEZCMzAwMjQ4RkIyMDAyMDhGQjEwMDFDOEZCMDAwMThCRAorOjEwNjk2MDAwMDNFMDAwMDgyN0JEMDA0MDkyMDkwMTA5OEY4ODAwM0MyMAorOjEwNjk3MDAwMDAwOTNFMDAwMEU4MzAyNUFFMDYwMDgwOEUyMzAwMjA4RQorOjEwNjk4MDAwOEUyNDAwMjRBRkEzMDAxMEFFMDMwRTE0OEZBMjAwMTBCQgorOjEwNjk5MDAwQUUwMjBFMTBBRTA0MEUxQzBBMDAwOTUxQUUwNDBFMTgxMQorOjEwNjlBMDAwMDIwMEY4MDkwMDAwMDAwMDhFRTMwMDBDMDA2MEY4MDkwNgorOjEwNjlCMDAwMDAwMDAwMDAwQTAwMEEwNzhGQkYwMDM4MjQwRTAwMDEwMworOjEwNjlDMDAwMjQwRDAwMDFBNTgwMDAyMEE1OEUwMDIyMEEwMDA5RUJGRAorOjEwNjlEMDAwQUQ4RDAwMjQzQzAxMDgwMEFDMjAzQUIwMEEwMDA5ODFDQQorOjEwNjlFMDAwOEU3MTAwMDAzQzAxMDgwMEFDMjUzQUIwMEEwMDA5ODExNAorOjEwNjlGMDAwOEU3MTAwMDA5MjExMDEwOTAwMDAyODIxMEUwMDA2NkYxRgorOjEwNkEwMDAwMzIyNDAwRkY4RkJGMDAzODhGQjcwMDM0OEZCNjAwMzBCQworOjEwNkExMDAwOEZCNTAwMkM4RkI0MDAyODhGQjMwMDI0OEZCMjAwMjBENAorOjEwNkEyMDAwOEZCMTAwMUM4RkIwMDAxODAzRTAwMDA4MjdCRDAwNDBBNAorOjEwNkEzMDAwMDJDMEY4MDkwMDAwMDAwMDBBMDAwQTAxMzIxRjAwNDBFRAorOjEwNkE0MDAwNTI0MEZGQjI5Nzk0MDA1NDhFQjYwRTE0OEY5MzAwNDRCOAorOjEwNkE1MDAwQUU3NjAwMjA4RUI0MEUxQ0FFNzQwMDI0MEEwMDA5RkEzMworOjEwNkE2MDAwOTc5NDAwNTQ4RjgyMDAxNDAwMDQyMTgwMDNFMDAwMDhGMgorOjEwNkE3MDAwMDA4MjEwMjEzQzA3ODAwODM0RTIwMDgwOTA0MzAwNjlDNgorOjEwNkE4MDAwMDA4MDQwMjExMDYwMDAwOTNDMDQwMTAwM0MwNzA4MDAyMAorOjEwNkE5MDAwOENFNzNBRDQ4RjgzMDAzMDAwRTMyMDIzMDQ4MDAwMDg4MQorOjEwNkFBMDAwOTM4OTAwMUMxNEUzMDAwMzAxMDAyMDIxMDNFMDAwMDg4NworOjEwNkFCMDAwMDA4MDEwMjEzQzA0MDEwMDAzRTAwMDA4MDA4MDEwMjE0OAorOjEwNkFDMDAwMTEyMDAwMEIwMDY3MzgyMzNDMEQ4MDAwMzVBQzA5ODA5NQorOjEwNkFEMDAwOTE4QjAwN0MzMTZBMDAwMjExNDAwMDIwMjQwOTAwMzRBRgorOjEwNkFFMDAwMDBFOTcwMkIxNUMwRkZGMTAxMDAyMDIxMDBFOTM4MjNENworOjEwNkFGMDAwMjQwM0ZGRkMwMEEzQzgyNDAwRTNDMDI0MDBGOTc4MkI4MgorOjEwNkIwMDAwMTVFMEZGRUEwMzA4MjAyMTMwQzQwMDAzMDAwNDEwMjMyRAorOjEwNkIxMDAwMTRDMDAwMTQzMDQ5MDAwMzAwMDAzMDIxMDBBOTc4MjE3RQorOjEwNkIyMDAwMDFFNjcwMjEwMEVFNjgyQjExQTBGRkUwM0MwNDAxMDA5QgorOjEwNkIzMDAwMkQzODAwMDEwMDA2QzgyQjAxMDU0ODIxMDMxOTM4MjQwRgorOjEwNkI0MDAwMTRFMEZGREEyNTI0RkZGQzI0MDJGRkZDMDBBMjE4MjQzNQorOjEwNkI1MDAwMDA2ODIwMjEwM0UwMDAwODAwODAxMDIxMEEwMDBBNkY2RAorOjEwNkI2MDAwMjQwOTAwMzAzQzBDODAwMDM1ODYwOTgwOTBDQjAwN0NFNQorOjEwNkI3MDAwMzE2QTAwMDQxNTQwRkZFOTI0MDYwMDA0MEEwMDBBN0U3OQorOjEwNkI4MDAwMDAwMDMwMjEzQzAzMDgwMDhDNjMwMDVDOEY4MjAwMThGOQorOjEwNkI5MDAwMjdCREZGRThBRkJGMDAxNDEwNjIwMDA1QUZCMDAwMTBDMgorOjEwNkJBMDAwMDAwMzI5QzAyNEE0MDI4MEFGODQwMDE0QUY4MzAwMTgxRQorOjEwNkJCMDAwM0MxMDgwMDAzNjAzMEEwMDk0NjUwMDMyMEUwMDBBNTAzMworOjEwNkJDMDAwMzBBNDNGRkY4RTA0MDEwMDNDMTgwMDgwMzcwRjAwMDMwMworOjEwNkJEMDAwMDA4MkM4MjEyNDAyRkY4MDAzMjI2MDI0MzMyOTAwN0YyMQorOjEwNkJFMDAwMDAwQ0Y5NDAwM0U5NDAyNTMzMkUwMDc4M0MwRDEwMDBERAorOjEwNkJGMDAwMDEwRDUwMjUwMUNGNTgyNUFFMEMwMDI4MzYwODA5ODAxQworOjEwNkMwMDAwQUUwQzA4MENBRTBCMDgyQ0FFMEEwODMwOTEwMzAwNjlEQworOjEwNkMxMDAwM0MwNjgwMEMwMTI2MzgyMTEwNjAwMDA2QUY4NzAwMzQ0NgorOjEwNkMyMDAwOEQwOTAwM0M4RDA2MDA2QzAxMjYzODIzMThFMDAwN0Y5QQorOjEwNkMzMDAwMDAwMDAwMDAzQzBDODAwODM1OEIwMDgwM0MwQTgwMDA3RQorOjEwNkM0MDAwQTE2MDAwNjkzNTUwMDk4MDhFMDIwMDM4M0MwNjgwMDA0MgorOjEwNkM1MDAwMzRDNTBBMDA5MEFEMDAzQzMxQTgwMDIwMTEwMDAwMTk5NQorOjEwNkM2MDAwQUY4MjAwMzAyNDBFMDAwMTNDMTk4MDAwMzczMDBBMDA0QQorOjEwNkM3MDAwQTM4RTAwMUNBRjgwMDAyNDhFMDQwMDI0OEY4NTAwMjQ4NgorOjEwNkM4MDAwMjQxODAwMDhBRjgwMDAyMEFGODAwMDI4M0MwMTA4MDBENQorOjEwNkM5MDAwQTQzODNBQkUzQzAxMDgwMEE0MjAzQUQyMEUwMDBBNTQ5RgorOjEwNkNBMDAwMDAwMDMwMjE5MjBGMDAzQzhGQkYwMDE0OEZCMDAwMTAwNQorOjEwNkNCMDAwMDAwRjcxNDJBRjgyMDAyQzI3QkQwMDE4MDNFMDAwMDhDRQorOjEwNkNDMDAwMzFDMjAwMDE5MEI5MDAzMjI0MEYwMDAxMzMzODAwRkZCNworOjEwNkNEMDAwMDAxODIxODIxMDhGMDAzRjI0MUYwMDAyMTA5RjAwNjJDNQorOjEwNkNFMDAwMzRDMjBBQzAzQzAzODAwMDM0NjQwQTAwOEM5OTAwMjQzQQorOjEwNkNGMDAwMTcyMDAwMUQzNDY2MDkwMDkwODMwMDMwMjQxRjAwMDUxMgorOjEwNkQwMDAwMzA2MjAwM0YxMDVGMDA0QzI0MDUwMDAxOEY4NjAwMjA5OAorOjEwNkQxMDAwQTM4NTAwMUNBRjg2MDAyOEFGODYwMDI0M0MxOTgwMDBBNAorOjEwNkQyMDAwMzczMDBBMDA4RTA0MDAyNDhGODUwMDI0MjQxODAwMDhDMAorOjEwNkQzMDAwM0MwMTA4MDBBNDM4M0FCRTNDMDEwODAwQTQyMDNBRDIyNQorOjEwNkQ0MDAwMEUwMDBBNTQwMDAwMDAwMDkyMEYwMDNDOEZCRjAwMTQ5OAorOjEwNkQ1MDAwOEZCMDAwMTAwMDBGNzE0MkFGODIwMDJDMjdCRDAwMThDOQorOjEwNkQ2MDAwMDNFMDAwMDgzMUMyMDAwMThDODgwMDA4OEM4RDAwMjRFQgorOjEwNkQ3MDAwOENDQjAwNjQzQzE5ODAwMDM3MzAwQTAwQUY4QjAwMjRCNAorOjEwNkQ4MDAwQTM4MDAwMUM4RTA0MDAyNDhGODYwMDIwOEY4NTAwMjRBMQorOjEwNkQ5MDAwMDEwRDYwMjMyNDE4MDAwOEFGOEMwMDI4M0MwMTA4MDA3NgorOjEwNkRBMDAwQTQzODNBQkUzQzAxMDgwMEE0MjAzQUQyMEUwMDBBNTQ4RQorOjEwNkRCMDAwMDAwMDAwMDA5MjBGMDAzQzhGQkYwMDE0OEZCMDAwMTA0NQorOjEwNkRDMDAwMDAwRjcxNDJBRjgyMDAyQzI3QkQwMDE4MDNFMDAwMDhCRAorOjEwNkREMDAwMzFDMjAwMDE5MEE3MDAzMDMwRTMwMDNGNTA2NDAwMjgyQQorOjEwNkRFMDAwMzRDNTBBQzA4Q0FBMDAyNDE1NDAwMDIyMzRDODA5MDAwQQorOjEwNkRGMDAwOENBQjAwNDgzQzBDN0ZGRjM1ODVGRkZGMDE2NTEwMjRGQworOjEwNkUwMDAwM0MxODgwMDBBRjgyMDAyMDM3MDUwOTAwOEY4RTAwMjBEQgorOjEwNkUxMDAwOENBRjAwNjAwMUNGNjgyQjE1QTAwMDAyMDFDMDIwMjFCQgorOjEwNkUyMDAwOENBNDAwNjAwQTAwMEFGMEFGODQwMDIwOEQwMjAwNkM4MAorOjEwNkUzMDAwMEEwMDBBQ0IzQzA2ODAwMDhDODkwMDQ4OEY4NjAwMjAxRgorOjEwNkU0MDAwM0MwQTdGRkYzNTUwRkZGRjAxMzAzODI0M0MwNDgwMDhBNgorOjEwNkU1MDAwMjQwNTAwMDFBRjg3MDAyOEFDODAwMDZDQTM4NTAwMUNDRQorOjEwNkU2MDAwMEEwMDBBRkVBRjg2MDAyNDhDNDQwMDE0MEEwMDBBRjBDRgorOjEwNkU3MDAwQUY4NDAwMjA4RDAyMDA2ODBBMDAwQjM4M0MxODgwMDBBNworOjEwNkU4MDAwMzRDNDA5ODA4Qzg2MDA3MDhDQjAwMDE0MDBEMDQ4MkI2QworOjEwNkU5MDAwMTEyMDAwMDQwMDAwMDAwMDhDODIwMDcwMEEwMDBCMzhGMgorOjEwNkVBMDAwM0MxODgwMDA4Q0EyMDAxNDBBMDAwQjM4M0MxODgwMDBBQgorOjEwNkVCMDAwOEY4NTAwMjQyN0JERkZFMEFGQkYwMDE4QUZCMTAwMTRERAorOjEwNkVDMDAwMTRBMDAwMDhBRkIwMDAxMDNDMDQ4MDAwMzQ4NzBBMDAxMgorOjEwNkVEMDAwOTBFNjAwMzAyNDAyMDAwNTMwQzMwMDNGMTA2MjAwQjc4NgorOjEwNkVFMDAwMzQ4NDA5MDA4RjkxMDAyMDAwQTA4MDIxM0MwNDgwMDBBMAorOjEwNkVGMDAwMzQ4RTBBMDA4RENEMDAwNDNDMDYwODAwOENDNjNBQjBFMgorOjEwNkYwMDAwMzFBNzNGRkYwMEU2NjAyQjU1ODAwMDAxMDBFMDMwMjFGMworOjEwNkYxMDAwOTM4RjAwMUMxMUUwMDA3NjAwRDAxMDJCMzQ5OTA5ODA2QgorOjEwNkYyMDAwOTMzODAwN0MzMzA0MDAwMjEwODAwMDc3MjQwMzAwMzQ3RgorOjEwNkYzMDAwMDBDM0Y4MkIxN0UwMDBENjAwQzMzMDIzMDBEMDEwMkI3RAorOjEwNkY0MDAwM0MwMTA4MDBBNDIzM0FCQzE0NDAwMDZEMDIwMDE4MjE0MworOjEwNkY1MDAwM0MwNDA4MDA4Qzg0M0FBQzAwNjQyODJCNTRBMDAwMDE0NworOjEwNkY2MDAwMDA2MDIwMjEzQzA1ODAwMDM0QTkwQTAwOTEyODAwM0NFMworOjEwNkY3MDAwM0MwMTA4MDBBQzI0M0FCNDMxMDMwMDIwMTQ2MDAwMDI0NAorOjEwNkY4MDAwMDAwMDQ4MjE4Q0E5MEUxODhGODgwMDJDMDEyODUwMkI1NgorOjEwNkY5MDAwMTE0MDAwNUYwMDAwMDAwMDNDMDUwODAwOENBNTNBQjREOQorOjEwNkZBMDAwMDBBOTYwMjEwMTBDNTgyQjExNjAwMDVDMDBCMDY4MkIxNworOjEwNkZCMDAwMDEwOTM4MjMwMEUwMjgyMTNDMDEwODAwQUMyNzNBQjQzRAorOjEwNkZDMDAwMTIwMDAwMDMyNDAyRkZGQzEwQjAwMDhDMzIyQTAwMDNFMAorOjEwNkZEMDAwMDBBMkY4MjQzQzAxMDgwMEE0MjAzQUQyM0MwMTA4MDA5OQorOjEwNkZFMDAwQUMzRjNBQjQwM0UwMjgyMThGODQwMDI0MTIwNDAwMDY0OQorOjEwNkZGMDAwM0MwMzgwMDg4QzZBMDA2QzAyMDAyMDIxQUY5MTAwMjBDNQorOjEwNzAwMDAwMjU1MDAwMDFBQzcwMDA2QzhGOEIwMDI4MDA4NTg4MjMxMAorOjEwNzAxMDAwQUY5MTAwMjQwMTY1MjAyM0FGODQwMDI4MTIyMDAwMDJENAorOjEwNzAyMDAwMjQwNzAwMTgyNDA3MDAxMDNDMEU4MDA4MzVDNjAwODA5NQorOjEwNzAzMDAwOTBDRDAwNjgyNDBDMDAwMTNDMDEwODAwQTAyNzNBRDA0NAorOjEwNzA0MDAwMzFBNzAwRkYxMEVDMDA0NzAwMDAwMDAwMTQ4MDAwMTg3QQorOjEwNzA1MDAwMDAwMDI4MjEzQzBCODAwMDkxNjUwMTA5MzU3MTA5ODBGMQorOjEwNzA2MDAwOEUyMzAwMTgzMEE1MDBGRjAwMDM1NjAyMjRBMzAwMDE2MAorOjEwNzA3MDAwMzE0NjAwN0YzMDcwMDA3RjEyMDYwMDdFMjQwQ0ZGODBCNgorOjEwNzA4MDAwM0MwRjgwMDgzNUU5MDA4MEExMjMwMDRDM0MwODA4MDAzMworOjEwNzA5MDAwOEQwODNBQ0MyNDBFMDAwMjNDMDEwODAwQTAyRTNCMTFDMgorOjEwNzBBMDAwMzUwRDAwMDgzQzAxMDgwMEFDMkQzQUNDMjQwNTAwMTAzOQorOjEwNzBCMDAwM0MxRjgwMDAzN0U0MEEwMDkwOTkwMDNDMzMzODAwMjBFMAorOjEwNzBDMDAwMTMwMDAwMDUwMEEwMjAyMTI0MDIwMDAxM0MwMTA4MDA1QgorOjEwNzBEMDAwQUMyMjNBQjQzNEE0MDAwMThGQkYwMDE4OEZCMTAwMTQ2MQorOjEwNzBFMDAwOEZCMDAwMTAwMDgwMTAyMTAzRTAwMDA4MjdCRDAwMjBCMQorOjEwNzBGMDAwM0MwMTA4MDBBNDIwM0FCQzEwNDBGRjk1MDIwMDE4MjE3MgorOjEwNzEwMDAwMEEwMDBCOEIwMEMwMTgyMTBBMDAwQjgzMjQwMzAwMzBGNworOjEwNzExMDAwM0MwNTA4MDA4Q0E1M0FCNDAwQjA2ODJCMTFBMEZGQTg2QworOjEwNzEyMDAwMDAwMDAwMDAzQzA0MDgwMDk0ODQzQUJDMDA4NTc4MjFFQgorOjEwNzEzMDAwMDFFNzcwMkIxMUMwMDAwNzJDQTIwMDA0M0MxRjYwMDA2NworOjEwNzE0MDAwOEZGOTU0MDQzMzM4MDAzRjE3MDBGRkUzMjQwNDAwNDI1MgorOjEwNzE1MDAwMkNBMjAwMDQxMDQwRkY5QTI0MDQwMDQyMEEwMDBCRUUwNworOjEwNzE2MDAwOEZCRjAwMTgxNTI4RkZCOTAwMDAwMDAwOENDMjAwMTg1RQorOjEwNzE3MDAwM0MxODgwMDAyNDE5MDAwMjAwNThGODI1QUNERjAwMThFNAorOjEwNzE4MDAwMzcwNDBBMDBBMEQ5MDA2ODkwODkwMDNDMjQwRjAwMDQ0RAorOjEwNzE5MDAwMDBBMDEwMjEzMTI4MDAyMDNDMDEwODAwQTAyRjNCMTE0NQorOjEwNzFBMDAwMTEwMDAwMDIyNDA1MDAxMDI0MDIwMDAxM0MwMTA4MDAyNworOjEwNzFCMDAwQUMyMjNBQUMwQTAwMEJFNDNDMUY4MDAwOEY4ODAwMjgwOAorOjEwNzFDMDAwOEM4OTAwNjAwMTA5MjgyQjE0QTAwMDAyMDEwMDg4MjE4RAorOjEwNzFEMDAwOEM5MTAwNjAzQzBCODAwMDhENjQwRTE4MjQwQTAwMDEyNQorOjEwNzFFMDAwMDIyMDI4MjEwMjIwMzAyMUEzOEEwMDFDMEUwMDBBNTQwQworOjEwNzFGMDAwMDIyMDgwMjEwQTAwMEI3MkFGODIwMDJDMDAwQTE4MjNBMworOjEwNzIwMDAwMTIyMDAwMDczMDY0MDAwMzNDMEQ4MDAwMzVBNzA5ODA4MAorOjEwNzIxMDAwOTBFQzAwN0MzMThCMDAwNDE1NjAwMDE5MjQ4RTAwMDQ3MgorOjEwNzIyMDAwM0MwMTA4MDBBNDI0M0FEMjNDMTgwODAwOTcxODNBRDIyRQorOjEwNzIzMDAwMDMwNTIwMjEwMEM0NzgyQjExRTBGRjZDOEY4NDAwMjQwQgorOjEwNzI0MDAwMkNBNjAwMDUxNEMwRkZBNDI0MDQwMDQyMzBCOTAwMDM5QQorOjEwNzI1MDAwMTcyMDAwMDIwMEI5MTgyMzI0QTNGRkZDM0MwMTA4MDBGQQorOjEwNzI2MDAwQUMyMzNBQjQzQzAxMDgwMEE0MjAzQUQyMEEwMDBCQjE4NgorOjEwNzI3MDAwMDA2MDI4MjEwMEFDMzgyNDBBMDAwQkQ3MDBFQzE4MjY0NworOjEwNzI4MDAwM0MwMTA4MDBBNDJFM0FEMjBBMDAwQzQxMDAwMDAwMDA4NAorOjEwNzI5MDAwM0MwMTA4MDBBQzIwM0FCNDBBMDAwQkVEMjQwNDAwNDI4MworOjEwNzJBMDAwOEY4MzAwMjgzQzBCODAwMDM1NkEwQTAwMTQ2MDAwMDZCQQorOjEwNzJCMDAwMDAwMDEwMjE5MTQ2MDAzMDI0MDUwMDA1MzBDNDAwRkY3NQorOjEwNzJDMDAwMTA4NTAwMDMwMDAwMDAwMDAzRTAwMDA4MDAwMDAwMDAzQgorOjEwNzJEMDAwOTE0OTAwNDgzMTI4MDBGRjAwMDgzOUMyMTRFMEZGRkE0NAorOjEwNzJFMDAwM0MwNDgwMDgzQzA2MDgwMDk0QzYzQUJDM0MwMzA4MDBGNQorOjEwNzJGMDAwOEM2MzNBRDQzQzA1MDgwMDhDQTUzQUI0M0MxODA4MDBDRAorOjEwNzMwMDAwOTcxODNBRDIwMDY2QzgyMThDOEUwMDA0MDMyNTc4MjE5NAorOjEwNzMxMDAwMDFGODY4MjEwMUFFNjAyMzE5ODAwMDFEMDAwMDAwMDAwMworOjEwNzMyMDAwOTE1ODAwNEM4RjhEMDAzNDk1NkUwRTEwMzMwRjAwRkY3NgorOjEwNzMzMDAwOERBOTAwMDQwMUNGMzAyMzhEQUEwMDAwMzBDRkZGRkZCQworOjEwNzM0MDAwMDAwRjYxMDAwMTJDMjgyMTAwMDAzODIxMDE0NzIwMjE3NQorOjEwNzM1MDAwMDBBQzE4MkIwMDgzQzgyMUFEQTUwMDA0QURCOTAwMDAxNgorOjEwNzM2MDAwOTFCODAwMEEwMUY4NzAyMUExQUUwMDBBOTU2QzBFMTJDNgorOjEwNzM3MDAwOEY4QTAwMzRBNTRDMDAwODk1NDkwMDM4MjUyODAwMDE2MworOjEwNzM4MDAwQTU0ODAwMzg5MTQ3MDAwRDM0RUIwMDA4QTE0QjAwMEREMworOjEwNzM5MDAwMDNFMDAwMDgwMDAwMDAwMDI3QkRGRkQ4QUZCMDAwMThEMAorOjEwNzNBMDAwOTM4RjAwMUM4RkIwMDAxNDNDMDg3RkZGOEY4NzAwMjQ1MAorOjEwNzNCMDAwM0MwQzgwMDAzNTE4RkZGRkFGQkYwMDIwQUZCMTAwMUNCMAorOjEwNzNDMDAwMzU5OTBBMDAwMjE4MTgyNDkzMkEwMDNDMDAwRjVGQzA2OAorOjEwNzNEMDAwM0MwMkJGRkYyQ0YwMDAwMTM0NDlGRkZGMDA2QkY4MjU5MQorOjEwNzNFMDAwM0MwODA4MDA4RDA4M0FENDhGOTkwMDMwM0MxODA4MDBGQQorOjEwNzNGMDAwOTcxODNBQ0EwM0U5NTgyNDAwMTA3RjgwM0MwN0VGRkYzMgorOjEwNzQwMDAwM0MwNUYwRkYwMTZGMTgyNTNDMTE4MDAwMzE0OTAwMjAzOAorOjEwNzQxMDAwMzRFMkZGRkYzNEFERkZGRjM2MkUwOTgwMjdBNTAwMTBCMAorOjEwNzQyMDAwMjQwNjAwMDIwMTE5NDAyMzI3MEEwMDAyMDA2MjE4MjRFMgorOjEwNzQzMDAwMDA4MDgwMjExNTIwMDAwMjAwMDA1ODIxOEQ4QjBFMUMzOQorOjEwNzQ0MDAwQTdBQTAwMTIwNTAwMDAzQTI0MDcwMDAwMzBFRjAwRkY1MQorOjEwNzQ1MDAwMDAwRjNGMDAwMDY3NDAyNTNDMDI4MDA4QUZBODAwMTRFMQorOjEwNzQ2MDAwMzQ0QjAwODA5MTZBMDA2ODNDMEYwODAwOTFFRjNBRDFEQworOjEwNzQ3MDAwM0MwOURGRkYzNTNGRkZGRjAwMEE2MDJCM0MwMjA4MDA5QworOjEwNzQ4MDAwOTQ0MjNBQzRBM0FGMDAxMTAxMUZDMDI0MDAwQ0NGNDBBNgorOjEwNzQ5MDAwMDMxOTE4MjU4RkE3MDAxMEFGQTMwMDE0M0MxRjA4MDA4NAorOjEwNzRBMDAwOTNGRjNBRDNBN0EyMDAxNjhGQTgwMDE0MDBFRDQ4MjQzQQorOjEwNzRCMDAwM0MwQjAxMDAzQzBBMEZGRjAxMkJDODI1MzNGODAwMDNFOQorOjEwNzRDMDAwMzU0Q0ZGRkYwMTBENzgyNDNDMDI3MDAwMDMyQzM4MjQ1QQorOjEwNzREMDAwMDAxODFFMDAwMEUyNDgyNTAxRTM1ODI1QUZBQjAwMTQ1OAorOjEwNzRFMDAwQUZBOTAwMTA5MURGMDA3Q0EzQkYwMDE1MEUwMDAwNjM2MAorOjEwNzRGMDAwMDAwMDAwMDAzNjJEMEEwMDkxQTYwMDNDMzBDNDAwMjA5OAorOjEwNzUwMDAwMTA4MDAwMDYyNjAyMDAwODNDMTEwODAwOTYzMTNBQzA5RgorOjEwNzUxMDAwMjYyRUZGRkYzQzAxMDgwMEE0MkUzQUMwOEZCRjAwMjA5QQorOjEwNzUyMDAwOEZCMTAwMUM4RkIwMDAxODAzRTAwMDA4MjdCRDAwMjhCMQorOjEwNzUzMDAwOEY4QTAwMkMwMTZBNjAyQjU1ODBGRkM0MjQwNzAwMDE0QworOjEwNzU0MDAwMEEwMDBDQ0IzMEVGMDBGRjkzODMwMDFDM0MwMjgwMDA0QworOjEwNzU1MDAwMjdCREZGRDgzNDQ4MEEwMDAwODA1MDIxQUZCRjAwMjA2QgorOjEwNzU2MDAwMzQ0NjBBQzAwMTAwMjgyMTEwNjAwMDBFMzQ0NDA5ODAwRQorOjEwNzU3MDAwOTEwNzAwMzAyNDBCMDAwNThGODkwMDIwMzBFQzAwM0Y3QworOjEwNzU4MDAwMTE4QjAwMEIwMDAwMzgyMUFGQTkwMDEwM0MwQjgwMDhDNAorOjEwNzU5MDAwOEQ2OTAwNkNBRkFBMDAxODBFMDAwMTJCQUZBOTAwMTQ3MgorOjEwNzVBMDAwQTM4MDAwMUM4RkJGMDAyMDAzRTAwMDA4MjdCRDAwMjgzNworOjEwNzVCMDAwOEQxRjAwNDgzQzE4MDgwMDhGMTgzQUI0OEY5OTAwMjg5NgorOjEwNzVDMDAwM0MwMjdGRkY4RDA4MDA0NDM0NDNGRkZGQUZBOTAwMTA0OQorOjEwNzVEMDAwM0MwQjgwMDg4RDY5MDA2QzAzRTM3MDI0MDMxOTc4MjE0QgorOjEwNzVFMDAwMDFDRjY4MjMwMUE4MzgyMUFGQUEwMDE4MEUwMDAxMkI5MworOjEwNzVGMDAwQUZBOTAwMTQwQTAwMEQyMEEzODAwMDFDM0MwNTgwMDBFOAorOjEwNzYwMDAwMzRBNjBBMDA5MEM3MDAzQzNDMDYwODAwOTRDNjNBRDI1MworOjEwNzYxMDAwM0MwMjA4MDA4QzQyM0FDQzMwRTMwMDIwMDAwNjI0MDBGMworOjEwNzYyMDAwMTA2MDAwMUUwMDQ0MzgyNTNDMDg4MDA4MzUwNTAwODBBNQorOjEwNzYzMDAwOTBBMzAwNjgwMDAwMzAyMTI0MDgwMDAxMDAwMDIwMjFGMAorOjEwNzY0MDAwMjQwMzAwMDEzQzA1ODAwMDhDQUMwMTc4MDU4MEZGRkUxRQorOjEwNzY1MDAwMDAwMDAwMDBBQ0E4MDE0OEE0QTQwMTQ0QTRBMzAxNDY3MgorOjEwNzY2MDAwM0MwMzA4MDA4QzYzM0FENDNDMTg4MDA4MzcwRjAwODAzNAorOjEwNzY3MDAwQUNBMzAxNEMzQzE5MDgwMDkzMzkzQUQxM0MwRDEwMDBFMQorOjEwNzY4MDAwQTBCOTAxNTJBQ0E3MDE1NEE0QTYwMTU4OTFFRTAwNEMzOAorOjEwNzY5MDAwQTBBRTAxNkQwM0UwMDAwOEFDQUQwMTc4OENBODBFMUMxMworOjEwNzZBMDAwM0MwQjA4MDA4RDZCM0FCNDk0QUEwRTE2OTRBOTBFMTRFNAorOjEwNzZCMDAwMDE2NjMwMjEzMTQzRkZGRjBBMDAwRDQ4MzEyNEZGRkZFRQorOjEwNzZDMDAwM0MwNDgwMDAzNDgzMEEwMDkwNjUwMDNDMzBBMjAwMjAxNgorOjEwNzZEMDAwMTA0MDAwMUMwMDAwMDAwMDAwMDAzMDIxMDAwMDIwMjFBQworOjEwNzZFMDAwMDAwMDE4MjEzQzA1ODAwMDhDQTkwMTc4MDUyMEZGRkVEMAorOjEwNzZGMDAwMDAwMDAwMDBBQ0E2MDE0ODNDMEUwODAwOERDRTNBRDQzNAorOjEwNzcwMDAwMjQwREZGOTEyNDBDMDA0MDNDMEI4MDA4QTRBMzAxNDRFRAorOjEwNzcxMDAwMzU2QTAwODBBNEE0MDE0NkFDQUUwMTRDQTBBRDAxNTI3NAorOjEwNzcyMDAwQUNBQzAxNTRBNEEwMDE1ODkwQTMwMTA5OTE0NDAwNENCMQorOjEwNzczMDAwOTBBNjAxMDkzQzA0MTAwMEEwQTYwMTZEMDNFMDAwMDgxQQorOjEwNzc0MDAwQUNBNDAxNzg4Qzg2MEUxODk0ODgwRTEyOTQ4NzBFMTBDMworOjEwNzc1MDAwMzEwNEZGRkYwQTAwMEQ3MDMwRTNGRkZGM0MwNDgwMDA5RQorOjEwNzc2MDAwMzQ4MzBBMDA5MDY1MDAzQzMwQTIwMDIwMTA0MDAwMjZCRgorOjEwNzc3MDAwMjdCREZGRjgyNDA5MDAwMTAwMDAzODIxMjQwODAwMDE3QQorOjEwNzc4MDAwM0MwNjgwMDA4Q0M0MDE3ODA0ODBGRkZFMDAwMDAwMDBFRAorOjEwNzc5MDAwOTBDQTAxMDkzQzA0MDgwMDkwODQzQjExM0MxODgwRkYwQQorOjEwNzdBMDAwQTNBQTAwMDM4RkEzMDAwMDMwODUwMDdGMzcwRkZGRkZERgorOjEwNzdCMDAwMDA2NjEwMjVBRkEyMDAwMDkwRDkwMTBBQTNBMDAwMDIyNAorOjEwNzdDMDAwMDAwNTZFMDBBM0I5MDAwMThGQUUwMDAwMjQwQTMwMDA0RQorOjEwNzdEMDAwMjdCRDAwMDgwMUNGNjAyNDAxOEQ1ODI1QUNDQjAxNEM5QQorOjEwNzdFMDAwQUNDQTAxNTRBNEMwMDE1OEFDQzkwMTQ4QTRDNzAxNDRBMworOjEwNzdGMDAwMjQwOUZGODBBNEM4MDE0NjNDMDgxMDAwQTBDOTAxNTIxQQorOjEwNzgwMDAwMDNFMDAwMDhBQ0M4MDE3ODhDODkwRTE4OTQ4NzBFMTIyQQorOjEwNzgxMDAwOTQ4NjBFMTAzMEU4RkZGRjBBMDAwRDk3MzBDN0ZGRkY3NworOjEwNzgyMDAwMjdCREZGRThBRkIwMDAxMDNDMTA4MDAwQUZCRjAwMTREMAorOjEwNzgzMDAwMzYxODBBMDA5NzBGMDAzMjBFMDAwQTUwMzFFNDNGRkY1RAorOjEwNzg0MDAwOEUwRTAxMDAyNDBERkY4MDNDMDQyMDAwMDFDMjU4MjE0RgorOjEwNzg1MDAwMDE2RDYwMjQwMDBDNDk0MDMxNkEwMDdGMDEyQTQwMjVGNworOjEwNzg2MDAwMDEwNDM4MjUzQzA0ODAwOEFFMDcwODMwMzQ4NjAwODBDNworOjEwNzg3MDAwOTBDNTAwNjgyNDAzMDAwMjMwQTIwMEZGMTA0MzAwMDRGQQorOjEwNzg4MDAwOEY5RjAwMjA4Rjk5MDAyNEFDOUYwMDY4QUM5OTAwNjQwMgorOjEwNzg5MDAwOEZCRjAwMTQ4RkIwMDAxMDAzRTAwMDA4MjdCRDAwMTg1MAorOjEwNzhBMDAwM0MwQTA4MDAyNTRBMzU5QzNDMDkwODAwMjUyOTM2Mzg0MQorOjEwNzhCMDAwM0MwODA4MDAyNTA4MkE2MDNDMDcwODAwMjRFNzM2RkMzRAorOjEwNzhDMDAwM0MwNjA4MDAyNEM2MzQyNDNDMDUwODAwMjRBNTMxN0M2RAorOjEwNzhEMDAwM0MwNDA4MDAyNDg0MkQ4QzNDMDMwODAwMjQ2MzM0RDgyNQorOjEwNzhFMDAwM0MwMjA4MDAyNDQyMzI3NDNDMDEwODAwQUMyQTNBOTA2MQorOjEwNzhGMDAwM0MwMTA4MDBBQzI5M0E4QzNDMDEwODAwQUMyODNBODhDRAorOjEwNzkwMDAwM0MwMTA4MDBBQzI3M0E5NDNDMDEwODAwQUMyNjNBQTQ5QworOjEwNzkxMDAwM0MwMTA4MDBBQzI1M0E5QzNDMDEwODAwQUMyNDNBOTg5NAorOjEwNzkyMDAwM0MwMTA4MDBBQzIzM0FBODNDMDEwODAwQUMyMjNBQTA3NAorOjA4NzkzMDAwMDNFMDAwMDgwMDAwMDAwMDY0Cis6MDg3OTM4MDA4MDAwMDk0MDgwMDAwOTAwRjUKKzoxMDc5NDAwMDgwMDgwMTAwODAwODAwODA4MDA4MDAwMDgwMEUwMDAwOTAKKzoxMDc5NTAwMDgwMDgwMDgwODAwODAwMDA4MDAwMEE4MDgwMDAwQTAwMDMKKzowODc5NjAwMDgwMDAwOTgwODAwMDA5MDA4RAorOjAwMDAwMDAxRkYKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgZmlybXdhcmUgZGF0YSBkZXJpdmVkIGZyb20gcHJvcHJpZXRhcnkgdW5wdWJsaXNoZWQKKyAqIHNvdXJjZSBjb2RlLCBDb3B5cmlnaHQgKGMpIDIwMDQgLSAyMDA5IEJyb2FkY29tIENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIHRoZSBkaXN0cmlidXRpb24gb2YgdGhpcyBmaXJtd2FyZSBkYXRhCisgKiBpbiBoZXhhZGVjaW1hbCBvciBlcXVpdmFsZW50IGZvcm1hdCwgcHJvdmlkZWQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCisgKiBhY2NvbXBhbnlpbmcgaXQuCisgKi8KZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDIvYm54Mi1ydjJwLTA5LTUuMC4wLmoxMC5mdy5paGV4IGIvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDktNS4wLjAuajEwLmZ3LmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1OWQxNgotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2JueDIvYm54Mi1ydjJwLTA5LTUuMC4wLmoxMC5mdy5paGV4CkBAIC0wLDAgKzEsNDYyIEBACis6MTAwMDAwMDAwMDAwMDAwMDAwMDAwRTA4MDAwMDAwNTgwMDAwMDAwOTc5Cis6MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCis6MTAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCis6MTAwMDMwMDAwMDAwMEREODAwMDAwRTYwMDAwMDAwMDUwMDAwMDAwMDY4Cis6MTAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCis6MDgwMDUwMDAwMDAwMDAwMDAwMDAwMDAwQTgKKzowODAwNTgwMDAwMDAwMDEwQjE4MDAwMDY1OQorOjEwMDA2MDAwMDAwMDAwMUYwNTAzMDMwMDAwMDAwMDA4MDUwMEZGRkY1QgorOjEwMDA3MDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDA4MDUwMDAwRkY1QQorOjEwMDA4MDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDA4QUMwMDAwMDFBMQorOjEwMDA5MDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDBDMkY4MDAwMDE5RgorOjEwMDBBMDAwMDAwMDAwMDAyQjAwMDAwMDAwMDAwMDAwMkI4MDAwMDA3QQorOjEwMDBCMDAwMDAwMDAwMTA5MUUwMDAwMjAwMDAwMDA4QUMwMDAwMDEwOAorOjEwMDBDMDAwMDAwMDAwMTAyMDNGMDA2QjAwMDAwMDEwMjEzRjAwMDNFMworOjEwMDBEMDAwMDAwMDAwMTAyMEJGMDAzQTAwMDAwMDE4ODAwMEZGRkQ2MworOjEwMDBFMDAwMDAwMDAwMTBCMUI4QjAxNTAwMDAwMDBCMkZERjAwMDJCNworOjEwMDBGMDAwMDAwMDAwMDAwM0Q4MDAwMDAwMDAwMDAwMkMzODAwMDBDMQorOjEwMDEwMDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDAwNgorOjEwMDExMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTVCMgorOjEwMDEyMDAwMDAwMDAwMTg4MDAwMDA3QzAwMDAwMDA4MkQ4MDAxMUNFOQorOjEwMDEzMDAwMDAwMDAwMDgwMjAwMDAwMTAwMDAwMDEwOTFERTAwMDAzNQorOjEwMDE0MDAwMDAwMDAwMEY0MkUwMDAxQzAwMDAwMDEwOTE4NDBBMTYxRAorOjEwMDE1MDAwMDAwMDAwMTg4MDAwMDA4MzAwMDAwMDBDMjk4MDAwMDJDRAorOjEwMDE2MDAwMDAwMDAwMEMxRjgwMDAwMjAwMDAwMDAwMkFERjAwMDBEOQorOjEwMDE3MDAwMDAwMDAwMDgyQTAwMDAwRjAwMDAwMDAwMDUwMDAwMDAzOQorOjEwMDE4MDAwMDAwMDAwMTg4MDAwRkZFNjAwMDAwMDA4MDIwMDAwMDFFNworOjEwMDE5MDAwMDAwMDAwMEY0MkUwMDAxQzAwMDAwMDEwOTE4NDBBMThDQgorOjEwMDFBMDAwMDAwMDAwMDgyQzgwMDAwNjAwMDAwMDA4MkQwMDAwMDY1QQorOjEwMDFCMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMDYwRQorOjEwMDFDMDAwMDAwMDAwMTg4MDAwMDA3MjAwMDAwMDE4ODAwMEZGRjE5RAorOjEwMDFEMDAwMDAwMDAwMDhCMTAwMDAwMTAwMDAwMDA4MkM4MDAxMENBNAorOjEwMDFFMDAwMDAwMDAwMDgyRDAwMDAwODAwMDAwMDA4MkQ4MDAwMDExQworOjEwMDFGMDAwMDAwMDAwMTg4MDAwMDA2QzAwMDAwMDBCMkZERjAwMDJFMAorOjEwMDIwMDAwMDAwMDAwMEMxRjgwMDAwMjAwMDAwMDAwMkMwNzAwMDAwRQorOjEwMDIxMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMDU1NTVBOAorOjEwMDIyMDAwMDAwMDAwMTg4MDAwRkZEMjAwMDAwMDBCMkZERjAwMDI0QQorOjEwMDIzMDAwMDAwMDAwMEMxRjgwMDAwMDAwMDAwMDAwMkMwNzAwMDBFMAorOjEwMDI0MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMDU1NTU3OAorOjEwMDI1MDAwMDAwMDAwMTg4MDAwRkZDQzAwMDAwMDBDMUY4MDAwMDI4RQorOjEwMDI2MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGQzk3NworOjEwMDI3MDAwMDAwMDAwMEMyOTgwMDAwMjAwMDAwMDBDMUY4MDAwMDIxQQorOjEwMDI4MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMDUyRQorOjEwMDI5MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGQzM0RAorOjEwMDJBMDAwMDAwMDAwMDgwMjI0MDA0QTAwMDAwMDE4MDAwNDAwMDBCQQorOjEwMDJCMDAwMDAwMDAwMTg4MDAwMDAxQzAwMDAwMDE4ODAwMDAwMUVENAorOjEwMDJDMDAwMDAwMDAwMTg4MDAwMDA2NTAwMDAwMDE4ODAwMDAwQkNERAorOjEwMDJEMDAwMDAwMDAwMTg4MDAwMDBCQjAwMDAwMDE4ODAwMDAwMDAzMworOjEwMDJFMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBERQorOjEwMDJGMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBDRQorOjEwMDMwMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBCRAorOjEwMDMxMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAxMDdBNQorOjEwMDMyMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDA5RAorOjEwMDMzMDAwMDAwMDAwMTg4MDAwMDAxNTAwMDAwMDE4ODAwMDAwMUI1RAorOjEwMDM0MDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwRDJBQgorOjEwMDM1MDAwMDAwMDAwMTg4MDAwMDAyRjAwMDAwMDE4ODAwMDAxMDczNgorOjEwMDM2MDAwMDAwMDAwMTg4MDAwMDEzMjAwMDAwMDE4ODAwMDAwRkQyRAorOjEwMDM3MDAwMDAwMDAwMTg4MDAwMDE1NjAwMDAwMDE4ODAwMDAwNEVBOAorOjEwMDM4MDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwOEZBRQorOjEwMDM5MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDAwMDUwMDAwMDBBQworOjEwMDNBMDAwMDAwMDAwMTg4MDAwRkZBMjAwMDAwMDEwOTFENDAwMDA5RgorOjEwMDNCMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFEQgorOjEwMDNDMDAwMDAwMDAwMDgyQTAwMDAwMjAwMDAwMDAwMDUwMDAwMDBGNAorOjEwMDNEMDAwMDAwMDAwMTg4MDAwRkY5QzAwMDAwMDEwOTFENDAwMDA3NQorOjEwMDNFMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFBQgorOjEwMDNGMDAwMDAwMDAwMDAyOTQyMDAwMDAwMDAwMDA4MkEwMDAwMDI1RQorOjEwMDQwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDE4ODAwMEZGOTVCQgorOjEwMDQxMDAwMDAwMDAwMTg4MDAwRkY5NDAwMDAwMDEwQjFCQ0IwMEE3QQorOjEwMDQyMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMDNEODAwMDBENgorOjEwMDQzMDAwMDAwMDAwMDAyQzNDMDAwMDAwMDAwMDEwOTFENDAwMDBERgorOjEwMDQ0MDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMDAwMTc0NQorOjEwMDQ1MDAwMDAwMDAwMTg4MDAwMDBDQjAwMDAwMDEwMkM2MjAxQkFFMAorOjEwMDQ2MDAwMDAwMDAwMTg4MDAwMDAwNjAwMDAwMDA4MkM4MDAxMEQyQworOjEwMDQ3MDAwMDAwMDAwMDgyRDAwMDAwOTAwMDAwMDEwOTFENDAwMDBDOQorOjEwMDQ4MDAwMDAwMDAwMDgyRDgwMDEwNzAwMDAwMDE4ODAwMDAwMjRGMworOjEwMDQ5MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDBDMUY4MDAwMDBGQworOjEwMDRBMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMkFERjAwMDBDNAorOjEwMDRCMDAwMDAwMDAwMDgyQTAwMDAwNjAwMDAwMDA4MDUwMDU1NTU0RAorOjEwMDRDMDAwMDAwMDAwMTg4MDAwRkY3RTAwMDAwMDEwOTFENDAwMDBBMgorOjEwMDREMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFCQQorOjEwMDRFMDAwMDAwMDAwMDgyQTAwMDAwQjAwMDAwMDAwMDUwMDAwMDBDQQorOjEwMDRGMDAwMDAwMDAwMTg4MDAwRkY3ODAwMDAwMDE4MDAwMjAwMDBEMworOjEwMDUwMDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDEwQjE4QTAwMDgxMAorOjEwMDUxMDAwMDAwMDAwMTBCMThDMTQwNzAwMDAwMDBCMDUwQUZGRkY1QgorOjEwMDUyMDAwMDAwMDAwMTBCMThBMDAwMzAwMDAwMDAwODYwQTE4MDBENQorOjEwMDUzMDAwMDAwMDAwMTA5MThDMDAwMDAwMDAwMDA4MkEwMDAwMDE1QgorOjEwMDU0MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDE4MDAwRDAwMDAxMQorOjEwMDU1MDAwMDAwMDAwMDAwNTAyMDAwMDAwMDAwMDEwOTFERTAwMDAxNQorOjEwMDU2MDAwMDAwMDAwMTgwMDBBMDAwMDAwMDAwMDAwMDY4MjAwMDBFMQorOjEwMDU3MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDEwQkVFMTAwMDU0OAorOjEwMDU4MDAwMDAwMDAwMTg4MDAwRkY1RjAwMDAwMDAxMDU2MTE0MDBGQQorOjEwMDU5MDAwMDAwMDAwMTA5MThBMDAwMjAwMDAwMDA4QjBFMTAwMDE5NAorOjEwMDVBMDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDAwMDY4MjAwMDA5RQorOjEwMDVCMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDEwQkVFMjAwMDUwNworOjEwMDVDMDAwMDAwMDAwMTg4MDAwRkY1NzAwMDAwMDAxMDU2MjE0MDBDMQorOjEwMDVEMDAwMDAwMDAwMTA5MThBMDAwMjAwMDAwMDA4QjE2MjAwMDFEMgorOjEwMDVFMDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDEwQjFBMEIwMTNDMgorOjEwMDVGMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMyMDAwMDA5NAorOjEwMDYwMDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDAwMQorOjEwMDYxMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTVBRAorOjEwMDYyMDAwMDAwMDAwMTg4MDAwRkZEQzAwMDAwMDA4MkQ4MDAxMUM4NQorOjEwMDYzMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDE4ODAwMEZGRTYwRQorOjEwMDY0MDAwMDAwMDAwMEY0NzYwMDAwODAwMDAwMDBGMDYwRTAwMDFDOAorOjEwMDY1MDAwMDAwMDAwMDAwRjU4MDAwMDAwMDAwMDAwMEE2NDAwMDBDNQorOjEwMDY2MDAwMDAwMDAwMDAwQUU1MDAwMDAwMDAwMDA5MEI2NkZGRkYyMworOjEwMDY3MDAwMDAwMDAwMDAwRDYxMDAwMDAwMDAwMDE4ODAwMDAwMTM2MQorOjEwMDY4MDAwMDAwMDAwMEY0NzYwMDAwODAwMDAwMDBCMkZERjAwMDI5MQorOjEwMDY5MDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDA3MQorOjEwMDZBMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMUMwMworOjEwMDZCMDAwMDAwMDAwMEYwNjBFMDAwMTAwMDAwMDEwMDAxRjAwMDBFNworOjEwMDZDMDAwMDAwMDAwMDAwRjU4MDAwMDAwMDAwMDE4ODAwMEZGRDQ1OAorOjEwMDZEMDAwMDAwMDAwMDAwQTY0MDAwMDAwMDAwMDAwMEFFNTAwMDBCRAorOjEwMDZFMDAwMDAwMDAwMDkwQjY2RkZGRjAwMDAwMDAwMEQ2MTAwMDAyNAorOjEwMDZGMDAwMDAwMDAwMDAwMjYyMDAwMDAwMDAwMDBCMkZERjAwMDI3QgorOjEwMDcwMDAwMDAwMDAwMDAzMTA0MDAwMDAwMDAwMDAwMzA5QTAwMDBFQQorOjEwMDcxMDAwMDAwMDAwMDkwNTYwMDAwRjAwMDAwMDEwQjE4QTAwMEIwNgorOjEwMDcyMDAwMDAwMDAwMDAwNTYzNEMwMDAwMDAwMDA4MDUwQTAwMTJFQworOjEwMDczMDAwMDAwMDAwMTBCOTYyMTQwMzAwMDAwMDAwMDMwMDAwMDA3NAorOjEwMDc0MDAwMDAwMDAwMTg4MDAwMDAwNjAwMDAwMDE4ODAwMEZGMjQ1MAorOjEwMDc1MDAwMDAwMDAwMTBCNjA2MTQwNDAwMDAwMDA4MDMwNjAwMDFBMworOjEwMDc2MDAwMDAwMDAwMDgyQTAwMDAwMTAwMDAwMDE4ODAwMEZGMjk5NgorOjEwMDc3MDAwMDAwMDAwMDAwQzk2MTgwMDAwMDAwMDA5MEM5OUZGRkYxMworOjEwMDc4MDAwMDAwMDAwMDRDQzk5MzQwMDAwMDAwMDEwQjE5NjMyMDI0MQorOjEwMDc5MDAwMDAwMDAwMDgwRjgwMDAwMDAwMDAwMDBDMjk4MDAwMDEwQworOjEwMDdBMDAwMDAwMDAwMEMyOTUyMDAwMTAwMDAwMDBDMjk1MjAwMDAzQQorOjEwMDdCMDAwMDAwMDAwMDgwMjAwMDAwRTAwMDAwMDA4MDI4MDAwMUE3RAorOjEwMDdDMDAwMDAwMDAwMTBCMUM0MEEwMjAwMDAwMDA4MDIwMDAwMDM4QgorOjEwMDdEMDAwMDAwMDAwMDgyMjAwMDAwMTAwMDAwMDBDMUY4MDAwMDE0MgorOjEwMDdFMDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDAwMkEwMDA4MDBDRQorOjEwMDdGMDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGMTc5NAorOjEwMDgwMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDEwOTFENDAwMDA1OAorOjEwMDgxMDAwMDAwMDAwMDgyQTAwMDAwMTAwMDAwMDAwMkMyMDAwMDA1OQorOjEwMDgyMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkM4MDAwMDA5RgorOjEwMDgzMDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDA4MkQ4MDAxMUNCMQorOjEwMDg0MDAwMDAwMDAwMTg4MDAwRkZBMjAwMDAwMDA4MkM4MDAwMDZCNQorOjEwMDg1MDAwMDAwMDAwMDgyRDAwMDAwNjAwMDAwMDAwMzA4MDAwMDBBRAorOjEwMDg2MDAwMDAwMDAwMDAzMTAwMDAwMDAwMDAwMDA4MkQ4MDAwMDY5QworOjEwMDg3MDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDExNgorOjEwMDg4MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMkFERjAwMDBFMAorOjEwMDg5MDAwMDAwMDAwMDgyQTAwMDAxMDAwMDAwMDAwMDUwMDAwMDAxMQorOjEwMDhBMDAwMDAwMDAwMTg4MDAwRkYwMjAwMDAwMDEwOTFBMEIwMDlCNQorOjEwMDhCMDAwMDAwMDAwMDgyQzgwMDEwRDAwMDAwMDA4MkQwMDAwMDkzOAorOjEwMDhDMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMDdGNgorOjEwMDhEMDAwMDAwMDAwMTg4MDAwRkY5QjAwMDAwMDE4ODAwMDAwMTAzRQorOjEwMDhFMDAwMDAwMDAwMDhBQzAwMDAwMTAwMDAwMDE4ODAwMDAwMEJCMAorOjEwMDhGMDAwMDAwMDAwMDAwMzgwQjAwMDAwMDAwMDBCMkZERjAwMDJBQQorOjEwMDkwMDAwMDAwMDAwMDAyQzAwNDAwMDAwMDAwMDEwOTFENDAwMDAwNgorOjEwMDkxMDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMEZGN0QwQgorOjEwMDkyMDAwMDAwMDAwMTg4MDAwMDAzMTAwMDAwMDE4ODAwMDAwMDY2MAorOjEwMDkzMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMwMDBFMDA2MgorOjEwMDk0MDAwMDAwMDAwMDgyQTAwMDAwNzAwMDAwMDA4MDUwMDU1NTVCNworOjEwMDk1MDAwMDAwMDAwMTg4MDAwRkVFQzAwMDAwMDAwMDY4MjAwMDA4RAorOjEwMDk2MDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDEyNQorOjEwMDk3MDAwMDAwMDAwMTAwQ0U3MDAwNzAwMDAwMDA5MDU2MkZGRkZGRgorOjEwMDk4MDAwMDAwMDAwMTBCQTZDMTQwNTAwMDAwMDAwMkFERjAwMDAwRgorOjEwMDk5MDAwMDAwMDAwMDAyMTAwMDAwMDAwMDAwMDA4MkEwMDAwMDVGRgorOjEwMDlBMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkM4MDAxMEMxMQorOjEwMDlCMDAwMDAwMDAwMDgyRDAwMDAwODAwMDAwMDBDMzE2MjAwMTg0MworOjEwMDlDMDAwMDAwMDAwMDgyRDgwMDAwMTAwMDAwMDE4ODAwMEZGNzE2OQorOjEwMDlEMDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDEwQjFBMEIwMEVEMworOjEwMDlFMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMDNEODAwMDAxMQorOjEwMDlGMDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDEwOTFENDAwMDAzNgorOjEwMEEwMDAwMDAwMDAwMTg4MDAwMDAxNTAwMDAwMDEwMkM2MjAwMDI5OQorOjEwMEExMDAwMDAwMDAwMTg4MDAwMDAwQzAwMDAwMDBCMkZERjAwMDIxNworOjEwMEEyMDAwMDAwMDAwMDAyQzA3MDAwMDAwMDAwMDBDMUY4MDAwMDFFNworOjEwMEEzMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMEZGRkYyQworOjEwMEE0MDAwMDAwMDAwMTg4MDAwRkVDRTAwMDAwMDA4MkM4MDAxMEQ4MAorOjEwMEE1MDAwMDAwMDAwMDgyRDAwMDAwOTAwMDAwMDEwOTFENDAwMDBFMworOjEwMEE2MDAwMDAwMDAwMDgyRDgwMDEwNzAwMDAwMDE4ODAwMEZGNjhDQQorOjEwMEE3MDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDExNAorOjEwMEE4MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMkFERjAwMDBERQorOjEwMEE5MDAwMDAwMDAwMDgyQTAwMDAwQTAwMDAwMDAwMDUwMDAwMDAxNQorOjEwMEFBMDAwMDAwMDAwMTg4MDAwRkVDMjAwMDAwMDAwMDY4MjAwMDA2NgorOjEwMEFCMDAwMDAwMDAwMDgyQzgwMDEwQzAwMDAwMDA4MkQwMDAwMDgzOAorOjEwMEFDMDAwMDAwMDAwMDgyRDgwMDEzNDAwMDAwMDAwMDAwMDAwMDAzQworOjEwMEFEMDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDA4MkM4MDAxNDA5MgorOjEwMEFFMDAwMDAwMDAwMDgyRDAwMDAzQzAwMDAwMDA4MkQ4MDAxMjRCQgorOjEwMEFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDA3NworOjEwMEIwMDAwMDAwMDAwMDgyQzgwMDA4MDAwMDAwMDA4MkQwMDAwMDA3QworOjEwMEIxMDAwMDAwMDAwMDgyRDgwMDEwNTAwMDAwMDEwQkVFMjAwMDU2NQorOjEwMEIyMDAwMDAwMDAwMTg4MDAwRkVBQjAwMDAwMDAxMDU2MjE0MDAwOAorOjEwMEIzMDAwMDAwMDAwMTA5MThBMDAwMjAwMDAwMDA4QjE2MjAwMDE2QworOjEwMEI0MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDE4MDAwRDAwMDAwMQorOjEwMEI1MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMEFBQUFCRQorOjEwMEI2MDAwMDAwMDAwMTg4MDAwRkYzNDAwMDAwMDBDMjk4MDAwMDEwNAorOjEwMEI3MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDA4MkEwMDAwMDk4RQorOjEwMEI4MDAwMDAwMDAwMDgwNTAwQUFBQTAwMDAwMDE4ODAwMEZFQTVDOQorOjEwMEI5MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTUyOAorOjEwMEJBMDAwMDAwMDAwMTg4MDAwRkYyQzAwMDAwMDEwOTFBMDNDMDIwMworOjEwMEJCMDAwMDAwMDAwMTBCMUU2NjIwNzAwMDAwMDBCMkZERjAwMDIwQQorOjEwMEJDMDAwMDAwMDAwMDAyQzMxMDAwMDAwMDAwMDA5MkNCMTAwN0Y2MworOjEwMEJEMDAwMDAwMDAwMDgyQ0Q5MDAwMDAwMDAwMDA4MkQwMDAwMDBEMworOjEwMEJFMDAwMDAwMDAwMDgyRDgwMDEwRDAwMDAwMDEwQjFBODAwMDZEMworOjEwMEJGMDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDAwMkMyMDAwMDAxQQorOjEwMEMwMDAwMDAwMDAwMDAyQ0E3MDAwMDAwMDAwMDA4MkQwMDAwMTBDQworOjEwMEMxMDAwMDAwMDAwMDgyRDgwMDEwODAwMDAwMDE4ODAwMEZGMjc1OAorOjEwMEMyMDAwMDAwMDAwMTBCMUE2MDAxMDAwMDAwMDEwMDAxRjAwMDAxRQorOjEwMEMzMDAwMDAwMDAwMEYwRjMwMDAwNzAwMDAwMDAwMEE2MDAwMDBGNQorOjEwMEM0MDAwMDAwMDAwMDAwQUUxMDAwMDAwMDAwMDBGNEI2MjAwMDhGNQorOjEwMEM1MDAwMDAwMDAwMDkwQjE2MDBGRjAwMDAwMDAwMEQ2MjAwMDBGQworOjEwMEM2MDAwMDAwMDAwMDkwRDFBMDBGRjAwMDAwMDEwMDczMDAwMDMwQgorOjEwMEM3MDAwMDAwMDAwMEMwRDFBMDAwODAwMDAwMDBDMEIxNjAwMDgwNAorOjEwMEM4MDAwMDAwMDAwMEY0Q0UzMDAxODAwMDAwMDAwMEM5OTJDMDAzRAorOjEwMEM5MDAwMDAwMDAwMDRDQzk5MzQwMDAwMDAwMDA4MEY4MDAwMDAyMAorOjEwMENBMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDAwMzMzMTAwMDAyQQorOjEwMENCMDAwMDAwMDAwMDgyMjAwMDAxNjAwMDAwMDAwMkFERjAwMDBFQgorOjEwMENDMDAwMDAwMDAwMDgyQTAwMDAwQzAwMDAwMDEwMDA5RjAwMDAzNworOjEwMENEMDAwMDAwMDAwMDAwRjIwMDAwMDAwMDAwMDBDMUY4MDAwMDEzOQorOjEwMENFMDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZFNzkzRQorOjEwMENGMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMEFBQUExRAorOjEwMEQwMDAwMDAwMDAwMTg4MDAwRkYwMDAwMDAwMDBGNDcyMjAwMDhDQworOjEwMEQxMDAwMDAwMDAwMDkwNzBFMDAwRjAwMDAwMDA4MDcwRTAwMDg4MQorOjEwMEQyMDAwMDAwMDAwMDgwMjgwMDAwMTAwMDAwMDA3MDI4NTFDMDA4RQorOjEwMEQzMDAwMDAwMDAwMDg4Mjg1MDAwMTAwMDAwMDAwMDI4NTRDMDBEMAorOjEwMEQ0MDAwMDAwMDAwMDc0Mjg1MUMwMDAwMDAwMDAzQzNBQTUyMDBGNworOjEwMEQ1MDAwMDAwMDAwMDAwM0IxMEUwMDAwMDAwMDA3NEIwNzFDMDA1QworOjEwMEQ2MDAwMDAwMDAwMEYwRjMwMDAwNzAwMDAwMDBGMEE5NjAwMDM3QworOjEwMEQ3MDAwMDAwMDAwMDAwQTk1NUMwMDAwMDAwMDAwNEEwMDVBMDBENAorOjEwMEQ4MDAwMDAwMDAwMDAwQzk2MEEwMDAwMDAwMDA5MEM5OUZGRkYwQgorOjEwMEQ5MDAwMDAwMDAwMDgwRDAwRkZGRjAwMDAwMDEwQjE5NjMyMDJCNQorOjEwMERBMDAwMDAwMDAwMDgwRjgwMDAwNTAwMDAwMDEwQjFBODAwMDgzNgorOjEwMERCMDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDBCMkZERjAwMDI4OQorOjEwMERDMDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDAwMkNBNzAwMDAwNAorOjEwMEREMDAwMDAwMDAwMDgyRDAwMDAxMDAwMDAwMDA4MkQ4MDAxMDgxMAorOjEwMERFMDAwMDAwMDAwMTg4MDAwRkVFRTAwMDAwMDBDMjk4MDAwMDFDOQorOjEwMERGMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDMUY4MDAwMDExOAorOjEwMEUwMDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMEQ5QQorOjEwMEUxMDAwMDAwMDAwMDgwNTAwQUFBQTAwMDAwMDE4ODAwMEZFNTM4OAorOjEwMEUyMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTU5NQorOjEwMEUzMDAwMDAwMDAwMTg4MDAwRkVEQTAwMDAwMDBDMjk4MDAwMDE4QworOjEwMEU0MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDA4MkEwMDAwMDdCRAorOjEwMEU1MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZFNEJGQQorOjEwMEU2MDAwMDAwMDAwMTBCMTgwMDAwNDAwMDAwMDFGMDUwMzAzMDAxMworOjEwMEU3MDAwMDAwMDAwMDgwNTAwMDBGRjAwMDAwMDE4MDAwMjAwMDA0QworOjEwMEU4MDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDEwQjFENDAwMDBBMworOjEwMEU5MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDEwMjA1MzAwMDA1MAorOjEwMEVBMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDAwMkY4MEFBMDBCQQorOjEwMEVCMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDA4MDI1NDAwMEUxMAorOjEwMEVDMDAwMDAwMDAwMDAyQzQwMDAwMDAwMDAwMDA5Mjk1MjAwM0ZGMworOjEwMEVEMDAwMDAwMDAwMTgwMDA0MDAwMDAwMDAwMDE4ODAwMDAwMTA0RQorOjEwMEVFMDAwMDAwMDAwMTg4MDAwMDAxMTAwMDAwMDE4ODAwMDAwMzk4OAorOjEwMEVGMDAwMDAwMDAwMTg4MDAwMDBGRDAwMDAwMDE4ODAwMDAwRkNDOQorOjEwMEYwMDAwMDAwMDAwMTg4MDAwMDBGQjAwMDAwMDE4ODAwMDAwRkJCQgorOjEwMEYxMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAxMTM4RAorOjEwMEYyMDAwMDAwMDAwMTg4MDAwMDBGNzAwMDAwMDE4ODAwMDAwMEI4RgorOjEwMEYzMDAwMDAwMDAwMTg4MDAwMDExNzAwMDAwMDE4ODAwMDAxNjUwMworOjEwMEY0MDAwMDAwMDAwMTg4MDAwMDA2MzAwMDAwMDE4ODAwMDAwQ0U0MAorOjEwMEY1MDAwMDAwMDAwMTg4MDAwMDBERTAwMDAwMDAwMkEwMDAwMDBGMQorOjEwMEY2MDAwMDAwMDAwMTg4MDAwRkZFNTAwMDAwMDAwMkEwMDAwMDBEQgorOjEwMEY3MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDE4ODAwMEZGRTI0MworOjEwMEY4MDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDE4ODAwMEZGRTBDMAorOjEwMEY5MDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDAwMDUwMjAwMDAzMAorOjEwMEZBMDAwMDAwMDAwMTA5MTk2MzQyMTAwMDAwMDEwMjA1RjAwMDAyNgorOjEwMEZCMDAwMDAwMDAwMDAyQzFFMDAwMDAwMDAwMDA4MkM4MDAwMDYyRAorOjEwMEZDMDAwMDAwMDAwMDgyRDAwMDAwNjAwMDAwMDA4MkQ4MDAxMDIyRQorOjEwMEZEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDA5MgorOjEwMEZFMDAwMDAwMDAwMDAwRDYxMDAwMDAwMDAwMDE4MDAwQTAwMDA3MQorOjEwMEZGMDAwMDAwMDAwMDAwNTAyMDAwMDAwMDAwMDEwOTE5NjM0MTY2OQorOjEwMTAwMDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDAwMDlEODAwMDA3MAorOjEwMTAxMDAwMDAwMDAwMDAyQzFFMDAwMDAwMDAwMDA4MkM4MDAxMEVDMworOjEwMTAyMDAwMDAwMDAwMDgyRDAwMDAwQTAwMDAwMDA4MkQ4MDAxMDJDOQorOjEwMTAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDAzMQorOjEwMTA0MDAwMDAwMDAwMDAwRDYyMDAwMDAwMDAwMDAwMkMxMzAwMDBGMgorOjEwMTA1MDAwMDAwMDAwMTgwMDBBMDAwMDAwMDAwMDAwMDUwMjAwMDA2NworOjEwMTA2MDAwMDAwMDAwMTA5MTk2MzQwOTAwMDAwMDEwMjA1RjAwMDA3RAorOjEwMTA3MDAwMDAwMDAwMDAyQzFFMDAwMDAwMDAwMDA4MkM4MDAwMDY2QworOjEwMTA4MDAwMDAwMDAwMDgyRDAwMDA2QTAwMDAwMDA4MkQ4MDAxMDIwOQorOjEwMTA5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDBEMQorOjEwMTBBMDAwMDAwMDAwMDAwRDdBMDAwMDAwMDAwMDE4MDAwQTAwMDA5NworOjEwMTBCMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDAwMEQ2MTAwMDA5OAorOjEwMTBDMDAwMDAwMDAwMDAwMzYyMDAwMDAwMDAwMDEwMjM0MjAwQzE4NQorOjEwMTBEMDAwMDAwMDAwMDAwMjYzOEMwMDAwMDAwMDAwMjY0NjAwMDBCMworOjEwMTBFMDAwMDAwMDAwMDgwMjA0MDAxMjAwMDAwMDEwQjkwNjA4MjdFMgorOjEwMTBGMDAwMDAwMDAwMDAwRjU4MDAwMDAwMDAwMDAwMEE2NDAwMDAxQgorOjEwMTEwMDAwMDAwMDAwMDAwQUU1MDAwMDAwMDAwMDA5MEI2NkZGRkY3OAorOjEwMTExMDAwMDAwMDAwMDAwQzAwMDAwMDAwMDAwMDAwMEI4MDAwMDAzOAorOjEwMTEyMDAwMDAwMDAwMDgwQ0M2MDAxMjAwMDAwMDE4ODAwMEZGQ0U2RQorOjEwMTEzMDAwMDAwMDAwMDgwRjgwMDAwMzAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMTE0MDAwMDAwMDAwMTAwMDlGMDAwMDAwMDAwMDA4MjcxMTAwMTI5RQorOjEwMTE1MDAwMDAwMDAwMDA2NjkwMDAwMDAwMDAwMDA4QTMxQjAwMTJDMQorOjEwMTE2MDAwMDAwMDAwMTBCMTk4MDAwMzAwMDAwMDEwMDAxRjAwMDBGNAorOjEwMTE3MDAwMDAwMDAwMDgwRjgwMDAwNDAwMDAwMDA4MjIwMDAwMDNBNworOjEwMTE4MDAwMDAwMDAwMDgyQzgwMDAwQzAwMDAwMDA4MkQwMDAwMEM1RQorOjEwMTE5MDAwMDAwMDAwMTAwMDlGMDAwMDAwMDAwMDAwMjU5NjAwMDBFNQorOjEwMTFBMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDAwMDY2NjAwMDAxRQorOjEwMTFCMDAwMDAwMDAwMDA4NjYxMTgwMDAwMDAwMDA5MDI2MDAwMEZCNgorOjEwMTFDMDAwMDAwMDAwMEYwMjA0MDAwMjAwMDAwMDEwQjYwQzA4MDUyOQorOjEwMTFEMDAwMDAwMDAwMEMxRkJGMDAwMDAwMDAwMDEwMjg2NjAwMDM4NAorOjEwMTFFMDAwMDAwMDAwMDgwNzhGMDAwMTAwMDAwMDBDMzM2NjAwMTBBQgorOjEwMTFGMDAwMDAwMDAwMDAzMjE0MDAwMDAwMDAwMDAwMzI5NTAwMDBFMgorOjEwMTIwMDAwMDAwMDAwMDU3MzY2MkMwMDAwMDAwMDAwMzFFMzJFMDA5MgorOjEwMTIxMDAwMDAwMDAwMDgyRDgwMDAxMDAwMDAwMDE4ODAwMEZGOEVFNAorOjEwMTIyMDAwMDAwMDAwMDAyMzAwMDAwMDAwMDAwMDA5MjVFNkZGRkY4OQorOjEwMTIzMDAwMDAwMDAwMDgyMjAwMDAwQjAwMDAwMDBDNjk1MjAwMDBCMgorOjEwMTI0MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwMjg2NjAwNzVENgorOjEwMTI1MDAwMDAwMDAwMTg4MDAwRkY4NzAwMDAwMDAwMkEwMDAwMDA0NgorOjEwMTI2MDAwMDAwMDAwMDgyQzgwMDA0MDAwMDAwMDA4MkQwMDAwMjAzNQorOjEwMTI3MDAwMDAwMDAwMDgyRDgwMDExQzAwMDAwMDAwMDAwMDAwMDA5QworOjEwMTI4MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDBGNDJFQTAwMTA5NAorOjEwMTI5MDAwMDAwMDAwMTAwMDRGMDAwNDAwMDAwMDEwQjc0NjkyMDA0QworOjEwMTJBMDAwMDAwMDAwMDgwMjQ5MDAxMjAwMDAwMDEwQjU4NDBBMDA4NgorOjEwMTJCMDAwMDAwMDAwMDAwRDYxMDAwMDAwMDAwMDEwQkE2NjM0NTcwNQorOjEwMTJDMDAwMDAwMDAwMDg4MzA1MDAxMjAwMDAwMDEwMDA0RjAwMDIxQgorOjEwMTJEMDAwMDAwMDAwMDAwMzQ5MDAwMDAwMDAwMDAxODMwNjhDMDBBQworOjEwMTJFMDAwMDAwMDAwMDA4M0M2MEMwMDAwMDAwMDEwQjE4NzAwMTE1MAorOjEwMTJGMDAwMDAwMDAwMDAwQjZFMDAwMDAwMDAwMDEwQkVFOTAwMDVCOQorOjEwMTMwMDAwMDAwMDAwMTg4MDAwRkY2RTAwMDAwMDAxMDU2OTE0MDA1NQorOjEwMTMxMDAwMDAwMDAwMTA5MThBMDAwMjAwMDAwMDA4QjRFOTAwMDFGQQorOjEwMTMyMDAwMDAwMDAwMTBCMUU5MkM0QTAwMDAwMDAwODY2OTJDMDA4MgorOjEwMTMzMDAwMDAwMDAwMDAwMjAwMDAwMDAwMDAwMDA5MDJFQUZGRkZCOAorOjEwMTM0MDAwMDAwMDAwMTAwMDBDMDAwMjAwMDAwMDAwMDIwNDBBMDA2RgorOjEwMTM1MDAwMDAwMDAwMEY0NjBDMDAwMTAwMDAwMDBGMDI4NTAwMDE5NAorOjEwMTM2MDAwMDAwMDAwMTA5MThDMDFGQzAwMDAwMDEwQjcwNDBFNDEzOQorOjEwMTM3MDAwMDAwMDAwMDAwRjQwMDAwMDAwMDAwMDAwMEQ2MTAwMDBCMAorOjEwMTM4MDAwMDAwMDAwMDAwQTY0MDAwMDAwMDAwMDAwMEFFNTAwMDAwMAorOjEwMTM5MDAwMDAwMDAwMDkwQjY2RkZGRjAwMDAwMDAwMEMwMDAwMDBDOQorOjEwMTNBMDAwMDAwMDAwMDAwQjgwMDAwMDAwMDAwMDA4MEM4NjAwMTIwNgorOjEwMTNCMDAwMDAwMDAwMDgwRjgwMDAwMzAwMDAwMDBDMjk1MjAwMDAwQworOjEwMTNDMDAwMDAwMDAwMTAwMDlGMDAwMDAwMDAwMDA4MjcxMTAwMTIxQworOjEwMTNEMDAwMDAwMDAwMDA2NjkwMDAwMDAwMDAwMDAwMjY0NjAwMDBBQgorOjEwMTNFMDAwMDAwMDAwMDAyMzA2MDAwMDAwMDAwMDEwQjE5ODAwMDU3NgorOjEwMTNGMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDA4MEY4MDAwMDQyMworOjEwMTQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAxRjAwMDBBRAorOjEwMTQxMDAwMDAwMDAwMDAzMjE0MDAwMDAwMDAwMDAwMzI5NTAwMDBCRgorOjEwMTQyMDAwMDAwMDAwMDAzMUUzMkUwMDAwMDAwMDA1NzM2NjJDMDA3MAorOjEwMTQzMDAwMDAwMDAwMDAyNTk2MDAwMDAwMDAwMDEwQjE4NzAwMTY5MworOjEwMTQ0MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDBGMEY2QjAwMDc1NworOjEwMTQ1MDAwMDAwMDAwMDAwRDY5MDAwMDAwMDAwMDAwMEE2QzAwMDBBMAorOjEwMTQ2MDAwMDAwMDAwMDAwQUVEMDAwMDAwMDAwMDAwMEI2RTAwMDAwQworOjEwMTQ3MDAwMDAwMDAwMDAwQjgwMDAwMDAwMDAwMDAwMEM4NzAwMDA0RQorOjEwMTQ4MDAwMDAwMDAwMDgwRjgwMDAwMzAwMDAwMDEwMjA1MzAwMDAzRgorOjEwMTQ5MDAwMDAwMDAwMEM2OTUyMDAwMTAwMDAwMDEwMDAxRjAwMDA1NQorOjEwMTRBMDAwMDAwMDAwMDAyMkM1OEMwMDAwMDAwMDAwMjMxQjAwMDA4QgorOjEwMTRCMDAwMDAwMDAwMDAyNzExMDAwMDAwMDAwMDAwMjY5MDAwMDAzRQorOjEwMTRDMDAwMDAwMDAwMTBCODE3MEUwMzAwMDAwMDBDMjk4MDAwMDA3NworOjEwMTREMDAwMDAwMDAwMTg4MDAwRkZGNjAwMDAwMDEwQjE5ODAwMDIyNAorOjEwMTRFMDAwMDAwMDAwMDgwRjgwMDAwNDAwMDAwMDA4MjIwMDAwMUExRAorOjEwMTRGMDAwMDAwMDAwMDgyQzgwMDAwQzAwMDAwMDA4MkQwMDAwMENFQgorOjEwMTUwMDAwMDAwMDAwMDgyRDgwMDAxMDAwMDAwMDEwMDAxRjAwMDBFNworOjEwMTUxMDAwMDAwMDAwMDAwRDZFMDAwMDAwMDAwMDAzRTdDRjM0MDA2MworOjEwMTUyMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwOTFERTAwMDA4NworOjEwMTUzMDAwMDAwMDAwMTBCMTg3MDAwNzAwMDAwMDAwMzYxNDAwMDAxMgorOjEwMTU0MDAwMDAwMDAwMDAzNjk1MDAwMDAwMDAwMDAwMzcxNjAwMDA4MworOjEwMTU1MDAwMDAwMDAwMDgyQzgwMDA1MDAwMDAwMDA4MkQwMDAwMzAyMgorOjEwMTU2MDAwMDAwMDAwMDgyRDgwMDAwQzAwMDAwMDE4ODAwMEZGMjRGRgorOjEwMTU3MDAwMDAwMDAwMDAyNjQ2MDAwMDAwMDAwMDAwMjMwMDAwMDBEQworOjEwMTU4MDAwMDAwMDAwMDkyNUU2RkZGRjAwMDAwMDAwMEI2RTAwMDBEMAorOjEwMTU5MDAwMDAwMDAwMDNFN0NGMkMwMDAwMDAwMDA4MjIwMDAwMUIyMQorOjEwMTVBMDAwMDAwMDAwMEM2OTUyMDAwMDAwMDAwMDBDMjk4MDAwMDBCRgorOjEwMTVCMDAwMDAwMDAwMTg4MDAwRkYxQjAwMDAwMDAwMkEwMDAwMDA0RgorOjEwMTVDMDAwMDAwMDAwMTAwODY2MDAwNTAwMDAwMDAwMDY2NjAwMDAyQworOjEwMTVEMDAwMDAwMDAwMDA4NjYxMTgwMDAwMDAwMDA5MDI2MDAwRjBCMQorOjEwMTVFMDAwMDAwMDAwMTBCNjBDMDgwMjAwMDAwMDE4ODAwMEZGMTQ3NAorOjEwMTVGMDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDEwQjE4RjAwMDAxMworOjEwMTYwMDAwMDAwMDAwMDg4NzhGMDAwMTAwMDAwMDBDNzM2NjAwMTBDNgorOjEwMTYxMDAwMDAwMDAwMDgyQzgwMDAxODAwMDAwMDA4MkQwMDAwMThCMQorOjEwMTYyMDAwMDAwMDAwMDgyRDgwMDAwMjAwMDAwMDBDNUZCRjAwMDBEOQorOjEwMTYzMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDE4MDAwRDAwMDAwNgorOjEwMTY0MDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDEwMjg2NjAxRjVEQworOjEwMTY1MDAwMDAwMDAwMDgyQzgwMDAwMzAwMDAwMDA4MkQwMDAwMDM5QgorOjEwMTY2MDAwMDAwMDAwMDkzMDYwRkZGMDAwMDAwMDA4MkQ4MDAwMDEzQworOjEwMTY3MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwOTFERTAwMDAzNgorOjEwMTY4MDAwMDAwMDAwMDgyQzgwMDAxQTAwMDAwMDA4MkQwMDAwMUEzRAorOjEwMTY5MDAwMDAwMDAwMDU3MzY2MDAwMDAwMDAwMDA4MkQ4MDAwMDJCNQorOjEwMTZBMDAwMDAwMDAwMDAzMTgwMDAwMDAwMDAwMDEwOTFERTAwMDAwQQorOjEwMTZCMDAwMDAwMDAwMDgyQzgwMDAwQzAwMDAwMDA4MkQwMDAwMEMyOQorOjEwMTZDMDAwMDAwMDAwMDgyRDgwMDAwNDAwMDAwMDE4ODAwMEZFRjhEMworOjEwMTZEMDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDE4ODAwMEZFRjY2NAorOjEwMTZFMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDEwMDAxRjAwMDBBMQorOjEwMTZGMDAwMDAwMDAwMDAwRjAwODAwMDAwMDAwMDA4MEY4MDAwMDdCRAorOjEwMTcwMDAwMDAwMDAwMTg4MDAwMDAxQTAwMDAwMDAwMjgwQTAwMDBGNQorOjEwMTcxMDAwMDAwMDAwMDAwNTAyMDAwMDAwMDAwMDA4MjIwMDAwMDk4RgorOjEwMTcyMDAwMDAwMDAwMDAyOTAwMDAwMDAwMDAwMDBGNjU2ODAwMTBBNAorOjEwMTczMDAwMDAwMDAwMDNGNjZDOTQwMDAwMDAwMDEwQjk3MkEwMDREMQorOjEwMTc0MDAwMDAwMDAwMEM3M0U3MDAxOTAwMDAwMDBDMjE0MjAwMDRBNworOjEwMTc1MDAwMDAwMDAwMDAzQ0Y4MDAwMDAwMDAwMDBDMjk4MDAwMDBBMAorOjEwMTc2MDAwMDAwMDAwMTAyMDUzMDAwMDAwMDAwMDA4MjIwMDAwMDhDNAorOjEwMTc3MDAwMDAwMDAwMEM2MTQyMDAwNDAwMDAwMDE4MDAwQTAwMDA5NAorOjEwMTc4MDAwMDAwMDAwMDAwNTAyMDAwMDAwMDAwMDBDNjE0MjAwMDBBMworOjEwMTc5MDAwMDAwMDAwMTAwMTQyMDAwMzAwMDAwMDBDMzNFNzAwMURCMAorOjEwMTdBMDAwMDAwMDAwMEM2MTQyMDAwMjAwMDAwMDE4MDAwQTAwMDA2NgorOjEwMTdCMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDEwMDAxRjAwMDBEMAorOjEwMTdDMDAwMDAwMDAwMEYwRjQ3MDAwNzAwMDAwMDA4MEY4MDAwMDgwRQorOjEwMTdEMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwMDA5RjAwMDBBNQorOjEwMTdFMDAwMDAwMDAwMTg4MDAwRkVENTAwMDAwMDAwMzM1MTAwMDAwQQorOjEwMTdGMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDEwQjFDNjAwMjMxNQorOjEwMTgwMDAwMDAwMDAwMEYwRjUwMDAwNzAwMDAwMDAwMEE2MDAwMDBGOQorOjEwMTgxMDAwMDAwMDAwMDAwQUUxMDAwMDAwMDAwMDBGNEI2MjAwMDgxOQorOjEwMTgyMDAwMDAwMDAwMDkwQjE2MDBGRjAwMDAwMDBGNEM2MjAwMTBDMgorOjEwMTgzMDAwMDAwMDAwMDAwRDYyMDAwMDAwMDAwMDA5MEQxQTAwRkYwQQorOjEwMTg0MDAwMDAwMDAwMTAwNzUwMDAwMzAwMDAwMDBDMEQxQTAwMDhGMworOjEwMTg1MDAwMDAwMDAwMEMwQjE2MDAwODAwMDAwMDAwMENDNjAwMDA4MQorOjEwMTg2MDAwMDAwMDAwMDAwQjgwMDAwMDAwMDAwMDAwMDY5ODAwMDA0RgorOjEwMTg3MDAwMDAwMDAwMDgwRjgwMDAwMzAwMDAwMDEwMDZDMjAwMDRGMgorOjEwMTg4MDAwMDAwMDAwMEMyOTAwMDAwMjAwMDAwMDEwMjY0MjAwMDJBNworOjEwMTg5MDAwMDAwMDAwMEMyOTUyMDAwMzAwMDAwMDA4MjIwMDAwMDE5MworOjEwMThBMDAwMDAwMDAwMTAwMDlGMDAwMDAwMDAwMDAwMjMxQjAwMDA0QgorOjEwMThCMDAwMDAwMDAwMDAyNzExMUEwMDAwMDAwMDAwNjY5MDAwMDBFMAorOjEwMThDMDAwMDAwMDAwMEMyOTUyMDAwMDAwMDAwMDEwQjE5NzMyMDlGRQorOjEwMThEMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDAwMDY5ODAwMDBCNQorOjEwMThFMDAwMDAwMDAwMTAyMDUzMDAwMDAwMDAwMDBDMjk1MjAwMDNFQgorOjEwMThGMDAwMDAwMDAwMDAyMkM1OEMwMDAwMDAwMDEwMDAxRjAwMDA0NgorOjEwMTkwMDAwMDAwMDAwMDgwRjgwMDAwMzAwMDAwMDE4ODAwMEZGRjNCMworOjEwMTkxMDAwMDAwMDAwMTBCMUM4MDAxMzAwMDAwMDEwQjFDNjAwMDNBMQorOjEwMTkyMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwMjA1MzAwMDA3RgorOjEwMTkzMDAwMDAwMDAwMEMyOTUyMDAwMDAwMDAwMDBDMjk1MjAwMDM5NgorOjEwMTk0MDAwMDAwMDAwMTAwNkMyMDAwMjAwMDAwMDBDMjk1MjAwMDIzNAorOjEwMTk1MDAwMDAwMDAwMDAyMkM1OEMwMDAwMDAwMDAwMjc2NTAwMDA4OAorOjEwMTk2MDAwMDAwMDAwMDAyNkU0MDAwMDAwMDAwMDA4MjIwMDAwMTYyRAorOjEwMTk3MDAwMDAwMDAwMTBCMUM2MDAwMzAwMDAwMDAwMjM0ODAwMDA3MgorOjEwMTk4MDAwMDAwMDAwMTBCMTgwMDAwNTAwMDAwMDAwMjM0ODAwMDBBNgorOjEwMTk5MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDBGMEY1MDAwMDcxRAorOjEwMTlBMDAwMDAwMDAwMTg4MDAwMDAxMjAwMDAwMDA4MjIwMDAwMTY0RAorOjEwMTlCMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDAwMzAxNDAwMDAyRQorOjEwMTlDMDAwMDAwMDAwMDAzMDk1MDAwMDAwMDAwMDEwMDc1MDAwMDNFOAorOjEwMTlEMDAwMDAwMDAwMDkwQjE2MDBGRjAwMDAwMDA5MEQxQTAwRkZBRgorOjEwMTlFMDAwMDAwMDAwMEYzMTE2MDAwODAwMDAwMDAwMzE2MjM0MDBEMgorOjEwMTlGMDAwMDAwMDAwMDNGMTYyMzAwMDAwMDAwMDEwMjA1RjAwMDBEMgorOjEwMUEwMDAwMDAwMDAwMDAyQzUxMDAwMDAwMDAwMDA5MkNEMTAwN0ZENAorOjEwMUExMDAwMDAwMDAwMDgyQ0Q5MDAwMDAwMDAwMDA4MkQwMDAwMDA4NAorOjEwMUEyMDAwMDAwMDAwMDgyRDgwMDAwQzAwMDAwMDAwMDAwMDAwMDBGNQorOjEwMUEzMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDEwMDVDMjAwMDQ0QworOjEwMUE0MDAwMDAwMDAwMDgwRjgwMDAwNzAwMDAwMDAwMzMwMDAwMDBDNQorOjEwMUE1MDAwMDAwMDAwMTAwMDlGMDAwMDAwMDAwMDE4ODAwMEZFODZCQgorOjEwMUE2MDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDBGMEY1MDAwMDdENworOjEwMUE3MDAwMDAwMDAwMTBCMUM2MDAyRDAwMDAwMDBGNDc0MjAwMDgxMgorOjEwMUE4MDAwMDAwMDAwMDkwNzBFMDAwRjAwMDAwMDA4MDcwRTAwMDgwNAorOjEwMUE5MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDA4MDkwMDAwMDEwNQorOjEwMUFBMDAwMDAwMDAwMDcwOTEyMUMwMDAwMDAwMDAzQ0JDQTkyMDBDRQorOjEwMUFCMDAwMDAwMDAwMDAwQjk3QTIwMDAwMDAwMDA3NDIxNzFDMDA2NgorOjEwMUFDMDAwMDAwMDAwMDAwQjA0MDAwMDAwMDAwMDBGMEE4NDAwMDM2NworOjEwMUFEMDAwMDAwMDAwMDAwQTk1OUMwMDAwMDAwMDAwNEEwMDlBMDBFNworOjEwMUFFMDAwMDAwMDAwMDg4MjEyMDAwMTAwMDAwMDAxMEMxNzA4MDAyRAorOjEwMUFGMDAwMDAwMDAwMDAwQzk3OEMwMDAwMDAwMDAwMDIxODAwMDA5RAorOjEwMUIwMDAwMDAwMDAwMDgwRDAwRkZGRjAwMDAwMDA4MEY4MDAwMDYyNQorOjEwMUIxMDAwMDAwMDAwMEMyOTAwMDAwMDAwMDAwMDEwMDZDMjAwMDRCNAorOjEwMUIyMDAwMDAwMDAwMEMyOTUyMDAwMjAwMDAwMDEwMjY0MjAwMDJCMgorOjEwMUIzMDAwMDAwMDAwMEMyOTUyMDAwMzAwMDAwMDA4MjIwMDAwMDFGMAorOjEwMUI0MDAwMDAwMDAwMTAwMDlGMDAwMDAwMDAwMDEwQjE5NzMyMEM1MAorOjEwMUI1MDAwMDAwMDAwMDAyMzFCMDAwMDAwMDAwMDAwMjcxMTA4MDAwNworOjEwMUI2MDAwMDAwMDAwMDA2NjkwMDAwMDAwMDAwMDBDMjk4MDAwMDBDQQorOjEwMUI3MDAwMDAwMDAwMDAwMjE4MDAwMDAwMDAwMDEwMjA1MzAwMDBDOAorOjEwMUI4MDAwMDAwMDAwMEMyOTUyMDAwMzAwMDAwMDAwMjJDNTM2MDBBRQorOjEwMUI5MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDA4MEY4MDAwMDY3OQorOjEwMUJBMDAwMDAwMDAwMTg4MDAwRkZGNDAwMDAwMDAwMjMxQjAwMDA2QworOjEwMUJCMDAwMDAwMDAwMDAyNzExMDgwMDAwMDAwMDAwNjY5MDAwMDBFRgorOjEwMUJDMDAwMDAwMDAwMTBCMUM4MDAwQjAwMDAwMDBDMjk4MDAwMDBDQworOjEwMUJEMDAwMDAwMDAwMTAyMDUzMDAwMDAwMDAwMDBDMjk1MjAwMDBGQgorOjEwMUJFMDAwMDAwMDAwMEMyOTUyMDAwMzAwMDAwMDEwMDZDMjAwMDI5MQorOjEwMUJGMDAwMDAwMDAwMEMyOTUyMDAwMjAwMDAwMDAwMjJDNThDMDBFOQorOjEwMUMwMDAwMDAwMDAwMDAyNzY1MDAwMDAwMDAwMDAwMjZFNDAwMDAzRQorOjEwMUMxMDAwMDAwMDAwMDAyMzQ4MDAwMDAwMDAwMDA4MjIwMDAwMTcxOAorOjEwMUMyMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwMDAxRjAwMDBEMAorOjA4MUMzMDAwMDAwMDAwMTg4MDAwRkU0QkNCCis6MDAwMDAwMDFGRgorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBmaXJtd2FyZSBkYXRhIGRlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZAorICogc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKKyAqIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKKyAqIGFjY29tcGFueWluZyBpdC4KKyAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDktNS4wLjAuajMuZncuaWhleCBiL2Zpcm13YXJlL2JueDIvYm54Mi1ydjJwLTA5LTUuMC4wLmozLmZ3LmloZXgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY5ZjVlOTUuLjAwMDAwMDAKLS0tIGEvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDktNS4wLjAuajMuZncuaWhleAorKysgL2Rldi9udWxsCkBAIC0xLDQ2MiArMCwwIEBACi06MTAwMDAwMDAwMDAwMDAwMDAwMDAwRTAwMDAwMDAwNTgwMDAwMDAwOTgxCi06MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCi06MTAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTAwMDMwMDAwMDAwMEREODAwMDAwRTU4MDAwMDAwMDUwMDAwMDAwMDcwCi06MTAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MDgwMDUwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLTowODAwNTgwMDAwMDAwMDEwQjE4MDAwMDY1OQotOjEwMDA2MDAwMDAwMDAwMUYwNTAzMDMwMDAwMDAwMDA4MDUwMEZGRkY1QgotOjEwMDA3MDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDA4MDUwMDAwRkY1QQotOjEwMDA4MDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDA4QUMwMDAwMDFBMQotOjEwMDA5MDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDBDMkY4MDAwMDE5RgotOjEwMDBBMDAwMDAwMDAwMDAyQjAwMDAwMDAwMDAwMDAwMkI4MDAwMDA3QQotOjEwMDBCMDAwMDAwMDAwMTA5MUUwMDAwMjAwMDAwMDA4QUMwMDAwMDEwOAotOjEwMDBDMDAwMDAwMDAwMTAyMDNGMDA2QjAwMDAwMDEwMjEzRjAwMDNFMwotOjEwMDBEMDAwMDAwMDAwMTAyMEJGMDAzQTAwMDAwMDE4ODAwMEZGRkQ2MwotOjEwMDBFMDAwMDAwMDAwMTBCMUI4QjAxNTAwMDAwMDBCMkZERjAwMDJCNwotOjEwMDBGMDAwMDAwMDAwMDAwM0Q4MDAwMDAwMDAwMDAwMkMzODAwMDBDMQotOjEwMDEwMDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDAwNgotOjEwMDExMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTVCMgotOjEwMDEyMDAwMDAwMDAwMTg4MDAwMDA3QzAwMDAwMDA4MkQ4MDAxMUNFOQotOjEwMDEzMDAwMDAwMDAwMDgwMjAwMDAwMTAwMDAwMDEwOTFERTAwMDAzNQotOjEwMDE0MDAwMDAwMDAwMEY0MkUwMDAxQzAwMDAwMDEwOTE4NDBBMTYxRAotOjEwMDE1MDAwMDAwMDAwMTg4MDAwMDA4MzAwMDAwMDBDMjk4MDAwMDJDRAotOjEwMDE2MDAwMDAwMDAwMEMxRjgwMDAwMjAwMDAwMDAwMkFERjAwMDBEOQotOjEwMDE3MDAwMDAwMDAwMDgyQTAwMDAwRjAwMDAwMDAwMDUwMDAwMDAzOQotOjEwMDE4MDAwMDAwMDAwMTg4MDAwRkZFNjAwMDAwMDA4MDIwMDAwMDFFNwotOjEwMDE5MDAwMDAwMDAwMEY0MkUwMDAxQzAwMDAwMDEwOTE4NDBBMThDQgotOjEwMDFBMDAwMDAwMDAwMDgyQzgwMDAwNjAwMDAwMDA4MkQwMDAwMDY1QQotOjEwMDFCMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMDYwRQotOjEwMDFDMDAwMDAwMDAwMTg4MDAwMDA3MjAwMDAwMDE4ODAwMEZGRjE5RAotOjEwMDFEMDAwMDAwMDAwMDhCMTAwMDAwMTAwMDAwMDA4MkM4MDAxMENBNAotOjEwMDFFMDAwMDAwMDAwMDgyRDAwMDAwODAwMDAwMDA4MkQ4MDAwMDExQwotOjEwMDFGMDAwMDAwMDAwMTg4MDAwMDA2QzAwMDAwMDBCMkZERjAwMDJFMAotOjEwMDIwMDAwMDAwMDAwMEMxRjgwMDAwMjAwMDAwMDAwMkMwNzAwMDAwRQotOjEwMDIxMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMDU1NTVBOAotOjEwMDIyMDAwMDAwMDAwMTg4MDAwRkZEMjAwMDAwMDBCMkZERjAwMDI0QQotOjEwMDIzMDAwMDAwMDAwMEMxRjgwMDAwMDAwMDAwMDAwMkMwNzAwMDBFMAotOjEwMDI0MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMDU1NTU3OAotOjEwMDI1MDAwMDAwMDAwMTg4MDAwRkZDQzAwMDAwMDBDMUY4MDAwMDI4RQotOjEwMDI2MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGQzk3NwotOjEwMDI3MDAwMDAwMDAwMEMyOTgwMDAwMjAwMDAwMDBDMUY4MDAwMDIxQQotOjEwMDI4MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMDUyRQotOjEwMDI5MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGQzM0RAotOjEwMDJBMDAwMDAwMDAwMDgwMjI0MDA0QTAwMDAwMDE4MDAwNDAwMDBCQQotOjEwMDJCMDAwMDAwMDAwMTg4MDAwMDAxQzAwMDAwMDE4ODAwMDAwMUVENAotOjEwMDJDMDAwMDAwMDAwMTg4MDAwMDA2NTAwMDAwMDE4ODAwMDAwQkJERQotOjEwMDJEMDAwMDAwMDAwMTg4MDAwMDBCQTAwMDAwMDE4ODAwMDAwMDAzNAotOjEwMDJFMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBERQotOjEwMDJGMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBDRQotOjEwMDMwMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBCRAotOjEwMDMxMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAxMDZBNgotOjEwMDMyMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDA5RAotOjEwMDMzMDAwMDAwMDAwMTg4MDAwMDAxNTAwMDAwMDE4ODAwMDAwMUI1RAotOjEwMDM0MDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwRDFBQwotOjEwMDM1MDAwMDAwMDAwMTg4MDAwMDAyRjAwMDAwMDE4ODAwMDAxMDYzNwotOjEwMDM2MDAwMDAwMDAwMTg4MDAwMDEzMTAwMDAwMDE4ODAwMDAwRkMyRgotOjEwMDM3MDAwMDAwMDAwMTg4MDAwMDE1NTAwMDAwMDE4ODAwMDAwNEVBOQotOjEwMDM4MDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwOEVBRgotOjEwMDM5MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDAwMDUwMDAwMDBBQwotOjEwMDNBMDAwMDAwMDAwMTg4MDAwRkZBMjAwMDAwMDEwOTFENDAwMDA5RgotOjEwMDNCMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFEQgotOjEwMDNDMDAwMDAwMDAwMDgyQTAwMDAwMjAwMDAwMDAwMDUwMDAwMDBGNAotOjEwMDNEMDAwMDAwMDAwMTg4MDAwRkY5QzAwMDAwMDEwOTFENDAwMDA3NQotOjEwMDNFMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFBQgotOjEwMDNGMDAwMDAwMDAwMDAyOTQyMDAwMDAwMDAwMDA4MkEwMDAwMDI1RQotOjEwMDQwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDE4ODAwMEZGOTVCQgotOjEwMDQxMDAwMDAwMDAwMTg4MDAwRkY5NDAwMDAwMDEwQjFCQ0IwMEE3QQotOjEwMDQyMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMDNEODAwMDBENgotOjEwMDQzMDAwMDAwMDAwMDAyQzNDMDAwMDAwMDAwMDEwOTFENDAwMDBERgotOjEwMDQ0MDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMDAwMTc0NQotOjEwMDQ1MDAwMDAwMDAwMTg4MDAwMDBDQTAwMDAwMDEwMkM2MjAxQkFFMQotOjEwMDQ2MDAwMDAwMDAwMTg4MDAwMDAwNjAwMDAwMDA4MkM4MDAxMEQyQwotOjEwMDQ3MDAwMDAwMDAwMDgyRDAwMDAwOTAwMDAwMDEwOTFENDAwMDBDOQotOjEwMDQ4MDAwMDAwMDAwMDgyRDgwMDEwNzAwMDAwMDE4ODAwMDAwMjRGMwotOjEwMDQ5MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDBDMUY4MDAwMDBGQwotOjEwMDRBMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMkFERjAwMDBDNAotOjEwMDRCMDAwMDAwMDAwMDgyQTAwMDAwNjAwMDAwMDA4MDUwMDU1NTU0RAotOjEwMDRDMDAwMDAwMDAwMTg4MDAwRkY3RTAwMDAwMDEwOTFENDAwMDBBMgotOjEwMDREMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFCQQotOjEwMDRFMDAwMDAwMDAwMDgyQTAwMDAwQjAwMDAwMDAwMDUwMDAwMDBDQQotOjEwMDRGMDAwMDAwMDAwMTg4MDAwRkY3ODAwMDAwMDE4MDAwMjAwMDBEMwotOjEwMDUwMDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDEwQjE4QTAwMDgxMAotOjEwMDUxMDAwMDAwMDAwMTBCMThDMTQwNzAwMDAwMDBCMDUwQUZGRkY1QgotOjEwMDUyMDAwMDAwMDAwMTBCMThBMDAwMzAwMDAwMDAwODYwQTE4MDBENQotOjEwMDUzMDAwMDAwMDAwMTA5MThDMDAwMDAwMDAwMDA4MkEwMDAwMDE1QgotOjEwMDU0MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDE4MDAwRDAwMDAxMQotOjEwMDU1MDAwMDAwMDAwMDAwNTAyMDAwMDAwMDAwMDEwOTFERTAwMDAxNQotOjEwMDU2MDAwMDAwMDAwMTgwMDBBMDAwMDAwMDAwMDAwMDY4MjAwMDBFMQotOjEwMDU3MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDEwQkVFMTAwMDU0OAotOjEwMDU4MDAwMDAwMDAwMTg4MDAwRkY1RjAwMDAwMDAxMDU2MTE0MDBGQQotOjEwMDU5MDAwMDAwMDAwMTA5MThBMDAwMjAwMDAwMDA4QjBFMTAwMDE5NAotOjEwMDVBMDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDAwMDY4MjAwMDA5RQotOjEwMDVCMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDEwQkVFMjAwMDUwNwotOjEwMDVDMDAwMDAwMDAwMTg4MDAwRkY1NzAwMDAwMDAxMDU2MjE0MDBDMQotOjEwMDVEMDAwMDAwMDAwMTA5MThBMDAwMjAwMDAwMDA4QjE2MjAwMDFEMgotOjEwMDVFMDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDEwQjFBMEIwMTNDMgotOjEwMDVGMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMyMDAwMDA5NAotOjEwMDYwMDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDAwMQotOjEwMDYxMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTVBRAotOjEwMDYyMDAwMDAwMDAwMTg4MDAwRkZEQzAwMDAwMDA4MkQ4MDAxMUM4NQotOjEwMDYzMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDE4ODAwMEZGRTYwRQotOjEwMDY0MDAwMDAwMDAwMEY0NzYwMDAwODAwMDAwMDBGMDYwRTAwMDFDOAotOjEwMDY1MDAwMDAwMDAwMDAwRjU4MDAwMDAwMDAwMDAwMEE2NDAwMDBDNQotOjEwMDY2MDAwMDAwMDAwMDAwQUU1MDAwMDAwMDAwMDA5MEI2NkZGRkYyMwotOjEwMDY3MDAwMDAwMDAwMDAwRDYxMDAwMDAwMDAwMDE4ODAwMDAwMTM2MQotOjEwMDY4MDAwMDAwMDAwMEY0NzYwMDAwODAwMDAwMDBCMkZERjAwMDI5MQotOjEwMDY5MDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDA3MQotOjEwMDZBMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMUMwMwotOjEwMDZCMDAwMDAwMDAwMEYwNjBFMDAwMTAwMDAwMDEwMDAxRjAwMDBFNwotOjEwMDZDMDAwMDAwMDAwMDAwRjU4MDAwMDAwMDAwMDE4ODAwMEZGRDQ1OAotOjEwMDZEMDAwMDAwMDAwMDAwQTY0MDAwMDAwMDAwMDAwMEFFNTAwMDBCRAotOjEwMDZFMDAwMDAwMDAwMDkwQjY2RkZGRjAwMDAwMDAwMEQ2MTAwMDAyNAotOjEwMDZGMDAwMDAwMDAwMDAwMjYyMDAwMDAwMDAwMDBCMkZERjAwMDI3QgotOjEwMDcwMDAwMDAwMDAwMDAzMTA0MDAwMDAwMDAwMDAwMzA5QTAwMDBFQQotOjEwMDcxMDAwMDAwMDAwMDkwNTYwMDAwRjAwMDAwMDEwQjE4QTAwMEEwNwotOjEwMDcyMDAwMDAwMDAwMDAwNTYzNEMwMDAwMDAwMDA4MDUwQTAwMTJFQwotOjEwMDczMDAwMDAwMDAwMTBCOTYyMTQwMzAwMDAwMDAwMDMwMDAwMDA3NAotOjEwMDc0MDAwMDAwMDAwMTg4MDAwMDAwNTAwMDAwMDE4ODAwMEZGMjQ1MQotOjEwMDc1MDAwMDAwMDAwMTBCNjA2MTQwMzAwMDAwMDA4MDMwNjAwMDFBNAotOjEwMDc2MDAwMDAwMDAwMTg4MDAwRkYyQTAwMDAwMDAwMEM5NjE4MDAwRQotOjEwMDc3MDAwMDAwMDAwMDkwQzk5RkZGRjAwMDAwMDA0Q0M5OTM0MDAzMAotOjEwMDc4MDAwMDAwMDAwMTBCMTk2MzIwMjAwMDAwMDA4MEY4MDAwMDA0NwotOjEwMDc5MDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMjk1MjAwMDExQgotOjEwMDdBMDAwMDAwMDAwMEMyOTUyMDAwMDAwMDAwMDA4MDIwMDAwMEVBQQotOjEwMDdCMDAwMDAwMDAwMDgwMjgwMDAxQTAwMDAwMDEwQjFDNDBBMDIwNAotOjEwMDdDMDAwMDAwMDAwMDgwMjAwMDAwMzAwMDAwMDA4MjIwMDAwMDFGMQotOjEwMDdEMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDAwMkFERjAwMDA2NAotOjEwMDdFMDAwMDAwMDAwMDAyQTAwMDgwMDAwMDAwMDA4MDUwMDU1NTUyMAotOjEwMDdGMDAwMDAwMDAwMTg4MDAwRkYxODAwMDAwMDBCMkZERjAwMDIyRgotOjEwMDgwMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkEwMDAwMDE0MAotOjEwMDgxMDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDEwOTFENDAwMDAxNwotOjEwMDgyMDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDBERgotOjEwMDgzMDAwMDAwMDAwMDgyRDgwMDExQzAwMDAwMDE4ODAwMEZGQTNBQwotOjEwMDg0MDAwMDAwMDAwMDgyQzgwMDAwNjAwMDAwMDA4MkQwMDAwMDZCMwotOjEwMDg1MDAwMDAwMDAwMDAzMDgwMDAwMDAwMDAwMDAwMzEwMDAwMDBCNwotOjEwMDg2MDAwMDAwMDAwMDgyRDgwMDAwNjAwMDAwMDBDMjk4MDAwMDExNwotOjEwMDg3MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDEwOTFERTAwMDA0RAotOjEwMDg4MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMTAxRAotOjEwMDg5MDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDE4ODAwMEZGMDNCOQotOjEwMDhBMDAwMDAwMDAwMTA5MUEwQjAwOTAwMDAwMDA4MkM4MDAxMEQ4QwotOjEwMDhCMDAwMDAwMDAwMDgyRDAwMDAwOTAwMDAwMDEwOTFENDAwMDA4NQotOjEwMDhDMDAwMDAwMDAwMDgyRDgwMDEwNzAwMDAwMDE4ODAwMEZGOUMzOAotOjEwMDhEMDAwMDAwMDAwMTg4MDAwMDAxMDAwMDAwMDA4QUMwMDAwMDFCQgotOjEwMDhFMDAwMDAwMDAwMTg4MDAwMDAwQjAwMDAwMDAwMDM4MEIwMDAzMgotOjEwMDhGMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMwMDQwMDA3MQotOjEwMDkwMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTVCQQotOjEwMDkxMDAwMDAwMDAwMTg4MDAwRkY3RTAwMDAwMDE4ODAwMDAwMzFGOQotOjEwMDkyMDAwMDAwMDAwMTg4MDAwMDAwNjAwMDAwMDBCMkZERjAwMDIwRQotOjEwMDkzMDAwMDAwMDAwMDAyQzAwMEUwMDAwMDAwMDA4MkEwMDAwMDc0NAotOjEwMDk0MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZFRUQ2RAotOjEwMDk1MDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDBDMjk4MDAwMDE1OQotOjEwMDk2MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDEwMENFNzAwMDdEMQotOjEwMDk3MDAwMDAwMDAwMDkwNTYyRkZGRjAwMDAwMDEwQkE2QzE0MDVCQQotOjEwMDk4MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDAwMjEwMDAwMDAzRAotOjEwMDk5MDAwMDAwMDAwMDgyQTAwMDAwNTAwMDAwMDEwOTFENDAwMDBBQgotOjEwMDlBMDAwMDAwMDAwMDgyQzgwMDEwQzAwMDAwMDA4MkQwMDAwMDg0OQotOjEwMDlCMDAwMDAwMDAwMEMzMTYyMDAxODAwMDAwMDA4MkQ4MDAwMDFDQQotOjEwMDlDMDAwMDAwMDAwMTg4MDAwRkY3MjAwMDAwMDE4MDAwRDAwMDBGOQotOjEwMDlEMDAwMDAwMDAwMTBCMUEwQjAwRTAwMDAwMDBCMkZERjAwMDJERAotOjEwMDlFMDAwMDAwMDAwMDAwM0Q4MDAwMDAwMDAwMDAwMkMyMDAwMDBFMAotOjEwMDlGMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDE4ODAwMDAwMTVENQotOjEwMEEwMDAwMDAwMDAwMTAyQzYyMDAwMjAwMDAwMDE4ODAwMDAwMENBMgotOjEwMEExMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMwNzAwMDA4OAotOjEwMEEyMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDEwOTFERTAwMDA5QgotOjEwMEEzMDAwMDAwMDAwMDgwNTAwRkZGRjAwMDAwMDE4ODAwMEZFQ0Y0NgotOjEwMEE0MDAwMDAwMDAwMDgyQzgwMDEwRDAwMDAwMDA4MkQwMDAwMDlBNgotOjEwMEE1MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMDc2NAotOjEwMEE2MDAwMDAwMDAwMTg4MDAwRkY2OTAwMDAwMDBDMjk4MDAwMDFEMAotOjEwMEE3MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDEwOTFERTAwMDA0QgotOjEwMEE4MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMEEyMQotOjEwMEE5MDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDE4ODAwMEZFQzNGOAotOjEwMEFBMDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDA4MkM4MDAxMENGRAotOjEwMEFCMDAwMDAwMDAwMDgyRDAwMDAwODAwMDAwMDA4MkQ4MDAxMzQwRgotOjEwMEFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMjA1RjAwMDA5NwotOjEwMEFEMDAwMDAwMDAwMDgyQzgwMDE0MDAwMDAwMDA4MkQwMDAwM0NCMAotOjEwMEFFMDAwMDAwMDAwMDgyRDgwMDEyNDAwMDAwMDAwMDAwMDAwMDAyQwotOjEwMEFGMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MkM4MDAwODA0MwotOjEwMEIwMDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDA4MkQ4MDAxMDVGNQotOjEwMEIxMDAwMDAwMDAwMTBCRUUyMDAwNTAwMDAwMDE4ODAwMEZFQUNERQotOjEwMEIyMDAwMDAwMDAwMDEwNTYyMTQwMDAwMDAwMDEwOTE4QTAwMDIxQwotOjEwMEIzMDAwMDAwMDAwMDhCMTYyMDAwMTAwMDAwMDEwOTFERTAwMDAxQQotOjEwMEI0MDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDEwOTFENDAwMDAwQgotOjEwMEI1MDAwMDAwMDAwMDgwNjAwQUFBQTAwMDAwMDE4ODAwMEZGMzU2NwotOjEwMEI2MDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDEyMwotOjEwMEI3MDAwMDAwMDAwMDgyQTAwMDAwOTAwMDAwMDA4MDUwMEFBQUFEOQotOjEwMEI4MDAwMDAwMDAwMTg4MDAwRkVBNjAwMDAwMDEwOTFENDAwMDBCNAotOjEwMEI5MDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMEZGMkREOQotOjEwMEJBMDAwMDAwMDAwMTA5MUEwM0MwMjAwMDAwMDEwQjFFNjYyMDdCNgotOjEwMEJCMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMzMTAwMDBCRAotOjEwMEJDMDAwMDAwMDAwMDkyQ0IxMDA3RjAwMDAwMDA4MkNEOTAwMDBCMwotOjEwMEJEMDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDA4MkQ4MDAxMEQxRAotOjEwMEJFMDAwMDAwMDAwMTBCMUE4MDAwNjAwMDAwMDEwMjA1RjAwMDAwNwotOjEwMEJGMDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDAwMkNBNzAwMDBENgotOjEwMEMwMDAwMDAwMDAwMDgyRDAwMDAxMDAwMDAwMDA4MkQ4MDAxMDhFMQotOjEwMEMxMDAwMDAwMDAwMTg4MDAwRkYyODAwMDAwMDEwQjFBNjAwMTA5RQotOjEwMEMyMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBGMEYzMDAwMDc0MAotOjEwMEMzMDAwMDAwMDAwMDAwQTYwMDAwMDAwMDAwMDAwMEFFMTAwMDA1RgotOjEwMEM0MDAwMDAwMDAwMEY0QjYyMDAwODAwMDAwMDA5MEIxNjAwRkZCNwotOjEwMEM1MDAwMDAwMDAwMDAwRDYyMDAwMDAwMDAwMDA5MEQxQTAwRkZGNgotOjEwMEM2MDAwMDAwMDAwMTAwNzMwMDAwMzAwMDAwMDBDMEQxQTAwMDhGRgotOjEwMEM3MDAwMDAwMDAwMEMwQjE2MDAwODAwMDAwMDBGNENFMzAwMThFOQotOjEwMEM4MDAwMDAwMDAwMDAwQzk5MkMwMDAwMDAwMDA0Q0M5OTM0MDBGNgotOjEwMEM5MDAwMDAwMDAwMDgwRjgwMDAwMDAwMDAwMDBDMjk4MDAwMDEwNwotOjEwMENBMDAwMDAwMDAwMDAzMzMxMDAwMDAwMDAwMDA4MjIwMDAwMTZBMAotOjEwMENCMDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMENFRAotOjEwMENDMDAwMDAwMDAwMTAwMDlGMDAwMDAwMDAwMDAwMEYyMDAwMDA0NgotOjEwMENEMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDA4MDUwMDU1NTVCMQotOjEwMENFMDAwMDAwMDAwMTg4MDAwRkU3QTAwMDAwMDEwOTFENDAwMDA3RgotOjEwMENGMDAwMDAwMDAwMDgwNjAwQUFBQTAwMDAwMDE4ODAwMEZGMDFGQQotOjEwMEQwMDAwMDAwMDAwMEY0NzIyMDAwODAwMDAwMDA5MDcwRTAwMEYzNgotOjEwMEQxMDAwMDAwMDAwMDgwNzBFMDAwODAwMDAwMDA4MDI4MDAwMDEyMwotOjEwMEQyMDAwMDAwMDAwMDcwMjg1MUMwMDAwMDAwMDA4ODI4NTAwMDEwOQotOjEwMEQzMDAwMDAwMDAwMDAwMjg1NEMwMDAwMDAwMDA3NDI4NTFDMDBGNgotOjEwMEQ0MDAwMDAwMDAwMDNDM0FBNTIwMDAwMDAwMDAwMDNCMTBFMDAxRgotOjEwMEQ1MDAwMDAwMDAwMDc0QjA3MUMwMDAwMDAwMDBGMEYzMDAwMDdDOQotOjEwMEQ2MDAwMDAwMDAwMEYwQTk2MDAwMzAwMDAwMDAwMEE5NTVDMDBENgotOjEwMEQ3MDAwMDAwMDAwMDA0QTAwNUEwMDAwMDAwMDAwMEM5NjBBMDAyMwotOjEwMEQ4MDAwMDAwMDAwMDkwQzk5RkZGRjAwMDAwMDA4MEQwMEZGRkZBNAotOjEwMEQ5MDAwMDAwMDAwMTBCMTk2MzIwMjAwMDAwMDA4MEY4MDAwMDUyQwotOjEwMERBMDAwMDAwMDAwMTBCMUE4MDAwODAwMDAwMDEwMjA1RjAwMDA0MwotOjEwMERCMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMyMDAwMDBDQwotOjEwMERDMDAwMDAwMDAwMDAyQ0E3MDAwMDAwMDAwMDA4MkQwMDAwMTAwQgotOjEwMEREMDAwMDAwMDAwMDgyRDgwMDEwODAwMDAwMDE4ODAwMEZFRUZEMAotOjEwMERFMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDEwMDAxRjAwMDAxRQotOjEwMERGMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDAwMkFERjAwMDAzRQotOjEwMEUwMDAwMDAwMDAwMDgyQTAwMDAwRDAwMDAwMDA4MDUwMEFBQUE0MgotOjEwMEUxMDAwMDAwMDAwMTg4MDAwRkU1NDAwMDAwMDEwOTFENDAwMDA3MwotOjEwMEUyMDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMEZFREI5OQotOjEwMEUzMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDE1MAotOjEwMEU0MDAwMDAwMDAwMDgyQTAwMDAwNzAwMDAwMDA4MDUwMDU1NTVCMgotOjA4MEU1MDAwMDAwMDAwMTg4MDAwRkU0Q0I4Ci06MDgwRTU4MDAwMDAwMDAxMEIxODAwMDA0NEQKLToxMDBFNjAwMDAwMDAwMDFGMDUwMzAzMDAwMDAwMDAwODA1MDAwMEZGNEMKLToxMDBFNzAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAwMDJBMDAwMDAwMkUKLToxMDBFODAwMDAwMDAwMDEwQjFENDAwMDAwMDAwMDAxMDkxREUwMDAwNEUKLToxMDBFOTAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAxMDAwMUYwMDAwQTAKLToxMDBFQTAwMDAwMDAwMDAwMkY4MEFBMDAwMDAwMDAwQzI5ODAwMDAxMzMKLToxMDBFQjAwMDAwMDAwMDA4MDI1NDAwMEUwMDAwMDAwMDJDNDAwMDAwNUEKLToxMDBFQzAwMDAwMDAwMDA5Mjk1MjAwM0YwMDAwMDAxODAwMDQwMDAwNDMKLToxMDBFRDAwMDAwMDAwMDE4ODAwMDAwMTAwMDAwMDAxODgwMDAwMDExQzEKLToxMDBFRTAwMDAwMDAwMDE4ODAwMDAwMzkwMDAwMDAxODgwMDAwMEZEOUMKLToxMDBFRjAwMDAwMDAwMDE4ODAwMDAwRkMwMDAwMDAxODgwMDAwMEZCQ0IKLToxMDBGMDAwMDAwMDAwMDE4ODAwMDAwRkIwMDAwMDAxODgwMDAwMDAwQjYKLToxMDBGMTAwMDAwMDAwMDE4ODAwMDAxMTMwMDAwMDAxODgwMDAwMEY3OTYKLToxMDBGMjAwMDAwMDAwMDE4ODAwMDAwMEIwMDAwMDAxODgwMDAwMTE3NkUKLToxMDBGMzAwMDAwMDAwMDE4ODAwMDAxNjUwMDAwMDAxODgwMDAwMDYzQjgKLToxMDBGNDAwMDAwMDAwMDE4ODAwMDAwQ0UwMDAwMDAxODgwMDAwMERFQzUKLToxMDBGNTAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxODgwMDBGRkU1RUIKLToxMDBGNjAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAwQzI5ODAwMDAwQTIKLToxMDBGNzAwMDAwMDAwMDE4ODAwMEZGRTIwMDAwMDAwMDJBMDAwMDAwQ0UKLToxMDBGODAwMDAwMDAwMDE4ODAwMEZGRTAwMDAwMDAxODAwMDIwMDAwRDAKLToxMDBGOTAwMDAwMDAwMDAwMDUwMjAwMDAwMDAwMDAxMDkxOTYzNDIxQkUKLToxMDBGQTAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwMDJDMUUwMDAwNjgKLToxMDBGQjAwMDAwMDAwMDA4MkM4MDAwMDYwMDAwMDAwODJEMDAwMDA2M0MKLToxMDBGQzAwMDAwMDAwMDA4MkQ4MDAxMDIwMDAwMDAwMDAwMDAwMDAwNjkKLToxMDBGRDAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDBENjEwMDAwMjQKLToxMDBGRTAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDA1MDIwMDAwRDgKLToxMDBGRjAwMDAwMDAwMDEwOTE5NjM0MTYwMDAwMDAxMDIwNUYwMDAwRTEKLToxMDEwMDAwMDAwMDAwMDAwMDlEODAwMDAwMDAwMDAwMDJDMUUwMDAwQjUKLToxMDEwMTAwMDAwMDAwMDA4MkM4MDAxMEUwMDAwMDAwODJEMDAwMDBBQ0UKLToxMDEwMjAwMDAwMDAwMDA4MkQ4MDAxMDIwMDAwMDAwMDAwMDAwMDAwMDgKLToxMDEwMzAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDBENjIwMDAwQzIKLToxMDEwNDAwMDAwMDAwMDAwMkMxMzAwMDAwMDAwMDAxODAwMEEwMDAwM0YKLToxMDEwNTAwMDAwMDAwMDAwMDUwMjAwMDAwMDAwMDAxMDkxOTYzNDA5MTUKLToxMDEwNjAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwMDJDMUUwMDAwQTcKLToxMDEwNzAwMDAwMDAwMDA4MkM4MDAwMDYwMDAwMDAwODJEMDAwMDZBMTcKLToxMDEwODAwMDAwMDAwMDA4MkQ4MDAxMDIwMDAwMDAwMDAwMDAwMDAwQTgKLToxMDEwOTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDBEN0EwMDAwNEEKLToxMDEwQTAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDJBMDAwMDAwRjQKLToxMDEwQjAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAwMDAzNjIwMDAwNUQKLToxMDEwQzAwMDAwMDAwMDEwMjM0MjAwQzEwMDAwMDAwMDAyNjM4QzAwRjkKLToxMDEwRDAwMDAwMDAwMDAwMjY0NjAwMDAwMDAwMDAwODAyMDQwMDEyODQKLToxMDEwRTAwMDAwMDAwMDEwQjkwNjA4MjcwMDAwMDAwMDBGNTgwMDAwOUIKLToxMDEwRjAwMDAwMDAwMDAwMEE2NDAwMDAwMDAwMDAwMDBBRTUwMDAwOTMKLToxMDExMDAwMDAwMDAwMDA5MEI2NkZGRkYwMDAwMDAwMDBDMDAwMDAwNUIKLToxMDExMTAwMDAwMDAwMDAwMEI4MDAwMDAwMDAwMDAwODBDQzYwMDEyNTgKLToxMDExMjAwMDAwMDAwMDE4ODAwMEZGQ0UwMDAwMDAwODBGODAwMDAzQzAKLToxMDExMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDAwOUYwMDAwMDAKLToxMDExNDAwMDAwMDAwMDA4MjcxMTAwMTIwMDAwMDAwMDY2OTAwMDAwNTcKLToxMDExNTAwMDAwMDAwMDA4QTMxQjAwMTIwMDAwMDAxMEIxOTgwMDAzNUIKLToxMDExNjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwODBGODAwMDA0QjUKLToxMDExNzAwMDAwMDAwMDA4MjIwMDAwMDMwMDAwMDAwODJDODAwMDBDODIKLToxMDExODAwMDAwMDAwMDA4MkQwMDAwMEMwMDAwMDAxMDAwOUYwMDAwNkYKLToxMDExOTAwMDAwMDAwMDAwMjU5NjAwMDAwMDAwMDAwQzI5ODAwMDAwREYKLToxMDExQTAwMDAwMDAwMDAwMDY2NjAwMDAwMDAwMDAwMDg2NjExODAwRDQKLToxMDExQjAwMDAwMDAwMDA5MDI2MDAwMEYwMDAwMDAwRjAyMDQwMDAyOUUKLToxMDExQzAwMDAwMDAwMDEwQjYwQzA4MDUwMDAwMDAwQzFGQkYwMDAwNTYKLToxMDExRDAwMDAwMDAwMDEwMjg2NjAwMDMwMDAwMDAwODA3OEYwMDAxQ0YKLToxMDExRTAwMDAwMDAwMDBDMzM2NjAwMTAwMDAwMDAwMDMyMTQwMDAwMDQKLToxMDExRjAwMDAwMDAwMDAwMzI5NTAwMDAwMDAwMDAwNTczNjYyQzAwMUUKLToxMDEyMDAwMDAwMDAwMDAwMzFFMzJFMDAwMDAwMDAwODJEODAwMDEwRDcKLToxMDEyMTAwMDAwMDAwMDE4ODAwMEZGOEUwMDAwMDAwMDIzMDAwMDAwODYKLToxMDEyMjAwMDAwMDAwMDA5MjVFNkZGRkYwMDAwMDAwODIyMDAwMDBCNzcKLToxMDEyMzAwMDAwMDAwMDBDNjk1MjAwMDAwMDAwMDAwQzI5ODAwMDAwMzIKLToxMDEyNDAwMDAwMDAwMDEwMjg2NjAwNzUwMDAwMDAxODgwMDBGRjg3NkQKLToxMDEyNTAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAwODJDODAwMDQwNzAKLToxMDEyNjAwMDAwMDAwMDA4MkQwMDAwMjAwMDAwMDAwODJEODAwMTFDNTcKLToxMDEyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwRUYKLToxMDEyODAwMDAwMDAwMDBGNDJFQTAwMTAwMDAwMDAxMDAwNEYwMDA0QjAKLToxMDEyOTAwMDAwMDAwMDEwQjc0NjkyMDAwMDAwMDAwODAyNDkwMDEyNEEKLToxMDEyQTAwMDAwMDAwMDEwQjU4NDBBMDAwMDAwMDAwMDBENjEwMDAwN0QKLToxMDEyQjAwMDAwMDAwMDEwQkE2NjM0NTcwMDAwMDAwODgzMDUwMDEyRDEKLToxMDEyQzAwMDAwMDAwMDEwMDA0RjAwMDIwMDAwMDAwMDAzNDkwMDAwNzEKLToxMDEyRDAwMDAwMDAwMDAxODMwNjhDMDAwMDAwMDAwMDgzQzYwQzAwQTMKLToxMDEyRTAwMDAwMDAwMDEwQjE4NzAwMTEwMDAwMDAwMDBCNkUwMDAwMkMKLToxMDEyRjAwMDAwMDAwMDEwQkVFOTAwMDUwMDAwMDAxODgwMDBGRjZFMkQKLToxMDEzMDAwMDAwMDAwMDAxMDU2OTE0MDAwMDAwMDAxMDkxOEEwMDAyMkQKLToxMDEzMTAwMDAwMDAwMDA4QjRFOTAwMDEwMDAwMDAxMEIxRTkyQzRBMDcKLToxMDEzMjAwMDAwMDAwMDAwODY2OTJDMDAwMDAwMDAwMDAyMDAwMDAwQTAKLToxMDEzMzAwMDAwMDAwMDA5MDJFQUZGRkYwMDAwMDAxMDAwMEMwMDAyOUMKLToxMDEzNDAwMDAwMDAwMDAwMDIwNDBBMDAwMDAwMDAwRjQ2MEMwMDAxMkIKLToxMDEzNTAwMDAwMDAwMDBGMDI4NTAwMDEwMDAwMDAxMDkxOEMwMUZDQ0MKLToxMDEzNjAwMDAwMDAwMDEwQjcwNDBFNDEwMDAwMDAwMDBGNDAwMDAwMTQKLToxMDEzNzAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAwMDBBNjQwMDAwOTEKLToxMDEzODAwMDAwMDAwMDAwMEFFNTAwMDAwMDAwMDAwOTBCNjZGRkZGRjYKLToxMDEzOTAwMDAwMDAwMDAwMEMwMDAwMDAwMDAwMDAwMDBCODAwMDAwQjYKLToxMDEzQTAwMDAwMDAwMDA4MEM4NjAwMTIwMDAwMDAwODBGODAwMDAzRjcKLToxMDEzQjAwMDAwMDAwMDBDMjk1MjAwMDAwMDAwMDAxMDAwOUYwMDAwRjcKLToxMDEzQzAwMDAwMDAwMDA4MjcxMTAwMTIwMDAwMDAwMDY2OTAwMDAwRDUKLToxMDEzRDAwMDAwMDAwMDAwMjY0NjAwMDAwMDAwMDAwMDIzMDYwMDAwNzgKLToxMDEzRTAwMDAwMDAwMDEwQjE5ODAwMDUwMDAwMDAxMDAwMUYwMDAwNzAKLToxMDEzRjAwMDAwMDAwMDA4MEY4MDAwMDQwMDAwMDAwMDAwMDAwMDAwNTIKLToxMDE0MDAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDMyMTQwMDAwNjcKLToxMDE0MTAwMDAwMDAwMDAwMzI5NTAwMDAwMDAwMDAwMDMxRTMyRTAwQzMKLToxMDE0MjAwMDAwMDAwMDA1NzM2NjJDMDAwMDAwMDAwMDI1OTYwMDAwRjcKLToxMDE0MzAwMDAwMDAwMDEwQjE4NzAwMTYwMDAwMDAwQzI5ODAwMDAwOTkKLToxMDE0NDAwMDAwMDAwMDBGMEY2QjAwMDcwMDAwMDAwMDBENjkwMDAwOTYKLToxMDE0NTAwMDAwMDAwMDAwMEE2QzAwMDAwMDAwMDAwMDBBRUQwMDAwMUYKLToxMDE0NjAwMDAwMDAwMDAwMEI2RTAwMDAwMDAwMDAwMDBCODAwMDAwNzgKLToxMDE0NzAwMDAwMDAwMDAwMEM4NzAwMDAwMDAwMDAwODBGODAwMDAzM0YKLToxMDE0ODAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwQzY5NTIwMDAxMTEKLToxMDE0OTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDIyQzU4QzAwQUEKLToxMDE0QTAwMDAwMDAwMDAwMjMxQjAwMDAwMDAwMDAwMDI3MTEwMDAwQzYKLToxMDE0QjAwMDAwMDAwMDAwMjY5MDAwMDAwMDAwMDAxMEI4MTcwRTAzODYKLToxMDE0QzAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxODgwMDBGRkY2REEKLToxMDE0RDAwMDAwMDAwMDEwQjE5ODAwMDIwMDAwMDAwODBGODAwMDA0MTYKLToxMDE0RTAwMDAwMDAwMDA4MjIwMDAwMUEwMDAwMDAwODJDODAwMDBDRjgKLToxMDE0RjAwMDAwMDAwMDA4MkQwMDAwMEMwMDAwMDAwODJEODAwMDEwRTYKLToxMDE1MDAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDBENkUwMDAwMzEKLToxMDE1MTAwMDAwMDAwMDAzRTdDRjM0MDAwMDAwMDAwQzI5ODAwMDAwMjkKLToxMDE1MjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxMEIxODcwMDA3RUQKLToxMDE1MzAwMDAwMDAwMDAwMzYxNDAwMDAwMDAwMDAwMDM2OTUwMDAwOTYKLToxMDE1NDAwMDAwMDAwMDAwMzcxNjAwMDAwMDAwMDAwODJDODAwMDUwNEEKLToxMDE1NTAwMDAwMDAwMDA4MkQwMDAwMzAwMDAwMDAwODJEODAwMDBDNjUKLToxMDE1NjAwMDAwMDAwMDE4ODAwMEZGMjQwMDAwMDAwMDI2NDYwMDAwNTQKLToxMDE1NzAwMDAwMDAwMDAwMjMwMDAwMDAwMDAwMDAwOTI1RTZGRkZGMzYKLToxMDE1ODAwMDAwMDAwMDAwMEI2RTAwMDAwMDAwMDAwM0U3Q0YyQzAwRkQKLToxMDE1OTAwMDAwMDAwMDA4MjIwMDAwMUIwMDAwMDAwQzY5NTIwMDAwM0YKLToxMDE1QTAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxODgwMDBGRjFCRDQKLToxMDE1QjAwMDAwMDAwMDAwMkEwMDAwMDAwMDAwMDAxMDA4NjYwMDA1N0UKLToxMDE1QzAwMDAwMDAwMDAwMDY2NjAwMDAwMDAwMDAwMDg2NjExODAwQjAKLToxMDE1RDAwMDAwMDAwMDA5MDI2MDAwRjAwMDAwMDAxMEI2MEMwODAyRDQKLToxMDE1RTAwMDAwMDAwMDE4ODAwMEZGMTQwMDAwMDAwMDA2ODIwMDAwQzgKLToxMDE1RjAwMDAwMDAwMDEwQjE4RjAwMDAwMDAwMDAwODg3OEYwMDAxN0MKLToxMDE2MDAwMDAwMDAwMDBDNzM2NjAwMTAwMDAwMDAwODJDODAwMDE4MTkKLToxMDE2MTAwMDAwMDAwMDA4MkQwMDAwMTgwMDAwMDAwODJEODAwMDAyQzYKLToxMDE2MjAwMDAwMDAwMDBDNUZCRjAwMDAwMDAwMDAxMDkxREUwMDAwMTEKLToxMDE2MzAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAwMDJBMDAwMDAwNUIKLToxMDE2NDAwMDAwMDAwMDEwMjg2NjAxRjUwMDAwMDAwODJDODAwMDAzNEYKLToxMDE2NTAwMDAwMDAwMDA4MkQwMDAwMDMwMDAwMDAwOTMwNjBGRkYwQ0EKLToxMDE2NjAwMDAwMDAwMDA4MkQ4MDAwMDEwMDAwMDAwQzI5ODAwMDAwMEYKLToxMDE2NzAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODJDODAwMDFBMUQKLToxMDE2ODAwMDAwMDAwMDA4MkQwMDAwMUEwMDAwMDAwNTczNjYwMDAwMkQKLToxMDE2OTAwMDAwMDAwMDA4MkQ4MDAwMDIwMDAwMDAwMDMxODAwMDAwRTIKLToxMDE2QTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODJDODAwMDBDRkIKLToxMDE2QjAwMDAwMDAwMDA4MkQwMDAwMEMwMDAwMDAwODJEODAwMDA0MzAKLToxMDE2QzAwMDAwMDAwMDE4ODAwMEZFRjgwMDAwMDAxODAwMDIwMDAwNzIKLToxMDE2RDAwMDAwMDAwMDE4ODAwMEZFRjYwMDAwMDAwMDJBMDAwMDAwNTQKLToxMDE2RTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDBGMDA4MDAwM0MKLToxMDE2RjAwMDAwMDAwMDA4MEY4MDAwMDcwMDAwMDAxODgwMDAwMDFBOUEKLToxMDE3MDAwMDAwMDAwMDAwMjgwQTAwMDAwMDAwMDAwMDA1MDIwMDAwQTAKLToxMDE3MTAwMDAwMDAwMDA4MjIwMDAwMDkwMDAwMDAwMDI5MDAwMDAwNkQKLToxMDE3MjAwMDAwMDAwMDBGNjU2ODAwMTAwMDAwMDAwM0Y2NkM5NDAwRDQKLToxMDE3MzAwMDAwMDAwMDEwQjk3MkEwMDQwMDAwMDAwQzczRTcwMDE5NEIKLToxMDE3NDAwMDAwMDAwMDBDMjE0MjAwMDQwMDAwMDAwMDNDRjgwMDAwRjIKLToxMDE3NTAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDIwNTMwMDAwNTEKLToxMDE3NjAwMDAwMDAwMDA4MjIwMDAwMDgwMDAwMDAwQzYxNDIwMDA0OTQKLToxMDE3NzAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDA1MDIwMDAwNDAKLToxMDE3ODAwMDAwMDAwMDBDNjE0MjAwMDAwMDAwMDAxMDAxNDIwMDAzNTQKLToxMDE3OTAwMDAwMDAwMDBDMzNFNzAwMUQwMDAwMDAwQzYxNDIwMDAyNTUKLToxMDE3QTAwMDAwMDAwMDE4MDAwQTAwMDAwMDAwMDAwMDJBMDAwMDAwRUQKLToxMDE3QjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwRjBGNDcwMDA3OEUKLToxMDE3QzAwMDAwMDAwMDA4MEY4MDAwMDgwMDAwMDAwQzI5ODAwMDAwQzUKLToxMDE3RDAwMDAwMDAwMDEwMDA5RjAwMDAwMDAwMDAxODgwMDBGRUQ1RUYKLToxMDE3RTAwMDAwMDAwMDAwMzM1MTAwMDAwMDAwMDAwMDJBMDAwMDAwNEIKLToxMDE3RjAwMDAwMDAwMDEwQjFDNjAwMjMwMDAwMDAwRjBGNTAwMDA3Q0EKLToxMDE4MDAwMDAwMDAwMDAwMEE2MDAwMDAwMDAwMDAwMDBBRTEwMDAwODMKLToxMDE4MTAwMDAwMDAwMDBGNEI2MjAwMDgwMDAwMDAwOTBCMTYwMEZGREIKLToxMDE4MjAwMDAwMDAwMDBGNEM2MjAwMTAwMDAwMDAwMDBENjIwMDAwN0MKLToxMDE4MzAwMDAwMDAwMDA5MEQxQTAwRkYwMDAwMDAxMDA3NTAwMDAzMEYKLToxMDE4NDAwMDAwMDAwMDBDMEQxQTAwMDgwMDAwMDAwQzBCMTYwMDA4MjgKLToxMDE4NTAwMDAwMDAwMDAwMENDNjAwMDAwMDAwMDAwMDBCODAwMDAwMkIKLToxMDE4NjAwMDAwMDAwMDAwMDY5ODAwMDAwMDAwMDAwODBGODAwMDAzNDAKLToxMDE4NzAwMDAwMDAwMDEwMDZDMjAwMDQwMDAwMDAwQzI5MDAwMDAyNTUKLToxMDE4ODAwMDAwMDAwMDEwMjY0MjAwMDIwMDAwMDAwQzI5NTIwMDAzNTQKLToxMDE4OTAwMDAwMDAwMDA4MjIwMDAwMDEwMDAwMDAxMDAwOUYwMDAwNkUKLToxMDE4QTAwMDAwMDAwMDAwMjMxQjAwMDAwMDAwMDAwMDI3MTExQTAwQTgKLToxMDE4QjAwMDAwMDAwMDAwNjY5MDAwMDAwMDAwMDAwQzI5NTIwMDAwQUIKLToxMDE4QzAwMDAwMDAwMDEwQjE5NzMyMDkwMDAwMDAwQzI5ODAwMDAwRDAKLToxMDE4RDAwMDAwMDAwMDAwMDY5ODAwMDAwMDAwMDAxMDIwNTMwMDAwRTcKLToxMDE4RTAwMDAwMDAwMDBDMjk1MjAwMDMwMDAwMDAwMDIyQzU4QzAwRkIKLToxMDE4RjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwODBGODAwMDAzMUYKLToxMDE5MDAwMDAwMDAwMDE4ODAwMEZGRjMwMDAwMDAxMEIxQzgwMDEzQjEKLToxMDE5MTAwMDAwMDAwMDEwQjFDNjAwMDMwMDAwMDAwQzI5ODAwMDAwODgKLToxMDE5MjAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwQzI5NTIwMDAwQUQKLToxMDE5MzAwMDAwMDAwMDBDMjk1MjAwMDMwMDAwMDAxMDA2QzIwMDAyNDMKLToxMDE5NDAwMDAwMDAwMDBDMjk1MjAwMDIwMDAwMDAwMDIyQzU4QzAwOUIKLToxMDE5NTAwMDAwMDAwMDAwMjc2NTAwMDAwMDAwMDAwMDI2RTQwMDAwRjEKLToxMDE5NjAwMDAwMDAwMDA4MjIwMDAwMTYwMDAwMDAxMEIxQzYwMDAzQUQKLToxMDE5NzAwMDAwMDAwMDAwMjM0ODAwMDAwMDAwMDAxMEIxODAwMDA1QjYKLToxMDE5ODAwMDAwMDAwMDAwMjM0ODAwMDAwMDAwMDAwQzI5ODAwMDAwMzcKLToxMDE5OTAwMDAwMDAwMDBGMEY1MDAwMDcwMDAwMDAxODgwMDAwMDEyMjgKLToxMDE5QTAwMDAwMDAwMDA4MjIwMDAwMTYwMDAwMDAwQzI5ODAwMDAwNDIKLToxMDE5QjAwMDAwMDAwMDAwMzAxNDAwMDAwMDAwMDAwMDMwOTUwMDAwMUUKLToxMDE5QzAwMDAwMDAwMDEwMDc1MDAwMDMwMDAwMDAwOTBCMTYwMEZGODQKLToxMDE5RDAwMDAwMDAwMDA5MEQxQTAwRkYwMDAwMDAwRjMxMTYwMDA4N0EKLToxMDE5RTAwMDAwMDAwMDAwMzE2MjM0MDAwMDAwMDAwM0YxNjIzMDAwQUEKLToxMDE5RjAwMDAwMDAwMDEwMjA1RjAwMDAwMDAwMDAwMDJDNTEwMDAwREIKLToxMDFBMDAwMDAwMDAwMDA5MkNEMTAwN0YwMDAwMDAwODJDRDkwMDAwNDQKLToxMDFBMTAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAwODJEODAwMDBDRDAKLToxMDFBMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDkxREUwMDAwMzcKLToxMDFBMzAwMDAwMDAwMDEwMDVDMjAwMDQwMDAwMDAwODBGODAwMDA3MkQKLToxMDFBNDAwMDAwMDAwMDAwMzMwMDAwMDAwMDAwMDAxMDAwOUYwMDAwQjQKLToxMDFBNTAwMDAwMDAwMDE4ODAwMEZFODYwMDAwMDAwMDJBMDAwMDAwNDAKLToxMDFBNjAwMDAwMDAwMDBGMEY1MDAwMDcwMDAwMDAxMEIxQzYwMDJENEQKLToxMDFBNzAwMDAwMDAwMDBGNDc0MjAwMDgwMDAwMDAwOTA3MEUwMDBGOTkKLToxMDFBODAwMDAwMDAwMDA4MDcwRTAwMDgwMDAwMDAxMDAwMUYwMDAwMDIKLToxMDFBOTAwMDAwMDAwMDA4MDkwMDAwMDEwMDAwMDAwNzA5MTIxQzAwRjYKLToxMDFBQTAwMDAwMDAwMDAzQ0JDQTkyMDAwMDAwMDAwMDBCOTdBMjAwQzgKLToxMDFBQjAwMDAwMDAwMDA3NDIxNzFDMDAwMDAwMDAwMDBCMDQwMDAwOUIKLToxMDFBQzAwMDAwMDAwMDBGMEE4NDAwMDMwMDAwMDAwMDBBOTU5QzAwM0IKLToxMDFBRDAwMDAwMDAwMDAwNEEwMDlBMDAwMDAwMDAwODgyMTIwMDAxODUKLToxMDFBRTAwMDAwMDAwMDAxMEMxNzA4MDAwMDAwMDAwMDBDOTc4QzAwOUIKLToxMDFBRjAwMDAwMDAwMDAwMDIxODAwMDAwMDAwMDAwODBEMDBGRkZGQjkKLToxMDFCMDAwMDAwMDAwMDA4MEY4MDAwMDYwMDAwMDAwQzI5MDAwMDAwMDMKLToxMDFCMTAwMDAwMDAwMDEwMDZDMjAwMDQwMDAwMDAwQzI5NTIwMDAyNjAKLToxMDFCMjAwMDAwMDAwMDEwMjY0MjAwMDIwMDAwMDAwQzI5NTIwMDAzQjEKLToxMDFCMzAwMDAwMDAwMDA4MjIwMDAwMDEwMDAwMDAxMDAwOUYwMDAwQ0IKLToxMDFCNDAwMDAwMDAwMDEwQjE5NzMyMEMwMDAwMDAwMDIzMUIwMDAwQzEKLToxMDFCNTAwMDAwMDAwMDAwMjcxMTA4MDAwMDAwMDAwMDY2OTAwMDAwNEYKLToxMDFCNjAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwMDAyMTgwMDAwQTYKLToxMDFCNzAwMDAwMDAwMDEwMjA1MzAwMDAwMDAwMDAwQzI5NTIwMDAzNTgKLToxMDFCODAwMDAwMDAwMDAwMjJDNTM2MDAwMDAwMDAxMDAwMUYwMDAwMDkKLToxMDFCOTAwMDAwMDAwMDA4MEY4MDAwMDYwMDAwMDAxODgwMDBGRkY0MUQKLToxMDFCQTAwMDAwMDAwMDAwMjMxQjAwMDAwMDAwMDAwMDI3MTEwODAwQjcKLToxMDFCQjAwMDAwMDAwMDAwNjY5MDAwMDAwMDAwMDAxMEIxQzgwMDBCOUIKLToxMDFCQzAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAxMDIwNTMwMDAwREQKLToxMDFCRDAwMDAwMDAwMDBDMjk1MjAwMDAwMDAwMDAwQzI5NTIwMDAzRjQKLToxMDFCRTAwMDAwMDAwMDEwMDZDMjAwMDIwMDAwMDAwQzI5NTIwMDAyOTIKLToxMDFCRjAwMDAwMDAwMDAwMjJDNThDMDAwMDAwMDAwMDI3NjUwMDAwRTYKLToxMDFDMDAwMDAwMDAwMDAwMjZFNDAwMDAwMDAwMDAwMDIzNDgwMDAwNUYKLToxMDFDMTAwMDAwMDAwMDA4MjIwMDAwMTcwMDAwMDAwQzI5ODAwMDAwQ0UKLToxMDFDMjAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAxODgwMDBGRTRCQTQKLTowMDAwMDAwMUZGCi0vKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIGZpcm13YXJlIGRhdGEgZGVyaXZlZCBmcm9tIHByb3ByaWV0YXJ5IHVucHVibGlzaGVkCi0gKiBzb3VyY2UgY29kZSwgQ29weXJpZ2h0IChjKSAyMDA0IC0gMjAwOSBCcm9hZGNvbSBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoaXMgZmlybXdhcmUgZGF0YQotICogaW4gaGV4YWRlY2ltYWwgb3IgZXF1aXZhbGVudCBmb3JtYXQsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcwotICogYWNjb21wYW55aW5nIGl0LgotICovCmRpZmYgLS1naXQgYS9maXJtd2FyZS9ibngyL2JueDItcnYycC0wOWF4LTUuMC4wLmoxMC5mdy5paGV4IGIvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDlheC01LjAuMC5qMTAuZncuaWhleApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzI1ZTY5Ci0tLSAvZGV2L251bGwKKysrIGIvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDlheC01LjAuMC5qMTAuZncuaWhleApAQCAtMCwwICsxLDQ5OSBAQAorOjEwMDAwMDAwMDAwMDAwMDAwMDAwMEU4MDAwMDAwMDU4MDAwMDAwMDkwMQorOjEwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMAorOjEwMDAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEMAorOjEwMDAzMDAwMDAwMDBGQTgwMDAwMEVEODAwMDAwMDA1MDAwMDAwMDAxRQorOjEwMDA0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCMAorOjA4MDA1MDAwMDAwMDAwMDAwMDAwMDAwMEE4Cis6MDgwMDU4MDAwMDAwMDAxMEIxODAwMDA2NTkKKzoxMDAwNjAwMDAwMDAwMDFGMDMwMzAzMDAwMDAwMDAwODA1MDBGRkZGNUQKKzoxMDAwNzAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAwODA1MDAwMEZGNUEKKzoxMDAwODAwMDAwMDAwMDE4MDAwMjAwMDAwMDAwMDAwOEFDMDAwMDAxQTEKKzoxMDAwOTAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAwQzJGODAwMDAxOUYKKzoxMDAwQTAwMDAwMDAwMDAwMkIwMDAwMDAwMDAwMDAwMDJCODAwMDAwN0EKKzoxMDAwQjAwMDAwMDAwMDEwOTFFMDAwMDIwMDAwMDAwOEFDMDAwMDAxMDgKKzoxMDAwQzAwMDAwMDAwMDEwMjAzRjAwNkIwMDAwMDAxMDIxM0YwMDAzRTMKKzoxMDAwRDAwMDAwMDAwMDEwMjBCRjAwM0EwMDAwMDAxODgwMDBGRkZENjMKKzoxMDAwRTAwMDAwMDAwMDEwQjFCOEIwMTUwMDAwMDAwQjJGREYwMDAyQjcKKzoxMDAwRjAwMDAwMDAwMDAwMDNEODAwMDAwMDAwMDAwMDJDMzgwMDAwQzEKKzoxMDAxMDAwMDAwMDAwMDA4MkM4MDAwMDAwMDAwMDAwODJEMDAwMDAwMDYKKzoxMDAxMTAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDA1NTU1QjIKKzoxMDAxMjAwMDAwMDAwMDE4ODAwMDAwOEYwMDAwMDAwODJEODAwMTFDRDYKKzoxMDAxMzAwMDAwMDAwMDA4MDIwMDAwMDEwMDAwMDAxMDkxREUwMDAwMzUKKzoxMDAxNDAwMDAwMDAwMDBGNDJFMDAwMUMwMDAwMDAxMDkxODQwQTE2MUQKKzoxMDAxNTAwMDAwMDAwMDE4ODAwMDAwOTYwMDAwMDAwQzI5ODAwMDAyQkEKKzoxMDAxNjAwMDAwMDAwMDBDMUY4MDAwMDIwMDAwMDAwMDJBREYwMDAwRDkKKzoxMDAxNzAwMDAwMDAwMDA4MkEwMDAwMEYwMDAwMDAwMDA1MDAwMDAwMzkKKzoxMDAxODAwMDAwMDAwMDE4ODAwMEZGRTYwMDAwMDAwODAyMDAwMDAxRTcKKzoxMDAxOTAwMDAwMDAwMDBGNDJFMDAwMUMwMDAwMDAxMDkxODQwQTE4Q0IKKzoxMDAxQTAwMDAwMDAwMDA4MkM4MDAwMDYwMDAwMDAwODJEMDAwMDA2NUEKKzoxMDAxQjAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJEODAwMTA2MEUKKzoxMDAxQzAwMDAwMDAwMDE4ODAwMDAwODUwMDAwMDAxODgwMDBGRkYxOEEKKzoxMDAxRDAwMDAwMDAwMDA4QjEwMDAwMDEwMDAwMDAwODJDODAwMTBDQTQKKzoxMDAxRTAwMDAwMDAwMDA4MkQwMDAwMDgwMDAwMDAwODJEODAwMDAxMUMKKzoxMDAxRjAwMDAwMDAwMDE4ODAwMDAwN0YwMDAwMDAwQjJGREYwMDAyQ0QKKzoxMDAyMDAwMDAwMDAwMDBDMUY4MDAwMDIwMDAwMDAwMDJDMDcwMDAwMEUKKzoxMDAyMTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODA1MDA1NTU1QTgKKzoxMDAyMjAwMDAwMDAwMDE4ODAwMEZGRDIwMDAwMDAwQjJGREYwMDAyNEEKKzoxMDAyMzAwMDAwMDAwMDBDMUY4MDAwMDAwMDAwMDAwMDJDMDcwMDAwRTAKKzoxMDAyNDAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODA1MDA1NTU1NzgKKzoxMDAyNTAwMDAwMDAwMDE4ODAwMEZGQ0MwMDAwMDAwQzFGODAwMDAyOEUKKzoxMDAyNjAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRkM5NzcKKzoxMDAyNzAwMDAwMDAwMDBDMjk4MDAwMDIwMDAwMDAwQzFGODAwMDAyMUEKKzoxMDAyODAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDA1MkUKKzoxMDAyOTAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRkMzNEQKKzoxMDAyQTAwMDAwMDAwMDA4MDIyNDAwNEEwMDAwMDAxODAwMDQwMDAwQkEKKzoxMDAyQjAwMDAwMDAwMDE4ODAwMDAwMUMwMDAwMDAxODgwMDAwMDFFRDQKKzoxMDAyQzAwMDAwMDAwMDE4ODAwMDAwNzgwMDAwMDAxODgwMDAwMENCQkIKKzoxMDAyRDAwMDAwMDAwMDE4ODAwMDAwQ0EwMDAwMDAxODgwMDAwMDAwMjQKKzoxMDAyRTAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwREUKKzoxMDAyRjAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwQ0UKKzoxMDAzMDAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwQkQKKzoxMDAzMTAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMTE2OTYKKzoxMDAzMjAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDAwOUQKKzoxMDAzMzAwMDAwMDAwMDE4ODAwMDAwMTUwMDAwMDAxODgwMDAwMDFCNUQKKzoxMDAzNDAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMEUxOUMKKzoxMDAzNTAwMDAwMDAwMDE4ODAwMDAwMkYwMDAwMDAxODgwMDAwMTE2MjcKKzoxMDAzNjAwMDAwMDAwMDE4ODAwMDAxNDEwMDAwMDAxODgwMDAwMTBDMEUKKzoxMDAzNzAwMDAwMDAwMDE4ODAwMDAxNjUwMDAwMDAxODgwMDAwMDYxODYKKzoxMDAzODAwMDAwMDAwMDE4ODAwMDAwMDAwMDAwMDAxODgwMDAwMDlFOUYKKzoxMDAzOTAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwMDA1MDAwMDAwQUMKKzoxMDAzQTAwMDAwMDAwMDE4ODAwMEZGQTIwMDAwMDAxMDkxRDQwMDAwOUYKKzoxMDAzQjAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxREIKKzoxMDAzQzAwMDAwMDAwMDA4MkEwMDAwMDIwMDAwMDAwMDA1MDAwMDAwRjQKKzoxMDAzRDAwMDAwMDAwMDE4ODAwMEZGOUMwMDAwMDAxMDkxRDQwMDAwNzUKKzoxMDAzRTAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxQUIKKzoxMDAzRjAwMDAwMDAwMDAwMjk0MjAwMDAwMDAwMDAwODJBMDAwMDAyNUUKKzoxMDA0MDAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRjk1QkIKKzoxMDA0MTAwMDAwMDAwMDE4ODAwMEZGOTQwMDAwMDAxMEIxQkNCMDBBN0EKKzoxMDA0MjAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDAzRDgwMDAwRDYKKzoxMDA0MzAwMDAwMDAwMDAwMkMzQzAwMDAwMDAwMDAxMDkxRDQwMDAwREYKKzoxMDA0NDAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDAwMDJBMzIKKzoxMDA0NTAwMDAwMDAwMDE4ODAwMDAwREEwMDAwMDAxMDJDNjIwMUJBRDEKKzoxMDA0NjAwMDAwMDAwMDE4ODAwMDAwMDYwMDAwMDAwODJDODAwMTBEMkMKKzoxMDA0NzAwMDAwMDAwMDA4MkQwMDAwMDkwMDAwMDAxMDkxRDQwMDAwQzkKKzoxMDA0ODAwMDAwMDAwMDA4MkQ4MDAxMDcwMDAwMDAxODgwMDAwMDM3RTAKKzoxMDA0OTAwMDAwMDAwMDBDMjk4MDAwMDAwMDAwMDAwQzFGODAwMDAwRkMKKzoxMDA0QTAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwMDJBREYwMDAwQzQKKzoxMDA0QjAwMDAwMDAwMDA4MkEwMDAwMDYwMDAwMDAwODA1MDA1NTU1NEQKKzoxMDA0QzAwMDAwMDAwMDE4ODAwMEZGN0UwMDAwMDAxMDkxRDQwMDAwQTIKKzoxMDA0RDAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxQkEKKzoxMDA0RTAwMDAwMDAwMDA4MkEwMDAwMEIwMDAwMDAwMDA1MDAwMDAwQ0EKKzoxMDA0RjAwMDAwMDAwMDE4ODAwMEZGNzgwMDAwMDAwMDAyMDIwMDAwRTkKKzoxMDA1MDAwMDAwMDAwMDAwMDI5QTAwMDAwMDAwMDAwMDA2MEMyQzAwMTEKKzoxMDA1MTAwMDAwMDAwMDA0QzYwQzM0MDAwMDAwMDAxMDAwMUYwMDAwQTIKKzoxMDA1MjAwMDAwMDAwMDEwQjE5NjE4MEMwMDAwMDAwODA2OTYwMDA0QTgKKzoxMDA1MzAwMDAwMDAwMDA5MDY4REZGRkMwMDAwMDAwNENEMDUxQTAwMzQKKzoxMDA1NDAwMDAwMDAwMDA0Q0M5QTE4MDAwMDAwMDAxMDIwRDcwMDAwMjIKKzoxMDA1NTAwMDAwMDAwMDBDMkI1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDA1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDIwRDcwMDAwODQKKzoxMDA1NzAwMDAwMDAwMDA4MEY4MDAwMDEwMDAwMDAxMEIxODAwMUY0QUQKKzoxMDA1ODAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwQzZCNTYwMDAwNkYKKzoxMDA1OTAwMDAwMDAwMDE4MDAwNDAwMDAwMDAwMDAwMDA2ODIwMDAwQjcKKzoxMDA1QTAwMDAwMDAwMDEwQjE4QTAwMDgwMDAwMDAxMEIxOEMxNDA3OTAKKzoxMDA1QjAwMDAwMDAwMDBCMDUwQUZGRkYwMDAwMDAxMEIxOEEwMDAzRDUKKzoxMDA1QzAwMDAwMDAwMDAwODYwQTE4MDAwMDAwMDAxMDkxOEMwMDAwNTYKKzoxMDA1RDAwMDAwMDAwMDA4MkEwMDAwMDEwMDAwMDAxMDkxRDQwMDAwNzMKKzoxMDA1RTAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAwMDA1MDIwMDAwREYKKzoxMDA1RjAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAxODAwMEEwMDAwNUEKKzoxMDA2MDAwMDAwMDAwMDAwMDY4MjAwMDAwMDAwMDAxMDkxREUwMDAwRTMKKzoxMDA2MTAwMDAwMDAwMDEwQkVFMTAwMDUwMDAwMDAxODgwMDBGRjRDNDMKKzoxMDA2MjAwMDAwMDAwMDAxMDU2MTE0MDAwMDAwMDAxMDkxOEEwMDAyMjIKKzoxMDA2MzAwMDAwMDAwMDA4QjBFMTAwMDEwMDAwMDAxODAwMEQwMDAwRkIKKzoxMDA2NDAwMDAwMDAwMDAwMDY4MjAwMDAwMDAwMDAxMDkxREUwMDAwQTMKKzoxMDA2NTAwMDAwMDAwMDEwQkVFMjAwMDUwMDAwMDAxODgwMDBGRjQ0MEEKKzoxMDA2NjAwMDAwMDAwMDAxMDU2MjE0MDAwMDAwMDAxMDkxOEEwMDAyRTEKKzoxMDA2NzAwMDAwMDAwMDA4QjE2MjAwMDEwMDAwMDAxODAwMEQwMDAwMzkKKzoxMDA2ODAwMDAwMDAwMDEwQjFBMEIwMTMwMDAwMDAwQjJGREYwMDAyMkIKKzoxMDA2OTAwMDAwMDAwMDAwMkMyMDAwMDAwMDAwMDAwODJDODAwMDAwNUEKKzoxMDA2QTAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAxMDkxRDQwMDAwQTAKKzoxMDA2QjAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDBGRkRDMEYKKzoxMDA2QzAwMDAwMDAwMDA4MkQ4MDAxMUMwMDAwMDAxMDAwMUYwMDAwMjkKKzoxMDA2RDAwMDAwMDAwMDE4ODAwMEZGRTYwMDAwMDAwRjQ3NjAwMDA4REYKKzoxMDA2RTAwMDAwMDAwMDBGMDYwRTAwMDEwMDAwMDAwMDBGNTgwMDAwN0YKKzoxMDA2RjAwMDAwMDAwMDAwMEE2NDAwMDAwMDAwMDAwMDBBRTUwMDAwOUQKKzoxMDA3MDAwMDAwMDAwMDA5MEI2NkZGRkYwMDAwMDAwMDBENjEwMDAwMDMKKzoxMDA3MTAwMDAwMDAwMDE4ODAwMDAwMTMwMDAwMDAwRjQ3NjAwMDA4NzAKKzoxMDA3MjAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwODJDODAwMDAwRkEKKzoxMDA3MzAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAxMDkxRDQwMDAwMEYKKzoxMDA3NDAwMDAwMDAwMDA4MkQ4MDAxMUMwMDAwMDAwRjA2MEUwMDAxQjMKKzoxMDA3NTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwMDBGNTgwMDAwMDMKKzoxMDA3NjAwMDAwMDAwMDE4ODAwMEZGRDQwMDAwMDAwMDBBNjQwMDAwQjAKKzoxMDA3NzAwMDAwMDAwMDAwMEFFNTAwMDAwMDAwMDAwOTBCNjZGRkZGMTIKKzoxMDA3ODAwMDAwMDAwMDAwMEQ2MTAwMDAwMDAwMDAwMDAyNjIwMDAwOTcKKzoxMDA3OTAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDMxMDQwMDAwMDkKKzoxMDA3QTAwMDAwMDAwMDAwMzA5QTAwMDAwMDAwMDAwOTA1NjAwMDBGMDIKKzoxMDA3QjAwMDAwMDAwMDEwQjE4QTAwMEIwMDAwMDAwMDA1NjM0QzAwMkYKKzoxMDA3QzAwMDAwMDAwMDA4MDUwQTAwMTIwMDAwMDAxMEI5NjIxNDAzQkUKKzoxMDA3RDAwMDAwMDAwMDAwMDMwMDAwMDAwMDAwMDAxODgwMDAwMDA2NzgKKzoxMDA3RTAwMDAwMDAwMDE4ODAwMEZGMTEwMDAwMDAxMEI2MDYxNDA0N0QKKzoxMDA3RjAwMDAwMDAwMDA4MDMwNjAwMDEwMDAwMDAwODJBMDAwMDAxQjQKKzoxMDA4MDAwMDAwMDAwMDE4ODAwMEZGMTYwMDAwMDAxODgwMDBGRjlFMDYKKzoxMDA4MTAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzI5NTIwMDAxOUEKKzoxMDA4MjAwMDAwMDAwMDBDMjk1MjAwMDAwMDAwMDAwODAyMDAwMDBFMjkKKzoxMDA4MzAwMDAwMDAwMDA4MDI4MDAwMUEwMDAwMDAxMEIxQzQwQTAyODMKKzoxMDA4NDAwMDAwMDAwMDA4MDIwMDAwMDMwMDAwMDAwODIyMDAwMDAxNzAKKzoxMDA4NTAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwMDJBREYwMDAwRTMKKzoxMDA4NjAwMDAwMDAwMDAwMkEwMDA4MDAwMDAwMDAwODA1MDA1NTU1OUYKKzoxMDA4NzAwMDAwMDAwMDE4ODAwMEZGMDgwMDAwMDAwQjJGREYwMDAyQkUKKzoxMDA4ODAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJBMDAwMDAxQzAKKzoxMDA4OTAwMDAwMDAwMDAwMkMyMDAwMDAwMDAwMDAxMDkxRDQwMDAwOTcKKzoxMDA4QTAwMDAwMDAwMDA4MkM4MDAwMDAwMDAwMDAwODJEMDAwMDAwNUYKKzoxMDA4QjAwMDAwMDAwMDA4MkQ4MDAxMUMwMDAwMDAxODgwMDBGRkE2MjkKKzoxMDA4QzAwMDAwMDAwMDA4MkM4MDAwMDYwMDAwMDAwODJEMDAwMDA2MzMKKzoxMDA4RDAwMDAwMDAwMDAwMzA4MDAwMDAwMDAwMDAwMDMxMDAwMDAwMzcKKzoxMDA4RTAwMDAwMDAwMDA4MkQ4MDAwMDYwMDAwMDAwQzI5ODAwMDAxOTcKKzoxMDA4RjAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAxMDkxREUwMDAwQ0QKKzoxMDA5MDAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDEwOUMKKzoxMDA5MTAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRUYzNDkKKzoxMDA5MjAwMDAwMDAwMDEwOTFBMEIwMDkwMDAwMDAwODJDODAwMTBEMEIKKzoxMDA5MzAwMDAwMDAwMDA4MkQwMDAwMDkwMDAwMDAxMDkxRDQwMDAwMDQKKzoxMDA5NDAwMDAwMDAwMDA4MkQ4MDAxMDcwMDAwMDAxODgwMDBGRjlGQjQKKzoxMDA5NTAwMDAwMDAwMDE4ODAwMDAwMTAwMDAwMDAwOEFDMDAwMDAxM0EKKzoxMDA5NjAwMDAwMDAwMDE4ODAwMDAwMEIwMDAwMDAwMDAzODBCMDAwQjEKKzoxMDA5NzAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMDA0MDAwRjAKKzoxMDA5ODAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODA2MDA1NTU1M0EKKzoxMDA5OTAwMDAwMDAwMDE4ODAwMEZGODEwMDAwMDAxODgwMDAwMDMxNzYKKzoxMDA5QTAwMDAwMDAwMDE4ODAwMDAwMDYwMDAwMDAwQjJGREYwMDAyOEUKKzoxMDA5QjAwMDAwMDAwMDAwMkMwMDBFMDAwMDAwMDAwODJBMDAwMDA3QzQKKzoxMDA5QzAwMDAwMDAwMDA4MDUwMDU1NTUwMDAwMDAxODgwMDBGRURERkQKKzoxMDA5RDAwMDAwMDAwMDAwMDY4MjAwMDAwMDAwMDAwQzI5ODAwMDAxRDkKKzoxMDA5RTAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAxMDBDRTcwMDA3NTEKKzoxMDA5RjAwMDAwMDAwMDA5MDU2MkZGRkYwMDAwMDAxMEJBNkMxNDA1M0EKKzoxMDBBMDAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwMDIxMDAwMDAwQkMKKzoxMDBBMTAwMDAwMDAwMDA4MkEwMDAwMDUwMDAwMDAxMDkxRDQwMDAwMkEKKzoxMDBBMjAwMDAwMDAwMDA4MkM4MDAxMEMwMDAwMDAwODJEMDAwMDA4QzgKKzoxMDBBMzAwMDAwMDAwMDBDMzE2MjAwMTgwMDAwMDAwODJEODAwMDAxNDkKKzoxMDBBNDAwMDAwMDAwMDE4ODAwMEZGNzUwMDAwMDAxODAwMEQwMDAwNzUKKzoxMDBBNTAwMDAwMDAwMDEwQjFBMEIwMEUwMDAwMDAwQjJGREYwMDAyNUMKKzoxMDBBNjAwMDAwMDAwMDAwMDNEODAwMDAwMDAwMDAwMDJDMjAwMDAwNUYKKzoxMDBBNzAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAxODgwMDAwMDE1NTQKKzoxMDBBODAwMDAwMDAwMDEwMkM2MjAwMDIwMDAwMDAxODgwMDAwMDBDMjIKKzoxMDBBOTAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMDcwMDAwMDgKKzoxMDBBQTAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAxMDkxREUwMDAwMUIKKzoxMDBBQjAwMDAwMDAwMDA4MDUwMEZGRkYwMDAwMDAxODgwMDBGRUJGRDYKKzoxMDBBQzAwMDAwMDAwMDA4MkM4MDAxMEQwMDAwMDAwODJEMDAwMDA5MjYKKzoxMDBBRDAwMDAwMDAwMDEwOTFENDAwMDAwMDAwMDAwODJEODAwMTA3RTQKKzoxMDBBRTAwMDAwMDAwMDE4ODAwMEZGNkMwMDAwMDAwQzI5ODAwMDAxNEQKKzoxMDBBRjAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAxMDkxREUwMDAwQ0IKKzoxMDBCMDAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDBBQTAKKzoxMDBCMTAwMDAwMDAwMDAwMDUwMDAwMDAwMDAwMDAxODgwMDBGRUIzODcKKzoxMDBCMjAwMDAwMDAwMDAwMDY4MjAwMDAwMDAwMDAwODJDODAwMTBDN0MKKzoxMDBCMzAwMDAwMDAwMDA4MkQwMDAwMDgwMDAwMDAwODJEODAwMTM0OEUKKzoxMDBCNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMDIwNUYwMDAwMTYKKzoxMDBCNTAwMDAwMDAwMDA4MkM4MDAxNDAwMDAwMDAwODJEMDAwMDNDMkYKKzoxMDBCNjAwMDAwMDAwMDA4MkQ4MDAxMUMwMDAwMDAwMDAwMDAwMDAwQjMKKzoxMDBCNzAwMDAwMDAwMDEwOTFERTAwMDAwMDAwMDAwODJDODAwMDgwQzIKKzoxMDBCODAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAwODJEODAwMTA1NzUKKzoxMDBCOTAwMDAwMDAwMDEwQkVFMjAwMDUwMDAwMDAxODgwMDBGRTlDNkUKKzoxMDBCQTAwMDAwMDAwMDAxMDU2MjE0MDAwMDAwMDAxMDkxOEEwMDAyOUMKKzoxMDBCQjAwMDAwMDAwMDA4QjE2MjAwMDEwMDAwMDAxMDkxREUwMDAwOUEKKzoxMDBCQzAwMDAwMDAwMDE4MDAwRDAwMDAwMDAwMDAxMDkxRDQwMDAwOEIKKzoxMDBCRDAwMDAwMDAwMDA4MDYwMEFBQUEwMDAwMDAxODgwMDBGRjM4RTQKKzoxMDBCRTAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxQTMKKzoxMDBCRjAwMDAwMDAwMDA4MkEwMDAwMDkwMDAwMDAwODA1MDBBQUFBNTkKKzoxMDBDMDAwMDAwMDAwMDE4ODAwMEZFOTYwMDAwMDAxMDkxRDQwMDAwNDMKKzoxMDBDMTAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDBGRjMwNTUKKzoxMDBDMjAwMDAwMDAwMDEwOTFBMDNDMDIwMDAwMDAxMEIxRTY2MjA3MzUKKzoxMDBDMzAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMzEwMDAwM0MKKzoxMDBDNDAwMDAwMDAwMDA5MkNCMTAwN0YwMDAwMDAwODJDRDkwMDAwMzIKKzoxMDBDNTAwMDAwMDAwMDA4MkQwMDAwMDAwMDAwMDAwODJEODAwMTBEOUMKKzoxMDBDNjAwMDAwMDAwMDEwQjFBODAwMDYwMDAwMDAxMDIwNUYwMDAwODYKKzoxMDBDNzAwMDAwMDAwMDAwMkMyMDAwMDAwMDAwMDAwMDJDQTcwMDAwNTUKKzoxMDBDODAwMDAwMDAwMDA4MkQwMDAwMTAwMDAwMDAwODJEODAwMTA4NjEKKzoxMDBDOTAwMDAwMDAwMDE4ODAwMEZGMkIwMDAwMDAxMEIxQTYwMDEwMUIKKzoxMDBDQTAwMDAwMDAwMDEwMDAxRjAwMDAwMDAwMDAwRjBGMzAwMDA3QzAKKzoxMDBDQjAwMDAwMDAwMDAwMEE2MDAwMDAwMDAwMDAwMDBBRTEwMDAwREYKKzoxMDBDQzAwMDAwMDAwMDBGNEI2MjAwMDgwMDAwMDAwOTBCMTYwMEZGMzcKKzoxMDBDRDAwMDAwMDAwMDAwMEQ2MjAwMDAwMDAwMDAwOTBEMUEwMEZGNzYKKzoxMDBDRTAwMDAwMDAwMDEwMDczMDAwMDMwMDAwMDAwQzBEMUEwMDA4N0YKKzoxMDBDRjAwMDAwMDAwMDBDMEIxNjAwMDgwMDAwMDAwRjRDRTMwMDE4NjkKKzoxMDBEMDAwMDAwMDAwMDAwMEM5OTJDMDAwMDAwMDAwNENDOTkzNDAwNzUKKzoxMDBEMTAwMDAwMDAwMDA4MEY4MDAwMDAwMDAwMDAwQzI5ODAwMDAxODYKKzoxMDBEMjAwMDAwMDAwMDAwMzMzMTAwMDAwMDAwMDAwODIyMDAwMDE2MUYKKzoxMDBEMzAwMDAwMDAwMDAwMkFERjAwMDAwMDAwMDAwODJBMDAwMDBDNkMKKzoxMDBENDAwMDAwMDAwMDEwMDA5RjAwMDAwMDAwMDAwMDBGMjAwMDAwQzUKKzoxMDBENTAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwODA1MDA1NTU1MzAKKzoxMDBENjAwMDAwMDAwMDE4ODAwMEZFNkEwMDAwMDAxMDkxRDQwMDAwMEUKKzoxMDBENzAwMDAwMDAwMDA4MDYwMEFBQUEwMDAwMDAxODgwMDBGRjA0NzYKKzoxMDBEODAwMDAwMDAwMDBGNDcyMjAwMDgwMDAwMDAwOTA3MEUwMDBGQjYKKzoxMDBEOTAwMDAwMDAwMDA4MDcwRTAwMDgwMDAwMDAwODAyODAwMDAxQTMKKzoxMDBEQTAwMDAwMDAwMDA3MDI4NTFDMDAwMDAwMDAwODgyODUwMDAxODkKKzoxMDBEQjAwMDAwMDAwMDAwMDI4NTRDMDAwMDAwMDAwNzQyODUxQzAwNzYKKzoxMDBEQzAwMDAwMDAwMDAzQzNBQTUyMDAwMDAwMDAwMDAzQjEwRTAwOUYKKzoxMDBERDAwMDAwMDAwMDA3NEIwNzFDMDAwMDAwMDAwRjBGMzAwMDA3NDkKKzoxMDBERTAwMDAwMDAwMDBGMEE5NjAwMDMwMDAwMDAwMDBBOTU1QzAwNTYKKzoxMDBERjAwMDAwMDAwMDAwNEEwMDVBMDAwMDAwMDAwMDBDOTYwQTAwQTMKKzoxMDBFMDAwMDAwMDAwMDA5MEM5OUZGRkYwMDAwMDAwODBEMDBGRkZGMjMKKzoxMDBFMTAwMDAwMDAwMDEwQjE5NjMyMDIwMDAwMDAwODBGODAwMDA1QUIKKzoxMDBFMjAwMDAwMDAwMDEwQjFBODAwMDgwMDAwMDAxMDIwNUYwMDAwQzIKKzoxMDBFMzAwMDAwMDAwMDBCMkZERjAwMDIwMDAwMDAwMDJDMjAwMDAwNEIKKzoxMDBFNDAwMDAwMDAwMDAwMkNBNzAwMDAwMDAwMDAwODJEMDAwMDEwOEEKKzoxMDBFNTAwMDAwMDAwMDA4MkQ4MDAxMDgwMDAwMDAxODgwMDBGRUYyNEMKKzoxMDBFNjAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAxMDAwMUYwMDAwOUQKKzoxMDBFNzAwMDAwMDAwMDBDMUY4MDAwMDEwMDAwMDAwMDJBREYwMDAwQkQKKzoxMDBFODAwMDAwMDAwMDA4MkEwMDAwMEQwMDAwMDAwODA1MDBBQUFBQzIKKzoxMDBFOTAwMDAwMDAwMDE4ODAwMEZFNDQwMDAwMDAxMDkxRDQwMDAwMDMKKzoxMDBFQTAwMDAwMDAwMDA4MDYwMDU1NTUwMDAwMDAxODgwMDBGRURFMTYKKzoxMDBFQjAwMDAwMDAwMDBDMjk4MDAwMDEwMDAwMDAwQzFGODAwMDAxRDAKKzoxMDBFQzAwMDAwMDAwMDA4MkEwMDAwMDcwMDAwMDAwODA1MDA1NTU1MzIKKzowODBFRDAwMDAwMDAwMDE4ODAwMEZFM0M0OAorOjA4MEVEODAwMDAwMDAwMTBCMTgwMDAwNENECis6MTAwRUUwMDAwMDAwMDAxRjAzMDMwMzAwMDAwMDAwMDgwNTAwMDBGRkNFCis6MTAwRUYwMDAwMDAwMDAxODAwMDIwMDAwMDAwMDAwMDAyQTAwMDAwMEFFCis6MTAwRjAwMDAwMDAwMDAxMEIxRDQwMDAwMDAwMDAwMTA5MURFMDAwMENECis6MTAwRjEwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMTAwMDFGMDAwMDFGCis6MTAwRjIwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDAyRjgwQUEwMDE5Cis6MTAwRjMwMDAwMDAwMDAwQzI5ODAwMDAxMDAwMDAwMDgwMjU0MDAwRjhFCis6MTAwRjQwMDAwMDAwMDAwMDJDNDAwMDAwMDAwMDAwMDkyOTUyMDAzRjcyCis6MTAwRjUwMDAwMDAwMDAxODAwMDQwMDAwMDAwMDAwMTg4MDAwMDAxMENECis6MTAwRjYwMDAwMDAwMDAxODgwMDAwMDExMDAwMDAwMTg4MDAwMDA0QUY2Cis6MTAwRjcwMDAwMDAwMDAxODgwMDAwMTI4MDAwMDAwMTg4MDAwMDEyN0YwCis6MTAwRjgwMDAwMDAwMDAxODgwMDAwMTI2MDAwMDAwMTg4MDAwMDEyNkUzCis6MTAwRjkwMDAwMDAwMDAxODgwMDAwMDAwMDAwMDAwMTg4MDAwMDEzRkUxCis6MTAwRkEwMDAwMDAwMDAxODgwMDAwMTIyMDAwMDAwMTg4MDAwMDAwQkUzCis6MTAwRkIwMDAwMDAwMDAxODgwMDAwMTQ1MDAwMDAwMTg4MDAwMDE5QTIwCis6MTAwRkMwMDAwMDAwMDAxODgwMDAwMDdCMDAwMDAwMTg4MDAwMDBGOTdECis6MTAwRkQwMDAwMDAwMDAxODgwMDAwMTA5MDAwMDAwMDAyQTAwMDAwMDQ1Cis6MTAwRkUwMDAwMDAwMDAxODgwMDBGRkU0MDAwMDAwMDAyQTAwMDAwMDVDCis6MTAwRkYwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTg4MDAwRkZFMUM0Cis6MTAxMDAwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTg4MDAwRkZERjQwCis6MTAxMDEwMDAwMDAwMDAwMDAzODIwMDAwMDAwMDAwMTg4MDAwRkZEQURBCis6MTAxMDIwMDAwMDAwMDAwMTBDMTYxNDAwMDAwMDAwMDA4QzE4MTQwMEQxCis6MTAxMDMwMDAwMDAwMDAxMDkxOTgwMDAzMDAwMDAwMDgwQzk2MDAwMkM4Cis6MTAxMDQwMDAwMDAwMDAxMEIxODAwMDAzMDAwMDAwMDgwQzk2MDAwMUIxCis6MTAxMDUwMDAwMDAwMDAwMDBDMDAwMDAwMDAwMDAwMDAwRDE5MDAwMDVFCis6MTAxMDYwMDAwMDAwMDAxMDIwNTYwMDAwMDAwMDAwMEMyQkQ3MDAwMUVCCis6MTAxMDcwMDAwMDAwMDAwODBGODAwMDAxMDAwMDAwMDAwMDAwMDAwMEQ4Cis6MTAxMDgwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUUyCis6MTAxMDkwMDAwMDAwMDAxMDAxMTMwMUYxMDAwMDAwMTgwMDA3MDAwMDFCCis6MTAxMEEwMDAwMDAwMDAwMDA1MDIwMDAwMDAwMDAwMTA5MTk2MzQyMUFECis6MTAxMEIwMDAwMDAwMDAxMDIwNUYwMDAwMDAwMDAwMDAyQzFFMDAwMDU3Cis6MTAxMEMwMDAwMDAwMDAwODJDODAwMDA2MDAwMDAwMDgyRDAwMDAwNjJCCis6MTAxMEQwMDAwMDAwMDAwODJEODAwMTAyMDAwMDAwMDAwMDAwMDAwMDU4Cis6MTAxMEUwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDAwRDYxMDAwMDEzCis6MTAxMEYwMDAwMDAwMDAxODAwMEEwMDAwMDAwMDAwMDAwNTAyMDAwMEM3Cis6MTAxMTAwMDAwMDAwMDAxMDkxOTYzNDE2MDAwMDAwMTAyMDVGMDAwMENGCis6MTAxMTEwMDAwMDAwMDAwMDA5RDgwMDAwMDAwMDAwMDAyQzFFMDAwMEE0Cis6MTAxMTIwMDAwMDAwMDAwODJDODAwMTBFMDAwMDAwMDgyRDAwMDAwQUJECis6MTAxMTMwMDAwMDAwMDAwODJEODAwMTAyMDAwMDAwMDAwMDAwMDAwMEY3Cis6MTAxMTQwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDAwRDYyMDAwMEIxCis6MTAxMTUwMDAwMDAwMDAwMDJDMTMwMDAwMDAwMDAwMTgwMDBBMDAwMDJFCis6MTAxMTYwMDAwMDAwMDAwMDA1MDIwMDAwMDAwMDAwMTA5MTk2MzQwOTA0Cis6MTAxMTcwMDAwMDAwMDAxMDIwNUYwMDAwMDAwMDAwMDAyQzFFMDAwMDk2Cis6MTAxMTgwMDAwMDAwMDAwODJDODAwMDA2MDAwMDAwMDgyRDAwMDA2QTA2Cis6MTAxMTkwMDAwMDAwMDAwODJEODAwMTAyMDAwMDAwMDAwMDAwMDAwMDk3Cis6MTAxMUEwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDAwRDdBMDAwMDM5Cis6MTAxMUIwMDAwMDAwMDAxODAwMEEwMDAwMDAwMDAwMDAyQTAwMDAwMEUzCis6MTAxMUMwMDAwMDAwMDAwMDBENjEwMDAwMDAwMDAwMDAwMzYyMDAwMDRDCis6MTAxMUQwMDAwMDAwMDAxMDIzNDIwMERCMDAwMDAwMDAwMjYzOEMwMENFCis6MTAxMUUwMDAwMDAwMDAwMDI2NDYwMDAwMDAwMDAwMDgwMjA0MDAxMjczCis6MTAxMUYwMDAwMDAwMDAxMEI5MDYwODJFMDAwMDAwMDAwRjU4MDAwMDgzCis6MTAxMjAwMDAwMDAwMDAwMDBBNjQwMDAwMDAwMDAwMDAwQUU1MDAwMDgxCis6MTAxMjEwMDAwMDAwMDAwOTBCNjZGRkZGMDAwMDAwMDAwQzAwMDAwMDRBCis6MTAxMjIwMDAwMDAwMDAwMDBCODAwMDAwMDAwMDAwMDgwQ0M2MDAxMjQ3Cis6MTAxMjMwMDAwMDAwMDAxODgwMDBGRkNFMDAwMDAwMTAyMDU2MDAwMEMzCis6MTAxMjQwMDAwMDAwMDAwQzJCRDcwMDAxMDAwMDAwMDgwRjgwMDAwM0Y1Cis6MTAxMjUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDFGMDAwMDVGCis6MTAxMjYwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDgyNzExMDAxMkRECis6MTAxMjcwMDAwMDAwMDAwMDY2OTAwMDAwMDAwMDAwMDhBMzFCMDAxMkEwCis6MTAxMjgwMDAwMDAwMDAxMEIxOTgwMDA2MDAwMDAwMTAwMDFGMDAwMEQwCis6MTAxMjkwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMTAyMDU2MDAwMDc5Cis6MTAxMkEwMDAwMDAwMDAwQzJCRDcwMDAxMDAwMDAwMDgwRjgwMDAwNDk0Cis6MTAxMkIwMDAwMDAwMDAwODIyMDAwMDAzMDAwMDAwMDgyQzgwMDAwQzQxCis6MTAxMkMwMDAwMDAwMDAwODJEMDAwMDBDMDAwMDAwMTAwMDFGMDAwMEFFCis6MTAxMkQwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDAyNTk2MDAwMDA0Cis6MTAxMkUwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMDAwNjY2MDAwMERECis6MTAxMkYwMDAwMDAwMDAwMDg2NjExODAwMDAwMDAwMDkwMjYwMDAwRjc1Cis6MTAxMzAwMDAwMDAwMDAwRjAyMDQwMDAyMDAwMDAwMTBCNjBDMDgwNUU3Cis6MTAxMzEwMDAwMDAwMDAwQzFGQkYwMDAwMDAwMDAwMTAyODY2MDAwMzQyCis6MTAxMzIwMDAwMDAwMDAwODA3OEYwMDAxMDAwMDAwMEMzMzY2MDAxMDY5Cis6MTAxMzMwMDAwMDAwMDAwMDMyMTQwMDAwMDAwMDAwMDAzMjk1MDAwMEEwCis6MTAxMzQwMDAwMDAwMDAwNTczNjYyQzAwMDAwMDAwMDAzMUUzMkUwMDUxCis6MTAxMzUwMDAwMDAwMDAwODJEODAwMDEwMDAwMDAwMTg4MDAwRkY3NUJDCis6MTAxMzYwMDAwMDAwMDAwMDIzMDAwMDAwMDAwMDAwMDkyNUU2RkZGRjQ4Cis6MTAxMzcwMDAwMDAwMDAwODIyMDAwMDBCMDAwMDAwMEM2OTUyMDAwMDcxCis6MTAxMzgwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAyODY2MDA4ODgyCis6MTAxMzkwMDAwMDAwMDAxODgwMDBGRjZFMDAwMDAwMDAyQTAwMDAwMDFFCis6MTAxM0EwMDAwMDAwMDAwODJDODAwMDQwMDAwMDAwMDgyRDAwMDAyMEY0Cis6MTAxM0IwMDAwMDAwMDAwODJEODAwMTFDMDAwMDAwMDAwMDAwMDAwMDVCCis6MTAxM0MwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMEY0MkVBMDAxMDUzCis6MTAxM0QwMDAwMDAwMDAxMDAwNEYwMDA0MDAwMDAwMTBCNzQ2OTIwMDBCCis6MTAxM0UwMDAwMDAwMDAwODAyNDkwMDEyMDAwMDAwMTBCNTg0MEEwMDQ1Cis6MTAxM0YwMDAwMDAwMDAwMDBENjEwMDAwMDAwMDAwMTBCQTY2MzQ2QUIxCis6MTAxNDAwMDAwMDAwMDAwODgzMDUwMDEyMDAwMDAwMTAwMDRGMDAwMkQ5Cis6MTAxNDEwMDAwMDAwMDAwMDAzNDkwMDAwMDAwMDAwMDE4MzA2OEMwMDZBCis6MTAxNDIwMDAwMDAwMDAwMDgzQzYwQzAwMDAwMDAwMTBCMTg3MDAxMTBFCis6MTAxNDMwMDAwMDAwMDAwMDBCNkUwMDAwMDAwMDAwMTBCRUU5MDAwNTc3Cis6MTAxNDQwMDAwMDAwMDAxODgwMDBGRjU1MDAwMDAwMDEwNTY5MTQwMDJECis6MTAxNDUwMDAwMDAwMDAxMDkxOEEwMDAyMDAwMDAwMDhCNEU5MDAwMUI5Cis6MTAxNDYwMDAwMDAwMDAxMEIxRTkyQzVEMDAwMDAwMDA4NjY5MkMwMDJFCis6MTAxNDcwMDAwMDAwMDAwMDAyMDAwMDAwMDAwMDAwMDkwMkVBRkZGRjc3Cis6MTAxNDgwMDAwMDAwMDAxMDAwMEMwMDAyMDAwMDAwMDAwMjA0MEEwMDJFCis6MTAxNDkwMDAwMDAwMDAwRjQ2MEMwMDAxMDAwMDAwMEYwMjg1MDAwMTUzCis6MTAxNEEwMDAwMDAwMDAxMDkxOEMwMUZDMDAwMDAwMTBCNzA0MEU1NEU1Cis6MTAxNEIwMDAwMDAwMDAwMDBGNDAwMDAwMDAwMDAwMDAwRDYxMDAwMDZGCis6MTAxNEMwMDAwMDAwMDAwMDBBNjQwMDAwMDAwMDAwMDAwQUU1MDAwMEJGCis6MTAxNEQwMDAwMDAwMDAwOTBCNjZGRkZGMDAwMDAwMDAwQzAwMDAwMDg4Cis6MTAxNEUwMDAwMDAwMDAwMDBCODAwMDAwMDAwMDAwMDgwQzg2MDAxMkM1Cis6MTAxNEYwMDAwMDAwMDAxMDIwNTYwMDAwMDAwMDAwMEMyQkQ3MDAwMTU3Cis6MTAxNTAwMDAwMDAwMDAwODBGODAwMDAzMDAwMDAwMEMyOTUyMDAwMEJBCis6MTAxNTEwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMTRECis6MTAxNTIwMDAwMDAwMDAwODI3MTEwMDEyMDAwMDAwMDA2NjkwMDAwMDczCis6MTAxNTMwMDAwMDAwMDAwMDI2NDYwMDAwMDAwMDAwMDAyMzA2MDAwMDE2Cis6MTAxNTQwMDAwMDAwMDAxMEIxOTgwMDA5MDAwMDAwMTAwMDFGMDAwMDBBCis6MTAxNTUwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMTAyMDU2MDAwMEI2Cis6MTAxNTYwMDAwMDAwMDAwQzJCRDcwMDAxMDAwMDAwMDgwRjgwMDAwNEQxCis6MTAxNTcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAwMDFGMDAwMDNDCis6MTAxNTgwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDAzMjE0MDAwMEM2Cis6MTAxNTkwMDAwMDAwMDAwMDMyOTUwMDAwMDAwMDAwMDAzMUUzMkUwMDQyCis6MTAxNUEwMDAwMDAwMDAwNTczNjYyQzAwMDAwMDAwMDAyNTk2MDAwMDc2Cis6MTAxNUIwMDAwMDAwMDAxMEIxODcwMDIxMDAwMDAwMEMyOTgwMDAwMDBECis6MTAxNUMwMDAwMDAwMDAwRjBGNkIwMDA3MDAwMDAwMDAwRDY5MDAwMDE1Cis6MTAxNUQwMDAwMDAwMDAwMDBBNkMwMDAwMDAwMDAwMDAwQUVEMDAwMDlFCis6MTAxNUUwMDAwMDAwMDAwMDBCNkUwMDAwMDAwMDAwMDAwQjgwMDAwMEY3Cis6MTAxNUYwMDAwMDAwMDAwMDBDODcwMDAwMDAwMDAwMTg4MDAwRkYxRUEzCis6MTAxNjAwMDAwMDAwMDAwMTBDMTYxNDAwMDAwMDAwMDA4QzE4MTQwMEVCCis6MTAxNjEwMDAwMDAwMDAwODBDOTYwMDAxMDAwMDAwMTA5MTk4MDAwMkU0Cis6MTAxNjIwMDAwMDAwMDAwODBDOTkwMDAxMDAwMDAwMDAwRDE5MDAwMEU2Cis6MTAxNjMwMDAwMDAwMDAwMDBDMDAwMDAwMDAwMDAwMTAyMDU2MDAwMDE4Cis6MTAxNjQwMDAwMDAwMDAwQzJCRDcwMDAxMDAwMDAwMDgwRjgwMDAwMUYzCis6MTAxNjUwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMEM2OTUyMDAwMTNGCis6MTAxNjYwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUZDCis6MTAxNjcwMDAwMDAwMDAwMDIyQzU4QzAwMDAwMDAwMDAyMzEyMDAwMEMyCis6MTAxNjgwMDAwMDAwMDAwMDI3MTEwMDAwMDAwMDAwMDAyNjkwMDAwMDZDCis6MTAxNjkwMDAwMDAwMDAxMEI4MTcwRTAzMDAwMDAwMEMyOTgwMDAwMEE1Cis6MTAxNkEwMDAwMDAwMDAxODgwMDBGRkVCMDAwMDAwMDA4Mjk3MEUwMDkxCis6MTAxNkIwMDAwMDAwMDAwMEEzMTIwQTAwMDAwMDAwMDgyMjAwMDAxQTI3Cis6MTAxNkMwMDAwMDAwMDAwODJDODAwMDBDMDAwMDAwMDgyRDAwMDAwQzE5Cis6MTAxNkQwMDAwMDAwMDAwODJEODAwMDEwMDAwMDAwMTAwMDFGMDAwMDE2Cis6MTAxNkUwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDAwRDZFMDAwMDMwCis6MTAxNkYwMDAwMDAwMDAwM0U3Q0YzNDAwMDAwMDAwMEMyOTgwMDAwMDQ4Cis6MTAxNzAwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMTBCMTg3MDAwNzBCCis6MTAxNzEwMDAwMDAwMDAwMDM2MTQwMDAwMDAwMDAwMDAzNjk1MDAwMEI0Cis6MTAxNzIwMDAwMDAwMDAwMDM3MTYwMDAwMDAwMDAwMDgyQzgwMDA1MDY4Cis6MTAxNzMwMDAwMDAwMDAwODJEMDAwMDMwMDAwMDAwMDgyRDgwMDAwQzgzCis6MTAxNzQwMDAwMDAwMDAxODgwMDBGRUY4MDAwMDAwMDAyNjQ2MDAwMDlGCis6MTAxNzUwMDAwMDAwMDAwMDIzMDAwMDAwMDAwMDAwMDkyNUU2RkZGRjU0Cis6MTAxNzYwMDAwMDAwMDAwMDBCNkUwMDAwMDAwMDAwMDNFN0NGMkMwMDFCCis6MTAxNzcwMDAwMDAwMDAwODIyMDAwMDFCMDAwMDAwMEM2OTUyMDAwMDVECis6MTAxNzgwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTg4MDAwRkVFRjFGCis6MTAxNzkwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTAwODY2MDAwNTlDCis6MTAxN0EwMDAwMDAwMDAwMDA2NjYwMDAwMDAwMDAwMDA4NjYxMTgwMENFCis6MTAxN0IwMDAwMDAwMDAwOTAyNjAwMEYwMDAwMDAwMTBCNjBDMDgwMkYyCis6MTAxN0MwMDAwMDAwMDAxODgwMDBGRUU4MDAwMDAwMDAwNjgyMDAwMDEzCis6MTAxN0QwMDAwMDAwMDAxMEIxOEYwMDAwMDAwMDAwMDg4NzhGMDAwMTlBCis6MTAxN0UwMDAwMDAwMDAwQzczNjYwMDEwMDAwMDAwMDgyQzgwMDAxODM4Cis6MTAxN0YwMDAwMDAwMDAwODJEMDAwMDE4MDAwMDAwMDgyRDgwMDAwMkU1Cis6MTAxODAwMDAwMDAwMDAwQzVGQkYwMDAwMDAwMDAwMTA5MURFMDAwMDJGCis6MTAxODEwMDAwMDAwMDAxODAwMEQwMDAwMDAwMDAwMDAyQTAwMDAwMDc5Cis6MTAxODIwMDAwMDAwMDAxMDI4NjYwMUY1MDAwMDAwMDgyQzgwMDAwMzZECis6MTAxODMwMDAwMDAwMDAwODJEMDAwMDAzMDAwMDAwMDkzMDYwRkZGMEU4Cis6MTAxODQwMDAwMDAwMDAwODJEODAwMDAxMDAwMDAwMEMyOTgwMDAwMDJECis6MTAxODUwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDgyQzgwMDAxQTNCCis6MTAxODYwMDAwMDAwMDAwODJEMDAwMDFBMDAwMDAwMDU3MzY2MDAwMDRCCis6MTAxODcwMDAwMDAwMDAwODJEODAwMDAyMDAwMDAwMDAzMTgwMDAwMDAwCis6MTAxODgwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMDgyQzgwMDAwQzE5Cis6MTAxODkwMDAwMDAwMDAwODJEMDAwMDBDMDAwMDAwMDgyRDgwMDAwNDRFCis6MTAxOEEwMDAwMDAwMDAxODgwMDBGRUNDMDAwMDAwMTgwMDAyMDAwMEJDCis6MTAxOEIwMDAwMDAwMDAxODgwMDBGRUNBMDAwMDAwMDAyQTAwMDAwMDlFCis6MTAxOEMwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMTlBCis6MTAxOEQwMDAwMDAwMDAwMDBGMDA4MDAwMDAwMDAwMDgwRjgwMDAwN0RCCis6MTAxOEUwMDAwMDAwMDAxODgwMDAwMDFCMDAwMDAwMDAyODBBMDAwMDEzCis6MTAxOEYwMDAwMDAwMDAwMDA1MDIwMDAwMDAwMDAwMDgyMjAwMDAwOUFFCis6MTAxOTAwMDAwMDAwMDAwMDI5MDAwMDAwMDAwMDAwMEY2NTY4MDAxMEMyCis6MTAxOTEwMDAwMDAwMDAwM0Y2NkM5NDAwMDAwMDAwMTBCOTcyQTAwNEVGCis6MTAxOTIwMDAwMDAwMDAwQzczRTcwMDE5MDAwMDAwMEMyMTQyMDAwNEM1Cis6MTAxOTMwMDAwMDAwMDAwMDNDRjgwMDAwMDAwMDAwMEMyOTgwMDAwMEJFCis6MTAxOTQwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMDgyMjAwMDAwOEUyCis6MTAxOTUwMDAwMDAwMDAwQzYxNDIwMDA0MDAwMDAwMTgwMDBBMDAwMEIyCis6MTAxOTYwMDAwMDAwMDAwMDA1MDIwMDAwMDAwMDAwMEM2MTQyMDAwMEMxCis6MTAxOTcwMDAwMDAwMDAxMDAxNDIwMDAzMDAwMDAwMEMzM0U3MDAxRENFCis6MTAxOTgwMDAwMDAwMDAwQzYxNDIwMDAyMDAwMDAwMTgwMDBBMDAwMDg0Cis6MTAxOTkwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTAwMDFGMDAwMEVFCis6MTAxOUEwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMEYwRjQ3MDAwNzdDCis6MTAxOUIwMDAwMDAwMDAwODBGODAwMDA4MDAwMDAwMEMyOTgwMDAwMEQzCis6MTAxOUMwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMTk5Cis6MTAxOUQwMDAwMDAwMDAxODgwMDBGRUE2MDAwMDAwMDAzMzUxMDAwMDQ3Cis6MTAxOUUwMDAwMDAwMDAwMDJBMDAwMDAwMDAwMDAwMTBCMUM2MDAyOTFECis6MTAxOUYwMDAwMDAwMDAwRjBGNTAwMDA3MDAwMDAwMDAwQTYwMDAwMDA4Cis6MTAxQTAwMDAwMDAwMDAwMDBBRTEwMDAwMDAwMDAwMEY0QjYyMDAwODI3Cis6MTAxQTEwMDAwMDAwMDAwOTBCMTYwMEZGMDAwMDAwMEY0QzYyMDAxMEQwCis6MTAxQTIwMDAwMDAwMDAwMDBENjIwMDAwMDAwMDAwMDkwRDFBMDBGRjE4Cis6MTAxQTMwMDAwMDAwMDAxMDA3NTAwMDAzMDAwMDAwMEMwRDFBMDAwODAxCis6MTAxQTQwMDAwMDAwMDAwQzBCMTYwMDA4MDAwMDAwMDAwQ0M2MDAwMDhGCis6MTAxQTUwMDAwMDAwMDAwMDBCODAwMDAwMDAwMDAwMDAwNjk4MDAwMDVECis6MTAxQTYwMDAwMDAwMDAxMDIwNTYwMDAwMDAwMDAwMEMyQkQ3MDAwMUUxCis6MTAxQTcwMDAwMDAwMDAwODBGODAwMDAzMDAwMDAwMTAwNkMyMDAwNEYwCis6MTAxQTgwMDAwMDAwMDAwQzI5MDAwMDAyMDAwMDAwMTAyNjQyMDAwMkE1Cis6MTAxQTkwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMDgyMjAwMDAwMTkxCis6MTAxQUEwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUI4Cis6MTAxQUIwMDAwMDAwMDAwMDIzMUIwMDAwMDAwMDAwMDAyNzExMUEwMDk2Cis6MTAxQUMwMDAwMDAwMDAwMDY2OTAwMDAwMDAwMDAwMEMyOTUyMDAwMDk5Cis6MTAxQUQwMDAwMDAwMDAxMEIxOTczMjBDMDAwMDAwMEMyOTgwMDAwMEJCCis6MTAxQUUwMDAwMDAwMDAwMDA2OTgwMDAwMDAwMDAwMTAyMDUzMDAwMEQ1Cis6MTAxQUYwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMDAyMkM1OEMwMEU5Cis6MTAxQjAwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMTU3Cis6MTAxQjEwMDAwMDAwMDAxMDIwNTYwMDAwMDAwMDAwMEMyQkQ3MDAwMTMwCis6MTAxQjIwMDAwMDAwMDAwODBGODAwMDAzMDAwMDAwMTg4MDAwRkZFRjk1Cis6MTAxQjMwMDAwMDAwMDAxMEIxQzgwMDEzMDAwMDAwMTBCMUM2MDAwMzdGCis6MTAxQjQwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAyMDUzMDAwMDVECis6MTAxQjUwMDAwMDAwMDAwQzI5NTIwMDAwMDAwMDAwMEMyOTUyMDAwMzc0Cis6MTAxQjYwMDAwMDAwMDAxMDA2QzIwMDAyMDAwMDAwMEMyOTUyMDAwMjEyCis6MTAxQjcwMDAwMDAwMDAwMDIyQzU4QzAwMDAwMDAwMDAyNzY1MDAwMDY2Cis6MTAxQjgwMDAwMDAwMDAwMDI2RTQwMDAwMDAwMDAwMDgyMjAwMDAxNjBCCis6MTAxQjkwMDAwMDAwMDAxMEIxQzYwMDAzMDAwMDAwMDAyMzQ4MDAwMDUwCis6MTAxQkEwMDAwMDAwMDAxMEIxODAwMDA1MDAwMDAwMDAyMzQ4MDAwMDg0Cis6MTAxQkIwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMEYwRjUwMDAwN0ZCCis6MTAxQkMwMDAwMDAwMDAxODgwMDAwMDEyMDAwMDAwMDgyMjAwMDAxNjJCCis6MTAxQkQwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMDAzMDE0MDAwMDBDCis6MTAxQkUwMDAwMDAwMDAwMDMwOTUwMDAwMDAwMDAwMTAwNzUwMDAwM0M2Cis6MTAxQkYwMDAwMDAwMDAwOTBCMTYwMEZGMDAwMDAwMDkwRDFBMDBGRjhECis6MTAxQzAwMDAwMDAwMDAwRjMxMTYwMDA4MDAwMDAwMDAzMTYyMzQwMEFGCis6MTAxQzEwMDAwMDAwMDAwM0YxNjIzMDAwMDAwMDAwMTAyMDVGMDAwMEFGCis6MTAxQzIwMDAwMDAwMDAwMDJDNTEwMDAwMDAwMDAwMDkyQ0QxMDA3RkIyCis6MTAxQzMwMDAwMDAwMDAwODJDRDkwMDAwMDAwMDAwMDgyRDAwMDAwMDYyCis6MTAxQzQwMDAwMDAwMDAwODJEODAwMDBDMDAwMDAwMDAwMDAwMDAwMEQzCis6MTAxQzUwMDAwMDAwMDAxMDkxREUwMDAwMDAwMDAwMTAwNUMyMDAwNTI5Cis6MTAxQzYwMDAwMDAwMDAwODBGODAwMDA3MDAwMDAwMDAzMzAwMDAwMEEzCis6MTAxQzcwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUU2Cis6MTAxQzgwMDAwMDAwMDAxODgwMDBGRTUwMDAwMDAwMDAyQTAwMDAwMDQ0Cis6MTAxQzkwMDAwMDAwMDAwRjBGNTAwMDA3MDAwMDAwMTBCMUM2MDAzMDE4Cis6MTAxQ0EwMDAwMDAwMDAwRjQ3NDIwMDA4MDAwMDAwMDkwNzBFMDAwRjY3Cis6MTAxQ0IwMDAwMDAwMDAwODA3MEUwMDA4MDAwMDAwMTAwMDFGMDAwMEQwCis6MTAxQ0MwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDgwOTAwMDAwMUIzCis6MTAxQ0QwMDAwMDAwMDAwNzA5MTIxQzAwMDAwMDAwMDNDQkNBOTIwMDlDCis6MTAxQ0UwMDAwMDAwMDAwMDBCOTdBMjAwMDAwMDAwMDc0MjE3MUMwMDM0Cis6MTAxQ0YwMDAwMDAwMDAwMDBCMDQwMDAwMDAwMDAwMEYwQTg0MDAwMzM1Cis6MTAxRDAwMDAwMDAwMDAwMDBBOTU5QzAwMDAwMDAwMDA0QTAwOUEwMEI0Cis6MTAxRDEwMDAwMDAwMDAwODgyMTIwMDAxMDAwMDAwMDEwQzE3MDgwMEZBCis6MTAxRDIwMDAwMDAwMDAwMDBDOTc4QzAwMDAwMDAwMDAwMjE4MDAwMDZBCis6MTAxRDMwMDAwMDAwMDAwODBEMDBGRkZGMDAwMDAwMDgwRjgwMDAwNkYzCis6MTAxRDQwMDAwMDAwMDAwQzI5MDAwMDAwMDAwMDAwMTAwNkMyMDAwNDgyCis6MTAxRDUwMDAwMDAwMDAwQzI5NTIwMDAyMDAwMDAwMTAyNjQyMDAwMjgwCis6MTAxRDYwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMDgyMjAwMDAwMUJFCis6MTAxRDcwMDAwMDAwMDAxMDAwMUYwMDAwMDAwMDAwMEM2QkQ3MDAwMUU1Cis6MTAxRDgwMDAwMDAwMDAxMEIxOTczMjBEMDAwMDAwMDAyMzFCMDAwMDdFCis6MTAxRDkwMDAwMDAwMDAwMDI3MTEwODAwMDAwMDAwMDA2NjkwMDAwMDBECis6MTAxREEwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMDAwMjE4MDAwMDY0Cis6MTAxREIwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMEMyOTUyMDAwMzE2Cis6MTAxREMwMDAwMDAwMDAwMDIyQzUzNjAwMDAwMDAwMTAwMDFGMDAwMEM3Cis6MTAxREQwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMDgwRjgwMDAwNjE3Cis6MTAxREUwMDAwMDAwMDAxODgwMDBGRkYyMDAwMDAwMDAyMzFCMDAwMDJDCis6MTAxREYwMDAwMDAwMDAwMDI3MTEwODAwMDAwMDAwMDA2NjkwMDAwMEFECis6MTAxRTAwMDAwMDAwMDAxMEIxQzgwMDBCMDAwMDAwMEMyOTgwMDAwMDg5Cis6MTAxRTEwMDAwMDAwMDAxMDIwNTMwMDAwMDAwMDAwMEMyOTUyMDAwMEI4Cis6MTAxRTIwMDAwMDAwMDAwQzI5NTIwMDAzMDAwMDAwMTAwNkMyMDAwMjRFCis6MTAxRTMwMDAwMDAwMDAwQzI5NTIwMDAyMDAwMDAwMDAyMkM1OEMwMEE2Cis6MTAxRTQwMDAwMDAwMDAwMDI3NjUwMDAwMDAwMDAwMDAyNkU0MDAwMEZDCis6MTAxRTUwMDAwMDAwMDAwMDIzNDgwMDAwMDAwMDAwMDgyMjAwMDAxN0Q2Cis6MTAxRTYwMDAwMDAwMDAwQzI5ODAwMDAwMDAwMDAwMTAwMDFGMDAwMDhFCis6MTAxRTcwMDAwMDAwMDAwQzZCRDcwMDAxMDAwMDAwMTg4MDAwRkUxMTZDCis6MDAwMDAwMDFGRgorLyoKKyAqIFRoaXMgZmlsZSBjb250YWlucyBmaXJtd2FyZSBkYXRhIGRlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZAorICogc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKKyAqIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKKyAqIGFjY29tcGFueWluZyBpdC4KKyAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDlheC01LjAuMC5qMy5mdy5paGV4IGIvZmlybXdhcmUvYm54Mi9ibngyLXJ2MnAtMDlheC01LjAuMC5qMy5mdy5paGV4CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MzNkYmVhLi4wMDAwMDAwCi0tLSBhL2Zpcm13YXJlL2JueDIvYm54Mi1ydjJwLTA5YXgtNS4wLjAuajMuZncuaWhleAorKysgL2Rldi9udWxsCkBAIC0xLDQ5OCArMCwwIEBACi06MTAwMDAwMDAwMDAwMDAwMDAwMDAwRTc4MDAwMDAwNTgwMDAwMDAwOTA5Ci06MTAwMDEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUwCi06MTAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEQwCi06MTAwMDMwMDAwMDAwMEZBODAwMDAwRUQwMDAwMDAwMDUwMDAwMDAwMDI2Ci06MTAwMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEIwCi06MDgwMDUwMDAwMDAwMDAwMDAwMDAwMDAwQTgKLTowODAwNTgwMDAwMDAwMDEwQjE4MDAwMDY1OQotOjEwMDA2MDAwMDAwMDAwMUYwMzAzMDMwMDAwMDAwMDA4MDUwMEZGRkY1RAotOjEwMDA3MDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDA4MDUwMDAwRkY1QQotOjEwMDA4MDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDA4QUMwMDAwMDFBMQotOjEwMDA5MDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDBDMkY4MDAwMDE5RgotOjEwMDBBMDAwMDAwMDAwMDAyQjAwMDAwMDAwMDAwMDAwMkI4MDAwMDA3QQotOjEwMDBCMDAwMDAwMDAwMTA5MUUwMDAwMjAwMDAwMDA4QUMwMDAwMDEwOAotOjEwMDBDMDAwMDAwMDAwMTAyMDNGMDA2QjAwMDAwMDEwMjEzRjAwMDNFMwotOjEwMDBEMDAwMDAwMDAwMTAyMEJGMDAzQTAwMDAwMDE4ODAwMEZGRkQ2MwotOjEwMDBFMDAwMDAwMDAwMTBCMUI4QjAxNTAwMDAwMDBCMkZERjAwMDJCNwotOjEwMDBGMDAwMDAwMDAwMDAwM0Q4MDAwMDAwMDAwMDAwMkMzODAwMDBDMQotOjEwMDEwMDAwMDAwMDAwMDgyQzgwMDAwMDAwMDAwMDA4MkQwMDAwMDAwNgotOjEwMDExMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTVCMgotOjEwMDEyMDAwMDAwMDAwMTg4MDAwMDA4RjAwMDAwMDA4MkQ4MDAxMUNENgotOjEwMDEzMDAwMDAwMDAwMDgwMjAwMDAwMTAwMDAwMDEwOTFERTAwMDAzNQotOjEwMDE0MDAwMDAwMDAwMEY0MkUwMDAxQzAwMDAwMDEwOTE4NDBBMTYxRAotOjEwMDE1MDAwMDAwMDAwMTg4MDAwMDA5NjAwMDAwMDBDMjk4MDAwMDJCQQotOjEwMDE2MDAwMDAwMDAwMEMxRjgwMDAwMjAwMDAwMDAwMkFERjAwMDBEOQotOjEwMDE3MDAwMDAwMDAwMDgyQTAwMDAwRjAwMDAwMDAwMDUwMDAwMDAzOQotOjEwMDE4MDAwMDAwMDAwMTg4MDAwRkZFNjAwMDAwMDA4MDIwMDAwMDFFNwotOjEwMDE5MDAwMDAwMDAwMEY0MkUwMDAxQzAwMDAwMDEwOTE4NDBBMThDQgotOjEwMDFBMDAwMDAwMDAwMDgyQzgwMDAwNjAwMDAwMDA4MkQwMDAwMDY1QQotOjEwMDFCMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMDYwRQotOjEwMDFDMDAwMDAwMDAwMTg4MDAwMDA4NTAwMDAwMDE4ODAwMEZGRjE4QQotOjEwMDFEMDAwMDAwMDAwMDhCMTAwMDAwMTAwMDAwMDA4MkM4MDAxMENBNAotOjEwMDFFMDAwMDAwMDAwMDgyRDAwMDAwODAwMDAwMDA4MkQ4MDAwMDExQwotOjEwMDFGMDAwMDAwMDAwMTg4MDAwMDA3RjAwMDAwMDBCMkZERjAwMDJDRAotOjEwMDIwMDAwMDAwMDAwMEMxRjgwMDAwMjAwMDAwMDAwMkMwNzAwMDAwRQotOjEwMDIxMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMDU1NTVBOAotOjEwMDIyMDAwMDAwMDAwMTg4MDAwRkZEMjAwMDAwMDBCMkZERjAwMDI0QQotOjEwMDIzMDAwMDAwMDAwMEMxRjgwMDAwMDAwMDAwMDAwMkMwNzAwMDBFMAotOjEwMDI0MDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMDU1NTU3OAotOjEwMDI1MDAwMDAwMDAwMTg4MDAwRkZDQzAwMDAwMDBDMUY4MDAwMDI4RQotOjEwMDI2MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGQzk3NwotOjEwMDI3MDAwMDAwMDAwMEMyOTgwMDAwMjAwMDAwMDBDMUY4MDAwMDIxQQotOjEwMDI4MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMDUyRQotOjEwMDI5MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGQzM0RAotOjEwMDJBMDAwMDAwMDAwMDgwMjI0MDA0QTAwMDAwMDE4MDAwNDAwMDBCQQotOjEwMDJCMDAwMDAwMDAwMTg4MDAwMDAxQzAwMDAwMDE4ODAwMDAwMUVENAotOjEwMDJDMDAwMDAwMDAwMTg4MDAwMDA3ODAwMDAwMDE4ODAwMDAwQ0FCQwotOjEwMDJEMDAwMDAwMDAwMTg4MDAwMDBDOTAwMDAwMDE4ODAwMDAwMDAyNQotOjEwMDJFMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBERQotOjEwMDJGMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBDRQotOjEwMDMwMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDBCRAotOjEwMDMxMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAxMTU5NwotOjEwMDMyMDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwMDA5RAotOjEwMDMzMDAwMDAwMDAwMTg4MDAwMDAxNTAwMDAwMDE4ODAwMDAwMUI1RAotOjEwMDM0MDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwRTA5RAotOjEwMDM1MDAwMDAwMDAwMTg4MDAwMDAyRjAwMDAwMDE4ODAwMDAxMTUyOAotOjEwMDM2MDAwMDAwMDAwMTg4MDAwMDE0MDAwMDAwMDE4ODAwMDAxMEIxMAotOjEwMDM3MDAwMDAwMDAwMTg4MDAwMDE2NDAwMDAwMDE4ODAwMDAwNjE4NwotOjEwMDM4MDAwMDAwMDAwMTg4MDAwMDAwMDAwMDAwMDE4ODAwMDAwOURBMAotOjEwMDM5MDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDAwMDUwMDAwMDBBQwotOjEwMDNBMDAwMDAwMDAwMTg4MDAwRkZBMjAwMDAwMDEwOTFENDAwMDA5RgotOjEwMDNCMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFEQgotOjEwMDNDMDAwMDAwMDAwMDgyQTAwMDAwMjAwMDAwMDAwMDUwMDAwMDBGNAotOjEwMDNEMDAwMDAwMDAwMTg4MDAwRkY5QzAwMDAwMDEwOTFENDAwMDA3NQotOjEwMDNFMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFBQgotOjEwMDNGMDAwMDAwMDAwMDAyOTQyMDAwMDAwMDAwMDA4MkEwMDAwMDI1RQotOjEwMDQwMDAwMDAwMDAwMDAwNTAwMDAwMDAwMDAwMDE4ODAwMEZGOTVCQgotOjEwMDQxMDAwMDAwMDAwMTg4MDAwRkY5NDAwMDAwMDEwQjFCQ0IwMEE3QQotOjEwMDQyMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMDNEODAwMDBENgotOjEwMDQzMDAwMDAwMDAwMDAyQzNDMDAwMDAwMDAwMDEwOTFENDAwMDBERgotOjEwMDQ0MDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMDAwMkEzMgotOjEwMDQ1MDAwMDAwMDAwMTg4MDAwMDBEOTAwMDAwMDEwMkM2MjAxQkFEMgotOjEwMDQ2MDAwMDAwMDAwMTg4MDAwMDAwNjAwMDAwMDA4MkM4MDAxMEQyQwotOjEwMDQ3MDAwMDAwMDAwMDgyRDAwMDAwOTAwMDAwMDEwOTFENDAwMDBDOQotOjEwMDQ4MDAwMDAwMDAwMDgyRDgwMDEwNzAwMDAwMDE4ODAwMDAwMzdFMAotOjEwMDQ5MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDBDMUY4MDAwMDBGQwotOjEwMDRBMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMkFERjAwMDBDNAotOjEwMDRCMDAwMDAwMDAwMDgyQTAwMDAwNjAwMDAwMDA4MDUwMDU1NTU0RAotOjEwMDRDMDAwMDAwMDAwMTg4MDAwRkY3RTAwMDAwMDEwOTFENDAwMDBBMgotOjEwMDREMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFCQQotOjEwMDRFMDAwMDAwMDAwMDgyQTAwMDAwQjAwMDAwMDAwMDUwMDAwMDBDQQotOjEwMDRGMDAwMDAwMDAwMTg4MDAwRkY3ODAwMDAwMDAwMDIwMjAwMDBFOQotOjEwMDUwMDAwMDAwMDAwMDAwMjlBMDAwMDAwMDAwMDAwMDYwQzJDMDAxMQotOjEwMDUxMDAwMDAwMDAwMDRDNjBDMzQwMDAwMDAwMDEwMDAxRjAwMDBBMgotOjEwMDUyMDAwMDAwMDAwMTBCMTk2MTgwQzAwMDAwMDA4MDY5NjAwMDRBOAotOjEwMDUzMDAwMDAwMDAwMDkwNjhERkZGQzAwMDAwMDA0Q0QwNTFBMDAzNAotOjEwMDU0MDAwMDAwMDAwMDRDQzlBMTgwMDAwMDAwMDEwMjBENzAwMDAyMgotOjEwMDU1MDAwMDAwMDAwMEMyQjU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwRQotOjEwMDU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMjBENzAwMDA4NAotOjEwMDU3MDAwMDAwMDAwMDgwRjgwMDAwMTAwMDAwMDEwQjE4MDAxRjRBRAotOjEwMDU4MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkI1NjAwMDA2RgotOjEwMDU5MDAwMDAwMDAwMTgwMDA0MDAwMDAwMDAwMDAwMDY4MjAwMDBCNwotOjEwMDVBMDAwMDAwMDAwMTBCMThBMDAwODAwMDAwMDEwQjE4QzE0MDc5MAotOjEwMDVCMDAwMDAwMDAwMEIwNTBBRkZGRjAwMDAwMDEwQjE4QTAwMDNENQotOjEwMDVDMDAwMDAwMDAwMDA4NjBBMTgwMDAwMDAwMDEwOTE4QzAwMDA1NgotOjEwMDVEMDAwMDAwMDAwMDgyQTAwMDAwMTAwMDAwMDEwOTFENDAwMDA3MwotOjEwMDVFMDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDAwMDUwMjAwMDBERgotOjEwMDVGMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDE4MDAwQTAwMDA1QQotOjEwMDYwMDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDEwOTFERTAwMDBFMwotOjEwMDYxMDAwMDAwMDAwMTBCRUUxMDAwNTAwMDAwMDE4ODAwMEZGNEM0MwotOjEwMDYyMDAwMDAwMDAwMDEwNTYxMTQwMDAwMDAwMDEwOTE4QTAwMDIyMgotOjEwMDYzMDAwMDAwMDAwMDhCMEUxMDAwMTAwMDAwMDE4MDAwRDAwMDBGQgotOjEwMDY0MDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDEwOTFERTAwMDBBMwotOjEwMDY1MDAwMDAwMDAwMTBCRUUyMDAwNTAwMDAwMDE4ODAwMEZGNDQwQQotOjEwMDY2MDAwMDAwMDAwMDEwNTYyMTQwMDAwMDAwMDEwOTE4QTAwMDJFMQotOjEwMDY3MDAwMDAwMDAwMDhCMTYyMDAwMTAwMDAwMDE4MDAwRDAwMDAzOQotOjEwMDY4MDAwMDAwMDAwMTBCMUEwQjAxMzAwMDAwMDBCMkZERjAwMDIyQgotOjEwMDY5MDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDA4MkM4MDAwMDA1QQotOjEwMDZBMDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDEwOTFENDAwMDBBMAotOjEwMDZCMDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMEZGREMwRgotOjEwMDZDMDAwMDAwMDAwMDgyRDgwMDExQzAwMDAwMDEwMDAxRjAwMDAyOQotOjEwMDZEMDAwMDAwMDAwMTg4MDAwRkZFNjAwMDAwMDBGNDc2MDAwMDhERgotOjEwMDZFMDAwMDAwMDAwMEYwNjBFMDAwMTAwMDAwMDAwMEY1ODAwMDA3RgotOjEwMDZGMDAwMDAwMDAwMDAwQTY0MDAwMDAwMDAwMDAwMEFFNTAwMDA5RAotOjEwMDcwMDAwMDAwMDAwMDkwQjY2RkZGRjAwMDAwMDAwMEQ2MTAwMDAwMwotOjEwMDcxMDAwMDAwMDAwMTg4MDAwMDAxMzAwMDAwMDBGNDc2MDAwMDg3MAotOjEwMDcyMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDA4MkM4MDAwMDBGQQotOjEwMDczMDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDEwOTFENDAwMDAwRgotOjEwMDc0MDAwMDAwMDAwMDgyRDgwMDExQzAwMDAwMDBGMDYwRTAwMDFCMwotOjEwMDc1MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDAwMEY1ODAwMDAwMwotOjEwMDc2MDAwMDAwMDAwMTg4MDAwRkZENDAwMDAwMDAwMEE2NDAwMDBCMAotOjEwMDc3MDAwMDAwMDAwMDAwQUU1MDAwMDAwMDAwMDA5MEI2NkZGRkYxMgotOjEwMDc4MDAwMDAwMDAwMDAwRDYxMDAwMDAwMDAwMDAwMDI2MjAwMDA5NwotOjEwMDc5MDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMzEwNDAwMDAwOQotOjEwMDdBMDAwMDAwMDAwMDAzMDlBMDAwMDAwMDAwMDA5MDU2MDAwMEYwMgotOjEwMDdCMDAwMDAwMDAwMTBCMThBMDAwQTAwMDAwMDAwMDU2MzRDMDAzMAotOjEwMDdDMDAwMDAwMDAwMDgwNTBBMDAxMjAwMDAwMDEwQjk2MjE0MDNCRQotOjEwMDdEMDAwMDAwMDAwMDAwMzAwMDAwMDAwMDAwMDE4ODAwMDAwMDU3OQotOjEwMDdFMDAwMDAwMDAwMTg4MDAwRkYxMTAwMDAwMDEwQjYwNjE0MDM3RQotOjEwMDdGMDAwMDAwMDAwMDgwMzA2MDAwMTAwMDAwMDE4ODAwMEZGMTczOQotOjEwMDgwMDAwMDAwMDAwMTg4MDAwRkY5RjAwMDAwMDBDMjk4MDAwMDFGQwotOjEwMDgxMDAwMDAwMDAwMEMyOTUyMDAwMTAwMDAwMDBDMjk1MjAwMDBDOQotOjEwMDgyMDAwMDAwMDAwMDgwMjAwMDAwRTAwMDAwMDA4MDI4MDAwMUEwQwotOjEwMDgzMDAwMDAwMDAwMTBCMUM0MEEwMjAwMDAwMDA4MDIwMDAwMDMxQQotOjEwMDg0MDAwMDAwMDAwMDgyMjAwMDAwMTAwMDAwMDBDMUY4MDAwMDFEMQotOjEwMDg1MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDAwMkEwMDA4MDA1RAotOjEwMDg2MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZGMDkzMQotOjEwMDg3MDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDEwOTFENDAwMDBFOAotOjEwMDg4MDAwMDAwMDAwMDgyQTAwMDAwMTAwMDAwMDAwMkMyMDAwMDBFOQotOjEwMDg5MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkM4MDAwMDAyRgotOjEwMDhBMDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDA4MkQ4MDAxMUM0MQotOjEwMDhCMDAwMDAwMDAwMTg4MDAwRkZBNzAwMDAwMDA4MkM4MDAwMDY0MAotOjEwMDhDMDAwMDAwMDAwMDgyRDAwMDAwNjAwMDAwMDAwMzA4MDAwMDAzRAotOjEwMDhEMDAwMDAwMDAwMDAzMTAwMDAwMDAwMDAwMDA4MkQ4MDAwMDYyQwotOjEwMDhFMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFBNgotOjEwMDhGMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMkFERjAwMDA3MAotOjEwMDkwMDAwMDAwMDAwMDgyQTAwMDAxMDAwMDAwMDAwMDUwMDAwMDBBMAotOjEwMDkxMDAwMDAwMDAwMTg4MDAwRkVGNDAwMDAwMDEwOTFBMEIwMDk1MwotOjEwMDkyMDAwMDAwMDAwMDgyQzgwMDEwRDAwMDAwMDA4MkQwMDAwMDlDNwotOjEwMDkzMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkQ4MDAxMDc4NQotOjEwMDk0MDAwMDAwMDAwMTg4MDAwRkZBMDAwMDAwMDE4ODAwMDAwMTBDOAotOjEwMDk1MDAwMDAwMDAwMDhBQzAwMDAwMTAwMDAwMDE4ODAwMDAwMEIzRgotOjEwMDk2MDAwMDAwMDAwMDAwMzgwQjAwMDAwMDAwMDBCMkZERjAwMDIzOQotOjEwMDk3MDAwMDAwMDAwMDAyQzAwNDAwMDAwMDAwMDEwOTFENDAwMDA5NgotOjEwMDk4MDAwMDAwMDAwMDgwNjAwNTU1NTAwMDAwMDE4ODAwMEZGODI5NgotOjEwMDk5MDAwMDAwMDAwMTg4MDAwMDAzMTAwMDAwMDE4ODAwMDAwMDZGMAotOjEwMDlBMDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMkMwMDBFMDBGMgotOjEwMDlCMDAwMDAwMDAwMDgyQTAwMDAwNzAwMDAwMDA4MDUwMDU1NTU0NwotOjEwMDlDMDAwMDAwMDAwMTg4MDAwRkVERTAwMDAwMDAwMDY4MjAwMDAyQgotOjEwMDlEMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFCNQotOjEwMDlFMDAwMDAwMDAwMTAwQ0U3MDAwNzAwMDAwMDA5MDU2MkZGRkY4RgotOjEwMDlGMDAwMDAwMDAwMTBCQTZDMTQwNTAwMDAwMDAwMkFERjAwMDA5RgotOjEwMEEwMDAwMDAwMDAwMDAyMTAwMDAwMDAwMDAwMDA4MkEwMDAwMDU4RQotOjEwMEExMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MkM4MDAxMENBMAotOjEwMEEyMDAwMDAwMDAwMDgyRDAwMDAwODAwMDAwMDBDMzE2MjAwMThEMgotOjEwMEEzMDAwMDAwMDAwMDgyRDgwMDAwMTAwMDAwMDE4ODAwMEZGNzZGMwotOjEwMEE0MDAwMDAwMDAwMTgwMDBEMDAwMDAwMDAwMDEwQjFBMEIwMEU2MgotOjEwMEE1MDAwMDAwMDAwMEIyRkRGMDAwMjAwMDAwMDAwMDNEODAwMDBBMAotOjEwMEE2MDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDEwOTFENDAwMDBDNQotOjEwMEE3MDAwMDAwMDAwMTg4MDAwMDAxNTAwMDAwMDEwMkM2MjAwMDIyOQotOjEwMEE4MDAwMDAwMDAwMTg4MDAwMDAwQzAwMDAwMDBCMkZERjAwMDJBNwotOjEwMEE5MDAwMDAwMDAwMDAyQzA3MDAwMDAwMDAwMDBDMUY4MDAwMDE3NwotOjEwMEFBMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDA4MDUwMEZGRkZCQwotOjEwMEFCMDAwMDAwMDAwMTg4MDAwRkVDMDAwMDAwMDA4MkM4MDAxMEQxRQotOjEwMEFDMDAwMDAwMDAwMDgyRDAwMDAwOTAwMDAwMDEwOTFENDAwMDA3MwotOjEwMEFEMDAwMDAwMDAwMDgyRDgwMDEwNzAwMDAwMDE4ODAwMEZGNkQ1NQotOjEwMEFFMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDBDMUY4MDAwMDFBNAotOjEwMEFGMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDAwMkFERjAwMDA2RQotOjEwMEIwMDAwMDAwMDAwMDgyQTAwMDAwQTAwMDAwMDAwMDUwMDAwMDBBNAotOjEwMEIxMDAwMDAwMDAwMTg4MDAwRkVCNDAwMDAwMDAwMDY4MjAwMDAwMwotOjEwMEIyMDAwMDAwMDAwMDgyQzgwMDEwQzAwMDAwMDA4MkQwMDAwMDhDNwotOjEwMEIzMDAwMDAwMDAwMDgyRDgwMDEzNDAwMDAwMDAwMDAwMDAwMDBDQgotOjEwMEI0MDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDA4MkM4MDAxNDAyMQotOjEwMEI1MDAwMDAwMDAwMDgyRDAwMDAzQzAwMDAwMDA4MkQ4MDAxMUM1MgotOjEwMEI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDAwNgotOjEwMEI3MDAwMDAwMDAwMDgyQzgwMDA4MDAwMDAwMDA4MkQwMDAwMDAwQwotOjEwMEI4MDAwMDAwMDAwMDgyRDgwMDEwNTAwMDAwMDEwQkVFMjAwMDVGNQotOjEwMEI5MDAwMDAwMDAwMTg4MDAwRkU5RDAwMDAwMDAxMDU2MjE0MDBBNgotOjEwMEJBMDAwMDAwMDAwMTA5MThBMDAwMjAwMDAwMDA4QjE2MjAwMDFGQwotOjEwMEJCMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDE4MDAwRDAwMDA5MQotOjEwMEJDMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMEFBQUE0RQotOjEwMEJEMDAwMDAwMDAwMTg4MDAwRkYzOTAwMDAwMDBDMjk4MDAwMDE4RgotOjEwMEJFMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDA4MkEwMDAwMDkxRQotOjEwMEJGMDAwMDAwMDAwMDgwNTAwQUFBQTAwMDAwMDE4ODAwMEZFOTc2NwotOjEwMEMwMDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTVCNwotOjEwMEMxMDAwMDAwMDAwMTg4MDAwRkYzMTAwMDAwMDEwOTFBMDNDMDI4RAotOjEwMEMyMDAwMDAwMDAwMTBCMUU2NjIwNzAwMDAwMDBCMkZERjAwMDI5OQotOjEwMEMzMDAwMDAwMDAwMDAyQzMxMDAwMDAwMDAwMDA5MkNCMTAwN0ZGMgotOjEwMEM0MDAwMDAwMDAwMDgyQ0Q5MDAwMDAwMDAwMDA4MkQwMDAwMDA2MgotOjEwMEM1MDAwMDAwMDAwMDgyRDgwMDEwRDAwMDAwMDEwQjFBODAwMDY2MgotOjEwMEM2MDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDAwMkMyMDAwMDBBOQotOjEwMEM3MDAwMDAwMDAwMDAyQ0E3MDAwMDAwMDAwMDA4MkQwMDAwMTA1QwotOjEwMEM4MDAwMDAwMDAwMDgyRDgwMDEwODAwMDAwMDE4ODAwMEZGMkNFMwotOjEwMEM5MDAwMDAwMDAwMTBCMUE2MDAxMDAwMDAwMDEwMDAxRjAwMDBBRQotOjEwMENBMDAwMDAwMDAwMEYwRjMwMDAwNzAwMDAwMDAwMEE2MDAwMDA4NQotOjEwMENCMDAwMDAwMDAwMDAwQUUxMDAwMDAwMDAwMDBGNEI2MjAwMDg4NQotOjEwMENDMDAwMDAwMDAwMDkwQjE2MDBGRjAwMDAwMDAwMEQ2MjAwMDA4QwotOjEwMENEMDAwMDAwMDAwMDkwRDFBMDBGRjAwMDAwMDEwMDczMDAwMDM5QgotOjEwMENFMDAwMDAwMDAwMEMwRDFBMDAwODAwMDAwMDBDMEIxNjAwMDg5NAotOjEwMENGMDAwMDAwMDAwMEY0Q0UzMDAxODAwMDAwMDAwMEM5OTJDMDBDRAotOjEwMEQwMDAwMDAwMDAwMDRDQzk5MzQwMDAwMDAwMDA4MEY4MDAwMDBBRgotOjEwMEQxMDAwMDAwMDAwMEMyOTgwMDAwMTAwMDAwMDAwMzMzMTAwMDBCOQotOjEwMEQyMDAwMDAwMDAwMDgyMjAwMDAxNjAwMDAwMDAwMkFERjAwMDA3QQotOjEwMEQzMDAwMDAwMDAwMDgyQTAwMDAwQzAwMDAwMDEwMDA5RjAwMDBDNgotOjEwMEQ0MDAwMDAwMDAwMDAwRjIwMDAwMDAwMDAwMDBDMUY4MDAwMDFDOAotOjEwMEQ1MDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZFNkJEQgotOjEwMEQ2MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMEFBQUFBQwotOjEwMEQ3MDAwMDAwMDAwMTg4MDAwRkYwNTAwMDAwMDBGNDcyMjAwMDg1NwotOjEwMEQ4MDAwMDAwMDAwMDkwNzBFMDAwRjAwMDAwMDA4MDcwRTAwMDgxMQotOjEwMEQ5MDAwMDAwMDAwMDgwMjgwMDAwMTAwMDAwMDA3MDI4NTFDMDAxRQotOjEwMERBMDAwMDAwMDAwMDg4Mjg1MDAwMTAwMDAwMDAwMDI4NTRDMDA2MAotOjEwMERCMDAwMDAwMDAwMDc0Mjg1MUMwMDAwMDAwMDAzQzNBQTUyMDA4NwotOjEwMERDMDAwMDAwMDAwMDAwM0IxMEUwMDAwMDAwMDA3NEIwNzFDMDBFQwotOjEwMEREMDAwMDAwMDAwMEYwRjMwMDAwNzAwMDAwMDBGMEE5NjAwMDMwQwotOjEwMERFMDAwMDAwMDAwMDAwQTk1NUMwMDAwMDAwMDAwNEEwMDVBMDA2NAotOjEwMERGMDAwMDAwMDAwMDAwQzk2MEEwMDAwMDAwMDA5MEM5OUZGRkY5QgotOjEwMEUwMDAwMDAwMDAwMDgwRDAwRkZGRjAwMDAwMDEwQjE5NjMyMDI0NAotOjEwMEUxMDAwMDAwMDAwMDgwRjgwMDAwNTAwMDAwMDEwQjFBODAwMDhDNQotOjEwMEUyMDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDBCMkZERjAwMDIxOAotOjEwMEUzMDAwMDAwMDAwMDAyQzIwMDAwMDAwMDAwMDAwMkNBNzAwMDA5MwotOjEwMEU0MDAwMDAwMDAwMDgyRDAwMDAxMDAwMDAwMDA4MkQ4MDAxMDg5RgotOjEwMEU1MDAwMDAwMDAwMTg4MDAwRkVGMzAwMDAwMDBDMjk4MDAwMDE1MwotOjEwMEU2MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDMUY4MDAwMDFBNwotOjEwMEU3MDAwMDAwMDAwMDAyQURGMDAwMDAwMDAwMDA4MkEwMDAwMEQyQQotOjEwMEU4MDAwMDAwMDAwMDgwNTAwQUFBQTAwMDAwMDE4ODAwMEZFNDUyNgotOjEwMEU5MDAwMDAwMDAwMTA5MUQ0MDAwMDAwMDAwMDA4MDYwMDU1NTUyNQotOjEwMEVBMDAwMDAwMDAwMTg4MDAwRkVERjAwMDAwMDBDMjk4MDAwMDExNwotOjEwMEVCMDAwMDAwMDAwMEMxRjgwMDAwMTAwMDAwMDA4MkEwMDAwMDc0RAotOjEwMEVDMDAwMDAwMDAwMDgwNTAwNTU1NTAwMDAwMDE4ODAwMEZFM0Q5OAotOjEwMEVEMDAwMDAwMDAwMTBCMTgwMDAwNDAwMDAwMDFGMDMwMzAzMDBBNQotOjEwMEVFMDAwMDAwMDAwMDgwNTAwMDBGRjAwMDAwMDE4MDAwMjAwMDBEQwotOjEwMEVGMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDEwQjFENDAwMDAzMwotOjEwMEYwMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDEwMjA1MzAwMDBERgotOjEwMEYxMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDE1MwotOjEwMEYyMDAwMDAwMDAwMDAyRjgwQUEwMDAwMDAwMDBDMjk4MDAwMDFCMgotOjEwMEYzMDAwMDAwMDAwMDgwMjU0MDAwRjAwMDAwMDAwMkM0MDAwMDBEOAotOjEwMEY0MDAwMDAwMDAwMDkyOTUyMDAzRjAwMDAwMDE4MDAwNDAwMDBDMgotOjEwMEY1MDAwMDAwMDAwMTg4MDAwMDAxMDAwMDAwMDE4ODAwMDAwMTE0MAotOjEwMEY2MDAwMDAwMDAwMTg4MDAwMDA0QTAwMDAwMDE4ODAwMDAxMjhERQotOjEwMEY3MDAwMDAwMDAwMTg4MDAwMDEyNzAwMDAwMDE4ODAwMDAxMjZGMgotOjEwMEY4MDAwMDAwMDAwMTg4MDAwMDEyNjAwMDAwMDE4ODAwMDAwMDAwQQotOjEwMEY5MDAwMDAwMDAwMTg4MDAwMDEzRjAwMDAwMDE4ODAwMDAxMjJCRQotOjEwMEZBMDAwMDAwMDAwMTg4MDAwMDAwQjAwMDAwMDE4ODAwMDAxNDVDMAotOjEwMEZCMDAwMDAwMDAwMTg4MDAwMDE5QTAwMDAwMDE4ODAwMDAwN0JFQgotOjEwMEZDMDAwMDAwMDAwMTg4MDAwMDBGOTAwMDAwMDE4ODAwMDAxMDlFRQotOjEwMEZEMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDE4ODAwMEZGRTQ2QwotOjEwMEZFMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDBDMjk4MDAwMDAyMgotOjEwMEZGMDAwMDAwMDAwMTg4MDAwRkZFMTAwMDAwMDAwMkEwMDAwMDA0RgotOjEwMTAwMDAwMDAwMDAwMTg4MDAwRkZERjAwMDAwMDAwMDM4MjAwMDBFNQotOjEwMTAxMDAwMDAwMDAwMTg4MDAwRkZEQTAwMDAwMDAxMEMxNjE0MDAyOAotOjEwMTAyMDAwMDAwMDAwMDA4QzE4MTQwMDAwMDAwMDEwOTE5ODAwMDNDQwotOjEwMTAzMDAwMDAwMDAwMDgwQzk2MDAwMjAwMDAwMDEwQjE4MDAwMDNDMAotOjEwMTA0MDAwMDAwMDAwMDgwQzk2MDAwMTAwMDAwMDAwMEMwMDAwMDBFOQotOjEwMTA1MDAwMDAwMDAwMDAwRDE5MDAwMDAwMDAwMDEwMjA1NjAwMDBFNAotOjEwMTA2MDAwMDAwMDAwMEMyQkQ3MDAwMTAwMDAwMDA4MEY4MDAwMDFEOQotOjEwMTA3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAxRjAwMDA0MQotOjEwMTA4MDAwMDAwMDAwMEM2QkQ3MDAwMTAwMDAwMDEwMDExMzAxRjFGQgotOjEwMTA5MDAwMDAwMDAwMTgwMDA3MDAwMDAwMDAwMDAwMDUwMjAwMDAyQQotOjEwMTBBMDAwMDAwMDAwMTA5MTk2MzQyMTAwMDAwMDEwMjA1RjAwMDAyNQotOjEwMTBCMDAwMDAwMDAwMDAyQzFFMDAwMDAwMDAwMDA4MkM4MDAwMDYyQwotOjEwMTBDMDAwMDAwMDAwMDgyRDAwMDAwNjAwMDAwMDA4MkQ4MDAxMDIyRAotOjEwMTBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDA5MQotOjEwMTBFMDAwMDAwMDAwMDAwRDYxMDAwMDAwMDAwMDE4MDAwQTAwMDA3MAotOjEwMTBGMDAwMDAwMDAwMDAwNTAyMDAwMDAwMDAwMDEwOTE5NjM0MTY2OAotOjEwMTEwMDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDAwMDlEODAwMDA2RgotOjEwMTExMDAwMDAwMDAwMDAyQzFFMDAwMDAwMDAwMDA4MkM4MDAxMEVDMgotOjEwMTEyMDAwMDAwMDAwMDgyRDAwMDAwQTAwMDAwMDA4MkQ4MDAxMDJDOAotOjEwMTEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDAzMAotOjEwMTE0MDAwMDAwMDAwMDAwRDYyMDAwMDAwMDAwMDAwMkMxMzAwMDBGMQotOjEwMTE1MDAwMDAwMDAwMTgwMDBBMDAwMDAwMDAwMDAwMDUwMjAwMDA2NgotOjEwMTE2MDAwMDAwMDAwMTA5MTk2MzQwOTAwMDAwMDEwMjA1RjAwMDA3QwotOjEwMTE3MDAwMDAwMDAwMDAyQzFFMDAwMDAwMDAwMDA4MkM4MDAwMDY2QgotOjEwMTE4MDAwMDAwMDAwMDgyRDAwMDA2QTAwMDAwMDA4MkQ4MDAxMDIwOAotOjEwMTE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDBEMAotOjEwMTFBMDAwMDAwMDAwMDAwRDdBMDAwMDAwMDAwMDE4MDAwQTAwMDA5NgotOjEwMTFCMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDAwMEQ2MTAwMDA5NwotOjEwMTFDMDAwMDAwMDAwMDAwMzYyMDAwMDAwMDAwMDEwMjM0MjAwREI2QQotOjEwMTFEMDAwMDAwMDAwMDAwMjYzOEMwMDAwMDAwMDAwMjY0NjAwMDBCMgotOjEwMTFFMDAwMDAwMDAwMDgwMjA0MDAxMjAwMDAwMDEwQjkwNjA4MkVEQQotOjEwMTFGMDAwMDAwMDAwMDAwRjU4MDAwMDAwMDAwMDAwMEE2NDAwMDAxQQotOjEwMTIwMDAwMDAwMDAwMDAwQUU1MDAwMDAwMDAwMDA5MEI2NkZGRkY3NwotOjEwMTIxMDAwMDAwMDAwMDAwQzAwMDAwMDAwMDAwMDAwMEI4MDAwMDAzNwotOjEwMTIyMDAwMDAwMDAwMDgwQ0M2MDAxMjAwMDAwMDE4ODAwMEZGQ0U2RAotOjEwMTIzMDAwMDAwMDAwMTAyMDU2MDAwMDAwMDAwMDBDMkJENzAwMDExOQotOjEwMTI0MDAwMDAwMDAwMDgwRjgwMDAwMzAwMDAwMDAwMDAwMDAwMDAwNAotOjEwMTI1MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDExMAotOjEwMTI2MDAwMDAwMDAwMDgyNzExMDAxMjAwMDAwMDAwNjY5MDAwMDAzNgotOjEwMTI3MDAwMDAwMDAwMDhBMzFCMDAxMjAwMDAwMDEwQjE5ODAwMDYzNwotOjEwMTI4MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDFFMAotOjEwMTI5MDAwMDAwMDAwMTAyMDU2MDAwMDAwMDAwMDBDMkJENzAwMDFCOQotOjEwMTJBMDAwMDAwMDAwMDgwRjgwMDAwNDAwMDAwMDA4MjIwMDAwMDM3NgotOjEwMTJCMDAwMDAwMDAwMDgyQzgwMDAwQzAwMDAwMDA4MkQwMDAwMEMyRAotOjEwMTJDMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDFBMAotOjEwMTJEMDAwMDAwMDAwMDAyNTk2MDAwMDAwMDAwMDBDMjk4MDAwMDA5RQotOjEwMTJFMDAwMDAwMDAwMDAwNjY2MDAwMDAwMDAwMDAwODY2MTE4MDA5MwotOjEwMTJGMDAwMDAwMDAwMDkwMjYwMDAwRjAwMDAwMDBGMDIwNDAwMDI1RAotOjEwMTMwMDAwMDAwMDAwMTBCNjBDMDgwNTAwMDAwMDBDMUZCRjAwMDAxNAotOjEwMTMxMDAwMDAwMDAwMTAyODY2MDAwMzAwMDAwMDA4MDc4RjAwMDE4RAotOjEwMTMyMDAwMDAwMDAwMEMzMzY2MDAxMDAwMDAwMDAwMzIxNDAwMDBDMgotOjEwMTMzMDAwMDAwMDAwMDAzMjk1MDAwMDAwMDAwMDA1NzM2NjJDMDBEQwotOjEwMTM0MDAwMDAwMDAwMDAzMUUzMkUwMDAwMDAwMDA4MkQ4MDAwMTA5NgotOjEwMTM1MDAwMDAwMDAwMTg4MDAwRkY3NTAwMDAwMDAwMjMwMDAwMDA1RQotOjEwMTM2MDAwMDAwMDAwMDkyNUU2RkZGRjAwMDAwMDA4MjIwMDAwMEIzNgotOjEwMTM3MDAwMDAwMDAwMEM2OTUyMDAwMDAwMDAwMDBDMjk4MDAwMDBGMQotOjEwMTM4MDAwMDAwMDAwMTAyODY2MDA4ODAwMDAwMDE4ODAwMEZGNkUzMgotOjEwMTM5MDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDA4MkM4MDAwNDAyRgotOjEwMTNBMDAwMDAwMDAwMDgyRDAwMDAyMDAwMDAwMDA4MkQ4MDAxMUMxNgotOjEwMTNCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDBBRQotOjEwMTNDMDAwMDAwMDAwMEY0MkVBMDAxMDAwMDAwMDEwMDA0RjAwMDQ2RgotOjEwMTNEMDAwMDAwMDAwMTBCNzQ2OTIwMDAwMDAwMDA4MDI0OTAwMTIwOQotOjEwMTNFMDAwMDAwMDAwMTBCNTg0MEEwMDAwMDAwMDAwMEQ2MTAwMDAzQwotOjEwMTNGMDAwMDAwMDAwMTBCQTY2MzQ2QTAwMDAwMDA4ODMwNTAwMTI3RAotOjEwMTQwMDAwMDAwMDAwMTAwMDRGMDAwMjAwMDAwMDAwMDM0OTAwMDAyRgotOjEwMTQxMDAwMDAwMDAwMDE4MzA2OEMwMDAwMDAwMDAwODNDNjBDMDA2MQotOjEwMTQyMDAwMDAwMDAwMTBCMTg3MDAxMTAwMDAwMDAwMEI2RTAwMDBFQQotOjEwMTQzMDAwMDAwMDAwMTBCRUU5MDAwNTAwMDAwMDE4ODAwMEZGNTUwNAotOjEwMTQ0MDAwMDAwMDAwMDEwNTY5MTQwMDAwMDAwMDEwOTE4QTAwMDJFQwotOjEwMTQ1MDAwMDAwMDAwMDhCNEU5MDAwMTAwMDAwMDEwQjFFOTJDNURCMwotOjEwMTQ2MDAwMDAwMDAwMDA4NjY5MkMwMDAwMDAwMDAwMDIwMDAwMDA1RgotOjEwMTQ3MDAwMDAwMDAwMDkwMkVBRkZGRjAwMDAwMDEwMDAwQzAwMDI1QgotOjEwMTQ4MDAwMDAwMDAwMDAwMjA0MEEwMDAwMDAwMDBGNDYwQzAwMDFFQQotOjEwMTQ5MDAwMDAwMDAwMEYwMjg1MDAwMTAwMDAwMDEwOTE4QzAxRkM4QgotOjEwMTRBMDAwMDAwMDAwMTBCNzA0MEU1NDAwMDAwMDAwMEY0MDAwMDBDMAotOjEwMTRCMDAwMDAwMDAwMDAwRDYxMDAwMDAwMDAwMDAwMEE2NDAwMDA1MAotOjEwMTRDMDAwMDAwMDAwMDAwQUU1MDAwMDAwMDAwMDA5MEI2NkZGRkZCNQotOjEwMTREMDAwMDAwMDAwMDAwQzAwMDAwMDAwMDAwMDAwMEI4MDAwMDA3NQotOjEwMTRFMDAwMDAwMDAwMDgwQzg2MDAxMjAwMDAwMDEwMjA1NjAwMDBDQQotOjEwMTRGMDAwMDAwMDAwMEMyQkQ3MDAwMTAwMDAwMDA4MEY4MDAwMDM0MwotOjEwMTUwMDAwMDAwMDAwMEMyOTUyMDAwMDAwMDAwMDEwMDAxRjAwMDAyNQotOjEwMTUxMDAwMDAwMDAwMEM2QkQ3MDAwMTAwMDAwMDA4MjcxMTAwMTIyQQotOjEwMTUyMDAwMDAwMDAwMDA2NjkwMDAwMDAwMDAwMDAwMjY0NjAwMDA1OQotOjEwMTUzMDAwMDAwMDAwMDAyMzA2MDAwMDAwMDAwMDEwQjE5ODAwMDkyMAotOjEwMTU0MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDExRAotOjEwMTU1MDAwMDAwMDAwMTAyMDU2MDAwMDAwMDAwMDBDMkJENzAwMDFGNgotOjEwMTU2MDAwMDAwMDAwMDgwRjgwMDAwNDAwMDAwMDAwMDAwMDAwMDBFMAotOjEwMTU3MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDFFRAotOjEwMTU4MDAwMDAwMDAwMDAzMjE0MDAwMDAwMDAwMDAwMzI5NTAwMDA0RQotOjEwMTU5MDAwMDAwMDAwMDAzMUUzMkUwMDAwMDAwMDA1NzM2NjJDMDBGRgotOjEwMTVBMDAwMDAwMDAwMDAyNTk2MDAwMDAwMDAwMDEwQjE4NzAwMjExNwotOjEwMTVCMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDBGMEY2QjAwMDdFNgotOjEwMTVDMDAwMDAwMDAwMDAwRDY5MDAwMDAwMDAwMDAwMEE2QzAwMDAyRgotOjEwMTVEMDAwMDAwMDAwMDAwQUVEMDAwMDAwMDAwMDAwMEI2RTAwMDA5QgotOjEwMTVFMDAwMDAwMDAwMDAwQjgwMDAwMDAwMDAwMDAwMEM4NzAwMDBERAotOjEwMTVGMDAwMDAwMDAwMTg4MDAwRkYxRTAwMDAwMDAxMEMxNjE0MDBGRgotOjEwMTYwMDAwMDAwMDAwMDA4QzE4MTQwMDAwMDAwMDA4MEM5NjAwMDE3NwotOjEwMTYxMDAwMDAwMDAwMTA5MTk4MDAwMjAwMDAwMDA4MEM5OTAwMDFFMQotOjEwMTYyMDAwMDAwMDAwMDAwRDE5MDAwMDAwMDAwMDAwMEMwMDAwMDA4OAotOjEwMTYzMDAwMDAwMDAwMTAyMDU2MDAwMDAwMDAwMDBDMkJENzAwMDExNQotOjEwMTY0MDAwMDAwMDAwMDgwRjgwMDAwMTAwMDAwMDEwMjA1MzAwMDA3RgotOjEwMTY1MDAwMDAwMDAwMEM2OTUyMDAwMTAwMDAwMDEwMDAxRjAwMDA5MwotOjEwMTY2MDAwMDAwMDAwMEM2QkQ3MDAwMTAwMDAwMDAwMjJDNThDMDBCOAotOjEwMTY3MDAwMDAwMDAwMDAyMzEyMDAwMDAwMDAwMDAwMjcxMTAwMDBGRAotOjEwMTY4MDAwMDAwMDAwMDAyNjkwMDAwMDAwMDAwMDEwQjgxNzBFMDNCNAotOjEwMTY5MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDE4ODAwMEZGRUIxMwotOjEwMTZBMDAwMDAwMDAwMDA4Mjk3MEUwMDAwMDAwMDAwQTMxMjBBMDA1NAotOjEwMTZCMDAwMDAwMDAwMDgyMjAwMDAxQTAwMDAwMDA4MkM4MDAwMEMyNgotOjEwMTZDMDAwMDAwMDAwMDgyRDAwMDAwQzAwMDAwMDA4MkQ4MDAwMTAxNAotOjEwMTZEMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDE4QwotOjEwMTZFMDAwMDAwMDAwMDAwRDZFMDAwMDAwMDAwMDAzRTdDRjM0MDA5MgotOjEwMTZGMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwOTFERTAwMDBCNgotOjEwMTcwMDAwMDAwMDAwMTBCMTg3MDAwNzAwMDAwMDAwMzYxNDAwMDA0MAotOjEwMTcxMDAwMDAwMDAwMDAzNjk1MDAwMDAwMDAwMDAwMzcxNjAwMDBCMQotOjEwMTcyMDAwMDAwMDAwMDgyQzgwMDA1MDAwMDAwMDA4MkQwMDAwMzA1MAotOjEwMTczMDAwMDAwMDAwMDgyRDgwMDAwQzAwMDAwMDE4ODAwMEZFRjg1QQotOjEwMTc0MDAwMDAwMDAwMDAyNjQ2MDAwMDAwMDAwMDAwMjMwMDAwMDAwQQotOjEwMTc1MDAwMDAwMDAwMDkyNUU2RkZGRjAwMDAwMDAwMEI2RTAwMDBGRQotOjEwMTc2MDAwMDAwMDAwMDNFN0NGMkMwMDAwMDAwMDA4MjIwMDAwMUI0RgotOjEwMTc3MDAwMDAwMDAwMEM2OTUyMDAwMDAwMDAwMDBDMjk4MDAwMDBFRAotOjEwMTc4MDAwMDAwMDAwMTg4MDAwRkVFRjAwMDAwMDAwMkEwMDAwMDBBQQotOjEwMTc5MDAwMDAwMDAwMTAwODY2MDAwNTAwMDAwMDAwMDY2NjAwMDA1QQotOjEwMTdBMDAwMDAwMDAwMDA4NjYxMTgwMDAwMDAwMDA5MDI2MDAwRjBERgotOjEwMTdCMDAwMDAwMDAwMTBCNjBDMDgwMjAwMDAwMDE4ODAwMEZFRThDRgotOjEwMTdDMDAwMDAwMDAwMDAwNjgyMDAwMDAwMDAwMDEwQjE4RjAwMDA0MQotOjEwMTdEMDAwMDAwMDAwMDg4NzhGMDAwMTAwMDAwMDBDNzM2NjAwMTBGNQotOjEwMTdFMDAwMDAwMDAwMDgyQzgwMDAxODAwMDAwMDA4MkQwMDAwMThFMAotOjEwMTdGMDAwMDAwMDAwMDgyRDgwMDAwMjAwMDAwMDBDNUZCRjAwMDAwOAotOjEwMTgwMDAwMDAwMDAwMTA5MURFMDAwMDAwMDAwMDE4MDAwRDAwMDAzNAotOjEwMTgxMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDEwMjg2NjAxRjUwQQotOjEwMTgyMDAwMDAwMDAwMDgyQzgwMDAwMzAwMDAwMDA4MkQwMDAwMDNDOQotOjEwMTgzMDAwMDAwMDAwMDkzMDYwRkZGMDAwMDAwMDA4MkQ4MDAwMDE2QQotOjEwMTg0MDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwOTFERTAwMDA2NAotOjEwMTg1MDAwMDAwMDAwMDgyQzgwMDAxQTAwMDAwMDA4MkQwMDAwMUE2QgotOjEwMTg2MDAwMDAwMDAwMDU3MzY2MDAwMDAwMDAwMDA4MkQ4MDAwMDJFMwotOjEwMTg3MDAwMDAwMDAwMDAzMTgwMDAwMDAwMDAwMDEwOTFERTAwMDAzOAotOjEwMTg4MDAwMDAwMDAwMDgyQzgwMDAwQzAwMDAwMDA4MkQwMDAwMEM1NwotOjEwMTg5MDAwMDAwMDAwMDgyRDgwMDAwNDAwMDAwMDE4ODAwMEZFQ0MyRAotOjEwMThBMDAwMDAwMDAwMTgwMDAyMDAwMDAwMDAwMDE4ODAwMEZFQ0FCRQotOjEwMThCMDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDEwMDAxRjAwMDBDRgotOjEwMThDMDAwMDAwMDAwMEM2QkQ3MDAwMTAwMDAwMDAwMEYwMDgwMDAzQQotOjEwMThEMDAwMDAwMDAwMDgwRjgwMDAwNzAwMDAwMDE4ODAwMDAwMUJCNwotOjEwMThFMDAwMDAwMDAwMDAyODBBMDAwMDAwMDAwMDAwMDUwMjAwMDBCRgotOjEwMThGMDAwMDAwMDAwMDgyMjAwMDAwOTAwMDAwMDAwMjkwMDAwMDA4QwotOjEwMTkwMDAwMDAwMDAwMEY2NTY4MDAxMDAwMDAwMDAzRjY2Qzk0MDBGMgotOjEwMTkxMDAwMDAwMDAwMTBCOTcyQTAwNDAwMDAwMDBDNzNFNzAwMTk2OQotOjEwMTkyMDAwMDAwMDAwMEMyMTQyMDAwNDAwMDAwMDAwM0NGODAwMDAxMAotOjEwMTkzMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwMjA1MzAwMDA2RgotOjEwMTk0MDAwMDAwMDAwMDgyMjAwMDAwODAwMDAwMDBDNjE0MjAwMDRCMgotOjEwMTk1MDAwMDAwMDAwMTgwMDBBMDAwMDAwMDAwMDAwMDUwMjAwMDA1RQotOjEwMTk2MDAwMDAwMDAwMEM2MTQyMDAwMDAwMDAwMDEwMDE0MjAwMDM3MgotOjEwMTk3MDAwMDAwMDAwMEMzM0U3MDAxRDAwMDAwMDBDNjE0MjAwMDI3MwotOjEwMTk4MDAwMDAwMDAwMTgwMDBBMDAwMDAwMDAwMDAwMkEwMDAwMDAwQgotOjEwMTk5MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDFDOQotOjEwMTlBMDAwMDAwMDAwMEYwRjQ3MDAwNzAwMDAwMDA4MEY4MDAwMDgyQwotOjEwMTlCMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwMDAxRjAwMDA0MwotOjEwMTlDMDAwMDAwMDAwMEM2QkQ3MDAwMTAwMDAwMDE4ODAwMEZFQTY4QwotOjEwMTlEMDAwMDAwMDAwMDAzMzUxMDAwMDAwMDAwMDAwMkEwMDAwMDA1OQotOjEwMTlFMDAwMDAwMDAwMTBCMUM2MDAyOTAwMDAwMDBGMEY1MDAwMDdEMgotOjEwMTlGMDAwMDAwMDAwMDAwQTYwMDAwMDAwMDAwMDAwMEFFMTAwMDA5MgotOjEwMUEwMDAwMDAwMDAwMEY0QjYyMDAwODAwMDAwMDA5MEIxNjAwRkZFOQotOjEwMUExMDAwMDAwMDAwMEY0QzYyMDAxMDAwMDAwMDAwMEQ2MjAwMDA4QQotOjEwMUEyMDAwMDAwMDAwMDkwRDFBMDBGRjAwMDAwMDEwMDc1MDAwMDMxRAotOjEwMUEzMDAwMDAwMDAwMEMwRDFBMDAwODAwMDAwMDBDMEIxNjAwMDgzNgotOjEwMUE0MDAwMDAwMDAwMDAwQ0M2MDAwMDAwMDAwMDAwMEI4MDAwMDAzOQotOjEwMUE1MDAwMDAwMDAwMDAwNjk4MDAwMDAwMDAwMDEwMjA1NjAwMDA2MgotOjEwMUE2MDAwMDAwMDAwMEMyQkQ3MDAwMTAwMDAwMDA4MEY4MDAwMDNDRAotOjEwMUE3MDAwMDAwMDAwMTAwNkMyMDAwNDAwMDAwMDBDMjkwMDAwMDI1MwotOjEwMUE4MDAwMDAwMDAwMTAyNjQyMDAwMjAwMDAwMDBDMjk1MjAwMDM1MgotOjEwMUE5MDAwMDAwMDAwMDgyMjAwMDAwMTAwMDAwMDEwMDAxRjAwMDBFQwotOjEwMUFBMDAwMDAwMDAwMEM2QkQ3MDAwMTAwMDAwMDAwMjMxQjAwMDBBOQotOjEwMUFCMDAwMDAwMDAwMDAyNzExMUEwMDAwMDAwMDAwNjY5MDAwMDBERQotOjEwMUFDMDAwMDAwMDAwMEMyOTUyMDAwMDAwMDAwMDEwQjE5NzMyMENGOQotOjEwMUFEMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDAwMDY5ODAwMDBCMwotOjEwMUFFMDAwMDAwMDAwMTAyMDUzMDAwMDAwMDAwMDBDMjk1MjAwMDNFOQotOjEwMUFGMDAwMDAwMDAwMDAyMkM1OEMwMDAwMDAwMDEwMDAxRjAwMDA0NAotOjEwMUIwMDAwMDAwMDAwMEM2QkQ3MDAwMTAwMDAwMDEwMjA1NjAwMDAwMAotOjEwMUIxMDAwMDAwMDAwMEMyQkQ3MDAwMTAwMDAwMDA4MEY4MDAwMDMxQwotOjEwMUIyMDAwMDAwMDAwMTg4MDAwRkZFRjAwMDAwMDEwQjFDODAwMTM5MwotOjEwMUIzMDAwMDAwMDAwMTBCMUM2MDAwMzAwMDAwMDBDMjk4MDAwMDA2NgotOjEwMUI0MDAwMDAwMDAwMTAyMDUzMDAwMDAwMDAwMDBDMjk1MjAwMDA4QgotOjEwMUI1MDAwMDAwMDAwMEMyOTUyMDAwMzAwMDAwMDEwMDZDMjAwMDIyMQotOjEwMUI2MDAwMDAwMDAwMEMyOTUyMDAwMjAwMDAwMDAwMjJDNThDMDA3OQotOjEwMUI3MDAwMDAwMDAwMDAyNzY1MDAwMDAwMDAwMDAwMjZFNDAwMDBDRgotOjEwMUI4MDAwMDAwMDAwMDgyMjAwMDAxNjAwMDAwMDEwQjFDNjAwMDM4QgotOjEwMUI5MDAwMDAwMDAwMDAyMzQ4MDAwMDAwMDAwMDEwQjE4MDAwMDU5NAotOjEwMUJBMDAwMDAwMDAwMDAyMzQ4MDAwMDAwMDAwMDBDMjk4MDAwMDAxNQotOjEwMUJCMDAwMDAwMDAwMEYwRjUwMDAwNzAwMDAwMDE4ODAwMDAwMTIwNgotOjEwMUJDMDAwMDAwMDAwMDgyMjAwMDAxNjAwMDAwMDBDMjk4MDAwMDAyMAotOjEwMUJEMDAwMDAwMDAwMDAzMDE0MDAwMDAwMDAwMDAwMzA5NTAwMDBGQwotOjEwMUJFMDAwMDAwMDAwMTAwNzUwMDAwMzAwMDAwMDA5MEIxNjAwRkY2MgotOjEwMUJGMDAwMDAwMDAwMDkwRDFBMDBGRjAwMDAwMDBGMzExNjAwMDg1OAotOjEwMUMwMDAwMDAwMDAwMDAzMTYyMzQwMDAwMDAwMDAzRjE2MjMwMDA4NwotOjEwMUMxMDAwMDAwMDAwMTAyMDVGMDAwMDAwMDAwMDAwMkM1MTAwMDBCOAotOjEwMUMyMDAwMDAwMDAwMDkyQ0QxMDA3RjAwMDAwMDA4MkNEOTAwMDAyMgotOjEwMUMzMDAwMDAwMDAwMDgyRDAwMDAwMDAwMDAwMDA4MkQ4MDAwMENBRQotOjEwMUM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwOTFERTAwMDAxNQotOjEwMUM1MDAwMDAwMDAwMTAwNUMyMDAwNTAwMDAwMDA4MEY4MDAwMDcwQQotOjEwMUM2MDAwMDAwMDAwMDAzMzAwMDAwMDAwMDAwMDEwMDAxRjAwMDAxMgotOjEwMUM3MDAwMDAwMDAwMEM2QkQ3MDAwMTAwMDAwMDE4ODAwMEZFNTAyRgotOjEwMUM4MDAwMDAwMDAwMDAyQTAwMDAwMDAwMDAwMDBGMEY1MDAwMDdCNQotOjEwMUM5MDAwMDAwMDAwMTBCMUM2MDAzMDAwMDAwMDBGNDc0MjAwMDhFRAotOjEwMUNBMDAwMDAwMDAwMDkwNzBFMDAwRjAwMDAwMDA4MDcwRTAwMDhFMgotOjEwMUNCMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDFBNgotOjEwMUNDMDAwMDAwMDAwMDgwOTAwMDAwMTAwMDAwMDA3MDkxMjFDMDBDNAotOjEwMUNEMDAwMDAwMDAwMDNDQkNBOTIwMDAwMDAwMDAwMEI5N0EyMDA5NgotOjEwMUNFMDAwMDAwMDAwMDc0MjE3MUMwMDAwMDAwMDAwMEIwNDAwMDA2OQotOjEwMUNGMDAwMDAwMDAwMEYwQTg0MDAwMzAwMDAwMDAwMEE5NTlDMDAwOQotOjEwMUQwMDAwMDAwMDAwMDA0QTAwOUEwMDAwMDAwMDA4ODIxMjAwMDE1MgotOjEwMUQxMDAwMDAwMDAwMDEwQzE3MDgwMDAwMDAwMDAwMEM5NzhDMDA2OAotOjEwMUQyMDAwMDAwMDAwMDAwMjE4MDAwMDAwMDAwMDA4MEQwMEZGRkY4NgotOjEwMUQzMDAwMDAwMDAwMDgwRjgwMDAwNjAwMDAwMDBDMjkwMDAwMDBEMQotOjEwMUQ0MDAwMDAwMDAwMTAwNkMyMDAwNDAwMDAwMDBDMjk1MjAwMDIyRQotOjEwMUQ1MDAwMDAwMDAwMTAyNjQyMDAwMjAwMDAwMDBDMjk1MjAwMDM3RgotOjEwMUQ2MDAwMDAwMDAwMDgyMjAwMDAwMTAwMDAwMDEwMDAxRjAwMDAxOQotOjEwMUQ3MDAwMDAwMDAwMEM2QkQ3MDAwMTAwMDAwMDEwQjE5NzMyMEQ3RAotOjEwMUQ4MDAwMDAwMDAwMDAyMzFCMDAwMDAwMDAwMDAwMjcxMTA4MDBENQotOjEwMUQ5MDAwMDAwMDAwMDA2NjkwMDAwMDAwMDAwMDBDMjk4MDAwMDA5OAotOjEwMURBMDAwMDAwMDAwMDAwMjE4MDAwMDAwMDAwMDEwMjA1MzAwMDA5NgotOjEwMURCMDAwMDAwMDAwMEMyOTUyMDAwMzAwMDAwMDAwMjJDNTM2MDA3QwotOjEwMURDMDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDE5NQotOjEwMUREMDAwMDAwMDAwMDgwRjgwMDAwNjAwMDAwMDE4ODAwMEZGRjJERAotOjEwMURFMDAwMDAwMDAwMDAyMzFCMDAwMDAwMDAwMDAwMjcxMTA4MDA3NQotOjEwMURGMDAwMDAwMDAwMDA2NjkwMDAwMDAwMDAwMDEwQjFDODAwMEI1OQotOjEwMUUwMDAwMDAwMDAwMEMyOTgwMDAwMDAwMDAwMDEwMjA1MzAwMDA5QQotOjEwMUUxMDAwMDAwMDAwMEMyOTUyMDAwMDAwMDAwMDBDMjk1MjAwMDNCMQotOjEwMUUyMDAwMDAwMDAwMTAwNkMyMDAwMjAwMDAwMDBDMjk1MjAwMDI0RgotOjEwMUUzMDAwMDAwMDAwMDAyMkM1OEMwMDAwMDAwMDAwMjc2NTAwMDBBMwotOjEwMUU0MDAwMDAwMDAwMDAyNkU0MDAwMDAwMDAwMDAwMjM0ODAwMDAxRAotOjEwMUU1MDAwMDAwMDAwMDgyMjAwMDAxNzAwMDAwMDBDMjk4MDAwMDA4QwotOjEwMUU2MDAwMDAwMDAwMTAwMDFGMDAwMDAwMDAwMDBDNkJENzAwMDFGNAotOjA4MUU3MDAwMDAwMDAwMTg4MDAwRkUxMUMzCi06MDAwMDAwMDFGRgotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyBmaXJtd2FyZSBkYXRhIGRlcml2ZWQgZnJvbSBwcm9wcmlldGFyeSB1bnB1Ymxpc2hlZAotICogc291cmNlIGNvZGUsIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMDkgQnJvYWRjb20gQ29ycG9yYXRpb24uCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIGZpcm13YXJlIGRhdGEKLSAqIGluIGhleGFkZWNpbWFsIG9yIGVxdWl2YWxlbnQgZm9ybWF0LCBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgaXMKLSAqIGFjY29tcGFueWluZyBpdC4KLSAqLwpkaWZmIC0tZ2l0IGEvZmlybXdhcmUvYm54MngtZTEtNS4yLjEzLjAuZncuaWhleCBiL2Zpcm13YXJlL2JueDJ4LWUxLTUuMi4xMy4wLmZ3LmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjUxZjQzNAotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2JueDJ4LWUxLTUuMi4xMy4wLmZ3LmloZXgKQEAgLTAsMCArMSwxMDE5MSBAQAorOjEwMDAwMDAwMDAwMDI4QjAwMDAwMDA2MDAwMDAwNjg4MDAwMDI5MThFOQorOjEwMDAxMDAwMDAwMDE2MTQwMDAwMkZBODAwMDAwMDk4MDAwMDQ1QzA0MgorOjEwMDAyMDAwMDAwMDczQzQwMDAwNDY2MDAwMDAwMENDMDAwMEJBMjg0NQorOjEwMDAzMDAwMDAwMDlBNzAwMDAwQkFGODAwMDAwMDk0MDAwMTU1NzBBQQorOjEwMDA0MDAwMDAwMDU3QkMwMDAxNTYwODAwMDAwMEI4MDAwMUFEQzgxMAorOjEwMDA1MDAwMDAwMENFMjAwMDAxQUU4ODAwMDAwMDA0MDAwMjdDQjA0OQorOjEwMDA2MDAwMDIwNDAwNDgwMDAwMDAwRjAyMDQwMDU0MDAwMDAwNDU5NAorOjEwMDA3MDAwMDIwNDAwNTgwMDAwMDA4NDAyMDQwMDVDMDAwMDAwMDYzNgorOjEwMDA4MDAwMDIwNDAwNzAwMDAwMDAwNDAyMDQwMDc4MDAwMDAwMDA3OAorOjEwMDA5MDAwMDIwNDAwN0MxMjE3MDAwMDAyMDQwMDgwMjIxNzAwMDBGNgorOjEwMDBBMDAwMDIwNDAwODQzMjE3MDAwMDA2MDQwMDg4MDAwMDAwMDVFNgorOjEwMDBCMDAwMDIwNDAwOUMxMjE1MDAwMDAyMDQwMEEwMjIxNTAwMDA5QQorOjEwMDBDMDAwMDIwNDAwQTQzMjE1MDAwMDA2MDQwMEE4MDAwMDAwMDQ4OQorOjEwMDBEMDAwMDIwNDAwQjgwMjEwMDAwMDAyMDQwMEJDMDAxMDAwMDA3RQorOjEwMDBFMDAwMDIwNDAwQzAxMDEwMDAwMDAyMDQwMEM0MjAxMDAwMDAzMAorOjEwMDBGMDAwMDIwNDAwQzgzMDEwMDAwMDA2MDQwMENDMDAwMDAwMDQxOAorOjEwMDEwMDAwMDIwNDAwREMwMDEwMDAwMDAyMDQwMEUwMTIxNDAwMDBGMQorOjEwMDExMDAwMDIwNDAwRTQyMjE0MDAwMDAyMDQwMEU4MzIxNDAwMDA4QgorOjEwMDEyMDAwMDYwNDAwRUMwMDAwMDAwNDAxMDQwMTI0MDAwMDAwMDBBQgorOjEwMDEzMDAwMDEwNDAxMjgwMDAwMDAwMDAxMDQwMTJDMDAwMDAwMDA1RgorOjEwMDE0MDAwMDEwNDAxMzAwMDAwMDAwMDAyMDQwMDA0MDAwMDAwRkY3MAorOjEwMDE1MDAwMDIwNDAwMDgwMDAwMDBGRjAyMDQwMDBDMDAwMDAwRkY4MQorOjEwMDE2MDAwMDIwNDAwMTAwMDAwMDBGRjAyMDQwMDE0MDAwMDAwRkY2MQorOjEwMDE3MDAwMDIwNDAwMTgwMDAwMDBGRjAyMDQwMDFDMDAwMDAwRkY0MQorOjEwMDE4MDAwMDIwNDAwMjAwMDAwMDBGRjAyMDQwMDI0MDAwMDAwM0VFMgorOjEwMDE5MDAwMDIwNDAwMjgwMDAwMDAwMDAyMDQwMDJDMDAwMDAwM0ZDMAorOjEwMDFBMDAwMDIwNDAwMzAwMDAwMDAzRjAyMDQwMDM0MDAwMDAwM0Y2MQorOjEwMDFCMDAwMDIwNDAwMzgwMDAwMDAwMDAyMDQwMDNDMDAwMDAwM0Y4MAorOjEwMDFDMDAwMDIwNDAwNDAwMDAwMDAzRjAyMDQwMDQ0MDAwMDAwM0YyMQorOjEwMDFEMDAwMDIwNDIwMDgwMDAwMDQxMTAyMDQyMDBDMDAwMDA0MDBBNgorOjEwMDFFMDAwMDIwNDIwMTAwMDAwMDQwNDAyMDQyMDE0MDAwMDA0MTk3QQorOjEwMDFGMDAwMDIwNDIwMUMwMDAwRkZGRjAyMDQyMDIwMDAwMEZGRkY3QgorOjEwMDIwMDAwMDIwNDIwMjQwMDAwRkZGRjAyMDQyMDI4MDAwMEZGRkY1QQorOjEwMDIxMDAwMDYwNDIwMzgwMDAwMDAwMjAyMDQyMDQwMDAwMDAwMzRFMAorOjEwMDIyMDAwMDIwNDIwNDQwMDAwMDAzNTA2MDQyMDQ4MDAwMDAwN0M0MQorOjEwMDIzMDAwMDIwNDIyMzgwN0ZGRkZGRjAyMDQyMjNDMDAwMDAwM0ZCNworOjEwMDI0MDAwMDIwNDIyNDAwN0ZGRkZGRjAyMDQyMjQ0MDAwMDAwMEZDNworOjEwMDI1MDAwMDEwNDIyNDgwMDAwMDAwMDAxMDQyMjRDMDAwMDAwMDBCQworOjEwMDI2MDAwMDEwNDIyNTAwMDAwMDAwMDAxMDQyMjU0MDAwMDAwMDA5QworOjEwMDI3MDAwMDEwNDIyNTgwMDAwMDAwMDAxMDQyMjVDMDAwMDAwMDA3QworOjEwMDI4MDAwMDEwNDIyNjAwMDAwMDAwMDAxMDQyMjY0MDAwMDAwMDA1QworOjEwMDI5MDAwMDEwNDIyNjgwMDAwMDAwMDAxMDQyMjZDMDAwMDAwMDAzQworOjEwMDJBMDAwMDEwNDIyNzAwMDAwMDAwMDAxMDQyMjc0MDAwMDAwMDAxQworOjEwMDJCMDAwMDEwNDIyNzgwMDAwMDAwMDAxMDQyMjdDMDAwMDAwMDBGQworOjEwMDJDMDAwMDIwNDI0QkMwMDAwMDAwMTBDMDQyMDAwMDAwMDAzRTgyQworOjEwMDJEMDAwMEEwNDIwMDAwMDAwMDAwMTBCMDQyMDAwMDAwMDAwMEFCNgorOjEwMDJFMDAwMDIwNTAwNDQwMDAwMDAyMDAyMDUwMDQ4MDAwMDAwMzIyMgorOjEwMDJGMDAwMDIwNTAwOTAwMjE1MDAyMDAyMDUwMDk0MDIxNTAwMjA1RQorOjEwMDMwMDAwMDIwNTAwOTgwMDAwMDAzMDAyMDUwMDlDMDgxMDAwMDA2MworOjEwMDMxMDAwMDIwNTAwQTAwMDAwMDAzMzAyMDUwMEE0MDAwMDAwMzAyOAorOjEwMDMyMDAwMDIwNTAwQTgwMDAwMDAzMTAyMDUwMEFDMDAwMDAwMDIzOAorOjEwMDMzMDAwMDIwNTAwQjAwMDAwMDAwNTAyMDUwMEI0MDAwMDAwMDY0MAorOjEwMDM0MDAwMDIwNTAwQjgwMDAwMDAwMjAyMDUwMEJDMDAwMDAwMDIyNworOjEwMDM1MDAwMDIwNTAwQzAwMDAwMDAwMDAyMDUwMEM0MDAwMDAwMDUwNgorOjEwMDM2MDAwMDIwNTAwQzgwMDAwMDAwMjAyMDUwMENDMDAwMDAwMDJFNworOjEwMDM3MDAwMDIwNTAwRDAwMDAwMDAwMjAyMDUwMEQ0MDAwMDAwMDFDOAorOjEwMDM4MDAwMDIwNTAxMTQwMDAwMDAwMTAyMDUwMTFDMDAwMDAwMDEyQgorOjEwMDM5MDAwMDIwNTAxMjAwMDAwMDAwMjAyMDUwMjA0MDAwMDAwMDEyNQorOjEwMDNBMDAwMDIwNTAyMEMwMDAwMDA0MDAyMDUwMjEwMDAwMDAwNDA5RgorOjEwMDNCMDAwMDIwNTAyMUMwMDAwMDAyMDAyMDUwMjIwMDAwMDAwMTNCQworOjEwMDNDMDAwMDIwNTAyMjQwMDAwMDAyMDA2MDUwMjQwMDAwMDAwMEE4OQorOjEwMDNEMDAwMDQwNTAyODAwMDIwMDAwMDAyMDUwMDUwMDAwMDAwMDcxNAorOjEwMDNFMDAwMDIwNTAwNTQwMDAwMDAwNzAyMDUwMDU4MDAwMDAwMDg0NAorOjEwMDNGMDAwMDIwNTAwNUMwMDAwMDAwODA2MDUwMDYwMDAwMDAwMDQyMworOjEwMDQwMDAwMDIwNTAwRDgwMDAwMDAwNjAyMDUwMEUwMDAwMDAwMEQxMworOjEwMDQxMDAwMDIwNTAwRTQwMDAwMDAyRDAyMDUwMEU4MDAwMDAwMDdDRQorOjEwMDQyMDAwMDIwNTAwRUMwMDAwMDAyNzAyMDUwMEYwMDAwMDAwMDdCNAorOjEwMDQzMDAwMDIwNTAwRjQwMDAwMDAyNzAyMDUwMEY4MDAwMDAwMDc5NAorOjEwMDQ0MDAwMDIwNTAwRkMwMDAwMDAyNzAyMDUwMDA0MDAwMDAwMDE3NgorOjEwMDQ1MDAwMDIwNTAwMDgwMDAwMDAwMTAyMDUwMDBDMDAwMDAwMDE3OAorOjEwMDQ2MDAwMDIwNTAwMTAwMDAwMDAwMTAyMDUwMDE0MDAwMDAwMDE1OAorOjEwMDQ3MDAwMDIwNTAwMTgwMDAwMDAwMTAyMDUwMDFDMDAwMDAwMDEzOAorOjEwMDQ4MDAwMDIwNTAwMjAwMDAwMDAwMTAyMDUwMDI0MDAwMDAwMDExOAorOjEwMDQ5MDAwMDIwNTAwMjgwMDAwMDAwMTAyMDUwMDJDMDAwMDAwMDFGOAorOjEwMDRBMDAwMDIwNTAwMzAwMDAwMDAwMTAyMDUwMDM0MDAwMDAwMDFEOAorOjEwMDRCMDAwMDIwNTAwMzgwMDAwMDAwMTAyMDUwMDNDMDAwMDAwMDFCOAorOjEwMDRDMDAwMDIwNTAwNDAwMDAwMDAwMTA0MDYxMDAwMDIwMDAwMjBBOAorOjEwMDREMDAwMDIwNjAwREMwMDAwMDAwMTAxMDYwMEQ4MDAwMDAwMDA1OAorOjEwMDRFMDAwMDQwNjAyMDAwMDAzMDIyMDAyMDYwMERDMDAwMDAwMDBGNworOjEwMDRGMDAwMDIwNjAwNjgwMDAwMDBCODAyMDYwMDc4MDAwMDAxMTQzRgorOjEwMDUwMDAwMDEwNjAwQjgwMDAwMDAwMDAxMDYwMEM4MDAwMDAwMDA1RAorOjEwMDUxMDAwMDIwNjAwNkMwMDAwMDBCODAyMDYwMDdDMDAwMDAxMTQxNgorOjEwMDUyMDAwMDEwNjAwQkMwMDAwMDAwMDAxMDYwMENDMDAwMDAwMDAzNQorOjEwMDUzMDAwMDcxODA0MDAwMDk1MDAwMDA4MTgwNzYwMDAxNDAyMjM0MworOjEwMDU0MDAwMDcxQzAwMDAzNEQ0MDAwMDA3MUM4MDAwMzRDRjBEMzY5NworOjEwMDU1MDAwMDcxRDAwMDAwQTE5MUE2QTA4MUQxNDYwNUQ3NDAyMjUzRgorOjEwMDU2MDAwMDExODAwMDAwMDAwMDAwMDAxMTgwMDA0MDAwMDAwMDA1NQorOjEwMDU3MDAwMDExODAwMDgwMDAwMDAwMDAxMTgwMDBDMDAwMDAwMDAzNQorOjEwMDU4MDAwMDExODAwMTAwMDAwMDAwMDAxMTgwMDE0MDAwMDAwMDAxNQorOjEwMDU5MDAwMDIxODAwMjAwMDAwMDAwMTAyMTgwMDI0MDAwMDAwMDJFMAorOjEwMDVBMDAwMDIxODAwMjgwMDAwMDAwMzAyMTgwMDJDMDAwMDAwMDBDMAorOjEwMDVCMDAwMDIxODAwMzAwMDAwMDAwNDAyMTgwMDM0MDAwMDAwMDE5RQorOjEwMDVDMDAwMDIxODAwMzgwMDAwMDAwMDAyMTgwMDNDMDAwMDAwMDE4MgorOjEwMDVEMDAwMDIxODAwNDAwMDAwMDAwNDAyMTgwMDQ0MDAwMDAwMDA1RgorOjEwMDVFMDAwMDIxODAwNDgwMDAwMDAwMTAyMTgwMDRDMDAwMDAwMDMzRgorOjEwMDVGMDAwMDIxODAwNTAwMDAwMDAwMDAyMTgwMDU0MDAwMDAwMDEyMgorOjEwMDYwMDAwMDIxODAwNTgwMDAwMDAwNDAyMTgwMDVDMDAwMDAwMDBGRQorOjEwMDYxMDAwMDIxODAwNjAwMDAwMDAwMTAyMTgwMDY0MDAwMDAwMDNERQorOjEwMDYyMDAwMDIxODAwNjgwMDAwMDAwMDAyMTgwMDZDMDAwMDAwMDFDMQorOjEwMDYzMDAwMDIxODAwNzAwMDAwMDAwNDAyMTgwMDc0MDAwMDAwMDA5RQorOjEwMDY0MDAwMDIxODAwNzgwMDAwMDAwNDAyMTgwMDdDMDAwMDAwMDM3QgorOjEwMDY1MDAwMDYxODAwODAwMDAwMDAwMjAyMTgwMEE0MDAwMDNGRkZGRQorOjEwMDY2MDAwMDIxODAwQTgwMDAwMDNGRjAyMTgwMjI0MDAwMDAwMDA4NgorOjEwMDY3MDAwMDIxODAyMzQwMDAwMDAwMDAyMTgwMjRDMDAwMDAwMDBDMgorOjEwMDY4MDAwMDIxODAyRTQwMDAwMDBGRjA2MTgxMDAwMDAwMDA0MDAzOQorOjEwMDY5MDAwMDIxQjhCQzAwMDAwMDAwMTAyMUI4MDAwMDAwMDAwMzQyMAorOjEwMDZBMDAwMDIxQjgwNDAwMDAwMDAxODAyMUI4MDgwMDAwMDAwMEMyQworOjEwMDZCMDAwMDIxQjgwQzAwMDAwMDAyMDBDMUI4MzAwMDAwN0ExMjA0QgorOjEwMDZDMDAwMEExQjgzMDAwMDAwMDEzODBCMUI4MzAwMDAwMDEzODgwNQorOjEwMDZEMDAwMDIxQjgzQzAwMDAwMDFGNDA2MUEyMDAwMDAwMDAwQjJEMworOjEwMDZFMDAwMDYxQTIzQzgwMDAwMDE4MTA0MUEyOUNDMDAwMTAyMjc0MAorOjEwMDZGMDAwMDYxQTEwMjAwMDAwMDBDODA2MUExMDAwMDAwMDAwMDJCMAorOjEwMDcwMDAwMDYxQTFFMzgwMDAwMDAwMjA2MUExRTMwMDAwMDAwMDIwMQorOjEwMDcxMDAwMDYxQTA4MDAwMDAwMDAwMjA2MUEwODA4MDAwMDAwMDI3RAorOjEwMDcyMDAwMDYxQTA4MTAwMDAwMDAwNDA0MUExRkIwMDAwNTAyMjg3MQorOjEwMDczMDAwMDQxQTRDQjAwMDA4MDIyRDA2MUEyMkM4MDAwMDAwMjAzRQorOjEwMDc0MDAwMDYxQTQwMDAwMDAwMDEyNDAyMUE0OTIwMDAwMDAwMDA5RgorOjEwMDc1MDAwMDYxQTE0MDAwMDAwMDAwQTA2MUExNDUwMDAwMDAwMDZEMQorOjEwMDc2MDAwMDYxQTE1MDAwMDAwMDAwMjA0MUExNTA4MDAwNTAyMzVEQgorOjEwMDc3MDAwMDYxQTE1MUMwMDAwMDAwOTA2MUExNTgwMDAwMDAwMTQ1NgorOjEwMDc4MDAwMDYxQTA5QzAwMDAwMDA0ODA2MUEwODAwMDAwMDAwMDIwRQorOjEwMDc5MDAwMDYxQTA4MjAwMDAwMDAwRTA0MUExRkIwMDAwMjAyM0FEOAorOjEwMDdBMDAwMDYxQTJDMjgwMDAwMDAwMjA2MUEyMzQ4MDAwMDAwMjAyOAorOjEwMDdCMDAwMDYxQTQ0OTAwMDAwMDEyNDAyMUE0OTI0MDAwMDAwMDA5NworOjEwMDdDMDAwMDYxQTE0MjgwMDAwMDAwQTA2MUExNDY4MDAwMDAwMDYyMQorOjEwMDdEMDAwMDYxQTE1NDAwMDAwMDAwMjA0MUExNTQ4MDAwNTAyM0NFNAorOjEwMDdFMDAwMDYxQTE1NUMwMDAwMDAwOTA2MUExNUQwMDAwMDAwMTQ1NgorOjEwMDdGMDAwMDYxQTBBRTAwMDAwMDA0ODA2MUEwODA4MDAwMDAwMDI3NQorOjEwMDgwMDAwMDYxQTA4NTgwMDAwMDAwRTA0MUExRkI4MDAwMjAyNDEyMAorOjEwMDgxMDAwMDYxQTJDMzAwMDAwMDAwMjAyMDBBMjgwMDAwMDAwMDEzNQorOjEwMDgyMDAwMDIwMEEyOTQwNzFEMjkxMTAyMDBBMjk4MDAwMDAwMDBGNgorOjEwMDgzMDAwMDIwMEEyOUMwMDlDMDQyNDAyMDBBMkEwMDAwMDAwMDA3MAorOjEwMDg0MDAwMDIwMEEyQTQwMDAwMDIwOTAyMDBBNEZDRkYwMDAwMDBCNAorOjEwMDg1MDAwMDIwMTAwQjQwMDAwMDAwMTAyMDEwMEI4MDAwMDAwMDEyNAorOjEwMDg2MDAwMDIwMTAwREMwMDAwMDAwMTAyMDEwMTAwMDAwMDAwMDFBMworOjEwMDg3MDAwMDIwMTAxMDQwMDAwMDAwMTAyMDEwMDdDMDAzMDAwMDBDMAorOjEwMDg4MDAwMDIwMTAwODQwMDAwMDAyODAyMDEwMDhDMDAwMDAwMDAyQQorOjEwMDg5MDAwMDIwMTAxMzAwMDAwMDAwNDAyMDEwMjVDMDAwMDAwMDFCRQorOjEwMDhBMDAwMDIwMTAzMjgwMDAwMDAwMDAyMDEwNTU0MDAwMDAwMzA4RQorOjEwMDhCMDAwMDIwMTAwQzQwMDAwMDAwMTAyMDEwMENDMDAwMDAwMDFBMAorOjEwMDhDMDAwMDIwMTAwRjgwMDAwMDAwMTAyMDEwMEYwMDAwMDAwMDEzOAorOjEwMDhEMDAwMDIwMTAwODAwMDMwMDAwMDAyMDEwMDg4MDAwMDAwMjhCMgorOjEwMDhFMDAwMDIwMTAwOTAwMDAwMDAwMDAyMDEwMTM0MDAwMDAwMDQzOQorOjEwMDhGMDAwMDIwMTAyREMwMDAwMDAwMTAyMDEwMzJDMDAwMDAwMDBFNAorOjEwMDkwMDAwMDIwMTA1NjQwMDAwMDAzMDAyMDEwMEM4MDAwMDAwMDE3RgorOjEwMDkxMDAwMDIwMTAwRDAwMDAwMDAwMTAyMDEwMEZDMDAwMDAwMDEwMworOjEwMDkyMDAwMDIwMTAwRjQwMDAwMDAwMTAyMEMxMDAwMDAwMDAwMjA5MQorOjEwMDkzMDAwMDIwQzIwMDgwMDAwMEExMTAyMEMyMDBDMDAwMDBBMDAyMgorOjEwMDk0MDAwMDIwQzIwMTAwMDAwMEEwNDAyMEMyMDFDMDAwMEZGRkYxMworOjEwMDk1MDAwMDIwQzIwMjAwMDAwRkZGRjAyMEMyMDI0MDAwMEZGRkZGQgorOjEwMDk2MDAwMDIwQzIwMjgwMDAwRkZGRjA2MEMyMDM4MDAwMDAwMDJDNworOjEwMDk3MDAwMDIwQzIwNDAwMDAwMDAzNDAyMEMyMDQ0MDAwMDAwMzUyRQorOjEwMDk4MDAwMDIwQzIwNDgwMDAwMDAyMDAyMEMyMDRDMDAwMDAwMjEzNgorOjEwMDk5MDAwMDIwQzIwNTAwMDAwMDAyMjAyMEMyMDU0MDAwMDAwMjMxMgorOjEwMDlBMDAwMDIwQzIwNTgwMDAwMDAyNDAyMEMyMDVDMDAwMDAwMjVFRQorOjEwMDlCMDAwMDIwQzIwNjAwMDAwMDAyNjAyMEMyMDY0MDAwMDAwMjdDQQorOjEwMDlDMDAwMDIwQzIwNjgwMDAwMDAyODAyMEMyMDZDMDAwMDAwMjlBNgorOjEwMDlEMDAwMDIwQzIwNzAwMDAwMDAyQTAyMEMyMDc0MDAwMDAwMkI4MgorOjEwMDlFMDAwMDYwQzIwNzgwMDAwMDA1NjAyMEMyMUQwMDAwMDAwMDEwNworOjEwMDlGMDAwMDIwQzIxRDQwMDAwMDAwMTAyMEMyMUQ4MDAwMDAwMDFFQgorOjEwMEEwMDAwMDIwQzIxREMwMDAwMDAwMTAyMEMyMUUwMDAwMDAwMDFDQQorOjEwMEExMDAwMDIwQzIxRTQwMDAwMDAwMTAyMEMyMUU4MDAwMDAwMDFBQQorOjEwMEEyMDAwMDIwQzIxRUMwMDAwMDAwMTAyMEMyMUYwMDAwMDAwMDE4QQorOjEwMEEzMDAwMDIwQzIxRjQwMDAwMDAwMTA2MEMyMUY4MDAwMDAwMTA1NworOjEwMEE0MDAwMDIwQzIyMzgwN0ZGRkZGRjAyMEMyMjNDMDAwMDAwM0Y4RgorOjEwMEE1MDAwMDIwQzIyNDAwN0ZGRkZGRjAyMEMyMjQ0MDAwMDAwMEY5RgorOjEwMEE2MDAwMDEwQzIyNDgwMDAwMDAwMDAxMEMyMjRDMDAwMDAwMDA5NAorOjEwMEE3MDAwMDEwQzIyNTAwMDAwMDAwMDAxMEMyMjU0MDAwMDAwMDA3NAorOjEwMEE4MDAwMDEwQzIyNTgwMDAwMDAwMDAxMEMyMjVDMDAwMDAwMDA1NAorOjEwMEE5MDAwMDEwQzIyNjAwMDAwMDAwMDAxMEMyMjY0MDAwMDAwMDAzNAorOjEwMEFBMDAwMDEwQzIyNjgwMDAwMDAwMDAxMEMyMjZDMDAwMDAwMDAxNAorOjEwMEFCMDAwMDEwQzIyNzAwMDAwMDAwMDAxMEMyMjc0MDAwMDAwMDBGNAorOjEwMEFDMDAwMDEwQzIyNzgwMDAwMDAwMDAxMEMyMjdDMDAwMDAwMDBENAorOjEwMEFEMDAwMDIwQzI0QkMwMDAwMDAwMTBDMEMyMDAwMDAwMDAzRTgwNAorOjEwMEFFMDAwMEEwQzIwMDAwMDAwMDAwMTBCMEMyMDAwMDAwMDAwMEE4RQorOjEwMEFGMDAwMDIwQzQwMDgwMDAwMDM2NTAyMEM0MDBDMDAwMDAzNTQ4NworOjEwMEIwMDAwMDIwQzQwMTAwMDAwMDM1ODAyMEM0MDE0MDAwMDAzNzU1MgorOjEwMEIxMDAwMDIwQzQwMUMwMDAwRkZGRjAyMEM0MDIwMDAwMEZGRkYwMQorOjEwMEIyMDAwMDIwQzQwMjQwMDAwRkZGRjAyMEM0MDI4MDAwMEZGRkZFMQorOjEwMEIzMDAwMDIwQzQwMzgwMDAwMDA0NjAyMEM0MDNDMDAwMDAwMDU1QQorOjEwMEI0MDAwMDYwQzQwNDAwMDAwMDA1RTAyMEM0MUI4MDAwMDAwMDFBRAorOjEwMEI1MDAwMDYwQzQxQkMwMDAwMDAxRjAyMEM0MjM4MDdGRkZGRkZEQgorOjEwMEI2MDAwMDIwQzQyM0MwMDAwMDAzRjAyMEM0MjQwMDdGRkZGRkYyNgorOjEwMEI3MDAwMDIwQzQyNDQwMDAwMDAwRjAxMEM0MjQ4MDAwMDAwMDAzQgorOjEwMEI4MDAwMDEwQzQyNEMwMDAwMDAwMDAxMEM0MjUwMDAwMDAwMDAyQgorOjEwMEI5MDAwMDEwQzQyNTQwMDAwMDAwMDAxMEM0MjU4MDAwMDAwMDAwQgorOjEwMEJBMDAwMDEwQzQyNUMwMDAwMDAwMDAxMEM0MjYwMDAwMDAwMDBFQgorOjEwMEJCMDAwMDEwQzQyNjQwMDAwMDAwMDAxMEM0MjY4MDAwMDAwMDBDQgorOjEwMEJDMDAwMDEwQzQyNkMwMDAwMDAwMDAxMEM0MjcwMDAwMDAwMDBBQgorOjEwMEJEMDAwMDEwQzQyNzQwMDAwMDAwMDAxMEM0Mjc4MDAwMDAwMDA4QgorOjEwMEJFMDAwMDEwQzQyN0MwMDAwMDAwMDAxMEM0MjgwMDAwMDAwMDA2QgorOjEwMEJGMDAwMDIwQzQ0QzAwMDAwMDAwMTBDMEM0MDAwMDAwMDAzRTg5RgorOjEwMEMwMDAwMEEwQzQwMDAwMDAwMDAwMTBCMEM0MDAwMDAwMDAwMEEyQworOjEwMEMxMDAwMDIwRDAwNDQwMDAwMDAzMjAyMEQwMDhDMDIxNTAwMjA3RAorOjEwMEMyMDAwMDIwRDAwOTAwMjE1MDAyMDAyMEQwMDk0MDgxMDAwMDAzMworOjEwMEMzMDAwMDIwRDAwOTgwMDAwMDAzMzAyMEQwMDlDMDAwMDAwMDIyRAorOjEwMEM0MDAwMDIwRDAwQTAwMDAwMDAwMDAyMEQwMEE0MDAwMDAwMDUzRAorOjEwMEM1MDAwMDIwRDAwQTgwMDAwMDAwNTA2MEQwMEFDMDAwMDAwMDIxNworOjEwMEM2MDAwMDIwRDAwQjQwMDAwMDAwMjAyMEQwMEI4MDAwMDAwMDNGNQorOjEwMEM3MDAwMDIwRDAwQkMwMDAwMDAwMjAyMEQwMEMwMDAwMDAwMDFENworOjEwMEM4MDAwMDIwRDAwQzgwMDAwMDAwMjAyMEQwMENDMDAwMDAwMDJBRQorOjEwMEM5MDAwMDIwRDAxMDgwMDAwMDAwMTAyMEQwMTVDMDAwMDAwMDFDRQorOjEwMENBMDAwMDIwRDAxNjQwMDAwMDAwMTAyMEQwMTY4MDAwMDAwMDI1NQorOjEwMENCMDAwMDIwRDAyMDQwMDAwMDAwMTAyMEQwMjBDMDAwMDAwMjBFMQorOjEwMENDMDAwMDIwRDAyMTAwMDAwMDA0MDAyMEQwMjE0MDAwMDAwNDA1RQorOjEwMENEMDAwMDIwRDAyMjAwMDAwMDAwMzAyMEQwMjI0MDAwMDAwMTg5MworOjEwMENFMDAwMDYwRDAyODAwMDAwMDAxMjA0MEQwMzAwMDAyNDAyNDNFMAorOjEwMENGMDAwMDIwRDAwNEMwMDAwMDAwMTAyMEQwMDUwMDAwMDAwMDIzNworOjEwMEQwMDAwMDIwRDAwNTQwMDAwMDAwODAyMEQwMDU4MDAwMDAwMDgwOQorOjEwMEQxMDAwMDYwRDAwNUMwMDAwMDAwNDAyMEQwMEM0MDAwMDAwMDQ4OQorOjEwMEQyMDAwMDIwRDAxMTQwMDAwMDAwOTAyMEQwMTE4MDAwMDAwMjk0NQorOjEwMEQzMDAwMDIwRDAxMUMwMDAwMDAwQTAyMEQwMTIwMDAwMDAwMkEyMworOjEwMEQ0MDAwMDIwRDAxMjQwMDAwMDAwNzAyMEQwMTI4MDAwMDAwMjcwOQorOjEwMEQ1MDAwMDIwRDAxMkMwMDAwMDAwNzAyMEQwMTMwMDAwMDAwMjdFOQorOjEwMEQ2MDAwMDIwRDAxMzQwMDAwMDAwQzAyMEQwMTM4MDAwMDAwMkNCRgorOjEwMEQ3MDAwMDIwRDAxM0MwMDAwMDAwQzAyMEQwMTQwMDAwMDAwMkM5RgorOjEwMEQ4MDAwMDIwRDAxNDQwMDAwMDAwQzAyMEQwMTQ4MDAwMDAwMkM3RgorOjEwMEQ5MDAwMDIwRDAwMDQwMDAwMDAwMTAyMEQwMDA4MDAwMDAwMDEyNworOjEwMERBMDAwMDIwRDAwMEMwMDAwMDAwMTAyMEQwMDEwMDAwMDAwMDEwNworOjEwMERCMDAwMDIwRDAwMTQwMDAwMDAwMTAyMEQwMDE4MDAwMDAwMDFFNworOjEwMERDMDAwMDIwRDAwMUMwMDAwMDAwMTAyMEQwMDIwMDAwMDAwMDFDNworOjEwMEREMDAwMDIwRDAwMjQwMDAwMDAwMTAyMEQwMDI4MDAwMDAwMDFBNworOjEwMERFMDAwMDIwRDAwMkMwMDAwMDAwMTAyMEQwMDMwMDAwMDAwMDE4NworOjEwMERGMDAwMDIwRDAwMzQwMDAwMDAwMTAyMEQwMDM4MDAwMDAwMDE2NworOjEwMEUwMDAwMDIwRDAwM0MwMDAwMDAwMTAyMEUwMDRDMDAwMDAwMzIwOAorOjEwMEUxMDAwMDIwRTAwOTQwMjE1MDAyMDAyMEUwMDk4MDIxNTAwMjAxOAorOjEwMEUyMDAwMDIwRTAwOUMwMDAwMDAzMDAyMEUwMEEwMDgxMDAwMDAxRQorOjEwMEUzMDAwMDIwRTAwQTQwMDAwMDAzMzAyMEUwMEE4MDAwMDAwMzBFMworOjEwMEU0MDAwMDIwRTAwQUMwMDAwMDAzMTAyMEUwMEIwMDAwMDAwMDJGMworOjEwMEU1MDAwMDIwRTAwQjQwMDAwMDAwNDAyMEUwMEI4MDAwMDAwMDAwMgorOjEwMEU2MDAwMDIwRTAwQkMwMDAwMDAwMjAyMEUwMEMwMDAwMDAwMDJFMgorOjEwMEU3MDAwMDIwRTAwQzQwMDAwMDAwMDAyMEUwMEM4MDAwMDAwMDJDNAorOjEwMEU4MDAwMDIwRTAwQ0MwMDAwMDAwNzAyMEUwMEQwMDAwMDAwMDI5RAorOjEwMEU5MDAwMDIwRTAwRDQwMDAwMDAwMjAyMEUwMEQ4MDAwMDAwMDE4MworOjEwMEVBMDAwMDIwRTAwRTQwMDAwMDAwMTAyMEUwMTQ0MDAwMDAwMDFGNworOjEwMEVCMDAwMDIwRTAxNEMwMDAwMDAwMTAyMEUwMTUwMDAwMDAwMDI3MQorOjEwMEVDMDAwMDIwRTAyMDQwMDAwMDAwMTAyMEUwMjBDMDAwMDAwNDBBRAorOjEwMEVEMDAwMDIwRTAyMTAwMDAwMDA0MDAyMEUwMjFDMDAwMDAwMDQ3RQorOjEwMEVFMDAwMDIwRTAyMjAwMDAwMDAyMDAyMEUwMjI0MDAwMDAwMEU2QworOjEwMEVGMDAwMDIwRTAyMjgwMDAwMDAxQjA2MEUwMzAwMDAwMDAwMTI3NAorOjEwMEYwMDAwMDQwRTAyODAwMDFCMDI2NzAyMEUwMDU0MDAwMDAwMEM1OQorOjEwMEYxMDAwMDIwRTAwNTgwMDAwMDAwOTAyMEUwMDVDMDAwMDAwMEZFNQorOjEwMEYyMDAwMDIwRTAwNjAwMDAwMDAxMDA2MEUwMDY0MDAwMDAwMDRDNQorOjEwMEYzMDAwMDIwRTAwREMwMDAwMDAwMzAyMEUwMTEwMDAwMDAwMEY5MgorOjEwMEY0MDAwMDIwRTAxMTQwMDAwMDAyRjAyMEUwMTE4MDAwMDAwMEUxNgorOjEwMEY1MDAwMDIwRTAxMUMwMDAwMDAyRTAyMEUwMDA0MDAwMDAwMDEyMQorOjEwMEY2MDAwMDIwRTAwMDgwMDAwMDAwMTAyMEUwMDBDMDAwMDAwMDE0QgorOjEwMEY3MDAwMDIwRTAwMTAwMDAwMDAwMTAyMEUwMDE0MDAwMDAwMDEyQgorOjEwMEY4MDAwMDIwRTAwMTgwMDAwMDAwMTAyMEUwMDFDMDAwMDAwMDEwQgorOjEwMEY5MDAwMDIwRTAwMjAwMDAwMDAwMTAyMEUwMDI0MDAwMDAwMDFFQgorOjEwMEZBMDAwMDIwRTAwMjgwMDAwMDAwMTAyMEUwMDJDMDAwMDAwMDFDQgorOjEwMEZCMDAwMDIwRTAwMzAwMDAwMDAwMTAyMEUwMDM0MDAwMDAwMDFBQgorOjEwMEZDMDAwMDIwRTAwMzgwMDAwMDAwMTAyMEUwMDNDMDAwMDAwMDE4QgorOjEwMEZEMDAwMDIwRTAwNDAwMDAwMDAwMTAyMEUwMDQ0MDAwMDAwMDE2QgorOjEwMEZFMDAwMDczMDA0MDAwMEM5MDAwMDA4MzAwNzY4MDAxMzAyODJCRgorOjEwMEZGMDAwMDczNDAwMDAzMzRCMDAwMDA3MzQ4MDAwMzcwOTBDRDM1RQorOjEwMTAwMDAwMDczNTAwMDAzMDE2MUE5NjA4MzU3MkYwNTFBMjAyODQ5NgorOjEwMTAxMDAwMDEzMDAwMDAwMDAwMDAwMDAxMzAwMDA0MDAwMDAwMDA2QQorOjEwMTAyMDAwMDEzMDAwMDgwMDAwMDAwMDAxMzAwMDBDMDAwMDAwMDA0QQorOjEwMTAzMDAwMDEzMDAwMTAwMDAwMDAwMDAxMzAwMDE0MDAwMDAwMDAyQQorOjEwMTA0MDAwMDIzMDAwMjAwMDAwMDAwMTAyMzAwMDI0MDAwMDAwMDJGNQorOjEwMTA1MDAwMDIzMDAwMjgwMDAwMDAwMzAyMzAwMDJDMDAwMDAwMDBENQorOjEwMTA2MDAwMDIzMDAwMzAwMDAwMDAwNDAyMzAwMDM0MDAwMDAwMDFCMworOjEwMTA3MDAwMDIzMDAwMzgwMDAwMDAwMDAyMzAwMDNDMDAwMDAwMDE5NworOjEwMTA4MDAwMDIzMDAwNDAwMDAwMDAwNDAyMzAwMDQ0MDAwMDAwMDA3NAorOjEwMTA5MDAwMDIzMDAwNDgwMDAwMDAwMTAyMzAwMDRDMDAwMDAwMDM1NAorOjEwMTBBMDAwMDIzMDAwNTAwMDAwMDAwMDAyMzAwMDU0MDAwMDAwMDEzNworOjEwMTBCMDAwMDIzMDAwNTgwMDAwMDAwNDAyMzAwMDVDMDAwMDAwMDAxNAorOjEwMTBDMDAwMDIzMDAwNjAwMDAwMDAwMTAyMzAwMDY0MDAwMDAwMDNGNAorOjEwMTBEMDAwMDIzMDAwNjgwMDAwMDAwMDAyMzAwMDZDMDAwMDAwMDFENworOjEwMTBFMDAwMDIzMDAwNzAwMDAwMDAwNDAyMzAwMDc0MDAwMDAwMDBCNAorOjEwMTBGMDAwMDIzMDAwNzgwMDAwMDAwNDAyMzAwMDdDMDAwMDAwMDM5MQorOjEwMTEwMDAwMDYzMDAwODAwMDAwMDAwMjAyMzAwMEE0MDAwMDNGRkYxMworOjEwMTExMDAwMDIzMDAwQTgwMDAwMDNGRjAyMzAwMjI0MDAwMDAwMDA5QgorOjEwMTEyMDAwMDIzMDAyMzQwMDAwMDAwMDAyMzAwMjRDMDAwMDAwMDBENworOjEwMTEzMDAwMDIzMDAyRTQwMDAwRkZGRjA2MzAyMDAwMDAwMDA4MDAzQgorOjEwMTE0MDAwMDIzMzhCQzAwMDAwMDAwMTAyMzM4MDAwMDAwMDAwMUE0RgorOjEwMTE1MDAwMDIzMzgwNDAwMDAwMDA0RTAyMzM4MDgwMDAwMDAwMTAwNworOjEwMTE2MDAwMDIzMzgwQzAwMDAwMDAyMDBDMzM4MzAwMDAwN0ExMjA2MAorOjEwMTE3MDAwMEEzMzgzMDAwMDAwMDEzODBCMzM4MzAwMDAwMDEzODgxQQorOjEwMTE4MDAwMDIzMzgzQzAwMDAwMDFGNDBDMzM4MzgwMURDRDY1MDA2MQorOjEwMTE5MDAwMEEzMzgzODAwMDA0QzRCNDBCMzM4MzgwMDA0QzRCNDA3QgorOjEwMTFBMDAwMDYzMjFBQTAwMDAwMDBDMjA2MzIxMDIwMDAwMDAwQzg1QgorOjEwMTFCMDAwMDYzMjEwMDAwMDAwMDAwMjA2MzIxNDAwMDAwMDAwNDA1OQorOjEwMTFDMDAwMDYzMjUwOTgwMDAwMDAwNDA2MzI1MDgwMDAwMDAwMDVFRQorOjEwMTFEMDAwMDQzMjUwOTQwMDAxMDI4NjA2MzI1MDAwMDAwMDAwMjBDNAorOjEwMTFFMDAwMDQzMjI4MzAwMDAyMDI4NzAyMzMwODAwMDEwMDAwMDBBOAorOjEwMTFGMDAwMDQzMzBDMDAwMDEwMDI4OTAyMzMwODAwMDAwMDAwMDBENAorOjEwMTIwMDAwMDQzMzBDNDAwMDEwMDI5OTA2MzIxNTAwMDAwMDAwQjRBRgorOjEwMTIxMDAwMDIzMjFEQzgwMDAwMDAwMDA2MzI0MDAwMDAwMDAwRDg2NQorOjEwMTIyMDAwMDYzMjE3RDAwMDAwMDBCNDAyMzIxRENDMDAwMDAwMDBDRQorOjEwMTIzMDAwMDYzMjQzNjAwMDAwMDBEODA3MjAwNDAwMDA5MjAwMDAzRQorOjEwMTI0MDAwMDgyMDA3ODAwMDEwMDJBOTA3MjQwMDAwMkNEMTAwMDAwQworOjEwMTI1MDAwMDcyNDgwMDAyQUU1MEIzNTA4MjREQzYwNjJEQTAyQUI0MworOjEwMTI2MDAwMDEyMDAwMDAwMDAwMDAwMDAxMjAwMDA0MDAwMDAwMDAzOAorOjEwMTI3MDAwMDEyMDAwMDgwMDAwMDAwMDAxMjAwMDBDMDAwMDAwMDAxOAorOjEwMTI4MDAwMDEyMDAwMTAwMDAwMDAwMDAxMjAwMDE0MDAwMDAwMDBGOAorOjEwMTI5MDAwMDIyMDAwMjAwMDAwMDAwMTAyMjAwMDI0MDAwMDAwMDJDMworOjEwMTJBMDAwMDIyMDAwMjgwMDAwMDAwMzAyMjAwMDJDMDAwMDAwMDBBMworOjEwMTJCMDAwMDIyMDAwMzAwMDAwMDAwNDAyMjAwMDM0MDAwMDAwMDE4MQorOjEwMTJDMDAwMDIyMDAwMzgwMDAwMDAwMDAyMjAwMDNDMDAwMDAwMDE2NQorOjEwMTJEMDAwMDIyMDAwNDAwMDAwMDAwNDAyMjAwMDQ0MDAwMDAwMDA0MgorOjEwMTJFMDAwMDIyMDAwNDgwMDAwMDAwMTAyMjAwMDRDMDAwMDAwMDMyMgorOjEwMTJGMDAwMDIyMDAwNTAwMDAwMDAwMDAyMjAwMDU0MDAwMDAwMDEwNQorOjEwMTMwMDAwMDIyMDAwNTgwMDAwMDAwNDAyMjAwMDVDMDAwMDAwMDBFMQorOjEwMTMxMDAwMDIyMDAwNjAwMDAwMDAwMTAyMjAwMDY0MDAwMDAwMDNDMQorOjEwMTMyMDAwMDIyMDAwNjgwMDAwMDAwMDAyMjAwMDZDMDAwMDAwMDFBNAorOjEwMTMzMDAwMDIyMDAwNzAwMDAwMDAwNDAyMjAwMDc0MDAwMDAwMDA4MQorOjEwMTM0MDAwMDIyMDAwNzgwMDAwMDAwNDAyMjAwMDdDMDAwMDAwMDM1RQorOjEwMTM1MDAwMDYyMDAwODAwMDAwMDAwMjAyMjAwMEE0MDAwMDNGRkZFMQorOjEwMTM2MDAwMDIyMDAwQTgwMDAwMDNGRjAyMjAwMjI0MDAwMDAwMDA2OQorOjEwMTM3MDAwMDIyMDAyMzQwMDAwMDAwMDAyMjAwMjRDMDAwMDAwMDBBNQorOjEwMTM4MDAwMDIyMDAyRTQwMDAwRkZGRjA2MjAyMDAwMDAwMDA4MDAwOQorOjEwMTM5MDAwMDIyMzhCQzAwMDAwMDAwMTAyMjM4MDAwMDAwMDAwMTAyNworOjEwMTNBMDAwMDIyMzgwNDAwMDAwMDAxMjAyMjM4MDgwMDAwMDAwMzBGMQorOjEwMTNCMDAwMDIyMzgwQzAwMDAwMDAwRTAyMjM4M0MwMDAwMDAxRjQ1RAorOjEwMTNDMDAwMDYyMjUwMDAwMDAwMDA0MjA2MjIxMDIwMDAwMDAwQzg0MworOjEwMTNEMDAwMDYyMjEwMDAwMDAwMDAwMjA2MjIyMDAwMDAwMDAwQzBDQgorOjEwMTNFMDAwMDYyMjI1QzAwMDAwMDI0MDA0MjIyRUM4MDAwODAyQUREQgorOjEwMTNGMDAwMDIyMzA4MDAwMTNGRkZGRjA0MjMwQzAwMDAxMDAyQjU4OAorOjEwMTQwMDAwMDIyMzA4MDAwMDAwMDAwMDA0MjMwQzQwMDAxMDAyQzU2NQorOjEwMTQxMDAwMDYyMjMwNDAwMDAwMDBBMDA2MjIzNTQwMDAwMDAwMTBFNworOjEwMTQyMDAwMDYyMjM2QzAwMDAwMDAzMDA2MjI0MDAwMDAwMDAyMDAwNAorOjEwMTQzMDAwMDYyMjM1QzAwMDAwMDAyMDA2MjIzODQwMDAwMDAwMzA5RgorOjEwMTQ0MDAwMDYyMjMwMDAwMDAwMDAwODAyMjI1MTE4MDAwMDAwMDBBRgorOjEwMTQ1MDAwMDYyMjIzMDAwMDAwMDAwRTA2MjIyNDEwMDAwMDAwMzBBNworOjEwMTQ2MDAwMDYyMjMyQzAwMDAwMDBBMDA2MjIzNTgwMDAwMDAwMTBENQorOjEwMTQ3MDAwMDYyMjM3ODAwMDAwMDAzMDA2MjI0ODAwMDAwMDAyMDBFQgorOjEwMTQ4MDAwMDYyMjM2NDAwMDAwMDAyMDA2MjIzOTAwMDAwMDAwMzAwRAorOjEwMTQ5MDAwMDYyMjMwMjAwMDAwMDAwODAyMjI1MTFDMDAwMDAwMDAzQgorOjEwMTRBMDAwMDYyMjIzMzgwMDAwMDAwRTA2MjIyNEQwMDAwMDAwMzA1RgorOjEwMTRCMDAwMDIxNjEwMDAwMDAwMDAyODAyMTcwMDA4MDAwMDAwMDJCOQorOjEwMTRDMDAwMDIxNzAwMkMwMDAwMDAwMzAyMTcwMDNDMDAwMDAwMDQ3QgorOjEwMTREMDAwMDIxNzAwNDQwMDAwMDAwODAyMTcwMDQ4MDAwMDAwMDI0NAorOjEwMTRFMDAwMDIxNzAwNEMwMDAwMDA5MDAyMTcwMDUwMDAwMDAwOTAwRQorOjEwMTRGMDAwMDIxNzAwNTQwMDgwMDA5MDAyMTcwMDU4MDgxNDAwMDBFMgorOjEwMTUwMDAwMDIxNzAwNjAwMDAwMDA4QTAyMTcwMDY0MDAwMDAwODBEQgorOjEwMTUxMDAwMDIxNzAwNjgwMDAwMDA4MTAyMTcwMDZDMDAwMDAwODBDNAorOjEwMTUyMDAwMDIxNzAwNzAwMDAwMDAwNjAyMTcwMDc4MDAwMDA3RDBDNAorOjEwMTUzMDAwMDIxNzAwN0MwMDAwMDc2QzAyMTcwMDM4MDA3QzEwMDRDMgorOjEwMTU0MDAwMDIxNzAwMDQwMDAwMDAwRjA2MTY0MDI0MDAwMDAwMDJFRAorOjEwMTU1MDAwMDIxNjQwNzAwMDAwMDAxQzAyMTY0MjA4MDAwMDAwMDE0NAorOjEwMTU2MDAwMDIxNjQyMTAwMDAwMDAwMTAyMTY0MjIwMDAwMDAwMDE5NQorOjEwMTU3MDAwMDIxNjQyMjgwMDAwMDAwMTAyMTY0MjMwMDAwMDAwMDE1RAorOjEwMTU4MDAwMDIxNjQyMzgwMDAwMDAwMTAyMTY0MjYwMDAwMDAwMDEwRAorOjEwMTU5MDAwMEMxNjQwMUMwMDAzRDA5MDBBMTY0MDFDMDAwMDAwOUM1MgorOjEwMTVBMDAwMEIxNjQwMUMwMDAwMDlDNDAyMTY0MDMwMDAwMDAwMDg2MQorOjEwMTVCMDAwMDIxNjQwMzQwMDAwMDAwQzAyMTY0MDM4MDAwMDAwMTBGMworOjEwMTVDMDAwMDIxNjQwNDQwMDAwMDAyMDAyMTY0MDAwMDAwMDAwMDEwNgorOjEwMTVEMDAwMDIxNjQwRDgwMDAwMDAwMTAyMTY0MDA4MDAwMDAwMDE3OQorOjEwMTVFMDAwMDIxNjQwMEMwMDAwMDAwMTAyMTY0MDEwMDAwMDAwMDEyRAorOjEwMTVGMDAwMDIxNjQyNDAwMDAwMDAwMDAyMTY0MjQ4MDAwMDAwMDBBRgorOjEwMTYwMDAwMDYxNjQyNzAwMDAwMDAwMjAyMTY0MjUwMDAwMDAwMDA2MAorOjEwMTYxMDAwMDIxNjQyNTgwMDAwMDAwMDA2MTY0MjgwMDAwMDAwMDIzOAorOjEwMTYyMDAwMDIxNjYwMDgwMDAwMDYxNDAyMTY2MDBDMDAwMDA2MDA5NgorOjEwMTYzMDAwMDIxNjYwMTAwMDAwMDYwNDAyMTY2MDFDMDAwMEZGRkY4NgorOjEwMTY0MDAwMDIxNjYwMjAwMDAwRkZGRjAyMTY2MDI0MDAwMEZGRkY2QQorOjEwMTY1MDAwMDIxNjYwMjgwMDAwRkZGRjAyMTY2MDM4MDAwMDAwMjAxQworOjEwMTY2MDAwMDIxNjYwM0MwMDAwMDAyMDAyMTY2MDQwMDAwMDAwMzRCQQorOjEwMTY3MDAwMDIxNjYwNDQwMDAwMDAzNTAyMTY2MDQ4MDAwMDAwMjM5NgorOjEwMTY4MDAwMDIxNjYwNEMwMDAwMDAyNDAyMTY2MDUwMDAwMDAwMjU4NQorOjEwMTY5MDAwMDIxNjYwNTQwMDAwMDAyNjAyMTY2MDU4MDAwMDAwMjc2MQorOjEwMTZBMDAwMDIxNjYwNUMwMDAwMDAyOTAyMTY2MDYwMDAwMDAwMkEzQgorOjEwMTZCMDAwMDIxNjYwNjQwMDAwMDAyQjAyMTY2MDY4MDAwMDAwMkMxNworOjEwMTZDMDAwMDIxNjYwNkMwMDAwMDAyRDA2MTY2MDcwMDAwMDAwNTJDQgorOjEwMTZEMDAwMDIxNjYxQjgwMDAwMDAwMTA2MTY2MUJDMDAwMDAwMUY4MAorOjEwMTZFMDAwMDIxNjYyMzgwN0ZGRkZGRjAyMTY2MjNDMDAwMDAwM0Y0RgorOjEwMTZGMDAwMDIxNjYyNDAwN0ZGRkZGRjAyMTY2MjQ0MDAwMDAwMEY1RgorOjEwMTcwMDAwMDExNjYyNDgwMDAwMDAwMDAxMTY2MjRDMDAwMDAwMDA1MworOjEwMTcxMDAwMDExNjYyNTAwMDAwMDAwMDAxMTY2MjU0MDAwMDAwMDAzMworOjEwMTcyMDAwMDExNjYyNTgwMDAwMDAwMDAxMTY2MjVDMDAwMDAwMDAxMworOjEwMTczMDAwMDExNjYyNjAwMDAwMDAwMDAxMTY2MjY0MDAwMDAwMDBGMworOjEwMTc0MDAwMDExNjYyNjgwMDAwMDAwMDAxMTY2MjZDMDAwMDAwMDBEMworOjEwMTc1MDAwMDExNjYyNzAwMDAwMDAwMDAxMTY2Mjc0MDAwMDAwMDBCMworOjEwMTc2MDAwMDExNjYyNzgwMDAwMDAwMDAxMTY2MjdDMDAwMDAwMDA5MworOjEwMTc3MDAwMDIxNjY0QkMwMDAwMDAwMTBDMTY2MDAwMDAwMDAzRThDMworOjEwMTc4MDAwMEExNjYwMDAwMDAwMDAwMTBCMTY2MDAwMDAwMDAwMEE0RAorOjEwMTc5MDAwMDIxNjgwNDAwMDAwMDAwNjAyMTY4MDQ0MDAwMDAwMDU4QQorOjEwMTdBMDAwMDIxNjgwNDgwMDAwMDAwQTAyMTY4MDRDMDAwMDAwMDU2NgorOjEwMTdCMDAwMDIxNjgwNTQwMDAwMDAwMjAyMTY4MENDMDAwMDAwMDREMworOjEwMTdDMDAwMDIxNjgwRDAwMDAwMDAwNDAyMTY4MEQ0MDAwMDAwMDQzRAorOjEwMTdEMDAwMDIxNjgwRDgwMDAwMDAwNDAyMTY4MERDMDAwMDAwMDQxRAorOjEwMTdFMDAwMDIxNjgwRTAwMDAwMDAwNDAyMTY4MEU0MDAwMDAwMDRGRAorOjEwMTdGMDAwMDIxNjgwRTgwMDAwMDAwNDAyMTY4ODA0MDAwMDAwMDRCRAorOjEwMTgwMDAwMDIxNjgwMzAwMDAwMDA3QzAyMTY4MDM0MDAwMDAwM0Q4QgorOjEwMTgxMDAwMDIxNjgwMzgwMDAwMDAzRjAyMTY4MDNDMDAwMDAwOUM0OQorOjEwMTgyMDAwMDIxNjgwRjAwMDAwMDAwNzA2MTY4MEY0MDAwMDAwMDU5NAorOjEwMTgzMDAwMDIxNjg4MEMwMTAxMDEwMTAyMTY4MTA4MDAwMDAwMDA1NworOjEwMTg0MDAwMDIxNjgxMEMwMDAwMDAwNDAyMTY4MTEwMDAwMDAwMDQ0MgorOjEwMTg1MDAwMDIxNjgxMTQwMDAwMDAwMjAyMTY4ODEwMDgwMTIwMDRGQworOjEwMTg2MDAwMDIxNjgxMTgwMDAwMDAwNTAyMTY4MTFDMDAwMDAwMDUwOAorOjEwMTg3MDAwMDIxNjgxMjAwMDAwMDAwNTAyMTY4MTI0MDAwMDAwMDVFOAorOjEwMTg4MDAwMDIxNjg4MkMyMDA4MTAwMTAyMTY4MTI4MDAwMDAwMDg4QQorOjEwMTg5MDAwMDIxNjgxMkMwMDAwMDAwNjAyMTY4MTMwMDAwMDAwMDdBRAorOjEwMThBMDAwMDIxNjgxMzQwMDAwMDAwMDAyMTY4ODMwMDEwMTAxMjA3OAorOjEwMThCMDAwMDYxNjgxMzgwMDAwMDAwNDAyMTY4ODM0MDEwMTAxMDE3NworOjEwMThDMDAwMDYxNjgxNDgwMDAwMDAwNDAyMTY4ODM4MDEwMTAxMDE1MworOjEwMThEMDAwMDYxNjgxNTgwMDAwMDAwNDAyMTY4ODNDMDEwMTAxMDEyRgorOjEwMThFMDAwMDYxNjgxNjgwMDAwMDAwMzAyMTY4MTc0MDAwMDAwMDFFMgorOjEwMThGMDAwMDIxNjg4NDAwMTAxMDEwMTAyMTY4MTc4MDAwMDAwMDFGMgorOjEwMTkwMDAwMDIxNjgxN0MwMDAwMDAwMTAyMTY4MTgwMDAwMDAwMDFBNworOjEwMTkxMDAwMDIxNjgxODQwMDAwMDAwMTAyMTY4ODQ0MDEwMTAxMDFDMQorOjEwMTkyMDAwMDIxNjgxODgwMDAwMDAwMTAyMTY4MThDMDAwMDAwMDQ2QworOjEwMTkzMDAwMDIxNjgxOTAwMDAwMDAwNDAyMTY4MTk0MDAwMDAwMDI0QgorOjEwMTk0MDAwMDIxNjg4NDgwODAxMjAwNDAyMTY4MTk4MDAwMDAwMDU0QworOjEwMTk1MDAwMDIxNjgxOUMwMDAwMDAwNTAyMTY4MUEwMDAwMDAwMDUwRgorOjEwMTk2MDAwMDIxNjgxQTQwMDAwMDAwNTAyMTY4ODE0MjAwODEwMDE0OAorOjEwMTk3MDAwMDIxNjgxQTgwMDAwMDAwODAyMTY4MUFDMDAwMDAwMDZEMworOjEwMTk4MDAwMDIxNjgxQjAwMDAwMDAwNzAyMTY4MUI0MDAwMDAwMDFCOQorOjEwMTk5MDAwMDIxNjg4MTgwMTAxMDEyMDAyMTY4MUI4MDAwMDAwMDExQQorOjEwMTlBMDAwMDIxNjgxQkMwMDAwMDAwMTAyMTY4MUMwMDAwMDAwMDE4NworOjEwMTlCMDAwMDIxNjgxQzQwMDAwMDAwMTAyMTY4ODFDMDEwMTAxMDEwOQorOjEwMTlDMDAwMDIxNjgxQzgwMDAwMDAwMTAyMTY4MUNDMDAwMDAwMDE0RgorOjEwMTlEMDAwMDIxNjgxRDAwMDAwMDAwMTAyMTY4MUQ0MDAwMDAwMDEyRgorOjEwMTlFMDAwMDIxNjg4MjAwMTAxMDEwMTAyMTY4MUQ4MDAwMDAwMDFDMQorOjEwMTlGMDAwMDIxNjgxREMwMDAwMDAwMTAyMTY4MUUwMDAwMDAwMDFGNworOjEwMUEwMDAwMDIxNjgxRTQwMDAwMDAwMTAyMTY4ODI0MDEwMTAxMDE5MAorOjEwMUExMDAwMDIxNjgxRTgwMDAwMDAwMTAyMTY4MUVDMDAwMDAwMDFCRQorOjEwMUEyMDAwMDIxNjgxRjAwMDAwMDAwMTAyMTY4ODI4MDEwMTAxMDE2MAorOjEwMUEzMDAwMDIxNjgyNDBGRkZGMDAzRjA2MTY4MjQ0MDAwMDAwMDJBQgorOjEwMUE0MDAwMDIxNjgyNENGRkZGMDAzRjAyMTY4MjUwMDAwMDAxMDA4OAorOjEwMUE1MDAwMDIxNjgyNTQwMDAwMDEwMDA2MTY4MjU4MDAwMDAwMDI5RgorOjEwMUE2MDAwMDIxNjgyNjAwMDAwMDBDMDAyMTY4MjY0MDAwMDAwQzBGRQorOjEwMUE3MDAwMDIxNjgyNjgwMDAwMUUwMDAyMTY4MjZDMDAwMDFFMDAyMgorOjEwMUE4MDAwMDIxNjgyNzAwMDAwNDAwMDAyMTY4Mjc0MDAwMDQwMDBCRQorOjEwMUE5MDAwMDIxNjgyNzgwMDAwODAwMDAyMTY4MjdDMDAwMDgwMDAxRQorOjEwMUFBMDAwMDIxNjgyODAwMDAwMjAwMDAyMTY4Mjg0MDAwMDIwMDBCRQorOjEwMUFCMDAwMDYxNjgyODgwMDAwMDAwNzAyMTY4MkE0MDAwMDAwMDFCQQorOjEwMUFDMDAwMDYxNjgyQTgwMDAwMDAwQTAyMTY4MUY0MDAwMDBDMDgyNQorOjEwMUFEMDAwMDIxNjgxRjgwMDAwMDA0MDAyMTY4MUZDMDAwMDAxMDA5RgorOjEwMUFFMDAwMDIxNjgyMDAwMDAwMDAyMDAyMTY4MjA0MDAwMDAwMTc4NworOjEwMUFGMDAwMDIxNjgyMDgwMDAwMDA4MDAyMTY4MjBDMDAwMDAyMDAxQworOjEwMUIwMDAwMDIxNjgyMTAwMDAwMDAwMDAyMTY4MjE4RkZGRjAxRkY3QgorOjEwMUIxMDAwMDIxNjgyMTRGRkZGMDFGRjAyMTY4MjNDMDAwMDAwMTMzMAorOjEwMUIyMDAwMDIxNjgwOTAwMDAwMDEzRjAyMTY4MDYwMDAwMDAxNDAxNAorOjEwMUIzMDAwMDIxNjgwNjQwMDAwMDE0MDA2MTY4MDY4MDAwMDAwMDI2MgorOjEwMUI0MDAwMDIxNjgwNzAwMDAwMDBDMDA2MTY4MDc0MDAwMDAwMDdCNgorOjEwMUI1MDAwMDIxNjgwOUMwMDAwMDA0ODAyMTY4MEEwMDAwMDAwNDg4OQorOjEwMUI2MDAwMDYxNjgwQTQwMDAwMDAwMjAyMTY4MEFDMDAwMDAwNDhBNworOjEwMUI3MDAwMDYxNjgwQjAwMDAwMDAwNzAyMTY4MjM4MDAwMDgwMDBDMAorOjEwMUI4MDAwMDIxNjgyMzQwMDAwMjVFNDAyMTY4MDk0MDAwMDdGRkZENAorOjEwMUI5MDAwMDIxNjgyMjAwMDAwMDAwNzAyMTY4MjFDMDAwMDAwMDdDNworOjEwMUJBMDAwMDIxNjgyMjgwMDAwMDAwMDAyMTY4MjI0RkZGRkZGRkZCOQorOjEwMUJCMDAwMDIxNjgyMzAwMDAwMDAwMDAyMTY4MjJDRkZGRkZGRkY5OQorOjEwMUJDMDAwMDIxNjgwRUMwMDAwMDBGRjAyMTQwMDAwMDAwMDAwMDE3QgorOjEwMUJEMDAwMDIxNDAwMEMwMDAwMDAwMTAyMTQwMDQwMDAwMDAwMDE4QgorOjEwMUJFMDAwMDIxNDAwNDQwMDAwN0ZGRjAyMTQwMDBDMDAwMDAwMDBGQgorOjEwMUJGMDAwMDIxNDAwMDAwMDAwMDAwMDAyMTQwMDZDMDAwMDAwMDA0RAorOjEwMUMwMDAwMDIxNDAwMDQwMDAwMDAwMTAyMTQwMDMwMDAwMDAwMDE3MgorOjEwMUMxMDAwMDIxNDAwMDQwMDAwMDAwMDAyMTQwMDVDMDAwMDAwMDAzOAorOjEwMUMyMDAwMDIxNDAwMDgwMDAwMDAwMTAyMTQwMDM0MDAwMDAwMDE0QQorOjEwMUMzMDAwMDIxNDAwMDgwMDAwMDAwMDAyMTQwMDYwMDAwMDAwMDAxMAorOjEwMUM0MDAwMDIwMjAwNTgwMDAwMDAzMjAyMDIwMEEwMDMxNTAwMjAyQQorOjEwMUM1MDAwMDIwMjAwQTQwMzE1MDAyMDAyMDIwMEE4MDEwMDAwMzBDNworOjEwMUM2MDAwMDIwMjAwQUMwODEwMDAwMDAyMDIwMEIwMDAwMDAwMzNDNQorOjEwMUM3MDAwMDIwMjAwQjQwMDAwMDAzMDAyMDIwMEI4MDAwMDAwMzE4RgorOjEwMUM4MDAwMDIwMjAwQkMwMDAwMDAwMzAyMDIwMEMwMDAwMDAwMDZDNworOjEwMUM5MDAwMDIwMjAwQzQwMDAwMDAwMzAyMDIwMEM4MDAwMDAwMDNBQQorOjEwMUNBMDAwMDIwMjAwQ0MwMDAwMDAwMjAyMDIwMEQwMDAwMDAwMDA4RQorOjEwMUNCMDAwMDIwMjAwRDQwMDAwMDAwMjAyMDIwMERDMDAwMDAwMDA2QQorOjEwMUNDMDAwMDIwMjAwRTAwMDAwMDAwNjAyMDIwMEU0MDAwMDAwMDQzRQorOjEwMUNEMDAwMDIwMjAwRTgwMDAwMDAwMjAyMDIwMEVDMDAwMDAwMDIyNAorOjEwMUNFMDAwMDIwMjAwRjAwMDAwMDAwMTAyMDIwMEZDMDAwMDAwMDZGOQorOjEwMUNGMDAwMDIwMjAxMjAwMDAwMDAwMDAyMDIwMTM0MDAwMDAwMDI4NAorOjEwMUQwMDAwMDIwMjAxQjAwMDAwMDAwMTAyMDIwMjBDMDAwMDAwMDEwQQorOjEwMUQxMDAwMDIwMjAyMTQwMDAwMDAwMTAyMDIwMjE4MDAwMDAwMDI4OAorOjEwMUQyMDAwMDIwMjA0MDQwMDAwMDAwMTAyMDIwNDBDMDAwMDAwNDA1MgorOjEwMUQzMDAwMDIwMjA0MTAwMDAwMDA0MDAyMDIwNDFDMDAwMDAwMDQyMworOjEwMUQ0MDAwMDIwMjA0MjAwMDAwMDAyMDAyMDIwNDI0MDAwMDAwMDIxRAorOjEwMUQ1MDAwMDIwMjA0MjgwMDAwMDAxRjA2MDIwNTAwMDAwMDAwMTIxNQorOjEwMUQ2MDAwMDQwMjA0ODAwMDFGMDJENTAyMDIwMDYwMDAwMDAwMEY4MAorOjEwMUQ3MDAwMDIwMjAwNjQwMDAwMDAwNzAyMDIwMDY4MDAwMDAwMEI3RAorOjEwMUQ4MDAwMDIwMjAwNkMwMDAwMDAwRTA2MDIwMDcwMDAwMDAwMDQ1OQorOjEwMUQ5MDAwMDIwMjAwRjQwMDAwMDAwNDAyMDIwMDA0MDAwMDAwMDEzRQorOjEwMURBMDAwMDIwMjAwMDgwMDAwMDAwMTAyMDIwMDBDMDAwMDAwMDExNQorOjEwMURCMDAwMDIwMjAwMTAwMDAwMDAwMTAyMDIwMDE0MDAwMDAwMDFGNQorOjEwMURDMDAwMDIwMjAwMTgwMDAwMDAwMTAyMDIwMDFDMDAwMDAwMDFENQorOjEwMUREMDAwMDIwMjAwMjAwMDAwMDAwMTAyMDIwMDI0MDAwMDAwMDFCNQorOjEwMURFMDAwMDIwMjAwMjgwMDAwMDAwMTAyMDIwMDJDMDAwMDAwMDE5NQorOjEwMURGMDAwMDIwMjAwMzAwMDAwMDAwMTAyMDIwMDM0MDAwMDAwMDE3NQorOjEwMUUwMDAwMDIwMjAwMzgwMDAwMDAwMTAyMDIwMDNDMDAwMDAwMDE1NAorOjEwMUUxMDAwMDIwMjAwNDAwMDAwMDAwMTAyMDIwMDQ0MDAwMDAwMDEzNAorOjEwMUUyMDAwMDIwMjAwNDgwMDAwMDAwMTAyMDIwMDRDMDAwMDAwMDExNAorOjEwMUUzMDAwMDIwMjAwNTAwMDAwMDAwMTAyMDIwMTA4MDAwMDAwQzg3OAorOjEwMUU0MDAwMDIwMjAxMTgwMDAwMDAwMjAyMDIwMUM0MDAwMDAwMDBBQQorOjEwMUU1MDAwMDIwMjAxQ0MwMDAwMDAwMDAyMDIwMUQ0MDAwMDAwMDJENgorOjEwMUU2MDAwMDIwMjAxREMwMDAwMDAwMjAyMDIwMUU0MDAwMDAwRkZBNworOjEwMUU3MDAwMDIwMjAxRUMwMDAwMDBGRjAyMDIwMTBDMDAwMDAwQzg5OQorOjEwMUU4MDAwMDIwMjAxMUMwMDAwMDAwMjAyMDIwMUM4MDAwMDAwMDA2MgorOjEwMUU5MDAwMDIwMjAxRDAwMDAwMDAwMDAyMDIwMUQ4MDAwMDAwMDI4RQorOjEwMUVBMDAwMDIwMjAxRTAwMDAwMDAwMjAyMDIwMUU4MDAwMDAwRkY1RgorOjEwMUVCMDAwMDIwMjAxRjAwMDAwMDBGRjA3MjgwNDAwMDBCNTAwMDA0NgorOjEwMUVDMDAwMDgyODA3NjgwMDEzMDJGNDA3MkMwMDAwMzVENTAwMDAyRAorOjEwMUVEMDAwMDcyQzgwMDAzQTNFMEQ3NjA3MkQwMDAwM0I0NzFDMDY3QworOjEwMUVFMDAwMDcyRDgwMDAyMkJDMkFEODA4MkRDNzcwNDcxMjAyRjZBMQorOjEwMUVGMDAwMDEyODAwMDAwMDAwMDAwMDAxMjgwMDA0MDAwMDAwMDA4QworOjEwMUYwMDAwMDEyODAwMDgwMDAwMDAwMDAxMjgwMDBDMDAwMDAwMDA2QgorOjEwMUYxMDAwMDEyODAwMTAwMDAwMDAwMDAxMjgwMDE0MDAwMDAwMDA0QgorOjEwMUYyMDAwMDIyODAwMjAwMDAwMDAwMTAyMjgwMDI0MDAwMDAwMDIxNgorOjEwMUYzMDAwMDIyODAwMjgwMDAwMDAwMzAyMjgwMDJDMDAwMDAwMDBGNgorOjEwMUY0MDAwMDIyODAwMzAwMDAwMDAwNDAyMjgwMDM0MDAwMDAwMDFENAorOjEwMUY1MDAwMDIyODAwMzgwMDAwMDAwMDAyMjgwMDNDMDAwMDAwMDFCOAorOjEwMUY2MDAwMDIyODAwNDAwMDAwMDAwNDAyMjgwMDQ0MDAwMDAwMDA5NQorOjEwMUY3MDAwMDIyODAwNDgwMDAwMDAwMTAyMjgwMDRDMDAwMDAwMDM3NQorOjEwMUY4MDAwMDIyODAwNTAwMDAwMDAwMDAyMjgwMDU0MDAwMDAwMDE1OAorOjEwMUY5MDAwMDIyODAwNTgwMDAwMDAwNDAyMjgwMDVDMDAwMDAwMDAzNQorOjEwMUZBMDAwMDIyODAwNjAwMDAwMDAwMTAyMjgwMDY0MDAwMDAwMDMxNQorOjEwMUZCMDAwMDIyODAwNjgwMDAwMDAwMDAyMjgwMDZDMDAwMDAwMDFGOAorOjEwMUZDMDAwMDIyODAwNzAwMDAwMDAwNDAyMjgwMDc0MDAwMDAwMDBENQorOjEwMUZEMDAwMDIyODAwNzgwMDAwMDAwNDAyMjgwMDdDMDAwMDAwMDNCMgorOjEwMUZFMDAwMDYyODAwODAwMDAwMDAwMjAyMjgwMEE0MDAwMDNGRkYzNQorOjEwMUZGMDAwMDIyODAwQTgwMDAwMDNGRjAyMjgwMjI0MDAwMDAwMDBCRAorOjEwMjAwMDAwMDIyODAyMzQwMDAwMDAwMDAyMjgwMjRDMDAwMDAwMDBGOAorOjEwMjAxMDAwMDIyODAyRTQwMDAwRkZGRjA2MjgyMDAwMDAwMDA4MDA1QworOjEwMjAyMDAwMDIyQjhCQzAwMDAwMDAwMTAyMkI4MDAwMDAwMDAwMDA4QQorOjEwMjAzMDAwMDIyQjgwNDAwMDAwMDAxODAyMkI4MDgwMDAwMDAwMEM2MgorOjEwMjA0MDAwMDIyQjgwQzAwMDAwMDA2NjBDMkI4MzAwMDAwN0ExMjAzQgorOjEwMjA1MDAwMEEyQjgzMDAwMDAwMDEzODBCMkI4MzAwMDAwMDEzODgzQgorOjEwMjA2MDAwMDIyQjgzQzAwMDAwMDFGNDBDMkI4MzQwMDAwMDAxRjQxQworOjEwMjA3MDAwMEEyQjgzNDAwMDAwMDAwMDBCMkI4MzQwMDAwMDAwMDU2QQorOjEwMjA4MDAwMEEyQjgzODAwMDA0QzRCNDBDMkI4MzgwMURDRDY1MDAxMworOjEwMjA5MDAwMEIyQjgzODAwMDRDNEI0MDA2MkEzQzQwMDAwMDAwMDQ4MAorOjEwMjBBMDAwMDQyQTNDNTAwMDAyMDJGODA2MkEzMDAwMDAwMDAwNDhEMgorOjEwMjBCMDAwMDYyQTEwMjAwMDAwMDBDODA2MkExMDAwMDAwMDAwMDJCNgorOjEwMjBDMDAwMDYyQTMxMjgwMDAwMDA4RTAyMkEzMzY4MDAwMDAwMDAzMgorOjEwMjBEMDAwMDQyQTMzNzAwMDAyMDJGQTA0MkEzQTcwMDAwNDAyRkM1NworOjEwMjBFMDAwMDQyQTNEMDAwMDAyMDMwMDA0MkExNTAwMDAwMjAzMDIzNgorOjEwMjBGMDAwMDYyQTE1MDgwMDAwMDEwMDAyMkExOTcwMDAwMDAwMDBERAorOjEwMjEwMDAwMDIyQTE5NzgwMDAwMDAwMDA0MkExOTYwMDAwMjAzMDQ2MgorOjEwMjExMDAwMDYyQTRBQzAwMDAwMDAwMjA2MkE0QjAwMDAwMDAwMDQwNAorOjEwMjEyMDAwMDQyQTFGNDgwMDAyMDMwNjAyMkIwODAwMDAwMDAwMDBEQQorOjEwMjEzMDAwMDQyQjBDMDAwMDEwMDMwODAyMkIwODAwMDEwMDAwMDAxMworOjEwMjE0MDAwMDQyQjBDNDAwMDA4MDMxODAyMkIwODAwMDIwMDAwMDBCQQorOjEwMjE1MDAwMDQyQjBDNjAwMDA4MDMyMDA2MkEzQTgwMDAwMDAwMTRCQgorOjEwMjE2MDAwMDYyQTNCMjAwMDAwMDAyNDA2MkExNDAwMDAwMDAwMEE3MgorOjEwMjE3MDAwMDYyQTE0NTAwMDAwMDAwNjA2MkEzMzc4MDAwMDAwRDgxMgorOjEwMjE4MDAwMDIyQTNBMzgwMDAwMDAwMDA0MkEzQzU4MDAwMjAzMjhDMgorOjEwMjE5MDAwMDQyQTNDNjgwMDEwMDMyQTA2MkE1MDIwMDAwMDAwMDI4RQorOjEwMjFBMDAwMDYyQTUwMzAwMDAwMDAwMjA2MkE1MDAwMDAwMDAwMDJGQgorOjEwMjFCMDAwMDYyQTUwMTAwMDAwMDAwMjAyMkE1MDQwMDAwMDAwMDBEMQorOjEwMjFDMDAwMDYyQTUwNDgwMDAwMDAwRTAyMkE1MEI4MDAwMDAwMDEwNAorOjEwMjFEMDAwMDQyQTRBQzgwMDAyMDMzQTA2MkE0QjEwMDAwMDAwNDJCMworOjEwMjFFMDAwMDYyQTREMjAwMDAwMDAwNDA2MkEzQUQwMDAwMDAwMTQwMAorOjEwMjFGMDAwMDYyQTNCQjAwMDAwMDAyNDA2MkExNDI4MDAwMDAwMEEyQQorOjEwMjIwMDAwMDYyQTE0NjgwMDAwMDAwNjA2MkEzNkQ4MDAwMDAwRDgwNgorOjEwMjIxMDAwMDIyQTNBM0MwMDAwMDAwMDA0MkEzQzYwMDAwMjAzM0MxMQorOjEwMjIyMDAwMDQyQTNDQTgwMDEwMDMzRTA2MkE1MDI4MDAwMDAwMDJBMQorOjEwMjIzMDAwMDYyQTUwMzgwMDAwMDAwMjA2MkE1MDA4MDAwMDAwMDI1QQorOjEwMjI0MDAwMDYyQTUwMTgwMDAwMDAwMjAyMkE1MDQ0MDAwMDAwMDAzNAorOjEwMjI1MDAwMDYyQTUwODAwMDAwMDAwRTAyMkE1MEJDMDAwMDAwMDEzNworOjEwMjI2MDAwMDQyQTRBRDAwMDAyMDM0RTA2MkE0QzE4MDAwMDAwNDJGRAorOjEwMjI3MDAwMDYyQTREMzAwMDAwMDAwNDAyMTAxMDA4MDAwMDAwMDE4MgorOjEwMjI4MDAwMDIxMDEwMTAwMDAwMDI2NDAyMTAxMDAwMDAwM0QwMDBDMQorOjEwMjI5MDAwMDIxMDEwMDQwMDAwMDAzRDA5MTAxODAwMDIwMDAzNTA1NQorOjEwMjJBMDAwMDkxMDExMDAwMDIwMDU1MDA2MTAxMTgwMDAwMDAwMDJFNgorOjEwMjJCMDAwMDkxMDExODgwMDA2MDU3MDA2MTAxMUEwMDAwMDAwMTgxMgorOjEwMjJDMDAwMDIxMDEwMTAwMDAwMDAwMDA2MTAyNDAwMDAwMDAwRTBDMgorOjEwMjJEMDAwMDIxMDIwMUMwMDAwMDAwMDAyMTAyMDIwMDAwMDAwMDE1RAorOjEwMjJFMDAwMDIxMDIwQzAwMDAwMDAwMTAyMTAyMDA0MDAwMDAwMDFDNAorOjEwMjJGMDAwMDIxMDIwMDgwMDAwMDAwMTA5MTAzQzAwMDAwNTA1NzZDRQorOjEwMjMwMDAwMDkxMDNDMjAwMDA1MDU3QjA5MTAzODAwMDAwNTA1ODBGOAorOjEwMjMxMDAwMDIxMDQwMjgwMDAwMDAxMDAyMTA0MDQ0MDAwMDNGRkY1RgorOjEwMjMyMDAwMDIxMDQwNTgwMDI4MDAwMDAyMTA0MDg0MDA4NDkyNEFBNQorOjEwMjMzMDAwMDIxMDQwNTgwMDAwMDAwMDA2MTA4MDY4MDAwMDAwMDRGMQorOjEwMjM0MDAwMDIxMDgwMDAwMDAwMTA4MDA2MTA4MDI4MDAwMDAwMDJBQgorOjEwMjM1MDAwMDIxMDgwMzgwMDAwMDAxMDAyMTA4MDQwMDAwMEZGRkZEMworOjEwMjM2MDAwMDIxMDgwNDQwMDAwRkZGRjAyMTA4MDUwMDAwMDAwMDBCNworOjEwMjM3MDAwMDIxMDgxMDAwMDAwMDAwMDA2MTA4MTIwMDAwMDAwMDIxMQorOjEwMjM4MDAwMDIxMDgwMDgwMDAwMDJCNTAyMTA4MDEwMDAwMDAwMDA1QQorOjEwMjM5MDAwMDYxMDgyMDAwMDAwMDA0QTAyMTA4MTA4MDAwMUZGRkZDMQorOjEwMjNBMDAwMDYxMDgxNDAwMDAwMDAwMjAyMTA4MDAwMDAwMDFBODAyOAorOjEwMjNCMDAwMDYxMDkwMDAwMDAwMDAyNDA2MTA5MTIwMDAwMDAwNEE0MgorOjEwMjNDMDAwMDYxMDkzNzAwMDAwMDA0QTA2MTA5NUMwMDAwMDAwNEFGNQorOjEwMjNEMDAwMDIxMDgwMDQwMDAwMTA4MDA2MTA4MDMwMDAwMDAwMDIwRgorOjEwMjNFMDAwMDIxMDgwM0MwMDAwMDAxMDAyMTA4MDQ4MDAwMEZGRkYzNworOjEwMjNGMDAwMDIxMDgwNEMwMDAwRkZGRjAyMTA4MDU0MDAwMDAwMDAxQgorOjEwMjQwMDAwMDIxMDgxMDQwMDAwMDAwMDA2MTA4MTI4MDAwMDAwMDI3NAorOjEwMjQxMDAwMDIxMDgwMEMwMDAwMDJCNTAyMTA4MDE0MDAwMDAwMDBDMQorOjEwMjQyMDAwMDYxMDg0MDAwMDAwMDA0QTAyMTA4MTBDMDAwMUZGRkYyQQorOjEwMjQzMDAwMDYxMDgxNDgwMDAwMDAwMjAyMTA4MDA0MDAwMDFBODA4QgorOjEwMjQ0MDAwMDYxMDkwOTAwMDAwMDAyNDA2MTA5MjQ4MDAwMDAwNEFGOAorOjEwMjQ1MDAwMDYxMDk0OTgwMDAwMDA0QTA2MTA5NkU4MDAwMDAwNEExMgorOjEwMjQ2MDAwMDIxMjA0OTAwMEUzODM0MDAyMTIwNTE0MDAwMDNDMTBBNQorOjEwMjQ3MDAwMDIxMjA1MjAwMDAwMDAwMjAyMTIwNDk0RkZGRkZGRkY3OQorOjEwMjQ4MDAwMDIxMjA0OThGRkZGRkZGRjAyMTIwNDlDRkZGRkZGRkZGMAorOjEwMjQ5MDAwMDIxMjA0QTBGRkZGRkZGRjAyMTIwNEE0RkZGRkZGRkZEMAorOjEwMjRBMDAwMDIxMjA0QThGRkZGRkZGRjAyMTIwNEFDRkZGRkZGRkZCMAorOjEwMjRCMDAwMDIxMjA0QjBGRkZGRkZGRjAyMTIwNEI4RkZGRkZGRkY4QworOjEwMjRDMDAwMDIxMjA0QkNGRkZGRkZGRjAyMTIwNEMwRkZGRkZGRkY2OAorOjEwMjREMDAwMDIxMjA0QzRGRkZGRkZGRjAyMTIwNEM4RkZGRkZGRkY0OAorOjEwMjRFMDAwMDIxMjA0Q0NGRkZGRkZGRjAyMTIwNEQwRkZGRkZGRkYyOAorOjEwMjRGMDAwMDIxMjA0RENGRkZGRkZGRjAyMTIwNEUwRkZGRkZGRkZGOAorOjEwMjUwMDAwMDIxMjA0RTRGRkZGRkZGRjAyMTIwNEU4RkZGRkZGRkZENworOjEwMjUxMDAwMDIxMjA0RUNGRkZGRkZGRjAyMTIwNEYwRkZGRkZGRkZCNworOjEwMjUyMDAwMDIxMjA0RjRGRkZGRkZGRjAyMTIwNEY4RkZGRkZGRkY5NworOjEwMjUzMDAwMDIxMjA0RkNGRkZGRkZGRjAyMTIwNTAwRkZGRkZGRkY3NgorOjEwMjU0MDAwMDIxMjA1MDRGRkZGRkZGRjAyMTIwNTA4RkZGRkZGRkY1NQorOjEwMjU1MDAwMDIxMjA1MENGRkZGRkZGRjAyMTIwNTEwRkZGRkZGRkYzNQorOjEwMjU2MDAwMDIxMjA0RDRGRkZGMzMzMDAyMTIwNEQ4RkZGRjMzNDBCRAorOjEwMjU3MDAwMDIxMjA0QjRGMDAwMzAwMDAyMTIwMzkwMDAwMDAwMDhDMAorOjEwMjU4MDAwMDIxMjAzOUMwMDAwMDAwODA2MTIwM0EwMDAwMDAwMDJEMworOjEwMjU5MDAwMDIxMjAzQkMwMDAwMDAwNDAyMTIwM0M0MDAwMDAwMDQ4NQorOjEwMjVBMDAwMDIxMjAzRDAwMDAwMDAwMDAyMTIwM0RDMDAwMDAwMDA1MQorOjEwMjVCMDAwMDIxMjAzNkMwMDAwMDAwMTAyMTIwMzY4MDAwMDAwM0ZEOQorOjEwMjVDMDAwMDIxMjAxQkMwMDAwMDA0MDAyMTIwMUMwMDAwMDE4MDgwNQorOjEwMjVEMDAwMDIxMjAxQzQwMDAwMDgwMzAyMTIwMUM4MDAwMDA4MDMyRgorOjEwMjVFMDAwMDIxMjAxQ0MwMDAwMDA0MDAyMTIwMUQwMDAwMDAwMDNFMgorOjEwMjVGMDAwMDIxMjAxRDQwMDAwMDgwMzAyMTIwMUQ4MDAwMDA4MDNFRgorOjEwMjYwMDAwMDIxMjAxREMwMDAwMDgwMzAyMTIwMUUwMDAwMTAwMDNENQorOjEwMjYxMDAwMDIxMjAxRTQwMDAwMDgwMzAyMTIwMUU4MDAwMDA4MDNBRQorOjEwMjYyMDAwMDIxMjAxRUMwMDAwMDAwMzAyMTIwMUYwMDAwMDAwMDM5RQorOjEwMjYzMDAwMDIxMjAxRjQwMDAwMDAwMzAyMTIwMUY4MDAwMDAwMDM3RQorOjEwMjY0MDAwMDIxMjAxRkMwMDAwMDAwMzAyMTIwMjAwMDAwMDAwMDM1RAorOjEwMjY1MDAwMDIxMjAyMDQwMDAwMDAwMzAyMTIwMjA4MDAwMDAwMDMzQworOjEwMjY2MDAwMDIxMjAyMEMwMDAwMDAwMzAyMTIwMjEwMDAwMDAwMDMxQworOjEwMjY3MDAwMDIxMjAyMTQwMDAwMDAwMzAyMTIwMjE4MDAwMDAwMDNGQworOjEwMjY4MDAwMDIxMjAyMUMwMDAwMDAwMzAyMTIwMjIwMDAwMDAwMDNEQworOjEwMjY5MDAwMDIxMjAyMjQwMDAwMDAwMzAyMTIwMjI4MDAwMDI0MDM5OAorOjEwMjZBMDAwMDIxMjAyMkMwMDAwMDAyRjAyMTIwMjMwMDAwMDAwMDk2QQorOjEwMjZCMDAwMDIxMjAyMzQwMDAwMDAxOTAyMTIwMjM4MDAwMDAxODRFNAorOjEwMjZDMDAwMDIxMjAyM0MwMDAwMDE4MzAyMTIwMjQwMDAwMDAzMDZENQorOjEwMjZEMDAwMDIxMjAyNDQwMDAwMDAxOTAyMTIwMjQ4MDAwMDAwMDYyMworOjEwMjZFMDAwMDIxMjAyNEMwMDAwMDMwNjAyMTIwMjUwMDAwMDAzMDYxMAorOjEwMjZGMDAwMDIxMjAyNTQwMDAwMDMwNjAyMTIwMjU4MDAwMDBDODY2NworOjEwMjcwMDAwMDIxMjAyNUMwMDAwMDMwNjAyMTIwMjYwMDAwMDAzMDZDRgorOjEwMjcxMDAwMDIxMjAyNjQwMDAwMDAwNjAyMTIwMjY4MDAwMDAwMDZCNQorOjEwMjcyMDAwMDIxMjAyNkMwMDAwMDAwNjAyMTIwMjcwMDAwMDAwMDY5NQorOjEwMjczMDAwMDIxMjAyNzQwMDAwMDAwNjAyMTIwMjc4MDAwMDAwMDY3NQorOjEwMjc0MDAwMDIxMjAyN0MwMDAwMDAwNjAyMTIwMjgwMDAwMDAwMDY1NQorOjEwMjc1MDAwMDIxMjAyODQwMDAwMDAwNjAyMTIwMjg4MDAwMDAwMDYzNQorOjEwMjc2MDAwMDIxMjAyOEMwMDAwMDAwNjAyMTIwMjkwMDAwMDAwMDYxNQorOjEwMjc3MDAwMDIxMjAyOTQwMDAwMDAwNjAyMTIwMjk4MDAwMDAwMDZGNQorOjEwMjc4MDAwMDIxMjAyOUMwMDAwMDAwNjAyMTIwMkEwMDAwMDAzMDZEMgorOjEwMjc5MDAwMDIxMjAyQTQwMDAwMDAxMzAyMTIwMkE4MDAwMDAwMDZBOAorOjEwMjdBMDAwMDIxMjAyQjAwMDAwMTAwNDAyMTIwMkI0MDAwMDEwMDQ3MQorOjEwMjdCMDAwMDIxMjAzMjQwMDEwNjQ0MDAyMTIwMzI4MDAxMDY0NDAzNworOjEwMjdDMDAwMDIxMjAxQjAwMDAwMDAwMTA2MDBBMDAwMDAwMDAwMTY4NworOjEwMjdEMDAwMDIwMEEwNkNCRjVDMDAwMDAyMDBBMDcwRkZGNTFGRUZCQworOjEwMjdFMDAwMDIwMEEwNzQwMDAwRkZGRjAyMDBBMDc4NTAwMDAzRTA4OAorOjEwMjdGMDAwMDIwMEEwN0MwMDAwMDAwMDAyMDBBMDgwMDAwMEEwMDBGOQorOjEwMjgwMDAwMDYwMEEwODQwMDAwMDAwNTAyMDBBMDk4MEZFMDAwMDA3MAorOjEwMjgxMDAwMDYwMEEwOUMwMDAwMDAxNDAyMDBBMEVDNTU1NDAwMDAyQgorOjEwMjgyMDAwMDIwMEEwRjA1NTU1NTU1NTAyMDBBMEY0MDAwMDU1NTU4MgorOjEwMjgzMDAwMDIwMEEwRjgwMDAwMDAwMDAyMDBBMEZDNTU1NDAwMDBCNworOjEwMjg0MDAwMDIwMEExMDA1NTU1NTU1NTAyMDBBMTA0MDAwMDU1NTU0MAorOjEwMjg1MDAwMDIwMEExMDgwMDAwMDAwMDAyMDBBMjJDMDAwMDAwMDBGRAorOjEwMjg2MDAwMDYwMEEyMzAwMDAwMDAwMzAyMDBBMDYwMDAwMDAwMDc4NAorOjEwMjg3MDAwMDIwMEExMENCRjVDMDAwMDAyMDBBMTEwRkZGNTFGRUZEOQorOjEwMjg4MDAwMDIwMEExMTQwMDAwRkZGRjAyMDBBMTE4NTAwMDAzRTBBNQorOjEwMjg5MDAwMDIwMEExMUMwMDAwMDAwMDAyMDBBMTIwMDAwMEEwMDAxNgorOjEwMjhBMDAwMDYwMEExMjQwMDAwMDAwNTAyMDBBMTM4MEZFMDAwMDA4RQorOjEwMjhCMDAwMDYwMEExM0MwMDAwMDAxNDAyMDBBMThDNTU1NDAwMDA0OQorOjEwMjhDMDAwMDIwMEExOTA1NTU1NTU1NTAyMDBBMTk0MDAwMDU1NTVBMAorOjEwMjhEMDAwMDIwMEExOTgwMDAwMDAwMDAyMDBBMTlDNTU1NDAwMDBENQorOjEwMjhFMDAwMDIwMEExQTA1NTU1NTU1NTAyMDBBMUE0MDAwMDU1NTU2MAorOjEwMjhGMDAwMDIwMEExQTgwMDAwMDAwMDAyMDBBMjNDMDAwMDAwMDBBRAorOjEwMjkwMDAwMDYwMEEyNDAwMDAwMDAwMzAyMDBBMDY0MDAwMDAwMDdDRgorOjEwMjkxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFMDAwMDAwMDA4OQorOjEwMjkyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNworOjEwMjkzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NworOjEwMjk0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NworOjEwMjk1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NworOjEwMjk2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NworOjEwMjk3MDAwMDAyRTAwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEOQorOjEwMjk4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NworOjEwMjk5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MDAwOEQ1QQorOjEwMjlBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNworOjEwMjlCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNworOjEwMjlDMDAwMDAwMDAwMDAwMDAwMDAwMDAwOEQwMDkyMDA5MjAwOTZDMAorOjEwMjlEMDAwMDA5NjAwOUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNworOjEwMjlFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNworOjEwMjlGMDAwMDAwMDAwMDAwMDlBMDBEQjAwREIwMEU5MDBFOTAwRjdCRQorOjEwMkEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNgorOjEwMkExMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNgorOjEwMkEyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNgorOjEwMkEzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5NgorOjEwMkE0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NgorOjEwMkE1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NgorOjEwMkE2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NgorOjEwMkE3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NgorOjEwMkE4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0NgorOjEwMkE5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNgorOjEwMkFBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMkFCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNgorOjEwMkFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNgorOjEwMkFEMDAwMDBGNzAwRkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMQorOjEwMkFFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNgorOjEwMkFGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENgorOjEwMkIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDNQorOjEwMkIxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNQorOjEwMkIyMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUwMTAzMDEwMzAxMEU5MAorOjEwMkIzMDAwMDEwRTAxMTkwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2QworOjEwMkI0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NQorOjEwMkI1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3NQorOjEwMkI2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2NQorOjEwMkI3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NQorOjEwMkI4MDAwMDExOTAxMUEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMAorOjEwMkI5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzNQorOjEwMkJBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDExQTAxNTJCNworOjEwMkJCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxNQorOjEwMkJDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQorOjEwMkJEMDAwMDAwMDAwMDAwMDAwMDAwMDAxNTIwMTc2MDAwMDAwMDAyQgorOjEwMkJFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFNQorOjEwMkJGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENQorOjEwMkMwMDAwMDAwMDAwMDAwMTc2MDFCNTAwMDAwMDAwMDAwMDAwMDA5NworOjEwMkMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCNAorOjEwMkMyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwMkMzMDAwMDFCNTAxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFRAorOjEwMkM0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4NAorOjEwMkM1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDFGMDAyMzU0QworOjEwMkM2MDAwMDIzNTAyMzgwMjM4MDIzQjAwMDAwMDAwMDAwMDAwMDA3QworOjEwMkM3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NAorOjEwMkM4MDAwMDAwMDAwMDAwMDAwMDAwMDAyM0IwMjc2MDI3NjAyODA5NQorOjEwMkM5MDAwMDI4MDAyOEEwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNgorOjEwMkNBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyNAorOjEwMkNCMDAwMDAwMDAwMDAwMjhBMDI4QjAwMDAwMDAwMDAwMDAwMDBGQgorOjEwMkNDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNAorOjEwMkNEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGNAorOjEwMkNFMDAwMDI4QjAyOUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBCOAorOjEwMkNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBENAorOjEwMkQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDI5RDAyQjI3MAorOjEwMkQxMDAwMDJCMjAyQjUwMkI1MDJCODAwMDAwMDAwMDAwMDAwMDBENworOjEwMkQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMworOjEwMkQzMDAwMDAwMDAwMDAwMDAwMDAwMDAyQjgwMkU2MDAwMDAwMDBGMQorOjEwMkQ0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MworOjEwMkQ1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MworOjEwMkQ2MDAwMDAwMDAwMDAwMkU2MDM2RDAwMDAwMDAwMDAwMDAwMDAwQgorOjEwMkQ3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MworOjEwMkQ4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MworOjEwMkQ5MDAwMDM2RDAzNzQwMzc0MDM3ODAzNzgwMzdDMDAwMDAwMDA2MAorOjEwMkRBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMworOjEwMkRCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDM3QzAzQkJENgorOjEwMkRDMDAwMDNCQjAzQzMwM0MzMDNDQjAwMDAwMDAwMDAwMDAwMDBFQgorOjEwMkREMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMworOjEwMkRFMDAwMDAwMDAwMDAwMDAwMDAwMDAzQ0IwNDFGMDQxRjA0MzE5QQorOjEwMkRGMDAwMDQzMTA0NDMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1NworOjEwMkUwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMgorOjEwMkUxMDAwMDAwMDAwMDAwNDQzMDQ0RDAwMDAwMDAwMDAwMDAwMDAxQQorOjEwMkUyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBMgorOjEwMkUzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MgorOjEwMkU0MDAwMDQ0RDA0NTMwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBEQQorOjEwMkU1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MgorOjEwMkU2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQ1MzA0NTZCMQorOjEwMkU3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MgorOjEwMkU4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MgorOjEwMkU5MDAwMDAwMDAwMDAwMDAwMDAwMDA0NTYwNDVCMDAwMDAwMDA3OQorOjEwMkVBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyMgorOjEwMkVCMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMgorOjEwMkVDMDAwMDAwMDAwMDAwNDVCMDQ1QzA0NUMwNDZFMDQ2RTA0ODA3QgorOjEwMkVEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBGMgorOjEwMkVFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBFMgorOjEwMkVGMDAwMDQ4MDA0RUQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1RAorOjEwMkYwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBDMQorOjEwMkYxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDRFRDA0RUVDRQorOjEwMkYyMDAwMDRFRTA1MDIwNTAyMDUxNjAwMDAwMDAwMDAwMDAwMDA4NgorOjEwMkYzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA5MQorOjEwMkY0MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4MQorOjEwMkY1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3MQorOjEwMkY2MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA2MQorOjEwMkY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1MQorOjEwMkY4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MQorOjEwMkY5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAzMQorOjEwMkZBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMjA0QzA1QQorOjEwMkZCMDAwMDAwMzA5ODAwMDA0MEU0MDAwMDUxMzAwMDAwNjE3QzAzRQorOjEwMkZDMDAwMDAwNzFDODAwMDA4MjE0MDAwMDkyNjAwMDAwQTJBQzBEMgorOjEwMkZEMDAwMDAwQjJGODAwMDBDMzQ0MDAwMEQzOTAwMDAwRTNEQzA2NgorOjEwMkZFMDAwMDAwRjQyODAwMDEwNDc0MDAwMTE0QzAwMDAxMjUwQzBGQQorOjEwMkZGMDAwMDAxMzU1ODAwMDE0NUE0MDAwMTU1RjAwMDAxNjYzQzA4RQorOjEwMzAwMDAwMDAxNzY4ODAwMDE4NkQ0MDAwMTk3MjAwMDAxQTc2QzAyMQorOjEwMzAxMDAwMDAxQjdCODAwMDFDODA0MDAwMUQ4NTAwMDAxRTg5QzBCNQorOjEwMzAyMDAwMDAxRjhFODAwMDIwOTM0MDAwMDAyMDAwMDAwMDQwMDAyMAorOjEwMzAzMDAwMDAwMDYwMDAwMDAwODAwMDAwMDBBMDAwMDAwMEMwMDA1MAorOjEwMzA0MDAwMDAwMEUwMDAwMDAxMDAwMDAwMDEyMDAwMDAwMTQwMDAzRAorOjEwMzA1MDAwMDAwMTYwMDAwMDAxODAwMDAwMDFBMDAwMDAwMUMwMDAyQworOjEwMzA2MDAwMDAwMUUwMDAwMDAyMDAwMDAwMDIyMDAwMDAwMjQwMDAxOQorOjEwMzA3MDAwMDAwMjYwMDAwMDAyODAwMDAwMDJBMDAwMDAwMkMwMDAwOAorOjEwMzA4MDAwMDAwMkUwMDAwMDAzMDAwMDAwMDMyMDAwMDAwMzQwMDBGNQorOjEwMzA5MDAwMDAwMzYwMDAwMDAzODAwMDAwMDNBMDAwMDAwM0MwMDBFNAorOjEwMzBBMDAwMDAwM0UwMDAwMDA0MDAwMDAwMDQyMDAwMDAwNDQwMDBEMQorOjEwMzBCMDAwMDAwNDYwMDAwMDA0ODAwMDAwMDRBMDAwMDAwNEMwMDBDMAorOjEwMzBDMDAwMDAwNEUwMDAwMDA1MDAwMDAwMDUyMDAwMDAwNTQwMDBBRAorOjEwMzBEMDAwMDAwNTYwMDAwMDA1ODAwMDAwMDVBMDAwMDAwNUMwMDA5QworOjEwMzBFMDAwMDAwNUUwMDAwMDA2MDAwMDAwMDYyMDAwMDAwNjQwMDA4OQorOjEwMzBGMDAwMDAwNjYwMDAwMDA2ODAwMDAwMDZBMDAwMDAwNkMwMDA3OAorOjEwMzEwMDAwMDAwNkUwMDAwMDA3MDAwMDAwMDcyMDAwMDAwNzQwMDA2NAorOjEwMzExMDAwMDAwNzYwMDAwMDA3ODAwMDAwMDdBMDAwMDAwN0MwMDA1MworOjEwMzEyMDAwMDAwN0UwMDAwMDA4MDAwMDAwMDgyMDAwMDAwODQwMDA0MAorOjEwMzEzMDAwMDAwODYwMDAwMDA4ODAwMDAwMDhBMDAwMDAwOEMwMDAyRgorOjEwMzE0MDAwMDAwOEUwMDAwMDA5MDAwMDAwMDkyMDAwMDAwOTQwMDAxQworOjEwMzE1MDAwMDAwOTYwMDAwMDA5ODAwMDAwMDlBMDAwMDAwOUMwMDAwQgorOjEwMzE2MDAwMDAwOUUwMDAwMDBBMDAwMDAwMEEyMDAwMDAwQTQwMDBGOAorOjEwMzE3MDAwMDAwQTYwMDAwMDBBODAwMDAwMEFBMDAwMDAwQUMwMDBFNworOjEwMzE4MDAwMDAwQUUwMDAwMDBCMDAwMDAwMEIyMDAwMDAwQjQwMDBENAorOjEwMzE5MDAwMDAwQjYwMDAwMDBCODAwMDAwMEJBMDAwMDAwQkMwMDBDMworOjEwMzFBMDAwMDAwQkUwMDAwMDBDMDAwMDAwMEMyMDAwMDAwQzQwMDBCMAorOjEwMzFCMDAwMDAwQzYwMDAwMDBDODAwMDAwMENBMDAwMDAwQ0MwMDA5RgorOjEwMzFDMDAwMDAwQ0UwMDAwMDBEMDAwMDAwMEQyMDAwMDAwRDQwMDA4QworOjEwMzFEMDAwMDAwRDYwMDAwMDBEODAwMDAwMERBMDAwMDAwREMwMDA3QgorOjEwMzFFMDAwMDAwREUwMDAwMDBFMDAwMDAwMEUyMDAwMDAwRTQwMDA2OAorOjEwMzFGMDAwMDAwRTYwMDAwMDBFODAwMDAwMEVBMDAwMDAwRUMwMDA1NworOjEwMzIwMDAwMDAwRUUwMDAwMDBGMDAwMDAwMEYyMDAwMDAwRjQwMDA0MworOjEwMzIxMDAwMDAwRjYwMDAwMDBGODAwMDAwMEZBMDAwMDAwRkMwMDAzMgorOjEwMzIyMDAwMDAwRkUwMDAwMDEwMDAwMDAwMTAyMDAwMDAxMDQwMDAxRgorOjEwMzIzMDAwMDAxMDYwMDAwMDEwODAwMDAwMTBBMDAwMDAxMEMwMDAwRQorOjEwMzI0MDAwMDAxMEUwMDAwMDExMDAwMDAwMTEyMDAwMDAxMTQwMDBGQgorOjEwMzI1MDAwMDAxMTYwMDAwMDExODAwMDAwMTFBMDAwMDAxMUMwMDBFQQorOjEwMzI2MDAwMDAxMUUwMDAwMDEyMDAwMDAwMTIyMDAwMDAxMjQwMDBENworOjEwMzI3MDAwMDAxMjYwMDAwMDEyODAwMDAwMTJBMDAwMDAxMkMwMDBDNgorOjEwMzI4MDAwMDAxMkUwMDAwMDEzMDAwMDAwMTMyMDAwMDAxMzQwMDBCMworOjEwMzI5MDAwMDAxMzYwMDAwMDEzODAwMDAwMTNBMDAwMDAxM0MwMDBBMgorOjEwMzJBMDAwMDAxM0UwMDAwMDE0MDAwMDAwMTQyMDAwMDAxNDQwMDA4RgorOjEwMzJCMDAwMDAxNDYwMDAwMDE0ODAwMDAwMTRBMDAwMDAxNEMwMDA3RQorOjEwMzJDMDAwMDAxNEUwMDAwMDE1MDAwMDAwMTUyMDAwMDAxNTQwMDA2QgorOjEwMzJEMDAwMDAxNTYwMDAwMDE1ODAwMDAwMTVBMDAwMDAxNUMwMDA1QQorOjEwMzJFMDAwMDAxNUUwMDAwMDE2MDAwMDAwMTYyMDAwMDAxNjQwMDA0NworOjEwMzJGMDAwMDAxNjYwMDAwMDE2ODAwMDAwMTZBMDAwMDAxNkMwMDAzNgorOjEwMzMwMDAwMDAxNkUwMDAwMDE3MDAwMDAwMTcyMDAwMDAxNzQwMDAyMgorOjEwMzMxMDAwMDAxNzYwMDAwMDE3ODAwMDAwMTdBMDAwMDAxN0MwMDAxMQorOjEwMzMyMDAwMDAxN0UwMDAwMDE4MDAwMDAwMTgyMDAwMDAxODQwMDBGRQorOjEwMzMzMDAwMDAxODYwMDAwMDE4ODAwMDAwMThBMDAwMDAxOEMwMDBFRAorOjEwMzM0MDAwMDAxOEUwMDAwMDE5MDAwMDAwMTkyMDAwMDAxOTQwMDBEQQorOjEwMzM1MDAwMDAxOTYwMDAwMDE5ODAwMDAwMTlBMDAwMDAxOUMwMDBDOQorOjEwMzM2MDAwMDAxOUUwMDAwMDFBMDAwMDAwMUEyMDAwMDAxQTQwMDBCNgorOjEwMzM3MDAwMDAxQTYwMDAwMDFBODAwMDAwMUFBMDAwMDAxQUMwMDBBNQorOjEwMzM4MDAwMDAxQUUwMDAwMDFCMDAwMDAwMUIyMDAwMDAxQjQwMDA5MgorOjEwMzM5MDAwMDAxQjYwMDAwMDFCODAwMDAwMUJBMDAwMDAxQkMwMDA4MQorOjEwMzNBMDAwMDAxQkUwMDAwMDFDMDAwMDAwMUMyMDAwMDAxQzQwMDA2RQorOjEwMzNCMDAwMDAxQzYwMDAwMDFDODAwMDAwMUNBMDAwMDAxQ0MwMDA1RAorOjEwMzNDMDAwMDAxQ0UwMDAwMDFEMDAwMDAwMUQyMDAwMDAxRDQwMDA0QQorOjEwMzNEMDAwMDAxRDYwMDAwMDFEODAwMDAwMURBMDAwMDAxREMwMDAzOQorOjEwMzNFMDAwMDAxREUwMDAwMDFFMDAwMDAwMUUyMDAwMDAxRTQwMDAyNgorOjEwMzNGMDAwMDAxRTYwMDAwMDFFODAwMDAwMUVBMDAwMDAxRUMwMDAxNQorOjEwMzQwMDAwMDAxRUUwMDAwMDFGMDAwMDAwMUYyMDAwMDAxRjQwMDAwMQorOjEwMzQxMDAwMDAxRjYwMDAwMDFGODAwMDAwMUZBMDAwMDAxRkMwMDBGMAorOjEwMzQyMDAwMDAxRkUwMDAwMDIwMDAwMDAwMjAyMDAwMDAyMDQwMDBERAorOjEwMzQzMDAwMDAyMDYwMDAwMDIwODAwMDAwMjBBMDAwMDAyMEMwMDBDQworOjEwMzQ0MDAwMDAyMEUwMDAwMDIxMDAwMDAwMjEyMDAwMDAyMTQwMDBCOQorOjEwMzQ1MDAwMDAyMTYwMDAwMDIxODAwMDAwMjFBMDAwMDAyMUMwMDBBOAorOjEwMzQ2MDAwMDAyMUUwMDAwMDIyMDAwMDAwMjIyMDAwMDAyMjQwMDA5NQorOjEwMzQ3MDAwMDAyMjYwMDAwMDIyODAwMDAwMjJBMDAwMDAyMkMwMDA4NAorOjEwMzQ4MDAwMDAyMkUwMDAwMDIzMDAwMDAwMjMyMDAwMDAyMzQwMDA3MQorOjEwMzQ5MDAwMDAyMzYwMDAwMDIzODAwMDAwMjNBMDAwMDAyM0MwMDA2MAorOjEwMzRBMDAwMDAyM0UwMDAwMDI0MDAwMDAwMjQyMDAwMDAyNDQwMDA0RAorOjEwMzRCMDAwMDAyNDYwMDAwMDI0ODAwMDAwMjRBMDAwMDAyNEMwMDAzQworOjEwMzRDMDAwMDAyNEUwMDAwMDI1MDAwMDAwMjUyMDAwMDAyNTQwMDAyOQorOjEwMzREMDAwMDAyNTYwMDAwMDI1ODAwMDAwMjVBMDAwMDAyNUMwMDAxOAorOjEwMzRFMDAwMDAyNUUwMDAwMDI2MDAwMDAwMjYyMDAwMDAyNjQwMDAwNQorOjEwMzRGMDAwMDAyNjYwMDAwMDI2ODAwMDAwMjZBMDAwMDAyNkMwMDBGNAorOjEwMzUwMDAwMDAyNkUwMDAwMDI3MDAwMDAwMjcyMDAwMDAyNzQwMDBFMAorOjEwMzUxMDAwMDAyNzYwMDAwMDI3ODAwMDAwMjdBMDAwMDAyN0MwMDBDRgorOjEwMzUyMDAwMDAyN0UwMDAwMDI4MDAwMDAwMjgyMDAwMDAyODQwMDBCQworOjEwMzUzMDAwMDAyODYwMDAwMDI4ODAwMDAwMjhBMDAwMDAyOEMwMDBBQgorOjEwMzU0MDAwMDAyOEUwMDAwMDI5MDAwMDAwMjkyMDAwMDAyOTQwMDA5OAorOjEwMzU1MDAwMDAyOTYwMDAwMDI5ODAwMDAwMjlBMDAwMDAyOUMwMDA4NworOjEwMzU2MDAwMDAyOUUwMDAwMDJBMDAwMDAwMkEyMDAwMDAyQTQwMDA3NAorOjEwMzU3MDAwMDAyQTYwMDAwMDJBODAwMDAwMkFBMDAwMDAyQUMwMDA2MworOjEwMzU4MDAwMDAyQUUwMDAwMDJCMDAwMDAwMkIyMDAwMDAyQjQwMDA1MAorOjEwMzU5MDAwMDAyQjYwMDAwMDJCODAwMDAwMkJBMDAwMDAyQkMwMDAzRgorOjEwMzVBMDAwMDAyQkUwMDAwMDJDMDAwMDAwMkMyMDAwMDAyQzQwMDAyQworOjEwMzVCMDAwMDAyQzYwMDAwMDJDODAwMDAwMkNBMDAwMDAyQ0MwMDAxQgorOjEwMzVDMDAwMDAyQ0UwMDAwMDJEMDAwMDAwMkQyMDAwMDAyRDQwMDAwOAorOjEwMzVEMDAwMDAyRDYwMDAwMDJEODAwMDAwMkRBMDAwMDAyREMwMDBGNworOjEwMzVFMDAwMDAyREUwMDAwMDJFMDAwMDAwMkUyMDAwMDAyRTQwMDBFNAorOjEwMzVGMDAwMDAyRTYwMDAwMDJFODAwMDAwMkVBMDAwMDAyRUMwMDBEMworOjEwMzYwMDAwMDAyRUUwMDAwMDJGMDAwMDAwMkYyMDAwMDAyRjQwMDBCRgorOjEwMzYxMDAwMDAyRjYwMDAwMDJGODAwMDAwMkZBMDAwMDAyRkMwMDBBRQorOjEwMzYyMDAwMDAyRkUwMDAwMDMwMDAwMDAwMzAyMDAwMDAzMDQwMDA5QgorOjEwMzYzMDAwMDAzMDYwMDAwMDMwODAwMDAwMzBBMDAwMDAzMEMwMDA4QQorOjEwMzY0MDAwMDAzMEUwMDAwMDMxMDAwMDAwMzEyMDAwMDAzMTQwMDA3NworOjEwMzY1MDAwMDAzMTYwMDAwMDMxODAwMDAwMzFBMDAwMDAzMUMwMDA2NgorOjEwMzY2MDAwMDAzMUUwMDAwMDMyMDAwMDAwMzIyMDAwMDAzMjQwMDA1MworOjEwMzY3MDAwMDAzMjYwMDAwMDMyODAwMDAwMzJBMDAwMDAzMkMwMDA0MgorOjEwMzY4MDAwMDAzMkUwMDAwMDMzMDAwMDAwMzMyMDAwMDAzMzQwMDAyRgorOjEwMzY5MDAwMDAzMzYwMDAwMDMzODAwMDAwMzNBMDAwMDAzM0MwMDAxRQorOjEwMzZBMDAwMDAzM0UwMDAwMDM0MDAwMDAwMzQyMDAwMDAzNDQwMDAwQgorOjEwMzZCMDAwMDAzNDYwMDAwMDM0ODAwMDAwMzRBMDAwMDAzNEMwMDBGQQorOjEwMzZDMDAwMDAzNEUwMDAwMDM1MDAwMDAwMzUyMDAwMDAzNTQwMDBFNworOjEwMzZEMDAwMDAzNTYwMDAwMDM1ODAwMDAwMzVBMDAwMDAzNUMwMDBENgorOjEwMzZFMDAwMDAzNUUwMDAwMDM2MDAwMDAwMzYyMDAwMDAzNjQwMDBDMworOjEwMzZGMDAwMDAzNjYwMDAwMDM2ODAwMDAwMzZBMDAwMDAzNkMwMDBCMgorOjEwMzcwMDAwMDAzNkUwMDAwMDM3MDAwMDAwMzcyMDAwMDAzNzQwMDA5RQorOjEwMzcxMDAwMDAzNzYwMDAwMDM3ODAwMDAwMzdBMDAwMDAzN0MwMDA4RAorOjEwMzcyMDAwMDAzN0UwMDAwMDM4MDAwMDAwMzgyMDAwMDAzODQwMDA3QQorOjEwMzczMDAwMDAzODYwMDAwMDM4ODAwMDAwMzhBMDAwMDAzOEMwMDA2OQorOjEwMzc0MDAwMDAzOEUwMDAwMDM5MDAwMDAwMzkyMDAwMDAzOTQwMDA1NgorOjEwMzc1MDAwMDAzOTYwMDAwMDM5ODAwMDAwMzlBMDAwMDAzOUMwMDA0NQorOjEwMzc2MDAwMDAzOUUwMDAwMDNBMDAwMDAwM0EyMDAwMDAzQTQwMDAzMgorOjEwMzc3MDAwMDAzQTYwMDAwMDNBODAwMDAwM0FBMDAwMDAzQUMwMDAyMQorOjEwMzc4MDAwMDAzQUUwMDAwMDNCMDAwMDAwM0IyMDAwMDAzQjQwMDAwRQorOjEwMzc5MDAwMDAzQjYwMDAwMDNCODAwMDAwM0JBMDAwMDAzQkMwMDBGRAorOjEwMzdBMDAwMDAzQkUwMDAwMDNDMDAwMDAwM0MyMDAwMDAzQzQwMDBFQQorOjEwMzdCMDAwMDAzQzYwMDAwMDNDODAwMDAwM0NBMDAwMDAzQ0MwMDBEOQorOjEwMzdDMDAwMDAzQ0UwMDAwMDNEMDAwMDAwM0QyMDAwMDAzRDQwMDBDNgorOjEwMzdEMDAwMDAzRDYwMDAwMDNEODAwMDAwM0RBMDAwMDAzREMwMDBCNQorOjEwMzdFMDAwMDAzREUwMDAwMDNFMDAwMDAwM0UyMDAwMDAzRTQwMDBBMgorOjEwMzdGMDAwMDAzRTYwMDAwMDNFODAwMDAwM0VBMDAwMDAzRUMwMDA5MQorOjEwMzgwMDAwMDAzRUUwMDAwMDNGMDAwMDAwM0YyMDAwMDAzRjQwMDA3RAorOjEwMzgxMDAwMDAzRjYwMDAwMDNGODAwMDAwM0ZBMDAwMDAzRkMwMDA2QworOjEwMzgyMDAwMDAzRkUwMDAwMDNGRTAwMTAwMDAwMDAwMDAwMDAxRkY1OQorOjEwMzgzMDAwMDAwMDAyMDAwMDAwN0ZGODAwMDA3RkY4MDAwMDAyNkYyNworOjEwMzg0MDAwMDAwMDE1MDAwMDAwMDAwMTAwMDAwMDAzMDBCRUJDMjBDNQorOjEwMzg1MDAwMDAwMDAwMDMwMEJFQkMyMDAwMDAwMDAxRkZGRkZGRkZDRQorOjEwMzg2MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY2OAorOjEwMzg3MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY1OAorOjEwMzg4MDAwMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAwRkZGRkZGRkY0MAorOjEwMzg5MDAwMDAwMDAwMDMwMEJFQkMyMEZGRkZGRkZGMDAwMDAwMDA4RgorOjEwMzhBMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGMDAwMDAwMDMxRAorOjEwMzhCMDAwMDBCRUJDMjAwMDAwMjAwMDAwMDA0MEMwMDAwMDYxODA2RAorOjEwMzhDMDAwMDAwMDgyNDAwMDAwQTMwMDAwMDBDM0MwMDAwMEU0ODBBQworOjEwMzhEMDAwMDAwMTA1NDAwMDAxMjYwMDAwMDE0NkMwMDAwMTY3ODA4QworOjEwMzhFMDAwMDAwMTg4NDAwMDAxQTkwMDAwMDFDOUMwMDAwMUVBODA3MAorOjEwMzhGMDAwMDAwMjBCNDAwMDAyMkMwMDAwMDI0Q0MwMDAwMjZEODA1MAorOjEwMzkwMDAwMDAwMjhFNDAwMDAyQUYwMDAwMDJDRkMwMDAwMkYwODAzMworOjEwMzkxMDAwMDAwMzExNDAwMDAzMzIwMDAwMDM1MkMwMDAwMzczODAxMworOjEwMzkyMDAwMDAwMzk0NDAwMDAzQjUwMDAwMDNENUMwMDAwM0Y2ODBGNworOjEwMzkzMDAwMDAwNDE3NDAwMDA0MzgwMDAwMDQ1OEMwMDAwNDc5ODBENworOjEwMzk0MDAwMDAwNDlBNDAwMDAwODAwMDAwMDEwMzgwMDAwMTg3MDAwRAorOjEwMzk1MDAwMDAwMjBBODAwMDAyOEUwMDAwMDMxMTgwMDAwMzk1MDAxRgorOjEwMzk2MDAwMDAwNDE4ODAwMDA0OUMwMDAwMDUxRjgwMDAwNUEzMDBDRgorOjEwMzk3MDAwMDAwNjI2ODAwMDA2QUEwMDAwMDcyRDgwMDAwN0IxMDA3RgorOjEwMzk4MDAwMDAwODM0ODAwMDA4QjgwMDAwMDkzQjgwMDAwOUJGMDAyRgorOjEwMzk5MDAwMDAwQTQyODAwMDBBQzYwMDAwMEI0OTgwMDAwQkNEMDBERgorOjEwMzlBMDAwMDAwQzUwODAwMDBDRDQwMDAwMEQ1NzgwMDAwRERCMDA4RgorOjEwMzlCMDAwMDAwMDdGRjgwMDAwN0ZGODAwMDAwMTc0MDAwMDE1MDA4RgorOjEwMzlDMDAwMDAwMDE5MDAwMDAwMDAwMEZGRkZGRkZGNDAwMDAwMDBBMgorOjEwMzlEMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBFNworOjEwMzlFMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBENworOjEwMzlGMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBDNworOjEwM0EwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBCNgorOjEwM0ExMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBBNgorOjEwM0EyMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA5NgorOjEwM0EzMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA4NgorOjEwM0E0MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMDAwMDdGRjgzRgorOjEwM0E1MDAwMDAwMDdGRjgwMDAwMDUwOTAwMDAzNTAwRkZGRkZGRkZCMAorOjEwM0E2MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkY2NgorOjEwM0E3MDAwRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGNDAwMDAwMDAxMgorOjEwM0E4MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAzNgorOjEwM0E5MDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAyNgorOjEwM0FBMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAxNgorOjEwM0FCMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDAwNgorOjEwM0FDMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBGNgorOjEwM0FEMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBFNgorOjEwM0FFMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBENgorOjEwM0FGMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMDAwMDEwMDBGNgorOjEwM0IwMDAwMDAwMDIwODAwMDAwMzEwMDAwMDA0MTgwMDAwMDUyMDBEMQorOjEwM0IxMDAwMDAwMDYyODAwMDAwNzMwMDAwMDA4MzgwMDAwMDk0MDBCOQorOjEwM0IyMDAwMDAwMEE0ODAwMDAwQjUwMDAwMDBDNTgwMDAwMEQ2MDBBMQorOjEwM0IzMDAwMDAwMEU2ODAwMDAwRjcwMDAwMDEwNzgwMDAwMTE4MDA4NworOjEwM0I0MDAwMDAwMTI4ODAwMDAxMzkwMDAwMDE0OTgwMDAwMTVBMDA2RAorOjEwM0I1MDAwMDAwMTZBODAwMDAxN0IwMDAwMDE4QjgwMDAwMTlDMDA1NQorOjEwM0I2MDAwMDAwMUFDODAwMDAxQkQwMDAwMDFDRDgwMDAwMURFMDAzRAorOjEwM0I3MDAwMDAwMUVFODAwMDAxRkYwMDAwMDA3RkY4MDAwMDdGRjhFOAorOjEwM0I4MDAwMDAwMDA0NDgwMDAwMTUwMDEwMDAwMDAwMDAwMDI4QURFRgorOjEwM0I5MDAwMDAwMDAwMDAwMDAxMDAwMTAwMEQwMjA1Q0NDQ0NDQzFFQQorOjEwM0JBMDAwRkZGRkZGRkZGRkZGRkZGRjcwNTgxMDNDMDAwMDAwMDAwOQorOjEwM0JCMDAwMDAwMDAwMDAwMDAwMDAwMUNDQ0MwMjAxQ0NDQ0NDQ0MzOQorOjEwM0JDMDAwMDAwMDAwMDBGRkZGRkZGRjQwMDAwMDAwNDAwMDAwMDA3OQorOjEwM0JEMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBFNQorOjEwM0JFMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBENQorOjEwM0JGMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBDNQorOjEwM0MwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBCNAorOjEwM0MxMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDBBNAorOjEwM0MyMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA5NAorOjEwM0MzMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDAwMDAwMDA4NAorOjEwM0M0MDAwNDAwMDAwMDA0MDAwMDAwMDAwMEUwMUI3MDExNjAwRDY0MQorOjEwM0M1MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA2OAorOjEwM0M2MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA1OAorOjEwM0M3MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDA0OAorOjEwM0M4MDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAzOAorOjEwM0M5MDAwMDAxMDAwMDAwMDAwMDAwMDAwNzIwMUJCMDEyMzAwRjNDRgorOjEwM0NBMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAxOAorOjEwM0NCMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDAwOAorOjEwM0NDMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBGOAorOjEwM0NEMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDAwMDAwMDBFOAorOjEwM0NFMDAwMDAxMDAwMDAwMDAwMDAwMEZGRkZGRkYzMzE4RkZGRkYxNgorOjEwM0NGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwOAorOjEwM0QwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzBFRkZGRkY2OQorOjEwM0QxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFNworOjEwM0QyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZEMworOjEwM0QzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNDNworOjEwM0Q0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkY2MQorOjEwM0Q1MDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjM5OQorOjEwM0Q2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZBNAorOjEwM0Q3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4NworOjEwM0Q4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkY5OAorOjEwM0Q5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM2NworOjEwM0RBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkY3MzFFRkZGRkZCMgorOjEwM0RCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM0NworOjEwM0RDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzAyRkZGRkY0NQorOjEwM0REMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyNworOjEwM0RFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzMzE4RkZGRkZBNgorOjEwM0RGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwNworOjEwM0UwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkY0NworOjEwM0UxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFNgorOjEwM0UyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZEMgorOjEwM0UzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNDNgorOjEwM0U0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkY2MAorOjEwM0U1MDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjM5OAorOjEwM0U2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZBMworOjEwM0U3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4NgorOjEwM0U4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkY5NworOjEwM0U5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM2NgorOjEwM0VBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkY3MzBFRkZGRkZCMgorOjEwM0VCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM0NgorOjEwM0VDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzA0RkZGRkYyNAorOjEwM0VEMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyNgorOjEwM0VFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzMzFFRkZGRkY0NQorOjEwM0VGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwNgorOjEwM0YwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkY0NgorOjEwM0YxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFNQorOjEwM0YyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZEMQorOjEwM0YzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNDNQorOjEwM0Y0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkY1RgorOjEwM0Y1MDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjM5NworOjEwM0Y2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZBMgorOjEwM0Y3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4NQorOjEwM0Y4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkY5NgorOjEwM0Y5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM2NQorOjEwM0ZBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRjk3MDU2RkZGRkZCQworOjEwM0ZCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjM3OAorOjEwM0ZDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzEwRkZGRkY2MgorOjEwM0ZEMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyNQorOjEwM0ZFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzMzIwRkZGRkYyMworOjEwM0ZGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwNQorOjEwNDAwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzEwRkZGRkY0NQorOjEwNDAxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFNAorOjEwNDAyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZEMAorOjEwNDAzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNDNAorOjEwNDA0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkY1RQorOjEwNDA1MDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjM5NgorOjEwNDA2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZBMQorOjEwNDA3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4NAorOjEwNDA4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRjhBMDQyRkZGRkYzMQorOjEwNDA5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjM5NworOjEwNDBBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRjk3MDVDRkZGRkY1QgorOjEwNDBCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjM3NworOjEwNDBDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzEwRkZGRkY2MQorOjEwNDBEMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyNAorOjEwNDBFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzMzAwRkZGRkYyNAorOjEwNDBGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMwNAorOjEwNDEwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxMzAwRkZGRkY0NQorOjEwNDExMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNFMworOjEwNDEyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2MzA1RkZGRkZDRgorOjEwNDEzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjNDMworOjEwNDE0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2MUNCRkZGRkY1RAorOjEwNDE1MDAwMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0RjNDRjNDRjM5NQorOjEwNDE2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyMzA0RkZGRkZBMAorOjEwNDE3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM4MworOjEwNDE4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBMzAyRkZGRkY5NAorOjEwNDE5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjM2MworOjEwNDFBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRjk3MDQwRkZGRkYxQgorOjEwNDFCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwRjNDRjNDRjM3NgorOjEwNDFDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MzAwRkZGRkY2MQorOjEwNDFEMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRjNDRjNDRjMyMworOjEwNDFFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1NworOjEwNDFGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMzNworOjEwNDIwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY3NgorOjEwNDIxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMxNgorOjEwNDIyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1NQorOjEwNDIzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNGNgorOjEwNDI0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYzNAorOjEwNDI1MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNENgorOjEwNDI2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYxMgorOjEwNDI3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNCNgorOjEwNDI4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZFRQorOjEwNDI5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM5NgorOjEwNDJBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZDNgorOjEwNDJCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM3NgorOjEwNDJDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY5NgorOjEwNDJEMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM1NgorOjEwNDJFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1NgorOjEwNDJGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMzNgorOjEwNDMwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY3NQorOjEwNDMxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMxNQorOjEwNDMyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1NAorOjEwNDMzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNGNQorOjEwNDM0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYzMworOjEwNDM1MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNENQorOjEwNDM2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYxMQorOjEwNDM3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNCNQorOjEwNDM4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZFRAorOjEwNDM5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM5NQorOjEwNDNBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZDNQorOjEwNDNCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM3NQorOjEwNDNDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY5NQorOjEwNDNEMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM1NQorOjEwNDNFMDAwMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1NQorOjEwNDNGMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMzNQorOjEwNDQwMDAwMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY3NAorOjEwNDQxMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjMxNAorOjEwNDQyMDAwMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY1MworOjEwNDQzMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNGNAorOjEwNDQ0MDAwMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYzMgorOjEwNDQ1MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNENAorOjEwNDQ2MDAwMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkYxMAorOjEwNDQ3MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjNCNAorOjEwNDQ4MDAwMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZFQworOjEwNDQ5MDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM5NAorOjEwNDRBMDAwMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkZDNAorOjEwNDRCMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM3NAorOjEwNDRDMDAwMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMzBDRkZGRkY5NAorOjEwNDREMDAwMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjNDRjNDRjM1NAorOjEwNDRFMDAwMDA0MENGM0NDRENEQ0RDRDAwMEMwMDAwMDAwNzAwQzA3QQorOjEwNDRGMDAwMDAwMjgxMzAwMDBCODE1ODAwMDIwMjEwMDAwMTAyMzBERQorOjEwNDUwMDAwMDAwRjAyNDAwMDAxMDMzMDAwMEMwMDAwMDAwODAwQzA1MgorOjEwNDUxMDAwMDAwMjgxNDAwMDBCODE2ODAwMDIwMjIwMDAwMTAyNDA3RAorOjEwNDUyMDAwMDAwNzAyNTAwMDAyMDJDMDAwMEYwMDAwMDAwODAwRjA2NworOjEwNDUzMDAwMDAwMjgxNzAwMDBCODE5ODAwMDIwMjUwMDAwMTAyNzA5RAorOjEwNDU0MDAwMDAwQjgyODAwMDA4MDMzODAwMTAwMDAwMDAwODAxMDAwMgorOjEwNDU1MDAwMDAwMjgxODAwMDBCODFBODAwMDIwMjYwMDAwMTgyODBCRAorOjEwNDU2MDAwMDAwRTgyOTgwMDA4MDM4MDAwMDI4MDAwMDAwQjgwMjg2MworOjEwNDU3MDAwMDAwMjAwRTAwMDAxMDEwMDAwMDA4MTEwMDAwMDAxMThBRAorOjEwNDU4MDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0M2QgorOjEwNDU5MDAwMDAwMDIwMDBDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0M2QgorOjEwNDVBMDAwQ0NDQ0NDQ0MwMDAwMjAwMENDQ0NDQ0NDQ0NDQ0NDQ0M1QgorOjEwNDVCMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQzAwMDAyMDAwMDAwMDAwMDA3QgorOjEwNDVDMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJGQjUxQ0ZDMEYwMDM2MAorOjEwNDVEMDAwOEE3QkQ4MTgxOEY2NzAyMEY4NDMwMTVGNjQ2MjYwQjhDRgorOjEwNDVFMDAwMENDNDU3ODE1ODgwOTk4MTIxOTg5MTgxMjE4NDkxNzhCOAorOjEwNDVGMDAwRkQ3MUEyMDhGNjEzMjFBMDE5QzI0MDMzMDQxOTE4NEUwOAorOjEwNDYwMDAwMEIyM0M0MEYwMkQ1OTg4ODMwMzA3Qzg3OEE1NTAzRDk5NAorOjEwNDYxMDAwMENBMkQ0NzFGRjQwRTM3NTUyOTg2MkFCMjUxMEVDRjUwMworOjEwNDYyMDAwNThFNDkxRjEwNjM0NzkyRTQ5NTRGRTQ2MDJGQTA3MUFFRAorOjEwNDYzMDAwREY1NzQ0RTUwQjI5NDBFODZDQThGODAzMzQ3OTYxQThGQQorOjEwNDY0MDAwRkM3OUE4QkYxRTJBNjIzN0Y3MDI1NDFFMDA1QkJCRDI1QQorOjEwNDY1MDAwNTM2MDAzMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBBNAorOjEwNDY2MDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFRDdEMEI3ODU0RDU3NworOjEwNDY3MDAwQjVGMDNFNzNDRTlDOTk0OTY2MjYyNzIxNEYxRTYxMTJFNAorOjEwNDY4MDAwMjAwMjg2MzhCQzAyMjhCNzRFNDgwODUwNjkxRDZDNTU3OAorOjEwNDY5MDAwQjQ2ODA3MDgxMEYyOTZBMjk3RDZGNkNCMDQ0MjhDODAzNQorOjEwNDZBMDAwMzZGOEZCNDA4QjNBQkMyQTJBNkFDMDQ4NTEwMTg3QTdEQQorOjEwNDZCMDAwRThGNUY2MDZBQjk2NTZFQjhENjg1MTkxNDdFNDU2QTVBMgorOjEwNDZDMDAwRkY2REFGRkY1QTZCRUY5RDM5NjczMjAxRUNENzdCRkY2RgorOjEwNDZEMDAwRkJERkVGOEY5RkRGNjE5RkJEQ0ZERTZCQUZENzVFNkJFMAorOjEwNDZFMDAwRURCNUY3RDg2RDFFQTY1RkNERDhEN0Y4MDdDRjdBMUJFQQorOjEwNDZGMDAwNjMyQzIzRjY3Q0M0Q0U3RTE4NzQzMzU2QjBDRUI3QzI3QQorOjEwNDcwMDAwOUQwRUVGNzdFNTZENEZGNjMxOTZCMzdCQUQzMjA1REU0QQorOjEwNDcxMDAwRTdBQzZGNTNFNjE1QzZCRTBGQjhBMDcyM0NCQ0RGQjU2MAorOjEwNDcyMDAwNTYyOTgxRjczOTZGQjQyOTczRjFFOUIwQjE0RTY4Q0ZEQQorOjEwNDczMDAwMzQ1RjBBQzMyNzBCMzA5NkM5RDg5MDg5NENGQzA1REMzRQorOjEwNDc0MDAwMzlDNThDMERDNDdGNDIxN0U3OEM2NEM2QzYzMTk2Qjc1NQorOjEwNDc1MDAwRDIxNjA5MkJGMDNFNTQzOTkzNzkxOURCMDQ3MEU1QTQ4NQorOjEwNDc2MDAwQzE3N0VBNUZGNkQ5QjE2RDgzNzZCQ0NCQzk5ODUzNzMzNAorOjEwNDc3MDAwNkE1RkU3MzM5NjNCOUJEOTE4M0MwNzJGRTNFRkYxRUZENQorOjEwNDc4MDAwNkJGODNGMkY2QzJEMEY2MUE2NzIxRTk2M0RFOTI3NjBENgorOjEwNDc5MDAwNDhFNjYxOUVBRkQ1NDRGMDc2RUJDMTUxQjE3OUNBRTdFNgorOjEwNDdBMDAwRkE0NjVGQTY1QkVCRkQ1RTNFOTdEQ0Y2ODk3RTE3N0NFMgorOjEwNDdCMDAwRkQxOEI2MUJDQTU4MjRBRTdENkQ1OEQ3RDgxNUYwMDQyNQorOjEwNDdDMDAwMDRCNDE3RjZGRTdFMjYyQjI5NDYzQURDQ0FBNkQwQjNERgorOjEwNDdEMDAwNUVGM0REODg3OEE5M0Y2MjY3NjE4MEJCQkVFMTQ0Mzk0MgorOjEwNDdFMDAwOTZEOTJFODUwRENCRUJGREZEMjg2NjI3N0E5NDMwNDVCMgorOjEwNDdGMDAwM0I4MUYzRjUzMjJGQ0U0RkFERjEzRDU0MEU3ODZFNDgyQworOjEwNDgwMDAwMEU5NDYxQkYwRjI3ODdFODI5REY2N0NGOUI5RTFEMDJBQgorOjEwNDgxMDAwNzg0QTE3MTU4NjE5RDBGRERDM0FDNUVGODBDRjNGNTY5MAorOjEwNDgyMDAwMjJCQTFERTg1MUZERkQ4NkEyNjlEMEVFNkQzRDc0MERFMgorOjEwNDgzMDAwN0VCNzQ4OERCNkQ4NjFGQ0RBMzkwRDA1NDAwMUQ2QTk5RQorOjEwNDg0MDAwNzNGRTE5QkNBQkU0NTMwREU4MzY5OEIxNzA0QTFBRDIyNgorOjEwNDg1MDAwODVCMUUzMjYzQUUwREZGMUUxQTJBQ0Y2OERDNzhCM0RFRQorOjEwNDg2MDAwMkJCMDFGMEQ3Qjg5RDA3Q0U1RkJCQ0YwOTEyMTQzRTM4RAorOjEwNDg3MDAwQzY2M0M1MDQwRjQzMzgxOUVCNTIxMkQxNzVGMDhCMjU2RQorOjEwNDg4MDAwNDdCNEEyQkVDN0ZCQ0Y5RjQ3OThDQjIxRTAwRUU5NUJBMAorOjEwNDg5MDAwRUJEMTIzQ0IwMUJGQTUyRkQ4QTM1NzAzM0Q2QTM3MjhGRgorOjEwNDhBMDAwMTEwNzk0NkQ3QjVEMDFBNENGOTlDRDUwMDZCQTQ0M0RBQworOjEwNDhCMDAwM0FCNTNGNkQzOEE5NUNFRkU4QkNGNzJBMjg3N0JGQTA2RQorOjEwNDhDMDAwQjI4REQ4RURGMDI0MUJDQUREMDkwMTNCMUIwNzY1QzA4MgorOjEwNDhEMDAwQzc0MjE3MkZENjZFRDg3NzJCRjY1N0I5Q0JDMTVDNDg5NQorOjEwNDhFMDAwQ0YxNzE3N0RGNzJBMjgyRjAyN0VDMzI2QjU1QjlBRjRDRgorOjEwNDhGMDAwRkU1MDVFMUM1MURBQjE3Qzc2MEEyM0ZFMDhBN0U5OTFDRQorOjEwNDkwMDAwMkQzMERFNTk2RjY3RTZGNTIwMkYyNzFCOURDQzA3QTBDMQorOjEwNDkxMDAwQUNGMDc0NjY3RTFGRjhBODJBQjJCRDFDQkZBQkRBQTY0NQorOjEwNDkyMDAwRjgxMUVEQTUyRjZDMzk5QzgzRjM3QTEyRjgwQUY4QThEOAorOjEwNDkzMDAwN0E2QjMyRjM0OUZDQzFGRjI3NjAyQTU3NDNGRDEyOTg3NgorOjEwNDk0MDAwMjdDQUZGMjJENjU2Q0U1NDFDN0ZBREVFRjNDNEYwNzVCNQorOjEwNDk1MDAwQjJEMUEwNzE3QUU0RTk0OTE4MDdCRUFCN0I1NkYxRTMwNgorOjEwNDk2MDAwMTRFQjZDMkM4NDcyNzVFNjQ1RDdFQzRENkU5QzVGOTMwRQorOjEwNDk3MDAwNUVFMEMxNzlEREE1NjNCQjQ1OTFCOTNCNTE2NTU1NDUwNQorOjEwNDk4MDAwMzZFOEU1NTA1RkI1N0U4M0JFQjAxMEYxMDY3QUFGMTAxMQorOjEwNDk5MDAwRTFFQTY3ODU2QjlEMUE0MEZDMkU0OTc1NkU1NDAxM0YxNAorOjEwNDlBMDAwQ0MxREM4QkUyRTAxRkY5QzZDMDQzNTU2MTAyQjU3QTFBMAorOjEwNDlCMDAwN0M5MzNFODlFOEIzNENFRENCOTU1NEUyRDdFQUFEMkExRgorOjEwNDlDMDAwRjM1OUY4ODlEMzNGN0M5NEQzM0ZCQ0M3MTNEOTkyMTdDRQorOjEwNDlEMDAwQTNERjEyODNFQjQ5NDlCRjI1QTk4MjlFNUE3NzcxMjIzMgorOjEwNDlFMDAwNzhFRTQ1N0EwMDNDNkQ4ODJGNzhBRTExRjA3OTI3QjNDOAorOjEwNDlGMDAwMTIwREU4RTIwRDMwNDM2MTE3RTdDRjM2M0I5QkNCNjBFOQorOjEwNEEwMDAwRUMzN0Q5ODI4MDM2MDlDQTNBQkI4REY5MTkzM0I0REE0QQorOjEwNEExMDAwNDAxOTk0RkZDMjgyNkZFMDdDMThGM0ZCODI4MEU3MTY5NgorOjEwNEEyMDAwODVDREM2NzkxRjQyNjA2MTNFMkQzOTNBRTFBRjZENkE4RQorOjEwNEEzMDAwRjEyNjU1MTEzMEE3NjM3OUUxMkY1N0U1RDFGNzZGRDFGMgorOjEwNEE0MDAwRjcxQTdDM0ZBQUVGRUY4REYyODk5NkVGOERGMjRBRjlDMworOjEwNEE1MDAwRkQ3QkQ4OEUzOTJGRkM3RDVCRjk5NUQ2RjFDQkFCRTQ4RAorOjEwNEE2MDAwRjcxRkQxRjhFRTBCQzM2RjRDOUI2QzFEN0Y1QTBEN0Q2OQorOjEwNEE3MDAwNUZFRkUwRjRFQTRFNzU0NjM2NDJCOUQ5RTUwRjY4NDg3MworOjEwNEE4MDAwMzc4RDQ1RjFCRDk2NTZCMDExREJBOTkyMUY1ODY3NDA4RQorOjEwNEE5MDAwODVFRkREREI1MkM3QUM2MjY2QkU5OEYyMjcxQ0NGMDMwMAorOjEwNEFBMDAwRDI2MkU2OEI5NDg5NDkxNjdFNEMwREE0NTlDQUQwOTNFNAorOjEwNEFCMDAwNzFFMkYyOTgxRTBBNzg5RDA0OEZERTVGMjc3RDUxRDI0NQorOjEwNEFDMDAwREY0OUYwREVCMUQ3NDVFNTNCQUVFNEYwREVEMURGNERBNgorOjEwNEFEMDAwNzI4NjMwQjAxQzI4RUJBMTJCMENEMzdBMDQ3MDJBMkNFMAorOjEwNEFFMDAwOUJCMTJGOTQ5MDRCMTk2RjdFRUZCM0UxRkIyNDk1MzU2QQorOjEwNEFGMDAwRTA3QzkyMUM4Q0Y0RDE1RDc5QzU5QkMyMjZGQ0I0MEU3RgorOjEwNEIwMDAwMDJGQTQyMzk1REQxMzkxRTA1NUVFRjFBQjQzMDdCQUUzMAorOjEwNEIxMDAwNjk5Qzk2NDFGQUVDOEQ4NUZDRkQ3QzM3OEUxN0NDNTQ1MAorOjEwNEIyMDAwNTAwRkVBREQwNTg2QkJGNzM4OEVGQzg5OTY3MTlDQjk3QgorOjEwNEIzMDAwOTUzNDRFNUVEQzM4OEVEQ0NBQjg3MTlDQjMzNzhBRjc4OAorOjEwNEI0MDAwNjI5QzIxMTcxQUU3QUVGQzJCQURGM0M5QURBMjcxOEFBNgorOjEwNEI1MDAwRTJFNzkzNUIxNTM3NEUxMjlGMEZCQzE3RTNGODExN0YwNgorOjEwNEI2MDAwN0RDRTY3Qzg2NEVCN0MwNkQ3RDAzODU3RTEzOEUzNEQ3QgorOjEwNEI3MDAwRjMxOTVDMTMzNzhFOUJDNkMxRjczODBFMTg1MjNFOTY1OAorOjEwNEI4MDAwMDU3NDc3NzQyRjI0RkFCRkUyMjI3QjQxNzc4NDlFQzA5QworOjEwNEI5MDAwN0VEOUJCMkU0NkZBQzQwN0UzNjZBMTVFODFDNTE5RTQzRgorOjEwNEJBMDAwNTc1M0QyNjg5QzJGOTM4MEZFNkUzMzlEQjkzRUEyMjc0NworOjEwNEJCMDAwRTg5RjA1MDI0NDE2MDE4ODQwRkZENDA5MUVBREQ4MzY4RgorOjEwNEJDMDAwMkJCNzA5OUZCQjRBQjNFN0EyNUQ3MkJGQzczRjBDNDQzNgorOjEwNEJEMDAwRTdDQ0FFNTI3RDdFMDJGQjY2NDE5QkZENDQ5Nzg1N0YwQworOjEwNEJFMDAwODVERTlCQzI4NjM3QzBGODFEQTg2QzRDRTUxM0EwQkZCQworOjEwNEJGMDAwMThFOEFERTNBMEJGRjBGOUIxQjA0RjNGMDJGREM2NzRCNQorOjEwNEMwMDAwMzNCQzREMzQ4RjEzMUFDN0UzODlGNTdDMURGOTcyRUQ1RgorOjEwNEMxMDAwNTEzQjE4N0IzOENDNUI4NTAwRjcwRDYyMUEwQkRBQzA2QworOjEwNEMyMDAwRjgzM0M5NTlCREEwNDdGNzhCOEVDODQ2QTI0NzYwODBBQworOjEwNEMzMDAwMERGODlDQURFQjA3QjgxMkVEQzBDRUZDODNCMDQ3RTE5OAorOjEwNEM0MDAwNkY4MDBENkNEOTlCNUJCNzFGQzI2NkVGMjg3MzA3MkQ3MQorOjEwNEM1MDAwODFGOUNFRUU1ODZCMUYwMEU1MzNGNkFFNUJGRDZFNTM2NworOjEwNEM2MDAwM0ZCM0VEQzc3MURFNEVGODBGRkJCOTI5NjRCN0Q4QTc4MworOjEwNEM3MDAwM0ZBOEI0OTY2Rjg5QjM1NzZCOTQ3QzQxMEYzMUFFMkYyOAorOjEwNEM4MDAwNjI0NzdBREQ5MEM5RTFCOTA1OUY2M0IwREEyMDdBREQyOQorOjEwNEM5MDAwNkFGMDZGMjUzQ0Y1NzdEQTU5OTRENkEzQUUwQzU2ODhBNgorOjEwNENBMDAwRjhDODIwQkIyODI0RDc5NTM4Rjg2RUI1M0IwMzQxQTAzRgorOjEwNENCMDAwRTdBRDNGNTYwOThGRjFGMDc2RUQ0RDBFRDhDMDVFRUFCNAorOjEwNENDMDAwNUFGNzZGNzZCNEJGMkYwNkZGMEY5NzU5RUI1OTk4OEY5RAorOjEwNENEMDAwMjdGMTJBRjlFMEM2RDkyNUZEM0UzMkI1QkIyOTM0QTMxOAorOjEwNENFMDAwREY0NzI2N0VGOTQxRTUyQzRCRjk5Njg2OUIyQ0VEN0YxQworOjEwNENGMDAwQjg2Q0FFQTU3RTZFNzhCMUE1N0U3RUVCNkQ5NkYyODIyNQorOjEwNEQwMDAwQjYxRjVCREEyRjVBRDc2NEE5NUYxQ0I5REI1MjVGQkRBRgorOjEwNEQxMDAwNzVBREE1NUNEQkZFQjBBNTdERkRBRTBEOTY3QURCREU0NAorOjEwNEQyMDAwMTFEN0EyM0NBRTc4NUI2NTY4OUY3REUxM0U3MTJGREFCQQorOjEwNEQzMDAwNTc1RjE4OUExRkRCRDQyMUFGODExQzdFRDI5ODRERkM5RgorOjEwNEQ0MDAwN0RCMkQxNDdDRjMzQkJDNjNBRDExRUFGNEYwMjc5ODY3MQorOjEwNEQ1MDAwQjU3RUFGRjI4NzcwRUI2NEQ0MjNEMDFFNzRGODdFRTU4NQorOjEwNEQ2MDAwQzM3MDE4OUNBN0Q3MTQxRkYxQkRCQTRFNjc1MTYwNTU4OAorOjEwNEQ3MDAwODVBNUY1RjA3NUI3MUFBQkQ3QkFBMDdFNkNERkY1RUE1QQorOjEwNEQ4MDAwM0EyRDYxQkRENkE1MjVFQ0Y3QUNEMjVEODBGNjVERjg3NQorOjEwNEQ5MDAwNzcwRTg2NzY2MDVGRjYwM0ZDMERDMEY1QTJBRkZBNTM3RQorOjEwNERBMDAwMzY1NkQ5NkVEMjNCMjcxNDFCRjFDMTBEQ0E5NDEzQThGNQorOjEwNERCMDAwOUY2Qjc0MkVFRjM1M0I3MkE2QTAzRjU4QTM0NzBCMUE4QQorOjEwNERDMDAwREMxNzE4QUYxRDgwQzlDMjdFRjI2OTVFOEIyMzAzNjJCNworOjEwNEREMDAwRjI0QkY0MUI2MjkxRkJBNTJDRjQ0N0Q0Q0ZBN0Y2QTlBNAorOjEwNERFMDAwQTQ2NzU5RjQ0MEVFRjc0NkUxRjg4MTEzRjg5RUVEQ0E0NgorOjEwNERGMDAwQTBGNUYxOURDNjQwQkY4RkMwOUYzQkQ2Mzg5RDlFQkY5QQorOjEwNEUwMDAwNkYwQ0Y2RkIwODc0Q0Q3QjhEQjNBOUZDN0U2Mzg4OUU4NgorOjEwNEUxMDAwNUQ4RDk1RjQzQ0RFRDg0MEY1MUYzNTJFQTNGMjg5QzY5MgorOjEwNEUyMDAwMzAzRDNGNjk2Q0E1RTdDOUM2MzZBQTNGRDVCODhFQ0FFMgorOjEwNEUzMDAwNjcxQTIzRjRFQ0YxMDM4NDNEQ0FEMjg1RkQyN0VDNzU5MworOjEwNEU0MDAwNTgzOUE4N0M0RUNDNDE4NTdGNzNCRkQ1OUY4RDcyN0QyQworOjEwNEU1MDAwQ0VGRDY1MDFEQUI5RTc4RTgxNjE5MkMwM0Y5NENGNzhDQgorOjEwNEU2MDAwN0VFQjlCN0UwMTVBRUYxNzQ2ODBGRTYzN0JEN0JCOTI5OQorOjEwNEU3MDAwMzg3RDVDMzYzNjlEODFGRUI5N0I5OENFMzQxODNGRTk4QgorOjEwNEU4MDAwOTVDQkM5NUU4NkY3MUEyMzdEMTlGMUNGRjIyNEU4MUY2RQorOjEwNEU5MDAwRTc5Qzc1NzEzQUY1RjBDNzIzRkY1RThDRjE4NzFCODRBMAorOjEwNEVBMDAwM0U0QzNBQTAzNjcwQkE2REYyMjNERDRDRjhFMzc2RDk2OQorOjEwNEVCMDAwMEI0MjlGQzdFMTkxNkNCOTlDREVGODNDOUQyMUYxRDk3MgorOjEwNEVDMDAwOTk4QjcxODBGQjk1RTAwODFCRjBDMUI5MEUwN0NERUIwMworOjEwNEVEMDAwRENFRUU0MDhDMzZGMzEzODMyRTk0Mjc4RTM3MDU0NkY5NgorOjEwNEVFMDAwNzUxOTY2RkQ1MERCOUU2QTU4RjU0NThFNjFENjE3RTc0OQorOjEwNEVGMDAwOEU2Q0YyQTJEQzJGQzlCNjE5MUY4RDQ1RkUwODA4RkU4NAorOjEwNEYwMDAwRTA3QzI3RkJBRjZEQ0YzM0RDOTY3RUFDRTU3MzZEQ0FEQQorOjEwNEYxMDAwNzRGNDgzNDBCOUE3N0MzRjgxN0YyMDlGNEJCMjc1RTMzNworOjEwNEYyMDAwMjM5MEVGOTM1Qjg3QTRFMEI4RTBDNzE5MzhDRUE5NDY3OQorOjEwNEYzMDAwQzNFMEUzNjYxQjY2QkVBQzU5OTY0NEVEMjU3QzdERjU2NworOjEwNEY0MDAwRkJGNzg2MEYyRDgzMEY5RDhDNTBGRkY1OTA2RkVFNjc1QQorOjEwNEY1MDAwMzNFRDRGMTRDRjYxQkJFRDVGRTJCQUUzODBGRkJGQTYzNAorOjEwNEY2MDAwNzg4MDQ2NjVEOTZGN0RCQjFBNzY1QzgxRUZCNzU5QzZFQworOjEwNEY3MDAwODNFRjdDRDI4N0M2RjVBQTZGQkE2QkVDODQyOTJFNTBEQQorOjEwNEY4MDAwODc2MzkwN0ZFNDI0M0E4N0EwQzcxNEU4RUZBQ0U2NkUwRAorOjEwNEY5MDAwNTU2MDlDRTkzNjFGRDVENzBCN0VBQzc1NzZFOTIxNzgzNAorOjEwNEZBMDAwNzVCQTgzRDNBM0FGNzE0RTM2MUVGMTY5QTAzRjJBOUQxNworOjEwNEZCMDAwRTA5MUMxMzg5NUVEMjNDQTUwM0Y5RUVFNTg5MTE5MDJGOQorOjEwNEZDMDAwQkVBRDU2Q0ZERDExNENGMDdEQUI0REUxRjA0NEVDRERENAorOjEwNEZEMDAwNURBNkY5QzgzODBBNjNEMEFGMzMwNjNGNzJGQTA5NTNBOQorOjEwNEZFMDAwMzk1RTVGQ0JFNzdERDgyRkYwNDdEREI2QTNFNTU3MDFFQgorOjEwNEZGMDAwRkM3NUJCM0VENzExOEVFOUI2RDA3REI2OENEOEZDMTVCQQorOjEwNTAwMDAwOUMzRkY0NTNCNUY1MDMxREU3Rjc4OTNENUM3MEU3MDU1OAorOjEwNTAxMDAwRjQ1NDZGMzhEREQ5MTRCNzkzRjA4NTU5MjdEQTMxRjM5QQorOjEwNTAyMDAwN0FFMjhBQkUxQkRGMDVEMUZDRjQ5RkVDNkMxNUMwQzE4RgorOjEwNTAzMDAwRkUwMkFEQTBERTJFNkEyQjU4RDA4QkY4OUFENzUxNERDOAorOjEwNTA0MDAwRjFDNTRGNkREMjZFNkEyQjQ2RkUzOENENkNEMzcxN0VBMgorOjEwNTA1MDAwQTdEOTlCREVCMTI2RkM3NUQ4QjhERENGNUFCOTFEMTM5MAorOjEwNTA2MDAwODZGRjEwMUVCMDY3MkQ3NkNEQTI3NUQ2RjI0Mjc2NUQxMgorOjEwNTA3MDAwMjZFQThEODVGN0RCNTkwNDUwQjQxOEVEMjJDOTFGMzA5QworOjEwNTA4MDAwRUZDRDM2NkVFRjJFNjIwRDJENjhDRjY5MEVFRTFGQ0M4MAorOjEwNTA5MDAwMzM5ODM2MDBFMEFBRkRENUEzQzU2OEY3QkY2Q0IzMTFGRAorOjEwNTBBMDAwN0Q2NDlDNjE3MTFBODdCQjJBM0RBMjA3QTBGRUMzOEU1NgorOjEwNTBCMDAwQjEzNzVDODVEQ0U3ODhCNEUwQkFDQzUyOTg3RjBCRUI2MworOjEwNTBDMDAwOERDRkY5QUQ1NkY4MkUwNjdGM0NCQzhDMkRCN0MwMjE5NAorOjEwNTBEMDAwRkI5NTcwQTg1Qjk1NDAyNDAxREZCRDI2Rjk0RUU4OTE1MQorOjEwNTBFMDAwMzRENTZBRTc2N0M1OTVERkIzODlGOEE1Q0E1NEE0RjMzOAorOjEwNTBGMDAwNjlDMzE5QjZBNTUwQkQzRjhBRjE5MTFEMEVGRjBBQTBFNAorOjEwNTEwMDAwRUZFREI2NjAxN0VBNjdCMDBCOEE5OEE5RERFREI2MTAyRgorOjEwNTExMDAwQkQzRkE1QkNCMTEwRUQ1M0E2NDU4QkQwQkY4NzM1NDUyQgorOjEwNTEyMDAwNDM3RUQwMDUzRkE4NDlERTIyOENDNzdBMThBQzlGMjA2OQorOjEwNTEzMDAwOTcwRTg0MEZGQTY5RjE1NENFNjQ0NTE4N0YwNTM5ODVCRQorOjEwNTE0MDAwRkVFRUYxOTYxRjUxQTBFQzcyNzczMEVDQ0Y5MTZEOEQ5MQorOjEwNTE1MDAwMkZCQjdDRDY3MjNERkUwM0U5MzA5QzUxMUMyNzc5QjhFOQorOjEwNTE2MDAwQjUxRTE2MkM4NkZDRTZGMTVCREZGRkVGMUUzQzQ1ODk4MQorOjEwNTE3MDAwNkZCREM0RDJGMDc0QkFBMzJBOENDRjI2NkFBN0NDNzZBRQorOjEwNTE4MDAwNzM5RDkzQzM0RjdFMzlCNDVGMkFFQ0Y5M0FFNjBCNTMxMworOjEwNTE5MDAwOUMzODlCRjNDMUQyMTkzNjgyNjdBOUM3RTcwRjQzQkQ3QworOjEwNTFBMDAwQTIwNTE4Q0ExRkM2QUFDREVCNThGRDc5MTBCOTdFQTY3NAorOjEwNTFCMDAwQjJENkFEMjM1RkQ2OUZENzU4MDRGNDdEOTEyREU0NTEyQworOjEwNTFDMDAwQzcyM0ZFMDI2NEU3M0EwMTU5NUYwM0M4OUE3QkJBQzU1OAorOjEwNTFEMDAwRUU2NTAzRDNDNEZBM0FEMDMwQ0JFQjQwQTRGM0Y4MTgxMQorOjEwNTFFMDAwOURBNTVFQjAwQkJEMDhGQTIyNEJDRDQwM0REODVENEU2QgorOjEwNTFGMDAwN0UwOUVCMjIzRDIxREJFOUIxNzYwMzExOEVCRURBQjlERgorOjEwNTIwMDAwNjJFREYyMTJGNTU3RkJBQjY3NzY4NjAxRkY1NUNGM0Q5NQorOjEwNTIxMDAwRTAwNUUyQjM0RkI1QjY0QzNGQkNBRkQ5QjJEMjhCN0MwMAorOjEwNTIyMDAwRkM4OTE2RjZFMkJDM0Y4REE4RDMxM0YxRjMwREFBMjIzOAorOjEwNTIzMDAwRkNCMTgwNUI0MTdGNThEMEU5RTQ1M0FCQkY4Qjc4RkY3MgorOjEwNTI0MDAwNzI4QkREQzAyNkY1NUIxRDUxMDcxMEIxQUU2MzMxRTdFRgorOjEwNTI1MDAwQTdBRDhFMEY3OEY5QUVDRjkxOUVGNUJCQUNGMjU2RjVBNworOjEwNTI2MDAwQzQwMzk5MThFRjA0MEM3MUJGOTE0NUM5N0VBRURCRkNGNQorOjEwNTI3MDAwQzc3MkI0NDdFQTU5MzdFOTg5RjhFRjcwRkNGMzY5QjRBQgorOjEwNTI4MDAwN0VDREQ1NTM3QUQ3Q0JGRDk3N0FDMUY3RjUxREFCM0ZDRAorOjEwNTI5MDAwNTdCRDU4QjZDQTc3QTVGMDQ3QTZBOTlFNzQ4QTJCNEQ2QworOjEwNTJBMDAwNjAxMzkwNkUxMjBGMkNDMkVERTExNTRGM0U1NEY0MDFDNQorOjEwNTJCMDAwQzA3MTZBRjMzRjc5MTU0QkRDODhFQjg3NzNFREYzMUYwMAorOjEwNTJDMDAwN0ZDOUQ3Qjc1RTNGMjNGQ0Y5RDg3NzExRkFDRUI3OEJFOQorOjEwNTJEMDAwREJFRjZDMzc3RkQ2RDhBMzVFRjQ5NzZBMzZEOEZEMjAxMworOjEwNTJFMDAwOTlBQ0U2OTk0REJGN0MwNEY5RkE3NzBFOEEzMzU0M0ZBNgorOjEwNTJGMDAwNzNFODlEMkJBMTVDQkRERDlFM0U5MzRGQzNBRDY0QzY5QworOjEwNTMwMDAwRTg1MTBGRkYyRjFCMTNDMzdGRDVGMzg3NzRERjI4RkVFRgorOjEwNTMxMDAwRkVBNzY5MzEzQTU0NkZERkE3QjM1MUJERjE1NkRBQkUyQgorOjEwNTMyMDAwNEZFRjcyMjdBMDQ3RkIwN0U1Njg2RkFGNzhGMjJCMURBMAorOjEwNTMzMDAwRTVFQUQzQkQwQUNCQ0FFQkZEN0RFNTg2NDM2NENGMjEwOAorOjEwNTM0MDAwOUU4ODdFODIzRTNERjRFQTQ1QTdFODc3NUYxQTQ3RURFNgorOjEwNTM1MDAwMEM1Q0JGRkFBMkQzNDg1Q0ZCMzI4ODhGOUY3RDA5RTNDNworOjEwNTM2MDAwRjdCRjc3Rjg3MUZFOTVDRkZFQzg4QkYzRjg1ODZCRTA2NgorOjEwNTM3MDAwRkNGQ0U4Q0FDQzAwOEM1QjY5MEY2NzFBRjRFNEVGMkJFNQorOjEwNTM4MDAwMUZCQjlERjg2Q0QxRDFEQjMzMjkxRUMwMDIzOTM2NUFDMAorOjEwNTM5MDAwNDNDMzM5MzhCRjA1RUJBRkE3RjkyRDY0MjFFMkI3Q0E4MworOjEwNTNBMDAwNDdENTYwMDRFMzU5MUE5QkJFM0Q4MTNDQkMyMUU0RTEzMgorOjEwNTNCMDAwRTM4RDBFNUM3QkQ4QzdBODYwRDEzRjdDNTNBNTdEMDJFRQorOjEwNTNDMDAwQzY2RUEzNzhDM0VENzIxRjgyMkRBMUYyMTc0RTRFQTdCMQorOjEwNTNEMDAwNERBQTREQzYzNzlDMTYzRUREN0M1NzI3RDJFN0U0QTA4OAorOjEwNTNFMDAwNDAxNkM2MjcwMTBGNjE4MTJGMDVGNThFN0E3NDZBMTY2MworOjEwNTNGMDAwQTcwRkYzNjlDNUUyM0JEMDhCQTVGODFFREI3N0RBMDM3NAorOjEwNTQwMDAwQUUyMkNCNzc2MjFERTNFMzJGMTVFMzAzREM0OTY4OEZGRgorOjEwNTQxMDAwN0Q5QzA5RjY0RDgyRjk3REE1NEFCRDBDRjY4Njg5QkZCMworOjEwNTQyMDAwNEM3MkNERTU3Q0YzREQ1Q0FFQTU5QzQ3NjY0REM3RkFCQQorOjEwNTQzMDAwM0ZCREM1RTUwN0JGQzM3NTFERTA4QTY2NTFGREJFRUZFMAorOjEwNTQ0MDAwMkJBNDA3MUMyQzlBNDg5RTM3REI4NTNDNUJFQkU1RkVDMgorOjEwNTQ1MDAwMjRDMEFERTFGQTE0RTMxM0U4M0Y4REYwNEY3NkRBQzJEMQorOjEwNTQ2MDAwRkJFMTNCOTM1RUFFQzdGMUE4OUQxRTdCNkY1QUQ3MTczOQorOjEwNTQ3MDAwMDlGOTdGNTUxNUZCQTM0MkZFRDk3QTJFRjc3RERCQkRENgorOjEwNTQ4MDAwNjFFRTFGRDgyM0JGN0MwNEU1MTVFNDEzRDc5OTlBNjcxMgorOjEwNTQ5MDAwRUM0MTlDRjc2N0RCMEVCQzczMzNGMEY1NjdFRDUyNEVDMQorOjEwNTRBMDAwQUQ3QTMzNUU0RTJCNzc4QzY3ODlFNEY0MzNCNzlGMjU1MgorOjEwNTRCMDAwOTQ1Mzc4OUY1MDRFREQ1REM0QzdGRkQ5N0E1M0UyRUQxNworOjEwNTRDMDAwNEM5Q0RFOTQ3QUIwMkZGQ0M1RUJDMTM1QUEyRkExMUVFRgorOjEwNTREMDAwODRCRkI3NTg3MTZGQkU5M0ZDMjZGOUFDRUFFOURBQzExNAorOjEwNTRFMDAwMTQzNzkyRkMyOEY5QUQ4NzFGMjVCRkM1Q0ZEMzhBQjdFMworOjEwNTRGMDAwRjhGQTE3ODVCRTkxNzRCNjJGNjc2MTBGQzY0QkY3QThFRgorOjEwNTUwMDAwRTQ1RjlGMDU5ODVBODBCRTY3QjdFNTQ1MzBFRUJDRDI5MAorOjEwNTUxMDAwQzVFMzE3Njc4RDZFNkYxQTNDNTdBNkYyNzI3Nzg2REU2OQorOjEwNTUyMDAwODJGQTQxQkVFRjc2RjFGOEY2RDk2MEI3MzdENUU0NTc4NQorOjEwNTUzMDAwN0NCMDVCRjVGQUEwQkUyQkMyQTYyN0YyMzc0MEYzMTI2RgorOjEwNTU0MDAwMUM1REFDQUY3QTFFMEY5RUFBQkE3Mzk3QTFERkRFQTZEMAorOjEwNTU1MDAwRDI3RTc2NDVEMzhENUVEQzA3M0VCQjdCQzhDRjUxM0YwNAorOjEwNTU2MDAwMkQ3ODBEMEM0QzgwRjcyQ0RBODEyOTM4QkQ4MDg2Nzk5NgorOjEwNTU3MDAwMDlGMzA1QkQzRjYxRTEwNzI3QzNGQ0U2RUZFNkZFNDIwNAorOjEwNTU4MDAwQzU5QTM4RkJERUJENTQ0NzdEMDNGNkZENzE2QjVDOUIwRAorOjEwNTU5MDAwRjM0RDk1RThBNzcyQkRCNUJFOEFBRDIxQkE1NUM1RjFFOAorOjEwNTVBMDAwNTE0OEY4ODExMzM0QzE0N0EzRDk2OEUxODdGMUY4ODVFMAorOjEwNTVCMDAwRDA1NzUzRDVDMjlGQTM5RDcxRjYwODhGMkI5RURCQURBQworOjEwNTVDMDAwMTJGRUNGNkQ1MzIyMThGN0ExRjhFRTI0QTQ3RkI3Q0VCOAorOjEwNTVEMDAwNENGRUYyMjlFNDM3QkQ2RjM5M0VGNUMyMUY4QUVGODRENQorOjEwNTVFMDAwMjYzNTNCREYyREZBMDUzQzRGRURGQzVEQzFDQjU4RkU2NworOjEwNTVGMDAwRDU2RjczREY2NUJEREI5N0VFRkQzM0VEMUY5RkRERUJGMAorOjEwNTYwMDAwMjAzOENFRUU3RDM1Rjc0RTJDQkZFNEYwMjM5QzY3OTcxMworOjEwNTYxMDAwM0I2OEZGMkNCQ0Q3MTMxOTg2RjU4MzgwREVCODZFRUU4RAorOjEwNTYyMDAwRjlBQUE4OEJENjlENjZBMkQzM0M4REVGNzc5Q0RCRkRCMworOjEwNTYzMDAwRUZFRjJCOTg3RkIwREJFMUMzNzlENEVGRTU3OTIxRjU2QgorOjEwNTY0MDAwMkZCOTI4RUU3Mjc2Q0Y1N0M1MjFGN0RGNkYzRTc1M0EzNgorOjEwNTY1MDAwMEIxMUZGNzlEOEVDMURDOEFGQTk3QzFGQTBGRUU1NDk0RQorOjEwNTY2MDAwOUI5QTcwM0ZCQzYzOUY4RUZCMkJBNUFGRkNCNTA4RjVFMgorOjEwNTY3MDAwQ0JEOTFEREM0RTM4NjNFRjdBMENGNzQxNkJCNUExQ0I2QgorOjEwNTY4MDAwRUQyOEY3NjhCM0Y1MDdCQkQzQkU2MDRBQjgzMDExNUVBQQorOjEwNTY5MDAwMzgxRUNFMDIxRTcwNUU4MDk3NEFENDhCN0RFMUEzNTlERQorOjEwNTZBMDAwRTNGRUU2N0YzRjdDN0M3RTJCOEU1RkIzN0IwMkM5NERBMQorOjEwNTZCMDAwMEMyRjRBODBCRkY3NDQ5QzBBQ0Q5RkJGREZGQjU1MTFEQQorOjEwNTZDMDAwREEzRDlGQjUzN0QxM0E3RUIxNzk2RkZBMUYzNzZGMjUzMgorOjEwNTZEMDAwN0EyOUYzREVGRkRGOUNGRkE3NkI3QzVEOEE5NzgzREU3MAorOjEwNTZFMDAwN0NGRUFCM0JBOEZDQUNDNzRGRjA1RUEyRkMxRkZGOUY0QgorOjEwNTZGMDAwNDZGNzFENDA3N0VGQzVFOUFFRDhGRkJCQ0VGQjYyNzQxRAorOjEwNTcwMDAwN0Y0REQwREQ2MzYwNUVDMUQ5M0Q3RkE1NzhCOTlDRkYzOAorOjEwNTcxMDAwQzVFNkVERkI3Rjc0REVEMkZFNTk2NUYzQjdFNTQzRkJDQQorOjEwNTcyMDAwMzUyQ0RBRTkwMzM4NTcwRUJGQUUwREMzNENFMDI2MDQyMgorOjEwNTczMDAwMTNEOTIzNDEzQkY3OEY1NDg1Qzc2MUQ4MjAxRTE3NjJDOAorOjEwNTc0MDAwQzI5RkEwMTQzMDFGQzY1MTE2OTI1REE3Qjk1QkM4Q0U4OAorOjEwNTc1MDAwNjQ5QUJGMzMwMEY4NTgzNTcyOUU5RjcyMzVEODk4NjNBQgorOjEwNTc2MDAwMjEyQzBGOUNFQ0E3Rjg2NjlDNUZBNThERkNGNjExQjQ2QworOjEwNTc3MDAwRUY5QjlCMDAzRTE4QTdEOUEzMTk2MDI5MzFGQjcwNUJGMgorOjEwNTc4MDAwRDQ1MTQ0Q0YwRkYwNzk5Nzg4NjdEOTBERERFMjU3QjgyRgorOjEwNTc5MDAwRTNGQzAyOTdDRjVBRUYxMEZEM0JEOTdFMDNGMzg4OUNDMAorOjEwNTdBMDAwN0U4RDQ1QjAxRDZCMEI5QkYzMDcxQ0NDRjQxREQ0MTdFRAorOjEwNTdCMDAwNjIwMEQ2NjQzRjdFNTNGQzM1RjVFMDZGNEM2NzAwRjEyNAorOjEwNTdDMDAwMzdDMjQ2NzEyRDRBRUEyMzdDRjgyM0FCNzgxRTg1RDM3NQorOjEwNTdEMDAwOEFDRjk2NEVDNEEzQzZDMEZGRTNGMzIyQkY5MTA5N0ZEMAorOjEwNTdFMDAwNTExMzVENjhDMzZEMDE5N0I1OURGMDhCMkU0QTFGNEUxNgorOjEwNTdGMDAwOEZEQzFBNDE5RjI1MTY3QTQ4QkM1RjgwMkUxNjdBNDhBNgorOjEwNTgwMDAwRkM3RTUzQkFDNEQzMjMxRUZGREZCN0YzQjg5QkE0OTMyNworOjEwNTgxMDAwMjVCRjIzODNGQjIxNTFGMDQzNUVEREI2ODlFMjFEQTczRQorOjEwNTgyMDAwOUZGQUUwQkJDOEE3RDUyRkFCQ0MwOURGOUZEOUU2NjFCMworOjEwNTgzMDAwNTE5NDVGMkRBMkEzM0Y1NUQ1QTEyNjhDRjM0QUJCQkM0MgorOjEwNTg0MDAwRkEzOTBGRjE3OUQ1MEU0NzY0MjY3QzVGQjVGM0MzMjI5MAorOjEwNTg1MDAwQjI5Qjk2NzcxRjFFODA3MTgxQTcxNDRFQkY3MDU3MTE5RgorOjEwNTg2MDAwRUVEQjU1NjlEQzNGODhFRjZGQkQ5REM3MDU0RUJEOThFNworOjEwNTg3MDAwM0MxQkUzMEZDQTU2OUVBRjU4RDU3RUEzREQ2MURBNzc5NQorOjEwNTg4MDAwRkU1Rjc2OUVGNzBBRUQ0ODlFQzM0RjJBQjRERUY0ODY4QgorOjEwNTg5MDAwOEZGQjA1QTc5RTU0Mzg3Q0JCRUMxMUNDN0JBQ0RBQkFFRAorOjEwNThBMDAwNDEwRkExNUZCOUY1NzM4QTYzOTczRUY3OENCNzhCRkMwNAorOjEwNThCMDAwNDVENUVBM0Y2RjU1ODk5RUYwMjRCQUM1RkJCMTc1MURFOQorOjEwNThDMDAwQjVFNDI3RDRCNTBCM0YzMUNFOEZBQTdFNkVDRkNFMzA1NAorOjEwNThEMDAwQTBBNkZBRjkyN0JDMTg3RjM5RDlCOUM1NEJGRUU5NTZGRAorOjEwNThFMDAwRUU3RjZBNkUyREIxN0Y3QTMxQkZCNEZERUU4NDdFRTkyMgorOjEwNThGMDAwNDlGQzA3RjgxM0ZCRUM3MUZFRkNENjdFOTdCNjdGRjlFNgorOjEwNTkwMDAwQ0MxNzhGNjE5Q0Y0RDQ4RUNGMUU0M0I4NkJGRUUzREZCRgorOjEwNTkxMDAwMUU0M0ZCOUVFRDc1MTk1QjYwQkVGNTRGQkQ0REYxMjYzNAorOjEwNTkyMDAwRjlEREJCNDI0RUNGMEM2MkUxMUM2ODc3RTY3NzBFQ0EwOAorOjEwNTkzMDAwMUYzOUIzRTdFMzVDRjRFN0NFNkNGRjczMjZGQUY1NEI0RgorOjEwNTk0MDAwRjc0Q0NEQzI3OTJGN0RBMTM0OEIyNTkwNzdGOTQ0QkVEOQorOjEwNTk1MDAwOEM1QzQyOUMzMDlFMEUwNzNBMEU5MDFGNzJGQTk4ODMyMAorOjEwNTk2MDAwRkNCRTlFRjg0MjdCMkQ4RkQ3Rjg0NDVDNjE1QkUyMzgyOQorOjEwNTk3MDAwQUNGNDg3RUIzQTNFMkNFN0YxMzFFMTE3NUYyQzhFRjA2NworOjEwNTk4MDAwMTZEMEYxOEE0QkEwRDczNjExMjc4QUEzRDc2OUZDMDcxNgorOjEwNTk5MDAwRDBFNUFCMzg3QTdEQzE0MjhGRTdFMDNFNjQ0N0JGM0UzOQorOjEwNTlBMDAwRTMwOEQxNEJDMDkzOENFRjFFQjYwNzZDM0FDQUMxOEU4OAorOjEwNTlCMDAwRTQxRTNBQ0Q0NDNBM0RGMzQ1MkVDNkMzM0ZCMTc3OTMzQQorOjEwNTlDMDAwREREM0JEQzc2MUEwN0Y1RkI1RTdCNzI0MTc2NzVFMzgzOQorOjEwNTlEMDAwNEFGMTUzMjZFMkFDNjc1OENGMUY4RjhCMjk2MjdFOUIxQQorOjEwNTlFMDAwM0QzQ0ZFMjBGMDhERjEwOTlGOTdERThCMzgwNEU3NTc5MAorOjEwNTlGMDAwMTk5RkU4MkIyRTMxNDExNzc5NEYyMkVFNUNCQkY5NURFMAorOjEwNUEwMDAwOURDNUM1Nzk5NDg5NDhBNzBGMkNGMTcxMzlFRkY4RkUyRgorOjEwNUExMDAwMENDNEMzMDQ3MzdDMkQ3MURDNDdGQUNEMzEzQUYxQjg2NAorOjEwNUEyMDAwOUE4QzlGOUREOTIwRTI2RUYwN0VFMDE4RjQwNzc5MUNENQorOjEwNUEzMDAwQTMzRUEyRkM5NjI1OTA0MzE5NUYxQkEzQzdDOTYxRTQ0RQorOjEwNUE0MDAwRDJFMjZBMTc4M0Y3NkZDNUM3MzA5REFGMEIxMjJGQTczRAorOjEwNUE1MDAwRkU5MjU4MEY3RjQ3RTc3MjNEREQxNjlBQTk5QkY2QjM3OQorOjEwNUE2MDAwN0YyOEY2NTkyNEJFMjRCQ0E3NDQxRURFQTlBNzU0OEE2OQorOjEwNUE3MDAwMDdCNUI0MUYyMDdEMUEyRkNGNzU3RDlDODNCODU1RTdERAorOjEwNUE4MDAwRjFENkJBNURGQjhBNTBFRjlDREFGRjIyRjE1REREQjZGQworOjEwNUE5MDAwMEZGNDMwRjQ3Mzc4RUJGMzNBQjcyNzM5OUZBMzlFOEU1NworOjEwNUFBMDAwOThGNEY0QTk2N0Y3MTVGMUI4MUZDRkJCOERFRkJGNUE3MworOjEwNUFCMDAwRjQ1RkJGREJEQTdGRkRCNkNGMkRGRDU3ODdEQjc1QkUwOAorOjEwNUFDMDAwNUU1RTc4OUM5MzVBRTA0NjlDRUZDOTRFM0I0MzdENzdERgorOjEwNUFEMDAwQjI1RDlEMUU0OTY0MDdFQTc2Q0IzRTY4Q0I1MTlERDZFOAorOjEwNUFFMDAwQUI3MTZGMjY1MTdFRUVEMkEzRDNERjREQzE3RDNBMTA0QworOjEwNUFGMDAwMzNCNDdGM0I5QTM4NUY3NUZDMkMzMDAwRTlEMjcxRjRFNworOjEwNUIwMDAwNjYxNUQ3OEQ5RDg4NDc5MzFENUNGQzU2NDNBOTA3RTQxNQorOjEwNUIxMDAwQjVGOEJERTAzODY0QUI3ODNEMzBFMTk4Q0QwMjM3OEMwNAorOjEwNUIyMDAwOTM4NUZBQjgxOUZBQzE3QzdBQ0MxRkMyRkQ1MUQ1NUJCNgorOjEwNUIzMDAwM0UxREUxNTEwRDlCRTE0QUI4N0VGMkZFRUNFRTIwNDNBMgorOjEwNUI0MDAwQkJEQzZFNThGMzk1QjNBRjEzNzFCNEE4MzU2RjNENUJGMgorOjEwNUI1MDAwNjdDMzcxMUY5Q0Q5OTJGQ0I4MUZCMDY0NDQ2MEY0MjFFNAorOjEwNUI2MDAwQ0NBQjVGOTA0RDcxRTI5Q0VGRjFFRjRFMUJFRUIwRUREMAorOjEwNUI3MDAwOEFEOEJFNkRGMjc5RTgxRkYzNjA2QzkxQjU3M0UwQkIxMworOjEwNUI4MDAwNjRBRDVEQzE3RDAwNzgzMkE0Q0JFREI2RDA0NjNEMDM1NworOjEwNUI5MDAwREJFOUNDMDdBQUYxMzE1REQxMjhGRjQyOUM3QjkxRkQ2NgorOjEwNUJBMDAwQzk3NjdERUQwN0NCNzM0OEFBODA3Rjg4RDgwRjFFQzRDNQorOjEwNUJCMDAwQkExNERDMEY1RUVGRTFFNzkxMDZCQkQzRTlCQ0QxMjY1NgorOjEwNUJDMDAwNjFBRkY5NzBERjE1REIzNTU4RDdFRDhCOUU0NzZBQjVBRAorOjEwNUJEMDAwOTZEMzRCNEI2RTFCRUMwNzNGNThCRkEzNTQwMzdEOTBFRAorOjEwNUJFMDAwN0U2M0M5RjYwMTA2RUU0QkRGNUY4QTc5RjdFOTRGOTREMQorOjEwNUJGMDAwOENDRTgxRjI2QzQ3NTExOUQ1RkY0QkM5RTg1QzI4RkY2OAorOjEwNUMwMDAwQTg3NTUyMTlENTU3MkI5NDE3Qjg0N0VGMkUwREJCNjNDMworOjEwNUMxMDAwRjI5OTAxQzYyREU2NUI4MERDRUU0N0I5M0QxRDNDRDUwRgorOjEwNUMyMDAwODJCNUI1RDc3RkE5RjNGMzMwMkM4OEYzMUYzNDkxQ0YxOQorOjEwNUMzMDAwN0ZBMEZCQkRFRDM4REZDMUI2QUUyNkU0QkZDN0Y3N0M2MQorOjEwNUM0MDAwOTU4QUVEN0NDQ0EwNzkxQUFDRDlDMDdENzk3ODM1RjFGNAorOjEwNUM1MDAwRUIwQkU0RkZDNEU3QzE0ODdFN0YyRTM5RjQxQjg0RTNERAorOjEwNUM2MDAwRUU3OUMzMUYyQTQ3OUQ1QUUzMjczRThBREYyNzY2NDZGRgorOjEwNUM3MDAwM0FEMUE1NDJEMDA1RTE3NDlBRjI5MDJCRjEyNDAyRTlDMQorOjEwNUM4MDAwOUIzMjAzQzc1MUMyMzVFQUQ3OTc3RjczNzg0RTQ4N0U1RgorOjEwNUM5MDAwMTFFN0MwNENFN0E0M0U0NTM4MUY0RTBFRDEzM0ZFOUNBMQorOjEwNUNBMDAwRDQ3RTNERjgxOUYyNTNDRUMyRjNCOTA4QkYzQ0ZGNTQ3RAorOjEwNUNCMDAwQkFDODRENzE4MTczQkI1OUM0OTE0MDdFRTQ3MzYzMjNBQworOjEwNUNDMDAwQ0JEMDg2RjY1REZGQjYyM0Y0NjcxQzM3RkYxNURGOEU1OQorOjEwNUNEMDAwMjNEMERGMTUxNUJBMUY1M0Q3QUU1ODM2MkU0MzFCQ0IzMgorOjEwNUNFMDAwRjg4NEQwOUUxMDc0Q0I0NjVBQTI3Q0REQzFGOEI5MUM1MgorOjEwNUNGMDAwODcxMjQwQkZGMUVDOEYwQ0QyQkYwMzJCNjY5MjVGNzEwRAorOjEwNUQwMDAwMzYzOUFGMURGMzI3Q0VERUM5RjMwMDYwODU1NzUwMEUzQworOjEwNUQxMDAwMDZFRDRFODlBMkZGMDM3Q0ZDNjUxQzFGN0Y2OTVENjc1MQorOjEwNUQyMDAwQUNFMzlFRkREQUI3QUI4QkZBMzM0NDdGNjBFODY0QTI0NAorOjEwNUQzMDAwRENGMEJGQjMyQUI3QjNDRjM2RkEwODBFMzAwQkY3RTE2OQorOjEwNUQ0MDAwN0E3QUE5RTM2NTNCQUNFN0Y0MDBFRkZEMUQyNkJDRTdEQQorOjEwNUQ1MDAwM0FGQUE0NUY5RTgzRDM4RjlFRjFGNDVCRTg2Q0M4NDU0QQorOjEwNUQ2MDAwMzlBRTBBQjY5N0EzNkJGQUYxQzIzQjhBOTFBOURGRDY4NgorOjEwNUQ3MDAwNDM5NzYxRkI5QUQ5OUQ4Nzc5Q0U1MDQzMDFFRUIzRjVFNQorOjEwNUQ4MDAwQTYyRjNGOEY5NUI5N0I2RTkzMURFMzE1NDgxRjVGNkY1QworOjEwNUQ5MDAwM0E1RUIxQ0M5RkExRjVCM0QwNzUyQ0MyN0ZDNUVFQ0ZEMgorOjEwNURBMDAwNkQwOEJGQTRFNzQzMjJDRjNGRkVGQjZGMzkxNDMxNkU2RAorOjEwNURCMDAwNEQ5MzFERTMyNEJCNzRCMjY3RTNEQjREQzc0MzU1RTM0QQorOjEwNURDMDAwNjNFNTIyNjczMThEOUI2NUUzRjE4RURFRURGOUZBMTcwRAorOjEwNUREMDAwRUJENzQ5RTdCMkZBRTJDNzIyODNGNzA3RjhGRkI2MTkxMworOjEwNURFMDAwRkZERkVEMUJGRkIzQjAxREUwOUY5RURGMDBGRjM3NjJCQQorOjEwNURGMDAwRkJCRUYwMkZFREU4NkFBMTE3QUE3MTFGMDVGOEU4OEYyNgorOjEwNUUwMDAwODFFQjMyODdDMkY4RTVBQTlCRTQ2MEYxMTY5NUU0MEZCNgorOjEwNUUxMDAwREFDRkNDQzk4Q0U5OTFDNTkzMUFGNkUxN0MxNzNGQUE3OQorOjEwNUUyMDAwMTBCRjU2ODg3M0E2OUY4OUJDRkVGODdDQTg4NUIzQzNCMworOjEwNUUzMDAwQjRCRkQzMkIyRjJBMTJFN0Q3QzVFNUJCRDdDN0Y4NzY1NworOjEwNUU0MDAwMzBDRjUzRTNFN0I2NTQyMTE3QTU4QjBBNTNEMDFFREE5RgorOjEwNUU1MDAwNkJGN0ZEMEJEOUQ5QUZBOTZDNjMwMkZDNkY0MDI2MzNGOQorOjEwNUU2MDAwRDE3NTUwODNDRDkyMjdDQjJBNTIyREZEOTYyRDJBQTQ5MQorOjEwNUU3MDAwN0RFRjI1MUVERjA1RkRBQUMxQ0JBQ0VCNzY1RUQ4N0E5RgorOjEwNUU4MDAwQ0U2ODQ4QUJGNTlDRDFCMEI2RkU5NkY2OTdBRENCQjdEMQorOjEwNUU5MDAwRDQ4Rjg4OENCNEQ0NUZCRTc1OENBNTNDQUFGRDRBNEJDOAorOjEwNUVBMDAwRkIyQjc2NERCMTk0NDc0N0JGNkQ2OTNGRjZDODc1OTY5OQorOjEwNUVCMDAwRjJGOENFOUIyREVEMjcxQzlCNjdBOTlGRDQ1NTY1QTlCMQorOjEwNUVDMDAwQkZFQTkzMjU5NkYyM0Y3NEZGQzQ2QUE3RDgxOEU5NDc0MgorOjEwNUVEMDAwOTZBNDkwQkUzQ0Q4MzgzMTE3RjNCMUQ5MzhBNTBDRjE0RgorOjEwNUVFMDAwNTkyQUYyMDkwRkRFQTZEQjBDMkYzRTBCNkMwNkU4QUQzQgorOjEwNUVGMDAwRkQwQjY2RDJCQTdGRjBCNkNDODA4RjlFQzUwMUY0NkJFNQorOjEwNUYwMDAwOTgzQTc5NUNBMjdDQ0RBOUM2QTQ1QzczNUU1NEE5RDNFRgorOjEwNUYxMDAwNkVEMTZGNTMwRDZCNzlBNzQzRUNGQjBERTY3Q0YzNzJFQQorOjEwNUYyMDAwOUM3Q0Q5MUIyNjQ3QzEzMjY0RkQxNzBGQ0RDMkYxNDBCRQorOjEwNUYzMDAwQ0VGNjBBM0RCN0Y3OTJGNDVDNjY0MzMxOTY0MUNFMEUzOQorOjEwNUY0MDAwMjY5MjMzMjZENkQ5MTJDMTRGRjAwQ0U4OTgxRjU5RTY5NQorOjEwNUY1MDAwQTFGNTM4ODAyRjdERjQzRUFDODFCQzRDNzFGQTA3MUU1MAorOjEwNUY2MDAwQzI3OUQ5RkNFOUM4ODQ2NUIzODMwNzc5N0Y2MjVENjYyRAorOjEwNUY3MDAwQzM2RERGNjQ1RDk2NzI5RTZEMTNGOTZCNjkzQzdGRURCNgorOjEwNUY4MDAwRTEwNTA1MjlDQzg0REYzRjM4NkNDMjhFNkVFMzRGRTMxOAorOjEwNUY5MDAwODhBQjI3NkYzNURGRkNGRTkzMjRDRDk0MkZBNzJDOUE3NgorOjEwNUZBMDAwNDlGOTIyRDk3REU4NDUzRDNCN0ZDNjY2RDBDNzdBOEU0OAorOjEwNUZCMDAwOEY5RUYyN0RDQjZDNUJDMjNDQjA2RUExNDdBNUJEMzUxOAorOjEwNUZDMDAwMjI2NjZGNzUyMzNENEU2N0JGRjkyMEU2MjlENUNERTlERQorOjEwNUZEMDAwMjY3QjJCREJENjc2REI2MTlDRDdFQkFBODg1RkZBRjhCMQorOjEwNUZFMDAwRjkyQTYxMjcyRjk4NzFERjZEODc3MTVGRkE5Rjg3OTE3QQorOjEwNUZGMDAwN0U5MkUzQUM2RjlDM0U0MzMzOUQyMzFGRDg4N0RGNzRCMgorOjEwNjAwMDAwQjk5M0MzRjM1OEUzRjAxOTE1OTRCNzZERjBGM0EyQTI1NgorOjEwNjAxMDAwRkZEQzcwNkQzOURBQ0Q4MzQ1QkVFOTgzQjZDNEY5MkU1NQorOjEwNjAyMDAwNkVEMTRGMTY5MjFDRTEzNURDMjQyN0E3MTdCRUU3RDVBOQorOjEwNjAzMDAwNjAxRThGQzBFQUU1QzQ3RERCMkIzQThCQjkxRDE2RjBEQworOjEwNjA0MDAwRTMzOUQ0RENFODJEMEY2MkZCREM2QzhERjI1REUzQzczNQorOjEwNjA1MDAwQ0Y5QTEzNkFDREMzRjg2NzlBQ0RFRkE2NzJCNzgyRURENworOjEwNjA2MDAwMUQzRjY1QUMxRkI0NkZGRTBGOTVFMDY5REUzRjg5RjJGRQorOjEwNjA3MDAwM0YxQ0VFMDY4NkZCQTk3MjVFMDdEMjFFMjFGQ0E4MURGRQorOjEwNjA4MDAwQzlCNDBFMzJCMTJGMkVFM0FENUY2NDU3NzRBMkJERjFENworOjEwNjA5MDAwQzVGRDc2MUFFRjBCOThBMzAxRkQ3RkQxQTFEMkJFRUIwRgorOjEwNjBBMDAwRTFCNEE0QTgwRENBNkFBQjg3RDZFRjVDQjQzREExRkRFQworOjEwNjBCMDAwQzIwRTRGQzQ5NzE3QzM4QkI2NkUzMjlEODc3MTBDRTQyNgorOjEwNjBDMDAwRjM2RjRFNzM0N0RDNzkzNEVGNzQ5Q0I3ODQ1M0NFN0IwNworOjEwNjBEMDAwNTAxRjdFNjY4OTgwM0JFN0IyOUU3MzFBMENGOTU4MzVEMworOjEwNjBFMDAwMzRFQTc3NDEyQTNGODcxOTY5OUMyOEU4NjU5RDRGNEIyMAorOjEwNjBGMDAwRjY3NUQ3REU4NEU3ODdERTUyMTlBNjg2RjhCQURBNjgyNQorOjEwNjEwMDAwRkUwQjYxRkUxMTVGNkZGQzlFRjZFNTdENjk1MzA5Q0VDMworOjEwNjExMDAwMTI4NDUzNUQ1NzRFRjNBMDc2RjA1REVERTMwQTdCMjRDNQorOjEwNjEyMDAwMEZGOTMwMzQ5REU4REFERjQ2RTcwMjdCRDkwNzRFMkVCRgorOjEwNjEzMDAwNUYzMzlDM0MyRjU3Q0YyRTk4QjFCOTFGM0U4NzkyNUM5RQorOjEwNjE0MDAwN0NDN0Q5RTdCQTFGNzQ3MjdENDRDRjZGNzBCRjAwQURCMgorOjEwNjE1MDAwRkY1MjFGQTkwMTlCQjA3M0I5NUVFQUIxOUZGNEQwMEY0MworOjEwNjE2MDAwOUMxOUIxQjI5QUYyRDMyMkVDQjc2RkZCNkNGQjNFMURDNworOjEwNjE3MDAwRUQzMzM3MjNGQjU5RUFDREJFRUMzM0I0Q0I5MERGQTQyQgorOjEwNjE4MDAwNURCNjM4NkU5RTMwQkYxQTMxQkY5QTQ0RjNFQkE1NkZFRgorOjEwNjE5MDAwNkY2RTkwNzZDRDEyRTcwNUVDQ0EwQzNEQjEzRTdBNTI5NworOjEwNjFBMDAwRDBBMURFRDAxOUM1OUI2ODhEMDJCREIzRDg0NkU3OEQ1RQorOjEwNjFCMDAwOTkxNjcxOTlDRjk3QUY3NzRBQkI2RUY3M0UxREYxMENEOAorOjEwNjFDMDAwRjM0NjNDNjc4M0ZGNUM0RTdBQzc5RTMwMkZGQzYyRkUyRAorOjEwNjFEMDAwNDhGRUVBQzIxRDQ3QjAzRkIwNzMxMUZBNzM2REJFOTQxQQorOjEwNjFFMDAwQjQwQkQ4MTdGNjY1QUZCQkNDNzhCRENGMjlGMkI5NjMzNQorOjEwNjFGMDAwNzg3QzQwRTBGMTgxODQ3ODRDMDczQ0RBMkNGNkUxQ0VFMworOjEwNjIwMDAwMDIxRkUxRjExN0NFMEJEODg3QTdCRkY3N0UzMUFFNDc0QgorOjEwNjIxMDAwNjcwNEJFRUE3QUZDNUNBRTlGRkJDMzIyODVGMUFBNUFGMgorOjEwNjIyMDAwQ0M1Rjc2RjIzMkVFMDdFMTVFMENDNkUxOEE2Q0MxMjdFNAorOjEwNjIzMDAwQjBGRkZBNURENjczODczRjczRjIzODE5NzNGMzczQjMwNworOjEwNjI0MDAwQjJCRjRDQTFFRkMxQUZGRUQ2MUY3REE0RjdGRjExRTc4RgorOjEwNjI1MDAwMTNGM0FGQkI4QUQxQkY1QUYxQzI2NTI5Njg5Nzk1RUQ5OAorOjEwNjI2MDAwQkNDOUMwRTdCOUY0QTFCNDlFOURERUU5MDgyMDlDQTc5MworOjEwNjI3MDAwRDM3OEJFREVFOTlEMTMwRTYzRkNFMUIzQzYyM0Y5NjY1NQorOjEwNjI4MDAwN0Q3RkZBRDlBM0M1NzZFOEU3RjQ4RUEzQzUxQUU1MDdBMgorOjEwNjI5MDAwNDcyQzc2NjFFREQ3QkYyOUM2NzM1ODMyQUZCQTg3NUZGNgorOjEwNjJBMDAwOUM3QzlEQjhERkM1RTMxQTE5OTk3QTBCRTY4QjlGNEY0QQorOjEwNjJCMDAwNEEyNTdDM0Q5MDY5QkIzNzUxQkMwNkQ1MjdFRERCN0I3OQorOjEwNjJDMDAwNzREQUE3NUMzMkMyQjdDMjhERjE5QTNDODNGMjcwNTc4MAorOjEwNjJEMDAwMjg4MTlDMDVCOENGMzJDQkU5Qzc3RDgwRjQ3QzM2M0M2MQorOjEwNjJFMDAwMkYwNTUxMTg2MjZFQzBBN0UzNjAxQjFEMzc0REVBMzRCRAorOjEwNjJGMDAwRjZBMTc5MjRFMzM4NUEyOUQ3QjdEREQ3RUI5NDM3OTYzRQorOjEwNjMwMDAwQUNGOTFFOUEwM0U1RUNEOTFBQUQ3NzMyQUVFMzQ4RTY1NAorOjEwNjMxMDAwRTc5MjY1NUNBNzA3OUVEN0VDQjQwRTJEQzkwQkI1OTUyNworOjEwNjMyMDAwQzA3NzRCMjZBNUQxNzdERTU5RUYxMEJGOUNGNUQ5QzJCNworOjEwNjMzMDAwNzY5QzhGRDY0REYxOUQ5RjM3MEVDRjE4MEE3ODM0NzIxOAorOjEwNjM0MDAwNkMzM0M4QTZGOTBCNjBDQjk0RkZFRkQ1NTgzODA1RUMzOQorOjEwNjM1MDAwOUJENUMwRkY0MzgxRkYzQjFBOURENEJFMDVFQzQzMjM3MAorOjEwNjM2MDAwOERFRTQ5ODhEREYzNjE5MjlCMUQ4RDA2QjVGQjY1NjM1QgorOjEwNjM3MDAwMzY3RDc3NUZBMzhGOUUzRDc2MDRFM0RGNTEzOTgxN0VDMgorOjEwNjM4MDAwRkRDRjdBREVEM0M4RUYxMzkxRTU3RjFCMDc3NjFBRDBENQorOjEwNjM5MDAwM0I3RDAyNTAxNUYwOTIyRUNFOUZDQkZBNDcxQTVGMUIyMQorOjEwNjNBMDAwNTIzNjU0MjAwM0YwRDlCRkM2RDhCMEVBMDJGMEE2M0I1QgorOjEwNjNCMDAwMjJBOTc4QzRGODcyMTcwQjk3NERDNDNDQkZFRTdCQ0I3MworOjEwNjNDMDAwNTNGMTdDQzQ1RDY1NjUyMzAwOEZCOEJGN0QyNTkwQ0FGRAorOjEwNjNEMDAwNzU1RjMzOUU0RkNEQTlGMTM1NjFEQzJGNjc5N0QyOEU2MworOjEwNjNFMDAwRUI1N0NFQUVCNTI1Qjg4RjAwRURFOERDQTBFQzM3QzM5NworOjEwNjNGMDAwQzVGNTVDRjI4MTg3OTVGQzUxQjhCOUMwRjdFNUQ5OUUyNworOjEwNjQwMDAwRTQ0OEEyRjNBNUUzNUM1Q0NGRjk1RDdDN0Y3MEI1RDg2RQorOjEwNjQxMDAwNTdFRjlFRTUyNkJEOTg3Q0MwNDVGQzkyQjNGQjcyREEyRgorOjEwNjQyMDAwREY3M0Y3QjFBRjFDREY0RkYyODEzRjUzMUNEOEFEQjQxRgorOjEwNjQzMDAwRURDMzdENEFCNjgwREI5RjkyOUZGQUZBMEVEQkVCOTdBNQorOjEwNjQ0MDAwRDBGRUFDNUZBM0I4MzA5OEJEMzRCRkQzQjMwNjEyQkU0NAorOjEwNjQ1MDAwQjFCRDU5OEY5RkQ1MTNEQjY1MDE4MUE3OTVGNkM0NzEzNgorOjEwNjQ2MDAwN0E4REYxNzFDNjc1NzZEMzdFMjZERURCODRGOENFNzkxRgorOjEwNjQ3MDAwQUI0RDQxN0ZGREI0QzJGMzMxRkEwMzNFNzY0MDM5NjczQworOjEwNjQ4MDAwNzIxQkRERUJGNDlDMzM1NEVFODJFRkZFNjQxQzJCNTg0MAorOjEwNjQ5MDAwMDlFMEI4MEE3RjlGOEJERjQ5N0NBODQ1QkExM0Y1NDkwQworOjEwNjRBMDAwQ0VFRTBGRjgzOTFGNUI5NzhFRjk2RjhCRUU3RTlFRTI3MgorOjEwNjRCMDAwOEZBQTFFQ0NFM0U1OTUyQjMxM0U5OUUxMEQ2RTQwM0U0RgorOjEwNjRDMDAwNjFFMUU3Q0IwRTAyOUYzQzIwQ0UyREUzMUJENDdCQUJEQQorOjEwNjREMDAwNURBMjFDNkU2RjBFMDA5RkFDQjZGM0YyQTJCQjlGMjNCMQorOjEwNjRFMDAwQkU1OTZEMEYyRUM2NzNDRjU4NkU4NkZFNTdBN0I2Njc3RQorOjEwNjRGMDAwREJBMEVDNkU3QUE2RjlDODIwMkNDQkY2Q0YzNDg3MjcyOAorOjEwNjUwMDAwODMxREVBOTJGQTM5OTg4Mzc4RUYyOTFCNTAxRTY1MkE3OQorOjEwNjUxMDAwNkJCQ0NDOUNGQzI5RTc1NzdCRTBDRjg3MDcwMEJGRDQzRQorOjEwNjUyMDAwRURFNkY3RENGNEUwNkRENzVBMDVEN0EzNUYzNjFFRjEzMAorOjEwNjUzMDAwMzU2QjQyNEVBNEZFODA3NUZFQjI2QzQ2N0U4QTFFNTFCQgorOjEwNjU0MDAwMjJGOTBBREVGN0QxOUE2OUNFNTdGOTQxQjIyMkUyMTY1MgorOjEwNjU1MDAwRjBCRDM5RkUxODc3QUU4RDhFQ0FFMEZBRENDQ0YzNDI3RQorOjEwNjU2MDAwRTJFOUZBNzY1MjQ5NUI1MjA2OUU0NzBEQUQ1MjUxMEY1MQorOjEwNjU3MDAwM0U2MzM3MjhBRkJFNEIyM0JEN0Q0QUU2RDUzN0Q4QzkyOQorOjEwNjU4MDAwMUVBQzExRTc1Q0VEQ0I0M0FCNDZBMDVDRENBMkY5MzE1RAorOjEwNjU5MDAwQkU1MDlERDc1NjgyRjY1MEY1OEI3OUZFMjYxNkNCRDM4QQorOjEwNjVBMDAwQUQ0RTZEQ0YxQ0UzOEVFNUU5Q0FGMjBBMTE5N0NBNEFENworOjEwNjVCMDAwNkQ0ODREMkRDNEZEOThCNUI5Qjg1RjUyQzdEQTZFRkQ3MAorOjEwNjVDMDAwMDlDMkZCODZDQTkwREYzRkREMzcyOTA1RUYxREFBODU4QQorOjEwNjVEMDAwMzJDNkMxNkEzQjhFRUEyMTY4Nzc2NTEyQkZFRkE2QUU2QworOjEwNjVFMDAwMDNGOEM2Q0RFRkExMDkxNDMwQjY0MTMzOTI1MENGRkY2NgorOjEwNjVGMDAwMzJEMDMwMTI0REUyNERBRTVGOTdCOUZFODFCMTI3RjIzNQorOjEwNjYwMDAwMDMwNkQyRjk5NUJCOEYzNTNCQjFBQzFCMjNEODY4MkM2MAorOjEwNjYxMDAwRkY2QjMzRjI1OUY1NjgxQkU1NTlCMkYwQkYxRTBDMEM0NQorOjEwNjYyMDAwMTVGQkJENTA2RTc1MEQ5QTZBOEU3QkU3ODg3Mzg2RjVGMworOjEwNjYzMDAwRUJERDc0MUUwQ0Q2RTU4REM4REY3NUVCNkM2MURDM0ZCRAorOjEwNjY0MDAwQjMzOTNCRTkxQ0QwMkIyRTI2RTg2MzNEM0Y3NUJGQzIxMgorOjEwNjY1MDAwRjU2MTc4MDE4RkE3MkU5RDkxRjY2RDNBM0ZCNTMyREYzNworOjEwNjY2MDAwMDg1RjIwQUU1Qjc5M0U4OUNFNDlDOUYyOTU0OTNFRUE4MgorOjEwNjY3MDAwQkY1MjBCRDMzRTUyRTU3OTJGOURBRkZBRkI4REU3QjRBNQorOjEwNjY4MDAwOUNEN0VBM0Q5RTlCRTA5MUUzRDVDNEM2MjNCQTFFMTg3MQorOjEwNjY5MDAwRjNGQTgzNDM4MTZFNEJCN0RCNkQwRTEzREYyREREMkVENgorOjEwNjZBMDAwRjZFNzVEODEyQ0VDMjc0M0U3Nzg2NkU4MEYwMkFGRDE2RgorOjEwNjZCMDAwMUQzN0JDMUNENkIyNDFGRjRCRjkwRTlGNkIyRTlCOEMzNQorOjEwNjZDMDAwNzQ4QkQ1MzNBQkZDMDdEMDFGQkYyNzQ5OTZGRkJEQjlFQworOjEwNjZEMDAwNkM2MDgyRjY0OTcxRURGMzY1RkZFQTRBRUMzRjFFOUU1RAorOjEwNjZFMDAwOENBNDU4RDkwOUVEQjVCRjNBN0FDQTA4REY1QTVCNUM2OQorOjEwNjZGMDAwN0Y2OUIyRUM1RTg5RTM0QkJFNkFCRDNCRkQ1MDE4Rjg4MgorOjEwNjcwMDAwRUE5RUQ0QjYxMkQ0RkZERDBCOTgwRkVGRDE0MjdFRjU4RQorOjEwNjcxMDAwOUJGNDZEQUI4QkNCNzVFNUY5N0MwQkJENjM3ODJGQjAyQgorOjEwNjcyMDAwRDBFNUUzQzY2Q0NCQkVFN0EyMzk0QjY5N0ZCNkQ1MjU3MQorOjEwNjczMDAwRThDNUMyRkM5Q0NERkEwMTJDNjI4QTA3RkQ3RjM4RkVCOQorOjEwNjc0MDAwNTYzOEFFRUMwMzhFNkZGRDE3QzNFMUIzOEMxNzgzNjMyRAorOjEwNjc1MDAwQTgwNUJFQkYxNThFOEQzNzE0N0MzQjBGOUEzQ0EwODRENAorOjEwNjc2MDAwOURGOUI4MkVGQzhDRTdDNUE5QTk2NUJFMjZEQzk3Rjk3MgorOjEwNjc3MDAwOTk0NjcxRkQ2MThDRTdCQkU0NkJFQzg4MzYwNkU1QTdCMgorOjEwNjc4MDAwMkQ4MDcxMTBCNjlDREIyQkYwQkVENTNFODZENjIxRjI1MworOjEwNjc5MDAwMTc4NkVDNzZDQ0M1QkM4REZDQ0FDMDYyN0NCMjgxODUwNAorOjEwNjdBMDAwQjRFRjIzRjc0OTk5ODgxM0NBN0Q5RTYxMDYyQkMxN0JGQworOjEwNjdCMDAwRkY4RTI3Q0RBNTc1MkEzRjM4QTcxQUUzRUFBQTY3NUNBMgorOjEwNjdDMDAwMTJBRTg3MEZEODIyNjExQzJGN0MxRjFGMkZDMzE2NjlBMgorOjEwNjdEMDAwNzdBMkJERTQxRDZBRTA3QTk3RTFFNUZBOEZBRDJBQTRCRAorOjEwNjdFMDAwRjU2RkEzMkQ3RkU0NkQwMEM3NEFBNTI0RTkzNUM0NzM3NgorOjEwNjdGMDAwNkEzRUM1QzdGMTNEREVCM0IzNTFBQzVCNkFBQURGQzBFOAorOjEwNjgwMDAwNzU2QUEzNThCNzU2MDhGRDJFREYyN0E3MDVFN0EyMUQxNgorOjEwNjgxMDAwRjFGMzU1RDNBNjNBMjdBMTFFMEFCNEY2ODNGNUU2REVCNgorOjEwNjgyMDAwNTVEMzU2NjY0RkMyRjVDNjk3RUY4NEY1RTVERUE0NjlFOQorOjEwNjgzMDAwMkI5RDMwOTk4RDREQkVGRTQ2NkFBQzNDRUNBRkIwNUFGNAorOjEwNjg0MDAwOTM5RTk4QjYzMjAwN0FBN0Q5QkRBNDBBRUQxQ0E4M0Y0MgorOjEwNjg1MDAwODQ3RUUyMTM2OTUyRUZGMEZBN0NBOUE3NTAyRjgxMUVDMworOjEwNjg2MDAwNTM5QjdBQ0E2MUQ0NEJGOTNEN0E2NzFBRTk5RENEOEY2MworOjEwNjg3MDAwQTk1NDVFMEFFM0ExMUQwM0YzMDhFM0ZENjBEREMzMzQwMAorOjEwNjg4MDAwRjI4RjVDMDA0QjEyOTQ1RDIzRjI2OUZGMENFNkNEOTIwRgorOjEwNjg5MDAwRDBGRjFGQzFFQkU1N0U4NzNFQ0M0NkZCMUREODFFRjEyNQorOjEwNjhBMDAwRThDQUUxRURGNTU5RkNCQ0I0RUU3MTkzREYyNkY3NEY3MQorOjEwNjhCMDAwNTRCMTdGOTcyNEYyNTQxNDYzMTZGOUMxQ0UzNTYzOTYxMAorOjEwNjhDMDAwQTAxRkU1MUM2QUREOUZENkUzRjI1OUQ0RjhGQzE2NzdDOQorOjEwNjhEMDAwOTRFQ0FFQjYyNDExQkZFRUM3QjJFOURFMDRGMTFFMkM3MworOjEwNjhFMDAwRTUzMUY4Q0NCQ0E5Qjk4NEVFRDNGMzMwMDNGM0E5QjNGNgorOjEwNjhGMDAwNDM1MTY2QjY5N0U0RDMwMUVCQThDRjI0MzcwRTM3MEI4QworOjEwNjkwMDAwMjRDQUE3NTg5OENDRUQ2MUY3Nzk4REZCODkwQUQ4Mzc0RQorOjEwNjkxMDAwQjg4RTdBODQxRDJFRUMyM0JCQkNFNzI4NkVERDk1RjY3RAorOjEwNjkyMDAwOTI1RERDQTdCNzc0QzY5NDJDM0M5N0E0QkEwMzRFQjQwRQorOjEwNjkzMDAwNzNGNjE5NjM2ODlGNDY2NUZFNkI0QjRDRjY0RTczNzQ5NQorOjEwNjk0MDAwMDZDNTI3MzUyM0MwRDBDRTc5NUREODM5QUFFMTY3NjY2MAorOjEwNjk1MDAwM0JBN0E1MTExQzcwNThBQjM2MTUxN0QwRkQzNThGQjg2NQorOjEwNjk2MDAwQTJDRTIxNDhERjA3NkM3RUQ0MUIwN0M2NTQ4NTE1OEM0OAorOjEwNjk3MDAwNEYyRTYzMjRBNzlCOEEzM0E3RTAzRUMzMDYyRDk4NzI0RgorOjEwNjk4MDAwMEJDQUNCNUIzMDlFOEZEMzhERUY3M0FGNTAzMDlFRkUyMgorOjEwNjk5MDAwODUzMzk4ODJGQUUwOUU1NDY2RjFBM0FFNERFNkZFQzhCOAorOjEwNjlBMDAwOTYyNEFFN0ZBNDlGRDAwMkYwNDQwMTBFRURGQzQ4QkFCRAorOjEwNjlCMDAwQ0Y2N0I0QjA0QkY1Mzk2NTE0MkZDMzM0MjA4QzdGM0FDMAorOjEwNjlDMDAwNTgwM0U1ODdDQUZCRUExQ0Q5MzY0QkZFQTM3NkJFODg3RQorOjEwNjlEMDAwRTI4OTVCOTJGODM4NzJEQ0JCQzQ3RDgzQjJFQzY0MEQ1MworOjEwNjlFMDAwM0M2RTBDM0M5RUM4N0ZBQjE1NzAzQUMwMUVGMjkxN0Q4OAorOjEwNjlGMDAwMTJCN0ZGREZEQjNFMjI3QjQ1RDJBN0M3NEU1MUY4Qjk2NQorOjEwNkEwMDAwRDBCRUVDQTNGQUYzMzY4QjlFOEQ5RDY3RDc0OTJGOUY5RQorOjEwNkExMDAwMTFGNzA1QzgzQzEwQjdEMDY3MkREOUExQjZBQkYyNjIwQgorOjEwNkEyMDAwRjcwMzY4MjIxRjY0OERCODE3ODA2NTZCRERFNjczRjg4NQorOjEwNkEzMDAwQzkxODhGODFGQTY2OTExNzkyMUM3N0FFREZFNTVFNEExRQorOjEwNkE0MDAwRkU4MjZCQjg2NjM5MDdFNjY0MjFGQUNFRTFCM0JFRDdBMQorOjEwNkE1MDAwQjJFM0VGMEIwOEY3RTQ4MTUxREVBMkM2MUU1NkU4NzJERQorOjEwNkE2MDAwMDA2RUVGMEUxMDc5NThBNzkzREZBNzc4MjNEOEJCMDdFNQorOjEwNkE3MDAwOUNCNDJGQzFDRjg5Q0E3OEQ4MzdCNThGNUY0N0JCOEFGRQorOjEwNkE4MDAwRkNDMkU5QTNCMURGNDVCODFFNjEzQzlCMDU3M0Y4QTZDMworOjEwNkE5MDAwNjMzQkEzQkNBMTI0N0YxN0UzNzc4RTkxQkRBNTRBM0QzQworOjEwNkFBMDAwMTc3RUJFMTlGREE4MENCMzdENjdCMkQ3MkU1RkZEN0NBMworOjEwNkFCMDAwNzM3MzIxRjkxRDU0NUU3NDc3MUJFOUMxOTUyRTU5NUVERAorOjEwNkFDMDAwNEQ2NTU4QUZBMkU4RjdCMDlEMEUxRkYyMTM3QzFGNDAzMgorOjEwNkFEMDAwQjk2MTM3MTQ5MEJEQUNFNjgzNEIwQjcwOTdFMUZEODcyRAorOjEwNkFFMDAwQjgzRkIwRDNCMTExRUQ1OUYwNkJFN0I5NEM3MUIyRDNFNworOjEwNkFGMDAwOUU2M0I5QUMzMDYxN0Y2MTRCN0ZCOURGQUMzRjE4QkY5QgorOjEwNkIwMDAwMDNGMzhDNjQ3RDk5Nzc1RDU0RTVERkY5RjAzQjM2QjA5MworOjEwNkIxMDAwRjNGRDMwRjRGRkMwMEIwRUJBOTc0NERFQjMxQ0NGQUZDOQorOjEwNkIyMDAwNTM5MkI5RkY4RTdBQzM5Q0NGQTlDRkE5MDgyMDczNEE4QworOjEwNkIzMDAwRjk3NDY0Mjc1OUYyQkZBNUJDNkFFNzg3OTM3Q0NBRUY1MgorOjEwNkI0MDAwNUU0RkUyRkJDNzlBMTZBMEI4OUE3NkJFOTBFNDdGOEJBMAorOjEwNkI1MDAwQTA2QjRCQTM3MTkxNzFEMkZBMTg2NzBDRjVEM0Y3Mzg3QgorOjEwNkI2MDAwQzU0MjRGMzBCMTNGQTYxOUU2N0I2NEZBOTJEN0Y4RkREMworOjEwNkI3MDAwQzA3OEZEMjY5RjUyQkZFRDE1RkRDRjREQjZDNjk3QUIzMQorOjEwNkI4MDAwRDZCNTFGNDYxNkZBODkyRDU0OTEzQzFFRjNCRURFRjM4RQorOjEwNkI5MDAwRTI1MjVDNjM4QjE2QTFCQ0REREVGQjdEMUQ0RUVFNDczMQorOjEwNkJBMDAwMjI0RTUwQjBGNUI2RkRDOEFFMERDOUExRjU0OTUwQUVBNAorOjEwNkJCMDAwNEExNkZCMDBEOUIwQUVBOUI4NkVGMUJDQTU4N0IxMUVDQworOjEwNkJDMDAwRjMxQjQyQkU4N0E2QTI5RTlBNTU0RUYxRUJFNzkyODMzNQorOjEwNkJEMDAwQkZDMUVGRUVCRUFFOTg2MjA1MTJFRUQ1OEQzQ0RGNEUyMgorOjEwNkJFMDAwRUE0QjM3RTIwQkRBM0JCNDA2MUVGNzc0MDdBMjY4NUY4NAorOjEwNkJGMDAwREM5N0ZDRjY1NDBERjk1MEUzNzJCMDZDRjVGRTk1MTg3NQorOjEwNkMwMDAwMTc3MTZBN0VFMjJCQTdEQkU2QzNGNUREMDlGRTFEQUUzOAorOjEwNkMxMDAwN0I0RDZFMUJDNTkzNTZFMDNEQzBGMEJFNTk5OTY5QTBFRgorOjEwNkMyMDAwQkMyRUYxRTQ2N0IxMEJFODQ3RUQ3Q0E2RDBCRkQ2N0I2NAorOjEwNkMzMDAwNzVGRUZFRTNBNEQzRjdCREVFRUYzOTMwMjk4QUZENjk3NgorOjEwNkM0MDAwN0U0NkY5MzM4ODg0MEY0RDdBNTVBRUVCRjFERkM1RjdGOAorOjEwNkM1MDAwMkZGMTI5RjFFQkQwNDI4NDU3MURFRDg2MDQ3MDNEOTk0OAorOjEwNkM2MDAwNkNEREI3Q0Q5MkZBMzNGNTlEODIyOEJDQUQ1NUJBQkMyOAorOjEwNkM3MDAwNjg5RjgwNUU3QzEyRjlBNDZFNTRGN0FGMTUxRkU5RDNBQworOjEwNkM4MDAwNEM2RUNGODRFNTdEMDU5NkZCOTE2NDVDNUU3NTczQkJBRAorOjEwNkM5MDAwNDZDMkJGRTRCNTA3OUNFNjdEQTc3ODc4RTNENzRCNzc3QgorOjEwNkNBMDAwQTEzNTNGQzMzOTMwMjlFRUJFRTAyNjNFOEUxNjI0QkUwNAorOjEwNkNCMDAwQjE0RjBFMzg1MTRFOUE4QzMxMDZEQTJCQ0Q5QUVGQjc4MAorOjEwNkNDMDAwMDFDQTJCQjE5M0REMEM3NkI4NjU3Q0Y5QkM0N0RDMEZBQgorOjEwNkNEMDAwN0M1NEQ4NTFGMUY1MUU3MTlGNzJGQ0ZCQ0Y4NUZENzA3RAorOjEwNkNFMDAwQ0ZCRTlCNDgwRkY3NDUzRjNDNTA4REY0RjVFNDMzMDM4RQorOjEwNkNGMDAwQ0ZFN0Q4MDVCQ0RFOEJGNERCMTcxRkREQkI4RkM3NzU3NAorOjEwNkQwMDAwQjU4OUNFMDhCQTU4RjFFM0E5RjY2MDAwQ0Y5M0E5QTNEQworOjEwNkQxMDAwMTlEOUJCRUEyMDNFM0VEMEQyQzBCOEIwNzc1QzFBMUI2RQorOjEwNkQyMDAwNkU1QTY3RUYxRTdBMURCRkRGMzlDM0EwRjM3REFBQzc3NQorOjEwNkQzMDAwMTY0QzY0Njc0QTNDMUQ0Qzk2Rjc1NDcwQkVDOTk2N0M0RAorOjEwNkQ0MDAwMzNFQ0Y3NzQwRkJBODk2RkJBMTNGMUNEQzE2NEFFQUZFQgorOjEwNkQ1MDAwMTAwRTMzM0RFRjFFOUE5Rjk1ODgzRTMxQkRDOEY5RUE2QgorOjEwNkQ2MDAwNjI3Q0QxMjFFRTRCQUM0NURDODA3RjUzMjNDRURCOUY5MAorOjEwNkQ3MDAwMTJGNzA0Q0Q0QjE2RjcwNTE5REMyRTk2Rjc1Rjc0NjhGMQorOjEwNkQ4MDAwODE2NEI0QUJFNkY1RUM1MzA3RTg1QzRBOEQyQjkwMzI5NgorOjEwNkQ5MDAwMDlGOUYyMjhCNzdCM0YyRUUxRjc5NjdENkMwRkE0MjAwRQorOjEwNkRBMDAwOUUzRjNFQUEyQTREQjRDRkNGRjMwMjY1OUVENUM3NzY0QgorOjEwNkRCMDAwREZFQTkxNTAzRkZGMTc2QUEwODlBQUFERjZEQzI5MTZEOQorOjEwNkRDMDAwMThGQkNGNjhERkVFNTI2OUZGMjhFRkJFQjlFQTI4NjhFQQorOjEwNkREMDAwNUYwMTg2MUVGMkQxQkM1Mjc3MThEN0RGOEVERjM3QkMzOQorOjEwNkRFMDAwOEY3QTY4RkU2MzBFREY3MjE4RTdFMEJBQjE1RjYyRjk2RQorOjEwNkRGMDAwQzQxQThGQ0Y0MTcxQjI3QzA1RUYxNTVGQkEzNkNGQTBCMAorOjEwNkUwMDAwRkRBMzY1NENEODE5NDNDQjRCODczMkY2MTRGRTUzQzYwRAorOjEwNkUxMDAwOUQ5RDc0Q0ZCOEE4MEZCNjk0QzFGQzQ2NjY3NEQ4RENBQgorOjEwNkUyMDAwMDA1M0M0MUQ2Q0MxNzM0RTJCOUI4MkQ5RThGRjVEQkIyMAorOjEwNkUzMDAwQTZBMDA1RTM4Rjk5OTk4MUNFQUI0MTFGQUY1ODMzQkMxMworOjEwNkU0MDAwMUNGREMxOEU0NzQ0N0ZFMTExMkRFOEVGQkQ2QzBCRTVDMQorOjEwNkU1MDAwMjk1MEZGRDQ5QTI5RTU5NDk3M0I0NEY2N0YwM0Q1Q0Y3OAorOjEwNkU2MDAwN0JGQ0IyMkY4RjE5ODhEM0NBNzI4Qzk5MTVDRjkxRjAwMQorOjEwNkU3MDAwRDQ5Njk3ODI2RTVGMzA1OTk2OTdFODU4NEU0RjY2OTYzMworOjEwNkU4MDAwMzg5ODNERTY0RjUyOUNBREEzQzc3RkJDQTMxQ0UzNjA3RQorOjEwNkU5MDAwRjNBNzM0OTQ2QUQwN0Y5RUU3QTcyRDg1MjAxQTEzREFEMgorOjEwNkVBMDAwNEE4QzAwNUU5OUVCQjlBRjNDMzkwMzZGQ0QwQjU0RTNDQworOjEwNkVCMDAwN0EzMkQyNzM3RjM5Q0UyN0JEOUZCNUZGNzQ1NUM0NTM0NAorOjEwNkVDMDAwRDlCQTE2RUNBRjA3QkVGMEQ2MTY4Q0FGQ0FGNjZGREU5NQorOjEwNkVEMDAwRjM0RTRCNzg2MDhDRUZCRjFCQkI1RkU5M0JFRTBDQkEwNworOjEwNkVFMDAwQjdFRTMwODZEODcyOTc3NUVCM0M5RjU3RTRERjBDRUMxOQorOjEwNkVGMDAwMkFFMjc5NDVBMjNDQkM4QkU3NURDQjcyMzYyRjc3MkMxQQorOjEwNkYwMDAwNEZCQ0NFRkZEQ0NCRTVBRDIzMjk3MUZEQ0ZEQzVDNUY1MAorOjEwNkYxMDAwMDBEQ0E0RTc1MzhFQjFDMEI2MDQ3MjU0RTE3NjUzQkJEMworOjEwNkYyMDAwNDM2MEU3MzlEMzYyRjI3NEFEODNCMTg5OThERkU0RTQ1QQorOjEwNkYzMDAwNzBDQTdFRTJCRkJGNTM4Q0MzQzJEN0E2MjExRkNGMTQzNQorOjEwNkY0MDAwN0MzRUM0QUZGMDNDQTU1REM5MTFGQzNEMDZGMEIyQjQ3NworOjEwNkY1MDAwRUZDMTdDQjY4QTc4QzQ1NjE3RkJFMTJDMTgzQTMzODkwNgorOjEwNkY2MDAwODVGMERFOUM4QzdFNTAyRUE0RUYwM0RCRERCMUZFREVDRgorOjEwNkY3MDAwRTAyMkNDQTYwRTA5NkVDNkZFQTY2NkU1OEM1RTkxMTdEMQorOjEwNkY4MDAwRUIwN0UwNkU3NjhFQjFDMEFENEQ0Q0MzRkE3MDdGOENDRQorOjEwNkY5MDAwOTNGNEUwQjM5MENGMDNGODg0RjAwNUMzM0M4REJGMUY5QQorOjEwNkZBMDAwRDBEMTM5MzIxRkY1RUY0ODRDQkEzMUU5RjlFMkNFRUJENgorOjEwNkZCMDAwRTgzQ0NENTJBRkQ4MUZGMUYxRUYzMzRBNzlERTRCRjcwMQorOjEwNkZDMDAwOEJDOUZDRkU0QzY3Njc4MTc5M0ZFQjIxQjdDODMzQjhBQQorOjEwNkZEMDAwNkJFNjQzNzQwRUJBRDNDRUU4RkNDMkY2OTIwQkU2MUQwNAorOjEwNkZFMDAwRDY2MDVDQ0U2NDM3RDY2ODUxRjJDNzZBMzAyRTM3MTY0OQorOjEwNkZGMDAwRkI3QjgzQ0UxRjYyM0YzRTExN0ZDNkI4NUFDNjhBQzQ1MAorOjEwNzAwMDAwRjQ5N0VCNjBDRDc5ODM4NUZCRjVENjk3QjFGRUQzNTkyNAorOjEwNzAxMDAwNzhFQ0M1RTcxNUVCQ0ZFQTM3RjZFRTRGMTc3MTdDODFCOAorOjEwNzAyMDAwNzc0REUwNUQ0RjBDRTc1RUM5QTc4MDZGOUI4OUJGMTY2NworOjEwNzAzMDAwMDg3RTkzRkI4MTY3NzY4RUQ4NjhERTdGOTVFNzg2NDA3MQorOjEwNzA0MDAwM0YzRjhEQkY4RjEwRUU0QzIyN0ZBNTU4MEI1QzgzRUQyOAorOjEwNzA1MDAwOEIzQkQzNjg3RjQwRjI4N0U0MEI0OUQ3OEVCNDA2OEExNgorOjEwNzA2MDAwQjc3NDNGQUNEMDM5QUU3OEI4MEU0OUI4RDZGMTdCRkJENworOjEwNzA3MDAwQjJFNjg0NTRGMzNERTM1MjFFQTBGRjBFRDFGRkI4ODk1RgorOjEwNzA4MDAwMjQzRjhGNzI3OTAwQjlCOTA1RTUxN0VGNjFDMTc5RjgyRQorOjEwNzA5MDAwQkI4QUNDQkY0NzIwRTEyRjQyNUUxQzRGNzRFNEY4N0ZDRgorOjEwNzBBMDAwQzEyNUYyNTczOERFN0FFM0JGRkY0NUU4OTk0QkY0MkM0RgorOjEwNzBCMDAwRUVEQzRGRjNBQ0U5NDM2RUFCQkM1RTlFQzc3NjJDRUFDOAorOjEwNzBDMDAwRjU0MUJCMzE4MkZGM0JEQTNGQTQ3QkM1M0E3NkE5NEM0MAorOjEwNzBEMDAwRjFGMTc5QTNERTJBRUVEMUM3RTM1RjlEMDJGQTM4QUI2NgorOjEwNzBFMDAwQTcwQ0ZBRDI4Nzc0RThEMTlGNTFBNzMzRDZGRTA3REVFQQorOjEwNzBGMDAwRjFEMzlBNTE1RjhBN0I3QkQzNTU1ODZEQzZDNEUwRjhCMworOjEwNzEwMDAwOTM5QkRCNTcxMzQzODlFMzU4MEQ1RThGNDU4RjNEQkMzRQorOjEwNzExMDAwNkMwQUZCMTBFNjdGQTU5QkU3NUY0REVDMEFEM0VGRUExNAorOjEwNzEyMDAwNDhCOThFRDc1M0ZEM0M5QzhFODZFN0ZGOTI5RTcyNUREOAorOjEwNzEzMDAwNDQ0RkI5QTQ5RUUyRUYwRkExQ0QzQjA2RDdEN0FFMjJCNAorOjEwNzE0MDAwMDVFQ0U2MEE1QjIwMTNGREFGOEY4RUZFODRDRUE3MkNFNAorOjEwNzE1MDAwMTJGOTM5QTMzMDNGMDdEN0NENjM0MTVBNTczRUM1NEE4QworOjEwNzE2MDAwOUVBNzMzRDA5MzgxRjlEQUQ2M0MxREI2OTk5RjZCOEREQgorOjEwNzE3MDAwRTdBQjE4MUY4NTg1RkQyNkUwMTBFQkMxQjU4RUFFNjcyNQorOjEwNzE4MDAwNzkzQ0MzMkFDRkIyMEM3MEQ2RDk4Njk4RUFERDdDREQ3MworOjEwNzE5MDAwOTI3NDAwN0EzN0QzM0RDNzQyOEU4RkVGQ0NEQTgwRkFGMworOjEwNzFBMDAwRjY0RDBGQ0ZCMzQ5MUYxMjE4OERGMzk3NzIwOUVCQUE1MgorOjEwNzFCMDAwRTAxM0RCMEZBRjczNzNCRDcxNUQwMkZFOURFQ0UxN0FFRQorOjEwNzFDMDAwNzZDMTNBQ0UzNzFERkZCQkY0MUFDNDdCQzc5QjY5QTlCMQorOjEwNzFEMDAwQ0I0RDdBQTI0Q0M4QjFFQzU3RUEyMUY5OURBQzlGMjI2NQorOjEwNzFFMDAwRkE5QkU2RTE3MjUxRTZFNjdDODc3MDI0Q0EyNzI4MzNEMQorOjEwNzFGMDAwQURBRkM0M0ZBRDlDN0Y2MEJFNjEzMzdGQkYyOUZBOERDOAorOjEwNzIwMDAwRTE1M0FDQUIwMkNGQjUzQUUwMTdGMEI3RDUxRUVFOEYyNQorOjEwNzIxMDAwRjk0OUM1OUQzNkVBQUY2Mjk3ODdGMjMyMkJEQTM5MUVGQgorOjEwNzIyMDAwMkJEQUY2RDlBQTRERjg4OUVGNkZBOTg3Q0JEMTA2NzE3MQorOjEwNzIzMDAwMEZFRDIxMUJGMDFCRTJERENERTEzQkIzMzM4N0Y0RTcxQgorOjEwNzI0MDAwMjIwRkI3MUIyRUJFNkU1QzlBOUVEOTIwRjIzMTgwQkVGMworOjEwNzI1MDAwOTRCRjU4RkJEMjgwMEQ1NjNEQ0RGQjRCRUYxNzVBODFBMgorOjEwNzI2MDAwRTdGMEQyMUY2MjdFQ0MyOTAzM0M0NTE1ODBGQjRCOEY5MworOjEwNzI3MDAwRDAzQjdBNDBDN0YzQjZERDBGMzNEQThGMUYzNjI3MzBBNQorOjEwNzI4MDAwREEwN0U1RkFBMDdCOEMwMkZEMTVCNDcxM0Q1QzdDM0YwQQorOjEwNzI5MDAwRDgzMTI4Nzc0RUI5MkVCQ0I2Q0QzQ0RFOUQxRThGRTU4OQorOjEwNzJBMDAwMUM2MUM1M0E4RUJGNjE2MEZGM0M4RDRGRThFNzU5QjI2MworOjEwNzJCMDAwRTMzOTNDQzcxRjZDQkYwQUUzNEVGMkZCNTY0MUZGOEIxQworOjEwNzJDMDAwQzE1NzhDRjA4RDhCQzE4N0ZENTNGRThBM0JCODFDRkJFOAorOjEwNzJEMDAwQURGQkNEOEUwMUU2N0UxRkU4RTk3N0RFMTQxN0VBRjlGMworOjEwNzJFMDAwQjVCMEVFOTA3NDg2MEVFMEI5OEI4QUREQTkwNkRFOTMwOAorOjEwNzJGMDAwMDBGMjZDNDM3RjQ3OEU1QkExQzlERkNCRTkyQUM2N0JENgorOjEwNzMwMDAwQzIwQjdBQzY5MTc0RkRERDMzRTZGOTZGRjJCOEZGQUVCOQorOjEwNzMxMDAwRjRFREQwNDMzNDlGRUVFRDAwQUYyRjg2OTc4RUY2Qjk5MworOjEwNzMyMDAwQ0I1REI4NEUxQzYzN0U1QzI3MjRCQ0MzRTY3NDc5MzEwOAorOjEwNzMzMDAwNUZBNDVFQUMxRjMwNUYxQkZBMkZFOUJGRjBCMTE1ODg2OAorOjEwNzM0MDAwQjdDRTI5NzQ0RjQyM0M1RjRCM0EwRDY3NUM3RUE0OUZEOQorOjEwNzM1MDAwMzYxQzAzRkM1MERFRUQyOTEyRkE4NzkxOUY3QkZDQTVCOQorOjEwNzM2MDAwM0Q0RkYzN0IyRDM4NURFQUU3NzAzQTc2Nzk0MjVGN0FEQworOjEwNzM3MDAwMzI2MjcyMDhGQTlDRUUyRkFFQjhCRjQ3MUZCNUYzRjcyMgorOjEwNzM4MDAwOURCOTczMDA5RkJGRjY0ODM5QjdEMjI1M0REOEVFQTIwQworOjEwNzM5MDAwNEI2NjA1NUY5RjdFNzE1NDY0MTVBNzMzOERERkQxRUU3OAorOjEwNzNBMDAwODkyODBBOUVBMzZENjg0MjdGNUJFQTA5ODRDNzlDQUY2NworOjEwNzNCMDAwMjRFMUU5QTEyMzAzM0E4RThBQkQxRjM2ODdGNzU3MEZEMAorOjEwNzNDMDAwRjI4RTdDNTRBMzM2MjgzOTBBRTkwMThBQUY2NkExMUVFMQorOjEwNzNEMDAwODA3MjU2M0I2RkM3NzZGM0ZCMUIyNDlFNkE2RTg0NEUwOQorOjEwNzNFMDAwQzFFRkZDNTc0RjIxQ0Q0M0UyMkI2QjRFRDQ1NjUzODg0RgorOjEwNzNGMDAwRjlDQUZCMDc3RjY0QTJGMzExQjE1RjgwNzhCOThFRkNGNAorOjEwNzQwMDAwMERBRUFGNkJENEUwNDBGNDVCNTk5NjgzQ0VBMUMyM0E4NworOjEwNzQxMDAwNDRGQUU1OTA4QjY5MkVFOEVGNTU3OEUyQkEzNDU1QkQxMQorOjEwNzQyMDAwOERDRTA5NEQxREEyOTAxQzgzMDY5MEYxMUVGQTNEQUUzMworOjEwNzQzMDAwNkJBRjRFRTY3OTVCN0ZGOUQxNTA5QzY3NDYzMkU3NDNFQworOjEwNzQ0MDAwRThDNzI5RkE3MUQyM0EyOEQ2ODM3RkM5MDVCQjRFODk4RAorOjEwNzQ1MDAwRTlFNTQzOEE0MkZEMUNGQTg3Q0IzN0FFNTA2MjdDODk0RQorOjEwNzQ2MDAwRkRBMUZENzQ0ODk5MzU5MEQ2Q0I4RTBDOTExQ0Q0NjU0NgorOjEwNzQ3MDAwQzkyN0VCQkQ5RTc1RTU2MkJERDk1RjQ0RkYyRUU2NkY1RgorOjEwNzQ4MDAwMkE3NzREMDM5RTlBMzBCRDNEOEE1NzRFMzc4NUQ1Njk4MAorOjEwNzQ5MDAwRkYwOEUzNEUwNTdGRDM4NUZBRDNDQkY5RkE1MDVFNTg0NworOjEwNzRBMDAwRjUyMjVDQzMxNEJBNUZGOTcwNTJBODkwREZEM0NCQzc0MgorOjEwNzRCMDAwQzkxNDcxOUI0QzkxQUY4Q0Y2MDIzRTIzNUVBRUZGNDcyMAorOjEwNzRDMDAwQTZGMEU3OEZDNTMzRDM5QjM4Q0VCMzU2RDRENzhCN0I4QQorOjEwNzREMDAwQUQ1Nzk1MjRDRTY3MUJFODU1MkNGMTk2NkJDNUJFMDVCQworOjEwNzRFMDAwREVGRkVCRTU3RUE3QzhCM0U1RkIxQzYwREYxMzdFNEIzOAorOjEwNzRGMDAwRUY5QTQzRkI3NjVGNzQ1RTlGQzJFRjZGRTBGQUUwNDM2MgorOjEwNzUwMDAwMjVGMEVCMUIxNTdDMDZFOUZFQkNGMERCMkFFNUJGN0YwRQorOjEwNzUxMDAwNjQwNEJDOThERjU0OUI5NDM4MEZCQjQ0Q0NBRjU2Q0M2QQorOjEwNzUyMDAwRkZFMzQ2N0VERkMyN0NEQzRGMDNGRDMxRDZDQkU3QjEwMworOjEwNzUzMDAwQTg2RDZDMzlEMjdCRDExQTg1RjZEM0U0QkVCREE0NkY5OQorOjEwNzU0MDAwRTU3QUQ1MTI0RjlGOEZGQjY5RkRGRTE2M0ZDQURGODc5NAorOjEwNzU1MDAwMUYzNUNFRTI0N0M5NzFFM0ZEQTlFMzhERDk5NkI4RkY4NworOjEwNzU2MDAwQkNCNjIxRTI5RTBCREU3RTNFRjMxM0RDRjM1QjA3NThENAorOjEwNzU3MDAwRjZGRjU4NkJDNkE1REQwMzBBRkU1MzM4MjE3QzNBRTlCNQorOjEwNzU4MDAwNUJGOUZFNzhBMzkzODVDRDcwN0MzMjk0RjIxRTA2N0E2NworOjEwNzU5MDAwNDMzNzIxN0Q2MzcwMjRCM0IwMTkwRTM2OTlGRkVFOTUwMQorOjEwNzVBMDAwOEJDNzVEQzEwRUU3RkUwQjNDMzdCOEM5NEVBNzdCNkE5RgorOjEwNzVCMDAwN0JFMjYwQTAzRjhDMTRENDQ3MjU3M0JERTM2MzdFODNEOAorOjEwNzVDMDAwOTRBRjlBQzk4OUZEODc3MUMyQ0YxREU3RTZGRTcxQ0FFMworOjEwNzVEMDAwMzFFOTRGMjdGOTUwMkY0QTdCM0NGRUJCODYxRUJFQjVEMgorOjEwNzVFMDAwREE5MzE3OEIzRjAwRkY4NkNERkU1MTdDQkYyREEyREZDMworOjEwNzVGMDAwNkZDRTJGRjk3REYwNEJDMTdGODlERjVEM0MzOTQ0RjFCRgorOjEwNzYwMDAwM0RENkE2NTAyRUNBODQzMkFCMUZGNDg4OTdBRkU3OEZDMQorOjEwNzYxMDAwNzg5M0U5N0I2OTU3NTdDQ0IxQjY3QjBDREI4REM3Njc5NAorOjEwNzYyMDAwRjIyNUM1NzNDQ0Y2QkIzMjA0RjUxRkVGNEZGRUVFNEVDQworOjEwNzYzMDAwREVDOTM3MjlGRkYzNzdFODI3NDI3RjZGQTQwNEI2MjAxRAorOjEwNzY0MDAwN0ZBQzExRjlGMjFCRkU3QTIwN0IzRURBNDNGRjZDQTc3OAorOjEwNzY1MDAwRkRGQTkyNDc5N0FFQzA3QzY2NzdCQjYyRDBGOUEzNUQxNgorOjEwNzY2MDAwNTY3OUY4Q0VCMkY2QzExNTgwOEY3NjQxQTcxQTNGOUZBMgorOjEwNzY3MDAwNDc4RDNGQUEwRjc1NjM3RTM1MUY3RjYwRkIzRTQ1MzMwNAorOjEwNzY4MDAwRjFEQkMwNEFERUVFMjVBRkREMTI5RkQ5OEI2NUU4NjdERQorOjEwNzY5MDAwQjdENzkwN0VDQkJFMTlFOUQ4M0VBMEExMUREMDFGN0ZFMQorOjEwNzZBMDAwRUYwNkUwRTlERkMwQzg4RUVFM0Y0RUExRkVCRjMzNkVBRAorOjEwNzZCMDAwODM4MkJGQkYyNUU3RDk2QTlCNTU2OEMwNzdBRDk5Qzk1QQorOjEwNzZDMDAwN0U1QzZGMzI4REQwNDE5QzY3Q0Q3QkQxMjgyRThGMTM4RAorOjEwNzZEMDAwREVFQkQ0RDBCRjFBNkUwNDBFQTFEQ0M5NzlGOTU0QTMzNQorOjEwNzZFMDAwM0ZEQUVEQzlFRjcxRjhEQTdBRTI0QTdDQkQ2MTZDQjUzOAorOjEwNzZGMDAwQjA0MzM3NzI3QjRDNjU0NzE4QjdDNzY5NURDRjVDM0VCNgorOjEwNzcwMDAwOUNENjNEMzk5RkNDMzRCMTZFNjRCMjEwRTYxRjQzRkI2QQorOjEwNzcxMDAwNTZCMjUzOUM3Q0REQ0Y1Q0NFN0YyRjRGRDIzM0U2NjdEMQorOjEwNzcyMDAwOEUxODgzN0VFNjkwMzU1MTZEMUU3Q0Y3RDI3QTVCQzI0RgorOjEwNzczMDAwRkIzNTNFMTQ3ODg3NzlCQzZGOUVDN0M1RjQ5NTZDNjc5RQorOjEwNzc0MDAwRUYyM0NFMjhGOTNENzk3QTYyRkY5REIxN0JBOUJFRTQ5MworOjEwNzc1MDAwRDFGNDlCNDkyRTlCNzVCQTBGNTFFMjdGQjgxMUZDMUNFNgorOjEwNzc2MDAwRTFFOURGQkU0MTQxREMxQzE3NzkwNUM3NTczREFEQTBGQgorOjEwNzc3MDAwMURGOUEzQzVDQzUwMTNGMDUzOEZCQzJFREIzMUI4QzIxQQorOjEwNzc4MDAwQTQzN0ExN0ZBMkM3ODZCODNDNzExOTZGNzFBNTcwRkY5RAorOjEwNzc5MDAwRTcxNjIzQzg1MkM2NTNERTJFRjlDRjhCMzdGM0RGREQ1MQorOjEwNzdBMDAwRTgxMzFGOTc4ODJGQTU5MkRCRTUzNUIzRjlFRjhFOTY4NgorOjEwNzdCMDAwM0NBQTExQkRBQjlCRjlFRjBFRDY2Q0RCNEVFN0VDRDhDMworOjEwNzdDMDAwNEY5OTFGRTVCREE2N0RCQjUyMDFFMzU2NkZEQkFFMkM4MgorOjEwNzdEMDAwMzBFMTZGNDA0RDg0RjJBQjJGRjNDODdEODcyOEQ5Q0RCRgorOjEwNzdFMDAwRjE3QzhERjEwMkI0NTMwRUJCQjhCQzlGMkE3MTg3NzEzNgorOjEwNzdGMDAwMUZFMjk0M0Q1NDgzRUQ0RUU1MjRGQjcxOUY1MkUyRkI2MgorOjEwNzgwMDAwRDVFREQzRThCRTAzQ0YwRTQ3MTQ5RkFEQjY4REQ5NEU0QworOjEwNzgxMDAwNjhENzNBNTJGNzIzMUYwRDM3NDJDMzEwMkY2OTVBQjA2OQorOjEwNzgyMDAwMDNCRjRGNERGN0Y4NzExRkMzRTc2MDYzNjhCREJFNDRFNworOjEwNzgzMDAwM0M0Qzg4RTM4NzA5M0ZFNTcyNzI2MzhBNTdDODA1QTMwOQorOjEwNzg0MDAwQkNBN0FCNTMzQ0QyN0UyMkZENzREOENFRTdCMTgzNzE4NgorOjEwNzg1MDAwNzgyM0RFQzBCODE0RTRDMzIzRkM3NzEzRkFENzQ0MTVBOQorOjEwNzg2MDAwQ0MxNzg5MUYzN0M2NEY4MTJCMTFGRTRCODdCMzVENDc1RAorOjEwNzg3MDAwQkQ1RTJERjQ0Q0M5QTM5Qjk1MEY0RDcwQ0Y0MEEzMEE1QworOjEwNzg4MDAwRjk3M0RCMDYwNUUzNjQ1MDRGN0EwNkRBMzNDQzRCRUEzMgorOjEwNzg5MDAwQkY4REZCQTVENTUwQkZDMEE0NTdFNDNDMTJFODk3MjA4QworOjEwNzhBMDAwQzJFNzdFQUZGMzIwRDcyRjUxQkUyRjIwRTA4REE3RTc5MAorOjEwNzhCMDAwOUMxNDFGOEQ1RjBFRTYwMUJERDdDM0MzRDEyRjNFOUMyNAorOjEwNzhDMDAwOUY0NEZENDk3OThGOTdDRjM5ODJDRkZCQUZERkFDRDg4QQorOjEwNzhEMDAwRENCNDdGNDI3NkE0ODQ0RkI2N0IyMzY1NEEwOEUxOTlFNQorOjEwNzhFMDAwMzBCRDkzRjA1MEJCNUVBM0Y5NENENTgzNDM2RjMzQzlEMQorOjEwNzhGMDAwNDM1RDBBQjdFM0Y2REZGODNFRERGRjczRkZBRjhFMTI5QworOjEwNzkwMDAwM0ZENjgyM0Y0REZFNDREQjUxRkQ3QTVDNTdDMjRGQUEwMQorOjEwNzkxMDAwQjhERjc1MEQzNzQ5RDg4M0UyNUVBQzZCM0FCOEZFQUQ3RgorOjEwNzkyMDAwRUREOEFFRTEzRDkyOTI0RkYzNEVFRUE3RkJCNDZBREI4OQorOjEwNzkzMDAwMUQwQ0ZEMjhFMEJGQTU0OEVGNzgzRUJENTQ3QTgyMUU5RAorOjEwNzk0MDAwRTI3RTUyNTgxN0YxQkM1MDFFRkEzOTUyM0Y0Nzg0M0QyRgorOjEwNzk1MDAwQ0FEQ0ZDRkRCRDAyNEYzMUZFMDlCNUE0NThGNEFCOEI2NworOjEwNzk2MDAwRTQyMkVGRTQ5OEZEOTg5NzU5RUI1N0U4QkNBNDg0MjdFQworOjEwNzk3MDAwQkQzNEIxN0QyRUY1QTJENEQ3MTgzNzBDOUFGNEZBNUEzQgorOjEwNzk4MDAwQTRFQjc4MkE0N0I5M0ZDQUYyNzE1RDk2NzBDNkQzRTk3NQorOjEwNzk5MDAwRTUxNEFFQkYxM0YwRDMyMzI5MDlENjJCQjk3RUU3M0RGQQorOjEwNzlBMDAwQjY0M0MzN0I5MTI0OUY1QzgzRjQzNUYxQzk5MzI5RkNEMgorOjEwNzlCMDAwN0VERDI3NTMzNEVBRkZDMTEyQkVCRkY4QTA5REFGNTM0RQorOjEwNzlDMDAwMEYzNjM5Mjk1RkYyRDU5Qjc4RkU5NkU3NjYzRDhBQ0Y2MAorOjEwNzlEMDAwNDNCNjc5MzU1ODdGQTgzRjg3QTNENUI2OUNDRUQ3ODFDQgorOjEwNzlFMDAwRkMzRDk1NDI3Q0UyNjU1QzBGNzJCRDc3RkZGMzVDNkZGNgorOjEwNzlGMDAwRDU4NERERTRDRkQ2ODRCRTVGNDE3OUFERTkyRTNGREQ4RAorOjEwN0EwMDAwRjcxOTNBQTg1RkVGODlFMTM1OUU4RjdDM0JGNkQxRUZGRAorOjEwN0ExMDAwMUQ1RkQzQ0VFNTBERjQyNkYxNTEwQzdGMUNDRjUyNEVFNQorOjEwN0EyMDAwQTQzQzQ0RTRGRTBERjAwMUI3N0JCOEJGNTQyOENFM0IyNAorOjEwN0EzMDAwNTYzQUZENzQ1RUIyNTJDNDU1MEJDNUI5QzdFMjYzMDEzNAorOjEwN0E0MDAwNUEwRkU2MDkzQTE0RDk4MkFGRTJCQzJBRDZDNEM1NTUwQQorOjEwN0E1MDAwMkZEMUVFQUY1RUY2RkEwOEZDNURCMEFBRUMyM0Y0OTRFOQorOjEwN0E2MDAwRjIwODdFQTk0NTZFREYxMUZFREYxRTQxRUYzRjA4RjlFNworOjEwN0E3MDAwQUYxRUQ3NEVGMjU2RkQ1MTAzQzlBOTdCM0FENzU3RUUzOAorOjEwN0E4MDAwRjdBQzdBOTZCMTdCQzQ3Q0Q3RDA3NzUzOTNEQkNCNzFCQworOjEwN0E5MDAwNUY3OEVBRTMwQUREQUJEOTE3OUM4QkYwMUMxOEZBNkYwQworOjEwN0FBMDAwRUIwRjc4RTdBMjNDOEJERjg3OTJFNzY1Q0UwODM5Mzk4OAorOjEwN0FCMDAwQjU1NTE1QkY5N0Q5QTA1RkM4QUVCRTU4N0YyQ0ZBOTZCMgorOjEwN0FDMDAwNDJGNzk1MDg5RkVGRDRCNkQyNDk3RjQ0QkY3MzZCMEE0MworOjEwN0FEMDAwRkQ3RUM5NjdEQkJFRjdFMzNGQTZFM0VGODM1Q0VEQzczRQorOjEwN0FFMDAwRjUzRjdENDU5MEY4QTUzQkMzRTVERkM4RTNBQ0QzMzE1NgorOjEwN0FGMDAwMEVENUQ0N0VDMDhCRTc2QjNFN0RGQThBMzFBODhGRjExQworOjEwN0IwMDAwREUyRDlDRkZDOUU3RDU2NTg4OTdFNTRGM0NGNzJEQUM4NgorOjEwN0IxMDAwQUY4RTI4RkREMDJFM0RCNUY1RjFGRkMwREY4MUFBREM4OAorOjEwN0IyMDAwNUM0RkJGRjNCQ0UyRTk1N0M4QkVGRjNGNzVBOUM3ODZFQgorOjEwN0IzMDAwMDA4MDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAxMworOjEwN0I0MDAwMDAwQkQ1N0QwQjc4NTQ0NTlBNjg5RDNFRkQyNEREQTE0MAorOjEwN0I1MDAwM0JFOTNDQzlBMzkzNDA0MDI1QTExMzEyMDhGMkVBMjQ1MworOjEwN0I2MDAwODQ4NzIwNzY0MDg2MjBBRkU2MUQyMDI0MTE5ODU5MUM3QQorOjEwN0I3MDAwREQ5Qjg2MjAyMjE3NjdFMkVBMjhGOERBMEU4MzhBMzMzMworOjEwN0I4MDAwQ0UxODMwNkE5MEEwQ0Q0M0M0MTk1RDVCMDQwNzY3OTE5RAorOjEwN0I5MDAwNkRENDQxOTA5MEY0NDY2NzE2NzdCOEMzQURGRkFGQUE5NQorOjEwN0JBMDAwNzQ5RjkzMEVBODNCQ0U3NzZGRkNGQzhBM0E3NTRFM0RDRQorOjEwN0JCMDAwRkU3N0ZERkY1RkQ1MUE1RkYzREY1MkVEODQ1NEVGRTlFNgorOjEwN0JDMDAwNkYzNTEwNDIyRUZFRjJFMTcxNjQyODIxOEQyRDhERkE2MQorOjEwN0JEMDAwQTA5OTkwMkY3RkQ5OENGNUMzQ0ZCRkY0QzY3RkQzRjc4MAorOjEwN0JFMDAwNkFEQ0IxNEU3OEVGQ0I5NzBGRTlFMTc5OEQ0N0VCNkEwQworOjEwN0JGMDAwQTEyNUYxMUNENUNGQjJEMEQyRkI4MjRDMTIwOTk5NEFGMworOjEwN0MwMDAwRDhERjYzN0IwRkU5MUQ3OUI0REUyMjExNDJCRjI3NTUwRgorOjEwN0MxMDAwN0FERkEwMkNGQTVEQ0I1RUVEMTIzM0JDRTEyM0E0OTg5MQorOjEwN0MyMDAwOEVGQkZDQzI1MTFFQThCNzI1MTA5MjEyN0VCRTU1NEY4NgorOjEwN0MzMDAwQkNDNjM4NUFGNjIzQzQ0NENCNEJBNTY2QUZENDlGOTAzQworOjEwN0M0MDAwRDU2NUU2QUQ1MDVFRkE4REE5Q0E0N0JGQUJENTA3NzNCRgorOjEwN0M1MDAwNkQzMDlGQTFDNDA1RjU3OEFCODY5MDA0MThFNzZFNUQ4MgorOjEwN0M2MDAwQUQxOUJGQzc3RTNFRDIxMTAyNjUxRUYxOTJGMzQzMDhFMworOjEwN0M3MDAwQTE2RkVEQkUzNjFDQzZGQjJEQkU0RkRGMkIzMTE1MTI5QQorOjEwN0M4MDAwMzI3QkRFMzkwOUU2MTMzM0I0NUVCNzFBRTdGOTZCRDZGNworOjEwN0M5MDAwNEU1NzFERDkzRTYyM0QxRDhGOEU3QjBERkVDNjg3Q0I5NAorOjEwN0NBMDAwM0NBQjE5REZBNzAwQzEzMkI1QjUzMkNEMDFFQkI3MUIzNAorOjEwN0NCMDAwOUNCMDdFQjFCRUQ0NkE0RkEzODUzRUJGNkRCREM3MjlCRgorOjEwN0NDMDAwM0IwODc5RkRDMjg5ODkwMzY4RkRGOTIxRDI3MDE5NUVFQworOjEwN0NEMDAwOTdBNTg1NkVEQTdGQURENzhDRTNBQ0Q5NTA0NjNFQTMyRAorOjEwN0NFMDAwRjMxRDZGOTVGMEZCNDQyQkIxREY0QUQ3NTNBMTI1NzZFNgorOjEwN0NGMDAwMzM5NDg0OUNENDE1NDJGRkNGNjJCQkMzNDA1Q0E0ODhGQworOjEwN0QwMDAwOTY2RkNFN0U3NjIzRkRFNDMxOUQyN0E1MThGQUQ5MUEwOQorOjEwN0QxMDAwRDAzQkEwRENDREU2NEZCRkI3OUEwQkIxM0ZFQkFERjA0NworOjEwN0QyMDAwQkQ5MUFDODVFRkJBMzY0RUIzNkY5M0IwREY4MDJFMkU4NworOjEwN0QzMDAwM0M2RjQyNDIxOUIzRjI1ODdGNDUwMEE3QzlERTJBNzg0QQorOjEwN0Q0MDAwOUYzOEY0QjhCRTJGRTExNUM0QTMzNzdGN0UxRTk0MEY3MQorOjEwN0Q1MDAwQjFGOTZBODgwN0U4MjU1MTRGNEI4NEFCMjdBQjkyRDIyMworOjEwN0Q2MDAwQ0Q3QzZCNjk5NUI1Mzg1QzI2RjY2M0VENkFCODNFMDU0NworOjEwN0Q3MDAwRUQxNDlFNjdBQzJFMkNDOTlFNzg0MjQ2RjU3RTRGOTQzQQorOjEwN0Q4MDAwMDJGRTg3Njc3N0VBODM3NERDNDcwRjlDNDNCQUFEMDUzMAorOjEwN0Q5MDAwQkE4NUYxM0Q5RkVCNjExRDgyNkU5NzA4QkFERDdGMEVCQgorOjEwN0RBMDAwRTk3NjQ5OUI4NEY0NTREQjU2QTAwNzdBQkRENEUwMjJERgorOjEwN0RCMDAwOUY2OTY5OUREM0RGNjM1MjcwMzlEMEI1NzdCRkM5RkEyNworOjEwN0RDMDAwMkM4NTUzQTdBMENGRURFN0NFQ0IxNDFFRDk2RDI5MEU3RAorOjEwN0REMDAwMDk5RUVGNjc3NEZBOTY0NkUzMDUzOEJEQjVFQjk2RTY2MworOjEwN0RFMDAwNDYyOTcyOUUxQjExM0U1MjM1NDEzRUE5QUQyNzNFMDNFNgorOjEwN0RGMDAwNkQyRjdEN0FGRDg5MjlCNEJFQTY5QTM4MEQ5NDNFNkEwRQorOjEwN0UwMDAwNTU3NDk0RjVDQ0E3NUI4MDVFNkMzNUE0QzhFNDgwNzU4RQorOjEwN0UxMDAwOUU5RDM4ODBGNjVGNUI0MzhBODE0RjUzMjdCOEY2NDNCNworOjEwN0UyMDAwOURCNDQ5NjQxMEQ0QUJERDRCNjFGQ0RCRUMyQjlEMzI3RgorOjEwN0UzMDAwRURERjM2QzFERDBBRTNERDY2MUZFQjk0Njk3RjhGQTVCOAorOjEwN0U0MDAwQjc2QzMxRDI3NjZGMDVCMTNFRUIwMEZDMzY5NTY5NjlBRgorOjEwN0U1MDAwRkRCMTBBODc5NTQyOTJDMjZENzczMkI0OTMyMTdBRTdEOQorOjEwN0U2MDAwQjM0MEM3OUVBNTM1RDA1RjZERjI1QzI3RDA0OTJGRkU4OQorOjEwN0U3MDAwREZCRjcxMDhDQ0I3RDZEMUNGNjlBMkVGNEY2RDkzOTAxOQorOjEwN0U4MDAwQUU4OEQ3NEM2MEZFQjUxNEJFNTA5RkVBMUJFRDgzRjk1NworOjEwN0U5MDAwNUNFNkYwMTM3MEVDRDQwNTE2QzBGQzNBNUYzMTEwMkY4RAorOjEwN0VBMDAwNkQ5RjNBODFEMUFCNkQ0MjBCQ0E4RkI3Rjc0RjNBMkUxNworOjEwN0VCMDAwRTU4N0U5RDJGMkFBQzEwRkY1MzhBRDU1NzI4MjVDMjI4RQorOjEwN0VDMDAwMzMwRDkxNzg2REQyOTE4NTZFRkE5RDZEMzJFQjI3NjdGNworOjEwN0VEMDAwM0JDM0VGNzM5QzlGOUUwM0I5ODFBNTlFRjM2RjEzQTNEMQorOjEwN0VFMDAwNzdBQjM3REY0REU5RTEzMkM3M0ZGQzM5NjhCRkFCRjExMworOjEwN0VGMDAwMUYxNDNGNEJGREM4NEYzNTJGQjJGRUVDMDY1N0MxQkFEOQorOjEwN0YwMDAwMDhGQUI1OTcxM0U0RTMzRDI2QjJCMDkyM0VERjYzNjMwRgorOjEwN0YxMDAwQTU5QTVFREZFNUYzQzg3QTY2MkRFMjdEMDlDNTNCRTBGMAorOjEwN0YyMDAwMzU3NTNCN0QwRTcwQTM3NDAxNzBBMzc4NDQzQUI4Q0RDQgorOjEwN0YzMDAwQkUwMkYxQjY2NEJCNzQxN0UyRDEzQjgyNDAzRDIxOUU4NAorOjEwN0Y0MDAwQUQ1M0REN0Y4MENCQzUzRDI2Nzc5MTQ0RkIwQjI1NTg5MworOjEwN0Y1MDAwOUNCQjI0OTg4RjRCNjM4MjdBODFDREI5OEJDMEY3RUU5RQorOjEwN0Y2MDAwREQzMDVFNDI5MkM5RDkxODIxQUYwODcxMTc2OUU4MzgyRgorOjEwN0Y3MDAwMTcxMjJEMENERkJFRjdCNTMzRjI4MDFGMUREODZGODJBQworOjEwN0Y4MDAwNENGQzA0RTUwRkM5NzZFNzg1QkZBQkM4NjFGRDU1RjAzMQorOjEwN0Y5MDAwRkVBNjM1NzlGMzQ5MzY4MzA3QzI4NUMzQzNCN0IxNUZGRgorOjEwN0ZBMDAwNTVBNDNDRkQwOEUwNDFGQkY1REQ0NEFBNDA2RUJDQTVBQworOjEwN0ZCMDAwMjc2NjIzRjQ2RkE1RTNEMEZFMTI3NzhERkVFNTM2OUM4RAorOjEwN0ZDMDAwNUYyM0JFRjdBNkQ1OEE2NTQ1QkNCQkE4MUU0NDcwOEU0QworOjEwN0ZEMDAwN0IzREMwNDVBQzUzMEQ4RkY5MUMxRTg3NjcyRjI4RDAwMQorOjEwN0ZFMDAwMDAxRERGNjk3NjAyREYzRDdBNDA1QThDNzRFRDM1NTIxMAorOjEwN0ZGMDAwQTYwNEJBNjc3QzQ4MjgzRTgwMkY4ODQ3OEJGOEE4QUQzNgorOjEwODAwMDAwNzdGQkEyRDM3RDI1RjI1OUFERERFNDM0NDk0OEY3MkU0NAorOjEwODAxMDAwRDQ3RjVFQjM4RkQxM0REMzdGMzE5Mzk5QkUwMjM5NTk1RQorOjEwODAyMDAwOTlENzVCMUUwODM5MDNGQTBERTg1OUYwNDVFREI4NjBBMQorOjEwODAzMDAwMkVFMEY3REJDQTk1NEUxREUzRjM0RTBBMDdFMDIzQzE5RAorOjEwODA0MDAwMzc5NkQ3MTlCRjZDREJFODI4ODVGNjZEOTRFRjIzRjFERQorOjEwODA1MDAwN0Q0Q0VGNDVGRTNEOTZERENGMDlGREMyM0NERDk2QjA3RgorOjEwODA2MDAwN0M0RkI0QkFGQkQ5NjA5RTFBRkYxNjZENTY1ODFFRDdDNgorOjEwODA3MDAwQkVGRTYwQUUyNzBBRkQwOTc5NkNENDMyMzk2N0Y0QzVCQgorOjEwODA4MDAwRjg1OEJGNkMzQzIzMDVCN0E1MTA0QjJGRThBMzk4MERGQgorOjEwODA5MDAwMEMzRUVBN0VEMjZENjY0RThGNDZFQkU3NTQ4RjRGQTdCQgorOjEwODBBMDAwNDhFQTlGNDNDODY0OEQyN0RENDZGQjVGNjMwQzFFQTMyRgorOjEwODBCMDAwOTgyNTE5MUI0MjdBOTg0NzIyRTgyRUUwOUY1RDMxM0VCMQorOjEwODBDMDAwOTA1Qjg5ODlDNEIzMkY0QUJGRkQ2RDhDREUwNDVFOUEzNAorOjEwODBEMDAwRTIxODFGMjVDNkIyRjc0N0Q5MThCRDBDQjUzMTNFMkRBMQorOjEwODBFMDAwRTNFRjhCRjkwQkZBNzc2ODNDRTc4OERDQjcxRTEzREYwOAorOjEwODBGMDAwRDE3OTYxQkI5ODBGRkQ3RTJCNjFGQTE3RTc5QkI4MjlGOAorOjEwODEwMDAwNzdEN0I2MDg3Qzg0RjlFOEE2NDJDMDUzQ0U3NkJGNzYwRQorOjEwODExMDAwQjEzOTNDOEVEMEE3NkFGQ0MzRkM4MTdGNjAzRDk1NDM5QQorOjEwODEyMDAwRkI3RUFGRTkxMEUzNDczNTNENEVFMTdDNjJCMDExMkM5OAorOjEwODEzMDAwOUI3NEZFM0YyMzVGREQ2RDIxQkI2MDdFM0I4ODJCOUVFMQorOjEwODE0MDAwQ0VBQkVFOERDMThDMUY1Q0ExNUNFOEZGNjA5QzY3MzdGNQorOjEwODE1MDAwRTA2M0U0MDQ0RUU3RjRGOTBDRkE3Q0I1OTY3ODBEMTQ2QworOjEwODE2MDAwMjdBQkY3RTg3QzQxMjNFMzk5NkJGNEZGNjJDMDEzOUREMgorOjEwODE3MDAwNDc5N0M1RTg5NTI5OURCRjFGRTdBOTgyRUZCRDY1QzQ1NAorOjEwODE4MDAwRTkwN0JERjQ1MzJBM0Y4MEZGODhCRjE4RTQ0QjFEMDk1RgorOjEwODE5MDAwQzYwMjlDNkJFNTQwMkVBMUY4QkYxQUUzOTkwRkY0RjhENAorOjEwODFBMDAwQTkyNjkwMDFDRjA5MDkyMkJEOUUzMUM1RTYxM0RBNUZFOQorOjEwODFCMDAwQUJERTlGRkU0RjMwRUY3NzY0QjI4QkY2RDM0RDVDNTM0RQorOjEwODFDMDAwNjExREREMDE0RDlDOTdBRUUzOTNCNjBGN0Y3MzgwN0VGQQorOjEwODFEMDAwMzVGRkMwRTVGOUY3MDI5NEI2QzUyQzc4OTI5NkYzOEM3QQorOjEwODFFMDAwMUFBMzc2NzgxODFFNjcyQ0QxRTVFQjhGMzk1RDI0MzRGRAorOjEwODFGMDAwMzJCQjJCQjREMUUwMDNGOEE4REYxQjFGQzdGMDVGNzdCOQorOjEwODIwMDAwMjU5NTc4RTMyMzlGMzMzOTVBQTcwREU5QzE4NEFDQkI4OAorOjEwODIxMDAwOTI0MUJDNzREQzRGMzRBNEJBMjU4QTlERjlBMThERTk0MgorOjEwODIyMDAwQUI1NjRBRkFEMURBNEY3MzNBREJBMzIzQjkzQjYwM0UyRgorOjEwODIzMDAwQ0Q1NDBFMDJGQ0I0MEU5NDE3RDU4RjY0MzlCN0QxNkFCMQorOjEwODI0MDAwNkI3NkU4MThEODExQTE1RjQ4MjhGRkNGRTg5OERDQTEyOQorOjEwODI1MDAwN0Y3NzFBNDc4NEY1Mjc5ODI3NjAxRjU2NUJCRDdFMERGMAorOjEwODI2MDAwOTUxQkQ1RUIyRDdFMzkxRjlGNkJDNzAwRUVCQzU2MkQ5RAorOjEwODI3MDAwQzhDMUM1NUMyRjJFQTk3RkZCMUIyOTk2QjY2Qjg5NzFERgorOjEwODI4MDAwMENGREVFMEJGM0QyNTg1MDBCQ0I3RkJDMkUxMThDRUZCNAorOjEwODI5MDAwQTQ3OTREQzg5Rjg0NENCMDgyM0QyRUI5QTZDOUQ3NjIzRgorOjEwODJBMDAwQUU2N0NGNjlEMTZFNDc3QUExRjgyRDhGNzMzRjA5Rjg3OQorOjEwODJCMDAwOUVENzlGQzE3QkRFQkExODlGMzc0MkZFRERDMUUxQTM4NgorOjEwODJDMDAwQTZCMzNENDBBMzc0QkU2NzI1QTY1N0Q0RTNCQzEwNTdBMAorOjEwODJEMDAwMzYwOUZBRkRBQkM1RkQxQ0Y2QkZFRTMyQ0FCMzc5MDcwRAorOjEwODJFMDAwNEMxOUEwQjc1NjVGRDEyMDVFQkEwQTAyQjkxQkIyODAwMgorOjEwODJGMDAwOUU0MzE5N0ZBMEYwNUJERDZFQjA3QTFERDBBRTU3RTBEMworOjEwODMwMDAwRjVEMzA2MkFEMDcyQzNGNUM1MTcwNjRFMjQ2NjgwQUI5NgorOjEwODMxMDAwNzMwQkUwNzlDOUQ2MThFMjFEMTI5RTFGMThEMjQwQjcyMAorOjEwODMyMDAwQjU1NzA4RjZCM0I4RkRFREQzMjBBNzZCQjU0MUE0OEJDNAorOjEwODMzMDAwQzU0NjMzQzJCREY2OEExNkU3NDFCNkVBM0E4MkUyN0IwOQorOjEwODM0MDAwM0FCRkY4NTg1NzNCQ0NEQkZCQzAxOERCRjk1QkU4QzNGRQorOjEwODM1MDAwMjRGQTFDRDdFNTM5MENGQ0Y0Nzg0QzJDNzEzMTNFRjAzMgorOjEwODM2MDAwMERBNkYzRUYzNjNBRkFDNzUxMzhENEU5MjlERTg3NjExMgorOjEwODM3MDAwMzc2RTYzODRERDQ0RDIyQzRBQkNCNkJGRjMwRENDNjdBNAorOjEwODM4MDAwQTlEMUEzMDc3ODJDQUJBQUQ3MDNCRkNERUJFRjJGQjZBQgorOjEwODM5MDAwMEU4REM0RTcxOEY5REEyRERGMUU5RkNGNzNGOUYyODkyRAorOjEwODNBMDAwOUVEMjdCMTRGRTNBQ0RFNUVGNzgyRTI3M0U0OTY1N0NDMAorOjEwODNCMDAwRjE0OTA2QTlERTA3RTVDREI0QTRERjdEOTJDREVCODVCQQorOjEwODNDMDAwQUNBRUVFRTcyQUU3OEI0RkYyOTkxRUYyQUU2NTdBNDEyQQorOjEwODNEMDAwRkQ1RTI3MUZBRjNDQ0U3NTFFRTAyNjlFMEY4RjYzQ0YzQworOjEwODNFMDAwNUY4ODczNUQwNDM4NTMzOTc3OTlEM0ExREY0NkZCOUJDRgorOjEwODNGMDAwRjdBNjAxRTk5MDZDMEVFNTAyMUU3QkQ2OTVDQkU3OUJCNAorOjEwODQwMDAwMTg3RDVFQjY3MEJGNUY0MzdGRjQzRDE3REFFMzZGOTg2NworOjEwODQxMDAwN0NCMEJGMjBEM0E4REMwNTM5QkIzNjlEODA5Q0E1RTM4QQorOjEwODQyMDAwNUVDNUY3NzJFOUI4Rjg5RTAxRDc0MUI2NTJGOTRCMTkwQgorOjEwODQzMDAwQURBQkQ4ODE3OEQ5NTY0QUU5MTNGOEZGQTBDMTBBRkM0MAorOjEwODQ0MDAwMkZFODQ5RDA5MTlBN0U0QzcxNDJBRjMxRkQ3QTA3RTgwRQorOjEwODQ1MDAwNTcxOUY1QUIyOThFRTk1NzNERjAyRkVENTFDRkVDQkMwNAorOjEwODQ2MDAwODE4ODZGQTQzM0Y5REJFM0ZCQTA5MTcwRjhCQUUzRTNGMgorOjEwODQ3MDAwNTA5RkZCRjNEQzc5QkRFMTJDRTRERjI3RkQ5NDc0RTEzMAorOjEwODQ4MDAwRTM3ODFDQzBERkVCODE3MzFDN0JDRjlFQzNGNDk5QjBGMworOjEwODQ5MDAwRkI2RkUxRUJEQUNERTVCNDI4ODU3RTFBMzk1OTY5NkZCNworOjEwODRBMDAwRUNFNkYyNjNCNzJEMTY0QjhBOTdDMUIwN0VBMUQ3N0E1RQorOjEwODRCMDAwRTFGQjI5ODY2RkZBREU1MDU4Q0YzQzQzNjg0MTNDRDUzQQorOjEwODRDMDAwNEIzRkEyRjY4RUJFMTBCRjdCMUVCRUVCRTU3Rjk4QzA3MQorOjEwODREMDAwRjQ2OURENUEwQjAxN0QzRjIyOEVEOUIxQTQyODk0MDFBNQorOjEwODRFMDAwRkQ5MTIxQjRDQzAzRkVBM0YyNDZCQTMxRkU2MEFGOUZFQQorOjEwODRGMDAwNDI3OUU0RjY1ODA3REI1N0NBNzQ0MEUwOTkyMUM0MDE3OQorOjEwODUwMDAwRkQ1MTc4OTdDNjI1ODRFMUFEMUVFRjBDMzQ1MUZCNkUwQQorOjEwODUxMDAwNkE5Q0E0M0QwRjM4MkEyMDA1ODBBRjA1MUY3QzY1OTkxMQorOjEwODUyMDAwNEZCQkJDNkMzNTdBMzU1NDNGRkM1OEUzQjkwM0ZBRTlDQworOjEwODUzMDAwQjhFNzFEQjRFN0NGRThGREI5NERFNjI4RUQ3QUZGMzM4MworOjEwODU0MDAwOEY0QkUxRjY4NTJGQzg1RTNEOTUzM0FEODE4RTVGQ0NCNAorOjEwODU1MDAwQTY3NEI5MzgyMDNCNjFDOEM1RjdGREY5QkQ5MTYwMjcwNQorOjEwODU2MDAwMDc3NDRFRDhBRjUyM0I2MUJCOTZDRUZCOEM4NkUxOTMyRAorOjEwODU3MDAwRDQyQkY3RkJBQjM4REVBOUJEQTQyNTIzQzJGMjQ5RTgxMgorOjEwODU4MDAwRkI5NUM0M0YwOEVDODIyNUM0QTU4N0YyRDNCQjU3NENBQQorOjEwODU5MDAwMjMxNDVFQ0JDQ0VCNTE2RTVENUMzQjA1RURFMEU1QzQ5NgorOjEwODVBMDAwOEJFRDRCQjZFQTNFOERENDEzQ0I5QTk0RjUxNTNCOTRFNAorOjEwODVCMDAwRjU5NTNFNjVGREQyNEYxOEJERjVBNjdCNjY1RjI1OTQwNworOjEwODVDMDAwNDdCNzFCMUVFMTc0Nzk0OTFGQkRCRDMxOEVEMTY5RjlEMgorOjEwODVEMDAwMDNEMzFFNDdGRTBGRTg4ODgxRDJDOUZBODNBNTQ5MjQzOAorOjEwODVFMDAwQ0FGQkEyQUNCQjkyNEQ3QzExN0EyODZDNTdFNDEyREYxNworOjEwODVGMDAwNzBFOEVGMkFGQUY5QTAxRkQ4QkZBRTM3Qjk5MjYwOUY5MgorOjEwODYwMDAwNzFBOTJDRkEzQ0ZFNzc4RkRERDJBRjhGN0U2M0IxREY4QworOjEwODYxMDAwNEJEOUQ3NUY2N0REMTUyM0JFRDdGQjdCMzNGNjRCRUQxOAorOjEwODYyMDAwQTdBOERGRUZFNjcwQjgxNDE3QkREREQ3RDM3RjMyRUExNQorOjEwODYzMDAwQzVGMDc3OEMwRkMyRTNBNEExNUVBREJCNjI1NUU4RTkzQgorOjEwODY0MDAwNzBCQjlERTk1NUJFRkZBNzc4RjVBMkJEQ0JFRDM5QUE1OQorOjEwODY1MDAwMTBBREU3NjNDMjcyNENENzhGQ0Q0N0YwQ0Q2NzEyMzFCMgorOjEwODY2MDAwQTZBMEJGRUM2MTJFNDc5REY5NjBGNzdFMDY3NjE1RjA1NworOjEwODY3MDAwRUQyNEM3MUI0MTNBRDUyNUY3OEVDQUQ1NjY4N0Y5NEEzRQorOjEwODY4MDAwQkQxRTRBOEY1RjA2MjNFQzgyQjYzODhCMURGNUI5OTM2OQorOjEwODY5MDAwMzg2MTVDQzEwRjBCRUVBOUU4RUZBMTc4RkI4RkZCQ0EzNAorOjEwODZBMDAwOTMzQzQzMjNFOUNFOEJFM0Q3RUE4NTNENjc1NkU4NzFENworOjEwODZCMDAwQTJEMkYzNEJEQURFNDE3QjZEQTlEMTlEMEJDMkU5NEYwQgorOjEwODZDMDAwMDdFRjQxM0U1OTRFREM4OUMwMUY1RDA3MDc2Nzc4RkUwMgorOjEwODZEMDAwMDdGQTVEQ0M2N0E2Nzc5MThFRDlFNzE0QTg5NDZGNjdFNworOjEwODZFMDAwRjBGOUNDNkM2N0Y2QTJDNkU4RDJFMTM4MkVFMkIwMjZFQgorOjEwODZGMDAwRTIxNjlDQ0Q5NzBBNTkyREFEOEZFRDk5M0YzODEzMDk5RAorOjEwODcwMDAwMTlDM0U3MkZDMUY3MTRCRTYzNzk0OTE2N0I5MjYxREU2NgorOjEwODcxMDAwMDYxODk3OEU2NzIyQkU2NDI4MUI0NzM5MUQ1MDhFOTcxNgorOjEwODcyMDAwREM1QTM2MEYxRkUyNzkyMkE5NEY4M0Y3MzVDNkEwQ0M1OQorOjEwODczMDAwRDY0OTY3OTAwOERGRjdDMDBCRUIxNjVFREY3QzY3Rjc2MgorOjEwODc0MDAwODI2NUYwREM2QzQxRjlBM0U3RjNGODQ2Qzg0RDIzMzFBQworOjEwODc1MDAwQzJCQTBENjZGRjQ1NTg5Nzg1OTdERTMyNjY3RjdCQjNCOAorOjEwODc2MDAwODlCMzkxQkVENjhGQjQxMDE4RDc2Q0JFRUM4NUM1NUFBQworOjEwODc3MDAwODk1NTgyQkFDOURBRUQ4NzdEQzg2NUFCRDlBQjE5ODY1MAorOjEwODc4MDAwRjJGNEZGQTAzQzk1REU1RDBFNzhBMUYyOUJGOUE1RkEwQworOjEwODc5MDAwNkFEN0ZBNzFGRjIzRTQ2MzFDOUY1RjIzOTc4RjI5ODRCNAorOjEwODdBMDAwQzFDMTRFREM4NzVDOTRBRUZGQzVCMjdDMUE4OTA1MzUyOQorOjEwODdCMDAwRUVDMUYxNzdDNjRFM0UwRUYzMDVDMEEzOUU5RkFDRkQwMQorOjEwODdDMDAwMzQ1MkNGMjRCOEI1MEFGOTk3NTRBNUFDQTc3ODk0NzU1QworOjEwODdEMDAwMjMzOTYzMDVGQTk1RkNFRUU0NkJGMUI4QUYxQjAyN0UxQQorOjEwODdFMDAwMUExRDk3Mzc3N0Y2NjNGMzEyRjQ5MzE2QUY1MUQ4MjExOQorOjEwODdGMDAwNkVCRUNGQUY4REQzMTNGNDBGMjYxQThENjQxOERBMjUxMQorOjEwODgwMDAwNjlGMUNDMkUzOTRCMzE0REY3ODMyMTk0RTcwNUUzNURCNworOjEwODgxMDAwODM3RTQxRTFCQ0U1MDNEOUI5ODlFMjY5OEJDNUIxNTFEOQorOjEwODgyMDAwMEJGNkRFMUNDOUY5MkM5MjY3OEIxRkZDM0VDRDBCNkMzRQorOjEwODgzMDAwQ0U2REQwNkU3MkZERkNGRjQwRkIwNzMyMDE3QkFCMEVBQworOjEwODg0MDAwRkNFREYxRjBBMkI1MTRCRTZCQ0VCMEUyN0JGNkYyMTBGNworOjEwODg1MDAwRkE0OTQzMEYxMkI0QTc3QUQxRTk1NTNBN0YwQUVGNUY3QworOjEwODg2MDAwNDI5REMyQjc2RUE5NzVGNThCRjRGRDE0Nzc4QzUzOEFCRgorOjEwODg3MDAwNjhERjBERUQ3NDlFMTJBNzBCNzgzRTdFMDRFQzZCRDk3OQorOjEwODg4MDAwNUY0RTdCNDFDMDA1N0UwQjk3OENGQUIwQUVCREUwODg5MQorOjEwODg5MDAwOTlDRTIzQzc1M0UwMDRCMjFERDhDRUUzMkE3NjgzOEY0NgorOjEwODhBMDAwQzUxNTI4RDdEMjc5Q0MzMkIyNzlENEI1OTdERTUxNENFMAorOjEwODhCMDAwREIwNzA2ODYxMzg4MkZDNDFDNzdDQ0FEODEyNjBEREQxRgorOjEwODhDMDAwNEZDMzc3NjUzMUU4Q0YzQUM5RkQ0QTg0Q0I4MzkxMkFGQgorOjEwODhEMDAwN0UxQjFEQTY3RjZDMkYxMDc1NkEzNkI4NDYzMDc3MDU1MworOjEwODhFMDAwRDZFRDhDMEY5QzQ0RkMzMUZFQkM5NTg0RkZFMEZCRjI3RQorOjEwODhGMDAwNzA3RjI4OEYyNjg0OUJDM0ZDNDY5NzU2Njg3NDM2RDZCMworOjEwODkwMDAwRDBGN0RFQUE5Qzg0NzQ1ODA3RkIyRThBOEY5MTVBRkZGOQorOjEwODkxMDAwMjFFMEVGRDFCQzJDRTAyNTU5REM4NEYwRENCNkQxN0YxRQorOjEwODkyMDAwNTg5NzA1MkUxNEI3MENGNTExRDYwNzFCQTFCRkIxOTJBRAorOjEwODkzMDAwMUZDQjhDQUE4NzFCODFBQzVFMDNFMzBDRUQ0RTRGMDU2OQorOjEwODk0MDAwRjBFMzk2MEE2MjA1RkJBQkIxQzRFOUI0RDJBNkQ5NTVFRgorOjEwODk1MDAwQ0NFRjNBQUJDQUU4MDMzRkZFMkMyRDYxRjEyRUFEMjdEOAorOjEwODk2MDAwRUI0Nzk0QUY3RTM0OEZGOTdCQTEzRTJGQzI5RjIyRTI2QQorOjEwODk3MDAwMUIyN0U5M0U2NjZGMTQ3QkUwQjU3OEE2QzdDNEY3NzU4MAorOjEwODk4MDAwOUJGNThBMzhEMkNCRjFDQ0JGQjUzMzdFRTI0RkUyRDkyQQorOjEwODk5MDAwRkNCMjgwRkZFRThCRTc3MjY1MDgxOTAyNzIyNTgyRUY0OAorOjEwODlBMDAwQkRGMDVFNDdFOUVGRkI5MjBCQ0E3NjJFMTc2NkI5MUU0MworOjEwODlCMDAwRDFBMTFEQ0ZFNTgzOTBDMzZFRTA0M0ZBNUQ0MDcyRTkxQgorOjEwODlDMDAwMDA3RTFGOTczMUY4OUYyODVEODlGMjYxMzZGMUUwNzNEMAorOjEwODlEMDAwNEEyMDNBNzdBNDFGNjk3Mjg0M0Q0NEM3OTlFNTU2REE2NAorOjEwODlFMDAwNDdCM0FCOTQ3NTQxQUY2MkRDMzkxRTY1RkIwQzYxREZBOAorOjEwODlGMDAwNEU1NkRBQjdGM0ZFRTlBQTBERjU2RkQyNzM2QkFFNjU4QQorOjEwOEEwMDAwNjJEQzA0RjdGRjc1MTQ0RjJDNkVBMjY1NzE5NENEN0E2OQorOjEwOEExMDAwMUZEODQ5NzU2RDc3QkY5NTAwN0M3NDFGRTE3Q0I0NTdGMgorOjEwOEEyMDAwNUEzQTE0RkRCMEQyQjIwODNCNjI0MDhENEYwMkI5M0ZCMgorOjEwOEEzMDAwOThBRTI5ODA3ODBENjFCQ0U4QTRDRTc3MDhFMjI4Mjc5QgorOjEwOEE0MDAwNTdEMjE1RDM3OTFFRDFCMzc4RTQ1MTEzRjE4MjNGNUEyRQorOjEwOEE1MDAwRDBBNzY1MDZGM0E3NTIzMkM2Qjg0ODlBMzVDNjA5RjRCRQorOjEwOEE2MDAwQjQ1NTUzODhGRUQ3QURCMTE2NjdBNEJGNzNEQjQ2NEEzMQorOjEwOEE3MDAwNzcxMTdFNTc4NzgxMTQ1QTM5REQ0NERCRkZCRUM5RTU4MworOjEwOEE4MDAwRTE2MzEyRjM3RjdCRTcxODcxQkY5NzkwRTM1NkM0MUIzNQorOjEwOEE5MDAwMTI2NDcyMUFGQzg4M0Y4OTc3ODhGN0QxQ0YwMUYxQkE0NgorOjEwOEFBMDAwRTFCNEY0NDlDQzlFRTlGOTVFMjY5QkQxRUZBODkyM0Y1MAorOjEwOEFCMDAwMDlGMTRFRjRGNzI3RjRDRjQzQkY3RDU1N0JDMTZFOTQ4NworOjEwOEFDMDAwMzc2NjkzNzM5MDE0RUVCRkNBRDNBQzVEMDZGRTgzRjY4RgorOjEwOEFEMDAwNjZFRDUyNzM5OEVFNEUwMEJEMDJERTYyNDgwQ0QwNkIxQworOjEwOEFFMDAwOEYxRjZGOUYwMUZENzgzRkQ2QjgzRjAyQkFBQ0QxRkIxNAorOjEwOEFGMDAwRjM4OTkyOUVGMTc5NUY3QTZDMDVBNzE3NUQ5OTdCQ0UxOQorOjEwOEIwMDAwMzIzQTlGQUVGN0Y0Q0NBRjc1MUY0MTdFN0Q3OUJGMEQzMQorOjEwOEIxMDAwRkQ5MERBMTkwNEY1QzlFNjUyODJGNEQwRDUyQ0ExRkRGNgorOjEwOEIyMDAwRjY4NUFEMUFGNzAxOUJBNTI2RDQxMzlENzExMzExN0YwRAorOjEwOEIzMDAwQUJDQzQ3NzE1RjVCRkQ5NEVFRDM0OEJCNkJENTZFNjVFNAorOjEwOEI0MDAwN0QzNTA5RTBCRUJBRTZDNTVFRjQ4Q0YyNEJDOEM3REFFMworOjEwOEI1MDAwNTZFNTc3NjRBMDUyM0UxNjcwQjk1RkU4NzZDRUFDODBEOQorOjEwOEI2MDAwQTk1NzM5NzNEOEJFOUFGODBENzQxREM1RUZFQUI5RkYzRAorOjEwOEI3MDAwNzcxRUQzOUJFNDM5MDlFQ0FEMkVDQjA1OTlGMTM5OTNERgorOjEwOEI4MDAwQzdDNUJDM0ZCNTFFMkFFNkY2RDQzODJBQjc2MEZGMjkxMAorOjEwOEI5MDAwRUMyM0ZBM0VENjhGNkFEQUU1NjQ0RDc4NUU0NUZDM0JGRAorOjEwOEJBMDAwNjE5NzA5QjkyREYwNTI1QTQyNDgwOUE1RkI2NDNCOTdEOQorOjEwOEJCMDAwNDNEOTI0MUJGMDRBRkI0NzdFQTBFMzdBRjU3MUQ4QkY2NgorOjEwOEJDMDAwMTdGNjZEQTNGOTc4MTRFRjVFRDBCMzVFOEREMTA3NzRGQworOjEwOEJEMDAwQjQ0NUFBNDczOTZEMjQ1QzVFNEIxRTk0Q0JBRjc5QkQ3QQorOjEwOEJFMDAwMzJDMDc1MTRBOTlGMzk4REJFMzdDNjE4ODgwMTc4NTBEOAorOjEwOEJGMDAwN0E0OEIzMjc4NEU5QTQ5MUY4MzNGNjRBMEE3QUMxRjY5MQorOjEwOEMwMDAwMEVEQkVGQTNEMjhCRDAyRkZFOEY5OTdEMzE5NUFFMTg1RQorOjEwOEMxMDAwRkFBOTgwNDAwRTJEOEY0QTZDNUYzOEM5RkNBODE2QkU5OQorOjEwOEMyMDAwRkZCRDY2MEFEMkMzNjRFMkQzQzJGQzJBQUM0QTNDNEYwMQorOjEwOEMzMDAwNEE1NkQ2QTczODdBRDE4MTBDRTNCQTM4M0NBNzBFNTFGMAorOjEwOEM0MDAwQjZCQjg0NUMyMzRBQjk5NjQ1QUUyMjlFQzk4M0M3N0VEMworOjEwOEM1MDAwMEM3RTgxOTgwRDY0MDhEODFERDQ0MjQ0N0U1M0NCODM4QQorOjEwOEM2MDAwNzE3NkIzQzIzRThBODg4MzhDQjMxN0Y3OEU4Mzc0NzE5MgorOjEwOEM3MDAwQkZFRUFEMjRCOEZDNDVBOTM3QkQ3NEJFQjU0MTRFOEVEQworOjEwOEM4MDAwQTAyQjQxQzdBRkYzQkMwOUU5NEQxRTZGMkQ2MkZFQzA5QQorOjEwOEM5MDAwQjA5RTY3RjQzMjgyRDc2RTA1N0FBM0VGMkYxNDc0OTJEOAorOjEwOENBMDAwNDkzMjgxNEVDNkI2OTlGQzMyODU2QjAxRUZFNzU2QTA3QQorOjEwOENCMDAwOUJDMkIwM0VGNzZCQ0MwRTdEMzZEMDg3NzNBQjJDRjdFMgorOjEwOENDMDAwQjZEQjEzRTMxQzQ4MjdDMzM1MkVBNDkzNjJFMjhDMDc1RQorOjEwOENEMDAwRkM5NDE4NUIxQUI1MzBGRkZEMjMwNzc4Q0MwQUJBNTgwQworOjEwOENFMDAwNjI0NzM5NDJFOTAyRjlBQTk3NUU1NEI2QUJFODQ2RTAxQQorOjEwOENGMDAwRUYzOEI3OTcyNzExRUY0MDE4OEY4QUIxQTM2MDJGRkI4OQorOjEwOEQwMDAwQjMxOERENTQxMDE3RDJDOURCRDk1Mzc4M0NEQUEzQzVBOAorOjEwOEQxMDAwN0U4ODUyMUY5NjFCOTU3NEEwQTYyQjNBQTIyNjcyNUNFMQorOjEwOEQyMDAwMzU5REY1NDUzNzk5NDAzNzQyMUZDNkRGOTg2RUVFRUYwNworOjEwOEQzMDAwOUI2RUVFQkYxRUREQThFOTQ1Qzg5M0JEMjY2QjM5RDhGMgorOjEwOEQ0MDAwQTU3NUQ1MTJDQUUxRTFFRjBENkM4NEZBRTAzNTU5OThBQQorOjEwOEQ1MDAwRDdCMkQ3RTY0NEJCQjVBRTlFQjUxNzA1NUMzMkU0QkRDRAorOjEwOEQ2MDAwRTRBQ0U3RUQ1OUVFNzJBOEQ3NkQ2MEYxODdFMjkzMkM4MQorOjEwOEQ3MDAwMkY2NkUwN0RBQ0JENjA1M0ZEMTEwQkU4NzcyRkZCRkU0NQorOjEwOEQ4MDAwRjU4QjVCRTQ1OERBRUVEQkMyQkYyRjZEMkE4NzdBREQwNAorOjEwOEQ5MDAwNTZGNkZEMTcxMDNGQTJGODFENzFEQUQ3MDhDRjZGREEyQgorOjEwOERBMDAwOUVFNTY0REI0RjY2Q0Y4RUU3NzRCQTU3REE3NzA0QkY2RgorOjEwOERCMDAwNkI2MkRGQUQzODY2RUM0N0QwMEU2Njc2RUIzOEJFQ0UyMAorOjEwOERDMDAwRjE0RkIxNzVEQTNGQkI2REIyODNEMkVGQjI5MDE3RURDMAorOjEwOEREMDAwQTZGMzlBOUExMTI4NkZGQUQ4Njc5NjRBNEQ2OTUwNTJBRAorOjEwOERFMDAwQkE0MTM5RTMzMjUyQkFDRTY2RjFDNTVENzQ4ODQzNzYzMgorOjEwOERGMDAwNjYwNzhBQjgxQ0U0MDk0NEU2MDUxQ0IyMzNGRkEzNzg3MQorOjEwOEUwMDAwMkYzMThFQjAzOEYyMTMxNkY0MDc4QkI4QTFGRjcxMjIwMAorOjEwOEUxMDAwMDE5RkMxMUFCOUZFOEYxQTQ3OUM5NDUzOEZGMUMzNDkyMQorOjEwOEUyMDAwOTkyMjdFMThENDJFQTZFMzE2NUNGQjZBNjIzNDdGQ0FCMAorOjEwOEUzMDAwNzEzRUVFMDU5RUY3MjA5RTU3RkJCMjM0NDAxNzdCODFCMgorOjEwOEU0MDAwNDg1MjAxNDhBQjdGMDc3NkQzNUVGMEJGMzJBNUUxMjVEQgorOjEwOEU1MDAwMjU4MDU3NTZGRkM4QkU2MkRCRDYzNDBBNUY0REJERDZBQgorOjEwOEU2MDAwMEI0QTI2ODNFRUJGNjhEN0QzMDNDNERGM0ZCNkY3RkNCNworOjEwOEU3MDAwMjc2OTg5MUZGNDEzRDFCMkY5MkY2RkE0N0E1MDBBQ0I1NgorOjEwOEU4MDAwQTU1OTQyRUM4QzE5ODQ3QzdBMjdDN0QzNjc3NjZFNkYxQworOjEwOEU5MDAwMEMyN0MzNDFERUNDRTI3OEZCOTFCMTVFQzdGNDY1OTM0OQorOjEwOEVBMDAwNEVDNUZGNUYyMEZGRUZFQ0QzNkU1NkI2QUJFNDQzMzUwMworOjEwOEVCMDAwMUY3NzM5Qjc5NzU3OTIxMERBMDVFNzI1MUY5NjE3NzY2RgorOjEwOEVDMDAwMzI3Qjc5QjVGOTI0REExNTVENEYzMDNCQjE4NjA0RDE5OAorOjEwOEVEMDAwRUU1MEZCMEY1N0VGNTFENkQ3QjQyOEVCNzU2RENBN0ExOQorOjEwOEVFMDAwNTc5RTE3QzdFOURBQjk2NjA0RjhFRkFBNzdCQzg3N0UwMAorOjEwOEVGMDAwRTE2QTIxMjc3QzRBMzk0MTBEMjQyNjI3MUVCRjE5RkQyRQorOjEwOEYwMDAwMzYxQTIzOTUxMzQ1MDBBRTdFOTg0NzMyOUNCOEUyNDE0RAorOjEwOEYxMDAwMUU4MDkyQkQ0NkVCMEZDMjI3MjlCNEFFNzExQjEzNTBDMQorOjEwOEYyMDAwNUU0QzhFRkY1QzhDMkY2MzlDRjYzRDk3MjM4Qzk3OUU0NgorOjEwOEYzMDAwN0RBMTRBNEUxNDA4N0ZDQ0MwMzhGNDU3MDlCOTUxQzBGRQorOjEwOEY0MDAwRUQxMjMyNTlCRDZGN0MxNEY5NkYzOEFGRTUyNDI4Rjc2NAorOjEwOEY1MDAwM0RDMkNFQTBERkEzOUQxMUQwOTg3RDFBNERBNDVERTE0NgorOjEwOEY2MDAwNDM3RTJDMzQ1MjNEODEyQ0U0MzRCMkZENEExMzUxRTE0RQorOjEwOEY3MDAwNzczMEFDRUIzQUZCMjY2NUJCMEFGRjYyREYzMjgyRTM1NworOjEwOEY4MDAwN0YwRUYxMEMwMDdDREM0OURDNkY4MTdFMzhGMTcxQjUxRAorOjEwOEY5MDAwNjJCRkY0RjExRjI3MEE3RjBBRUU5QkJFRkI3RUM5RkY2QQorOjEwOEZBMDAwQkRGNjRCM0Q3ODM3NTFGQjkxOTZFNTMzQTYwQ0ZBMDU5QgorOjEwOEZCMDAwQzRCRDVCNEQ5OENGNTkyNzMxM0MyN0NFMzk5OTExRTk3MworOjEwOEZDMDAwM0YzQ0QxNDAxMkI0MTE3Q0RGMzhDNTYwODRGODYwQTMwNworOjEwOEZEMDAwOEVFRDI3NjY0Q0ZENjRDNEUyMDhCOUYxOTJCMTc0NkE2MworOjEwOEZFMDAwNDIzMUUwMjFGMDkzN0Y4N0ZEQzUzQjMyQzE3Qzk5RjY4OQorOjEwOEZGMDAwMDRDNDdCNzcxMzdENEVFOUFERkJBOTVCOUM1RUZBRjg1OAorOjEwOTAwMDAwOTI4RUM1MUJCRjkwRUE5NzQzOEE5Mzk4QzdGMjBEQkYxMworOjEwOTAxMDAwMzM2OUE5MUU1QjIxRkJERTA4NDI3QzU1RjJCRDVBNDMzMQorOjEwOTAyMDAwREI0RUU5M0Q3M0EwRkZENTFBQkY5RUY5RUQwMjE4Mjc2QworOjEwOTAzMDAwMTVGREY3RUQ4N0Y0QTJCRUQzMUY2NjdBMzEyNEY1NzNEMAorOjEwOTA0MDAwMzIzRkFFMzczNzMyREU1NDk1QzhGNjU3RUZDN0I5OTc3RgorOjEwOTA1MDAwMDFERTg1REUxM0YxODQzMzc3NEZFQTBGQUFFMTZCRTI3QworOjEwOTA2MDAwRUEwRjcxNEU0OTBCQjFBN0RFRTM0MUJFQzBFNjA4QkY2RgorOjEwOTA3MDAwRjIxOTUzRjRCOEMwREEwNDI2NUZGNzAxNkZEMUZGRUQ5RgorOjEwOTA4MDAwMzZENzNBMThGNzAyREZGRjVERTBGMUFFMEJCMTJDRkVFOAorOjEwOTA5MDAwRjVCRjdBREU2N0U1QTMwOUNDREY3RDgxQzdDNzJFQzRBMworOjEwOTBBMDAwMjlGNzhERTJCREM3NzhGOTc5ODNEMUI4MzkwMjlGOEU0RgorOjEwOTBCMDAwQzcwREY1M0VDQzkzRTI3OTIxRUIwOURCMjdFREI3MzVGRgorOjEwOTBDMDAwNkY4Qjg4ODczNjI3OTRFRTgzNzkyNUU0QjhGNDI5MDBERQorOjEwOTBEMDAwQkZGRDRDMEY0MzNDMUFFMkM2NDU1NkNGNzZDMDRCQURBMAorOjEwOTBFMDAwODNCODIwRUU0QTFDNDFGRDRDODgzRkMyQkUxM0VEMDdGOQorOjEwOTBGMDAwNDYyRjVEMjY1NjhBNzkzNTI3NTRFRTgzRUZCQUVFMEU1OQorOjEwOTEwMDAwMjIzRTdCRUE5NTRDM0UzNjI3Qjg3MURDQUU1OUEyOUREMworOjEwOTExMDAwRDcxRjBBNzJGQzMzRkY4MUYwNjdGNzE1MEY1M0M3QkZFMworOjEwOTEyMDAwQThFMjYwNzZCNjg5QzkzMTc1REM3QkJFOTA2MzNDRUVGRgorOjEwOTEzMDAwM0Q4RkNCQTFGOUVEQ0MzRkJFQzA0OEI2MENBMEVEMEJFNgorOjEwOTE0MDAwREI5M0Q4N0UzMUQ2OUJBQjg4N0I3QjYzQkU1MzFFODM3QgorOjEwOTE1MDAwQTBDRkFFRjQ0MDRGQkNGNjg5ODg3OEVEMUExRUVGNUJDNQorOjEwOTE2MDAwMjNENkQ3QUE1Q0RGOUIwOTdEQzY2QkRGNEM4ODEyQUY4NAorOjEwOTE3MDAwNTVFNzA1QkMwQUZBN0Q2MDE4OUU2QkFENkNGRDE1NzI1MworOjEwOTE4MDAwNERCOTFFRTRDNDUyODJGOUUxNkJERjU5RDI2OEE0RjVFRgorOjEwOTE5MDAwQjUwRjgyRTcwRkZFOThCREJBODZDM0FCQUZGOTI1QjgwRAorOjEwOTFBMDAwMzVDNEExRjAxM0Y3MjM4RTg4N0Q3MThBMjc0RTUxNDc2RAorOjEwOTFCMDAwMEIzODIyQkY3MjQwNzVBQUUyRkJGNEZBNkNDNUZCOTkyQQorOjEwOTFDMDAwMUI2RTU2QjQ2Nzc5MEIxNUY1OUNBREI3MkFERTFGRDQxQworOjEwOTFEMDAwNTRBNkE4MEZERTcxOUJFMkZEMDI5MkQzMUZFM0IxQzczNAorOjEwOTFFMDAwNjVGMDk1OTA5QjdDMzMxNEVEQjdFQ0I5NEJGMUZEMTcwRQorOjEwOTFGMDAwQTRGRUIxMzFGNEJENTYxM0QzMDNDNEVCMEEwQ0E1NzAyMQorOjEwOTIwMDAwNTlDQUU3OUZEN0IyNThGMTdEQTNENDMyQzI0RkRGNUY2RQorOjEwOTIxMDAwMUE2MEZFRjY2MTZEQUIxNEZENUQ4QTlEQzhGNjExM0NDNworOjEwOTIyMDAwRkU1ODRGRkY2MzcyREMyMUEzM0RENDI2OTEyN0E0REVCNAorOjEwOTIzMDAwRjFDOEVBRjY4N0I3MEMyMEJERUQwQUZBODc3QTdFMTVFOQorOjEwOTI0MDAwRDVGMzYwNDdBOUVEMEMzOUQxNjI0N0ZEOTA0QTUyQUY4MgorOjEwOTI1MDAwNDVGMDU1OTgwRUNDNjg4Nzc1M0YyNUEzM0ZBRDgwMEMyRgorOjEwOTI2MDAwN0U3QzBDQzI0NzQ3N0M4RURFRjhFQTI2Q0NDRkQzRkQ0RAorOjEwOTI3MDAwQTJDNTA5RkVCMjE1RUYyQzQxRkEzMzI0MkJFOUMwRTQ1NAorOjEwOTI4MDAwNTBEMjQxQ0MxMDI1MUQ1ODlDNEFCQ0Y3MkY1MUUyNURBRAorOjEwOTI5MDAwMEQ2NzlCNEI0OTA3MDI4RTAyQ0VGMTkzOTU3NDIxRTAzNgorOjEwOTJBMDAwNUI0MkZGMDNGODE2OTJEMDMxQ0M5RkY2NDk0RTNGODlCRQorOjEwOTJCMDAwMTJFRjZENkJDNjc1RENDODZFQ0I1M0MxNzNGODUxNTc5NgorOjEwOTJDMDAwQTMxOUUxQzRGMkE5ODQ5RDY0RTBGRTY5QjVERjVDRDgwRQorOjEwOTJEMDAwMUY2MzEzQjlEREMzRkIxMTdFRUUyRDkyMTdFRDlDOUUyQgorOjEwOTJFMDAwNzg1Njg5M0ZDMzlGMDVGNjRFM0Q2MUZFMTI3NzY5NjI0RAorOjEwOTJGMDAwNDI1NEJGMUEzRUVGQ0JBRjI2RTAyOEVDOTlENTYwQ0ZBMQorOjEwOTMwMDAwRDA3MTk2MTEwRkNBQTVDRkI5M0RCM0MyRkMyOEM2MDVDRQorOjEwOTMxMDAwMkZGRDkxQzFCNzlBRjg1MDVFN0ZENzc4MzlEODg5MjQ0QworOjEwOTMyMDAwQzJERkE4ODZBM0Q0MkVGOTJEQzAwNzVDNkVBNzkyNzY2MworOjEwOTMzMDAwMjFCNzNEOTgzNzQxQzlDRTM4NDIxMTVGNTBEQUExQzRGOAorOjEwOTM0MDAwMjU0NUNBMjc2MTk3OEFGMTA0M0M4NURDMTJFMzE5NDg1OAorOjEwOTM1MDAwQkQ5QzBDN0NBMDkyNjM2NDg4REE0RTU1RkEzRDg0OUZENAorOjEwOTM2MDAwMDQwNzhCODg2MzhDRUM4OTRGQjA3RDYyRDhFRkM1RkMxNQorOjEwOTM3MDAwMUM3MjY2NTYyMzAxRkJEQjJBRkMxQTgxQjlGMDVDRjhFQgorOjEwOTM4MDAwMzVENEZCRkIxQkM1NDU2NzdBQTVFMDkzNTlCREUzQTEyNgorOjEwOTM5MDAwMjJCRTRBOTdGOUQ5QkZEMzhGQzc0ODhFNzQxODZGQzZCQgorOjEwOTNBMDAwRUI4MzEzODgyNjlBNUZDRTc5RkEwMEVENDdENjg0RTJFNAorOjEwOTNCMDAwMjNGRDY1QzI3RkZEQjYxNEM0NzlGRjg4QjhFRTI3MTE3RQorOjEwOTNDMDAwRjY0MjJENjk5OTM4MzcwQkZDOUY1NDZGQzU0MkM5RkM5MgorOjEwOTNEMDAwM0VBNDRENkQ5N0IyNzhBMjg2QUUwNEU4N0IzNTg5ODhBRAorOjEwOTNFMDAwMTc2Njg1REJCMTJFRjdBRThCM0M5NzFCRTk3NzQ3OTI2QQorOjEwOTNGMDAwNTU5QzVCQzk2NUVENENCRTg5RkQ1QjVGRkIyNTExQ0ZCQworOjEwOTQwMDAwN0Y0QjRGNjE1MjE4Q0U2Qjc5MzE5MUVGMzNGMzQ5M0U2OAorOjEwOTQxMDAwRjQ0RkY5QUEyNTExRjdFNzk0MEZBNTQ4QkVFQkM5ODNDRAorOjEwOTQyMDAwQzFGNjVFN0NBNzVBQkY4OEU3Q0I5NjIyRjRCQjJDODk5NQorOjEwOTQzMDAwNUNFRkI3ODA4N0IwMjNCRUEyNkI4MzcyNUJBMjAzQ0JDNQorOjEwOTQ0MDAwMzVGRENFN0NFNDgyRTZBMjQwNDZBNEJENUJBNzY3NzlFOQorOjEwOTQ1MDAwQzFBNDQ1NjkzRjlGNENENDcwNzhCOUU0NkYwM0E3QkU5RgorOjEwOTQ2MDAwRjFDMEYzQzIzODFFQkVBRDNEMjRGMkMyMDRGQ0ZFMjg5QQorOjEwOTQ3MDAwRTQ2MDE4REU2NzE1NzJBQzY3REZENjAzRUZCM0QxRTRBMgorOjEwOTQ4MDAwOUM4MEM3RTVFMkMwNzM4MDI3RDk3MjMyMTFFMEZDNTc5NworOjEwOTQ5MDAwOEJGQjMzQzA0RkZBRTlFMDc5NDkwM0ZBQUVFM0I5MjcxMQorOjEwOTRBMDAwNDE3RkI1QzlCODNGQUExRENCRjI4MzZBRjc2M0IwOUM3MAorOjEwOTRCMDAwNzRCNjFCMzAxRTU4REQ3NjA0RURCMjhFMDYyQTQwMDdDNgorOjEwOTRDMDAwRjYwRDlGOUU3NUFBRTBEQ0Q3M0U0NUFDRTNCRjU1NzQxMAorOjEwOTREMDAwMjZGMjQ0RThGQUZFQTZBMEE3REVFQkZGNUIzNDdBMTM3RgorOjEwOTRFMDAwRjk0OTE1RjJEMEZFQzE4OEZENDgzQkRGRjc5OEI0NkUwQworOjEwOTRGMDAwNkQxMkZEQUVFOEMzQjQ1ODgwNEI4NURDN0UyQzE1RTBDMAorOjEwOTUwMDAwQjA1RUMyRjM0N0UzMERDNDBCN0VGRTE0N0UwRUFEMjRBNQorOjEwOTUxMDAwNThFRkI0NTI3ODI0QTc5OUYxM0NEMUUwMUZDQjZFODg2NAorOjEwOTUyMDAwNjM3RUIyN0U1RERDMTI1QTdFRDk0MDg3QTZGQjhEQzE3OAorOjEwOTUzMDAwOTJDNjhENzQ0NkY2OURGRDY5MTFDNEQ3RTY2MURFRjFEMQorOjEwOTU0MDAwN0MwMzhCRkI2N0ZEMjRDNjlGNDNFNUMzOUI3QTYyMDRDMworOjEwOTU1MDAwM0VEMzY1RDdFMzc5OEI5MDREQzY3RDg2NUQyNjEzODAxQgorOjEwOTU2MDAwQUUwNDlDRUQzMTZDMURFMjc5RTlEM0JCMjVDODYzMTJEMgorOjEwOTU3MDAwQ0ZDNzM3ODY4NkFGQTVFNTM5QzA3NzcxNzg5REUzQ0IzNQorOjEwOTU4MDAwNDNDM0VCQ0Q2MTM4OEJGQzQwQTIwRDY1Q0M4OEUwOEJFQQorOjEwOTU5MDAwMzczOTNDNkExM0Y0NUI0MDBGNzYxQUY5RkU4RkVGMDNGQworOjEwOTVBMDAwODk1NThCRjI2MzNEOEZCMzlGMTk0NDc3QTJEODhGREYyMworOjEwOTVCMDAwMDJGOTU4QjUyNjU3RkY5MUUwRTc4MjNDMDI1QTdDNkRDQworOjEwOTVDMDAwNzVGNUI3RTFGQTFENjgyRkFGRTc3NjU1MjdDRkRCNUU1QgorOjEwOTVEMDAwM0ZBNTJDMDlGNjUxN0RFNTNEOTUyNjMxRkJCRTg2Qzc5QQorOjEwOTVFMDAwQkZDNUYzMUFBRDFGRjM5NTZBMjBERjM4MjJERkU5QkI1MAorOjEwOTVGMDAwRTYxQjhCRkNGMTNFRTE2MEQzMTIyRDg1NDNBRDQ0RENDQworOjEwOTYwMDAwRDc3QkVGQzBERkU0QThGQkRDRUEyNENENzVGM0RGMTZERgorOjEwOTYxMDAwRjJGNTg5RkNCNjVBQzg2RkEzOEZENkVGMkY0RDIyNTFCMQorOjEwOTYyMDAwRkFFQkQxMzM1NzZFNTVFNDkxODlGQ0U4REEyQkUzMzAzRAorOjEwOTYzMDAwOEZBQ0ZDODEwRTNDRjcwN0ZEMzhDQ0UxRkNCNkJFRTBGOAorOjEwOTY0MDAwRkM2NjIyOUI0NzJERTQ4NTBEOEY3Q0NFRTQ0NkI4N0ZENworOjEwOTY1MDAwM0JFMkUxNTcwMDQwRjA3M0I0QzlFODhGRkRENTcxQ0QwRQorOjEwOTY2MDAwRTQ1RDUxRTZGQjUwMTI4M0NGQ0QwOTVBRTQ4RjVCRkNEOQorOjEwOTY3MDAwQzRENTFDNjU3Q0YxOUUzODE3MDI3MEFFQ0NFQjNEQkZBMworOjEwOTY4MDAwRDZCMkUwMDI5ODNGRTRBRDQ2MUJBRjIxODlFREFGQzVFRAorOjEwOTY5MDAwQkM1QkUzODJDQjM5OURFM0I5OEM5RUJBNTU4OUM3N0YwOQorOjEwOTZBMDAwRTU3MkJGRjVCNjYwMDY5RTJGOUExMjNEM0Y1RUUwN0JFNQorOjEwOTZCMDAwODRCNjVFMDI3ODA0MkQ5RTAzNjg2RkNFQTY5NTYxOTBGNQorOjEwOTZDMDAwRDdFRkQ3QjBGQzI5QzY2NzdERTEzRDBDNkY4RDIyOUY5NworOjEwOTZEMDAwQjAzN0JDRjU4ODY3RDE5RkQ4OEY1Q0RDMjE2M0JDRkZCNQorOjEwOTZFMDAwRTIwOUNFOTdDNDY1OTYyODdGMkRFMkZBRUEyMjYxNzFERAorOjEwOTZGMDAwODM4QjREMTJFRTQzMTY3QjA4RDk0MEU1Q0JBMkREQUI0MAorOjEwOTcwMDAwMzE2RUIzRkNEOUUxNUI0MDREQzFGM0ZCQTgxQzU5OTQwOQorOjEwOTcxMDAwNENDODM4NUEyRURFQUM4Q0RCMkVERERFMkI0RTQzMjJCRAorOjEwOTcyMDAwRjUyMjM1M0I3MTVGQkRGQzUxRTU3N0Q1NjRGQjdGODI0NworOjEwOTczMDAwREQ1M0FEQjI2QjA2NzMzRkQ3QkUyNDlFQ0YzNzgyOEMwQworOjEwOTc0MDAwMDBGOUJFRjZEOUFGRjQ5MEIyREIxN0JEN0Y0OUY5N0FDNAorOjEwOTc1MDAwQTAxNkU0QTAxNUNCQTM0OUFFRkQ0OTE0MUUxRjI2NzkxRgorOjEwOTc2MDAwREE0MTZFNzc3REMwRTBEMDVERDNDREU0RkU1Mzc2RDQ5MAorOjEwOTc3MDAwMzcwNjEwQ0VGNDlGODZCOTJDRkVGQTAwMTUxNzEwNzcyNQorOjEwOTc4MDAwMzMxODk4NUQyM0VDMzk1OTVFMjdDN0QyRjY1MTdGNUFCQQorOjEwOTc5MDAwMUYwN0Y4QjNGRjdBRDI2NEIwRjcxMzdFMURFMzAyNzg5NworOjEwOTdBMDAwNkQyQjc1MTVDMEZFN0Y1QkE1MTlGMzE4OEMwNjE2Rjc5NworOjEwOTdCMDAwRjVGRDZBRDQ2MTA4MDMwQzZDNzlCODBDRjY5RkQ2RjZGNworOjEwOTdDMDAwNDM3RUYwOEY2Q0Q1RkMyNzlFMkJEOTNBOEVFNUI5ODk2NAorOjEwOTdEMDAwNzFFQURBMkJGN0MyN0MzMkVFNjQ3QTYzNUI5NkFCQzAzNworOjEwOTdFMDAwMUFEMTJGRTFGNjU5MkQ4NzU5RDdDMUMxM0YxRjRERjEyRAorOjEwOTdGMDAwRjhFNDcxMzQ4RkU5RkFCMkQxMEY3NzMzNjFGODE0RjlENAorOjEwOTgwMDAwNTQzMDc2QTQxRERBNDFGNTBGMjRFNTg5RkFDRDJEOTI2NgorOjEwOTgxMDAwNUY0N0Q3QjNBNjc1MkZDNjJGNkEzNkY5MTNFNzgyOUUyNgorOjEwOTgyMDAwNzk0MThCRjExRjMxM0ZGQjlCMjk2NTEwRTcxMUZBNjVFOAorOjEwOTgzMDAwQUU2NDQ1RkQyRkVDRUMzOTQ0RkNCMTM4NTExNUE3ODNEQgorOjEwOTg0MDAwMzlEQ0JFOUUxQkMzRTBCQjk4MzgzM0UwQkJCQjhDMjQyNQorOjEwOTg1MDAwMTZGQ0QzNzNDQjVCOEE1MUZGQUNENkQ5NDBBRjhCNzg2MworOjEwOTg2MDAwNDdERkY2NDA3NDNGNTFFRDczMTY3NjNFNTYwQUU1NDJFNworOjEwOTg3MDAwMjc1RkQyN0QwNzYxRkVBMkE4RTc4RDRDQzk5Q0NGNzJGRAorOjEwOTg4MDAwQjlCRDM3OTBCODIwQkU1NkZCQzZFMDY2RjAwNzE4RkE5RgorOjEwOTg5MDAwQjEzODJDOTUzQkM2OTI0MkI0Nzc4REIwOEY1OTc5QzBDMAorOjEwOThBMDAwRTQ2N0ZFNkExRjNGMDdFQjJBODA3QzkwQkExOTY5ODUzRQorOjEwOThCMDAwOTg5NzcwOUFDQTBGMEI5QzJGMEM2NjIwOUY1MkI5MjI2MgorOjEwOThDMDAwNTFERDk2OUQxQzMzNEQ0QkU5QkIzNjk1REE1M0I0RUUxMgorOjEwOThEMDAwREU5MUNDRUFEOUMxRTUxQTVBREY5MDVDQzhFQTM3MDdCNQorOjEwOThFMDAwQ0Y0MzdENTNGMjU4NTYyRjBDMkU5NzY5RkRFOUU0QTkxQQorOjEwOThGMDAwQUMwRTFCM0I0QTU4QkY0QTlFMzFDRDBCRjY4NDhERUIxNAorOjEwOTkwMDAwNkI2NzEwQ0YwNUQ3QkUzRTU4MTNFOUE3N0MyQzk5QzlDOQorOjEwOTkxMDAwQTUyRkI5QkZGNUNCMkNCMjcwMDZDMDdCNDgxMENGOURFOAorOjEwOTkyMDAwODlGNzdFOUEyQ0VDNUI5NkRGMkJENjI5QkUyM0M5RDExMgorOjEwOTkzMDAwRkIyRkUwREZBREU0RTc3OUM3Qzc5MEFEMjYxNkE3RjJBRAorOjEwOTk0MDAwQzY1MkY4MUY2RDFGOEM3MUI2QzRFNDM4RTY4RkIzRDJDRgorOjEwOTk1MDAwN0U4QUMyRkQwODM4OEFGRUM0QjhBQjQwQUY4MkJDRDU0RgorOjEwOTk2MDAwMzE3RkE5NjgxRjk3Q0NFNDM4MUQ2NzMzOEUzMzk0QzFDQgorOjEwOTk3MDAwQkY3NjQ2NUEwMUUwOERFMjRCQ0JGMUE1NjVGQkNFNjY4MgorOjEwOTk4MDAwMUMxN0ZBQjVFNUEzN0MxRjBFRkVFRUEzNTdFOUZCNTlBMQorOjEwOTk5MDAwRTE3OUFCRTk2MzJBQTc4Rjk1OEQyQ0JFMThCMkU1MjAzQgorOjEwOTlBMDAwMUQ4RDhGNjFGNjFFMjk1MkFFRTM2OTBFODdDNzkyNkQzOQorOjEwOTlCMDAwMEM4RTNERjg0ODkyNzA5QzQ2MEVDNzM0MEFGN0JDRUZGNworOjEwOTlDMDAwQkVFRUY5M0ZEMEJBMjNGMEU1OTJBMUJERURBNjVEOTFDMAorOjEwOTlEMDAwRUIxMUY5REFBMjlGMkYzN0FBQkUyQjYxNzk1M0I1NzEyQgorOjEwOTlFMDAwMzlGOEREMDMyNjYyQzRFNzY0NTdDRjc3NTlGOUNDQ0U0NgorOjEwOTlGMDAwMDRGQjUzRENENzQwQkNFM0QwNDk1MEMzQTU0NkNGRkRBMAorOjEwOUEwMDAwMEIyRDNDN0Y3MEEwOEI5RDNGOUUzMUFEODhBRkNGQ0FBMAorOjEwOUExMDAwRDc2NzM1NDZEQ0JCRDBDMzhGMjc0MzE5Nzc1QTdBRDMzMworOjEwOUEyMDAwNkYwRkRDN0JGQTFCNUFDOEZCNTNGMDc1QjRGRTgwM0YwNgorOjEwOUEzMDAwRkFDMkM3Q0ZGRkRFRjgxMEYzNTRDMUIzMDdDRUFBRjlCQworOjEwOUE0MDAwMDk3ODAyM0ZFMzc3NDM5NUY0MjhFNkI5Mjk1OUU0MEJGNgorOjEwOUE1MDAwQUJGODNBRUI3QjhFNTdDQUJFNUI3MzBGQ0YwMzc2MjgwOQorOjEwOUE2MDAwRTk3OTRENkI5NjA2RTJFN0UyQkJDOUUwNjM0RjA4RkI3QworOjEwOUE3MDAwREJGNjI1RjM3RDZCMUE0OUVCMjNGRkVERDVFNEU4N0U5OQorOjEwOUE4MDAwM0E3Q0FFREVCRjc1RDk1OERFQjNEQTZGRDA5NUUwMEMwNAorOjEwOUE5MDAwQzA3OTNFRUY2NTc2M0U3REI0Q0FERTgwRjhDQjNFNzM3QQorOjEwOUFBMDAwRjhCQkIwM0U1MUQ2RTUxNEM2MDdCREZENDAyMTNDNEY4MgorOjEwOUFCMDAwNUI2NDI4N0JEOUUxQTQ3QjlERTRFQTY5NUE2QTU3MTQ2OAorOjEwOUFDMDAwRjUyRjVCOTc0NUVCQTc5MjU3QTFCQzJFMUE1MEY2NTU4MAorOjEwOUFEMDAwMTY5NURGN0Y0ODVFQ0RFQUI3OTQ3RDk1MERGNTFEQUJGOQorOjEwOUFFMDAwRDlGQkUzNUQyRjgzN0MyN0RFRDVEMzI2QTQ4NEVEODdDNQorOjEwOUFGMDAwRDNDOTBFODQ5QjVDQUUyMTQwNDcwNkY5NkUyN0U4NDkyNgorOjEwOUIwMDAwMDFDRkJFQ0EyMjgzQTYzRTlBN0Q3QUFFODcwRTU4N0NDQworOjEwOUIxMDAwQTI4NEVCRTcxMkIxM0YwRjZBMTVGQkYzQUU1ODc2REU3NQorOjEwOUIyMDAwQjgwQkY0Mjk1RDZGNDdCMkU3N0MzMkQ4MjkzMTFEMEJBMQorOjEwOUIzMDAwQjI2ODU3OUI2MkNFRUFDMTFFOTI1QzU0Nzc4MTlGQzM4NAorOjEwOUI0MDAwNjEyNUYzMjA5RkFFNjM5QjFCRUMyM0IyQ0E2OUQ0MjIyQworOjEwOUI1MDAwM0NCOURGODlBRUVEMUFFREU3QzAxQjJGREMzQjgwMEQ3MQorOjEwOUI2MDAwRTM4Njc5OENFMkZDNUZGN0M2Mzc3RjgxRjg2OEREOTc4MgorOjEwOUI3MDAwNjYyN0I4RjU0NkI1RUY1QzA3RjZENUE4RjZERjdGQzNENAorOjEwOUI4MDAwRjQyRDNCQTcyMUU2M0QwQUZDODdGNDc5NDk5QjAxRTdDOAorOjEwOUI5MDAwM0ZBQUZEQTY2NUYwRkVFODBGREI3MzgwM0VDNjlFRjE4RQorOjEwOUJBMDAwMzc4MjM4RTgzQUY4REEwMEM1RjkwQ0YyODVGNDdEQ0U1MAorOjEwOUJCMDAwNjdGNEMwRTM0RkQ0NzhFQThGRjAzMEE2MjQwMDNDQUVCRgorOjEwOUJDMDAwNjI5RTU0NjdDMjg5MkQ0MUI0RDM5NEU3NjBBODVEOEUyQworOjEwOUJEMDAwRjFENTZFRDJDRjA5NzEwMjcxOEU1QkVEQUYzQzVENDk1QworOjEwOUJFMDAwRDc0NzlGOEYwREQxMTk0NEQ4Q0JFM0FGRDBGRDdEODRFQgorOjEwOUJGMDAwOUQ1RDRBNkM4QTdBQjkzMTQ1RjE3RTg1MzU0QkQxM0VGRgorOjEwOUMwMDAwMjlGOTI2NDVGQjE0NDc4MUEyM0U3NUM4MjhDNUZCQjczNAorOjEwOUMxMDAwM0I0QjE1RjUzQjRBQTYyOERFQUY3NDU1MkFFQTA1RkVGNAorOjEwOUMyMDAwMTZDNUZCQzM4RkI3MjlEQjRGM0ExMDBGQzNDRkI4Q0I5NAorOjEwOUMzMDAwQzE4RTc3MDYzQzhENTA4RUVDNjgyQUVGRUYyMEJERkM3QworOjEwOUM0MDAwQjQ0NTQxNUYyMzNDMUY3REI1QkVEODRGQTI5QzVGNTlGMAorOjEwOUM1MDAwRTU0MUZGN0VBRkYzMkJBNUVDN0M3QkE3ODY5RERGMTA1MworOjEwOUM2MDAwN0VEOUFCMzE5RUIxODBBN0I3MjUwQTc2MEFFQzcxQzZDMgorOjEwOUM3MDAwNTAzQ0UwQUI2MkUxNDM5ODJGRDUxRDIyRThDRjZBRDU3NgorOjEwOUM4MDAwMDc3RjM2MUFGNEZDN0MxOUVEREU1NjlFNjdEMzVBOTU5MQorOjEwOUM5MDAwRTcwMzVGREU2OTI5RjgyQUM0RTlCREYzRDlGOTgwQjE4OQorOjEwOUNBMDAwRDRDMkM1NzU0MzRDNTMwMjNDNzkxNEVCMkUyNTJCNTU3OQorOjEwOUNCMDAwNzhCQTVCNTFBRkIwREVBMzc4N0Y1MkYyNDY0NUZCMTQxMQorOjEwOUNDMDAwQzc4MzJBM0MzREFDQThERkVFRENBOUMyNTNCMzBBNEZFMAorOjEwOUNEMDAwMkYyOERBQzc3RTFFNkMwNDM2MUFERkUxOTUyRDc0RkUzQworOjEwOUNFMDAwQjc5RTZFMkEwN0JDOEMzRUUzOUQwRkZDNTJFNEY3MzQwRQorOjEwOUNGMDAwODIzODJDM0U1QTdGMDQ0QTNGREQ0RjgxOUZFQTcwNDNGMQorOjEwOUQwMDAwMzI5NjQ3MUIxQ0U4NjczQUQ2MzAwNENCRTMwRDRFN0NGNQorOjEwOUQxMDAwRkVCQjg2MTIyQ0RGNkQ3MDYxRjk2RjBEOTNCMTBDMzRCMAorOjEwOUQyMDAwQjhCMTZDNjk2OEMxRjdGNzM1QjQ2MTQ5MjE5ODBFRkE4QQorOjEwOUQzMDAwQzIxRURGNzNBRjQyM0FFQ0U3M0IzNUMxNUE4OEEwQUU5MgorOjEwOUQ0MDAwREI3OTAwRTU2NDY3QkY2MDI3RDQzNzkxRDdBNzREODBFMgorOjEwOUQ1MDAwRjM1Q0IwOTkwMkZCMEE0QThBQ0ZGQjUyNUQ3RjQ5QTFBRQorOjEwOUQ2MDAwRjU0RDI5QUMyRUYyMTI1QTM0QUUwMkIwQUYxRkQ4Nzk5RAorOjEwOUQ3MDAwNjRCQjM2OUQ5MEZCMzdCQTkzQUQzNjU2MzdEMjNBMjI0NAorOjEwOUQ4MDAwMUJGQUYwMUVEOUVFNEEyM0U0MzdBMDMyNkVDNUZBMzQyRQorOjEwOUQ5MDAwQTg3Nzk5NThGQkE2OUQ0N0E2Nzk1MTNGQjBGOEYxOUQ0OQorOjEwOURBMDAwRTFGOEYxMDMzMEFFM0E3RUZDOUIwQjBFMEJGODUzNEVGQworOjEwOURCMDAwNUMxRDZDODE3NTlERTBGRTIzMTcyOUQwMkRBMjY1QTkzRAorOjEwOURDMDAwQjY0MDA3N0FGMUI0Q0E4RTEwNjU5REE2QjQwOUZBNkQ0MworOjEwOUREMDAwRDEzODY3NjE1RUYwNkQzQTAyNzlFODMzMjRCNjFGRUQ0MQorOjEwOURFMDAwQjEwMzUzOTkxQ0VGQkFERDgwRkI5RDkzMUFENzMyQ0M5NworOjEwOURGMDAwNzc5MjQyQ0YwMEJDRjZBNDlDNDRCREQyNjUwOTY1MDBCMQorOjEwOUUwMDAwMUM5RTRCRjk5MEQ1MTM0MkNGNDhDRTg4QkE4RUFERjM0NQorOjEwOUUxMDAwNUY1MzRFRTAzRTIyQ0EzQTc3QTc0NDg5OTNCRjkwQzI2RgorOjEwOUUyMDAwRTMwNjdFNTczQTlFRUJFNUY1OTM5NUFFMzVBMDI3NEVCNworOjEwOUUzMDAwOTZCQTA2QzE3QzRFQjgwREM4M0Y1RUI3QzUwN0Y5OTYwNQorOjEwOUU0MDAwNDRFQjJBOUUxNUUxNTdDOTQ5RDVFMTc3NzdFQTE5OUY3NgorOjEwOUU1MDAwOTFCQkU0QThFN0NENEI1Mzk5OUQ4NTc4ODNGRERDOUNBRAorOjEwOUU2MDAwMThCNEMzNEY2QUEyOUYxNzlGOTNDQUY0RjVBNTdFRDE3OQorOjEwOUU3MDAwRkQyQjc3RjFGNkIyOTkxNkVDQUY2QkJEMDlFM0I3NUQzOAorOjEwOUU4MDAwRUVDMTY4MDc3NUQ1NTMyODUxRkVFOEJBNTA3RkY5MTUyMQorOjEwOUU5MDAwNkMzNzg4RDAxNkM2MjlFNzcyMzlGNTlCRjY3NTdGM0U3OAorOjEwOUVBMDAwNDVERjNGQkIzRUM2ODkzMkRDN0EzM0VBQTdCQkY4Q0IzRAorOjEwOUVCMDAwRjNFMzhENjhCN0NDOUY5MTVFMDY3QTY5MkU4Rjc3MkQ3QworOjEwOUVDMDAwQjA2ODEzMzFFQ0E1QjVFOUUxOEFBMEE1RTY4MjJEQTAyMgorOjEwOUVEMDAwRkU5N0RCMkJGNTM2NUFBRjRFQkI3QjBCOTRBQjA2M0VBMQorOjEwOUVFMDAwQUM4NzIzOUEzNTQzRjc2RTAxRjM3MTBENjVBRDYyRENFMworOjEwOUVGMDAwMkYwNURGNkJBMEYzNUFCODQxNzZCMEZEOTMzODc3QjhFMQorOjEwOUYwMDAwRkEzQkU1NTcwODNBM0NDOUYzNjQyODdDNzE1RjM4Mzc1RgorOjEwOUYxMDAwOTVFRDdCQzQ3NzczMzlCRDVENENFMTc2NUIxRUM5QkJBMworOjEwOUYyMDAwQTY4Q0UzNUMwNjNBRTk5OEZGNUU2RTFGN0U3NzY1M0I4MAorOjEwOUYzMDAwQjdEQjNFRDJCMzcxRDVGNzUwODg3MUU3NzFCQzlGRDRCRgorOjEwOUY0MDAwMTM5NzA0NzZEQzVEMTZBNDhGRkNBQUFGMzYxNUQzRjUwMworOjEwOUY1MDAwRTdCNzVCMzUxODg3MTc3MjNDQzBFRTAzMkJGRURDODMzNgorOjEwOUY2MDAwNzI2RTY0NDdGMEI5NTMwNEU5QkMwREY4RTQ0NjdBNkFBRQorOjEwOUY3MDAwQTY3NzIzRUE4NzUxNUY1M0ZEMDM3MkYxQUFFN0VDMjkyNAorOjEwOUY4MDAwNkNCNTQ3M0Q4RkU5NkZBOEU2RjJCMTFFRTVEQUQxODZFMAorOjEwOUY5MDAwMEQ1ODNGRDZFMEM1RjI3OEMzNTYyRTFGOUJCMEZERERBRAorOjEwOUZBMDAwODYxRDVDM0VGQUI4N0NEQzgzQ0ZEQjFCQUFCMDdDQTNBOQorOjEwOUZCMDAwQzE4M0U1NUYyREVFQjhENDA0MjAzNjBGRTY2N0JFQjU0OQorOjEwOUZDMDAwRDM0MEUwREVCNEVFNzYwM0QyMjlFNTgwNjc5RUI0NDM0OQorOjEwOUZEMDAwRkU4QkMxMEFFN0VFRDQ3OTMwNkE3OURCODNGRkQ2NUU2NworOjEwOUZFMDAwRjc2MTY0QTQxNjQ3RTRCRDgwN0Q5NkQ5MzdGRDlDMjBCNworOjEwOUZGMDAwMEUwQkM4OTMxMTRGMjRERDBFRjJGOTg0QzM2MTAxQkIyRgorOjEwQTAwMDAwNzU2NDZBMzJBQkJCMUMxNjFEQUQ5NzNDNDFFQjU0QkU2OAorOjEwQTAxMDAwOUNGMDM4MkMwNjVBMUY5NTlBQzJEQUJEMEU4Qjg5RDY1MQorOjEwQTAyMDAwNkY3RDIyODVCNUZCMDgwNkE5QzczRjkxNzEzQkM4OUY4QworOjEwQTAzMDAwNTIyMjFEMDU3RTI4Mzc2NjREODA5NEQ5MEE2QkU5NTE1RQorOjEwQTA0MDAwRTA4MzQ5Qzk4QjI2MDAxRkZDMzZDNTgxNzQzOEM1QjEzMQorOjEwQTA1MDAwRjEyOEQ0QTcwRTY5RDZDMjUxMUI5N0I5NjAzMzdDNTczQgorOjEwQTA2MDAwNjZBRkQ0QzI3NzEzRDJFRURFMENERjREMUNGOEIwMzZFQgorOjEwQTA3MDAwRjJCQkM5NDNGNzZFODZGQTM0NjdCMzE2RUNDMURGQTZBQworOjEwQTA4MDAwQjBGM0ZEQTIxRjUxMTdFRDQyQkU4QTNDQUQ2MUVENkVFQgorOjEwQTA5MDAwOTRFM0Y5NkQ2RTk0RTMwMjJFNjU3NzU2REUwRjdFQkE3NworOjEwQTBBMDAwQkEzNkM5MkFDMTNDRUU5NDdBODJFRjkwMEI1NzdCOTU2MQorOjEwQTBCMDAwNzIwQjk1QjNEMzlGQjhDOUIyOTFGMjU3MURENDZGQzUzNworOjEwQTBDMDAwRkE0MzFCQTNDQkREOTlBOTUxRjRDQjFGMzg5RjgyREU0NQorOjEwQTBEMDAwODQ3Q0U4M0ZFOEQ5N0QxRTJGRjNGNUQ1QjUyRkIyMkM0RgorOjEwQTBFMDAwNDI3REU1QjE4MDdFREQ5RkMyRjRFNTQxQUUxRjJGRjNENgorOjEwQTBGMDAwQjI5QjNGQUZEM0I4RTZDMzM4NEI1M0ZCRTRFQjZBNjg3RgorOjEwQTEwMDAwQTc3Q0FCM0EyN0QwNDczQkU3RUI1NUE5NUMzRkYwN0JGOAorOjEwQTExMDAwMTNENjEwNzY5RUU4NDZGOTVBMkIyM0Y3NkY1OTkwOTc3RAorOjEwQTEyMDAwRDM3MjBDRjI0NUQ1RjkwRjM1NzBDRTI4QTc3NzFFMzBDMworOjEwQTEzMDAwOTU4QjJDRUZCMTREOTkzRkRBQjNGRkU4QzdFNDFFMUNCNQorOjEwQTE0MDAwNUY4NDRENDc2M0RGRUI3RTIwMzVFMUJBRUI1NkI2RjMxMworOjEwQTE1MDAwNzVBRjI0MkNCRjU5QkQwRUUyNDk0MERFMTJGOUNFQkRDOQorOjEwQTE2MDAwRDcxMzhDQkU5RTVFRUJFMEY3RUVBOUYyQUNBOTFERjQwRQorOjEwQTE3MDAwMzhDQ0E3NjJBMTg1ODBGRjI2NTI0RTlDQkE4RTlDNTA5NworOjEwQTE4MDAwQ0I5REJGOTczQ0JCOEVCQzc5MzE5QUJDMTFFNzlERDU2NgorOjEwQTE5MDAwQTVCMEU3RTA5QzE0RTREQkMxN0QyRkUwQTdGRkE3NDQ1NgorOjEwQTFBMDAwQ0Y2QkQwNEY1NzU5RTgyRjFBRDg5RkQ5ODM0ODY3NzY3RAorOjEwQTFCMDAwOUJFNzc1NzgyRUU5NTlEQzVERTRCMTVFRDA3ODdGMEJDMgorOjEwQTFDMDAwNzZEMUIxMjc5NkEwMUNFQTA0RTU0MEY5RjEwRDVBMDdCMworOjEwQTFEMDAwQjk1MzY0NzVGQjAxN0U2NDA4QTM5RkJFRjIzM0RGRTZDQQorOjEwQTFFMDAwN0FCMTc3QzlGODQ5RTQyOTc2MzU3RjkzODE3RUFDMUIzMworOjEwQTFGMDAwRDA3QjVGNzBBODkwQzcwNEUxM0M0MDc3NDkwQzlBM0M0MworOjEwQTIwMDAwMUQxMkYxNEI4NTkwNkY5RDg4NzY0NDQ3QkE1RTBCRTUzMQorOjEwQTIxMDAwREY3QjlGRDg5MTlFOEJGREFCRjc4QjFEMjkyNTQ2MzZBMgorOjEwQTIyMDAwRUVDNEM5NTBCNkU5M0QzQjE2QzEzRTY5OTQwMUY3NDlGOQorOjEwQTIzMDAwRUZGM0ZDQkVFOTlGNUVCNTgzQkU5QTJFRkIxM0YzQTUzOAorOjEwQTI0MDAwREVGQkNDOEU3N0U2OTUzOUYyN0JFRjM3RTlGQTI2QzA1NAorOjEwQTI1MDAwRkE2RUI0RUY3NDFCMDM3MTAwNDZGNUZFQjM2NkMzNUY3QworOjEwQTI2MDAwMDhFNDQ1OEZERTcwOTVDMDdENjQzN0RFOEYxMjE5QzQxNworOjEwQTI3MDAwNDRFMTY5RTcxMTI4OEIzRjc3NjExQUNFODgwQkY1NDdENworOjEwQTI4MDAwQTAxQ0Y1MzVEQjlFREYyODlGRThENjJCMkQ0N0Q4RjFBMworOjEwQTI5MDAwRjBBMUNBRkIxNjRBN0VDRkY2QUJCQ0VDNzU0RkRCMkFBOQorOjEwQTJBMDAwQUYzMjRGQURENDVGOEM3OTE0NzIzMDE2Q0FDQjUyMTBENgorOjEwQTJCMDAwRkQ1RUIyODZEREMzMjBFRTVGQTBGQkQ4QzQwMUM1QjA1MQorOjEwQTJDMDAwRUY2NUY5NTJFMzIxQ0Y4ODRFQUVFMkE3MUYyRkI4MTdGMgorOjEwQTJEMDAwRjlERTg0RjY0RkNGM0VGNjE1MERFNjA5QjQ2QTVERkQ1MgorOjEwQTJFMDAwQzdDMjNFNzZDMzIwRTc0NjVBRkY4RjQwQzIyRjBFRDAyQQorOjEwQTJGMDAwQjJDRUZBMTcxMjc5N0Y1QkNEODY2RTQ1QkQ2MzYzRjhFNworOjEwQTMwMDAwOUUyMEM4ODNBRUY5OUI4QzdBQTc4NjkwQUQ4MEFGMUE0OQorOjEwQTMxMDAwNzI1OEJGMzY0MjBGOTI5NkZGRUM4MUZCMzAyQUU3MkEzMworOjEwQTMyMDAwMDE3MEI4QUZEMjRDNzdEMUY3MkFGOTdFODM3ODFCNTlFOAorOjEwQTMzMDAwOURFRkIzMDhGOUVDNzYxN0VEQjczMjgxQkY0RjY2NEY0QQorOjEwQTM0MDAwQzc3QUJBNjhBRjYyRjU0MUEyQkZEN0Q4RkIyOUEyQ0VCRgorOjEwQTM1MDAwRkJCQjQ5RDQ3RkNFRUE1OUUyRkIxNkY2N0Q5RTE4RkY3RgorOjEwQTM2MDAwQkREQkIxRERDMkRFMUYzRjYwRkQ3NDkwMDM0MkJFNTcwRQorOjEwQTM3MDAwMENFMEY5MjVGQzdFMUYyQUVGQTcwQzQ4Qjg2RTVFODkxOQorOjEwQTM4MDAwQjI5REVCMDM3MTlGNEZDNTRGQTdDNEJDMDdGQ0RDMjJGNQorOjEwQTM5MDAwNjFFRTVCQ0Q3RDNBRjQ2RjVGOEE2QkM5OEYzQzlGMkM3OQorOjEwQTNBMDAwRjI1MERDRTUxNjE3RDg3QjZCNUUxREJDNEJFNkY5MzgyNgorOjEwQTNCMDAwNjA2RjZDRTNGMUU1MEFEOThDRjE4OEVFRUQ0Q0NFRjdENQorOjEwQTNDMDAwNjVBRjJEREZGMEJBMDI5RkJEREFGOTNEQ0ExOEE4QTMyOAorOjEwQTNEMDAwRTM1RDdFMjgwOUYzREJDOUMwMDBDNkMzNTcwQzkwQzRGNworOjEwQTNFMDAwRjkyQTNDREYyQUYyQkRFQzM5QzQwNUZCNTNGQjZCMjY4RQorOjEwQTNGMDAwNzY0RkU1RTcwMTk0QkZDQjVGNjNGRURFMzUzQjhGQTA3MAorOjEwQTQwMDAwOUU1QjJDM0I5MDhFMEY2Nzc5RDYwMERENzY1QUQ4N0QwNworOjEwQTQxMDAwODRDQjM3QkM4MUZDQkEyMTkzREIwOUQ2RDA1MDA1M0NGNAorOjEwQTQyMDAwN0JDM0ZGOUUxQkMwRkY5RTdGMjRGQ0Q1N0U2NjcxM0VEMgorOjEwQTQzMDAwN0FENTc3Q0M0QkVCQjRCMDM4QTg5M0UzRTk1MzhENjM2RQorOjEwQTQ0MDAwMDQ4N0Q3MjNCMDlFQ0JDQjAyQjkzNjE5OTI4NjAzODlGNQorOjEwQTQ1MDAwMkNFRkU4REQ2MkQ4MDc3NUQ3NUJGMDlFQTM3OUVCM0U2MQorOjEwQTQ2MDAwQzk4RjNDOTcyMjRBQjVGRDdGMEVGOEE4MzgwQ0FGRTY5RAorOjEwQTQ3MDAwREVGMDdEMTZGMDczMURGODJBREI3RjYwRjgyNjY5ODMxNQorOjEwQTQ4MDAwN0EyN0M0NEQ0RkIzN0JDNzQ2MDQzRUQ1NDdFNkJCQkNENQorOjEwQTQ5MDAwMzU4MEU5RERGRUZDMUU2QTc1REVENjVCMDMyQzBDNEZCMQorOjEwQTRBMDAwM0MxRUIzNjZDNkJCNjMyMDFFMjNGODYxN0MwQzY5MDFBOQorOjEwQTRCMDAwRkYzQUE1NkIyN0E3NkIyN0QwQjVBMERGNzA1Qzg2N0UxRgorOjEwQTRDMDAwMTc4NUJGQzJGNDRCMTQ3OTY5RUYwRTUwREUwQjQ2RTFERAorOjEwQTREMDAwMTZCODAxREQwNkZFOTE3NERCNEFFRDVGOEM2M0JFNjI0NworOjEwQTRFMDAwNDJGRjg5MUFDRTVGNzFCODBBNzg2QkQzQUUwRjY3NkRFMQorOjEwQTRGMDAwREEwRjAzNjc2RDlBNDNFMTdGMTBGMEVFNEIzRkE5RjE0RAorOjEwQTUwMDAwMjNFNjFEODU0RjhCQkYwRjlGMzZBNjczMzlBNTBENjJCRAorOjEwQTUxMDAwOUVBODFBRUYzMTY5QkRGMERFM0ZFREZBNzg1N0I2RkYxRAorOjEwQTUyMDAwQzA3ODU3QzM0RDVERDZGMEY4QTZGQTc5NUU5QTg4RkZEOQorOjEwQTUzMDAwRkUzMDcwRkNGRkNEN0YzRUJGRkU5MEEyN0RFMTg2NzdBRQorOjEwQTU0MDAwMTRFRDhCQkMxRjI4RUE2MzgyODE3MjIwNzNFMTBGMUYxOAorOjEwQTU1MDAwNzcyMTg0RjZFNUY3RjVBQkY3RTU0RjlGRkVGMjBBMEQ5QworOjEwQTU2MDAwQzREQjRBMDJDQzlGRkY2NUJBNjc1MzFBODVGM0ZCMUExNgorOjEwQTU3MDAwNUZBMzg1QzI3NUU0OTkxNjc2NkY1Nzc1MkVFNjBGQUQwOQorOjEwQTU4MDAwRTM3M0ZDNkFDQzdGOURCRDk3RDJDRDU3QzQ4MEZFNEU0RAorOjEwQTU5MDAwRkZBMTlCQjQ4RUJDREU3NDUwN0E0NTQzNUMxMTc5Njg5MAorOjEwQTVBMDAwQTU0NjlCRDY4NUZFMUFFMjhBNDYzNzBGNzBCQUMxRkNEMworOjEwQTVCMDAwMUZDQUVGNTU0NkEyQjM1MzNFQUZBQTkyMzBERkE5OEExNQorOjEwQTVDMDAwQjA3QzY4NUFGQTNEQjQ3REJBOTZGOEUxREVFMzRBQjM0RQorOjEwQTVEMDAwRDY2RkMwMzg5RkYyM0NCMzgxREY4QjRDRUNGMThBNzNBRAorOjEwQTVFMDAwQ0RCMjRCQzZCQ0I0NTkyNTJDM0U3ODk3QjkwNUNGOTM1NAorOjEwQTVGMDAwQ0UzOUJFRTlGMkJEQjQ5RDZDRjYxNkIzN0M2QjcxRkUyQworOjEwQTYwMDAwRUM4RjlBRUYxMkY3N0IyMDhERjE3OTk3QzRFM0M4OTIxMworOjEwQTYxMDAwMEVFRkM3NTI3RjM3Mzc4REYxRDk3NDc5QTMwQ0Y5MkUxRAorOjEwQTYyMDAwQTEwRjA4REFERDgyRUZFOEZBOEUxQjBBRDlGOTBBRjhFMQorOjEwQTYzMDAwNUQ4QTRBQTJGMzBGQzZGM0NFMEY5N0MzRkIzNTI3MURFMQorOjEwQTY0MDAwMDg5N0JBOTI4REY5ODBDN0JBMDlEMjM5NDM3RTc4NUZFQworOjEwQTY1MDAwNTNCN0UxNkJFQ0E3NDI3RUIxMTFERUVGM0VDRDVDRTE3QQorOjEwQTY2MDAwMjMzQkU4M0VDNTExRTlBRjBDMkUwMEJFQkNEMUZFNDcyRQorOjEwQTY3MDAwQ0NGQjRDODMxRkU5RTk2Q0MzNzEyQ0RGMUZGN0ZCNjIzNQorOjEwQTY4MDAwQjAzMzgyMEQ4MUE4N0VDOUVGRUIxRjEwN0UwMUUxMjc1OAorOjEwQTY5MDAwMTA3MjQwRENDQkI3Mzc4RENCMDVBMzM0MDBFRjUzRDMxQQorOjEwQTZBMDAwQjI1MkM4Q0JEN0QyN0FEOTJCMDc2RTIwNUYwRkZDMjNDQQorOjEwQTZCMDAwRTVFQkI3QTVGMzlBNjRBNjE3RDVGNEFEQTY2QjQxQ0YyOQorOjEwQTZDMDAwNzA5RjM3RkMxRUMxNURENERFMDNCRDNBOTc3OEYzNkFGNAorOjEwQTZEMDAwQTg5Q0FENUFEMUE0MUIyRDdEN0ZCQTVFNjVGRTNDODMzQworOjEwQTZFMDAwNDQzOTY3RjJEREU1Qjk4M0U1NDc5NkNCQjgzRjEwRjkwOQorOjEwQTZGMDAwMDkwMjBGOURCREYxRDY5RDc2N0QzQjUzRDlGRTBGQjc2NAorOjEwQTcwMDAwRTMzRjVGRjBGREY0MUE1MUQ4MDM5NkY0NUVFQkI2QTU3MworOjEwQTcxMDAwNUY3RkREQ0FGNjFGNzhERDExRTc1RjE2Qzg5QUYwNzkxMgorOjEwQTcyMDAwMEZDODFGMDYzQkFFQ0JDN0NFMzM1NjY3MzVFMTNERjJBRgorOjEwQTczMDAwQTQyNDE0MEI3NkUzQ0E4MzMyRDIyMUQxQkFCNDI5MTFFRQorOjEwQTc0MDAwRjc0RDc1MTBGRjQ3NDA4RjJCQzZBQ0MwNzM3MEJERUU0MAorOjEwQTc1MDAwODkzMkI3RTJCOTM4RjU3RDUxMjI1RkI4OTZGN0EzQkVDQQorOjEwQTc2MDAwMzdBQTk2RTcwOUQ3QUFGMjc2NDZBNEYzRkNFMDQyNTI0QworOjEwQTc3MDAwQzhGMjJCOTQ3NkE5QkFFQzZDMjAwQUJGNjRFN0Q1MDYyMAorOjEwQTc4MDAwRjQwMzhDNEI2RkY5OTkzNzJEOEM4NzA5RTlCREVDQjgzMAorOjEwQTc5MDAwQzkzN0MwREJFNDdGMjRERUQ0RjQyQTVCNzZFMzc5QThGMgorOjEwQTdBMDAwRUY0QUFGNTczMzVERjNEMzEzQzI3Mjc4MUVFNDcwMTVDRQorOjEwQTdCMDAwQzEzREVFMDYxRkRDRjcyRkVFQzdFRTkyRDg3RDM0NUQ2QgorOjEwQTdDMDAwRTcwOEZBOEQ2RTc0QkZGMkE4OTMxRTNDQ0YzOUYyNUQ5NAorOjEwQTdEMDAwOTdDQ0YyMDg1OEJFODFCMDUzODRERDMyQkEyMzI0QjMzQgorOjEwQTdFMDAwRkJFREY5MzkyODlFMTdGNDZERTU5NzMzNjA0NTNCNDczQgorOjEwQTdGMDAwRjhERkZFNUU3RTZCQTFFNzBFMUE5OTVDMTNGRUMxQTIyNAorOjEwQTgwMDAwQTAxQkVEQjg0RTlEQkYxOEVFQjNGN0VFMzc0NUI1MDM2QworOjEwQTgxMDAwN0U5NkFFQjlFRTNEQUU3RkI1Nzg3RTA2RjQzMjkzQ0IzMAorOjEwQTgyMDAwNzc3MTlGNkI4NUNDRUU3QkVFMEVDOEU4QkY1QkZGQ0ZFOAorOjEwQTgzMDAwMUZGRUY2NDlDNzhERjdGNTc1RDZFRUE4RkIyMjUxRDY1NworOjEwQTg0MDAwNjlEODc5ODlDMjcyMDdFNkVEQzE3RTA5RkM3N0MyOUY5QgorOjEwQTg1MDAwQTc3RUZGRjVDQzMyMUZDQ0FGNDIxRTgzRjc2Qjc2RUY5RAorOjEwQTg2MDAwNjBGM0U5MEIyRjc1MUI0MjM4N0U5RkVEN0NGQ0JBODNBOQorOjEwQTg3MDAwQzVENkM4RkIzMENFQTVGN0VDQ0ZBQ0U3OEQ2MUJDN0U2QQorOjEwQTg4MDAwNUJGQzhGMEQ1NTI5RUM5QkZGRDdGNzBERDM2NTZBM0ExQQorOjEwQTg5MDAwNTJGRDk4MjdGOTk4N0Q0QTk4OUQzQThGMDRCMDVDNDAwNAorOjEwQThBMDAwNDI1ODdBMDhDQkE3NUY0QzlDNTgyRTI1NkUyQ0E3NjU4MgorOjEwQThCMDAwN0E0RUE1NjM3RTRCMjgxMUYzMjE1RkZERUI1MEEwOUJFMAorOjEwQThDMDAwQ0JFMzQ2Mzc0MUVFREMwRjY1QTc3NTE1Mzg3MEZDQUU1QgorOjEwQThEMDAwNTdGRTlBMDE3OTJEMzdFMkZGRjg1OEQ3MDU5OEE3M0EyNQorOjEwQThFMDAwQUVGMTZGQTUzMkM2NEY4ODcxMkRDQUZCNEE3RTRCMDI2RQorOjEwQThGMDAwOTlDMEUyNjJEQjEyQjM5MERGQzJGMjJGQTk1OUM4M0ZDMAorOjEwQTkwMDAwODhCN0U2OUREM0IwRkM5MDk1MTJERUU3REExNkQ0MjAyNgorOjEwQTkxMDAwNkJFNTJEQ0JGMkMxRkQzQzZEQURBQzNENkY4RENEMjcxMAorOjEwQTkyMDAwRDE3QURFMjgxMzZCQkZEQkU2ODM3MzBGRjM0OTEwRjk4RQorOjEwQTkzMDAwNzEyMTlDN0E5MEUxMUMwQzkzNkZFMkZFNzM2QUIxNjdGRgorOjEwQTk0MDAwODM5REI1QUNEREM4RjJGNzQ5NzAyMEM4RjFGQzNFRjYzNgorOjEwQTk1MDAwMzcxMzMyMTg5RjBGQ0I2NjcyN0I1ODk5RDIwRkQxOEY2NQorOjEwQTk2MDAwQjdBRkNDMkM1Qjk2MDE3MUQ5MEM1NzRDMDY1RERGQjBBQworOjEwQTk3MDAwQjhDMEI2NDc4QUQwMkY4RkJGQjNGMkM1QTg3QjMwN0U1MAorOjEwQTk4MDAwMjhCRTZCQ0EyQ0IzQzI3QjJGNDkyQ0RGREM3QjkwRkYyNworOjEwQTk5MDAwNkUwMTA5MjU0NkRFMjczQTJEQjMzQzExREU0QkNGMjA1MAorOjEwQTlBMDAwREM2RThFMEU1N0Y4M0QzQTc3OTRGRDlDQzg2NzFDMDYwNgorOjEwQTlCMDAwN0IyQUY0OEZCMzdCQTk1RTkyNTgzREZGMTlFQjFEOUI1OAorOjEwQTlDMDAwODdBMjBGREYwQjc2NkQ1M0E2NjczMEFDNjM5ODlFMTA5RAorOjEwQTlEMDAwMzNDQ0ZGNjk4MzZGMTdEQTlGRjUxOUUwOEY1Q0YxOEMzOAorOjEwQTlFMDAwNDEwMzc2QzFDNzU0QURDMkI5OTI3RjZGMzA2MkY5MDk5NQorOjEwQTlGMDAwRERFNzQyRjkxRjc0OUYwQkU1MzlCQUNGODVGMjMzQkExMAorOjEwQUEwMDAwQ0Y4NTcyRDkxNTI3MjUxQTQyREVDOTcwQjk2MDNEMjI1QgorOjEwQUExMDAwREVBNjlFRUYyODAxNkYzMUZFNDEzRDhFQkYzMkQzODMwQgorOjEwQUEyMDAwRjBFREMxRjc3RUUyODM3OEM4NEJCNjUwNkFEQzc1RTg3QQorOjEwQUEzMDAwQUQ2RjM5RTNFNUZCQkRFOEY5NTlDMzMyRDhCRTM2QkY4NworOjEwQUE0MDAwNTU4QjdBM0NCRjJEMThCQjNDRTJCREU5MTk3QTZDQ0YxRgorOjEwQUE1MDAwN0JFNTczM0MyN0RBNjlFRDgxQUY0QkEyNEI5RUFFNjE3QgorOjEwQUE2MDAwRjVFOUNGRTQyMjdDNTc2NkJBOTZDMUJBMjk3RkNGODAzOAorOjEwQUE3MDAwNzVFNEI3N0RGODJGNzA5RTg3RjY4Rjc5MDQ1RDUyRThGNAorOjEwQUE4MDAwMzFCNEYzNTVFQjUwQzM0MUFDRUIyNTVCNjAxQjdDRkY0RAorOjEwQUE5MDAwRDIyQkQ5QjAxMjJBNkYwOEUzMUJBMDIzMjlEQTdBMzcwOAorOjEwQUFBMDAwRTI3Q0VGMzA4NDhBRTA5Q0NBMUREN0U0QTg3OUMzMkJFRQorOjEwQUFCMDAwMzM0QjExQ0UxMkQwNUI0MjA0OUMzOEJFQkUyRjVGRjdFMQorOjEwQUFDMDAwQzRCMzM5OUQxMjcxQkYwNkM4NEUwN0U4QTFBQkIxNjA4RgorOjEwQUFEMDAwRDc1NUYyNzg3RDVCRUJDMEY3NjE3RERFRTMzMjE5RTQ5OAorOjEwQUFFMDAwNDBGQTU1RjBERDBFOEUxRjUxRTYxREQ0QkIwMTRGMkZFRAorOjEwQUFGMDAwMUQzQzNGMTBFRTVGQTU3ODE5MDhGN0IxNkVDRDE4QTQ4NAorOjEwQUIwMDAwRjAyRkU2OERGQUU2ODk0N0VDRjgzRUZDQjIxQTk1Q0ZCNQorOjEwQUIxMDAwQ0QxNTkwNEYzMkQ3NzhFODJENThEMjdDRUJCOTBBQzhDMgorOjEwQUIyMDAwMjc1OTk4MkMxRDgzNzI5MTIzNkIyMkU0OTE4ODdDRjcxRQorOjEwQUIzMDAwMjU0MzRBOEYwMTJCNEQ3MzU2QTIzRDU2MEFDMjI1NDIyQQorOjEwQUI0MDAwMUY5NDFCNjNGODY1RDA0MkZGQzQyQkVBOTM5MjA3MjgzOQorOjEwQUI1MDAwREU5RkUyQzg1MUI0NEYxRDcyOEJBMjVEOEMzQkNEMzk5NAorOjEwQUI2MDAwNUNGMURFQjBCODUwMzZFQ0JGRTgzQUQ4RkREN0NGQ0FCQQorOjEwQUI3MDAwOTg3Nzk3RjdDQUM5REI2RUExRjVFOUNGQ0RDMkZCRkU4NgorOjEwQUI4MDAwNUVFMkVERDNGNzk1RTNFRjBCNzY1MTc4RUFBOTIxNzVGNAorOjEwQUI5MDAwQTFFNEMxQzcxRTgxQ0U1NEY2N0RDREMxNUYxRTczMzlCRAorOjEwQUJBMDAwQUU2M0RGREZDMEFFMTdGMjc1NzVCQkIxMThFNEVCQjc2QgorOjEwQUJCMDAwQjVGM0Q1Nzg3OTI1ODNERjFGQzJFREZFQkVFOEE1ODcwMgorOjEwQUJDMDAwMUYyNDA3QTMxNzdFREY5NjlBNUUyMEIzOTREMTFGMkIxNAorOjEwQUJEMDAwQTc5RjYwRTdDMEJFQUIxQ0ZCMTNDOEIxODg3Mzk4M0Q0QworOjEwQUJFMDAwQTVDQURGMzY0Q0VGN0M3RjFERjhERkRGOTMwOTlFQUJGMworOjEwQUJGMDAwRTNFN0YzOTZDM0JGRTUzMDlEOTNBNUNERjdDMzdENTI0MAorOjEwQUMwMDAwRjRCOTE3RUM0RjM4MDdFQUEyRkQ1RkNFRTA3NjUzQ0REQQorOjEwQUMxMDAwQTFGQjUzOEFDMkVENjRGRDM5QzVGQkU0M0U2OThCQTJGQQorOjEwQUMyMDAwQkUzOTRCNTlERjVFQkEyNUYyRkJCRUU0RTFGMjFEOEI2MworOjEwQUMzMDAwRjQxRTNDQkYyOTQ1RkQzRDU3MzE5RjhBQzMyNkNDQ0YyQQorOjEwQUM0MDAwQkIxREYyNEVFOEEzREFBMjBGQjQxMDZGQkRCRDBGRkQxRAorOjEwQUM1MDAwMjlFNENFMUM5OUQ0NDc2QkJGOTJDMUUyOEVEMzBFOUJFMAorOjEwQUM2MDAwMzA5RkU1QkJGNkZCMzE4NTI1RTYwQkJFQzZGNEU3Qzc5MgorOjEwQUM3MDAwRkQwM0RBNDhCQ0NCOTlBQ0ZGQ0JDNTBGRkZGMzVGMjBENworOjEwQUM4MDAwRUVCOTlGNjBGRUU2NjUxQjkzRkJGOUFENUY2ODM0QjRENworOjEwQUM5MDAwMUNENjhGRDE0QkJFMzVBODAxN0REMjU1MURFMzg1RkM1NgorOjEwQUNBMDAwRkNCQTk1MTZDQ0VCMUM5NjFERkFDODU4NDA0ODRDRTZFOQorOjEwQUNCMDAwQjY5RjFCMjlCREZEMTEwRTMzNDZFOEQzMkVEOEUzRDAzNQorOjEwQUNDMDAwQkFGRDVGMUZCQzYzMzNGREY3RDRDMzI2QkZFNjdCQUM4MAorOjEwQUNEMDAwQzc0RTZEMjhENDdGNjU4Q0JGMTcwMERENzBCRDAyQkVFNgorOjEwQUNFMDAwRjNCQUZCNDk4RjlFMDE3OTAwRUI4N0ZBNkQ5OTBGQkQ4RQorOjEwQUNGMDAwRkYyODlENzdERDNCOENCRjIxNTM0RUJENkY5RjFCQjE1RAorOjEwQUQwMDAwNkYyNzRGMzFCRTM0RDJGRkMwOUU1Qjc1QjQ0OTBGRkIzNQorOjEwQUQxMDAwQjkxQkYzNzcwQkU2Q0Q3QzVCQkVDRUNGQkMyMTFGOUY2QQorOjEwQUQyMDAwOTg0QUYxNTJCNzlGREQzM0QxREQzRTA4Q0ZCNUY2QTU4NQorOjEwQUQzMDAwQkZFQjc2Njg5MEZGNDRCREIzNUQ5RTBDRjRBQTNFMjczRQorOjEwQUQ0MDAwMkVFMDQ5QUNCOThBN0I5Q0Q2OEVGREFGMTlBMDI3RDdERgorOjEwQUQ1MDAwMUVENEIyNjQ4RkJFQzZEOUFBMjE4RTg4NzE1RTdBQzMxMgorOjEwQUQ2MDAwNTBDRDdFQTc5MkNEQkY0QkU4RTc4MzdGOEUyQjFEQ0FDNworOjEwQUQ3MDAwQ0E4RDUxRjQxQ0Q1Q0IzQTNCRThFNTRBRjY3QjBCQTdDQworOjEwQUQ4MDAwMEUyNjk1MDFGQzRGNDlDNEVGQzA3MzU3MkNDRjc4MjY4RgorOjEwQUQ5MDAwRUIwRTlFOUJGMUZFOTBFNDIxREFDODdCMEVDNTNFNzI1RAorOjEwQURBMDAwRDZDMTU5ODNDMDhFRkNBODc1RjEyOThBMTlCMjI4MzNGRgorOjEwQURCMDAwMDdFOTY1MzZGMUEyREQ3QkNBRTY0RTA3N0ZDMzc0MUU0NAorOjEwQURDMDAwRUYzRjY1MEI3NTgwM0MzRTM1MzY0NjgyRjgzREVEN0ZBMgorOjEwQUREMDAwMzM4OUI4QUZFRjk0Q0U5RENFRUU4MzEwNzlDNTM3N0YxRgorOjEwQURFMDAwQUY3QkRCMkFFNEZCNEFBNzQyQkM3QTFFQjFDMjNFRjIyQgorOjEwQURGMDAwMEU5OUQ5QjVFNDREQzY5NzQyREVENTQ5ODEzODk4RTcxQQorOjEwQUUwMDAwQjRDQzE5RUIzMjIxRkVCQkUxNjdCOEFGRUM4MTlCOTY2NQorOjEwQUUxMDAwRkZERUQzQjdCNDZCN0JGNkFGN0IyNDc2NEY4OTkzRDkzMworOjEwQUUyMDAwRkJCNTYzMkVGRDYyMzY5QzczQTNGQjZDODlDRTY3NzEwNAorOjEwQUUzMDAwREIyMUJDODc0N0JEQUZFRUQ5REZGQzBGRkRBM0JERjcxQgorOjEwQUU0MDAwNDdFRTg3NjA3REMyRUZBRERFMjdGNUQ4RTVDMkJFN0I1OQorOjEwQUU1MDAwOTZFNUI5MUYxOUZCNzhFNzZBNUE1RkZGNkMwQ0MyRjFERgorOjEwQUU2MDAwRTIzMzA2MkZDOEVGOEJCQjBDQjhERkI5MTgxNzNBQjMyMworOjEwQUU3MDAwMEVFQUZCRjI5QzVFMUMyRDE3Q0Y3NzA5RkE1RUExNzFEQQorOjEwQUU4MDAwRkMwMUY0MEVGOTlEMEVFRkRERjhFMjY5MDNGRUJFQzc4QQorOjEwQUU5MDAwQ0E1RkRFQjQwQkY2NEY1RkE0M0I3RUZEMjJGOEY3N0U1RgorOjEwQUVBMDAwOUQ4MEY3MDE5MDY0RjZGREVEOUMxRjgxQkYxQzE0MUY2RgorOjEwQUVCMDAwRjJGMzE2QjQxQjU2QkU5QzgyRjI0QkUwRUZDMkQzMjZDRgorOjEwQUVDMDAwM0MwNzdGRjFGOENDRkVFMDA3RUJEMEVDNjVCRjMzMjlGRgorOjEwQUVEMDAwOUJCRDIwODc1N0VGMzJBMURENDdGNDlFOTc2MEZERTVDQgorOjEwQUVFMDAwQ0ZERjNFN0IzODhDRkY2MTAyODFGNTc0QjVCRjhDRkVFRAorOjEwQUVGMDAwQzczMDdFQTNFQkY1RUVGNjFDMjYwNzdBRjQyQ0NCOUIyRAorOjEwQUYwMDAwNUQxOEJFQTdGOTE1RTg3RjBEMTFGNzIwQjJCQ0Q5NDIzNAorOjEwQUYxMDAwNTk2MkJGM0JGOTUwRjQ3M0UwQzczMjk5QkQ1ODIzRkMyNgorOjEwQUYyMDAwMjVGMUM0OTgwQzdDRTgyMUVDREVDNzg3MDZFMzNEQkIyNQorOjEwQUYzMDAwNjczM0Y5Rjk2NTEyRTJFNzFEMDVCRDlEQTkzRDgwRkU2NQorOjEwQUY0MDAwMTIwM0NCRDdFQkUzNUVDQjEzOTkzNjdDN0ZCOUYxNkI2MQorOjEwQUY1MDAwODVERkE0NzZDMzE1NjU3RDI4RkIxREU2QzI0NkM3RjBENAorOjEwQUY2MDAwQkI2OUI5OEVDM0Y5QkY5MkRDQTc2MDdEQUI1QTFFN0U2OAorOjEwQUY3MDAwRjU1RDg0Q0I1MzNGRjkyMzhDN0JEQzhDN0UxQUYyMkU1QgorOjEwQUY4MDAwODM5RjdBRkZCMkRDMThFMjcxODc2Njg1REQ3QjdFRTdGRQorOjEwQUY5MDAwMUYzMDdGRTRGQzJCQjdFMEVGOTQyRDk2MDNFN0UxN0VCMgorOjEwQUZBMDAwQUM0RTRCRTBFQ0JEQjREQzc3RkMwNEUyNDUzRERGNUUyQgorOjEwQUZCMDAwNzE3ODg5Qzk5NTFBNThDNzcwQzg1RjcxNUZDQTQ0QkU1NQorOjEwQUZDMDAwNjVGQ0ZFRTlCNjNDODQ5RkYwRDM3NjVEOENCRUJGMTI3MworOjEwQUZEMDAwRjMxNEZEOEJGOTg5RkVDNTdCREY3MDdDNURENjA3RjIyQgorOjEwQUZFMDAwNDEyRkZCMjAwRTExQjFBRUNCQjE4MTdDRjgyOTVDNUYwMworOjEwQUZGMDAwM0FDQkU3QkUxQzQ3RUIxMTc0NzNBMzc4Q0RGRjA1NUMxOQorOjEwQjAwMDAwRjEzNEU2MDA4MDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMworOjEwQjAxMDAwMDAwQkFENTgwRjZDMTNFNzE1N0Y3NzY3OUYxRDYyM0JFMAorOjEwQjAyMDAwODY4NEZDMjE3RjM4M0IxMEQyMjYyNDQ3RkU3ODY5MDJCMworOjEwQjAzMDAwRTM5QTkwODgyMkI2OUFDMEI0OENDMTM4REE0MjI5MzQ5NworOjEwQjA0MDAwOEQ5N0MwODZFODI0MkVGNUM0M0Y4MTlBNjlERDQ2QTcxNgorOjEwQjA1MDAwRDIxOTI2MThEMjQwNEQzMzQwQUMwMkU2ODI1NkM4ODYzQgorOjEwQjA2MDAwNUE3NzY1MUFERDIyNzRDQjVBMTZBRDIxNDkxOTVCODVEMgorOjEwQjA3MDAwRDQyRDdCRUZCQjNCOUM3MzAyNUJBQkQ5OEE1RkJFRkJERAorOjEwQjA4MDAwQkVFRjdERUZGRERFREZFRkRBMDBFMjZBMTVDMEIzQjk5NworOjEwQjA5MDAwNkY4MEEzMUFFODEzNzY2NzAzN0MwNUNDNEY1NkE2MDM4RQorOjEwQjBBMDAwNDIwMEFCRTg3RjA5OUZEN0ZERjYyRUU3MDM1ODBEQkRBMAorOjEwQjBCMDAwNEUyODA2QjhDRTc3NkYxMzA1ODBFMURFRUYzQjU1MEZDMworOjEwQjBDMDAwMkQ1QUUyQkY1OTBBQzA2OTdGRTRDN0NCMDBDNkU5QjM3NQorOjEwQjBEMDAwNzgzMjA1NzAwMEFEQTNDRkI4NDBCRjFBQzA0Q0ZDNkRFQworOjEwQjBFMDAwODREMjA4RjJCOUU1Rjc2ODdDMjVDMDJDODk3M0RDNzQzQQorOjEwQjBGMDAwRTM3NDIxMTREMjNBOUM5N0UzMzU0OEZCNUM3MjE0RTU2MworOjEwQjEwMDAwRDlDNjg3OEIyNERDRjdBQzE4QUYwMDIxQjk2RjFCQUYxMQorOjEwQjExMDAwQjJFN0MzRENENThEMTBBNEUzRTIxNTYxMkZDMEU4NzQ1QgorOjEwQjEyMDAwMTFCODBDQTQzM0U1ODQ5Mjg1N0NGRTAxRjI1MUU0MzMxRQorOjEwQjEzMDAwRUE4NEI2M0UzQ0I3QTY4OThGRjQzMTNEMUM4MzNBQ0FGNworOjEwQjE0MDAwQzcwM0M3RTRBQjI5QzNFN0U1MDA4QkU4QjlEQjk0M0I1MQorOjEwQjE1MDAwODBDRjJCRURFQjkzRkFEOEM3NjcyNDlFRTk1NzkzQzlBQworOjEwQjE2MDAwNDc3QUNCMjdFM0YxQjgzOTFGODVCODQwQjhFMjY3OTUzNQorOjEwQjE3MDAwMUI3MTZGMzA3MTA3NTAwNDQwQkIzQzY3OEU5RjczN0IxRgorOjEwQjE4MDAwRTI0MjA1Q0FFRDczNkIwMkVBRDM3MDBFRUQ4MkUzMDY2QworOjEwQjE5MDAwNDdGQzREQTI5QzAyQjA3RDA2QUUzREVCMUNCRTI3MDdDRQorOjEwQjFBMDAwRTE5MDVCRTYyMDNFRjVBNjc5MzlFNEI1MDZEN0VERTJGRAorOjEwQjFCMDAwMjI0MEU3QkFBMTg3RDE3RDVDODJDOUYxNDUxODYzNTQ2QQorOjEwQjFDMDAwMDFCRjgzMjhDMkNGRTgxMjA4MzNEQTAyMTE0Njk3NDI0MgorOjEwQjFEMDAwMEZBM0NCQTA5N0QxRTU5MDYwMTQxRThFNDcyMTQwMjc4NgorOjEwQjFFMDAwN0RDNzdGMzMxREM5NjM0RkYzRTM0ODZCQkUwQTkxNUU5MQorOjEwQjFGMDAwQ0Y2NDFDQkU0OTM4RDQzRTA4MDc4RDIzN0ZGQ0FDMzg5MQorOjEwQjIwMDAwQjQ4MDlBQ0JGOEE1RTI1MTUwQ0FGQzNCMTUwRjE3Rjk1MAorOjEwQjIxMDAwMjNEQTJEMEQ2MkI5NDQxNzgxMkUxMDVENEM4RThCN0M4NAorOjEwQjIyMDAwMUUwNUM5NDFFMzI2NTBEOEI4Rjk3RkM0QTE0RTU3MUQ2OQorOjEwQjIzMDAwNkFGOTE0NzgzNDRERUQxNzNCNENCRjE4MjdERDY3MjZBQgorOjEwQjI0MDAwRUQ3NDUyOTJEOEQ4QjIxN0EwOUNFMUY5OTNFRDY4M0QwNQorOjEwQjI1MDAwQUY0OTZGRkNCQkU0MDdGODQxQUMzMUVDQzhDMzcxNzU3MgorOjEwQjI2MDAwNjM1NzMxOEU4RjQ5QURDNkI4QTFGMTE3NDExQzFGOEZBRQorOjEwQjI3MDAwQUQwQzNCMUUyMUJGNkVBQzc2Q0EwMERERERBQkMyNEIxMAorOjEwQjI4MDAwNzA1RTRERjM1NTAwQzYxNUI0OTVGMEU0M0Y1QkZEMDZDNgorOjEwQjI5MDAwRkU2QUY3MzZEOThGNzFBNDE2N0E2NEQyQ0ZFRDQyQ0MwQworOjEwQjJBMDAwMTAzRkExNTg4MDNBQTQ0NTRCRTMxNzlEQjg2RTg5QTg3QQorOjEwQjJCMDAwRjY1MDNDQjZCQkUzM0UwOTcxREZEQUREOUMwM0E4RUYzNAorOjEwQjJDMDAwNkVEMTU4RUZDMjdERUVBQUE0NUVGODVDNEJDMzcxNUZFRAorOjEwQjJEMDAwNUY1OTE3MTdCQ0ZGRjlDOEY3OTA1NDRCNzJDQ0Q1ODA1MworOjEwQjJFMDAwRTQzOENEQzk4NjI1MUI3M0RBMzA0RjBDMjc5Q0IwNEY0QworOjEwQjJGMDAwNEE5RUYzQTMxQ0Y1MDhDOTAxRUUxMjIwQkJFN0JCMEQ2MworOjEwQjMwMDAwM0VDMzdENjU2NTY0OTc5MzA0MTJDRDY3MDVBQTA5QjdBRQorOjEwQjMxMDAwMEY3M0MyMjc2OUZEQThEN0YwQUY5MzY0ODdEQUZCRDMxOAorOjEwQjMyMDAwREY0QkNBQ0Y2OTdERUFGM0QxMEY1MTAwREM3RjQxNTI3OAorOjEwQjMzMDAwNUYyNzc5M0JEMjNGMkRBMUJDMzRCMkUwQkQ1RDdBMjBCRQorOjEwQjM0MDAwRTlBNzFDOUVCRjA2RjU4RTJBMTAxMzU5MUU1OUU4QkZBNworOjEwQjM1MDAwODk3OTE0RDAwNkUzNjhDRkQxMERDODA3NzFBODA5QUI2RAorOjEwQjM2MDAwNTEyNzNFRkVDMjlBQjExMDI2MjlFMjdCOEVDRUVEMTAwNworOjEwQjM3MDAwRjVBMjA1QjhFRkE1OTUzNzQ0QzNDRjBBMEMzRjMzRjNDOAorOjEwQjM4MDAwRDBGOTBCRkRDRkU3MUJDMzMwNEM4OEFCOEUwQjc3RkY5QQorOjEwQjM5MDAwRjkyN0M0QUZFM0I2NDdBNkU1Qzk3ODdBQjkwQjdDQjQwMAorOjEwQjNBMDAwQzg2M0NCMUI1NjlDRDU5Rjc1QzUwNTFGOEQxRkRBNDAwMgorOjEwQjNCMDAwRUIxNkJEMzc1MDRDN0EyRDFFRDBBMzVFRTI3M0ZFMEYwNAorOjEwQjNDMDAwRjk4NjFDNjY1RDUwM0VFMTNFNEY1RDY4MTYyODM5MDNFNAorOjEwQjNEMDAwNzQ5RTE2NjIyRUM0QUI5MzhCNUNGMkQyRjgyNDI3NkI1QQorOjEwQjNFMDAwMjhGRjVGRERFODFGMTlCNDVFRjFFNEExNUU5QjRDQkQ1MAorOjEwQjNGMDAwREFGQjhGRUVGMjIyRERGNENBOTNDQkExODJDMkMxQzk3RgorOjEwQjQwMDAwRjJCNzg0NUY4QUZGMkRDNzlEQzk3Q0NFN0VEMTEwQTg3QworOjEwQjQxMDAwNjcwNzU4OUZCODQ4N0VEMERFNkI1RkQ3MDFGQjNGQTYxOQorOjEwQjQyMDAwQkNEMzMxMzFDRkEzNUNDMzkyMzc4QkQ5Q0JBQzU3NDA1RgorOjEwQjQzMDAwMjUwNEY5M0Q2REVFMjUzRDNDMjRGNzc5MzFFNkUyOTA5NworOjEwQjQ0MDAwMUVFQTkyRkQzNDM2RTMwNzRFQkNDMEZDRDI1QTBGQUY2MQorOjEwQjQ1MDAwNjQzMkRCNUJGMUY0Q0MxRTk0M0QzMzg5NTdFNTMxOTdDMAorOjEwQjQ2MDAwNDJCODU3MUVDQjUxNDhCRjRBMTFENjg1MTlERTMxRTY4NgorOjEwQjQ3MDAwNzc5NUU4MUIxQ0ZBRDM2QkQzQzc4MjNDOUVGM0RBRjlBRAorOjEwQjQ4MDAwNTIxOTMzMjhCQ0IxNTM4MUJGQ0M0OUNBRDc2OUM2NTNCRQorOjEwQjQ5MDAwQjM3MEEyNDk0NDNGQjhGRDE0RjgzMTI0QTFCM0ZGQTcwQgorOjEwQjRBMDAwNTEzNzhFM0JGNzAyQUQ4MERCRjQ4MzdDNkUwRkYxMzFCOAorOjEwQjRCMDAwRTI1M0RGNUY5RDRCRjYzRTY1QzZBNzJCOTcwNzY5MDJGNworOjEwQjRDMDAwNEU2OUQyMzQ5MDRBOTM2MzBCNUY5NzY5OUZGNEQyMTkwNworOjEwQjREMDAwQjY3OUFGM0NDQkI2M0ZBMzJFNjhERkFGMjk4OUYyMTAxNworOjEwQjRFMDAwRTU2MzYzRkY3NEU1NjFEQkZBRERCRTk2MkJFNDk3OEJDMQorOjEwQjRGMDAwMTIxQjk3MTMyRTk5NEJBQjZDRjMyMTcwQjNGRUExQjZDMAorOjEwQjUwMDAwQzAyM0M3NzAzRkRDMzFFQTc5MUQ3RTU5M0Q4MDg4NDBGOQorOjEwQjUxMDAwRkEzNUU4MDAzRjQ2N0JENDBGM0I2Qzc2NEZEM0QxMUYwMgorOjEwQjUyMDAwNzE1RERBQjUwOTc2QzczRjk3NjQxRkNGMEY5ODdFNTBEQgorOjEwQjUzMDAwMDAwNTEzRkQyMDg5QjNFNzFFOEVDQzBGRkE3MTExRTFDRgorOjEwQjU0MDAwRUMxNTYzRDg3MjRDQzIyOTA0NzMzMjY4QkVGNjhBMDBDNworOjEwQjU1MDAwMzE4NjdCOTcxQ0M3RTczM0MzNzZCQzczREFFQzc4RTc5OAorOjEwQjU2MDAwQTk3NjdDRjMzN0Q5RjEyRDhDRDhGMTlEQkRERDhFNjc5RQorOjEwQjU3MDAwNDBCM0UzNTdCQ0E3REVCNjdFNkU0RkEzNkQzQ0VGRTA1MQorOjEwQjU4MDAwMzJEQkZBODc2MkFEQjY3MUQ5RjFENUI2RjVGMzdCOUZBMAorOjEwQjU5MDAwQjBDRDU3OUVERDZDOUJCN0ZDMkFENUVFMEJFMjlEQjY3NQorOjEwQjVBMDAwNzVBOTc2QUZCRUIyQzNDNkQ3QjJCMzg2REZGRkE3OUQ3QgorOjEwQjVCMDAwMzdBN0Q4Rjk1QjI4MUJDNUREREJCRUExRkQxNDg2NUY2QworOjEwQjVDMDAwNEUzN0YyNTJCM0IwMzBBMTkwQkQxNzNBNjVCMkU5M0JBNQorOjEwQjVEMDAwNTI2NjkzOTdFMkREQUM0MzYxQjMwRTQxNzgxN0IzN0JCQgorOjEwQjVFMDAwRDhGNDEzMzkyMTVGQTIzQzVBNzUzRERDRTRDMzcxOEQ1OAorOjEwQjVGMDAwMUVCOTQ0RTkzODM0RDREMzk0MjEzMTM3OTFGQ0I4OUUzNAorOjEwQjYwMDAwMzM3MTc5QkM4RTAzODcyRDVFNzA5QzlEQzQ2REE1RDY2OQorOjEwQjYxMDAwMkQ2NEUwRTI4NjRGNjM1MTk2MkVDOUE5RjBGQzU2NzM2MworOjEwQjYyMDAwOUVBQjMzRjJGQTBBMjUwRDFDMTNGMDU4NjQzRTA3MkEyQworOjEwQjYzMDAwREFDODZGQTEzMTA1MkJDREZCMDBGNkU1MjA1MjVGQ0VCNQorOjEwQjY0MDAwQkI2M0QxQzA1NEZEQTQ3QzUwNjA3RDkyQ0FGQUE2Q0JFNgorOjEwQjY1MDAwOUNFQTI0QkFDQTlEMjhBMkZBNzUyODVCN0QyOTgwNzlDNAorOjEwQjY2MDAwN0U4NDk3MjVENjY3NzE3QTk0OTQxQTI1QzU1OEQxNzkyNgorOjEwQjY3MDAwMjdBQzk0NTNGRjhFRkZDRUMyQkNDQjVGMEQ2QjFFMjY1MgorOjEwQjY4MDAwQkU1RjQ3Rjk1NTUzOUVDMzAxRjU1MDAwRjExRkU0RkMxRQorOjEwQjY5MDAwQkJBQTcxRUZEQkY1MUYxNTUxRkQ3MTA5ODgwNEU2QzFFNgorOjEwQjZBMDAwNEM5RkYyMTMzQTQ3REJCRDcwM0FCMzVCMEVFQTg3NzlFMQorOjEwQjZCMDAwNTRFNzI1RDYzRjY4M0IzODc2MUZGODg4OTgzRDMyMjFGRAorOjEwQjZDMDAwNEVGNzM4NTlERDAxRjM3RUI0RDZDNENCQkExRkFEMzE4NQorOjEwQjZEMDAwQ0YxRjQ0MTY5QjMwNEZBRjNEN0I5OUUxQjIyNTc3MThDMQorOjEwQjZFMDAwMUM5OUNDREY1ODlGRjQ2NDgxQTc2QTFGRTlBNDU0Q0I0RQorOjEwQjZGMDAwQURGM0U5Qjk3NTVGQ0ExNzNFNEI1RDZDMTZDQTMzRjRGQQorOjEwQjcwMDAwMjlGQTQ1OEI2RUM5MUQ2MkY3Qjk3QkZCNEYxODc1RTRBQQorOjEwQjcxMDAwRkVGQzM1NTY2NzkzN0ExQkZDMDdGN0E2QjNGQTMyQjhERQorOjEwQjcyMDAwQjdCMDkxNjg5MkZGMDhFM0JGMzZGMkFFQ0Q0RkQ2NkQ0OQorOjEwQjczMDAwN0ZERkU2N0ZFQkI1M0ZEQkU2RjVBQzMxNjczRUVBQUY5NgorOjEwQjc0MDAwOUZDOTZCRjkzQUUyNzdFQkI0MkI0NEY3NDZCNERCMzU4QgorOjEwQjc1MDAwQjI4QkM1NUYzRjMwNkYwOTlERjdERkY1RkMxQkMzNzdFOAorOjEwQjc2MDAwNjA2NzAyMUM3MzkyN0FERUQ4Nzk5RDhERjU5RDNBQTNBRAorOjEwQjc3MDAwQTk3QTVBRjc0QzhCOEExN0ExRDQ4MUY2MTlFM0E2Qzk4NgorOjEwQjc4MDAwNDcwMjkzQ0ZEOTFDMzRGQUYwODE0N0IzMUJBOUNFMEVFMAorOjEwQjc5MDAwMTQ4QTBFODM5NjE4RTNCQzNBQjczMTZFNTk0QTc0RDRCMgorOjEwQjdBMDAwRTlEOTQzRjdDQzAxMEUxNDBFRkQ2MTBEQTdCQ0JBMUVGQQorOjEwQjdCMDAwRjk3RTNCNUJGRDk4RkNCMzYzRjM1ODg1MDNFM0ExQTNEQgorOjEwQjdDMDAwNTJGRjA2NDdBOTdGQkE3QTg3RjRFN0IwQkRDQjlCQzE4OQorOjEwQjdEMDAwRTQyQ0ExQkU2Mzg4RDcyQTM4Q0MwNTE1QzE5QzE1RDRBQQorOjEwQjdFMDAwOTcwRjRERDM0NkE4MTI5NzFDOTk2MThDNDUyMzNFNDI3MgorOjEwQjdGMDAwQzE3RkIxNzhBOEYxQUJGRjI2M0UxRjcwNDI5Q0ZDNTY3QQorOjEwQjgwMDAwRkIyNTE3M0JDQUZDNEQxNzVCQkQyQzlFREFFOERFNDVENQorOjEwQjgxMDAwRjc1REJBNkY4Q0E2MTlENDE5RTQ5ODdFNjIwQUE1NUUwQQorOjEwQjgyMDAwOUQ2ODI4NjhFNEI1NjY2MTdGMDk0N0ZEQzE0MTE3NTBFRQorOjEwQjgzMDAwM0NFMDM5MEFGNTE1REE3OTU3RUMyODhFQjM1MTc2RUFFRgorOjEwQjg0MDAwNTM3RTJEMUFGRDdDRDVBRjVDNzFDQTFCMUJERDc3OTgyQQorOjEwQjg1MDAwOURGMjgyMDFDNjJGQUIxODMzMTdGMkM5N0FEMTE1OEIyRQorOjEwQjg2MDAwOTI3QzdBQTI2ODA1Q0FEN0UzQzRGRTg1RTJGQTFBQ0VCMgorOjEwQjg3MDAwMjNERjVCMDdFNjFERDkzN0MxMUU3OTQxRTM3RTA4NEYwMAorOjEwQjg4MDAwMDExOEYzMzk4NzY5QkVCRDdGRjAwNkU1OTE4QjAxQjVEQworOjEwQjg5MDAwMzA4OEZDMDc3OTI5NDQ3OUE0RERGN0E2NDhGOUE3MzI1NgorOjEwQjhBMDAwMjhCMTdEMjgyRkQzMTdGM0MxNzczOTg2QjNEQkZGMDE4OQorOjEwQjhCMDAwRkFFQjNBNEMzNjE5NzQ3RkUzRDVCOUMxNUFCQUE3RTgwNgorOjEwQjhDMDAwMjJGMTQzOEY2MEZEREZGREY0QkZCNTIxRjFDMzcyQTQwNworOjEwQjhEMDAwMjM1RUI5ODhDRUIxQ0U0NTM5MkE4OThGQTVCNzI1NDdEMQorOjEwQjhFMDAwOTJDRjgzRkQ3QUEzN0JDQzE2QkYzNzVGREU1RDQyNzFCQQorOjEwQjhGMDAwNTIyNTcwMEM5RkQ0RjUyRDI2MkUwMzRFQTNGRjRCOUQ5MQorOjEwQjkwMDAwNUY0RkY2QUM5REMyM0VGMzAwNzI5MUJBQTY2MUFENDNBMworOjEwQjkxMDAwQkE5MjcwNDJGQzZFN0QwREY1NjE3RDhCQjI4MEVDREJERQorOjEwQjkyMDAwREVFQTkxMjk2RjU5RkM5MThGRkFGQTAzQ0VGOTI0MjdBOAorOjEwQjkzMDAwRkMyNUIyQzNFNkM4RjdDRTVDOTU5MkYzRTg3RkNDQUVBNworOjEwQjk0MDAwREEwMUMzNUZEQTJGQkM3RkUzNzkzQ0U1OTk5RkNEQUY4NQorOjEwQjk1MDAwQTYzQzZERUQ0RkM1NzlDNDJCQjFGNzNCNEYwODcxODZGRQorOjEwQjk2MDAwMjNFMkJCOUFGOEY3NURGOTVEMzZFMTYyRTFGQzc5NzE5QgorOjEwQjk3MDAwMUQyRDRDODhDNDdGRjRGMEREMjIwOUY3Qjc5RkJCN0NGNgorOjEwQjk4MDAwOURGQ0I2REQ3Q0JGMDBBN0VDRUYwRDEwMkY4REVFOTM3NAorOjEwQjk5MDAwRjdFQTA4RTVENkQ5NkM5QTlCRDhCN0I5QUNGRDA1MEU4NQorOjEwQjlBMDAwRkI3RTZDRDA3OTNDRUY5NDc5NkYzOTRCRjk2MjhBRkI1RQorOjEwQjlCMDAwRURBOTA0Q0Y0QUY0QTk1Q0VDMEJBOUZFNjBCREE3N0FGRgorOjEwQjlDMDAwNjNENUZCQURFRkYyMkMwRUI2MDY4MENEOTM1QzY0NTdDOQorOjEwQjlEMDAwNEU3RjhCRDUxRkVCRkQ0NTk0QzNCQThBQjg3NThBRUFCMgorOjEwQjlFMDAwMEJFNDk3QTA3NkIxN0EyNENDNDZCQkUyQkVCRURGMkMzNgorOjEwQjlGMDAwMzNFRjY5NDY3REFCMzVFQjU5MkRGMTIxRjlDQjMzNTg0NworOjEwQkEwMDAwOURBQjMxQ0YwREI5QjE3RjBBNTJBOUQwQ0NGNzM0RTY0NgorOjEwQkExMDAwRkI4Q0JENkZEOUVFNzdGRjAxRTkxRTM1RTI2MDE0MDBBMworOjEwQkEyMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA2NAorOjEwQkEzMDAwMDAwQkZCNTFDRkMwRjAwMzhBRDUxNTE4MThENjI5MzE1OQorOjEwQkE0MDAwMzBEQzUyNjY2MDcwNTU2MTYwMzgyNzhGOTBBMzE1NTZDMAorOjEwQkE1MDAwRTVBMDRDRkYwQjQ2MDY4NjU3NDBGQzA2ODhERjMxOTI3NgorOjEwQkE2MDAwQUU1RjRCMThDMTVFQzlDQkMwQTAwREU0RDcwMDY5NTVDRAorOjEwQkE3MDAwMDEwNjA2MkUyMDVCMDc4OEY3MDFGOUY3ODBGODE1MTBGQworOjEwQkE4MDAwQkIwODMxMzA3MEYzMzEzMDk4MDJCMTE4MTBFQjAyRTU4OQorOjEwQkE5MDAwN0Q4MUY0MzczRUVDRTZFQjA5RTNCN0ZGQjkwMDJBNUY5RQorOjEwQkFBMDAwNTIxMDk1Q0YyMDgwNUY3Rjk3MjA3RTc5NjkyMUQyQzM4NQorOjEwQkFCMDAwQzQ0RTlERkNGODY4QTI0MEVGNDBFMDlCMENBODdDMEJCNAorOjEwQkFDMDAwNTkwNjA2MkYzOTA2ODYxRTc5MDhGRjFBOTJGQzNDQTBGQgorOjEwQkFEMDAwOThBNTJDMzQ1Q0M1ODE2OTA3QzhCRkNDODBERDVDMTk5MgorOjEwQkFFMDAwQTBCQzM2NTA3RTE1RDQxQzAwREY0Mzk4NjU2ODAzMDA2NworOjEwQkFGMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA5NAorOjEwQkIwMDAwMDAwQkU1N0QwOTdDNTRENUQ1Rjg3REYzREU5QjJEQjM4NAorOjEwQkIxMDAwODUyQzg0MkQ0QzU4MTQxMDcwMDg1QjEwOTRDOTg2MDEzNAorOjEwQkIyMDAwMDIwQzhCODgxNjc1NTg4NDEwMjA4OTgwRkQ1MUI1MUYzMgorOjEwQkIzMDAwMTM5Njg4OTY3RTBEQTI5NjVBQjAwMzBEODJGREIwMEQyNQorOjEwQkI0MDAwMTgzNTYwQTBDMzY2QjE0NTFCNUMxMEJCN0MxRDE2RDlCRgorOjEwQkI1MDAwMEMyNDA0QTVBM0M1RkFERDczRUU3RDk5Rjc1RTY2NDg1MworOjEwQkI2MDAwQjRGRUJGN0Y3RkZGN0YxMDJGRjdEREZERENCM0RENzNGOQorOjEwQkI3MDAwQ0VCRDkxMEQ3NjQyNDYxM0YyMzVGQ0QwNzQ5OTQwMDg0MworOjEwQkI4MDAwNDk4OUE2RjRFNzlGNUZBNzEyMzJDOTRDRkYyNTEyOTI5QworOjEwQkI5MDAwMkZEQTA4MTk0MkM4NDQxQjA5OUE2ODlEODlBM0U4Qzc4RgorOjEwQkJBMDAwNjQ0MkRFQUQxMjgyMjJCNEExRjUwMkMzMDgyOTI2RUM1QworOjEwQkJCMDAwNjc5MjQ0NkE4NURCMDk2OUNFN0FCNTYyOTA5QjEwQzFCMQorOjEwQkJDMDAwRUIyNUNCMzM2OUVBNzY5MTk5OTA4RTNBRjA4NUUwMjBBNworOjEwQkJEMDAwQzQ5OTY1MjBBNDBGNkJGMzM1RkQ5QkU4QjU2MjVGNEFGRAorOjEwQkJFMDAwM0VBOUEwODMyNjlGRTJFQkFDQTlERjcxNDYwRjRENzlGOQorOjEwQkJGMDAwMjc3RjNGNEQ3OTk3QTI0QzREQkU1QkQ5MUQ5QUZBREQ0OAorOjEwQkMwMDAwOTdFNzY4RjIxOTgxNzE5QUZBM0RENzRFRDFFNDdCNTdENAorOjEwQkMxMDAwREVBRkE5N0ZFQkM2RDk5QUYyQkVDMTYyNERGOTZEM0I4QQorOjEwQkMyMDAwOTY2OEYyMDNBQTFGRDNENEJGQkQ3NkE1QTY3QzUwRThDMAorOjEwQkMzMDAwNjk0REY5RTBBM0NGNjhGMjQzRUI1RkQwRDQxRjdFNzI2OQorOjEwQkM0MDAwQUJBNjdDNDRGODU3OUFGMjkxMTc3NjZCRjI3NzM2RURGMworOjEwQkM1MDAwRDVENDFGMUQzOUE4Qzk2NzkzM0Y2OEVBRTc5QURGRDc5MworOjEwQkM2MDAwRTRGMzVEN0ZENkQ0QkYzQkVEOENBNjdDQUNGQjUzNEQ5QgorOjEwQkM3MDAwQjk4MjA3RTNGQjVDRDM3QzlGRTBGOTg3QTY5RDQ0N0NGNworOjEwQkM4MDAwMTREODg0MTg0OTE5QTY2NjUyODlBOTk1NTQ2MzZBMjM2MQorOjEwQkM5MDAwRjU5ODlFNDlGN0RGOEZGOEY5NjJBMDgyNTBCQzVCMTVEQQorOjEwQkNBMDAwNjhGQUVGMjQ5QUJFOUJENUQzRTlFRjBGQkQ3OTA5QTFCRAorOjEwQkNCMDAwNzgzQjkxNzU0RDI2OUE2RDIxOTFFMjk5Qzk0QzAyMTZGNworOjEwQkNDMDAwOEEwQThFMDhDNUI3MjQ4QTc3MTE4MkE5MkI0MkYxNkRBMgorOjEwQkNEMDAwMzBDNUJCODgxOUQzMEU5MTBFRjgzRDI5RTJDMjM0MzkyNAorOjEwQkNFMDAwRDIxOUJGQTc0NEQyMzA0RDhERjRDMEI0NjNDNDhENjk1RQorOjEwQkNGMDAwNUFBNDFGQTY5RDIyN0QzMEVEMUNDOUM0NzY1RDIyMUU2QworOjEwQkQwMDAwNENCQjQ2RUVDMEVGREQyMjU5OThBNjQ3NzJGMDdCRjc5OAorOjEwQkQxMDAwODgxNzUzNzc2NDFDQTYxOTkxMDI0QzdCNDRBNjYwQkQxQQorOjEwQkQyMDAwOUUxMTFGQTZCRDIyRjdFM0Y3REU5MTE5OThERTEyOTk0NgorOjEwQkQzMDAwOERFOUFEMTEzRkE2N0QyMkM1OThGNjhEMTQ2MURBMkZFRAorOjEwQkQ0MDAwQjIwNERCREQxNjI5QzNCNDdGRTQzMUZDM0UyMEIyMUMxMworOjEwQkQ1MDAwRDM4MTkxOTU5OERFMUUwOTYwRUE4OTNDOERGNTA2NDVGMAorOjEwQkQ2MDAwRDY2MjlBMTk3OTA2QkYwRjhFNTQ2MjNBMjRGMjAyN0U4NworOjEwQkQ3MDAwMUYxQUQ5ODhFOUIwQzg1NjRDODc0NzgyOTg2NjQ1N0UxNQorOjEwQkQ4MDAwODVFOTg4QzgwRTRDRUY4OEVDQzY3NjIzMjNENTk4OEVCQgorOjEwQkQ5MDAwOEFFQ0M1RUY3NzQ2NkEzMUJEMEJGMDJEMDlGMDJFODQ5MQorOjEwQkRBMDAwQTkzN0YyN0JGQzlFMUQzOThBNjk0RUU0M0RGQzlFMUIzRgorOjEwQkRCMDAwQTlDNzM0MkZGMjI3RkM5RTFGMzk4OUU5OThDODY5NEMxRQorOjEwQkRDMDAwRUY4RTg0MzEyRDg4NUNDMjc0NkNFNDAyQTZFMzIyQ0QzMAorOjEwQkREMDAwRDg2RTdDQTQwOUQzQzJDODk3Rjg3RDQyMjQ4MkE5QzIzOAorOjEwQkRFMDAwRUY0ODk2REMxMDU2RjBBRjA3RkM3RkE2RUJEQzZEOTRCNQorOjEwQkRGMDAwMkYxMUJGRTE2QjlBMTIxQkM1ODMxMUQxRkFGQTk0NzIwRAorOjEwQkUwMDAwM0JFNDkzMzJDNUFCMDQ4QURGODk5NDE3MDIzRjlDNTgwOAorOjEwQkUxMDAwMjYwNEVGQ0VBMEY4OTExQzNFMEM3OTM5Q0JFNDM2RDE0NAorOjEwQkUyMDAwRkMwM0E0NDkwNkZDMjVBNERFRUUxQjQwQzg4MTExRTdGMworOjEwQkUzMDAwQkI4NjI5QkVCRTlCMTJFQTQ2OTExQjdFOTBERkNBMzBBQworOjEwQkU0MDAwQTc5RUMwNkYxQkE0MzBGRDNFMzFGOTYwOEFERjA2RUQ2RQorOjEwQkU1MDAwMjk2RDY0MDI3QUQzRjEwMUJGMjkzQTAyNUY3RTQwMjI0NAorOjEwQkU2MDAwMDEwNzlERUE3MUU4NjEwNEQ2MEI5OTY4N0U2NjIxRjFBRAorOjEwQkU3MDAwNjZEMkZBMTUyMzRDMzM4Mjc0OUM4QTRDNUY5MThGQTY0QworOjEwQkU4MDAwM0ZDRUYwQ0Q4MEY0Rjc0MDNDNzRGRTg3Nzg3QTlDMTg2MgorOjEwQkU5MDAwMzBGRDMyREQ4NUU5Q0M0NzdBMzM3QUNBQTM0MEVDRDQ1MQorOjEwQkVBMDAwMzYxQzFFNDg2NUVEODhBRDI5MURENkQ3REU3NjEyQTE1OQorOjEwQkVCMDAwRUQ4NjQ2RUJCRjRDN0MxRkMyRjc0MDBFRTk1MzY2OEIwNAorOjEwQkVDMDAwRDZBM0RGNEY0MkJEMThERkZGMUNFQjdCQUQ4MTMyMDJGMgorOjEwQkVEMDAwMEFGRjQwMDc2MzcwMUJDODI3RTI3NjRFODY3OTk5REQxQQorOjEwQkVFMDAwQ0UyOUY2RjhGMzdBNzI4NUFCQkZENDRCM0RDRjIwQ0U4NgorOjEwQkVGMDAwRUY0OTgxQ0NBODY2RkMyNTZEQ0EwMEVDMUZFNTYxQzA0NgorOjEwQkYwMDAwNkFDMUZFNDUwRTdGQTVERDY3MDA0RkRBRUUzRDhCQUZCRgorOjEwQkYxMDAwOTFDOTUzNzc1Nzg0OEJDREQ1MkVCOEQwNzZENzExMkVCMworOjEwQkYyMDAwMTI2RDY3NkY3RkJCRjg2OTI1ODMzM0YxQkE3MTFFRkMxMAorOjEwQkYzMDAwN0JBOTg5MDQwNEJBOEVBNjZERjZFMEQ2MENDMDYxMzdFMQorOjEwQkY0MDAwRjJDRjIyMTc2N0EwQzkxNDE4NTRBRTE3MjVDMjEyMDhFMQorOjEwQkY1MDAwMzlCQzNGMjE2NEEwRjU3M0I2RDlCNzgyMUVEMDk4MTNCRgorOjEwQkY2MDAwNzhERTA3NzBERTJBOTM2REI0Q0FDQUZEM0YzQUYxNzNEQQorOjEwQkY3MDAwOUFDRkQ5MjIxMzEzQ0QyRjQ4Nzg2RTE4QTE3MEJCNTVENAorOjEwQkY4MDAwMTBEOEY4MDFFRjgxNUVCNDdGM0Y1MTdFQkMwMkY0M0ZEMAorOjEwQkY5MDAwOUZCMEZFMUIwNTQ2NDc4MTZENEU4NEVCODVCQ0FBOEE4NworOjEwQkZBMDAwOTEzNDBERUY1QjVDNDgyODFGM0Y0RkMxREE4OUUyRjdGRgorOjEwQkZCMDAwMDIyQjkxMjBBNTFDREM4OEYwMDlDODY3QzM4QTdDNDE0QworOjEwQkZDMDAwN0E5NkEyNzlCMTc1N0UzRUU0MTVGQUE3RUI1RTEwOTRERAorOjEwQkZEMDAwQTM3OUZBNzdFMTBFNkQ1RTA1MkZEQ0Y3MjY4QjFDREM2QQorOjEwQkZFMDAwOEE3OEQ1ODVDMTQ3ODE5N0I3MEI4MzFGODc1NzlFNDVCMAorOjEwQkZGMDAwMEUxODkyMTE1RTQxRTAwMzRFQzE4RDcwMjhCMkM4MjEyNworOjEwQzAwMDAwOTFGNjUzNDRFMTA4MjQ1OEI0RUZBOTU0ODBEM0MyMUREQgorOjEwQzAxMDAwMTZENzU5RDVCODhCQUIxMzM1RjlEMkRBNEVBRUIzMkE1MQorOjEwQzAyMDAwMzlEQTdDRjQ5NzBFQTBEMzI1NjkwNkQ3NTlDQURGMUFFRQorOjEwQzAzMDAwNTY3ODkzQ0VEMjJEQkJCMkEyMDA1MzA1M0YxNjU3Njc1OAorOjEwQzA0MDAwQjg2QzlBN0VCNEY5RTY0QUExODBFMUI3REIzOTZENDA1RAorOjEwQzA1MDAwN0MzQzVCOTI2Njc0OURBNUE0N0E2OTA3OTNCNzk3NTY1QQorOjEwQzA2MDAwOTg1RDMwNEVDMzBBOTc4QjhEOUI4NkE5MDJBRjQ1Q0I1NgorOjEwQzA3MDAwQUQ1ODVGOTk1RkJDN0VCRkVCRjkxMTUyNDNDRTk4ODFGQQorOjEwQzA4MDAwOUZEM0IyOUVGMUVCQzdBNTI3RTkzMzIzRDI0OTlEN0MwQworOjEwQzA5MDAwMURGMEM2NENGRjdFNkQ0MDNDQzJCQ0QyNkY2OUI1MTgyNgorOjEwQzBBMDAwMzBERDBFREY3NzZBQzZBM0VERENFNzU0RjIyNTNFREQxNgorOjEwQzBCMDAwNEFFNDlDMEEyRjk3NDIwNzQ4QTc2NkRDNjczRkVERDEwOAorOjEwQzBDMDAwNDlGQjZCOTQ2QzZCNDE4RjlBQzBGMUE3MTRFQTUxN0VDNworOjEwQzBEMDAwQjBEODFDMzZGQUU5QTdDQjM1NkMzRkUyOEQ3MzY5QzU0MQorOjEwQzBFMDAwOEUyRUMwRDc4QUNDOTU0NjYwNTY0NUQ1N0RGMzgwOUU2RQorOjEwQzBGMDAwMkVEN0FDNEEwNUY5QjI1MDZDRkVCRTJGNDZGQjFGMkI2MworOjEwQzEwMDAwNzQxQjk0OUJCNEYyMzJDOEU3NDlGQkQ1RDAxOUIxQjU4MgorOjEwQzExMDAwQUM5QkU2MUIwQzc0Mjg1QkVCN0U3RjJBMzBCOTUzQjJENAorOjEwQzEyMDAwRjNGODk4OTE3NEZFMjVCNTU3OEQzMDhGMDk4MkZGQTdEQgorOjEwQzEzMDAwNDI0QTc0RkQwMkFDOUZGNjUzQkNFMzk0MTFENjc3NDE5QQorOjEwQzE0MDAwMEVEQ0YyNzhDNjRERTBEOTZBOUVCNkI0NzMwOUFBRjkzRQorOjEwQzE1MDAwMDVBODIyNDlFOTc1NzYxNkE3NTdFMkJFRjdDRjk0M0VBNworOjEwQzE2MDAwMkZGRTQxMjY0RkQzNzk5MDFCQjQxNjJENEZFN0E1NzNCMAorOjEwQzE3MDAwODlDRjAxRjA5QTVEQjMxMEY5Q0Y0NUUwM0YyMDg3NDlBMAorOjEwQzE4MDAwRTUzMEMwOEZDQkM0NTAwMEVCQkI0Q0RFNzMwQzU2QzEwNgorOjEwQzE5MDAwRUZBMDYwRTRGMEExQUEyQ0U1MDcyNjFDMEFFMUQ2MDk2RAorOjEwQzFBMDAwRjg5NUE5QThBMjVFMUMwOERGQTUwMEU3NEJDMkQ3Qzg3NgorOjEwQzFCMDAwNEY4MjAyRjJCMzIyRjYzRDQwQ0NFNUI4OEVCNThDMUYxQgorOjEwQzFDMDAwMDVFODFGQzgzRjVDQTlFNTRGRjMzNzZBRjNGM0M4OTQ0RAorOjEwQzFEMDAwNTQ4OUYyOTc3OUNGQ0FCNDQ3Q0FERkQ0RkM4RkMyRUYzMworOjEwQzFFMDAwNjU4MUM5RERGOUE0QUNDMjQ1RTdCRkQ5NDhGNzg5Q0U1RQorOjEwQzFGMDAwN0ZCNjhCNDg1REU4RkExNkJGQjE3OUQ4MkM5QTdGNUI4MQorOjEwQzIwMDAwNjA3MkVDRDIwQTNBRkQ1QjY4M0YxREQ4RkE4Qjk3MDc0MworOjEwQzIxMDAwOERERUZFQURENzc3QTY2NkYwRjQ5MTA0RkI2M0YyQjEzNAorOjEwQzIyMDAwNTg5MUJGQzQyRDBENDM2RTQ5OTVEQ0Y4RUJFRjUyMjNCNgorOjEwQzIzMDAwN0EyRDBFQTg0N0JGQUJGOEYzOUNCNURBRjVCNUI1N0VGRAorOjEwQzI0MDAwRkQ3QTA5NzkwNkYxQUQ3OEM3NjQwMjc4QTZBQzQ3RDlDMgorOjEwQzI1MDAwMkY2NTNERjIwRUMxMUI4QzQxMDc2MThFQUYwQTVGNkJFQgorOjEwQzI2MDAwRTJGMDUzRjQ4RUNGNzVGOTJGNzVGOUFGNzU3OTA1QkZFQworOjEwQzI3MDAwNjU0RURGMTRFRjNGMTc4NjAyM0QzNzhENjE3ODEyMzYyOQorOjEwQzI4MDAwQjJGMzBDQUI2NzhDRDZGQkYyNjZGNTRDOUM1RTY4QkRENgorOjEwQzI5MDAwQUY2RjU2Q0YxMkVENEYzMkE0QjRBRUI3Rjg4RDU3NUVFNAorOjEwQzJBMDAwMEY1MEZDMkVGRUNENzMwRTQyRjFGMUEyNTQ5OUVBQTE3QgorOjEwQzJCMDAwREYxNzZENUJFMzAwMzg1RDkwMDIwRUMwOUI4QjQxQjFEMAorOjEwQzJDMDAwMjAxNkJDNDYxODA0NDVERkIwMDk3NERGNEIxNEZDMUY3MAorOjEwQzJEMDAwNTUzRTExRTRGQkY1NkRCMkVCNjlCQTJGQTUzQjRDMjEzRAorOjEwQzJFMDAwMTNEREVGOTI5QTA1ODU2NDIwRTY0RkIxRkM5MzU3MDE2OAorOjEwQzJGMDAwM0Y0QTZCRTVEM0VBN0QyRERFRkU1Q0FBREI4RUZCRDBFOAorOjEwQzMwMDAwQzUwMDNBMzAwOTc1MjEzNDJEQTlGQTY0MENFOEQxQTU4RAorOjEwQzMxMDAwQTQwOUYxNTlERjBFQzY4N0EzMURFNUQ3QjM4Q0NFRDY4RAorOjEwQzMyMDAwRTVDQUI5QjE5NDdEMjJBNTM1M0ZCQTBBRTdDNjUyMjJDMworOjEwQzMzMDAwOUQ1NkUzNTExMUUwMzJENUYzRkExOUVDQzk3MDVFMjAzNQorOjEwQzM0MDAwQzNDOTcwRTAyQjBBMUM0ODMwMDVGOUYyQUE5NzdGM0E1RQorOjEwQzM1MDAwRjAxNDlENDc0M0Q1MUYxQzgyMEEzRTU0NDM0MkI4MzQxMworOjEwQzM2MDAwNTdDRkY5NUJEMjRERTRDMjE1OEE5RkU0MTY3NUJCMjAwNgorOjEwQzM3MDAwQjY3M0Q3RDIwOTc0QTREOTNBOTYyRTkyNDM4RTkxMTRFQgorOjEwQzM4MDAwOUU4QkI2QzgxRThBOTk2NEQxMkJCRjdDRTkwNTRBNzc3QgorOjEwQzM5MDAwRTQ2MzkzQTczNzg1RjdDMjU3OEU5Q0I4ODNFNjE3RUUwMAorOjEwQzNBMDAwOTI5MzBCRDkzMjZDNDI2QTc0M0Y0QUU5NUZCMENCMjg1MgorOjEwQzNCMDAwRjAyRjdFRjU4OEQxM0Q4MDdEN0ZBMjQzNzQxRjE2RUU1RAorOjEwQzNDMDAwM0E2MDI0MDM1QUMzMkRCN0ZBODAzMTZDOEJCMTFGRDU2NAorOjEwQzNEMDAwQTdDNjgwM0VCM0VBRTVCRjFCNjFCRjJGRUUxNzQ4Qzc3MworOjEwQzNFMDAwOENENkVEOEJCNjFDNDFGRDA1RTA4NEZCQzdGN0E3NjUzNQorOjEwQzNGMDAwQkY1QUVENTM2OEUyREUyMTU4Q0YwNUZDM0FERTNFRDk0NAorOjEwQzQwMDAwNDE1NjBGNDUzQ0ZFRjU1RTNBN0VEMTlGNEMxRTU4N0Y0QgorOjEwQzQxMDAwRDFBRjk3M0E2MDFERTdBNTMyODZDRjlCRDdBNDdBRTlDMgorOjEwQzQyMDAwQjg0NTcyMjBENTg1MjlGQjVFRjRFMkEzODg2N0YzOEZCNworOjEwQzQzMDAwM0Y4QTdBMTlDNThGNEUwNjk0MTk4MTRFQjBCRTg3Mzc1MAorOjEwQzQ0MDAwREQ4M0VCOUI0N0ZDODg2RjQ1OUI0NTVGMTBGODgwNDQ3QworOjEwQzQ1MDAwMEE3NkM1QTA4N0RGNzA3QTM4QkY5NTcyNEFCQUJFRjNGNAorOjEwQzQ2MDAwQzAxRjQxQ0Y3RDRGRTRGQ0YxMTFENDIzMUZFNTZCQTUyNAorOjEwQzQ3MDAwOUEwQ0U2M0YzN0IzN0RBQTMwMTgxNEJCOUM1OTgzQTdBQQorOjEwQzQ4MDAwNTU0RjIyMUZCREQ0Q0REQkQxRDUxRkUxQTBGMDRERTQyNworOjEwQzQ5MDAwQTdFMkYxRkM4RTZDN0YxOEZGQzU3NjE0RUY3MkUxM0JDQQorOjEwQzRBMDAwRDRBRjk3QkQ5NjgxOUE3NjlDNUZCMkYxOTdGMUYxRTk4RQorOjEwQzRCMDAwQkNBREEwN0Y5QzRGNjU3MjQyQkZCRTNGMTkxNEZFNDhDMQorOjEwQzRDMDAwRTVBQjBBQkY1NDc0Q0RFOEJDRUEyOTQ2RDcwQTlEMDdGQworOjEwQzREMDAwMjcxNzQwRjk2NzFGMzBGQTgxNzYyMDdGRThCQzQyMUQ5QworOjEwQzRFMDAwQjFGQ0MwMzQwMUY5ODA4OTg0NjJEMTczOTVDQ0U5NTlEQgorOjEwQzRGMDAwNUI0RTM5MzRFQTZGNzRERTkyRTA1NEUzMDlFREJGMDMxQQorOjEwQzUwMDAwQzIxRkY1OTI3OUNGRDI3NjJBN0RCQTE0QzZDMzdBQzZGNQorOjEwQzUxMDAwRThGNzhDMjhERENFRTdGNEZGMkJBMEZGODQyOEZEOTNGRAorOjEwQzUyMDAwNEQyOUVEM0E5RjJEOTI4MzJGQkQwMEY0NEFFOTMzRTA2NworOjEwQzUzMDAwMDY3QTk1N0RCMEVFNEY3NzFFM0E3MTNGQzVFQjRGQUI1MworOjEwQzU0MDAwMTUzQUQ1RjI0RDNEOUQxNkVEN0U5NDAwN0VFQUU5RjQ1NAorOjEwQzU1MDAwRDNBRTY1MjQyNjlERDJFRjMxRTlCNDZCRjg3Rjg1NkZBOQorOjEwQzU2MDAwMkE3MDNCQUU4MzFCRTU4M0JGRDhFQjhFMEYzRjNEMUY4OAorOjEwQzU3MDAwMkMzNUI4NjNGMjQxRkFGMzAxMTlENjFBRUYxNDdDNTM0MworOjEwQzU4MDAwRjBBQ0Y4QkYxNjc3MDc3RUQzODI4RjBBQkVCNUUwQTM2MgorOjEwQzU5MDAwODI2RkZBNzU2QUUxQTYyRkRGMDRGQzQ2QTUxRkM4MkIzRgorOjEwQzVBMDAwNDlDMDRFRjdCOTY5OUY4OEU3QzQ0Njc3OTNBMzAzMUQzNgorOjEwQzVCMDAwNzc4RDg1M0MwNDdBNzZBMzhCRTcxMzU5QkUyOUM1NTgzRAorOjEwQzVDMDAwMDE3QzQxRjlERTY0MjEzMzAwM0YxQjdENEQ4RTQ0OTU5MworOjEwQzVEMDAwRkU3Q0FBNEU3NEI4Njk3OTM4NDgwQTYyRTlENTk0RTNCQQorOjEwQzVFMDAwRTJGODYxMTJBRkJDMUNFMTk3MkZEQUQyOTcwRjgxNzM4QQorOjEwQzVGMDAwOTVFODAxREQ2RDZFRjlCRDBFMzA1OTM0RDZGNTlDMzRFOQorOjEwQzYwMDAwODM3RTdGRjg2RDExNkQxQThENTZDNzQwOTgxNzNEQjcyMAorOjEwQzYxMDAwNEI5RDI4N0NFN0YwN0RCRTQwMDJDRjhGQTJFQjlBNTM2MgorOjEwQzYyMDAwQzdGNEUyQjlFQkI0RjA5ODY3NUI2NjA0M0U0M0Y1Q0YxQworOjEwQzYzMDAwMjgxRUE4RjA0NUYxMTMxNDZERDI5NjE3OTM3NUI4NUZCNAorOjEwQzY0MDAwQzUzQUZDRjFGM0YzNEUyNzkxRTNDRjIwMzI4ODlGMzdCMAorOjEwQzY1MDAwMENEMERGMTJDRUE3RjJDNUZFOTM2NjUwQjgzNzFFMTU3OAorOjEwQzY2MDAwODk4OUU2OUJFQjQ0NTIwMUVCREMyOTA0MDlEMDcxMjA1NworOjEwQzY3MDAwMDVGMUIwODRGMjA3QTIzQTE3MzYwMDlFMTlFM0QzNkY5MgorOjEwQzY4MDAwQzM2QjdGMURGNjM4QURCMkU4RjUzRjBGRkMzOTREMUI4QgorOjEwQzY5MDAwNUVGRkY4OTYzNzIxRkZDNjQ3RTk3RjI2QURFQkU3RUU1MAorOjEwQzZBMDAwRkZFMjQxRTBFRjhERkI0RDA0RUQyNEZCN0Y5N0ZFMzg2OAorOjEwQzZCMDAwRTRGNzlBM0M2OEU3NTg2OUYyQTI3RUJDREYxRUVDMERGNQorOjEwQzZDMDAwRTVERDk4N0Q2OUQ1QkVCRjBGMENBM0JDNTk4REZCOTRFOQorOjEwQzZEMDAwMjdCMjczNDQ3M0REM0ZGRTVCNDg4Njk0QUUwQUU0RThGQworOjEwQzZFMDAwRkUwNEQ0QUY0QkY3NUE4MjcwRTg2Q0RDRjdGNzYxN0UzQQorOjEwQzZGMDAwREI3N0I3OUUxMjIzRjEyM0ZFRDlDOThDREQ4MEFGODk4OQorOjEwQzcwMDAwQ0M5RTU2RkFFNjg4NUY5NkQzRjExN0Q3MUMzMENFQTE5RgorOjEwQzcxMDAwRTVCOUJGRkQ2QTIwRjA5NUM2REQ0QzNGQjgyMjg3NUZDMgorOjEwQzcyMDAwMjQxRTQyMjY4OUNGOTVDQjc0QkZBRTgwQUVENjk5RjIzNworOjEwQzczMDAwMjVGMTQ0NzZDMDE2MEIyRTBDMEU4RDE0MEVCMDJFMEE2OQorOjEwQzc0MDAwOTcyMkUwODdGMUUwMzFFRkRGMTYxRTU3MUY4NEYxMTdDMworOjEwQzc1MDAwRDUwRDI3NjI4NjFBMkU4Mjk3N0RCNzA3Q0QwMkFFOUYzMAorOjEwQzc2MDAwN0RERkZGRjc4MUMwNzczRkFEMkU0N0Y5RERENkJBRDcyMQorOjEwQzc3MDAwQzBCQTUzRkU1RjVBQjcxMDZBQ0ZCQUFCRkU2REQ3Q0RDMQorOjEwQzc4MDAwRjBCRjlGQzhFNDkxOUUwRTVBRTNGOTFCREZDN0ZDQUZEMAorOjEwQzc5MDAwRUQxRTlDNkYzQkU5RkZGMEJGRURGQUJGRTVCRUVGMTY2MworOjEwQzdBMDAwRDAxRkQ3RDZCRTlGRjlCNzVENzc1QkZCRkUzNkRGNzcyQworOjEwQzdCMDAwQkIwQkVDQkQ4REZCQkU0QTI3QUFGNUI3QjU2RTgzRjQ2MworOjEwQzdDMDAwRUZDQURGNkVCRTZFNDVFRkE5Mzc5NEI5ODZEMEY5N0QwQQorOjEwQzdEMDAwNEMyQUVGQzlBMEU5MUZCREQ3OTJFMTM4NEE2OUMwMTdCQQorOjEwQzdFMDAwRUJEQzkwMjlCMTczODMwOUVDNEM1MEYxMUU0MUIxMTc3OQorOjEwQzdGMDAwRDU2QkZDQjg1RDhCNTBDRjk4RThGRDMxRUEwNzQ0MkEzMQorOjEwQzgwMDAwQUJDRkE2RjVFQjczRTY3ODlFQzYxQTk5MjdGRDkwOUZFRAorOjEwQzgxMDAwNzYyN0NGNkJDRjUzMTM3M0M2MUYwNUJERUVERDcyM0E3QgorOjEwQzgyMDAwM0Y4ODVCRTgyNkI5QThBNjQ0MjY3OTQ1RDQwMzY5OEFERgorOjEwQzgzMDAwRkFERjg3RTk2M0IwREVBNDJDRUQ3OUUyM0VERDc5RTAzMgorOjEwQzg0MDAwREUxOURBRjI3Qjc4RkZEM0M5MzMyOTYwNzc5QjNFOTdGNAorOjEwQzg1MDAwRDlEREVFMjU2NTZCNUNBQTdEQkE0N0Q3OEY0MzIyREMxNAorOjEwQzg2MDAwNEVGMkVERTAzN0I3MDU3RTRCMTAxRTI0NUJGNDZDMjNDRgorOjEwQzg3MDAwRUQ4MDFGNjFGMEFFOUYzNjI4MDg3NjE4MjI3OTE4RkNFQgorOjEwQzg4MDAwQTYyRkY2QTAxRDk0OUYzMzY1REU1RUI2QURBRDA3QkE0OAorOjEwQzg5MDAwOTU4OUY2N0NBOTlDMTNEQjgyMzNFMUU3NEZFQ0FGNDcyNworOjEwQzhBMDAwMTRFRUIyNTdDNEYzQTdBQTVGODQ4QkIyMUZERjc0MUZDNAorOjEwQzhCMDAwOTRGREZCQjZGQjMxMENGNjIzODZGRjZDODFEOTdDMEYwRgorOjEwQzhDMDAwRjgyRkNDN0QwNDNDQjc0RjVBMjc2MjFDOENCOUJGODAyRgorOjEwQzhEMDAwNzBGNDY1QzlFOERGRjlDNEUwMUIwNjhBNzNFMUUwRTFBMgorOjEwQzhFMDAwMjU4RkIxNkUzRDAwOUYwNTFDOEVGMzQ4MTlFQTlERTQyQgorOjEwQzhGMDAwQzZENzVGOEYwMkJGMTE0Mjg2OTY3QjA5OTk0MENGMjEzMAorOjEwQzkwMDAwRjM0NjA5MjEyQjVERjc3Qzg5MDQ5Qzk5NjBENzE0QzhGNAorOjEwQzkxMDAwNjlCNTVEMzNBOENEQzNDRjVEQTlEMTdFREFBQTFGOEZEQgorOjEwQzkyMDAwM0Y3Q0Q3RTlERjI4M0YzQUREOEI5RTU3MjA5NTcwNzgxMgorOjEwQzkzMDAwNDk3RDRFN0NBODhFQzFCMTc0OTExMEVDODE3ODE0OTIxRgorOjEwQzk0MDAwN0QyQUJGQ0VDNzFDQUZGRkY2QzQ2MEU0NzNEOTNGMTk4MAorOjEwQzk1MDAwRTBDNEYzQUJCNzFGRUFGQkE1NUNERjZGMEVCODlENjBDOAorOjEwQzk2MDAwQUY2OUFFRUJFOTA0N0I0Q0YzRDE1Qzg3OUEyRjJBRTlERgorOjEwQzk3MDAwNzE3RThFN0M3Rjg1MTlEM0M2M0NBMTUyODRGMzE2NjlFMworOjEwQzk4MDAwOUE4ODcyMzhDRjQyODBFRkU4REJFRDkxMTRCQjRCMTlFNworOjEwQzk5MDAwRjMzM0QyMUY3MTE4RUMyM0ZCOTk0RjlCM0EzQkE4RjY1NworOjEwQzlBMDAwNkRERDg0OEJEMkMwRDZGQjAwM0ZBNzU1N0U5MjdGMTVFQworOjEwQzlCMDAwQkU3MDZFMDVCODFFQjc4NEM3Rjg2MkFDRjcwRjFDN0U1OAorOjEwQzlDMDAwODUwN0JGMzA4MjlENjA0QTVEODYwQzcwOTk5MjI3NkEwOAorOjEwQzlEMDAwRTI2RTBFNDlGQzNDMzU5ODBDODY3OTE1MUUxQ0VCMTg0RQorOjEwQzlFMDAwMDFGQjcyNTRGNDU4Mjg3QzRCRUJBRTFBRkQzMUZDNkQwMAorOjEwQzlGMDAwN0E3ODQyRkY2MDE3M0UyMzdCRTYwMTNDQ0ZGQ0Q4NDJBOQorOjEwQ0EwMDAwMDI5NDFFREVFMUZFMUY1QUU0MDVGRTQ1QkJGMjgyN0Q2NAorOjEwQ0ExMDAwRUMwMzg5RjkxNUZBQ0FDQzJFM0VCNTMwNUI0RUExRTM4MgorOjEwQ0EyMDAwRjZBRjcxMEQwMjExRDM5OUQ3RUYyQkJCQjFCQzBCNkZEMQorOjEwQ0EzMDAwQTdENEVCQkM4OEQ1M0I2NTc0OTVDNDVBRkYwNDIzNUIyRgorOjEwQ0E0MDAwRkY3Q0UyRjk3RTk2RjBFRkI3NkZEOTNGQjE4NzcyNDA3NQorOjEwQ0E1MDAwQkVFNzA5Qzg0NzVBRTMzNTQxRkE2ODJFMTA4MjIwN0ZBNQorOjEwQ0E2MDAwRTExQzhCRjk0MjAxRTVGRjNCMDY1NjFFOThDMkU0QTU4NgorOjEwQ0E3MDAwODJGNzdBMzgwQjMyODNCMzMyN0U4NkNDRjBEOTI4MzNGMgorOjEwQ0E4MDAwRjgyODcwNTZFMEFCOUZBRjUyOUZGMkFCRDE2QUZCQ0E1OQorOjEwQ0E5MDAwQTREQTQxQkYwNkZEQTRBNDRFNzA4MUU5QUY0NDBBMUI4RAorOjEwQ0FBMDAwODEwRTRCNkJEN0NCRTAyRkI4Q0ZDREZBMjU5MjZGQTA3QworOjEwQ0FCMDAwREE1RkRCNTc5NjcwM0U4NzMyNDdBMkZFNzg2RDFERDM1MgorOjEwQ0FDMDAwOEZCRDczQUYzQTQwMEY3QUM3RTBGOUUzNDhBMEM3Nzc0QworOjEwQ0FEMDAwNDU4QzI3ODgwN0M3M0ZBRkQ4MzEyRDRGNTJGNzlCODEzMAorOjEwQ0FFMDAwRjM5Q0JBMjg1QjA2NzNEMEY3MTYxRDkwM0JBQUYwQTlGOQorOjEwQ0FGMDAwQUZEQzAxQ0I5NUVGOUQxN0I5MzNFMTNCMUQwRkU3MTE3QgorOjEwQ0IwMDAwRjg0RjEzRDk0NkJCRTg1RjVEOUY5MzQwQ0JCRjU3OTY2NAorOjEwQ0IxMDAwQzhGMEIwQThGQTgwMTFGMzE5NTg1RjE5NEYxOTQ3NEZBMAorOjEwQ0IyMDAwNEZEMzBBMTMzNEY5MzlCOUUxQUUwMDk3NDI1MzY4OTlFQgorOjEwQ0IzMDAwMjcwNjlFMUU5NjE1M0ZDOTM3OTQxMzVFOEFCNzAzRkZEQQorOjEwQ0I0MDAwN0Y5MDEzNTdDNzc4NjNDMDZEODNEQzRBM0U3NDhDMjU5MQorOjEwQ0I1MDAwMUY5Njk0QkIzQjAyRkM5N0VDRUJEOTExODg2M0M5REJCMQorOjEwQ0I2MDAwRjlBOUIxRTRDMzg3MkI5ODNGRjAyM0NBQ0YyMDZEOUM2RAorOjEwQ0I3MDAwNDZFNUMzRUQyQUY5MzBDRDgyRjhBMTZGRjc0M0I5OURBMAorOjEwQ0I4MDAwRjI0MUQ5QUZGRjY1M0VGMzIxQzg4NzE4NzQ1RDI5NkI2OAorOjEwQ0I5MDAwRTVDM0Y0QkE1OTI4MUZBNjRGMTM4OTVCNjU4RjdCNTJGMgorOjEwQ0JBMDAwRTY3RUFFQjhGMjIxM0JGNTNFQ0NDQjlFODQxODc4RjNGRQorOjEwQ0JCMDAwMjEzRjk3MDA1QzIxODU3MTQwNEVGQzk2RjM3REJEQkMwMgorOjEwQ0JDMDAwODhDN0NGQTcxODA1RUVBRjZFODM5RkZGNUY4MkIzQzIwMQorOjEwQ0JEMDAwQ0Y5N0QwRjMwQkU4ODFBREYxOTAyMEJGNUU3MjFGRTVENworOjEwQ0JFMDAwRTcwMkUwMjNFM0U3NEIxRUUwNzY0OTFEN0ZGNTAxN0Y3NgorOjEwQ0JGMDAwMURBMkU2QUZBQzdEODk5RkM5ODNEMkRBOEM5RkNFQTRGQgorOjEwQ0MwMDAwRTVGNzU3Q0ExRTMzQUQ3RjdGOTRERjBFNTNGM0RCREZBQQorOjEwQ0MxMDAwNzI3RTRCRTE5Q0VFOEFCMUJGMzM2NjI2MTBCNzk2NUZGOQorOjEwQ0MyMDAwRjUwMjNFNzU2NkQwRUZGQUJGMEE3OEZGOEU4ODdFQzRBMworOjEwQ0MzMDAwNEZCODFDM0YzNkU4Nzc0M0MwN0U5RTZDOTQxMDdGM0UxMQorOjEwQ0M0MDAwRTFGQ0VCQ0E4QUUwQjQzQzRBQzdCOTczOTkzRUJDNzhCMAorOjEwQ0M1MDAwQTc4ODcwMjhBOTYxN0E1RTQ5MkY2QkQwNERGMzYzMzJBMworOjEwQ0M2MDAwQkY0MDdGRTBDMjdEQ0MxRjQ4MDE1NTk4QUREQUM3ODUzMworOjEwQ0M3MDAwRUY4NDJCQkE0MEY5MTYwMUZEOTlGMzNDMEJEMThFNEY4RQorOjEwQ0M4MDAwMzYzMjNCQjE5OUZFNjE3MTFENUVCNDIzMkZFNkYwNUEzNgorOjEwQ0M5MDAwNTBCNzA1RURDRDBCODI1QTNCRjRFMjVFRTMyRUMyMzk2QworOjEwQ0NBMDAwNDBFMUJGMEI3N0U4Q0EzRDRGQTFCRjYyMzFEODlCNTUyOQorOjEwQ0NCMDAwRTcwRjkxRUIwRjBGOEJBMUZFQUY0MjZDRTcxRkQ5QjlDNQorOjEwQ0NDMDAwNEFCRkZGNEFCRDk2RjUxN0ZEOEJFQjNGNEVENzNGRTRCOQorOjEwQ0NEMDAwQkI1RjdGN0JENzJEMUIzOUJENjc5MjIxNDAxRjlGMThGQgorOjEwQ0NFMDAwQkM0OEVGODFERkQzRjVEMzcxRTZBRUVGREQ1MTFENjdCMAorOjEwQ0NGMDAwOTRDNEU5RjIxRDgzQkZBMjEzRDQyQjExQjBERUZDNEQwNgorOjEwQ0QwMDAwQkI4RUE0RDJGQ0NDNkEzMjA4Q0NGNEYzMzc2QUU1NjI1RAorOjEwQ0QxMDAwOEIxQ0FFNzFBMzlDOUQ1OUI2NEI5OEREMUZFMDREQ0E4QworOjEwQ0QyMDAwMDBDRkU2NjQ5QUZDRTA0RjNENkU2OTQyRkVBNUUwREQ2RgorOjEwQ0QzMDAwOUQ0Njg2Q0YyM0Y5Qjg2NzNBMzdFNUUxMzlBMjU2NzBBOAorOjEwQ0Q0MDAwMjE1RDg0MkNFQzVDNDFFMTZGQTFGOTQzMjNGRTNFODYxQQorOjEwQ0Q1MDAwQzMxQkVEMzFBNUI1NkM3RjRBRTk3RTAwNUQ4REE5RTM2QgorOjEwQ0Q2MDAwRjkxRDRDMEZGQjFFOTUzN0U4MEZBQjNCMjA0M0JCMjI1MAorOjEwQ0Q3MDAwNUEzRjA5Rjk0RDNGOEQ5RjBCRkM3M0Q5QTlBQTdEREI2MgorOjEwQ0Q4MDAwNzc4QUUxRUQzNkMxNDM2MkVDNUIxRkZBMjdFNkJFN0Q5MAorOjEwQ0Q5MDAwNDdGOEFBQzBFMzRFMjNEN0U3RjlGRTFEQjdENDE3MEUxNAorOjEwQ0RBMDAwNDYzRjk0RTBEOTBBOTVFQjEyRDE4RjcyQjZCMjI3RUVDNgorOjEwQ0RCMDAwRTM3ODhFQkY3QUJDMDZGRERFQURCMjI3NEQ4Njg5NDM4RgorOjEwQ0RDMDAwQkM2NTgxMDVFM0RDNzBEQzFFNENGRjUxRjMxM0ZEQjkzQgorOjEwQ0REMDAwQjk5NEQ0QTMxRTMzNDFGMEZGNTU1MkM1QjU0REU3RjFDOAorOjEwQ0RFMDAwMjc4QTlGNTY1NUVGQTdGMjRERUE5MTM0OTcwMUY4RTQ1MAorOjEwQ0RGMDAwNTIyNURFMTJFMjg3NTMzMTZFMDk3RjBFNzUxQkY2RDE4NAorOjEwQ0UwMDAwNENCQURFNkI2QjQ1MEZGODdGRUUzNUI4NEY4QzAyRkFFQgorOjEwQ0UxMDAwN0Q1QTI2ODA5N0Q3OEVDOTVFQTY3NzI2MjBERjlERjU5RQorOjEwQ0UyMDAwQ0UxOTE5NEMyMUIzMjg0QzYwQkY2N0ZEOTBGMUQ3MzM2MAorOjEwQ0UzMDAwRDAxOUZERjYyNzJBQjdCQ0UwQUIyN0Q1NDMyMTdFNzg3MQorOjEwQ0U0MDAwOUFFNzQwQkU5QkVFQ0IzRDQzOEVBRjAxM0ZEQ0Q0NUMwNgorOjEwQ0U1MDAwRDc4OTEzMDBERkE3NDQwMkYwM0RCRDM2MTdDRjI3NEIxQgorOjEwQ0U2MDAwMUYxMTEwQUY0RjUyMzg0MkZCN0JBNjY1OUMzODQxQzc1QgorOjEwQ0U3MDAwN0Q2MDZEMEFGQUQ1NjY3QThGRTQwMzlFQ0Q5OTY0QjcxQQorOjEwQ0U4MDAwODE3RjZEN0MxRjkxRjg1NTcwN0M4MEQ0QTM5RDYyNjY3NAorOjEwQ0U5MDAwRDkyM0Y3QzA3QzhCQTgxQzAwM0I2QjUxRERGMUZDOEVDNQorOjEwQ0VBMDAwOTBERjI0NzhEQ0I0RkZEMjgwREZEODkxNkU2MUZEQzZCQworOjEwQ0VCMDAwQUI0NkIwQjdDQ0EzRjU2MDdCNEEzN0IxN0FBNTU1ODJCMworOjEwQ0VDMDAwQzcwMkY4NThCNzFFRjlDRUJDMkE4MUI4QTAzRUQ1RjdFNAorOjEwQ0VEMDAwQ0NBQ0RGQTA5OUY2NUJCRjg5QjZBN0Y5RjlEMDFFRkFGMgorOjEwQ0VFMDAwQUQ0QTlDMEU3RUI0RDI2MzIyNkI5RjU1RkUxNkYwQTUxMAorOjEwQ0VGMDAwNzlCNDFEMkQyNkY1NTU4RjYwN0YwQjM2MDkyNDhERjZFQworOjEwQ0YwMDAwNTc5NDk1RjE5RjU5RDBERjMxRDkwM0U1MUYxREY4OTk0QQorOjEwQ0YxMDAwMTFFNkZEMjAxREFGMTNFRDdGOEUxOENFODdGQUU0NzE2OAorOjEwQ0YyMDAwQzFCNTBERUQ0RDJDNEVCNjkxRDMwMUY5QTAxM0EzMkYzMQorOjEwQ0YzMDAwODFFN0I5MUVBOEM4QzNGNzhEM0QxMDlGRTYyRDJGQUYxRQorOjEwQ0Y0MDAwODA3NTg1MDMyOTE5NzAwNDJBQURCRDZBMDRCREVFMkNENQorOjEwQ0Y1MDAwODVCMzlGRUE2RDY3NzgxQ0RCQTFDMDE5NjM1OEM1QTcyQworOjEwQ0Y2MDAwOUE4QzNEQjFGRERDREE2Q0E0RUY4Nzg5MEZGRERERkUwNAorOjEwQ0Y3MDAwNzIyNjg3NEZBREIxMDQwNUQwM0Y2NDE3Q0FDOTQzNkIxMQorOjEwQ0Y4MDAwNkU3RDFFRDY3RkU1MTUxOUZEQTM1N0JBODVEMTFFN0I5MAorOjEwQ0Y5MDAwN0U5MzRDMDI3NDhFQUIzNjg5QzgzN0NFRUY2NDc2MjAxMAorOjEwQ0ZBMDAwNzFCMzhDRjlGOThGMUEzMTdGNjhEM0Q0MzFDMDBGQ0ZBOAorOjEwQ0ZCMDAwNTNGODAzMUVFNjZFQ0UzNzQyN0UzRUU1RUJBNjE4RkMyNAorOjEwQ0ZDMDAwNjM5RUJCOThGMTBCMUQ3Rjk4QkY1MTRCRkZBREY4QzUxOQorOjEwQ0ZEMDAwQjIzMThDQkZFQkY4QzFFMkFFMTU2OEU3RDNGMzg5NTJFQQorOjEwQ0ZFMDAwNjI1M0Y4NDMyNkU0RUI0MzlEMTA3RjRCOEVDOTA0RjQ1MworOjEwQ0ZGMDAwQjkxMkM5RjVFMDQ2QzA5Qjk5MTZGMDE0NTNCQTA4MUQ0MgorOjEwRDAwMDAwMDFCRTc2MkQyOEI4MDNCNEZDN0IwRkVEMTkwQUYwM0I2NgorOjEwRDAxMDAwMDdGMDA2QkE1ODk3ODRGRUQ0NzlDMTU5MDg1NzI1OUU1RgorOjEwRDAyMDAwNzBGRTQ2MkQzRTJCRjE0QkY3Rjk0NUUyNTVDQjgxQTIyMAorOjEwRDAzMDAwMDRFMjU1RDVGQkU4ODcxNDJGRTk3ODBGRDUwQTQxOEIxOAorOjEwRDA0MDAwMDBGOTUzNkYzRDNBMDRGMzJFQzBDMzkyRTU1QzlFQUVFNworOjEwRDA1MDAwQjMyM0RFN0VGNDgzQUI2QjAwMkYxRjdDNDJDMEY5OTNCOQorOjEwRDA2MDAwODBCRjAyRTQ0QUM5NDZDMTBENzZDQ0Y5NEZCMEY2RjM1MQorOjEwRDA3MDAwNjk3QkMwOTc4RjdFQzZGMDg3RTJCMTFCRjBCQzY0RDM5QQorOjEwRDA4MDAwRkFCN0IwN0U5NUUwODZGRTNGREEzMjBCRTU2RjUxNDA4RAorOjEwRDA5MDAwMjQ1ODVFNzUwQUY1NjMyQTA3MzAwRUU4NTA0MDRDMDVBNworOjEwRDBBMDAwM0MyRjU5NkQ3MkMxM0UyQUY4QTJFMERGMjk5OUY5RURCMworOjEwRDBCMDAwODlEOTMzNzAyQTZEQjdDNUU4QzY3NUVCRjE0RTlDOTFERQorOjEwRDBDMDAwODFGODU1QkE1MzQ2RkMyODBEMzA3QzNBRjU4QTg4NzhBOQorOjEwRDBEMDAwNzg2OENEQkQ4ODNGNTdCNjA5NzFGMDJGRDdEODA5RjBEMQorOjEwRDBFMDAwMkZDOENBNUJGMEVGNjU4MUUzMUZDM0VCRjNDQjE4M0U5QgorOjEwRDBGMDAwRTY0MjM5RTBERjZCNUMzRjI1QzRBNkQ2M0IxNEZDNTMwNworOjEwRDEwMDAwRjBBOTJEQkM2QjI1OTdFMkUwMUJENThEQTdDM0JDOTY3QgorOjEwRDExMDAwQUVCMUUwQkM3MzJCRjY0QzVGOEU3NDIzQTM3RjNFQjc5OQorOjEwRDEyMDAwRTIwN0E5NDBBN0YzMjQxNjg3QTFDMDcxQjFDNEUyNzQzNQorOjEwRDEzMDAwNUFDREUzRDk3MjYzQTdGNkNDNDczNzhGMDM1MUI5OTgxQworOjEwRDE0MDAwMDk3MjExRTI0QTQyNzQ5Q0RGRURGQzI1QzZBRjVERkUxOAorOjEwRDE1MDAwRDUyOThDNEI1Q0Y4MjZERDc3NUFGRkNBNEUzQjA5QTFENgorOjEwRDE2MDAwM0UxRDQ0RkU1MjVDMjM2MjVDMjg5MTQyQzNBNkFBRUU5NworOjEwRDE3MDAwOEYyOEYxMTYwQjdGNjM0N0Y4MTZFRjM2MDUwQjY5RkIxNgorOjEwRDE4MDAwRTJEN0NGMEM0NDdGRjhDQUE2Qjc4MDdFMDJCRjEyOThDMAorOjEwRDE5MDAwNUQzRTEwMUUzODE1RTIyQTI1MTZGN0ExOTdCQjIzNENEOQorOjEwRDFBMDAwQ0M1RUQzQjAyNzYxMDZFODNGQzI4RTAzRTg0RjJBQUVCQgorOjEwRDFCMDAwQkU1NzM2QTlFQzkzMUU5MzhDRTNEMjdBRUM5RTBCREQxRQorOjEwRDFDMDAwNzdGMDIzQzJGQzI2MEY1MENGQUY5Q0Y1RjczMkEzOUIxQworOjEwRDFEMDAwRTI1QTE5RjVBMkUyMUQ1QkQwQUU1N0JBRTMyQUM2QkRFQQorOjEwRDFFMDAwRTZGRUU2MTUwN0MwQTFCNDU2RDRDNjQzRUQxMDQzMjZBQgorOjEwRDFGMDAwOENENzEyNEY5OTE4N0ZEMkM0MjU5NUQ0QjA3QjE5MjVBRQorOjEwRDIwMDAwRDUzQ0VFNDcxNzE3QjNGMDM3RkI1RTBGNTBEMDJDN0NBMAorOjEwRDIxMDAwNzVCQjAzRThFODUyRkQzNjA3QzA5M0Y2ODdGMTQ0OTNFNworOjEwRDIyMDAwQjJFMkM0MUJCNTE1Njc1NEZENTRDQzM4QTM0QkYwMEZDNAorOjEwRDIzMDAwOEEyMDBGOUFCNEYxOTk2NDA3RTM1Mzc0RDc4N0Y5NjI4RgorOjEwRDI0MDAwRDgzMzE1N0Q2NUUxMkI5RkJGMDg3MUFGMERCQjNGN0RDNgorOjEwRDI1MDAwMTFFNkJERTg5RkQ3NUU4NEI4MERCMkRGRTIwMkZEQTEwMgorOjEwRDI2MDAwRjQ1NzFGNjJGQ0EwRDI2RUI5ODk5RjdGNUVERThFNzE3QgorOjEwRDI3MDAwOTc1NzNFMzZBMUZFNzc2NURGRjk3NEQwMEZBRUVDRkExMgorOjEwRDI4MDAwMjIxNUUyMjk5N0VEQ0I0N0ZCQzNCMkQ3NzIzQjkyMTgyOAorOjEwRDI5MDAwRTc1QjI1MDVCQzBDQjYyM0VFNTNCRjBGODc2QUM0OTAyRAorOjEwRDJBMDAwOERDRUYzRjI0OTEzRDI3NzRCQkM1OEY1NjIxNjdGRTc2NworOjEwRDJCMDAwRTY3MTYyM0I2M0M3RDUyQUYxNEQyNTM1NTMyN0REMDk1OQorOjEwRDJDMDAwRkNBRDg2QzlGMTk2NzhBN0I2RTJDMzNFQTBGQjc5N0I5OAorOjEwRDJEMDAwM0JGNjZEMjc4RkZGRDNFRERCNjVGODA3REQ5RkU3NEM0RAorOjEwRDJFMDAwREFGOEIwQ0Y2QjFFRkVDNTBCNTA1NjEzRkIzRTk5NDJDOQorOjEwRDJGMDAwQzc2REMxNEI4OURCOUQ2M0YyMDY0RDQwMzdCQkZGMEIwOQorOjEwRDMwMDAwRTNGMDYwQkYwQUREMjBFNzNGNEYwN0JCRTUwNUI5MDk0MQorOjEwRDMxMDAwRUQ4MTRERkI0QzJFODhEQjJBREVGNzExRDJDNzk1RDc2NQorOjEwRDMyMDAwOEU2MzVDMkNFMUYxQjM1NzQ4Q0IwRjhCNzdFNDM2ODlFMQorOjEwRDMzMDAwRDIyQTNCOEIyQkUzNzA4N0I4MzNCNzAzQkZGM0Y4MzJBNQorOjEwRDM0MDAwODZCNzRBREM1OUJDNzhCMzBGNEQzREY4QkQwQjE2MTdCNAorOjEwRDM1MDAwQjdEODVENkYwNEY4QUJFM0QwODQyQ0Q4QTc1MzlBRjgwNAorOjEwRDM2MDAwM0Q2NURERkFGRTVDMDA4N0UxRUFCOEM5NzhGMTdDNUNENgorOjEwRDM3MDAwMUY2RkQ5MjdDNjg3QUY2Q0UxNzE5NDJERjE5MTg0NzQyQQorOjEwRDM4MDAwQ0Q4NDc4MUYyNkVGNEE4M0MyNDcyNDA2M0QyQTcxOTMzNQorOjEwRDM5MDAwRjU3QTdBMENCNjJGNUVCMkVERjk3RTNCNzgxQzMyMzEwRAorOjEwRDNBMDAwRkI5MzAyOTc4NjFCQjFGOUYxQTc5Q0JFRTlCOUU0OTIwMQorOjEwRDNCMDAwNDk3NTJGRTUyMTdFMkU1MUUyQzg5NEY5NTY1NDMzQjlCMAorOjEwRDNDMDAwREJCMDgzRTk4NTdBN0EyRUUxRjY3NkZEMzg1RkYwNzE3RAorOjEwRDNEMDAwNEE2QTBGMEMwNEJFRDM3MDcwMEZDNzM3ODZDRjI1M0I0NworOjEwRDNFMDAwNEYxOTAzOUMzRjA3RDVGQzE5RkE4QkMxNEY0NDMzRUIwRgorOjEwRDNGMDAwOEY5RTYzNjNGNjU3QkFGMzZBQ0NGRTJFNDlERTdCNjFEQgorOjEwRDQwMDAwRkU5N0VBOTk5RTcxQTk1QTJDMDhDNkU4RkYzMjk3M0YwOQorOjEwRDQxMDAwMkRFQkI2MUJGMTVDMjUzQUFDQzg3Rjk2RDlCMzRFM0FEQQorOjEwRDQyMDAwOTMyMTM1NjJGQ0MyQUE3MjFFRUZGMDQzNEYxQUMwNzlGNQorOjEwRDQzMDAwOTU3RDFDODFGOUFDMDFGOEE4Q0U5OUIyQ0I0RjQwQ0ZCNQorOjEwRDQ0MDAwOTFEMzdDNDNFMEZDQTRDQzU3MjkzNzI2MUI0ODUwQkQyMAorOjEwRDQ1MDAwRkY1MjAwRUY0NzRFRUNGMTc3MDlFNDRCRkQwQUVEQkRCQQorOjEwRDQ2MDAwOEU3QUM5NzUyNDg5RjY1NzlGMjc3ODQwOUY2RDhENjdGRQorOjEwRDQ3MDAwREFGRTI3N0I0NThEM0QwQzZDQ0ZCMEFFNjY4RjAxRjc5MQorOjEwRDQ4MDAwRDM2RTA4Qjk2ODE1NjJCN0Q0QTdFMTQxQ0U0RERDNTIxRQorOjEwRDQ5MDAwMkE4Njc0QTM1RkZCRTkxNTNCQkFDMTNEMkIwN0YxMDg0RgorOjEwRDRBMDAwNTA2RUY3QjREQzZGQzFGRTlDNDQxNzY3MUQyMDFGQzA4RgorOjEwRDRCMDAwN0Q0ODFCNjcyNjRFRTIzQTAwNzYwOTZCMUZEMjA3RkNCNworOjEwRDRDMDAwRDYyRTYyRjVDMEZCMEExQkY4QkRDNzc1NzYzRkNBREJENgorOjEwRDREMDAwQjg3NEUzNjFGNzVFMTQzQjkxMzM0QkQyREM4QjQ5RjRCMworOjEwRDRFMDAwNkFGMzQ5QkE3QjkwMEFCRkM2MkI3NDE0RkU2M0Y4QkI3QgorOjEwRDRGMDAwMEY4OUY5NkNGRDYwQUZFQUFEOUE2RjYyMEFGMTg0QTAwMgorOjEwRDUwMDAwN0M4MjBERTM5OTZEMzYzNjNGNjVCRTc0M0VDODBGMjhBOAorOjEwRDUxMDAwOThEODdDRkE4NzAzQTA4N0QzNzlFOUU4OThFMEJEMjdGQgorOjEwRDUyMDAwM0FCRkQzQkFGOTY5RjRCOEZCQ0M1QzNFNDg0NDAyM0UzQQorOjEwRDUzMDAwNjIzM0Q3MTMwRUU3NjY2RDlDNjk4MDQwQkM4MUIzMDVFQQorOjEwRDU0MDAwQUVCNDlDRjY5MzIxNEMzMjQxREM4MjBCNEVDMTNENzE0RQorOjEwRDU1MDAwM0M1REJCQUUyRUY1N0RCMTVBRjhDNzA4RjQxNzFEMzZGOQorOjEwRDU2MDAwODI5RkRGMkNDMEYxOTk3NDA0NUMwMzIwNDhGNTQ2MDBDQgorOjEwRDU3MDAwQzY0RjZENEEzRTg0RkFBMkFGRTYzODlFM0YxNzU3MUY0QQorOjEwRDU4MDAwQzc3MjAzRTQ2OTlBOTRFMENFRUIzMjg4OTBBN0Q2RTY5RQorOjEwRDU5MDAwRTVBNUY1ODU3QUIzRDIwQzFFQ0MxRjk2ODA4RTI2RkJBRQorOjEwRDVBMDAwRDMwQzgzNjBGQTc5QUIwRjhGMjI2NDNCMjlFQjA3MTYwQgorOjEwRDVCMDAwMjVGMzZBRUZFMUEzREQwMEFGMDgzQUVENDhDMDdCMTgyMAorOjEwRDVDMDAwNzA3M0JCOTJBNzBDMTBERTU3RDg2RTZEQzk3QkNEOTREQgorOjEwRDVEMDAwMkY2RUVGRDE5MjBGNDBCRTBBODA3RjA3OENFNzNEQkNEMworOjEwRDVFMDAwMUFFMjdDQ0NCRUQ1NjYzQUVFRTRDRDA2QTRCQkQxMTFERQorOjEwRDVGMDAwMUI5RTNGNDhCODAzRjI2NzQyQ0FBQ0JFMThGN0E1NUI1MgorOjEwRDYwMDAwRUMzQ0JDNUU1QjdDN0MzQjhGNDc5RUVDRjc3QkUwQUFFRQorOjEwRDYxMDAwRjc3MDJFOEY4OTJCM0MxOEVFNjMzNzlBNjczRjZGNTY1MQorOjEwRDYyMDAwRDNFMUU2NjZCMTA3OURERkYzQjBGN0I0QkRCM0MwMzUxMworOjEwRDYzMDAwQUUwRjlEOUY3MzkzODFDNUNGOUFGRDNGODdGQUJEOUYyMworOjEwRDY0MDAwRjAxQkEwQ0E2ODEyNUUyQTAwMUZGRTRCMzJDRTQ3MTk5QgorOjEwRDY1MDAwQTc2MjFGM0I1NzU1QUMzMTA0NTcyMkZFQkEwNTkwNkZBNQorOjEwRDY2MDAwRDFGRDBCRUJGNkFGODlFRDVGRUQyOURDQkY5MkJBNTMyQworOjEwRDY3MDAwNkNGRjZBQjcxQzMwNzI3QjNDOUM1QkI2MTNDRjJFMzBCQworOjEwRDY4MDAwM0RFRDVBM0IyMzRGQTJGQjkyNjQ2QUFBODA3RDk1Qzk2NworOjEwRDY5MDAwRjRCQ0MyQkUwOEQ3REZDNDg0MkI5RjVGNUI3MEREN0UwNQorOjEwRDZBMDAwNjFFQjhGMDY4MjVFREY2MEYwRjQyNjUxNzgyOUY1NEUzQgorOjEwRDZCMDAwOTg1OTlDRDg2NEFCQkYwRUM2Mjk3RDM2NUMwMUU3REY2NAorOjEwRDZDMDAwQkQxN0RFNDMzRjcwRUY4NkU2RDA0MDNBREZERUEzQjhGOQorOjEwRDZEMDAwMzk4NThGQkJCRDYxMkJGQTMzQjcwMzFFQkJDMTc1RUYxNAorOjEwRDZFMDAwNUYwOTcyMzIzRTNDMTg3RUI3QzBBM0U2MTRDMkM3MDA4MQorOjEwRDZGMDAwNzlGQTdEMzdCRjQ3OTE1MzJCNzg0MTRFMjQ5OUE4MUM2NgorOjEwRDcwMDAwQTVFOTFGQ0RFQzFDNzNDNjJDRjI5NEQ5MTk5RDBEM0REMworOjEwRDcxMDAwMjREMDhCNzNBNjE5RjAzQ0U1RTQ2OTc0RkQzQ0ZFQ0Y4MAorOjEwRDcyMDAwMkM2OUU0OEJCMjlGMEExRTExNTI5OTAwRTc5QzAyQTc1NAorOjEwRDczMDAwRkYyRjVBQkM3OTI2QTEwNzJEMUY3REY2RjQ1MkIwRUJCRQorOjEwRDc0MDAwMjlFREI2QUQyMDlFQjlBQUZCRDAxNDdGRjY2OERBRTVDNAorOjEwRDc1MDAwM0Y2QTA1N0JBODUyMUZGMDMyRDYzOTgxQjZCQjA0RUQ3MworOjEwRDc2MDAwNjAxQzU4Qzc5RUIzQ0QyMkMwQkJCREZCQUFGRjVFQkZFNQorOjEwRDc3MDAwODI4RUQ3MkIzRUZERjhCMkQ5QkQyMkZERjc3RjlBMTVEOAorOjEwRDc4MDAwQkYyM0QzNDdCQ0QxN0I3RkZGMDQ3QzU4NkMwRTNCQTZFNAorOjEwRDc5MDAwRDFGRDJEQzlCRTY2MDQzOEFDNENCODMyMzI5NkRGMzNBOQorOjEwRDdBMDAwREUzQ0VBNkZEQzZBMDMzOTdEMzA2MjhBNzk4RkEwQUY5NAorOjEwRDdCMDAwODVFOTE3RUZBRTk4RTEwMTNGRkM1MzJERjcwNDk4M0M0MworOjEwRDdDMDAwQ0JFMzdDMzdBRjU3NzEyMTYzNUFBQUI4MzEzMDU4NzAxOAorOjEwRDdEMDAwQjk5OTBGNUZFOEZDMEFCMjc2NDkyMDNGRjM4OTRBNUVBNworOjEwRDdFMDAwMzIzQkM1MDREMDQ3OUVDQTExMDlDNkE5Qjk2NDhEN0NENQorOjEwRDdGMDAwMUIwRkY2NzIwN0JDMEI1Mjc2MTg4NkJGM0I0RDdCMEY5MgorOjEwRDgwMDAwNzREMkE4NTMxMkJDNTczMDM2OEI4QTYzMDFERUE3RDE3RAorOjEwRDgxMDAwOTY4RkQ3REQxMzlERUM5REU1QzlFM0U1RDdGMEZGNDE3OQorOjEwRDgyMDAwNUNFN0E0QUNGQjNDNzk2QTM5MjE1NUY2ODE3RDNFRkU2QworOjEwRDgzMDAwOTUxODUzNkY3Q0I0MDUzRTNFODRFQjFCMTYwQTlGREJBNAorOjEwRDg0MDAwNjE5REIzNTYzMzk5NzQ3Mzc4RThFMUE4ODc0QkRFNUYyNgorOjEwRDg1MDAwRTYzMTdCQTEwRTFFNzdERkE4M0M5QzE0MDMwRUFERDdFQQorOjEwRDg2MDAwNUREOTA3RTRBNjAyM0YzRDFDRUFBMTJFRUE0REE2MjBBMQorOjEwRDg3MDAwRTg4MUY1NTIxOEUxNTg0RkUxMThFMDdFQUI3Q0Y1M0VBNworOjEwRDg4MDAwMkJGM0UxRkFDMzc4RkU1RDBGNEYzRDFDQTk3RTgxRkFCMAorOjEwRDg5MDAwQzNEODAxNzZCNDgzMUQwMzc4NjExQzQwRTUwNzI2RkFERQorOjEwRDhBMDAwRkRFRDVFMzI3OTFBNzg1RjY4MzRDNjE5REU0NTEwNTY5MAorOjEwRDhCMDAwRTQwREExMkMwRkZEMzIyRUU2NUZBMUYyOUNFMUMzNUZDNworOjEwRDhDMDAwOThGREFBMzBDMkU2M0ZDNkNERTI2NTI4M0M0RUVCRTBBQgorOjEwRDhEMDAwNzE1QTg3MDc5QTczOEI3RTlFNkZDMDNGNDZDNEMwMEZGNAorOjEwRDhFMDAwOEUwNzhCMkNGQzdDOTM0RURDNzBGRjdGRDhDNzQzOUM0QgorOjEwRDhGMDAwOEMyRkM0OTY4RkEzMjNCRTk2N0U5OERFQzFERUU3MTBFMAorOjEwRDkwMDAwODhCRkU1QkI4QkY2MTNGMkNBMThGRjk5NkI3NjIxN0RCMQorOjEwRDkxMDAwRTQxMjZGMTJCQzA3MDE0MTg2MzA0RjY1NUU4MzA1REY1QworOjEwRDkyMDAwMEYyRDI5RjA3RUQzRDgyNEY1RkIxMENBRjhDQUJFRTQyNworOjEwRDkzMDAwNzJGOEU1OTJDMDAxMzg4N0U2MTJFOTMzRjVCQTk1RkUzMAorOjEwRDk0MDAwMkEyQzVDQ0ZFQTRFQkFBMzlGMUM4Q0ExNDNBM0ZEMjlDRAorOjEwRDk1MDAwRUI0QjRBMjIyMTdDM0Y0NDMwRTMzRDI3RkE1RkMwRDg5RAorOjEwRDk2MDAwMjEzQTlFMTIzRjlBNjg5RjUyNjk0MUJGNEUxOTYxNzFEOAorOjEwRDk3MDAwMTIyMURDQ0YxQzVFOUVDM0RGNjkyMkU2QjhFRkYyOTA3NQorOjEwRDk4MDAwQUYxM0EyRjM3QkQxMjI0OEY4NkUwMjlGREZFNUEzRTYzNgorOjEwRDk5MDAwMDBDNDZCM0MyNkY4QjcwMjFDMUE4NDYzMDMwMTVFNTQ3MgorOjEwRDlBMDAwMUZCQjA1RUZFOUVCQ0FBRjlEM0M1QzAyRTVCNERFM0M3MgorOjEwRDlCMDAwQUNDN0Q3QjU1MDY0NzYzMjdBRkVDN0Y3NTA1QUYzNzFDOAorOjEwRDlDMDAwNjY0RkEzRTQyNkMxRkMxNUZDQ0ZCMTMyRkExRTRGREMzMgorOjEwRDlEMDAwNURGMUJEMzRFMjk3MjAzRDZDNjFGN0QwRUUzRUY5MEM2RAorOjEwRDlFMDAwRUVERjFGQUM3NzFGMDU3QTJCMjA0MTA5REZGOTcxNjk0MworOjEwRDlGMDAwRjFCMDREM0NFREEzM0ZGRkYyNzc1REE0QTY3NDgwRUI0MAorOjEwREEwMDAwNDFDQkFEQkQ0MDhFMjlGQUMyN0IxNkRGNkY2MUJEMDdFOQorOjEwREExMDAwMkQ4QzNGOUZGNjBFN0QxN0U0QzJFQ0VDQzEyNzg2RDAxQgorOjEwREEyMDAwRDQ2MEY2RTFCQjBCMEYwMzVFNTE3ODY2MDE1RUQxQjZBMAorOjEwREEzMDAwMDdBMUVCNEU4ODU3NDc2MURGRTZBQ0Q1RTE5NTk5RDk1MAorOjEwREE0MDAwRDM2NjUzQjYwNUVCQzg1OTJCN0ZBOTlFNTcwQkJDQjhCQworOjEwREE1MDAwNUM2QzRCM0YyNDg3QTk0MjlGMEFFRjJEMzBGQzNDNjg0OQorOjEwREE2MDAwMzEwNTQwNkZDQjc5OEFDNTQ3Q0MyMUZFMTcyQjA1N0M0OQorOjEwREE3MDAwMDc0MEEzQUZDRkI1MzBCQkY3REM5RjU5OTBDRTY5RTMyOQorOjEwREE4MDAwNEQ2NUUwRTdCMkYwRjcxQ0ZBQjA3Nzc3NUFDNkFCNTRCMQorOjEwREE5MDAwQjU4NzdEMzdBNzIyMUVDRUU1RkVDM0IzMDIzQkI3Q0NDOAorOjEwREFBMDAwQjVFNEIzN0JCRjFCRTU2NjM1M0VFQUM3OEZEQkFGQUU5RgorOjEwREFCMDAwREQ0MTgxRDk0OTBFQ0E2RThDMDc1M0RBNURCMTMwMzkyOAorOjEwREFDMDAwREU2Q0VFQkRDOTcwOTNGQkUwRjNDQzFERkE0QjQ5RDE3RgorOjEwREFEMDAwRkMzOThCNjU0NjJDQkQ0MEU5QUZFNTVDREU3MjlFMzBCQgorOjEwREFFMDAwQUUzOURDMzU3QTlFMzA5NENCNDdCNEU3MDlGOUM4QkYyQworOjEwREFGMDAwNzI5RUIwM0YyRDFGNTk0RERCQkY2REYzQTU1QTYxN0M1RgorOjEwREIwMDAwQzlENzE3RTBGRTFDRDcwRkE5MjZEMzU3NkQ5NzRFQjU3RQorOjEwREIxMDAwMzJGRDMwNzU3OTBFMzkzMzM4RkEzRTlCMjBEMTk5RTBDOQorOjEwREIyMDAwRkIxQUZFNzI5MDM3RDIwQzgyRkM5RkYyOTk4NzYyQzU3NQorOjEwREIzMDAwMDUyNURBNzMzQTVCODc0NkU5RUYyOTgzQkJBQTkyQzVDQworOjEwREI0MDAwMkJBMEJGRDdCNzdDMzZFQTczNTM5NzE3NjFEQTc4RkEwMAorOjEwREI1MDAwQzYyRDQwODczOTFDOUVCNzVBOTk1RTVBOUFDMEU4NDMzMQorOjEwREI2MDAwMTBGQ0I3NDI3RkY1NUVEMTBFRkVENDg1QjUyMkY3RDcwMworOjEwREI3MDAwQjE3N0FEQTY0RTEwNTNFMEZCMTlCMzhDRTdDMDgzNzZBNgorOjEwREI4MDAwQjZBRjY3MDg3QjlGMjZFN0I4Qzk1NzQzRDMxQjI0N0JGMgorOjEwREI5MDAwOUM1NUE1RUZERDIwNzk5ODI3NjlBOUU4QkY1NkVFMkJBMworOjEwREJBMDAwOUUyMTE5NkNCRTZCOTk3RkEwNzk2RDA2QzYzMTFGOTRCQQorOjEwREJCMDAwQjVGNkE4NTE1NkE2MEY4RkIyQjJGRDlEQ0RERkIxMDNDOQorOjEwREJDMDAwN0M4MkY3MjQ2NjRCNkVCNDBGQ0U4RTE4RDkzQjZBNzRGNAorOjEwREJEMDAwMUU4ODZGMTY2RDNGRjk1NjE2M0Y5MUNGRTEzRjFCRTQ0QgorOjEwREJFMDAwRTQ2MEE4QTdFRjQ3NjJGRDczQkNENUMzRkQ0RDRCRUVDMworOjEwREJGMDAwNTg4MEQzMERFMjFENjc0NUJFRUU5NjAwM0UzOTQzMEVCOAorOjEwREMwMDAwOUYwNEZFRDYzNjNGMEYwOEMwQ0Y0QjZGMDhBMUVFNjBEMQorOjEwREMxMDAwMkZBQjkxRjE3Q0Q2QzBGNUZCQ0IzNTg3NTI2N0QzNzQxRgorOjEwREMyMDAwRjFBRUY3MUQ3MDBFRkM5RTk1RTk1Mzk3QTU3QTdDNzdBRgorOjEwREMzMDAwNjJEMTZCMjJERTlCQTY2ODlBRkEzRDZDM0Y2NzE4QkJFNworOjEwREM0MDAwRjdDMUVFMkQyODcyRUU4RUFGN0E3NkY1NjEzRDc2RkY0NAorOjEwREM1MDAwNDBEMUFGNzJDRDgxMjBDQ0VGNjBCOTg4NzYyOTJBMDdGOAorOjEwREM2MDAwMzVFRjkwRTREN0IwN0IwOTdBQkRFQjExQUJDQ0UzMzU0RgorOjEwREM3MDAwRDkzRTJFNzNCMTcxRTJEMTZENEVDNDRBODIyQUJBQ0QxQgorOjEwREM4MDAwOTFEQzEyQ0MzRjI3RTIyMDQxMEFGN0NCMTdCNjZFOTgwMQorOjEwREM5MDAwNDhGMTNDOTAyNkUzMzk4RjFFN0YwRUEzREVBN0Y4QzEyMgorOjEwRENBMDAwMDMzNDRGQzczOUNDRDc3M0E0NjZFQTM0Nzg1RkU1MkRDNworOjEwRENCMDAwNTJCNjdBMDBBRDkzMTdGNjI3MzMyMkE2QTdCNDYxNTE2NgorOjEwRENDMDAwQkQyQkRGQTVENUY3RjRGQTYwNDFEREZBRDVGMDE2NEI5MAorOjEwRENEMDAwMDM3QzgwRjFDRDI2OEMyMzZFQTUyNzlBRUY4RUE5MUY5OQorOjEwRENFMDAwMTJCMjFFRjFGMDhFRDc3RTM5MUVERTlGQjhFM0EyQzFCQworOjEwRENGMDAwMDVGMzlCNkM3NTMzRkI2MkNEMzU3QzFGQTE4NDg0QTYzNAorOjEwREQwMDAwNDM3OTQ5OERFODBBRDE1NjQ3NDhDRDZEMjAxNzE1MzkxQQorOjEwREQxMDAwQUVDMDI1NzRFMzkwRDkwM0ZDREUyMkJBNTZDMjNBQ0REOAorOjEwREQyMDAwRjdEODIwQ0U2MjY0NjNGRjY0OTA2NzA3Q0QzMkRBMjFCMgorOjEwREQzMDAwNzMyQ0JENkQ3MzU0Rjg3QzMwOTlCRDFCNzAyNEI5QTc0QQorOjEwREQ0MDAwRjZCQjc5QzM2RDIwRDdGNkYwQjhCNUMzRTdFRUI3ODU1QgorOjEwREQ1MDAwQjFERUQ0NjRENENCMTQzOUFFRDM1NzE1N0JEN0Q4REUxQgorOjEwREQ2MDAwNjI4QkJENEJBREU3MTI3MUQzQjMxNjVBM0VGRTU2MTkwNgorOjEwREQ3MDAwRUZCREU1ODU5OURGQjQ5NTFDQkZFMTVGQ0RDRjIzOUE1OAorOjEwREQ4MDAwRUYwNTVDM0Y2ODI1RDdBMzcwRDZFOEExNkY1OEI5NUU1MAorOjEwREQ5MDAwRTkyNjAzNDBBRjBDREREOEIwMTBFRkNCRDYyNUI4NTYzRQorOjEwRERBMDAwQTIzRDgxRTkyRDhENjc4QjM3NEM4MEVGQzc0NDY2MUZGQworOjEwRERCMDAwQjkyMTIyMUQxRERDQkZCMDdCNTg0NUJGNTQyMkUwQkVGNworOjEwRERDMDAwNUQxRjc0RjVDQTlCNzQ1RkFFN0Y2MkY1MDRFMEIzNTRDNworOjEwREREMDAwN0Q1QjZDQkY1ODkwQzMyOUQ0OTlEOUQ5MDM5REQ5M0I5OQorOjEwRERFMDAwMThFQ0RDNzk1N0Y0RENGOTBFRjAwMTc4NDcwNkM0NDNFRgorOjEwRERGMDAwREFBNjUzNDYzODFGNUZBNkFBMzhFMjE3NUQzNEUwRDc4QgorOjEwREUwMDAwNURERUIwQThCRTdGNzM4QUYzREZDOTU2RUZGQkMwMUY4QgorOjEwREUxMDAwMDMyNEE3MEI1NTQyNDg5MUQ1OUIwRDcxRTA0RDkzODk4MgorOjEwREUyMDAwNkIyQjVEQ0ZCRTBCMzk4MjRDRjNBM0I2NjU3ODA0OUE5OQorOjEwREUzMDAwREYwRDhBMjVGMENERDdDNDIwQzQ5M0VDODY3QjZCQjQ2QworOjEwREU0MDAwREYwNUY1OTVDNjBDM0E2RUEwNDY0NEJCRkUwMjZFMUY3OAorOjEwREU1MDAwQkYyMDA3RDIxMzU1Rjg1MTk5QzBGOEM5MDVEOUZGMEI1NworOjEwREU2MDAwRThFN0MyQzcyNkI0Nzc1RkY4QzQxQTUzQUVDRTQ4NjA1RAorOjEwREU3MDAwN0NGNzREMkVDRjMyMTNEQzk4MEYzNUVDN0RBQjMzOUQwNAorOjEwREU4MDAwNTcyOEUyMUEwNDcwMkZERTcxNTU4NDc3OTNFRUU0RkE3NgorOjEwREU5MDAwNTdFMUIzRjVBQkMxMkUzMzcxNTM5MzA0N0NDNzE3NzRBQworOjEwREVBMDAwRTU4MzQ4OURCMkMzMjM4MzFDOUFCNkQzMjc4MzlBM0Q0QQorOjEwREVCMDAwQkRBNjBDRTM5MDY2RDQ1NjFFODFGQ0ZEQTE2QUNDRjc4QQorOjEwREVDMDAwNEZGMDQ3MDAyRTc3QUQ2RDNBMDRFOEQyQUI5MjQ4Rjg5OAorOjEwREVEMDAwOEVDRjY3NENBRjRBRTVGM0U4MTFGMTFDNzQyMjM2NjcyOAorOjEwREVFMDAwMUIwMEJGNUJDNjdGQTI1RTAyRDU3REUyNkEzNjNFRURCNworOjEwREVGMDAwQ0Y5MDQwRDc3RDU3NTk1MzJFQzhCNUY0RTVBQ0JGNzRDOQorOjEwREYwMDAwNzJBMERDRTk4RUY2M0JGQTQ2QkRBMEI2MTdCQ0Y4OThDNQorOjEwREYxMDAwQUQ4OEYxNUIwNkY3RjRDNzNCNkZDMTczMTk3MTU5RjExNgorOjEwREYyMDAwNUQ0NTRFNEYzOThGREJEMDBGNzBGRDA3Q0MwRjcwN0RGNAorOjEwREYzMDAwMTBEM0E3QUZGRkMwMTYwQ0M0RDBBN0EzNzgxNjMyMzFGOAorOjEwREY0MDAwRkM1MkYwOEQ5ODU5REU2QjA2N0NGQkZFRjM2NTU2QTAwMworOjEwREY1MDAwOUI2NDlGREJBODhFM0ZDQ0Q5NTBEOEVGNkRFOERGNjI4MQorOjEwREY2MDAwNDJCQjVDQ0I3OEVCRDk3ODEwODgwQjc4QURDOEIxRDlCRgorOjEwREY3MDAwM0FGRjRCOTQwRjMwQkFBMDVEMDQ2MTVDMjUyNUMyNEE3QworOjEwREY4MDAwMTc1MUU3NDkyODBERTY5MzlFQzBGODVDOTVEMTNEMTNFMworOjEwREY5MDAwQzZBQkIyOUE1QzMwREU2QzczNkYyM0YwQUQxNkZCMjYxNQorOjEwREZBMDAwOEY0RjFCQzlGNUNCN0QxNzBFMjZDMUJFNUYxRjU0OUUzOAorOjEwREZCMDAwMEU3QTczQzhGMDczRTQ1MzZERTFERDRGQUNERUUxMDkxNgorOjEwREZDMDAwMzhDRjAwRUFGOTRBRkQzREU3QUNGRDQxNEVCRTY5NjAzRAorOjEwREZEMDAwNzE0RkM0MzNBQjNCQUM1NzY5Mzc4REE3QkJCOTlGNEU2QworOjEwREZFMDAwQTE5M0U0N0FFMkRERDIxRjQxRTVEREFEODJDN0E0MDQ0RQorOjEwREZGMDAwNDY4RjRBQkE1Qjc2MDcxODlEQjFCOENFRERGNjkwQjk2OAorOjEwRTAwMDAwMjdEMEYzOUU5RTk4NEZGNjExOUIwN0UyNTg2QTdCN0JDMAorOjEwRTAxMDAwQzA1RjQzRjlDMEE0MDQ5NTVERUE0RUNFMUY5MkVCOUIwRQorOjEwRTAyMDAwOTAyRURCN0IxRTE4QzZFMTFCOTJBQTM5N0QxMUU0NTNBQQorOjEwRTAzMDAwNDA1RjhDN0Y4N0JBRjBGNzc4RDBGRjA3N0M4M0VGNEY4MworOjEwRTA0MDAwMjcyMTBERTNDMTcxOUY5NTc1Mjc3M0JFQjA4Q0QzM0QxOQorOjEwRTA1MDAwQzAwMUNBNEI3OTVFMjk1RkNDRTE5NTJGRjY3N0FBRTMyMAorOjEwRTA2MDAwQzc1QUM5RjVFNTY5MDRGNEM3RkNFNTlEMzEyREU1RjMxMAorOjEwRTA3MDAwNUQ2MDVFOEZGNkQyMDVDOUVCRDE0RTlBRUNBREM0NzRFQgorOjEwRTA4MDAwNDE1RTI1N0U0RkRCMzQwQkYxNjNDMUM2RDhFRjhDMUQ5QQorOjEwRTA5MDAwRTU3QUQ5RTUwQjA2RjY5RTk0QzFEQTE5RjA0RjI5N0Y4RgorOjEwRTBBMDAwQzcyQTczN0VFOTdGMUNGMEUxNjJDRDg2RTcwN0JBQTMzOQorOjEwRTBCMDAwNzZERkVCOTZDQTg5RjcwM0ZFNkYxMzVERTVCMDNGNTUzNworOjEwRTBDMDAwRjk4MjNCMDY1RUE5RTEwN0YwMkFBREZBMUNGREE2MjUwMAorOjEwRTBEMDAwMjRDQ0ZDQTZEQzJGQUFGODRGODM1NThDOUY1RUU0RkE3MworOjEwRTBFMDAwNTk5MTU1QUI1NzU2MjYxODM4M0ZBRDFGN0YzQjFEM0YwMgorOjEwRTBGMDAwRDREQzJCMTNGQzQxMjEyOTJDNEE2Q0ZGRDA2RTA0N0MwQworOjEwRTEwMDAwRDg4NUY4RkU3NEZBNjM4MDQ3ODIxREY1MUVFMEFCQkIyQworOjEwRTExMDAwNTRGOEIxNzBFNzk2OEFDRUY0OUY3N0RENjBGNzc3NDJDNgorOjEwRTEyMDAwMTJCMUE5RjlCNzgyMjcwQTNGRDZBRjZGMkJDNzVGMDU5NworOjEwRTEzMDAwMEY0NzQ2RTVENEQ2MDQ2RTFGRUQ0OUZCMkQ1OURGOEMwMQorOjEwRTE0MDAwRjZEMTM3MTQ3QTA2N0MwMzdBNUVBQkUwREIyMDAzN0JFMgorOjEwRTE1MDAwMzc0RDRCQzdDM0JGMjNGRUJFRTc5OTE3RDJEMUZFOTAwMAorOjEwRTE2MDAwNDVFOTE2REU1OTAzQkE4RTgxMTdCRjZERTEwM0ZFQkQ4NgorOjEwRTE3MDAwMDkzMUU0QzE0NUMxRkY4QkE0OUVEMUY2N0JDRThERUI2NgorOjEwRTE4MDAwMzc1QkQ1Q0ZDRjM4OUU1Rjk3RkRERDVEMzFFMDE1ODVEQworOjEwRTE5MDAwMkJFOTBDRjg1MDQ0NzcwNkUwNDAzNjA5MkU3NURDN0JGRAorOjEwRTFBMDAwRjIyNjY2RTdBRkU3RjA1NUJFRDdFQkUwM0QzQUZBQkVBMAorOjEwRTFCMDAwNUMzRDgzNzc5MzExNDQ3NjVBOTBFOTA1QzQzMEFFMzNDMQorOjEwRTFDMDAwQzhGOTA1NTZFRjM4QjRCN0FDMzcxMDdDNEY1NUM4NDE4NQorOjEwRTFEMDAwN0M0RkFFN0FFRURDNTc0MzIwQjVGNDQwQkYwOTcxMUI4QgorOjEwRTFFMDAwMDA4RjE2M0NFNUM2RjNFMENBOTcyQzg4OTdFNzEyNThEMworOjEwRTFGMDAwOUNDNENBMkE5OUUxQTc1Qzg5Rjg3NUYxOTNFMkVFRTAyNAorOjEwRTIwMDAwNzcwOTUwQjlERTNCODZEQ0Y5QUQ0RTlFQkZDQUU1QTg2MgorOjEwRTIxMDAwODI3NzNERDYzMUJDQUI5MkJDRDY0NDE1NUU2RTI3REUwQworOjEwRTIyMDAwNENFNkVGNjc3MjI1MUUzRTQ2RjFDODM1NDhDMUEzNTkzQQorOjEwRTIzMDAwRjQ3QjhGQjU2MTExRjY4QkVFRTMzNUEwREY5RUVCOUE5MAorOjEwRTI0MDAwOTA5RkM1REI0N0M1QkZBNkVDQTdDMkU3ODdEQkI0Rjc0NQorOjEwRTI1MDAwRkE2NDFCNUI0RjcyOUM3ODgwQTg5Q0QzRjI2NTc4RkZCMAorOjEwRTI2MDAwQ0YzNjU0NEIwRjcwRTU1MjU5NEYyMzg3NEIzQ0JBOTgyOQorOjEwRTI3MDAwNjM2M0VGM0U1N0ZDNzVDMzgzNDBDRjE1RUJBRDlFOTVBRQorOjEwRTI4MDAwMjRFQUE3NTFGQ0E3Q0EzQzNBREEwNDhEM0Y0N0VGNjc1RQorOjEwRTI5MDAwNjkzNEZCNTM2RDJBQkMwMjNGQTAxQkY5M0RGM0FCMjg0OAorOjEwRTJBMDAwQkY4NzYwQzkzNjE2RTdCNDA3OEE4MDhGOUNCNTA2RDU0QworOjEwRTJCMDAwRjc3NzZGOTU4ODU3Q0FBNDcwQjU2NUUwQkE2RjA1MTZGMQorOjEwRTJDMDAwNDJGM0M5Q0I4REE0MTczRDc3NUQxRjcxRTBCMDgzRDZCMworOjEwRTJEMDAwOUZEMDE0MkVCQzlEMkU3MThGMzEzQzZEMTJEODdEODkzQworOjEwRTJFMDAwQjcxOEY0MENCNEQxMDNGRTM3QjA3RTg5QUI1QTMzQ0ZFNAorOjEwRTJGMDAwODExQ0RFQ0FGRTU0RkM3NTRFNUEyQzNGODAwMkM3Nzg0MgorOjEwRTMwMDAwRkIzMjg3QzNDM0M5Q0JGNUY0NkZFMUU1OUZCNjlCN0VCMworOjEwRTMxMDAwMDM0RUEwREZCQjQ4QTAxQ0UyMkZFODAxMURFM0Q2NUE0NAorOjEwRTMyMDAwRTg5NzFFRDhBMUZGMDI5Qjk2N0U5NTdDMENGQTJEQjAzMworOjEwRTMzMDAwQTlFOTM3MTI2NkY0Q0JFOUQ0NTkyNTdCNjNFOTJERDNEQgorOjEwRTM0MDAwNkRFQzlDRUNBQ0NBQ0YwNjc5RTRGNDYxRDgzOUQwMEQwMQorOjEwRTM1MDAwRDJGQjAyNEFFRjQwQzcwMUEwREI4RTAwNEY4NjY3M0QyQgorOjEwRTM2MDAwQkM5NTE4RUZEOEEzOEFFOUUzRDcxM0Q5N0ExN0RDRTk2QgorOjEwRTM3MDAwM0QwMEVGMjUyRkEwRTcwMTgxNTZBREU0RjQxRTFGRUUwRQorOjEwRTM4MDAwMjFBN0MwRTQ5QjEzRjhDQzVEQTNDMkI5MjA4N0RENjA1MAorOjEwRTM5MDAwRUZFODg4QkZGQTAyMzc2NUY0MjgxMjBDRDE3RDc3REZFOQorOjEwRTNBMDAwMjA4QzdGN0NGMkMyODM4RjAxREY1ODZGQzM3QjRGOEE0MgorOjEwRTNCMDAwNUM0QTRERjAxN0RCODZDNkE3NkI4QTk3NUVCMDU3MkQ3NworOjEwRTNDMDAwRjlDMkM2Q0U4RDcxRkNFMkEzOTcxQjQ4QUYyNEM0RjNGQgorOjEwRTNEMDAwQTU2QTNDMUZFRDZCMTIwMUFFNDkwOUZFMzQzOTkxOTBEQworOjEwRTNFMDAwRDVCNjlDMzFFNjZFNzQ3RDE5NTRFRkE1Rjk3MjlBNUYyQgorOjEwRTNGMDAwMDdGNkI3MEU2MUMyRjMxNUI2NEVERkRFNUVCNzdBOUQ0MworOjEwRTQwMDAwRjcyREIwRDdCRDk0RTA1RDA5RUI4MjM4MDA0OEVGRUEwNAorOjEwRTQxMDAwRDIyNDIyN0Y2QkE3NUZCRjE0RUM3Nzc0M0RBN0VGRTk4RQorOjEwRTQyMDAwRjdEMjJDRkE3NUY2N0RCRTBBMjg1NUVDQzlDM0I5M0Q2MgorOjEwRTQzMDAwQjlCNDZFMTBEQTk5NTU3NkU1MERCMEZFNzg3NkU1QjY4QQorOjEwRTQ0MDAwQzY3NTcwQkFBN0Y4OERFNzNGNDc1NjkzMDhGQzUxRTFBRgorOjEwRTQ1MDAwMkI1QjZDMUQzODNFODcwOUJDRDdBRUQwMTdGMDI1RDA5QQorOjEwRTQ2MDAwNzc5NUY4MDJCMDNCREFEMTVGMTE0NDdDODVCQzMzMzMzOQorOjEwRTQ3MDAwQ0E2RkQ2NTUxQTYyQzYzRjU1REI2QzFBN0E1MUY4MjkxNQorOjEwRTQ4MDAwQTlGQkM3RUI4RjI5RUYyQzMyRkU1QUFERTZBRjU1OTVBRAorOjEwRTQ5MDAwQTc1Mzk5RkVDQURFMkQ1QkNBNkQwMDFCNTY3QUZFRDhDMworOjEwRTRBMDAwMkIzOTdBRUY3OTg0QzkxODgwRjcxNkU5ODFDRUVENTJCRAorOjEwRTRCMDAwQzU0RjBBNzU0MkM4MEU3MTc5NUZEMjIyQzBBMzJGMERENQorOjEwRTRDMDAwOTg2RUY4MEY1RjQxMDZEODU5NEUxQTkwRkY5NkYwN0I3MAorOjEwRTREMDAwNEQ1OUREMDlCRUMzNTNDQkVEQTNEOTY3NkM1RUYwRkY4OAorOjEwRTRFMDAwMzcwQTY2RTQ5RjhEQTdBQzAxOTBBQjhENzYwM0RBQ0YzNworOjEwRTRGMDAwMEZFRjMzMjE1RDVDRUI2NUU1RjY4RkEwQzY0RUEyRjgwOQorOjEwRTUwMDAwNzNBRTFEOUI5MzA0RkNGRjc5RUVENzdDRkVCRTVCRDBGRgorOjEwRTUxMDAwNkVBOUQ4NzMyNTg5QzJCQzAzODRFOUIwN0I5OTM5Q0IzNQorOjEwRTUyMDAwM0JBM0JENTVCMUVGQTY5QTY3MDkyQzg4ODhGNTJGOTlCMgorOjEwRTUzMDAwRDlCQTUyMjVCRjAwRjZGMTJENkRDNDNGOUNCMTE5MTUxMworOjEwRTU0MDAwM0RGODJGMDBERkQyMjdDMjQ2MzhFNzJBN0FCMDIyQUY0MworOjEwRTU1MDAwQkIzN0Y0MzgwMDcxMTBERDBCOTgzOTZENEI4M0MxMDA2NworOjEwRTU2MDAwRUJEQjQyRDEyODMxQTMzNTVFQjVFMDRGRUIzODgzOEIyRQorOjEwRTU3MDAwMUFCOUI0ODZDNTE5QjRFNDc5QkI1RkYwMzg4M0QxNjdBMgorOjEwRTU4MDAwNEZCRjhBRUZFOTk5RkQxRjZCREFFNUE3NTg2M0JERDM0QQorOjEwRTU5MDAwM0Q3REY5NjNEODNFMUVERTRGMzdCMEY3NzlGNERGMTNDNworOjEwRTVBMDAwRUM5QzZGNEI2NTVERjA3RUQ0REZCRTlGRTA4RTYxQzc1MworOjEwRTVCMDAwOTlGRUQ3RDlGODdCMjRGNDc2QjdFOEY4RkZFMUM5QTMzMAorOjEwRTVDMDAwRkIyNkRCQjlERjJGOURBNDgzNUZBRDJEM0ZBNjdFREU0QQorOjEwRTVEMDAwMjc2NDdGQjc1OEYyNDkxRjY3QTc4Q0Q3QkEzRDNCOTc4RQorOjEwRTVFMDAwQjVENDMzMTJGRjJFMUJFQjM3NTNENUVGMjgzQkQzN0YyNworOjEwRTVGMDAwQTYwQjA0RTNERkM5NTcwNEU1QjQ4MjI3MTRFRURERUQ3MgorOjEwRTYwMDAwQjQ3Q0Q4M0I2NzA2NUJEMUNGRDMyNDAyMUZCODc2QjI2NworOjEwRTYxMDAwNTc1N0Y0QUZDNzM5ODcyQUYzMjFDNERGM0I1NjFDQzdDRAorOjEwRTYyMDAwNzQ3ODg3MjdDNkZBNDZEODk5N0M5RTJFMzMzRjg1NzAyQQorOjEwRTYzMDAwNUY2RkI0MEI0Q0I3OTgwNDc1REM3RTZGNjVCRjc0RkVEQQorOjEwRTY0MDAwRDg4Mzk2RTE3OEJGMTFFQ0Y5QjFFMEE3RjdEM0Y2MDZDRAorOjEwRTY1MDAwMUZFQTUwMDYxNzRGMEM3QzUyRkM4MjBBOUMyQkIyQkQ1RAorOjEwRTY2MDAwRDkxMkIzQTdFMTNEQjU2NDJGRTM5RkM5MDUwNEZENkI0MworOjEwRTY3MDAwQzMwNTJGQzI2M0JDM0QwM0U3Qjc4NUM3Qzc1RDNCQzY3MworOjEwRTY4MDAwRTI1OTg3NjVCQkYxRjczQzUxMzkzMTE2RTAzQTlBODQ3QgorOjEwRTY5MDAwNUYzNUE4RTJBRDE0M0NBOTc4ODVDQTYzOERCRDMxQTA3MQorOjEwRTZBMDAwMzk0RjI3NzIzRUVDODJGNzI2NTRGNURDNEYwMDBGODg3NQorOjEwRTZCMDAwQ0E4MUFFQUJDRDlBN0NGQTMyMTc5MTU0NzIyMkQxOUJBQgorOjEwRTZDMDAwQTZDOTc3RjVCOUFDNzA4RUVBNUFFMEQ2QjQ1M0YwNEVDRAorOjEwRTZEMDAwODlGN0MzOUY2NDU4QjcwQkRGM0RFQUMwRTczMzVDRjBBRQorOjEwRTZFMDAwMjNERTAwNUYwMzNCRjIwMkJFOUY3NEJERjM3MUJEMDVFNAorOjEwRTZGMDAwRTE2QjZBQkM1MUQ2REJENkJBNEVBRjcwMjMyRjNDQkI2MAorOjEwRTcwMDAwODJDRTk3RjI4NTM5RUIzMkNBRDMxMEVFMkUwMkU3OEIxOAorOjEwRTcxMDAwNzMyQkNDRjhGRDYxREUzRUYxRDk1OTc4OEYzNjcxQjU5NworOjEwRTcyMDAwMUJFREI4ODlERUIyQjdFMDlFNEY2Mjk5MUJFRjE1Q0NBNgorOjEwRTczMDAwQUQxNDA0QjBGNzUwM0U4M0VEMzZBRjcwNjFBQUVDQjc2QworOjEwRTc0MDAwOEI5NjBCQjZFODNCRTNGMUU0RDc1QTdCQkJFNUQ3NUE4RgorOjEwRTc1MDAwN0IwQ0Y5NjUzMDdCREUwNkJGRkZFMjNBRDEwRDc4QjE2NAorOjEwRTc2MDAwQUFCMDAzREFGRDM2NTRCM0ZCNkU4N0VBNThEQ0REODZDNworOjEwRTc3MDAwRTk0QzhFMjhFMzVFNzlDRDg5RjJFMjhBRjJGQjU0QkM0MworOjEwRTc4MDAwNUZBNjRFQzE3ODgwMkY1MzgxQ0Y2RUIzRjk5RkI3QUI5MAorOjEwRTc5MDAwRjhFNTg2QkFBMTE2RkVGRUIyNDZGRUQwMUYxN0RDN0Y1MgorOjEwRTdBMDAwNDBERjlDMDA3QUQyQTBCNTUyNEZBNEZCMTc2MUJFNjQzMworOjEwRTdCMDAwNUU3OEIwQTUyN0UwQTlGRjdENzhBN0Y0REFDOUNGRDJBQgorOjEwRTdDMDAwNjFGRjE0M0Y5RkUyMDc1NEM2NTFGQzg0ODJFMERGNkU3NAorOjEwRTdEMDAwNTdGMUE5RDY3RTQwQURGRjRBNzQ5ODMxNEUzNzRCNjQ0RAorOjEwRTdFMDAwNzFCQTJBMzk0QjYwMUY1NzgxM0U0OEYxNkNENTI5MkJFRAorOjEwRTdGMDAwQzI2M0Q1NTc4Q0RFRTgzQzVGODU3MTBFREI4NzIxRkU1NgorOjEwRTgwMDAwMjhGMjk0Q0U3M0UwQkIyNDNBQ0Y1MjQzNTNCQUZBOUQxOAorOjEwRTgxMDAwNTJENTNDRUI2RTNFNEY1RDFDMkI5Rjk3Njg5NzcwQkVBOAorOjEwRTgyMDAwOERDNEVBODE3OUQ1MUEzRDI3RkQyMDY3QUY1OEQxOUU2NgorOjEwRTgzMDAwRDdFOEJEQzMwMkVGQ0QzNjkyM0IyQ0YwMEU2REI1Q0RCRgorOjEwRTg0MDAwN0YxNEY2NDNFQ0Q2RTQwMDNERkI1MERERTBCRTMwREY0NAorOjEwRTg1MDAwNzhGRUQ4MjY1QkNFMzFBODRGRDdGNzQ3NDg0N0JCQzJEMgorOjEwRTg2MDAwRDc3RUVEOEVBRUVGMjY3RURDRjdBMUZFMzc1OEZGNUYzOAorOjEwRTg3MDAwQkVDOUZBNEJFMUY3NjczMDAzMzlFQTUzMDJFN0JCN0FDNgorOjEwRTg4MDAwQkMxMkVBMEU3QzAxRjE0Mzk0N0UzMDZFMzM5MDRFODJDRQorOjEwRTg5MDAwQUIyODlDMkEwNjMwRkMyMjczMDlGRkZEMzk1QTNDRDg2QworOjEwRThBMDAwNjZGMzM1QzA3QzE0QkFCQjA5N0M5QTYwOUQxQjZEQkVCMworOjEwRThCMDAwNjY0ODYxMUU3MDBGODRGMjk5Q0ZCOEJDN0FENTY4ODgxQgorOjEwRThDMDAwRUE1MTQ5NDk4QzVGMzUyNTEyOENBRkQxRkJDOTEzRUQ1NAorOjEwRThEMDAwNTNGRTAxRUQ1MkZCRjgwNTU3RkY2Rjg0RTc5MkUzQTY2NAorOjEwRThFMDAwRjAwQjYxNUM4NDcyMEY3NTMxRjg3MzIxQkVBQjQ2NkUxQworOjEwRThGMDAwRDBGRTlFMUQyRDFDQUE2RDNFODcwM0ZDMzgzOUVDM0REMQorOjEwRTkwMDAwMzlDMDJCNzhGRkVEMjZGMEU4RTA0MDc4Rjg1MzIwQjVDOQorOjEwRTkxMDAwQ0IxNDVGMDAyODU5QjNEMjAwQ0U4RDY2NkYyQUY4OTVDQworOjEwRTkyMDAwNzY5NzMzMzgzNEJFQzNFMEIwRTdBQzAxRjFGODM5RDJBMgorOjEwRTkzMDAwMEZFOTJFRDNEMEZDMjBGNDRGRjk0Nzc3NThEN0E4QTY3QgorOjEwRTk0MDAwNkEwMUNFQkYxRDhCREMwNkUwQjM1RDlBM0NBMkUxRTYxNgorOjEwRTk1MDAwNzhEQkQzODFGQ0RFN0Y4QjgzRURDMzUyRDg4N0MxQzdDMAorOjEwRTk2MDAwOTg3REU2MjY3OERCQ0Y5MUYyOERFMDNFRDg5MUQyN0U3RAorOjEwRTk3MDAwRkU0MkYxNkFCODQzODU1N0VEOEQ5QjEyRjhGRDQ5N0Q0MworOjEwRTk4MDAwN0ZGNDNDODRGRTgzMDM3QjRDQzg4RjRBNzZCM0ZCQTJBMgorOjEwRTk5MDAwMjVGQkNGRTNCOUJCNjRBRjA5OTEzMjZGQUY4NUREN0I1NworOjEwRTlBMDAwQTg2MUU1NTdCMjYzQzcwMTc4RTE5NzhGODE3Q0E4N0VBMworOjEwRTlCMDAwQzRBMzk1QkIwMTY2QUZGNDM2QkI3QTg5NTFCRjZBRDI1NgorOjEwRTlDMDAwMDQ3NjhGNjAxNThGNDc1MkZDQUIwRThFNjc0OUREN0M1NQorOjEwRTlEMDAwNUU5MDJCNDlGOTA0RUYxMzM4NkMyQ0FFQjBGNTdEMDEzNQorOjEwRTlFMDAwNDZCNzI5QkM5RENCRTUxNjAwREVGQUZCMDMyOUYwOUU1NQorOjEwRTlGMDAwMzRGMzhGMjNCRTg4MDZBQjA3RTQ3RTUyODFBRTlFQUQxMgorOjEwRUEwMDAwMDBGREFGMjlCQUZCMDZGMzFERENGRjZBMjQ2OUMwNDc4RAorOjEwRUExMDAwQUEyREIxRUYwOTdERTY1MEY0M0EyQjlFRUIyNDNFQUZEMAorOjEwRUEyMDAwQzM3NjIzN0JFN0M1NkVDNjc1MkY0OTI0NDk4NTk4OTcyMQorOjEwRUEzMDAwNTA5RUVCRkI2OUMxMkJBRjQxNzMwRjI1QTlDMEFBNzk4QQorOjEwRUE0MDAwNjcyMUM1RDc0MTkzRUYzOEEzQjNBNjdFMjc3RjBGNEQyQgorOjEwRUE1MDAwNzk5N0EyN0U5QUYyNkU2NTk5OUE3Q0Y3RTU3NzY4RUFEMworOjEwRUE2MDAwNjc1MDg0NTNFNzdCQUUxREE3QTlERkJCNzI4QTI2N0Y2MAorOjEwRUE3MDAwRUJDNkZCMzVGNUZCMDY2NzZCQ0E2RkRCNTFBQzI5MUY5NAorOjEwRUE4MDAwNTBCRDQ0OTNCRkJERjYzMTREN0QzMThFOUVCRDg3QzNEMQorOjEwRUE5MDAwNTk1NEY0NkNGQjEwM0ZERTNCQjI5QjA1OTNFQTNDRjcwNAorOjEwRUFBMDAwMkNBRjk3RUQyODQ4MDNGRkY3NkFGQjk4MzQzODZGMUVBOAorOjEwRUFCMDAwNEUxQ0U2MENDN0U4NTc0OUJGRUQzOTZDQjc0M0QwRDhCOAorOjEwRUFDMDAwNTc3M0I4RkRFQ0NBNDFDQTQ1RTBGNzU5MUNBMjc4ODBEQgorOjEwRUFEMDAwQkZCRkM5QkZEQkMxRjVBOTU5NkVBOENGREZCNTkwM0M1OAorOjEwRUFFMDAwQjg4RUU5MEUzM0RBQzVGNEZEM0ZFQjcwNkJFQzc1OEEzNgorOjEwRUFGMDAwNUUyRjFBM0NBRTQyMjEzRUJDM0U2QjI3QkNGNjdFNDdFMQorOjEwRUIwMDAwRjAzQUExOEIxNzUyQ0U2RkZBNzY1NzFEQ0M3RTRBRjk5OAorOjEwRUIxMDAwRUQwN0MwMEY1QkNFNjlBNDQ5RjRFMTM5RURCMzJCMDFEOQorOjEwRUIyMDAwMDJGQzk0QTBERTEyNEYwRjUwQzYxNzA0REY1RkExMUYzNgorOjEwRUIzMDAwM0QzRkY1MkQ5RkM3Q0U5OTA2MkZERUQ3OEE3NzdFQkI0NgorOjEwRUI0MDAwQ0FENzFGM0RCRkU1Q0ZDMEZENDgzNDZBRTBGNEI3MTYxMQorOjEwRUI1MDAwM0FGNzZBQ0U2RkFCMTM4N0UxRjk2REI1RUM0RDZCQ0YyOQorOjEwRUI2MDAwRjlFRDZGQzA5Mzg2MDJEQ0Q5QkVCNkVDQTdEMUUzNjY5RgorOjEwRUI3MDAwRjczQ0I1RkE0QjZCN0Q5QkNBM0ZCQUNFMERBMEM3MDlENworOjEwRUI4MDAwQTA5NzI1MzFGRDdCMzc3QjBGNDAxOUI3MURGQUI2RTRGRQorOjEwRUI5MDAwNkM4N0JFNkQyMjlFQjU5Mjg4RkI2NTc1MzJGRDdBQTlBMQorOjEwRUJBMDAwNDVGQzU2RkE3NTkyRjMxQkM4QkZGNzY0MEZDNkZGQkY0QQorOjEwRUJCMDAwMzc0MTI0RjAyRUNCQjU4MkUxNzg4RjNBMUUzRTdFQzBERAorOjEwRUJDMDAwRUQyRkVGMzkxOTdDREJCMjVGQkNCN0EyRThBNkY3MkZCNworOjEwRUJEMDAwREUxQkNCRTIyQ0E3RThERURGMURFMTY0NzgzMDk1QTdEMQorOjEwRUJFMDAwMTQ0MDY4ODdCOEZDQkExREUzRTUyRjhGRkIxMDdGNkZEOAorOjEwRUJGMDAwRDJFNTlBQzE0MzAyRjg3QkMyM0NDQjIwREUyNjYwQjM0QgorOjEwRUMwMDAwQTM3RDZGQ0FEOEExNDNDQUVEMkEzQ0UyQkY4RjJDRjc3RgorOjEwRUMxMDAwOEQ3NzFDNjBCRjk5QjJBQjY3NEFDMDE2MUY3RkE2RjIwMgorOjEwRUMyMDAwRjUxMTI5N0MwQkM2NTNCRjc5MTE3RjVGQ0Q5NDNEQkQ5MworOjEwRUMzMDAwNTM5ODdENTExQjlGQTZCN0ZCNEM1OTVFODJGOEE2RTQwMgorOjEwRUM0MDAwMTc0NzA4QzZBM0I1RTQyNTc2REY3ODcxNDRDMkY4QjU0NgorOjEwRUM1MDAwNkVDRTk2RjhGNkY0OUJCRDlCRDY1RTc4RUFCRjJCRjA5RAorOjEwRUM2MDAwN0M2RkVDNDU3NjZGREUxMjVCREY1OEUxMTQzNDc2MjQ1RQorOjEwRUM3MDAwRkRCRDk1NzhGNzMxRTZGMUZFQUYxNThDQzBGQkY3NTM3QgorOjEwRUM4MDAwOENFRURFRURCMTUzMjk3MEFBQkY3MTNFMDFGOEMyN0U1MQorOjEwRUM5MDAwQjgwRjEzQTNGRjg3OUM4QzlGRURGNzdFOTIwNDY2RTk2MworOjEwRUNBMDAwNkM3MzUzMkVFMDdGMzZCNzgzQzc4OEQ3NUYwQTc0MzRGRQorOjEwRUNCMDAwM0E1MkYwOURDNEVCM0ZFMUQ0QzZFQjE3MzgxOTVGRDE0RgorOjEwRUNDMDAwQzdFQkI3NzVERjY4QjIzMUI2N0M5QkMxRTE0RUUxRjdBNworOjEwRUNEMDAwMjFEMEVCRDJDRDMyQzZGQkNEQTc3MzA4ODBGRDZEOEI2MgorOjEwRUNFMDAwOENGNkI3Rjc2Rjk4MDhGODQxQ0U2RjkyN0YwOUYxNjlGQgorOjEwRUNGMDAwNDU5QjdCNkU3RTk2RTY4QkM2OUFEMDZGMzM3RjBCN0JFRgorOjEwRUQwMDAwODc4NDhDQjUwNEMxMkY1QkI0RTVEMTU0Nzg1N0ZDNTM4QworOjEwRUQxMDAwNEFCNzhCQThEMjM0N0ZGMzczMTgwRkYzRkVEOUE3MzEwQgorOjEwRUQyMDAwRkVGQTIyRDAzM0ZENUVGNEQ1OTNEMzAxRkU3QjhDOTVBMQorOjEwRUQzMDAwQjcwREEyRTlBMjlEODJFNkZFNDQ3MTk1NDU5MzU3RTI4NAorOjEwRUQ0MDAwRkU5NEZEMjM0MkY0NUU4NTlCQ0E5MTk3OUNEQUZCNTNBNworOjEwRUQ1MDAwODNBM0ZFQUU5NzlDRThFRjBBNjM5QzdDQzkwNDc2N0Y5MAorOjEwRUQ2MDAwRUFEMDM5NzY3RTNGRDI4QkM1MDU4NkM2REU1QjM4ODgxMQorOjEwRUQ3MDAwQUU2MzZDMEE3QkJGNDUxRjQ3NDhDMDM5MDZFRkFCRjA1NgorOjEwRUQ4MDAwMzhERkIxMUY0QjJERjc1QzU4QjlENzk2QUZCQTNGRjBCQgorOjEwRUQ5MDAwRDY4QTMyREM5N0IxM0Y2Mzc2OTNCMTE5MkNFRTNENkU4MworOjEwRURBMDAwN0M2MTVBQUI3QjAwN0Q0MDZFQjY4QTJCOENERUVGMzlERQorOjEwRURCMDAwMUQwQjZGMEVFOUU4RkFEMDM5MTY0NzM4RUYxODdCM0Y4NAorOjEwRURDMDAwQUIyREJFRjkwMTlGRjdGQjY3RkIzREYwNkIwQThGRjc5OAorOjEwRUREMDAwMEIxODE3N0ZGRkM2REQ2QkYwN0QxQTlGNDAyMDlFRjM1NgorOjEwRURFMDAwRkM4REQ4RjdDODUyOUM4QURFRTQ2RkI5NkYwM0ZCMzMwMQorOjEwRURGMDAwQjU2MDQxNEIxRUM4RjIxRURGMjM5QUZCMzhFREU3MzdBMgorOjEwRUUwMDAwMzdFNzI3NEYzQUQ5M0Q0QTNEN0ZEN0UzRkRGRjI5RkUzQgorOjEwRUUxMDAwM0U2NUVDOTE3NEI4OUY0RkQzOTdGMDlFRkUyRUM2MUZBRgorOjEwRUUyMDAwRjU3NEFFRTdFNzMzNzQ3QzMwQ0FDNzBEOUE3OEUzMTlGRQorOjEwRUUzMDAwQzAwNzg2QUFGOUI5MTFGOUZDRkYwMEQxRTdFRENCMDBCNAorOjEwRUU0MDAwODAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkREN0QyQgorOjEwRUU1MDAwNzk3QzU0RDVGNUY4N0RGM0RFMkM0OTY2OTJDOTY0MTJBRAorOjEwRUU2MDAwQjIzMzYxODlBMDg4QzNCRTQ1N0QwOThCNTEwODBFQjhCNQorOjEwRUU3MDAwQTE4MjRFMDIyMTZDMjE4MTZBNDU2QkJGMTk0OEMwODA3NgorOjEwRUU4MDAwNjA2MzVEOEE4QTc2QTA0MUQxQTIwRDg4MzVENkEwMTMzMQorOjEwRUU5MDAwQTUwODZBMzU3RUM1QUZENjJBMEQ4MjA4ODgxMjQxMkQ5NQorOjEwRUVBMDAwNkRBNUZDQ0UzOUY3REVDQ0JDQzk4NEE1QjVGRkZDRTI2QworOjEwRUVCMDAwQTdCRERDNzdGN0IzOUY3Mzk3MDkxNDMxOURCOTE5MEI4MAorOjEwRUVDMDAwMENENzgyQjUwQTYzMUJFRDdFQjMzMzk1QjFBMUY2NjAxMgorOjEwRUVEMDAwNEEyMTYzQUNDRUI5MjFDMTNGODBCMTk0MTQ3NkFCQ0Y0NworOjEwRUVFMDAwQ0VEODY5RkNCQjNDOUM3NkQ4OEJFMkIwRkVBRkUyRkM4RQorOjEwRUVGMDAwNzZFNzMwQThGNzU2NjYxMTRCNjQ2Q0M4REI0RDhBMUY2NQorOjEwRUYwMDAwRUExRjUzRDhCNEE2MThFRDRFQzU5OTE4ODNGQTVCQ0QwNQorOjEwRUYxMDAwQkM3QzJCRDYxQjEwMkVDRjc0MTY5RThBODM3RUI3RDk0RAorOjEwRUYyMDAwMjA4NTdBOENEOTlDMDdGQUMxQkM5ODg5MjVBOThDOTUzMworOjEwRUYzMDAwMjhGRTRDMUNCN0QyRDY3RTVGMjk5NDJFRENGREJEMDU4MQorOjEwRUY0MDAwOEFEODQzMTY3RkJBMzYxNEQ2OTM2OUYxNkVDQ0VCM0E2MQorOjEwRUY1MDAwNkUxRjI3MUYzNzZENDkxMURCM0Y4NDMxQUI4RDA1RTJGMgorOjEwRUY2MDAwMDYzM0E2NjgyQzYwMUU4Q0UzRjg5NzlBQTBCRDM2OERGOAorOjEwRUY3MDAwQjE1NTAwOEYzRDMwMzdBQ0NGRkFBNTlCNTgxQTYzM0Y4RgorOjEwRUY4MDAwQjEzMUZBMEIxNDMxOUMwQzBCN0MxNjFGQUM4NTcxNEUwMQorOjEwRUY5MDAwMzFGRDQyNUNGRkJGOTg3RTExQ0VFQjEzQTYwRkMwQkNDMworOjEwRUZBMDAwMUNCNzRFQUM1MzMzMzFGRjk2MThGMDI4NzcyQTdDMUNERgorOjEwRUZCMDAwRTZDQkY3MzkyMDVGQzRGQzkxRjA5MEE5Q0ZBOTUxQkRGMQorOjEwRUZDMDAwQzI4NzZGQ0M2RDg3RjJDRkY3REQ5NENCMjBEREYxRDAxNworOjEwRUZEMDAwODhBNEY2MThGNTY1RkE4QjlBNkFFRjM4Njg3QTZGOEQwRgorOjEwRUZFMDAwOUZEMjI0QzY3NDlDQ0Y5QTlBMzlERTcxN0QxODczNDJFMQorOjEwRUZGMDAwMUVFNzU1NkVGMUU1Mjc0N0Y0MzNDNDk5Q0MxOEFDMjdDQQorOjEwRjAwMDAwNzFENEQ2QjY1RTQwMjcwNzU2QUI0RUM1MDMyOTMzMTVEQgorOjEwRjAxMDAwNjNGQkZEQzFBNEUyNkQwMzc4M0JCN0ExMUQ5RkE3MEE2NgorOjEwRjAyMDAwRTRDNTdBQzNCQUVEREEzRkRBMDVFQzRFMzM1QzJGQTNDMAorOjEwRjAzMDAwN0VCQjVCNjdCOUMwOTM4NTc5NkREOERFRjJEOTU1MzY1MgorOjEwRjA0MDAwRDYwQkZBNTM3NDI3RTYyNTNEOEM4MjExOTAxRUVFQzEzMworOjEwRjA1MDAwNEZBMzYwNUNDNTdGQUI5M0RBRTkyOUIyRkM3NDFFOEVDNgorOjEwRjA2MDAwNUY0Qzc5MzkzRUNCNzYzMTk2RDEzREJDOThBMkNGQzI2OAorOjEwRjA3MDAwN0UwRTMxQkQxQ0QzNjY0QkUwMjIyN0FDQjczOTlFQ0Q0NgorOjEwRjA4MDAwODk0NUNGRjMxMTdGQjA5RUZFNEU0MTJGQ0NFRTNDNzhFOAorOjEwRjA5MDAwOTExODBGRTZGNzY0ODJCRTEwRkIzOTY2RjM1NTYzN0E2OAorOjEwRjBBMDAwNTk1NjQ3QUQ4QTc0MTNFNzE0RjVEQjE5RTIxRENBNkY5MAorOjEwRjBCMDAwQzc3Mjk2REVDRUFFMDY3ODVGMDY5MzVEMDVEOTk3MEZEMAorOjEwRjBDMDAwN0RDNjNDMDBBN0M0OEUwM0NDMDNFMzI3MjJGRTYyQzBBQQorOjEwRjBEMDAwMkQyMTk5QzNFRDBGOEMxNUM3RTYzQjRFNjcwMTMxQ0Y0QgorOjEwRjBFMDAwNDZFMDE3OTMzQkNDMkY0RjQxQkIyRDAzOTBFRkZDODJBMgorOjEwRjBGMDAwRUZGNEFCNTAzRTM0RkVEMkE1QUM4MkYyNUVCQUM3ODRDOAorOjEwRjEwMDAwRjRFMTZFNjM3QTEwRTEyMUUwMkVGQkZGQzQ2OUExN0U3OQorOjEwRjExMDAwOTEwRjk1MzNGMEUxNDNFN0M5ODc4REJGOUM2NDhBQzNBMworOjEwRjEyMDAwNzlERUM1QkM3RDNENThFRTU5NjY4M0ZDMTM4QjlEREVCMAorOjEwRjEzMDAwNTU5MEVGQkQxQTA4MERFQUU3MkM4OURGQTA0MkZEQTAyQgorOjEwRjE0MDAwRTBBNzlFMEZCMjY1NzE1MDNCNkY1RDg3ODZGMjYxRDI3QQorOjEwRjE1MDAwREQ2RDlBMERFQUU3RDVCNTZCMjg5RjVFQkFFQkQxNUMwMQorOjEwRjE2MDAwQTRBQkMzOUY1RkE1M0FCMEZGNkY2NEZGMDAyMEUwRjczOAorOjEwRjE3MDAwMzE0RThFNDMzNkIyQjQyN0UyQTcwOUU3OUQxQUMxNTczNAorOjEwRjE4MDAwRjFGRURGMjJCRjVGNTZERDMxRDYwQUQ1NzI5NzMwMEQxMgorOjEwRjE5MDAwRTVFNTYxQzVGRkVCOTRERUQ4NkZGQ0I0RTAwMDQ0MkZEOQorOjEwRjFBMDAwQTdCNzk3MEUxRUU5NUYwNkY5RUQ5MkRGOTVBMjRDOTY4MAorOjEwRjFCMDAwQ0U1ODQxQTM5OUUwNTlEMEY4RDAyRDA4RUY4MkM2MkI0NAorOjEwRjFDMDAwMzQwNUFBM0NBMTg1MTQwREQ3NTlBRDZCMDFDOEJGRUIxRQorOjEwRjFEMDAwMzREM0Y4ODczRjlGRDc1M0MxRjlGRUQ5Q0FGQUM2ODAwNgorOjEwRjFFMDAwRUY5QkEyRkYyNjgxRTc5NzJEQjFFOTc2NjdBN0RDRTFDNworOjEwRjFGMDAwRkMzNDg2Mjk1MkJFRUU0NDNBMDRGOTlBRDgxQkUwQjE5OQorOjEwRjIwMDAwRjBDRUUzMjQ1RjlGNzI3QTY4RkMyN0I0QTY5RDk5MzQwMAorOjEwRjIxMDAwMkZFNjBEQzBBNzc5OUJERTIzNzkyRkM3OTFGNUU2NkYwNgorOjEwRjIyMDAwNUVCRjAyRUI2NURGRTYxQ0E0N0FCMDVEN0IxQ0QyQ0YyQgorOjEwRjIzMDAwRjc3MTFDNUZERkRGMTkxRjVDQUExMEZEMEZGMjVEMUM2OAorOjEwRjI0MDAwODMwRjU5Qzg2QTRBMjcwQ0Q4NzhBQURCNEMyMzAxQUYzMAorOjEwRjI1MDAwMUQxRDg1MjhGN0EwQ0I2NUM4OTc1NzI1N0I2ODFEQjI3MworOjEwRjI2MDAwRERGQTBFNjczQ0YyQ0JEOUY0QzE0MTgxQ0Y3M0E1QzM1RgorOjEwRjI3MDAwMzc5MkI5REMwQTc0RDU5QjQ3MTE1RUU3QTEzNzNCODQwRQorOjEwRjI4MDAwREUzQ0YxNkZFOTREQTEyRkE1RkU5NEU1NEEzMkM3RTdCOAorOjEwRjI5MDAwM0RDRTZFRjVBNjkyM0NBQ0FCREU3NEIzRTBCRDAzNjEyRgorOjEwRjJBMDAwM0RFQ0E4QzlCQjkxNzUxRDM3MjBFNERCRDE3OEREOUExMAorOjEwRjJCMDAwMEM2OTgxQzI3QzM4NkVFMkQxQ0Y5ODEyMjE4NzE2MEI3RgorOjEwRjJDMDAwQkVERTJBRTlDMEM1NkU5RDEyNjMxRDk1QTIzRkQzRjQzMAorOjEwRjJEMDAwMEU0QjNCRjZEM0EyMTBGRDc3NURBRjg1RUE4MTVDRUM2NworOjEwRjJFMDAwODFGM0JFQUMyN0M4NERBNUFCREM4QzgxOEY1Q0FDOUY5NQorOjEwRjJGMDAwRjVCNkZFM0ExMkM5RThFNEM2MDQ0MEZGOTlGMEQxMEIxNgorOjEwRjMwMDAwRUJGRjJBNEVFRjhERUI5M0YwMUY3QzVBQkRENTM3QTA1MworOjEwRjMxMDAwMkJGQzJGMTQ3MEJFQ0NBMUY3Qzc3NjdGMTM3Q0Q2MURCMworOjEwRjMyMDAwNUU0NjI1NzM3QkU2QUE2NDhFOTdBRDBFNTEyRkNFNThBQworOjEwRjMzMDAwNkY2NjMyODc0QjQ1QjI5MTJGMjNGMDM3MkEzOTg2REQyRAorOjEwRjM0MDAwMjNFNUYwRDE3ODVGMDE5NkZGRTFEMEQ2MDRBNDIzODlBQworOjEwRjM1MDAwMjcyOTdGQTJGMTE1RTZCM0E1MzQxRUMwNzkzQ0I2OEZFQworOjEwRjM2MDAwRDYzRkIyN0RCNDFFMEFCNzBGRDBCQ0Q3MjMxRDIxQkYzNAorOjEwRjM3MDAwMjExRDc5Qjg5RTU4M0YyMDNDM0Y0OUU3N0VCMUNFMUYwMgorOjEwRjM4MDAwRTJGNTI5MDhCRkU4NzkzQThGOUE5NDMzQ0QzM0I5QzNBRgorOjEwRjM5MDAwQUQyMEZGMjdFQjRFNEE1RjNFNjQ1MjcwNUVDRTBFNERBRAorOjEwRjNBMDAwQzE3OTM5ODU3RThDRDY4MzIwMkUwNDVDNzkzRjZGMDgyNQorOjEwRjNCMDAwQjlCMUUyQUI5OUU5ODhFNzE1ODVGRUY0NkFBODNGRDlBRgorOjEwRjNDMDAwQTFDRjQyMzhEQ0UzRDRDQjcxN0VBNTBFN0QzNkU2NEY2QgorOjEwRjNEMDAwQzU3MUZFMUY5NUFDQ0ZDMUVGQzlDMjhFOEE5RTY3QjVCRAorOjEwRjNFMDAwQzAxRkMwQjMwQUVCMjU4RTYzMDFENDg3OTc5RkI0MDc3MworOjEwRjNGMDAwNDFDNDAyMDg2MERFQTAxRjEyNzU2NzExRUFCMUM0NzUyRQorOjEwRjQwMDAwQ0M4Qjc0OUE5MkQwRDE2QTg1N0NDNzQzQ0NCQjAxRjI3NQorOjEwRjQxMDAwRjkwMThGQzk4QUZBRUQzNjdEMTlBNjJCQkU1MkM5RUVDNQorOjEwRjQyMDAwNUM1MUM4ODJDQkE4MUY2RTg3QjJCQTVFNDFEMkRGQzBFMgorOjEwRjQzMDAwNkY5MUY0QkE0Q0MwNzk1OTMyOTc3MzYwODdENDI0NzNCMgorOjEwRjQ0MDAwN0U1QTlBMUM2MTg3NDgzRUVBQ0VBRTg4RTBDM0ZBRjM0MgorOjEwRjQ1MDAwRTRDMzVGRTA3OEU3QzE4NzBGMDgzRTdDRjA1Q0Y4RjAxQQorOjEwRjQ2MDAwQjEzMDFGM0U4QUY1Q0ZDNjg3Q0YwODNFN0NFMzJDN0NBNworOjEwRjQ3MDAwQjg1QkMwRUQ1RDUxM0YwNjFGM0UxMzhCMEZERDgyMUU1MgorOjEwRjQ4MDAwMjRCRDIzMUZBMkJFMEYyNTc3Q0FDRkRGQzVBMkY3NzMwNQorOjEwRjQ5MDAwRTBDQkU2RTQ3M0IwMEIzQkZCM0I0N0ZBRUZDRUZFMUI0MQorOjEwRjRBMDAwRTMzQUIzRkRCN0M3RUVBNEY1NDg3RTA2N0U3OTMzOTlGQgorOjEwRjRCMDAwRjQ4RUZFMTZDMjA1RjhFNTZEQ0UyRkIxRjlBQjUzREYyMQorOjEwRjRDMDAwNzQ3MDM5QzE1ODQzMDJEMjhGOUNFN0U3MDJBRjAwQUY5NgorOjEwRjREMDAwMEZCMDFGQzk2N0QyNEY5MUYwRUJBNDA3NjFGNzFFMTU1QgorOjEwRjRFMDAwNjk2MkM3NjcwQ0U1MDJDMDZENkYyNEJEM0UyNUY4MjUzMworOjEwRjRGMDAwMzA5MjExQkY4MDQ3NTU4NDc2RTU0QjQ3QzE4RTQ0QUJBRgorOjEwRjUwMDAwQ0ZDNUU3NUJCMEI2RUQ3NTY0NzVBNjM1MjQ0Qzc1NzQ1MAorOjEwRjUxMDAwMEZBNzIyMTdCNzczQkE4MzEzOEM3RjJDOTYzQzZENDFDQgorOjEwRjUyMDAwQkNEOUJCREFGM0QxRjhGQTQ0QUNDN0U5NTJDRTg4QUYwNAorOjEwRjUzMDAwQjNDRDQzQzIwRkU3NzEwOUNEQzM2MzVBMTVBMUU3Q0QxRgorOjEwRjU0MDAwMkU0NUYyQjdFNjgyRjRGMjcxMUQyQUEzNzk4NTEyQzAyNgorOjEwRjU1MDAwODVFQTk0QTcyQzFCREEwRkVEREFERTFFNkU2Rjc3QzFGOQorOjEwRjU2MDAwM0MyRkQ3QTFGRDgwNzA3QjE4OUZFNDVERUZEQjQwOUVCMAorOjEwRjU3MDAwOTE5REFDOUI1MDNGQURDOEUzRjQxMDRERjc4RDY4M0ZCMworOjEwRjU4MDAwMEM4OEMwNTc0MzI2RTFFQjNFOUIzRjEzRkI2RkQ0M0NGNgorOjEwRjU5MDAwMjZCNEVCMUFFQjlENEE4MEYwNTgxRDhGRjQ2M0I3RUI0RAorOjEwRjVBMDAwNDRCNzMxRTQ5MEM3NzU3RTcyQTg4RjhCQ0JBMUJFQUVGNQorOjEwRjVCMDAwNzM5MDQzMDM1QzlENzJFODIyQUNFRjNDOEIxQzFBMjNEMgorOjEwRjVDMDAwRUExN0I4Qjg3Q0U5NEUwRTVEMjZFQTE1MDlGOEM2OTAzMAorOjEwRjVEMDAwNDM2MzVDMzFFQ0I5NkQzNjlERkE4REMxQTc5NzYzRkQyRAorOjEwRjVFMDAwNENBN0FFQkJCODVFMkI3NDQ1RTgzNTY4MzcxNkYzRjcwOQorOjEwRjVGMDAwODlGNkFCMUI0Q0ZEQzg3RTY2RjFERTU4N0U4NkNGNjU3MgorOjEwRjYwMDAwMzdEODI5OTcwQUZGODFCNUZDRjNGNzc3MEQ2N0FDMEE2NQorOjEwRjYxMDAwOEJGODNDN0RBRUQ0QjAzRkQxRDhGMDU5MUFFMjFGRkUzMgorOjEwRjYyMDAwMEM3MTk1MDc5Njc5REZFRDgzNzg3QjQ3NjU2ODg3M0U5NworOjEwRjYzMDAwRjAzRkVEMTY4NDc3NzM3Q0UyNDA3NjQ5NzhEQ0FBN0Y1MAorOjEwRjY0MDAwMDA0MUE2MDA1RUZFNjFBMjU0RTI3MTYxQ0JEMjIxMENBMgorOjEwRjY1MDAwRkM4OEMyRkQzRkU0QTI1RDc5NkNERjNGMjgzRUQyNjFBOQorOjEwRjY2MDAwMkZGM0UzRjgzQkI2RjMzOEM5ODlCNzY3QTZBMDdEMkUyMAorOjEwRjY3MDAwQzc1RjhDRjg4Mjc5OEQ1NzA3MzQ4NTYwQkRDNzc3NTk4RAorOjEwRjY4MDAwQkNBODZGNTVFNkY5NTUwMUNDQTc2QTk3OTkwNTQ5NEU3NAorOjEwRjY5MDAwMzExQkQ2MzdGM0U5MzJGM0FFMTU2RDZBMjJFNkI1ODAzOQorOjEwRjZBMDAwODg2RjI4QTdDOTlGRjEyNDIxREQ5QTc3QTkwQ0Y5OTBDQQorOjEwRjZCMDAwQjk3OTc5ODBEOTk2OUUwNjdGMzM2OUE0ODk3OTIyRTI0NworOjEwRjZDMDAwMjFDOTdBM0NGMzQ0QzQyNzUyOEE1RDg2N0NBQTJGRDM5MQorOjEwRjZEMDAwNTBCRkM3QjQ1RTg2RjIwQ0ZGODU4NkYyQUMzOTgzMEQ0RAorOjEwRjZFMDAwRjk5Q0VBRDE4NkZBM0RDMURGODlDQ0U3MDVBRTMyRDQ3OAorOjEwRjZGMDAwRUY1RDNGRDU5MEVGREI3MDkzQTFGRTA1NkJDQjBDRTU4MgorOjEwRjcwMDAwRkQ4M0YzMENFNTE1QkI5RkI3QTA1RjdERDFBNkM1ODYzMQorOjEwRjcxMDAwRUYxNzM3REQ2NTY4MDcwMDY5RUIwMzc0MzI4QjcxRjgwQQorOjEwRjcyMDAwNUZEMkJDQ0M1MDdGNTZGQkJDNDk0OEI3ODM0MkFCOEMwMAorOjEwRjczMDAwRUQxQUNDMDczODNDMDMwQ0UxRjkwNUYzNUI5MENFMzRBRAorOjEwRjc0MDAwRDZCMTMzMEJFMEJFMzBBODc4NDM1MDZENkU3MzVFNkY1OAorOjEwRjc1MDAwRTQ4NzJGREYyQ0RFQTUwQzg0NzlBREU1RUQ2NDNGNzNFMworOjEwRjc2MDAwODNDNkZDN0M3NTMzRjE0RjM0OUVBQjU4QUYyNENGNTAyOQorOjEwRjc3MDAwQTQwMzk1MDU5NTMwREVFNzZGMzJCNjY3MThFRjgyNzYwMQorOjEwRjc4MDAwRjNDNTdBQTJFOUUyMEI1NkZENzAwMUQyNDc0MDZGRUI1OAorOjEwRjc5MDAwOTMxNjVFQjc5OTM1MEQwRkUxNzc0MTI3NEU0MTI3NzJEOQorOjEwRjdBMDAwRkQ3MkZFNzJERDRFRjgwRkNCNDFFMTVCOTBDRTY2MzcwNQorOjEwRjdCMDAwMkJFQzUxQTVFQkZBRTZCNERDQkYyMjJCQzYzQTE5MEJCMQorOjEwRjdDMDAwNUFEMERGOEU5RUZGMEU5N0MzN0QzMDAxRkU5MUNCNzIyMworOjEwRjdEMDAwMzE2RUM1QkFGMDg3OURFNEYxRjE3NTZBRDAwQTc0QUQ1NworOjEwRjdFMDAwMDZGQTQ1RjE4NzcxRkREMTcwM0M1RjdFRjEwODM4NTgwQgorOjEwRjdGMDAwRDM4REZDMTJFNzg5OEZBNkI3RTEyMUQ2MTVBRTA5RkQ5RQorOjEwRjgwMDAwOEM3QzI0RTEyOEUxRUFGMDY2QzZBNDJCMEZGQ0M3RTE1QQorOjEwRjgxMDAwQUJCMzFGMTNCRTFEMDhERjhCQzJGMDNENjZGMzlGNDBFNAorOjEwRjgyMDAwMzk3Q0UyQTM2RjU1QTIzQjdGRkIxMEQ0NjNEREU5QTVEMQorOjEwRjgzMDAwNjQ0N0QxREY0NEZENUNBQzVGOTUwMDcyMzEwOUZBRjk5MQorOjEwRjg0MDAwRUM4NzdDRTRCNzRFQjlCQ0E0Q0MzQjBFRTRBMkEyRjg5MgorOjEwRjg1MDAwNTk0QTZBRjg3QjlCQUUzQTg2MDJCRUU2MzdBQjVFRDQ2NQorOjEwRjg2MDAwQzNDNzM0N0JCRDcyMDkyREQzRTM0QzQzMjUyREYxQzZBQworOjEwRjg3MDAwRjEyOEYxQTZCNEJDRkU3NzA1RTAwNTZERkMxNjhDQkYzRgorOjEwRjg4MDAwMTY3QjZEMzg0RkM2QTY1MzlDNTMwMUY3RTY3NDAyRTkwOAorOjEwRjg5MDAwRDlDNDE0RDJCRjNBQTNGOERGNzFFNkFEODVGRTZBMUQ2NAorOjEwRjhBMDAwQkZCRkU4MkNGMTEwNTcwQUQ5MEZGRUI0NzhCNDNGM0EyNQorOjEwRjhCMDAwREE0RjNDODdERDZCNkQ0RTFDNjc4QURGNEZFQjE5ODE5OQorOjEwRjhDMDAwMTMwNEJCOUEzOTAxNEUxMUYxMjI2ODk3OERFMzRFNzlFQQorOjEwRjhEMDAwRkM5NzA5NjgwRkJGNzRFMEI4NEFGQUU1MTMzN0Q5QzMzQgorOjEwRjhFMDAwNEYzMTVGN0Y5NDBGNURFREVCMDBFOTNENjlBRjgzN0ZBMgorOjEwRjhGMDAwRDQzQjg1REJEQjdENTMyMkZEQTM0RUJCRkFDQ0ZEODBFMAorOjEwRjkwMDAwREREMTBGRUQ5OUVFNTJFNTM1OTVGNDY5ODcxMkVGREQwMworOjEwRjkxMDAwMTA0MzlGOEU0QzMxRUFGOTRCQzNGMUI4OTEyOTExRkE4QgorOjEwRjkyMDAwNzNFMUVEMjc3NkUyM0MwMERFNjM3MDlFMEUwN0Q4MzU2QQorOjEwRjkzMDAwQ0EzOUQ5MzU5NzYzM0ZCRjRBNDgyNEJBRUVEOEFEMDZENQorOjEwRjk0MDAwMkY4MDA2Qzc2RDlFMjQxN0RBOTE0MkNGMkExQUU4MTAzRAorOjEwRjk1MDAwNTc4NDNGNkI3MzBERDA4NjYwNzlGRjI0MTZDMzRGOTE5NworOjEwRjk2MDAwNjkxMUQ2NEIwOUU3NUY4QjMzRkFBMzJCMDZGMzc5NEQ2OAorOjEwRjk3MDAwMTFFQjVDMjlFQ0E3RjIxNDZFRTc1NDYxMUMyRTI1MUNEOAorOjEwRjk4MDAwODdBQjlBQzZFM0NDMEY0NUM1MkZDQjUzMUM1NDdGQTUzQworOjEwRjk5MDAwQkRBODFDRDdCRjIyNEYyMUJCNjk4NUEyMThGNjkxNTI4MgorOjEwRjlBMDAwNTMwQUNCNzFCREI3OEFGRUNCQTE2RjFDRjdBOTVFN0M1MQorOjEwRjlCMDAwNUVFRTI4RkYzRDBGRUIwRkMzOTRGNzBCOUNENDFGRTlCRAorOjEwRjlDMDAwQ0ZBMkFBMzFFMTM5MkY0NUM0QjFFMzk5QjRCRjg5NkYwMQorOjEwRjlEMDAwMjYwQUJFOTkyMEU0RTU5NTdENDE1RTEyNzNFOTkzQzYzRgorOjEwRjlFMDAwNDNGOTM4NTFDRUQ0NzU3QkFDNTAzRUYxMDIzMzQzM0FFMworOjEwRjlGMDAwMUI4NzcyMDlFNUJDRDNGQzU5N0JCRkIwOUM5RkQwQUY3RAorOjEwRkEwMDAwN0EwNzhBODcyQkQyRTE3Qjg0M0MyOTY2QkUyQ0E0ODNBQgorOjEwRkExMDAwMkIzREM2RUYxM0Y3NEMzODhDRkMzQTkxNjlENDBGN0QxRgorOjEwRkEyMDAwQ0ZFMzcwNEQ3MDg1RTk3RDU5NEFBN0JDRjc5QzA2QkVBRgorOjEwRkEzMDAwMEVDNUZCMUYyOEMxRjhDMzlGNTRFRjA2NkFENTM2MjRCNAorOjEwRkE0MDAwRDIyRkZCODVDMERCNkFFMUE3RTAzRTEyRkExRjJFOTFBMAorOjEwRkE1MDAwNDZDM0U3MTcyOTNDRUVCMERCRUVGQjA1QzJGMzIxNEJCMgorOjEwRkE2MDAwREI0RjcwQkUyMTRCN0I2RDEyOEVGMzAxQTM3MTMyRTcyOQorOjEwRkE3MDAwRThBRDk4MUZFNkYzMzA4QzEzQUZDODYzNzYyRkQyRTc1QQorOjEwRkE4MDAwMjAxM0M1NDFEQzdFRTczODBCRTREREVCMTRCNDg0OTkyOAorOjEwRkE5MDAwNTk2MzAxQzdFMEIwNUM2ODRFQzkxM0YzQUE2RDREODI4QgorOjEwRkFBMDAwRkE0OUVCQkU2MUJEQzg3RjcwOEU3M0EyMUM5QUM1NjIxNQorOjEwRkFCMDAwQzYzNTlGMTY3NDMxRTVGMTVFMUFGQTYxNDkzNjQ1MEY3NQorOjEwRkFDMDAwQzY1OEM3RDMwMkNGMjAxNzM2RTEzQTJFQjdFRDFCQTI5NgorOjEwRkFEMDAwOTA3RUUwN0UwN0JBQjJGNDdGMDc0Q0MxOEQ0QUQ3RjYxQworOjEwRkFFMDAwNzZGQkQ4RTc5MDBFMjUxRDVGQUFCMkVBMkQ3NjRFNUYxMQorOjEwRkFGMDAwNTMyMkU0NThCM0E0QTc3MzhDNDcwRjlCQzM2MkM2NEQyRgorOjEwRkIwMDAwREYxNzc4MkFCN0Y5NUVDMUY5MEVEQkUzQTFGRDhFMEE5MworOjEwRkIxMDAwMjlFRjY3OTk5ODA2NzQ3OEEzMjBDMzFCRDdCNUZFOUQ3QgorOjEwRkIyMDAwRUM4QjFGNEU5RjU2QTVERENFQTg3Rjg2RkIwRjE1MEJENQorOjEwRkIzMDAwMUM0MURDOEZBODY4QzkwQjUwQkM2OThFNDJGQjI0NTU2MAorOjEwRkI0MDAwMkRFRkY5MzA1RjMxNzRBODkzRTQ2NDgyQTIxQ0VDNDc3NgorOjEwRkI1MDAwMjYzRkUzNzI1MTYzMDcyNUZEQTkwMjQ4RDBGRjM0QTE3NworOjEwRkI2MDAwNjc0MDlGQUM0RTgwNzU1NUFDNUJERjlBMDE0NTdGMDFDNQorOjEwRkI3MDAwQzMwMUYxRkY5MDg5RkI3RkQxRUI0QThCRTdGMDU5MzE0QworOjEwRkI4MDAwMDVGQ0UwNDEyODc2NEZBQ0RDOTE4RDc4QUVCRTUwRjE5QgorOjEwRkI5MDAwODJCMUIyRjRGOEVFNUQ5NzhBQjg1ODI2OTYxRkRGQURCMQorOjEwRkJBMDAwNEIzRjMyOTNBNjExNjIzMDlGQTdFMjNCRjNCQTJEOURFMworOjEwRkJCMDAwRTQ4MUNDMDczMERGODhDQzM2MUFFQ0I1MDc4RUVGQUU4NworOjEwRkJDMDAwMUI0MEY0NEI3QTg5NjkyMDBGMkUwRUYzRkI0N0FBRkZFNgorOjEwRkJEMDAwQTM5RkMxQkFBRjAzNjVCQzY0MzBBNjFBOUI0RTc4NEE5NgorOjEwRkJFMDAwQTc3NTVFMkJENjE5RjgwNzUzMEVEQUMyNzBCOUFFNjU0OQorOjEwRkJGMDAwMzdDMUZCMjMzMzhDMDdDQzYzMkVFMkEwMzFERjk1NDQ2MQorOjEwRkMwMDAwRkJDOTYwM0ZEMDNBQUZCNzM1OEM0N0JEN0VDQ0QyMzEwRgorOjEwRkMxMDAwRDA4QkYxODRFRDFGRTYwNDYwRkM0RjdGN0VDMkMxODA3MworOjEwRkMyMDAwRUVGRUFBNzUzOEYwRkJBMUJCREY3N0U4ODBERjRGRUY2RgorOjEwRkMzMDAwNTY4QjkxN0U2RjExN0E1MkMyMkRDRUNERTlFMTY2QjcxNworOjEwRkM0MDAwOEZCOTUxMUVENjlDMUFFRThGOEMwQjJENDkyNUZEMzY4RgorOjEwRkM1MDAwMzcwODMzOENCMDk3RTY2RjRBNDAwQkFFMzM1RkQ5OTRDOAorOjEwRkM2MDAwNjJDODRCQkQ1NzY5NjVENUIxRTJBMDk3QkEzOUJFRTYwNworOjEwRkM3MDAwNkU1RTZGQzlGMkUwRjg3RTE3OEU3RjA4RjQwQkQyQ0Q2RQorOjEwRkM4MDAwQTE2RDhFMjBGQUVGNzIzRTY1OUIwNzU5RDA5RUZBNkJFQworOjEwRkM5MDAwOEI5NTg1RDAzRkQzREFDQ0NDQ0VFNUE2MDJGNEVBMTcxQgorOjEwRkNBMDAwNzQxOTNEQ0Y5REFGMjQ1MDdGRTUwRjcxMzk1QjBBNjMxNgorOjEwRkNCMDAwMkQwMUI4RkE1QkU2OTIzQzhENUU0N0Y5QTc5RTA5M0Q5RgorOjEwRkNDMDAwMDBERUU1MkJDMTcyRjFGMEZBNzcwM0RFRkM0QkVFRjlCMgorOjEwRkNEMDAwMDZFREQzRTg3NTk2MDY4Q0YyNzU2NkJEMzEyRkU1N0U4QworOjEwRkNFMDAwODVDMDM3ODg5QjdBQjRGM0NCMUI4Q0Y1MkE1QUVFQTVENgorOjEwRkNGMDAwRkUyQjUwMkVDQkVGQjBGRTIxNkU2MTE3MEU2NzIzNTAwNgorOjEwRkQwMDAwMEVEN0RBN0IyNUY5Q0ZBMDY3OEZENjgwNDE5RUNGRDg1QQorOjEwRkQxMDAwOTExQTFCQTU4NzZBMThBNUNDRUQyMTdDMkM2ODc5RUY3OAorOjEwRkQyMDAwQTc0ODM3MEI5QkI3NThCMDlGQkFFMDc4Mjc5MDMzQjNGQQorOjEwRkQzMDAwQjYwMEM3QTMzRDhERkJFM0QwNzQwNkVFOEZDMzNDNkJDQQorOjEwRkQ0MDAwNzEyMjE5Qjg3RkVFMUJFRjA2N0M5OTlENTFGQkU1NjI4RAorOjEwRkQ1MDAwN0REMzA1RkM5OURENDVGNDM1MURENzMzMTBCRjZCREYyRQorOjEwRkQ2MDAwNDZBRUU3RjhBRTIxMzYxQzc3QjI1Q0Q3MDg1ODk3N0FEMgorOjEwRkQ3MDAwRUVFQjkyRUI5MUVCOTNFNTk1MjAzNzYzQzkwNTQ5REZGNAorOjEwRkQ4MDAwQ0NDREY1Q0RBQ0M2MjkyQjMyMDExNEI1REJCRkEwMzhFNAorOjEwRkQ5MDAwMDAxMzdFODgyNkYwQTNEOTU3OTExRkEyMzFGMDMzRjhDMworOjEwRkRBMDAwM0FCOTFGMTI2MDdCNTgwNDlENDVEMzUxMDVDMjAxOTk5MQorOjEwRkRCMDAwRDhDOURCRDk4NDdGRDI0OTNGMkQ2QjA4MUUxMkNGRDAyMgorOjEwRkRDMDAwNjEzQURGQjcwQ0E1RTNCRTI1RDBEMTgxMjgzQTMyRTRGMQorOjEwRkREMDAwQ0IxQjhDRjlBRkNERURCOUM4REY0MDJGMDcyMkUxRkI3QgorOjEwRkRFMDAwNzVENDc5MTk5OUNFNzBGN0UyRUJGN0U4MTM5QzUwNUU2MQorOjEwRkRGMDAwQ0U3QzJCOUNCNEZFMDZFMkMzNDM1QUMzQ0U5RjIxREZDOAorOjEwRkUwMDAwMzU3MkJBRkZBQkMwRkJDNzZFNUYyREUyOUQ2OUZBNDA0OQorOjEwRkUxMDAwOTQ2RjQ1Q0IzMjU0MzdENDJCNURBRDM4OTE5RjY2RDY2NQorOjEwRkUyMDAwMEQ5QTgwN0MzODk4RTlENERGOEM2RUVDQ0I4RDAyRkU4NQorOjEwRkUzMDAwNjVENTY2NjYwMUUzQTBDQ0MzNDhBRTk1NkQ1MzgzM0M5RgorOjEwRkU0MDAwNEVBN0RCNEIwMEJFNzMwNDFFMkE1NzZFQjE2NDQwM0FDNgorOjEwRkU1MDAwQTdCQTgyREIzRDQxQ0UyRjAwNTdCMjdCRTZBRDZFQTUzRgorOjEwRkU2MDAwMzgwMkY4NTEzMUY5NERFQUE5Q0EyNjYzNzkxNTVCNEQ3QworOjEwRkU3MDAwNzhBODhBQjI3RjgyOTIxRUJEQ0M4QkY0RThGRkE5QzMxQQorOjEwRkU4MDAwQTYyNDlEN0RCREFDNkI5Qzg4RTI0OEM3NzdGNTI1N0I5OQorOjEwRkU5MDAwRjhCOEM3RDMwM0VCRjkwMUU3NkQ2OEU3NkJGRTExRjgxQgorOjEwRkVBMDAwMURFMDQ0RkFCMjYzNjk0MjEwRURGRDdEMjdDMThGNDUyNAorOjEwRkVCMDAwMUJENEU5MUY2MTAxQjhCNDdGOUM0MzdBNUNEMkE3NUM3NAorOjEwRkVDMDAwNEY5NTZEMzVEMTY3MTUzM0ZBQzlBNUUwOTA2MUZDQjc0MAorOjEwRkVEMDAwNzQ2MzRBMTBDRjAzNDBGRjAzOUJEMThFREE2ODI2M0I0MAorOjEwRkVFMDAwMjlDMDE2QTczM0EwMzNERjcyMzNDOUMzQjJFNjY0RjI2OAorOjEwRkVGMDAwRDNDQkVBRjhCRTUxRDlFNkU0QTBDQUUzMEY3QjMwRUVEQgorOjEwRkYwMDAwMjJGMUIwQUY2RUFDMjU4M0YwOTRFNzQ1RkRDQjlBQ0RERQorOjEwRkYxMDAwMDZGQTk2Rjg4OUY2NzNFN0Q1QjdFRTRDRjc3NDFGMDcyMworOjEwRkYyMDAwODlDMENGODE2RUYwNzMyMDEyM0Y3QkEyRjBDM0VFNEVFQQorOjEwRkYzMDAwRTE3MjY2RDExRkZCRTIzRUQ5RjFFQTM4QUYxQUMzNkYxNgorOjEwRkY0MDAwOTI3QTg4NjUwMzAxMEUwRkM3MTM4QjMzMzkzRTk4RTYwQQorOjEwRkY1MDAwNEQ0MzdDOUU1ODNEOENGMDE1OERBN0UyN0ZDRDI0N0NDRgorOjEwRkY2MDAwQjA4RjFEMENFM0NDMzM3QUIzNUJBN0MyRjc1QjE1Q0UyMQorOjEwRkY3MDAwMUYzMzZBQUYyQzQ2N0RGRDk1OTAzM0VGODI3Q0QyMkRFNgorOjEwRkY4MDAwOENCRDA3RjI0OTA3RjlGNDNFQzgyRENDN0Y1MDkzNEU0MworOjEwRkY5MDAwRjkwRjZCM0M5NEZFQjlBNjFGQTUwNzg0REQyN0Y5MDY2RgorOjEwRkZBMDAwMDhDMDgyNzZFMzA5QzEyRjI3QTRGQzYyQjdBNUEzRTlBNAorOjEwRkZCMDAwNTBGQ0FGRjc4Nzk5MzA3NDFCQjhFQkFBRjE2MENGNUNBNworOjEwRkZDMDAwQUQxQkY1RERCNDZCOERGQUFDRERFQzlDOTA4RTc2RUU1RQorOjEwRkZEMDAwNEE4NUY2NTNDQTdDNjMwQ0Y1OTlFNkIxNEM0MTdGQkQ2NgorOjEwRkZFMDAwREY5MEYwNzdCMjVGM0Q5NkE5QzBFRjM3NEU0QTMxRDQyQgorOjEwRkZGMDAwQkZCRTNFQ0I5MDRGNDhGNUQwRkNBNjE0RjczNjdDQkY3MQorOjAyMDAwMDAyMTAwMEVDCis6MTAwMDAwMDA2OUZBNDU4NjdDRTk0OTAwQzIxMEE0NjYxN0UxRTEzNjI5Cis6MTAwMDEwMDAxQjEzRjEwNDE3OEZGMzhBRjMzNERGNTY4RkU4NzEwNzRGCis6MTAwMDIwMDBDQ0Y3REJCN0NENTQxRThEMEY4OUQ3NTk2QjREQ0MwRjU0Cis6MTAwMDMwMDA1MzlCQjkxNkQ2MDZGRDFFNjgwMDNDNDFCQjJGM0Y3MjhDCis6MTAwMDQwMDAzMEE0RTMxNTlCODdCQzMzMTJGMkZCMzY5QjI5NUVCQkMxCis6MTAwMDUwMDBBRjJFRTUzRUI0OEZGNjZENEU0REM0MzhCMDdGODUyQTg1Cis6MTAwMDYwMDBFQzA4QTc4NTQ1QzhBQkIxNzU0QkU5OUM0RDY5RDBFQTUyCis6MTAwMDcwMDAyNTdCNjE0N0UwMDk5OUY3MjhDOEY3OENGM0NCMUUzNTNCCis6MTAwMDgwMDA4ODcxMzlDMDFGOEY2NzNDNjNBNTdEODg0MzYwQjczOThECis6MTAwMDkwMDA0MTJGMUM1MjU4MURBNkE4NTg5MkEwRkNCQkI2RDQyMEQ0Cis6MTAwMEEwMDBGMjczRjFCRjU0M0QxREU5RTk5OTM4QjFDRkE0NTA3RkY3Cis6MTAwMEIwMDA0N0RFRUJCQjYxMTVEMTk3QTcyOTQ0N0M2QjI1RkY2NzExCis6MTAwMEMwMDA2NjNCNUYxRjUzMDY2NzIxRkUwRjI1MzMzRDE5MjY1MUZFCis6MTAwMEQwMDBCOUY4QzNCRDFBRTA2OTZFN0VEQkMwMTBCNDlCOUUxN0YxCis6MTAwMEUwMDA0QUJEMDFEQTFENkQzNEQzQjkxQkVDRDcwOUY5Q0FERjVCCis6MTAwMEYwMDA1QUQ3NzMzOUEyRjc0MDdGMjIwQ0NGRTA0MDVDRjcwQzRGCis6MTAwMTAwMDA5M0VGRjI1NEMwREY5MUQ5QzE4MTI0Q0ZFRTRFMjVCRUNBCis6MTAwMTEwMDA4QTg2RkIwMThCOUZFMDFCNDAzRTUwQzJGMjMxQ0M2N0M4Cis6MTAwMTIwMDA3Q0ZGMTA4NDVBMDZDQTk5OTk2NjZGMUFFQUE3MDNBQjM2Cis6MTAwMTMwMDBDRDY0Nzc4MkZFNDhDNEYxMTlEQjRBNzQ3QzQwRjM0Q0VECis6MTAwMTQwMDBDMDc1MUZBOENGNjMyOEFGRTRCODY1QUI1NUYyQjM5MDc0Cis6MTAwMTUwMDBGRUE4RkVGREFBMUY2QzA0MjZGNTU0QTA1RUYxQjMxRTk2Cis6MTAwMTYwMDA1REU5RTYyNzhCNDZGNEMwRjU0NERCQjczMkZEMUE3ODJCCis6MTAwMTcwMDBENTFGNjEyRkNDREJBRUZBRDAzRjYyNDNEQkI1NkIyRkNFCis6MTAwMTgwMDA4RTVDNDcxRERGQjc0OEU3RkRERjI2RTRGQTgyNUU2RjJECis6MTAwMTkwMDBFQ0I1OUI1MEFFRjc0RTQyQkZFN0YwMUU5NUU4RUM3MDExCis6MTAwMUEwMDBBRjg2RTFFOUJERjE3OENDNkJDM0VGODBGQzk3MjU4MTg4Cis6MTAwMUIwMDA4MzFBRTQ5RkIwRkExNzIwNUNFNzlCNTYzRkExNDBCQjJGCis6MTAwMUMwMDA2MzJERkJFRjFCMDNFRDhFM0M2QkY2RTJCMEYzOUU5OUMzCis6MTAwMUQwMDBEQjkzRjYxOTg0N0RERDU1NkVFOUQyM0U0ODUzRDJEMUNBCis6MTAwMUUwMDA4RTcwOTJERUY2RDRDMTIwQjRGRTIwQ0RGMzY2RDZCNDc0Cis6MTAwMUYwMDAxQ0YxRTY1Q0MwQkZFRjFGRTY1ODg1NzE5QTk5QzAxRURFCis6MTAwMjAwMDA5MTc2Rjc3RTMzQjcwQkZFMjc5NUZCQjU1MkJGQjdBNEE3Cis6MTAwMjEwMDA3MkY5MzJEM0M0RTk5QUJEQTI5MDlGOEFGNjRFOUYwODI0Cis6MTAwMjIwMDA3RDJDRTVGMjlBNTQ2RTQ3NzRFQTY1RDY0NEYyNkEzNjNDCis6MTAwMjMwMDA5RURCODFGNTJERDg2NDBEMDZGM0E4OEQxM0Y5N0MyRTc1Cis6MTAwMjQwMDA0NzBGREI4RDcyMDJDNjlENjc3OUY2NjFFNEExMEFENjdECis6MTAwMjUwMDA0NkZBRjM4ODM5MzhCQjJEMEZEQkFGQUY3MzUxN0JCMzUwCis6MTAwMjYwMDA5N0UyQzU0MjlGRDg4MDgxNTAxRTU1MDhCRUFCNkM1MEE2Cis6MTAwMjcwMDA4MjIxRTIxQkFFMTdDQjQ1RkYwQ0Y1NEM4NEZDRUFBQUE5Cis6MTAwMjgwMDA1NzhDRkFBNDVDRThEMTcyMTYxNTZGNkUzMEVBMzc1RkFFCis6MTAwMjkwMDAwMjc3RTJFN0MxQjhBODJGQzNGMzAyRkIxODYwMzZEQjkwCis6MTAwMkEwMDAxRkRDMzk5OUU2QUQ3ODgzMzFFNjUxQzEzQTQyMkFDRTU2Cis6MTAwMkIwMDA3QjMzREY3Nzg4OUU1N0Y0M0FDRTc1OUVCM0JENTNDNjI1Cis6MTAwMkMwMDAyNTBGOEQxODM3NkFERTEyREUxNEIwOEVDMDgzODRGQkQyCis6MTAwMkQwMDBFQzAwODdFN0VDMTY4NUYwRjVCOUIwQ0JFNEJFOEJDNDMzCis6MTAwMkUwMDA3QjA1RjM0REM2RjM4NDE1MEY4MkJDQ0MwQkQzNDFBNzFECis6MTAwMkYwMDBERURGMTJBNEZEOTUyRjU5NDNBMjFERTg3RUMxREEyRDQxCis6MTAwMzAwMDBENzhGQzI3NkVCREUyM0ZGNjJCQTJCRDRENzk0Q0M1OEJBCis6MTAwMzEwMDA0QUUwRjM1NUM1MzkzMUY2NTVBMkVDODMxRjBCM0UzODQwCis6MTAwMzIwMDA3QjZEQjg2ODA3RjAyODZGNTRGNUI4ODE4NjdBRDQ1RTgzCis6MTAwMzMwMDBEQTA3NzMwMjAxMEJDNjYxRTc4OEY4RTZEOUU2NTk4NTRBCis6MTAwMzQwMDBGNTA2OUZDQjdDNjNEQjMzRkZFOUJDQkY0RjE1RjFCOUVBCis6MTAwMzUwMDAyRUY2NTBERjk4N0U1NEE3MUQ3NDE2RkRGQjg5Mzk5NDQ0Cis6MTAwMzYwMDA4M0ZBQjcyMzQ3MjNGREYzQURFNkZEQjBEMDhERkFCODhECis6MTAwMzcwMDAyRkY5MDVEREM5RDdEOTQyMEY5N0EzNUU4NkY0RTBEQURECis6MTAwMzgwMDBFNzEzRDE2RkZGRkNDMUU3NjkzRkQ3RjI2Qzc5MjJEQTNFCis6MTAwMzkwMDBDNTA3RDdDRUJDMkYwMDJDNzU3MEYzNENEMkMzMTU4Rjc4Cis6MTAwM0EwMDA0QTNERUNCNzQ0RUFGN0IxNkI0QjdGRkQ3M0E0Q0Y0REU4Cis6MTAwM0IwMDA3MUI0MUYzMTdCODc1RkQ4RERFMEI3QTAxQzVDQUIzMDI4Cis6MTAwM0MwMDBEMjBCMEY3MkI5NTc4MUZBNkEwMEU5QUIwQkIwREU0RjVFCis6MTAwM0QwMDA2N0ZCMkY0MDNBOEZGODRFN0FFQ0E3MzNGRDIzQTgzREY4Cis6MTAwM0UwMDA3Mzg2RDBFRjAyQzkxOTQyN0QyNUY1QTlENEIzOUFDOTA1Cis6MTAwM0YwMDBERjI3MERFMUE1QkVGREMxOURCMEZFQUZCNkFBRTRERUNDCis6MTAwNDAwMDA1NUFBRUI3MzlEQjhDRkQxOEREQ0ZFRjdFMTZERUE4NDgwCis6MTAwNDEwMDA3N0RFMzlDMEJCMENFMTRERjYwRjg3Rjc2N0Y1MUNDRUQwCis6MTAwNDIwMDBGQjU3NzNCOEFGRDhEQzNCMTFGRERCQ0ZFQTdCOTNERDI0Cis6MTAwNDMwMDBGM0Q5RTZCRTA0RUY1OUFCMDBERTY0Rjc3QThDNzY0RjUxCis6MTAwNDQwMDAzREMwMUJFRDdDODQzNzhDNUJCNkMzMjNFMEVERTVGMDRCCis6MTAwNDUwMDBBRTE3N0E2NzM1NEY2Nzc1ODE2QkUwMTY5NDI3M0ZGREJECis6MTAwNDYwMDA4REQ1OEJGQUZDNTA1QzI4MTVGRDkxNDM1QjU0ODZFN0QzCis6MTAwNDcwMDAyQzNBRUQyMjYxQkY0ODM4N0ZDNzFBOUU0MDNCQUE4QkI5Cis6MTAwNDgwMDAzRDczQkY5NTYxN0M3NkVFMEI4RTIwODNGQzExQTVCMDg5Cis6MTAwNDkwMDAwNzIyRTA2OEMzMUI4OTM4NUU3OEZDNEUzQjY2NUFEQTU3Cis6MTAwNEEwMDBCMDA4M0JFNjFDRjFCMzkwRjlFODFFQzJDMjk2MzczRTk1Cis6MTAwNEIwMDA0MjNCNUVEMUI5NUZCRkQwNjYwRjIxREY4MkJGNzMzNDhDCis6MTAwNEMwMDA1MjlFMkIxRTk0NjkxODI3RjFEQTZDNDgwN0Q5Q0NFM0E5Cis6MTAwNEQwMDAyM0JCNDZFRTc3RjkxOUVFNzc3RERGRjc5QjVCMTYxM0FBCis6MTAwNEUwMDAzRjc3RTQ0N0M2QzlBQkUyNDM2NjhDMkY3NTZDNTEwODcxCis6MTAwNEYwMDBERjk1QjcxNTI2MTYzMkRDNEZBQkE2NzlEQzlFQzZGNTI0Cis6MTAwNTAwMDBCMUEyRUIxNDM3QjQwMkREQzRDMzc4NEJEMjNDMjRDRjg0Cis6MTAwNTEwMDAxNThGOTNDNzExRDdDMUI4OEVGMDdDQTNCRjRGNDZEMkI5Cis6MTAwNTIwMDA0MzdENkU4RjFENzdERTk4QzZFRDgwNEFENTQ0N0VDNzI5Cis6MTAwNTMwMDAwMjBCRjczRkU0Nzk5NkU1NjIxRUNCRDNCODFGNzI2RkNBCis6MTAwNTQwMDAxQTNGQ0Y3NzBDQ0Y4MzQwQkZDNzJFQjU4QUYzRDlFM0NDCis6MTAwNTUwMDAyODlFRDkxOTNGOTE3MDczNkE1Rjc3Q0EyQkU0MkJBRDNGCis6MTAwNTYwMDAyMzFCRTFCNDc3RjQ3QjY2OTQ2QjdCQjEyRDE5RDM4MEE4Cis6MTAwNTcwMDA4MEUxNjhDN0YwRjZFRjk4RURGNTY4NTdERTNDRjIwREM0Cis6MTAwNTgwMDA4QTgzRUU4REYzNzlEMERFREE5QjZBRjMyMjFEMDVCNkZECis6MTAwNTkwMDA1Qjg5RkVFRTg5RTdGMTZGRTY0RUQyOTA5RjZFMTJGMjE0Cis6MTAwNUEwMDA3NjQ2ODE1NUM3MjBFRkNEMDVGN0Y4MzA4NTcxMDJCODQyCis6MTAwNUIwMDAwOUIxQTJGMEY1RTU0ODQ3QjdBNkVGQkZERDA2NEI1QUYzCis6MTAwNUMwMDA2QUUyRjZDQTUyMTdBMzczNDA5NzgwQjk4RTcxNTgzQ0ZECis6MTAwNUQwMDAyMjczM0FFNTRDNzQ2MzhDNUIyRkMwRjhFQzY4QzYwOTUzCis6MTAwNUUwMDA2QTI0QzFEMzkwMDdCODUyRkVFNTg3QUY5QkY4NjAzNjA2Cis6MTAwNUYwMDA2M0ZGQ0IzQzE3MjM5RTE3MjA0QzkwMEU0QTkzQzhGRkY1Cis6MTAwNjAwMDBCRjFBRTNDNDJFNEMzNUEyQUZBOTFBMEI5ODc4NUE4RkEzCis6MTAwNjEwMDAyMTM1MTkzNzlFMkNENjc5REQ0ODE2NEE4MkY1ODU3NjI0Cis6MTAwNjIwMDAzMzQzNUNGRDg2OTAyOTc0MDFDMEVENkEyREQ0OEFGMEI1Cis6MTAwNjMwMDAzM0Q5M0M2NkY0MDM3Q0M1Q0E2MEY0OEYxNzJDM0JCN0YyCis6MTAwNjQwMDBGOUJFRjNCMDdGRTI4MzA1OTAzN0YxQzM4QjFENzcyQUEzCis6MTAwNjUwMDBDMTBEMDBBNzlCODFCOTkxMkU2RkQxRDgwRTc1MzBDN0ZGCis6MTAwNjYwMDAxQkQyNUQ5NUNCMTNBMDdBOEIxNEIxM0ZDNEUzRjkxMjcyCis6MTAwNjcwMDAyRjgzQTBGQjQ4RjhERTJDRTYwN0ZERDQyNzYyN0I0QkQ2Cis6MTAwNjgwMDBFQ0I4RDFDNzY5RDJGRkU1NzZFNjdDQzFBN0YzMjU5RDFBCis6MTAwNjkwMDA2RDM2RjJFNzNGMjQ5RkEwM0QwQjcwQkI1OUE0REREMTFFCis6MTAwNkEwMDBGOURGNDRGRjdGMTM3NEZFRjk3OThFNTc2OTY1MjE1QThCCis6MTAwNkIwMDBGNzc2MkJFMTUxOEU3QkI1NDhCRjRCRTNGNkIyOUM4N0IyCis6MTAwNkMwMDBBNDVGMjZFMjRGMjY5MDE4NDg0NzA3MUE2QUM5NUU5QTI3Cis6MTAwNkQwMDAxMzE1RkY2NTkxNzEyQTM1NTZCRTUzRUU5ODRFNjM2QTI1Cis6MTAwNkUwMDBFOTk4ODVGMzUxMkU4QjIzN0VCOUQ5RDJENEI3REFERUJGCis6MTAwNkYwMDBCNTFFRDhEMTg0QTI0QUJCOERFQ0JGODVBQzlEQzdCM0QzCis6MTAwNzAwMDA4NEREMkZFREM1Qjk2OEU3NjFCQ0IyOTFEQkI1OUFCMDY1Cis6MTAwNzEwMDBDNzRCQzEzRjQzQTIyQkFEOEZCMDc3RTE3RjkzOUJCNzBGCis6MTAwNzIwMDA4Q0M3NzgzRTE4MjY3RURBQjdCMERCRThEQ0M2RTQwNTc1Cis6MTAwNzMwMDA0NjNCQzkyQ0VDMjI3Mzk0NURDNEEyQ0Y4NTA4M0IyOUFCCis6MTAwNzQwMDBGQTVDODgyQUY4MTdFQTcyN0Y0NTlDMEJEMTg0RkREQjlFCis6MTAwNzUwMDA0OTQ3Njk2NjgxQ0Y4MDYxMUY3RTNBNkIzM0YzRkI2MjQ0Cis6MTAwNzYwMDAyMjdFMjdGNEYzNzhENURFMEZFNUNENzQyNURFOEJGNkY3Cis6MTAwNzcwMDBGRUIxNDI0N0MwOTQ4NEYxMjUzMzhEMzcxREY4MDBFNTYyCis6MTAwNzgwMDBDODI3NzFGQzdDQzU4Q0E0OUY0RTQ2M0I3ODdBQTI0NTU1Cis6MTAwNzkwMDBDM0Y0NTM2N0FGQTQxQjE4Q0ExQjU1RUMxQjA1MjdFMjEzCis6MTAwN0EwMDAzRTUzMkRDQTREOUVCRjU3Q0ZBNjI4OThDODZGN0MwQkNECis6MTAwN0IwMDBGNzY3QUVGRDAxRTY0QkY5MjcyN0VBRTBCRjFERkJBMzczCis6MTAwN0MwMDAyODBGNDAxRUU5NzVCOUU0REJERkYyRkM0M0IyRkM3Nzg5Cis6MTAwN0QwMDAzQ0JGNTI5NjZGQTNGMThFQUQ5MUZEOEJGQ0ZENTFFNUIwCis6MTAwN0UwMDA0QkEzQ0ExRkUxRjlGMTNEQjY0RDBDMjA3Q0M0QkVEMzJBCis6MTAwN0YwMDBGNEQxMEFFRDNCQ0Q0MUJFMDJGODRENUYxNjIyN0E5QTQ0Cis6MTAwODAwMDA2RTdBOERBNzQ1MkM4NEZCOEU2N0FCQjdBODg3NkYwRUQ5Cis6MTAwODEwMDBFQTY3RDU3MUMwODFGNkM5OUQxOUZBMUNCNEFGQUU0RDE3Cis6MTAwODIwMDBGNUZCN0FBMDVGMzg0NTA5NTg3MEZGNzE0RjMwNUZFOERCCis6MTAwODMwMDBBRjk4RTdFN0U3MDgzRTVEOThFRUEzRjZEMkRFODU3RTQ3Cis6MTAwODQwMDA2RUZDNzdGQTM5RDVBMzRCM0Y2NTNENTJDRkJGOUZERDk0Cis6MTAwODUwMDBFOTdDN0QxMUZEQ0NGRjc3RkExOTk4NjE5QzhGQjRGRjdDCis6MTAwODYwMDBERUM4RDQ1N0UwRkFEODAxQjdFMTVDRTRGQ0ZGRjEyNjFBCis6MTAwODcwMDBBMUZEQzhGMDVDMjQ4MDdFRkVCMkE2REMyMUQwRkZGQzg2Cis6MTAwODgwMDBFNzVFQ0E5RDFEMTE1RjU4NzhEMkM0NzRCMDEzQUI0RTk5Cis6MTAwODkwMDAzMjRBQkY2Q0ZEQjNDNTAzRjM1OUI4QURENTMyMDFFQTk2Cis6MTAwOEEwMDA1NTQxM0EzNjYyNUUwQkU0Qjk2MEQ2QUU0RDhEQjA1RjBECis6MTAwOEIwMDBFRUVENjExMkZDNzQzRkJGQzdGNURDNjFEQTNGOUU2RjVECis6MTAwOEMwMDA2QTNBRjgyOEYyRTM2ODFFNjc4QzVFREY0RjdBRjBGRDIzCis6MTAwOEQwMDBCRUJENzgzRTIwODY3RjcyN0YwRjZFOEY2Q0NGRDYxQjk5Cis6MTAwOEUwMDA3MDlEOEI1MTQ2NDIzQUI2MzZGNkY5OEE4RjQ1N0ZEM0QyCis6MTAwOEYwMDBFM0I5M0M5RjM5REM2MUYzNUM4MkZCRDlGRTVBQkNBRkEzCis6MTAwOTAwMDAzNzdCNURERTYwOEM1N0RGOTE1QUY0Njg4RjMzQzY3RjhBCis6MTAwOTEwMDAzQjc4RkNCNzg1Qzc3RkE3QkJEQTZFMDM2NUM1M0VGODk5Cis6MTAwOTIwMDBENUZCRjdEQUMwNUY5REY4MkJENkI5MUY4QzcxRDU2MjY1Cis6MTAwOTMwMDBBQkU0QkIyMzEzQzcxNTUwM0M4RkYyQ0QzRDBFREMxQjNGCis6MTAwOTQwMDA4MEY2QkJFMkY5Rjk5MTE5MjMyRThFNDc3OUQwOUU5NzU0Cis6MTAwOTUwMDA2MDcyODI5QzA4Qjg0QjNGQzA3OUNDMTg3MUU5MDRGQ0U2Cis6MTAwOTYwMDA1RTY4NzVFNDk3RjJGRDAzQTI4QjgwREJENzg0RUJDNjRCCis6MTAwOTcwMDBGQTE4QkZGMTVCNzgzQ0NGRkZBNjRBRjEzQ0ZGQzAwNEY4Cis6MTAwOTgwMDA3RkFDRjMwN0NGMDkzODdDRDA4M0RCNjdCQjAwQ0Q2ODMxCis6MTAwOTkwMDA1N0M5NzlDOEYxQzEyMEJCQUQwREZBM0JCMDJDNjMxMDJCCis6MTAwOUEwMDBERThCRkNEODVEQjg4N0UwMjJDNkZGRDhFRDZGOEQxQ0NBCis6MTAwOUIwMDAxRjk2M0IxMEJGOUZFQjNDNUUxMTc0QjE0N0UwQ0Q1N0QzCis6MTAwOUMwMDBBMDMyM0Q0MkRFNEYxRDk3NjBDODVGM0IyOTg1RTk5MTBCCis6MTAwOUQwMDA3MUU1NkJCMzBDRjk2OUQzN0IxQkVBREYzNEVCMjI0MzdGCis6MTAwOUUwMDA3OTg5QjU2RDY4RjU3OUQ4Rjk1NTBFNDczQzlFNkZGODUxCis6MTAwOUYwMDBCNEU1QkJGRkJCMTlFREQ3NDZENUFCQzA3QUU2NkVERkQ5Cis6MTAwQTAwMDBGODdGNjNBMEQ2NzEzQzM2NENGNkE4ODdFMjdCNDdGMEFFCis6MTAwQTEwMDBCQzIxRjI5RUE2NkI5MUZCNTI1RkIxMzYzQUE3MTlCMTg5Cis6MTAwQTIwMDBFRjYxRDg1RjlBRUZEQzQxRTc0NDdGQUM3REE5MTMzRENECis6MTAwQTMwMDBDNEJFQzc2MDNDNjI4RTdBRTg4MzVDM0M1RkIyRDBDRUI1Cis6MTAwQTQwMDBEN0YzRDU0QkZCMkM3NEJGMDNGNTA3RDBGNzE1RDg1MDVGCis6MTAwQTUwMDA0NTNFMEY1MEJDN0Q2Q0YzM0VCQTQ3Rjc1MDBGMkU5N0MyCis6MTAwQTYwMDAxNzY2MkZEMkMwMDI2NTU1OTBBMkRDOUYwMEYyMjkwOUJCCis6MTAwQTcwMDBFOEEzQUQ5NTVEQkMwRENGNTdFNzM5RTgzQzRDRTVDOTFGCis6MTAwQTgwMDBBOThDQTUyMDFEMDUwNjJDODI3QUYzRUI4QjI5QkZGMERCCis6MTAwQTkwMDA2NDNDRjVGQkFFREEzNjgxQ0VEMUJGQThEMEJFNDg0OTYyCis6MTAwQUEwMDBENjhDNjU2ODI3NjBGRDlGQzA3ODI1QkZCQkEyMThFMTgyCis6MTAwQUIwMDBCMzcwMUIzRjM3NTNBMkZFRUY1MEVDNjc0MTQzMzFCNTkzCis6MTAwQUMwMDAyRjUxRDkyRTA1RUNBMTg5NjNCOTdFMkQ0MTVCMDZGMjI5Cis6MTAwQUQwMDBFQTcwQzcyQUQ0QUJBQTI1OTRGRjE4Q0ExMzhCODNFNDAzCis6MTAwQUUwMDA0OUQyQzk5QjY4RkNBQTkzMzY2QTlGOTVDRUVEMzQ3M0IwCis6MTAwQUYwMDAzQjlGRDdGODkzM0VGQTJFRjE5RTk3REVDQjcwRUZEMzUzCis6MTAwQjAwMDA5Q0RBQTg5NUQ5QjEzRUEzRkE1NzlEQkM5MDUyQjlDRUI0Cis6MTAwQjEwMDAzN0ZCRkRDNjhENzJDQzlDRkFFRDA0M0MyN0ZDQTY1QjJFCis6MTAwQjIwMDA3MTkyNzkxNTI1NkY0RjU0OEY0ODYyMzFFNDkxNENBRDI1Cis6MTAwQjMwMDA0MkNFREU3QzkyOUY0M0VGOTVBOThGNDg4Nzc5NEVCRUM3Cis6MTAwQjQwMDBCQjVEQzM3RDJBNjZCNzM5MTE1RTkzNDcwRUYyQ0M4RTJBCis6MTAwQjUwMDBFMDIzRjVCNTFCRDEzMzYwNTY3Nzg3MTlGNUY5Q0Q5MEIxCis6MTAwQjYwMDA0NkNBRTM1QkJCOTFDNzk3QTY5QjBDRjc3NkE0N0U2MTUwCis6MTAwQjcwMDBDMTFCQzlGRUJFNDVERTUzMTY3QzcyQTFBODJGREJCNzkwCis6MTAwQjgwMDA5MUVEMDQ3ODdDQzE0QTc2RDQ5ODRDQkYyRjFEQ0FEQjA2Cis6MTAwQjkwMDAwQUQ5QjRBRDI0MUZEQjcyNzE3RkU4Qzc5QTNGRTBEOTUwCis6MTAwQkEwMDBBNjkwM0ZEMzRFRjczMDI2OEZGNDk4RDAzRUJDMkVERDcyCis6MTAwQkIwMDA2NEIwRDNDRUI2OEUyMjUxRkY1RDk1MkQ0MTdERjJFRTBECis6MTAwQkMwMDBFNTk3QjdFOUQwNUZFQkNGODYwQzQxQjkyRkM3OUQ5RDY0Cis6MTAwQkQwMDBDRUVGOUQzMzY3QzcwRkU4Qjc1NkJEOTJFMDQxQkUyRUZBCis6MTAwQkUwMDBDMUJERDZBMTYxQkIxREJFMzM4QzczNTZCRDYyREQ4MDE1Cis6MTAwQkYwMDBFNzk5QUExMkMxNkY4N0YxQzdCRTFBMTc0MjNBNkU3REY0Cis6MTAwQzAwMDAzNTRFNDNGREYwNzVCNjdGMzZFMjczRUNBQjE3OENDM0ZGCis6MTAwQzEwMDA3Mzc0N0E4QjU1NjM2NERGRTgxNTA4QjdFRUU2N0IzNkFDCis6MTAwQzIwMDBGOTE0NEQ2NzkyMkZGREY1OUM1RjRBMDU5RDk2MDlGRUNDCis6MTAwQzMwMDBGMzBCM0UzQTUxREQ4M0Y4RjBDNEREMzA2OTU4NDdEOUYzCis6MTAwQzQwMDBERENBQzVEQkQwMUVGMDM4RTgxQzk2RTRDQjEyRjRGMzA1Cis6MTAwQzUwMDBFMDdCQzk0NUM5RTRFRjQ2RjAxREYxRTE4MjkzNEVFQTFECis6MTAwQzYwMDBBRkYyQTQ0N0YwQjk4QkYyOTJERkNBMDRCRjQ4RkFGNjlDCis6MTAwQzcwMDAwOTNCRTI2Nzk5RkU4NzExMUUyNUI1QzBFRjc4N0Y3M0E3Cis6MTAwQzgwMDA1OUM2NTBFNEEzMzBCRDU4OUM0ODU3NDAyRkU5QjMyM0MwCis6MTAwQzkwMDBFOEExQjYxNUU4QzU0MUY0NDI3MkM4MDc2OTI0QkQ1Q0Y1Cis6MTAwQ0EwMDAyREVGMTUzMUU3ODQzNDk4RjdFNEJBM0NDM0JEQTJDN0YxCis6MTAwQ0IwMDBDRTkzRUVFQjA1QkQ5NEQ5NDM3REQxNUUzNTU3Qzc3OTEwCis6MTAwQ0MwMDBGMTlFRTQ3MTM3REY4NzVBQkM5MkMzNkZCMUQ5MzcxNkYyCis6MTAwQ0QwMDBFRDg3QzU4RjI4NUVDMDBDRDkxNTI4OEY4NjdGNTQ2RDhGCis6MTAwQ0UwMDA4OThDQUJERTc4NzIyMEYzQzBGQUFGMzlEOTg3RDIzQjVBCis6MTAwQ0YwMDA1MkZENEYyMzFDNEE0RjVFMkZFMDM1RjBERkRBRUYxQzI4Cis6MTAwRDAwMDBBNkYzMzg5QTM5NjhGNUFFQzdGREM0MzhCRjhBRjgzREY2Cis6MTAwRDEwMDA5NEMzOUMwRjQ0QzREMTMwRUU4N0YxM0ZCOTBGMkFFMzRFCis6MTAwRDIwMDA2QTU2REMzNzhFRDA5M0RGNjkwREI5RThFNzc0ODlBRjc2Cis6MTAwRDMwMDAxNTFBRjcwQjE3QjRGRUVGNzAxMzk0MUZDOUQzMjlDRTAxCis6MTAwRDQwMDAzNkMzRTQ3RjFERTk3OURFRDRFMDczNjZDOENGNUZGMzc0Cis6MTAwRDUwMDA3QzIyQzZGNTI1M0M5QkI0NTA1RkQ0OTM0RDAwNDc4QzU0Cis6MTAwRDYwMDBGNzM1QUQ1NjhCODNEQzlFNDlFMEZCN0M5Q0FFMjUxREEwCis6MTAwRDcwMDA0N0QzRjdCQzkzQkQ4ODlFNEU1NDVCNDlFRjlDMDA3QUU1Cis6MTAwRDgwMDA2NTExN0EyNzVBREY0ODNBQUVENDk4RjA1QjkzRThEQ0Q1Cis6MTAwRDkwMDA4ODk0RkY2MTdEQjNGRUJFRDE0ODc3NDczNUEyRkZCMDhFCis6MTAwREEwMDBCRTk5RUEyQkU0RjQ0RkU3Q0VBM0U5RkZDNTlBNzQzQTYzCis6MTAwREIwMDA0RjI0RjU0OEI0QkU4OTk2RUI1MjVGN0Q5MkUxRkYxRTQ5Cis6MTAwREMwMDBFMTU0RjREQjdGM0VGRjMxN0NCQTRBRTM3QUVCMkFDRDczCis6MTAwREQwMDA0MUY0RjNERjkyRkJGRjNDNEZGQTNGMkNFQTgzRkQ0QURDCis6MTAwREUwMDA3NjIxQ0FGNUM4RkVDNjY0MTYyNTY2NDA3OTRBMDZENzNDCis6MTAwREYwMDBBQkZGNkQ3OTlGOTI3MTdFRjI5RTY1RjBGOTlGNERERTlCCis6MTAwRTAwMDBFNzY3NzA3OTFGMkRERkYxQTIyMkNBRjc2M0RCRkJEM0ZFCis6MTAwRTEwMDAzRUZDNUUwNkZBMDBGNTVFNEI4MjY3QTM5MEZGQTQxRkJFCis6MTAwRTIwMDBFMjkzODI2NzkyRkZEQkIzNjdFNjY3QzQ5NkZGMTc2NEJECis6MTAwRTMwMDBGQzA3RjJGRjdDRjk0NEQyNkY3N0ZDMzJGMTVFNkU5RkMzCis6MTAwRTQwMDAzMUI0Q0Y5NDQ4RkI4Q0MzNjVENzg1NUMwRjQ0RDg2OTE3Cis6MTAwRTUwMDAzQzlFMDI3Q0Q1NTc4OUU0OUIwREY3OEQ0NkJFMzlFNjUyCis6MTAwRTYwMDBGNkUyNTk0MEM5Mjc5MjZGMjRCRkRDMkNGOEUzNTZBMTYzCis6MTAwRTcwMDAxNzI0N0ZCQzlBRTFCRjExRTEyNUY5NjNDMUQ2NjhGRDUzCis6MTAwRTgwMDA3MDY2RkFCQUQ5NURDRDUwM0ZEQzBBNjkyNDdENTkzQkMyCis6MTAwRTkwMDBGNTgzOTEyRjZFRTlBNEFCNzNFMzhCNDkxOUU3NjY0NzlECis6MTAwRUEwMDAyQ0NBRTBGN0RDRkY4Qjc0QjUwOEU5MjcwNjVEMkRGRTQwCis6MTAwRUIwMDA0RkU4QUFBQkZERkFFMTUwQkNBRjc2NjIyOEQwNTE1RTk0Cis6MTAwRUMwMDA5ODhFMjZCRUM1QjhEREQwOUJEQkZGOUQ3NDYyQzlBMTlDCis6MTAwRUQwMDBCOENFQzREM0ZDMUNBRkE0NTM4OURGNjhCOUY4NUNBNkI0Cis6MTAwRUUwMDBFRjYxQzRCN0Y0MUJGRTVCRjJFRkIxRjNDNEYzQ0E3MzU2Cis6MTAwRUYwMDBDNEYzNjY4MUU3MUZEMTVFN0MzMTE2NUU5OUQzNjU4OEE1Cis6MTAwRjAwMDA0NzAwN0Y1RjQzNzY1QzQ4QTMyMzQxRERFMUQ1QkM5NjczCis6MTAwRjEwMDBGMzk3Q0MyRjBGNjk1MkVGQTZBMERFMDU3QTY5RkU0RjNBCis6MTAwRjIwMDBFOEE1NjQyQzEzRjE4RDQzOTMzMDRFMzlGMTE3MjJDRjhECis6MTAwRjMwMDA4RTRFNDIzRUJDN0VBNDJDM0ZCQzVBRUY4MzcyODZDOUMzCis6MTAwRjQwMDBGRDAzOEE4RkJDQUI4QTdDRTBDOERCRTM2MDVFMTMxRkM1Cis6MTAwRjUwMDA2MEUxRkQwNTI4MUY1RjkwRDQxOTRGNDFENzQzRDZGRkFDCis6MTAwRjYwMDBGMDkxMkZERTVFNERGQ0NDQ0ZGOTMwN0ZCQkM2RjdENUJDCis6MTAwRjcwMDA0NDdFMjhFNDFEMTFGOTkxNTFGOTc1QkM3RUEyRDZDRUFDCis6MTAwRjgwMDBGOEI5Q0MyMEQ3MDMyQTZFMzU3MkZBRjE0NUQ4MjU4MEZFCis6MTAwRjkwMDBDOTA5Nzg3RTYyRjIzNkM1ODlGMTkwOUIwQThFRDFGRTJFCis6MTAwRkEwMDA3Mzc4RkRDNzI3RTkwNUI4MkZBODg4RkNGNzZGRTM3QUE3Cis6MTAwRkIwMDA2RkRBQzZGM0E3MUVGOUM3RUE4MDI2RkE0QkEzNzgxOUExCis6MTAwRkMwMDBGRDU5OUIxNDVEQzVGMzIwMjM5NTYwQUZCQ0FFNzAzRTA4Cis6MTAwRkQwMDAxNUE1RjdGMDRGMzNCNjY3NzhDRUVBN0NEQTIzOUVBOUUxCis6MTAwRkUwMDA3RDJGNkExRkIyOUVDN0Y4MzcxNEM0QkUyN0UyQzgxNDBCCis6MTAwRkYwMDBGNTQ0NUM4MUZBMDc1ODVFRDMxNEZCMUU0Q0FBQThERkE3Cis6MTAxMDAwMDA4NkZCNDUwNEFGQTQzNTA4QkYzNjhCODQ2N0UyMUFBNDdCCis6MTAxMDEwMDBBN0YxOENFNzdCM0U5QTU4MTIxOEMwQTdBRjQ3QURGRkU3Cis6MTAxMDIwMDA0Q0YzNTczMkJCQUVERjYzNkMxRjNBMTNGQ0FDNUREQTk2Cis6MTAxMDMwMDAwQkZBOTk2M0E0QTcyNENEQjdFMzA0Q0MyM0M5QUQzODM4Cis6MTAxMDQwMDBEMTNFNUVFODhCNUI4RDdFNDA5ODNFMzI0QTcwM0Q2REFFCis6MTAxMDUwMDA5RDcxRkQ2OEZBQ0YyQzQxRkE1RkM4NjRGREVDMzVFNDYwCis6MTAxMDYwMDBFNzk4M0FFQjczN0U5MEY0MDVFREZCRjFGN0Y3QThGREY2Cis6MTAxMDcwMDBBODQ3QjNENjIwN0MwMDNGNTQ0RTc5RUQwQ0ZDRDAxNDI5Cis6MTAxMDgwMDA5NTJGODhFMjFGNDFGRkM0QkYyOEU3MDEzRTdENjNDODVBCis6MTAxMDkwMDA5OTY5MDIzRTVGODk3M0U0NkQ0NURDNUU2QzEzRjdFMjhCCis6MTAxMEEwMDA5NjY0RjIzOEFEM0Y5M0RCNjM3MzI0REUyM0VFQ0RCMDVDCis6MTAxMEIwMDAwODNDMzM3MUFGMjY2MkREMDRBNzFCREQ3MkREMDUyNTE4Cis6MTAxMEMwMDA5MzYwNUQ2RDJFNUVCRTM4NzNFNDlBNDA3NjM4MUZERDA2Cis6MTAxMEQwMDBERjZEOTkwNTI1QjgzRjExRUU3RkY0OUY1MDZGREMyODM2Cis6MTAxMEUwMDBFMEI2MjQ3M0NDOUYwMjVDMUUyQUM4OTc5NTQ0MjA4MEVBCis6MTAxMEYwMDBGNzZENEE4MENFNjEyMTVEQzQ1OEI3REU5NUFFMDI1MUNFCis6MTAxMTAwMDBFRDc1RjMxOURBNEZFOERBNUU4RjZBQ0ZDQ0VFRjM2OTRBCis6MTAxMTEwMDAyRkYwMzYyOTBBQUZDNTUxNzgxRDE3OTU5RjJFRjM0MTQwCis6MTAxMTIwMDA4M0ZDOTM3MkIxQUNGOUZFRTU2OTZFOEM0RjJBNzRBNzBCCis6MTAxMTMwMDAzNzRDQ0Y1NzExM0RDRjc3NEFGQTlERjgyN0E0RDczMEM3Cis6MTAxMTQwMDAzRDRGMjIzODRGNkQ5MkYyQjA2NDBEQ0FDMzI5MjgwRjZCCis6MTAxMTUwMDA0Nzg3RjNEN0EwQkNBMEZDRTQxMjNEMjk1MjVGNUNCREQ5Cis6MTAxMTYwMDA0NjA3M0NERjUwMkZFQkZCQThGRTRENzVCMkJGMjk1NDVDCis6MTAxMTcwMDAyRUYxQzgwMjUzNEI3MEZDMUI4NzBBN0QxMUI4RTY0RjU1Cis6MTAxMTgwMDA1ODNFQUY4NUI3RkZFREEzRDdGRTI5RDBFNzBDRkNEMEMyCis6MTAxMTkwMDAxMDA1OTc3NTUxRjk0MDU0RkQwN0NGQTI1RkVBQTJEQTE2Cis6MTAxMUEwMDBERjFENTVCRTNBMkFCRjM2MkE1RjZGNkM1RjNBNEIyMTZFCis6MTAxMUIwMDAzRTJDMDU3QTQwNDQ5QzhEMkY1RkNFRUNGNDdGM0FGNUFGCis6MTAxMUMwMDBBOTYyMjdCQkNEQzA1NzEzNkI3OUZFOEY4Rjk2OTZENDNCCis6MTAxMUQwMDAwRjg4Qzg2N0NFMkM4OUU0MEJCOUJGMEFCMjM2ODBGQUYzCis6MTAxMUUwMDBDQURDOERCQzdDQkUzQkJBRUMxN0FENkY3OUY5NUZGMTAwCis6MTAxMUYwMDA5RjE5QjRDRjYzQjAwQjVFNTc4REY5NTY1NUNFN0JEMTk2Cis6MTAxMjAwMDA5RjZFMUIxMEI5MUY1QTVEODI3MTk2NkVGNzVERDhDMjMyCis6MTAxMjEwMDA5MjcxOTE3NjQ5QTA5MkU4NDRBRTUzRDY5RjcwRUFCNDk5Cis6MTAxMjIwMDA4QUUzRkQyNUIzQjJBNDExRjc3NThBQzQ3RUE0OEJBNzA3Cis6MTAxMjMwMDBBMEQ3NTRENDlCNTUyMjJFMzMwMUNGMDM2M0JERjg1MDYxCis6MTAxMjQwMDBERkM1OTE3NjA4NkJDQUM3NzVCNkZFOENERjkzMDhENEVDCis6MTAxMjUwMDAwMjdFMzBDRUM2QkMxNjhDQUJCNDI2MjUyRDc5MTJFQUEwCis6MTAxMjYwMDBCRkZFMzM3NTA5RUFEMUJENEI1MkU4MUNENjY1NTlEQzg3Cis6MTAxMjcwMDA4RTdDM0RBOTY3NUEzOUU0NUIxMzZFQjVFMEZERjNENjY5Cis6MTAxMjgwMDA3QkM2NTNGQTlBQUFBRkU4MDA1RUZCRkJBMzc3OTdEODE4Cis6MTAxMjkwMDBGQjYzNzkxMkMxRTdCQkNDMjUyNTRCODFDRTRGRTIyNUZDCis6MTAxMkEwMDAyNTY4RUY3NzM5RDNGMDFFMDc1QjY1NjZGQzNEMjRFRkI4Cis6MTAxMkIwMDAxMzQ0Mzc2QkFDODNEMDhGMkU1RDdBMTFFRDVGOTUzRDczCis6MTAxMkMwMDAzNDY1MDJEREQzNTg2RUE2N0QwREY4QTNGQjNBRkU1NUJBCis6MTAxMkQwMDBFM0U5OUNEN0FDM0E5MTA2QUVBMEY0RDU3RkZEQTYzNkUzCis6MTAxMkUwMDAxMUNGMkQzQ0FFRDBGRDkwNEJCRjZEN0EwQkRGNURBQUM4Cis6MTAxMkYwMDBBOEVGRUQ0NUQ0QkMwMjc2M0Q5RUJGRkE2Q0VEMDU3NEI3Cis6MTAxMzAwMDAyRjY0N0Y1QzM1OUQ3Mzg1RkEwQ0VCNTdGQ0UwNzk2N0ExCis6MTAxMzEwMDBGMjUwQUNBRjNBRjE0OEM5NDFGODhFRjZGMEMxOTVFQTA3Cis6MTAxMzIwMDAwNjA1RTc5NUU4ODhDNzczM0MwNzRGNzlERTQxQkIxNjkxCis6MTAxMzMwMDBDQTlEQ0JFMEZCQzFFNTczRDNEMENFM0FBODc4MTIxNTk1Cis6MTAxMzQwMDBCQ0M3RjBEOEFBOTJGNDBDN0MzRkMxMkFGMEI5Q0E1MUFDCis6MTAxMzUwMDAwQTdDNUQ2QUVBQTQxN0QyMUZCMzkzNzkzRTM1NkI1NUI4Cis6MTAxMzYwMDBDOTQ2OThGRkMxNDcyRUEwNzM2RUJGQ0NEMkQzQjIwMDNFCis6MTAxMzcwMDA0RUI3NjZFQjNEQjI4NkUxM0NCOTlFN0FGNTVGN0NERjA1Cis6MTAxMzgwMDBGMEU1QTM2NTY5NDg0Rjc5NTk5QzhFNUYzOTU5OTY1NkE3Cis6MTAxMzkwMDAxNjYxRUZDQ0ZFNEEyM0JDQkY2QUYxREM4NkYzN0MzNUQ0Cis6MTAxM0EwMDAzRTQ3QTFGM0U4QUMyOTA1RTNERUIzODQ5RjA5RjRCQjEzCis6MTAxM0IwMDBFNEY5MTg3NkNGMEY5OTJBRjU3QkMwQkE4NEVEODc3OUM2Cis6MTAxM0MwMDBCN0RFN0JERDU4MDdDMEE1RjU0NTg1RjAzMDhCRjk2QjlFCis6MTAxM0QwMDAzMUNGOUE2M0VGOEJGRTkwNTYzNDEwRTcxRkE2RkY3NTRFCis6MTAxM0UwMDAyNDY3QzlERjgwRkNDOEFDNDdENjA0RDAwNjEwRTczQkIxCis6MTAxM0YwMDAxOUJFM0U4NUZDQkEzOTJFMTgwN0YwOUNFNUQ2Mjc2MDQ5Cis6MTAxNDAwMDA3RDk2REU5NDNGRDUxMUMxQTdBMkZFQTcwMTdFN0VGOThECis6MTAxNDEwMDA1M0E4OEZGRURFQTc4MUJGMzgyMkY3MkY2NEZEOEE0NEQwCis6MTAxNDIwMDA0NzAwOEQ4RjJGMUMwRTBERjFCNjU3QUIzOTg4RTcxRTg0Cis6MTAxNDMwMDA2NzNGNkUyNjNEMzFGQkYxRDRCQjNCNzAxRDQwNUY3REE1Cis6MTAxNDQwMDA1OUQ3NzVENDY1OTk4OTVGQkFERjJGN0REQUM4QjdFQ0IzCis6MTAxNDUwMDBFOTMzRjJFREQ0QzczNjk1MzREQUJCRTdEQjBBRTFEN0RFCis6MTAxNDYwMDA0Qzc4REM0Q0U3RjgyQjg2MzkzNERDQjcyQzdBRkM4RkNGCis6MTAxNDcwMDAxQkU5REVGMUEyQjhDMTc4N0ZBM0UyNzEyQkUxQjdEREYxCis6MTAxNDgwMDBFMTA4Mzg3MTVGMzVEMUExMjU2MzJBRTg2MTY5MTZFNzYzCis6MTAxNDkwMDBCM0IxMkFEMzZDODMyOUE1N0IxQjcyM0ZGMEYwOTIwNzZFCis6MTAxNEEwMDAxRUM2NjNBNjQ3NThGMEZBMTEwMEJGRTM4ODI4ODBDQjE4Cis6MTAxNEIwMDA3MTc5NkYyRDZBN0ZCMDcyRjdGMzk2NDI3Njg2RkRDMTFGCis6MTAxNEMwMDBCM0VDMEJFMjBENzhFNERCNzNERDFGQkMyMzJCN0E3RkRBCis6MTAxNEQwMDBEMDlDOEZGQjhGMTU2MjdGNzBFQzNBMUVEN0E5NThDMjQzCis6MTAxNEUwMDBERjY1MTk5QkMyRTNDNDA3NkEwMkY4MTgzMkFFMzdFMDIxCis6MTAxNEYwMDBDNDdCRDYwRjcyN0Q1NEMxOTRBMDBERkU3OUM1QkE0NTQ4Cis6MTAxNTAwMDBGNDVFRUQxMTIxODc0QUYxNURCNTAxQzg1RkRFNUNGNDQwCis6MTAxNTEwMDBFQjY3M0YxRTQ3NzBBRDc4NjJFRUZGM0QwMkVEREE5NzU0Cis6MTAxNTIwMDA5NkI4MjNGREU4MzU4MjFFQTA3Rjg2Rjc5ODY1M0Y1RjU5Cis6MTAxNTMwMDAyQ0ZENzkyRUNBQkZCMUJGMDY3RjE4RUY0MzI2QjNFNzUzCis6MTAxNTQwMDA2RUNDNDMzQzY1RTRFMjNFQTZBQzU3QjFFQzY3RjlCQzE3Cis6MTAxNTUwMDAxRUY4RDNFMDM3OTdBRTU0Nzk3Q0VBMDUyQkU5NDc5MDIzCis6MTAxNTYwMDAwOUU5MkNFMjNFRkFBQ0JBREQxNkNCODBGMEZEQjhDRjJCCis6MTAxNTcwMDAyMDhGNEYyQzQ0REM5M0IzMjBCQ0U0QkQyREZDNEIxRkNCCis6MTAxNTgwMDAyRUVDNzMwRkM5MUI3QTZGN0FCQTQ5QTFGQjVEMjBFOTczCis6MTAxNTkwMDBFODVFRDRDQjU5M0MxRURBOTRDNUVEREVEMjVDMkZERDdCCis6MTAxNUEwMDAwRkFBQkNDRkVBNURDNkNGMkJCMUNFN0JGMTc4MUVDQ0EzCis6MTAxNUIwMDBENDM2OUJGNjJEN0Y2RkE1Mzg0QTU1NUQ5QzFFOTdDODgzCis6MTAxNUMwMDBDRjUzNkMxRDQwRTdDNjM1MEJFRUI3NzhCODVDNzk1OTQwCis6MTAxNUQwMDBEMDVGOTU2N0NBMTU0ODJGNTBGRTkxODZFN0Q1MUM1Q0YxCis6MTAxNUUwMDA3RTU2MjY4QkY3MDBBMUJEMDlDNjM5ODZGRkVBQ0RGQkUyCis6MTAxNUYwMDBDRDE4MTgzMUJFMjJCRTQzM0Y5RUM0NzBCRkJCNENBQzU5Cis6MTAxNjAwMDAxRUUzMzQ1OEJGRkY0MDg0NjNDQUY1RDM3MDdFQ0ZBQTZGCis6MTAxNjEwMDBDNEM3QjBGOEZCNDZBMjNERjhBQzNBMDRGREUwRDI5NTUxCis6MTAxNjIwMDBBRjRGNTg4QkY5MkQ4M0YwNDYwNzJCN0RFRTdERDIyRkRGCis6MTAxNjMwMDBGMzA1RkVEQkM1QjlCOTMyQzhFMzNCMDU3QjA0MUZGOUVFCis6MTAxNjQwMDA1NTFFMUZEQTIzRTAyNUU5NDA5NjU3QUVFNEU3QTcyQUE2Cis6MTAxNjUwMDA5NzVCQzlERUE5NUNGQTIxRjU1QkU5Njg0QjQzMzk1RDBDCis6MTAxNjYwMDBGOTgyOTlFRTc5N0YyOEU2NURCNjM0QTdFMDIzQTBBQjM2Cis6MTAxNjcwMDAzMjczMTJCRDJCQkUyMDUwNjJDMUZDODIwNjg1RjJFMTlFCis6MTAxNjgwMDA3NkE5Qjk0OEE3NUZENkJEOTg4OEY0QjMzRjJFRDQxNzgyCis6MTAxNjkwMDBGNTU2QzdBMjM4MkY5RTU3OTRGMUI5MkZFQkZBNkVDMEJBCis6MTAxNkEwMDAzOENFMkM2NzlCMDNFRjZCQ0RCQUFEQjcwQkU1RkM1RTc0Cis6MTAxNkIwMDA2N0M4ODJFNTdCOUJGMjRDOThENzlEQ0UwMkNDRUJEQUQzCis6MTAxNkMwMDAyNTk0RkY1MjlDNTdBMTNGQTQxNzg1RTM3OUMxRTZENzIzCis6MTAxNkQwMDAyREJENjBCQzFGQzQ3QUJGN0FGNkZEN0NENDZCOTVCOTcyCis6MTAxNkUwMDA2REY5QTg3RjgwMEVGMkIzMTBDRUNGMjhBNEI3MTc2RTg1Cis6MTAxNkYwMDBFNkU3RjgyNTFEMkM0NDNBMDBCRTlCMjdFODYwRTFCNkRBCis6MTAxNzAwMDAxN0VGNDA3RTU4ODhGODFGREM5NThFODA0RTc3RDBGNzEzCis6MTAxNzEwMDBBREVCMjczMERFN0UwN0QyODlENDc3OTBBRjMzQkIzMDc0Cis6MTAxNzIwMDA1RTI3RjIzMDBFRTY0RjIxM0M4NzUxRjkzODVFMUUxOEQ1Cis6MTAxNzMwMDBDMENGMDNCNkQzRjlDNjJBNzE5RkIzNTMzRTc1ODNFNzcyCis6MTAxNzQwMDBDQzZDQjE3RkI2RDQ0QUYyMzYzMzlCQUZCQjdERTUwQjkwCis6MTAxNzUwMDA4OTg4QzdBRjlFN0Q3RDI3QzY4OTJCQjc4MjU2RjdDNDdGCis6MTAxNzYwMDBFMDBCMDE5NzJBODQ0MzIyQUQ4M0VDOTAyQTVDNzc2MkQ4Cis6MTAxNzcwMDAxODBFOURGNDJGRjhCMThBRjE3NUNBNzU1NzY5MDIwRURCCis6MTAxNzgwMDBCMjVDQjRDRkNBRTZFQjVDQzAwNERDQjY1REMwRjk0RjE2Cis6MTAxNzkwMDBGMDFCRjIzM0JEQkIyNEQ2RTc3NzE5REY5N0Q3QzVGQTI0Cis6MTAxN0EwMDBGQThCNzQwMUQwMDVERTVGNjM3ODdENTNDQTA5MjhGQThECis6MTAxN0IwMDA2QUNCN0E4QTEzNDk3Q0M5Nzk0RkNERjY0ODNEQTIyNzc2Cis6MTAxN0MwMDBCQkMyNzg2QzM3QzU3RTVGN0I1NDM2OTcyN0ZCOTZGNzk0Cis6MTAxN0QwMDBDODZEMDZCODdEMDlGRTE4OUQzNzAwN0FENTIyQzY5M0RDCis6MTAxN0UwMDA3NDIzQzcxQkZCREIyOTU3RTE3QUExRkYxMEY2MkZDNzMzCis6MTAxN0YwMDBERDFCNDhEMEIwOUZCRDhDRjMwN0QyMjdDQTRGQzk5N0Q1Cis6MTAxODAwMDA2MzZCNjc1QzM1MDhDRjQzMDdCRTcyRjQ0NjdCNUJFMEQxCis6MTAxODEwMDA2RjZBMzY3RjA3NTA0NzNCMDFEQUVCQ0QwQUM1QTlGNzVGCis6MTAxODIwMDAwOUZGN0ZERkYyMTcxM0NCMjJFMEU0MTNGMzk2NzQ4NkVGCis6MTAxODMwMDA3RjE4QkY5MkYzRERFNUUyNzFERkU4Nzk0QjM5MjRFN0U5Cis6MTAxODQwMDAzREY2OUUxQkFFQzJFRjcyRkU5MjVFMjU3RDRBMzg0QTdGCis6MTAxODUwMDAzQTk1RjcwM0EzRTk5NTY4NERFQTRGRDUyMEVGNDkzRjQ0Cis6MTAxODYwMDA1RTkxRkQ4REM1NkZFRkZBM0QzQURGNjkzN0Q1QTVFRjgzCis6MTAxODcwMDA4OEJDRjdCNjVGOUM3N0VGNDg2NTNDREVDRjgwNkEyMzczCis6MTAxODgwMDBGNDhFRDRGMzExN0E2NUI1MTZBMTU3QUFEQzNBQkRCNzI4Cis6MTAxODkwMDAzMzY3RThBMjdDRDQ2MzJGNjRGMzczMjk0NzU4OTNBNTc4Cis6MTAxOEEwMDAxMEZBNUI3MEE4NkQ0MkEyMjc2Q0FGNUVGQTZENDhDNTU2Cis6MTAxOEIwMDBGNzZFMTY2Q0UzRTdENzI0REMxNzFDREQ0MUY0NUYyOUQzCis6MTAxOEMwMDBFRTZGOTVBRTdDQkY2NDA0RDJGOUQzNjZEQUU3MkM1RDg3Cis6MTAxOEQwMDAzRTlFRUU2OUNGREQzODczMzhEMjExREVGQjQwQjk3RTEzCis6MTAxOEUwMDBCODcxRDgxMEZFNUM5QjMzRUQ3QUJDRkZEMUY4QzBGNTFGCis6MTAxOEYwMDAzN0MxRjc1OUNEQUE5N0U0M0JGNDgzN0M1QjdBRkIxMEEwCis6MTAxOTAwMDBBNkQwN0FEQjRCNzBGRkI0RTM0RUQ1ODk3NkZFOTg4RDc2Cis6MTAxOTEwMDBDM0VFQzZGQTYzMUMzRDkzNzEzRDdBNjMwQUU1NzUyREVCCis6MTAxOTIwMDA4OUY0ODNCNDhGRTVCOUJFNUEzM0E3OEI1RjY3NzM3RkExCis6MTAxOTMwMDBGNUUxQ0U1NDExRTdGOTZBRjM3MUZGQkQ2MzdEMUNCRDdCCis6MTAxOTQwMDA3MzM1REQyMkVFQkI2RUVGNDE3RTQ4OTUwNUFGNUVEMjZBCis6MTAxOTUwMDBGRDU5QjJDN0U2NTg5ODJEODM5RjBGQjc2NUMwRjdEREQ0Cis6MTAxOTYwMDBFNkI2REI1MThGRUNCRUREMzE4OEVFMUZBODNGMEMyRkIxCis6MTAxOTcwMDBFM0ZFMjNDREEzMjRDNUY4QUU5NDlDQzcxMzgyREVBMzU3Cis6MTAxOTgwMDBGQjkzRUQ3Nzg5RjNEOUZCQzVGQzBGRDczRDdEM0RFQThECis6MTAxOTkwMDBDMUMzOUJGQUJBNzBERDVGNkM4RkEzRjc3MUJFODg3QTAyCis6MTAxOUEwMDBBRkYzN0NFRkIzMDFGRDQ2REQxNzVCNDZGMzZCQ0FCNkMwCis6MTAxOUIwMDBGM0ZCNUNDMjhFOTNGNDdFRDZGQjVDOUZCOEEzRjYxMTVBCis6MTAxOUMwMDBDRTdDM0VFOTY4MERBMzdCRTdCNzgxMkQ4RUVEQzcyNTYwCis6MTAxOUQwMDA5QzdBMUVDRjA1Q0U2RUIwM0FGMURFQ0YwMUE0NzdEQzQzCis6MTAxOUUwMDBCRjdBNDFFNUY3OTM2RDlDRkUwRjZDMTkxNDQ0N0Y3MzI5Cis6MTAxOUYwMDBGNjI3RkMxRUQ2OEVGQkVGQTE3MzA5RTU2MDVGRTJEMUVFCis6MTAxQTAwMDBDRDRFN0JGOUMxRkJBRjQ3MzYzOEVFRjVBRkM4ODA3NkQ3Cis6MTAxQTEwMDBDNzM3RjE3MzE0NURERTc3RDhGREZDQ0VDOEY3MURDRTU1Cis6MTAxQTIwMDBENzRFM0U1N0ZCNThDNjIzM0VDOTM2QkUxRjIwRTEyQTdCCis6MTAxQTMwMDBGREE0NTcwMUZGMjMwNzg3RTFGNDc1Q0QxQ0IyOEY4RkZBCis6MTAxQTQwMDBENkY4MjkzREE2RUNCQjZGMENEMkFEMjM4OUVFMzdCQzhFCis6MTAxQTUwMDBEQ0ZDODA4QUVGRDE1NDZFMUJGNDAzRkFDNUEzRUQ0OTc4Cis6MTAxQTYwMDA0RUU0RDdBRjZCOTZEMEZFRThEMTlBNkFGRUVFNEFFNzE1Cis6MTAxQTcwMDBCQkNBNDE0QTJGRERENjRBRURCRTZFMUVEMjgyRjc4MTI3Cis6MTAxQTgwMDA1RkIxMjcwOUI5MUZCRDFGQzRGMUQ4REQzRDY3QjlBRUVECis6MTAxQTkwMDAyMzc3NzI3Q0NBNzkxRkQ5MzQzMzExRDdENUZBNTg0QUMzCis6MTAxQUEwMDBDQjI4QzQ2MzQyOTIxM0VEQkMwQTcxNEVFNEUwNUE2RTM3Cis6MTAxQUIwMDA0NzFGQjIyNTNEMzkwOUUwNzM2OEREMzU2OUY4NUU1MDhFCis6MTAxQUMwMDA3OUVCQjVEN0UzRjdEOURCMTUyN0RBRkZERUVENTMxMjUzCis6MTAxQUQwMDBEMTNGRkI1QzZCNEZDNEZCNUY5RkFGOTVGN0M2ODJGNEIxCis6MTAxQUUwMDA3RUVGRTg2MjQ2RkI1NUEzNDMxQUYzRTREMUQ2MzNEMTI3Cis6MTAxQUYwMDBDOUE4QTMxQUREQ0ZGRDEyRjdCMTMwNUVGMjQzM0NDNTkxCis6MTAxQjAwMDA0Qjk4RDg5RjJBN0Y4OUM3NTkzQUZENTlFMUNGOEQxMTRCCis6MTAxQjEwMDBFQjFFOTFFMzkyRkIwRUY0N0RFQzQ4RkVGRDhCNzVDRjNFCis6MTAxQjIwMDA0RkM2RkUwRTM3OUE5RDM4RUZBRjFCRjkzQjE2RjNDMDM4Cis6MTAxQjMwMDAwRkMzQUIwMDg3MzY3MTNGNjc1RTkzNDI3RUYxRTE0RDg0Cis6MTAxQjQwMDBBMEE3NjE1RDk1OEJDQzNBREQ2QjhEQTJCRkIxNTA4RUE1Cis6MTAxQjUwMDBFNzIyMjVGRENERDM4MzQ0RDdEMUVGOEMyNEIzMjZCQTE5Cis6MTAxQjYwMDBGRkY2NjNEMUUzQzUzOTQ2N0ZBRDkzMEVCQkMzQkY4MDlCCis6MTAxQjcwMDAxM0YyMkREMkExQzRGM0JDQjVGQzdENUI1N0QzQTA0MkI4Cis6MTAxQjgwMDBBNDI3ODlGN0U4N0IwRUI1MTY0NkY3MTkwMkE2Nzg3QURFCis6MTAxQjkwMDAxNzdBOEFERDYzNTY2MEZERDdCOERCQzdBMUY4N0MyNENECis6MTAxQkEwMDA4N0NCNDU3NUFDNDlDN0ZCN0FBQzk2QkY2M0QwMjUzRTYxCis6MTAxQkIwMDA5REMzRTVFODlCMzk4Q0QyQjIxQzdFREU1OERFNUI5Mzc4Cis6MTAxQkMwMDAyOTJDMjQ4N0RFNjU0QzcwN0RFNzgxMkFEN0U0NkM5QTQ2Cis6MTAxQkQwMDBBQ0MxRkNBNzhDNzFERERFREJDQkQ4Q0QzOUNGNERENkM3Cis6MTAxQkUwMDA4MDZFQTcwQzcxQkREMDBCRjIzMzFFREZDQ0YzOTdCODFCCis6MTAxQkYwMDA4Njk5MjFCRjU0RjlEREU0NzE5MEJGMkI0NzlGOTI5M0UyCis6MTAxQzAwMDAxQTFFNDdGNjBCREZBRkM1RUY4NzUyRkMzN0U0MEM0M0QzCis6MTAxQzEwMDAzOUNFREYyRDNCQTY3NDBDNUM5MjE3QUVGRjlFQzJGNjQ4Cis6MTAxQzIwMDBCRUFDODRGM0VENjY0NkVGRTU5NEUxRkM1M0JCNEYzNzYxCis6MTAxQzMwMDBFNEU4RkU5QzYxMzFDQTE5QTNGQjYzNjUwMTdFMUYwOEJECis6MTAxQzQwMDBGRTdDQjYzNDNBQTc0NkY0NTQyNkVGMDdENTFCRUYwN0JGCis6MTAxQzUwMDAzMTJGQkY5RjI2RUY2REM5N0I1OUZEQzNGN0NERDY5REIwCis6MTAxQzYwMDBDRjdEQjM2M0UyN0U1Q0Y0QkQzRkE1ODVERjk3QUIwRDBFCis6MTAxQzcwMDBCMEY2MzhDMjQzRDQ3RDlGMDRGRTdFRTNFMjE3QkVEQTlECis6MTAxQzgwMDA4MTY0MzU1N0RBMkJBODZDODc4N0RGMzk2MEU5RkNCQ0EzCis6MTAxQzkwMDBDMEVEODIwRUJGQTg2MTdERkEwMDJCNUZEREQ2OTZFODBECis6MTAxQ0EwMDA4MUM5MUU5RDFDQ0E0N0ZFRjY1OEZERjUwOEE3MkZENjEwCis6MTAxQ0IwMDBENTY2MkY3NkUzRkQ1OEFCNzcxMkQ0M0YxNEU0Rjc0Rjg3Cis6MTAxQ0MwMDAxNzA4QkI5MzM1QTYwQTNFNTc0Mzk3NDNCRDVENzlGRDgwCis6MTAxQ0QwMDBFOTlEOEI1RjBBN0EzQTlBMTdDQUM1Nzc4NzAyNzlEQzQxCis6MTAxQ0UwMDBDRjgxN0E3NEZFQUQ3OEQ5MTVBOTU4RUZFODk2N0JGQUMyCis6MTAxQ0YwMDA5NDAzREVBQ0Y4QUU5RjhCNTI4NkY3QzVBRTg0QkU0NzI4Cis6MTAxRDAwMDBCQUU4QkQzRkE2RDJGRTZFOTBGQUMzN0E4OUE4RDczRDQ1Cis6MTAxRDEwMDAzM0QzNzlGQzlEREYyRjk0Nzg5MkYwRUY4MjE3OTgwMkVECis6MTAxRDIwMDBEQUE1MjYxQjMzRTNGQ0ZCQjM3NTRFRDRDNzEyM0ZGMjkyCis6MTAxRDMwMDA3RERCQzUyRkYwMzhDQTYyQTVCRDJFMDVGM0NGMkE3NDBFCis6MTAxRDQwMDA3RUVFMEIxQkJGMEZENDU1Q0Y2REI0MjBBOEU3QUM5QjI0Cis6MTAxRDUwMDA2OTc4Qzc0OEJFMjNGQjYzQzc4MzVFQ0ExMUY3QzIwNzExCis6MTAxRDYwMDBCMTQxOTFFRkY0NTY4OEI2RTNENUU5MUU3QzY3NzQ3MUYyCis6MTAxRDcwMDBBQThEREUzNzU5RkM3ODZGRDIyNzJDNzAzQkQxODFBQzBECis6MTAxRDgwMDBDN0Q2QTUxMDdEQUNDODUzMDlDRTczOUIxOUJENEY1NDVGCis6MTAxRDkwMDBEMjlDNDlFNzFEMjczNUJCMjg0RDNDOTk0RURGMEYzRkFDCis6MTAxREEwMDBGOUQ2NTAyRTdGMzgxRTRBOUVFQTQxRUY4QTk3M0M3NTNECis6MTAxREIwMDA0MTExN0Y3NEFGQ0IzQjQ5RkMzRDZEQkI4REVFMUIyRkJBCis6MTAxREMwMDBERUNERjVEMkUyRUI1NDhBNTMzMjcxMEZDQzI3QTZFMzc1Cis6MTAxREQwMDBCM0Q3NTM1Q0M3Qzc2MkJGMEZFQzkzRUYwM0VCRTYzMzk3Cis6MTAxREUwMDBCRTBGMkNFMTZCMTVGODg5N0UyRkY4QkFERDQzRDJEMUY2Cis6MTAxREYwMDA1Rjk1RUYwNUNCRjcwOERCQzQ3REFGRTg3NzgzRUY0OTRDCis6MTAxRTAwMDA5QzQwRUYwNjRGRDNCOTFFODk3RTM3NTgwQkM0NzlEMTU5Cis6MTAxRTEwMDBCRTM1NjdEQkY5QkIxNkZFRTg3Nzg0REIzNTVDRjdGNThBCis6MTAxRTIwMDAwNUZDMURFMUVCQTYxOUVGRDM5OTBCQkUyMTM5NkQyRUYwCis6MTAxRTMwMDBFOEYyOEU5MjE5RTlEQkVBMzNENkZGQkJENDJGRkQ1OUM1Cis6MTAxRTQwMDBGRjMzQkVEMzlDNkRBMUY3RjAzNDdDQzcxQ0YyRDc4QjU3Cis6MTAxRTUwMDA3NzlBRDE4RTQzRkJGQ0I4Q0VERkRGQjNDNkYzNzVCN0ZDCis6MTAxRTYwMDBCMUExRTlDOEY3RkZCRkJGNEY3RUI2NzdDOUEzREYyMTk1Cis6MTAxRTcwMDA4RjdFN0Y3Q0M4QUU1RjFBRjJDM0RBMUUzNUQ0MUZGMUE1Cis6MTAxRTgwMDBEMTA2NDNGOUE4RjY2NzBDRTU2MzBFNkQzNUU0MkZFRDM2Cis6MTAxRTkwMDBGODgzQTFGRUU1Mjc1RjMzRTQwQkQ5NUI4NkZBNjM2RDE3Cis6MTAxRUEwMDBFRjFCRjJFMzlEN0YzMUQ0QkYyMjdEQkZBMUZDNEFDRjVGCis6MTAxRUIwMDA5Nzg2RjI4OUZENEUxOEQ3QTNGOTI3RTQyMjNGN0JGRkNFCis6MTAxRUMwMDA2OTY4Mzc5OTc5N0U4MUVGN0JERkUwMzZEMUJCMjZDNTIzCis6MTAxRUQwMDBCOTQ2QkExQjk3QzNFMzBBQUMwRkNCNDVGOTM1NUU5REYzCis6MTAxRUUwMDA0NEVGMjQxRDZGNTJGOEZCRDJEREU4QjEyNEIwRjdCNDAzCis6MTAxRUYwMDA4ODcxOTI3NTFCMzg4MkUxN0M0QUIxRDM5MDRGRjVBNTY5Cis6MTAxRjAwMDAxQkVBRjc5OEU2MzE5NDY3RjhGQjE5Q0FCM0U2NzgwRDM3Cis6MTAxRjEwMDBGOTlDRUE5MTg2RkEzRDk3RTg4NjdDNUVBMEQ4NTBCRjhFCis6MTAxRjIwMDA3N0JEQ0Y5MEVGREIzMENENTBGRjgyQjU3RTQzNzlGRjk4Cis6MTAxRjMwMDBFMDFDNDNGOTQ1OUJBQTBERjk4QjlCOTYxOEVBNUZEMkVBCis6MTAxRjQwMDAxQzMwOTQwRjBBRDUxQkNBODdFQzZBMzBFNDg3QjVBRDA0Cis6MTAxRjUwMDAzNUQ0MUZGMTUxRDA1MDNFQUE3RDkzQTE3Q0NDQTEyNjRGCis6MTAxRjYwMDA0M0ZFRDI4RTY2NDNGRENCNEY4NjBDRjk0MkI2REI1MDYyCis6MTAxRjcwMDA3RkFDRUQzRDQzN0VCQ0YzQ0Y4NkZBNTdBNEVGMzM5NDlDCis6MTAxRjgwMDA1RkU5Mzk2QzI4NUZGMEE1OTdFRTRCQjM5N0Y5N0VEOERGCis6MTAxRjkwMDBDNDdFREYxOENBQ0Q2RTQ2RUY2MDU3QjI3ODJGRUUzQjk1Cis6MTAxRkEwMDA0QUJCQTZDNEZCNzc0M0JGNEZFNkYyMzgwQUQwNTI3QjQ4Cis6MTAxRkIwMDAxQ0JFMUYxOUYwNTFGQ0M3ODUwNzAyNTE0RUUxM0Q3NTRCCis6MTAxRkMwMDAxNzNGNEYzMzlERTI0ODZFRDI2RkE0OEEzQzc4QkUwNzFDCis6MTAxRkQwMDBFQzgwNDRGNEFFRjJGMkQwNEU0RTA4REI2M0Q5QTcyMzc2Cis6MTAxRkUwMDBDRUQ3OURDRDFFREI5NkNCNjgxRUZCNzNGRDRGRTdBNkJCCis6MTAxRkYwMDBBMkZGQjE2NTAyQkRGQkNFMDIyQjcwMUVGMjNEQzA3NzgxCis6MTAyMDAwMDBBMkRFQkI5NkU5OTVCNjQzMkNGMjVERUNERDcxMEREOUVECis6MTAyMDEwMDA4M0NGRTBCRjVGNjkzQkNBRjBCREVEQ0U3RTQ1QkM0MkQ5Cis6MTAyMDIwMDA4MUY1MkQ4RUU4RkYzRUYwMTdCNDNFOEMzNUQ0MDBGRkNECis6MTAyMDMwMDA4MDhERjRDQjFBMjdFNTFGQUM0OUE3RkNDMzM1MUU0QTk3Cis6MTAyMDQwMDBEN0Q2RjRBM0Y0RDExQTJGOTVBRkFCMTk0OUY5Mjc2QTYzCis6MTAyMDUwMDA3NENBMDc2QjhBMjlERDUwRTNBM0VGOEQzNUQzMjhGRkJGCis6MTAyMDYwMDAyNEY4QzU5ODZFMDIzRjE5RDM2N0MwREZDNUYyQ0RFMEYyCis6MTAyMDcwMDBGRjYyRkVCOTlBMDBBNTREMzVGNUY0N0Q2QjREMDNFNTgxCis6MTAyMDgwMDBCN0Q1QUNBNUZDRUY2QjgyOTQzNkQ3NkNBMkY0MEYzNUI0Cis6MTAyMDkwMDA0RDU0REU1MkQzNENGOTU3NkE0Mjk0MEZENUVDQTJGQzUyCis6MTAyMEEwMDA2QjM1NkQ5NERGNTFGMzExRTU3N0Q2QjQ1M0JBQUJFNkQ3Cis6MTAyMEIwMDAxMEE1NkZENjc0NTBGOURCMzUyNzI5N0Y1NEM0NURGNzFFCis6MTAyMEMwMDBFNTFBRjcyMzY0NUVCRTVCMjFFREJGQzk2OEJGMjM3MUNCCis6MTAyMEQwMDA4QzM0N0Y2REIwREZBM0VDRTg2ODdDMUMxMUUzRTAzQjNGCis6MTAyMEUwMDBCRDQzODE2RUNEOTlGOTFCNkEyM0ZDQTdBRkM0NzhGMjdBCis6MTAyMEYwMDBCRDhBRTg3NzI3OThCMDRGRTVGQkIwRjIzRDhCRDk2MkY3Cis6MTAyMTAwMDA1RTE1ODJGRTg3MjE3REY2MjNGQTdDRkI3Q0ZDMDVFOUM3Cis6MTAyMTEwMDAwRjVFOUJFQTNGNDVGNDk5NjMwQTkwM0Y2Q0U3Rjc5MUE1Cis6MTAyMTIwMDBFRjQ4RjVCMzlFQzM3MERGQjA3QzI3OERFN0Y0RDJGRTk1Cis6MTAyMTMwMDA2MTg5MzU5NDdBQzM1MDdBMDc5RUUyNzJERDhENTcyNTA2Cis6MTAyMTQwMDBDRTg5Nzc1QkZFQ0FFMTZDQjRBNzhCRkZBNUQyN0I2NDE2Cis6MTAyMTUwMDBFRjk4MURGNEJCOTcyOTNEMzk1QzUyN0E5QTBDRTkzRjAwCis6MTAyMTYwMDA1M0ZEQUU5RTkwN0VFRkE4QkVDNTA0RjNGRkZFQjI0NUMwCis6MTAyMTcwMDA0RkZFMjQyRkVDMjc1RjhEQUUyNkY4Mzc1Mzk4Qzc0Q0JGCis6MTAyMTgwMDBFNzExOTlGRUM3M0NCNDlCQzBCMEMyRkMwRDJDNDA2OTVFCis6MTAyMTkwMDBDMEVEQ0ZDMjc1REQwODA2MzdFNkZEQTNBREI5QjFENkY3Cis6MTAyMUEwMDAxNTNEQUY3QzMxQUY3QzMxMUY5OUY2NEZGM0Y3QzVGRTdCCis6MTAyMUIwMDBCRTc3RTgzNEFGNzc0NjVEOTE4RkVCOTJGMzlBMjdERUQ2Cis6MTAyMUMwMDA5RDk4Q0MzQTlFQzBGOTdEQkZGRDlCODM0QUVGMzBGQ0MxCis6MTAyMUQwMDBBNTNGNEVFRjAyQTBCRkIzNDgxMUVGRkY3NTc5N0Y4MDk2Cis6MTAyMUUwMDBDQUE3REZBRTkwN0QzNjAzRkMxOURDMjc5MkVGMEQxQ0U5Cis6MTAyMUYwMDBBRjM2OTM3Q0M0RjcwOTcwMUZFRDc4RjVFNzc2MjQ2NzU2Cis6MTAyMjAwMDBBOEM3NzA5RkEzMTYwRkY2NDA3OUVEQ0YxNUEyQUZFOUNFCis6MTAyMjEwMDBGODhFMDhCNDlGOTE5NkM3RUY0QjMzOUI4RTdBNzg3QUVECis6MTAyMjIwMDA4Qjc1M0REMkU5NzRCMEY3RDA3RjAyRkEyODQ0QjhDRjVECis6MTAyMjMwMDAxQkE1RDI3REY1Nzc0Q0MxN0M4NUY2OTNDQjJEMEFDQ0JFCis6MTAyMjQwMDBBQkMyRUQzNUZDOEU0NDM0RkUxNzhBRkIwN0YyM0JEMDVGCis6MTAyMjUwMDBENTQ0ODREN0Q3MkY4REU4NDdGMUY3NTc0Njc5MTA0RUVDCis6MTAyMjYwMDBCNTI2N0VFRjI4RjBBNjJBN0VERjhCOEI2Njc1Q0NDNTVGCis6MTAyMjcwMDAxNDVGNjQ5QUQ3OEI3MUEyMTI3MTRGQTU1NTY1NEI2MjlBCis6MTAyMjgwMDBCRDFGNUYyOUYwRjQ0RTNBN0Y1RkIwMzY2QTlGQTVCQzUwCis6MTAyMjkwMDAyN0Y3MkZDQjdCRjJCODczQzk2QkJCRTk5REE1ODVCQjM0Cis6MTAyMkEwMDBGODdCOTA2QzY4RkI4MEM4Nzc3OTNBRDdCM0U0Q0RGRUIxCis6MTAyMkIwMDA3RDIyRDY1MUQ1QkM4RjlGQUY2MEVEMDMyMkNGOUZBRjVCCis6MTAyMkMwMDAxMEUzNEJGQTUxMkQwRUZGN0E3QkU0RkMzQUU5NzkwMUQ5Cis6MTAyMkQwMDBEMTczMzJEMDczNkZBMkU3ODNCOEFGMzhEOUVBNDlCQTY1Cis6MTAyMkUwMDA0MUMxNUZDNzYzNUZFM0ZCNDdGRTVGM0JFOTNDOTEzQzU1Cis6MTAyMkYwMDA1NzM0OEJGOTI4QUQwMEY0MjNGREZBMDJGN0QzN0JCN0VFCis6MTAyMzAwMDBGMzU4MTM3RDVGMzg3MjI2RkQzRTZEMTVFQjE4OTcwRTVFCis6MTAyMzEwMDA3MEJCQUU3RUU5MUZGMUI5QzA2QjFBRUUxRjhGNzFENThECis6MTAyMzIwMDBBOUMxRDIzRjYyM0FBNTUxMzk4OEZFMjlGMEMzQ0YxMTI1Cis6MTAyMzMwMDAxRkVENEFGNTcyM0NDMjc5RDNFNkMyRTVCODM1Mzg1OThCCis6MTAyMzQwMDBFNUY4NjA2RjcxN0MwMEJERThBQUFCRUIzQTgxRkU5N0JGCis6MTAyMzUwMDAxM0ZEMjdFQkI0MEUzNUIxRDg0MEZGRDM5NzMxNUQ3MTMzCis6MTAyMzYwMDA4N0NGQzc3N0YyQzNDOEY5N0ZDNTJENjBBNjc1RDBCRUU5Cis6MTAyMzcwMDA3OUQ1MkI1NjE3RTI3OTFFRTNGQTNBNkNGRjQ5M0RDRDI5Cis6MTAyMzgwMDBGNUZGN0NEMEZGNThFRjg4QTBFNzIzMzk4Q0VFMjExQ0E1Cis6MTAyMzkwMDA1MTE4REQ2Rjk3RjYyM0NCRjVBNzBGRUUxREQ2Qjc0NzgzCis6MTAyM0EwMDA0Q0MxRTE4OUJENDkxRkFGQzNGOUVFNENCRjg2REUwRkJBCis6MTAyM0IwMDA5QUVGQjZEMUZCQjA0NzkyODNCOTUxRUZBMUQwN0I0REQ0Cis6MTAyM0MwMDAzMjdFNzU5Rjk5Qzc5M0EyRTdBNThDRENDOTdGRTdDNENECis6MTAyM0QwMDBDMjAyQjgyRjgxQkZGMzNEMUNGOTM4RDM0MjdDNTY4QjIzCis6MTAyM0UwMDBBMEM1Mzg1ODkxQ0YxM0FCRkYzQUQxRUZBRTUzRENDRjM1Cis6MTAyM0YwMDAwREU0RjA3NzRCQkE4Q0UzMTRFM0M0RjM3MUE0REVFODg4Cis6MTAyNDAwMDBGQzVERjEzNDY2MTg2RjdCQ0YzQ0NFMDcwRTlERTZCRkI2Cis6MTAyNDEwMDBENDk0NEM3MjI2QzNFNjZGQzFGNUNCNzg4RUY0RkY3NjY4Cis6MTAyNDIwMDBFNTdERDE4N0ZDRjQxRjZBRTkzRDI2N0FCRjAwQ0ZGNTMwCis6MTAyNDMwMDA1Q0M2RTVEMTNCNjYwRkJENEJGQzRFNjExRUM1RURBNUVDCis6MTAyNDQwMDA5Q0JEN0EyNDhGN0I1RDJERTM1QzA1NTE3MUFFQTgzODZECis6MTAyNDUwMDAwQjJCODgxREY3NjJDQzZCQzY3MUZCQjM0RjI0N0MyODE1Cis6MTAyNDYwMDBCRUYyNUE4MTY2RjgzREIxRDc4NERGNzlCQ0Q4M0Q5NDdECis6MTAyNDcwMDA3RTJGQ0FDM0NGNTkyNUE2RjBGNzQ2M0ExQzJBRDFEOUQ4Cis6MTAyNDgwMDBFQjAxQUYxRDdGOUY2NDk1ODg4RkFFOEU3QTE3N0NENTQ4Cis6MTAyNDkwMDBEMEM1NEUzQzE3NjA3NUYwRjczRUQ3MTRDNUNGODkzQ0M4Cis6MTAyNEEwMDBCRkVFQ0VFN0VGQzMzQzk5NUY5OEUxODE3NDgwM0Q1ODYxCis6MTAyNEIwMDA0NDZBNTlENzNDMzg3RjQ1QUNFNzIyMjdDMERCODRGNjE1Cis6MTAyNEMwMDBBNjRGQzQzOUU1RUZEQzhDMjNCRDJDRjE3Q0FFN0FGOTQ0Cis6MTAyNEQwMDAxOTJEQjgyQzFFRDdFQjY2QzQ3NzhFQjUzNjkyOUY2QTNECis6MTAyNEUwMDA5MzFFQzJBM0Q0QjNGMkE3MUU0N0I5QzEzNDVGM0YxQ0U5Cis6MTAyNEYwMDBBNzc1NzgzQ0IzNDNGREVGNUIyRDE0N0Y3QUM1NTRGNjg2Cis6MTAyNTAwMDA2QjdDOTdCOEUzQ0Y1Njg2RTcxQzlBMUM1OTFBMUFCNzBBCis6MTAyNTEwMDA0REE3MkUxQzQ3QTk2M0NDMDRGRTNFMjc0QkMwNzc0NDMxCis6MTAyNTIwMDAwNzM5RDk2RjdFODc0ODEyRjdDOTJDRTlDRkY4MEU4MDlBCis6MTAyNTMwMDBEQzZFNTJEODJFRkUwRTk3OUU4MEVGRTEzNTk5RDg4OTM5Cis6MTAyNTQwMDBDQjYxN0VGRjBGQTY0QzA4NjMwMDgwMDAwMDAwMDAwMEY2Cis6MTAyNTUwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkVEN0QwQjc4NTRENUE4Cis6MTAyNTYwMDBCNUYwM0UzMzY3NEU2NjI2OTM3MDMyNzkzMEU0MDE2N0VBCis6MTAyNTcwMDA5MkM5OEI0Q0UyOTBGMDU0QUE5MzEwNjg0MEQwRTE1NTc4Cis6MTAyNTgwMDA4MzI0M0E1OEY0NDY4NTRDOEFCNDQ1QUY1RjMzOTAwMEIzCis6MTAyNTkwMDAwMUY0MkZBMkI1NDhCRDc2NDBBNTY4QjUwRDRBNkQ2QzEzCis6MTAyNUEwMDAyMzc3MDI0MkIxOTdFQTYwNkQ4QkJEQjU3RkYwRjZGN0Y1Cis6MTAyNUIwMDA2QUFEMTJDNDdBQjFBNUU1QUVCNUY2M0U5OTM5OTMwOTc0Cis6MTAyNUMwMDBBMkJEN0ZGRkVGQkZERjhEMUZFRUVDQjNGN0Q5OEZCNTU0Cis6MTAyNUQwMDBENzdCQUQ3REYyOENBM0Y2RkVDQjE4NjM5MzU5QzBDQ0FDCis6MTAyNUUwMDA0QTE4RDM0QTgzOEE5NkNCRDg1NEQ2NDFGNTdCOTU0MDc2Cis6MTAyNUYwMDBEQkVFMUMyODlENTY1RjE4RkFENThFMzNGOTE5RDREOTE1Cis6MTAyNjAwMDBDNzhFNDhBOUM0NThFMDk4NkMzMTNCMThFQkYzMDQxRDAxCis6MTAyNjEwMDBGOERFMDVGQ0I5MEE5RUJCNEMxNkM1Q0JEODQ2ODVCNTdECis6MTAyNjIwMDBGNTQyOTlFMUIzMzM2NjY1RjQ3MzAxRkUwNUNFOTUzMTQ5Cis6MTAyNjMwMDA1NkM3RDg1OENEQzREODE0QzZCQTVERkU5ODVGOEFCRkI1Cis6MTAyNjQwMDA5RjVDMzI1NTFFMUFENERGMkZDNkZGMTdBQTZGQTU4QkM5Cis6MTAyNjUwMDBCQTk5MzFBRjIzRDIyMDYxQzUyRjZCRUE1NEM2RTg3NzBGCis6MTAyNjYwMDA4REIxMkE5NTA1MkQzMDQ1MUEwQjMwREMwRjlCRUVCMzRBCis6MTAyNjcwMDAwNkFBQjFCMTUxN0RBQjAyRkJGOUE1MEJFOTE3OTk5N0Y5Cis6MTAyNjgwMDBDOTBDRkJFOUYzRkM2MTAyQTNGNTFFQjI2N0Q2QjAzMUI5Cis6MTAyNjkwMDA4Qzg1MUJCNEZCMUEyNzQzRjk1M0IzQUY4QjdBQTk5M0VDCis6MTAyNkEwMDA3MUZDQ0M2QzE2MzVDMUYzQTEwQzczNjQ4RjlCQjFDMzY0Cis6MTAyNkIwMDA2MUVEQTk1RUE4MUY5NkFCMDg4RUY3NzRDMjY2MDAwNDkwCis6MTAyNkMwMDA1QjNCQTFBMkM0RTdEQjNBNzk4REFBMDEzQ0QzMzJDQ0IzCis6MTAyNkQwMDA1RjNBOEM3MDJFMzJBOUE1QjA4RkNERjNFRDREMTE4MEVECis6MTAyNkUwMDBFM0JEMERGNjM2MkM3M0NBMkM4QzAxQkM5NzE2NUI2OEMzCis6MTAyNkYwMDAzRDdCQ0JFQUJGNUQwQ0Y1NTY0NzYwQjZBNDcxMzhCMEEwCis6MTAyNzAwMDBCQzM4MUNFMDAxRTNGQjBEMzJEQzZGOEJDQTA2QTU0NDJDCis6MTAyNzEwMDBCODMwODA0QjA2REYwMEJFNzcwRERGMzJCQjQ2NjZFMTg2Cis6MTAyNzIwMDAzMTRFQzY1RTlFRjFGNjYzQkQzMDRFQzY0RTU4NzczNkNBCis6MTAyNzMwMDBCQ0RGNzE0NjBFQzIzQUQ4RjkwQjU3RDkwMURFMDFCRDk0Cis6MTAyNzQwMDBGRjRDODlCRDk5NzhDRUYwRUZDRDBBQjEzRjM3QzE1MzI4Cis6MTAyNzUwMDA3RDRCNkYzNzVGM0FEQzJENEJENjU3MzA1OEVGQTY0RTg2Cis6MTAyNzYwMDAxN0MxQUI0N0YyRjlDN0MyNzg3MkM3QTkzQkYwRjk0NjY3Cis6MTAyNzcwMDAxOTNBMDJCQ0MyNUUyNUYyMzhDRTIzMDcyQTcwM0ZGQTBFCis6MTAyNzgwMDA3ODJCQ0IxQTZFRDAwMDRFMTlEM0ZFOTA3RTBCRjRGQjQzCis6MTAyNzkwMDAyOENGQTQyMTcwMzY2QTM3N0RERjhFRTc3NzMyOURFMTNFCis6MTAyN0EwMDA3Qjk5RDlCMUI2NDdBMTdERThGNTcyQjYwNzg2RjlFOEZECis6MTAyN0IwMDBENkUwMDQxNUNFNjMwQjlDRDM5QjFFNUM0RDY0QUM2OUM0Cis6MTAyN0MwMDAzQTk2ODM2MzREMkUwMkFFOEI5NzQxMTc3RkNFNDQ3QkEyCis6MTAyN0QwMDA4NEVBNkZCOThCRTk5QzAwRkVBMkZGMjBGNURGQTI2Q0IyCis6MTAyN0UwMDBCN0RBNzExRUI3NTVERDkzODBGNzU3OTk1OTQ3MkZDQzRCCis6MTAyN0YwMDBGNzc1QTQwQjdDRUY3Qzk3QjYzMDAzRUIxMkQ1RUZFRkE3Cis6MTAyODAwMDBEQzE5Rjg5RDA3RDcxM0ExMzI3QjdFODQwNTAxREZFQzJDCis6MTAyODEwMDAxNTYxMkQwQ0ZEQUMxQjU4MTBERjRGODZFN0RCNkU5OTYwCis6MTAyODIwMDBERUI3MUU3QTg4NjlEMDJGREJFMzkzODJEMDJGNjczRTE0Cis6MTAyODMwMDA4Q0E3QzM5OUQxQjk4N0M3RDQ0MkJGM0Q4MDMwOTMxMUNCCis6MTAyODQwMDAzRUY2NDgzODA1NUQ1RTkzREI3MDRDQ0UxQ0ZERkM5Mjc1Cis6MTAyODUwMDBGMTgwMDkzQ0QwQ0ZEM0ZBNTc3MzEwRjkwMjYzMkUxM0RECis6MTAyODYwMDBFMkRCNUEyQkM3RDNDNjYyMkJBMzc5RDcyOUJCRDM2MDJGCis6MTAyODcwMDBERTI3QjQyQzVBRjc4NzM5MEQ2Mzk4NzdGNEY5MUU4MTU3Cis6MTAyODgwMDBGMzA5MDMzRDQ1ODBBRUIwRENEM0E5QjIzMEUwQzk2M0EzCis6MTAyODkwMDA4MDJGNThERkRCQTk1MUI5QUZCMzgyQ0EyNzNCN0RENDYzCis6MTAyOEEwMDBGRTU0RTc3NEFBN0ZBRkQzNEZGNURFQ0UyNkFBM0ZEM0ZFCis6MTAyOEIwMDAxOUEwRkE4MUNFNjZBQTNGRDcxOUE0QjJBRkIzOERDQUM4Cis6MTAyOEMwMDAxRjc1NzY1MDdCN0ZFNzNBQUE1Rjk1MDZFNzg2RkJBOURFCis6MTAyOEQwMDAwOEJCMTZDMTc5RjREQ0E5RjgzNTgwQ0ZBMDM4QzdDMzhFCis6MTAyOEUwMDBGRUUyNkMxRjlDQjdBREMyMDQzNDA3RTVGMTFEMENGNzg2Cis6MTAyOEYwMDA2MzczOTlGQzExMzg4NzREQUUxREVDOEI1MDVBQTY2NjU4Cis6MTAyOTAwMDBGNDQ4QzA1NzM2M0VFREU4OTE4MDMxREJFNEZCMTlGMjI0Cis6MTAyOTEwMDA4MzQ3QTQ3MDFCRjMzMUY2OTM0ODMwMjBDRjYwQ0NFMzlCCis6MTAyOTIwMDBGQTUyODMxM0VBM0Y4QkRDQjJERDBBNzg1QkE2MkQ2QzhBCis6MTAyOTMwMDA1RTlGNTBENzMyNkE2RkRCQUZDNkVCMTNCQ0JCNjUzQjAzCis6MTAyOTQwMDBCNEJGQUFEREJBM0Q0N0UyRUI2MEY5OENGRDI2NzI3QjhECis6MTAyOTUwMDA2MDNERTA1MUI0OTg4NTExRUU0MzZFMjU4MkY4QjgxMkJGCis6MTAyOTYwMDBDRjRCQzZGNUFCQjRGRUFCNTk5N0NCMDRFQjlGQTAyOTc4Cis6MTAyOTcwMDBCNTQ4MzdEMDNGQ0E3MjJFQkRGRkEwQTZEMUYzRTRGNzA5Cis6MTAyOTgwMDAyRUQ2Q0YzNEY5OTJGQTMxRjM0NUM2QzM3NkU5MjJFMzY1Cis6MTAyOTkwMDA1OEE1QzVENjE4QUM3RDlCNDVGMDhGNUMwN0YxOEYxRUZFCis6MTAyOUEwMDAwQkJCMzEwMDcwRUZCMUYxRjJDQTYyODlGOEFDQjNCODc5Cis6MTAyOUIwMDA2MUI3MUJFNkRERURFNjcyQUJDNzE2NTYxQjcwRkU2QTBCCis6MTAyOUMwMDA5MzBGRjkwNTVCRTdGRTc5MzFDQ0Y3OTU5RkNBNkNBQkE1Cis6MTAyOUQwMDAxNkM3Q0ZGRjEwNzg1MDNBMjE4M0NCQ0Y3RkI0NDY0QTM5Cis6MTAyOUUwMDA2MTlFQ0Y0Rjc4QkFEQjA5RjVEMjQ3N0QzRTMzRjRERkU1Cis6MTAyOUYwMDBDNjdDNzZDNDkzRjAzRDI2RjYzOEQ0QkYzQkI5QzRCOTQzCis6MTAyQTAwMDAxMEJBNTc0REY5ODExM0Y5RUQ1MjM3RTcwMzExQzY5QTAxCis6MTAyQTEwMDAxMERGRDY2RkJDNjVDMjIwOTQxRjlERTA3QzRBNzFGMzI1Cis6MTAyQTIwMDA3OTc2NUI2MjFENzQ5RTUzMUM2QzBGMDk4MUVERTlDOEI5Cis6MTAyQTMwMDA3N0Q2QkJFMDkwQTYzMTY2MUFDNzRCQzVBMjVFOEZGRDY0Cis6MTAyQTQwMDAxNDEwRDQ2MTU4OEZGMjk3NjlENjAwOENENzc1MkVBRENCCis6MTAyQTUwMDAwOUY5MDg2M0IxNzRFNDYzOEEyREE4NjZDMUYzRUQ2MUQ2Cis6MTAyQTYwMDAxM0YxODUyRUNEMTE5MTYwREM2RDhFREE2MzFBRjI0RjcxCis6MTAyQTcwMDBENUU0MkI0NTM4N0E0RDA0Qzc2RUM3MTcyMjY2RTRDRkRDCis6MTAyQTgwMDBEMkZBMzY5NDJGMTFGNTE5QUIxQjlFNDdCQzI2MTVFOUQ3Cis6MTAyQTkwMDAzQ0UyNUZENDg0RjU3MDUwRjY5NTZBODI0MTYwN0JEMDQ5Cis6MTAyQUEwMDAxOUQ5OEFFM0IyQTE3RkI5MENEQjVCOTgwRkUxQjAzMTkxCis6MTAyQUIwMDBFRjRGODdEMkExREVCNTU0RjU5OTc5NkY0RDA2QjkzMzQyCis6MTAyQUMwMDAwRTdGODMyOUJCMkM4MzFCRDI3MTFEQ0I3ODdGRjhDRDYxCis6MTAyQUQwMDBCNzEwRTU3MDFBM0ZCRkFGMEZDQzU1OEI0OUVFQ0I2MUY1Cis6MTAyQUUwMDBBMTQ3NDgxNzgwMTA2NThCQ0ZFQTgzRjYxQTQ3NkQ5MzhDCis6MTAyQUYwMDAxRjRBMzlBM0Q2QUFDMTNFQkJENTVBRUIwQURBM0Y3M0E3Cis6MTAyQjAwMDA4MDMyODQyMjhGRjg1Mzk3NkEyMjM5OENFRDVGNDQ3QUExCis6MTAyQjEwMDBFRjY2MkY3QUYyODg5NEE4QkREQkIxNjMwMEUxMjFERjc0Cis6MTAyQjIwMDBDQzk4NUJDM0Y1QzE3QzNBREYwMzc4NTg0QjY2MUVEMzYzCis6MTAyQjMwMDA2MDFGM0RCNzM4NjkxRkIyRTRBMzNBQkI1OUE2NzVFN0Q5Cis6MTAyQjQwMDA2QkY2MjhBQjAxM0VBRjJDMzhDNjgwN0ZFNDVCNkY5RkVECis6MTAyQjUwMDA4RkY1NzE2REYyRUYwNjEzRjhGNEQ4QTBCMTlFREI2QzFGCis6MTAyQjYwMDBBQzY3MzNBODVCRTNGMzJFNzI3M0ZDNEQ4NjVCMzIzQzlCCis6MTAyQjcwMDBDNkE5REQyNzcwRkRFMzgyMzIzRDRDNUVGRjQzRUEwM0M4Cis6MTAyQjgwMDA1OUY1MENEN0U5QTA3NUU2Mzk2RUFBMDcwODAxQ0EwNTAwCis6MTAyQjkwMDBENjIzRkVGREFERUJBQzUxMTc1OUREMzA3RjREOEU4OTRDCis6MTAyQkEwMDBENDk2Q0JEOEQwMDYxQzc3OUJDMEY3MUUzNzNGQ0YzOEMyCis6MTAyQkIwMDA1RDk5NzVCQURDOEE3NDM5NjE5RDg5ODUxM0U0OEUzQjExCis6MTAyQkMwMDA2QzY3RTE4NEY5NEE3QTlDODY3QUU5RjY3QzQzRkZGMkU1Cis6MTAyQkQwMDA5REM1ODZGNkNBQzg0NDQzN0JENUJFNUE0M0JEQkFGN0U1Cis6MTAyQkUwMDA3MjQzRkZDQkZBMUEwQ0Y1NDlEMTc5ODZGRTc1QzcxNkU4Cis6MTAyQkYwMDAxOUVBNTM2MkQ3MUJGQTRGM0I3OTkzQTE3REM2RTA2RDZBCis6MTAyQzAwMDA4NkY2MkJERTVFNjNBODdGNkVFODJFNDM3RjVEREY0RTg3Cis6MTAyQzEwMDA5NjhGREQ4MjJGN0M1QTNEM0JDRDA1OTg5RDMwNUZCMjZCCis6MTAyQzIwMDAxRTlGQUM4NzVCRkZEQUE1NkQ0MDdDQ0U1NDA4OUY2NTg0Cis6MTAyQzMwMDA5NEU3NTA1RjczQTcxMjQ5NDNGQ0JGRDJBNzIxN0ZCOTI1Cis6MTAyQzQwMDA0QkUwQTNCN0RDN0YxRjlFNUI3REE2OTVFNDgyRUNFMEEyCis6MTAyQzUwMDBGRDY0QzcxQ0QyNTNDNkVGMDRCRTU0ODc1QTIzMUI2RUIzCis6MTAyQzYwMDA0RjQ3RkVEQzE5MEU3ODNDRjE3NURCRDRFRDBDRTlCNzZCCis6MTAyQzcwMDAzRUIzODkwRDNBRTJFRkNCQUE5RjA1MzM3MDNFOERFNjU1Cis6MTAyQzgwMDBCM0FBNjFFQTY3RDNFMEZEODQ3RDFEMzQ5OTk4MDNGOTA2Cis6MTAyQzkwMDBGODgwNDJGQTdBNkY0NjgxOENGNEQ3RkI5Nzg5OEQ1NDdECis6MTAyQ0EwMDA2NjVDMzEwN0YxN0Q5MkNBMUVGRDNFRjRFRjk1RDgzMTg2Cis6MTAyQ0IwMDAwNjdBNTJBRjg5OUQwNTlEOEQzRDkzNjQ0N0U5RjZEMzExCis6MTAyQ0MwMDA3ODEzQjM2M0I5NUIxQUJDODNBMTlERDI3MUEyNjEyQzQ2Cis6MTAyQ0QwMDAyMzNCRUI1OURDRjdCREEwNDNFMEJFRUVBREUxN0FENjc1Cis6MTAyQ0UwMDBDNkJDNzkxQUVBNjUzREVFREU2M0M1Qjg5RTVDOTAyQkUyCis6MTAyQ0YwMDA0ODA4NzJDMDg3N0E4NUJFREYzN0M0NzlDQUM1M0Q4MzZDCis6MTAyRDAwMDAyOEZGRDY2NDU5MzVENDk3NjRFQkY2QzBFRjAwNUU4Rjg4Cis6MTAyRDEwMDA1ODA2OUZFODgyN0FCN0E0QUU0MkJCMjM3Q0E3QzNGN0NDCis6MTAyRDIwMDAzODQzRkQ5MUMzNERDQjMwRDU2RDgwNzE3QkQ3RkJFNTJBCis6MTAyRDMwMDAyQzY4RUZEREMyN0NERDQ4MUYzOUY1MUJCMkUwNzk2OUY0Cis6MTAyRDQwMDBFMTBBOTMxM0U5QzFCMzdFMDM5NkFGQTAxRTBCRjBBQjZCCis6MTAyRDUwMDBGNEVFMzY2NTQzN0JENUU0RkE2Njg2QjI1Nzg1RjlCMjYwCis6MTAyRDYwMDA0N0M3Mjc3M0U2NEU4NkZCNjExRUY5MkRDNDJCRDRCQUU0Cis6MTAyRDcwMDAyRkMwRDJFQjlENzBERTMwQUYwRENGNUJBMjkyRTA2MDMyCis6MTAyRDgwMDAzQkU3ODhEOEIwRUVFMTcwQjFGOUE1NDgzQUQ0NzMzQzdFCis6MTAyRDkwMDA3RUM5RUZDNUY3NzZEMkY5REFBMjQ2M0QxNkVDQ0YzN0Y5Cis6MTAyREEwMDBEQzUzNTA5RjM1OUVBQjZDN0Q4MEQ2QjdDREM0RTlBMjc1Cis6MTAyREIwMDAyNzRCM0I4RUYyQjlDN0VENzE3NjY5RjE3NUVBN0NFNTc4Cis6MTAyREMwMDA2RDYxOEZFQUNGNzVCRTcyM0REQTE0NTNFMkZBMERFMDAxCis6MTAyREQwMDBGOTRFNTMwOUVBNjdEQjE5RjIyN0RCREREQjE5RTJCNUFGCis6MTAyREUwMDA0RDBENkIwQ0Y1RjBBRjg1MDlDRjc1RkRGNjBFNDEzMzM3Cis6MTAyREYwMDA4REM1Q0Q1Njk0RDc2NzczNkE0OTlGQjVBRERCNEJFNzU4Cis6MTAyRTAwMDA5NTBDMzdEQkEwODlGOTJGMDJEN0NDQjI1RDI0REY4MTg2Cis6MTAyRTEwMDAwMTZCNjg4NzFGQ0E3M0I0RUQ0RUExRjc2RkQwMzg5RDYwCis6MTAyRTIwMDA2RDAxMzI4RTc5MDk4RkFDQzhBRjJEQzJDRTAwNEMzMDA3Cis6MTAyRTMwMDBBMTdDM0JBQjMyNkUyN0Y2QkFBOTdFNDcxNkFGRUJFMzE3Cis6MTAyRTQwMDBEQzkxNUIzQkY2NjJGQUI3MERFQ0MyNjBDMjNFQjZDMEU1Cis6MTAyRTUwMDAzQzA4OTc4REU3MTczNjIxNUM5OTRDQzRDMUI2RkRDNTc3Cis6MTAyRTYwMDBCQjdCMkJDMjUyRDgzNTFCMDRCQ0JGQUU3MUY4OEU1NzRBCis6MTAyRTcwMDAxOEQ5MDVCRTlDRjk0RDI0RkY1QzRGRDJGOTA1Q0UxNTNCCis6MTAyRTgwMDA5MzEwOUU1NkVDMjRGODgzMTE2REVFQTBGNTVCNzRGOTU3Cis6MTAyRTkwMDA2NEJBNzAxOUFENTk1MzYwRkQwNUY4QTQxODRCMkVERkM0Cis6MTAyRUEwMDBBMENCQzAwNTA5Rjk3RjgyM0NFMzA1QzlGNzAyRkUzQkQwCis6MTAyRUIwMDBDODAzNjM3QkY5NEU2M0JEMzI5MkY0N0U5OEJEODZGMkZGCis6MTAyRUMwMDA3RjI1RTNGMEFBREE2NzZDRkYxNkNBNzFFMDFCMkI4NTM5Cis6MTAyRUQwMDAxQzY3REIyRDI0RUZBQ0IwQTIwQjVDRkVDNkU1MjFGMDM1Cis6MTAyRUUwMDA4NzZCN0E2M0Y1RTkzMDRFRDE3NDhCNDE0RTE2MjRGNjI4Cis6MTAyRUYwMDAwM0Y4RDVERTZBMEFBMEREQTBGQjVGNzRCODA3REE0Q0UwCis6MTAyRjAwMDAxNjg1RTg0MTIzMzgwRDNGMTdGRTk2NjRGRTNEM0U4RDQxCis6MTAyRjEwMDA5RkNCMjEyNTIzQjJDMUNERkQxMkMxMzI2RTY3MDc4MTNGCis6MTAyRjIwMDAyNEVGOTU3REJGNkE0MTdCRUM5OEQ5MDc5ODNEN0M5RTQ0Cis6MTAyRjMwMDBDOUU3QkY2RjU4M0YwRUNDMkYyNjdCNzdCMDBFRUQ2RkUxCis6MTAyRjQwMDA5QzJGOTgzMDlGRUUzNzI5MkMwRjJFMkE4NkZFMUYzNDk3Cis6MTAyRjUwMDBFNTRDQzY3MzRBMkI2NDE2QTQ2M0REMkZBMkRCRjlCQkQ0Cis6MTAyRjYwMDAxMTU3NjBCQzZEQkU1NzNCMEVDMzNBMzY5RjRDMjM5RjMyCis6MTAyRjcwMDBDNjZDRjNGMTYzOUQ1MDVGNTMyNDEzREY1M0E3QURGQTgyCis6MTAyRjgwMDAzNkRBRDMwREZGMEFFREYwQ0U2NjREMUI0QkZBRkMzMTVECis6MTAyRjkwMDAwQkQ5RjUwRDAyREYxQjg0OURBNkZCNEY2RTJCRTZGQUM1Cis6MTAyRkEwMDBGNDJEQTI4NDM3RUNEQzRFOEZEQTUxRUZBRERBMDczQzFBCis6MTAyRkIwMDBEQjg4MkZFOUJDREQ0RjdBNzE3NTZGNzJCQjlGMjFCRDM1Cis6MTAyRkMwMDA0RjE0RjgwMDc1NDczREQ0Mjc4OTdBMkY5M0IyNTUzOEFFCis6MTAyRkQwMDBFN0NCOUEwNzBGQTFDOUUxN0RFOTg4MURGNUIwRkQzNjYxCis6MTAyRkUwMDA4RTFGNEYwQUJEMkY4RjQ5QkUyOEFDM0Y2RjlGQzMxNzVFCis6MTAyRkYwMDA4MTdFMTk2NkI2M0YwNkZCRjBCRDI4QkYzOTk4MDBDRjI5Cis6MTAzMDAwMDA5QTdFNjNERENCMTJFQTZFNUM4N0IxN0U4RkQ2MjEyMTdBCis6MTAzMDEwMDA1Q0VFNjkwMTU0ODQyRDZGMjhDRUM4NzlBQjhBMjFDQzJGCis6MTAzMDIwMDBDQjEwRkY2NjlCMUQ5M0QwRUU1QTUzRUY2MDA4RDdCNEM4Cis6MTAzMDMwMDA1M0U1REY4QzIxOUYzOTYxNjYyODNGRDQ3NEVEQkU0NjhECis6MTAzMDQwMDA3ODVGRkQ5NzZDREY3QTJEN0VGRTRGNzYyMjhCNjdFQ0UyCis6MTAzMDUwMDBDMTBCM0VENkVEODlGQkE5OUU4MkYzNDQ3OUYzM0RCMEM2Cis6MTAzMDYwMDBDN0IxQkQxN0NFMTVFQkNGODAzRDhFRTUwMUIwQzdGMURFCis6MTAzMDcwMDBGOTczNjA4RjYzQkQwRkVDNzEyQzdGMDRGNjM4M0VFRjVGCis6MTAzMDgwMDAwNzdCMUNFQjdCQ0JFQTFGNENGNjZGMjVGQUY5RTJGRUJGCis6MTAzMDkwMDBBRDQxNDlGNzZGQTUwMTVDMUJEMDRFOUM5MkUwRTcwQTU5Cis6MTAzMEEwMDA3MjNGRDcyNzhGRTNEN0M3MjFGRkUxODg3MTg2RkQ4ODVDCis6MTAzMEIwMDA1NjE1RkQyN0M1RjBDNjE4NzhGRURFOURCRkRFOEI3MjYzCis6MTAzMEMwMDA2NTgxMTREQzg3RjhCRDdBQ0E5QjBBRDdCMzg3MTRFQ0Y0Cis6MTAzMEQwMDBGRkIwMERGMDFGRjg1NEUxMjhGRUMzMkI2NzlEQkEyMzAzCis6MTAzMEUwMDAxN0VDRjQxRjE1QjcyRTQ0M0JGRkNBREI0RkQ1OEQ4Nzc1Cis6MTAzMEYwMDAzQTJCMzlDNkVCREYzOUY1NkMwMUYwRUE1QjRBQjZGMEUyCis6MTAzMTAwMDBGQUZEQTdDRTE2NDJGQjE4RjZFQ0MyQzYxOUU0NzcyNEU2Cis6MTAzMTEwMDAzOUY2QjBDNDlBMTNGNUMwOUYwOEZBMENBRERCNDFGQzM4Cis6MTAzMTIwMDAxNEU0MDA0MzM4NzRFNTA1NDg4RTlFQ0UxOUNBNUMwMTRDCis6MTAzMTMwMDBGRDQzQjk0Mzc5Mzc1RDg0Q0Y4N0Q2M0Q0OEYyQUEyQjRBCis6MTAzMTQwMDBGM0Y3QTRBNzc0MERDQjE1MUZDOTE1N0Q1RTVEQUU3QzhBCis6MTAzMTUwMDAyMDcwNEY5NzJCNkI2Q0JDM0FEQzJGNTg0MkNGRUYxNzg3Cis6MTAzMTYwMDBGRTFGMTYyOUE1N0FCNjhERDdGRjU3ODNGNjBBREE0N0QwCis6MTAzMTcwMDAwMDFGQjI4NzBGNjc0RUZDRkE0Q0I0M0Y5QjY0NUYxQTg2Cis6MTAzMTgwMDBENEVGNzdENERBNTAyRTlEMTVGNDBCRTM4NkQxREUwRjAxCis6MTAzMTkwMDBDRkI2NDYxRUM3NDNDREQxODgxRTlERkFGODM5MUU1NEJFCis6MTAzMUEwMDBDRTk4NTNBQ0UzQzVDQkVENTFGNDA3NzQzNTVBRjdBMDc0Cis6MTAzMUIwMDBERUI5QzM1MTRDRTM3NTRENTdDMkU4ODdEMUVCMUIyRUU2Cis6MTAzMUMwMDBCRkRDOEE3QTQ3NTZBNkQzOEQ3NTlEM0ZFOUZFNUJGODMyCis6MTAzMUQwMDAzMUUzQjgwRDYyQkIwRDU2NDdENDlDODlFODYxRjk0M0QxCis6MTAzMUUwMDBBMjNFRUQ2MDMxQzIxRjlGMDkwQzE3QTBCN0FGOTU3MENBCis6MTAzMUYwMDBCQ0FBNjNCRTY2N0NBRTQ4MUQ2MTQ0QzY4NzcxRURCODRCCis6MTAzMjAwMDA4RjBDRTFDRjQ0MDkzNTM1NjExRkZFMDJCRTJGN0QxRkIzCis6MTAzMjEwMDAxOTRBNThFQzgzRjRBOTFEMEU1MzE0RjVDMjFEQjAyRkEyCis6MTAzMjIwMDAxQ0VGREY4QjM1ODI0RkYyQkUxOEJBNjg2MURDNTlEM0QwCis6MTAzMjMwMDBDNUJBRDU5OTA3NzAxREIzNERGRTZFN0NFRkM4QzcyRDdBCis6MTAzMjQwMDAzOTg4N0U3MzU4ODc4Q0NGNEJDMEYyNDVGRjJEQTA3NDEwCis6MTAzMjUwMDBGNzg1OEJFODI3QzlGRURCMkJGRjREQTJGREIwREIxNTAwCis6MTAzMjYwMDAzQTE3QTU4Q0VGN0I5NzEyNzEzMzMyODQyM0UzMTY2NUVFCis6MTAzMjcwMDA4QzhFQkYyNTI1RkM3Q0UzRjhFQjY3NDg0RjVENEUzRjA1Cis6MTAzMjgwMDBDNzVGNzUyODczM0RFMjZGRDY1MERFMDZEQTU3MzRFNTI2Cis6MTAzMjkwMDA3OTI0RTM3MUYyRjlENDIwNkQ3MzM5NjA0NkY4N0VEMjU3Cis6MTAzMkEwMDA3OUVBRTdBOEUzNDFCMkZDRkE1QTg5QUE5RkFGOEJGNjA0Cis6MTAzMkIwMDBFOUFGRTA3NEEwRUI1QjBDRUNBMThDOTFGMERCMDRFM0Q0Cis6MTAzMkMwMDA2OTY1RjFCQUUyMEE5MDFFNkRDOUYxNTVBMDlGQjdFQjhFCis6MTAzMkQwMDBBRkU2QjY1NDdFREUxQjA0OUNENjY3REE0OUJGRUVDQTYxCis6MTAzMkUwMDBFNEZBRjU0MEU2M0M4MzVERDQwODc2OTIwNEY4NjFDRUJBCis6MTAzMkYwMDA2NkJENDg0N0U2MzFENzkzOUZDQzNDMTYzNTI4NUM1N0NFCis6MTAzMzAwMDA5MkRFM0E2NjNFRDc1QjU1RDA1QjUzQ0NBQjk3MzJFQTQwCis6MTAzMzEwMDBBRDI5RjREOTYxQkRENTM5OEZFQkFEOTkwQUU5QUQwRjZGCis6MTAzMzIwMDA2NzI4Q0RCQjUzRjA5QkE5MjU1QzJGMUNDMDdEQTRCMEEyCis6MTAzMzMwMDAwQkMxMUUyNDdGQTU2RTBGMkE2QTkwRUMzQTdEOUY1MzI1Cis6MTAzMzQwMDAwNTVERTlGREQzRDQwRTg2RkUzM0IzRTJEMzUwMkYzNUFECis6MTAzMzUwMDBEQkI5OUU5OTA2REJBQzQ4OTBERkZBRkM5MzRBNzg1Q0I3Cis6MTAzMzYwMDAyNUFCOUNFQkZCMjYyQkQ3NEZBRTdDNDVFQTQ4MDVGN0Y3Cis6MTAzMzcwMDA1MDg5RUU1RjQ5OEQ3NzdGMDNERTEwNUZBODc1Mjg3RTQ4Cis6MTAzMzgwMDBENDBGNkExREFFMDZENDBGNDY3QjBGNENEMkYwREJDRUI1Cis6MTAzMzkwMDAzODVGRjFGRDc1QUE5OUU0OEZFQzczMjE5RUY1NUEwNjBBCis6MTAzM0EwMDA5RjdEMDVFREJEMjMwRTkyMzdCRDE5ODUzNDlFQUU1RjFFCis6MTAzM0IwMDA4MzVEMUJBRTgwNDFGNkZGMTkyOEQxMzREMjlFMDUzQkI4Cis6MTAzM0MwMDA2QjRCMDlDNkJGRDZFNDRERTZFMzgyOUU1NzNENTJBRjM0Cis6MTAzM0QwMDA0Q0Y2MUIwQ0QzN0JFNjVFMzc3RjJGMzIwRURGOTNENjg1Cis6MTAzM0UwMDA0QzFGOEI3ODk1NENFRjdBNTlFNEZBNjlEMTRBNTg1N0JCCis6MTAzM0YwMDBEMUI4NjM1NEVBQ0ZGRjg5OTlDOTBGOTdEQzNGMzI3QzdCCis6MTAzNDAwMDAwRTVDMkU1N0MyNjQ2M0NDMjQ4RjIzQjhFRUY3RDZCRTcxCis6MTAzNDEwMDA5QUU3ODNBNUI0Q0I2NzQ4MkU3RkQwMzE3RENDNjY4REVCCis6MTAzNDIwMDBGM0RCN0QyODY3QkUyNDEzQkYyREJDNzUyMENCOTk3MEJDCis6MTAzNDMwMDBDRUJCM0FGQjhBNjQwRkM2MTc2MjQ1OEQxRUYyRjdGOUMwCis6MTAzNDQwMDA1M0FERjdCODNFN0Y3NDAyRjE2NzhCQzAwMzJEMjczNjZBCis6MTAzNDUwMDBCNzFDRTBBRTM5NEMzRTU0MjU0MEY4MUFGODQwQkQ5Q0VDCis6MTAzNDYwMDBENUE4QzJGQzQ1OURDQ0U3ODBCQTlCQTlFNEY3MkFCQTRGCis6MTAzNDcwMDA2MDI2N0MyQjNBQkM4Q0YwNzg0MkNFOTAxNEY2MjZDQzk5Cis6MTAzNDgwMDA4M0FDMzgyMTdFRjI2MTQ3MjNEMTY3RDFEODYxN0I4RjJECis6MTAzNDkwMDBFMjBDMUZFNjQ0MTcyMjdEN0ZGODAwNUY1MUQxQTNDNkRFCis6MTAzNEEwMDA3NjkwQjFFNDk3QkU2NUFEM0Q4MjI2RTM4NEJCNTUxM0FCCis6MTAzNEIwMDBENjhCQkUyREIxNDIzN0FFRTNCMDdCMzNGQTc1N0U5ODIyCis6MTAzNEMwMDA0RTdFMURGMzRFMEZGOTY1QkUyRDA1MEYxMDVDMjNEQUZECis6MTAzNEQwMDA1NzRDMjU2MkIzRDA2RkY1NTdFRDdCQjY5MjFDOEJDRDYwCis6MTAzNEUwMDAyNTM5RjY2NTEzN0IzQzg1REZFOUU3MjVEQzhGRjE5QTBBCis6MTAzNEYwMDBDMEY3MjJEN0NCNDUyQkVCQjAzQzRFRTc3REE5RjRDNEY3Cis6MTAzNTAwMDAwNERGREUzQzY2M0JDNUM1QzIwREFDMDJFREMzMUUwQjNECis6MTAzNTEwMDBFMDU1MEE3QUY1N0IzODdGMTlFNkM3MDI3RTM2QjQ1NjQ1Cis6MTAzNTIwMDA2MDJDQjMyNEY0QkM3RDRGM0VGOTY0MUVDQTZENDZGNjkwCis6MTAzNTMwMDA2NDcyQkMzNkJEQTI5NzFBRDM3RDdFODZGRTA5NDlGNTFBCis6MTAzNTQwMDA3MzNFQUI4NjVENjE4QzAzRkRDNTlDMTJBRkM3NzgwNEVBCis6MTAzNTUwMDA5Rjc2NkY3MjYxRkY0NjhGQ0Y4NTc0MzBFMDlFRUFCQTI2Cis6MTAzNTYwMDAwOUUwRTc3MDI4MkMyRDgxMEZFQjc4RjI2MkM2NTREMjY3Cis6MTAzNTcwMDA0M0Y0NzFENjY0MTQ1RkQ0MkU1NzgwMUY2QjE3OTFEMzE4Cis6MTAzNTgwMDAwQUZBQzc1MTlGMzkzNEMzQUFDMTdBMzczOTZBNjNBODg2Cis6MTAzNTkwMDA2RjZENzJFNEQ0OTI5RkREMDE3QzIzQzFFRkU0NzAxQzU3Cis6MTAzNUEwMDAyNTNDNzRGOEI4M0ZDRTgxRkMxN0ZENEU2MkZGMDNFRTU4Cis6MTAzNUIwMDBBM0I0N0ZCRERGQkI4MjBGMzk3QzUxMUVBNzA0NkIwNjBECis6MTAzNUMwMDBGQkQ5RTQ0MDE4RUQwQzVCMEUyM0JCRDI2NkU1RjQ5NDA2Cis6MTAzNUQwMDAwRUM3NjE0REUwMjNGQUJDQkYyQkUxRjZEQUE2QzJEQUQyCis6MTAzNUUwMDA1ODNEQUQ0RjQ2Q0YwMURCRTRBQTc1OTEzQzQ0MzhBMzZBCis6MTAzNUYwMDAzRTNBNkU1ODFGMjVGRjRBQjE4MEIzM0U0RUQ3MDBERkRBCis6MTAzNjAwMDA2NzYwOURDQkRGOTg4RDc2NjhDMEU1QzE3MTFEMzc1OTI1Cis6MTAzNjEwMDBDMzI4MTczMjI2NUY3NDNDQUY0NzMyRjg4N0UyRTNBRDI4Cis6MTAzNjIwMDA5QjI1QzYyQkM2RjFDQzE5QjUyQThFNjc0MTNFOTEwMjY3Cis6MTAzNjMwMDBGRjY2ODg3NTdENTZGRjE5NDA1NDI1QkI4RDcxRkQwQUM0Cis6MTAzNjQwMDAzMERFOTU0QThGRDA0QkFCRjA4MzhEN0M4RkYzNDlCNzNBCis6MTAzNjUwMDBCMDVGODA0RkNFRjZBMERENTJGOEU2RDE3QUVBQzVFRDM0Cis6MTAzNjYwMDAxNkU3NUNCOTQyODZGM0ZBMDA0RUQwMkNDNUVERjg2NDNCCis6MTAzNjcwMDA3REE2REUzQzQ0NzI0RDk3NDdCQTdDREE4NUZBOEMxMkZGCis6MTAzNjgwMDBBN0E3N0NDRUI5NTg0MTVCODBFNEI2OTQxMzIwQkMwMTU3Cis6MTAzNjkwMDBGRDQ2NDNCQTMxNjM3QzM4MDVEQ0I2MDhGODRCOTlEMzU0Cis6MTAzNkEwMDAzNUE0OTdDNkYzODMwNUY4REVDMThDQjcwQjU4ODJCRkVCCis6MTAzNkIwMDA0REU3ODcyRjdFQkNENzg2RUQxRkI2MzU1QzU0NkZEMUEyCis6MTAzNkMwMDBFM0M3QTNDNThEMzNFRkZBRkQ5NzEyRjU5NkQxRTJDODkzCis6MTAzNkQwMDA5RjE0M0YzRTk0QTk5MDlGRUUxMUM5Qzg5N0JBMDQzRjJBCis6MTAzNkUwMDBGQTlBQzAwQjY3NzFGMDJCODg0NzhGNDgwMTFGRTk4RDRDCis6MTAzNkYwMDBDMjlGRTIyRDBGREU4OUU3MzNCRTQ3NjE2MTM4Q0Y4Mzc5Cis6MTAzNzAwMDAxRjRGNzUyMTdFNUMyQTdDNzUzRjdCQkVEMEE3RjIxREMyCis6MTAzNzEwMDA3QjI1QTREM0ZDQjY4ODg0N0VGMjgyQjY1RUM5N0Y5MUY1Cis6MTAzNzIwMDA3RThCM0M5QzlFRjVGRTE2MzFGRTU1RjI5MDE5RTVENTM4Cis6MTAzNzMwMDA1NTgyOEUwQkNFQzlBQzIyNDEwRjVDRTBFMUZBOTQ0NTc0Cis6MTAzNzQwMDBFOEVGOTk4NzlFQjBFMTc4ODc0QzgxOUUzMjk0MEY5OTdCCis6MTAzNzUwMDAyNkVERjEwNDdBQjdEQzVBNkI2RDQ4ODQwRkM2N0Y1MkIwCis6MTAzNzYwMDA5Q0RGNzczREMzN0ExN0Q5NDdCQUJDQjVFODcyMjI0N0M4Cis6MTAzNzcwMDAzNkM4ODk1MDNBQzc1QjVEREYwOTVEQ0VFRDIxNDkwQTQ1Cis6MTAzNzgwMDAzRTg2RjAzRTdERjlFRkFGNDE5Njc1NUFFQTU1MzA0RUQwCis6MTAzNzkwMDBGRTQ5RjE4RjYxQkRDNjE0NTlBMURCMzE0ODJGM0U1OTU2Cis6MTAzN0EwMDBGREYxMjBCQzNGRTkzQkY1NDQwRjUzNTg5MENBNjk4Q0FBCis6MTAzN0IwMDBFQjdEQTA0NzNERTMyMUZEMEU5NjlDNzBCRTBDNUQwRjk2Cis6MTAzN0MwMDA3OTlGQkM4RjQ3M0M1Q0RFREQyQkM3QzhDRjdBRUY3OTkxCis6MTAzN0QwMDA4OUY4NzgzMjdDRkVFOEQxRkQ1QUMzNzFCRThCRkE0OTc0Cis6MTAzN0UwMDAzNUY0OTNCQTMxNkU2NUY0NjNENjFEMzNENkE3QzQ4QzE1Cis6MTAzN0YwMDBGNTY5Mjc5M0ZEQTJGRTVGMjRGQTQ1MUYwNkJBNDI3RUIzCis6MTAzODAwMDBBMEZCNDEwQkMzOTE3QTE1RDY1QkM0N0EyOTZFNThEMEMwCis6MTAzODEwMDBFNjM0QzBGNTRBQjNDOEE3NjA3RTI5RDEzRjVCMjAyRkFDCis6MTAzODIwMDA3ODA3REZGRkZERjBCOTg3NDlDRkJBNDVCNEZGNDNFMzFFCis6MTAzODMwMDBDQUFGNzRBM0VEM0NFQzY3RDUwODVFRkYzMDc3RDE2QzVFCis6MTAzODQwMDAzQ0Q3NjQ3RjZCNTE0NzQyRkM5MThERjRCM0RFRjJCMEZDCis6MTAzODUwMDBDNUQwMUVGMDRGMjIzQjYwRjExMkEzN0Y5NkQ2OTFDQkNDCis6MTAzODYwMDBGNzVCNTAzQjcyRkU0RjlFMTdGRTM5NDdDRUFGOEZCQkMyCis6MTAzODcwMDAwQkY4MERGMjUxNzYxRUNFNzUyQUMyOERBMUM3ODExNUE3Cis6MTAzODgwMDBDOTUxMDlFM0Q3RjkxRENDOEZGQTcwQzE1QUU2NEYxNTFCCis6MTAzODkwMDAwNzI4MkNFNTc4OTAwQzY3MTZCRThBRTAzNzRCM0NDQkE2Cis6MTAzOEEwMDA3Nzk4Qzk0RUNGNUY2QjIyM0QzMDFGRjgwMUYyODE2QkQ0Cis6MTAzOEIwMDA1NjAxQjk0MEJENjA5NTQ2N0FFNEI1NkQyNjg2NzI4MEEyCis6MTAzOEMwMDA5REVGMzRCQzBGQ0IyNTdGQTc3RUVFQkI3MDNDRDQyMzhECis6MTAzOEQwMDA1N0IzODgwOUY3RDMzMTkxRTg4OUQ2NTU2Q0YwOEJCRjdGCis6MTAzOEUwMDBDOUUxNjUyNTc4NUQzQkRENjJGMDZCMTZBMTFGMzMwMUYwCis6MTAzOEYwMDAyRTNBMUUxNDI0M0Q3RkMxQTMxQUU4MDJFNDU5NjEyOTFGCis6MTAzOTAwMDBFMTNGOTc3M0E1MjhFNzYwNDlFRkNEMzhCOTE3RjNEOUEwCis6MTAzOTEwMDBBRURDQzA2OEJGNDM1OUY2MDhDRjkzMTg4RTI3OTgyRkE2Cis6MTAzOTIwMDA5NDAzN0ZCMkNFQUE0MEJGQ0EzNkQ1NkVDMjdDODY4M0NFCis6MTAzOTMwMDA1OTgzREY2MjU5OENENTk0QjI3MEUzNENDNkZFRDkzRUYwCis6MTAzOTQwMDA1NDI1NDFGREYyRDI0Nzc3RjRDMEExMUNCNDBEN0QxNzc4Cis6MTAzOTUwMDA5REJEMEVDNzkzOEI5QTNFMTdBRjY3NjYxRUE0M0E5QjE4Cis6MTAzOTYwMDBDRTM0MTlFMDYzQzcxOTYwOUY3Njc1REUzRTMzQ0M2RkE1Cis6MTAzOTcwMDBGNzNBQzgwOTY5NjdDMzc0NEFGQkU5QkU1Q0JCMDdGMzQxCis6MTAzOTgwMDA0MUJBNEI0REE0MjdCMUM0NzZEOEM3Nzc0QTU1M0RCRjNECis6MTAzOTkwMDA4Q0YyREQ1ODEzOEZFRjI3OEUyRkU3NUM2NEZDNzkzMEIzCis6MTAzOUEwMDBGRUU0NEYzMUJFOTVBRjNGMEYxRjgxN0NDOUMzRjVBMzI1Cis6MTAzOUIwMDA5RjFBQzdDN0YzNDU2NzUxRTJGQzYyM0M5OTg1Nzc2MzVDCis6MTAzOUMwMDBGQzA1RTY3MzQ4N0MzRTE1RjM0REYyOTgzMUJGNjA3OEY0Cis6MTAzOUQwMDAzRTE1RTZBQkZFM0JFQ0E3NzlFNDc5NTgyRTc2MUVENzcwCis6MTAzOUUwMDA3RkJBRjNFODM2Rjk2OUJERTExQTA3RDkzRjBDOUE0RDYxCis6MTAzOUYwMDA1M0QxQ0VFMEYzRDk2NEY2QTI1Q0NCRTFEQTNEMzUwRUNCCis6MTAzQTAwMDA1N0QwRjc2ODVDRThCRUZFODI4MEIzMDVFMUFDMkEwNEJCCis6MTAzQTEwMDBFN0QxRTA3NjQ4RTVGOTRFNUI1NDdCNjRCREZCRkZDMTFFCis6MTAzQTIwMDA3OUI5Rjg3OTI1Q0U4NzdBRTMyNUNGNzczRENDOTc3MzlFCis6MTAzQTMwMDBFOUYzMjE3QzkxN0U4NkUxMEI2N0IyMjFFRkQyRTEwQkE1Cis6MTAzQTQwMDBBQjBBNUYwQTdDMEZDMUI4QTYwNEI4QzZGMzhBMUU1MjNGCis6MTAzQTUwMDA1MUZGQjc1OTAyNTYxRkYwREYwM0E1M0M1RkQxOUJCMzVFCis6MTAzQTYwMDBDODRBNzkwNkI5OEJBQzk4QkZCN0QxRUI2OEMyNzhERDhDCis6MTAzQTcwMDA0NkNGMTJBQjI1NDE0RTZGRjRCNjUwM0JGNEE3N0MyOERECis6MTAzQTgwMDA2RkQ0OEVFRTA5NTZDRDYyNjRGRjZGOTlEOUU4NUE4MUUyCis6MTAzQTkwMDBGOEQzQzFGM0FCRjQ3QzIzNUQxRTMyMTFCRkE0N0RDMTBBCis6MTAzQUEwMDA4QjYzM0U3NzYwRTgxMEY0REZEMjMxOTlGMkM5QzY2NEM3Cis6MTAzQUIwMDBGRDg5RjJBOEI2QjVGOTdDRDhGRTJEOEMzMzgxM0VGMTk0Cis6MTAzQUMwMDBBMDg4MzMyMUEyOTIxRkFERTZGMjQ3MzEyRTVCNUJCQThDCis6MTAzQUQwMDA0NkMyNzQ4RUMyNTU0NkY5OTQ5Rjk0QTc1MzdCMjZENjRFCis6MTAzQUUwMDA4MEY5NTg2QzA1Q0ZCNzcyQjVDODQ5RjJEMDQ4QjdEQjNBCis6MTAzQUYwMDAxMEFFM0MyRjJBMjI3MUY4MUFDNkZCM0QzMkU5NUNENDg1Cis6MTAzQjAwMDBFRkY3MzBCNEVGOUU4NUIxQ0M0NkZBMzI2MTdFNTIzMjg3Cis6MTAzQjEwMDAzRENBOEE1RkFENDdCRDdDOEQ4OUQ2NTE4MDIxN0YxMDFCCis6MTAzQjIwMDA3MUI1RDVGMzVEMkJFMDc5RTFDREIyNEY4MkU3NjNCRDhFCis6MTAzQjMwMDA3NzUzOUUxMjY4RjVBNDZGNzhCREM3MUJCMDNFNjI5Rjk1Cis6MTAzQjQwMDAyQjhERkI0OERFNTdGMkJBNDE3MDkxMUVBMjlGNTdFREI0Cis6MTAzQjUwMDAxOTVGM0FEQTUxQjVBNThCMjg4RjhDN0U3NDdBMzcyNzk2Cis6MTAzQjYwMDBFRDI3MUJFRDVGOTNERjA2NzJDQ0VFNDlEODE3MzNGNEQ3Cis6MTAzQjcwMDAxMzc2REE3RjZERkQyNDIyMTNEMjUxNzJGQ0VCNkIwMUI4Cis6MTAzQjgwMDA1QTY3MUFGMzU5MTU3QUFGODVFQzQ1M0RBRTk2OEZCNDU2Cis6MTAzQjkwMDA4M0U3M0U5RUYxQjg0NEYyRkI1M0Y5RkJDQ0M1RTM2Q0RFCis6MTAzQkEwMDA2OTc2MzAzRDgxRkVBNERCRUNFNEJGNEM0QjgzM0E5QzRDCis6MTAzQkIwMDA4RkE0MzBFQjM4NzhCRTRCRjhGREQ2NEI0Q0M2N0E3Q0UwCis6MTAzQkMwMDBCRTI4RTVBOTc3NDk4MUVEM0UzNzk2REM1RUIyNjQwNUYzCis6MTAzQkQwMDAyODBGMTFDM0I0ODk3NkU3MjFDQ0VGODBGNjM1QjdCQTQ4Cis6MTAzQkUwMDBDN0EyREY2RTBDMTA0NDBDRUQ2NjExOTdEMkZEMjQ5OTJDCis6MTAzQkYwMDAyNTgzQ0I1MTdFMTc5Nzk1MkNCNkEyN0M0NkM3RDJFNTdDCis6MTAzQzAwMDA4QzVEQjZCN0U4RkVGMENDMzg1REE2OURDQjY3NUE4MkQ2Cis6MTAzQzEwMDBGRDkyMjY3NzUwOUU0N0RBQjlGMTA2N0Y0QTU0RDg1RDY3Cis6MTAzQzIwMDA3QUREOUYyMzM3RTI3QzczRDAyRUMwQkMyNkE2NzZFM0Q0Cis6MTAzQzMwMDA3QkY1MDAxNDJERDEzRjdBQ0U2NTE4MjczRTdFQTE2MTE5Cis6MTAzQzQwMDBERTI4RDhDRjg5NzE4MEQxQzc0RjY3NUE0NUUyRjhDNUMxCis6MTAzQzUwMDBBMzhDNUY5NjM0QkU5QTcyRkNGOEI4RDk4NjcxMzdDQUM1Cis6MTAzQzYwMDA5QzVGODQ3M0VDOTE1NEZFQkM5NTY1MEQ1Nzk3RTU4RTZGCis6MTAzQzcwMDA5RTg3RjZDNTMyRTE3N0IzMDJDQkM3Qjg5M0MwOUJDRDIwCis6MTAzQzgwMDBBRTBFQ0E0QjMzREI3OTdDRDQyMkUyMjU4NzMzREE4ODQ3Cis6MTAzQzkwMDA1RkIxNDI2MzVFNUEwMzUzNjU2Q0RGOTgzOUU3OTgwNDVECis6MTAzQ0EwMDBFRDBEMEVBMzlFN0VENUY5MzdDREM4NzdBRTkyOEQ3QUY1Cis6MTAzQ0IwMDBCQTlGNzUxMDdFNUVDOThDQ0YyRDg1NDYzRTQwQkEzNkMwCis6MTAzQ0MwMDBGQUZEMzMyNkM3Mjg3RjJERDc0MTc5MDZBM0Y5MEY3RTQ5Cis6MTAzQ0QwMDBEM0M5MjhBRkNBOTIxRUU4NDAxOTc3NzdEOUI0RUM4REMyCis6MTAzQ0UwMDBEM0ExM0U4NkUzRDdENkIyRjk4QkQxMUZGNDFCODFDNzhGCis6MTAzQ0YwMDAxQjgxRUUxMThFMkQ2QkM2RUUzNjI3OENEQkEyNDQ0QjVBCis6MTAzRDAwMDA1MThFQjQ5ODc4MUUzRkZEQzBGQ0JGQzlDRDI3N0Y2QTk1Cis6MTAzRDEwMDBGMkJDOTQwOTlDRTA4RjZBRUQ5MDAyOUU4NDdERkM0NjgzCis6MTAzRDIwMDBEMEM1RjA3Qzc3MTRFQzQ2M0Q3Njc4QkVCNEU4MTQ5QUEyCis6MTAzRDMwMDA2RjM4MUY0OENDOTdGN0Q5RTY3QjQzRDBCMzNFNUZFQjkzCis6MTAzRDQwMDA1NzhDRkI2QjU1NjJCNEJGNTYxMzEzRjlGRjdDQkUzNzFCCis6MTAzRDUwMDA3MDdGRUVDRjMwOUZDOEVCMUE5RUVGQUJDNkZEQjVBNkM1Cis6MTAzRDYwMDBDNTY4N0ZBREMzRjZBNDk4MkZFRkIzQ0Q5N0E2NzQ1MDY2Cis6MTAzRDcwMDAzQ0U2M0U4OTlGRUJBMUJENEJFRTQ3N0ZGQ0Q5Rjk2QjNBCis6MTAzRDgwMDAzNEM0MzdERDNFQTNGQjMzNjZCQTNGNDM3MkVGREE0MkY5Cis6MTAzRDkwMDA4NUY0MDY3RERDN0Q5REQzOTk1RkUxN0UxQjJDMkI2NjJGCis6MTAzREEwMDA0QTc0MEZBMDcyQkFFNEM3NzhEOEMzNDBGN0ZFMzJGNDYxCis6MTAzREIwMDA0QkE5RDQxRUU5NzQ1MUI5QTc1M0EzRjIzMUIwMDdGRDQyCis6MTAzREMwMDBFNDlGRjI1MUZENkMxOUI3ODdFRjFCQTcyRTVCODlGQUIwCis6MTAzREQwMDA0MkJEOURFNzQxQ0ZCQzAyMzREMUI4QkQwNTA2RDgyMTE0Cis6MTAzREUwMDAxQkU2MUI3RTgxNEREQThBNjhCRTkzQzMyM0E3MzEyRjYxCis6MTAzREYwMDA4MkU3NjQ5RkY0NjJBQzEzRUE2OTMzQ0MxQUU2NzdBN0QyCis6MTAzRTAwMDBCOTU5MjA5NURGRTU3RDkxM0ZCMzU5Q0Y5QkZGOUNDNDA1Cis6MTAzRTEwMDBFM0VEQTA4RkQ0QzNGRTZGMTRBMDY2RTZGOTEyRUE1NTU1Cis6MTAzRTIwMDBENzdFMzU4QkY0OTE5NjI1ODMxOTJBQUNFMzA2NjlEMkE3Cis6MTAzRTMwMDAyRjNDMDA4RkZGMkRGNDkxMUJDNzczM0E0RUI2Mjc3M0FBCis6MTAzRTQwMDA1MEIyNENDNkJDM0U3MzI0MDJCRjJFQ0U1ODRDRjZFODhFCis6MTAzRTUwMDBFMkE1OEMzOUUxRkQ2QkYxM0Q5MDJCQUYwODdERTZFNUU1Cis6MTAzRTYwMDBDMTM0ODZGNjVBQjg5MUM3OTk2RkI4REI2ODQ3REU2N0U4Cis6MTAzRTcwMDA4QkFBQThDN0REMzcyOTg3RTE3OUI0QUMzNUI2NkYxNkIwCis6MTAzRTgwMDBGMTgyQzU0OTc2RTVCNTQ5NzkzNEEwNjVGMjdDMTBEQzRDCis6MTAzRTkwMDBGMzBDQzZERTJEQ0JDOEExM0M1ODkxNDdGMzg0RjAwQjQwCis6MTAzRUEwMDBCMUMyMUM0QUI2NzZDRUY1OENDMUY4NjM5QTkyRkE3RUZFCis6MTAzRUIwMDA4RTNFNUU4RUUwM0IyQ0M3NEY3MEQwRjNDQTk5RjlBOUI1Cis6MTAzRUMwMDA0OUY0QkU5ODRGN0Y2Rjk3RjRENEI4OEJGOTM1NDE2RkEyCis6MTAzRUQwMDA3QjZCQjA4MkNCNjdENEFGNTlCOTMxREZFN0VDRkNFMjQyCis6MTAzRUUwMDBBRjM3QjI1NDc4M0IyNEEzNUY0MTVGRkZGRjJEN0NGREM5Cis6MTAzRUYwMDAxMUVFMTdDQTU3NjY3RDM4OTlERjQzMkI2NDg5RjdDRkQ3Cis6MTAzRjAwMDBGNDdDQUFDNUMzNzU5OUExNUVCOTU0QUZCQTg2QkM3OEQyCis6MTAzRjEwMDBERUFGN0QyRUREQjc5NUYwNEZFODBGRDFENzREMTdEMjJDCis6MTAzRjIwMDAzRkZENzhDM0VCNzBGOThCQjgzRjRFREMxMzE0RTM4RDgzCis6MTAzRjMwMDAwNkU3RTQ3QzA3REQ2RjQzM0Y1M0UzRkVEOEFFREQzQzhDCis6MTAzRjQwMDAyRjMyM0ZBN0UxMURCQzNGODVDRkRGMzRFMDk1RjE5RUM2Cis6MTAzRjUwMDA1NEQ3QzAxMzEyREExN0RGQzI3QjVGNzI3QzNFRjREM0YyCis6MTAzRjYwMDA4NjQ5N0YzNURFREYxQTIxOEYxOUJGOTdBM0FGQTc0Qjk0Cis6MTAzRjcwMDA2MTE1NjQ4RjlBODAzRkMwN0MwQjFDODNCMkE0QTFERkMzCis6MTAzRjgwMDA3RDg4RUVGM0RENTlDRUNGMDU3Mzg3Rjk3RDE4QUVFNzU2Cis6MTAzRjkwMDA5OTBCNEMzQzdGNjM4MkM2RjUzRUNGRDBGOEM0QjhEMEI1Cis6MTAzRkEwMDAwREU1NUNBRTJGNDg3Rjc1QUQwNkYyNkY0OUY5OTM4QjM2Cis6MTAzRkIwMDAzMTNGNjlDMTk4NTdEN0JBQTE3RTVERjk3NzE3Q0I4MDk5Cis6MTAzRkMwMDA0NzBCMEE1RUZERDAwRDNBREJCMkYyQTc3OEJERUFENTA5Cis6MTAzRkQwMDAwRjhCQTFCRUJDRkM2OTVFQkY4MjExNTA1QUNCQkZCNzJDCis6MTAzRkUwMDAxOEY5RUEwREU1QUFGMEYzQzUwQTcxQkUwNTEyQTc4RjBDCis6MTAzRkYwMDBDRjVBOUFEMzRDMjlFM0Y3RkY1MEFFRkIxMzk5MDVFNzRDCis6MTA0MDAwMDAwOUY0RkZFNDI0RjJBMzgwRUU3RkY1MjdDNTFCQjEyOTU0Cis6MTA0MDEwMDAwRkVGMTM4OTlGOUM0Q0QyNjdFNkUxRUYwMENGQUJFNTMxCis6MTA0MDIwMDBFODAwQkU2RkIyNDYwOUFFRTU5ODM3NTM0MTI4RjBDMEFDCis6MTA0MDMwMDA4NThCRTQ0NzI0RTM5MTA0RThCQTBFRjU2NTRENjUyREMwCis6MTA0MDQwMDBBMDFGNzdBRDYzNDE1QjQ5MDI5RTMzQkZDMDczOUVDNzFCCis6MTA0MDUwMDBBM0FGNDc5RjdGQzRCQUUwNDg2NTY3RTJCQTFFQTY3MTY2Cis6MTA0MDYwMDBGNDc1OUQ5RTk0MTZDNjdCNjc3QUZDNTQ1RkQ3Njk2OTg4Cis6MTA0MDcwMDBFODExNzQ0NjQ0QUIwNjk3RTJCOTlFQ0UxODFBMkY0MTU4Cis6MTA0MDgwMDA1REFCNTA5NzUwM0Q3N0U4MTFDOTk3NTBCN0YwNzNCQ0JFCis6MTA0MDkwMDBCN0ZDMjdBNEY3QUM5NUZDRjc5NjIzQkY1NDFDNzRCRjVDCis6MTA0MEEwMDBBRDQ3RTg3OURCNzI4MzYxQzZGNTdCQ0E3NzBDMTdGMUZGCis6MTA0MEIwMDA3QjAzOEQ5MzI1N0Y2MjdDRkY5QjAyQkZGMjJBNzgzOUI4Cis6MTA0MEMwMDAzQjZEN0JDNzA5QzBDN0QwMDE4OUFEODdGRUExRjM2N0VGCis6MTA0MEQwMDAxNUI0QzcxN0Y0OUY1MkQwRUU2RTNGNzA0QTQxQkJCQTc5Cis6MTA0MEUwMDAxREVCMzA0RUZCQzMwQUYxQUI2NDc4MTc1NDk4MEQ3MTg5Cis6MTA0MEYwMDA3NEREOUUzODUyNTRCNjMxMDdENkQzQkU1MkYyNjE4QTZGCis6MTA0MTAwMDBFQzlBRTdCMzY2NjM3RENEMEFEQzI1NjNEN0NGREMzRjRECis6MTA0MTEwMDAxQkM5QkIzNTMwQjAxMUNCMUJEOUUwMTE4QzE3MkMwQjUwCis6MTA0MTIwMDAxQUY1RkNFNTZENDZCREJDQjVDM0E4NEZERkI4MUQ0RTAyCis6MTA0MTMwMDAwN0U0RDc4REVCMEEwQ0VGMzFENDkwNjEzRENCQzQ3OTA1Cis6MTA0MTQwMDAyRTczREQxMzMzRDc2MDNERTFCRThFNDQ2NDRERkU5RDdBCis6MTA0MTUwMDBFNTdDMDc1MDFBRkQxNjBCRkEyNUEyRTNGNjY2MkJGOTRCCis6MTA0MTYwMDA1RjhGMTRGMTNDRkJEMDJBMzNFNTA1ODUxMDFEQjBERUNFCis6MTA0MTcwMDAyMTA5N0Y5NjlGRjhBMzJFQkY2N0Y3OUQzOTVBODBFRkRDCis6MTA0MTgwMDBBRkIyMTAxQzU4RDgxRjQzRkY0M0IzQzBBNzFCOUI5QjYzCis6MTA0MTkwMDBERTQxM0M2QkQ2NkVFMzcyN0NDMjVFMEJGOTU3ODI1Q0VCCis6MTA0MUEwMDAxRkQ3ODRGRkJCQTVFRkJFNDYyN0VBOUY2QjI1RjI2RkEyCis6MTA0MUIwMDAyQzZGMzNFQUVCQURGODBCRUE2RkVCQTQ0OEQ0OEQ3MEFCCis6MTA0MUMwMDAzMkI2REZCOENFNTg3RkJENUNDOERCMkE1Njg1NzRGMkE0Cis6MTA0MUQwMDBEQjcyNDlBNjdCQzVBMkZFODdBMjVGQkUxQzg1ODlFRTY1Cis6MTA0MUUwMDA5MjAyQTcxMEVGNTYyOUQxMUE5NDZCNzc0OTQxQUFFQjk2Cis6MTA0MUYwMDBFREYwQkM5RENCMUQyRUVGNEQ0MDUxQzQ3NzJERENBRkIzCis6MTA0MjAwMDAxMDVFMkQxMTNFMkUxRjIxRkYxM0Y0MDNGM0M4N0E0RUNBCis6MTA0MjEwMDAwNUY3Qjc3N0Q5MDI2QkM5NUU3QTQxNTI1MTFGNjk5NDhECis6MTA0MjIwMDBGREIyRDMxQkI3Njc5M0YxMzE1N0UwRjdDQjZDRDA4QjVFCis6MTA0MjMwMDBFQjJBNDNBMDAzRkNDQjE2OEY4OUEwM0ZBQ0VDOUY1NzIxCis6MTA0MjQwMDA1MDdFNjM1OTlERTQzMzExM0Q5QkQ4QkE1QTJDNjVFMkU4Cis6MTA0MjUwMDAwRkE4NkZEQUEwMkMzM0Y3MzYxM0JGQkU0QzUxNzlGRThFCis6MTA0MjYwMDBBMDhCMjVGMjAxRkYxMzRDNDI3OEUxRDI3MURFQUIwQjNCCis6MTA0MjcwMDA4RjdEOENFNzc4Q0RDRTdCQ0UyMEJGRjM5NEY4NkJFRkFCCis6MTA0MjgwMDA4M0Y1NkRCM0YxRjlCNzNEMkY5MUZFREFFRTNENEE3QzJGCis6MTA0MjkwMDA3MTJDQTAwOUNFREJFRTEyRkNCMTBGRjhBM0JFRkY2MkI5Cis6MTA0MkEwMDBCQ0Q3MEZGQzBBMkY4RUNDRjdEMkJDRTNGNEY4ODA5RTZCCis6MTA0MkIwMDA1RjFCNkQzMDVEMDBCRTMzNTZDQzVCNTBBMzExQkNGMjZBCis6MTA0MkMwMDA2RUVCOTU3MERGNDUyQ0JDMUVGRDQ0MzI4RTk5MUIyRjgyCis6MTA0MkQwMDA3NTNGRkVEMjc4QkNGQTlCNzg5RUFCNUQ4MzBBRTlERjFFCis6MTA0MkUwMDAyMjVFOURBMkRGRUU5NEZERkNDQ0UwNDc5ODZEM0U5RkUwCis6MTA0MkYwMDA4OTcxRTUzNTJGOTQ1QzM0QUZDMjZDMzUxOUU4RDVBMkNECis6MTA0MzAwMDBEQTBENzQ3RDc1ODU5MUNFMTdGODhDRjQ3REVERjQxMjdECis6MTA0MzEwMDA0M0ZCNDI3Rjk1QTE3RDcxNTM5REExQkUzNDcwODVBMTYxCis6MTA0MzIwMDBGRjc1Q0RCMzhDRjZCRTZCOUVBMUJGNEQ1QjY0QThBNzk1Cis6MTA0MzMwMDA1NzVDNkZFODlGRTFCQkM5Qzg2RjcyN0EyOTdGNDBCMUIzCis6MTA0MzQwMDA4NjA3ODMxQURFQUY2NzZDQkEzM0NFQUZBQjMyQUQ5ODU3Cis6MTA0MzUwMDA2NENDRUM3NTM2MDc5NjNEOTNEMkEyNzg2RTNERjkzQzVECis6MTA0MzYwMDA5RTlBRjZEMjk3NUQ1MTg0RkE5OEE3QUNGNTUwN0U1Nzg1Cis6MTA0MzcwMDA4QTM0NjBCQ0M4MkFFQ0JDODk3NzMzMDMzRkZGQTcyQTg0Cis6MTA0MzgwMDA4RUU3N0FCOUE0MjI3ODYzMjU5NERFN0Q1QTAxQ0Y5NzBGCis6MTA0MzkwMDA4RTREQzRGM0IxQTIwMzExRjFGODM5MkJFOTFEOTcyNTE1Cis6MTA0M0EwMDBFOUJGNDUzNUY1Q0IyQUYwQkRCQkZENzNDOTJGRDVDNzk1Cis6MTA0M0IwMDA1NEJDNTdCQjQ3RTFGOTRDRTFFNzc4RkVBQ0I3NkZEMDhFCis6MTA0M0MwMDBFNDRGQTBCN0ZGNTNDMUU1RkQzNzAyMEQ5NDlGRDRERTQzCis6MTA0M0QwMDAwRkQyMENGMTdCRTc5QjBBRkFFRERBRkIwNzMyNTE2RTQ0Cis6MTA0M0UwMDBENDA0REU1NDUwQkY4RTNGMTdGMjQ0MUVCMjYzRkNGMjc5Cis6MTA0M0YwMDBGQkJEQTlGM0QwQkU1MUExRDBGODQ3MDVCRjZERkQzMjdBCis6MTA0NDAwMDBFN0I3ODA3MEYzRDEzRUQyRjk2N0VCN0VCRUJGRDZBNTg5Cis6MTA0NDEwMDAwQUQxQjdDRTQ3ODE3RjFBRTI2MUM5N0M3OUY5Q0NDODRECis6MTA0NDIwMDA0NkE0NURFMEEzMDZGQkU1QzYyNTczREU0MTdCMDgyNEI4Cis6MTA0NDMwMDAzNUU5MzFDMDQ3OERFRDg1OUI4OEJFNkY0Q0IyNkZCQUIwCis6MTA0NDQwMDAyQTg2RjlBOUY3MDJEMENCQzk4MDI5RTVCRUY2NTRDOTVFCis6MTA0NDUwMDBCNEFGOTNDMTU5MDRFRjZGMDBEQ0QwNkVGQ0M2MDgzOENFCis6MTA0NDYwMDA3MUY4N0QxMjdDOUUxNkZFNDRGRDlDOTJGQjdEQTc4QTBFCis6MTA0NDcwMDA5RkQzRDNBM0YwQ0I3NzA1OUZERDIzQzU2QTkxOTk4NUEwCis6MTA0NDgwMDAwMjc2QzJEM0U1NTZFQjUyQ0MzMzM4NUFGNEQxMjY4QzlGCis6MTA0NDkwMDAyN0I0RkU0MDQyNUI5NkZERUJDMDRCNzk5ODc3QTBFQ0M5Cis6MTA0NEEwMDAzRjkyODdGOTEwQTFERTIzNzkwQ0UwQjRDQUEyQUQ0NzkwCis6MTA0NEIwMDBCRDE4RjBDMEI3MUVDRUE1QkQyRjRBRUI1RkRENUIzNzQwCis6MTA0NEMwMDA4MENGNTdGNzQ5M0U2NDg1QTEwMzY3RTZEMDNFRDlFMDI3Cis6MTA0NEQwMDAyNkQ0RTNGNzhDQjJBRUZEMTUzQ0FGQURCRjQyRTM3OTE1Cis6MTA0NEUwMDBGNzQxOTgxM0U1RUM4MTM0QjI2MzVCRjcwMzFGQzI3NUEzCis6MTA0NEYwMDAzRDJGRDEzRDhDM0Q1QkFDQ0RBOUY0OTNBN0FBRjg3N0I1Cis6MTA0NTAwMDAxQjVFRENBMjMwOENBM0FDODJGNzcxMUY0NzhCOEUyQTE2Cis6MTA0NTEwMDA1NkM0OUJGRDEyRDk4NEExREUxMzRCRDExRjFGNUE2QkM5Cis6MTA0NTIwMDA2MTE4QjdENUQ3Rjc1RTUxRUNCN0I4RkZENzU3NUExODBGCis6MTA0NTMwMDBERTJGRUM1QUM5RTNCMUFGQUYzNUQzMzhFNjlCMkQ1NDJCCis6MTA0NTQwMDA1Rjc2MkJDRjEzM0VCQ0YyREYzNjE1QzBCOEFGQUY5MjBCCis6MTA0NTUwMDAyOEJGN0VENkNEN0YzQzhBRjU2NUI3NzIzRDI4MTk3RjhFCis6MTA0NTYwMDA4N0YxMzUwOTNGOTcwNThENzgzNzAyNEZEQjNFMUI5RTVCCis6MTA0NTcwMDA5RUFDMTBGNjZCMTVBQjQxMzkwQkU3M0U3QjJDRTJDRkJFCis6MTA0NTgwMDA5RDhDRUUzNzM2OUYzRjZDMTkwQkVCMkRERUE0RkEzMDc1Cis6MTA0NTkwMDBCNDVCNkQ4RTZDQ0M0M0JFNzA5OEI3NEY1QUI1NUJFMjdFCis6MTA0NUEwMDBGQzQ1QTM3QkVGMDUzRDBBNDNCQkYxNUQ3MTVFRUZFMjg1Cis6MTA0NUIwMDA3OUU1RTJENjg2MjRDQzZCNjM3MkFDMThEN0U3MTY3OTFFCis6MTA0NUMwMDA1Q0NGNTg1OEYzN0VGNDIzQzk5Q0JGNTRGRkQwQjUzQjUxCis6MTA0NUQwMDBEMThGQjQ0QkUwQTNDRUY3QUFDMERFREY0RjdFRThERTdBCis6MTA0NUUwMDA3Q0JDOEZGRUI0ODVGQkM3QzY4QkYxNEE0Qjg2RTYyQzlDCis6MTA0NUYwMDA4NDMyQkQ5MkNGRkY0N0IxMEVCREZFOUNDMDdGRjY4N0NGCis6MTA0NjAwMDA0NzA5QkUwQkFDMUNFRUYzRDY0NTVCNzAxRkI3QzhDMUEzCis6MTA0NjEwMDAzRjIzRkY5QjNGRkU5N0FCNTBBRUY1MTRGRkQ0NEJERjFCCis6MTA0NjIwMDA2NTYxMTM0OUFFODVDNDc5MUM5RUYxRUYwRkRGODFGOUY2Cis6MTA0NjMwMDA3Njk1NzYzQUM3ODU4NzFFOEFFMUI5QjY3QjY0Q0EzMzE4Cis6MTA0NjQwMDBCNDk1NEUxRTFCQkM4ODFGMjE3NDRFMzNEQ0VGNkJFRkZDCis6MTA0NjUwMDAzRjMzQzc5RjgyQUVGNzU3RjFGRDU3OEI3QjdDQUM5RkYyCis6MTA0NjYwMDBGQjBGODAxRkNCRDM2QkUzRkRGNEZERUI3RTBGNUJFOTBCCis6MTA0NjcwMDA2Mzc0NEU3NzdDODk0REUyRjdGQkVGQTM3MTk2QUYzQUY2Cis6MTA0NjgwMDAyMUUxQkQ5NEVCMkM3RThCMDNFMEZDQ0IzMTZDMjlEQTZECis6MTA0NjkwMDBDMTNGRUQ2NDc0NEZFRDM4REU1NzAzNTZGMjcyQTc0QUZFCis6MTA0NkEwMDBGNTk4QjhCN0Y2NkFBNzQ2RTU3NTRBNjAzQ0NBOTVBNTdECis6MTA0NkIwMDAyRjc2OTQyMkJDMEUxNzNEMThDMEVGMzU5QzNFMkVGNDg5Cis6MTA0NkMwMDA1OUE2RjJGQjhFMDJGN0NFRjY5Qjk5MTVEQUNGMUU5MDEzCis6MTA0NkQwMDAyMkU0MzQxMUVCQkZFMTVDM0UwQjAyM0ZGOUI1QjgxRjk5Cis6MTA0NkUwMDBCNzdBRERDRjg5Q0ZGOURBQ0VDQzQxM0I2M0QyQUE1MzdBCis6MTA0NkYwMDA5QkIwMUU1QUY3QzczOUE4MzdGQzE2RTQwNEUyNTdBODQ2Cis6MTA0NzAwMDA0RjYyMkUxOEE3RTU5QzkzREU1RkRENzc0MjQxN0JGRTZBCis6MTA0NzEwMDA2OUQzRDAxQzg0N0ZGOEEwNDRGN0FBNDIxRDY3ODg3RjI0Cis6MTA0NzIwMDAzRTJDRkMyQjM3NTQ2NjcxQkVEMTNGQzk0NEU3RTk5RjRDCis6MTA0NzMwMDBDOEVEMTM3MUZFMDMxM0ZGOTQ4OUZDQ0JCQTRFN0JFNUUxCis6MTA0NzQwMDAwQTNDQzc2MzY2M0FDN0FEMEQ0Mzk5NkE4QTczMzkwOTUzCis6MTA0NzUwMDBFM0EyNEZGQkQ3MjIxRjJGQjlCRDU5MDk5MzVGQjY1OTZBCis6MTA0NzYwMDBFMDZENzJGQkY1OTUyNkREMEVCNzg4M0MyNTI2QzE3QUYzCis6MTA0NzcwMDA1QTA0N0VCNTMyRkU5REEwOTYzRTI5NkEwN0JBNkRFREI5Cis6MTA0NzgwMDA5RjQ1RkU4REQ2OEU4QjdGMDc2NjM0N0NCQkQ0QjI5RDUxCis6MTA0NzkwMDA3MUZGODY1RTQ3RkIyQjMxNUYwQkVEMkZFMzdERjUzMDFDCis6MTA0N0EwMDBFMTU1NUE5MTY3NkNGMDIyRkE1RDY4MzA5RkUyMjdFRDdGCis6MTA0N0IwMDAzRDhDRTIyNUFCQ0Y0REE0RjJGREU3MzdEM0JEMjdBQjRGCis6MTA0N0MwMDA3REU4NDE5NDBCQUNDQzQ0N0FGREVBQjA1MUJGOTkyRDAxCis6MTA0N0QwMDBFODc2QjZEMDZGRDY1NDgyN0Q1MkMxODZFRDEzQjA0M0QxCis6MTA0N0UwMDBCRTVDQzlFRDkwQ0M0M0NDNjA5RjI0M0YyN0ZCQzQyQTFDCis6MTA0N0YwMDBGQzg2MzA1Q0YwOTkxNEVCOUU1N0Q1NzA1NzY1MkVEMjJECis6MTA0ODAwMDBENTc2QzI2RjA2Rjg4RDc4OTVCQ0NGOEQ5NTlDM0U3NTk4Cis6MTA0ODEwMDA3QTVFNzZFODFEMDVGNURENTA1RjZBN0E1RTVBNTVCRjBGCis6MTA0ODIwMDAxMUQ3QjM2NTk0RkNCQkFCMDVCREFGREVDOTA4NUVBMTczCis6MTA0ODMwMDA5RDRFODJEMzdCNkM2N0EwMDFGMEYyM0Q1ODA3REU1RjhFCis6MTA0ODQwMDAzRjFEMDhBNDY3QzFGQkE3ODM4MTc0OENDRkU5RjRERjA3Cis6MTA0ODUwMDBCRUQzNEVFRjZERjEyQ0NBQzZFRjZERUNBQUU0RjFGM0I2Cis6MTA0ODYwMDBGN0ZCNjY1OTExQ0UzN0VDRTQ3NEE3Q0ZGN0RCRThCMjVCCis6MTA0ODcwMDA2Q0E0OUYyOTk2MjEwNUZEOTM4NUZEQTczMjUxQUY5QjFFCis6MTA0ODgwMDBGMkZDRTI2Q0E0QkZEMUQ2Qjk3NUEyNThFN0JBRkNBNTc4Cis6MTA0ODkwMDA3NEVGMDc3RUNDNDBGN0I3MEIzOTE2REExMDU1MTBGRUNGCis6MTA0OEEwMDBCN0FGNjM4NEJGMDNDRkZENkIzQkQyRUZGQkZERTkyQUJCCis6MTA0OEIwMDBDQUM5Rjc1RTQ4MEYyM0JGM0Y3RDMwMkQ2MjgyQTE1NkUzCis6MTA0OEMwMDA4OUVGMjRCRDY3MTlCQzg2RjRDN0U3Q0Q5NEFGMTAzQUQxCis6MTA0OEQwMDBGOEVFODM0ODhGQTFFN0QyRTgxRUNERURGRDlCQ0ZBMDc3Cis6MTA0OEUwMDA5QzVCRDUzRkY3MUQxOUNCQTdGRUJFRjRCMDdBRERGODZGCis6MTA0OEYwMDBBNTg5RjlDNUVGNzZFRUNCNDdGRUY5QkVDQ0Y5QzRFRDNDCis6MTA0OTAwMDA3RENGOTIzRTdCRkJGOUIzMzU5ODNGRjhERTBCN0Y5RTVGCis6MTA0OTEwMDA4QUZDMkNGNENGNjdBNzIyMUYwQkZERjhFQzU0NkMwRjE4Cis6MTA0OTIwMDBGRDMwQkQyMzk1N0VGMkUzMkFFRTNGRDFFNUEzRkIzNUIyCis6MTA0OTMwMDBEOUUwNjdCOTU5RTA4N0JCN0I3QjEzN0VDRjYwQ0E4OTFBCis6MTA0OTQwMDAyNTE0MDdEMERCQTc5NEYyN0JDQzUzN0VEMTk4N0Q3M0RFCis6MTA0OTUwMDBDMjdCREQzMTk5RjIyNTI2OUY2ODRDNUY5OTgwOTdEN0ZECis6MTA0OTYwMDA1NzU5NzQ3RkNEQTVGOTQ3NDQxRTgyRUUxRkQ5MTI5MzgzCis6MTA0OTcwMDBGOUJEQkEzNjMzN0RCRjZFNzk4Q0M3REY5M0ZEMjY4Q0M3Cis6MTA0OTgwMDAwNUFFQUVDNkYzQkUzNUQ3ODdERkYxQzFGQkVCMTgxNzE2Cis6MTA0OTkwMDAzOTdENjc2OTg0RUVBRjg3QUQ0NzNDMDk3QUQwQjI5ODFDCis6MTA0OUEwMDAyOTlBODY3RTkwRkVCNDI4RUE0M0NCNjJGMkE5QjQwNDI5Cis6MTA0OUIwMDBCRkM4NkZENTY3MzZBMjFBQkYyQzY4RjQ2MzI0RkI0MUM5Cis6MTA0OUMwMDBFMDI3NDM0RTg4OUZCNEFFOEQ1QTc0MzlCNTAwRTZGRjk4Cis6MTA0OUQwMDBFNTQ2QTY2MkRDNjY4NDdGQTRGOUYzRTQ4NzQ5RjY5MzkyCis6MTA0OUUwMDA2OEIxMDdBQ0Y4OUVFNkUxREZEREQxRjU0QzNDQUYwM0UyCis6MTA0OUYwMDAyOUU4N0RDMzQ0Q0VCNzc0M0FFQThFOTlFODFDQkE2M0JECis6MTA0QTAwMDAwRDU2MEY5NEZGMjhEQTBGODBEODBDNjM1RTUwRkZFMjNBCis6MTA0QTEwMDBDN0QxNEVFRjNFN0Y1RDNBQzJBQkZCQjU0NTBDQkYyQjE1Cis6MTA0QTIwMDA3MTVBNkRCMDk2RTI3QkU3M0Y2RjVERUE4REUzQzcwODkwCis6MTA0QTMwMDBGRTMxOTFGM0M3NjE3RDYwMTQzOTM3NTNDQ0ZCRjc5Mjk3Cis6MTA0QTQwMDA3N0QzMjc5QTg0QkZFMUZGNkY3OTA3NzZGNTU1MTNCOUJECis6MTA0QTUwMDA1REJEOUNGQjNEQjg1RDlEMkMyNzc0RkVBQjhGMUIxMjhBCis6MTA0QTYwMDBGMDFFQzk3RkRGMjFGRDA1RUM1RkUyQkZBMTg5MUFGNUM5Cis6MTA0QTcwMDAyQkVDNUY5ODRENzZGMTZCNEJCMjM1QzdDOEYxNEI2NEE4Cis6MTA0QTgwMDA5RkM5RTkxRDM5QkVBRUFGODVDMkZFMjM1NkI0NjNGQzkzCis6MTA0QTkwMDAzQ0ZGMzRCNDQ0QTJFRjRCODUwMjEyRTlEOUExMTY0Qjc2Cis6MTA0QUEwMDAwNERCRjVGNUM0OTZGMEI4RTA1MjlGNDRERjBCRDFGNTc2Cis6MTA0QUIwMDAzRjVEM0YxQzZFOUYwQ0VERUVCOEJFQThFQjg1QjEwMENDCis6MTA0QUMwMDBGNzhCMkVGMTVCQThGRDNBMjU3ODBCQzJFOUI3NTExQjk1Cis6MTA0QUQwMDAzRDlGMzI4MzhGMEI3Q0UwMDhGQTNGQUZGQjgyNDRERkJGCis6MTA0QUUwMDBGM0QyRjU0NTFEM0Y5M0Y1QzkwRkZBNEIyRUZBOURCQTQ3Cis6MTA0QUYwMDA4NzA1NUVFQUY0MzUzRTg5MkU3NDM5QjVBQjkyQzNBN0JCCis6MTA0QjAwMDAxREU1NzQzNkNBRTk4Rjk1NDFDN0U4N0EzN0M4RTlCQjE1Cis6MTA0QjEwMDA3MEZEQkIyQTE5QkQzRkY5MTc3MjIwOTVERDlEMjFDNjk2Cis6MTA0QjIwMDBERjhBRTcwNjY1NjFFQ0M1N0E1QzZGMTE4QjUxNUVENDU0Cis6MTA0QjMwMDA2OEYyRjNCNjJBNEUwRkEzQjVFRkFBQkMzNDNBRkU4MTUxCis6MTA0QjQwMDA5OEZGRUY0NUM3RkIyN0ZFRjdEMDVCODdGNTNGMjVGNUJDCis6MTA0QjUwMDAzRUU3NTVENUZGNjgyMkMwRDU2RUVFQTBGQjUxRUM1RjU1Cis6MTA0QjYwMDAyQ0U0Qjc0RUVFMTcxMkYyMThFNDk5MDE4RjhGMTQyOTM2Cis6MTA0QjcwMDAyNkI0N0I0MjZERENFRUVGQzlEMjVFMjFGQkU0MjU3RURDCis6MTA0QjgwMDBFRkZFNzY5MUFGNzREQjM5OTVDQTFFRkM4MDE4QjY3RkI0Cis6MTA0QjkwMDBEOTREN0U5QkRCRjY5REIwRjhFMUZERTU2QkE1NDlFOEJDCis6MTA0QkEwMDAwRjVBREU2NkRDNEY0RkFFN0Y2RUEyMUZCQzY3NUMyRkQ0Cis6MTA0QkIwMDBDNTE1QzI4Rjk3NjgzODdFMkI2RTE2RkQyMTNERjkxMTAxCis6MTA0QkMwMDA4QzNEQjZBMzFGRTczMjdDOUU3MERGMDJFNjU5MkQ5RTE2Cis6MTA0QkQwMDA1RjIxRkMzQjJDNDkwRkY4RjFDMEVCRTRFRkMxQjgxMEFBCis6MTA0QkUwMDBEMkFGRDIyRjUxNUU0OEU4MThGNzc3QjRGNzczQkVGMDEyCis6MTA0QkYwMDA3NjlCNDRGQ0U0NkQ5MTlGMTE1QTY3MjNGRkI2QUU0NzQ0Cis6MTA0QzAwMDBCQzIzRkFERDdBQTc0NEZBREUwOEJEQzI2RjhDQkJBQ0M4Cis6MTA0QzEwMDA3RUVDMTdDNDE3OTNGNTA4RTcwMTNFMEVDNjVCRDAyRjU0Cis6MTA0QzIwMDA3M0E0NjhBQTg0RjVENTYwMTdFMkY3NEI0MzlBNzY2REIyCis6MTA0QzMwMDAwMTVGMUY4QjEwN0ZGMTFCRkMyODFGMUNGQjM3QjIyMzY5Cis6MTA0QzQwMDA5NzNGMkZCMTZDRDIzQjkyRTIyRjNERjM5MkUyMkY0Nzc4Cis6MTA0QzUwMDA4RjE0RTAzODQyQ0Y1MEUxM0ZGNDFGMjZFQjE5RUQ3RDcxCis6MTA0QzYwMDAyNzJDNjgxNzdDNTI5QzQ1QTkxQUY2Qjc5MDVGNzA4MjcyCis6MTA0QzcwMDBDQ0ZEQUMxM0ZBMjUxNUZENDkxMzA0OUNBNjZEQjExM0E4Cis6MTA0QzgwMDA5Q0U2QkNCMTMyMUJFOTVDM0Y5RkY3MTdGMkYzN0FGRjU5Cis6MTA0QzkwMDBGNTBGRUJGMUJEQTk2RkM4MkFGMkRCMUZCRkJFRjZFNzI3Cis6MTA0Q0EwMDAwNUJDQUU1OTM1N0M2RjZEM0FEQTIxRUZCRkIxMjYxREQ4Cis6MTA0Q0IwMDBFMUY4NjMyOEYxM0I0QTNGM0MyOUE3RjQxRkFFMTVGQ0ZECis6MTA0Q0MwMDAwOEU0NUI0MTE1RTZEQkRFMkRGQ0M2MzJDOEI3OENCOEM0Cis6MTA0Q0QwMDBGRjI1RjlCRDFEQzIxRUVCQzFFRjFCMjFGRTNEQ0ZFMzM5Cis6MTA0Q0UwMDBEQjNERTM4MkYzQThGRTUwMzFDRjIzOTYzOUJFM0VEQjk1Cis6MTA0Q0YwMDA5RkE1QTJCRTU3MDU5QkM1MzhFQ0Y3RUNBQzFCRTMyQjc4Cis6MTA0RDAwMDAzREI5QzE5RjEyN0QzQzY0MjJGQzg1RjdGOTc3MjdGNkY3Cis6MTA0RDEwMDA2QjI0RUYxMDY0MThGRkE4MDE1OTYzQTVCQ0M2MUM4QTU4Cis6MTA0RDIwMDA4M0U4REY4NTE5MDc3NkE4Rjg4RUMyMTI4Q0JCNTY4OUY2Cis6MTA0RDMwMDAzODQ4OEQ5REM5MzhGRTM2NEI3MDZCMjVDNjVEMDY2NEJDCis6MTA0RDQwMDBERjdBN0M0N0Y2NjVFM0Y3OTI5MkUzMzE3QTdDNTg4RkZECis6MTA0RDUwMDBDQkU4NzFFMkQxRTIzMjEyQ0U1M0MzRjEyQ0YxM0IyNzAyCis6MTA0RDYwMDA3QUZDODU3RDgxRTc2Rjc2NERFRkEwRkJBRjYzQjEyRkI1Cis6MTA0RDcwMDBGMUNGMTFGMTk0RDU2ODZGMjZDNzUzRUVBQUQ0RkIxQjZGCis6MTA0RDgwMDBFMzY5NUIyQjlFMjE3Q0ZCQjQ3MUI0MUY0QzFDNkQ3RUQwCis6MTA0RDkwMDA4RDlFMjdDRjNGMzlFQjgzM0NCMjVGRkVGMjFGOTkyNEYzCis6MTA0REEwMDBDRkZBQ0Y5MkRDMzkzRDk0MjZFRTcxMEU3MjNGNzVCRjdCCis6MTA0REIwMDA4NUVDRjVEMzYwMDdFNTI2QzhCMzVGNTVGMjcxMEZGNUIyCis6MTA0REMwMDBDRjIyN0MzQzEwNkI0Q0M3RkU3RkFERTRGMEQ5RjJEQTA5Cis6MTA0REQwMDA5MkM1QTg0Rjg3NjMzMkNGQzc2NkRDQUUzOTEwOTNBNzYwCis6MTA0REUwMDA3MEZENjAwNDlDMzY0RDRDMDEyN0FCM0Q3NTFFRDA1NEMwCis6MTA0REYwMDA4MUQ3NTNBQkY4QkU2N0JEQ0VFRDk1RDA1QTFFM0Y1MDVDCis6MTA0RTAwMDAwNUJEODU5QTE0RTIyNzQ3OEJGMjI0REQ4RjNDMzY1NTg5Cis6MTA0RTEwMDA3Q0UxRjkyMUUyQjNBREI3RjJGOEVFMjVDNzE3RkEwNjQ3Cis6MTA0RTIwMDAyQ0FDMzg4NURGQjY2OTBFRjE5QjRCRjVENzMyQjQ4MkQ2Cis6MTA0RTMwMDBBN0M2RjlGMzc2OUQ5RjU0NzNGRkFEQUI4QUU3RjMzQkFBCis6MTA0RTQwMDAzQjI2RDVFMzc3RjFGNDdEQTc4MDIzRjM1RTVBOUMyRkIwCis6MTA0RTUwMDBCM0ZBRDJGQTJEQUNCOEI0N0U5QjJCNTI5QzVGOEE3RUZCCis6MTA0RTYwMDBERkI4QzQ3RTNGQjhDNDc5RDM1M0QxNTc4QTdFN0ZCQ0E0Cis6MTA0RTcwMDBDNDc5NUZBQUZDOUZGOEU3NzAzRDM5QkU5OTFDMEY0REJECis6MTA0RTgwMDA4RTczQTZCRDc0NzMxOERCMzY0QkY3MEM0NTExQkE5OUI3Cis6MTA0RTkwMDBDRjM1RTNGN0QzRTVBQ0M3QUNDOEQ3RTZDRkUwRjE4MEI4Cis6MTA0RUEwMDAyRDhERDZDODZFMjkxRTE3RDVFMUY1NTEzNUQ3QkI1NEM3Cis6MTA0RUIwMDBFRjk5MzA3RTNGNzFCQzNGRDY5ODBENzQ3QzdBMDYyMzAzCis6MTA0RUMwMDBCQkUxQjQ0RDdDMEY0OTU2QzcyREE0RjM1M0U5N0IzOEExCis6MTA0RUQwMDAzREI2RDRGMUE1MjdDNTc4QTNGMTkxQTI5QUZBRjM1NTZFCis6MTA0RUUwMDA1M0U4RkU1MENBRUY1NERDMkZGNDQwQjU4RjkxQkY4NkQzCis6MTA0RUYwMDBDOURBQjg0NTM0QUYzNjBFRTVDQzk4MTdGOUYzQ0MyOEFCCis6MTA0RjAwMDBBM0ZDM0U2ODc3MkYyMkZENTk3M0UzRkE3Njg4Qjg5N0ExCis6MTA0RjEwMDA3MzVFOTkxQkZENzQ0RTkwQjcxODE3QjkwRkUzMjNFNDI1Cis6MTA0RjIwMDBENzU3QTk5RjNFNUY5Nzk3Q0ZCN0MzQzIyNDhDNjM4NTlECis6MTA0RjMwMDAyQjc5NUUwNTZCRTkzNUM0MzU4RTVCQTJCRjVCMjE1MUQxCis6MTA0RjQwMDA1QzYzMkNEMkZCQ0Y0QzUxRUYxRTM3M0YxNzg0QUZGNzc5Cis6MTA0RjUwMDA4MDRBRjE5Njk3Njc3Q0E3ODJFRUM1OEIzOEM3MUQyQUQ5Cis6MTA0RjYwMDBFRjcyMThFRDBDNThDNzFEMkZENDExRkUyRTNGMzRFM0ZECis6MTA0RjcwMDA1NzJEQTgwRjdBNjQ4MkYzMDgzRDVDRDg1NzI3ODU3REFBCis6MTA0RjgwMDBBOERCNTc4MzY4MjcyNkQ4MUI1NTVFRDM2ODdDQTkyQURGCis6MTA0RjkwMDAxNTVGREEyMTcxRkIzN0ZDMzM2RUZGRDYyOUJFOTJDNDUwCis6MTA0RkEwMDA3Q0FBNjkwMjFFMkJBMkRDMEZBQkRCQjUzNUZFODgyOTdCCis6MTA0RkIwMDAwRkUwNTA3N0E3Mzk5QTA2QjJCNzZFNTNCNTgyRkNCQUE0Cis6MTA0RkMwMDA2RTUzOTE5REZDNEEyQkY3OUI3NDc4QTczQUY3N0FCMTAwCis6MTA0RkQwMDBDRTJEQzc4NjI4MkVGMTZDRjIzRDczMkY4RkJCMEUwOUE0Cis6MTA0RkUwMDBGQ0U5QzJCMzg1RkExREE1NzIxNzhBREYzMTMzNTU3MzA4Cis6MTA0RkYwMDAyQUJGNzgyQkU4RkRCOEJFMTUzRDdDQkQ3QTFDQTQzNUQwCis6MTA1MDAwMDBBQUNEQzI3OTRFMUQxOURBODQ2NTZEOUI3QjE2RjkwRDA4Cis6MTA1MDEwMDA1NzlERDk4NDcyMzM3NEZFRUNEMUFCQzgwRkEwNjhBOTM4Cis6MTA1MDIwMDBFRTBCNTg2QkNDQjQ4RTY3NTExMTQxNzhDRDk1Mjk2RjNBCis6MTA1MDMwMDBCNzZFQUU0Q0U3RUQ2Q0I1OTExREVFQjQzMDMzN0U5RjhDCis6MTA1MDQwMDBENUI5OTBDQkIxREFBNjlDNTk1ODY3NEJCMjQ4MEVENzY4Cis6MTA1MDUwMDAxRUQzQjI2RUY2QzZFRDdDRTdEQ0I1QjkwOEE3NEY4QTYxCis6MTA1MDYwMDAwRkU5RkU4MkVCMTRGRjRENzg4RTlGMzYzRUI0RkFGOEJFCis6MTA1MDcwMDA2Qjk0Njc3NkMzQTAzMTNFQTRDNzdCNDY4QjBGRTlGMUUyCis6MTA1MDgwMDBEOTUwRDM4Nzg2Nzg3MjQ4MUU5QTgzN0U5NUJBMTc0RTc4Cis6MTA1MDkwMDA1MTdDMzhENDI3QTkyRTc3M0M2RTE0M0E3MDQ2MjFGOEZCCis6MTA1MEEwMDA4QTc4MTFGNDU3RjBCRDNBMzhGNjcxNEVGQ0RFMDA4RjY1Cis6MTA1MEIwMDAxRjNEODdGOUI4MEE3RTRGNEZBNUJDREIxRjYxM0U2RUNFCis6MTA1MEMwMDAxOTdFNEY4RkU3RTMxRUM0N0M1QzA1RUY3RkYwN0NEQzJDCis6MTA1MEQwMDA0MzIyQkYzN0Q0N0Y4NkUyNEQzRDVFNjNCQzQyOEY0NzlCCis6MTA1MEUwMDBEQzI1MDVCNjc5NzMwREYxMEFBQTI3QzcyQkNDNzY2RTlECis6MTA1MEYwMDA4Nzg2OEU1OUU4QkJFOEExRTM1NkUyQjNGNUZEMkIyNjdGCis6MTA1MTAwMDBBMDNFQTY3RkFGQkMxREUzMDUwOUZFQTVGN0ZEM0UxQjMzCis6MTA1MTEwMDBERUVGNzkzRkUwQjM2MTlDQTA2RUUwMUQ0NTIzQkUxMzM2Cis6MTA1MTIwMDAyREMwMTRBNjc2MzlBNkEwQkQ4RjcwQTAzQ0JGRkU3QTE0Cis6MTA1MTMwMDAxQkMyRjUxM0ZERkE3REZGRTNEN0ZGMzQ3RUZEOEMzOEVCCis6MTA1MTQwMDA1RDEyRkZBODBEOThFODVFNzlFRDMxQkZFREU2MDRGRTMzCis6MTA1MTUwMDBCMDI1QzBGREMzNUIzQ0M1NDQ3RjBGMDQ4QUIzNTYyNjBGCis6MTA1MTYwMDBGQUYxOUJCOEZERTY5Q0VCQjEyNTNFNUY1NEMzRUYwRjBGCis6MTA1MTcwMDAzOEE1RDRGNzBCNUVGN0VBRkVENzExRkNGNjc1NkY0QTM3Cis6MTA1MTgwMDA3RDI3NzUzQzYwNEIxM0U3MjNCQUJGN0Y2NDdDQzBGNzczCis6MTA1MTkwMDA5MjI3QzFDRkZGRkVDRkFDRjQ3NzE3MDY5RTRGMjM3OTNECis6MTA1MUEwMDBGRUQxMEI2OTdCNTBFRkFFNkQ1QTM5MjEwM0VBQjUyNzZBCis6MTA1MUIwMDBEMzk4OUJDQjIzNDM1QzYxNzk5M0M5NkZDQjRDMTU0NzQ0Cis6MTA1MUMwMDBGMDE3RDBGNzQyOTNFMzA1NEQyNkUyRUZDM0YxODIyNkI0Cis6MTA1MUQwMDBGOTE0RDU4NTdFN0VDMzk5N0ZDRkMwNEY2NDNGMkI0NUEwCis6MTA1MUUwMDA3QUQwQkU3ODc2QjVFNDFCNjAyM0UzMDczMDcwMDE5QjZDCis6MTA1MUYwMDAwRUJCNjhFMjc2ODJBRkQ5NEE3NkMxMjdDNTE1NUEwRTMyCis6MTA1MjAwMDA5Q0Q4ODg3RTgyNDk2QzdCMEY3RTdGNzI5MkM3QTQ4Mjc1Cis6MTA1MjEwMDAyODRBMTE1N0UwRjk5REI1NDI4RjQ4RjYwRjIwN0VBMDJECis6MTA1MjIwMDBEQzRGRjYwQjY2NTY3MzM5OTQ1OUNERkQ5ODNCNTFBRjYwCis6MTA1MjMwMDBDRjhEOEZBM0JGOTc3Q0VFNUYxNDcyNjkzNDNGRTM2MjFBCis6MTA1MjQwMDBEMURFREQ1NEJCMDVDRjJEM0NERkM0OTBGRjc3MzczNTcxCis6MTA1MjUwMDA1ODNEMDlFM0I5QUI3OURFQ0MwRThDNTNFNDI0QzYyOTYyCis6MTA1MjYwMDA3ODNDMjIzOTNFQTFGM0E3QkE4MThGRTdFMEI5M0ZEMDVECis6MTA1MjcwMDBDRkZENDcyMTE3Rjc2N0Q2MURBQ0E3N0IyNkYxNzU3MkM2Cis6MTA1MjgwMDBGQzdDQzAzNTdDQ0YzMDhCRjE3RDMxMkJGNzczOTE1Rjg3Cis6MTA1MjkwMDBBMTc2RkU4Nzg3RjBFRjEyQjA0MDE2RkQ5RDgzRDA3MTk2Cis6MTA1MkEwMDA0Rjk3MDNGOUM4N0M3OThBQTQ5MTdGN0JEOERGOERGRTY0Cis6MTA1MkIwMDBBOEM1QUZCNENEQzM3Q0UwQkFBNTkzNEVFMEI5MkM2REMwCis6MTA1MkMwMDBCMTUwREVEMUUyNTc5QUU5RkJFM0JBQkNBQTVCQkE3QkU0Cis6MTA1MkQwMDAwM0ZFREQ5QUE1MTU5MkNGQTY2MTdCNTMwM0I2NUZGRDUxCis6MTA1MkUwMDA1NDE0M0Q3QjZDMDFBRTBFRTgyNTc2MUM3QTE3OTM3RjMzCis6MTA1MkYwMDBCQkJFMUFENjVCQjc1MEY4QkQ1QkI4NUM1RERBQkZEMEY5Cis6MTA1MzAwMDBDMjNGNkU2NTk0NzM4NzhCM0UyMkJCRjk2QzdGMURGOTlCCis6MTA1MzEwMDBCM0IzMzFERUVBOERDQjk5QkExNzQwRkU2NEM0RTVDRjUyCis6MTA1MzIwMDBERjJBNzdCRTU4Q0RFREMwQ0I0MEZFRTA3QTlDMEI3OUVBCis6MTA1MzMwMDA1QzMwRjlGQ0RERTJGQzQ3OTMyN0EzRjE0Rjk0MUZGQzlFCis6MTA1MzQwMDBFRkYyODQwQjI0NTc1Q0VFNkE2ODRGNEY4QkNCNUZCNTRFCis6MTA1MzUwMDAwRkVBNjM0N0M3QkY4Nzg0N0U5NTM1OEFGRUY1ODBDMDE0Cis6MTA1MzYwMDBGNzUxRjMzNUZBRkUzRTdFRUZFREQ1RkYzREUyNTdCQTM5Cis6MTA1MzcwMDA3REEzRkJCRjc1N0JFOEY3MDJDRTdBRjlBRUMwOEJCRjg5Cis6MTA1MzgwMDAzOTVGMTk4NTYyQ0E3QzY1NjdFQTdDRTUxQjdBMjVGQTc0Cis6MTA1MzkwMDAwRThCQzg1NzNFQTJCMEZBRkQzOTk4QTcyN0VFMjU0NEQ4Cis6MTA1M0EwMDAwMkE0REYxQ0Q5RjVFQjRENEZFNEUwQkQwNDQ5NDVCMTQzCis6MTA1M0IwMDBCM0JBRjcwNEM5RTdENUEwQ0Y5MDFFRDRGRjJFRjc0QkEwCis6MTA1M0MwMDBGNUYyRkNEMkQ1N0RDNkZCMEY3QUU5QUNFMUYxRjY0NkU5Cis6MTA1M0QwMDBEODBGRjk5MTQ1MUVERjlDMDM5Q0FFNDM3RTI1QTJCOUYwCis6MTA1M0UwMDBEMTJGRjQxNTM5RDEyRjE0RDI2MkI5N0E3RTYwODRDQkQzCis6MTA1M0YwMDBBNTk0Nzk3Q0VENkM4OEYyRkREQURCMjQxRkNBODNDRjlCCis6MTA1NDAwMDBFQzI3RjJGM0ZDQkU0QkY1MTNGREJDREE5ODdGN0FBRUM1Cis6MTA1NDEwMDA4QURGRkI2OTBFNEExMkVBQTM1NjUzNjAxNUU1RjcxRUIwCis6MTA1NDIwMDA5NEQ0NTQ3OUEyRUYwODc5NzNCNUYwRDNFRTU1MzgxRUIxCis6MTA1NDMwMDBFQ0JENUNBMkJDNUFCQzE3ODNFN0JCRjcyMENGOUZERjUzCis6MTA1NDQwMDA1QkNCRjNFNzc1QkZBQzlFMTc1RjE5RjdDQkQyN0QxODI2Cis6MTA1NDUwMDAzRDlGNUVDRjhGRDdFRjg3MkVEQzY5OEZBMjdFQjFDREM3Cis6MTA1NDYwMDBEMkVCNDIzQTFDRkU0RTBGRUEyMkQwNkUxN0RGMTk0RkU0Cis6MTA1NDcwMDA1RUU3MkZBQUVCNzc1NTUzQkY1MUY1OUIzRjU2QTdEMDU4Cis6MTA1NDgwMDA2RkZDQzI0RUZCNzNGNUE4N0FGOTVGQUI4RDdBMzlENTA0Cis6MTA1NDkwMDA5M0Y1RjJGRjJBQkZFQzM3QzQzRTUzRjlENTUyRUI2N0MwCis6MTA1NEEwMDAyM0ZBQkQ3ODg5RkQ3RTk4MEExRTVEQjZENERGMEI2REE4Cis6MTA1NEIwMDBBRDExRkMzN0U5RUY5MkIwMTFGNzdCQjg3Q0VCOTFCNEZBCis6MTA1NEMwMDA1RjVENDE3MTJFMEJDNUI5NzRGRUQyOTNDMUM3Rjc4QUQ3Cis6MTA1NEQwMDBGMUY0RjJGMzM1OUNDRjhDRjY1REM5NDVBMkRGNUFDOUQxCis6MTA1NEUwMDA1RjU1MzMwNUJGMUY2RkY0OTM1NUY3MUFGRDY0OTdGNUE5Cis6MTA1NEYwMDAzOTBERjU0OUQxN0M0M0ZGQkE2M0M1ODZGNjI5QjE4OUQ4Cis6MTA1NTAwMDA4NkY2NjkyNzZCMERGNTE5ODM5NzFCRkE1RkYxNzY4MzkxCis6MTA1NTEwMDBBMUZFQjkyMUEzOUZFQ0FBNzM4QjkyRUUxRDcxRkNBRTg0Cis6MTA1NTIwMDAwNzhDNDg3QzZGOTZGNThCODY3RTA1NkRDNjdEMTU3NTVDCis6MTA1NTMwMDAxOEY3MzU2MTlENzE1RkZBQjhFRUIwNzE3RjI1M0RDNkYxCis6MTA1NTQwMDBGRDM5RDE3RkVGRkRFQ0ZFRkI5ODU3RTNERkMxRTkyRjdBCis6MTA1NTUwMDBBMUVGRkVFRDY4RjJEMDc3QUVGNUZCN0ZGRjA5RkVFRjFECis6MTA1NTYwMDBEOTIyRjA3MjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMERFCis6MTA1NTcwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQjUzRTE2NzYwRjg1MTJBCis6MTA1NTgwMDAwRkMxNUJGOTE4MTgyRUYwMjFGOEY0QzAxQ0NDMEMwQ0RDCis6MTA1NTkwMDA5QzQwQUNDOEM4QzAyMDAxQzRGQzQwQ0MwNkM0OUUwQ0QyCis6MTA1NUEwMDAwQzBDRkY4MUY4MUIxMEJGMDVFMjI3NDBFQzBDQzQwNzcwCis6MTA1NUIwMDA1OEIwOUJFM0M2Q0FDMEUwMDFDNERDNDBCMzc4OTg4OTA4Cis6MTA1NUMwMDBCN0RGODkxN0MxN0VDQ0MzQzA3MDBFODg5RkYxRDAzNzdBCis6MTA1NUQwMDAwQzA2MUI1RTI3NDAzRkJCN0U0M0VEM0EyOTMyRjBGRUFFCis6MTA1NUUwMDAwNjYxMjEzMTYwOUExNDQ3RjBBNzhBQTNDQTBCOEIyMTY4Cis6MTA1NUYwMDBEOEM5RDI5NEQ5OTUwRkQ0MEYwMEYxOTMyMUYwODAwMzJDCis6MTA1NjAwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEU4Cis6MTA1NjEwMDAwMDBCRUQ3RDBCN0M5NEM1QjVGODdDQkJERkJFOTJERDQ1Cis6MTA1NjIwMDBDRDI2RTQ0OTAwMzcwOTYwNTAxRTRCODBDODRCRERGMEExCis6MTA1NjMwMDAzMjUyQzQwNDExODI4QTJDQUYxMDAyNzkxNEE5QTVGRjNBCis6MTA1NjQwMDBEQUJCMEIyODA0QUFERTU4NTFBMzdGNkExNzA0MUIyRDZFCis6MTA1NjUwMDBEQTgwRDExQjZERTAyRUEyMDhENTZBNjg0NTUxQUIwREVBCis6MTA1NjYwMDA4ODg4MDg0OThDOEY2QUI1N0FDRjM5MzNERjY2RTdDQkYzCis6MTA1NjcwMDAyRTg5QjZGRTZGRkZCRjdCQzNBRjFERTc5Qjk5MzM2N0QzCis6MTA1NjgwMDBDRTM5NzNFNkNDOTk5OUIzMjY4MzgzMTkyRTYwRUMxQjJGCis6MTA1NjkwMDBGQ0JCOUMzMTlCODkzMTM2QTYyQjZENTczQTg2QUIzOUMyCis6MTA1NkEwMDA1REU1QjdGOUJEQ0M2QjY2QUNDRTZGQTU3NDhCM0Y5RDQ1Cis6MTA1NkIwMDA3OTA3QzM3NzlGQTEzMDY4NjdFQzVFQkY4QkYyQkZGMEJDCis6MTA1NkMwMDAxNzUyNUFFQjJGQTI3QTc3RkE0QjI4N0ZCQkRGNDdFOUI0Cis6MTA1NkQwMDA2NjdGMTk3REFGRjE1NzUzN0U4MzdGMERBNTlCRDQ0NTFGCis6MTA1NkUwMDA2OTJDMDVGQTY2NDU4NTU5Qzk4QzU1M0Q5MzkzQjcxOUMwCis6MTA1NkYwMDA3MjVCNjY4RDRGNTA0NzQzRkUxNTIzMzM2NjAxN0M5RkQ2Cis6MTA1NzAwMDA0QUZEMzFENUJENjlFMEU4QUU3QTFBOUU5QkQ0NDlGREM5Cis6MTA1NzEwMDAxMDRFRUQxMjhFMTdCMzMyNUI4QzdBNTkzOENFM0I5NzEwCis6MTA1NzIwMDAwODc4RjZENjlBOUNFNEE4RjUwNjIzQkNEQjRCMDBERThECis6MTA1NzMwMDA1MDI4NzA4NUFDMzlEMUUxNUQ4Q0YwMzY5N0E4QkM1RUZECis6MTA1NzQwMDA3MkIwMjYzQjNBM0MwRkQ2QUJCOTQxQzA0QjBGNTg2MzAxCis6MTA1NzUwMDBENDFCODNGNTM2REMyMEYwRUJFN0FCQzk4QURFRUY3OEFCCis6MTA1NzYwMDBBQ0M3NUNFQURGNUFBRDhDRkVCRUM5QzZGRkI3QkI0RTA0Cis6MTA1NzcwMDA1RDJDRjI0NkNDMjYzMTM2QUVBQjlEM0U2NTJDQzA3MDFBCis6MTA1NzgwMDA5QzJBRjMxNTEyMUZEQzk5NUY3RjkzQ0ZEODREMDgxMzI1Cis6MTA1NzkwMDBEQTA3MjZCMTkwMTFGQTBGMjRCMUUwRkEyQ0E5RkU0Q0Q5Cis6MTA1N0EwMDBBQURGREFGN0VCNkY1MkE1RkEwMTQzOTRGQTI2RDZBMEU2Cis6MTA1N0IwMDA2MEY5Q0Y1MThFODBFRkY3Rjk3MzI5REQyOEU0RTdCRTU5Cis6MTA1N0MwMDBBMTA2QzZCMDVEQkEzOTM4MDhEQURERTNGNzkwQkNEQzczCis6MTA1N0QwMDBFRDFGNEJFNTc3MDkzOUZDNzcyMTY3NDEyMTY3MEZBMjVGCis6MTA1N0UwMDA5QzQxQkExNUU1Q0M4Q0ZERjk1QTRCMDE0RUZCREU3ODk1Cis6MTA1N0YwMDBCNkQ5NERGMkI1OThGMDU0MTlDMURGQjA3N0M4RjZDRERGCis6MTA1ODAwMDAwMEZGQkUxQjU2OURERTA2RjQ2RjZCMUVFNjMxNDJCREU3Cis6MTA1ODEwMDA3Qjg2NkFGMkM1QkMyQ0I5QUJERTNEQjM0RjM4MTcwREExCis6MTA1ODIwMDAyNTdBOTcyMTlDQkIzRDgyN0YyQTBDMkNBMkRFREQzMzlBCis6MTA1ODMwMDBDMkY1MkFCMERFNUQ5RTMwQkM1MDY0QkY3NzREMDlEN0ZCCis6MTA1ODQwMDA1QjQ1N0M1NjU4NDk4M0JEM0I1Rjc2MzA4NUU2MjMwODJGCis6MTA1ODUwMDAwQUQxRDc4NEY0ODU3OUY5RUM4MEVCOTQ1NjY4OUY5MjRECis6MTA1ODYwMDA5Qzk3QzZBMERERkQzODFGQ0QzOEVGREM0NDE3QUQzRDU5Cis6MTA1ODcwMDBEMkQ5MDdERjMzMkNBQzFBRTEwMzY1RjcxQjAxNUZEM0U0Cis6MTA1ODgwMDA2Qzc3MjJEMkU1RjY2QjhCOTgzMjhDQjFCRUEyM0MzNTk4Cis6MTA1ODkwMDA1MEE0NjQwMTVDRkI5QzIyMDVCRjlCNjY0MzM5N0M3NzY2Cis6MTA1OEEwMDA4OUYyRTQzNUJDRkM3NjJDNzc3NDk1Mjc2MjM5N0M0RkZECis6MTA1OEIwMDBBQTg2NzJDOERCRTdGMkYyM0JGQ0MwODlDMTVERjUzNjBGCis6MTA1OEMwMDAwMTlGN0RDNEVGNzRGRTFERDg4QUY0MzE4REU2QTk4NjUwCis6MTA1OEQwMDBGNzEzMjgyNDQwQkY4Mzk4OEVFOUMyN0ZEM0EwN0IzMzdGCis6MTA1OEUwMDAxNkRBQkJGMEI1MERBRUE3QkM4NkRGQTZDMTcxOTREN0EyCis6MTA1OEYwMDBGMEIxNUREODJGNjMyMUE0N0Q5N0Y0NjVERTVDMzExRjg0Cis6MTA1OTAwMDA1ODc3M0EyNzdBQjNBNUYyNENENTkzQTAwMjlEMzI1RjFGCis6MTA1OTEwMDAzMkIyMDBCMDIwMTNDNDEzRTFFOURCMTUzMTAzRTFEOTQxCis6MTA1OTIwMDBFM0ZDNEJFRURERkMzMzBEOTVFOUEwQTU0NzA1M0QzNEM2Cis6MTA1OTMwMDAzQTZDRUMyRkQzQzEzMjQwQTZDM0M2MDEzMjFEMkMxN0RFCis6MTA1OTQwMDA5QzlGMEUzQjk4OUJFODFDOEIxRTVBQkY5Qjg3QzhGREYzCis6MTA1OTUwMDBDNjVEMjRGN0JCRjkyMkI5REZCODhCRkYzOUZERDY2NEU5Cis6MTA1OTYwMDBDOUZENUFCM0U1N0U2QkIyRTU3RUFEMzlGRjU4QkY0QzM5Cis6MTA1OTcwMDBGNUMwNjQ0MDdEQTVGRDVEMjhFOUI3QUI5OUVGMkNCNjc1Cis6MTA1OTgwMDA0NzNEODdGMzQ5RDM3M0E2NjQxRkYzRDlCQkY4MDlFQkVFCis6MTA1OTkwMDAxNDYzRjk5MTcwMDY0QjdBMTVFMDdDOEFGNTAwOEVGNzU2Cis6MTA1OUEwMDBGQzcwNUMzQTM4ODNGNDcwQkUxNkY4QjA0ODNEREQwREVCCis6MTA1OUIwMDAwRTFCQTgxRjg3NDlFMUVENDI4Njg4RkU5OUVBNjM0NUUwCis6MTA1OUMwMDA4RUM4NzYxRTVERkYzOUZBRkU5RDhBMTg4N0UxQkNGRDAwCis6MTA1OUQwMDBCQjc1NzRDREQ2RTM5MzI2RjA2MTg2RjNEMTgzQjk3NDk5Cis6MTA1OUUwMDA3MEIyRjQ3MERDMDI5RjkwNzI1RTM4NkVGRDM4MkUxNDM3Cis6MTA1OUYwMDBGRDA3MTQ2OUZEMDI3QTBDRUI2QUQ3MEVGOEQxM0E5NUNGCis6MTA1QTAwMDA2NzA5RUUwNEZEMTBEQUY3RTUyOTVDMDdDRTM1NUVFQjk5Cis6MTA1QTEwMDBCNjQwRkRGRDIzMkRBMUNCQTFGQzVDQjAyMDY4ODFGMjM2Cis6MTA1QTIwMDBDOTRGMUU3NUEyMUQ1M0YxQTQ1MUM1NzJDMzNFMUJBREQzCis6MTA1QTMwMDAyRjZEM0IxNDJBQUZCMkI0REMzOTAxQ0EzQjlFMzRCMjlECis6MTA1QTQwMDBFREQ0NURBNjAxQzc3NzRBRTgxNDE2RTJGOTUyMUJDRkUwCis6MTA1QTUwMDA1NjZDREI3RjIzQjYyRjZCQjIzMDFCQzBBQjc4N0FEOTg0Cis6MTA1QTYwMDBDQzA5OTA1Rjc2QzhDNEIwNEFDNUNFQjVFNkJFOTA1RjlCCis6MTA1QTcwMDAxRTU0MUEzMDBGRjhEMjNBMTVDOEIzMDU3NzQyRkQ3NTk3Cis6MTA1QTgwMDBGQkJFNkM0M0ZDQ0YzNTlBMDYyMTNFNjc2MDlENzBDMzE4Cis6MTA1QTkwMDAzQUYxOTJBMzI1NzUzNkQwQTczQ0I4N0IxQUI2MkZERjEyCis6MTA1QUEwMDBBNTc4NDBDMzAxRkUzQjBGNjYyMEZFOEYyODFFMEJCMDc5Cis6MTA1QUIwMDA3MDQ1N0QzQzczNDdDQzk3NTM4RDQ2MUFFRkFBNkQ0QUNCCis6MTA1QUMwMDA5MDAxQkM2NUFDNzYxQUQyQjMwMjg5ODM3ODc4MkM0MUY4Cis6MTA1QUQwMDA5QkQyMzVERkNFRjhFQkE4M0YyRDVGRjEwOEY0MDdFRDQwCis6MTA1QUUwMDAyQjFGNTczQzM4RTQ0QTAzRjNFMTNDNkU3QkRBNTZGMjU1Cis6MTA1QUYwMDA5MDFEQzdCQkQ2M0NEODgxRTNEQzY4QzY3QUNCODIwQjRECis6MTA1QjAwMDA5RkIyQjkxMUNGNkRFNjY5ODhFRkQ2NkRFNkQyQTE0ODk0Cis6MTA1QjEwMDA0N0I2QTA2ODI4RTJGNzdGNjVGQ0VBOEM1RTFDRUZBQTE2Cis6MTA1QjIwMDA5MTk2RUQ0NkMwODNEOTQzMDM2NzM5QkFFQkQ5MzNCMEI4Cis6MTA1QjMwMDA1RUI5MjNENkNGNzIwNjdBOUZENkVGQTBCOTc4NThENzMwCis6MTA1QjQwMDBGNzJGMEQ4OUE0M0Y1NkQ0MUI5OURCREFENThGMjYxRjdBCis6MTA1QjUwMDA4MTIzNDIzRUY2M0E4OERFMUEzRjU3QjlGODE0RDBGODRFCis6MTA1QjYwMDBCOTJBNTFGMDU3RURDODlGMzVBQzNCM0U3NzIyNUZDODRDCis6MTA1QjcwMDA5RTc2NTFGQTBCNTgzNzMxREQwMkVCM0NEMkVGNUVCMDI2Cis6MTA1QjgwMDA5RkRDNjQ5NzdCRThGQjAzNjAyNzYxQkExNUVDMjQ0QzJCCis6MTA1QjkwMDAxRjA0M0JDOTJERUMyNEFDQjcxREVDMjQ0Qzc3ODA5RDMxCis6MTA1QkEwMDA4NERGMUYwNjdCMUNEMzdBQjBDN0YxRkJBMzYwOEY2MzMxCis6MTA1QkIwMDBCQUNCMUZBMEVGOEZGQjZCMjg2REYwRDc1MkJBMDdGOTU1Cis6MTA1QkMwMDAwNjY5QTMzRjQ4RjU5RUYyRDc1M0RBRTQ2RkEwRUZDRjAyCis6MTA1QkQwMDBGODlCMjhCRDVERDBEMTM5OTExNUUwM0FFQUY0MzIxNzJGCis6MTA1QkUwMDA5MjNENjk4NkI3QzAwNEY5QTQyMjlFNEZCRDIxNTA2MDQyCis6MTA1QkYwMDA4NjdDQUEwRkYyNDA5N0JFMkI0MzA1MTZDOEY3QURFNjg4Cis6MTA1QzAwMDBFNTAzNkU2MTkzQUM5MDFGMTBFMEU1RDlCNzdCMjdEOTBGCis6MTA1QzEwMDAyMDlGNURDQkNCMDc2RjBENEM4QTgzRkNFMDIwMkZCRjBDCis6MTA1QzIwMDA2ODU3Njg1MjNDRTQyRjZBRTBFNUMzOUJEOTY0M0JFNEMzCis6MTA1QzMwMDA4Nzg3NzgzRUVGMjVFRjY0MDdFNEYzNUE3ODNFRkZDRjdECis6MTA1QzQwMDA4MUM5NEVDOEU3QjdGMkY2RTNDRjA2OERFRTI4RUJFRjM5Cis6MTA1QzUwMDAxRTkzN0IzMUFBOUMwM0NBREI1RTM1MDNGMjY2Rjc0REM3Cis6MTA1QzYwMDBBODEyOEYyQUE3MjhERjY4RjI1MkY5RkI0QUJCNTc4NTkyCis6MTA1QzcwMDA3NUJFRDFFQ0E1RjIyRjk0Q0YyOUZGOTRDOTQ3RTVGMTY5Cis6MTA1QzgwMDAwNkE1ODBGMjY2MUY5NUY3MzdDNDUxQkVDOTE0QTBGMjZECis6MTA1QzkwMDAxMTg2M0UzQzZGMEU1MDc5ODFBMTVGMDFDMjdGQzYxNDEwCis6MTA1Q0EwMDBBNEYyNkIwQzgzNzhERTFDQTRGMjVGQThDMzBCQTY0MEExCis6MTA1Q0IwMDBGREM3MERCRUJEQThFRkQ2MkJCRTMyQjQwRjk5REE5MDRBCis6MTA1Q0MwMDA4RUZBNEFCMzJCNzdFMkUwRDBDRUNDMzBEMzNDRDhGMzc3Cis6MTA1Q0QwMDA4N0ZDODc2ODFFRTA1RjMyRTY0QjFGNDZCQjE0RTAxQzYyCis6MTA1Q0UwMDAyNDM4MjY4MDYzRUMxOTRFREVDQjYzMjUzODc5MkY5NzU0Cis6MTA1Q0YwMDA2OTcwNUUyMTM4QjZERUMxRDlGM0YyNzgxOTlGOTdDQjZGCis6MTA1RDAwMDAzNTM4QzcwODhFQTM3N0UzQ0E3QjY1QTI4Q0NGMkIyQkNGCis6MTA1RDEwMDAzNTM4QzcwOTRFNjJFRkYwNjkzQzJBRDNBN0YxNjg5ODdECis6MTA1RDIwMDAzRTY3NzA3RDU4OUZEMjNCN0M0NkJGMjZEMzY3RjQ2QjlECis6MTA1RDMwMDA2MUZBN0M0Q0Y4NjRGNDBFNEVFMzZCMzI3RDFBNUYwQjEzCis6MTA1RDQwMDBEM0U3MkI4MkQzQkY3N0UzMUFGREJBNEM5RkQxQUY4NzNECis6MTA1RDUwMDBFOTYzMzIyMDlDQUNERUMxNzlFQTZEOTkzRTRGQkQxREVFCis6MTA1RDYwMDBBNjhGRDM4MEY0MTlENEJCNzFFNUJGMjNEMzI3RkY5RDQxCis6MTA1RDcwMDAzMDdERDIwODlGMjFCRDgzRjNENDNCMzI3RDlFN0EyN0FDCis6MTA1RDgwMDA0QzFGMzdFMTMzQUM3N0UzQ0FGRjhCNEM5RkZDQkY4NEQ5Cis6MTA1RDkwMDBFOTMzODRFMDhDRUMxRDNFNERFRkM5RjQ2OTdBMkY0QzU5Cis6MTA1REEwMDA5RjNDODIzM0E2NzdGODhDM0QyNUQzNjdFQ0E5MzA3REU0Cis6MTA1REIwMDAyNjEwOUM3MUJEODNEMzc0NEFBNjRGRDNBOTMwN0RBNjBCCis6MTA1REMwMDAxMDlEMkZFREREQjhDNkJFMkZEMzY3RUNGQjYxRkE1Q0VBCis6MTA1REQwMDA0NTcwMEE3Q0Y1ODQwRjAzMzg4RUQ4NzA5RTM5MjdEMzFFCis6MTA1REUwMDBFNzk5NzM2MUZBQ0MyMTM4NTMwMTRFNEVDRjcwQzZCNzk0Cis6MTA1REYwMDBDOUY0MTlERjE2QTZDRjAyODI3MzY1RUZFMDNDRDMyNjAzCis6MTA1RTAwMDBEM0U3OTlCNjMwN0RDQTg4Q0U1N0Y1NkU1Q0UzREI2NTgzCis6MTA1RTEwMDBGQThDNkZFN0Y0QTlCMjc4MjYzQkQwQkU0QjY0OUVFREI2Cis6MTA1RTIwMDBEMEU0OTI5MzBEMDc5QzkwMzdEOTk5MDdDMUJFQTQ4NDAyCis6MTA1RTMwMDA3NjIwN0M1ODJCQzkyRTU0M0Q5QTlERTI2MTY4ODdDRTBFCis6MTA1RTQwMDA3MEJBM0RFOEY3MzE2QUY2MDg2QkExRkQ4MjdENTdBMjcyCis6MTA1RTUwMDBFNDBGRkFEMjMwRTkxNkM0RDcwMTU2NUJBNDVEOTIzMDQ0Cis6MTA1RTYwMDAzNjRFQjI4NzEyQkQ0OTUyQkU0RjYxNUZBOTdFNEE1MTdDCis6MTA1RTcwMDBCNjU0OUU1NjcyOTE1NDlFRTFDQjkzRjI5OTY1RTNBNTc4Cis6MTA1RTgwMDBGQUZEQUIyNzQ5RjkwQkQ2NEM5N0VBNjcwNTY2NDlGOTQ1Cis6MTA1RTkwMDA5QzlBRUJBNEZBODM2QTE3NDlFNTE3RDY5NTRCRTU0MzFDCis6MTA1RUEwMDA4MkFCQTRGQ0M1RjVGRjQ3QUEzRkFDNjE5RDU0M0VBMjVFCis6MTA1RUIwMDA2OUIzNTQzRTMyRjQwQjI5M0ZFQUQwMDM1MkZEMzEyRDMxCis6MTA1RUMwMDBEQkE1RjI0QjhFM0QyQTk1OEY2QkREMjNFNTI3OUM3RTZCCis6MTA1RUQwMDA0NjY3MDdDQUZCRkZGNTA1OENEQjgzMTk2NkIyMDc0M0VCCis6MTA1RUUwMDAwRTMzRTVDREZCNkM2NEZGRUZDNzNDRjBEM0RDNzcwNkU3Cis6MTA1RUYwMDBFNUNEQ0YyRTc2MjdFMzdFMUEwMUMwN0E1RkQwQjdFQ0NFCis6MTA1RjAwMDA0MkY0RjdEQzNDREU3N0ExMEJCRURGNkNGNjhENzA0NTBBCis6MTA1RjEwMDBGMTQ3Nzg1NERGM0UwM0Y5OEI1QTE0OTY4RUE5REI4MDQzCis6MTA1RjIwMDA2OTlDNTFFQ0Q3MkQ1Q0JFMzY2NkU1M0YxNDg4OTBEMzUyCis6MTA1RjMwMDA5QUZFMzBGRjIwN0ZEODYwMjZGQjU1OTNFRjhERkQ0QkY2Cis6MTA1RjQwMDBEMzE3NDZGNEIzQTFCRkI5NjRGQjUwRkU3REIxMURGQjZFCis6MTA1RjUwMDAyQjdBMTFFNzU5OTVCOTYzMzBFMkE1RUZDNzkyM0Q1NjA4Cis6MTA1RjYwMDBFQUM3M0FBMDhDRkE3OTBERkI4OUYwN0I1OTA2OTRFOUNGCis6MTA1RjcwMDBGQUIxOTY2QzE3REY0NTNGQzc3MDVDQjFGQUQ5OTgzRDBFCis6MTA1RjgwMDA1RTFFQ0Y4MDcyRUFFNzVENUQzRjFCMDc5NEVCRkE4OUU2Cis6MTA1RjkwMDBFM0UzODFFRkEyOUZGN0NFM0I5RTlDODlGMjc4MkU1OEQ3Cis6MTA1RkEwMDA0OUZENzRFOEU4NjZCOTYwQTVBRTFGM0JGNTgzREYxN0NECis6MTA1RkIwMDA5MzNGMTc3NjAxNjlDMDY3NEI0NzI5QzlDMTdGREE1OEZCCis6MTA1RkMwMDAwMEU0QzI5QzU5RkU2QkNDQjNCNzZDNkMxMEY2RTM4NjUwCis6MTA1RkQwMDA3RUExMUVDQkU1RkVBM0E3MEQ0OTM0OUVDRkUyODBGRjM0Cis6MTA1RkUwMDAxMTc2NkFENzdFMzY0MEZCRTJBNTAyNDUxNjA0OEM2MDI2Cis6MTA1RkYwMDA3RjVCMjk2NDczQzlBRUUyMDEzN0I5MjE2RDNBMzBGMDk1Cis6MTA2MDAwMDA2RUVDNjc4QkMzMzMwOEYyNkQ0RDkzQ0Q4QkEzQzhEMzcxCis6MTA2MDEwMDBEMjVBRDNBOUQ2NDhCRjg4QjZCRjk5QzQ3MkFCQTFGRkU0Cis6MTA2MDIwMDA1RDM2OTc5NEQ3RDI5NThBOEIwOTdGMDRFNTRGQzBCRTIxCis6MTA2MDMwMDA4NUMxN0VFMENGQjAyRjYwNDBBQTc3NEQ3QzlGRjYwRUUxCis6MTA2MDQwMDBFQzZGMzBERjBBRkIxQjJDNjc2QzJEQjUzQjIxRkNCNEQ5Cis6MTA2MDUwMDAyNzZFNTc4MjQ4RUZDRjdFRjI0MzEzRTlGMTAwN0IzNTdDCis6MTA2MDYwMDAzRDE1RkQ2RUZDNkZDMTlBNzhGNEYxODdGMTVCMThFODdECis6MTA2MDcwMDAyM0U1NDE1RDY2MUFEMjY5NUY0OEZCREY4RUE3MkRDMTFCCis6MTA2MDgwMDBFRDQ4RDc5QTRDQTBBOUE4OTdDREQ4RUJCMEM5Q0Q0ODc4Cis6MTA2MDkwMDBBMjZDQTY2MTJDNjNCM0FCOEJBN0E2RDEyQzUyRkFBRjJFCis6MTA2MEEwMDAwMjNDNjczNThFMzQ0MTBCRDY2NjZBQkREMTYzRUY4MjAwCis6MTA2MEIwMDBDQkJDQTYxMzQ4MUYyQkZDNDMzOEQ3MTQ0MjNFQTJGRjhCCis6MTA2MEMwMDA2QjhCRTRGQzVDQTY3NkU1ODFERjgzOEREOTgyNkZBMkMxCis6MTA2MEQwMDA1RkI3RDc4NDdDMkQ0QUU1RjhDQ0M1MzQwRjhCQjlCRkE4Cis6MTA2MEUwMDBBM0M0QzVEQjZBRjg1NDJEMzZCMTEwRUQ0RjAzMjkwQzVCCis6MTA2MEYwMDBGREQxODE2NEFBNzc5REI2Q0ZENEUxNTc2MkIyN0E4Qjg1Cis6MTA2MTAwMDA4MEFFMjUwQjhENDQ1NzNEQkU2RkVFOEJGNzFBODY0MzRDCis6MTA2MTEwMDA1QTczQjcwOTVEOUIzREUxM0ZDRjI3OTdCMzMyREU5RkFFCis6MTA2MTIwMDA0NjU3NEQ1RTRFMDlGRTlFNDBGRTQzRkEzRUYyMUZGMDdBCis6MTA2MTMwMDAzRTI5RjhERjI1Qzc5Q0ZGNTUxNkRGNENFNDdGQzdGRERECis6MTA2MTQwMDA0NjQ2RkMxMjdDOUYyM0Y4QkVCNDU2RTZGQjFDRjQ5MzMzCis6MTA2MTUwMDA0M0ZEMzlBQkIzODJFQkIxN0U1RDFGODlCRjMwNzA5OUNGCis6MTA2MTYwMDAwRUI1Nzc0RDA1QjVEQTBERkZCNzg1MUM1QzU3QjNGQjRGCis6MTA2MTcwMDA3OTY0RUZGNTY1QkFGMTA5M0VEQzI4RjgzMDVGNDc4RkE2Cis6MTA2MTgwMDAzOTgyNkZGMzA1REY5NkIxQzA2RDE5RTQzRjBBOUFEMEVBCis6MTA2MTkwMDAyRjM2QUY0QzYxQTgyRkFBN0VBQUYxQUQ1NUUyOUI0RkQ2Cis6MTA2MUEwMDBFMzlCMEVERjFCMDVERjZFRkMwOUU3OUIxRUVGNTZDMTZDCis6MTA2MUIwMDBCN0Q2QkE4RjREMkNCQjNCREU3QTNDMTdBQ0QxOEQyQkJBCis6MTA2MUMwMDBBMEU3NUJBRDM4Nzc3MDk5RDFERTI5RjYxNkY0MzkxOTVFCis6MTA2MUQwMDA1MUZGOUFDMjJCRkI5QzhDRDAwQkQ3MTYxNTRCRjlCOUVCCis6MTA2MUUwMDAyNUYzQTRGQUYzN0MwQkE1RjJFQkNCOTY0QkU1RjNBQkNFCis6MTA2MUYwMDA3RjI4RTUxN0FDRjk4OTU0N0Y2MTYwQUQ1NEJFQjg2NjVECis6MTA2MjAwMDA5MzU0QkVCNEY2MkUyOUJGQUNFRTdFQTlGRUYyRTAzNjYyCis6MTA2MjEwMDBBOTdDNDVGRDIzNTI3OTQ1QzM2RTI5NUZENUY0QjQ1NDVBCis6MTA2MjIwMDBERkIwNkZDOEQ1Mjg1RjJGMUQzNTMyRjQ5NzdERUE3OTJFCis6MTA2MjMwMDA5RkZDNzU5RjdBNEMxRUFDNTM4OTMyMzcwRUU1RDk0REMxCis6MTA2MjQwMDBGMjdDQ0E5RjRCRTk2OUJGODdFNEZEOEM3RjJDQTU2RDZBCis6MTA2MjUwMDA0RDA3RUNFODdGQUM4QTAzQkQ5RjA4NzZCOEYxQ0RCNTU5Cis6MTA2MjYwMDAzNUZENzBCRDgxRjZFMzE5NkIzNkI2QUUwRDQwRkUwMDBDCis6MTA2MjcwMDAxRTQ2QzFCQzk5NTE2NzY2QTE1MTBDQTRCQjZGNTg5RUM0Cis6MTA2MjgwMDAzQjhDMTFFNUFEM0Q5NEQ3QTkyQ0Q0QTc3QkY5OENENkQ2Cis6MTA2MjkwMDBFOERGREI5NThFQzExOUU4Mjc3Q0MzQzI3NjQ2RjhFQkIwCis6MTA2MkEwMDBCQTlGNTdCMDRDQjQyQjYyOTU5RjM1QjBCMkM4RjNBQ0NGCis6MTA2MkIwMDA5MzQ2N0U0RUUyMzQ0RTNBNjk4NDc0QTU5OUNGRkY5NTk5Cis6MTA2MkMwMDA3QjMyMjYzMTI3RTY0MzgzQUJBM0Y4NURDMkZEMzUwMDYwCis6MTA2MkQwMDAzMjY5QzhFNzFDNjlERTJGQUJCQkI4NkI5RTMzRUMyNzc1Cis6MTA2MkUwMDA5QkU0NzY3OTcwOTRGNDdENDVGRDA0QTk1REFFRTI3Qjc0Cis6MTA2MkYwMDBENzA4RjVDRUVFMzdEMjdBQ0Q0MjA3MDY1QzMzMENGMUUzCis6MTA2MzAwMDBGMzlFQzRFRkFDMjk4NUVDQUUxNkJGQjdDRkM5ODE4QzI0Cis6MTA2MzEwMDBGREQxNUY0OEU5QUJGRTIyNEE1RkYzOTc1MDdBQ0NFRjlDCis6MTA2MzIwMDBBM0Y0NEQ3RjE5QTU3RkY2NTc1M0ZBOEU3RjBEQTVBREM3Cis6MTA2MzMwMDBGRTAwQTUyN0ZDMzU5NDlFRjRENzUyN0FDQTVGNDdFOTQwCis6MTA2MzQwMDA2OTdGOTBEMjMzRkU3QTRBQ0ZGQTFCMjg2REYzMzc1MTFBCis6MTA2MzUwMDBBQUU5Q0Y5RUU0RUZCNDU4NUZDRkEwRkM0NTkxMzNGMzk4Cis6MTA2MzYwMDBBRDZDNURDREM0MkUzOThCNTMyREVCNTBDRTM0RkFDRUFGCis6MTA2MzcwMDBBOEIzMDg3OTQ4OTVFNDIxMTFENzYxOTJCMzFFQ0FFQkZFCis6MTA2MzgwMDA0QzQyMEU2M0I1OEY1RThFRjJENkY3N0I5MDM3QzZENjQxCis6MTA2MzkwMDA5MTFDQ0MxNDcyRjc1REU1OERBMTM3M0UwNUU1Mjk1M0JDCis6MTA2M0EwMDAyNzRGQjIxQzZBNzJBNEU5ODE1Q0E1NjhCODNBQTY0QjczCis6MTA2M0IwMDBBRTY2MUFCOTlEQTRDOUQ1Q0ZEMTRFOEM2MjZGRERBMDRGCis6MTA2M0MwMDAyQTYyRkRFM0Y2MTFGMzY1MThEMDdFNUIyNUZDRkVDQzU2Cis6MTA2M0QwMDA5RDRFRjk0RUQxRjc3QTAwRDc4MkY1RDQ2MDJFQUUyM0M4Cis6MTA2M0UwMDA5REI5N0YxQjhDRkVGMUNFNjMxNjg2N0VGODU4RTNEM0YxCis6MTA2M0YwMDBDQjRCNkNCQTdCNjlGRjUwMUE4NDQ1NkQ1NEY3NzI1QkM2Cis6MTA2NDAwMDAxQ0E3QUJDREMwMEE1OTFFOUVDRkU2MUZGMzAxM0ZFMzg4Cis6MTA2NDEwMDBGRUYzRTIzQ0RDRDdDMjc3OTU5MTVEMTVGNDE0NDdGMUE5Cis6MTA2NDIwMDBCNzMzOTRGMUI0OUVFOUFCRDUzRkY1QzA5N0Y5Nzg2RUQ4Cis6MTA2NDMwMDAzRTUzQ0NGM0I4MDM0NjdFQUUxRDdBQzg3MzREQzRGOTAzCis6MTA2NDQwMDAwQ0VDQjdEM0QxRUZEQzMxQzhFQzIyRkIyMUQ0NTdBNjNBCis6MTA2NDUwMDA2M0IwQUY0NEM3MDM4MzNFMUI4Q0U3MUI5QjQwMEU3MUE4Cis6MTA2NDYwMDA3RTc1MEUxQzlDQzBDRTIzMUYzREU5Rjk5RUU4QjkyODFECis6MTA2NDcwMDBEOEI3OTdGNDM0MzMzQzM3MDI3QTZFQzdGQjJGQkRBNUVCCis6MTA2NDgwMDA2NzRGN0FCMjI3RkQ3ODYyMzNBN0IzNTNEOEE3QjFFODM0Cis6MTA2NDkwMDBEQzNFMDlFNjVEMTQzOUJFNDc1NTY1Mzk2NjAzRjk3OTc2Cis6MTA2NEEwMDA4NzQ2N0ZEQzk3NDZEMEZGNTJCQjlCRUEzRkI3RUZBREY0Cis6MTA2NEIwMDAwMUFERDA0RjY3RTM4NTA5OEM5RkU3OTA1REQ3RjFBNENDCis6MTA2NEMwMDBCMERCREQ5OTMyMUY1QkZCMTI1QzBEQ0U3MzRGQkUzRTFECis6MTA2NEQwMDAwMEY3QzlCNzYxMDZFNkQ5OTNGMTQ1QkY1MjUzQkFFMDU4Cis6MTA2NEUwMDBGNUY2MUMzRUQ2Qjg3NjdGQ0JGOUQ5OUVBQUNEQ0Y5NkNECis6MTA2NEYwMDAwMTI4NEY5RjA5M0QxMDczN0MzREM5Mjk4RTBGRTA1QzM4Cis6MTA2NTAwMDBBNUYwRjE2RDMwMTZGRDBFRjU0Qzc4N0NBMzUzN0EzNTZECis6MTA2NTEwMDBCRUFBMDQzMzUzNDYwMDdFMEVCMzk5MjUzMEI2NDNGNTI4Cis6MTA2NTIwMDAxRDU0NjkxRkU3NjkwREEwOUY2MjVGQkM2NzNEQjBBNDYxCis6MTA2NTMwMDBDQTc5RTZFNTkwMUJEQkM5RkU4QzE1RjUzNjk3NkMzRkYyCis6MTA2NTQwMDAyNUJBNjRGQjI5QzMxNTY5M0Y3NTFFN0FDOEU5MDNGQ0E3Cis6MTA2NTUwMDA1NkE1MUI1QzI3NDdFMTNBRTcxNUVCMUM1RjU3MzVGQzU2Cis6MTA2NTYwMDAyQTFBQjI1Qzc2MDk4RTlDRUZBQzU1MEExQjQ4OUVEQzU5Cis6MTA2NTcwMDAwOUIzQTM5Qzk3NjlFOUFBNzRCM0VCMjRBQzU3NjdFQTAzCis6MTA2NTgwMDA3MzEyQjBERjMzN0VBQjhCQUZBRjJFMTdFRjM3REQxNTU1Cis6MTA2NTkwMDBCOUJFQUU1QzEzNDdGNTM1RkM2MkMxRkQ2N0UzQzc1ODcxCis6MTA2NUEwMDAyMzdCRDc4QUVCMjI5NEU1QzRBRTFGOTM5RkVBMjc2NjJDCis6MTA2NUIwMDAzQTk3NkUzNjdEODZGNkJCMkQ1N0IzREY1NUNBNkI3MEEyCis6MTA2NUMwMDBBQjFBOEMwMUNCMDhGQ0JFNEJFQTBGREFCOUI1MzM2NkM3Cis6MTA2NUQwMDA2QzE3NUI2RTU0NzY0QUUzMjdGMERGOEEwN0VGQjQ2RkRGCis6MTA2NUUwMDBCNTEyOUY3RDAwMzEwMUUwQjVBQkY2MUE5NEFCMTMyQUNBCis6MTA2NUYwMDA5RkNGNTU0MjRFMkJBQ0FENjY5RjlCQzhERDgyRjJCQzRGCis6MTA2NjAwMDA2ODJDRDMyNkNDRENCNzQwNEY3RkYwQTI4OUVFNjlCMTZECis6MTA2NjEwMDBBRjAwN0E3RUQ3NTU4MTI1QUNDODg5NEVDRjQ1OEQyQkVBCis6MTA2NjIwMDA2NkUwQkFGRDgxNDFEQjBGRDdFNkUzQjhDRjMxNDMyMTA1Cis6MTA2NjMwMDBFQUE1NzNFQzhGQ0U1MTExRjM3NTg4ODlGQjYzNTgwRDcxCis6MTA2NjQwMDBERkU3MDRFMDFGOEU2RjY5QURCQ0VGNTk1NjI3RTc0QkJCCis6MTA2NjUwMDBEOUFDNTRENEI3QTU1QjRDMkMwOEI4MkZDNzdEOTMzNjYyCis6MTA2NjYwMDA2RUQwQkYxOTI2RUVENzU4QzZBQTM3RTAzRUZENUUxMzlFCis6MTA2NjcwMDBGN0Y3MkM3MjMxMzUxM0YwQUFGODhGNUZFNkEzREZDNzY2Cis6MTA2NjgwMDA2M0UyNzY4Nzc2OUVCQzNDODlFMzVEM0UzQjY4RjY0MkRBCis6MTA2NjkwMDBGRDc3MUI0N0NEMDE4RDBCRUQ4MzFCQzhGRTI5NjY5RTQwCis6MTA2NkEwMDA5REFDM0JERDE3RDdDOEY4RjU4NEJGMUU1RkNEMEVFQTYxCis6MTA2NkIwMDA3NkFFMkRGMDQ4QUU1N0JDQzEyODdBRUUzMjkzMjJGNjYyCis6MTA2NkMwMDA3RjdDN0VDQzM2QzlGRTlDNzkyNkQ5RUZBM0M5ODE0OTRGCis6MTA2NkQwMDBDOEMxMDlENTc3QjU2OTBDRTczQkYyNTE1MTNCQ0NCRTM3Cis6MTA2NkUwMDA4ODdBRTZBRTdBQjNDRjU3Q0Y4MkY1OEM1NDZGOUUyOTY1Cis6MTA2NkYwMDAwNUVCNzU0Q0EzRkQzMTAzNzkxQURBNTVDRkQ2MDVFRkJBCis6MTA2NzAwMDA0NjBFNEZBRTU3RjExRjhGM0QxNTAwNzkyOUZGRUQzRDI1Cis6MTA2NzEwMDA0RTA2RUJFNjA3NkE2REFBMDdCRUFGREM3OTlCRDMwQjhBCis6MTA2NzIwMDBFOTY5MzVFMDQ0N0U3RTEwMzQxNjQ2QTNDNzk2MzAzREI1Cis6MTA2NzMwMDBCQzc2MDVGRDY5NDIzRTU5NEQ4MEZDMTQ5RkVEMzRCOThECis6MTA2NzQwMDBDOENGNUY2RjA5NTk0MDRFMkIxQjk3Q0Y2MEMzMjk3RjdECis6MTA2NzUwMDA5Q0U3Mzc3RTY0QzQ3QzkzQ0NBRkYyNUZERjkzRUFFNkJDCis6MTA2NzYwMDBGNzZDQjgzRjg5ODVDOENFQUREQ0YxREUzNDVDMkZBQTZBCis6MTA2NzcwMDA1ODA3Qzk5OUJFMURGNkZGNzkxMkNERUI4NUU2ODRFRTY4Cis6MTA2NzgwMDBFNTgwMjdGOTEzQUFDNDJDQUI2QUZDRjk0NzQ2MjdFNjMzCis6MTA2NzkwMDA2NUY5MjgxM0Y2MkFEMjA5RjdGOUI3OTkxQ0M5QTdFMkI3Cis6MTA2N0EwMDAyMTdCMDlCQjA0RTdCOTQ2MEYxNkU0NzZFQkZBNDdFRTA2Cis6MTA2N0IwMDAxQjdFMUNGMDM5QkJFMzQ1QTczMjM0NTIzRjcwMzlFQkU2Cis6MTA2N0MwMDA2QzU4RkMyQkFCMjFCNjFFNjkwMzM5OENCNDhGMDAzMDlBCis6MTA2N0QwMDBCNTczMzcwOTdCQkI5OUE3MkI0RDIxMjdERTY3NTlCOUM0Cis6MTA2N0UwMDBDREU0MDEwOTY0MkIxRjMzMzJCQzA3QzBERUIwMDREMUY1Cis6MTA2N0YwMDAyRkJBRTJCMUU3NUYxQjBGNzQ1RkIxREI5NDNDODMwRkVDCis6MTA2ODAwMDBDN0FFQTQ3NkYxQTUwQUZFQjcyNkFGOEIwRkU1NEYzQ0M1Cis6MTA2ODEwMDA2Rjc2MEZFM0RGNkY0OUVBRTJDNzhBRERGQkNENkM1ODg0Cis6MTA2ODIwMDA3N0ZBNEQ2RUQ4NkY2RUI1NDdFMTRCQzNGMTY5QjhDRUJDCis6MTA2ODMwMDBBRTdGRTRBRjY2RjQyNzdFQjA0RjYxNjk1OUREREI5NzI4Cis6MTA2ODQwMDA2RDdCOUVENjNCQTQxM0YxNTFGMDI5Q0NCNzZFRkMwQUE4Cis6MTA2ODUwMDBDRDdDNjYzNEQ1NzNBMTFFOENDNUFGNjU0MkVGODIzQ0ZBCis6MTA2ODYwMDAzRkZFMENERUZGNzlEM0UyQzFGMTk3M0Q3RTkzMTNDNzYzCis6MTA2ODcwMDBGMUJFNUFDREU1RkE5N0I3QTVFMkZDMkUzMzA1NTI1RDdECis6MTA2ODgwMDA5NEYyRUY2NTBGRkU4OEU0NkREOTkxMUZBNTkyQkRDMDBCCis6MTA2ODkwMDBCQzE5MDZEMkM1ODEwQzFDREZEMkFERDdEMkY4NEE5OUZCCis6MTA2OEEwMDA4RkU0QUVFQzk3QzYyMkJDOEZGOEE5Q0EwQTc3NDc5OTQ1Cis6MTA2OEIwMDAxNzcxNjY4NUYwNzk3RjNCMTgzMjMwQkVGNzcxN0Y4OTlBCis6MTA2OEMwMDBGQUVDOEY0NkJBMTdDNUQ4MEZFOURFRDg4RkM0NTg2MUU1Cis6MTA2OEQwMDBFNUEzRkNBNzU2Q0VBN0UzNDI0RkUyNDQ5NkU0NzVDNzcyCis6MTA2OEUwMDBDNjE2RTRDRjk5RkVERTM0M0NFNzAwM0EwNDA0QkQ5NEJBCis6MTA2OEYwMDA2RjAwQUVGMUM4RDQzNENFMUZFNjU2RjM0NTNCRDBFRjVGCis6MTA2OTAwMDA5M0YxM0JENjZGMzE3OTZEQzNBNTc2NDIxRkYyRkU1N0U2Cis6MTA2OTEwMDA4QkZFMDFFRjM4NUNBRkRFNEY4RDZFRUY4RDExRTM4M0EwCis6MTA2OTIwMDBCRjE2MTYyMTVGMTFGMzlCQ0ZGNzFEOUJGOEZDRDZFNjJGCis6MTA2OTMwMDA3QkIwQjgxMENCM0Y3OTk1Q0YxRjZDODdFQjAzRTAxNTg4Cis6MTA2OTQwMDA0QUEzRjJGREIzMTVEMjA3QjBBRjhFMzZBRjc3OThDNDI1Cis6MTA2OTUwMDBCQzk2Q0JDMTUyQTRGNTFFRjA1Njk1ODQ0ODM5MDFGODc3Cis6MTA2OTYwMDA0OTQ0N0ZEQTA3OTc2RTgxNzYxMUY2NTcxNUY2NDdGNTk5Cis6MTA2OTcwMDBDQzVEREYyM0Q2ODc2NTQyMEY5OENDMzBGRjJGRUU5QThGCis6MTA2OTgwMDBGRjZDMkI5RkY3M0REOTkzMkI0REMxODcxRkMwRjlGQUEwCis6MTA2OTkwMDA4NkM1MTM3MEUzN0MzNTE1RTFCODNGREM3NUUwQjVFQkQ3Cis6MTA2OUEwMDA0MEFFM0Y2Q0QwRTZBOUFDM0ZGNUYzQjQ2Q0NGMTgxNkZGCis6MTA2OUIwMDA2RDlFN0U2ODg3RkQ1NUI0NzkwQURGQTNDRTUzN0IyQjhECis6MTA2OUMwMDBDOUYxRjdBRDNGMzVCQTBEMzVDQjdBMTNGNUUwMzNFRUFCCis6MTA2OUQwMDBEOEY0RDNFQkMxREY5QkRDNDQ0N0JEMUU4NEJGNTc1OUJECis6MTA2OUUwMDA3RTc3QjlEM0U0NEQ5M0IzRjJERjU0NUM4MEZBMjYyQzYyCis6MTA2OUYwMDA4RjlBQkM4NUU1NTE5MzM3RkQzODY1QkFFOUNCRkYyQUZDCis6MTA2QTAwMDBGNENERjVENkMyNkJEMDJFQjY3NjMwREFBRjE0Q0MzNkQ0Cis6MTA2QTEwMDAwNjcxOUY2Q0ZEODREMTdDOUY3NDQzM0NFNUU3MUE1QjUzCis6MTA2QTIwMDA5RjQwOUJFRkFEOEFCOUMzNzAxREJGOUUwNTRDRkNEQzM3Cis6MTA2QTMwMDBCQ0Q2NDQ3NkVBNTdERjdDMzMxMUM2NzM5REEwRUJGNUQ0Cis6MTA2QTQwMDA0MEU2QUI4MDBGMjVBQTEyOEEwMzNDRTdBOTJDOTA5MDYwCis6MTA2QTUwMDA4NEZFNjI4NTlEODhDMEUzRkEzMjM5OEY3Rjk3QTU3NkUwCis6MTA2QTYwMDBDMUU5QTlGRUI3QjVBQkJGNkI3QUM0Q0ZDRkFFRkU4NDg4Cis6MTA2QTcwMDAyOUVEMkZDMDcwOEU5MEEzRTI2NjdFNEU1MTM1NUEwOUUzCis6MTA2QTgwMDA2NkQzRkM2QjU1OEIyMkY2MDk4Rjk5Qjk5RDcxNjRDQTQ4Cis6MTA2QTkwMDAzNTYzOTA3RTA1NzM4NzI1OTA3Q0Q3MEVBMTdENjA5NTI4Cis6MTA2QUEwMDBEMDVCOUQwMTc3MDJFQUYzQ0VFNjFDREFGNzc1MUU1QTM5Cis6MTA2QUIwMDBFQ0YwNDVEMTVGMDc4NDlDM0QyRkNFNTlEQUVENEFBRDBECis6MTA2QUMwMDAxMUU0QkQ5RDc1OTBERDEyQjBEQkEyRkFEREVBQ0MwNkMzCis6MTA2QUQwMDA2MUVGMDhCRUMxOUYxMUZBMkYxMTcyMzgwRjlBMjZFNDk4Cis6MTA2QUUwMDA0NUYwNkRGNjU1MUZBOENFRUU3Q0MwQkYxMzExRkI4Njk2Cis6MTA2QUYwMDA3Rjk0QkUyOEQ3NDhERjAzQjZENjY5NDU1MUZDMzM4RjUzCis6MTA2QjAwMDAwQTdEN0REOUIzNUY5ODcxOUQ5QkQyNUNBMDIyMURBN0ExCis6MTA2QjEwMDBEODhEOTJCRjYzQkIzNjVGODdCMkExODhENzY1Q0YyRTcxCis6MTA2QjIwMDBCRjYzMENDODcxRDUyMUEzQzcwNkUzQUI2QUZFQzhFQ0VFCis6MTA2QjMwMDA4QkIyN0ZEM0QzMTNFMUEzRkREODZBRTZGNkYxNTE1M0FDCis6MTA2QjQwMDBEMTUyQTRFQkQxNkJGOTc5RUU5RkNDOUU4QTY4NzhDRUI2Cis6MTA2QjUwMDBCNjcyM0NFN0IxQTI0RjQ3MkJGRjdBRjQyRDk4RUIwOEIxCis6MTA2QjYwMDA0RDAyN0E3NERBRjlGREU0RUVGMkM3RTc3REE3NEIwOTJFCis6MTA2QjcwMDBBRTU1NTAwRThEM0M5RkNDRUZGRjRFNjNCRTNCMjYyQTk4Cis6MTA2QjgwMDAzNERGMkY4RkQ0NUYwNTREQzU4RkUxN0Q5NkNBNjZDNTcyCis6MTA2QjkwMDA2NTgwRjI0QUI1RDU4QzcyNUNENUI0NUI0NUJCRkMwNzA5Cis6MTA2QkEwMDA2RUZFQ0U4MkE5RDVDMzY2NDdGOEI3NUFDRERDOUY3NDc2Cis6MTA2QkIwMDBFMDZGRDdDRDQ3RkE3RTNDREJDMjEwMkZFRkQwOEY5QzIxCis6MTA2QkMwMDBCOERFN0ZEQzNDOEFFNjQxQUM3MUZEQzFFRkI5NjYwQUY0Cis6MTA2QkQwMDBGQUUzQ0Q1QzlGRTlFNTYxNUE3MkJDOTRCRjc2MzJFQjczCis6MTA2QkUwMDA4N0U3QkM5NzU5NUE2RkYyNDRFMURGM0EwQjlGQTdCRDg0Cis6MTA2QkYwMDBENjZGRDZGRjYxRkE2RDIyRTgzNzJFRDdBNjQ4RkQzNjRDCis6MTA2QzAwMDBEREMyRTUzRTQyQkZBNTQ1RDM2RkFCRDZCQUQzNTAyRTA5Cis6MTA2QzEwMDA1NkVEQ0Q0OTQzQkVBRTNBQkMzNDI1OUE3RTdCNDFFQzVECis6MTA2QzIwMDA2QjBGOEI3QkQyRURGRDQwQkY4RDg4RDA2RkZENDBCRkQ5Cis6MTA2QzMwMDA0NUYxODM4RkI2Njg3NjY3MEZGQUNERkFERjMzRkY1RUQyCis6MTA2QzQwMDA0MEZEMTY2NUJDNTcwOEI5RDNGNDVCNjFGMzVBRDI2RkE3Cis6MTA2QzUwMDA4NUZEOENEMjdEQTRDQjJDQzI4RThCQTlERjE2REU3MzcyCis6MTA2QzYwMDAyREU1NEQ5RUY4MjhGMjgzNzQ0NUZENzY1OEU4MzlFQzAxCis6MTA2QzcwMDAwN0Y1RENDRjJDREY0RUNGQ0RCMzcyN0M3QkQ0NzNGRjE2Cis6MTA2QzgwMDA0RDc0RDZGNERDQUFGRTBBRDkyRkRERTU5MEVCQjk1NTk4Cis6MTA2QzkwMDA1OTVDQ0ZBRERBQ0JGNURDQUE0MTVDQ0ZFOUY1REJBNERBCis6MTA2Q0EwMDA2RUZBOERCN0FGQ0M4NUY2QjQ0RkNDQkFFRjA2QkNDRjM5Cis6MTA2Q0IwMDA1NzYyRjI1OEExRkUwQ0I3RjZCRUEwN0E0Q0E0QkVGQkY4Cis6MTA2Q0MwMDA5OTI1ODZCRUYzODBCRUIzRjdBQ0VGNUU0MTdEQTc5MkY3Cis6MTA2Q0QwMDAxRTFCODhGMzQ4MkYxRkQzMDdDNjRCRjdENThFN0U3MTM2Cis6MTA2Q0UwMDBFQTM3QkZDNUY5RjIwNzIzREQwNzdBRERDMEY3NDNGQkJBCis6MTA2Q0YwMDBCRTM4MzUwQUU3RERDQjg4MEZDQzk3OUQ0MkZFREFGQzIzCis6MTA2RDAwMDA2MzQ5OUY0RTFFQ0FFNzdCQzVBMTM4NUEyNzJBMUIxNTI3Cis6MTA2RDEwMDAzRURFNUI5NEEwMUJENzgxQkY3RDRFRkJFNEY5N0JGOTdGCis6MTA2RDIwMDAzRTc5QUU4NUQzODNGREQ4QzhERjQ1MDAwOTE2NDZDODM1Cis6MTA2RDMwMDA0M0M5RTdFNUU0RTcyQjUxOTkxNUVERDcwNTg3QTY3RjExCis6MTA2RDQwMDA4MDc2RUI4MkNGNkJDOERFNUQ4MERGRjE3RUM1RUVENjRDCis6MTA2RDUwMDAwRDk5RDBFRkZDRTUwQUVEMzc5OEI4MEZBMUREOTdCODkzCis6MTA2RDYwMDBCRTc5M0ZERDVGRDFERjgzRDBGNEY5RkM2QUY5RkIwMjI1Cis6MTA2RDcwMDA5RDVEN0Y0MDhDMTNFQzU5QTIwQjdCQzUxOEQ1M0Y3N0U2Cis6MTA2RDgwMDA0MDRGMEYwRjFGN0ZDNTZBNkUxRjg3RTkwMUY0NzEyQkZCCis6MTA2RDkwMDBEREU5MDExQzlEQjEzMEI1NkJGQ0YzOUY4NDcxMjU3NzUzCis6MTA2REEwMDA4RDRCQTM4NzdFN0NEQUZFNjQ4MTk4MUJCMUM2QUJEMTg0Cis6MTA2REIwMDBBRkRCNzgzNTdBRUFDNkZEQkM0NUQ4NDUxN0IzNjEzOEY0Cis6MTA2REMwMDBDRjVFMzdGOEVFMTg4MzcyRjE3QjE4M0ZFMDMzNjdERTUxCis6MTA2REQwMDBBMEI0NDgzREZDQTJEMEU3NTdGOThFNEY0OTc1MjNCREJBCis6MTA2REUwMDBGOEZCQkJFQkNBNzYzRjlGMEFFM0I4REE5Qjk1ODc1NzVGCis6MTA2REYwMDAxMUFFRkQ5QkQ5ODc3RTg0MDNCNjBFRDI2QjlBNUM1RDgzCis6MTA2RTAwMDA2OEU1NzJGRTc3MDFFNzY4NUZENzE0NUEzRjlBMTQxNzU2Cis6MTA2RTEwMDBDRDk3OTA0RTZGODk3QjYxNTU0MDRGOUM4RjU1NEQ2MjQ5Cis6MTA2RTIwMDBCRDAxNzlDM0Y5MzY0RDVCN0Y5MEZFRjA5RjU3MzU3M0Y2Cis6MTA2RTMwMDBGQTU3NTUyQjQ0RkY5OUFDRTMyMEQyQjczMjU5RjE4NDZECis6MTA2RTQwMDAwMEQ0QjRBNkREQjdFMTNEQUExNzZDRjAxREU3NkQ5OTNCCis6MTA2RTUwMDBFMkQ5Q0VDOTYxQ0Y0ODhEMkE5NzZBMzRCOTY0RDU0MzQ3Cis6MTA2RTYwMDBDOEFGQTBBRDgzMEJCMDVFMTJCRTE3NzkzRDA1RUQxMzIwCis6MTA2RTcwMDBCREJENzE5OUE1RTUyOEUyNzFEOThGNEQ2QzFCRUI2RUY0Cis6MTA2RTgwMDA3RjY4RkNDRTg1N0ZERjQ0QkJDRkQzODNGQzBFMTJGNjM4Cis6MTA2RTkwMDBFNTBCNDg2RjNCRDJCNUMzOEM3MjVGMTVFMkVCODY1NkFCCis6MTA2RUEwMDA1RUE1QkFBNzEwN0QzNDdBMzdDMUJBMzA5QUQzMUJERkZBCis6MTA2RUIwMDA3REU5RTk3OUI1OTY0Nzc5QzZGQUNEOEEwOURCNUYwOTlDCis6MTA2RUMwMDA3Q0U4MDM0NTkzMEQ1RjFDRDRFNDE3REY4OUU5RTk4MjcwCis6MTA2RUQwMDBGQkZGOEM4OEY5OEU3QTI5RjJEQ0IxQjJFOTA4RDE2NTIyCis6MTA2RUUwMDBGQTZBMzBBQjIyRTg4RUZBRUE3Q0Y0RTkzNjFGOUFGNkE5Cis6MTA2RUYwMDA0N0JEMDdGNTZERTdDMzg1NTY3OTNFRUNCMzc1QkMzOEUxCis6MTA2RjAwMDAwMkZENUI3QjE1RDIwN0FDMzk1MURBREY1RjYxRTVGQjJGCis6MTA2RjEwMDBBNjAzMzYxRkM5NkRDNzYxMTNEREY3RDZFQjhEQjE4MkFECis6MTA2RjIwMDBGRUI4OUY4ODdDMDczNzE5MDc4MkU3QkIyRTFCN0I1NzZCCis6MTA2RjMwMDBDMzIzOUJDQjRGQTRCRTdFQzFFNjIzM0VDNTgyM0Y0REZCCis6MTA2RjQwMDBDMDhGNjUyRjg1RjFDNUZFRjAzQ0M1MkRGN0E3NUYyRkRCCis6MTA2RjUwMDAzNDNGNEY0RkUzQkE0NkFDRjdERjc1NUNFMUYzNDlENkY3Cis6MTA2RjYwMDA2MjY2REM5RkJGREIxQzcxQ0UzNDQ3RjhGOTM1M0Y1OEIxCis6MTA2RjcwMDA0NEJEOTk5NjMxQjFFQkExQkYyNTA0RTM3RTYxRDc0M0FGCis6MTA2RjgwMDBFNEQ3M0RGN0U4RjE5OTI4QjcyQjdFNjc2NDU2RTA3M0E0Cis6MTA2RjkwMDBEQjJFMDcwQkYxN0IxNDY2NUM1N0NCMUI4RDUxQ0Y0NTY1Cis6MTA2RkEwMDAxODVCNEZGOEFERjhBRDgzRjQ0QUY5MUU0QjcwMDZCNDg4Cis6MTA2RkIwMDAyRjdGRUFEREUxRTg5RjZBNUJDN0Y1NEJFMDUxMjExRkI3Cis6MTA2RkMwMDA4MUQ2RTE3ODVFNUVBRUYyRjM2MjNEQkMxRjBCNzkzOThCCis6MTA2RkQwMDBGQjc0N0MwOUVBNDdBNTlFQkZFQjJDNkY5ODZCQjI0NDBCCis6MTA2RkUwMDBFQ0NCMkJGMUMwOEREN0EzN0JDODgxNDcxNEYyODM3N0ZDCis6MTA2RkYwMDBDNzZGMkRBRkY3MDhENzdCRTU0REE2MjBCRTBGMkRBRjhECis6MTA3MDAwMDBERjQ2RkJEOUFBRkE4RkNDNjhDNzRERkVFRDYzNjQ0NzEzCis6MTA3MDEwMDA1NDM1MTk2NTNGNjFCRDMxNjQyMTNGQTZGMTM4QTY3QTI4Cis6MTA3MDIwMDA3RjVENjU2MzA1Q0RDN0NBMDZFMTBGRDNGOThCNTZGQ0JBCis6MTA3MDMwMDA3NkVGNTMwMTIwQ0Q4QTI3N0VFRDQ0M0Q3M0E2NjVBN0U4Cis6MTA3MDQwMDA5M0ZDNzBGNURDQ0ZBNkRBRDVFODdFQjg5RUZDNkYwRDE4Cis6MTA3MDUwMDA5QkEyRkFERkNFRTA3RkMwRkNEQjZBOTVGRDZGQUNCRTgxCis6MTA3MDYwMDA0RkFGQ0VDMTU3M0NGNkU5ODM3ODJFNzQ3NkNGODcwRkE5Cis6MTA3MDcwMDAyMkRFMkJCRkZFRjhDMTlGQTI3REIyQ0ZFNkMyRjVBRUU1Cis6MTA3MDgwMDBFQUQxQTNFNDU3RDdEQTNEMjVFNjU1REIyM0JGN0VGOEU2Cis6MTA3MDkwMDAwMTk4N0Y2RDZGNThFOEZFNTVEQkRFRjcwN0I4NjE5Q0ZECis6MTA3MEEwMDA2REJCQkY0ODQ1RkZFNUVBQkQ1MzY5REZCMkZBQzlDOTA4Cis6MTA3MEIwMDA2OUU3QkI0NzgyNzIxOUVDQzU3OTg4OUUwRjA3MUE4RDY0Cis6MTA3MEMwMDAwQ0RGNDE5RTNCNjYyMTNCMjNFQzQ3NkRBOEUwN0U2OUM3Cis6MTA3MEQwMDBCN0YwOUZFRThBN0VFRUE0RjlGRDJBMUJBRkI5RkE1MkYzCis6MTA3MEUwMDA1Q0Y3MUE0RDFFMzc3RDE3N0VDMDlFRkNBNkFGMDIzRjhGCis6MTA3MEYwMDA0N0Y0ODI2RkJCODQ1RjVDQzdCNzczRjgxRkMwOUYzRkM0Cis6MTA3MTAwMDA1OTY1N0ZGM0E3OEQ0QjdGRjUwMDk2MzVGNjg5RTkzN0YyCis6MTA3MTEwMDAwREY1ODI1RURBQjlENjM2QUJGNzFEMkJDRTg3M0RCRkIzCis6MTA3MTIwMDAyMUZGMzRGMjBCNkM2RUQ2RjZEOEE3MDNEMERGNzBEQUVECis6MTA3MTMwMDBENDcxMjNEREJGRDg2QkExN0I0MkU1N0I1RkE3RjlEMTdBCis6MTA3MTQwMDBGNkU0MTEzQTJGNjJFMjVDQTk4RDg1RkZGODM5ODBEODA4Cis6MTA3MTUwMDBDQjU0RUQ3MDcwN0ZBQkEwM0JGQTYzREQ0RUZBMkVGQzkyCis6MTA3MTYwMDBBRTVDNkUzNTdGNkMyQzNGNkMxRjlCQjgwNzJFQ0VEOTYyCis6MTA3MTcwMDAyQTc2QkM2NTY2M0FCRkI2MzIxNkY5NzQ1QzNBMTdENDAzCis6MTA3MTgwMDBDNkFEODdFNzQyM0E1QzEyNzk5RTEwQ0JDRjJERjQ2OEVBCis6MTA3MTkwMDA5ODRGRkMxQ0ExNkQ5QjM4NUYwODlGMUIzMEQ2MkYwRkFBCis6MTA3MUEwMDBFRkJGRjNGM0VFQUFBMEYyM0E4QjMyMUZCNUYzMDRBN0I4Cis6MTA3MUIwMDA0RDM3MUY4M0JEM0I0N0U4MTlERkVGNDYwRkM1QzZGN0M0Cis6MTA3MUMwMDBBRDFBNURDRTdFMTU1RDFGMEZCMTI5RTJGRDgxMkZENzZGCis6MTA3MUQwMDAxNkIxRUUyQzEwRUI0OTI1RDA4QkJGMjdFM0Y4OUUxNTk2Cis6MTA3MUUwMDBGQkJCQjM4RjFBODNCODBGREVEMDcwODBGNEFBN0U1RTJCCis6MTA3MUYwMDA1N0IyRThGMTQzQzZEQkI4M0VBOTZDREEzRjFDRjVDRkM1Cis6MTA3MjAwMDBEOTY3OUYyNkI5QUJEQzc1REMxQzAwMzgwN0VCOUYzMEQzCis6MTA3MjEwMDBCNzBFRUQ5MjczRDREN0MxMDg3RDdERjZGMUZEQzNGOUE5Cis6MTA3MjIwMDAzOTA3REY0N0VBRTE1RjIxRTA1NzM1Q0JGMEFCNzY3REU4Cis6MTA3MjMwMDAyNEMxNUYxMTY4MzBCQkVDM0RGNzczNDZGNUNFQzVGMTU0Cis6MTA3MjQwMDA5RTY5MzE1MTVDOTQzMzBEQzZDMjY4RjE0QTg2NjIyMDUyCis6MTA3MjUwMDBBOTk0MkUzQTZENzBGMEY3NzFDNjI0MzNEOTkxQUIxRDA1Cis6MTA3MjYwMDA2MzhGMjUyNDYzNkE3NkUzM0U3QUZENUE3RTFGNzJGREEyCis6MTA3MjcwMDBDRjNDRTlDODk3RjU4OTczRTgxQ0E4NTY0NzQ3NTdCMjMxCis6MTA3MjgwMDBBQjAwRjdEN0FFMjk0NUEzNTFBQ0Y0N0EyMEQxNkI5MDZGCis6MTA3MjkwMDBGMDVFRUQyODRDQzNGN0RDQjcwQTdCODRBOTFFN0FCRkU5Cis6MTA3MkEwMDA2Nzc0NEUyQkM0NzExODVEMDY5NzJERUEzQUNBRTE5OUFFCis6MTA3MkIwMDBFQzQ1MTQyRkMyRTQ5MkRGRDM3REVGRjExRkRDRkRFNDM3Cis6MTA3MkMwMDBGODBGODE3RUZGNjhGQzA3NDY3MTMwRkVERkM3N0YwODNDCis6MTA3MkQwMDA2MDNGRkYwMkYxMUY0MkU0QjdEMUUyM0YyNDdGQ0ZGMUNDCis6MTA3MkUwMDAxRkQ2MzIzOUZFODNFMDY3MzhGRTgzRTBFN0ZGQzY3RkIyCis6MTA3MkYwMDBGOEZGMkJGRTgzMzFFRUVGNTMzMDNFODMxNkZGMjEyNTNFCis6MTA3MzAwMDBDRTNDMzUzMkZFQzM4NTcxMDk1MzIzRTMzRjhDOEI0QjUyCis6MTA3MzEwMDA5RjFBMTlGRkUxMDc3MTU5NTMyM0UzM0ZDQzhGQkI2OEQ0Cis6MTA3MzIwMDA2QTY0RkM4N0FBQjg1MTUzMjNFMzNGQUM4RDlCNDg3OTJDCis6MTA3MzMwMDAyREZFQzNERDcxNTNBN0NBRjExRjY2NEU5RDAyRjlCNjNCCis6MTA3MzQwMDAzOERGREY3MUJEOEExNUZGRTEzRDlDMkM2MzdBOEVGRjJCCis6MTA3MzUwMDAwMDcwQ0M3MTYzNjJDNzdGRDBDMzg5MTVGRjAxRTAyNDQwCis6MTA3MzYwMDAxMDlDMThGMTFGQkFFMTEzMjNGRTAzQzA0OTI3MzgzMURFCis6MTA3MzcwMDBFMjNGNzRDMzI3NDZGQzA3ODA5MzQ1NzA2MkM0N0ZEMDA4Cis6MTA3MzgwMDBDMzg5MTVGRjAxRTA1QzE0OTcxMjNCRkU4MzFFNEVBQ0NGCis6MTA3MzkwMDBGODBGMDA2NzE0RTExMzIzRkU0MzM3N0M2MkM0N0YwMEJCCis6MTA3M0EwMDAzODEzMDk0RThDRjgwRkRERjA4OTExRkYwMUUwNENBNTcwCis6MTA3M0IwMDA3MUM1ODhGRkEwODcxMzJCRkUwM0MwOTk0OUY4QzQ4OEM0Cis6MTA3M0MwMDBGRkEwODcxMzJCRkUwM0MwOTk0QkY4QzQ4OEZGRDAwRDk0Cis6MTA3M0QwMDA5RjE4RjExRjAwOEU4RkYwODkxMUZGQTExQjNFMzFFMjMzCis6MTA3M0UwMDAzRjAwOUNFNTA0Mjc0NkZDMDczRDlDNThGMTFGMDBDRTVBCis6MTA3M0YwMDAyQTgyMTMyM0ZFODMxRTRFQUNGODBGMDBFN0E3MDQyNzUyCis6MTA3NDAwMDA0NkZDODc2RUY4QzQ4OEZGMDA3MDZFMjUzODMxRTIzRjc1Cis6MTA3NDEwMDA3NEMzMjc0NkZDMDc4MDczMDdDMTg5MTFGRjQxMEYyN0ZBCis6MTA3NDIwMDA1NkZDMDc4MDczMkZDMTg5MTFGRjQxMEYyNzU2RkMwN0I3Cis6MTA3NDMwMDA4MEYzMkI4MjEzMjNGRTQzMzc3QzYyQzQ3RjAwMzhGNTMwCis6MTA3NDQwMDAyNDg3MzFFMjNGNzRDM0U3QkJDNjdGQjA4NTA2MkEzOTgzCis6MTA3NDUwMDAxNEZGODFFMjQ0ODZFMzNGMjQ3RkVCRjgwRkNEODhFRkYxCis6MTA3NDYwMDBGRkM2N0ZGODlGMTlGRkUxNjZCQkVGRUIzOEYyODM3RTIyCis6MTA3NDcwMDBCN0Y4MEZCNkY4NkYxN0ZGRTE2NjdCNTE3QzNDRUUyRjMzCis6MTA3NDgwMDBCRjY1RkM4N0Q0Rjg2RjE3RkYwMUZBNDk4RjFGMTNCQjQ0Cis6MTA3NDkwMDA5RjU4RjExRjcyNzRGREY0MTRGRjAxRkExOTc0REVGMUE0Cis6MTA3NEEwMDBDNDg4RkZFMEQxRDFFREZCOEFGRkYwNDVEQ0Y5RTMzRjcyCis6MTA3NEIwMDBGQ0NCQzU1OTgwNkQwQTlFRkYxNDkzMjhCMjdGOTlCODAyCis6MTA3NEMwMDAwQkQ3QzZGRjkzRTMyRTkwQjFGMEFGMTQ3NzQxN0JCRjhCCis6MTA3NEQwMDBERjYwQzJGNUVBNERDMUY3RDc4NDVDQkMyNUUyMkYxQzAyCis6MTA3NEUwMDA4QjE5N0YyMTc4MTVGOTQ1OTdDQkYxMTdBNjBCM0VDRTY2Cis6MTA3NEYwMDBGM0M5RjIzMDlERjFGMzg2RTk1M0IyNzhCQ0NDMzI1RDJBCis6MTA3NTAwMDBGQzg1NUNGOUZDN0E4NkVGQzgxNDAwQzdBRUYyQzhFM0NDCis6MTA3NTEwMDAzODIyRTQ2MTY2Qzk0N0NGMjE3QkFFMUUxQjNERkVDMjA3Cis6MTA3NTIwMDAyQ0MxOEY2MjFENURBNjBCQkUxNThCRjQ3QTdDOTIwMjc2Cis6MTA3NTMwMDBGMjNDQTNFQzg4OEE3NDlERTk2RTU1QzlBRkZEMDM4REJBCis6MTA3NTQwMDA3RjZFODk3RkIzMDU1QzNEQkVCMzA0RkY2NjVEQzlGOUZDCis6MTA3NTUwMDBBN0M3RkI1NUU0OUYxM0QyQjI1MUM0M0YzRERFN0EzQzJFCis6MTA3NTYwMDBGNUZDNjc5MUZDOEU4ODlCNTFDMEU0QjgwQjkzQUQ3MjFCCis6MTA3NTcwMDBEQzg1QTkyRTM5RUVDMjE1RTk3MkRDODUyQkRENzJEQ0MzCis6MTA3NTgwMDA4NTFGRTRDQTcxMTdBRUYyQzg3MTE3QUUxRTJCQzc1RDE2Cis6MTA3NTkwMDAyOEY2QUVENUM1N0REOEE0OEJGQjcwOTcyRUVFQzNGRDIzCis6MTA3NUEwMDBCQUI4MEZEQjc0NzExRjFFRDFDNTdERDhBRDhCRkJGMDRGCis6MTA3NUIwMDBCNDJFRUVDMzdFMjlCRkI4RTZCMDU0N0Y2OUVEMTEyOTIxCis6MTA3NUMwMDBCRkFDRUUwREE5RkVGMkUwNzFBOTdDNDVGRDA3NTI3OTMyCis6MTA3NUQwMDA0NUMzNDc1MkJFQUFFOTBCQTk3RTZGRTMzRUJDMkFERTMzCis6MTA3NUUwMDAwM0JGMjZERTAzMUYxM0VGODFERjhDMTFGN0UxQUYzRkVFCis6MTA3NUYwMDBGRkUyQjZDOEY3Rjg1RkZFRkM5QkRCRjAzREJFNDFCQzg2Cis6MTA3NjAwMDA4MzhEMTVGNzIxNUMxRTIzRUU0MzU3RkI2RjFGRjcyMTc3Cis6MTA3NjEwMDAyNUY5OUZGRjBFM0ZDN0NFQ0YzNzI3QzQ0RkNBQjFBNzZBCis6MTA3NjIwMDA3Q0Y3NzdGOEQ3MTZDOUVGOTlFNzk2QzhFRjk5NzNFQzBFCis6MTA3NjMwMDA1QzlGQ0ZGM0M5RUY5QUFGMkY5M0RGMzU5N0Q5N0NEOUYxCis6MTA3NjQwMDA4ODg3M0VFRUMzODQ3ODZGOEUxREY1QTU3ODlGMUZDMjk0Cis6MTA3NjUwMDBGN0E5QjAzNjNFOEJFRjUzMjE3RDBFRTMzRTQwN0ExMDAyCis6MTA3NjYwMDBFMzNFNDA3QTA4RTMzRTQwRkE3QjhDRkIwMEU5NEIxODhFCis6MTA3NjcwMDBGNzAxRDI5NzMxRUU4MzhBNzEyMzAyMjI2RTQ0OEQ4OEZFCis6MTA3NjgwMDAxQjUxMkJFMjQ2RDQ4OUI4MTE0MTExMzdBMjVFQzQ4RDNCCis6MTA3NjkwMDA2ODEwNzEyMzlBNDREQzg4MTBDMTM5RTEzRjQ0RTk0OUZDCis6MTA3NkEwMDA3RjBCQTVBN0ZDQzcyODNERUQ2RkE1RjQ4Q0ZGMzRBNTgzCis6MTA3NkIwMDA2N0ZEMUQ5NEI2RjkzRkE3QjRCNzcxMjMzNEI5RkMzMzA1Cis6MTA3NkMwMDBEQTBENjZFQzlGQ0JCMTI2QTczM0VDMDMzNzQ0Q0E2OUM5Cis6MTA3NkQwMDA5MUZEQTIwRDI4QTdCMUUyNDVDQzQ1OUFBNkM0OEUxNzBDCis6MTA3NkUwMDAxMTJFOEYxMTJGQTJBQjdERUM3ODExNjlBM0JGQkY3ODRCCis6MTA3NkYwMDAxMUZGMTZDRkU1RjUxRjhEMTczMUJGNUE4RTY3QjA2MEE5Cis6MTA3NzAwMDBDREY5RTM0NTk0RDk4QTU2QTM1QzZBRjJGODZGRjFGQzhGCis6MTA3NzEwMDBCQ0FBQTc3ODExREJFQzhBNThBRjgxMkU2ODc3MDE1RDhGCis6MTA3NzIwMDA2OEJERUVFMUJERkQ3MzhFODc3MzcxM0ZEMTk5N0JEMTRBCis6MTA3NzMwMDA3OUUzMUNFOEU1MjIzNkJENzk1QzgzRUJCRUU3MzgxMUJFCis6MTA3NzQwMDAzREQxNTVBQkZGNjYzOThGNUZGMDZGRjFFNzhGNUZEMEFBCis6MTA3NzUwMDAyRDRFNDQ0RkYxMDUwNjdENDY3QUIyQjc3MTIyN0E1QTEyCis6MTA3NzYwMDAxNzdBQTJFN0FDRUYzOTRFNDQ0RjdBQjUyNzdERkFDN0I2Cis6MTA3NzcwMDBFOTlDQ0UxM0UyQ0YxRjhGMjMxQzE3Q0VEQTcyOTAxQTJBCis6MTA3NzgwMDBCQkJDMzRCNTU1RjEwRUJDNjBCNjhCRkMyN0VEQkJDNDU5Cis6MTA3NzkwMDBCRDMxMkY3M0JCNTJGOTNCNzVCNDM3REJGNzI0MEM2NzRGCis6MTA3N0EwMDBGNDdFRERDNUJDQzA5Rjc4RjE1REQ5QjU3RjNGOUVBNzUzCis6MTA3N0IwMDBERkVBNjRERUM0MjQ4QTA3RUYzNkU2RTAzRTZDQTQxNUY3Cis6MTA3N0MwMDBGRDI5MTU4RDFGQkRGQzNCODA2QjZCMzZEMjdEQjI3NkRCCis6MTA3N0QwMDBDMEExODVFQzNFNkYyMkYyMkQ5RURENEVGQjc0M0NFMzkyCis6MTA3N0UwMDBGQUE2NEZFNDdCNjZEREVGMzc2MDk1ODhGMzlCQTk0NkU4Cis6MTA3N0YwMDAzQkVEOUIzQUI3RjI3QjlFNDY3NkYxN0QxMzQ3RDM3REY2Cis6MTA3ODAwMDA2QTE2NzQxM0ZGQzg0RTVEMjFGMEVDQzQxNEVCRkJBQzk4Cis6MTA3ODEwMDA2NDNGMkUzQkZDNDQ3RTg4RjFGM0NBNDhCRjQxOUY0MjNGCis6MTA3ODIwMDBEOTRGNTM2NzczMEVDNzc3OTUyQ0UwNkQ0MUZCN0I4OTY5Cis6MTA3ODMwMDA4MDk3NTIyNEZCNkYzRTVDNTQ3ODA4Q0ZFOTk3Rjg0QTUyCis6MTA3ODQwMDBFOTFFNDI1QTg5RUNDRjYxRTJERDM4NkVDN0MyRjdFNTI2Cis6MTA3ODUwMDAwMDlGRDIyNjg1M0RBMDc0N0Y0NzVFRDY3Q0Q3MDZEQzhDCis6MTA3ODYwMDBFNzJDMEZFQUVENkY5NjhCNzI1NkNFRTIzQ0I4RUY1REQ3Cis6MTA3ODcwMDA1MTJGOTczQjFDRTIzRTg3OUREOTdCNDVCN0Q2MEJFRjM2Cis6MTA3ODgwMDA5Qjk4N0M1RUJBNzk0MjU4N0Y5NzgzRUVDMzJFM0JCQ0FGCis6MTA3ODkwMDBEODhDQ0NCMkE0Q0I3NEIzQjk2NUJBQzVFN0NBRjREMTVECis6MTA3OEEwMDBEM0NGRTE5MUU5QTNBNzVGQzI1OEQ5RkZBNUQxNEZCQkMwCis6MTA3OEIwMDA2RkE4MzI3MTVGMzRDOEVGOTE3NjdCODdERkI0OERGMEFCCis6MTA3OEMwMDBENEQzNEY0RkFGNTEwRTcxNEZBMjhCNUU0NUQ2NTQ1MjU5Cis6MTA3OEQwMDBGOTg0Njc4NjFBMjJGOUQ2Q0Y4NzRDN0I0OEMxRkZFRTIwCis6MTA3OEUwMDA5RjFDNUM0QkFEM0MwRTE1RjU1NjNBMDdDRDk0MjVCQzVDCis6MTA3OEYwMDA1RDNDQ0UwNzhDMkJDQjNDMzQxRjcwNDc4RkZFREQ3ODcwCis6MTA3OTAwMDBGNjY3MjFGN0VGQjI2RjIwQkRBOUY4QjlFMzhCQTA3NDM5Cis6MTA3OTEwMDAyQkNBREIwOEZFRkIwQkU0QUZEMjdFMzc4MTc5NUNCODYzCis6MTA3OTIwMDA4RjZBRjA1QkRENEI1NDNDMTc2NEVFMjUwM0YxM0NEMENECis6MTA3OTMwMDA0NUU5OURFMkRENkZGQjUwNDZGQkZFODZEMDI3QTk3ODI2Cis6MTA3OTQwMDA4RTc2Njc1RUM3NENGNDNGNTQyRDY1NDVCODdFRkRDODAyCis6MTA3OTUwMDBDOURGNUQ2QzEyRTkwODI3RjdDRjZDMkUzMjMwRUY2ODczCis6MTA3OTYwMDBGQzFEMUU2MzUwNDFCRkFCQ0I3QkY4NzJCNDQ3OUI0REVGCis6MTA3OTcwMDA2RTdBNDdFQ0VBNzhGOTdBMkExRjQ1RUZBMzMzMENCNTAzCis6MTA3OTgwMDAyMzExMUZBODRGRUY2QkRCOUJERjc1MkU4RUQwQzM2RENECis6MTA3OTkwMDA0RDc3MEZDMUZCQzVGNzFCQTJCRkVCMkQ3NTY4RUZEQjYxCis6MTA3OUEwMDBGOEZEOEUxMTVENzEwNjRBMUQ2MzI4MUVDMTlERDlEMDU4Cis6MTA3OUIwMDA0RjY1NzEyN0YxNTE5M0NCMDk4MkZFQ0Y5NTRFMjdGQzdECis6MTA3OUMwMDA5RTZDNTZEQ0U4QUY5QjY2QkNFMTA3QzMwMEJGNzE0NzA1Cis6MTA3OUQwMDA1NUFFQkZDNEJERUVEMUEyRkVEM0NDOTM4RUY4OEVCQjA0Cis6MTA3OUUwMDA5NDI5Mzg3RkM2QkRDMTNDMDEyNDcxNzUyOUREQTdGQkYwCis6MTA3OUYwMDA5RDczREEyMUU0RDc5NDY2OTAyNzlDMEY2N0VEMUVCQzM3Cis6MTA3QTAwMDAyQTNGQTY0NUJFMkY5NzM4QzU3NzAwRUYxNzVFNzI4Q0M4Cis6MTA3QTEwMDA5MTNFQkJFNDk4QUFCRjFGNjNDNEZERkVCODU2RjlGQkI0Cis6MTA3QTIwMDAwNERERkU3MzlEMjY3NzRFOTY4QTcyQjdFNTJCMjNFMTFGCis6MTA3QTMwMDBENURFQzEzQ0VCMDA2RUZCOTJCRTc0NkVEQkZFMDkyMzBCCis6MTA3QTQwMDAzQkIxRkQyQjYzNjFCNEZCMjU3NzNCQjhERkVCN0UzM0E1Cis6MTA3QTUwMDAyM0ZEN0Q3RkE5OURERTM5M0M1QjVBN0UwMURBMTc5RkFECis6MTA3QTYwMDBGREM0Nzc0MTM0M0Y2NTg0OUQ5NkMwREY5RjdCMTNEODZBCis6MTA3QTcwMDA1ODk0QzM1QjE1NEVFRkRBOENBMjI4RUI5NjI2Nzc5QUMyCis6MTA3QTgwMDAxQzZBRjI5NzUxMUFFNzhCNzY1RjMzRDlDOUVEQTM0OTg3Cis6MTA3QTkwMDBBNUI5OEExOUU1Njc5RkMyOTBBRTZERUIwMEFGRjNBQzU0Cis6MTA3QUEwMDBEQjAxQjYyRTEzRjFBOTZBRkE5OEVFNjE1OTlCOTVBOEVECis6MTA3QUIwMDBCRkNCRjM4NEMzQzlFRjAzQUUwQkFDQzVGQjE3MzdDMzExCis6MTA3QUMwMDAyNDQyM0Q5NTYxQUVDRDhBMDYzRkMwQjY5MDVERkE4MEY2Cis6MTA3QUQwMDBDM0NEREYwRDU4NDUxQzIxQjUzNjAzRUYyM0I0MzU0RDFBCis6MTA3QUUwMDBCRTcyMDNFMEY5MDBDQzA3RTRFRkZEMjYwRkUxMURBODBDCis6MTA3QUYwMDA2MDhDRUU5MzBBN0Y1REJGOTk2Q0RCRTYwOEZCNzdBRjg1Cis6MTA3QjAwMDBBM0UwMzBDQUVENjEwN0I3MUJGQkY4M0MwQUUyRURGOUQwCis6MTA3QjEwMDBGQjVGOUQwOEJGRkQ3MzBCRjFBRkFGQjAzN0I1NzYyN0E0Cis6MTA3QjIwMDAxRDlDM0UyNTRFRUYwMTZDQ0ZDQTkyNDlGOTc4N0M0RUUwCis6MTA3QjMwMDBGNzkyM0VFODM3MDc3QTQ3QjFBRkI0NzUzREM5QzdFODU5Cis6MTA3QjQwMDA3QzIyQzk2RTA4OTI3MkYyN0FERDJFRTlCRTc3ODBFNjU5Cis6MTA3QjUwMDA4RDM2MEY1ODQ4NjFGODVFNUZEMzZGNEFCMzEyNzI4MDVBCis6MTA3QjYwMDBEQzhGQjZEQTQzNzhGRjJDQTkwQ0M2OUQ4Q0YxM0NBQ0I3Cis6MTA3QjcwMDAxQzVFOEI3QTU2RjY2QjgxM0NFNkEzNzFDRkU4QkQzRjY1Cis6MTA3QjgwMDAzQTUyMTFCRUE2RjczNDdENzk2QjIyRDc0N0I3REVBNUVFCis6MTA3QjkwMDA1MjNDRDBBRDZBQUIwREZEQTk1OTVFRjcyNDBDNEQ5MzU0Cis6MTA3QkEwMDBBNEJBRTk1RTRBRkYzMjNFMEZFMzczN0U5OTE4QjYwMzJBCis6MTA3QkIwMDA2MDkyOEZGQ0RBQjgyMERBN0JBNjBDOTRBNzE0QTQ5NzA1Cis6MTA3QkMwMDBFRjQzMDdBNEMzMEY3NTNDOEJFNjgyQzdDNkZBRjBGQkYwCis6MTA3QkQwMDA1MzQyNEYwOEJCNjY5QTU4RUZDNkJENjdFMEVGMjg0MzkzCis6MTA3QkUwMDA5N0IzQzhGNzQ1N0EzRDAxNzJGRjI3RkNGRDlFRkJERjg2Cis6MTA3QkYwMDA1MzI5NEU2ODU4M0Y5NDRFQTNGNTg5MTk4NzFFNDAzOTgyCis6MTA3QzAwMDA5QkYwMjJFM0M3NTE0MjNGQjhFMDFGRDJFNzkyOTc3QzM2Cis6MTA3QzEwMDBFQjExOERFRkFBMTdGNEZDNjYyMTZCMzg4RjNGQ0QzNjQwCis6MTA3QzIwMDBFQTEwQ0NCN0M4NzVENjI5RDY3QkExNDc2RTJBMUVCOEY0Cis6MTA3QzMwMDAxRUU3OTcyNjQ3MTdEQ0UyMzFGQTIyRThBODZGMUZGNjA1Cis6MTA3QzQwMDA1MzJBRDZGMDc3NzcwRUVBOTE5NzhDNzgzRkFDQkQwMDM3Cis6MTA3QzUwMDBGODBENzQ3OTEyRTcwQkQwM0JGMTkzRTA5NUM4RjcyRDNFCis6MTA3QzYwMDBDRDU3RDg1MEJFNkYwRDRENzJDRDgwMzY4OUQ2MjI2MjY5Cis6MTA3QzcwMDA1RTIyRjM5MjNGMjcwRkE4ODM3MTIyRDY5MzUwQzA3RUQ1Cis6MTA3QzgwMDA1RDJEQ0E3MkE2RTAzREFFNDJDOURGQTNGRDJFMUUwQ0RCCis6MTA3QzkwMDA5NEY4MTJFNjAzQzg3MUU0M0Q1NjREM0VGNUYyQThDOUNBCis6MTA3Q0EwMDBFRjdBREM2MEUxRjkxRDdBQ0MyMTM1MkEwREM0MjAwQjc2Cis6MTA3Q0IwMDBEQkVBNDIzREFCRDk5N0VCQzNGNjVDMjJFRDMzNTYwQkMyCis6MTA3Q0MwMDBCQjY4QkQ3RDlBOTVENEMwRkU2NDVBQ0Y1N0UzRkEwNEQxCis6MTA3Q0QwMDBFMzVGOURDMjY4MUU2OEUzRDBDQjYzRDVFNzA2MTY4Q0QwCis6MTA3Q0UwMDBEODFGNTRBOTFENzQ4RkFGRUE3MzMzMEJGNkMxNzFGQjEzCis6MTA3Q0YwMDAyNkUxQjgzNUJBOEMxNDc0RDFEMzIxREIyOUY2OUI4MkU2Cis6MTA3RDAwMDAxRUIxRjFDQzc3RTFGREQ5NDRBQjk3NkQyNDNDMjdEMTZFCis6MTA3RDEwMDAzREU3ODY1MDlFMTVEN0RCREI3NDc4RjYwMkJGMzlEMTdDCis6MTA3RDIwMDBGMDUzRUQzMUYwMTNGMURCMjYzMERGRUY1QTQxNUVGMzEzCis6MTA3RDMwMDA2RkFBQ0JFMEVCMDU3QjM1M0Q4MjdGRkE3OTMzQjZBOTlDCis6MTA3RDQwMDBGQTgwMzk2MkJFNjg3RTVERkQzQzE5RDFDQ0FFNDFCQTg1Cis6MTA3RDUwMDA4RjBCQTkwQ0NGNUY3QjlBMkY5Rjg4RjE1NkM1NzM3QTQyCis6MTA3RDYwMDBCNUNGRTkxODhDRjJCOTQzRjU1NTNCQzlCRTY4MzU2MDBCCis6MTA3RDcwMDBEQ0RGRjZBNzE5Q0Q2N0NGRkU5MzRFOEE2RkQ0RDJCQjU2Cis6MTA3RDgwMDBGQkU5OUExREE1RDk0RkZBN0E5QUZEQTRFOTVERUQ3RTJCCis6MTA3RDkwMDBGODc2QTdDRjhGRkQyQjREMjA5RjMwRkVGNTJFQkUyRkZFCis6MTA3REEwMDBEQUVCRjBBREMzRUZGMTMwMDYzQzRBNjJCOUExMkNGRTJDCis6MTA3REIwMDBGRTU1OTZGRjU4RjIxRUFGOTNFNzA2QTAxM0ZENEUxNjMwCis6MTA3REMwMDBFOEZGNDE0QTc3M0NCNEZFQTczODEzRjk3OTBCQ0M2NjNCCis6MTA3REQwMDBENDQzRkRGMjE5RUZBQzkyRDFGREM5N0VDMzk5MEZENzAwCis6MTA3REUwMDBBNzdFNzlGQ0RFNUY1MEFDREJEQjg0QkVENUQyQkQ4RUQ2Cis6MTA3REYwMDBBMkZCMTE3RjkzQ0EwMjk2QkNFRjhFMzdBMjhBRjdCMTFECis6MTA3RTAwMDBCNzNCQkRGN0ExRkM1OTBCQkQzNDhFNEMxN0YzQTBGRDU5Cis6MTA3RTEwMDA5OUE5MzYyOEY4NkUzMjY5QTU1QkUxRjdCMDU5RDczQkNFCis6MTA3RTIwMDAyNjgwOTczOUMzNUQ4MDcyOTI4OUZCNjhBQ0RGMUMzRDY4Cis6MTA3RTMwMDA4RUQ2MTM0RTkzNjQ2NzdBNTgzODRFRDUxM0Q4MkZEODAwCis6MTA3RTQwMDA5OTA3Q0Q4MDc3OUYxOTVBREMyQkVERENDNkEzMjA5REM2Cis6MTA3RTUwMDBEQTFDNzMwOEU5QjY0RjE1NkU4RjI3NzI3QUU5RjcwM0JCCis6MTA3RTYwMDA0ODc4QzQ0RjE1RjlEQkNDNENCNTI1QjFBRURGRTEzNDExCis6MTA3RTcwMDA1OEM5OEU4RjY3OUUwNkQ0NEIyRjNCQjNDNUI5QThBN0IwCis6MTA3RTgwMDAwNkYzRkZBRTc2NTgxMzg3NzZDOUYxOUQxMzY3Nzk1NEQwCis6MTA3RTkwMDBBOEUyQkNCNDczMzhFRTk5NDA5RTBGMjNCRTZEMTMzQjJECis6MTA3RUEwMDAwN0RGNEFDNEU4MThDMEU1QzY2Qjk0RTJFMjY4RjQ2RkU1Cis6MTA3RUIwMDAzMjQ5RjRCN0UxM0UzQjUyMEYzQUNDQjQ4RjZDNTNFMkY3Cis6MTA3RUMwMDAzQzM4Q0ZEQTk2MkIxQzRGQzUyQUUyMDZBOUYyRkU1RjlBCis6MTA3RUQwMDBFODIzNERCRjc2M0FCMzA4RkY3ODE2QTA3RDAwQjM3QTQ5Cis6MTA3RUUwMDBBQzc0OEY1REUwOEY3MTE1QzlBRkIzMzczRUI4MURDRjRECis6MTA3RUYwMDBBMzc0NzExNEY1NzExNjI3MkZCNkQzQkQ4QjJEN0I2RDJFCis6MTA3RjAwMDBCNDJGRUQyQ0UyRTdGMzlEQ0QxNkQyQkZCMUU2NjkxQThFCis6MTA3RjEwMDAyQTgzRjNDNDBCMDRCQTc1MjBEREQyNENENTg5QThGN0E3Cis6MTA3RjIwMDBEMkU2RjNGOUFGQTc0NzNCMEUxNEY3M0I3RjMwMDVBMzJBCis6MTA3RjMwMDBCRDU3RDdEMkY0RjRCRUM1Njg5N0E1NjdBNDUzQUE3REYwCis6MTA3RjQwMDBBRkIzQUI1MUVGNjExQjEzMTQyOTRFREYxMEU4NTFFQ0I2Cis6MTA3RjUwMDA3MzhDMDlGMEZEOUNFRjhGQUY3OTU5RDdCREY2QkEzODE1Cis6MTA3RjYwMDA0RUJGNEVERkY4ODQ4NzUxQUU0MEUwRThGNzA0QjQ3M0FCCis6MTA3RjcwMDA0REIxOUZEN0UyMjc2OUZENkNGMTVCOEIzMUU0NjdERDgyCis6MTA3RjgwMDBBMkU5MzY1QzA3NTI5OEY3Q0E3OTM4MjlCNzk4RDg0RUQzCis6MTA3RjkwMDA2QTk3MkJERDc3QkRENzNGQjIxOERGMjc2NzI2RjA3QkM2Cis6MTA3RkEwMDBCNDlGNkM5OTRBRUY5OTUzRDkzQURCNjBBMDQzNjk5MTI5Cis6MTA3RkIwMDBDMTgzRkU4MDczOEJERTc0MUE0MDdFMTY2NUI2RTRBMzFGCis6MTA3RkMwMDA5QzI2OTg3Qzk5MDk2M0M4NzU0NUZCOEQ2NTI1RTY2MEZDCis6MTA3RkQwMDAwOEU4OTU1QzA3MEE4MUU4MThCODkyRThCOEQwMTBENThGCis6MTA3RkUwMDAzRjlDOURDMEY3OUQ2Rjg5RjUyNDNEN0Q0MEYxOTI1MUU2Cis6MTA3RkYwMDA5MUY5N0U0NDU3NEQ4RTYwRkU2NDJDMTlERDE1MEYxM0U4Cis6MTA4MDAwMDBGODc5NTE0Mjk0NzlEMDZFNjI0REY4NUU0MkQzNDdDOUY3Cis6MTA4MDEwMDA0MkNDMzQ3REE4Qzk3MTMyQ0UwRkI0RTM4QTQwM0Y0OUM3Cis6MTA4MDIwMDBFNzdENTAzNUI1RUJGNzBDOTVFNjE3QkU0MDNCRDY3OUFBCis6MTA4MDMwMDBFOTI0RDIzNzMwNkY2QjQ4Q0U3M0I5RkVCNEExM0U4QkMyCis6MTA4MDQwMDBGMDVCQjVFRjdEQkQzRkJFNjM3QUZCNjcxRjNCRjA1RDI0Cis6MTA4MDUwMDBDQjVGRDQwRTA3RUFBRkQzQjdGQ0M5ODE3MUMwREVCRUQ3Cis6MTA4MDYwMDA4NUVGOTM2RkQ0RDlGRjU3MDlGOTA4MjYxNDRENDFCQTBCCis6MTA4MDcwMDAyRUYwRkYzRDNGRDI1RTYzNkJCOEZGNzk3OTUwN0VCRjMzCis6MTA4MDgwMDA4QUY3QkYyM0ZEODAxNTBERkFGQjAwMDExRUE3NENGQ0VCCis6MTA4MDkwMDAzRUE3OUUwRkVCMDQxRjk2RUZEQTY2Q0U3NDYzRkZCRTE5Cis6MTA4MEEwMDAzOUQ4RkY2OUIxQkYzOURERThBMEY3MTQxQTNFOEI3NkU1Cis6MTA4MEIwMDA4RDM0QTNDREZGOTc2NjhCNzhBN0Q3NjJFMjdBRDkzQjQwCis6MTA4MEMwMDAwM0RGRTdGODA0RERGNDc4MUVEQzE3NEZGMDk2REVDMzFCCis6MTA4MEQwMDBERkFGMkU4NEJFRDY4MDVFRjQzNUYzMzg0QUZBNzEyQ0I5Cis6MTA4MEUwMDA3RERCM0QwREZERTg0QjM3MjlCNDhGQzNGQUI3QzAzQUFECis6MTA4MEYwMDBFMTVCQjM5MURFRjFFOEM3QjkzMDIwRkI3M0Y0RjExQTBDCis6MTA4MTAwMDBCNUZEQzAzMkMxRkYyNUY4NkJCQzM5NTFFMjM4MzZGM0ZBCis6MTA4MTEwMDBGNzc0Q0I3NEY2NDVFN0ExOUM3ODFDRkY5QTA0NjE2NzVECis6MTA4MTIwMDBFN0IzNEIzMDZFRTc5RTQzRDkwOUQxRTI2MTY4RTk1OTY0Cis6MTA4MTMwMDA3MURFOEZGN0ZBMzEzREVENjc5NDRFNDk3MEYzNzg1RDRCCis6MTA4MTQwMDBDRDQ3NkU0NkI5QUE2Q0RBNERGMTExRjcwNURGRUIzMzc2Cis6MTA4MTUwMDAxRUFBMTQzNDdGNjE0NEExMkExMEY2RDg3QzYxOEZFREU5Cis6MTA4MTYwMDA2MTVDNkVDMDhFREU4Q0YyN0ZGOUU3M0EzQjVBOENGMzhECis6MTA4MTcwMDAwNjRERUUwRjI1OTFEQ0RDODBFMzFBOEVERkQ1NEZBMjkxCis6MTA4MTgwMDA4REVCRUUwNEY5RkQ1NzZGQzdBNThENDcxQjlGNTY1RTFCCis6MTA4MTkwMDAyMURFOUZFQkRCNjk3MjNFNDVDOEREOTIxREM1MUJGQUVGCis6MTA4MUEwMDAwMjI5RDZFRjdEN0Y4MDg4MjM0NzcxQjYzNDM5RDJDQjQwCis6MTA4MUIwMDBDOTMyQzFCN0IwM0MzNERGNDFFM0QyRjgwNkYyOUUyRTlCCis6MTA4MUMwMDBERTI1QTVBMzNGQTMyN0I5RDBGM0JGQ0RENDNBMDBFNzVFCis6MTA4MUQwMDBBQjlFRkY2RDMxQ0U3REI2MjdGMDczOEQyNTZFRUYzNEVCCis6MTA4MUUwMDBGNEFGODA3OUI4QzExNTYxM0Y5QzU2NkIwRkZFMTRFNzYwCis6MTA4MUYwMDBEMTBFMkVDNzkxRUIyMjE5NEIyRjlBNjg5RDVERTU3MDI5Cis6MTA4MjAwMDBBNzI1REEwNURGQzZFMUZCNDU0QjAwRUI2OUZEOUNGMkQzCis6MTA4MjEwMDBEN0NDMUE0OEU3OERCNUIzMDYwRUE0NzcxQjk0NkFFNTUwCis6MTA4MjIwMDBBNUY3N0ZFQzQ0RkJCNDNEOTc5MTdGQTFDRDIxRTM3QjgzCis6MTA4MjMwMDAwNDE3OUIzMTk4NzJGQUFGNTQ1QkJFN0UwQjc1RDA4RURCCis6MTA4MjQwMDAxNjhBREY3QUVBMkJFMTlGRjhDQTUyMTg2RDlDNjcxM0YxCis6MTA4MjUwMDBCODFEQThERDNGQjk1MUNDQTMxQjlCRjk3QkJCNDU1Qjg3Cis6MTA4MjYwMDA4QkNERTQwNzU4MjNERkQ3Nzg0OTcxNERDQjg0QTZCRTY4Cis6MTA4MjcwMDA4NjkxNjZFNEIzOUUxRjRCM0Q1N0QwM0JGMDZFN0M2MTA4Cis6MTA4MjgwMDBCNzEzNUY5N0VBREZCNTg5N0I0QzBCODQ3Q0NDNzRCOTVDCis6MTA4MjkwMDA4NTlERTZBMzc3QzQ0QkVBOEM2NERGMkY3MzU3RDNGRTJBCis6MTA4MkEwMDA2Njg1MUFGRDNERDYxODk3RTFCQ0UzRDE4RjYzNjFBM0MzCis6MTA4MkIwMDA0MjdBNEY4RkZGQjIxRDZCMzdGNDY1Mzg3RTNFQkVFRUJCCis6MTA4MkMwMDBFMzA4RjUyMzNEMjNDNkM5NUEyRkU3RUYzMkM1QkFGREFGCis6MTA4MkQwMDA1Rjk5NUVFRDhDMDA4MDAwMDAwMDAwMDAxRjhCMDgwMDlECis6MTA4MkUwMDAwMDAwMDAwMDAwMEJCNTdDMEQ3ODU0RDVCNUU4M0U3MzU2Cis6MTA4MkYwMDBDRUZDMjQzMzQ5MjZGRjIxNDEzQzIxMTExMjEyRTI5MDg5Cis6MTA4MzAwMDA4NDAwMDE3MUYyNEJDNDA4MDMwMTgyNjA3NTQwNTE4NEZFCis6MTA4MzEwMDA5MDIwN0E1QkVGQUJCNzk5OTA2ODJERkE3QUEzNThDQjhGCis6MTA4MzIwMDA2REVERkQwNjJCQUQwQTQ4ODBBMDgxMjZFOTA0MTQwM0ZCCis6MTA4MzMwMDAwNDBEODIwQTk2RDY4MDE0QjEwNTMyODBCNTU4N0Q4RjFGCis6MTA4MzQwMDBCN0Q2REFGQjY0NjY0RTkyNDI2RjVGODdENjlEN0RDRUNDCis6MTA4MzUwMDAzRUZCQUNCREZFRDdEQTZCOUY2NUVDRDk0QjcyMEU2MzZBCis6MTA4MzYwMDAwRkI3Q0I4Q0U1MzM1NkZCQUNFQzY1QTk4QzJENjNDQUZCCis6MTA4MzcwMDBFOUJFMEM0NkJGNkJBOUY4NUY2N0U1OTIwNEM2RUVDNTdGCis6MTA4MzgwMDAzRjU1NjhEQjU3NTUzMjc4QUU1Q0FFOTk4NUNGRjU2RkI3Cis6MTA4MzkwMDA5MDk5NTk4MkVCMUVFRjUzQzk3MUQwMzY0OThFNDYxODE5Cis6MTA4M0EwMDBDNzFFMzc5RUVFQjMzMDY2ODE3RkQ3NDZEMzNDOEMyNUZGCis6MTA4M0IwMDBFMEZDRkNENzIzQjFBNzUyNjBGRUIzOEFGRkJEMDg3ODZBCis6MTA4M0MwMDBFRTJDQzBFMTgxNzk5Njc4Rjg3M0Y0N0VGOEZGMzJDNzFECis6MTA4M0QwMDA4QzJGMjQ3OERGRkRFREYyMjk3MzBFNUU1RDZEMzJDMEM3Cis6MTA4M0UwMDBGOEE1MkY0OTZDMUQ4Q0JGRkY2OURENzhCMTJFRkQzQUQxCis6MTA4M0YwMDAxRURBRjBBM0I5RTkxOTgxNzEwRjdCOUYwQkU5QzNEQThCCis6MTA4NDAwMDA1NDU2QzBEODdEMDIzRUY2RUE3RjA1RUU3M0Y4NERBRUI1Cis6MTA4NDEwMDAwOEM2MzJFRDExNzE2N0IzQTA1QkMwMjY1RDRCNjNBQzNCCis6MTA4NDIwMDBDRTFBOTlDM0EyQTAzNTMzQzIyMzNCNjRGNDZFMDJCOEJFCis6MTA4NDMwMDBENjQ0QzA4MjAxQ0UzNTVCQTNCRDFFQzRFM0VBNjhDNjQ0Cis6MTA4NDQwMDA0NkMwQjhGNjhEMjZCNzBERTZDNERGRUQ4QzlEQUI2RjQ4Cis6MTA4NDUwMDA5RTlCOUUwRUVCQUY3RjdBNkVCQUMyRDgyQ0JCOURCMUFECis6MTA4NDYwMDA4OTQwOEZCNkU3Njg1Q0I3RTI5QTY0ODdGRTJBNEJERkUzCis6MTA4NDcwMDA4RkVGNTY4M0YwMzg5OUQzNjM5OTVDNjk2Mjg2QzA3QzJDCis6MTA4NDgwMDBGQTc2NTlCM0YxQ0JCRUEwNzUxNjIxRkM1NkY4NjMxMkVCCis6MTA4NDkwMDBDMDJGRkYzREY4RDVDNDY4NUIwMDZFRkRCQzdGQUFERjJFCis6MTA4NEEwMDAxMDAyRjc0QTg1Mzk1QjZDODFGNTY4RTMyNkRBMERCNDcyCis6MTA4NEIwMDAxRUZERjM3QTdBMzBFNkE1NzE3QUJBQUM0NDNBMDREMTVCCis6MTA4NEMwMDAxN0UxNTQwMEFGM0QxRDU2RUY1QTg5Rjg4OEUwRjY3NDY1Cis6MTA4NEQwMDA4NDExREMxNzkzRDZDRDNEOTNDN0Q4NjE3QzAwRTBBRTA0Cis6MTA4NEUwMDAxREYxMzJGNTVGNTE1QzZFN0IzQzVFRjQ4RjcyOERDNzdGCis6MTA4NEYwMDA2NzYyMTk5QjMyM0NERTYwNDZDNjYwN0MyRUNFMEZFMzdECis6MTA4NTAwMDA3Njg1MzlGMzk4OENENzVEQjFDODA3RDMxQkZBQUEyQ0FFCis6MTA4NTEwMDA0MEFBM0FGQkE0MEEwNURFMzNGREI5QkVBQTMwRTgzRjAzCis6MTA4NTIwMDA2MjlGQ0NGQjlCRkE4RTVBMUM4QzM1QjAyOTE1QTVGMEE2Cis6MTA4NTMwMDBGQzYzNzAwRkU3QkI1RTlCNkY3NjJENjZDMDU3MzU4MDdFCis6MTA4NTQwMDA1MzRCMENCNEM3QzZCQzhERjI1NkQzNUI1OTIxNDU0MjgwCis6MTA4NTUwMDBDQjk4NEZDQTA1N0U3MDQ2RkFBQzM5RDQ2Nzg1MzBBRUU5Cis6MTA4NTYwMDAzM0NBRkQxRkI4QkU1NTU3OUIyRUM5MzhFRTk4QzJFNUQ5Cis6MTA4NTcwMDBBNTNCOEVGMEEwMDBFQzYxRjA1QzUzQjg1M0I1MDNCRTkwCis6MTA4NTgwMDA5QTYyMkM4RUM2NTRCQUVFMDk4QkMxQkU1MzU1ODNBRTg3Cis6MTA4NTkwMDA2QkY0QzBFNzEwOEUyNjAzNzM0NjQzREI3NTYwNEM1NEMyCis6MTA4NUEwMDA1RkY2RjA3OEVCQUE1N0FCMTRBMEZGQkVGQTBDNkFGNUExCis6MTA4NUIwMDBGNzhCNENGNjc0MDczQzVGNjQ2MEVFMTZEQkUwRkJBRkI0Cis6MTA4NUMwMDAyMkJGMTA5REQ0MTRBNDczNkRCNzg5RTQxQzdGMTJGMEYwCis6MTA4NUQwMDBGRDJBQTE4NzZBODE0MDUxMDBDRkFBNjNDQzE3MUU4OTZBCis6MTA4NUUwMDBFM0NBQkY1MEIwNkQ5NUQ4RTkxMEJFNjI4MUJFM0MzQzc1Cis6MTA4NUYwMDBEQzM3REFENkUyN0M0QTMwOUY3MDNDMTUyQkE5NTU0QTBECis6MTA4NjAwMDBEMDdCNEI2RDk5MjE3RDM5RDE5MDgxRUI2MTcyQjg2MzNDCis6MTA4NjEwMDAxM0UwNTc0RTMxQUNERTAxRUI5NzZGODYxNkYwQTFEODEwCis6MTA4NjIwMDAxREYyMTI2ODlCNEJBNkNCNEJBMTZEMzRCMjg1MkREOEExCis6MTA4NjMwMDAxQUQ4RjI2MDNDNzUwODc5RDJEQTRCNzZENzZGOTBFRTkzCis6MTA4NjQwMDAxN0RFRUYyREIwOTI5RTFBNjkyN0Y5MTZFQjZEOTQxQzc4Cis6MTA4NjUwMDAzRUQ0NDM5RTJFRTZEODA0RDc5QTY0MTdFMzdDRENDMjRFCis6MTA4NjYwMDA5MDhGN0YyRkU2NzE5ODBEM0I1NUUwRDdGN0VDMEYxMkY2Cis6MTA4NjcwMDBGRjNBQTIwQzhGQTY0MkZGQTNFNjE1MTUwQUYwQUYyMzFFCis6MTA4NjgwMDBDNTcwMjUxNTc4RjQ3OEYzNEFERUNGMzI1QzE5MERGREZDCis6MTA4NjkwMDA0RjlBNkI3ODdGMkE0Qzk5Q0NEOEM5RTY1NTE1OUU2Q0I5Cis6MTA4NkEwMDA5Qzk3RUIzMUI2QzU5OTg1RUY1MTBDMTJDOUE5QjJENzg5Cis6MTA4NkIwMDBFNDZEODQzRjlCMjIzOTNGMzUxOTgxMkY2MzcwQkM0QTlBCis6MTA4NkMwMDBFMzlGNkEyOERFNkMwNUZFNTc4QTlERUE2QTFCQzczNTYwCis6MTA4NkQwMDBGMkMzRkZCNEQ1RjAyODVCMERBQjExOEZEODIyQkVDRjBCCis6MTA4NkUwMDA4ODc1NkI3NDYwQURDRUFDMzlBODE3NUE5QzU5NzMyMzRBCis6MTA4NkYwMDAxMEFGRUVDRjExQUY3OTNEQkREMzUxMEZCNzdFRjA0OTJBCis6MTA4NzAwMDA4MTNCOUJEMzBCRTdDOUVCNjEyQzEyRDY3M0UxQUQ5Qjg4Cis6MTA4NzEwMDAzNkNBNTI4MDNFOTdFQzQ1RTc1MTVGNEJBMEE2MUY4N0IzCis6MTA4NzIwMDA3NTQ5QUE5REREMDM3MkQ3RTg2NEFBMDlENjk1Qzg1RThCCis6MTA4NzMwMDBCMkEzRkQzMDIwN0Q0MDA1QjUzMkFFNUYzQUEzNUM1RjQ5Cis6MTA4NzQwMDBFMjczNkNBNDhGRUM0Q0I1RERGNTE1QkU1RkQzQ0ZBQ0Y2Cis6MTA4NzUwMDAzNzY2NDgzREFDRDc1N0E2OUNDNzY1MDY3QzEwOTNEMkI4Cis6MTA4NzYwMDA3NjdDMjlFQUYzREY5QTFEQjdBODA4OEY5MzNEMEU3MDM3Cis6MTA4NzcwMDA2QzMzMzA4NUM1MTA3QjY0Mjg3MERGQ0FDMjFERUI1MDk2Cis6MTA4NzgwMDBERTFEMkNDOTAzRjI4NTY4MjNFMEUwMTcwN0Y2RDAyODI4Cis6MTA4NzkwMDA2NDQ4NUIwNzNDNUZDQUEwOUQ4NDcwREQ0QUVCOTI5MTAwCis6MTA4N0EwMDA5RjI2MzA5NzhDN0FBQjgwNzlBREQ4RjY3N0JDOTU4NENDCis6MTA4N0IwMDBGODdBM0U4Q0RERTc4MkQ2RjIyQTczN0E4M0Y0NDY3RTFECis6MTA4N0MwMDBCNDQ0Rjg5RjE1NjNBNDM2RENEODMyMTdGOTM0RkMxMjkwCis6MTA4N0QwMDBCM0EzMUZEMEZGMEI5MzgyRjM4MzYwREM4OUQ3MURGQjBCCis6MTA4N0UwMDAwRDBDRTFGQ0I1RDE2QjhGODJCRTNGNTM1MTVGNjY4MUFBCis6MTA4N0YwMDBGOUZBMDU5REI1Nzk5RjM3QTk5OUQxRDBBRjhBOTEwODJCCis6MTA4ODAwMDAyRkJGMkVFMkY2RDhGRjg1QzlGQjcyMkFFMkM3QjJEQTgzCis6MTA4ODEwMDAxQjI0NTdFM0EzRjlCOEJBQjhFMkIxRDFGMDdDNEI0N0I3Cis6MTA4ODIwMDAzOEMzRjc0RkVBMEMzNzIwRkUzNzZGQzkwRDQzM0VEOEU3Cis6MTA4ODMwMDA4NkI4ODFGNUM3OThFRDhGRTA3QzMxNTcwMERFNTRCQUQ5Cis6MTA4ODQwMDBFRTI0QkMyQUVBODQyOEMwNkJFMTRDOUJCQTBFRjBGRUYxCis6MTA4ODUwMDBFQkIwOTY5OUM4RjdGRUFEMDZGNjMyQkM2MjlCQzkzMTAzCis6MTA4ODYwMDAwN0ZCREIyRUFCNzZENEIzQkY0RTZEMDlBN0Y1NkMzNTk1Cis6MTA4ODcwMDBEMDdBQjY4NUZCQzdBRDAxQjhENzY1MjgxNTA4OUY2MkM5Cis6MTA4ODgwMDA2NTBBRUE1RkM1NTBBQzNFMDJEN0E3NDU3M0ZEQThFOTZCCis6MTA4ODkwMDBFMzlBNjg5NUZBQ0Y0QkYwRkU1QzFDNTc0NDcyNTMyNjVFCis6MTA4OEEwMDBEQjQ4REVGQUZEQ0M2Qjg2RjdDNENGRUI5NTkxMUVFMTc5Cis6MTA4OEIwMDA3MzgwOTU5MERGMTU5RkNDNzAzRTE3MTIxQTVBOUJEMThBCis6MTA4OEMwMDBBQjkyOUU3NURBOTYwMEREQTcwQjNEM0JGRDY0NEQyNTBFCis6MTA4OEQwMDA4QkM0OEVFM0Q4NTQ5ODZGOUZDREM4NzA1REI3QjEzRUZFCis6MTA4OEUwMDBEOTAyRkREQkFFMzI4NzBGRjlFN0FBNDI3RTk4MURGRTYyCis6MTA4OEYwMDAwNUZCN0I2NTYyOUU1RjQ5NEM4OTgyNzE0NTVGQUEwQUQwCis6MTA4OTAwMDBGMjU3MTEwQkY1REJDQTM2OTQ3RjgxRjZBREM0QTJCQkRBCis6MTA4OTEwMDA4RUZFNUMyNEI2NEFFMDNBQ0NCMzI4NUFGODYxQTNEODVDCis6MTA4OTIwMDBBODZCQTRDRjYwRDYwNDYxNDc1NTVDN0ZGNjdGRTFCQTlGCis6MTA4OTMwMDBGQTJCNEMwRTVDRkY3NjlCRjNFM0E5QTgwNzdCOEQ2Q0FBCis6MTA4OTQwMDAxMzFCNUU4RTdFNTUwRjFBN0QwQzA4QzdENTcwRTY4RDAxCis6MTA4OTUwMDAyNTNFQjQyMUZEQzc2RDY4RjY4NEMxN0FDN0E1RjNGOTM5Cis6MTA4OTYwMDA5MURGNTA2RjhDRkQ0NTVDMkNFQUVEODg2OEFFNEZCNDBBCis6MTA4OTcwMDA1NkUzMkZFNDIzN0IxNEU3MjNGQkFEMDFGOUZCNUU3NDgwCis6MTA4OTgwMDAyQThERDNFNDA5RjkwQkU3RDk2M0Y0MkU3NjBENjExNzJDCis6MTA4OTkwMDA4MTJGQkY4NzdDQjlEREM2MkE5MENGOUYxOTYxNTk4ODg2Cis6MTA4OUEwMDBGMkE0QkQ2N0I3RTA3QjdERkI1NEMzOUEyRTIzQUVGQkQ4Cis6MTA4OUIwMDAyRkEwRkYwMUVFRDJFNEFCQTY2MEZCREQxNUM3RTEyREQxCis6MTA4OUMwMDA5M0JGMjVCRkZBNjJCQjQ0RkU3QzQyM0JEN0Q3QzE3QzM0Cis6MTA4OUQwMDAzMTYyNjhCRTc4MDFGMTdBM0RCRUQwQzcwMTFBNUZFQzAyCis6MTA4OUUwMDBCODFFNUY3NEZGNjM3Q0YxOEI2OEUxREYwRUNCMTdERjhECis6MTA4OUYwMDA0NkUyRkExRkVCMjg0OTY0N0ZDNzhGNjkxMzdDMzBEQzlECis6MTA4QTAwMDBGRDI5NTZBRUQ3RjREN0RCMDUzRTc3OUI5QUVGQ0M0MUQ0Cis6MTA4QTEwMDBCOUJGQ0JFMDQwQjkwNkFBQTdDQzA1RkJCMjNCOUMzRjRGCis6MTA4QTIwMDBDNzk0RDU2OUQ4REZBRTcwM0RCMkJEREQ0QzdBNjRCQjZBCis6MTA4QTMwMDBDREVEMjY3QjlENjQ2MUU4MjczMEM1RERGNzdERDQ3RkQxCis6MTA4QTQwMDBDOTE2NzU1RDEwREYzRTJFRjQ0MDhCRDEzN0U1NzNGNDA3Cis6MTA4QTUwMDA3RjBGNzBGQTRFQkUyQjU3MzZDMUI4MTEwRjcwQjlDRUNBCis6MTA4QTYwMDAzRjY3REEyOEMzM0NENTMxNDVCRTY4MThERjE3Q0RFRDI2Cis6MTA4QTcwMDA2MkREMTkxODA1N0M1OTdCQzY0NEZBRURBRENFMjNFNUJECis6MTA4QTgwMDA0RTFCRjkzNzRFRTRBRjQ5N0I4RTk0MTc2N0UzNzhDRURGCis6MTA4QTkwMDA0N0REQTJENUZBNTM3MDREMzE2NDc2OEUyNTAxN0U1RDk3Cis6MTA4QUEwMDBDMjRFNEM2MTVDMEZCOTkwM0Y3MjAyN0RFNjM0NTIzQzdECis6MTA4QUIwMDBBNkYxNDEzNTYzNTk2ODI3RTZGNjM5Q0E5MDhEQUEyQThFCis6MTA4QUMwMDA0MkU5NUJFRDlCNDk3MURGRkNFM0NFQjIwODU4RDc3Q0VECis6MTA4QUQwMDA5N0VFQkVBMDdGQjU4RUZFRTAwN0ZGMDFFNTY0RDVFNjA4Cis6MTA4QUUwMDBERTRFMUJGMkFEQ0FFRDY5OEI2OTc1MTZGNzdCNTZBNzkyCis6MTA4QUYwMDBBMUZGQUZDOTExRkQwMDRGMkRCRkNGNzg3OTVEOTAxRDRCCis6MTA4QjAwMDA1NzYzRjgzQTlGNzUyODc0REZEMzY3RjJERTAyOTdGRTQ5Cis6MTA4QjEwMDAzN0UzQ0ZCNTA4N0JGM0FEOTBFM0RDQzdERTU4OENGQ0MwCis6MTA4QjIwMDA5QkI3RENCOTBGRjFCRjI4NEVBNkVCRkZDOTdDOTYzNDhBCis6MTA4QjMwMDBBNDhGNDMyMUZGQUJDNUE4OTY3QzJFMDVDNjMxQzU5NUYxCis6MTA4QjQwMDA2MTgzRkI3QkUyQzNGM0YwRkRENTMxRUU2QjQ4MjdBNkQyCis6MTA4QjUwMDBGOEJCRjFCOTQ5ODVCOTc5Mjg1N0I2MDk0REIxNjg3Rjk1Cis6MTA4QjYwMDAzNEI4MDFBRThBNERCNjAwMUMxQTVDRTc4NUZFQTk4RUFBCis6MTA4QjcwMDA1OTcyMERGMTgwQ0ZBMTVFNjkzQjc1RDY4MkNGNkI3NEJGCis6MTA4QjgwMDA2RkU5QjhDNEU5MUQ0NDdGQTQ3NzgwRkVEMjdERDhEN0IxCis6MTA4QjkwMDBGMDYwMTFBREQ2RkZFN0U5RUYxQjg5RjQxODk2RkUxOEQ3Cis6MTA4QkEwMDBGNzQ3RkU4RkU4M0YyQTY2MDhGQTgzM0Y5NThFRDczNTUwCis6MTA4QkIwMDA3RkFBQzUwNDdFNzU3NkEwQUZEMUJEREE1RTQ0RTMxQzAyCis6MTA4QkMwMDAyNjU4MTlGQTRGOUQxMDU3QTIxQ0JBQTNEMUI5NjEzQjgwCis6MTA4QkQwMDBFREZDNURGREJGM0YzQjBBNUM0MDM2MjkyNjg2Q0I5MzBBCis6MTA4QkUwMDBDOTNGMDZGRDhEMDkzRTg5RkNCRTA5MjBGMEY3OTA5RjI0Cis6MTA4QkYwMDAzNTkyRjQ5RDQzRTA4NzlEOTVBNEIzMTlEQzA1QkY5NjlCCis6MTA4QzAwMDA4MkZFOUYyRjE2RTU2MDgyQjlEMjg3RkNCRUMzM0EzRDMzCis6MTA4QzEwMDAwNUZEQjc1Q0VCQjQzNEU0QTczNzMzMUUzQjg0MjZFNzhECis6MTA4QzIwMDBDREU0RTUzQjVGNTEwMzdFOEVBNkQ3RjY4OTY5QjVGN0EzCis6MTA4QzMwMDA5N0M3NzBGQURGMEU2QTE2RkQzRDc0MEQ4M0UxRDBGNDFDCis6MTA4QzQwMDAzNzkyMDVFMTkwN0NENTg2NkI1NkQyQzdFRDdEODBBRjFCCis6MTA4QzUwMDBEQjExMEVDMDZCOTdDNDVBNTE3RjE3MTk5QzcxMjVFODIwCis6MTA4QzYwMDA4RkM1RkIxNEVFRDc3RDNENEEwNUJFQTk2QzdGRjczODUyCis6MTA4QzcwMDBDMjVCNjlCMUY5MzBERkMyMUNDNkYzN0Q0MUY5MTJCRDk4Cis6MTA4QzgwMDA5RkFCRjkyNTlBREZBRkY5MkQ1QTdDODlGRTBEREVDRjE3Cis6MTA4QzkwMDBDN0VCMDBCRkREMEMwMEEyRkRGMTU5QkMwREYwRkVFN0YzCis6MTA4Q0EwMDAyRkFCOTk0RTIxQUYwQUFDQTM1MkFDNjMzNkVCMjVCODdCCis6MTA4Q0IwMDBEOEI3RDdBRTREMDNGQUNDMTJGOEE4RUM4NkI4MzAwNzc3Cis6MTA4Q0MwMDBFRjMzNzYxN0UwRTEyRTg1Qzc4Qjc3MzkyMDNFMENFMjMzCis6MTA4Q0QwMDBBM0Q5OTM0M0ZCRjg5QjlFMTA5OEU3N0FFM0Y1RkE3RkJDCis6MTA4Q0UwMDBBQUM4MTdGQ0IzNzFBNkQ2NzY4MzFEM0EwRDBDNzBCMEQ2Cis6MTA4Q0YwMDA5RUM3MzQ4NUEzNjU4RjgyRjE4MDNCRDM4MEZDNTgyN0MzCis6MTA4RDAwMDBFQzFBODRDOTQzREIyMzIxQUY4NTg2QkUxQzA3RTBCNzdDCis6MTA4RDEwMDA2QkNGMzc2NEZGRjZFRUY5RTYyM0Y0RTdBNjdDQTEzMENCCis6MTA4RDIwMDAzMzNDNUZGODQ1N0UxNEVBMDdFNjBBOURCN0VFOEZBRDQ3Cis6MTA4RDMwMDA1NkM2QUYxM0ZGRDQ4QUI1RUZBRkM3OEMxOEMyNjdBMTcwCis6MTA4RDQwMDBGNjM3RTc5RjVGOEZGMzdENzk0NkUxQkMyRERFNUY2RURFCis6MTA4RDUwMDA3MkE3REI2REQ4RjI3ODdGQkZDNEZEMURFREZFN0UyM0M4Cis6MTA4RDYwMDBDMDBERDczN0M1Njg3MTdGQUY0MkY5MTlGODk5ODNFODBDCis6MTA4RDcwMDA3QzE3QzZGQkI5MDFCQURFNzVBRUUyMEIyNTY3MzA3RDA0Cis6MTA4RDgwMDBGMEY3RkYyM0RFRDdFMkZDQjc0NEZDQzBGNjlEMzBBOTI0Cis6MTA4RDkwMDAwMEQ3OENENjQ3MTRGNEEzNjcyNEM5Q0MxOUY0REUzQjYyCis6MTA4REEwMDA1NDJCNzMwNkM1RkI2RkM0RThGQzkwN0RBRkFEOUYwNUU3Cis6MTA4REIwMDA3NkE0QUU0Nzc2ODRBMUJDQjY2RjNGOTQ4M0ZENUVEOTlFCis6MTA4REMwMDA2MTFEODI4RkY0Rjg5REQxRkU4ODgyRkM5RjEwQ0JFNTU3Cis6MTA4REQwMDBFNjdBRUYyRjFDMDc3QzcyMkJEMjlEOTExRjc3QjE0MDUyCis6MTA4REUwMDAyMjM5RDJEMzc3RUY5RTlGQzdGNjY1MEY4RkVGRTFFODY4Cis6MTA4REYwMDBBRkE3QzM2RkNFMTc0NzIxNUVBRTQ3MEYzRERGNzZDMkU4Cis6MTA4RTAwMDAzQTNEQjAzRTFGQUNEMzAzRkVENkRFN0EzQkY1REZBRTczCis6MTA4RTEwMDA0RkEyQkVDNkFGNzUxREJGOEM0NTdGNERFM0QzQjI1ODgwCis6MTA4RTIwMDBDRTM3NTM3NkFGOEY2NUI2MDBCRDM0N0M1RDE0NzRBQjFFCis6MTA4RTMwMDA2NjhFRjlCM0UwQ0Y1RDkyMjM4MkY0ODQ4N0Y1MjYxNTIwCis6MTA4RTQwMDAwNEVDNTVGNUIxNzJGMjMzMzQ3QjU1MkQ2NzFCNTFGRjlECis6MTA4RTUwMDA2QUY2MEFEM0MyQThDRkY0RjY2OTdFN0E5MTExRDVBQTMwCis6MTA4RTYwMDBERTJFQzEwMjhEQzhCRkQ1MEI0M0FGNTdGNDM0MkIxMTkyCis6MTA4RTcwMDBENDMzMTA5RDI0NDlFMDQzRjhENTFBM0MxRjMyMTdDMTYyCis6MTA4RTgwMDBBQkE3QTcwNjlGMUUyRUNEOUZBRTE2NzQ4Mzc1OTZFMUU1Cis6MTA4RTkwMDBEMkU3QUE0NUI0OEU0MTc2NTVBQ0Y3NDZFREE5MzkzNkVFCis6MTA4RUEwMDAzNENFQkE3MkFFRjRGRDlDMjFGODc1MzhCRUQ1REZENzRBCis6MTA4RUIwMDBGNDQwMzlCRTIwOTc1QTBGRkExMTA5QjEwOTQ0QUZGMkI0Cis6MTA4RUMwMDBBQjI2RTYwNDdCQzE0Njg2QjFDRjgyRjNFRkFGNjQ5MjU2Cis6MTA4RUQwMDBCRDdCNTREOERGRTFGOEE2RjZBQTgxQjk2MzAzRkM2MzMxCis6MTA4RUUwMDA2QzdCQ0U4QUZDQjM1QjY5QjY2MkRFRjEzNkRCOUNDNjc2Cis6MTA4RUYwMDAyOEMwNTNFOTFGOEJFN0ExNUY1N0Q3Njc2MDk4OUEyQTZDCis6MTA4RjAwMDA2QkJGQjQwRkUzRjZCQUUzQ0M4MUZBQjBCOEJEQUIwNEUzCis6MTA4RjEwMDBGOUVENkRBNTU3QTYzOEZBNEJDNjlFMEJGMjBGREJEQUJBCis6MTA4RjIwMDAxQkFERTgzRkI1QzVDOTE0QTdFRjhGRTZGQ0E4REQ2RjAwCis6MTA4RjMwMDA4OUU1RkNENzc2RTZGMjJDRTcxMEY3M0YxM0Y3NEI0RkE1Cis6MTA4RjQwMDBFNTFBRDE0OEY2Qzc0NzUwQkVBMUZDNjkwM0FEQkY1NDJFCis6MTA4RjUwMDBCMjU3NTVBMkZGNzE4NzkxRkM3QTg4NUJGRUYwN0RDQ0Y5Cis6MTA4RjYwMDAzN0I1OTlCNzYzQUFCRUFDRUQ4NzhGRDg4MTEwMkRGRkI2Cis6MTA4RjcwMDBFN0IzMDYzM0U2MEZFNjQ4OEU5NzYxNUNCOUVBRUZDMkM1Cis6MTA4RjgwMDA3RUY5QkM1NERBODc5OUY0N0Y2NUYyNUZGRDc3NEI5NEU0Cis6MTA4RjkwMDBGNzI4MDc3NkMxN0VGOTNEQTk1RUNDM0ZFQzkxNzhERkRBCis6MTA4RkEwMDBEM0MxRjNGRUNDRUU4OTlEMDVFRkY5QTAzMjc2QzIzQTJCCis6MTA4RkIwMDBFMjI5QUQ3RjRCRUUzQTI2MTgzODI4OUU3QTZDMTdERkVGCis6MTA4RkMwMDAzRjdBQUM0Q0EyRkRBMzMyN0IwQUYzMDRGMTU1RjlEM0VFCis6MTA4RkQwMDA0MENGM0NFMEM3RjZDNDYyRTRERkFBMEE5OTc5ODNGODdGCis6MTA4RkUwMDA3QUJFQ0JDQUJDNDFFM0Y3ODc3MTc4RkM5MkQ5OEJGOTgyCis6MTA4RkYwMDAxMjRENUU2NzBBRkVBRTVFMTgxQjMyN0UwRUUzN0VFMjA1Cis6MTA5MDAwMDA0MkQ2NkM0NEY5QUUxM0YwRDQxNTAxM0NGMEZDNEMxMTdGCis6MTA5MDEwMDBBN0RFRUQ0RTA5Nzk2RjI1NjY0MTYwNjg1NkRDNjhCMkJGCis6MTA5MDIwMDA4RkIzQkZFQzIzQjMzQTQ3M0U3OTZDMzFCQzg3NjU3MDkwCis6MTA5MDMwMDBGOUQwRTRBQzRDQUU2OTIyM0U0ODkyMUMxODFGQ0Y5NzgxCis6MTA5MDQwMDBDMEFCOTQ1MURGODVDQUQxRUNDOUExRkQzOTRFQkQ3RUJDCis6MTA5MDUwMDAwODk1NzdCRDFFRDdFNDdDN0U4NzZDQzQzODdBN0U5MUY0Cis6MTA5MDYwMDBFNDYwNDNFODAzQkQzRkFERDcwMzkzMEM4RTc3MzBBRTg5Cis6MTA5MDcwMDA5RTdCRDU0OUZDMzU0ODBGOUNBQ0Y4ODdGNEMwNUIyMDNCCis6MTA5MDgwMDA1QjkzNDE1RTdGQTRFOTgzOUJEODREQTgwRkNBRTQyRDcyCis6MTA5MDkwMDBFQjkxM0ZGQUMxQUU5OTg3RTAwRkNEMkU2OEYxNzYzOTlBCis6MTA5MEEwMDBDODI3RjIwMzNCQ0ZGNzI1Q0FBRTgyOUNDNjA2RTJFRDg1Cis6MTA5MEIwMDAwMUZEMDA3RTgzNjMwODdGRTY1N0IxNjkyMUZCNDkwMzA4Cis6MTA5MEMwMDBGQTIyQzg2RjMwMTZGQ0YzN0U0MzE5Rjg4QkE2NUM4NDM1Cis6MTA5MEQwMDA2RjI0RjNFNDkxOUVBMkZDMUVCNDNFQ0FCMzI1NURBMkE4Cis6MTA5MEUwMDAzQzRBMURDNEYxMTRDRkIzNUYxMjVDQThEN0E0OTgwMDBBCis6MTA5MEYwMDBERkVCRkQwOTJENEYzQjQyRTQwOUY0RkMzMDkwQjc5QkI4Cis6MTA5MTAwMDA2N0Y0MjI5RjY5RkM1MDZFRTc3MjUxM0U0RkE2RkNCOThFCis6MTA5MTEwMDA5RTNGQjRGNzVEOEYyRjdDMTJGMDg1RjQ3N0Y4NDJDODNDCis6MTA5MTIwMDBEMzhERjJDNTIxOEQxRkQyNTlGQThERjA4M0M2MDcxQTRGCis6MTA5MTMwMDA1RkU4RURDNTQxNURERTY1Mzg3QjcxRjIzQUY2RTI5RDkwCis6MTA5MTQwMDAwQzIzRTk2NUJEOUREMEVDQzI4MTM4QUU3RkM3QzdGMjY0Cis6MTA5MTUwMDA3RDhBOTk5OUYzNkRFODU3OEM0MDdEODBGRTlFQjAzN0VCCis6MTA5MTYwMDAwMzc5QTMwRDlDMEZERUU5NUJBQTQ4NjgzNzUwMEZBNDcyCis6MTA5MTcwMDAwNkUxNURFNDREMzVCRUFCN0Q5QTUxRkVCMDUyRTg5RkVECis6MTA5MTgwMDA4QjFEM0M5RjU2NTcyQTdCMkRGMDY3NDlGQjczRUI3OTZCCis6MTA5MTkwMDBERjQ4RjlCNjIyQTU0QkIxQzBCQ0IzMUQ5MjAzRjMzNTJECis6MTA5MUEwMDA0RTkxN0Y5Qjc1RDVFNDU1MjkzRjNGRjQ3RTdBOTVFMDNCCis6MTA5MUIwMDAxQjhDNzM3MEZDNkNBN0U0ODUxMDc0OTAxRUFBQkFDQTRECis6MTA5MUMwMDBFREJFNUUxRjU1ODlGREYyMkFERDdFQjkyOTRFRDBGNTMwCis6MTA5MUQwMDA2Njc2RjNCRkQyRUVDN0M3MjU3MEI5MTk4NjhFREFGMzZCCis6MTA5MUUwMDAxQTFEMzVGQTREQzBCMTI4M0ZGQkJFMzZBOTExREMzRjMwCis6MTA5MUYwMDA0NkZBQ0RCOEFBRDAzQ0EzRTI0MkZEOTYyRkNGRTdGRUI3Cis6MTA5MjAwMDAyN0M1NzQ2MjdDNURGQjI1OTM3QkZDRjBGMDVGQ0YyRjVDCis6MTA5MjEwMDBCRDU5RjNDMzg1NUZBRUJENzcyNkM4NzgwQTNBODYzQTUyCis6MTA5MjIwMDBGQkExQkRFN0JBRjY0MjNDQUZBN0QzRTRCOEQwNzg0MjgxCis6MTA5MjMwMDBBMzg3QTY0NzA3RTE1QkU4RDlFMUU4NzUzRDNEQUJFOUM3Cis6MTA5MjQwMDBCMzdGQjU5RUQ1RTZEN0VDODBGNjVFQkRGRTFEMkUzRTAzCis6MTA5MjUwMDBEM0Y0RTk1MzFCMEQ5NDE3Qjk0REM0QzFCNzg5M0NFQjQ2Cis6MTA5MjYwMDA4MzQyQ0U5NzBCN0REQkZGMTc4QjAxRkRBQzZEOUREQzQwCis6MTA5MjcwMDAxRjcxOThFRDg3RDA2RjA4RTRGMzM4NUQ5RjhDNjAxRUY2Cis6MTA5MjgwMDBEQzJGNjc0QUFGODVGNjJGOEI4MUE0Qjg3Rjk5Q0NGNzg2Cis6MTA5MjkwMDAyRkI3MjgzRTE3RTk2OTg3QzIxQTQwNUVGRTJBRjIxNkU4Cis6MTA5MkEwMDA0RkVFRjUyQzQ2M0RGREU0RTkzMTA2REE0NzU3N0NCRDJCCis6MTA5MkIwMDAxODE3NEZDQTU1NjgzRjI4REFBQzUyQkVGNzYyODdEOUYzCis6MTA5MkMwMDA4RUNGRjVFRkZFNUU5NzExRTdGOTBCNzM2MEE4RjY3Njg3Cis6MTA5MkQwMDA4Nzc5NjAzRjA2RjU0Mjk5REMyMzYzNUVCRURGMEZCRUVGCis6MTA5MkUwMDAzODhDOUZCNkQwNTc4MkYxQ0U2REFDQjcxMUUzRUE0MjBECis6MTA5MkYwMDBBNEUzMTBGNDdCNTU2NzVGRjQ3OUZCOTIwRUVFMjc5NTlCCis6MTA5MzAwMDA0NEYwQkE5RkU5ODA0NjdDRUZGNDM2MTNGOTg1RDdDQjU5Cis6MTA5MzEwMDBEQjE3N0RDOUM4NUYxQTk0QUY2RkUzN0EwNjA2MTE5RjA5Cis6MTA5MzIwMDBEQzY4REVCRTEwN0QzREUwRTM5RkU4RjQwRTFCMjY3Rjg3Cis6MTA5MzMwMDBCRkNEQzRGNzczRkM0NzhDMENGRDVFNzYyRTZFQzhCQ0E3Cis6MTA5MzQwMDBDQkY1RjJGOEJCM0JDMzlENkEyNEVFQkI3MUZGN0M3NzgzCis6MTA5MzUwMDA2N0IyNTNDRDE5N0U3QzRFOUZCRjE4RjM5NURCQjZDQzE4Cis6MTA5MzYwMDA1NTI4NEUxNEY5Q0Y0MUZCMjIzQUZDRUQ5MDU4OTMxNTQ1Cis6MTA5MzcwMDBGMzY5RUQ4RTUyOEMzRjg2REJFNzI4RjYzQjY5REUxQkY2Cis6MTA5MzgwMDBDNTFCNjNDRDlDQ0VBMjdFRTk3NjIxNjNEQkNFODYzQkY2Cis6MTA5MzkwMDA5MUJGQjc5RDRENzYyMjNDQkIwNTdGNkFGQ0JFRkJDQ0RFCis6MTA5M0EwMDBFNTcwREFDRjM0Mzk1NURDMDdGNjQ3NUIxQzJGMTNCRjY1Cis6MTA5M0IwMDA3MjNFNkYxOTMxQzY4QkZCQUREQjg1M0M2QzBCRjcxRjIyCis6MTA5M0MwMDBDQzhBMEJERUNGRTBGQjE3OURGNTlFQUEzM0U5QjRERjE0Cis6MTA5M0QwMDAyRDYxQkU1MURCMjdGNjgwQkM1MDVENEUwQzIzN0UzMkUyCis6MTA5M0UwMDBCMjE2ODZFRjZENzRCMjlGNjMzQjdEOUExQTg1RjhCRTA0Cis6MTA5M0YwMDAxQ0E3RUQ0N0FBNTE5NDY3RjhGNjRBODE2QkZDNjBCQzQ0Cis6MTA5NDAwMDBFRkE4Nzc1MTNENDk2QkZEQzIyQTA1NjA3Q0IzREU0RDY0Cis6MTA5NDEwMDA2RDVCRkQ3MjZBRjdENEFGQTZGQjZCMEY0NTNFOEU3NjhGCis6MTA5NDIwMDBCRkNFQjlBMDRBMDlEMjFCOUZDNUYzRkM1MjZFRDZFOTQ0Cis6MTA5NDMwMDAxMkU0NzNGNjBENjMxOEVGNEM3RkEyNEY0NjNENzFGQkFCCis6MTA5NDQwMDA1NTU4NDc0OEREODg3MjE5RjE0Q0Y5Q0JCNDQwM0Y1NTY3Cis6MTA5NDUwMDA1QTEyODY3Qzc5RkI1NUU4MDc4RDk3RTJBMzM5MUQ5QTRECis6MTA5NDYwMDA5NEE2NUIwQTQ4NUE4ODFGQzJFMjlEMTdFM0UwRkEwRkYwCis6MTA5NDcwMDBFRDJFN0Y1QzNDRjI0MUY1QkUwQjhDRkE5N0YxRkEwRUIzCis6MTA5NDgwMDBFOTZFRjkwMjhDQ0JGMzE1NTFERTM4MEZGM0M2QjkzNDBGCis6MTA5NDkwMDBFRDYyQzRERkM0MkUxM0VEN0I2QkY5REI1QzMxQUZGM0ZGCis6MTA5NEEwMDBBQkQwM0M3MjlFQzhEQkJFQzlGQTI4OUY5QzZGODFDMEJFCis6MTA5NEIwMDBDQTgwNzA3MUZBMzlBNUY5NDkxMkU2RkJFMjREMEVBQzhCCis6MTA5NEMwMDA1Nzk4OThFNkNBQzM3QzZCNTczQ0EzRkM2OTU3NTdDMkIwCis6MTA5NEQwMDA0ODE1RjBFMDU0Nzg1RUQ3QTlFNTc1RDlERkNGRUI3NjczCis6MTA5NEUwMDA3RjFBRTkyMTdEMDU3RTBBRUFBN0VFQTM5MTBFMUZFRDAyCis6MTA5NEYwMDBGRjU5QzhGRkRCODEwRjYyN0Q0MzM4QUYxNzYwRjNFNjg5Cis6MTA5NTAwMDA1MTFFRkQ3NjBCNUYwN0Q4OUZGODc4Q0FGQkY5RjYxRDUwCis6MTA5NTEwMDA4NkU3N0U3Qjk5RjE3REM0REU5M0I0M0Y1RDYyQzg0Q0UzCis6MTA5NTIwMDBFQzAzMzhGNzQ5NjNBM0IwN0RGMUQzQzg2QzZBOEY0NjZBCis6MTA5NTMwMDA5RTQ3RkM3NDFBQUMyQUJFRjdDMzdBNTY4NTc1NjdDRTZGCis6MTA5NTQwMDBGNzZEQjQ5RjMxRkQ3RDlCODJFREUxRkEzRUFBNDc3QjJBCis6MTA5NTUwMDBCRkZFMUNCNTQ3RUFGREQ0MUVBREJGNEFFRDNCNzAxREYyCis6MTA5NTYwMDBGOUU3MTAzQzhGNkRFRUUyMDg3QTZFQzdBMjA4MTNDMkNECis6MTA5NTcwMDBEQjE5QzlCNjY4RUZDMTdBMzM1RkI4QUYxNTkzRjlFRjVECis6MTA5NTgwMDBDNTdGQkVDRTcyMTNEODNCQjM3QkJDMzQ4MUIxMTNGMTFGCis6MTA5NTkwMDA5RkNGNTRBMDdGNjhDNkE4N0ZGRjBCRENGRkRENEYyRTU2Cis6MTA5NUEwMDBBQ0IzMDA1Q0YzOEVEQTVBN0JBMEZGRTk0RjJFQUVCMzZBCis6MTA5NUIwMDBBMTlFM0QxNDBFQ0EwRUY1NDZGRjQxOTA3NDk2ODczNjYzCis6MTA5NUMwMDAzRDk5NzEwNTNCMTlGQUIxQTJFRkU5OUY1OTBBMjQ1RjUxCis6MTA5NUQwMDA1MEQyOTdDNTgwQjVBNkZDQzQzRkQzMDI3ODVDNjA3NUI1Cis6MTA5NUUwMDBGRjFCRjY0RDlFOTc2Njk2REU4NDdERTZDMTdBMkVCRjAwCis6MTA5NUYwMDA2NEE0Rjg5RThEOTRFMkIwN0U2NTk5REQ3RDJDM0VDODEyCis6MTA5NjAwMDA3RTNCQTUzRkQyRkU1MTgxNTM2MkQxNzE0NDU3REFDRkUwCis6MTA5NjEwMDA2MkY2NTNCMUMxRjJCNkNDNUU3NjBDRTk3MTQ3M0NERjFECis6MTA5NjIwMDBCRjlBMzg0RDcyMDZENzQ5RThDNzREM0NBMzk2MjI5RDk0Cis6MTA5NjMwMDAwQUNFOTUzNzYxM0JCQjIyOUFGQUFFODU5MzlBNTA5RTJCCis6MTA5NjQwMDA0QjZEQzMzRDVGNDJDRjJGODgzNzEyN0YxNjJCNTI0ODk4Cis6MTA5NjUwMDA3RDg4N0U1QzFFMzAxM0ZBQzdGRTAzRTE5NDE3OTg3ODZDCis6MTA5NjYwMDBDQ0REODg3NUEzNjU0OUE5QjlCMkQwNzk4Q0ZBRDExQjM0Cis6MTA5NjcwMDA3MTFGNkQ2MkU1ODdBNUIxMjgzRjM2Qzk4MUU2QTE4MERCCis6MTA5NjgwMDBGNTM1QzVDNjYxRkQyMzE2NDRFMUJBOUUyQkMxRkE5RDhFCis6MTA5NjkwMDA4OUFBRTQ0MEI0MTUzOUJCNUFGMUY5MjI0Nzg0QTMwOERBCis6MTA5NkEwMDBGREYxNjM2QTI5OUE5Q0EzQ0E4NEMzRjkzMDZFNDZCQTU1Cis6MTA5NkIwMDBFQ0IwQzA0NDQ3N0Q3NzRDQkQwMEZEQTI4QzI4Q0FFM0M2Cis6MTA5NkMwMDAxNjI5QUJBRjFDQTY3RTg0QTM0MUM1NzU2Q0ZDNzkyRDExCis6MTA5NkQwMDBDRDYzMjY3QkJFNjM1NkM5N0YyMEZGMTRCQkEyMjhFNzVCCis6MTA5NkUwMDA1NzZBM0IzNTM3QjgyRTBDRDY0RDcwMTdEOTY1NkY5ODMxCis6MTA5NkYwMDA4NEZDRkQ4MzUyM0JGNDc3OEM5MjE4Q0FDRjUxNUZFNjBECis6MTA5NzAwMDA5RkU5N0U3N0I4MUEwNjgwRUUzMEQ5NEI3MUJFMUQyNkQwCis6MTA5NzEwMDBDOUJFOTZGQUFFMTIxQ0VGMTk2MzU0MzE0RjU0MUVGN0FFCis6MTA5NzIwMDA0NUM4RkMzMzRBQTUyOTY3MTBGRUVDQTgwOTc4QUQ2MjRDCis6MTA5NzMwMDBFNEE1OTBGQjNEOEJBQzY0MjcyQURGQ0YyNjdGQTg2NzhBCis6MTA5NzQwMDA1MTBBRDk4QkNBRjdBNzE1NjNEQjYzRTA3RTdBRTVGQjg0Cis6MTA5NzUwMDA5NTE1NzRERkMwRTNERkNBQzVERjcxOEEzRUM1QkI5NUNFCis6MTA5NzYwMDA4QjU3NTFCRjRCNEFGQzc3N0NERjk1RUNBODVDQ0NBM0IwCis6MTA5NzcwMDBDRDRDRkY3QUFFMTJFQ0ZGQURDRTI0RjlDRjE1NzlCQ0ZCCis6MTA5NzgwMDAyMjQzRTZGQTY5MDBGRkEzMDdGODNFNDQ2NUI2MTQ1Mjg3Cis6MTA5NzkwMDAzNzM3MkJGRjU0NDgzREE4NkJEQTE3MjFGREI5QTU5NzQxCis6MTA5N0EwMDA0MkVBNDNFNzU1N0UxREQyNUYzMDRGQUEwQTFFNUY3QTE4Cis6MTA5N0IwMDAyMDlGRUM2QkJFQTg1RkQyRjI0QjQ1ODI4NURFQTlDRjFECis6MTA5N0MwMDBBODJBMDVCOTNDMDBFRDAzQTAxRjhBN0E0NURFNTVFMUMxCis6MTA5N0QwMDA3MTc1MDZGQzQzM0Q1ODZBRDNFNTc3OTk0QUZCRDkxNTY0Cis6MTA5N0UwMDBERDdDREZCQTNDQ0U3ODNBRDgzRTU0Qzg0RjcwN0Y0MTFBCis6MTA5N0YwMDBCN0ZFREMwMzQ2QjI5M0I5RDEzMkU1QUIzNEY4MkE0NjYyCis6MTA5ODAwMDA4NjNFQUZGOTVGMTUwMkNFMUQwNjc3NTMwQ0U1Qzc5QzY3Cis6MTA5ODEwMDBCREU4N0Y2OEYwNkJFRkQ3RTBBRTkwRUYyOUE1RURCRjE0Cis6MTA5ODIwMDBFQkMwQUY4NzE3MDAyNUZGNEQwRkM3ODE3ODExODc4MEU4Cis6MTA5ODMwMDBCRjQxRkU1OTM3QUY0QjgzNUZEQzUwNzY1QkYzQ0YyQkQ0Cis6MTA5ODQwMDA0MTRGNDUwN0VCMjk5QjE0ODdGNTc2QzNFOTI5NkRERTY3Cis6MTA5ODUwMDBFMUZDMzA2RERFNjU3NjE3M0RFRkRDRkFEOUQxNDIzOTk3Cis6MTA5ODYwMDBBODlGN0EyQTM2MjZCOEZGREE2N0VCNDNFRUM3OUZBQThECis6MTA5ODcwMDA4QTBFRUU2RkZBQUMwQUVGNEY1N0Q0NDYxQkYwRTM0MTY1Cis6MTA5ODgwMDAyNjM5M0NDODlGM0RBQTgyRkJDRjI1Qzc5QzRERDg5NjYwCis6MTA5ODkwMDA5RDc0NjM5OTI5OUI3MUM2RDM4NEVERDRGM0RFMUUzMzg2Cis6MTA5OEEwMDBBQ0VCOEUwQzU5QzVCODVERjMzRkY0RjA5QTEzNzgxQ0ZECis6MTA5OEIwMDA3MkYwQUE2QUM1RkREMzFEMUVENThBRkVGQjhFMjc1NDAxCis6MTA5OEMwMDAyQkZBMUYzQjlDQUMwMkUzMzE2NzlBNjEzNUZBRjNDRTY5Cis6MTA5OEQwMDAyQzVFNjc3ODU1RThFMTZGRTJGOUYzNUE3QjVBNzE3RkE1Cis6MTA5OEUwMDA4MzdBMTFFQkMyRDEyN0E4RkREQTRGNzVFMDA3RDFBRjFCCis6MTA5OEYwMDBDQTFFRUM1NzFENTRCQzM2N0NERkMxMjdCQ0I2RTA3REM4Cis6MTA5OTAwMDBDMjFCRjVBQkZFOEMzNjNBMUVGOTZDNEU4ODdDOTY1ODFECis6MTA5OTEwMDBFRUFFMEE5NkVGMzJGQjkyOTBGQjlGQzZBOTA0RkY4QzM1Cis6MTA5OTIwMDBBNDg3NDNDNkREQTEzRTEyRDIwNzdGMzEwM0ZEOTE0NkQ1Cis6MTA5OTMwMDAxM0EzM0E1OThGODFEN0M5RUFGMUY4QThDMEEzQzM2NjI3Cis6MTA5OTQwMDA0NzM3ODYxOUUzNTRBQTZCRDM4RjczOTQ3MEZDRTlBRjQxCis6MTA5OTUwMDBBNzI3RjBCODY4MjNDODBDQjZGNzI0NzBGOEY0NzVCMURGCis6MTA5OTYwMDBGQTNFQzQ3QzBCNzEzRTk4MzkwOUY5REM2MTM1NUMwMTIzCis6MTA5OTcwMDA1Nzk3MzkxMzkyRUVBNDdBRDkzQ0MzQTM2OUQwQUY0RTVFCis6MTA5OTgwMDBDOEUyRkRBOTg2OUQ1ODFGN0I3NzQyMzZFRkRGNkFDODgzCis6MTA5OTkwMDAzMzgyMUZGMDJCMzZGRTRFQUMwN0FGMEQxMzc1OUQwRkIzCis6MTA5OUEwMDAyNEQyN0U5ODE2REYyODg2NTMyRjJFQzYzODczOEY5MUM3Cis6MTA5OUIwMDA2MUZFRkUxOTEzRDhCRERDQzBCRUI5RDVDQ0UzNTJBQkY1Cis6MTA5OUMwMDA4OUQ3NkQzRjk1N0FGNDI5RDQxQjZBOTg3QjdBMDJGOTdFCis6MTA5OUQwMDA1MUM1MkFFMkVGQkNERDQyNzU5RDhGRUQyRTRCNDRGQTU2Cis6MTA5OUUwMDBERjkzQzBGMzVDNTkzQkE3MjZBMTdFRjkxN0JDN0Y1NkQ1Cis6MTA5OUYwMDBDMkM0RTFERjhGNzVCRTM4Q0ZGOTFENTlFNDdGNjdERDQyCis6MTA5QTAwMDAwQ0U4OTUwMkY4ODdGMDk4QUU4NzQxOTg0MEU3MjU5OEQyCis6MTA5QTEwMDAzMzA5RjM2QzhERDEyNjlBRTc5RTA0Q0U3RjM3REEwRTk4Cis6MTA5QTIwMDBBQUZCOEQzMkFDREUwRUVERkQ4MkZFMEZFMDdCMDk1RkZFCis6MTA5QTMwMDBGRTUxNzM3MDYzQ0VFRTFGMzU3NzNDRUYyMzdENjUzOUExCis6MTA5QTQwMDBENzhGN0VBQ0ZGM0IxMUI0QUZDMjQ2RkE2OUZGRTVFM0E2Cis6MTA5QTUwMDA3QkIyMUNFODlGN0UxMkNFRjFCN0QwM0JCQUIxNEZDNUE2Cis6MTA5QTYwMDBGQTBERUY0RDU4MkY5MTkxRThBRTQ1M0MyQzMyN0I2RkFCCis6MTA5QTcwMDAyMUZFQjFBRDhFQzBGOTZGQjQxRTc4RjA3QjIxODAwNDU5Cis6MTA5QTgwMDBGQTU0NEZFMUY0RDFERTBCMzhCNUEwM0RGODU4OUMwM0YxCis6MTA5QTkwMDBEMUUwODBGN0ZGMDBGOTQwODM2NzAwMEU1RDVEQjg5NjY2Cis6MTA5QUEwMDA2N0FFRkJBMzgxRjIwQzc1MTJFODNERThFRjNDQzkxQ0UwCis6MTA5QUIwMDAxRTk4RTdBMkU2QUY4QkJDMjY2RTQ1RTE3QkE2MUM1RTM2Cis6MTA5QUMwMDA1QTYyODMzNkJGNkQyNThGNzM3Qjk1OTAzQ0Q3QTRFMzk0Cis6MTA5QUQwMDA4QTdFQkY4M0VDRDY1NEVENzk1RDlFNzFBQTg4NkJBNzEwCis6MTA5QUUwMDBFQUUyREExNzEzODQ5RDQ5NjZDOUMxNzk4MDM1MjI2RThFCis6MTA5QUYwMDBCOERDMzMzQTBBRkQ0Q0Q0NTEzMkUwRDVBNENBNkM3MkJBCis6MTA5QjAwMDA0QzQwQ0U1QjIxRUU2NzQxNzFCRkM2NjdFMzhGRDlFRjUyCis6MTA5QjEwMDA0N0I4QzcxRjYzRjc5MTVERDdFNjFEQzgyRjcwQkM1Q0JGCis6MTA5QjIwMDAzRUNFRjEzMkExMkZFM0E3RDNBMDZGRUMzNjMyQUYxQUFECis6MTA5QjMwMDA1ODRGMjEwNzk1NURDNkZGRTA3OEJCQzk4Qjc1Q0IwNUYzCis6MTA5QjQwMDAwNzdFOTlFNzgzNEJFNjI0MDM1MzgzRjAxMEE2ODYzMzAwCis6MTA5QjUwMDAzNTQ4MkY1QTMzNjI0MkZBQjI4NjZGNjFDRkYzQzRGQ0E0Cis6MTA5QjYwMDAxMThFRTQ5MDc5RjZDNDk0NzdBMzdEQ0ZCMzJEMjdGQkIzCis6MTA5QjcwMDAxRTM1Nzk3NEM4M0NBQzQ3MDlCMUYzQjAyOERBQkY5Q0Y0Cis6MTA5QjgwMDAwODQwRkQwQ0YwNUE3MDRDMDlCMUU3OTNFMjNDQjg2MjEyCis6MTA5QjkwMDAzNkY5QTRBMkIzRkZDRDMyQ0E0MUUxOTlEMEVCMDc4NkQyCis6MTA5QkEwMDBBM0NCNzBGODYzMzkzRjQ1RkZFRTFGQzU1RkI0MzMxNDk0Cis6MTA5QkIwMDA3RkIxMTVBMUY4OEI3Nzg1RTIyRjcxNjEyODlFNDZCODk5Cis6MTA5QkMwMDA0M0YxOTJCMjdDNUNDOEZEOUI1NkU3ODZGNDZGN0VCQzg1Cis6MTA5QkQwMDAzMDY0N0MyQTE4QTRFMDdFREFEMzMzNDNDNkRGRDIzQzVCCis6MTA5QkUwMDAzN0E0M0Y3NkMzQTI5MEYxOTlERUE1MjFGN0IzNUU1RDVECis6MTA5QkYwMDA3MTQzRjQxRURGQjIyNjY0OUM5RURFQjdCNkZEQUY5MEMzCis6MTA5QzAwMDA3OTM1N0E3QkUwREZCRjgyREVFNkM0NTA3QUE3MEFGREIxCis6MTA5QzEwMDAxQUVERTRGNTY1RkQ0NkRCRDMxMkU4MjM0QzEzQTE1RTkzCis6MTA5QzIwMDA4QjZFN0ZGNzZCQ0M0Mzc4OEE1NUFBOUZGM0NDNjRCNEQ0Cis6MTA5QzMwMDAwRkZEODJFQzkyNTAwRkE1QzAxNDg2MzRBQTVGQTdGQURDCis6MTA5QzQwMDBCQjFGMUIwQzIxRkJFMjg5ODlEQ0JFMjcyNkYyN0NDREUxCis6MTA5QzUwMDBDRjRERkNEQzUyMEFGODhGNjQ4NzBDMkMxMDJGMDMxRUFBCis6MTA5QzYwMDAyMjMxNUVBNjc4RkFDN0NGNjBCQ0RDMTRERDk3QTE0MjMyCis6MTA5QzcwMDA3QzZDQzZGRTREMDE3REI5QzhBQzM2RjYwMTNFMjZDOEU3Cis6MTA5QzgwMDA1QzFGODI5RTRDNEI4NEY5M0Y5MTlFMzA3MjNGQzI2M0IxCis6MTA5QzkwMDA0NDNGMjJDNUMyM0M5MUI5NjQzRjI4N0YxQ0NERTIyNEQ5Cis6MTA5Q0EwMDBBQ0M3OEYwQUU4NjlGNTFBMTA2QkRGOEEyQzNBMDdGNTAyCis6MTA5Q0IwMDAxRTQyODJGRUFGMjU4NkVDRThERDlBN0U1QTlFNDlGQTY2Cis6MTA5Q0MwMDBFOUIyMkRENDBGQkJGQzQwMUE1RDNGNzFBRjk5RjZGQjkyCis6MTA5Q0QwMDA0Rjg4M0E0NDZERkRFNzg0REVGQTUzQkQ4NURBRjNGNTJCCis6MTA5Q0UwMDBGNjEwM0RCNjdDRTNGQTA4RjQxRjRGNjQ3MDdGNTFCQjU5Cis6MTA5Q0YwMDA1RTgyNzg5Qjg4QUQyQ0VDOUFDNThFRjlBQzdCQzAzODFGCis6MTA5RDAwMDA0NzAxQkU1Nzc1Rjc0NTJFNjJFNDM3MTZFM0JBNkIzNzQ1Cis6MTA5RDEwMDA1RUI5Rjc0REU4RDcxOUZDMDlEQzNFNzg3OEJEQ0NDN0IxCis6MTA5RDIwMDA4Q0ZDQ0ZFQTZGNTg4OEZGMzQzNzkxQzdFOTczQzVGQ0M0Cis6MTA5RDMwMDAwQkEwQjEwMzlFMTYwMEZFQTNCMTdENzc1QTM5RjIyNzFFCis6MTA5RDQwMDA1Q0E3RjM2OUIzQkIxOUQ1OUZDQzcxQTdEMjNFRTM1MTkxCis6MTA5RDUwMDBFNkY4NzAxNzgwRjg5RDQ0OTVFMDlDQzc1Q0I0NUZGRkZGCis6MTA5RDYwMDBEMUJEQUIyMjcwRENDMDdDREEzQ0MwMjhFODZGN0MxQzIzCis6MTA5RDcwMDBFRDMxMjY2MERDN0YxQkFGNkY4MEY3NTlGMEJBRUI5RUE4Cis6MTA5RDgwMDA5NDI3RDEwRTY5RUZGQjg4QjkyRjdDODhGQkREQ0M0MThECis6MTA5RDkwMDBGMzZBRjMzMzE2MTNBMjlGNzYyQzVGRjk2OTJDQkM2RjFDCis6MTA5REEwMDBDRDAxMDNFNTEzRDY3NDk4MjlFRUVBNUZGMUQ3QUQyRjA0Cis6MTA5REIwMDBDMkZERkI1MkZBNkU0MkJCRkNDOThBNkZDNjIwM0ZEQzczCis6MTA5REMwMDBCRDAxRjQxMEFDQjEzMENBRkQ3MDYyNTA5QzcyRTI4MUVBCis6MTA5REQwMDAyQjExNzgxRkVDRUJBNjE3RDEzODZFMzY1MzdERUYyNzg5Cis6MTA5REUwMDAyQjM2OEYwOUY2NDcxRjREMkNBQUM1RTdEOEU0MUIzQjNECis6MTA5REYwMDA2RjU4RjI3QTY2MjJENTYzMDk3RTdBNThGMEQzOUFEN0UzCis6MTA5RTAwMDBDNjkyMUZCNTI2NjI4MDlGNzg3RjEzQUZFRkQwRDZGMTQwCis6MTA5RTEwMDBBMUUwQzcxNUFGN0Y1RDEwN0NDRTc0MDdGMDkxM0E4NjQ0Cis6MTA5RTIwMDBFRjZCQTkyMDUzM0I3QjJFRTdFMEZENTcxNDc3MTNDMjVECis6MTA5RTMwMDBENzc5RjU3NDI0RjY3N0JFRjczNzgyOUZDREJCMzE3ODlBCis6MTA5RTQwMDA1MTA2M0QwNTgxRkQ2NUVERENFNUMyRjZEODNDQTQzQjNECis6MTA5RTUwMDBDODU5MzNDRUJGRTgzN0FGNURGODFERTJBNzYzRjNBNjVDCis6MTA5RTYwMDBFRkUzOTgxQjNDN0ZDOTg0N0Q3MTA4M0M4MDdEQTFGODlECis6MTA5RTcwMDBBMDlGODVGMzczMUQ0MjhGMkFCODgzOUU4NkU3OTkxQ0E1Cis6MTA5RTgwMDAyQUYxQjM5MzFEQzI3RDk3QzYyRTAzQzNCQTk1NDhEQzUxCis6MTA5RTkwMDBCNDA5Q0FCMzQ1Q0EwNkNEMDgzOTJENDlBMDlGODU1RUNECis6MTA5RUEwMDA3OTI1RjFFNDlENERFNEU3ODdGQTNERjk2RkFGMDhGMUJDCis6MTA5RUIwMDA3NzVDRjA4RkZDOUQ5N0RDOEQ5ODA3QkFBRURGRTMzM0JCCis6MTA5RUMwMDAyQzMxNDVEREI4RkYwMzgxQjA1MzJBMTA1QjM4RjA2QkFECis6MTA5RUQwMDA0QjE0RkIyMjQyMEY3N0EyMUM2MUZEM0ZDRTg1Rjk3QTFECis6MTA5RUUwMDA1RjM4M0Y2NzBDQTYwMkY1RjgwRjYwNERGOEIwMjk0NUMyCis6MTA5RUYwMDBCNEQyQzUwQzBCRThDNUJEODk3Rjc4RTY2OUQwOTM5NkNFCis6MTA5RjAwMDA3NEJFNUVFQzM3RTJERkREOUNERjA2RkNBQkI3Qzc5MUM5Cis6MTA5RjEwMDA5RTYyREZDMkRCMTAwRjIyNUZBMUE3NTMzRUM4MDc4QkYyCis6MTA5RjIwMDAwRDkyMzNGMUJDNkZGRkRGMjIzMTRGQkIzNTQ2N0QxRkYxCis6MTA5RjMwMDBFOUUwM0YyMEQzM0U0RDk4RDI2NzhBMUUyMjJFN0IxMzQ0Cis6MTA5RjQwMDBGNTlFODlGQjRENTQ2RkRFQzZGMzgxMTZENUM5MzAwRUUwCis6MTA5RjUwMDAwOEIzREIyNzA0OUZCMzZCMTdGQTZFRDVGRTRGNDY5OTAzCis6MTA5RjYwMDA4MDBFMTcwQzNEOTFEOTMwN0ZDREFFMUQ5MUU4QzZERjM0Cis6MTA5RjcwMDA2Qjc0N0Y4QTdDQjdGMkM0MDcwNTc2M0FDRkI2NzExNDRBCis6MTA5RjgwMDA5RDAzRjA4REE2QkE4M0YxMEFGMzI4Qjk4M0UxQThEQjFCCis6MTA5RjkwMDA5MDRCQzZCODc2MDMyNUUzRDlGOEY2QkM4NzUwMUZENTk5Cis6MTA5RkEwMDBGOUY4M0E3MTZFMkNGQ0NCNkM2M0Q0QkZEOEQ2MTg4MzA5Cis6MTA5RkIwMDBGM0Q1RkRCNjIzMTlFNTY3NzMzQzhGMTM1RkJGM0E4RTY3Cis6MTA5RkMwMDAzRkFGMzAwNUM3N0Y5OTE4MkRGOEQ5NkJDMDM4NjNCMzAwCis6MTA5RkQwMDA4ODRGMkU1RTM1RDAzOEVERkRFM0RCOEE2NDNCRjA0M0RECis6MTA5RkUwMDBCNkFGNzkyRkM1NDNFRDY2MTVFOTFBRjYwQUUzNzg2ODJFCis6MTA5RkYwMDAwRjIzMzlBRkVCOUNDMTMwOUZERjFGQ0QxQzEyRENERjdDCis6MTBBMDAwMDAxQUVFRkYwMzlEMzNFQjMwQUI5ODFGMERCMzM3QjMxODM3Cis6MTBBMDEwMDA5ODdGQUJEODBGQ0QwNDhFQzJGMzRBREE3NUVEN0Q2MTFGCis6MTBBMDIwMDBFRDNGQzU1ODAyRjk4MUYyQjQ2MTRBMzNCQkNEMTY4Q0JECis6MTBBMDMwMDBFNzA4QzI3MzNDRjI1MzNDQkVDNzY3QzBGQzg4RkYxNkZBCis6MTBBMDQwMDBDNjVFMjZCODAyNzAzMjdBQUYwNjY3MjZGOTczNUI0RDlBCis6MTBBMDUwMDBGRUIzNzg3RTA1RTBCMjIzRkQzMzE5ODc5M0I1OEY1NUEzCis6MTBBMDYwMDAzMUJFMEZCMzNCNjkxRDYxNzZENUUxOTEwNkMzNTU5N0FCCis6MTBBMDcwMDBDM0JDNjhCRjdGQkM5NjBEQzgyQkNBNkY1RDc4QTA2RjRDCis6MTBBMDgwMDAwMTE5RDgzQTlBMDlGOUI2M0Y1QjNBMkRCODBGOEE2NDlDCis6MTBBMDkwMDA3MkUwRjk3MTFCNjI5RTZEMUE0OTcxODM0N0M2MzgxNkNBCis6MTBBMEEwMDBEQTg4MTg1Q0E3Q0FDRjNCNjM2QTI4OTdFMzAxRjdDNTMzCis6MTBBMEIwMDBBRDE2N0U3RjYwM0NGMEI3MERGQjM2M0VDRTExNjVCNzI2Cis6MTBBMEMwMDBDRTk0NDg0RTI4QUY1NzJCRTRGRDMxQzk3N0Y2NzY5MEYxCis6MTBBMEQwMDBEM0JGRjhGNkU2QTgwMDRCQ0RCQjdCODg0RjU3MUFEQTAyCis6MTBBMEUwMDA1RjFDMEZGNzM3NUFEQ0Y5NDk4MENGQjc0RTFBRTgxQ0NFCis6MTBBMEYwMDBFOTlGNUUwQkYzNTY2MkZDQjg3QjYzODI3MzA4RjlEMDZDCis6MTBBMTAwMDBDRkZGQzNFMzZCOUY0RjQxRkFFRjk2NTRDQzlCRjYxQkY2Cis6MTBBMTEwMDBGREEzMTBERURBRjZDRjRENTQ4RkQwNzY4QUVBOTM4RTA3Cis6MTBBMTIwMDAyNEI5OURGODlFQzk2RDBEQjQ2RjNDODUzNUQzQkU3MUMxCis6MTBBMTMwMDA5NjM4N0ZERDkyQzRGNUM3RTU2MzYzNUU2RTA4QzJGRkEzCis6MTBBMTQwMDA4MzQ5REMwRjYzN0VGN0NEMjgzN0VENDIzRTNCRDEyRkFDCis6MTBBMTUwMDA4MTc2OTdGMDhGNzY3NUREOURBNjA2RTVGRDFBRDhERTJGCis6MTBBMTYwMDAxNEM0Rjc1QUY2MzZCNURBRjU3RTJGM0ZDRjk4RjU5MTNECis6MTBBMTcwMDBFNTNFNjcxMEZGQjk5M0I4OUZFNzE2RUZGMzI3QjkxN0NECis6MTBBMTgwMDAyNEExREM3NjlEMzY0NUFBNzg1RUE1NjUxNERBOTExNjgxCis6MTBBMTkwMDBGMDlGRUM0M0UwNjU0MDZFNzU3MjU0QTdGODREMzhCRUYxCis6MTBBMUEwMDBFRTFDM0Y3NzBBNzQ2RUMyRkFGRkNEMUZCNThENUIwMkJECis6MTBBMUIwMDBENzc3MDFBRUIxREVEMzczQzI0Qzc1OEZCQjhDQUUxNEIyCis6MTBBMUMwMDAxQ0RGRjBFMTU3MzlBOEI3MkExMDY5RjBCRkFGM0E1NjQzCis6MTBBMUQwMDBERThDNzgwM0JFMkYwRTQ3RjlEQUNFNDg4RjY5RjI5OUVDCis6MTBBMUUwMDA4REYyMDlDRjY3MjNERkU3NjMzRjkzRjRGMDU2NTMyRkQ3Cis6MTBBMUYwMDAzRkY3Qjk4QjlGRkIwNEJFMjczOTAwQkVCN0EzOUY5MEUyCis6MTBBMjAwMDA2RDA3MzlBMEU3Qzc5MjdDNkZFRDM1RDBGOTU0MEZFOEEwCis6MTBBMjEwMDBGMTVCQTg1RjVDODVGREFEQkRBNTc2OTI2RkNDQzNFNzExCis6MTBBMjIwMDBBMjlDRkFGNkQyM0MyRDEwODMyMEU5MjRFNjBBRjYxRjAwCis6MTBBMjMwMDBEQjEzMjM4OThGMzVGRDc4MzA5MUVCRkY5NjBDMzUwQUJGCis6MTBBMjQwMDBFQkZGQURCMjFDMjIxNzQxNzY5MEY3ODU5REVDREQ1MEY3Cis6MTBBMjUwMDBGQ0VDMEJEM0QwREUwOUJCMjBGQzI3NzY5Q0VCRjk0NzQ2Cis6MTBBMjYwMDA4NUFENUFGMzRFRTFFQzJEQjBDRTM1ODdFNTgxN0E2RTlGCis6MTBBMjcwMDBGNDU3N0Q4MjRGRjYwQUZGMTVFRDg0OUFDN0VCNjdGMDFECis6MTBBMjgwMDBGQUM0MERCQ0NFQjVDMEI5QkEwNENCMzgyNjU3MzRFRkVBCis6MTBBMjkwMDBDM0I2RDBENTUyODI2NzhFQTcyREVDRERDN0NGMUVGMzkzCis6MTBBMkEwMDBGM0UzQUQ3QkVGQzhDMjdERUFGRTEzNjY4NkZCMjRBRDA3Cis6MTBBMkIwMDA3RkYzRkZFMTc1QzBDMzc3M0IwMUZGNDNEODI1NTgwRUZDCis6MTBBMkMwMDBGMTFGNThFQTE0OTYzNEY4N0VCRkE0RTk4RkY5OTUyODU3Cis6MTBBMkQwMDA2RjE3NUJFNTQwMUZFQzYxMkQzMDM4RjY3RjlENTRGNTFDCis6MTBBMkUwMDBBQzA3MDA0QjFCRTE3QzFENTlBMjMwRDk0RDZERkY5MThECis6MTBBMkYwMDBCRjI1QTAyREQ4NzU4Q0ZCNERBRDI2NjcxNkYyNEZFQjEwCis6MTBBMzAwMDBFOEQwRjNGQTVBRkI2MjEyM0ZFNzlDNkY2NjQzRTYyNUZBCis6MTBBMzEwMDAwRjA5QkIzN0M2QzM5RTQxM0VBQTZEOTVFRDVFQTBGQkZCCis6MTBBMzIwMDA4NTU2RDk2OTAyRkZFNkFDRDM5RDgwNjc2NUNFMzFDRkYzCis6MTBBMzMwMDA4MkE5NjhFNzQ1RENBODdENEY2NTE5RkEyNzYwQTcxRTRBCis6MTBBMzQwMDA3QzYxNTAxRURGODA3Q0Y0NTBCQkM0N0UwNjZCNUVGRUQ5Cis6MTBBMzUwMDBEMkQwRkIwQTM1NjI5RTg3REIzNkVFNEYwMTNBQUU3OEVCCis6MTBBMzYwMDAyNTc0NUM4REE4MTNBQkQxRjkyRjg3OTI0NDdDOThDNkQ1Cis6MTBBMzcwMDBEMkQwMkYwMUZFMjFCRDYwNTQ1OEI3MTlGOEY1QzE2NDQxCis6MTBBMzgwMDA3NzA3QzYxQjlCQzU3NzBDNDA3RjkyMUM3NjA4QkVEQzA2Cis6MTBBMzkwMDAyQUVBMDRGQzVCMjVEQUQ3Q0I3Q0Q1MkIxQkUwRjk0MkZCCis6MTBBM0EwMDBDNTJCQTM5RDYyRDBFMjNFQzE2NEE3QkIxQ0YxMEJFQkExCis6MTBBM0IwMDAzRTg2RkIzNUNCODUxRTVDQUVGOTY1NUVCRTlGMDFFNjMxCis6MTBBM0MwMDA5NkZDQjIyOUNDREIxODg5RUI3RTU1NzJGODU0RkM4RUQyCis6MTBBM0QwMDBDOEEwM0E1QzVBNzc5RDU4NzdDRDg2MjNGQjMxOEM1QkI5Cis6MTBBM0UwMDBENTEyM0FBRTRFQUNCQjRFQjc2RTZENUZGQkNGNDlCQURECis6MTBBM0YwMDA3M0M4MzdCODZGRjE2NzIzRjcxMzNFMTBGMzY4RjdDREQyCis6MTBBNDAwMDAyM0I4M0VBQzA1RjA5MDZFMzU1RUQ5RUJFNTdFOUQwRDMwCis6MTBBNDEwMDBCRkMzNzNCRjgwRjc3RTQxRUYzQUU2MzNBNUMwQjg1NTlFCis6MTBBNDIwMDAyRkYwNzVCMjY3NDNFQjNGMUY2QzdEQzQ4NEYxOTU5RTlFCis6MTBBNDMwMDAyRjk2NkYzMTkyM0YwQTg4MzNBMUJGQThFNzhCMTU2MjMwCis6MTBBNDQwMDBERDJCNzRFQkFFNzU0QjNBQjhCODlGM0MxOEFFOTYwNTUxCis6MTBBNDUwMDA0OEQ3NTU1QjhDMENFQjExRjU3MDJENkI1OTUyOEU3Q0U3Cis6MTBBNDYwMDAzNjk4NUYzOTVENTY4OEY5MDI3MEFFQTY3MzdDMzcwQTVDCis6MTBBNDcwMDBFN0E4MTE4MjJGQzdCMTcxNDQ5NzhBRDgxQkEyOEJERTNGCis6MTBBNDgwMDA4RkREQkU3RjlDMTVFNUZCNzJGNzY4OEFERjM1QkFFQjdFCis6MTBBNDkwMDA5RjJGMTc3RUYwOEMwRDhDREEwQjZEMjVENkYxMThBNzQ3Cis6MTBBNEEwMDBGNDE4MUM5MjRBRjE1NkU0NzhDMDQ3NUU4N0NDMkFBMTgyCis6MTBBNEIwMDBERkRGOUVCNkRFMDM3OENGM0Q5QzVGODVGMTdDREU2MUY5Cis6MTBBNEMwMDAwMzlENzdEQkQ5OUQ0RkZCQzA3OTA3RDI2M0QzMjgxRjRCCis6MTBBNEQwMDBFREEwRUZDREMwM0M2NDNGRkI3QjcyRDdFM0I5ODBGRUJCCis6MTBBNEUwMDA5RUQyN0M5QzU3ODI3MTY4RTc3Mzg1MUQ2OEU4QzlCNTY4Cis6MTBBNEYwMDAwNjlGRUYyRTE4QzFFM0Y1QTc5MjNFRkIzMUZBRTEzMzM4Cis6MTBBNTAwMDBCNjFCRTk3Q0MzMENBM0ZGM0RBQzlGREFEOUFERDBCRTJFCis6MTBBNTEwMDA3NUNERTFBNTZCQzM5MEFFQUY0OUI0NkZCREJGNzc0REFDCis6MTBBNTIwMDBEQzYyRTRBQjc2QTMxREY3QTFGQkRCRkY2RDJGREVGNzRBCis6MTBBNTMwMDA2QzkxRTg3QjEyNzUxRDY1NTk1QkExOUZCQjMxQ0YxMUYyCis6MTBBNTQwMDA3Q0RFMkIzNzVBMjVGOEQ4MDgyQkM1QzMzMzZFMzI5MkUwCis6MTBBNTUwMDA1RDNDOUY2Q0ZEMjVGQTM3MkI5QzFCNDk4RUNGRUZEOUI0Cis6MTBBNTYwMDA2OUEyRkFCOUFEMTI0M0QzQkYzRjY5REYxQjg4OEZGM0VECis6MTBBNTcwMDA2RjFFMzFBMTkzNUREMjdBQzRENEY3NzdFQ0ZEMDUyRjFECis6MTBBNTgwMDAwNEZFMTQwNzM3OUIzMDRFNTlCNTUxRUJGNzk5OTA0RUE2Cis6MTBBNTkwMDAyRUUxRkZENEJFNzI4QUZBMkJEQTI0RDIzMzJCNUU5MkRDCis6MTBBNUEwMDBFOTNDRkJCRThFQjc0Q0M4QzdCNTVCMjQ5Njk4MUE3NEJECis6MTBBNUIwMDA3RjgzMTRGMjFEODRBNThDRjNDMTUyQTE2NzU2MzJFRjNDCis6MTBBNUMwMDA1M0M5MzA2RTY1MzNBRjIzNjA0Rjg3RDZFNUFFREMzMkJBCis6MTBBNUQwMDA4N0JFREJCNEFDNzk2ODdERjNCMEUwRUI4NzMwMUVCQzlFCis6MTBBNUUwMDAxNUJGODMxNDNBRUU2MUVEQkI1QzNBN0U3RTVDRTNFNzE3Cis6MTBBNUYwMDA0Qzk2ODlGQ0ZDNTU5MTFBOTUwREQ3QkYzQUIyRTJFNjBDCis6MTBBNjAwMDBBMUNFQjFGNzA4M0JBQ0Q5QzFDQjNFMDNEOTExRkRCOEZGCis6MTBBNjEwMDA4QjZENTcwOERFQkE5RUNCMjZCNDgzRTVFRDk3MDhFRjI1Cis6MTBBNjIwMDA5NUVENUQ1NEM3NzExNzczRDcyMDlFRUU2QUI3REE1MTY2Cis6MTBBNjMwMDA4RTJCRkJCODVFOUFEOTZFRjY3QTI1QkNERkQyODRGNEY1Cis6MTBBNjQwMDBFQ0VGRTQ3NThCOUUzRDEyRjkyRjlBQkU3QTQ4RTBFRjRECis6MTBBNjUwMDAyMTgxQkY4NzQwNDFBN0U0QTIxRkNCRTNERTg3MzMzNkM5Cis6MTBBNjYwMDBFRThGODFGQkI1RTI3QUNEODE3RDkxRThFRkNENjQ5N0U1Cis6MTBBNjcwMDBFRTQ1N0FDMDdCMThCRTg3QkQxNDhBRTczQjE5ODdFMzk1Cis6MTBBNjgwMDBDRTJEQkNERTU5NkZBRkZBNDc2NENEQTZGQzIzQzQ5RDI2Cis6MTBBNjkwMDAwODRGQ0Q5NjUwM0NEN0VBRTJFRDc1MjNCODdEREVBNDk1Cis6MTBBNkEwMDBDMzczQTU5RjU5QjMxMTBFNTU3Njc4Njk3NEFGODJFRkM1Cis6MTBBNkIwMDBFRENFOTEyOEJGREFBREE2NDUwREI1RkZBOEI1RUYwOURGCis6MTBBNkMwMDBCRjU5RUJDRjE2RTdBQjVCRUNDREI2RTAzOEQ4OTRDQ0Y2Cis6MTBBNkQwMDBFREZGOEEyOUIyMDdFOTM0MTAzRkE0RUZDQjUxMEQ4MTc5Cis6MTBBNkUwMDBGODAxRTI4NkRGOEM4OEU3NzEwNDE2NzRCQzNCNTI2NjgxCis6MTBBNkYwMDA3MTcxODFGOEUxODc0OUVCMkI3M0ExNUZCNzg1Q0JGOUM1Cis6MTBBNzAwMDBDNUM5MzAxRjdFREY0QjYxRTQ1RkQ2NkQzMUQzMzlDMEUwCis6MTBBNzEwMDAzQUEwM0JDNTA5RURGQzFDODNBQjVEMkE0MzdBODNGRjVECis6MTBBNzIwMDBGREVFODg4OTc4QUU4NjE5RTM2MERENzNEQTM4OUZDRjU1Cis6MTBBNzMwMDAyOUJENDQ3QzcyMjA5REFGRjdCMkEyMjYwRUU1OEY2QjM3Cis6MTBBNzQwMDA3RTM4OUVDMzUyODNDRjNGODA1Q0UyRjhEQTc2NUUwRjlDCis6MTBBNzUwMDBENEJBRjdFQjUxQTlBOEQ3M0FGRTNBNkEwOUI0NTc0NkRBCis6MTBBNzYwMDBGMEY1NkI3RTlFMUZGQ0JDRDFEQ0NGMzk4NkZFRTc4MzAzCis6MTBBNzcwMDA5QURDRDhGOTNFREE4M0MyQ0UzMEE5ODlGOEJCRDZEOEE0Cis6MTBBNzgwMDBGMjc2MENGQTRENUJGOUJFM0REQjZEQzQ2RjlDQjE4NjcxCis6MTBBNzkwMDAwRjVFNkY4QTgxNzU1RjdDNURBMjdBMzQ3Q0ZFMDlFMDcyCis6MTBBN0EwMDBCMzhCNEI1QjRFQTMxRkZERDU1NjBCRjk4RjBGODI4RkRBCis6MTBBN0IwMDAzODNENzdCMDNDNkE3MkFCN0Q3N0FBODFBRDI1N0Y3MjU4Cis6MTBBN0MwMDAyRDZCQTI3Njk1RTBFMzhCNkQ4RDI2Q0E5Qjc5ODM5RUQ3Cis6MTBBN0QwMDAxRjNERDhFRjU4QTVFMzNCNTM3MjI4QkYzNTdDMTA0RTgwCis6MTBBN0UwMDBGRTVGRkYwMUQ5OEVGQjI3ODBBN0ZGNEUwRUM2ODdGMEM0Cis6MTBBN0YwMDAyRjVBRjc4NjExM0RGQjhGRDhDODVFRkM0OUYwRDk3OUY2Cis6MTBBODAwMDA5MTM3NkU5ODJDRDNGQTBENTM3ODlCRDVGOUQ2NjhBNDVFCis6MTBBODEwMDAxRkUyMUJFQkRFMzc3N0JFMzU4RTlGQTdGNjEyREU1N0ExCis6MTBBODIwMDBCRThBNDlGMTIwMzg1QkFDOTREQkQzRkEwRDFGMkNBMjExCis6MTBBODMwMDBFRkYwRDRFRDE5ODA2QjhDMjkyRTAwRDc3MEZDMkY0OUQ2Cis6MTBBODQwMDAzQzFFMzQ0OEExRjE2MERENkVEOTE1NUNFRjA1RUJCOTEzCis6MTBBODUwMDAwRkY1NEY5MjkwMDNBNkY4MTNEMDJGMTk5OUFDOTJGREUzCis6MTBBODYwMDA2QTY4RTdGNDM0NzRGMDE2REVCRjgwRTczQjhDRjRGRUQwCis6MTBBODcwMDA0MUY3OEIzRDM1NzhGRkFCNTQyQkRGNEZCRUVBQTlDNEJGCis6MTBBODgwMDBGRTc3NDdDQjU0NEZGOUREMEY1NjhDMERENjlCMENFMTZDCis6MTBBODkwMDAwNDdBRDYxOUZEMDkxNDM3MUUzMTEwN0M3NTQ3MkUyNzBFCis6MTBBOEEwMDBBNERCNTAxRjZEMkNCNTY3QTNERUUxRkE2RUZGNjhFQkU5Cis6MTBBOEIwMDA3MkU0NjMwRkJFMzczMTMwQ0Y2QkMyREUzMjVDNkYxMjkxCis6MTBBOEMwMDA3QTE1MkZGMDc5QzU3QUQ3QjJCOTIyM0VFNjdDOTQyRDVECis6MTBBOEQwMDBGQzNEODgyQjI2MjY0RjFDMUM1N0RDQTgzRjA5RjZFMEMwCis6MTBBOEUwMDBFODYyMDlFQjg5MTQwRkM2QjUzQjhGNzM3REQwRDBGMUI4Cis6MTBBOEYwMDBEMEE3QzhFNzc1OUY5OEE5QkVFQUJCOUQwRjhEQTUzQTYyCis6MTBBOTAwMDA1QkI3RkI1NkY0MkJCRUVBN0NGODU2Q0FGMzQ5NkIwOUQ5Cis6MTBBOTEwMDAyRTBGQzI5Nzg0RkVDQjg3MDk1ODBGQkFBQUUzQzMwNDRGCis6MTBBOTIwMDBCMkFGQkIyNkFFRjc0NEEwOUY5MjdCMjc1RTA3QkY4MUU0Cis6MTBBOTMwMDBGODBGRkMxN0UyQkY5RDNERjk5QUJGNjJDNTc5NTcxRDFDCis6MTBBOTQwMDA1MDVDODg5RjU1MDdGMjBGNTVBMjFGNzFCODM4MUZENTZDCis6MTBBOTUwMDBCODc0Mzg5RkZDOTUzQ0Y0NTc2QzAxRkY0NTVCNEY2NTFDCis6MTBBOTYwMDAzMkFGNzdFOUVGMEFBMzNDODFDNDQ2NzNGRTYxRTkyMTY3Cis6MTBBOTcwMDBGQzUzRDNGQTBFRDlGNTlBMzYzOUE0NkU1MDdCQ0U5RDhFCis6MTBBOTgwMDBBQ0YwN0Q3RThEN0Y1QTI0MjdGMUM3NzZERUQ2QjRFREZDCis6MTBBOTkwMDBBNEY1QUQzNEI2MTBCRDFCQjYxOEY5RkRBREJDRDVFQUIzCis6MTBBOUEwMDBBQTNEMkNDNjgzRjgzODg0OTc4MDBFMzM0RDVFRkE2RTJDCis6MTBBOUIwMDBDNUMxNTRFRUJGRUJFOUYxNTkzMkNGNjMxQzNDRTFCRTk3Cis6MTBBOUMwMDAxOUY5RTU2MDkxN0JBQzdEMDhGQkUwNjFDNTNDM0U5NUUzCis6MTBBOUQwMDAwNEJFNUJGOTc5MjVGREI4NTNDOTNDOEU4RjhDMEQzREMzCis6MTBBOUUwMDAzRjNBNjA1RjkyMzlGRkNDMzQwREZEM0RCRDlGNjlGMjY3Cis6MTBBOUYwMDBDNEQ4MzMwNkUwOEJBMzk1NDZGQjNBRTFCNzhGMDhGQTNCCis6MTBBQTAwMDA1RTQyRDU1RDQ2RjIwRjhFMzJGQjNCNTg2NzM4NEJEMzIyCis6MTBBQTEwMDBBRjkzQjk1REQ1RjJEREFFMEQyQURGRDcxOTdDQUU5MUNCCis6MTBBQTIwMDBGNEU0N0M2RDNFRkQ3OTY5RTFEN0NDRDdGOTM1RUIzNTlGCis6MTBBQTMwMDBGRDM3ODY4RDQxRkRENzIyQ0VCOUFEQzkwQ0YzMDZFN0FGCis6MTBBQTQwMDBBM0Y0RUQ3RUIxOEY4MUU3NzVCMDZEQzhGQzk4RjIzNjQ2Cis6MTBBQTUwMDAwN0JCNEVCQzQxNzU2NjI3QzJEODY4OUU5N0EzRkNGNTFDCis6MTBBQTYwMDBBQTYxRjJENzBEMDNGMjM4MkY4NEJGMzQ3QTVDMTBERjZECis6MTBBQTcwMDA1NUQxRDNFMzBEODE3NzZEOUYyRDVDRUNCMzlENTZEQ0YyCis6MTBBQTgwMDA2RjI0NTM1REQ2NzkxM0ZGOEU5QTlGRTJBQjg2NENFRTBFCis6MTBBQTkwMDAxRjVEMjg5MzY4NUYxQ0UwMUM2NTBFRDJFQjE3NDZGMDIzCis6MTBBQUEwMDBCOEVBQkIwQjI0Q0E5Qjc2RTE3ODhDOUY1QTI0QUFBQkU4Cis6MTBBQUIwMDA1RUU1RUIzNTIxMUY4RDY5NURGMjI0QzlBQjg3MUQ2MzBGCis6MTBBQUMwMDA0MURGQTk5ODZERTE3NjcxODA2RURBQkEwN0VDNTY4Qzk5Cis6MTBBQUQwMDA4N0VCRTEzODZBNzEzQ0RBQzE1OUMyRUVFOUNGMjE4RENBCis6MTBBQUUwMDA2NUJERTUxODU3NTYzQjI1MDdFRURCRUJFOTNENzdFMTAxCis6MTBBQUYwMDA4NDc3RTJGRjAxM0E5RjRCNzYxRjIxRkRENjdCNzkwMUQ3Cis6MTBBQjAwMDBFNjNGMEY2NjdFM0UwQUVENjVFRDMwN0NGQjNCQzFCNzRDCis6MTBBQjEwMDBEQUY3NTkxQzYzRDU0NkZDM0VDOThGMTJERDlGMjA3RUIzCis6MTBBQjIwMDBGQjBEREY0NjhFNjNGODdDREY3RkFGOTE5MDJFOENFOEMzCis6MTBBQjMwMDAzMTlDOUM5QzEyRjM5RDRBMTZERjI1OENFM0ZCMjRDQkIxCis6MTBBQjQwMDBCMThGRjI2QUY0OEVBNEZDNDJGNjhERUQ0QjM1RUM3RUFCCis6MTBBQjUwMDAzNzA3RjVENkM1QUUwMzM5QTYyMDNBOUU1RjAzRjI4RUJECis6MTBBQjYwMDBGNkEzNjM1RjgyNkEwQkU2MzMwM0YxOTcyNDY5RkNBNkMwCis6MTBBQjcwMDAwOEJCMThDQTc3RTc5MUVGQjJCMUZEMzAzMjFERjVFRTkwCis6MTBBQjgwMDBGNkEzOTFCN0UwN0NCQjc4M0JDMDlGRUQzMjhEODM3ODE0Cis6MTBBQjkwMDA2N0NDRkM4ODYwRjg5RTI0RjgyRUI0RjA3OTE4RUIxQjgzCis6MTBBQkEwMDA1MzM1M0VGODdFRTM3MDdDNkI0Q0UxRjU4NDIxN0NBQjQxCis6MTBBQkIwMDBBREI3MDVCRjg3ODNGRTdEQTc5OUJFODc4M0Y5RTZFODE5Cis6MTBBQkMwMDAyMEI5NDg0REUxRjIzMDQ5N0NGRjY2MEFGM0QwRjcwMDI2Cis6MTBBQkQwMDAyNzg5RUZFMDRDNTE5ODRGODlDMTdEMkU5RkNDRjc2NUI2Cis6MTBBQkUwMDBGOTc5ODYwMkMxQkY5MzE0NUYxN0Q2Mzk0QzExRkIzMjM1Cis6MTBBQkYwMDA4NUFDOTdDNjRENjc3RTZBOURDQzRFRTcxNDhBOTk4M0QzCis6MTBBQzAwMDBEQUM5MTZERjlEOTg3NkM5NkU2OUExRkEzRjVGODIxMjk0Cis6MTBBQzEwMDA3REQ2MjJDRTQzMEM0MUI3QzBGQTE1RkFFRTBERjFBNTUwCis6MTBBQzIwMDA4Q0U3NjE4NkZFNkU0QTY1MEE5NzczRkEzODA3RDJGNzk5Cis6MTBBQzMwMDAwMkEzRkMxNDdFREYwQzVGMzI1NTYxMTU1ODc3NzQ5QkJDCis6MTBBQzQwMDBDMjJDRTEwMEVGRjZCNzBEMjRCRjlEN0RBQTE3RUI0MEEzCis6MTBBQzUwMDAxREIxRTJCOTJGMThENUJCNEU3MjcyRjk0NEQzODI3NTdCCis6MTBBQzYwMDAxMkRBN0FGNTc4Mjg4NEY5MzAzRjM2NDk4MUM4OTJGMEIzCis6MTBBQzcwMDBFOEEzRjdERENFRjgzOThEMjJBNkQyMDc1NjZFQzc4RjJFCis6MTBBQzgwMDAyNzkzNUVGNzUzOUM1NDAyNzExMkVBNzU4M0M1NDNGODBCCis6MTBBQzkwMDAyOEMzRTRDQTQ0QkVCRjExMDlGMzE0MzY0QkVDMzhFRUE2Cis6MTBBQ0EwMDA1N0E0RjFGNTZBRjMxNzAyMjNFMEI5QkQzMkIxNUU0QzQ3Cis6MTBBQ0IwMDA4MTFFOEZFMUZCMUU5MTU0Mzg1QzZBRTdERjA5NEFBMEQwCis6MTBBQ0MwMDBFRjA0REQyODVFRkIxM0Y4NzcyMTIzRUZGNzVGRkM3RUFFCis6MTBBQ0QwMDA3RTYwRkZDNzgxREYwRDhBMEM3QzhGRDI4MUU3NEMzMDBDCis6MTBBQ0UwMDA3RkU3NTNDRTA3RkJDRDc3QTcyQ0FENEU5OTE4QTg5N0Q5Cis6MTBBQ0YwMDA2MzZFQTZBMjVGQTFBRjk3NDNGNDlEMEIzQURGQUNENTdDCis6MTBBRDAwMDA3QkJDRUE5REFCRTJCOUI5ODU3MTE2M0E0RjlCNkIxOUQyCis6MTBBRDEwMDA5NTg3NzYyQjIzRDE1RDlENDI3NTFGNUI2RUExNDkxNEVCCis6MTBBRDIwMDBFRjQ0NTc0NDgwQ0ZBRENDMzkxOUYxMUNBOEQ3RTNERkVECis6MTBBRDMwMDA0RjFBMzhDRjk0QzBFOEZDOUZENUNDRUIxOTlGMDFCOUNFCis6MTBBRDQwMDBDMEVGMTc4MTU0QTk1OEQ3QzI5RTI4QTFGQUM3QTdBMjVECis6MTBBRDUwMDAyRDBFM0M4NzYwNDY3OEFEMDE3ODFCMkRBMkVFNDc1NzNCCis6MTBBRDYwMDA3N0Q5NjgzM0QwRjczODFCNTkzODlERTc5RTE1RTZGRTMyCis6MTBBRDcwMDAxRUFFRkZCMTg4NjIzQTJGOURCNTZENUExMkY5ODNCMEFECis6MTBBRDgwMDBERTY5REE3QTBEODNFQjEwQjFGRTBGOUZEM0Q3RkY2OTJFCis6MTBBRDkwMDBFQkMyRTNFQkY4NUVCQkMwOTdCNjRFQkI3NkRFQzdBOTRECis6MTBBREEwMDA4NDlDRjdEMUQ2RkY0QzM4NUZBNzExNzdFMkQzRTg1OURFCis6MTBBREIwMDAxNUY1ODM3RTdEMUEzRkZDM0ZEREZCMzU2RDYwNUMwMDQxCis6MTBBREMwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEQxCis6MTBBREQwMDAwMDBCN0IyQUNCQzBGMEEzMUU4MTg1NjUxODE4MjZGMUQ1Cis6MTBBREUwMDBBMThBRDExMkNGRTA2NjYwNzgwNEM0MkMzQzBDMEM4NTlCCis6MTBBREYwMDA0MDdCMjM4MDc0MjQxMDFGMDFFMkEzNDBBQ0MyQ0JDMDZGCis6MTBBRTAwMDAxMDBCQzQ3MTQwM0MwN0M4OUYwQkM0QTU0MDlDMDU3NTNFCis6MTBBRTEwMDA2MzJCMEIwMzQzM0IxMDc3MDI3MTM3MTBFQjMwMzMzMDU5Cis6MTBBRTIwMDBFODMyMTM2RjdGQkUwODAzQzMxMzA5MDQ1RjUxMTI2ODMxCis6MTBBRTMwMDBBNzM0RkRGQzNGRDhGMDBBN0RGQURBMjc2REMwQzBCMDE4Cis6MTBBRTQwMDBENTAyQzE1NzAzQjJCNzU5QTBBQUQ5NkU4MURGOEMxREI0Cis6MTBBRTUwMDA2OEYyM0JEMUY4QkJGMEU4M0ZBQjg3Q0FCN0Q1NDBFNTE1Cis6MTBBRTYwMDA0QjY5MzEzMDc4MjI4NTg5OUQwNjdFQjdBMEUzMEFBMDIwCis6MTBBRTcwMDBERTRBMjAwNjAwRkI3MkRCNDM2ODAzMDAwMDAwMDAwMDhFCis6MTBBRTgwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDEwCis6MTBBRTkwMDAwMDBCRTU3RDBCNzg1NEQ1QjVGMDNFNzMxRUYzQzhDQzlFCis6MTBBRUEwMDA2NDEyNDIwODE4QzIwOTJGQTMwRDM4MjEyMTA1OEFFRDJBCis6MTBBRUIwMDA0MDAwOTFBMjA2QjUwQTE1NzVDMjIzMDk3OTREQzBDNzk1Cis6MTBBRUMwMDA4RkI1NkQwNjgyMTExMDM0NTgyQzUxQTM5RDIwMjg3ODFGCis6MTBBRUQwMDA4MzBFMzQ0ODkwODAwMzU4MUE3QTUxODNEN0ZBNjg3QkRFCis6MTBBRUUwMDBCRDQxMjkyMDA0MTJGMTg1REVCNkZFN0JBREJENEZFNkUzCis6MTBBRUYwMDA5QzkzMTlFMERFREJGRkJGRkRFRjFGQkZGNkIwQ0ZEOTlCCis6MTBBRjAwMDA4RkI1RDc2QkFGQjVGNkRBN0I2NDhCOEI0ODQzMDhGOTA2Cis6MTBBRjEwMDAxNkZFN0U0MEM4NzQ4OTEwRDIzRkZBNzRCRTRFNTQ5MjE5Cis6MTBBRjIwMDA0ODQ4NUQwRTJEQTcxMDkyM0U5Qzg0ODg0MEM4RTQ2QTc0Cis6MTBBRjMwMDA1QUNFMjNFNEQxM0I0OUM4OUE0OUM4RkUyMzE2RkNCRTI5Cis6MTBBRjQwMDBDQUNGQ0FCNDVERDg3MjBERkQzRTgyQkQ3RjMyOEJCNkNBCis6MTBBRjUwMDBBM0VGOUZCQzIwNjJCQkUwNEMxMkRBNENDQjQ5ODRGNkQ1Cis6MTBBRjYwMDAzNjhDRDAyMUZDRjg5Q0VDQURCNzhGQTJGNTFCRUZCNDZBCis6MTBBRjcwMDAxMEFCNEFDODEzNzQxODMyOUUxMDE3RjFEOTA5NkRCQTc0Cis6MTBBRjgwMDA2QTM4RUJFRkYxOTk5NkU3NDUwMTNFNDZEMkU2RDNGMkY3Cis6MTBBRjkwMDBFQTI5QzVGOUFCNjk2OThEQ0NFMDZBOTg1M0ZDN0M5MENECis6MTBBRkEwMDBGNkVGQjEwQ0MzNzlEMDdBNEYzQTY5QkRDN0RFMkYyMUQ1Cis6MTBBRkIwMDBBQjY5QkIwRDczMkQ0MjcxMzZBREQ3QTRDQzBFNjU0NzdFCis6MTBBRkMwMDBFN0FGM0RFNzEyODlCNzBCNUEyREUzRTBFOUUzQ0Y4OEZECis6MTBBRkQwMDAwMkNGNUY0Q0I0RTAzODZCQUIxOTNFNjgzREM1OTI0NjdBCis6MTBBRkUwMDA0ODRCQzcwMTlCOUZGNkI3QjZBMkU1RTgzNEZBRkQ5MTNFCis6MTBBRkYwMDBFMTE2MkZDNTIwNzlBNEUzODBGRDRBM0E3RTMwQ0ZFMkU2Cis6MTBCMDAwMDAxRDQxNkJBNzRCMTFDMUUzOEM4RTM3OUU1MEMwQzdEMjM4Cis6MTBCMDEwMDA3QURFMUQzNkQ1RDlCNzNFRUQ3NzEyQ0M3QjBEQzVCQjk4Cis6MTBCMDIwMDA5ODE5NkQzNzA2RTBBNEVERDY1MjkyODVFOUI4QkY5NDIxCis6MTBCMDMwMDBCRDg3NjFEQzVGREU5MDJDMDQ0OUI0REVGNTAwMjRENENBCis6MTBCMDQwMDA5QjZCMjExMTVBOEY0ODNEMzY0MkM3NTkzREYxNkREQjRDCis6MTBCMDUwMDAwODVBN0Y3NUExMDUyNjQxRDY3QUI1RUY1RTNCODFGRTgxCis6MTBCMDYwMDBBNjhFM0MzQzFDRTg3QTNERkQwRUYzQzg3RTdDMzZDQ0I3Cis6MTBCMDcwMDBGQkIxMjkwQTAxRkNGRjUyQTBGNTI4OEExQjhBOTQxRjA0Cis6MTBCMDgwMDAwMjdDQUU2QUUyODFGN0Y0RTk4Qjg1RDc1NkMxODY3MEZGCis6MTBCMDkwMDA5MDM1MUIwOEM5MjcwMDAyRkVBREY2ODU1NjBFMDVGRTQ5Cis6MTBCMEEwMDBDQTIzNUUyOEE3N0I2OTdCNjdERkY2OUQ4MjE1RTlEMkZDCis6MTBCMEIwMDAyMDA3MDcwMkZFRTJEMTZGMzhDN0U3RUFBQzI1NzZBMDg5Cis6MTBCMEMwMDAwNzIxRjU2OTg1QTMwODU5MEY3ODgyNDEyNUJGM0FDQjNFCis6MTBCMEQwMDAxNUFEQkY1MjYwRjg1OTI3MTM5RjQwRTc5NzkwQTc4NDlBCis6MTBCMEUwMDA5NjUxM0M1QkIyM0Q3MzYwQkU0RUJGNDJBRUEzRTU1NTg4Cis6MTBCMEYwMDA0MjcwQTAwODc0MTlBNTkwQ0QyQUYyODU3RDA0MkRBRjY5Cis6MTBCMTAwMDBCRDJBRDkwQkZDNTcyNzg0RDMyNEY4N0UwM0ZENEVCQjAwCis6MTBCMTEwMDAzQzUwMzg2NjBFRjA2N0EzNTc0MTdFQTZGQzczMThGMENBCis6MTBCMTIwMDBCREQ2OUY0QzU2QUJGOEJEMDNEQjNCODc3QkFDODgwOTkzCis6MTBCMTMwMDAwQTBGQzU0QjNGQ0E0QjgwRDc5QzlCRUFBRTFGMDZGNDUzCis6MTBCMTQwMDAxOTZCRjEwMDg1NTYwQjkzRDRGOTIwM0Y0OTM2MEY4Q0NCCis6MTBCMTUwMDAyRjhGQkQxOUU5MjdGNzRGMTY4ODhFREUzRjA3N0E1M0U4Cis6MTBCMTYwMDAzQzNEQUExNkZFMUM5RTRGRTc3RDk0MzQ4MkQ2NUY5MzI5Cis6MTBCMTcwMDBGMzRBMDNEMEU5OTlGQjZENDhCRjY3QzY3NjJDMDZCOTQwCis6MTBCMTgwMDA3QUYyNDJFRUZCN0U5NDRCQzVCQjk5RjZGMzZDQ0U4OTA2Cis6MTBCMTkwMDA0QzQyMDc3QzdDRkE0NzQ5ODBCRkMxQzNFQkVGMjE2RTZDCis6MTBCMUEwMDBGQTlDRDk1MzQzNDY1M0Y4NDg3REUxODI0Q0U0MTNFMUJECis6MTBCMUIwMDAxNjhBRDdDMTRCMTVBMkRBMTgyREJGMjVGMDlERjhDMjBCCis6MTBCMUMwMDBEOUFDRUNBNEYzMTlDQ0U5RENEMkYxQjZBRDA4RkE5QjBBCis6MTBCMUQwMDA0QjIyMjNEREY4REU5NjlBMUNENTMzODNGMzQ4MjQ5NTYxCis6MTBCMUUwMDBGNkZGRTRDMjQzMjhFN0NGNUM5REVBNjU3MjlFODZGQ0M5Cis6MTBCMUYwMDA5MkMxRkI0OTg3RkE1NEJGQTREOTQ4MzA4MTNFMDdCN0IyCis6MTBCMjAwMDBGN0RDMEM3MDBEQ0UzQTMxMTdFMERDRkZDNjIxMDFFODA3Cis6MTBCMjEwMDBGNkVDRTg1NDE1RjQ1MTkyQkY4Mzc0NTJCQTBGQ0U3RTA3Cis6MTBCMjIwMDBGNzQxQThFNzcyODZEMjBBQjNCMUZFNUZCMTlEMDlGRTZECis6MTBCMjMwMDA2NkQ1QjcwOUYwQjY0REE4M0UwQ0Y0MDlFNjU4QkM4Q0FCCis6MTBCMjQwMDBERTRDMEZBRUI5MzczNTA0N0E2NEIwRTM0RkIzQzRBMTE2Cis6MTBCMjUwMDBDODA3ODRBNDUyRjgzQzA0RTVBNDRFODhEODg2NDFCQkI0Cis6MTBCMjYwMDAwNzU4QkIyMTI0MjQwMDlFMDc2NzA1MTc4QjZFQThFRkEzCis6MTBCMjcwMDAxNzBBNUQ3REM3NkQwMThEMDhGMjQxMzkxREY4NzVCQjU4Cis6MTBCMjgwMDA0MkNBMEE2M0M4QzE2QjVDOUVFQjA0MzIxQkY5OTk0ODQxCis6MTBCMjkwMDA3RjAzQkUxOTkyQzRGODQ2MkIzRjBCRjBEMDcxQjdCRkE1Cis6MTBCMkEwMDA5RUZDQzM2QzBBQ0ZBRjk2MEVDRDExMjkzQzhGNDJCQkRBCis6MTBCMkIwMDAxODcyQjM5NkNCODFBMzlEMDQwNThBRDdGREJGRkI5RDcxCis6MTBCMkMwMDAxREYwQjZERDQyNEFBMUZFQTRBQ0IwQUQ5M0QzMTVFOEEzCis6MTBCMkQwMDBCMTkwQjBGRTFCQjMzN0RBNTA1RjA4NTlDODc3MEJDNzdGCis6MTBCMkUwMDAyOTNFRkI2ODkwQkZFNTgyOUZCNjRGRjMzMEJERUNGMjdDCis6MTBCMkYwMDAyQTIxRDBDQkFFQjRBMDYwQTFGMEE4RDlDNEIzMzE5M0I5Cis6MTBCMzAwMDA3NTE3QTRGODlCMDdGRjAwNDY5NzU4RkQzNTZCOTM0MkNECis6MTBCMzEwMDBBQkU5Rjc3OUQ5NTREMDAwNkYxNDU3MTYzQUVFMDJDMjUwCis6MTBCMzIwMDBFNjM5Q0Y1QkI3MThFODQ3NDhBMTA1RjBCOURBQzNFOEJBCis6MTBCMzMwMDBEMzA4RTNEMEE5MzRBNkIzN0VENkRFNDc0MkNCODE4RkIzCis6MTBCMzQwMDAzQ0FDRkQ3MDY4NDJFOTM2M0NFRjk1RkYyNUQwN0VEM0RBCis6MTBCMzUwMDA3OTNCOTA3QjY4OTc5MDE2QjI1OTY4M0JCNURBNDIxMEZBCis6MTBCMzYwMDAzRTI5NzI1ODAwQkE4RjRBNTUwMTlFQzYzNEVGQkZDQ0IxCis6MTBCMzcwMDAwNEY4Njc0QkRFOERGNEYzNzA4MDgzRjZEMzU4NkRGMURCCis6MTBCMzgwMDBBMUJFQzg1MzlBNDA0RkFGRjYzMTNEQUZFMTJCOTM4RjJBCis6MTBCMzkwMDA5QkVFOEQwODc0RUUyNDkzRUE0OUM0OTMyRjYyRjc0MDI0Cis6MTBCM0EwMDAzOTlCQzE5Mzk5QzdFNkQ1MEJGRjI4MjVCNDlDMzY0RTJGCis6MTBCM0IwMDBCNzQ1MDhENEQzRjA1MENDRkIyQkU2RjM3MEE2ODU1NkU2Cis6MTBCM0MwMDA0QTAwNzcxRTgzOUJBRUNCMDg0RjdBQjZEMjA0NzI5MEE4Cis6MTBCM0QwMDA5RUM2RkE1MzI5N0UzNEJDMDM1QzBFMERBRTNDNUExRjQ4Cis6MTBCM0UwMDBGNEIwNTc2OTAyNTY3MDcwRjg4QUIzMTkzQ0ZCOEZCQ0YxCis6MTBCM0YwMDBERDJFQjBGRTUwQUUxQzFDNUUwNzlGM0YwMTc4NTNCOTk2Cis6MTBCNDAwMDA1RUE3RkQzNUNCMTE0MUE0RjU0MzYzODlCQTkxOERBNkEyCis6MTBCNDEwMDA0QUY5RDFFRjhGNTc1MzNDRDA4MjkzOEY0M0Q2NUI1MTdCCis6MTBCNDIwMDAxRUU4QUJFMEI3OTQwRkU2RDdEMzcyNTY1NDNFNDZBQzU1Cis6MTBCNDMwMDBCNDFBRTRDNUM5RTc0REVBOTkxQzUxQjY4OTQwQkI0QzIyCis6MTBCNDQwMDBDMkNBMTYyOEQzNzkxNDY3MTlFNThDNzg3NTY1MEE4N0ZFCis6MTBCNDUwMDAwQkY4OURFQTlGNjVFMzE1QzYzRjU3MzEzQjg2MTA1REFCCis6MTBCNDYwMDAzREUwRjNCMUVBNzM2QkYwQkI4MkVCN0FDNjRGMTUwMzk0Cis6MTBCNDcwMDA3QzgzQUI1MzI3OEJBMDRGREE5RkJBRDkwMjdDNzUyRjAwCis6MTBCNDgwMDBCMTg4ODlDOENGNDJBRkZFQTJFM0VENTgxMkIxQzMyNDAwCis6MTBCNDkwMDAxREVEODVDOTgwQjc4Q0VBRTRDOTBBRTBCMUREOEY2NThFCis6MTBCNEEwMDA0NzdCQjUwRjlGQjAzNDhEMjE2NDEwRDE4RDkzMDlGQTdECis6MTBCNEIwMDBENTUzREU0Q0YxNEFBQTk1MzBFOEVCQjE3QTM4RTlGNzdBCis6MTBCNEMwMDA4Q0Q3RUI2NzAxQkQxRTVFN0M2ODIwQzg2RkFBQTlGRDAyCis6MTBCNEQwMDA2OENCNTA5NEQzQzFBRkQzNUEzOEZFODk5RjQxRkQ1NUY0Cis6MTBCNEUwMDA1QzlGMzgwMEUyMzFGODdDMUQ5RTgzOUQ1NENGNTIzRDE1Cis6MTBCNEYwMDA5RDQxMTFBQzhDODlFQThCRDU1N0JEOUJFMzc3NzJGRUQ5Cis6MTBCNTAwMDA0OUM2NjcwNDlFNjZCREEyQUI3RjE1QUYxRjE0MkU1QUI1Cis6MTBCNTEwMDBFRjA0RDZEM0UwMzE3RjNGMjc1ODUwNEZCOUMwQ0VBNEI3Cis6MTBCNTIwMDBGODdEOEM3OEU2RTBCQUVDQjVFMEJBOThDMERGODdCRDZDCis6MTBCNTMwMDAwNzI2MjMzREMzQzQyQjY0ODJCRUZEOUI1NUNGMDczRjI2Cis6MTBCNTQwMDA4MTk3QTA2RkE1MzBDQTg5OTJFMTQwRkI5MENBNzEwMjMxCis6MTBCNTUwMDBBQzdCOEQ1Mjc1MjlCQzBGQTczQjA4RTg4NTAzNTMwRkMwCis6MTBCNTYwMDAwOTgwQ0ZGNDU2RkYxMDkwNDNDRENFOURFQzBEQTdDMUJFCis6MTBCNTcwMDBGQjQ3MEVGQkFGNDRGOThDNjMzNzZBNzZBMjc5M0U1N0RFCis6MTBCNTgwMDA1Q0JCMUNGNUMxMTA3RjRGM0JBQ0Y3Q0UwQUM5N0IxRERECis6MTBCNTkwMDBGMDk3OUZDMkU1NDQzREE5OTJFRjUyRjhCREMxNjVBMDY2Cis6MTBCNUEwMDA2NzU1M0YyRDBGQTBDRjBBRkUyQzY1REY1N0Q1OTRFNkQ3Cis6MTBCNUIwMDAxRTk3QTJGREFFMUE0RUVENTFBQTE3RDc3N0FDQjdERDk0Cis6MTBCNUMwMDAwMDc2NDZCNTQ1MDVCRTVERUI3RERCRTY3MzQyNzk3MkRDCis6MTBCNUQwMDAzRkMwNzM0QkExNjZGNzQ1MDQxODJGRkQxRDFGREE3OTk0Cis6MTBCNUUwMDA2MzNEOEEwNzk0RDYyODZCNjRBMDQ3Qjc1RTM0NEU3RENFCis6MTBCNUYwMDA3NzBDQzA0MTZFQTU0NDFDMTg5RjhFNzRCRUM4NjdGMUJECis6MTBCNjAwMDBENjEzODBDNUEyNUI0N0Y2NjdFREMwRjVFNTBENzIxNTUwCis6MTBCNjEwMDBEMjQ1NUI1N0I0NzUwNDdCQTRGQTY1M0U5N0EzNDdENDIzCis6MTBCNjIwMDBCMDRENDA3RDQ1NjU5N0QyNjczRUQ3MjM0RUFFMzdBOUQyCis6MTBCNjMwMDAxRTY2N0E4RUFGMjc2QjE3QTdFMjdBQTJFOTRGQjBBREVDCis6MTBCNjQwMDA0MTQ5Q0NFN0ZBNzY2RENFRjM0OTM3NTA5ODlDQTA2NzE0Cis6MTBCNjUwMDA0MTJGQTU5MUM5QjBGRThFMDAzRDAzRkE0OTBBMEEzMDc4Cis6MTBCNjYwMDA1RUUzNTgwRjU5OERFQjk4NTE5RjhFQTg2NjdBRjA5MTQyCis6MTBCNjcwMDAzNDgyRkM0NEQ3QTEyNjU4RUYxQUQzQzM2OUQwNEY2MzU0Cis6MTBCNjgwMDBGNTAxQzFBRjVCM0ZCNUY1Q0U1NURENDE0MDBGQ0VDQkU3Cis6MTBCNjkwMDA2M0VCRENCQzZDMzZERTFGMDA0MTYzMTlCQ0EwNTdDREU4Cis6MTBCNkEwMDBFQkRFMkYyNkVFNDA2NTk5QzBFRDJEMzNGRTA1MEJCMzgyCis6MTBCNkIwMDAwMzFGOUJGOTM2RTI3MUVEODJDN0YxNDlFQTM3NjA3RkRCCis6MTBCNkMwMDA2OTM2NDY4MzU1NTkwN0YwRkQxQUJGNjUzQUQ4RERFQjU4Cis6MTBCNkQwMDBBNThFOTVDMzI5RkNFQkE3Q0Y1MzgyRjRGQjFBMkZGMzU5Cis6MTBCNkUwMDBCQjU2NEY5Q0Y3M0NBQzZCNTY4QkMyRTBBQTJFNDU3QkY5Cis6MTBCNkYwMDAzNTgxQzNCNTAxRkE0NjNGNTE0MUJGRThCRTNCMzdBRTg1Cis6MTBCNzAwMDAxQzRBRkI0OUEzN0U4Q0EwNDJBNTkwQ0Q0QUJGM0I4MTM5Cis6MTBCNzEwMDBBNkEwQkZGRDExMDZCRjk3NEMyNjMxRTBGRjU3QzFDMTVGCis6MTBCNzIwMDBGQzUwN0Y0N0ZCMDhBNEE3QzUwM0YwMjY3ODdCNkNFMDlDCis6MTBCNzMwMDAyN0FBRDQwRjUzNTU4MDU3QjU4RjQyNzgyRDlFNjU2QTNFCis6MTBCNzQwMDBCNEZERUZCOUJGNzAxNzJDRkM2MERGQ0Y3OTc3M0FDODMyCis6MTBCNzUwMDBEN0JBM0I5OTVGNjY4NkZGQkU0OUExNzYwQjhFNDNEMDcwCis6MTBCNzYwMDBBRDczQzVDMUVCNUNEMDYwQTA3RkJDMjE4NENCOTVDNTE3Cis6MTBCNzcwMDBFMDNBMkUzMDdBM0RENjMxRjk3QUY0OTMwQUU5N0JEQTUxCis6MTBCNzgwMDBEMUUzMUQ0M0VEMjBERjY2N0JFRjk5ODQwRjczRDBERTlDCis6MTBCNzkwMDAzMUFEMzM5NzJBMEYzNkU5RkI1MUQ2RjAwQ0U0Qjc2RDgzCis6MTBCN0EwMDAxNkQ0NTM4NDMwM0QyNzEwOEJGQUVEMzA1ODQ0MTg1QzgyCis6MTBCN0IwMDBDODdBNTQ3RkFGOTAyMzczMTZEMEZBMkI3NjNBMDlFMEZCCis6MTBCN0MwMDA0QkUzODc3NERFRTdFQTZBQ0EwNzMxRTZERDJFODhGMUNCCis6MTBCN0QwMDBFOENFRUMwQzRFRjcwRTE4QUZGRkE1RTk0RkE1RDkwRTM5Cis6MTBCN0UwMDA3NjVCMzg1NDM3QTgwQ0ZDOEY2QUU2RUY4NjIzMDc1MDQ3Cis6MTBCN0YwMDBGRkE0NEZCOTBERkQ5NDJENERBOTczMTYwMDVGNjVGOTk3Cis6MTBCODAwMDBCQzgwMEUwRDFFQjA0RjYyRjk4OTMzMkNCNjhCRkFFRjU3Cis6MTBCODEwMDBGMUY0NzA0M0M1MEFGNDdCMUIzQTYyQ0Y3RkEyODVGOTJECis6MTBCODIwMDBEQjYxQUEyN0JERDlGMUM3Q0ZCNzMwM0IzQUM5QzJGOTBFCis6MTBCODMwMDA2RUVBQTEzNEZEN0FBNkFEQUJEQTNBM0I1ODIyNDE1MTBCCis6MTBCODQwMDBCNzFFREVDQUYxNjc1RTM3ODk1NDZGMUJDOUY4MUNGRDRECis6MTBCODUwMDBDNzg2MDUyQzBFQjE2MUEyMDVFMzJCMUE5RkQzN0E2OTI2Cis6MTBCODYwMDA4MDU3M0EwRkI0RTcyODFGODZDMDlFN0I4Q0Q0QTNEQzk4Cis6MTBCODcwMDAwNDY5RkJDREE0MkZEQzc3MTJDQjY1Q0Q2RjAyOUY1RkVGCis6MTBCODgwMDBFRjc4RENCRkJFOEJFQkFCNzUzOUY3REJBMTJCM0E1RUYzCis6MTBCODkwMDAxQUYwNDdDMENERjQ2NEE1OEJEOUIxMDUzQkU1QzgwRkJDCis6MTBCOEEwMDAyODFDOTU0RDAyREE1OTk2N0Q3Njg0RjNEQzI2NUFBNjNCCis6MTBCOEIwMDA1RDQ3NUMwQUQ2M0ZFQkIxNjEzOTYwRUQ3OEY0N0JCNDRCCis6MTBCOEMwMDBEQ0IzNTMyNDY4NDc2NjM5MkNDMEFGMjczOEJGOTIzQzlECis6MTBCOEQwMDA1QTA2N0JEOENFOEE5NTRERkJFRjgyRkU0QTVCQURDNEZCCis6MTBCOEUwMDA0RUZCQUZEQzVENzJFM0Y3NjhCOUE0NUQyNjUwQTU3MjJDCis6MTBCOEYwMDBGMzMyNjUxMDJEMkYwQTA5NjEyODc3NEZBNjBCMTVFMDRBCis6MTBCOTAwMDAyNTU5MDk4MURGREVFREVFNDhGRDExOURGN0U5MUExQjhGCis6MTBCOTEwMDA1MTI5MjhCNUFFOEVENDVCMjkzRUNBNDJEQkE3NDFCQjc0Cis6MTBCOTIwMDBCMjY2MDEzNDIyOURDN0U2NDMwMzYxNUU1QjA1MkZGOEQyCis6MTBCOTMwMDBGN0U1NUIxMjBDRjZFMDA5M0E5NTFGRDBFRjRCRTgzQ0I3Cis6MTBCOTQwMDA0MTJFNEI0OEZEMzQ1OEU3MkEzN0FGNTM1NDVERkNFMTk0Cis6MTBCOTUwMDA3NDhEMDdDN0QxQ0E5NTVCRTkzOEI0NURENTRCODIxN0EyCis6MTBCOTYwMDBBNjU4NjUyMTdFRDA0M0U3NzZEQjY3M0ZFNzg0RjkyRDUzCis6MTBCOTcwMDA1MzQ2QkE2MDVFMEYyQjUwQUYyNDU0RjQ4QTVEMDVGODJECis6MTBCOTgwMDA5QTk0NjlGNDdCNTk2MzkzMDJGMUFEODA5NURDMEQ3RTQ2Cis6MTBCOTkwMDA2RUY5OTY3RTQ2QjgxQTQ0OTRENzI1NDlCNjhEQTBDRjQ1Cis6MTBCOUEwMDA4OUQzOTc3NkYzQThCRTc0M0U1RDQzNzVFQ0M4NjhCOTM5Cis6MTBCOUIwMDAwQ0Y0MjFGMjYxNDg5OUE1QUIzRjQ0NEM0MjdFMkRERjQ3Cis6MTBCOUMwMDAyMjFBRUQ2Q0JFRkUwNzhGMzJGQTA3RjdCQTMwRUVBN0U3Cis6MTBCOUQwMDBEMTZGMDlGNzk3MzVGQTJENDlFMkY0OTQ3QUYyNjNDMUYxCis6MTBCOUUwMDBGMzI4RDA4M0MyNTMwRkY4QTJDRjM1MUMzRUY3NDQzMjYwCis6MTBCOUYwMDAwOUUyMkU2RTFGRjEwODMxRjhEQUZDQUM5NzQ5MTFCMDVDCis6MTBCQTAwMDBFRTNGMkQ5RjM1NDkxQTg4RUVDMzYyODgzQzc5NTZDQ0FCCis6MTBCQTEwMDA5OTM0ODU5NjdGNkYyOURDNkM0MUZERTE1NTQxOEUzNDY4Cis6MTBCQTIwMDAzRkZCNTkwQjkzQ0JCQTgxMEFFMkFGN0U2QUZFNzMyQ0JGCis6MTBCQTMwMDAzRTQxNzBEREFCOUY1QUZDM0NEODA1QjRGRDM2MEJDQUM1Cis6MTBCQTQwMDAyMTZEM0YyQTdFN0JDRkI0NzE4NkY2OUU2OUE1NUFGQjk1Cis6MTBCQTUwMDA5REQ4REU3NkYxRjZGNUQzMjYxOEM3OUY1NkE2QjVERjNBCis6MTBCQTYwMDA4QkYwM0IyRjBFQkZFN0JBODlDNkYxQUZBQkMwRjYwMTMyCis6MTBCQTcwMDAyQkEzNTc0RjkyMERFRDlBMTU3NkFGNEY2Mjc2NTQwNDczCis6MTBCQTgwMDBERTRCQzkyMzM3NDIzRDUxRTMwN0QyRTEwM0ZCREJEOTRCCis6MTBCQTkwMDA5QzM0NjYzNUQxRjNDNUU0MzcwMDBFMTc5NTE2M0Q1RjJCCis6MTBCQUEwMDAyNDhFNzMxOEY4MzFDOTk3NkMyOEQzOUUzQzI3QkVDM0U3Cis6MTBCQUIwMDBDQjMwODhEQjg2RjAyODgzMTRENDE3OTMwNkQ5MTBERUE4Cis6MTBCQUMwMDBGQkY3RDlCMTdDRkYwNDA2RUZGRDgzOUMyODY3QjhCNjZECis6MTBCQUQwMDA1MDNBREVBRkY4QUZEMURCQURCMDMyNDEyOEU5NEREMUZECis6MTBCQUUwMDBGRjExRTAzN0ZBNUVCNUMwN0I4NzQ4QUE1MTNGNUIwOTdBCis6MTBCQUYwMDBFQUEzODczM0YzOUYwQkVBRjBCMzcyMzBBNTJGMkQ5RjkzCis6MTBCQjAwMDAwNUZCQTc3RjE0QUYwRjBGMkU0RTJCRDI4RDUzMzc1ODQ2Cis6MTBCQjEwMDA5OUJEMzE5QkJEOUZFRjg0RjEwQUJCMDEwRjAxQTU2NzYxCis6MTBCQjIwMDAyNEQ4OTVFNjcxQUM0M0M3MTlDNkIxNjU5NEUyMzhERkY1Cis6MTBCQjMwMDA5OEM2QjE2Njk0OUFDNkIxQ0RERUM4REZGMzcxRkUwMjM1Cis6MTBCQjQwMDBGMzhBMzdDRUMzNDMyNzE4RTc5MzUxODZFMzU4NDVEMzhBCis6MTBCQjUwMDA3QzMyQ0E0Q0UzMzhEODdDRTg3QjNFOEU1REJDRDg3QzE2Cis6MTBCQjYwMDA4NjREMzRDRTY3NDgwNThFOTMyMjJBODZCODk1NzU0ODRGCis6MTBCQjcwMDA4NTY5MUMyNzhFMDNFRjYxMUM5MkNFRkMxQkM1REE1MzJFCis6MTBCQjgwMDA4Q0Y0N0ZDRDRFQzA5RTU2QUNGRTE3QTA1RkYyNDczQkIzCis6MTBCQjkwMDA0MTdEQTJEMjcxMDc4MDVFNDlDNkZEODI3RkI1MjRFMzU0Cis6MTBCQkEwMDA3Q0JFNzQ1MEZBM0JGNTc0MEU2QTc2MDFEQTNCMEIzOUIxCis6MTBCQkIwMDA4ODI0NTQ4N0ZFNzkxNUU3RDEwNUNEQjMzMjk2QzFCM0Y5Cis6MTBCQkMwMDBCNTIwQUQwOEZDRUNGNTJFMkZDNDRGQ0ZCNTE2MjhGM0U5Cis6MTBCQkQwMDA2M0Q4MDUwQkVCRTUxMzlEMDZGRUU1N0E2RjMyQzlBQTIzCis6MTBCQkUwMDAwNjNGOEJEQjAxNUFGOTA0RDU1Rjg0RUFBRDhGQThGRUNFCis6MTBCQkYwMDA4MkU3NDk5OUVBNjlGQUZFMzhENTZGNDREMUMzQkIwQzk0Cis6MTBCQzAwMDBEQjlEOTAxODFFNEYzNEIyNzVFNENCNzU0NzY1OENGM0ZECis6MTBCQzEwMDAwNUM5M0I1OTc0MUVCN0YxNjkyQ0FDNEY2MEJFMDI4NzUxCis6MTBCQzIwMDAyM0MwRTlEMUIzREIxQURBODhGNEYwNUQwMTc2MEY2OTNECis6MTBCQzMwMDBFODQ3NzFDNUVCMEQwNTdDNTE3MTQ5QzZFMjE1NjAxRkRGCis6MTBCQzQwMDBGRDc4RTVGNkRGNDBCNTc3ODVBMkMxNEJFODdDNjdCN0E0Cis6MTBCQzUwMDBBQzkzQUZBMEU1NzM3MkU3NUQ1RUE3QUU5RkQ5RjI0N0U0Cis6MTBCQzYwMDAzMDZGMUJGRDBGRkE5OUUzQTc2NURERjg3Nzk0MUFDQkM3Cis6MTBCQzcwMDA3NzEyMjk1QUE2NzQ5QjJBMEVFNUY0RTBFM0FBMjExOTRCCis6MTBCQzgwMDBFODc1NUIyQTgzRTc0RTc4OEU4MUNGMUVBNEQ3NUQxRUIwCis6MTBCQzkwMDBENjU2ODMyN0YwQTA0QzIyQjgxRTc1RjY2N0M2NkQ3Rjc2Cis6MTBCQ0EwMDBBQ0U3RDdENjE1MTM3Qzc3QzkzNjVGMjFBNUU3NUQwRkMyCis6MTBCQ0IwMDA4ODg4NDczM0JDOURGQjEyN0MxNkVBNTc3NTM2N0MyNjc0Cis6MTBCQ0MwMDA4MzdGNzkyOUY4RUY1RTZBRkM0RTgyNkMzQzBEQUYxQUQ3Cis6MTBCQ0QwMDAxRkRDM0U3QjUyQkZFM0JBN0E3M0ZDRDdGNzNCQUVFMzdGCis6MTBCQ0UwMDA5NzNCNEE2NzE5Q0E3NzU2Q0YzMUQ0QkY3QjY5OTFFMTM4Cis6MTBCQ0YwMDA3QjUxNzA5MUUxRkJGQzk1OEIwREU1ODVGNTBGMThFQTAyCis6MTBCRDAwMDA5NzM0MkMzMzdDNUYxNDVBNjVGODVFQkU2NTlEQTE1QzQ4Cis6MTBCRDEwMDAxOTdFRDI1MDNGRDBEQTY0Rjg2RUQ5NzdENTREMjA4Rjk2Cis6MTBCRDIwMDBCNUJGMTcwOUQ4Njc1RjM4NEYzQzBBRjZENTE3NEUwOURCCis6MTBCRDMwMDBGREFBMkFFMDM1MkE4N0E3NkFEMjkwQkY0RkQ3QThGODc0Cis6MTBCRDQwMDAzQ0Q3OUE4QkZCNjMwMTA3OTU2N0JBRDY2RkE4M0RCQ0I5Cis6MTBCRDUwMDA2Q0U1NDREMDIzQjQzRUQ1RTE0RkQ3QkVCNTJDNDg3RDI5Cis6MTBCRDYwMDBGNzhEMTBBNEE2N0MyRjM2MjgyNEQyMEZGQzk4RTQ1RTExCis6MTBCRDcwMDBCRUVFMTE3NURGM0IyRkYxQkQ4MTJFNThCOTdEQkY4QjEzCis6MTBCRDgwMDA5REIxREY3NzBCM0QyM0MxQkUwQjdFNjBDNUZEOUI3ODY3Cis6MTBCRDkwMDBGNjAzRkRCQjgyQzRGMDFGQjQ2NzE3QzQzNzc0N0FFNzlCCis6MTBCREEwMDAzNTkxRDlENUQ3ODg5MzVGMTNFOUIzNDI2MUYyNUVCMTdCCis6MTBCREIwMDA2M0UwNjQ4ODE3NTQyODkxOTFENTMxRUNFQ0RFRjFDMjMwCis6MTBCREMwMDAxNDk4MDFEMDBGOTM5NzQ1QTEyQkEyRjI4QkY0MUI2NjE4Cis6MTBCREQwMDA5MEZCMUIyQ0ZFN0RBMDlGQkJGNjhCNkM3RjIwNzIzMEVFCis6MTBCREUwMDAwM0Y2NjlBRTExN0RBRkMxN0JEMkRBMUZEN0M3Nzc2QjdGCis6MTBCREYwMDA3Q0ZEOEUwRjI3RTRGRDlBRTlGOEZDNDM0RDYxM0Y4OEY2Cis6MTBCRTAwMDAxRkZEQTk2NjM2OTYzRkFDRjFFM0IzQjNBNjE0OUYxRjlFCis6MTBCRTEwMDBENTU0RTNGN0UzMzU0QkIxN0NBMjI2ODhDRjUzMzUyQkJECis6MTBCRTIwMDBGMTc5QkFBNjFFQkY3N0Q1MzQ2MEY5NUM0RDA4OUY5QUE4Cis6MTBCRTMwMDAxQzY4RjYyODQ5RTFGNjFGQjdEN0U5Q0E4MUU1RjM3QzBCCis6MTBCRTQwMDAwRTIyRkQ3NzA3Q0FCNTM3MERFNEZBQkNGM0NCOTE2MDNCCis6MTBCRTUwMDBFNzlFN0ZERjhBNDFGNDc4NzgzMkYzNUI3Q0ZBRjk3MEYxCis6MTBCRTYwMDBCRDJGMEU1MUZBRTdGNkZENkU3NzMwRkFEODJENjQzQTAxCis6MTBCRTcwMDBGODY3QUI0NjI4MDRFMkVBOEVEN0JFODNGNjMyN0QyRjAwCis6MTBCRTgwMDAxMUQ0OTcyMUFGN0UxRkIxQjc3Rjk4RjM4MDRCRDM0OTcwCis6MTBCRTkwMDBBQjdGRTJBOTdGQ0Y5Rjk3MERGNDYxRjQ3NTFDMTRBQkMzCis6MTBCRUEwMDAxOUREOUVGMzAyREQ3NEY4NjM3NkQ5NEVBRUNGNEQ3ODdFCis6MTBCRUIwMDA5NEI4REM5OUYxNzlCNkJGODZDRjhFMEM4OEI3NTQ4QUQ2Cis6MTBCRUMwMDA4NTE2ODlCRTNCREY2MkM1Nzk5RDZGNEI2MEZCRDg5RUFFCis6MTBCRUQwMDA5NENCOEFFNzk1NkZCMTdCRjRGQUExMzI5Q0U0MzFFQTA2Cis6MTBCRUUwMDA4QjgxMUVCREJFMzhERkZFOUMxQkU0N0U0OTlBQzU3MzY0Cis6MTBCRUYwMDAzQzE3RjhDM0M3Rjk4M0YxOURENjdGNjUzOEQzRTMzNDg3Cis6MTBCRjAwMDBGNDYzMkM5RkFGMTdBNkIzN0Q0NTM1RjFENjE4RkU4MTlCCis6MTBCRjEwMDBGNjVDOTJBNjc4OEU1M0JENzA3QUNCQjA0NDE4OTdGQTJGCis6MTBCRjIwMDA3MTFFMThBN0FCQzZFMzYxRTNBNjc5RjQ3QzU5QjFENEJFCis6MTBCRjMwMDA4MUY1MzVGOEUyRjVGQkY3ODYwRjc2RkMzRUI2QjE1ODkxCis6MTBCRjQwMDAxM0M0NjlFMkQ1OEY0QjBGRTk3MzA1RkMwM0QyMjY3RjNBCis6MTBCRjUwMDAwOUVCOEUyMzRCNUI3NzI0MkM2QkZEMDZDMjYyRDA3QUYzCis6MTBCRjYwMDAwREJDNkYzNjhDNDdEQkE5OUEwRjBERURFMkQzNUQyMjM1Cis6MTBCRjcwMDAyNzM0N0E1MjNENzkxRENGMEZBMUNDOEM3NEY2RDMxRTk1Cis6MTBCRjgwMDAxMzY5N0ZERDkyNzMyNUM0NzkzMzI1MTVGNTVEMDAwNkFECis6MTBCRjkwMDBBMkZDNTQ2OUVCNTRGQzJBQTJCQjAzRTM5RUUzMzRCOTMwCis6MTBCRkEwMDA1NzZGRkYyMzY1Qjk0RkZFNTlDNjc4MDZGOTBCRUQ5RDEzCis6MTBCRkIwMDA3RTk3RjlENzA1QTREMDBENEVDNkJDOTZGMjk5QTAyNzVFCis6MTBCRkMwMDAzRkIxNjhGNjQwN0QzRUNDRkIyQ0IxRTA3RUZFNTlGMkRECis6MTBCRkQwMDBCNjNCNTc2Nzk3OTU0QTNDM0VCOTkyQURDRjQxRkExRkExCis6MTBCRkUwMDBDQzhGREE2OTg2RjVCQUE0QzE1ODJFMjYzN0E3ODIzQ0QxCis6MTBCRkYwMDAxNEFGOTc2MUM3OTYyQzgyRjU1RUI3NkYzMjVCRjJFMEEzCis6MTBDMDAwMDBCQzRCNDg3NTFERDgyOUFCNjVCNjhGM0FDRjQzQTQyQkRFCis6MTBDMDEwMDAyODVDOTVCQjlFQzkwNzdCMzYyMDMxN0RBRkY5Q0Y4QjVECis6MTBDMDIwMDA5MjE5REM2NTI5MjFDNTQ3QkY3RkRDOTI3QkRCRjcwOENECis6MTBDMDMwMDBCNDBGRDU4MTVFMEJCQTg4Mzc1NjNDNjZGRTRBMjM3QzI2Cis6MTBDMDQwMDA5NzgyREYwQzJGMjFDQjBENzA2OEZENkE3MDg4NUI4NEFFCis6MTBDMDUwMDA5ODc5MUEzRjkzMDQxRUQ3NjFGMkIxNTYzMkRBQUY4RjQ2Cis6MTBDMDYwMDA3MzNDNjhFNTBEQTY3MkEzQTlCRUM2MjczMkU3OTM0Q0MwCis6MTBDMDcwMDBDOUZGMzhFODlGNEE1QkNGMzRCNEQzMDhFNThGRUM2ODNBCis6MTBDMDgwMDAzRDI1NUE2RkMzQzVFQTU5QTE5RTg4RjUxQUE1QjFGMTlECis6MTBDMDkwMDBFQkQ5QTNGRDM1QzVFQUFGNzJEN0I2NTc4Mjk0OUZDQUQ0Cis6MTBDMEEwMDA1RTdFQzIwRDQxREY0RkE0RkE1NDg4N0Y1NTZDN0VDODc2Cis6MTBDMEIwMDAwRDc4M0EyNTA1REQ0MEVGNEY0MjYyQ0NCOEUwN0JCREZDCis6MTBDMEMwMDBGOEYyMzkwNUYwMjM5MEI1MjlERTVGN0NFNDQ2RDBENzNECis6MTBDMEQwMDA1RjZFOTYzMTJGMjZCMEM1MUFCMTUyM0VBRTZBNTkzNDAyCis6MTBDMEUwMDAxM0UyRjdCNDdDOEM5NTFGRkUxNEY2MEQwM0FENDY3QTZGCis6MTBDMEYwMDA5NkJERjA0NDJBQzQ4OTI4MjY5OUJENEQyMjY4Nzc1NEZDCis6MTBDMTAwMDA2REZBRjMzNEQwRTMwMUQyODM3QzY4NkUwN0UzNUY0OEI1Cis6MTBDMTEwMDA0NkI5MkY1MjEyRkI3RUQ3RjIxNTAyNUNDRTAyMkQ4RjRDCis6MTBDMTIwMDA3QzBBNzkwOTAxMTNGRjk0RjZBRTI3OUQwQUM0MTFEQTNGCis6MTBDMTMwMDAyNTU3MEFGQUU1REYyNURGMDUzREEwRTE4Mzg0OTgzRDE4Cis6MTBDMTQwMDA1MUJCNzVDM0U4NjMxNDlFQUU0REZGRUMxNjBDN0UzN0YxCis6MTBDMTUwMDBFM0MzRjNFMUY5QkY3QTU1OERBRjY3Q0U3MTdGMjhEQTdCCis6MTBDMTYwMDAyRTg0RURENDU2NjZGRjkwMzZGNkFDOTAyMzZFQjAzNzMxCis6MTBDMTcwMDAyQjlBNjQyRkU1NTA1MkIxRURCOUU3OUYwMjNGRUQwM0QyCis6MTBDMTgwMDAyQkZBNjlFNURCN0VGM0VFMDQ1QTJFREYyRUE3Q0M2NDkyCis6MTBDMTkwMDBEMzcxMEFBOTUxQkEwNEU4RkY5NjhFODlEMkExRUNEN0NGCis6MTBDMUEwMDBCRjUxRDQ1MUVDRkQ0RjkzQTNGNDI4REZCRTVGMjFBMzEwCis6MTBDMUIwMDBGQUUyQUYyMEJDNUZFOTc0QzZBMDRCRjhEODM0QjA1N0EwCis6MTBDMUMwMDA2QUI3N0VBNTgwREZGNUM5M0U4MTBDQzhFQ0RCQkVCNDQyCis6MTBDMUQwMDBFOTM3QjgxRTAyOUU5MDhFOUM0RUJENzRFQjQzQUZDOEVCCis6MTBDMUUwMDA4REFGRTY2MTNEMEZFOEM5NzhGNDdBOTFFQkU1Q0E1RDYxCis6MTBDMUYwMDAyRTkyMDRGMUNGM0Y1ODQzMzM4MThFMkZEREUzODY3OUIxCis6MTBDMjAwMDA5Qzk0QUExOTVGM0ZGMzUwMkFFQ0ZGOTVDQUMxNTQwRkMyCis6MTBDMjEwMDAzRUQ5RkJEMjY3RUY0MzdFMkIxMUFBNTNEOTNFQTY2RkJFCis6MTBDMjIwMDAyMDhGOTcwRjg0RjkyRDZDRkMxMUNFQUY5OEY4OTFFRjA5Cis6MTBDMjMwMDA0QTlGMTEwQjIxM0VGQzg1NDRBNjZGOEYyMTE3MzdDOEZBCis6MTBDMjQwMDA2Q0ZGRTlFNDQ2MkIyNEY5OTE5MzYwRTc4MzdERkRCNjBBCis6MTBDMjUwMDA4ODcxNTY0MjE2RTMzRUQ4N0Q1QTFDOTcyQ0MxRjIxN0JFCis6MTBDMjYwMDA3QzVGNkFCODZDRDFGQzQzOUI4MTVGMzczRERDMDFGNDk1Cis6MTBDMjcwMDAzOTNERDgzNzAwRTBBNDc4MDg3MjdDMDlCMERGMkYxRTYyCis6MTBDMjgwMDA5RDNBODBEMTg3RTUxQjYwM0JBQUZGMEJFMDNERDRFRkQwCis6MTBDMjkwMDA5MDcxOUY1MEQ3OEVFQjRCMzZGRUJEN0M3QzBBQjcwMzY2Cis6MTBDMkEwMDBENkIzOTNBOTZDQkZEMjNDQkZBNTdDN0VGNEFGODNFODI0Cis6MTBDMkIwMDBGODRCMjdERjRDREUzN0FENjJGMkFEQzk3QjY4RDY3NDMwCis6MTBDMkMwMDBGOEZFRjkzQjRDN0VBMDFEQUMxRjE0QUVDODAwRkNCRUFFCis6MTBDMkQwMDBGRjU2MDFGNTgxOTU0NDYyQzlGNTI2OTlDQkI1RjE3QkVFCis6MTBDMkUwMDA4MENBMjlDNDA1MjhEQzEyRTQzMzQ0Rjk4NEY2OUY4QzAzCis6MTBDMkYwMDBGODQ3QkZBNDc4M0Q2REE3QjNDRjAyMzAxRUQ2NTNBMjM2Cis6MTBDMzAwMDBFRjc1RUI0NzA5RDcwM0QzNjVBM0ZDOTNDNkZFOTc2NThBCis6MTBDMzEwMDAyRjU2QzgyNDA4QTY2NUM1MDc1NkY0QkIyQkI2Qzk4NTk5Cis6MTBDMzIwMDAzMEVGMzNDRDA3REZGRDMxRTVFQjMzNjE0RDRFOERGQTU0Cis6MTBDMzMwMDBEMzJDQTdBNTNCMzYwQkMwOUY2NjM5M0Q1MzRBNTdFQjFDCis6MTBDMzQwMDA1ODcyNEFERkM3OTREM0QyQ0VGRjJCRkE1M0MzNUJDMEQ3Cis6MTBDMzUwMDA4NDM3QUEwNzg3MjQ1OUUyRTNDRkFDMDc1REIyMUE1M0FBCis6MTBDMzYwMDAwRkQyQkY3NzQ4N0U1RkJFRDNGODRERTMzMzZBQTEwRDhECis6MTBDMzcwMDAwMUZERERDQjhGMUFCRkY1RjJBM0M2NkZFNjc5MUFGMTg2Cis6MTBDMzgwMDA2NkZFM0UwMTBDMzUwQTU3RTE2RTE5RkQ5MjhBMzZCNkZCCis6MTBDMzkwMDA3RjQzREIxREJBMjIwRkYxRTNDM0U1OEJENDFGQkEyMjIyCis6MTBDM0EwMDA0NTVGMEU5OUNBNjE1MzdEOUZBOTVDNjhBQUVGMzc5NUQ2Cis6MTBDM0IwMDBBQjBERjUyQjVBMEYyQTJDQzkyODYyQTg2NzVERkExNDE5Cis6MTBDM0MwMDBGOTM4ODY3REFGQUQzMzgxOTY0Rjk1MjBGMDQzN0E4RjUzCis6MTBDM0QwMDAwMjdBNEU1RTRFNEQzMzg4OUZFRDE1RDFERkVBNTY3QkQzCis6MTBDM0UwMDBEQ0M5RjRGRDQzNzZFNkM3NzY3Qjc4Mzk4OTk1N0JGQTFDCis6MTBDM0YwMDAyQjc1QTBFN0I0RjczRDc2MTZFN0VDMkVFQzcxMjdFOTM0Cis6MTBDNDAwMDBGQ0ZCNjM2REEyMUJGNjgzM0I0MzJDMUZCNTJGM0NCNTkxCis6MTBDNDEwMDAyODM3OUQyNERFNzcxNjE3OUMyQTNBMzM5NjgyRkY1NkRBCis6MTBDNDIwMDAyRjdBQzEzNTVDQjBFQzc2MzdFQ0JCNzVCNzBEQkI2OUM0Cis6MTBDNDMwMDAzNjdEQkZGMEIwMDhFNjMzRTk3NkI4NDcwMzVDMjRFODAwCis6MTBDNDQwMDA5MzA2RTZGM0ZDMDlGQTc3OEEwNDdGMzkxMUYyMjZEQUJCCis6MTBDNDUwMDA5ODdEQkQ2MDhEQzkxRTc2REVBQjYwN0VEOTdBNUQ1QzRECis6MTBDNDYwMDA0QkM3RkY2NUJDOUZEMjQ2RTNGNzMyQjIwNkY5QUZDQ0FCCis6MTBDNDcwMDAyNDBGN0VFRTBGMUNENUU0MjE4N0U0QjBGRDZEQzJGQ0Q1Cis6MTBDNDgwMDA1OEFFNzdBNzhBRDkzN0NEQTY3OEVGNkUxNzMxNkZGNkY5Cis6MTBDNDkwMDA3QzlCNDhFQTYwOUVDRDAyRUU3MzkyNjA3Rjk0QUIyQTRCCis6MTBDNEEwMDBEMjgzRkE0RUMzNEIxN0M4OEQxMjVGMUY3NUVERkNEN0IwCis6MTBDNEIwMDBGQzA3ODEzRjVFRjlFM0U4QTdFOUIzRUI5NTBGNDZFRTkxCis6MTBDNEMwMDA4MUYyQUVGNzMyRkU0OEZBRDYyRkQ4RjczNUVFMjM3NjUyCis6MTBDNEQwMDBFRkIzNjI5Q0FCN0JERjZGMzMxRTg0RjJBQjU2OEM3MzgxCis6MTBDNEUwMDA3NTJGQjdFMjNFNEE3MDlGMkIzNDAyQkUwRjY2RkU0MEE2Cis6MTBDNEYwMDBFRERFQUY0NkIzM0NDOTE1NDhBN0JGQzhDQzFGMzlERjM2Cis6MTBDNTAwMDBGNkVGMUY0MkZFQzhGOTM2M0EyQkIwMEJGNjI1QTBEQzM5Cis6MTBDNTEwMDAwNDVFQjVBM0ZGRERCREY3QUI3Q0JGRjNFRjM3OUYyQTA5Cis6MTBDNTIwMDA4NUY4OTFGRjVDNjRGNjBFRTBENzI0MTYwRjBFRUMxOTI3Cis6MTBDNTMwMDBGRjFDRTQzNzU3QjZFQzU3MjBDRTVFRjBEQTVGNDc4MzM2Cis6MTBDNTQwMDA5RUVDREVDMUVDOUQ3MzcyRTdCM0IwMUY2NjU1M0U1RDk1Cis6MTBDNTUwMDAyRTUzM0M5RjAzRTExOTQ0Qzg3M0NBOTg4MjYwNzYyQzFECis6MTBDNTYwMDBCQzMwM0M3NDUzM0NDMEJDMjg1RTRBNDFCRkM3QzM0NzgzCis6MTBDNTcwMDA4NkYyOEY4QThGNEZFRjYyN0FFQ0JCOTg2NzFGQzU4QjZDCis6MTBDNTgwMDBFMDYzRUY1RDIxOUI4MEYzNjdFRkY3N0QzNTFBRjRDQzE0Cis6MTBDNTkwMDA5OUYwMzJCNDQ3MkUzNUVGNkIxNUI2Q0ZGMjNGNjdERTE4Cis6MTBDNUEwMDA0MkU0NzJFNjNERjcxRjk2REU4Q0ZGM0Y4MkY1QjU3RkQxCis6MTBDNUIwMDA1RjM5RThDQkU3QkJFRUM3RjI0QjJFMkZDMjdCOTlGMjc3Cis6MTBDNUMwMDBGRkQzRkY2OTc0REY0MUU5RUVCRTM0REQ5RkZFODc5RDM2Cis6MTBDNUQwMDBGN0E1RTg3RTk4RDNEREU1ODFGREU1RUVCRDdGQzVCODIyCis6MTBDNUUwMDBBOTM2RkY0QkNERkJENUZGNDdFN0FERDlFQjMzMkNENUIzCis6MTBDNUYwMDA0NzY2RDFGQTQ3NDg2NDdEMjE4NUYzRjVGNEE5RUZDQzZECis6MTBDNjAwMDBBMjVGN0YxQkM3MUUzOUFEQjBGOEM3NkYwOUNCMTMwQ0YzCis6MTBDNjEwMDBBNjA5MkNDRjgzRkI0NTA1ODRBREVCMDU1OTI1Njg2NzNBCis6MTBDNjIwMDAxNDY0M0Q4MkY2MDE5MUFBOEZFNDUwN0NDQ0M4NThFODhFCis6MTBDNjMwMDA2NUY5NjA2M0YwMUNDQTc1MDNBRkY1NjIzQ0QwRTQxRjc2Cis6MTBDNjQwMDAxNjVDN0Q3RDNCRjgyOTA3OTc1MUY4RTgzODA3MDc4QjgyCis6MTBDNjUwMDAxRTZBMjk5MTI5RTk3MkM0M0ExQTlGQzdFMDc5QzgzRDM4Cis6MTBDNjYwMDAxREVCNEQ3MTFBRkRBMzk5RTBERkU4RkNCREVCNTVFMzJFCis6MTBDNjcwMDBGNzY5QkNGRkU5RTQ0MDBBRTQ5MzRDRjdDQTI0MDRGNUU3Cis6MTBDNjgwMDA0OEZEMEFGRDNFRjIzNDUzM0Y4N0MwQUZENUM1Q0JGRTBGCis6MTBDNjkwMDBBM0Y4NEJCNzMyM0ZGMkI3NjRDOTkxMUNDMDVGQkE4Q0E0Cis6MTBDNkEwMDBGMUMwNEJFMjhGQjBGQ0FGRUIwNkU2RTA3OTE0MjI3OUUzCis6MTBDNkIwMDAxMTdGMzMwNjU1NzI3QzMyQkY1OUUyRUQyNTY3NUQwNzY1Cis6MTBDNkMwMDBDOEFENDRBOERGQ0JFQzMyRjQ5NzM1QkZGNzUyNzgyNkRCCis6MTBDNkQwMDBEQzlGOTZGOEQwMUFERUE1NzQxOUYzNTY3NUZEMjI1RTFDCis6MTBDNkUwMDAzNDdBRkM0N0U5QTBEMUVGM0Y0QjhGNzMyNjdBQTQ3RkMxCis6MTBDNkYwMDBFRTkxNDAzRTBCQjhGRDNGRTVGMzBFMTFDQkU5NUUwOTJDCis6MTBDNzAwMDBGN0EzQjhGRDNGQzk5OTI0ODFGRDdGQUQ3NDU0MDRCOUU2Cis6MTBDNzEwMDAyQ0IxQjVDRTgwMzhCRENEMkIyMDVGNUZEOTY1NDFGRkYwCis6MTBDNzIwMDBDNjk2MjcyMERFQjMxQTI0MkMxRkI1NzhDNjgyQTE3REI5Cis6MTBDNzMwMDBFM0Y3NzY5RDc5ODA0MDdDRDhBN0EwRTE0RDBBNTk3QzJCCis6MTBDNzQwMDBGRTJGREY3RTNCNTEzQkFGODFERjA5Qjk4MUZBNUYwQkUyCis6MTBDNzUwMDAxQTQ5QzQ0MUU3Qjc1MDIyQzFDNDY0ODhFRjBBRTQyM0YwCis6MTBDNzYwMDA0MzdDRDc1ODg2QkZFRkE3NDZGQkI5NTRGRDc4N0FFNERGCis6MTBDNzcwMDBFRkZEREM0NUY1RDY0Nzk0Mjk3NkMzMTNGNzU1MjgyQkYyCis6MTBDNzgwMDBFOEZDRTNFRkI2MzE3QzA1OEU5MEQwNTBENDBCM0VCMTdGCis6MTBDNzkwMDA1MEI3NkZGNjg4OTVFOThGNUQ3RkRBOTEwQjcxQjE0OURCCis6MTBDN0EwMDBEREQ5ODk0QzlGMEU0N0JGMjBDMEZEODJGMzQ0NEQ4NEU0Cis6MTBDN0IwMDBGQzgzRjM2REMzMTI3MTVGQjA1RDc0Rjk2M0M0NjVCNjM5Cis6MTBDN0MwMDA3MkZGRjk5RjIwOUY4MjNFQkIzNzkxN0EzODg3RDE0RDA3Cis6MTBDN0QwMDA3QTMwMUUxQkRDNjQ4QkI5QkY3QkJGNTU4QjM3NzFCQUI3Cis6MTBDN0UwMDBEMTNGNTEzQjZGQTQ2MkJFNDgzMDUxNEZCN0FFOTk5RkM1Cis6MTBDN0YwMDA0OEEzRkJEMjAxRkUzRUQyRUQ5N0ZDNTdGMTBCRkUzQTY3Cis6MTBDODAwMDBFMDc3QUJCRDczNUFBQ0YzNjAyQjM5RkU2RTNDRjAzNTZDCis6MTBDODEwMDBDNjMxQUY2RTZCQjIwMEZGNUVCREM5NjJEODZGMEM1QUY1Cis6MTBDODIwMDBCOURGMzU4NjhDMDFCODZFM0M2MDc3RTUwMTVEREE0NThECis6MTBDODMwMDAyRkU0MEYwNkRBM0U1NUZDMzFGNkFEQ0NGODg0RkUyMTJDCis6MTBDODQwMDAyRUJFQ0ZDQUUyRkM3QkU0RjA3Q0MwRUI5RUIzMzZDQ0JDCis6MTBDODUwMDBDRkQ5QURENDk3Qzc4MkYzNEEzQkQzNzMwQjQ5Rjg5RTI3Cis6MTBDODYwMDBEMTk5RkY3OEY4OURENEVEOEM0QzA2M0Y3MzEzRTE3MTlDCis6MTBDODcwMDAwQzMzRkYxMUU0RTNGMzVCMDg5RTBGMDVCRjE0RjRDMjExCis6MTBDODgwMDBGOTY2NzYwRTk4QTI2NDJERjhEMzU0REU3RkEwOEZDQjg0Cis6MTBDODkwMDA1Q0Q5QkFGRDlGQzAwRUE4NkExMzNDOTAzQTVCMjU3NTFGCis6MTBDOEEwMDAyQTEwNkYwREI0MjY4OUIwRUVFNkE4NUE1RUE1NjdENEFCCis6MTBDOEIwMDBBRDNBQjlEODY3NjVGOUM2MDcyN0VDQjkwM0M2RkRBQzMwCis6MTBDOEMwMDA0QjIxNjA4RkY4NUVFRjcxQzNCQUZENTk1QjZFNjJBQ0FECis6MTBDOEQwMDBCQzc5RURGOUVCMUEzMjYzOEEwNEZEMTBDNEJCOTkxRkQxCis6MTBDOEUwMDBCMjlCMUQ4NkYyRjc0NEZGMjA5MEFGMUJBRDlERjc3QUY3Cis6MTBDOEYwMDA2M0QwQ0Y2RjYzN0M3NkQ5RkEyREY0RkY5OTdFN0I0N0E2Cis6MTBDOTAwMDBEMzZGN0VCMTUwMjc0NzU5QjYzRUZBNkQ0MDJDRkRCNjI1Cis6MTBDOTEwMDA0NDUwMDcwMERFOTdFQzFEMzYwMEU4QkFFNEIwREMzRjc3Cis6MTBDOTIwMDA5NjdFREI1NkMzRjZGMzVFRTZGOUIwREQyRDU0QkY1REFGCis6MTBDOTMwMDBBM0QzNkYyRDM2Q0M4QjMzQjc0QkI2NTlGOEJBNzgwOUUxCis6MTBDOTQwMDBGRDE2RkFFRjkxQkY2REEwREY2MkNDNzc4NDhERTkwRDAzCis6MTBDOTUwMDA0REJGOEQ2RTNCODZGQTZENzQ4QkM1OTAzNzlBNkVCQjVBCis6MTBDOTYwMDA5NDdFMTNGQURGMEFGNjcwQkJFQzREODhDMTNGREJCODRBCis6MTBDOTcwMDBGREZEMzJDRkMzODM3MTQwQ0ZERDYxNjNGQjlCOTdBQjdECis6MTBDOTgwMDBFN0IyRUQ4Q0RFOTdENDczRkY0RDc4RDZGNERDOTI5RDQwCis6MTBDOTkwMDBEQTM5NDczMzFGMzIzREI3NjQzN0Q1NzMwMkYwMjNEM0ZBCis6MTBDOUEwMDA3MzRCRjZCMjdCMUNDQ0ZBMkRBQjhGN0UyMzU4QkYyQTdCCis6MTBDOUIwMDBDMkRBMDc1QTMzMzdDQ0E1RkQ4REYxQzk1RTFCQUQzRkY2Cis6MTBDOUMwMDAyNkFBRUZDNkVBRjVERDFEMzY3NkVGNDIxRjdERDc3RTNCCis6MTBDOUQwMDA3OUZBNkUyN0Q3Nzc1NDhGMEQwNUZENkFFNjBGNkY5QkE2Cis6MTBDOUUwMDAzMUVGNzhDRkY4OTNDREJGMDY3OTc5NDNDNDdEQzNBM0U3Cis6MTBDOUYwMDBGQzVDREE5QkUzNEZFNjAxN0YzNURCOThGRUFERTVGQzlFCis6MTBDQTAwMDA3N0FFMjY4OEZEMTdCQ0NFRTY1N0U5NjRGOUM4NTUyREU4Cis6MTBDQTEwMDBDQzNFQUM2QTE2NDIyQUZERTdCNDA5NUYyQjAwRkZBMkE4Cis6MTBDQTIwMDBCRDAyMTk0MENCQjNBQ0FDM0U3OTQxREJGNzIyMzM3Mzg2Cis6MTBDQTMwMDA3NEZDQjA2MDVDMzlDNkVEMTc0OEM0MDY3MUY5NzJFNzQyCis6MTBDQTQwMDBCNDRGMjAxRTVGM0U4RUM1RjFDQkY5RkI0NTg3M0JFQjEzCis6MTBDQTUwMDAyMDlFQkRFODQ5MDFGNzNEMDlDRjA3RDBGMjFCNEJEQTE0Cis6MTBDQTYwMDA5NjYxQkNENjlDMTdBMEU5RjM0NTIxRTNGQjcyNTMzRUM3Cis6MTBDQTcwMDA2MzEzOUZFNzJDQjExM0YxNDJERTEyNjNFNjI1MzQ5OTZDCis6MTBDQTgwMDBGMUQxQ0VGMUIxNDlDNDc1QjMxNzFGMTQzRjZBNjY1Rjg3Cis6MTBDQTkwMDA3QzUwOEFDRUNDNDk4RENFN0ZEMTFCNzQ1RTc5RDE3OTAyCis6MTBDQUEwMDA2OUY4MzBDRjRGOEIzQjk3RjM3NkYxRTZBQkUxQUZDRjMwCis6MTBDQUIwMDA3QzM1N0M5QUU2RkQxQ0U4MEQ1MDA4MzkyNDE3RjI2MjlCCis6MTBDQUMwMDAyODFGQTBERTA4RkU0RUM0RjNGQjg1OTM0NjBDRDBFQjc2Cis6MTBDQUQwMDBFMUFENUM5RkU3RDY0RjJBMTg0ODAwNUZBNDFBRjhBNjdDCis6MTBDQUUwMDBCODYxRjFBMTgxNzRERTYzREY1N0M3QzBGMkY4QkQwOUY4Cis6MTBDQUYwMDA1NjNGRUM4RjZFQjVGN0EwNUVEM0Y4RUExQkNFNTdFRjJBCis6MTBDQjAwMDA3MjNDRUUxOTU0OERFNzU0MDNBRDgyMDdFQzhBNDBDNEExCis6MTBDQjEwMDA4RUY4MEI1MEZDQzFGOTk1MDAzRkJGMThBMEZDMDVGMjQwCis6MTBDQjIwMDA3NEYwQzkyRjE5QkVGNjBBMkFDNEM3QTc2OUVCMEZFMDMzCis6MTBDQjMwMDA5RkQ2Q0Y2RDYzRjgwRjg0MDRDNDdGMUVFOUMxRkQ5MUI5Cis6MTBDQjQwMDBBQTA2QzExQkExRjVBQjVBMTc2M0RFODNBNjZGRTk5RjQ2Cis6MTBDQjUwMDA1MzRGMEYxRDNGNEFCMUY4MTEyQkU5RDZCRjcyNUVFRjVDCis6MTBDQjYwMDA0NjZCRkRCQkMwOUYzN0JFMjA5MzI2MUQ3RjY2RDFGRjVECis6MTBDQjcwMDBCRThENDEyNzBEOUY5N0UyQ0IwQjFDNEZEQjAwOEY0RUU0Cis6MTBDQjgwMDBDMDU3MEZCMzlGMjI1RkUzMzkxQUVEN0I0MDBBMUFGMEJBCis6MTBDQjkwMDA1OEYwRDQ4NThCRTI2OUFDODYyN0UwNTNEMDUzNkQ0NUJECis6MTBDQkEwMDAyMjk0OEI1QjA1RDIyRkIzRUYzQzYxN0Y1MjJGQjc4QjYyCis6MTBDQkIwMDBGNjFFNjNGRDNGMjNFMEJEMjU2NkJFRDVFNkREODc2RjJCCis6MTBDQkMwMDBFM0YwMkI5QzRCMDNCRkU4NzJGOUY2MUIxM0RGQkU2OTQxCis6MTBDQkQwMDBFRjM5OTIwQjdDQkI1NzYwRjE4M0I2MjRDM0ZFRTIyMDkxCis6MTBDQkUwMDAzQjVCRkZCN0RBMjk3RkMzQkVENjYxRDlCQjUxRUQyQkMyCis6MTBDQkYwMDBERjA5N0NGRDAyQkI1RjdGMkVFOTJBOTgwOEU0M0Q2RUM5Cis6MTBDQzAwMDBCMTYxMUUxOUMyMzE5NEQ5OTU3QUJEQkFDRDRFRkFERjAxCis6MTBDQzEwMDA5QTE3QkZGRjgxQkNGRjc4NzY4RDU2MUUwNUUzNDFCRTkzCis6MTBDQzIwMDA1NzJCMUQyRjJCM0E5RTU5QUY2QjdFRkVBNUU2MzVGMjkyCis6MTBDQzMwMDBCRjM4QUZERTNDNENEMjgxRkI0RTk5OTJGRjMxQUIyRTE4Cis6MTBDQzQwMDAwRkVFMzY5RTY3NDQyMTQwRkI0QTU3MkZEQjc2OTE3QUUwCis6MTBDQzUwMDAyNENEODNFNzlGRUVGMTY4N0NDNkYyREQwQjc5MUVGQkU1Cis6MTBDQzYwMDA1NDcxRTI3QkIwN0U3RUU2NjNGQjdDNzkxNkYyRkI4OTMxCis6MTBDQzcwMDBBMDlGMjdDQjc4OEVFRkIzMjMzMkM2NkIzRjlCQzJGMkM3Cis6MTBDQzgwMDAzODZGN0FFM0EwMDRGMTk5OUI0MDM5NTE3Q0RDMzQ1NjJCCis6MTBDQzkwMDA0MDdGMDU4RTYxQzFCRUQ5MkU2QURGRjg0NkUyN0M3MjA0Cis6MTBDQ0EwMDBFMTFDNTdDRUE2RkEwMjM4N0YzQzY2NEJBODE2OUVERUUyCis6MTBDQ0IwMDA4MjlFOTQzNzAxOEY5MzQ0MDI3OEVDRjBGNTJCODBGQjMxCis6MTBDQ0MwMDA5M0VFRjkzM0MxRkI0M0U4M0E4QkVEQzdCNDkzRkU1MEMyCis6MTBDQ0QwMDA2RjgyQUYzRkJBMDNFMzVCRDYxNzQwN0M3NEQ2NDFBNzlGCis6MTBDQ0UwMDAxM0VFNjdDOTZBQjQ1MDlGMjE4QUJGMDkyNDU0MEI3MTlGCis6MTBDQ0YwMDA5QkYxQzc3REI3MDBCQ0E1RDQ1RTgwQjg3MzY5NUI1MzU4Cis6MTBDRDAwMDBBRDFCQ0E4RDgyNTdBNUZEMDc4MkZFNjk2RTNBOEY2REY1Cis6MTBDRDEwMDAwRDlGNEVGQjBFQzgyM0FEMDdERDA0MUE1OUJEQzAyNjdBCis6MTBDRDIwMDBCODc4MDhERUFGQzMzQzlCRTI0RDAyMUVGQ0RBMTYxMjU3Cis6MTBDRDMwMDA4ODhERjUxQkIyRDE3RUI3MzVEMkY2NzlCMDRFRDBGNkRDCis6MTBDRDQwMDBEMEVGQTY0RkRGQjkwNUU0RkQ4OEM4REEzN0IzN0RFQTM2Cis6MTBDRDUwMDA2MkRBNEUwNUJFRERCNDE4RkI1QkQ0Mjg5MDM0REE1RjhFCis6MTBDRDYwMDA2OTMzNUIwNzRBOEZDODVFRjhERUIyRkY0OTVDQzc2NjZECis6MTBDRDcwMDBEMkYxMDY2NjgyREU4RjRDODEzMkM5MTUzQzE4RUZBQ0M5Cis6MTBDRDgwMDAxODg5NzRFQkU2NzI0RTI2OEU2MEZBNDNFMDY1RUUzNzQyCis6MTBDRDkwMDA2ODc2RDNCQjc2OTZFRjVCRUM1REE2RjRBM0ZEQkMzOTU5Cis6MTBDREEwMDBBRTdGMjZBNDA1MDQ1QTNGQzVGREU3RTMxNENGN0VEQTIzCis6MTBDREIwMDBFNTUxOUVCNzcxNzBEQ0M3NEFBNzZFMURGQUNDQ0VFRTY2Cis6MTBDREMwMDBCNzVBRDAzQTA5RjMxOTE2OTI0MkNDNjdCODcxM0NCM0ZFCis6MTBDREQwMDBEN0RFQkFENjFFODIyQjBFREU5MjdCRDJFMUZEQzE2QjZFCis6MTBDREUwMDBBRDY4RkY5RURCMjYyMzFGOUQxQkRDODlGMUU5OTM4RDM3Cis6MTBDREYwMDAzMjlFMUJBRTZENjRGNzczOUQ2QzY2RUJCOEY4MENEQjZFCis6MTBDRTAwMDBENzJGNzEyOTU4M0VEODc4Q0IzNDU4REY0RTZFNjJFNzYxCis6MTBDRTEwMDAxRDBCOUU5OUFBNDBCOUE0NDlGMEIyRkI4Qjk4N0VENDExCis6MTBDRTIwMDBGQ0I3NjIwRkNCNDdEMEY0NUYyNTlGNzc5RkJDNDU5MzNCCis6MTBDRTMwMDBCRUFCRDRENjFCOTNCRUFCODQ3RDY1MzczQzhERUYwMzcwCis6MTBDRTQwMDBDNEM5RjQyMEQ4RkQ0MEY3QzhEN0M4QkY1NTQ3NjQwMjBECis6MTBDRTUwMDA3NkJGRjA3MUQ3MzRDQ0M3REEyQjYwM0M3RjdDOUJFMDg3Cis6MTBDRTYwMDA4MzdERkREMkY3QUQyMUI0NTc0MzQ1NzdGRjA0RjRGODM1Cis6MTBDRTcwMDAwNzU2MjJBODkwRDc0RUYxNEVGNUMzMzg2QkNGOUY3RTUwCis6MTBDRTgwMDA0MURGN0Y3MkQ0MDY5OTMwOTQ0RjhBMTBDRjVBRkU2N0UzCis6MTBDRTkwMDBERTY2OTZDNzkyNzc3NDdEMkE5Q0I3MjQ1M0ZBQTFCRUFBCis6MTBDRUEwMDAyRDY5MTA4OTVGQTczNzNFMTE3Q0I3RkM5OEU5NjVCQ0Y2Cis6MTBDRUIwMDA5RjQyQTM1RjlFNTI1RjBDRUJEODMwMDdEMzRCRUE2NkNDCis6MTBDRUMwMDAxOTcyNDRDODYxMUUyN0ExRjYzNDlFQkY1REI0N0I1RDE0Cis6MTBDRUQwMDBBQTQyRUJENUYxRkM4RjQ1N0JEN0E1OEFGNDdEMkRBQzFBCis6MTBDRUUwMDA1RkI0RkUyMjg1RjVCRjY4OUZFMDY5RDJGNUFGQjVENzg0Cis6MTBDRUYwMDBGQUQzRkE1MTc2MUJGQjE5QjY5Nzk3MkZCMzFGMEQwRTc1Cis6MTBDRjAwMDA2REZDNzhGNkY4Qjg3RkI5QjAxRUVFOEIxOUY3OTY4OEVECis6MTBDRjEwMDA0OUM3RTMzRTlFMzk0Q0JGREZBMTNEQjVGODZCRkUzQkYwCis6MTBDRjIwMDAxNkUyRDNFMTZEREM5RjFDQzRBN0UzOEI5NkIxNTRCRTFGCis6MTBDRjMwMDAyOURENkU2ODE1NDIwMDRBQ0JEODYzNEE2NTFFOTYzRENFCis6MTBDRjQwMDAyMENGNTUzQzRFNUIzNTg1RUQ1QkI1RTQxQzVEMDFGMkIxCis6MTBDRjUwMDAzRDMzNEY0MDNFMjA0MUJGRDIyRjA1RUQyMDE1RjYxNzNGCis6MTBDRjYwMDA0QUYyNThGQjEyREExRUU0QUVFNTQ5MjY4NzU0MUZBOEEwCis6MTBDRjcwMDBBMDJGQUExQUQ3NERDM0ZBOUIwNDE1RkE2RjY5MkFDMkNCCis6MTBDRjgwMDBGNUJFNzQ5QzQ4RjBGQkE2NjM2ODdGOTRCNjFFNEIwMTA3Cis6MTBDRjkwMDA3OUE1RjJCOTFFRDZERkFBODk1NkJDQ0Y0QjkzM0I0RDdCCis6MTBDRkEwMDA4RURGOTJGOTdENEQzNkNGMjhDOEVCN0YxMDgwOEEyMTI1Cis6MTBDRkIwMDBCRkUyMTFDMkZDRDQ2NjE5RTUyQzMwOEVDOUU1NUJEQkZCCis6MTBDRkMwMDA0NDk0RTc4M0Q3REU4RTcyNzg2RUIzMTA0NzhFMEIxNENECis6MTBDRkQwMDAzODk3N0MzMkM0QkVGN0NBRjE1NjgxQ0IzMUQzMEYyN0M0Cis6MTBDRkUwMDA5RDRDQUUwQkUwM0JDOEYxNEU4MUZCODNDQzFFMzRDQjk1Cis6MTBDRkYwMDBCMTI2OTc5NzkyREZGMjJEMjY3OThFMjNCNzFENTJFNzNGCis6MTBEMDAwMDBBRDMwRUUzREQ3REExMUVFODJFRkVGN0VGNzFFRDQzRjYyCis6MTBEMDEwMDAzMkU2N0QxNDdDRkY4MTU0RDA3N0M1MTJDQjU3RDJGMDE1Cis6MTBEMDIwMDA1ODI5QjE3Q0I2M0U3MEFDNUZBNjBDQkMyQzc4OEM3MEQ1Cis6MTBEMDMwMDAzQzZENzc0NUY1ODcwODdDQ0VFRUUxMEE2RTkyOTFDRjg0Cis6MTBEMDQwMDBDRDcyRjg1Rjk1OUZCRjk3M0MxRkU2RkNBM0MxMjNFRTBFCis6MTBEMDUwMDA2NUVEMjE3RjJDNDJGMUY0REJFNkU3MzA0RkY1RUM4QkY4Cis6MTBEMDYwMDBDNzZFMDQzQzk3RUZBMTdDNEJFNzdCQUVEOUM1RUY3QjQ1Cis6MTBEMDcwMDAwOUUxM0E1M0Q2MjI2MjFFMzg5MTIyRjlCN0I4RjQ3MjA4Cis6MTBEMDgwMDBDOUYyOTBDQTVGNzYyMTdGOTRFRDYwRjlBNDY1QUY3QzA4Cis6MTBEMDkwMDAzQzFBRjM0NDk2Rjc2MDdFNTVGMDQ1NkU2RjA2M0I0N0E5Cis6MTBEMEEwMDAwMzVGOTc0OTJDMUZDQTJDRTdCNzNBOThGREQ5QjUzQkM3Cis6MTBEMEIwMDA2MTM2Q0M0M0Q4QzJDRUU5OTc4NTZGOTc4MTBGQjU3QTk4Cis6MTBEMEMwMDAzRjc0Qzg1QTNERENCRjBDNTJCRTg1RkQ3NTgwNEY3RjUyCis6MTBEMEQwMDBFRTVDQ0I4M0VBREFDQUU0QkVBQzU1NDY3RkE5NkM0QjYyCis6MTBEMEUwMDAxM0M2QjEwMzVCM0VDNTNDRjc4Mjk3Qjc2MUZDMjBEMDA1Cis6MTBEMEYwMDAyQTFBRjMxRUI3ODhCODdGNDU5RkI4NEY2NUNFM0ZBQzVDCis6MTBEMTAwMDA2QUE5QzRGREI2QUEzMENGRUYzM0U1QkY5NUJGQkNGNzFGCis6MTBEMTEwMDA5NTIwNDU0REY5QUY1RjcwODMxRTM4RERCMUQ5MERGODBDCis6MTBEMTIwMDBBNEZENjFERUUwRjczRjk3MEM3OTUxRjFGMzdCN0RDNkZBCis6MTBEMTMwMDA3Q0MyRjBBQTk4Rjk4NEE3RTExRjk0QzExRjcwNzA3RTg5Cis6MTBEMTQwMDBENUYyMzBCN0Y0RTM3OURBOTFGQ0MyMThGMUZCREU3MzYzCis6MTBEMTUwMDAzQkRCQkU3ODE2RjJEQ0JCNzY5Qzc5MTZFMEFFRjhEQkUyCis6MTBEMTYwMDA2N0NGNDIzRTEzRDk2N0M3NzUyOUYwRTJFRjMxNEY1OEI4Cis6MTBEMTcwMDA2QkY3MEIwN0Y3RjNCN0JFODBGOUQ1RTczRUIwQTI5Rjc4Cis6MTBEMTgwMDA3MzZFRUZDOTBDQzg1RjNCQjdGREVCNTQ4OEM3RERCQkJFCis6MTBEMTkwMDA3NzJBQzYyQkVGREQ1OTMwODBDNEQwRUZEQTEzRjgzMjhFCis6MTBEMUEwMDA3NDE5RjlERDY2M0ExQzZDMzk4ODc5NTc2N0RGQjdBMkM0Cis6MTBEMUIwMDAzRUVCQ0QwQjBENTdCMjNDNUI5NUU3ODMzNkM3Q0VBMzU0Cis6MTBEMUMwMDBEN0YyMThBQjVBNkVCOUU5NUFEMENGMkRDQzlFRUJDRDIxCis6MTBEMUQwMDA2QkJDNTQxRUU4M0I5NDlFRDc1QzA2REQ5QTc5OUVBRkVCCis6MTBEMUUwMDA4OTZFNjdFMTFGOTQzRTYxMTNEREJFNjg1OUY4QUJBN0Y1Cis6MTBEMUYwMDBFMDVCNEJCRkI4NzlBMDkxQ0JDMDk3OTZBN0ZGNzM4NzMwCis6MTBEMjAwMDA2RjhGMDNDRUZERUQ0ODA4QTYzMTdBODU2NjBBNjBFRjgwCis6MTBEMjEwMDA3RDkxMDFFNzFBNEVDOTNEOThFRkQxQjNEN0VBODE3Q0UxCis6MTBEMjIwMDBDNkIyQkRFRkExN0M5Q0RCNzkxNEUzQUE4NEU3Qzk5RjU5Cis6MTBEMjMwMDAyM0JEN0YyQ0FGNTlFMEYzREJFNDYyRjlBMzFDRUY5MDMwCis6MTBEMjQwMDA1RkFBQkFGMTNEQ0YyMzY1N0NBQkU1OTdDNkNCMkJFRDRBCis6MTBEMjUwMDA3MTBDNjU3MTY4N0U2RUEwOTJGQTQ5RkNERUFDREU3Q0QyCis6MTBEMjYwMDA1MzYxMUNEMEU5OTgyMTRGNTc5QkI3QjkzRjBGRDc5QjBCCis6MTBEMjcwMDBEMUZDRThEODc5QkI1QUJFNjA5NDRFNkMxREQxRjI5RkE4Cis6MTBEMjgwMDBDRjM1RjFCQzY5RkEzRTdEMENFNEMxQjFGNTNBMTAxMjFDCis6MTBEMjkwMDBERTIzMzFFNDUxQ0I4RjNFRTMzMEU1NDU4NzJFMkYyRjNGCis6MTBEMkEwMDBGQTUyRjBGRTY3RjFGMUExODNDNUFCMzVCQzc0RkQyNUUwCis6MTBEMkIwMDBCNjNFNTYxMjk4REQ0OUZENTMzOTAxRjcwNTk4N0Y3QTNECis6MTBEMkMwMDAzN0Y3NEYzNTdDNjlGMEQ2ODU5OURERDBCNTg1RjkwN0ZDCis6MTBEMkQwMDA2Njc5QUU4QTczNUY1MjBBMUZBN0FBNzVGRjY4RDAzQkIyCis6MTBEMkUwMDA1RDA3NzY3MzdFNjNGQzVDRDU3QzhDRTVERDUyRkQxQ0FFCis6MTBEMkYwMDBEMkVCNjc3RUJGODRCOUJGMENERTVGQTAyRDc2N0Y4MTQ1Cis6MTBEMzAwMDBFNjRGNjNGNjc3NUFGMkREMEVGMDlGRUU2MDc2RDJFOUQzCis6MTBEMzEwMDBCMDM4M0RENkZEMzZCNjA0RDk5MDNGNTBFNzYyRjc2NTg4Cis6MTBEMzIwMDA4ODZFMDdEQTQ3RjdCQUM2QkQ5Rjk4MDI0RjA1RjM3QUIxCis6MTBEMzMwMDA2QTk3RjEzQ0EwOUY3OUYxNUVEMTVBRDcwQzAyRjAzQzdDCis6MTBEMzQwMDAwNEY4RDFDNTE5NjQ4RjlGODA5RDI2QTcxNUU2ODk2QUM4Cis6MTBEMzUwMDAxNERFNUU3QUE0NTg0ODQ4NEY3RjI5OTIwRUZBRkNDMzI3Cis6MTBEMzYwMDA5QzkzMzJGNEY3NkZBNkY4QzhCRjQ5QTQ2RTAwODVFQjEyCis6MTBEMzcwMDBERjgyODI3Nzk5MUFERkFFRDZDQUZFOUY4QTg2Nzg0NjA4Cis6MTBEMzgwMDA5NUI1RTc0M0IwQ0ZDOTZCNzZEQzBGMTdGN0Q5ODMxODkzCis6MTBEMzkwMDAxRjdCOTZEREFCNzE3MEU3NTdDRkUzQkQzQ0JGQjIxMjg4Cis6MTBEM0EwMDA2RTE3MEFBMDBGNEE3ODlDRTJFNENFQUY5RUZENzdCMERDCis6MTBEM0IwMDAyM0ExMzExREJGRTQ1OTVBMUZFQ0U3RTYwNEI0RjdCQkMzCis6MTBEM0MwMDA3NzI0OEU4NjM4NDBDOTZCMEZERTA4RkFBMjA0NzQxRkRBCis6MTBEM0QwMDBEODk5MkYwRjA4RDVEMkZFNEVGNDY3RTUxM0RCMDZFMzhDCis6MTBEM0UwMDBCOTgwRjIxRDJFQ0MyNzNDQjg3MzU3MTVFOEZCNzMyRjdDCis6MTBEM0YwMDAyNzEwRDBGNzY3RTVDRUJGNDEzOUIwMjc5MTM0QTk2ODJGCis6MTBENDAwMDBGN0E5RkE3NTc1MTE5MTU0QkQzRDU3MEU2NTQzN0UwQjEyCis6MTBENDEwMDBDMUZDMTY4Q0JGNTE3RTJFNkY0REM0RjMxRkJBN0E1Q0NGCis6MTBENDIwMDA5RTgzODNGODNENTE4MzQwRUVBOEREQTgxQUYzOUVEOTcwCis6MTBENDMwMDBGNzA1MDk0QzdGMDVBQzNERjdCM0ZCMTA1OEZEODBEMkQyCis6MTBENDQwMDA1M0NDQ0FGNTgzOThEQzc2NjBGREM1MUFCRkYyRUY3RDM4Cis6MTBENDUwMDBGQjY1RjUwMzA5MkMxRTEwRUQ4N0I1QUZCMkIyRkIzNUE1Cis6MTBENDYwMDBDQ0Y0RkQ2OTgyQzBDRkUzRkVGNUNBNThGNzRGQzQ4MDAzCis6MTBENDcwMDA5RkREQ0IyNTkwMjBEQ0JGNEFCNkRCMzE0RkFCNDI4OTI0Cis6MTBENDgwMDA4Qzg0N0NGNTU3MTRCNkZGNTFFMThFOEM4NDdDRjUzRDdECis6MTBENDkwMDA1Q0ZGNTUzODY4OTlCRTFGQzRFMTgwRkE1MDI2QjZDRUFECis6MTBENEEwMDA5N0YwNUVBNzVENzZCQzBGQUZGMjM1OTcwRkZEODQ1N0ZFCis6MTBENEIwMDBCRTNBRjE3NDFFRTRBQjI1NjA5RTc0RTU2QkZGMEJFOTg4Cis6MTBENEMwMDA1RjY5OEREQzA1RkNERkIzREQ4QUY3OTM3NjZEM0Y5Q0U5Cis6MTBENEQwMDAwMTc2NDM5NzFDQzk0OEJFQzhCRTRFNjVEODZBRDhBNzE2Cis6MTBENEUwMDBENkU2NzFCQTY2RTkwNDM4QzdBQjlEMzMyQzhCQTMyRkZGCis6MTBENEYwMDBERTQ4NjA3OTFENEQwOUJFNUYzMTNENjdCQzVGRTY3NDUzCis6MTBENTAwMDBDRDZDQzNCRDg5NjVCNkQ4N0FBQzE5RjQ4MjJFOEUyNzRFCis6MTBENTEwMDA0NkNGMTUzNjQzQkY2NzQ5NjdERDIwNEE5MjRBQTEwN0M3Cis6MTBENTIwMDBGN0M3Q0JCNjY0QTY4M0JGN0JDMDdFMjVFRTVCMUQ5MDlDCis6MTBENTMwMDA1NUY0MDdFMUE5RDdDN0E3NkFCQ0I5MTI5RUE3Q0ZDQUZECis6MTBENTQwMDA5NTI4MUNERDREOUYxNjBGMjI5MDFGNjg5RjFENEIzRjk1Cis6MTBENTUwMDBFRDRENDg0MDdFMkFCMzU5NjM5RURGRkMxREU3Qjc2RDUxCis6MTBENTYwMDAyMDZGNjNEOTc4REVFQ0U4QjgwN0U0OTAwMjcwNEM3NDYxCis6MTBENTcwMDBBQTM4OUYzMkVBMDdCMDdCQTJFNkU0RUFDRjZEMkY5Mjg5Cis6MTBENTgwMDBFQUIxMUU5NTJGQzRDNzIyQjI1RUM5NzNGNkQ1MkI4QkE0Cis6MTBENTkwMDA5NkU2RTU0QUI5QThCMEJFRTlFNTM3MzE0QTI3MTI0QzBDCis6MTBENUEwMDA0MTNCNDlFMjM0MjRFQjA3MUFGMkZEMjVCOUQwMDZGOEQ1Cis6MTBENUIwMDA1MjQ4QTE0NzEyODFENEY1MjhBNzBFMTJDNkE3OTM5QTA0Cis6MTBENUMwMDAyMTZDMURBQTI2MTAxRjNGQzVGNzY3QUQ5MkZBMThERTIxCis6MTBENUQwMDAzN0QzMkVBMjNFQkYxNERFREU0QjcwMjNEQzU2QTk5QTUxCis6MTBENUUwMDA3OEQxREU5OEU5MDE3QjRDMDhGQUM5Qjc5NDFGNkE2QkMxCis6MTBENUYwMDBBNkU3QjI3M0UxQzQwNzc5NkU2RUMyRTA3MzdCMEU3RDVECis6MTBENjAwMDAwREY2MDFFNTMzNzY4RkQ1Rjc0OUE4OTY4RTA3Qzc4Q0JFCis6MTBENjEwMDAzMUZFMzc5OURENjc2RjFFRUYyRjlDMEUyNEI4REY3MDQ3Cis6MTBENjIwMDBERjM5RkNGNTY4RjdFNzgxQkY5RUY4Qjc3MUIwMUZFM0ZCCis6MTBENjMwMDBGNDkwMDhEODRCMDk0RTEyNDkxODBERjdFNDQ5QTdGNUE0Cis6MTBENjQwMDBGMkVCMjZBQzNDOTRCMjMzRTgzNUNGNDRFMzc3MzM1RjVBCis6MTBENjUwMDAxM0FGRjQ3OUFGNUUxNEIxRkRFN0E2RjY5RjVGQUNCREUyCis6MTBENjYwMDA4NjhGODA2REEzRjc3ODZFMTQyRjBFM0U4N0UwNjRFRkVGCis6MTBENjcwMDA4NTRFQzBDNzY4QjdCNzE2RThBOEY0N0NGODIwRTA2MzA5Cis6MTBENjgwMDBCNDkzRjk4MzI5MEQ0NEVGQUZFNTNBOTlCRTVBQzFFRjNGCis6MTBENjkwMDA5RkE2N0Y4NTRFNUQ3RkM0NjNDM0Y4RTgyQThFRjdERUMwCis6MTBENkEwMDBGQTVBRENBNDRGN0RCQjA0NzhFRDUzREYxRUFGQkUyM0Q2Cis6MTBENkIwMDA3NjdENTczQzc4MTI2MkMzOTMxNEE3RkY2MEVDRkE1NTRECis6MTBENkMwMDBBRkJERjc2NjQ0ODU5NzRDNkY0MDcwOUU5RjVCQ0U3NUVCCis6MTBENkQwMDA4MjdGOTVGODYxNkExMUUzMEFCNjFGNjBBMjlCMDNGODg2Cis6MTBENkUwMDA4RkYyODM2M0I4RUUzREZDNUZCNjhFN0U0MzYzRDA5RkJFCis6MTBENkYwMDA0NDkwRUY4QTM4M0NCNEVDMUM0OEUxRkIzMTA3NzdDQTEwCis6MTBENzAwMDAyNkI2NUYzOUY3NUUxNjI3RkFCMThERTU5NzFFRTNGNzY3Cis6MTBENzEwMDAwMUNENkQ2MDdFRjVEQ0E1NkMxRjkxOTRCMjczM0UxRTQ5Cis6MTBENzIwMDBGQTFGOEM3NzI3NzQ0MkU5N0Q2N0JEMTA4QTY0QzJCREY5Cis6MTBENzMwMDAzNTI2RkJCNUY3N0U5QzQ1MEFENDJGMzJDNTVEMzQ3RTc1Cis6MTBENzQwMDBEMkNFMjNDREU3RjY3NTI2RTdDRjg1QTRDNzA1NzI2RjQ1Cis6MTBENzUwMDAzRUY3RkUzQUQ3NkI5QURFMEZBRTIzNTk3MDZFNUZCNDc4Cis6MTBENzYwMDAzOEJDQjAzRjJBRjI3M0E2QzRDREVFRjMyM0JFQzFFQ0ExCis6MTBENzcwMDA3RTM5MkQ4RjJCNEI0RDg0RjU4RDg0Rjk3QkJFQ0ZCMjM2Cis6MTBENzgwMDBFNDdBNzU4MEZFOUM5Njc0QzE4MUY3ODNENENBREUzNDM2Cis6MTBENzkwMDBEMDgzRjIwNTZBRDc1MTU3NERCOTMwOTRBOEJBNzM2NDUzCis6MTBEN0EwMDBENDlFNDNFMTk2M0RFQ0JFNDRDOTUzNDg0QUMwMEVFNEMyCis6MTBEN0IwMDBGNzAzOTA5NDE5QkQ3NkQ3NUIxNDBGNEJENkE5Nzg2RUZBCis6MTBEN0MwMDA3NUExOTNEOTk5QkY3MDE1REVFMzFDMEJGNkU1MzgyRkQwCis6MTBEN0QwMDBCQkU3RDY0OEM3RTA0RTM2QkY1QTk4NUY2NjVGQjg2QjY2Cis6MTBEN0UwMDAxNUFGMTdFRENFMTlENDYyQzAzODhFMTc3RkRGNDFCNDY0Cis6MTBEN0YwMDBBQUVGQTkyMDhGRkYyQ0IzREYyQkU4ODMwNzQ2QkZGM0U2Cis6MTBEODAwMDAyOUM5NzgyRkZCMDJGN0VBMEY4MTRGRDdGMEZCMDg1N0ExCis6MTBEODEwMDBENjY0RTE3Mzc1NEQxQURBOUQ3NTM1NUU3QzZBNzhCMTEwCis6MTBEODIwMDA3OUVCRjFERTM3REI3MEQ2OUZDREUzNjc3NjA1QjU2NTIyCis6MTBEODMwMDAyMDlGNDJGMjU0NDdBMDZDNEJBRjI2NjBFRkRBN0JGMTk5Cis6MTBEODQwMDA1MzhGRjg1MTdBQ0I3RTJDNUIzREVDNzcyM0U0ODY5OTlECis6MTBEODUwMDA4ODY3REE5RTk0RDBFRjRCNUNGRUE3NDA0RUVDRUFENTg5Cis6MTBEODYwMDA4NjdCRTRBQzY5NjM0Q0Y3MEQ5QUYwQTZGMUM3MzY4NjY3Cis6MTBEODcwMDBCRkI1MDJFMzBGMzNGRUQ2Q0ExRDJBRUMyQkFGQkRCRUU3Cis6MTBEODgwMDBGN0RFMTlDNDFGMzVFRjE5RkU3RUM3RjZEOUUyRTJDRkU1Cis6MTBEODkwMDA5MzhDRjZFQjgyRkNCQUJCMjA0RkZBMTFCRUJGRjg3MDM2Cis6MTBEOEEwMDBDRDM4QzRENzJBN0U4RkU0NDMzNTNFN0M4QTgwM0YzQTA4Cis6MTBEOEIwMDAzRjZCNzY5MEMwRkRFOEVDQjcyMUU4RDM1OUU4ODNGQkQ1Cis6MTBEOEMwMDA2NzgxNzcwMTdGQTI5M0UxRDM5QTU2OERGQjZCMzYyNzUwCis6MTBEOEQwMDBDMzk3RTgwQzIyNUU2NDI3QzM5N0U4NjRGQ0E2RjBCMjA1Cis6MTBEOEUwMDAwNEY4Q0JDNUY2Rjg5RUUyRUYwMEYwOTcyRDdEODIwMTlCCis6MTBEOEYwMDA1RjRBQ0FFNENCQzNERjkzMTQ3RjE0OEUxNDJFNUY2Njk1Cis6MTBEOTAwMDAzQ0E0MjhFQzdFNEE0REFFRTJEOTcxNEZEMEY5QzNCQTlGCis6MTBEOTEwMDBCREExODZFMEIzN0YxQzdGNzFBODhCQUQ5QjI5OTZFQUUxCis6MTBEOTIwMDBGRDMyRTAyMzk5RjBGNTI0NDhEMkYzMDk0QjNEODRCRjQyCis6MTBEOTMwMDBCNDIwNTFBMTJDMzAzODQ4RkQ2MEMzQkQ5MkEyNDczMkJCCis6MTBEOTQwMDBERENCQTY2RTAwM0U1ODdGNThCNjQwQkVCQ0I4NzQ4NjhDCis6MTBEOTUwMDBFMTNDQTgzOERCOTdBNDIyM0VGRDc4NEZGMzIzMzUyQTFCCis6MTBEOTYwMDBEMjZGMUREMDExRUUwMUU1RkVENzQzOUM5RTBGRjM3QkQ1Cis6MTBEOTcwMDAyODU3NzFGOTU4Q0JFNUU1MzEyRTI3QjVGQ0RFRTQzNUEzCis6MTBEOTgwMDBEMzU5OUU1NTRBOEU4NURGNTcxNjIxRkEzQ0E2MjQ2RjNGCis6MTBEOTkwMDA5ODI4MTQyRUI0QTk1NTdDRTIzRDhCRTQ3RDZCNjgwNDc1Cis6MTBEOUEwMDA2RDk3OTA0RDdDQzAyNzQ5RUYzRjEwNjJGNzM1MTYwRUZBCis6MTBEOUIwMDAwNDNCMjg0OUJCN0Y3MUEyOUEzNDA3MEZDMjQ2MjRFNjc0Cis6MTBEOUMwMDA3NzUwNTU4ODdFNEM4NzI1RDYzRDU1QjVERTAzMzY4ODgxCis6MTBEOUQwMDA4N0M2ODMyN0MxRUJDQjdDODg4RTk3RDBFMDQyRkJCRDA2Cis6MTBEOUUwMDA5RkJGNzBDRTQyNUE3NjM2MjQ2MEZDMkY4MUZGM0U4QjVCCis6MTBEOUYwMDA5M0MyNURBMkEzNzdCQzdCQTgzN0JBQUU0Rjc0NTE3QUFECis6MTBEQTAwMDA3QTAwNDZGQTdDQkM2MTE4RkUyRUNCMTM3MjIxRkU4RTgyCis6MTBEQTEwMDBDQjEzN0MzREQ1RUUzOUQ3REE3REMzRjVBMzNCRUY2QTU2Cis6MTBEQTIwMDA4M0RGQkE1RUY2NjEzQkNGNDRBM0ZDQUZFN0ZBMzY3OUY5Cis6MTBEQTMwMDA4QTkxQ0YzNTdEN0JCQzU3REZGQTg3MDIzQ0E5MTdBNkI4Cis6MTBEQTQwMDBBMDFFNEJCOTM5QjZERUFEOTUxNUJDQjdCQzc2MTQ5M0E0Cis6MTBEQTUwMDBGMzYwOTFDMkNFQjVGNEQ1MDMxOEE3M0VFRjFGQjkxMUZDCis6MTBEQTYwMDBGNEE4QzY1N0NCMDlEMzNCNDFFMkYwRTIzQUM0RUZCNzgyCis6MTBEQTcwMDBEMUVDRTA5NTcwMEYyMEQ3QUZGMDE0ODdCM0RGMUY0OENCCis6MTBEQTgwMDA5RENCRUVGMzVEQzNFRkIxN0E5NEYyMTVDMTdCNEZCRDMwCis6MTBEQTkwMDBGODlDRTE2MkZCMTNDQjZENjNGMDNFQjU1QUE3MDVGNTI4Cis6MTBEQUEwMDA4NEY0ODEzNTA0MjY4N0I0N0ZCQzA3RTIwNTkyRUNFRDRGCis6MTBEQUIwMDBGMDQxQkNDRjI1ODVFMURFREM1QTY3MUVERUZCMkUyNDVCCis6MTBEQUMwMDBFNTc5ODBGRTVGQkExNjBDQjk1ODNFMUQ5RDI4REU5Nzk5Cis6MTBEQUQwMDBFOTQ5MjkyNDFGNjVFMzZFMDA5RTVGOTEzRDM3MTM4ODU1Cis6MTBEQUUwMDAxQjZFNDhBOUI2MDNERUM2QkI1ODVDQkZBMTI4MUZGMTU4Cis6MTBEQUYwMDA0OEYxN0I5M0FCN0ZCNDlGMDFCMzY3RjRERTgzMDVERDEwCis6MTBEQjAwMDA2RTg4NzMwRUU2MEUxN0IzOTc0ODdBOTAwQ0Q3Qzk3OUQyCis6MTBEQjEwMDA4M0Y2M0IyNzZBOTA2NEU5RTQ3REY5ODg2OTA0RjY4NzE3Cis6MTBEQjIwMDBGQUNBNzkxQzNEQjY5OUU5QjExNTQyNkMzREE2RDk5OTVFCis6MTBEQjMwMDA5QTFFOTM0REZBNDE3QkQ2MEQ5OTZFMzhBN0E1QTQ3ODBECis6MTBEQjQwMDA4MTc3RTExOUI0NzhDMUJFN0JBNUVFOEUyNEM0NDMzNTNDCis6MTBEQjUwMDBFMDgxQTRDREU4RjU1RjdGMzAxNEVDQzdGQzk4RkM2NjRCCis6MTBEQjYwMDBENjVGMEI3QUQ3NzM1RjJBRDBFOTk0QUMwRTk4MDNGQzhBCis6MTBEQjcwMDA3NDM4RjY3QTNFRTlGMUFCMUUwMzNFNThGMDNCNTFEMEMzCis6MTBEQjgwMDBFRkE3OTQ1QzU4ODlFQjY5RjE4NTcxRjgyQzZEOTg4RTNDCis6MTBEQjkwMDA3QzRGMjAwQUFFRjNDMzRFMzZERUU3MDZCODRFMzZGMEIxCis6MTBEQkEwMDAzQzgwNDYzOTA0RjkxOTI3MUJFRUMzRkI0QTIwQ0Y1QkEyCis6MTBEQkIwMDBENEVERUY5MzNDMTVFRDRCRUQ5RUIxOTNBMTdCRENGQUQ4Cis6MTBEQkMwMDBGRERERTI1RkQ4N0Q2MEI3QzZFM0FGRTJDNkQ4N0UzRDNCCis6MTBEQkQwMDA5RTM1ODI4RDNDRTJDRDAyN0I5OERBMzczRDExQjA3RkQ1Cis6MTBEQkUwMDAzNjVBQkQ0MTEyMkQwNzFGQjdDN0NDNEY1Q0UyOUFGQUQ3Cis6MTBEQkYwMDAwNEUwN0Q4OUNCRjcwQ0M4Mzk3MUIyN0I0MUUzRjMzOTdFCis6MTBEQzAwMDAxQkY3MDQ2QzAyQzM3RUQzNTMzQzRGNTNGMkJCRjVGN0IyCis6MTBEQzEwMDBCQkY1REVDN0M5RTMyNEM0MTZFN0JCNDNGQjdEODMzOEVECis6MTBEQzIwMDBERkREMkM5RjgzNzg2MjdGRDdGQzg0ODRBODlGRDAwQTk1Cis6MTBEQzMwMDBGM0E4NkMzODUzRjcwMUUyODlGQjA5MUNFRTUzMzI4M0Q5Cis6MTBEQzQwMDBGQkQ0RjM1NkY2M0IzNzI2QkUzOEM1RjM0NzE2MDkwQzBFCis6MTBEQzUwMDBBRjFBN0Y5RkVBQjU3N0ZDNzgwRjhEOTlGRjg0OEQ1N0I3Cis6MTBEQzYwMDA2RDE4NEZGQkZEQUM1REM2Mzg1QzA1RTUxRkUwMUI2MTIwCis6MTBEQzcwMDBFMzc4Q0M1RjE3MUUxRkZGMThFNDI1N0Q3RTQ0QzRFRkI4Cis6MTBEQzgwMDA2NTE3NkNGOEJERUI2N0RFMEQ3MzIxQ0VGMzg2OENGNzVDCis6MTBEQzkwMDA3NTdGREUzRTM1OTFDNTc5OEM3MUU4ODU2RUI2Q0U5Rjc1Cis6MTBEQ0EwMDBFNjcyNUY3QzYxMzVGMjY3MkY3RkQ0MkY1NDQwQUU4QUQ1Cis6MTBEQ0IwMDAyRjNDOEFGNjRDRjExNjAxRUY4OTI0QzE5RTQzOTMyNDMwCis6MTBEQ0MwMDBDRTg3MTNBMEZERDk2OUNCMDFERjEzRUI3MTdGQTM2NDZECis6MTBEQ0QwMDBCM0Q1QkI1QUU4NEJFN0QzMkVENTcwQUY3QTQ5RTcxQUQ0Cis6MTBEQ0UwMDBFQzk3NTA3QjJBNDVCN0RGN0Q4QUU3MDE5NzVDNjBGN0E4Cis6MTBEQ0YwMDAwMzEyNEY5MEE0MDFERjczQkQxM0U1NUZFM0JEQUY1RDc5Cis6MTBERDAwMDBGNkQ4NzFGNjZGQjgzRDUzN0M2MTgyQzE2Rjg4Q0VFRjUzCis6MTBERDEwMDBGQjRDM0VGOTdBNUVEMjM5OEVDMUQ1M0I5RjBERTM2MzUxCis6MTBERDIwMDBDRDI3M0E4Rjg5RDhCRTJCMjlGNkY4OTkxQ0NGMjc2QUMwCis6MTBERDMwMDA0QUUxRTQwNjI5NTU1OEJERTJGQUZCMTREMDI3QzU4RDA3Cis6MTBERDQwMDA0OUM5ODI2RTVFMjUwREU1ODYzQzhDOTJDNjIyNjU5RTkxCis6MTBERDUwMDBBRURGMjgxRDFDQkY5RDM0M0M0QTg3Q0M0N0U1RUI5NkJGCis6MTBERDYwMDAzQjYxQkQyRjc0Qjk2MUJDOEQ4QkYyN0ZBMjQyN0Y0Q0E5Cis6MTBERDcwMDBGRjdDMjJENzY3NTRBMzdFQjlDNzFERUI1QzQzQTY1QjJCCis6MTBERDgwMDAzNUM0OTU0QTFBMzg3REE4OUQ5Q0E3QTM4RjQ2MTc3MzYyCis6MTBERDkwMDBGQjEzNEQyNUY5M0Y4MTc4RjI5M0VDNTY5MEY4N0FDNzQyCis6MTBEREEwMDA0NEI3Q0NEODc4OUJEMDhCQjcyQ0NDMDdCQTM0REVCRTI2Cis6MTBEREIwMDA2M0M4RkJFOTgzMzc0RTVGMEQyRkRBN0I2QTFGRTUwMkVDCis6MTBEREMwMDBCRTI2NDBDMEE5M0ZGNEMzRTg3RjI5N0M0NUM3RTVGNERGCis6MTBEREQwMDA5RjE0N0IxRUZFREU3OTJDMjU0MTZBM0YyQ0I4RTQzQzYzCis6MTBEREUwMDAxRTI0NDFEQjQ1RTZBMUQxOUY1QzZEQTBCRkZGRDExMTkwCis6MTBEREYwMDBENzgxMUM2QUY0NUU3MEUwNDlFNERGMDU1NDFFNjE1RjYwCis6MTBERTAwMDBGRTY0RkQ3RDg2RjUyMTBBNUYxQ0JBMEYwRjkyRUNGQ0MzCis6MTBERTEwMDBGRjczNzRGRjQ0MEU2NjQwREU1NzcwMUQ1QjQ3NEU2RDA2Cis6MTBERTIwMDA3QzI0NDM4RkU3MjVBRTQ5MEI4MTJFNjQ1M0ZGQ0I1QUU4Cis6MTBERTMwMDAzRjgyOTNCREVEMkFBRTRCMzJDNkMzNzZCQkZDMDEzN0ExCis6MTBERTQwMDA3RDVGQ0FGREVBMTU0OUQzNDZDNjVBRjdBOTVGMzgxMTY2Cis6MTBERTUwMDBFMkNGQjUzNUQzMjc0MkJDNERFNjc2MjNGQ0IyMTZEOEM3Cis6MTBERTYwMDA5QjcwMDU3QUFDRkJCNUVBMzk1RDFGQUFBOUM2RjgzNUU3Cis6MTBERTcwMDBCMTA1ODk0NzdGREU5NzMwQkJFODFCQzJFMjJENUEzQkQ0Cis6MTBERTgwMDA0NUY2N0IyMEZFQTkwOEE0MTBFRDM5QzlCRjMyMzMwRjM3Cis6MTBERTkwMDBFMjE4MjkzOTQxMURGRTFFNzUzM0JCNkU0RERBMDEwRkE0Cis6MTBERUEwMDBFNDkzNUE2OUZGMTA4RkIxQTU0QkU3OERGQjk0QUM5Q0FFCis6MTBERUIwMDAyMzhDOTc2MTNFNzI0QTk4NjAzQzMzOUJCRUQ3RTE1QkVFCis6MTBERUMwMDA0OUExNzA1RUM0REY5NDZDNkVEQzJGOTIwOEIzRDNCNEFBCis6MTBERUQwMDBGOUQzMzdCODlFM0RDQ0Q3QTVFNTEwQzc0RDAxM0JDQzUzCis6MTBERUUwMDA4MkZFRDA3QTFFQTdGQzY1NEQyMUM3ODM4NEVCOTgzNTRFCis6MTBERUYwMDA4OUQ1NTcxMjE5REM3Njg4NUI4QkIwQUU0NkIwRUM4MkMwCis6MTBERjAwMDAxQjc2NDRCQzlBMEM3RjdGMzQ4OUE4RjgzQjdERkQ0ODgyCis6MTBERjEwMDBBNDBFRUYzMTk5RDQ3OTNGQkNGNzI1RjhCNzAwMUY3Q0U4Cis6MTBERjIwMDAzOUIwRTM0MzAxRTJEMDg1RkUyQjYxRkQ2RDEwODMzOUVBCis6MTBERjMwMDAyQUFERkYyQkIxMjcwN0VBQzFFRjdCQkQ5RkNDOUU0M0UzCis6MTBERjQwMDAyMDZGRDlBRkRCOTc2MkY3NzJBQUZBQjg5RUI5M0M2NDJBCis6MTBERjUwMDBBOTY0REFBRkY5Q0I5NUZBRUY0RDA5QkU1RDAwNDdDQTY3Cis6MTBERjYwMDBDNzAyRUVDM0Q0REFEOUJEM0VCNUFFREIxMjYxRkQzRUM5Cis6MTBERjcwMDBDQUU5ODVGNDA3RkU2OTY3NzZDQzc5NDk0RDRDQzZGODQ1Cis6MTBERjgwMDA2NjU2RUVFQjg2RjFCRDg2QjJDNEZEQjc0RDk0MUYyNUYzCis6MTBERjkwMDBEREJEQUNDMzI1OUYwNUY4NjU0NDNEN0RBRkE3NUY4QzEzCis6MTBERkEwMDBCODVBQjIxM0FGQkY4REI5MEZBM0MxNDdDNzI1ODAzRjgxCis6MTBERkIwMDBGMUMyMzRCNkJFOUFGODYwOEZDMEUwMEZCQUI4QkY0NTYwCis6MTBERkMwMDA4MjIyRDA3MzhFNzY1RkIwQjQ4Mjk1QjVERjhCMDAyQTQzCis6MTBERkQwMDA1MjM4M0VEMEY2MTdDODBBNTZFNkZCOTQ4MTc5NkMxRjdBCis6MTBERkUwMDBEMjBDQ0Y5Q0I2ODczQjIwQUUzRkE3NkRFMDdDRDg5RjdDCis6MTBERkYwMDA5QUUzMUNGOTY3NzhFRTkxN0IwRTI0ODAxRDc4OUY4MDUwCis6MTBFMDAwMDBFNzNGN0VGQ0ZCRDdFNTA0RkFEQ0Y5Q0U0NjNDNkY3Q0FCCis6MTBFMDEwMDA5NkNCREQ1REE0MDdFRjYxRjcxMzBGREYyNzBGRTFGQjYwCis6MTBFMDIwMDA3OUYwMDM3MzU4MEVDQkUwQTdDRjhEODQ3RTc0MDMyRDU3Cis6MTBFMDMwMDBEREY5N0FFODA2MzBEQkVFNkFFRkY5MERBODAxN0ZEODRBCis6MTBFMDQwMDAzMzBERjcwMEI0NzZBRERFNDNBQ0NDREE0NUYxNjBFM0Q2Cis6MTBFMDUwMDBGNkE4MERFNzE1OURCNzBERjFGMDQxNkZERTc4MTBFOUQ4Cis6MTBFMDYwMDBEMThCMjc3RUFGOTI4Njk3REU3OTI3REUzNjAzRTJCQzFFCis6MTBFMDcwMDBGMUY0RDkxQzY3RDY5RkQ5RTYwNzgzQ0I4Q0E3Q0ZFMUYzCis6MTBFMDgwMDAxM0I1MjMzRjc3RkJFQzg5NTRCRjdERUNGNjM5RTA1OTlCCis6MTBFMDkwMDA2MUVCQzk5MDg2QTJCQ0I4QTE1QzI1RkE4N0E0NTIzQzZBCis6MTBFMEEwMDA5QzFERUNCRkIyM0ZFMEEzQTNERjY1RTlEMTBGRUQ0Q0FGCis6MTBFMEIwMDAwRjkwQkMwQzlDOEY3NkVGRkJDMTA3NEVCQUMwRUVBQzQ0Cis6MTBFMEMwMDBEQkY5NUUwNjNDMkJDNUNFQjVCNzYzN0M1MzQ0N0ZFOEQ1Cis6MTBFMEQwMDA3Q0NCOTUxNzNEMUZGNjIxQzQ5REU4RkEzNzIyNTFFMzBBCis6MTBFMEUwMDA0MzM2QkZCQkY5Rjk5QUJCNUIxMkYwN0NDRERENEI0NUUzCis6MTBFMEYwMDBDM0JEQ0Q3NzJGNjU3OTc3NDRFQTE4N0RBQkMxNUU1RkVDCis6MTBFMTAwMDAxMUI3MUY4ODAzOThGQjk5QkY3NDMyRjlCODFGRUNCMzlECis6MTBFMTEwMDA3QTI2NjE1Q0UwNTlDNjVGRjNBN0Y4NDRDODQ3OUVCMDExCis6MTBFMTIwMDA1MkMwNzhDQkY4RTM2QTZCMjcyRENGMEYyNUUxRUYxREE2Cis6MTBFMTMwMDBDRDdGNjA0OTJFREM0MzUwRDVDMUUyN0IwM0M0QzUzOTk1Cis6MTBFMTQwMDAzRjgzRjhDOTAxQjY4RTQzNzkzMUM4QjdEM0E3M0E3NTcyCis6MTBFMTUwMDBGMUZFMkVCOTNBMDdFRUREMEJERUU5RjQwMUZGMTRERDI2Cis6MTBFMTYwMDBFQUZCMDA3RjJGOTFDNzIxQjQ3NTc1NTc0MzExRTZCMUMzCis6MTBFMTcwMDAxNkNENTVDNzAxREQ4QkMyNzZGQ0ZEQzEyMjFCOTExQzVCCis6MTBFMTgwMDA1NDhGMTU0OUM0MDZDRjAxMEE5MUVDRjA3NDEwMUIzQzYyCis6MTBFMTkwMDBGMzk3QjM3QkIyOEIxQjY2QTE3REUwMUU1N0E4QzBGRDMxCis6MTBFMUEwMDBCNzQ1NkQyRjdDMDFFRDRCQTRDODdFNzZBRTg1RTFBNzA3Cis6MTBFMUIwMDBBOEVERjBEN0MwM0YwQjdEODU5ODc3Rjg5RDJEOEFDMURCCis6MTBFMUMwMDBGRjFCMTUzNjk2QUY2OTM1OTY3MzIyQzY3MjZFQkJCMUNBCis6MTBFMUQwMDBCQzE1RUUzOEQzRDkxMTA3RjY1QTcxOUQyODNGQzNDRTJFCis6MTBFMUUwMDBFOUJEMkFDMERBMDRGMTYwMkJDQTUzNDE3OTVCM0VFQ0U5Cis6MTBFMUYwMDA0NzlGNzlDOTY1ODFFRjdCRkVDQUZDREU5RUFENzZCQzg4Cis6MTBFMjAwMDBFRjZERkYxRjFDQzQwMTc5ODUyRkRCMzdDMkY3MzM4RUZBCis6MTBFMjEwMDA3MDNFQzRFMTY4N0RGNjNCNUI4NUUxOTFFMEJGQkQ3Mjc1Cis6MTBFMjIwMDBCNUU2QTc4NzQ2QzNCQzVFRjkxQkNCOTNFOUQ5NkFDNTlGCis6MTBFMjMwMDBERjRGMzlCM0ZCODU5NzYwNUZFQ0NDRDYyQkQwQ0U3QTFECis6MTBFMjQwMDA1NTA4NUFBMERGRTAyQTQ2N0YzMzlGOTY2RjMxRkFDNTAyCis6MTBFMjUwMDBGNzI3MzI3REQzMkQzMDdDNUZEOTYwOUNGNzU1MjE2MzQxCis6MTBFMjYwMDBGOUU3ODlDQzlGOUE0Nzc0RUYzMzYxRkY1RUFENEI4MzJBCis6MTBFMjcwMDA3NUY1QjlEOEY3MEQzRkM0RTVFMkM1MTcxNThENkY0NUEzCis6MTBFMjgwMDA3RTNGMUI1MTc1RTc5N0Y2NDRGN0VGRUVCRDAyRjIyQTg5Cis6MTBFMjkwMDAwMDE3NDNBM0VGQ0I0REUzNkFGRDE3MjZCMjdERjgxNEI4Cis6MTBFMkEwMDBCRTNGRDNGMzg2ODhGODM5NkRGQUREQzI1RUJCQUVBNkY5Cis6MTBFMkIwMDA3QUUwMTRERDNBNTREQ0IwM0ZCNTA4RkNBM0M2RkRBOUYyCis6MTBFMkMwMDBGMzc0RUI0QkM1RDY4M0E5Nzc2MDVFOTI4NEJGQ0I1NEMxCis6MTBFMkQwMDAzMUU3Rjk0NzI3QTRDMDdCMzEwQ0YwQzI3Nzg4N0I3NTAyCis6MTBFMkUwMDA4NTdGRTM4NjdBRDRERTFEMjNFQUYwNUVEMjcwREZDMDNDCis6MTBFMkYwMDAyOTNBMzlGRDhGRjJBNTI2NEYxNURDM0VEOTM1QUU2MzlDCis6MTBFMzAwMDAxQUU0ODk5NzM3QjBERjZGMkEwRkZGRTgxNkY4RkQ0NTRBCis6MTBFMzEwMDBEMkM4Q0U5OUU2NEJBNDUwQTRGMjUzQjFGRDQ3M0Y4NDM2Cis6MTBFMzIwMDBERkUzMEEzQzMzRDYwQkYwRDAyRTZFODVGN0U1Q0Q5RkE4Cis6MTBFMzMwMDBFMjc5ODJENUE2REYxMUQwOUVGQjM4N0Q2OUZEODg4NTA0Cis6MTBFMzQwMDBENjVGN0Q5QkIzMTRGNDEzRURGNzc1MjgxRkM4REE4OEU4Cis6MTBFMzUwMDBGNzlCQjg0RkIxMzgyRDdERkYzRUZDMjRDQUE5QzlDMTM3Cis6MTBFMzYwMDAzN0VGQTA0RENGOTBGMEJCMzc2NEMyQkM4RDdDNDZGOTJGCis6MTBFMzcwMDA1NjAwQkJBQjY3QjM4MEJGNkI0QjJEQURGQzlCQzFBNEZDCis6MTBFMzgwMDBGNjJEQzNCQzVCRkFGREVFNThFNzlEMTc4NThDRkQ5ODEyCis6MTBFMzkwMDBFOUZGMDdDRUJGRjQyRjRCQ0Y0N0U2N0FGRDY2MDZGMUMzCis6MTBFM0EwMDA1QzYyQzU1MkFBRUY3NDc2N0VDNUYxN0FCQ0NGRDEzQ0NGCis6MTBFM0IwMDAwRTA2RTE3NEY5MDZCMDVFQUEyOERGNzZFREZFMjFDMUYzCis6MTBFM0MwMDA5NkNGRjM2Njg3QjEzMkRFNUIwOEZDNEExOUE1RkM2QTdBCis6MTBFM0QwMDAzMjQ1MDU3Q0RGNENBNkMzRjM1NTIxRjJBODI4MzIzRDE3Cis6MTBFM0UwMDA4MTcxQTA2RDA5QTgyN0JBM0M5RENGM0YwREZDRDUzQzlCCis6MTBFM0YwMDAwQUUzNEY4M0Y4NzlDRjJFMzU4MkY3M0M3NkYzRjg2NDQxCis6MTBFNDAwMDA5Nzg3OTVDQkRBRUM5ODA3NzNFNkFDODI3QTc0NTlGODYzCis6MTBFNDEwMDBBMDFCRThEMUY1OTJERDAyQkY0QjdBNjY3QkJGQzk5MEE1Cis6MTBFNDIwMDAyN0Q5MTU2NkY3RkY5RTBFRjdDM0RGN0Y4REI3NkU5OTZDCis6MTBFNDMwMDBGNTgxQjY0RTFFODM3RkMyN0E5QUU4RkIwNkQ2NUJCMkEwCis6MTBFNDQwMDA4MkU1OTEwRUU4NTc5RDEzRUJGNzI0QjQ3NjI5NEE3NUJGCis6MTBFNDUwMDAwRUY4MjlGRjFCNjNFQkI1RDQwMDgwMDAwMDAwMDAwMDFDCis6MTBFNDYwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkREN0QwQjc4NTRENUU5Cis6MTBFNDcwMDBCNUYwM0U3M0NFQkM5Mjk5NjQ2NjMyNDkyNjIxOEYwOTZECis6MTBFNDgwMDA4NDEwMjBFMDI0ODYwODE0RUIyNDA0MEMxODc1NDJEMTczCis6MTBFNDkwMDBBMkI2Mzg4MDQwODBCQzQ0REI0NkE1NUYyNjI0NDI0MkI5Cis6MTBFNEEwMDA1MTQyOEQwODA4NzE0MEIxRjQ4QTZEQjBBOEMxMDZFRkUxCis6MTBFNEIwMDA4MEY4NkFCNTM3REFERTVFQjVGREI5MjM3MDI5NUExRUQ5Cis6MTBFNEMwMDAyM0Y0NTJEQkRCRDY3RkFEQjVGNzk5OTkzMzQ5QUFCRDZBCis6MTBFNEQwMDBGN0I2RkZGN0ZERTk0NzhGRkJFQ0M3NTk3QkFEQjVENzIyCis6MTBFNEUwMDA1QTdCQURCNUY3NDRCRTZFRjFFQzJENjBGMDE3Mjg1MEE1Cis6MTBFNEYwMDA5QzhDNURGMkJCM0M5QkEwQkM0NDgyNTczMzE4MzMzQUUyCis6MTBFNTAwMDA3QzQ2NUIzQTYzRDY3MkM2QkNGMENGRjE4NkJDNTc4NkI4Cis6MTBFNTEwMDBGQTUzQjJFNzlCQjY3MThDRERDNTdDMDY4NkNGNzJCRjFECis6MTBFNTIwMDA4MThEODUzRTlERDAzODhCQjE2NTBBMEIyOTBFNzgyRUUyCis6MTBFNTMwMDBGNEJFMkY0REE1MzI2M0QwN0ZEOTJFMjlEODAxRkRFRjJGCis6MTBFNTQwMDBEQTZDNjRDQ0M0RThFRjMzRjhCN0EyMTdDQUM1QjFGMkVECis6MTBFNTUwMDAyQTE2MzQzMDE5RkU2MzU3NUMzQjE4N0Y5NTEyM0EyQTBECis6MTBFNTYwMDBBNTMwQjZEQUM0NDJDOTMwRUVFQUE3QjRGREQ2QjAxMDgxCis6MTBFNTcwMDBDMUQzNzBFMDMzNjNGQ0Y4MzAzRkM2MDBCNEZGNjRFQUY3Cis6MTBFNTgwMDBCQ0JDNkVEQjM0QzY5QzA2MjhDM0JDMjM2RkVCODM4OEZGCis6MTBFNTkwMDA4N0ZGOTA3RDM0QUYzNUNDNEZFM0RDREU1QUM1NEVBNTA2Cis6MTBFNUEwMDAzMUQ2N0M1RjZCRDY1REYwQkNEODdBN0ZENjVENTc0M0ExCis6MTBFNUIwMDAzREMyMDFERkI3MzBERTlGQzFCQ0Y2MDFDRUQ2NTRCM0Y5Cis6MTBFNUMwMDA1MDJFQzBCNzFDRTY5QjU0MDZFNTQxMjkzNDA1Q0IyNkU2Cis6MTBFNUQwMDAxNjQ4MjlFM0VGNTNDQkY4N0NCRDcxRjBENUIzMUVGQTkyCis6MTBFNUUwMDA1RUZEMkVFRDdCRjY4QjM0QzI2NzAzMUJBMjdBRjY1NEQ4Cis6MTBFNUYwMDA1QzNERTBBMzQxRTBBMUUxMDBCQzhGQzNDM0NDMDM1MjZBCis6MTBFNjAwMDBDMDdBMTU5NjgyMUQxOTAwNUZEMzU5QzYzNjQxQTlFOTEzCis6MTBFNjEwMDBEMDY3NDZDREY4QUM4NzMxQzA0MzY2MTI2MzY2QTBENzk5Cis6MTBFNjIwMDBBMzEyNUJENDVGNDJGRDI2RDY0RDgxMzZGODc3MUQ5NjQ2Cis6MTBFNjMwMDBEQkE5REQwOTgxQkY0NzZGNTk5MUU1ODc3NjVCRUM1MDE3Cis6MTBFNjQwMDBDRTE2MDg5RTBFREZEMEUxQzdBOTFDMzJDMTc3OTJBRTZDCis6MTBFNjUwMDA4RTk2QTlCRTYyM0QyRkQ3RDk4QTZCQjZFNzMwQjY0REVDCis6MTBFNjYwMDBFRkNGQjIwMTEyOTdDOUJFRDc3NDgwQkYyNzFERkU1QkUyCis6MTBFNjcwMDA5MERGOTZFOUJDNzkwQUNFOTc3OThCN0MwMDA3NkJFNTMxCis6MTBFNjgwMDA3ODc4QUNBQzY1NjI0QjQ5MENBRTE4N0M5Q0JFREJBNEMwCis6MTBFNjkwMDBGRTkwMEVGODJDNzA1OEYyRUM3MzIzREY0NkY0N0U0QjlDCis6MTBFNkEwMDBBQzVEQjM0REEyNzlBNDFFMEJCRjM2MDZFOUZFQkNDNDE3Cis6MTBFNkIwMDBGNjQyQkIxREQyODdBRjhEODE3RTNCRTZCOTU5MDc5NEU4Cis6MTBFNkMwMDA1RDQwMjdCOTBDREZCMzRFMDlGMDUyN0VBOEVFRUU1NzNECis6MTBFNkQwMDA5MUNFRTU0OTlFRjFGMDY4M0M1NDI5Mzc1QTY4RkU3NzlGCis6MTBFNkUwMDBGQTAwOUVDQ0U0OTYzRDNBQThDRkJDQjNCODBDRjkxQjE3Cis6MTBFNkYwMDBFNjdERTcwMjc4N0ZBRkNENERERkNCQjI3MEJBQkJENkY3Cis6MTBFNzAwMDAwNzBBRDY5NkUwRjc3RDc3QkYwQURGOEI0QzQ5RjJFMDI3Cis6MTBFNzEwMDBGNzMzMDE1NzU2MDczREJCQ0NEODhFQjU0QkQ4RUVEMTU5Cis6MTBFNzIwMDAxNDNFN0VCQTRFQkVCMzBFQ0I2NUJDRUM1ODI3NzlGN0NCCis6MTBFNzMwMDAxMkYzNkRBNTc5NjcxQTU5MERDMjg5RUY4MzI1QjQ2NDY4Cis6MTBFNzQwMDBCQzA3QTkzRUM4RTkzQkJCQTUxNEM3Q0IxQ0M3OUY0RTVECis6MTBFNzUwMDA0MzI4MDdDNzc5NEJBNUY3NjA5NjhFNjUyMEJDRjBERjhDCis6MTBFNzYwMDAwMENGQkQwNzJCMzMxREQwRkZBRDczMjY0NTk3MEE0RjUxCis6MTBFNzcwMDAxNzYzNDNEODRFMDk1OTE4M0UwQjhCNzk3QjkzNjg1RjFBCis6MTBFNzgwMDAzQTNCMTMxNzgzMzM0RkRCRUVBMkRFOUI3QTM1RTAyNTRECis6MTBFNzkwMDBGMDhFQ0M5MDFFQkZCMzc4NTNFREQwRUU0QjA2M0U4RjdCCis6MTBFN0EwMDA0NDNBRjYyMTdENjAzRUNEOUYwMkU0Njk3MTc0NUI3NDRBCis6MTBFN0IwMDBDNTgwRTMzNTdGQUFCMEUwRDVCMUY3RTdEQTRDMkM1ODM1Cis6MTBFN0MwMDAxNDJCMzdENDFGOUI4QkVEMUFEOUQwMDZFNEFCQzZGRUIxCis6MTBFN0QwMDA2NDE2OENFM0Y3MkYyNThERkM1RDk1QkY5QjNGRDVCMTZCCis6MTBFN0UwMDA0MDFBQjE2RjhFQ0Y4QUY4ODk2QzU4OEVGMDFGOTFEODdECis6MTBFN0YwMDAzRTg2RjUwNjE2ODhGQjdFRjNBNzBFNkQzOTBBNjcwNjdFCis6MTBFODAwMDA4RDEzNkJDN0I0RUQwNjdFNEZFREQ4RjQ3MDBBN0VFNzJBCis6MTBFODEwMDA4MjJEOUNFMjEwRjNDMzdFRDkzMjZCNDFCQTVDMENFQUM0Cis6MTBFODIwMDAwMjdBNThDNzE3RENCQ0ZFMjI2MzM1RkQ5NjU4N0I3NTBCCis6MTBFODMwMDBCQzBCOEIwQzJDNDQ3ODhGRDBCODg4OTcwMEM4QjY5RDQxCis6MTBFODQwMDA4MzlGMThEQzUwNkUxODNDNEE3ODUxRjkyMTFFM0Y4MTk1Cis6MTBFODUwMDAzOEI5OTFEMTMxMTREMkMxOUFGRTg1NkQ1NTU3ODkxOUI1Cis6MTBFODYwMDA0ODcxNEM1REJGNkJCQUJDQjNBMDVFRDY2OUQ2NzM3MkZCCis6MTBFODcwMDA3OTc0N0Q5MzU4Nzk1NDI3MEI3OUQwRDA1NTNEMkJCRUIwCis6MTBFODgwMDBDQ0RCQzdGQTM3RDY1NEMzRkEyRjJGRTFGRDRGRDg5QTA1Cis6MTBFODkwMDBERTU4QUZDNEU0MTFDQzIzMEZGMTEyMkQ5QjEyQ0ExNjFGCis6MTBFOEEwMDAyODRGODkyQkRCMTJFQTlEMDlGNUFFODQ3MjBFNkY3RjJCCis6MTBFOEIwMDBDRTFBQ0E5MzNEOEM3RDY0NUI1QkEzODA3QzM5OTcxNTJGCis6MTBFOEMwMDA1QTJDNDE3OTczQzdCRDM1RDUyMEU3MUFDQjg3QkMzMkE2Cis6MTBFOEQwMDBDQUNGNDFDOTIzQjExOEZFOUEzQ0NDMUIwNEZDNTkzQzU5Cis6MTBFOEUwMDA2MUMzQjIxMkM0QzNEMDZCQjhGRTFCMDYyNDlCMDQ3QzY4Cis6MTBFOEYwMDA2RUU5M0YxOEEyMzJGNjczQzdGNUVCOTdBODVGNDNGRkE2Cis6MTBFOTAwMDA4N0Q0NkZENEYxOEI3NUI0OEUzNzE1OUZBNDc2ODAwMEIxCis6MTBFOTEwMDBEQjY5QTBEMzU3OTlDNDUyMDFBNTA1OEFGRjhGQThCRjEwCis6MTBFOTIwMDAxQUZCN0ZDM0Y1MkU4QjE4RjhGQ0I4MUNCQzkwRTU3RDU0Cis6MTBFOTMwMDA4NUU0RTAxMUM5ODZFQjJFQ0E3NzM4QUUyNUM2RUY2QUFBCis6MTBFOTQwMDBGQjVGNEQxOUZDNTcxQzI2RjlERTRGREExNTY4RkY3Rjc3Cis6MTBFOTUwMDAxQTdGMzM4RDAxQTk3RTg1NEQ2NkEwNUMwRDRFNDQ3REU2Cis6MTBFOTYwMDBCQzkzRjkyN0EyMUVGQTdBRTNGOEEzM0E2ODc3NDIxRjBDCis6MTBFOTcwMDBERUNEMDA1RkM1RjY0RDM1MEFCNDNCNjEwREU3NEEyMDk4Cis6MTBFOTgwMDA0MzI2NkRFREU1RTVGNEYwNkVDNDY3NjBFQkEzODRERjJDCis6MTBFOTkwMDAxM0I5RTE1QzFEOTRBN0RBNDNCQzNDM0VCQzFCQ0JCNzZBCis6MTBFOUEwMDA2RTdEODY5N0E3ODQ3MzY1RTgzRjM2NzBBMEE2MUFDQTY1Cis6MTBFOUIwMDBGQjZDMjNBRkQ3N0MzQjk3RTMyQTdDOTdDNzc5QjNFREY5Cis6MTBFOUMwMDBFOUM4NzY1QzRGRUNENjAzQzY0MDFFMkU1RUZERjFCMzVGCis6MTBFOUQwMDBGQjAwMEY4QkVGNEYyNjM5QjVFRkRDNTdFNkZCNjhGRUU3Cis6MTBFOUUwMDAwMTlGNTIwMUYyOTBCMzNFRDc2MzI0OEYxNUIyMDNCMjU4Cis6MTBFOUYwMDA1MDc3Mzk2MkY0QjBFNjBEQjk0OUNFNEY2QTM5ODhGQURBCis6MTBFQTAwMDAzRTczNzEwOUM5Rjk0RjUzQkRFREY2NjlCMUU3MjcxOTk2Cis6MTBFQTEwMDBGMDA0MzhEQUVEMzYyRTk3NjU5RDk3REEzRjYwMjVCQjE2Cis6MTBFQTIwMDA2NzhCOTlDRjA3RDYwREQxRDcyMkU4NTEyRUU2NTM2RUNBCis6MTBFQTMwMDBEN0QxMzNDRjM2ODdDNkZCNDBGMkVFMzBDOUY4NjQwMTM4Cis6MTBFQTQwMDAzM0QyNzM1NTEyRDkxOTc3RUMwMUI5MDA3MkI5NTdDMDk2Cis6MTBFQTUwMDBEREJCNzU2MjMwMDBFM0RGMjEzMTFGQ0E4RDVFQkIzNzNECis6MTBFQTYwMDAwQkU1QzMwQjdGOTFFRkM0RjlGNjk2NDIxOTlFM0YxNjUyCis6MTBFQTcwMDBGMkJFQjdDRTlCNjU4RkQzOEJCRDdCNzhCRDJBNzc3QUVDCis6MTBFQTgwMDAwQjc4N0Y1NURGNjQ3NkYwRUY2NDZFOTlCODE3RTc5MUU1Cis6MTBFQTkwMDBBQzMwMkY5Njk3MkYyQURBREI0RTdBN0IwMUNEOUI3OTBCCis6MTBFQUEwMDBCRDU5MTJDQ0Y3RjRBQUIxM0FCNDIzNTVGQUE0MTU3QTk5Cis6MTBFQUIwMDA2RkMyRjlEQzhFRTM1QjYyNzQ1MkJGREY4RUYzNDZCRDNBCis6MTBFQUMwMDAyRjgzREU4N0Y5M0VFMEYwRDNGQ0MxMEU5ODRBNzZBMDkyCis6MTBFQUQwMDBCMDAzREE3MUJFRDM2MkY4NjU0QTc4MUFCRUZGRkYwODQ4Cis6MTBFQUUwMDA0RkY3NjBGREZGMTQ0RjIzQzg4QjAwQjY2QjZDMDU3OUEwCis6MTBFQUYwMDBBMThCOTMxNzAyN0ZEQkE0OTAzRTkzQ0IwQjBGRUEzOUQ3Cis6MTBFQjAwMDA3Q0JGMDBFNEUzRUQzNkZGNDY4NDQ3RkRGRUUyMDcxQUQyCis6MTBFQjEwMDBDOUVFNTNFMTRBRkVENjhCMzU1RjY1QzNENzU5QTI1RDc2Cis6MTBFQjIwMDA3NkUyMDNEMzY2MDY3QUVDODRBMTlGRTRFMjg5RjlDQzBECis6MTBFQjMwMDBEMzhFRjI0M0M3RUExMThGQUE1RDU5NzFGRjlBQjcxOEI1Cis6MTBFQjQwMDBEOEIzOTdFRDMyRDFCOTVCRjI2NkUxQkNCQTgxQUUyNjlCCis6MTBFQjUwMDBENEMzNzU4NkUwQkU4Mjk4NUVFQ0I1MDc3N0FDNDBCQTQ4Cis6MTBFQjYwMDBERTUyRTIwOUI4NDkzRkQyN0EwQkI0MjY1M0JCNUU3QjMyCis6MTBFQjcwMDA5ODI5NTgzRkMzNkQwMzQ4OTBDRTQ0OEZDODZEODZFMEY2Cis6MTBFQjgwMDA1RTA5RTlDREY5QTU3N0Q1QTQ2MDQwMjJCQTA3QThGRkIwCis6MTBFQjkwMDA2RDlDN0Y3QUVCMThEOUY3QkRCN0I5ODg2RkNDMkM2ODFDCis6MTBFQkEwMDA0Njc4NDZFMzgzOEMwRTQ2N0NDNDE0RUZENDNBNkIwQzUzCis6MTBFQkIwMDAwRjNGMTNFQjNBQjkzQ0ZDRkNCRkExMURCOUQ5NEM3NjExCis6MTBFQkMwMDAyNEVBNENEQzc3QjE5RTRDODIxN0U4RjkwMkYxODdCQTRGCis6MTBFQkQwMDA1RjdBMjQyQkI4ODlGNjY3OUUwQUE0Qzc0NkFCNzcwOUVCCis6MTBFQkUwMDBDMUZGRUQ2NDM3QzJCRkNCQ0NCQTRDNjVCOEZENjA5REE4Cis6MTBFQkYwMDAyNEVGMDQzQ0FDRTczMTg2RjZEOTlEQzIzRUZCRjdGQTIwCis6MTBFQzAwMDA0QjU2QjQwMzVFQjU3M0ZCMEExOUM1MDRGMjZGMjlFM0QyCis6MTBFQzEwMDBGNTRCRDcyNTdGODhGQjk5QTVFQkU0OTAxMUY2MkJBQzNCCis6MTBFQzIwMDA2QjhFMzcxQ0I3Q0YyMDhFODJGMUZDNDI1RUIyRUQxMUE1Cis6MTBFQzMwMDAyQkYyOEQxRkZCQTVFMEY4N0ZCNEJBMkQ1ODg2RkU1MzRBCis6MTBFQzQwMDA5MUVDRDBCRjM4RDZGRjNEQjE2RTE3Q0IxQzdFRDY5NjY3Cis6MTBFQzUwMDBFQzQ2RkMyNkNBRjVGNzU0Rjg3QTFFRjNDNjdGNEZGRDQyCis6MTBFQzYwMDA0RUUyQjhCMDhGN0IxRkYxMDU3ODBGQTVBMjNERkY2RDc2Cis6MTBFQzcwMDA5OUU4OUEwOEFGRDMxMDc5QzgwQ0Y1OEJEQjY0RkI3QTVFCis6MTBFQzgwMDBDMEE3QkZENTRBRjM1NUUxQkQzMzMzNzIyREVEQUYxMkE2Cis6MTBFQzkwMDBDNjNGOTNEQzU0QTFFMEZDQzVGRTgzQUREM0VFQkYxOEE0Cis6MTBFQ0EwMDAzM0M0Q0FDMDE3Q0I1OTg0RjYzMUMzREU4QjdENkJFMjA3Cis6MTBFQ0IwMDBCRThGQjFCRjE4RTNEQkE5RUI4NUI5QTUwNEY4MDU1RkVBCis6MTBFQ0MwMDBCOTI1MDVFOUU2OTczOEREQTJGNDRFODA1QkM1QTdFQ0NGCis6MTBFQ0QwMDAxODE5OUY0RTQzMzgxN0U1OTVCRkQ1NDg3ODQ4RUNBRkQzCis6MTBFQ0UwMDBFQUJEQzdDQ0IwM0U4MEFGQjY0QjEyRjFFM0Y2RkI5MjYzCis6MTBFQ0YwMDA0OThGMzExM0E3NjNGM0VBMjQzN0YyRTc0RTQzRTQ2OUZGCis6MTBFRDAwMDA1QTM3MkYxOTE5RDJGNUEyMzlGMjAyQzlBMzQyRUUzN0E4Cis6MTBFRDEwMDBCOEY4MzM3OTBGQjZCQjkwQ0VGOUZBQzI2MTNEQUQyNzkyCis6MTBFRDIwMDAwRTBDRDgzQjNGOTNGNzUyQkRDNEM3QkREMDlFRUNDNjc2Cis6MTBFRDMwMDBGNUQ4OEM5ODg0RUYzNzA3RkVBQjhEMDFGRTRFRTlGOENECis6MTBFRDQwMDAzRUI4Nzk0MEJCREZCRDAwRkZFQUNCNjI3MkUxMjJFMzRGCis6MTBFRDUwMDBERjA5MEM3MDM5MDAzMzVENDVERkI5MjM4OTZEODI3MTlECis6MTBFRDYwMDA5Qjc0OTIxN0VEQTNBNkQ1OTM4MjFEOUM1RjRDQjg1RTUxCis6MTBFRDcwMDAxQTA0NDg0RDNBRDhGNzk1QzVENjc3OTNFRTY0MTFFRTRDCis6MTBFRDgwMDA5QjFBNEM5Qjg3RTQxNEFBM0Y4RUZCMkQ4NkZCMjVFODNCCis6MTBFRDkwMDBCNzFBM0IxNTBDRTdFN0E2Q0RCRkZEMzNDMkRENzQ0OEJCCis6MTBFREEwMDA0QkY3ODYxODdGNDg5RjQ5RDgzRjhFNUYwQTYyN0M0MEE4Cis6MTBFREIwMDBGNjM1Q0E4NzZBMTYxQzJGNzEzRjBDOTY5MzZCODY4MkI0Cis6MTBFREMwMDBFODg3NjkxNkZFODlGNDYzRTFCOUM4MUZENkYyN0VCNkZBCis6MTBFREQwMDAxNDlFQ0Q2N0I5N0QzMTczNzBDRjJCQjhDRkI1RDcwQ0VBCis6MTBFREUwMDBFNUUyMzQ5QjVCRDc1RTdERkFFQTE4N0Q1NTM4NjcwQzA3Cis6MTBFREYwMDA2RTk1NzFGRkE2REEyNTcxRkJDNzg5MEJBNkM0M0ZEN0I0Cis6MTBFRTAwMDA1MzNGREM4RkUyRjdDMkY4MEFENzg1QzJGNUQ5MzZBMUE1Cis6MTBFRTEwMDBDRjQwRUY5MURDNURERTMzODFGNDFFRUEyNTk0NUZFQTlBCis6MTBFRTIwMDA3RTE2RTUxOUNBOEYyNzFENTU4QjFDMzBDRjkyQjRBQUM4Cis6MTBFRTMwMDBBRjM4QTZGMUVGOTAxRDhGOUJBMDE5QzNGMTk5QTg1Nzg5Cis6MTBFRTQwMDBENDc2QjhBRjZEQjE4Q0RFMkVFQUU3RDk5MUNBRTU4M0VFCis6MTBFRTUwMDAyMjUxNzlDNTRGRjU3QjM2MTE3QzBBRjFDQkRBREQwNUZECis6MTBFRTYwMDAyNDZGNTU3RjRDODNGMDQzQUQxMEZFOUIxNUMyN0ZCM0RBCis6MTBFRTcwMDA3MkJCOTFCOUUzRkQ1NTQxNkRCOTQxQUNGNzQ2MTZFNjU5Cis6MTBFRTgwMDA3RUFDRkQ1MDFGRUZCN0E5NjYyMTJCRDZBM0ZGMDY5RkNFCis6MTBFRTkwMDBGRERBRkVDRDJDMzg1QjQxRkEwRTdDNjY4QzdGQ0Y3QTkyCis6MTBFRUEwMDBGOTdDRUYxNDc0REY2MUU2N0U5Qjk5RUJGNkM4REMxOTAwCis6MTBFRUIwMDBDNUU3OUI1QUU2MkQ3ODEwRjVDNDlCN0FGMjJGRkM4N0E0Cis6MTBFRUMwMDBBMDkzOEExN0EzQTNFQUVCODhFRjI0REM4RjYxQkIwNzJBCis6MTBFRUQwMDA4RDg0OTdEM0EwOEYwRjBBQkZDNjAyREM2N0I2RjlCMzQzCis6MTBFRUUwMDAwQTBCMTEzREI2QkMwNUQ2RTFGOERERjQ5MkI5MUVGOTY2Cis6MTBFRUYwMDA2NUIzNDNBN0UxQTcyQTg3OUVDQUU0RUY0MUJDQjcyN0MxCis6MTBFRjAwMDA5MzVEMEQ2ODlFOEE3QzU0MzE1NkQ1OTM2QzJBRkE5OThDCis6MTBFRjEwMDAzRUQ0ODNCRDA1RTVBNjVCMkQ3RTFDMkY4Qzc2MDE5NDI3Cis6MTBFRjIwMDA3NzA4RjlCNUMzNjFBMEYxRDQ3Mjc0MUYyN0Y4MDVCRTQ0Cis6MTBFRjMwMDA0M0UzQTFERkM1MTdDNzA3QzE2OEZCQURDMjVFRTQ3MjNBCis6MTBFRjQwMDA2MURCQUEyNDkyNDczMUJFRDUzMUUyREIxMjlGMDFGRDdECis6MTBFRjUwMDA0NTJGMDkzOUYyMTIyMDk0RjY1MUZENjYyRTQ3MTQyRUUyCis6MTBFRjYwMDA5RjVFM0EzQjg5RTRERTFCMUZBRjI2Qjk3MjY5NTExMkRFCis6MTBFRjcwMDAzMzRBRDRERTJCNjFGREYzQzZFMDdBMjhERjI1RkNBOEY2Cis6MTBFRjgwMDAyRjQ5REMwRTBDMUNCMUQyMzgwRDA2RkYwRUY0MkIzNEM5Cis6MTBFRjkwMDAzQzM3REUwMzE0NjMyRjE4ODJERjdGMUFFQjVGMzY5MzUyCis6MTBFRkEwMDBERkFBMjE4NUMzRDlGMEQyMTg5MjkzM0ZENjA3OUZGOUUzCis6MTBFRkIwMDAwMUY5MjE4QzY0OUYzNTI0Qjk1M0E5RkUyNzY5MENFQjE0Cis6MTBFRkMwMDBCQjkyRkQ4MzQ4Q0Y2QzIzQjcxQjFCMENBMTIyM0JFMEY3Cis6MTBFRkQwMDBGMTY0OTBEQkJGMjc1MUQwRTBGODgzNTZCMjZCMDBDQ0QwCis6MTBFRkUwMDAyQ0ZDRkVBOUVFNENDRjI2NzcwQzJGQTcxRTlBNENGQ0NBCis6MTBFRkYwMDBCRjREQ0ZFOTE2MzhDQ0ZEOUEyN0Y1QkVCOTU5NTAzRTIyCis6MTBGMDAwMDBGOTdDQTkwNzc2OEVFQ0EyQ0YxMDMyMDA4Q0NENUJCOENDCis6MTBGMDEwMDBCREI2NENFN0VFNkI0NUQ5RjQ3MkIyNDdCM0RGN0M3OEVFCis6MTBGMDIwMDA2NTJERDYzN0FGNUU3NzEzQ0FDMUQxRDYzM0NBRjM3ODEwCis6MTBGMDMwMDA3RkVEMDUxNkM5QTNGRDY2RkREOEZFMTA3Q0Y3QzJFMDgyCis6MTBGMDQwMDA0NDBGQTk0N0U2MDI2MjAzOUZEODc4REJEMzdBQzAzNzIyCis6MTBGMDUwMDBGMkQ3MTEzREYxRUYxNzFEMUZFNzhCRkIzRkQ0MkZGOEJGCis6MTBGMDYwMDA5RDY2OTBCRjUxM0YzMkM5REZCOEIyM0M1Mjk5RDNCM0NECis6MTBGMDcwMDBGOUE1NEM2MTlGNjlFQkVGNDhGNTVGNDBCOUQ2RjRERDI3Cis6MTBGMDgwMDBERjlGNjgyNUZDNDY0OEZFQjExRUVFMUYzRkFERjcyRTAwCis6MTBGMDkwMDA0NjNFQjU1Nzg3MEM0QkUzRjZCNzg2MzRCRThFOTYxOUJECis6MTBGMEEwMDA4NTVFNjcyMTQzRkNCQTUzRUIyQkFBQjQ3Q0FFM0VGNUQ4Cis6MTBGMEIwMDA2OTdDMUY2OTFERTI3MjdDNzhCRDRFQUM5QkFGMTg1MTE0Cis6MTBGMEMwMDA2RjcxRDcwREVDQTdDRjcyN0Y4NjIxQ0Q0REY1MzNDRjcxCis6MTBGMEQwMDA4NjBDQ0JBMDlDQkYyRTY0NTgyMTlFQjgyRTAwREYyMTQ5Cis6MTBGMEUwMDAxM0NDRkJGNDBFMkI1RkNGODAwNjFDNjdDNTc0NDZGNjZECis6MTBGMEYwMDBDODBBMTlFQ0QwMzI3Q0VGMUUwODAzNURDRTNDNkZFN0U2Cis6MTBGMTAwMDBGQ0Y1MjdDMDBBRTA3QjA5MTNFRDhDNjBCNzgyREM3QTNFCis6MTBGMTEwMDBCMTUzMEFBMTVEQkY2NEJCNzFBRkI5MDBEN0IxNTdCNjk3Cis6MTBGMTIwMDAyMjNENzc0QjI0Qjc5Njc0NTYxNkVEODBGMkVBNDM1MzhFCis6MTBGMTMwMDA4OEZFMjlEMzM5NUZBRTBFREE0OUZGQ0QxNDcyNzA5OTdCCis6MTBGMTQwMDAzMTY4MjAzQkZBMTlFRUE3ODNGMUM5MUU2RTgwNEU1OTMzCis6MTBGMTUwMDA2NUMzRjE4MEYyNUJDMzBGNDE2RDlDNjE2NkJGOTBBN0YwCis6MTBGMTYwMDBGQkUzRTIwQjYzRTNFNDdBN0Y0MjdGQjBFM0I0RkMxMTlDCis6MTBGMTcwMDA1MEY1MEU5NzczQ0M5RDg5NzI0RTk1QzM0Njg3QUYzNDc4Cis6MTBGMTgwMDA4REU0NTI2MTI2RDIxN0U4QzlFNUU0NDE4OUYwREFDODc2Cis6MTBGMTkwMDA1QUI4REUxMEYyM0VGQTVEQTEyRkNFQzgwMUFFOTc4Q0IwCis6MTBGMUEwMDA1QkU5MzkzN0FEODBFOEI2MUFGNTBERjlDREY5RkU2RTk5Cis6MTBGMUIwMDAzNDNFOTg5QkE2MTM3MjcxNjQzRUI4NUVGMDQxQzM1OTA5Cis6MTBGMUMwMDAxNkJBMTZCRUQ3QjA4RTg1MUFBN0YyQTc3NTJBRTk0MURFCis6MTBGMUQwMDBBRTBGNEQyMjlFNjFFMkYxOEVDRkQzOEI4OTdBNzA5ODZCCis6MTBGMUUwMDBERTRCRDA3Nzk5MDZBMURGMDQ5REUzRkREOUE4RUY2NzM4Cis6MTBGMUYwMDBBRTBCQ0FFOEQ3Q0NCMzc5QUZDRDRDOEZEOTJGQ0RFRkJBCis6MTBGMjAwMDA5OTRDRUVBQkIwRUM2MzYzMkRFODlGQTk3Q0M2ODVGRUZDCis6MTBGMjEwMDA1REQ4OEZFM0JBNEEwNkJDRUM4MUY3QkI1NUZCRDZDNTc3Cis6MTBGMjIwMDBFN0VCMzI3MEZFRDUyQjNFNTY2QTQxQkEwQ0QxN0UzNUUzCis6MTBGMjMwMDA5MkNFNkNDODhGMkEzRTc3NUJBMTVGMTlGNkUzRUIyRDY3Cis6MTBGMjQwMDBEQURGQzQzQTkzRTJGQTU3QkQ2NDI2Qjk3QUU1QjAzNUZECis6MTBGMjUwMDA2ODI0QkJDMzlGNkY4N0YxMzI3RTY1MjQzQkY0QzI0QkE5Cis6MTBGMjYwMDA1NkQyOUYxNzg0RkU3M0FBRkI3RUI2ODFFOEQzOEE3NEI4Cis6MTBGMjcwMDA0RDQ3NkVBQTFBODNGRTUzMjZDRDFGODMyMjUwQjVDMzc1Cis6MTBGMjgwMDAxQUVEQTNGOUIzNDU3REMxRDBBRDlDQUY4Q0I0NUZCQzgyCis6MTBGMjkwMDA2MjBGN0YxM0NCMDAwRjQzRkJCQTA1RTk4Q0ZFRjY0M0U4Cis6MTBGMkEwMDBCMzRCMUY4MEY3Q0QzRThCODc2M0RGNUY4QUZDNkE5NDg4Cis6MTBGMkIwMDBFRkJEMTVGRDJBNzNFNTc1OTFGQjYwMUU4REI5MTY5Qjk4Cis6MTBGMkMwMDAxMUJBNTRFN0ZGRkE5N0I3NDFGOUEzNDM3QTY2NDQzQTczCis6MTBGMkQwMDBFRjlCQkQ4ODhEMUQ1REZFQUUwQUVBNEY4NkUzRDZDQjVGCis6MTBGMkUwMDA5QUZEREE3MjYzQkZCNkRDQ0M5NDkzRTEzODc5RkM1OEFFCis6MTBGMkYwMDA5QUQ1Nzk2NjMyQzkwRUNGNjdDMERGNDY2M0NCRDkzRDU4Cis6MTBGMzAwMDAwMEFGRjFDNzQ2RDI0NzBENjlGRTVENjlFODM3RDU0NUM0Cis6MTBGMzEwMDA1RTQzM0MxQkYzQ0Y0RDQ1M0Y0NTU1RkU5RjI4QUU3M0UyCis6MTBGMzIwMDBFNURCQ0M4MzcwNUYzMTU3OTJGRUJFQjJDM0VDMEVDNEY2Cis6MTBGMzMwMDBDOUFGNjZDMUZGQkQ3OUI1NTRERkJCRDNFODk2Nzg3RDEwCis6MTBGMzQwMDBFREI0MEFCNDA3RTlEQkY4NjdEMjAxRkU5QkI3Q0ZGQjQ3Cis6MTBGMzUwMDA4OEY2NEQ2OEI1NDNCOTE3RUQ0QkVDRjc5QzE0NkM0NzM0Cis6MTBGMzYwMDBGQjcxM0JENzdCRTdDMTdFMzRBMUZFMTRFQkE5NTkxRThDCis6MTBGMzcwMDA5QzZCODJGRkVDNzVENDRDNDRGOUEyRkM1OUYxMjFGRDQxCis6MTBGMzgwMDAzN0UyNTA3MUY2RUVFMUU4RkFFNDdFOUMxQkQwOEYzMzUxCis6MTBGMzkwMDA4RUZDMzg4NzUxNkUzNDlBQzI4NjRBMThFN0JBM0ZGRjBFCis6MTBGM0EwMDA4RUU0RjJDQUQ2QTU2NEQ3QzdFQzVDMjNDOTkxOTVGNzYxCis6MTBGM0IwMDBGOUU5RkQyQjNCQUVBNzc5OUQ4MTc5MjM3RUNFRUNFNjYyCis6MTBGM0MwMDBGQkI5OTUzOTk2MjBDMjc3OUQ5RERCQkYyQkExOUYyNDY5Cis6MTBGM0QwMDAwREM3NEIyMjFFN0VCM0VCN0ExN0QyRkIzNzhDN0YyRkUzCis6MTBGM0UwMDBEMENGRUQ4NERGRDg4NjUyNDhGRUI4NUI1MkQwQ0U2QkNBCis6MTBGM0YwMDBERTdFRkQ0NzI4Qjc1NkVFOTYzREE4QzdEOTExMkJGOUZBCis6MTBGNDAwMDAzRDU2RUU5RTMzNzFCOTA1QzdCOTlDNTY4OTc4RUI5QjgyCis6MTBGNDEwMDA2MzkzRTlCREVDMEI3MkZGQzlEMDc1RjA1RUU5QkJDNjIyCis6MTBGNDIwMDA4REVCRTRGODZFMjM4N0NGNkU3QTFBRTFCRkVFQ0YzMjEwCis6MTBGNDMwMDBGMUJEQTI2MzdFQjQ1NzdCMERERTg5QjhERURDQkJGNjdFCis6MTBGNDQwMDBDRDQ1QkNGRUE2MkU1QjQ3RUQ5Rjk1OTgwREYxNjA2RkY0Cis6MTBGNDUwMDBDREMwRjcyQjI1QzU4N0VCQUI3RUZCQUFEQTc4N0JBNDYyCis6MTBGNDYwMDAzMzREMjY3QzU3RTZBRkNCMDg1Qjg4REY2RjQ1M0RENzMxCis6MTBGNDcwMDBCODVCNEY3NkRERjEwNTFGRkNGMjM2Njc4Q0RGNTdDQUFCCis6MTBGNDgwMDAzREI3Q0U4Q0IzMzc5QTc3REQyOEY4MDEzNDM2RTA2OTgyCis6MTBGNDkwMDBBNUMwOTMzMTdGNUQxMTdFRjdGM0Y4N0ZFNUZBOTYyMkUwCis6MTBGNEEwMDAxRThGRjlFQkVCMjBCQUJFNzdGMUY1RjAwN0QwRjdCNDc5Cis6MTBGNEIwMDA1RkNGNzE2OEVDRkJEMUY2NDFBQUJGRDlFNDYxREU3RDc0Cis6MTBGNEMwMDAxNjhBMUI3QTcxOUY5QkU3NTRBODNFQ0ZDOUVENkNFNTY1Cis6MTBGNEQwMDAwRjZCRjdCRjBERjBGN0E3Rjk4RDRFNzg5RkNGQkNBNTQ2Cis6MTBGNEUwMDA0ODU3NzdDNDU2MDVFNjI0NEU4OUVDMUZCNkNCQzhFREM1Cis6MTBGNEYwMDA0OTg1RkJEREI2QTVCM0E3MzdDNUMxOTk4REUzQTVEMzczCis6MTBGNTAwMDBGQUI0Mzk2MURDMEJFRkZGRTkzNUM0NUY1M0RFQjlBOTBBCis6MTBGNTEwMDAzQzlFRjYzQjhBNEY1OTA2NzlEQ0QyRTJGMTMxRTQ4QjBFCis6MTBGNTIwMDBFNkMxM0E3NjU3NDk0QzFFMzY3QkI4QkM0RTlDRDc3MjIyCis6MTBGNTMwMDAyN0RGNjczNDNCMjMzNDRFNzUzQTVGNjdBQUJGNzc2NzhFCis6MTBGNTQwMDA2QjEyRjlGNTc2M0E4MzY2QkVCRjBEMzA5NEU3Mzc5NUI2Cis6MTBGNTUwMDBDQjNDREUyMkVDMTI5RkYwOTM5OUJDQUYzMDhDQzczMENECis6MTBGNTYwMDA4RkVDMTkwRkU1MjFFRkE5Q0UzNDI4QkY1RDNFQzcyM0VDCis6MTBGNTcwMDA0M0Q5RTI3REIyNkIyQ0NFREJBMzE3RjVFM0M4NUZGODZECis6MTBGNTgwMDBENkFDNEFCMjRGNkVGMkNBRjQ1RDU2OUY0MkZCRjUyMUVCCis6MTBGNTkwMDBFRkNGOUQ3N0MxNzc2RjY2REVCNEQzRjA4RDFBNTBENjZBCis6MTBGNUEwMDA0OEM3MjFGQzM2REEwMThBQkZEQzE5RTc1RkJERDEzM0Q5Cis6MTBGNUIwMDAyRkVENzRCQ0JFRjQ3MkZEOEZGQkYxN0UxMTM3MTgwOTdDCis6MTBGNUMwMDAwRjI1Njk5NTMzMTFCRkQ3N0Q5OUQzRTFFMzY3RjlGRTI0Cis6MTBGNUQwMDBFMzYzMzNGNzYzQUJFRDNFQjY3MjNENTNFQjk0ODQxREFBCis6MTBGNUUwMDBEODlGODc3MjNFNUFGRTVBQjEyNjBFRUMzNEY0RTdFMUZBCis6MTBGNUYwMDAzQUZCQURBNDFENjc3NTk3OEVFMkIzQUJCQTE4QzU2MzJECis6MTBGNjAwMDAzRkZFRkU4Qjc5Mjg2RjNGREFGNzYyREVEMjM4RjgxMkMwCis6MTBGNjEwMDBGQkE5Q0Y1QjlENUFCRjk0RUE4Nzc0OEFCOEY0NTI4RkQ2Cis6MTBGNjIwMDA5MUZCRkI0NkYxNDNBQUVERDk3NkJFMUZCQjA4RDIxRDY0Cis6MTBGNjMwMDBGOTRFRUQ3N0IxM0VDOThCNzZFNTQ1NjYyMjc5QjY3NDExCis6MTBGNjQwMDA1MEY4MzVCRERFNDIyN0VFMUZENEZFMDlFMzZGNDFGRUMwCis6MTBGNjUwMDAwMUI4QTQwMTg5RjZFN0M5MjUxMTkyQUZBQjRDQkVENzFBCis6MTBGNjYwMDBDNkI4MzEyRkM1NEJGNDk5ODc3NDk0OTA1RkJEMDY5QzQyCis6MTBGNjcwMDBCNzIyRjY3OTQ2QzVENzg4RjQ1Q0RFQTNBNTYzOTZEMzk2Cis6MTBGNjgwMDAyNkUyOTQ0RUEyQkJBMUM5QTJBMDdFQzhFODEwRjJGQTVECis6MTBGNjkwMDAxQjNBREFCRjE4QjI1RDE2OTQ0QkQ3MTUyNTc1NjJEQzlDCis6MTBGNkEwMDBERDk5OTQzMjE1RkRFNkI5RDlDNUQ0M0U1MEM1RjkzQTc1Cis6MTBGNkIwMDA5MEMxQzg2Rjk1QzU1QTI0OTJCNzM2RUVFN0NFOTlDRTYxCis6MTBGNkMwMDA2Qzk4RTdGMUEyOTNEQjgzMkVFNkQ5MkU5MzNERDgyRkQ5Cis6MTBGNkQwMDA5MUJGNUZDQzVGOTVFQkM4MkYyOEU3M0U5NjRDQzQyRkI3Cis6MTBGNkUwMDBEMkEwNDRGNjlEQUNFQjVGOENFMzhFQzYzRkJEMDlGQzE3Cis6MTBGNkYwMDBEM0ZCMEZFNjlGM0VGNTdCQzNGOEM3NEY3MUJBQTUyRTJCCis6MTBGNzAwMDBEM0M4RkMyM0ZDQUE1RkI4RkQ2ODcxQzI2Rjk4NTQzRjUwCis6MTBGNzEwMDBCMzg0RjNBRDE1RTNENTlBMkMyMTc5MkFDOTg3NzNGMTA3Cis6MTBGNzIwMDBGRUQ0NUQ2MDY3RTI3RTQ0OEQyQjhFRTk1OEUyRTY3NjdBCis6MTBGNzMwMDBGQTUwMThGN0U1QzlENzk4NDhDRjdENDczNzU0ODBGNjc3Cis6MTBGNzQwMDA3QzYyOUMxMTI4NkI0Nzc5OEYzMjg2RkM4QUFENTVCRTRFCis6MTBGNzUwMDBEMzY5NzFGQUZFMDhERjM3MzREREU3QTVGN0IzMDdCOURGCis6MTBGNzYwMDA3RTZGMkUzNDkwREREOTNDMjAwNTkwQ0U0RDNFNDNEMEE3Cis6MTBGNzcwMDA1NDQwNzE5NTI1QTRCNzFGMzJCQjc5OUNDNERENEU3MUVFCis6MTBGNzgwMDA5MjZGQkI3OTFDMjVFQTQ3MERGNzNEODBGQzU2NkYyMTJGCis6MTBGNzkwMDBCRjQzNjJCQ0U1ODVCRkM4RkNGQkUzMTk3REJGQjc5NERFCis6MTBGN0EwMDBDNzc3N0FFN0I5QzlBRjkxMTg0NzYzNUREQUY1QUJDNjk5Cis6MTBGN0IwMDA1MTJFNUEwMTMxRjBCREE1OUJDRDQ0ODc2Qzk5RTM5OTM4Cis6MTBGN0MwMDBBNTlBQjg3RTE5MkUwN0M4NUY5QjMxNUQxMDQ2QzQzQkQxCis6MTBGN0QwMDBBMkVCMUEyNDAzOTZCMzQ1QkQxQTlGQjE5NkY4MEFEMDNFCis6MTBGN0UwMDBDMkJEM0RFREI5Mzc5M0QyRkY5NjdDODZENkVGRkNENUVFCis6MTBGN0YwMDA3Qzg2ODBCMTE2RjMxOTRDNjgzRDhCN0EwNDFCRjRBREZFCis6MTBGODAwMDA1QUY2OUFERDE4QkY4OUQ1MkI2MDM3OUEwNjI0RjFCREM4Cis6MTBGODEwMDBFNzZGOTg1MzA4Nzg5MEQ0RUZBRkRGRTRCNTUwQkM1ODQ5Cis6MTBGODIwMDBGM0JENzhGODk0ODRGMUY1MzBCRUM1MkREQTA3MEVDQzFGCis6MTBGODMwMDA5QkEzNTA1QzUyRDQ3RkQ2OERGOTFCNUJGNERBRjEwOEEwCis6MTBGODQwMDBBNUEyM0YxNkQ0RUYxRENGOUNGQjlEQ0QzOTMxQkQwRjM2Cis6MTBGODUwMDA3NjgwMjk3RDVBNENGRjZGRkNBMEI2RTcyQUY4NTZCMjk1Cis6MTBGODYwMDBFREIyMDFGNUFBQUFDNzlCOUQzQ0JGMjE3MUJEM0FEMjVBCis6MTBGODcwMDBGOTdBMDVGQkQ1OTE0RTcyODNEQkI1QjUyMjNFMDlGNkM4Cis6MTBGODgwMDBFQzVDNUM1QUNERUI3QzBDRTM5MzYwMkY2NEE0NjMxRUFDCis6MTBGODkwMDBDM0ZCRTdDRTFDNDVGQTJERjg5OEVDRjlFNjRGMTVFRUMwCis6MTBGOEEwMDA3NzAxQkIwM0VENzM5M0UwNzMzNkEwMjc3REFCRjJDMTA0Cis6MTBGOEIwMDA2QTIxN0Y3QUVEQTBFRjkxNUY4RjQ4RDMwMkM0MTcyREE0Cis6MTBGOEMwMDA3OUI3MDAwREVFNEZGN0JBNjk3Q0IxRUY0QTg0Nzc0NkZECis6MTBGOEQwMDAzQUY3OTMzNDE3NTdFRDI4QzJGMTlGOTIxOEVBRkI0RDdGCis6MTBGOEUwMDBDNTI3MzNEMDJFNjkxRUZDMzA2Mzc5NUNCRjU1MDM4RjZBCis6MTBGOEYwMDAxMjFFNTZFREQ3OEYzOEZGMTlFOURDQkU2QzNBRkMzQzdFCis6MTBGOTAwMDBGOTA3M0YwRTRBQjQ5NkVCOTU2MEY3NEMyOEQ3RDdFQjMyCis6MTBGOTEwMDBEMDQyNjNFNUMxMjVCNzkxQkY3RjkxODE4RDg3RjlFNTFECis6MTBGOTIwMDAwQjdERDRCQ0ZGMkI4MTk5QjgzRjgzN0YxMkJDREFFOUYxCis6MTBGOTMwMDA1QjQxN0E2RkU3MjI5MzA1RTMwRUNEQzU0QkVGMjYzQzgyCis6MTBGOTQwMDBEODkyQkM4ODg3NERDNTU1NTlGODlEQTZCQUI5MzY4QTU0Cis6MTBGOTUwMDAxMzgwN0Q4NUY1NERGN0RENEU3RTEzMTVBRTREMDNGQTEwCis6MTBGOTYwMDAxQUI0QkIyQUMwQ0VGQTExQzA5REVCOTg1RkUzODFGNUIzCis6MTBGOTcwMDAzNzQ2M0U1ODdBOEYwNUUzQzIyM0NCREY3RkM5RTBGNEQ4Cis6MTBGOTgwMDBFQzk0N0M4MTlCQ0JDOTRGQzhFMkZEN0VGOTAzREM5RUUxCis6MTBGOTkwMDBBQjRCMzc2OEZDQzI3NUU5RENDRTlDMTUxODlBOERCQzYwCis6MTBGOUEwMDBGN0IyMTI0RTQ2QkJCNzk5NzkzRkMxRkQyNUYzNTlEQzNBCis6MTBGOUIwMDBGQjg4NEU1QzhFMzhEQkRDRTQzRjMyMzlDM0RGQjkwQUFBCis6MTBGOUMwMDBFQjY3MjlCNDdGNjA0QUY4MTFGQ0VFODU2RUE3NjcxM0Q4Cis6MTBGOUQwMDAxM0ZDOEJFNUZCNEE4MjI4NDdGRjM5RERCRjE4RjlBQ0UxCis6MTBGOUUwMDA0MkQ4OEYxNzBFNUY1RjhBN0UzNkQ1M0VFQURFNjMwRTAxCis6MTBGOUYwMDA2MjFDQjBEQkVBRkU2RTBEQ0FDMTNGMjgzQ0VFNkQ4QTg4Cis6MTBGQTAwMDAwQ0NENDY3QUZDRDE0MUUzNzY5QjgzREQ0OEZGQzA1NjlFCis6MTBGQTEwMDAzREQ1MUZCNkZBNTcyMURGOUNBREFCMjlBMkJDMUI0QkNECis6MTBGQTIwMDBBMDA4RTNCQzdBNjcwRjQzM0IwMUI2MEJFNDRGMzAzOUMzCis6MTBGQTMwMDA3RDBDRTNBMUIzMDM0QjE0MDlFNTdDODJERDMxNUJFNDZCCis6MTBGQTQwMDA4RjkyRjA4NEY3NTU0MjhDOEQwNzJFMzg2M0EyMjVEMDEzCis6MTBGQTUwMDBGOTU5NUFDQzBFNzlFMzRGMEIxNTdDQTlEQTI3M0ExM0UyCis6MTBGQTYwMDA4RjY3NTUyRjRBNjIzMkYyRkQ4NkM4NkIzQUY0NUYzQkNFCis6MTBGQTcwMDA4N0M4N0U2REVDOTdFODNCOERDNUNGNTEzRUQ4MUE5MTczCis6MTBGQTgwMDA3NzE0Q0RGRjUxQzI5NDBGQjUzRTNENTlFOEYxNEVDRUVCCis6MTBGQTkwMDBFRjZDODhGNkNCRUMwMEE3Mjc2MzYxQ0E5MzhBRUQyMzRECis6MTBGQUEwMDBEQUE5OUQzQTlFNDFGOEREMUI4NURGMDUzNDE4RDUzRjY0Cis6MTBGQUIwMDA5NEFFREEwN0VCQzU1M0NERUJFMkRGREQyNjBENzk2NUI5Cis6MTBGQUMwMDBDNDZCQTlBNEYxMTdBQkNGQTdEMkI5N0Q5ODdBMkMzMjE5Cis6MTBGQUQwMDAxN0Q3NkZFNEIwOUFBN0M5RjMzMDc3NEM5QkU0NDFEM0IyCis6MTBGQUUwMDA2OTU4OUVFNkMwMjc3MzkxNkZDMEQwQTZGNURBMzRGMDRFCis6MTBGQUYwMDBDNUYyMzRCRjJGRjYwREZGRUI3OTlBMUVDOUJCMTc5RUQ2Cis6MTBGQjAwMDAzRjRBQjc3M0JGOTU5QUE3RTlFMUY4NTNFMzZDODlGOUM3Cis6MTBGQjEwMDA5OTE3QjI0MjBBQ0ZCNzBBRjdFRDQzRkUxQzMwNTIxRUM2Cis6MTBGQjIwMDA1N0VEQzBFQkVGQTE3RUFDMzVCMTdFOEM0MzI2REExOUUwCis6MTBGQjMwMDA2REI2QUYwQzIyREY1RjNDN0ZBNkVGNDE4Njc5QkEyRjBFCis6MTBGQjQwMDA3ODI4NUYyM0MxN0U0OERDMjdFQ0M1MjY1OUEzREI3QkUwCis6MTBGQjUwMDBFRjQ2RTlDOUVEQkQ2OEY5N0ZERERFRTNGNjdDNjAxRkE1Cis6MTBGQjYwMDBDRjBGNTBFNTc5QjNEODlGNURBQ0JGOTQ4MjdBRTY0NDVECis6MTBGQjcwMDAxNDlFODQzQzg2QTc0NDFFQzNFMEM4NzkwQzhBQzgwNzNCCis6MTBGQjgwMDAwMjdCM0Q0MDdDNzI5MEM3NzVERTc4M0E5OUU0QzcyNUM4Cis6MTBGQjkwMDA5QkIyMTdFREE1RjNENkM4MzcxMTU5OEFCMDkzM0E4RkE3Cis6MTBGQkEwMDAxOEREMjgyRjQwREU5MUZDMEUxQ0Q0RjMzODBEQzY2REY1Cis6MTBGQkIwMDAzMDhFRjNGMjQ0MTFDNzExRjFBMjk3OTJDOTZFNjk0OEQxCis6MTBGQkMwMDA3MUE3NjI3RjM1NEVGMzYzQTE2RjFBOTI3ODdDQTYyQkUyCis6MTBGQkQwMDBEOTdGMzk3RDg0QjhDRDFFNjE3RkVEODFBMTZDMzhERTdGCis6MTBGQkUwMDA3QjQ2MTFDNzA2MDE4MUZCOUQ4NzcyNzlEQzQxQzQ2RDlDCis6MTBGQkYwMDAyRThBQjhDREE5NjI1REM4QzBGRDEwRTRBNzcyNzcyOTJFCis6MTBGQzAwMDAyQzBCRUFEREVGOTk4MzZFRUVDRjMyRTk0MEVGMkY1M0Y0Cis6MTBGQzEwMDBFMzM2MkY3MzNGRDUzMjExOUYzOUI1NjAyRUU1MDcyRDlFCis6MTBGQzIwMDBDN0ZDNzcxOUZEMThEQ0NGMUNDREM3NjczNjFEQ0U2NzIyCis6MTBGQzMwMDAwRDg4OEI5RDI4NjIwMjgwRjU2QkUwQjVBNDkzRDA5RTYxCis6MTBGQzQwMDA3MDc3NDI5OThDNjU2RjRGMEQ3Qzc3NjlBNzhFRjYyMzhDCis6MTBGQzUwMDBDQkJBQjRGRUYyMkI5QkVFQUU0MUZEQkRCMTkzQzcxRkY0Cis6MTBGQzYwMDAwMzVEMTJFOUVGNjVDQ0VCNDI3QjQzRTU4NzgyOEMzNDgwCis6MTBGQzcwMDBBMjczQTA1M0U3QzVFRkNDQzhFMEZFMDQ0MDdEOTBFNjM4Cis6MTBGQzgwMDAyNzlFOUQ3QUUxNjcxNzcwQjQzMzVEMDg5RjNBODkzRkRDCis6MTBGQzkwMDAzN0RBOTQ5QTExRjVCMjE4QUY1M0RGNjJBQTQ0M0IzNkIzCis6MTBGQ0EwMDA1NzQ3N0VERTJCMDZFRjIyRjI5MzNBOEE4ODZFOURENjY2Cis6MTBGQ0IwMDA5NkFFMUE1RTRGNkJFNThBMzlFMkEzRkE2QjE1NkVFOEQxCis6MTBGQ0MwMDAzMUI3MDNFNTY0NjY4Njg4REYyNENDNzc3OThGQjY5Q0VDCis6MTBGQ0QwMDAxODdGNTgxNUQ0OTY5NzMxRkY4NDJDM0M4N0IwNUZGQjcyCis6MTBGQ0UwMDAzRTMzODNDQkE5MkI5QjBBODQ5RkRGNDM3RUZFNEVCRDEwCis6MTBGQ0YwMDBGQkREMDI5NDUzREQwQUM5QzlGNjFDOEUyRjVEMkU3RkYxCis6MTBGRDAwMDA4RUI1NTcyRjIyRkJDMDBFNzYwNUMxQ0JFMTFGN0JBRDEwCis6MTBGRDEwMDA1MzQyN0REOTY5RTc3Q0Y5M0Y4NTNCMTFERUNBOEMyMkNECis6MTBGRDIwMDA2RTI3QTA3MTg3RUJBODVCMEE3MjdDNzFCOEJGQThCRjcxCis6MTBGRDMwMDA2MjY5ODZGMDE3MDhGOTEzMkRGRkVGRUYzNzM5M0Y3NjI4Cis6MTBGRDQwMDBDQjYyQkREOTQ4RkUyQzE1RjFDNjUzOTJFN0U5MTBCRTJGCis6MTBGRDUwMDBCNzgwNUQwMDcwMkZFQjk2Q0JEMDNFOTlGRDE1MEJDRDkzCis6MTBGRDYwMDBBM0U5NjU3M0QwMDhGNThERUJDMjc5Qjg4RTlBQUFDMjYzCis6MTBGRDcwMDA0NTJEMjNFMDE1QTE1NTU0QjkwNUVEOTYzQTYxN0Y4MEQ0Cis6MTBGRDgwMDBFQkI2NEIxQjg3MUExRTU3RjQ3RTJCMjMxREY3MjFBN0JBCis6MTBGRDkwMDAwRUJFOEVGNDNFNjgyNkJEMDRGRjc1RDQ4OEZFOEVDMzY5Cis6MTBGREEwMDAwNTY0MkY0RDRERjVCNzY1QTAzRTRGMEFGNTdEQUYwMEI4Cis6MTBGREIwMDBFRDEzNkUxRjM1MEUxQUY3QTBGREI3QjQ1MzdCNkU4Njk4Cis6MTBGREMwMDA2REQ2QzZCOTU4OTc4M0ZDMTlBQzU3RkIxRUNGQTc2OEYwCis6MTBGREQwMDBGQTBEOEI3QjcxM0RCRkNERTA5Rjg4NzZERDc1NUZFNkM4Cis6MTBGREUwMDBGMUY1RjNBQjc0MENFOUJCNENGNkFDNDAzOTcyREVBQzA4Cis6MTBGREYwMDBCNUJCQ0Y1QjM5QkRGQUEyNzRGNjE0MjE5REZCNDZBNUI1Cis6MTBGRTAwMDBCM0E3MDhFOUJDNENDN0ZDRjFFMzM0MjI5REFGQzZFQ0I0Cis6MTBGRTEwMDA3MzRFRTdGM0NGNUY1Mzg0NzQzRTc3RjA5QTIyQTRGM0Q2Cis6MTBGRTIwMDAzNjdEOEYxN0Q3Q0Q5MzBFRkY1RUM0Q0ZFOTM5M0VCMjMyCis6MTBGRTMwMDA5QkQ0QkNDOTJGQ0E4Rjg3MzJCNEZBMzA1QUZFM0JGOTIzCis6MTBGRTQwMDAzRjQ2RDM4M0ExMjgxQzVBM0RFODM0Qjg3MzUwMUUyRTc4Cis6MTBGRTUwMDAzNTE5RkZBQTNFQzRCRjExRkQ2OTI2MjNGOTIzNUVGRUIyCis6MTBGRTYwMDBEM0U1ODc1MUJGMDUwNjY1QjIzRkQ0RjE1RTU2RkNFMzhBCis6MTBGRTcwMDBEMDVGRjBGMjdCMkU0RjQwMUE3REZDMDY2MTU3Qjk0Q0UzCis6MTBGRTgwMDAyQzgwN0UwRkQ1REU1N0VEQzY0NDc5RkMwQjMxOUZEMzE1Cis6MTBGRTkwMDAxOURFMUFCNEIzNTVGRjZDQkQxOEQzMTRCQ0NDRUREMzI2Cis6MTBGRUEwMDBBNzI0RjJCRjlBRENGRDNDN0ZGRUM4MTIxQkZBNjdDRjg1Cis6MTBGRUIwMDAwNkI5M0ZCNkU5Rjk1MkYyRDdBRTBBQkUxMkMyRkMyNzI0Cis6MTBGRUMwMDAzNjI4RDk3MERGQjBFQUE5MEY1MzMwOUUwREZCRDA1MzBFCis6MTBGRUQwMDAxOTcxRjE5NTM5NjIxRjdBMzY3ODJBMDVFM0RFRjBGRDUzCis6MTBGRUUwMDA2QUZDN0VCMjMzNjI0MEZFNkQ4MkZEMTkzNDYxNEQ0QTc4Cis6MTBGRUYwMDA4NENFMEQzNTM5MTlFOUZCRjIwMUVEN0U0RDhENEZFRUMzCis6MTBGRjAwMDBGNDE5NDhERUVEMUM5NDgyQjgzRkNCMzBGODBCNzI1MEU4Cis6MTBGRjEwMDAzRkIxMUNEQjk5RTREODdBRjkyNEMzNkJDQjlDMTYxRjQ0Cis6MTBGRjIwMDAxN0Y2NUVDRTg4Q0I1NzBBRUY0ODI1M0UwQ0VCOTk5NzIzCis6MTBGRjMwMDBFQzgwMUQ1NjIxOTc3OEJDRTYzRjc3RDk4MzNDN0Y4OUJBCis6MTBGRjQwMDBCN0ZGQ0Y2MDAxOTU1NTdEQkQ0MjlDQzM1QjIxQ0VFMURCCis6MTBGRjUwMDBBMUZDMEUyNUM4RUZGODcyMzRERUFDOUUzNzAzNzkxRTgzCis6MTBGRjYwMDAxQTI5RkUxRDk3QjcxNERGQkY4OTQ1NDQ3RURFNjc0NjE4Cis6MTBGRjcwMDBDREI4RDE3QzlEOTY1MjM3QzBCREU2NkIxNjNBNjdEODk2Cis6MTBGRjgwMDAwQzdDREQ1QTE2RTNDMzA2MzExNTk1MEY5Qjg0NUZCN0QxCis6MTBGRjkwMDBCOUZFMjRFRDAzOUFGMTdDMDVEQTU1MUVDRTg3MERCMDJCCis6MTBGRkEwMDAzRkMyRkNDREM0NzVDQkZBQjVGOThDQTNBREUzMjk5OTVBCis6MTBGRkIwMDA1QUJEMTIyREZGODNGQzk4RDMzM0I1RUI1NzlEQkZFQTkyCis6MTBGRkMwMDAwNzhGQ0U3MzUwRTJFQjJCNjE1RTg5RkJDQTQ0RkZCNTBECis6MTBGRkQwMDBCQTJGRkNBMjcyRURFNjRDQUQ1QzhCOTZGRkMxNzJFREMwCis6MTBGRkUwMDA4RUNDRDFFNDlBMzYzRUYwMzdDQkI1QzQzODQxMjFGN0Y4Cis6MTBGRkYwMDA3RjYzOUMwMEUzQjZGRkQzMzhDMTQ3RUU5RTBDMURDRjU0Cis6MDIwMDAwMDIyMDAwREMKKzoxMDAwMDAwMEMzRDdDNDRGQkJBNDk2OUI0Q0UzMzBBRUM4RTNDQjhEQTMKKzoxMDAwMTAwMDU2MjNDNTYxMTNFM0FBQ0RFRUI5MjI4RTM4RjRDQjE5NkQKKzoxMDAwMjAwMEE4MzcwRkU5MTlFQUYzN0FDQjRBOEE1NzM2Q0IwNzBDN0YKKzoxMDAwMzAwMDc4QTQ3MDU4M0M1MTM5NEE3NkZCREYxQTU3NUY5RjE5RjQKKzoxMDAwNDAwMDhEQUIxNzYwNUNGRDE1Q0JFNTM0N0YxQzNEQUI0QUMwMjIKKzoxMDAwNTAwMEMwMkYxOTNEREY2OEIzQTA1M0IyQzg4QjMwMjkwMTY2QTkKKzoxMDAwNjAwMDhGRUIzRjVBQkZERTRDNkUyN0JGMjJGMjYzNUMwNjlFQzkKKzoxMDAwNzAwMEM3QkVDNTBBRkIzMDk4QkY0QkM3RjM3N0VFNEZGNzZEOEQKKzoxMDAwODAwMDQzRjk2ODcyNzNGQzNFNzFGOEFCMENDRjFEM0RBMUVGRDQKKzoxMDAwOTAwMDI3MzkxMjY4QjQ3ODUwMUVBQTdFMTc3NTdDNDVGODBGNzAKKzoxMDAwQTAwMEJFMjhERkZGMjA4MUVGN0ZGMDc3RTZGQjQ0N0MwQ0E4QzEKKzoxMDAwQjAwMDcyRTc2RjhEODc2RDA3REM2OEQ2MDdBM0I4RDc1QjE4MkEKKzoxMDAwQzAwMENGMjkxOENFQzdBMzhEMzMxQTNGRkYzNEQzRjc1QTI2NTIKKzoxMDAwRDAwMEM5NDdFRjU0Q0FDQkZEODJGMjI2QjkzQzcyMEFGRDNCRjgKKzoxMDAwRTAwMEVDOTBEMThERkIwRDkzMzg5N0MxMzY2Nzg5M0M0QTRGMTAKKzoxMDAwRjAwMDQ1MURFNTEzRjM3MzBERUFGOThGRDFFQ0MyMEZBMzcyMUUKKzoxMDAxMDAwMDlBREI4NTFGOEUyQUE3RkY3Qjc2RTEwMzBFREYyOTlDRjEKKzoxMDAxMTAwMEU3RTk0QTZGMTFFQUNEOEQ1NjgwMUZGNzdCREYzNzhFRjYKKzoxMDAxMjAwMDc4Q0U0MjNEMEYwMEZDQzRDRjlCM0NDQkUzRTA4OTdDMDIKKzoxMDAxMzAwMEY1ODcwNEZERjI4N0JGQjM3RTE5NEQ5RUVBNUQyQTFDNDgKKzoxMDAxNDAwMDdGNjc3OTVBRkZDNzE0RjQ3QjhFM0U0RTgwRTBBOEE4RTMKKzoxMDAxNTAwMDFBRjI4QUI4MTVDM0I4OTEzQThGRTYyMTlFN0Y5NjIxOEMKKzoxMDAxNjAwMEYyQUFENEY3MTE2MTE3REVFOUYyNjZCQUEwRkZCOUY3NzcKKzoxMDAxNzAwMDREMjY5NjBBMjYxMEYyMThEQTYzM0UwQkM1MDM5QUZBNEEKKzoxMDAxODAwMDc5OUU0OEQzM0E0NjcxNUZGNTFDNjVEMzQwMUQ0M0JCNDkKKzoxMDAxOTAwMEFGM0ZDRDVGODA3OTYwMUIzRkIwMDRFNDU0RjQ5MzJGRjAKKzoxMDAxQTAwMDYwNjhFRjVENzg5Rjk3MUJEMkZDRTMyOTRGNkM1RDU4MjgKKzoxMDAxQjAwMDEzNzdBOEY4RUNGMjA2RjQ2NzAwQkNFNDFGNzA4QUZDMjEKKzoxMDAxQzAwMDRDMTVCRTNBMTc5NzY3RUFGMzI2ODFFRkU4QkM5QzFDRjIKKzoxMDAxRDAwMDRFRDYyRjA3RDE0RTRDNzYwRjkxMUZBOUU5MTAzN0RFNkUKKzoxMDAxRTAwMDJBNjQyRkY5RUJEOTFBMDc5RDlGNjgzQTU0NTk0QUU3QjgKKzoxMDAxRjAwMENERkJDREE1NjhFNzU2RkNBQUQ2ODZGRTg5NzNENzNBMTMKKzoxMDAyMDAwMDI5Q0YyMDRGMEVBRjQyM0JFQjlGRDNGREIzMTA1RTZCNjcKKzoxMDAyMTAwMDc5NzAxRURBQTlGOTYwQTdBMkREN0JFRUUwQkM1MjdGRkYKKzoxMDAyMjAwMDlDQkY3QjFCRkFCQjYxREM2RDU2QUQzRjlCOTk3ODlFRjIKKzoxMDAyMzAwMDc4RkQ1RTlFMDc3Q0Q4RUE5RjhCRjhERDY2RTZGMDA2QzcKKzoxMDAyNDAwMEI2OEFCQzY3RTFFNzRFNUNGRkVBQkE4RjlFNzNCQ0MzMTcKKzoxMDAyNTAwMDQ0NzE2OTU1MkU2Q0QzMzMzRkVBM0Q1NTlFOTQ4ODNDREEKKzoxMDAyNjAwMDM5QzAwN0NGRDMxQkFDRTNGOTFFQTI2QzcxNkFGMzE1M0EKKzoxMDAyNzAwMDRGNjdDQzI5NDE3ODRBRDBEMTNCMERFRjUxODg0OEU4RUYKKzoxMDAyODAwMDc3NUYyRUUyRjBENzhCN0MwQTM1N0ZDQUE4RjhCRThFNDYKKzoxMDAyOTAwMEVERDlCQTlBNThGQzdEMkNGNjE3RjE3NzkxMjc5M0ZDOEIKKzoxMDAyQTAwMDI5Qjc5RkM3REEwQ0M0Mzc1NjU4NUZFNDFGMDFCRTQxMTcKKzoxMDAyQjAwMEZBQ0M4QTBDQ0RDNkYzNDQ4NUJEQTE1OTg4Q0Y5NzNGQUYKKzoxMDAyQzAwMEQ1MTEzRTk0QkFCNzI4N0U5MjhBNjQ4MzcxQzY2RDBFQUEKKzoxMDAyRDAwMDc3NEY0MDNGOEFFRDE3RDcyMjVEREMzREI2MkE0NDVENUIKKzoxMDAyRTAwMDdGOUFBRjkxRTA1MDVBOEE3MTVGNTlGNUFGN0E5RTA3QjUKKzoxMDAyRjAwMDc4MjQ5OUZDMDNCRDc5MEQ5NDA3NzhFMTAzRTM4OEU3M0UKKzoxMDAzMDAwMDQ2RDQ2NzgwQURBN0JDQkZCMTAzM0YyNzNGQkVGNTkwODEKKzoxMDAzMTAwMDM0NjIzRTY3OTdDQkMyQ0YwRDA3ODYyOEJGOENDRDcyNjMKKzoxMDAzMjAwMDEyM0U5NDIzQkZBMkI4QUZEMkFEOTAwN0EzNTNFRkQ1MkUKKzoxMDAzMzAwMEUxMzlBODQwM0IyM0ZGRTVGODVFOUIwRUU5OTIyRkYyREUKKzoxMDAzNDAwMDRCMkVCRUZDNUY1M0ZEQjQ0RjUxRkRGNjQxOUUwRkE0RjIKKzoxMDAzNTAwMDBGNkZDMDdEOTdEMjFFRkUzMkFDNjBENjc4QzhBRTZCRjAKKzoxMDAzNjAwMDJBQzFGMTIyNEQzQ0FGM0Q5OTIxOUZFNDBGOEM1QkZGRTgKKzoxMDAzNzAwMDI1MjhFNzc3RDk5ODg0RjJFN0E1MzVGOUU0MkY4NTc5MjAKKzoxMDAzODAwMDhFMUY2MTlFNzdCQjc4RkU4RTcyMjQ1OTg3N0E0QkQ5NzcKKzoxMDAzOTAwMENBMjhGRjUwQjE2NzU0MTFEQzhGNDIxOUM2NTkyM0Y4OUYKKzoxMDAzQTAwMDQ2OEQ0NzAyQjgyRUQ0NDc3N0JBRkNCQjExQ0ZEMTczMjQKKzoxMDAzQjAwMDMyQUQ0OUZDOUM4QzM4Nzc2OTZERkRFMDU5M0M3RkQyQTkKKzoxMDAzQzAwMDY3RTBFNzBDOEZCRDNDNzkwMUY5RURCQTE1MDlFOTcwREEKKzoxMDAzRDAwMEM1QkUyNERGMDZFRkY3OEI3NTZCNTU4Njk4Q0QxMjhGNUYKKzoxMDAzRTAwMEZGNjM5NDZGMzlGNjA4Q0Y0QjUzRjQ5QzRGOTQ2RUU3M0MKKzoxMDAzRjAwMDFFRjQwQjdFOUFFQUE3QkNEMjZCM0I0MzMyQzVCMzZDQUEKKzoxMDA0MDAwMEE3MUZBOTcxQzdFRDZCQjY3MzNERDJCNDlGRUZBNzEzQjkKKzoxMDA0MTAwMEY3MzE5RkE3M0Y4RUJBQjQ3NjQ5QjRGQzBGQjI0QkRFREEKKzoxMDA0MjAwMDRBRDAxQjdGRjNGRTg0NjlGNzc1ODlGNjQ5RTIzRTZFNzgKKzoxMDA0MzAwMDk4REQ5RDMwREU2ODc2OEE5QUQ3NTExNUZCMEVGMUMzQTAKKzoxMDA0NDAwMDJCNTZENTBFMEE2OEYyNUVBQTJDRTJEQzlCNDkzQkZFRDUKKzoxMDA0NTAwMDUzMjI0RjQ3Q0Q4M0M5RTg3MEI3NjM1RTc5RTREQjhDRTQKKzoxMDA0NjAwMEZDNkM2QTNFNEVBMDhBRUYxQjAyM0ExMzlEODc3M0IxNjMKKzoxMDA0NzAwMDFFQ0FDMzE5QzM0MjkyNDRGNjdGOThDRTc1NjY2MjNFODcKKzoxMDA0ODAwMDBFRjQ3QkRGMzU5NkUwREVDRDNDNUQzMkM5NDNCNzg0QTgKKzoxMDA0OTAwMDcwOUIzMThGODNGMjM2ODMzQjU2RTA3NzZFQjFEMDc3MTUKKzoxMDA0QTAwMENDOThDNzcxMzU4NkUyQkQzQjUwN0VDRUFFRTc3MTg4RjEKKzoxMDA0QjAwMDZDRDBCN0M4QjdEOTg1OUMwRkNEOEI3ODNFODc5QUFGRTMKKzoxMDA0QzAwMEExRTY1N0E4NzhBODEyRjhDRDlFQjBBMjAwRjcwN0RERTQKKzoxMDA0RDAwMDkyRkZGQkVBNzlEQUY4NzNEMkQxRjNEMUFCQzZEMjc5QzUKKzoxMDA0RTAwMDkzRThGOUI5NDIyNkVBQkZEODM5RTk0NDdDQUFGOTFENTQKKzoxMDA0RjAwMDU1MzZCRjJEMkI3REY4Nzk1OTk1M0ZFMkU4NDY3MEVERDIKKzoxMDA1MDAwMDNDQzJFREY1QUE3QTAzQzE3RjcxRDU3Q0YyMjM1RTVDMTMKKzoxMDA1MTAwMEE1NjNCODZFQUEwNjhEOUNERjEyQkVCNzMzN0EwRjQ2NkMKKzoxMDA1MjAwMEQwNENGNzVEMDhCQTdGOUVCRDBBRjQyQzQ2M0ZFREIxNzIKKzoxMDA1MzAwMEI2OUFBQjRGMDM2RThGQjdGOUU4NzlEMTJDRjVDQjU3NEMKKzoxMDA1NDAwMEQxNzlDNkM1Mjg5OTJFNjdFREFDQzU3QjBBMkU1QTIzRjIKKzoxMDA1NTAwMDc5NzhDRkMxRTVFQzA3NkZBNDcyN0FFNDA0OTY1Mzc2RkMKKzoxMDA1NjAwMDFFQkExMUVGM0RCODM4M0VEMjg3RjcxRTE0RUVBQ0U0NDgKKzoxMDA1NzAwMEY1Qzg4M0Q5OEM1RDk1NTU3MTYzODBFNkNERkQ0RUIzOEEKKzoxMDA1ODAwMDYzRTdCM0NCMTEzRjhEMkNCQzYxODhGQzNCM0M3RjFGRTQKKzoxMDA1OTAwMEYzRkQ5MDBFMkU4QjgxRUMxOTk3QzhCMzY0RDUyMkVGMzIKKzoxMDA1QTAwMDEyMjMzMDUwRUVDODJBQTU3OEI1ODVCOTBGMEQ2MTdEQUMKKzoxMDA1QjAwMDBFM0YyNzA0RjVDNEJGMURFM0I5NUZEODI0RThDQTcyMTMKKzoxMDA1QzAwMDU0M0Y1MjM4ODBGMkE5QTNDMDRFRkRBMzcyRjQ5MDMxN0IKKzoxMDA1RDAwMEM4RkQ1OUZDRkJFRjNDM0Y4NUUyNEI2QUZFMjg2M0I2NDEKKzoxMDA1RTAwMERDODU1MzI4REY0NDUzNTZFRjM3NjA4QTJEMTdFRDg1OUQKKzoxMDA1RjAwMDBFQkRCMDRCNDUzOTJERDU1Rjk3MTU2NzE3QkQzM0U3NTUKKzoxMDA2MDAwMDVCMjVCODBFQ0VCRkYwNDAyMUNBQTVFQjBENjBCNzhGQjkKKzoxMDA2MTAwMDIwODc3RTlEQ0RFNUQwNDVCREE1NEIwMjNCRURFNzI5NkEKKzoxMDA2MjAwMEZFREI3MTlDRjc5MjE3Q0ZCNUMzQkMxNkE1NTUxQUVDMkIKKzoxMDA2MzAwMDA4NkZFMEZCMzJDQUM1NzQ0MTZGRkI0MjBFOUZCRERBMDIKKzoxMDA2NDAwMDI3MkQ4NzcxM0JDQ0IwN0VBMTdGQkE1RkYxNTI5RUJENTIKKzoxMDA2NTAwMDdGQTE3NDBCQzBERDIxNzE3OTBCOUQ1MjY5NUY1MkVDNTMKKzoxMDA2NjAwMDRFQzVGQ0U1MDY3MTVFNTIxNkVCN0U0NkZGNTYxOUVENEYKKzoxMDA2NzAwMEU5NzdEQjA2NjYyQTg1MzFGODdFMkVFMkNCM0YyRjYwRDQKKzoxMDA2ODAwMDc3RDY4REIwREY2RENERTI3MjdCODFFQzlFODI3Q0I0M0IKKzoxMDA2OTAwMDQxMUE3OEFCMzYwQkRGQkJFOUZEOUM5NEQ2NzJDQzNCOUMKKzoxMDA2QTAwMEJFM0VCOUE1MUNGNUNGQjBGN0E5RjBCRTI0QUU2Q0U0RjAKKzoxMDA2QjAwMEVEMUE0QzkxM0MzQzlGRUM0REY2QUZDQkMyQjhEMDkyQkEKKzoxMDA2QzAwMDBGMjk2RUY5Q0RFQzc3NEU2MERFQzEzQkZBOUVEOTI5MzkKKzoxMDA2RDAwMEE4NUYwQUM0Qjk3RUUxMzc3QzZEODJFQTM3MzRGMUYyNTMKKzoxMDA2RTAwMDY0RUUzNzhDRTY3MzRERTFGOTY0QjUwQkY5MzlDNTVBMDAKKzoxMDA2RjAwMDkxQUYzMEQ3QzZDRkY1Q0MyRDJGRjA3NDAwODgzN0IxMkQKKzoxMDA3MDAwMDg4ODI3MjZGRUU3QkJFMTREQ0I3QjM4NUZFNzJERjk0MTUKKzoxMDA3MTAwMEQxRUQxOUU2RDJCQkUzRDdFQjNDNzc1QzE5RkVERDUwOTcKKzoxMDA3MjAwMEFDMkRERkU4RDE5NjZGOUVGRUU3MDlGMUU1M0RDOURFMEQKKzoxMDA3MzAwMDFEMzhFRjFGNEIzQ0ZGMzEzMDgzRDk2ODlFNEUyOTgwMTYKKzoxMDA3NDAwMDc2QzdFNDE3QjNDNUY5NEU5RUE3Rjc0RjYyNUZGNEUyOTAKKzoxMDA3NTAwMDc0NDZGNTE5RkI0RDdCMzFGRjVERjUzM0NCQTI3RUIyQkMKKzoxMDA3NjAwMDhCOTlGMjFERkNCRTAwRDQ1NzExNDlFNEZCMzkyOTk2NDAKKzoxMDA3NzAwMEMyNUVCOERCQzZGMTA3NkQwRDMwQ0UwQjRCRENCNDNFNkMKKzoxMDA3ODAwMDMyMkMzQUY2NjU1QzQzRTUyNkIyNDMyQUM2OTg5MjkwMkQKKzoxMDA3OTAwMDZGOEUwOUJFNTNDRkVCQUE3QzU4QTEzMDFGRTYyRkMwNDUKKzoxMDA3QTAwMEE3MTdFMkYzMURCREVEMjhGQTk3MDMxRjMxQzZFOTU1REYKKzoxMDA3QjAwMEE5NTBGRUExRjgxNjYzRUQ1NDdFNENGMEY3MzEwMTUzQjkKKzoxMDA3QzAwMEUwREIwQUFERTc1N0FEMDZBMkE3RkMxMzc5MEZFQTA5RjMKKzoxMDA3RDAwMDhDQ0RBMERGRjhEMkU2NDkwNDlGQkE3RTYwNTUxNzNBNjcKKzoxMDA3RTAwMDMzQzhBNTJEQzY1NTc0MDg0NEIxQjAyNzU0RkU0NjBCMzYKKzoxMDA3RjAwMDA4REI4REMxRkYyQzIwM0UyNzc5MTM5OUM2RUY0RkY4RjcKKzoxMDA4MDAwMDc5MDE5NzI3OTFBRDBFNzExRThDQzdDQjcyNEREMTcxQjYKKzoxMDA4MTAwMEJEMzg2RTU2RjQzQkZDQkM1MTg2Mjg0MzU1NDgwN0YzNUYKKzoxMDA4MjAwMEZFNEQ1NjAxOTdDQjgzQUZGRjgxRjRCMkM1RTNDN0VGMEUKKzoxMDA4MzAwMDE4NTI0Qzc0NEU0NjVEMzdCNkNFREZCRTU1M0IwM0U3Q0IKKzoxMDA4NDAwMDU5RjQwRDlBRTc3Q0FCMERFNzU5MEM2Q0JEQzg0MTRGQ0MKKzoxMDA4NTAwMDZGMUE4REM3RDc4RjlDRTQ3MUUzM0FGOTRBQ0RFMTk5QkQKKzoxMDA4NjAwMDRBMUNERjQwRkY0NkRFM0Y1OURCREYwNUZEMUQ3MUZEMDEKKzoxMDA4NzAwMDUzQTA3RkM5RjBGRTRGNTk0RDIxREQ1NDFDQTdDMjFENjYKKzoxMDA4ODAwMDI2NzkxRUEyQzlDQzE3RjM5MjMzNzhCRkY5MjIxRkI0ODAKKzoxMDA4OTAwMDMwMDVEQUEzQkUyOUQ2RTY2QkIwRTkxRTEzQkZBRjQzMUQKKzoxMDA4QTAwMDlCOUY3MUJEQjQyRTBCRDdENTNDNTNFMzYwMThDNjdCMUMKKzoxMDA4QjAwMDVERDBFRDdBOURGRjc3NzgzRkRERUI4QjhCOEVFMzdBMTEKKzoxMDA4QzAwMEFCMzEwNTE1REMwRkREQzA0MjFCOTA5ODE3MkJGRDRGOTcKKzoxMDA4RDAwMEQ4Qzc5MTNDRjgwQkFFOEIyNkQ5M0ZDMTAxRTVGM0ZBOUUKKzoxMDA4RTAwMDlFQzJCQjBCNjhCRDdDOTYzNTZEMzhCQzJBNUZBOEYwRjQKKzoxMDA4RjAwMDIyN0YyMDlGNDVGOTIzMDFFRTI4OUQ2RUVBQTc0NEI2OEEKKzoxMDA5MDAwMERENjBGN0UwNTNCNTgzMTg2QkUxRjlDNkVFRENEOEJDQzcKKzoxMDA5MTAwMDgwODlFNjlBNUEwQUQxMEU3OUJEM0Q0MDcyRTM3QUZCOEUKKzoxMDA5MjAwMDIzOTREN0Y0RTczMTdFNjczNkMwQjVFOEFBNEZFODVFNzYKKzoxMDA5MzAwMDEzRTY1QTMyMDFFRDdCODAzNzNEM0JGREZGMURCQ0FBMUIKKzoxMDA5NDAwMEJEMzcyQ0RGRjYyMzgzMjZERjc2QjQ3NUE1N0VCNzk5RjUKKzoxMDA5NTAwMEYxRkI2OTY2MEZFRUExRkNEOUU2ODUxNjBGOUU4MzY4NTAKKzoxMDA5NjAwMEM2RkNDRjcyOEEyRjkxMUQ4N0U3ODRFOTlFMTNDOTI0QTQKKzoxMDA5NzAwMEVDQUUyRjlBOTdDQkQ3NjE2RkEzOUJFQ0I3QTgxQzE3NEYKKzoxMDA5ODAwMDc5RTVCREE1MUNFRURFQkJEREVBM0QyN0RDQkU1QkMyMjIKKzoxMDA5OTAwMEY4M0QyOUVBM0QyN0NCNkQ1NEFGRTY5RkY3RUVFMTdFQTcKKzoxMDA5QTAwMEJDREVFNzI3RDA3OTI5QjBERkM4NUU2MEE5M0EwRTVGQzgKKzoxMDA5QjAwMDgxRjY3RTE1RkM5MzMyNjJGOUQyREJGNERDREVEQ0E5MzEKKzoxMDA5QzAwMEYzNTQyMDlFNzc2MjFDRThBRkM0N0ZCRjlBQURGNTlCQkQKKzoxMDA5RDAwMEE4RTU0NEJGREU5MzBFRkZFREM4MTdDQjRCQkM3OTEyRTAKKzoxMDA5RTAwMEYwQ0YzMjAzRjdEQjAxN0ZFREMyQjMxNTM1QUNFNTI5NUIKKzoxMDA5RjAwMEJDM0Y3MDFFNkJGOTg1NkUxQ0YxOTc5RkY4NkJGMjI3NTgKKzoxMDBBMDAwMEZDNUVDMTE4N0YyREUxRkMxNTIwQTFBNEYyNTc5NEFGMjQKKzoxMDBBMTAwMDhBMTNGM0FCRkNBQkIxN0RBRkJERkY1NzRENjhBNzBFOUEKKzoxMDBBMjAwMDFBODkyRTZBOUU1Q0UyM0E4RTgzRTdCNDlFQzNFMzk0RjEKKzoxMDBBMzAwMDY1ODI2N0VENDhGMDdDMTEzRThGRTdBRjRDQzZGOTc5Q0YKKzoxMDBBNDAwMDM0N0VDRjU0NThDMDVBMTZFM0Y3M0RDOUZFNzY4NDNGMzIKKzoxMDBBNTAwMENBRjcxQkY4N0U2NDE4RENCMjg1RjhFM0Q2REI2NDlFMjcKKzoxMDBBNjAwMDNGOUVDQ0Y1MTVDNjJCQjJFMEZCNzVFMkZCQjc3NjczNjMKKzoxMDBBNzAwMDNFQkFENTZBMjBCRUFCMUI2Q0E0N0MyMjU2Q0RFMzBFRDkKKzoxMDBBODAwMDFFRjgxRkRGMDc3QTA5QkY4QjQ0QkY4NUNFNTIzREIyRTcKKzoxMDBBOTAwMEVDQzI1QTZEN0M2MjkxNDU4RDdGRjhGNEI4MUU2RjVEOTMKKzoxMDBBQTAwMEE4M0YxOUFGRUYxN0IxQ0Q5RjYwREVEQjIyOEM2M0E4QTIKKzoxMDBBQjAwMEZERTBCQjhGNjc0N0UzMTgxMzMwOEU3MTVDRUNEMzJGREEKKzoxMDBBQzAwMDAyN0YyM0ZGQkY5QUJFNzJEN0REQzBCNzEzMUUyRjI5NDYKKzoxMDBBRDAwMDQzN0ZDRTlDOEM1NTRGNkQ4NUYyRjc3NjRFQTJGMkFCREMKKzoxMDBBRTAwMDE5NzdEQ0ZCMEVENkY3MTU1MUI5MUEyRjcxQzFGRDQ2RTcKKzoxMDBBRjAwMDIzRUY1RjVDNzFEQkZDMDJGOEVFNzFCMzE4MTdENzE1QkEKKzoxMDBCMDAwMEVFRkI5MkZDQkQ3NUQwQ0UzNTc1NkMxOUU2MjM1NjBCMDUKKzoxMDBCMTAwMEY5NzBGMTZFOUUwRjdGQzM1NTU2OUVFMkI5RDI0RDdFOUQKKzoxMDBCMjAwMEEzRUEyNDUxRkY3NTNFRUU1QkE1RkY1Njg2NzlBOUQ1NTEKKzoxMDBCMzAwMDYzMjM4QkU5M0VDNkIyMUY0RkMyRjI3MUU5OTNDNTIzMEUKKzoxMDBCNDAwMEM1NEQyNjE3NEJBMTg5ODA5RjZBMDc2RjVGNUJGNkZEMzUKKzoxMDBCNTAwMDZDRENDNzU3NTdGMUYyNjQ0RjY1RjczOEFDRDc1RDVBNzQKKzoxMDBCNjAwMDNDRDJCOUQwOUY4QUY1MTQzREY3MjRENkU5OEJERTBGMkQKKzoxMDBCNzAwMEU5OUM5M0NGMjQ3OTcwOEFCRUU5MUZGMjdCODkyQzkyN0QKKzoxMDBCODAwMDBERkQ4RjNFNkY4MTgyN0VEMkQ5NUU5RUI3NTg2NTZBMTkKKzoxMDBCOTAwMENGQzJGREVGNEQ3RTQzMzlFNjlGREE0Q0E1QzdEMUNFREIKKzoxMDBCQTAwMDQ4OUQ1RTM5MERFOTNCREJDNEY0QTg5NzgwQ0ZGRjg1RjMKKzoxMDBCQjAwMEY4RkM5QTRGRjI1MjkwQjkyQzVBM0U1N0Y5QTg0RUU1REMKKzoxMDBCQzAwMEVGNkEyRDFGQzNGQUZDRDdFQ0Y0Q0Y5N0FGQTNGMTMxMzYKKzoxMDBCRDAwMDdDRkZERkIxRkZBMjJGNjlGNTRBNzRCQzg0RjU5NjM4MUIKKzoxMDBCRTAwMEZFNjg3MjAwRkZFMkU1NUMwQzhFN0U1QTU3Mzk5ODE1NUMKKzoxMDBCRjAwMDM2MEVENzVEOEZCQUVFMjIwODg3NDEzNzQ0RTczRUYyQzIKKzoxMDBDMDAwMDI1Q0YyNDNBRjAzODhBRkU1N0UxQ0IwNUQ5QzZDQTg2RUIKKzoxMDBDMTAwMEMzODU3RjhBNkE5NzcxMDg2Q0I2MENGQzJFQUY4NzdFRkQKKzoxMDBDMjAwMDVFRTY4OEMxMDVERjY3NjM1MEVGNkZFMEYwRUM5NjVBMkYKKzoxMDBDMzAwMEI4REMxMDc2QjFCQTNGNkU1MkU3M0JBMDlENkY0NTEyMEIKKzoxMDBDNDAwMDNGRUZFQzQyRkYwNUY2NzM5NjRFRkE2QjcwMzcwQkJEMjMKKzoxMDBDNTAwMEI5RDBFNDdCQzgwODczQjhDNUJFOENGOEUxQUIyQ0YwMDIKKzoxMDBDNjAwMDNDREEyN0M2NTRCRjYzNEMzQUVFQkIwMjQ3QzIwNUU0RTgKKzoxMDBDNzAwMENGQTVCQzAxQTA3N0RBOTgzOEZCNDQ4NTJCMTExRjREMTYKKzoxMDBDODAwMEEzQzhDMzQ0QjgxM0YxMTBBM0NGMTBEOTU3RUFGOUE5RTgKKzoxMDBDOTAwMEU4QkMxMkU2RDM2MUU1RUIzNTMyQ0RBOERFNUY1MjhDQkQKKzoxMDBDQTAwMEVCRTI2RDY5OTIyN0RFOUU3RTNCNDE2RjI3QzJBNURBOUIKKzoxMDBDQjAwMDExQUE1RTU1RTE0MTdGMTFGRjdFQTQxRENGOTBERDM4NjIKKzoxMDBDQzAwMDY2MkNEOTlEMkFERjY0MEFCODBDM0E2OUM0MzhFQThEQ0IKKzoxMDBDRDAwMDYzNzRBQTdGNEU0M0M3QzQ3MzRFMkFCRUQ0QkNBMDQ0REIKKzoxMDBDRTAwMDNDQTk3OTNEQzNFMjM1MDlGMUM4RDFEQTQ5NjAzRjhGQUIKKzoxMDBDRjAwMDcxMENDNzlGMUFFRjcxNDRGRDVDMDI5RkE1MTJDOTNGOUEKKzoxMDBEMDAwMDg3RjA3M0NERjZGMEYzMDlCNUFERkM5QzdDNkQwRDRDMEUKKzoxMDBEMTAwMDAwNzBGRkI2RjAxRkE4Nzg3RUM4RUVCRjhERjM0Nzc4NEQKKzoxMDBEMjAwMDFBRUVEM0JGM0JFRjY5OEE3M0E4RjdDODI1RTI2N0Y5Q0IKKzoxMDBEMzAwMDI4RjgxOThEQ0Y0NzgzM0YyREQ1QjcxMkJGN0I1RTFBOTgKKzoxMDBENDAwMEFBQzBDQTJERTlFMkZFNDFFNjJGQzA3NTYwQjcxNTU0NkUKKzoxMDBENTAwMEEyMUYwMkU0RUE2NzlGRTE2NjBFQUI4MEFFRTUwRTdGNUMKKzoxMDBENjAwMDMzRjJGOTU3OTk2RjBFRDJENzUxRTNENzczRkYzQTIzNzUKKzoxMDBENzAwMEZGRUQ1QUIxREY5QTIzRjRFREE1NUQzMkM1MDdBQUJEOTgKKzoxMDBEODAwMDEzMUY5Qjg1NzZFMjFCN0ExNkE0RjVFRTI1RkRCOTQ2NjYKKzoxMDBEOTAwMEMwN0YwOTlGRDhERUMyRjVFRUNBMzc3RjU0MDEyQjg2OEIKKzoxMDBEQTAwMDRERDhBRThCRERBRjAwRkYyNjA2OTMzNEY3MkI0Q0RFMUIKKzoxMDBEQjAwMEVGRDA5NEE3RjQ2NzZCREE1RjM1MzA1NjUzNUYxQTlBMTkKKzoxMDBEQzAwMEE0QTlCRkZBOEQzMjRENzlEQUQwNEM0REZCNkJERUFCNjYKKzoxMDBERDAwMEQyOTQ2Nzg0RTc2QkRBN0ZFOUVDMDI0REY5REFDOEVENkIKKzoxMDBERTAwMDlBRjZBN0M0QkU5ODA1QkM0M0M1MTk3OEJGMzg5RkVGRDMKKzoxMDBERjAwMDc1OUYyRUQ1RjRGQjZEQ0FEQzM3OTAwRkVGREFDQ0YzN0MKKzoxMDBFMDAwMDk3MkIwMTMzOUE3QjI2N0FCODVERDEwMkZGRTM3NEY1MDQKKzoxMDBFMTAwMDI5ODhBRjE1NjA2RjYzREVGMkNBRUQ1QUJCQTM3RTcwRkUKKzoxMDBFMjAwMEVCMDY5NEE1ODk3OTE1QUI1OTRCMTU1RTQ5OTc5ODU3RjAKKzoxMDBFMzAwMDUxNkQ1QkEyNDNCRUZCQTczMUMyRUVCODg2NUQyM0VFQzcKKzoxMDBFNDAwMDg1RjlBQjc0MkQ2MkUzRkY1Qjc0MzVCQUI0NzQzNUJCQkUKKzoxMDBFNTAwMEI1NzQ0RDJFRDZEMkQ1RUFEMUQyMzU3NUJBOTZBRTc2QzYKKzoxMDBFNjAwMEFGOTZBRTY5MzU1QUJBQTZGQkI0NzRDRDVDQTRBNTZCMzcKKzoxMDBFNzAwMDk2NUY0QkQ3MzFGNTVBQkFFNkI2NjhFOTlBREZBQUE1NkMKKzoxMDBFODAwMDVGNDE2MEI1OTY1RTA5RjQ1NkU1RTVCOEFFQjU5QTc2NzEKKzoxMDBFOTAwMDUxQkFGQkVBMjkxRjY2N0NDRkZEOUE3MTU1QkEwN0UwNkIKKzoxMDBFQTAwMDdGOUNFRTJEOTRBRkZFQjdEMjlEQjEyMEY5NUYxM0U5ODAKKzoxMDBFQjAwMDdFMzY4MURFQTBBRjNFNDJCOTAwNzZDNjM5N0MyRTlBREUKKzoxMDBFQzAwMDIwRUM3OURGQzg3Njg2MkE3RkUyRjU3QUZDQkU3NTM0OUQKKzoxMDBFRDAwMEI5MzQ0QzhGODk3REVDQTg3QTJDNjExRkZCM0U2NkYxRkEKKzoxMDBFRTAwMDkwN0RCNDk5RkMzQ0I3MDlGRUJDOENBRjY2QTAxRkY1QTEKKzoxMDBFRjAwMDA3QTQ5RkRGMDc0MEE2MDM1Q0VGMjNEQ0YwOURGNzkzNzgKKzoxMDBGMDAwMDI2OTM5RkUxMEUxNkQyRDNCREJGOTg4OTA4ODNERTg5NTAKKzoxMDBGMTAwMDg5QzkzMkRFRTdFM0E2RTczMkExQkY5NzBCM0Y4NDM3RUEKKzoxMDBGMjAwMEQ5OUY5MkMzRkQwRkY5MTlGOEREOUMyMTdFRkZGMjVCN0EKKzoxMDBGMzAwMDY5NUZFODlFODI5M0U4ODcwNzlENzIxQUZERjBGMEJDMTYKKzoxMDBGNDAwMDYwRTZGQzcwNDY5NTBGNUVFNjc2QzZFMTZERTk2Qzg5NTkKKzoxMDBGNTAwMEY0MzIzQTdDNzAzRkJCRjRBQjEyQzUxOTk2RkU5RTNGNEIKKzoxMDBGNjAwMEM3RTc3MEJCMzdGMUQ5RDFBQUUyOERFRjg3NkVDODcxQTAKKzoxMDBGNzAwMDkzRkVDRDYxRkRDMjdFNjM3RUNCMzgxQTg3RkJDRDlGODkKKzoxMDBGODAwMEU0Rjc4RjNFMkIzMTY1QkE4MzhFNDkxMTFEMzM0RDFDMUEKKzoxMDBGOTAwMEFFNjdGNUNDODRGODdCODZGOUREODg5N0VGMjgyMDlBMzgKKzoxMDBGQTAwMDc4OUVGRTI0RTQ4N0E1QkY3RjY3MkNGQUIxNjREOTc1Q0IKKzoxMDBGQjAwMDEzREUyRjNEMURCRjA3NzBDQ0Y5NUE4Qjg0N0VERDRDQUMKKzoxMDBGQzAwMDU3OEI4NDdFQTM2MUVGMEZERDJGRTFGOUMyNjg5OUYxQTEKKzoxMDBGRDAwMDc2Rjg4Nzc4NTBGRDczQzUzQTFFQTc4RURDQ0RGNzE3REIKKzoxMDBGRTAwMDRGN0Q5RDkxREZBOUEzMzU1MDE5QzBGODk0MEMwNjA3RDkKKzoxMDBGRjAwMEU2QjFFOEY5NzlFNDFCNzJCOERGMkQ4QjBERDFCREE2RkYKKzoxMDEwMDAwMEVDMzU2MTE3OEFGQkUwNEI0NERFRkIwNTExRTc1OUIxNzMKKzoxMDEwMTAwMEM3QzQzMDRGQTJFNEUwNTEwN0M2NzU1NjAwMkQ4NzUwNzMKKzoxMDEwMjAwMDlGMjk3RUJBNUZBMzY0QzdBQjBFN0VDRkI4REU4RUU3ODIKKzoxMDEwMzAwMEQ4NTQzRDNBM0FCRDE1NzYyNjJFN0YxQ0U4RDgzMjkyMTgKKzoxMDEwNDAwMDFFNUY5M0NCRTNCMzFENkQzNUIzMzAyRUEzQzJGMzYwQTcKKzoxMDEwNTAwMDlCNzcxNkYyODdBQzc4MThDNjkzRjBERTlERjhGQzMzQzgKKzoxMDEwNjAwMDgzMTNFQUUzRDZBRjYyQTlEMTk0RjUxNjFGNUQ2NkIxOEEKKzoxMDEwNzAwMEExQUQ4NUY4NEMyRkVFMDdEQTk4QjNENjE2RkZCQjAxNjkKKzoxMDEwODAwMEFCNzM3NEUyMUVGMjAwNDMzQjlCOEI3QTdDMkE2NzUwNjEKKzoxMDEwOTAwMDNFRkM5MUYxN0RBOEQxMDVFM0M0Q0JCNTdCRjM1OEJDRjAKKzoxMDEwQTAwMDVGQjlBQkNENDdGMDZFOTBGQzdFMUNDNDU4Qzg0MkU2RDkKKzoxMDEwQjAwMDE0Q0M1QkMwQjM5N0YwN0VDN0Y1NkY2MDFFOERDMUJBQ0MKKzoxMDEwQzAwMEQ2MTM3MjhGOEUzN0EzNEJCOTEyMkY5NzFFQzgwMUI5NTIKKzoxMDEwRDAwMDk0MUM5MzRCREY2RDNCNEI3OEVBNjg1QjQ0REYwMzdDRTkKKzoxMDEwRTAwMDMxOEM5RjA1QjJCODdEREFEMUI2ODRERUVCQzBDRTQyM0EKKzoxMDEwRjAwMDdFN0E2NUM3ODRBMzZFQTgzRjAxRkZGMDlFMUNBMzkzNzAKKzoxMDExMDAwMEMzQzVDQUYzNDgzRjJEMTY3QzgwM0VBQjVDRTA5RjEzRkQKKzoxMDExMTAwMEFEN0FFMkIzN0I3MjJENDE1Qzg0RjdCQzNERkUyOERFRTQKKzoxMDExMjAwMEYzNjkwMDVFOTJGRjA2QjhBM0RGMTE3ODMyMDhCOTA0QjQKKzoxMDExMzAwMEZDRTRDM0Y1NjZDODU2QzhGRkVCQjAyRDIwM0FGRDc3MzYKKzoxMDExNDAwMEM3NTNGMTZCMzAzM0JBODdDNjkwNkIyMUJGQ0QxNzg1N0IKKzoxMDExNTAwMEYzN0IzOTA5N0FCRTNDOEZFNEU4M0QwMjJGQUZFQ0UwMjcKKzoxMDExNjAwMDc5NDcyN0VFNjU2NEJGREU3MzFGRjdCRkRERDNDODI4NUMKKzoxMDExNzAwMEZGOUJCNUMyNUY0NThDNkY1NDc5OUQ4RTM3ODFDMENCODQKKzoxMDExODAwMDlFMzYxMDM0NDU4QzNEREM2NkMyOTM1NzJDMTlGRDY0QTUKKzoxMDExOTAwMEUzNjI3NEVDRjEyQTc2NzRDNzZGQUQ3NkQ2RTFGM0UxQzEKKzoxMDExQTAwMEU5QTc3QjUwQUM2Qzk5RjVCQjIxN0NBMjhGMUJCRjZGNkMKKzoxMDExQjAwMDZCNjE0MUI0MzMyOTE2MEJERkI3RDc0MzE5QkU5RjIyQTkKKzoxMDExQzAwMEVBNTNGQ0JDOUMyQUVBNTMxN0YxNzJBRUY3MzlBOTFBMEMKKzoxMDExRDAwMDAxNEI4ODgzRTQ1QTFDRjMwQTUxRUVEREM1RjhCOTVCNzQKKzoxMDExRTAwMDcxRUU3RUI3OTBCQjYzMkM4RUJBNkFBQ0ZGMUFBMzdDRkIKKzoxMDExRjAwMDdDQjVGRTcxNTE5RjY1MzlEOTM1MEVFNUYyNDI2REZGMjAKKzoxMDEyMDAwMDFEMDIwRjk5OTY5MzNEQjMyOTVFQTJBRDU3RTMxQkU5RUEKKzoxMDEyMTAwMDk2NEI2RjUwRkYxMjZERkRBM0EyQkZENTcyNjk2ODM2NjEKKzoxMDEyMjAwMEQ2MTc2QUJGRkY5MEE4NEZCNjcwNzlDODdDRkNGRTU0RjEKKzoxMDEyMzAwMEI1RkUzQkEyREU4Q0Y1Rjg3RDhGQjZCRTVCN0NCRjQzNkUKKzoxMDEyNDAwMDBBMTI3REU4OEU1ODVDM0ZFOURDNUZEQUQ3QzZBRUM1OEUKKzoxMDEyNTAwMEY1RDNEMzE2QTE3NUY0NzBEQkE3NDQyNzA5OTkyQzNENkIKKzoxMDEyNjAwMEI2QUU2Q0FENkNDNEYzRTA5MjkwNjcyOUVFQjBENzNCOUMKKzoxMDEyNzAwMDgyQkM1M0VCMUQzNjdFREU1RDc2MTk4ODhGOEMxNjIxN0QKKzoxMDEyODAwMDJGQzQzQThDQ0EwQkE5QzVDMzk5OEJGQkIxM0Y4RjlGNjIKKzoxMDEyOTAwMDYxODE1RDQxRkIyMjBGRkU5MDlGNzNFRUQ1MzE3RjlDRjMKKzoxMDEyQTAwMERDQ0E2RTQ4NjJGRUI4RjZBRUJCMUM5QTcyQzZEN0IyRjQKKzoxMDEyQjAwMDM1RUQ5RDBCQzc2QUVBMkRFNTkzMzRGNUNDOUI0QkVCREUKKzoxMDEyQzAwMDY1QURFMEFCQTQ5MjMyNERCRDdBMEU5RkY1RTQ2QUVDQjkKKzoxMDEyRDAwMDY3N0RFMTRDNERCQjRCQzU2RUZBRkQ5MDMzRjNENERGMTcKKzoxMDEyRTAwMDE5RjE5ODUwMkVBQ0I1OEVDRDQ0QkRGMzRDREI3NDM0NUYKKzoxMDEyRjAwMEIyRDlCM0IwOUVGMEU4RDQwMTNCQ0YyRjNFODA3MTU5RjQKKzoxMDEzMDAwMEI0RDdEQkJDRjQ3RTFGRDQ4M0U1QzI5RTg0RjVFNjg2QTkKKzoxMDEzMTAwMEY2N0JEQTZDNTQ3RUEyQ0Q0NUNGREQ2RDZFN0EzRURFNzMKKzoxMDEzMjAwMDU2NENGNTNCREEzQzU0N0UwQ0M2QzdFN0EzMzAwRUJFRTQKKzoxMDEzMzAwMDdGQTRBRDg2Q0E1QkRCN0M1NERFRDJCNjg4Q0EwRkI1MEIKKzoxMDEzNDAwMEY5RTlGOTlEQjY3QTdBREZEREQ2NDJFNThENkRBREY0MjcKKzoxMDEzNTAwMDdDQjAyRDQwQ0Y4RUI2MkVBQUJGNDZEMEZCODAzOEM3QkEKKzoxMDEzNjAwMDc4QTA5MjlGNEI0RUE0RTNBQzVDNDk3MzJGOTgzNTk2QkUKKzoxMDEzNzAwMDNGMzAyQjE3RjMwN0ZBQzM5QUZCREQ3MURFMzQ5RTk5RDkKKzoxMDEzODAwMENGM0Y3MUJDM0ExQzBGQkUzQjg5MERCNTI3RjM3NTRDOUUKKzoxMDEzOTAwMDcxQzdGMTAzOUVGNUM5QzBFRjYzNUEzODFEMEEwNjIyRDIKKzoxMDEzQTAwMDU0OUY1NUNGNjk1MTI3RTA2NUNFMDBDQkE5RTBDNzUwQzcKKzoxMDEzQjAwMEIxREQwNTY5QTgyQTk5Qzc2MTI5QkY4Q0I5NjA5RTE1NUUKKzoxMDEzQzAwMEUyN0UxQzYyQkJBMDBFRTE1MkE2NzNCREE5RDIzNTNBRTMKKzoxMDEzRDAwMDZGM0I4NzEzRTczRjEyQkM1RjEzRjM5N0NCRkJGOUZEMUQKKzoxMDEzRTAwMDE3MzUzRDIxNjRGQjI0NkYwQkREN0Y2MTVBRTQwQkUxNkYKKzoxMDEzRjAwMEVGNTczODdEN0UzQThGM0ZFOUQzQjlCMEI5MDEzOUYzNjEKKzoxMDE0MDAwMEU5OTc5OTFCOUUzOTBEREE3RDRGRjY1RDY1OUFGRDg1NEEKKzoxMDE0MTAwMEZDRTlDM0NDN0QzNThDNUJBMkREOUYyNDE1QUVENUY0RjEKKzoxMDE0MjAwMDMzRTVEQ0FGQTkzNzM4RDc2QkVBOTdBRTI5RDhFMDQyNkQKKzoxMDE0MzAwMDdDOEU2MTE0OUYzMTZFNkU2NzE4NTI1Q0RFQkI5NUUwNDYKKzoxMDE0NDAwMERBMjRGMDdFNDE3MkQzNzlERUMwNDEzNTNFQ0ZFREYzMzAKKzoxMDE0NTAwMEVGMDlCREMyNEM5QjY5M0Q0Q0IwRjM2MjUxNkE0MDg3QjUKKzoxMDE0NjAwMDdBRTFEQzhGNTI0OTFFM0RGRDg0MkU4OEZFRDc4OTJDRkYKKzoxMDE0NzAwMEE4QzNGNTNGMTlDQzNEQUM5RjgyMzdFOENBNzRBNThBNTIKKzoxMDE0ODAwMDhDRTU1MkU2OTZCMTdDMzU4QkQwRkUwNEVDRjNGNUI5RDEKKzoxMDE0OTAwMERDM0U3RkMyOENGMUMxNUNGRkY3NzhERTUyODhGNDY2RDcKKzoxMDE0QTAwMDkxQTA2NzkxQkExRkQ5QUUyNEZBNjVCQjcyODkwRkI1QjYKKzoxMDE0QjAwMEU3OTkzQTg1OURERTZFQUZDOEM0QjhFODg1NTFGMkNBOTcKKzoxMDE0QzAwMEFDQUU5OTMzRjE3N0I0QUM1OUQzRTlBOUJFN0ZDOEFEQkUKKzoxMDE0RDAwMDFCRjE5Q0VFRTMwMjVGMkFERjRGMDQyNjE3N0NGRjM4RTYKKzoxMDE0RTAwMENFRTM3Q0Y5QkIxOUI4REQ2QjJBOEMxMEZGNUY5MEJDOTIKKzoxMDE0RjAwMEFFMjU4OEQ3Mzc2NUNFODc4MzU5MzQyRjQ1RTA1NTM5RDcKKzoxMDE1MDAwMDU4RTk1QTAyRjg1M0RFMUVFNzA5QjBEODc3OUU2RUYzMDkKKzoxMDE1MTAwMENFNTQ5NDU4Qjk0OEU0NDVFRTZGQUI5QjU5MURGN0ZFODUKKzoxMDE1MjAwMDc1MDE0RjMxMUJBQTQxRkQ1NDVDQTJGMzA0Njk2NDk3MTUKKzoxMDE1MzAwMDQ2N0U5OTBCN0JCQzc4Q0U1QzI5NjMxRTE0NkYxMzU5RDEKKzoxMDE1NDAwMENGN0FENEQ1Q0E1RjY0Q0E3MzUxOEVDRDYwNkVEODE3NzYKKzoxMDE1NTAwMDU4MkMyMTg2Nzk0MUFGNDdFN0M5MzRCRkFGRjQzQjVCRDQKKzoxMDE1NjAwMDc1MkFERDE3OTgxRDk1N0JBODEzRjFGNzk0ODY5MDdGNTcKKzoxMDE1NzAwMDdFRDdBQkU3RjMzQUE2QUQyRkI2RjBGQzlEMTVDNTg2MzYKKzoxMDE1ODAwMEEwNUJDMkIwN0EwRkREOEJBN0Y0NDkwQzREN0ZFNTJGMkQKKzoxMDE1OTAwMEIzMDkwRkVDODU2NEUyQkZFNEVENTNFOTRBRUQ5QjE0MTcKKzoxMDE1QTAwMEZGMEY5MUJFRTc0M0VFMTc3NEUzMDQyRjQyQkJDNkM5OTkKKzoxMDE1QjAwMDg2QkQ2ODhGNEQ0MEJDRTA4NDBBOEIwOUFGQ0JDNTdDRUIKKzoxMDE1QzAwMEY3QjcyRDIxM0NGRDVBQ0NBMzMzMzcwMTFFRTZGMUUyREIKKzoxMDE1RDAwMEJEOTEyQjdBNTVGRjg3NzY5RTBGOTU1N0REOENGN0VDRTIKKzoxMDE1RTAwMDc1MENDOUMyNTZEMkUyNzM5MzdFNjgyQUZFMzZEREY5QzUKKzoxMDE1RjAwMDMwQzAyNTEzOUNCRjQ2RkFDQkRCMkJFOEY3OTU0MDgxMjIKKzoxMDE2MDAwMEQwRkMxQTlGODBGRDdFMDFDOUEzMUFEMkRCRDM3NDk0NEIKKzoxMDE2MTAwMDlGOUFDODU3QTc4NDFDNkJDOUU1Nzk3RjU2RDc5NzY3RUYKKzoxMDE2MjAwMEUyRUZCQ0M1Q0FCMzg4M0Y5RkQxQjE2MkNBMkZEMUYxRTYKKzoxMDE2MzAwMEZEQTU5QUJGMDE4NjgzMUJGNzc1QTU3OUJBRTgzRDFBMDcKKzoxMDE2NDAwMEYzNTE1RkRCNzU5NEY3MjdFRjQ5QTJGMzg5QjI1REExRUYKKzoxMDE2NTAwMDNDRTM0RTRCQjU2RDM1OEU2MzUzMjhBRTMyNTc5RTM1MDUKKzoxMDE2NjAwMDg0NzZCM0QxQUVCQjFBRURFRUUzN0JFRjFGQzJGQzEyNjIKKzoxMDE2NzAwMDM5NTc2MUU4MkZFQUI0MjlEQ0VFQzhEMTUxM0U5NjYyQjEKKzoxMDE2ODAwMEFGMzY2MTFDQTZDODcyQkExMkYxNzk3NENGMzdDOUJGRTAKKzoxMDE2OTAwMDIxN0Y0M0U0ODgwODdGOTI1RTkwQUM5M0I1RDBGODgxQjcKKzoxMDE2QTAwMDFDNDVEQ0U3RTFBRDJEQ0QxMDIxMDQzN0VFN0Y2QTNFMEQKKzoxMDE2QjAwMDQyM0ZDQTcxREIyNTMzREEyQjZFQ0IwQUYyQTcxNUU2NUYKKzoxMDE2QzAwMDE1RDA3Q0Y0MTg2RjgzRjIxM0VCMkVEOTUxNkVCREI5OEYKKzoxMDE2RDAwMDY3ODNBMzAwRURFN0EwNDIzNjQ4RjE5RjNCQjJFOURDMDcKKzoxMDE2RTAwMEY5MUUwMzlEOEI1N0YxOUExRjUwMzQ3MUJCREM1NjZENjgKKzoxMDE2RjAwMEQ5OTgxMEJGRDMyNzlDNEJDQUNBMkIxMDdBNkUxMTBCRjYKKzoxMDE3MDAwMEM1Q0Q0N0VGRTJGQjM1RTZCNEQwN0VBNzMwNEY2MjlGRjAKKzoxMDE3MTAwMEU5NjJFNTMxQTJCQzVGMUZDOEY2MDA3RThFRUQ1OTkxRUIKKzoxMDE3MjAwMDhGRjNCQTcyRDg0Rjc5QkVBM0Q5RkIxRkU3QkFENURGQzIKKzoxMDE3MzAwMDQzMzJFQkU4N0VENTkwMTlGMzdFOUY2QTYzRTk2OERGNTgKKzoxMDE3NDAwMDk5ODIwQUU1NURFRjEzRjJBQ0QwQzJGOURGOTBDRkY5RDAKKzoxMDE3NTAwMDNDRjE1OUQ4QzNENzlENzIyMDI5OTg4Qzc0QjNGNTk3NjIKKzoxMDE3NjAwMDA1ODA0RjI2QkYzMjhGQjk0MUZGMTVEQUJDRTQzRjJDMEMKKzoxMDE3NzAwMDZDMzVBNDYzRkVDMERDMUY1QTg4NEYyRTU5OTJDODRGQTcKKzoxMDE3ODAwMEE4QjQyNjc5RjA3REM3REU4QTYyNzcxQ0RDQzEzNjVCOUYKKzoxMDE3OTAwMDNBRTZFNUVDNkQzM0E1QTM5QzBBOEUyMjVGQzdEOTc1QTYKKzoxMDE3QTAwMDk0QUZFQ0Q2RjE3Q0JBRjk3OTFDQUVGOTc5RkNCRTk3MEUKKzoxMDE3QjAwMDc5QTJGQ0E0MTI1ODgwNzAzRTA5RjRDNDNDRTlBMzlCQjIKKzoxMDE3QzAwMEI5M0RCQ0I2REQ0NDcwQUM3RDczMUNEOTU1QTNFMUVEQzkKKzoxMDE3RDAwMEU5MzY1NzNBREUwRkJGNzdCMzJFMUJGRDQ3OTVERDg1RkYKKzoxMDE3RTAwMDlCRjA5RTg0QjU1NjdFNEZBQzlDM0FFOTMxNEM0NTY3RTAKKzoxMDE3RjAwMDNGRDUzM0I0REYzQjUyNjY3QTk2QzVDOTc3Mzk3NTU2MDMKKzoxMDE4MDAwMDMxRjI5NTJDMDdCMkQxMkY3MjY3REVGQzlCMzE1RjEyNEIKKzoxMDE4MTAwMEU4QjcxM0NCMkJGQjRBNzlEOTFBQzhDNkZDQ0FFNkJFNzcKKzoxMDE4MjAwMDY5QkM5QzFFRDg4OUY5OTVERkVBOUJDMUNCQjk4MTZDNTQKKzoxMDE4MzAwMEZDMURBOUI2QkU2Qjc5Nzk3QzYwMjc5NjM3RjY1NUYyMDgKKzoxMDE4NDAwMDMyRkE5RTQwNzY2RUU5OUI3MzMzQ0FEOTBFODNBNzFFODcKKzoxMDE4NTAwMDA1RjIwRjAwRkUxMjgwQkY1RjNDQjcwQUJDQThGNUNGQUYKKzoxMDE4NjAwMEUxN0JDMEYzMjFGMTRDQUM3RjQxRjQxQjE4QTVGRTI1QjAKKzoxMDE4NzAwMDUxM0YzOENBRjgyRjhCN0VBMTUxRkExRjEzRkQ4RThGNkUKKzoxMDE4ODAwMEQyRkYzNUQxRUY4RDUxRUE3RjIyRUFERjFBNjVGQzlGNDYKKzoxMDE4OTAwMDg5N0U0M0EzRjQ3RjU3RjRGQkM1MjhGRDdGMjlGQUJENTkKKzoxMDE4QTAwMDM3NEFGRDA3QTJGRUQ3MDlFMzlGMTBFREMzRTJGRDU4QkEKKzoxMDE4QjAwMEVCRTYwRjQyQzA3NzYzNDE4RUEwNUMyQUI2NkU3NkUwRkQKKzoxMDE4QzAwMDNBREZEQjU1NEVGQ0RGNTFDMUUzM0IyQUJGOEZDNURGNUEKKzoxMDE4RDAwMDZGODI3QTVEM0VCRjRGNEE5N0NGRTMzQ0NGODhGMTgxNUMKKzoxMDE4RTAwMDBGQjcyMERGQUQ3RDVCQTYzQzlCMEU5REU3NkMxMEU1M0UKKzoxMDE4RjAwMEU4MjYxREQ5MDM2QkRGRTRGQkYzQjVERDRBMzBGRUZDQkYKKzoxMDE5MDAwMEM1MzMwOUYwNkYxMEYwNzUwQTc4OUZDQ0UzRjEzOUEzNjUKKzoxMDE5MTAwMENCOTU1RTFCRUY0N0IyNjlDQjk4OTY4NTcyMTdFNDM3N0IKKzoxMDE5MjAwMEU1RUQxNjc3NTc3NTE1OTc2MzhDNEM0NzE2ODhEMjY4ODYKKzoxMDE5MzAwMDBBRTE3RDBEOEE1NUU4MDU1Qjc5NEYzMUMyNjc1MUU4QjAKKzoxMDE5NDAwMDlDQkE2MjU3NDJGQkIxQkZBQjlDRUMzQjE1QkU0RThCQzEKKzoxMDE5NTAwMDQyRjc3NUM5NTZBRTA3RTZGRTcwOTYwREVEQUM0RUU2NDEKKzoxMDE5NjAwMDFGRjI2MjdGOTc0MkY2RkJEMUFFMzIxQkNBM0Q4M0Y1NzAKKzoxMDE5NzAwMDJFMUJBRURGNzYzNzlGNTc3NTUzNzExMkNBNkJGOTIxNTQKKzoxMDE5ODAwMDFEQzlFRkUzMzZCRURFRkI1QzNBRjI1QjgwNUVBMUYzN0QKKzoxMDE5OTAwMDJDMjBBRjNEQTgyMzI2QjA1MDNCOUQ4Rjc4Rjg4NTI1OUQKKzoxMDE5QTAwMERDQUZDN0FDQTUxNTc0NUU0NDhENDM0QjRBOUNGRDdGRUMKKzoxMDE5QjAwMDU5RTAyNzVGRTgxMTA1RjUwQjNDOUYyQzE3RTcxQzAyNDcKKzoxMDE5QzAwMERDRkYwNDY0NzM4RDg5M0JBRjc5Mzk0RkU2RTc0MEQ0N0YKKzoxMDE5RDAwMDM4QTI1QzRCRjcxNkU1QUQ1MzM0RkVGNzlDN0JCNTY1M0EKKzoxMDE5RTAwMDQzODJERTUwMTJGNENBQjgyRTkwOTM3MTdBQTcyMDYwMTkKKzoxMDE5RjAwMEQzOTQ0RkU2MDlCRjhFODc3OUQwN0U5REZCQzNDRDI0NUIKKzoxMDFBMDAwMDBGMkZBMTdFOTM0Njk3N0I1MUY5MkJFNEYxOTNFMjFFQjEKKzoxMDFBMTAwMDlFMjcwM0ZDMUNGMUQxQ0Q2NTNGNDE3QUFGRURENkQxQjUKKzoxMDFBMjAwMEJERDM1RjU0OEUzRTkzQzdCODdGREEwRjdBMDdFRDE5QTYKKzoxMDFBMzAwMDg1NjVFMzdFRTlGM0YwMzA1RUVGNzNEMEJEMEE5RjgzRTYKKzoxMDFBNDAwMDhGRjE4Rjk2M0I1MERFOEVGNzJCQTQ3Nzg2RTk4RENGRjIKKzoxMDFBNTAwMEMxRDdCMzkyRTczRDNGRDJEMTlFQzRFRDZBMUI5Rjc3QjkKKzoxMDFBNjAwMDY3ODY5M0RGNDcyNENFMUZDQUMyNUU3QjUwRjhDMTk1QkMKKzoxMDFBNzAwMEQ0Qjk2RUZDODk5MDRFN0IwQjk1Mzc0ODlFQ0MxQkEwNDkKKzoxMDFBODAwMEZENDZDOTZGQzNGMjFCOEUyNEFFNzc3MjkzODgwRkY3QTEKKzoxMDFBOTAwMEEzMkQ0M0Y3MUMxNkY4RDAzRkQyMUYzNEE4RjcxNDg2QTUKKzoxMDFBQTAwMEYwRkYwRTYyN0U4RTdBMEZBMjhCRUMzMzcxMEY2M0VGMjQKKzoxMDFBQjAwMENERDVEODVFQjE0RDQ2OTM3M0RBMTM4RjZERDE4MzBEQkEKKzoxMDFBQzAwMDdBRDBDMEEyRURGMTNDRDUzM0M3NzVFMjlFQzRERDVCOTAKKzoxMDFBRDAwMEQwNUUzRDk4QzQzNEY3NDAxRTQ0M0YzQThEMTdEQzgyRjcKKzoxMDFBRTAwMEY3M0VDMkY3NkU5MDYxMEY3NjdERkVGN0I2NThCMjYyOTAKKzoxMDFBRjAwMEYwNTRCOTBGNkM2OUE3M0M1OUJFMkZCMTMzN0U0RkY3MzQKKzoxMDFCMDAwMDc5NzczODA1OTcwQkVDNEZBRUNBQzc3REY5OUVEMzE5OEMKKzoxMDFCMTAwMDlBREY1RDEzRUQ1MzQ1RkJBNkMxNDhEMzAxMzdCNTlGNEUKKzoxMDFCMjAwMDk2MEZFQkEwNzEyMDkyNTI0MkVCMkI1MjExREYzRTQ1RjMKKzoxMDFCMzAwMEVDRjdFM0RBN0Y4OUM2MUZBNTdEQjEwQUNGODE3NzZGMDUKKzoxMDFCNDAwMDJERTFFRDJCNzFGQzBCRUU3MDA2RTVCQzI0QzA5MzM2NDUKKzoxMDFCNTAwMDdDRkNFQkZGMUEzQzkzNDRGQkYzQTE3N0E5RkQwNTE2MkYKKzoxMDFCNjAwMENFOTg1MjQwRkQ2RUMyN0UxN0RGN0FCNzQyQ0MzQjAzNUYKKzoxMDFCNzAwMEVENjQ5MDhBMzdFMzdCMzRCN0Y4RUZCMUI0OTBGRERDQzUKKzoxMDFCODAwMDZGRUFCMUExQkQ2NkQ2RjdGODUwRUUxNkUyQkQ0RUQzQUUKKzoxMDFCOTAwMDYzQ0YwNUY5ODVEQ0FFNEE3OERGNkY2MjY5QjVDODhGMUYKKzoxMDFCQTAwMEFEM0FEQUJGRjQ5Qjg2Q0E0QUQwOUU3RUQxMDIzMjBGOEMKKzoxMDFCQjAwMEY1QzIzQTBGQ0FDMTgxRjA1QTRGMDlCNEVCQ0I5OTQ1MkYKKzoxMDFCQzAwMEZCOEE4Mzg2OTY3RTNBREZCQkM0NDJFNzRGRkI2QzNEQkYKKzoxMDFCRDAwMDM2NUMzRjY2N0I4RjBERTMwOEYyN0REQzdFNTI5NjVBQzEKKzoxMDFCRTAwMEZDNEYyMTNGODVENjE2MkY4RjVCQkY1NTZFM0RDMURGNjEKKzoxMDFCRjAwMEZEQUE2NTMzRUUwM0JBRjU5RTlFMDk2ODY3NUIxNUNBQjgKKzoxMDFDMDAwMDNGNTc5NjBFQ0VBN0YzODIzRkQwMzE5MkVGMzBBRjJBRTYKKzoxMDFDMTAwMDI4NzczNkVBRThCRUZBODdERDRCRUY0MTNDMzBDNUU3NkUKKzoxMDFDMjAwMEFCODI3RTc5RTk4QTg0RTcyRjFFNTQ3QzI2OEM1RjE4NkMKKzoxMDFDMzAwMDg1RERENkU3RTFCRkY3QUE3RTc3ODdCMDJGNzdFNEYzOUIKKzoxMDFDNDAwMDdCQUJCQTk3MUMyODdFMERGQUY1QjVBRUVEQzdFRjk5QzAKKzoxMDFDNTAwMDI3OUExOEU2OTlGNUU1OUNFOUM2RjNBMjhGQkI2MEM3MDEKKzoxMDFDNjAwMDBCNzhCMDM0RThFOEY3NUExRUFGODUzNkE5RThDRjMwRDQKKzoxMDFDNzAwMDY4RkMxNUNGNEFGREQ0M0VEMEE4QTM3RDgyQTVDNEEwQTAKKzoxMDFDODAwMEYxNkZBNDM1RThCQ0U4NzczQ0UwRjY2RjQyN0VCQkZBMjIKKzoxMDFDOTAwMDZERTUwNkZDOUU2QkJDNjI0M0ZERjQ5MEVCMTcyNjFEQzAKKzoxMDFDQTAwMEMwOTk1MkFFMURENzM2NEIzQjhFQTM1QTVCRUZBQ0Q1RDUKKzoxMDFDQjAwMEQ2NjcyQ0Q0RDZCQkJFNjY0OEYwRDc2OENCMjlDODQ3QjgKKzoxMDFDQzAwMDg4NDc5MDAxMTZEMDQzNDlCQzhBMjU1OUFFRDBFRjg1OEMKKzoxMDFDRDAwMDc1RkI3N0Y1NEM4MDM2QzZFNDQwRTk2QjAwNkZEMkE0MDMKKzoxMDFDRTAwMDI0REFFRjZGN0MzNTA5MTcxRkM4MUY0NjcyNjdFMzE0QUIKKzoxMDFDRjAwMDQ2NzlBRkM3NzJCRkU5NDI3RDlBODg5RkJFMUMwM0NENkIKKzoxMDFEMDAwMEQ3NTIwOEY4MkNDMEZERkE1OUZBNUQyRjBCOEI2QjU3OTAKKzoxMDFEMTAwMDgwRjhGMTNFOTNDRkY3RUZDQzU1ODFGRTM5NDY3MkYwNTMKKzoxMDFEMjAwMDU5RDU3RjdDMEIzRjRGRDVEN0NBRkREMjBGMkRFMjc5MTUKKzoxMDFEMzAwMDgxMzQ4MzBBNUNERkJDN0QwQUZFQ0VEODU0RjREQjc3QTUKKzoxMDFENDAwMEREOERGOThFODk3OENEQzRGQzMyMzlDNjFGMUJENEYzRTIKKzoxMDFENTAwMDJCNzg3QUIyODI4QjY1NUM3Nzk3RENGQ0ZFQ0Q5NzA1OTkKKzoxMDFENjAwMERGMUMxNEY3MkQ0NERCMjNGRTMyMThERkNBQzI3ODZGNjQKKzoxMDFENzAwMEU2QUJGRTA3N0UxRTYwOUIxQThGMTE2NUJDQzYxMENCQkEKKzoxMDFEODAwMDA3OEYzQjZFQzBGNUI0NkRBMUEzMENEN0QzNDY2MTk3MDYKKzoxMDFEOTAwMEE1RTYxOEJDMTMwMURFNDdERTMwMDRBNEFCQTBBQ0IwNEUKKzoxMDFEQTAwMEUzN0FEMEU3MDcxREZDQkI4NjM3OTMwMjc4OUVFQTExRTEKKzoxMDFEQjAwMDU3Mzk5RENGRkEzODlGRkJGMzlFQUJGNEZDQkM5NkQ2MDcKKzoxMDFEQzAwMEEzNDJFN0RGMUU3MTdBQ0M2NURDREVDMEJCQUUxOUE1OEQKKzoxMDFERDAwMDE2ODE2OTcxQjRCNjhDRjZBOThGNzgzRDY2NUNBRjhGQjkKKzoxMDFERTAwMEU0NzhDQzk4OUY2Q0NFNTI2Q0I4OEUxRDJFODVFRUQxQzcKKzoxMDFERjAwMDdBQzRFNEI3QTFEREUyMDAwNTg4QkYxRjY3QzhFRDk5OEEKKzoxMDFFMDAwMDQ3RTc5MjAwODdCQTBBMUUxMjYwMjI4RjBGRjNFOEQyQ0EKKzoxMDFFMTAwMDA0QkVGQTVDNzdEOUYwRkNCQUIzRjBEMEI3RDBBRjlFNkQKKzoxMDFFMjAwMDg2RTNBNUYwN0U4ODI3QkJDMEQzQTU3QzM3Q0Y0QjE2QjEKKzoxMDFFMzAwMEUzQTdEREY1MUNCNUM3QkZDRThBQjhGMTNDOUNCRjBDNEIKKzoxMDFFNDAwMEYzNTg5MDdFMDc0RDdDNUYxRDI3M0EzRUYzOTJERjdFNkMKKzoxMDFFNTAwMEMzNEYzOERFREE3M0Y5RkQ0MTg2MzU4Q0Y2NjFDRjU1MTQKKzoxMDFFNjAwMEZBRjcxRjQ1RkM2NDI1RDEzRTNCREI5NTVEODVGQzkxNkYKKzoxMDFFNzAwMEZEQzZDRTA1NzgwRTYxQzM0RkI4RkUzNDJDRTdGMUE2M0YKKzoxMDFFODAwMDZDODU5OUJFOENGMzRFRjdEQjEwOEY4OUVCMzBFQjc4QzUKKzoxMDFFOTAwMDRGMUQzMkRCRkYwNTQ2NThENEM2MDA4MDAwMDAwMDAwMEQKKzoxMDFFQTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRDU3RDBCN0NENEM1MDMKKzoxMDFFQjAwMEI1RkZGQ0Y2OTU0REIyNDkzNjBGNDI0MjQ4RDhDRDhCNUUKKzoxMDFFQzAwMDQwMUU2Q0MyNDM0NEQ0RTUxMTQ0NDVCQTkxMzcyMkZFMEEKKzoxMDFFRDAwMDQyMDIwNDQ4MjA4MEY2QTZENjlBQzUwNDQ1QzUxQTJBQUYKKzoxMDFFRTAwMDJBNUFENDhEMDJDNThBQkE1NDQwQUNFODVEMUU1QUFBNUIKKzoxMDFFRjAwMDU2RDNBQUI3NTQyQjREODQyQUM4MkI4NkY2NUVEQTdBQkQKKzoxMDFGMDAwMEVEN0ZCRTY3NjY5MkZEMkQ4OUQyREVEQkNGRTdGRUUzNzMKKzoxMDFGMTAwMEE3MURFNjM3QUYzM0U3OUMzOTczRTY5QzMzQjMzQjkzOTkKKzoxMDFGMjAwMEQ4MkQzRTA3NjM0OTEzNkRDQzY1NjdGNEY3NzdGRUJGODQKKzoxMDFGMzAwMDc0MEI1QjY3NEU2MjJDNjUwQUZGNUUxMEY2M0QyRDY1RTMKKzoxMDFGNDAwMDdDN0UwOTYzQTlEMzhERjVEMzU4NThERUNERUIxREVFMDkKKzoxMDFGNTAwMEJDOERDNTMzMzZBMERBNThFRjg5RDhBM0E1Q0M4NDVDRjQKKzoxMDFGNjAwMEQ4NzdGM0I3RTc5QkI1RjY3QjA3OEY2MENDOUY2RUYxMTAKKzoxMDFGNzAwMDZDNzUzMTk2MTkzMTFFNjM1RjQ3MjFBRjMxOTNFQkVGREEKKzoxMDFGODAwMDM5OEM4RDc3MjUzMkQ2MEZERkVCNURCRTYyQzY3NkRBRUYKKzoxMDFGOTAwMDlDMTMxQzI5OEM3NUFFNjQ5RUE3NzlGQkYxMkZBRjlGMTMKKzoxMDFGQTAwMEZCMzZDRkZGNjdBNkMzMTlDNTZCNjUxQzZFNjkyQkUyQjQKKzoxMDFGQjAwMERGRDk1RTdEMzBFQTZGQjZFODRGQzVGMkYyQ0Q0N0ZBNjEKKzoxMDFGQzAwMDMzQkZDNjU4NTQyQ0FCMEY3MjNDRDk0QzRDNDdGQTc3RjAKKzoxMDFGRDAwMEZDNUQ4RDcxQUMzNENFNzgxNzlGRDQ0OEM2NzgxNzAxNUMKKzoxMDFGRTAwMDUzREEzRjlGMDYwNzBFMkM3NDdBRDA5RkJCQ0RDRUZCRjEKKzoxMDFGRjAwMDBENUE5Qzg1MTY5RTFGRjlENEEzMEY1QTMzMzEwRjBFMkMKKzoxMDIwMDAwMEUzMTg5QUI2OTc4RDY2RUNCOTQzN0NEQzAxM0NFNzdGMTgKKzoxMDIwMTAwMEUyQzE4OTE2NUUxRUQzNURFRTQ3Rjk0RTkzNDlFNEZEOTkKKzoxMDIwMjAwMDgxMDcyNzhFNjU2Q0UwQTFFMDFBODc5M0IxOEFBN0I2NzUKKzoxMDIwMzAwMDNGNjhFNzc4OEJGRTk1MjhGN0YxQkNERjAyQkNENDBFMzEKKzoxMDIwNDAwMDZBRTdGMzNCOTBCNTk0RTZERkY0QkIyODE2QzVFQjE1QzEKKzoxMDIwNTAwMDlCM0Q5QjkwNjcxRjQ3QjNBRDNDQkY3REY3RDhEOTJFMDIKKzoxMDIwNjAwMDVFQUYyOTZFOTQ0QjJGNjI2QzlBNEJBM0Y5NTcyMEVEMEIKKzoxMDIwNzAwMDc3RjFCQ0NDMzY4RkVFNzE1Q0ZDRkQ3QTg5MzdDNjNDQkIKKzoxMDIwODAwMDQ3NUEzOTdEOEI5RkIxQjFGQjc4NjEwMUUwMDZCRDVBOUIKKzoxMDIwOTAwMEEzMDM0RjgzQkUyRDhGNzJBNjYzQUNEQTI5Njg1RUJEQTEKKzoxMDIwQTAwMEU3QkVBQ0ZEM0M3RDI1QUVBMkNBQzVEQjU3Qzc0RDRDOTMKKzoxMDIwQjAwMDA1M0MxOTE3MThEMzkzMzlERDFBRUQ0Q0U3QjhDQTQ4MTcKKzoxMDIwQzAwMEY5OTlDNjM4N0MwMzUzMEU4RDYzMEVGMDREREIxQTI3NDkKKzoxMDIwRDAwMEQyRkExOEE2ODdGMTY1QzYwNTBCRDM4N0EzM0YyRkY1NjMKKzoxMDIwRTAwMDg3M0Y3QjJBQjg1MEZDMzUyN0U5NkMwRDg3QzdDRjcxMzUKKzoxMDIwRjAwMEJEMTVEQ0U5OENFOUQwNEFDMEY4MTNCREVENkE3RDY0RkEKKzoxMDIxMDAwMDgzNEZEOUVDNjAxMUI4NEVFMEMxQzY3MTZBMkRFM0E5QzYKKzoxMDIxMTAwMEMzMTI4QUVBQTVGRTZEQjI5RUQ5RUUwODk5ODdGMUQ0NjIKKzoxMDIxMjAwMEY5RTYxMUVBRDc2MTM5REQ2RUVGQTk2NzBGNTgwODFGOEMKKzoxMDIxMzAwMEFDOTYwNUYyMzRDMjkzM0YwQUY5ODQyNENBMzNBRkQ3NzAKKzoxMDIxNDAwMDk1OTIwQUZFNjc4NERDMEMwQjNCMTRDNUM3MjVFRUU1QUYKKzoxMDIxNTAwMEVCMjc5RDg1Mjg3RDgyQTNDNzkxODM0QTk5ODk5RkM1RDYKKzoxMDIxNjAwMDMyN0M2MkUwRTNBNzE5OUIxQ0NFRDcyQTM1MEQzMjExRDEKKzoxMDIxNzAwMDdDQjkwREE2N0VDNzM5N0UwQTBGNDYxMzFDOTY3NTJDQjYKKzoxMDIxODAwMDEwQ0QwN0NCMDUzRDM4REQ3MkQ3QjM4MEM1OEQ3QUI2NEIKKzoxMDIxOTAwMDdFQzc5M0QxQ0UyNUY5QzA2OTYyMzQ1RTcwMjhENkQ1NEEKKzoxMDIxQTAwMEE2MzcxREVCNTkwMkQxOTdFNENFQTYxODU2MDM3Q0E5OTkKKzoxMDIxQjAwMEYxMTg1QjQzRkMxMDkwN0NCMUI5RDE0OTc0NTRFNTAzMkMKKzoxMDIxQzAwMDZCMEY0NEQwMzFDOTQwNDc1NTJGRTNDMjAwQTI2NzRGN0YKKzoxMDIxRDAwMEJGMDFFQTJGQTM2MTE3RjE0M0M2ODUyQ0M5MjdBRTZGNTMKKzoxMDIxRTAwMEU5M0ZCQjhGRkVEM0E4N0RERkZEMEZBNEYxOUYwODdERTMKKzoxMDIxRjAwMDkwMzg5NUEzRTJDNzlEQkIxMjdEM0M4REI2QjZGODNDRTYKKzoxMDIyMDAwMEJERTAzOUUzNTZBMzlDMUNCNkQ3Mjg3NzE1NUVBMkFENzYKKzoxMDIyMTAwMERFOTQwQThFRkZFOERCNEM5RTU2REVERjY1NDc4Q0Y1QzgKKzoxMDIyMjAwMDI2QkIzRjRDQzQ3QUVDQTkxRjRBOTk4NkZBNzVBMkZFRDgKKzoxMDIyMzAwMDE1Mjc4Q0Y1N0RFMzc2NDdENDE3RjA1RDdEQzE1ODJGQzcKKzoxMDIyNDAwMDkyM0U5MUYwNzJCOEZBQ0QwODgzNkI4MjNEQ0FEMDdFN0YKKzoxMDIyNTAwMDc2RTU0NTcwRjU5QjE1MDZENzM1NjlDNkZBRkE5QURFMUMKKzoxMDIyNjAwMEUxQkFCRTIwRUExQkUxNTJGNUJFMzNGQUQyRUE0NUNFMEUKKzoxMDIyNzAwMDYzREFFNEE4M0VGMDJFRUFDRjlBN0Q2OUZEREU1NEYzREUKKzoxMDIyODAwMENERjU2RTY5ODgxQ0M3MkZGNzJCQkVCNkY4M0E0RUM2M0YKKzoxMDIyOTAwMDNGRjgxMjQ4NkUzMDc5QTNGOTNFRUE2NDlEMENFQkE4MzIKKzoxMDIyQTAwMDRCQUVBQjI0RTZBNEY1Q0MxN0JFODY3NUY1M0VGRTk5ODEKKzoxMDIyQjAwMENFRDgxMEI3RUYyQkM4QUYwOTc2RUZCQzg3NzlENTg5OTgKKzoxMDIyQzAwMDcyQkY2MjUzNzg4Rjk3QTM3MzVGRjE4REM1MTdGMzFGQTkKKzoxMDIyRDAwMDYzNzcxMTVDQUY2QUJBQ0U2ODlGQjU3QkI2RjJGNTVERTUKKzoxMDIyRTAwMDk4QzFFQ0U5NUMwRjYwNjk4MUVDMUJFMzE4OEI3NTJCREUKKzoxMDIyRjAwMDc5Q0Q0NTBEODc3M0E4QzREREYzMDM4MkFCMTI2OTlEQzgKKzoxMDIzMDAwMDA3OTIwMENGM0YzQTZFN0ZCNzM3QzlEREFGQTc3RTY0MzMKKzoxMDIzMTAwMEJEOUVGQTAyNEYzNjVCNzAyNUUwRUNBQzczNzhCMDNGOUYKKzoxMDIzMjAwMDdDODAyMkRFRUU5OTk5NTEyMTMzQzdENzM5QUI2MzlENkEKKzoxMDIzMzAwMEM2RTVDQzkxRDhGOTZGRjZFMzc4NzgzRjVFNzdBMUZGRDgKKzoxMDIzNDAwMEQ5QjNBRUJEMUI3OUVENDBCMjZCMTU4N0VGNUM2NUZCNzEKKzoxMDIzNTAwMDI4RTBENTFCQUJFN0JBMzkxQ0I1NzY3RDUwMkE5RkUyNDEKKzoxMDIzNjAwMDk5NEM3RDcwMDJGMEVCNEIyNkJDRjI3RjE0RkI3QTg1MTIKKzoxMDIzNzAwMDVGQzAzMzUxMTNGODRGNEVEMDhCMzFDRTQ0NTNEQjkzQjMKKzoxMDIzODAwMDNFN0NCM0I0OEQ0MjNCRTZFQzQ3RjA5REIxNzE3OUQ3MEEKKzoxMDIzOTAwMENCRkE1Nzc4MTgyRkZCRDk2RkY1N0NENUM5RTdCNzdGRjMKKzoxMDIzQTAwMDQzODJBNzg5QzM1QjlEM0M2QkZFMEE1RUI0RDBFNDRCQkQKKzoxMDIzQjAwMDBEOTkwRDcwNUY4MUYxNkExRDk1ODNEMjAxQjc1NUMyRTkKKzoxMDIzQzAwMDZERUYyN0YxRUVDREZEMjZCODlCMzAxRUY2QjUxRjY4RTgKKzoxMDIzRDAwMDgxQUQ2RTQxNEJFNDVGRjYyNzA2RUVFM0Y5MjhEM0Y5QjEKKzoxMDIzRTAwMDBGMjAzRjNBOEI0RDFFQkU0N0IwQ0Q1Q0JGQjBGMzdEOTIKKzoxMDIzRjAwMEU1M0Q4OUVGMjdCOEZBNjM0RkEyRUZFQkYwM0QyRDQ2OUMKKzoxMDI0MDAwMEI0NEY3QkM0MTQ2OEUyRUQ3REUzNUYyMTNBM0RCM0RDNTkKKzoxMDI0MTAwMEUxMzFGM0IxMkE5OUNCMDZCRUFENjI1RTFCRTBGRkUzNkEKKzoxMDI0MjAwMEI4QkZCREQ2Q0VFNzM3QzdBRDRGQzczQzZFNDkzNjY1OUUKKzoxMDI0MzAwMDdENDA3MEU4ODUxNTlDREZEODU4ODFGRjZGRTMwN0M2QTMKKzoxMDI0NDAwMEQ2OUJEODI4QzY2RTk0RkFDMTQyODlDNzY5Q0M2QkM1QTEKKzoxMDI0NTAwMDM4MzM5ODZFQzVCOEJGMzk2QkYzNDIyRkZEMEQ3NDUwRjkKKzoxMDI0NjAwMDBFRUYyQ0U2QTdFRjczNTg4MEQyOUI1ODg4RUFERkNDOUEKKzoxMDI0NzAwMERBMjlGRkVCRDg5MkNDMDYwRTVGQzVBMzgzRjNCMDFFMUEKKzoxMDI0ODAwMEMzRjBCRTU0RjJDQjJEMjk4MjVGM0VFRjBGQkM2RkVDNDAKKzoxMDI0OTAwMDc3NDlGQzVCQTEwOUZDMEQ3MUVCQUJEREI0NUU1RDI5RjYKKzoxMDI0QTAwMDFFQzBFNDlDMzBEMDE3MTdCNjdFMjZGNjEzRkM2NzcxNjkKKzoxMDI0QjAwMEU2N0REM0ZBNjlFQjhBMkY2MUMzNDgxRTM4RDIzOTFFRjQKKzoxMDI0QzAwMEFFOTFBNEJDQzZCQjZDMEFFNjBCMDk4MkY1RkExREI5MzUKKzoxMDI0RDAwMDVFQ0JDRDBFOTZDMkU5RDJFNjMyMDdBMjM4MkM5M0M3NjYKKzoxMDI0RTAwMEFENENDMzdDN0ZCMTg2RkQ2QTM4QTdERjJGQzY5OTU5RjIKKzoxMDI0RjAwMDEzRDVGNDUyQkJBOUIyQkZBOTAzMjc5RDg0N0VGMjBFNjcKKzoxMDI1MDAwMDBCQTU4Q0UwRURDQTJGRTg4NzEyMzg3RUE2OUE3NzM0QTcKKzoxMDI1MTAwMDczOEQ5QjREMUU2OEZEQjQzRDRDQUU1RDlCQjJEM0MyMjYKKzoxMDI1MjAwMEI4RkU3MjVEQUVGMUZCOTQyMjlFMEY5M0JCNTM5OUE1NEEKKzoxMDI1MzAwMEE3OUNEMzdGM0ZGMDAzQjlDMzVBQ0NFMERGNDdERDcxREUKKzoxMDI1NDAwMDI5RDA1N0Q4NTAzNjU0OUMwRjM4MzVDMkU2RDM2NUZGOTIKKzoxMDI1NTAwMERBNzY4RUI3N0JDQkFEM0YwOTNFNUE5NTc4NzYzRUU5NjkKKzoxMDI1NjAwMDFEMTYzMTlGRTVFRjlBNDlBRkZDQjQ5MTgxRjNEODcxMDQKKzoxMDI1NzAwMEFFMUY3QUYzMTlGQjhDRUIxN0M4OUY2ODRDQTNGNDBCQzIKKzoxMDI1ODAwMEFFMEYyMDNEREQ1ODQwRTU2NzFCM0Q5NEZGRDJFREZCQ0IKKzoxMDI1OTAwMDA5RThCNDYwREQ5NzE2RUM0QkY3NDQyQjdDMEIzODU2RkEKKzoxMDI1QTAwMDRCQkVCQjI3NzNENEEzN0ZFNTc4QkRFNzFEQkUzMDM4OTMKKzoxMDI1QjAwMDNDMzVDMTk2NDkwMDdCNzVFNkE3Nzc0MTdGNUVGREFDNEYKKzoxMDI1QzAwMEU2NDFCRDY1RkJCQzM2MDc4NzY3RTEyMUZENkU5MDc5NkEKKzoxMDI1RDAwMEYxM0JFRDUzMjEyNkVBQTBCRjcyQkRFMTVFQUI2RjM3NDAKKzoxMDI1RTAwMEM2MUJGOUUxRjE1NDlENTdGMEVFRUI3ODMzOTlEN0ZGMTQKKzoxMDI1RjAwMEJDNzEzNEMxNzVCMkQxNEI3MDlENkE5QzRDNjk0Q0I2QUMKKzoxMDI2MDAwMEVGNTVENEY3QjIyRjZEQTg3RkMzOEUwRTRCMDZBRjVGODgKKzoxMDI2MTAwMEVFRDVCQzU4OEY1Nzc5NTkyMEMwRTFEOTY0MTVGMjdEQTkKKzoxMDI2MjAwMDEzOTdFRjU4OUZFMzhBNkY3Q0UyNTYwNkY5QUJCRjgxQTAKKzoxMDI2MzAwMEY2MzM5MkFBQ0E5M0Y5RjdBOUEzMkIyREE4MzdFQjJCNEYKKzoxMDI2NDAwMDJFRDNEQzNEN0NGOEVERUI1MEUwQTM0RUQyRTVDQ0VCOTUKKzoxMDI2NTAwMDFBRTFFOUNDOUVDMkVGNUNDMUZCN0JGREIwOTk5OTM5RDAKKzoxMDI2NjAwMDVDNUQxNzRDMDQ1N0Q3OTE5ODAwOTQ1NjU1NkZENTZFMDIKKzoxMDI2NzAwMDMzRTk5M0FCMzI2RDAxRTA2RkQ1RUVDMkZFRDBBNzRFQzkKKzoxMDI2ODAwMDcxQkFCMUZDOUVGMTRFM0RGRjZGMkUzRDRDOEU5RTRBQkQKKzoxMDI2OTAwMDBBRkVFNzQ3OTA1MzlGMDgzOUM1RjVDRENGMUU4NzFDMkEKKzoxMDI2QTAwMDFCMzhDMDAzQkE5RkI1NzJCRDFDODg2NkY1QjFEOEM3ODgKKzoxMDI2QjAwMDk2REJFNEZBRTI3MjA2Rjk1MzMxRTIxQzNDRUE4NThDQkYKKzoxMDI2QzAwMEYxNTgyRjE4Q0Y2NUVCOTE0M0Y5MkYzQzlBRkQ3RDU3QjgKKzoxMDI2RDAwMENGNzhEQjgzMEIzRjdBOUNFN0NGMDQ0QzdFMkJERjY3MDAKKzoxMDI2RTAwMENFQjBFMEQ5OUY0MzhFNkU3MTc4NzAzRUI4NDdFM0YwNkMKKzoxMDI2RjAwMDYwMUZERDNBODBGMjA1OUEyNUE2ODFGODM5NDBFQkI1RDYKKzoxMDI3MDAwMDQwNzM1OTFBQjhGQ0E5RkREOTYzMDNDMDRGQUY3MjFDQkUKKzoxMDI3MTAwMDhDRTZFNUFGNkU4ODI1RjlGNEFBRDU3M0I0MDFGRDNEQ0EKKzoxMDI3MjAwMDIxRkFGQkM5MEZCRkY3RTk1RUE0MEZENDk1N0QwRjQ4Q0UKKzoxMDI3MzAwMENFNEUyMjdDNTdGRjY4Qzk1MEI0RTdGQjM0NEJFN0ZEMEYKKzoxMDI3NDAwMDNERjdCMjE2OEFFNkVCQjM3OEUzRkVCQkQyMzk3Q0MzMjEKKzoxMDI3NTAwMDM2Nzc5ODA2RjBCNDc0OEJENjg0QjQzMEYzQkFDMzY2NzcKKzoxMDI3NjAwMDVFNkVDRjc2MTExQ0MzNzdCOENEMTk1ODU2MDMwMjFGODEKKzoxMDI3NzAwMDVENERGQkI3NzE1RjJGREFGOEU1NzgxQzJGRDVGRTNFNzMKKzoxMDI3ODAwMDU0MEI3RUQxOEFGMzcwRDY5MTMyOURGMEQ3NDJGREVDODYKKzoxMDI3OTAwMERFMzdFREZEOUIxOEU2QzEzNTA3QzA1RDY5RjNEMDdFREQKKzoxMDI3QTAwMDEyRjBCNzgyQ0U2N0Y0MDJDRjdENThEMzNFRkY2M0EwMEMKKzoxMDI3QjAwMEVGMTkzREQ1ODNGRDY1OEZDOTFGM0YwNkY1OEY1QTY4MTgKKzoxMDI3QzAwMDlFMkY2RkY5NzVCQzk1RTcxMzc2NTk1OTM0MkZBRjJCQUYKKzoxMDI3RDAwMEVEOUM4NEZBNzU5OTJFM0E4NzY3M0U3OUNENjRFMDY3NUYKKzoxMDI3RTAwMEY5QUVEREFERDQ0RkFERERBMzYxOURFRDNFRkY2NjA2RDQKKzoxMDI3RjAwMENFNDNENzMyNEYxRUY4NkU5N0M4REYzRkQxRUIwMUJGRjMKKzoxMDI4MDAwMEQ1QjRGRTU5RTREQjdDOTRGNzk5RkQ2RTBCRUE1NzA5QzkKKzoxMDI4MTAwMDNERTc1MUI5OEZCMUY2MTI5Mjc3QzRDQUFFMUU3QUREODgKKzoxMDI4MjAwMENGOEI1MUJFQzlFRDRGQUY3N0Y0RUM3RjdDREYyQUNDNjQKKzoxMDI4MzAwMEU2RTVFOTM2RDlERTM5MkRDQkY3MEZFQzVCMzZCOTBGN0IKKzoxMDI4NDAwMEE5RkUxRUI1MzE3RjM0RUYyNzkzN0ZEN0IwQUZEQUM0MkUKKzoxMDI4NTAwMDdFQkI5NUNCMTdGMDhCREE2RkY5Qjg1NzY0OEJGNjVFQjkKKzoxMDI4NjAwMEM4QzkwQ0JFQjk5NkYyRjk2NDNDMUExNUEwM0RGRDEyMTgKKzoxMDI4NzAwMEM3NTc3QUQyOEExODIxQ0Y5NEZFMzEzQkI5RTlCNTc2OTEKKzoxMDI4ODAwMDhFRDczRkM1RUJENzYwN0UwQkU1N0VDRDJDOUUzNENDM0EKKzoxMDI4OTAwMEVGNThCQzc3MzJDNkFGQjU3NzY2NjEwRTdDM0Y5QzgyM0QKKzoxMDI4QTAwMEZDNzIzM0Q3OUY3MkMyRjQyN0ZCQTVFRDg3NTEwOURFNzYKKzoxMDI4QjAwMDFCRDFGRTUyRUI4RjhERTk1REZFOEVFRDFBNERGMkY3QzYKKzoxMDI4QzAwMDM1Mjk3RjU3RkZEOUM0NEE3OTdFRjVDMzUxMjQ0RjY4MTMKKzoxMDI4RDAwMDRGRUIwNTJGQUZGMUY1QUU3M0Y5RjJFRkIwMUJGMEY0NEIKKzoxMDI4RTAwMENBM0ZCNTlCRTlGQzcxQzg1NEZCMjZERjRGNjlFODZDMTEKKzoxMDI4RjAwMEZDNUY2NzUzQzIwOENBN0I0MUU2QUJGRTY0RUFGNTdDMjUKKzoxMDI5MDAwMEE4NTI0RUE3N0FDQ0NCRkI5NUQxREU3MEY1NTc0RTFCNjMKKzoxMDI5MTAwMEY1RUY0OEJBQTRGOTlBRkI5OEFGMzk1RUNDNzcxRkU2NzkKKzoxMDI5MjAwMENCNjlCN0ZBQ0IzMjkyOTdGQjJFNzE5RTk5NTFERTM1NjcKKzoxMDI5MzAwMEEwNkZFNDNDMzhEQ0Y3RTA3QjI0RENEREZDREQ3OTY5NkEKKzoxMDI5NDAwMDcwREZBNjMxQkYwOUVCRUM0QjVCMDBFQjZDMUYwNzEzOEMKKzoxMDI5NTAwMEVCNzZERjkyQTIwMEQ2RjMxRTlCQzhGQkUzNkRBNDdGNEIKKzoxMDI5NjAwMEVFOEI2MzdFQzg4RjdEMTVBOTAxQkYxQjcyOTAwOUZEOTgKKzoxMDI5NzAwMEI0MUYxM0U1RDFCMkZEOUM1NDZBM0YyMDhBRjMzRkNGQzgKKzoxMDI5ODAwMEIzOUI2MjY0RkZGNTZGMTdBMzdDNEQ4Njg3NDNDMEY1NDgKKzoxMDI5OTAwMERCQzBCQTZDRDI2RkNENjQzNzNDMjJFNUY1QzZDNEQwM0IKKzoxMDI5QTAwMDRENjZGRTdERTM5N0Y5MENFMzFDNjFBMThDMTVBODU3RDkKKzoxMDI5QjAwMDEzNDM3MjY4NjNBMjM3M0Q4OUUzNzFDRkQ3NjZEQTE3OTQKKzoxMDI5QzAwMDM2OTZGMkJDODNFNDM0RDk3NzM2NTY3OEQzMTM3OTdFQzEKKzoxMDI5RDAwMEFFQTRDQkM2RDZDMEQ2NDdEMDVGNDU4MUM3Q0ZDNzE5RjYKKzoxMDI5RTAwMDYwNjZGNTU0Q0YyREZBRjlDODJBREFGRDRFRDI4NUFGQ0MKKzoxMDI5RjAwMDYzNUFFN0VGNjcyRjA4MDFDRkZBRDQ1ODBCRUMyMjFDN0IKKzoxMDJBMDAwMEUzRTkxQTg3RkZGMUVBM0M0NkYyNTJEQUJENjY0QjFBNTcKKzoxMDJBMTAwMENDRURFMTAzQUY3RDE0RjQ1QUYxMzc2N0UxRDY2OEM4MTUKKzoxMDJBMjAwMEUzMTkzNUQxNjQ5NzNBNTI3MzU3OUM4QjhGMzc0MzM3RUMKKzoxMDJBMzAwMDg3QTJBMEZGNEQyRjM3RDg5RERFQ0ZGNkQyQjhGQzYwMUQKKzoxMDJBNDAwMDIxQ0YwOUExMkFFMEYxRjU0RTNCODM1Q0VFOEI5RTc1MDgKKzoxMDJBNTAwMEMxNzFDOUM3QzNGOEExQzYyNkU0QzcwOUE5MEZCRDEyMzEKKzoxMDJBNjAwMEE3QkYwQjdFNUZCMUY3REFFNEUzNjFGQTVFRjVDMkYyNkQKKzoxMDJBNzAwMDdDQjJGQjU2NUZEQUY5QUUwOTc0MUE0NkVCRDU2RjAyRTkKKzoxMDJBODAwMDdGMDRBMzg5RkU5MzZGQjQxM0JEQkIxQ0E2QTc2MTk3RjcKKzoxMDJBOTAwMEJDNDVDQUFCMjYxQzg0RjlGN0E2REQ1MTgxQkJGOEI3NEIKKzoxMDJBQTAwMDE1NTFBMTk5OTA1NzlDRkVDRjZFMDM1RDVGOEIyNkZBNUUKKzoxMDJBQjAwMEQ3REEwNDNGRDVGRUJDOTBGODZCOEZDREVCNUU4QkZFNzIKKzoxMDJBQzAwMDVGOEYyMkJBRDdDNkJCMTJBOEZDQUQ2NDI2Rjk4RkY0N0IKKzoxMDJBRDAwMDg2REE5ODUwN0UyMkM3RTdCQTU4RkQyNEYwQzZGOThFRjAKKzoxMDJBRTAwMEVDQzFCNTM2RjFGREE4RTRBQkEzQkMwRkMwRTFBRjhGREMKKzoxMDJBRjAwMDIzN0U2NDMyQUY3RjNGOTlDRTUzNUMxRjI1RkVENTFGRTYKKzoxMDJCMDAwMDJDQTRCQzZFRjNBNjJGQzRGQTU4MTU0QkYwMUQ5NUY2RjUKKzoxMDJCMTAwMEI0QTNCNTg5QzRERkYzMUU1Q0Y2MEVFM0Y0M0NFQURCMzQKKzoxMDJCMjAwMDc2NkYzRUFGNzc3NDlGRDU4MzdERTlGNzBERTY5MDhEODQKKzoxMDJCMzAwMEQzRjVFQzFEQzc0NjZERTJGOUY2QkIzRUNFRDJDM0VDMzEKKzoxMDJCNDAwMDY4RjNFRUFBOUI4Mjc2RjM5NkRFMzExNUZCNjU1RkY4OUIKKzoxMDJCNTAwMDlFNTcxQkM1NjU2RTBGOUQ1MjcyQkNFNjFDOEU3RjRGNDMKKzoxMDJCNjAwMDhFNkVDQkUxRjM1QzUxRDRCRTA4NzJFRkFDQURFRDQ5OTMKKzoxMDJCNzAwMDlDMEYzRTRBRDBBM0YxRkREQzJCOUY2RjIzNzk2OEU5QkYKKzoxMDJCODAwMENDODc3RUJFRENDMkY5MDA3QzI5RjdDRjE1OTIyRjVGN0YKKzoxMDJCOTAwMENDRDExMzUwOUZFMzhGRjRGMUQ4QTIzNjIxRjdFRUI4RDEKKzoxMDJCQTAwMDM0MzlGRkM1QkVBRDdCMzQzRUNFQjI5ODdEQ0IyOTM1REUKKzoxMDJCQjAwMDA3NEFEMENGMjkyRDE0QUZFNTAwN0Y1QzhGRTNGRDlENDAKKzoxMDJCQzAwMDc2ODZFMjQxMDc1RDlFOUI5NjZEMzdDRTBCN0ZCMEFCNUMKKzoxMDJCRDAwMDJDQzMzRjc4QkI2NTQxMzNEOTU1RjhGRTZFMDNGQ0NCNUYKKzoxMDJCRTAwMDYwRTkzNUY4MTM4NDVDRTFGRDNDNERFQkQwRjFGQkY5NzUKKzoxMDJCRjAwMERGRTdGODVGRkFFQzkwMzJFODkzQ0IxMkY3RkVGMDBBQzkKKzoxMDJDMDAwMEFBQzdEQjI5M0UzNzVGOUM1N0YzQjkxODFFMzFCRkQzRTMKKzoxMDJDMTAwMDkyQ0Y0RjMzMjkwNzY3REJCQUNGRTFEMDgzQ0UzRURGQjcKKzoxMDJDMjAwMERGQzAzNzY3OUYxRDQyRjkyRkI0NEUyRDg2QzM3NTU2RkUKKzoxMDJDMzAwMENBMjNFNjA5OEVBQUMwMDFDMjFCMUMwNTdERjYxMUY5NDQKKzoxMDJDNDAwMDdENTk3MjcwMTRFNDhGOTI0N0NDMUUyQ0ExNzM3NTQxOEMKKzoxMDJDNTAwMEIwMDRFNzQ5MjVDRjk4MkY5ODRGREYwM0MxN0NCNERGM0MKKzoxMDJDNjAwMDYzMTI3NjBBRkFDM0JDOUZDQjY4MjUzQ0Q4QzU3QTVDNTAKKzoxMDJDNzAwMEZBNUMyMUUxNDU4RDEzNDlCRkM4Rjk0RUNEMTFGRTAxMjMKKzoxMDJDODAwMDBFRUYyRDNFNUU3RkYwMjY5QkExN0M0OEMwOTg5RjI5QzkKKzoxMDJDOTAwMEVCMEY4QUEwQ0IwMDczRTdGRTI4QzhGQjY3MThBREQ3RkYKKzoxMDJDQTAwMEM4NzE2RkNFMTFGNkY0OUZGRUI0OUIwRTY2Nzk1RTY0MTgKKzoxMDJDQjAwMDJFNDU3Rjk3RDBCN0FEQzBGN0VGQkFGMTdENkIwNjk3ODEKKzoxMDJDQzAwMEE3Q0IzMEM3RUM5RUY5RUYyOUQ1MzMyMEY3Q0Y5QTg0RjQKKzoxMDJDRDAwMDlEN0E0RjIyQ0YxNzQxQ0YxMUY4NTQ3OTg1Qzc0ODNFQ0UKKzoxMDJDRTAwMEJBRUI3NzhCMzJFMDRGNTk5N0QzRURFN0U4MEY3RTZCNjUKKzoxMDJDRjAwMDgyQkNFNEYyQTJDOTJBRjBGMTQ1NjNDREYwRTMxNjlDNTAKKzoxMDJEMDAwMDQ3RUJEM0FCMkQzREYzNTlCNEE5RDQ4RUY1QjI3ODczMEMKKzoxMDJEMTAwMEE5N0Q0MUQ4NzlBNzY5RkJGMEMzMkU0RTk3RDNEQjJENEYKKzoxMDJEMjAwMDY0MzY2OEIyMDQ3RTA4M0RCQTY5QkIzOUU4Njc1NDZFMDAKKzoxMDJEMzAwMEY3RjJGQUE3MUQwN0RFNDVCRDQ1OUIxM0NCQTBGN0FBMDYKKzoxMDJENDAwMEY2OEIzN0REOTY1RTFEODZFRkMyRUQ0NkZDMTcwNzhEQ0MKKzoxMDJENTAwMDc5RDhBM0MzRjMzRjgyMkUzOEYyMUY2RjU3MUEzMkU2OTkKKzoxMDJENjAwMDg3MUYzNkU2M0ZGRkUwRDY5OTYwRTM5NzQ3MEI3RTNGMkIKKzoxMDJENzAwMDExODgwQkMwNEY1NUYzRjFBNEMzRDhENzRFRUM3OTM5NjUKKzoxMDJEODAwMDFFRjQ1OUY2NDlGNTlCMzhCNzJDREU2NEU0MzM0RTM3MTAKKzoxMDJEOTAwMDBEN0FCRDdGOUI0NkZDQjEyNDEwQjlFRUU0N0FCRjY4ODIKKzoxMDJEQTAwMDNEQUU1MTc2Q0Q4MjcwM0U4OUE0RTcyOTE2OUNFOUU1QjcKKzoxMDJEQjAwMEZDNTREQkIwNkEzOEZDMjEzNTUzMzhFMzcyNzgyRTBGQUYKKzoxMDJEQzAwMDZFQjBDMTZGMTAzOTVFNUZFQjlFMzlCQzJFRDhBQjJBNTYKKzoxMDJERDAwMDQ3OEJCMjMxMERFM0Q5MzExODdERDdGRjdBMTJENjVCMUMKKzoxMDJERTAwMEU1RkQxQUVERkY5NTJGMEQzRTA0RjlEREIxNzNDRTc1QUIKKzoxMDJERjAwMDk0Q0U5QzRDNzg1MEY2QjNDNUZCQjQ1MDFDQ0YzQjQ3RTcKKzoxMDJFMDAwMEJCRjZCNkYzNzYwQjAzMUFFRDBGMEI5QUEzN0FFNDEwMTgKKzoxMDJFMTAwMEZGNUZGNUZBMDgzODM2ODY5NTczRjgxN0VGRERGRjE3NzAKKzoxMDJFMjAwMDhERjc1RkIzRDlEODZFMDlDNzE3RTRGRUQyMkQ3RjhGMTcKKzoxMDJFMzAwMDBBRkZBRUNFN0Q2M0Y2QjU5QTMxRUY4NTBBN0VGRjU1NjcKKzoxMDJFNDAwMDBDRjMxMjJFNDgyRTNBQTRCRTcyMUMxOTJFRUZBMzkyMzgKKzoxMDJFNTAwMDdDNkREODVGQzY2QzE0RURCOEMwQUFDNDdDRUIxQzM2ODAKKzoxMDJFNjAwMDE3RTY1QjY3NjdBMTU4MEVDN0UxMzg5QkQ3QzlCRjlGQkMKKzoxMDJFNzAwMERGMTQ0N0Y2QTk0NTUxNUMyRjJDQTM5NDQ1OTdBMTlEREIKKzoxMDJFODAwMDg3RjZFOUNGREUzMzkzQkU1Mjg3QjFEMUNGNTMxQTlENzcKKzoxMDJFOTAwMDdGRUE2MDZDNDRGRTE5OTE1RkMyNDIzNDBGRjA4QjM3QjkKKzoxMDJFQTAwMDdDN0UwMTYzOUVCNTg4NzM1M0FEMjVCNDFGRjg1OENBNjQKKzoxMDJFQjAwMERBQzVCOTg3RDNEMTFCRTY4RkFCRTVGMzNDOTIwNDdEMkQKKzoxMDJFQzAwMEM4RDg3RTA1MEI1MkZEMTU3QkZGMUUxNUZFM0RDQzRFNkUKKzoxMDJFRDAwMDRBRTczOTc1QUUzNERCOTgxN0ZBQjFGOUNFMThEQUVGNTQKKzoxMDJFRTAwMEI5MjA4RTAxN0ZBRUQ1QkM4RkQ5Q0Q0OEM1QkNGQzFCQTcKKzoxMDJFRjAwMDg0RkUzM0I3NTVFQzE3NUMzRkNEMDc3RTM2NkUxOEUyODMKKzoxMDJGMDAwMDgxOUUzMjk3RUJEOUQxRDAyMzk2QzQ1MEJEOEQ4OThDNDgKKzoxMDJGMTAwMEVDMkIxQkU3RTQwQjNERkJFQjk3NDIxOEE3RjM2MThEMEQKKzoxMDJGMjAwMEVDMjMxQjRCNDVCRjFCMUYxODQyRTU5MDg3MUE4RDEzREUKKzoxMDJGMzAwMDQ1N0FDQkM2MEE1NTlFNDk3QUQyNDcwMDJEMUQ3QUFFRjYKKzoxMDJGNDAwMEZDREVDRjQ1REYwNzk4QkRGOUQwRDdEOTQzRDE3NERFNzkKKzoxMDJGNTAwMDU3N0FFRDMzNDk3QTdDNkVCRjlFRjkyQTNEOThENTVDNEQKKzoxMDJGNjAwMDlBRkVCNzU1RUU3NzlEMUI4NEZGRjdCOEU2N0JEMzE0MjYKKzoxMDJGNzAwMEE2OTcwRUNBMTVGQkMzQThGMURFNkRCMjFFRjkwMUFBMTEKKzoxMDJGODAwMDREMTVGNzVEQ0RFMUE5N0VDNEU0NkE3MkY3RTA5RDc5NDUKKzoxMDJGOTAwMEJERjk5OEZGRjEwREQxNjVFMEIzNTFFMzg1QkRFNzY4NTgKKzoxMDJGQTAwMEE5OTBEQkIxMjM5ODM3QzBEMzgyNUNCMTdGMTRFNDlBMzcKKzoxMDJGQjAwMDBDNjk1QTBDRTczRkRFQ0ZGMTcyNjExRjhFMUJFMTIzRDMKKzoxMDJGQzAwMDNCMUJEN0Q5NDg3RTQ3Q0U2Mzg0ODRBRkRBRTY3QkVCRTAKKzoxMDJGRDAwMENBNUVFMEU5RTY4Mzg5NDJDRjM4QkU1MjdCNUFDMEM1NUIKKzoxMDJGRTAwMEU5Q0FGM0EzN0UxNDRERjZCOUUzNzI1RjUxRjhFNzdDQUEKKzoxMDJGRjAwMDMzOTJGNjY5MjlBRjM2NDgzRUQ5MDBGQTYzM0Y1QjIyMjcKKzoxMDMwMDAwMENFNDEzRDdDNjJFNDgzQjk5QUMwMkI3QjQwRThBNzFCOEMKKzoxMDMwMTAwMDEzNDU1RUYxMDEzRkVGQjBCRjgyNEZDQTE5RTFCREFGNkEKKzoxMDMwMjAwMDczOEY5QUU3QzY1NjUxQ0VFOTNEMDVGNDhFM0NGNzI4REEKKzoxMDMwMzAwMDdBMzM0QjYwMjRDRThEN0REMTdCQzFFOEM0NTE5QTg5MEYKKzoxMDMwNDAwMEZDRDY3RUY4QURCMUQ3MTE1RUVFQjUwNEVFRTI3MDBDQTEKKzoxMDMwNTAwMEI0MDhGQzY3NUEwNDdGNzFBOUVDOEYyOUEzRkE1RTFCQTAKKzoxMDMwNjAwMENGNTczRUI0OTg3OTc5RkRDQTBDNDZGNjIwNUU5RjI1NkQKKzoxMDMwNzAwMEEwM0VFRjA2NzEyQ0Q4MkJEMEFFMzI0MUY0NUJEOTlGMjUKKzoxMDMwODAwMEQxMzk4MUZFQjhCQ0NBNDU5QTRERkQ3QTRENDlBMjdEMjEKKzoxMDMwOTAwMDdDMTlCNUY3OUI0NDdCQUY4NUE3ODM3Mjg0M0VERkI5NkIKKzoxMDMwQTAwMDM2MkFGMDM0RTRGMzNEOTlGOUUwODMyOUUzOEQ3Q0YwOEUKKzoxMDMwQjAwMEVGQjk2MkJGNTdFOUQwM0M5NzM0MkE3OUQyQjBCRTE3MzYKKzoxMDMwQzAwMDM0MEZBMUZEQTIyOURBNTdCNzFCNzQ3QjVFRThGRjk1ODgKKzoxMDMwRDAwMDc3REY3Q0MzNDhDMEY3NDJCMjA3RTA3RDMxNzUyN0Y5M0UKKzoxMDMwRTAwMDFCMTYzNENGQjlFRDQzOUMxQkI2NDdEM0Y3NkJGMkY0RjQKKzoxMDMwRjAwMERCNzM0NzQyMEY3NENEREZDRDNGMkM5ODcxRDA5NkM2NUQKKzoxMDMxMDAwMERCRUJDMThBMzMzRkU3RTk1NEZGQ0U3N0ExMEY0QzlEM0IKKzoxMDMxMTAwMDZFQTZGQTUzOTlCMDhGQjI2NjMxQ0UwREZFMkYyRDY5OEYKKzoxMDMxMjAwMEJDQkYxQkM2NkExNDMzRDAxMUVEQ0M1QUM5RTFBRjk0QjEKKzoxMDMxMzAwMEY0QkI1QkYyNkY1MzM0OUJGRDMzMDdFMENBQ0NDRkU2QTAKKzoxMDMxNDAwMERGNkY4MDg2RDk4QkZGRUE5MEFBM0Y0RURCMENCRDY2MEQKKzoxMDMxNTAwMEQwMDRCMUJFNTQ3REY0ODM3RURGOTJFQjY5ODNDNDhCQ0YKKzoxMDMxNjAwMENBNzNCQzUyRkRFQTc1NTExRDM5RjE0OEFEQTFDMTNDOEQKKzoxMDMxNzAwMEVEQ0MxRkZGMzBGODZBNEEzNjlCQjQwOTc4RkY5RTE5RTAKKzoxMDMxODAwMEIxMEExQ0RFQ0U0QTVBRjc3MUY5MkVGMEE5Q0U1ODg4NDIKKzoxMDMxOTAwMEUyMjMwMjQzODhBRjNCQzY3NTc2RENDM0YzMURBRDgzRTMKKzoxMDMxQTAwMDNENjRGMzkxRTdFODg1Mzg1RkI5NTAyRUU0OTg5MjJGOUIKKzoxMDMxQjAwMDQ3OURFRDcxQzRBRkYyNUM1RDI1NTlFMzhGMEQxMzFFODEKKzoxMDMxQzAwMEI5OENEN0FGNzJEODNBQjAxRjJDN0M3ODVBM0NFMjRDRkQKKzoxMDMxRDAwMEFBMzY5QTQ1M0NDNzdBRTNCOTlBOUY3RjVGMDQ1RDIyN0QKKzoxMDMxRTAwMENGQzk5MUU3NjFGMDBDRjhBODdBQkQ0NjdDMzhBOEM5MzAKKzoxMDMxRjAwMDYzNEIyNzM5QTYzOTMxQkY2QTQ3MjgxN0YyQkREQTEzNjYKKzoxMDMyMDAwMEVENDFGOUU5NDY2RkYyRjE1Q0Y4MjMyNjUzQ0FCRUUyQkMKKzoxMDMyMTAwMDc4MUYwNTdCMkNBMzIwOEUwMzc5RkEzRUUwQTlCMkE1ODYKKzoxMDMyMjAwMDkyQ0U4QkIxNDUzQUM5QTdCRkU1QkEwOENGNTM2MDRGREMKKzoxMDMyMzAwMDg0QkNCMUI0QTc2MzFERDZBOUVGNDlDRTdDMDdGMTczNTYKKzoxMDMyNDAwMDM0MDMxRTNBQUNDRTdDQzBENUIxMzZEQTg0N0Q3M0NBNjUKKzoxMDMyNTAwMDVEODJBRkY5M0FCMzVCNzhGQjdCMkQyQzA2RUJGRDNFMkMKKzoxMDMyNjAwMEQ5N0VERTFBOEJBRjk1RTcwN0RBOTkyNTJFMDk3QzU1QjIKKzoxMDMyNzAwMDRBN0M1RDM2NThERjAwM0M5Q0Y4MDExQjhERkRCRjZBMUYKKzoxMDMyODAwMEZEMDY4MjQ3RjEwNUIzQjQ0RDRDODY3RUI3RDU1RDc2MTkKKzoxMDMyOTAwMDFGRUJFMUEzQjJDMUUzREY0N0JCNkU3RTk4QUUxMTFGMDcKKzoxMDMyQTAwMEYwNzQ3RjBFRjFDMzhENDc1MDNFNjU3QzI4Nzc1NTExMzEKKzoxMDMyQjAwMEZDNThCNUNDMEIzRjQyMUFGM0MwMUVEMEM1M0E0OTlGMEIKKzoxMDMyQzAwMEU4RTJGQTA0RTQ5OTkyMjc0QTZFNzAzRUYwMjJBRTQ3OTMKKzoxMDMyRDAwMEQxNTdDOThGNkQ4RDFDMjQ4RUQ3RUQ4RDc2NEE3RkRBM0MKKzoxMDMyRTAwMEU4NjQxNjJFMDM3NjM0QTY1MUZFODU0NjE3QTVDMUM2OUUKKzoxMDMyRjAwMDAyRkFGRUIzNDYwRkU1NzczNThFQTZGQzlFNDYyRkU1MTMKKzoxMDMzMDAwMEY3MzY0RUE2RjRFNzhEM0VGQUNFRjE0MjcyNDhDOTE1NjMKKzoxMDMzMTAwMDI1OEYxNDNGMjlCOTE0Qzk0N0YzMzk3QUFGMkFBM0Y2ODgKKzoxMDMzMjAwMDI0Rjc5NEJDQzMzQzRDNjUzREYyNDhEMTM3NUJGM0Y5QkMKKzoxMDMzMzAwMEQzREM5MDYzRUQ3MzIwMkZDQUNEQTc5RjdGMTk3NjkyQkYKKzoxMDMzNDAwMDFBODcyN0NBMDVCQzA4QjlEN0U1QjA5MzlDQ0ZCMkIxOUMKKzoxMDMzNTAwMEJEMzhBRjM3QURGNDc2REMxM0I2QUZERTU0QTMzMTRCRDYKKzoxMDMzNjAwMDE4OUZERTVDMUZDRDJDNjE3QzdDNEI0M0EyMjEzRkFGQkMKKzoxMDMzNzAwMEUxRkQzN0ZBRjNGRUI1NDRERDkxQzdFMTM4N0FFNzY3M0UKKzoxMDMzODAwMDRGRkM5NjdGN0ZFQUNFMkZGMjQwNkYwRUM3RDY0NzMxQjMKKzoxMDMzOTAwMEVFMUQzMURENzAyNDIxREY2QzI1RkQ2MTUwOEMzODA3NzYKKzoxMDMzQTAwMEUxMEY3NDU5QzBDNEZBN0NFQUNFQkZEMkZBRUU2ODg4NDUKKzoxMDMzQjAwMDcyOTk3OUJEMDUwRDUxODRBRjhGNDAyNzhFRDdERjRCQjEKKzoxMDMzQzAwMDNBNTVBRTNERjZGQ0NCNThFNzc3RDg0OENFMkQ2ODk2RjcKKzoxMDMzRDAwMEVCNzIxREM3Njc5OEJFRjY2OTNBMjNCRDRDRjMzMjA2RkYKKzoxMDMzRTAwMDNGQ0NBNzNGQjA4NUY4OUVDRjNFRDVFQzAxMERCQTBGN0MKKzoxMDMzRjAwMDNGMjRDREUzREZGNTc1QkZBMEY4MkJBREUxMzBFOUMzODUKKzoxMDM0MDAwMDNBRTJCMjYwMjdGMDVCMERGMTU4NUE4MzhDRDM2QTFGMDEKKzoxMDM0MTAwMDY4ODhBMzhBMURFMUI1NDEzRTgwQTc0MUI3MDUwNTA3MkQKKzoxMDM0MjAwMDE4RDYzNTZCRDE5Q0Q4MDJBQUU1RjdFQTc1MUFFOTFCQzQKKzoxMDM0MzAwMERERkE0MjlFOTlFODU4OUY2QkExRjQ1REFDNzFEQTJGREEKKzoxMDM0NDAwMDVBNjg3RjUyRkNDQUU1ODUzNzgwNzVEMTUyNkE1QjE0OTEKKzoxMDM0NTAwMDI2ODcxN0M4RUY1NTA1MjY0QUQ1RjdGQTVDMUJGNUYzMDIKKzoxMDM0NjAwMDJFODQwM0VGRjdCRTgyNkNEQjQyOTI3MzJFMUJFNDgwNDYKKzoxMDM0NzAwMEFBQkZBMEEwRUNFRUVDMTFFODY3NUMwQTBCNUI4RkRFNDQKKzoxMDM0ODAwMDNDMEJCNUFGNDdBMDE3Q0U0Nzc2NjFGRkFGRUQ2MzFGOEEKKzoxMDM0OTAwMDUwN0FDOTA5RkNGMzcyODI5RkNFNUI0QjVGNzhFRTA1RDAKKzoxMDM0QTAwMEY4Qzc5NjdFMUM0NTc0NUEzQTRDREEyMzhBMDJBM0E2QzIKKzoxMDM0QjAwMDkxM0VFMzc1Njg3QzlFQ0IyNUZEMjczRUY3NDk3QzNCMUEKKzoxMDM0QzAwMDJGNUZCMTRCRDgyRjc5REE4MTc0RjkxRDM1NjRENzVBNDMKKzoxMDM0RDAwMEVFRTFFQjIzMDk3MkQ1RTg0NzNFRjRDMkM3RjFFRDc0ODMKKzoxMDM0RTAwMEFFRjA2NzIwQkU5MDZGMEIxOTJDMERGRUEyNjM5MzYwQTcKKzoxMDM0RjAwMDE3NUZDMTNBRUY0NjVDNTc2NEJCMTVEQTU3RjFDMkJFOUQKKzoxMDM1MDAwMDJGRkNFNENBN0Y1OUZFREE5RjUzMDk4RURERTc1MzIxNzEKKzoxMDM1MTAwMEQ3NTZCQ0I2MzY1NUVGNjVERTJCMjJGQ0Q3Q0E2RkFFNDgKKzoxMDM1MjAwMEVDNjAyQkQ4RkEyRkUxNzc4QkFDQjcyQTRGRkFCNTJGODYKKzoxMDM1MzAwMDYzOTc5MTlEQzJDMjI4OEU2MTk1NURFMEExMkI5MDk3MDMKKzoxMDM1NDAwMEMwN0ExOUFGN0JEQzRENUNCMEYzNzM2ODk3QzU5NUUwMkEKKzoxMDM1NTAwMEUxNzA5RUVCMjM4RUVGRTUzQ0IxM0Y5RjkxN0VENDczRUIKKzoxMDM1NjAwMDNCQ0NBNDE3OUVEQjExNDdGQ0JGN0NDNzQzNkY1RUMxRjkKKzoxMDM1NzAwMEYzQ0JCNzY4MTg5NkQ1QjEzNkMyRDNGMjVENjY2NjBGNDUKKzoxMDM1ODAwMDNGREZDMDZFOTNEQzM3OUNDQjlFOEJBQjA3M0YyRDA5OTIKKzoxMDM1OTAwMDZBREVBRDQ1RjBDQkJCMTJGQTg1RUI4QjkyOUY5NjQ1NjgKKzoxMDM1QTAwMDA1NDcxMTFEMjRGQ0Y3NDlGRDQ4RDU1QkIyRUYyMTFCRUYKKzoxMDM1QjAwMEU4QzVFQjlEMjVCREU1QzU1OEU4REFGQ0FGRjM1REMwNzUKKzoxMDM1QzAwMDc5NkFGMzcwRjJFQjJFMDlFRTVDNEVGQkZFOEU1ODI3MDMKKzoxMDM1RDAwMEE2Rjg4NUQ1Njg4RjBBRTQ4OUY1MTRDODEzRkFDNjI5QjgKKzoxMDM1RTAwMDY5RkYzREY1ODI5OUU0MEZFMEM0M0FGQzQyMTM3NjVFMzAKKzoxMDM1RjAwMEQ1NkU5QjZDQjc0REUyRUQ4NjNDQjExRTU1RkQyNUMxRTUKKzoxMDM2MDAwMDhFRjg1QzVFRkZGM0JERUY1MzFBOTRGMzVBRTI2ODJCMTkKKzoxMDM2MTAwMEMxN0VGOUY5QUVEOEM5MDE0QTdGM0NFOTU1M0VERTk5MzEKKzoxMDM2MjAwMEUwQjgxNDJENkM1REJEOTYyN0UyODZDRjZDMzY0RjA2NTAKKzoxMDM2MzAwMEJFNTg0MEM1MTkwNTY5M0VBNzc2NjQ2ODc0QUUwNUJFREMKKzoxMDM2NDAwMDM5N0U0RUVEN0EyOURFNDRFQkQ2MkZEQTQ5M0E5QUVDRjAKKzoxMDM2NTAwMEMyOUVFQUI2QjhBNEZEQzJFRTg0OUUzMTk3NkI3NTA5OEUKKzoxMDM2NjAwMDVDREVENUVEMTJGMTAwOTFERjU1N0Q1QTZGRTlFMEY3OTAKKzoxMDM2NzAwMDRFOUJFMDdGRTlCRjk3RkUyNUM0ODk5MDNGM0VDRTE2NjIKKzoxMDM2ODAwMEMwRkUzQTdGOTg2QkQ2NEQ5MDY3NkY1QjA1M0QwNkJBREEKKzoxMDM2OTAwMDFFQzVCOTZBRkU3QkM5NjRBRjU4NjU3NUY1NDdGRTRGMTQKKzoxMDM2QTAwMEVGNThDOTdFM0U3RkI4NUNFNzY5RUQyMzYxOUZFQzcwRkYKKzoxMDM2QjAwMDhCN0RCRDc2MUQ1RjIxN0NDQTAzMzhGREZEN0M3RUI1MDgKKzoxMDM2QzAwMDAxMTNDNTUzMUVDQkNCMjZCODFFQUYzMTc5NkRFNEU3OEQKKzoxMDM2RDAwMDA4RTVDMzRFNzlENEM2RkM2NkU4QzkzRjhCMjZGREFFMkIKKzoxMDM2RTAwMDM2NUJEOEREMUYwN0JGRjNCNDM2Mjk5NDlGMEM3Qjk3NTgKKzoxMDM2RjAwMEE0NjNFRDhEQkMzQzhDOUVCNTRGODdGMkExQjc5Q0I2MDAKKzoxMDM3MDAwMDA5M0IxRUNBOUQ0OENCNDRCRDI2QzkzN0U4MDdGRDc2NTQKKzoxMDM3MTAwMEI4OUQ2NzQ5QkZEQzFEQzdBMEU3OUI1RThFMTNGNjg0OEEKKzoxMDM3MjAwMDlGNDQ5M0RGNDFGNTdCNUVGMjU1OTNGNDczRjlCNzBBM0EKKzoxMDM3MzAwMEY4MDAxN0Y0RTYyNUI2OTY3Q0U4OTU2QURDMjVGMTJEQUQKKzoxMDM3NDAwMDM0REU2OTM5REU5Mjk4MTZFMTNGOTA3MTYxQTg0RkUzNEIKKzoxMDM3NTAwMDVCOTkxN0U3RjFDRTY3QTM0ODNGRkQyMkJENkQwRkM2MDkKKzoxMDM3NjAwMEZGRTJEOTIxRTQwN0VGNzAwNzE2RURBNTcyQUVCNzcxM0QKKzoxMDM3NzAwMDNBMkNGRDY5NTQwOEYwOUU3QzM2OEVGQzlDMjdBRDQyQTUKKzoxMDM3ODAwMDBGM0ExOTk3NEE3QUQwRTFCODQ3RTZBM0JGQUUyRDUxNTgKKzoxMDM3OTAwMDFBRUMyOTI3MzU2NjRCNDNGOUQ2N0VFNEFGNUFEQUQ4QkUKKzoxMDM3QTAwMDQwN0U4MkE1N0NCOUMzMUZDREQzQzlGMDJCOUZEQzNBRTQKKzoxMDM3QjAwMDg0RUMyQzI3N0Y2OTI2RkYyMkZGQkUwRURGNzVENjMyRjAKKzoxMDM3QzAwMEZGNzZBQ0JCRURCMTY0NjdGQkUyQTc3RjFCMTJFRTdGMTcKKzoxMDM3RDAwMDUwRTlEMjJENDY3QjkyQTJCRjJBNEZDOTE3RUIyQjI1NjkKKzoxMDM3RTAwMDVGRTAzMTJENUZFQzMzNzVCMUMxNDdCMjY5OUU2MkJEQjgKKzoxMDM3RjAwMDcyM0FEMDc5OEJBRjhGNTREOEE3OEYwNjVGNDlENTFDMEEKKzoxMDM4MDAwMEMwNzMyOEZGQzdDMEZCNzY3MUFFRjk2Mjg3OTVGQzIyQjIKKzoxMDM4MTAwMDRCNUY4RUYzOTJGREU2OUVDQjRDRDgyRjk2OUE4NUZFOTkKKzoxMDM4MjAwMEJCOTRCMzlCNDg4NTdENjg2OTdDM0VEOTg3MzhCRUU5RTcKKzoxMDM4MzAwMEZDRDhCOUQ1MkNDNzExRTM5RURDOTYyOUVDRUYyMTk5NzEKKzoxMDM4NDAwMERGNTMxQzAwOUY0RjQ5NjJCN0RDNDhGQUNERTYxMkUwMTcKKzoxMDM4NTAwMEY1RkM5NjU4MTNGODgyOEZFMzg1REY3RUU5RURERjE3REMKKzoxMDM4NjAwMEY4NEM1ODQ0RkEzODQzMUNGNDI4RjhDQjg1QkNBQ0JCNjAKKzoxMDM4NzAwMEU3OEEwNEM0QzNCMEY3Q0MwQ0EyRUZCQ0M1RDMxRkYyRDcKKzoxMDM4ODAwMDMwMTI1RjhCRjNBNUJDRENGMzg0MERGRUIzNUFCRTVFMzEKKzoxMDM4OTAwMDEwMUZCNDRDRkE0RDk3RkQ1NDIzN0Q2RUQ5REQ1NzNDNzMKKzoxMDM4QTAwMDRBNzJGMDVEMkJDQkUzNzA5QzBFM0UxNDFGNEU4RjBBQzQKKzoxMDM4QjAwMEQ5NEY0RjdCMEZENTVGQzZFQjhCRjY2RkM3MTMzQ0RCNDEKKzoxMDM4QzAwMEFDMUVDMDEzNDlDNzRCNkVGRjUzRjMyNUI1RUZFNjhGMEYKKzoxMDM4RDAwMDIwREZENzRCMkU5RUY3NzlENkY2REQ4RjIxNDc3NjQ0MzEKKzoxMDM4RTAwMDdCRkNGNDM1NDg3RUU3NTNENkUwMjJDQ0ZCRDRGM0QxMDEKKzoxMDM4RjAwMDI0NUY0RTI1OEFGNUZFMzk5Nzg3N0UxQkUwQjhGRTQxOEUKKzoxMDM5MDAwMEIyNkZGQzY2MUE4M0U4NUUxQzMwRjZBQkM2OUQ5OTJGMzkKKzoxMDM5MTAwMEU0NkY1REIyMjcwMUZFOEMzQTRFMDdGNEM3RTlGMjFENTEKKzoxMDM5MjAwMDZBRkY5RTk1REE0N0NFNjNBNDZDRDdCRDNFOUY4RjI1NzQKKzoxMDM5MzAwMDdFMzkzNTQwRDBFM0Q0MEI4MzY5NUZFOTQ4MTQ3Q0NFRUYKKzoxMDM5NDAwMEUxQ0RDMjM5RTU1NEEyNDg3MTUzMDY3Q0IwNTQ5RTQzODAKKzoxMDM5NTAwMDRGOEQwQkQyQjlGQjk0QjY5M0QyMEVBQjY4QjdCNDQxN0UKKzoxMDM5NjAwMEZBNkQzOURGQTU4MTZGQzA5M0YwNUJEOUQ3Qjc0MThGNkUKKzoxMDM5NzAwMDgwN0Q3QTU0MTlBNUExQThBNDhCRURDQ0UwNEZFQzQzMkYKKzoxMDM5ODAwMDJGRTQwQjdCMTZENDFBQzg3NUYyNkY5MDdFMTJCNDQxRTcKKzoxMDM5OTAwMDFFRUI1MjhGQUJERDcxQjFCRjhDRkNBMDNCMzRGMkZCNTAKKzoxMDM5QTAwMDNDMjBENzI5QTA0RTUxRjY3MUNFOEZDQkZDOUExN0YxNEYKKzoxMDM5QjAwMDQ2Q0I5QTU3MkUwMUJGMkZBQkRGNzAxM0Y4NURDRDYzNTYKKzoxMDM5QzAwMDk5ODU0REM2RjlBQTQzMzMxMzNDMUREMTdDREQwMDBGMDgKKzoxMDM5RDAwMEUxRTM2NUY3RTA3NzkzODIxNzIwQTc5MjlFNDlDQUY1NDUKKzoxMDM5RTAwMEU2N0NCMTVGMjFERkMyRkJBQjZERDZENkQzMzg2RTc1RjYKKzoxMDM5RjAwMDlFMTRGMzUzNzhFMjY4QjFDMTRFQzZDRkY5QTJCQzhGRDIKKzoxMDNBMDAwMEY5MkIzODIzRTdBRkUwMDlFNjBCRkI0NDg3REJGNUUwNTEKKzoxMDNBMTAwMDU4RDBGQjU3NjZCMjlGOUVGRjZBNzg0MkQyMzdFODY1NUUKKzoxMDNBMjAwMDM4QjE3NURCOEIzOUZDQUZGMUJEMUFGREY4MjFERkIwODEKKzoxMDNBMzAwMDlFNjE4RkU2NzBFNjZGMzZGQTNGMEFCNjE4RjM0Mzc3NTkKKzoxMDNBNDAwMDE4RjM0NUJCOENGOTkyN0RDNkJDRTc5MDMxQkY1NThFMEIKKzoxMDNBNTAwMEFCRjA4NDczMkVFMkRBNzBDRTQ1OEE3M0FFMkI1RjlDOTYKKzoxMDNBNjAwMDczOTFDNzM5MTcyOUNFQjlGODhFNzMyRUYyMzhFNzIyMzEKKzoxMDNBNzAwMDhGNzMyRUYyMzhFNzIyQzUzOTE3REZDRjRBRjk1RDJCNTUKKzoxMDNBODAwMEVEOEVBMDAzQzU1N0JEMTJBREZDRTBCNDVFQ0VDRDQ5QUUKKzoxMDNBOTAwMDI1RjlBOUZDOTlFNzk2MTQ1MUJFREI5RTUzNjEyNzdCNUIKKzoxMDNBQTAwMDhFOEFEM0I5Mjk0MTNGOTI0RjdFQzNCNkJCRDM0MTM3RUIKKzoxMDNBQjAwMDRCM0JEOTcxNTdGQzVDRDg3MTZCQ0JBMjFEQjAyRkI0QjYKKzoxMDNBQzAwMEFGRkRGQzZFQTg0RjI1MDlGQTI3RjkxNEQ3RDRCOTREREMKKzoxMDNBRDAwMEM0MkI4NTQ4NkVCNEFGNzFCRDc3QjVBMDFGRDkzOTU0REEKKzoxMDNBRTAwMERDNEQyNUY2QkJBNEJFRTkxOEU5NDc2MUVCOEQ3RTkzNUEKKzoxMDNBRjAwMDQ4M0Y0QUE0RkYyNDkyMEY5NERGRTQyOTZCNjczQUU0MUQKKzoxMDNCMDAwMEZEQjE2N0VERUIwMUZGMzE2OTFGNjNCMzlEQTQ3RjI5MTAKKzoxMDNCMTAwMEJEQkE1QkZGN0E0MDdCMUFGQkY2RDdGOTQ5RDRCRUVCRkUKKzoxMDNCMjAwMDMwRDdCNzdCRDk2RjU1NUE3NUExOENGNEM2RUVGQzdBQTUKKzoxMDNCMzAwMENENDQ3MTIzNjlGMUI0MEZBRDk2MzA2NTY5OUQxREY3RDEKKzoxMDNCNDAwMDQwREVDNTk5NjgxRjNGRUYzMEQxQjlFMEZDMDc2NkQyNkYKKzoxMDNCNTAwMDIzMDY0MzNGMEY5QkNGOTA0MDhDODFCRjBBQjcyNzQ1NzgKKzoxMDNCNjAwMEY4RkYwNjE4RUEwRkRCOUIxREUxRkYxQjZBRjQ0QjREQzMKKzoxMDNCNzAwMDVGQjMxRkU3RUI2OUVCODcxQkVBNTVGQkFFODhDMEEzNzkKKzoxMDNCODAwMDg0NUJFQUE1NEQ3NzZDQ0E4MkZDNTkxREQ3NDVGMEFGMUUKKzoxMDNCOTAwMERFMUQ0RDcxQjVENTFDNUUyRkZDNzJDODcwMTRENEQ4RDMKKzoxMDNCQTAwMEJENTM4MUJGOUFBMDM1MTFGQjdDOTVEQzdGNTg4MzcxOTIKKzoxMDNCQjAwMDNGQUVCMTMwQkYzM0E5ODdFRjZBOUNDQzlCQzhEQjlGNzcKKzoxMDNCQzAwMDI5NkREOTY2RTI3NDNCNjNEQUZDQzg1ODE3RkM0QUFEMkMKKzoxMDNCRDAwMDU5NEVDRTU3Qjc2QUMxRDRDQjc5N0Y3RkIzRTg0NTgzQkUKKzoxMDNCRTAwMDM5QkY2NTU5NDMzRjlDMDc3OUI5MzM4N0FERTFGNThFRkQKKzoxMDNCRjAwMEFEN0YyOTlFRjQ2RUM5Njc1OTU2NjcwQ0U4REREQTYyMUQKKzoxMDNDMDAwMEE2NzMwMUVDNTJFNkE0MUU3RTY4NkQ0OThFQzk3NUY0NTgKKzoxMDNDMTAwMENDQjM4N0ZFNUZEMUZDMzg1RDNDQjhBN0Q4RTUzODMwMUYKKzoxMDNDMjAwMDcwMzVGNEI4QTA5ODZGQ0QzOENENEY3QUIyOUNDRjJBQkEKKzoxMDNDMzAwMEI5QUZCMDVDRDFDRkFEMzI3RjVDOUUxN0Q0RkM0RTBGRDQKKzoxMDNDNDAwMEQ5NUZFMjgyMUZCMzcxNkY5NjE5NzJEQ0I0NjMxQkVFMDkKKzoxMDNDNTAwMDBGREMxOUEzNUYzMzc4MjRFMjI1RjM3RTNCOTY4RkJCRkMKKzoxMDNDNjAwMEY0NDMxMUFGRkJDNzhEMTNFMjJGODdGRUY5QkNENTMzQTgKKzoxMDNDNzAwMDg1RTdFRjY5NzlDNjg2NzNGMTUyNEJDMDg2NzM2N0NEQ0QKKzoxMDNDODAwMEIzQUQzNjJGNEZBRkQ5REU0QURGMTc2REFGQTRGM0Y2RDEKKzoxMDNDOTAwMDYyNTY0RkU3QzgxMzJBRkU1NkUyQTM2NkJDQjZEOUM5REUKKzoxMDNDQTAwMEUxN0U2MUIwOTAxQjM1MzEyMjZFQTNEQzNDRjYwREM0ODEKKzoxMDNDQjAwMEE1OUZERkFFOTU2MkJFRDM3RDNCNkQ5NUIwM0ZDQjdBQkQKKzoxMDNDQzAwMDkxRUJBM0VCOUQ2OUU1RkQ2MDRGMEEwQUJGNjc1RkVCQ0YKKzoxMDNDRDAwMDYxNDZBODgwRDZDM0I0MEIyRTRBQTc1RjE4NEFFN0Q4MUUKKzoxMDNDRTAwMDBGOTlBRjk4RTQ0NDUxQzQ3OUY2MUQxMTg3RENCNTRGQTQKKzoxMDNDRjAwMEFDODMxQTVCMjg2NTFBRDZDOUVCNTY1QTI3NzU1QzdFQzkKKzoxMDNEMDAwMDhEMkVDMzM5OTlCMTMxM0NGNThEMzUxQkY4NzVDNUM0N0QKKzoxMDNEMTAwMDU4MDMzRkNGNjY0OTA2M0ZGMjRDNUNEQTBDQ0I0RjlGMEQKKzoxMDNEMjAwMDkyNjNBODNGNkI3QTYxMDRGRjk3RjU5NDkzMUMxOTYzMjMKKzoxMDNEMzAwMDg4MzNBOUJCQzNFRkQyMjg5RTY1QkNGMTNCNEZFRjIwNkYKKzoxMDNENDAwMDNFQkJDRUQwQkU4RURERDg1MzBGRTdFMDJEQkYyNjNDNjQKKzoxMDNENTAwMDMzRDY2NkMzNzlBQkM2MjRFMjZBNjZFQjFERjI3QjNCQzEKKzoxMDNENjAwMDdERTcxMzMxQUNDMzQxMzk5RURGOEE3REQxNEE3Njc5MzQKKzoxMDNENzAwMDY1OTc5RThEN0ZFN0Y0QjYyRjcyNDJDQjcxMTExRjBBQjMKKzoxMDNEODAwMEZCODIyMUJFOTAwMzQwRTc0RjI2RTg1MDI3RUQzRDc1QUEKKzoxMDNEOTAwMDA1QzJERTUzRTc2RkIzMjFGRTk2RTNERjkyQzE1MUIyNTUKKzoxMDNEQTAwMEJDNDUyMzdCMUVBRjZGQ0Y0ODEyRjkzQkYwN0Q5N0YxRTYKKzoxMDNEQjAwMEJFMDFGQUJCODBGMkMzRTY0QUFDOTdDOEYyRTU3Q0RFRUUKKzoxMDNEQzAwMEQwMzM5NkMzNEUwMzNCOTNFQTVGRjZBQkY4NzNGMTI2MEMKKzoxMDNERDAwMEEzREQ2ODM5RUMzOTYxNzRGQzcyQjA4QkY4NzRFOUY2RDQKKzoxMDNERTAwMDlENkYwRUUwNzg5OUU2NEIyQ0M1RkFBOTBENTY1ODJCMUQKKzoxMDNERjAwMDhCMkVFNjMzMjVERkNGRDc5OEM4Q0ZEREY1Q0U0MUUyNTUKKzoxMDNFMDAwMEIzQUUxQTBCRjFGM0I3RTE2M0I5NTdEODMzMjNGOTZGQTcKKzoxMDNFMTAwMDExOUYwRkZDQjI4Qjc2Njk5RTgwMjZFQTAxMkYwM0MwQUEKKzoxMDNFMjAwMDk3MTE3OEM5RTgwNTVGMEE0RkRENzg4QjI4NUY4QzdGOTIKKzoxMDNFMzAwMDhDNDBEQzgwMTYwOEI5N0JDMzhCQzRBM0VBM0YwMjRGRDkKKzoxMDNFNDAwMDZDQjQxMTBGOEI3NEQ3N0I5MDM3OEIwRTlCNTlFMDEyOUIKKzoxMDNFNTAwMEU2QkQxOEYzQzNGODdDN0UxOEZGQzYwQkMyNEVBMkZDNjkKKzoxMDNFNjAwMDA2MzMyRjU4MjhERkNEMjczRTExM0YzRDdEOEE3MTVERjcKKzoxMDNFNzAwMDc2RjM4RDRGQUM5MzE5MTc1MkE5RERGRjM2RkY3QzFCRUIKKzoxMDNFODAwMERGMjhCODIzRTM5M0Q1RkQ5RUZGMUEyQ0VEODQyM0Q5QjgKKzoxMDNFOTAwMDQ4NUFGRjk3MTgzN0FDRjY3Qjg1RTc0MTc3OEVBNjc4QUUKKzoxMDNFQTAwMEEyMkU0NzM2RTkwRkRERkI4REQzNThCRTJBMkU5QkUyQUEKKzoxMDNFQjAwMDg4NzU2OTlGNTM3MjU3OTdGNUQ0Mzg5NUJDREMzNTFDQ0IKKzoxMDNFQzAwMDdDM0MzMDE1NzZEN0JCOUI3M0IyREFDM0Y0MTI3REFENjAKKzoxMDNFRDAwMDk1RUNBNjU5NkI5MjI5QUQ4Qzc2QTY2MkJGQTg1QzYzNUYKKzoxMDNFRTAwMEY2NjExRkZDRjRERUZFQTlBMzYxODc1RjZCNEQ5OUMyRUEKKzoxMDNFRjAwMEJCRkVGNDdCMjNCMjU4MzFGMkU1OTQxRURCMTAzNTNCNTgKKzoxMDNGMDAwMERDOUVBRDUyNTc4MUQ4MEZFQUVFM0M0MkZCRDcxOUQzNjUKKzoxMDNGMTAwMDNCRjFCM0IxQ0VENkVFOEU0NzQ4Q0RCMkI1RUY4RjcyM0UKKzoxMDNGMjAwMDcyRDVBM0Q1QTIwRjJBNDAxQ0ExRDZCQUNEMDlCQzM5OUYKKzoxMDNGMzAwMDVCNEI2MDhGMUUwNkRBRjVFQkQxMTM5NkFFMkRFRjBGQkIKKzoxMDNGNDAwMEZCNTdFREQ3MDc5RkM0RkVBRUFGQjFBNjQyQ0YzQ0Y5RjkKKzoxMDNGNTAwMDAxREZGRjM0REFCRjQ4M0YzODgxRjhFMzE0RjhBRDYyN0YKKzoxMDNGNjAwMEU5N0VEQjA5OEQ3OUUxQkY1OTYyREU1RkUyMzRFQ0E3QkYKKzoxMDNGNzAwMEZCNjYwMjhFNTc2MkY0NjEwNUU0QTcwRDZDNEJDM0Y4MzMKKzoxMDNGODAwMDFFM0ZDNTRCRUE2QkYyMTI3QUIzOTdBODc0QzUyNkExRkYKKzoxMDNGOTAwMEJGNkQ1M0Y2NUE2OUQ3ODVERThFM0NGNDc2Mzg4NUEwMUUKKzoxMDNGQTAwMEI3MjMwRkJEMUQyOUY0NzY3Q0FGOTBGNkZBNDE0RDlERTUKKzoxMDNGQjAwMEE1Mzg3N0ZBQzdCMzgyN0FEQTVGMUQwNUQwQ0I1NzZCODUKKzoxMDNGQzAwMDMxMUVDODlCRDU5QUE3M0ZFQzYwNkM0QkJBRDg1NzIzREIKKzoxMDNGRDAwMEU4QUJEMjJCM0JCOTZFMTVDNkVGNTc1RkIwQjNGMEY4MjQKKzoxMDNGRTAwMEIxNzEyQ0QxOTA5RjYwNEYzN0Q0MkY3N0JBMERFNUQ3QTAKKzoxMDNGRjAwMEE0MEQzMTk0NUZFQjJBMzVFNEFGMkZCOERDNTBGRjA2RjcKKzoxMDQwMDAwMENGMzg0M0ZFM0JBM0FGMzVENEFGRjA1NjE4RjJEMzI2REEKKzoxMDQwMTAwMENGMzFENDlGRTFBQjM0OTRDRjlBQkRDNDUwM0U0NzVGQkIKKzoxMDQwMjAwMDY5QzhERjU0RjMzRDQzRkQ5QkVCRDcxOENBQkRDQzY5OEIKKzoxMDQwMzAwMEMxRkVCNjBGRTcyOThFRjdENzcxOUVFMkU5RUE1RkU1ODgKKzoxMDQwNDAwMDM5QzJFOTNBNzY4MkE5QkUzNzdCRkM3NzI1RkY2RTFBMjIKKzoxMDQwNTAwMEUyNUQwOUZFQ0M5NEY3NDAzMkU1N0Q4RUU2MDIxN0YxNzEKKzoxMDQwNjAwMDY3MDZFRUVERDM3OUI2MkQxRDdDMTM1OTJGQjI3QzZDMEIKKzoxMDQwNzAwMEVDODFGMzJFNEVDMzNGNkM5RjM5RERDMkU1QzNEOENCMzQKKzoxMDQwODAwMDBFMENDRkUxRjlBNDIxRjc0RkI3NzBCOTMyRjY4QTAzQ0QKKzoxMDQwOTAwMDJGNjVGM0ZDODAyMTZGODhGMjYxMDdDRUEzRkNGRTIxMUYKKzoxMDQwQTAwMDBGOEFGQzM0NDZBQTQ1RjY5MEYxRDNGRDdDMUU2M0FGMUYKKzoxMDQwQjAwMENFNUVFRjExRjY5MDVFRTMyRDU1MEEzQzIwNkUxMTc4MkUKKzoxMDQwQzAwMDQwMUFFMkZDODlGNDAwRTc0RkE0ODczODdGNTZFNzMyQjQKKzoxMDQwRDAwMEY2MjZFNzRGQTQ4N0Y5QjkxMkRGREZFMkU3NEFBNEVGM0IKKzoxMDQwRTAwMEYwNzMyNUQyNzdGOUI5MTI2OTFCM0Y1NzIyRkQ0REUzRDIKKzoxMDQwRjAwMDZDNEEzRjY4RDRBOUREN0YzNEQ2NTA3QUE0QjE5RUJFMDUKKzoxMDQxMDAwMDdGRDREODQwRTlFRjFCRkRGNDNENTBBMEVDMDcyMUIyNkQKKzoxMDQxMTAwMEIzMjg3RkQyNzJGOEYxNjA4N0RCNkIzRDFERUU2NzU1RTcKKzoxMDQxMjAwMEZFNDBFNUZGNkJBQTY3RURCMTU4QTdFRDk2QzRDRkVDNTIKKzoxMDQxMzAwMDNEN0VCREJFRTVBQzg1N0QxNkE2NkZCNUM2N0E5RjJCQ0MKKzoxMDQxNDAwMDIwM0JDOTQwMjdDOTZCRjk3REJDMzYyREIzOENBNzdGQjYKKzoxMDQxNTAwMDcxRTkzQjQxRUYxOTY1NTU2QjEzRENCODA3NTI2RjA1RTgKKzoxMDQxNjAwMEJGN0M2OEVBRkQ1RTcwNzM4MUIwM0ZBQzFBRTJERDQzNEMKKzoxMDQxNzAwMDdDMjJGREQ4Q0E4RkRDMUQ5RjEyRTZFNzM2ODVDNUM1QjcKKzoxMDQxODAwMEQwNUY1ODdDOEJGMjM3QUI3ODlBQUJFQzIyM0U0RkY5N0MKKzoxMDQxOTAwMDkzNTVEQzhDRUFBRkZDMDIyMzc5NzdFNTNBMEJFOTI3RUIKKzoxMDQxQTAwMDcxMTYxNjQyRkYyQTNFRTY0QTdCQjAxNEYxMDI1N0Q2M0EKKzoxMDQxQjAwMDNBMjgwRUFEM0ZGRjZFMkJBMzdBNUUzMzRGQjdGQzk5QzIKKzoxMDQxQzAwMEQ3MkZFOUYxNUZGNzk3RjBGMzcyODJCRkZDODI0RTc2NEEKKzoxMDQxRDAwMEQ3MkJBNUZGMUVFREVEQTJEQzhGRjY4ODlEODI5RUMxMzgKKzoxMDQxRTAwMDUzQjJBQjNEODEzOEE3QjIxRTdGM0FFQUM3OEFGQTIxQTMKKzoxMDQxRjAwMEY0OTdGQjlGN0NCQ0Y4OUVGNTkzOTkxNDJDNDUzQzU1OTUKKzoxMDQyMDAwMEU2NzIwN0M1NTM2RDFFMTdBMkZCNUIyQkRDRkFBN0EwNTUKKzoxMDQyMTAwMDkzMkZDQUY5NDkyQ0FEOUY5QzRDRDgwOTJBQTRERUZCRTgKKzoxMDQyMjAwMDBENzRGODFDRUQxNDdFMTQ5RTE1NUQxNDdFQzNFMjhFOTEKKzoxMDQyMzAwMDA4QUY3REQxMjk5MjNFOTE3NDUxRjQyOEJGRDA4MzY3OTUKKzoxMDQyNDAwMEUwRTk2MjNBRjREMDA5RjZEOEZGMkI3NDE4NjEwOUQyN0MKKzoxMDQyNTAwMEZEQkZBODVBQkIwNzcwN0QxQjVENkVFOTY0OTM3MDlGMUMKKzoxMDQyNjAwMDc4NzBCNkRFMEMzQzU3NUU3MEJEODk3QzE1MUIzNzA5MzMKKzoxMDQyNzAwMDVCOTMyQUY3N0M0QkY5MkM5NEY3RUJCQkZDQjYzRUNBNTgKKzoxMDQyODAwMERGOEU1NkYxMDg1RTQ3MjlBN0NCMDQyOTNGNTY5NzBCQ0UKKzoxMDQyOTAwMEZDNEU3NjlCMDlCRjEzOEExNjkzM0VDQTFDNDJBRjczMkQKKzoxMDQyQTAwMEYxRkYyMDRGMjY3REU1NkI0NjdGOTM1MjhDRkFBMUYyRjkKKzoxMDQyQjAwMDA3NUYyN0ZCOUIxQ0UxMDdCRTRFRUE4REQ3NDVFODg1Q0IKKzoxMDQyQzAwMEEzODY0OEJEQ0ZDRERDRTJEQzI3RUVCOTRGOTRGQjc0NkEKKzoxMDQyRDAwMDg2QTQ3MzBFM0ZDQzhGMDUxRDk5NkU4MUQwM0E4NDdCRTYKKzoxMDQyRTAwMEVFMjVCODA3RUVBN0ZDQjUyQzQwRTlGNTJDNDRGQkQ2MkIKKzoxMDQyRjAwMDBENUNDMDIxRkYxREM2Mjg5RUYxNjBFQ0Q0NzkyQjc4OUYKKzoxMDQzMDAwMDdGMTM4NjRGQzhDNUY3QjA3QjdERDcwQ0U5NDdGN0ZBMTYKKzoxMDQzMTAwMEZFRTAwQ0JCRDc3NzYwQTI4QkY0ODYwM0Y2MUNEMjYzNTkKKzoxMDQzMjAwMEIwMEVBQzYxNzZCNDVGNzJCOThGNTA4NjgzN0M1RjQwMEIKKzoxMDQzMzAwMEZBMDZERjE3NzIzOTkzRkY4MkVGMEJDODVGNTdCMDg2MUEKKzoxMDQzNDAwMEExREQyNDk3MzFERTQ0QjVCRkRFMzk5RTU5ODZGNzJEQjUKKzoxMDQzNTAwMDc3QUYyRjc5NjUyMEVDMkI2RjI3MEU5RTA4QkJGM0RCMjAKKzoxMDQzNjAwMDg5OTc0REM0N0NERjRFRUM2RjEyNjk5NDhERDJFMjk3MzEKKzoxMDQzNzAwMDczN0JEM0IzMTQxRkY2OEMzNzg5NTk5MjJGQzZBRkMyMDMKKzoxMDQzODAwMDY3MjQxRTE1N0VGRjA5N0NBRUVDMEQ5RkNEQzAwMUVDQUQKKzoxMDQzOTAwMDdBRjZGN0UzRDNCMkUxRkYxMkVCQkZFRUU1RTJGRTgwN0YKKzoxMDQzQTAwMEZGMjQ0MDQzNUNCMjVERTAyNUQyQkVGMzc5MjMxQjA4QjUKKzoxMDQzQjAwMEZDQjIyRDA5RjRGRDM2Qzk0MzU3MzY4Q0ExRkE1NzM1QTYKKzoxMDQzQzAwMDhDQTZGOTVEMTFBM0RGMzU4NDhGNzNCQTJDOTRDRjM1OTkKKzoxMDQzRDAwMDA3RjZGOUU2MjZCQTdGN0JFNjA1QjMwN0ZBNzdBREQ5OEIKKzoxMDQzRTAwMEI1REU4M0I1RkVCNkI4MkZDN0JFM0E5ODA1N0YxQkRCOTYKKzoxMDQzRjAwMEQyN0JEQzZFQUQ1REUxQ0Q0RkY4RjQ2NjdCOUJDNUZFRjQKKzoxMDQ0MDAwMDI3RUUxMUFCRkQ3NzYwOTQ4ODc3NTVGNzU5RkJEQThGNkIKKzoxMDQ0MTAwMDQ3QzUwOEI5MzIzMDRBQzg0MTQ1MjdERThFRjIxOUJDN0IKKzoxMDQ0MjAwMDlGNTE1QzZFNjQzQzE4NDNGQUY3ODgyNEVGNjNDMEE3ODEKKzoxMDQ0MzAwMDNBNDcyM0JFMDlGQkQ0NTVBMUMyMDRFNDI3RTMzQ0M5OTMKKzoxMDQ0NDAwMEYzNkZDOUZCNjk2RjBEQUQ0RkM5RTZGODNFNjhEMzlGQTYKKzoxMDQ0NTAwMDQxM0I2NkZFQ0E4Qzc1REQ5NEE3RDEzREY3QUVDMzM5RUEKKzoxMDQ0NjAwMDI5QzBGNzU2QjVFRTRBNTg0OUY4N0IwMzRBM0ZFRTFFN0QKKzoxMDQ0NzAwMDJGQzU0QzdFRjE1NUYwOEZBNkUwREM2NDI3N0JEMTU1MkIKKzoxMDQ0ODAwMDJDOUZGQ0E2MTNFNUY4RTVCRkFDQTI3NzEwRDRCRDhGMzYKKzoxMDQ0OTAwMEE4MzQ5M0YxRkQxQzU3OENFMTNEOThEODgyMjQ0MzNFMEIKKzoxMDQ0QTAwMENFMzNDMDUwM0Y2MTc0QjZBMTNDRDEzQkQ0NTA5RTNDNEEKKzoxMDQ0QjAwMEI5Q0M5MEVGRTcxQjYzQThERjdGRjY3OEUzQkI2RUZBMTkKKzoxMDQ0QzAwMDc1ODZGQTE5MzUzNzFBRjI0QTdFNjU4ODRGMkNCMzdFMDUKKzoxMDQ0RDAwMEFFQTFGREEwODYwNTg2RkE2RUZGNTJFM0ZCMzY3RTZGMjUKKzoxMDQ0RTAwMDVCNDEyQUU0OUVGOENCNTlCN0NBNTBGRUUzNzg3MUFGMUUKKzoxMDQ0RjAwMDYxQjI2MzExQkQ1NzkxRDc3MkJCNzE3QzQ5QTc4QzA0MUYKKzoxMDQ1MDAwMDQxMjdFNjEyRjJENUNGRkYwM0RGOTRBNzE5RTVFRDA0QUEKKzoxMDQ1MTAwMEE3RjFCQ0NERjU0MTBERkI3QjQ2QkRDNUYwRkREM0ZGM0EKKzoxMDQ1MjAwMDIxOUQyM0YxRDJDNUI3QTYxMEVBNDMxRkUyRjlBQkY0RUYKKzoxMDQ1MzAwMEExMEZDMkFFMzEzMUM1RUEwOTMwNjE0RjBGOUYxN0VDQjAKKzoxMDQ1NDAwMEU5RTE3ODgwM0QzRDNDMEY3QkJBRjE1RDI4MjNERDYxRDgKKzoxMDQ1NTAwMDRGMEYyRjFGN0VEODQ4Rjc5MTZENDZCQTVGNzZDNDQ4M0IKKzoxMDQ1NjAwMDc3QzU4RjkxRjRCOUJDRERDODBGOTFGNEI5RTI0NDA0NkEKKzoxMDQ1NzAwMDdGNDg3QUNDRTZGRkZENUREQzkzMjY3QTRENzI2OEVDQ0QKKzoxMDQ1ODAwMDcxRjczRjRGOUZENEExOUMzRTg1M0RGNEY5RUYwQzNENjAKKzoxMDQ1OTAwMDdENjgzRkRDNEYzRjlGNjUwM0JEM0FDNTdCN0QyQkE1MDIKKzoxMDQ1QTAwMEZDNTRGMTg0RkNCQzJCRUVEM0RENkUyNkZGRkU1MTUzOTAKKzoxMDQ1QjAwMDBCQkQ5Nzc0QzBBOUJCRDFGRTk2QTI3QTBERkU4MzM0QzEKKzoxMDQ1QzAwMEU2REJCOTg4QzMzN0ZGREZBM0M4OUYzMDdGOTBCOEQ3MzkKKzoxMDQ1RDAwMEM5OEFEQTI5Q0U1RUM5QjlGOTE5MjI4RTY1Qzg1MDc5MUYKKzoxMDQ1RTAwMEJFRjA4ODc4OTZBMkExNDIyRjhDRjMzODI5RUVCNUIyOUUKKzoxMDQ1RjAwMDQ4REMyM0UwQzc4MkFDRjlDNUUwOUY3N0EyRjE2RTYxODkKKzoxMDQ2MDAwMEQ3NDY2MUJGNkZCNzhBRkJBNTdFQ0U0N0YwOEI0MTRGN0YKKzoxMDQ2MTAwMDg0MUU5NzI5RjVBOEE2REZEOUVEODA3RkYwMjY2NkQ4RkQKKzoxMDQ2MjAwMDE3ODcwNEVDODZCOENCQzJFRDRFNDNCRTM4OTg2NkE4MTcKKzoxMDQ2MzAwMDNGNkNBRkNCNTA1RTFBMkEzMDk0MEYzRkVDMzFFNDQ3MDkKKzoxMDQ2NDAwMEI2OEQzNkQ0QkZFQzg4RDc5MEJGQkM3REIyQTFGRTE1MjUKKzoxMDQ2NTAwMDI3N0M4NjdDMDZFQjdDMENGODFEQTQ4OUYzNjhGNTUwNUEKKzoxMDQ2NjAwMDExQzdDM0Q3MTBGOTkzRTZERjkzMjhFRTBGQ0E3M0FBRDgKKzoxMDQ2NzAwMEQyODM1NTNDQUUyRUY5MkU1MjlGMUU2NEQzMjlCRUI3NkQKKzoxMDQ2ODAwMDI5OUQ3OUU4MUU4MDVEOUU0Rjk4NTFDRkQ2NjUzQ0FEM0YKKzoxMDQ2OTAwMEQyNDc5OURGMTg0RkFCRTI2OEJCRjU3MUE5N0YyQjdEM0MKKzoxMDQ2QTAwMDM4MkM4RUQ2MUIxRTQ3M0I1RkRFRjM4RERDRjdFQTI1RTgKKzoxMDQ2QjAwMEREMjNFMTFGNjQxM0YzNkRGQTlFOERFRTJEMjhCODIyRTEKKzoxMDQ2QzAwMEUxRjk5QjhDRUZEQzZBRUZGREZFQzg5RDQzODVCRkZERTEKKzoxMDQ2RDAwMDk3MzlCRUVGODI1RjlGODRGOEM4RTk2RDNDNEZCQjlGNUUKKzoxMDQ2RTAwMEYzNTdEMzBGNkM5RUJCNUNERjNFREVGQzYxNjIzRUYzOTIKKzoxMDQ2RjAwMDRDQTY1QjJBOEEyODZFNjlGNkNGQzJDNkZGQTExQzc3M0EKKzoxMDQ3MDAwMDc1OTFENkVCRkNFNjI3ODhCODIyOTY2MDczODE3RkZCMTMKKzoxMDQ3MTAwMDFFNEZFMDMzQ0RDNjlBRTk5RThCOEMzQkJGNzk3REYwNkUKKzoxMDQ3MjAwMDAxOThDOEU3RDk1QUFDRTJGREIyODAxNUZDMzA2NTNDNkYKKzoxMDQ3MzAwMEQ3OUY0QTYxQjdGQUZBMjEwN0Q3MzM5RTZDQjA5MDFEMTQKKzoxMDQ3NDAwMEUyRTFBMTM3Q0NGMEU3RjZEQzIzMThDNENGMTdFMDBGODUKKzoxMDQ3NTAwMEU4MkEzODk3RDg4QjQ0RENFQzlFQTE2MkZEOTc5QkJGN0EKKzoxMDQ3NjAwMEVBOEVGRjI2N0IzQTYzNTI3RThCNzM0QjJGRkM0NjdDOEUKKzoxMDQ3NzAwMEE4RTZGMUFGOEUwMzhGQzQ5MzNBMTczMkI5RUZFNDRBM0IKKzoxMDQ3ODAwMEI4MTRGRUJBQ0ZGMTEyN0YyQTFFREZCNUQyRUE3QkRBNjcKKzoxMDQ3OTAwMDQxNzFGRDkzMTFDRkE0RTgzN0IwNDhGMEU1ODlBMTgyQkIKKzoxMDQ3QTAwMERFQTgwNzc5RDQ1N0JENzI3MzUxMDJFQ0I1NURDQzk1ODQKKzoxMDQ3QjAwMEUwRkMwNjdCRTRCRjBBMkYwQUZGN0REREVGRTk0QjNFRkMKKzoxMDQ3QzAwMDVDMjQxN0ZBQjhFRkQzMTc3RkQyREYzRjcwRUYyNzRDODYKKzoxMDQ3RDAwMDNFODhGODEyNDk4RjQwQUU4OUZDQjlGN0M0MTlENzcxRTkKKzoxMDQ3RTAwMEZGNDI4MURGN0Q2QUJGRjBGM0YzQTQ1MTRFMzBEODk3Q0EKKzoxMDQ3RjAwMDlCRDY5QUE1OUMxMEZCMkFGNDBEN0M1RkI4RDY0QUZBOEEKKzoxMDQ4MDAwMDA2NkIxMEYxQzgzNTUyMTYzM0U2NEIxRDMzMDJGRTU4QzUKKzoxMDQ4MTAwMDJCQkQ2Nzc1OTU5NzkxM0VCMkMwNjEwQkI0RjJGQTk1QzYKKzoxMDQ4MjAwMEZFQzg3REQ1NEJFREM5NUZFM0MyQkIyNTlFQkI2MTdGNTIKKzoxMDQ4MzAwMEFGNUE2N0FDQjdEODIxREVGNTVBMTg3MTJFNUQyQ0NGNzAKKzoxMDQ4NDAwMEE1OEIyM0NFQTVEMTg1NzI1RkY2MzAwRkU5NEREMkZGM0YKKzoxMDQ4NTAwMEFDRTBFQ0U2QUI0MDBFQzUwNUUzOUM2QTE2RjYxMjhBQTYKKzoxMDQ4NjAwMDU3RUFCNkUzQzNCRjEwRjY4RTI2Qzc2NzRDMDFGNkVERDQKKzoxMDQ4NzAwMDY2NEJBRjcxNjREREY4RUNDMzRGN0UxQTdFNzIxN0Q2QkIKKzoxMDQ4ODAwMDdGMTdEREZGRTlEQTE1MkRGQzY4Q0E3RjIxRUI5RkY2NjMKKzoxMDQ4OTAwMDlGQTc3MkQ0NDc2RjY3NEFEQjRBRTA0N0VBRjY3NzQ0M0UKKzoxMDQ4QTAwMEY4NERCQTFDQTZGOEQxRTg2Rjg3Nzg3RjQxQzUwMTJDNzYKKzoxMDQ4QjAwMEZENkJBMEM0MTlFNkU3RDREQjREODZCODhCQzg1NDVGMDYKKzoxMDQ4QzAwMEIzOUJFMjAyNUEyRDdBNTkyMTlGQzcyOThCQzc4RUY3RDUKKzoxMDQ4RDAwMDIyRUY3NTFDNDhDNTdERUQyOUQyNUUxMzA5NkZCNzFFMDYKKzoxMDQ4RTAwMDNBNTYxMzdFNDJCRkQwNDNCQjI2NkJBNDg3NzJCOUM4MjkKKzoxMDQ4RjAwMEIwOEU5NDNGQkI4Mjg1NTI5MDJBRkY4MUJFNkUzNEUxMTgKKzoxMDQ5MDAwMDU5RjkwRjJBNDNBMzA5Q0UxOTREOEJBRDc4QjJBRkZERUIKKzoxMDQ5MTAwMEIxM0JDQTYzNUMzRDdFODVGNjRDMTE4RkQyOTc3RjYxQjcKKzoxMDQ5MjAwMERBMDUwRkY1MzdGREMyMThFQUE3QTJEMDJERUU3MTM1RDIKKzoxMDQ5MzAwMDNGQjAxMjdDMzQ3NDNCQjM2MjlFRUQxMUYxRDgyQUREOTYKKzoxMDQ5NDAwMDVGMjhFQ0RGNDcwQjk1REM5NjcxMkU2QjM0QTE2NzZCMEIKKzoxMDQ5NTAwMDRDQzVCRDkwREM1NkY5RjMyRDMyNUYyRUYyQUJENzhBRjEKKzoxMDQ5NjAwMDdDQkI3Q0M3Njg5QkI0Mzc2MDlFNDgzMTFGOUM4Qjc3QUIKKzoxMDQ5NzAwMDQ4N0IwNEU2ODExNEYzQzA3N0M4MjlFNDIxQTc5MDg3MTcKKzoxMDQ5ODAwMDlDNDIxRTcyMEEyOUU0MTRCRTJGNjBCRUFDNTJCM0YwRTIKKzoxMDQ5OTAwMDgzNEMwQzVCMzdGMDgzNEMwQ0QzODNFMDA3MDlDRkMzMDcKKzoxMDQ5QTAwMDBGMTI1RTFGN0U5MEYwNzJGODQxQzJDQkUxMDcwOUNGNzMKKzoxMDQ5QjAwMEMzMEYxMjVFMUY3RTkwRjAzQzFCN0Q2RDRGMUU3MkNEQUIKKzoxMDQ5QzAwMDVCNjFDODRGRTNGQUY4QzRCMDc1MEIzRjQ4NzhGRkYwNUQKKzoxMDQ5RDAwMDgzMThGQUQzNTcxQURBREZDNDFBMENFREUxMDcwOUFGQ0UKKzoxMDQ5RTAwMDdGNEI4MzY2RjA5M0RDMjJFRkE1NTc2RDRBMjJGRTk4MzkKKzoxMDQ5RjAwMEUzRjZGREIwOTBEM0Y3MEZCMTVGREY2NkM1MzlDREJDRUMKKzoxMDRBMDAwMDZGMDk5RDlGRUE2MjNDODJDRTJEOTMwNURENEQ0Q0QwMEYKKzoxMDRBMTAwMEI5NzMwRUQxRjkwRTlCQzg5NzhCQjhEOERFRkMwRDEzNzUKKzoxMDRBMjAwMDczODVCRjAxMjlGQzBENDhFMTZGNDAwQTdGMDNERUMzOTcKKzoxMDRBMzAwMDg2QkYwMTI5RkMwREY4MEU3RjAzNTJGODFCOTBDMkRGRTAKKzoxMDRBNDAwMDgwMTRGRTA2QTRGMDM3MjA4NUJGMDFFREUwNkY0MDBBMTgKKzoxMDRBNTAwMDdGMDNCRUMzREY4MDE0RkUwNjdDM0YwQUJGNDc2RTBGOTQKKzoxMDRBNjAwMDVDRDBEQjczMERFNzNCQ0U4Nzg2RjM5REQzOTA4N0RFNkEKKzoxMDRBNzAwMDFFNUUxRjdBN0I3ODM5RjRGNkYwNzJFOEVERTE3OUU4OTIKKzoxMDRBODAwMEVERTFGNUExQjc4N0U3REI4NkJBNjg1RDQyN0YwRjZGN0UKKzoxMDRBOTAwMDA3RkQzRDNDNUZEQ0UyN0YwMzM2QTYxQjM2OUYzRDg0NkQKKzoxMDRBQTAwMEI0M0Q0RTdCNTJFM0EyRTBCREU3OEVDRDgwREZBODNENTIKKzoxMDRBQjAwMDVBQ0I0QUU0NEJERUFBOUQ5QzMxOTFFQjY3QkE4QzJGMEUKKzoxMDRBQzAwMDJCNjE5REY0QkVCMzJFREZBREQxNDM4Q0UyNjE4QkZGMzEKKzoxMDRBRDAwMDkyMjZFNDgyQkEzNzg0M0Y0RUY3RDI1RDhDQ0UwMTE1MjAKKzoxMDRBRTAwMDcyM0Y1NUVEM0RDQzY5MjZCOTI1RUJGN0U0N0JBRjE3NTYKKzoxMDRBRjAwMDM5QkVBQTQ3RjIzMjBDMEU3RTQwMkM0NTFDNDRFOTFERkIKKzoxMDRCMDAwMDhFMzJDNDcxNkYzMzY5MjIwRUYyMkUxMTg3MUFDOTU3ODMKKzoxMDRCMTAwMEU2MjIyMTk3QjY5OTc2MUU4ODQxNUM0QkE1NDZFRkM1RTMKKzoxMDRCMjAwMEU3NUJEODYxQkNFMzVEREM1MjVGMDY3REUxNTQ2MUEyQzYKKzoxMDRCMzAwMDlDNTdGRDE4QzRDNTI4Qjg5NTFEOTBDQjA5QkE1NzM1QTgKKzoxMDRCNDAwMEI2OTNEOUFBOEJGMDlFMThCMzJEODQ3Q0I3MDkzRDAxOEEKKzoxMDRCNTAwMEVENzA3RTJDRjQ2QkRFQTdDM0Y4RkJDRjg1NjI3RkQzQUMKKzoxMDRCNjAwMEZEMkJDNzU0RjNFRjg1M0JFQUM3RTBCRUQ2OTQxOEQxQkUKKzoxMDRCNzAwMEVFMjc0RkM1MTMxRUE3MzY2QjRGRTM1RURDRDgxRENDNjYKKzoxMDRCODAwMDhCRkI5NzVGNEI3OTVBQjhDMzY5QUJBNjcxOUQ3NENGMDUKKzoxMDRCOTAwMDRCRjU1QkI5Mzk4QkVFQTU1NUIyRjY4OTY5NjRDQkQ3NzUKKzoxMDRCQTAwMEU4MUQ3Mzg1MzczRUJGNDM5ODFGMTdGMTg3QURBNDhGNkIKKzoxMDRCQjAwMDhBRkIyMjMxRjJCRTg4QkEyN0UyQjZGODQyNDM0N0Y2QjIKKzoxMDRCQzAwMERDMTdCOTcyNDQ2MjM5RTJCNUQ4M0VGMUVFREUwRDIzNEUKKzoxMDRCRDAwMDJBRDdGNkUzRkRFQjAxRjFFRURFOTU3RkFBN0Y4M0YyQTMKKzoxMDRCRTAwMDVCQzRCQjdCQzQwNkEzNjgxQ0RBRDcwNkZCMzU3QUVGMkYKKzoxMDRCRjAwMDYxQUFCRkQ1OTRFMkMyRkREMTM1RDY1NEQ0REZDMTNDMDEKKzoxMDRDMDAwMDUwN0YwNjMzNzEwRjUyQzE1N0M0REE0Qzc4Nzc5QzZGQ0UKKzoxMDRDMTAwMDMxMDc5M0MzRjg4ODRCODBFOUEwN0JBOUM3NEFFRjQxQ0QKKzoxMDRDMjAwMDU0NTg5QzU2Qzg4REM4N0RGQ0UyNzhCQTA4M0QyMTIyQjQKKzoxMDRDMzAwMDFFQTJFOThFMjM1OUU2NkNEODdCNEM5RTEwRTRENkVFN0EKKzoxMDRDNDAwMDU4RDIxNzk0QkU1MzI5RTNBMENFMzdCRjQxRUY1OTU3MkUKKzoxMDRDNTAwMEVFMTRGQTgxQ0VFNTAwRTQ5RjhBOEZBOENCMDk2NDk5MEYKKzoxMDRDNjAwMEEwMkYwQzY4MkQ0OTMyOEJGREJGMDhGNzkxRkMyRkNEOEEKKzoxMDRDNzAwMDFDRURDMjNEQzYzNzI4NUVCRjcyRURDODA0NzE1RjQ3QTgKKzoxMDRDODAwMEY4MUZBQTI1OUVBQTY1RkMwQjJCNzJBNjQyRUY1NEVGRDMKKzoxMDRDOTAwMDk4OTY5QkM3MjZEMDdEQjcxNkExQ0YyOUZCNEJFNUFGRDEKKzoxMDRDQTAwMDg2QkYwOTNBNTczRTIxREYwMzU5NTc0OUY3ODAyMkUzNkYKKzoxMDRDQjAwMDUwOTQ3RUE4REUzQjU5RDI2Q0E1Rjg5NjI1MTE3QUUwNzcKKzoxMDRDQzAwMDMyQTkwNzJFOEJEMDAzQUYyQjhBRDAwM0Q1RkI3NEIyNDkKKzoxMDRDRDAwMDRFRTVBRjBFQ0UyMDNEQTU1RUJDQzczNzZGOEREMDVCRDUKKzoxMDRDRTAwMEQ4NEVGMThFRkRCQzM1MTM0Qzc4Qjc2MkRFNkVBRjQ3RkYKKzoxMDRDRjAwMEVCODUzRkRFOTNGQUNCMTQwQzlBOEMzODlGMDE5NENFNEYKKzoxMDREMDAwMEJDOTA0NkU5QUMwQjA1MjQwNzcwMTcwM0Y0NkY3Rjg1NTAKKzoxMDREMTAwMDkxM0VGREJFRDQ1NzY2MjBDRTBGRjdFM0ZDNTEzMjlFODQKKzoxMDREMjAwMDhGOTFCRTU0Q0E5Q0U1OTAxQjQzQkREQTQxOThBRkE3NTIKKzoxMDREMzAwMDU4RjVCNTg4MjM5Q0QyQ0FFODNFQ0MwREQwNkI3OEMxMUIKKzoxMDRENDAwMDZDRTgzOUMzQzFFN0VFNzJCQTE3MzA1OUEzRkIxNTM3QzcKKzoxMDRENTAwMDhDNTgyOUY5OUFGMzM5MDM5RkZCMjVERkZBMjhERkJEMjgKKzoxMDRENjAwMDFGNDhGRUQ2RkQxRDE2N0E5N0Q1QUZEOUYwMkU5QjJFODMKKzoxMDRENzAwMENGQjM4QTdGMjNGOTdDQkVGQ0JEMDlFNjEwNzZBNjZFMTAKKzoxMDREODAwMDNCMTQ4MEE1Qzc1NUFFOUEwOTdENzEzRTZDNzcwMzI0MEMKKzoxMDREOTAwMDIxMzk4QUUyOEE0NDc5NzNEMTU1MzM5QjcxQjhGOTFGNUUKKzoxMDREQTAwMERBMjdFNkE5REY2MUUwN0ExNkU0RTlDREI3OTZEQTE2RUMKKzoxMDREQjAwMDg0Qzk5NThBOTJGMUNGMTRGN0VCQTFGQjgyRUU3QjYzNTUKKzoxMDREQzAwMDQ1RkRBMUZGQUZCQTM3QUZGRjM3REQ1RkFDRTI3OEM2NzQKKzoxMDRERDAwMEZBOTg5RkQwN0UxQjVFQzZERDUyQzRCQzEzNDdFMzNERUMKKzoxMDRERTAwMDY2MzU0RjE2NDJCQ0RBNUM5OUZGNzVEMUUyRkY1ODU3MjEKKzoxMDRERjAwMDQ0RjhBMTdDNjBDNzk0OTk3RTVBMkY0MjVFREQwNDc5MDUKKzoxMDRFMDAwMDY1ODY5Q0QyOUYyQ0MyRkQwRTdCRkIyNEQwMjNCNkE4QzYKKzoxMDRFMTAwMDUzREU4Nzk3RkI1MTg0M0RFMkQ3NDU4MjBFOTE3Njg5MTgKKzoxMDRFMjAwMEFBMjIyMUM3OTlDNTk1NzUxM0RENTM3NTkxNUQ0RkMxQjAKKzoxMDRFMzAwMEZGQTlENTc4NkY1MEE1QkY1NEZCNDhFM0JGMjZERUZFMUYKKzoxMDRFNDAwMENCNTRGREU3OTAxRjhGOThDNEZERUQwMUU2MTYyNkVEQ0IKKzoxMDRFNTAwMDQzRTI3NzMyRTRGQTYxRjIzRDgzMUVGQTczQTkwMUZBNjQKKzoxMDRFNjAwMERGQUIzOUMzRTlBRkFGRDNDNEJERTkzRUVDMzhBQ0EwOEEKKzoxMDRFNzAwMEYzQjFBREIwRTMzNThBREZFNzc4MkE1RkYwRDE1M0I3RkQKKzoxMDRFODAwMERCNDhGRjlFNjc2QjdCMDNFRjM0MjkzQzdFRENGMDIzMUQKKzoxMDRFOTAwMEFCRjg5RDk3NTAxRURFOUY5QTVCMUY0REVGQkQ1Njk0NTkKKzoxMDRFQTAwMEY4REE0MDk3RDgyMjBGRDFFMzE5QzQ5NEYyRkFFRDRFMDQKKzoxMDRFQjAwMERGRkI5ODRGRERGQUZENEZFMkZFRjg4QTdENkVCQUQ3MzAKKzoxMDRFQzAwMDU4QjlCN0Y0NkVCQzZCNTE1MUEyMUY0MTc5QTVDMzY5QTMKKzoxMDRFRDAwMEMzRkVCREJDMzk5MUY2QjNGOUZERTVGRDQyRDY0OTdFNkUKKzoxMDRFRTAwMDJBODVGRkNFMjI2MUM3REE1NjIyRkEzRjI3Q0YyMTEwNEEKKzoxMDRFRjAwMDk0MTU4NjdBMzJBRTM4NjI5RDI4RkI2MEE0OUQyMUYyMUIKKzoxMDRGMDAwMDNEODFCRUQ2OEZCMjI3QzA3RTYwMEJCMzJGMkFGQjg0QjMKKzoxMDRGMTAwMEI1RTBEMzM5RDgzRkU3RDk4Q0Y3RTE1NEVBMkU5NkU3Q0MKKzoxMDRGMjAwMDVDNzkwRTVDRDhCRDdGMTU0REVBMEY3RDc5ODM0NkJGNTUKKzoxMDRGMzAwMDVCNTNFRDcwQ0RCQTlDRTdBQjBGNUIxMTI5QzhBNjI0N0IKKzoxMDRGNDAwMEI5QzQzQjEyRjc4QTc3MjQxNkYwRjUwQTc5MzM0RkM2QjUKKzoxMDRGNTAwMDBENTU2RjFBNERFQkFEM0FDMEQzRTRCRUQ3RTU0RDFCRUUKKzoxMDRGNjAwMDBFNjZCRTAyRkUwOTc5RTk5RTc4QjVEMzZCNEIwQTVCRUIKKzoxMDRGNzAwMEY3NTUyRDlBRTE5RUI5Q0EyNzE2MEI3QkRDM0MzQzYxQTQKKzoxMDRGODAwMDVFMDY3OUUxQjZFMTJEOTc3OTVDQUQ0MDFDOUFCQkQ4RkQKKzoxMDRGOTAwMDY1RjBCQkYyN0ExNEM3MzAyNTlCQkQyOURFRjFFMTcwQzQKKzoxMDRGQTAwMEJCQzU3ODY1NjFGRDJGNjgzMURFOTdFN0Y1QzVCQjE0OTkKKzoxMDRGQjAwMEM1NzFENDVGQTU5M0NGMUJGNjBGQTc5M0UwRTQ3ODIwQ0IKKzoxMDRGQzAwMDNDNzUzRUMwRkI3M0QxMzg0NDhGQUE1MEMwOEFGM0Y2QkIKKzoxMDRGRDAwMDNDQzQ0RkYwRkM1QzY3QzA4QTcxMTYzNDhCNzcyQkY0QUQKKzoxMDRGRTAwMEY1NjIxQzdENURBMkFEMThGQTkyQzU2OUNCMDRGRUU0QTIKKzoxMDRGRjAwMEJCRjYxQzNFOTI4M0Q1MUMyRkI4RkZBM0VFMDE0NkUyMDAKKzoxMDUwMDAwMEE3NTJDMjVCREQ5MjY4RDRDMzVBMzY1ODQxOEYzOTdEQUUKKzoxMDUwMTAwMERDOUZCRjQxRDI3RDQxRjMzOEJBRkY1QzZERjE1MjdDMTkKKzoxMDUwMjAwMEJEMkVGMUZCQzc5NUQxRjdDMTNGMzA2N0UzQTM1NjM3REIKKzoxMDUwMzAwMENGNUY1OTJDRjhGNzA2ODlENzI5RDlBMTNDN0E5RjY2MEEKKzoxMDUwNDAwMDY1QjQwNzcwQ0U3MUI2RDBGQ0JBRjFGQjMwQzc4Nzg2NjUKKzoxMDUwNTAwMDc3NTA3Qzg0NUZDRTE3N0VDNDkxNTU2RjM0RDJCMzA3RUUKKzoxMDUwNjAwMDFFODFERkVBOEQ5NUI0REUxNjU5NzQ5QjMzMUM4RTREN0MKKzoxMDUwNzAwMEZCRjM3MEFGNjcwRTVGREY3ODc3ODczOTc1QkE2RkYzMzAKKzoxMDUwODAwMEQ5QzNCM0IyNjg5RTFDNEVFMDM1Q0VFMzlBODRGNzY2NkUKKzoxMDUwOTAwMDM4OUYxMDFGMkI3RTUxRjc4M0Q1NzgwQjhCQzUzREMxRjAKKzoxMDUwQTAwMDg1QzVCRERCRDc3QkQ2QTU5N0Y0OUIyNjRFNUZEOEJEQzMKKzoxMDUwQjAwMEZCNUE5NzM2NUMzNEUyRTNEQUFBQzUzQjYwOTFFQjU0QzUKKzoxMDUwQzAwMEFENEZCNTJFRDUzQTU1RUJGNzQ5QUIyRjk0QTZGNUM4QTEKKzoxMDUwRDAwMDE5QkVERkQ2RkZBQzE3M0MzRDIzRTE5RDJCRTlDQUYxOTkKKzoxMDUwRTAwMDdBMjhGQzVFRDFGQTYyMjE4RkU2NjUxQkQ3M0JGQTQzMzIKKzoxMDUwRjAwMEJGQjdBQkYyRjFBMTNDREMwMzU0RjVENUI4RjNFNEVGNTQKKzoxMDUxMDAwMDc0ODFFRkMxNkZCNzRCQkFBM0ZFMkFBQTZGQkMxRjUxQkYKKzoxMDUxMTAwMEQ1MkQyRjc2QUM0RDg1QkNEOEE5OTFCRUJCRUE4MTgzMzUKKzoxMDUxMjAwMDk5RkYwNjNERjY3OUExQzc5RUFBRERCQTNDMUQ3NjAzMUMKKzoxMDUxMzAwMDRCMjAyQkZDN0RBNkVBOTA5MDBGMEJCOUZFMDM3OUIxQjIKKzoxMDUxNDAwMDQ4RUVEM0Q3RTRFOUY3MTY4RjBDQUJGN0QwRjNGOUJBRjIKKzoxMDUxNTAwMDkwMkYyMUM4OTdERjNGRkZFQTg3NjM1QzNERkJBNzgyNjIKKzoxMDUxNjAwMDdGQzFCQTVGNUIyQjFERTFGODEyN0M3RTVGNDExN0REQ0EKKzoxMDUxNzAwMEZCQUE3MkQ4NUM4OEIzQUQ2QUFFMjQ3OUNCRDJGODc5MzkKKzoxMDUxODAwMDQyMEI4QjkzOEFFMDgzQ0E2NjhEREVDREFBNkExODE1MUUKKzoxMDUxOTAwMDMwRkYyRkNBRTVBQUY1MTVGNDM2OEZBMjkzN0E3RjQzMjQKKzoxMDUxQTAwMEVEQTcwQUZFMUQxMkZFQjk5MjhGNUY5NEVCNkY2RThEMTQKKzoxMDUxQjAwMERCQjY4OEQ2QkREQjU2MDVGRTk3RTU3M0FBOERERkJCNEYKKzoxMDUxQzAwMEU5RDRFRDY3MkVCQTNCNERERTYzQTE3M0M5N0FBQkIwNkIKKzoxMDUxRDAwMEVGRUQ4ODIzN0RGNUQ0QUE5N0RGOURDOUVCN0RGMTQ4REIKKzoxMDUxRTAwMDZCMTZGNDEzMDVDNzYyNjlDNzVCMjhFRDcxOEJBNERFRUIKKzoxMDUxRjAwMENBRTlGNDdBNzE5ODlDNURGQzk0QTA1M0Q1MEJCRkZBNzAKKzoxMDUyMDAwMDA0RUY0M0NEQ0I5NkYyRUMwMTcxQkY3QzQxNzAyN0QxMDYKKzoxMDUyMTAwMDZEQ0VCQTBENTYzN0FGRjc2RUIxREIyMEE3QUJFQTRCQjgKKzoxMDUyMjAwMDlEQjA0RkNGNURENzZBODUxQzc4Qjc1OEUwMkQ5MkRGQ0YKKzoxMDUyMzAwMEU3QzlCODU0ODU1N0VDM0I1QTk4RkY0MkQ1ODdGQ0RCNDkKKzoxMDUyNDAwMEM5QzdCOTc1NjU3NDNDRTIzMkQ0MzhGRjI1RjlCOEFBRUMKKzoxMDUyNTAwMDNFMzEwOUUzNTVENTU3RkUxMEU3MUUyNUVGMjNEN0RENzQKKzoxMDUyNjAwMEIxNjhCMTFFMTZGMEZFQjAyRThGOERGM0QwM0REQjc5MDQKKzoxMDUyNzAwMEYyRjdBNTIyRUI5Rjk1NzRGQkIxNTVCQzIzOTgxMTFCNDcKKzoxMDUyODAwMDdDOTZFMjBBNTZDNDc4MjAxRjcyNzNEQjAzMTgxN0ZDNjEKKzoxMDUyOTAwMDBDQjg2RDI2RjFFRTYwNkU2REZCOTc4MDgzQUJDNTE0ODQKKzoxMDUyQTAwMDlGODIxNEVGMUQ0MTRENEVFNUY5QTc0REUyM0UxMDYyN0QKKzoxMDUyQjAwMDRCOTBBNjk0MDg3RTgwNjkwQUU1MkNBNTlEREUzRjBCRTUKKzoxMDUyQzAwMDhCQ0YzNEYwQUI4RDZENTk4N0Y3NTc2QzI5OEM3RUVGRkYKKzoxMDUyRDAwMDQ1RjFBN0VBNDdGMUE3RTJERkJFRTZFNzI4QjlCNEY5NEUKKzoxMDUyRTAwMDFENzM0QjNCNDQ4MTI3MEJGNzI4RTYzRjM4OThERUU3RDgKKzoxMDUyRjAwMEZGQjY3OURBRTQzQjc4RERGMzhEMTJCRjVCNzBEMTdDQzkKKzoxMDUzMDAwMDczQzVCOUE1RUZGOTZFMkM0RkVENjVCRTkxRjM1NEVCNjMKKzoxMDUzMTAwMDQ0QzU1RTc3RkIxNTVBODQ1RkUxOThDNkY3MkZERUVFMzEKKzoxMDUzMjAwMEQ4Q0E2ODhBRkI1MkYzNTI3NkVGNEI4RDk3Rjc5NDI0RDQKKzoxMDUzMzAwMDQ5M0I0MjdCMUNGNEM4NzlGMkY3MjA1ODQ4RTRGMUJEQTAKKzoxMDUzNDAwMDIyRUNCQkRBRjdENUJCNjE0QTNFMUZBRjk3RkIyMjZCNUQKKzoxMDUzNTAwMDdGMDBFQjk5MzVFNEQwM0IxOTQ3NUI4RUM1RTFGRDhFQUMKKzoxMDUzNjAwMDYzRTMwNDdDQUFEREFENTY3MUVGOTVDNUQ5NUM3ODNGNDcKKzoxMDUzNzAwMDkxOUZBRkU4NzcxRjE2MzZGN0E3NzNFNENEMEQzOTI0NTgKKzoxMDUzODAwMDE3NkVGNjI3MEFCQjgzRDRFRjE3NDkzOTE4N0I2QkU1RjQKKzoxMDUzOTAwMEREOTdBMUZFMjZCNzUzRTNFMzJDNzQ3ODNFREI0NEVEQTIKKzoxMDUzQTAwMDBCM0REMDA3NjMzNzU2RDhCMjQ5RUYxNUU3MDBFNTA3NDQKKzoxMDUzQjAwMEJBNTU2MzNFQkFDRjA0Mzk4OUY1NjVEQTlGOEI3RDY3QUMKKzoxMDUzQzAwMEYxMjY3MTBFOTg2MjYyRUJFMDJGMUNENEU0OUI5NDBFRTAKKzoxMDUzRDAwMDM5RjE5ODc4Mzc5MjZEMzZCRUFCNzQyMENGNzc3RDA5NUUKKzoxMDUzRTAwMEYwMTZGMTFFRDlBREQ2QTBCNzNGRTQzOEQ3Mzc2MDY3QzUKKzoxMDUzRjAwMDVBRThGMDkxREVGRTk2OTQ5MzQ3Mzc3NkQwRkJFNDBBQTQKKzoxMDU0MDAwMEFGMTdERDUzQjE4OTdCQTk5RDcxMjZCMkJGNURFQTdEREYKKzoxMDU0MTAwMDk1NkFFOTRGNTI3Q0EzRkM1MThGRTNGRjJFMDc5RTRDMDcKKzoxMDU0MjAwMEI0QUY5NTlCRTdEMUJCM0U3NzZGOUM0MDY5RjU4NkYyQTAKKzoxMDU0MzAwMDQ3RkNDNUI4MEZFQjRCMUQ0MzcwNUJDOTNFNTY1RDM3NEIKKzoxMDU0NDAwMDQxREMxRjdEM0EyQTExRTc5QjJDQUIzRjJCNUMyRkFEMzMKKzoxMDU0NTAwMDZFQkQ4N0VFQTk5QzY4OERBNjdCMkExMzlEMTUxMzEzM0MKKzoxMDU0NjAwMDUzRThCRDVEQkFGN0E1RUE3RDVGQUVDQkE1NzUxMzBDMTkKKzoxMDU0NzAwMEY3NEMxNkYyM0UxMTA3RkJFNzYwMkNDNTk1QUFGQjIzRkIKKzoxMDU0ODAwMDc3QzZFOERGMkRFOTI3RUU5MTVDRUUxMkY3NDdEMkE5NDcKKzoxMDU0OTAwMEJFQUI1NzdCQjg0QTNGNkIxNEY3MTFDMkVFQzU0QzlEQUIKKzoxMDU0QTAwMEMzREJEN0Q2QkQxNDhGN0U5NjNERkNGRTI4OEUxOUQ4NUYKKzoxMDU0QjAwMDlGRUUwMkREQkFFRkM1NkMxMkY3NjI5QTcwNUU4MjFFMzMKKzoxMDU0QzAwMDk5RTQ5QjM5MDdGOEZGQTU5OUYwREZENzc4MzVGODUxQjMKKzoxMDU0RDAwMDkyQjA3M0M0Q0Q4MTA0RDI1QkY1MTBCM0MxOUZBQzNCRDUKKzoxMDU0RTAwMDE5RTlDNTI3Q0NBQzAxN0E4MEQyNUZENEY3NDcyNDVFOTYKKzoxMDU0RjAwMDRFMjRCNDY0ODEzRjk2NkM3QjM0MEJGQkNCQzkzODkxNEUKKzoxMDU1MDAwMDlGQjc2REQ2NUI5MDU3RkE5NjI4QTE5RjVCMThFOUMzQTkKKzoxMDU1MTAwMDU1N0VBMTVGQjM5QTI0RjUyRTY2RjQ3Q0Y4NjM0QjYyNDYKKzoxMDU1MjAwMEM1M0IzQ0YyRkU4QzgyNEJCREI3N0FEMjIyREU4QkMxRUEKKzoxMDU1MzAwMEJEMThGMEZCQzc5NkQwNDJEMEY3NjNBRUJGRTIxQ0ZCQUMKKzoxMDU1NDAwMDdEMjlDNzNFNkUzMUQzRUY4RUY4Rjk0MjgxMUVGMjcxOEMKKzoxMDU1NTAwMENCNEI3MUI4OUZBQkY0QjU3MkYzRUZCRDc4OEY2NkQ1QzYKKzoxMDU1NjAwMDZFNzE0RjE1RUY5QUQzOUI5NUQyMEVCMjVDREE0MTU2MEQKKzoxMDU1NzAwMEJENjI5RDg0REYxREUxRkExNzdEQTlCNTg0NkNCREQxQTQKKzoxMDU1ODAwMDZGQTlENEFGQkFGM0JCNzZEMkI5QUQ3Njg3RDAxRjZBMTQKKzoxMDU1OTAwMDgzMURBNDNGMjg3RDQ0REQ4QjVCQjZBMzgzRjQwOUQ1MkUKKzoxMDU1QTAwMDZFRjkyRTgxOTdCQTVERTI3QjI1RTJENkU1RUY4NTZBM0EKKzoxMDU1QjAwMEI5Mzg0RjZCOTRGRkE0NjhDMUFDMzU5NkYwN0MyNUU1RjMKKzoxMDU1QzAwMDNGMjk1MkY2OTE0RUQyMDdFRjJCRjgwRDlEQzNFQjlBNkYKKzoxMDU1RDAwMDY1QkYzQzZGMEQxQkVGMEQzMDY5M0ZGMTNEQzc4MUY2OTQKKzoxMDU1RTAwMDYyREY1N0U1NzVCQjEyQTk3REE4MkU2NjFERjY3OUVGMUYKKzoxMDU1RjAwMDcyODcwNTY5NTM5RDgzRjZGRENERjVBNjAyQ0IwODAwQTEKKzoxMDU2MDAwMDE3RTM4MTFFQjc0RkM2NkZGNTVCRjYxRkQxQjAxRkE0MUQKKzoxMDU2MTAwMEIzQ0U4Mzc4RjdGNTgwNTMzRjAyN0U1NUJGNjdBOUVFN0UKKzoxMDU2MjAwMEJEOUM3QkVERjNFMUU4RkZBQTQxRURFN0YxQzY4Mzc1OTAKKzoxMDU2MzAwMDREREQyQ0Y4MjdEQTRCRTQzQzhBREE4NzgzQUZGQjFEN0IKKzoxMDU2NDAwMDEwRjJGOTA5MkI1QjQ3RUYwNzVCN0MwQzc2RkI5MEY0QkIKKzoxMDU2NTAwMDJCRkFGRjYyMTJCRjJGQTE4NTlFMDlEN0FGNTI4NjA5OTAKKzoxMDU2NjAwMDNEREMxNzI1RkM4QjVFQjc3RTEyNzA3QzQ3QjMxNjk3MjYKKzoxMDU2NzAwMEUyNENFRDMyRTdBMTdGRjUzQjJBNEE0RjFEMkZFNTczM0YKKzoxMDU2ODAwMEE2M0M1RkQ5MDZBNDM5QzBDNzlBRDc0QkY3MTBFRjJBQkEKKzoxMDU2OTAwMDNBNTA4NTdERjlGRTRFM0JGREJFQUE4QUMzMUJERjE5MzkKKzoxMDU2QTAwMDQzN0E2QkU2ODBDOUI0OUZBOTdCMjkwNzhBNEM3RUJDRUMKKzoxMDU2QjAwMDdCN0UzRkIzOEJCODAwN0I4NDVFNkI4QUE2Nzg2NDZEN0IKKzoxMDU2QzAwMERGMkZGRTAyNzk5RTYxRkVGMjIwN0VBNzI0RTNERjM0MDUKKzoxMDU2RDAwMDdBRkY3MjdFRDc2NzRGRTAzNzY2RTZCMTQwMjlCRDgzMTcKKzoxMDU2RTAwMDk3QTg5Qjg2NDEwRTc3NERFRUQwMzlDOUVFNzcwNkVEMkYKKzoxMDU2RjAwMDFFQjE0RkIwNzBGOEY3N0RFRjJGRjE0OUE2MUVCOENFNUUKKzoxMDU3MDAwMDc1N0U0NkVGMEE5RUVCQjQ5M0JENzZGQzNFRjlERTVFRjUKKzoxMDU3MTAwMDA0M0NFN0QyNUMxNDE3Q0RFQjg1RjBCRUNBMzk4Nzg5MEIKKzoxMDU3MjAwMERFMTkxQkJGRUYyMEJEOUIzNzVFQkRBQjY3MzdCRUFCM0QKKzoxMDU3MzAwMEM3REEzMjEzNjE0RjI2MUIyQTU3MEE1MjlCMDREREFFOEIKKzoxMDU3NDAwMDRBMzA5RTEzRjM4Njg5RjM1NkRFMzAyMTNGMTRGRUJBQTkKKzoxMDU3NTAwMEVDNjdERkQ2QjU5RTc1Qjg0MkY5RUZENUVGNERENTQ0NkQKKzoxMDU3NjAwMEQxRUY0RDc1RURDQkY5QzZGNzEzREU4N0ZFQzBGNTgyOUMKKzoxMDU3NzAwMEY1RDlERUUyNjFGRDdBRjZDRjE5MTIyRjZBMUYzNkNCMUEKKzoxMDU3ODAwMEZFNjc0OEZDQ0M3MDk4MDQzRTIyN0U2RjQzRjE4N0EyRUUKKzoxMDU3OTAwMEJGODI1N0QxNTdEMThERERERUY2MDZFRTA1NzE3QTE1NDEKKzoxMDU3QTAwMDNGQzg4ODRFOTcxMTlERkVGMkNFNUE1Q0YzMUY2MEY2RkIKKzoxMDU3QjAwMDc2RThFRUZGOEI3NDBBNDUwRjg2OUVGMEIwRjhGREFEREIKKzoxMDU3QzAwMEM4Qjg0NjU2QzA2ODlEQ0YzN0M3OTAxRDUwOTdFRjgyMjYKKzoxMDU3RDAwMEYzRjVGRDA2RDZCNzVBRDc4MzI2QjcxNzYzN0YzQ0NBQzEKKzoxMDU3RTAwMDhGREU4MEFCREQxNEE0RUZERjFEMjZFMjA5MDdCMkI2MjEKKzoxMDU3RjAwMDc0MTk3RjMzMTI3QTU5OTM3Q0ZGQjhGQjc3MEM5NzM4NzIKKzoxMDU4MDAwMEU4QkQ5MTczMDFGNUZFNzFFMEIxNDU3Q0RDOEQzMzhBMTIKKzoxMDU4MTAwMEM4QUU3RjhFQzlGNTVFRDNGRDRFQjY3OEZGQjhGQjlENEUKKzoxMDU4MjAwMDZDQjM5RkVDMjQ3MzYyQzhDRUQzRkQ0RTc2OUU3OEVGQTYKKzoxMDU4MzAwMEZBNTU4REU1RTMxRDVBN0Y4NTlERTJFMzIzREZDOUU2MzYKKzoxMDU4NDAwMEZCQ0NCM0YwNjczQzVFMTM0MzdFMjhGNTNFRjI3OEE3QUQKKzoxMDU4NTAwMDVFMEYzQTQ2QkU4RkZDODhFNjlCQjMxMEZEMTUzQkE4NTEKKzoxMDU4NjAwMEJGRjYzOTMxMkY2QzEzNjgwRUMxOEU3M0I0MjE4RURFRjIKKzoxMDU4NzAwMDg1NTY3Q0E5RUNENzgzRkMxRDhGMDE0RkVBNUVFNzFGOUMKKzoxMDU4ODAwMDI0N0YyOUJDQUI3QjZEMEFGRjhBQ0ZGQzU2NDZGNzNGQ0QKKzoxMDU4OTAwMDQxMDdCQzJCQUJERTY3RDdFRTkwNzI0M0REMjc3Q0REODIKKzoxMDU4QTAwMEUzNDJGQTQwQTJCRTBFNzAzN0FERTQ3MjgzRUNFMkVENDMKKzoxMDU4QjAwMEI3NjFCRTRGN0MyRkNFMEJCODhFOUE4Q0JGREZBQkQyQjgKKzoxMDU4QzAwMDg3ODY5OTBDQkYxMzNBNUZFRTU3RjM1NURDN0Y4MzMxMUYKKzoxMDU4RDAwMEVFM0ZGMjFEQ0RFNDA0REZDM0MzNzhGQjMzREFGQkEzNTQKKzoxMDU4RTAwMEYwRjE5REZGMzZGNzFBNDdGMkE0NUNGRjIzNjJGNTI3MUIKKzoxMDU4RjAwMDUwNUZERDdGNTBGQUUxM0JBNTlGNjdEMkVGOEQ3Qzc1NEQKKzoxMDU5MDAwMDkwN0U1NzcxQUVEMzE3NDBCREU4NUNFMTBGRjg0MzdBNDMKKzoxMDU5MTAwMDNCREREN0Y4QzM5Q0JGNjY5MjNERjkwRUYxRkVFN0E1Q0IKKzoxMDU5MjAwMEMyNzlGMTdENUFDMTBGQUIxNzhBNzhDMzBDNTY0RkZDNzAKKzoxMDU5MzAwMDlCRDY3MzRGMzMxQTcwRkNGRjc2OUZCNkU3QkVFQkU0M0QKKzoxMDU5NDAwMEUxQzcyOUVFQzI0N0JGNTcxMTQ5OEZCMTUxMDc1RTcyQjcKKzoxMDU5NTAwMEYxOTNDQTZGODc3RDMxOEJFRTkzMjYxQzU4RURFNkY5RTMKKzoxMDU5NjAwMEEzMkY5RTE1Rjk4QzAzRTdERDlDMzZFRDJGOUUxM0Y5Q0UKKzoxMDU5NzAwMEMyMDNFNzcxMUZGNUQzMTczQjQ1RkUwQTQ2RkVBQ0UzQjEKKzoxMDU5ODAwMDJGN0UzOTBCRjc0RkZCQkJGNTNGODI1RTMzMkZENEJGMjEKKzoxMDU5OTAwMDgxRURGNUMzMzUzNzJFNzREMzdEQ0E4QUNDMDI3MTlGNTEKKzoxMDU5QTAwMEYyNjM5NENGNDg1REIwMzY0MUVCQjk0RjY5RjJGOEZFMkYKKzoxMDU5QjAwMDA4QkUzREY3QTVFMDZGMzc4NzE1N0NGMkNGQTZFQTNFMUIKKzoxMDU5QzAwMEE5OTJCNzdEQzk0NUI1RUVGRTU1Rjc2MUQ1M0E2NkRCQkMKKzoxMDU5RDAwMDNDRUJBQzYwNDJGRjNGN0Q0Rjk1NzlGOEJDRkUxRjlCQ0UKKzoxMDU5RTAwMDRBMDE3MDAwODAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwQ0EKKzoxMDU5RjAwMDAwMEJCNTdDMEI3ODU0RDVCNUYwM0U3M0U2OTk0QzkyMEMKKzoxMDVBMDAwMDQ5QzgwQjAyRTEwNDQyMEMxOEQyOTlCQ0MwNUJFQTFERTQKKzoxMDVBMTAwMDIwODkwMTVBMUI2Q0I1MjAxODA2OEQ5MEQ3NjQ0MkE4QzYKKzoxMDVBMjAwMDJEQjVEODBDMDYxMUE4REUwQjU3NTRCMDY4Mjc0MDAwREUKKzoxMDVBMzAwMDM1RThBMDAxMjcxOEVBMDA5MjIyNTJCRjk4RkIzN0YyRkUKKzoxMDVBNDAwMEZENUZFMTBCM0U5MDk3OTMxMEI1NTdFRjU1Qjk2QkFERTUKKzoxMDVBNTAwMEJENEZFNjQxMjJEQUZFN0ZGOERBRUREQUVGQkRENzdCMDMKKzoxMDVBNjAwMEFEN0Q4NkIxQjE5NkYzRDE4Q0ZFQUVDOThDMUQzRkZDRTUKKzoxMDVBNzAwMDlFQTI0OTY0NkM0NjgxRDE2QTkwQTAzNDc3MkJDNjAyRkQKKzoxMDVBODAwMDBFQkIwMURFNzU5NUY5MzVCMUJDOUYzNkI0NUZBMkQ3NjgKKzoxMDVBOTAwMDY2QzE3RTc1NjZFQTk3MzkwOEZENzJCMURGOUY0NzZCNzQKKzoxMDVBQTAwMEIxQkU0MTZGMzU2NDMwRjZCNDhFQjk0RDA5OENDNTY4MEUKKzoxMDVBQjAwMDhFQzhCODRFQ0MyMDYzQ0REMDdGQUM4MTMxNjMxRTYzREQKKzoxMDVBQzAwMDI5N0FDNkIwMURGQTMxMjM5NEJCMDZGOTdBRTMxMjFBN0IKKzoxMDVBRDAwMDU2MzA5ODY3NUM4NUQ5REE5QzgxQkJGNTMwNTZDODU4M0EKKzoxMDVBRTAwMERBMjhGRjY4REM1RkRBNEEzREQ1Qzc2ODdBOTQwNjMzNjYKKzoxMDVBRjAwMDYzODEyNkZGREMwRjMzMTkyQjhFOEFDRDY1M0Y4MDUyRTAKKzoxMDVCMDAwMENGQjI3MTFGNEMxMzY1NkQ4NUY1NEFFNEFGQkFEMjAwNzAKKzoxMDVCMTAwMDZFRUM5MDZDQjAzNDJCMzY5NDZGNjcxMzE5QUJENzAyRDAKKzoxMDVCMjAwMDkwODhGRjMzNzk1QTcxMUQ2RDc3RjUxRUU4RDc5MzlDRTUKKzoxMDVCMzAwMDY2REQwOEUwRDhENDgzMkMzMzFGQzZCQkNBNzJEODA0RjQKKzoxMDVCNDAwMEM2OEU1QTFDMzlENjI0Njg2NzlCMjQxQzFGOURDM0M3NjgKKzoxMDVCNTAwMEZGQUMyQzdBODcwQ0UzRkIwRkRGNTRFODgwQkEzQjBDRDgKKzoxMDVCNjAwMENBMDE2NjY1MkNERjNCN0E4MUY2MTY4MEUzOTQ0MkM5NTAKKzoxMDVCNzAwMDAyQjA3NUVDMDJFRDY4ODA1Mzk0MDMxMkI0MUJEREEzRjAKKzoxMDVCODAwMDE3MTRERjgyRTczMzVBM0VDQzY2RUMxNzRDNjI3MTgwMDMKKzoxMDVCOTAwMDk3MENBRDYzQkExNUNFRUIyQ0ZCNDRDRjM0RDgzRUEwQTYKKzoxMDVCQTAwMDJGOUYwQUY3NkE4NTQ5NjBGREE0QTM3MDRGQjBDRjgxOEIKKzoxMDVCQjAwMDM5MzE5RTFENzAzRTk2QTMxNDYyN0JCQTZFMjBENjAyQzgKKzoxMDVCQzAwMEY3RDFGRjk1QjZDQzYzQTY3MUIxM0Y4N0ZBNkJGOEY3QjIKKzoxMDVCRDAwMEFGOEMzREQ3Mjk1M0JEMEFBQkU1Mzc1Njg5RUVENzk1MzMKKzoxMDVCRTAwMDY5N0UwQ0VGQUYzRUQ1NjhBNEIyRjM2QTI5QzM3OUI0REQKKzoxMDVCRjAwMEU1OTk3N0MwM0M3NjNENUI1MjlFNzNGREY4MDFBQjg2MUMKKzoxMDVDMDAwMEY2OTVCMTBFMTAzQTg2QzhDQkNFMTRGOEJGMjhBNkMyQkUKKzoxMDVDMTAwMDZFMzY5REIxOTY1RjQxQzVCRkYwNzYzODA5RDM0RkQyM0QKKzoxMDVDMjAwMDA4Rjg5NkFEQzVEQUIwRkU3NkVDMUY2QzY3NzYyMzBCRUMKKzoxMDVDMzAwMDhFNzc1QUE3NkU1RDlCMjlENjQzM0MyRjYzOUU0OTcwOTEKKzoxMDVDNDAwMDg0MzRENjIwMzFCOEJGNTRFNjI3RkNCQzY0NEJBMDczMjMKKzoxMDVDNTAwMEQxMUZFMEU5RDk0NDUzQ0I0NkE0NTcxOUU4MzI4RjRBMDMKKzoxMDVDNjAwMDY2ODEzMjJEMUFENjgzRjZCNDM3NEMxRUE0QUI1RDI2NUUKKzoxMDVDNzAwMDRFQjc5OTFBNUVFRUQyRjBGRUZBMjhFNjQ2M0ExRDA3QjQKKzoxMDVDODAwMDMwODNGMjZEOUJFMzc3QjYyNDlBQzc0RkYzQzhGQjZENjAKKzoxMDVDOTAwMDQ4OEZBMzk5OTdENjRGNjE2RURBOEZEQTZGMkNFQjM2NjcKKzoxMDVDQTAwMDIxQ0NCNDAzNTk4NDRGNTkzM0VDN0QyNkQ5NjY2RTQ2MTYKKzoxMDVDQjAwMDNBMEIzNEQ5RDk0N0RBNjA3RDIwM0E3NjU1MjhGRUVBODYKKzoxMDVDQzAwMDcxQkMzOTc0REMyQzFBQTc4RTc3QUVEMkIwOEY0NkUxNDYKKzoxMDVDRDAwMEUxRkQ0NDNGQ0U0QzhEREQ5MzgzRTNEODlCNTIxRUQ2MkQKKzoxMDVDRTAwMDc3RUJDQjYzODJFMzdBOUI4Q0VDMjNCOEQ3RkZEM0M0RUEKKzoxMDVDRjAwMEE4M0NERDY0QTFGNUZGNkY1MzJBOTU3RjZCNTJBOEZFODcKKzoxMDVEMDAwMDZDNTMzNjk1N0Q0RDU2QUE3RkJGNjkzQTk1NzcyRDhBOUIKKzoxMDVEMTAwMDI5NDBGQTc3Rjk2NkIyOEY4QzQyQ0VDMEZGOUM1RTlEMTcKKzoxMDVEMjAwMEEzMkYwNEVFOUQzOTNDMURCRDI2RThBODM3NjNGOEY2ODUKKzoxMDVEMzAwMDZFNkMwNzdDRjZERUNBRjFEOTdGM0ZGM0VDQzgyMEJBNUYKKzoxMDVENDAwMDVDNkI0OUI4MUVGRjMwQzI4NEU3RUI4RjYxMEJCQzcwRkYKKzoxMDVENTAwMDRGNkYxNzQ4MzQ3RkZGNjgwRUVGQjdFQTY4M0VCQjg2ODcKKzoxMDVENjAwMDZEQzVGMTZGMTdFOEY5RkMxMzM0NTVEODZFNEZFMEYzQTkKKzoxMDVENzAwMEY2NjYwMTBDRkI1OTMwN0RFNkNCQzg5N0Y2NjRBOENGRDgKKzoxMDVEODAwMDBCQzJCRDUzNzhCQjdEMENBRjU3RjdBQkI2RkZDRTY2RTkKKzoxMDVEOTAwMEUxNzQyOEYwREVBRjgzRjU3Mzg4REU2OTdFQjVGRkQ3NDYKKzoxMDVEQTAwMDQ1OUMwRjIzRkI3QjMyMzU2NTlFNjFFRTIzQzFDNkZCMEMKKzoxMDVEQjAwMDEzNUZDMDdEQjg5MTBGMzI0MkY4QTI1RTIxQkU1MEU5NTgKKzoxMDVEQzAwMDUwQTVCRjk3NkNGQzlFMzMwRDgyQ0U0MTI3RDBGREExMUMKKzoxMDVERDAwMDZFNDBGOTlBMDI3QzIwRDFCREQ4MTk5QzY3OTcyNEY4QUYKKzoxMDVERTAwMDI1OTIxRkEwNDQzOUFFRjI4M0NBMDcyQUJEQTcwMTlGOUUKKzoxMDVERjAwMDQ5MDlDMTczRkMyODgyNUVENUYyQjQ5NUUzQTUzQjM5MEQKKzoxMDVFMDAwMEU2MDFDMjZCQTdDRTAyQTIxMEZBMDMyMjEzMTBCRUIzQTIKKzoxMDVFMTAwMEMwMEVFMzRBMUUzNTM3MEMyN0JGRTJGRUQ5N0I1MEU1QTIKKzoxMDVFMjAwMEMxMDhGNzcwRERGOUY1QkNGQ0JFRTcyN0Y5ODY3MjFCRTcKKzoxMDVFMzAwMEU5NzYxODc5RjVCNTM1ODFGNkEzRDI2RDkyQ0RGRTVGN0UKKzoxMDVFNDAwMDQ4M0ZGRDkyNDkyQkM1NDE2OUUyNzQxMzc5RkVCNzBCQjcKKzoxMDVFNTAwMEY4Mzk1NEZBNzlDOUM2QjhCRUM0NzM0RUJDNUVERUE5MUYKKzoxMDVFNjAwMEU3MTkzQUU3NzI0NjcyMkYzMzhBRDc0N0UyNTczRDU3MTAKKzoxMDVFNzAwMDg4REM4QkIxMTUwNkVGOTMzMTZFMEY4QzA1N0I2MDYzNjgKKzoxMDVFODAwMDQ2OTA3RTAzNDk1RjJFNDNGREI1Q0RBQUQwRkVGRUEwMEQKKzoxMDVFOTAwMDkxMDlGRkFBM0UxOUFBOTdFNDI1RjM3M0MyRjQwQ0IzNDMKKzoxMDVFQTAwMDAwMUUwNzBFMUI4OEJGRkQxQTU2RjUwQThDNkIyNTU1ODAKKzoxMDVFQjAwMDExM0NGNzZEMzYyRTBGMDYxNzRDRDJBQzgyN0QwNUZFRDUKKzoxMDVFQzAwMDZFNzZBM0RFMEE4QzE5MzgyQkMxRjhDMDU2MzA0MEM4NTQKKzoxMDVFRDAwMDdFQjBGRjU4NEE2NkVDN0VEMDI5QTg5N0FFODA5QzYzQkUKKzoxMDVFRTAwMDU5OENDOURCM0UzRjJCQzFCRTk3NkQ5MzE5REEzNTAxNDIKKzoxMDVFRjAwMDEwREIzMjhDNzMzRDE5RTMzMUYyNzE4Q0MxQjgzQTMxNDkKKzoxMDVGMDAwMEFFNzlFQkE3NzcyMTdEOUQwN0ZBNDRGQkU2MjM1M0ZEOEQKKzoxMDVGMTAwMDA0MDY3NkNGRUM2RDNBQkFDNzY1MzE3QTBGRDYxRkRCMkYKKzoxMDVGMjAwMEZBQzQ4OTQ1MDA5RjZGOTcxNEI0Mzc0QTY1MzNCNUQ3RDMKKzoxMDVGMzAwMDNDMkY3QjcwOUQzQTczRTk0NTA5RUM5QzQwN0JDQjUzMjkKKzoxMDVGNDAwMDUxNTBFRkRDQUI2MzI2MTg1N0RBMkU1OUZEMzBGRjcyNDMKKzoxMDVGNTAwMDZGMENERTBDNUJCNjQ1Rjc3RTVGNzY1MDZFREUyNkY0ODYKKzoxMDVGNjAwMDU4RDUyRUM5MDMxNEMzQUFCNjg3QjdEN0VDMEE4N0VCNTYKKzoxMDVGNzAwMDk4MzYwOEMzRkNCMzZDMzE4OTY0RkY0RDY2MzZCNEZGQjQKKzoxMDVGODAwMEQ4OTYwNDU0NTY0MzcyM0I5MkFFNTA2RDIzN0VFQzhERUUKKzoxMDVGOTAwMDVDMUUzM0Y2NTlGMjFENDA5N0YyRTFDRkQzREYzNzczMjEKKzoxMDVGQTAwMDc4QkU4MENGMDFGQ0M5RTdGQ0ZFRDU3QkFCMTczMkZGODIKKzoxMDVGQjAwMDkzRDFBQ0MwMEJFN0FDM0Y2Q0IyQjhFMTYwRjUxRDMyRDkKKzoxMDVGQzAwMDlEMjNFMDhEQTM3Qjc2NDVGNURENEU3QzdBNDhCNkEwMTcKKzoxMDVGRDAwMDFEQjZDMTI3QkJCMURERDk2OURBQTk4MTczRDYxRjkwN0YKKzoxMDVGRTAwMDE4REE5RjRFOUZDMUMzRUZFOUVBMzI2QzVGRUUzMzU5NzYKKzoxMDVGRjAwMDE0NkMzRjY0NjAzMjhDMEYwMERFNEM4OEM3NzE3RDg0NjYKKzoxMDYwMDAwMDdGQzQyQkRBQTdGMEY3NjNBOTI4ODg3RjE5RjE5NTE4QzgKKzoxMDYwMTAwMEM0NTdGMzU2QkU5RkYzN0IzOTdFNEFFNUQ1NUFDMjU3MjMKKzoxMDYwMjAwMDhCQzQ1MjQyRjBGQzY3Q0Q4QjQzRjhDMjdFQjNCN0ZEMDAKKzoxMDYwMzAwMEI1MEJGMUJDMENGNjY3NTAxMEVGMzJFMUY5M0NFMDA3MEMKKzoxMDYwNDAwMEU3RDUxRkZFMjhCRENGMUNDNEI3MENGOEZFQUQzQTFFMjUKKzoxMDYwNTAwMEZBMkZCRjAxQkVBQjk4N0IxRERBNzNERjE3Q0Y2OUM4N0IKKzoxMDYwNjAwMEZGNDk2NEY3OUVGRjAzREFCRDMxNjA4RjIzRTkwOEZCMjcKKzoxMDYwNzAwMDM4QTlCNkY3NzgyMjJDNTg5MTcwRDlCOTAyRUEyN0E1MjkKKzoxMDYwODAwMEJFQzIzMkMxNEU5MEUyMUQ4RjIyNUY5RjlERjM5NzQ3QTMKKzoxMDYwOTAwMDEwMUQzRDczNUZCNDIxNUQzNEVCRkE1QTlGODYwQTc3NzkKKzoxMDYwQTAwMDdDQjQxNTc5QjAzRjYzRkVGNkQ3NjA5REUyODQyRkQzQjAKKzoxMDYwQjAwMEY3MjNCRkZDQzk2MDQxNzI3QTQyRjAyM0ZFMTkwMUZGNDkKKzoxMDYwQzAwMDRFQzZFRjFCRjA3ODBFQ0ZFRkVDMzRGODBENzA4RkFDQUUKKzoxMDYwRDAwMEJEQzQzRTY0MEY0QzQwN0RFQ0Q1QTM5QzJBRDEwRjU0MjcKKzoxMDYwRTAwMEFDNDA3QjFDRTZDMzc1MjQyMDIzRTRFQkRBQ0UzRjlGNTMKKzoxMDYwRjAwMDk2NjA5Q0E0MjRCMkM1MDgxQkNEN0UxOUU3NjlEMzVEQzgKKzoxMDYxMDAwMDE5M0EzN0NDMjM1OUZFNDJGRERBNkMxM0U4RkMxMzUzREQKKzoxMDYxMTAwMDdFQTRBMEZDNjk1RUM4MUM1MTEzQkY0RENFMzM5MkYzMjAKKzoxMDYxMjAwMENGMEE3RjY1NDRGQjZGMDQ3OUFGREE3RENDM0QzNjFFMjQKKzoxMDYxMzAwMEY5MEJFRjgyRjMwRjk3M0JDQkE3MzNGMTI3Rjg0MkMwNUYKKzoxMDYxNDAwMDU1NkJEQ0IxNDZFOEJDRkM2NjZCMkE5RUZGNjNBNEIzQ0EKKzoxMDYxNTAwMDU4QTRCRjUzREE1MUIwQUZCQTU2ODlGMDU2OEZGNDgzQzIKKzoxMDYxNjAwMEZFMTVFQTM3QThFRkY3MEEzOUYyN0M3N0YxQTg0NDJDM0MKKzoxMDYxNzAwMDI1MkI3MDJBQUJFRTk0QUQ3RTY4QUZGNjcxN0FCQThFOUQKKzoxMDYxODAwMDZFODRGQ0E4NjlFM0YyRTMzQTNBNkEwMzM4QzQ0RUFCODIKKzoxMDYxOTAwMDQ3QkE1MjYxQzBGN0M5QTBGQzk4N0EwREY2RkJGMjM0RjkKKzoxMDYxQTAwMDI2RjQ5NTVCRDA1QjRFNUMxRkQwQ0IyMDUzRTIyQzM5OUMKKzoxMDYxQjAwMDIxN0E0QkUyRjY5NjJBNTc2RURBMEFBMjNFNjREREM5Q0UKKzoxMDYxQzAwMDFFMjNEMzg2QUM3QkYzNUU0QjE4M0NENTlCMUFENkZGQkYKKzoxMDYxRDAwMDA3M0UyNUFDRERFNkNGMEU2QkNGM0Y2MTBEODMwQkJCRDkKKzoxMDYxRTAwMEE3ODdGNTlGNzZEQTFFMDZERkQyNTcxNkQ2RkY4NzE3RTgKKzoxMDYxRjAwMENBQzNFMEMxMUMzOENGMzA3NkM3OTAxRTRBOTVDMkZBOTgKKzoxMDYyMDAwMENGNTE0QzYxRjNDRkNCOEUwRjgzMDdDREUyN0U4NDFEM0YKKzoxMDYyMTAwMEE4REFBNzVGRDhCODFEMTQ1OUFBRjdGQjEzNkJGODNBOTAKKzoxMDYyMjAwMEFBNUZGQ0QzRTlFMUVCQ0RCNzg3QUZGNzVERjFCMjFCMTUKKzoxMDYyMzAwMEVDN0UyREQ4RjU3QjQxM0Y2MkY5MDJEOEZGNUFCMEVCRDYKKzoxMDYyNDAwMERCQzBGRTQ3RjgyNUIwRkZCMUY0ODJGRDhGRjVBRjgwQ0IKKzoxMDYyNTAwMEZEOEY3MDNCRDhGRjA4MUYwNDdGMDU2MTVGNTMxOTk1QzAKKzoxMDYyNjAwMDg3OUFDQUE5RkU0NkY3RDcyNUQ2M0QyMUQ2M0QyOUQ2MUQKKzoxMDYyNzAwMEZENDdFRjQ5MkQ5RDY1OTMzNDVGMDA5RkNFNENCOEE4MzQKKzoxMDYyODAwMDQ3Mzk2QzZGRUMyQkM1MzhDMEMwNUIzMkRCODEwQ0UyNDgKKzoxMDYyOTAwMEYwOUM2ODRBNDQ3RDM0OEFBMUREQzJDQTA3REVDNjM4NTQKKzoxMDYyQTAwMDQ1RkQ4MTg5OTY4RDBBRUFBMUZGN0MwN0RCMDNFREIyRUIKKzoxMDYyQjAwMDgyRjJGQ0E4RUY4MzU4OUNFN0NBMTdDMDg3RjkzOEVFMzIKKzoxMDYyQzAwMDgzNThGNDhGRUJCRTY0MDQ2Rjg0NzYwNUUwMzlGQjQxOUMKKzoxMDYyRDAwMDMwOTAzRDAzNzIwREZCNjdBQUIwNDdDRkEwMkM2RkRCNTcKKzoxMDYyRTAwMEFGNDc3Q0Q0RUVERDRGRUQ2Rjc5NzVFMUVEN0I1QkMyOUUKKzoxMDYyRjAwMERBMkREODFGQ0E1QUFEODdGQ0ZCNEIzRTc1M0UzRkY1RTEKKzoxMDYzMDAwMEFGQ0I5NEVDNjgxNzVGREFGQjlGQzlDQkIwNUZEQkJCMDgKKzoxMDYzMTAwMEM5Rjc3RENCN0Q3RjcyRjBDNTFDOTRFQjRFRDBDMzdFNTgKKzoxMDYzMjAwMDczNzAxRTY3ODc0RUMwN0NERjc1OTlGQjRCMTM1MDExNEQKKzoxMDYzMzAwMEI0NDk2QzEyMTQ1N0Q4MjZCNjBBRTQ1REFEQUZCNTBFNTkKKzoxMDYzNDAwMEU1NTA2REY2MjIxRENCMjA3OTI0RTIwRDIwNkREMTVFNDMKKzoxMDYzNTAwMDQyRTcxRUVFRUY4QUY3RDNEOEZCNjBERTM3QkNDNzZGOEIKKzoxMDYzNjAwMEI3MjNGRTNBOEZDNUUyQkFGREVENzI5ODNGNzM3NzFFRjAKKzoxMDYzNzAwMEI3NUJFRkNFRDMxM0RFQUVCNDFGOEI1NUEwN0Q4M0Y3OTIKKzoxMDYzODAwMDE4QkY2RkFEOUZDRTdENTRDMEZENTBEMjNERkI2NDNBMjcKKzoxMDYzOTAwMDc3RjUxNzFBQkE3Rjc1QkVGQkYzNjQ5QTY3OEU2RjUyNTIKKzoxMDYzQTAwMDBDOUVBQkM3Q0JENzczRTUyOUI0Q0U5Q0NDQTU5NUI4RDIKKzoxMDYzQjAwMEZGOTNBOTBCMEI2NUIyRjM0MDMwQTM1QzlEMzJBRjE1ODAKKzoxMDYzQzAwMEUzMDNCNTVFRDkzRTlDQkZCNTQ2Q0NEQkE1RTM3NEY4Q0MKKzoxMDYzRDAwMDU2RTZBQjVENjM4MDNFNEU5NjhEQjI5MUNDMTdGRDdFNDYKKzoxMDYzRTAwMDkzQzdFREYxNTJCRDIzMTNGNTQyOEY1OTg5NDEzQTdFOEYKKzoxMDYzRjAwMEI4NkM2MjBDRTJGNTI4OTY1ODVGQjY1M0VGODBCMkE2RUYKKzoxMDY0MDAwMDlEQUZENzYzRTk4RTQ1N0FFQjY5Q0Y5N0QxNkU1MUU3OUYKKzoxMDY0MTAwMDVCODlFQjE2ODZEMEY1MTBERURDODRBNzJBNEY4QjE5M0EKKzoxMDY0MjAwMEU3MDlFMjhGRDdCQkYyQjgxRDdFRDJGM0VFNUQ2OEE3MTUKKzoxMDY0MzAwMEY0NjQ0NzVCMTEyRjVEN0E0NkZFNkQyREUwMTVGNTQxNDIKKzoxMDY0NDAwMDRGNjc1QTBCREU4M0JBOUU0QkUwQTMzRjVCNDM3ODBENDgKKzoxMDY0NTAwMEY4NzRBMkRGQTI1NjE2RDY0RkM3RjFCNTJCN0MzRjE2QjMKKzoxMDY0NjAwMENGQjk3RjVCODQ3QUU5NTlCMEFCQTFCQTRFRDc5MDhDOTMKKzoxMDY0NzAwMEU3RkY3ODdCRjhGRUFBQzQzREQ3RTlGQ0M5QzkyMUY0M0YKKzoxMDY0ODAwMDVBRDczMUM0MkY2NkEyRUYwRTk1M0YxNEMyQTc4QUM3MTAKKzoxMDY0OTAwMDlFNkM2RUI3RjVBNDFBM0NFODJGRDZFRDZGMjVCQUJFRjgKKzoxMDY0QTAwMDNFQkVEMzlEODE3NjdFREFBRjhEMTQzN0JDOTEzRkFCNzMKKzoxMDY0QjAwMERBMDEyMTdFMEY0MzNGNEU1NzM2QjE1MDMzMjFBOEVGMEEKKzoxMDY0QzAwMEFGRDlFQzJGRTYxNUEyM0Y1NDRFRkU1RTBGMUI1ODg2NDcKKzoxMDY0RDAwMENBREY4OTc2NzAxQ0NBRERCRjNEODVFQjBFQjY4M0JENzEKKzoxMDY0RTAwMDA3RUIzQThEQkVCOTFGODI5RDM1NjgwNTQ2ODE3RDBGNDkKKzoxMDY0RjAwMDZFRDc3OTg0N0Y2MjQ2RkI3NDk5QjA0RjNGNTYxQzQ1MzYKKzoxMDY1MDAwMDMyRTg1N0U3MUEwRDlEQUYyRTI3OEFEQkI1NDI0RTdFNDMKKzoxMDY1MTAwMEIyM0ZFM0E3NDhBRjc1Mjc2NDhCMTFFRDUwRjA1QjA4REQKKzoxMDY1MjAwMDZFRTM3NjQxQkQzN0UzREY2N0EwQkREREE2MjMzQjQwQzgKKzoxMDY1MzAwMEI1M0I5Q0MyRUUzODJGRUNEOUYzNkIwNkY0NjRBRjFFNkEKKzoxMDY1NDAwMDk2RDgxM0IwOEYyQURGRTZBRTM0Njg3N0U2Q0MyNTdCODkKKzoxMDY1NTAwMEQ1MjlCNzUxRkM3MUY5RDY3MEJCQTBEQTEzMEVEN0VFNkUKKzoxMDY1NjAwMDBEODc5RDExNzY4M0VBQjdGNUU0MEREOTBGOTNEMUZGMUUKKzoxMDY1NzAwMDI4OTE2N0E0MjAxRjdDMkNGMEE5RkEyMzJCQTc1QTUzM0IKKzoxMDY1ODAwMDkwREYzNzY4OTVCOTZBM0MwMEVGQzk3NUY4RDU2QURDQzkKKzoxMDY1OTAwMEFGQTcyRUNBNEE3RUMxQUE0Mzc0OUZGRDlGNzFCRkEzQjUKKzoxMDY1QTAwMDNGOTU3MUZCODhGMTdCRURGNzcxRkE3NkU5MjRFRTY3OTAKKzoxMDY1QjAwMDAwQjlEMjdDNDZDOUIzMDY5QUZBREQ4M0IxMjQ5NzE4OTQKKzoxMDY1QzAwMDJCNDM3RTY4NUNDOEZENDgzQkM2NUNBMURDOTcyN0UyOTQKKzoxMDY1RDAwMDQ1MTFGQUYyNTY2RDlGMUMxRjIyMUYzRUNCOUI0MEZCQkMKKzoxMDY1RTAwMDJGRDYzMzA3RUFBOTk1MzE1NkQyNUJFMzhERENERTJFMzgKKzoxMDY1RjAwMDU5RURCNTIxMUQ4QzA3RkZEODEwMTJDRjFFNkYxRTkwQ0MKKzoxMDY2MDAwMEIwREZBRTg3NzhGQzVDRjVFRkU3NkIyREJBRjgxMEJEMTQKKzoxMDY2MTAwMDA3OTIyNzZDN0U5MDI0N0NGQzhERTZCN0MwRkNFNkUwRjgKKzoxMDY2MjAwMEZDNzBERjcxNzhERjlGMTY1ODQ5MUZBN0NGNjdBQzlCQkUKKzoxMDY2MzAwMEY4QjE4MUY4NTEzRENGMTVBMEIzNjJBMDMzOEM5OTIwRjkKKzoxMDY2NDAwMERFRUFCNjFGQTEzOEIwOTM3NTkzM0Y1MjFBQ0JGNzUxQ0IKKzoxMDY2NTAwMDhBRkI0MTM4OEE5Nzk2N0MyRTM3Q0FGM0Y5QkQzNTBCRjEKKzoxMDY2NjAwMDU4OTU1QjZGRTVEQkUzRjNBMURDOUJFRjQ4Q0FBNzdBQTMKKzoxMDY2NzAwMDBCRDFFNTRBNDEyQjYwQTdBNEY0MEQyMzc3MUJGRkMyODEKKzoxMDY2ODAwMEZEQUE0RjgxMEY5MENGRUY2OTkwOTRDQzMwM0I4OEQzMTcKKzoxMDY2OTAwMEI3OEI1N0IxQ0JDQ0RCM0IwM0VGQzE2REVGQ0U0RTQ2OTIKKzoxMDY2QTAwMDNGOEFGM0Q1OTI1NTI2MjUzMzg0NEU1RDQ4RTc3MDJGRjcKKzoxMDY2QjAwMDU1OTZFQTFGQTNEREVENTg5NUFDNjBCQ0RGODU3NDNGQUQKKzoxMDY2QzAwMDAxQUY5MUQzNzUyMkZDNDNGRkUyM0EzQUY3ODZDM0YwNUIKKzoxMDY2RDAwMEI3MURFOUFCOUUxOUFDQTg0NzVDQkVDODc2QUIxNkUzMDQKKzoxMDY2RTAwMDNBRjlGOUMwMDczNzA3RjkyMDVERDA2NThCNDNGMkEwNkUKKzoxMDY2RjAwMERDNkZGOTRBQ0JFMzU4OEIyNThBNUJERDA5OTU0ODk3MTcKKzoxMDY3MDAwMEY0ODdGREFBNjY3QTcwRkUzQjAxNDQ3Rjg4NkQ0OTI0QjgKKzoxMDY3MTAwMEJFQTE0NjkwMjMzRjE3RTdCRDUzRUIzRjgyN0M3QzVDRDQKKzoxMDY3MjAwMEU3Q0RDMDc4Q0E3MTI3Q0ZFQjJDNjQ2MDcwODA3QzU5QUMKKzoxMDY3MzAwMENDQkFBOUVDOERBRTNGRTBBN0M5RERFM0QwNkY3RUNGMjgKKzoxMDY3NDAwMDYxQTAzODRFQ0JEQTFEMzEyODRGNzNEOTVBQ0JGOTZDODIKKzoxMDY3NTAwMDU0RUU2Q0VGQjVGQzkxRUQwQTIwMjQ3NjVFQzUwQkM1QjYKKzoxMDY3NjAwMDg1MzYxMUZFNTVCQ0VFQ0RCN0NGNDdGQzhGMzRCRUY2NTMKKzoxMDY3NzAwMEFGMDc2RTQ3OTdBMkY2ODE1NjdEMEEyNzlCRUVFQ0EyRTMKKzoxMDY3ODAwMDIwRkU1Q0NDOUI4REZCNTVGMTM1ODQzRkQ4RjM1OEI4ODcKKzoxMDY3OTAwMDg3MDU2Q0EwMDhGRDFBMTU2RjQ2RjgzNzFDREVENEZCODAKKzoxMDY3QTAwMDRDRDcwREZDMENBRjBDRjQxMkM5OTc0ODdDQUFGNzVCRDAKKzoxMDY3QjAwMENGMUE3NDNDQ0VENUYwQ0U0MkU4N0ZGNzVBOEQ4MkY2RTAKKzoxMDY3QzAwMEUxNzVGOEJEMDExRUZDMjZERUU0OEY5MUM4REYxQzA5Q0YKKzoxMDY3RDAwMDJGMkEzRTU0RkM5QzhFRTdFMzRFREYyMzUzOUNFRUZGQjIKKzoxMDY3RTAwMDM1NUVERUNBNzczQ0ZBNkRGQzE4Qzk3RjIzRjFEQjkyNzcKKzoxMDY3RjAwMDU1MTE3QzE5QzE3RjJBQkUxQ0FCNjI4OUNGNTQzQ0Q2OEYKKzoxMDY4MDAwMDI5OENGQ0Q2QkFDRTE4QUI4NzA1RjE2Nzg2N0Y4ODNGMDYKKzoxMDY4MTAwMENDNTM1MDNDQTY1RDYyQ0Y0OERGODUwRkZCMjhBRjExRkIKKzoxMDY4MjAwMDg5MUZBMDBEM0JDQUY1OUQxMUZDQTdFMjZEMjRGOUEzQjkKKzoxMDY4MzAwMENBQUYzM0NDN0ZEQzIyNTE3RTgwRjNFN0FGMEMxRUNDOTUKKzoxMDY4NDAwMDJGQUFGOTAxMzUwRjcwNENDOEJGQzhGMjBDRDgxRDk4OUIKKzoxMDY4NTAwMDc3RDk5OEREOTM4NEY2NUFBRjVFOUQ4N0U3MUZDRkFDNUEKKzoxMDY4NjAwMEU5MUVCNzAyQzY5Rjk5QzlDQjVFQjREMzQyNjA3QjE0QzAKKzoxMDY4NzAwMDhGQzM5RDE5NkQ3MEUzQkQ5RDkxMjZDRjQyM0Q3RTQ2MkQKKzoxMDY4ODAwMEZBRjVFRDFDNEVEMTJCMDgyRjRDOTk2NTAxQjg1N0E3OEUKKzoxMDY4OTAwMEM2RUQxRTE2NzJEODQzRTU5OTg1RDM4QUE5OUZDNERFM0EKKzoxMDY4QTAwMEM0RkI1MDI0NTY0RUVCNDg1MjQyMTlFQ0U3Q0MwMzkzRkMKKzoxMDY4QjAwMEYyOUE1OUYwRkNBRkU0NzM3QkQ2MkJFNEY5NTAxQ0ZCNDEKKzoxMDY4QzAwMDM3MTJDNUIxOTc4MDBBQjA2MEJDN0RENkQzNjUxM0EwREUKKzoxMDY4RDAwMEZFRUM4MzEzNkQ5NEZGNkIwQzVGMUZGNTY4MDZDNTA3MTQKKzoxMDY4RTAwMDM3RDM3Q0I3N0UzMUEwNUI5QTEzRENENzkwRkUyQkJFRUEKKzoxMDY4RjAwMENBRUIyQjI3OTEzRjUxMjU3MDY4NEY5OENDRkQ1OENGOUMKKzoxMDY5MDAwMEM0MzhENDQ3QUE3RTFBM0NGMUFBMzkzNDdFNzkxMUY0RUUKKzoxMDY5MTAwMDE3RDM4N0MwOTMxRjRGMEZENTZGNDc3NkZGM0UwQkU3MDYKKzoxMDY5MjAwMEE5RDJCQjczQUQ1MDdGQTFFNTBGRTk2ODA3NTRFRDdFOTYKKzoxMDY5MzAwMDM0OEJFQ0QyREQxQkIyRDBCRkE4REFGMUZCMkMzQkMxMEIKKzoxMDY5NDAwMEQxMEVGMjZGQjRGQ0RDOTdGN0REQjI3MzYzODgxREZDRTcKKzoxMDY5NTAwMDYwMjFGNzBCMTYxQjhGOTRBMDdEM0FGN0U2NEYxRUMxRkUKKzoxMDY5NjAwMDc4RjhBNDA3MjU4QThCRERDM0JBMUY0MUJENTk5MUNEQTQKKzoxMDY5NzAwMEY5ODg2RDMxOTI1Qzg3RjkyOEVGRDgzQUY5MjdCQjUwMzYKKzoxMDY5ODAwMDlFOUZDQ0ZFNDA1NzA5RkQ0QzA1NUFCQThGMEFFNjc5MDYKKzoxMDY5OTAwMDJDMDVFMzYxRUIyNThBODcwNUZCOEZBMzNDRTZEMkI1ODYKKzoxMDY5QTAwMDkyM0UzNTExRjU2MUJDNEQ1NjcwNUMzQ0VERTNERUY1NzEKKzoxMDY5QjAwMEI2MkVBQ0FGNThDREVCRTcxQTNDRUQzRDM4Q0ZEMzdBQ0QKKzoxMDY5QzAwMDZCQUI4MjEzOTU0RjI4MEZDOTBCOUIwQUI4REZCNUU0NTgKKzoxMDY5RDAwMDMxODlFQzcxNzU5RDQ5NEYyNUI3ODQ5RUQzNTQyMEY0QkQKKzoxMDY5RTAwMEY5OEM2RUUyRkY5RjBBQkNGQzc4RjVCQjZGQTYyQTk4NzMKKzoxMDY5RjAwMDRGNzJDNDE1NDBGQjNCNEY5RUNGNDRGOTU1OUM3MDMxRkMKKzoxMDZBMDAwMDA3RTk3QzkyREVGMTRDMzU5RTdCODc4MUUyODcwNUI5RjAKKzoxMDZBMTAwMDY5NzIwQUY0Q0ZGQkU1Q0MyN0IwNUNCMjdBRTkzM0Q1RDIKKzoxMDZBMjAwMDE4MDdERDZBMjQzRjRBREQ1RkEzQTQ2OEQwREYzQ0Q2QTcKKzoxMDZBMzAwMEYyOEI3QkYxREUyRTNDNjkyNDNCQkFCMUU1QTYxNDM2MUQKKzoxMDZBNDAwMDBDOUZBQUU1MUVDMEJGOTJDNUQ4RjM0RDQ2MkE1RjZDQzUKKzoxMDZBNTAwMEIyMzAwNThFQjhBRjI5OTVFMDk3OUIxNDJBRDkwMjRFMjMKKzoxMDZBNjAwMDVGOERDMjVGMUQ2OUJFN0NGMEY3MTU5MDU3MDVFQjYxMjUKKzoxMDZBNzAwMDNFQjAzNzZEMjZGQjE0M0NFN0E0MjlDRTFEMUJDNEI5REMKKzoxMDZBODAwMDI2QzE3ODlCM0I2MzM2REU0M0MxODYxNTVENjg4QTI2NDYKKzoxMDZBOTAwMDE3RjBGQ0UyREIzREVCRDNDOThFNUU3REVFQjk2QTY4OTAKKzoxMDZBQTAwMDVGNUE1MDlFNUYwMEY3NkREQzdFOTVGQ0ZDNjMxRDhGODYKKzoxMDZBQjAwMDU2NTA1QzdGODc4MTlGNEY5Q0ZCQzI5MzU5MjlDRjYwQzIKKzoxMDZBQzAwMERDRjUyRDFERjlERkFFRURFNzlFREIwMEU1N0Q4RkFEM0EKKzoxMDZBRDAwMEQwODdEMkZCNzczREFGNERFQ0U3NDY3QzM1RDIzRDdDOEQKKzoxMDZBRTAwMDdGQkVGQTdEM0FGMUNGMEVFMEFCOUM3RjlDQUY1Q0FCRjIKKzoxMDZBRjAwMEQ3RDBGRDNENUE1MDdFMzdERUZCMDU5RDNCMURGOUU5QTEKKzoxMDZCMDAwMEMyRTQxRjExOURCQjBGNEI3NEZGQUExQzU3QzcyRjEwNjcKKzoxMDZCMTAwMEU3QURENTc4MUYyMzdCNTBDOEYxQ0ZDMUYzQzNGQjNENTAKKzoxMDZCMjAwMEQyRjE3MTE2REFDMzlGRkIxNjdFRUJCOTBGMzY2MTA2MDAKKzoxMDZCMzAwMDFERTM1QTQ2MkEyM0RCOEJGNDhFODk1NjM4NUY5MTg2RjMKKzoxMDZCNDAwMERCQzE5MUVEMEYxN0E4NzE3MTlFNkZDNzNGOEMwQkQ3RkEKKzoxMDZCNTAwMDA5RkRFOTg0OERDNTI1QTBGRTkzRkM1MUI5OThFN0I4REQKKzoxMDZCNjAwMEVEQTIxNkZEMkZGMEVCREUwRkI3MkZEOUZCMjE3QTdDQkIKKzoxMDZCNzAwMEE0RkRERUE4QUNDNzc5QjQ0MUI5M0JFREI0ODZGOTQzQjYKKzoxMDZCODAwMEY0RjYyRDdENTFDQzFGQjJFRTkwREYwMTc1N0FDQ0IzQjcKKzoxMDZCOTAwMDc0OEMyNkI5ODA3OEMzQkM0Q0EwNjNGMjBFODQyRkVBQjMKKzoxMDZCQTAwMDM5MUUwMzA3QzFCRkUyNzExNTI2MTcwNUNGNzlCMUUzN0UKKzoxMDZCQjAwMDcyMkVDQUQ5QzhGM0Q2MUZCQTRDRjQ1MUU3N0JGNEFBOTcKKzoxMDZCQzAwMDQ0RTc5RjczNTE5QjdCRTNGMzFGRDk3RDM5MTdGMTc3MUUKKzoxMDZCRDAwMDUxRDc1Nzg0N0U1NDQwREY5NzhCNzhBODdGOURDQkYzQTUKKzoxMDZCRTAwMEVGN0IwRjZBN0RGNTdBM0Q4RkVGNDkxNkYyMDc0QkU0OTQKKzoxMDZCRjAwMDJCRTRDNzA3NEU3MDNGQkVCRTYzMjdDOUQzQzE0RTFFRUMKKzoxMDZDMDAwMDRGNzE2OUJBNEI1MzMwRkVEMDcwQUUwQkU1RDk2MDJBOTQKKzoxMDZDMTAwMEY3QUY2MDdFM0JERURCOEM4OTQyMEY2QTA3RDJFNzgzRTkKKzoxMDZDMjAwMDVDM0IyQUYyQjVBQTVGNzcwMUY5NTc4RkYzNzhFQkU4NUUKKzoxMDZDMzAwMDNENTI2RTM0NDNCQkUyMTJGMjMzRDQ1N0FDQ0E1ODg3OEMKKzoxMDZDNDAwMDc0N0VDMTkzODQ5MTIwRjY3NkVFRkZENDUzRkNFRDhERDMKKzoxMDZDNTAwMDY4OEI0Qzc2MkJENDg2RTA2RkU4MUMxRTk5M0Y5QzYxQjQKKzoxMDZDNjAwMEFBOUYxRUNERUMyMUZENUM3QUU1QTdFNDFGOUZFNDc5ODUKKzoxMDZDNzAwMDMyRDcxNENFNEZFQzEwRTcyN0U3REEyM0ZBRDQ5MEY5OTUKKzoxMDZDODAwMDVFNTJFNTg3QjAxRkU3QkVGMTNGQzQ5N0E3NkNGNjUzOEQKKzoxMDZDOTAwMDI4Q0ZBMjUxMTZFMjdDQTk3MTFFNDkxMkZEOEE4Mjc5ODEKKzoxMDZDQTAwMDQwNzNBN0YwQzdDQjY0NkE3N0Y5NjQzNjFBQzdBNEM2RTUKKzoxMDZDQjAwMDUwQkVCRThDNkREMkEyQkQzQjk3Nzk2N0YwNzczMjdEMTYKKzoxMDZDQzAwMEZGRjY0MzY4OUZGNzg2OUM4RkVGQjFDMDdFQTZGQzcxRUMKKzoxMDZDRDAwMDY5OTQyM0IzMTFFRDIzOEQyNEVFRDU1QjMwM0Y1NDlGOEYKKzoxMDZDRTAwMDE1NzI3QjZCODYyQzkxMUUxQjE4MUQ0RDc2Q0E5QzA1NTgKKzoxMDZDRjAwMENFQzVCODVGQjU1Rjk5OTZFQjMzOTg4N0VDMkNFNjE5NTMKKzoxMDZEMDAwMEM4QzU3QzI2RjMwRkU0NjI5RTUzRUQ3N0Q3MUJEMTBERTcKKzoxMDZEMTAwMEE0MTc5OUI3RTBBRTkwNzVDNjE0NzJCREY5MjlFNjlGMjUKKzoxMDZEMjAwMDQxOUVCODQ0RkVCMzQ0RkVFQTI5RjRBMzFBMEZGMzNDOTMKKzoxMDZEMzAwMDYxQUYyNkUzM0Q3Q0FGRTU4NjdCNDZCQzVFMDZCQ0RBRjAKKzoxMDZENDAwMDUxRkYzODk4REQ4RUZDMzMzNUM5ODNGQ0UzREEyNzMxRjcKKzoxMDZENTAwMDdDQjc1NkRGNjFEODgxNzE5RDdBNUQ1RjMyRDJGMzA2RDAKKzoxMDZENjAwMERGNUZGNTQ4Q0ZBRTAzRUZFQTk1QTkzODlFQzc4MUMwMzMKKzoxMDZENzAwMDVFRDdFMEZEQkE4NEZFNzJGQTZFN0EwRkUzNkVDRTEzMzAKKzoxMDZEODAwMDVDOEIzQUI1RUY5MjVGNUZEQkJFOUZGQ0Y3M0FFNjI3N0MKKzoxMDZEOTAwMEZGQkRBRTJEOUM1RTA2NTM3OTlDM0Q5MjNGQzYxNDJBRTIKKzoxMDZEQTAwMDYxN0MzMTY3MkJFNzhCQkI2NEQ2ODA3MjhFODlCOEU5MzIKKzoxMDZEQjAwMDlDRDQxNEIyNDc4MkUzODQ5RDI4NUY3RTA0RUQ5N0ZFNDUKKzoxMDZEQzAwMDA5OTI1NTgyQTlGQUEzREM2QkQxMkU3MjY3NzE3QkE2NUEKKzoxMDZERDAwMEZGNEYyRjE2MkMyM0I5RTIyOUY4MTlCRThCMTFGNkVFQkUKKzoxMDZERTAwMDlDRjU5QkI1NzJDODdFRTY3NEYyMzg2MTdGMTRBQjNBQUQKKzoxMDZERjAwMDQ4Rjg3NjhDNDUzQ0E0RTc5NThGMkRFNEVGNjQ3MkU5NjIKKzoxMDZFMDAwMDlEOEY4NkM3MzUyM0NGRjFBQzg4RTM5Q0M0Mzg0RjRFQTUKKzoxMDZFMTAwMDcwREZGM0QyRDJCODFDNjMxRUEyOUYyRTBENUY1RjdEODAKKzoxMDZFMjAwMEY3QTI4RTVGMjFFODY5QzgxRjkyNzg3QzZBMjRCOTgyMzQKKzoxMDZFMzAwMDc5OTQ0QTkxNDdBOTE0Nzk5NDRBOTE0N0E5MTQ3OTk0NkQKKzoxMDZFNDAwMDRBOTE0N0E5MTQ3OTk0NEE5MTQ3QTkxNDc5OTQ0QTkxOEYKKzoxMDZFNTAwMDQ3QTkxNDc5MTRBQzNGODk1QkE1Rjc3MDNCOUY0MTdBMzEKKzoxMDZFNjAwMEU4NDIxRTFCMTM4NDdCMTMyMkUwMzFFMUZEN0IxM0E0NTcKKzoxMDZFNzAwMDcwNzg4QzQ0RkQ4QjBCNzczRUUzQ0VDMTM4QTY0NUM4QjUKKzoxMDZFODAwMDI1MjUwNkVEQUYwQjI2MUU1RkVBODg3MUNDMkQ4NEZBMEUKKzoxMDZFOTAwMENBMzlDREJCRjk3QjQ0M0JCRDY3Mjk0RTU4QjgxOEY5QjgKKzoxMDZFQTAwMDZCMzBEMUMwNTAwRUI5MEIxREYzMTExRjI3NEVDQ0NFNDUKKzoxMDZFQjAwMERDNENGMkQxNjRDNTNDNzdFRkREMzdDNzUxNUNFRTJENzkKKzoxMDZFQzAwMDk5QzlCMEU0Q0NFQ0ZDQjUwNTAwQ0YzNDRCNDRCNzIwRjUKKzoxMDZFRDAwMDI3N0U1MEFFRkE5MzMwQ0ZFQzRFOUVDRjI4OTFFQjJBMEUKKzoxMDZFRTAwMDcxRkVDNkQxQTY3QzhBNkJFNTNCMTYxNTg2QzQwRjRBOTcKKzoxMDZFRjAwMEM3MkNDRjQ0M0JBODRCQTdCQzg3RjE1NEY3NUY3NDBDNTkKKzoxMDZGMDAwMEZEMjgzNUZFQTZGNkVCQ0Q5QjU5OERGQjlBOTMzRDcxN0UKKzoxMDZGMTAwMDZEMUVDQTFCNjAyRTk0NkY3NjNENkJDMzdERDkzNUQxMzMKKzoxMDZGMjAwMDUyMzNDOTJCNDU4QkZDNUYyREYwM0Q0QkUxRjZCMDVGMzIKKzoxMDZGMzAwMEFGNjgxM0QwNkY4RjlBOTlFODU2NzhCRUFBNTJFNEFCMjcKKzoxMDZGNDAwMDJBNDVCRTBBRjE3MzBBRTM2NjUwQkUwM0Y1NTg3NjQzM0MKKzoxMDZGNTAwMDNEOTY5MUVGQjk3NjE3OTRBRjI0QkE2NTAzRTlBMUVGOTYKKzoxMDZGNjAwMEMxRTYyMjVGNzEzOTkzOEVGNEZDODI4OEMzNjcxNzhBNjkKKzoxMDZGNzAwMDc3NjlGOUU1MEZGMjcxNUU5QUE3NTZDNERGMkVFQkMyNkUKKzoxMDZGODAwMEYzNzhFQUI4RTA3ODQ2RTUxRDNGRTBGMjk5QzVFOUY5MDMKKzoxMDZGOTAwMDdCRDdCMUNDOERFRjY5RUY3ODZEMzRDNTkzMDIxRThEMzAKKzoxMDZGQTAwMDVCMTcwNzMwRjAzOENBMkZGNjFBRjc2RjU5MkFFNzk3QTAKKzoxMDZGQjAwMDNCNUU0REExN0VDRDIyMEVFQTRDRThDRTRBNDBCRDJCNzEKKzoxMDZGQzAwMEY4NEE4NTBGN0VDM0RGRjkzOEYzMDA4NkYyNzU4OTlGOTIKKzoxMDZGRDAwMENGNzk0Nzc3NTYzQ0MwMDFDOUE0QzFGOEI4NzMwNzZGOTEKKzoxMDZGRTAwMEVGMTE3Q0U3OUMyMEU2MTNFNzYxNDY2RjNBRTJBM0ZGQ0UKKzoxMDZGRjAwMEYwNkJFOUY3MDJCQ0QxRUM1RkM2RTVCRDNGOEJFNDM0MzIKKzoxMDcwMDAwMEYzNjdFMTdCQTFDQjkyRjcyQ0JFQjdGREY1QzE3RjU5QTkKKzoxMDcwMTAwMDg0RUY2QjJGRUJCQ0NGMjFGQ0RCODMzMzM4MkNFRDNGQUYKKzoxMDcwMjAwMDZCMDk2RDRGRjJBNkUzN0JEQzVGMUZGQ0UxMjI3QzlGQzYKKzoxMDcwMzAwMDdCMzk2OUZGNzNGMUQ2MTA1OEY3Q0E1OTZDRDczRjNDQkEKKzoxMDcwNDAwMDYzNTEzMUY0OUY2N0YwOUM2ODQyQkE3OTk5RDM5NzY5OEMKKzoxMDcwNTAwMERGODFGMzc4M0ZCNTFEREM1RTlGQjVFRkMwOTU1NzUwREIKKzoxMDcwNjAwMDFGMUY4OEExN0NCREFGMzA4M0VFQkJCOTYzQ0Y2MzQ4REYKKzoxMDcwNzAwMDZGODFGRDNBRTI4MzhENkQ3RjdERUVCN0Q0Q0Y0MDYxQTUKKzoxMDcwODAwMDk0NzkwNjZGMDE4NjVDREM0NTdGQkIxQkY3MzUyRkRBRjAKKzoxMDcwOTAwMEZCMTlDMjlCOEI2RUEzN0RDRTFCQzVGOUY5QTlBMkI5QzIKKzoxMDcwQTAwMDhCOTAzRjAzMDdGNkZEMEFGOTZGNUUxQzE4QjJCODlGN0MKKzoxMDcwQjAwMDE3NEQ4NDlGOUE1NzI3MTc2MzFDMjAxMEQzNUQ4MUYzQzcKKzoxMDcwQzAwMEQ3QkY2MEIwMjI5REQ2QkM5QTMyMEJFMzAyQzcwQjc5QzIKKzoxMDcwRDAwMDdDQkE3QUNBQTY3NEQ0QUY5QTQzQ0ZFRkZFMkRDNjI5RTQKKzoxMDcwRTAwMDVGMzA1MTdFQzY5NUMwRURCQjFBQjlBNTY4MDVFMTZGNEEKKzoxMDcwRjAwMEU3NkU3QzM3MTI3OERFNDQ3OUQyNkE5ODAzRDdBQkRFMkMKKzoxMDcxMDAwMDNEODlFMkVBQUY3RkZENDEwNUUyQTE0NERFQkUxQkVCMTMKKzoxMDcxMTAwMDNGREI2NUQyRTAzREY0RThFRDcxM0Y0MjNFRUNEMTkxQkEKKzoxMDcxMjAwMDlGNTkyREUwRUFERTUxN0MzRkQxN0RBNTg0QkZDNDREM0YKKzoxMDcxMzAwMEU5QTg1RjZCNDZGREU2NzZEQ0Y3M0M3OUQzNzNFOEU3QjgKKzoxMDcxNDAwMEIwM0QwNkNBMTU1QzdDMUVFRTBEQzY1RDZDRDVEMTJCMUMKKzoxMDcxNTAwMEQ1QzBGMzMxNUFBNDk3Q0JEMkE2OEE2NzcwRkU1NkRFMEIKKzoxMDcxNjAwMEVGQjI2OTEzRERBN0JCRjUyNjg2RUI0MTNGODZGMkVBNTUKKzoxMDcxNzAwMEIyQjQzOUFDRkU2MkVCOUU1Q0Y0NDMyRkJEMzA4RkZDQTEKKzoxMDcxODAwMDUxOTVDRTU1N0VBOUQ5NjUwOEQzODcyNDA5OTJDNTdCMzAKKzoxMDcxOTAwMDA5NTJCMzZFNjYwNjNENUIyREMwNEIwN0I3MDU5RTYxNzUKKzoxMDcxQTAwMEMxRjE5N0RBNzQ3RTNEREM1MUI1ODFBREM1RjdDMTJBRDYKKzoxMDcxQjAwMDNGRDRBNERENTY4NkU3QUJEMUI0NjRBMUJENTI5RERGQjgKKzoxMDcxQzAwMDU3ODE3QzcxRDFDNDhDQTlGODhFNEVFOEFCOUFGNjM1MDQKKzoxMDcxRDAwMEYzRDFFRTFENjkzRkIxRTI1RERGRTc4MjBGM0ZGNzk5MjIKKzoxMDcxRTAwMDNDQTFGOUMxQzhGMjZGNEQ0QzM5MTVGMjZFRjg5RTA2RkMKKzoxMDcxRjAwMDAzRDlFRUVBN0M2RkVCQkQ3NUU4OUZENTI3NzBGOTcxNzYKKzoxMDcyMDAwMDE2RkFCNzgxMUMzMzE3NzFCOUI3NjQ1NTc4N0ZBOTg4MEUKKzoxMDcyMTAwMEJGNEJBQ0Q3Rjc2NUExREU1M0U3RkZBNjUwOTU2QjdENUEKKzoxMDcyMjAwMDU5MjhBRjIyQzdDRDkzODVCQzc5NTEyMjc5NTNEMzJFRUIKKzoxMDcyMzAwMDlEOTNFMTlFNkE4QzZFMEZCRURGQTk0MTY3OTI5RjUzQkEKKzoxMDcyNDAwMDdCNERFMkUzNTI4QkM0QkRDM0Q4QTc4QjMyNjhERDlBNzUKKzoxMDcyNTAwMDM2OTNERDA0RTM2QUEzRkE2MkQxMUVBQThCRTk4QjQ1NUIKKzoxMDcyNjAwMDNCMjc3MDQ4NjYzQjA0QkExMjkzMDU3RTI2MDg5NDg1MzYKKzoxMDcyNzAwMEM0MURBQkJEM0FCQjI5NzcxODNDQTNERDg0RUY3M0YwODYKKzoxMDcyODAwMEJGNjFGREI2MjJDRTI3NTVCRTY4NUE4RjU5RkE4QTkwNDMKKzoxMDcyOTAwMDRFQUJCNjg3OEZDMzczNTk0MkY4MkZFMERCOTkxQ0VBRDcKKzoxMDcyQTAwMDhGREJDNEJFRkJBNTczQzQyN0ZENUZCRjlGOEU3OEFGODUKKzoxMDcyQjAwMEQxQjBCNTk4NDdCQzI0RjFFRjFFMDBBNkVGMUUyRTg5NzEKKzoxMDcyQzAwMDdDNjRDRERGQ0Q1MTQ4MkY5NzNFQUYyM0JFMEQ0ODdENjYKKzoxMDcyRDAwMDI0RDdDRTFDNUM0MDcyMjlBMEVCMjNCOUQ2NTM1NDQxNkQKKzoxMDcyRTAwMEYyMjExMERGNTc4MTcyRUFDQ0MxN0FERTNFQkFBRjQyOUEKKzoxMDcyRjAwMDgxRjY0RTg0QjE3RDFDMjM3RDdGQjlFODAxOTIxRkYzOTYKKzoxMDczMDAwMDY0RkVCRTgxRURENDU5NzgxQzY4N0Q2RjEzRjkxNTNBN0YKKzoxMDczMTAwMDI1RDRFRkJFNTJBNEU2NkRGNEMxNzNDQjQxQkUwOTMwNTMKKzoxMDczMjAwMDY1NUYzQkYyNjE5NTk5RTIzOTYwM0ZCNUJEODI3NkRFREIKKzoxMDczMzAwMEMyNjQyQkM2QzVBQjcwMUNBNzAzN0Q2OEZFMkYzMUUxNkMKKzoxMDczNDAwMENCNjU4ODlGNDU3MThFM0I4QjMwOEY5REQzNDdGRTAzNjUKKzoxMDczNTAwMDUwMzVEOUU5RjU3RjMyOTAxRkQ5QUYxQkQ4OEQ3MjJBRUQKKzoxMDczNjAwMDM3Q0VCMUIwMDhGNjUxQTdFRjVFODdBMUE3MkJCQUJFMDIKKzoxMDczNzAwMDJFQ0NGQkNEOTVCOTNDNjI3QjM4NUQwNTcyNzZGMkVGODEKKzoxMDczODAwMDI0NDRGRUIwQkE4OENCNUZEMDVCQUMwNUU5NDJFMkY4OUEKKzoxMDczOTAwMDNERTY3QkY1MTRDQTk1NDBGNzQ0OTJDNzkxN0M3M0QxQzIKKzoxMDczQTAwMEY3NDQyQ0NBODdEM0EwQzdERDIxN0VGRUU5QTU3QjI4NDAKKzoxMDczQjAwMDRGQkYwMERGNjU0MDc5RUZEQTcwN0ExOEZDRUE2N0U0QzYKKzoxMDczQzAwMEVGQjFDNzQyRUE5MTBFQjc4NEMzOTE3NDg0RjRFODBGMTkKKzoxMDczRDAwMDkzM0I2RUEyOUIzRDgyQUY2QTY3NzVEN0UzM0QwQ0MxQkMKKzoxMDczRTAwMDc3MDAyQzg3QzA0NzIzRTA4OEZFQUM5Q0RCMDk3QkYwNEMKKzoxMDczRjAwMEJGNjFERUJBNzFGRTVFRjJDRkY3RjE3N0IxQ0RBMEJGMEIKKzoxMDc0MDAwMDA4M0UxMDRENzk2M0NEM0VEMDRGODk1QzNGQTE1RUE4MDgKKzoxMDc0MTAwMDhERURBNkI4NTRFMDgwODFGMjIzMEY3NzdDNENFRjE5RjQKKzoxMDc0MjAwMDgxMEUyOUZFNTJEQkYxNUEzMkZBRUQzRUY0MTM5MjQ4RjYKKzoxMDc0MzAwMDBGMjZEMzNCOTUwMzFEQzlFODZGQThGNTc1MUE2Rjk2MDMKKzoxMDc0NDAwMDc4OEY0Rjc2QkE1QUVGOTRGRDU5QjhGRjVBQTkzQjE3NzcKKzoxMDc0NTAwMERCN0Q4NTE2RDExRjYwMTk2MTQ2RTdBODkzMzhCRkIzNUQKKzoxMDc0NjAwMDBFOTlFNDc5MjRERUY2MEE3QTA1Qjk5MDRCRUYyQzBFREEKKzoxMDc0NzAwMEYxQjg4MDJBMDdBQTg1M0MzOThBRjUzOTlDRUYyRDZBMzQKKzoxMDc0ODAwMDVFNDlDMkY3NzJEMUMzQ0E4NzlCOEE1NDdCQjg4MUUyMzYKKzoxMDc0OTAwMDM2QkI4QTE0N0VBRjYyM0NDRENCRTM0QUQ0NUVGRkZBQTIKKzoxMDc0QTAwMEU1REMwOTM5Mzg0RTExRTM0MkU0RDBDNEEwNUM0MUZFNkEKKzoxMDc0QjAwMDRGMjVGRTdGNTg5NzBDRTdBQTc5NEVCMjM2QTM5QzVBMDcKKzoxMDc0QzAwMEJDQTYxNEJBQjNFNURBMTVBNTE0MkYxM0VGM0YyM0Y3QzIKKzoxMDc0RDAwMDE1NDk0N0Y2MjI4RURGMUE0RDdDNDk2MkM4N0M5N0MwNTkKKzoxMDc0RTAwMDVENEZDRDIzMzk0M0VGRThFRjRGN0NCQzE0RTMxM0JGNkUKKzoxMDc0RjAwMDU4QkM5OUU4Nzk0OERGODRGMjM5OUU2NzNCOTdFM0M4MjYKKzoxMDc1MDAwMDM2RDczNEQ3RDNGMUYyODY5Njc1MjlDM0VDMjM3MjlGMTAKKzoxMDc1MTAwMEQ1OEU5NkQyNjRFNUZBN0E3NUJGOTc0Q0VBRkU2NkU5OTUKKzoxMDc1MjAwMDkyNDJFRjYxQzE5QUQyMjQyODk3MUJGRkQxN0JFMEU3RkEKKzoxMDc1MzAwMEJERDQ2MUYwQTM1RUFENUVCQzYyNUREQzMwNzQ3MzlENTIKKzoxMDc1NDAwMDNFRDgxRUEyQkYyNjIwN0UzRDk0RDcxODY5RkY5MTY1QzQKKzoxMDc1NTAwMDlERTRFRkM1MzgxMTAzQkU2QTI1RkUwMjdFMDlEMTBCRkEKKzoxMDc1NjAwMDY1NDJCRjBFQzUxQkFBOTY4RTQ3QkY5MzM5OTY4RTQ3QkMKKzoxMDc1NzAwMDNEMDM3QzU1NjExREM2QUZDNDJGNEIzNEY0NzZDMzREMUIKKzoxMDc1ODAwMDY1RTQ3RTNFMkJFMjcxRDJCMjIyQ0UyRkE3NkNGNjZGNUQKKzoxMDc1OTAwMDUwQkU4RUY0QkQ4NTYxOUFGNEFEREY1QkE0NjkwNkRGNTEKKzoxMDc1QTAwMDQxN0U0QjRCOEU1MTMwMEY1NDMyM0I5QUY3M0I2Q0IyQkQKKzoxMDc1QjAwMDYwRENBNkZGRjA5NzE0RDdFRDdGQzRCQzgwRTcwQkNDNEUKKzoxMDc1QzAwMDZDMzRCNDc3QTU0RUREMTFBQTQ3M0NEMzM4NUY0NjE3MUIKKzoxMDc1RDAwMDcwQkJDNTk1QURGQkY2Qjg1MDRFQ0M1MDVDODhFQzg2QzAKKzoxMDc1RTAwMDlDNjhDQTkzMDQ3QzlGOTJERUVBRUYyQ0I0NjAzRTIzMzEKKzoxMDc1RjAwMEQwMERERTIxRjA5M0VCRUJGRjRBNDZGRDFBRThGQzg4NDQKKzoxMDc2MDAwMERFODMwNUJFRkE5OERFODk2RDEwRUZGNDhFRkFDNDNCNzYKKzoxMDc2MTAwMEFCNkUyNTg2QkU4QjJCRkJBMDE0RkI2RDE0NjUzMDNFMzQKKzoxMDc2MjAwMEMwRTM1QTZBQTlGQUZGMjFGRUVGOTQ2OTg1QzNGQUJGNDUKKzoxMDc2MzAwMDA5MEU3MzY4NUM0MDQ5MTkyRThFMTIxQTE3QzhENEYyQ0QKKzoxMDc2NDAwMEI4MDA5NjE4MTdDOENDRTQ3MTAxODQzMTJFODAyNUM2ODUKKzoxMDc2NTAwMDA1QjAxRUUzMDIwODYzNUMwMDYxOEMwQjIwOEM3MTAxOTUKKzoxMDc2NjAwMDJDMzEyRTgwRjU5Rjg5RUYxRkZBNDEzMEYxNzhBNTk5RDIKKzoxMDc2NzAwMEU0RkE0QTdDREYwRUY3QjdGMjMwQ0YzQkFENkM5NTI5QzgKKzoxMDc2ODAwMDdGOEJERjNGQTA3RUJCRUVERDRDQkI3ODM3RTNERDRDNkMKKzoxMDc2OTAwMDc5M0NENzAxRDk4QTI4NzJFOTA2OEU2MzFDQzdCNTVGODkKKzoxMDc2QTAwMEIyQUU0MUI5RDJCNDgwRDZERkQwNTlGOERFNjJBQzZGNDkKKzoxMDc2QjAwMEQ1NTkzNTBBRDExMUM3NjM4QjQ0RUZGNDZCM0E1QjI5NzYKKzoxMDc2QzAwMEVFNTQ5QzcyNTg0RkY1NkQxMkMzMzhFOTVEMDZFRUU3MzMKKzoxMDc2RDAwMDNBNjVBOENEQTMzQzI4RDlDMTRFNDMzN0Y5MUZCNTdCRTUKKzoxMDc2RTAwMDI1QTUzMkY0OURDNkY0QUIyNDA3RDQ3Q0YyMzJERUM0NjcKKzoxMDc2RjAwMDlDNUU5MzUyMzlDQzNCOTBBMTc3RTdFMkRERjQzMkNDMkIKKzoxMDc3MDAwMDMzRTM3QjcxRjkyQjdBRDdFRjA0ODc3NDE0RDJFMTU2RjcKKzoxMDc3MTAwMEZFRkVEOTAyRkY4OERGMjNERTM1RDU3NEVFNUY4N0VGRUEKKzoxMDc3MjAwMEExMjJGM0NENDNERkQzNDVFNDlERUJBNzg5QkNCMjhEMDUKKzoxMDc3MzAwMDdGNUY1MUY2NjRFNUJFMDNCMERFRTAyNjAzRDkxQkVFQTEKKzoxMDc3NDAwMDQyQzcwM0QzOTIzMEVGNkZBN0Y4QzhGMUMzMjZGMjhCN0MKKzoxMDc3NTAwMDNFREM3QzUzNTg3Qzg0RTUzQjFFOUM0NkY5RjlCMTE0MTEKKzoxMDc3NjAwMEFGNjhENDQ5QTQ4RjY3OTc0RDRDQzE3QjlDN0Q0MjQ3M0QKKzoxMDc3NzAwMDdBQTczN0FGN0MzNUY2NkI5Q0FBNTAzQ0FBQzRDMDFFRDIKKzoxMDc3ODAwMEEwNzlDNDdCMjkxNTFGMjVDRDkyNDcwM0YwNTI2NkE1MjkKKzoxMDc3OTAwMDc3RjY0QkUwOUEzMDVFRDlBRjMzQUZDNzc3NEQ0QjE4RDEKKzoxMDc3QTAwMDdGRTdBMEQyNERFMzY2ODlFODA2MDMwNDc4OUYxNUUyREYKKzoxMDc3QjAwMDNFOTc3NEZFRjk0QjdDQzc3MDlGODFEQkFENjkxQTlFQzIKKzoxMDc3QzAwMEJGNEVEQkM4REYzM0RDQ0YxQzdBRDRCM0NCOTFCQTY0QjUKKzoxMDc3RDAwMEQyOEY3RkVBODM3QTQ3RjREODc0NkU5NzJCMjkzOEZGQ0IKKzoxMDc3RTAwMEQyOTMzQTdBNkY1QjkyRjI5MzJDMDdFOUU5NjI3QUM3RjcKKzoxMDc3RjAwMDIwRjkxN0M5RDc2RTFFOTk3RjIyREYzMTFDRDc3MUI5QzYKKzoxMDc4MDAwMDAyRjc0OEZFNTAxN0QyMjVDNTY1MUM1NDlFNkNBQUEyRUIKKzoxMDc4MTAwMEYyNzdFMjdCODhFQkRGRkYwRjlDNDUzRjMxMkQyNUM2RDkKKzoxMDc4MjAwMDhBNzI2RUM0RUZEREEyQkVGRDdCQUYxN0M0RkJCNTM0MTgKKzoxMDc4MzAwMDRENEZCRTgyRjdGMTc3QjMxNUVGNDM3RDI3NzhDQTU2RDcKKzoxMDc4NDAwMEJFMUZGMTY0OEY2NTZFMEI3RDBGMDYxMjEwRUVCNTE0MkUKKzoxMDc4NTAwMDBGMjI2MTVDREI2QkM3RUY4RTA2MEU0QjE2N0E5NzdDQUUKKzoxMDc4NjAwMDlEN0NEQ0ZDMDhCRTEzNzE2NTRBMTY0OUMxRjhGN0E2NzkKKzoxMDc4NzAwMDkyNjREODc3RTk4NDBDREFCN0NCQzdFM0EzNzQ0M0M5MjEKKzoxMDc4ODAwMDE4M0ZFN0Y4NEFDRjczMUM5QjU2MThBQzlGMjdGODI2ODEKKzoxMDc4OTAwMDAwRkQzOTlERkNEMDgzRjRGNjFERTJBNkJCQjBCRjlCNzIKKzoxMDc4QTAwMDk5RTg3QjZBRkE4M0ZEQ0NCQjc5MUNDNTRGNTVCQTE5QTAKKzoxMDc4QjAwMDZDNEJEOTgxNzRGMzlFOTBGQjhCMTdCRkFCNDNGRERGRkMKKzoxMDc4QzAwMDlCRUZFOEMxN0Q1NDU0NUU3RDI0OTlDRTM3N0NGQzRBMDEKKzoxMDc4RDAwMDdEQTcxRTE5QkYwQTk1OUZGRjNGREVBNzlGNkE2QUEwN0EKKzoxMDc4RTAwMEYyOURBNjU1NTQ3NjM3QjlBOTNENDRGRTVGMUE0MUZFNzQKKzoxMDc4RjAwMDQ3QzYzRkFGMjI3RjQ3QzYzRjk5NTE4OTIzRkQwOUZDMDgKKzoxMDc5MDAwMENERTNDRDExRjFDRUIyNTFGN0FFODdGQjlCQkQ0NTZGRjQKKzoxMDc5MTAwMEM1MkEzNUZFODlFRjg3NTc5QTQ5MUVGQ0Y3QjQ2MUUzMDMKKzoxMDc5MjAwMDlFRUFCRDk5Mjk0RTNBQzg0Qzc5NzhGRkIzQjIyNzZBQ0UKKzoxMDc5MzAwMDM1RDBBRTlEQ0VGMUE3QzYxRDkxM0ZGMDdDQzgxRjU4MzMKKzoxMDc5NDAwMDIyN0Y2OEI1NDFGRTc4NTYwRjJDNUNDMEY1QkM5QkY0RDUKKzoxMDc5NTAwMEJDODlGMEJBNkUwREM4MEY4MEVGNjM5NjMwRjk3MTI1QkYKKzoxMDc5NjAwMDQyN0U4MEMzNzEzNzdENTdENTY5NjAxODI3NTRERjUxMzcKKzoxMDc5NzAwMENFODJFMjhCQkM2MUU0ODk5N0NCOTM3MTUxREVFN0U5NUIKKzoxMDc5ODAwMDdCRkZGQTI4N0E5RjdCNUNCQzg3M0JCRTgxQkY4N0FCQkQKKzoxMDc5OTAwMDY0RTVCNEVFMzA3MjI1MTZGMTcxREZBODgxQjM3RjgwMDMKKzoxMDc5QTAwMEZFRjdGRERFNENGNkNBQkFEMUNCOEFGRTE5Qjk3MjREOEMKKzoxMDc5QjAwMDdDRDdGMjM0RkVBRTgwRjZEQjdFNTdFMDMxMDlGM0ExQ0UKKzoxMDc5QzAwMDhERjczMDFCRTI1OUZENUQ4MTE0OTFDRkZFMUVCRjJCNTgKKzoxMDc5RDAwMDMwNkQ3QUUxNzdGRjVEODE1QkE3OEY1RjFDRkFCQjAyOTgKKzoxMDc5RTAwMEI3RkEzMjM4QUNGRUFFMDAxQkJGNzg4NERGMTU5ODNEODUKKzoxMDc5RjAwMDNERTlGQURGMTVCODZEM0FGNzE3NDdGQTVEMDFCMDI3OTAKKzoxMDdBMDAwMENCNzA1QzkyQ0QzRTA3Q0IzNEIxQ0ZDOEVGNjk0RjhBQzMKKzoxMDdBMTAwMEZDNUQ5N0M2QjExOENCRDI1OEI3OTZFQTM1OUUwMkZBRUMKKzoxMDdBMjAwMDBFNUVFM0ZEMjVGOTgxRjk4RTlGRTM3OTRCOUZCMDREMDIKKzoxMDdBMzAwMEM5MDYzOENERTAyNTM5RDk5QjY3QkYxM0VCQUZEOUVDMjgKKzoxMDdBNDAwMDc3RTEzQTkxNzE3M0M0MkRGQUY3QjA5RkJCQjEzREYyNjMKKzoxMDdBNTAwMEREOTU4QUNGMTVEM0I5REM2ODE0RTU4Q0U2RTFCRjI3NDQKKzoxMDdBNjAwMDZGOUNDRUYzRjIzN0RBMzdFQ0I3MDZENzFCREFGRkE2RjYKKzoxMDdBNzAwMEE1MDVCODFGRDg2RjJERDZDMzdFRUJCMDY0RTY4NEIwRTEKKzoxMDdBODAwMEVGNTNBRkE3MzMzN0QxNTVFMzc0NEU1RjIwQ0ZFNjdENzgKKzoxMDdBOTAwMEM4RUQ0MTJBQjNCNDlFNzhCNDFGQzczQ0U0ODlDN0ZENDIKKzoxMDdBQTAwMDhFNjkxOTMwRTE3NzEwN0Y3NDBGOTg1MEJGRkY3MUY1MjAKKzoxMDdBQjAwMDgwMDlFQkZGNjhFN0VGOTUyM0U3N0Y3OTNBRjcwM0IyOTgKKzoxMDdBQzAwMDY2MENEMEY4RjE2OEUzOTM3RDNFMTA4RkY2NTM1NkQ1REYKKzoxMDdBRDAwMDg3RUIyOERGQjI3NzMyRTk5N0YxNDJCRjhDN0Y2ODgyNkIKKzoxMDdBRTAwMEFGMEZFODZERkNCNjM4Q0E2N0IzRTI0NDZBQUYzMTcyRDMKKzoxMDdBRjAwMDNFQUQ3OUE4RjJFMDAxODVCRURCOUFGNzYxODhCRDMzMUYKKzoxMDdCMDAwMEQ5MDNGQjBFQjNCRkI0ODNGQ0REMjVDMDc4NEY3Qjc1NzIKKzoxMDdCMTAwMDA0MjNDREEyN0RFNTY0RkNEREU1MTgyMTM3RDA0RTVCNjIKKzoxMDdCMjAwMDBDNzJDMTU5RjVFNjk3OTRGN0M3RjEzODFGRTY2ODkxRDIKKzoxMDdCMzAwMEZFN0NCQTQxRjE3RDlBMDVGREQwRTUwQkQ2NzQ5MTVGQ0MKKzoxMDdCNDAwMEI4NzVBODVFRjg5OUZCRDdBMURGMENGNjVCNTg3RDREQTAKKzoxMDdCNTAwMEU1OTEyRUQ0MzdCNTdCQzNFQjlEMEQ1N0M5N0YwNUZCNEYKKzoxMDdCNjAwMDJEQUNGRTlFNUY5RUQzRjNERjJGMDhBRjA3RkNFRTQ1RTIKKzoxMDdCNzAwMEJBNTRGMTdCNUNFNzlEOEM3RURFNzE2Nzk0OTVCRkRGMjQKKzoxMDdCODAwMEY3RDJFRjk1RUMxMERGM0ZFRkZDOEY1OTlDNkUwNEJFRUYKKzoxMDdCOTAwMDYxQkMzNzc0RkNDOEY0RDE0Q0ZERERCMzU4MzZGMkMzNzgKKzoxMDdCQTAwMDhENEE1NTJFMERGREZFODk5RUI5MjlCRTM3Mzc4NkU0RDQKKzoxMDdCQjAwMDhFNEJGODU1RjU5NTE2RDJGMzY5RjU0NjkyNUYyNTcyMEUKKzoxMDdCQzAwMDk0MTVFMUExREYzRjI5OTM4NTlDRjIxMkZGRjdEQzFFOUIKKzoxMDdCRDAwMDRGNzEzQzNBMDBDMjA5NTMyOUVGOTNEQ0NDRTE4MTI0NzgKKzoxMDdCRTAwMDAzQzk4NzEyNEQ3OUREMUUyOERGRDQ4NDdGQzdGRTJDQTAKKzoxMDdCRjAwMENBMDcxOUY5OTc3Rjg3RTlEMjdCRjk3N0UyNUFBNTEwNkUKKzoxMDdDMDAwMEZEREM2NkM5QkUwREJGN0I2Qzk2NDQxQ0IxREE0Q0Y5MzUKKzoxMDdDMTAwMDgyN0U4QzJGQzI3OUI2QzQ3QkI2MkQ4Mzc1QjZEQzk5NzMKKzoxMDdDMjAwMDQzRjY3MTNGRTNGMkQ0QkQ4MEU3QURCNkM0OTcyRjVFNTMKKzoxMDdDMzAwMDgxRUQwQkE3NTBGQkMxNkYyNjNFNUU4MEY2NTM3NTk0MTUKKzoxMDdDNDAwMDE1RURBNzJEMzY2RTVGNkY5OTlGNERFREFGNEJDQTFBOUMKKzoxMDdDNTAwMDNDQjdGQjIxNDZFQjZDOTlDRkNGQkRFNUYxNzFFMkZCNjAKKzoxMDdDNjAwMDBCOEYwOUY5Nzk0QjhCN0QzNEU2QTM2NjU5MUMxNzEwRUQKKzoxMDdDNzAwMDVGNjM0NDNFNkU0QjA2RDQ0M0Y5OTQ1NEJFRjA3RTlDNDEKKzoxMDdDODAwMDY3MkFERkVGRUY2QzBBQzk4RkUzMEJBNzNDQkU1QjIxQ0QKKzoxMDdDOTAwMDM1RTJDN0JDOTA2QjZFMENGOUMxRkYwQkI4MUY3NDk0MzIKKzoxMDdDQTAwMDcwNDcwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUQKKzowODdDQjAwMDA1MDIwRDAwMDAwMDAwMDBCOAorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2Zpcm13YXJlL2JueDJ4LWUxaC01LjIuMTMuMC5mdy5paGV4IGIvZmlybXdhcmUvYm54MngtZTFoLTUuMi4xMy4wLmZ3LmloZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEzZTI1NAotLS0gL2Rldi9udWxsCisrKyBiL2Zpcm13YXJlL2JueDJ4LWUxaC01LjIuMTMuMC5mdy5paGV4CkBAIC0wLDAgKzEsMTI4NDkgQEAKKzoxMDAwMDAwMDAwMDAzQkU4MDAwMDAwNjAwMDAwMDY4ODAwMDAzQzUwNTMKKzoxMDAwMTAwMDAwMDAxOTY4MDAwMDQyRTAwMDAwMDBBQzAwMDA1QzUwRTUKKzoxMDAwMjAwMDAwMDA4REY4MDAwMDVEMDAwMDAwMDBFODAwMDBFQjAwMUIKKzoxMDAwMzAwMDAwMDBFMzE0MDAwMEVCRjAwMDAwMDA5NDAwMDFDRjA4ODIKKzoxMDAwNDAwMDAwMDA1OEU4MDAwMUNGQTAwMDAwMDBDNDAwMDIyODkwODIKKzoxMDAwNTAwMDAwMDBGOTY0MDAwMjI5NTgwMDAwMDAwNDAwMDMyMkMwRDcKKzoxMDAwNjAwMDAyMDQwMDQ4MDAwMDAwMEYwMjA0MDA1NDAwMDAwMDQ1OTQKKzoxMDAwNzAwMDAyMDQwMDU4MDAwMDAwODQwMjA0MDA1QzAwMDAwMDA2MzYKKzoxMDAwODAwMDAyMDQwMDcwMDAwMDAwMDQwMjA0MDA3ODAwMDAwMDAwNzgKKzoxMDAwOTAwMDAyMDQwMDdDMTIxNzAwMDAwMjA0MDA4MDIyMTcwMDAwRjYKKzoxMDAwQTAwMDAyMDQwMDg0MzIxNzAwMDAwNjA0MDA4ODAwMDAwMDA1RTYKKzoxMDAwQjAwMDAyMDQwMDlDMTIxNTAwMDAwMjA0MDBBMDIyMTUwMDAwOUEKKzoxMDAwQzAwMDAyMDQwMEE0MzIxNTAwMDAwNjA0MDBBODAwMDAwMDA0ODkKKzoxMDAwRDAwMDAyMDQwMEI4MDIxMDAwMDAwMjA0MDBCQzAwMTAwMDAwN0UKKzoxMDAwRTAwMDAyMDQwMEMwMTAxMDAwMDAwMjA0MDBDNDIwMTAwMDAwMzAKKzoxMDAwRjAwMDAyMDQwMEM4MzAxMDAwMDAwMjA0MDBDQzQwMTAwMDAwRDAKKzoxMDAxMDAwMDA2MDQwMEQwMDAwMDAwMDMwMjA0MDBEQzAwMTAwMDAwMjAKKzoxMDAxMTAwMDAyMDQwMEUwMTIxNDAwMDAwMjA0MDBFNDIyMTQwMDAwQjMKKzoxMDAxMjAwMDAyMDQwMEU4MzIxNDAwMDAwMjA0MDBFQzQyMTQwMDAwNTMKKzoxMDAxMzAwMDA2MDQwMEYwMDAwMDAwMDMwMTA0MDEyNDAwMDAwMDAwOTgKKzoxMDAxNDAwMDAxMDQwMTI4MDAwMDAwMDAwMTA0MDEyQzAwMDAwMDAwNEYKKzoxMDAxNTAwMDAxMDQwMTMwMDAwMDAwMDAwMjA0MDFEMDAwMDA4OTA2MDMKKzoxMDAxNjAwMDAyMDQwMDA0MDAwMDAwRkYwMjA0MDAwODAwMDAwMEZGNzkKKzoxMDAxNzAwMDAyMDQwMDBDMDAwMDAwRkYwMjA0MDAxMDAwMDAwMEZGNTkKKzoxMDAxODAwMDAyMDQwMDE0MDAwMDAwRkYwMjA0MDAxODAwMDAwMEZGMzkKKzoxMDAxOTAwMDAyMDQwMDFDMDAwMDAwRkYwMjA0MDAyMDAwMDAwMEZGMTkKKzoxMDAxQTAwMDAyMDQwMDI0MDAwMDAwM0UwMjA0MDAyODAwMDAwMDAwQjkKKzoxMDAxQjAwMDAyMDQwMDJDMDAwMDAwM0YwMjA0MDAzMDAwMDAwMDNGNTkKKzoxMDAxQzAwMDAyMDQwMDM0MDAwMDAwM0YwMjA0MDAzODAwMDAwMDNGMzkKKzoxMDAxRDAwMDAyMDQwMDNDMDAwMDAwM0YwMjA0MDA0MDAwMDAwMDNGMTkKKzoxMDAxRTAwMDAyMDQwMDQ0MDAwMDAwM0YwMjA0MDRDQzAwMDAwMDAxQUYKKzoxMDAxRjAwMDAyMDQyMDA4MDAwMDAyMTEwMjA0MjAwQzAwMDAwMjAwOEEKKzoxMDAyMDAwMDAyMDQyMDEwMDAwMDAyMDQwMjA0MjAxNDAwMDAwMjE5NUQKKzoxMDAyMTAwMDAyMDQyMDFDMDAwMEZGRkYwMjA0MjAyMDAwMDBGRkZGNUEKKzoxMDAyMjAwMDAyMDQyMDI0MDAwMEZGRkYwMjA0MjAyODAwMDBGRkZGM0EKKzoxMDAyMzAwMDAyMDQyMDM4MDAwMDAwMjAwMjA0MjAzQzAwMDAwMDAwREUKKzoxMDAyNDAwMDAyMDQyMDQwMDAwMDAwMzQwMjA0MjA0NDAwMDAwMDM1NzUKKzoxMDAyNTAwMDA2MDQyMDQ4MDAwMDAwMUMwMjA0MjBCODAwMDAwMDAxMzEKKzoxMDAyNjAwMDA2MDQyMEJDMDAwMDAwNUYwMjA0MjIzODA3RkZGRkZGRTUKKzoxMDAyNzAwMDAyMDQyMjNDMDAwMDAwM0YwMjA0MjI0MDA3RkZGRkZGNkYKKzoxMDAyODAwMDAyMDQyMjQ0MDAwMDAwMEYwMTA0MjI0ODAwMDAwMDAwODQKKzoxMDAyOTAwMDAxMDQyMjRDMDAwMDAwMDAwMTA0MjI1MDAwMDAwMDAwNzQKKzoxMDAyQTAwMDAxMDQyMjU0MDAwMDAwMDAwMTA0MjI1ODAwMDAwMDAwNTQKKzoxMDAyQjAwMDAxMDQyMjVDMDAwMDAwMDAwMTA0MjI2MDAwMDAwMDAwMzQKKzoxMDAyQzAwMDAxMDQyMjY0MDAwMDAwMDAwMTA0MjI2ODAwMDAwMDAwMTQKKzoxMDAyRDAwMDAxMDQyMjZDMDAwMDAwMDAwMTA0MjI3MDAwMDAwMDAwRjQKKzoxMDAyRTAwMDAxMDQyMjc0MDAwMDAwMDAwMTA0MjI3ODAwMDAwMDAwRDQKKzoxMDAyRjAwMDAxMDQyMjdDMDAwMDAwMDAwQzA0MjAwMDAwMDAwM0U4NDAKKzoxMDAzMDAwMDBBMDQyMDAwMDAwMDAwMDEwQjA0MjAwMDAwMDAwMDBBODUKKzoxMDAzMTAwMDAyMDUwMDQ0MDAwMDAwMjAwMjA1MDA0ODAwMDAwMDMyRjEKKzoxMDAzMjAwMDAyMDUwMDkwMDIxNTAwMjAwMjA1MDA5NDAyMTUwMDIwMkQKKzoxMDAzMzAwMDAyMDUwMDk4MDAwMDAwMzAwMjA1MDA5QzA4MTAwMDAwMzMKKzoxMDAzNDAwMDAyMDUwMEEwMDAwMDAwMzMwMjA1MDBBNDAwMDAwMDMwRjgKKzoxMDAzNTAwMDAyMDUwMEE4MDAwMDAwMzEwMjA1MDBBQzAwMDAwMDAyMDgKKzoxMDAzNjAwMDAyMDUwMEIwMDAwMDAwMDUwMjA1MDBCNDAwMDAwMDA2MTAKKzoxMDAzNzAwMDAyMDUwMEI4MDAwMDAwMDIwMjA1MDBCQzAwMDAwMDAyRjcKKzoxMDAzODAwMDAyMDUwMEMwMDAwMDAwMDAwMjA1MDBDNDAwMDAwMDA1RDYKKzoxMDAzOTAwMDAyMDUwMEM4MDAwMDAwMDIwMjA1MDBDQzAwMDAwMDAyQjcKKzoxMDAzQTAwMDAyMDUwMEQwMDAwMDAwMDIwMjA1MDBENDAwMDAwMDAxOTgKKzoxMDAzQjAwMDAyMDUwMTE0MDAwMDAwMDEwMjA1MDExQzAwMDAwMDAxRkIKKzoxMDAzQzAwMDAyMDUwMTIwMDAwMDAwMDIwMjA1MDIwNDAwMDAwMDAxRjUKKzoxMDAzRDAwMDAyMDUwMjBDMDAwMDAwNDAwMjA1MDIxMDAwMDAwMDQwNkYKKzoxMDAzRTAwMDAyMDUwMjFDMDAwMDAwMjAwMjA1MDIyMDAwMDAwMDEzOEMKKzoxMDAzRjAwMDAyMDUwMjI0MDAwMDAwMjAwNjA1MDI0MDAwMDAwMDBBNTkKKzoxMDA0MDAwMDA0MDUwMjgwMDAyMDAwMDAwMjA1MDA1MDAwMDAwMDA3RTMKKzoxMDA0MTAwMDAyMDUwMDU0MDAwMDAwMDcwMjA1MDA1ODAwMDAwMDA4MTMKKzoxMDA0MjAwMDAyMDUwMDVDMDAwMDAwMDgwMjA1MDA2MDAwMDAwMDAxRjkKKzoxMDA0MzAwMDA2MDUwMDY0MDAwMDAwMDMwMjA1MDBEODAwMDAwMDA2NjUKKzoxMDA0NDAwMDAyMDUwMDA0MDAwMDAwMDEwMjA1MDAwODAwMDAwMDAxOTAKKzoxMDA0NTAwMDAyMDUwMDBDMDAwMDAwMDEwMjA1MDAxMDAwMDAwMDAxNzAKKzoxMDA0NjAwMDAyMDUwMDE0MDAwMDAwMDEwMjA1MDAxODAwMDAwMDAxNTAKKzoxMDA0NzAwMDAyMDUwMDFDMDAwMDAwMDEwMjA1MDAyMDAwMDAwMDAxMzAKKzoxMDA0ODAwMDAyMDUwMDI0MDAwMDAwMDEwMjA1MDAyODAwMDAwMDAxMTAKKzoxMDA0OTAwMDAyMDUwMDJDMDAwMDAwMDEwMjA1MDAzMDAwMDAwMDAxRjAKKzoxMDA0QTAwMDAyMDUwMDM0MDAwMDAwMDEwMjA1MDAzODAwMDAwMDAxRDAKKzoxMDA0QjAwMDAyMDUwMDNDMDAwMDAwMDEwMjA1MDA0MDAwMDAwMDAxQjAKKzoxMDA0QzAwMDAyMDUwMEUwMDAwMDAwMEQwMjA1MDBFODAwMDAwMDA3NDIKKzoxMDA0RDAwMDAyMDUwMEYwMDAwMDAwMDcwMjA1MDBGODAwMDAwMDA3MTgKKzoxMDA0RTAwMDAyMDUwMEU0MDAwMDAwMkQwMjA1MDBFQzAwMDAwMDI3REEKKzoxMDA0RjAwMDAyMDUwMEY0MDAwMDAwMjcwMjA1MDBGQzAwMDAwMDI3QjAKKzoxMDA1MDAwMDAyMDUwMEUwMDAwMDAwMUQwMjA1MDBFODAwMDAwMDE3RTEKKzoxMDA1MTAwMDAyMDUwMEYwMDAwMDAwMTcwMjA1MDBGODAwMDAwMDE3QjcKKzoxMDA1MjAwMDAyMDUwMEU0MDAwMDAwM0QwMjA1MDBFQzAwMDAwMDM3NzkKKzoxMDA1MzAwMDAyMDUwMEY0MDAwMDAwMzcwMjA1MDBGQzAwMDAwMDM3NEYKKzoxMDA1NDAwMDAyMDUwMEUwMDAwMDAwNEQwMjA1MDBFODAwMDAwMDQ3NDEKKzoxMDA1NTAwMDAyMDUwMEYwMDAwMDAwNDcwMjA1MDBGODAwMDAwMDQ3MTcKKzoxMDA1NjAwMDAyMDUwMEU0MDAwMDAwNkQwMjA1MDBFQzAwMDAwMDY3RDkKKzoxMDA1NzAwMDAyMDUwMEY0MDAwMDAwNjcwMjA1MDBGQzAwMDAwMDY3QUYKKzoxMDA1ODAwMDAyMDUwMEUwMDAwMDAwNUQwMjA1MDBFODAwMDAwMDU3RTEKKzoxMDA1OTAwMDAyMDUwMEYwMDAwMDAwNTcwMjA1MDBGODAwMDAwMDU3QjcKKzoxMDA1QTAwMDAyMDUwMEU0MDAwMDAwN0QwMjA1MDBFQzAwMDAwMDc3NzkKKzoxMDA1QjAwMDAyMDUwMEY0MDAwMDAwNzcwMjA1MDBGQzAwMDAwMDc3NEYKKzoxMDA1QzAwMDA0MDYxMDAwMDIwMDAwMjAwMjA2MDBEQzAwMDAwMDAxMEEKKzoxMDA1RDAwMDAxMDYwMEQ4MDAwMDAwMDAwNDA2MDIwMDAwMDMwMjIwMEIKKzoxMDA1RTAwMDAyMDYwMERDMDAwMDAwMDAwMTA2MDBCODAwMDAwMDAwNjgKKzoxMDA1RjAwMDAxMDYwMEM4MDAwMDAwMDAwMTA2MDBCQzAwMDAwMDAwNjkKKzoxMDA2MDAwMDAxMDYwMENDMDAwMDAwMDAwNzE4MDQwMDAwQTkwMDAwNEIKKzoxMDA2MTAwMDA4MTgwN0M4MDAwNzAyMjMwNzFDMDAwMDJDMkMwMDAwNDQKKzoxMDA2MjAwMDA3MUM4MDAwMzg5MzBCMEMwNzFEMDAwMDI5MzExOTMxN0QKKzoxMDA2MzAwMDA4MUQ2ODYwNTJGNDAyMjUwMTE4MDAwMDAwMDAwMDAwNDcKKzoxMDA2NDAwMDAxMTgwMDA0MDAwMDAwMDAwMTE4MDAwODAwMDAwMDAwNkMKKzoxMDA2NTAwMDAxMTgwMDBDMDAwMDAwMDAwMTE4MDAxMDAwMDAwMDAwNEMKKzoxMDA2NjAwMDAxMTgwMDE0MDAwMDAwMDAwMjE4MDAyMDAwMDAwMDAxMjIKKzoxMDA2NzAwMDAyMTgwMDI0MDAwMDAwMDIwMjE4MDAyODAwMDAwMDAzRjUKKzoxMDA2ODAwMDAyMTgwMDJDMDAwMDAwMDAwMjE4MDAzMDAwMDAwMDA0RDYKKzoxMDA2OTAwMDAyMTgwMDM0MDAwMDAwMDEwMjE4MDAzODAwMDAwMDAwQjkKKzoxMDA2QTAwMDAyMTgwMDNDMDAwMDAwMDEwMjE4MDA0MDAwMDAwMDA0OTUKKzoxMDA2QjAwMDAyMTgwMDQ0MDAwMDAwMDAwMjE4MDA0ODAwMDAwMDAxNzkKKzoxMDA2QzAwMDAyMTgwMDRDMDAwMDAwMDMwMjE4MDA1MDAwMDAwMDAwNTcKKzoxMDA2RDAwMDAyMTgwMDU0MDAwMDAwMDEwMjE4MDA1ODAwMDAwMDA0MzUKKzoxMDA2RTAwMDAyMTgwMDVDMDAwMDAwMDAwMjE4MDA2MDAwMDAwMDAxMTkKKzoxMDA2RjAwMDAyMTgwMDY0MDAwMDAwMDMwMjE4MDA2ODAwMDAwMDAwRjcKKzoxMDA3MDAwMDAyMTgwMDZDMDAwMDAwMDEwMjE4MDA3MDAwMDAwMDA0RDQKKzoxMDA3MTAwMDAyMTgwMDc0MDAwMDAwMDAwMjE4MDA3ODAwMDAwMDA0QjUKKzoxMDA3MjAwMDAyMTgwMDdDMDAwMDAwMDMwNjE4MDA4MDAwMDAwMDAyOTAKKzoxMDA3MzAwMDAyMTgwMEE0MDAwMDNGRkYwMjE4MDBBODAwMDAwM0ZGRjkKKzoxMDA3NDAwMDAyMTgwMjI0MDAwMDAwMDAwMjE4MDIzNDAwMDAwMDAwMTkKKzoxMDA3NTAwMDAyMTgwMjRDMDAwMDAwMDAwMjE4MDJFNDAwMDAwMEZGMzIKKzoxMDA3NjAwMDA2MTgxMDAwMDAwMDA0MDAwMjFCOEJDMDAwMDAwMDAxRUUKKzoxMDA3NzAwMDAyMUI4MDAwMDAwMDAwMzQwMjFCODA0MDAwMDAwMDE4QjMKKzoxMDA3ODAwMDAyMUI4MDgwMDAwMDAwMEMwMjFCODBDMDAwMDAwMDIwQzMKKzoxMDA3OTAwMDBDMUI4MzAwMDAwN0ExMjAwQTFCODMwMDAwMDAwMTM4MDYKKzoxMDA3QTAwMDBCMUI4MzAwMDAwMDEzODgwMjFCODNDMDAwMDAwMUY0QjAKKzoxMDA3QjAwMDAyMUIxNDgwMDAwMDAwMDEwQTFCMTQ4MDAwMDAwMDAwQ0UKKzoxMDA3QzAwMDA2MUExMDAwMDAwMDAzQjMwNDFBMUVDQzAwMDEwMjI3MTEKKzoxMDA3RDAwMDA2MUFBMDIwMDAwMDAwQzgwNjFBQTAwMDAwMDAwMDAyQUYKKzoxMDA3RTAwMDAyMUExRUQwMDAwMDAwMDAwNjFBMUVEODAwMDAwMDA2RTMKKzoxMDA3RjAwMDA2MUEzNkU4MDAwMDAwMDQwNjFBMzZFMDAwMDAwMDAyN0YKKzoxMDA4MDAwMDA2MUE1MDAwMDAwMDAwMDIwNjFBNTAwODAwMDAwMDA0RkEKKzoxMDA4MTAwMDA2MUE1MDE4MDAwMDAwMDQwNjFBNTAyODAwMDAwMDA0QjAKKzoxMDA4MjAwMDA2MUE1MDM4MDAwMDAwMDQwNjFBNTA0ODAwMDAwMDA0NjAKKzoxMDA4MzAwMDA2MUE1MDU4MDAwMDAwMDQwNjFBNTA2ODAwMDAwMDA0MTAKKzoxMDA4NDAwMDA2MUE1MDc4MDAwMDAwMDIwNDFBNDA0MDAwMDIwMjI4RjQKKzoxMDA4NTAwMDA2MUE0MDAwMDAwMDAwMDIwNjFBNDAwODAwMDAwMDAyQ0MKKzoxMDA4NjAwMDA0MUE2MkMwMDAyMDAyMkEwNjFBRDEwMDAwMDAwMDAyMDkKKzoxMDA4NzAwMDA2MUEyMDAwMDAwMDAxMjQwNjFBQjAwMDAwMDAwMDI4MUIKKzoxMDA4ODAwMDA2MUFCMTQwMDAwMDAwMEMwNjFBMzMwMDAwMDAwMDE0RTQKKzoxMDA4OTAwMDA2MUEzM0EwMDAwMDAwNjgwNjFBODEwODAwMDAwMDAyNTIKKzoxMDA4QTAwMDA2MUFEMUM4MDAwMDAwMDIwNjFBRDFEODAwMDAwMDIwQTQKKzoxMDA4QjAwMDA2MUEyNDkwMDAwMDAxMjQwNjFBQjBBMDAwMDAwMDI4QTcKKzoxMDA4QzAwMDA2MUFCMTcwMDAwMDAwMEMwNjFBMzM1MDAwMDAwMDE0MjQKKzoxMDA4RDAwMDA2MUEzNTQwMDAwMDAwNjgwNjFBODExMDAwMDAwMDAyNjgKKzoxMDA4RTAwMDA2MUFEMUQwMDAwMDAwMDIwNjFBRDI1ODAwMDAwMDIwREIKKzoxMDA4RjAwMDAyMUEyOTIwMDAwMDAwMDAwNjFBMzAwMDAwMDAwMDAyNDEKKzoxMDA5MDAwMDA0MUEzMDA4MDAwNTAyNEEwNjFBMzAxQzAwMDAwMDA5Q0IKKzoxMDA5MTAwMDA2MUEzMjAwMDAwMDAwMDgwNjFBNTAwMDAwMDAwMDAyMEIKKzoxMDA5MjAwMDA2MUE1MDgwMDAwMDAwMTIwNjFBNDAwMDAwMDAwMDAyNjMKKzoxMDA5MzAwMDA2MUFEMEMwMDAwMDAwMDIwMjFBMjkyNDAwMDAwMDAwOUMKKzoxMDA5NDAwMDA2MUEzMDQwMDAwMDAwMDIwNDFBMzA0ODAwMDUwMjRGMjkKKzoxMDA5NTAwMDA2MUEzMDVDMDAwMDAwMDkwNjFBMzIyMDAwMDAwMDA4NjgKKzoxMDA5NjAwMDA2MUE1MDEwMDAwMDAwMDIwNjFBNTBDODAwMDAwMDEyQkIKKzoxMDA5NzAwMDA2MUE0MDA4MDAwMDAwMDIwNjFBRDBDODAwMDAwMDAyNTMKKzoxMDA5ODAwMDAyMUEyOTI4MDAwMDAwMDAwNjFBMzA4MDAwMDAwMDAyMjgKKzoxMDA5OTAwMDA0MUEzMDg4MDAwNTAyNTQwNjFBMzA5QzAwMDAwMDA5MzEKKzoxMDA5QTAwMDA2MUEzMjQwMDAwMDAwMDgwNjFBNTAyMDAwMDAwMDAyMUIKKzoxMDA5QjAwMDA2MUE1MTEwMDAwMDAwMTIwNDFBNDAxMDAwMDIwMjU5RDkKKzoxMDA5QzAwMDA2MUFEMEQwMDAwMDAwMDIwMjFBMjkyQzAwMDAwMDAwRjQKKzoxMDA5RDAwMDA2MUEzMEMwMDAwMDAwMDIwNDFBMzBDODAwMDUwMjVCOEQKKzoxMDA5RTAwMDA2MUEzMERDMDAwMDAwMDkwNjFBMzI2MDAwMDAwMDA4MTgKKzoxMDA5RjAwMDA2MUE1MDMwMDAwMDAwMDIwNjFBNTE1ODAwMDAwMDEyN0EKKzoxMDBBMDAwMDA0MUE0MDE4MDAwMjAyNjAwNjFBRDBEODAwMDAwMDAyNDIKKzoxMDBBMTAwMDAyMUEyOTMwMDAwMDAwMDAwNjFBMzEwMDAwMDAwMDAyMEUKKzoxMDBBMjAwMDA0MUEzMTA4MDAwNTAyNjIwNjFBMzExQzAwMDAwMDA5OTAKKzoxMDBBMzAwMDA2MUEzMjgwMDAwMDAwMDgwNjFBNTA0MDAwMDAwMDAyMkEKKzoxMDBBNDAwMDA2MUE1MUEwMDAwMDAwMTIwNDFBNDAyMDAwMDIwMjY3OUEKKzoxMDBBNTAwMDA2MUFEMEUwMDAwMDAwMDIwMjFBMjkzNDAwMDAwMDAwNEIKKzoxMDBBNjAwMDA2MUEzMTQwMDAwMDAwMDIwNDFBMzE0ODAwMDUwMjY5RUMKKzoxMDBBNzAwMDA2MUEzMTVDMDAwMDAwMDkwNjFBMzJBMDAwMDAwMDA4QzYKKzoxMDBBODAwMDA2MUE1MDUwMDAwMDAwMDIwNjFBNTFFODAwMDAwMDEyMzkKKzoxMDBBOTAwMDA0MUE0MDI4MDAwMjAyNkUwNjFBRDBFODAwMDAwMDAyODQKKzoxMDBBQTAwMDAyMUEyOTM4MDAwMDAwMDAwNjFBMzE4MDAwMDAwMDAyRjYKKzoxMDBBQjAwMDA0MUEzMTg4MDAwNTAyNzAwNjFBMzE5QzAwMDAwMDA5RjIKKzoxMDBBQzAwMDA2MUEzMkMwMDAwMDAwMDgwNjFBNTA2MDAwMDAwMDAyM0EKKzoxMDBBRDAwMDA2MUE1MjMwMDAwMDAwMTIwNDFBNDAzMDAwMDIwMjc1NUIKKzoxMDBBRTAwMDA2MUFEMEYwMDAwMDAwMDIwMjFBMjkzQzAwMDAwMDAwQTMKKzoxMDBBRjAwMDA2MUEzMUMwMDAwMDAwMDIwNDFBMzFDODAwMDUwMjc3NEUKKzoxMDBCMDAwMDA2MUEzMURDMDAwMDAwMDkwNjFBMzJFMDAwMDAwMDA4NzUKKzoxMDBCMTAwMDA2MUE1MDcwMDAwMDAwMDIwNjFBNTI3ODAwMDAwMDEyRjcKKzoxMDBCMjAwMDA0MUE0MDM4MDAwMjAyN0MwNjFBRDBGODAwMDAwMDAyQzUKKzoxMDBCMzAwMDAyMDBBMjk0MDcxRDI5MTEwMjAwQTI5ODAwMDAwMDAwRTMKKzoxMDBCNDAwMDAyMDBBMjlDMDA5QzA0MjQwMjAwQTJBMDAwMDAwMDAwNUQKKzoxMDBCNTAwMDAyMDBBMkE0MDAwMDAyMDkwMjAwQTI3MDAwMDAwMDAwMkUKKzoxMDBCNjAwMDAyMDBBMjc0MDAwMDAwMDAwMjAwQTI3MDAwMDAwMDAwNTkKKzoxMDBCNzAwMDAyMDBBMjc0MDAwMDAwMDAwMjAwQTI3MDAwMDAwMDAwNDkKKzoxMDBCODAwMDAyMDBBMjc0MDAwMDAwMDAwMjAwQTI3MDAwMDAwMDAwMzkKKzoxMDBCOTAwMDAyMDBBMjc0MDAwMDAwMDAwMjAxMDBCNDAwMDAwMDAxODUKKzoxMDBCQTAwMDAyMDEwMEI4MDAwMDAwMDEwMjAxMDBEQzAwMDAwMDAxQTkKKzoxMDBCQjAwMDAyMDEwMTAwMDAwMDAwMDEwMjAxMDEwNDAwMDAwMDAxMjcKKzoxMDBCQzAwMDAyMDEwMDdDMDAzMDAwMDAwMjAxMDA4NDAwMDAwMDI4QzcKKzoxMDBCRDAwMDAyMDEwMDhDMDAwMDAwMDAwMjAxMDEzMDAwMDAwMDA0NEUKKzoxMDBCRTAwMDAyMDEwMjVDMDAwMDAwMDEwMjAxMDMyODAwMDAwMDAwNzUKKzoxMDBCRjAwMDAyMDE2MDcwMDAwMDAwMDcwMjAxNjA4MDAwMDAwMDAxMzcKKzoxMDBDMDAwMDAyMDEwNTU0MDAwMDAwMzAwMjAxMDBDNDAwMDAwMDAxOTAKKzoxMDBDMTAwMDAyMDEwMENDMDAwMDAwMDEwMjAxMDBGODAwMDAwMDAxMDgKKzoxMDBDMjAwMDAyMDEwMEYwMDAwMDAwMDEwMjAxMDA4MDAwMzAwMDAwMUQKKzoxMDBDMzAwMDAyMDEwMDg4MDAwMDAwMjgwMjAxMDA5MDAwMDAwMDAwNkUKKzoxMDBDNDAwMDAyMDEwMTM0MDAwMDAwMDQwMjAxMDJEQzAwMDAwMDAxODYKKzoxMDBDNTAwMDAyMDEwMzJDMDAwMDAwMDAwMjAxNjA3NDAwMDAwMDA3ODQKKzoxMDBDNjAwMDAyMDE2MDg0MDAwMDAwMDEwMjAxMDU2NDAwMDAwMDMwMDAKKzoxMDBDNzAwMDAyMDEwMEM4MDAwMDAwMDEwMjAxMDBEMDAwMDAwMDAxRDQKKzoxMDBDODAwMDAyMDEwMEZDMDAwMDAwMDEwMjAxMDBGNDAwMDAwMDAxNkMKKzoxMDBDOTAwMDAyMEMxMDAwMDAwMDAwMjAwMjBDMjAwODAwMDAwMjExQ0QKKzoxMDBDQTAwMDAyMEMyMDBDMDAwMDAyMDAwMjBDMjAxMDAwMDAwMjA0QzQKKzoxMDBDQjAwMDAyMEMyMDFDMDAwMEZGRkYwMjBDMjAyMDAwMDBGRkZGQTAKKzoxMDBDQzAwMDAyMEMyMDI0MDAwMEZGRkYwMjBDMjAyODAwMDBGRkZGODAKKzoxMDBDRDAwMDA2MEMyMDM4MDAwMDAwMDIwMjBDMjA0MDAwMDAwMDM0MDYKKzoxMDBDRTAwMDAyMEMyMDQ0MDAwMDAwMzUwMjBDMjA0ODAwMDAwMDIwQzcKKzoxMDBDRjAwMDAyMEMyMDRDMDAwMDAwMjEwMjBDMjA1MDAwMDAwMDIyQjkKKzoxMDBEMDAwMDAyMEMyMDU0MDAwMDAwMjMwMjBDMjA1ODAwMDAwMDI0OTQKKzoxMDBEMTAwMDAyMEMyMDVDMDAwMDAwMjUwMjBDMjA2MDAwMDAwMDI2NzAKKzoxMDBEMjAwMDAyMEMyMDY0MDAwMDAwMjcwMjBDMjA2ODAwMDAwMDI4NEMKKzoxMDBEMzAwMDAyMEMyMDZDMDAwMDAwMjkwMjBDMjA3MDAwMDAwMDJBMjgKKzoxMDBENDAwMDAyMEMyMDc0MDAwMDAwMkIwNjBDMjA3ODAwMDAwMDU2RDYKKzoxMDBENTAwMDAyMEMyMUQwMDAwMDAwMDEwMjBDMjFENDAwMDAwMDAxOEYKKzoxMDBENjAwMDAyMEMyMUQ4MDAwMDAwMDEwMjBDMjFEQzAwMDAwMDAxNkYKKzoxMDBENzAwMDAyMEMyMUUwMDAwMDAwMDEwMjBDMjFFNDAwMDAwMDAxNEYKKzoxMDBEODAwMDAyMEMyMUU4MDAwMDAwMDEwMjBDMjFFQzAwMDAwMDAxMkYKKzoxMDBEOTAwMDAyMEMyMUYwMDAwMDAwMDEwMjBDMjFGNDAwMDAwMDAxMEYKKzoxMDBEQTAwMDA2MEMyMUY4MDAwMDAwMTAwMjBDMjIzODA3RkZGRkZGOUMKKzoxMDBEQjAwMDAyMEMyMjNDMDAwMDAwM0YwMjBDMjI0MDA3RkZGRkZGMTQKKzoxMDBEQzAwMDAyMEMyMjQ0MDAwMDAwMEYwMTBDMjI0ODAwMDAwMDAwMjkKKzoxMDBERDAwMDAxMEMyMjRDMDAwMDAwMDAwMTBDMjI1MDAwMDAwMDAwMTkKKzoxMDBERTAwMDAxMEMyMjU0MDAwMDAwMDAwMTBDMjI1ODAwMDAwMDAwRjkKKzoxMDBERjAwMDAxMEMyMjVDMDAwMDAwMDAwMTBDMjI2MDAwMDAwMDAwRDkKKzoxMDBFMDAwMDAxMEMyMjY0MDAwMDAwMDAwMTBDMjI2ODAwMDAwMDAwQjgKKzoxMDBFMTAwMDAxMEMyMjZDMDAwMDAwMDAwMTBDMjI3MDAwMDAwMDAwOTgKKzoxMDBFMjAwMDAxMEMyMjc0MDAwMDAwMDAwMTBDMjI3ODAwMDAwMDAwNzgKKzoxMDBFMzAwMDAxMEMyMjdDMDAwMDAwMDAwQzBDMjAwMDAwMDAwM0U4RTQKKzoxMDBFNDAwMDBBMEMyMDAwMDAwMDAwMDEwQjBDMjAwMDAwMDAwMDBBMkEKKzoxMDBFNTAwMDAyMEM0MDA4MDAwMDA0MTEwMjBDNDAwQzAwMDAwNDAwQzkKKzoxMDBFNjAwMDAyMEM0MDEwMDAwMDA0MDQwMjBDNDAxNDAwMDAwNDIxOTUKKzoxMDBFNzAwMDAyMEM0MDFDMDAwMEZGRkYwMjBDNDAyMDAwMDBGRkZGOUUKKzoxMDBFODAwMDAyMEM0MDI0MDAwMEZGRkYwMjBDNDAyODAwMDBGRkZGN0UKKzoxMDBFOTAwMDAyMEM0MDM4MDAwMDAwNDYwMjBDNDAzQzAwMDAwMDA1RjcKKzoxMDBFQTAwMDA2MEM0MDQwMDAwMDAwMDIwMjBDNDA0ODAwMDAwMDBBMEUKKzoxMDBFQjAwMDAyMEM0MDRDMDAwMDAwRjAwNjBDNDA1MDAwMDAwMDFGRTcKKzoxMDBFQzAwMDAyMEM0MENDMDAwMDAwMDEwNjBDNDBEMDAwMDAwMDNBQUIKKzoxMDBFRDAwMDAyMEM0MUI4MDAwMDAwMDEwNjBDNDFCQzAwMDAwMDAzRjgKKzoxMDBFRTAwMDAyMEM0MUM4MDAwMDAwMDEwMjBDNDFDQzAwMDAwMDAxQ0UKKzoxMDBFRjAwMDA2MEM0MUQwMDAwMDAwMUEwMjBDNDIzODA3RkZGRkZGMjkKKzoxMDBGMDAwMDAyMEM0MjNDMDAwMDAwM0YwMjBDNDI0MDA3RkZGRkZGODIKKzoxMDBGMTAwMDAyMEM0MjQ0MDAwMDAwMEYwMTBDNDI0ODAwMDAwMDAwOTcKKzoxMDBGMjAwMDAxMEM0MjRDMDAwMDAwMDAwMTBDNDI1MDAwMDAwMDAwODcKKzoxMDBGMzAwMDAxMEM0MjU0MDAwMDAwMDAwMTBDNDI1ODAwMDAwMDAwNjcKKzoxMDBGNDAwMDAxMEM0MjVDMDAwMDAwMDAwMTBDNDI2MDAwMDAwMDAwNDcKKzoxMDBGNTAwMDAxMEM0MjY0MDAwMDAwMDAwMTBDNDI2ODAwMDAwMDAwMjcKKzoxMDBGNjAwMDAxMEM0MjZDMDAwMDAwMDAwMTBDNDI3MDAwMDAwMDAwMDcKKzoxMDBGNzAwMDAxMEM0Mjc0MDAwMDAwMDAwMTBDNDI3ODAwMDAwMDAwRTcKKzoxMDBGODAwMDAxMEM0MjdDMDAwMDAwMDAwMTBDNDI4MDAwMDAwMDAwQzcKKzoxMDBGOTAwMDBDMEM0MDAwMDAwMDAzRTgwQTBDNDAwMDAwMDAwMDAxQjcKKzoxMDBGQTAwMDBCMEM0MDAwMDAwMDAwMEEwMjBEMDA0NDAwMDAwMDMyNUIKKzoxMDBGQjAwMDAyMEQwMDhDMDIxNTAwMjAwMjBEMDA5MDAyMTUwMDIwODkKKzoxMDBGQzAwMDAyMEQwMDk0MDgxMDAwMDAwMjBEMDA5ODAwMDAwMDMzOEMKKzoxMDBGRDAwMDAyMEQwMDlDMDAwMDAwMDIwMjBEMDBBMDAwMDAwMDAwQjUKKzoxMDBGRTAwMDAyMEQwMEE0MDAwMDAwMDUwMjBEMDBBODAwMDAwMDA1OEQKKzoxMDBGRjAwMDA2MEQwMEFDMDAwMDAwMDIwMjBEMDBCNDAwMDAwMDAyNkIKKzoxMDEwMDAwMDAyMEQwMEI4MDAwMDAwMDMwMjBEMDBCQzAwMDAwMDAyNDkKKzoxMDEwMTAwMDAyMEQwMEMwMDAwMDAwMDEwMjBEMDBDODAwMDAwMDAyMjcKKzoxMDEwMjAwMDAyMEQwMENDMDAwMDAwMDIwMjBEMDEwODAwMDAwMDAxQ0EKKzoxMDEwMzAwMDAyMEQwMTVDMDAwMDAwMDEwMjBEMDE2NDAwMDAwMDAxQ0UKKzoxMDEwNDAwMDAyMEQwMTY4MDAwMDAwMDIwMjBEMDIwNDAwMDAwMDAxMTAKKzoxMDEwNTAwMDAyMEQwMjBDMDAwMDAwMjAwMjBEMDIxMDAwMDAwMDQwRjIKKzoxMDEwNjAwMDAyMEQwMjE0MDAwMDAwNDAwMjBEMDIyMDAwMDAwMDAzRTcKKzoxMDEwNzAwMDAyMEQwMjI0MDAwMDAwMTgwNjBEMDI4MDAwMDAwMDEyN0MKKzoxMDEwODAwMDA0MEQwMzAwMDAyNDAyN0UwMjBEMDA0QzAwMDAwMDAxNEMKKzoxMDEwOTAwMDAyMEQwMDUwMDAwMDAwMDIwMjBEMDA1NDAwMDAwMDA4ODQKKzoxMDEwQTAwMDAyMEQwMDU4MDAwMDAwMDgwNjBEMDA1QzAwMDAwMDA0NUUKKzoxMDEwQjAwMDAyMEQwMEM0MDAwMDAwMDQwMjBEMDAwNDAwMDAwMDAxNDUKKzoxMDEwQzAwMDAyMEQwMDA4MDAwMDAwMDEwMjBEMDAwQzAwMDAwMDAxRUMKKzoxMDEwRDAwMDAyMEQwMDEwMDAwMDAwMDEwMjBEMDAxNDAwMDAwMDAxQ0MKKzoxMDEwRTAwMDAyMEQwMDE4MDAwMDAwMDEwMjBEMDAxQzAwMDAwMDAxQUMKKzoxMDEwRjAwMDAyMEQwMDIwMDAwMDAwMDEwMjBEMDAyNDAwMDAwMDAxOEMKKzoxMDExMDAwMDAyMEQwMDI4MDAwMDAwMDEwMjBEMDAyQzAwMDAwMDAxNkIKKzoxMDExMTAwMDAyMEQwMDMwMDAwMDAwMDEwMjBEMDAzNDAwMDAwMDAxNEIKKzoxMDExMjAwMDAyMEQwMDM4MDAwMDAwMDEwMjBEMDAzQzAwMDAwMDAxMkIKKzoxMDExMzAwMDAyMEQwMTE0MDAwMDAwMDkwMjBEMDExQzAwMDAwMDBBNEMKKzoxMDExNDAwMDAyMEQwMTI0MDAwMDAwMDcwMjBEMDEyQzAwMDAwMDA3MjEKKzoxMDExNTAwMDAyMEQwMTM0MDAwMDAwMEMwMjBEMDEzQzAwMDAwMDBCRTgKKzoxMDExNjAwMDAyMEQwMTQ0MDAwMDAwMDcwMjBEMDExODAwMDAwMDI5RDMKKzoxMDExNzAwMDAyMEQwMTIwMDAwMDAwMkEwMjBEMDEyODAwMDAwMDI3QjYKKzoxMDExODAwMDAyMEQwMTMwMDAwMDAwMjcwMjBEMDEzODAwMDAwMDJDODQKKzoxMDExOTAwMDAyMEQwMTQwMDAwMDAwMkIwMjBEMDE0ODAwMDAwMDI3NTUKKzoxMDExQTAwMDAyMEQwMTE0MDAwMDAwMTkwMjBEMDExQzAwMDAwMDFBQkMKKzoxMDExQjAwMDAyMEQwMTI0MDAwMDAwMTcwMjBEMDEyQzAwMDAwMDE3OTEKKzoxMDExQzAwMDAyMEQwMTM0MDAwMDAwMUMwMjBEMDEzQzAwMDAwMDFCNTgKKzoxMDExRDAwMDAyMEQwMTQ0MDAwMDAwMTcwMjBEMDExODAwMDAwMDM5NDMKKzoxMDExRTAwMDAyMEQwMTIwMDAwMDAwM0EwMjBEMDEyODAwMDAwMDM3MjYKKzoxMDExRjAwMDAyMEQwMTMwMDAwMDAwMzcwMjBEMDEzODAwMDAwMDNDRjQKKzoxMDEyMDAwMDAyMEQwMTQwMDAwMDAwM0IwMjBEMDE0ODAwMDAwMDM3QzQKKzoxMDEyMTAwMDAyMEQwMTE0MDAwMDAwNDkwMjBEMDExQzAwMDAwMDRBRUIKKzoxMDEyMjAwMDAyMEQwMTI0MDAwMDAwNDcwMjBEMDEyQzAwMDAwMDQ3QzAKKzoxMDEyMzAwMDAyMEQwMTM0MDAwMDAwNEMwMjBEMDEzQzAwMDAwMDRCODcKKzoxMDEyNDAwMDAyMEQwMTQ0MDAwMDAwNDcwMjBEMDExODAwMDAwMDY5NzIKKzoxMDEyNTAwMDAyMEQwMTIwMDAwMDAwNkEwMjBEMDEyODAwMDAwMDY3NTUKKzoxMDEyNjAwMDAyMEQwMTMwMDAwMDAwNjcwMjBEMDEzODAwMDAwMDZDMjMKKzoxMDEyNzAwMDAyMEQwMTQwMDAwMDAwNkIwMjBEMDE0ODAwMDAwMDY3RjQKKzoxMDEyODAwMDAyMEQwMTE0MDAwMDAwNTkwMjBEMDExQzAwMDAwMDVBNUIKKzoxMDEyOTAwMDAyMEQwMTI0MDAwMDAwNTcwMjBEMDEyQzAwMDAwMDU3MzAKKzoxMDEyQTAwMDAyMEQwMTM0MDAwMDAwNUMwMjBEMDEzQzAwMDAwMDVCRjcKKzoxMDEyQjAwMDAyMEQwMTQ0MDAwMDAwNTcwMjBEMDExODAwMDAwMDc5RTIKKzoxMDEyQzAwMDAyMEQwMTIwMDAwMDAwN0EwMjBEMDEyODAwMDAwMDc3QzUKKzoxMDEyRDAwMDAyMEQwMTMwMDAwMDAwNzcwMjBEMDEzODAwMDAwMDdDOTMKKzoxMDEyRTAwMDAyMEQwMTQwMDAwMDAwN0IwMjBEMDE0ODAwMDAwMDc3NjQKKzoxMDEyRjAwMDAyMEUwMDRDMDAwMDAwMzIwMjBFMDA5NDAyMTUwMDIwODUKKzoxMDEzMDAwMDAyMEUwMDk4MDIxNTAwMjAwMjBFMDA5QzAwMDAwMDMwMjIKKzoxMDEzMTAwMDAyMEUwMEEwMDgxMDAwMDAwMjBFMDBBNDAwMDAwMDMzMUUKKzoxMDEzMjAwMDAyMEUwMEE4MDAwMDAwMzAwMjBFMDBBQzAwMDAwMDMxRTgKKzoxMDEzMzAwMDAyMEUwMEIwMDAwMDAwMDIwMjBFMDBCNDAwMDAwMDA0MjMKKzoxMDEzNDAwMDAyMEUwMEI4MDAwMDAwMDAwMjBFMDBCQzAwMDAwMDAyMDcKKzoxMDEzNTAwMDAyMEUwMEMwMDAwMDAwMDIwMjBFMDBDNDAwMDAwMDAwRTcKKzoxMDEzNjAwMDAyMEUwMEM4MDAwMDAwMDIwMjBFMDBDQzAwMDAwMDA3QzAKKzoxMDEzNzAwMDAyMEUwMEQwMDAwMDAwMDIwMjBFMDBENDAwMDAwMDAyQTUKKzoxMDEzODAwMDAyMEUwMEQ4MDAwMDAwMDEwMjBFMDBFNDAwMDAwMDAxN0YKKzoxMDEzOTAwMDAyMEUwMTQ0MDAwMDAwMDEwMjBFMDE0QzAwMDAwMDAxOTkKKzoxMDEzQTAwMDAyMEUwMTUwMDAwMDAwMDIwMjBFMDIwNDAwMDAwMDAxQzMKKzoxMDEzQjAwMDAyMEUwMjBDMDAwMDAwNDAwMjBFMDIxMDAwMDAwMDQwNkQKKzoxMDEzQzAwMDAyMEUwMjFDMDAwMDAwMDQwMjBFMDIyMDAwMDAwMDIwOTkKKzoxMDEzRDAwMDAyMEUwMjI0MDAwMDAwMEUwMjBFMDIyODAwMDAwMDFCNzQKKzoxMDEzRTAwMDA2MEUwMzAwMDAwMDAwMTIwNDBFMDI4MDAwMUIwMkEyODEKKzoxMDEzRjAwMDAyMEUwMDU0MDAwMDAwMEMwMjBFMDA1ODAwMDAwMDA5MEMKKzoxMDE0MDAwMDAyMEUwMDVDMDAwMDAwMEYwMjBFMDA2MDAwMDAwMDEwRTEKKzoxMDE0MTAwMDAyMEUwMDY0MDAwMDAwMEIwNjBFMDA2ODAwMDAwMDAzQ0UKKzoxMDE0MjAwMDAyMEUwMERDMDAwMDAwMDMwMjBFMDAwNDAwMDAwMDAxQjgKKzoxMDE0MzAwMDAyMEUwMDA4MDAwMDAwMDEwMjBFMDAwQzAwMDAwMDAxNzYKKzoxMDE0NDAwMDAyMEUwMDEwMDAwMDAwMDEwMjBFMDAxNDAwMDAwMDAxNTYKKzoxMDE0NTAwMDAyMEUwMDE4MDAwMDAwMDEwMjBFMDAxQzAwMDAwMDAxMzYKKzoxMDE0NjAwMDAyMEUwMDIwMDAwMDAwMDEwMjBFMDAyNDAwMDAwMDAxMTYKKzoxMDE0NzAwMDAyMEUwMDI4MDAwMDAwMDEwMjBFMDAyQzAwMDAwMDAxRjYKKzoxMDE0ODAwMDAyMEUwMDMwMDAwMDAwMDEwMjBFMDAzNDAwMDAwMDAxRDYKKzoxMDE0OTAwMDAyMEUwMDM4MDAwMDAwMDEwMjBFMDAzQzAwMDAwMDAxQjYKKzoxMDE0QTAwMDAyMEUwMDQwMDAwMDAwMDEwMjBFMDA0NDAwMDAwMDAxOTYKKzoxMDE0QjAwMDAyMEUwMTEwMDAwMDAwMEYwMjBFMDExODAwMDAwMDBFQzUKKzoxMDE0QzAwMDAyMEUwMTIwMDAwMDAwMDAwMjBFMDEyODAwMDAwMDAwQjIKKzoxMDE0RDAwMDAyMEUwMTE0MDAwMDAwMkYwMjBFMDExQzAwMDAwMDJFNUQKKzoxMDE0RTAwMDAyMEUwMTI0MDAwMDAwMDAwMjBFMDEyQzAwMDAwMDAwOEEKKzoxMDE0RjAwMDAyMEUwMTEwMDAwMDAwMUYwMjBFMDExODAwMDAwMDFFNjUKKzoxMDE1MDAwMDAyMEUwMTIwMDAwMDAwMDAwMjBFMDEyODAwMDAwMDAwNzEKKzoxMDE1MTAwMDAyMEUwMTE0MDAwMDAwM0YwMjBFMDExQzAwMDAwMDNFRkMKKzoxMDE1MjAwMDAyMEUwMTI0MDAwMDAwMDAwMjBFMDEyQzAwMDAwMDAwNDkKKzoxMDE1MzAwMDAyMEUwMTEwMDAwMDAwNEYwMjBFMDExODAwMDAwMDRFQzQKKzoxMDE1NDAwMDAyMEUwMTIwMDAwMDAwMDAwMjBFMDEyODAwMDAwMDAwMzEKKzoxMDE1NTAwMDAyMEUwMTE0MDAwMDAwNkYwMjBFMDExQzAwMDAwMDZFNUMKKzoxMDE1NjAwMDAyMEUwMTI0MDAwMDAwMDAwMjBFMDEyQzAwMDAwMDAwMDkKKzoxMDE1NzAwMDAyMEUwMTEwMDAwMDAwNUYwMjBFMDExODAwMDAwMDVFNjQKKzoxMDE1ODAwMDAyMEUwMTIwMDAwMDAwMDAwMjBFMDEyODAwMDAwMDAwRjEKKzoxMDE1OTAwMDAyMEUwMTE0MDAwMDAwN0YwMjBFMDExQzAwMDAwMDdFRkMKKzoxMDE1QTAwMDAyMEUwMTI0MDAwMDAwMDAwMjBFMDEyQzAwMDAwMDAwQzkKKzoxMDE1QjAwMDA3MzAwNDAwMDBFNTAwMDAwODMwMDdEODAwMDUwMkJEMzAKKzoxMDE1QzAwMDA3MzQwMDAwMkVGNzAwMDAwNzM0ODAwMDMxMUEwQkJFRUMKKzoxMDE1RDAwMDA3MzUwMDAwMzU2RjE4MDUwNzM1ODAwMDM4QzQyNTYxRDAKKzoxMDE1RTAwMDA3MzYwMDAwMTRDNTMzOTMwODM2MzQwMDM5ODAwMkJGMzMKKzoxMDE1RjAwMDAxMzAwMDAwMDAwMDAwMDAwMTMwMDAwNDAwMDAwMDAwODUKKzoxMDE2MDAwMDAxMzAwMDA4MDAwMDAwMDAwMTMwMDAwQzAwMDAwMDAwNjQKKzoxMDE2MTAwMDAxMzAwMDEwMDAwMDAwMDAwMTMwMDAxNDAwMDAwMDAwNDQKKzoxMDE2MjAwMDAyMzAwMDIwMDAwMDAwMDEwMjMwMDAyNDAwMDAwMDAyMEYKKzoxMDE2MzAwMDAyMzAwMDI4MDAwMDAwMDMwMjMwMDAyQzAwMDAwMDAwRUYKKzoxMDE2NDAwMDAyMzAwMDMwMDAwMDAwMDQwMjMwMDAzNDAwMDAwMDAxQ0QKKzoxMDE2NTAwMDAyMzAwMDM4MDAwMDAwMDAwMjMwMDAzQzAwMDAwMDAxQjEKKzoxMDE2NjAwMDAyMzAwMDQwMDAwMDAwMDQwMjMwMDA0NDAwMDAwMDAwOEUKKzoxMDE2NzAwMDAyMzAwMDQ4MDAwMDAwMDEwMjMwMDA0QzAwMDAwMDAzNkUKKzoxMDE2ODAwMDAyMzAwMDUwMDAwMDAwMDAwMjMwMDA1NDAwMDAwMDAxNTEKKzoxMDE2OTAwMDAyMzAwMDU4MDAwMDAwMDQwMjMwMDA1QzAwMDAwMDAwMkUKKzoxMDE2QTAwMDAyMzAwMDYwMDAwMDAwMDEwMjMwMDA2NDAwMDAwMDAzMEUKKzoxMDE2QjAwMDAyMzAwMDY4MDAwMDAwMDAwMjMwMDA2QzAwMDAwMDAxRjEKKzoxMDE2QzAwMDAyMzAwMDcwMDAwMDAwMDQwMjMwMDA3NDAwMDAwMDAwQ0UKKzoxMDE2RDAwMDAyMzAwMDc4MDAwMDAwMDQwMjMwMDA3QzAwMDAwMDAzQUIKKzoxMDE2RTAwMDA2MzAwMDgwMDAwMDAwMDIwMjMwMDBBNDAwMDAzRkZGMkUKKzoxMDE2RjAwMDAyMzAwMEE4MDAwMDAzRkYwMjMwMDIyNDAwMDAwMDAwQjYKKzoxMDE3MDAwMDAyMzAwMjM0MDAwMDAwMDAwMjMwMDI0QzAwMDAwMDAwRjEKKzoxMDE3MTAwMDAyMzAwMkU0MDAwMEZGRkYwNjMwMjAwMDAwMDAwODAwNTUKKzoxMDE3MjAwMDAyMzM4QkMwMDAwMDAwMDEwMjMzODAwMDAwMDAwMDFBNjkKKzoxMDE3MzAwMDAyMzM4MDQwMDAwMDAwNEUwMjMzODA4MDAwMDAwMDEwMjEKKzoxMDE3NDAwMDAyMzM4MEMwMDAwMDAwMjAwQzMzODMwMDAwMDdBMTIwN0EKKzoxMDE3NTAwMDBBMzM4MzAwMDAwMDAxMzgwQjMzODMwMDAwMDAxMzg4MzQKKzoxMDE3NjAwMDAyMzM4M0MwMDAwMDAxRjQwQzMzODM4MDFEQ0Q2NTAwN0IKKzoxMDE3NzAwMDBBMzM4MzgwMDAwNEM0QjQwQjMzODM4MDAwNEM0QjQwOTUKKzoxMDE3ODAwMDBBMzMxNDgwMDAwMDAwMDAwMjMzMTQ4MDAwMDAwMDAxQkUKKzoxMDE3OTAwMDA2MzIyMDAwMDAwMDAxMDIwNjMyODAyMDAwMDAwMEM4NEUKKzoxMDE3QTAwMDA2MzI4MDAwMDAwMDAwMDIwNjMyM0RBODAwMDAwMDA0NUUKKzoxMDE3QjAwMDA2MzIzRDgwMDAwMDAwMDkwNDMyM0RBNDAwMDEwMkMxNTAKKzoxMDE3QzAwMDA2MzIzRDAwMDAwMDAwMjAwNjMyNTAwMDAwMDAwNDAwRjgKKzoxMDE3RDAwMDA2MzI0MDAwMDAwMDAwMDQwNjMyNDBEMDAwMDAwMDAyNDMKKzoxMDE3RTAwMDA2MzI2QjY4MDAwMDAwMDIwNDMyNkI3MDAwMDIwMkMyMTUKKzoxMDE3RjAwMDA2MzI2QjEwMDAwMDAwMDIwNDMyNzRDMDAwMDIwMkM0MDIKKzoxMDE4MDAwMDA2MzJEQTQwMDAwMDAwMDIwNjMyRTAwMDAwMDAwODAwNjQKKzoxMDE4MTAwMDAyMzMwODAwMDEwMDAwMDAwNDMzMEMwMDAwMTAwMkM2NkYKKzoxMDE4MjAwMDAyMzMwODAwMDAwMDAwMDAwNDMzMEM0MDAwMTAwMkQ2MTAKKzoxMDE4MzAwMDA2MzIyNDUwMDAwMDAwQjQwNjMyMkFEMDAwMDAwMDAyMTQKKzoxMDE4NDAwMDA2MzIxMDAwMDAwMDAxQTAwMjMyM0RCODAwMDAwMDAwODYKKzoxMDE4NTAwMDA2MzI1MDAwMDAwMDAwMjAwNjMyNTEwMDAwMDAwMDIwMzcKKzoxMDE4NjAwMDA2MzI1MjAwMDAwMDAwMjAwNjMyNTMwMDAwMDAwMDIwMjMKKzoxMDE4NzAwMDA2MzI1NDAwMDAwMDAwMjAwNjMyNTUwMDAwMDAwMDIwMEYKKzoxMDE4ODAwMDA2MzI1NjAwMDAwMDAwMjAwNjMyNTcwMDAwMDAwMDIwRkIKKzoxMDE4OTAwMDA2MzI1ODAwMDAwMDAwMjAwNjMyNTkwMDAwMDAwMDIwRTcKKzoxMDE4QTAwMDA2MzI1QTAwMDAwMDAwMjAwNjMyNUIwMDAwMDAwMDIwRDMKKzoxMDE4QjAwMDA2MzI1QzAwMDAwMDAwMjAwNjMyNUQwMDAwMDAwMDIwQkYKKzoxMDE4QzAwMDA2MzI1RTAwMDAwMDAwMjAwNjMyNUYwMDAwMDAwMDIwQUIKKzoxMDE4RDAwMDA2MzI2Qjc4MDAwMDAwNTIwNjMyNkUwODAwMDAwMDBDRTEKKzoxMDE4RTAwMDA2MzJEQTg4MDAwMDAwMDIwNjMyMjcyMDAwMDAwMEI0MjkKKzoxMDE4RjAwMDA2MzIyQUQ4MDAwMDAwMDIwNjMyMTY4MDAwMDAwMUEwM0QKKzoxMDE5MDAwMDAyMzIzREJDMDAwMDAwMDAwNjMyNTA4MDAwMDAwMDIwODIKKzoxMDE5MTAwMDA2MzI1MTgwMDAwMDAwMjAwNjMyNTI4MDAwMDAwMDIwNzQKKzoxMDE5MjAwMDA2MzI1MzgwMDAwMDAwMjAwNjMyNTQ4MDAwMDAwMDIwNjAKKzoxMDE5MzAwMDA2MzI1NTgwMDAwMDAwMjAwNjMyNTY4MDAwMDAwMDIwNEMKKzoxMDE5NDAwMDA2MzI1NzgwMDAwMDAwMjAwNjMyNTg4MDAwMDAwMDIwMzgKKzoxMDE5NTAwMDA2MzI1OTgwMDAwMDAwMjAwNjMyNUE4MDAwMDAwMDIwMjQKKzoxMDE5NjAwMDA2MzI1QjgwMDAwMDAwMjAwNjMyNUM4MDAwMDAwMDIwMTAKKzoxMDE5NzAwMDA2MzI1RDgwMDAwMDAwMjAwNjMyNUU4MDAwMDAwMDIwRkMKKzoxMDE5ODAwMDA2MzI1RjgwMDAwMDAwMjAwNjMyNkNDMDAwMDAwMDUyNkEKKzoxMDE5OTAwMDA2MzI2RTM4MDAwMDAwMEMwNjMyREE5MDAwMDAwMDAyQjkKKzoxMDE5QTAwMDAyMzIyQTMwMDAwMDAwMDAwNjMyNDAxMDAwMDAwMDAyMUYKKzoxMDE5QjAwMDA2MzJEMDAwMDAwMDAwMDYwMjMyMkEzNDAwMDAwMDAwODcKKzoxMDE5QzAwMDA2MzI0MDIwMDAwMDAwMDIwNjMyRDAxODAwMDAwMDA2NTcKKzoxMDE5RDAwMDAyMzIyQTM4MDAwMDAwMDAwNjMyNDAzMDAwMDAwMDAyQzcKKzoxMDE5RTAwMDA2MzJEMDMwMDAwMDAwMDYwMjMyMkEzQzAwMDAwMDAwMUYKKzoxMDE5RjAwMDA2MzI0MDQwMDAwMDAwMDIwNjMyRDA0ODAwMDAwMDA2RDcKKzoxMDFBMDAwMDAyMzIyQTQwMDAwMDAwMDAwNjMyNDA1MDAwMDAwMDAyNkUKKzoxMDFBMTAwMDA2MzJEMDYwMDAwMDAwMDYwMjMyMkE0NDAwMDAwMDAwQjYKKzoxMDFBMjAwMDA2MzI0MDYwMDAwMDAwMDIwNjMyRDA3ODAwMDAwMDA2NTYKKzoxMDFBMzAwMDAyMzIyQTQ4MDAwMDAwMDAwNjMyNDA3MDAwMDAwMDAyMTYKKzoxMDFBNDAwMDA2MzJEMDkwMDAwMDAwMDYwMjMyMkE0QzAwMDAwMDAwNEUKKzoxMDFBNTAwMDA2MzI0MDgwMDAwMDAwMDIwNjMyRDBBODAwMDAwMDA2RDYKKzoxMDFBNjAwMDA3MjAwNDAwMDA5MzAwMDAwODIwMDc4MDAwMTAwMkU2MTEKKzoxMDFBNzAwMDA3MjQwMDAwMkFERTAwMDAwNzI0ODAwMDJFMDUwQUI4OTMKKzoxMDFBODAwMDA4MjRFNEEwNjFEMjAyRTgwMTIwMDAwMDAwMDAwMDAwNjgKKzoxMDFBOTAwMDAxMjAwMDA0MDAwMDAwMDAwMTIwMDAwODAwMDAwMDAwRjgKKzoxMDFBQTAwMDAxMjAwMDBDMDAwMDAwMDAwMTIwMDAxMDAwMDAwMDAwRDgKKzoxMDFBQjAwMDAxMjAwMDE0MDAwMDAwMDAwMjIwMDAyMDAwMDAwMDAxQUUKKzoxMDFBQzAwMDAyMjAwMDI0MDAwMDAwMDIwMjIwMDAyODAwMDAwMDAzODEKKzoxMDFBRDAwMDAyMjAwMDJDMDAwMDAwMDAwMjIwMDAzMDAwMDAwMDA0NjIKKzoxMDFBRTAwMDAyMjAwMDM0MDAwMDAwMDEwMjIwMDAzODAwMDAwMDAwNDUKKzoxMDFBRjAwMDAyMjAwMDNDMDAwMDAwMDEwMjIwMDA0MDAwMDAwMDA0MjEKKzoxMDFCMDAwMDAyMjAwMDQ0MDAwMDAwMDAwMjIwMDA0ODAwMDAwMDAxMDQKKzoxMDFCMTAwMDAyMjAwMDRDMDAwMDAwMDMwMjIwMDA1MDAwMDAwMDAwRTIKKzoxMDFCMjAwMDAyMjAwMDU0MDAwMDAwMDEwMjIwMDA1ODAwMDAwMDA0QzAKKzoxMDFCMzAwMDAyMjAwMDVDMDAwMDAwMDAwMjIwMDA2MDAwMDAwMDAxQTQKKzoxMDFCNDAwMDAyMjAwMDY0MDAwMDAwMDMwMjIwMDA2ODAwMDAwMDAwODIKKzoxMDFCNTAwMDAyMjAwMDZDMDAwMDAwMDEwMjIwMDA3MDAwMDAwMDA0NjAKKzoxMDFCNjAwMDAyMjAwMDc0MDAwMDAwMDAwMjIwMDA3ODAwMDAwMDA0NDEKKzoxMDFCNzAwMDAyMjAwMDdDMDAwMDAwMDMwNjIwMDA4MDAwMDAwMDAyMUMKKzoxMDFCODAwMDAyMjAwMEE0MDAwMDNGRkYwMjIwMDBBODAwMDAwM0ZGODUKKzoxMDFCOTAwMDAyMjAwMjI0MDAwMDAwMDAwMjIwMDIzNDAwMDAwMDAwQTUKKzoxMDFCQTAwMDAyMjAwMjRDMDAwMDAwMDAwMjIwMDJFNDAwMDBGRkZGQkYKKzoxMDFCQjAwMDA2MjAyMDAwMDAwMDA4MDAwMjIzOEJDMDAwMDAwMDAxNjYKKzoxMDFCQzAwMDAyMjM4MDAwMDAwMDAwMTAwMjIzODA0MDAwMDAwMDEyNjkKKzoxMDFCRDAwMDAyMjM4MDgwMDAwMDAwMzAwMjIzODBDMDAwMDAwMDBFM0QKKzoxMDFCRTAwMDAyMjM4M0MwMDAwMDAxRjQwMjIzMTQ4MDAwMDAwMDAxREUKKzoxMDFCRjAwMDBBMjMxNDgwMDAwMDAwMDAwNjIyMTAwMDAwMDAwMDQyQUEKKzoxMDFDMDAwMDA2MjI3MDIwMDAwMDAwQzgwNjIyNzAwMDAwMDAwMDAyQkEKKzoxMDFDMTAwMDAyMjIxMUU4MDAwMDAwMDAwNjIyMzAwMDAwMDAwMEMwOEYKKzoxMDFDMjAwMDA2MjI0MDcwMDAwMDAwODAwNjIyNTI4MDAwMDAwMDA0NUUKKzoxMDFDMzAwMDA2MjI2NzAwMDAwMDAxMDAwNjIyOTAwMDAwMDAwNDAwNTgKKzoxMDFDNDAwMDA0MjI2QjA4MDAyMDAyRUEwMjIzMDgwMDAxM0ZGRkZGODQKKzoxMDFDNTAwMDA0MjMwQzAwMDAxMDAzMEEwMjIzMDgwMDAwMDAwMDAwMDcKKzoxMDFDNjAwMDA0MjMwQzQwMDAxMDAzMUEwNjIyODEwMDAwMDAwMEEwOEIKKzoxMDFDNzAwMDA2MjI4NjAwMDAwMDAwNDAwNjIyOEMwMDAwMDAwMDNDODYKKzoxMDFDODAwMDA2MjJCMDAwMDAwMDAyMDAwNjIyODgwMDAwMDAwMDgwNEEKKzoxMDFDOTAwMDA2MjI4REUwMDAwMDAwM0MwNjIyNDA0MDAwMDAwMDA2QzUKKzoxMDFDQTAwMDA2MjI4MzgwMDAwMDAwQTAwNjIyODcwMDAwMDAwMDQwN0EKKzoxMDFDQjAwMDA2MjI4Q0YwMDAwMDAwM0MwNjIyQjgwMDAwMDAwMjAwNjIKKzoxMDFDQzAwMDA2MjI4QTAwMDAwMDAwODAwNjIyOEVEMDAwMDAwMDNDMjAKKzoxMDFDRDAwMDA2MjI0MDU4MDAwMDAwMDYwNjIyODAwMDAwMDAwMDA4OEUKKzoxMDFDRTAwMDAyMjIxMTQ4MDAwMDAwMDAwNjIyMzMwMDAwMDAwMDAyMUEKKzoxMDFDRjAwMDA2MjI2MDQwMDAwMDAwMzAwNjIyODAyMDAwMDAwMDA4MUMKKzoxMDFEMDAwMDAyMjIxMTRDMDAwMDAwMDAwNjIyMzMwODAwMDAwMDAyRUQKKzoxMDFEMTAwMDA2MjI2MTAwMDAwMDAwMzAwNjIyODA0MDAwMDAwMDA4MUEKKzoxMDFEMjAwMDAyMjIxMTUwMDAwMDAwMDAwNjIyMzMxMDAwMDAwMDAyQzEKKzoxMDFEMzAwMDA2MjI2MUMwMDAwMDAwMzAwNjIyODA2MDAwMDAwMDA4MUEKKzoxMDFENDAwMDAyMjIxMTU0MDAwMDAwMDAwNjIyMzMxODAwMDAwMDAyOTUKKzoxMDFENTAwMDA2MjI2MjgwMDAwMDAwMzAwNjIyODA4MDAwMDAwMDA4MTkKKzoxMDFENjAwMDAyMjIxMTU4MDAwMDAwMDAwNjIyMzMyMDAwMDAwMDAyNjkKKzoxMDFENzAwMDA2MjI2MzQwMDAwMDAwMzAwNjIyODBBMDAwMDAwMDA4MTgKKzoxMDFEODAwMDAyMjIxMTVDMDAwMDAwMDAwNjIyMzMyODAwMDAwMDAyM0QKKzoxMDFEOTAwMDA2MjI2NDAwMDAwMDAwMzAwNjIyODBDMDAwMDAwMDA4MTcKKzoxMDFEQTAwMDAyMjIxMTYwMDAwMDAwMDAwNjIyMzMzMDAwMDAwMDAyMTEKKzoxMDFEQjAwMDA2MjI2NEMwMDAwMDAwMzAwNjIyODBFMDAwMDAwMDA4MTcKKzoxMDFEQzAwMDAyMjIxMTY0MDAwMDAwMDAwNjIyMzMzODAwMDAwMDAyRTUKKzoxMDFERDAwMDA2MjI2NTgwMDAwMDAwMzAwMjE2MTAwMDAwMDAwMDI4NzYKKzoxMDFERTAwMDAyMTcwMDA4MDAwMDAwMDIwMjE3MDAyQzAwMDAwMDAzODgKKzoxMDFERjAwMDAyMTcwMDNDMDAwMDAwMDQwMjE3MDA0NDAwMDAwMDA4MjUKKzoxMDFFMDAwMDAyMTcwMDQ4MDAwMDAwMDIwMjE3MDA0QzAwMDAwMDkwN0EKKzoxMDFFMTAwMDAyMTcwMDUwMDAwMDAwOTAwMjE3MDA1NDAwODAwMDkwNEMKKzoxMDFFMjAwMDAyMTcwMDU4MDgxNDAwMDAwMjE3MDA2MDAwMDAwMDhBMjIKKzoxMDFFMzAwMDAyMTcwMDY0MDAwMDAwODAwMjE3MDA2ODAwMDAwMDgxQTMKKzoxMDFFNDAwMDAyMTcwMDZDMDAwMDAwODAwMjE3MDA3MDAwMDAwMDA2RkUKKzoxMDFFNTAwMDAyMTcwMDc4MDAwMDA3RDAwMjE3MDA3QzAwMDAwNzZDMTIKKzoxMDFFNjAwMDAyMTcwMDM4MDA3QzEwMDQwMjE3MDAwNDAwMDAwMDBGNjUKKzoxMDFFNzAwMDA2MTY0MDI0MDAwMDAwMDIwMjE2NDA3MDAwMDAwMDFDRkMKKzoxMDFFODAwMDAyMTY0MjA4MDAwMDAwMDEwMjE2NDIxMDAwMDAwMDAxODQKKzoxMDFFOTAwMDAyMTY0MjIwMDAwMDAwMDEwMjE2NDIyODAwMDAwMDAxNDQKKzoxMDFFQTAwMDAyMTY0MjMwMDAwMDAwMDEwMjE2NDIzODAwMDAwMDAxMTQKKzoxMDFFQjAwMDAyMTY0MjYwMDAwMDAwMDIwQzE2NDAxQzAwMDNEMDkwODUKKzoxMDFFQzAwMDBBMTY0MDFDMDAwMDAwOUMwQjE2NDAxQzAwMDAwOUM0QjAKKzoxMDFFRDAwMDAyMTY0MDMwMDAwMDAwMDgwMjE2NDAzNDAwMDAwMDBDREEKKzoxMDFFRTAwMDAyMTY0MDM4MDAwMDAwMTAwMjE2NDA0NDAwMDAwMDIwOTYKKzoxMDFFRjAwMDAyMTY0MDAwMDAwMDAwMDEwMjE2NDBEODAwMDAwMDAxNTgKKzoxMDFGMDAwMDAyMTY0MDA4MDAwMDAwMDEwMjE2NDAwQzAwMDAwMDAxMEIKKzoxMDFGMTAwMDAyMTY0MDEwMDAwMDAwMDEwMjE2NDI0MDAwMDAwMDAwQkUKKzoxMDFGMjAwMDAyMTY0MjQ4MDAwMDAwMDAwNjE2NDI3MDAwMDAwMDAyM0YKKzoxMDFGMzAwMDAyMTY0MjUwMDAwMDAwMDAwMjE2NDI1ODAwMDAwMDAwNDUKKzoxMDFGNDAwMDA2MTY0MjgwMDAwMDAwMDIwMjE2NjAwODAwMDAwNDI0MDkKKzoxMDFGNTAwMDAyMTY2MDBDMDAwMDA0MTAwMjE2NjAxMDAwMDAwNDE0NDkKKzoxMDFGNjAwMDAyMTY2MDFDMDAwMEZGRkYwMjE2NjAyMDAwMDBGRkZGNDkKKzoxMDFGNzAwMDAyMTY2MDI0MDAwMEZGRkYwMjE2NjAyODAwMDBGRkZGMjkKKzoxMDFGODAwMDAyMTY2MDM4MDAwMDAwMjAwMjE2NjAzQzAwMDAwMDIwQUQKKzoxMDFGOTAwMDAyMTY2MDQwMDAwMDAwMzQwMjE2NjA0NDAwMDAwMDM1NjQKKzoxMDFGQTAwMDAyMTY2MDQ4MDAwMDAwMjMwMjE2NjA0QzAwMDAwMDI0NjYKKzoxMDFGQjAwMDAyMTY2MDUwMDAwMDAwMjUwMjE2NjA1NDAwMDAwMDI2NDIKKzoxMDFGQzAwMDAyMTY2MDU4MDAwMDAwMjcwMjE2NjA1QzAwMDAwMDI5MUQKKzoxMDFGRDAwMDAyMTY2MDYwMDAwMDAwMkEwMjE2NjA2NDAwMDAwMDJCRjgKKzoxMDFGRTAwMDAyMTY2MDY4MDAwMDAwMkMwMjE2NjA2QzAwMDAwMDJERDQKKzoxMDFGRjAwMDA2MTY2MDcwMDAwMDAwNTIwMjE2NjFCODAwMDAwMDAxNzEKKzoxMDIwMDAwMDA2MTY2MUJDMDAwMDAwMUYwMjE2NjIzODA3RkZGRkZGQzIKKzoxMDIwMTAwMDAyMTY2MjNDMDAwMDAwM0YwMjE2NjI0MDA3RkZGRkZGMEQKKzoxMDIwMjAwMDAyMTY2MjQ0MDAwMDAwMEYwMTE2NjI0ODAwMDAwMDAwMjIKKzoxMDIwMzAwMDAxMTY2MjRDMDAwMDAwMDAwMTE2NjI1MDAwMDAwMDAwMTIKKzoxMDIwNDAwMDAxMTY2MjU0MDAwMDAwMDAwMTE2NjI1ODAwMDAwMDAwRjIKKzoxMDIwNTAwMDAxMTY2MjVDMDAwMDAwMDAwMTE2NjI2MDAwMDAwMDAwRDIKKzoxMDIwNjAwMDAxMTY2MjY0MDAwMDAwMDAwMTE2NjI2ODAwMDAwMDAwQjIKKzoxMDIwNzAwMDAxMTY2MjZDMDAwMDAwMDAwMTE2NjI3MDAwMDAwMDAwOTIKKzoxMDIwODAwMDAxMTY2Mjc0MDAwMDAwMDAwMTE2NjI3ODAwMDAwMDAwNzIKKzoxMDIwOTAwMDAxMTY2MjdDMDAwMDAwMDAwQzE2NjAwMDAwMDAwM0U4REUKKzoxMDIwQTAwMDBBMTY2MDAwMDAwMDAwMDEwQjE2NjAwMDAwMDAwMDBBMjQKKzoxMDIwQjAwMDAyMTY4MDQwMDAwMDAwMDYwMjE2ODA0NDAwMDAwMDA1NjEKKzoxMDIwQzAwMDAyMTY4MDQ4MDAwMDAwMEEwMjE2ODA0QzAwMDAwMDA1M0QKKzoxMDIwRDAwMDAyMTY4MDU0MDAwMDAwMDIwMjE2ODBDQzAwMDAwMDA0QUEKKzoxMDIwRTAwMDAyMTY4MEQwMDAwMDAwMDQwMjE2ODBENDAwMDAwMDA0MTQKKzoxMDIwRjAwMDAyMTY4MEQ4MDAwMDAwMDQwMjE2ODBEQzAwMDAwMDA0RjQKKzoxMDIxMDAwMDAyMTY4MEUwMDAwMDAwMDQwMjE2ODBFNDAwMDAwMDA0RDMKKzoxMDIxMTAwMDAyMTY4MEU4MDAwMDAwMDQwMjE2ODgwNDAwMDAwMDA0OTMKKzoxMDIxMjAwMDAyMTY4MDMwMDAwMDAwN0MwMjE2ODAzNDAwMDAwMDNENjIKKzoxMDIxMzAwMDAyMTY4MDM4MDAwMDAwM0YwMjE2ODAzQzAwMDAwMDlDMjAKKzoxMDIxNDAwMDAyMTY4MEYwMDAwMDAwMDcwNjE2ODBGNDAwMDAwMDA1NkIKKzoxMDIxNTAwMDAyMTY4ODBDMDEwMTAxMDEwMjE2ODEwODAwMDAwMDAwMkUKKzoxMDIxNjAwMDAyMTY4MTBDMDAwMDAwMDQwMjE2ODExMDAwMDAwMDA0MTkKKzoxMDIxNzAwMDAyMTY4MTE0MDAwMDAwMDIwMjE2ODgxMDA4MDEyMDA0RDMKKzoxMDIxODAwMDAyMTY4MTE4MDAwMDAwMDUwMjE2ODExQzAwMDAwMDA1REYKKzoxMDIxOTAwMDAyMTY4MTIwMDAwMDAwMDUwMjE2ODEyNDAwMDAwMDA1QkYKKzoxMDIxQTAwMDAyMTY4ODJDMjAwODEwMDEwMjE2ODEyODAwMDAwMDA4NjEKKzoxMDIxQjAwMDAyMTY4MTJDMDAwMDAwMDYwMjE2ODEzMDAwMDAwMDA3ODQKKzoxMDIxQzAwMDAyMTY4MTM0MDAwMDAwMDAwMjE2ODgzMDAxMDEwMTIwNEYKKzoxMDIxRDAwMDA2MTY4MTM4MDAwMDAwMDQwMjE2ODgzNDAxMDEwMTAxNEUKKzoxMDIxRTAwMDAyMTY4MTQ4MDAwMDAwMDAwMjE2ODE0QzAwMDAwMDA0MjUKKzoxMDIxRjAwMDAyMTY4MTUwMDAwMDAwMDQwMjE2ODE1NDAwMDAwMDAyMDMKKzoxMDIyMDAwMDAyMTY4ODM4MDgwMTIwMDQwMjE2ODE1ODAwMDAwMDA1RDMKKzoxMDIyMTAwMDAyMTY4MTVDMDAwMDAwMDUwMjE2ODE2MDAwMDAwMDA1QzYKKzoxMDIyMjAwMDAyMTY4MTY0MDAwMDAwMDUwMjE2ODgzQzIwMDgxMDAxOTcKKzoxMDIyMzAwMDAyMTY4MTY4MDAwMDAwMDgwMjE2ODE2QzAwMDAwMDA2OEEKKzoxMDIyNDAwMDAyMTY4MTcwMDAwMDAwMDcwMjE2ODE3NDAwMDAwMDAxNzAKKzoxMDIyNTAwMDAyMTY4ODQwMDEwMTAxMjAwMjE2ODE3ODAwMDAwMDAxNjkKKzoxMDIyNjAwMDAyMTY4MTdDMDAwMDAwMDEwMjE2ODE4MDAwMDAwMDAxM0UKKzoxMDIyNzAwMDAyMTY4MTg0MDAwMDAwMDEwMjE2ODg0NDAxMDEwMTAxNTgKKzoxMDIyODAwMDAyMTY4MTg4MDAwMDAwMDEwMjE2ODE4QzAwMDAwMDA0MDMKKzoxMDIyOTAwMDAyMTY4MTkwMDAwMDAwMDQwMjE2ODE5NDAwMDAwMDAyRTIKKzoxMDIyQTAwMDAyMTY4ODQ4MDgwMTIwMDQwMjE2ODE5ODAwMDAwMDA1RTMKKzoxMDIyQjAwMDAyMTY4MTlDMDAwMDAwMDUwMjE2ODFBMDAwMDAwMDA1QTYKKzoxMDIyQzAwMDAyMTY4MUE0MDAwMDAwMDUwMjE2ODgxNDIwMDgxMDAxREYKKzoxMDIyRDAwMDAyMTY4MUE4MDAwMDAwMDgwMjE2ODFBQzAwMDAwMDA2NkEKKzoxMDIyRTAwMDAyMTY4MUIwMDAwMDAwMDcwMjE2ODFCNDAwMDAwMDAxNTAKKzoxMDIyRjAwMDAyMTY4ODE4MDEwMTAxMjAwMjE2ODFCODAwMDAwMDAxQjEKKzoxMDIzMDAwMDAyMTY4MUJDMDAwMDAwMDEwMjE2ODFDMDAwMDAwMDAxMUQKKzoxMDIzMTAwMDAyMTY4MUM0MDAwMDAwMDEwMjE2ODgxQzAxMDEwMTAxOUYKKzoxMDIzMjAwMDAyMTY4MUM4MDAwMDAwMDEwMjE2ODFDQzAwMDAwMDA0RTIKKzoxMDIzMzAwMDAyMTY4MUQwMDAwMDAwMDQwMjE2ODFENDAwMDAwMDAyQzEKKzoxMDIzNDAwMDAyMTY4ODIwMDgwMTIwMDQwMjE2ODFEODAwMDAwMDA1MkEKKzoxMDIzNTAwMDAyMTY4MURDMDAwMDAwMDUwMjE2ODFFMDAwMDAwMDA1ODUKKzoxMDIzNjAwMDAyMTY4MUU0MDAwMDAwMDUwMjE2ODgyNDIwMDgxMDAxRUUKKzoxMDIzNzAwMDAyMTY4MUU4MDAwMDAwMDgwMjE2ODFFQzAwMDAwMDA2NDkKKzoxMDIzODAwMDAyMTY4MUYwMDAwMDAwMDcwMjE2RTQwQzAwMDAwMDAwQjUKKzoxMDIzOTAwMDAyMTY4ODI4MDEwMTAxMjAwNjE2RTQxMDAwMDAwMDA0M0UKKzoxMDIzQTAwMDAyMTZFMDAwMDEwMTAxMDEwMjE2RTQyMDAwMDAwMDAwMTUKKzoxMDIzQjAwMDAyMTZFNDI0MDAwMDAwMDQwMjE2RTQyODAwMDAwMDA0RDEKKzoxMDIzQzAwMDAyMTZFNDJDMDAwMDAwMDIwMjE2RTAwNDA4MDEyMDA0QkEKKzoxMDIzRDAwMDAyMTZFNDMwMDAwMDAwMDUwMjE2RTQzNDAwMDAwMDA1OTcKKzoxMDIzRTAwMDAyMTZFNDM4MDAwMDAwMDUwMjE2RTQzQzAwMDAwMDA1NzcKKzoxMDIzRjAwMDAyMTZFMDA4MjAwODEwMDEwMjE2RTQ0MDAwMDAwMDA4NjAKKzoxMDI0MDAwMDAyMTZFNDQ0MDAwMDAwMDYwMjE2RTQ0ODAwMDAwMDA3M0IKKzoxMDI0MTAwMDAyMTZFNDRDMDAwMDAwMDAwMjE2RTAwQzAxMDEwMTIwNEQKKzoxMDI0MjAwMDA2MTZFNDUwMDAwMDAwMDQwMjE2RTAxMDAxMDEwMTAxNEMKKzoxMDI0MzAwMDAyMTZFNDYwMDAwMDAwMDAwMjE2RTQ2NDAwMDAwMDA0REMKKzoxMDI0NDAwMDAyMTZFNDY4MDAwMDAwMDQwMjE2RTQ2QzAwMDAwMDAyQkEKKzoxMDI0NTAwMDAyMTZFMDE0MDgwMTIwMDQwMjE2RTQ3MDAwMDAwMDA1RDIKKzoxMDI0NjAwMDAyMTZFNDc0MDAwMDAwMDUwMjE2RTQ3ODAwMDAwMDA1N0UKKzoxMDI0NzAwMDAyMTZFNDdDMDAwMDAwMDUwMjE2RTAxODIwMDgxMDAxOTYKKzoxMDI0ODAwMDAyMTZFNDgwMDAwMDAwMDgwMjE2RTQ4NDAwMDAwMDA2NDIKKzoxMDI0OTAwMDAyMTZFNDg4MDAwMDAwMDcwMjE2RTQ4QzAwMDAwMDAxMjgKKzoxMDI0QTAwMDAyMTZFMDFDMDEwMTAxMjAwMjE2RTQ5MDAwMDAwMDAxNjgKKzoxMDI0QjAwMDAyMTZFNDk0MDAwMDAwMDEwMjE2RTQ5ODAwMDAwMDAxRjYKKzoxMDI0QzAwMDAyMTZFNDlDMDAwMDAwMDEwMjE2RTAyMDAxMDEwMTAxNTcKKzoxMDI0RDAwMDAyMTZFNEEwMDAwMDAwMDEwMjE2RTRBNDAwMDAwMDA0QkIKKzoxMDI0RTAwMDAyMTZFNEE4MDAwMDAwMDQwMjE2RTRBQzAwMDAwMDAyOUEKKzoxMDI0RjAwMDAyMTZFMDI0MDgwMTIwMDQwMjE2RTRCMDAwMDAwMDA1RTIKKzoxMDI1MDAwMDAyMTZFNEI0MDAwMDAwMDUwMjE2RTRCODAwMDAwMDA1NUQKKzoxMDI1MTAwMDAyMTZFNEJDMDAwMDAwMDUwMjE2RTAyODIwMDgxMDAxQTUKKzoxMDI1MjAwMDAyMTZFNEMwMDAwMDAwMDgwMjE2RTRDNDAwMDAwMDA2MjEKKzoxMDI1MzAwMDAyMTZFNEM4MDAwMDAwMDcwMjE2RTRDQzAwMDAwMDAxMDcKKzoxMDI1NDAwMDAyMTZFMDJDMDEwMTAxMjAwMjE2RTREMDAwMDAwMDAxNzcKKzoxMDI1NTAwMDAyMTZFNEQ0MDAwMDAwMDEwMjE2RTREODAwMDAwMDAxRDUKKzoxMDI1NjAwMDAyMTZFNERDMDAwMDAwMDEwMjE2RTAzMDAxMDEwMTAxNjYKKzoxMDI1NzAwMDAyMTZFNEUwMDAwMDAwMDEwMjE2RTRFNDAwMDAwMDA0OUEKKzoxMDI1ODAwMDAyMTZFNEU4MDAwMDAwMDQwMjE2RTRFQzAwMDAwMDAyNzkKKzoxMDI1OTAwMDAyMTZFMDM0MDgwMTIwMDQwMjE2RTRGMDAwMDAwMDA1RjEKKzoxMDI1QTAwMDAyMTZFNEY0MDAwMDAwMDUwMjE2RTRGODAwMDAwMDA1M0QKKzoxMDI1QjAwMDAyMTZFNEZDMDAwMDAwMDUwMjE2RTAzODIwMDgxMDAxQjUKKzoxMDI1QzAwMDAyMTZFNTAwMDAwMDAwMDgwMjE2RTUwNDAwMDAwMDA2RkYKKzoxMDI1RDAwMDAyMTZFNTA4MDAwMDAwMDcwMjE2RTAzQzAxMDEwMTIwOTgKKzoxMDI1RTAwMDAyMTY4MjQwMDAzRjAwM0YwMjE2ODI0NDAwMDAwMDAwQjUKKzoxMDI1RjAwMDAyMTZFNTI0MDAzRjAwM0YwMjE2RTUyODAwMDAwMDAwMTcKKzoxMDI2MDAwMDAyMTY4MjQ4MDAwMDAwMDAwMjE2ODI0QzAwM0YwMDNGODQKKzoxMDI2MTAwMDAyMTZFNTJDMDAwMDAwMDAwMjE2RTUzMDAwM0YwMDNGRTYKKzoxMDI2MjAwMDAyMTY4MjUwMDEwMDAxMDAwMjE2ODI1NDAxMDAwMTAwQ0UKKzoxMDI2MzAwMDAyMTZFNTM0MDEwMDAxMDAwMjE2RTUzODAxMDAwMTAwMzAKKzoxMDI2NDAwMDA2MTY4MjU4MDAwMDAwMDIwMjE2RTUzQzAwMDAwMDAwNTkKKzoxMDI2NTAwMDAyMTZFNTQwMDAwMDAwMDAwMjE2ODI2MDAwQzAwMEMwQzMKKzoxMDI2NjAwMDAyMTY4MjY0MDBDMDAwQzAwMjE2RTU0NDAwQzAwMEMwMkIKKzoxMDI2NzAwMDAyMTZFNTQ4MDBDMDAwQzAwMjE2ODI2ODFFMDAxRTAwNTcKKzoxMDI2ODAwMDAyMTY4MjZDMUUwMDFFMDAwMjE2RTU0QzFFMDAxRTAwODMKKzoxMDI2OTAwMDAyMTZFNTUwMUUwMDFFMDAwMjE2ODI3MDQwMDA0MDAwMjcKKzoxMDI2QTAwMDAyMTY4Mjc0NDAwMDQwMDAwMjE2RTU1NDQwMDA0MDAwQ0IKKzoxMDI2QjAwMDAyMTZFNTU4NDAwMDQwMDAwMjE2ODI3ODgwMDA4MDAwMzMKKzoxMDI2QzAwMDAyMTY4MjdDODAwMDgwMDAwMjE2RTU1QzgwMDA4MDAwOUIKKzoxMDI2RDAwMDAyMTZFNTYwODAwMDgwMDAwMjE2ODI4MDIwMDAyMDAwNDMKKzoxMDI2RTAwMDAyMTY4Mjg0MjAwMDIwMDAwMjE2RTU2NDIwMDAyMDAwRUIKKzoxMDI2RjAwMDAyMTZFNTY4MjAwMDIwMDAwNjE2ODI4ODAwMDAwMDAyMEQKKzoxMDI3MDAwMDAyMTZFNTZDMDAwMDAwMDAwMjE2RTU3MDAwMDAwMDAwRjMKKzoxMDI3MTAwMDAyMTY4MjkwMDAwMDAwMDAwMjE2ODI5NDAwMDAwMDAwNjEKKzoxMDI3MjAwMDAyMTZFNTc0MDAwMDAwMDAwMjE2RTU3ODAwMDAwMDAwQzMKKzoxMDI3MzAwMDAyMTY4Mjk4MDAwMDAwMDAwMjE2ODI5QzAwMDAwMDAwMzEKKzoxMDI3NDAwMDAyMTZFNTdDMDAwMDAwMDAwMjE2RTU4MDAwMDAwMDAwOTMKKzoxMDI3NTAwMDAyMTY4MkEwMDAwMDAwMDAwMjE2ODJBNDAwMDAwMDAxMDAKKzoxMDI3NjAwMDA2MTY4MkE4MDAwMDAwMEEwMjE2ODFGNDAwMDAwQzA4NzgKKzoxMDI3NzAwMDAyMTY4MUY4MDAwMDAwNDAwMjE2ODFGQzAwMDAwMTAwRjIKKzoxMDI3ODAwMDAyMTY4MjAwMDAwMDAwMjAwMjE2ODIwNDAwMDAwMDE3REEKKzoxMDI3OTAwMDAyMTY4MjA4MDAwMDAwODAwMjE2ODIwQzAwMDAwMjAwNkYKKzoxMDI3QTAwMDAyMTY4MjEwMDAwMDAwMDAwMjE2ODIxODAxRkYwMUZGQ0QKKzoxMDI3QjAwMDAyMTY4MjE0MDFGRjAxRkYwMjE2RTUxMDAxRkYwMUZGNUUKKzoxMDI3QzAwMDAyMTZFNTBDMDFGRjAxRkYwMjE2ODIzQzAwMDAwMDEzMTcKKzoxMDI3RDAwMDAyMTY4MDkwMDAwMDAxM0YwMjE2ODA2MDAwMDAwMTQwNTgKKzoxMDI3RTAwMDAyMTY4MDY0MDAwMDAxNDAwNjE2ODA2ODAwMDAwMDAyQTYKKzoxMDI3RjAwMDAyMTY4MDcwMDAwMDAwQzAwNjE2ODA3NDAwMDAwMDA3RkEKKzoxMDI4MDAwMDAyMTY4MDlDMDAwMDAwNDgwMjE2ODBBMDAwMDAwMDQ4Q0MKKzoxMDI4MTAwMDA2MTY4MEE0MDAwMDAwMDIwMjE2ODBBQzAwMDAwMDQ4RUEKKzoxMDI4MjAwMDA2MTY4MEIwMDAwMDAwMDcwMjE2ODIzODAwMDA4MDAwMDMKKzoxMDI4MzAwMDAyMTY4MjM0MDAwMDI1RTQwMjE2ODA5NDAwMDA3RkZGMTcKKzoxMDI4NDAwMDAyMTY4MjIwMDAwRjAwMEYwMjE2ODIxQzAwMEYwMDBGREMKKzoxMDI4NTAwMDAyMTZFNTE4MDAwRjAwMEYwMjE2RTUxNDAwMEYwMDBGMTYKKzoxMDI4NjAwMDAyMTY4MjI4MDAwMDAwMDAwMjE2ODIyNEZGRkZGRkZGRUMKKzoxMDI4NzAwMDAyMTZFNTIwMDAwMDAwMDAwMjE2RTUxQ0ZGRkZGRkZGMjYKKzoxMDI4ODAwMDAyMTZFNkJDMDAwMDAwMDAwMjE2RTZDMDAwMDAwMDAyQ0UKKzoxMDI4OTAwMDAyMTZFNkM0MDAwMDAwMDEwMjE2RTZDODAwMDAwMDAzQUMKKzoxMDI4QTAwMDAyMTZFNkNDMDAwMDAwMDQwMjE2RTZEMDAwMDAwMDA2ODYKKzoxMDI4QjAwMDAyMTZFNkQ0MDAwMDAwMDUwMjE2RTZEODAwMDAwMDA3NjQKKzoxMDI4QzAwMDAyMTY4MEVDMDAwMDAwRkYwMjE0MDAwMDAwMDAwMDAxNkUKKzoxMDI4RDAwMDAyMTQwMDBDMDAwMDAwMDEwMjE0MDA0MDAwMDAwMDAxN0UKKzoxMDI4RTAwMDAyMTQwMDQ0MDAwMDdGRkYwMjE0MDAwQzAwMDAwMDAwRUUKKzoxMDI4RjAwMDAyMTQwMDAwMDAwMDAwMDAwMjE0MDA2QzAwMDAwMDAwNDAKKzoxMDI5MDAwMDAyMTQwMDA0MDAwMDAwMDEwMjE0MDAzMDAwMDAwMDAxNjUKKzoxMDI5MTAwMDAyMTQwMDA0MDAwMDAwMDAwMjE0MDA1QzAwMDAwMDAwMkIKKzoxMDI5MjAwMDAyMTQwMDA4MDAwMDAwMDEwMjE0MDAzNDAwMDAwMDAxM0QKKzoxMDI5MzAwMDAyMTQwMDA4MDAwMDAwMDAwMjE0MDA2MDAwMDAwMDAwMDMKKzoxMDI5NDAwMDAyMDIwMDU4MDAwMDAwMzIwMjAyMDBBMDAzMTUwMDIwMUQKKzoxMDI5NTAwMDAyMDIwMEE0MDMxNTAwMjAwMjAyMDBBODAxMDAwMDMwQkEKKzoxMDI5NjAwMDAyMDIwMEFDMDgxMDAwMDAwMjAyMDBCMDAwMDAwMDMzQjgKKzoxMDI5NzAwMDAyMDIwMEI0MDAwMDAwMzAwMjAyMDBCODAwMDAwMDMxODIKKzoxMDI5ODAwMDAyMDIwMEJDMDAwMDAwMDMwMjAyMDBDMDAwMDAwMDA2QkEKKzoxMDI5OTAwMDAyMDIwMEM0MDAwMDAwMDMwMjAyMDBDODAwMDAwMDAzOUQKKzoxMDI5QTAwMDAyMDIwMENDMDAwMDAwMDIwMjAyMDBEMDAwMDAwMDAwODEKKzoxMDI5QjAwMDAyMDIwMEQ0MDAwMDAwMDIwMjAyMDBEQzAwMDAwMDAwNUQKKzoxMDI5QzAwMDAyMDIwMEUwMDAwMDAwMDYwMjAyMDBFNDAwMDAwMDA0MzEKKzoxMDI5RDAwMDAyMDIwMEU4MDAwMDAwMDIwMjAyMDBFQzAwMDAwMDAyMTcKKzoxMDI5RTAwMDAyMDIwMEYwMDAwMDAwMDEwMjAyMDBGQzAwMDAwMDA2RUMKKzoxMDI5RjAwMDAyMDIwMTIwMDAwMDAwMDAwMjAyMDEzNDAwMDAwMDAyNzcKKzoxMDJBMDAwMDAyMDIwMUIwMDAwMDAwMDEwMjAyMDIwQzAwMDAwMDAxRkQKKzoxMDJBMTAwMDAyMDIwMjE0MDAwMDAwMDEwMjAyMDIxODAwMDAwMDAyN0IKKzoxMDJBMjAwMDAyMDIwNDA0MDAwMDAwMDEwMjAyMDQwQzAwMDAwMDQwNDUKKzoxMDJBMzAwMDAyMDIwNDEwMDAwMDAwNDAwMjAyMDQxQzAwMDAwMDA0MTYKKzoxMDJBNDAwMDAyMDIwNDIwMDAwMDAwMjAwMjAyMDQyNDAwMDAwMDAyMTAKKzoxMDJBNTAwMDAyMDIwNDI4MDAwMDAwMjAwNjAyMDUwMDAwMDAwMDEyMDcKKzoxMDJBNjAwMDA0MDIwNDgwMDAxRjAzMkEwMjAyMDA2MDAwMDAwMDBGMUQKKzoxMDJBNzAwMDAyMDIwMDY0MDAwMDAwMDcwMjAyMDA2ODAwMDAwMDBCNzAKKzoxMDJBODAwMDAyMDIwMDZDMDAwMDAwMEUwMjAyMDA3MDAwMDAwMDBFNDYKKzoxMDJBOTAwMDA2MDIwMDc0MDAwMDAwMDMwMjAyMDBGNDAwMDAwMDA0QkIKKzoxMDJBQTAwMDAyMDIwMDA0MDAwMDAwMDEwMjAyMDAwODAwMDAwMDAxMTAKKzoxMDJBQjAwMDAyMDIwMDBDMDAwMDAwMDEwMjAyMDAxMDAwMDAwMDAxRjAKKzoxMDJBQzAwMDAyMDIwMDE0MDAwMDAwMDEwMjAyMDAxODAwMDAwMDAxRDAKKzoxMDJBRDAwMDAyMDIwMDFDMDAwMDAwMDEwMjAyMDAyMDAwMDAwMDAxQjAKKzoxMDJBRTAwMDAyMDIwMDI0MDAwMDAwMDEwMjAyMDAyODAwMDAwMDAxOTAKKzoxMDJBRjAwMDAyMDIwMDJDMDAwMDAwMDEwMjAyMDAzMDAwMDAwMDAxNzAKKzoxMDJCMDAwMDAyMDIwMDM0MDAwMDAwMDEwMjAyMDAzODAwMDAwMDAxNEYKKzoxMDJCMTAwMDAyMDIwMDNDMDAwMDAwMDEwMjAyMDA0MDAwMDAwMDAxMkYKKzoxMDJCMjAwMDAyMDIwMDQ0MDAwMDAwMDEwMjAyMDA0ODAwMDAwMDAxMEYKKzoxMDJCMzAwMDAyMDIwMDRDMDAwMDAwMDEwMjAyMDA1MDAwMDAwMDAxRUYKKzoxMDJCNDAwMDAyMDIwMTA4MDAwMDAwQzgwMjAyMDExODAwMDAwMDAyOTEKKzoxMDJCNTAwMDAyMDIwMUM0MDAwMDAwMDAwMjAyMDFDQzAwMDAwMDAwREIKKzoxMDJCNjAwMDAyMDIwMUQ0MDAwMDAwMDIwMjAyMDFEQzAwMDAwMDAyQTcKKzoxMDJCNzAwMDAyMDIwMUU0MDAwMDAwRkYwMjAyMDFFQzAwMDAwMEZGN0QKKzoxMDJCODAwMDAyMDIwMTAwMDAwMDAwMDAwMjAyMDEwQzAwMDAwMEM4NjcKKzoxMDJCOTAwMDAyMDIwMTFDMDAwMDAwMDIwMjAyMDFDODAwMDAwMDAwNDUKKzoxMDJCQTAwMDAyMDIwMUQwMDAwMDAwMDAwMjAyMDFEODAwMDAwMDAyNzEKKzoxMDJCQjAwMDAyMDIwMUUwMDAwMDAwMDIwMjAyMDFFODAwMDAwMEZGNDIKKzoxMDJCQzAwMDAyMDIwMUYwMDAwMDAwRkYwMjAyMDEwNDAwMDAwMDAwMDgKKzoxMDJCRDAwMDAyMDIwMTA4MDAwMDAwQzgwMjAyMDExODAwMDAwMDAyMDEKKzoxMDJCRTAwMDAyMDIwMUM0MDAwMDAwMDAwMjAyMDFDQzAwMDAwMDAwNEIKKzoxMDJCRjAwMDAyMDIwMUQ0MDAwMDAwMDIwMjAyMDFEQzAwMDAwMDAyMTcKKzoxMDJDMDAwMDAyMDIwMUU0MDAwMDAwRkYwMjAyMDFFQzAwMDAwMEZGRUMKKzoxMDJDMTAwMDAyMDIwMTAwMDAwMDAwMDAwMjAyMDEwQzAwMDAwMEM4RDYKKzoxMDJDMjAwMDAyMDIwMTFDMDAwMDAwMDIwMjAyMDFDODAwMDAwMDAwQjQKKzoxMDJDMzAwMDAyMDIwMUQwMDAwMDAwMDAwMjAyMDFEODAwMDAwMDAyRTAKKzoxMDJDNDAwMDAyMDIwMUUwMDAwMDAwMDIwMjAyMDFFODAwMDAwMEZGQjEKKzoxMDJDNTAwMDAyMDIwMUYwMDAwMDAwRkYwMjAyMDEwNDAwMDAwMDAwNzcKKzoxMDJDNjAwMDAyMDIwMTA4MDAwMDAwQzgwMjAyMDExODAwMDAwMDAyNzAKKzoxMDJDNzAwMDAyMDIwMUM0MDAwMDAwMDAwMjAyMDFDQzAwMDAwMDAwQkEKKzoxMDJDODAwMDAyMDIwMUQ0MDAwMDAwMDIwMjAyMDFEQzAwMDAwMDAyODYKKzoxMDJDOTAwMDAyMDIwMUU0MDAwMDAwRkYwMjAyMDFFQzAwMDAwMEZGNUMKKzoxMDJDQTAwMDAyMDIwMTAwMDAwMDAwMDAwMjAyMDEwQzAwMDAwMEM4NDYKKzoxMDJDQjAwMDAyMDIwMTFDMDAwMDAwMDIwMjAyMDFDODAwMDAwMDAwMjQKKzoxMDJDQzAwMDAyMDIwMUQwMDAwMDAwMDAwMjAyMDFEODAwMDAwMDAyNTAKKzoxMDJDRDAwMDAyMDIwMUUwMDAwMDAwMDIwMjAyMDFFODAwMDAwMEZGMjEKKzoxMDJDRTAwMDAyMDIwMUYwMDAwMDAwRkYwMjAyMDEwNDAwMDAwMDAwRTcKKzoxMDJDRjAwMDAyMDIwMTA4MDAwMDAwQzgwMjAyMDExODAwMDAwMDAyRTAKKzoxMDJEMDAwMDAyMDIwMUM0MDAwMDAwMDAwMjAyMDFDQzAwMDAwMDAwMjkKKzoxMDJEMTAwMDAyMDIwMUQ0MDAwMDAwMDIwMjAyMDFEQzAwMDAwMDAyRjUKKzoxMDJEMjAwMDAyMDIwMUU0MDAwMDAwRkYwMjAyMDFFQzAwMDAwMEZGQ0IKKzoxMDJEMzAwMDAyMDIwMTAwMDAwMDAwMDAwMjAyMDEwQzAwMDAwMEM4QjUKKzoxMDJENDAwMDAyMDIwMTFDMDAwMDAwMDIwMjAyMDFDODAwMDAwMDAwOTMKKzoxMDJENTAwMDAyMDIwMUQwMDAwMDAwMDAwMjAyMDFEODAwMDAwMDAyQkYKKzoxMDJENjAwMDAyMDIwMUUwMDAwMDAwMDIwMjAyMDFFODAwMDAwMEZGOTAKKzoxMDJENzAwMDAyMDIwMUYwMDAwMDAwRkYwMjAyMDEwNDAwMDAwMDAwNTYKKzoxMDJEODAwMDA3MjgwNDAwMDBDMDAwMDAwODI4MDdBODAwMEIwMzQ5MUEKKzoxMDJEOTAwMDA3MkMwMDAwMzJGQzAwMDAwNzJDODAwMDM1NzgwQ0MwQTYKKzoxMDJEQTAwMDA3MkQwMDAwM0FDMTFBMUYwNzJEODAwMDM5RTIyOEQwRjQKKzoxMDJEQjAwMDA3MkUwMDAwMUMzRTM3NDkwODJFMzcxMDM5MUUwMzRCRTIKKzoxMDJEQzAwMDAxMjgwMDAwMDAwMDAwMDAwMTI4MDAwNDAwMDAwMDAwQUQKKzoxMDJERDAwMDAxMjgwMDA4MDAwMDAwMDAwMTI4MDAwQzAwMDAwMDAwOEQKKzoxMDJERTAwMDAxMjgwMDEwMDAwMDAwMDAwMTI4MDAxNDAwMDAwMDAwNkQKKzoxMDJERjAwMDAyMjgwMDIwMDAwMDAwMDEwMjI4MDAyNDAwMDAwMDAyMzgKKzoxMDJFMDAwMDAyMjgwMDI4MDAwMDAwMDMwMjI4MDAyQzAwMDAwMDAwMTcKKzoxMDJFMTAwMDAyMjgwMDMwMDAwMDAwMDQwMjI4MDAzNDAwMDAwMDAxRjUKKzoxMDJFMjAwMDAyMjgwMDM4MDAwMDAwMDAwMjI4MDAzQzAwMDAwMDAxRDkKKzoxMDJFMzAwMDAyMjgwMDQwMDAwMDAwMDQwMjI4MDA0NDAwMDAwMDAwQjYKKzoxMDJFNDAwMDAyMjgwMDQ4MDAwMDAwMDEwMjI4MDA0QzAwMDAwMDAzOTYKKzoxMDJFNTAwMDAyMjgwMDUwMDAwMDAwMDAwMjI4MDA1NDAwMDAwMDAxNzkKKzoxMDJFNjAwMDAyMjgwMDU4MDAwMDAwMDQwMjI4MDA1QzAwMDAwMDAwNTYKKzoxMDJFNzAwMDAyMjgwMDYwMDAwMDAwMDEwMjI4MDA2NDAwMDAwMDAzMzYKKzoxMDJFODAwMDAyMjgwMDY4MDAwMDAwMDAwMjI4MDA2QzAwMDAwMDAxMTkKKzoxMDJFOTAwMDAyMjgwMDcwMDAwMDAwMDQwMjI4MDA3NDAwMDAwMDAwRjYKKzoxMDJFQTAwMDAyMjgwMDc4MDAwMDAwMDQwMjI4MDA3QzAwMDAwMDAzRDMKKzoxMDJFQjAwMDA2MjgwMDgwMDAwMDAwMDIwMjI4MDBBNDAwMDAzRkZGNTYKKzoxMDJFQzAwMDAyMjgwMEE4MDAwMDAzRkYwMjI4MDIyNDAwMDAwMDAwREUKKzoxMDJFRDAwMDAyMjgwMjM0MDAwMDAwMDAwMjI4MDI0QzAwMDAwMDAwMUEKKzoxMDJFRTAwMDAyMjgwMkU0MDAwMEZGRkYwNjI4MjAwMDAwMDAwODAwN0UKKzoxMDJFRjAwMDAyMkI4QkMwMDAwMDAwMDEwMjJCODAwMDAwMDAwMDAwQUMKKzoxMDJGMDAwMDAyMkI4MDQwMDAwMDAwMTgwMjJCODA4MDAwMDAwMDBDODMKKzoxMDJGMTAwMDAyMkI4MEMwMDAwMDAwNjYwQzJCODMwMDAwMDdBMTIwNUMKKzoxMDJGMjAwMDBBMkI4MzAwMDAwMDAxMzgwQjJCODMwMDAwMDAxMzg4NUMKKzoxMDJGMzAwMDAyMkI4M0MwMDAwMDAxRjQwQzJCODM0MDAwMDAwMUY0M0QKKzoxMDJGNDAwMDBBMkI4MzQwMDAwMDAwMDAwQjJCODM0MDAwMDAwMDA1OEIKKzoxMDJGNTAwMDBBMkI4MzgwMDAwNEM0QjQwQzJCODM4MDFEQ0Q2NTAwMzQKKzoxMDJGNjAwMDBBMkIxNDgwMDAwMDAwMDAwQjJCODM4MDAwNEM0QjQwODgKKzoxMDJGNzAwMDAyMkIxNDgwMDAwMDAwMDEwNjJBMjlDODAwMDAwMDA0NkEKKzoxMDJGODAwMDA0MkEyOUQ4MDAwMjAzNEQwNjJBMjA4MDAwMDAwMDQ4QTgKKzoxMDJGOTAwMDA2MkE5MDIwMDAwMDAwQzgwNjJBOTAwMDAwMDAwMDAyQzcKKzoxMDJGQTAwMDA2MkEyMUE4MDAwMDAwODYwNjJBMjAwMDAwMDAwMDIwMzIKKzoxMDJGQjAwMDAyMkEyM0M4MDAwMDAwMDAwNDJBMjNEMDAwMDIwMzRGODUKKzoxMDJGQzAwMDA0MkEyNDk4MDAwNDAzNTEwMjJBMkM1MDAwMDAwMDAwMTcKKzoxMDJGRDAwMDAyMkEyQzEwMDAwMDAwMDAwNDJBMkMwODAwMDIwMzU1Q0QKKzoxMDJGRTAwMDA0MkEzMDAwMDAwMjAzNTcwNjJBMzAwODAwMDAwMTAwQkUKKzoxMDJGRjAwMDA2MkE0MDQwMDAwMDAwMTAwNDJBNDAwMDAwMTAwMzU5MzcKKzoxMDMwMDAwMDA2MkE2QUMwMDAwMDAwMDIwNjJBNkIwMDAwMDAwMDA0QzUKKzoxMDMwMTAwMDA0MkE4NDA4MDAwMjAzNjkwMjJCMDgwMDAwMDAwMDAwNTMKKzoxMDMwMjAwMDA0MkIwQzAwMDAxMDAzNkIwMjJCMDgwMDAxMDAwMDAwQjEKKzoxMDMwMzAwMDA0MkIwQzQwMDAwODAzN0IwMjJCMDgwMDAyMDAwMDAwNTgKKzoxMDMwNDAwMDA0MkIwQzYwMDAwODAzODMwNjJBQzAwMDAwMDAwMEQ4OEYKKzoxMDMwNTAwMDA2MkEyNEE4MDAwMDAwMTQwNjJBMjU0ODAwMDAwMDIyQTEKKzoxMDMwNjAwMDA0MkEyNUQwMDAwMjAzOEIwNjJBMjY2ODAwMDAwMDIyQ0QKKzoxMDMwNzAwMDA0MkEyNkYwMDAwMjAzOEQwNjJBMjc4ODAwMDAwMDIyNzkKKzoxMDMwODAwMDA0MkEyODEwMDAwMjAzOEYwNjJBMjhBODAwMDAwMDIyMjQKKzoxMDMwOTAwMDA0MkEyOTMwMDAwMjAzOTEwNjJBQTAwMDAwMDAwMDI4MUIKKzoxMDMwQTAwMDA2MkFBMTQwMDAwMDAwMEMwNDJBMjlFMDAwMDIwMzkzMzQKKzoxMDMwQjAwMDA2MkE1MDIwMDAwMDAwMDIwNjJBNTAzMDAwMDAwMDAyQkMKKzoxMDMwQzAwMDA2MkE1MDAwMDAwMDAwMDIwNjJBNTAxMDAwMDAwMDAyRUMKKzoxMDMwRDAwMDAyMkE1MjA4MDAwMDAwMDEwNDJBNkFDODAwMDIwMzk1NkYKKzoxMDMwRTAwMDA2MkE2QjEwMDAwMDAwNDIwNjJBNkQyMDAwMDAwMDA0MzIKKzoxMDMwRjAwMDA2MkFCQ0QwMDAwMDAwMDIwNjJBQzM2MDAwMDAwMEQ4RTcKKzoxMDMxMDAwMDA2MkEyNEY4MDAwMDAwMTQwNjJBMjVEODAwMDAwMDIyMTAKKzoxMDMxMTAwMDA0MkEyNjYwMDAwMjAzOTcwNjJBMjZGODAwMDAwMDIyRUYKKzoxMDMxMjAwMDA0MkEyNzgwMDAwMjAzOTkwNjJBMjgxODAwMDAwMDIyOUEKKzoxMDMxMzAwMDA0MkEyOEEwMDAwMjAzOUIwNjJBMjkzODAwMDAwMDIyNDYKKzoxMDMxNDAwMDA0MkEyOUMwMDAwMjAzOUQwNjJBQTBBMDAwMDAwMDI4MkUKKzoxMDMxNTAwMDA2MkFBMTcwMDAwMDAwMEMwNDJBMjlFODAwMDIwMzlGM0YKKzoxMDMxNjAwMDA2MkE1MDI4MDAwMDAwMDIwNjJBNTAzODAwMDAwMDAyRkIKKzoxMDMxNzAwMDA2MkE1MDA4MDAwMDAwMDIwNjJBNTAxODAwMDAwMDAyMkIKKzoxMDMxODAwMDAyMkE1MjBDMDAwMDAwMDEwNDJBNkFEMDAwMDIwM0ExQTYKKzoxMDMxOTAwMDA2MkE2QzE4MDAwMDAwNDIwNjJBNkQzMDAwMDAwMDA0NjgKKzoxMDMxQTAwMDA2MkFCQ0Q4MDAwMDAwMDIwMjJBQzZDMDAwMDAwMDAwQTcKKzoxMDMxQjAwMDA0MkEyOUYwMDAxMDAzQTMwNjJBNTA0ODAwMDAwMDBFM0MKKzoxMDMxQzAwMDA2MkFCMDAwMDAwMDAwMDYwMjJBQzZDNDAwMDAwMDAwNjMKKzoxMDMxRDAwMDA0MkEyQTMwMDAxMDAzQjMwNjJBNTA4MDAwMDAwMDBFOTMKKzoxMDMxRTAwMDA2MkFCMDE4MDAwMDAwMDYwMjJBQzZDODAwMDAwMDAwMjcKKzoxMDMxRjAwMDA0MkEyQTcwMDAxMDAzQzMwNjJBNTBCODAwMDAwMDBFRUIKKzoxMDMyMDAwMDA2MkFCMDMwMDAwMDAwMDYwMjJBQzZDQzAwMDAwMDAwRUEKKzoxMDMyMTAwMDA0MkEyQUIwMDAxMDAzRDMwNjJBNTBGMDAwMDAwMDBFNDIKKzoxMDMyMjAwMDA2MkFCMDQ4MDAwMDAwMDYwMjJBQzZEMDAwMDAwMDAwQUUKKzoxMDMyMzAwMDA0MkEyQUYwMDAxMDAzRTMwNjJBNTEyODAwMDAwMDBFOTkKKzoxMDMyNDAwMDA2MkFCMDYwMDAwMDAwMDYwMjJBQzZENDAwMDAwMDAwNzIKKzoxMDMyNTAwMDA0MkEyQjMwMDAxMDAzRjMwNjJBNTE2MDAwMDAwMDBFRjAKKzoxMDMyNjAwMDA2MkFCMDc4MDAwMDAwMDYwMjJBQzZEODAwMDAwMDAwMzYKKzoxMDMyNzAwMDA0MkEyQjcwMDAxMDA0MDMwNjJBNTE5ODAwMDAwMDBFNDcKKzoxMDMyODAwMDA2MkFCMDkwMDAwMDAwMDYwMjJBQzZEQzAwMDAwMDAwRkEKKzoxMDMyOTAwMDA0MkEyQkIwMDAxMDA0MTMwNjJBNTFEMDAwMDAwMDBFOUYKKzoxMDMyQTAwMDA2MkFCMEE4MDAwMDAwMDYwMjEwMTAwODAwMDAwMDAxNjUKKzoxMDMyQjAwMDAyMTAxMDUwMDAwMDAwMDEwMjEwMTAwMDAwMDNEMDAwQTYKKzoxMDMyQzAwMDAyMTAxMDA0MDAwMDAwM0QwOTEwMTgwMDAyMDAwNDIzNDEKKzoxMDMyRDAwMDA5MTAxMTAwMDAyODA2MjMwNjEwMTFBMDAwMDAwMDE4OTQKKzoxMDMyRTAwMDA2MTAyNDAwMDAwMDAwRTAwMjEwMjAxQzAwMDAwMDAwNzYKKzoxMDMyRjAwMDAyMTAyMDIwMDAwMDAwMDEwMjEwMjBDMDAwMDAwMDAyODcKKzoxMDMzMDAwMDAyMTAyMDA0MDAwMDAwMDEwMjEwMjAwODAwMDAwMDAxNEIKKzoxMDMzMTAwMDA5MTAzQzAwMDAwNTA2NEIwOTEwMzgwMDAwMDUwNjUwNTYKKzoxMDMzMjAwMDA5MTAzODIwMDAwNTA2NTUwNjEwNEMwMDAwMDAwMTAwNjkKKzoxMDMzMzAwMDAyMTA0MDI4MDAwMDAwMTAwMjEwNDA0NDAwMDAzRkZGMkYKKzoxMDMzNDAwMDAyMTA0MDU4MDAyODAwMDAwMjEwNDA4NDAwODQ5MjRBNzUKKzoxMDMzNTAwMDAyMTA0MDU4MDAwMDAwMDAwMjEwODAwMDAwMDAxMDgwQTEKKzoxMDMzNjAwMDAyMTA4MEFDMDAwMDAwMDAwMjEwODAzODAwMDAwMDEwNDUKKzoxMDMzNzAwMDAyMTA4MTAwMDAwMDAwMDAwNjEwODEyMDAwMDAwMDAyMDEKKzoxMDMzODAwMDAyMTA4MDA4MDAwMDAyQjUwMjEwODAxMDAwMDAwMDAwNEEKKzoxMDMzOTAwMDA2MTA4MjAwMDAwMDAwNEEwMjEwODEwODAwMDFGRkZGQjEKKzoxMDMzQTAwMDA2MTA4MTQwMDAwMDAwMDIwMjEwODAwMDAwMDAxQTgwMTgKKzoxMDMzQjAwMDA2MTA5MDAwMDAwMDAwMjQwNjEwOTEyMDAwMDAwMDRBMzIKKzoxMDMzQzAwMDA2MTA5MzcwMDAwMDAwNEEwNjEwOTVDMDAwMDAwMDRBRTUKKzoxMDMzRDAwMDAyMTA4MDA0MDAwMDEwODAwMjEwODBCMDAwMDAwMDAxODQKKzoxMDMzRTAwMDAyMTA4MDNDMDAwMDAwMTAwMjEwODEwNDAwMDAwMDAwNjgKKzoxMDMzRjAwMDA2MTA4MTI4MDAwMDAwMDIwMjEwODAwQzAwMDAwMkI1QjcKKzoxMDM0MDAwMDAyMTA4MDE0MDAwMDAwMDAwNjEwODQwMDAwMDAwMDRBMzIKKzoxMDM0MTAwMDAyMTA4MTBDMDAwMUZGRkYwNjEwODE0ODAwMDAwMDAyMkQKKzoxMDM0MjAwMDAyMTA4MDA0MDAwMDFBODAwNjEwOTA5MDAwMDAwMDI0MTIKKzoxMDM0MzAwMDA2MTA5MjQ4MDAwMDAwNEEwNjEwOTQ5ODAwMDAwMDRBQzYKKzoxMDM0NDAwMDA2MTA5NkU4MDAwMDAwNEEwMjEwODAwMDAwMDAxMDgwN0MKKzoxMDM0NTAwMDAyMTA4MEFDMDAwMDAwMDIwMjEwODAzODAwMDAwMDEwNTIKKzoxMDM0NjAwMDAyMTA4MTAwMDAwMDAwMDAwNjEwODEyMDAwMDAwMDAyMTAKKzoxMDM0NzAwMDAyMTA4MDA4MDAwMDAyQjUwMjEwODAxMDAwMDAwMDAwNTkKKzoxMDM0ODAwMDA2MTA4MjAwMDAwMDAwNEEwMjEwODEwODAwMDFGRkZGQzAKKzoxMDM0OTAwMDA2MTA4MTQwMDAwMDAwMDIwMjEwODAwMDAwMDAxQTgwMjcKKzoxMDM0QTAwMDA2MTA5MDAwMDAwMDAwMjQwNjEwOTEyMDAwMDAwMDRBNDEKKzoxMDM0QjAwMDA2MTA5MzcwMDAwMDAwNEEwNjEwOTVDMDAwMDAwMDRBRjQKKzoxMDM0QzAwMDAyMTA4MDA0MDAwMDEwODAwMjEwODBCMDAwMDAwMDAzOTEKKzoxMDM0RDAwMDAyMTA4MDNDMDAwMDAwMTAwMjEwODEwNDAwMDAwMDAwNzcKKzoxMDM0RTAwMDA2MTA4MTI4MDAwMDAwMDIwMjEwODAwQzAwMDAwMkI1QzYKKzoxMDM0RjAwMDAyMTA4MDE0MDAwMDAwMDAwNjEwODQwMDAwMDAwMDRBNDIKKzoxMDM1MDAwMDAyMTA4MTBDMDAwMUZGRkYwNjEwODE0ODAwMDAwMDAyM0MKKzoxMDM1MTAwMDAyMTA4MDA0MDAwMDFBODAwNjEwOTA5MDAwMDAwMDI0MjEKKzoxMDM1MjAwMDA2MTA5MjQ4MDAwMDAwNEEwNjEwOTQ5ODAwMDAwMDRBRDUKKzoxMDM1MzAwMDA2MTA5NkU4MDAwMDAwNEEwMjEwODAwMDAwMDAxMDgwOEIKKzoxMDM1NDAwMDAyMTA4MEFDMDAwMDAwMDQwMjEwODAzODAwMDAwMDEwNUYKKzoxMDM1NTAwMDAyMTA4MTAwMDAwMDAwMDAwNjEwODEyMDAwMDAwMDAyMUYKKzoxMDM1NjAwMDAyMTA4MDA4MDAwMDAyQjUwMjEwODAxMDAwMDAwMDAwNjgKKzoxMDM1NzAwMDA2MTA4MjAwMDAwMDAwNEEwMjEwODEwODAwMDFGRkZGQ0YKKzoxMDM1ODAwMDA2MTA4MTQwMDAwMDAwMDIwMjEwODAwMDAwMDAxQTgwMzYKKzoxMDM1OTAwMDA2MTA5MDAwMDAwMDAwMjQwNjEwOTEyMDAwMDAwMDRBNTAKKzoxMDM1QTAwMDA2MTA5MzcwMDAwMDAwNEEwNjEwOTVDMDAwMDAwMDRBMDMKKzoxMDM1QjAwMDAyMTA4MDA0MDAwMDEwODAwMjEwODBCMDAwMDAwMDA1OUUKKzoxMDM1QzAwMDAyMTA4MDNDMDAwMDAwMTAwMjEwODEwNDAwMDAwMDAwODYKKzoxMDM1RDAwMDA2MTA4MTI4MDAwMDAwMDIwMjEwODAwQzAwMDAwMkI1RDUKKzoxMDM1RTAwMDAyMTA4MDE0MDAwMDAwMDAwNjEwODQwMDAwMDAwMDRBNTEKKzoxMDM1RjAwMDAyMTA4MTBDMDAwMUZGRkYwNjEwODE0ODAwMDAwMDAyNEMKKzoxMDM2MDAwMDAyMTA4MDA0MDAwMDFBODAwNjEwOTA5MDAwMDAwMDI0MzAKKzoxMDM2MTAwMDA2MTA5MjQ4MDAwMDAwNEEwNjEwOTQ5ODAwMDAwMDRBRTQKKzoxMDM2MjAwMDA2MTA5NkU4MDAwMDAwNEEwMjEwODAwMDAwMDAxMDgwOUEKKzoxMDM2MzAwMDAyMTA4MEFDMDAwMDAwMDYwMjEwODAzODAwMDAwMDEwNkMKKzoxMDM2NDAwMDAyMTA4MTAwMDAwMDAwMDAwNjEwODEyMDAwMDAwMDAyMkUKKzoxMDM2NTAwMDAyMTA4MDA4MDAwMDAyQjUwMjEwODAxMDAwMDAwMDAwNzcKKzoxMDM2NjAwMDA2MTA4MjAwMDAwMDAwNEEwMjEwODEwODAwMDFGRkZGREUKKzoxMDM2NzAwMDA2MTA4MTQwMDAwMDAwMDIwMjEwODAwMDAwMDAxQTgwNDUKKzoxMDM2ODAwMDA2MTA5MDAwMDAwMDAwMjQwNjEwOTEyMDAwMDAwMDRBNUYKKzoxMDM2OTAwMDA2MTA5MzcwMDAwMDAwNEEwNjEwOTVDMDAwMDAwMDRBMTIKKzoxMDM2QTAwMDAyMTA4MDA0MDAwMDEwODAwMjEwODBCMDAwMDAwMDA3QUIKKzoxMDM2QjAwMDAyMTA4MDNDMDAwMDAwMTAwMjEwODEwNDAwMDAwMDAwOTUKKzoxMDM2QzAwMDA2MTA4MTI4MDAwMDAwMDIwMjEwODAwQzAwMDAwMkI1RTQKKzoxMDM2RDAwMDAyMTA4MDE0MDAwMDAwMDAwNjEwODQwMDAwMDAwMDRBNjAKKzoxMDM2RTAwMDAyMTA4MTBDMDAwMUZGRkYwNjEwODE0ODAwMDAwMDAyNUIKKzoxMDM2RjAwMDAyMTA4MDA0MDAwMDFBODAwNjEwOTA5MDAwMDAwMDI0NDAKKzoxMDM3MDAwMDA2MTA5MjQ4MDAwMDAwNEEwNjEwOTQ5ODAwMDAwMDRBRjMKKzoxMDM3MTAwMDA2MTA5NkU4MDAwMDAwNEEwMjEyMDVCMDAwMDAwMDAxMDEKKzoxMDM3MjAwMDAyMTIwNDkwMDBFMzgzNDAwMjEyMDUxNDAwMDAzQzEwRDIKKzoxMDM3MzAwMDAyMTIwNjZDMDAwMDAwMDEwMjEyMDY3MDAwMDAwMDAwNzgKKzoxMDM3NDAwMDAyMTIwNDk0RkZGRkZGRkYwMjEyMDQ5OEZGRkZGRkZGMjUKKzoxMDM3NTAwMDAyMTIwNDlDRkZGRkZGRkYwMjEyMDRBMEZGRkZGRkZGMDUKKzoxMDM3NjAwMDAyMTIwNEE0RkZGRkZGRkYwMjEyMDRBOEZGRkZGRkZGRTUKKzoxMDM3NzAwMDAyMTIwNEFDRkZGRkZGRkYwMjEyMDRCMEZGRkZGRkZGQzUKKzoxMDM3ODAwMDAyMTIwNEJDRkZGRkZGRkYwMjEyMDRDMEZGRkZGRkZGOTUKKzoxMDM3OTAwMDAyMTIwNEM0RkZGRkZGRkYwMjEyMDRDOEZGRkZGRkZGNzUKKzoxMDM3QTAwMDAyMTIwNENDRkZGRkZGRkYwMjEyMDREMEZGRkZGRkZGNTUKKzoxMDM3QjAwMDAyMTIwNEQ4RkZGRkZGRkYwMjEyMDREQ0ZGRkZGRkZGMkQKKzoxMDM3QzAwMDAyMTIwNEUwRkZGRkZGRkYwMjEyMDRFNEZGRkZGRkZGMEQKKzoxMDM3RDAwMDAyMTIwNEU4RkZGRkZGRkYwMjEyMDRFQ0ZGRkZGRkZGRUQKKzoxMDM3RTAwMDAyMTIwNEYwRkZGRkZGRkYwMjEyMDRGNEZGRkZGRkZGQ0QKKzoxMDM3RjAwMDAyMTIwNEY4RkZGRkZGRkYwMjEyMDRGQ0ZGRkZGRkZGQUQKKzoxMDM4MDAwMDAyMTIwNTAwRkZGRkZGRkYwMjEyMDUwNEZGRkZGRkZGOEEKKzoxMDM4MTAwMDAyMTIwNTA4RkZGRkZGRkYwMjEyMDUwQ0ZGRkZGRkZGNkEKKzoxMDM4MjAwMDAyMTIwNTEwRkZGRkZGRkYwMjEyMDRENEZGODAyMDAwRTgKKzoxMDM4MzAwMDAyMTIwNEI0RjAwMDUwMDAwMjEyMDRCOEYwMDAxMDAwQUMKKzoxMDM4NDAwMDAyMTIwMzkwMDAwMDAwMDgwMjEyMDM5QzAwMDAwMDA4MEUKKzoxMDM4NTAwMDAyMTIwM0EwMDAwMDAwMDgwMjEyMDNBNDAwMDAwMDAyRUMKKzoxMDM4NjAwMDAyMTIwM0JDMDAwMDAwMDQwMjEyMDNDMDAwMDAwMDA1QTUKKzoxMDM4NzAwMDAyMTIwM0M0MDAwMDAwMDQwMjEyMDNEMDAwMDAwMDAwODIKKzoxMDM4ODAwMDAyMTIwMzZDMDAwMDAwMDEwMjEyMDM2ODAwMDAwMDNGRjYKKzoxMDM4OTAwMDAyMTIwMUJDMDAwMDAwNDAwMjEyMDFDMDAwMDAxODA4MjIKKzoxMDM4QTAwMDAyMTIwMUM0MDAwMDA4MDMwMjEyMDFDODAwMDAwODAzNEMKKzoxMDM4QjAwMDAyMTIwMUNDMDAwMDAwNDAwMjEyMDFEMDAwMDAwMDAzRkYKKzoxMDM4QzAwMDAyMTIwMUQ0MDAwMDA4MDMwMjEyMDFEODAwMDAwODAzMEMKKzoxMDM4RDAwMDAyMTIwMURDMDAwMDA4MDMwMjEyMDFFMDAwMDEwMDAzRjMKKzoxMDM4RTAwMDAyMTIwMUU0MDAwMDA4MDMwMjEyMDFFODAwMDAwODAzQ0MKKzoxMDM4RjAwMDAyMTIwMUVDMDAwMDAwMDMwMjEyMDFGMDAwMDAwMDAzQkMKKzoxMDM5MDAwMDAyMTIwMUY0MDAwMDAwMDMwMjEyMDFGODAwMDAwMDAzOUIKKzoxMDM5MTAwMDAyMTIwMUZDMDAwMDAwMDMwMjEyMDIwMDAwMDAwMDAzN0EKKzoxMDM5MjAwMDAyMTIwMjA0MDAwMDAwMDMwMjEyMDIwODAwMDAwMDAzNTkKKzoxMDM5MzAwMDAyMTIwMjBDMDAwMDAwMDMwMjEyMDIxMDAwMDAwMDAzMzkKKzoxMDM5NDAwMDAyMTIwMjE0MDAwMDAwMDMwMjEyMDIxODAwMDAwMDAzMTkKKzoxMDM5NTAwMDAyMTIwMjFDMDAwMDAwMDMwMjEyMDIyMDAwMDAwMDAzRjkKKzoxMDM5NjAwMDAyMTIwMjI0MDAwMDAwMDMwMjEyMDIyODAwMDAyNDAzQjUKKzoxMDM5NzAwMDAyMTIwMjJDMDAwMDAwMkYwMjEyMDIzMDAwMDAwMDA5ODcKKzoxMDM5ODAwMDAyMTIwMjM0MDAwMDAwMTkwMjEyMDIzODAwMDAwMTg0MDEKKzoxMDM5OTAwMDAyMTIwMjNDMDAwMDAxODMwMjEyMDI0MDAwMDAwMzA2RjIKKzoxMDM5QTAwMDAyMTIwMjQ0MDAwMDAwMTkwMjEyMDI0ODAwMDAwMDA2NDAKKzoxMDM5QjAwMDAyMTIwMjRDMDAwMDAzMDYwMjEyMDI1MDAwMDAwMzA2MkQKKzoxMDM5QzAwMDAyMTIwMjU0MDAwMDAzMDYwMjEyMDI1ODAwMDAwQzg2ODQKKzoxMDM5RDAwMDAyMTIwMjVDMDAwMDAzMDYwMjEyMDI2MDAwMDAwMzA2RUQKKzoxMDM5RTAwMDAyMTIwMjY0MDAwMDAwMDYwMjEyMDI2ODAwMDAwMDA2RDMKKzoxMDM5RjAwMDAyMTIwMjZDMDAwMDAwMDYwMjEyMDI3MDAwMDAwMDA2QjMKKzoxMDNBMDAwMDAyMTIwMjc0MDAwMDAwMDYwMjEyMDI3ODAwMDAwMDA2OTIKKzoxMDNBMTAwMDAyMTIwMjdDMDAwMDAwMDYwMjEyMDI4MDAwMDAwMDA2NzIKKzoxMDNBMjAwMDAyMTIwMjg0MDAwMDAwMDYwMjEyMDI4ODAwMDAwMDA2NTIKKzoxMDNBMzAwMDAyMTIwMjhDMDAwMDAwMDYwMjEyMDI5MDAwMDAwMDA2MzIKKzoxMDNBNDAwMDAyMTIwMjk0MDAwMDAwMDYwMjEyMDI5ODAwMDAwMDA2MTIKKzoxMDNBNTAwMDAyMTIwMjlDMDAwMDAwMDYwMjEyMDJBMDAwMDAwMzA2RUYKKzoxMDNBNjAwMDAyMTIwMkE0MDAwMDAwMTMwMjEyMDJBODAwMDAwMDA2QzUKKzoxMDNBNzAwMDAyMTIwMkIwMDAwMDEwMDQwMjEyMDJCNDAwMDAxMDA0OEUKKzoxMDNBODAwMDAyMTIwMzI0MDAxMDY0NDAwMjEyMDMyODAwMTA2NDQwNTQKKzoxMDNBOTAwMDAyMTIwNUI0MDAwMDAwMDEwMjEyMDFCMDAwMDAwMDAxOTIKKzoxMDNBQTAwMDA2MDBBMDAwMDAwMDAwMTYwMjAwQTBFQzU1NTQwMDAwMjMKKzoxMDNBQjAwMDAyMDBBMEYwNTU1NTU1NTUwMjAwQTBGNDAwMDA1NTU1RTAKKzoxMDNBQzAwMDAyMDBBMEY4RjAwMDAwMDAwMjAwQTBGQzU1NTQwMDAwMjUKKzoxMDNBRDAwMDAyMDBBMTAwNTU1NTU1NTUwMjAwQTEwNDAwMDA1NTU1OUUKKzoxMDNBRTAwMDAyMDBBMTA4RjAwMDAwMDAwMjAwQTE4QzU1NTQwMDAwNjMKKzoxMDNBRjAwMDAyMDBBMTkwNTU1NTU1NTUwMjAwQTE5NDAwMDA1NTU1NUUKKzoxMDNCMDAwMDAyMDBBMTk4RjAwMDAwMDAwMjAwQTE5QzAwMDAwMDAwNEIKKzoxMDNCMTAwMDAyMDBBMUEwMDAwMTAwMDAwMjAwQTFBNDAwMDA1MDE0QjYKKzoxMDNCMjAwMDAyMDBBMUE4MDAwMDAwMDAwMjAwQTQ1QzAwMDAwQzAwM0MKKzoxMDNCMzAwMDAyMDBBNjFDMDAwMDAwMDMwMjAwQTA2Q0ZGNUMwMDAwNTUKKzoxMDNCNDAwMDAyMDBBMDcwRkZGNTVGRkYwMjAwQTA3NDAwMDBGRkZGRkQKKzoxMDNCNTAwMDAyMDBBMDc4RjAwMDAzRTAwMjAwQTA3QzAwMDAwMDAwNUEKKzoxMDNCNjAwMDAyMDBBMDgwMDAwMEEwMDAwNjAwQTA4NDAwMDAwMDA1NjQKKzoxMDNCNzAwMDAyMDBBMDk4MEZFMDAwMDAwNjAwQTA5QzAwMDAwMDA3RDMKKzoxMDNCODAwMDAyMDBBMEI4MDAwMDA0MDAwNjAwQTBCQzAwMDAwMDAzNzIKKzoxMDNCOTAwMDAyMDBBMEM4MDAwMDEwMDAwNjAwQTBDQzAwMDAwMDAzMzYKKzoxMDNCQTAwMDAyMDBBMEQ4MDAwMDQwMDAwNjAwQTBEQzAwMDAwMDAzRDYKKzoxMDNCQjAwMDAyMDBBMEU4MDAwMTAwMDAwNjAwQTIyQzAwMDAwMDA0QTIKKzoxMDNCQzAwMDAyMDBBMTBDRkY1QzAwMDAwMjAwQTExMEZGRjU1RkZGRTYKKzoxMDNCRDAwMDAyMDBBMTE0MDAwMEZGRkYwMjAwQTExOEYwMDAwM0UwQTIKKzoxMDNCRTAwMDAyMDBBMTFDMDAwMDAwMDAwMjAwQTEyMDAwMDBBMDAwQjMKKzoxMDNCRjAwMDA2MDBBMTI0MDAwMDAwMDUwMjAwQTEzODBGRTAwMDAwMkIKKzoxMDNDMDAwMDA2MDBBMTNDMDAwMDAwMDcwMjAwQTE1ODAwMDAwODAwQzcKKzoxMDNDMTAwMDA2MDBBMTVDMDAwMDAwMDMwMjAwQTE2ODAwMDAyMDAwNzMKKzoxMDNDMjAwMDA2MDBBMTZDMDAwMDAwMDMwMjAwQTE3ODAwMDA4MDAwRTMKKzoxMDNDMzAwMDA2MDBBMTdDMDAwMDAwMDMwMjAwQTE4ODAwMDIwMDAwMzEKKzoxMDNDNDAwMDA2MDBBMjNDMDAwMDAwMDQwMDAwMDAwMDAwMDAwMDAwOEMKKzoxMDNDNTAwMDAwMDAwMDMxMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDNDNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTQKKzoxMDNDNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzEwMDMyRTEKKzoxMDNDODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzQKKzoxMDNDOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjQKKzoxMDNDQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDMyMDA1NjAwMDAwMDAwOEMKKzoxMDNDQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDQKKzoxMDNDQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjQKKzoxMDNDRDAwMDAwMDAwMDAwMDA1NjAwOEMwMDAwMDAwMDAwMDAwMDAwMDIKKzoxMDNDRTAwMDAwOEMwMDkwMDA5MDAwOTQwMDk0MDA5ODAwOTgwMDlDMzQKKzoxMDNDRjAwMDAwOUMwMEEwMDBBMDAwQTQwMEE0MDBBODAwQTgwMEFDQTQKKzoxMDNEMDAwMDAwQUMwMEIxMDBCMTAwQjMwMEIzMDBCNTAwMDAwMDAwOEEKKzoxMDNEMTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTMKKzoxMDNEMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjUwMTAyREIKKzoxMDNEMzAwMDAxMDIwMTBBMDEwQTAxMTIwMTEyMDExQjAxMUIwMTI0RTcKKzoxMDNENDAwMDAxMjQwMTJEMDEyRDAxMzYwMTM2MDEzRjAxM0YwMTQ4QkIKKzoxMDNENTAwMDAxNDgwMTUxMDE1MTAxNUEwMDAwMDAwMDAwMDAwMDAwMUIKKzoxMDNENjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTMKKzoxMDNENzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDMKKzoxMDNEODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzMKKzoxMDNEOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjMKKzoxMDNEQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTMKKzoxMDNEQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDMKKzoxMDNEQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjMKKzoxMDNERDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTMKKzoxMDNERTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDMKKzoxMDNERjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzMKKzoxMDNFMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTVBMDE1RjAwMDAwMDAwRjcKKzoxMDNFMTAwMDAwMDAwMDAwMDE1RjAxNjAwMTYwMDE2MTAxNjEwMTYyNTkKKzoxMDNFMjAwMDAxNjIwMTYzMDE2MzAxNjQwMTY0MDE2NTAxNjUwMTY2NkEKKzoxMDNFMzAwMDAxNjYwMTY3MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjMKKzoxMDNFNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNzIKKzoxMDNFNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjIKKzoxMDNFNjAwMDAxNjcwMTZDMDE2QzAxNzkwMTc5MDE4NjAwMDAwMDAwOTUKKzoxMDNFNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDIKKzoxMDNFODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzIKKzoxMDNFOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMjIKKzoxMDNFQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIKKzoxMDNFQjAwMDAwMDAwMDAwMDAwMDAwMDAwMTg2MDE4NzAwMDAwMDAwRjMKKzoxMDNFQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjIKKzoxMDNFRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRTIKKzoxMDNFRTAwMDAwMDAwMDAwMDE4NzAxQkUwMDAwMDAwMDAwMDAwMDAwOEIKKzoxMDNFRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzIKKzoxMDNGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjEKKzoxMDNGMTAwMDAxQkUwMUU5MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRjgKKzoxMDNGMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTEKKzoxMDNGMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxRTkwMjFBN0IKKzoxMDNGNDAwMDAwMDAwMDAwMDAwMDAwMDAwMjFBMDIyMTAyMjEwMjI4RTUKKzoxMDNGNTAwMDAyMjgwMjJGMDIyRjAyMzYwMjM2MDIzRDAyM0QwMjQ0QTEKKzoxMDNGNjAwMDAyNDQwMjRCMDI0QjAyNTIwMjUyMDI4QTAwMDAwMDAwM0QKKzoxMDNGNzAwMDAwMDAwMDAwMDI4QTAyOEUwMjhFMDI5MjAyOTIwMjk2RDUKKzoxMDNGODAwMDAyOTYwMjlBMDI5QTAyOUUwMjlFMDJBMjAyQTIwMkE2MzEKKzoxMDNGOTAwMDAyQTYwMkFBMDJBQTAyRkEwMkZBMDMxMTAzMTEwMzI4RDYKKzoxMDNGQTAwMDAzMjgwMzJCMDMyQjAzMkUwMzJFMDMzMTAzMzEwMzM0ODkKKzoxMDNGQjAwMDAzMzQwMzM3MDMzNzAzM0EwMzNBMDMzRDAzM0QwMzQwMTkKKzoxMDNGQzAwMDAzNDAwMzgxMDM4MTAzODgwMzg4MDM4RjAzOEYwMzkzRDYKKzoxMDNGRDAwMDAzOTMwMzk3MDM5NzAzOUIwMzlCMDM5RjAzOUYwM0EzRjEKKzoxMDNGRTAwMDAzQTMwM0E3MDNBNzAzQUIwM0FCMDNBRjAzQUYwM0IwNjQKKzoxMDNGRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQzEKKzoxMDQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQjAKKzoxMDQwMTAwMDAwMDAwMDAwMDAwMDAwMDAwM0IwMDNDMjAwMDAwMDAwMjgKKzoxMDQwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOTAKKzoxMDQwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwODAKKzoxMDQwNDAwMDAwMDAwMDAwMDNDMjAzRDcwM0Q3MDNEQTAzREEwM0RENUQKKzoxMDQwNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMDQwNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTAKKzoxMDQwNzAwMDAzREQwNDBBMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNTIKKzoxMDQwODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMzAKKzoxMDQwOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA0MEEwNTBEMDAKKzoxMDQwQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTAKKzoxMDQwQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDQwQzAwMDAwMDAwMDAwMDAwMDAwMDAwNTBEMDUxNDA1MTQwNTE4OEYKKzoxMDQwRDAwMDA1MTgwNTFDMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQTIKKzoxMDQwRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDAKKzoxMDQwRjAwMDAwMDAwMDAwMDUxQzA1NUMwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDQxMDAwMDA1NUMwNTY1MDU2NTA1NkUwNTZFMDU3NzA1NzcwNTgwMTcKKzoxMDQxMTAwMDA1ODAwNTg5MDU4OTA1OTIwNTkyMDU5QjA1OUIwNUE0RTcKKzoxMDQxMjAwMDA1QTQwNUZEMDVGRDA2MTMwNjEzMDYyOTA2MjkwNjJEMUYKKzoxMDQxMzAwMDA2MkQwNjMxMDYzMTA2MzUwNjM1MDYzOTA2MzkwNjNEQTcKKzoxMDQxNDAwMDA2M0QwNjQxMDY0MTA2NDUwNjQ1MDY0OTA2NDkwNjUwMTQKKzoxMDQxNTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNUYKKzoxMDQxNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDQxNzAwMDAwMDAwMDAwMDAwMDAwMDAwNjUwMDY1NjAwMDAwMDAwOEQKKzoxMDQxODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkYKKzoxMDQxOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUYKKzoxMDQxQTAwMDAwMDAwMDAwMDY1NjA2NTkwMDAwMDAwMDAwMDAwMDAwNTQKKzoxMDQxQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkYKKzoxMDQxQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUYKKzoxMDQxRDAwMDA2NTkwNjVGMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUIKKzoxMDQxRTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQ0YKKzoxMDQxRjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwQkYKKzoxMDQyMDAwMDAwMDAwMDAwMDAwMDAwMDAwNjVGMDY2RTA2NkUwNjdEREUKKzoxMDQyMTAwMDA2N0QwNjhDMDY4QzA2OUIwNjlCMDZBQTA2QUEwNkI5OTYKKzoxMDQyMjAwMDA2QjkwNkM4MDZDODA2RDcwNkQ3MDc0ODAwMDAwMDAwMkEKKzoxMDQyMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0UKKzoxMDQyNDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNkUKKzoxMDQyNTAwMDAwMDAwMDAwMDc0ODA3NUIwNzVCMDc2QzA3NkMwNzdERTEKKzoxMDQyNjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNEUKKzoxMDQyNzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM0UKKzoxMDQyODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMkUKKzoxMDQyOTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUUKKzoxMDQyQTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMEUKKzoxMDQyQjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRkUKKzoxMDQyQzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRUUKKzoxMDQyRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwREUKKzoxMDQyRTAwMDAwMDEwMDAwMDAwMjA0QzAwMDAzMDk4MDAwMDQwRTQwMjkKKzoxMDQyRjAwMDAwMDUxMzAwMDAwNjE3QzAwMDA3MUM4MDAwMDgyMTQwQkQKKzoxMDQzMDAwMDAwMDkyNjAwMDAwQTJBQzAwMDBCMkY4MDAwMEMzNDQwNTAKKzoxMDQzMTAwMDAwMEQzOTAwMDAwRTNEQzAwMDBGNDI4MDAwMTA0NzQwRTQKKzoxMDQzMjAwMDAwMTE0QzAwMDAxMjUwQzAwMDEzNTU4MDAwMTQ1QTQwNzgKKzoxMDQzMzAwMDAwMTU1RjAwMDAxNjYzQzAwMDE3Njg4MDAwMTg2RDQwMEMKKzoxMDQzNDAwMDAwMTk3MjAwMDAxQTc2QzAwMDFCN0I4MDAwMUM4MDQwQTAKKzoxMDQzNTAwMDAwMUQ4NTAwMDAxRTg5QzAwMDFGOEU4MDAwMjA5MzQwMzQKKzoxMDQzNjAwMDAwMDAyMDAwMDAwMDQwMDAwMDAwNjAwMDAwMDA4MDAwMEQKKzoxMDQzNzAwMDAwMDBBMDAwMDAwMEMwMDAwMDAwRTAwMDAwMDEwMDAwRkMKKzoxMDQzODAwMDAwMDEyMDAwMDAwMTQwMDAwMDAxNjAwMDAwMDE4MDAwRTkKKzoxMDQzOTAwMDAwMDFBMDAwMDAwMUMwMDAwMDAxRTAwMDAwMDIwMDAwRDgKKzoxMDQzQTAwMDAwMDIyMDAwMDAwMjQwMDAwMDAyNjAwMDAwMDI4MDAwQzUKKzoxMDQzQjAwMDAwMDJBMDAwMDAwMkMwMDAwMDAyRTAwMDAwMDMwMDAwQjQKKzoxMDQzQzAwMDAwMDMyMDAwMDAwMzQwMDAwMDAzNjAwMDAwMDM4MDAwQTEKKzoxMDQzRDAwMDAwMDNBMDAwMDAwM0MwMDAwMDAzRTAwMDAwMDQwMDAwOTAKKzoxMDQzRTAwMDAwMDQyMDAwMDAwNDQwMDAwMDA0NjAwMDAwMDQ4MDAwN0QKKzoxMDQzRjAwMDAwMDRBMDAwMDAwNEMwMDAwMDA0RTAwMDAwMDUwMDAwNkMKKzoxMDQ0MDAwMDAwMDUyMDAwMDAwNTQwMDAwMDA1NjAwMDAwMDU4MDAwNTgKKzoxMDQ0MTAwMDAwMDVBMDAwMDAwNUMwMDAwMDA1RTAwMDAwMDYwMDAwNDcKKzoxMDQ0MjAwMDAwMDYyMDAwMDAwNjQwMDAwMDA2NjAwMDAwMDY4MDAwMzQKKzoxMDQ0MzAwMDAwMDZBMDAwMDAwNkMwMDAwMDA2RTAwMDAwMDcwMDAwMjMKKzoxMDQ0NDAwMDAwMDcyMDAwMDAwNzQwMDAwMDA3NjAwMDAwMDc4MDAwMTAKKzoxMDQ0NTAwMDAwMDdBMDAwMDAwN0MwMDAwMDA3RTAwMDAwMDgwMDAwRkYKKzoxMDQ0NjAwMDAwMDgyMDAwMDAwODQwMDAwMDA4NjAwMDAwMDg4MDAwRUMKKzoxMDQ0NzAwMDAwMDhBMDAwMDAwOEMwMDAwMDA4RTAwMDAwMDkwMDAwREIKKzoxMDQ0ODAwMDAwMDkyMDAwMDAwOTQwMDAwMDA5NjAwMDAwMDk4MDAwQzgKKzoxMDQ0OTAwMDAwMDlBMDAwMDAwOUMwMDAwMDA5RTAwMDAwMEEwMDAwQjcKKzoxMDQ0QTAwMDAwMEEyMDAwMDAwQTQwMDAwMDBBNjAwMDAwMEE4MDAwQTQKKzoxMDQ0QjAwMDAwMEFBMDAwMDAwQUMwMDAwMDBBRTAwMDAwMEIwMDAwOTMKKzoxMDQ0QzAwMDAwMEIyMDAwMDAwQjQwMDAwMDBCNjAwMDAwMEI4MDAwODAKKzoxMDQ0RDAwMDAwMEJBMDAwMDAwQkMwMDAwMDBCRTAwMDAwMEMwMDAwNkYKKzoxMDQ0RTAwMDAwMEMyMDAwMDAwQzQwMDAwMDBDNjAwMDAwMEM4MDAwNUMKKzoxMDQ0RjAwMDAwMENBMDAwMDAwQ0MwMDAwMDBDRTAwMDAwMEQwMDAwNEIKKzoxMDQ1MDAwMDAwMEQyMDAwMDAwRDQwMDAwMDBENjAwMDAwMEQ4MDAwMzcKKzoxMDQ1MTAwMDAwMERBMDAwMDAwREMwMDAwMDBERTAwMDAwMEUwMDAwMjYKKzoxMDQ1MjAwMDAwMEUyMDAwMDAwRTQwMDAwMDBFNjAwMDAwMEU4MDAwMTMKKzoxMDQ1MzAwMDAwMEVBMDAwMDAwRUMwMDAwMDBFRTAwMDAwMEYwMDAwMDIKKzoxMDQ1NDAwMDAwMEYyMDAwMDAwRjQwMDAwMDBGNjAwMDAwMEY4MDAwRUYKKzoxMDQ1NTAwMDAwMEZBMDAwMDAwRkMwMDAwMDBGRTAwMDAwMTAwMDAwREUKKzoxMDQ1NjAwMDAwMTAyMDAwMDAxMDQwMDAwMDEwNjAwMDAwMTA4MDAwQ0IKKzoxMDQ1NzAwMDAwMTBBMDAwMDAxMEMwMDAwMDEwRTAwMDAwMTEwMDAwQkEKKzoxMDQ1ODAwMDAwMTEyMDAwMDAxMTQwMDAwMDExNjAwMDAwMTE4MDAwQTcKKzoxMDQ1OTAwMDAwMTFBMDAwMDAxMUMwMDAwMDExRTAwMDAwMTIwMDAwOTYKKzoxMDQ1QTAwMDAwMTIyMDAwMDAxMjQwMDAwMDEyNjAwMDAwMTI4MDAwODMKKzoxMDQ1QjAwMDAwMTJBMDAwMDAxMkMwMDAwMDEyRTAwMDAwMTMwMDAwNzIKKzoxMDQ1QzAwMDAwMTMyMDAwMDAxMzQwMDAwMDEzNjAwMDAwMTM4MDAwNUYKKzoxMDQ1RDAwMDAwMTNBMDAwMDAxM0MwMDAwMDEzRTAwMDAwMTQwMDAwNEUKKzoxMDQ1RTAwMDAwMTQyMDAwMDAxNDQwMDAwMDE0NjAwMDAwMTQ4MDAwM0IKKzoxMDQ1RjAwMDAwMTRBMDAwMDAxNEMwMDAwMDE0RTAwMDAwMTUwMDAwMkEKKzoxMDQ2MDAwMDAwMTUyMDAwMDAxNTQwMDAwMDE1NjAwMDAwMTU4MDAwMTYKKzoxMDQ2MTAwMDAwMTVBMDAwMDAxNUMwMDAwMDE1RTAwMDAwMTYwMDAwMDUKKzoxMDQ2MjAwMDAwMTYyMDAwMDAxNjQwMDAwMDE2NjAwMDAwMTY4MDAwRjIKKzoxMDQ2MzAwMDAwMTZBMDAwMDAxNkMwMDAwMDE2RTAwMDAwMTcwMDAwRTEKKzoxMDQ2NDAwMDAwMTcyMDAwMDAxNzQwMDAwMDE3NjAwMDAwMTc4MDAwQ0UKKzoxMDQ2NTAwMDAwMTdBMDAwMDAxN0MwMDAwMDE3RTAwMDAwMTgwMDAwQkQKKzoxMDQ2NjAwMDAwMTgyMDAwMDAxODQwMDAwMDE4NjAwMDAwMTg4MDAwQUEKKzoxMDQ2NzAwMDAwMThBMDAwMDAxOEMwMDAwMDE4RTAwMDAwMTkwMDAwOTkKKzoxMDQ2ODAwMDAwMTkyMDAwMDAxOTQwMDAwMDE5NjAwMDAwMTk4MDAwODYKKzoxMDQ2OTAwMDAwMTlBMDAwMDAxOUMwMDAwMDE5RTAwMDAwMUEwMDAwNzUKKzoxMDQ2QTAwMDAwMUEyMDAwMDAxQTQwMDAwMDFBNjAwMDAwMUE4MDAwNjIKKzoxMDQ2QjAwMDAwMUFBMDAwMDAxQUMwMDAwMDFBRTAwMDAwMUIwMDAwNTEKKzoxMDQ2QzAwMDAwMUIyMDAwMDAxQjQwMDAwMDFCNjAwMDAwMUI4MDAwM0UKKzoxMDQ2RDAwMDAwMUJBMDAwMDAxQkMwMDAwMDFCRTAwMDAwMUMwMDAwMkQKKzoxMDQ2RTAwMDAwMUMyMDAwMDAxQzQwMDAwMDFDNjAwMDAwMUM4MDAwMUEKKzoxMDQ2RjAwMDAwMUNBMDAwMDAxQ0MwMDAwMDFDRTAwMDAwMUQwMDAwMDkKKzoxMDQ3MDAwMDAwMUQyMDAwMDAxRDQwMDAwMDFENjAwMDAwMUQ4MDAwRjUKKzoxMDQ3MTAwMDAwMURBMDAwMDAxREMwMDAwMDFERTAwMDAwMUUwMDAwRTQKKzoxMDQ3MjAwMDAwMUUyMDAwMDAxRTQwMDAwMDFFNjAwMDAwMUU4MDAwRDEKKzoxMDQ3MzAwMDAwMUVBMDAwMDAxRUMwMDAwMDFFRTAwMDAwMUYwMDAwQzAKKzoxMDQ3NDAwMDAwMUYyMDAwMDAxRjQwMDAwMDFGNjAwMDAwMUY4MDAwQUQKKzoxMDQ3NTAwMDAwMUZBMDAwMDAxRkMwMDAwMDFGRTAwMDAwMjAwMDAwOUMKKzoxMDQ3NjAwMDAwMjAyMDAwMDAyMDQwMDAwMDIwNjAwMDAwMjA4MDAwODkKKzoxMDQ3NzAwMDAwMjBBMDAwMDAyMEMwMDAwMDIwRTAwMDAwMjEwMDAwNzgKKzoxMDQ3ODAwMDAwMjEyMDAwMDAyMTQwMDAwMDIxNjAwMDAwMjE4MDAwNjUKKzoxMDQ3OTAwMDAwMjFBMDAwMDAyMUMwMDAwMDIxRTAwMDAwMjIwMDAwNTQKKzoxMDQ3QTAwMDAwMjIyMDAwMDAyMjQwMDAwMDIyNjAwMDAwMjI4MDAwNDEKKzoxMDQ3QjAwMDAwMjJBMDAwMDAyMkMwMDAwMDIyRTAwMDAwMjMwMDAwMzAKKzoxMDQ3QzAwMDAwMjMyMDAwMDAyMzQwMDAwMDIzNjAwMDAwMjM4MDAwMUQKKzoxMDQ3RDAwMDAwMjNBMDAwMDAyM0MwMDAwMDIzRTAwMDAwMjQwMDAwMEMKKzoxMDQ3RTAwMDAwMjQyMDAwMDAyNDQwMDAwMDI0NjAwMDAwMjQ4MDAwRjkKKzoxMDQ3RjAwMDAwMjRBMDAwMDAyNEMwMDAwMDI0RTAwMDAwMjUwMDAwRTgKKzoxMDQ4MDAwMDAwMjUyMDAwMDAyNTQwMDAwMDI1NjAwMDAwMjU4MDAwRDQKKzoxMDQ4MTAwMDAwMjVBMDAwMDAyNUMwMDAwMDI1RTAwMDAwMjYwMDAwQzMKKzoxMDQ4MjAwMDAwMjYyMDAwMDAyNjQwMDAwMDI2NjAwMDAwMjY4MDAwQjAKKzoxMDQ4MzAwMDAwMjZBMDAwMDAyNkMwMDAwMDI2RTAwMDAwMjcwMDAwOUYKKzoxMDQ4NDAwMDAwMjcyMDAwMDAyNzQwMDAwMDI3NjAwMDAwMjc4MDAwOEMKKzoxMDQ4NTAwMDAwMjdBMDAwMDAyN0MwMDAwMDI3RTAwMDAwMjgwMDAwN0IKKzoxMDQ4NjAwMDAwMjgyMDAwMDAyODQwMDAwMDI4NjAwMDAwMjg4MDAwNjgKKzoxMDQ4NzAwMDAwMjhBMDAwMDAyOEMwMDAwMDI4RTAwMDAwMjkwMDAwNTcKKzoxMDQ4ODAwMDAwMjkyMDAwMDAyOTQwMDAwMDI5NjAwMDAwMjk4MDAwNDQKKzoxMDQ4OTAwMDAwMjlBMDAwMDAyOUMwMDAwMDI5RTAwMDAwMkEwMDAwMzMKKzoxMDQ4QTAwMDAwMkEyMDAwMDAyQTQwMDAwMDJBNjAwMDAwMkE4MDAwMjAKKzoxMDQ4QjAwMDAwMkFBMDAwMDAyQUMwMDAwMDJBRTAwMDAwMkIwMDAwMEYKKzoxMDQ4QzAwMDAwMkIyMDAwMDAyQjQwMDAwMDJCNjAwMDAwMkI4MDAwRkMKKzoxMDQ4RDAwMDAwMkJBMDAwMDAyQkMwMDAwMDJCRTAwMDAwMkMwMDAwRUIKKzoxMDQ4RTAwMDAwMkMyMDAwMDAyQzQwMDAwMDJDNjAwMDAwMkM4MDAwRDgKKzoxMDQ4RjAwMDAwMkNBMDAwMDAyQ0MwMDAwMDJDRTAwMDAwMkQwMDAwQzcKKzoxMDQ5MDAwMDAwMkQyMDAwMDAyRDQwMDAwMDJENjAwMDAwMkQ4MDAwQjMKKzoxMDQ5MTAwMDAwMkRBMDAwMDAyREMwMDAwMDJERTAwMDAwMkUwMDAwQTIKKzoxMDQ5MjAwMDAwMkUyMDAwMDAyRTQwMDAwMDJFNjAwMDAwMkU4MDAwOEYKKzoxMDQ5MzAwMDAwMkVBMDAwMDAyRUMwMDAwMDJFRTAwMDAwMkYwMDAwN0UKKzoxMDQ5NDAwMDAwMkYyMDAwMDAyRjQwMDAwMDJGNjAwMDAwMkY4MDAwNkIKKzoxMDQ5NTAwMDAwMkZBMDAwMDAyRkMwMDAwMDJGRTAwMDAwMzAwMDAwNUEKKzoxMDQ5NjAwMDAwMzAyMDAwMDAzMDQwMDAwMDMwNjAwMDAwMzA4MDAwNDcKKzoxMDQ5NzAwMDAwMzBBMDAwMDAzMEMwMDAwMDMwRTAwMDAwMzEwMDAwMzYKKzoxMDQ5ODAwMDAwMzEyMDAwMDAzMTQwMDAwMDMxNjAwMDAwMzE4MDAwMjMKKzoxMDQ5OTAwMDAwMzFBMDAwMDAzMUMwMDAwMDMxRTAwMDAwMzIwMDAwMTIKKzoxMDQ5QTAwMDAwMzIyMDAwMDAzMjQwMDAwMDMyNjAwMDAwMzI4MDAwRkYKKzoxMDQ5QjAwMDAwMzJBMDAwMDAzMkMwMDAwMDMyRTAwMDAwMzMwMDAwRUUKKzoxMDQ5QzAwMDAwMzMyMDAwMDAzMzQwMDAwMDMzNjAwMDAwMzM4MDAwREIKKzoxMDQ5RDAwMDAwMzNBMDAwMDAzM0MwMDAwMDMzRTAwMDAwMzQwMDAwQ0EKKzoxMDQ5RTAwMDAwMzQyMDAwMDAzNDQwMDAwMDM0NjAwMDAwMzQ4MDAwQjcKKzoxMDQ5RjAwMDAwMzRBMDAwMDAzNEMwMDAwMDM0RTAwMDAwMzUwMDAwQTYKKzoxMDRBMDAwMDAwMzUyMDAwMDAzNTQwMDAwMDM1NjAwMDAwMzU4MDAwOTIKKzoxMDRBMTAwMDAwMzVBMDAwMDAzNUMwMDAwMDM1RTAwMDAwMzYwMDAwODEKKzoxMDRBMjAwMDAwMzYyMDAwMDAzNjQwMDAwMDM2NjAwMDAwMzY4MDAwNkUKKzoxMDRBMzAwMDAwMzZBMDAwMDAzNkMwMDAwMDM2RTAwMDAwMzcwMDAwNUQKKzoxMDRBNDAwMDAwMzcyMDAwMDAzNzQwMDAwMDM3NjAwMDAwMzc4MDAwNEEKKzoxMDRBNTAwMDAwMzdBMDAwMDAzN0MwMDAwMDM3RTAwMDAwMzgwMDAwMzkKKzoxMDRBNjAwMDAwMzgyMDAwMDAzODQwMDAwMDM4NjAwMDAwMzg4MDAwMjYKKzoxMDRBNzAwMDAwMzhBMDAwMDAzOEMwMDAwMDM4RTAwMDAwMzkwMDAwMTUKKzoxMDRBODAwMDAwMzkyMDAwMDAzOTQwMDAwMDM5NjAwMDAwMzk4MDAwMDIKKzoxMDRBOTAwMDAwMzlBMDAwMDAzOUMwMDAwMDM5RTAwMDAwM0EwMDAwRjEKKzoxMDRBQTAwMDAwM0EyMDAwMDAzQTQwMDAwMDNBNjAwMDAwM0E4MDAwREUKKzoxMDRBQjAwMDAwM0FBMDAwMDAzQUMwMDAwMDNBRTAwMDAwM0IwMDAwQ0QKKzoxMDRBQzAwMDAwM0IyMDAwMDAzQjQwMDAwMDNCNjAwMDAwM0I4MDAwQkEKKzoxMDRBRDAwMDAwM0JBMDAwMDAzQkMwMDAwMDNCRTAwMDAwM0MwMDAwQTkKKzoxMDRBRTAwMDAwM0MyMDAwMDAzQzQwMDAwMDNDNjAwMDAwM0M4MDAwOTYKKzoxMDRBRjAwMDAwM0NBMDAwMDAzQ0MwMDAwMDNDRTAwMDAwM0QwMDAwODUKKzoxMDRCMDAwMDAwM0QyMDAwMDAzRDQwMDAwMDNENjAwMDAwM0Q4MDAwNzEKKzoxMDRCMTAwMDAwM0RBMDAwMDAzREMwMDAwMDNERTAwMDAwM0UwMDAwNjAKKzoxMDRCMjAwMDAwM0UyMDAwMDAzRTQwMDAwMDNFNjAwMDAwM0U4MDAwNEQKKzoxMDRCMzAwMDAwM0VBMDAwMDAzRUMwMDAwMDNFRTAwMDAwM0YwMDAwM0MKKzoxMDRCNDAwMDAwM0YyMDAwMDAzRjQwMDAwMDNGNjAwMDAwM0Y4MDAwMjkKKzoxMDRCNTAwMDAwM0ZBMDAwMDAzRkMwMDAwMDNGRTAwMDAwM0ZFMDAxMzgKKzoxMDRCNjAwMDAwMDAwMDAwMDAwMDAxRkYwMDAwMDIwMDAwMDA3RkY4Q0MKKzoxMDRCNzAwMDAwMDA3RkY4MDAwMDBDREYwMDAwMTUwMDAwMDAwMDAxQkQKKzoxMDRCODAwMDAwMDAwMDAxMDAwMDAwMDFGRkZGRkZGRkZGRkZGRkZGMkIKKzoxMDRCOTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMjUKKzoxMDRCQTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTUKKzoxMDRCQjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDUKKzoxMDRCQzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjUKKzoxMDRCRDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRTUKKzoxMDRCRTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRDUKKzoxMDRCRjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQzUKKzoxMDRDMDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjAwMDAwMDAwQjAKKzoxMDRDMTAwMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRkZGRkZGRkZGQTAKKzoxMDRDMjAwMDAwMDAwMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGOEMKKzoxMDRDMzAwMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAwN0MKKzoxMDRDNDAwMEZGRkZGRkZGMDAwMDAwMDMwMEJFQkMyMEZGRkZGRkZGQ0YKKzoxMDRDNTAwMDAwMDAwMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGNUMKKzoxMDRDNjAwMDAwMDAwMDAzMDBCRUJDMjBGRkZGRkZGRjAwMDAwMDAwQUIKKzoxMDRDNzAwMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAzMzkKKzoxMDRDODAwMDAwQkVCQzIwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGOTIKKzoxMDRDOTAwMDAwMDAwMDAwRkZGRkZGRkYwMDAwMDAwMzAwQkVCQzIwN0IKKzoxMDRDQTAwMEZGRkZGRkZGMDAwMDAwMDBGRkZGRkZGRjAwMDAwMDAwMEMKKzoxMDRDQjAwMEZGRkZGRkZGMDAwMDAwMDMwMEJFQkMyMEZGRkZGRkZGNUYKKzoxMDRDQzAwMDAwMDAwMDAwRkZGRkZGRkYwMDAwMDAwMEZGRkZGRkZGRUMKKzoxMDRDRDAwMDAwMDAwMDAzMDBCRUJDMjAwMDAwMjAwMDAwMDA0MEMwMTcKKzoxMDRDRTAwMDAwMDA2MTgwMDAwMDgyNDAwMDAwQTMwMDAwMDBDM0MwRkIKKzoxMDRDRjAwMDAwMDBFNDgwMDAwMTA1NDAwMDAxMjYwMDAwMDE0NkMwREMKKzoxMDREMDAwMDAwMDE2NzgwMDAwMTg4NDAwMDAxQTkwMDAwMDFDOUMwQkUKKzoxMDREMTAwMDAwMDFFQTgwMDAwMjBCNDAwMDAyMkMwMDAwMDI0Q0MwOUYKKzoxMDREMjAwMDAwMDI2RDgwMDAwMjhFNDAwMDAyQUYwMDAwMDJDRkMwODIKKzoxMDREMzAwMDAwMDJGMDgwMDAwMzExNDAwMDAzMzIwMDAwMDM1MkMwNjMKKzoxMDRENDAwMDAwMDM3MzgwMDAwMzk0NDAwMDAzQjUwMDAwMDNENUMwNDYKKzoxMDRENTAwMDAwMDNGNjgwMDAwNDE3NDAwMDA0MzgwMDAwMDQ1OEMwMjcKKzoxMDRENjAwMDAwMDQ3OTgwMDAwNDlBNDAwMDAwODAwMDAwMDEwMzgwNjQKKzoxMDRENzAwMDAwMDE4NzAwMDAwMjBBODAwMDAyOEUwMDAwMDMxMTgwRkIKKzoxMDREODAwMDAwMDM5NTAwMDAwNDE4ODAwMDA0OUMwMDAwMDUxRjgwQUIKKzoxMDREOTAwMDAwMDVBMzAwMDAwNjI2ODAwMDA2QUEwMDAwMDcyRDgwNUIKKzoxMDREQTAwMDAwMDdCMTAwMDAwODM0ODAwMDA4QjgwMDAwMDkzQjgwMEIKKzoxMDREQjAwMDAwMDlCRjAwMDAwQTQyODAwMDBBQzYwMDAwMEI0OTgwQkIKKzoxMDREQzAwMDAwMEJDRDAwMDAwQzUwODAwMDBDRDQwMDAwMEQ1NzgwNkIKKzoxMDRERDAwMDAwMEREQjAwMDAwMDdGRjgwMDAwN0ZGODAwMDAxOTJBQkEKKzoxMDRERTAwMDAwMDAzNTAwMDAwMDE5MDAwMDEwMDAwMDAwMDAwMDAwNjUKKzoxMDRERjAwMDAwMDAwMDAwRkZGRkZGRkY0MDAwMDAwMDQwMDAwMDAwMzcKKzoxMDRFMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwQTIKKzoxMDRFMTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwOTIKKzoxMDRFMjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwODIKKzoxMDRFMzAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNzIKKzoxMDRFNDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNjIKKzoxMDRFNTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNTIKKzoxMDRFNjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDIKKzoxMDRFNzAwMDQwMDAwMDAwNDAwMDAwMDAwMDAwN0ZGODAwMDA3RkY4QzQKKzoxMDRFODAwMDAwMDAwNUM3MDAwMDE1MDBGRkZGRkZGRkZGRkZGRkZGNDkKKzoxMDRFOTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMjIKKzoxMDRFQTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMTIKKzoxMDRFQjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGMDIKKzoxMDRFQzAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRjIKKzoxMDRFRDAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRTIKKzoxMDRFRTAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRDIKKzoxMDRFRjAwMEZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQzIKKzoxMDRGMDAwMEZGRkZGRkZGRkZGRkZGRkY0MDAwMDAwMDQwMDAwMDAwMjkKKzoxMDRGMTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwOTEKKzoxMDRGMjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwODEKKzoxMDRGMzAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNzEKKzoxMDRGNDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNjEKKzoxMDRGNTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNTEKKzoxMDRGNjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwNDEKKzoxMDRGNzAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMzEKKzoxMDRGODAwMDQwMDAwMDAwNDAwMDAwMDAwMDAwMTAwMDAwMDAyMDgwRjEKKzoxMDRGOTAwMDAwMDAzMTAwMDAwMDQxODAwMDAwNTIwMDAwMDA2MjgwRUIKKzoxMDRGQTAwMDAwMDA3MzAwMDAwMDgzODAwMDAwOTQwMDAwMDBBNDgwRDMKKzoxMDRGQjAwMDAwMDBCNTAwMDAwMEM1ODAwMDAwRDYwMDAwMDBFNjgwQkIKKzoxMDRGQzAwMDAwMDBGNzAwMDAwMTA3ODAwMDAxMTgwMDAwMDEyODgwQTAKKzoxMDRGRDAwMDAwMDEzOTAwMDAwMTQ5ODAwMDAxNUEwMDAwMDE2QTgwODcKKzoxMDRGRTAwMDAwMDE3QjAwMDAwMThCODAwMDAxOUMwMDAwMDFBQzgwNkYKKzoxMDRGRjAwMDAwMDFCRDAwMDAwMUNEODAwMDAxREUwMDAwMDFFRTgwNTcKKzoxMDUwMDAwMDAwMDFGRjAwMDAwMDdGRjgwMDAwN0ZGODAwMDAxMTJFNzMKKzoxMDUwMTAwMDAwMDAzNTAwMTAwMDAwMDAwMDAwMjhBRDAwMDAwMDAwNzYKKzoxMDUwMjAwMDAwMDEwMDAxMDAwRDAyMDVDQ0NDQ0NDNUZGRkZGRkZGNDUKKzoxMDUwMzAwMEZGRkZGRkZGNzA1ODEwM0MwMDAwMDAwMDAwMDAwMDAwNjAKKzoxMDUwNDAwMDAwMDAwMDAxQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxRjkKKzoxMDUwNTAwMENDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQkEKKzoxMDUwNjAwMENDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxQUEKKzoxMDUwNzAwMENDQ0NDQ0NDQ0NDQzAyMDFDQ0NDQ0NDQ0NDQ0MwMjAxOUEKKzoxMDUwODAwMENDQ0NDQ0NDMDAwMDAwMDBGRkZGRkZGRjQwMDAwMDAwQjQKKzoxMDUwOTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMTAKKzoxMDUwQTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwMDAKKzoxMDUwQjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwRjAKKzoxMDUwQzAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwRTAKKzoxMDUwRDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwRDAKKzoxMDUwRTAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwQzAKKzoxMDUwRjAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDQwMDAwMDAwQjAKKzoxMDUxMDAwMDQwMDAwMDAwNDAwMDAwMDA0MDAwMDAwMDAwMjYyNUEwRjQKKzoxMDUxMTAwMDAwMDAwMDAwMDAyNjI1QTAwMDAwMDAwMDAwMjYyNUEwQjkKKzoxMDUxMjAwMDAwMDAwMDAwMDAyNjI1QTAwMDAwMDAwMDAwMEUwMjMyNTIKKzoxMDUxMzAwMDAxMTYwMEQ2MDAxMDAwMDAwMDAwMDAwMDAwMjYyNUEwODcKKzoxMDUxNDAwMDAwMDAwMDAwMDAyNjI1QTAwMDAwMDAwMDAwMjYyNUEwODkKKzoxMDUxNTAwMDAwMDAwMDAwMDAyNjI1QTAwMDAwMDAwMDAwNzIwMjM2QkEKKzoxMDUxNjAwMDAxMjMwMEYzMDAxMDAwMDAwMDAwMDAwMDAwMDBGRkZGMUEKKzoxMDUxNzAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMzMKKzoxMDUxODAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMjMKKzoxMDUxOTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMTMKKzoxMDUxQTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDMKKzoxMDUxQjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGRjMKKzoxMDUxQzAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGRTMKKzoxMDUxRDAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGRDMKKzoxMDUxRTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGQzMKKzoxMDUxRjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGQjMKKzoxMDUyMDAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGQTIKKzoxMDUyMTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGOTIKKzoxMDUyMjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGODIKKzoxMDUyMzAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNzIKKzoxMDUyNDAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNjIKKzoxMDUyNTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNTIKKzoxMDUyNjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNDIKKzoxMDUyNzAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMzIKKzoxMDUyODAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMjIKKzoxMDUyOTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMTIKKzoxMDUyQTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGMDIKKzoxMDUyQjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGRjIKKzoxMDUyQzAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGRTIKKzoxMDUyRDAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGRDIKKzoxMDUyRTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGQzIKKzoxMDUyRjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGQjIKKzoxMDUzMDAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGQTEKKzoxMDUzMTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGOTEKKzoxMDUzMjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGODEKKzoxMDUzMzAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNzEKKzoxMDUzNDAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNjEKKzoxMDUzNTAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMDAwMDBGRkZGNTEKKzoxMDUzNjAwMDAwMDAwMDAwMDAwMEZGRkYwMDAwMDAwMEZGRkZGRkYzNEYKKzoxMDUzNzAwMDMxOEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwQTQKKzoxMDUzODAwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxRkYKKzoxMDUzOTAwMDMwRUZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwMjUKKzoxMDUzQTAwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2RDkKKzoxMDUzQjAwMDMwNUZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwOTUKKzoxMDUzQzAwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2QjMKKzoxMDUzRDAwMDFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0MUIKKzoxMDUzRTAwMEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyOUEKKzoxMDUzRjAwMDMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNjUKKzoxMDU0MDAwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBNkQKKzoxMDU0MTAwMDMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNjQKKzoxMDU0MjAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREZGRkZGRkY3NDgKKzoxMDU0MzAwMDMxRUZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwODMKKzoxMDU0NDAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MUEKKzoxMDU0NTAwMDMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwMjQKKzoxMDU0NjAwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzREMKKzoxMDU0NzAwMDMxOEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwQTMKKzoxMDU0ODAwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxRkUKKzoxMDU0OTAwMDMxMEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwMDMKKzoxMDU0QTAwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2RDgKKzoxMDU0QjAwMDMwNUZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwOTQKKzoxMDU0QzAwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2QjIKKzoxMDU0RDAwMDFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0MUEKKzoxMDU0RTAwMEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyOTkKKzoxMDU0RjAwMDMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNjQKKzoxMDU1MDAwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBNkMKKzoxMDU1MTAwMDMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNjMKKzoxMDU1MjAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREZGRkZGRkY3NDcKKzoxMDU1MzAwMDMwRUZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwODMKKzoxMDU1NDAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MTkKKzoxMDU1NTAwMDMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwMDMKKzoxMDU1NjAwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzREIKKzoxMDU1NzAwMDMxRUZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNDIKKzoxMDU1ODAwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxRkQKKzoxMDU1OTAwMDMxMEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwMDIKKzoxMDU1QTAwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2RDcKKzoxMDU1QjAwMDMwNUZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwOTMKKzoxMDU1QzAwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2QjEKKzoxMDU1RDAwMDFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0MTkKKzoxMDU1RTAwMEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyOTgKKzoxMDU1RjAwMDMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNjMKKzoxMDU2MDAwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBNkIKKzoxMDU2MTAwMDMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNjIKKzoxMDU2MjAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREZGRkZGRjk3QTYKKzoxMDU2MzAwMDA1NkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwNjAKKzoxMDU2NDAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MTgKKzoxMDU2NTAwMDMxMEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNDEKKzoxMDU2NjAwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzREEKKzoxMDU2NzAwMDMyMEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwMjAKKzoxMDU2ODAwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxRkMKKzoxMDU2OTAwMDMxMEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwMDEKKzoxMDU2QTAwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2RDYKKzoxMDU2QjAwMDMwNUZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwOTIKKzoxMDU2QzAwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDREZGRkZGNDA2QjAKKzoxMDU2RDAwMDFDQkZGRkZGMEMzMEMzMDVDMzBDMzBDM0NGMzAwMDE0MTgKKzoxMDU2RTAwMEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyOTcKKzoxMDU2RjAwMDMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNjIKKzoxMDU3MDAwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREZGRkZGRjhBREEKKzoxMDU3MTAwMDA0MkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwQzAKKzoxMDU3MjAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREZGRkZGRjk3QTUKKzoxMDU3MzAwMDA1Q0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NDMDAwRkYKKzoxMDU3NDAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREZGRkZGRkY1MTcKKzoxMDU3NTAwMDMxMEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNDAKKzoxMDU3NjAwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDREZGRkZGRkYzRDkKKzoxMDU3NzAwMDMxNkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwQzAKKzoxMDU3ODAwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDREZGRkZGRkYxRkIKKzoxMDU3OTAwMDMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRTEKKzoxMDU3QTAwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDREZGRkZGRkY2RDUKKzoxMDU3QjAwMDMwNUZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwOTEKKzoxMDU3QzAwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDREZGRkZGRkY2QjQKKzoxMDU3RDAwMDMwQkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzE0RkQKKzoxMDU3RTAwMEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREZGRkZGRkYyOTYKKzoxMDU3RjAwMDMwNEZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNjEKKzoxMDU4MDAwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREZGRkZGRkZBNjkKKzoxMDU4MTAwMDMwMkZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwNjAKKzoxMDU4MjAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREZGRkZGRkY3NDQKKzoxMDU4MzAwMDMxQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwOUYKKzoxMDU4NDAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREZGRkZGRkYwMUIKKzoxMDU4NTAwMDMwN0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGMzAwRDAKKzoxMDU4NjAwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGQ0MKKzoxMDU4NzAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDOTQKKzoxMDU4ODAwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGRUMKKzoxMDU4OTAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDNzQKKzoxMDU4QTAwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGQ0IKKzoxMDU4QjAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDNTQKKzoxMDU4QzAwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGQUEKKzoxMDU4RDAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDMzQKKzoxMDU4RTAwMEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGODgKKzoxMDU4RjAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDMTQKKzoxMDU5MDAwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGNjMKKzoxMDU5MTAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjMKKzoxMDU5MjAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGM0IKKzoxMDU5MzAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRDMKKzoxMDU5NDAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMEIKKzoxMDU5NTAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDQjMKKzoxMDU5NjAwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGQ0IKKzoxMDU5NzAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDOTMKKzoxMDU5ODAwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGRUIKKzoxMDU5OTAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDNzMKKzoxMDU5QTAwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGQ0EKKzoxMDU5QjAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDNTMKKzoxMDU5QzAwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGQTkKKzoxMDU5RDAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDMzMKKzoxMDU5RTAwMEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGODcKKzoxMDU5RjAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDMTMKKzoxMDVBMDAwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGNjIKKzoxMDVBMTAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjIKKzoxMDVBMjAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGM0EKKzoxMDVBMzAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRDIKKzoxMDVBNDAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMEEKKzoxMDVBNTAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDQjIKKzoxMDVBNjAwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDREZGRkZGRkZGQ0EKKzoxMDVBNzAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDOTIKKzoxMDVBODAwMEYzQ0YzQ0YzMDAwMENGM0NDRENEQ0RDREZGRkZGRkZGRUEKKzoxMDVBOTAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDNzIKKzoxMDVBQTAwMEYzQ0YzQ0YzMDAwMUNGM0NDRENEQ0RDREZGRkZGRkZGQzkKKzoxMDVBQjAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDNTIKKzoxMDVBQzAwMEYzQ0YzQ0YzMDAwMkNGM0NDRENEQ0RDREZGRkZGRkZGQTgKKzoxMDVBRDAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDMzIKKzoxMDVBRTAwMEYzQ0YzQ0YzMDAwNENGM0NDRENEQ0RDREZGRkZGRkZGODYKKzoxMDVBRjAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDMTIKKzoxMDVCMDAwMEYzQ0YzQ0YzMDAwOENGM0NDRENEQ0RDREZGRkZGRkZGNjEKKzoxMDVCMTAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRjEKKzoxMDVCMjAwMEYzQ0YzQ0YzMDAxMENGM0NDRENEQ0RDREZGRkZGRkZGMzkKKzoxMDVCMzAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDRDEKKzoxMDVCNDAwMEYzQ0YzQ0YzMDAyMENGM0NDRENEQ0RDREZGRkZGRkZGMDkKKzoxMDVCNTAwMDMwQ0ZGRkZGMEMzMEMzMENDMzBDMzBDM0NGM0NGM0NDQjEKKzoxMDVCNjAwMEYzQ0YzQ0YzMDA0MENGM0NDRENEQ0RDRDAwMEMwMDAwQjkKKzoxMDVCNzAwMDAwMDcwMEMwMDAwMjgxMzAwMDBCODE1ODAwMDIwMjEwQjMKKzoxMDVCODAwMDAwMDEwMjMwMDAwRjAyNDAwMDAxMDMzMDAwMEMwMDAwNTEKKzoxMDVCOTAwMDAwMDgwMEMwMDAwMjgxNDAwMDBCODE2ODAwMDIwMjIwNjIKKzoxMDVCQTAwMDAwMDEwMjQwMDAwNzAyNTAwMDAyMDJDMDAwMEYwMDAwODYKKzoxMDVCQjAwMDAwMDgwMEYwMDAwMjgxNzAwMDBCODE5ODAwMDIwMjUwODIKKzoxMDVCQzAwMDAwMDEwMjcwMDAwQjgyODAwMDA4MDMzODAwMTAwMDAwMDIKKzoxMDVCRDAwMDAwMDgwMTAwMDAwMjgxODAwMDBCODFBODAwMDIwMjYwMjEKKzoxMDVCRTAwMDAwMDE4MjgwMDAwRTgyOTgwMDA4MDM4MDAwMEIwMDAwRjQKKzoxMDVCRjAwMDAwMDEwMEIwMDAwMjgwQzAwMDA1ODBFODAwMDIwMTQwMDIKKzoxMDVDMDAwMDAwMDEwMTYwMDAwRTAxNzAwMDAzODI1MENDQ0NDQ0NDQUUKKzoxMDVDMTAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQzAwMDAyMDAwRDQKKzoxMDVDMjAwMENDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQjQKKzoxMDVDMzAwMDAwMDAyMDAwQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQjQKKzoxMDVDNDAwMENDQ0NDQ0NDMDQwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAKKzoxMDVDNTAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRkI1MUNGQzBGMDAzQjkKKzoxMDVDNjAwMDhBNTkwNTE5MThBQzg0MTE3QzdBNjA3RTRFQ0FGNDNCQkYKKzoxMDVDNzAwMEYyMzIzMDM4MDNCMTJCMTAzNzAwRjE2MTZFMDY4NjIzMDMKKzoxMDVDODAwMERDQzRFQjNGMjk4RjYwN0JDQjMyMzA5NDAzRjE3NjY5MjMKKzoxMDVDOTAwMDA2MDYxMzM5ODRCOEFFMDIwM0MzM0MyMDNGMDEyQUY2M0UKKzoxMDVDQTAwMDE0NDg2N0NCNTNFNkVFQzE4MjE1NTQzMUM1NjQ5NTExOTMKKzoxMDVDQjAwMDZDNDUyQ0YyQzg1ODA5NERCRTQ2MTk5NUFGNEM0MEZGQjMKKzoxMDVDQzAwMDQwRTM3ODFENTQ3RThGMTY4NDdFQUQwREExMTNEMEU0ODEKKzoxMDVDRDAwMDdCQTFGMjhFNTA3RjI1RUE2MDM3RDc4OTQ4N0ZBN0IyMzMKKzoxMDVDRTAwMEEwQjkwNzhEREZDQTg4Q0EzN0UzNDBFNTI3NDFENTAzNEQKKzoxMDVDRjAwMDAwMDc0OTMwMEFDODAzMDAwMDAwMDAwMDAwMDAwMDAwNEYKKzoxMDVEMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRUQ3RDBENzg1NEQ1QkUKKzoxMDVEMTAwMEI1RTgzRTczQ0U5Qzk5NDlDRTRDMjZCRjRDMjBDMDQ5NzUKKzoxMDVEMjAwMDA4MjE2OEE0QzcwMDY5QjA1ODRGMjA2MEE4RDQwRTE0OTkKKzoxMDVEMzAwMDY5QUM4QTAzMjI0NDA4MjQ1MkVCQzNBQkZEMzI4MTAwRDQKKzoxMDVENDAwMDAxMDIwNEIxMzQxNEE0NDMwMEE1QjdCNDM3NTJCNEQ0NEIKKzoxMDVENTAwMDUyM0FFMEE3QzVENkY3QkRFMEIzNTZBRkI2NkZCNDE0NUMKKzoxMDVENjAwMDdGOEExMkYzQUVENkJFNkJFQkRCNkJFREJEOTM3MzRFNDkKKzoxMDVENzAwMDY2NDgxMEJERUQ3REVGQzZDRkVGQjBDRkQ5M0Y2QkFGMUEKKzoxMDVEODAwMEJGQkRENkRBNkJFRjcxQkJGQzI0NkYzNDIxMUZDM0RGQkMKKzoxMDVEOTAwMDc1ODRGQzJGOEQxMDkyREJGRjc0N0I0OTM0RkQ3Mzg0NzYKKzoxMDVEQTAwMDY0RTY5OEQxNDQxOTIxQzM3MkNDMzg5OTQ0REYwNzU1NzEKKzoxMDVEQjAwMEREMjNGNUI3MTNDRjkzOTkzMzQzNTBBRjI1RDcwQzExOUIKKzoxMDVEQzAwMERBNDc0QkU2N0MxMjgxQkUyMjc1ODRFNDExQTI3ODA5ODEKKzoxMDVERDAwMEZFODlGQUVFRTA1QzJGMjlDMzU3N0ZGQjU4N0M5NzA5QjgKKzoxMDVERTAwMDU5MTcyQ0NBODA3NkNFRkUwOTg5MTEzMkQ5NUE3NjExRkMKKzoxMDVERjAwMDIyRkFBNEVEQkMwMDZGMDY4NTU3QTcyRjI4OUM2OTkzNTMKKzoxMDVFMDAwMDVDQjFFQjBCMjlEQzdBMENFMTRFMkZBMDcwRDNGMkM5MDgKKzoxMDVFMTAwMDkxQ0Y3OEM3RDBGMkE2NkI1RDg2MDc1QkRGNEQ0ODA1NTIKKzoxMDVFMjAwMDIxQUJBMDJGREE3NkQzNTU3MUZFNUQzMUEwM0M0MzNFMDUKKzoxMDVFMzAwMERDQUM0MjdCOUQxODFFNUFGNjVGRDUxODU3QjE5REE5NjAKKzoxMDVFNDAwMEU1RDM3NjQxQzJEQTA1NEI5N0NDMjYxMzA4QzkzMEQ1ODUKKzoxMDVFNTAwMDdFQjg1ODNEOUM3RjNBQUZFN0QxRTlGN0QyRkVFRkU5MzMKKzoxMDVFNjAwMEE0RUQzRDM5MDBBNTA0MDlGQjY5RkY5NThFRUZBNTMzMkMKKzoxMDVFNzAwMERGODA3RUQzODlBNTVGM0E4RkVERjA4RjdDNDJCRTQwRjQKKzoxMDVFODAwMEZDMzlFN0EwRjNDRjkzQ0YwMzFFNDg3NTE2MjE1MzA2QzQKKzoxMDVFOTAwMEUyQUYxRjZGNTFBNDJGMjE3NTM2QjgwNDFEMzQxODYzNkIKKzoxMDVFQTAwMDBDMjFEN0I3MjY1RTcyRTU1MDc4NEMxNzAxM0NDRDk0OTMKKzoxMDVFQjAwMDM1REYxODVBREU3NjVBNDYzQzZDQUJFREYxMDYzNTlDNjAKKzoxMDVFQzAwMERGRUM3Q0RBNkUzNEVGNjc3NDI1QzUwMzlEQ0Y5RTI2MjgKKzoxMDVFRDAwMDVBRjYwQ0M0NkZDMUE0NkUxM0Y4QzMzRkE5NUIyMkI0NzkKKzoxMDVFRTAwMEJGMDI4MzkwNkMzQTlGNjAyMzJEMTdEMTc2MjQ3RTY2ODMKKzoxMDVFRjAwMDBDRTUyRkYyMDA5QjZGOTRGRUY3NzE1MTNGMUUzMzE5OTIKKzoxMDVGMDAwMDBBODhFNkMwNzMyNkUwOTFFMkE5RTAxRUM3RkI0QTg2MzQKKzoxMDVGMTAwMEJGNEM2MkMxNkIyMTcyMTNFMkU5MEVDMERGOTVDOEYzN0EKKzoxMDVGMjAwMDYzMTE3RkQxMkNDNEVCNTBGMTI3RTAxMUY4MEI3MjNFQzYKKzoxMDVGMzAwMEJFQkUyNjUxQUIwMERGNENBNUY4MDM3QzUxM0NBNkQzNzYKKzoxMDVGNDAwMEY5RjZCRUU0ODlDOTg1RDA4REQ5MUQwMjdDOEJGOTU0NDAKKzoxMDVGNTAwMDMyRkVEOUMyRTFEQTA4RjgxQjg3OUY1Q0FFMTAyMUJFODEKKzoxMDVGNjAwMEIyMkU5M0M5NEI1QzgyNzI3QTE5OUQwMUVEQ0Y2NzMyRDQKKzoxMDVGNzAwMEZDQ0Q5MDM1MDlDNkRCNUNDQUY4OTQwRTIwQjkyQTA3MUYKKzoxMDVGODAwMEMyNDVGRkIwRkQ2NjBBOEY2NjgxNjdCM0I3Q0IyQkQxRTAKKzoxMDVGOTAwMEYyNzYwQTZGMTRGMDRGOEUwNDgxMUZDNUJDM0RCQUNCNTgKKzoxMDVGQTAwMDg2NTcyNTk0RTZFMDczMDZBNzgwNkZCQkM5RTREODAyNDQKKzoxMDVGQjAwMDA3QkUyN0RENURBRDEyODVGMzgzMTkyRUIyNDkxQUJDRTkKKzoxMDVGQzAwMERGNkQ3REZERDhGQjc3RjYzQjI4N0M4OUEwQUY5OENFQUUKKzoxMDVGRDAwMEVGODM2NzY1NjMxM0M1Q0Y2NkJEQUJENTQ1RTFEODU2ODIKKzoxMDVGRTAwMENERTYzQjkwQ0U5NzM5NUU0RjhGQjc3ODkyNjUzQzgzNzQKKzoxMDVGRjAwMEM5Q0JBNzNFMEVDOUI0Q0ZBQjMyRTgwQjk2NURGRTM4RDUKKzoxMDYwMDAwMDI0Qjg3MDM0RDAzRjE1M0QzRTM1Rjg3NTBBQkYwNTRGQjIKKzoxMDYwMTAwMEJFRTJBMDA0RkRGQkFFN0FEMDRCNTBFRThGNzgwMTBFQUQKKzoxMDYwMjAwMEU3MzgwM0UwNzU4Q0VCMUM0NzI5OEQ5QTBBOTZFQ0ZBNDkKKzoxMDYwMzAwMEM4MTM4QzExNjJEMTJGNTg0Nzg3MjdEM0NCRTk4NjVEQ0YKKzoxMDYwNDAwMDlGRjg0QUVERkFEOUE5Q0YxNUQwMzcwMTY4NkZEN0Q3OTUKKzoxMDYwNTAwMDNENDJDRjA4M0QzRDY5ODg3QUM2QUM0Mzc4OEI0OERGMjYKKzoxMDYwNjAwMDFGQ0FGMzE4MkVDRkQzMEYyNTNBQkMxNDdGQzU3Qjg0RUIKKzoxMDYwNzAwMDlFN0VFMDU3QTU5NDFGMEU4MjlFQTZFNTgzMUQwNEQ3NDEKKzoxMDYwODAwMEMzODM0NzQ5OENDOTM1RDNENzEzNzg2NzEzQjhERUY5NzIKKzoxMDYwOTAwMDQxOUZCRUIxRTNFN0NBNzY3MzFBRTg5RDMyNjJCQTdDQ0IKKzoxMDYwQTAwMEI0OUYzMTg3ODkxMUE3RUYwRjkzRjhEQ0YxQTBDNzhFNTkKKzoxMDYwQjAwMEIxRjk3QkU5N0Y1NjNEN0QwNUM3RTM5NTg3MUI1RDQwQzAKKzoxMDYwQzAwMENGMzE3QkVDNzhCQzgyRTNCN0VDQThFMzNEQzdERjE1QUEKKzoxMDYwRDAwMDBFRkM2RDgzN0Y1MDdDRTU0QjFDOEY2MzQ5MDlFMjcxOTgKKzoxMDYwRTAwMEVBMTBENzNCOEU0N0E3QkVFRUMzRTMxRUFBQUYyOURFNTgKKzoxMDYwRjAwMEIyODMwQzhGMkQ2RDJFMDJGQUExMzdFNjQyRkQ1ODVBNUQKKzoxMDYxMDAwMEQ4RTg0MkZEQzlGNUY2NzgzRUJGRjE3Q0JEM0JDMEYxNTEKKzoxMDYxMTAwMDI3RTAyQzlFNkQ1NDAxREVDNjEyRTMyNEU4RTVDQzc2MjAKKzoxMDYxMjAwMDhBMzcwMjdBQkFBMDBBQ0EzQjFFMjI0ODlGQjEwRkU5RjkKKzoxMDYxMzAwMDJFQUVERjEwOUU0Q0JFRkVFRUE4MkU3RjE2RTRBMkY3MTgKKzoxMDYxNDAwMDIxQzU5MEU5MzgwNzg5QjFDNjJCRjVFMzM3OUI4RjlGQUUKKzoxMDYxNTAwMENERjFGODY1NDNCNkYxQTE5MzhFRDkxQ0FGNEVGQzk0RjYKKzoxMDYxNjAwMDFFQjBFMzdGQUM4MzRFNjNEQUVERTU2QzA3NUQ2RTkwQTUKKzoxMDYxNzAwMDFDRjZDNzEwRTlFMTUxNDhENDkzMDVFNTE4REE3NTVFQkQKKzoxMDYxODAwMDhBRkI1QzVBOTY3RkZDOTQwOTc4RDYzQUQ4QkJDQzM2MDkKKzoxMDYxOTAwMDU3QUM5MDhFRTM2RjYxNjVBNTREODk1NTUxM0NEQzA2ODcKKzoxMDYxQTAwMDg2MTcyRDhGNkIyNTMxQjA0N0U1NkE5MzI0MjgxRUM3Q0IKKzoxMDYxQjAwMDA1RTM0NEE2NzhDQkFFMjY4ODM3RTJCMDJGMDVGRDhBRUEKKzoxMDYxQzAwMDM5MTMxNDczRkVDRkY4NzJCOTBGRThCNTIzNDhGMTBFRjYKKzoxMDYxRDAwMEVCRTI2Qzg1QjczNzdDRTFBQkZBRjFFRUQ0MEY1RkFCNDUKKzoxMDYxRTAwMEI1RTNGREE2NzBCQTBENUZCM0Y0NkM1Qjc5RTJFOUUxNEIKKzoxMDYxRjAwMDE3QTU5M0QwMUY4MjhGMDRERTA2RDBBMUQ1NUVGNjU3NzcKKzoxMDYyMDAwMERCQ0I0RUZEMTM5NTFDRkE2Nzg4NzQ1MjRGOTE1MjkwNjgKKzoxMDYyMTAwMDhCNzFBRTM0QTNCMzcwNjBCREVEOTI4QkRCNDNERUQ4REYKKzoxMDYyMjAwMDU5M0FERTQyMjI5MTBDREFGRjBBOTIxODA1RjgzRUE2OEUKKzoxMDYyMzAwMEU5Rjg3REE1MkI5MTA3RTUwQkE0NjdFN0M4MzFGREZEQzMKKzoxMDYyNDAwMDhGNTJDODMxODlEQUVEMTI0NUVGNkEwQUQyNzAyRjg5NzAKKzoxMDYyNTAwMEE3QTMzRDRDQzJERTNDNDQwMUUyNDVBMkZGREY4QUZDMUQKKzoxMDYyNjAwMEEyQjgwMDVGMjM4MkVDM0Q4OTY2Mjg1MDBFMTFGMUE3ODkKKzoxMDYyNzAwMDIzOUQzQ0ZDOUZGOUFCOUZGOThCNDRFOTJCRjFBNzBDQzQKKzoxMDYyODAwMDc0QTRFM0JCNDkwNEY5QzE0QkRBQjE5QzQ2QkFGMEE5NDYKKzoxMDYyOTAwMDkxNkU3QzA2QThDNjg2Njc5MDA0MjU3ODY2MTEwMzlGRDgKKzoxMDYyQTAwMEU0OEFEODYzNzE5NEMzMDc4MkM4RjdCRTNGOTA4RkQzNDYKKzoxMDYyQjAwMEZCRTdCMzhFRDM2RDM4MDlGRjQ4Q0EwNTNBQzQ4OTU3NDYKKzoxMDYyQzAwMEVFRTc0MzNGRTc0MzZBQUZBMTVFRDY0QTE5RkY2QTkzMDAKKzoxMDYyRDAwMEU4QkE1QTg2RjI4RjdFMTdGOTg4RTJCNzAyQzY2NUY1RUEKKzoxMDYyRTAwMDA1QkVCNzcyQkI3QTRCOTMxN0Y1Q0RFNkE2MjAzRUQ1MTcKKzoxMDYyRjAwMEE5OEQ2MTAwMkZCMzNBRDE3MTA3QTU1Nzg2QUUxQUQ3ODEKKzoxMDYzMDAwMEQzRjkwRkFCRUU4OTgzOUNGODVCOTlERjk2NjYzMEZDN0UKKzoxMDYzMTAwMDlFRENGOEM0NEI4QkU4RkJCNjQyOERGOTQxMkRDQzlFMzgKKzoxMDYzMjAwMENERTA1ODZDOUI5Qzg4QURBNUYwNkQyREY0MUE1NkZGRkUKKzoxMDYzMzAwMDQwRThBN0FERDcyNjBFRURBN0RGM0I3NURBMjNGREVCQ0UKKzoxMDYzNDAwMEFDM0U5MjU4MDM3MjUzQTA4MjI2MjI5QjI3RkM5MzBFRTgKKzoxMDYzNTAwMDdBMkRBREI4QTdDOUFBNzdCNDBGNjVBNkJDMEFBMjUxMTkKKzoxMDYzNjAwMEUwMkIzQUJGMjgyQ0VGNEVCRTZBMkJCRjAyRjU2MkRCNTIKKzoxMDYzNzAwMEE5Njc4OTRFMkIxNEQ1QzQ0REMwOTc3RjJBMzU2NUU5OEUKKzoxMDYzODAwMDNDRkMzNUJBMkJBQTgxNTQ0NjVFMDUzQzY3QjQwNjI1MTEKKzoxMDYzOTAwMDkzRTIyRkFCNUE5RjA2MzJBQTExOURFOTZCQTUzQjA0RUQKKzoxMDYzQTAwMEYyM0JBMEZGOTFGMUQwMURCNEJGRThCNUFBNzExMEQ5OUUKKzoxMDYzQjAwMDRBNzdDREY3QTc5Njg3MkQxQkVGRkRCQTk5QzRBRTBBOTEKKzoxMDYzQzAwMEJBMjRBNEZCQTk2QkYzRjJDMUZGRjU5MTYwN0VGQTI0MTUKKzoxMDYzRDAwMDkwMkY5NTFDODQ3NUVCREEyNUEzMjM0OURBRjVDQjU5NjgKKzoxMDYzRTAwMDVDRDgzNTQ5OUZBOURBQTVDQkE0QjFDQkQyNkY4OThCRjQKKzoxMDYzRjAwMEM5QTFDQkU1QzU2NzY2MTlFM0EzQTI1MkVFMTdCNzEyOTAKKzoxMDY0MDAwMDMzOTYwNDBFOTNDM0FGMjk3MUMyRkMzOURERjU1OUUyMEUKKzoxMDY0MTAwMEVCNkRBRTJGQjY0OEE0QjYyQkM5Rjc0RTBFQ0YwQzc5NTQKKzoxMDY0MjAwMDhGMDlFQjZGQzY0NkI2NEVGQTI4QTg1RDE0QkUyMjg1Q0EKKzoxMDY0MzAwMDNFMkRFRDY2RjFGQTg3RjhGMzEyRjQ1MERFNDMyMDMwN0EKKzoxMDY0NDAwMDM5NDNEMzgzM0VDN0I4RTI1OUZFMDlDNkRENDZDNzk1MzYKKzoxMDY0NTAwMDVENDE1Q0Y3MDRERTlERjQxNDRGOTdDQjg3RjUzRUI4QTEKKzoxMDY0NjAwMEY2QzUxMDE4ODFBOUUwRDQ0MTQ2ODdEMTY3MDE3Rjg2MUYKKzoxMDY0NzAwMDUwRDcxM0JEOTQzRDlERTM1RDZBN0Y1Rjc0QjE3OTM4NTkKKzoxMDY0ODAwMEZCMjUwNzk4NUQ5NUMxRDdBRjkzNTM0QTlBRDFFRjlERUQKKzoxMDY0OTAwMDJERkM1MEJCREUwMDdGMThGNDUxRTcwMUJBRjAxNzgyRTMKKzoxMDY0QTAwMERFNjBFNUNEMzE4Mjc2NTY2RjE5NjVFNDIyODgyNzc0NjcKKzoxMDY0QjAwMEEzQkUyRDIwMTE5NDYzRkEwOUNCQUQ1Q0ZGQUQwN0ZEOUYKKzoxMDY0QzAwMDQ3OUZFRjkzRjAyREFFQzlBMDQ3NjJBNzE0NUE2OUY2MTMKKzoxMDY0RDAwMEE0QkJBNzI1OEIxRkREMDlGMjMxRjlEMkQ2QTkyRkQyOTMKKzoxMDY0RTAwMEU3NDI2Rjc4MjlGNEFGMTk2NzRDNTA1Qjk5RjMyNDk0MTUKKzoxMDY0RjAwMDI3QTc1QzUxRjYwQ0NEQjVDODBEOTEwNTVGMzA3OTZBQzAKKzoxMDY1MDAwMEUxRkMwRTcyMzM4Nzk2NkI4QTkzQzNEOUI5QjEyMjNGRUYKKzoxMDY1MTAwMDgyRkRFOUMzRDFFRTUwRjRFMUQ2N0UzQkJGQ0NFNDZBMDQKKzoxMDY1MjAwMDg3NDM3RTNBQjhGQ0FGMDE3RUJDQjQ3OUU2RDVEMDY3MkMKKzoxMDY1MzAwMEQwODg5OUEwMkVFNzQ3MUI5RjA2QkFDRDkzMjIxQjVDRkIKKzoxMDY1NDAwMEI0REVCQzdCQzI2RTkwM0ZFRDQwMzc1RDIzRjFGRDI2OEIKKzoxMDY1NTAwMEMwNDc4RERFMEU5NDIzOUFEOTFEODVFN0U2QjI0NUE4ODMKKzoxMDY1NjAwMDlGN0I0MzZDRUFBOUY4MkFDRDc0RDlGRDI3QTczRjM4NTEKKzoxMDY1NzAwMDQ0NzkxQzZGNDRBNzAxQkM3QUVEN0IyNzczNzVBMDUzNDcKKzoxMDY1ODAwMEU0NjE4MDZCNjRGODY0MTVBMDVERDNDRjk4NTkxNjdBRTYKKzoxMDY1OTAwMDY1OTczMjdEQjg4MkYzNzFFNjZDNEEzN0QwNzc4QTE5RjUKKzoxMDY1QTAwMDlBRTM4NzY4OEVCOTFGRTYzQkQ0RjE1M0YxM0REODlEM0QKKzoxMDY1QjAwMDgwQUY2Q0NFRTcyRDA2RTM3MzIxMDcxOTVDMEU1QUUwMUQKKzoxMDY1QzAwMDNCRTA2QjEyRTNGQjk2NjA3OTMwRDkzQUIxODdBRkYzQzkKKzoxMDY1RDAwMERGRTM3QzVGNDA5MkVCQTE5M0FFNEJCN0MzQzZEMzY3QkEKKzoxMDY1RTAwMDA5NURDMTAwOUVGNzQ5RTQ2OTk4N0YxNjk3QjNDQ0VBMkMKKzoxMDY1RjAwMDk4MEJFMDExRjIzNERCMzg1MzlEOUQwMzc2OEE1RTBFRDIKKzoxMDY2MDAwMDc2QjExOEY3MURDRTZGMEJCREU2QUZBMTdENEQ3MUIzMEUKKzoxMDY2MTAwMDkyNDVFNzM1QUU4QzE4QTA1RTY3MTU2NzRBNTYzRUZGNzcKKzoxMDY2MjAwMDZENUZGREYwRjM1MDVGMkJFQjQ2QkY3Q0IwNzZERDdDRjkKKzoxMDY2MzAwMDdFRjNBNEYwQ0JDODdGMEZCNDJCNUVBNDdCRjgxNUVDREYKKzoxMDY2NDAwMEU3ODE2RUUyQjVFODlCMjI4RTY3NzlFM0E5MkFBMDQzMzEKKzoxMDY2NTAwMDZGMjMwOTAyNUZDRUQ3MUI5Rjk2ODBCRjQzRTE3NTJFNDMKKzoxMDY2NjAwMENCM0M2NkU5NzYzQjlFRjJGOTlCRDBFRkM4NDYzQjdGNzgKKzoxMDY2NzAwMEQ2OTA3Njg1NUNDMkJBMzE0QThBRjQwMEJDQjMxRkU4NzIKKzoxMDY2ODAwMDQ2NzgzM0FCOTkzRjRDRTFFRTQ1QkRGMkU5QzNGREYxRUQKKzoxMDY2OTAwMEM1RTA3RTEzODQzNTE3RTQ3RDFGRUEzMzBBOUYyMjUzMzkKKzoxMDY2QTAwMDM4QzZDRDhFMkI1OTg4RjczMzBBQzA0N0YxQUNDQTE2Q0QKKzoxMDY2QjAwMDM5MUZBQTdDRUYwMEUwMjYwRjJFRTcyREYwOEYyOTYwMEUKKzoxMDY2QzAwMDI3NDc3MjY0RTAzQjYxRjcyNjRFMTJFNjZGRDlFMzk2RTYKKzoxMDY2RDAwMEMyNUUwRTg0QThCRDRDRTUyNUIzMjY0MUMwM0ZDRTNFMjgKKzoxMDY2RTAwMDJEMUJEN0QzMkFDMzZBODgwNEZFOUZCMDYzQjNCODVDNUUKKzoxMDY2RjAwMDBBQjhCNjcyM0I3OTRCNTMwOEU1Mjg1QkVCMzkwRDcxNEMKKzoxMDY3MDAwMEZFQURGOTJFNjMwRDAxRjlBRDQwRkI2RDQ3NTUyMjA0MzYKKzoxMDY3MTAwMDdFNjBCMEIyNjJFMzFEQjQ3RDVCOTM4RUY1MzczNjE5QUYKKzoxMDY3MjAwMEQ4N0U0MzUzMjUzRURCNkI1RTQ3RkI3NzZCODhEOUJGMzIKKzoxMDY3MzAwMDlCOUI0QUI5RDNDMUUwQ0UxMjc2NzI4RDg4NUZEQUUxQjUKKzoxMDY3NDAwMEEyRUQ2REZCMUZBMjNFMDk1OUUyNUE0NTk2RjYzQUQzRDcKKzoxMDY3NTAwMDM3ODNCNTRGOUY2NDhGOEJGNUI1Mzc4N0Q2REU2N0Q4MDMKKzoxMDY3NjAwMERCNTc5OTg5NTZGMDg3ODMzQ0VFMkZGNDVFODBENzA5N0EKKzoxMDY3NzAwMDU2QkFEMDZGMTY3OEY2OTREQUU5REU1RTkzN0MzRjQ3MUUKKzoxMDY3ODAwMDNDOURFMzExM0RDRDM2N0YxMkFENDNGODU2NzFGODUyNzIKKzoxMDY3OTAwMEY1QjM4RUM3NUY0NEQ5Q0RFRDQ1NjdCRDE1MzI1RjFGOTgKKzoxMDY3QTAwMEY5QkU1NDkwOEZCNUMzQTRGOEIwQzQ2MUIyMzlERjZEOUYKKzoxMDY3QjAwMDlEQ0RGQzMyMTI2NEYxM0FFMTk3QjkwOUIxRjk2NTZFRTkKKzoxMDY3QzAwMEJFMUY4NTY1RDRGNzUxQTY4RjFERjA4QkY2MkE2RjlGRUIKKzoxMDY3RDAwMDBBMEVENUQ5REY1OURBNEY4NUE1MUYwNzlDQTlFMDczQUEKKzoxMDY3RTAwMEVFOTM5MTM3RURGREE0RDY1RjhFNzZFNzg3NDY4NzAxNUQKKzoxMDY3RjAwMEVEQzA2QTI4QjU5NkIzMUNFNUUxOEVGQTQ1OEVFRjU3RDkKKzoxMDY4MDAwMDM4QkU5NzNCQ0FENzM4RUE0RjczOTRCRkU0QTgzRkQ3NDYKKzoxMDY4MTAwMDUxRkVCQUEzRkUyMkM3Rjc2NThFRUZBQjFDRTU3RkIyMkYKKzoxMDY4MjAwMEQ3MkZCQkVCOTNFMUY3RkYzMzNDMDlCOTFBODg5Nzk4NTAKKzoxMDY4MzAwMDZEOUZENzI5NTc0NTI0M0UyQTBFN0U0M0U2NzM0QkUwRDEKKzoxMDY4NDAwMDUzNDI5Njk0NzNDQzE3NjE3MTJEMTI5RjYwRjU1RkZGRDAKKzoxMDY4NTAwMEE4NDVGRTAwRUI1OEU3NDc2NjVBOThDQUQ1ODFGNkU3ODcKKzoxMDY4NjAwMDAzQTA4RkM0RkJGM0QyQUI4MUYxM0EyMUY1NkE3QzI1RkEKKzoxMDY4NzAwMDhCMDNCNUEzRENBNDExRTVGNTQ0Mjk1MDQ5QzJGODk5NkUKKzoxMDY4ODAwMDU3NUI4QzI4RjcxNkQzRjc1NjdERDVDRUU0QUQxOEZDQjAKKzoxMDY4OTAwMDIyREEyRUJBNUQ0NUJCMkYzQTkyQzRDNkQyNzY2QTgxRkYKKzoxMDY4QTAwMEJEQkU5QkY3NEY3MjU4RkZGODlFRjY1QkFFMzA3RjIxNUUKKzoxMDY4QjAwMDE0NkVBRjAyRDkxRDVFREI3NTEyOUU0RUZDODRBNjQ3OTYKKzoxMDY4QzAwMEFGN0UwNkUyMEIzQjk4MUY3RTYwMDZGNTAzMkM3QUVFNDYKKzoxMDY4RDAwMDY2ODVFOUI3REI5NDRCRjY0QjVGOUMyOEY3Rjc3RkUwQzIKKzoxMDY4RTAwMDVCOUFEMTRDQUIxQzAwMjBDMEVGRkY5NjM3MDZGMThDQjEKKzoxMDY4RjAwMDUxMTA5RjYzOUIwNzE4OUYxQjQ5RjgxRjhGQzM4MUJCRDMKKzoxMDY5MDAwMDA4RUJDQjQ4RUQzNEM2REJGNEJBRTAyOUQwNzU3Mzk1QkIKKzoxMDY5MTAwMDEyMUNFRjdCNTJDRjc4MThDRjk1N0VGRTZBQjYyRUZFMDIKKzoxMDY5MjAwMEVENjNCNDdCMzhGRTQyOUIyQjEyNTE4QTNGQjI0RDM1NEEKKzoxMDY5MzAwMEM2MTI1ODUyMEQ5NDIzOEY0MjVBM0NFNUMwMUUwQ0RGRkMKKzoxMDY5NDAwMDZCNjFENTY1RUYxNTdGMTZDNEQ5QzI1ODU2NDFFRkMyQTkKKzoxMDY5NTAwMDNBMDY3QzI0QzNGRTc2MUNDQjdFOTJDMDcyMDZCNzZGQ0IKKzoxMDY5NjAwMEM3ODFCMzA4N0UwMEQxMjVBNjI3MEQwOUY2OTk0MjM3QzUKKzoxMDY5NzAwMDUwM0YzQ0M5QkExMTk2QUFDNjI5OTNGQkUzOTQ5MkNFMjQKKzoxMDY5ODAwMEUyOTE1MkRCMzM3RjkxMjA1RTU5NEE3NEI2NEZDNUUzRTIKKzoxMDY5OTAwMDgyMUI2NUU5NjM4OEI3MDY4N0I2Q0YxM0JBQzU0RTU3MjEKKzoxMDY5QTAwMEEyQjQ5MzM5MTYzRUJFQTU4RjlFMEM1RjYzNDI2Q0ZFNjcKKzoxMDY5QjAwMEExNkQ2QTIzRjgzMTA3NjZEOUY5NDBENDk3OTU0QkY2NTMKKzoxMDY5QzAwMDA3Nzc0RTE4RjNEOUYxNDFBNjMyMDZFMTE5QzgwN0I3ODcKKzoxMDY5RDAwMDA2MjEzRTJENDUyOURFRDI4NzhFQjdBMDZDN0U1REMxOTMKKzoxMDY5RTAwMDc5MTIyQ0ZGNDAzMjZGMDUzQTg5QjI0MkNDMDVENkYyQkIKKzoxMDY5RjAwMDZGRTVGMDQyMjg0N0E3OTFEMjQ2QURCRjFGRkE3RTcxREUKKzoxMDZBMDAwMDhBRjc0QjkzQkQxRjI3RUNENUIzNkNGRDJFRTEzMjNFQzgKKzoxMDZBMTAwMDZDNEZEMDA1NzY2NDYxQzdBQTM0QUI3RDU1QzJEN0U5MDcKKzoxMDZBMjAwMDQ3M0I4RUY4NjBCRUJCRUI5M0VCM0ZGMURDQzJGREJEOTQKKzoxMDZBMzAwMDU0RjUwMjUyNzcxOEU4NDEyNjJCRTQ2MDEyN0JGQzQ5OUEKKzoxMDZBNDAwMEUwNkY4QjFFMEQzOEVDQzJFQTk2NjgxNUI0Q0ZBQTc1QkMKKzoxMDZBNTAwMDExODgwQkQzRjUxREVEQkE0MjZFMUZFRTlDMUE5NTU0QUEKKzoxMDZBNjAwMDJBODczQjc2MTFCNDhGQjM1QTE2RjlBQ0YzQzlFN0YzMTIKKzoxMDZBNzAwMEQ5MzkzQjJGMERFQzk1N0Q4QjE3N0QwOUZEMTU2QUY3RjQKKzoxMDZBODAwMENCMTgxRjhGNkM4MkZFRjM2QkQ4M0VCRjEzQkVDRDdDM0MKKzoxMDZBOTAwMDdFRUQ4QjE5OUU5Q0RGRDM1NTEyNDkyNjg3NEYyQURDNDkKKzoxMDZBQTAwMENGNTVBMjEyQzlFQkRGMzdEOTdDRjJCRTVGOERBN0UzQzkKKzoxMDZBQjAwMDk1NTRCQTBDOUZERTBGRTdCODNFN0IyOTgxRjg0QUJGOTgKKzoxMDZBQzAwMDQ2MDk2RTAyN0JBQTQzQjVEOTk5RkJGNjNDQjg2QjMxRjcKKzoxMDZBRDAwMEY4MzdGNDNEQTg4MzQ3QUU2RDFDMUVBNjcwM0RGQUU1NUQKKzoxMDZBRTAwMDI1Q0ZERTA1N0NCRkNFNDU0MDFGMDkzOEI0MzJCQjlEQTMKKzoxMDZBRjAwMDdCQjI0RjNFRURFM0QyN0U5OTFGNDc5NzBGMzlDOUZFMTcKKzoxMDZCMDAwMEM5RTVFMkEzODM4RjlCOEE0RjlDRUJBOTkzMEYyRTY1NjcKKzoxMDZCMTAwMDdEQjg1MUJFRkNGOUZEMThFNDkwQzI5M0M3RjNCNTg2NjkKKzoxMDZCMjAwMEQ1RUFDQzZGRTM3Mjk0RUQxNThBODQ4RDkzQzdGOTJDNjYKKzoxMDZCMzAwMDZCRjY4MzNFRTBCMzVEQjVFNTI4M0ZCREIzMTc0OUEwRDIKKzoxMDZCNDAwMDRGNDQxRTU0QUFGMTUyQzE5M0VFNkVGNzQxMUM3NEQ3MDQKKzoxMDZCNTAwMEUyMDdBNTY0NzhDQjhGQjBGODkwRjNCREU5NjZGQUI0OEMKKzoxMDZCNjAwMDRENjk5N0EwN0RBQTdBQTNEQzlDMUZCODVDRTVGMzc5RjgKKzoxMDZCNzAwMDg1QTZDNkMzODBBRjNDNDMyMTZCMjhCRTc2Q0M1RTU0NEQKKzoxMDZCODAwMDU1MDI3QzQ3RTUxMEUyMkFENTM1MDRFRDg3N0M5M0VENkMKKzoxMDZCOTAwMDBCMDUyOUJFOUVBNEVCREVDRUM1QzQ4OEQzN0EzQjREM0YKKzoxMDZCQTAwMEQ1QjYxRjIzRTREMEM5OEYzQjE3NUY1Q0JGMTBBQjdGMDYKKzoxMDZCQjAwMDRFRjk1RjcxNkI2QzdGQjA5ODE0ODMxREI1MjM4NTdEOTIKKzoxMDZCQzAwMDc2QTlGODBEMkQ3NkIxRjg2ODc1RjkyMEZBQkNGOTUyNUUKKzoxMDZCRDAwMEQ3QTlGOUQ3MDIzRjBFMzVERkNEQTEyRkM4NTNCQjY2MjkKKzoxMDZCRTAwMDk1ODA1RjZCNTA3RDQxOTJFMUM3QUUxRjA2QzM4NzEzNEUKKzoxMDZCRjAwMEZGMTMwMDlGRTk5RjFEM0U5RERGQjNERDNDQkUzRDQ0N0EKKzoxMDZDMDAwMDdDQjRENTE2RkQwRkRDMDM0RjUxREYzOTFGRDE0RUU0QTQKKzoxMDZDMTAwMEE3N0Q5MUY0QzgyMEZGMjY3MEU4MThGMDI2MEM3QzU2NUEKKzoxMDZDMjAwMDkzMzAzRUJCOTVDODU3RENCNEZFNENEMjg4NjUxMTdGQ0IKKzoxMDZDMzAwMEFBNTM4MjhDMUUzQ0ZGNDVFQzczMkJEMzE5REY4RjlCMkMKKzoxMDZDNDAwMDQ4NjI5REIwN0U0QzlEQ0IzNzdGMTVGMzlDMTc4QzM2RTgKKzoxMDZDNTAwMDBBNDcxMjdGOEE5MDM1MzhFRjExOEVGNTU4QzQyNzg2N0YKKzoxMDZDNjAwMEQ1QjdDRjJFQTdGRDhFOThFREMyRjhDNTg4Q0EyM0I2M0EKKzoxMDZDNzAwMDc1MkNDMEU1NDdGNEI3QkI3MjY4RUJGMzIzOEVGNUY5Q0EKKzoxMDZDODAwMDExMjU4MUY5NUQ4RjU0QUU2OTg2RTU0NkM5N0EzMzk0NDIKKzoxMDZDOTAwMEFDRkRCODBFM0I1RUI3N0VENEU1MEIyNzgxNjdGN0UyMEIKKzoxMDZDQTAwMDYzOThDN0I1QkJGMkUyRjE5MzQ3MDZFMTlCNzE3MjcyM0MKKzoxMDZDQjAwMDdCRjY4QjFFQjZBRkI0M0JEMzdCMzM0QjJFNUE2RENCREEKKzoxMDZDQzAwMDQzMjBCMjU2NjgxRDc3Rjc0NzI0MzM3QzUxN0Q2Mjk3ODUKKzoxMDZDRDAwMDk3QUQ2RTlFNkZFMDI3N0VFMEZGNTRGODEwQ0ZDRjFBN0QKKzoxMDZDRTAwMDBGOEY0RTZCNUMxNjRFRDJCRUM0QzNFQzg5NzU5OTI0Q0YKKzoxMDZDRjAwMDJBNTMzRTc5RjQ2NTI1MDY3OTBFODRFQkUxOEE5QkY1RUIKKzoxMDZEMDAwMDE4RDgwQkVCNDA0OTUwRkRGQjY4MTVDMUVGMTU5OUZDRjUKKzoxMDZEMTAwMEZCQzMzQUU2NTU4REU4MjA1MTk1QUU2NzIzNUU1QUJDMTkKKzoxMDZEMjAwMDIzOTNENjZCNUI0QzNEQzdDMkZFRjc2REM2QTk1NkQ4MDAKKzoxMDZEMzAwMDE3N0VFMjA1MTdDNjczMkI3QzcxQUY0MUU3NTVDOUQ3QTMKKzoxMDZENDAwMEMxREQ4QjRGNjFERTcxNzQ4RjYyOEM0NUZEMkUxMUE5MDAKKzoxMDZENTAwMDAyQkQ3ODVCMUNGMzg0NUI2MUVCQkRGMUEwNEZBN0VEMzYKKzoxMDZENjAwMDc3RTkwOUVDRTc5QjUzNEU3OTc1RDgyRjJGRThGNkMyRTcKKzoxMDZENzAwMDNDQjc1NEIyRjVGMkM4RTJBMkFGOTYyMDVBRUQ3OTI2OUMKKzoxMDZEODAwMDMzRTVBOUREMjYxRDZGQ0I2MkI2NUY5MTk5RThGNjdBRUYKKzoxMDZEOTAwMEU4N0MwMkI1MEFCOTlFQzIxN0QwRDg3Q0RCRDY5MTE4MjAKKzoxMDZEQTAwMEFDNTNFNTNDOUY0NDIyNzNEMDFGQ0U3N0U0MDlFNTM5MEMKKzoxMDZEQjAwMEYyNEQ4MkM2Q0NCNzYwREYzRjA4RkJGQjMwMDlCOTdFREQKKzoxMDZEQzAwMEM3NTVBMDZGMUI1QzNDMERENTQ0MzlGNUYzRjlGOTBEOUYKKzoxMDZERDAwMDEzRUJDRjk0OEZGQjYwREY3NzU3OEIxMkM0RjVDRkQxQzUKKzoxMDZERTAwMEFGNzMxRTQxMTIzOTY5NEFEODBGOEVCM0VCMjFCNjRFRUMKKzoxMDZERjAwMDA2Mjc2QjA2RDU1OEI0Mjk4NzNCNDhFMUNFQTY0M0I2OTMKKzoxMDZFMDAwMEQ4RTExNjc4NzU4RUUzNzc5NERGMTRGQzNDODI4QzA1MEMKKzoxMDZFMTAwMDNEMjRFMkNDMDI3RTI3REZFNjU0QzQ4RTNFNEZFN0JCMjIKKzoxMDZFMjAwMEZCMDUwREQ3RUJERDk1Q0ZERkQyMDBFQjdDQTkwN0YzOTcKKzoxMDZFMzAwMDIzQkVGNEMxQTFGQTdGQTFDRjVGQkY3N0FDMTg5RTM3MDQKKzoxMDZFNDAwMEU0MUY5OEQ0MDA3ODgwRkM4ODg5QTQyRjhFOTcwNzNEOTIKKzoxMDZFNTAwMEEzRkRDQUY1OUExOEFGNkM1RjhCM0IwNzVGNDVGREI0ODUKKzoxMDZFNjAwMEJDRTVENENCNzUxMDhGQ0VBRjI3NjhGRkU2MkI4QzNGRTcKKzoxMDZFNzAwMEZEMkRBRTU4MzM4NTNGRTc5QTc2RTQ4NzExQjU3MTA0NEUKKzoxMDZFODAwMDVBQUJFRDkyQTI5Njc4QTdDOEZCRjZENzQ3MzA4RkUyQUYKKzoxMDZFOTAwMEZBREE3NkNDRjdGNkYzQjhBRjdGNTIzQkRBNDkzM0U0NEYKKzoxMDZFQTAwMDU3QkQ2OEFGNzFGQTg5RkM3NzIxN0Y0RUZBOTQyQ0VFQkEKKzoxMDZFQjAwMEFFODE3RTQ2QjQyODA2ODAzREEyQkVEMTA1NzA5NTU0QjEKKzoxMDZFQzAwMEQyMzU4QkQyQURBNEEzNEI2MkZFMUZDQkE3NjcyOUNGQ0YKKzoxMDZFRDAwMEY0MTlBRUMzQkMyQ0IyODdFNTE3OEEzQ0YwNDBCRDlEQzcKKzoxMDZFRTAwMDdFQzFCRUZDRjk4ODBCRkNFRkMyMEVDN0Y3NzBDRDFCNEMKKzoxMDZFRjAwMDhDMEZFREY0MkM1MjM5M0Q0Qjc4MUUyMUM3QzMwODhFMDAKKzoxMDZGMDAwMDg3MkRGNTdDN0Y0RUYzQzYyRTY2RDdCRUMwRjdFNzVFQjEKKzoxMDZGMTAwMDg0Rjk4RjFCRjhGREE2MTRGQUY3NDZEMEJGRTBCN0JBODQKKzoxMDZGMjAwMEJBNUIwMTFGRTQxQTE3RkE3MTRFMzhCNkQ2MzNCRDc3MzMKKzoxMDZGMzAwMDQwNzVEOUVDRjhDQjFERkYzNkFFRkY2NTU3RTJFRjMyNTYKKzoxMDZGNDAwMDdFN0RERkZDRkYzRUUzREZGRjc3MUU3RkQzREYxOUZGOEYKKzoxMDZGNTAwMEJCRkVDRUYzM0ZGNDFGM0NGRkY5QTU5MkNENEZFQjU0OUYKKzoxMDZGNjAwMEJERDhERjRGM0MyMjNFNjZEN0RGQjIyQkI5QkZGREJBOUEKKzoxMDZGNzAwMEVBQjJFNTEzOEJGQ0M0RTlCNUU2NDI4ODk3RjgwRDc2RDIKKzoxMDZGODAwMERFQzNEOURGMENGOUI5NTZEMDgzQkI3ODVFMzZENUEzMDIKKzoxMDZGOTAwMDI2RTRBOTY2NEMxMTc5MzI0Q0ZGRDU3MEZENTdDM0Y1MzQKKzoxMDZGQTAwMERGOTExNDdBQjVCQzkyRTk3NzZBNUZDNEY0NDI1ODMyMzMKKzoxMDZGQjAwMERBRDE5RjA5OUM1NjMwM0ZGQjA4QTFDQjBDRTgzNUREQTgKKzoxMDZGQzAwMDkzMzQzRjNCOEZDM0VERDRBNzc5NUM5Rjk2M0ZFNzc4MUUKKzoxMDZGRDAwMENGRjVBODczOUQyRkVDOEI5RjEyOEM5RkZFNzc5NUU3QzIKKzoxMDZGRTAwMDAzM0JGNEFBQzBDM0FFNEE2NjJGRTdDQzRENkUwRkI2ODIKKzoxMDZGRjAwMDM5RThBODRENkFDNEZDMDMyNzNENUU1Nzk5N0YyREU4MDgKKzoxMDcwMDAwMEIxRDA2QkJFQTJFNkE2QTY3NzgyRDNGQjNBNEVFRkRGRTUKKzoxMDcwMTAwMEE4M0MxRjhBRTc4OUE0QTI3N0E1ODc4REYzNzlGRkQ5QjkKKzoxMDcwMjAwMDUwMzNDQzI2NUM4NTc0OTAzOTlENjREMkQ2OERGMTVGNDcKKzoxMDcwMzAwMEYyNEQ2MkY1MkZCNzdFNDRFRDEwNThGRjM1Q0Q1ODQzMjEKKzoxMDcwNDAwMENCOUZDRjIxMkU5MTc0RkY5MUQ4OUZBMzdGRUU2RTE2MTgKKzoxMDcwNTAwMDQ3OTU3MzU0ODdCRkU1QjQ4M0JENTEzODM3QjNEQjc0QUMKKzoxMDcwNjAwMEM1QTI4NTYwNEY3NEVFNUUwOUVCRDMwQjY5OThBN0JDOEYKKzoxMDcwNzAwMDNCQjNFMzM5RjRFN0RBMjcyQTAwODdCMDFCMDk4RkNGNDcKKzoxMDcwODAwMDgyNDlDMUYyNTA5Q0ZCNEU3NkJCN0ZGNzQ3NUQ3MUIwRTEKKzoxMDcwOTAwMEJGODI4NTEyQzZGRDVBRjUwNzczOTI5RUM3NzNEOEZCNEYKKzoxMDcwQTAwMDlBQzc2RkYzNzdDOUY1NDNCM0RCRDc3MjdBNTM3RjMxNTEKKzoxMDcwQjAwMEQ3NjM5MUVGQjVGRTk5MTM1OTFFNTQ3NTEwRjY3NzI0RDYKKzoxMDcwQzAwMDczQTYwQkUyRTlBOUZBODE0OEVGMzlDQjdFNTM5RDYyQTIKKzoxMDcwRDAwMDhFODRGRTI0RjAxRjRCRkJGRDQ3NDIwQTU4N0M1RUNDOTkKKzoxMDcwRTAwMDdGQThFNzA3RUFFRjYyRkJERTFDQUYzOUQ3NzQ3RDJBODEKKzoxMDcwRjAwMDdFQTRGMEZCNDUzRDkxOUZFN0FDRTdGNEM3QUY3NzlCREIKKzoxMDcxMDAwMDUzNjA3RTQzODU3RjJGMzAxQ0M0QjNDQkU0OUE2NEYxNzcKKzoxMDcxMTAwMDgzMDREN0FGNUFGOEIxNjc2RkEyNTUyN0NEOTM1ODdDMzcKKzoxMDcxMjAwMDlGOUE2REQ2RkRCNEI2MUNBNTI2NTlCQ0VCOTc1QzRFNTQKKzoxMDcxMzAwMDdFQTNFQTVDQUZDNzQ5OTY4NEY5MjQwNEU2MjVFNEQxMkUKKzoxMDcxNDAwMDM5RkVENTdDRENBQjJGNzNGQzE3Qjg1QzVGQ0RFNTlBQkMKKzoxMDcxNTAwMDEwMDNGNzYzNTI4RDVCQzVGNTg2Nzg3RUQyNzExMzdDODAKKzoxMDcxNjAwMERFNTUyQThGNkIwQzMyRUUxQzNFQ0YzOTk3MzlERkYzOTgKKzoxMDcxNzAwMDdDREMzOTQzOUNFRjQyM0VERUMyQ0IxQ0Y3NDMzRUVFNDMKKzoxMDcxODAwMEMyMjE4RTdCMzdDN0VGREQ5Nzg5NjdDNTJCRjE3RTg2REQKKzoxMDcxOTAwMDg2RTc2NjNFNUVGMzY1OEUxQkU0RTMzNjBGNzFEQ0VEMzkKKzoxMDcxQTAwMDFDQkZEQjJGMTNDRjA1N0NEQ0VEMEUzQ0E3OTJERkNFOUUKKzoxMDcxQjAwMENCMUNBRkQ0Q0JFNEU3MDA5NzVGQTc1RTEzRTM2QkY5N0EKKzoxMDcxQzAwMEFFMzBCNERGMURCMkY3NzM4Mzg3OEQyRjlFMjRGRTMxNUUKKzoxMDcxRDAwMEZBQUYyM0Y4QkVFRTk0OTVGNzJFMzI5MzhDMkJFQTNCNTAKKzoxMDcxRTAwMEQ3RTM1NEUzRENDMkUzMzVFMjI5QzYwOUYwRkREMDI5MzgKKzoxMDcxRjAwMEQ3RDA3MTkyRTA0N0Q0QkY1QTY1N0EzMDU1RkZDQjM4NkIKKzoxMDcyMDAwMDNDQ0IyRTcxMUVBMjdFMTVGNDNGMzk3NUZGRjc3MTM4MDUKKzoxMDcyMTAwMEVFNzNDMDNGNThGRkEyRkU5QzQxRTA2RkU1NzBCNDVFODQKKzoxMDcyMjAwMDIyRkNBMkZFQzI0MUZBRkYwRTg3RTMzQjk3MDhCRkE4RUIKKzoxMDcyMzAwMDdGRjcyMEY4Nzk4NEMzRjFDODI1QzIyRkVBMzcwRkQyMkYKKzoxMDcyNDAwMEZGRTMxQzhFQzcyRjExN0U1MTdGRkIyMEY4Nzk4QUMzODQKKzoxMDcyNTAwMEYxRDQyNUMyMkZFQTFGRTg5Mzc3QkJGQzY5RTIzRTA2MTIKKzoxMDcyNjAwMDgzOTQ0MjlFRjEyODkyNjZFMEZEMDY0NkUyMjRGODAxRUUKKzoxMDcyNzAwMERBNkE3NkJGMDFFOTcyOUU4N0IyOUNBM0EyMjI3RUYyRUYKKzoxMDcyODAwMEJFOTIyOEQ0REY3QjE3OEJGQkVEQkQ5QUEwMUZCMTM3RDAKKzoxMDcyOTAwMDk3RTcyOUYzQjg5NkM2RURDMUJENTdCMzM4QzhERTEwREQKKzoxMDcyQTAwMEZENkVGMUNGNDRCQzY4QUZDMUYyOUM3QjBCNTgxRUIzOUUKKzoxMDcyQjAwMDU2RDY4RTI2MjYwRTk3Qzc0RDQ0MURGMjY5RDhCOTJBOTgKKzoxMDcyQzAwMDYxRUY4OUYzNTU2Qjc5OUM2QUFGNDkzMDRFQjVCNzhDNDUKKzoxMDcyRDAwMDk1Nzc1NzkzOThBQkQwNzJFRUFBMzQ4RUY5QTc2MEQ4MDEKKzoxMDcyRTAwMDQyM0NCNkZGREM5ODQ5NTY5NzVCRjIzMTU2QzczMURGMTYKKzoxMDcyRjAwMDQwRTE3OTIzMTQyMUM0OTY5N0UxMzhBRjI1RjYwRjZGNEEKKzoxMDczMDAwMDMyQ0MxOUEwRTYwQTI3QjFGREJDQzJCMEREN0ZBODg3NDgKKzoxMDczMTAwMDQzNUNCNEZFRUZCOTlFMEM0RTRBN0U5RUU2QjA1NzYxQzgKKzoxMDczMjAwMEY0RTNGOTlBRjNGOEZDMDVERUNBMzkzREI3Q0U3OUFGM0MKKzoxMDczMzAwMDdCM0E5REU3QjM1M0REOTgzRkZBRUM2OThFQzdBOTcyOUIKKzoxMDczNDAwMDhDRUQ5RjEzNzdCMjczMzhBOUUyNkM1QTQ3RTMyOTM4NjIKKzoxMDczNTAwMDlGN0JEMzczQzQwMDMyRkFGNzk4RUI3NDhDQUI3RDg0QjcKKzoxMDczNjAwMEZDODc3MTM1M0FFRTREN0JEQTE1RTBCRjU5MURGQTc0OTIKKzoxMDczNzAwMDg4MDdDRTdCNEU1RkFCNDFERTc1MDczMTRDNDBFRjQ3NEYKKzoxMDczODAwMERGQzA3RUIyNUE4ODExNjNBNDZBMEVBMjlERUI4OENGM0IKKzoxMDczOTAwMEYxNzM5MzIyM0UwN0UxNkFBQjdGMzk4QkNGQkJCQzI1RUIKKzoxMDczQTAwMEI4MEVCNkVFQ0FBQjNEMzZGQjc1MTZGNzMzQkY2MjdBNDAKKzoxMDczQjAwMEVDRTcyNUY5RjlDNzU5MEUzRkIzQzM2QjhGRDc2OTFEQTkKKzoxMDczQzAwMEUxMTkxMEZGOTZFNzlEMzFFMUZDRjNCOEIwMTQxQzQ2QkIKKzoxMDczRDAwMDNGREYxNkRFQUU0MDdDNzJENjlFNDZDQzVGNEZCNUJGMTcKKzoxMDczRTAwMDk1RjFGMDVDQkZENTdFMTdGQkQ5QkZEOTczNzE3QjVEN0EKKzoxMDczRjAwMEM0MTk0NERDRTEzNEU0MTU3QkMwNEYwRjcxQkEzMEJFRDAKKzoxMDc0MDAwMDEyRkM5MTM1NEZCMkYxNDk4Nzk3RTk5MTBFMkY4QkUzMkEKKzoxMDc0MTAwMEZGMTc5RjdDQkE3Q0YyM0JBRjNERkVEMDAxREZBODNDNUEKKzoxMDc0MjAwMDk2MThDOUY3RTlFQkJDRUE3RkM5RUI2NzQwODc4MDJGNjQKKzoxMDc0MzAwMDM5MUQ0ODdEODYyRDhGNThFNDU1MzlGMUI2ODFFMzREQ0QKKzoxMDc0NDAwMDk0QkQyOUNFQkQxNEY4RjgzQUVCRjRFQjVGOEQ1NEMxMkUKKzoxMDc0NTAwMEJDNDQ5Qzg2OTBGQjFERkI5QjUzOEQ4QkM1MjU2NDcxQTIKKzoxMDc0NjAwMDVGOENFQjU1MTlFNjUzRUFFM0ZBNDcyMTBBRjZFRjk4RTkKKzoxMDc0NzAwMDA3Q0E3RDFFOUU1MzY0MzAzOEZBNUJDN0NGQUI4OTc5NEIKKzoxMDc0ODAwMEI5OEJDMzI2RENCNzQyQzdDMEZEM0VDODU3M0Y1MjA2ODIKKzoxMDc0OTAwMEVCNjNEMDM2NkZEM0M3RDY5QjREQTU4Q0RGMzY5NTJBQ0MKKzoxMDc0QTAwMEIxNzQ5NjVGNjVCRkI3QThCOEQzOUJDQ0FFMTA0RjYyREUKKzoxMDc0QjAwMEJEQjdBMjY4MjBCQzZBNzEyNDZBODU0N0U1RjAzOEZCMzUKKzoxMDc0QzAwMDk5OUIxMjlFM0E1QkZDRUI1MkUxRjE4QzI3QTQxQkY4Q0UKKzoxMDc0RDAwMDU2ODkxMUE2OTdCRjYxRUJDRjU1MUFDM0YzRkRBOUZBRTAKKzoxMDc0RTAwMDUxNzQzRTJGMDc1RDUyOERFRjJEQjBFNzQxQTkzOTY5RTgKKzoxMDc0RjAwMDM2N0U1N0I0MkM0NzlFOTQ4M0JGRkFFMjQyNDMxQkNGOUIKKzoxMDc1MDAwMDc5NkVCMTg1OUY0NzcxQjZGNzI5RURDNDQ4ODI3NzlGQTAKKzoxMDc1MTAwMEVFQ0NDNzg4MjExRDlDRTc2QURDNDEwN0RDOEVGRURCRDAKKzoxMDc1MjAwMEUwNUQ5MjNDMUM3MURGRDAwNkJFQUU2RDU0NjI2ODZGQTgKKzoxMDc1MzAwMDQ1Mjk5ODkwRUZCOThFRjNBNTEyOENFMUJENUVERkY2NzgKKzoxMDc1NDAwMDQ5NDlFNzRGOENFNEVCQUQ1MjlDMUM3RTZGODExREVGRTcKKzoxMDc1NTAwMDZBNEU5NjlEMEU0QUYyNzMxQzFCODVEQzA3MEY5OEY2NDcKKzoxMDc1NjAwMDdCQUM5QzcyN0VEQ0I4RDg3QURFNzdBRjk2RjQzQkY5QzAKKzoxMDc1NzAwMDYzM0FBNTgzM0VDNzNEMDk0M0E0QUZGMjYxMzY5RTZCRDMKKzoxMDc1ODAwMEVGMkI1M0JEMEFGMTVBMkEyMzk4Q0ZFQkFDN0Y0NkUwOEMKKzoxMDc1OTAwMEVGRDU0RTg0NUZFOEU5RjQzRDIyQUZGNjkzQ0Q0MzkyRjgKKzoxMDc1QTAwMDA4REYyN0I3Qjc0RjI5ODc1Q0NGQzk5Q0FGOUYxRTY0MDAKKzoxMDc1QjAwMEZFQTlFODlCNTZFQ0NDMkIxQzFBN0Q3RDIwRjdCMEVFODMKKzoxMDc1QzAwMDI5MjZCRjBDQ0IyRUY3QTlDNjIzNDEzNkRGNEI5NUZCRUUKKzoxMDc1RDAwMDRGMEE2Nzc2NEQ4NDgwM0U1MzQzMTExMkExRUI3QzdFQTcKKzoxMDc1RTAwMEE4MURGN0M5MzVBOTI3MEFGRTE4OTUyOTFERThCQzNCMzcKKzoxMDc1RjAwMDVCNjdGNzY2NThFQTREQTNFRERDODVBRUE4MUJGMjQwNDkKKzoxMDc2MDAwMEY4N0QzMEQxMTBFOTgyRkExMDhGRTkyQ0VCQUZBNzQ5NTEKKzoxMDc2MTAwMDI0MENGQ0FFRTUyQTYxNzgyRkZBQ0I5ODZBRUY4RjlBOUEKKzoxMDc2MjAwMDA5QjJGNTFDOTZDODE3NDA1Nzg3Q0VERjNEODVGQUE3RUIKKzoxMDc2MzAwMEI0QkQ0QUVERDA3REM5RjQ0OTFBQjM0M0QzOUZGMjk5NDIKKzoxMDc2NDAwMDk4MjcxMEQ2NjJDMDkyRjk5MzYyOThDRjk5NUY0NzBDNDEKKzoxMDc2NTAwMEYwRTc0QTNBQkE0OTg0NzZGQTZEODA2MzMyN0NBN0YzNDAKKzoxMDc2NjAwMEQ2MjBGRkEzMURGN0VENzMzQ0VDREM3QTdFN0RCQkI0MjYKKzoxMDc2NzAwMEQwMzI0RTY5MUFFM0VGNjk3M0JEQjg0RTdDQTM4QTlEODAKKzoxMDc2ODAwMERCRUIwRTJENkFBRjgyRjEyQUY5N0Q3QTM5MEExOTRFQTkKKzoxMDc2OTAwMEYxRTE3RkM5QzNGQ0NGNDkwOTAyRjgwOUYyQkM4NjM3ODIKKzoxMDc2QTAwMDlCNDhGOUUyQjE4NEJDRERFNEM1RTdGOUE2MjAzRTgzM0UKKzoxMDc2QjAwMDFGRkRDRjEwRTRCOUFDOUI1Q0ExNDNCRUY1MDdGRUJBMzkKKzoxMDc2QzAwMEQxQjA2RUJDREIxNEMyRUY1QkJFNjVFODkwNEYyNDlGNjcKKzoxMDc2RDAwMDdBMTlFRjhGRThFN0Y3QTg0QzJBMjEwRjM2NjEwMkZERUYKKzoxMDc2RTAwMDJDRjNFRkY0NTlGNkY5RkJFNjQ1RTdCQjkwOEVCMzU5NUUKKzoxMDc2RjAwMDcyREQwRUUzNDE3OTExRjJBOTU3NTYyREY5MUYyQUY3RDEKKzoxMDc3MDAwMDFCRERFQjQ4RjhCMTMyQjhDNzI0MjZERDVENjY3OUVGQTIKKzoxMDc3MTAwMEEzNzYxQkFDQUY5MzgzNDhGNzdFN0NDNjlBMzlCRUFGODUKKzoxMDc3MjAwMDA2N0YzN0ZGMzk4RUQ3Qjk5NTE3REQzNzY5NkI4QTc3QjIKKzoxMDc3MzAwMDU3OEZFRDJGNkIyOUNFQkJDRDcxNEZCQjJFMERFMjQ2N0YKKzoxMDc3NDAwMDcwRDg5MzhFMzc3RDZFRTkzMEMwRDc0M0VFRTRGNzJGQzMKKzoxMDc3NTAwMEM4QzE4OTQ2MzFENDhERTZCQjUwMEVGOTNEMkJBQkM2NkUKKzoxMDc3NjAwMEVCQzMzMjJERkRDRkUxN0MyOTlGRkEyOUUyMzdCRDhDOTYKKzoxMDc3NzAwMEU1ODdEMEJGRDlGOTk2RkNGRjgyNDgxRERFOEY0NDFBRjkKKzoxMDc3ODAwMEQ5MzkxOEIxMEYzOUZBRDY0NDMzNkM0OThDNUU2RDNGNDQKKzoxMDc3OTAwMDFGMzM5MzlGRjMyQzVDRTdDMkZDRDdDMjI5QTg0MzQ5NEYKKzoxMDc3QTAwMDYxMzNCQkJGNkFCRjZDOTQwMzdGM0Y0QzVFQzg4NDAzRTgKKzoxMDc3QjAwMEVCMDUxNEJFOTE1NDU0MEJBM0Y2N0VGNjJGOTlGRDBDRTUKKzoxMDc3QzAwMEM0MDFDNEI5RDFCNTJEQUNCRjUxQkE3MTVBODdGODQ5QkIKKzoxMDc3RDAwMDk5MEJFREU1RDFDNEYwNDJGRkEzMzUxNzgxNzM0NTYzRTIKKzoxMDc3RTAwMDg4QTU5RjQyMzg0NzZCRUZENzA5NkZBMURGRTU4Mjc4MDQKKzoxMDc3RjAwMDg3ODA2NzE0MzlFQTM1NzNCMDdGMTJBM0VEMEJBODlCMUQKKzoxMDc4MDAwMDM3MjIwOTdDQ0U3MUM2ODg3QTU3OTU5N0M3NDk5MjcxRkQKKzoxMDc4MTAwMDQ5NEYzM0VDMEIwRDE4N0Y5MDdFOUJEMkI4MURFRTI3OUQKKzoxMDc4MjAwMDAxRDBFNzdCMjQzNkZGRThCM0IyNzExMEU4N0FGNzIxODQKKzoxMDc4MzAwMDhDRDcxNEFDRUFDMDc1QkQyMzhERDk3N0VCQTkzREEwRDgKKzoxMDc4NDAwMEI5QzE0RUExQ0ZCMUE5Rjk1MDBFNTJDNDY1RTBGQTkxNjkKKzoxMDc4NTAwMDk0RkYxRTREQUJEQTk2MDZGMUIwQjQ2OURCODAwRkQzMEUKKzoxMDc4NjAwMDE0RkQ2Qjc4M0ZFNzY5Mzc4MTdEQ0MzNEIzMURFNTBGOUMKKzoxMDc4NzAwMDJFNjQwMjNCNjM3MzU5NTEwNkM4NUI1QUEzOUFENDVGQzYKKzoxMDc4ODAwMDZCNDk3MzIzN0M3QkQyMjQwNUYyNDIyOTZGRTFCQzk0QkYKKzoxMDc4OTAwMDdBRkQzQjMzNjlCMTNCRDdGQzFFOENGMzk3REMwODNFODUKKzoxMDc4QTAwMEM1RkJEMEEyNUExREY4NzNGQUQyMzI4QzdGRjU3NjQ4MDgKKzoxMDc4QjAwMDE4RkY3QTQzOEFBOTkwQUFCRDdDNUVFMzA0QjgyRjY3QkIKKzoxMDc4QzAwMDRFNjZFNDExNjhCNzU0OEVBRjc3NTM3ODU2RENEQTU4QjkKKzoxMDc4RDAwMDAyRjg5OTBERjk3RUI5MzA1Qzk0Rjk4MzA1QUYxQjBBNjMKKzoxMDc4RTAwMDlDMDcyQjUwRTI2RUNBREZERUUwQTk5N0Q4MzM1QTA1MTkKKzoxMDc4RjAwMEZDRUU4NTkzMzA5NDlFODE2MkYzMkRGMDlCRkNGQzFDODIKKzoxMDc5MDAwMDkyNEM3QUEyOTAxNzE4OTg0QUM4RUIxNkJBODE0RjY3MjIKKzoxMDc5MTAwMDJEQzM5RUFFQjU5QzBBRkY4MzNEMTdEM0I2QUY4Rjg1QUUKKzoxMDc5MjAwMDU1REUzMDI1QjQwQjYyODgzRjM1Njg0QzAwMzhFNUQwMTEKKzoxMDc5MzAwMEU5QkM2MkNCM0FFN0UxRjNGMzRDNUZDNEVGNDkzMkI5RkIKKzoxMDc5NDAwMDdGNjMxMEFCN0ZFQkUxRjMwMjFERkVCQUE1QkQzQjY0ODQKKzoxMDc5NTAwMDJGQ0JDMTRGNzcxRUMyRUU5NjdFRjFENzczNDBDN0I1Q0QKKzoxMDc5NjAwMDhGQkIzMUVFMzlGRDcxNzdGQzNBNUE1RUIxNEZDMjc1NkIKKzoxMDc5NzAwMEM2NzU4MkU5RjU3NzBGNDgyOEY3NzFCRjhBN0FFMDlEQ0UKKzoxMDc5ODAwMEEwMTdDQjBEOUVFRUFENUZBMEU1OUVDNzY1RDI4OTY4QkUKKzoxMDc5OTAwMEE5QzU3QkE1Q0U4OUY1RjQxODJCMkZFMTBFRDI4QTdEREYKKzoxMDc5QTAwMDI3MTc0MDdGNzVDNzNDMDRENjg5MTUzRjVEN0FFMzE3REEKKzoxMDc5QjAwMDY4NzkyOUU1NjNBOEIyRTI2MEIzM0E5Qzk2RUY4QTQ5RjgKKzoxMDc5QzAwMDVENTBCRTMwOEQyMDlGNDVCM0Q0MThFNEI1NUMwODc0N0IKKzoxMDc5RDAwMEU3RERBNEUxM0E0NkY0NzFCMEJGREQ5RDM3OEZGMkUzRjUKKzoxMDc5RTAwMEIyRDg2MzMzQTFEREIyQzMxMjQ0NTJFOTNDMEUzRTkzRDgKKzoxMDc5RjAwMDRGRTE1QUYxN0QwOUQ3QzdFNTg3RDJEOTVEMkIxQzdGQUUKKzoxMDdBMDAwMEU3RTg1NEFFQTNERjU3RDE3OTgyM0U1QzRBREE2NzAyRDkKKzoxMDdBMTAwMEJENTYxQ0RDQUU1QUQ3QjlCNzlCNEEzMUY1NDM5NDU3RDMKKzoxMDdBMjAwMDdDOUY4RTQzREJBREZDOTE2NEMwMTQ1NzQyQkUwM0FDMTcKKzoxMDdBMzAwMDk3M0ZGNUQ1RUVENzYwN0VDRDZBODkxRkU2QjU0MTg1QzMKKzoxMDdBNDAwMDdBNEI2MzBCOUZGMEU5MDBERjNFNzUyNkZEQkU2Q0NGREQKKzoxMDdBNTAwMDNFNzU0OTE5RTA4RERDMEVFQkVBRjI0MzU3MTJERDQyMjgKKzoxMDdBNjAwMEQ3NzMxRDMyRkEwQkFCMzJCRDlENzhCRkE5NjZCRjBGMkQKKzoxMDdBNzAwMEE1MUYyRTYyODM2QjE5RDcxQkQ0RUY1M0FERTdERDlFOTQKKzoxMDdBODAwMDQ4Q0Y0NDNFNUQ3RTQ4QjY4RDIzRTgxRjNENDNEODc5RkMKKzoxMDdBOTAwMEI0OUZGQkYxM0M5QUEwOUY1OEFGMDRGRDU2ODkwQkZGQTEKKzoxMDdBQTAwMDk0OUU4QTY0RjA2QzA1N0FDMEI5MUJFQURGQzBGM0MxMEEKKzoxMDdBQjAwMEE2MTAzRTFGNkFEMjkxNEUzQjAxOEZFMzU4NUUwQUJDNkUKKzoxMDdBQzAwMEE3NzI1QjA1Rjc1NjA1NENCODE4MENDRUE1OTg1NTkwRDMKKzoxMDdBRDAwMDg3OTkxNTY2RTVCQzVCMjM5MjdFMTEzQjVEM0M3N0JBQzYKKzoxMDdBRTAwMDIzMEJDMUM4OTk5QUZFREQxOTBBRjVDNzc2QUE5MUJCODYKKzoxMDdBRjAwMDIxNjQxRDU0M0E2NzU0RDMzNUFGM0UzRDVDOTE2RUQ5MzUKKzoxMDdCMDAwMEY3NUIyRkIxRjM3RDlGNEJENzcxRkVFQkYzNTVDNEY3QjUKKzoxMDdCMTAwMENFREIyQUY2RjNGODEzQUU5MzNCNkY1QkYyMDhDNEM3RDMKKzoxMDdCMjAwMDY5RkIyRkE2ODM3RkMxRjdGRjUyQjVDRjVCNTA2OTZCMEUKKzoxMDdCMzAwMDlGQjdBMDRFQjQ5Rjg5RURCRDE3NkZCRjczQzEzNUY2RDcKKzoxMDdCNDAwMEYxMTcyQzEzRUQ2RjQ0RjhCNThCQzM5Rjc3RkI1NEZCRjMKKzoxMDdCNTAwMEY4QjdENzYzRkIwNjBGQTM2RjRGQTYxN0YzQUQ1QjdDOTcKKzoxMDdCNjAwMDQ2MUNGNDMxNUVBODM2MDlGMkM5NEIzQUExOUU1ODc3RkIKKzoxMDdCNzAwMEE4RTYzNzIxN0Y1QjNCOUM1OUJFODk1OEY5NjhEQTAyMzkKKzoxMDdCODAwMDgwMDNGMkIyQUM3Qzk0NTE5OTY2OTNBQjRDMzNDQjU2RTQKKzoxMDdCOTAwMENFQUUxOTZFQUI5RjFCMkVCMjdEMUY1NjdCODU4MzJGRjkKKzoxMDdCQTAwMDM1M0NCRjg4NjUwMDBBMEM3MzBBQTczQTVDNDU3RDU0RDIKKzoxMDdCQjAwMDM1OUNEOUMxRjc5RUYwNjFGOURFNkJEOEZDRUUxREFFQTUKKzoxMDdCQzAwMEExMUMwM0NDRTA5N0RGQUI0NjNFNjdCREJGOTVDMDNEMkYKKzoxMDdCRDAwMDQ4NTRBN0RFQTk0NUVFODM3OUY0QkZENzVERjAzRThEMEEKKzoxMDdCRTAwMEU3M0JBNTc5MDhFQUJCMEQ4NTE1RkJBMzE2N0NCNjhFOEQKKzoxMDdCRjAwMEE0RkM0MENCMkRFOTJBQzMzQkE3QzM4NjkxNEI0MjU2MzgKKzoxMDdDMDAwMDdCN0RGRDQ4QjUxNkZDMEQ3ODdGODcwNkUzODVEN0MzREQKKzoxMDdDMTAwMDc4MEQ2QTRGMDlEODFEQ0U3MTNDNDU5NUI2NzFCQ0EzNEQKKzoxMDdDMjAwMEVBNzA5Q0VERTkyQzlFMkFDNkYxOENBQTczOENFM0FEMTgKKzoxMDdDMzAwMEVERTRFRkY5MzgzQjgwQ0Y1MjhEQjNBMUU4MUFGQjdDMUQKKzoxMDdDNDAwMDQ2MkRDMzcxRjYzQUM2RDkzMDZBOTk2MzlDMzQzNjFGMDMKKzoxMDdDNTAwMEZBOUU4RjEzQkJEODM4OUUzMTUzRURGMzE5NUQ4RkUzMzUKKzoxMDdDNjAwMEZDQzAzOTlGRDFGNThFNzEzNDFDMDdERUMzMzhENEYwQzcKKzoxMDdDNzAwMEQ1RTFCRTJDRDVEM0IzMDRFOUZGMEIxRkRBMzlBQTI3MEYKKzoxMDdDODAwMEYyMjhEQTM5QUZGOEQwQ0VBMUI1NENBODQ3NEE5OTdGOEYKKzoxMDdDOTAwMDdCNEY3QTE2RDJFNzgzMzQ0QTdGQ0Q0QUU3MjhDRjNCMjEKKzoxMDdDQTAwMDg4QTI1RjdDMjcwNzkxQzQyODQ0NTRCRkFERTQzQ0I4NDgKKzoxMDdDQjAwMEY4RjA5QzUxQ0RGMDNDMzYzREI0MTBGQ0QxODdGQzE4NTcKKzoxMDdDQzAwMEM3N0JGN0Q4NzRGNThFMjRGQUU4Q0U3NkY3Qjk4NDg1QTkKKzoxMDdDRDAwMDlGRkJGNDJBOEZDNzg2RDJEOTNFQTQyODlGRTNGMTlGNDkKKzoxMDdDRTAwMEQ3MjE0RTQ0OUY2RkI4MDlGQTQzNjc3OUJDQTgxRkRFQkQKKzoxMDdDRjAwMDY2NkM3NzhFRUZFQjlEREJDM0Q2QTkwRkI2OUY3MUEzQTEKKzoxMDdEMDAwMDFEMTEyNTJGOTQ1MUI4RTdGMzY5RENEOTZFQkYyRkIzNEQKKzoxMDdEMTAwMDgxRDNBM0U3QTcxRTc2MEU4ODk4MjNGMDNFQkM4RTZDMTUKKzoxMDdEMjAwMDVCQkNGMDc3MjdCRUZDMENDQkJCMjMyM0UwREVERkFGRDAKKzoxMDdEMzAwMEI3M0VGNjM0NTQ3QjUxNUEzODcyMTU5RDZGRUREMUVEMzQKKzoxMDdENDAwMEVFMTFCNEZDQUUzQkIxQzBEMDJDRkRENEJBRjFEQ0JEMTkKKzoxMDdENTAwMEYwNDM2RThFQjg2REY2RjMyRDc1RjZGMjZEMEU3QkZBNkMKKzoxMDdENjAwMEQ1RjQyMkIxM0ZDQkM2RDU2MzZFQTBENzdDRDg2M0E1MkUKKzoxMDdENzAwMDI0QkMwRDlFOTg3QzE3NDQ3QTJEMDhCMkI2MDI5RTg2Q0MKKzoxMDdEODAwMEZCREQyNDhFRUI1RDIyMTdFMzlDRDE1QzhDRDM0NEM0RDUKKzoxMDdEOTAwMEJBRTU4MDZGODFEQjZCODYyOTNEMTdEQzI3MjMxRTlEQUEKKzoxMDdEQTAwMEYwMjY0RUE0OUIyRUVBRTcyNDNBRkVCNzFCQ0VGMTBDMzgKKzoxMDdEQjAwMDA2RkZFREFCRURERjQ5RDQ2REJCODc0MEYwQzFENzZBNUMKKzoxMDdEQzAwMEFCRjY5RkI1RjBDN0NEOTE1OUZCQ0ZEQUYwMzRDNzU2NkIKKzoxMDdERDAwMEJFQURGMTY2NUJGRERCNTcyRkI0N0Q1RjE4QkRDQkY2MDIKKzoxMDdERTAwMEZEOEVENkJCNkRFNTNCREJFRkIzRDU1RkRBRDE2Q0ZCMjcKKzoxMDdERjAwMDdFNTc2Q0EzRURGQkYyNDNEQjZERTUxNTVEQkI2Q0Y1QzcKKzoxMDdFMDAwMDFCOEVFREIzN0Q3NzlEMThGRjE1RjQwMzdGMjNFMzc5NzcKKzoxMDdFMTAwMEU3RjdCNTczNUJDMTdFN0IzRkE4RTA3RUNFOUI3Q0ZGMUUKKzoxMDdFMjAwMEVFNkQ3RURGQ0Y0QUUwQkQyOTIwM0YxM0JERTAzNzM0NDEKKzoxMDdFMzAwMEE0NTE3OUE2QjZDNDA0MkQ3NzdERUI1NEQwMjMwNEFGQUEKKzoxMDdFNDAwMEQ0MjhENzQ2QUM4RjUyNjc3NzBBM0Y5RjI4NzdBODI0NUIKKzoxMDdFNTAwMDlFMEREQjJCRkQ3MUQ4MUVCOUZGQkI5MkEwREYyN0E2QkMKKzoxMDdFNjAwMEZFMkU3NzI4NDlCRjJCMDkyNTY5QkYxN0E0OUUxMkIwQTMKKzoxMDdFNzAwMDFGQTMyRjdCOTI5RTAzRUY5NzRCMzI4MjVDRTQzRUM5OTcKKzoxMDdFODAwMEYzMkU1MjY3RjVERkU2NkIyQzNFRjQ0Q0ZBQjRGOTVBNDgKKzoxMDdFOTAwMDJFREM4RkMxRTRCREZFNDhGRTM0RjAxQkVBRDU3ODQ5RTQKKzoxMDdFQTAwMEIyN0Q5QkJFRjFCQTI0QkMzNzcwQkVDNkU0RTVBRUQ4NDUKKzoxMDdFQjAwMDA4NUIzQzZERjlBMTMxMzZCOTdGMjkyRDcyOTM0NkVCRjEKKzoxMDdFQzAwMDlEM0YyOUEzOUUyNUYxQTc0NjdERjUyQTE4REY5QzBGMkIKKzoxMDdFRDAwMEVGQzlCMTVDNUMxRjVGNkMzMkY3OUZBNTdFQzA0QjRENTQKKzoxMDdFRTAwMDM1RjhGQ0Q3QTZGMEZFQjNENDI1N0NCNUE5MTZDQkJGRDgKKzoxMDdFRjAwMDZGOEFFMDMzRDE1NDg3Q0ZENzlCMUFGMUZCRDlBNkQ1MkYKKzoxMDdGMDAwMDU4M0VENzE0QzVFNzlCNERBREY4N0NCQkE5MURCRjlGNUMKKzoxMDdGMTAwMDZGRUFDMEYyQkI0RDMxN0MwQTM5MTBGNjJFMDk3MzdCMzMKKzoxMDdGMjAwMDUyNkM5ODEwNTZFRUU1NzM5MEYzNDQxQ0QzQzBGQkEzM0IKKzoxMDdGMzAwMDdBQjUwRjRBQzA4RUVFN0RDOTgzNzlCN0E5RjBFNEU0MjMKKzoxMDdGNDAwMEJCRDRGNDMzNzFCRDVGMTJCM0M3OTlDNUQzOTdDNkU4RUMKKzoxMDdGNTAwMEUzNzM5MTFBQzg5MUQ4Mzg1NkM1Mzg1QURBMkZBRTQ0MEYKKzoxMDdGNjAwMDdCOUNCRTU3RDg2NUIyMzE2MzRFOTI3QjNCRjE0MkU0QjUKKzoxMDdGNzAwMDYxODNEMzQ5RDQzRkY3REQ3RkFGNTg1NDA2RjQyOTQyREIKKzoxMDdGODAwMDNDQTUzRDI1MzczMkJBRUQzN0JFN0FENUUwRjg0MzlCQTQKKzoxMDdGOTAwMDJGN0YyMDFFQTU1RkZDNkUxNEM0QTdERUM5MTVGOEVDNjgKKzoxMDdGQTAwMDFFMDVDMTJENDUwQkVGMDIzRUVDM0RFQUMxNzlGNTFFRTEKKzoxMDdGQjAwMDRGNjdGOTI4MTA1NDFCNDJGRUVCRjI0M0JFOTg1NTNGMjEKKzoxMDdGQzAwMEFDRThDQThDRDlGNTQ1N0VDQ0FBMkY3QTRGRUYwRjgwNEEKKzoxMDdGRDAwMERDQUYwQUM5QjFCMzEzODEzRjRDQ0UxRjhDRUY0NEZGMTUKKzoxMDdGRTAwMDJCQkEwQTYzOUFBRDFGN0JCOUI3NURBQUMxN0IxRjg5MDMKKzoxMDdGRjAwMDlFMzEyRjg5RkYyMTlFQUI0MjJBOEVGM0Y2QTEzMTk4NDQKKzoxMDgwMDAwMDdGNDBGREM0RDg1OTE2RUY4Q0IxNzE0MzMxMkI1RkQ2MzgKKzoxMDgwMTAwMEFGNEU4RjlEQ0RFRTg3MkY1NUJGOUYzNjdDODQxQzI1OUMKKzoxMDgwMjAwMDdGRjBBNjNFOEYzQkQ4OTMyOEZGQTZFMkZENkVDN0REMEEKKzoxMDgwMzAwMDFGQzBCQUUzQTFGRjdGOENGOTQyMEE5NjQ1QkYwRDVERDAKKzoxMDgwNDAwMDcyRDQwM0U3NzlDOTYxREI3OEI0OUQyRTdDNzQ1OEFGOTQKKzoxMDgwNTAwMDUyRDNERDlFMEZGRTdCRTAyNTVDQjdEOUY5RjIwODlDNzgKKzoxMDgwNjAwMDJGQTdGRDVENTBCNDU2RTk3M0ZERTdDQjFCMzg1RkFFMUIKKzoxMDgwNzAwMEYwMjZENDA4N0RGNUNFRDEzMTE3Q0QwNzc5QkJFOTc0NTAKKzoxMDgwODAwMDUwMTkwQjc5MDRFRDc4NzE0NDVERDdGODZBRDA4RkVGMDEKKzoxMDgwOTAwMDFDNUQ5QjA3RjFCNEU1NzJFRkJEQzlDRUNEN0VBOEIxRTIKKzoxMDgwQTAwMDM4MUI4OUI5N0IxMjk2Rjk4OEY4MEMyMUI0NUY2RjNGQjEKKzoxMDgwQjAwMEZDQzBFOUU3MkM2NUE3QkUxNjRGOTc5RkM1REQ1NzFFOEMKKzoxMDgwQzAwMDNFMzNGMzBCMTRGRTk1QzdERTUzMDE4RTYzNUFDNEU1QUQKKzoxMDgwRDAwMEI3Q0M1RkUyRTdFQjk3MUQ3QTREODVGOUJERTk4RTk2NDcKKzoxMDgwRTAwMERDN0YxMTNEMzUxMDRFMkQ2NERCMEY4RDkyNkU5MEUzRDkKKzoxMDgwRjAwMDQ1RUMzNzE4ODA5RkJFRjYwQTE1Q0RCNzdFRUQyNkYwMDkKKzoxMDgxMDAwMEJCMEU2MkJGNDI5QzdCNTg0Q0MyMDFDMEQ3QTJBM0NCMUUKKzoxMDgxMTAwMDMxM0VGQ0Q2MTMzNzcwN0JBRUJEMDJGOEUzMURFMkFBRjgKKzoxMDgxMjAwMDgxRjlCRDQzOUUwRjRDQjRFMEFGRDhDRkZDMThEMkNBNDIKKzoxMDgxMzAwMEVDMTg3MTJFOTBEQUIzMzZCQjY2Njk4N0JEQkM4NENDNkYKKzoxMDgxNDAwMENEMDNCREIxRTQyMTM3ODk1MTE0REQ0NTJDRjcyRkQxODIKKzoxMDgxNTAwMDc5RTdGODk5QkRCQjk0MzRBRTA3N0I0RUYxMzBGRjYwRjAKKzoxMDgxNjAwMDUxOTAyODIzQTgzRTVERjE5Mzg3MkJDMEVFQkZEMkNGNUMKKzoxMDgxNzAwMEY2MUQ0NTFDRTNBRTJDNjZFRjJEQ0I4OUE5QjA5RkYwMTAKKzoxMDgxODAwMDg3QTMxM0U3N0YwMUI4Q0YxMzVCMEZFQjMyQzk0OEJFNUIKKzoxMDgxOTAwMEZGNzc0N0FCMURCRUMxRTA3N0MyMkJDRUJEMEY4OEE3Q0UKKzoxMDgxQTAwMDcwMzhFNDQzNTJEMkZDQjQyOTdFQ0U3NzVDOEZBQ0YxQjgKKzoxMDgxQjAwMERCRURGQzBEOEVGMjZDM0Y4RkIzQ0E0NDA2M0FCRjEzNjEKKzoxMDgxQzAwMEY0NDY1RDE5RjgxRENGRDk0NjhGNzg4Q0I1M0FEQ0E3RjcKKzoxMDgxRDAwMDE1MEUwMzdGNTFCQjYwMDJCMUQ0RkJBMzE2QzFGN0U3QjQKKzoxMDgxRTAwMEE1RTc5NkUwMzk3MzI1M0UwMUYzRjFCQzA0RjMxNDU1N0QKKzoxMDgxRjAwMENFMEY3MjVBNjAwMkY5MUNDNDQ5MUJEMUE5NUZFQjBCNjgKKzoxMDgyMDAwMDc0NDI3OUJEOUY5RDgzNkEwMDM5QTVGRDZEMDlDQzNDMDAKKzoxMDgyMTAwMDBENzE3RDJGNjk4RjlCODVCMEZGNkQ4RjdGRkI3NDdCMDgKKzoxMDgyMjAwMDM5MURFNDA5RjQwOUJDMDA3QTE4MDRFMzQ1RTlBNUY2MTAKKzoxMDgyMzAwMDdBN0VDMzVFNUVENjg3QTdCODZDM0RGNzExRjA2QTcxOEYKKzoxMDgyNDAwMEY4OUQyMTUyQTk5Q0I3REFDRDJCQkQwQzdFQjgxMTFDMkMKKzoxMDgyNTAwMEVBREZDM0VERjk5NTQ0OEY2MkRFNjI4OEYxQzEzREIzNzgKKzoxMDgyNjAwMDU4REVDNDNEN0VERDg4RDJFRjkyNjJFMkY5ODgwREQwRkYKKzoxMDgyNzAwMEQ0QjI4RTM1N0MyODkxOTg0NUFGMzcyODNEMkFGMDY1RDkKKzoxMDgyODAwMEMzODcwQUJFREZBQjQ1QkUwNTc4NTU4OTg5NzZBRTk3QjAKKzoxMDgyOTAwMDIyMERGNkFGMTVBREM2NjZGNzkyMDI3RTJGQTAyMzdGQTIKKzoxMDgyQTAwMEExQ0QxRkI0Rjk3QjQyMkZCOEI5NUVBNEZBNjI4MzNGMTcKKzoxMDgyQjAwMDE3RjQ2MENGNENCNkFGOUU1MEQ5RkUwRUFCQTdGNkQ3RTEKKzoxMDgyQzAwMDZCMDMzODUyRDVGM0Y1RDdEQjlFQUNERThBOUZGQ0YwMEEKKzoxMDgyRDAwMDg5Mjg5NUY3NjVGRkYyRUQwMDZDQTZCREE1QjRFNzQxQ0UKKzoxMDgyRTAwMEZFNDNGREMxNzUwMUUwRTMzNzk1NjgwMEU2RkQ1NjJDQkQKKzoxMDgyRjAwMDc5REVGQjJGQjlCRTgzN0MyNzM4MkZCRjkyRDNFOUVERkYKKzoxMDgzMDAwMDdGREU3QzIzRTBGRDgzODM2RTNDNkZERjcwQzgxM0Y3NTQKKzoxMDgzMTAwMDUwMjJBRTNDN0ExN0UzQTc0MzlFRDc1ODc5MDNGRTZFRUUKKzoxMDgzMjAwMDU0QzMzMUJCQkMyRDdCRjREQjc5M0E2RUVFNDU0N0YwOEMKKzoxMDgzMzAwMEZCRDhEMTdFNUU3OUUwOEYzM0MxMUU2OTIwM0RBODI3MkUKKzoxMDgzNDAwMDlDRUQ2MEZDMEZCMzcwRkQ1QTA4RTdGRTlEREY0NUJFNTMKKzoxMDgzNTAwMDU1MDNFN0ZCODZBMzlCMzFBRkFBRTFFODJDQ0NBMzZBQzcKKzoxMDgzNjAwMDcwQzg3OTFERjc0MzhFRjlFREJGQjMyMUYwNDE2MkNDOUYKKzoxMDgzNzAwMDJFNUVGQkZERUY0Qzc4OERDMjczRkVDMEFGMDM5MjJERDUKKzoxMDgzODAwMDdFQzRGNDQ0NkZENzFEREY3QjUyNEZBRERGREZFNTdFNDcKKzoxMDgzOTAwMDdEN0ZCQjE4QjZEMzhGMzEzQjlFMUM2N0NGN0E3NzNDNkQKKzoxMDgzQTAwMDAwN0U1M0ZEM0VCNzQxMzUwOEE5RkZFMUZFNDdCRTBCRjUKKzoxMDgzQjAwMEZDRkRCMjA3RTMwRENCN0ZGOEY0OEJEN0QwRjJGMkM3MDgKKzoxMDgzQzAwMERDMzlCM0Q5MzQzNEM4MDMxNjc0ODEzM0VFOTBBRjJCNDMKKzoxMDgzRDAwMEU4QjBFQ0M3NEZBQkZBNTVFQ0ZEMDM1OUZERjQ1OEZFN0QKKzoxMDgzRTAwMEQ4NDk5NTVDMzUxMDdGRDNCQjRFQUFFQ0ZDQjk4MzJFREYKKzoxMDgzRjAwMDVEQUZDRDA0QkI3QkVERjdGRkFDODI3Q0JENzU0MjIyNDcKKzoxMDg0MDAwMEMzMEEwN0I2QUZEQkY3MzREQTc1ODAyN0E0MjNBNzUzNzYKKzoxMDg0MTAwMDFGREQwNkQwMkI3RUUzOTM5M0IwNUUxMEQ2QjFDMUU4OEEKKzoxMDg0MjAwMEY1NURFMDk5NUNFNEVCMUYzRDA5RkIwNUZGRUEzMTAwRDcKKzoxMDg0MzAwMDBGNzUzRkZBNDYwMEU2RjM4NkQyQzhGOEZCRTE3NTc5N0UKKzoxMDg0NDAwMEIwOEY1RUU3OEVFNjA1RjFDOURFRDdFREZEMjZGMkRERTEKKzoxMDg0NTAwMEQyMzNERkNDNjM3OTUwNjYzRUZCNURBMzY4M0VDNjAxMzQKKzoxMDg0NjAwMEY3REM4NEYzNUM0MjIyQzg3Rjc1MEZDQjk4ODdGRUJFOTEKKzoxMDg0NzAwMDQyNkExRTRCMjIxRkQ3MDU5ODFFN0JBM0QzODM5N0RGMkEKKzoxMDg0ODAwMEJEMDEwQTE3RkNDNUU3RTUxODNCNkZDQkYyMTJCRjI5MDcKKzoxMDg0OTAwMEY2M0RFMERFNDY1QTdFREZDQkU4OTUxQjcwODk3QkFENkEKKzoxMDg0QTAwMEJDMzZCRTNEQjBBMTFCRThGNEY2NDg3MzE4QzQyQjI5QjYKKzoxMDg0QjAwMDFFQTIxQzZGMTJFODIxRjlDQzhDNjE4QzRFNDQ1NzJBMDUKKzoxMDg0QzAwMDc4M0JBQTI3QTdDMzdCQThERkVEMzY3RDEzNkNFREY4QjgKKzoxMDg0RDAwMEJBQzZDNkJGODc4RjRGRTE0RTAzRkJFQzhEM0M2QUVGRjcKKzoxMDg0RTAwMDI0OTlERkYyODA5MDdGNkE3RjU4RjhDQzIyRTc0Q0VFMjcKKzoxMDg0RjAwMDBGNkM2NDcyMkVFNDNFMzZBNzA2QkVGRkRCMEI0QzhFN0IKKzoxMDg1MDAwMEEwMURBQ0YzMTRBRUY4MzBGQzdFNzI5RTg0N0FDMTQzOTkKKzoxMDg1MTAwMEUyQzlFNEZCODA5QkNCQjdGRDNCRjVDQUQxQkUxNTdDMUQKKzoxMDg1MjAwMDQyRTE1NzYwRERFQUU3MTdCNkNGNEJFOTgwRjZEQjkyMTAKKzoxMDg1MzAwMDg3Njg3QkFCN0QwRUUzNjIzREI1RkZCRDY1QkQ1RkNBNUQKKzoxMDg1NDAwMEY1QzEzNTAxQzdFRkVFRUNDOTFERDI3RDc5RjVFRUQ4NDYKKzoxMDg1NTAwMDIzREYwNUY5QTVGMjBBRUI0RkZEMEZERDk4MjdGMkE3RkYKKzoxMDg1NjAwMEMzNEZCREY4NzVDQUU3N0ZFQTEyNzI2QkQ3QTc0RUI5NDEKKzoxMDg1NzAwMEFEM0IzMjk5MjQ5M0RCM0Y2OTA2NDkyQUI3RjQ3RDUyMUIKKzoxMDg1ODAwMEI5RDUxMkM4Q0ZGRjUxRkE1NEUwNkY1MUMwOUVFNzI0MEQKKzoxMDg1OTAwMEY0NjMyQTNDM0FGNUUzREZGQzNBRTJEM0E5MUZFOURGQjIKKzoxMDg1QTAwMDBCQTQ2MjIwMUYwQUZFMTM3Q0I3RUMwNzJCRjA3NzQxNjcKKzoxMDg1QjAwMEZBRjg1M0YwNUYxRjdGMEFGRTczQ0VENzhFM0ZFN0Y3QkUKKzoxMDg1QzAwMDJCQzE1MDExRjE2MkZBNzRBRjIxNTEzRkM0NTM3RjJFNzkKKzoxMDg1RDAwMDYzM0NGNTAyODU2OTNEQTVGMzg1QzM4NTc4OEU3ODlENUEKKzoxMDg1RTAwMDhGRjlFNzE3ODIzRDgxQUMzMkJDMDcwN0NCM0RCOUVBNzIKKzoxMDg1RjAwMDdBRDAxN0UyN0Q4RjhGQzVCRjJGODQ3QjAyRDYzQzkwNDcKKzoxMDg2MDAwMEQ3OEVDQjAxRDhFRjRBQzQ0ODREMzI3Rjg0NkE2NDg0NDgKKzoxMDg2MTAwMDIzNDE1MjdENjdGMUUyMEI2MEZGQzE3ODY5QTM2MjQwOUMKKzoxMDg2MjAwMEI3MTlCMjM2NkEzNUY4RjlFREVDQkNGQ0UyRTZBRjA1RjUKKzoxMDg2MzAwMDYwMUZGRUMyRjEzMURCNDA3RkRERjlBQzRDRjhFRjI4NjIKKzoxMDg2NDAwMDJBOTA2RjcyMDdBN0ZGOUIyNEJBNzMyQTlERTcxREM3NjQKKzoxMDg2NTAwMDk5NUZCMUI4MkQzOUJGMkNFM0Y1OTc2OEY3QThBMDk3QkIKKzoxMDg2NjAwMEE4NUZGMEJBMzUxRUJFOENGRjlFNjRERDFFQzdGQkUzMUIKKzoxMDg2NzAwMDM3MjA1RjJENzNGMDU1ODRGQjhEM0YxNDdDNzUzNUI5MjEKKzoxMDg2ODAwMDlBRkI2RDJFNkIzRURCMENCOTZDMUJEODI1MTc0RUIzRDUKKzoxMDg2OTAwMDM4NjRFRjcxMTlFOUQxN0I1ODYyRjk0RjEwMEY5RTAyQ0YKKzoxMDg2QTAwMEZDRDBBMzVBRjNEOENFMDNGRjI1QjlERkEwRUZGQkUzM0MKKzoxMDg2QjAwMEJGQUJCODlGNTZBOTdGRTI5NTA5QkJFOUYzRkMxMzJGMjYKKzoxMDg2QzAwMDk3RkMwQ0NBM0ZGOUVEQTg1N0M4QzBGQUQzNEZGQzA1NzgKKzoxMDg2RDAwMEY3QjMyRjlDRjAyMDFDMTc0RUZDNzJENEZENTA3RUQyQjUKKzoxMDg2RTAwMDgzRjdENTVDNThFMzYxRjk5RjI3RkNCMUIxRjA3RDI0OTUKKzoxMDg2RjAwMENCMTc1QUZCRjMzRjRGNDhFMEJBRDQ4Mjc0N0IyOUMwQjIKKzoxMDg3MDAwMEZDQjFERUUzRkZGRTdCQzgxRkVFM0RFRUQxNjExRTBEMjYKKzoxMDg3MTAwMDI3RDI3MTdGQUJFMTQ5MUZDNjY5MkVGQ0ZDQ0YxNUQ2NkQKKzoxMDg3MjAwMDdDQTZDQjlEQ0Y0QTdFMUZFMjA1M0ZBOTg1M0NFNTBCODkKKzoxMDg3MzAwMDk5NkNERkEwRTE2NzUzRjZDMzM5QTIxNTQ3NEZBQUIwODEKKzoxMDg3NDAwMDFGMzNGRDE3N0Y5RDAwN0FFN0MyMTE2NjRGQkNFQjRFQzkKKzoxMDg3NTAwMEVDODU3REQ2M0YwNDZFREZFMDg2RjgyRUFDRDdDMzA5RUEKKzoxMDg3NjAwMDY5Q0E4ODVEMEZGN0UxMENDNDBCQzNDMzA1OEEwNzk4N0IKKzoxMDg3NzAwMDE3QzU0QjFERThDQjU0RjhGODNGRkZCMEY4Nzg2RjAxRjAKKzoxMDg3ODAwMDhDNUY3RkZDRjMyODM3RkQ3ODkxNENGNkRFMUY4M0EzQzYKKzoxMDg3OTAwMDRENzRGRUVDRkQ4OTNGNEYwMEZCRTg0RjVEQ0RCOENFMzgKKzoxMDg3QTAwMDBGMzZFRkZDOENGRkQ3RTYyREM1ODczMkVGQ0E3RkQ4OTYKKzoxMDg3QjAwMDc5MzNGRTNGMTFEMDU5REU5RjQzMEUwNkYyRjk0RkVFOUEKKzoxMDg3QzAwMEM1RjI4RkZDMDZDMjNCNDRGOUFGRkQ4NzlERkYyN0E0OEQKKzoxMDg3RDAwMEZCMTE0QUY3QzBFMDc0RkY2RjE5NkM1RkY4MUY2RkRFODIKKzoxMDg3RTAwMDgzRDFGRDU5NEU3NzdGMTBGMjEwMkVGQ0ZDQUYxODVGM0QKKzoxMDg3RjAwMDE3RjMxRjZDREUzQkZGOTNDRTVCRDg0MzlCNUM0NjdCM0QKKzoxMDg4MDAwMDUxMjFFNDYxQzdCQjc1MEFFN0JBRDJCOUVEMTA5NjkyNUYKKzoxMDg4MTAwMDc5REVCNTEzQUU2NzMyOTg3RjIxNEIyQzZFNDM0NkIyOUEKKzoxMDg4MjAwMEY4MTFFMUZFNDZERkVGNDE2QUVDN0M5NUEyQUQ2N0Y3RjcKKzoxMDg4MzAwMDkxMjkwNkRFQUZCN0U5OEE0NTA2RTY3NjkwRjI5NzIyREYKKzoxMDg4NDAwMDUwMkU5ODhBQkY3M0VCRjRCQjk0MkJCRTc0MUFFQ0ZFQzcKKzoxMDg4NTAwMDk2NjYwQTFGMURBN0M1QUYwNEE5RTU0NERDQTVBRUI4RkUKKzoxMDg4NjAwMDY3MDIzRTVGODNFNzA2MUVGRjcyMDc1NTlCREZBMTM5NTMKKzoxMDg4NzAwMEZDMDU5RjZFRkZFRUUxRkQ3QkM5QTkyMEU0MkY3OTBENzkKKzoxMDg4ODAwMDA1RjM1MzdEQTQzRDZBQ0QzN0YwMTA0QjNCRkFCRDEzODEKKzoxMDg4OTAwMDdFMTBEMDYyNEY1RTJBRkVGRTlDQzFGQzRGNTkyQUVGMkIKKzoxMDg4QTAwMDg2QkM1ODMyREVDNUVFMzcyN0VDNUNGMUE2MDIyM0I2NTMKKzoxMDg4QjAwMDg5RTU1RDc4RURGODVDREYwRDc4NTQwOEY1MEZEOUJDREIKKzoxMDg4QzAwMEQwQUYyNERDOUY1NDc4MTc0QUE5Q0JGNEQ5RUI3MTdGNDEKKzoxMDg4RDAwMDY5NTBGQTMwN0E4Q0FBRTdGNDU5NjVBMzg3QzBGQjQ1NDIKKzoxMDg4RTAwMEU4NjJBMzg3QzBFRkE1RDJDNTQ5MEYyN0ZFN0Y5NUMxRDcKKzoxMDg4RjAwMEUyNzQ4MjRFQjY3QzkwNUNFNjk3QzRBOTgxRkNDQkMzM0YKKzoxMDg5MDAwMEZCMzEyRUYyQ0UzRkJGNzYyM0YwRTlGMjlGQzlDNDRCNzQKKzoxMDg5MTAwMERCQkY3QkQ4NEZFMjIwQkY0QTRDMDUzRjZCRDk1MTE5RDIKKzoxMDg5MjAwMEUzQzJGRjE3NEJFRTQ5QTcwMDgwMDAwMDAwMDAwMDAwRTMKKzoxMDg5MzAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRUQ3RDdCN0M1NEQ1RjAKKzoxMDg5NDAwMEI1RjAzRTMzNjcyNjMzOTk5OTY0RjI5QUNDRTRDNTI0OTYKKzoxMDg5NTAwMDgxMTgzNEUwMjQ4NDgwODIzQTIxODAyMEY0M0FBMDA4RUYKKzoxMDg5NjAwMDdBQTM4RTEwMjA5ODI3NDg1QkRBRUE4RjA5NDExQTFFRjUKKzoxMDg5NzAwMEI2NDFFNUExNDUzQTIwMjhBREQ4MDYxQUI5QTBBODgzOEEKKzoxMDg5ODAwMDNDQzQ1NjZGQTNFNURFQTI0NTBEOEE4MkM4MjNBNTE3MTUKKzoxMDg5OTAwMDNGREFDRjVCQkVCNUQ2REUzQjczQ0U2NDAyREFBRkJGNDMKKzoxMDg5QTAwMEZCRkRGM0U1OUY5MzdEMUU3QkFGQkRERTZCRURCNUY3NjEKKzoxMDg5QjAwMDVDQkUwQzdGQjczMDc2NTk1QzE5NkI2NTJDODNCMUJBRkQKKzoxMDg5QzAwMDVGM0IxODRCNjdFQ0MxOUQwOUUxQzlGOTcwRERGNUU5MjIKKzoxMDg5RDAwMDUwMzY4NEIxNzM0QjdBMEU2NUMzRkREMDJGMTVERjU2MjgKKzoxMDg5RTAwMDdDM0RENDNERjQwRUI4RkZBMENBRUUwRjk0NDRGQjkxMzkKKzoxMDg5RjAwMEQ3NTRBNzgxQjFFMThDOUREOTYzOUIxMUI2MzNBNjZDODYKKzoxMDhBMDAwMERCNzcxRkY1REIzMUREOTRBMDQ0REZCMzNBNEQzNDJFMjQKKzoxMDhBMTAwMEJDRTdDN0U3QTE1RjI4RTE0MTRBREZGRTE4NkJFMUZEMzMKKzoxMDhBMjAwMEZENDJFMUYwRUQzNjg1QUQwOERGQjY0REU2MjBDMEQxNjAKKzoxMDhBMzAwMEI0RURDRjY2M0ZDMDUxRjVFQjE3OTNCQTYxQkNBNkREMkMKKzoxMDhBNDAwMDQ2MTYyOTY2RjQ3Nzk5RTE3MzYzMjQ2MTI4NUQ4RkUzMDQKKzoxMDhBNTAwMDk1MzFCRjVEQTk2MEFDMTFGRkY1QzJCNUIzNjEzMjRCNzIKKzoxMDhBNjAwMDgyNkJDN0NBM0YxQjkzRjA3QkQzMjdERDk2RThGNzc1NkYKKzoxMDhBNzAwMEJGN0U3NTU3MDg1MDUzRjc5QkU3OTNCQzcwM0REREI1M0IKKzoxMDhBODAwMDM1ODk5NTUwN0YwRjk4OTMxOTUzRURBQUVFN0RFQ0Y3MzkKKzoxMDhBOTAwMDUyNkFERjdFNjA1Q0M2NUM3MDlGREY2MjREMURDQkY5NjEKKzoxMDhBQTAwMDc4OURERjM5QzkxMDNFMDZGRDQ4Qjg2MTdFQTdGMTFGRTkKKzoxMDhBQjAwMDBGNjMyMzlEOEVGNENGQUY4M0ZGNDdCMDExOTc4RDcwNjYKKzoxMDhBQzAwMEREOTZDNkQ4MEQ3REYxMTRDNTU3ODhEM0YzQzU4QjFCMzEKKzoxMDhBRDAwMDQzODA5RjMzM0JCRkRDODhGMEQ3RkZGRDJGMUI3RjA0MTMKKzoxMDhBRTAwMEY4NjNBRjU5OUQ1QjYxREU0REJGRkM4RjI0QTRBRkZDRTIKKzoxMDhBRjAwMDZFQUE1M0ExRUZDRUU1QjI5MDA3REUzQkY3N0U0MjM4NzcKKzoxMDhCMDAwMDA0QjdDRUJEN0EzMkNGMEJGMzNEQjdFM0FGMkUyRkJDMDcKKzoxMDhCMTAwMEJGRjBENTcxOTkzOEZGODUyRjU1NjUzMjdCRkY3MDlDNkEKKzoxMDhCMjAwMDVCQ0M1ODM4NDEwQjU3OThFOEU4REQwRDlENjY0MjczRTEKKzoxMDhCMzAwMEFGQjhDNkQwNjM3RkU3RkUzQzg0RjNFQ0QxMDQ1RjAyOUMKKzoxMDhCNDAwMEUyMDlFRTJEMkE0M0ZBMDA5RDg2RjJGNkMzODBERkM2QzUKKzoxMDhCNTAwMEVEM0ZGRUIzNzE2ODNDM0M4N0IyMEQ2RUE0RUJBN0UzMUEKKzoxMDhCNjAwMDExNEVDNjIyRDlDQzhERjhFRDU5RTZCNEY3N0RCRjk3RUEKKzoxMDhCNzAwMDVFNDc4MDlFRDc3RjAzQkE2RDVGQ0VDN0VEMDBCQTI1RjIKKzoxMDhCODAwMEY1QTVEQjU5RkMwN0U4RDM4NDc0QjM0NUU5NzY5MTA1NzQKKzoxMDhCOTAwMDdGRUUyOTg0NzY2NzFBRDEzNTFFQkUyMkRGMDA1RkI1Q0QKKzoxMDhCQTAwMDBBRUZGRjI2QTdGRjg3NEU5NDlGOURCNjVFN0E0RDQ2M0IKKzoxMDhCQjAwMDdBQkQ3ODMxOEYwMUJENEY5OTdBRUU2M0U1OENGNUJDQjMKKzoxMDhCQzAwMDlBRTBEQzBDRjcxRjdDRjU4RjI0MjdFNzVFN0FENzhDQzAKKzoxMDhCRDAwMDc0ODQzRkJCMDJGMzNBQzc3QUZGQkE3MDlFOEQ4QTk4QkQKKzoxMDhCRTAwMEU3MTY0NzI0MjEyOThBRjdDNkYwOTQwOURFMjRCQTdGQzQKKzoxMDhCRjAwMDlDRUU4NzM5RkYyMkZFQjI5MTNFRTE3RDc3MkE3MUU4MzMKKzoxMDhDMDAwMEQxRTEyQ0EwNzlCMDcwMDZDREJCNjFDQjlGQ0NDODM3MjkKKzoxMDhDMTAwMDkyNEU0ODFGNjUyNEQyRUJGODc4QkMyRkU5MjRFNzFENUIKKzoxMDhDMjAwMERCOUYxM0YxMzA0MjQzQjcyRDVDMEVGQkQyQjVDN0NDQUUKKzoxMDhDMzAwMDBBRTNEMTBCRTBDNUVGMTA1RTY4OUZEQjk0QTAyQUM5NjAKKzoxMDhDNDAwMEZDN0UwRUNDRTM5Qzg5Q0RFODQwMzhDMkNBMUZFM0QxM0MKKzoxMDhDNTAwMDk3QjEyNTM0OUYxNzYyRTU1MkNDRUY2QTcyNzkzNUI4MjcKKzoxMDhDNjAwMEZGNTFCQzNDRTM3NDUyRkYxMjNGNjdCRThFQUY5RjBGQjMKKzoxMDhDNzAwMEExOUMwM0ZDQkJFREMxODNDODNGOEM1OUMyMjdBMDlGQjgKKzoxMDhDODAwMEZCOTlDMjkyMEJBMzc4OTNGMDlFNTExOUU5REQzM0JGOTMKKzoxMDhDOTAwMDM0ODY0MzMwRkY2NTFERkI0OUNGQzZDQTM3Q0NDQkRGRDYKKzoxMDhDQTAwMDExNjdCQzNGOEFGMTFBNzdFRjFCOEE3QUU4Q0MxQjdCRUQKKzoxMDhDQjAwMDg4RkYxQUI3MUYzNzg3QTA5RjQzREI3RTYzRUUyRTg5OUMKKzoxMDhDQzAwMEYyM0JFQUVGQjA0NjdGOUZGOUQ1QkVBMUE0NkZCMUZGOUEKKzoxMDhDRDAwMDM4RkFFNjg0RThCRjY5QUZCRUZGQTZFRDdGRDZGNTVGNDAKKzoxMDhDRTAwMDE3RUEzMDNCRUQ1NzFGRTdCNEVBOUY4RUYzM0RERDY1OTEKKzoxMDhDRjAwMDYyQThGRjRFNzcxODI3ODRFMzhDRkI5NkIwNUYxMjRGNzMKKzoxMDhEMDAwMENCREUzNTkzMUQyQjdGMkYzMTlDMDA3ODVBRjhFRTg0RjMKKzoxMDhEMTAwMDNGMjVBN0UzRDVFQzA1RDRCMkNFMTZDRTU3OUQ4RkY4RUMKKzoxMDhEMjAwMEIzOTEyRTlERUZERTYzNDQ3QkIyMEJGMTc4NERCNERGM0YKKzoxMDhEMzAwMDhBMjNDRDU1MEU5MERCOEE2MzgxNzI2NEFCNTg3RDMwRjcKKzoxMDhENDAwMEUyQTg0MTA3Mzc4QzkzODlGQTc5MjlGNEUzODU3RTk4NjQKKzoxMDhENTAwMEVBNzMwN0EwNUY2M0QyRjgwOTA4OEZEMTY5NzA1QUUzRkMKKzoxMDhENjAwMERBNTVERTlGQzkxRTYwNDE4MENCMDQ3NkRCQUJFMTI3N0MKKzoxMDhENzAwMEY3RDRBNEExMkMxOUE3RTczMUEwNUU1ODAwRUM4NUZBMUUKKzoxMDhEODAwMEQ5NkQ2NkM1MkFDMEM3MEM4OUJFQUREMEVGODJDMUZFQzEKKzoxMDhEOTAwMEQyODNEMDVFMzBEQkVEMEJDMTczQ0YxREZDQkJCMzRFNzUKKzoxMDhEQTAwMDdCQzg3MDNEQjZGM0MyMjg0N0I2NEI0NkU2MDVENTc3N0IKKzoxMDhEQjAwMDQ2Nzk3QjBFMDM5NTYwMTM3Qzk1REQ2MTIzM0I2MzUzRkQKKzoxMDhEQzAwMEJERUJBQUExNkRBQjU1N0Q4MDUxRjY5OTNEOTg5QjkyNjQKKzoxMDhERDAwMDgxREY5OUU5M0I0RjhBQTI3RThFRjM0RTYyNDkyODZGNkMKKzoxMDhERTAwMEIyN0ZGOTlFRUM5N0E5OTFBMTM4N0Y2NjYxMkEwM0JCRjcKKzoxMDhERjAwMDkyQzMzOERDNDYzMTlGNDJENkE1MjA3RkI3NEU0OURBNzAKKzoxMDhFMDAwMDhDRUQwRDhFNUFCMkZGNzlBQzY3OUYxRkU4RjY2Q0QyREQKKzoxMDhFMTAwMEY4QzNBOEM3RTA1RjAzQkU5N0RCQUNCN0VGMDMxNkU5NjIKKzoxMDhFMjAwMERCRjkyMTM1NDY3RUJEODYwMEYwNUY2MTlCRkU3RTdBRDAKKzoxMDhFMzAwMDU1RTVGQzAxM0VDNkVFNEJFOTlDQTA4MkZFNEU5RjVFQ0UKKzoxMDhFNDAwMEI5MjMxQjcwM0E2OUM1N0JCQ0ZEN0M2NUE5MDdEQUZGQjUKKzoxMDhFNTAwMEIxQkE2MUEyMEE3QTI0RkRGNzk1QTU3OUQwQkU5MEZBM0QKKzoxMDhFNjAwMDgzODlGNEJDMEU5MDc0MjNBOEZFRDU0MzI3ODY0QUEyQkEKKzoxMDhFNzAwMDcyOUIwMTYwMjYxQjQ5OUU2RjQ2M0M5QzBEOUM1OTg2NDcKKzoxMDhFODAwMDRGMUJBNjdENjU4NjQ3RjgxNzQwM0NFNDhFRTQ3OEM4MDIKKzoxMDhFOTAwMEIxMUZEQkMxRTBGRDAxODZFRTE2RTRDQjlGQkZGQUJGMzgKKzoxMDhFQTAwMDUyRjAzRDJGNzNEMjdDOUQ2Q0E5RjM3MzBCNEU5RThEQjcKKzoxMDhFQjAwMEJDM0NFQzRBRkE0QzY1OUY0QjNFMzQ0NkU1MjBEOTE1NDQKKzoxMDhFQzAwMEJDM0QwNUY4NkFEOUNDRTI3NUUzNTFEN0Q2RkI4OEJGMjMKKzoxMDhFRDAwMDYwNjQyN0Q5NDNGOUJFMzM5REU4NTMyM0U4ODM3MDVBNzEKKzoxMDhFRTAwMDgwQ0Y2NkYzNTc1ODJENkIxNzdBNjhBQzEzQzc1MTQyODEKKzoxMDhFRjAwMEY1QzZDQkQ3N0Q3Qjc4NjY0QUJFNzEzMDA3REU1N0VCNkYKKzoxMDhGMDAwMEJEMDQ1NzU3ODY3RjM2RTJFQkFGMTk0MUJBQ0FGQkVFNzQKKzoxMDhGMTAwMDk5MzNCQzQxQzBFRkNEMjk4MUI5MzgwRkNGOUM0Qjc5MzMKKzoxMDhGMjAwMDA4RkZFNDE0NDZGRDU1Q0RCNUZCRDFBRTVFRDgwQkVBODMKKzoxMDhGMzAwMDJGOEU1Q0M5RUJFNkM1Q0NBNzBFRUFGRkY5RDRENEUwQ0UKKzoxMDhGNDAwMDc3QjFGRjgyRDdCRDNCMEY0MzdGRDdENzk4N0Q1NjE4QTcKKzoxMDhGNTAwMEUyRkE0NUU1M0UzNThERjEwOUExREYyMUU4RTY0NjVBMDIKKzoxMDhGNjAwMEEyREM3RDhGODU1MUVFQ0UyNzI4N0UzRkI0Q0YzRkU0MzMKKzoxMDhGNzAwMDI0QkQ5QzUzMzNGOTMwREFCM0YzQjZGQzhFMDhERUZGMjAKKzoxMDhGODAwMDkxOTdFNDExM0MwMDA1RTUyMTc3NkY3MkM0OUE0NEZDODcKKzoxMDhGOTAwMEZDNTUwQzNGN0ZBNUU3NUZGREI4RTcyRjdCNzc3NzUzNDQKKzoxMDhGQTAwMDdGNEVEMTFGMzg0NEYwM0M1N0QwRTlCQzkxRkJFNUU3MzgKKzoxMDhGQjAwMDE3N0IwOTBFNzAxRkY3QTFCREZEQTZFMzNEOTkyMkZDQUEKKzoxMDhGQzAwMDI0NDE5RjQ3QUNGRTM1NDgwRkMwRkYzQTJERkU3RkQ2QTcKKzoxMDhGRDAwMDNGMUQzN0UyN0I0MDQ3QkFDNkQyNzE4RUE1MzkwRkY1RTcKKzoxMDhGRTAwMEMyODM4MThFRjFBMEIxRDlDOTM5REZBQjQwRTY5RTkyMzAKKzoxMDhGRjAwMDEyREM4MkVGRDdDRkU4M0E2NDIyNjg5QThCNTA2RUZCN0UKKzoxMDkwMDAwMEQyNTkyMTdERUVEQUZCNDA4QjA5REE0RDQ4Mjc2RjVGOUMKKzoxMDkwMTAwMDdBNUVCRkE4OTRFOEE2QTE2RjA3RjY3RkZEREUzRjFCMkUKKzoxMDkwMjAwMDEwN0U0OUQ3NzUwQUI3MDNCMURGQkY5MkEyODg3MUVCRjIKKzoxMDkwMzAwMDVCNEM4MENGMEJCQkNERTRGRkM2QkU3NzMwQzU0QkVGOUEKKzoxMDkwNDAwMEM5RjY1MDRCODU0RjA1MzlDRDM0QjA2MEJDN0UwRkY2NjQKKzoxMDkwNTAwMEU5RDdFMjRCODgwMzdGNkY3RjRFREUxRkUwRkY0RDJEODcKKzoxMDkwNjAwMEZFN0ZENzNGRkVGRjVERTBGRkRGQkYyNUZFOEYyMDlEMjcKKzoxMDkwNzAwMEZCQzNCRkY0QkJFQjg0N0VBODYzQUJDOERGRkNDQzNGNzMKKzoxMDkwODAwMEQ1MzUxMEM2MUY2RkI0OTMzQ0NDREI2QTI0Mzk4NEY3MDYKKzoxMDkwOTAwMDI3N0I1QzUxN0QzMkVGODZFNjdEMzhERjc5Q0YyOEM0QUYKKzoxMDkwQTAwMEI3MzU0MUFFRTdCRjlDMzNGOTEwRUFGN0Q5RUQ3QUZGNDcKKzoxMDkwQjAwMDY5Q0U4QzkwMTlFMTlDQkI1RTdGN0Y1RTM4MjYxRTY0NzIKKzoxMDkwQzAwMDFBQkQwRTdDNzEyNkNBQkYwM0I4REU3MTkzQkQzNDBBODcKKzoxMDkwRDAwMEY5QTg5QTVCOTI4Q0ZFRDI2QjI2RUZFRkM5MUY3RkNCNkIKKzoxMDkwRTAwMEM4MzZDN0MxN0Y1RTZBM0VEOTYzRDlDRTZEMDYyNDY5OTIKKzoxMDkwRjAwMEVDM0NBQkIxMUE1MDVGQ0E3RUM3Q0UyREM5NDRCRjY2RTcKKzoxMDkxMDAwMDgxQzM3QkM1Mzg2Q0MwMjJCRDVEQ0YwRjI1MzJBRkE2QjEKKzoxMDkxMTAwMERGQzJCNjU0NUQ3QjUwN0I5NkVFRkQ2QkQ2MTdFODlFQTIKKzoxMDkxMjAwMDBGMEU1RkFCN0I3RUREQjYzMjVEN0I0OEM3OERCQUY3MzUKKzoxMDkxMzAwMEFGREYzRDQ2RDcyRThERENBNjdCN0ZEOEUxQTlCQUY2RkUKKzoxMDkxNDAwMEYwQUU3Qjc0RUY4RjM4M0E1M0Y3RkM4NkVFMDc3NUNGOUQKKzoxMDkxNTAwMDQ3OUQ1QUEwNkJERkQ0RjM0M0JEMUY2MzYwQTQyNzU5MUEKKzoxMDkxNjAwMEEyNDI3QUYzQzBFMjUzMTUyNzkwRTFDQTk1QjE4OENGQTUKKzoxMDkxNzAwMEFBOTFGQ0REMDNGM0NEMDY2NzEyNUU4QjBDNEVFMDhGRTcKKzoxMDkxODAwMDM3NjY0RjI2M0ZFMEMwN0M5N0RGNEJENzBBM0ZDNjNGOEMKKzoxMDkxOTAwMENDMzhCQTNDMThDN0NGMURFN0ZDQTJFMjg0NjZEQzJBQjMKKzoxMDkxQTAwMDhCNDlBN0U3QzYzOUY1RUQ2MUE5MjI3RTE4QzBGOTY2OUIKKzoxMDkxQjAwMDY0QUE1RUJFOENDRDkzMjM2NjY4NjZDRDFCOTg4OUUzNTYKKzoxMDkxQzAwMDgxOUM4RDRBRTU3MjQ2RDdBQkNBNTk1MjczMDVCNjQxQTgKKzoxMDkxRDAwMENFMkE1M0UzQzgxOTEzRjZCNjUyRjAxMzVDRkRFNjMyRkIKKzoxMDkxRTAwMDY0MkMwN0Q5NjUzRkRFRjREMkZEOTAwQUYxQ0ExODhCRDIKKzoxMDkxRjAwMDJGRTcyMENFQ0JFMDRCNDcyNjFDM0IyMzcwODBGNzI3ODAKKzoxMDkyMDAwMEVDMzMyQjM2N0MxQkZCMkNFNURDNkRGMDg2QzhBRUE1NjEKKzoxMDkyMTAwMDMyQ0EyRjNEMzVCQjI4OTk2OUYwN0I0RkFBNDFFODgzQkMKKzoxMDkyMjAwMDc2MUU0NzNBQjcwRDUzMjUxRTBCQjRGNzI3MEM1NzhCMDQKKzoxMDkyMzAwMEEzRjc5NUI5OTMzMzUxRUVEQ0ZERTg0NUIzQkI3MEYwNkQKKzoxMDkyNDAwMDE2RDBDNzY2NEYzRTVERTVGRDY1MzMwQzEzQzI3MUU4NkQKKzoxMDkyNTAwMERCOTBDQUUzMENFOTc3MEQ4RUZBNUQwRDg4REZCM0VFODMKKzoxMDkyNjAwMEY3RDYwRTAyN0MzNTU2Rjc5MERGRTUzNkI0Q0YzRjg0NTMKKzoxMDkyNzAwMEYzRkFBRDkxRTdDREMwQjM0MkJEMzA1QkY4RDFCMzI3NkYKKzoxMDkyODAwMDNFM0VGRjEwRThBN0Q5RUYwQzIyRkQyNEM3RDlCMDM4MjUKKzoxMDkyOTAwMDMyNThFQjM3RTRGNDEzNTc2RDEzRjA2QzVDRUMxRjVDNDEKKzoxMDkyQTAwMDMzODhFMDIyRkQyMEZERjRCQzUwQzM3ODhDNzcwNkIwRjMKKzoxMDkyQjAwMDY2OEExQkQ3MUE1ODZEQkM3RTk2OEI3RTMyOTFFNDA4NjUKKzoxMDkyQzAwMEFGRDM0RTcyNzI3NkNFQjEyNDE1RTY5MUU4MDgyRTQ3RTAKKzoxMDkyRDAwMDdFOUI3OTdENTcwNUY3QzdGQ0JFQTlDMDNGNzk5MTdCN0UKKzoxMDkyRTAwMEQ3RTJGQjc5NkU5NTg1OTVCRUUzNjc1NjA3REJGMjYxQTEKKzoxMDkyRjAwMDdFNEI1MzBEM0UzQkI1N0IxNDdDM0ZFMTYxQzZEMkUwMTMKKzoxMDkzMDAwMEZEQTU3RjM3MTIzQzRCREZCODgxNjFCQzk2NjA2RjY2NkMKKzoxMDkzMTAwMEU4RDdDQTc5RUQ0RjdEOUFGMDYzRUNCNDkxMUQ2NEU4MEIKKzoxMDkzMjAwMDkyMDJGRUJFMkI2ODdGRDE1REQzODU3RUM3QzUyNzRERDcKKzoxMDkzMzAwMDM0REU0NTk4QTMxM0ZBQkZEODY5MENBM0YzN0UyODM1MTEKKzoxMDkzNDAwMDMxNjI4MEI2QjFDRDQxRjYzQjBGN0Q1MDc4N0Y0RUE3OUMKKzoxMDkzNTAwMDIzRUNDRDhGRTI0NTVEM0Y5QTQ1QzBERTI1RTRGMEY5NzAKKzoxMDkzNjAwMDJGNERCNTg3RURGOTM0RUZENTM4NkYwOUE3OUM3NzZFOEYKKzoxMDkzNzAwMDNGNzE2ODI0OTVEQjU5RTYyRkQ2RDFEOTAzMzE1OTE3QUYKKzoxMDkzODAwMDhFQUQ4MkYzMEZGRDE4OUYzNDUxOUMzODNCQzU0RTcwNTMKKzoxMDkzOTAwMDg2MTc4NzA2RDc5OEZBQ0U2Rjk5N0JFQUVENzcwMzNDNUMKKzoxMDkzQTAwMEFENDc4Q0NDMDhGRDc4QkJEQjA5MUY3MzAwMUY2MTZGRDQKKzoxMDkzQjAwMDVGN0M5RkY1RTY3RjY1MzAxMkRDMTFFNDQ3RTNGQUYxNEMKKzoxMDkzQzAwMDM0MkY4NjdFM0Q3Q0Q3RjA3Mzg1M0Q5RDhGN0MxOTlDMjQKKzoxMDkzRDAwMDQwNzRDRTMyQjBBREY5N0RFN0YxNjYyQUNGREYxRTRFODQKKzoxMDkzRTAwMDc1RDJENUVDMkVFMjcyRTIxRTM4NzgwQkY0RjczNkVBMkQKKzoxMDkzRjAwMDI5MEI4QkU3MDdGQzNFOTVGQkQzNzQ4REQ1NEY2MDA3OTcKKzoxMDk0MDAwMDQzMDhDNzg1RjUwQUQxRjNBNDEyMzY5QjAwNjU3NTc3MkEKKzoxMDk0MTAwMDM2OTMzRjIwRjU5M0QxNkYyNEZGNDNFQTI5MDkxN0U4REIKKzoxMDk0MjAwMEIxMEY1MjM1RjZEMTk4RkNGMDUwRUNCNzdGN0Y2REM3ODUKKzoxMDk0MzAwMDNFMzNGQTZCNEU0NkZFOUFENEEzRkRGOTZCRThBNzIxQTIKKzoxMDk0NDAwMEZGNDkzRkVENTRDQzNDNjE3RTVGOEFGOTdEMTk2RjdFMDgKKzoxMDk0NTAwMDdERjRFRjNEQ0REMkNGRjk3M0VBMTVGQ0NDMEM3MzdDRDMKKzoxMDk0NjAwMEZENzQ0RDFBQTc0MzkzRDNDQzI4M0Y4NUYxMzJGQTBGRjAKKzoxMDk0NzAwMEYzMENFMUNEOTg4NzUyQzNENjI5MUFGQzY0QTU0OTNGNjUKKzoxMDk0ODAwMDhGRkIxQkZERTlCREFCQzUyNTA1MkI0QjQ4RkY1RUU4RjcKKzoxMDk0OTAwMEYyMjZBN0MyMzVGRDUzQTUzOTVFM0ZDNjQ1MkYwQzQzQzIKKzoxMDk0QTAwMDNBQ0RCMzU2REFEMjAwNEU2NzlBMUU1RjRGMkRFRjYzNjYKKzoxMDk0QjAwMEJGRDJEMjM4RkVFOERBMDc3Rjc2QzA5RjQxRTcyN0VFQjkKKzoxMDk0QzAwMDJBRjIxMkZFM0M2OTU3RjAxM0NGREVGMTUxMDVEQUE1RkUKKzoxMDk0RDAwMDczMDI0RjhEQkQ3MTJGRDdEMzU5NjBBQzMwQUZENUMwNUIKKzoxMDk0RTAwMEZDQ0Y5RTI4RTZFRENCMEFBRDdBNTBCRTZFQTMzRDMwOTAKKzoxMDk0RjAwMDA4RkI2RkRBM0RGMTU5QURGREZFM0E5NUU3RDM5ODNEOTMKKzoxMDk1MDAwMDk1RjJBREIyM0Y5N0QwRkIxMDY3REZGQzk5OTdGNEZGNUYKKzoxMDk1MTAwMDU3NDhERjY4QkNERDVEODFGMTU2RUI0QkQ3MjRBMzdGNTQKKzoxMDk1MjAwMDM2NzZEN0RENEVCQzVFNDgxRjQ4NzgzREJCMkJDMThGRDkKKzoxMDk1MzAwMDcwOUU0RDA1N0Q2Q0M3RjY4ODQzOTg4N0Y4NzJGMUUxRkYKKzoxMDk1NDAwMDU0MkQ1RENFRkVFQUREMEExM0Y0NzM3NkU3QkIxNTJBQ0YKKzoxMDk1NTAwMEU2MzM0NEJFQTZENzFFNURGRTQzNDUwMEJFMEY4RDYxQjcKKzoxMDk1NjAwMEM1Q0Q3NjBEOUY1OEI4QkQ3OEQyQ0FGMzFEMTkyRUYzMUMKKzoxMDk1NzAwMDMyNzYzREM0MjMxOTI5RjRGRDFBOTdFMTI3NzhERjY4NzQKKzoxMDk1ODAwMEY5NDNERTA5OTRCMzk4RkNDRTkzMjY2RkFCMURGODBDMUIKKzoxMDk1OTAwMDYyMzkxRkFFMTMyQzE4RUNGN0NDQzZGQ0NFMTQzN0U1OUQKKzoxMDk1QTAwMDY1NUExNUFFNDc0M0IzNzkxQzlBNUVDMDhBRjNBMTNGNTIKKzoxMDk1QjAwMDkzQzE2OEM0RUY3QTNDQ0NCNzE5NUU0OTM4RDAxRTQxREMKKzoxMDk1QzAwMEI1OTdEOEQ1RTE0N0YwQ0IxMzUzMDk5RkEzQ0UzODE1RjMKKzoxMDk1RDAwMDhDMjc2NDNFNDhBREUyRkRGNTRDMzM4NzM3NkJGMjQwOTMKKzoxMDk1RTAwMEVFMTkyQUQ5NDU5QkRBQzE1MDRGM0Y5MDkxNEFGMENCRjIKKzoxMDk1RjAwMDdDNTBENUQ0MTk4MTRBODRFQjUxMDNDNTMzQTA3ODE1MkEKKzoxMDk2MDAwMEQ0ODdEOTYyMUVGOTlFOURDQkE1NkZBM0JBOTAyRDE5NjAKKzoxMDk2MTAwMDI2N0ZEODRBRTBGRjgxODBFNzI0QUZDMThGRjlEN0E0MjUKKzoxMDk2MjAwMDlDQzg1MTEzRjg3N0Q5NEIxOUZCNDRFMzQ3REFDQzQyNzUKKzoxMDk2MzAwMERFREUzMTkyQkMzOUJFQkVDNTMyMDNGQzIzNUIyMkNGRDUKKzoxMDk2NDAwMEFCMjYwNTk2Q0RDN0JDMzhERUZGRDczMkE0MEJGRjlFRjQKKzoxMDk2NTAwMEU4NjNDNDM0MTUwQjI1MDNDODhFOTFGQTdFMjVGRDNBQzQKKzoxMDk2NjAwMDE3NUI3QzAzODFBMTc3MkU3NkQyRjVCOUM1NkU4MkVCQUMKKzoxMDk2NzAwMEYxQzU1RUJBRkU3NDcxMzFEREVGNEY0RUFGNzY3RDZDOTEKKzoxMDk2ODAwMDMxOENBQkUxQTdGNDExODAxNTk4NkZCQTkxOTEzQzNGRjIKKzoxMDk2OTAwMDM2QkMyMjc5NjYxQzdGNDA1RTlGNUU3Q0Q4MzU3NjkwMTIKKzoxMDk2QTAwMDQwMjBEMDIzQUJERUI5Njk0NTNFRDExOTg1MDg2NkY3NjUKKzoxMDk2QjAwMENFNzJGRjY4QzYxRTM1RjlFNzMzNjBBREQ1Njk1RjhGOUUKKzoxMDk2QzAwMEM1QkNENTRBQzU0MDc5QUFDN0QzREU1QzFFQ0FDMUFCQUEKKzoxMDk2RDAwMDk3RTg2RURCRkYzRUMzN0NBN0E3QkM1RDQxNzlGN0Q0NUEKKzoxMDk2RTAwMEI3MTMxRjk0Nzc3NUIxQTBCOEVGODdCNkU3MDhCRkZGMkYKKzoxMDk2RjAwMEE4OTVFMzc5MTU2MzEzMTA1RUJCQzIwMjc4M0Q2N0U1NTgKKzoxMDk3MDAwMEZFRTBFNzU2QUUxRkJGMTBENzIxNjlDMThEMjhDN0ZGMDUKKzoxMDk3MTAwMEU1M0M1QUY0Mjg4MDY3MkRGOTIwMEZENzNCNkNGQkZGRkUKKzoxMDk3MjAwMDRBRjk2MEUzNTBCMzA1RTVDM0IzRjczOEFEODMxODBEQ0MKKzoxMDk3MzAwMERENjYwNjI2RjlGNTI3M0VBNkZDOUFEMTFDQzhFN0VEQTIKKzoxMDk3NDAwMDk3NTY2MDNCMjMyOUIwMDk1RDM2MTZGQTc4RTIwMTM3NTcKKzoxMDk3NTAwMEM4MERGMkMzOEQ4NDhEMTBDQUYxNEFBQjY4ODc4RTExOTMKKzoxMDk3NjAwMDFFNTY5QTc4RkJGNTI3RkU0NEYzNUU2OTBBQ0M0M0JDOEIKKzoxMDk3NzAwMDYwN0IyOUY0QjczMkE1QzM2RDgwQjZCREU1RkRFNTg3RjIKKzoxMDk3ODAwMDZGQzJCNjdDRkZGREU1MjFGOEZFRTUzNEE5NkYwMjFFMkQKKzoxMDk3OTAwMEQ0MUZCRDZEMjdCNDg3NjhEQTJBNkYzMzBCQkZDQUY5QUYKKzoxMDk3QTAwMDM1RUNGRkVCQTE2Q0UwRDdDNkJENEEwNzgyRTZEOUJCMUEKKzoxMDk3QjAwMDVBQzE3OTdBNzZBRjI2N0NEMzFGQzgwNzRFODNGMkE0QUMKKzoxMDk3QzAwMDk2OTAxOUJGN0Y2RUYxNjFFNzUyQTBCMzlBREFFNjQyMzQKKzoxMDk3RDAwMEJDNUZFMzBFRkFGREYxRjIxMzE5RDJGRjg1RjdCNTc5RkMKKzoxMDk3RTAwMEI2QjBBOUE3NUJFMzhGN0IxODk3MUJCNjE0RjQ0MzFDOTQKKzoxMDk3RjAwMEZGNjI2ODQ2RTUxN0U5RDBDRjkzNEE3MDg1MTFGNUNDMzIKKzoxMDk4MDAwMDhCMjYyN0VBMTFENkM1RjVEMDE5RDExNzBCNjc5MTdGQTIKKzoxMDk4MTAwMDUzNkZFNTRERDM5MkUwOEFDMUE4MjdFRTU1N0QxODNGREUKKzoxMDk4MjAwMEQ3RTVCNzU3QTI3REFGREI5M0VGNkI2MTUxN0VBOTRCQjQKKzoxMDk4MzAwMEU5NzA5NTIxRkZBNEU4REJBRDIyRUY5Mjk5RDI5QzkyQ0EKKzoxMDk4NDAwMDUyODJFQjExQUJGMzcwQkRBMDkxQjVERkY3NDM4NEY3MDMKKzoxMDk4NTAwMDZEMjM0MzNGRkQ4QjdEMzcyNDhGODI3NjAzQjREMTZGMTgKKzoxMDk4NjAwMDY4RTg3Q0Q3OENGQ0Y5NDQzQUQ3OUY4RDlEQzAzRkQwRTcKKzoxMDk4NzAwMENGMkE5MDJGM0YzODMyOUI1NDY3MjJFQUE3RTdGQ0NEQ0UKKzoxMDk4ODAwMEQ3QTI4QkY3RjUxMzdGOUI2ODA1RkEzRTVGRTA3NzIyM0UKKzoxMDk4OTAwMEJERERFOUE2MTUxNjcwMUE5RjM3M0IwN0IzNTI2Q0RCODYKKzoxMDk4QTAwMDg5QkZFQTRBMEQ1QzhFOThGREI3N0U1NUFDN0Y0MkZCQkUKKzoxMDk4QjAwMEY4MTMxMzZGRDNFNjc3M0RCODJFMDM3ODZFREE2MDBGOTYKKzoxMDk4QzAwMDE5OTJDOURFRkM2RkI0Qjc4REVCMEQyMUQ0NUYwNjRCNDYKKzoxMDk4RDAwMDk3MTlFOUVCQzZCNTVEQTI4RjkzRjBCNjUwRUFGMzE4N0QKKzoxMDk4RTAwMDdEQkQ3MDYyRUE2REQ4NUVGODY4ODEzMzc0ODVGQzY1NzEKKzoxMDk4RjAwMEVEMjUxQjBCNkJGQ0EzMjdEMkI5MUNEN0FBMjE1QTQ3MTUKKzoxMDk5MDAwMEE5QkQ5NDQ0Q0ZGRjc5RTM1OTU5NzhEODk1QzZCM0QzMEMKKzoxMDk5MTAwMDczMzk1RTdENzQzQ0EyRUJGRUIyREZBRTFEMDg3NDVCNTIKKzoxMDk5MjAwMEI4QzM2NDQ4RDBGMEREQzIxRDYyQkREQUVBQ0ZDNDdFQTAKKzoxMDk5MzAwMDMyQ0M0Q0UwMURGQzdEQzBBRjlBREZEQjBFQTkyMEU3RTYKKzoxMDk5NDAwMDhGRjVDQUY5ODAxNTYzNDcyM0REQTJDRkQ5NDg5RDFFNDQKKzoxMDk5NTAwMEYwNjNCQ0Y5NThBMkQ0MDNEN0M0N0YzRjMxRTZGRDAyQkYKKzoxMDk5NjAwMEQ5RjZBRDE4OUJEMzE3OUU4Q0M0NjhEQjAyRUZBQkZGMTIKKzoxMDk5NzAwMDlERDBEQjQ2Rjg1NjFCNjJGQTRCOTVFMzhGQTRGRTI0N0MKKzoxMDk5ODAwMDVGMUQ0RkFCRkM2RDY4MjAzQzRGNjlBRkM0RkE4RDlFRTQKKzoxMDk5OTAwMEQ5Q0M4Qjc2MTlGOUQ1QTdEMUZCQzdEM0I4NUNENzVFRTQKKzoxMDk5QTAwMDJBRDREMTNCOEFGNzIyRERGRDkzOEJEREJBNzVCRkI5OEUKKzoxMDk5QjAwMEQ1MEI2OTdERjIzOEVBNzlFQzg3ODUyOEFFQUFERDkwNkYKKzoxMDk5QzAwMENEQzIxQTdGRUFGRkMzRjE4RkMyMzFBQTFGMzg2RUZFRTMKKzoxMDk5RDAwMDFGODYyMzVGMjc5RjUxMzgwNkVBRUVGRkEzNzA2Q0JFRjcKKzoxMDk5RTAwMEFCRThCNjdDNzg2NThEMTJCMjE0QTA1RDc4QzQ0MDc5N0UKKzoxMDk5RjAwMDEzNjNDQTU4NkYwQkFFM0YzQ0EyOTI5Rjg3MkUwOUQ2QzUKKzoxMDlBMDAwMDdGMTRBOEVDQjA1QTg2RjJEM0VFQzczODlGMkRFMUY5NDcKKzoxMDlBMTAwMDIzQjhERjY2MkEyMzNCNDQ3RTcwRTFERTg0MDdEMDRGMDMKKzoxMDlBMjAwMDJCQThGNUNGQzMyQkNCMjlBMUY1MERCOTJFQzg0NDFFMDkKKzoxMDlBMzAwMDRDQUU2NzBDNzJCMjRBMTU5Q0I3NTExOTBGOTA5RDJBMTMKKzoxMDlBNDAwMDA4NTREN0ExMzM2Nzc0OTQyN0EyN0Q1QzYzMDg4NzcwOUMKKzoxMDlBNTAwMEJDRDBFMzdDQkMwQzQzQjhDMzgyQkEzNzY5QTAxM0VEMTkKKzoxMDlBNjAwMDVENDYxMkQ3N0Y2QzQ1MDlEOUJGQ0Q4NjgyNkJFNzAzNkYKKzoxMDlBNzAwMDFDOEYyQTk1ODk2RjIxOUU1MzBBMjhGRjhCRjcxN0MwRTgKKzoxMDlBODAwMEZEQ0RDMjZFMTk1MzdDNEVCNDUzOUI4NURENkExNUZBMjkKKzoxMDlBOTAwMDVEREVCN0E1MDYxRTQwN0ZFMjU0RkFDMkRCMkMzN0EwN0MKKzoxMDlBQTAwMDFFRjJCN0E1ODFCRDM5OTlCRTcwODVEQjgzRjZDNjVCMTIKKzoxMDlBQjAwMDYwMDFGQjcyRjJDOTg3QzhERTZDNkVGMTY2Mzk1M0EyOTEKKzoxMDlBQzAwMEVENDFGRjBERDY5QUY0QzQ0MzJCRDA1RjU5NkE1RkYwODUKKzoxMDlBRDAwMDIwRkEzQkYwRkNCNzE2RDBCM0NGQTcwQUJEMjM5RTE3RTAKKzoxMDlBRTAwMEY0RUEyOUQwNEJBMEM3OEMyREJERUQxMEVBQTU4MjVFMEIKKzoxMDlBRjAwMEJERjMxMEU5OUQyRDFCOERENDdFMDdDNjQzRkYwN0U2RkQKKzoxMDlCMDAwMDExMzJFMjdDMDdBOUU0RDc1QjAxOTY0NDY4NUIwNzE3MzIKKzoxMDlCMTAwMEQwM0ExMUNDOUIyNUEyN0YzRDk4M0Y5N0Y5N0NGMzIwNEEKKzoxMDlCMjAwMDAzRTVGM0YxN0RDNEEzRDVDM0RGMzc0RjYxM0U1Q0Q3QjYKKzoxMDlCMzAwMDMyM0JFQzE0ODdDOEY1MDFBMzU4QTc0QTE0NzUxQThBNUEKKzoxMDlCNDAwMDczMEFDNTc3OTY1NTY1MEIzMDFFQjMwQ0Q0QUZDMzlBMTQKKzoxMDlCNTAwMDYzRUEzOThDQjFGNTFERjYwOEY5NUY1RkE0OEJCQzdFMTIKKzoxMDlCNjAwMDFBNzM1RjJFOENERTA3QkQ1RDg2NTdEN0RENEIyQjExMzgKKzoxMDlCNzAwMERFMDUwRUU2MzQ2MjVFMjUxOEExNzVDRTU4QkI2NjAxN0YKKzoxMDlCODAwMDNCRUFENUM4ODdDNUNFRkNGMUVBMDkwRTY1NzAzRkQ2MjEKKzoxMDlCOTAwMDdFNDlBNUY4RTY0OTA1RkMxQkI0QTMwRUNFNjdEMjNGNkIKKzoxMDlCQTAwMDMyMzkyNURGRUFFREFFRjQ5NzRDMjk3QzJFMEIyNzhFNTcKKzoxMDlCQjAwMEM5QzRGOERENjhGNzVCRDBDRkQ5RTcyQ0EzQkM4MDkxOEUKKzoxMDlCQzAwMEY5NkVBRkQ0RjgzQjRCMjMxMzI5RkZBNjNBRkRFNDg3ODcKKzoxMDlCRDAwMDE3OEEzOEQxRThGNDMxQUQ5RkIzNkMzMTA0OTZENzMwOTEKKzoxMDlCRTAwMEY2NkM0NUQxMTg5NDg3QTdBRDExNEIyMUQyNzc4RDgxQTIKKzoxMDlCRjAwMEUyQkRGRDY1MEY4NjE0Q0NCRjJENjIyNEE3Q0Y1NkI4RjkKKzoxMDlDMDAwMEM2NjAxRTdEOTMxQTQ4QkUxN0U1RTUwODhDRTdFNTc0MkIKKzoxMDlDMTAwMEUzRUJCOUFEMEFFNjhCMkY1QTAyQzlBODBGMUU0M0JFNkIKKzoxMDlDMjAwMEQ3RTBFNUQ3MDIxRjdGNEZFN0ZBRTc1MTEzOTc4QjY1MUYKKzoxMDlDMzAwMDAwNEYwNEUwNTAyRjVENDdGOUFERDUxOTNDRUY2MUFFMDAKKzoxMDlDNDAwMDFFNEJGOTFGMzNFMDAzRjM3QjA5QUMzOUU0QTRGOUYyQUUKKzoxMDlDNTAwMDdDNUQ4MkRCQTBBQjBCNTQyRjBEQTVFRkZGOUU2RUQwNzkKKzoxMDlDNjAwMEM1RDU2RDMwNEZBRjQ2N0Y1OTU5ODhGMjc1ODhFM0FENDEKKzoxMDlDNzAwMDcxRkM5Nzc3MzI3ODNDNjIwMTdGQzg0QkZFNDlDQzNBNDEKKzoxMDlDODAwMDc3NUZGRjg4RkMxNTQ5OUY1RTNGNDUwMUZGRTQwQUYxQkQKKzoxMDlDOTAwMDU4MTNDNENCNUE3RERGQTRGNjkwRkU2RDgyNzgxOEVGN0UKKzoxMDlDQTAwMDlGNzM1QUM4M0Y5NDc1MEY3NkExQ0Y5NkI5ODNFREEzRTEKKzoxMDlDQjAwMDkwQ0YxMzkzODY2MjFFNDA2NTFEODQ5NDU1NThGNzgwOUIKKzoxMDlDQzAwMEZBRDBBREY2RjRGMjNGQzg3Q0FCMzU2OTMzQkVCNzU0NzkKKzoxMDlDRDAwMEQ0NDFEODdDN0FGOTQ5NjRFRDExM0ZDQTY3QjE0NjZFMjgKKzoxMDlDRTAwMDE4RTIzQjQ0RkQyNjc4RjVGNzE5MEIzMjhDMzM1NDc3OTQKKzoxMDlDRjAwMDZDOUQ0NEE4QjcxRThBRUFGOTU0RjYxNEFFNUY0QkJGQjgKKzoxMDlEMDAwMDM3NUJENDIzOURCNTdENDQ3OTM0RjA3QjJCRDM2ODFEMUMKKzoxMDlEMTAwMEEwODdFMjE2OTlFRkY5QjY3RTcyMjFGNjgxNzk4NDQ1MjMKKzoxMDlEMjAwMDdGQTkzODgxNzIzNjY1N0MzRURFQjdBOTlDNEZDMDE1OEQKKzoxMDlEMzAwMDU3MTNDQTMwQkMxQTNGMkYwNUU2N0ZCN0IwN0ZFOUM2N0MKKzoxMDlENDAwMDc2QUExQjc5NURDNEIzRkZFNTlDRTFBMTM4MEFGMDQ5MEUKKzoxMDlENTAwMEY1MzY4OUJFNkU4QTE3ODU5RjY2RUNENThGMUYyRkY3NjMKKzoxMDlENjAwMEVCRkRDRTkwRDZDRjVCQjlFNkUzRTU0Qjc5QkM0MkVEOTcKKzoxMDlENzAwMEQ3OUY4ODkwRkU3Q0Q0MkFEQkFGNTAxQkVDNUMwNEUzQjkKKzoxMDlEODAwMDI1QjYyQkMxOEI3QzA4REZGQjUxREVEODVENDVFNDY3MkYKKzoxMDlEOTAwMDFCMEI1ODE2RTI2MzZDOTI4NUY0QTY3MTU3QzI2NkY0RTkKKzoxMDlEQTAwMDgzMjEyRTdFMzk0REIzNUU3Q0Q2NzEzNDBGRkRFMTM4QjAKKzoxMDlEQjAwMEZEODU3NEZERTU3REJCRkU2MEZDNEVBQ0M3OTFDRkM3NTEKKzoxMDlEQzAwMDI2QUQ4RjE4Rjk3NzVFRkM4RUU1NzQ3RDE0ODJGRUQ3ODAKKzoxMDlERDAwMEJDOTRDMDU2MDAwQTlGMzZFOUU1NUQ1RTM3MEI3OTQ2QjQKKzoxMDlERTAwMDdEQTNBRDg3MzQ1N0Q3Rjg5MUE5QTU1QzI3QjgxMzU5M0YKKzoxMDlERjAwMDQ0QzM0RjUyQ0VENTRCODM1OTQ0MjMyNzg1MTk3QzVERUMKKzoxMDlFMDAwMDU1NTVGRDk0NDc1MjJGOTVEMEYzQkZBMzRDRDMzOENFNzAKKzoxMDlFMTAwMEFCOEM5M0RBQ0YzOEMzNDg3RkY0M0Y0RTg1RDAyRjRDQkMKKzoxMDlFMjAwMEFDNUZBOTU0NTcyM0Y1NDI3RjcyMUVCQjRFMTZBQjE3ODkKKzoxMDlFMzAwMEU1NTVFQUM1Q0MwQ0RFRkZCRTBDN0RGRUY1QzFGNTFENzcKKzoxMDlFNDAwMDg3OTA4NTRFREI4MzA3MzJBODNFRUE1ODEyOUFGMDdBNTMKKzoxMDlFNTAwMDQzNjQyOEYyRjE2NzdERUYzN0UyRTRERTRFRTM3OUZGRjkKKzoxMDlFNjAwMEEyNkRGM0RGNDA3NkVEQ0EwODVFNDQzRkU4QjcxOTYyQTEKKzoxMDlFNzAwMDdERDIwREY2RDA4OEY2MEVFQzQ1MDlFNTczMkZBNjYzNkEKKzoxMDlFODAwMDNFMzdFODVEMzc4RUExM0NERDQ1RjlEQzY0NTdBMDA0MjAKKzoxMDlFOTAwMEZCNUYzNkI1ODI3MjBFMTJFRTk1OEI3OTlEOUFENEIzMjQKKzoxMDlFQTAwMDc2MzU0OEY4QjJBODIxN0U3NTA2QzE4NjMzNzYyMUMzN0YKKzoxMDlFQjAwMDM0NDk1NTEwOUY1QzhFOEVBRUI5NDA3MjYwNTVGREM0MUEKKzoxMDlFQzAwMDU3NTZBN0MxOEI3RTgxMTVFMjQyRDRCQjJENEUwMzVGNEUKKzoxMDlFRDAwMEJGNzE1QjI4RkZCRjRDODEwODExRjRDNjgyOTQ4MjJCQUUKKzoxMDlFRTAwMEFFOEY5QjJGQjlDOERFMDIyNDZFQURERUZFRTc4RjkzRTYKKzoxMDlFRjAwMDJFRUM4MzdFMUNENUM5RkQwNkI2OUZEQjYxNDRDMkE3NEMKKzoxMDlGMDAwMDFBN0QyQ0ZEODFEOEVGNjJGQjk3Rjg5NEY4QjUyMDVFOUUKKzoxMDlGMTAwMDRCQzgxRUM2RjUzN0FDMkVGRDdBNjZBNkQ0QjcxOTQ3RDYKKzoxMDlGMjAwMDhCMjI3MEI3NDFFOTRFNDJCRjA2RjRBOEQ1ODU3QTdBRjQKKzoxMDlGMzAwMDQ4NEY5MkMxNEJGQUQ3QzVGREEwOTBFMDZCNjZEN0YyQUYKKzoxMDlGNDAwMEI1Q0M1M0NCNzk0OUY4MTdCQzM1REJBMjVEN0Y4OTg1NDkKKzoxMDlGNTAwMDM3RDZDRURBNEJGNDc1MEI1NkFGQkU2RTQxRUUwQjMwRjIKKzoxMDlGNjAwMEFBMDFFMjFCRDM2OEJGMDVFNUE0QzU1OUU2NDQzRjY3RDMKKzoxMDlGNzAwMEE5RUFGREEzOUZFQTJENENFNDZGODNGRkFFMUI1RjVFNTEKKzoxMDlGODAwMDFGMDNGOTQ3Mzg0QTVEMDY1RDVEOERCQzNBNzAxRDI1OUIKKzoxMDlGOTAwMENFNzc1MzVDNUM0RjNEQjZFRjZFRDJDM0FBOEZBRjMzMjIKKzoxMDlGQTAwMEM1RDI4RkIxNzZFMjE3NDcxMTczNTJGRTU0QzA5Qjc0MkQKKzoxMDlGQjAwMDk1N0VGQkUzQTM5RkVDQjM5MjlGQUM4RUI0ODRCMUFFQ0QKKzoxMDlGQzAwMDMzNzYzQ0EzMjlFMDU3NTBFRjk2MzJGMjkzOERCOTdDNUIKKzoxMDlGRDAwMDdDRTMyMDQ2NzVFMDQ5RTVBOUFDNTg4M0M3NjVFRUE5NDYKKzoxMDlGRTAwMEY0N0M0MTg2OTMyMUJEOEQwRTQzMjAxRUJGNDgzQzBENUQKKzoxMDlGRjAwMDc0MTk3NDdDRTM5NjdDRTNGOUEwMDhFNTQwQzMzNzgxQ0IKKzoxMEEwMDAwMDc4N0MzM0QwQzVGNTE1QzJBMUE1RUYzMjc3NDE2NjNDMDcKKzoxMEEwMTAwMEZBNDRGNTIyRTdBQkFCRjFDNTRDMUJGNzczM0FDRDVDQzQKKzoxMEEwMjAwMDZGMzYyMDhFMjA1RUFBQ0YzMDJGQzNGQ0Y3MTkwQjdGMkUKKzoxMEEwMzAwMENFRkNDNURDMkZCMzcwOUU5QjY5Q0IwQkEzM0ZENEE5OEMKKzoxMEEwNDAwMEZBNkRFODk3Q0RFQzVEQjdGNUQzN0U4RjdBQUIzRkY5MkIKKzoxMEEwNTAwMDA2QjQ4RkVGNzJCRkY5NjRBNUJENEQ4MTdFNEU5QUZDQTgKKzoxMEEwNjAwMEM5ODhFRjkzRUYxQTk1MTY1QTA3RTdGNTczQjIwRUU5MTAKKzoxMEEwNzAwMEE0QzlCQkYyNUE3ODNFRUI2NzQ2N0YwQjNERDZGQjgzMDMKKzoxMEEwODAwMDY3OTg3RkQ4M0JFODFGRUYzNkQyN0E0QkZFRTMwRjE4NzQKKzoxMEEwOTAwMDg3QzBGQjM1RTAyODIyM0ZDREFDQjI4N0QwMEU3NzdFNUIKKzoxMEEwQTAwMEQwRkMxMUVBQTM1OTFCMTNCQzRCQjA4RTY1RkRCMEFGQjkKKzoxMEEwQjAwMEIwRkRGOTJBODczNzgxRjI2QzA1OEEwN0YzNUZBQkYzQUQKKzoxMEEwQzAwMDlEQjQ2RUIyODg4OTc4RUVDRTQ5NTVBMDQzN0Y4OTQzMEUKKzoxMEEwRDAwMENCRkMzNUNDRjk3MzI2OUY4NzU2OEU4NTc5NUU5QkQxNTQKKzoxMEEwRTAwMDY5QjAwMzRDQ0FCQUQwNEEwQkQwRUZEMTk2ODAxQkUzQkIKKzoxMEEwRjAwMEM3MEVEN0Y0OTUxODNGQkE1Q0ZFQUU1QjIwNUUzQ0UxMUMKKzoxMEExMDAwMEJBN0IxMkI2M0I5Rjk2RkREREIzRDIwRjdBRjkxNTQzQTkKKzoxMEExMTAwMDMwNUY4MUU3QjZDQzg3MjY1MUZENkFBMUVDN0YxOTNERkYKKzoxMEExMjAwMDlGRjlGMzZCQkUzQTBBRkQ5N0FFNUIzRjA5NzM2RTE1NUMKKzoxMEExMzAwMEQ1RTJGQkQwMzMwNERGRUNEMUIyQkREOTU2MzUxMEJFMjkKKzoxMEExNDAwMEI3MzE1RDFFQ0QxNDhENDcyOTRGRDdEOUVCNUYzRDM3MTEKKzoxMEExNTAwMDA5RTNDRjU5NjM5QUFCNTRFODdGQzlCQUVEMkI0QjQwNjIKKzoxMEExNjAwMDQ0NDZCNDU3M0FGREQwRkVGMUJBMzcyNkQ5ODBERjNBREIKKzoxMEExNzAwMDk5QkYwRUUzREQ5NUVCMEU0Q0IyREMwNEZEQTdFOUZCQzUKKzoxMEExODAwMDRGMzc4QTdDNkNFOEYwNEFDQ0UzRjVDMkM3REU1RkU5NjIKKzoxMEExOTAwMDFGMTg3RDdGOTgzQjYxNTUyODI3Q0FGRkZGMjJGODFGQjMKKzoxMEExQTAwMEY4RkQ1NzJFNUMwN0I0NzQxRkMyMTQ1RERFQTIxRTMzODcKKzoxMEExQjAwMEFGN0IxNUY1MjkzOURENDM3OUREOEQ2ODE3NzdGMzNBRTMKKzoxMEExQzAwMDY1RDk3NkYzNzZFNzkyRjhGNkZFQ0Y2RTJFNzc5RDg5MDUKKzoxMEExRDAwMEYxOUY3RjI0RjQzOUMwRURDN0ZBOTVFNEEzQ0NCRjNEQ0QKKzoxMEExRTAwMDhFM0MxRDc0RDk0OUZFMEU4MkJGNjc0OThEQ0FENUVEREMKKzoxMEExRjAwMDIwREIyM0IxRkVDN0MyRTE5NEZEQzQ3RTdGNENFODI3N0IKKzoxMEEyMDAwMDE2QkEzRDE1Rjk3OEIyRTBGMzQyOUZDMkVCNzg3NkRCREYKKzoxMEEyMTAwMEMyODNEMERGNjMxMUY1MEU5OENGMzY5MUNGRDg2NjY1MzMKKzoxMEEyMjAwMEY3NEY4MUExNUQ4OTJDQjgwM0ZEQ0YzNDY4OTdEMEY3MzMKKzoxMEEyMzAwMEZFMURGNjY4N0Y2RjczNTE2NkUzMEEwMzVCQjBCRjcxNjIKKzoxMEEyNDAwMDk5OUVEMkQ2RkM2ODNGMDBGNzUyNEI5OTBFNkU3NTY0MEEKKzoxMEEyNTAwMDJBM0UwRjY1Q0QyRkQxRTBCMzg0Q0YwM0Y4ODRGMDA1RkIKKzoxMEEyNjAwMEMzQkM3MDBCQzg0QjY3RDdCNTA1MkI2MDBBMkI1RDVFNkUKKzoxMEEyNzAwMDVEREM1N0QxMzU5NUY2QTVGQ0E3OUJGQjNGQ0NDQkJGNEEKKzoxMEEyODAwMENGQThFMjc1MjEzRDdCNkM5NEE3NjA5NkFFMjJBNDkzODMKKzoxMEEyOTAwMEZDRUU5MkMwNDdENThGMjdBRkMzRjdFQUJCNEM4Q0VBRTAKKzoxMEEyQTAwMEZGNzc1NDVFRDExRkE4QzdCQzlFQzY3RkFDNTcyMzE0NEUKKzoxMEEyQjAwMENGRDU2MzVFNkYxOEY2RjdCNjE5RUQxOEY2RTMxNUY5MEEKKzoxMEEyQzAwMDZCQ0NDQjY1QjRDNkE3QkZCNDg3RjU5NzUyNTg2ODU4MTYKKzoxMEEyRDAwMDVGQkQxOUVEM0Y5RDlFNUY2RDVFRDFGRUY0NzE2N0RGM0UKKzoxMEEyRTAwMEZFQ0M2MjFENDBFMDVEMTU3ODM3Qzc4NzczNDBBNkUwNUQKKzoxMEEyRjAwMDUzQzBCNzQxQzM1RkIzMDVCRjgxRjYyNDNGRTBEQ0FFNzYKKzoxMEEzMDAwMEMxOUI1N0U0NkJDN0U1RkI2RTQwM0ZCRjcwMEJFQUNCQzgKKzoxMEEzMTAwMEFFNDQ4QTVCMkE1NEZGMjQ3Q0JGQTIyQjk1RDYxNzI0MTcKKzoxMEEzMjAwMDdGNDhCRTkwNzRFRDRDNkRBNjdDNERDRjUzMEFEOUMxQzkKKzoxMEEzMzAwMDU4Qjg4QTI0NUNFQjE1ODIyM0IzM0E2ODdDNDAwMzlGQUIKKzoxMEEzNDAwMDk0MDdFOEJGNTNGNDVGM0U5MkU0RTcxOTJFMEYyMDM3REQKKzoxMEEzNTAwMEY3QTJGQ0UyN0EyNUNFQzNENzNENzRFQTkwQkVGMEZGQTcKKzoxMEEzNjAwMDE0RURERjcwQTIyM0M3RkY0QjU2NTFDRkMxRjFENjE3QjIKKzoxMEEzNzAwMEZGRDk1N0ExNjcxRTNEQUZFODdBODNFNjU5REY4RkRDMkUKKzoxMEEzODAwMEJFRUQ0RTIyMzgzMzhGNDY5MkJDRjBERTEzODJGRjNCODcKKzoxMEEzOTAwMDNCM0U0RDFBODU3MkIxREJDODE0MkY5RjM3RUFBRDBBRDgKKzoxMEEzQTAwMEE5OEZEOTlDQjdDNzgwRkVDQkVDNkQ4M0JFRjQyMjFENkMKKzoxMEEzQjAwMDdBRjU2N0M0NjI4OUJFRkZBQTdCQ0VFNEE1RjAyQzNEODYKKzoxMEEzQzAwMDgxQ0I2QkJBMTFBQzRENTkxNDhFNjk5OURDQ0YxQTE5MzcKKzoxMEEzRDAwMDhDRUY5N0JFRTc3NkQwNzM4OUVGQTcxNjU1QjE0RjYxMjIKKzoxMEEzRTAwMDdFM0Y3M0YxRjVDRjkxREQyMTA1RTkyMkU1M0E1NjRGMjUKKzoxMEEzRjAwMDJEQ0NFNEYyMzgzRkYzRkY5MTlFQjI1RTQ1NEY1OUE1NTQKKzoxMEE0MDAwMDlFRTJGNzBGNDI3MDg0RUZCOTVDREQ0MzE1RjA5RjZCNUQKKzoxMEE0MTAwMDBDN0UxN0M2NjEyN0RFRkQyMUVERTM5ODJCRUE1Njg2RjgKKzoxMEE0MjAwMDYwREQwQURBQ0RBMzAxQjIyQjVGRTA0MzVFQkZGMjA4MjQKKzoxMEE0MzAwMEM2ODBCM0RCRjVGNTJCNkMwQkRGMjcxQUNCNTc1MTNFRUIKKzoxMEE0NDAwMDBBMDlGRjVEQzAyMUVDQzFFRDA5RERCRkUyNDVDNjdBMTYKKzoxMEE0NTAwMDc5OTY2RDgwQjNEMTUwQTg3OTZFRTc3NjRCRDIwMUU4M0EKKzoxMEE0NjAwMEJEOTRBNTQ2RTVGODkzNUQ5OTlCNTBERjBFNzNGM0JDNTAKKzoxMEE0NzAwMDYyN0FBMUJGMTRFNzJGRTUxMkVDQUFFMDEzQzNGRDUzRTMKKzoxMEE0ODAwMEVENUM2RjRDOERDM0JGQ0YwOEY5OUNCRDlFRjM0REU3Q0IKKzoxMEE0OTAwMERGQUEyNjIxREUzQkRGNEI0RDU5QTJEMTEzNUI4NTFEODAKKzoxMEE0QTAwMDk0RkQ0QTNEMjRCRjkzQ0Y5RjE1RkNCMTJEMzM4OURBMkIKKzoxMEE0QjAwMDVCNUQwRTkxRTczMUM0REQzN0I3NTU2MzVGODk3RkRBQTUKKzoxMEE0QzAwMDM4RkZDMDdDNDM1QUZFMUVFNjU2NzRGNkI1RDdBRTBBNzYKKzoxMEE0RDAwMDNDMzc5ODAxQkY4MEJGNkRBNjUwMTZENkVENTQ3NDE5NTUKKzoxMEE0RTAwMEE4QkY5QUREMEVBQTA3QUNFOUUwNzhBQzY5REY2N0E4REYKKzoxMEE0RjAwMEQzRTAyN0I2QkZGRkM4RTRGRUMwMjYwM0FGMjMzQTY4MDcKKzoxMEE1MDAwMDAwN0U0M0JDREIzOTdDRTc3Njc5NDg3RjFFMTZFRjVEMjEKKzoxMEE1MTAwMERENkU3QzMzM0RCM0M5Q0NFQjQ4ODFCRTU0Q0ZEN0YwNjAKKzoxMEE1MjAwMDcyRjYyNkJEOUU2RTExRjgwRkI2RTIzRUI2RjQ3NUNDRkIKKzoxMEE1MzAwMDg3QjU1NjgwQTc4ODAyNzA0Rjc3MEJCRDYzRjY5QjcxNzUKKzoxMEE1NDAwMERGNkFDRjUzOENENkYzMDc1NUZCNEJCREQwNkUwQUQ4Q0MKKzoxMEE1NTAwMENCMTRFOEFGQTg5REVCRTE4QTI3QzE4RjQxQjlCMzQ4N0UKKzoxMEE1NjAwMEJCRjBENjc2RUQ3OEM3MzIxRDIyMUVFMUZDNUNCMzlFQUYKKzoxMEE1NzAwMEUzNkYxMEY4M0YyRkUwMTVGQUY5MTVGOUYxMUM5RTRGMjMKKzoxMEE1ODAwMEQ2NzY4Q0MyRkM5M0ZDRkUwQjQxRkZBQkMxNTc4MUYwMjkKKzoxMEE1OTAwMDk1NDdFMUMzRkU5MTlGOTgzREIwMDRGQjZERkNDM0NFOEYKKzoxMEE1QTAwMDZDNkRCRjVGNjU3MjdEOUI2RTlDMzlDNjhBN0E3RTM1MDUKKzoxMEE1QjAwMEQ4MUQ5MkNFRTA3RURDOTc1MEIzMzdDNUI5ODI5MTNDNkUKKzoxMEE1QzAwMDFCMzBFRTkxRTNENjg4M0MyNEM4NURDNTE0OTg1QTUxREYKKzoxMEE1RDAwMEVGMzg5MkFFRUZCRkE4OURCRkVBRTZGRURDM0Y4QkJFMzAKKzoxMEE1RTAwMDlERTYyMENEQTc2NzA3QzBFQjhERTJBNUIzRTM4MTI1RUIKKzoxMEE1RjAwMDU2QjQxMzQ3OTkwRkVEODQ4NDc3NTA3NTc3MTJENjlEMjIKKzoxMEE2MDAwMDM0MDlGQjAxRjMzNTYwRkM5MkZFMzMyRjZCNDVCQzc1QkEKKzoxMEE2MTAwMDhEMzE2M0ZDMTRDQkQ3OTI0RUM1OENDQjhGOENEMzhBRjMKKzoxMEE2MjAwMDcxODEwMERBQjlFRUExNDJGRjMwOEE3NzNGNzlGOUQ1MUUKKzoxMEE2MzAwMDE3NTY1MDdDQzVFOUQyNTRDREU5NThFOTBFNEU3NzY3REMKKzoxMEE2NDAwMDQ0RTUxMEY0NzkwNUVBQUI5QTI3N0JGNTUxMDdCRkRGQTMKKzoxMEE2NTAwMDk1NTcwREY4QkNERTJERTU1QzRGOTdGNDQwODcxNUQ3NzQKKzoxMEE2NjAwMDM1MjQ1RjlGREQzMzI0QkM4MkQzOTlDNkVGRUM3MDg0MjAKKzoxMEE2NzAwMDE1MDVGN0ExMzZCNzYwREMyREY1MDRDMkEzQURDMzk0NzAKKzoxMEE2ODAwMEYwRjREMjkxMDExRDg3NDRFRjBGQUFFNkZEMzU4MUJDOUQKKzoxMEE2OTAwMDIzMUZENTFCOUIxNThGNDI3QTgwRjJBQzk5QTgwN0EwODcKKzoxMEE2QTAwMDlERDlDMURGNjM3QkY5QjkwODEyNEZGNUQzQTE1Mzg4NTcKKzoxMEE2QjAwMDNCRkRFRTEyOUE4N0M0NTc2Njc1QzQ1MDBGQjcyNjU4RjMKKzoxMEE2QzAwMEFBRkMyNzM0RkVEQTYxQjFERTgwNzg5OTRBRjEwNkQ3MTgKKzoxMEE2RDAwMEQ3RjVDNjQwMEVDNkFEMkMzMzgxRjY3MTgyMUQyMkZEMjIKKzoxMEE2RTAwMDcyRDBDQTU0MkJGNEY3MjY1Q0QxMkU4RDMzQ0VBNzdEQzEKKzoxMEE2RjAwMDM0RTMwQTE1OTI2M0QwMDAzMkVGMTM0MTdGRkFGNjVCMjAKKzoxMEE3MDAwMDZDMjRGRkVDRUI4NzA2RTIzQzMzNkM5QzBGQTExRjhCQTMKKzoxMEE3MTAwMEU4Qzc0Mjc2NTBEODgzREZFNzgxNUZBNzQ0RjVGMjQxNkUKKzoxMEE3MjAwMDQ1QTE3RTBFREU3NERENjZBQTJEMTQ3Qzg5RkRBMUZGOTUKKzoxMEE3MzAwMDc0NTA5OTkyNDNGNkIyMzM0MzE0MTc3MUY4RkJCNzY3MUMKKzoxMEE3NDAwMERENzlGODVDMUIyRjYyN0MxNzhEMzc0QjU3REQwQTNDOTcKKzoxMEE3NTAwMDM1NjI0MjQ3QzRFMDQ0RTkyODlGRkM3RDgwN0YxQ0M0RTkKKzoxMEE3NjAwMDlCNTY5OEZGMDM4MkFGMEZFNjg3OEM0OTA4RDcyMDk4NDUKKzoxMEE3NzAwMDM3REMzQTk0MTgyQzY5QjY0N0M3NzE4OUZDOEQ0QkQ0RTUKKzoxMEE3ODAwMEVGQTJCRjgwNTc4Mzg3RUJGRjlGNzhCOEJERjg1MDVDN0UKKzoxMEE3OTAwMDVENDlGMUYzM0QxN0M1RjM4RkVENUM0RkFGQTg4Q0JGNUEKKzoxMEE3QTAwMDZGRkIxMTYxNTc2NERDNzlCQjU4RUY4MEI4RjMxMTM3NDgKKzoxMEE3QjAwMDhGM0I0NUZEMjk1RjFGMDFGRjlFRjA1QkY1RTM2QTVBNjEKKzoxMEE3QzAwMEY3QkJEODM1MkQ5OTlGODdDMEY1QzEyQzUxRkY3OUZGNzQKKzoxMEE3RDAwMDIzRDM3RThBN0M3NjAyRUJDQzAxMEY5RjBBN0UzOUUxN0YKKzoxMEE3RTAwMEY0Mjc2MTlENTQ0MzYyRkMzQUUyNjcwNTNDMEQwMjBGNzkKKzoxMEE3RjAwMDI3MTdGM0YzMEI2NkUxQkExQ0YwREYxQTM3RjdGM0U2MUQKKzoxMEE4MDAwMEI2MEYxQjhGNzQ5RkJCNEFBMTc1MzlCOUZFMkZFOTVDNDcKKzoxMEE4MTAwMEJCQzFBOENCQUZDRkMyNzVCOUI0N0YyNDlFMkFFRDI3QTgKKzoxMEE4MjAwMDlFMkFEN0M1NTM3MkRDRDhCOEVBOTNDNTZFREQzQUMwMEMKKzoxMEE4MzAwMENDRjY0MjcxN0UwNDdGN0YxNkYzMTFEQ0IzREFCMjc1NzkKKzoxMEE4NDAwMEVCODhBQzJERTMxQkVERkJDNzM4MkExNDE3M0VCM0VFQTMKKzoxMEE4NTAwMEZFMjc4QjJEMkNBNDg1RTNENDQwQUE5Rjc4QzQxRDdDQjEKKzoxMEE4NjAwMEM1QUQ4M0MzQzY0MkJBN0NFODY4MjdFRDI3QjJGMjNDODcKKzoxMEE4NzAwMDJDRjhFMzNDOEU4MUVCMjYzQkY5RUIxM0QwOUZFRENEMUEKKzoxMEE4ODAwMDg3ODExRTcxMjZBMzVFQUFEQ0VGMUUxRThEMUZBNDlDNkQKKzoxMEE4OTAwMEQ1OEY4RTFGNDdBQzExN0VEMDFBMTc4RjkzOTM4RkNBMTYKKzoxMEE4QTAwMEI4M0FEMThCRkE1MUZBRTVCMURGQkREN0NCQkY3QUJGNDkKKzoxMEE4QjAwMEYyNkE3OTA4RTBFMzkwMzY0RThBRURGNzk0RkIxRjhEM0IKKzoxMEE4QzAwMEJGMEJGQkUxOTdBMkZGOTFGOEJCNjI3NDkwRjI3Q0FDRTYKKzoxMEE4RDAwMDVEQTE5QTk2MTE2M0Y1RjFEMEQ3NjhENzg3RTNENUE2MjUKKzoxMEE4RTAwMDhCODc2QUFBRjVFRjMxMEZCN0ZGQ0M2M0QzRjlGMUZEN0YKKzoxMEE4RjAwMEUxNTNFQkM3MkI4NUE4MDc3OTdGOEQ4MjJGRjI0RkJGREQKKzoxMEE5MDAwMDQ3RjVBNEEzM0REQzJGRjI2NUY5MTMzQzcwNUQyNUVBMDEKKzoxMEE5MTAwMEM5NTc1OUY5N0VGRTRERkZCRERGM0QwQkZEQTM3NzRDQjYKKzoxMEE5MjAwMEI0RkVDRjc2NzNCRUE5N0M2NjYxMkI5RTBGNjBFRjUwOUMKKzoxMEE5MzAwMDlDREFGREFCREY1OUE0Rjg2QjQwQUVEMzg0N0VBQ0Y3NTQKKzoxMEE5NDAwMEYxRjlENEZCMjJFNjgxNzZBQzJGRTY3MEU0NzRFQzUzODcKKzoxMEE5NTAwMDU0MERERkU1RDRGMkY3NzIzRDI2NUQ1RTNDNUZCNDA3MkYKKzoxMEE5NjAwMDc4OUMzMjhFRDkzNzMxMURERkY3QUJFODE3NjQ3NTI4MzQKKzoxMEE5NzAwMDY0M0ZCMzlBMTlGOUQ1NTlFNTBBRjVGRjlERjI0RENBMUUKKzoxMEE5ODAwMEFDOTJFODdDREIwQzUzNEE5Q0YwNUQ5QkNCRTY0M0ZCMkUKKzoxMEE5OTAwMEYzQzNBQ0UwMzUxRTg0RUY1ODI0ODJFNjcyQzRCMTJFQjYKKzoxMEE5QTAwMDE1RTNBRDU1NTlGRTYyQzQ4MzlDQTdEN0U4Q0M0MjNGNUUKKzoxMEE5QjAwMERFNzY4Q0MzRDdERTlCNjdFMkY2ODdCMTk1QzIyRkREQ0EKKzoxMEE5QzAwMENDRkQzMzIzM0JDQ0I4N0Y0RTc2REVCNUE0OThFQ0EwMEIKKzoxMEE5RDAwMDlDOEYyQjU1RDgxMTE3MEJFRUI0RDNGQjZERTRCNzU4RjEKKzoxMEE5RTAwMEI4MUZFMDVBNTI0NEZFQkNBNDZCMzRFRTFDNUM4NjcxNjYKKzoxMEE5RjAwMDY3RTFBQTg4M0ExM0JFN0I3OTgzMjFFRTc5MTVFMzA1RDYKKzoxMEFBMDAwMERFNjExRTk1REE3OTVDNEQ2RkM5Rjc0Q0ZERTQxRDI1QkEKKzoxMEFBMTAwMERGREIyNkM0OEZFN0MxMTJEMkYzQ0E2N0QyRUYyMUY5NzgKKzoxMEFBMjAwMDVDNkE2Njk4QUY5NkY4NUY5NTE1QjgxM0UxQzlFQUQ4RTUKKzoxMEFBMzAwMEE0MjA2RTNFMTE3NTBBOUYyNEYyN0NGQzI3MkI1RTUwRTkKKzoxMEFBNDAwMEQwQkY3QzY4MUU3MzFBNTlGRjcwRDcyRjMyRkE2QkI0Q0YKKzoxMEFBNTAwMEYyQkNENDRDNzQ5MUYxNEExNDFFOUU4NzY5RjA3MEZCQ0QKKzoxMEFBNjAwMEI0MkYyQjUwODNFMzM3RUU1RTRENzFGNUJDMkRDN0NENkYKKzoxMEFBNzAwMDU3NUM4N0Y4ODY3ODUzNkFCOUJGNUUzRkMzNDJGNTRDOEUKKzoxMEFBODAwMDk1Q0ZBODQ0RjdCQUE1NjY1QTM3QUNERkJFODNGNkE3QzAKKzoxMEFBOTAwMEIxODc5OTBGRTVCRkJFNjM4NzUyMDNFM0Q2NkRERkExOEYKKzoxMEFBQTAwMENDRDZFMDMxQkIzRTRDRjVEQkQ3MzhFNDdBNDQ4NEZDQUQKKzoxMEFBQjAwMEU5NThGRUM2M0MwMkZBMkY4N0FDNUNGRUNGNTREQTQzNUQKKzoxMEFBQzAwMEI4M0U3MUM2MTRBQ0M3RjdDRTc4NkMzRTVDQzc5NDc4QkMKKzoxMEFBRDAwMDdGNzNDN0FENzQ1RTgwNjM2NzQyMDRBRjZEODZDRDZFRDEKKzoxMEFBRTAwMDBCQkNENzc2QUREOTg3RkNCNDJBMkJCODFDRjE5MkFBM0YKKzoxMEFBRjAwMDA2M0FGMUZCOTQ3NDg3MEZENzM3QkMwOUFDOENFQ0Y3OUUKKzoxMEFCMDAwMDM3QzRDMzg4MThCRTE4RjEzMDk3OTc1Nzg0N0U4MTNGQTkKKzoxMEFCMTAwMEFBQTc3QUQ2QzNGRDcyNUM1RTQyN0Q3NUM4QzRFN0IxNTAKKzoxMEFCMjAwMDkzNzE3ODBEMUVGRjdBOTQ0Qjc2Mzg5NUM2Q0RBQThGMTcKKzoxMEFCMzAwMDI4NTg3RjExM0I2RTk0QUZGQzFCM0QxOURGMDZDRTBFRUIKKzoxMEFCNDAwMDMzRUFGOTNBQTE2RjJBOUZEOUEyN0NBQTgxRkI0NThGRUIKKzoxMEFCNTAwMDkxRTBDQkRBQkU0OUMxRkMxOTNDMjc3RDAzRUYzM0FDNTEKKzoxMEFCNjAwMDc3Q0FEQUNFRTNENTNBNzgzRTVCQTM1RkU0M0NFMkU4MEQKKzoxMEFCNzAwMDk5NEU4NENGN0VBQ0VCMDBENzMzMTFCRTVFMjBFMDhEQzIKKzoxMEFCODAwMEE1NjdDNEUzQTVGMUM3ODNCQjQwRjdDREExNjI4Qzk3NEQKKzoxMEFCOTAwMDBGMTUyNDUyN0Y1MkVFNjNFNTM0RTJFMTdFNjVENjg2REUKKzoxMEFCQTAwMDJEOEFDMTRFRUIyQUU0NUY0QUY4RTQ3QkJFQUMzMTA3NDQKKzoxMEFCQjAwMDNDODQ4NzJFQzI0M0MzMDY5NUU2MzNDRTFDMTgzODVGMEIKKzoxMEFCQzAwMDIzMEZFRjg5RkVERTk4RkUxMTlEQUJGM0U0QkZCRDRCNzIKKzoxMEFCRDAwMEZDRDgwMDcxMzZDNTE5RURFRjlBQTdBMTlEMDlGREMyRjkKKzoxMEFCRTAwMDg4RUI2MDkzQjg4QkMyRDY4QTczQTcyNjc1NzIzRERDNUEKKzoxMEFCRjAwMEQwQjk0MzlENjU4RkYyNjlGRUU5MzdFOEJDQUE4NjhFMUQKKzoxMEFDMDAwMDA0ODZGMTE1RjBERjUxODQyNzk2NEZCRjI5M0Q0MTFGN0YKKzoxMEFDMTAwMEYxRjgyOTY0MTY3OUJFNjAzRUM2M0Y1MjRGMUI4NEZDOTIKKzoxMEFDMjAwMDMzM0JCRjdGNDFCNEEzRkMxMzNDRUREMUU5NTkyQkM5QTEKKzoxMEFDMzAwMDQ1RkVFOUIyMzdCMERFQjNDMUE3RDA3OTFEMTI5RUY0NEMKKzoxMEFDNDAwMEFBRjg3RUJCRDQ4RjUyNkY2MzNFMzFBMEQxRUYxNzA1QjcKKzoxMEFDNTAwMDVEQTExREUxNzEyQTJCNDAzQjJERTE4Q0E1RDM4MDJDRjkKKzoxMEFDNjAwMEFFQzdFM0YwRDNERjExREU1OEJCMjVFRDc5RkVDNjlERkMKKzoxMEFDNzAwMDJBRUVCRjkxN0MzMjA5RTlBQkUxMTM0Nzk2OTlFMDcwNjcKKzoxMEFDODAwMDY0QTlENEZGREE0QUJFRUVCOEQ2QzRFREQ1REExNjBCMDUKKzoxMEFDOTAwMEQ1NjFCRTc5MzdBRjBCNzNEQzYzOEVFMEY1QTA2MTY2REEKKzoxMEFDQTAwMDNEM0UzRjk4QzVFMTY4MzMyQ0ExRkQ2ODIwN0Y0OTU5OUUKKzoxMEFDQjAwMDE5QzgyNzQ5OENFQjQxQUVGNzlFRkMwREQ3NUJGNTIxRjcKKzoxMEFDQzAwMDNCQzVCOUY1QzEzQjZCNjhERDNGRERFQUMzN0E1OTE2NzgKKzoxMEFDRDAwMDNDNjA5RUU2ODhFMjM1OTY4RkJDM0JGNzk5NzExRTkzRTcKKzoxMEFDRTAwMDNBQjhCQzgxREUyNDNFOEFFMjJGQUM5MzEzMjkwRjg2NEEKKzoxMEFDRjAwMDVFM0YyMTk4Q0ZGRDIwMUU0Nzk1ODhGRDgxQjUxNjFGMjgKKzoxMEFEMDAwMEVEMkZBQzE1RjlENjEyQjE0RkIwRTJBODlGRUNDMTRDQjMKKzoxMEFEMTAwMDQxODc4REY2QzA3NTU5OThBNzU5MTU5MzZGRkQ4NjcxQjcKKzoxMEFEMjAwMDQwRERBMkRGNTFEQ0Y1QTBGQjJEQkE0QTc5ODQ3ODU1Q0QKKzoxMEFEMzAwMDI3QjczNzY2NzEzRjNCNUY1QzJCQjMzODlGRDQ5NTc3NUQKKzoxMEFENDAwMDkwQkNENTlENjgyNjM5QjU0RkUwRkFDQTdFMkNDNjJGMzcKKzoxMEFENTAwMDY0OEYwOUJFNUI0NUUzOEVCMzc1OENDN0Y1RTI3MTNGMjYKKzoxMEFENjAwMDU3OUNBREFDN0YzOEU3RTIzRTJCOENFNzM2RUM0RjdBNTAKKzoxMEFENzAwMDAwRTVGOTZCODgyNjM0RkI3MEE2NjY3MTM5MzlCMzBEOEUKKzoxMEFEODAwMDEwNEVGNkE4RDk3QzI1M0ZGQjZBRkRCMUM4MTE4NUNFQ0YKKzoxMEFEOTAwMEY5MTBCODNDQjNCREVBODZDRjcwN0Q2NzVCQjIwRkY3QTAKKzoxMEFEQTAwMEQzN0ZCOUZEOEUxRjdDMDY3MDlGRDk3MjhCMEZFRDdGMEMKKzoxMEFEQjAwMDdBNkI4MEY4QTUyN0MzRUFEQkNDRjNBRjEzMzAzRkQ1MUQKKzoxMEFEQzAwMEQyQjEzRjA5RjdFRDdDRjFDMkY1NjVBODhGRTc2NTcxNTcKKzoxMEFERDAwMDNENzVGQTM3QzY0NTg4OTcyNUNGRkZGQTY2N0M1RTE3MjIKKzoxMEFERTAwMDU2RDJEMDJGM0RCM0VERTc3RkNGODI3RTZBQjczNEUxRjQKKzoxMEFERjAwMDA5NjJBQ0Y1ODVEN0M5REYzNzg0MzdGMUZCREI5MkM5MkYKKzoxMEFFMDAwMDdGRkRFMkQ5RDUzNzIzQkU1QjNCNUFFOUY5RTk2NzM3QzUKKzoxMEFFMTAwMDUxRkI4REU3N0ZGRERBREZFMEJERkE0MDEyRUQ2NzNFQzIKKzoxMEFFMjAwMEZEOUI3RDQ0OTdGQUEwNEE3NUU3QkQ3QzFDQUIwNzc3NzQKKzoxMEFFMzAwMEVDRTM3QTEwRUQzN0YyRkQwQ0FFOUYyNDFGNEJGRUZEQzQKKzoxMEFFNDAwMEUyRjlGQjZGRDBEQTAzNzlCRjRERTQ2OURBMTJCOTdEMUMKKzoxMEFFNTAwMEY4NTJDODY5REQxODdCMUI1RUJGN0NEMTRBRTc2RTM2QUQKKzoxMEFFNjAwMDlBQkI4QjMwN0VBRjJGRTE3Q0YxN0Q4MThGRkE4RUY5MUEKKzoxMEFFNzAwMEE2NDYzQjdENEZGREZDMjczMDNENUU4NzAwN0Y2MjdEMEYKKzoxMEFFODAwMDE3QkNCNUU1MzJENTI5RkQ4QUVCOTk0NDM2MTJGMzM4NjMKKzoxMEFFOTAwMEQzQUI4RkYzN0Q5QjI1Q0RBNjNBODJGMzA1RkUxQzY2Q0UKKzoxMEFFQTAwMEFEN0Q1RUIxMzA3RURDQjgzQUNCQUVDQkQzNjY3NTRFQUQKKzoxMEFFQjAwMEM5RjE5MkRDMjdGODA2NjlGQ0RBQUNEQTYwQUIwM0VFODQKKzoxMEFFQzAwMERGQjYzMEU4QzM3REVGMkY5RjdBNkYzQ0VFNEY3OEJFNDAKKzoxMEFFRDAwMDU4MTk0NkY0MzcyQURDN0U4NUVDMzQ0RTAzQUUwRjQxMTgKKzoxMEFFRTAwMDVDRjFBQzkwMTMwODRCRDM2Rjg0Rjk4QzUzNTkzQTZFRDQKKzoxMEFFRjAwMEREMURDN0Q4MTExM0U5ODVBREY0MUNGQzE3RjJDQkJDREUKKzoxMEFGMDAwMEFGNEZERjhBRkVDQzVBNTNEMDMzMUNGQjY5MTM3NjZGRTgKKzoxMEFGMTAwMDBCODcxRkJFNzdEQUNCQTgzRkU3OEREQzBGNUY4MERGQTIKKzoxMEFGMjAwMDlENkY5OTlDOEU3RTNCRjREQjY1RDJDNDU5QzA5MTc5QUMKKzoxMEFGMzAwMDY4RjdCMEJGNzJDNEQzODREMDBDQjIzRjVFMzNDRDRGM0MKKzoxMEFGNDAwMDlFRTcwOUYzMUY3QUVGOTBBODdDQzZFNjkxNTAzRjYxMTcKKzoxMEFGNTAwMERFNzc1RjU2RTU1RUQ0MzNGMkVBRUEyNzBGQzNCMkY5MzMKKzoxMEFGNjAwMDczN0ZCNjlGQUVERkY0N0NEMDM3QTY5RkUzRjZGQjk1RTgKKzoxMEFGNzAwMEUzQzRCNzhEQzhCNzM4N0VGMDg0Q0U3RUNGOTI3Q0JCNTkKKzoxMEFGODAwMEU3MzhGMUVEQUNERERDN0UzN0VFMkUzNTIzQkY3RUI5NDAKKzoxMEFGOTAwMEQ4Q0YzRTA1MDdCNjUxRjBERjVBQTU3QjBFRURGRkRBOUMKKzoxMEFGQTAwMDYzQTU3RDdERTcyNDdGQUUzQUZFMzlENjlCMTZFQ0Y2OEQKKzoxMEFGQjAwMDUwOUVFMERDMUVDRUE3MDcwRDA2OEFFRjBGNkVCRTZFMTgKKzoxMEFGQzAwMDUzQUJEMkQ3NkU4MjFGNEQ3MkQyRDhDQzg0MUZCREYwNDYKKzoxMEFGRDAwMDNERjRCQjFBNkE3OTlENzk2MzBDMUZFNTZGRkM2NDE5MTcKKzoxMEFGRTAwMEYyNEIwQTc4QkQ1ODNGMDM3RUNBNzhEQTE3NTlDRjg2RUMKKzoxMEFGRjAwMEEzOUM2NjhERjVFRkM5QTZGNTNGMUU3NzY3RDU4MjNFMDcKKzoxMEIwMDAwMDgxRjY2REU5RjM3Qzc4OTQ1NUNBNThGMDc3OTFGRkQyQjgKKzoxMEIwMTAwMDZGRjI2MTNFNkM2RDZFQzczMkY0OEI0M0UzMTg5RDlCRkIKKzoxMEIwMjAwMEJBRDZENDNFMDZFM0RCQjVFM0JDNEVDMDI0RTA2RDBCREMKKzoxMEIwMzAwMEY5Q0RBQ0Q4MkNFQzU3MERGOURCOERFRTdGRjU1MUJFNzgKKzoxMEIwNDAwMDNBNTZGRUY3QjQ5MERGRDZFODRERjRFMTM5QjY5Mzc2ODAKKzoxMEIwNTAwMDJCMEJCODlGNjI2NzA4N0YyM0UwMTdEQjkzQzJBM0MyNjQKKzoxMEIwNjAwMDA4Q0Y1OTgxM0Y4OUM3NzNBNjJFM0E0RkY3REM0QjA5QTkKKzoxMEIwNzAwMDc0M0VFMUE0QjE5QzVGNTNDNjc2OTBGRTc4NzNDRkFENjkKKzoxMEIwODAwMDY0OUYyNTVGM0E3NjI1OTA5RDRFNTU5RDBBRTYyRjE4QzAKKzoxMEIwOTAwMEJCMjM0MTRCRDc3NjUxODc5QjIyRUM0OEUxMkE0RURGRjgKKzoxMEIwQTAwMEM0NkNFRTY3MjQ2NjFCQzRENTJDRjg1QzlFQjcxMkEyNTQKKzoxMEIwQjAwMDdDQzI1OTQxN0ZGQ0YzNkFDRTZCNkFBODg5OTAzQ0Q1NkIKKzoxMEIwQzAwMDZGRTdGREE1MjdGODRCMUZEMkYwQUZGNDk3RTQ3QTJCN0EKKzoxMEIwRDAwMEFFQkY0RTg5QzNERjNFMDE0N0ZFQzYwNTQ0Rjc1OUI1RjIKKzoxMEIwRTAwMEUyM0M4NzU1REM4RjYwQzAxNzg4MzdBMDIzRjFDMTZEMjMKKzoxMEIwRjAwMEU5NzM4OTZFQjM1NjI5RjcxMDFENDMxNTk0RDc5NDdFRDIKKzoxMEIxMDAwMDU3NkNGRkU1RDk1QzJGNkVCMzA2Q0FCMThFQUYyN0MzNkIKKzoxMEIxMTAwMEUxQzNGQTgwNkQyOTdFMDNBRDBGOTRBNjUwN0UyMzIzRjAKKzoxMEIxMjAwMDhERkI4MTE5QzIwRjhDQ0E3REEwREMwMEUzOUM3MjM5QjMKKzoxMEIxMzAwMDM4QkRDM0JGNTczMTZGRURDRkY2QzZGNUVCRkFDNkVGOUEKKzoxMEIxNDAwMEJDQkZDOUVEQTFBMTE4Q0ZDOEY1NjM4OThGNzA0QkUyRDAKKzoxMEIxNTAwMDBDQUQzRUJENTFFMDIzM0M5OENENDBCRDAxNzE4MjlEQjgKKzoxMEIxNjAwMEYyRUI0RTE4MDdGMzA0OUI0NzNEQ0JGMzA0RkM1Q0U3N0UKKzoxMEIxNzAwMEMyNkM5RUE3MUI5NzE2Mjg0N0JGMkNBMzMwQjA5MERCNEMKKzoxMEIxODAwMDRGM0VDRjU4N0NFQzEzRjZGRDhERTlGNzk1NjI3Q0RBRTMKKzoxMEIxOTAwMDc4QTdERDg3NzJGN0U0MkJDQTRDRTJFQjkwMDUwRkZCMzIKKzoxMEIxQTAwMDAxQkVFNzcyMDgwRTEzRDVBREIxQTA0QUY0Njg2QzBFNkIKKzoxMEIxQjAwMDg0RTNGM0ZEMTQ5MkIzNDZGMEYzRDBCRjlGODQ3QzlFRUEKKzoxMEIxQzAwMDRFN0MxRkU2N0NDRkVEOUZDQzIzQTA5RUQ0QUVBQjQ4MzcKKzoxMEIxRDAwMDdEMjBGNTBDREEzN0U0NjcyOTE3OEQzNzc3MTcyMTdENDUKKzoxMEIxRTAwMEJGQTk1RTM5NjdFMjcyN0UwRUYwODA3MjI0RTVDNkYxNzcKKzoxMEIxRjAwMDMyOTc5NzE1MkRERTRBN0NCRTAyRTQ1RTRCRUZEOEI4M0QKKzoxMEIyMDAwMDBCRTFDNEY4NTVFQUY3MUY2NjA1MUFCMzMxOEUzMDQ0RDYKKzoxMEIyMTAwMDk2RDFERTUyQTE4RjFCNUY1RTVFMTQ2RjdGOTBENEM3MDQKKzoxMEIyMjAwMDE2NzExRUE2MjU2QzBCNkJENzQxQjBCNkMyNTE0NkQ3MUUKKzoxMEIyMzAwMDEwREEyM0RCQTJGODc5OTY5NjZDNjk1RkZCRDRBNUI1OEEKKzoxMEIyNDAwMDY0MEZFRjVCOTdFNjQyREI4NUYyQjNEOTQ2RkJENDY0MkIKKzoxMEIyNTAwMERFMjlCNkRGODdCMjE1NUQ3RTQ3QzYyNUI4OUU4MUVGMzEKKzoxMEIyNjAwMDNGMjNFNEE3NURGMEU1NzNEOTMyQ0YxQkQ2RjFCRkQ3RkEKKzoxMEIyNzAwMDEwM0M4RTc1MDVGREQ5MzFGOUREM0YyQjBGMjZDNzkxQTYKKzoxMEIyODAwMEY2MzQ5NkZFNzIzRDA2RTczM0E1QTRGRkY3REFGNzMxRjAKKzoxMEIyOTAwMEIxQ0VBN0U3QzcxNzg1OUNENDY1MzNCQUI2OUIyMjE3RjIKKzoxMEIyQTAwMDQ5QUVFNjNCMThENUYzQUM2N0ZFMzQ1Q0U3N0JFRDFBOUMKKzoxMEIyQjAwMDJFMEZGRTlFMjJFQzdGNjA2RUQwOUE5MzExQ0RGN0UyQTYKKzoxMEIyQzAwMDdEOEMzRkVCNTQxNjRBMDA5QUQ0NkQzMzg1QjVGQjY0RjAKKzoxMEIyRDAwMDdFODZCNTg2MDBDNzc5ODcyNTY0MDQzRUFGQzgwREVFMkIKKzoxMEIyRTAwMDQ1RkUwQThERTFGQkUxNDIzRkI0RDJGQTE0MzhEMkMzRTUKKzoxMEIyRjAwMDUxQkYzNEIxRUUyNEM0NzNBM0IxQUIwOEYzOTNENUFFMDAKKzoxMEIzMDAwMEUwM0VBNEZGMjc4NkFFM0M1RUQ3QzFEN0NGOEU4OTdDQjYKKzoxMEIzMTAwMEVFMzE5MUNGRUQzNDQ3NzJCRjlGMUUzRDlGRUUwMkUzQTkKKzoxMEIzMjAwMDc1NTUxN0JBMENBOTE4Rjc3REI4RkIwRjJGQkUwMjVGMzEKKzoxMEIzMzAwMERGRkJDQUQ5N0I3Rjg0RDg1QTYxQkJFRjY3NzBBREI2OUIKKzoxMEIzNDAwMDE4MDNBQTI2RUY3NkNDMTE1RkNGN0UyMEY4QThCN0VFQkYKKzoxMEIzNTAwMEE5MjUyMTZFM0U3RjZCMEU3RkFGMjk2NkJEN0E2QjBFRUQKKzoxMEIzNjAwMEQ3QTdEMTdENEY3Q0JERkFDMzdFQ0VCNUJBMjE0N0Q0RDUKKzoxMEIzNzAwMDRCOEE3QUFDRDhFNzM3RTc3MDdFREI2NjYyNDVFQjExMjMKKzoxMEIzODAwMDlFNEQwRTVBRTc2NzJBM0Y4RkFDRjY4OTdDMUZBRUNGRTEKKzoxMEIzOTAwMDc3MTZGMEYzRUY3QkQ2Mjg2NDA3OEU5OUI4RkU4MUJGNEQKKzoxMEIzQTAwMDNCMkQxNTUxM0I4QTZFMEFGQTg5QjVDRTUwQzQwMEZBN0UKKzoxMEIzQjAwMEEzNzZBMTIzODJFNzYwQzI3RDc1MzRDQTVBQzg0OTc1NTUKKzoxMEIzQzAwMEMxMzM4NTdEOUNENUZDRTY1RjMxOUY1MUFCMzJDQjY4QTQKKzoxMEIzRDAwMEY4RUVBNEJEMjYwOUNEQzM5Q0VGM0U4NDQ3Q0NCMENDOEIKKzoxMEIzRTAwMEVBNzY1MTNGMkFDRTU3RjM0RjM2NUVCNjVEQzlBRkQzRUEKKzoxMEIzRjAwMEVGMUJGOTQ1NEU4MEU1QzBGQ0FCOTMzOUJFQUIxRkUyQjUKKzoxMEI0MDAwMEU3RUNDQUY3N0YyM0U0MzY5NkRGQjYyMUFGMDJCQzFGMTQKKzoxMEI0MTAwMDI5RENCRUM0OEVFM0NDMURGMzAyRjI1M0I1M0I2MEEzMUUKKzoxMEI0MjAwMEZFMUYzQTRCN0FBREZBMTUyQjlEN0Y1NDg3RUI1Q0EwM0IKKzoxMEI0MzAwMEYyQ0U5Nzc2MTUyRENBNDdCRUVFQzlGQjIzRTZDOUY2QjQKKzoxMEI0NDAwMDI2NTA1RDcyMURBRTc3NjlENkE3RkI1QkVGRUE3RjlENDQKKzoxMEI0NTAwMENCNkI0NkZFNkRCQ0E0MTBGRDY3RUU3REYzMjhFQUVCRDYKKzoxMEI0NjAwMDQ2QjU5QkY4NjJBNkM1NEU3ODZGQkNBNEQyNzNENjY2NkIKKzoxMEI0NzAwMDNBQTNERERGQjZEMEVEQ0Y0N0I4NDMzRjFFOUQ0MkVCODgKKzoxMEI0ODAwMDY1OTk3MDlGRjA1NzRDRTc2MzJDMTBGNUUwQ0VEQzYwQjcKKzoxMEI0OTAwMDMxQkVCN0NFOTY3NDNGQzY3RDE3MkNGQzNDQTQyNjMzMzQKKzoxMEI0QTAwMEFGRkI2NjYyREZCMEE0M0ZDQjcxRThFOUJCRjdBREJGOEQKKzoxMEI0QjAwMDIyNUMzNTk2MjA5RDJCMzk3QjA2QzRDOTQ2QTQ0NzY0N0YKKzoxMEI0QzAwMEI4QjM0NDRCRDdEMURGRUE1QzVCN0IwRUQ3MzcxRjlBMEEKKzoxMEI0RDAwMDc5REQ0RjVGQkVFNjdBNjlBQjdDMkY4QkNCQzc4Nzc5NkUKKzoxMEI0RTAwMEFDNzYyNzVFQUY4NTJCN0NGNzYxODE2ODk3RjE3NjZDMkYKKzoxMEI0RjAwMDNGMzM4NTdDN0MzODk0REJBNUQwMDI1QkRDRjMzQ0VFRUIKKzoxMEI1MDAwMDE0RTNGRDIyQzczRjE5RjEyNUVGM0YyNUU0Q0Y5OUVCNjYKKzoxMEI1MTAwMEJGMURFRjgzREVCQjAzRjUxRUYwNjMyNDA1RkFBQjdFOEYKKzoxMEI1MjAwMDlERkZCRTAwNUJEQTQzNzVBN0JERjMyQTEyRjBCQUUyQjUKKzoxMEI1MzAwMEMzRjVGRDY4QkZGNzYwN0ZGMDlFOUZGQ0YzRDdBQ0I0MDYKKzoxMEI1NDAwMDZGOEQ0RDA2M0Q4QzdBNzc0MTJFNDNCRDBCRTNDRUM0MDMKKzoxMEI1NTAwMEYxQTFERjQ4MEFCRDk3NDBGMzYwNkRBMDhGNDFFMENFQjYKKzoxMEI1NjAwMDBGRjcxMjVENTY1NDAyOUY5NjhCRjNGMkJENTFCRTkyQjcKKzoxMEI1NzAwMEZDMTRDQjQ3NEQ0MjRGQzU1OThGNkY0MkI4NjJEN0UzOTkKKzoxMEI1ODAwMDAxMTJBMjM3RjFEQkI3RDhGRjM1MkE4REVCN0Y5MEU3QTgKKzoxMEI1OTAwMDFGRTQ5MDVEOEQwQ0QxRDZGMzQ5M0M0QjNERjg2MUEyODAKKzoxMEI1QTAwMDlFMkY0QzAyQ0UxNkYxNUUyRjlFQzVGOTUzRTk4NURDMjUKKzoxMEI1QjAwMEJFQzkzODYwQjVBMEJCNTU3QzI3QUZEMjVFQzVFNkYzRTcKKzoxMEI1QzAwMEFEQTI1RjZCNEU5MkE0Q0I2MzA4QTdCNDczN0RFOEJEQjgKKzoxMEI1RDAwMDgxRDMxQkRFN0I5Q0Y0NDc0MkNGN0Q2OTYwQTdFRTAyREUKKzoxMEI1RTAwMEZGMDdDRjlGODRFRkVDRjg1RDlGN0NDNDU4NkU1RjlCOTQKKzoxMEI1RjAwMDE2MzgxOERBRkYwRDM5QTI0RUJCQkM4N0FGQjcxNUMzOUEKKzoxMEI2MDAwMDc1MDhDQTFGRTgxREU1RUFGNEMzRDhERjAzN0FFRUQ3NTAKKzoxMEI2MTAwMDU4RUYwMUUzMjk1ODNGOTQ0QTZBQzA4QkZEMDFCRTlGNTEKKzoxMEI2MjAwMEQ3RTIzQjc2QkM2M0Y4MDhGQ0JEMUQzOTYyNUY1QzI5M0MKKzoxMEI2MzAwMDJCNDU3QURERjdFRTVGMUNGNzdBRjE3QzcyQkUxRkY3QkYKKzoxMEI2NDAwMDMzN0JGMDI1RUNFN0NDMEZERTIyRkZGRTk4Mzk1MkQ0OTUKKzoxMEI2NTAwMDZFOEZGM0RDMUNEOUI4NEU4OTNFQkZGRjE3QzYxMEZFQjMKKzoxMEI2NjAwMDFFNDU2N0Q3OTkzNUQzODEyRjY3NzYxOTdEMzhFNENDOEQKKzoxMEI2NzAwMDg3MkZCRTMzMDJGREU2MkUxM0FEMUI4MURGQjAwQUNGNEMKKzoxMEI2ODAwMEU3M0MyNkVBMDA1OUIzM0VGRTdGNTdEMDQ3RUUwQjk2QzMKKzoxMEI2OTAwMEZBNDlEQUZGNzlDQ0M3RjU1MjIyM0YwRkZEOTNGOTczQ0YKKzoxMEI2QTAwMDY5NUY3MDBEMEIxQ0MyRjNEMEJGNTgzMDkxRkNFMkI5M0EKKzoxMEI2QjAwMDJDNDhFNzcxQ0Y2QUQzOUY4NzFCN0I4RTZFRUNGOUI5NUMKKzoxMEI2QzAwMDk4ODA0NzdDQzU5RUEzRkJFNUY3QUU5QzJGOTdGNTJCOTIKKzoxMEI2RDAwMEIxQ0ZGRjI2RjhGMUNCN0VFQUNCNEYwQkZFOTVGNTAwRkMKKzoxMEI2RTAwMDREQjIxRUUwRDUyQkQ3MDMzNEM1RDQwMzQ0RkQwQzU5MEQKKzoxMEI2RjAwMDBGRjAzNUFGMDc3ODU1NUYwRkYwRTU5OEY4NzA1QzEwRTQKKzoxMEI3MDAwMDcwMzRFMTM5M0E3MUZCNERBMkZCNUYxNjVDNzk5RTREQjYKKzoxMEI3MTAwMDc4MkU0RURDN0RERjc2QkFERjVGM0Q4MjJENTdFMEE5QzMKKzoxMEI3MjAwMDlGN0E4Qzg0NUNEOUJGNDc2NzhGNkRCOURFMTgzRjJCMzkKKzoxMEI3MzAwMDg3OUUzN0M1RDQzNTQ0OUZGMzdBMDY5OTE3MDBCQTUyQ0QKKzoxMEI3NDAwMEZEOUNGNEVGNjJGN0MzQ0I3Q0JDOTQ5RjRGMTU2NkYxNzAKKzoxMEI3NTAwMDUwMUU2REI1ODgxQjdDNDNEMTFGRkUxNEZEMkM5NERGNTkKKzoxMEI3NjAwMDVCQkRBRjc1MDNBOEIzN0U3NDQzOTE1QTEwOTVBRkQ4RjMKKzoxMEI3NzAwMEY5MDA1RjlFRDZFRTNCMUY5MDJCQ0U2RkYwMzExRkVEOTAKKzoxMEI3ODAwMDRCMTQ3MjcxREYwRkM2MjU2MzNFRkZFMzg3QUI3NEZCN0EKKzoxMEI3OTAwMENEN0FGN0EzOUJBNTdGNjdEN0Q5NzMxNjYzRUY2N0VEQzMKKzoxMEI3QTAwMDdFOEJGQ0I3MUE0QjgwRjZCRDdERjZFQTBGQzhDRUNGNzQKKzoxMEI3QjAwMDYxMDExN0NBQzlGOTU3QUZDOTBCRkU1RkQ4NzkwOUNGMjQKKzoxMEI3QzAwMDFEQTEwNzRDREM2RjRGMjdGRjY0QUE4MEU3OEVCRERDMEMKKzoxMEI3RDAwMDdGMzQ1OEZDMjYxQUM3Q0ZCQzRFMTc4NUU2MUM1RTUwMzYKKzoxMEI3RTAwMEI2NzhFRURENERCREYwOTdEMDc5MTlBMzA1RkMwQTdFNDEKKzoxMEI3RjAwMDBGRjhCRDQ5NUNEOUNDQTAxQkUxOTZGQkY4ODFFQkRDQ0UKKzoxMEI4MDAwMDc4NkRCREMxRTdDNUVCMkQ0QTQwNjU5QUZEOURFMzU5QjIKKzoxMEI4MTAwMDczMEVCRTZGQjA3NDFCQzVGOTYyNzQyRTdDNDIxNDVGNDgKKzoxMEI4MjAwMEQ0NzY4OEY2RDIzQjJGREMzNzFCRUZEQkY5RjlDMjY2MDIKKzoxMEI4MzAwMDAxNDczMDU3RUM1QkI2MzAwQkNFM0JDMTFFRjk4MkQ2QzgKKzoxMEI4NDAwMEZCQzQzNTM0ODZGQkUzQTEwMjVFNDc5Qzg4RTcxN0MwNDIKKzoxMEI4NTAwMEI4NzZGQkQ5MTA0RUQ2Qzk5Q0I0MkZERkVBQkMxMEMxMTQKKzoxMEI4NjAwMEI4NDRGM0JCMTAzNUI5QzMzNUJGMEJDMTIyM0M1RkQ1MUIKKzoxMEI4NzAwMERGRjM5OERGOEQ0ODE1RjBCNTBBM0RFOUMxRjMwNTBCRkMKKzoxMEI4ODAwMEU5MUMwNUQyOTM4RjNCRTZEMDc5RTIxOUY2ODVCNDBFMTgKKzoxMEI4OTAwMEZENTREMjA0NUFBNzc0MjFFMkIxM0U3RTgyRTYxQzA0MTQKKzoxMEI4QTAwMDc4OUUxMUQwOUY3RjkwMzk0M0RGRjYwNEY1NkQwQjNCRjYKKzoxMEI4QjAwMDQ2RjU1QzRBMjRFMEJFOUMxNjNERTdEMTI0RjRDRDlEQkMKKzoxMEI4QzAwMDg5MUNBRTNCMTM3OUZDRDY5QUFCREY5NzE5OTBCRkU3ODIKKzoxMEI4RDAwMDkyQ0FDRjQ5MzhFN0IyNThCMEFFMDJGQzkzRDY1Q0VFQkMKKzoxMEI4RTAwMDlGN0MwNDk0ODYzODkxRkZERTRCRTkyREZFNDE2QkNBQTQKKzoxMEI4RjAwMEYxNzc0QzhDQkUyNTQwQTc2NTBFNkY4QjhBN0VERkREMEQKKzoxMEI5MDAwMEUyNzdCRkQ0MEVBQTU3RDg3NDVGOEEwRkVCNkI5NjU5QjMKKzoxMEI5MTAwMDlEOTU5ODA3MERFNUYyRkM0RjkzRDhBNzAxMTRBOURCN0MKKzoxMEI5MjAwMDBFREY2RDlBOUE0REVGQTU1N0Y1NTBGRUI0NjczOTIzOTcKKzoxMEI5MzAwMEJGQUEwRjlGN0UwREZDMEZGODdFMTZEQjc4N0U0MzhEMkQKKzoxMEI5NDAwMEFGMEJGN0VEN0FGQzQ2QUEzMzk2Q0ZCN0UwNzM4MDUzN0UKKzoxMEI5NTAwMDExN0M4MUY3NkZBOTg4RkUyRTUzRTFERUQyRkQ3OEZFQkYKKzoxMEI5NjAwMDI0MEIyQTNFOUU4RUY0MTJCRjRGMTNGRTdDRDNERUNBRjgKKzoxMEI5NzAwMERCODcwMzVDODU1REMzODg4RDA3RUUxNUVCMkZFOTA5MzYKKzoxMEI5ODAwMDYyN0Q5ODlGQkYxQkZCRkU0MDdDMUZEQUI2QzNERTdGNDMKKzoxMEI5OTAwMEFEQzc0NzA2ODhCQkYxQkIzMTM2OUFGNzExOTE3RjYyN0MKKzoxMEI5QTAwMDQyM0Y4Qzg4OTFCRjUxNTE3OUEwRTdBNUEyREQyNEVBREUKKzoxMEI5QjAwMDAxRjFDQzA4N0YwNTRGNkZEMDdCRTk1QzNFN0M0Q0ZFRUIKKzoxMEI5QzAwMDcxQjlCRDkxNDVGRkIwOUZBQTY4QkZBNEE3QzY0NjFGMjUKKzoxMEI5RDAwMDQ3RTUxMEE2NTg2NkYxQjVENkMzN0IwN0E3RjA3NUY0MDYKKzoxMEI5RTAwMDExNkE2NDFGQ0FGQjI4NzEyRDE1NTczNkIzOURGMEJCMzEKKzoxMEI5RjAwMEEyMjVGMjg2MjkxRjUzMkQwMTIzQjYyQjlDQ0I1QkIxQzgKKzoxMEJBMDAwMDlGOUI5NDA4NURGMzY2QUM2RTQ1MzVFRENEMkIxNEZDMjEKKzoxMEJBMTAwMDE2MUM4N0YyQjk2QzFDREZERkRDM0FEMkU3NzNDMkEzRDUKKzoxMEJBMjAwMEU5MzM3ODdFNzZEQTBDMEJENTRENEY1M0Y5Nzk0QzRDQ0YKKzoxMEJBMzAwMDBERTZERjA1NzI3NjU3MzVDRjBCNjNCQjVBOTM3NzkxQ0UKKzoxMEJBNDAwMEVCMjA0NzIwQkVEOTExQzczRkYwRTY3MUJCMjVCRjZGODEKKzoxMEJBNTAwMDEyNzUzRUYyNzkwRTFFRjQwQzAwMUFGMkM2N0Y5QzRCNTIKKzoxMEJBNjAwMEY2ODRBRkY3N0U5NjJCRkNCNDYyNTYxQ0YzRkIzMTVGNzUKKzoxMEJBNzAwMDkwMUVBOEZDNUQ3RjdBNDJGRjVDRTg4OTY5RkUyNzRDMzYKKzoxMEJBODAwMEU0REYwQjdEMjFGNTcyNDBENDJGNzU4OTczNTRERTFGREUKKzoxMEJBOTAwMEMzRjFGRTVFRTUzQ0QyMTc3N0IyNjZEMkU3NzdCMTkwOEMKKzoxMEJBQTAwMDA5RjFEQkFCRkYyNzY4RkMyMzE4Njc1QTQwRUYyRjRERTUKKzoxMEJBQjAwMDlGMTFFQjU3NzE3RTk1RTNERTFERDQzRjlGMkFGRERFN0IKKzoxMEJBQzAwMDA5N0FCRkI3RkFGQjVGQTc5MDVEQ0M3Q0FFRTFGMjgwNEMKKzoxMEJBRDAwMDY4OUQ1MjUzNEM5RDUyQTNBODUzNkFEQTNERkY2MDg2N0QKKzoxMEJBRTAwMEE2NEVBOTY5MkZBRjUzNkFEQzdEQjUzQUE1MUU1QTU3RjkKKzoxMEJBRjAwMDNBNjIwQUVGQzNGNTk2MjNGMzQwMjQwMENFRkRBMkFFQ0UKKzoxMEJCMDAwMEU1MDBENkI1OTQ0NUY5RDIzMTk1RTc1RDgxN0Q2OUZEQjMKKzoxMEJCMTAwMDI0Qzc2OUYzMjEzRkI1MTlDQTI4NEZEQjk2RTRGMDY5QzEKKzoxMEJCMjAwMEYzQTIyQjVBODBFRjM0Rjk1OTU5OTc3NEE0OUZCOEI4RUYKKzoxMEJCMzAwMDM4OEZDN0E5NkIxNTlFMjcwRkRENkRBMTM4MzBBMzMwNTQKKzoxMEJCNDAwMEEwNUI5N0M4MzBCMkEzOTg2RkZDNThGODQxNkI0NTFFQjQKKzoxMEJCNTAwMDA0RDdGNTg2QzEzNUFDNzBGRkE2Rjc3QkRDRUY4NEY5MUUKKzoxMEJCNjAwMEM5MTg3RDk0OTFFNkEzNzU4MThDRTQyMTk0REY5RkIxN0YKKzoxMEJCNzAwMEI3NzQwQkU5MUJCQkQ1ODdGNUZDQjJGRjE5QzE0RDJBODEKKzoxMEJCODAwMEQ2MEIzNUVERERBNEQ2RDhBMzdDMzcyQTRGRjBBQjhEOEMKKzoxMEJCOTAwMEQ5OTA1RjdCRjM3RDNCMTMyOERGRjc5OTNENzA0QjFFRjcKKzoxMEJCQTAwMENDQTdERTFDMTlDQUY0RkM0Q0Y3RkJCMzZCNzMwNUJGQzIKKzoxMEJCQjAwMDk4QzYwNEVFOUUwREYwOUM3RkM3Q0NGMzVFMEYzMzkyQzcKKzoxMEJCQzAwMEQ3REZFQzQ5QTE3Q0E1M0E5NTkxN0Q1OTVBQzlGOEVGODgKKzoxMEJCRDAwMEJCNkM1MkM4OUYzQjk5QzJDRjBENUEzQTg1OTExRDNDMTAKKzoxMEJCRTAwMDk3M0E5RUU4Mzc4Rjg1MEZFMUI5NDBCNTFCNENCQUYzMDEKKzoxMEJCRjAwMDdGMUVEQ0EyNkZEN0IzMEVCMjM3RjVEQkZCRjAzM0U5NjMKKzoxMEJDMDAwMDJEQTkxRjFCOThENzg4N0FBOEIxNTNGRjNEMUJBOEQ3MzEKKzoxMEJDMTAwMDhGQTVDMjFFMEM5QjM2QjZENTA0REYwRDMzNzBCREM1OTMKKzoxMEJDMjAwMDFFRjY2NTRGQTVCOEJCOUFEQjUxRjYxQzlEMzc3NURFMzUKKzoxMEJDMzAwMDcxQ0FDOEU1OUNFQkUzRTE1MUFEQTlCMzRCQzM4NTdGNjUKKzoxMEJDNDAwMDc1QjNDQTdGMTc0MUZBNEJDM0M1RUYyNDFDMzBFQzM1REUKKzoxMEJDNTAwMEQyNkZGMjA4NzhDQUM1NzdEMjRGOTNGQTVBRDJBNTcyM0EKKzoxMEJDNjAwMDI0RkVDNjAzNDQzNzc5QzJERjI5NjAwNTQ4NTdFODlGQTAKKzoxMEJDNzAwMEU0NDFDMTQwODkxRjcxNENCRkI3MzA0QThDMDc3NEU3NUIKKzoxMEJDODAwMEU3Q0QxOTJDNjFFNEEzNjU0QTMzRTk2OTBCMTNGQTVBMkQKKzoxMEJDOTAwMDA5OTI1RUZFQjc1MEM4ODg3QzcwMDM2QkJFMDM3RkJGRkQKKzoxMEJDQTAwMDczQjRBNUNCNDY3RUE5M0RGODY4REVGMDI4OUZCNEIyRjgKKzoxMEJDQjAwMDQ4REUwRTQ1QzcyRkY0RkM0Q0NBRUZFMkYyOEJCNDJCRTIKKzoxMEJDQzAwMDkxRjdCOUJGMzE4OTgxMUYwOEUzRkEzRkUwN0VEMDAxQzcKKzoxMEJDRDAwMDg1Qzc4QkUwMEYxRUMwNzhGMTc3ODY4OUM0MEYxMzYxOEEKKzoxMEJDRTAwMDFBRjhERTM4QTc5RUNFQjdCQUY1RUQ4OURFM0U3QzYwNDUKKzoxMEJDRjAwMEQ0RkVGRTA0NDg5QzhBRjA0QzJBRDZCRkU3OTdGQThEMDIKKzoxMEJEMDAwMEU5RjU1QjNFRkI5QUQ3QzEyRjNGRjQ1RENDMUJEODE2RkIKKzoxMEJEMTAwMEIxNjJGNDYzQzA3M0Y0QzVGQjdERDE2REMyNUVDNDU5REEKKzoxMEJEMjAwMDM3RDk5Njk3RDE3N0RERTRCQ0M4RkZERUM4QkFFNzZDOTcKKzoxMEJEMzAwMDU3RkFGMkNEQjk4MzhCOEM2RTBEN0Y0OTdFN0U1OUQ0MzQKKzoxMEJENDAwMDU5MjhBRjhCRjVEOTcyOUUyRjhDREE3OUNFMzcxNUEyOTAKKzoxMEJENTAwMDc1MjNGMjFEQkNGRjk2RTQxN0YxM0IyMTM3RURCNjQ2ODMKKzoxMEJENjAwMEYwNzc3MDRBNDUzRjM3MjJGRjk0NDVFRDdBQzQ2MEY3N0IKKzoxMEJENzAwMDlBMEI5MDRGN0M2RDQ2NjM1RjdGREU5NUVBMjU3RTE5QjYKKzoxMEJEODAwMDY2RjAxM0JGMEM2N0JFMzRBNEQzNDg0QjQ3QUI4QUYwQjAKKzoxMEJEOTAwMEVGMTk5MTFEQjRFQkY4RTMxREUyMEYwNUY4ODNGMjU5OUEKKzoxMEJEQTAwMDdERUNBM0ZFNzkwQ0ZGNDgzQTFFMTY3RUY0QURDQzRCMTkKKzoxMEJEQjAwMDcxQzQwNEUxNDc0N0YyMzlGRjU0RDlFRjU0RjFGQjM3MUUKKzoxMEJEQzAwMDBCNzhCRTYxMkMyRTI4RDIzRTUzQkQ1REFDQjJFOEY5OTMKKzoxMEJERDAwMDIwOTZCRjYwNDQ4Mzc2REM1ODdFRUI4RjZGMDYyMERGQjEKKzoxMEJERTAwMDQ4QkI5ODc2NzVCRTM5REYzRkRGOUNCRjEyREZDNEYyRDcKKzoxMEJERjAwMDhCRDQyQjNCQUNDRTJBM0JFNkI3NkExNUQyQzdDM0RFNDkKKzoxMEJFMDAwMDE5RDg4QUVENkIxQUYyQTkwRTY2NDc4QTZGM0YzRDZGMEIKKzoxMEJFMTAwMEU2Q0ZDQkJCRkM0NkFDOTMyOTVDMjg5RUU3MDdBQUIwRDMKKzoxMEJFMjAwMEREQjQ4OEFGNTMwQzNGQzJFQjY4MDYzRUNDOUY5NzJFMjMKKzoxMEJFMzAwMDY5REU4RkZCRkE5QTQyRkNGQjk3QkY1ODQ2RkI5QkMyMTgKKzoxMEJFNDAwMENCQzRGNzk1RUQ1NUQ4NkU2QUUzREY5RkM0RjVBNkVCM0EKKzoxMEJFNTAwMEIxRkUyRERDOEFGNzA3QUZDQUY3RjFCMDk0RkJCNUI3OTYKKzoxMEJFNjAwMDA4M0VEREExRUNEQzRGREZCNUYzRUZFNjFFQjIyNEQyRDUKKzoxMEJFNzAwMEVGMDYwQUJGRjU2NjMxQ0Y1QjM2RjA3OUE2N0Y3QTFCRjUKKzoxMEJFODAwMEZEOEVFOEVDOUUxMEY5NEY5RjFCRUFFOTc3NkFGQThCNkEKKzoxMEJFOTAwMDNGMkI5NUY2MUNCQ0RFOEFGQTA0MEZERkIyMDA1RjE3NTkKKzoxMEJFQTAwMEYwRjVDOENEMzBDNDc1MDNCODNGMjhEN0YxQjBBRTQwMjcKKzoxMEJFQjAwMDVCNDc3MEREMDAxRTE3QzlGNzVDQTk3QzFGMUE3QkRBOEYKKzoxMEJFQzAwMDQxRjk2MkI5Q0UxODU5QzcxNDk0MzM5Q0EzRjAwM0UyMjgKKzoxMEJFRDAwMEFFM0JERTVBRDg0Q0VCOERCNzBFOTBFQjhEREQyQTlFMzMKKzoxMEJFRTAwMEEzNUU3QUY5MkZFM0UzRTU1OUNBMDZGMDNDRDAyOTUxNjUKKzoxMEJFRjAwMDI3MjFFRkQ3ODZGM0U5NzdDMTc2MjA5M0QwM0VGQUYwNzkKKzoxMEJGMDAwMEVGQTkyRENFMDU2NzYyREZEQThFN0NERUY2MEZEOEYwNjIKKzoxMEJGMTAwMEQzQjYxQ0MwQUZBMTU5QzU3M0Q0NTg5RTQyRkJGNkZFRTAKKzoxMEJGMjAwMEE1OEI0NTkyOTNGQUMyN0ZBQkNBMjI2NkJFRUY4RUUwMjQKKzoxMEJGMzAwMDlGRDM2QURFQ0NGNzRGNzJCRDM0NERBQTlERDE4MzQ4QTIKKzoxMEJGNDAwMDRFRUYxNDc0RkFDRTAwRTE3NzBDNjNDMzUwREY0QzEzNEMKKzoxMEJGNTAwMDc0QkJDQjAyN0UyQkU5QjU3NjUzOENGQzRGMTk4MEZFNjcKKzoxMEJGNjAwMEM2NTNGREZBQ0ZGQUU3MzFGQUExNTY4QzNCNDdGOENEMUMKKzoxMEJGNzAwMEYzRjBGNzQ3OEQ3OEJFM0JGNzlGNEYzREM1RkRFNjA3RDEKKzoxMEJGODAwMDU5MDdFNTIzQ0YzRkNERkRDNTA2OTgxRUYyNEI5RkRGMzUKKzoxMEJGOTAwMEU3REFBNjZGMzc3NEM0RkUyRTZDODhGQUVGRjNCQkFCRkEKKzoxMEJGQTAwMDI1M0NBRjdCRkVBOTg2MEFDQ0VGRDVBRTdGODdGMkM3RDIKKzoxMEJGQjAwMEI1NTI1Rjg0RjVGQTAyMUMwQ0FFMkZENjVENEI3OTFEOEQKKzoxMEJGQzAwMDgzODVGRjJFRTYzMEQwMTc1ODZGMzIwQ0VCNDhBMUZGNjcKKzoxMEJGRDAwMEExNjJERkZFNzJGQzg0RUZENzdGNjgwMEU5OEQwOTU0MEYKKzoxMEJGRTAwMDY3NEFGRDE5Njk3REY3MURCRjM3NEExRjY5Mzc2MkY1M0EKKzoxMEJGRjAwMDQ1QTlDQ0Q3MEM0Q0E1N0M5NkQ0MUZBNUMyNEY2MTEzODQKKzoxMEMwMDAwMDYyRTNDNzI3NDkwRTg3ODlENjRGMDZFOEUzMjBFOTc3MjAKKzoxMEMwMTAwMEMwRjdFNDc3NzQxOUVDNjE4MzQxRUI2Nzg0NDkyRUNCNTgKKzoxMEMwMjAwMDJDNjAyRjQ4OTQ3QzE2MjZGNkZGQzdEMEY5NzFBMjczQjYKKzoxMEMwMzAwMEZGNzE5NEZFNzkwQzFGQzgzOEE2NDJGMEMxRERDQzRGQzkKKzoxMEMwNDAwMEYxRDEyRUMxMDdFRkJEQ0Y3RkJGNkQ5QTdEMjFGMUUxMDgKKzoxMEMwNTAwMEZCMUY3MEJGNTNDNjUxREYzRTdFOEFGQzQzRjE1MzJGNTYKKzoxMEMwNjAwMEREQURFMDRGREFGMDc3MjgyNjBFNUE4M0VCRTQ5RDU2REIKKzoxMEMwNzAwMEZFN0JENTBBQTdCM0VCRUUyMzc5REFGQ0UyN0JGOEJCQjMKKzoxMEMwODAwMDJCOUFERjczNjg5RDk4NjBDMTc1QzQ1NjEzOEYyRkE2RDUKKzoxMEMwOTAwMDRFRkFCMDYyQTY0NjdGMEM0OUFCREM4NUY4NUFBNjc0MEUKKzoxMEMwQTAwMDdERUY0RjE4NkZCQzI1Q0U0RkREOUI0MTc0QkZEMEM1Q0YKKzoxMEMwQjAwMEVGNUZEODcwOUQyRjA0QjdCRjM0ODlGM0E4OTRFNjM5OTkKKzoxMEMwQzAwMDU4MUEyNUUxOTgyMzdFQTc2NUFFMzFGQzVBMzdBRUM3RDIKKzoxMEMwRDAwMDJBRTE1REY1MEFGREFFQ0EwMUVDQkZDRTEwMzFGM0JDMUEKKzoxMEMwRTAwMDVFMTdFNUU5NjVGRkZERTcyOTQzQTRDRkNDNkY3MEZCNDAKKzoxMEMwRjAwMEQ4QTMyNEZBNzg5RTM3QTRGQkJEOUUwMzVFMUU2RjU1MUQKKzoxMEMxMDAwMEU0MDZCQTA2MEM4RkRBQkZEOEJBODM2M0YzNkZBNTdENTUKKzoxMEMxMTAwMEE5RkZDNUZDQzlCODJFQUFBOEZDRjc5OTYzQzdDNTNBMDAKKzoxMEMxMjAwMDgzQTU5QTNDRjUzMTZCRkNGNTgzOEY4NDlFQ0Y0MzVDRUQKKzoxMEMxMzAwMEMxRjg4QkIyRkQxRkUzM0M0Rjg5QjhGMDk0NTgxRjNCMDgKKzoxMEMxNDAwMDk1QzREN0NCNEUwQkZEOUNFNzE1RUI3OUUyN0E0QUFDNTAKKzoxMEMxNTAwMEE3OUQ0QUQ1Qzc5M0YyM0Q4Mzk3N0Y3NzYyQjEyNUIwRkIKKzoxMEMxNjAwMDU0NDM1N0VGQkE4NDY2Q0M0QjY0MTQ4QUJBOTI4NThDRDgKKzoxMEMxNzAwMEM3NEY3QjUyNzRFNzI0MzhCQzk1NzlERTBDN0M0RjlDMEEKKzoxMEMxODAwMDMzQjA4N0RCNjU1Q0M3QzY3NUU2RjU1OUMxNEI4OEI3MjgKKzoxMEMxOTAwMDQ2MkZGM0UzM0EyREYzNzY5QkVGQzBGNTRBQjEzRkY3MTQKKzoxMEMxQTAwMEJDRTA5QkYzNTY3RTk1NzAzOUJDNTNGMkJDODhFRkY5MjYKKzoxMEMxQjAwMERENDREN0RFRjY5NDZFRDI5N0ZGMDcyRUU0MkM5NzAwNkQKKzoxMEMxQzAwMDgwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJENTdERTAKKzoxMEMxRDAwMDA5N0M1NEQ1RjlFOEI5NzM2NzBCOTkwOTkzOTA0MDEwMUQKKzoxMEMxRTAwMDg4OTM4RDI0NjQ2MUIyNjFEODY0OTI4MDhBMjIyNjJDNUYKKzoxMEMxRjAwMDE1NjUxQjUwQzI5NjREQTBGREE1RDVCRTBDMDYxMTc5NDQKKzoxMEMyMDAwMERBNDI2QjVCRkNCQkJDMDFDMTZBQjUyNTYyQjBCMTI2RUEKKzoxMEMyMTAwMDc2NTQ0QUExRDUzQTIyMjg2QTZBNDc1NEQ2OTA0NEEwNTcKKzoxMEMyMjAwMDU2N0ZGMkZCRkJCRUVGM0JFNzY0RTZERTRDRDg5RUZBOUUKKzoxMEMyMzAwMERFNEJGQzc5NzJFRUI5RjcyQ0RGRjlGNkYzN0QwN0JCMjQKKzoxMEMyNDAwMEIzMjJDOTk5QzA1OEY3RUNBMDk5QTk4Q0Q5NjVGRDIxRjIKKzoxMEMyNTAwMDVFODcxRjAzMUJDQ0Q4NjJGQ0NCMDlBNUQ1RTY1N0YzM0MKKzoxMEMyNjAwMEUwRUYwREE2Q0U2MDI2QjVCMzZGNTIxODUzNTRFNjY1QzUKKzoxMEMyNzAwMDcxNTBDOTY0Q0UwQTNCM0U5REUwMzg5QTBENDUxNEI0MTYKKzoxMEMyODAwMDQzM0Y3NTY2REIwNjY1MzRCRDVFNjE4NUZFRTY4QkZFNjkKKzoxMEMyOTAwMEQ4NzBCQjExRkI5RkM3QkI2MkYzREJGNjdGQTVDNDMwMzAKKzoxMEMyQTAwMEI2QzBDQUQ2MEY4M0Y2ODU2RDQzQ0MzMDAzQjYyQ0M2MTQKKzoxMEMyQjAwMDNCRDI5MTgzNkY0Qzc2MUM4NTcxMTU2RkI0RkE0RDM0NjcKKzoxMEMyQzAwMEY0OEQzRjkzRkE5NjhDMTlEOTUxMzkzRjVBODc5NzMxOUIKKzoxMEMyRDAwMDVDRDc4ODAwQUQ2QjYzNjk0RkQyN0YxNTMxRDZEMzZFQzIKKzoxMEMyRTAwMDcxNkM4MzcxNkFEQUZFN0E1ODgxNzVENUM4RjVCNTY4QzQKKzoxMEMyRjAwMEQ3OTdFRDU0MTgyQkM2OUFENUY3QTk5NUIxNUI5OEMyN0MKKzoxMEMzMDAwMDA2NDIzRkFEMzY0RjM2QzJBQkM2MUFBNDc5NDI4RkU2MUQKKzoxMEMzMTAwMDhBNUMxOEVERkUwOUIxQjRGRTIxRjAzRENDRTdDNTQ2QkMKKzoxMEMzMjAwMDM3RkJDNDE0ODJFNzJBMDc1RkZGMTRCNUJBREMxQ0NGQzEKKzoxMEMzMzAwMEQ4OTkzQjk5QzMwMjhGNTZFREJGQTNDOTBBRjU1NTBGOTMKKzoxMEMzNDAwMDMwMDcxRkRENkQ2MDYzQTA3RjAxQUZGRUU2OTc1MDYxOEYKKzoxMEMzNTAwMDYwNEVBQkE4RTNCMDczMDYzMDY3NjZBODNFRDQxM0E3NUYKKzoxMEMzNjAwMEE5NDNCRjBDRTdCMTUyRjQzQjZDRDk1NTlBRUY0N0Q0QkYKKzoxMEMzNzAwMEE3NjhERUJGQkE2MTk0QTYzREQ5NUJBMEE5QTc2RTE4RDUKKzoxMEMzODAwMEE3NzkzRjdENTM5OUE2OUVCMUU1NDZDREZCRjkyQzc1NjMKKzoxMEMzOTAwMDIwODM3NUQ2RUQ1Mzk5MEY0MDlCRTU5QkExNjlDRjdFMTUKKzoxMEMzQTAwMEZBNzZDREY3Qzc1OEZEQUYyN0MwN0IyRDUxMzE3OTBDRjgKKzoxMEMzQjAwMEYwQTgyOTJBNjYxQjk2Q0NFQjBFRTQwMDdDRUUxNEVCNjkKKzoxMEMzQzAwMEM4NkQ1RUFDRTlFNzU0Q0M3NUZCNzA1RkVGMEM1NDRENjMKKzoxMEMzRDAwMDYzODA1N0EzNUI1NzY4RkE1REE5NTZGMzdEREI2NDNBMjcKKzoxMEMzRTAwMDEyODRFRkVBRTExN0UxNTlDMDdBRjYwRTAzRkNBOEY1RDIKKzoxMEMzRjAwMDI5MkUzRjM0MkZEREMyREJFNTc3Q0I1QkI3RDI3N0NCN0QKKzoxMEM0MDAwMDdEREFFNzJCOUZENkQ2QkQ2NTJDQjNERTA2RUI3NERBNUEKKzoxMEM0MTAwMEUzOEYwMkJFQjJBQkQ4NTVERjg0RDE1NTA4MEZFMDI1QkIKKzoxMEM0MjAwMDE4RUZDQzYzQUFDRjkyOENGMEM5RjhDRDA0ODI4Rjg5MjMKKzoxMEM0MzAwMEY5OUM3REY3RUIwQzYzMkUzRkJFRkY5Q0RERTU4NUZBOTIKKzoxMEM0NDAwMEQyRkQ3N0QwN0MyQzg5NUEzQzg4NzI2QUYxMjAzQTUzMEQKKzoxMEM0NTAwMDhCMDc3Njk3NzZERjA3OTY2OEY3NUQwRkRGNThGN0E4QUEKKzoxMEM0NjAwMDBCQzI3N0QwMEQ1QUJDOTA3MDJEODFERjZGMTNBRThGNDkKKzoxMEM0NzAwMEU4RTA1OUI4QzdERDY0MjMzOEIxNTlENjMxMDgzRjNFRUEKKzoxMEM0ODAwMDVGMEJBQjUwNTkyQUZDMUQwRjdDMDY5RUJCNzgxN0VDNDYKKzoxMEM0OTAwMEI0QzNFNjM1MDBGRTNDRTM1NDhDQzQyNzQ0M0ZGOTQ2NjAKKzoxMEM0QTAwMEZGQUJCODlFRjU4QTk3RTE3NzUxQ0M5Nzg4RkNBMkE5OUIKKzoxMEM0QjAwMEM0OUZFNDg3N0QyOUIwRDZFM0NFQjFDRjZDMTVCRjQ3Q0EKKzoxMEM0QzAwMEJBQUYzNkZCRjNCMDVERjZGNzk5Q0Q0M0NGM0I5NTM3NjYKKzoxMEM0RDAwMEFBMThBQzk3MTlGRDc5QzQwRkFEOENDNjk3NzAxQzMzQTAKKzoxMEM0RTAwMDgwRTNGMTRBNTY2MUM2NzE1RTE0RjhGQ0U5RkJDQjA4QTMKKzoxMEM0RjAwMDhFNTVBQzdFQUYxQkM2M0JGNTAxODdFRjcyRTZBNUY3MDQKKzoxMEM1MDAwMDk2NkNEMkMyQTEwRkZDNzQ3MDAzQjQ3MUUyQjg3NTYyNkMKKzoxMEM1MTAwMEREMkIxOEYzMTk1MkZCQzI1MzY5NTNGQ0Y2M0MwNDQzNUMKKzoxMEM1MjAwMDlCRTREQjlFNkYwQTM5REEyMTNDQzdCMURFMUZFMkRGRjQKKzoxMEM1MzAwMDEyQkVGMDgyMTJDRTlGNzAzQ0M3RTBEMDc4MTI5RTkyNUQKKzoxMEM1NDAwMDZGQzk3MTJDQUM1RTRENDQzQUQwRjEzMTk2QTlERDI3MEMKKzoxMEM1NTAwMDg2NEM2MjBDRkQ0NzNGN0YwMjFFNkE4RDEzODMwREM2MTkKKzoxMEM1NjAwMDdFNzBGMjhDNUQyM0M2NjE4QjNEODkwODI3MkJEQjQ0RUUKKzoxMEM1NzAwMEZCQjc1MTcxNkQ1MDYxMUNGNUVBRTQyNjA2RjAyQzc0OEUKKzoxMEM1ODAwMEI4NTVEQ0FGNjIxNjk4OEJDRjRCQUNDRDRENDZFOEVBODAKKzoxMEM1OTAwMDZBNzZERTQxRjgzNEU0QTk5QTZGMDY4NUQ2QTFDODc1OUIKKzoxMEM1QTAwMDc5MTU2Njg0RkE0NDUxOUZFOTU1ODI4RjI2RTM3QUZFMTUKKzoxMEM1QjAwMEZBMTU4RTNCNTE5NDMzQjE4NEZEODM2NTdFRjIyMTdDNjQKKzoxMEM1QzAwMDNDNDE3MThFQzBGMTY2RkMyOTIzMDFGMTY2QkQ1MkNGNUEKKzoxMEM1RDAwMDc0RjMzQkZDMzJGNEEzMUE3QTA2RTE3QjUzOThDN0M4ODQKKzoxMEM1RTAwMEU1QUU4RkU0Q0Q1Rjk1MjBDREZCMDdDQzdEMUY5NjUyNDUKKzoxMEM1RjAwMEJFRDVCMkU2RUJFNjQyQkRCNjA1RTQ1NjBDOTY1MTdFREEKKzoxMEM2MDAwMDE1NEFENkFBODMyNzMzMUVDMUJBMDE1NjgyRjhCRDEyMzUKKzoxMEM2MTAwMEVCNzJERjkzNDNFRDU0NTdGQkQ2RDdDMjFBODZDNjVENDMKKzoxMEM2MjAwMDVDQkUzRjk4RUMxMEYyQjE2NzI0NkZFN0ZDNkQ5OTgwMTcKKzoxMEM2MzAwMEQ3MzIyOUI3N0NEQUY5NzVFMDFGNDMxOUZCOEIxOTYwRjMKKzoxMEM2NDAwMDUyODA3NDY0RjUxQTA2MzI5Njk4MEM3NDg5RjNDQzYzQTAKKzoxMEM2NTAwMDc5RDgzRkQwRDVGMDY0RTg3RjcwMUNEMEExMTI0RTc3MTYKKzoxMEM2NjAwMEZDN0REOURFODdFRTc0RUI2N0Y1QjBCOTYzMDFERUY2QzkKKzoxMEM2NzAwMDIyQjMwNzU4RUUxREUxRUJCRDA0Nzg0ODNENjIyMUJFQjAKKzoxMEM2ODAwMDBCRTM3REUxNzQ1MjU5MzNBMEUzNUQzNzM2MTcwNTkyMTEKKzoxMEM2OTAwMDUwRkVDQjdEQUEzMzMzNEYzM0VBMkRDRDA5MzRBRTdDMjcKKzoxMEM2QTAwMEVFNEUzNjA4NzgwMTNFNUUwMjlDRkFERjg3MzREMjg3NzAKKzoxMEM2QjAwMEU0M0U1Q0FBM0UzNDdFMTA5RkJGODRERjc1Qzk4MjBGQzIKKzoxMEM2QzAwMDg2RTA3REEzMDY5RTBDRTA5OUFCODFGNzhEOTFFMDJENkQKKzoxMEM2RDAwMEUxNzFCQTM4RjAxNEVFOTM2QTNGMzgxOEUxM0MyRkIxOUIKKzoxMEM2RTAwMEUyOTY2NDAwQzE4OEMzQzFBMzhBMDFFNTVERTc1MzhGNjgKKzoxMEM2RjAwMEEyRkM2QTU1NUQ0OEMzQjUxMzM5N0ZBQjdENDkyNTkyQ0QKKzoxMEM3MDAwMEVGNkFCM0Y4MTRGODdFNTlFQkVCQTQ5Nzc1MzYwMjAzODEKKzoxMEM3MTAwMDM1RjUwRjlGREU3NUVBRTBEQzE3MEU3Q0ZGRTQzQUFBRTAKKzoxMEM3MjAwMDc0NzhCNkUwRURCM0Y2Rjk0RTVBREY4QUU0ODQwQkFFQzYKKzoxMEM3MzAwMDVGREIyRUQ2N0ZFQTQ3NkM2MTQ1MEVBRTJGNjc2MDMwMTcKKzoxMEM3NDAwMDI3MzQ2RTI2RUUzN0JDRkZEMzk4OEE3QTg0NUJEMTNCQzAKKzoxMEM3NTAwMEMzNjMxMDJFNTNENEI2QkQ1NzIxMUNENjI4MkUwQjhDODQKKzoxMEM3NjAwMDNCQzlDMkJDNTFCMEJGNDMxQkNBRDkyN0IwNDcyNUMxODIKKzoxMEM3NzAwMDdBOTcwM0UwOTEzOERDRTY1MjAxMUUxOTNGNTQyQjdDNzYKKzoxMEM3ODAwMEQwRUYzRkQ3QUM4RUJCMDNDQTkzOEQzMDc0M0EzQzU3ODEKKzoxMEM3OTAwMDBDMTU4NDY3NkNENzQ3M0Y4MUZFMzJFQ0YzNUMxQkExMUMKKzoxMEM3QTAwMDM2REYwMkYzODE3MTkyN0YxNEVENEYwNUZFRjA2NzMzOUYKKzoxMEM3QjAwMEIzMjI5RDk5NTJFQTBGNEM4NTdFN0I2MjU1MTdFQUJGRTIKKzoxMEM3QzAwMEYxMkE5QjhDNzgyNUUxMUMxRkNERDcyMTlGOTczRUJFNzcKKzoxMEM3RDAwMDVEMDlEQTQyQ0YyNzM1RjUxNEFFODJGMkU2NjQyN0FENjMKKzoxMEM3RTAwMDRCQUU3MzUyNzk0RjIxRUEzQjEyQ0VGMUE5RkM3RDY2MjQKKzoxMEM3RjAwMEVDNDk5QTExNDYxN0Q5MDIxRTFEQThDRjAxM0M2QjEzQjQKKzoxMEM4MDAwMENDRUI1MUZFNzU1OTc5OURCOTMzNDlFRjVENjNFNTc0MDEKKzoxMEM4MTAwMEQxMTE5NUU0NDNCOUQ4MDE2QjBENTA3RjdFM0JCMzg1QjAKKzoxMEM4MjAwMEYxQzMyOEY3QzA2QjYwRERFQzZEOTVFRDgwRTI5Q0MzMzEKKzoxMEM4MzAwMDNEMzA5NkUwRTFFMEZEMDgzREFCOEJCMTFCMTA0RTZCNDcKKzoxMEM4NDAwMEE2OTYwRDg5ODMzMkExODlDMzQ3OEYyNzNCOTMxNTlBRkEKKzoxMEM4NTAwMDVGRjU5NzQwNzA4NUExRTdENTQ2QkZEOTYxQzNFNzY2MEMKKzoxMEM4NjAwMENERjMyMzAwMzdBRjI1NTQ1RjdDM0NFRDNBNDZGQ0M1NDEKKzoxMEM4NzAwMEI1MUVERkJGNjM0MzM0RjM4NkU5NTUyRDYyMUVGREMxNEIKKzoxMEM4ODAwMEE1MzZENkM4OEMwMDhGNUE4NTU1NUNFOEJEOTdGRjVCRUUKKzoxMEM4OTAwMDI1RjhFQUU3RkZBRUUwMkYwOUU1OTFEN0Y3NjYzMkI3NTIKKzoxMEM4QTAwMDY3Q0FFRjlGRjYxQkQ0M0I2QjAzMjY2NjgxNDc2QjVFMUUKKzoxMEM4QjAwMDJBMURDMjIyRjRENzBCRTcyRkM3MzNERkEwQjBCQTMxNEQKKzoxMEM4QzAwMDQ4RjBBOEZERjI1QTdBNUU3RTdGQTcxOUYxMUVGQjcxMkYKKzoxMEM4RDAwMEMyRjMzNTUxRUUyMUFFMEJDMDM5NUJDMEI5RjZDQjU4NkYKKzoxMEM4RTAwMEU2MUQxNEZFOUNFMzU1QThGRjc4NkFGRjFEMDIxMEYwQjgKKzoxMEM4RjAwMEQ2REJBQUZBNzZDMEE3QkZEQjY3Qjg2MTVCODRGOTdFOTYKKzoxMEM5MDAwMDJERDYzRjJBQzE0OEY0OTJFRDY3RUVBRDExQzY5N0VGRTAKKzoxMEM5MTAwMDBEOEUwMzNFNkRFMzcwQUVDQ0VEM0JCRjk2QjJFMDAyRjAKKzoxMEM5MjAwMDlDRkYzNTkzOTkzQkQyNzhBN0M1N0I3MkRFMkQ3MUMxRjAKKzoxMEM5MzAwMDJBODFGNzIzMkJFRDYxNzU4Nzc2MUZBM0M1RjgyRDM3NjQKKzoxMEM5NDAwMDA2OTNCMEZGQUVBOTZDNEU3Mzg0RkVFNTdFOEYzMUQ2QTAKKzoxMEM5NTAwMDJCMDg4RkQyNDQ0RjA2RjI5MUVBNUJBMTAyNzgzMjY0MzEKKzoxMEM5NjAwMDlFREZFMEM5MDlEMTVEN0ZGQjFFODIzN0Q4NUQ4NTE3NDgKKzoxMEM5NzAwMDgyQjc5OURBNjU3RjI3MEUwOEJBNjQ2RTlCMDJGNEI0MTkKKzoxMEM5ODAwMDQ4QzhBQjQ1REI1NzRFMDNERUQ5NkJCRjlDRDgwMkY2RDcKKzoxMEM5OTAwMDBCMEM3MTgyRDVCRjZFQzdGQTI2ODVFQzkzQzUxRUM2RjcKKzoxMEM5QTAwMDFBODBFRjU0RUQyODVDOEY2MjZCNTEyMjYzRDdDNkYxNzkKKzoxMEM5QjAwMEU3Rjc2MEI5Q0UxNDkyQjNGNDdGMzcwQjk3OEI3MkZDMTQKKzoxMEM5QzAwMDNCMUZENEVBQURDQkQ4ODM5RkEzREU3M0UyMDBFNzBGMTEKKzoxMEM5RDAwMEEwOUU5MkZENURGNUIwQjZCRjY1REI2RjNBODZGMzVDNTUKKzoxMEM5RTAwMEE2RDM3RjMyNTBDMTAzRkQyMzM1NDVEODEzNjNEODE4MzEKKzoxMEM5RjAwMDk0MDNBQjc2OUMzNUM3MzhGQkE3ODM5MzQwRUY2OUU5NzYKKzoxMENBMDAwMEM4MkYxRDU0OEU0OTcxOEY0QTgxRkRFODdFOUJDRjczREMKKzoxMENBMTAwMDRBOEEyNzJGMDVGRDBENkZGMzc5OURBOTNFQzNFNUM0MTIKKzoxMENBMjAwMDYzRjEyNDlGMkNDOENDRTE0RkNCNUNBQkFGMDlFNjcxMUUKKzoxMENBMzAwMDNGQjA5MzI4ODA4RkM1QzJGNTIwQTlGRkE5RUE2QTM1QzcKKzoxMENBNDAwMDA2REFDNzdFQjYyNjBFRjczN0ZFRDlFQjZGQzBGRTEyQTgKKzoxMENBNTAwMDlFOEQ3NkUzN0EzNjk2QkFGM0QxNUZCMEIxRDJFNjZBQUMKKzoxMENBNjAwMDgyMkVBREYwM0RDQTBGREZFRkM2QkU3NjE1NkEwN0NENDgKKzoxMENBNzAwMDlCQ0I4NjIxREFCNUJERUE0NzdGQ0EwNkMzRTc3Qjg3MzEKKzoxMENBODAwMEMxRkIxQkFFNjVBRTI2MTYxQUE3QUVBREYyNzk5QzRGNjAKKzoxMENBOTAwMEQyMkMyRTY3MzYyNkJCRjMxRDYxRkQzMkExQ0ZENTBBRkQKKzoxMENBQTAwMEQ4NzVCNzY3RkM3QzNDRUNFRkEzRkI0ODlEODZGNUE1RTkKKzoxMENBQjAwMDBDNDRCRTMxOEFGMTdENjZFNzAxNEU4MDI3Mzg3NkI4OTYKKzoxMENBQzAwMERFREEwOUYyOEE2NTg0RUFBMzlBMTVCRjA5RDY1M0QzNDAKKzoxMENBRDAwMEYyQkMwMUU1NjFGNUJERkVDMTczNTEyRTNENjM3NDZEN0QKKzoxMENBRTAwMDBCOUI1RkZDOUY4Nzk2Mzk2MzQyRjI2OEFFRTIyMDdEMjQKKzoxMENBRjAwMDQxRUFFNUI3MzFGOTkzNDM3ODMzNDdFMENENkQ0MjFGMDIKKzoxMENCMDAwMDlGMUJDREUxQkI5OEI5OTJGMEJCREJBRDJDQzYwMDI0RDYKKzoxMENCMTAwMDM1QjdCQ0I5OThFNEQ1NEE1MzJDRUEzRkI4OTY0OEZCRTAKKzoxMENCMjAwMDJEQ0JGRUZDNEFCNTRGRDlCRDBBRUM3Qjk3RDIzMzEyMTAKKzoxMENCMzAwMDNCMzk4OUJFMUVFRTVGRjI2RDRCRUVEQkNGREQyOTgyMDUKKzoxMENCNDAwMDBFNDcwQUZEMzA4REI5RURCMEVFREE1NzMyQjY2RTg0N0QKKzoxMENCNTAwMDI2Q0IwMEQ4QzcwMkUyNEJENjkyMDJEMjhGQUQ2OEY3M0YKKzoxMENCNjAwMDJDN0YzOUNBQUZDNDg0RTBDMjFDRUU3QzAzRkEwOTY2OEMKKzoxMENCNzAwMDBDMkZEODg4M0FFOTYxRTAyRjQwNjA1REE2NjAxMkQxQTEKKzoxMENCODAwMDMxRjAxRDA1NjRERkMzMjk5MzJCOEQ4MEU3QjU1NzgxRjQKKzoxMENCOTAwMEZFMDVGNUQ3QjY1NUYyN0E0QUIwQ0EwMEY1OTMyOTJCQUYKKzoxMENCQTAwMDJCOEQ4MDk3QjVBMzgyNDdCMTdFMkVFNTQ3QkM1RTEwRTIKKzoxMENCQjAwMEFDNTJBMTNFMzA3NTFEN0YxRjBENDE0MEFDRTFBOUZGNzUKKzoxMENCQzAwMEIzRDIwQkZEOUY4QzE1RjJERDE1NUM4MEY4NTNGQkE3RUIKKzoxMENCRDAwMDBDQzNDNkIwRjU1QTUzMzlERjNBMTlDNURGM0I5OUNDQkYKKzoxMENCRTAwMDE2Q0U0MDc4NjcwNjQ3RTIzQzdCRjEyMjQ1RUFDMzlCQkMKKzoxMENCRjAwMEE4OTRFQjk0REZCMUM0QzhGRDNGOTlDMkZCNUY1RTJFRTEKKzoxMENDMDAwMEY0OTI2OEI2MDFFMTA2REJFNDhEMDFGOEVGNjlDQkQ4NTgKKzoxMENDMTAwMDg2RUY2RjQ4ODkxM0YwODI3RThBNDJGRDQ4MzhDQUZFNEIKKzoxMENDMjAwMEU0QjgyQjUwRUUyMjNGMzYwMTNGMEVFM0EzQ0QyOTVDNDIKKzoxMENDMzAwMDZFQzIzOEVCNjg5QzFDMEVGRkRBMTlDM0YzNzFERjYwMUIKKzoxMENDNDAwMEJGOEM2MkJGOENEQzRFRERDQUU3MDdGREM2RTYxMUZGNzQKKzoxMENDNTAwMDJGMzRDMkZCN0JDRUMzRkJDOUExNzlFQkYxQTM1REUwMEUKKzoxMENDNjAwMEM3RjIyNjYwODRBNEE3QTUxMjFFNEQ4QUU2RkEyMTJCREUKKzoxMENDNzAwMEQyQUU2MzYwMkE4NzlGMzUzNTk2QUZCMzc3M0Y4NjI4NUIKKzoxMENDODAwMDM0NEU5MzgwRTM3MDgwN0JFRUU1QUZGQjJEMzE5RjZGRDgKKzoxMENDOTAwMDdCREQ2MUZCRTU1NkIxQkQzNTZCNUJGODdBMThEQkFDMkIKKzoxMENDQTAwMEU5RTdFNDVBREQ3NzI1NDA4MDM4OEZCODU0RkFFRUZFODQKKzoxMENDQjAwMDI4NjZBNUU3NkM1QkVGNzdDOTc5NUMyRjQ1N0RCNTQ2QTMKKzoxMENDQzAwMEU4RDVDQzdCMkQzOTE1QUEwNUQ3QThEOTEwMzAzQkIxQjIKKzoxMENDRDAwMEJENTk3MUZCMTAzRkQzNjA3RDA4REYxOUQzOEFDNEZBQjgKKzoxMENDRTAwMDFDNjI3RDBFQkUzRTlGMDY0RkQ5QzE5RUE0NTlGNkJFNjIKKzoxMENDRjAwMEY4REIwQkY3REVGRTcyMEE0NDdGMUFCQThFRDQxRkQyMUQKKzoxMENEMDAwMDQ3N0ZGQkExQTQ3RUNCRkIyMUU3QTk4MzY3MkY5Qzc1RkUKKzoxMENEMTAwMEYzOTNGMDQ0N0FBNkVGNzJCNEY4MjhFNzc5QUUzRkJBRkQKKzoxMENEMjAwMDRFQkVDMkYxNEFGOTc3MzUzRjg2N0Q0NEZEQzRBOUM1QTAKKzoxMENEMzAwMEU3OUE5NjY0QzNFMjlDRDA3N0FEQjg5N0M1MjFGRjVDQjMKKzoxMENENDAwMDVBQUFCMDczODdCM0UxQzhCRkJENjVEQzhGRUFERDY1NjEKKzoxMENENTAwMDcxMzUzOUM5QUY5Nzk5NUExQ0QxQUY0N0NGRjVGNjVFRjcKKzoxMENENjAwMDc3QUM5OTI5QTQxNzY5RkQwQ0REMDlBRTgwMUJGNUQ0QjkKKzoxMENENzAwMEQzQ0NCNTAzRkExREFGRDMzQkJBNjEzRjc3RDk0MkRGQkQKKzoxMENEODAwMDg1RTQ4OUI2RkU0M0MxM0ZGQkZBOEQ3QTkyNzA3RTQ1RjkKKzoxMENEOTAwMDk2QjIxNzlDMkVDNkNBNTJCNzEyQkYyRTFBNThCNjNBNzAKKzoxMENEQTAwMDE5RUFEN0E3M0U0OUZDQkE2ODU4RDk1OTc0Q0Q0QzRERjkKKzoxMENEQjAwMEREQ0VFQkQ5NjU2NzUzQjBGRUU0NzZGRUZFMjRGNzBCQkIKKzoxMENEQzAwMEM4REY5OTc3N0JFNUU0QTEyMUZERTFDNjU0Mjc4REFCNEYKKzoxMENERDAwMDk2MUIxOEUyOTE0NUJEQ0I4NTcyNTJDMkIzQkZCMkM4NTMKKzoxMENERTAwMDYyQTg4RkE0QkZDRUVDQTU2NzdFOUU1MTIyRTQ3Mzg5MTIKKzoxMENERjAwMEI0RTc4MzQ2OEQzRERGMUQ2M0Y1QUEwMEQ3NkU5NEE3ODcKKzoxMENFMDAwMEIwREUwNUE5OUUzOTA4RkZCQUU4Q0UwNUE4MEFERjFCRTcKKzoxMENFMTAwMEZEOTExOUY1MjFDNTBERkEwNkZBNDU5QzBFMzYwRkU2NkYKKzoxMENFMjAwMEE5NzQ2RUFDMjAzRDcwODVDQjZBMjQ3ODBBM0YxNUFDOUUKKzoxMENFMzAwMEVEMUJFOEU3RTU1NzlFQjk3QjE4MUZBNjAyRTczMTU2QzAKKzoxMENFNDAwMEQwN0ZERDJCNUY3REYxMjFDQUQxOTMzNjE3QUE4MTYzOTQKKzoxMENFNTAwMERCMUU1OThERkFENUQ4QjZCRjdGQzVFNUFEOERDRUE5RkQKKzoxMENFNjAwMEU0QkNDN0EyQkYxMTlFOTdCNDVBNjhGRTYzREJCMjk2QkEKKzoxMENFNzAwMEUwRkJFM0RGNjk0QjQ1RkM5OEQ4RTE2RjQyNzZEMERERkIKKzoxMENFODAwMEZFQzc2MTlFRjA3MzJCNzY0Q0Y5MjZGQkYyRjU4QjVFQTQKKzoxMENFOTAwMDc4N0M2NjY2QTg1RjAyM0M3RUMyRTE3MUJFMEFGRDhBQUMKKzoxMENFQTAwMDVEMDkwN0Q2MDc0OTRGMUJDRUZEOThFMjdCRDBDQjMzRjcKKzoxMENFQjAwMDkxQ0VDRkIwMDEyRTNDNTdFOEI2RjM3RUY0RkVDREMzNDEKKzoxMENFQzAwMDk1QjAzRTc4M0VCMTA3NjYxMEE2Mzc0RkZBRDIwQTBDRUQKKzoxMENFRDAwMDI0NTQyRjY1QjE5QTdBQjk3NUE4RTZGRDI5OEU2NDRENjAKKzoxMENFRTAwMEZCRjU4OTU5OUFGNkE5Q0U3QzRERkRBNkNDQjE5QUY3RUYKKzoxMENFRjAwMDZGNzY5NTZBRUFCNzk0NENENUJDNUZFOUFFRDRENEYzQUIKKzoxMENGMDAwMEZEQ0Q5QUY3MEJGN0I1NkFEQjBGM0E2OTFGMEEzQjJBOEEKKzoxMENGMTAwMENBNTE5Rjc3MDUzQzRENTg1RUQzQjlBOTdDQTA5M0Y1QzMKKzoxMENGMjAwMEYxRUIxNjA1N0Q0REY4N0NGQ0Y5RkE2MjNGRUJFQkRGODcKKzoxMENGMzAwMDY1MkIzQzc0MUU2MEMxN0Q1MUMzQ0UwNzRBMDM0NDhGRUMKKzoxMENGNDAwMDVEMDY5NzMzREM4RjNCNkZCMDY3NjcyQUY5NzEwMUVDQTAKKzoxMENGNTAwMDAwRUM2QkFEM0Q4MzcwQkZBNjJDN0M0ODhEQzE3REU5OTQKKzoxMENGNjAwMDYxRTRGRjZBMzEwNzdGMzYxRUU1RkM3Qzk1RjRERTE2MkUKKzoxMENGNzAwMDIzMjNGREIxNjU0RUFFMEY3RDdGODc5NUUwOEIxRjIyODkKKzoxMENGODAwMDlGOUExRjRERkM2NDIyNjhCOEI0NkUzQzAzNTU3MDlGOTUKKzoxMENGOTAwMDNDOUE3NTk3QjJFNUJBN0RCQTRCNTM5RkUyRjhCMUU2NzkKKzoxMENGQTAwMEZERUIxM0Q3NkFEQUE3M0ExRkQwRUREMzY2NERGRDY2QzUKKzoxMENGQjAwMEQ3MjNCQTdEREFBQURCQTc2NzM0RUQxMzNGMEQzNjIxRkMKKzoxMENGQzAwMDE5NERFQUY0QUE3Njk4RkZCOEMzOUJDQTcxNUZDNjc3NzkKKzoxMENGRDAwMDc4RTcyM0JEMTRGOTNENERDNDQyRjZENEJGOEVBNTFGOUEKKzoxMENGRTAwMEVDMkFGNDZCQkRENjk4NDhFNTlFNDYyN0Y5QTVGNjM2OUYKKzoxMENGRjAwMDY2NTJCOUFGRDE0NUNGRkZENjU4NDJFNTFCOEQ2RTJBOTgKKzoxMEQwMDAwMEZGRDE3ODAzOTU4MUM2MEEyQTlCMUI5QkU5RkQ1RDhEQTQKKzoxMEQwMTAwMEFENTQwMjA0NDdBMEJDODgxRjI0RTQwRkQ0RDFERUVGMzYKKzoxMEQwMjAwMDMyMDQ2QkYxQzRGNUIzMjdDRjExNUZFQzFBMTBFQ0MyRDgKKzoxMEQwMzAwMEZBQkRFQzJDRjFDNTQwMUEyMzNBQjRBNjMzRTI2MzVEODUKKzoxMEQwNDAwMDY5RUU2NTY5NTA5RTRCRTVGNTZFOTM2RDAzQ0E4MTY2ODYKKzoxMEQwNTAwMDgzM0IxRkY1RUJBRjlFM0NCRkQ5Mzg4MkIxRkJENjU2NjAKKzoxMEQwNjAwMDI0M0E2Mjc5REQwQTc1REE2QzM0Q0NCQ0U3MzdCQjg3QzkKKzoxMEQwNzAwMDMzRjY3QjE0MTlFM0E4NUU4OUY1RUUyOERFN0VFRUM5NEYKKzoxMEQwODAwMEYzOTU1RTlBMUYzRjZGOUUxNTNBNkZGRTJBMzVDMjc5NUYKKzoxMEQwOTAwMEYzRUY4RjNCRURFODZGMzk3MDNFQzM4RUVCM0EyMEZDMjcKKzoxMEQwQTAwMDRCNkU5NjZGNUEwNDY1QTkzMURGODQ3MkYxQjA0RThGRDIKKzoxMEQwQjAwMDkwRTVCRjZDQTUwNjVDNEZCM0MxMzUxQkY1MTRFRjhEMzEKKzoxMEQwQzAwMDI2QjYwM0Y4QzUwQzg1REJBM0JEN0E2MDFBOTc0N0RENDkKKzoxMEQwRDAwMDM3NUJDOERFMzk2ODcwMkY0MTNDMDczRUZEMDRDMkVCNjgKKzoxMEQwRTAwMEFBMzRGQjBDODQ1RkI3QkQyNzA5RTE5MDk4NjZFM0Y1OEQKKzoxMEQwRjAwMDg0OUUyNzE0NTc1OEREQzRENzE5OUIxNjNEQTM5Rjc1RUUKKzoxMEQxMDAwMDBFNEU4QkIwQ0U2MTY5MEUxQTlGRjlERDIzNTBGRUNBMTgKKzoxMEQxMTAwMEZBQzE0QTc3MERDQTg5ODNBNUVFNzQ5Q0NGODEwQTBCQTgKKzoxMEQxMjAwMEQxOEZCN0MyRUU0QjQ3MjY2Nzc0MTdDRjBFRjNCQkZDMDcKKzoxMEQxMzAwMDJBQ0Q0NEZCMzZDQkNDRTk4Q0REQUVGQTc2NDRCMEQzQjUKKzoxMEQxNDAwMDVFNDhFM0ZBM0VFRDFCREE3M0I3NDU5MzFFN0VEMEMwMEUKKzoxMEQxNTAwMDk2RUQ4QTAwQzdCRkE3NzEzOTc3NkE0MDY0RkZDQjFCODEKKzoxMEQxNjAwMDAyN0U2NTMzRURENDVGRjc5QTI4M0FFRkVEQUVDODIwMjIKKzoxMEQxNzAwMDNEQThCQjFFQTAwNEY0RDE3REJDRkVGNDZFNkFCN0M4MDYKKzoxMEQxODAwMEEzMzAzQUQ3OUMyQkY4RDRFRkRCNTZGRkZCMTBCQ0ZGNDMKKzoxMEQxOTAwMEQxOUE2ODE3RjE3MEM3Mjg5MjRGQjc4Qjk3RTcwRkIyRjMKKzoxMEQxQTAwMDkyREUzMjdGQzY4ODMyOTQ0QjczQzVGOUQ4MDJCQjcxQzgKKzoxMEQxQjAwMDMwMUQ5MzE5NjNDRDBFRThFNzRFNUJGRTdBMTRGRjU1RTAKKzoxMEQxQzAwMEYxOTVFNjU4QTgyRjFCN0VENzdBMkM1N0E0NkQzNkM3NDkKKzoxMEQxRDAwMDQxNTk5REYzRkM3QTU0MUY2QjgwQjQ4QUM5NUUwQUJFMjQKKzoxMEQxRTAwMEQ5MDhGMzVBRDhBMDNBQjlGRDI0RTQ5QTdCRTU2NUM1N0QKKzoxMEQxRjAwMDYzNDgzQzQ0MzgyMjlFMDI3Q0M5MkU3QzUzQzA1QjdFMkYKKzoxMEQyMDAwMEY3QTY4MEU3REMzNEExQjdFNUIyREM2RkI0RTczRTBCRUMKKzoxMEQyMTAwMDExNEYzQUU3QkYzOUIyMUYzRkJEQjY1REU4NkRFRjlBRDcKKzoxMEQyMjAwMEY5QjgyQjlGMzZGOUMyRkQ0OTcyREM3Rjg4NzkxQzM0MkUKKzoxMEQyMzAwMDMzQjc4MjdBRENFRDc2QzI4RkJDMzk2N0VGMkQ4NkY1ODUKKzoxMEQyNDAwMEU3QjUzOTBDNzQ2RTJGRjk3ODgwOTFGRkJFRjg1MzBGNTMKKzoxMEQyNTAwMEYxQjk2QjNBODM0RjFENjI4NEU3QUQ0ODI3MTc5MzUzQUEKKzoxMEQyNjAwMDMzQkQ2QjQ5M0U4QzNEMDdGMjA3RjlFMjc5Q0Y0Nzg3MjIKKzoxMEQyNzAwMDg4MEYyRTEzN0NCMDlFRjhENzlFQzYwNkFBRUY2REY0RDkKKzoxMEQyODAwMDUyQjlBRjcxODNFMDgzOUJBOEZEOERDNjJEODIwRkZBNDIKKzoxMEQyOTAwMDA0MUY3QzlBOUVCNzM1Q0VBMUYyOTU0NjhGRTA4M0ZDQTEKKzoxMEQyQTAwMDVDNzU4NkMwQTc3OTg5OUU3NTQ4RkZGMkZDNzI5NkQ1OTkKKzoxMEQyQjAwMDYzNDI3OEZERTUxMTBCNTNGMTdDQTJDRDQyNzgwQTE0NEMKKzoxMEQyQzAwMEYwQzRBM0YxMTgyRjYzNzE2Qzc0RjY4RDlCRDFGM0RCNUUKKzoxMEQyRDAwMERFRkRENzlERjNBRTQ5NzQ2RkMyN0RFOThEOTM0MUZEQUMKKzoxMEQyRTAwMEVDRUFGRUYxRTcwMDczREE5MTlGM0NCREJEODJGOEM3MUUKKzoxMEQyRjAwMDAxQTdEMzhFN0FFQjMzNjk5NTMzNTBBRjNERTA3NkRBRjAKKzoxMEQzMDAwMDRENTBGRkRERjY0QURFRUU3MURBMkQ1MDdGMzY2RDA2QTgKKzoxMEQzMTAwMEFGN0I5REY2MjhBODNGQjc1REQ0N0Q4QzBFQjU5RkRGMEYKKzoxMEQzMjAwMDdFRUIwQ0Y0NjM5NDMyNjUwRkQyNDNCOTM1NzkzMkIwOTkKKzoxMEQzMzAwMDZCOTA4RkE1N0I5MDBFQUU0RjVDMzQxOUU5QzA5OUU2RDcKKzoxMEQzNDAwMDI0N0M5OEVBNUNCQjA3RUIzNzY1NkUzNTBFNzJBMjM3MUEKKzoxMEQzNTAwMDM0N0YxRDdFNTcxNjVGNjlDNEVGMjYwRkJGNkIxRDdFOUQKKzoxMEQzNjAwMDc3NUREQTY2NjNGODc3MzdFNDNDQkYwRUVCRDM1QzVCM0UKKzoxMEQzNzAwMDhEQTgwRjNBRDNGODc5QTlFQzQ3RDY2NUJCRTRBRjY4MUUKKzoxMEQzODAwMDI3MjA5RThFNkVBQjIwM0U5RUQ3NUE0MTdDNUNDMkE1NjQKKzoxMEQzOTAwMDZDNTZFNTdERThBN0FCNkI1NTFDMEFDRTYzOTZEMjdCMzUKKzoxMEQzQTAwMDU4QUY4MDBFNTE3QjFFQTgwNUY4QUM3RkZCRTJCOEI1RTQKKzoxMEQzQjAwMDE4ODc4MkY1NzE1NEZGQzVEQUM4N0NGNzJGODgwNzdBODEKKzoxMEQzQzAwMEJFRkI5RUEwNTM5NDlCOTVEMENGN0I0MDNGQkJBMDlFQkQKKzoxMEQzRDAwMDJFRDY1N0Q3QjZDOEJFODhFQzE5OEYxREU1NkI3NjFBQzYKKzoxMEQzRTAwMDk3OEJBMzg1REM1QzI4RUE3NzhBRkFCRjZDRUVCNzcwNkUKKzoxMEQzRjAwMDlDNzdGQkE3RUIwRkIwMURFOEI2OEFDRkEzMEY1RDZCNDAKKzoxMEQ0MDAwMERCMDU1RDc3MDgzOEIyQTI5RTI0QUNEN0IwNERFNDI3ODcKKzoxMEQ0MTAwMEJDNTg3Q0Q3RjI3MEZCMkQxOUUzMjQ5QTI5RkU0MjFGRDkKKzoxMEQ0MjAwMDI3NTFDRDAyQkNCRjY2NUQ5QzA1MEI5QUU5M0NCNjM1MjEKKzoxMEQ0MzAwMEVDMzlGMTIzNjE3RjBDRTA3QzZGMEUzMjZCQzBCRjdGNTMKKzoxMEQ0NDAwMEE3ODk3M0M3QkVFQkZFNEFGMEFCRkVENkFENkQxN0VCRjYKKzoxMEQ0NTAwMDVFQ0U3QzE0RDdBNjVGMDdGMzI0MTA2REFEQjQxREE0NzcKKzoxMEQ0NjAwMEZERUNCQjlFNjBFNEY1RjQ1OTA3QjdERjY1MUM4QkY0NTcKKzoxMEQ0NzAwMENCODMxRTE0OTU1RThDN0NEMENFRDA3RjEzQ0UyNzBFMkUKKzoxMEQ0ODAwMDVEODA0RkU4RjlEMUI3QzVFNzJFQzA2RjkyNzA5RTdBRTQKKzoxMEQ0OTAwMDdFMjNFM0IzRjRBNUQ0RTdBMEVFQzVGODNDRUYyQjUxMEYKKzoxMEQ0QTAwMEU0QTdGRkM0RTlDOUMyN0VCQUNCN0FCRTMwQTA3RDE2MUMKKzoxMEQ0QjAwMDFGMjQzQzZCMDAyQjBGOUYyQjY2N0U0RTBGNUY4Q0M0OEUKKzoxMEQ0QzAwMDdEM0I2RUYwRkUwMUY1QTI5MjFEOEYxMTlGRUE0MkUxQjUKKzoxMEQ0RDAwMDAwRjRFODgyM0FGMjlEMkQ1NzU1MTRFMDc3MkM5M0UzM0YKKzoxMEQ0RTAwMDRGQjdDMkU1QTJBNDdCRDAwN0E5MUM5QkNFRTU1MURGQjQKKzoxMEQ0RjAwMDkyNjlFMjFBQkJCNzdFOTU0NDdFQUM4QkUwN0I3RjcwNkQKKzoxMEQ1MDAwMDk4QTI0RTA4N0E5MURGOTc0NDkzQ0FEM0E5MzBCRjAyRkMKKzoxMEQ1MTAwMEZBNUY2N0U5NjBEMjIzM0E0Nzk4OEQ1ODdFREI3NjYyREUKKzoxMEQ1MjAwMEU3ODg5MUQ0QkZERTVFRUMxQzVBNjJFNUUzNUU3NzAzQzgKKzoxMEQ1MzAwMDk2QUQ2NkNGOTY0NTY4Mjc4REI1OTA5REY0OTY4ODA3ODEKKzoxMEQ1NDAwMDlDMUVDREUzQTdERUMyNzM2Mjc4NkZGQTkxRjNGMTI4RDcKKzoxMEQ1NTAwMEJGRjRGNjY2RTdGRTc5NjVDRUJDQkU3NjI3QUM3MzMyQzMKKzoxMEQ1NjAwMEFFQjNGQTYzQzM3REY4RUM3MkVERDBFQTg2MkY5ODcxMDIKKzoxMEQ1NzAwMDEwQzhFRDg2RjNDQzU4NzgyOTc2Mjk1MzkxNUQxNDFDOTgKKzoxMEQ1ODAwMDc2QkQ4RTY1RjFBNzgxQjgzQzI3REE5RjUyN0YxMEY2RjEKKzoxMEQ1OTAwMEU5NDVFMjkwNEE3QUI4QkUzMEU5M0NDQjM0MTZBMTlGMDcKKzoxMEQ1QTAwMDY5MDA5RERGMjgyNTdGRTc3NkFCMjhFNUI5QzgwNDNFRjIKKzoxMEQ1QjAwMDA1QjZDMDYwRjM5OTUzMzQ3MTQ4ODk0NjI4RTdBOUMxN0MKKzoxMEQ1QzAwMDMxNThFRjYyMDEzQTI3RDFEQkIzN0YxNTdFMjhCMDZCNkIKKzoxMEQ1RDAwMDM3QTY5MzVGOEFDNzI3QzE4RTBDNDJGQzlERjI5M0Y3NTIKKzoxMEQ1RTAwMDE3REM0RDdDMjA4QUY0QTE1RUJCNzZCNzgxRTIwQzVBMzEKKzoxMEQ1RjAwMDhDRUU4MTEzRDFBRTZENDg3N0FEODVGQUJGMDIwOUJGQkQKKzoxMEQ2MDAwMDdBMTlDQTNBQzcxNzA0Mzc0OUJGRDUwRDY3MDk5RUJEQjUKKzoxMEQ2MTAwMEU3MDNDMkVGQkJDOTA0RjIwN0NBRUFGRjU2NDkwRTU1MzkKKzoxMEQ2MjAwMDMzQjY4MUY2OERCRDY2NUUxNTI2MTc1OUYzRTdCREYwNUEKKzoxMEQ2MzAwMDFGMEQ3Q0FGMTIwMTQ4NzZENjg0OTk2RUY4QUU1MkQ4OTEKKzoxMEQ2NDAwMDFGQ0NEQkNFRUJDMkVFNjI2Q0M0NEMzN0Y0NTM5OTIwOTYKKzoxMEQ2NTAwMERFNjc5Qjc5RkIwOEQ5RkUwQjVFNEY5N0ZEN0QzRTgzMEQKKzoxMEQ2NjAwMEVBNDM2NTVERjQ5NzI1RUJGQjc5M0Q1OThFNzc5MkY3OTgKKzoxMEQ2NzAwMDlGMkJFQjE2NUVCN0YzRjc1RjQ4RkZDMzRDRTQwQjkyQUEKKzoxMEQ2ODAwMERGQkY5NDJFRTQ0NDNFQ0IxNzcxMzlFREU5QzUxNzhDMEEKKzoxMEQ2OTAwMDRCRDFCNjBCRjlCMEYwMTlENTZCMUU4REZCMzMzNUZBQjMKKzoxMEQ2QTAwMDREQTRFRjY2ODU2MkU3QUFFRjMxOTFCRkZCNTQ1QzczMkUKKzoxMEQ2QjAwMERFRUEzMDdCNDVDNkIxNTQ5NERCRERBOEZGRDVCQzk4Q0IKKzoxMEQ2QzAwMEIxNEQxNUYxM0NBODdGN0NFMUU0N0FGOTE0RDU0NkU3MjkKKzoxMEQ2RDAwMDEzNjcxRUU0N0NCRjNGRkRBREFBRTE2NUNEN0VGNjY5MTAKKzoxMEQ2RTAwMDU3MTU2RThGRTNDMTFEOEM3N0ZBQTEyMTVCQzlCRTQ4MjcKKzoxMEQ2RjAwMDBCRDBGOUY5ODc4MkRGMEQwNkRFNUExMjE3OEExNzhCRDUKKzoxMEQ3MDAwMDRGNjU2RUI0NTdFM0ZGMDhGQzE5RjdGOEQzMDBGMUUzNTcKKzoxMEQ3MTAwMEFBM0Y3MkZGNkZDRDIzQUY5M0RDNUJBQzNBQzk5RjVCMkUKKzoxMEQ3MjAwMDk2RTNGOTE4RTFEMzY1MEY5MDVGQjFBQUUxMTU5QUQ3OTYKKzoxMEQ3MzAwMDk5MkM2MTU3M0E3QTcyQzJFMTc5QTIyRkZDNEY1RjA0QUIKKzoxMEQ3NDAwMEZFQTdCRjRGRjhFQkZEQ0UyQjZDN0I2OEJEMkIyRTMzQjUKKzoxMEQ3NTAwMEFFQURDQkNFQ0Y0NTVENjI5RjhFMTg5QzYzMDRCQzJDRDIKKzoxMEQ3NjAwMDIzMDEyRUE3OTcwNDQ2QzZBQTE4NzQxQzE4Q0NFMzk2NkEKKzoxMEQ3NzAwMERFMjg0NkJCRTg0Q0JEOURFMUJFQ0Y1QkZEQ0YzQzRGRjQKKzoxMEQ3ODAwMDA0QkZBRkRFMUVCODBEQzcyQzBFQzEyQjYxNjQxRkY4OUQKKzoxMEQ3OTAwMDBFQzVGMTJFMDA1RjZERkI3NzBDREYyMUM2QTBEOTg1ODkKKzoxMEQ3QTAwMEU3QTg4NzE5RjUzMzI2NzBDNDFDMUUxRjMzNzYyNEM3REIKKzoxMEQ3QjAwMENCODFBREZDREM0ODFGRjczNTc2QTQ5REVGOTMzODlGRjUKKzoxMEQ3QzAwMEE5OTlGMUM2MDQzQzlGOTFGNDMwMjk5QTM1QTNCRjFENTUKKzoxMEQ3RDAwMEYwREEyNUYwREE4NTc4MkRGMTM3NzQ0RTAzREY0NUEwQjUKKzoxMEQ3RTAwMEFGMTBGRTZBRTFFQUVFMEJEN0M5MjMyRjhDQjdEQUY2NDkKKzoxMEQ3RjAwMEVGMThBRTJEQTAwRkQzQjlFNkVFMjhGMkE3RThFMUJDRjIKKzoxMEQ4MDAwMDc0MjQzRkRGOTJGMDZFQjgwODlDMUJCRTIzMzgzNzhDMUYKKzoxMEQ4MTAwMDc0NkFGQzExMTJERUZEQzkyN0ZERkVDODc5NDdBMEQzNEEKKzoxMEQ4MjAwMEUyMkJBMUQzQUYzMzg0N0Q2MzBDNTI5Q0E5N0VERjFCMTYKKzoxMEQ4MzAwMEZCRUU3QkQzNDVFOEE5RTlGQkE0MjczRERDRjQ2NUI1MDUKKzoxMEQ4NDAwMDM4RUZENDNGREYzQTkyRkJDREJFMkIzOEZFRkZFNjRGRDgKKzoxMEQ4NTAwMDlGNUZGRkFBQTY3RDYxQzM3RTRERkIyMkVGREI5QUZBOTQKKzoxMEQ4NjAwMDg0NjBBMDFDRDE1Q0ZBQzdBRjNEREVGMzNBRDZBRkQ0REEKKzoxMEQ4NzAwMENGREU5RjdGN0RGQTBCNEIwRDc4RkU1NjEyRTBGRUZENEEKKzoxMEQ4ODAwMEM1OTk5RTJGOTBBRkJDNjVGMDM1RDkwMUFFRDc3NDM0RTEKKzoxMEQ4OTAwMEFCNzQxRUU2Q0JBNzczQzBENTYyOEU2NzI3RkNFN0EzRTcKKzoxMEQ4QTAwMEJCMDE2RkNFMzIwQkY5M0ZGREFGNjYxOTlEQjk3REYxMUIKKzoxMEQ4QjAwMEEwRjQ0Qjk1QjlDM0Y0QzQ1MjZCQUMxMUY1QTc1MjYwRjgKKzoxMEQ4QzAwMDc5OTFGMEU2NkI4MTM3MTQwRjA0RjQzRUM3Q0E0Q0YxMkUKKzoxMEQ4RDAwMDQwRTc3M0U2MjgxNEZGMzQ4N0YxNzg2QTI4RkQxRTY4NTQKKzoxMEQ4RTAwMDlGNkU2NDdFMEJENDJCNkQ0NkJGODVDRUZENzhCRUMzODQKKzoxMEQ4RjAwMDZDM0U0RDY2MzE4MkM2ODZGNjVERkMyMEIyODM2N0UxRTAKKzoxMEQ5MDAwMDQzOThBRkVBNTYyOTlFNkQ3NjA5M0YyRkJDRERENjZDNTEKKzoxMEQ5MTAwMDQyNzk3QURCQkU3QjRGREYwREVENkM5REI3OThDNzZCMEMKKzoxMEQ5MjAwMENCRkNCNTBGMEM5NzczMEVGOEY1NDg0RUU3REQ4QTM4M0YKKzoxMEQ5MzAwMDU3NTY0QzJFOEM3M0Q1N0ZGN0Q2NDg0RTY3RDNENUI1NDYKKzoxMEQ5NDAwMDJBQzZCRkY0QkNDRDQ4RUY5Njc0MDdFQkRCNjcyOUUwMkQKKzoxMEQ5NTAwMEY5MTlFMzcwOURDQ0U0Q0Y4ODQxRkQ3OTczMzlCRTVGM0UKKzoxMEQ5NjAwMDdERDA0OTcwQTkyQjU5OUI4N0ZCNTgzNzU5RjlEODkyMUMKKzoxMEQ5NzAwMDE3QjI2RkVBMUFDRTkxOUUzRTQ1N0RBRTA5REYzRjczMjYKKzoxMEQ5ODAwMDk4QkJDNkFGRTlGNEFBNjhBRjg0RkM5N0MxMDU0ODk3NzUKKzoxMEQ5OTAwMDE3QjM4M0U0QkMzQjFBRkQ4NDRGMUYzNUVFQTNGMkFERjEKKzoxMEQ5QTAwMDZCRkY1RThDN0E0NkIwMzExMEQxN0Y3OUE1RkUwMkU5MUIKKzoxMEQ5QjAwMDI3OTA3RTAzQzkwN0ZFNzU0RkY5MTBDNENCNzRDOTE3QjEKKzoxMEQ5QzAwMEFDQ0EzMEU0MEJDQ0M4NEJDOTJGQjMzM0ZBRjBEN0QxNzMKKzoxMEQ5RDAwMDE5MTc5NkFCREFGNkVGOThCRjVFMkE5RTU3Mjc3MkI5RjEKKzoxMEQ5RTAwMEE4Qzc2RjNENUU0QjdDODZDRjhBMTUxOEY3NzZEMEY3QjcKKzoxMEQ5RjAwMDUwQUVDRTY1REVEQzZBRTBCMzczOTY2RTMyOEQ1N0FFMDQKKzoxMERBMDAwMDFDQUY1N0Q4M0U0RDYyMTFGMjU0MkU5RjlGM0I3OUJDRkMKKzoxMERBMTAwMDY0Qjk0QUY2ODE4QzU3OTBGQkIwMzg0M0Y4MTk0M0ZCNDAKKzoxMERBMjAwMDU2OTU3MTYxQjlBODZERkZERUY1Rjg0RjE3NUM5OTVDRUEKKzoxMERBMzAwMDYzOUFGQzg2QjU3REYxRjVCRThCRTBFQjdEREYyN0JFRkEKKzoxMERBNDAwMDg2RTVDRjJDNTAwREExN0MxMThDMjc0NjNEQUVEQkM3NUYKKzoxMERBNTAwMEYzMjE5NzI1NkY4QUExRTBDQzkyOUUxOEQ0MUI5N0I3MkIKKzoxMERBNjAwMEFCODQ4N0NDRTgzNjBFMDU3QzVEMkFGMEI1OTNGOURGRjAKKzoxMERBNzAwMDQ1N0M1QzNBNjEyOUU1RDEyRDdCMkM3MjVDNzFBRDc4RDcKKzoxMERBODAwMDdGODVBREM1OENFQjVDQjE1REZCNUVBRDg4MkJBRTdFNUEKKzoxMERBOTAwMDRFRUIxN0FEOUQ3MEZEMzFFQ0I3NTYxN0NGRjM2Qzg2OEEKKzoxMERBQTAwMDg4MUYyRTYwMDUzQ0VFNDJBQjlGRUFDQkFFNDZBNkYxNDYKKzoxMERBQjAwMDU3NzY5RDZGMjQ3RkMwMEJCRjNERjk0QkVGODQzMEZCNDEKKzoxMERBQzAwMEJGMkZERUI2NUYwNDZGREJGRjZGRTJBRDZBREY0RTc5MUEKKzoxMERBRDAwMDU1OTc4QkI3M0YxQUU1M0U4MEYzOTZGQzc4MUVGMjI2RTkKKzoxMERBRTAwMDE4NzdERUNCMTY5RjE3Q0Y0NzhCOUREQ0JGQTlGODlBMUUKKzoxMERBRjAwMEYwQkNBREZCMkI0NkZFQTNDNUMyQ0ZEOTVGNUVCQThDOEUKKzoxMERCMDAwMDM3MTg3QkQwRDdDNEUzMEREQzJBRTY4OThFRDk1NzUxNkMKKzoxMERCMTAwMDhFQzcxNTg1NkZENDkzM0VEMkVGQjk5NUNDQUYxMkYxNzUKKzoxMERCMjAwMDQzOTdDQUQ3QTQ1RjZGQ0NGMTdBRDJCMzVDMDEwN0U5RkYKKzoxMERCMzAwMDQzRTNCRTZDN0UxREU1RTNCN0U1RUY5NkYyNzBGQzIwOTMKKzoxMERCNDAwMEVFQkYyODBBNTY5MDlFRDc2NUYyMTdCRjg3N0FDMjRCNjAKKzoxMERCNTAwMDUxMTFGNTA0NzMyNkQ3OEI2NjdBMTc5OTc4QkU2MTlGQTkKKzoxMERCNjAwMEYzNDA3MzI2OUUwNzBBRkU2RkIwQkE0RDA4QTcyOTZBRDQKKzoxMERCNzAwMEU3QUY2RTQ1RkMwOUE4RTRERjVCRjNEMzc3RkVGMEE4QkUKKzoxMERCODAwMEYzRTI3NjdGOURFMzJDRTkwREZERTlGRjc1MDY5RTdGQUMKKzoxMERCOTAwMDUxNTBFRUE0MzgzRkI0QTdEMEJGMjdGRDdERkFGNzhCRDQKKzoxMERCQTAwMDQ2OTUyNTY2OTJGRjY5NDJDMDhERjNEOUMyRTdEM0RGNUYKKzoxMERCQjAwMEZFRDQzNTdDQUVGMTJGRjYzNzdFNUQ3QkIxNjM3MTE4RjQKKzoxMERCQzAwMDFEREM5NkE5NDhCQkMzNzFENDFBREFERjRCQzU4Mzg5MjMKKzoxMERCRDAwMDNENzMzNEZBQ0ZGRkVCNzZDNTc0MTU1NDRCOTA5RkI5NjMKKzoxMERCRTAwMDhBOEZFQkFGOENFQkIxRjM1ODgwQ0EwNUFDODc0QTBGMzQKKzoxMERCRjAwMEUzRjFGNzhCOTk4QkNBM0I0NTFFRjNERTJDQ0ZDRDk5MTEKKzoxMERDMDAwMDc4MUU2MUVBMTk0Q0YxOTMyRjdFOUQ4Mzc4NzNGQURBQkUKKzoxMERDMTAwMEYxOUIzMEQ2RUVCQkQyRTNCQUYzOUQzNDdFRjdFRUFGODQKKzoxMERDMjAwMDkzMzAwRUU2NjI3QzYxNERBMkRCOTMxOUUxRkNGOTFGOTMKKzoxMERDMzAwMEE1MkE5REI3QjBDMzhGOTI5Q0E4MTRCNzMwQjBDOUZDNzkKKzoxMERDNDAwMDFDRUQwQjY3MzJFMTQzODgyRjBFRDkyQUY5MjI5RUNGQjMKKzoxMERDNTAwMEU2N0U2Q0UwRjEyNENCMTU1RjNBQkNEQTFBMzQxMDY5MjkKKzoxMERDNjAwMEU1MkU0OUY2QTk1ODZGRTFFREI5MzVCMTNFMDVFQUI5OUYKKzoxMERDNzAwMDYzQTM3OEZCNURCMTNFRjRBM0NGNjc0MUEyQzc4NTQwQTMKKzoxMERDODAwMEEyNTgyRTYyOUNFRkREQzFEQzNDREY4MUY1QTRBMDFFMTIKKzoxMERDOTAwMEI2QTRDRENBRTNGRDU5MzAwREY5N0I1RTNGRjY0RjVCNkMKKzoxMERDQTAwMDI2RTdEM0EzNTMzODNGMUY1REE2RjU1M0RDMkJGOEMwRkUKKzoxMERDQjAwMDI3NTk2NUZGNDQ3QTNBOTZFOTZFQzI3Mjc0NUM2MEUzNTQKKzoxMERDQzAwMDJGOEJDODZGQ0ZEMDdFMzgzNkY2Qzc3NERFMjhCRjFCQzcKKzoxMERDRDAwMDMwQUE2QzAzQzI2RkE3QzJFM0QzQkRFRDE2OEE4RjgwNTIKKzoxMERDRTAwMDJGMDY1Nzg0QzVGNUVGQ0QyQUZGMTlGNkY3MkJFMUY3N0MKKzoxMERDRjAwMEVCMEZBRUYwOUQyNjZGMzY0NDRGNUU5QURGNjhCNEI5RTUKKzoxMEREMDAwMEM4RkYwRTBGNEE2ODVDQUEzRkY1RjRCNDU5RUI3MkM4MUQKKzoxMEREMTAwMEM3RUY0NUJENzdDMDI4Q0ZGRkMyNzk4RDM2MzM2NkMzQzQKKzoxMEREMjAwMEY5M0Y2RUYxNkQyM0ZEQjQzRTA5RkQ5NTRCOUZCMDE4OTAKKzoxMEREMzAwMDUwNkY3ODFGQzQyREU2QTE3Q0Q4NjhBNUYyOUY2MDA3QkMKKzoxMERENDAwMDYzRjkyRkIwODNCMUZDMThFQzYwMkMzRjAxM0IxOENCN0EKKzoxMERENTAwMDI1NUZFNjgzQjA2MEFDMkNDQkREOUE1OTFDM0E5RkQzOEIKKzoxMERENjAwMENGRjc3OTAxQ0ZERUYxREJDRDM0RkUyNzU5MUU4MjZGNkMKKzoxMERENzAwMEVGN0VCRkM0N0M3OEE4QjMzM0I2RTdBQUI4MEJFMDVCRUMKKzoxMEREODAwMEZGN0M4NkMzNDU5RTE3RUFEQjdGMkJGNjNEQUZDNTQ4NzcKKzoxMEREOTAwMEYyM0RBRjM1MTg1MzE1RjZERURFNEMzM0I1RTdFRUZFMzcKKzoxMEREQTAwMDk0RjI1MEJCMUNCREYwNzUyQkIwRTRFOTA2NUVERkZCQkUKKzoxMEREQjAwMEY0NjI4MkVGMjc1OUVFN0YyMjVDODFCRUZGODY2NTVFQUEKKzoxMEREQzAwMEVCM0JCRkMwRkMxRkU4OUZFMjBFQkE5NTlFNUY5MzFEMjAKKzoxMERERDAwMEEwNUI4NzFFMEU3MjVEM0I2MzAzMUJGMUZCOURCQjUzNzMKKzoxMERERTAwMDcwMjVDMDZGMThBNzFCQzQyMzI1RDI3QUQ3RDI3QzZGQTkKKzoxMERERjAwMEIxRjQxNDYxNUVDQjJEREZBODExRTM4QzNGQzkyQTI1NTUKKzoxMERFMDAwMDM4RkYxOEYxMkQyMTBDNEU2MkJGQUU5NEFFN0JDRkJGMTAKKzoxMERFMTAwMDA1OUUzMjc5N0YwN0YyNEUyN0NBQTFGMzMxQThFRjU1NEMKKzoxMERFMjAwMDhBRjNGREQ2OTZCNEI3NzA3RERFN0QyQTRCNzcxMkZFNUQKKzoxMERFMzAwMDZBRThDRTkxQzVGMTQ0OTZCOUVERTYwQURDQTc5REVERkUKKzoxMERFNDAwMDQ3RDNFRUI0RDFCRUE0MkRDMTcxQjNEMjM1RkVDN0RDMjkKKzoxMERFNTAwMEIxNUZGREQ3MkZFM0U5N0QwNzBFNzUxQkRCM0EwNUUzQzQKKzoxMERFNjAwMDRGRTY1QTVGRkQwQjJFNjlCRUUzRTMyOTE4N0ZCMjMwRkYKKzoxMERFNzAwMDUxRDk4QkU1MjI2N0YyNzUxODc3MjJFM0UzRUZDODJDQkUKKzoxMERFODAwMEREOEJBNDM0Q0Q1NTQ5N0E1QTI5MzI5NzMwNzk1MDZFQkEKKzoxMERFOTAwMDhEQzY0M0MxREVGQTE0QzcyMDRERkRGQUM0NjE5QUY3NUUKKzoxMERFQTAwMEE3M0E1MzM1RUQzNzY1NjY2QkRBRTVCOEQzNUM4NTlBRUEKKzoxMERFQjAwMEY3NDZDN0Y1QTRBMDdEMDZFQjIwN0E2MDNCNTQ4QUQzRDEKKzoxMERFQzAwMENCREQ3REYwQzY2Q0E4NEY3RjZBQjYwQkQ1OTI5REEyQzQKKzoxMERFRDAwMDdERkFBRTcyMUZFRTQ3MzdDMEQzMEMwQUQ0RjE5MjA3MTkKKzoxMERFRTAwMDdFRkQ0QkVDNENBN0ZGNTdCNzNGQjlEN0VEQkMwQ0ZERkYKKzoxMERFRjAwMEJGMUZCRDVGRjJEOTk1NkRENjYyRTRCMzk3NkEwN0U4OUMKKzoxMERGMDAwMEY3MjcyRjRCNkIxN0Y0ODczN0JENzRBMTM4MzlERUVDMzgKKzoxMERGMTAwMDU3RDk4RTA4Nzg4MzExQTkxQzBGNzkzOUZEMDBDRjFGQkUKKzoxMERGMjAwMEJCNUM3RUY2MTlGMkIzNDEyMUZBRTgyRDc1N0VCOUQxQkEKKzoxMERGMzAwMDY2RDc1QkFCRDE0RkZGQTZDQTI4MUY0RkU0RjU1NUUxNkEKKzoxMERGNDAwMERGNkEwOERGRDk5RDVCRUYxQjFBNEZDRkJEQThFNzYyRTAKKzoxMERGNTAwMDdFQTkxQkZBQUZDQTEyRkVFRkVBNTdFRjFCNUExNDZBRUEKKzoxMERGNjAwMDY3NkIzRUQ2QkNDRkVFNTFENjZCRUFFQjkyQjVGNTA3QTgKKzoxMERGNzAwMDRCRDc4NzdGREYxRjVGQUNEQUIyQzhFQ0ExRkM0RkM1N0YKKzoxMERGODAwMEVEOEJDMDFGRTQ3Q0E2QkMxNjQ1NzE3RDM3NjNCQzBBQ0YKKzoxMERGOTAwMDNDQUEyRDdBREI4OEU3QjQzN0Y3MjM0NzI1RkZCOTREMzQKKzoxMERGQTAwMDY1RjU5MURBRUYxMkZENEU3QjJEOEFFMjYwMkVCN0RGMjgKKzoxMERGQjAwMEY3MDE5NjE0NjdGODQ3MkU0N0RGMUYxODMwODZFRkZCRUUKKzoxMERGQzAwMDNENTk1QzBGM0Q1REJDRjlBNzVGRTBGOUU4NEI4Q0UyODEKKzoxMERGRDAwMDNFNEZDNzcyRkU5RkQ3NzJDQzYwODA3MkY0MDA4RTJGQzYKKzoxMERGRTAwMDc5OEVBMDAxRTU0QUY3QjI2ODJGQzZGNUQ3MkRCNzUzNTEKKzoxMERGRjAwMDNDRThFODk0OUU3N0FEQjBGNUVCOUVEOUZCQjAxNUY2MDIKKzoxMEUwMDAwMEVEMDM0QzgyMEM5M0FCREQ2ODE0NDFGREExQUNCREIzQjQKKzoxMEUwMTAwMEQ2QzFERjM3QkQxNkU1Mzc1Q0MxN0ExRUMyNzMwOTk0REQKKzoxMEUwMjAwMDgzNjU5Q0NFMTcyMERFMDhGOTgyM0VGNkJBRkI1OEFGMTYKKzoxMEUwMzAwMEJDNDFCRTgwRUJDN0ZBOUU2N0Y2MUY3QzE4RjVGMEZENjkKKzoxMEUwNDAwMDlDQ0UzMUMyNEU2RkRGQ0YwREIzRUZEOTYzOUMyRUFEQTYKKzoxMEUwNTAwMEYwQ0JFMzk0NzRGNEJENjc5M0Q5NzY0MTNBNkZBNkI4RDgKKzoxMEUwNjAwMDlCNEJBNUVGQTc5MTlFQjMyRjQ4Q0YwNzZFODJGREE5Q0EKKzoxMEUwNzAwMDdCODlERjZCNzFBNjJEOURGMjYyRkI5M0U3NzU1QjU0ODQKKzoxMEUwODAwMEEyNDM1OUVGNkE1MzZGNDBCQ0Q1RTdBMTRCQjgzMkI3RjIKKzoxMEUwOTAwMDhCRTg1M0RFMUJCNTZBRTI3RjY2QTBEQzVDRDU2RUU0REMKKzoxMEUwQTAwMDQxMjJGRDhEQjM0MTY1Q0VCMDcxNzZCRTYyNTk0Njc5OEQKKzoxMEUwQjAwMDZFNjJGRURENTI1RUI3RkYzQkFFMzQ4Nzk3NkIyM0M4QkUKKzoxMEUwQzAwMDNEOTBEM0E2Nzg5NEQzOTUwQUQ5OTU4N0RBODc5NDIxODEKKzoxMEUwRDAwMDlDMEUyOUNDRUZBNEJDMkQxRUE3M0M5Mzc3ODdDRjZENTcKKzoxMEUwRTAwMDc0NUY0OTYyMjZDNTI3NEJGQjUyREE5NUIzREI2N0E3RkQKKzoxMEUwRjAwMEEzNUVGOTZFQ0JFMjQzQjA3M0VDQzNBQzU0MUFFRjU2OTcKKzoxMEUxMDAwMEU2MjUzREY4NTA2Q0M1MDhGNDRCNEMxN0YxMDE4NzYyQzkKKzoxMEUxMTAwMDdCM0E5MTJGMUY5QTE4QURFMDc5M0ZGNEJGMEVGQjk3MjEKKzoxMEUxMjAwMEVCM0E2NEFBMThDMUVGOUY5MDcxQzlBM0FFRTg5RUI4RkMKKzoxMEUxMzAwMDI5RUEzREE1MzdFMUY5RjYzQ0U2NDBCQkYyMTY5NUVCM0UKKzoxMEUxNDAwMEI5RUNDRjlDM0UyNURGQUI1MzAyNzEzOENGQkQ1OTMzQkMKKzoxMEUxNTAwMDRFNjdDMTc3NDMxQTdFMjZGQ0FBMDI2RTQ2MUU4Nzc4NTgKKzoxMEUxNjAwMEE5N0E2RUFGM0RGQkI0QzJFRjQ1NzE3MUZEQkY3NkMyQjcKKzoxMEUxNzAwMEE5NUZERDhBNzk3MjYwNzcyQjMwOUZDNUFEQUZEMkJEQzQKKzoxMEUxODAwMDNGN0EzQkJCRDdERUY5M0ZGNEE3RjZCNTk3MkEyQ0EzMUQKKzoxMEUxOTAwMEMyRkNFNDdBQkJBOTU3NEY5N0ZBREUwRTFFMjdGRkZBOUUKKzoxMEUxQTAwMEM0REY3NEFEODRGQTlBMUREMTA0QzcxMzRGNThCQ0M4OUMKKzoxMEUxQjAwMEM3NEY2Q0IzOTBGRDczMjJBRUE3NjMzNUQ2NzdFNUJBMkYKKzoxMEUxQzAwMEJDMzQ5QTRCNzMyRkRBNTI4M0YzM0Q5NDNGRUM2RjI2QTUKKzoxMEUxRDAwMEJBRDdFM0Q4RTMxNjNGQzY3QjJDN0YzMjZCMUJEQTUzRUEKKzoxMEUxRTAwMEM3NDYzODlGN0QwRUZEODFDRjI2RDAzRDAzQ0NDM0JGRUYKKzoxMEUxRjAwMEJGNTlEMDIzRDI5NzEzNTQwRkY1Qjc3NkQyMjM5NkJGQzkKKzoxMEUyMDAwMDMwOTRGODk4RENCRkUzOEY0NzUxMUVGRDg5N0QzMzA3QkEKKzoxMEUyMTAwMEEyQkZBQ0QzRjAzQ0U1RjEzMEQ1RTY0NTdFQkM3MjVCRTUKKzoxMEUyMjAwMDE0RTk4MTBEMEU0RkQ2Mjg1ODVGRjk2RjZGQkVCNTEwRjcKKzoxMEUyMzAwMEM3N0YyNzgxRTE3QUJBREI1RTIwN0Y2NTY4N0YyM0NCQzkKKzoxMEUyNDAwMEY3MzM2REE5OUMwRkY0Q0E1QjFFNzdCQjEwRTM2RTUzQzYKKzoxMEUyNTAwMDI5RUU3NjM0QzJCNzg2Qzk3QjE3NzlEQzZEODFBQUI4RkUKKzoxMEUyNjAwMDI5RUZFMEExQzg3OUU0RUU1MTVDN0ZBQzk2RkU5MzQxQzIKKzoxMEUyNzAwMENDOUE4ODc0RTg2MUI0REVFRTg3MzJCNkExQkQzMzY3MEMKKzoxMEUyODAwMDU0NUNFRkZENEMzQzVGNTJFMjVCNDdFRENCRTQzRkIxQTkKKzoxMEUyOTAwMEYwNzhCRkE4QzhFN0Q4RDM0NkYxQkNFMjJBRUIzOThEQTUKKzoxMEUyQTAwMEZGQTZCNkUxMkI4RDVGQTUzNjg3OTFEQzJENjg3MjE2MkYKKzoxMEUyQjAwMERFMDVFNTZBMDFFN0U1MjkxNUI3RTBGQTU2MzQ2RjdFMTkKKzoxMEUyQzAwMEYxMEQ4MkNCNjMzRkZBMDBDN0RENjcyM0JGMEQ3QjgzNkYKKzoxMEUyRDAwMEMzNEY2RkNGNTQ1OTNGMTdGNEI0NTU3M0NGQ0NEMTQ3QzgKKzoxMEUyRTAwMERFQTM3ODkzQTNCQkIzRjM3MERGMTZBQjgxQTM3ODFGRDMKKzoxMEUyRjAwMDU3OTczREYwRDFERDUwRUVEQTc3ODBGNjQ1M0ZERjNFQUYKKzoxMEUzMDAwMEU3RjYwQUU3MkJENUI4OEU0MTE4RUY1MkIxNjQxNEQxNjUKKzoxMEUzMTAwMDJEQTdGNzIzMUI3MzA5N0VEMjlGREI3RDIyQjJCRDI1N0IKKzoxMEUzMjAwMEU3MjlGQjk3RjM5M0ZEQ0JGNzU2OEJGRDNBNkQwRUU0OEYKKzoxMEUzMzAwMEExN0M0RUNDNzQ2QUQ2NzUzQTI2OTAxNzZCQzNFN0RDODUKKzoxMEUzNDAwMDlGNzczQTBFRUE2MTc4RjM1RDlERUZEQzJFRkMzQzg3MDcKKzoxMEUzNTAwMDBENkI3RjY4MDZGQ0VCNkNGRUE1QzkxM0NFNDcyRkYzNEYKKzoxMEUzNjAwMDVDNDdDRTU3QzY5NUNBM0NEQTg3NDc4OUYzODgxMTZDNUIKKzoxMEUzNzAwMDQ0M0ZGOUI3NUI5MENFQUFGQkU2REZEMkYzRkVGMjZGMjMKKzoxMEUzODAwMDdCRjM2REZGQ0RGMzZENjU3RTZENTFCOUExM0UzQ0NGNDIKKzoxMEUzOTAwMDU2RjJDM0EyNkM3ODlFODNFN0ZFNUFGOTVFMzQ1QUZCQUMKKzoxMEUzQTAwMDdFN0ZGQ0IxMjA5QkRCRDc0NTgzMjJFN0JCRUUxRkM1RjgKKzoxMEUzQjAwMERCOUI5ODlGREYzRjI4RTRFMjc4MDE3Nzc5RUY5N0Q0RTEKKzoxMEUzQzAwMDUzNkEwNURGOTY3OTlFRTNEQjc4RENFNjc4OTFCNzAzNDQKKzoxMEUzRDAwMDVDODBGMjVDRkJEQ0VGOTY5ODRENzI1NURFQ0ZBNzQwNzcKKzoxMEUzRTAwMDVGRjNFMjIyRTUwQjA3NjgxRUQ3QjIxRTJBRERDQzYxN0YKKzoxMEUzRjAwMEM0MTJDMDRGRTU2NDU2NDFFNTc1QUM5RUNBMUJEODI2RDEKKzoxMEU0MDAwMDJBNkY2NENENTQ0RTYzMDEyQUQ5MjhCRjg4RjdCQzg3OTAKKzoxMEU0MTAwMEU3OTk0RTVENkE0MEY5NUE3NDZCNjRCREY4RDQ0NUUxRTIKKzoxMEU0MjAwMEUwQTVGQjAzMkYxNzBFRDczMTdFQ0Y1RjFGNzgwQ0NGRUYKKzoxMEU0MzAwMDI0RkNENkMzNDM5RkFGMzk5MTA1RTlFMjkyNDk4OEI4REQKKzoxMEU0NDAwMEE5NjgwNzNCMjlCRUI1OUNCOUE5M0VFNTEyRTE1MDEyNjcKKzoxMEU0NTAwMEY0MTg3OTdFQUYwRTFFRTU5MUYxRTI5Q0EwRkY5RkEyMTkKKzoxMEU0NjAwMEVDMkMwRUVENTM1NkI2OTNERkRGMjBGNjBCMENCMTQ0QzcKKzoxMEU0NzAwMEU0RkZGQTdEOTRDRjhCQTJDQkNFM0E4MTQ1Mzg5RTZERDYKKzoxMEU0ODAwMDlDNEQ3OURDODU2NUFCNTNBMTlFOTJCRDY5MzZFNTc5REIKKzoxMEU0OTAwMDhGMkY3QjAxRjNCQ0QzOUVERENDRUJBM0NCMEE0RDJFOUIKKzoxMEU0QTAwMEQwMjJEN0ZFNjIzNkU2MzM3QTQ0RENCNDQ3QzQ0QjMzMUQKKzoxMEU0QjAwMDRGQkVFNjlFMkNDRkRBMUZEMkJENjM5RTExMzYxN0FFM0IKKzoxMEU0QzAwMDUzRTY4NUFCQTlGQzdDMzVFOTA2RkY2QjI2NzhBRkREMEEKKzoxMEU0RDAwMEUxODlDRTQ2Qjk2NUY1QzczODUxNEY1ODNCODVFRThGNzcKKzoxMEU0RTAwMEJBREZDQ0RGOTdGN0Q5QzhGNUM5N0I2RTc2RURDQTVFODcKKzoxMEU0RjAwMEFEQTQ1QzdDMUVEMEZGNTBFQ0RGQjMzNjlERjJFMzNDNTQKKzoxMEU1MDAwMEJCMTU5MTBGNTczNjY0MEVGMDhEQ0U4MDg5NjE3RTgxRTgKKzoxMEU1MTAwMDFDQ0Y5NEUyNDlDMkY3MTkyNkM1MDM1RDBDMTM3MkI4RUIKKzoxMEU1MjAwMDczNTc3NjM2RUU1MzU2QjYzOERGOEY0RjJFNDQzOERFQUIKKzoxMEU1MzAwMDlBNTI5MTg1RUZDQkJDRTgyQ0RDOTc4NEZFQ0JDQTZDNTkKKzoxMEU1NDAwMDc3MDZCRUFGN0YyRUYzQjJDNzY1N0I3MkIxQkQyRUZBRTAKKzoxMEU1NTAwMDNDRTU5Qjc1RTVCRkIzM0U5OERDMzc0RkJEQzlDRDdDMkMKKzoxMEU1NjAwMDY2RTIyQkRBRkNGNEVFMjU2NkJBQ0ZBOUE4QzJEMzg0MDIKKzoxMEU1NzAwMDIxQ0FEN0NDRUIxOTgzRkEzMUY0NUI5MjlEODBGNzA5NUQKKzoxMEU1ODAwMDA2OTNGMkUxQkI4NzY3RjJGQzc3N0RCRTc3RkIyQkZCM0UKKzoxMEU1OTAwMDM1RjlFRDkyQ0U3QUYzREJDRkYwRkNGNjEwN0QzREIyOEIKKzoxMEU1QTAwMDlBODVFNUI3NEJCQTkxNzQzNzBFRjNEQjYzQjA5RUI1MkQKKzoxMEU1QjAwMDA0REY5QkY4NEUwN0U1Qjc0RkVBMDg4QUZDRjZGN0I0OEMKKzoxMEU1QzAwMEY5RURFRUZGNUM1MTdFRkIzMTcxRUZEQjMxMkJCRjJGOUMKKzoxMEU1RDAwMDQ5REUyN0I1NkEzNzNGRkY1REE1RjBGQkE0NTZGRDlFRDcKKzoxMEU1RTAwMERGMjcyNUVEQzI2NTYyN0QzNUZCNzdBQ0M3NzNCRTY1NUQKKzoxMEU1RjAwMDhGREQ0MUY3NTEzMTcxMEZBQTEzN0VDM0VENDI3OTJGQTAKKzoxMEU2MDAwMEE5M0UwRkE2MEVFRDQxRDI5QkZEQTQ3N0U5RjM2MUVBODYKKzoxMEU2MTAwMDFFMkIyNzdCQjA0RUE3NDdBRkM4MTZGNkEwOTA2NzRDQkQKKzoxMEU2MjAwMEU4N0Y0QkM1QjdCODBFMUJEOTY3NjZEMjNCNTczREJFRDYKKzoxMEU2MzAwMERBRTVDMEJBQTAyQkY2RDg3Mzc0RUUyNkRGNjc4RjBEMkIKKzoxMEU2NDAwMDIyNUM5MDc0QjY3QzgzNDJGQUFCODRERkU4QTcyQzZFMjAKKzoxMEU2NTAwMEJBQzdGOEE5MjFBNEI3ODJCRTJERjI5ODdERENDRjBGRUUKKzoxMEU2NjAwMEI4ODJGMUYwM0I2MzdCNTI1MDRGREVEOTlFRTkwMjBFMzcKKzoxMEU2NzAwMENCRkVENEVGRkREM0NGRTlFRTlGN0U1MjczRkZGNDE5QUEKKzoxMEU2ODAwMEZDMUZFQTY5QzcwRDNFRUM2NzBDQ0JGQ0Y5MDRBODE3MjgKKzoxMEU2OTAwMDFGMzdCQTdDQ0VEMDdEQ0MxN0JCNzc1OEMyREYyMkY2QUQKKzoxMEU2QTAwMEVCNzJFRjIxRDZERkY3MkNGMzFGRjRGNzExREYyRkVFMUIKKzoxMEU2QjAwMDIzOUVEOENGN0RDNDE2QjU0RDI1RkRFMTlDNTE3MzJGMDcKKzoxMEU2QzAwMEYxMzU2MjlEMjU0RUU2QzM3QjdFQzc3NTFBMzVGQjVGMkIKKzoxMEU2RDAwMDEyRENDNDUwMUY4QTNBNjhENEY4MTEyQzRFNkRGRDM5RjMKKzoxMEU2RTAwMDg5MEZFMjdFOTFCRUYwQjZGNUMyRDM0MkYwNENGQjBEMkQKKzoxMEU2RjAwMEMxNTM3N0NGQjM4NDUzRUYzRENGQzM2RDg0RjdFM0Y2QjcKKzoxMEU3MDAwMEJGQTAyMjNGQjhEQ0ZCQkVCRkVGRkJCRDJGNzY5RkI3OUIKKzoxMEU3MTAwMEZFOUU2RUZEQkREQ0ZERERGMzJERjczRERGQkY0QUYzNTAKKzoxMEU3MjAwMEJFN0VERjBCRjdGRDQ0N0IwRkI1RDg2RjJGRkM3RTlCQzEKKzoxMEU3MzAwMEZCN0QzMjVCRjg3N0M1N0VGN0UwMDU2OEMwQ0ZGRTExNDAKKzoxMEU3NDAwMDczRkM0MTI0Q0JFOUQxRTIzRTM4NjlENzRGMzA5MTlEMkIKKzoxMEU3NTAwMEY1OTY3MzUwQjkxREU5NUZDOEE5MEEyMUE3NTg0NTMzM0EKKzoxMEU3NjAwMEFGMEI3QzcxMDU3ODFDNDFDMTYxN0U3RjQ1NTE5MEM3MUMKKzoxMEU3NzAwMDEzOEMzOTFFMzkzRkU4OTYxMjQ1NzNCRURCRjdERTYyMTMKKzoxMEU3ODAwMDlFNjczQ0ZFM0M4RkQzRDM5RkZCQ0JCQ0ExNEE3Nzk0QzIKKzoxMEU3OTAwMEY2RkU4NjdFRjI4OEE0MUYwN0Y0Nzg2NjQ2M0RERUMwNEEKKzoxMEU3QTAwMEVGQjM4QjcwQ0ZGMTE2MzUzNTNDOEZDODQzRkU5RDU5QzIKKzoxMEU3QjAwMEQ2NDAxMkUyNzM1NEIyMjczRTI3MjE5NDZGMzQwOUYzRjYKKzoxMEU3QzAwMDhBMTRCMjA3ODU1MDFBRjgwMzhDRjNFQ0M2MjREQkFCMkQKKzoxMEU3RDAwMDMwN0ZENEY2MDNDQzkzODFFOTNCODI2M0I4Qjk4QjNGOTkKKzoxMEU3RTAwMEM5Mzk5RTExMzlDMDA3OEYyODhFRjU4NUYwRUQzRkM2RDcKKzoxMEU3RjAwMDlENEE0MkY5NjRDMTczRUQwMjNBRjdCRDNBMjdGQ0RDNDkKKzoxMEU4MDAwMDU3RENDRjFGMzQzODQ5QkZGMEZFNDQyMUZCRTExNDc2QkEKKzoxMEU4MTAwMDM2MzY4QzVFMzc5ODQ0NUVBM0VFREYyRjEwRjY5NEZDRkMKKzoxMEU4MjAwMEY3MEI4RTQwMTdDQjgwNkZDRjZGRTU3OUQ0MkIxMzNCNUUKKzoxMEU4MzAwMDg1MURDNkVGNzFCRDYzQjg4REVFN0Y2MkVFNDIxN0I3REUKKzoxMEU4NDAwMEMzQTU3RDM1NENCRDFDQjk3OUIxRjhBMjk1ODkyNzM0OTMKKzoxMEU4NTAwMDc2MkU3QjZFRDAyNTlEMjc4NkQ2Q0RGQjNGRjI0MDM0QTkKKzoxMEU4NjAwMEM5OUIyMzBGOEMyMDNGNUZBOEZGMkVCMkZCRTdENzZCMUQKKzoxMEU4NzAwMEUzOEMxNzM2QkNBRkMxQkY0NURFOEYzNUVEQzFGODFFNDYKKzoxMEU4ODAwMEQzMzA1ODdGRjBDNUExRDdDRDA1Rjg5RERFNkQxOTgzMzMKKzoxMEU4OTAwMDc0MDZGQjM2MkIyN0NDMEUwRTNFOTQzMTk5RUIwMTE3RjQKKzoxMEU4QTAwMDVCRTcyOTlBNDc4Nzg4MTM5NUVCRkNBOEYxMzBENTgzNUQKKzoxMEU4QjAwMDhENDE1RDNDOEY1NzYzOTdDQUQyRkMxQUEzN0I3MjdBNTUKKzoxMEU4QzAwMDk0MDFBRTQ4N0U5NjkzMzk1QzZGRUYxMDc5OTAxRDIyQ0IKKzoxMEU4RDAwMDBGQjI0M0U0MkQ3Njg4M0NDNTBFOTFBNzI4RjM0NzNCNDEKKzoxMEU4RTAwMDE0RTZDNjc4OEE3OThBRkI4OTQ1Qzk5NDNGN0ExN0FFQkYKKzoxMEU4RjAwMEIzNkU0NTRGMUVFNkRCRDU4RDBFMkU1MDU0Q0ExRjVERkMKKzoxMEU5MDAwMDgzQ0YyM0U0OEZFNjYxREVGQjFGNzI2RUZEMDFFQUY5MUYKKzoxMEU5MTAwMEM3MDc3OEU5NUU5MkE3OUU5QkMxRUI2NjRFMUYyRkU2NjQKKzoxMEU5MjAwMDRDRkMwMUNGMjdGNUZDMEZFQ0U3NTM0NUY1RDNGRDE3NjEKKzoxMEU5MzAwMDJGMjk3NDlFQ0FEQzQxRjM4QzBCRTQ5N0RFOTdDM0NGN0EKKzoxMEU5NDAwMDE3RDZFQjRBRjI0NTI3NjBGRjRDRTQ3QjNEMzg5MkYyNDQKKzoxMEU5NTAwMDdFQjY1ODI4RUYwN0M2QTFGQzJCNzlGRUFGQ0ZDRjJBOTEKKzoxMEU5NjAwMEY4QjNDNThGN0M0M0ZBNjExRUM5NDk5NkY3MDI5MzdGQkQKKzoxMEU5NzAwMDI1RkVFNzE2OUVCNzE1MEMyNDYxOUUxN0M2RkJFMEJENjkKKzoxMEU5ODAwMDE5RUMyMDczRjMzQzMwN0U3RjlGREM4NzQ3NzI0NERDQjgKKzoxMEU5OTAwMDE5NUVBNDVGMTRDQTEzQUJEOTdGRTQyM0U0MjM2NTM5NUQKKzoxMEU5QTAwMDlFQzc3MUZEMzI3RkE5MjZFNjU1OEE5QkQ4OTlFM0E0QkMKKzoxMEU5QjAwMEVGNjBCRUI0NUVFMDA3RUIxNDgyNzMxRjNGREMwRUZDMTkKKzoxMEU5QzAwMDVFOUZGRkRFREZGQTRGMkYwOUZDM0EyNzM5OTQzRjE1OEYKKzoxMEU5RDAwMDk2MzdCNTMzMjdDQzVGMjZFNzExRUFFN0MyNzgyREZEREQKKzoxMEU5RTAwMDQ5MjE3RkQ3RkQyMzkxNEUwQUQwMEYxRUMxQ0VERTJCQzkKKzoxMEU5RjAwMEUwRDI2MThBRUNCRkZCMzg0Nzg5OTgzRjU3OTBDMTE4MzUKKzoxMEVBMDAwMEZBMEJFNTdEOTNFRjIwOUNEMEVGNzQ5QjhCRkI0MTE5QjMKKzoxMEVBMTAwMEJGQjdBRTY2ODZDRDg1N0M0QkY2OEZGN0U1M0U3RjgxMkUKKzoxMEVBMjAwMDcxOTZBNzU0QkM4OUVCNUY1MUNGRkQ3REIyQkQ1QkUxMTAKKzoxMEVBMzAwMEZCRUE3RDg4RTM0QkNEMkJFRjdGNzQzNzhDQjJGQ0I3QkMKKzoxMEVBNDAwMEI5ODVDOEE3RTVGNzdBMzg3N0Q5NzlGRURFNjJENTRGNjAKKzoxMEVBNTAwMDcwMDRGODdFODBGQkE0RjdGMzVEMjk1QzJGMzc3RjFBRTIKKzoxMEVBNjAwMEUwNDVGNzMwRjZGNTgzMDMyMjg1RTk2RjE2RjlGRDcwNkUKKzoxMEVBNzAwMEVERkQ2NjE2RkM3NzE4NjBCQzE2NjFGN0I0MDhCQkE3RkQKKzoxMEVBODAwMEQ1MjRGRTlEMUM5RDFEREMxMkUwNzE0NDJEODk2NjhBRjMKKzoxMEVBOTAwMDEzNjJFMkRGNzU5MDcyN0ZDRERCM0NBRTY4NEQzMkEzMkUKKzoxMEVBQTAwMDc2OUMxRkVFQUYxMkRDNEI3MkE4Rjc5RTJBMDVFNDJCNzIKKzoxMEVBQjAwMEMwRUY5NEMzQTNFNkEyMUZEQUIzOUFFNDkyN0EzNUVDQ0UKKzoxMEVBQzAwMDJGRkE0REZGNzZBM0IwRTdCODlDMkIxNjcyQUQxOEZCNUEKKzoxMEVBRDAwMEMxNzVFNDBDMjQ3OTU3MjRDNjFENjNBRDI3N0Q3QTJDQkIKKzoxMEVBRTAwMEYzMEFGRjhFRjA4MzNDQjA5N0VDQzBGRjBEOUY0RDYxQTEKKzoxMEVBRjAwMDc3NjA2ODAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDcKKzoxMEVCMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRkI1MUNGQzBGMDAzN0EKKzoxMEVCMTAwMDhBRjkyQzE4MTg1NjU5MzEzMERDQjA2NjYwNzBCNDYxMkYKKzoxMEVCMjAwMDYwRDg2QzhFOTBCQjIxOEU2MDUzMTMzRjk3QTc0Q0ZGMkIKKzoxMEVCMzAwMDNDNDkwNjg2MDU0MEJDMDg4ODk3NDg5MkFFRkZCNzE2NDgKKzoxMEVCNDAwMDgyNURBQ0NBQzBGMDA3Qzg3NzAxRDI1RkQ1MTkxODZFRDQKKzoxMEVCNTAwMDAzRDk3RjgxQjgwM0M4NUYwM0M0M0I4MDU4MDRDOEJGOTIKKzoxMEVCNjAwMDA5QTQ5OUQ1MTgxODlFMDBFOTdGNDBCRTM0OTA3RDQ0RDEKKzoxMEVCNzAwMDBEQkJGOUZGQjVGMERCQkY1RDAzOTVGRjEyOEQ3RjQxNDMKKzoxMEVCODAwMDFEQkZGRTI4NERGQ0YyQUYwOUM4NjNDMzVFRjZFNEM3QTMKKzoxMEVCOTAwMDQ3MUYwNTdBMDcwMkFGNDc0QkQ3RTJBNjBDMEM3QTY2RUYKKzoxMEVCQTAwMDBDMEM4NUQwQjRCRjA2NDlCRTE5MjgyNjYxMEE2MTdGQzYKKzoxMEVCQjAwMEQxMDNFNjE3MjA3RjI1OEU3Q0YxMTUyOENGMEY5NEVGMjcKKzoxMEVCQzAwMDM3Qzc2RkJGMzgzMzVBN0FFMUMxNTRGMzk2MDlDMUFFRTMKKzoxMEVCRDAwMDE3NDI5NURCMjQ4Q0E5RkVBNzA4MDMwMzAwRTkyODUwRkYKKzoxMEVCRTAwMDc4RDgwMzAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwRDIKKzoxMEVCRjAwMDFGOEIwODAwMDAwMDAwMDAwMDBCRTU3RDBGNzQ1NEQ1NEEKKzoxMEVDMDAwMEI1RjdCOTczRUZEQzk5MjQ3NzI2OTMxMDYwNDIwMjRFNzIKKzoxMEVDMTAwMDEyRDQ1ODAzOEMxODMwMjYxM0I4MjEwOTg0MjRFMDAwM0MKKzoxMEVDMjAwMDdFMzQ1NjVBMDdFNDIxQjY0MEEzQjVBREVERjM5NUUxMjUKKzoxMEVDMzAwMDhGMzE1QUFDRDBGMkZBRDQ3NjdEREY0MEQ1RDVGNkI5MTMKKzoxMEVDNDAwMERFMEE4QTRBNDM0MjI3OTA1MDI0ODgxMTJERDY2QUZCNTcKKzoxMEVDNTAwMEEyNzZEOUY4MUFFRDgwQzFDNkVGQTM4RkVGRUM3RENFNzYKKzoxMEVDNjAwMEM5Q0MzRDk5NDk0MkY1QUQ3RTdGNjRCNTM3RjdERTczNzcKKzoxMEVDNzAwMENGRDk2NzlGQkRGN0Y5RUQ3REY2Mzk2M0I3Qjk4OEU3NUUKKzoxMEVDODAwMDBBNDIyRUMxN0YwQjA5Rjk1QzJFMjE2NDVFRkMyQTlFOEMKKzoxMEVDOTAwMDJGNzI5MjcwQzYxQzQyQjI5QzA3N0E2N0U3MTBCMkQ4RjYKKzoxMEVDQTAwMDUwRkQ0QjdDODQ0Qzc1QUVFRDI2QTU4NDA0ODhDM0U3RUIKKzoxMEVDQjAwMDUwMDhFOTUyNUVFODlENERFRjhGQkJFQzdFMDc4MUZGNjcKKzoxMEVDQzAwMEVFMjI2NDNFMjE3NzNCRTk5RkI0RkNGMTczRjQwQUVGMzYKKzoxMEVDRDAwMDNGQjE0NTA4MkQ1RkFCMzYxMjA1QkU3NzJBN0U4NzBGMDAKKzoxMEVDRTAwMENBOUJDNkIyMjk4NEQ0MTBGNkRGODI3M0E0NDZBMUNGOTIKKzoxMEVDRjAwMDZCQkM3NzM0OTJEOTg0NTQ3QjY4QUQ0RUY2RUUxMkZFMkQKKzoxMEVEMDAwMEJGNDkwODJENUY0MTU4RkRBNkQzRkFCRTgyRUMzQUE3NTEKKzoxMEVEMTAwMEJBRTEyRUE2MDY2N0QxRkEyRUVBRDZGN0RFMjU3RjI0QzEKKzoxMEVEMjAwMDZFMjg5N0YwQkM4MEY2MDNGRUEwM0NCODhBQjg3MkRFNkQKKzoxMEVEMzAwMENCQTA3RkRGNDA2RUI4QTREMkFCMzY4OTkwMUJFMzdDQkEKKzoxMEVENDAwMDkxQUY4NDg0MDk5OTRDNDgzQkZGNUUyM0MxRDk3MDRGMzEKKzoxMEVENTAwMEM4MzNEODdFQjZFMDYzNUQzRkYxRDI3RUU3OTQxMUZGMDEKKzoxMEVENjAwMDEyQ0E4N0E5NzU2NjE3QTE3Q0FEQThEMTE5MUY2QkU3RDgKKzoxMEVENzAwMEU3RjYxQjg0RkNFMDgzQjYzQzUyNDIzRjhGNkM0MjNFNzgKKzoxMEVEODAwMEU2NzAzRTc2N0RGMEZDOUI1QjgwNkY3NTA0Rjk3NkQ4NkIKKzoxMEVEOTAwMEVFQ0YwRDk2OENBNjI3NTA5NzlENDY2ODNEN0I4MjQ3MDcKKzoxMEVEQTAwMDMzQjAxRTQyRkVGM0QyMTQ1RTRGMTEyMTFEQzFDMkNDRkUKKzoxMEVEQjAwMDUwOTJFRkM0RjU5MUFEMUU0MjFDRjFGQkREMjZBOTZCMEMKKzoxMEVEQzAwMDMzNDY5NzdCMUUwNjczMUU1NEJGMDZFOUFDRTBCQ0ZDQkQKKzoxMEVERDAwMDgxNDI5QURBQjBERDI2MUNBN0MzOUNGRTZFRjM2ODQ2MUEKKzoxMEVERTAwMDdGMDlCQzhGNjZEODY4M0ZDMkU3NkNFNDQ5NUE0NUM3QzMKKzoxMEVERjAwMEUwQTI3NEEwNzdCQjY5OEJDMkYzOEU0MTNEMDJGQzIwNzgKKzoxMEVFMDAwMERFQjZCQzE1QjM0NkQzN0ZGOERDQkFCOUQ4QUZEMDI2OEUKKzoxMEVFMTAwMDRCQkJERjFGQTRGRDM1QTA3RkNGNjQyQ0E2RjU5QzFGNDQKKzoxMEVFMjAwMEI0Nzk1NDNBQUU3QkY4RjNDM0ExQjYwQzBGN0MzNzkwOUIKKzoxMEVFMzAwMDhERTNGOUM4NTZGQUY3RDVBOUY5RjFDODgyMkYxNzg2REMKKzoxMEVFNDAwMDBDMjhFN0I0RjI2M0YwRkM4OTIyM0E2RTFEN0IzNTNGNTMKKzoxMEVFNTAwMEY0NkIzQzdFN0U5RkI3MjNFRUIzRkREMTZBMEZBRDM3RDYKKzoxMEVFNjAwMDEwRjMyQkEwMTdEOTgzODQ0QzJBMDBCREU4MzhFNjg2MUUKKzoxMEVFNzAwMEYxNkQyNEE4NDc4MUUwQTJCNDJCNTkzRkZDQUEwRkRFMTQKKzoxMEVFODAwMDlGNTI0MTNFMDI5RTI4RjY2Mzg0MUVBMEVGNkFBMEQzRTMKKzoxMEVFOTAwMDhCRDc0Nzc5N0IzRjg0NzFDNEZFNkQ0RkJCOEFEMjdCOTEKKzoxMEVFQTAwMEJFNENDMzdBRjY5QkRCQUIzNEFDRUY2MjU0MDU3OURDMjUKKzoxMEVFQjAwMEM0RTQyOUM3MTdEQTY2MDdGRUFGMjdGRUIwMEZFQTI1QkMKKzoxMEVFQzAwMEQ4RUZGRkNFRkJGRjYzNUU5RjY4QTc2MzMwQkI0QTAzQUEKKzoxMEVFRDAwMEZBOUE4ODFGRDRBNDU2QkRBRjBCQkUwRjZDNjRGNENGNTIKKzoxMEVFRTAwMEI4Qjc1OTAxRkU1RDcxNUYzRjVFMjM5Q0NFRERGMDNERkEKKzoxMEVFRjAwMDJEOTBERjFDNTM4MDZGRDNFRjg5RTI3NUVGQjZCN0JBNjAKKzoxMEVGMDAwMDgwQkVDQzlEMjQwRDZDQzE5RTFBNUIxNjdDQjc2N0YxNDgKKzoxMEVGMTAwMEI0MzQ3OEVGMEU1MkM1QTdGNjIwRTBGN0RDRDU0REZCRjAKKzoxMEVGMjAwMEIzQjc0NjQzM0FGNzBFNTJGRUQzNzJFRUIwQzcwRjdBMkMKKzoxMEVGMzAwMEVEMEVGQkY4RDVFRjg3RjJCRkU0RkMzOENDREJFREU0NTcKKzoxMEVGNDAwMDc0QjhDMzI2MkZENzVDMDJFNURDRTEzMDVFMjNCQzlGOUEKKzoxMEVGNTAwMEM0QjcxOUU1RUU2RTJFNzdCRkI0ODczRTA3N0NDRjE5OTQKKzoxMEVGNjAwMDI0NUU0MkY1RjlGMDg3RjVCOUQwQUVBODVGMkVGRkQ0NDQKKzoxMEVGNzAwMEUzRkZGMzdBNzgzRjc5OTBCQzZEOUYwREQ3RTg1QTY4MkMKKzoxMEVGODAwMEVGNkFFODg3MUJFRUZCRDYyQTY4QTcyMkE4NDdFNjQ1NkEKKzoxMEVGOTAwMDFCMjFDNTcxM0I5NTMzMUM1QzdBMTNEQUM3NUFENDIzMDUKKzoxMEVGQTAwMDYxMDcyQTA2NzU5QjkyOTlBODY3MzVBODA3N0JCOTFFNDkKKzoxMEVGQjAwMEQ0MEM0NjUxNEVBODlFMURCMzUxM0U4NTNGQTA3QTQ2QzMKKzoxMEVGQzAwMEU1RUI3MEQwODZFM0ZENDQ0QzQ3M0I0QzhBQTM3OTJCOUMKKzoxMEVGRDAwMDVDQTNGNUE4RTNEQzg2QjlDMDZGQTE0RkEzRURDN0ZGMjIKKzoxMEVGRTAwMDFCRkFCNTk3RjYyMzk0QzRBRTg5RjY4NEJFQzlFRkM3NjEKKzoxMEVGRjAwMEQ1Mzc0RjE4RjVBRDgzRUE1QjE4RjgxOUI0QTVDRDA0RTEKKzoxMEYwMDAwMEZENkJCNUExOUU3ODZCREFCQTk4QkU2QzQyN0RDQjU5ODgKKzoxMEYwMTAwMENGRTg5OUJBMjY4MjdBMzA5RURFRURGNTc5QUEzNEE4MzcKKzoxMEYwMjAwMEJGODlFOTY5QzdFMDNCREIxQzMwMUU2QjA4QjcxMzE3Q0IKKzoxMEYwMzAwMEJCRTAzRTcwMkZEMzZCNTlDRjY0M0RDQzBDRjRBMTdFNjYKKzoxMEYwNDAwMDE2RUM4QzExQjhGQTc2MzRBMjVDRDM1NkQyNTBGRjUyMkIKKzoxMEYwNTAwMEU4NjEwN0U4NjFFOUZGM0Y3QTU4MjNFNjcxQ0E5ODJDMTYKKzoxMEYwNjAwMENBRkZGQTE4NjE3OEM4QjMwRkYxNTBBRDhGRTNBMTgyREYKKzoxMEYwNzAwMEQ3NkZGRDJBN0RGRkEyM0QwM0M3RjVDNUM5RjQyMURFODgKKzoxMEYwODAwMEFCMTEwMjM4RTNDQTdGNTk3MzM3MkQ1RjlGMjNGMENGNEUKKzoxMEYwOTAwMDQ2RDRFRjNBQUVERkM3RTAxMUQ1OUZBQTdFODVDQ0NGMkMKKzoxMEYwQTAwMDg2NzJFRkVFQUVBNkU1NEYwRTEwM0ZCQzNBRTk1MzExNjMKKzoxMEYwQjAwMDRGNzUwRjEyQUM0RkU4NjcxREVGNkYzN0JDMDc3OTFCMTgKKzoxMEYwQzAwMDI2MTFEMDRGODEyMzZBQjk3RTlGQ0M2MUVGQkIyRjEyRUUKKzoxMEYwRDAwMEI0MDNBMkZDNDlBMjQ0NTQ3QTdGOUNDQkRGRjlFMkRCNjMKKzoxMEYwRTAwMEZGODdCQjkwOTAzRjZGOEJDRDhFRDJFN0ZGNkU4QjdERkQKKzoxMEYwRjAwMERENDY4QkZFN0U5OUVGNjlCODFGRTBFNUZFODNDQkU5MjQKKzoxMEYxMDAwMDIwQzcwRDI3QUUwREREQTQ1MEZDNTM0OTYyMUJFRTg2Q0YKKzoxMEYxMTAwMEVGQkM0NThGQ0MyNTUwREY0NzMzMDg2NUVENTdBRkZFNzgKKzoxMEYxMjAwMENCN0JBNDEwMjg2OUQzODNBRUI4NUU4OUZBNDQzRDJGMDcKKzoxMEYxMzAwMDc4NDM0RDBBMUQ4RjgxQzhCQjZFMThCRjBGMEU3RTM0RjkKKzoxMEYxNDAwMDFCQUVDNDk4ODQzODZCM0MzQzE2MTBFMzE1RUJEQjAxMTYKKzoxMEYxNTAwMEI4ODNENDUwQjk5ODFGOTc4QkE5QjFCRTYzODg2Mzg3RDEKKzoxMEYxNjAwMDE4RkUyMjc1OUI3MTFDMkEzRDhDNEY1RDE3Q0VFNkMxOUYKKzoxMEYxNzAwMDc3NDczODVEOURFN0ZBRjJEMDFFRDY1OUVCRTlCNEY3MzAKKzoxMEYxODAwMEFGMDlCMkZBRjFGQjgwODc4REEzQTBBNzVERDgwNzQ1MzAKKzoxMEYxOTAwMEUwMjUzNjVFMDFGRTdEQjlENjM3NjkwRUU1N0ZGOTA5QjcKKzoxMEYxQTAwMEQ1QkY4RDdFNTczRURDNUY0MzkyRDg5RDg4OTI4NUZEMEEKKzoxMEYxQjAwMEFBMThCMENBNjdFNzg1RTMyQUYwODVEMkFCMDJCRDk1RUQKKzoxMEYxQzAwMEIxM0U5NUQ5NkQyNjU3MDEyRTU3OTVCMTMzMTY3QjJFM0EKKzoxMEYxRDAwMERBRUY4QzlENjk5ODAzRjY2MzgwRDlBNzU0N0NFREU2M0QKKzoxMEYxRTAwMEZEMzhDQUM3RkI4OEQwNEYxMkM5MDBGQTdCMjhGRDBGMzMKKzoxMEYxRjAwMDhERjE3REFENDdCNUQwMkRGNEFEREE5OTYxQzFFNzBCNDYKKzoxMEYyMDAwMDg3QjMyNUJDNkZBNTc3ODExNjQ1N0UyRDAwN0U5MUQ0RUUKKzoxMEYyMTAwMEZDRkFCNjkyOERGNTJGMUNGRURCRjgyNURCMTE1MTZGNDEKKzoxMEYyMjAwMDI3RjBCMTY0MzQ1RDA0ODQ1QkQwQURGRTlGQ0ZENzRFMzAKKzoxMEYyMzAwMDZFNjdBOEJGRDIwREZBNEFGQTBGQThBMDhGQjVBQTgxQUYKKzoxMEYyNDAwMEY2QTVFMjY2MjVFMjQ4QjAyRkEyOUYwQkI5NUU0REJENDAKKzoxMEYyNTAwMDQ4RDA2RTk4MDMwNENCMUQ4RTMxRkI5RjhBQ0VBMzVCRjIKKzoxMEYyNjAwMDRERUM1RkQ2NDVERjRFOTg1NzE3MTlDMTdDRDA5QkFFNDkKKzoxMEYyNzAwMEM5N0Y2NDdBQTY5QzQzRkQzMjJGQkVEN0ZCNTVDQUZGRDcKKzoxMEYyODAwMDUzNUNFRjBFNkZBREMzRUJDQjVCOUI5MTJGMDE0MzcxRDIKKzoxMEYyOTAwMDVEMEY1NENENjRGQTU2MkRFQzFBOUY0RjRFNzBGQjcxRTIKKzoxMEYyQTAwMDlDQ0YzM0FGNkUwREUxRjM1N0I2NkVFNDdDNjVGRDU5MkMKKzoxMEYyQjAwMEM0RkIxMzM1QUEwRDE4Q0Y2RTY3MTFDRUZCMEIzNTUzNjcKKzoxMEYyQzAwMDRCRTY1NzU1QzRBQzcyNzRDQzQ3RjE4RTAxNzhFQkE4NkQKKzoxMEYyRDAwMDcxM0RDQ0M3RDQzRjQ2QkNDMkVCMTlGOTJFNUY2OTUzRDAKKzoxMEYyRTAwMEU2QzRFRkNGMEE1Q0M0Q0JGRENBRkYyQ0YzRUI2RUNFQjUKKzoxMEYyRjAwMEMwRjlBMDIyMTZBQTA1QkVENjM2MjlDNDA5N0M5RDNFQjcKKzoxMEYzMDAwMEFCMzE4QjNFRkY3QzkzNzU5QzQ1N0QzRDM5RUY0RTAyQzIKKzoxMEYzMTAwMEJFNTcwNDgyNUE5MDVFNkJBM0I3NjgzRTU3RUE3MUU4MDUKKzoxMEYzMjAwMEQxODI4REQ3RTFGODMyRkRBOTg4RjVENzk4OTQ4RTI1NDIKKzoxMEYzMzAwMDlFODI0NkY0NDc4NzM1MUJEOEMzNDYzQUNGRjVBMzVFNzUKKzoxMEYzNDAwMDc4OTBDRjYyRkUzODk1QTNENjQ1MDBFRjBERUVDRjAwNDIKKzoxMEYzNTAwMEZBQkIzREVBNjRCODZFODdDOTgxQ0E1MUVENDU4QTRGNTAKKzoxMEYzNjAwMEU3OENEMUZFQjA0Njc5NEUyQkQyQTJDQzVGQTNGNUMwN0MKKzoxMEYzNzAwMEI1Qzc1MEY5RjMyMDhFNDcwRkFEMTc5RTc3RkRGNTg3N0YKKzoxMEYzODAwMDhENzM3MzAwRjdBQkM4OUYwMEY5REFBOUVCNjBGRUYyNEEKKzoxMEYzOTAwMERCOTFERjQyNkY4NTFDNzQxQjZDN0VFQzg5NTlFNzQ3NUIKKzoxMEYzQTAwMEM0QjdGNDU1Q0ZFMEY3NkY1RTA5RjMyM0IxMjM1RTEyQzMKKzoxMEYzQjAwMEY4NTc3QzdGQzRCODdERUYwQUQwM0JBMkZBMDkxOUZENEIKKzoxMEYzQzAwMDdERjA2NkQ1QTI0N0U1N0VBQjlFRDU5NzRFQjJEQ0Y3QzEKKzoxMEYzRDAwMDBDQUVGQkYxNUREMDVFMkM5REI1MTdERTY0QTFGNzg4MDUKKzoxMEYzRTAwMEMxRTZERjlFMDhDMzA3NjJCRTE2RUYwMzQ0RDY2RkI5QkQKKzoxMEYzRjAwMDNGOEI0RUY5QzFDRTUwRjkwNDNCNTNGRDQ5QTk1MTQzMEYKKzoxMEY0MDAwMEVCQUJDOTUxM0RBMDk3QzczQ0RCQ0U4MkJFN0MxMEY4NjgKKzoxMEY0MTAwMEY1Mzc2MERFQUQyQkIxRDJERjMxMzg5NzdERUY1NTkxRjYKKzoxMEY0MjAwMEJFRjY5Q0VCRjFGRUIwRDcyRUZBNkYyQzAzN0FFMDJGREMKKzoxMEY0MzAwMEZBRkUwOEU5N0Y3NTM2QUQ3NzU1QzQ0QUQ3OEE2MDg2RUIKKzoxMEY0NDAwMEU1N0U3M0REMjQ4OTZFNkI1Q0E4RkFFMjA2OENFRjJDRjYKKzoxMEY0NTAwMDJBRUREQTkxNERFRkNCQzExNDE1NDE5Q0M5NjFGOTJFMEIKKzoxMEY0NjAwMEUwQjRERTk3NDM3Qzg3N0VCNzgwNDhDRjJGMkVDNkI4QTYKKzoxMEY0NzAwMDRFMzlDNDc1QzQ3M0UwQTc2NEM3RTkzREQyMjFFNjc5NkIKKzoxMEY0ODAwMDU5M0VDNTdDOUQ0QTdFREI2RDY0MjNDNDQzQzhEMENBMDcKKzoxMEY0OTAwMDcxRTI0MkRCOTNDRUY3NDREQkFCQzBGODk3NzM5Q0QwQUMKKzoxMEY0QTAwMDZFNkZDQjgwRTc5NUU3OThGRDI0NDNEOTQ5RjE4RDNDRjkKKzoxMEY0QjAwMEVGMTNGMjM1OTQyM0MxNEZFMjA5OTM5Q0Y5QzhDN0E0MTYKKzoxMEY0QzAwMEZEMTI3QzY5QTVDMzcyMDlGMDBFQzc0OUY4NzExMkZEREYKKzoxMEY0RDAwMDk2QkY5RjAyRkE0REZCQjNCOEU5NDA4Njg3Q0E1Nzc1QkQKKzoxMEY0RTAwMENDODZGMkQ1NjFFQzQxRkQ2Q0Y3QUI1QzFGRkIyRjI1QTAKKzoxMEY0RjAwMENBNjc0MzUzRDUyOTg4MEZEMkYyMDRGNEI3QzNCODBCQjcKKzoxMEY1MDAwMEY1Mzc3ODFERDM1RkFBREZBODhGMDFBQThGODk3ODU4QjUKKzoxMEY1MTAwMEM4QkYyQ0VGMDMyNDdDRjY3QTY4OTc3Q0Y0REEyQUMwMDMKKzoxMEY1MjAwMEMxMDc1OUJCQjJERTUzQkQ0MzNEM0U0RkQ0NTQ3QThFMjIKKzoxMEY1MzAwMDdBRDk0M0Y1MzI1OTNCOTdBRkU3MzYxM0RBM0Y3RkQwOUMKKzoxMEY1NDAwMEM1NzBGNzI4M0Q3RkI1NjYxMkI0RTc1NDU4N0I5RkIxNkMKKzoxMEY1NTAwMDlFMUZFMUZBMjNDQkY3Njg3RDVGNjQ4MEZEM0Y2RkM4OTMKKzoxMEY1NjAwMEZBQ0VFQ0RENjJEN0JCQUZDRTY2QzUyRDdBRkY1OUU5ODYKKzoxMEY1NzAwMDdCQTA3ODlGMEE1MDQ5RThGMTc4RkFGRUI3RUE3OTRBMDkKKzoxMEY1ODAwMEZEOURBMDdFQ0JDRkI3RDgxNEE2MkYyOUY0MzNBRUY3QkMKKzoxMEY1OTAwMDYxMkNCN0MzNDU4QTIxM0VENkFFQTRGQkI3MTc4MDlFMjcKKzoxMEY1QTAwMEIzNzg4RDVDM0U1REU1RjUxMjY3RjgwRkI0M0Y2QkE5NEIKKzoxMEY1QjAwMDUzOTY0OTU5QkQ5OUY0Q0Y4MDgxNTY3MzdEQTg3NzVCRTYKKzoxMEY1QzAwMDZDRkQ1M0UwRkVDRjI0MzZFNTVBMTVGQzA2NzIwOEUyQzYKKzoxMEY1RDAwMDQwOEE0OUM4QkQ5NDI0QzVFNzIxNkJBOEEzRDVBMjg2NUIKKzoxMEY1RTAwMDJFRDk2ODc5NjUyMEZBODkwMjAzNzkwRkYxMDFBRUJCNDMKKzoxMEY1RjAwMDVBMDlEOTU0RkFEQzQxRjk2M0QwRjI0NDNCODM3ODhGM0QKKzoxMEY2MDAwMDIyMjAxQ0E3RTU1QzA5OTYzQjhEMjhDNkNGQ0JFQzgzNTYKKzoxMEY2MTAwMEZENDI2RUQwNUY1QkUzNzlFRjVBNUEyRjg5MkE5N0FFOEQKKzoxMEY2MjAwMDhERjdGMzI5N0IyNENGNkY0MDNGMjMzRkRBMDJGMUE2MDkKKzoxMEY2MzAwMEM3NzRGRjkzQkVEMUZERkNDNDI2RkM5RkNCRUJFNzI3MkMKKzoxMEY2NDAwMDU0NTY5MDlGMzZDNkNGQjAyREREMEZGMTJDQjk3RTUzQTYKKzoxMEY2NTAwMEJERUNGQUNGQTZEMzZCMDVGMDcxQ0U2ODNFMkE4Mzk0MzkKKzoxMEY2NjAwMDdGQzAwN0VEM0YyRjgxQkY1N0UxNjU3MkE1RkU1OTM3NzcKKzoxMEY2NzAwMDIxQkU0MjU0NjdFNENBMjQ3NEFDRTc3NEI0QThFNjZDQjMKKzoxMEY2ODAwMEUwQjc1QUREODZGQzM5MENFMzZGMDBGRjcyQzgzNzEyMTEKKzoxMEY2OTAwMEU0QUI1MkQ1QjE3RjZBMDM2OUM2Nzk4NTQ0NkQ2MDM3QTIKKzoxMEY2QTAwMEM2MUIwRkJCNDYzNDE1QzZCMUVGMTJEQURCMTY0RTlGRjAKKzoxMEY2QjAwMDgzM0UzN0U2QTYxRTJGQjVDMTFGOEJEMjcxMjI3RjY2MEYKKzoxMEY2QzAwMEUzNzQ3OEE5NTUyRUJGQzZFOUZGMzJEMDM1OEY5OTIxNTIKKzoxMEY2RDAwMEE4QkZEQ0NCRUM5MEZBMjdCRDM5OTI0NDhFNzcwOEZFQTgKKzoxMEY2RTAwMDczN0VDOUU1MEZERkMyRkEyRkNBN0Y4N0NCRkQzNzJGQTQKKzoxMEY2RjAwMDVGRkU1NzRGMkQ0QTNENkU0MkRFOTVDMUUzQTlDNkFGNkUKKzoxMEY3MDAwMDM5RDlGQzM2NEJCNTcxM0FDMkNBNDRGNEExNTI2NTcyN0MKKzoxMEY3MTAwMEE5NTZEMzcxODNGRUQ1NUFGOUY4NkRDRThGNTVCQ0RFNEMKKzoxMEY3MjAwMDJGMkE2NjMzQzhDM0Q1NEFGMDZFMTVEQUE5RTk0M0ZEMUUKKzoxMEY3MzAwMDJCODQ3QUU4RjM2Qjg5NzkwRjNDQTdFRkJGMDFFNTQ4OEEKKzoxMEY3NDAwMDlERjUzRDdERkUyRDdDREVENDg3RUI0QUUyNzk5NzYyMDQKKzoxMEY3NTAwMEZFMjNGRkVFOUZCMDVFRDNGQTlFQ0FFMTU2Nzg0RUU1RDcKKzoxMEY3NjAwMDg1QTg3M0UxQjkwRkU5QTE3MjQyOUM2MDJGRjZEREZFMTYKKzoxMEY3NzAwMDA1RTAyQkZERkU3RUFDOUY5Q0IxN0M2RjA3MDM5MUNEMTUKKzoxMEY3ODAwMEFFQ0E1Qzc2N0QxQ0U0OEVGQjk5M0I5QTRDRTRBQjRFOTIKKzoxMEY3OTAwMDlBQjkxRkNDRTZBRDA1N0NERTcyODIwMkMzM0NFQ0QxODcKKzoxMEY3QTAwMDcxNUVENEQyQ0M0ODk0NUVCMzNENTExM0UyNzg5MzQ4NTUKKzoxMEY3QjAwMDVGMThGQ0E4RDVEMjdDREJCNEM2M0FCRjdDNjFCRDc1QUUKKzoxMEY3QzAwMDdFNTlCMzI5Q0Y3MkZGQTU3QjhBMkNGN0ExRkJBRUI1N0EKKzoxMEY3RDAwMEQ0Qjc2RUU3RjU5NkZCRjVCQjJBMkNGNzFCRjY1NjVCMDQKKzoxMEY3RTAwMEJFREZGOEUzMDZDQkZCMkYzRkIxQ0E3MkJGRTlFOTVCOEUKKzoxMEY3RjAwMDkzQUU0QjhBRjlFRTQxREJEQjlCQzAxRkRCMDFBRjEyRkUKKzoxMEY4MDAwMEU2MEIyREJFRUU2ODYzMzhDQ0ZBMUQxNTNGOUYzNjFGMDAKKzoxMEY4MTAwMENBMTEwQzI5Qzg3MkFBNDlFQjk2QUY4RkU4Q0ZERDk2QzIKKzoxMEY4MjAwMEY5RjY2OEI4MjBDNzRCNTk2QTE2NjgwNkM2REJDMjY2ODcKKzoxMEY4MzAwMERGQ0MyOUYxRjlCQ0RBNDdFNzYzMzdGOEUxQzlENzU3REMKKzoxMEY4NDAwMDM1NUVBRThBRjQ1N0MzQjg5OTlBQjU5Q0M2RDc1OTBEQTAKKzoxMEY4NTAwMDdGMENFMzI5RjIzQUFCRTY2M0YzQjQ0Q0VGMTlENTk1OEMKKzoxMEY4NjAwMDAzNzY4OUQ2RURDM0Y1NTUyMzdCNDJFQkFCRTNGNjhGRTgKKzoxMEY4NzAwMDVBQzIwOUY1OEZCNzU3MDVGRDJDNEFEREFGMDVBNTMxRjIKKzoxMEY4ODAwMDE1Qzg5QjY4QkZFMjc0NUE3MThGNThERjVFQzY4QTkyQjIKKzoxMEY4OTAwMEYyODIyNzMyODBERTY1M0U4Njg3NDgyOUMzMzc0RUZBREEKKzoxMEY4QTAwMDhGQ0RCMzhDRkYwREJDN0NGMDFFOEYxREUyQzhDMTFBM0EKKzoxMEY4QjAwMDJCOUQwRDFDM0Y1MTNERDRDMDRFOTQxNzRCRUY4MUNFNzQKKzoxMEY4QzAwMEQ5NTBDRThBOTNCQUI5M0NBQTFBNUZFNzlFNEZFNkUzQjUKKzoxMEY4RDAwMDM4NzBCRDVEMjFGNEI2OTZDNTI3ODgyN0Y5RkE3N0ZEMDMKKzoxMEY4RTAwMDMwMkQ4NDgxOTg4ODI1NkZFMDY0NzE1MTNBN0NCN0FDRTMKKzoxMEY4RjAwMDk1RjgxQzE0OUYzQzM4NkY5QjY3MTFENUZGNDZEM0VFREIKKzoxMEY5MDAwMEFGQTNBNUFCRkQyQzFFNUU2RkFBQjhDRTdCNDUzMUJCNjUKKzoxMEY5MTAwMDZGQUM1MTIyNEIyODdERjVBMTNFOENFNzM1QUU4RjZDNDQKKzoxMEY5MjAwMDgzRUJCNDhENTEwREU5OTBGOEZBQjgyRjkyNjU1M0UzNEIKKzoxMEY5MzAwMEZDQ0RFM0ZDQ0ExMzdDRTU3QzE0NzY3Q0RBMjZFQjM4M0MKKzoxMEY5NDAwMDM2OTY1QUY5QjU5Q0YzNTNFNkYzNzJDRUM3RTUxMjFGMEIKKzoxMEY5NTAwMDQ1RkNBQzQ0RTNGMjJDRjE3MTE5QzdBMUNFNzk0NTYzQTMKKzoxMEY5NjAwMEZBNzU4RkYzMzg5NzkwMUY0RDlBRDc4NEZEMTg5OURGNTkKKzoxMEY5NzAwMEI4RkNCNjgwMUQwNzlDRTdFMTM4ODVDRjdCNTUzMzE1NzEKKzoxMEY5ODAwMEY0ODM2QUJEMEFGMkI3NzZFNjNFNEI3QzczQzk4ODVDQTUKKzoxMEY5OTAwMDMyM0E2QkY5Nzg5N0U3QkY4QTcxQ0RDRTFDM0VFRTk0NzAKKzoxMEY5QTAwMEFGQjVGM0UzNzJEODMwOTNFNTYzRUNFNEZERUVFMDM4RjUKKzoxMEY5QjAwMEJBOURDNzJENUJCQzY3RDRDNEI4NTdDNzhDQkU3QzNGMEIKKzoxMEY5QzAwMEJEN0ZFOTQyREY5QUFGNTE3QTFBRjMxNTdGMURCNDFCNTAKKzoxMEY5RDAwMEUyNzE1NjVFRUZFMUVCQjZFNTAzN0QyN0NFRjU2MURDMjMKKzoxMEY5RTAwMEU3QTU5Q0EyMzFFMzg4MDJCRkNCRjI1MEVFMEZENkMwNTAKKzoxMEY5RjAwMDdDQjIyNEZBMEIxNUZBNUYxRUEzNkM1MzAwMjc0NzM1MUYKKzoxMEZBMDAwMEMwNUY4RERFQkIzNThDNzNFNURGQTU0MUJDQjEzNjdGQjEKKzoxMEZBMTAwMDVGMzVCNDFCMjBBMURENTUxMEY3Q0FCMUZCQTMzRTg4QUEKKzoxMEZBMjAwMEZCODQ3N0JBNDE5RjRCOTg1RTZFQTRGRjEyRjU1MkQwQ0IKKzoxMEZBMzAwMDVEMzFEOEFDMDE5RDRCN0M5MkZGQzJFNUE4RDYyQjNEMzEKKzoxMEZBNDAwMDlGQjkwNEU1MjgyMEM5RDEzRDQyMEZBRjI0NTcyNkNBRUIKKzoxMEZBNTAwMDhGODgxN0U4RTcwQUI5MUUyNjk3MUYzMTBFRkZDRUM3MTkKKzoxMEZBNjAwMEUxNzczQzdFRkMyNjhGN0ZCRUIxRDU4N0Q3NUY2RDJEQjkKKzoxMEZBNzAwMEM2RTczRDVCRkQ3OEZGRkFENjMyQkNGRjM1OEZDQkJFQzMKKzoxMEZBODAwMDBBNzE1NjhDOTMwNjc5QkNCNTA5RUY3Qjc5RkM1NEM4OTIKKzoxMEZBOTAwMEU3MDM3Q0JEQTM1NkVEQzBGODYwODMzRkU0RjQyNEFDREIKKzoxMEZBQTAwMDJCMzQ3MEJBNTFBNDAxNUY5NDE0MjU1REJGNzVDQzM4MTYKKzoxMEZBQjAwMDg0RkMzQjMzMjJGRjA0RURDMENBQzY4MkZEMEY1MUJFNTkKKzoxMEZBQzAwMDM4QkU0MzQyODAxNzFENDc3RkExNUQ0NUU1QkFBMUFFMTAKKzoxMEZBRDAwMEMwQkUwMURBMEJCNzY5RDdEM0ZBMUFBMkJGRDA4QUUwNDkKKzoxMEZBRTAwMDc5RTM3NUY2REI5M0I0MkZEQTQ5RDVCRTZDQjc1NkQ1RkEKKzoxMEZBRjAwMEE5OTIxRjJBRDY4RjQyNjFFOEU3RDQ1ODI4MEFGNDA1NTQKKzoxMEZCMDAwMEJDQkFDRjkxMDRGNzc3RTU2RUYwODI1Q0I1OUMwQjc5QjcKKzoxMEZCMTAwMDQxQUU1QTcyRDkzQTAzMjA1OTkwMUI5RENCQTkyODFGOTgKKzoxMEZCMjAwMEYwNUFEN0Q3NzU0RTc3MDc3RDBFRjQ3NkM0QzY1RUY3QzgKKzoxMEZCMzAwMDE2N0EyMENBNTU2ODZEQUFDNzQ4REQzRjM5N0VCNDUzOEUKKzoxMEZCNDAwMDQ5RUU4RjVFRDQ2Q0Y4OUQxQkZBNEZFRDM3QjU4NTFBRTAKKzoxMEZCNTAwMEU4MTk4ODI4RDAzRjk1OEEwREU4OTc2MTEwQjQyRjE5Q0QKKzoxMEZCNjAwMEZFMTBCN0I3RDZGOTM5QUIyQzE4QUM4MjcyMzlDNEJGQzYKKzoxMEZCNzAwMDA0Q0M5NkQxRUYwNUI5NTFDQjE2QkYwRkYzMjcyOTQ5MTUKKzoxMEZCODAwMEIwQzdFMENGQzhGRTdDRTJCRDhBMjYyQUVDQ0E4NkFCQUQKKzoxMEZCOTAwMDVDOEVGMUQ3RTAyMkQ0N0ExREEzRUY3QjAzRDZGOEFGQjkKKzoxMEZCQTAwMEMxRjk1QkVFM0JGMTFCQjA5N0RGRjNEQjU4QjkxQ0I2MzQKKzoxMEZCQjAwMDRFN0FCRTZDMURFMkFENzI4RUY3MUQ2NDM3OTY0RjI3RUMKKzoxMEZCQzAwMDZENzhEREMxRjk3REJFRUMwQzgxRjk1QkQ1MjgxRUNFQzgKKzoxMEZCRDAwMDAxN0E5QzkxMzBGRERFMkREOTZEQ0RCMEYyNUJBMTNDNTgKKzoxMEZCRTAwMDU5MDNCODc5NDBCM0Y4MTE0QTE5QjNERjRFRjBDM0MxRDUKKzoxMEZCRjAwMDNGRTFCODI0RUVCRjg1QzgyNTYwRkUwNDcxRDI0RUJCM0MKKzoxMEZDMDAwMEQ1Q0YxMkQ3REY2QUNDMEZCMUQ5QTVGQ0I2RkZFQkY5N0YKKzoxMEZDMTAwMDc3RkMzM0U1OUZGMEZGNDZGMERCQjEzQjA5QUNBNzg4RUEKKzoxMEZDMjAwMEZDM0U1MUZFNTc1MjFDNDlDRjdGQkJDNjRDQzJGNzJBM0YKKzoxMEZDMzAwMDNCRTNGQjc1NzYwOTZGMDVFNDc2RDJDMkMwNEY5REZBQUYKKzoxMEZDNDAwMDQ5NjlDQUU4N0E1MkI1NDcwNkU2OEUxMzhGREFDNkZDRDAKKzoxMEZDNTAwMDQ0Q0RDM0ZBQzdGMzczQThCQkFENThGQzBFQTdFOTA1QTIKKzoxMEZDNjAwMEJGNkZENEY3NUU5QjQ1NEY0N0QzQ0RGOEYzNTlEM0JCNTUKKzoxMEZDNzAwMDkwM0E5QTcwNUQyRUVDNzAxOUMzODkyQjdDMTQyN0QyQjAKKzoxMEZDODAwMDNGNTcxODRDNEU0RjU3Mjk5MUVEMjhBN0E2QzU4RkFBNkMKKzoxMEZDOTAwMDJCNUJGMjNFREEyNUVBNjdFOEYzMzlGRUE2RjRCNzQyQjkKKzoxMEZDQTAwMEJEQjQ5RTU3NzJDNTc3MjNGNkM0NzY2OUNFRTg3QTgyRDIKKzoxMEZDQjAwMDM1MENGNzkwRjBDRjk3MjZDNjA1ODI1NDVDOEFFNzQyNTAKKzoxMEZDQzAwMEJERUM3QjVBQjRFQjUyMzIzQUI4REQwQTk2RERCNURDQjYKKzoxMEZDRDAwMDcwQzNCREE5M0MwQTM4QUUyNDAxMUYwMDVGNjczQUFDNkYKKzoxMEZDRTAwMDdDOTZFQzVGQ0QyOEJCNjdCNUI3OEJBOUZDMUVBMkVENTcKKzoxMEZDRjAwMEQ0QTlDRDhEMzVCNEZDOTIzREVCMEVCRTg4RTQwOEZGNEYKKzoxMEZEMDAwMEMyOTdCNERFNTNGMEM3OEQ4MEY2QUM3ODg1Rjg1OTlFNjMKKzoxMEZEMTAwMDQ1NzVEODg3RUI4MjJCNzIxNDEyMjkwMEZBQUQ3NDJDMkEKKzoxMEZEMjAwMENFOTdGQ0FCMUNCOTFGQkI3MTFDOEY2QTc0MUVBMUUzN0MKKzoxMEZEMzAwMDc1OTQ4RUUzNkVGNDdCOTNGQjQ5QzI3RjVCNTgzMDg0RUQKKzoxMEZENDAwMDdFOTJGMEUzMDhGN0UzM0NGNDVGMjIxRUFCRTRFNUFCMDAKKzoxMEZENTAwMEVFRjE2OUIwN0U1MDI1QzU4RjJCNDdGMjgxMDlGQTQ5MzMKKzoxMEZENjAwMDBCODk5NURFNEFFRUNGNTU0QUZFOUNEMEY3OUYwQUJEMUYKKzoxMEZENzAwMDE1RkUyQUI3ODczNzA5M0ZBOTMyMzlCRTEwRDcwRTI5OTkKKzoxMEZEODAwMEJGOERFMjQ3QjNFRDMyRjQ4MDAwNTVCNEJENDYzMkMyQjgKKzoxMEZEOTAwMDI3OEI3Qzc1MTU1Q0Q1MTZBNTdDQkRDOTlGQzZGMkFGQjcKKzoxMEZEQTAwMDI5OUQ5QUIwRTdDODI3ODZCNzk3RjNGMjM3Rjk3NDk0N0MKKzoxMEZEQjAwMEZGODA0NzQxRkJERTM4NEUzQzIyNTBDNkQ2NTU1RTM2QUEKKzoxMEZEQzAwMDE0OTYzNzE4MjZBRkUxN0ExMUE3QTc4NkZFRUZERUI5QTEKKzoxMEZERDAwMEQwOUU1NTJFRjI3RDdERDU5OTM5MzA2RjI4RkUwODE5QjkKKzoxMEZERTAwMDJEQUZCNTdDNUNFMUZCRkJCMkMxNEZBMUJFNzYzNkFDNUEKKzoxMEZERjAwMDY3QzhGMTg4M0UwODk5NTI3RjlDRkE0QTA1QTNGREY5MkQKKzoxMEZFMDAwMDA1N0M3Q0FCRkMwNEM0N0U5NDNGQkY4MDhGRUY4MjUxQTUKKzoxMEZFMTAwMEZFQkExNTY3QkYxQzdCMDdGM0FDQ0U5NzI4QjgyRUQyNkQKKzoxMEZFMjAwMDU1RjAzMUZBMDk2MjlEMjZDRUJGRTNFODRGMDVDQTNFODAKKzoxMEZFMzAwMDYyNzkwMzIzRkUwOEFCNkZCOUE4QUZFQzE4RTYxN0RFQjIKKzoxMEZFNDAwMEVGMzk4Njc5MUNBNzRGQjBGNUVCRDM1QUNDMDA3RjY0MEQKKzoxMEZFNTAwMEE5QzA1Nzk0QTM1MTkxRkY1RTAwNzkxMkFDQkUyOENGODAKKzoxMEZFNjAwMDY3NzhEOUY5NkEwNkQ4NEQ5MTE3RDIxOTQ4QkUzRUI3QkUKKzoxMEZFNzAwMDUwNjVGMTYzNzFDREQ3MTk4RTJCRDZEOUZDMjNFRUM1MTEKKzoxMEZFODAwMEY4OEVDODkzN0FBQTk0Rjk3QkRGQjY4Q0JCNUMzRjk0NUEKKzoxMEZFOTAwMDZGQzJCODVGQjQyNDM4NDY3RTQxQTNDNDY3OEY2RUM1NzUKKzoxMEZFQTAwMDFCRTNFMTVBRDE0Rjk5MEY3MjNGNDdFOThCQ0VFMjYwRDUKKzoxMEZFQjAwMEFCRURFNjc0N0Q3MkJDMUQzMURGQzlFNTU3Mzg5M0U3QzEKKzoxMEZFQzAwMENENTQ5NTU5RTM4RTcyREVDQzZBN0JBODA0RUFBRkQ2OTYKKzoxMEZFRDAwMDk0OUQ5OTNFQjQ2QkE4NEY0NzJGMUE4ODYzQ0VDNzhFNjYKKzoxMEZFRTAwMEVFODQ2MUVEMTk2MjcxQ0Y0QUEyRjIzQzFBQjMxMUQ2QzkKKzoxMEZFRjAwMEQzQzQzRTg3MUExRUE3OTBFOTE4QUZGRENBQTE3RUY0QUQKKzoxMEZGMDAwMEIzQUI4NjYzMzUyMDdGMzcwNUJBRDBBRTJFQTM3Njc1QTYKKzoxMEZGMTAwMDUyMTJCQkJBNTgxRERDMzkwOUY0RDdBRkEwN0Q3OEY5NkQKKzoxMEZGMjAwMEFEQkU5QTQ5NEM5RjMxM0ZENUFDMkNEMjI2ODExQzc4NkUKKzoxMEZGMzAwMDkyQzdBMTE2NzAzOTQ5QTU3N0Y0NDMwRDcwQzM0NEY1RjMKKzoxMEZGNDAwMDZFQTUzRTgyODM2RUI4NTQzNEZFMzhBNTkyODdGM0IxMTUKKzoxMEZGNTAwMEYzNUY0QjE2MUYxNUQ3RUExNEUzQkI4NTQ4RkNFREIwRTEKKzoxMEZGNjAwMEM2OTVFNTdBNDQ5Qzg3QTgxREY5QTBDRkMyRkY5NUNCMjIKKzoxMEZGNzAwMDdENUI2N0YxRkU5RTU5Nzc5MEZFMDRCRjRFRDgwM0JEQUUKKzoxMEZGODAwMEFDQ0Q4MEY4NDQ2RkQ5RDhGMzg1OUNBRjU2NDVBQ0VCMjcKKzoxMEZGOTAwMENFRDU0RUVCQkE3M0FCNjZGRUEzNkVDMTQ5NkI5OUJGNkIKKzoxMEZGQTAwMDVBQjYxNkZERDVFNTI1MEVGNDU3QkI2NkREODFGRUE5RDAKKzoxMEZGQjAwMEYwQUI1QjZFM0M4MDcxMTc5MTQ3MjVGQzUzOTlFRURFRTgKKzoxMEZGQzAwMERDNjcwQzI4MzcxRUREQzI4RkVGNzRCMDNDMjBGMERCRkQKKzoxMEZGRDAwMDdERThCN0JGOERGOTQ1NzJGOTQzMEVDNkFGMjczNUYzRkIKKzoxMEZGRTAwMDA3NDBGRjRFQkJFOTVEMEJFQjg3QjMxQ0ZFMjc5MzhDRUMKKzoxMEZGRjAwMEMzMUIwRUE2REZCRDI5RDY1MTRGQzM4MkM2NjRFQzA3RDIKKzowMjAwMDAwMjEwMDBFQworOjEwMDAwMDAwRjI0MTlFNkY4NDFGMkJGNjBENERGNTMyQkQ2REUwN0VFMworOjEwMDAxMDAwNkM0NUM5NUFENEM3MkMyRkY1NUI4MTZGN0VFNkI3OTIyOQorOjEwMDAyMDAwNDFBQjlGQkFEQ0U4Q0I4M0YxOTdFNzNCNzU4OEZCQjUyMgorOjEwMDAzMDAwMTNGNDVCMUY0ODYzNzIxNEYyMTBBNzk3QkU0RkQzMjhDNgorOjEwMDA0MDAwMzRBNUYzRTgyRTc1RDE3M0MwOEYwN0IyMDhGQTAzQTc2MQorOjEwMDA1MDAwQjNGNEM4RkUyNEYxODYxN0I5QkRBQjU1Mzc1OUU0QURFQQorOjEwMDA2MDAwOTJFMzEyQkRBNkRGODA3OEMwRTlBMUIxRjNGMjFFOTIzRgorOjEwMDA3MDAwNzA3QTYxMzFBOTcyQjhFMTFBQUIwMjdFRDA3QkQzODE2QworOjEwMDA4MDAwRDcxOEU2NEI3Rjc3RDY4NkMyNjRGNUVENkZENTkyQ0U1MgorOjEwMDA5MDAwNEI2RkYxNzE1QkM5RTdCQkFDM0ExNjlGREM1MkEyNjNCMAorOjEwMDBBMDAwQkM3NzZBREREQkM3NTE0RTFCQjk5QzJFNzM2MEJGN0JFQQorOjEwMDBCMDAwNjc2OTM4MkVCRDM3MTZCNEMxN0E2NUVGMkMyN0U2Mjc1RAorOjEwMDBDMDAwNzRDRDdBRTFBREJCQzFBRTk2Mjk3Q0JGRDk0NjhCRkMxRAorOjEwMDBEMDAwNTY1MjVDOUQwRUY1N0I1NUM0MkI1QkE4RkY5MjBFREYzQworOjEwMDBFMDAwN0JFRDBDQkZGMDNDOTBDRDdDNEM0RjFGNjRGOEU2NDM5OQorOjEwMDBGMDAwODE2RjM4MUY1NzA5Rjk2RjE0RjE1MDJCOEVBMkU2QzQ5NworOjEwMDEwMDAwQjI0RTQzRjhGQUMzMTI1NjJEQjU1MzRDMUYzRTZDNjRFMQorOjEwMDExMDAwRjFDQzJEQTJGRjg3MEVFQzA0M0Q2Q0UwNzJENDc1NjEyQQorOjEwMDEyMDAwODMxN0Y1RjVEMDAxOENBN0I1Q0M1QThCRjFBM0FFRENDMworOjEwMDEzMDAwQjMzQURDNkZGNkJFQTdDM0JEOEMzM0M0Mzg2RjI5N0JERQorOjEwMDE0MDAwMTY3MTQ4MkYxRkU3Q0QxMDc3QTdGMkJGQzRDQkYwNTUyQgorOjEwMDE1MDAwNzRDQUI1NzY5RjExQ0Y2Mzk2RjFERENBNjgxQUY2N0YyRgorOjEwMDE2MDAwRDU0NTFCRkE5RDJCRjlGNzQ3QTZGQzQ5ODdFRkI2NDQwNgorOjEwMDE3MDAwQTkxRTUzRkJERUEwRjVDRjAwREM5MjIxRTFDNTBGOUY0NQorOjEwMDE4MDAwM0I5MDBGRkFERDMzRkI4RjU4RUU4QUIyQjc1QjgwRUVGRgorOjEwMDE5MDAwNjk2NTA3MzA4RTlGNzdFODQwNzczNkFEN0Y3OTMxRjExQQorOjEwMDFBMDAwOUJCRUQxRUREN0YyRjk2OTRCMEVEQjA3QjFDNTFGMDkzNAorOjEwMDFCMDAwQzMzRUIwMEY4NjA4Q0U0RjBCOUYzQjU2QURGODkyQURCNQorOjEwMDFDMDAwQjc5ODA0NzA4ODU4QUZEMUJDN0NCRDgzQUYzQjkwOEI4RgorOjEwMDFEMDAwOTc5NEM0RjE2QUQwNDI0RUIwQkYyRDY1QUZCQTgxREVBQworOjEwMDFFMDAwQzI4M0VBNUE5MEVCOUFFN0FFRkYyMkM4MUZCOUQxRTE2OQorOjEwMDFGMDAwQjk5MkY2RTcwM0NGQUZERDU3MTlFQ0ZEMURBQ0JFMDU5NAorOjEwMDIwMDAwMjFDQThGODY5MjAzRjkxQjY2OERCNjJCMjM3QTUzRjI4RgorOjEwMDIxMDAwOTdBRDIxNEFDN0U5QTUyRkU0MDM1RTdCOTVEQTVCMUYwMgorOjEwMDIyMDAwQjRDN0VEOTVFQzI3MkQ5NEU2RDNDMDkwQjRDRTI0RjU1OQorOjEwMDIzMDAwRDdBNUFEQjhEMTMxMEZDNkYzNDdERTgyMDQ3OUEyRkE1MworOjEwMDI0MDAwQkYwRUU4REZGQ0E4RDMwM0ZBOTI3NUU4MTU1RDA1QkI4NQorOjEwMDI1MDAwNDY3MUZCOTIwNDc5REVDQ0U1QTVDMTYwNzZBRjY1MTZFOAorOjEwMDI2MDAwODk2QzU3NDBDRURFNkJBQzAwN0Q3QjUxNjVGQjUwMEUzOAorOjEwMDI3MDAwQkRDREYyM0VBNTc5QTE5N0NGMTc0MkFFN0I3M0RGNzE1QQorOjEwMDI4MDAwODNEQzdENzg5MEVCNDdEOEE2MjRDNjkxOENCMkQ4Q0Q3QworOjEwMDI5MDAwMzAxRTgyM0YxRDkyOUQwOTkwRTRGM0MyMjkwN0MzQTkzNQorOjEwMDJBMDAwOTUxQTdCNkY1MEJCMERFQkQ0RjI3QjEzRkMyOEMwNDEzOQorOjEwMDJCMDAwREM5RjEyRUZENzNCMThERTE1RDdDQkM4MkJGOEUxNzdDMAorOjEwMDJDMDAwQThCRTc3RUQzQUVBQkQxREVEOTM4MTc4N0RGM0ExMDNEOQorOjEwMDJEMDAwQzVCMDA2MzNFNUUwODExQTlFRjc4REZFOThDQUZCMzk1QQorOjEwMDJFMDAwOTVGOEQwM0UyRDM3OUNCODdFMjBDQkI3QkQ2QzVGMTRGRgorOjEwMDJGMDAwNjBCMzk4OUZDMTExRDdBNkM0RUQ4NjlBMTg3RjQ4RTJEMworOjEwMDMwMDAwN0Y5MUIwRjlEQUNDODQzQzJDM0FBRjEzQjAxRkQ1NUVBNAorOjEwMDMxMDAwMTY3Nzk1RTUyNEFCRUNDMDRFMzYxRjUwMjk0QzU4QzdENAorOjEwMDMyMDAwOTVFNUI2QzEwODc5NjE3RDlBRUFDREZCNkMzRDkzQ0UyNworOjEwMDMzMDAwNTMxMDk3NTAxQkZEMzg5RTVDM0U2REY0MUZDQzdCMTkwQgorOjEwMDM0MDAwN0VBQjdDREE4Qjc1MEI0RTkxRTk3OEM0QzFEN0M1Mzg4QQorOjEwMDM1MDAwRUUxN0YzNzI5NkI3MUZFOTVCNkVCNEU1NDNGQjUzQkQyRQorOjEwMDM2MDAwRkRFODY3NTFCQjlFMEY1NzIxNjdDMjRFOEZDOERGQUNCNworOjEwMDM3MDAwMUJFQUMxNEU4MTVDQzM5MkY3RTlCMkVCRDNDMURFMzUxMworOjEwMDM4MDAwNzgxOTNFMjE1MjFDQkRENzNCQjY5RkQxMkRDOUUzNjlEOAorOjEwMDM5MDAwMEZGM0FCMUFDQTQ4QkEyNzEzRjQ5REM1OUI3QTFGQ0UzOAorOjEwMDNBMDAwREU5NzkxMTA4RkRCNjMwRkZEQUI2MzcyRkNERTVERjJCNQorOjEwMDNCMDAwRjk3QThGMUJFQzBCQ0JDNzJBQTc2NkNCNUUxNDhGNjMzMQorOjEwMDNDMDAwOEE3OEE5NThCRjEzRjFEMTUxNzFDQzkyMkVDQ0Q3QjJGMworOjEwMDNEMDAwOEIzQzBBQkU5RTM3MkE4RjY3ODJGOTY3OEVFRDZEOUEzNQorOjEwMDNFMDAwOUZBRjkzMjAwRTZCRTRGMUI3QTFCOUUzQzQ0MUI3MDkwNQorOjEwMDNGMDAwNUM3NkRDMzE3OTdDNUNGNjI4RjcyQkRGMDBFMzQxQUZEQgorOjEwMDQwMDAwQjczODNDNzgzNTIwQkY4NDkyREE5Qjk2MUNBRjFERTA0QworOjEwMDQxMDAwRjhFNTcyRjRGMzg0MEFERkIxNzZERTc0NThGRDRBRjEzMAorOjEwMDQyMDAwM0M4RTgzOTkxRTRDMkQzQkQwOUQ4ODgzMkI1QjI5NkY3RQorOjEwMDQzMDAwRTgzOEU5QUQ2NDA2Qzk0QzJENzdDQjQ3RUNERUIzMTYzRQorOjEwMDQ0MDAwRjkxQUMxQzVFM0UwNjEyMTVGODNBQUY5NjdDN0JDRDQ4QgorOjEwMDQ1MDAwRTUxQTM4MURBOURFQjdDQzcyMzQ0MUZFMTQyRDQ3QTYyQgorOjEwMDQ2MDAwNjZCMkVCRDVGNERBM0RGQjQwQkU4RDNFM0YwOUI4MkJCQQorOjEwMDQ3MDAwODE4RURFQzcwRTYxM0Y1RUQ2RDlGRTk3REUwQjFCMEE2QQorOjEwMDQ4MDAwNjExRUVGRDI0Q0UyOUMzNzcxRjk5MUY1QzkzOUNGRjQ3NgorOjEwMDQ5MDAwNkRBM0ZBRDc5OUVGQzRGRDdFOUQ1RTg2Mzc1RTgxOTI4QgorOjEwMDRBMDAwMDlGMkI0NUUwRjc5OUM5MzcxOEEzMDQ5MzYzNzcyNDJGMworOjEwMDRCMDAwQ0VDMTY4RDY0QzZDRkZENjZEMTlGREY3MDQxM0VDRkE2QgorOjEwMDRDMDAwMkU3ODk1OEJFNzA2NjBCRjFFRDRGQjMxQkZFNjM2NUEwNworOjEwMDREMDAwQkI4M0I2NzNDQzUwQTdBQ0EzRjc0NTRFNjZGNzhGODVBOAorOjEwMDRFMDAwRUQxNkJFODg2QjkxOTNDOUREN0EzRDU4MDQ3NDkyQjZCRgorOjEwMDRGMDAwNjZENEIzQjU4QTFBMDRGRDI3RkU4OUM1RTU3NkI0MjcwQworOjEwMDUwMDAwQ0YxMzJEOERENzNGMDdFQjNGNDhFQjA3RENFMEU3NzFCQQorOjEwMDUxMDAwNzdFMjk5OTIzNENFQ0VGQjFEMjVBNDBFRjRFNTdCNTlFQgorOjEwMDUyMDAwNTYzRjczOTY5M0U5RDk5Qzc4RkQxNTg5RjVDRjcxMzJDMgorOjEwMDUzMDAwRjlBN0NGMTdFMEYzQTdEOUYzNUNGRUJDQUE4OEU1QTkxOQorOjEwMDU0MDAwMDkzRThBN0E2QkUzRjVENUUyNzc4N0Q4Nzc5MzlEN0M2RAorOjEwMDU1MDAwQkQ4MEQzMkRGMEJEOUNDRjc0NDMxQTFCOEYyQUExNzc4OQorOjEwMDU2MDAwOUE4Mjc4QkI5Q0UyNkZDNEY3REFCRTYzMThCRjczRjI1RAorOjEwMDU3MDAwRkQ5MTY5MEU3Q0RGOTE2QjQ3N0NERkYxMDk0MUZDRDk2RAorOjEwMDU4MDAwRTk2MkYxQzhBRTBCNjc2RkZEMkFCREQ3ODY4OTI1MUZDQQorOjEwMDU5MDAwRENDMTY1NDgxQjdBMEFFMzZGRTVGOTdDM0YxQkQ3NTczRQorOjEwMDVBMDAwQjE2RkVCNDg2Q0JGNjU1RDU1RUNGM0U5NzRGMjNDMEM0MAorOjEwMDVCMDAwNUVERjAyNUUxRjkxNzBCQkU4OTdDMDM5RUQ3QzlGNEVGNQorOjEwMDVDMDAwQjlFOERGNDA3NDA3REE5NTgxMjhGNkFCRDJDM0Q2ODM0OQorOjEwMDVEMDAwQkJCMkJFODFGRUY1MDMxNzlBQkQ4OTcxQzFBRUU5QzdGMgorOjEwMDVFMDAwRDlCRUZEN0M0QTc3NDk5QzJFOERFM0IxRjI2MURCQTYzMgorOjEwMDVGMDAwMDNDMDBGNERDMThDRURBQUU4OEIxOTA1QjRGRjhCNEVEQgorOjEwMDYwMDAwQThGRTM0RThCRkU0NjcyQ0M5RTc3OUQ0MUNFN0E2QzI4QQorOjEwMDYxMDAwRjVCRjU0NjIzRjgwRkE2RDE5MTc4QjgwRkUyMzUzRkU5RAorOjEwMDYyMDAwNTUwNTNDNUExRTdENDMwNTlDNUVBOUIxQkNERDg1MTI3MworOjEwMDYzMDAwRkU2ODg3RjMzQTgwOUVCRkRBMjIzNkRBQUY5RUYzRUY4OAorOjEwMDY0MDAwQTkzMDdGNUMzMTFDQzE3RTRGMUJFRUMzQkM4OUJDMDE0RAorOjEwMDY1MDAwMTZERjVEMzA1MzQ5ODVFQjc3NjQ0MjFFODY4RkVENzM1QworOjEwMDY2MDAwMkRGN0VGQUVDOTg2N0E4N0Y4QkVFNUQ4Rjk0OTQwRDdBRAorOjEwMDY3MDAwNjg1QzZGQzUyOTAxNUYxNUY2N0IwNEU3RTdCM0I4RDI2NAorOjEwMDY4MDAwRTVFMkU5NEFFRUQ3MDhCRjQwOEMzRkU1MDNFRUUzNkFCNgorOjEwMDY5MDAwMUZCRURCMDlGMzYzMTVFNzZCNjFCRThERjkwN0QzMEI1MgorOjEwMDZBMDAwRDdBMDdGRjA4OUVFODE3Q0RGMDczQzVGNzdBMjdGNDA5NworOjEwMDZCMDAwREY4MzdGNTAwOUZFNDEyNkM0RTVGQUYyMzZCODQ2RjdEQgorOjEwMDZDMDAwNDdDODUzRTFEMEM3NUI0M0I0RkMxMUZCRUI3OTgwNkJBNworOjEwMDZEMDAwOEY1RTc4MkEwRkVDQjJDODBCMTdCODVFOTQ3NzY5NTUxNQorOjEwMDZFMDAwQ0Y4M0JEMTY3OTA4MDJFNzNCMDRDRThGMzUxM0Q4Q0ZGMAorOjEwMDZGMDAwNUYzOTZDQjNFMDdDMDc5N0FCNEE4M0U5NTVGQjVGMDkzMAorOjEwMDcwMDAwQUU3Mzc1QkRGRjVFNkYwMUZEQkVGMzQ1MTY4NzlFMUE4MQorOjEwMDcxMDAwRUI1NzEzNzE3RTM5RTc3N0U3Mjc3RDc4RkU4ODkwRkZFNgorOjEwMDcyMDAwQ0VGN0Q5MzkyMjFERjk3QzdGMEFDN0Y5OEIwOTJCQkY3NworOjEwMDczMDAwMTg3MEJFRkJGMjcxRkVFQzM0NjY3NzRDOEVFMzE3RjM1MworOjEwMDc0MDAwN0M1NEYxQkU5RkRCNzExOURGQ0JFRjJGMTdERjEzOEVDNworOjEwMDc1MDAwREZFM0I4RDgyQUI3NURCQjBBNzEzREE1RENFMzY0RkJEMworOjEwMDc2MDAwQ0QwNjYyQ0ZERTQ1QUY1MzYyQTEyN0Y2MDBCRjJGQTZBQworOjEwMDc3MDAwRkJFMTMzMDdGN0JGQzZDREU3OTRGMEZFNTQxMkQ3OUJEOQorOjEwMDc4MDAwMjg3RDk0OTVERjhGN0E1MjQ5RjUwNEY2OTM4RkQyMDcyRQorOjEwMDc5MDAwMTlGRkU3Qzc4RTQxRjkwNTg0RTk1NUY1NzA4OEFEOEZEQgorOjEwMDdBMDAwOEQ4M0Y3MkI4REZFM0NDNEZCQzM4QkRGNjc3RUMzRDhFNAorOjEwMDdCMDAwNzhERjk0RjI5N0VBNjYzQUM2RjY0RkQzQUM3ODZDODE0QworOjEwMDdDMDAwODg3NzBDMzdCMzc4RTQ3MDMzQzYyMzE3MEM3MTdCNzlDNAorOjEwMDdEMDAwODFEOTRCMzE5RTBGNzBCOTEzRjY1Q0U4NjdFNzg1QjM5QQorOjEwMDdFMDAwNkEyOEMxNkU4RUM4RjczMERCODcyQkJFRUZDQzY3NzhFNgorOjEwMDdGMDAwRkYyNzVBMUZFQTczRTdEMERDRjRDNDM4OTU4Q0Y3M0IyNworOjEwMDgwMDAwMDFFRjk3NDAxQzg5RTJGRDM5QTBCRjA0RUQ1RTI3RTBBRgorOjEwMDgxMDAwRkQwNEJEQTU3OEZGOUFCNDA0RkNFNjFFNUE1REVGODE4NQorOjEwMDgyMDAwRjVFMDA5RTYxMzA4M0Y3NjMxRjhCMUQ5MDlGMTUyQTc4RQorOjEwMDgzMDAwRDU4RjREMjVERjY3RjlGQzFERTc2NzFGOUI3Rjg2RkI4MgorOjEwMDg0MDAwOEUyNUYyNTNFM0I4RDYwMTc4NzI0RTdDRkY3QTY3MkE4MAorOjEwMDg1MDAwQkU3RTYyRERDNzJDRjJCNTNCODcyN0U2Mzc1MTVDNUI3NQorOjEwMDg2MDAwOUYzNjM5NzVCOTRBNEU0N0FBRjcwRjVDRDAxMUQ3MDJBNworOjEwMDg3MDAwMUU5RjNBODc1REFGQTZEN0VFOEZGQkYyMTI3MTJEMzEyNgorOjEwMDg4MDAwMTgxRUVCN0NFQzM3QjgzRkI4MzM4QkUyRDk5MjQ0M0U2QworOjEwMDg5MDAwNkYxQjA3N0ZCMEZCMDU1RTNCNUY4N0IxRTIwOTIyQ0Q4RQorOjEwMDhBMDAwRkZFRDJFMjYwNzQ3MjkxRUMxRjg0OERBQUY5MDhGMURBRAorOjEwMDhCMDAwOUY5Q0M1RjY2NTdDMjJGMDg4OEM0Mzg4ODQzRjA0QkRFQworOjEwMDhDMDAwRURGOThDRUY0NzYyNjdCRUVCODc3RDczMjdDNDNFNTMxQgorOjEwMDhEMDAwMkIyRTkxRjkzNTNFMUVFOTQzN0IyRUNCNzk4N0NCQzQ3NQorOjEwMDhFMDAwQkNBQjM4M0VEMTExNkYzQzYwNjc3ODQzRTAxMzhBM0I2NAorOjEwMDhGMDAwOEVBRDA1REMzMTQwNDgxQTg5RDMyRjcwOEFDMDFENjI0NQorOjEwMDkwMDAwN0U2QzFGRTZFNzJENzlGOEJDMjBFMTk0MTFGQkZGMjlFRQorOjEwMDkxMDAwNzE4QUE4NDdDNjI5NzIzRDlEM0NBRkEzOURFMjk2NkRBMgorOjEwMDkyMDAwODg2MzhFRTMzQzNCNTFGQzIyRTM5NUYxNzA0OUU1NEMzMgorOjEwMDkzMDAwODY0QkRBRkRFQzNDMjY4MTY3NjQ1QzUyRTdFQkMyM0NGNworOjEwMDk0MDAwNDA4MTVGMjY4QTUzMDRDRTkxRjE4QTRDNTcyN0UwOTc2NQorOjEwMDk1MDAwOTIzODdFOTFGMThBMkM0Nzg1Rjk2NDJEQzRGNzA1OEU3MworOjEwMDk2MDAwNDlBNTlGNTBFRTBFNzcxQ0RGQTQyQTQ3RUQzM0UyOUU4NworOjEwMDk3MDAwOTRGNTBDQzUyRTE3RjdGQzFBRUM0QTZBRENDM0M2QjkwRAorOjEwMDk4MDAwRjIyMkMxM0NBMDU0NzhFNDAxN0YzRjNCOEY0ODlBMzc2NAorOjEwMDk5MDAwOEVFNDlGNzkxM0Y3NjkwRUU4M0UxNTcxMTFCNTkzNDYwMQorOjEwMDlBMDAwNkEzQzI0RjQ2RUE0QkY2MDA3NEFFMkYzNTI0QUJFMENDQworOjEwMDlCMDAwNzBGREM4MUY3QkZENjVBMjc4NDlDQzE3QjNEM0Q4N0NFNgorOjEwMDlDMDAwOTA2QTFEMzIzRDlERTFBQTA3MEI5OTdGMkNCRjhGRTdFRQorOjEwMDlEMDAwOTU1ODcxMTNDOTk5ODVGMkZENTVCRTJGMzkxNThFMjI5MAorOjEwMDlFMDAwMjRFNjY2NzFBOTMwQjY4M0Y5RTQ4MEMzNDAzN0U3RjNBMworOjEwMDlGMDAwQkMwMjRBNkE3MDI2OTkwOTcxOEQyMEJDODc3NUFDNzk1MgorOjEwMEEwMDAwNEEyNDRDNDk1QjAxQ0ZFOUI4NTZENUIwNzVBMDMzQjM0MQorOjEwMEExMDAwRDgzOTEzQTdBQjFDMzhBRUE3M0U2NDc5ODc1RDJFMTY3NAorOjEwMEEyMDAwNTczRDdENUQ5QTdGM0YyNUUxNDNBODk3Q0VCNzY3RDJCQQorOjEwMEEzMDAwRkE0QTYxNUNBNzhCN0U2NkIzN0UyRUNCODg2RUMyNzU0OAorOjEwMEE0MDAwRjBFQkFGQjU4NTBCNDZEQjg3MDdEMzM5MUREOTA2QUU3MgorOjEwMEE1MDAwQTczNUYwRjgxNEFDMDdFNkNEMURCRDFGQTAzNUJEMDBDRAorOjEwMEE2MDAwRkIwREY5RUY3OUI0REM0RTVCREY3NzBCRTlBMzM0MUJBOAorOjEwMEE3MDAwNUIzRjk1RjlGQURCNzQ0NUU0RUI4NDFEMDk3QzY4OUNDNworOjEwMEE4MDAwRTkzNEQzQTgzQ0E2N0Q4RUU1MDM3NEQ2Mzg3MDlEMjk0MQorOjEwMEE5MDAwMEQ5NkNDNjlCRDBGMTUxN0JBOTJDOTg3RTg5N0ZDRkM3MworOjEwMEFBMDAwNjFERUVGMzNEMzYzNzg3RUM2Q0IzQzhGNzdCM0E2ODQwOQorOjEwMEFCMDAwODFERjY4ODA2MTdFOUEzNDZEREY0M0I0RThEMjc0NzY1QQorOjEwMEFDMDAwNkVDQ0NCQ0ZCRDgyNzFBMTk3QjIzODFGNEMwNUYzMTUwOAorOjEwMEFEMDAwNEVGQjk4M0U4NTNENDYwNEY2NTVEMkVGRURBQkM3RDBCMAorOjEwMEFFMDAwRTdCRUFBMjVDNTFDOEYxMTA1RDZDOUUwOEZDMkQxRkM2RgorOjEwMEFGMDAwNUU1NUE3NjJCRjU3Nzk3NkREMDVGM0M2OTlCQTU3MzNCRAorOjEwMEIwMDAwRTBEQ0M3RTU0MzM2MDI3QUI3Q0E1MzdFMDczQ0VGNzI5MgorOjEwMEIxMDAwMzEzOTA2M0UwM0ZFNUY1NUYzRjlBRkMwRjNDNjQ2RUIyRAorOjEwMEIyMDAwNzgxQzRDMkY0NEZFNTY2ODZDM0M2MEZDRjJFNjhFNkVERQorOjEwMEIzMDAwOTc3ODQ4NDg5RjkyQzBGRkMwMEJERjU0MTJENjIxNDREQgorOjEwMEI0MDAwN0U4QTMzNDVCRTVFQUE3RTJCODk3NjU3OERDNzE5QTc0QworOjEwMEI1MDAwOTZFRERCMERGQjVCODJBNUVDRkNDQjA2MUYwOUMzN0E4RgorOjEwMEI2MDAwNkU4MzlGNDQwQkI4N0M2MURFNENGNzRDQjZBRjg3RUJDRAorOjEwMEI3MDAwNTc1NkQ5QkVENjQyODg0QjBFNjk2QzlENTk5QTVGMkE0QQorOjEwMEI4MDAwRTg1OEU1Njc0MzlDOUM4RENGRTk3OTJBRTI5MTBBQzgzMQorOjEwMEI5MDAwNkJDNEYzMkIxOTdFNkYzMEQ3MjJGRTZGN0NCODdCNTc2NgorOjEwMEJBMDAwMjFCQzU3RjM2QkFCN0M2QzFERDQ5MjQ3NzU4OEM1RERCNworOjEwMEJCMDAwNTY0ODcyRUU5MkUyRkExNTdFMjkwRjkwRTdFRjc1MTYwRAorOjEwMEJDMDAwM0ZFMTAxRjk3OTMwOUJDQkNGNUMwNUY1RTgxNUM1RjcxRQorOjEwMEJEMDAwNzA2MUMyM0M3MzYzQkFGMENCODhDRjlFMjAxRjIzRjJCMgorOjEwMEJFMDAwQzBDNzU3RTY3QjJBN0VDQTdDOTJFNTQyRTZGNzY5OTc0MgorOjEwMEJGMDAwQzRBRjE0RkM0RkM1RUY4QUIyQUFCRjJCN0YzRkIwM0JGNgorOjEwMEMwMDAwRUMyMEI3NURGNjNGRTZCMzc4MTVCNUMxMDlGNjQ0RTZDQQorOjEwMEMxMDAwREIwNzg2Q0YwNTc2RTJDQzEwOEI4N0JEMzREREY3NDU0OAorOjEwMEMyMDAwM0M4RjhBRUEzMTlFOUZDOUY1MjEzRTBFNTQxRkRDODkxNAorOjEwMEMzMDAwRkFGQ0ZBMENEMDY3MkE2Nzc2QThBN0QxNTRDQzM0RDAzNgorOjEwMEM0MDAwQkY4MzBGREM4NUZEMDYzRDc1QzdGNTQ4RTZGRjI4RkQyRgorOjEwMEM1MDAwQTNGRkQzMDRCRDQ1QTNGNTQ4Q0UwRkZCNUJGNUVGNEVENAorOjEwMEM2MDAwQjBFNzk0NkY3M0QzN0Q3ODE1RjZCNDkxNzhCRTk4QjhEOQorOjEwMEM3MDAwMEY1NUFDOTM3NzE1QjQwNDYxRkY3OEMzODA4REMwN0NBOQorOjEwMEM4MDAwRDMzRUY0OENCNjBFRjZBNUQ2MjkzOEFEMTlBNDBGRTlEQgorOjEwMEM5MDAwMzU1QTU5RkVDMzU1OEZERjRCMjAzRkZERTFFOUM0MEZBNAorOjEwMENBMDAwRjZDQTY4NjVGOTEwRjQzREU2NDMwOEJDMkVDRTREQTRBMworOjEwMENCMDAwRUY0REU2ODdCMzc2RUI3OUJCMkVCRjM1OUY2N0U1RTA1NgorOjEwMENDMDAwMjI1QzRGRTgyRUU2RjE0OEVFMzc4ODNDNTYyMkVENjM3MQorOjEwMENEMDAwNjk4MTI3QjlGMUZEMUVBRDE3MjJFODNGQjRBN0Q4RDcyNworOjEwMENFMDAwMjJBRUIyMUYyMDVGN0I4RUZFRUMyQkUwMDc1NENFRDRFOQorOjEwMENGMDAwM0QwMDI5MkE4N0EyNEVBOEVGQkIyNTQ3RUIxMDVGRDUwMAorOjEwMEQwMDAwMjkxRTU4NjdFQkY5Qjg2RDA3QTE3MkI0QjJFNDlEQTQyRgorOjEwMEQxMDAwQjhFNEYwMDczRkY0NDMzRjBFREI3N0ZCQjNDMTNFNkMxMgorOjEwMEQyMDAwNjdGMzU2REFENTI1RDNENzhEODE3QjQyNzU1NTc1MDU4NgorOjEwMEQzMDAwQjM1M0U3OEREQzlBQzFFN0Y3QUUzQkY3M0YwOEVCRDkzOQorOjEwMEQ0MDAwODMzQUM2NDNFQjM5M0U2RUQwNzYzN0FEQTNFM0Q5QkRDNworOjEwMEQ1MDAwNTRGMTZGQTNDRkJCQUZEOUQzN0MxNEUyQzhFRkVCQzA4MworOjEwMEQ2MDAwNzFEMjdCRTFBOTdDRjAyMzRFM0VFNjZDODJGQTdCM0U5OQorOjEwMEQ3MDAwN0VFQUM3OTgzNzMyQThDRjg3RkU4RUQwN0ZBNUMxREUyNgorOjEwMEQ4MDAwN0ZGOEZDMDlCMDMzMkI4QjU3OTY0MjNCNjkxQUQ5MEQ3QgorOjEwMEQ5MDAwRjI3NEM1NTBEQjlCNzBBRTQxQzM4MDNFMEZFQ0NGQ0FFRQorOjEwMERBMDAwQkE3RENFN0YwMDNFRDUzREVCQkM5MjVFQTcwREY5NkFDMQorOjEwMERCMDAwNjEzQzMzRDI0MzczMzIyOEJENzkyNTA1RjdFNzQwM0JDOAorOjEwMERDMDAwN0VFMjM3OTFBRjdEMDRGOEJBNTI4QTNGNTY3MkI5NjkxNAorOjEwMEREMDAwNUY1QUUwNEE4QzYzOUMxOTJBNzQ2MTdFNDIxRENGNEY5MgorOjEwMERFMDAwNThBQTA2QzEwRjNFRTNCOUQyODU3MUM3M0E5Njk3MjAzQgorOjEwMERGMDAwRjM2QjI1QzdFOTJCRUIwQUE2MjdDM0UzODU3NTdGNDE3MworOjEwMEUwMDAwMUNERTdFOERBMzI5MTlCRjZGRTJGQzRFRkJEMzg2RkQ0RAorOjEwMEUxMDAwRDBERkI0MUYzOTNEMDBBRkQzNTJFNDVCNjY2N0YwN0M4RQorOjEwMEUyMDAwNTJFRkM0RTIyMDAyQ0Y1MEJFM0FFRDA5NzExMDhBRjdBQQorOjEwMEUzMDAwNkZDRTQ4ODhBRjVDNkVGQkY1MTlDQzBFMENBQUExMkZDMworOjEwMEU0MDAwMDFGRjJCNzgxQzY0QkNGODQzRjkzOEVCNkU1NDhFOTA4QworOjEwMEU1MDAwNEYyQjc5N0M2MkE1ODg0RkQ0MTc0Q0I3QzQyNzg4RTlGQgorOjEwMEU2MDAwMDUzQjdCMDZENkREQzBDRkQ2NTY2QzAxM0E3QTNGNjA5MworOjEwMEU3MDAwRUI2RUE5RTQ3N0U1Q0NBNzZFM0Q5QTYwRUY3QUVEMjY5QworOjEwMEU4MDAwRUU5N0VDQkU4NkY5NDlGRjU1RjIzQjIyNjc3NUNGQjY2NworOjEwMEU5MDAwOTZEMkU3MEY5NUFDOUMwQ0Y2MkY0MThFNUI2MTNDMkVGMQorOjEwMEVBMDAwNTc4RTY1RkVCNTJGMkQ3MjExMjMyRUNGNDI4RTQ3Q0I2NAorOjEwMEVCMDAwQTU4MkZFQTg5MEVGNTRFMzAxRTVDMDFGNUQzOThFM0Y4NworOjEwMEVDMDAwN0E2NkU5RDU0OUU1M0Y1RUNGQjkzMUY1QTA4NkNCRDU0NQorOjEwMEVEMDAwNEQ1Q0FFMkE4OUU5QzE3M0E5RjJERTQ0QkZGNTU3REM0NworOjEwMEVFMDAwMUU4RkM4ODlBQjBGRTM0MUUxMjc5REI4M0VERTc5NDFGMworOjEwMEVGMDAwQzdGM0NEM0I5RkQ4RjgxMzk4MzdCQTg3MTY3OURFQzM2RQorOjEwMEYwMDAwNzlCQ0NBQjM4QUQyNzUwREY4MEYyNTM4M0VERDVBNDIzNgorOjEwMEYxMDAwQkNGQjhEMENCMTFFNkVDRERGRkQzN0NGMUZCMkFCRDg0MQorOjEwMEYyMDAwM0M2QjU0NTE3RUNGRTFGM0M0RTcwQTlFNDg4N0Y5N0NCRAorOjEwMEYzMDAwMEVDRkEzOUZEREExMjc5RDk3Mzk4NDIwMjUzOUFGRDhGNworOjEwMEY0MDAwMDBGQTk3MUNCNDk2MzM0NkY2OTFCN0Q5NjBEREVGNzM3QgorOjEwMEY1MDAwNEY0QkVGRjlGRTY3MzlERkIxMzcyM0Y5QkU2NzMxREY1OQorOjEwMEY2MDAwM0EyRjhDMUQ0N0ZDMzlGN0FCOUZFNkY5QkNGRkM2Q0Y4MworOjEwMEY3MDAwRUQ2QkUzRTdEQzNFMDNGQjU2RTlGNTIwRUM1QkE1Q0YyOAorOjEwMEY4MDAwOUY4NzdEQUJGNEZFMTBERkI3NEFGMjI3NzYyRUJCMzg4MQorOjEwMEY5MDAwODc0OUU3N0M2OENEOEQ1OEQ2MDdDNTNFRURGNjUyOTU1QQorOjEwMEZBMDAwOUQ1M0UxRDVGMTFDNTQ4QTlCNkM5ODdGQzJGMUEyMkQxMAorOjEwMEZCMDAwMjNFMEQ0RTlCOEVBRkY0MTMwRkZFNEVCRUZGN0ExM0NDRQorOjEwMEZDMDAwRUNFMkYzQUM4QzYzM0EyNDM5MTE1NzNEQ0U0NzBERTI4NQorOjEwMEZEMDAwNTg5REQzNDM0REMxMTIzRTYwMjAzN0YzQTZFRTdCMjhDNworOjEwMEZFMDAwMDE0RkZGMkYyRTE3MkREQzZGMEI1RjIwOTEyNzk1Nzg3NworOjEwMEZGMDAwRjk5NzJFOTBBNzFFNDIxQzQ1QzIyQUUwMEVGODhCOEE1NAorOjEwMTAwMDAwNzBGRDAwNDExQzU3NUZGQTAwRkE1RjgwMDMwMTk3RTExMQorOjEwMTAxMDAwRjk2MDg1MTAxRjdEMUVGMTVDRkREMEZDM0JGOEZBQzEyNAorOjEwMTAyMDAwMjgxQzM3QzIzNzE1RjlDNEYwNzlFOTJCMTgyN0E5MUZGNgorOjEwMTAzMDAwNDgyRTZGRjFCQ0E1QTZFRTk5MDlGQjBDMUE4N0M0M0E5RAorOjEwMTA0MDAwMDVBNTY0NEE3QzVGQjkyRUM5OTU1QzRGNTZBOTgyRTMxOQorOjEwMTA1MDAwQjJBQzk4RURGQjEyRUIxQzYyM0M3NzM0Rjc2MTdFNDczMworOjEwMTA2MDAwNkZBOUMzMDdGMTA1MTkyN0NBMzg1RjJGNjVGQkMyQjQwMgorOjEwMTA3MDAwMUJEOUZFRDRGQTBCMkNDRjEwMDU2NjRBRkNGQzM0OUQxQworOjEwMTA4MDAwRTdFREI2N0I0MjdFMzhBRkE0QzEyRkUxREUxODlCRjdCNworOjEwMTA5MDAwMkE4QkFENzg1RUM2RkJGQTgwMkVFMUZEMzA5QjBGQjc0MAorOjEwMTBBMDAwQjNGMTNDRkQyMTQxM0ZFQUM5QkQyQzNFNzBEOEVCNjM1MgorOjEwMTBCMDAwRjI0NzIyRThGNzJDRjREQUFFN0JDODA3RUI1MjZDQkY5QworOjEwMTBDMDAwNjVGOTEwM0I2RkIzN0NDMDg3RkJBNzE3MEU5MkU4NTVGQworOjEwMTBEMDAwQjMyMTNFNEE1QUYxM0MyMDg5N0YwQjA5NUI3NzU4RThERgorOjEwMTBFMDAwRjU3NTRGODZGOEEzNDY3NkMyMzkzMDUzOUM2QjRERDBDOAorOjEwMTBGMDAwMDNERERCOENGQjZCQUE5RDBBOUU5MzRERjhGQTk4RTAwQQorOjEwMTEwMDAwQUY5RTdFNkEwN0E4QzA0MjlFQ0YyNzdFMTc2MkFBRjNEMQorOjEwMTExMDAwMDBDQTgxM0U0RTVDNTZBQzdGRTk1Q0VFQzQ3QTU2MTUzRgorOjEwMTEyMDAwQUZCRjZBOTBFNUIxQzk3MjkwRTUzQ0Y3MjY5Q0EzQkNCRAorOjEwMTEzMDAwNjhDOEMwNzUzMTc5RENFNTcxNUQ2NEM0REU3RDA0RTJBOAorOjEwMTE0MDAwRjYxN0QyRkREQjYxOUM5RDZDOUNDNTM4RUE2QTg3MEE2NAorOjEwMTE1MDAwRkIzNTg4QzZDNjRCQUM3MzU1Q0FCRjBGMjFFRDgzOTNEMAorOjEwMTE2MDAwRTkxMkU3MUY3Q0M1OTBGNjg1NzExQ0JGODg1M0Q3OUE5QQorOjEwMTE3MDAwNzZDMEIyQkUyMkFGMDMxQ0U2RjkwODNGRDFEODM5QTIyRgorOjEwMTE4MDAwODcwN0M3NUVBRjNBQ0NEN0FCODg2NzgyRTcwRUYyRjMyQQorOjEwMTE5MDAwMDIyQUNBNDgzQUUwOUM4QTQxQzJFNEVCNjE1QjI0NzFBRQorOjEwMTFBMDAwN0Q0QkRFMjdFRTFFNUM1RDhGRTdBQjc5M0M3ODlFNDI3RgorOjEwMTFCMDAwMDVBMUQ3NTIzQ0U3MTVGMzFCNEQ3MkMwQjIxRTY3NzJGMgorOjEwMTFDMDAwN0JBRkYzQjg5OEFFQjA3RTA5M0VDOUY0REQzNjY0RjU2NgorOjEwMTFEMDAwODdCRTE4QjZFRTZGQjhGNTVFRUI3RThDNUI5QUYzMkM4QgorOjEwMTFFMDAwRUY5NzZDMkNCMkJDQUZGNTVENkJCOUZGQkNENzdBQ0U3NAorOjEwMTFGMDAwQ0Y3RjBCNTlDRkY5NTlENTU0MkQ5RDYzNjczREU3RTc1NAorOjEwMTIwMDAwQTYzQUVCMzkzRjBERTZBRDkyRkU5QUQ2NzUwN0E1OEY0QgorOjEwMTIxMDAwQUY1RkJDNTUzNDU2OUMzNzYxN0ZFMTk4RTdGRUEwMUY1NQorOjEwMTIyMDAwOTg2NDVGOEJCQzNGRjFBQzIxRTI4RDU2M0RFODBFNTdEMAorOjEwMTIzMDAwQjE3MzcxMDY3QzdCQUJFOEZENTFFMkQ3RDBDMUU1RTcyNQorOjEwMTI0MDAwRkY4ODdEN0JCNTVFQjY5RTMzN0FCRjFEQTM0QkQ4NDEyOAorOjEwMTI1MDAwNzlERjhGMzhCN0FGNjJCMDBGRTVBMDUyM0U5RkNGOUJDQQorOjEwMTI2MDAwRkM3Q0JFNTcwQzhFMTdDNDM5MTcyOUNFQjMxODM1N0ZCNgorOjEwMTI3MDAwNEZCNDdGN0MxRDZGRENGRUYxNzZDQjQ5REYzMTM4RTc2MAorOjEwMTI4MDAwMjM1NUZGMjZEQUFGOTFCQzJEMzgzNzkwRjJBMzBGMUVGRAorOjEwMTI5MDAwRTVCMkY3MDZENUI3OUQ1OUM1Nzg5RTg1RERCOTI4NjZCNAorOjEwMTJBMDAwNEM4RUM3M0I4OTc5RkRDNEY2NkRGMzM4M0UzMTU3OERCRQorOjEwMTJCMDAwNTM5RUU5QkREREU5NjM3MjYxMzI3Q0I0NTMzMTIzNzAyMgorOjEwMTJDMDAwQ0U1REZDM0MwQjgyNzY0MEU3RjNBOTdDQUU0NURBNEU1RQorOjEwMTJEMDAwNjI5NjUwMTY4NTE3OTEyOEUyOEQ0MjY3NjQwN0FDODNBOQorOjEwMTJFMDAwRTZCMjdEQTMyREQ3RDg3MEZFNjkzOTY3RUU4NkZDOTNGMAorOjEwMTJGMDAwRDY2QjM0RENCNzU4QUIxQTU4NUVDRjY3RjM1MzAwRDZDMQorOjEwMTMwMDAwQTAyMDNGRTJBNEQ5NjQzOThGQzNCQkREMDM3QUEyRkZEQQorOjEwMTMxMDAwOThCRDRGRDU5RjhFNUNCNjNFMkMzRjJGNzIzMTNDRDQ4QQorOjEwMTMyMDAwQTUwNUYzNUMyODFGQTY5N0FENDc0NEYwREMzMjkxNkYwQQorOjEwMTMzMDAwOUIyQUNGOTYwMjQ3MEZEQTZEMjJGMDAxMUJCRkZCNjE5QgorOjEwMTM0MDAwM0QyNTg5RkVGQTVENENDRjAyMjU0QUM0MEU3OUEzMzdBQworOjEwMTM1MDAwOTM4ODdEMENCRkIyQzM2QjRCMUFDRkM4NzVGMUI4RTg0OAorOjEwMTM2MDAwQzU0Qjc4MUU5RDJFQ0VDN0NCNjNFN0UzNzU0OUU3NEU4QworOjEwMTM3MDAwRTZGMjdFMUU3MDM5OTkxQzE0M0NDNUY2QTM0QUU3OTQyOAorOjEwMTM4MDAwRDdGQjM2OTA0NDNDNUJDRUU3MTkzREY2MEVDNjk5NEUyRQorOjEwMTM5MDAwMEY4QzhEQzNDNUZBRDMyRUJFNEZCOUZBODIyRDk4OEMwRgorOjEwMTNBMDAwRkVERkJCMzQ5NjE3NkNEODkzRjY2RjNEQTdCNzYzODYwNAorOjEwMTNCMDAwRkZCNTIwOTU4Mzk2N0ZCNkUxRjlEMjAxNkZDQjM0REM3RgorOjEwMTNDMDAwQzdFREZBMDdDMkUyNUQ4Q0ZFN0FBRUE3MDE2RjY0MDczMworOjEwMTNEMDAwQTFFMzE3ODhCRUYxMjhGQzNFODc1RUU2QzBGNUU3RDM5RgorOjEwMTNFMDAwRDc1MDdDNDI2NTY4NTc4Q0UyQzU4Mjc4RkY1QzdDQkUzMgorOjEwMTNGMDAwMDlFQzNENUE1NzU0Q0FDRUNEODc3OENGOTIwMTk2NDcxMworOjEwMTQwMDAwQkVCQzZDMUYzRjc3QTUxRkY3MjVDQUJGMEY1MjVFMTdFMgorOjEwMTQxMDAwMzI2MTVFNUVERTE4REQ4MUY4QzdFRkFCQzJERjBCMjEwMworOjEwMTQyMDAwRkU2RDZDQkQ1MERFM0Y2OTIwRUVFQTE4NjI3MkRGRjE5RQorOjEwMTQzMDAwNTM3RjE3RkVGRTg2NTdFMDQ2QjNCMTc2NEFGQzdDQUY3OQorOjEwMTQ0MDAwQ0E3MzQ3NzdDMjEyOEM3Q0JFOTc3QzhFOTBGMENCNzRBNworOjEwMTQ1MDAwMDk1NzBBN0ZBQzgxNDQ4RTY5Q0FFODM4NzMyQTdGRUM0OQorOjEwMTQ2MDAwOUY1QzFDOEY1QzQzRkQzMTNBRkVCNzM5NThGRTZDRTAzRgorOjEwMTQ3MDAwM0VBNTBDOUNDNkI0RkI5NDVDQjA1RjJEN0M5QzVFQUIxRgorOjEwMTQ4MDAwMEM2MTVFNDA0QjhBRkQ3NDdGRTQ3MkZGNUE2NTE0Rjc2RAorOjEwMTQ5MDAwMjk3NTE0ODRCQ0ZFMzFDQUU3QkE1NDJDQUY1RjY0RTdFNworOjEwMTRBMDAwNzhFODRFOTZENzMyNzJFNTc5NUM0MkFFMEJERDBFNzY2NworOjEwMTRCMDAwQUVBMTlCRjlEQjBCMkYzRDlEMzdENkZDNTkxRTA4MTFDMQorOjEwMTRDMDAwRTgwRkI1MkY0OUYzNjVGNjg5RjZBM0VDM0MwQUJERjVBNAorOjEwMTREMDAwOUQ5QTY0RkEyQ0Y0NzBCRDFFRkM4OTBCRjYxRDJBQ0Q3MgorOjEwMTRFMDAwOTEzNEI0MDMxMzNGN0Y3MjhFRkFFOUVEQ0Q5RjBDRjM3NAorOjEwMTRGMDAwMTk2OEZGQTRGRDVGN0NBMDFGM0I0MkQ2REY3NTEyRDdBMQorOjEwMTUwMDAwOTM0NkM4ODlGQ0Y3MUVDRDAwN0ZGMzc3RTlBMUMzNjAzRAorOjEwMTUxMDAwRjcyMERFMERGQjA1M0I2MkNGMzhEMTlFNEE3Qzk3RUI2RQorOjEwMTUyMDAwQjlDRENEQzY1M0Y3QjFGN0U0MzdBNjZGNjU0MjlDRTQ1OQorOjEwMTUzMDAwMDYzNzFCMTdCQkQzRUM4MUZBNjdEQUNERTM0MERGODNCNAorOjEwMTU0MDAwOEI5MkFGNDNCQUI0NDUyN0ExREM3NTQ2RjAxNDk0RUJGNworOjEwMTU1MDAwODhFREM3RjhGMTI3NjlFNjRCRjBCQzU0MzM0RkMzNzVFQgorOjEwMTU2MDAwOEZERDdDOTlEOUU5MUFDRjdCQzVGMTdEMENBOUM2MTkwRAorOjEwMTU3MDAwMTYyRURFMkI0RUU0RDdBN0UzQjNERDE5RUM4N0Y2RTk5MAorOjEwMTU4MDAwM0MxODMyMkU3MzlDRERGNDVBMDc3MzBCRkRCRUJGMzIzQworOjEwMTU5MDAwRjk3QTdCMEI5NzI3QUE2Nzk4OUYyNUY2QjkwNEJDQzRGNAorOjEwMTVBMDAwNEMzNjdGODlGMjc0RkNDRjAzNUQwRkVBRTEyMEVDRDc2MworOjEwMTVCMDAwM0EzRENENDZGNjI3RDgzOTcxMkU0MTRCOENGOTg1RTc1NworOjEwMTVDMDAwRUY1MUY2MzNCRjkwRTBGRDRGRUYyQ0Q4MEZFQkJCMzc1OAorOjEwMTVEMDAwQ0ZFMDdBQ0NGNzU5REM3RThGNzVERkIzNjhGN0NBNEM2MQorOjEwMTVFMDAwNjU0MkZBRjlDRDRDMjYwNzc3NjczQUYwQkEyRDkzRDFDOAorOjEwMTVGMDAwM0I2MUZEQ0M2MUY1MDgzREQ1MzU3NjVERUU2MUVEOUYzMworOjEwMTYwMDAwRTFGNTdGQ0NFRkE5MUVFNkI4OTkxRUY2QkIyRTZGN0NFNAorOjEwMTYxMDAwN0VCOEFBRThEM0NCODdEMDA3REQ2RkNEMzNGRDE2RDdEMAorOjEwMTYyMDAwMDc2MUFGMjg5REQ3Qjg1MThFOUE0M0U5OTc0N0U3OTQ1MQorOjEwMTYzMDAwRjJDRjQwOEVDNTdFMDMzNTQzQjFDNEMzMDNEQzdFREVFQQorOjEwMTY0MDAwRTQxNkI4QzhBQzc0MzNGRDVEMDBENzMxRjQ3NzkxOUJENAorOjEwMTY1MDAwRTk2RjhEREJBQUJGQjU2RUE2QkY4QkRENEM3Rjk3Qjg1NworOjEwMTY2MDAwM0Y4NUZFOUUwNUZEODFGQzNDMUVDNzI3QTdBQzc2ODcwMworOjEwMTY3MDAwRTJFMjU1RDA3RUJEQTZGMDdEREJFNDBGNEE4MkZGNTE0OQorOjEwMTY4MDAwM0YxMDIyMjY5QjJDOUY0OEM0MEQxNEJGOUFCODVGRTNERAorOjEwMTY5MDAwMzU2QjdEM0Q3Q0RFQTI3NkVDNEI1MDZGMEZEN0RGMURBNgorOjEwMTZBMDAwQkY2NUZDMDMzRTNFOTM0NDJGMDUxRjU1Qzc1QTJGRTRFOAorOjEwMTZCMDAwQzVBNzlBRTcwMjZFQjZCRkJEQ0FDMUY2NTM5MDEzQjQ3MAorOjEwMTZDMDAwRkQ1OTk2RkU2QzA2N0U4REY0Mjc0QzNEQkJFNEZEMDk2QQorOjEwMTZEMDAwMjdFRDRGOUZCNUJFODRGRURDMEJGNThBRkUyQ0JDNzQ1MworOjEwMTZFMDAwNkE0QzdEMEMwODdERjQ0NDU1OThCNzAzNUFGMjc5QTFGMQorOjEwMTZGMDAwRERDREU2Q0RERjY3OTgzQkExN0U1OUJFQzQ3NTE3OTc1NworOjEwMTcwMDAwQUY1NEZCNUVCQUI0NDVCQjgwREZFNTFBQjM4M0M0ODgyRgorOjEwMTcxMDAwRjZBQjA5RkQyQjJGNUUyQkZBMURCMjI1QzZEOTA2OTIxQQorOjEwMTcyMDAwREJDOTQ3REQyMzdBRjcyOENBREY1RUI2NEY4N0NBRjVFMworOjEwMTczMDAwNjNEMENFNkQ5MzNDQUI3MTVGRDc0N0NDNkU5RUZERUIxMworOjEwMTc0MDAwN0Q3NkY4OUQ5NEE2OUMzREY3QzNGNUE0OUJFNUJEQUNDMgorOjEwMTc1MDAwM0Q1N0U4ODY2MUU4QUY2NEZCMUQ1QjcyRDlGOTY4MkRERgorOjEwMTc2MDAwOEFGNTlDQjQ5MzdDN0VDQ0NEMTQ3RUY1QzRDRjExQzc5MgorOjEwMTc3MDAwQjM5MkZGNEVGMzFCRTU0RjA3Qjc0QkZENjk0NTk3NjdFMworOjEwMTc4MDAwOTdFNjdEMDZFRERGM0M4MzIwM0U2RUQ5QTdFMzNFMDM1RQorOjEwMTc5MDAwQTEzN0I3QzFEOEIyNzMwRDRDQzhBM0Y4MTJCREI3RDFFOQorOjEwMTdBMDAwRkI3RTcwQkEyOTFEQTE3QzQyQkM3M0IxNUM1OEM3NzMyMworOjEwMTdCMDAwMEZDQ0Q3OTgzRDMyN0YwREUzNEJFREQwNTk2RTg3NUU0RAorOjEwMTdDMDAwODc3QjZBODc3RUYzNjlFQ0QwMzM2RUE2MzdBRDU0ODY4QgorOjEwMTdEMDAwRkE0MDBFQjUwOERGOEZDM0ZEMTFERUQ3RjJFMjYzOTY0MworOjEwMTdFMDAwQjg5REYwQTczQTA2RjYxQjYxQzgxQjJDNjZGQjRGNTM0OQorOjEwMTdGMDAwQjUyQkYyMDVDN0ZCM0Q4MkFBN0Y1RUU3MDQyNzYwMDc5MQorOjEwMTgwMDAwQzU3NTEwNDcxNUJGNUZENzAxRUQxQkQwOUVBRDExRjgxMAorOjEwMTgxMDAwN0E5MkE4QjgwRTJGRDdENzMyOURDRkZCMkUyRUNGQjlGNAorOjEwMTgyMDAwMUJEMEJGOTI3RkJGQUVEQTFCRDkzNTk3RDYxMzM4NzE2NAorOjEwMTgzMDAwM0IzQjJGRTFFMkVENjRGNTJDQzAyNzIxMDJFNzZBRUE4OQorOjEwMTg0MDAwRjQwQUZCREEwNUREQUVDQ0FCMkNGMTQwOUQyOERBRTJFMAorOjEwMTg1MDAwOTJCODFEQTk4RTkxRThDMjUyQzQzN0I4N0YwQkVBRjE0NQorOjEwMTg2MDAwRjE3QTQyQjM2MEJFQ0ZDMjczNTY0RjE2MjdDRjRGRDgxRQorOjEwMTg3MDAwQTU4NjcyMzIyNzI3RjA0MUZBREQwQjNBRkU5M0UxM0Q0RgorOjEwMTg4MDAwMURGRjI5OTlGMzcwRkNBNzY2QjI3OUM4MEJGN0JGRTE3OQorOjEwMTg5MDAwRTNCODRCMERFNkMxRjM1MDBFNUI4MkE2RTVGMzc5Rjk5MAorOjEwMThBMDAwRTk5OTlGODE5Q0VDMjBFQzc3NkY0MTdFMTNEN0FCRjdEMQorOjEwMThCMDAwNzBGQkYwQjNDOUExMTI2OEFGRTZBNzJCQkFBN0QxNEY0RQorOjEwMThDMDAwMzZCNUFEQzU3MzhBMTc1RTExRkJFODY1Q0ExRjkyQTdDRQorOjEwMThEMDAwRTM3QTYwQ0JDM0Q2NzlFNDA3MUNGRkZDM0M1M0FDRjczQQorOjEwMThFMDAwNUQxRThFQTBGNkVGQzY0Q0E0OEZEOUJGQjA5N0ZEQkU4QgorOjEwMThGMDAwRTdEQURDQzJFRjMxRjg0ODFEQ0MyOUYxNzM2QTZCM0NBMgorOjEwMTkwMDAwMkI2QUUwRjcwQUJGRkM3NEMxNUMzOEQ3NEFFN0Y2Nzk2NgorOjEwMTkxMDAwQjFCNzRCNUYwN0UzMEFCRkZGOTRDNDlFMzc4RUQ4NDEyRgorOjEwMTkyMDAwNkFCRDJERjM1NEYyRkNENDJGNjVCMkY5OTNFQUYxQjJGQgorOjEwMTkzMDAwNENBNkJGQ0I4MUNFN0Q5M0NEOUIzMkU3RkRGREVDQTNDMgorOjEwMTk0MDAwQjA0MzIxOEREOTFCRUEzNzg1QzE2RjVBM0REQ0RDMDNEQQorOjEwMTk1MDAwRDM1NDEzRDk1MzBCRUIxQjU0MkUzNzAwQkQ1RjcwMUVBRAorOjEwMTk2MDAwRTg2MTNGOUQxMjlFMDZFRDUyNzlCQzgzQ0JFMzQ2MkU4MworOjEwMTk3MDAwNUY3NzcyNzlGQ0YyQTdFOUQ3NkE2ODdDNUU2QUZDMjkxNgorOjEwMTk4MDAwNzBCOEMwREZENENFN0YyQjkzRTE2NDlGRkJCMzk5Mzc0RgorOjEwMTk5MDAwNzZGMEZBNDJFRUNCOUMzNzZFRjkwQ0RBQTc3OEUzRkJDRgorOjEwMTlBMDAwQzBDNzkyNEMzMjI2QkU3RDk0Q0JENTYzOTkyM0Y4RjZGRQorOjEwMTlCMDAwMzFGODZFQTFEMzdDM0MzMzExNkY5NDlDRjgwM0U0QzlEOQorOjEwMTlDMDAwQzVGMTQ2OTdDQUYxODY5NjE4Q0YwRTUwRkNDNUYzRUFDQQorOjEwMTlEMDAwRDZEQkU2QzdGNTQ0OEYyNUM3MjE2NTk5MjM3RUNBQ0Y5QworOjEwMTlFMDAwRDBBRUVDNjIzOEE0NkM4NDZFRkY0MDA0RjQ3MDFBRDc1OQorOjEwMTlGMDAwRjczNzk4M0Q1RUFCRjdBRjA3RkI3QzNFOEI3RDFGQ0I4NworOjEwMUEwMDAwNjJFM0Y4MUNBRkVGNkRDNTk1MzRCRUY5NDJFNjA4RUUwRgorOjEwMUExMDAwNzkwMURCQkI4RkI1QTc2NjVDQzc3RUI3NDNEODE1QkIyMgorOjEwMUEyMDAwODJFRDg4Rjg3MDU5QjZCNTlENzlEOTM2MEI0RTk1REJBNQorOjEwMUEzMDAwRTk4RUY3QUIxQkU1RjgxRUIxRUZEN0VDODE3NjAzNzFBOQorOjEwMUE0MDAwQkU0NjEzRjkwQUY2QzUzNjNGODE5RjFDRDdBNUMyNzE2MQorOjEwMUE1MDAwMDlGQzdCMDVGQkQzQ0FEQTE5RTE1RjI4Qjk5REM1REYxNAorOjEwMUE2MDAwMzU2NEI4RjQ3NUEwMkY5NTdDQkNDNUU1RTM3NzcxRjlCMgorOjEwMUE3MDAwRjgxRDk3OEZERkMzNzczN0NGNjBFMzcwREIyNEVCN0VGMQorOjEwMUE4MDAwRjI3N0Y5NzdGNzcyM0U4OUYxOTJFOUZGN0EzNjJCMzdEMAorOjEwMUE5MDAwQzIwRkRGODkyNzEyNzE2REEwMzg2Qjc1MTNDNDJENUJERgorOjEwMUFBMDAwNTVCRkNEMzc1QURFRTg3RjMzNkQwOUY2NTgxRjg4RTAwMQorOjEwMUFCMDAwM0M1MTBGRjI5NkM0RUVGRTI1Q0VBRkJGRTBCOEQ0MzA1NQorOjEwMUFDMDAwN0U3NUE1RjBFM0VFQ0M2NkZEQkUyNTdGNUZDRDY0NjgzNAorOjEwMUFEMDAwM0Y3Q0M5RjI3QjJENUZEOEQ4QTUyNkZBMDlGRjFCQkUzMworOjEwMUFFMDAwNUYwQjU0MDA4MDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwNgorOjEwMUFGMDAwMDAwQkU1N0QwQjYwMTRENUQ1RjA5RDlERDlEOTREQjI3NQorOjEwMUIwMDAwOUI0Q0RFMUI0OEMyMjQwNDBEMUE3MDgxMTBBMzA0OTk1QgorOjEwMUIxMDAwQkM3ODA2ODhCQzQ0NDU1OTFFODZGMDRBMjI2MjRCQUIwRAorOjEwMUIyMDAwRkUyQzI2ODRBNzZEQjQzRUIwNDVCQjIwNTRBQzY4MjM4MAorOjEwMUIzMDAwQTY0QTMxRDAwRDA4RTJCM0ExQURBMkI1OEYyMDA4QTgwNgorOjEwMUI0MDAwMDgyMTZBNURBQjdFRkNGNzlDN0IyNzNCQjNEOTA1RDRBQgorOjEwMUI1MDAwQjY1RkZCRkZGMUVCNzdCOTc3RUVEQ0M3Nzk5RjczQ0YwOAorOjEwMUI2MDAwOURCREZFQzNFMzczMzUwNzIxRTdFMDZGNDRCMEFDNEE4NworOjEwMUI3MDAwQjAxMDkyNEM0OEZEMENGNzQxMzU5RjEwQUZDQkUyREUyMAorOjEwMUI4MDAwNEE3QUY2NUIxRTJGNjNCRjUxRDkzRTI5OEVGNjdCRTM1RQorOjEwMUI5MDAwMkM1MTM2RDM3RTM3NEMxMTM0NUYxRTIxMjMzQjg5RTYwRQorOjEwMUJBMDAwQTNFMzdGMTkyRjEwMzI5NDEwNDU5MUIwRkYxNTA5QUNCMworOjEwMUJCMDAwM0U0QUVFOTg1QjE5NjZGRUJFRkNGOTY4OTU2OENENzRFNgorOjEwMUJDMDAwOUNEMTBBRDE3Njg0RTk3NzI5NUZFN0E4RThGMEUzOEMxNQorOjEwMUJEMDAwODI3MUU4RjMzMTg0OEQxM0ZBN0MxQzdGM0VBQTI0RkNDOQorOjEwMUJFMDAwRkI5N0MxRjg3NDFERDM1RENGOTQyNzEwNThDRjI2QUI1NworOjEwMUJGMDAwODdGNkNCQjE2QUI5MEE2RDVGNTNEMkIxMjhEQzdCNEU1MAorOjEwMUMwMDAwQTkyNDBGOUU0NzUxRDA1OTA3MTM3MjMzN0RENzQyMDczRAorOjEwMUMxMDAwOTg0OTRCOTk5NkVCNDVDRjYwODVDRUVCQTFFMDcwRDEwQQorOjEwMUMyMDAwRTdCNDVCQUZDQTAxODQwQzcyNjg0M0EwRkQ4QjI4MkQxQQorOjEwMUMzMDAwMUZDQTdDNDkxQjBBRTNEQzZCRDUwQUEwNEU4ODlGOTAyMworOjEwMUM0MDAwMDI0MjI2MTBGNjM3QzFFRUYwOEJCMUY0MUY4NUQ2NTM1MQorOjEwMUM1MDAwMUQ3NkQ2NzYyRTFCRkVGRjBDRTVGOEU1ODQwOEM0MkYxMgorOjEwMUM2MDAwOUNCQjFDRUEzRTExQzZCRjVBM0RGOEI2NDBGQjVGQURCNworOjEwMUM3MDAwQkY3NzUyMEE3OTJGNUQzOTFFQzNFQjIyQUUwQkUxQjM1OQorOjEwMUM4MDAwQ0JGQTkwRUFCMEY0RENBNzVFRUU3Mjc4RUMwMDg3QkY4NgorOjEwMUM5MDAwNDQ3QkM2QzMzQUVCNUQ5QjFEMkE4NUY3MkI5RTY2QkIzMgorOjEwMUNBMDAwOUJCNjFGOEUyMzA4QzdCRkM2NjgxMzYxM0ZGNUJCNDhBQworOjEwMUNCMDAwNzUzMzZEMTc2Mzg0QkE2NjAzRkNBNjI4MEM5RjUzMTUxMQorOjEwMUNDMDAwODZGRjM2NDk5QjBBRkQ0N0Q4QjU2OTMwRUU5NDRDOEFBOQorOjEwMUNEMDAwMjczQUVFQ0NDNDhFQTU0NkI4Q0ZFNDc0MzA5REUzRUIzMgorOjEwMUNFMDAwNjY5OUY1MEI1REU3NTRERUFGNDgxMkJDMzFCMDI2QzdFQworOjEwMUNGMDAwQzE2MzYyMEE4NTA3RTlGRUNCQjFEMEZBNThGODk3NEE2QQorOjEwMUQwMDAwRkI5RDU0QTY0RDRGQTIzODVCMkRCQTJEQjQyRUU3MEE4OQorOjEwMUQxMDAwNDhDRkExRTMyRUUyRUI5RDJCNTcyRTgyRjUxMkI1NEU1NAorOjEwMUQyMDAwQUQ3NDUyRkE5MEMzRDNDNzMxREVCRjNDMDI1RDY2RjE5OQorOjEwMUQzMDAwNzU5NkMxRjMzMEVGQTc3MUZFMjg0QjZBMTMwOTdEQkY3QQorOjEwMUQ0MDAwODhGMzVCNjhCRjQ5MDkyMkUzNjMzNzE5MUQ2RTlDN0FFQgorOjEwMUQ1MDAwODVEMTNGNUQ3NzNERDI5N0MyRDY5RDYzQUQ1QzA5RkJDRgorOjEwMUQ2MDAwOThBMTFDMkE4RkE3Q0RDNUY3MjQ0RDIzNDkwMDBGMEIzRQorOjEwMUQ3MDAwQjE2NTIxOUNFQzg0QzI0OUUyNzBBMkNCMjQ1MDVGNjIyMQorOjEwMUQ4MDAwNjc3NTI5N0ExMTg5QTM2NUE2Q0JCNzZFMjBDMEFGQzE0QworOjEwMUQ5MDAwRUE1NjY5RkRCRDkzRUY4OTg0RDJEOUQ2RkJCQjA0NDJENAorOjEwMURBMDAwRTVDNUFFNEU0MjEyQjM2MDFDMTk0Njg0M0ZDQjM5QTE0MworOjEwMURCMDAwRTc3OEY0OTkyQUU5RjM1MUQwNUM3MzkyNjgzNjRBQkYwOAorOjEwMURDMDAwRDcxNDc2NEUyMkIxQTZGN0M5MzkzQTlFQTNCM0REMkJCQworOjEwMUREMDAwMDBGRUVDQzQxQjczMDU5MkYxMUY3MzUyNzA1NDFDMkY0QworOjEwMURFMDAwOTVDRTBCRkI5MTNGMjUzRUQ4OEZFNkYyNTQ5MDgxODQyRgorOjEwMURGMDAwQzQ3Nzc2RkNBQzE2REIxREVFNTFCODJGRTIwMDdFMEJFQgorOjEwMUUwMDAwRUU3MzA5RjI5RkJFMkVEOUQxRjFEODhGNjlGRkQ2Q0ZEQworOjEwMUUxMDAwQTJERDc3QzNCRTNCNDc3RUMwRDY0M0JDNEVFMDZCQjE2QworOjEwMUUyMDAwQzJFREM5ODNGNzZDQjgzRTBCRkQwRkY4NkM3ODgwQUUzRAorOjEwMUUzMDAwMzc5N0FGMTcyNkM5MzdBQzlGRjREQ0NGN0FCMUYyNzk2OAorOjEwMUU0MDAwQzBDNzRDM0JEMTYyMDdBMzdDRDgwOUY1QkU1NkRBODFFNgorOjEwMUU1MDAwQzJCMTUxMTE3QzVFREFBRkYxRkVCOUFCQjM0MDVFQUZGNworOjEwMUU2MDAwOTdEQ0ZEMDhEMDM5RDkyOTUwM0ExRjQ2RTc1RDQ2RTU5MQorOjEwMUU3MDAwOEU1QzQ4MUMwQUFEQ0IyRUI2RkZDNjdCOTIzNkM1MDhEOQorOjEwMUU4MDAwRjA1QzIyMzNFOEYzNjE5REZFMkYwNDBBODc1ODU3NTUxMgorOjEwMUU5MDAwODU0MkY3MjFGM0Y3MDUwQTM4Nzg1RjUwMTUzMjYzMzAzMQorOjEwMUVBMDAwRDA2REJCNDg1MDNFQjgxMDFFM0FGRjY4OTcxMkUxMzgxQgorOjEwMUVCMDAwNUQzNzNDMDJGQTJBOTM4OEQ3NEVGQjBCMkUzNkVFMzU1RgorOjEwMUVDMDAwQTQ1MzI0N0QwMTBGNTQxMUQwQjI4NEI4QjE2QzE0M0REOQorOjEwMUVEMDAwNkYwMkZERDk2NThBNTdCQTdFQkJDNUVFNUIyMTAwRkU1NQorOjEwMUVFMDAwMkE1RjFCOEQ3MDJGNTM4RUU3MDZFNTU5MjQzOTA0OTAyNQorOjEwMUVGMDAwM0JBRUMzNTVGQ0VFNzJBRjdDNjk3OEJFRkEzMEM4Mzc5MgorOjEwMUYwMDAwMUYzMkI5NENGOTg2Q0UzMzI1OUJDOTlERkRDRThFMTk2MworOjEwMUYxMDAwNDZCRTVGQUEzMEI5QjQ5NEYzM0Q5MTE4OUZDRDk1QjVGNAorOjEwMUYyMDAwQjM4MEM3NDg3Q0JFOENCRjk3MDZDQTA3Rjg5ODg0RTc4MQorOjEwMUYzMDAwRTM5RkM3QjNGNTRDQjlEQkQ3RDg4QkMyNkY0MjgyRTBDMQorOjEwMUY0MDAwMDYzRDVDQkU3RDk2RDQ1QjBERjY5M0I5QkUzQjk3QUM2NworOjEwMUY1MDAwOTE3ODk0QzNFRTkzQkUyNEQwM0UzMkVBRjdDNjc3Qzg5OAorOjEwMUY2MDAwNzQxODdGMTY5NzlGMjdGOEI4RUZDN0IzNzVDNDcwM0RGNAorOjEwMUY3MDAwN0U0NDcwNEUwRjA3MTc2NzdDQjcxQzc0QzJGOEM0QzM0OQorOjEwMUY4MDAwRTAyMkM2MENFQUY0RDM3OTQ4NkYzRThGNTVDMDc5REE2NworOjEwMUY5MDAwQjI5OTdDOEM0RjMwQ0YxM0NCRTUzODk1RkJDOUYxMjgzMworOjEwMUZBMDAwRjc3REU5RDBFRjE1MkI1QjVGRThCQ0U5QzE3OUQzNzExMAorOjEwMUZCMDAwREU0NTZDREVCMTIwRTc4MUZGRDU4MzJGODI5QzJGRTJDNgorOjEwMUZDMDAwNzQzQUI2RDM0M0MwRUUwMTFFQjYxNDA0RTVCREFDRkFCNAorOjEwMUZEMDAwQzUzQURBNUUxNDQxQ0VGNzBGQ0VEMzFGRTdBOTYzNzg3NgorOjEwMUZFMDAwREM5RUEyNUQwNkVCQTQ3NkMxRTU1MEI2NjUyQjI4MkZEQQorOjEwMUZGMDAwREZFODY1MjE5QjI5NUZDRTRBQ0JGRTExODg0RDdEOUM5MQorOjEwMjAwMDAwNEQ3QzlGNkQ1OThEQUVEOTE0NUY3MjI3NzFEQjkwQ0VEOAorOjEwMjAxMDAwQUI1MUVFMTU3MUY5NTJCRkNCNDNFMEI5QjcxNzk1OTlBMworOjEwMjAyMDAwODZGN0U1Q0VEOTc2RTJDMEFERkNDRjM5QkQzRkYwNTFBMQorOjEwMjAzMDAwNjc3NjlDMjcwQzVFRjQ3MkRENzIyNjhBODhCQTE4REZGOAorOjEwMjA0MDAwNUJDMkRGMEJFREU3Nzg2MDZGMEM4Q0JGMTZGQTVGNEE1RQorOjEwMjA1MDAwRjk5NkVCMUJCQTYxNUNERjU4Q0UzQkY1OUQ5QjYzM0E2QQorOjEwMjA2MDAwNjhCRjVEQjk3MzRDRUJDMUU3OTQ4RjFBNzMxRjhCMDE4NgorOjEwMjA3MDAwN0JBOTM1ODNFQTAxOTA1MzJGOEIyODI3MUI5RDBDOEY1QQorOjEwMjA4MDAwOEQ2OTU1QzQ2MzgwNzNBOUNCMkYxRTg3NzFCRTlBNDM5NworOjEwMjA5MDAwQTY1MUZDMTVCOTNDRTQxMjY3NzBERDQ1Qjk1NTVFMjFDNworOjEwMjBBMDAwMDlEQjlGOEJBMkUzQ0M4OUJGMDRFOTQ2Q0VGMzkwOTE3NAorOjEwMjBCMDAwMEU4MDRCMzNBOUEyRkI5NzE1QkZFOEE2NjU2OTI3RjFFRgorOjEwMjBDMDAwOEZDODg3RkU1NENFMEI2QzNDRDU2OTFDODczNEMzMzg0RgorOjEwMjBEMDAwQjI5QkQyMDNCQ0Q3RTlDN0Y1RUMzQTc5N0UzODNBRjIyNQorOjEwMjBFMDAwMkMyNkY5QURGMzI1QjVFQjZBODAyRUNBOTQ2QkNCRTJCMgorOjEwMjBGMDAwRTlGODBCQjY2NzBEMTZFOUY4MjM1RDZERjJFQzNDOTQzOAorOjEwMjEwMDAwREJCNTQwMUY5QjkyQjUzQUE0OUZGRjI1N0I2RTNBRjE0OQorOjEwMjExMDAwNTkwMUVGQTMzMjk5MUU5ODUwMjNGODM2NTNGODM0ODZBQworOjEwMjEyMDAwRDgwOThEOUM0RTJGMEREQTM3QUI2MUZEQTQ1MEI3MTM0MworOjEwMjEzMDAwQjQzNUYxRTdCNzgzRUY4OTNGQkYxREZDOTNGOEYwNzYyNAorOjEwMjE0MDAwRjBGREYxQ0MwRTdFMjA5RUQ5QzEwRjQyNDlFREUwODcxMworOjEwMjE1MDAwRTJCRjgzMUQzQzVDMjFCQTFERUE0M0Y4QzdCMzdBRkQ5OAorOjEwMjE2MDAwOUY5ODNEMUFCQUZFRjlGMUNDMEU1QjRERjdEQTBFNzQ2QQorOjEwMjE3MDAwMjlGOTI0NDZFNzhDNEZBRkU2N0MzQUY2MjRFNTk3QkM3NAorOjEwMjE4MDAwOUVGNERGNEFFOURGNEJFOUFGOEJEQTRENjI1NjY0N0FBMQorOjEwMjE5MDAwRjI1RjI0NUYxNjNGQzBGOEJFREVCNTE3RjlFRUI3OUNCQworOjEwMjFBMDAwM0Y1QkY5RkNBREI5NjIwNUUwRjMxNTIyMkFBMkQwNzNCQQorOjEwMjFCMDAwQkNDNjBDOEYwQkU0N0EyOEZGNjk1Rjk5RTlCOUQ0RTVCNgorOjEwMjFDMDAwNUIzRjE4RjhFNkUwMUMzNzJDMkI5NDFGNjU1QTU2MEQyMAorOjEwMjFEMDAwMDhBRUZCRjc5QzBGQkJFNTEzMTFBNDkxMTdDMTg3MzAyNAorOjEwMjFFMDAwOEU2NzAwRDgxOUYxMTJGMDVGM0Q2MUYzN0EwRjhBQTg2QgorOjEwMjFGMDAwMjcyMkYxMTFBNTlCNzdFMzBERjMxNTAzQjAwREVCQTc5MworOjEwMjIwMDAwNzRGMzY3QzAyRkU1QjNCRjdDMTc3QUY5M0VBNzBGRUFENgorOjEwMjIxMDAwODcxQzg3RjE5Mjc4N0Q1NjA0RkZFMkUzRjg2RUJCRTBGRAorOjEwMjIyMDAwNjM5Qzc3MDZEMzQzQ0U3ODk1QkQ0NzkyNjREMDJGOUFBRQorOjEwMjIzMDAwOTg5MTA5RjI4NThFN0IxNkM2REQxMzc3RkU3MTAzNDFGNgorOjEwMjI0MDAwQkQxMzQwQkE1REM2QzY3RDFFOENFQ0U0OUVFMzhFNEE4QgorOjEwMjI1MDAwQTBGNjQ3OTg3MUVDNUM4RURGMTBDMTVGNTBCODVENDMwQgorOjEwMjI2MDAwRjJCQUVEMTM2QjAyRkFFRDZDN0Q0RjI0NkJCNjg0RTQ4OQorOjEwMjI3MDAwMjBERjE0NzFCQkU1MjVDMUFDOTc1M0I5M0U1N0I4M0Y3OQorOjEwMjI4MDAwMjcyNkIwRkU2NDZFRjdCODBBOENBM0MzNTNCNzAzNjY2MworOjEwMjI5MDAwNzFGOUEwOEY5M0M0RjkyRjJFNDE2MUVCQUE2NkVGMTM1OQorOjEwMjJBMDAwNUUxRkM5RkQyNzBBOTdERUI4MkUzQjdCN0UyMUJGRTg2MworOjEwMjJCMDAwMkU4NUM1MkQyNjcxQkJBQTEzMzZDOEY0MUJDMjc1NzRCMgorOjEwMjJDMDAwMjRCRjJCNjhGN0Y1MDdCODEwMzdFQjlGQzZFMTQzREI1NworOjEwMjJEMDAwRjNCMEJEODJBREUzNTI0NTBEMUIzRjg4ODQxRjFERkU0OAorOjEwMjJFMDAwNTIwMjVGNEYyRTFCOUY3OEJCRTE3NjI1RUM1M0E3OTdEOAorOjEwMjJGMDAwNDg3MERCMTNDN0UwNTZBMEMzQUQ4MThGMTMyMjBGRDYwMQorOjEwMjMwMDAwNDlDRDc2MjVDQzNFNDc3MjdBRDVFQjMxQjk2NkY5MTBDNgorOjEwMjMxMDAwMjk5RTkyMTVENDEzRTMxMTFGRjk2Q0REOTFFMjJCRkQ3OAorOjEwMjMyMDAwRjg3RTJGRTM3OEEwRUY0RDQxRjgzOUQ4N0FFRjUyQkExMgorOjEwMjMzMDAwREJBRkMzRjY3NDM2REVDQzYwRkIwRDM4OEY4QkY1OEZDOAorOjEwMjM0MDAwRTRGN0NGRTRFQjlBOUFEMDhEQTc1OTM4NUUxMjdCMkYzMQorOjEwMjM1MDAwMzQ5RUEwOTczN0YyRjU0RDBGQUVBRjFBREZDQjYxRUY4OQorOjEwMjM2MDAwNDk0MUJDMkZDNEY2RDFBQ0ZERkFGNDRENjVDOTJBRTA1MQorOjEwMjM3MDAwOEQ4RTAzN0FDMkM1RjRDMTBERDU2REEyRDFERUI5M0VGMgorOjEwMjM4MDAwNDJGQzRERTJGMzU2MDVEN0ZCN0REQ0E3QzZGNjdGMjI2MworOjEwMjM5MDAwQUVCQkZEODczODZGMTE5QjM3OTJGQzM4MTFDN0M2QkJBNworOjEwMjNBMDAwOURFRkUzMUFGMDhCRTkxOEYxMDE5MjJCMjU4MUQ3MTRFOAorOjEwMjNCMDAwRUQxRTQ1QkJBNDA2MzQzRkU4OEY5MjRGNjUxNUU0NzRDQgorOjEwMjNDMDAwQjlFOEYwMEE1NDFFNEJBQTFERkRFNDI4ODk2OEUwRDczRAorOjEwMjNEMDAwQjY3REY2M0Q1NzQ3MUVENkZEQTBENzU3NDUxNURCQzE0NAorOjEwMjNFMDAwRUY1QzlEMjVCOTQxMUYxNkRGMkIzMUZGRkE5NDA1RTVGRgorOjEwMjNGMDAwRkQ0ODcxMTE4RUIzNTdEMUVEREM1QjREN0VCNEFBQThCOAorOjEwMjQwMDAwMTU1MUIwMEVCQjQ4NTRFNkZGNTc4Q0E3Q0Y0NzcwNzlFMworOjEwMjQxMDAwQkRENzlFNjg4MUYxODY2NUIwNzhDMTA4QjUwQUZENzVBMworOjEwMjQyMDAwRjIxNUYzQTMzNUZBMUY5M0RGMUFFQTY1OTlCRjI3QTVDMgorOjEwMjQzMDAwRDcxMTAxNEJCM0JGMkQ5M0Y1NjdDNTgxQTgxN0QwOEU3NworOjEwMjQ0MDAwMUFENjY5RjZCRjY1NzVFNDA5MTg1RjI2ODZGN0U4QkNGOQorOjEwMjQ1MDAwREIxMjlDNDk2ODRGRTU5MDdFRTcyOEZGRDg3MjA1NjI0MQorOjEwMjQ2MDAwQkIwMkZDNkNDRjc2QzBDRjE4QjU0QTI5QTFGQkIxQTU0MQorOjEwMjQ3MDAwN0JFQzIwODc3M0FDRkVERTEwNEY2ODQ4OTdERDVFNjAxMgorOjEwMjQ4MDAwQzNGQkNCRUM1OUUwNkYzNTUxRkYxQ0UxQTAyNTVDM0I1MQorOjEwMjQ5MDAwMjA4ODI3NUI5MTQ2ODAwRTI5NEU5MEJGQkE0QjA3MkJCMAorOjEwMjRBMDAwODU0NDg2QzdCNzEzNkM1ODBFRTI3NUZENzkyOERFQjNGNAorOjEwMjRCMDAwMTNBMzE5RkYxM0JCRjc1ODJFQzgwOTgxQzQ1MTNBNUMwNgorOjEwMjRDMDAwNEMzQTMyODExRUM1MzRDNkU3MzU5NjhFMTRBODlGMjEzQQorOjEwMjREMDAwOUQyOTQ5QjRBQzZGOTI0Njg3RjM3RkQ2RjFCOEQ0MUFFMAorOjEwMjRFMDAwNEI3ODdCRTk1RUVCOTg1NzAxMEUxMkM0MERBRUMwQjg3NQorOjEwMjRGMDAwODBDN0Q2MzcxODNGRDBFRDU1M0Q4RTEwQzk2RTZEMTQ4QworOjEwMjUwMDAwMkJERjA0QkExNjE0RkYxN0QwQkZBN0ZERUI2NUZCNEVGNworOjEwMjUxMDAwNjc3MjVBMkZGNTc1OEM0RjY0RkM2RTRCQjQ2M0JGM0RFOAorOjEwMjUyMDAwNzc5NjkyRDkyQUUyRTkwOEM3RDNDMTJCMDEyQTU5NzNCOQorOjEwMjUzMDAwMTVDMEQzQ0I1OTBGRTY0MDVDQ0E5RTc1N0YxMkYwRTdGOQorOjEwMjU0MDAwNjhDMkVDRDM3MkZBOEU4Qjk2MkIxRDlFOTMwOTA2N0I4NAorOjEwMjU1MDAwNjM0Q0NFMkNCNDlCOEEzMkVCRDA5RTVBMTVDMTJGQkQ1MgorOjEwMjU2MDAwODVBRjQzRTI3NDMyQzhFMTM5MEJGQkRBN0FGRjEyM0JFNAorOjEwMjU3MDAwQkMyRjI5OTVEMTUwRUUwOTRDQzI5MkRBQkQ5RkMwRjMxMQorOjEwMjU4MDAwNTVFOUFDN0UyMTNDQkNDNEY5MzlEMkZBNDc4MTVFODA2MgorOjEwMjU5MDAwNzg0RDdBRjczRTg0QzQ2NDdDRUU5NTA3MDdGNzYxNTg1RQorOjEwMjVBMDAwOUYzNTMxQ0NGQTNFRTVGQTQ4NUY5Nzk0QzNFOTMyRDdCQworOjEwMjVCMDAwNEM3NzQ1N0NCRkE5ODlCQUJGNzhEMTc0RjdENkM1RDAwRQorOjEwMjVDMDAwNURFODdFQzc2NDJEMURERDlGMDREN0FGRUY1N0RGM0Y2OQorOjEwMjVEMDAwREQ2RjFGRDg2RkI5QzRGNkJGNTVGMTY4MzAwNDg1QjNGRAorOjEwMjVFMDAwMEFGQkVDQjEyRjdCNzhCREVGNDhCNDdDRDNGRDNDOTg1RgorOjEwMjVGMDAwRDBGN0UyRjdGMzBEQzY5RDk2RjgwREUwQjQ3RkI4RTY4QworOjEwMjYwMDAwMDI3OUQyOTA0Q0U5OTNFMkE5NDE2MEE1REVGRjBCNkVGRQorOjEwMjYxMDAwQTdGREZDOUJFMzJCQTVERjM3RDg1RkIxNEI3ODExRjQwNgorOjEwMjYyMDAwRTEwOENGOTE1MkQ4NkU1OUQxMjA1MDNCQzA4RjkzMDExMQorOjEwMjYzMDAwMEYyNTc5Rjc0QUIzNjlCREYxQ0UzOTI4M0ZGNzBGQUZCRgorOjEwMjY0MDAwQzM3NUFGNzI5QUQ3QUI5NzQyMjI4RkUzNjc2QUM4N0Y5MAorOjEwMjY1MDAwMEQ5Q0ZGQ0EwOUYzMjNGNTdFNEY3MkY5MThDQTFGQTExQQorOjEwMjY2MDAwRTM4NUYyRjU0QTg3MzYxN0Q2MjUyNDMyM0QxQkY0RkY2MQorOjEwMjY3MDAwREE0NUEzRkY1N0MyRjVENzcwRkI2REE2RjhDNzcwRUUxOQorOjEwMjY4MDAwRkZBREZBMzREQkUxQTUxQkVEQTI3QUVEOUZFMkZGN0QwMQorOjEwMjY5MDAwNDE5RjgwOUY5NDVFNjIzN0ZBN0YwREY2NTI2QzVGOTU4MgorOjEwMjZBMDAwQTE4REJFMjIwOUY0QjFFOEJFOUIyMEZDRDAxRkY0MEEyNAorOjEwMjZCMDAwQTJCMjM1OEMzRkI4MkE0M0Y2OEZBMENGNkQwQUY5MDUzOAorOjEwMjZDMDAwQUNBRjk0RUE0Qjg4QkZEODE0OEQ1QzMyQTBBNzVGQjgzQQorOjEwMjZEMDAwRDc1RTRBMjA2RUQyQTU5MEU3QzAxRkJCRDA3RTFFNDhCMQorOjEwMjZFMDAwQkNDNDY0NDc0QUUwMTdGMkYxRDEyRjU0RUE0ODA3QzY0OAorOjEwMjZGMDAwN0I0QTA5RDgzNUQwQUVBMjVEQTUxMThGMTNGNDA4RjUzOQorOjEwMjcwMDAwMEIwREYyQTlDQjdFMUJGMjdCRTg3QzU0NkUzRDAyN0M2NAorOjEwMjcxMDAwREVBMDMwM0UwRUY1MDdCQjM4OUZFQjcyMzY5NDFFQ0EyMgorOjEwMjcyMDAwNUQ4QzZFQTJFOEQyQUQ0QzZFRkMyMjcxNjg0RkJBRjg5NworOjEwMjczMDAwRTZGMjY5NkUxOUI4MDBENzkxMTVGQkMxNTU5QjFBRThFRQorOjEwMjc0MDAwOTRDMEU1OTk5M0M4RjhBOUQyRjE0QzAzM0NEN0M3MEZDMAorOjEwMjc1MDAwQzUwRkREQjkwNkYxNzRCMDY3NThGQzg2REE2QkQ0OEUwQworOjEwMjc2MDAwQjI1MjdCNkRBRDEwOUM3RjBEQTc4MzQ4Rjg4OEE0QUY1MworOjEwMjc3MDAwRjc3NUNCQjVEMDM4RDE2REU2RjMxN0M1NEI5MjBBNTgzMworOjEwMjc4MDAwNUM5Rjg0ODFCRkM4RURBNEQ1OTQ1RkUwRkM2NjhERDVDNQorOjEwMjc5MDAwRUQwMkJGQTJCRTVGRDFEQjFFQTBCRjdFMzJCMzc3QTQyNQorOjEwMjdBMDAwMjZEN0I1NjFGQzkwQjUxMUUyREFFRjI1MjYyMDNDQTNDRgorOjEwMjdCMDAwNzMyQzI2RkI4QzdBMDYyNkZCMzFEMkJFMDk1Rjk3OTVENworOjEwMjdDMDAwRUY0QjAwNzhFNjFBRTExOUIyRUYzMjA1RjcwRDY2M0RERQorOjEwMjdEMDAwOEMxQjZCNzExMzNGRTU4QkQ4NENFMjQ2ODExNTZCQzFBNgorOjEwMjdFMDAwMzhBQ0NFRTcwQUU3NzM1RDFFMzgxNEY2REVCMEE0QkUzRgorOjEwMjdGMDAwRUM3QzRGNzQ3NDhBMTQ1RkVCOTJBODNENERDN0E5RDc0NworOjEwMjgwMDAwRjZBMjVFRDVERjhGRTNGQjc3MEM2N0YxNDY4N0QzQUY4NworOjEwMjgxMDAwMjg2MUU0REQ4RjJGODBERjI2NEQ4QTJGQTNFQkZCQjFFQgorOjEwMjgyMDAwQzJFQzZGNjlCOEE1RDI4N0YxMjgxNkFGNTUzOEVDQzQ1MQorOjEwMjgzMDAwRTI3QzNCRDhFRDA1RTA3ODBGODVGNUVDNTA4QzcxMkJGMAorOjEwMjg0MDAwOTFBRjI3QzY0OUQ3NzMxRTM5Qjk4QUYzQjc1RUI3QTlDNgorOjEwMjg1MDAwMUQ2NUIwN0UyOTRCNTNFMjBERUIxRjk0QTRFQjk1NzZEQQorOjEwMjg2MDAwRTRFRjQ4RTNEREMzRTVCQzJEREQ0REFBRThCQzc2ODc4NworOjEwMjg3MDAwREIwRkU3NUEzNkFEQUEwMEZDMDVCQkVBMjY3MzBDRUQ2OAorOjEwMjg4MDAwNzZBRDYwODhDRDgwRjdBNjdFRjJGNDcwN0NCOTIwODlBMQorOjEwMjg5MDAwQzk3RkE3QTQ1NUMyN0I0RTQ1MjI3MDRFRTZFNEY2NzI2RQorOjEwMjhBMDAwQTQ3MTIzQURFMzQyRjM4RDhBMzQ5RjFBREVBRTg4NERDNgorOjEwMjhCMDAwNjJGQzI3MERERjUxMDk3MjlBMEM5MDQ4QkYzMDdBNDJCMgorOjEwMjhDMDAwRTBGRDYyRTUwRTE1Rjg4QUQyQTMyN0RDNzg2NzEyNjU3MQorOjEwMjhEMDAwMEVFRjdGMTE3RkU4NzY3NzcxQ0JDMTZDQkFERTdBODcxNQorOjEwMjhFMDAwRTQxNjQwN0UxNTlFNkM1NzBENzI4MUVBRjUwOTQ5MDY4MworOjEwMjhGMDAwN0I1OTc0Nzg1MEJFODkyQTNCNzcxRjZENjNGRUY2RkVDNAorOjEwMjkwMDAwRTFFNjczQjIyOTlDNUU1RUU1NjUyNEI5NzA3OTkyODUzMworOjEwMjkxMDAwREI0REZGOUE3RDdFNTNGQzBENEEyMjI2QjgzNDAxNUNDNAorOjEwMjkyMDAwMDhGMEQ3N0QwREY1NjFFNDI1ODVDRjkyNkYwMzlGNjU5MworOjEwMjkzMDAwOUNCRTFFQjkwMDdDMzJGRUNERjBCOTEwNUYwN0Y5Q0MwOQorOjEwMjk0MDAwNEI4RTg2OTE2RkY1NEUzOTZEOEU4OUZGQTkxRDEyQTFCMAorOjEwMjk1MDAwNUY5NUExM0QxMjFGRUFGNDMxMEFGMDAyRkNEMEE0OTk2MAorOjEwMjk2MDAwRTIwMjcyOTJCNzlERjk5NUI3OUJGNTlDQjhDOENERTU4OAorOjEwMjk3MDAwMzNGOUFBODA4NTM5RTEyRkRFNDFGQzMxQjFDMUYxRTU5RgorOjEwMjk4MDAwMzI3MzNDRTFDOTI0MUUxNzg4MjI1MTAwOUYyRUY3MjQ4MAorOjEwMjk5MDAwMDFGMjE0QTIyQzMzMDY0MTA4MzQ4NTM0MDlBMDI3NTJEMQorOjEwMjlBMDAwNjA5QzgxRDQ0RkU2RjIzQzU0MEYyNjZCQ0M0RkVFNEQyOQorOjEwMjlCMDAwRUEwNEE2NTdEMjcxN0Q0OTdDMURBMTdBMzA4REZBMzU4MworOjEwMjlDMDAwMTA4RjAxNTQ4MzNGREQ1QjgyMTgyRjNDRDVGMDFDNUNENworOjEwMjlEMDAwRjA1QUQwNUY3NjExOUYwMEUzQTc5MzBFMkNGQjQwMkE5QworOjEwMjlFMDAwMDIxRDNGOEJCNDBCMzkxNDdGRjc5NjU3MEQwMkY5RkQ4QQorOjEwMjlGMDAwNjJDODNFMkU2NDhGRUFBNTZFN0YyQ0ZCMzdDMUZCOUQxQgorOjEwMkEwMDAwRkY1RTc4QUYyODM1QzBCQkVCM0JDMjdCMEE5NzNCQTE4QQorOjEwMkExMDAwRjFCQzMxRERGMUJDQTYxNzMxMEVGNzE1QjMzRkRBQkVCQworOjEwMkEyMDAwOTYzMUJFRDc5MEM1RTI3OUU1NjJDNTA2QjBFN0M3QTg4MgorOjEwMkEzMDAwMzIwMUZEMjZFNTc2QUM4MzNDMjdEREVFMDQ5NzA0RTIwNworOjEwMkE0MDAwNUM3QURDQ0ZERTZGNEVFNTYwNzgyRTlENDQzOEUxRDlBQworOjEwMkE1MDAwOTA4QUYyQ0M5OThDRjI4NkQ5MTEyM0Y4RkFDN0E4NTUzRQorOjEwMkE2MDAwRjYyQ0Q1RTgzRjM1OTlDRUNGNjQ0RTA3NjM1QzI1RTg1OAorOjEwMkE3MDAwM0YzNTdDNzU3RUJCRTM2MkZEQTQzREQyMDMwRUIwNkI5NworOjEwMkE4MDAwNzRGRkE4M0U2NzBFREEzREExRUZGOUE1QTYzRjQzNUNBRgorOjEwMkE5MDAwRDI5RjYzNTM1NzUwNzhCQ0NDRTVENUNCRkQxRTkyOENBQQorOjEwMkFBMDAwRTdCRkExN0U5MDZFNTc4REUwRUIyRkNEOTk3NTEwRkM5RQorOjEwMkFCMDAwQUUzMUNBNkMwNjEzMEUwNzk5Q0ZEM0UwRUFDMjczRjBBOQorOjEwMkFDMDAwREY3RTY1NDE3RkFCOEJGQjVCNjNCODlGMDVGRTRFOTU1OAorOjEwMkFEMDAwQjNFNzNFODcyNzlCQ0ZENTc0RkY2OTRDQjdGRkQ0MjQ1QgorOjEwMkFFMDAwMTlGREE3MzExMUZDQTdEMUI2Q0U1N0FGODBCQzkwNTdDNgorOjEwMkFGMDAwNDVDQzBCODkwNERGNTBCRjI5NTRGRjhDNEU2NjdBNjdBMgorOjEwMkIwMDAwNzYzMjNGMjcwQTgxQTcxRUVGMEIzRDk3NkVENEY5NEYwRgorOjEwMkIxMDAwRjIwQTQ2RkUwRjlENUZERTNCMDZDRjA1ODk2Mjg4QzczRAorOjEwMkIyMDAwNjYwN0UzODk4MkU2MjVDQjA2MDdFMzg3NjFFMjg2MzMwMQorOjEwMkIzMDAwOTIwRDcxNDM1RDhGRTk3NDZDQTM3REVENzhDRTFDM0VFMAorOjEwMkI0MDAwOUVEODlBNzVBMDJGRjMwQjVGNEMwNEZDOTcyQjJDNkUyQworOjEwMkI1MDAwQTRBRjhGRkE4NUYzOTMwRDdFNjE1MTI3RDNEQkI2RkZDNworOjEwMkI2MDAwNTNEN0IxODJDMjk3MjQxMDM3RjMwRkVBNTQ3QjNFQkE5MQorOjEwMkI3MDAwMTM4OTZCNTkxQzFERjNCNEM2MzgwNDhDODc0QkZFMjg4RgorOjEwMkI4MDAwQUM5NzlENzJGQkEyNjhEREI2Rjc2MTA5RkM4NDUyNEFERQorOjEwMkI5MDAwM0Y1MTQyOTA3RUM2NzBGRkEyMjFFN0U4M0FBMEFGQUU1NworOjEwMkJBMDAwNTM5MkZCN0M3RTc3OTk0MzBDQTFEM0U4NjAxREU1NUJEMworOjEwMkJCMDAwODJBOUJFNUFGMkFDNjQ3Q0RCMkIwODZGMTFGMkMxQjI2MQorOjEwMkJDMDAwNERGOTY3NUIyNUFEMTFGNjNEQ0FBRUFENEFGRUNGQzRFNworOjEwMkJEMDAwRkJDRjYwNUQ4MjcyRTA1QkUxM0QzODBGRDMwNzYwQjNFRAorOjEwMkJFMDAwOTEzNEMzN0MwRURBNzgxNUNDQTMyMkZENzdDN0E1OTc2NAorOjEwMkJGMDAwMTIzQzhGRDkwNjM4MDMzRkY3NjNFMjgzMzhDQjBCRDZGQworOjEwMkMwMDAwOTc0NEQwNDc4RDdDOUNBQjQ5OTMyQUY3NjVFQjg1N0UzMgorOjEwMkMxMDAwNEY2Qzc1NkQ1QTBCRjIzODM5MEJDNzdCQzFFMTU5MEZGOAorOjEwMkMyMDAwMzZFNEMxMkREMjIwODhEQkQ0QUJDRkRBMjE3Rjc2RUYxQQorOjEwMkMzMDAwRDZDNkY0MEUwM0ZGMUQ3Q0MyRDMyNzlDN0ZBODk3RjQ1MQorOjEwMkM0MDAwMkZDRTUyODhGQjhBNjVBNTI2NUE1Q0Q4MkU0MkJEODdCNgorOjEwMkM1MDAwN0RCNkE1NDU4MTc5OUVEODZBMEY2QjQ3NzU3MTNFQkZEOQorOjEwMkM2MDAwN0EwQkIzNkI0N0U3NUFEQzE0MDJBNDg4NzhBNTA0MzhDMgorOjEwMkM3MDAwOEY3MTEzQjc5RjM2QzQwQ0Q4RDE1RTAyQkEyODRCNDQ2QgorOjEwMkM4MDAwM0Y5RkQ2RjdDNUQyN0FDQzUwMERGRDgzRkUwMzc2RTA4OAorOjEwMkM5MDAwRkJGRDNGMkU3MUIzM0M0QUFGNjMzMEFEQUZDQjJEMTk3NgorOjEwMkNBMDAwQkExNkZBNDc3QkRFMDRGQzUxM0REMzI0QTEzRTZEOEU1QgorOjEwMkNCMDAwODEzQzgwOTgwMTkzOTJBOThENEI2MjA0NTIxOTJFMEU4QgorOjEwMkNDMDAwRjg0MTMyQjNGMzlFQjBFQTcwOTUzMDBGNzJFRjU2MTlBNworOjEwMkNEMDAwRjlFQjYwOUE4OEZDNDZFMUI2MDhFQTdGNEY4QjIxOTRCNQorOjEwMkNFMDAwMTI0OTk5RTYyRDAzMzg5NjkzRTY3QUYwQTdDQUQ0NkI3OQorOjEwMkNGMDAwNUY4QzI1REYwMjdFRjkzQjE0RTBGRjc1NjA4Nzg3NTkwMgorOjEwMkQwMDAwNUYxQjVGMUYwQTExNEEzRjA3QjYzNERDNDBDMkU0NTEyMworOjEwMkQxMDAwRUI3NEY4OEIxOEVEMTM4MEMzMUE3RUFFNEI1QzkzOTA2NgorOjEwMkQyMDAwN0UyMkUzRkI2RUE0MUY2N0IzQkYzRTlBQzJGMUVBRURCOQorOjEwMkQzMDAwNERCRDhDRTNFRjRGNTY0REYxMzcxRERGOTBGRjRDQUU4QworOjEwMkQ0MDAwODBGQzVCMEZFNkQzRDY5RkI0MjBGQzVFQzkxMzdDMDJFNworOjEwMkQ1MDAwODVDRjgxNUM5MURBNkM3NDU1Mzk3NjVGM0Y1QTVGQ0ZDRAorOjEwMkQ2MDAwRTlCODYyRkJBMTg2NUUwMEE0OTQyNDVDRUYyQkI5OEZDNgorOjEwMkQ3MDAwRDk1OTdFRUJDNUM3QUY4NzUwM0U1ODAwRTdDOTE0MUYyRAorOjEwMkQ4MDAwQTM5NDY4OUY0QUYxQjUxMDg2Qzg4N0ZDMUNCQkNGNEYzRgorOjEwMkQ5MDAwRTc2QjczQjY5N0M2RDEyOTVFNDgxNkRDOUI4MTVFNzJERAorOjEwMkRBMDAwODkwMkYyMDM1RDEwMEI0Mzk0NDJFQjIwMzI5MDlFOTIxNQorOjEwMkRCMDAwMDhFNjczQUQyQkM4REIwQ0YyNzY2REJBREEwQ0Y5ODYzNworOjEwMkRDMDAwQkIwN0Q4MzFERjJDMzQ5Rjc4Qjc1MEY3NjIzQ0U0OTlDOQorOjEwMkREMDAwQzQwQjI4QUYwRkU0RkUxRUNGRTkwRUE0REIwOEQwMkJGNgorOjEwMkRFMDAwMjZGQ0QyRTcwRDA5OEM0RjYzRjJDREY2Njc3RTRBMTZCQQorOjEwMkRGMDAwRjdCMzg5RDc1NjEwNUM1NzRDOEU1RDhCQTI4NEY0NTI4MgorOjEwMkUwMDAwM0M3QkZGNjA4RUUwMDM3QTNCQTg3MkY5NDBGN0JCMTU2QworOjEwMkUxMDAwMTIwMUE5MUQzNDZENDA2NEJDQkVEQzZGOTRBQURCQzVGMQorOjEwMkUyMDAwODJCRTRGNEJDRjdEQkMyMEY4NTY2N0MzM0VGQUQzN0RBMAorOjEwMkUzMDAwRDBCQTMzNTdDMEY5OURDQURBNUIwOTk2ODVGM0UwMUMxNgorOjEwMkU0MDAwMzM3NEZEMzUyOThDMkU2NTRBNzZCOTIwREY5QTU3OEY2OQorOjEwMkU1MDAwMzFFNkM3Qzg4NUI3NEU3MEM0NjIxRTEzREE5NUE5QjlBQQorOjEwMkU2MDAwMDJEMzVGMjdEOTc5NkU4RkZDNkM4NTc4NjQxMzdFQThCNgorOjEwMkU3MDAwRDU5MTEyMUMyRkU2RDNFN0JFMEZGOUJGRTMwQTA1N0ZGOQorOjEwMkU4MDAwMTRBQzg3RTczN0QzRkY2QjAzRkQyMkU3Q0M2MkY5RDc5OQorOjEwMkU5MDAwQjk5QjcwM0Y2MzBCQUQ2RTM4Q0IxOUVCRjAzNTk1RDAxNQorOjEwMkVBMDAwRkFDQjFGNDgxOENGMUU5NzMzMEFGM0FCNDNFNzVGQUI0QgorOjEwMkVCMDAwMTBGRjY4MEFERjk3RjMyNDg0NzdENDI1OEZFMTM4NkZGOQorOjEwMkVDMDAwRTQ1OTUwREU4QzgzN0M2Q0M4NUYzNkU2NTVBMzNFMzRGMworOjEwMkVEMDAwRTc3MzhGMTNGRkFDMTU0M0IzOUJGMTJCOTFCQ0JENDAzRgorOjEwMkVFMDAwQkU0RjcwOTlFMUU3M0M2OTNFMkZBRUM4Qjc5OUVBRTM1RgorOjEwMkVGMDAwRjJFNDkwNzhBNTk3QzU4NzMzMTg1REJDRDQ1RkYwNkQ3OAorOjEwMkYwMDAwQ0UwQUQyRDlEODkzMDkzRUEwMzNGODEzMEI0QzcwMzRCMworOjEwMkYxMDAwRUQzM0E2NTNENjAwN0UwN0ZCM0ZGRTEzMzgyNzg5NTFCOQorOjEwMkYyMDAwNTdERDhBRTdFMDFDRkUzQTlEQzQ3MEJDM0JEMzlGRkY4RgorOjEwMkYzMDAwM0VFODI5MURGRUExNzQ3MEYxRjhCRkI2QjIxOEYwOUZFQgorOjEwMkY0MDAwQUY5RkRGODdFMDNGMDRERjE4ODNENEY3RDFCNzI3REVEOAorOjEwMkY1MDAwNzFGRUFDOUVGOEQ2RTlBMEM3QkVFRjY5NTk5RDRERjE1MAorOjEwMkY2MDAwRkE4QTkzM0UwMDNDNkY5MjdENzcwQjQxM0M1RDEwQUYzNworOjEwMkY3MDAwMzlDNTQ4Mzc2Qjk1MjYwN0M4RkRBODRCOEUzQUMwREY4OAorOjEwMkY4MDAwRDBFOTgyODhBREY5NDZCRkUzOUY4NUVGOTJGNTAyNzNFMQorOjEwMkY5MDAwMjZERDgyMEZFMjdBQkY4MzQ3NTcwNUU3NzkzNkE1M0JFNgorOjEwMkZBMDAwOUZFOEQ5MTREMDEzOTUyQzhGQTM1RTFCQ0NFRTVERTU2MgorOjEwMkZCMDAwMzM3RERBNDMzRUE0QjA3QjFENkRENjk3RDJDRjk3QTc2MQorOjEwMkZDMDAwNUFFMUYwMTAzODFGQUI4NzdDM0JCQTNGNzlGRDJDQjgzMworOjEwMkZEMDAwRDE0MEU0MjlCMzUwNUU5MkY1MDI4QkNCMTdGRDAxRTU5OQorOjEwMkZFMDAwRkI1Qzk3NkZBNTEwNjYzRUI0NjQ3MDlEMkE5MzdCNDU4OQorOjEwMkZGMDAwODlEODlGNENEN0YzOTIyQTVGQzVGNTRGNjFGNThCNUQ1OQorOjEwMzAwMDAwRDdFQkZGQTQ3NTFEQTBCNDQyMENGRUU3NDQ2RTM3RUI2RQorOjEwMzAxMDAwNzZGNzA0MDdDQjNCOUM1MDI0MjIzRURFRDgyMkY4MzBDMgorOjEwMzAyMDAwM0Y5MkY2RjM1MjNBNTlDMEM5NzYyMkI3MDNCQjBBOUZDMgorOjEwMzAzMDAwNkQxQ0E0ODIzREE4OTlFQzRFQTFBODBERURCRUI4NDIyRQorOjEwMzA0MDAwQjMzRjE4QUY0NTlCRjA5RjM4M0FDMTU0NEZBRUVDNjU4MworOjEwMzA1MDAwRUE5RjNBM0REQjFDNTdGMDVDNjY3QURFQkI3QUIwQTk4QQorOjEwMzA2MDAwOUU1MTc3QjVBOTdGOUY2NTI1QTY3QTk2NzdBQ0E5N0ZGMworOjEwMzA3MDAwREZENTkzNENGNTdFNEQzNzk4RkE1RkJBNjFCNkU5NzlBMgorOjEwMzA4MDAwN0ZERjAyRDNGM0NCQjcyRDMxRDUwNzM0RkZEMEQ0RkY4OAorOjEwMzA5MDAwOEE5RDc3OUI5RTBGRjJBRjM1M0QxRjcyRjAzRTUzN0RBOAorOjEwMzBBMDAwNjhGQjRGNERGREFGN0M3QkIzRTlGOTU1MURCRjM0M0Q0NworOjEwMzBCMDAwMUY3NjcyODdBOTNFQkM3Mzk3QTlGRjg4QzA1RTUzQkQ3NworOjEwMzBDMDAwOThCQzZBRUE1RjZBRkY4M0E5NUVBRUJDNkJFQTNGQ0EzRQorOjEwMzBEMDAwNzVENEY0N0M4Q0ZBOTFFOUI5NEUwN0UzNzIzRjMxQjVBRgorOjEwMzBFMDAwOEY3NzdGMTk3MjRGQTcxMkU1OUIwQ0YxODBCRUYwQTg3NQorOjEwMzBGMDAwMDlDQjY4RDJDQ0NFNzU0ODNCOTYyRjE1NzhEQ0E5NDAxOQorOjEwMzEwMDAwOUY4RjdBMUIyMTIxQTlERURCRjk1NzM4OUE3RUEzQjA2NQorOjEwMzExMDAwNkYxQ0IzOUYzNDYyOTQ5RjdBN0UyQUY1NUJCQzUxOTRGNgorOjEwMzEyMDAwMTQ2MjAzOTQ2RTg3NTBCQTBCMDg1ODJBMDEyQTU5MTM2NworOjEwMzEzMDAwMjFERTEzODU2NTQyMjAxMURCMTMwM0YxNTgyNjA1N0E0MQorOjEwMzE0MDAwNjM3QjcyMjAwRENCOTQ0MDVGMkM1MzAzNTk1OEJBMDIxNQorOjEwMzE1MDAwOTc2Mzk5MTZFODhGNjVBRkMwMTA3Q0FGNzc2MDEwOTZDMworOjEwMzE2MDAwRTk4MTYxRDg5RTExQjgwQUNCQ0M0MDI5QjZGNzA5MTQ4MQorOjEwMzE3MDAwNjNBOTA2QzY2MTk5MTUxODgzNjU3NjYwMzJGNkVCMUI2NAorOjEwMzE4MDAwQjgxNkNCOUNDMDhERDhERTJGNzAzRDk2OTcwNEU2NjBCNAorOjEwMzE5MDAwNzk2OTYwMTY5NkI5ODE4NTU4RjYwRkNDQzdGMkIyQzAyRQorOjEwMzFBMDAwNkRGOERFRTU4MTVCQjFDQzBCREM4MUVEMDMwMjNGQzA0NQorOjEwMzFCMDAwNzI2MEEwMUVDQjJCMDIyQkIwNzQwN0Q2NjFCRjQxODE3OQorOjEwMzFDMDAwMzU1ODBFMEVGQzA0REI4NzA0RUVDNTMyM0ZGMDMzNkMzRAorOjEwMzFEMDAwMUYxQTc4MThDQjgyQzA2MzU4NUUxOUQ4ODQ2NTYxRTBFNQorOjEwMzFFMDAwNDkyQ0FGMEEzQzgxRTVENTgxNjdGMUJENjE4MTY3QjBBQgorOjEwMzFGMDAwMkMwQUJDODBFREMzMDNCRkMxRjI5QUMwM0U2QzFGMTEwNAorOjEwMzIwMDAwNjhDMzUyMEJCQzhBRURDNTgxOTdCMTJDMDlGQzAxREI2OAorOjEwMzIxMDAwNEIwMzg3QjAyQzBCQkM4QkVERTU4MTc3QjAxQzE5MzhDNAorOjEwMzIyMDAwOEFFNUE4QzAxMTJDNDcwNzNFQzI3MjRDRTAwMzJDQzdBOAorOjEwMzIzMDAwMDYzRUMxRjdDNjA1Q0U2MjU5MTFGODEyREJDNzA3QkVCQworOjEwMzI0MDAwQzBCMjVCREU0NUNDNTdGNjU4RDA5RkU1N0U2QTY0N0ZGRQorOjEwMzI1MDAwQzE4QjcyRDJDQUVGQzU0MTZFMzVFNkZGRDcwOUJFNTFBOAorOjEwMzI2MDAwOTQzNDUyOTMzQTMwNUU2ODJEQjQ2MUJDRjAyNkQyNjkzMgorOjEwMzI3MDAwNjVFN0QwRUQ0RUQwNEI2RDU3OUQ0ODg3MzhEQTFCQzlCNgorOjEwMzI4MDAwRkUwQzYzQkU4Mzk1QzcwMUNBQzU1MzE4OEY5QTkwQjRDQworOjEwMzI5MDAwMzcxOUY0RTk0REI0MTlGMjhDODg3NjBFRjMyMDI3RjAzMworOjEwMzJBMDAwM0NDODlCMjRFQTYwRDFBNTFFODIxMUFFQzI3RTdFMUI2MworOjEwMzJCMDAwQURDRkE4MjBEQTYwREFCRkYxMkExQkRFMkY2QTFDNENFMgorOjEwMzJDMDAwRkQyMDVBREU5M0M1RjI2NTdEQTk0QzVGM0VDQ0NCQzc4RAorOjEwMzJEMDAwNTNEOUY5Q0I1RjBCNTg5RUVCOEM1QkZCMzE3RTJBNEJBRAorOjEwMzJFMDAwQkM4MERGQzRFMDMwNzQyMENGOEY3NTc0NjY2MjdFRUNFMgorOjEwMzJGMDAwNDVCRUY3QTcxNEZFMUVFRkJGM0NCNUYyQzk1NEJBMEU4NworOjEwMzMwMDAwNkYwOUM5QUQ3MzA0RkJEMUY2QTcyM0I0M0YwM0YyMjBDNAorOjEwMzMxMDAwQjQ3REFGODVFMUMzRkI5NkM4RkQ4NENBQjg0OUU3RjEyNworOjEwMzMyMDAwMTNERTU4REU3RUQ5OEJGRDgyRjVERjQ1RjA0MzA5NTk2NworOjEwMzMzMDAwQzFDRTBGRjc3RTUwNzExREQ1ODcxMzBCNDUzNzk1MUNGNQorOjEwMzM0MDAwRTRDRkNCNzcwRTNGRDY4RkNEMEI3MTUwNkY4OTg4RjFDQworOjEwMzM1MDAwOEIxOTQ1ODdGNjI3RDJGQThDQTVGMTk4NzdERkJEQUU5OQorOjEwMzM2MDAwMTIyQjNFOUZFMDdBRUJCMjE3RTlENjZGQUFGQkNERjBBNQorOjEwMzM3MDAwNjNBNjc4OTMwN0VEQUVEQjM4OEQxMkNERkE4RjBFRkQ4NAorOjEwMzM4MDAwMzlEMjJCOEJGQkRFMDY5M0FCMjBGRkFDMzg2RUJCNjZDRAorOjEwMzM5MDAwRjU5RDJGM0Y4NjY4MzZBMjk5RTg5RUMxNkIxREFDMUYzNAorOjEwMzNBMDAwN0M3RjYyQjdDMEJDQjFCQzBGODUyQkVBN0Q2RkFDRUNGMworOjEwMzNCMDAwQUIxN0MwNzk1N0UzODBFRTYyRjIzQUM5RjlFMkNCMDA2RAorOjEwMzNDMDAwNEYwOTJFNEU5MjBFMDdEODMxOTFFMDI5Qjg1ODFDMzQ3RgorOjEwMzNEMDAwQUU0ODczNzkyOTdFMUFCRTE2MzE2RUJDMkZCRTQwMDFFRAorOjEwMzNFMDAwRkFGRjkxMjMyNzE1Rjg0M0UyRkQxQURBREVDMUY4NTZGOQorOjEwMzNGMDAwNUM3RTI3RjEzQTU4RkM1RUI1QzEzOUJBMURDQjk1Q0IzRQorOjEwMzQwMDAwREQ1ODM2MkMyRkM0NzI2REZBN0Q3Njg4OTc4OEM5OTg1RQorOjEwMzQxMDAwMDk0Q0EyMzJFNjYyM0M0ODlGREYxQTNGREI1RUVDMjY5NQorOjEwMzQyMDAwRTRDQjg3QkUxRTA3MjEyNDExRTIwQ0Q0NDRGODlBRDZCRgorOjEwMzQzMDAwNTc1MDlGRTI2NDJBQTNDRjM3NUNDNzFDQzAwRjI3NTNBNQorOjEwMzQ0MDAwNTU5Njg3NkY2MUU3QzYzMUY5N0UwREUyOEQzMTZFQTUyNQorOjEwMzQ1MDAwNDQ1MjgzRURGODk3ODRFRDlCQzExRjc5ODM3NEFDOUYzMAorOjEwMzQ2MDAwMEM3MEQ0RDg3RDhDN0E3RURGQjRCRUI4MUY4N0FCRkVEQgorOjEwMzQ3MDAwNUUwOERFNDNGMDJDQ0E2RTNDQjcxNkEzNjlGRkJDQzhEOQorOjEwMzQ4MDAwNzg3NUI5NTg1RTAyRDA5NzQ0RTlFQjZGQjA2RUIwMzdFQgorOjEwMzQ5MDAwQjUxODBCOENBN0UzQjc0QkVBQzQ3Q0FBN0EyMTdDREU3MworOjEwMzRBMDAwNjVCNjhCQzk4NzA2NDU1M0NFNzc4RTQyMTRFOTFGNDYxMQorOjEwMzRCMDAwNzlFQUM4REIxOTQyQ0YwRTk0QUY1ODg3N0MyRTJFQUYyNQorOjEwMzRDMDAwNzZBNDZBQjkyRTNBN0VGMzM1NUMwRUE0MjdBMDFDQTAyMAorOjEwMzREMDAwRURGNzVENEREN0JCRDNDMkZDMTQ2RjgyOENGQzQyODFFQgorOjEwMzRFMDAwMTA4Nzc5MkY3NjM1NkVEMjc5RjIyMDU2MkQ1NzM0Qzk1MAorOjEwMzRGMDAwMEFFNzAzNkExQ0MwNkIxNUNGRDc4MzFCQ0E0NjM5RjA5NQorOjEwMzUwMDAwQUZFQTE3OTQxNzNFOTYxNzE5RDI3RkE3ODVGMzU1NzQyMworOjEwMzUxMDAwMTRFRTRCRTRGMEQwREY5QkVFNjJGMkY4QzFBQ0NBRjFERQorOjEwMzUyMDAwMkU4QzhGQThFOTIwNTc2OTdEMjJDMDhCRUUzRjFERjhCNQorOjEwMzUzMDAwOEFENkFGQzVCQUQyNUQ5RjhDRkQ1REFDM0YyNkQyNUMwQQorOjEwMzU0MDAwODQxQ0E2RUZERDgwRUY0OURERTNDQ0MwQkFBMzdCREVBRgorOjEwMzU1MDAwOUI3MTlFQTRFRUJBMDc5RkE3QjNGRTE3M0I4RjVFNzZDMgorOjEwMzU2MDAwRUZGRkY3NEM0RTdFMkE2OTcxMDkxNDNFOTVDQkU2NTQ2NQorOjEwMzU3MDAwOTY1MUJEM0Q3OUQ5N0MyQ0RGNUJERUFFODE1QzNENEU0MgorOjEwMzU4MDAwRTU0OTAzODU2QjY1NzFERjI0RjA3MzI2OEZFRkVCNTBGRgorOjEwMzU5MDAwMERGNDNBOEZDNzM1RjdBRUI2OEUwNjdENTdCMjQ2QUNGRQorOjEwMzVBMDAwREM4MkZDQjRDMjE0QjdGQkJFQ0JDQUUzNEQ2QzFENTUyNAorOjEwMzVCMDAwOTRDN0VGQTQyNDM3NkZDM0ExQ0IxQTBDRjZFODZDRTJEMgorOjEwMzVDMDAwOTY4MURFRTdBQ0I2MDZFOTlBMThGODUzNjE2RDNCMkQ5QgorOjEwMzVEMDAwOUUxRjVEMEZGQjU4MkJGMkYzMEFDRUFGRjE4NEZCRjM3NQorOjEwMzVFMDAwNkE0QUU1NzlGNDBFNTk2RDIzOUUzMEYyQjgyNzdDMDhCQgorOjEwMzVGMDAwRjkwN0U1ODM0RjFEMzkxODk3QTU5NjlBM0REQ0I4M0EyRgorOjEwMzYwMDAwOUMyMkNEMzcyRjQyRkM1Nzg3OTMwRTZGQkRGREU4RkEwMQorOjEwMzYxMDAwMjEwQUIzQUI3RDI2MzhDRUI5NjcyOEM2MkJFN0YxNzhFRgorOjEwMzYyMDAwM0Q4OUI3NzNGRTY0RkRBQUU4M0MzQkUwM0Q0OTUzODEwOAorOjEwMzYzMDAwREVBMTFFNEVCRUU4RjM1NkQxN0ZERDM5MzgxQzdDMzk0MQorOjEwMzY0MDAwMUNENjVBOTkxRTBGODFFRkYxMERGRDYyNDEwRjg1RTJFNAorOjEwMzY1MDAwRUY2MkUxNUM2QjIzNzg5RkEyNzNBQjkzQzU5MTkyQTY1NgorOjEwMzY2MDAwRTNGOEQ1N0M3RTkyMzQwM0Q3NTNDREU3N0I3MTRGOEM0MgorOjEwMzY3MDAwREY0MkZCOTc2Qzc1NkUwNjNGRjg0Qzg5RjdDMTRBOTBBNAorOjEwMzY4MDAwNEY5QkFEOThDRjc2Rjc5RTc1NkZGRDBDRUU3RDZDQjJCQgorOjEwMzY5MDAwRTI5OUM5RkM5ODA3MEFFMEZDRjQyRjVDOEU1MjA1RDAzMQorOjEwMzZBMDAwMDZERjRGRjAxMEZENEYxMzYwRkM3OTg0OEQ3RjQ2M0Y5RAorOjEwMzZCMDAwRkZEODFBODdGMDNDNTlCNkE1NzExODJEM0I3NjJGQUU2RQorOjEwMzZDMDAwODBCOENCODkzREUzMEY4MERGM0MzRjlBNDg3ODk3OURENworOjEwMzZEMDAwMjgzMkYyOUZENzdBQ0M2QzFGNDhDMUJBRDhCMzNFMEZCQworOjEwMzZFMDAwRUE4NkY4RDE3QzlGRjU5ODkxQ0UxNzZFMzNENzhERjA4RQorOjEwMzZGMDAwQjIxOEUxQTU5Njk5RTFBNTk2OUJFMDI1RkNENkU5MTdCRAorOjEwMzcwMDAwMERGMDJBOEJFQTk3MDQ3QTdEQkY0QkM1RjFBQUEzNTYyOAorOjEwMzcxMDAwQTYwMDdDQUE3N0FGQzE3MkUxQjYyOEVGMzFDM0JDOEI5QgorOjEwMzcyMDAwOUJFMzRERjVEQTlENjk1RUEzNUVFOTNBRjg1ODJDRDAyQgorOjEwMzczMDAwRTExMjk3RTgzRDQ2RjVEQ0E5RTU1QTNERDgzMUE3OTc1NworOjEwMzc0MDAwOEZDNjUyQzdGRkUyRTYyQ0FGQzMzNDhFQjlERUQ1MjQ1NAorOjEwMzc1MDAwOEM2NkYyNTk4RDlCNzIxRTdFNURFMjkyNzE5RTBGQjc1MAorOjEwMzc2MDAwMzE3RkYzQzNFNTc2MkZDQzczNkFCOUUyNjVGM0JBQkM1NworOjEwMzc3MDAwQ0M4RTYyRjA1QUI0MkNDNjdCNkM0ODcwN0Q5MUM2RkQyRAorOjEwMzc4MDAwNjdBRjhGOTAxNjcyRDQ0RUYwQ0VDRUI5RjNFOEVEODhDNQorOjEwMzc5MDAwNzI0OUZBNTQ0NkZERDE2QUZEM0JEMDhEOURGRUVGMUM2NworOjEwMzdBMDAwQzY1MTI1QUNFQkUzRDYzNjhCNUVDODI3MjY2NEJCNjlEMQorOjEwMzdCMDAwM0VGQTlFN0FEQ0MwNkY5MUY1ODJGOTNCMTNGRDIxMTYyQgorOjEwMzdDMDAwODZGMjk5OUQ4Mzc4RTAxQzg0OEU3NzQ2NzJBQzg2MzhBOQorOjEwMzdEMDAwODI3RTBFNTIwQjEzRDFCRThCRUQxREIyODczNjdEREM3RgorOjEwMzdFMDAwRDJGN0JDRjdDQzI5OUVCMjQwMkY1N0RCOUI2NDUwQjY3MgorOjEwMzdGMDAwRDVDREZEQ0I4MDlGM0U2RUE5NEYwMUY5QjE1MEVDRkFCQgorOjEwMzgwMDAwNUVCOEZCNUVBNTY5OUM2RjdERDY0RUIzQkZFOEQzRDc4QgorOjEwMzgxMDAwOTkyNTk5Rjg4QzM4QkFGNzRERUJBNzIyRTQwQjhGNEYxNgorOjEwMzgyMDAwNjNGNjZDQ0RGNjQzMjM4N0QxRjVEN0VDM0MyQjYzREVGMgorOjEwMzgzMDAwNUE5QTY3N0M5QTYxRkYwMjNGMDc1QUIwRUQ4ODhDRjY2RQorOjEwMzg0MDAwQTdENTdCQzkxREU3QjNFRjdCQUNEM0UxMzJFNTFEN0E4OQorOjEwMzg1MDAwNDkzQkYwRTdFQzQyQTIzM0VDNzVFRjUyNzlGM0MxQUI5MAorOjEwMzg2MDAwNTYwMkU3ODdFNDJCREE4QjNFQ0ZFNDRGRTc5MkNBNTg0MworOjEwMzg3MDAwODBEN0VDOTY4NTI4N0YzRTc4NkVEQzAxOTY3RkQ0NTQwNQorOjEwMzg4MDAwMDBGNEYxMzFCMTYwREVEQ0M3RTRGN0IxNDMwQ0YwNUI2QQorOjEwMzg5MDAwOTYyNkVCNzE0NEJCMzFCRjg1MkUzMDBERjNEM0FCMUJBNQorOjEwMzhBMDAwREJFMURFOTg4RDQ4NUUyRTk3MDRGNkJEMUE5RjgwRjIwQworOjEwMzhCMDAwQUM5QUI1N0I4OTdEMDVFRTYzMzU5MzQ3NUVGQTFGRDREQworOjEwMzhDMDAwNkY2OTMyQ0JBNzc5MUJDQ0Y1MkEzMjI5MDVGMkJCQUI0NQorOjEwMzhEMDAwRUVCNzQyMDYxMTk5NkY5NDdGMTQ3RTMzRDM1ODFFRkJDNgorOjEwMzhFMDAwM0M1MkQ3MDhGNkRDMjMzMkM1MTM1REZGNkM4NTQ4QkQxQQorOjEwMzhGMDAwQTkxRTVBRkNGQzIzMDVCMzY4N0Q3OTFBM0JERkY5OTBCOQorOjEwMzkwMDAwRkIxOUYzQzEzQ0E1Q0YxNzJDRjNDOTVBNUVDRkZEMUQ5RgorOjEwMzkxMDAwNkQxOTMyNkQxOEMxRjE5OERFNUFBMERCQUQ0NDg1MzhCRgorOjEwMzkyMDAwN0U2RkY4NTc3NkU0RkRGNzZFMTFGMURDQTkzN0I0MUIxMgorOjEwMzkzMDAwRTRGMzlDRDVFNkZENUQ2OEZGQTFGQjI1RTQzRURDQzcxMgorOjEwMzk0MDAwODI2REQ3QTJERkE2RUY0N0M3OTdCRTFGRUJCNkYwRjc5MQorOjEwMzk1MDAwN0MxRkU0RjREQTdEQkVDQUUxQTdGQkRENEZBNjMxRkI5NAorOjEwMzk2MDAwNURBRjM3ODdENDdGMUQ1MkQ3RTlEQkNBRjk5QkQyRkQwMworOjEwMzk3MDAwOTM2OUM5QzBDRjlEMjMxOTlENzRDOEM2RjM1MDM5RDgyNworOjEwMzk4MDAwQUZGOTdDRkQ2QzlDNUY2OEJGNUY5RkFGNUY1NDcwQkNGQworOjEwMzk5MDAwNURFMUZBMkQ3RUZFQTlFN0MwMUY1REYwQUIwNzYyRTE5NQorOjEwMzlBMDAwMzBFODAzQTkyOTA1RjI4NDE2NkQ1RDE5MEI3MDNBMjlEOAorOjEwMzlCMDAwNzk2MzgxNkUzRUYwODlBM0MzQzFBQkIzMUI1RTlBNDNBQQorOjEwMzlDMDAwQTA3OEFGRDFFOUJGNjhDNTA0RDBFRjdGREY2QTU1QzBFQQorOjEwMzlEMDAwMkZBQ0RENjZGM0MzRjc5NzZBNUFFNkUzNzkwREFEMUZBNgorOjEwMzlFMDAwNjFGNTU1NzhBRkIyNzZBN0Y1M0QyMzVFMTczQ0ZFNDBGMgorOjEwMzlGMDAwMEFFNjc3MTA2RjZGNzY5RUVFRUYwRDlGMEVBQUQ5RjI1MgorOjEwM0EwMDAwRkU0OEYwOTM2QjQ5MjdEMjczRTg3QjMwN0YyMDAxRTVCNQorOjEwM0ExMDAwRjUyQzM5QUVFNzczM0Q2RTVBQ0I5QTQ4NkRDQkJBQjNFRAorOjEwM0EyMDAwMTAzN0FENkQxOTczMDJGOEJFOTY0OEVGMTlFOUE5MUE1RgorOjEwM0EzMDAwNjg5QUZBMkI0N0QyNzhERUREOTVFNDRBOTAyRjNBM0MxQgorOjEwM0E0MDAwODgyRjE5RTU3M0ZEMTMwRjBEM0M0MkQ3NzM2QUNCQUI3QQorOjEwM0E1MDAwQjE4MkQxNUZFNUU3RUQ1RENENzNGRTk2NzgxRUZENzAxNgorOjEwM0E2MDAwOUFEMkE5MzEzRjVFOTdCQkVBNEVCQTgwNTQ1QTZENjUyRgorOjEwM0E3MDAwRTUyMkFCM0Y3NjE4ODVFQkEyNEQ1NkJDMUZCQUU4QTlFQworOjEwM0E4MDAwQzc3RUYxNTNDODIzN0FDNzg2RTcxRjBCOUZEQUZGRDY5QworOjEwM0E5MDAwRDVCNEJFRjAxOTZCNTIwNURCODYwM0NFODM3NUJDRDQ1QQorOjEwM0FBMDAwRDJGRkMxRjk4NDhFODcwNUNGRUU5NzIxRkYwQkRBQzFEMworOjEwM0FCMDAwM0ZEMEYxQjFGMDk5MzY5OTBDRTgwOUJGRDJFNjM2Qjk5QQorOjEwM0FDMDAwQzMxMTA2MkZDRDQ3NDZFMjNEQTMyNzNFOTcwMUVGMUZDNgorOjEwM0FEMDAwRUMxMTQ4NkE1NkNGRjdBQjM3RUQ0NzNCMDZFMDg0NzhFOAorOjEwM0FFMDAwRTQ3OEVBQzY1QjBGN0NGOTI3RUNDQUM3N0UwQUM4RUQwQQorOjEwM0FGMDAwMEJFMTZCMUZFOEQ1NjRBNEVCQTc3N0QxNzU1NEZGQzkyMAorOjEwM0IwMDAwRTYwNjM4NTQzRjdENUIyQ0VDRTc4NDU0QzdFOEZCOTExNAorOjEwM0IxMDAwOTUyOTkwRTc1NjZERjVBNjI4NThCMkY2RUE0NzZGNDcwMworOjEwM0IyMDAwQkE5Qjc3RThGNjE0NzZDRjQxNEJFM0Y5MUQ2OUIwQ0YyNQorOjEwM0IzMDAwNUIzNjRFQzU3RDU2MTEwRkQyNUZGNTIzNjIyNUU0QzE3OQorOjEwM0I0MDAwN0MyNjkxRDFDRjg0RTE4RkVBNUU0Q0FGOUVEODRDOTExOAorOjEwM0I1MDAwNEJGNzc5MDJFNDY1NTJEMERGRDFFRjM1REZERTFEMDc4OAorOjEwM0I2MDAwNjFFNzkwOUZGMTczQzg2QjdBNTk0Q0ZBQTU5QjZFQjdDOQorOjEwM0I3MDAwQUM0MkI5RkE2MTg2OTYwQUU3OTMxNDBFQkExQzQ1Rjk2RAorOjEwM0I4MDAwMkExRTJBNEY2NTc4NjJGMjE4REZBM0Y0NTcwQUVERDA5NworOjEwM0I5MDAwQkZERDhBRTdDMjg2RjdCOEZDNjRGMzJGRTVGM0QzNzU3RgorOjEwM0JBMDAwNDc4MzNENzIyMjg1RTk4REQwRkRERENGRjc0N0UwQzIyNgorOjEwM0JCMDAwODY4MUNFMEM3Q0NFRjg3RUNCMUFDNkU3M0FERkZCQUUxMAorOjEwM0JDMDAwMUQwRENGM0ZGRDIzRTMyMzc4MEZGNDExNUQ5NzNGMTVDMworOjEwM0JEMDAwOUZCNzREMTE1MDJFRDg4ODNGMUM3RjZGQjE3MkZFMzZCMworOjEwM0JFMDAwM0ZBNzEyMDlFRDM5OUQ0RUU4RkEyNUY4MUU1OTkwNUU1RgorOjEwM0JGMDAwRTgzQzA5ODgwN0I0NTdBQUVFQTdFRjFCRUNFQzVBOThFQgorOjEwM0MwMDAwMTdGQkM5QzFGNkFDMjAxRkNGRTNGMjYwNEUyRkIzM0NDNworOjEwM0MxMDAwMjAxQjkzMkYyQTJFQjBDOEVBRkJDNTRGODE3RjI5QkZGNgorOjEwM0MyMDAwN0E1NUUwNUYyQkRFQkJGOTY4RkJCRUI3NkVBMDc0RkU3MQorOjEwM0MzMDAwNTFCM0NFQjc2Njc5MUFDQUI3RDUzQjZFQzdGODYwMjhCQworOjEwM0M0MDAwREY3RTk0NUU0N0MyRjI2RDNBQkYzNzE3Q0FCN0U5MURFRgorOjEwM0M1MDAwRkY1Njc5QUFDMzZGNUQwOEZDQTg3Q0ZDRjkyRTM1MzJBQgorOjEwM0M2MDAwMUM0M0U1RTNBNUJERDRCMEYyOTFGRUZEOTExNEY0QTQ4QworOjEwM0M3MDAwNDM5REZFNzRCQTVCRjBFNEUyM0UyMDg3QkFFOTUzQTdBNQorOjEwM0M4MDAwQkY2RUZBRDRFOTJGNzRCRjY2Rjg4NTNFOUYwMkM5NEUxNQorOjEwM0M5MDAwMDZGQkMxN0EzN0YxM0EyOUJFM0I3NzhCRjhCREE0MzNENgorOjEwM0NBMDAwNkE2NzJDQzQ3RjU2NDY5MTk5NjA4NzlGNTE3ODNEOUVFNAorOjEwM0NCMDAwRDUzQjkzRTU0NjkwMTM3QTdCNjcxNDhCNTc5RUE5RUMwRQorOjEwM0NDMDAwOEM4RDM3RDhENzQ3NUFDNTU4ODhFRjc2RjhDMkRGRTdDQQorOjEwM0NEMDAwQzA4QzQ0M0E3RjQ3ODRGQjFFN0EzQ0UyNEM3NEVDNDAzMworOjEwM0NFMDAwOUMyRjNBRDMwN0Y4MkExNzFEOTlDQkYyQzEwRjEzRjE3NQorOjEwM0NGMDAwM0IzRTczNTc1QzE3MEJGOTIxNjc1QUZCNEU5QzRFREIxQQorOjEwM0QwMDAwNkY3OTk5N0ZDNkNGQUI0OTY5MTRDRTczMzhERTRGMTJGNQorOjEwM0QxMDAwRUY4MzQ1NzQ3RjczNUE5OUZEM0M3NzdENzgzQUQxQ0YxNAorOjEwM0QyMDAwQ0RBQjFDNEI2NTkwNDdENDZFMEREMjA3ODFFN0VDM0JDMQorOjEwM0QzMDAwMEJENTFCNDNEQTVCQzcyMTNEMkQwOEExMjcwRkY3OEY1OQorOjEwM0Q0MDAwREUwNDdBODJCOEVCMjAzMjg4RkIyNzE2NjMzRTQ4QjkzRQorOjEwM0Q1MDAwOTgzNzExQkVDQjc5RTZBMDg4NzlFQjVEQUQyMjY5ODRGNgorOjEwM0Q2MDAwN0Q2RTE3N0MwNEY4REI5QjhDNzQ1OTQzRTU4NzMxRkUyQworOjEwM0Q3MDAwN0IwQUU4RUUzQ0Y3RTg0RUZERkEyRjA1NzdEMDJFOEI1NAorOjEwM0Q4MDAwOUU3Qjc3RTBDRjY4NzlFQUI5NzcyRTc5MDFFQUNGMUY3OQorOjEwM0Q5MDAwQ0U3Qzk3ODRGMUIzRjY3QzcxMzNDOEZGMzM3QjZDMDQxRgorOjEwM0RBMDAwRTMyQTdCNUVDQUJDMDNFQUJCNkM5ODc3NzRFNjZFOUIyMQorOjEwM0RCMDAwODZGNkY0MUUyN0U2RDE5REM5NjBGMUQ0RkFERDlGMEY4NworOjEwM0RDMDAwQzQ3Qzc0RDJDMEU4QUIzN0JCQjdENUQ1RkFFNTVGRjE5OAorOjEwM0REMDAwN0U2RDJCREQxNUU4REIzRDMxNjg4RkQ3RUU4QUYyODFGMQorOjEwM0RFMDAwOTM3QTY2RjdFNzA1QzZGMzhCRUZCQTlGMUE5OUM1RUY4QQorOjEwM0RGMDAwQ0YzOEM5NzQ4ODdCOUQ4OTY3NzFFQkRBMTdBRTdBMEM2RQorOjEwM0UwMDAwRjJFMTE3QjdCNEM5NzA2RkE3RjRCNzVGMEYwNDc5NzMwNQorOjEwM0UxMDAwNjYwN0IzMjM0RTVCM0IxRTI1NkU0MjYyN0FERjc2OEZDOAorOjEwM0UyMDAwOTVDMkY5MzREODc2OTQ1NzFFRUZERDMyMUVDRTM3N0ExQworOjEwM0UzMDAwQzI4NUMxRTEwQzg1MDNFQzhCQzJBNTFBRTQ2NDI0NzgyOQorOjEwM0U0MDAwNjRGRkM3QzJFM0VDQ0QzMEZGQTJENjJCRjFGQzIxMDgwMgorOjEwM0U1MDAwMTc0MTYzRUQ0RTlGNURDMEZEQjNGNjNEOUYwRjA0NzlBMgorOjEwM0U2MDAwRkM1MUYzMEFENEVGMTdEQTc3RjFGRjczRkIxNkZDMTc1NgorOjEwM0U3MDAwQjM2RkNGN0ZFQ0JFMTlGRDFGMDdGRDk0REM5MzBGN0E2MworOjEwM0U4MDAwRDJGOUYzREZDM0ZBRDM0RTM3QUVGNzIyRjlERkRCOUI2QgorOjEwM0U5MDAwQzUxREZFRjNGNkZGMkRGMUJFNDNDMEZDOTUwQkUxRkQwMQorOjEwM0VBMDAwRTdGRkI1Nzg3Rjk5RTNEREE5NDA5RUM0OTlERDVGNjdBMAorOjEwM0VCMDAwMTJDM0ZFMkZCNEVGM0RGRkE1RkJENkVEQTA3NjRCOURDMAorOjEwM0VDMDAwOTI0RkQ3RjcwRTY5OUE5QTQ1Q0JERjY5OUYyNDgxREIyMQorOjEwM0VEMDAwNkE4QjcwNEU3M0JBMzdGMzJCNkMwMkNCRkIyNjUzMDVGQgorOjEwM0VFMDAwM0RCRUQ0NkVDQTdCNEFBRjQ2N0I2MzgyNzYwRkZCM0VGMworOjEwM0VGMDAwOTM1NEQ3MEU3OUE3RUQyNTczREM2QkIxQzdFMEI3M0RCRQorOjEwM0YwMDAwNTA5RjMyOUNEN0NERkVENjg0OTI3MTA3QzFDRTdCNjM4MQorOjEwM0YxMDAwMDU1RDFGRTRGOTY1NDgwQURDRTU5OEE4ODk2ODE3RDJCMQorOjEwM0YyMDAwMTJFREMxMzczMzQ3NjJCRjg5ODU2NjdGRTNGQTEwM0ZFMAorOjEwM0YzMDAwRTFCQUU5RTZFNzUzRjlGOEQzQzg3REM5MTBBNzlCMzY4MworOjEwM0Y0MDAwOTdDNUU5QUUyMzc1MkI4RERGNTE5QjFBMzJDRTJCMTAwRQorOjEwM0Y1MDAwNDAzM0Q4OTFERjE0N0U2QUJBMEVCRjI1MDgwRjUyQUNFOQorOjEwM0Y2MDAwOUZEQjVEMDA3RTg0QzFCQjdEQ0EyMDk2NUYyQ0I5MTlBMgorOjEwM0Y3MDAwRkNBNjJENzY2M0RDOTRGQkExNTZGRUJFRDVCMUJBMUQxRQorOjEwM0Y4MDAwRjhENjRBQ0NGRUE3RUU0NzVFMDhDRTg0RkJBNzM4NUU4MworOjEwM0Y5MDAwNzYxMEVFNTY0RDQ0RkZENDMwMkVDMjQ1QzdDNzM3QzUwNAorOjEwM0ZBMDAwODM4RUJGNkY4QjhGMkVDMDg3RTE1QzU3MkZFN0RCNjc1NworOjEwM0ZCMDAwMkQ4NDczMDgzQkU0QkJEMzdENEQ1Q0NGRUU4RkQ4RjNFQgorOjEwM0ZDMDAwMDQ4NDYzNjVBMTE1RUY0REJFNkZBOTJDMDBDM0I5NjJDRgorOjEwM0ZEMDAwQzg5NTM1M0Y2NEMzQkEwMTNFRjMzOTFDQUI0ODFEREFCRQorOjEwM0ZFMDAwOURFNEFCNzNFNzhBMEFGMEY0MEZFREQ2RjkxQTIxRTNFQQorOjEwM0ZGMDAwQTk1RjUyNTUyNEY4QTNFOUJFRTc0OUM0MUIzNzE4RTI2QworOjEwNDAwMDAwQTAwMjc5Q0YxODA3RjU5OUVCRjA3NzRENEE3MDlDMEIxOQorOjEwNDAxMDAwRjU4RjI0MUZGRUQ5RTVERkE4M0M3QThGMjJGQjA4OTQ5OAorOjEwNDAyMDAwOTgzNzQzMjRBM0ZGMzhCMzk1QzFCMTc2OTFFMENCNDZDRQorOjEwNDAzMDAwM0FGMjVCOERFN0JGMEZBNEIzNzhFM0RGRUUxQzgyNzIyOAorOjEwNDA0MDAwQUVGOEM3MDNFMjk4NUY5QjhGRjkzQ0I1RENERUVGRjI3OAorOjEwNDA1MDAwQUE3MTEwQ0ZFOTZBRUQxQjA3RjE5QUFFODNBNUIxRTExMQorOjEwNDA2MDAwRjI3ODBFNzFCRkYyMEZDQkVENTg5RTI5MTM5QUM0MzgyNworOjEwNDA3MDAwQkM3NzMyMDFGNTcwNTkxNDAxQjkxM0ZBREVFREU5N0ExMworOjEwNDA4MDAwNUNBNjhFOUQ0QjEyOTY4NzVGQzVGNzMxOEZCRTFBOTczRgorOjEwNDA5MDAwNjBDMERCRkFGMTFGNDgwMzdCRTIwMUZFREUzMzlDQUIxQworOjEwNDBBMDAwN0M1N0Y4ODIxRjBCNzAzRDE0RDUzMTMyRENGNzA5NTc2RAorOjEwNDBCMDAwNzFGODU1RUNGRDQyODZGOEMxQTRENjJDRkNCRUU0QTRGMAorOjEwNDBDMDAwMzJEMTk0QTdCQTNDOURGQjUzNDNDODEwNTg1N0M1REU2NAorOjEwNDBEMDAwMzFCMTU3MDE1RTBFOEFFRTI4MEFERkRBRDZCM0IyMjc3NQorOjEwNDBFMDAwQ0NGOTVDMjgzQzYxN0M4ODIzMUZCNUJBQUIwMDlFNDdBNQorOjEwNDBGMDAwRUY4OUMyRkJGRkFGRjNGM0EyM0NGRTVENDhGODc0MTBGQQorOjEwNDEwMDAwQzRDRjlBRDI1OTNFQzhGQkU5MkM4RTNFQjlBMkQ4OUFBOAorOjEwNDExMDAwNENFN0NENkI1MTA2NDE1RTU5MkZERUZGRkQ3NDE1OUZCNAorOjEwNDEyMDAwRjdFNkVGRTlGRDdBMkQ2MkZEOEVDODRBNERCOEZEQzc2RQorOjEwNDEzMDAwNjQwQUZDM0NDNEZEQkQ0MkUxM0YwRjZGQzUzRjc2RkEwNworOjEwNDE0MDAwRTE1RTVDNTc5OUMwRUZDRDg0RDIzNTQxRkVFODFBMkQ2RgorOjEwNDE1MDAwRjg0MEZGODIxRjhCRjUwQTAxRjVGRkVCN0FERUREMjRDNAorOjEwNDE2MDAwQTYyRjc1QkEwRjg1RjM2RTBFNjc3REZFQkZGMEZBNUU1RgorOjEwNDE3MDAwQUUzNzc0MzhFQkYwMEQ1REFGREU5RkNBQUIxMUM2Nzg3OQorOjEwNDE4MDAwQ0JDNDlEODM5RTA2RkJBNEE2NTU1MDJDNzRBODFBQTlFNworOjEwNDE5MDAwNDMwNjNFQUNERDc5QUYxNUNFMTdBRUU3QkZDRjQyQTRFNAorOjEwNDFBMDAwQ0E4MUM2RjNEREY3RDNEOUVGQkNFQzFCM0MwQ0VEQzdERAorOjEwNDFCMDAwNEZENjMzRkI1ODlCN0IzNjE2RUNBMEQ3MkRFRURGMEQ4OAorOjEwNDFDMDAwMDM3RTdDNDMzNDdERDczQ0I0N0M3N0I5QjJBMENDNkEwMworOjEwNDFEMDAwMUMzNzBCRDczOTc5NTFCMTE1QzI0MzM3MkU2QUIzQTZCNAorOjEwNDFFMDAwMUFFOEU5N0RDOEMzMUExQTZDRUZCNTQ4QzVGQzQ1M0ExMAorOjEwNDFGMDAwMUZBRUMzRkIyMzFCODE3QzhDQkNFNkY2OTIxOEZBRkMzNQorOjEwNDIwMDAwQzZCQTc4NDY4N0Q1Q0Q2RDMyRDZEOTc3ODZGNUY5RjQxQQorOjEwNDIxMDAwNzk0MkY5Njk0QTQ1OENBOTNFQTdCNDIzMURFMDUyNjE1MQorOjEwNDIyMDAwRjMyRjc1ODdBMTUzNkY4NjdFQUVGMjBERjU4NDQ2RTlCNAorOjEwNDIzMDAwNzZFMEZGMEY3QUUyRUNDODcwREY0MTlEOThEMTQzM0ZGMgorOjEwNDI0MDAwQTQ4NkQzMEY0QjU2QThBOTAwRkYyNUJCRkJBNjAyNzM3QgorOjEwNDI1MDAwMkM3OUI5M0MyNTlDN0U3ODczMzkzQjNGM0NDQ0YzMkVCRQorOjEwNDI2MDAwQ0Y0Q0ExRkFFMTBBODM3RTk4MTI4NUY0MTFGQURFNTU0QgorOjEwNDI3MDAwMTkxN0E5MUY3NDdDRkQ5QkU1Q0M5QkEwMUZDMkYwNzU4QworOjEwNDI4MDAwNDU4NjU5M0Y0QzZCOUQ4NUZBNjFEQTE0OTFBODg2Nzg3MgorOjEwNDI5MDAwNUM2OTA2OEZERjQ2RDQwRkM1MjlENzYzRERFQThFMDkzNgorOjEwNDJBMDAwNDMzNzZGNzJCRjA0RTAwQTI1Q0MwMzdBRTI4RTBDMjZGNgorOjEwNDJCMDAwRjc0M0Y1NDUyNDc5QUU1Q0FDM0NGRjVGODJCMzJFQ0Y2QgorOjEwNDJDMDAwOTc1MEZGODVGRDBFNEUyODFEMTI5NEQ3NEJBRTE3RjA2OAorOjEwNDJEMDAwRjc0Qjk2RUM2NkYyN0NDOTREM0MyRTE5MjI1RjJCNDFDMAorOjEwNDJFMDAwQkVFNjFCRTUyQjdCQkZDNkMzRjQ0MUVEQ0VBQzg3NjZCMworOjEwNDJGMDAwRDBFNzM3MzQ1OURENzZEQUZGODZBMEJDMkQzMENBREIzMworOjEwNDMwMDAwM0IzMjI0MURDRTk5NEExOEZDNEU5RjExNDM1NEIzQkMzNgorOjEwNDMxMDAwQ0EwMTM5NzU3NEQwNEI3OUNGMDJEREJGQ0VFRTk5QkQ5RAorOjEwNDMyMDAwQ0ZGNUY4NkI4MzVFQ0E4Nzc4RkFFRkY5Qjg5QjM5MUQzMQorOjEwNDMzMDAwOUQ1RTRFMTY5NDUxMzg5NENFNjVGNkYwRTJFRDIyQzJBMQorOjEwNDM0MDAwQTFBNjg1RDk3OTM1REIwNEJDQ0YzQjcyRjAxNzc4NkUxNgorOjEwNDM1MDAwQjg3MDM3M0IzNzg0RUZGOTE2MUJGMEI4RjBGNThFQzYwRQorOjEwNDM2MDAwREVGMDdDOTM4MEU3OUU1NUVFODVFQ0RFREYwNjE2MjdCNworOjEwNDM3MDAwQjZEM0ZGMjA1RjYyNEQ3NEVDNjY4Mjc5M0ExQUM2OUIxMQorOjEwNDM4MDAwMTc3M0I4NTVEODNBMEZDMEZCMTU4RjBCRUU0RDI4RDdEMQorOjEwNDM5MDAwQ0NGMUU5QzUzOTYzM0YwMEJGNjBFMUI2OTA3NkY3MUEwQQorOjEwNDNBMDAwM0NDRjU4MEM3MTY3ODMxRkQyQzZGNzc3OEJFOENGN0I2MQorOjEwNDNCMDAwMTZGMjAyN0YyNzg2RkRCREIzQjY1MDM4NTQ3RjQ3MzhDQQorOjEwNDNDMDAwMUNBMjcwQzhGRkY2NzBBODZEQkQxN0YzNkZCRUVCRkVBMAorOjEwNDNEMDAwRjc2NTcwRkI3MDMwQzkwNzdFNzlERkEyMjFGRjdCNUYzNAorOjEwNDNFMDAwMTFGMTVFRjFEQzdCRkJBNTFBRjM5NDBFNjUzMEJCRTJBNAorOjEwNDNGMDAwNzU4QkE3MzEwREZBRDVCMEZCQzdGMzM2M0VCMzFGQUVCMAorOjEwNDQwMDAwODZDRjY4MjY4MzIwNkMzRjZGODM1OTRGNzZFQkU1MTY4NQorOjEwNDQxMDAwMTVGNUVFOENCQTY3MDRGODlFRkYyRDIyQzFERjAxOUJEMworOjEwNDQyMDAwMzNEOEU2ODFGM0Q3NDM1MTlEMjhDRjc0M0FGQzEyRTg4NAorOjEwNDQzMDAwOTBDMkZEMEIzRUVGRDE1RTlENjVFODU3RUMxNDE0RTQ4RAorOjEwNDQ0MDAwMTNGODlFMDZENDI5MUVBMjYwM0Y1NzdEM0U5MkMzMURERAorOjEwNDQ1MDAwRTMzM0I1M0IxOTlFNkEyOTVFODBDRjQ2NTI3QjE3RjQ0MQorOjEwNDQ2MDAwQzg4RDU0RUZFMDc5NTk2QjlCMTVGQTU3RDM3RTg5Mjg5NAorOjEwNDQ3MDAwNzdEQ0U4RUZFQUZBMDlDRUVGOEE1MzBDNzhEQjdEODQyQgorOjEwNDQ4MDAwRDFFRjU2QzE0REMyRTAyRDk3RkU3NzNFQkM0NUMyOTc5NQorOjEwNDQ5MDAwNkUzRjVDMkNERTc0Nzg3Q0E5Q0I2RjhFQkY0MzUxRURGMAorOjEwNDRBMDAwMTU0M0YwOUM4QUZEMEUxMDY5OERDNzczOTU2MzREN0Q5MQorOjEwNDRCMDAwMTE4RjUxOTk4MkU5QkIzMkRENzgwNUZENjg4ODJGNUQ0NworOjEwNDRDMDAwMEIwQkM3MEZENzQ3NjE5RTFDQ0U5QkNERUMyMUEzN0M2NQorOjEwNDREMDAwMDlGNUEzNkI0OTNCREEzNTYyOUFFN0UxNzQ0MzVFRDg4QworOjEwNDRFMDAwMzQ5RUJGRDI3REFFMUJFQzM3MzkyMzM5NzIzRkUyMkFBRQorOjEwNDRGMDAwQzFGMzFGM0RCRjE2N0UzOTBBRjNDMTc4N0Q1RjQ2QzEwNworOjEwNDUwMDAwRTExOTc0QkY5RkFDMTZGMTdFRjI3NTE2RjVBRDIyRTA4RAorOjEwNDUxMDAwRTNCNTU2MDI3NEY5Qzk2QjU2OEREOUExMzEyODg3Njc2NgorOjEwNDUyMDAwQkQ3RUQ0MEFBMTkxNTk5MDVGNDBGQkNEQkE4QkM5REIwNworOjEwNDUzMDAwQTMzMDE4NkRGQjEzRDU2MzFBN0NCNzg0MzQwRjg1QkM4OAorOjEwNDU0MDAwRkQyOUVFQjY3MkM4REI5RTlBN0Y2ODI1OUNEMzREMkU1RQorOjEwNDU1MDAwNTVERTdBMEJFMEJCNDYyNDAwREZGNzU2OTdBMkJGNzIwOAorOjEwNDU2MDAwREJBRDAyRDJGNURCQ0JGMUI3QjBDOEQ0Mjk1OTZGQkRCMgorOjEwNDU3MDAwNDVFN0JENjk3NTMyOUVCM0NERDBGNjk3MDNCRENEOTlBMQorOjEwNDU4MDAwRTg3NEMwMzlEREI4NUM5MTc4MEM3MEJDODlCNDYzREMyOAorOjEwNDU5MDAwNjI0NkREQUQ1MzYxQkRENTU0MkY0MERDQjVCQUY1NTA1MAorOjEwNDVBMDAwNzkyQUQ0MzcwQUY4M0I2QUI1NUU4RjBDNTdBMERBMzcwMAorOjEwNDVCMDAwOUM5NTIxRkU1MjQ1RkIwMTdBNkEzN0IyN0VCNTVCMDRCOQorOjEwNDVDMDAwQkNERjUzNDVFNTAzRUNBRjZBOEI0MEUwMjI0OTNCQjVDNQorOjEwNDVEMDAwRkZFQzZDNUM5RjlEOEVEQkJFOTFCRTRGRUJGM0UwN0RFQworOjEwNDVFMDAwMTg3NzRCM0NGRURFNURFRDZCRUM3RTUwNTVFMThBMDNBNworOjEwNDVGMDAwMjA5RkFBRTg3QkY0MzE2OURGNzIyQjhFMzc3RkEzNDBCRQorOjEwNDYwMDAwMjAzNUI4QkEzMEVCNDc4NTMwREU2QjU2RkMyRUM4RTE1QQorOjEwNDYxMDAwQjY4NzY1NThGN0NENzRCRTM0M0FGRTFDQjFBMzFDRjNCRgorOjEwNDYyMDAwQUNFRjEwMTRDQzgzRkVFQTA3QzgwNzY3MzgxRjkwRDc5OQorOjEwNDYzMDAwOTYzMTNFMTM3ODlEREI4NUJBN0VCQzM3MzM5QkU1QkI1NAorOjEwNDY0MDAwMkY1QkQxMDhGQkVBRjAyNjY3ODE0QjU0QkJGM0FDMEMxRgorOjEwNDY1MDAwNzZERUIxRTVGMEUxMTk4QTM3OUUwN0I3Q0Y3QjU0RUVERAorOjEwNDY2MDAwMzBDOEE5QTczM0ZCQjJFRkU0RUYyQzQ2M0VCRjg1NTQxOAorOjEwNDY3MDAwRTJCOUI4NjcwNUQzQ0I0NzU2NDZGOTA0QjA0N0FDMEE1MAorOjEwNDY4MDAwRUFDRDdEMkIyRjdEMTBGNjdGRkEyOTJCOUU5NzlFQ0VBQgorOjEwNDY5MDAwRThDMEY4RUM4OThENTZGQzZFNDhGRDQ2MTFFNUM4ODlFNgorOjEwNDZBMDAwRUQyQzJFMjQzRTMyNzU2NDFBQzA4RkNBMDFBMEJCN0Q0QQorOjEwNDZCMDAwMUI0QjY1OTA4NzI3N0MwMkJFNUZGQUM4RUQyOTJDRUU2NAorOjEwNDZDMDAwNkI5NjFGNTVFQTAyOTQxNzhGNDQzMUY5MzA2RjQzRjgwNworOjEwNDZEMDAwRjNENTg4RjI2MkU5NDgyNkRGNDNFNEMxRTJGNDQ2OEM3MAorOjEwNDZFMDAwRkI4NUNBODk1QUUyRDBFNUMzNjBBOEI3RkJEMzkwN0VBOAorOjEwNDZGMDAwNkI1RUIzMTJCMEVGNkEyNEU1RTYwRDQwMzczM0EyRTBGQgorOjEwNDcwMDAwMjQ5OUYyODU3RjNGQzhCNzRGN0M4MkVBQTVDRjZGOUM4MgorOjEwNDcxMDAwRjk5QkExMDBCRkUzMDA2RkUwOEJGNTg5NzhCRTVBRTVGNQorOjEwNDcyMDAwOUI4NTcwRDVGMzExRTc2RDMwRDNCMzlFRjc3NEJENDcwOQorOjEwNDczMDAwMENERUYzQTFGRkJCQjEzQTg2Njg4NjdFODdFRkEyNzREOAorOjEwNDc0MDAwNDlFNzlCQjk1M0MwRUYyMTFEQkVFQkM4ODFEQkYzQjEzNAorOjEwNDc1MDAwQUUwMDFERDYyQ0UzN0E3NUJEMTNFOUY2RjAwRkNFQUU5MAorOjEwNDc2MDAwMDRCQUJDRjk0RTAxRDc0RkJDOUU0NkQwMkIzNTFCMDQ3MgorOjEwNDc3MDAwMTVFMjlBRjNFRTY0RUZDRkEzRUYwM0JEMUM3RTk4RDE1MAorOjEwNDc4MDAwMEZBNTYzMTVFOEJDNjZFM0JEMDdCMEZGMTY0MTg1RjFEMAorOjEwNDc5MDAwMEY2RjlBODU3QUI4REEyQjEyN0NCRUU1MDhEQUNCNTQxMworOjEwNDdBMDAwMUY2MERFRDAzRUFGOTgwMjc0NUVEMzYwNTMwMEFGM0ExNAorOjEwNDdCMDAwQkRFOEY0Nzc4NDdGN0Y5QUQ4REQwMzI3QzNFRjUzNjQ4NQorOjEwNDdDMDAwQUFFQ0JFN0MwOEREODlEM0IzOTBCRTZBQjc1QjkxNUU2QworOjEwNDdEMDAwNkFCRDhDOUU4RTNDMjUyMjFERUU1Qjc5REQ0OEEwOUYzNAorOjEwNDdFMDAwRDM1Qjg1MDhGNDQ3RTkyQjNGNDg1RkUyMjM1NjdDN0Y4MworOjEwNDdGMDAwREUxMzJDQkVCMDZGMjNBM0VCMTMyRENDM0UyRDdEQTQ3NgorOjEwNDgwMDAwMUZGQTM1RjM1RUI3MTIxNjdGMjAwRUEzRkQ3MTIxM0ExMQorOjEwNDgxMDAwMENBNUJCMUU3QTg5RDM2MTI0QkFGMzU4OUJBNzQxRkUyRAorOjEwNDgyMDAwQzFBQ0E3RTlGQUQ1MjBCQzRBMUI3RjgwNzE4MEQyQzZGMworOjEwNDgzMDAwRUI3MUJGM0FGRkMwQkQxNkM4REI5OERCQjQ4MkU1MzMyRAorOjEwNDg0MDAwNEEyQ0JGRTcxQkFGMkI2NDFEQ0IzMzlENDFGQTE3NTk5MAorOjEwNDg1MDAwRkU4OTlGQUVFM0E1RUQ4RkExMURGMEYxMkY4RjYwN0U0NQorOjEwNDg2MDAwRTNDMjE3MjhGRTY5RkZEM0RCOURDNDhGNzZCNjBGRTU0MAorOjEwNDg3MDAwQ0M4MjE2MTFGMzRCODlFNDJGOTg2Q0I4QkZBNUU3NjU3RAorOjEwNDg4MDAwMkNGQzk1MTNFMUJFNjA4N0NENTc0MURGNUZGMERDRDE5MgorOjEwNDg5MDAwODE3ODRFN0UzN0IzNTNCREJGNjRERjk5MjFERThFODFCMAorOjEwNDhBMDAwOTMyMTNGNTM2MkY5MjFBMUZBMzc5MEM5RTIzMEE3N0VFNAorOjEwNDhCMDAwMTM4M0RGNjMxMkI2QjVFMTM5RDM4MkU2RUJBQzM2NDMzRQorOjEwNDhDMDAwRENGMjRDQTYxNUU3QTVGREQ4M0QzMzhBN0YzODVGODQxRQorOjEwNDhEMDAwRjUxOTdGNEY0MkNGMEIzOUY1MDRFMzlGMDUzQkFENjhENworOjEwNDhFMDAwMUYyREQ4QjYwOUUzN0RCNURCQ0U2MkZFNkNFOUFGOUUyNQorOjEwNDhGMDAwOEEwNTM4RDRFRTE0Q0RGOTUzREI0NEJGMERGM0JDQzRBNAorOjEwNDkwMDAwMjMzNkY2NUQwRTUzMUU1MzREMEJCQkRGNTFEM0NDRjM1NAorOjEwNDkxMDAwODQ0MkYyNjcxNkZFNkFGNzczNUUwQTlBODVDRjNFMUVERQorOjEwNDkyMDAwMEJGQ0Y0NjFGQkQ2NTg4MDI3MUQwRkYzOEYyNjE2NDYyQgorOjEwNDkzMDAwQzg0RkJBNTA1RTUyRjMxQTlFOTczNDFFN0ZBNzIzMzQ5NQorOjEwNDk0MDAwMkZFOTQzRjgwN0Q1RTM5OTdENDJGMkJBQjYzMUI5NDU2QworOjEwNDk1MDAwQjE1RjEwRUUxRTkyNkVCRjJDN0NFQUIzNDcyMThGRjYzQQorOjEwNDk2MDAwRDQ4RThGMUU4NUY1MkZGQTlGNEYxRTg1QkMwRUIyMjc2MQorOjEwNDk3MDAwNEEwMTdCQTJGNjk3NkY2MkZFQTFGRTVFNjExRjY2NEY0MQorOjEwNDk4MDAwOUQ3RUUyNzFDQ0RGM0NGRDhFMERFREMyRDNCQjRGNjQ0QQorOjEwNDk5MDAwODJCRDcwRkE5OTJGNTIyMDJGNzNFOUVFNzI4QzRGMkM0MgorOjEwNDlBMDAwRkQ3NTI5REUwRjhERTQ2RjAyN0RGQTJFMjI3RjM0MTQwRgorOjEwNDlCMDAwMUZGQjVBNDRCRjgzQUVGM0UzQjc2REM4RkZERDc5NjZEMgorOjEwNDlDMDAwQ0Q4QjU5RkU5RUNBRjNDQkI2ODdDRkQzRDVGM0ExNkE2MAorOjEwNDlEMDAwNUEyNjRGMUMwRUYyQUU4NUU5RjVFRUZDQTgwQkU1OTVDNAorOjEwNDlFMDAwRkQ5MUUyRjU4QThCQzBERjc2OUUzRkQ4M0MzRTZDNUUzRgorOjEwNDlGMDAwRDlDN0YwMEY4QUE3NjkyMUY4RkJBQ0U1OTY5RkZGMTQ5MQorOjEwNEEwMDAwOUVCNTg0QkZBN0FERjNGNTg1RTBBNkU3MDFGN0VEQTM1QQorOjEwNEExMDAwQ0RFQTAzN0NCNEUzNDlDQ0UzMDNCQzU1QThBMEZGM0YzNworOjEwNEEyMDAwQ0I4NEY4RTY0OTZCMjdDNjBEM0I3N0RCMTRDOEY3NUFGMQorOjEwNEEzMDAwQjBGQjMwRjJDQkU5NUYxRkMyM0M1QkMyRjM3MTRGOTMxNgorOjEwNEE0MDAwRUUzRjk2MzdDOTYzMTdCNTVCOUMyQzFGOERDMzFGRjJEMQorOjEwNEE1MDAwRDVENDU4NkNFNzc5Njk4QzhFRjU3Q0I1NDg3OTZBMEZBNgorOjEwNEE2MDAwRjVDOTY2RjE0MzlFOUZCQzU4NkQ5NzE1NDcxMDVGODA0RQorOjEwNEE3MDAwMUZBMTEwRjA3NUM0OTRGRkE3RUYzQjc0M0MwNUUwNzBENAorOjEwNEE4MDAwQTUzMUZGMzI1MjNFMjBCN0QzN0JFMDhCQzlFNUQzOUJFMworOjEwNEE5MDAwNzgzRTY2Nzc5RTI1MjFFOTgzMjEzRjg4RTlDMzVBOUZBNgorOjEwNEFBMDAwNzAzODFDN0VGNUZDQ0JGQkZBNzBCRjUzRTc0RkRGQzVCNworOjEwNEFCMDAwRTU1RDVFNzhERERGMEUyRTBEN0REOEZEMDAxRDNFQTc4NQorOjEwNEFDMDAwQkUwQTJGQTc5RkUyRkM0RUZEOTZFRDdEMENGRUNENEM1RAorOjEwNEFEMDAwRUVCN0U4Nzk2N0ZBN0ExQjlCOTk1RTNFQjU4REQ5OEQ2MgorOjEwNEFFMDAwQTFGQzVEMTNFMUY3QjQ1RUU4QzNFMjBEMzUzQkRCMDZFNAorOjEwNEFGMDAwODIxQzNBQjVGNzM3OUNFRTdDRkMxRUNFMTFEOUNCRTU3MworOjEwNEIwMDAwQjZDRjI4QjcyM0ZDN0VEOTdFM0UxRUY1NzdDMzhFNTdERAorOjEwNEIxMDAwQkJGRDZDRDhGMTNFOTRCNEVCNjBGRDFGQjYzMzNCRTRCMworOjEwNEIyMDAwQzM2NjMxRUNFRjIwRkNBQThGRDVFNDA3MzYzQTY1RjQ3MgorOjEwNEIzMDAwQkJDNEQ4Njg5NDQ3NEI5RDg1NkZDMzc3REQ5NjNBNjVCMworOjEwNEI0MDAwQ0M3N0E4NUZDMUYzMjNFRTcyRTNFRjc4RDQzQkM3RTJFMgorOjEwNEI1MDAwRjc0QjU3MDI3QzBDN0VBODU1RjFFMEVGNEU1ODVEOTU1RgorOjEwNEI2MDAwRjlFMDVGODVERUVCOTQ5MzJDQzQ2N0M0QkZFNEM1RkIxQQorOjEwNEI3MDAwQkQxM0IyM0Y5NzQwRUZCNDJGMzdERjFCNjk5Nzk0RkQwOQorOjEwNEI4MDAwODk3NEJDRjYzMkMxMERGNjZFNEYzQTMzOEY3RkFEMjY3NQorOjEwNEI5MDAwOUFFMjY3MTBBQjg2N0Q3NUI5RDlGN0QwOUMxNkJGNDJGMworOjEwNEJBMDAwQkIxMDY3NTRCQjBCMUQzRDk1RkQ1RTM1RkM0QzE3OUMzRgorOjEwNEJCMDAwODNBRjVENkVDRjgxN0I1Q0IxQzQ4RERGMTk3NkJBQkJFQworOjEwNEJDMDAwRUZDRkUwNzg3MTI0MjQ2RjlCRkY1RUI1ODMwQjk1Mzg5RgorOjEwNEJEMDAwQTJCNDQxREMyMjNBOTdGREZFODM0MkEyRERGMEZEQTJBMQorOjEwNEJFMDAwOUZDNDZBNzhBRjY5QkREMzgzN0EzODIyREZCOEQ5QkQ1NAorOjEwNEJGMDAwMUEzRDlFMTQ1N0M4RUU1MUZFNUZCQkVCQzQxNjAwODBGMQorOjEwNEMwMDAwMDAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkI1N0RCNQorOjEwNEMxMDAwMEI3ODU0QzVGNUY4RENCRDc3Mzc5QjY0MzdEOTkwMDQyMQorOjEwNEMyMDAwQzJGQjZFREUwOTIxNTkxRTA5QTgyODM3RTE2MTEwRDBBOAorOjEwNEMzMDAwMDUxMTUwNTEzN0UxRkQ0QUUyQTM5NkFBOTUwNTYyMUE4MworOjEwNEM0MDAwMjk2RDgzODA1MjhCQkFEMDUwRkQ1QUI0ODBCNDgyOERDNgorOjEwNEM1MDAwNzYwM0QxNjJBQjM2QTA1NjZERDUyRTEwMTE5NEM3MEFEQgorOjEwNEM2MDAwOTQ4RkZBQzNGMjlGNzM2NjI2N0JFRkNERTY4MUVEM0YwQQorOjEwNEM3MDAwRkRFQTMwRjdDRTlEQzc3OUNGMzk2NzY2MDkyMUU0MEE4RQorOjEwNEM4MDAwRkQ3RjkyQTZCNDg1RUMwNEZGQTA5RTRDNzQ3NTM3RkNBMgorOjEwNEM5MDAwNTcyM0E0MzczQ0E3N0YyQTIxMTM2NTA3MjEyM0U5NzdFRgorOjEwNENBMDAwMTMyQzgxMTgwOURGNEZDOUEyRUYxREVDMTM5Mjk0NEEwRgorOjEwNENCMDAwM0M0MTc4M0ZENUUxRjFEM0Y2MEU4NzZGMEE0OTIwNjQ3NQorOjEwNENDMDAwNDM4MkY2QTY0NDRCRTI1MThFODY3MkExMkI5NTVDNDkzNQorOjEwNENEMDAwMjcyNEIxMjBFNEI3RDBDNzg5QTNFOTczREQzQ0U4OUY1RQorOjEwNENFMDAwRTQ3NUUyRkM4RTlBRTY3NzU0M0ZCRkZFQUEzM0U1Nzg3RQorOjEwNENGMDAwM0NBRDI4NDRCOTIyRDNGMUVDQUQ4NEQwRDJFOTUxQ0VGOQorOjEwNEQwMDAwQzEzODkxRkVGQzQ0MjlBMUUzRjA3OTI2MTJGQTlFRjZGRgorOjEwNEQxMDAwRTM5NjM2MkE1N0U4M0E1Q0M0MjU5MTBDMUNDRkY0RERBMworOjEwNEQyMDAwMDAxN0Y2MEY3NURBRUY1RUY4QzczNTg0RjQ1QkE2QjZBOAorOjEwNEQzMDAwRDhFODNBQkQ3NkM5MDU2MEU4NDNFN0RBMEE0MDUwNUEzOAorOjEwNEQ0MDAwNkQwMDhDQTcxQ0EyMUVCNDkxMDJEQTZFQ0YyMTVCODg4NQorOjEwNEQ1MDAwOTZDQjc3MUVDMkY3MTZBOEQzMzIzOTVFMURERjdGMThCNworOjEwNEQ2MDAwMjE5MzAzNTlERUI0M0M2ODU3OTE2NkYxNjBCRDU1NDkwMworOjEwNEQ3MDAwMjVBNDZFOUEyRkNEMzIwQ0E2OUZENUQwMzI4MDkwRTcxNQorOjEwNEQ4MDAwNDk0REJFNDRERkRCNkJEREFEMDdBRjI3MDA1QTNBMTk1MgorOjEwNEQ5MDAwNzhFRjZFRDUwQUUwM0RBRjEzMTIyNDc0MURDRkM3QjU2RQorOjEwNERBMDAwRDczNTdCMUFBREE3QjdEN0ZENTA2RjA0RTA1RjBCRTM5MworOjEwNERCMDAwQjk1QjZCRTlGN0JCNTRFRjQ0OTU4RTNCRUQxOTBCOTE1MgorOjEwNERDMDAwNTIwODE5N0JDOTExOTA4MDBFNDJCRDA4RTkwQjlGRDU4RQorOjEwNEREMDAwQzQwMTVFQUVDMERGRDg0ODA5RjAyNUE5OTE3NkU2Rjc5OAorOjEwNERFMDAwRTY3Njc0OUVFNTNCRTlGQUE3RjkyQUJDRTM0NzEwMzI2MAorOjEwNERGMDAwNEE2MjcwMjVBRUQwODhFOTRFOTg0N0U1NkNCNTM4RjIyNgorOjEwNEUwMDAwRERCNDY3Q0VDOUU5NzQ3RUIzMjk0RDExRkEzQ0IxREMzQgorOjEwNEUxMDAwNzU1MzJFOUQ1RkUyMTYwQTJEMTVEQUZCRUU4Mjc5NjczNworOjEwNEUyMDAwM0RFMkIzMDA3OThDMjVBMUZCMjU4QTRGRjI0OTBBQ0VEOQorOjEwNEUzMDAwNDc4QzUzRjc5QThDRjQ1QkY3OTgyNUIwMUFFOTU3OTU4RAorOjEwNEU0MDAwQkM0M0Y1RjgwQjk5RjAxNzY2RjhEQjdCMDRGMTU3RDVGNgorOjEwNEU1MDAwNzQ4NEUxNkZFRkQ2NjZDMDdGNTU5M0U0OEE1MTYxM0Q1QgorOjEwNEU2MDAwOUU1RDk0ODhDOEZEODE2QkJDQ0E0MDhBRDc5ODcwMUQyRQorOjEwNEU3MDAwRTBENTRBNDY3OUE3QzQyMjVDRUY4NUY1NzQ4MDJCOUY2NAorOjEwNEU4MDAwNUY3NzcwN0RGRUM0QjYxRjE3RDJBNkZFNTMxNjRGMTY2RAorOjEwNEU5MDAwODlDMDRCQjREQkFDREExMDJFN0REMjdEOEYwMjFDQUEwOAorOjEwNEVBMDAwMzc4NkVBNjJFOUJDNUUzRDcxMzhDMTQ3RTc5Qjc1RUEyNworOjEwNEVCMDAwNUNCMDkwQ0UzNzZCMENCMjcxRkJCOENGOUZEQUQ2NkM3QQorOjEwNEVDMDAwQTNGRjdDMUVFODk4QkVDODI2QkVENTJFNDc1N0YwNjBDQgorOjEwNEVEMDAwRjRERDBFOEYzRDQ3MTAzRTE2QThEM0U3QkI2RDY0MTE3RAorOjEwNEVFMDAwRTBCNTZDQUZBNDA1ODBCRTYzQzgzRDVFNUFBRTU3MkREOQorOjEwNEVGMDAwQjg4RUVEQUFDQzRCODlFMUYxNTRCQUEyRDJFRkNCNjZDMQorOjEwNEYwMDAwNThCNDAwMkQxMzc5MTk1OTdGMkRCNkRCQUUyQTU4MEFGMworOjEwNEYxMDAwNzgwODdDMEEzQTIyQTQyMTdFMUFDNTYzNUE4RUVGNTk3QQorOjEwNEYyMDAwMjNERDNDMTE5RjRFREY4RjZEM0I3QTNGQjE0NEJFREJFQQorOjEwNEYzMDAwQkU5Mjc4RTc1OTIzRUQyOEZEM0M2Q0Y4NkVDMkY3RTI4QgorOjEwNEY0MDAwN0MwNTkxRjY0MDk3NDAyNzY2RkNEMEVGNzYzMEJDM0U1QQorOjEwNEY1MDAwMTEwRkVCRDhENzc2NEUwNjc4RjcxNEFGRTZFN0FEMkJGNgorOjEwNEY2MDAwN0RERUYxRDZDRUY5Qzc1QjJBN0IwMUFFRTZFNzQxODA1NAorOjEwNEY3MDAwMkZDMkM3RUU2RkNCMDVBOTJEOTE0NDBBNkFCOUFGMkY5NgorOjEwNEY4MDAwMDhGMzVCNkUwRjI1Q0NBMEY4QUQyQTNENkYwMzM4QUM1QgorOjEwNEY5MDAwOEUzRjczOUQyRjRBM0Y5RENEQTNGNTcyOEVDMzRCRDc5NQorOjEwNEZBMDAwQjdGRjUyMENDMkRCRENGRTJCOEVDRjc3NTdDRUY2OEVDRQorOjEwNEZCMDAwQTcwNEZBNzg1QzQyMjEwQTVCM0Y3OTNGOTNFQTg3RjFDNAorOjEwNEZDMDAwNUNFRThFQ0Y1QzMyODUwOTJEQzVDRkU1Qjg3NDI1ODZBMQorOjEwNEZEMDAwQTA0MjUwNjhCQjA5RjA4NENFQUY3Q0Y0MkU4NUE0NDM3OAorOjEwNEZFMDAwOURCNjEzRjJEODhERkQ2RTIzNDU4MDBGNkIxQjNDQjcyOQorOjEwNEZGMDAwRDNGRjgxMUU5OTlDNzlEMzQ5RDAyRkFENEE2ODREMjJBOQorOjEwNTAwMDAwMDU3RDZCOUE4NEZBRTdDNkNCMEQyREEwQkI2RTRDQjMyMQorOjEwNTAxMDAwMUFGNERDMjRENTU4OUYwQzdBNEYzN0NFMzQ4REUyOUQ5QworOjEwNTAyMDAwQkYzRjhGRkYwREUwRkE2RTU2Mjk2ODY5RkYzNzY3QzZFQworOjEwNTAzMDAwMDVGQzc0QzlCNzhDQkVERDNCNUVBNzJGMEU3RDJCREY1MAorOjEwNTA0MDAwRTMyREU4MDg5RkQxNkUwMTFGMkZDMkY1OTU1ODBBOUZFNgorOjEwNTA1MDAwMjI1ODY3NDUyREQzNDk1REMzQzMwQzQ3MzM1Q0M2N0ZENworOjEwNTA2MDAwQjI2MDBBMjlFQzA4OTc5RUFFQkYxREFFODRGQzA0RDY0MAorOjEwNTA3MDAwMzc1OTkzQzk1QTc3MDRBRTY2RjhEMEJGQTlEMEVFNTAxRAorOjEwNTA4MDAwMjk2RDI3ODE1RDcwNEFCMUQwRkFBNDZCMjQyMkVDODI4RAorOjEwNTA5MDAwMDk3QUJDRjNGOTk5RTE2QTg2OUZCMDM3MjZGM0VGREUwRgorOjEwNTBBMDAwMDY3ODUxN0E5QTJDNkY3MTAwM0Q0Q0ZBNjFFQkY4NjRFNgorOjEwNTBCMDAwMkFDNzI2MEQ2NEY4MjU0MTBBNUNBQUQ3NkYyMDA4MzM1OQorOjEwNTBDMDAwODBFQjM2QTQzQjk3MTVFRDBDQUFENzE5N0Q3QzMyRjEwNQorOjEwNTBEMDAwQTQ0NEM3OUY3Mjg5QkVBM0YzOUNBODRBMDFDQTIyMDBCOAorOjEwNTBFMDAwOTdBMzI2QjgxQzM1RDFDNTUxRkRCQUNERjM3RDA1RkU3OQorOjEwNTBGMDAwNzE0RDE0N0E1MTFBNzI4MUVGOEJEQ0RDM0UxOTQ0RDQ2NQorOjEwNTEwMDAwMkI1NDFGOTU3QzNDMzI5MUM5ODdFODdBNzJFQzI1NkY0RAorOjEwNTExMDAwN0IzRjBDMUUwRDQ4MzcxMkYxQjUzRjc3RDE3RTgyOUE0NgorOjEwNTEyMDAwMzU4NTgyODE4Q0IzQkI5MDRGQzYxMTZENEQ5QjFENDA2MAorOjEwNTEzMDAwMjFFMzNDQzVCQzRFQTY3OTM1MzdGREJFOTQ0QzVBRDMwRAorOjEwNTE0MDAwQTY4N0YzMjc0MjlGMzM3ODhGRTNGMDFCNDdGQ0NENzI4RAorOjEwNTE1MDAwMDI5NENBMDVGREJBNDU3RjkzQzQ3QTA2OTNDMTYwMEZENQorOjEwNTE2MDAwMzVBQjJBRDNGQkJDM0ZCMUJFRTQ2NDEyOTRFODA0QzM2MAorOjEwNTE3MDAwOTIzREIwNEQ4MkY5MTNCRkFENTc2NDNDMkJDN0VGQzdDQQorOjEwNTE4MDAwOTlEMzZGNzVBM0RDQUEyMTAwMkYzMDVCMDA5RjY1RkNDQgorOjEwNTE5MDAwN0Q5OUREMTE4NEY5MTBCQkY1NTQzQjVFQzA4NjIxNzMwNworOjEwNTFBMDAwNUNDNzg3MjA1Q0M4OTVGOEM4RkMyQURDOTI3MjNDMzc0MworOjEwNTFCMDAwMzJCRkQzMDdFRDdFOTlEMkI1QTdBRjZGQkU5QkNFRjNCQQorOjEwNTFDMDAwOTRGNDc2MjFDMDhCREE2NUQ5MjBDRkNERUZDRjdGRDQ5MAorOjEwNTFEMDAwNTIwNUVGNjlCQjA1RDg4RUFGNkJBOTJDMjFERDg0NUYyQQorOjEwNTFFMDAwOEIwOTZDNzM0NzkzRTdBQjk4RkNCNTUzNEJCNDI0NDJERgorOjEwNTFGMDAwRjc2NTcxOENDRjI3MTNBRjAyRjZFNUZFNThDNjY3MkQxMQorOjEwNTIwMDAwQjE4QjkxMUYyNjkyOUFEQUExQjRCRkJGQzRERDc4MTA4QQorOjEwNTIxMDAwRjg2QzEyRjE2M0JCMDkyRTIzMUQ3NjQ3QTczNzkxRjA3NgorOjEwNTIyMDAwREQ2MEY3NEVDRUI1OUFFQzY4M0ZFMjY3N0Y2QzRFMjZBNAorOjEwNTIzMDAwRThCM0ZEQjE0QzJFMEJGQkUxNDlCNzc3OEQxQkRGMEZCNworOjEwNTI0MDAwMEE4MDVDM0VBQTE1QkYwQjdBQTJCMjc0QzRERjQ2RDJCNAorOjEwNTI1MDAwRDI2MkY3REEwMDlGRjM4MUJFMjg1QzQ3MDM3REQxNkZFRAorOjEwNTI2MDAwRjc0M0Q3N0Q5MUJFRDYwMUZFRTZENjlCRThDQjlFOEM1OAorOjEwNTI3MDAwRkQ3QkE5MTg4Mzc5OTU2OUQ2NkZGNDc2NzUzQkRDQjgwOAorOjEwNTI4MDAwOUVFQ0NFNUUyNDJEMEFDOUE1NzA5REM3RTk3NDdGNkM4MworOjEwNTI5MDAwOEMxRkVDQjhCMkM3MjkxRjUzRjhDRDI1QkU2NzFCMjQ1RAorOjEwNTJBMDAwOTg4N0Q1NjBCRkNGOEJCNUEyQkQzN0VGRTdCMUM4RUYwOAorOjEwNTJCMDAwRjRFMzJEMzU3NEM4MDVGNEY5NUFEQTBGQzk1NTA3RTgzNworOjEwNTJDMDAwRjUzQTY5RDA3RDBGRjhCN0FCNDg4RkYzNUNFQzU5MUIwQQorOjEwNTJEMDAwRURBMzZGMkZFODk3NEEzNzBBNEZCMkQ5N0E0RTRGOTcwRQorOjEwNTJFMDAwRTZGMTNCRUREN0Y0REQ3RTg5Q0MwNkJEQkFERkFBMEUzMAorOjEwNTJGMDAwRjBFOEY0Qzc2RTM3QjM5QkNFRDlCM0I2NThEMjNCODcyQworOjEwNTMwMDAwRDMwMjdCQjJBNjhDODhENDhGQzdDNkNFOEU2NjI3ODg4MAorOjEwNTMxMDAwRkUwNDVDMjNGQjhCMTMwRDJENjMyMkZCMEJDQkFBMkYwQQorOjEwNTMyMDAwNENGQjhCMkZGRUFCRkRDNUExQUQ1RkI0RDZEMkY5MzREQgorOjEwNTMzMDAwNjQ3QUZGMEVGNDQ2MTQ2RjFFQzA3RDEzQjcxNzI5QTVCQgorOjEwNTM0MDAwRTQ0REQzRTFFMUVGNkU2NkNGRjQ1RTMxOEUxQ0EzQTQ5MQorOjEwNTM1MDAwMTQ2MzI3RkVEOEUxOTRERjE1RTJCNzBFODdGNkJFNTUzOQorOjEwNTM2MDAwMTY4QTU3NjUzNjQxRkQ0M0U1MEREQTk5RTZGNTdFOUNEMAorOjEwNTM3MDAwNTlGNjE5OEMyN0Y4QjAyQzhFRDIzOUU1QkJDNzJENkFBNworOjEwNTM4MDAwNjMwM0Q4RDM3Rjk2QTk2RDQ5NDc1RjMxMTdFREJDNUJBNgorOjEwNTM5MDAwNTcyQ0M2RjJFQ0QxQ0JEOUMwRkY2NTFDQUVBNzQxN0YxQworOjEwNTNBMDAwODM1RDFEQ0ZGOEE3M0E5RUYxQ0IyQjY5QkVEMzQwRkY5QQorOjEwNTNCMDAwQUQ5QUVDMUM0OUZCNUJCQTU3RjZDNEUwRjJDMzgzNjBCQworOjEwNTNDMDAwN0RCNzRFOTU1M0UxRjkzMUJCMTVGNzg5RkI5RDBDQ0ZBNQorOjEwNTNEMDAwQzc4ODU0QkUxM0VDREU0MzMxREUzREI0NUM5MDU2RUEyMAorOjEwNTNFMDAwNEFEN0Q5ODMwQkQyQzY2MzlEOTQ1M0MzOEVEMkRGN0QzNworOjEwNTNGMDAwNzY0NkY3Qzc4ODlCQ0RCQjVFRjI2Q0E3OEZDRUQ1QkIzOAorOjEwNTQwMDAwMTM4MTBFRjc1Qjg5QzFFRUIwQTQzMzdCRDk5MkNFRTA1NQorOjEwNTQxMDAwNTg3OTg5MzJFMTA4NDY1RjM1NzRGQzRBNDVCNTgxOUQ2QgorOjEwNTQyMDAwNUY3OUM5ODZDRjYxMUU0ODdGQjFDNjdFRTI3OTNGRjFDMAorOjEwNTQzMDAwRURGRDQ4RTgwQ0Q4MUY2QkVFNDc2MUNGMzkxRDlCRjE5RAorOjEwNTQ0MDAwRjBBODdCNUMyMkFDNjc0MTlBRTY0QTQ3NzlBRjJBMDAxNAorOjEwNTQ1MDAwOUZCMjkxMkQxRjgxRENFQjVFQ0VGQjI1OTBGM0Q1OTc5QgorOjEwNTQ2MDAwQTVFMDYwQkFGRTUzN0JBQ0I4N0YzQkM1RURGRkQzN0JCNAorOjEwNTQ3MDAwMEVGNEFFQTRFNUYyNURFRjI1QzAzRUQxOURDRUYwNzVGMQorOjEwNTQ4MDAwNUE2OTREODBGOTJERkIxREI1OUIwQjkwNkM3QkRGODkxNAorOjEwNTQ5MDAwREZDRjJENTlDQjg2QjFFQkY1REZCNURGNjYwQ0YwNjJCRgorOjEwNTRBMDAwM0IzQUMxOTI4OEZEMzVDRUVFMEZDMEZDRjZBRjkyNjc1NQorOjEwNTRCMDAwMDNERUE4N0UxNEY2OTcwNEYyNzBDMjFFNTk4QjJERUMwMQorOjEwNTRDMDAwNjg5NzhENEFCNzcyN0U2Mzc4N0NDMEM1QzZFOThDOEZCOQorOjEwNTREMDAwQ0IyRUM1OTM4MDhFOEZDQjE0NTU4MUY5OTc1RDRBQzAzMgorOjEwNTRFMDAwRTdBNzRGNkNEQjcwMzNBNTdCN0Y5QTE1Rjc4MTc0N0I0MAorOjEwNTRGMDAwRDQ4Mjc2QTFDNEZBQTU2Q0REOTI0OUM3NjlFMUVCNzk0MworOjEwNTUwMDAwNjNDRkFEMzNBRUEzRkY3QzEzRjQwQzZEMzMzRUU0NEI5RAorOjEwNTUxMDAwNjE0QzRENzc3MTI1MTEzQjZCODJDQjY4MEY5QUVENDUzRAorOjEwNTUyMDAwQTFCN0NBOUJENkQ3RjYyNzAwRjdDMEFERDcwMTFEOUVGRAorOjEwNTUzMDAwNTAwOEQwNjEwNzdCREE3RTYzMjc3NkUzN0E4NEM3QUJCNQorOjEwNTU0MDAwN0I3RTg5RkJBNTNFRTkyQUUzQUIzREU3MjcwMjFENTc5OQorOjEwNTU1MDAwOTFFMDRDRThCNzZBOEZFQzBBRDJENjZGOTAzRDQzNDA5OQorOjEwNTU2MDAwN0YwOEZEREVCRURGQjk3Q0MwRUUwMUY5MUYyQkJCNTYwNAorOjEwNTU3MDAwQzMzQUVEQjczOTU0MEFBN0VCQ0UxNkE0QTA5RUIzNUI4RAorOjEwNTU4MDAwQ0I0MUZFOTVDNTY2MzlFNkVBRTg3OTdGOEE1QzBFNzQwMAorOjEwNTU5MDAwRjA0NjRBODZGMUI5N0RDMzEwRDA3M0ZCMkM0QzFFQjU4MgorOjEwNTVBMDAwMUNCRkMzMTFDMjc2QjdBNkEwQkQyNkY0QkJDOTNFMTU2OQorOjEwNTVCMDAwRkVCMDQ5NTk3MjIwOUFERDRCRTQyRDFCNjNFOUZCQzkwQgorOjEwNTVDMDAwMzk1NjIyODM5RDFFNUE4MjdBQkY4MzdFQkZFQ0MzN0RFQgorOjEwNTVEMDAwODA1OUNGMEJCODUzNDgyM0JGNzRCMDRGMjM3MDM2RDhDRgorOjEwNTVFMDAwQTk4RkE2NTMzQjZEMDhEMkMwNTBCMDNCODM5NzM3MkM5MAorOjEwNTVGMDAwODU3OTlFNkQ4QTc3QUQ0NkJGMDNCMzZCQ0VCNjJERDk0NAorOjEwNTYwMDAwMzAxNTlFQkYyREEzMUZFNUVDNjUxOUY5NjlGRkVCNEIyMworOjEwNTYxMDAwMDc4Nzc0N0M0QzM1MDVFMkU5RTJCMEFGQ0ZGQzgxRTI0QworOjEwNTYyMDAwRTdFMkU3NzExRTNGM0M1Njc2MEU4OUI2MkYxNkZCMjU0MgorOjEwNTYzMDAwM0E3MjNGNEIxQUNFQkY5RjY1MzRCMjFCRUU0RjZGODg1NAorOjEwNTY0MDAwRUM0RjM3QTZFM0ZFMzQzQzExRDQ0NkRBOTYyMzM2QTA1RAorOjEwNTY1MDAwOEJEM0Q0NTQ4N0Y5RkEyOUYyQjc1M0I4REVBMDg1NjQwNgorOjEwNTY2MDAwOTc2RTNFMkZBNDRCRENERkExM0QwRDcyQzU0RkNBRkFFOQorOjEwNTY3MDAwNTNFMzg0MkM4QUQzNEFBRjAzQkI3MzFBNzE2REEzRUIzNworOjEwNTY4MDAwNzlFRDQ0OTk2NEE1RjUzMURCREQxRTg5RDY3NzgzRTE5OAorOjEwNTY5MDAwMDk3NEZCM0IzOUIwOURDMjYxMzc5NUM3QkI2OUJGOEJBRAorOjEwNTZBMDAwNUIxQjZDNkUzQUFFN0YwRjlERDQyODVBQTc4ODA0MzhENgorOjEwNTZCMDAwOUNCMEZBMDcyNUU5RTg2NDU2MDY5MzJCMjdBQ0JFRTdCMQorOjEwNTZDMDAwQTA5RjEzMUZDNzEwRDgwNzlFRjgzQzJFQUFCRTFEOUM5MgorOjEwNTZEMDAwQzFGNEVEMUZCODlFRkIzN0E3RjdFMEE5NTdERkVDNDdGMQorOjEwNTZFMDAwRTcxNUJDRTQxQTA2NzA1RkYyQzJENzcyMDUxREU3N0FBRgorOjEwNTZGMDAwNkU5NzRERDlEODVBMEJGRTlCOUJCNzg0MTU5MDNGREUxMQorOjEwNTcwMDAwODA2QjAyQThEQUU5MkY3OEFDQTA5NzY2RUNGMDVBQzE1QQorOjEwNTcxMDAwMEM5RkI5QTdDNjBBRUY2N0VGNkQ3ODAzRUE3NzA0NzdBNQorOjEwNTcyMDAwNjJGRDdDQkFFRjhGMDA5NzFCRUFDMzA3ODA1QzMyMUJENworOjEwNTczMDAwODgwMjdDNDEyRTMwN0JFQjUzM0U4RkY0NEI5RUZEODlEQgorOjEwNTc0MDAwNDhENUE1MTZBMEYzRjZGMTFGNjk1NUMwRjRCOUI5OTY2RQorOjEwNTc1MDAwOEQ0RkZCN0IwQkYwNzQ0MzRENzgxQ0U4Qjc0MTJCNTgwMQorOjEwNTc2MDAwN0Y4MzQ4RjNBQTQ0MzVEMkVGRDhDQkFEOTJERUFGRjBCOQorOjEwNTc3MDAwRUM0MzhFNDU0Q0VFMzJCODBGN0FCOERGRDZCNUM4Mjc2OQorOjEwNTc4MDAwQUUzOEQwRjc4MkFGQ0ExRTc2Njg4MEVGOEIzRjg4MEJBOQorOjEwNTc5MDAwQzRCODgxQ0U5OEJEN0RGMTA3OEU4MDNGOEFCRDFEQTEyMgorOjEwNTdBMDAwQjM2MDBDQTMyRjQxNkZDNENFRUE5QTFERThFREMxMjc2OAorOjEwNTdCMDAwNkJFMjQwN0VBNDc4NTU5QjRGODdDN0IyMEQ1M0YyREY1MgorOjEwNTdDMDAwODJGRTYzNjNEMDdGRDczRURFN0EzNjFFRkQzRTFGRTg0MQorOjEwNTdEMDAwNUFFOEIzNEFBMDA3ODM1RjRBQzgwM0M2MTdCNDhCMDBEMAorOjEwNTdFMDAwOEMyQjRBMjJBRDc2MTE3RDlEMDREMzYwM0U5RjAzREM1NQorOjEwNTdGMDAwRTk3NzhEMzY3NTBFOENENzE4MTdFMzgyRjEyQUVENTlBQgorOjEwNTgwMDAwMzY5MDVGRUQ3RTUwNzAyNjUyMzk3MjFEQjczQjVGM0I3QworOjEwNTgxMDAwQjEzRjE5RjA3RTcxRDhBQTQxQjAzRjA4NUE3RTgxRjI5QgorOjEwNTgyMDAwQUEzQkJBQkIyRDVERkIwRkQzQjdGRTQxQjBCRjEyRUQ1MworOjEwNTgzMDAwRjcxRDhGMkIwMDdERjkwNzkwNzc4MDFGNEZDNTYwNThBQgorOjEwNTg0MDAwQUZGOEFFN0YwNkQzRjc5NDVGNzBGRDgyNEY1MjVBODk0RQorOjEwNTg1MDAwQjZCNTAwNDFBNUVERDZDMUEzMzdFNzBCNTFFRUI2QUEwOAorOjEwNTg2MDAwN0VDNjY3RDQ0RTAxQkU3MzA2RUQxOUMwQ0ZGQjMyQjBDMQorOjEwNTg3MDAwOUVFMjI1MEUwRjdENUZCRDM3Q0IyM0FCMjgwNzdBNjdFRAorOjEwNTg4MDAwQTQ0NkU0QzNGNTVDM0VBNEI0ODY5MTJGN0JCQTRGRjhERQorOjEwNTg5MDAwOTZDMzM3QThFQ0U0RkM0NTUwNEUwMTdGMzEzOTFFRUMyRAorOjEwNThBMDAwQ0ZFNDkwQkYzRkUwMDVFNDA2Qzc0RjVGODk5NjBCMzkxMAorOjEwNThCMDAwOUVDNUJBNTNCODVDQjg0RUFDMEJFQzM3NUEyRkM5NjBEMgorOjEwNThDMDAwRjI0N0JDMUZDOUUxMzY0MTJFNDgwQzQ1RjFGRkI0RDM2NQorOjEwNThEMDAwREQ4QUJFMDRFQ0M5MDkyQkZBNjM1OTkyQzFFNkJCRDgzNAorOjEwNThFMDAwQkUxRUZEQUE4QjUzRDZBMzNGMzU0NTZCQzA3MkYxRjg5RgorOjEwNThGMDAwMDY3QzlFQjZBNTAyRTk2M0YxNjZDOUUwMUYxNUU1Q0ZGNworOjEwNTkwMDAwQjg3RDc2RkE4NDA1RjUxQkIxQzRGNTAzRkExM0VGMzdCOQorOjEwNTkxMDAwNzIzQkE0NEZCQUFGMENFMDdDNzJDRjg2MjcwQkQ1ODhDMAorOjEwNTkyMDAwN0ZGODYyNkNDM0NENzcwMEZENkY5NzVEQUIwMDNGOEQ1NAorOjEwNTkzMDAwMTMyNDM1MEE1REU5RTEwN0YwQUE2RUZDRDc0NDk4NUZBRAorOjEwNTk0MDAwMTUwOUQ1ODE3QzU2OUIyNDk0OUZFQTVFNUFGNkExQzQyMgorOjEwNTk1MDAwREZDOEU0RTk0OTZFQTcyRDhBMzNEQTk3QjMzOERDNEUwNQorOjEwNTk2MDAwNTg1QjI3MTdEMUYxODNFNzMyODc4MzVGMjdBODg0NjRDOAorOjEwNTk3MDAwODVFMThGMDA3RjgwMUM3NjIxQkRBRjFERjQxMEQwOTE5MgorOjEwNTk4MDAwRTQ0NEZCMDdFNEVBMkUxRDdEMkNEREIxQjVBRTFGRkQxRQorOjEwNTk5MDAwRTcwRDk3NURDMzY0RUM4NzM4RjRGMjVCRDA4OTkwQzc1QworOjEwNTlBMDAwRTZGNTJERTY3ODE1NzQ3ODVENDQ0RjJEQ0VFMDdFNTRGMworOjEwNTlCMDAwNDA1OUQ1RkE3M0U4NDc3RDk0RTNBRjExRTgwREY4Qjk4MworOjEwNTlDMDAwNUVEMERCMzAwQkNBNUIxMzFGOEZGQTFGQzlGNzdENEYwOAorOjEwNTlEMDAwM0MzRDA4RkQxM0EzMjlERjUyQkUzRTA5N0MxRDg1MkVFOAorOjEwNTlFMDAwRUFEQUU1ODA2RjU1NDYxNDdENzA1MkYyM0Q5NzlDMTFCRQorOjEwNTlGMDAwRjk3RURGRjE5QkYyMkI3NUZERjgzODNDMkU1QTdEODM0MgorOjEwNUEwMDAwNUQ1MUUwMTU4MTJCRTkwN0Y0QjA4ODYyMDZFMDQwQjZFRAorOjEwNUExMDAwNDgyRUIwMEJDNUZCOTQyRDJDMUVGMDE0RTcyM0YxNUMyRgorOjEwNUEyMDAwRDQwNUJDQzcwMkJDMzMxMERFNEZDMTdDQTk1RDYwMDM0NgorOjEwNUEzMDAwOTU5RDE2NjA3NjAxQjFEQ0Q0MEZGNEZDRTIzOEVEMjZCQQorOjEwNUE0MDAwRjRDN0FDQjcxMEYwMkYxMUE5MENFOTNEQTU3MUQzRjE0MworOjEwNUE1MDAwNkY0NzQyMTk5QjhFRjExNTZBNzcwMzFEMkQ3RTVDQzUzOQorOjEwNUE2MDAwN0RFMkVBNUZDNTIyNURCRTk4OTE4RUVCNUFERDY4NjVFNgorOjEwNUE3MDAwRjQ2OTZENDBGQTNBRjlGOTkyQzExMDlGRjE1M0JEOUU1NQorOjEwNUE4MDAwMTU0NUVGRDQ5OUY0Rjk0MzE5NEM4RjBBQkE0QjVGQzcwNworOjEwNUE5MDAwRThBRTUxRDFFMjkyNzQ3NEY5M0NEMTg2ODNEQzE2N0E3NworOjEwNUFBMDAwQTUzMzdBOENEMDkxNkI5OEEwQTMwQUZBM0NCRDNFMjQxMgorOjEwNUFCMDAwMDNCRTI4MUU1RjA1M0FDQzU4MTc0Njc5RDYxOTFFNDVGNQorOjEwNUFDMDAwMUM0RUUwNTNDOEY5RkZGMEY5OEJGMURGRTY3MjNFODUxQQorOjEwNUFEMDAwREIzQjFERjFCQUNBQzAwRkQ3NDdGOEUxMkYwQzNGMTFDRAorOjEwNUFFMDAwN0VCMEFBOTFGNUZDOUVDM0E1MzNCRUM4Q0Y3NDYxQkYzQQorOjEwNUFGMDAwNzU5RjZFQjgxQkY4Qjk2RTdEOUM2NzM1ODlDNDczNDQ3OQorOjEwNUIwMDAwOUM1NUNDRTMzMzRFODc5REM1NjM3NkE5QkU0RjMzNEM3RAorOjEwNUIxMDAwRjE0MjE1RTUzRDhCQkY0Q0UwNzZGQTdEREI2M0QwQkVFQworOjEwNUIyMDAwRDgwN0FGNDA4RUI0QzUwNUMwQkUxNERGRTUyODQ0NTM4NgorOjEwNUIzMDAwODYxM0YyNTU4NjFCRTc5RjAzMjI4NEQ2NTM1NkQ4NDgxNgorOjEwNUI0MDAwMjYxREY3RTIzNUNEMkQwOUI0RkRENDcwNjg0QTExNURFQworOjEwNUI1MDAwRTIzRTVCNjhDNjJERTAxNzI2REExMkIwMzNEMDk3MEYwRAorOjEwNUI2MDAwRjQ3RjhBRjU0QjVDM0IwREYzRkMxNzg3QjdDMDRGREQyNAorOjEwNUI3MDAwQTc3M0QzQTJDNTBCMDQxQzNCQzM0QjdFMjY4RjlGRjE5QQorOjEwNUI4MDAwRjc2NkZFNkYxNUZBQUFDN0ZDRUI0RjA0RkVCRDgxRjg1RAorOjEwNUI5MDAwNTc0MUZDODQ1QzI2MkVEMEQzRURGQzdCOTlCMEY4NUM5OQorOjEwNUJBMDAwQTY5MTdGNDUzRDBBRkYyNjY2RUFGOUY3NTI4OEYxMkY1NAorOjEwNUJCMDAwRTdEM0M0NDZBQjE2Q0Q2RTE5OTg2OTY1RUI2QTlDNTA2NQorOjEwNUJDMDAwMEFGQTI4RDE0QkQwNkY0Mjk3ODlGQ0JFOThGMjNCRjA3RAorOjEwNUJEMDAwQjExRkY4QjYwRkMwOTNDOURGNzRBREUxNkU3ODlGREVEOAorOjEwNUJFMDAwQzhFQ0YxOEI0OTZDQkQ4QkFGRDc5QTY1RTA3RkJBMUZDQgorOjEwNUJGMDAwOTA2OEQzMDZDRUVGOURDMzNEOTgyODMxRkQ5NjA4NzI3QworOjEwNUMwMDAwRTY4NjMxQTE3MUEwODc1NTg4MUJGNDgxRjUzMUZDOEVBMQorOjEwNUMxMDAwMUQ0MzAyNDE4QTc3RjUzMjYxRjJFM0YzQTdFRjdFMDg3NAorOjEwNUMyMDAwRTRDNjdBODcyNzRCOERFOEE1NEZEMzdEQzMzMjUzM0IxQgorOjEwNUMzMDAwRTc2QjRBOTcxQUY4QjFFRUZCQjc4M0VEMUYzQjg5OUZEQworOjEwNUM0MDAwOEY1RDIxMjNGRDUxM0FCRjM2NTMwN0ZGQjFERUIwMEMwMworOjEwNUM1MDAwNzA0RDhFRjdBNTU5OTNFODNFQjAzMTZCQkE3RDIwNUQ0QgorOjEwNUM2MDAwOUY5QkRBQkRCNDVFNEVFQkVCQzAyRkQ3MkI0NDc4RkQ4MworOjEwNUM3MDAwMDk0N0RGRkYyMjRGMjAzM0YzMzBGOEYxOTY2NzY4OTMyRQorOjEwNUM4MDAwMzI4QjMxQUUzRDE5RTY3MzQzRkZCMDhDRjJBRDg3RjEzNAorOjEwNUM5MDAwRkY2QUYwRUJEMUY1MUNCRDJERkY1NzE1RjQ2OUU1RUQ1QQorOjEwNUNBMDAwREUzQTc4MkJGQ0NDQTNCODlGQjlCQTY5MThGQTlGNzU3NQorOjEwNUNCMDAwRkVFNjNCNjBCQ0NFRkNDREREOEQ5QkMwRjk5RUQyMzdBRAorOjEwNUNDMDAwRUVGRjEyNDY4NzY1OTA4RjQyQUUyQ0NBRUNDNUU5MzlDQgorOjEwNUNEMDAwNDRBNjBGOERGMDE3QzgyNUIwNzc0NTFFMDJGODIzOUQwNgorOjEwNUNFMDAwMThDRjA4MjBGRDQxM0Q3MTc4NDRERUFDNkJCMDk0NDc3RAorOjEwNUNGMDAwQTNFRkVGNjczQUEyQ0E1M0QyRjQ3RkJGN0ZBODg0QUU2NgorOjEwNUQwMDAwMTc1RTMxRjlGQUZENEM5RDdDNkQ2QzM4REE5QkQ5QUY4QQorOjEwNUQxMDAwNTRGQjUzN0JFMjdFRUUwM0Q4QjBEQUYzRDc0Q0EwQkI0MgorOjEwNUQyMDAwNzc2NUY0QzM1QzEzNjNGMzRCRTAyRkQwODhFQUVBQ0RDOAorOjEwNUQzMDAwRkIwM0I2NkI5MjgyQ0U0MjVBRkY0NjIyMUFGODM3QkY1NworOjEwNUQ0MDAwOTFCMURDRjBBOEI3REMwREZFOTY4RjJDMjg3RkFCQzA5QworOjEwNUQ1MDAwN0VBM0YwMTkzRDk4MDRFQ0Y0OUY3QkI5REZCNEY0OTg2RQorOjEwNUQ2MDAwNDM4MzNDODFCMzkyMURFNUU3RDkyMzcxN0VEMEFCNjdCNQorOjEwNUQ3MDAwOUQxNkY0QUJCN0JDMTY4MzdDNzEzRTMzOEVGQjQxMDI5QgorOjEwNUQ4MDAwMDY3Rjg5ODhGNzlDN0Y3QjZFMzJDOEZGMjc3OUZDRjNGQQorOjEwNUQ5MDAwQzk1OEU2OEY3REYyRjY2Q0Y0NjMwQTdGQUZBMjUwRDg0MworOjEwNURBMDAwRjc4MkI0MUUwQUQ3NUU2MDM3Rjc0NzNGQUNGMEZGRjZDNAorOjEwNURCMDAwQjY1NzQ4MkNFOTg4OERBM0Q4RDlGQTdBMkIzRTA5RkMyRQorOjEwNURDMDAwRTc1QkJCQzk5N0Y4NERBNjRERDhDMzhEMDBFN0VBNDdGRQorOjEwNUREMDAwNDIzNkQ4RUYwQTdCNThFOEVEQzFBN0QyOUIyMTZGNjIwQgorOjEwNURFMDAwNzAzOTczQUY2RDNENjVCMUMwM0FCNzUyNzI0QTcyNzc4MAorOjEwNURGMDAwQTQyRjQxNDc1QjNCRTYyNUVDQ0FENEVCQTdDNzU4NUUwRQorOjEwNUUwMDAwNDI3QjlEN0ZGNzFDQ0Y0QjE4REI3NkY0NjVCMEYzMjhGRgorOjEwNUUxMDAwQkY2RjM1N0MzNzIxMzVDRTE3NDU2RUNENUNGMTMwN0VCNgorOjEwNUUyMDAwREYxOUZEQ0ZCNDEwNUYzNDNERjIxRUQ3MjM0NEE5RTkzQQorOjEwNUUzMDAwMEY3QThBRkNGM0MxNzgzNThBM0Y2N0U2QTc5NUE5MDBGNworOjEwNUU0MDAwMTdCMzFGMkUzMkZFQTMzOEZFM0I5OUVERjFDRTQxMTA2MQorOjEwNUU1MDAwN0ZFQjJFREU2OTlFRjdERkFDQkU4MUQxRjQ5NEMwQjMzOAorOjEwNUU2MDAwNzlCQzhFREZCM0ZENTk3QjNCMUJGMUVENzJCMDdFODdCMQorOjEwNUU3MDAwRUJGQTU1QjI5ODFEMzQ1MzYyRjE3Q0YyMkQ0MTdEMkQyMQorOjEwNUU4MDAwRTg4NEMyRkQwQkEwOEI5Mjc3OEU4RDg4QzMzODUwNTg2MgorOjEwNUU5MDAwMDY3OTcwRkVBM0NDMDExODhGRUY2NDNGMkFFNjQzMkRFQworOjEwNUVBMDAwRTdBQzY4NzkxRjc0M0M2RjM0M0M0ODU5NEM4RkNFQjREMgorOjEwNUVCMDAwQjIzODg2NzQ3QjE2RkEwNzY2QzZDNjQ4MzEzQUZCRTRFOAorOjEwNUVDMDAwNzRCQkJFRDUwQzcxREJGREIxQTM0NkEyREZEM0FBMEUxNQorOjEwNUVEMDAwODgwNjNGNzMzQ0Y3NzQyNjQxNzgwMjVDM0M1MUU4NDlFMAorOjEwNUVFMDAwQzQ5RDA1OUNFQjRBQjU1Mjg1RjlENUM4MzY1MDgxMUEzOAorOjEwNUVGMDAwOTNBMzI5RTUwNEUzNkZBMzI0MERFMTkxMEM0NjczMzFDQworOjEwNUYwMDAwRDAzRkNCQTczQkZGQjY4QzcyQTFBNDU0MEQ0MDA4OTU5RgorOjEwNUYxMDAwRUE4QkE0QUM2MkNDQ0Y3QUQ5QTJDQkNGMTI3NDUyRjc2MQorOjEwNUYyMDAwMjJENUNCMDZCRkEzREZCMEFGNEVFMkYyOTg1QThGREE4QworOjEwNUYzMDAwMkU1RDNCRjUxMTkwMDExMTdEMzBBMEQ2NkVBODBGN0EzMQorOjEwNUY0MDAwQzA0NTE0OURCRTQ4RDJEMjBDRjUwMTVFNTcxQ0VDQTc4QgorOjEwNUY1MDAwMDY5NEFCODZFRjA0REQ4OUZDNDBGQzRCODE3NUJCMDJFNworOjEwNUY2MDAwOTAxRkQxOEJDRjY3OTRFNDQzQkEwMUY5MDY3RUU1NjFCNworOjEwNUY3MDAwMUM5Rjc0QkQ0NTU5QjQxQzVCMUUzQUFGQTcxQkIxREUxNAorOjEwNUY4MDAwRUVENjc1NzQyNTlEMEYxNTYwNkQyQkU5N0NBOTVDOTg4NAorOjEwNUY5MDAwQkJDRUJEMkEwREUxRUUyMkIwQ0YzOEJFRDI4RUNGRTcwOAorOjEwNUZBMDAwRjNFRjkzMzY1NkQ0RjVBNTQzMjRENUFBRThDRjRERDJDNgorOjEwNUZCMDAwNkFERUVDMEJGOTk4MzVCNDRFRkZFNjM1NDgxMkY4N0RGMQorOjEwNUZDMDAwQTg5Q0MxRUY5RTU5RTlDMjUyRTBEQjQ1REY0QkY0QkQwRQorOjEwNUZEMDAwQkY4Q0U0NDI3Q0E3MzMzREU2Q0Q3MjE4RUNCRTJFRjRCNAorOjEwNUZFMDAwOTgzN0FCQjhBMzFFQjNEODNENkY0MTdFQzBGMjI2NTk5NworOjEwNUZGMDAwMDVCQTU4MzNBNTE3RkFGRjM2RUM5NDNDRTA4RjNCRDAzNgorOjEwNjAwMDAwQzRGMkY0MzZDQzY0RkE0NDhDN0JFNjc3ODlBODM3Q0VBOAorOjEwNjAxMDAwNDg4Q0NGNDk0QjEyRjI0MTc1MTJDNzRENkQxMkM2NkJCOQorOjEwNjAyMDAwQ0ZGMkZERjZCMjRDOUYyRjRCNjcyRjZENjgyQThFQzVCRAorOjEwNjAzMDAwQjhBRDQ5MkZEMTNGOTc0NEJGQzNEODlEMDRGNkQzQjAyNAorOjEwNjA0MDAwN0EyNTAzRTVDMDIyRjg5RTJDMDg4RDg4Q0QwMEJBRjU4QworOjEwNjA1MDAwQkQzNzQ2MDIzOTcwNjExMEUwRDMxQzBGMTQ3MTQzMTEzMworOjEwNjA2MDAwNEY3QzI1Q0Q3N0FGN0VGQzhFNzE0MjYzN0M0QjRFQjA2QQorOjEwNjA3MDAwRTcwMjlGOEQ5NkUzM0NCMjUxRkYxMkMwRUIxQUIwMTNCQQorOjEwNjA4MDAwMjlEREFEMzkxMjg3RjA1OUYzMkRFMzNGM0FDRjFGMDJENgorOjEwNjA5MDAwOUM1QjlDMjU0ODRGNDJDRkQyNzkxNkJFNEIzQUNFQjM3QgorOjEwNjBBMDAwREExMjQ2M0ZBMjZFOUU3NTU5QzU1RENERDM5NDA3Q0JEQgorOjEwNjBCMDAwRTdENTBFN0YxRUQ3OTI5RDBBQ0VGRjJDODlGM0MwM0NGOAorOjEwNjBDMDAwRjdEQTNDMUZGOTQwMEY5Rjg5NDNCRjlGQzA0RjE1RTc4OAorOjEwNjBEMDAwQjFCMzE0MUYxMjlERTdEOUJEMjM2MjJEMEVCMDhGN0M4MgorOjEwNjBFMDAwNEYwMkJDRTQ4MUUxMDRCMENGMEYzNDhEQzg4M0Y1NzQ1NgorOjEwNjBGMDAwMTZERkREOUI1OUY2NzQxNkYyOTlFRjE5RTQzMzU3RTg3MQorOjEwNjEwMDAwRkM0QjZBNjRGRDVEQzQ4NUI3NDJGQkFCODBDRkFGQkI3RgorOjEwNjExMDAwQzZBMzExM0VENThBQTM1RTYyOEU3NUI0QzMyNDJFQTc5MgorOjEwNjEyMDAwQ0Q3NDI3MzUzNUZGMUJGMjkyMjhCRjYxNUVBODdGMTAyMgorOjEwNjEzMDAwMDlBQ0ExNzBBQjFCQ0FFODhGQ0MyMzJBRUE2NTEzOUQ3QQorOjEwNjE0MDAwMkNDQkY0QkUwQUY4MTI3Q0RBMDU3QzVFODc3OURGOTNFQgorOjEwNjE1MDAwRTkwRDQyMDlGM0U4M0YxQ0U1RDJGRTJDQTZERjVFQjY0RQorOjEwNjE2MDAwNTlGMDdCOTZERjkyNDQzMDVGQzcxQzc3RkYzOEIzRjI1QgorOjEwNjE3MDAwMkRGQzVFRDg1RkI5M0VDOTU1NzA1NTdDNzBCODZCRjg4MAorOjEwNjE4MDAwMDU5MTJFOTY3MzM4MkQ4Nzc4MzBFNEIzRURCMTlFMzJBOQorOjEwNjE5MDAwRTQ0RDk4RTBGMEZENENFRjI3MEMwRTk0Q0U0NjMyM0FEOQorOjEwNjFBMDAwNUI0M0JBODQ0NzA4REFERjkzRTkzQjA2QTVEMzRBRTlBMworOjEwNjFCMDAwMDU4MDMyQkEyMjBERTBCQzRCRDUzMDNGNjFGNzJBMDY4QworOjEwNjFDMDAwOEZCM0VGMzA3OEVDNkJCMzIwNUQ2RjIyRjlDODk3QzNDMworOjEwNjFEMDAwMkRFN0VFODZGRUE5N0MzOTBERUIxQTEzREUyOUMxQkUzMAorOjEwNjFFMDAwQjlDRjIyRDUwMjcyQjk3RkQ4MjM1QkJBQTZEQkFGQjM5MQorOjEwNjFGMDAwNzBGRkU0QkJDMEYxNzAzRkUwNjFDNERCQ0NBRkQzMDVGRQorOjEwNjIwMDAwREQ1RUUyNzREQjUzQjg0QkQ5NURGMjc1MDdCQUIyNjY1NgorOjEwNjIxMDAwQTc0NkU4QUFBN0Y5NTg5NDJFNDhGRjVFMURGQkEzRkJFQQorOjEwNjIyMDAwMjg4QzNCMzRFRjhCNDE3OTU1QjU1QjQyNzk1RUY1RkFBQQorOjEwNjIzMDAwMTdCODVGQUY3QTM1MDY4OTcyRkNBQkIxRjhGRURDMUU4OQorOjEwNjI0MDAwRjZGRTRDNjlGNDNDODI4NEVDNUVBOEE3OTZFRkJDRDdCRQorOjEwNjI1MDAwNkJENEQzN0VENDQ3M0ZEM0NFQjkzMkU1NDg1QzM2Nzk5MAorOjEwNjI2MDAwMkEzQkE3QjA4NkU3M0Q4OUY4NkMwMkE3QjNFNDgxNUVCQworOjEwNjI3MDAwMERGNDUwRjIwNDgyRjk4NDA5MEU5NkE3RDhGMTNDMDI3RAorOjEwNjI4MDAwRTNEQjU0RkU5RENCQTU0QTAwNjdGM0Y5MDQzOThFRTVBNAorOjEwNjI5MDAwMUZBNjkyNzU1RjAzOUM5MkNCOERFRjUzMURFNTE4QUYzRgorOjEwNjJBMDAwNEQzNTlENjMxMEYwMkVDRUU2RjZCMzhEQTQ4MTFDRDkzQQorOjEwNjJCMDAwNjlDQUM3MTBFNUZFNkM2RTA3RDYyNkUxN0U1MEUxRjM5MQorOjEwNjJDMDAwNkE3MURBOTA2RUVGNzNEQTcxRERGNzI1OTFFNDI5NTg3RgorOjEwNjJEMDAwNTc1MEZGOUJGQjExNjU5MjY2MjFBQUZFOUM0NTc5MUNENQorOjEwNjJFMDAwNTE3NUY2NTFBQUI3OTdBMURFNjc3NjNGNDNGQkJFQkU1NAorOjEwNjJGMDAwNzRDM0ZCRkU4QkYyMERFRjA3RDYwQzM3RDQwN0FGQjg5MworOjEwNjMwMDAwRDZEMERFNEQwMUEwQUY2N0Q0REY2NDY4OUZENTMwREQwNQorOjEwNjMxMDAwNTBDRkQ5N0M4N0ExN0Q1RUEwRDJGMDdFQzgwQjRCMENGQworOjEwNjMyMDAwRUY4N0VFQkNDRjUwMkZEQUZCOTBBMUJEREM4OTVERkU3QworOjEwNjMzMDAwQTM2Q0I2M0Y5Mjg1NURFRTFDRTkwM0JBOTI5RDc2Mjk2NworOjEwNjM0MDAwNDZCN0ZGQUJFNEY4Mjg0RDI4NEY4M0I4NzlBRDczNjJBOAorOjEwNjM1MDAwMUFFQzRGNUI5MkE4M0VFRUMyRUZGNjVERjc2RDdFODFDMAorOjEwNjM2MDAwN0Y2RTdGOTU3MUJGREI5OUZENTQ4QTUwRkFBQjNBNDAzRQorOjEwNjM3MDAwRTlBMDA4RUQyRjdGMzZGNzIzNTRBOEQwM0U2QzQzN0Q2QgorOjEwNjM4MDAwQTI3ODcwMUQzMzEzRUNFODRGMzNGNzVGOTlBRDFBRkMxOAorOjEwNjM5MDAwN0M2MjFGMjA1QjNDQUUyOTUyRTdGMDEyNzREOTFEQkMxMQorOjEwNjNBMDAwRUEzOTVDRkY1Qjc4RkRDRDk0NkYyNEY2N0JFNkVGRkU2NworOjEwNjNCMDAwOTg2REUxRjZCODZGNUJCNjdFNUY0N0MyQjIxN0Y3NzVBRQorOjEwNjNDMDAwMTdDRUY4MDlDODUxODI3NjRENzVCQzBCRkQxMjY2M0I5RAorOjEwNjNEMDAwNDA4Q0ZGNEE5QUY3MzcyMDU3Q0RGMkQ0QkI2MjAxNkI0RAorOjEwNjNFMDAwNjdBMTFCMENCOUYzRkRERTFGQjNDREZCQkQwOUIzMTFEMworOjEwNjNGMDAwMUY0OTM2MDM5QzVFNkNDN0IzNjZEOEVGRDUyNjk1RTA3RgorOjEwNjQwMDAwN0VBRkQ2QUFBNUY1NjRCRkY3NjIzNjQxNzhENzAzNUVBMgorOjEwNjQxMDAwNzVGQjNBRDlFNjUxNUQyOEU3OERGNjRCNDdGQjlDRUFDMAorOjEwNjQyMDAwM0ZCQUNFMEQ2MEQ3NDk2MDk3MjUzMzdCN0RCNzg0RUJBQgorOjEwNjQzMDAwMTZFMzdFMDdGQkZDRkRFQzFFRDhFNzMxQzQ1M0FGQzg2MgorOjEwNjQ0MDAwODhCRkJGNjczMzdCRkNGRTU4RjkzQkQ5RTNDN0FFNDYzNAorOjEwNjQ1MDAwMUYxRUI2N0EzMENGRkRGMDU0OTlBQ0EyNzAzQzVGM0U1RgorOjEwNjQ2MDAwQUEwRjg5MjI4RjQ1RjkzRUY3REY2Q0NCMjE4OEI3RUU2MgorOjEwNjQ3MDAwRkMxRjg3NTcyRUVBRjJCQ0M3RTE0OTJDOEY3MzNBRDAzNAorOjEwNjQ4MDAwOTE2RURDRDgxQzQ2MTcxOTM5REM3RjEzQzNGQzE4QTdBMgorOjEwNjQ5MDAwN0ZFRkM0NzMwOUE3NkZGQTIwODEzODIxMkY2RUM0NDg5QgorOjEwNjRBMDAwM0ZFNDM5MTNDRjAzOTBCN0UzNzczOEQxNEYzODdENTJBQgorOjEwNjRCMDAwRjFDODU1NEUxRDVEOEQ2NjcwMUVGN0NBM0IwOUUwRkZBMQorOjEwNjRDMDAwOTlCRTJCMjNENUVGRTg5QzlFMzJGOEZBODgxMkNBQzZGMworOjEwNjREMDAwQkNFRDNGOUNFQ0FERDI3MkZBQkVBQzU0RTZBNzM0RTZGQworOjEwNjRFMDAwQkI5OUZENDZEMzU3NTQxOUY4NzhGOTI1ODkwNDkyNzU1QworOjEwNjRGMDAwNzVBNTE1RjMwQTk3NUY1MkYwRjlFOTZDQTM1RkE5NTNFQworOjEwNjUwMDAwNzhGNTEwOUVFNkU3MDI5RTg3Mjc5RDFDMDRGRUY0MzM3MworOjEwNjUxMDAwQjFEMUVEOEY1QjM4QkNEQkU5Qzc3NDRFQTZCM0YzMUY3NgorOjEwNjUyMDAwMjVCQ0ZGRjNFNUQ3RjQwMTM5MzdEREE2NjZGNUM0Q0YwNgorOjEwNjUzMDAwMjVFMEQ0N0FGOThCNzg5MDEzQUZDM0Y5OUIyOEZEMTcyNworOjEwNjU0MDAwRTVCMEI4RDJFQkRBRTc3MDNDODI5NERBQzNFMzgwRUVEMAorOjEwNjU1MDAwNEJCOTNGM0RDQUI5ODA3MTM5RTA4N0I5NTRGRTNGMzkyNAorOjEwNjU2MDAwMTczMDI1Qzc3ODJFMjAyRDQ3OEQ3QTJFQTBCQkYzNERFRQorOjEwNjU3MDAwRDM2Q0QxRjU1RDZFMDQ3RTFGMDBCRkRFRkY4Q0Q1MDVBOAorOjEwNjU4MDAwRjM1QTA4QjYxM0Y4RUZCNjVBRDE3RkY3REVFNTE4MDJEMgorOjEwNjU5MDAwRjE5NDJGQjY1ODdGMDk3OTZFOEI5RUM5Nzg2NjIzQUQyQQorOjEwNjVBMDAwMkY5QTE0ODNGMTlGODU1QkFEMkMzRTM3MjkzNjAwQUVDMAorOjEwNjVCMDAwQUE0NTVCQkZENzdCMkUxREVGMkJDQUI3Q0JCMkU4RkIzQQorOjEwNjVDMDAwNjczNjYxNUVDRDdCNkQ2QjMxQkZGQjI0RjAzMzdEQkVFMgorOjEwNjVEMDAwRThEQjFGQ0QwNEY4RUZCMzM1MEMxOTA2NzZGRjBFQzlDMgorOjEwNjVFMDAwNzA0RTYzNDk2M0FDQTEyRUYyMDgwNUZFODgxNDM5QkZEMgorOjEwNjVGMDAwQTE1MjdERjI2MDhFRjFCQ0Q2ODg0OERDRUNDMTFDRTY2RAorOjEwNjYwMDAwMkZDMTNDRkNBQUE5RUNCQ0Q2ODFFMzZDQkZGRjQ2MjY5NworOjEwNjYxMDAwQ0IzMzBDNEU5QTM1NjUxODVEQzdBNDU0MkJGQTRCQ0M3RQorOjEwNjYyMDAwNzk4OTg0MjBEMkM5MDI5RTM3M0NFOTYzMDVDRkU1NEVDMworOjEwNjYzMDAwMUFFQTQ0M0JGMENEOTUzNTg4MDdGQTlENjM4MkVFQkM5QgorOjEwNjY0MDAwQzJBNDlGMzNCRkNCMjQzN0NCQUJFRjM0NUZEMTk0QTcyOQorOjEwNjY1MDAwMjhDRTBGNzVDODRGOEM5QzFGM0ExQThENkUzNkU0RjAwOQorOjEwNjY2MDAwM0M0NUNFRDcwNzhFQjM3Q0M0MDU2RkNCNkM1REREQzhDRgorOjEwNjY3MDAwQ0RGN0Y5M0FERTZCQ0JCRkVCMjUwQThGRjdDQTk5MTQzOQorOjEwNjY4MDAwN0ZFRkYyOEQ4RjgxREZFQjBCQUY0NDIwM0ZGNDhCQ0I5QworOjEwNjY5MDAwRDFDRkFEN0RERUFFNUY3REVERTc3QTAwM0ZCNzk2MkZCRgorOjEwNjZBMDAwNkVBRjAzNUJERUU2QkRENzcwRUVBN0U3RjJBNjZCNzlBRgorOjEwNjZCMDAwMzIyQjg3QzUyMUNDRjJERDRDRjdGRkJGRTRGQkY0NDk1OAorOjEwNjZDMDAwNkYwQ0YyM0JCMUZDMTU5NEE3NzYzMUY5NjhFNjczQjMxMQorOjEwNjZEMDAwM0MxN0YzMzJDRjc3RjkyNUQ5OTBCRjlDQ0JFNTQwNDRFNgorOjEwNjZFMDAwOUVEQkYwM0QzNUY3NzEzREZFMTIyNUIwNDY0MjNCRTBBMgorOjEwNjZGMDAwODMxQ0RBNkVBNDIzOTA1QzRBODdBODc1NkQ4QkVGQ0E2MQorOjEwNjcwMDAwN0Y0M0Y3Q0YxRjQzRkIzQkRDQkU0RkEwNENGRTRCQkY4QworOjEwNjcxMDAwMzJEMEY3MjNERURFODlGOTg3NjczQkM5NDM2Rjc2OUI2QQorOjEwNjcyMDAwRjJEQTI0NjNCQ0UwQ0I5Q0QyNjZDOEU3N0Y1MEE1QTUxMworOjEwNjczMDAwQ0VCRTFFNDk5OTkwRTczRDdDQzlGOUYzQTcxMEI3QUNDRQorOjEwNjc0MDAwN0FFQjIyRjJFNzI2OUIyRjBERkMwM0ZFN0UzNkNGRjY3NgorOjEwNjc1MDAwMjg3OTIzMTc3MkFFRUUzQ0MzMTZFRTlGMjdCOUI5ODY4RgorOjEwNjc2MDAwNzgxRkY4ODkzMDZGRTE2ODFDRkE4OUQ2QTY2OURGQzAwNgorOjEwNjc3MDAwN0M5RTRCRDNGRTBGQ0EyMTY5REFFNTFDMUQ1RTZBRjlDNworOjEwNjc4MDAwM0ExNTRCNzRCQkI4Mzg1N0QwQkYxN0Y1RjhGQzMyMkEwRQorOjEwNjc5MDAwN0ZBM0QwQTE5QUNCQ0UwMTk0M0U3OUZCMjBGMEM3N0Q5OAorOjEwNjdBMDAwN0VFNDhFNDEyMDFGNUIzNjhERUEzMkRGRUQ2N0MwOUZBRAorOjEwNjdCMDAwNTQ3RUZFMThFNDdFNTYyNDlFRkExM0NFMzdDMkRGM0Q4NworOjEwNjdDMDAwREZFNkNERDZFNzY5QzlCOTQ5Mzg1RUMyMzVCQjVCRDNEMAorOjEwNjdEMDAwMjk5REI0QUQ5MzUxN0VCNzM5NTg3RURCMzE4NzUyREVBNworOjEwNjdFMDAwNThDMEJFNEIzMTdDQTdCMEZEMDdEMDNERTU2M0M1QTFDNQorOjEwNjdGMDAwN0NBMzk3NDdDNUI5MENBRTlEQURCMzM4OTdFRDEzNkMyQworOjEwNjgwMDAwQzQ2Mzg3RUY2RDQ3NkZCMjgzMUU5NTI1Q0RDNUZDRkYyRQorOjEwNjgxMDAwOEMxRUFFQTEyMzAwM0RGQzg4Q0JCMTkzNjlCRUEyRENFNworOjEwNjgyMDAwNjJGODhFRTlEQjZCQjhCRTU1MUMyNkZEM0FBMEVCRjg4QQorOjEwNjgzMDAwNzg2MzlBMzYzMjk3OEUzRjMxNEQyQjg2RkVGNkRBRkMxRQorOjEwNjg0MDAwNDM4MDZGRjZDNjQ1Q0Y1N0JCMkU5N0Q5MjNGRkNFRTFDNQorOjEwNjg1MDAwRjQ0MjFDNjhCRkUyNzgzMkM2RTk2RkM4NjU3MTdBMERGMAorOjEwNjg2MDAwQ0ExQkZBODdENzQwMUU3QUIzREJDNURCODdGMERDMUQ3NQorOjEwNjg3MDAwN0QzRjAxREU5M0I0MTBCOTA1RjJFN0U4NjRFMTdDQzQyMgorOjEwNjg4MDAwMUY0RTFDMjUyMEJGMTJDMjZEMDRGMjY5MTI0Qzc5QjA1NAorOjEwNjg5MDAwQTJGQzA3ODdEQkFCM0NFRUQ5OTFFRkQ4M0NCRDFDRkVEOAorOjEwNjhBMDAwOEQ5NDVGRTBCQ0E4RTAxNzg4QUY0M0JFQzQ4M0FBOEY3NQorOjEwNjhCMDAwRjMxRENCRjc2ODdDQTI5NzA0NzE5Njc0NERCNTAwN0RFQgorOjEwNjhDMDAwNDBGRTI5QzgyNzczN0VEMDhFNUM3NkZFMURGODUwRUEwNAorOjEwNjhEMDAwODIwRkU3RjM3OUY2OTQwRjFCOUY5ODYyODk4NTc5M0VDMgorOjEwNjhFMDAwNDQzMEFGODM3MkMyNkEzQkFEM0Y3QjlGQ0IwM0U3QzdBNworOjEwNjhGMDAwMzJENjExREMwNzBENUMxMUI3MERGNjQ5MzUxQzFGODMyQworOjEwNjkwMDAwMzc5MkQ1QjFCNEI1OUJFN0Y3ODk3QzZBNzc2RDQ4QzFGQQorOjEwNjkxMDAwNzMwNjBGQjFGQ0JEOTM5RkRGMjQzQkExRkZBRjQ1RkY4MgorOjEwNjkyMDAwQzY3QzQxOTFERkU3Q0ZCNTE4RUNDMkRCRDI3RDBGMjNFNworOjEwNjkzMDAwM0U0REY5RDg5REU3ODE3RDk5MDc3OTBFM0YxMUZDQ0UzOAorOjEwNjk0MDAwRjM3MEM2RjAzQzlDMzE4RDlCRDAxRjM3QTZGMTQ2NDVCNQorOjEwNjk1MDAwQTI0RDlFNTU4MjEyRUNGNzlFQUREMTE0RDAzN0NGRTVGMworOjEwNjk2MDAwQjJCQzlDRUVGMkUzOUVFNkZERkIwMUNGQTk5REU3NTk4OAorOjEwNjk3MDAwM0VEOTJFNzczQUU0NTkzRTk5OUJBQUNCMkJGQjAxQ0IwQgorOjEwNjk4MDAwQjNGQzdFMkVEMzIzQ0ZGMjNDOUE2NzZCOThCRjZFQzlCRgorOjEwNjk5MDAwMEI4NzUwREU4QjcxNDQzQjkxOEYzN0UwMDE5NjhGRjc2OAorOjEwNjlBMDAwQUMxMjhBMDVGQUI5MTg0QkRBRjNDQzU3QTE1MzNFMzQyRQorOjEwNjlCMDAwMkNGQUY5MDU5MTU3NkVDQzI3MUYxQzBFOTc2MjNFMTBEQQorOjEwNjlDMDAwMjE3ODRGNDJCRjNDRDVBMDA3Qjc4NjVENzFDMDJGREQ0RgorOjEwNjlEMDAwRTk4M0RGRTc1RTlEM0U3ODJBOEZGMTREMTRCREQ5OTQ5RgorOjEwNjlFMDAwN0I3NTdBMzMwODc0NDNGNUU2MDEyOEFGNUE2RjcyN0RFMAorOjEwNjlGMDAwMjlGNEE3Nzg3Rjg4RTM3MzU2MkVEMzlGNTFGNEU2MjFCQworOjEwNkEwMDAwOEU1NzgzREU0QzIxMDFDQ0QzMjBBNzJDMUU3REJFQTgzRgorOjEwNkExMDAwMjhCREJDREY5N0QzQjUwRjYxQkU2M0I4M0YyNUUxRDQ3NQorOjEwNkEyMDAwNTEyMkU5RTQ1MDE5RTc2QjcxRkZDNEYzQkRDODNERDNBRgorOjEwNkEzMDAwQTJBQ0UzN0FDRTlGOTYzOTYxQkNBRjIyQTE0OThBOUE3MworOjEwNkE0MDAwODdENkVDQjY4OUY4RUQxNzMwRUYxQjA2NTNCOTI5NzVEOAorOjEwNkE1MDAwOTQ5QjUxRjA3MTA2RTZEOUZGNkRFRDAwMTBDOUI1NDk2MAorOjEwNkE2MDAwOERGMTYwM0U3NTgxOEY3M0I5NjhDNzY4RTdBMTE0RjAzNgorOjEwNkE3MDAwMUY3RUM1Qjg4RjE0RjBGRjg2QzNDMzk2QTVGRDFCQzY0NQorOjEwNkE4MDAwRjkxM0U3QjNDRUYwMTI5QkM3RjBEMTJGOEZEOTMzMjI4MQorOjEwNkE5MDAwN0Y3REI3QzkxRTFEOTFDN0UwMzIyQUNGQzg5NzNBRkM0NworOjEwNkFBMDAwQzVFNjQ1QjE3Qjg0MUM3RTM5RERFQjgwRjdBRjlFRDgwRgorOjEwNkFCMDAwMUQwRjc0MjRGMDI0RTQ4RjE5NUYxMTNFNUI4NUUzNTJBRgorOjEwNkFDMDAwMzhBN0U2QTU3NkQ0M0ZFMjdCQjMxRThBN0NFRkM3RjlGMAorOjEwNkFEMDAwNkUwNTNBMUFDOUYyN0RGMDdDMDEzRkE3MjBFNjI3RTg0RgorOjEwNkFFMDAwRENDM0Q3NzkyMDVENzNFNzE1Nzc5Q0E3RUI5NDQ1RUE2MworOjEwNkFGMDAwNkE5RTQ5RTExNDA5RjgzRjQ5NzM2MUY5ODcxMzE2MDk0MQorOjEwNkIwMDAwRTZFNTBBMkI5ODJGRUZFMkZBRDFBQzA3QTlCOEUwNzRCQQorOjEwNkIxMDAwQzNGQTc5OEFDQjhEQkFEMzJDMEZCMUFFRDQ5NzA2RkVDNworOjEwNkIyMDAwRkZERTU5REFDODNDRTQyM0FEMThDQUJDMkNBRDA0RTYzQworOjEwNkIzMDAwRDlFQzY2Nzg4RUNERDM0NjQzNURFNDBCOThFN0E5RTVBMgorOjEwNkI0MDAwQjVFNzFEOEM4NTc2MDlFMzg5MUZGNDIxREMzNzAzNzFENQorOjEwNkI1MDAwOTYwNDlFQzc5MEEwQjlDQTQwOEYyNTZDMjE5ODI3OTBCMworOjEwNkI2MDAwMUMxRjZFOEU4MUY4REYyNkUyODE3MzUzRDk3RUQ1MDIxOQorOjEwNkI3MDAwRkJBRjhDMDdCNEQ1NTBENjlERTZGN0U2OTQxMjNDNzc3MAorOjEwNkI4MDAwRDk5RTQ3NTc5QjhFNzk3NEMwNkY3QTdBOURDRUU3MzEzNAorOjEwNkI5MDAwM0Q4RkYxMjVCNTQzNkVDOTYzRjM5QTA2QTVCMDQzMDQ1MgorOjEwNkJBMDAwMUY3NTY2NTdFOEY4NzA3NkRFRDVGMUUxM0REMEZFMkExNAorOjEwNkJCMDAwRjg3MDZFMUVFM0MzNzk3OTNERTBDM0E1NzlFRDdDQjgyQQorOjEwNkJDMDAwMDREQTc3Qzc4NzBGNzFGRTdCQUExQjNFRkMzOUE3Q0Y3QgorOjEwNkJEMDAwRTdGMjNBOTVBMzBGRTU0NTk1QTM4QzFFMDRCRDAzMUY2QworOjEwNkJFMDAwODJCRTZGRTBGRDUxRjlCOTMyMUFCREY3ODAyRkVCRjM4OQorOjEwNkJGMDAwN0E2MDE3QjZGN0Q3NDNGQUVGQ0NGRThCQ0ZFRkRBRkUwOQorOjEwNkMwMDAwREIwMjc5RTNCQUZEMUVFNTk3QTc2MTdFOTQ1RjdFMDEwMgorOjEwNkMxMDAwMjVFNTk3MkQ4QzVGNTQ5NjVGNkVFMkFGNzY3RDEzNjYwNworOjEwNkMyMDAwNzIwMkYyRjNGNDc5NUFCRkNCNkJENzM3REIwMUNFRTZCMQorOjEwNkMzMDAwQkM5QzMxMjY3RkZFM0I5Q0JFOUI3ODk5MTAzRTRBNDAwRgorOjEwNkM0MDAwMkU1MEI4QkRBNEE3RDdFNzM5QkZGODQ3QjNCQzUzQUFBNQorOjEwNkM1MDAwRDlDQUMwQUVEQzc3OEFEQTkxMDAzRTJFMEZDNjZDNkVDMAorOjEwNkM2MDAwM0QwMDc2MjM1MTFBRTJFMTFFQUNDRUUwRDQyQjVGMTUzNQorOjEwNkM3MDAwRjk5NTUxRTE0NEM3RkY2MzM0NzlEQTA0Nzg3Mzc0QjQ0OQorOjEwNkM4MDAwRTdDREY4REE5MUM3RTgzQ0M0RTFGMTVERTcyMUUwMDcyMAorOjEwNkM5MDAwRjMyOEMyNzlBODk2QjUzQTNERkY0MTQ0NUVCRDBGNzgwRQorOjEwNkNBMDAwMUIzQjNFMkMxMzlDNTczMDFFRTIyNzQyOUU5MjAxRjQ2MAorOjEwNkNCMDAwRkI5MTFEQkZGRjI0RjJGRDI3QjBERUIxMUFGREJFMjBGRgorOjEwNkNDMDAwRjI3RDEyQjhGMjMzNDA4RTUxNzk4Njc2QjI4NkU3MUM5NworOjEwNkNEMDAwRUJEQzhDMUVDQzc0REY2ODYzRTcyNERBRjFENUQwMEZDRgorOjEwNkNFMDAwRjFFNTU1N0Q1RjQyRkY4RDBBM0I0RkQyNThFRjkyRDhCOAorOjEwNkNGMDAwMzk0MTk2RUZGQjVFODY4NkZDMUE0NTBFODVBRjUyMEUzMworOjEwNkQwMDAwNURDODQzRkI0Q0ZCMTc5NEREQzlBMUNCOUNCRkE5MUNGQworOjEwNkQxMDAwRkEzRjY4MUZDQUU5NUEwRUM1RTczMzc4MzlGMjk5N0MwMQorOjEwNkQyMDAwRTk0QzBFMjVGMDc2QkRGMjI1ODM5RjUyMjc4N0UyRjNDQQorOjEwNkQzMDAwQTNDOEExMDc1NTA2ODcyODdDOUE5ODVGMENGRTE1Q0QzRAorOjEwNkQ0MDAwOTVDRkY4MzQyOTVGQTdEN0U4NzdDOUQwOUYxN0JFNEZGMgorOjEwNkQ1MDAwQzVCQzMzQ0NCN0YwOTMzODRGQjQ3RDg2OUFFRkU4Njk2MQorOjEwNkQ2MDAwMUVCNTlBOUZEQTMxRkY4Qzc0OTM0N0JERTFEMTkwMEQyNworOjEwNkQ3MDAwRTAyREYyOUNDNEI4RTZGQzY5ODFDN0FBQTY1NTIzQzhEOQorOjEwNkQ4MDAwNTBDOEQzQkEzQzA4RUNDQUIzNDdCRTQxRkZDOERFQ0NGQQorOjEwNkQ5MDAwNEEwRkFDQjNFNUI1NTE4NkJDMkMzMUZFN0REQzlGMzY4NQorOjEwNkRBMDAwNDEyRUQ4MDlGRUQ5NzMwNzZERThGNzk0ODlGQUQ0MThGMworOjEwNkRCMDAwM0E5RkVBODM1NjEyNDAzOUM1RUUyOTEwRjEzMEVCQzFGMworOjEwNkRDMDAwQkE1NkYwQzc1Qjg5RUVERTI4RENDRkE4ODk0MEI3RDY3QgorOjEwNkREMDAwODNFQ0ZFMjY5MkMyREVGQjg5N0QxNURFQjczOERBMTgxOQorOjEwNkRFMDAwRTc0RkQyOEM3MUZFRTRGMjVFQTZCOEJGMzFDRURGNjcwQQorOjEwNkRGMDAwQjYzMUNFREZENzY3OENGM0Y3NUYzNERDMTRGNzM3QzZENAorOjEwNkUwMDAwRjkwN0FGMjgzM0M1RkQ4RDcxRkU4Q0ZBRTlBNkI4QkYyRQorOjEwNkUxMDAwMzFDRTlGQjNEOTE4RTdDRjBCMThFM0ZDMEJERjdBRDkzQgorOjEwNkUyMDAwMDZGQkVBMjEyRkRDNjc4QUZGMUJFM0ZEMTQyMEFEOTlFNgorOjEwNkUzMDAwQkFGQjY0OEFGNkFFMzZCNDlGMTc2MkY3OTQwRDBCQUVCOAorOjEwNkU0MDAwMzU3RUQ3QzBFRTM5RjBEM0ZGMDEzQ0JGMjAzRTFCRDBDQQorOjEwNkU1MDAwOTk0MkMyNkZGNjg3RkM5NjgwRTQwOUQyNjY4QkY3RUUwMgorOjEwNkU2MDAwMkE4MTcyMzhGNzhCMkZEQzZDQkMxRjYxNzFDMDU4RkYxMAorOjEwNkU3MDAwRUFDRkU1MDcyMTBGQUMxQTk4ODhGNjUzRkQ4MjE0MDg3MworOjEwNkU4MDAwQjgzQkM3RkJEMjE3OENERjBCM0ZFRjUyQkU5RTczRENDMworOjEwNkU5MDAwMjgzOEI3NDVDNkYzQ0M2NjNBNTlGOEQ2QURGQzVFMzExMgorOjEwNkVBMDAwQUQxNUVFOEYxMDcwMTBGNEUyRTJGNDIyRTYyNUUwQjFBOQorOjEwNkVCMDAwNTQ1RTg2N0MyRUUwMjBFRUQ3QUEzMkFEQkZDMzdBRjdBRgorOjEwNkVDMDAwNkVDNUVGQ0NFQjM2QUY2MzUzQkUzMUNFNDczQUYwODk5NworOjEwNkVEMDAwODNFNTA5RDE3NTQxOUM1Q0Y2RTc5QUY4QzQwODg3Q0UzMgorOjEwNkVFMDAwRTBENzUzQkU1MTM5MUM2MkQyOEM3QzEzQUJDNjk5RTlGMgorOjEwNkVGMDAwMEVGMTZEODY2NzdDQUU5MTlGQ0NGMDc0N0FGQTQ1QTU1MQorOjEwNkYwMDAwMkY3MTNGMkFBRTA3RTIyMTdCMjVGMkI0RDQxMUFFOEI1QworOjEwNkYxMDAwOUFENkQ3RjU4RjQyNEY4NDA0MzBDRkMzMENERkU2N0M3RQorOjEwNkYyMDAwNjNCQzY1OTdFQTZCMDFGOTc4RkVBMzBCMzJFMkQ1MTdEMworOjEwNkYzMDAwMUEwMUZBQUM4QkZDQjM4M0JDN0Q0RkUzRUQ4N0YyNzU4RAorOjEwNkY0MDAwRkUxMTczQkNGRDJDRTQ0OUVBQ0VBQjQ4RUQ3OEQzNEM3RQorOjEwNkY1MDAwNzk5MjA3RkUwRDcxMjRGQThEQ0YwNjdFRDg3MjhGOUQyRgorOjEwNkY2MDAwREQxNzY2Q0U1RkYzRkQzMzFGRjVCMDQ2RDAwRjc4OEU4OAorOjEwNkY3MDAwNzhENkQwRkVENjM4N0YzRkE0MUJCRkM4QjFGQzYyOTYzRQorOjEwNkY4MDAwNUYwMEZBNkI2QzM4NzRGRTI1RTg1RTY5NzVDMTM4RDExNAorOjEwNkY5MDAwRUUyOTM1OUQzRjNDMERERjc3NzYwRkU0RjNDNDlCNDcyOAorOjEwNkZBMDAwQTJDNEFEQzVGRTU1RDhFRDc0OUY3NDIxOUZEOTMzMTc4NworOjEwNkZCMDAwQTFCRkY2N0Q1MkJCN0RERDc1M0YyMjhGQUNCMzUyREFBNworOjEwNkZDMDAwMkZBMzVFMEQ0QjcxOUU2OEY3OThDNTBFMzFFRUZGNzVDRAorOjEwNkZEMDAwRTczRDYzODdFOEY0NjhENUY3Q0VCRjA5RjNBMEYwNzYwNAorOjEwNkZFMDAwMENBMUYzNzQzQUE5N0QyM0Y1QzhCRTcxNDEzRjRGQzU4QQorOjEwNkZGMDAwMjcyMDVEODdERjkyMDMzOTZFQjhERjRBNERFQzU1RDAwQworOjEwNzAwMDAwRjE5RTI2OTE1NzU4MDNGNzMwMjVDM0YzQkNDNEFFRjI2NgorOjEwNzAxMDAwMkZDQTRDRjc2MDk5RUYzM0FBMUJDRUU2OTVDRUQ3MzkyRAorOjEwNzAyMDAwODVEQjUxMjVCQzJFQ0VBNTA5N0Y1Q0Y1NkNFNjZGREVCNQorOjEwNzAzMDAwNjRGMjYzOTYwQzcxNjI3QjZGNjY1OTA5QUNCRkNFMkQwQQorOjEwNzA0MDAwQTFGRDU0Mjc0OTg2NzhEMkYxRkM1MjdDRUZFMUZEOTdFRgorOjEwNzA1MDAwMDBFRjE1RTNGOTNBOUM1NzhBNjkxRjdGOEVCNzNGOTc3NworOjEwNzA2MDAwQ0ZGQTg1N0JCMTgwRkU2Q0IyMUMxNTlFRDcwRDYxRjMwMworOjEwNzA3MDAwRkYzQkI3QTNCRUMzRkQzNEVGQzc4Q0VDNzgzRjhERjk1RgorOjEwNzA4MDAwRkVDNDg5QjkzNTJEMjAxRUNDNzFERkRGNzU3NzNGQ0Q2OQorOjEwNzA5MDAwRkIxM0EzQzY3RjAxQkVGMUJEMjI3NDNGNjM4OEYxOUUzRQorOjEwNzBBMDAwQzQ2MDlDNkZDMzU0RjA0N0JDMjM3QkI2RTE1N0FEMjM0QgorOjEwNzBCMDAwRjRGQkI0OEEyMUNDMkU1REM3RjcyRDEwNTdDMkZEMDgxMgorOjEwNzBDMDAwMkZDRDcwQUFFMDcwNkFDOEY0NTYwMEZENkRCMkI1REUyRgorOjEwNzBEMDAwMEZGNDFCQjRCMUZCNDJDMzFGMTAxQ0E3REYyMkFEMTk3NAorOjEwNzBFMDAwRUFDNTVFMTVDRjU3RDRCOTg5MDNFRTE5MEEwRkIzQTBDQworOjEwNzBGMDAwNUYyNEM1RTcxQTBGRjdGRUE2NkM5MTdBMDEzODg1NUMwQworOjEwNzEwMDAwQjAyQUM0RUZBNEY0QjI3Njg4MUJGMUIwOEVBQzY5ODZDNQorOjEwNzExMDAwN0I1MTEyQjc3QzRERDI3MTNGRTExQUVGMDI3OTM0OEY2NworOjEwNzEyMDAwNDRGNTczM0VDQ0U5NjNEQTMzRTkwQUVDQ0IxMkVERDFENgorOjEwNzEzMDAwRUY3OTc4Nzg4OEM4NjNGMzNFMDRGNDMxRDY3RTY0ODRBRQorOjEwNzE0MDAwODQ3QTgyRUQ0MzYwNkI4QkZGNjlCMzE4Q0UzNThCRjI4NgorOjEwNzE1MDAwQkQ4QzcxN0VGODRFRDBGM0Y1MzJBOUQ5RTU2MDc0QTZFNgorOjEwNzE2MDAwQkY3RjZERUQ5MEFCRjM0RjE3MkYyMjUxRkRBOERCRjlEOAorOjEwNzE3MDAwQkE3MjU0NkYwM0MwQkRGODdEMTVFMzFGMEI4NURDOUYwOQorOjEwNzE4MDAwNjcyMTcwQ0ZFOUVEOUMxQzZGREZDMkYyRTFDOUU1MkJFRQorOjEwNzE5MDAwNTc2NDYxQzcxM0VDOUY0MDNDNjJFMTMyNjcwMEUyMTMyMQorOjEwNzFBMDAwMEI5QkRDNzhGRjFGNTkyNDYxRENBNEJBRTk5MDE3RUEzNQorOjEwNzFCMDAwMEI0NzhFNzRBMUJDOEM5NzI0QjgwNzEyNEMwODI2MUY2RAorOjEwNzFDMDAwMTU3MjVDRDA5RkNDODE0NEZCOUZDREY1MERENTJCRUI4OAorOjEwNzFEMDAwRTJFOUJBMTY2RUQ5REEwQ0U3MkNGRTQxMEQwOEMwRkZDMQorOjEwNzFFMDAwMjY3RTZFREVCQzJFNzEzRjVERTRGRUJDNEYzNkU5RUZCRAorOjEwNzFGMDAwRTdCNkFDRkFDNzA3QzZGQkYzRkVGMUMxN0Y3MzdGREVDQgorOjEwNzIwMDAwQkVERkZDRTMwM0I4OUZEQjdDN0Y5RUUwRkI4RjY0REY4NworOjEwNzIxMDAwNDcwRkQzN0ZERjQ2OTVGMjhBRTE1MDJBNjQwRUUyMjlCOAorOjEwNzIyMDAwMERENzM5ODNBRkQzRkYwRDkxOEVEQjIzNzBCOUFERTk1NAorOjEwNzIzMDAwMkQ4NEY3NDc1NjNBMUU2NTFFNkIxOTAzOERGNUExNDQ0MAorOjEwNzI0MDAwOEMyRjhCN0NBNDk5RjY4NjA5QTBEN0NGREFDMjg1NzBFMworOjEwNzI1MDAwNUVFQ0VDNkIxRjBFODRCQzgzNEY3Rjc4REUwOTc5MDhFRgorOjEwNzI2MDAwRkY1NEMyNEU3ODdFRTI5MUY3OUMxQUM1RUZBNzhGQjAwQgorOjEwNzI3MDAwN0JCNkVFRTZGQTUyQzBFRDFGOUMxRTBBMEJCQzg3ODE1RQorOjEwNzI4MDAwMUVFRTU5Rjk2RDg5RkVCRTIwQjIyMjE1RjVEQ0UyODBCMgorOjEwNzI5MDAwOEMyOTJDNDI4RTJDN0QyMTFFMkNCOUY2RkFGMjlEQzkyOAorOjEwNzJBMDAwODZCQUQwN0ZDQjYzNDg0RDM0QkZBOEFCODBGMUNERTIyNgorOjEwNzJCMDAwMUQ1QjZERkQ1NTE4REZENzA2RTM5RjgwQzQ2OTRBMzcxMworOjEwNzJDMDAwMjdGNjM4RDE0RTE2RjNBOURDMzFDQzA2NzZENTNGOUI5NAorOjEwNzJEMDAwNjI0ODEwRjY2QjRBQUI5NTlEMzdENUE2NDg5NDVFN0QwMworOjEwNzJFMDAwOUMyRUNERjM3Q0YzRjU3OEVDNkZGRTI2MjY2RjJCRTgxMQorOjEwNzJGMDAwNTgyQjI4NUM3RDRERUNCRTRGRjMzQUU2N0ZBQTRFRUM0RQorOjEwNzMwMDAwNDNFMTNERkY3MTZBQzFBOEFDRkQyMzE0NkZCRTE1M0Y3OAorOjEwNzMxMDAwQzJGQzcxRjMzQTJCRkNFNkZCM0QzNTk0RjcwQjM5N0U0QQorOjEwNzMyMDAwRTdENjFCREYyRjZDRkEzMUY2MzM4RkE4RUIyMDRGNzJCNAorOjEwNzMzMDAwN0U4M0Y5RkRBNDJGODA0ODE3OUFGMkQxNkQwNTVDMUU1QgorOjEwNzM0MDAwOTc5MDUxMjA4RkY3REIzMzEyQTM5RDNCMTVFNUE5OTU0QworOjEwNzM1MDAwMkU2NEEyMkY1N0RBQjEzQ0IxOTI2MDc5Nzg4ODhBNzA5NgorOjEwNzM2MDAwNUZENjc0RTg0MUEwOUZBQUJEQkJGMDFFQTY5NkMwODQ1QworOjEwNzM3MDAwMTQ0QUQ2RTRDNkE2REJGMUZFREExQjc5RENGQ0FFOEUzRAorOjEwNzM4MDAwRjc4QkE2MTUxNDQzRkU5MUU5QkMzNzVGRjcxQzhFMDdGNworOjEwNzM5MDAwNzFGRTdCMEVBQ0I3MTA5RTJCMTdGNEVCMzk3NzMwQzMyMAorOjEwNzNBMDAwMDFFM0JBQzVCQTQ2RDE3NUM5M0Q1Rjk3NTg4RjU4OUY1QQorOjEwNzNCMDAwNzhCRjlDQ0FDRkE4RjE3MDRFRTc4N0I5QkM5RUQ3Mzg3QQorOjEwNzNDMDAwQURBRTFGMDVDNTlBRDdCRTQwRkYwMEUxRkI5MkY2RkJBQworOjEwNzNEMDAwOTFFRDNGNkU4NTc5OEYyN0E2N0Q4OTlGQkM0Rjc0RjQxMAorOjEwNzNFMDAwQjY5MDY4NzgzRkFDOTlBRTA0OUVBOURFQzZFRkVEN0NGRQorOjEwNzNGMDAwREZEMjRFNEY0RDNGNDFCODA4N0NDMzBEODJGQTdCQTlDNgorOjEwNzQwMDAwMjg1RDE5RjYwOTk0OEUwQ0Y1RjkwREM2RkExOTZCNjgwQQorOjEwNzQxMDAwMTBGMEZCNDJEM0VGNDU5QzMxRTVEMzg4RDI1MzkwQ0U5OAorOjEwNzQyMDAwRTBBMDZBMTNFMURDRDA3Q0UyQUQ2Mzc5QzdFQ0RDRTE3QgorOjEwNzQzMDAwMDlBNUUxQ0Q4NzgxMEYxQjE5MUZGQzkzRTM3RjY3ODFBRAorOjEwNzQ0MDAwNzcxNkUwOUYyODVBMjFERTE3QjlCQUFGMEMxNzFGNTdERAorOjEwNzQ1MDAwQUM5MzVDQzA1RjczNkI4N0UxRkQ0M0MzODk4NkZEREQ0MAorOjEwNzQ2MDAwRDU4OURERjkxMEU3RkZDQTFBMkJCMTUxNjNBMTkyOEVCRAorOjEwNzQ3MDAwMDE3MkFFNzI4RjJDRUVGQjcyNENFRDBERjdENzMwM0VFMQorOjEwNzQ4MDAwNUFGRUY4MkU1QjVGNUEyRUFBNTlDOEVDQTEwMEUzMUJFNgorOjEwNzQ5MDAwNzFBRkI2QTAzRkExOUY5NkFDNkI0NkJGMDNERDZGMTlERAorOjEwNzRBMDAwRjhBQjFBQ0U4MTE0MDIxRjlCOUVEN0RDODg3OEE4MzZEMQorOjEwNzRCMDAwRDk0NURGMkJFMEZCMzMwRkYxMDA3REZBMUU3NERBRTFEMgorOjEwNzRDMDAwMUM1OTc3RUIyNjFERkQ0OUU4NkYzQTc3MzAwQkVERTU0NworOjEwNzREMDAwNzNBQURBMDdEQUY5MTJEODNERkU5MkUyMUIwNUNGMjkyQQorOjEwNzRFMDAwQkM1MDhGODY1N0M1RTNCREM2NDcyRUM5NDRDNUZCNTU2MgorOjEwNzRGMDAwN0NBM0UwQkM3RkU4RUYwMzA5QkJBRjhERDFBQjU4NkYzNQorOjEwNzUwMDAwQjU3RDFERUVBM0FCNERGNDVBNDEzNzZDRTAyN0FFRDhFNAorOjEwNzUxMDAwOUU4Qzc5NkFCNEZGQzJCRDYwNUY2REI3QTJGREU0Mjc5RgorOjEwNzUyMDAwRjdBNUMxQkQxQURFQzdEOEJEQkM5NTdCOTM3MDFGNUZBMAorOjEwNzUzMDAwNTlDQkUyNEI5NTNCOTJGMDlDMzBERDQ3QkYwRkZFMTlEMworOjEwNzU0MDAwODE4RjIzQjVFMzZDN0QxMTVGNkVCQzJGOENFQ0I1RkE5NworOjEwNzU1MDAwRjkzREU3NDhFNzAyNEYxREY3QzEyNjNDRDUzN0JGOTlGMworOjEwNzU2MDAwQTY3NkRDMTdFQkYwRDRENjA5OUUwQ0Y3NThGRTVBQzg2NQorOjEwNzU3MDAwMTE4RTI3RjIwODk3M0ZGN0JFOTEwNTcxQjU3MzM1QjFBQgorOjEwNzU4MDAwMUUzOUNBRkVBQUZEM0VFMzc5RDc2MjNFOURGMDNGOTZDMgorOjEwNzU5MDAwRjcxM0JGQUZFMEU5MEQ3ODNEQkZBRTE4RjE2NkM2NTdFRgorOjEwNzVBMDAwRjk3RkU2MjI1RUM4REY5RDA0RkNEMjc3NjU5MDdCQTY1QQorOjEwNzVCMDAwRDNFN0Y3NDg4QzVGRUU1QTMzQTkxQ0Y0Rjk4MTAyNjZEMQorOjEwNzVDMDAwMUZGRjk1Q0EyRDJEODc5MDQzNTQ2RTY5NTQ2RUJENDc5OQorOjEwNzVEMDAwRTUxOUQ0M0Y1ODk5ODZGNTBGNTdBQTU4N0VCQzMyMTc0MworOjEwNzVFMDAwQ0IzNjZFMTcwQTNFQTI4NDYwMDNCQkYyQUQwMjY2RUY5MworOjEwNzVGMDAwQkM1NTIwRkNDMTBGQTQ4MTY5NTFGRTlGRjc4QTJERTA4NAorOjEwNzYwMDAwRUFGNUNGOUYzOTgxREEzQkI3Njg0NjdEMzg3Qjg2NTFGMgorOjEwNzYxMDAwREY4NUFDQUU4OTcwN0VEOUZGMzhCQjE3QUVEMjdCOURCQgorOjEwNzYyMDAwQTEzRDUxNTREQjM0RDhEN0U3OEU4ODNDNDc3RTUzNkQ1QgorOjEwNzYzMDAwNzBGRUZFRjYyOUM5ODZGNjMzRUJGQjFCRUE0NzBBNTRCNworOjEwNzY0MDAwNzY0RjUwNzk4NkUxRjkxRDczODYxOEVBMTVGQ0RFNUJFQQorOjEwNzY1MDAwQTI4RTQ2QkU3OTgwRTdDOTEyMzI5QUUxODVFN0RGNUNFNworOjEwNzY2MDAwQTgxOUQ1RTdGQjc0QkUxN0RFQjZFMjdCMzMzRTA0NUU5NQorOjEwNzY3MDAwRTc2RDk2ODk4RkY2Mzc3NzMzOTU1Rjc0OEE2RDBEMTRCMQorOjEwNzY4MDAwNEZGNEJCQUYzRTcyQzI1OTE5NTJCNzYzQzRCQkEzNjk3MgorOjEwNzY5MDAwRkRDODBFOTZBRjdCQTQzNkY5QTc2MDNGMUREOTkxOUExRAorOjEwNzZBMDAwMDA3RTYzNUY5RENDRUQwQzE3REVGNzI2RkExRDU3QkJGRAorOjEwNzZCMDAwMEFGMzcyMkEwMjMxNzhFRUEyQTJDNUZGQUNBOEMzNEYyQQorOjEwNzZDMDAwMkVBMDg5MDc3Q0YzQkUxQzA4NEE4ODNGRTZGN0Y4NzVCMAorOjEwNzZEMDAwMENDNjJENEU1MEJCQ0U0NUY1QzQwOTg5RDQ0MjA5MDdDRQorOjEwNzZFMDAwQzUxMkU5RkI3RkI1QTYwNjgwQUZDQkZGMjM2QjY5NDBDRgorOjEwNzZGMDAwNEZCRjhFRTU3MTI5MDlGQkZCRjI1MEQ2QjZCNTQ4NUY0NgorOjEwNzcwMDAwRUFDRTIwRjI2RjBDRUU4RkU2ODZEOEZBODgzNEJDM0ZDMgorOjEwNzcxMDAwRTBGRjQ0MTJEMTkyRTgyNDk2REZGN0UxNjcwQUM1RDM2RgorOjEwNzcyMDAwRTJFQ0Q2NDJCODE3Njc4RTNCOTgzQThCN0U3N0FBRDFBNworOjEwNzczMDAwQ0FFRUU5QTdGREJBNjg3REY5NkY2MkY4RkQ4RjVBMUY5RQorOjEwNzc0MDAwRDg2RjQ0RTAxOTI4ODQ3NUE3RjZGM0E2MEVBNUZDRjFCRQorOjEwNzc1MDAwRTU4MjQwMjFDQUI1NDc1MjkxQUZDQzcwNkZCM0Y5MTBBMgorOjEwNzc2MDAwQkU3RUUwMDMyOTIyMjcyMzdDQzZFMjhENTRCOEY1MDVBRQorOjEwNzc3MDAwNzkzM0Q3RUFFOTBERkFBQTZEOUQ5NUREOEZBNzY4MDlERgorOjEwNzc4MDAwRUNGRUM5REQ0OEM3NkQ4QTNBMTFENkRENTZFRkM2RkI1RgorOjEwNzc5MDAwODNDNEI4OTVFQjY0OERERDVGNDlFOTEyREFBRjk3N0Q1QworOjEwNzdBMDAwNzBERjhGRDA1QkZFN0FDOTA3RjcwMjk5RTlFNkZFN0JBRQorOjEwNzdCMDAwNDc2MTlFQkZEOUZFMTVFNTE5Q0FBQjNFOUQxREIxRTREOAorOjEwNzdDMDAwMzUxOTdGRDc4MzhDMEMyOTMzMENGNzgzQjFERjNGMjEyOAorOjEwNzdEMDAwQkVEMTg2RkNEQjY1RTk3RkZBQ0M2MTQxQkIyNjExRjZBMAorOjEwNzdFMDAwNDUyN0RGOTc5MUNFNEVBNjM3OTRBNDY1NDAzQUNERkU0QgorOjEwNzdGMDAwOTJFRkQzRkE1NzUzRkRDN0UxMUNGMTNEODM3RDY1MDAzRAorOjEwNzgwMDAwRDdBNTk2NzVDRjRBMTYzODc3N0RFQ0E3NzBDRkVFOTczRgorOjEwNzgxMDAwMkY1QTNEMzBFQzkyNUYyRjFFOEM3MTA5NkU3Rjc3OTQ0QQorOjEwNzgyMDAwNUI5QUIwMTc3QUMzM0Q1MTE1QUEwQkY1Qjg1QTJCMTFDNAorOjEwNzgzMDAwQjZGRTAwQ0VGMzRFQjJGMzMxQzA5QjZCMTk3QjdFQUMyQgorOjEwNzg0MDAwRDhCOTE2RkMwMzczNERFN0Q4OEVGMTdCM0E2NjBDNjUwOAorOjEwNzg1MDAwRjI0NEU4RkIwRDQzOTlERDM0RDdDMkU4OUFCQzJFQjE1RgorOjEwNzg2MDAwN0JCNEY4RUY1RjA4N0QyMEU0QjU5MEZCRjM4NjMyRkIzNAorOjEwNzg3MDAwNDJDODZCNkEzOUEwREM1QTAwQjc0N0QxNzUyRTdCMjEwQworOjEwNzg4MDAwODZGOUQzNTVFMjAyMzgyRTY2NjgyMjVCODczMjc5QjFEOQorOjEwNzg5MDAwQzRGNkUyOTNDMDRCMEI0OTJCRUFEMzJGQUQ4MTA1QUQ2MworOjEwNzhBMDAwNkVGODdFNkI2RDJGRkNERUVBNDFGRjMyRDcyRjcwQ0Q3NAorOjEwNzhCMDAwM0ZDOEE1ODU5Q0ZGOTYzNzQ4NzgxRjE0RTE3QTcyM0UzMQorOjEwNzhDMDAwRUY5RkJDNjA4REU4OERGNDI4RkFDNUE0NTdFNjczQkQyMAorOjEwNzhEMDAwM0E5Rjk4RUNDMDA2QTNCRUYzQzZCM0NERkUxMjNBMkU3MworOjEwNzhFMDAwRThDRkM4QkNBOEZENEM2MUI3QzAxNzc4RjM2NjlDQjc1OQorOjEwNzhGMDAwRTQwOTQ0OTlDNzQyMTIwRUMyQkQ1OENCNzczMDdGQkQxMAorOjEwNzkwMDAwNzk1RUU2NzVGNDc0OUUwQjNDRDNDNjI3OERENDhENkJERgorOjEwNzkxMDAwOUFCNzgwMzczQUI4NzU3ODEwNzA1RkUwNjdGMDVDRDAzRQorOjEwNzkyMDAwQzRFMjFGOUY3MzdCNERDNDZCQ0NGODVGNDhCQzM3NDNFOAorOjEwNzkzMDAwM0VFMkMyOEQ1NDdFQkEyM0Y0MjBFODYwRjFBRTAwQzY2OAorOjEwNzk0MDAwNjdCRTIyMEQwOTBFQ0EwN0NCMzZFRjlBNzk4RDBBRkI2NgorOjEwNzk1MDAwRkM0M0I4MEY5OUQzMkI5ODY1NDkyMjI0RDk3RkU4QzlGNQorOjEwNzk2MDAwRjI4MUREQzcyN0ZFNTc3MDIyRkM3RTcxRkM4RUMyNjU1NgorOjEwNzk3MDAwN0UyM0JCM0Y1Q0Q3OEVFN0RERkI5MUFFMTdGOUZEMzY2QQorOjEwNzk4MDAwRjBERjJFRTJGRUQwRUVFNjU5QURCMDczRkVERENGOTcwQworOjEwNzk5MDAwQzFGMTdGM0RFRjc3ODc3NjY2MUY2NTQ1REQ2RkI1REIwQgorOjEwNzlBMDAwNDVEREU4RTM0RkFDQzE4MUEwOEZDMzAzMTVENDQ3MTc3MQorOjEwNzlCMDAwMTRDRjg3QTUyOUEwOUZCMzcwREZEMDk5QkM1REMwRjUxNworOjEwNzlDMDAwRjI3Q0QwRDNCNDNDQkVGOTY1QkNFN0U5RjM4RDJGNjNGQworOjEwNzlEMDAwM0NEOEY2RTJGQzA0QjA5NzhGNkY5RUZCNTMzODA3NzFEQQorOjEwNzlFMDAwN0NDNzVDRDRDQjBCOUYxNjdBRDk2N0QzRUJGQjcxOUIxQQorOjEwNzlGMDAwMkI5RUZCMjFEMEU5MEJCMTE4Qzc1OEQwRTJFM0Y2MzgzMworOjEwN0EwMDAwRERENzgwNUNBNEUzQTE5RUQ4QzhFNEUwNDJEMDVGMDU0NgorOjEwN0ExMDAwQThCRjcyQTBERDgzMEI3QzM5NDBFRkJBRTdBOEQ3MUU2MAorOjEwN0EyMDAwOUNFQjFCODVERjEzNTc5MEREQjNFQTBBODJGRTEyRkE0NgorOjEwN0EzMDAwNTVFOERENTdGQkZBMkUwRjA1M0U5MkRGRkVFMDA3NzQ5NgorOjEwN0E0MDAwRkRBNzc3Q0JFOEQzNTkyRTZGMUQwNEJGMEZEMzk5MUMyOAorOjEwN0E1MDAwRkZFRUYwQjZCNEMzREJERDAzNzg1NzAyQkNEMTFFNjI4MworOjEwN0E2MDAwRjAzRTVBQ0ZFMDdDNkMxRDgzN0JERDhFOEMwNEQ4MDcwMgorOjEwN0E3MDAwMUZBRENGNDAzQkU4RTg4RTJDODRGN0JDQjUxNERFNjgyMAorOjEwN0E4MDAwMDdBQjQ2M0JBODlFQzIxQkVDN0Y4MDM3MURCN0IyNDVCMworOjEwN0E5MDAwRTVGMEY2MzA3OEQ3NzMzREI0OEU5NUYzM0FDMEQ1N0ZENAorOjEwN0FBMDAwMzdDODk1MDc3RjE5RTNDMUZCQkE2MzgzQTlCMDRGMzk4MworOjEwN0FCMDAwQjE0QjI2OTBBN0QxNkUyNzcxN0I0NkMwRjk1RkE0RTEzOAorOjEwN0FDMDAwNTlCMEFCM0FEODM3RUI2MzA4Rjg3MzE3RkZDRTg5RTdBNAorOjEwN0FEMDAwQTRCRTk0NEFGQjAwMDI0RTM1RkMyOTAxQzY4QjhDREYwNAorOjEwN0FFMDAwNkVENzc4MEE4Qjc1NzY0RDBGRjE1MzQ1QkM3ODhFQTExMQorOjEwN0FGMDAwQUFFOTRGMUY4MTVEMEZENzJDQzFCRUJGNEFEQzhGQjFGMQorOjEwN0IwMDAwRDc3ODNGODZBNDgyNENDM0YzQjI3NjNCRDBDMTAwRjM1MgorOjEwN0IxMDAwRkQyMTNFRkNCRDlDOEI1OTVGREY3RDFGRjI3MzM4NUJGRQorOjEwN0IyMDAwRUY1N0FGOEUwQjVBQzExRjE1REUyNTIxQkU5NzNGNTA3MAorOjEwN0IzMDAwOUE1MDRBMjAwRTU3ODNGMzk4NUFDOEY0QjNBNDY5RThDMAorOjEwN0I0MDAwNjc4Q0ExNzQxMzQ3QzdGM0MyNjVDMkYwNUM3NTMxQkY3RgorOjEwN0I1MDAwRTMxNjNBQUUzMzMyNUZGM0YzOUI0MTEwODE3RTc3NDRGNAorOjEwN0I2MDAwRjc1M0ZGOTA4RkIzNUNCNkUwM0U2NDk5OERFRDQ3NDRDOAorOjEwN0I3MDAwM0VDQzVEODVDQzZFQjhBQjkwRUQ0QkU2MTZCMjdDOTNGNworOjEwN0I4MDAwQjM5MDNDNDVGQjNEN0I3RDBDQ0ZFRjFFOEZGRTRGNzFDQworOjEwN0I5MDAwM0Y4MjIyRTBFNjUyQ0UxODdFNjc0MjA5RTNFRkMwN0NDNgorOjEwN0JBMDAwNzZFRDIxQkM3RkY3MzNGODE2OEQ2QjhBODAxMkIwNkJBRgorOjEwN0JCMDAwRDhGN0VGNUFEOUJEMkU3NzhFRkUxM0ZBNEQzRjhCRjVDRAorOjEwN0JDMDAwQUE2MDdGN0Q5NjZBRjcwMDFERjlFMTFFM0M0QTdGM0Y1RgorOjEwN0JEMDAwOEE2M0ZFNzI5MjkyQTgwMDdGRERDMUU1RUQ1RDYzNjI2QgorOjEwN0JFMDAwMzREMDRCNzc4RUY5OTExNzRBM0E4RTFGODIxNjc1QTVCRAorOjEwN0JGMDAwMDcxRTAzM0FCQTI3RUREOEY3RUM3NDQ5QUIyQ0NDNkVDQworOjEwN0MwMDAwNTlENThCNjAxRTUxMTEzNURGQzE2RjRCNUZFREI5OTJCNQorOjEwN0MxMDAwREMxNUREMThGRERDQ0JDMDlGN0IyRDYxMDQzNTFBRTEzRQorOjEwN0MyMDAwNjlBODUzQjg2MjdEQzM0QkE1QjMzNjBFMjBFNDMwNTEyQQorOjEwN0MzMDAwODcwMjlFOTcwMTRDODAwRTJBMTJEMTJGNzAwQkY4OTU2NworOjEwN0M0MDAwN0I0MUE5MjA3RDRENTc4OERGQzJDQTdBMDdERUZCQzE4MAorOjEwN0M1MDAwRkNDQzM3RjM3NURFMzY5QTA0MTNFOUZBODI2RjExODM5MAorOjEwN0M2MDAwMUY3RTU2RDAxMkNDQTE3MEJCNDUwOTM2MDNGQzJDNzY4MgorOjEwN0M3MDAwRDUwQUZCMDI2RkI5MzQxQ0Y2Q0JDQjU2Rjc2Q0JFQkZFRQorOjEwN0M4MDAwN0E2OUNBQUM4RDYzNjhEREMyRjIxQ0MyM0Y5MEYwOUU3NworOjEwN0M5MDAwOTYzQjI5NzMwMzVEREVBRDkwMTY3OTM4QzMxQkQwNUQyQQorOjEwN0NBMDAwNzUyRjc2MUY3OUY4NUU4OUM3OTM5OEZGNUZFMDY1MTg5NgorOjEwN0NCMDAwRUQ1RTBGREYzQkY5RkM2ODNGRjUwOUYwQkQyREJBNUZDMworOjEwN0NDMDAwNjkzN0E3NTM2MTZGMkVFNTdDQkE1NEQwRDkwRTIzN0Y1NAorOjEwN0NEMDAwMUUxNjdDMDJGNjJEODVEQjlEQkNFQzhDQ0VGRkNBRkIwQworOjEwN0NFMDAwRkY2QjIxRjM1RkJENzY5NUUzMkQ4RjIxNDFGREVGNTZBQworOjEwN0NGMDAwODk3MTZGRTFFNTNCODVDQzZFMTZGMzEwRjQ0QkI4NUZFQworOjEwN0QwMDAwQ0E0MjI1MDZEMDUxNUJDMzFBQjQ5NzE2OTlGQ0M0NDRFNQorOjEwN0QxMDAwRUZCRjkyQTNENURCRTU4RUU1MEE5NEI2RjAzQzk4OEZEMQorOjEwN0QyMDAwNzQ0MzJDRjJDQjlEQjY5RDU5RUM5RTE5NjNCQkU1MERCNworOjEwN0QzMDAwOENGRTk3M0JFQzY4MDc4QUZCQzVDNTNFNDBEODhEOEIwRgorOjEwN0Q0MDAwQzFERTAzN0JCRjkxRDlCNzBBQjdDQjJCRTg3RTBEODg4NAorOjEwN0Q1MDAwQ0U0QTQyQjVGRDYxREY1Q0FGQjM3RjUxOUU3MTdGQ0ZFQworOjEwN0Q2MDAwOUU2MTNFMThFNzRFODcxREUzOUYzNzJGMzNEQTRCNTY0RgorOjEwN0Q3MDAwNkU0NzVBM0JGRUZFOUQzMUFGODREQjRCRTZCQzEyOTk0OQorOjEwN0Q4MDAwRjMzMTZEQ0JGNjMxM0NBRjQ0RTFGNkIwQTBBMzBGMEI1RAorOjEwN0Q5MDAwQUREQ0FGRTIzN0M0RjFFNzkwNTYyQkJGNzc4RUY5RjczMQorOjEwN0RBMDAwQjg5RTlFMjAzQkYwM0U4NjM5MTJCQjY3RUI2Q0E5RDM5MAorOjEwN0RCMDAwNkZBMTcyRTkxMzdFQ0ZDREI5MUE3NkNFNzlDRTBGRDhFNgorOjEwN0RDMDAwMzlERUJCMTIxRkJDMTlFQ0UyMzkwOTM2MDVDQTRGRjg3RgorOjEwN0REMDAwRUY3RDdERUE0QTRGOUM0NTQwRkVDODNDRUVGNDkzNTk0NgorOjEwN0RFMDAwMTBCRjU5MDM3Mjk0RDU5RkQyQzZBMDE3OERENzlGRjhBNAorOjEwN0RGMDAwMTBERUNGQjg0Q0U3OERGNTBEQjMzNDNBREVEOTM3Rjg0NQorOjEwN0UwMDAwN0IzRkFENDM3Q0U4MzFDMUM3OUI1OTdEOTM3OEJGODVFQgorOjEwN0UxMDAwRDUxRjE3RUZCN0IyRkE0RjQ0RkZCQ0JFREVGNDdFOTUxNAorOjEwN0UyMDAwRTlGRENGNTk3RDcwRDFENjU5N0VCMEUzNzlEQzZBQ0VCOQorOjEwN0UzMDAwQjUxMkM2QUQzNEUwMzMwQUNGMzlBQjgzNDg1RjczMkMzQgorOjEwN0U0MDAwRkI1OTU5NDY4MjEwQjdFQ0FFRERFNDIyQUYwNkZBNUE3MAorOjEwN0U1MDAwNzZCNjM5QzE1RTk5MzE0Q0MzN0FGRTUwNUY3RTExQzU0QQorOjEwN0U2MDAwQ0Y5MjY5OTJERjA2RjFDQkY3MDNEOTVDOUY0NUNGQzc2QworOjEwN0U3MDAwRTdGQTY5OTI4N0Y1MjdFQzVGREFDRjg4QTJFMkFCRUZFOQorOjEwN0U4MDAwRTdBM0EyMEVGRDhDRjkyRUZEMzQ3NjlDQ0Y4NEVGQjJEMQorOjEwN0U5MDAwQUVEODYxQzY3RTg0M0RCODZEQjhFNjgzNzk5MUYxRDdERQorOjEwN0VBMDAwMTlGQzlDNEIxRkY1MjQ4MjNENDlERTY1QkZCQkI1NzRCMAorOjEwN0VCMDAwRjVDRTQxMjM2OEZGNEI1RkRBMzc2ODgxQ0VGRjUwNzVGRQorOjEwN0VDMDAwNDkyNjFBOTVDM0Q1OTcyNDJDQkY2QUZFRDgwNkY3NEJDRQorOjEwN0VEMDAwNTRFRDY5QjY0RDJDODBERjBCNkFCNjhERDNDRDZCOTkwRQorOjEwN0VFMDAwQzgzMzI2MjE2NUJBQ0U5RTk5NUY2NEUxN0NDNTdFNzc1MgorOjEwN0VGMDAwNjhFOTRCMjczMUZFQkNENEIyRjNGOEQzQzA5N0Q3MzIzMAorOjEwN0YwMDAwM0ZBNDc5N0Q1M0Y5Nzc5RjQxN0U0MTk0RkRDQUQyMjJFNworOjEwN0YxMDAwMjY4NzlGMUVBOTJEMDFCODREMDE5OEQxRjZFM0Q2NDRCRQorOjEwN0YyMDAwQ0ZEM0Q4QzNGQjlCMTNDN0U0RkJEQzEyQTc1RDJEODIyNAorOjEwN0YzMDAwNzhCODZGMEQ5Q0ZGNUJCMEM1M0QxQ0ZDREE1Mzg3OTY4QgorOjEwN0Y0MDAwM0Q1MEQ0QTU3RjM4Q0NGQ0MzNERDQzNGM0NBNzU3RUI2QworOjEwN0Y1MDAwMDM1NDc5OTFERkZFMzZGODE0RENGQjNDRjkyOUQyMUU3QworOjEwN0Y2MDAwNEYwNkJGMkIxRTg3NDdCRUZCNzBENkY4MzFFOEVGQzMyNAorOjEwN0Y3MDAwRkExMzQ1ODc5RTgyRjNERjA3RjlFRjMxREMzNTZBNjgzMworOjEwN0Y4MDAwMUNDODg1OTAzQkRFRTJBMkZDM0NBM0EwRTJCNzgwQkYwOAorOjEwN0Y5MDAwQkI0NjVEM0YxMTlFOTdDNjM4QjMyQjU4OUMwMUU5NjJFMgorOjEwN0ZBMDAwNDY4MTc3MkRCQzg3RjZFMERGRjFEOTk4QkZDRkY3NjcyMAorOjEwN0ZCMDAwMTlGRDdEQkVDMjc4NUZCNEZDODU3QTBFODdERjE2QjFFRAorOjEwN0ZDMDAwRjMxQjA3MkQ3NDlFQzMyM0YzMTBFMzUzMDNFRDgxNTY3NworOjEwN0ZEMDAwREE1RkRCRUFCRUMzRTA5Q0U1Q0U4MkQyOTc5MDlFRjhFMgorOjEwN0ZFMDAwRjgzQjBCN0NCRkQwOEYwRjE0MDlDRjdCM0E4RkNENDU2OAorOjEwN0ZGMDAwNEM5RkJFQzRGMUU2MUQ0M0U5NEQyN0Y3QTc4RjhGMzc4RAorOjEwODAwMDAwRDQ2NzRDNDkyNjlBREVFRjNDQTNCRkExM0U3QjRFODY0NworOjEwODAxMDAwQTFGRDFERjM4NjE4REU0RjhENjkxRDU5NzMxNTc2N0ZGRQorOjEwODAyMDAwQjVEMzE5MDdGOTExOUYzNkZERUI2Rjc3ODIzRERCMjgzOQorOjEwODAzMDAwRTNFRjE3MkQ3RTZERkJERkUwRjdCQ0NFRDEwNTI3QTM2NAorOjEwODA0MDAwN0RBQUEyRkZFRkNCODNFQzc3NTg4OUEyMjlGQTM4RDYxNAorOjEwODA1MDAwNjlEMkZBMjRDNDdENzVGMTkxQThGMTYzMTExRjU5RUEyMAorOjEwODA2MDAwNkFDMTNDQ0RGRjM2OEVGNTZFMTE4RjYzMEQ4N0Q0NzVENgorOjEwODA3MDAwRDA0NzFGMEM4MjNDOTUyQTA3NUJEN0U5N0Q0N0YwRjc3NAorOjEwODA4MDAwNEMyMENGRTM0QTA5QzQ3RjA5MUE4OUQ1OTc1NkUxRUZGRQorOjEwODA5MDAwQzg4REUzQkYyNzVENURDNEU0NzNENTgwN0IxNUI4Qjc5OQorOjEwODBBMDAwQTA5QTk2MjBGRjI3NTIzOTk1NDhFOUE0QjU5OTBDREQ4RQorOjEwODBCMDAwMDM3OURCNkUyN0U2RDUyQ0JGNzQyQkZBRjUwRkM2RjlEMgorOjEwODBDMDAwMEJFRUE1RUQ5NkQ2NEZDMjdBRDVBNTc4RUNGN0FGNzIzOAorOjEwODBEMDAwRUI0NENDQ0Y3RjQ1QzJGOEM5RDRGRTc3QUQ4NkY5NDNENworOjEwODBFMDAwRkJGQkU5Nzg1MzdGN0I2MzM5QzBBOTZBMEZDQkJGOTk0QgorOjEwODBGMDAwMkExRjFFMDlGRDJDNkI5ODg0REY0Rjk1Qzk0MTg5REEzMAorOjEwODEwMDAwNDk4OTk3RUVDNDdFQTc4MjhENDNFQjcyODk3MzJERTg2RgorOjEwODExMDAwNUREOTE2Q0NGRTA1QzgxNTlCMTNFNTRBRjVBNTU4RkM5QworOjEwODEyMDAwNkVGMjM4QTY5RjJGMTZCMTdEOEIzNUM0RTYzNUUxRDJBRAorOjEwODEzMDAwMzQ3QzJGRjA3RkI5MjhERDcwOUVENDlBREFBOEMwN0RGOAorOjEwODE0MDAwQURENjkwODRFRDZGQkEzNDA0NEJCMUNFM0ZFN0ZFMTI0QQorOjEwODE1MDAwN0Y5RkNDOUE3QTYxMjJFNERGRkUzOTQ1NzJBMUQ5NjUwRQorOjEwODE2MDAwOTJCQkU3NkI0NjI1RUFGN0QzRkYwRjc2MkJEMDk3MDAzQgorOjEwODE3MDAwODAwMDAwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkNEN0Q3OAorOjEwODE4MDAwMEI3ODU0RDVCNUYwM0U3M0NFQkM5Mjk5QzlFNEM5ODQzRQorOjEwODE5MDAwMjQ3MDAyNDkwODEwNjAzMjc5MTA0MjIwOTMxMDEwOTEyNworOjEwODFBMDAwQzAwMDU1MDkwNjE5OTA0NzQwMUUyMUJFRTI5NUZCNjdBNQorOjEwODFCMDAwNDIxMjA4ODIxNkI1QkY0NTQ1M0EyMDVBQjRCNjM3MjI1NgorOjEwODFDMDAwNTZEQTIyNEUwMDZEQUNGRTM2NkExRjc4NkI2RDUwMkY2QQorOjEwODFEMDAwODI0NThERTBCNUY0MTZFNUFFQjVGNkQ5OTkzOTQzODJGRQorOjEwODFFMDAwRDBERUZFRkYxRjNFQkU5RDc1RjYzRUZCQjFENkRBRUIzQworOjEwODFGMDAwQjVENzNFQjk3ODExN0VDQTE5QkJBODk1RTZGMzMyRjMxQworOjEwODIwMDAwMjYzMjc2RDM3OTg5NzkwQjE4RkIzQURGOUJFMDRFNjZFQworOjEwODIxMDAwNkNENjg2MUVDNTkyQzQxOEIzNTk5QzRGNjYwMjVDOTJGOAorOjEwODIyMDAwQUYyRUNGMEJCRjI3MUZBOTYxRUExODc4M0ZBOUQ3RTg2NworOjEwODIzMDAwQjVDMUZCNTA0RUIxODVFQjE3MzFFNkVEMDA5OEIxMUU4QworOjEwODI0MDAwNjVBRTNERkNEQ0U1MzYzMDk2OENDRjlCMTkyQjgyN0VFQgorOjEwODI1MDAwRkJEQUZEOENCMTE0QzY2RTc2MzJGRUQzMDg4RDUyMTk0RQorOjEwODI2MDAwMzM2QUVEQzVGQkREMTJENEMxQkMwMjJGOTg4MzRGQzIyNworOjEwODI3MDAwRUYyOTFFRkY2ODM3RjREMzVEQzFFNkVGQzc3RTk0RUVBOQorOjEwODI4MDAwMjE3M0VDRkY3M0YzQUY5Njk5NDU0QUEwNzU3ODcxRENDMgorOjEwODI5MDAwNTkyNUFBRTE1RUU4Q0ZEREI3OEUwMDk1REZCNjhFMENEQQorOjEwODJBMDAwQURGREFGNjVENkQ4MDFGM0Y4NzU3OTc5QjcxN0ZBRUI1QworOjEwODJCMDAwQkNBN0EwNDA1NkMzRTM1NkI4NEQ4NDE3RTZFQ0JEQzAzQQorOjEwODJDMDAwMEExOTVCNzczODU2QkQxN0Q2NTkwRDM0NDJCOEY3MjVEMQorOjEwODJEMDAwNzM3MDRGMjYzRDY3NTIxMjk2RTYzRDEyRDRBRjczRjQ4OQorOjEwODJFMDAwRTZGODYwRkMyOTJGNUI0MzZDMkNGNEZCQjI1NTYxMzAzRgorOjEwODJGMDAwQ0UxQjg1RkUwQUE0RTc5NDk3NDc1NDQ5MEU5OEU0MjFDMworOjEwODMwMDAwQjNDMkEwREQ3NUUzQkM5NTg4Qjc4MUU2N0IzMThBNEZBNworOjEwODMxMDAwNDQyOUQ2Q0JBQTI2MUE1ODMxNjNCNzU5Rjg2QkQzRTY0RAorOjEwODMyMDAwNDg4MUI4MzhDNkZDRURENzMyMDY3MzVEN0M3RTFFNjM4QgorOjEwODMzMDAwQzA0RjRCQ0VDNzEyRUNERkNFOUY5RkFCMUYzNDBERjE2OQorOjEwODM0MDAwNzg2RTAzNEMxQUQ2QjE2NDgzMzRFNjAwQUM4QkE5NzYwMAorOjEwODM1MDAwNzczNkUwQTEzQTZERTE0NkU2NDBCQzFCNjhCREQ1QTM4NworOjEwODM2MDAwRTM4MzJERDBGNEJBMjlGNjgwMjE4RUU4RDE4NUY0NTgyNAorOjEwODM3MDAwN0QzRTlFRkE1QjczM0U5M0M2NTk3QjNFOTFFMDc1RTc2NgorOjEwODM4MDAwQUQ1NDJFMzkzRjlBOUUwQkZFRjYyMTdGNDM3OTgzQzc2OQorOjEwODM5MDAwQkYxRUYxNTFERDcyQ0Q3NDFDQzdCRjMxQjVEMDZGOEJEQworOjEwODNBMDAwRTQxNzkzMTNGOTBBRjhDNUI1M0M4MjFGNUEzQTgxNUY2NgorOjEwODNCMDAwRUNDNDJGOEExN0YwRUE4MzMyOTI1RjY2MjNGREYzMTAzNAorOjEwODNDMDAwMTNDRTY5MjkzMEVGNTlBRDk5ODY3QjU5QjhGRTRFQTQ3QQorOjEwODNEMDAwN0ZEMTk1RjNGRDJEMUFCRjJDQjE4NUIyMEREMDlGQjE4MQorOjEwODNFMDAwREVFQURFMDhGMzNBOUJBNDRFNDNCQzM0NkNFMUY4NkI0MgorOjEwODNGMDAwMzBGQUE2RDg2MURFMEQ4RjQ4NkVBMDBDQkJBNUQ4NkVGMgorOjEwODQwMDAwNjE4MEE3RTJFM0Y1MjY3RjA0QkZENzlDMUZDQjU0QzA1MQorOjEwODQxMDAwQzdCQ0YzNTk1NDU2OEZGMUI3MjJGRDE3OUZCRjQxQTMzNAorOjEwODQyMDAwRDM1ODJBOTk1QTYyQzBGOURDOEU3NDU1NzE0MjI1OUM0MgorOjEwODQzMDAwQ0VEQUZDQkVBQzFGM0ZFODJFMThGRkNCMzc4QzU0NUY2MgorOjEwODQ0MDAwRTQwRERDOENGMzMxMDZDREVFREQzMDlGNTM1NkJGOEM0RQorOjEwODQ1MDAwRjQzRDk1QzE5QzBGQzExNDRGMTk1OUMwMDlGNEJBNjU3OAorOjEwODQ2MDAwODdDQzAyRDBGRjUyMjhGRDUwOUU4QTY3REU3ODBGRTI0QgorOjEwODQ3MDAwMTNENjk5Q0JGQkJFMDhGRkZGNTNEOTNFODQwRDA3QkEzNAorOjEwODQ4MDAwMzZGQ0ZFN0Q2NTE4NjMyQjczQkFDNzg2QTBERkRBOEFENworOjEwODQ5MDAwNTBGMjhERDBFRjk5QkQ0Njc3MDBDNjVERERGOTc2QjExQgorOjEwODRBMDAwMDFFQTNGQzlGNDBFNjIzMkEwNkFCMDdGMTdEMjc1RDVENworOjEwODRCMDAwRENFMDRGOEMwMERGN0FERkYzOEUwOTZBMTg5RjFENEFEQgorOjEwODRDMDAwMjg1QjgxRjczQjAwOEYwMTk4NTdDNzM2Nzk3QTkwRjA4NworOjEwODREMDAwQ0Y2MkU3OEMwOUYzQjVFMEUzNjhGRTVFNzU3RTM4RTFCNAorOjEwODRFMDAwRTc1Q0JENzlDQzAxRTQ1RkUwNTc3Q0JFNDZFM0YzNUIxQgorOjEwODRGMDAwOTFFRjg5MEYzOUJGMEIzRTVFQTM3MDc5QjVDNjE2MTc5MQorOjEwODUwMDAwMENDMDNBOEMzREJDNURGNUJGMDFGRjAxQ0FENzFFRDgzNworOjEwODUxMDAwN0Q3RjI5RjJERDE5ODVGODdGQjVCNjRGQUFFNUI5QkU5MgorOjEwODUyMDAwMEFDRUZGRUUxNjc4RkU2MjkzMEI5MDE1RTZGRkE5RTdFMAorOjEwODUzMDAwRTc1MEJCQjhGMzM3NTE3RjgyRUZBM0U1NzlDNEJFNjE0MgorOjEwODU0MDAwMENERTdCMzFERkZGMTZFMkE5RjI0NzdGN0JGRURGRTEyNQorOjEwODU1MDAwRDEwQzI1OTRGMzU4MTI5Njc2RTI5RjdGOTZEQ0ZGRERDRQorOjEwODU2MDAwNTVGMkZGMzFBREZENzQzMzVCRTRDQkUzNzIzREIyQkYzNgorOjEwODU3MDAwMTQ0RkU1Njk1Q0M3Njc2RTg5Q0JERjdGQjJCQ0ZGRUM0NworOjEwODU4MDAwMkFFNUZEMUZBRTUwREU0QkY5NUNERTQ3Q0I3NzA2RkREQQorOjEwODU5MDAwQTE3Q0ZGRkNBNTkxNDE5NEZGRUYzM0QwMDdBOEY3MEUxMworOjEwODVBMDAwQzVBQTRGNkFGMjlGRjQ0MzRDNUNGMDcyRjJGRkQxQzI0RAorOjEwODVCMDAwNUJBNEZDRkVFNUJGMjFGRjFGOTBGRjdGRUYzRTExRkM5NworOjEwODVDMDAwMThCRDVGQUVEQkRBNEQ3QTgxQkQyODMxOTRCRjYyRkYwMgorOjEwODVEMDAwNzRDNTcwQkM3NDhERTI3QTIwQkM2RjI0REE1NzBDRjYzNworOjEwODVFMDAwNTVCNjE0Qjk2RkY2REM1RjhBRkJFNkYzMjQ3NzBCMUJGNAorOjEwODVGMDAwNzhERkRDQTRFRDkzNDU5QTVFMTBGQkUzRDE3QzdGNjFDQworOjEwODYwMDAwN0VDNEZFNThCRDNGNUEzRjVDOUVCRjZFNEFBQTY3QTgxMworOjEwODYxMDAwMUYxNjQxMTlDOTVGRTYzRUZEQTBERjE3MTNGMkFGNkVDQQorOjEwODYyMDAwNUY4Q0QwREE3RjFCNUZDREZDRTdGM0Q1Q0MwMUY4QUFENQorOjEwODYzMDAwM0EzRkY5RUZFN0FCNjg3RTNBNTdGRkZCNDIxNUU2NzMyNgorOjEwODY0MDAwQUUxMEY4MjgzM0NDM0ZEN0JEQ0VCOEREMzBEQ0VFN0U5RgorOjEwODY1MDAwOTI0NUYwODkyOTIzRDg4MkVEMkVCMjdBQzQ2M0I0M0NDNgorOjEwODY2MDAwMTQ3Q0JCMDVFQzAwOUNBN0EwN0I1NzRDMjA2RjdEREVFMworOjEwODY3MDAwM0Y0RkZFREQ5OTdGNzU3NkVGRDJGQzJCOTMxRjlCOTFDOAorOjEwODY4MDAwQ0VEOEVGRkY5Q0JERjg2MDdGNzQ2NTVFNkUxNzg0RTlGRAorOjEwODY5MDAwNjI5RTQ3NzY1QzA4MTQ5QzM0MzA1RDhEM0JGOEZFMTI3OAorOjEwODZBMDAwNzA1QjQ4MTE3QTM3MTFGNTJFRjBDQjQzRkYwOEJGNTRBOQorOjEwODZCMDAwNEY4MTVGMDcyM0ZDQkJGOURFNzRFOEVGQkIxQTFDNzgxRgorOjEwODZDMDAwNzczRUQyRTc4NjEyNTFGRkZCMURERTJDOTQzM0YwNkIxMAorOjEwODZEMDAwMjk4REUwNjUxNkMyQUYwNjFGM0Y1RTg1RkNGQjUwNUYyQgorOjEwODZFMDAwN0QwMEVCQTc5NkM1NjlFRjMzMkZCQTFFQTJGREZFRkNGNQorOjEwODZGMDAwREYxRURGNDZGQjc5M0JERkJGRkUxRUM1MzcyNjAyMkU5RAorOjEwODcwMDAwMDREODFFMDE5NzQ0QzEzQjc5N0I4N0QyQzM5Qzg0OEZEOAorOjEwODcxMDAwMjBERkFGRDBCRkU0RTFGQ0UzOEJCMDRCODA5MkQzRTIyQgorOjEwODcyMDAwRDFBRTNDMjAzOUVGMDVGQTJGMjhGQkRDODRGNDBBQUZFOAorOjEwODczMDAwQkY4N0Q2QkZGNjkwQTRDMTFGMURGNzAyNjkxNjFDRTBDMworOjEwODc0MDAwRjBGMUZDNTMzQjAyOEFENjFGRTA3OUI1ODY2NjczODc0OQorOjEwODc1MDAwRTQ5NTgxOEVBQjRCQTRFMEIwQ0M0QkYxN0NCQzRGM0U5QQorOjEwODc2MDAwODk3OTgwMkFENkJGQ0Y0Qzg1NTdGNzNFRUU2RjdBN0Y0NgorOjEwODc3MDAwMThCRDFGMzI1RkM1RjgzNzk2MzE2RkQwNzY2OUJCNTM4RAorOjEwODc4MDAwQTJERDA1ODA0NUZGODBDQjc5QjBCRTYwREVBNUVEN0IyNAorOjEwODc5MDAwQjVGNkREMDY4Mzg2QUZBRjc3MjBGRUJBNEQwMjlGMTc5MAorOjEwODdBMDAwNzY3OENCODBGRThDQzNGRjk1N0Y2MTdFMjA4RjRGREY3NAorOjEwODdCMDAwMUJCNUZFQ0JDREZGQkQ3Q0JEREQ4MDNGQUFGRUZERDA0RAorOjEwODdDMDAwRTVGMEY3QzEyNUY4RDNGOEE3NEVDRjRGNzE4QUVGRDg1RgorOjEwODdEMDAwMzk5ODQ3NUM5MkU0NDRGQjc4QURDRkJBMERGRDgwMzAwOAorOjEwODdFMDAwN0Y5ODZCNzAzRERENTZENkM3Q0Y3QUZFQjdENDU0QzFBMworOjEwODdGMDAwRkFENjMyNTExRkYzMDhGOTM5ODZCRUY2N0MzRkY0RjEwMAorOjEwODgwMDAwMTdGM0U2MDIzRkExMDk4MEVGMjc3OUFDOEYwNDZDNDQ4RgorOjEwODgxMDAwMUZBQTI3MzhFQjMyRkJBMTIzMEEyRThCREEzRjFBRkY1RgorOjEwODgyMDAwRDNGRTQ1MzkwRkY4QzlFRTQ3Q0UxNDc4Mzg3RTNFOTUxMQorOjEwODgzMDAwRDg3Qzk0OTNERDk1REM1RUVDMUVDNkNCNzkxRTg5RUE2QworOjEwODg0MDAwMjc3QTM4MURBNjY4NjU3NzRDMDQxRUQyQzM3NDg2OUZBQworOjEwODg1MDAwMTBGQTIzMTFFQjI2M0NENTI0NjlFQjBFOENBQzk5MDk1OAorOjEwODg2MDAwRUJFRTRFRTBGNUQ1RkJCMzFGMDk5NDg1RTFFOEZFNjYxQgorOjEwODg3MDAwRUYxRjU5ODM3Q0QzRDc3RjYwQzRCQjg4RDcxQTBENkY5NQorOjEwODg4MDAwRjNGNkU3QkUxQkUwRjI1MEMyN0RCOTg2MTgwNEE4NzU2NgorOjEwODg5MDAwNDAwQUM4QjBFRTM1QzgxN0ZEQUMzQkNENzNDOUJFMEE1RgorOjEwODhBMDAwNDRCREVGMzU1RUU2RkRDQzRCREZGNzQ2QkRDRjhDNDlDRQorOjEwODhCMDAwNTdGM0JFNDZCNzk5NTE3NDlEMUU0NUQ3QUEyOEI4NTY5RQorOjEwODhDMDAwQzA0MTlERkMxMzcyNzFDOUMxMDdEQTUyNjAxRUI3RUUzOAorOjEwODhEMDAwOTM1MENENDRGMDczMDlGMUYzQUQ0RUMxQkYxM0RFNDVBMworOjEwODhFMDAwNzkxRkU2RTc1MjgyRTc3NjA4N0U5REY4MDhDQUZGMzlDRAorOjEwODhGMDAwMjgwRjRCQzNGMDNDOTQxNzA0OTdENTc4Qzc0NUVBOEJGMworOjEwODkwMDAwNDk1NDdGNjNCQjY4M0Y5OUUwMDVBREEyQkZGMjQ3NTA3MQorOjEwODkxMDAwQkUwQTNBMDJGQTZBNzBCQzlBNDJBMTJGMkFERUM1RjY1NAorOjEwODkyMDAwQUIwRUYxRjczNzc5MkFERkJERUM3RUQ4MUU4NTk3OUQxNworOjEwODkzMDAwNTE3MDIwQUFGREY3QkU0NUJGQjQ0NkJEQkYyMUFBN0UzNworOjEwODk0MDAwNUIxNEJDMjMwQTZFRDdCRkJGNzhBOTQ0RkI3MDMxRjAxQgorOjEwODk1MDAwMDMxMkUyREJGNkU1QzM5RTNFM0JCNTRGOUY0QTM2QjJCQgorOjEwODk2MDAwREI3NEZCRUFCQTE2MEUwNzNEQjM2QkRBNkQxMUYwN0VDRAorOjEwODk3MDAwNUY4RDI2NkY2OTVGMTgxOUZGMDE1OTFCNDA3RDY1MUNDQgorOjEwODk4MDAwNDA1RURFM0YxMDVGRTY0NkVCNUI1RUZGMjdGQzM1MTU4MQorOjEwODk5MDAwRUQ2MEE2QjMwQjhFQ0E3QUI4NTNENkU2MURCOEY5RERFMgorOjEwODlBMDAwREJGM0YwQTE4MDE3RDZBMDdGNzBEREY3RjVFQjAyQkZGNworOjEwODlCMDAwNTVBQkJGQTlBNkFBMkNDMjJFNjEzNzExOUY4ODc1OEExNAorOjEwODlDMDAwRjZEM0JFQkUyOEUzNzgzRkREQkZBMDY2MkZENEQ3NTZDRQorOjEwODlEMDAwODZCMkVCQjE0Q0UwMjVFODM1MTlGNUU2M0EyRDJFMzM5OQorOjEwODlFMDAwRUQyNUQ5ODc3QUFEMzYyNjk0REQxMDY5ODdCMDhFMUNDNworOjEwODlGMDAwNUM2N0U3M0QzMkQxMjdEMDAyRjRDMTM4MUI3MzlCMzA0RQorOjEwOEEwMDAwQUVEMjE5MTdEN0Y4MTRCNDNGN0E4RkRDODg3QUY0RkQwOAorOjEwOEExMDAwQzZDNDE0OUM3RjZBMDFCNzIzOEZDNjBENEQ1OTA2NzBEQQorOjEwOEEyMDAwNjdFQzIyOTMwQUVEM0EzNzRGQTVGMjg4RUNEREQ0MEJDMAorOjEwOEEzMDAwN0JFRDM3OUU1NTM1QjY5MTU4MUY0N0Y4RTlERUJGQUM0MAorOjEwOEE0MDAwQTYxOUY2QzEzQjFFOTVERUY3MjczODUzMEVBMkZEN0MxMgorOjEwOEE1MDAwQUY5MTNEQTlFMjdDRENCQjg4NkZFRTMzRTdBMzFGQkQ3RAorOjEwOEE2MDAwQjg3OTc0MEFEQTkzNEJGRUY3OUM2OUE5RDA2RTQ5OUJEQQorOjEwOEE3MDAwRDEyRDUxM0IzNjE2RTdFREJGNzdBQTA5RUI5N0I2NkFDMQorOjEwOEE4MDAwNjVFMDFBMkE1RkZFRTY4OTE2MDdCNEVGN0Q1QzcyRUY5NworOjEwOEE5MDAwODFGNjkzQkVFQzc4N0QyQ0MwMkJEQTg3QkI5MTM0ODdBRQorOjEwOEFBMDAwQ0YxQjk4MTNDNkY5NjBDNzg4QTAwQ0ZDRjhBMUI1RkVDRgorOjEwOEFCMDAwRDU1OUJDM0RDM0Y2MkIyRUE4NkZDRTJBQzRGNkIyNzM4RgorOjEwOEFDMDAwMjNCNDNGMDlDRkQxMUUzRUI5NDVERTIzRTFCQzFDRjZERAorOjEwOEFEMDAwMTgwOTk2NzRGMjZCRjU0REI0NkJBMURFQjkxMTlFOUYyNworOjEwOEFFMDAwNkM1Qjk5ODI3NkQ2NDk0OTc1NDhCMEZFNUU0RjYzOERCRQorOjEwOEFGMDAwMEJGODY1QzUwRUIzNDZCRkM2RDRDNUIwQUYxNzFCRkE5OQorOjEwOEIwMDAwRjg4NUY0QzdGMjc4MEVGN0VFQkZBQkU2NDk5OEZGQzlENworOjEwOEIxMDAwNDc0NjM4MTBDRjZCMEJCQzVGNzg1MDFGMTU3QUNGN0E2MQorOjEwOEIyMDAwOTI3MTlFNUM0RkJERkM4REJDMDhFREYxNUY5QzU5OTIyQgorOjEwOEIzMDAwODI3MUJCMEIxQTFGMUYzRUJGMjQ2NTQ5ODRCREIzRkM2NQorOjEwOEI0MDAwNTM4NUU4RkVCMjQ5QkQxREU3Rjk3MjRDODY4NEYxMkNDRAorOjEwOEI1MDAwQTA3QjIyQzZCRDk3NkE3RTI2RjA2RkUzRjNGREQ4M0Q2OQorOjEwOEI2MDAwQkZGN0M4NDRBNzhGQ0M4REVDNDNEODU0OUQ1QkFGOUYxMworOjEwOEI3MDAwNjIwN0JDNzRCRTI4MTExRDk2MzI3RjBCQzJFQ0EwRTRDNAorOjEwOEI4MDAwNDZGQTQ1QkZGRjlCQjE5NUQ2ODJBMjQ4RkVERjQyNzJFRQorOjEwOEI5MDAwOTZGQzBEODAxMzlGREY0NEZBOTA2RDgwMDcxM0EwM0M3NAorOjEwOEJBMDAwNkEyNTNGRERGOEFDMzU2ODA1N0MyRTRERjI0RUMzRjZFNAorOjEwOEJCMDAwQ0NENTkxMzNENzFFQjE0RkI1RjY3RjBDRDhBOUZEMUY4OAorOjEwOEJDMDAwQTEzREZBN0I3RjBDRkNDMUNFNkM5N0RBRkQyQjFDRjYyNQorOjEwOEJEMDAwMDAxQTFGMUZEQkVEMEFEMkVEN0RBNUU5RTREREYwREUxMgorOjEwOEJFMDAwRjJDNzhEQTQyNzk2M0Y5RUJDQTExN0Q3MDFGQzk1Q0Q1NworOjEwOEJGMDAwMkU1RDg3QkZDMDQ4RjgxRDcwREZCMkVGRDc1NEU5RkM4NworOjEwOEMwMDAwODk4NzJGQkI2RkM3MTQzQzVDQjMzNzZGRTA3REJCNDJENQorOjEwOEMxMDAwRjM2QkE2M0Q2RUY0RTFCRTVCNTE2NDU3MThFODlCQ0E0NgorOjEwOEMyMDAwQzc1Rjc5MTJGN0M3OEFGNTU2OEYxOTI2QkVFMjcxMzNFRQorOjEwOEMzMDAwRDFCN0M3NkUwRjM4QTFERUVGQjAyQkYxNTA0RTJDRTA0QworOjEwOEM0MDAwRkNCMEIwNDBBNTcyOEFDQzE0OEI4N0NBNTY4Q0FGOUVGQworOjEwOEM1MDAwODVGOTI0MDI3Q0JBRjFBMTg3QzdDMzM4OUZCMEUwMEQyMworOjEwOEM2MDAwRTMwMTdGNjc5MTUwODA5N0IzMDc2NDhBM0YzMkM1QUJCOQorOjEwOEM3MDAwNTQ4MzNDQUQ2MzVDOEVBQzc5RUQ3OTUzMDVGQzVBNTc1NworOjEwOEM4MDAwQkY2MjI2RkE4MTJCODNDNjBGN0EzNDFGRUZBMkI2NEMzRgorOjEwOEM5MDAwOTRCRkVCRjgyM0QwQzNGQUZBNzU2Q0RCMTdGMjU4NjI3NQorOjEwOENBMDAwN0IxM0VFREYzNTFENTFGNUY1RDc3QzhDNzE5Qzc1NEMyRgorOjEwOENCMDAwRjlBMDQ3QzQ3OTYxMUVGMzBBRUM0OTI3NDcwM0UwNjEzNAorOjEwOENDMDAwMUVDMDEwM0I1QjZGQ0M2MUIwQzQxNTM2RDg4N0IwREVEOAorOjEwOENEMDAwMjkzQjc5N0M2NzQ1QTMxQzM0NDNGQjI5ODkzQzVFRkMxNgorOjEwOENFMDAwNTExM0QwN0YwNEFEM0JFMDA0NzhDNUY3Qjg1RTVBQzE5QworOjEwOENGMDAwQTRBMDA1N0VCRDY2RTc3QTA1RjdDRjJCMUU4RUE3QzUxQgorOjEwOEQwMDAwMTJGM0UxN0VGOEQwRUExRTgyRkVGREYyQzdBRDg0REZFOQorOjEwOEQxMDAwMTVCQjU2RkVFRTExNzhBRkE3QjkzQTI5RDI5RjVFQTlDRQorOjEwOEQyMDAwRjEwNUY0Q0YyQzA5RTE3RTNFNkVGRUQ3MjEyODA3QTc3RQorOjEwOEQzMDAwRkMwMEZDNjI1OEVGOEE3OEY2OTM5QTRDQTQ1N0VBMTAyQworOjEwOEQ0MDAwRDUxNjZFQjc2MkUzM0QzOUJDMURGOEQ1QjBFRUM1NUJGNAorOjEwOEQ1MDAwNjQxRUE3N0FDMTRDN0ExMjY0ODM4QkU0Qjg4NkNGQTVDRgorOjEwOEQ2MDAwQURBRjk5NEM3OTI4RDdCNzc1Q0JEMEZFMDM4MDY1MUI4MgorOjEwOEQ3MDAwRTEyQkEwRTFEMTg0Rjg1QTg0RUZBNkYyNzc1Q0M1OUE4MgorOjEwOEQ4MDAwOURBRTkyRENGMUUzRkE2QTBERDJBMkI5QTQwNzdBNEQ0NgorOjEwOEQ5MDAwMjgwN0JFNUZDMEVEREU2RDVBQjk3ODg4RkI2NjhBNDM0RQorOjEwOERBMDAwREY2Rjc2QTM1Q0MzMUY1OUNDMDNGQ0IwMzU4NkVFRTVCQworOjEwOERCMDAwMTgwNzY2M0YzNTUzM0M2NTVEQUJENTZCNzU5MDlGRTJGOAorOjEwOERDMDAwREQ4RkYzNTM5ODYyQzI3MzE3OTVDQjk3RUY2QjdDQjgyNgorOjEwOEREMDAwNEU5RDczMERGMjBERDQxRjU3QTA3RThEOURDQkQxMzVDNgorOjEwOERFMDAwRjE4MDc3NkVENzdBMEQzMENFRTdGOERCNzBERTZGRUE3MAorOjEwOERGMDAwRDg4OEYxMjVFRDM5RjRBMzNBQzJGRDc2MTk1ODNCQzY1RgorOjEwOEUwMDAwNjVCMEZEQzhCMTg4QzdDNDFCRTZFM0ZDN0UyQ0QzN0VFOQorOjEwOEUxMDAwODZDNURGNUY4Mjc2RTE4RkU1MDJGNDg3MTc2RjM5M0EwNgorOjEwOEUyMDAwNkQwN0MyQ0ZFNTNCQjFDQkM1M0Y3OTg3RjRDQ0FEMUExNgorOjEwOEUzMDAwRkQ3QkQwM0Y0MEJEMDNGMDczNTA3NjY4RkJDOTJGRjMzNAorOjEwOEU0MDAwMzg1MTg3ODYyN0MxMDdBMjdFQ0QxNjIzOEZERkI3OTlCOQorOjEwOEU1MDAwQzlFRTU5RDNGQzdCRUE3NzhEQkQzQjA1RTVGNTlBMTc0MgorOjEwOEU2MDAwOENDNTI4RDc5RkQ3RTZCREE0MzlBM0VDMzhGMEQ1MTIxRQorOjEwOEU3MDAwNjM5QzUzODI0N0FCMDNENTI2ODQ1NzZGOTcwODBFQkY3OAorOjEwOEU4MDAwOTczQzA0RjlGNENGQUQyRjNBOTA3RjNFQjQ4NkIyNTFBRgorOjEwOEU5MDAwN0ZGNUFFQjdCQUY3RTAwMkI0MzhERDlGNUJCM0Y3NjA5OQorOjEwOEVBMDAwM0M2N0E5QjNEQjJFNDFGREQyREI4NzI3QTBCQzdGREY2NworOjEwOEVCMDAwMTkzMjYxRkRGQjFEOTkwNjg0QkQ0RTY3MTlDMjVFNjVCRQorOjEwOEVDMDAwMUNDMTdGMDY1MUQ2QTFGOUFCQzg2RjZCMjU0RUU3RDUwMworOjEwOEVEMDAwQ0YxRTM1MEQ4M0YxOEUxN0YwQjhGOUE3M0Y3RTI3MDcxNworOjEwOEVFMDAwRjVEQjlBMjFERDM5QTg4NzgwMEY3MkQyMTBDRkNGNDhFOQorOjEwOEVGMDAwQTRCRkQ3M0UyQjdCQUQ2M0MzN0NCMDE2RjkwMEY2REQ3MworOjEwOEYwMDAwMkE4RDBGRDYxRTc4RjEyRURDMEY2QjkxRkU5RTRCRjk0OQorOjEwOEYxMDAwMDhGOEY0MTgzRERGQkY3QjFBRTNFRjFGNDMzRTExN0FEOAorOjEwOEYyMDAwMEZFMDU2MjNDNkRGNEMxQTBDRTMyMEZDQUU4NjRGQTg5OAorOjEwOEYzMDAwQUZFMkY1ODFCQzdBMUU1NzMzQTE5REJBRUVBMDMxRDBDNQorOjEwOEY0MDAwMTM3MTZFMzQxMDlEQkYyQUQwQ0VEMTlBQ0QyNDc3QkYzNQorOjEwOEY1MDAwRDJENkREQjNFNTA1MDdEMkYxRDMxRjFGN0QxNUUzQzVEQQorOjEwOEY2MDAwNkJGNjgzNzY1N0ZCRDkxNzFBNUVENjIxMUUxQ0I0MEVGQQorOjEwOEY3MDAwQjI0N0Q2RTFCQTFENjEzQ0Y0RjFCRkI2MUZENzMxQkU4RQorOjEwOEY4MDAwNEVCMUVFNzU4QTg2MDc1MUFGQkRGRjE3NkQ5REFCOTk0NworOjEwOEY5MDAwODZCNzAzMjNGOEZFRDNGNjFCRUU2Nzk0QUI2MjdERkUyMworOjEwOEZBMDAwMDRGRUJFRTBEM0Y0NDJCRTNFNjMyMUU3RDdENUMwMTcyRQorOjEwOEZCMDAwRUUzQ0UyMUZBRjQ5QzgwOUE4RkFGNEI5REQxNDJGMTIzQworOjEwOEZDMDAwRjQxMkYzMUU1QkE4MEE3OUU3OEQ0RjA4RDNCMUM3QzAyRQorOjEwOEZEMDAwRUEzQUZBODlCMzI0MTc3MkZDOUQ2ODFCMzRFNDIwRTA1NgorOjEwOEZFMDAwRURDRkUwOTdBMUZEODVGQ0FBNDQ4QzI3Rjg0NjhDMzc4RAorOjEwOEZGMDAwRTU0NzczNjZFMDdBQTFGRjEwRjYyRkM2N0QzRjEwQUIwMAorOjEwOTAwMDAwNjAzRkVGMzNCRTNGOTAzRjUxN0U4QTdEMzlBNTY1RTFEOQorOjEwOTAxMDAwOEM3QzA3QjZGQkQ0M0UzQzBGRDdDQkM3MUY1QkU4QTRDNAorOjEwOTAyMDAwRjdCRDY4MkZDMEZCREU4MzEyQzVBQjRGNjg3MTgwMTM5QworOjEwOTAzMDAwNkQyRjNBOTY0NEUwMjk0RjdCNEZGMDE5RkU2MDFDNEI5MAorOjEwOTA0MDAwQ0NCNzJCODFDNzdGQTNFNzJERTQ5MDk4Rjc5NENEMzc1OQorOjEwOTA1MDAwQ0VDMEU3NjJGRTgyNUYwNTdGMEEzQzBBM0U2NTFCOTIzNgorOjEwOTA2MDAwQzlBRTg5RTY1N0UyMzVBMTU3NjU5REJDMjdGRDc4NEQwRAorOjEwOTA3MDAwRkExNzI2QkZFREQyRTdEMTcwOUZGREQ0RUEzQTk2MTVENAorOjEwOTA4MDAwQTFENzNGQzQzODBGQ0E5M0E3RTUyMEM5MTMwNjVDMUJCQworOjEwOTA5MDAwQTE3Nzg0QkU2RjVFN0Y4RDEzQ0YxOThEQ0Y0QTZFMzQ1QQorOjEwOTBBMDAwN0QyMkY0Q0MzNjI1NDJDRkQ0MTVBRUNGNDE3REY2NjA3QgorOjEwOTBCMDAwRTEzMDJFRjc5M0JDQTc5MTlFQUI0Rjc1NEY3M0E4NjExQgorOjEwOTBDMDAwRkI3NUQyOTcyMTM5MEVFMzYxMDczMjNEOTE3QTc1RjUzMAorOjEwOTBEMDAwOTk2M0I0MEZENkIwRUU0REU4N0YyRERFRjI0RUY1NzhGMQorOjEwOTBFMDAwRTRGN0E3OEQ3NEVFQjlCODZEQUEwOUZEODE5NTRGREUzRQorOjEwOTBGMDAwNTI4Q0ZDRjQ0MUZCNzA5MkVGQTdGNzE2MTUxMDdGMzFFQworOjEwOTEwMDAwNjdDQTBEQjAwRjk2RUU3REU4ODYwNUYwN0NFOTQxRDk3RgorOjEwOTExMDAwNEQ3MjFFRkFDMUZEQkJGODhFMDIyNkQxQkE3QkFBRjFCMAorOjEwOTEyMDAwM0NCNUY3NkVEOTg5NzZGRkM0Mjc4QjM2NjBGQjg5RjY4QworOjEwOTEzMDAwQTFGMUI4MEVFRkRFNDQ4MkJENEExQ0U5MDk2MTJGQkZFMAorOjEwOTE0MDAwQUZDOUNCMTYyM0U3OEYwRERBQkVCQUFEQUZFNEZDMzM1RgorOjEwOTE1MDAwQTVBNTI1MDdDRkUzN0I3NzgzOUNDNjczNjk5M0RBMTFCNgorOjEwOTE2MDAwQzJGMTVFMUE0NDdFQzkzQTcwQTM1QzQwRkY1MzEyQjc0NQorOjEwOTE3MDAwQ0ZFQTRDQ0M5MkVBQTFFNzk2NTQ3OEZFOUFCMUZCMEU2NgorOjEwOTE4MDAwRDQyN0FGREQ2MUNGNkZDNjA5QzgxNzhBOTc3MDdGOTI2OQorOjEwOTE5MDAwRTYwMTc2MzQ4RDJGRjAyNkU2NzE0RjIxRDc0RkQxRkRCMQorOjEwOTFBMDAwODlGN0JCRDBGRjQwQjlBQUNERkY3NEVCRDMzN0EwM0VGRgorOjEwOTFCMDAwM0NCRDJGM0IwMUQ3RkRGMTRCRDY3NkI0QUIzRTM2NzJBQQorOjEwOTFDMDAwRjlEODY3RUYwNDhEMUY0NURBNkI2MERGRTk2MEIwRTcxRgorOjEwOTFEMDAwNzQzMEYwRjE0NzdBRkI3MDIzQ0RFQkJFNDI5QkNFOUVGQworOjEwOTFFMDAwMTM3QzVGQkIzRTNCMkUzMjBGMjFEQThFNjc1OUQxRTdFRAorOjEwOTFGMDAwM0RFM0UzNTgzRjcyNDc5NDY3OUEwMDUxQzBBODczRDA4QgorOjEwOTIwMDAwQjY4NzcxQUI2MkJGN0VCRTFCRURGRUVENjZBNzE5RDZCOQorOjEwOTIxMDAwRjkxMUYyM0Q5RTY3QkQyMDA3RjFGQzA2NkQ3NERDMDc3NQorOjEwOTIyMDAwMUYzRDk3MUY0NEZGNzNGOTdCRkU2OUQ4RkZCMTA3MzZENgorOjEwOTIzMDAwNTM5RUMyMzJCMDMzMDc0OTExRjZGM0Y3MUVCODAxRDk3NQorOjEwOTI0MDAwRkZBQ0RCQkYyOTE1REUzQkJCOEZFNzU1NDBCNTJEQ0ExMAorOjEwOTI1MDAwNkU3RTM1NTVGREM3RURFNjJCQjU5NzQ1OUNFMkU3ODU1QgorOjEwOTI2MDAwOUFEREVDNjY2RUM0QjNDMEFGRjA5RjVFMDYzRTI4RjE5NworOjEwOTI3MDAwODRGMUY1NTk1MzFERDlDQjY3OUFGQzU0N0UyRTlEQjhDNQorOjEwOTI4MDAwN0YyMkYyQUYzRENFQkQwNzVFRkJDNUMxODdFNDM0QTRBQgorOjEwOTI5MDAwRjM4MUZDMEJFODJGOTdEQUUyOUNCODZGM0Y2QjZBQTQ2RQorOjEwOTJBMDAwNDNDQjMzNERGNTU0MEEzQThCMzhEREE0MDM5REY0REVFRAorOjEwOTJCMDAwNjcwNzBCMEU0RDg0RjcwRURCRTJCODFFQjhFNDlDODhGRQorOjEwOTJDMDAwRDMzMzNBOEZFNEI2RjVFMzA3RTE3M0IxQUU0RkVFRTY4MAorOjEwOTJEMDAwNzQxNUYzRkU2NERGMkQwRTVDNTdFNzYzODk4NzI2MjA0MworOjEwOTJFMDAwM0Q2M0UzOUM2OEY3QUREMEYyNDc0RUVFRTA3NkY1Mjk5QQorOjEwOTJGMDAwNEJEQzUzMzMzMUVGNjRFN0JDMTQwNkYyNzY1OUU3Nzc2MQorOjEwOTMwMDAwNkVDMEU3Q0I1RjkyOUNFODBGQjg1RjlBRTNDMDc4RUI0MgorOjEwOTMxMDAwN0YyODNEMEUyNzk2RjA1RTA4RTdBMzA0NjU5NDQ3QTVENQorOjEwOTMyMDAwRDMxOTlENjM5NTg2MTRBNjY2RDJEMTMwRjFDQjg0MzNEMAorOjEwOTMzMDAwNEExMEYzNEVGRThDRTc1QjE4NDdCOTEwNDM3MTE0QTYzMAorOjEwOTM0MDAwOUQ1QjJERkIxOThGQkZGNEY5Qjk5QTlGMzc1MTVCNzc1RAorOjEwOTM1MDAwNEE1MTAyRTc2RkVERjk5NDEyRkVGQ0UzOURDRkNGQzJCNAorOjEwOTM2MDAwRkU0RUVGMzUzQTcxREU5RkVEMzU1MkZGQUJDMDNGMzMxNQorOjEwOTM3MDAwQzA3QzRGRURFMzdFQ0ZBQTBFODlGQ0U1RDNGQjQwNkZBNgorOjEwOTM4MDAwQzNCQUQ2QUMzNzdBNEQ3MTk3RjJFMTE0QThFRkIxODUyNAorOjEwOTM5MDAwRjk3MDk1Mzc0OEZDQ0QzNDdFQjRDMEJGOEJDMzJFRTU0MQorOjEwOTNBMDAwQzc3OEQ2QjEwOUYxRjE4RkYyQTVBRDQ4RUZDN0Y1RjE1NQorOjEwOTNCMDAwRTM0MDdDQTBFMTBCRjczMUYyQTNBMEY3MkFBMDBCOUVCQgorOjEwOTNDMDAwQ0YyNjc0RTQ1NzIwNUYwOUZBMEIzOTExQTg2NEI5QThCNQorOjEwOTNEMDAwNUY1QjRDMkMxN0YzNzgwMjg2MTgzN0VFRUYzOTM2RDVFMQorOjEwOTNFMDAwMjgwMTFFRTYyNUY1NTRBMTM4QkRCQjg4Q0I0OTc5OEFGMgorOjEwOTNGMDAwQzE2QjQwRkREMjYyMjYzOTEwMkQ0N0IyOEJCOEJERjQ0NworOjEwOTQwMDAwMkNGMjM0RkNBRjI4NzI3MjNCOEFENTkzM0YyMjRBRDBBQgorOjEwOTQxMDAwM0IxOUE4QzdFN0M0MjZGQ0E3MEE0RDNDMkY3QzdGODFENworOjEwOTQyMDAwMDJGMzlGMzMzMUUxOEVFMTZFRTA5QjE3MUU1RkEwMDBENworOjEwOTQzMDAwRkZDRTI5NDg3ODYxMThDMDY1NDUzQjM5M0MyRUExQzg0QworOjEwOTQ0MDAwMDg3MDczRjNBRTA1NTUwMEQ3MTQ3OURENDVDOUUxNzE5NQorOjEwOTQ1MDAwNDRCRkYwQkMwMDlGRkY3Q0I0QkYxOENCNzUyNjFCQzk2RQorOjEwOTQ2MDAwRTlDRkE1REVCMThEOTlFMUY2NkY0OUVDRkQ1RjQ4NjE2QQorOjEwOTQ3MDAwQjhDN0M4ODZBMDlENTdEMTM3RkZGRUNCOEQ0NURFNzI5OQorOjEwOTQ4MDAwM0VBRUZFRjkxMkM2REEyOEZGMkVGMENCRTMxMkY3Qzc4NAorOjEwOTQ5MDAwN0M5NjE0Q0E2MzIzQkU1QTYyQjE4NUM4QUY2RjM3OUVFQgorOjEwOTRBMDAwRTlBMzM3RjI5MTNCNEU0MUJBQ0VEMkY4NjhCNjEyRUE0MAorOjEwOTRCMDAwQzRGNzQ3QjI1NkU3NDkwQjk5NTIzQjJGMjYwRTJDQkZGMworOjEwOTRDMDAwNjFFM0IxOTNBMjNGRTA5N0NGOERCMDVFRTA2QjA5RDgyNgorOjEwOTREMDAwQjMxMUI2OEMwNDQ4QUUwNUY5MjUxREZBRTU1RkIxREY3RQorOjEwOTRFMDAwOTYwMEVCQjExMjFENkE5REM4NjcxMkYzMUIyRTQyQjk5QworOjEwOTRGMDAwMjZENjMxMTZFMzI3NkI2Mjg3MDQ5MUVGMUI1RUY4RjRFMgorOjEwOTUwMDAwMThCMkQ3NEE2MUJGRjg0Qjg4REY2Rjc3RjJGNTMwN0YyQQorOjEwOTUxMDAwMjlGMUUzMUQxQTNGN0VEQ0M0RUFCMzYwRUJDREVFRUUyOQorOjEwOTUyMDAwNzZBODMwRTkzM0IzNDIzOUI4REZGRjM0QzQ1RjU3ODREQgorOjEwOTUzMDAwRkVGRUNFOTZGNDA2RTA5RjRGRjc5QkREMzNBMUZEQTkxQQorOjEwOTU0MDAwRTBGMzE0QkY1QkFERDlBNTZDNkZCMkI2RUZFNTUwMzk0RgorOjEwOTU1MDAwQjRFQkNBMUNCOTA3RjU0QjQzMTFEN0Q3NjczMjQzNDM2NQorOjEwOTU2MDAwRUU0MUI5OTFDOUZEMjA2ODQ3Nzk3MkQzMzc1RTkzOEM3QgorOjEwOTU3MDAwRURDRTNDQjczOTZCMTlEMENGQUNCMDgwM0Q4MTRBRTYxNworOjEwOTU4MDAwODA3NTVGMEI3RDk3MDA2QzA0NThBNjczRTAyMEQxMEJBQgorOjEwOTU5MDAwREIzOTUwREZBQkI3Qjg3ODlDOUVGOTUwQUUwODdBMDkzQQorOjEwOTVBMDAwM0E1QzQyMUY5ODAyREFBRDA2MEIzM0UyRkM0N0IyOURFQgorOjEwOTVCMDAwQ0U5M0IxNjEzQTdENkMwMTNDNjIxQ0NEMDI3ODg0RkQ5MgorOjEwOTVDMDAwM0QxNTgzMEY4NTg4NEYxRTc3Njk5MDdBNUExMzExRkVENworOjEwOTVEMDAwQjE0NDc5Nzc5N0VBQzEyNzREODhGMkJBOURCNzkwRkNEQworOjEwOTVFMDAwMTE3MjQ3ODU3RkZEQzk5REFCOEUxRkVEOUNEMkFGREMwQworOjEwOTVGMDAwNzkwQ0U1MEVBQzgzRTVCM0ZDOEJEQzQwMjRGQUFFRDBFRAorOjEwOTYwMDAwREU5RDJBRDdBQTBBQ0UzQkQ5RTJDNkI4NUFDM0UzQzMyNQorOjEwOTYxMDAwNDlERkIwMEJCRjIxN0Y1OEI0NjMzQjEzODk1RjM2NjVDOAorOjEwOTYyMDAwQ0E4NEY3OTUwNzI1OUUxRjc5MzA4REE5NTAzNUYzNjBDMAorOjEwOTYzMDAwMjI5NThFRjNBOUY0RkNGNDUzQUYxNzcyQjlDNEU5NTIyMgorOjEwOTY0MDAwRkRDMzQxOTU5NEFGRkFDMzExNTQ4QTc5MzQ2ODdDMzdDRAorOjEwOTY1MDAwNTVDRUVCMDhBMTFENjE4Mzc5MDBEQ0YwMUFENzVCMERCNAorOjEwOTY2MDAwRDdDQjE0REY2NDI4QTI1MzkwOThGQ0M3Njc2QkE3Mzg0OAorOjEwOTY3MDAwOTA4RkY1RDlGOUQyNDVCMkRGRDUzOEE0OEJBRjRCNjZDMAorOjEwOTY4MDAwQzgzRkUwNzUwNDM4OUUyRENEODg2N0IzQ0JDMEQ0N0UyQgorOjEwOTY5MDAwRUMwRkIzNDYyN0FCMUFDM0Q0MDhGRjQzMDk4Q0ZDNkUwQQorOjEwOTZBMDAwMTlDNjY1QkY2Mzc0MDdBMUJFQzVFQUQ4ODNGQjg5MDVFNworOjEwOTZCMDAwQkNEREU4NDdDQ0Q3REVFQkI2NzJGRTg4Q0Q0REQwQkQyMQorOjEwOTZDMDAwQkZEOTMxQUQwQkY5NkRCRTk3RUIxREJCN0JCMDZFN0M4NgorOjEwOTZEMDAwQjNCQ0RBODg0Q0M2RkNEQzVFMTRGQzQwN0MwOUUzQ0VFQgorOjEwOTZFMDAwRjY0OUE0NUZBRjlGMEZGNTExRkQxQUNCQkUyMDM5NkU2RQorOjEwOTZGMDAwMkNEM0RCOTk2NjlGQkVERDFGODRERTE5Qzk0NjQ2RDI5NgorOjEwOTcwMDAwM0Y4Qzc3OUIxN0VERjRCMzVFM0JGMTMxNjhGN0VGOTczMQorOjEwOTcxMDAwMDE3QzQzOTc5MUUxN0FDRDMxN0M1RDY3MTE1MzE4MUYyRAorOjEwOTcyMDAwRjVDQTQxOEM5QjZDNDYzQ0MwRjNCODEyM0QzRUUzQkQ4QworOjEwOTczMDAwN0FGQzI1NEVEN0UzMjNEOUE3NUZGRkEwRjlDMzc0RjVDMAorOjEwOTc0MDAwQTlGRTUxQkFGQUI0M0E4RjBFQ0VBODJGRDVCNTFGREFCQQorOjEwOTc1MDAwNThBOTgzMzMwMzMzNzRFRDg3QjdDRkQ1QzFEOURCMTc0RAorOjEwOTc2MDAwRThEQThGRDhCMTQ0NTczRjMyQjg0QTU3M0Y3QTVGODMxRgorOjEwOTc3MDAwMEUxRUQzRjEyRkJBRjZFMzBFNkVENEQ1RTc4N0VFRDVFMQorOjEwOTc4MDAwRDUxNzc0M0RBODgzOEJCQTFGRDVCNTFGN0Y3QzhGQUVDQworOjEwOTc5MDAwN0U0MkNGMzNCQUZBODlBN0Y2RUJFMDQ5QkQzRkQ3QjU5MQorOjEwOTdBMDAwMkYzRjdGNDQwNzU3QjBENzc1RURBNzU4REVEMUMxNTM3RgorOjEwOTdCMDAwOUQ3RkQwQjVCRkM2RjVBMUFFRkU1QUY1Q0ZCQUZBRUI4NAorOjEwOTdDMDAwNzJDRkU5RjkzNTg2Q0JCRjZBRjdERjc0RUY3RDlFRTY4RAorOjEwOTdEMDAwMUY1NThDM0E1MzNFQTMyMERGQjYyQzk0NTgyMkM2RDU5MQorOjEwOTdFMDAwQkJFNjU5NTAwRUU0MTU2QjcyNDhFM0MzRTE0NTNDMkVDRAorOjEwOTdGMDAwQzFCMkQ4MTA5NDY3NTNFNTk5MENFMzc2NjczQkI4N0YwNAorOjEwOTgwMDAwM0Q5MEJFOEIwMzc1QTU0NDhDMUJFRkI1ODAwMzE5ODY3NAorOjEwOTgxMDAwMTNBNzNCNzU3MEIyQ0ZBNTZCM0Y2OEJFQUFBQjRGRjVERgorOjEwOTgyMDAwRTdFQUVBRDNFQURDM0EzOEEzQkU0NEQ3N0U2OEEzNTcxNgorOjEwOTgzMDAwMDc2NzA2QTZFQkRBMEY2RkY3RTlFMEVDRURGMzc1RURERAorOjEwOTg0MDAwNDdFQ0YwRUJFQTQ3MDZFQjc0RjVBM0Y3RDVFQkUwMzExNAorOjEwOTg1MDAwMUQ4REJBRjZFMzBFMDY3NEY1RjlBMTc2NUQ3RDQxRDc0QworOjEwOTg2MDAwNzYxRDVDRDRCRDQzRDc3RUZDRjFBMEFFN0U0MkNGM0VEOAorOjEwOTg3MDAwNURGREM0NTMxRDNBNzg1MkVGNDE1REZCRjJGMzIxMURBQgorOjEwOTg4MDAwNUNDMTVFRDNCNTlGNjI3OTRCMDc0Rjc1QkVBQjZCN0ZGMgorOjEwOTg5MDAwOERFQjg0QUVGRTVBRjVCNEFFN0VGNTlGREQyMTNBMDcxRQorOjEwOThBMDAwRjgwNTNGNTdCQjJFRjcwQjVEQkQzMTA5RUM1QThDNDNEMQorOjEwOThCMDAwQjIxODM3OUU1RjBBRkJBN0RBRkQ1NzVEQkZGNzE2MEY5OAorOjEwOThDMDAwMjNGQjAyNzhBOUM3MkFBMzdERTRBM0Y4NTEwMjI2MTYzOAorOjEwOThEMDAwMDI1RkM2ODExMDQzQkU0MjU3QTE5NkUyNTA0OUE0RUZGMQorOjEwOThFMDAwNDgzNUE5OTgyNzA0NzYwMjAwMDk4NkNDNENCNEE3NjNCMgorOjEwOThGMDAwQzM3NjVCRkFDNTgyMkJCN0RCNzY0MDlGMzg4RjVGMTY0NQorOjEwOTkwMDAwRkJFRjJCNEU0NjdGRTVCOTY5NjhCN0FGNjQ4MTREMzhGMAorOjEwOTkxMDAwMEZEMDdCNzEzREIwM0ZERUI0RUFFMzE5QTJCQ0Q2MDJBMgorOjEwOTkyMDAwRjg4OTE4RUYzNUVCRjY3NENGNjVGQ0ZFNkIyRDY3QTg1MAorOjEwOTkzMDAwN0Q1RkJGNUE5QzQzODJGNTM1NDRGNDdGM0ZGODE1MEE5QQorOjEwOTk0MDAwRDg3NURCOUI2MEZGODBDM0Y4NjA5MzkzRTBFRjM1Qjk3NworOjEwOTk1MDAwMDg3RUI4NDlBNTcyNDc1MzJFOTU4RjM2QjlBOTdFNjcwMAorOjEwOTk2MDAwNTMwOUMxQkI5QUJDMDQwNzlCQTY1M0I5QTdDOTQ3Q0ZFQgorOjEwOTk3MDAwRjczNkNEMjdGODI5RjBBM0IxREMwNzdFMzU5NkNGODBFNgorOjEwOTk4MDAwN0Y4Q0Y1Q0Y4MkJGOENGMDRGOUEwMjU0NzYzNEI1RDNEQQorOjEwOTk5MDAwRjNGRDREREIwOTNFRDBCNDgzRTA5RjM2MDVBOTNDRDhFQQorOjEwOTlBMDAwQjQ4RkNBOUYzNzc1NTBGREExQTY4MzA0MUY2RTBBMTE5QworOjEwOTlCMDAwMUM2QUVBMjJGODQ4NTMzN0MxQzc5QThFMTNGQzZBNTNDRgorOjEwOTlDMDAwMEY5NTVENERBN0E4RkM1NTUzMkZENUJGRDE3NDlFRTBEMAorOjEwOTlEMDAwMzM1QURDRjY5NTYyNDk3NzZGNEFDMDhDNTUxMTNGMDhCRgorOjEwOTlFMDAwRkI3MDE2REFGOUM4MUMyNUM2Q0Y3NDc2N0U5NEJEMURBRgorOjEwOTlGMDAwNEQ4RjRGQjQ3MThDOTU2MDJFNjJGQzcwNzBDRTlFOTYyOAorOjEwOUEwMDAwMDgzRkVCMkQ2REJDQ0QzMTJDNjAwNUY5RDY2Q0UwN0VBNgorOjEwOUExMDAwNkQ3MzAyQTMzQzZFQTZEOUFGMkIzNEJFNjQ0OURDNkVENQorOjEwOUEyMDAwNURBRUNENkI4NUM2RkY0NUM4OUZCOUM0OUY2RjVDOEQ4OQorOjEwOUEzMDAwNUYyMUZDQzY1MTYzRkMyNzg4M0YzMzBDMDFGMjlGNkQwOAorOjEwOUE0MDAwQzExQ0I0OUZBQkM3RjgzRjQyQjk3RUI2N0VEOUFCMzREOAorOjEwOUE1MDAwOUVEMzRERTc4RkQ1RTY1MEYyOEQxODFGNzk0REE2NzgyRAorOjEwOUE2MDAwREU0MEUzQUREM0YyQ0QwN0FDM0Y3QzNBMURFREVERTkyRQorOjEwOUE3MDAwREZDODdFQzREMzlCNDZGQjdDOEMxN0ZDQTU5OEZCQTc1NAorOjEwOUE4MDAwN0YyOTM2RThDQTc3QzZGOEJGQzI3OTdFNjVBRkJGRDlFRAorOjEwOUE5MDAwMDBGM0ZGNkFGMkZBQTc2RUNCMENGQkQzQjNEMTI1MDUxNgorOjEwOUFBMDAwM0Y2ODBFNTM4RDk0RDdDOEJDQUY2NDQyNTdENzgzODFBQgorOjEwOUFCMDAwODVGMDhEMkM0MEU1NzdGMkZDMTc3MTVEMzU2MDg4MjNDOQorOjEwOUFDMDAwRUMyRjM1MEZFOTZGNUREMUYzOEExOUNGRTcxNTMzREUzRgorOjEwOUFEMDAwQTAyQkE1QjE3RUVCRjgyMjlDOTc5N0U2RjVFNjg0NkI2OAorOjEwOUFFMDAwNzI3MDVENjI1RTk1NjM1NUVEM0U0NEVGMkU5Q0RGNTdDQworOjEwOUFGMDAwMkY3RDcxNTIxQTFFQzZCRkYwREIzNzU1NjhGOTI4RUI2RgorOjEwOUIwMDAwMjUxRTk3MTNGNjlBOTZDRjIyRkM4RURBM0JBNDIwREExNAorOjEwOUIxMDAwRUIwQkMxREZDMTczQTZGNzM0RkJGMzNEMkJEN0NGNjc0NworOjEwOUIyMDAwRUI4RDI0Mjc2QkE1MTgzNzlFQzc5REFERkYwRjFCQjI4OQorOjEwOUIzMDAwMzVCNDY3Nzg1RUQyODI4OTQyNTBERkYyQUYxMkYxNTlCNAorOjEwOUI0MDAwMkRGNDYzODA3RThBQzY2NkQyN0E2QTk5QzU4QkZBQjg4QworOjEwOUI1MDAwRjY5MDc5MzdGMjZCMkQ5ODdGRTg2NzAxOUZFNDhDNDc4OAorOjEwOUI2MDAwM0U5OTIwMDc0QzYwMDdCRjY5MDhFNjQ4NzQyRUJEQ0NCQgorOjEwOUI3MDAwMjRDMUZDNTYyNDAxN0YwQzFCOTgwRkQ2NkFGNzE5QzQyOAorOjEwOUI4MDAwNzNFMDJGMzdGNkY3RDlDRkM2RTc1MjFDRkZGMDA0MTU2NAorOjEwOUI5MDAwRjFENTYyRTBGNzk4MDJCRjkyREQzQzNGODY4QjY4Nzk5MQorOjEwOUJBMDAwRTIxODhBNEYzMkM1RURDNkY4NTJCNTc2RUZBNTUzNjY3NgorOjEwOUJCMDAwOERDRkY1MjMzRkU3OEVFN0ZCRUI0RDk3NzE3QTkwRkE1NworOjEwOUJDMDAwRDU5RkQ3Q0MxOENGRkREMDE5NUFCQkVBMjNBRjY1RTA5QgorOjEwOUJEMDAwQkRBREI1NUQ0NkYyNDM1ODYxNEY5RUNGREVDRjdBMUFEOAorOjEwOUJFMDAwQjdERTk5MTVDMUQ3RUIwRTlFRTBGOTFBQUMyNzJGMzJEQworOjEwOUJGMDAwOUZGRDU2QUQ1RkMxNDdCMkM5RUVERjZEOEI5QzFGMUY0NQorOjEwOUMwMDAwMUZGODdBMEVFMkUxQUI3OEUwRUJFMUM0RDcyN0QxQ0VDMgorOjEwOUMxMDAwOUU2NTU2RTM2RTg0QjIwNzUwMTQ4MkQyRkYwMzI3RTU5NworOjEwOUMyMDAwMjc4OTNDQTVBNUNDNDdFNTBBNjAwM0U0NjM1RkUwMDExMgorOjEwOUMzMDAwMTNFMjdGMTVFQkEwRTc2QjRCNkUxOTgyRjAzQUQ2NUIwRgorOjEwOUM0MDAwRTU0MjNGQTJCREY5MTUxN0NDNzJERUY2MDdBNjYyNUNBRAorOjEwOUM1MDAwNzY2RTcwRjEyQjU4Q0VEOTJCOUQ0NEJGMTVGNkM1MTJFOAorOjEwOUM2MDAwRTRFMzFFQTlCRTZEMzA4Q0I3RTBEOThBQjYzNDc4M0VFNQorOjEwOUM3MDAwNEJFNkY0NjBBRjczN0EwMEJGNzhFNTg0NEJENzA5RkJGRAorOjEwOUM4MDAwNjAxNUVEODM3ODJGQUQ0Mzc2NENEN0VEODNEQThEQ0MxQworOjEwOUM5MDAwMkIyNTg1RjNFREZCRjY0NUM5QUQ3RjRBNDMzRjQ4RTlFNworOjEwOUNBMDAwQTVGM0Y3NzU4N0NEMDk0OEU3NTU4Q0VCRURCMDFEMjg3NgorOjEwOUNCMDAwRjQzNUI3MDM2RTA1M0IwMERCN0RBMkYxRjMyNzE5OEM2OQorOjEwOUNDMDAwRUUzNTdDMjI4MTYzRTcwOURCOTE2Qzg4REZFNTE5MUVBNAorOjEwOUNEMDAwRDZCQjlGMTg4MkM1OEVFMUE0OTc5QjcxQkVBRkJBRTYzMgorOjEwOUNFMDAwQTkxODJGQkIzNUM5RTI5NkIxM0UzRTM4ODQ5RkEzRjYzMgorOjEwOUNGMDAwQzk3Nzc2MzEzNjFDRUZCQURGQzhFMzRGRDFGMzkyNEEwOQorOjEwOUQwMDAwNUVGRDJCREEwRDY2MTMwQkUwQjkwNkVDNkI1NjhDRkI4RgorOjEwOUQxMDAwNzlCMDg5RjY1OTBCQTIxNkUzNjY5NTNFQjVCRkZFNUI5NgorOjEwOUQyMDAwQjU3RUJCQkVFNkZFNkYwMEQ2ODNGNzdDMkUxOUM3QTlCMQorOjEwOUQzMDAwOEQxM0MzQzcxMUZBMDNDNzIzRjk5MUMyNzRFM0VEMTk1OAorOjEwOUQ0MDAwQ0ZGN0Y1OUI3NjJGQ0RCRkQ5MTA0RkYyRTYwRjQzRkQyRAorOjEwOUQ1MDAwQkI5MUVGNDREQzQ3Rjg4NTVEOTkxRjY3OTFGRjdFQTFCOQorOjEwOUQ2MDAwMjUxREVENzNFMDVGOUVDNzM4OTlDQkE1Mzc4RDZBMDAzRQorOjEwOUQ3MDAwRTEzNzJCMzIyOUVFMkZFNEVERUMxMjFFMjc5QjJERTI2QQorOjEwOUQ4MDAwNjI2NTUxNzFCMUE4NzgwQzJCRUIzRjRFQzY5OERCODgwOQorOjEwOUQ5MDAwRTM4RTY0RUYwOUZDNTAxQ0U2NDg5OTQyNzQwRjAwREQyNQorOjEwOURBMDAwMzFDRTdDNDRGMzRGMkI2MkI5NUY5RTUwOTI0OEVCNEMwRQorOjEwOURCMDAwQjgzNjhCRjhDRDkxQzg0Mjc0MEU2NTk3ODlERjhFQjJBNAorOjEwOURDMDAwN0M1QjQyODQ5Q0I4NTc4QkFGNkUwMzNCODg0NUM0RDVGRgorOjEwOUREMDAwRUYyRDZDQjA2MEJFQzE2NjFCQkZGRjc4NUY2NTRDNUQ0OAorOjEwOURFMDAwNjQ3RTdDRTI2NDlFRkZGMkMzQzkxNUFDMDRGMDk3NjcwMQorOjEwOURGMDAwMEI1NjkyQkFGNjJBMkFBRTQ3RDJENjM3REEwOUY4Mzc4NgorOjEwOUUwMDAwNjBENzNFMkQ0RUVBQjZGMEI4NTQxNUU5NkI0MUY3MkJGQQorOjEwOUUxMDAwRDVEN0NGMjhDMThEMzFCOEZFMjQ0NkZCRDBCRUMzNEE2QQorOjEwOUUyMDAwRjI1NEVFRjA4NjMwNTU3QkQ5RTRCOUVGMjIzRjMzQzVDQQorOjEwOUUzMDAwOTc4QkUzNzQxNkM3MzAxQkI0RkZBQUQzNDRGRUZENjFCMQorOjEwOUU0MDAwQzM5MjFGOTg3MEZGQkQ2QjY2NzhERUQ5NjE0RjUzNTA4NworOjEwOUU1MDAwNUY3NDdDM0RBQThBNEFGQkM0Njk4Q0M3Mzk2MzBEMjBCNAorOjEwOUU2MDAwMjhGMjlERUM4OTdGNDNBMjY5RjdENTRDQUVBMzkzM0VCRgorOjEwOUU3MDAwMDIxNDc3NDhBQzhCNTFEQ0NEMUI2QjAwOUZBQ0MzQzA4OAorOjEwOUU4MDAwQ0U5NUMzRkNGNkRCM0MwRjhEMjMxNkY0QzlCOERFQTFEQQorOjEwOUU5MDAwOTNGQzlGMjI3RjE1QjM3QTgyRUYzM0Y5RUE3NkMzRjhGOQorOjEwOUVBMDAwRjcyNTU4ODg2RjNDQTkwNkJBM0ZDOEZFNkFBM0JDMUZCNQorOjEwOUVCMDAwNUY5NzYyNDQxNUY3NjI5OUZGRENGODA4QkJDQ0U3MzI4NAorOjEwOUVDMDAwMTgzMUZGQTdDRDA0RjIzQjBGRTMyODMxRkNDQzhBNzE5NworOjEwOUVEMDAwN0JERjc3M0U4N0U2Rjc4RDI2NEY1QjVEREU2RUJDODhDNQorOjEwOUVFMDAwMzIyMDVFOUQ0QTZGNUZEQzg0RjgzMjlERTI3RDAyQ0ZCNgorOjEwOUVGMDAwOTFGNDc0MTZFQkU4RTkzNzQ2RDJCMzA0RTgzOTI2OTJCOAorOjEwOUYwMDAwOUU1RUU5NkFFOEY5MEUyNkExMTU1RENBQzc4MTRBRjU4OQorOjEwOUYxMDAwODFBQTQyQUVGRjMwOTUyRTlBOEYyQkNDOTM2Qzk4MDc3NgorOjEwOUYyMDAwRDNFOTkwMEQ0OEQ3Q0U5OEI0M0M4Q0RCMDkzRTE2N0MyMworOjEwOUYzMDAwREQwRjNGQUYzRjhBNzIyNTVENzFFMjc5QjJCOTNBODY5MworOjEwOUY0MDAwQ0U2NzA0N0YwQkJFOUU1RURBQzdERjhGOTUwMjNFMTc5OQorOjEwOUY1MDAwREE3QzUzNTFGNjQ0RjMzN0M2Q0YyMkY5Qjg3NjQwN0UwNworOjEwOUY2MDAwNjdDRUM4N0QzRTBCRUM4REI4MDRCNDkzNEVFREVEODgwMgorOjEwOUY3MDAwRTBFM0RBRkEyRjE0MkU3NzJFOTZDNzE0ODdFMzdEQjMyOQorOjEwOUY4MDAwQ0EyNEY2NDEyNEJERTFGRjA3QjlEQUZBQzg0RTUyQzgyNworOjEwOUY5MDAwM0YxMzc4QkQ1MkZDMUJCRkQzOUM4Qjc2REYyNkJDRkZFMgorOjEwOUZBMDAwMDhGODZBOTdEQ0RFNDExODA3QUIzRjcxMUIzRTZGRDNBMAorOjEwOUZCMDAwRUUyNTA3RjI0Q0RDMUVEM0Y2OTVFODZGRDlFNENBNjlBQQorOjEwOUZDMDAwQjhGRkVERTNDRkM0MkU4Nzc2NUZBNTE4NTQ0NDRFOUJBRgorOjEwOUZEMDAwQkFFNERGNjg5RjFFOEY2NUY4OUUyM0IxQkJFRTA5REFGNQorOjEwOUZFMDAwNzcyMzE4OUUyNzdFQjVEMjNGMTRDRkY3QjcwMDlEM0U0QQorOjEwOUZGMDAwQTBBNEVERTAyMDAzOUQ3REY1MENDMjdEMDdDODc1RjE5RQorOjEwQTAwMDAwRDJFRkUyQ0Y5OTU2MUYyNEY4MEYxMzg2NjlFNzhDNUVEMgorOjEwQTAxMDAwQUQ3RDBGQjVERjYyREE2RTg5QzE3MTMyMkRDRTNEMTE5MworOjEwQTAyMDAwRkM1RkFFQzVFMzVCNEJDNEZEOUYxNjE1RjNERjVBNEJENworOjEwQTAzMDAwQjgzREZCNTBEM0JFNDkxRjY1RTM3QzNBMjY3RDA0RjM0RgorOjEwQTA0MDAwNDk5QzE5NjQ3RUUwRUI5OERDODA4QUE5MjM5NjZGQTY3MAorOjEwQTA1MDAwNDg3OENGODE4RDYyMUQxOEE3QzdFN0NENjNDMkZEQUZEOQorOjEwQTA2MDAwRDRGQUI1QTA5RDAzRjRCMzZDMENBODkxNzJENjYyOTA5QgorOjEwQTA3MDAwRkNGREU1QzlGQzcxODI0MkZCRDVCMjkxNTFCREU1QzgzQQorOjEwQTA4MDAwMjNGNEZEODBDNDJDQjc4NEY5RDU5NjhEREIxOTlFREZBRgorOjEwQTA5MDAwNTg0M0ZDNzk1Mjk2NTc1QTFBRDE2RkQyNEM5ODc3MDQ4QworOjEwQTBBMDAwNUYwMDdGMDVFMjQwMkU1OUY2MDA2MzE2MjIxRDYyMjhFQworOjEwQTBCMDAwNUUxOTNERUVBQ0U0Q0EyRUM1MzEzMDlGNDRGMzFCRDM4QworOjEwQTBDMDAwRjg0REYwOEQ1ODI3REQ4MDg5RjgwRTQwRDUzMDBCRTkyQQorOjEwQTBEMDAwQzlCNjQ2RDM2RUI0Q0Y3Nzk1QzQxMzVFQkU0Q0FBOEM3NgorOjEwQTBFMDAwNjNGREQ4QTdBMkRDMDU3QzEwMzBBMzNGNkRBMTcyMEZFMQorOjEwQTBGMDAwRjhFMzgxMTFFODRGQkIwODdFMEFGQzcxMkNGNzgxM0YyMQorOjEwQTEwMDAwOEVFNTMzRTA4RjYzRkRCM0UwOEYyM0ZDMTNGMEM3MTFCRQorOjEwQTExMDAwRUUwMDdGMUNFMUZERTA4RjIzN0MwMEZDNzE4NDdGMEE1MAorOjEwQTEyMDAwRkUzODk2MDdDMTFGQzdGMkU3RTA4RjYzRkQyMUYwQzczNQorOjEwQTEzMDAwMTEyRTM3MDM3RkUwN0E3MjAzQUVCOTQwRDdGNkJCNEREQworOjEwQTE0MDAwNUVDQzMzRkM2RDA5OTdBNzQ3QkRDMzEyREQ0MDdGNkIyMgorOjEwQTE1MDAwQUU4MTYyRTVENjM3MUU2NEI4MUVBQkNCNDBGN0NDMzY3NQorOjEwQTE2MDAwQjkxRTY0QjdBMDlGNUI2QzI3N0JBQkVEQzdEQzhFQjFEQgorOjEwQTE3MDAwMkEwRjMxOTQzQkJCQTQ0MDFENzNDMzc4MjUzN0Q1RTIyOQorOjEwQTE4MDAwQjk2MDk2NkI3RDY1MDJDMDQ3NEExNkVGQjRDMEZFQzg0MQorOjEwQTE5MDAwNTFFN0NDNkY4RTgwNTVCQjY3RDU3M0NFMzAzQzM0NkZBMgorOjEwQTFBMDAwQjcwMjlFMENGQkU1QzE1Qjc2RTIxNTIzOUMwN0U2MTcyMAorOjEwQTFCMDAwQkY1NUIyQkMxNkYzRUE0M0MzMThEOTIzQkQ5OTI2Q0FDQQorOjEwQTFDMDAwRTM1OThBRjRDQUM2RjlGMzczQzBFQjU4OEIwQkNGMzk0NQorOjEwQTFEMDAwODdBQUUwMkQ0OUQ0OUVFMjRDNTdEQUZFQjcyNTJBM0RFNgorOjEwQTFFMDAwOEY3RUVGNzJFRDBDODU1N0Q0OEVDOTk3RTkwRkVCQTVFMgorOjEwQTFGMDAwQ0JGNDYzOTFFNjU5QkE2MUVFNUI4RDlBOUM0QUI2OTFCNQorOjEwQTIwMDAwOUM2QUM3QjgwRkUwQkRERENBQ0JGQzUyQkVDRjhEQTU5RQorOjEwQTIxMDAwOTUwRjRGODBGMkUxMDk5Q0FFRURENjgwQjMxMkM3MUZCNworOjEwQTIyMDAwNjNBMDNDMDdENjk4RjlDRTMwMThFRkNFNUYyOTBDRjMyNworOjEwQTIzMDAwNDUwNTdGOUVEMUY4MjA3QkE4OURFQkVCN0IyQzc0Q0U0RgorOjEwQTI0MDAwN0ZDREQwMUZCNzI2MDA5Q0ZEODREQjhERjkxMDVCOTk3NAorOjEwQTI1MDAwM0IwNkY5MjRCMENENDA3OTkxM0YyQTFDOUUzMDA3OUFFNQorOjEwQTI2MDAwOEYyRTdBMjEwMUU1RkE4QzA5N0MxRTQxMkQ4RkE4QjkyOQorOjEwQTI3MDAwNkRGOTUwOEM1MzdERjUxNjk3ODc3RkQzQzZEOTZERUM1OQorOjEwQTI4MDAwQUUyNzdBMTZEOTE4Q0ZDQkRBNEVGNjQ4QjMwQjg4MEQyNQorOjEwQTI5MDAwM0FEMzkwQ0E0QjkzRDFCOTAwREI5OUMwMzBDMEJDNkRBMgorOjEwQTJBMDAwRDNEN0UzMkRFODBGQjY5QzM3NEZFNzc5QjVERDY0OUYzMAorOjEwQTJCMDAwOThBQzdFNjczQzNDREYxRTMwOTA1QzY4NTE2RDk0MDcyMworOjEwQTJDMDAwQjdENUU2RTlDMjdCRDMwMUE3ODFGMjY1QjdFNjE5MDhFNQorOjEwQTJEMDAwOEZBREI2MUI4MkU4MDcyODUyNzMxREVBQjFBMDczQkY4OQorOjEwQTJFMDAwMjUxMzlFMDdGMzBDOTRGRjE4RjRDRTlEOEU3MEMwQ0ZGQgorOjEwQTJGMDAwQkY0NzQxM0Y1OEVGNEZBMEZCRTI1QjU5RUZFQkUzQjBBNAorOjEwQTMwMDAwQkU5NkRCNjk2RDI5RkY3NTI0MTZFM0UyRDczQkRERkNDMQorOjEwQTMxMDAwMTg4NkE5OTgzNzQ2Mjk2NDA2RjRDNzdCMzZDNkUyM0NGRQorOjEwQTMyMDAwNkE5OEU2RUYwNkM4QkY3NTk4MzlGREJFREI3OUFENzM1NAorOjEwQTMzMDAwMThEOTE5MTFFNzVENjY4Q0UxQjkyRDZFQTgxRjZCRjM3MgorOjEwQTM0MDAwNEM0N0ZGNTNCMTdCMkM5ODE3RDhFQUY0NTgxNkQzRkEzMAorOjEwQTM1MDAwNzkzRTFCRTU2QjQwQkYyRDRFMDNGOUMxNTg3RjBCRUVENAorOjEwQTM2MDAwRjc1NjQ2Rjk3MDgzQjVGQTU2REI4MzlEODgwRjY1MTk1OQorOjEwQTM3MDAwNjM5OTJBQ0U0RjA5NDQ5RTI3NUE4Njk3NzVBOUIwOEVCNQorOjEwQTM4MDAwRjZFNTA5QjQwRTQ1NzIxM0NDOTYyOTM0RUZDMTZBMEM3OAorOjEwQTM5MDAwREQ5MzdFQzg1NEREODVGNkU0NjBDQkFENzRFRTk1NUE0RQorOjEwQTNBMDAwQTdFOENFQTUwNkY5RjU3MEYyN0MzRDlDQzg5NEYwQjlGQgorOjEwQTNCMDAwMTZGMkQ5MDQxMTk3RDNFMzJEMUExRkE5Q0VENkI3NzA4MAorOjEwQTNDMDAwRkVBOTdFQkFDNDdCQzlGQzFGNzE3RTJGQkU4MkUxM0MxMAorOjEwQTNEMDAwNkQzNENGMTREQjkyMEFCNDlCOTI5OUFGMTlGOUVGMUYzOQorOjEwQTNFMDAwOURFNzU4RTc1QzRCMjY4QzNGMzZDOTQwRTZEMTM4RDYwRQorOjEwQTNGMDAwQkIxMUZCRERBQUYxN0I3QjI2QTc2Nzc4NUZDOTYyNUY5MworOjEwQTQwMDAwMzY0RDQ4QzZGMzA1MDMzODc0RTFGRTMzMDNFMEQ4RTk1RQorOjEwQTQxMDAwQ0UxNzEyNzQ3MEY2RjZDMUJBRjYyMzc2MENEM0Q1OEYyOAorOjEwQTQyMDAwMEM4RUQyRDU4RkRFRTdEMUMxNjMzQTRBNzVFREM3MUREOAorOjEwQTQzMDAwQUNENEMxRjlBMTE5QkFGNjA1NUQ3Mzc1NzA1MUY3MDI3NAorOjEwQTQ0MDAwNURGQkYxQzc5N0U4RUEyN0Y0QUNEMkQ1NEYzQ0Q1QTAyNQorOjEwQTQ1MDAwODMyN0Y1RkU4QkFFQkRCMEVGQTNGNUUzREQxM0I4N0QyQQorOjEwQTQ2MDAwNzFCNTc2QkREOTM1NThGN0REOUM2OEJGMjFEQUVFQjdGNgorOjEwQTQ3MDAwN0NEM0EyNkU0NDdFNzY5ODg4OUYxNUQ0RTc3ODBFN0RCMworOjEwQTQ4MDAwMzdGNzlGMkM5M0REMkFFNTM5NkJGQzU4NTRFRUREODRCOQorOjEwQTQ5MDAwRjJCNEMyNjEyMUJEQTBEODc4M0JDNTM2OERFQzk1MjFDMAorOjEwQTRBMDAwM0I0Q0Y0M0QxRkM1QzlGQUVBNjM1MTNFMzcwNTI2NjVBQQorOjEwQTRCMDAwNjU4N0U3NkQ3NTZFNjdCODdGMkIxQ0QzMTlFNjI5ODkxMAorOjEwQTRDMDAwRjcxNUE3OTdGOTMxOEYxQjNGRDI4Mzc2OTIzMzQwRUQ3MgorOjEwQTREMDAwQUMyQUJDMUZCMThFQzMwNjAzQjNBMTFDMDczRjBGRkRGRQorOjEwQTRFMDAwODM4MUZDM0FFMUNGMDlGRjZEMjBCRjRERjg2QjQzMEMyRgorOjEwQTRGMDAwMkMwNkNCREQ1MkNGNkRFOERGRTdENUJGNTUzOTg4OTEwQgorOjEwQTUwMDAwNUZCNzBGRjlGNTNFQkMwNzhFRkVEQzU4NkU2N0I1QTU0OAorOjEwQTUxMDAwQ0M1MDMxREVEMzlFRDlEMTM1MENFNzkzNkNBMDM4MkFDQworOjEwQTUyMDAwRDhDREVFQjkxMUY2RTJEQjlBRkU1MTg2QjVGN0EwRkU2MgorOjEwQTUzMDAwNkI4OEI3QTg2ODJGMjk5NkREOTMzRTAyN0NFRDMyRjYzMgorOjEwQTU0MDAwM0M4REYxOEI1NkM5QjlCQTAzRTVFMkREMzZDQTBGNzkwNQorOjEwQTU1MDAwNDhDMzlCNkEzNzE0NkM4NDdFM0I5QUJEMEFERUY3RUZEMgorOjEwQTU2MDAwRDhDMkRDQURCODNGOTIyQTM2QzZDM0YzRUNGNEM1MDZCOAorOjEwQTU3MDAwMEMxMzhEQzg2QURFODhFNUIxMDlGQzNDNjg2NERFNkVBOAorOjEwQTU4MDAwNDMyMkQ0OEYyRUFDOTg4RjcxMzFEOUI5OUJGQ0Q5ODFERAorOjEwQTU5MDAwRjg0OTc2RUM2MEI4MUU5NkE1OUM0NEJFNDJFQkZFMjJCQworOjEwQTVBMDAwNENCRDIyMDFFODBERTM1QTkxREUxMjk1ODQwN0VCNzk0OAorOjEwQTVCMDAwNUJEMDhBNzAxNkM3OEJENTJCMDU2MzI1NkVCNzYyN0U3QworOjEwQTVDMDAwNUQ0NUMyMEVBMkFGQjA2N0QxQ0VGNTczN0ZGNzZERTRFMworOjEwQTVEMDAwQTNBNDk5N0FCQTJBOTZCRDg0OEZBRDA2QkUyRkRBRTM3QQorOjEwQTVFMDAwRDUzNzUwM0ZCNzY3NjYyNUI0QThFMTc5MEFCOUYyNDc3NQorOjEwQTVGMDAwQ0QwRTE3Q0Y4NTVDOTk4RDM5MzhDOTYxRkIwNkY4N0M4MworOjEwQTYwMDAwMDdDNkU3QUNDQTc2QkFFNzY5RERCMDlEMjE1RjVCRjFBQQorOjEwQTYxMDAwNTYzQ0Q5RkIwMUQ1NDdGQUMzQTdDQjRGQUIxQTM2REY1RgorOjEwQTYyMDAwODJGQUZBNUM5Mjg3RUM1OTZCRTM0RjY5N0VEMTc4QjM3QQorOjEwQTYzMDAwRjZGMDNDQjU4MUYwRUFDODc5OTRGNDNCMDg2MDE1RkQ2QQorOjEwQTY0MDAwRkUyMzI5QjZCQUM4QjhBODI4RUZEMkZDMTNBM0M4Mjc5RQorOjEwQTY1MDAwMDI0RjAyRjVEOTM5OTFBRkU0OERFNUYzOEJFN0YwRDFFNAorOjEwQTY2MDAwOUMwNTM0QkZEQjkyM0Q4MzJFNjc2RjVCQzFERkY0NDdFRgorOjEwQTY3MDAwRDA3RDhCRTJCMzIwMUVEQTJFQ0M5OTRFRUI1NjY4MzM5OAorOjEwQTY4MDAwQjBBRDVGRTdFREE2NzhCM0U2MkZEREE1RTFCN0I1ODQwMQorOjEwQTY5MDAwRTM3Mzg4ODlERjMzNzAyN0NEQTRFRkE0MERDNkY4NDg5MworOjEwQTZBMDAwNDEzODVFMzJBQTk0RTczN0JBMDM0Q0U2RjFCRUJFRkNFRAorOjEwQTZCMDAwNzZDM0M1NzEzNDY3MTVFRjFGRTA5OTIwRjI2MzFBRTM4MgorOjEwQTZDMDAwRkEwQzlBNzQ2MjNFQ0JGMDc2NDU5RjBGQUZFOUYzMzRGMworOjEwQTZEMDAwRkUzQkM4N0Y3REZEODgxRDdBNzg2NDMwRUFGRDAwRkI3MworOjEwQTZFMDAwMERFQTdCQjQ3NzI5OUVCMTRGNUZGRjE4RUE2RDkwMTM5NgorOjEwQTZGMDAwNEIzNUJEQ0RCNkYzRkMxMjBCQ0NFODIyRDdCNzYxRkRDQworOjEwQTcwMDAwMDdGMjYwNTY0Nzc3NDUyQ0Y0OTM1MUEyQ0YzQjQ5OEIxMworOjEwQTcxMDAwNkMwN0Y4RjNBQzM0RDBCRDEyMTFERjExNzhGN0Q1MTlGRQorOjEwQTcyMDAwOEMyNkUyN0Y1NTc3MEUyN0UyMzlEMUYyNUFCQUU3Q0M3MAorOjEwQTczMDAwN0FEQzU3MTVCMUIxMkFDQTU5OEM3N0Y4Q0REQzdGRjc4RQorOjEwQTc0MDAwODMzRjczOUZFMkZFN0QyREZBNUY1RDMyRTU2MTA5N0FGQQorOjEwQTc1MDAwNDZEMzdGNkY5RjNERUMyQjJGMjUzRkJBQTcwMEZEN0E5NAorOjEwQTc2MDAwMUNDRjFGMzE5RTg4Q0I2NDk3RkJBNzYyM0IxMTlGMzk5QQorOjEwQTc3MDAwM0I1RDc5NDU1MkMzRjExNjExM0Y3ODE4RjcxOUI0REJFOAorOjEwQTc4MDAwRUE3RUJCRkUyOENDRTNFODcxMzNDNTRBQTZDQTZGNzRFMworOjEwQTc5MDAwMzU2MTlFNTU4NjQyNzJDRTM5N0VGNTBGRDA0RkFGRkNBMworOjEwQTdBMDAwMDNENDYzNUM1MjU1MDc5MUZEREU2NUE0Nzg0MUE1QzZDQworOjEwQTdCMDAwRUY5NTlBNUYyNkUyMzIwQkI1NzlENzk0MEE3QjI4MTA4MQorOjEwQTdDMDAwQzNGREZGNTAwQ0RBQjlBM0Y3ODE4Q0Q2RjM0QjJDQUY0NQorOjEwQTdEMDAwRTc3MUJBMzExREQxRjU1RUNBN0YxQUE1RjEwM0U2QUQ2NgorOjEwQTdFMDAwNTVBNDYwQkExODg3M0I5ODk0RTgwNDNBOEY5QkRGNzNBRQorOjEwQTdGMDAwMDQ1RDhDQkNENzVFODk0MUJCRUIzOTJCRTc4RjY3MzQ5NgorOjEwQTgwMDAwM0IyRjg1NDk2RUNDRUY0RkQ5Njc3MzA3QTE5RDVENjZERAorOjEwQTgxMDAwQ0Y3NUMzM0FEQ0M3MTQ1RDlFREFEODQzN0EzODhGNDVDQQorOjEwQTgyMDAwQzA5OTM4MEYzREJDNERBREM3QTM2QkI2QUQxNjU4MTFERQorOjEwQTgzMDAwOTY3QzQ3QTk5NjQ3OTJDMzcyOTBGRkE2Q0FCNjdDRjQ0RAorOjEwQTg0MDAwQjMxQTJBNkMwQ0YxNkEzRTMxRTJGQkREMjg1N0RFOTIyNgorOjEwQTg1MDAwMTlFQTBCNjdBQ0ZBNDAxNUJDRUY3QzNERDFEREFDODY0NAorOjEwQTg2MDAwRTlGRjBDRjhEQkE4NDcxRUJFRTg2NkFEQzY3MEZDRUIzRQorOjEwQTg3MDAwNTlBMDY3MTY5RDRGM0JBOUJFMDNFODhBRjA3RUYwQkY0MgorOjEwQTg4MDAwQjNFODdDM0E5NzlFRkYxNEZDNkY4NDBGODJGRjhERTUzRQorOjEwQTg5MDAwQ0ZDMUZGQzZFNzg3QzBGRjQ2Rjg4NzkzMkIxRUM0QjgxOQorOjEwQThBMDAwRDk3QkQwMEVGOTIyMjZGRjgwNjUzOEM2Q0I2RDMyREQwQworOjEwQThCMDAwREY4OUU2QzdDREY1MUZEQTZFMDQ5OTM2Q0E5NTNDMzNCOQorOjEwQThDMDAwMTlGOUUxNzY5OUVFNDU0MzI3MzNEMUJGOEQ4Q0JGNDUwOQorOjEwQThEMDAwQzYyM0MzRjFCNzFFNDlDNERGQ0M0MDlGNTE5QTdGRDkyQworOjEwQThFMDAwMTc4N0YzRjMzOERDQjdGN0UzMTVGRDUwOUNGMzkyN0UzRQorOjEwQThGMDAwRkFFMjlEOTZDMDQ3QjkyOEIyMjQxNjA3Q0YzRkJERkJBOAorOjEwQTkwMDAwREY5RjQyN0QyNEE3RkFGN0UyM0U1OTUzRjQ4MTg5REJBOQorOjEwQTkxMDAwRTdGQzVFNTZCQUI2OEY3NjVBNzkzRTZBQkE5NjQ3MTQwNQorOjEwQTkyMDAwMURFNzlDM0NFNUM0NkRDOTgwQjIxNzdGN0VEMzQyOEM4NQorOjEwQTkzMDAwMTM0Q0JFRjU0NEMxMTA4MEJGMjlGRDI1ODc3Rjc4RTIwNgorOjEwQTk0MDAwRjkzNEMwRDNEMjg5RUQxQzdFRThDNEI5NzQzN0U2NzFGRQorOjEwQTk1MDAwRUM1Rjg4RjlDMzhFNDRBRTA3Nzc2QUY3OUIwNDdFOEY1RAorOjEwQTk2MDAwNjlGQjY2NURFMzEzQTRFRkMxMUU2MTg4OEY5NjE0MUYxNworOjEwQTk3MDAwRTlFMUNGOTM3QTFEOEJEMUFFNEJFRTRENTk3MjE5QkRFMworOjEwQTk4MDAwQjFBRUYxMjk3QTdGQTdFNDNFMTVDNDc5NEZCMEYwQkM4RgorOjEwQTk5MDAwNTU0RDJGOURENTc4NTdFOEE1MDYyQjA3QzU3QzE4NzMxNAorOjEwQTlBMDAwRDFGMzg3QjQ3ODExRjNBNkQxN0I4OTU2MEUxRjc1OTQyNQorOjEwQTlCMDAwOTJGRUJBQkY1MkZEQjVDQUNGM0ZDOThGM0VFQTE4RjUyNQorOjEwQTlDMDAwNURDQ0NCNkI5OUFFRDBCOUU0NDMzNjhGMTVGNURCRTdBMAorOjEwQTlEMDAwREFCQUEwRkYwMEM2MDkwMjUzMkQ3NDVFQzQ5MkU2RDMxMgorOjEwQTlFMDAwQkU0RTEwRTMyNEQ1NTIzRTQzODIzNjlGNjNBNTMxMjFFQgorOjEwQTlGMDAwOEMyM0I0NTQ1OUY2QTAxQzdERDAzNjhDRkE2QjI5MzFDNworOjEwQUEwMDAwMDUzMDdFMjNFMDhEQTUzMDFGQzA2N0JDMjMyMTEzNjE3NAorOjEwQUExMDAwMjFFNzQ0N0M5OUUxRTkxQ0Y0NUJBOTJEQkI1MkU0NDk5MAorOjEwQUEyMDAwNTg4QzY3MjJFRDcwMUJFQjI2RkU3MTFCNTQxOUVEQzg4NAorOjEwQUEzMDAwMEQxMzM5NUYxNTMwRjc3QzdDNkU5MkVBMDNDODhDQjgzMQorOjEwQUE0MDAwMEU0M0U0M0FENDJBRkQzQUQ0QTlCQTc1NDgwRDk2MTBCQgorOjEwQUE1MDAwREE4RjJENTM2MTFERDBGRTk4QkQ5OEU2MUI0RDM3QjE5RQorOjEwQUE2MDAwOUUwRjRCNTVDMjU3RjQzQTk5NzYyRTI1RUUxRjU0M0E1NQorOjEwQUE3MDAwQ0IwRUUwQkNBNjFBQkNBRDM4QUY1N0ZFNUE5Qjg0MUY2NAorOjEwQUE4MDAwRTg5QkM2RUExNTdDM0UzQzlDMEZENDdBMzVGOTE2OTNCOAorOjEwQUE5MDAwM0Y5NEY4MzlEQUFEMjY1QTlGNzEzMjlGQ0ZBM0E2NjA1MgorOjEwQUFBMDAwMjY1RDBDNTE4MkE5Nzg3RTNDMTAxRjY3NEU4Q0U2NjNCMAorOjEwQUFCMDAwMkZDM0ZERDU5MkUwRTU3Q0VDRUM3NTM0MjMxRkM3Rjc3RQorOjEwQUFDMDAwQTY2Q0E0NzU4NUZBQTU0RjM0M0Y0N0QzMkI2RjIyMTM4QworOjEwQUFEMDAwREYwNzkxMTFGRkRGNDY1RjQxRDdFOEYzMzRDMTJGMUIzOQorOjEwQUFFMDAwMjYzQTA1QkQ1REI0Q0VEMDEwREQ3OTIzRjRBMEY2NzcwQgorOjEwQUFGMDAwQ0VCRTA5RkE1MzIzQ0VFNTRDMkUxRkQ5RTNDNjI0NzdFOAorOjEwQUIwMDAwMkVDNkE1NUJCRTkxRkJCRDdGNTlBQkUxQTlEOTExNDMxMAorOjEwQUIxMDAwNzY3QThCODNEQkU5OUQ4RTE5M0FGRkFBMEFGQzJEM0NERAorOjEwQUIyMDAwOEY5NjEzNTkwN0VFMkIzOTZFMDFDNURCRTQ0MTY4OTkwNgorOjEwQUIzMDAwMTE1QkU4RURERkI4OTlEQ0ZFNzU3QTJFN0JGRjRBRTkwMAorOjEwQUI0MDAwOTE3NURGNzNCQkM0RkU0RDk4QzFFRDVGODc4OUVDREY2MworOjEwQUI1MDAwOUQ3NkQzRkNEREZEQzg5REMyODlEQzRGRUFDNDc1RjQ0NworOjEwQUI2MDAwRTM1RjgyNUY0OTcxNEZFMTU3OUE5QzdFRjIwRkM1M0FDRAorOjEwQUI3MDAwMEJCNTdEMjZEQTlCOURGNTBDRTM3MEIyQzlBREEyQkQ4NQorOjEwQUI4MDAwMkI2QkY3NjQzMTJGM0EzN0MyMkUxMEUzOEY5QkM4RUQ0MQorOjEwQUI5MDAwOEVDMUU1M0M1RjUzRTRDNzRGRkVCNTU0REYxRkRFRDdERgorOjEwQUJBMDAwNEMxNDc2NDlGRjdDRjcwRkYwMERDOTA5OEZDREU0NDVCMQorOjEwQUJCMDAwQkJDMzYzNzM1MTFFRjk0MEVGRTE1MUY4QTk4NEIwOUMwNworOjEwQUJDMDAwNzE3RjUzMkM5MzNFNTJEQzc0MkZBMEMzRDhGM0ZDQUY5QgorOjEwQUJEMDAwRDE2RjdDQzU0NjdBQTdDMzlFNEVGRDA5QkJCRDIyOTZBOAorOjEwQUJFMDAwNTE3RTMzRjhDOTgxNUNFOEVDQjlCRkMxOEUzNDg0RkQ3NQorOjEwQUJGMDAwNjNGMEQ3MzY0RjhDMzhENzNDRDI3MDkyQ0U4QkEyRUQxMworOjEwQUMwMDAwRDVFOEY4NDNERjdFNzczQzk1QzlFNzEzNENDNUZEMkJBQgorOjEwQUMxMDAwMzU5NDBDNDJCRThBREVFRkEyQ0M3MDE1OEM1QTBBRjMzMgorOjEwQUMyMDAwQ0E0OENEQTc1MjNDN0Y5Q0M5RDNGQkZCNkVEQkFFM0UyRQorOjEwQUMzMDAwM0E3MDNEM0QxMjA2OEI5MzQ5M0ZFRkMyNzk3RjdBRkIxNAorOjEwQUM0MDAwREIyOTZFMTVFRkVCN0U0MTdBRkE2QzdENDlEQzY2RTQxOAorOjEwQUM1MDAwRjdEQzA0OTJBRkU5REFGRDMzMzE5RkY0OTU5REYxMDlGOQorOjEwQUM2MDAwMzZDQzAzRUMxRDg5Rjk3M0MxMjZERkE4MkEyM0M1MEQ1NAorOjEwQUM3MDAwQkRGRENERjc1N0RBRkU2M0ExQTEyQ0YyQkI0NDZBNTJBOQorOjEwQUM4MDAwRjdCNTIzMDBFRkFBQ0RFMDU2Njk3RjM5NDlGRjA5MzlBRQorOjEwQUM5MDAwNTBBMUM0NTczOTgxQ0YzMzlBOThEQkE2RTJBNzlCOUQ3OAorOjEwQUNBMDAwMTQzRkNCQjgyODEzQkY2NTFDRTVERjk3MUU5QUQ0MkI0MQorOjEwQUNCMDAwRTE3NzhGRkFDNkQxRjJBNEM0MzlDQzk3RjU1NUI0M0ZFOQorOjEwQUNDMDAwMzMwNjMxRDY4RDcyMTBGNDNEQ0FGOTJGOTM0MjczNzA1QQorOjEwQUNEMDAwN0Y3RkY5M0QzRUEzOEMyN0Y0RjVBMDczMjlCRUJERkMxMAorOjEwQUNFMDAwRjY5OEEwMEE1RDBGREQwMEYzQzNGOUZDNDA2MkU5OTkxNAorOjEwQUNGMDAwMzg4RkEzOTk5QjMxM0VGNDYyMkNDNTg3RTQxRDU5MTQwQgorOjEwQUQwMDAwREZCOTNFRDVCRjdGMjJDQ0UzRDNBMDdBQTc2MUI4QjYyNgorOjEwQUQxMDAwNTg2OEI3RTZBRTE4RkEyRUMxNEVBOUZCNUFDQUNCQjg4RQorOjEwQUQyMDAwQzM0MERGNkQ4REM2RDc1QjEzQjk1RkY5RjY0NEJFQ0Y2NAorOjEwQUQzMDAwMzI1Q0M1OUNERUFFQzI1MTRCMTNBRjdDM0Y3RDgzREZERQorOjEwQUQ0MDAwRDYwMUZBNkU4RDBCRDI3OTlFQzgyQkRCNjZFQzlGQUZENQorOjEwQUQ1MDAwQ0FDQUI4N0NFOTkzQzcxQUZFMkNFODA1MjFCRjQ4OUFGNQorOjEwQUQ2MDAwRERCN0VGOTk2NzlFNDk2MUZDOEFFMjMwN0U2RTE5NzkwMgorOjEwQUQ3MDAwQkUxQzkzMTVBNENBMThCNzk3RTQ4RkU0RjQ3MjM5RUI5QworOjEwQUQ4MDAwQUM3NzA1ODBCRjM3N0YyREY3M0JCRUJENEM5M0QzMTkwMQorOjEwQUQ5MDAwNzdCQUIwN0Q5NUVBQTZCMjMzQTNGOEY4NjJDMDlGQ0QyQQorOjEwQURBMDAwNjY2MkU2MDgzOTJDRjgyNDVBQ0YzN0Q4ODc1REQ2REY5QgorOjEwQURCMDAwMzc4MTNDNTYyRjEzOEYzMDY5Nzk2NDlCOEU0Q0IwRTBGRAorOjEwQURDMDAwNzc0QjM3RDkzQ0RENjg3RjZEQjIyNTc5Mjg1RTZGMDNGQworOjEwQUREMDAwQjkxMTExQkZCMkQ5NUUyNTNFQjRCOTc5NUNDRjg2RjIwNAorOjEwQURFMDAwMTdFMzU3QjhGRTNDOUNGRkFCQjQ3RUQxRUVCNDI2ODc4OAorOjEwQURGMDAwNkNFRTEwOURBQjVBREREQkE5OUQ0NUYxRDFGRDNCNEJCRgorOjEwQUUwMDAwMTJBMzdDMDg4QjkzN0ZFRjM0MjZDQkMwMkNGREM4RTNDNAorOjEwQUUxMDAwMEY1MDFFNDMzRjlCRjIzQ0REOTUzNDNGMDVBRjY1QjFCQgorOjEwQUUyMDAwNEQyRThGOEJGNDIxRTIxOURFM0Y2QTJGOEU4QkM0Q0YxQgorOjEwQUUzMDAwNTAwRENGMkQ5RDdDN0RCRUM2NTQ2NzU1MDFGQUI1QkUyMQorOjEwQUU0MDAwOTRCMjIyRUM2Nzg5MDVCRkFGMjdEQjBCMkZEQjRGNkU3NworOjEwQUU1MDAwMTk5NzJCRTE3RTFFNDlBOTRBQTQ3RTg2NjIzRkIyREQ4NgorOjEwQUU2MDAwRTNDNDdFOENEQTc3NUJBM0YxNUNBNEJERkZGN0M2REQ5QgorOjEwQUU3MDAwMDA4Mzk0MEY0NDc4MjFDMjg0NzQ3NDg5MkU2RDE4M0YyNgorOjEwQUU4MDAwNEJFQ0VGM0QyRTE3MzMzNUZGMDVFNDYyNDUxOUNDNkJEMworOjEwQUU5MDAwNERERTA3QUZGMjNEQzZGRDk2ODQ2Qjc5QkVEMTU5MkRDQworOjEwQUVBMDAwREYzQzNBNEYyM0RBOEUxMUZBNDdFODIzRTg0N0M2N0VBMworOjEwQUVCMDAwMUU0NTNCNjY0NDc4MUYwREU2MTI4QkE1RDVGOUY4N0UzQQorOjEwQUVDMDAwNDlGMjExQkY4MDVEQTNFMjdFOTFCNTdDQzFFOEY1NkNDQgorOjEwQUVEMDAwRDZGMDI3Mzk0QTU0RDQxNzU1MTc3QUQyRjBCREMzRjZBNQorOjEwQUVFMDAwNTM2OURDOEVENTlGNDcxRkZCRUI1MzU2QUNGRkIyQUVDOAorOjEwQUVGMDAwRjJCMkY2OEEzODdGMUVFOERDRDlGMTJGOUZBQzhGQjQwRQorOjEwQUYwMDAwNTcwNjNBODdGRUI2RjNFNzIzMEUxM0M1Rjk3NjQ5RkFEQQorOjEwQUYxMDAwRkJGNUNEOUExQ0RBNTAyNkUyMzJGRURCOTAxRUJCMjRGNAorOjEwQUYyMDAwOUY5QjVGOThFNkYxOTlBMjcyRkY5REY4N0M0OEJCODlEMAorOjEwQUYzMDAwMDU4MEFFODdGRjVBRUNGMjQ3RjQ3M0E1NzgxNkYxRkE1NAorOjEwQUY0MDAwQzE5QTNEMzVEOEY2OTQ4NEZCNzQ3MDVENTBDMjc4N0IwRAorOjEwQUY1MDAwNUE1RDg3RTRCRDRDQkJEOTY1NUM4RjhCRjY0NkFERkY2RgorOjEwQUY2MDAwNzJBNTU3NDY3RDU1RUVFNDdBMzFFREJDQzI3MjIzRTRGQQorOjEwQUY3MDAwQ0U4QzMyQkU3RjhEOUFGREVFMzhGMkI0MTVGQjNCNjI2QgorOjEwQUY4MDAwRjBCNUU3QTA3RTcwMThENDI3MjNGNkJCNzFBNUM3NTI5MQorOjEwQUY5MDAwMTlCMUJFMTYzQzQ3RUE4NzhFQ0Y5NEY1RDk1REE0QkZBMAorOjEwQUZBMDAwODVCRTM1MEEzRDkxQTRFOEY0QzRCQTU4Q0VDN0MyREVDNgorOjEwQUZCMDAwNTk1N0NBRkRBMTc1QjFEQzJGN0ZEMUU1N0YwMkY3RjNBOAorOjEwQUZDMDAwRTdBNTlGQ0MxQUFFRTIzRERCMEUxMzlFQkI3RkRCNzk3QgorOjEwQUZEMDAwNEE5RjdENjMwODJFMTZGRTBDRjJCRjVCNzFGRUEyMDcyRQorOjEwQUZFMDAwREVDRkZGNjEwNUQ5N0I0NUY4RTUxMjE5OEY3MEI5RkRGOQorOjEwQUZGMDAwMDdGNkQ0NzMzODVFMDE0RTNEODJERTJDRUFCQjg2MDMzMQorOjEwQjAwMDAwQUQ2NzI3N0U0QkFEMDhFMzdGREQxNEM3QkRFRjgyRDQ2QgorOjEwQjAxMDAwRUY3RDhBMkZDQjg0QkREMDc3NkU3OEQ5MzhBQzhBNzExQQorOjEwQjAyMDAwRDg0QzNDMDdEM0M3NDkwQkJBRjQ3MDUxQjcxRTFFN0ZFQQorOjEwQjAzMDAwM0MzQUVFRUFGRDZENjREQzc1MjdFQzMzOTQxMzIyQ0VDNgorOjEwQjA0MDAwOUExRTA4NTZFMDNERjMwQ0Q2NDFFNzkwNjk3NTA5M0ExRgorOjEwQjA1MDAwQkM0RTk2QjVGQzBDRkNCQzcyNDRGQzM3NERBOTNFOEQzMQorOjEwQjA2MDAwRUY5RkVFNUI1NzgwRTlFRTA3NTQyREJEMTMzRkM1MTlFNgorOjEwQjA3MDAwOEVFM0FBODRBRjE1RDdDRTlEOEE3NDhEOEVFNzY2RDRGMQorOjEwQjA4MDAwMkJCQUZCODREMTcxRENFNTNCRjVGNzBEN0RERTdDRjI1QworOjEwQjA5MDAwMDdFNjdENDcxRkZGMTU3OUVEQjhERTM0Q0ZBNUUzN0ZDNgorOjEwQjBBMDAwRkJCOEYwM0ZFMUQyRjE0NUJGOEY4MkZDMjFGOUFBN0RDOAorOjEwQjBCMDAwQzczODAzQUJCMDFGMjUyNEUxNzlGOEUwN0E0NkRGMzNDNworOjEwQjBDMDAwNEVCQjlENzlGQjNCNTc0ODlCQzRGMTE1OEQ2NzE2MjhGNQorOjEwQjBEMDAwMjdGQzRERDE5RTBEQjZGMUJDRDdDMUI3MUJDODFFMUNCNQorOjEwQjBFMDAwMEM3MjgxRkVERUMxNkFDNjEyMDE0RTVCQUQ5MjNEMzkyMworOjEwQjBGMDAwQkJDRUMwNTAzRkIwMEI0REJBRjc2MUJBMTQ0RjE1NzRCOAorOjEwQjEwMDAwN0ZENEM2RjM3QTMzRDZCMEEwMDFENzUzM0Y4QUY2MTM2MworOjEwQjExMDAwQ0Q2Qjk4MkVFRUFFRkIyRUMxRUMxMkZEN0RERjhDQTgyMAorOjEwQjEyMDAwN0JCRTgyMEZEMkEyOUUxRjJBNzNFQUY2MDVFOEI5QjQ0RAorOjEwQjEzMDAwNDlDNDI3NUNGRjY1QTNGRTgzMjk3RDNBRTFGODUzOTg1MworOjEwQjE0MDAwODczNzc5MjNFM0RGQzM4OThGRDFCRTg3RDM3NzVFMjEyOQorOjEwQjE1MDAwNUYwNDdFM0Q2Mjk5OTI4QkY2Q0E1NjY3OEMwMUYzMjM5OQorOjEwQjE2MDAwMEVDN0Y3M0NDNkUyMTkxQjMzODkwNUYwRkI5RDJGQzdCQworOjEwQjE3MDAwRjQ4RTk2MDA5RUYwRDI5RTVERUQ0MDk0QzNENkRFMUYwNQorOjEwQjE4MDAwNjEzMEQ5QjZFREU5OUJBNzQ3QzA4RUZCNUYyMjk4OTU0OQorOjEwQjE5MDAwMzAxNUJGMkY4NEI5QUJCOEVGNjI5QzMzRjZFMUY3N0M3MgorOjEwQjFBMDAwNjNGMjZDMTQ5QzhDNjFGQUVGRjhCNDk2QUFEQjMwQkZBMgorOjEwQjFCMDAwQTQzNURCQTBEREIzOEVBODg3NzUzQzM1QzkyOUYyRTI0MgorOjEwQjFDMDAwMjg0RjhGNERFN0Y5MDI5MUZENjM5RUY3ODBGRENGODBGOAorOjEwQjFEMDAwRkUwQkFGQTI3RjBCOUY3RjBBM0UwMjNEOTM4MkYzQzcxNworOjEwQjFFMDAwMzgzOEY2OEZGNEM1QTA1MUU0Rjg1QTdGMEEwQkVDQzY0NAorOjEwQjFGMDAwRjMxRDE4Q0YyNkYxRjE5Qzk4QkY5MkMyRjRGOTBBN0Q5NQorOjEwQjIwMDAwRTMzOTYxQkMzMUZGMTdENjMzRkY1MjdBMTgyRjQ3OEZDRAorOjEwQjIxMDAwMDU1NzQ3OEY1NjgzOTdFNjFCMTg2QjIzM0YwOEJGODc1OAorOjEwQjIyMDAwODVERkJEQjM2QUUzNTlCNUVGN0YyMTVFNUI4QkMzNzhFMQorOjEwQjIzMDAwMDUzQjkwRkE4NUU2Q0QxNzM1M0M2MzNFNjI4QUQzNDRFMAorOjEwQjI0MDAwNzgxRTA4NkY0NzlDM0M3RjZBOEIzMzI2RDg5Q0Y5RkY5OQorOjEwQjI1MDAwODA1RTJFNEVBRkM4RjFEMDlFQkNFMkYxMTZDMDc4NDk5OAorOjEwQjI2MDAwNTczRTFFRTIxN0Y3NEYxRjdFODEyNjFCNTNBRTFDQkZCMQorOjEwQjI3MDAwMzBBQkMwOTVFMEY3MDhGNDZCODhDMDZCMzg0RkU5MTEyQworOjEwQjI4MDAwMjdGQTA1NTZBM0NGODI3OTlCQ0Y0RkUyRjk4Rjc5NDlGMAorOjEwQjI5MDAwNzMyRDk0Qjc5MDNDOTdGMjkwREJGMjZDOTQ1N0RGOTY0NQorOjEwQjJBMDAwRjUxRDhCMzE0MjRGQjdFNUQ1NTIzREI0QTdGQ0FBQkM4MgorOjEwQjJCMDAwNTAwQzg2MjlEODE4RDY0RDcxODAyRDY1NTUyRUY0MEI2QgorOjEwQjJDMDAwMDNGNTNDNUY0QkU0MkYwOTdEQzhCNEYzNTE1QTE3QkMxQQorOjEwQjJEMDAwMTgzN0U5NDBFRjExNjhCRkE1QkU5MEYyRDNFMkUyRkY1NAorOjEwQjJFMDAwOEJGMkIyQjZENkI5REQ1OEZGMTg5RTYzODEzREYxQjAzRQorOjEwQjJGMDAwNzY4RTg1OEM0QUYxQjRCMUE1NEZFMEI5QUYyN0JCNDEzQQorOjEwQjMwMDAwQzJFM0E2RjRENTdBRkQzNDM4MkFFRkM3RjM0NTc3MjU5MgorOjEwQjMxMDAwRTY3N0IxQzUzQzdGQ0I1NUFCNDRFOTQzRkRCRUREOEE0MgorOjEwQjMyMDAwNzhFNTc5NTY0MTg5RTM1N0Q3REZFOTQ5QzlBNEU3QjZGQgorOjEwQjMzMDAwNjRFRDYxMTVEMEVGRjNEMDk3QUNERjVGMDZDQzc3OEE3MAorOjEwQjM0MDAwREU4RjhBQzk0QkRGMjk2MzBEMDY5QTQ3MUFBNjEwODA0MworOjEwQjM1MDAwOEFGMzhDOTlFOTVBMENDRkQzOTcyOUY0RkREQTQxNzkxNQorOjEwQjM2MDAwMUIyOEVGMDlBQzdDQjIzN0YyRjJERUE4NDRGODkyNzVFNAorOjEwQjM3MDAwMkVENUFGMjM3QTVERDFGMzE2REY1NzE2RjRGMjdDRTFCOAorOjEwQjM4MDAwOEU0NUZGQ0E5MzNEOTdGMkQyRTg0N0VDNzczOTZBM0Q4NAorOjEwQjM5MDAwNjAwRjVCOTMwQ0Y0NURCOTk4QUM4ODc1MzE1RDNCQ0Q2MworOjEwQjNBMDAwN0ZGQjlGODU3RjNGODk3MUZCMzlGQTVDRUM3RkYxRkI2NgorOjEwQjNCMDAwNDc2NkU2QjY5OEU4M0Q3MTVGODc5RkI3MERDNkJEODNDNworOjEwQjNDMDAwNzQxRkMyNzg3RTc4RjRGQkM1RkM3REU2RTJFNzZGRTY4OQorOjEwQjNEMDAwMTg2NkMxRkIzQUQyQUExODhBNjM5QUNEMDBFMzdEMUU5MworOjEwQjNFMDAwRUQ3QjY1OEY2QUYxQjY2Njg5MjlBOTlFQzhGMTQyOTQwMgorOjEwQjNGMDAwNUYyRjVCQUVDQjQyQkZFMTg4NjU5RTkzRUVDOTY5N0U0RAorOjEwQjQwMDAwOTQzMURFNDdGOThEMkMzNzQxRTc4RjFFRDFFRUJCMzVFNQorOjEwQjQxMDAwQUNDQzFDODRGMUJCMzhBOEVCNDZCRjVBNzE1QjkwREUwNAorOjEwQjQyMDAwMjI2RUUyMThERTczMTNFQUYxNjE5Mzg3MkZCMjAwMkVDOQorOjEwQjQzMDAwMEVBMzEzNUNDQUQ4QjhDMzE5M0ZDMEVGMTQ4QkZENjlDMworOjEwQjQ0MDAwM0VDRkJGRjdEMTA3MkJGNTk0M0Y2MjNFM0Y0NEY3M0MxOAorOjEwQjQ1MDAwQTRGOTYxMDJGNjI2Mjk1NTM4REUzNEY0MEY5MkYxREVBNAorOjEwQjQ2MDAwQjhCMzE1REZBQjAwRTRFOEJFMkZBMDdEM0ZFNEQyRkUwOQorOjEwQjQ3MDAwRDM3NUNGNDNFMDVGNDc5RTBCMENEQzdGQUNFRTNCMDUwMgorOjEwQjQ4MDAwNjZGMDc3RkFFRjNGMjdBQTdGNjdCRkZEODdGQjRERDRCMQorOjEwQjQ5MDAwRjVEQkE2NzBCOTExNDg4QTA5RjYxN0RGNUIzNkI5RjJGOQorOjEwQjRBMDAwQkFDOTQ1MDNFN0I3MkQ5REFDQzVFMTJDMjBGQUYxMUNDNAorOjEwQjRCMDAwNEFFMzlGQ0RBRTdBQ0E3NzkzNjNGOEI5QTkxMUM0MDg1RAorOjEwQjRDMDAwRjJEMzUxN0IxREM5MkQ5NkFFQ0Y3NzEzREYyNzY5QzMwOQorOjEwQjREMDAwRUY4RTQwN0RBNTRENkZBRjU3QjBERUEzRTMyNEY0NTM0QworOjEwQjRFMDAwRjVGNkZBNjQ1NDM5NzgzRUM1QTJFREY4N0EzQTI3MzU3NAorOjEwQjRGMDAwQTZFQkU1QzI0NTZEQkYxOEVDODVERDk0MUY5NzZDQTNFNAorOjEwQjUwMDAwQkM4NjgxRTIwQkVGMzUzMUNBREIzMkM2RkFFQTUxRTc3RAorOjEwQjUxMDAwRkRFQkUxRjE0M0RCNEEwMDhFRTM3Q0I2RjVGMENDNDU3MAorOjEwQjUyMDAwMTgzNzdBNEZFM0U3MzY5MDAzNzRDRkI1NjFEMDZFMzlBMAorOjEwQjUzMDAwQTJERjVBNTMyODFCRjU0QUFEODFERjE3QTAxRjE4RkY2MQorOjEwQjU0MDAwQkRFNEMxMTQ2NzhEMUU1NzdDN0Y0NkMwMEJFQkE1NDkzNworOjEwQjU1MDAwNTkxMUVCN0I0RkRCMUY3REUzREQ5NkI2MUJFRERBQkVBOQorOjEwQjU2MDAwRjFDQ0ExMjIxQUFGMkZGRjQ4MUIyRkU1RUYxQkVGOEY2NQorOjEwQjU3MDAwREFGRTE2RTMyREJDNTNCRkJFODVBNjZFNUFERjQyRUQ0MAorOjEwQjU4MDAwRkJBNzYyQkMzRkUyRkEzMkZGOEVGMUI0QkNCMUJFRjE2MAorOjEwQjU5MDAwRUVEMkFGNkZBMUI5OUJENkI3QjBDRkJGRDRDNjRCRjkyRgorOjEwQjVBMDAwRkJDNjEzRjkwRTY2NzM3RDFERjJEMzQwNzkwRjIyREZCRgorOjEwQjVCMDAwMjFDNzk1QThDQjc3QzA5QjI3MTU1OThDM0QyMDcxQkUxQworOjEwQjVDMDAwNzg3RDcyQ0QwRjMwQ0U3RjZFNjY4MzlCRUMxNENEREYxRAorOjEwQjVEMDAwQTM3QjQ0MzJERDIzMjIzRDNBM0I5RERCMjFBMkZGN0Q0QworOjEwQjVFMDAwNEQyNUNDM0I4MkM3ODNCMENDMkQ5M0U4OUVDMkM4MTJCOAorOjEwQjVGMDAwQzk4QkU3NkMzQjQxN0VFMDc3RjQ3NkMxM0VDN0ZBNjBDOQorOjEwQjYwMDAwOTM4QkNBM0Q0RDJBOTU3QkMxQkZGNDUyRkNDQjRERjBDNAorOjEwQjYxMDAwODVDOURDNUY3QzIwRDU1OUIzMTRFRDhGOEExODlFQTdBRAorOjEwQjYyMDAwNUQzNjExMkNEQkIwRkYwNkZCRTU4ODE1RjMyMTZGNjA1QQorOjEwQjYzMDAwRjlGODc3MkQ3Mzc2NzA3QzI2NTVBNUQwRjdGNjYzRjI2RQorOjEwQjY0MDAwOEY3NTM3MDFCQ0I5NDQ1NjMxRkY3Q0IzREE3RjNDRTdENAorOjEwQjY1MDAwMkY1QUJFQ0Y2NjJEQkYzMjgwRjcyRTQ5QTk4MDNGNTlBMQorOjEwQjY2MDAwNEM3RjNGOEJGRkM4MzNFOTVFQ0VFQ0JCRTJDOUJFQTk3RAorOjEwQjY3MDAwRkQ0RThGREQwOUYzQjg1OUNBRkY2RDE2RTBFMzRGOUEwRQorOjEwQjY4MDAwN0RCMzY4QzgwQzkyMDdEMUZFNjkxMjZBQUE0MkNDM0IwRQorOjEwQjY5MDAwOTQ4MzQxRjg3NTlFN0QxRUY5QjdGM0FFNjcyQzAxREVFOQorOjEwQjZBMDAwOUY4REVGODE5RUZBQjU2NjFGQkREOTYzNjZFOEZGMDVFMQorOjEwQjZCMDAwQUFGOEY5RjVDRDFCRjQ3RUU5MDNENjkwMTNFREMyMDc4NQorOjEwQjZDMDAwRjI5MzE4RDJBM0Y2NzY3REZENjYxM0RGNkZGM0EyRkMyQQorOjEwQjZEMDAwRDREOTUxNzkzRkUyM0I4QTlCRjFENzA5OEM3RDM5NTkwNgorOjEwQjZFMDAwRkI4RTkxOTZGN0IzNUY4QjMzQjFGNDA0NEEwNjE3RjdEQworOjEwQjZGMDAwM0RDRDY2RDZFRkI5QTRFODJGMTEwNDFEQkQ5N0U0MjUxMgorOjEwQjcwMDAwM0M4OEJDNzcyNjNGOUI4RkVGOEJGMUM0N0I4RjRBQ0Y2MQorOjEwQjcxMDAwQTY1RTJFNkUwQTc2RTBDOTlFNUNBRUVGRDE1RUI3OTY0RAorOjEwQjcyMDAwRUJFNzc5NkVFNkIwRUY1NkIxRkVGOEI2NTdDMTM4ODU1MworOjEwQjczMDAwOThGRjNGOEI1RjhGRTI3QTQxNEVGRjdBQ0E5Nzg1RkM3NAorOjEwQjc0MDAwM0U1RTNBOEJCQzg3MjdGMkJGRTZGNUMxMEE3RDlGRjhDMworOjEwQjc1MDAwN0EwMUJBN0FGMzkwREVCRjk5MTRFQkJFOTdGODRGQjMzMworOjEwQjc2MDAwNDc0MkVGMUEyRUM2NUU3RDdGN0RGMzcwNzkzMzc0RjcwMgorOjEwQjc3MDAwNjBCNUZFMDZDMkYzNDBERkFEQTA5RkUyNzA5Q0I3QTVBNgorOjEwQjc4MDAwRDlFREEyN0I3N0M5RkM5QzZENzA1MkU1NjlCQ0U3ODU1OQorOjEwQjc5MDAwRjUxRkU4Rjg0QjdGOUZBQkE1RjM2OTA5RkQ5NkM3RjA0RAorOjEwQjdBMDAwMUU5QzMxMjI0RTU0RDcyMUI1RDlCMERGMjA4RjJCODU3NgorOjEwQjdCMDAwOUVBNkY4NkY3QTVENDg2QUNEMEJERjFCOEE5NjhCRTlFRgorOjEwQjdDMDAwQUJGNUY3RDJBMkJGQzc1ODZERUI1MTI0MTVFM0ZEQkQxMQorOjEwQjdEMDAwNzRERkIxQUQ1QzNCOUY0MTFDNjNCQjY0NkU0RkNBNjlCMworOjEwQjdFMDAwMDY5RTJGMzI1NEU1RjY2NTU2RUY5MEM4RjM4RTU1RTU2OAorOjEwQjdGMDAwREM2RUE4OEU3REZCNzYxNTQ0QUZCRkJDNjMxMUU2NDVCOQorOjEwQjgwMDAwNTVDN0JEN0Q3QjI2QzBCNzk0M0ZCNzA4QkZCMzU4OUREMQorOjEwQjgxMDAwRjZGNjk3OTkyMDZGOTc5NUVGRTdGMEU4QjdCRjFDMDYwQgorOjEwQjgyMDAwRjA4QUYyRTczOThDRjkxRTgwQTQ5NUU1MDcxNkExQkNEMQorOjEwQjgzMDAwNUQ1NTJFQkVCRkQ4NERGN0JGRTU1NENFNDc3Rjc3NjkyMworOjEwQjg0MDAwMzZGNEJCMkY2RjJCMTc3MTRCNDZGN0JEN0Q4NzdFNzk4MgorOjEwQjg1MDAwMUNFNTk0NEZDNDc5QkRGQUYzNERBNjdEN0ZGMTNBQzE0MgorOjEwQjg2MDAwNUU0OTBFQjI5NzY2RTBFRjgwQ0ZFQkI0RUZGNjE4MkM4RQorOjEwQjg3MDAwMjFDMkVCODhGMDc3NTFCRTc3MzVERkVEMDlERkI3RTdGRQorOjEwQjg4MDAwREY5RDZBNjk2NDdFRkRGNzE1QkQxQUZGRjNCQzIxMzFBNworOjEwQjg5MDAwMUYzMUZFMjVGM0MyRUYwQjI2NDRDRTZCMjdGNTIzRTZCRQorOjEwQjhBMDAwRjU3OUJFMzkyMDhEMEI5RkQ3OEE3OTdEMkVGNUVFQzJCMgorOjEwQjhCMDAwQTA0N0NGOTRERUM1NDhEN0NGRURCRDQzRjBFRkFCOTRBMgorOjEwQjhDMDAwODc4NkZBMDk0RUVFREQyNUI5MjM2MDIzQTdFMzIzRTUzOQorOjEwQjhEMDAwRkY4N0VDQTk1MUE5REU0N0NBMzE3RkNGQzRCRjgzRDAwRgorOjEwQjhFMDAwQUVEOTkxNUI5M0ZEMDFGNEVCODFERjI4NkYzMzkwQzFGQQorOjEwQjhGMDAwRUYzQjU0MTVFQUZGMEVEQzEzMUE3RjE1NzlGOUY5RjRDMgorOjEwQjkwMDAwNTRGM0Y2RkFCNzBBRjFCQkVDMTI2Qjg2RjZFQjJFOUNGOQorOjEwQjkxMDAwMzNBMURGNUY3REU4ODQwOUZERkJCNTA3NEU5OEQwN0YzQQorOjEwQjkyMDAwNUY4QjMwRjRCMzc2QTdBOURGQkY0MzU3RUE5NUM1RkUxNgorOjEwQjkzMDAwRDVGOTJCQUY2NEU0QjQyNUMxN0NENjJFRTVERjAxNkJDRAorOjEwQjk0MDAwRjg1OUZDNTQ4NDFCMTZFMzJBRjFFRkY5M0QzNzE1NUZEMworOjEwQjk1MDAwNUJFOEVCNkNDMzcyMTFFQjc5MDVDRjI1NkFGQzdBM0Y4QgorOjEwQjk2MDAwRTJBNjNBQkREREJGQjA1RTZGQUYyRkRBMEVENDAxQkRFNworOjEwQjk3MDAwQjZBODMxMkRFQTdCODBGQzNCODMzNTFBM0Q2QjVDREIzRQorOjEwQjk4MDAwQkFGMTNCMDYzNTJDRUEzQjgzMDExRTQ3QkE4OUFGMDA2QQorOjEwQjk5MDAwNEE3RDdDQTQxQUZGOUUxNUFFNjNCNTRDNzFERTU3MzIwQQorOjEwQjlBMDAwMzYyOTc4NEY2RTVEQkQ0NEY5N0I1MzBGN0U2MUEyN0FENAorOjEwQjlCMDAwNjg4N0U3NEEyOTgzRjlGN0Y0ODRGQzE0RkFGREE2OTcwRgorOjEwQjlDMDAwNzYxQjMxNUUxMEZEQkRDMTQ1RjNBN0QzNzdDNUU3QUI0QworOjEwQjlEMDAwQUJCODdFMUZGQUJCQTkwOUYwM0NGQTNCODJCNTA3QjlBOAorOjEwQjlFMDAwN0VBRjZEOTQ4MkY4RERERTlCRUFGNEZFQzA0MkQ2RERDOAorOjEwQjlGMDAwODZGRUNDQzI3QUZERjM0NThEN0FGODIzQTFENzQ2QjNGMworOjEwQkEwMDAwRDFCODNGNEU5NzRCMEFFRDE3MEQzRTkzRjFCQjM3NDMyQworOjEwQkExMDAwMzBCRTNCRDVDN0JDQzAyN0FCNERBMUIxQThFN0RDQTk2MAorOjEwQkEyMDAwN0U4MjQ1M0QzQzVGOEJGMjdGQTA3REY4RkY0QkY5REZDNgorOjEwQkEzMDAwNTgxODg1NTQwMDgwMDAwMDAwMDAwMDAwMUY4QjA4MDA4QgorOjEwQkE0MDAwMDAwMDAwMDAwMDBCRUQ1QTdENzA1NDU1OTZCRkI3RkIwNworOjEwQkE1MDAwNzVBN0JCRjM0MUU3M0IzMTA0NUVCRTU4MjQ0RDY4RDI2NQorOjEwQkE2MDAwMDQ0MTc3OEFEN0RENDk0RkY4NzIzQTQwODY2MDA4MzQzRQorOjEwQkE3MDAwQjM1MDE1MjU0OTQ3ODk1M0IxQ0FERDM0MTA2MzA3MkRFQQorOjEwQkE4MDAwNEI1OUI0QzBGMjhGMDZDNUQ1MUFERDBEOTJDMUNFRDI4NgorOjEwQkE5MDAwMzAxRDMwMkMzQTM4NzY3NkQwODE3MUI1ODJDQjNBNTI0RgorOjEwQkFBMDAwOEU5MDg4QTNCOENCMTY3QkNFQkRFRkQxRkQzQTJGOEFGRQorOjEwQkFCMDAwQjM1M0ZFRTE2RTUyNzA3M0RGRkQzRUY3N0NGQ0NFMzk2RQorOjEwQkFDMDAwOTcxMEUxQTNCMUQ5ODRFODA4MjUzN0Y0ODRFQzM0NDgxMQorOjEwQkFEMDAwNTZFNzAyNDIwMkVERDQ3RTUwMjRBNDE5REI0RDg0RkRDQQorOjEwQkFFMDAwREMyOEMxRkY3OTdGNTZENzRGQUUzQjI0NEE0ODBEQ0NBNgorOjEwQkFGMDAwNjNGNjc2MTE5Q0U3MThCNTFFODQ0RkI1ODIyNDY0RDk4RAorOjEwQkIwMDAwRTAzQjI1NEQwMzY5RDAxNzdGOTZDNENCMDU5MjhFOTBGQworOjEwQkIxMDAwNUM0MjdFNDNDNjZDQTQ4QzkwNTkyOTMwNjEwRTk0QUI3NAorOjEwQkIyMDAwQTc4NTAyQjBFRUFDNUY2RDBBNTA5ODZGOTY4M0RBNzUwOAorOjEwQkIzMDAwQjBBRkU1QjBFM0VFNkEyQzA1QjIxRUNBQkIwNTQyQ0MzRAorOjEwQkI0MDAwNTBDRUQyMEYzNEUxQkE2NDlFRDE3QTkwRURCNzgwOTA5NgorOjEwQkI1MDAwODU4NDJDQzMzRjYxOUNGNDMyQTExRkMzNzk3MEVCQjg3QworOjEwQkI2MDAwRUVGMkU5QTdCRkE2MTkzMDdFRUZFMzEzN0EyOENCQ0IxQworOjEwQkI3MDAwQTRFQUE3NjA3RjhGOTlGOUZBOEYwREQxRDA3Njk4QTdBNAorOjEwQkI4MDAwQzM3NkVBMUNGNkNCOTcwODVCQjdBMzIwMkQ4QUZENDk0NAorOjEwQkI5MDAwRDhGMEM3OUJFNzJGODU3NkQxNEFENjY3NDE2NTg1OEQ1QQorOjEwQkJBMDAwQUQ1QjI4RDMwRTU2MjYxRjQzM0YxQTc1RTk2RTU0NDJFQgorOjEwQkJCMDAwM0Y3OUREMUY3OTQ0NzZFRUJDRkIwNjI4OUVCQjk4MDRENgorOjEwQkJDMDAwQjY1MzU4QUYwQ0Q2NDEzQTJBMjUyMUE2QzA0NTE4REZGNgorOjEwQkJEMDAwMDhGNzM0MERGQUU5MEI3RENGMkY4MTcxRUQwNTYzNDYyRgorOjEwQkJFMDAwNTI4QUVERTM0NkVGNUNDRDdFQUYyRUE5RDFFODI3MDE2NgorOjEwQkJGMDAwMDE2MTdGMEY1ODM5NURFQUY0RDczMzgwRjJFNDgxNjM0NQorOjEwQkMwMDAwNjVGOUM0MzZGOTdFOTQ1MjZGRDIxMTUxRTEwN0Y4Njc5NQorOjEwQkMxMDAwQjA1QTg4MzgzQjVFNUYzRTNCNUI1NTVGNjkyRjUyRjVGQgorOjEwQkMyMDAwRkZDOUEyMzI1NTdCODM1NEE5NkE1RjVERUY1MEQ1MUJEMworOjEwQkMzMDAwQkQ3N0E5RkFBRjZENzJBQkVBMjkwNUNCNTRGRENERTIxMQorOjEwQkM0MDAwMkE1NTNENzVGNjNEQUFGRUU5RjY5RkE5REE0OUNFNDA5MAorOjEwQkM1MDAwODEzNzlEMTBBMzI5MzBFNjAzM0EwNDgxNTcxN0MxRkRBRgorOjEwQkM2MDAwQTUxOEQzODI3NDFBMjE5NTE5RDAxOTRBOEJDMzlDODZDMgorOjEwQkM3MDAwNjU3MDdFNEExNEVGMkQ3ODVCNDYxNUQ2NTNERTdDQjA5NgorOjEwQkM4MDAwMjA4QTU0OUZGNjhBQzkwOUU1MkY2OEM4OTUwRDczMDA2QworOjEwQkM5MDAwOTk3QzAzNDBDNzM5MEYxMzI5OTQ0MENGNjM2RTFEQkJCNQorOjEwQkNBMDAwNEZBNURDMjZGOUZFQ0UwOUE1RUQyNUIxMDg2RTA0N0U3MAorOjEwQkNCMDAwNjI3M0YwN0U0QzE2RjgxM0Y5Rjg4ODI5ODQ3QzNDMEZFNworOjEwQkNDMDAwRTYyNDhCRTNGMzJDRjEzOEJCMjUxQ0Y3QjBCNDE0Rjk1MAorOjEwQkNEMDAwOTQ4NDg5QjUwMkZBMUQzMEMyQ0Q0MjNENzBDNEM4QzZGNQorOjEwQkNFMDAwRDlDMjYzM0EyOTQxREUwNDI3OTdDRkE3QkRBRUE1Mzg1NAorOjEwQkNGMDAwN0Y0Nzg0NUEwOUYyRjdERThGOENBMjBERUJDMzE5MTIyRAorOjEwQkQwMDAwOTQ1NURFOEY4QzI0MkRGMUZCMDUyMzdFRUYxMEM2MkQ3QworOjEwQkQxMDAwNTYyOEZGNjk0MDVGMUZEMkUwOTM0MUM5QzhGOEY5NTQyMworOjEwQkQyMDAwQjE5MUM5NEZDQjgzRkE1MDBBNjVGQ0JGQzIwOUZDRDY1QQorOjEwQkQzMDAwMjRDQjYxQ0JBMUYxQTgxRUQ2NkYwMTNEMTM4MDRGNERERQorOjEwQkQ0MDAwRTI3RDJCMDhDQTkzQ0ZDMEY0OEQwOTdFNTE5RTlFMkVCMgorOjEwQkQ1MDAwQ0MzODQwRTY3MUY5MjE3OTg0NkM5NEE1RTk5RTQ1NTE2RgorOjEwQkQ2MDAwMDNEMkFCQjlENTEwRDc0RkYwNkZFMzFBQ0YyNTVBMDVFMAorOjEwQkQ3MDAwRjM3NjI2N0Q5RkRFQzdFNDdCNjNBMkJFNDI3QTQ5RTk2MworOjEwQkQ4MDAwMzkxRjgzM0M5MjRBNjJCQjAxRjI3MkNFQUJEMzNDRDdERgorOjEwQkQ5MDAwMDlCN0MwQ0U3NUNFRTc2NkY0N0UxQUU4QTZBNzQ4QzdGNQorOjEwQkRBMDAwNjQzQTcxRkE3RDFCN0Q1RUM1QkI0RUI4QTdFNDdFRkY4OQorOjEwQkRCMDAwRTJBNkJDREYxNEZBRDJFMkU0RUQwNzY4QUMxQTk1OTk2QQorOjEwQkRDMDAwREY2QjYxN0NEQTZDREFCNEY1QTIwM0U5RkY2NTFGNDUyRAorOjEwQkREMDAwRkFGRjkyOTIxNDk4RkZGREUxMzdGMzQ0RTRGMzQzMjMxMgorOjEwQkRFMDAwNzk2MzMwOUY3RjYwMjQ4RjAwOUZCNTE5QzRFRDQyMEVBOAorOjEwQkRGMDAwRTMwM0ZCNzZCODk3OEU3MDk0RURCRjdEQzAzMThDREY4NgorOjEwQkUwMDAwREJDM0Q0OEVBQUQwM0YzOEUxNjFFNzI0NjM3REQ2MzQwQQorOjEwQkUxMDAwNUM1NzdCNUYzMTU5OEZCRjJGODk4Q0NGRkMzRTU4MzNFNQorOjEwQkUyMDAwMDdDN0E3ODQ0MjE0RUYxREY0MTBFRTZCODg5MjI3QTE3OAorOjEwQkUzMDAwN0VBMERGRDQxNEQyOThFNzBDRDIxQkM2QkZEMTZGMjRFQQorOjEwQkU0MDAwMDJGMDQ5MUI4Q0M3NzM5QzJBM0U2NTM0MjFERjFDODI5QgorOjEwQkU1MDAwNzM1MTNDQzc2ODYzMkFDRURGNjUyMDIyOERFRkVGQjNCNAorOjEwQkU2MDAwRTJEODg3NzhGRUYzOUIwRDI0MDBERjc3NkVENjMzN0ExNQorOjEwQkU3MDAwOUZFRkQyQjM3OUY0NUJGRUEzQUYwOEVBRUI4MEZGNTJFOQorOjEwQkU4MDAwNjBBQjI3Mzc1RjNENTUwNEYzOUU2Rjg1M0E5Q0Q3QkQ2NQorOjEwQkU5MDAwQzVDMEU0NkZEREZEOTRGNTRGRTY1Rjg1NUY5Rjk1RjlDMgorOjEwQkVBMDAwNzM5RDRGQ0Q2RkM5RkMzQTg5NEY1QkJGMUI5RjdFMTVCOQorOjEwQkVCMDAwRTdEMzJBQjRCMzcwRUY3NUY5QzgzRjBGMTFGQjQxOTQ3MworOjEwQkVDMDAwOUZFQjI3MERGOUIwREZEMjNFQUI3RDA3RDRFN0VBNDMwNQorOjEwQkVEMDAwOEZFNEExNUUzOEM5REJFN0I3RURBNzVDQkY4OEY3RTA2OAorOjEwQkVFMDAwQjk4QTgyNDZCMjhCMjIxRkYxRkJCMjM4NDU1NjhBNjQ2QQorOjEwQkVGMDAwOUNBNkEyQkMwQUIxNTJENDQzQjBCNDg0RjdGQzlBODE4OAorOjEwQkYwMDAwMzQxREIyRTE3N0FFNUZFNkJFNUVCMDdGNTcwMkRGMEU1MgorOjEwQkYxMDAwNDk5QzFGMTVCRDU3NjkyNEJFNDM2OUQ4N0ZFMEI2MDYwQQorOjEwQkYyMDAwOThFNzU1MTg4RkRGNjdDOEYzNTU5NDhEN0IxQUEwOUM0RQorOjEwQkYzMDAwRTNFNDdBMzA0N0RFODc1MjdGNEZFNjdGRDIyQTUwQTQ2RgorOjEwQkY0MDAwRTM0QTEzQTdGQkIyRUVFODdBM0M0N0U5NzRERjZEQTgzOQorOjEwQkY1MDAwMzc1N0NDNzhBRjBERUQ1QUIwRjQyRDlCMEZGNzQ3RUM2NworOjEwQkY2MDAwM0FFQ0VGOTdFOTdFNzJGMTFGOUVEQjA2RTczNURGNkU1NAorOjEwQkY3MDAwNjFGN0RBNzA2MjVGMENFRkI5QTM1QzIwNzhFRkU2OEFCNAorOjEwQkY4MDAwMDVGOTNFMERGRTUzNEFGRkI1MTJFMkNCOEVENzNCMjI5OAorOjEwQkY5MDAwMTMxRTQ5NDNBRTQ3REQ1Q0FGQ0UzNUYyRjM5MzA4MTA3NAorOjEwQkZBMDAwQTk5MEU5NjM2MTUxNzVCQzlGNzI3RTQyNzZCMEZFRTY0RQorOjEwQkZCMDAwOEExN0Q4M0Q2REJCOUZDQzY3NzA4QTNDQzVDRUREREM0RgorOjEwQkZDMDAwMzY0QTM3QzEzQzZCMEQ5MjIxMERFOEZDREVCNEE2QURCQworOjEwQkZEMDAwMTcyQjA4NzlBQjA3NTQyNDFDRTQ0QzhGODlGOEZFMEExMAorOjEwQkZFMDAwRjA1MjhGOTVENTYzM0QwNUFDRkVBRjNEMjIyQjczNjdCNAorOjEwQkZGMDAwNzg3Rjg0RjQ2OTdDQTNCMzAyRTk3NUIyRjgxOUFGMEJCQQorOjEwQzAwMDAwRDZCOTcyQzZDMEU4NDA4ODhCRDE2OTlCQ0M3QjU3MjNEOAorOjEwQzAxMDAwN0E2MjgyRjZBQjgzMzQ0NDY4N0NGRjFCQUUxNTExMUYzNQorOjEwQzAyMDAwRTg5M0RGRTM3QTMwQjBCREZCQjc0Q0NGRDk1QjI3M0M1OAorOjEwQzAzMDAwNjIxQUYyRDU4NTNFQUNGQkJCRkZFNDQxRENGMDIxRDhBRgorOjEwQzA0MDAwMDlFNDJGN0Y5ODkyMDI5ODY3RkRCNTZDMzZCRTNEM0M5RgorOjEwQzA1MDAwNkExNDkxMEY3NEUzMUVBNDdGRTAzODI1Qzg5N0ZFQ0VDMgorOjEwQzA2MDAwMDlBNjNGOUY4MzczNDlCMEVGQkY3NTY2NzJCRDExOTlGMgorOjEwQzA3MDAwQUZFM0Y3Qjk4MEUzMTRGOUZFODdFN0ZDNjcwNkVBMkYyMAorOjEwQzA4MDAwNTNCN0Y4Q0U1RDc4OEZBN0Y1RUMxRTc3QjlDNjMzQUMwMQorOjEwQzA5MDAwMUFGNzcyMEVFNjI1Mjk3Q0ZGNTgyNkI3MzcxOTAzMTVDMworOjEwQzBBMDAwNzYxOEQ3MjRGMzZENzJGQjQzMzIzRjAyODUwRDg4MTM1NworOjEwQzBCMDAwRjA4NzAyRERENkNCRkNENTAyNDc5OTA2Nzg2MTdEOThFMgorOjEwQzBDMDAwNDYyRDIwQjcyRDExRjcyNTAxQ0I0RTRBM0U1MkU5MDNFQworOjEwQzBEMDAwNDIzRTRBQzBDOTUzRjFEQkFEOTYxRDM4NUY0NUJDQkUzOAorOjEwQzBFMDAwQ0UwNzkzMjZFMDlDRTZENjU0MzRBMjA5RUIwNzE4NUZFRQorOjEwQzBGMDAwQTUxNDk3RTdGQkJFMDFERkY5QzcwMEFGQzE3RDc1MDA0RQorOjEwQzEwMDAwMTAxMjgxRUZEQkFGNTVCMkYyRjJEMEEzMjJDQTg5Qzk3NworOjEwQzExMDAwMzJGRTBDREEwNTMyNEJDNzcwN0Q3QjQwOEQ2RjM2Q0IxQgorOjEwQzEyMDAwNzJCQkQ5Q0RFNUY5MjkyNzE1MTBGNzgyREVBQUM0NzNCMQorOjEwQzEzMDAwREIwQjdEN0I5MDJGRkY1OEZDNUVDNjA5RjhEQzY2OEMxQworOjEwQzE0MDAwNTYxMUVERUYxRDg4ODc0RDI4NEZCMDZFMjVEQ0NGNkI2MworOjEwQzE1MDAwMUFGQkJFRDdFRERBRTdDQzQ1Qjk3QTkyRjEzNzAxRkU4QQorOjEwQzE2MDAwNDZCRTRBM0VFNzBCMzJFRTUxRTQ3OUREODk0QjQ2QzRDOAorOjEwQzE3MDAwQkJGRUIwQjYzQzc3Qjk5RDJGRTA3RUZBMDlBOUQ3QjJENQorOjEwQzE4MDAwNzNGN0M5RjJERUJFOTczMjdBRjlGNzY2MzMzQTdENDYyNQorOjEwQzE5MDAwRjY3QTVEQzA5NzlGQzEzRTBFMDA1RjVFRjE3QTUzMzMyMQorOjEwQzFBMDAwNjFGQzE1OUYzNzM1MkIyRDJFRkYxRDdCNTNEOUI4RkUxMworOjEwQzFCMDAwRjI1NUQ5OUJBMDNFODQ3QzBGRTdCODFDNzY5QjkwQ0VBRAorOjEwQzFDMDAwMUJGNjcyQjk1M0Q2RkIzMEJBMkUxQkU1QTdDNjMwNkVFQworOjEwQzFEMDAwQjQ0M0ZCRjRDODg1MENDNDc1MzU0M0FCQjM1MUZFQTYxQworOjEwQzFFMDAwREFFN0NCMkU3RTFGRURERERCQjY1RUNDRTZGQ0EwMDdFQQorOjEwQzFGMDAwNzlEQTJBREIzMUZGOEVBODExRTlCRkI1OUIzMEZFMUQyRAorOjEwQzIwMDAwM0VGMjdFMDdDQUVGRTU0OEFBMTVFRERFNjdDNzUyMDM4NgorOjEwQzIxMDAwQThFRkFGMUM0RjA5RTk2MEFBMzZFNDc3RDA2NzlGMTlGMQorOjEwQzIyMDAwQzZFRTY2Rjg3MTQ4NkY0NUZGQ0M3RkZDRDM2NzUwMUVBMQorOjEwQzIzMDAwRkQ0NzQwMUE2MURFQUQ5MTQ3MjdEMEJFQjU0NTk2NUVGOQorOjEwQzI0MDAwMTJCMDdDRTVGQjk1ODdGNkVFOUZCM0YzMkFGNTRGN0JBMgorOjEwQzI1MDAwNEMyMkVBQ0ZDQjAyRDcxMzVCQzM4NzE5OUVERDdBRkQ1MAorOjEwQzI2MDAwNkE5NUQ3ODZFN0ZDQUY4NUE4Q0ZGQ0JGQkFCQTEwRjVCMAorOjEwQzI3MDAwOThGRkU4RDU4NUQ4RUU3RjNEQjU1MzBCOUZCQ0VGRDYzMAorOjEwQzI4MDAwMzNCQTJBRjZCMUU0QUMyMDI1RjZFQjk1RjlBM0E0Rjc2RQorOjEwQzI5MDAwQzlGQTUyQTA1RkNERTgxQUJCNUU4Q0I3RDc1NEU4QkM5MAorOjEwQzJBMDAwRDhCRkU2REREQUVDMkQ4OUUzNjI0MjNEN0U1RjMwNUE4RAorOjEwQzJCMDAwOUJCQTM5ODEyRjFGNzIxQjY0M0QwNDUyMERGQTY3OUQ5MgorOjEwQzJDMDAwNENDMzc1MDU4RkM3RjQ1NTU4MTcwMjMyOEVBMDM3MTgyNgorOjEwQzJEMDAwREUyNkEyQjAxMEZENzc4MkNFM0RFOThGMDkwQ0NGMDQ5NworOjEwQzJFMDAwNUFGNUExMEE2ODZGOEVFOTI0NzMxNUYzRUYwMzg5MzhCNAorOjEwQzJGMDAwODMxMEVGRjJCOTc4REZGN0U2REE3Nzg5Q0NERTkzMUVBOAorOjEwQzMwMDAwQUMzRjU0MTE0MjdCNEYwMkE2OTFGMjA0MUNCNDJFQTZGRQorOjEwQzMxMDAwOEJBNjAwREYzNDQ1NTJBMjg4ODdENkM1ODQwQkFDMkU4RAorOjEwQzMyMDAwRTNBMzBGQURBRjNEODI2RTI3RTBBMzhCODkzODA3RjAwMgorOjEwQzMzMDAwRDA0NTM1NUUyMkU5Qjg1RjA1MkZCRDg3QjgwQUYwNkM5RAorOjEwQzM0MDAwNEI1N0Q0ODBGNjBBNzA5MkFBRkZDNkE2MUY1RjQyM0ZFMQorOjEwQzM1MDAwNkM2M0I3RkE3QjQ5NENEMEFEODQ3Mzk2ODBCQTQzMzI5NAorOjEwQzM2MDAwRjRDN0Y2OTg1MDNFMTQ5Qzg5RjczNUE4MjFFRkZCNUQ4MQorOjEwQzM3MDAwRkNCRTE0MzlFQThERTlEODNERjRDNjVDQTY3MjI4OUY0QworOjEwQzM4MDAwOTVFNTY4RDBBQTIzMDE5OEJGMzdCMkZBMjBGQUU5QkQzMworOjEwQzM5MDAwRDdEN0E2MjJCRDdBQ0ZBRTIyM0I1MERFQUQyRTUzMDVCNQorOjEwQzNBMDAwOEVCQkZFNjM1M0EzMkRDRTFGOTNGNDg3OEJFQkM3Mzg1MAorOjEwQzNCMDAwMUVEMEI2NzNDREYyQkVCRTJGN0JCN0Q2RjVDM0IwNzcxNQorOjEwQzNDMDAwRTA1NzZGNzBFNTMyQkZCQTk5QzczREI4NUY5RDZDMjdFMworOjEwQzNEMDAwMTRGREFCQ0NGQjg0N0NDRjkzRjVFRjI1ODY1RkMwRkZDQgorOjEwQzNFMDAwNjVGQUY3MDk5N0M4RkE0RDhGMzQ2NDMzQkZGOEVDOUFCMQorOjEwQzNGMDAwNkMzMTZERjJGQzY1ODI1RDk3NjU5QjNDQkY4MkQ3RkMxQQorOjEwQzQwMDAwMDE2OUM0ODQ3RThDQTQ2N0YyRTk1RjQzNDMxNEVCNUU0OAorOjEwQzQxMDAwQ0E3MEI2N0ZCRDIxODRFRENBN0U2MjZCMjhFQkQ3NjhGNworOjEwQzQyMDAwQTcyMTMzOERFMzNGMDUxRkRFNkM1RjAwRUQyNTcxQkM1NgorOjEwQzQzMDAwQThFMEMyOTg5NzMyM0Y2ODhENjQ2MEVEQjkzMzdDOEY3NQorOjEwQzQ0MDAwQjg2QUYwN0M2NkY2QkQ2NjMxOUYxN0Y0QzAwOEZBNDdGQgorOjEwQzQ1MDAwNkI3RjRBMDlEMzAzMzI1RTU0RjgzMzE5NEY3RTFFMjk4RAorOjEwQzQ2MDAwOUJGNjRENzFBM0U3NjRCRTU0RTQ2QjQ2OTI1QzI4NzY1QworOjEwQzQ3MDAwNkE0OEI2RDMxRDY4QTcxRDY4QTdCRjM2QTIxQzRDODVBNQorOjEwQzQ4MDAwQkJDMTRFRUY3M0IxNzE4NDhENUZGMEFFRTBENUYyQkJFRQorOjEwQzQ5MDAwNkRCMjFDQkRBQ0RDNUJFQzBEMjdFRUI3OThDNEI2QTM0NworOjEwQzRBMDAwQkYzODk1RkRFQzk3NzFDQzU0RUQ0MzMyM0VGQzM2MzlFNAorOjEwQzRCMDAwM0UyQjlGRUZGQjkyRTNEODBGNDQ4RTZGRTIzRkEzRjYzMworOjEwQzRDMDAwMzlFRjc1M0JDRjIzRkY1QUY0OUQzMTI3Q0FEREFGMERGRAorOjEwQzREMDAwMkM2RTlERENFRjA5RDkxRTgzM0Q1M0REQ0Y0OEIxNTE1MQorOjEwQzRFMDAwODc3RThGQkY5NUM3MDE4Mjk5RTIzQkNDM0Y3OTUzNEYzRQorOjEwQzRGMDAwNzA5RUFERDcwQTE5NEVCQkVGNUEyNjJCODM4NTg0REI3RAorOjEwQzUwMDAwRDEwNzRCNThEQ0U2QkU5NzQ2MEQxMjhDNkZFRUEyRjNCNgorOjEwQzUxMDAwMzExRUQ0RENBQTNFNEYzMDU3NUE5QTE4MDcwRjE2MEUxOAorOjEwQzUyMDAwOUM0MkI5MEExQzJDMTM3MUZFMTYzQzJDQzY0MzVBMzM4QworOjEwQzUzMDAwNDMzQjMxN0U4MTcxOUM3OUY4REQxMkE3MDNBQ0QzMkU4OQorOjEwQzU0MDAwN0ZCRjRCOEVFRjkwMjQxQzcwNzRGODNDOEJGN0Y4MDc3QworOjEwQzU1MDAwMjk0MUY5MzU0NjQwN0ZBMDNFMzlDREUzMUQxRDExQUU3RQorOjEwQzU2MDAwMTczRUU5MzYzMzdERjI4OUMwQ0ZFMUVGQTZBMUVEMzQ2NQorOjEwQzU3MDAwOEUyMzJFNDU5RUNBNDMzOTlCODQyNzI0QzAxMzc5NzE4QworOjEwQzU4MDAwM0NEMUZFQzJCQjRDMUYyNkUzODdBQzQxQkU4RUJGNERFMworOjEwQzU5MDAwMUZDMjc4Q0M0OEYxNDI4QUY1NzZGMDA3RjMxMTI3OEE1QQorOjEwQzVBMDAwRTI0RjhBRjhCRTQ4ODhFOTE1NDkxNTI3Mzk3MDFCQjc0QworOjEwQzVCMDAwRkI5RjlGRkU3N0U2NDczNjBGNTE5MkNENzA4NzE0MkI3NQorOjEwQzVDMDAwQ0Y4QkUzOEU4REMxNjVDQ0ZFMkIzODYzRTNDQzUzMjMzOAorOjEwQzVEMDAwNDUzODlGOEMzM0FDRjA4QkYxQzM2NDlDRDExMTFFMzU3MAorOjEwQzVFMDAwQTA1RjMwMDk0RjI0RTE4ODBBQjczQTJFMzg1M0UwNzEzMgorOjEwQzVGMDAwRDY5OTExNkFDNTc4RDI0Qzk5OUU3N0Y0NUIxODJFRjZCRAorOjEwQzYwMDAwN0NCMDM5MUJFNTVDQjk5RkNCMERGQ0JFMkU5RkZGQzJGMQorOjEwQzYxMDAwODlFMzE2N0UyMDU4NTFERjFFM0RERkY1REIyMjVFMTdEMQorOjEwQzYyMDAwNEQyMjhFRUI0QTQ1M0ZFNEYyMDcwRkE0MjIzRDhGNDI5NAorOjEwQzYzMDAwNDk0MDVFNUYzRjI3NjhDNjBGRkYzRTFFMzdCRUQzOEQ2MQorOjEwQzY0MDAwRjZFRDYxMzk2RTJDODA3RDRCOEZDNzVGOTJDN0JEMjY5QQorOjEwQzY1MDAwOEYwQjgyOUJDMUUyOEU0Mzg0RjE2RkIwRDBCNzhDRDUzMworOjEwQzY2MDAwRjc5NTkyODMyQ0VFQzNGOUY1NzAyNEQzOEE3OEFGMTIzNAorOjEwQzY3MDAwMEVEQjBEN0FFMjFGMkRBNDE3RjMyQkMxNUNERjVCNENBMAorOjEwQzY4MDAwM0VGNkU5MThGRkMyNzg5Njk3MDkxQzEyOTlCRDQzOTJBRAorOjEwQzY5MDAwNjFGRUEzQ0EwODdCQTkyNjdDMzE5MEI3MzlGMkJEMTU4QgorOjEwQzZBMDAwODIxRjhBRjkxN0Q4Q0Q5QTFCNDBBNzRBMzkwRjUyNjVDNQorOjEwQzZCMDAwMjEwMkNFRkY5OEMxQjdFQjc2Q0NCQjBDMEJGNkVEMzg2MAorOjEwQzZDMDAwNDZCMDY3MzdBNDRGQ0VDNzAwNzdCMzdEMjk3OTE5OEE2MgorOjEwQzZEMDAwNzk5NzZGQzhDQjUwNUNBNzhBRjMxQkNCQzMxMDg5REU1OAorOjEwQzZFMDAwNDg4REU3NUZDODRGQkQyQzI5QjQ3MzUxMjc0MUJGNzNGNAorOjEwQzZGMDAwQjE4N0YwRUY5M0YzMjk4RjNCMzVGMjI5RkJEMEZFMzA2MQorOjEwQzcwMDAwN0RBQkNFQTdFRDlBRkQxQUUzQjdFRjlBNDczQkVCNTIwQworOjEwQzcxMDAwRTY0QjVFNUZFNDdFNjdEMkZBMEIzMjNGQ0Y2M0ZFQ0IxRgorOjEwQzcyMDAwN0Y3Rjk1QzFFQzU5RTQyQUIzM0I1N0M2NTM0ODhDQzU2QgorOjEwQzczMDAwRURDNjc4OUMzQTYyNjBGRUZBMTVGMDgzNzIxM0VDRDk2QworOjEwQzc0MDAwOTc0RTRFODcxMzExMzdFM0M3QzE1ODZEMkFGNjJGOTZCRgorOjEwQzc1MDAwRUQ2NUZGRDkzNUFCNTcyMjlGQzQwNDdCMDVEQjI1Rjc3OAorOjEwQzc2MDAwNkIwNjYzNDIwREM3MDc5M0U4NzREMEE1OTE5RjMyNTlCOQorOjEwQzc3MDAwQjgzRTRGRTZDRjQ2OTkzRjFCREQ5Q0VFRUVGM0RDNUYwMworOjEwQzc4MDAwRjE3N0YxRkM4MTU1OTYzNzdGMjc2NTdBRTU1NDcxMUU2NAorOjEwQzc5MDAwNTVFMkM4Rjk1QUY5ODVBMTcxQTY2NzVCRUVBNUY2ODA0NgorOjEwQzdBMDAwMzg3NTdFNjFCN0VDNjcyNEVCQTE4RUYwMjE3RTZGQzlFRQorOjEwQzdCMDAwNzFEQjdBMEZEMzNCQjcxQUI3MjVFODBEMkY4Q0VCRTk2NQorOjEwQzdDMDAwMDE0NUFGQ0NFNTcxREMzQkRDNTY3NkRFQUNDRUY5Q0U3NAorOjEwQzdEMDAwN0MxMjNGQkYwNjNEQzU1QUFEM0NERUU0N0VGM0VBNkVGNworOjEwQzdFMDAwMkQyRkQ4MjlERDVBQkYxN0E1NUI1Qjc3RjAxNkZCOUQ2RgorOjEwQzdGMDAwQkRDNTdFNzNCNEU0NENBMzVGOEVGM0Q2Q0VGMTg5NjZEQgorOjEwQzgwMDAwQkZGRkEzNzlEMEU0M0M2NzcyNUUzNDM5REY5OUYyRTY2QQorOjEwQzgxMDAwOTYwMEI2M0Q0QTFGMUY4RjIyNzUzMzhFMzQ1MTEwNTkzMgorOjEwQzgyMDAwMjFGMzA1MTNDQUM5OEFDNTNDMkZEMDVGNkIwQUVEQTc1NworOjEwQzgzMDAwRjFGQ0E4NDJBRjAyMEZDNzVGNTZEQjQ0MjAxQkU4M0M2NworOjEwQzg0MDAwNDM4QUQ1NjY4MzNDNUY1OTRDOThGRjcwQzVDQ0YzMDM4RgorOjEwQzg1MDAwNDRCMDE2MzZCMEZCQjMxNkFFMDJCRDFGMzQ2QkU3OTk3OQorOjEwQzg2MDAwN0U1RDI3RTNFOTI5RjRDOTEyOEY3MzNBQ0E4QjE1NzFFQgorOjEwQzg3MDAwQjlDNjNEMUU5NkUzOTRENjMwNjE3MTFCMjI4ODg1QUIwNAorOjEwQzg4MDAwRDhCQTYyMjFEQTlCNjk2RkYwRUYxOTUxMjJFRDY3RkI4QworOjEwQzg5MDAwMTI0QjU2MzExQzJEOTZFMEZFNzZDQkY5QUZBQzY1QjM0QQorOjEwQzhBMDAwNEEzMDVFOTcwNTc2MTdGMzIzNEY2MTlFODRGOTAxNTY0RgorOjEwQzhCMDAwRDY0RjU5RUZGOTVBQkVERTZFMDNBMTk4Q0YwQURDQ0VFRgorOjEwQzhDMDAwREY1NzkwN0ZCM0FBRjIxQjY3MENEMThCOUIyOENCNkZFRAorOjEwQzhEMDAwREM4MUZCN0Y1QjE3QjUxRDI4RTFGNzgyRjRCNTBENUFBQgorOjEwQzhFMDAwNTlERUU1Mzc4QkZGNjFCNjhGQURDM0YzMUREQkFDQkMwMgorOjEwQzhGMDAwQ0I0OUY0Mzc2MDFGREI4RTM5MThGRjM2OUY1OEZDQkJERAorOjEwQzkwMDAwRjU4ODBCQ0IwNTQ2RTc0OTc4NUNGNkIzQ0VDOTdFQTIyNQorOjEwQzkxMDAwRTI2NzhEQTFCRjk4RTA3NzJDQUZENTREQTU5Nzk2RDc0QworOjEwQzkyMDAwNkFDOEQ1NkVDQUZERTBDMERCREMwRjc2MThFRDY1OURFOAorOjEwQzkzMDAwMDlGN0I0QjY5NkYzQzNBNjI4OEZDNzJBRkU2RDk1MTRERgorOjEwQzk0MDAwRDJFNTAxMUQxQzBGRTlBMzI5NjBBRjFEN0Q3MzhEQThFMQorOjEwQzk1MDAwQjcxRDdEQzUxNjE2NUZEQTdDNDhBN0QwNUJFQkRFMzdDNgorOjEwQzk2MDAwRDU3MjNCRDI3RjdBOUNFNTI3MEUyN0U1Mjk5RkFGMzUwQworOjEwQzk3MDAwQjJGNjJDOTkxRjlGQUYyNTFDNEY1NTA4M0JEMTBDNEY4OQorOjEwQzk4MDAwRkI2QkFCNUUyQjNFREUwMkY4MUZGN0I3MjlDOEY3QUI5NworOjEwQzk5MDAwRTQ0MzVBQTJBMjFCRDdCOTMwMzJERTg3NjU3NTZCODk5MgorOjEwQzlBMDAwOUJDNTBGREIyNkZBRDA3RUZBQUY1RjNEQjU4NEM1MDM4OQorOjEwQzlCMDAwOEMyMkUyQUJFNDc5RTc3OEY0NkNGREMzMDg0ODkwNUUyMgorOjEwQzlDMDAwNEI4NTEwRjY3MzJDMTVEODdENjdCNTk4OTkzRjlFNjVGOQorOjEwQzlEMDAwMjBGQTM0QUMzNzcwN0I1NjVEOUZFM0M2M0E1OTkzQzk1MQorOjEwQzlFMDAwRUM3MUY1NjkzMTczOEIyREVFRUY2NzJERURDQTQ1M0E4OQorOjEwQzlGMDAwN0Q1QjlFNDg4OTFCRTRDRTkwNzYyMEJGN0RENzNDNTE1RAorOjEwQ0EwMDAwRkI5OUIzNDYzQ0Y3ODYzMTc1OUU0OEM5RkI0Qzk1Mjc4OAorOjEwQ0ExMDAwNTJGMkI0RkVGQTJGNTQ3OTY1QkYzMEVFQzFGODhBRTNDMgorOjEwQ0EyMDAwRDgwNTk2MjdGNjg3QTlCNUEwMjQ5RTNGRjIwRjRFMTg4OQorOjEwQ0EzMDAwMTk3REU1QkMxMUY0MzdFMkI4QzExRTlFM0YzQTAyRUIwNgorOjEwQ0E0MDAwNjMxOTg2RjM0QUIwOEY3Rjg2RjM2MjE5ODFGM0UyRjdBOAorOjEwQ0E1MDAwRTMzREIzNTkxOUVEQjFCM0YyNDRDRjIyNTYzQTgwNkQ5QworOjEwQ0E2MDAwMEFCMzMwRUYzNEMxRjI0RTJGRDVBQUYzMTY0QTVFQzI5NAorOjEwQ0E3MDAwNUVFOEZEMDVEMjI5MjE2RkMxRUFDOTc5MEJCRDg1RkJBRQorOjEwQ0E4MDAwQTNGRUQzMDZGQjAxRjhFRTNGNjM2MjdBRDYxOUQ5MzREMAorOjEwQ0E5MDAwMTM3MUQ5OTdBM0JFOTk1Njk2MDdDODY2N0VBNUMyMEY5MworOjEwQ0FBMDAwOTcyNUJCMzkxM0ZEMDFBRkREOENGOTAyQzdGMDI1QTMzMworOjEwQ0FCMDAwQzhGNDRFQjQwODlGMzI3NTA4MzEyM0ZBRkQ0ODA3ODkzRgorOjEwQ0FDMDAwRTEzOUE3MTlFOUZBQURGMUZERjBGRkM3RjdCRjRCN0NEQgorOjEwQ0FEMDAwN0Y1RTVDMkU5OUZFQThGNkVBQTRGRDU4OUU5NkNDNUI3QworOjEwQ0FFMDAwMTJGNDQzQkY5N0M3ODlGQkNCNEI5OUZDRURGMTk2NjZENworOjEwQ0FGMDAwNkU0RThDRTdENzczM0YyRTZCNjlCOTM5RjE3Qjk3QzdDMAorOjEwQ0IwMDAwQzA3MTFGMjU1RTJEM0RGNkY1RDRGQUY2NkIyRDdENEJEOQorOjEwQ0IxMDAwQTZDODBCRjRENzczM0RBMkM0RkQyN0U3MDlFQzZGOTZCNgorOjEwQ0IyMDAwMjdDNEZCMkZCRjBEN0MwQTdFRUJGMDUwMEFCM0U3NUZGMgorOjEwQ0IzMDAwMUU0QjM5ODBGOEJCQkE3RUYzQ0M3NEE4NTc5RjRCMjFBQgorOjEwQ0I0MDAwMjVEQzFFQTlGMjBCQ0RGNTNBQzk5Q0ExOTU0RjkwOEEyMAorOjEwQ0I1MDAwNzRDMEI3OTNGMjA2RjUzQUE2REY2RkU2MERFQTg1MEJDRgorOjEwQ0I2MDAwQUMyRUUzRjQwRDEzN0Y0ODJGQTE0OEZGNTAxMEZEOEMyRAorOjEwQ0I3MDAwQzNFREQ0M0U0QzI2RTcxMTYwRTIyMkIyMDg0RTUxN0Y0RAorOjEwQ0I4MDAwOTZFNTk1RUQ5REQ0MkU4QURGOUU1RkM4OTNFMzBDMUQzQworOjEwQ0I5MDAwRTE0QzNERjI3OUNCMUI4NEUwQkJBREM5Nzk4NjdBODY0NgorOjEwQ0JBMDAwRjdBQkM5OTNDMTVBN0M4RjU1QUVCM0EyM0Q0QjhFMTdEQworOjEwQ0JCMDAwMjA5RkEwRkQ0RjhFMTNDRUFCRTNGNzM4NEZDNjJCNjFGRAorOjEwQ0JDMDAwMTlERjU3Q0JCODQ0MTk5NzdDRkZCRDc1RUE3QzQ0NzJENgorOjEwQ0JEMDAwN0I5N0RDREU1QjVGREQ4RkY3MTc1OEExMjM2ODA3N0E1MAorOjEwQ0JFMDAwRUI1REE2RjI4NEY5NUM3NUZDMURDRDZFQ0M1QkU0MjQ5NAorOjEwQ0JGMDAwRTYyRDc4N0UyMjM5NUZBMUU4MjlDN0YwRDcxRUJDRkY1OQorOjEwQ0MwMDAwM0QxMTFFNEZGMjE3RjBGOEE2RTNCOEYzMzRDQTdEN0M0RAorOjEwQ0MxMDAwOUZEQ0RFRUU4MTNCOEUzMTFDNjVDRjI0RkM1Q0M0QzRGRQorOjEwQ0MyMDAwRTM1RTJDQ0U1MEJERTI4QjEzQTk0ODNGMkZEODJCRDQwNgorOjEwQ0MzMDAwNEI2N0NBNzdBNkExM0U1OTIxRDQ1MDkxQzVCQjZGQzY5OAorOjEwQ0M0MDAwQkYzMTNFQjVGQTlERDY2NTA0RUQ3RkUzRkM1MUE0N0I3MAorOjEwQ0M1MDAwRTM3QTAzN0I4N0E0RDhBQkQ1RUYzNDc5NzhGQkZFMUQ0QworOjEwQ0M2MDAwMTY2QzlGNERFRDY2MTFCRkQ3QkJGMEZCRjI1N0EyMThCMworOjEwQ0M3MDAwRTkyMzJCOTFEQTIwMzdCMTMzMTcwNTk0OTdEQzE5QkVERAorOjEwQ0M4MDAwOUZBMTdGRTQ2ODkwRTNFMEVCQjk3RDZEOEMzNDE4NDg5OAorOjEwQ0M5MDAwREE2NDdCNzdCMkY4NEJFNjQ3NUY4RDM4NTg3QzNCMUJGNAorOjEwQ0NBMDAwRjNBRkI2QjhCRDcwMUMwMzNCOTRGRTk3QjM0M0JENzU5QworOjEwQ0NCMDAwNTY0NkNGNzk2MDg3NzAzRjU5MEQzQzRGOTg3Q0ZGMkVDOAorOjEwQ0NDMDAwRjlGRUE3QjIyQjUzRTk1MUI0MjNCQTQ1NUM2RTY4NDExMworOjEwQ0NEMDAwRENGRThBRTg1RkRGMTFCN0MzRDYzMEQ0RjNCRjIxRUVBNAorOjEwQ0NFMDAwMkRFM0FDQ0MyOTcwRDgyRjY1N0U5RkYyRkQ0NkY4RkI3MgorOjEwQ0NGMDAwODk4MzFGQUFGQjgxQzRDMTY1M0Y0Nzg5ODcyQjdFNTE2OQorOjEwQ0QwMDAwOUE4QzYzOTUzMkREQzNFOUZFQkY3RUJGOENDNjUxRjNCQQorOjEwQ0QxMDAwRkQ3Mjk2RjZGQkU1MEQwMzE0NzE4NkYyN0U3OUM0NDgyOAorOjEwQ0QyMDAwOUM4NzcyRjBERDFFMjVEQjUxQkU0MzBEMENFNzhDM0M2OQorOjEwQ0QzMDAwRkJGQkJFOTdFMTdCQzcyMEI1QTJGOTY5MUYxODY1NzY5QQorOjEwQ0Q0MDAwQkExRDcwMERDMzQzOTE0Rjc5OUM2QTgwQkYzNzZEMEYzOAorOjEwQ0Q1MDAwNTM0OTJCMEVCQTQwQjZDRkI1MTI2MTdBQTM1RDdFRDc4OAorOjEwQ0Q2MDAwRTcxOUU0NzIxRDhGMTNGRDVDNDg4QzEzRjlDNTU4QUVBQQorOjEwQ0Q3MDAwRjI1RTMwQzRFRDkzRTZCQkJFMEUzMkNFREUwMzc2QjQ3NworOjEwQ0Q4MDAwNTI3QjE0QkUyN0M3OEQ5MkUzNDU0RkNBRUYwMEE3OEM5NAorOjEwQ0Q5MDAwMUI0OURGRURCRERGOUZFQUQyNzMzRTA2MTY1MEUyQ0Y5RQorOjEwQ0RBMDAwMDVCNTNDNEVENEU0QTMxNEU3MzdFOUJDNkRFQ0RERUZFOAorOjEwQ0RCMDAwNzE2QUQ1N0EzRjlBRUFFMTc2NjdCOTFDQkY3REQxQzgxRQorOjEwQ0RDMDAwRjlFMUM1M0IyOTdCNEZCRjlDRjAzOEVEOEJDN0Y5QkIyMAorOjEwQ0REMDAwRkExN0FCRjlCQjdBMjU1RUFCQkM5N0JGM0QxRUFGREQ0MgorOjEwQ0RFMDAwODNGMTVBRTU5REJERjI2RTlFOTAxMEJCODc4NkJEOTY3RAorOjEwQ0RGMDAwMjhFMjhEQzcwQzAzMDUyODhGQ0E3QkEzQTM3NURDREU1MAorOjEwQ0UwMDAwNTk1MjQ4QTc5NjdDN0U1NUU3M0M1QUM3RkFFOUE2ODg0RQorOjEwQ0UxMDAwNzdGQUYyM0QxQTcxMjA5RkVDQjcxNTdCQTZDNEU5QTIwMAorOjEwQ0UyMDAwMjc1Nzg1RDM1OTNEMTlBN0ZGQTVFMkI1NDdFQUM4NTQ0RQorOjEwQ0UzMDAwRkJCRjVGMUJBRjRERUE3N0YxMTZGQjlEQUJEM0EwQzdERAorOjEwQ0U0MDAwNEUzOTdFOTI0Q0RGMUU4RkEyODdBNzVCMTkzRkREREMzNworOjEwQ0U1MDAwM0ZFMUY5NUMzOUVFMzUyMkRCQjkyMDE1N0Y3NzE3Q0IzRQorOjEwQ0U2MDAwN0YxOTU4RkU0QkQxMzNDMTc0M0VGRkREQjI5RTUxQ0FDQgorOjEwQ0U3MDAwN0JFNTMyNjhEMDhFRDM3NEM5RUQ3MzBBQTU5NTc4OEY5RgorOjEwQ0U4MDAwOTUyRkE5RTM2NjczMDdENDcxQjM3OUUxMkM1NTdEN0VBNAorOjEwQ0U5MDAwRjQzNjU1N0ZDN0U5NTI1NTdCNEQ2QzhFQUFGRDhFNzNEMworOjEwQ0VBMDAwRDVBQUZBRTJCMTNCNTVGREVGRkFDNEE1QUFGRjY4NUMyQQorOjEwQ0VCMDAwMUQzNzVCNzI0RDFEMzc1M0Y4REIwOTFDOTEzOENFNkQ2MQorOjEwQ0VDMDAwRkExQjU1QkZBMjU2RjVCOThBM0JENUU3OUFEOUFEM0VCNAorOjEwQ0VEMDAwOTczMjZGNDk0MDdEQkVCMkEwRkE3QzU5MThEN0I3RkQ5MgorOjEwQ0VFMDAwRjk3MUZERjE1QTUxOEVFQjk3OTk3MURDRUVGQTcyMzNCQworOjEwQ0VGMDAwRTIxODNERTYzMUUxRkJGRjAwMURBREIzNjcwMDM0MDBGMQorOjEwQ0YwMDAwMDAwMDAwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDA2RgorOjEwQ0YxMDAwMDAwQkUzMTQ2MDYwRjg1MTBGQzFEM0Y5MTkxODM2RjMxMAorOjEwQ0YyMDAwMjNGOEY0QzBDNzk4MTkxODhFODMzMDIzMDNDMzNFMjAxQQorOjEwQ0YzMDAwREUwQUM0NkI4MEY4M0QwMzAzQzM1MjIwM0QwNzg4MjdGNworOjEwQ0Y0MDAwMDM3MTE3MTBCRjA0OEFENUIxNjIzNzg3ODU4RDgxODEzRgorOjEwQ0Y1MDAwMEQ4ODRGMDJDRDNBQzU0Q0JDRkQ4QTdDMDhGNjIxNUU5NworOjEwQ0Y2MDAwMDY4NkI1NDA3Qzk0OTdCRTYxMzBEOEYwMEM0MUZBRDk2MgorOjEwQ0Y3MDAwRjUwQzZBRDc2RUQxODFGNzM3MDhCMzhBMzMzMDMwNEE1RgorOjEwQ0Y4MDAwMjBGOEZEMTJBOEYyNkNFMjA4NzY5NjBDNjU3Njk1MDEwMQorOjEwQ0Y5MDAwRjUwMzAwMjk1MTI4MTU4MDAzMDAwMDAwMDAwMDAwMDA1RgorOjEwQ0ZBMDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJFRDdEMDk3ODU0NDU0MAorOjEwQ0ZCMDAwQjY3MERERUU3QjdCNDlCQTNCOUQ5MDk1MjU3NDgwMjA1MQorOjEwQ0ZDMDAwMkE0QkNCMTIwMTExM0IyMTg5MDEwMzA2NDQwOTI4RDJDNworOjEwQ0ZEMDAwNkMyMTg0MjQ5RDAxNjYxRTNFRkRGRjZFMDg0MkM0RDE3MworOjEwQ0ZFMDAwODk4QTFBRkMxOTVGODNFMDA0MDc5REUwQTAxMzlEQzBBNQorOjEwQ0ZGMDAwMzQ4Qjg4MzNFODA0QzcwNTk3Nzk1RjQwMUUyMDQyMTJCRQorOjEwRDAwMDAwQTMzOEU4RjNDOUFCNzNBQTZFQkFFQjc2Mzc2OUI3RkZGQQorOjEwRDAxMDAwRjk3RkZGODQwRjhBQkE1NUY3RDRBOUIzRDVBOTUzNzUwMAorOjEwRDAyMDAwNEYxNDlEOTUyNERENDBDODI1RjhBMUU1QUIwQTIxMjRDNQorOjEwRDAzMDAwMjU1ODc2NDg5REMzRTU4MUMxRjZCNTVFMTc3MTE5MDk3QgorOjEwRDA0MDAwNzlDMDZCQzI3MkJEMzc5REI4QUVBMENGNDdFQjhBRkNFQQorOjEwRDA1MDAwMTY0MkVFRjdEQUYxRjlFM0RFMTIyQzFGRjU5NjYyRjlDQgorOjEwRDA2MDAwODhENzhERkQxRUYyOTY2M0Y5MkI2RjBEOTZGNzdBOEI5QworOjEwRDA3MDAwQjBCRENFQkIwQUVCMzcyQTBCRDI2MDVDNDI1Q0E2QUNEQgorOjEwRDA4MDAwNjQ0MjNDMkYwRjFDQjk4MUQ2RDY2NzhFNEY5MDQ3RDM5MAorOjEwRDA5MDAwRkE1RkY1NDQ5RjQ1REYxQjJEMTdGOTg3RDIwNkI5QTQyNworOjEwRDBBMDAwMjg2Qjc0QjA5RjhBRTc4RDRBNUU1RjgwRjNGODU4MUQ0NQorOjEwRDBCMDAwRUI2N0FBNzkyRDNCNzJCRjJDMzI4NkUyMzk1NjQ2RkNDQgorOjEwRDBDMDAwODlBNTY0NzI3NjcyQzQ3RTgzMDFERTIzNDNEOTNDODlDQworOjEwRDBEMDAwRERGOURBQTBDOEYwQUUwNjc4MEYwREU1RjgyNURCMjdGQworOjEwRDBFMDAwMEY4QTBDQ0YwOUZEN0VFNUU0RjBEMjNCMEYwRjhDRENGQworOjEwRDBGMDAwNkYwQ0Y0QUI3MzcyNzg3RDdEQTYwMTkxQzcxRDBGRkQ5NworOjEwRDEwMDAwNjJFMDEzQzU4OTEwNUY4QkQxOUY5REY1RkRGOTQ1NUNFOQorOjEwRDExMDAwRjQyRkM1QTc2M0FGNzlFQjA2MDlGOTM3MERFOEI0RDY0QworOjEwRDEyMDAwQkVGQ0NDMTYzQTRFN0JDQjMwQTdERTQxQzg2NzJFNjdEQgorOjEwRDEzMDAwODJERDEyMTNERjZFODE3OUM0QzBCNzUyMTgyNzA2QkU5NAorOjEwRDE0MDAwQ0Q4RDkxNkYwQkEwNUYwQzdDNUIwMkZENjJFMDVCNjU5NworOjEwRDE1MDAwOEM3Q0ZCRDk0Rjg0NkZGNzAyMUVERjgzNkYxQjYyRDQ3OAorOjEwRDE2MDAwQjc1RkM1QzhCNzhEMzFGMjZENTM4Q0ZBRjY2NDhDN0MwRAorOjEwRDE3MDAwN0IyQTk0NkZFQTczQjVEQzQxMjRCNDhCMzcyQTI1M0JCNAorOjEwRDE4MDAwQTA5RjI3QjNDRDM2MjBFQjI3QzFCRjNEREY1M0VGRjY3RAorOjEwRDE5MDAwQzdDOEJGNTc2M0U0REYxMUEwNEYwQ0ZDM0IxQTIzRkY0NQorOjEwRDFBMDAwREU4OTkxN0YxRkM0QTg3NzZEQjhDRTU4RTRBRkRBODZDOAorOjEwRDFCMDAwMTBGQ0I5MzQwMEZFQjVEODRGNURDREVCN0FDMDNCODk4OQorOjEwRDFDMDAwOTA4QzcwMzk1MDRCQ0E1MTk0MDc5OUI4REJEOUJBNTUzNQorOjEwRDFEMDAwRjBDREE1MUM0MjU2OThFODdGRTlGQkJFM0MxMkQwRDNBNworOjEwRDFFMDAwRjE3RDM2RTJBRjk1ODRGRTlGMDM5RTg0RTQ3RjczMjkzMAorOjEwRDFGMDAwNTVFOEVGRDM0NUVDNEY3NEQwRkUzMEM4MTVFNUZGNjYxNworOjEwRDIwMDAwRUYxMDJDRUJCOTFDNkQyRUQyQTEzQ0Y4OTIwRDI4NUZDQgorOjEwRDIxMDAwNEY3ODlERDhERUUwMUQ4QkU1NjM1QzJFMzc3MjM5N0EzRQorOjEwRDIyMDAwMDBFNEVFMEE5MEMzNTIyRTU3NENFRTA4Mjk3MTk0NTMzNQorOjEwRDIzMDAwQkE3NkVDODkyNzFCMUMyODU3NjYwOUYwOTQ5OUJDREQ0NworOjEwRDI0MDAwQkJFN0NBQUQxQjI4RkNDRDM1QkEyQkI3ODVDOEQ5MTNBRgorOjEwRDI1MDAwNDVBQTdDNTFDOTRDMEVGNjdCQTJGQzg0NkRDMTUwQTQzQQorOjEwRDI2MDAwQjcwREUwMzQxNEVCRDQ3RUJFRDA3RTBERUVFRTdFQkQ2NQorOjEwRDI3MDAwQTBERjYzQzU1Q0JFNjQxMjA4MURGN0IxRDJFRTdFRTk4MworOjEwRDI4MDAwMTJBNUNCQkQxMjI5NkRCMjg0RjM2NThBQzRGNDk0MkEyOQorOjEwRDI5MDAwMEFGMjQzRTZGNEREOUY3Nzk2QjREMUY3NkRGNjkxNjkxMworOjEwRDJBMDAwODQ5NjRGODI3RUEyRkUzOUIwNTRERkFGQTc3NDc2NTNDNgorOjEwRDJCMDAwN0E2NDFBNDk0RDEzRTA0QjVBMjU4NUUyMkI4Rjc1MjQ2OQorOjEwRDJDMDAwODIxQzNEMzRDRTQ1MjQyQjIxRkRBMTlEOEVERjY3NzQ0OQorOjEwRDJEMDAwMUJDOUEyNjVFMkY4MzYyMjBEODM3RUI0OURENjUzNzgzMQorOjEwRDJFMDAwN0JDNjUwREE0RUUxM0MwNEVERDY2MDdCMkE2RjRGNzM2QgorOjEwRDJGMDAwRjBGN0FGNjNFRDBGN0IwOThFQUZGNkJCOEZGMkQ5NEQyMAorOjEwRDMwMDAwRjE1QjQ3RjFDNUU3QzVDNDA1NzQ5NDI5M0JGRDIxRjNFMgorOjEwRDMxMDAwOUYyREU5NzFERTk1QkM1NEYxQkYyRkZCNTRDNkZDQTFEMworOjEwRDMyMDAwNDE3Q0NEODMyRjY2Q0MwRkMxRUZCRUMxNzNCMEFFRTI5RQorOjEwRDMzMDAwNjNCRUEyMTJFQkZENTdGNUE2OUUxOEQ3MDcxMjRFRTc2MworOjEwRDM0MDAwRDQ5OTAzODQ3Njg3RUM0NDNGQ0Q3MTQ0NEY3Qzk0NUYzRAorOjEwRDM1MDAwMEUyQTlFOTFGOEYzMDUxNUU3MUY1NEZGNUM4QzFFREEyOAorOjEwRDM2MDAwRjZCQjM1NzQ1ODk3MjFEMkMxRDA1QkE0QzNCQURFMjI3NAorOjEwRDM3MDAwMUQwQzdEMkU0Rjg3Mjk5MjAzRTE0N0EzODczQUVFODY0NQorOjEwRDM4MDAwMkJDNTcxRTNBRTEyQzdERDcwOTUzODZFRENENTNGQ0M4RQorOjEwRDM5MDAwQjhFQkZCODlFMzFBMzNDNTcxRDc2NzhBRTMxQUZCN0ZDMQorOjEwRDNBMDAwQkY3MTg5RUNBNDBGOTlCOTIwMEVGODY3OUU2MERGMkUzQgorOjEwRDNCMDAwMTBGN0MzQTBERjYwRTdGNEM5NDEzQjI3REI0Qjg4REJGNAorOjEwRDNDMDAwMTJFNDI3OTFFOUNCMzlBMTcwRUUxNEVDMkE4NUYzN0ZBMgorOjEwRDNEMDAwMzgxQ0Q3RTVFMUQ4MzU3MEU2NkFFMTZDRTM3MDQ4QThGRgorOjEwRDNFMDAwOUQwRTgzNDNFRUQwQ0VFM0I3RkNCRDgwMkU2NDdDQkFBNQorOjEwRDNGMDAwQkU5MjEyNkJFODdCNEVDREY4Qjc2QkM3REYwRDc2MEM5MworOjEwRDQwMDAwRTZBMUJCRUNGODBFMEQ1REU3NjhGMUQ5QzNFMTEwRERENAorOjEwRDQxMDAwRTVFODQxRUMxQTM4QjNCNTcwMEU3MTM4MDFFOUIyNzAyNQorOjEwRDQyMDAwNEFCNUYzNzg1REU1QUIyNEFDNUY5NDFFQzM4MkVGNzUxQgorOjEwRDQzMDAwRTQ3NTlFNDIzRkU4NDVDNUIxOURCNjRCN0ZCMjA2NkU4RQorOjEwRDQ0MDAwQTBGRDhGNkM5MUZDNDY1QTBGRUM4REM3RjVFM0ZDQjYzRQorOjEwRDQ1MDAwRTk1OERGNzc4RDExRDc4OUYzQ0VDOTdFMjNCNTI3OTM5RAorOjEwRDQ2MDAwNUU3OERCMDZGNkE1RUEwNUJEMEM3NUREREU4RjZENkQxOQorOjEwRDQ3MDAwMTQyRjhGQjFGNUMxRUJFOEYzQ0UxN0Y0NjQyQjRBNjM5OAorOjEwRDQ4MDAwQTEwRUU4N0U4QUNCMjY1OUM1RUE2NTY2NTZBRERBQjJBQQorOjEwRDQ5MDAwRUY0RTgwNUJERTZDMjQ2NjBBQTdFQUE1MjVEM0FFQTMxNworOjEwRDRBMDAwRjUyNTg3MTUwMjVEQUFCNkFGMzZGNEE2RjVBNTdFQTlDNworOjEwRDRCMDAwMDlFQTFENzlBNDFDRjQ2OUNEREVGRjZDODdGNUU4RkM1MAorOjEwRDRDMDAwNkUyNTFCQzYzRjRCRDcwOTA3QjVDNzQ3QUNBREE5MzM3RgorOjEwRDREMDAwMjkxRTE1RkU1RDg1RjA1RUM1NEVDOTQ5MkQxQ0M1NzcxOAorOjEwRDRFMDAwRkJBMTBDQzA3Nzg3RTQzNDUyN0EyRjZCOEMyNzBFRDVDMgorOjEwRDRGMDAwREVEMUJGQTc3NkVCNzFGRUNCRTlGQzA5ODVCNzg0RDRGQQorOjEwRDUwMDAwMTcwMjNEQUI4MDM4MzBCRUQzRTgzNzRCNDE3RDNCRUI1MworOjEwRDUxMDAwM0Q4Q0UzQTlGNUFBMUQ3NDNDRkE3RUY1NzM5MjEzQTYxRgorOjEwRDUyMDAwNUFBRDIzNkVDMEIzRkQyNTczRTk1MzE2OThFNzZBQzM1RAorOjEwRDUzMDAwNjAyQkNDNkZCRDAxRkEyREYxQ0Y3RkQxRUMwMDNDQjc1MQorOjEwRDU0MDAwMTgwQTAxREZDRDVCMEM2NTQzODE3RTY0NUVDOTUwQzA2MworOjEwRDU1MDAwRUYyRjIyN0UwRDdBMTdDQzc3RjkzNUM2QUQ3QUUwQTc4QQorOjEwRDU2MDAwMjUzMDY4ODYzNURDQ0U5RUE1RUI5NTIzNjRGREFDMjA4NgorOjEwRDU3MDAwQ0NFRTEzRDk2Rjk4M0UyQ0Y4RkMyNTdEMjJDQUMxQjI5RgorOjEwRDU4MDAwNDYzRDcxODREQTBEMkUxRkJFQTM4NEY5MzE3QkFDRkVCQgorOjEwRDU5MDAwRUQ1OTQxM0UyRUI3NzM3OUU1N0M1QzlFQzhGOTJBNzczOAorOjEwRDVBMDAwRTZDQzE4MTY4RUNGODNDMDE3MjNGMzhGQTA3Qzk4QUVERAorOjEwRDVCMDAwOUIwRUY0N0YxQzQ4QkZDN0E4RkZFNDQwRkZDODg5Q0Y3QgorOjEwRDVDMDAwOUZBMDdFMTI5NDlCQTk5RjA0RTU5M0Q0NEY4MkQyNEZEMworOjEwRDVEMDAwRkQyNEU4Qjc5NUZBNDk1MDZFQTM3RTEyM0M3RjlBRkE3MworOjEwRDVFMDAwRTc1MDM2NTJGRjFDOUUzRjQzRkQ3MjI4Nzc3QTdERjg0NAorOjEwRDVGMDAwRkMzOTZGMUQ5NjREREU3QTJDOUZGNzM2NjBCOURCRUI1OAorOjEwRDYwMDAwQzc3RTJGN0ExQkIxNkNGNjM2RTFGMzk3QkRDRDU4QjZDNQorOjEwRDYxMDAwNzgwMzU4RUUwNTNFRDMzMkUwNkRDNTcyQkZGNzE4OTYxOQorOjEwRDYyMDAwMDdCRDZERjhERTIxRUYxOTJDN0ZDOUU5NkU5QjQwNzJCMgorOjEwRDYzMDAwNjUyQTJGMzYxN0IxMDM5QjkyOEE1REI5RTBBRjI0OTUxNgorOjEwRDY0MDAwQjA3QUVBMURCRTVDMDNBREE3QkE2OTlERDJCMTc3NjUxOQorOjEwRDY1MDAwMjBENzQ4RUJCRDZCNTg3QkU2M0QyNENGNDRFQjk5M0U4OQorOjEwRDY2MDAwRDYzRUUwOTdBRTNDMzNBRDBGQTg2N0VEODMzN0ZCRjJCMworOjEwRDY3MDAwRTI2ODdEQjA5RkI1NUZCNTMzOTAxNzRGRUI1NzM1QjE3QQorOjEwRDY4MDAwRjZFMTJENjQ5Mjg1RDY4NzA3NTg3REU0MTFENzI0MkJDNworOjEwRDY5MDAwQUQ4RjZDNjVGNTlDMEY3RDkzNkNCNDlFRDNDNkRFMUY3OQorOjEwRDZBMDAwN0YyRTMwMjk4MUQ2Qzc3N0IyRjY4OTVGOTM3QzNCQUQ1OAorOjEwRDZCMDAwNEYyNDEyRDZGMzJDQjlGOTg5QjQ5RTY3NjdGNUMyQkUyMAorOjEwRDZDMDAwRjM2NTQ3ODRGNTdEQUZEMkI2MTA0Q0RBQ0Y3NTM5QjkyMgorOjEwRDZEMDAwMzJGNTEzRjYxQURBNTY4MEM5NURBRkJCMjE1NzFFNDdFMworOjEwRDZFMDAwRTlBNzkwNDVEMEJFNDk1N0M0RUEwNkIyMTJEQTdGQUIyQgorOjEwRDZGMDAwOUI4RUY1RkQ4QTAzREJGN0U4RTZCMEJBQzE4MUVEN0ZDQQorOjEwRDcwMDAwRDUyREM0RkE0MUM1ODVFREM3NzU5NUFDNkU3MDYxRkIyQQorOjEwRDcxMDAwNjdCQTlGRTM3ODg3MTQzN0I2MkJGQUZGQ0RFQTA2Mzc0RQorOjEwRDcyMDAwQjYzRjJDQUZDRkNEQTdGRDJCRjU2RThGOEVDQTc1QUQ1MgorOjEwRDczMDAwRTQyRTI3MDM0MTVFOUJEMkMxMUVBRUUzN0VFQjJDOURGRgorOjEwRDc0MDAwMDNFNTdFNUQ4NjAxRjU2Q0VGN0ZFNTNDODU3QTA2M0Y1QgorOjEwRDc1MDAwQzk1MDJGN0IxQUZDNUUwQTY3MTVDMjUxMjgxQzdEQ0Y2OQorOjEwRDc2MDAwNzAyNjdFMzM1NjgwMzNGMTlCNzIxNUNFNkE4NDYzOEVBOQorOjEwRDc3MDAwMERDRURFNkZDNjhCRjg3QzUzQTFDMkQ5QTBBM0Y2QkUzNgorOjEwRDc4MDAwRDYxQURCQkMyNjVFOUEyMEUyNzNBOTUyODVGMzA4RTIyMgorOjEwRDc5MDAwOTMxODFCM0UwMUU1NUEwMTRFNDA1OUEyQzJEOThDNzAyNAorOjEwRDdBMDAwNTI2MkMzQzc2NTE4MjdDMDcxMTk5NkFBNzBCNjIzOUMyOAorOjEwRDdCMDAwOENEOEUwMDQwQ0Q3ODlGODE4OTZBOTcwOUU0M0ZBRjQyNworOjEwRDdDMDAwOEI2RDVFMkVFM0Y1MjIzRUM2MkExNUNFMUYxMDlGQUM1MAorOjEwRDdEMDAwRDhFMEVDQjc4QUY0RDk2RkVEQTY0RjAwRTE2NEM3MzYwNAorOjEwRDdFMDAwQUYzQzlCNDg5RjNDNUIzNzdENUU0MzM4NTdDNjA2NjcxRQorOjEwRDdGMDAwQkY0REE0Q0Y3RTVCMzc3RERFNDQzOEMzNjI5QjU3NUU0RQorOjEwRDgwMDAwODI0ODlGQkM4NDZFRkE3QzgwNzBBRTg5MEQ5RjgzMjkwQworOjEwRDgxMDAwMjI3RDBFQTY3NEQzRTcyNEMyMTkxMzFCM0VGOUE5MjI1OAorOjEwRDgyMDAwN0RGMjUzQkJFOTczMUVFMThDOEIwRENFQzE1NDkxM0U0QQorOjEwRDgzMDAwMDc1M0JCRTlGMzA1QzJCOTNFQjY3OUU1QTc4OUY0QzkzOAorOjEwRDg0MDAwNEZFQkE2Q0YyNTg0OTNFQjZFNDQ3QzA4ODU2MzhEMEU0OQorOjEwRDg1MDAwRTc1MDNGOTEzRTg3RkE3NUQzQzdBNDA3MzgwNTE0Q0UyOQorOjEwRDg2MDAwQzA5RUUxMTQ2NjhBRjQyOUNDRUNBNjRGQTIxRUY0NjI5NQorOjEwRDg3MDAwNzI2QzcwMEU2NThBRjQzOTk0RDk0RDlGREU4OENGRDRDRQorOjEwRDg4MDAwRDhFNjU1RDg1RkE0NEY2MTdGNDYxRjhGQjE3MzkyMURCNAorOjEwRDg5MDAwRkNDNjQ0RTJEQzRBNUY5OTk0RkNCMzgzQjBFRTI4MTZFMAorOjEwRDhBMDAwRTIwNEIwNDdBNEMwMzY4MDRGRDc1NkY0NEI2NUE3RUFEMAorOjEwRDhCMDAwMDczOTA5RjhCOUM1MzY4NzEzRTIwMTdBRDVERjIxQURGQQorOjEwRDhDMDAwQjgxRkIxRUM0QzE0RTI0RDJGRTlGMzg2MDNCRTU2RUFDMworOjEwRDhEMDAwMTU4NkZBM0QwOTYzRTMwNDdGMkJEMTk1MjRENDdCMTU4QgorOjEwRDhFMDAwRjUxNkZBQTc5NDBDMTBEQUQzNEFBRjEyREEzM0RDMjMxOAorOjEwRDhGMDAwODU3QTlGRjJGMTQyRkY3RTM1Nzk0MkJERkZBQTI5NDIyNworOjEwRDkwMDAwRkYyQ0RGMENBMTNFQjA2RThFRDAzRkJCN0U4MUQwN0U1RgorOjEwRDkxMDAwNDU0Mzg1RDA3RUE1N0ZCOTUwQkZCQUYxNUY4NUZFQzM3MAorOjEwRDkyMDAwOUFENjA4RUQyMzlBMzcwOEVERDcwNDFFMTZFQUEzMEVGRgorOjEwRDkzMDAwM0YyMUY0MUZEM0JBNTU2OEJGRjZEODMzNDJGQkI4QjZCRgorOjEwRDk0MDAwRTc4NUZBNzU2NzVFMTZGQTVGREZCOTVGQThERjcwRjFFOQorOjEwRDk1MDAwQ0Y0MkZGNUNGMjM3QTEzRUM5RjQ4MUQwQkZDMEZFOTEzNworOjEwRDk2MDAwRDA3RTYzRkEyNzFBM0Y1NjhDNUZENEU2MTJFNkNGNjY2NAorOjEwRDk3MDAwMThEMDlGMEQ1ODBENTgzN0VDMzVCM0ZEMERENDkzMjFCOQorOjEwRDk4MDAwMEU1MThDNzVDM0ZFODU4RTY0ODgwNzAwMDBFQTRGRTQ1MworOjEwRDk5MDAwRjYyRUJGMDJFMjU1QkYxOEVGQkUwMkUyQjhCRjMwQjhBNAorOjEwRDlBMDAwNDdEODIzRjg0MUVEQjJGQjFFM0RDNjEzNUIyNTkyMEUwRQorOjEwRDlCMDAwQTU0MzA3NjU5QzlFQzcxMzhDNEM3RUQ3NjdFNTNDRTU2NQorOjEwRDlDMDAwMEJEMTgzQkE3RUQ0QkZBMEY1RjU3QThBQzc5OEEwRkVBMgorOjEwRDlEMDAwQUNFRjU3OTYzRTNGNjQ5Qzc1RkQwQ0E1NUI4N0IyRTdBNAorOjEwRDlFMDAwMEIyRDMwNUVDOTdEMzA5RUM3RDAzOTE4RjBEMjhFNjNDMgorOjEwRDlGMDAwMUMzMDU2MThDNzk0NTk4RUUzNkM4NDcxNTI4MkUzMTgxOAorOjEwREEwMDAwMzNDQjM1RTM5ODRBQjdGMkU3N0M5Q0M3NDA2RkEyOEREMQorOjEwREExMDAwQjM3RUMwNzg3MTNFOTkxNTM4Q0UxNkNEMzhFQjMzMkJENgorOjEwREEyMDAwMzRFM0M0QjFGOUQwRTc3QzlDQTcyRTM3OEU3MUUwMDRCMworOjEwREEzMDAwNzEzRUZEMkI3MTlDRTdCNEYzRTk1RkE5MTlDNzgyRTMzRQorOjEwREE0MDAwQzA3MzE4ODdGNEE1QkI5ODM0Q0E2NzYzNjcxOUNBQzE0NQorOjEwREE1MDAwOUZDQzE4MjczM0Y0QTlGODBERDRDOTA3NjY5MjBERTNCQgorOjEwREE2MDAwMzhFOEI4QjQxRjE5OTI0NDg1OUE5MDdGRDEyNzIxN0Y1NgorOjEwREE3MDAwQkU4OEEzRkMwRjg5QTcwNUY3RTMzRURDRDcyRkU2Mjg3NQorOjEwREE4MDAwMTIzRkM1ODhFRTkzQUFCOTZDMkVEQTM5M0Q3Mzg1ODNBRgorOjEwREE5MDAwOTZDRDA3MDYzRDAyRTM2Q0I0M0FCMzY5QkRCRDc5OTJGOQorOjEwREFBMDAwNjE2MTA0Nzk1QTVDQUY5QzZBMEI5MUYzRUVGRDU5MUVEQgorOjEwREFCMDAwMTk1MjQzQzc1RjExNjc0NzdDRDRCQTVBMjZFOUM0RTdCNQorOjEwREFDMDAwMjdFOEJFOEJEMEZEQzk4Nzc0OUY0MkU4N0VFNTIzODU5OQorOjEwREFEMDAwRUQzM0ZGOURFRUNGQTBERTQ2Rjc2N0QwNEVDODZBN0NERgorOjEwREFFMDAwRUYwNDhGMzM5RkY4QTVFNDA3N0E3RjcxRDdDRjE0NUNEQQorOjEwREFGMDAwMjc3Q0U0QURGNDU0ODgyNkIwOUY3OUFCRTIyOTEzODJFOQorOjEwREIwMDAwRjhDREY3RjUxMkVBRDQxQ0Y3RDFBNUUzQkUxNkUzMDc2QQorOjEwREIxMDAwOUQyRjE5RkQ1QjgxQUU3NTdEMjg0RDc5QkYwMTg0QkNCOQorOjEwREIyMDAwQkI3N0VBMjFDOTg2RDUzRUJBQjE4NENDQUM5OTVFOTA2OAorOjEwREIzMDAwODY1QTI0RjU1QjRFRjE5Q0IxRkIxQTg1QkU0MURBOTVGRAorOjEwREI0MDAwQjYzQjlEOTYyMDVDRTI1MjRFMDA3RDRDRjQwRkMwQjk2RQorOjEwREI1MDAwQTU4OEQ2NDNDNkJGQjU0NEFDQ0YyMjcyQjA0RUY5N0Q3RQorOjEwREI2MDAwNTIzRjgwQjBGODNGMUZEN0UxNTI4MEFGMjU3NDhFMTkyNQorOjEwREI3MDAwOTRENUIzQTAxQzA5Q0QyQzVFNTM2QTY3RUZBQUY4Nzg0MAorOjEwREI4MDAwMTYyQTI0ODBGQjZCNUYwQUM0QjE4OTJGMTlGQkNENTE4MworOjEwREI5MDAwRjdDOTFBRkM0QTE1OTNBQjg0RDJCNTc0QkUxRUU5QUEyNAorOjEwREJBMDAwQzVGN0ZEQkRGMTJFREQ3MDVBRDYzREEyNDA2OEI2MjdGRgorOjEwREJCMDAwRkM2N0JCQzU3NjUyQ0VDNjUzRTlBQUNBQ0IyOUNFREZENQorOjEwREJDMDAwMTNDMDdGNUE5RTA2RkU1M0JDNEY3MkZFMDdFNTk4RjFDNAorOjEwREJEMDAwREY2Mzc0NEYwM0ZFNzc2RUQyMTNFNDE3RTdGQjZEOUM4RgorOjEwREJFMDAwRUY4QkVCNDVCRURGMDZFNzcxQjRGRjZEMkJCMzU4QkM3RQorOjEwREJGMDAwQTlBMTk3QzA1RjNBNzE5MTBFRjUwRjE1NTBCMzFBODYxRgorOjEwREMwMDAwRkZERkI5MUNDQ0E5REJGNTBBQjBGN0Y2NzJDREZDMzgwMgorOjEwREMxMDAwMUZFRUU0N0M5OEFCQTFDNzZEOUM2RjczMzlERjk2MTA0MworOjEwREMyMDAwREZCRDE5MThCRkYwMkIxMEQ3OUI1RDJFMTFCMDE3OUVDQQorOjEwREMzMDAwQkI1NUJFQjUwOTdDNzNBQjdDRDNFMDdCMjdFN0RCOUQ4RQorOjEwREM0MDAwNzczMUJFNjlGMTZFRTM3QzZCNkJGODRDMjEwM0MyRjE1NgorOjEwREM1MDAwRDZFMjM5NkY5NTY2NUUzRTJEREZFQUI5NUNEQTBERTBGQgorOjEwREM2MDAwNEY0RDc3RTVBRTM4MTlEMkZGOTZBMkM5MkI0RTg2RDgxNAorOjEwREM3MDAwODU1QjRCQTYwQkY1NTlBNUIzODVGRUIzRERGMzg1RjZBMQorOjEwREM4MDAwREJDQjk3MEFFRDczNkI3RTI2RDRFN0FEQkE0QkU4M0Y0QQorOjEwREM5MDAwREZCNzVBNjg1RjU4Nzc5RkQwQkVCOEZFMjFBMUJFQTRGNworOjEwRENBMDAwNjE5M0QwN0ZBOTdGOEJEMEJFQUM3MTg3RDA1RUQ1QjQ5NQorOjEwRENCMDAwNEJBODdCOUE1RjEyRkFFQkY2NUU3OTMzQzhENzkxQjcxRgorOjEwRENDMDAwRjUwNEUyN0QxNzlDQTczMUNFNzhDMUE5MzhBMUNGNDlEMAorOjEwRENEMDAwQUYwM0U1Rjg5NDc3MDg5NjY3QkM0RTk0RjNCM0RFQjFEMgorOjEwRENFMDAwNTg1NjgzNEM4RTAzM0I3QkMwMDJGMTUzNEYxQ0I1RkI0RgorOjEwRENGMDAwODk3NDFEOTdDN0FEQTk5QjAwRUIwRDZEMUY0RkM4QkY2MQorOjEwREQwMDAwQ0EzN0FDRjFGNUE1NUEwMDcxNkY0QUZGRTIwNjAzMDk2NAorOjEwREQxMDAwOEMyMjU0QkE3Qjc3Q0I3M0E3M0VBNEJEQUQ4N0Y2MDZBMQorOjEwREQyMDAwOTkwNDdBODVCNzE3Qjc0NTdFREUyMTc1MEVDRTgwQjg4NworOjEwREQzMDAwRUM3QjQ2QjIzRDI0REUxODdFREU0MkZBODA1RjExQURGOAorOjEwREQ0MDAwRkQ5QzhFOTQ4NzlFRjc2Qzk1RDkzOUNGMTE3RERFNTY1OAorOjEwREQ1MDAwOTlFMjU1Njk2MEZBNUZGOTdDNDYxRUIxNDEzRDMwQjhFMQorOjEwREQ2MDAwQzY3Mjk5RjE5QTI4MzI2OUMwRTc4MTgyREUyRjY5QjhCQworOjEwREQ3MDAwM0FBOEU3MDRDNjYxRjY3NEE5N0Y5NEYwN0M1OUUzNzU2QworOjEwREQ4MDAwQzI3QjZGNDhFRTJEODBDN0I5N0Q3QTVDQUY0OUUwNDAxOQorOjEwREQ5MDAwRTYyREMzMDAzRkQ3NTYxOUQ2RDFFNjE0RjRCQjVBQkRDMQorOjEwRERBMDAwQUUxNTI3MTU0MkRFRjQxNjYxRjk5NkI3MDRDQjc3QkNBMQorOjEwRERCMDAwQTU1ODFFRjNCQUIxN0NERjVCOEVFNTg3REUxQTJDRkYxNworOjEwRERDMDAwRERCQjBBQ0IzNkFGMEZDQjEzREUzQTJDNEY3QUVCQjE2QgorOjEwREREMDAwM0NFNTZEQzBGMjhDRDc4RkU1NTk2RjIzOTZFN0JDNERCQgorOjEwRERFMDAwNThCNjdCOUJCMTU0RUQ2NzRGRjI3Nzg2QUZBRjY3NDE3MgorOjEwRERGMDAwMEU4REUxNzI3NjcwRURCQzM1NzU3RDgzNzI3NjU4MkU4RQorOjEwREUwMDAwNDMzOTUzRTk1QkRDNjBFNEYyOTAyQUM4QzM1RjYxMURDQgorOjEwREUxMDAwNEUwMTc5RTlBMUJENDFFMTcyMThFREZEQzhFRDIwNkYxOQorOjEwREUyMDAwQkQ3RjA0NzkyMzY0MERDQTgxMDVFNEVFN0JDODFCODFBNAorOjEwREUzMDAwNTM4NDE0OTBBNzNFMUE3OTEyRTU1MDk1MjM1NUNGREZFRAorOjEwREU0MDAwOTA0QUNFODE3Q0E5NzI2NTkxOTkzRkE0Q0FENUZERTAyNAorOjEwREU1MDAwMjc0NkYwQjc3QTJCMTI1RkZGOTg3RjQ0MDJCOTNBMjAyOQorOjEwREU2MDAwRDk3MjdFNUU0MTdDMkVBQzc3RjFCMTZCMjlCODU2RTg1MQorOjEwREU3MDAwMjdGQjg3QzAzQUQyMzVFNEFCQzExMERGRUYzQTQ2ODVDNQorOjEwREU4MDAwMjAyQkZBRkNCNEYyMTI5REVFMkVEQzNGOTRGOTI5RjMxQworOjEwREU5MDAwN0I4NUI3OUJFMzE4NURDRDNBNTI0NDQ2QzJGOTcyQ0VGQQorOjEwREVBMDAwMzEzN0U1NjdEQzlGQUUxRTA5RkI2NkZBNUMyNjQ5MDA0OAorOjEwREVCMDAwQzdFRjlDMUVFMUJDODAwQzIyNDhFNzlFRThBQkY2M0YxMgorOjEwREVDMDAwRjVDNDdGRTZDMEI5QkYwNUY0OUNDRTNERUU4MEJFODZBQQorOjEwREVEMDAwRTlFRjUzQ0U1QjQyQ0U5NzNDNDY2NzNBQzRDMTNCQjNCMQorOjEwREVFMDAwMEQ3NkU2M0Y0QzEyRTk0ODI2RTFGOTgxNEFDNzAzRDk4RAorOjEwREVGMDAwNUYwQzg2RjM5OUZCQTgxQzgyN0U3NTBEMUE5QzQwMkU0MAorOjEwREYwMDAwMjMxRjNERDlGQjlFRThCOTAwRTYxQjEzM0QwRDA0Q0U0RgorOjEwREYxMDAwQjkyODNEQjdDMjdEQzc1OEU5RDk5MzlERUNDOTNFOUU0QgorOjEwREYyMDAwRDhDMEU4N0M4NEZCQTdEMUU4QUM5RTg3NjlGMUI4NDVFRQorOjEwREYzMDAwOTEzOTFGQjgxQzkzM0IzNEY0MkYxNUU4REZEN0VBQzBBMgorOjEwREY0MDAwRkUwN0Y3N0U5MDA5RTc3ODVEQkJBRjQ4MjA0MzQzREZDQgorOjEwREY1MDAwMkY2MEU3M0REREVGRTcwQjdBMjBGREU5RUY5OUIwM0Y1OQorOjEwREY2MDAwM0VGOEMyQkI1OEFFMjU0QzBGMzc1QTRBRTYyQTYzODJBOAorOjEwREY3MDAwRjA2MkJENDcxMDZENUUxRTQ1MTJFN0Q1ODM3RTc2QTQyNAorOjEwREY4MDAwQUFGQUQ5OUEwOUYyQjQ5QkRCODFCMEY5RjUyMDlGRUE4RAorOjEwREY5MDAwRkMwRUMwRkMyODlDQTkyMEQzNzQxRUY5NzJDOTVEQzI3NgorOjEwREZBMDAwRkM0NkE3RTBCQzdCOUE5RjI3QzE0MEE0MTExNDNGQUI1RAorOjEwREZCMDAwQzE0MDEyQTgzQzJBRUVCNTBBRUVFQjlDNkQzRTg4NTM5OAorOjEwREZDMDAwRUM4RDc3RDY1Mjk2Nzg2QzY3REYwODM4RTAzRDMxOUU0RAorOjEwREZEMDAwQjFBQ0QxNUMyM0ZBNEY4OTM1QTJGRjk0NTExM0VBM0ZDQgorOjEwREZFMDAwNzUxRDdFQ0FFNkE2RjgyRDRGRDdENzlDRUMwNUVCOUM5NQorOjEwREZGMDAwOEJBRjczNkM1RDU1RjFBQjZBQ0FBQUIxMDg3MEM0N0E3NQorOjEwRTAwMDAwNTdCRDU0QzRFRUUxMzgxMjY2NDYzOEVGNTNDQkU1RTkwQworOjEwRTAxMDAwMDYxQ0U3NkNFM0MwMDQxOEY3QUNENzU0QzNENjU3N0I5MworOjEwRTAyMDAwMEQxQjM3QkQyNjc0N0RBRDVDMTU1RjczNzI1NDEwQkYzOAorOjEwRTAzMDAwNjg3MDdGNjhGQ0E4NDQ5MDhGNENCMDJFRDJCNjgxRDExNgorOjEwRTA0MDAwRkI0N0U1QTdGQ0I5MDFDRkQ1NUI5NDJGQzA3RjM3MEYwNQorOjEwRTA1MDAwNTFGRDc3MTlFQjJBNUM0RjkzREU2NzFDMDFDRjc3MEFERAorOjEwRTA2MDAwRTNEMUY3MUNFQUQ5MzhCQzE3NUQ2RTY0NzI0QUU1QTdBNAorOjEwRTA3MDAwMUVDRUJCMDhERjFGOTg5MENGNkUwQTMxODFDMkVCOTA5NQorOjEwRTA4MDAwMkQ3NTIwNTc3RTg1RTlCMzg3Q0I2OTk1QTlDREUwNzZCQworOjEwRTA5MDAwMjBCOTVCNDFBRTE3OEM1NUU1REMzMUVCMDM2QUE3M0YzNQorOjEwRTBBMDAwRkU4QjgyRjdDQ0M4RDcxNDdBNEVGMEFBQzMyMjUyNjJGNAorOjEwRTBCMDAwODNBMEVBODJERENCOEE2MURERkVGOEM1OUJGODNFQkQxOAorOjEwRTBDMDAwM0UwN0U2N0Q5RUU4OEFDMDJFOUQyNzZGREE0Njg1RThFQQorOjEwRTBEMDAwRUI2OTg1QzVCMTQ4MUREQkU3RjhFODFGOThERkUyN0FGOAorOjEwRTBFMDAwNzFERkIzQTQ0MUFDOTc5MTE5QTk2MDZGQ0IzNjJBQzRGNAorOjEwRTBGMDAwNEY3MTVGMEFGQjI2NzVERUQ0RkVCRUFCRDgxMUI5MjU4MQorOjEwRTEwMDAwQTQ2NjFERUNEMzFGNTM1OEJDNjc4MTlEQzg3REE4QkQ3NAorOjEwRTExMDAwQUVGQUMzQUY3MzIwRUVEM0FFMzA3RjU3M0QwRjVGOUE5OAorOjEwRTEyMDAwQzRGNjgzMTUzM0ZEMDYxN0VERkZEMUVFNTFCNzUxOEJDMQorOjEwRTEzMDAwNEJERkY3QUY0M0ZGNjczQTcxNkUyN0UxNzQ1RjU4MjdGMworOjEwRTE0MDAwRTJENzEzRkU1QTdDNTUzRjI4RUM1QzlFRTM5MURDMjgxNQorOjEwRTE1MDAwNDVCQzJGRjUzNUI3NzNBQTdFMjQxOUVDNDJEQzI3NEQ1OAorOjEwRTE2MDAwNTM1N0U1NDBFMTcyRTA1N0RDNTY0MzBBRTMzQkYwNTE3OAorOjEwRTE3MDAwOTIzQjBERUU5MDdFODY2MEJGMjRDMzk4RThGRDhDRDA2NAorOjEwRTE4MDAwNEY4RkZERDI1OEJGQ0U0MkRDMUYxMzJBNEY0MzgzRkQ3MQorOjEwRTE5MDAwQ0M0MTc4N0REOUI4NjJCRkFBM0YzQ0ZCQTI4RkNBNEI2NQorOjEwRTFBMDAwQzVFRjFFQjUxMUJBNkU3RTJDRDdBNzNBRTlGM0NBRURCQQorOjEwRTFCMDAwRjdEQTVDQjQzQzIzRkI2Q0MwQ0Y4RkZERkE4OEY3N0RBNworOjEwRTFDMDAwNkYzMUE4RjQ3MDU5MjQ4OEE3NzFGOTI0NzUzRThDNTNENworOjEwRTFEMDAwN0NCMTVEQjFFMzM5NDJBMzMxNjBBNEYyNTlCRDdCNjlFMgorOjEwRTFFMDAwMzExOThFRjVFM0FDQkVGRTUzM0RENDlCNDU3RTU1RkMwNAorOjEwRTFGMDAwRTZEMTU0MDdCQjI3QzRFMjQ5MjQ4MDdFNkVGNUI2RkYwMgorOjEwRTIwMDAwMjg4NEY1QzI0MzNBNTFDRUI0RUZDMUY4MTc5MzUwQUYwQQorOjEwRTIxMDAwRTcxQjEyQzJEQkYxNjI3MDJBQkNDRjdFM0NCQkVGRkY3MgorOjEwRTIyMDAwNTQ2RjgzNzJGMjY5RDAyMzhGNDY0RUNBQjlERjBBRjQ2NQorOjEwRTIzMDAwODJGRDdFQkVDMTlBOENGNkZFNUE3MjJERThCQjRBMTc0QgorOjEwRTI0MDAwRTI2N0ZFNkJFRDhFQzc4NzFGQTc3ODlEREJGNjE3OUJGNQorOjEwRTI1MDAwMzQzNEQ0NEUzMDc5RUI2QTVBRjg2RjI2NUQ3NDdCRDIzMQorOjEwRTI2MDAwNEVFNTMxRDQ0RkEyODBGMTNENDczM0Y3QkI1QjU4NTk5RgorOjEwRTI3MDAwQTkwNDZDNzAxRkE3NzI4QkUyQTQ5MjQ4MkE5RkQ1MTM0MQorOjEwRTI4MDAwQjg5RjQwREUzM0ZBMjEzRUJBRUNEOTU3REUxOTRGRTk4OAorOjEwRTI5MDAwQkY2Qzk3OTI1Q0NDQTY2MzkxNTI4M0ZDRjFEMEJGQUI2QworOjEwRTJBMDAwNDYwNkY5NTFGMUZCNTcwQzhFNjFFQ0Y5M0Q0OTQxQkUzMAorOjEwRTJCMDAwMkNEQkI1Q0Y0MDg2ODVEMzcxNTJEMzNFNDM5QjI1MDJEQworOjEwRTJDMDAwN0Y5QThFMTdDMjdBNUJCQkUzMUYwNjg4MkI3RUJDNTdGMgorOjEwRTJEMDAwMjI2OTU5RTFFRjk3NkY3OTA1RDczREEwMTNGMjkzRjNDNworOjEwRTJFMDAwQUI5QjdGNjE3QzBCNEM3Qjc5MzRGNkIzODMzREVDODkyRgorOjEwRTJGMDAwNkZEOUIwOUY0QjQxRjk3RUVFNjVCOEM3RjRCRUQxMDkyNgorOjEwRTMwMDAwNzQyODdGNkU4NTBERTY3MzVBQUU2MTcyRkVFQjdCNTMwNworOjEwRTMxMDAwNDFERkNCMTU1RkFBMUQ0QkY2QkNGQ0M5OUZBM0ZDMkRBQQorOjEwRTMyMDAwMzlGQUYzNTRGNDFGODgyQjQzODdCNkQ5OTcwMUYzNUM2RAorOjEwRTMzMDAwQkNGOTU2OUM2NzE5NzFBMzFDOTZGRjVBNUYwMkY3NENGMworOjEwRTM0MDAwMkZDOEE0Njg1NzA0M0RGOThCODFFRDVGNEU2RkE1Q0NCMworOjEwRTM1MDAwQTVGMzNDMERGODgxN0Q3QjUzRUZERjhFNzFGMzlGRTFEOAorOjEwRTM2MDAwM0RCODlGRjMzOUQzOTUxMEVCMTc0QzhDNUY1QjBDM0E5QgorOjEwRTM3MDAwMzUxRTZBMTJFNDc3REJGQTU2RTBEM0Q5N0VBRTM0MzgyNAorOjEwRTM4MDAwRjdBMDc0RjA3MUJBNDk5NzI4NUNGREQxODIzNEM2Mjc5MgorOjEwRTM5MDAwRTI5MDczRjg3QkQ0REU0RjgyRTdEMEJGNTU3MTk5ODc0NgorOjEwRTNBMDAwMEJFRjcxRkJDOEM2NUZDOUM3QTc3OEM3QzFGQTc1M0EzQQorOjEwRTNCMDAwMzVCMkZGRjcwRjNFM0ZGQUQzNEE0MkU0MkM0NERGOTlDRgorOjEwRTNDMDAwRkU2RkJCOEZFOUJCQUFGRkZFRTk0NUQwRkVGOTVCNENBRgorOjEwRTNEMDAwOEZFMDNENTgyRjI4NUU4MTM0NkNERjM3NTM0MkZCNDA3RAorOjEwRTNFMDAwRjdEOTkxRjQ3QzlCQzJGNTVDNkNBNzNCMUM1Q0ZGNTU5NAorOjEwRTNGMDAwMzlBMUY4Q0I1MjQyQThCQ0QwNzE5MjkwMEZCODNGMkVGMQorOjEwRTQwMDAwREI0OERGMEZGMUNCM0MzMDJFRjYzMzA0OUY4N0FDMUI4QgorOjEwRTQxMDAwNEJCODVEMzhBNEIxMDc2NDczNEE0QzdFNzRBNUUyN0ZBMworOjEwRTQyMDAwRkEwOUQwREZGNzhDNEU5RjAzRjQ1NzI5ODFGOTdGQjJBOAorOjEwRTQzMDAwRjNDMDNCNzNBODlDN0ZEMkE0RUFBRDY4NTdCNTdBNUI2MgorOjEwRTQ0MDAwRkVGQzE4MTI0OTZGM0ZCMUQwN0Q1NzI0QkRBNUNGMjNFNAorOjEwRTQ1MDAwRUFBREE1MERFNUY5RkY5NjVENTVFOUQ3QUVBMTFGRDg0OAorOjEwRTQ2MDAwQzc5NzFERDFFOUE4QjU4RjFCMEM4RTg4RjY5MUZFQkMwRAorOjEwRTQ3MDAwNDU3MkMyRTU1MDk1M0Y1NUVFMkE3RTVCRDUxRkVDNTBBNAorOjEwRTQ4MDAwQjc3Q0FBRjJENzJEOUZBQUZDNjlFNzJCRDI0RkRCRkVGRgorOjEwRTQ5MDAwMDdEMDZGOEFEN0VEQTY0REQzQzA3RjM2NzUxMjhDQzNENworOjEwRTRBMDAwRTdDRUQ0RTMzRDRERDNFNzg0REREM0I4MjMxRUVCQjNGMQorOjEwRTRCMDAwRjQ2REJGMDc5RkYwODNBQTU5QzM2MDlEQkY5REY4MTRGOAorOjEwRTRDMDAwNzY2RTVGQUZBMDFGRkJGNUE1NEIxM0U4N0NFNjcwRkFGNAorOjEwRTREMDAwREU0RUM5M0Q5NUYyQTM1NDk2MDI3MTE0Q0ZEOTMyRjFBNAorOjEwRTRFMDAwMjUyNDQxM0M1OTIyMjc0MkYwQjhCRDVDQUNDM0NGQzRCRgorOjEwRTRGMDAwRDQyMDlDOUVGQTdGNUJCRkZCQkI5NjQ3Mjk1RjRGNjQ4RAorOjEwRTUwMDAwMTNGMjM3Mjg3MUZGNDExREVCMTA3OTlBREVDMkNFMzEyQworOjEwRTUxMDAwM0NBMzI1RkYwMEQ0QzMzNkI5MjQ2NDFGRTEzMTMyRkI4QworOjEwRTUyMDAwNzMzNEZGOTYzMTQwQkZEQzU5QzMxMjk4OUMwRkM2RkQ2RgorOjEwRTUzMDAwQTI4N0RCQjEyRTlGMjMwMUVDN0I1N0NCNDBEQzE3NzYwMworOjEwRTU0MDAwMUQ1RTY4NzU0N0IwNjcwN0I4OUNCREMyQ0Y2MTNBMkNBNQorOjEwRTU1MDAwNTJCRDlFQ0E3RDA3RTk0NEJGQzY2NzMxNDc4Q0NCQ0QwQgorOjEwRTU2MDAwMzFBQTc2OUFGMzhERkVFOEU5RjhBNTVDMEU2N0QzNTdEOQorOjEwRTU3MDAwMTM0Njg2RjA2REU2RDQ4RjY1NUIzODFGRTBFNzQ0QzgyQworOjEwRTU4MDAwQkVFMkZCRDIxN0U0MUFFODdCQzBEQzU2NTgxMjIxN0VBQgorOjEwRTU5MDAwNTNDOUU5Mzc3MUZGOTcwNjU4RjdGMjVCNzI2NUEwNjNCQworOjEwRTVBMDAwQkU0NTJGQzQ0MzE2MTlCOUJFMEUyNTQzMDFBRjg5RkJFMgorOjEwRTVCMDAwOTczRTMwODZDQUIxRTdCMERFNjlBNkYzRjNCNDdDNkE1MQorOjEwRTVDMDAwNzA0N0Q4REY2OUU5MDlGMEMxQkZEQzZBNjRGRUYyREI5RAorOjEwRTVEMDAwNEFDOTYyQTBFQkRCQjdCMkYzREVCRjE5OUM1NTkxRjBEQworOjEwRTVFMDAwNEMzNzMzN0Y3MzM2MjlCOTMwNUFGQUU5RDEzNzc3OTZFOQorOjEwRTVGMDAwMzU5MDQ3RTlEMTY1NjFGN0I1QzNFNThGRTk3RDk3NUQ1MgorOjEwRTYwMDAwRjJBRjk2NDAwRUY1QUM5RUNDRUUzNzE3MTJGNzAzMTMxRgorOjEwRTYxMDAwMjRENEY3MUI0MkVENTc2RUYzRjQ2N0UxM0U0RDc1OEI0MgorOjEwRTYyMDAwNjREN0QxRjY2QUI5Q0QwMDcyRUM2OURFMjU4M0RGN0U0RQorOjEwRTYzMDAwOTM4M0I4NzA3RjJERDcwQzlCMTkxMkZGQTJDQjFFRDJFQgorOjEwRTY0MDAwRUJDMDU3NzNFNjAyN0QzRjlCNjkyNDgwOTc2QkU4QTc3OAorOjEwRTY1MDAwMzY1OEZGM0Y2QjE5ODU3QTEwNkQ1RUFGN0JDOUI0N0M2RAorOjEwRTY2MDAwMDVFMDMwN0JBNjk1ODdDMkU0NzhBMTdFRUIyNEQyMTcyMworOjEwRTY3MDAwQ0U4MTI3MUFEQjU2MzgyM0YwMkZERkM0RTQyQzY2RkI0QgorOjEwRTY4MDAwNjZGQUZGQ0NCRTREQTBGNjhEQzlCNTEyNkFERjJDQTY4NgorOjEwRTY5MDAwMzBGQjk2MTZDOUJFMkQ1RkVENDgwM0I5NThCRTY3MjAwMgorOjEwRTZBMDAwN0VCRkI1RkNCNUM1Mjk5MUVDREJBQjdDREZGQjFBQkZBNworOjEwRTZCMDAwMDdERUQxOTdEQUI3MTEyMUY2QUQyRkI1NkYxMUUyRTQ3RAorOjEwRTZDMDAwNUZDNDZBREY0Q0ZGMzNGQUY3MkFEOEI3MDhGMzM1OUJFQgorOjEwRTZEMDAwNDRGQjU2RDRCMjFBRUQ1QjUxNUZCRDcwNUY4OTk4QThCOAorOjEwRTZFMDAwN0Q4QkJGOUM3RDlCRkZFOEFENTg1NzlDRjExMUU0MDdFMworOjEwRTZGMDAwRTgwQUY2RUQzNTZFRTc2MDFDQjA3MzM3OTg1ODdDMzM0NgorOjEwRTcwMDAwNTYzQkQ3MkY1NjNCRjczRjQ0NjdENUNFMkRFRjI3QTE3OQorOjEwRTcxMDAwRkYxMjJFODdDQ0NFMkRDRjYyNzY2RUY5MUU2NkU3OTY1RAorOjEwRTcyMDAwNjczMzNCQTdCNTZGNzk2MUY2OERCRDVGM0Q4NEJFOEZDMgorOjEwRTczMDAwRkJDN0FDQzdFRjgwRkI4NEE1OEFEMzQ0RkIxNzNCRDQ0RgorOjEwRTc0MDAwRUYyNzZBQzY4NERBQkIxQjRDMzJEMjM5Q0NERTM5M0ZBNAorOjEwRTc1MDAwQzVFRjYwN0FCMjc3N0YwNTdCOTc4RDc2NkMxMEU4OTE3NAorOjEwRTc2MDAwNTYzRUE2MEM4QTE3RUVCM0JERkRFNUE5REZGRTBFRjRGQQorOjEwRTc3MDAwRTU3NTNEREUxNzdBNTdDN0Y2NDc3QkJGM0MzNTBBRjQ4RgorOjEwRTc4MDAwRUUyMTEzQjNCRjRCNEM4QzlGRUQ1RTFGREFEMzQ5NDM5MAorOjEwRTc5MDAwOTlCRTU3RERDM0U4NTdCRDVCNjJGMzVEQTlGNzNCNjBFNworOjEwRTdBMDAwMURGOEVBMjJFRTlGRTdFRTYxRkJFNzU5QzZENjk0NzhBMgorOjEwRTdCMDAwQjg5N0Y0MkYwQTYxREY3RDkwRTJGOTIxRjI1MDdBQjEyNworOjEwRTdDMDAwMDJFMzgwQ0ZDN0Q5QjZDMkZFQjI1NDI2MjZGMDYzRTc3MworOjEwRTdEMDAwMUQ5RUYyMzFGOEFGRjMyRUQ2QTFERjNCMEY5RUMzMzk1OQorOjEwRTdFMDAwMDlCRjI3QTFERUEzOThEM0JDRUI5NTNFMjRGQzdFQzREMQorOjEwRTdGMDAwNDQyM0UzQzNDNDE1OTI3RjRCMTZEQzQ3MTBEQkU3Njk2MworOjEwRTgwMDAwRkNGQTc1N0M5RUQ0OUY0NUJBOTBCRkVBMjNDNkVGRDYyQQorOjEwRTgxMDAwNjlFOUUxNjRGM0FGNUFBOTE3RTk1MTIzNDVBNDA3RTU3MworOjEwRTgyMDAwNjhGMUZDRDRFMEZDRTdCRUQwQjZBRTBGQjQyRjk1NzAxMworOjEwRTgzMDAwM0ZBNUQyNDMzQjRGOTUzRUVBN0U2NTFFRDcxMTRGQ0I5NQorOjEwRTg0MDAwMkUwNUY4QTU5REJGNEFCRkIwNzlBQkY0RDRDQ0JGNEUxRQorOjEwRTg1MDAwQjUxRjU3OTM2MUEwNkZFRkVBREMwRjhDMDFGOUY4MzMxNQorOjEwRTg2MDAwQTUwM0M1RUJCNkQ5RDk2OUExRjZGODQxNkU5N0E2QkE0QQorOjEwRTg3MDAwOEZFN0E3M0E4MDZFRUNCQkM0MzlFNUJCNUU0OUE1RjNEMAorOjEwRTg4MDAwQjlEOTk1MzUxMkJFMUZCRUY1MkI4MzFCRTIwQjA3Q0MwMQorOjEwRTg5MDAwOUQ2OERGNTRGOUZBODRDQjdCODBDMzc5QkJCNzNEMUZGOQorOjEwRThBMDAwRDc5MTY2Qzk4RTdBMTNEMEQ4MkY3RTdGQ0M3MzBGRDNDMQorOjEwRThCMDAwQUIwM0QyM0ZENkY1MTk4RDc0ODU2NTgwMTRBQUVCMTA5MQorOjEwRThDMDAwRjA4MUZFNzc2QTBCRTM4MzA3Rjg0MEZGM0I4RDc0MUVFRgorOjEwRThEMDAwMDIzQTU3Mjc0QkNFMDBGNDZGREU3NTJGQzhDREFCNjZEQQorOjEwRThFMDAwRkExQ0Y0Qjc1QzcyQjJFRkNCODgyNTIzRjVCMkYyMjk5QgorOjEwRThGMDAwNDc5MjRGMEM0RUU0MDREN0M1NzlEMDJGMjlEQ0VGOTgwRQorOjEwRTkwMDAwNjg2QzdEMUJGMDk4NDhGNTYxMEIwOUY3NDM1NEJFMEYwNgorOjEwRTkxMDAwQTE3RjJFNDVCQUY3RDM4MzFDN0ZDQ0U1RjM1NUEwQjc3MgorOjEwRTkyMDAwMDVFOERBNjkwMDdGQzYxMzYwRUI4N0RBRUU5MTFERjkxRQorOjEwRTkzMDAwNDgxRjk1REVDRDc0N0QxOENERThBRDhCNDBDRjlCRDVCQgorOjEwRTk0MDAwM0FBN0E3QTc0NTUyRTBGREM5NzRGRkRBNEI4MkQzQURDMQorOjEwRTk1MDAwMkYwRkE5NzIwQ0RGQzM2OUU5MDFGMTgwOEMxMEJEMDc4QworOjEwRTk2MDAwRkIxNDdBM0U1OUREN0MxNEU5MzI2NTI1NzVBRjQyRTgyNworOjEwRTk3MDAwMEU3NkVCNzJGNDg5QTYxN0Q1Q0QzRjhDNUU3Q0EyRDFDMgorOjEwRTk4MDAwOEJCREU2Q0VCRjhDODBGOEQ3MUUwOUVEMDM2OTQ5MTQxNAorOjEwRTk5MDAwRjZGQkYxNjZFNjY3MUMzMEJCNTE3RTNCNUY1M0YwRkUzMQorOjEwRTlBMDAwQjlENjhFN0NDREU1MUVGNjE3QTFERkZENEQ4Mjg5ODA5QworOjEwRTlCMDAwOURCMzlCQzk0NzJBMUUwMzk4MUM4NURBRUY1N0NENkU3RAorOjEwRTlDMDAwRTQ1NzM0Rjg3MTdDMUQ4RUU2M0ZBOUY1MUI2MTNDQjgxNQorOjEwRTlEMDAwOEZFODEwQzcwQkYzMkY3OEZDQTdBNzc5QTVGMTcxQkZCQgorOjEwRTlFMDAwRUJCQ0JBQ0YzMzQ5QUI4MUIwRjhGRjBBNjNDOEI5RDRFNgorOjEwRTlGMDAwNkRGQzVDQTAzQjRFMTZFQzY3Mzc1REE2MUZDNDVGMDI0MgorOjEwRUEwMDAwNzRERUFGRUU3QzBBRTNCRkU3OUYzOTNFMERFNDc3RDlCMQorOjEwRUExMDAwMUZGNUM0NDRGOURDQkVEMzRBMDJFQ0RFODUwMUQ2RDkyOQorOjEwRUEyMDAwOEFEREZBODhFNzI4ODRENEIyRUYxQzdGNjc0NUZCNTI2MQorOjEwRUEzMDAwRjFCQ0QxNUY0Q0RGQUY3OEYxQTNFMTEwQjc2QTVGQzNERgorOjEwRUE0MDAwRUM4Q0VGMTkyRTFGQkVCNkUxNzBCRTVFMjFCMzczNjE3MAorOjEwRUE1MDAwMkRCQ0VCQjhCQzlDN0IyOUJFMTRFQ0E0RDRDOEJFNUYxMworOjEwRUE2MDAwQUQ2ODlBQTUxODQzRjZFOTIzQ0QwQThFNEJGQkUxQkRBQworOjEwRUE3MDAwNjVERjBFMDlFM0U1RTFGOEFENjZGMDc2MzBGQjU3RDFDRQorOjEwRUE4MDAwQUNGOEUxM0JEODhBQzYyREI4QkZGNTM0N0U2QTAwQkYyQQorOjEwRUE5MDAwNkVEMkVGOUU2NURGRDczNkVCQzVGODYxQTMzRTYwQzQ0QQorOjEwRUFBMDAwMzhBN0ZFQjg3MTM4RDM1QjQ5ODg0NzU1QTE1RTU2MzcwMQorOjEwRUFCMDAwRjEzODk5MjY3RUI0RUM3NzdCNUVGNDUxRDIyQ0ZCRkRDNQorOjEwRUFDMDAwNkY2QzYwNkZDRUI2NkVCNzYxN0NBRTkxQzVERjY0OEI0NAorOjEwRUFEMDAwMUMzOTNFRDc1MzVDQUVFOTNFMUU5NzlCN0E5QTBDMEZDOQorOjEwRUFFMDAwOEZDQjlEODVGRjUwM0Q5QzZGRTZGQUFBQzYzNTFCN0JGOAorOjEwRUFGMDAwQzU3NDdFQkVFQ0Q5MEI0RkMyNzlEMkI5RTczRjc5MTIwQgorOjEwRUIwMDAwRjBBRkZDRTZCMzI3RUY4NjczODlCRDY2M0JBQzdGOUUxMgorOjEwRUIxMDAwNjdERUM2RjhCQkZBREVERDVDQ0VEQjc3RkNFNkU5MjcxNAorOjEwRUIyMDAwQTgxRUI2QkY2N0M0N0I1QkVEN0I0RTY3QzJGNzhDRUQ1QQorOjEwRUIzMDAwQkJCRTRDODVGOEU2Q0EzRDA1Qjg5RjU5RjlDMkE0QjRERQorOjEwRUI0MDAwQ0JERDNGMDFGOUY0Qzc3MDdFQTJFNUM3ODFERDdBMDIxMworOjEwRUI1MDAwREY3MzlFM0Y2NjQ0RkZBMzNCQ0VEQTU0QzVFMkQ3MEU3NworOjEwRUI2MDAwMUU1RkREMTlGOUJDNEE4RDA3NTZFRkJFRTVFNkVCNjE4NQorOjEwRUI3MDAwMUREQ0FEMzgxREY4OUNDNzA3N0I4QUFCQkU0NUY5M0E1MgorOjEwRUI4MDAwMjIwNkZFRURFNEYxRjNBNkE5MTFFM0FBRTdFMTNGOTQyMgorOjEwRUI5MDAwNEY5QkNDNjI1Q0Y1QzJFRUM1RkZGNjA0QjRFREVFMTVGQQorOjEwRUJBMDAwMzVBRTFBODg4MTZFRUE3OTU4OTlEOUI1Q0QwQ0ZBRjE0QgorOjEwRUJCMDAwRkM2RjMxOEUwRDdDQTMzRTM5Njk3RkY2NDIyNkM0MjM1QgorOjEwRUJDMDAwQ0UyODlENzdFMjNERTUzRDQ2QkM2NzU0QjFFNzVERDQ3NAorOjEwRUJEMDAwOTdGNjE3OEVFMjM5MTNFMUU3NTFFREE0RkI4NzlEMUJGMQorOjEwRUJFMDAwRjBCRDhFNjc5Qjk1QzU2MzM5RkQyMTVFRUJCMEUxNzM4NworOjEwRUJGMDAwMUU5NzY1NzJBQ0M2NkJBM0M1NjlERjM3QjNGQjUwRUFERAorOjEwRUMwMDAwRjk1Q0Q1QjYwRjBDNDQxM0ZGOTZDNjAyQkY4RTBCRTcxNgorOjEwRUMxMDAwOEFFQUJDQjVGMEVDNDA4NzZCNDNDRjFGQTJDNUMzQjlFRAorOjEwRUMyMDAwNUQwREUzMTczQjc3NjhERkMyQ0YyM0JBQ0YxOTA4RTk0MAorOjEwRUMzMDAwM0IxMkNFQzdEOUI5QjlDNzJGQkQxQjg5QkZFQUY5QzNFQgorOjEwRUM0MDAwREI1QUZERjRDNzc2RUVEMDMzREVERjhEMkVBRjlBRDlENgorOjEwRUM1MDAwRkU1NkE1Q0ZCOUFGMjNEQkU5NEVBRUVGNzQ5REU5MzA4OAorOjEwRUM2MDAwRTNCOTMxNUI2N0U2RjE3NUE2OUFEMjhEN0RGN0M2RjAwMAorOjEwRUM3MDAwM0RDN0Y3ODFFNzlFRDFGQjYxQkZCQ0FFRTkwMERBNUIxRgorOjEwRUM4MDAwQUQ5RTU3MTMxNkZGRDI4RTI3QzUzMUZGQTBCQTc5REY4QworOjEwRUM5MDAwNzBCMDQ3RTdGNkJGODRGMjU3QkRGM0I4QzE0N0UxMUMzNworOjEwRUNBMDAwNkFGQ0JEQTE2RDY4NTBERUMxOEVGQjQzRUNGOEI5RTc4QworOjEwRUNCMDAwRjYwRDY3RTcyMjkxRjNCNEQ4Mzg3QzRGOEIwOERGQjNBOQorOjEwRUNDMDAwRjM1MzAxRkUzMjVGOTNDMTZFRTk3OTlDQjNCMjZCMTZDOAorOjEwRUNEMDAwQ0NGNzZDQUI0MkUwM0VGQkQ5MjY3RDkxM0ZDMkI4OUY5QQorOjEwRUNFMDAwQzEzQTM2MjY0OEE3NzU1NkY2MUQ5RjNFQzk4MDdFRTY3NgorOjEwRUNGMDAwNEFFQkQ4NjNGMEZERjg0QUFCQzEwMUZCRUREQUQ1RUM4NQorOjEwRUQwMDAwNUU2NUVERkY3MkE2MDM1RjZBMTM2RkMzNzNBMzdBMEQ4RQorOjEwRUQxMDAwMURFREM5RjY1Q0Q4ODdEQkYzNEI0NjgzNTg2OUVENDE5RQorOjEwRUQyMDAwQTI0QjI3RTBCREQyNUE5NEU2QjA0MDVFMkZFNkE3MTA3MgorOjEwRUQzMDAwRDk4OURGMTlFQTZEODU0NTMwMEZCRDVENjczNzQ3NUNCRQorOjEwRUQ0MDAwNUYxOTNDQzVDMkYyNjYyODc2RjFCQkJGRUY5MDA3ODMxRQorOjEwRUQ1MDAwNDAzRThFNkY5RDA3QTM1MzkzMDdBM0ZDQzZGRkQ3RjJENworOjEwRUQ2MDAwNjBGODYwOUM5RjQwMUU4QzAwQzY3N0Q0M0MxOEM5M0Y1OQorOjEwRUQ3MDAwNzIxRTBDODgyRjhEMEVDOTgzRDFBOUM5ODNDMUY5RjhFMQorOjEwRUQ4MDAwQ0YzQzE4RkZDQzgzMDFBNTlBMDdFMzlEMEQ2NTA1OTA0NAorOjEwRUQ5MDAwQTc0MkNEODM3MTY2ODNBNzAwRjI1MkE4NzkzMEJFREEwQworOjEwRURBMDAwQjA4QUQ1NzkxRTBDQ0JGREFCMEI0MkYzNjA2NERFQkY5RAorOjEwRURCMDAwMDFEQkQ1M0MxOENFRkIxRjI5MDhDRDgzOTE3N0ZGRTZGOAorOjEwRURDMDAwODJEMDNDMTgzM0VGREY1RTEwOUEwN0EzRUNGRUU3MEEwRgorOjEwRUREMDAwODQzQzE4NkJGRjUwMDA3OTMwNUU4Rjc3QjdDNkE1NDQyRQorOjEwRURFMDAwQ0Y4M0QxMUNFNzg4MjkwRjA2ODVGMzFFQzI4OTkyMDdCRAorOjEwRURGMDAwNDMwQjI3NUExRTBDMEFFNzQ0REM5OEU4NzkzMEMyRjAyRQorOjEwRUUwMDAwODk5MjA3ODNDMkY5MDRFMTQ0Qzk4MzExODY0Rjk0M0M3NworOjEwRUUxMDAwMTgxNENFRTczOEFGMjg3OTMwQjQ3MEEyRTVDMUEwNzBERAorOjEwRUUyMDAwRkUwQkUxNDRDOTgzQTE4NTEzMkQwRjA2ODU2Mzg4NEYyRQorOjEwRUUzMDAwODk5RTA3MjMwQzlGMjg3OTMwMjg5QzA0ODQxMzI1MEY3MgorOjEwRUU0MDAwNDYxODNFNTFGMjYwNTAzOEU5MDgyNzRBMUUwQzJEOUNBNgorOjEwRUU1MDAwNjg3OTMwMjg5QzJDODQxMzI1MEY4NjE2NEVCNDNDMThGNAorOjEwRUU2MDAwMTRDRTU1RjE2M0EyRTdDMTA4QzMyNzRBMUUwQzBBNjdGNgorOjEwRUU3MDAwMTRFMjEzMjUwRjQ2MTgzRTUxRjI2MDUwMzgxMzEwNEUxRAorOjEwRUU4MDAwOTQzQzE4NUEzOEQxRjI2MDUwMzgwNTM4QUYyODc5MzBBMAorOjEwRUU5MDAwQjQ3MEEyRTVDMUEwNzBBNjIxM0U1MUYyNjA4NEUxMTNENgorOjEwRUVBMDAwMjUwRjA2ODUzMzBCRjE4OTkyMDcyMzBDOUYyODc5MzBCMworOjEwRUVCMDAwMjgxQzM3RTIxMzI1MEY4NjE2NEVCNDNDMTgxNENFNTI4OAorOjEwRUVDMDAwODQxMzI1MEY4NjE2NEVCNDNDMTgxNENFNzI4NDEzMjU3NQorOjEwRUVEMDAwMEY0NjE4M0U1MUYyNjA1MDM4NzcyMzlDMjg3OTMwQzI5MworOjEwRUVFMDAwRjBGOUFFNzkzMENDODE0MUQyNDBDQzgzODFGOTM4QkI4NgorOjEwRUVGMDAwRjM2MDI0N0ZFQjNDMThCRjAyN0NGRjk5MDdFMzlGNzkwNgorOjEwRUYwMDAwMzA3RThDM0MxOEI3NUFERDdGOEZDNzdERTM3N0NCODM4QgorOjEwRUYxMDAwNzEyNjVFOTMzN0EyODczQzE4Qjc1QTRCQ0U4MjNDN0Y0RQorOjEwRUYyMDAwREIzQzE4MTdFMkJGNUQxRTBDM0FDRTNGMkUzNzRFQjRDNQorOjEwRUYzMDAwM0MxODNBQ0JCN0NCODM0MUM3OTEyRDYzMkUzMzlGMjgyMgorOjEwRUY0MDAwNzkzMDEyMkM2MkZFOTAxRjJCMEZDNkIxRjgyNDlDNEYxMworOjEwRUY1MDAwQjQzQzE4M0ZCOTdDMTM3NDlCMDVGQkI0RTkyODhBRTRFMAorOjEwRUY2MDAwMjc5MzdGNjJCNDg1QzcwRDdGQThGQzEzMzBFOTlDOUY2RgorOjEwRUY3MDAwNTJGRTA5MzU4RjQxOTMwMkVCRTFGQjlDRUZFRjcwQjkzNAorOjEwRUY4MDAwRjg4MEU3QTEzODE2MzUwRjg1N0YyQUM2Nzc5NzhBNzlFQQorOjEwRUY5MDAwMjhBNjcwM0VDRTc2OEJGMjMwODVCMDczOTQyOUY5NTk0RAorOjEwRUZBMDAwRkU1QUQ4QUY5NzZCRjI1MDBDMTFDRkU5OEJERDQ3RjNDNworOjEwRUZCMDAwMjkzODMyRDUyOUNFRTMyODk3ODc2OUE1OUYxRTA0RjYwNAorOjEwRUZDMDAwREMzQzM2NzIxRThBMTk5QzFGRDMzNTc0OTlDMkY5MzZGRgorOjEwRUZEMDAwOUQ5N0I3QzNBNzM5NTQ5RThCQ0I4RkNBNDBENzY5OEVGNAorOjEwRUZFMDAwMzYxOUUzRjQzN0E5RkM3MzA4RkM5QkM5RTE2QUYxOUQ2QgorOjEwRUZGMDAwQzFGOTM3NjMzMkUzOUYxNkVGQjc4MDdGMTRFRkI3Q0FDQQorOjEwRjAwMDAwNDcyMUZGQjQ3ODZCRjFENEYyOUY4NEYyM0IyNDdGNDgxMAorOjEwRjAxMDAwMkUxMUYzNEY0QzMyODlGOTI3MEFFQzYyRkU4OTFCRDM3QgorOjEwRjAyMDAwQzVGQzEzOTMxRDYyRkU4OTlCODY4OEY5MjdBNjNBQzUwNQorOjEwRjAzMDAwRkMxMzM3OEYxNUYzNEY0Qzc3QURENkU0QkZCODRGOTMyMQorOjEwRjA0MDAwRkZFMjIxNERGRThCNEQ5QUZDMTc1QjM0RjkyRjc2Njg1OQorOjEwRjA1MDAwRjI1RkVDRDJFNEJGNzg0OTkzRkY2MjlGNTA1RjU4RjdBQworOjEwRjA2MDAwOUFEMDdGNzFGRDUxQTFCRUE0RTEzREExRkY1MkZGNzE3NQorOjEwRjA3MDAwQTE3RDU5RTNDNzQyN0I1NUQzQTc0MkRERDNGQ0E1RDA4MAorOjEwRjA4MDAwQkZBN0ZDMDM2RkYxRUZBMURGRTFERjQzMUZFM0RGNDMyNQorOjEwRjA5MDAwQkZERjQzRkU4Qjc3MkM0QkQ3ODVFNkJGNzhERkUyNTk4NQorOjEwRjBBMDAwMDc3OTA5OEU1QjFDM0NBRjQwRTRGQzE2RERFRDUxRjJBNAorOjEwRjBCMDAwNUYwNERGRkZGNkY5MkY1MjkyN0ZGODdDMDQzQTJCRkJCNgorOjEwRjBDMDAwMUVCMEI3MjU0RjY3NERGOUVFRjkwODZFMkQxMUJGRUI1NQorOjEwRjBEMDAwOUU1NTJBN0VEN0FEQjNCMkVGQjU2N0JCQzVFRkJCNkYwOAorOjEwRjBFMDAwMkYxN0JGRUYxRTExRTc5NjAwMEY2REZFOEJERTE2OTdGMAorOjEwRjBGMDAwQ0UwQUY2OTJFNzI5MDhDMDc3QkFEOTEwNkYyQkMyRjI3MAorOjEwRjEwMDAwMjBFNEJGQzg4Njc4NUIyOTk2ODcyMUZGMDUyREZGMEM3OAorOjEwRjExMDAwRjkyRjY4NzkwNEYyNUZEMEYyMERDODdGOTEwREY5MzNCMQorOjEwRjEyMDAwN0MzQzdGNDYxRENGOUY1MUNGRjM2NzM0RjBGQzE5N0VBNgorOjEwRjEzMDAwOUUzRkEzOTFFN0NGNjhFMkY5MzM5QTc5RkU4QzAwQzIzMworOjEwRjE0MDAwMzlFMTNEOENFNTQ5NkYyQjk2QTdCQ0M3QjAzQ0UzNkQxOAorOjEwRjE1MDAwQzNGMkFDRjcwQzk2RTdCQzlENThCNjdCMkY2MjE5NkJENworOjEwRjE2MDAwRkUwQzU1MkUzRjA0QkZFMTBBMTg5RkM5QjMyQUE3NTdDQQorOjEwRjE3MDAwM0ZGMEM4QkFEMEZDMTkyMzFFRDg4NDcyMUEyRDZGNDZFRQorOjEwRjE4MDAwMEU3Q0QzOTcxMjNENkY0Njc3N0I5NEJDMTlDMUY3QTNEMQorOjEwRjE5MDAwRTdDRDQ4MUJGREUzRTVDRDk4NkJGOTYxRjI2NkNDQUQ5OAorOjEwRjFBMDAwMTFGMzNBQ0M1Qjc1RjlCQzE5MjNFMjRBNkU0MUY5RTNERAorOjEwRjFCMDAwRjIzOEQ3MTI1QkRFMEM5RjU1RTJERkU1NTNCQTgwREZGMQorOjEwRjFDMDAwNDVFOTgyRUI3NTBGNzkwNzBFNUE5RjFFMDJGQjg5QUU0NworOjEwRjFEMDAwMjE1NzVEMzZERjgzNTYyRUEyRDM5QkU1Nzc5OEYzMjMyNAorOjEwRjFFMDAwRTdDQkU4ODlBRTZBRkZGNzJCNTgxRTg3Qjk5NjZGOTk2RgorOjEwRjFGMDAwMkZBMzg3N0MwQjA3QjNCRjQwM0IxOTZCQkU4QzlFRDZGOQorOjEwRjIwMDAwODc5RUU4MzlFMzQ3Q0U5N0QxOTM1REVEQzk5RUJFMzkxRAorOjEwRjIxMDAwODVEMUI5NzcwRjc0NTZCRjk3QUUzNEI1MUVDMjk3RUQzRQorOjEwRjIyMDAwMkU1NDZEOTk3RjBGOUYzQkQzOEVGMTk5OEU5REZDNUU3RQorOjEwRjIzMDAwOUM4QjM4RUNBOUVDN0I3REYwMzczQjlFNEYxODRFRjA1MQorOjEwRjI0MDAwM0I3RTNCNzE1MUZFQzRGM0U3RDJDRTdERkJFMDVFQzA1NgorOjEwRjI1MDAwNUExQjcxMjUyNjgxQjM0NzFDRkE4MUIwMEZCQkM2MDQyNworOjEwRjI2MDAwRjE5QUFBREQ5RkJFRjE0NzBBRDdEQ0EyQzdGQjcyMUQ0NworOjEwRjI3MDAwMTQ4NzU2RjRGQjVDODlDMEI3NzhGMjRCRENBN0MzMTkzRQorOjEwRjI4MDAwRERBNTVFQTFERjc1NkI3RTBGMDc3NDQ5MEQ5RTNGMTVFRQorOjEwRjI5MDAwRTgyREI4NkZFQURBQ0NFRUIzRUFDOUQ1OEY0RjE4OERGNgorOjEwRjJBMDAwRjdDNjg5REY4MUZDNDMzRjc1MTlDN0IzOEIxMDY3MDAzMAorOjEwRjJCMDAwRkFFRkI0RTJGREQ1MjVBRjJEMzRDMEEwNzBERTFBMUFFNgorOjEwRjJDMDAwMzdFODU1MjRDNjgxMUFDQ0I2RTE3MDZGMkY1REJEQkZGQgorOjEwRjJEMDAwRTc3M0I1ODIxRkJFODhDMzREMjkxMUUzNDQ5RjJDMjhENAorOjEwRjJFMDAwM0EwQ0ZFRjMyMjc3MTlERUFCNDgyQjE1RTM0Njg0N0ZGOAorOjEwRjJGMDAwNDcwRkRCMzJGMDMzNjVDMkVGNzVGQUQ5N0RDRkIwRUYzRgorOjEwRjMwMDAwRUE5QkI3MjA5RTRCRkQ5QUZCNEI4RDYyNURBNURCMzlENgorOjEwRjMxMDAwMkJCRjk3NjIyMTk2OThFOEQ2NzZDNUUzMTM5MkJGM0QzRQorOjEwRjMyMDAwREQ4Q0U5MjJERENDMEU5MTZFRjE0MzQ0QkE2OEU5NjZDQQorOjEwRjMzMDAwNzU4QTc0RDFEMjJENjFBQzE4NUY1M0U5QTZERUE3RkNBMworOjEwRjM0MDAwQTFFODk2NjRFM0Y3M0M4MkY0MkEzMUE1QTJDOTQ3M0NDMAorOjEwRjM1MDAwMzNFNDAwQ0FCNzU2MUZGQTU4MDJGMDFCN0U0OEJGNjQ1OAorOjEwRjM2MDAwRkY2QTdDQ0I2OTk1QzE2RUE1MzNEMDQ0NUFDNERFOEI0RAorOjEwRjM3MDAwMDc3RDgwRkNCREM0ODlGQUEwRkUzRThBNzhGMjIxOTcwMQorOjEwRjM4MDAwRkI4RkM4MjU1QUFFOTg3RUYwRjgwMkRBQkExOUU0NkQwMAorOjEwRjM5MDAwMDRGQjNEMUExOEFGNEEyMkI4OUY1Mzg4RDMwRUZCQTgyRQorOjEwRjNBMDAwMjZBRkM5Qjk0ODgxNzM0REUyNUM5NDBERTc5OTc2MkM3QworOjEwRjNCMDAwMUZFNERGM0I3NzBDMjVCOEVGNkYwQTdDOUUwQUY3MDY0NworOjEwRjNDMDAwMUUxQ0Q5MzkwREUyMEY5RUM1QTQwNEQ2QUY1OTA5NkM5NQorOjEwRjNEMDAwN0Q1REM2NEI1QjAyOEJDRjZDMjhEMTExRDc2OEY4N0Q2MQorOjEwRjNFMDAwNEE3QUJGNDRDNzZCQjdCQjVFQkIwMUZDRDExNjc2M0YwMAorOjEwRjNGMDAwODBEODNCREZCODFEREI0N0UxRjdFMTE5QkFGQTZCMDBCMworOjEwRjQwMDAwMUZEQTFGQkYyQkVFNjhGOUM4QjYzMEM0MEVCNzM3M0ZGRQorOjEwRjQxMDAwNzIyNURDNkJEREE0OEJGQzNENzM4MThERkZGRTFEN0VCMAorOjEwRjQyMDAwM0Y2NTQ0MzBERjQyODE2RDBDRTY2NTc4NzAwMDFEQTdCMgorOjEwRjQzMDAwN0E3QTE3RjI1MTk1Q0JFQjM4RkQwRjk2NEQ0MUZDNUU3MQorOjEwRjQ0MDAwNjg5MTFDMTBBRjJCRDRERjcxRDMzMDhBREZCOEI3NjU1OQorOjEwRjQ1MDAwN0VBRjk3REQ1RjFGQ0RGQkQ3OUFBOUZFQTJGREFBRkY2NQorOjEwRjQ2MDAwMUJGQzlFOTU5NzRFQ0E5ODBGNzE3NDREMTlERTEzRkNDNAorOjEwRjQ3MDAwQTNBREYwMzBGMDJCQzdENTM0MEFFNDI5QkYyNTExQ0Y1NgorOjEwRjQ4MDAwNzEzRDFGMTIyNzdFOUFENTJBREUwN0NDRTFGN0I2NzNBRAorOjEwRjQ5MDAwREE4ODFGODRFMkRBNjM2MkZCQjgzNkIxN0U5RDY2RkZDQworOjEwRjRBMDAwMzlERkM2RjVENDQ2NTI0MUVFMzY3RUFEOTc2MEZERThCMQorOjEwRjRCMDAwRTgyNENFMzUxNERGOEU0NUJENzFGQzhFQ0YwOUZBODk2NAorOjEwRjRDMDAwMUQ1RkVCOEIyMkREOEY1OTZFNjNGQ0RCNjQyMDY4QkYxMAorOjEwRjREMDAwMzc5NTU5RjBERUY5RkVCMjhBRkVFMDVGN0M3MTk3QkI4QQorOjEwRjRFMDAwN0ZBNDM4NjU4ODlGOTZDMEJFQkI3NzI1OTBCMTIwODdFMgorOjEwRjRGMDAwNkIyNTQ2RUZGQThDOTIwOEVCOTYyQTc3QUExQ0FBRjJBMworOjEwRjUwMDAwOTc1MTE2RTc4RTc0MEZGNTMzOUI4NDcyOTY1NzM2NDRFNQorOjEwRjUxMDAwMzI4MEZDRUM5NTMwRkNENUJFODZFMjc1OTk3NURCNDdGMAorOjEwRjUyMDAwRDZGNDAxN0MzQ0NEOUZFMTdEMzI1MzhCRTQ4QTc0NEY0RAorOjEwRjUzMDAwRTc2MTlCOERERDZGNUNFMzVCMERGNzQ2N0U0MTk1MDhDRgorOjEwRjU0MDAwRUM1NDg2QTEzRTJCMTI3QzFGRDk4ODdFRTk1RDM2MDdEQworOjEwRjU1MDAwN0JDRkM0RjMyMEM5RjUxOTcwOUZBMkJENzlEMkU0NzVBMQorOjEwRjU2MDAwMTRDRjI3QTgzRUMwN0FCNTQ5NzEyMkRFQkUyQTQyRjBFOAorOjEwRjU3MDAwOUUyQzhGRDdGNTlENDZCNjZDMDhGMTdGMzdEQjcyMUI0QQorOjEwRjU4MDAwNkQxNDVFQTM4RDdENkZEOUNCRUQ5NDAwNkZFNzdGRkQ4OQorOjEwRjU5MDAwQzMwNkYwM0IyRTFBOTE3RkJEQjlCRkE5QkU3NzgwRDNCOQorOjEwRjVBMDAwNjc1QzgyNkIyQkJDNEZFMDk3OUY1MUUzRTM3NERCOUM1RAorOjEwRjVCMDAwOEI0NjQxNUM5RUQyM0JDNDBFMDZGOUU2NjNGOTUxRENGMgorOjEwRjVDMDAwMDRDRjNGOTIyQzNBOTQ0M0UyNzIzOUVDQzI3RDc2MUYwRAorOjEwRjVEMDAwRUE4REFBMDcyNDIwMTFDODUzQTBEQTM3QTk0NTBBNTg5MgorOjEwRjVFMDAwQTlEQzhGMzY1OTAyNzA4RjJFQTk5Q0NFM0IxOUYyOUE1NgorOjEwRjVGMDAwOTgxOEJDNTZGOTlDMThEN0EyRjI5ODAzQ0UzREMxQUIxRgorOjEwRjYwMDAwRjMxMDQ4MDVGOEFBREQ1M0VERTVEQTQ0NjY4RkQ2M0VERgorOjEwRjYxMDAwMjQ2MzVFRDRDRDcyOUIxOUUyQTk1OTJFNDcxRUE0ODg5QgorOjEwRjYyMDAwNEM5MjFENzhBRkE2NUYzOTcxNTIwQzQ5RkNDMDVGMjcyMAorOjEwRjYzMDAwNzZGQjAxNTRDOUFGRjk0NjNGMkZEMjc3NUIxNzZEQ0NFQgorOjEwRjY0MDAwREYxRTk3RTBGRTMzRDA2QkY4RTFDRUZERTAyRTM4Q0QyMworOjEwRjY1MDAwQTQxN0JCRkZDNUVEMDRGNzZCMEFGOTdBMzdFRTNGNzRDOAorOjEwRjY2MDAwRUM3QkQxQzAwRDI0RjQzQjJBQUQ5REQ4NjQ2NkVCRkM0NQorOjEwRjY3MDAwQjhFQkQ5QkEzN0VFQkMwNUQ3QkQ2RTNCNTE1Njg4RUIxNworOjEwRjY4MDAwRDRDODk2NTEwN0UwOUVDNUM4MEY5OTdFMTI2RTFGRUMzNAorOjEwRjY5MDAwRjQwRkQwMjlFN0IwNEYwRkY0RjlCNjc2NDFDQjZGMTJEMworOjEwRjZBMDAwMzA3NUQ3ODdFQUUwMUM4NkVBNUJDOEZCNjczNTc2NjQ2RAorOjEwRjZCMDAwQzVGNDQxQjUxODVFRTY3MkQ0RkYxRUE3REUxRDQyNDdCMQorOjEwRjZDMDAwRURGQkRENzE0QUM5RDRGRERDMzExMEVDQzgxMTNEREMyNQorOjEwRjZEMDAwMEJFOUM4QTVGM0EzRjNERkM4RjUyNUYxNzNGRjY0OTgyMAorOjEwRjZFMDAwRDdDNjk2MUJDRDIwREY2QjAzNzlGNjYyRkE0RUEyQTkyRQorOjEwRjZGMDAwMDQ5OTk3NDg1QzE4Q0YxOTQ5M0QzMkM4OEY1MThCNDIwNQorOjEwRjcwMDAwNDFGRDQxQTU4NDI0QTRDMDNEQjQyMjIxREU0MzJDNDlGRgorOjEwRjcxMDAwM0NGRjRCMDBGOUQyMkRBNzU0OEU0M0VGRTVBQUYyQTk4NgorOjEwRjcyMDAwOTU0NzU1N0U2QkUxQTAwNUNFMDcyMTYyNEU0QkJERDRCNworOjEwRjczMDAwODQ4NzgxNDZCMkQ5MEVFQkJCRUE1RkQ2NzI3RkFFRDYyNAorOjEwRjc0MDAwOUNFOUM3RUY5NzdDMTlFODFGQURFNEZFNTFBREE1RDA0OQorOjEwRjc1MDAwODRFNjYwNUYzMkFFRUIyQjIxN0U0MkU5QjAzMjg1RDk4MAorOjEwRjc2MDAwNzk3NTNFNUFCOUY0NUNENDEzN0ZDODNFQzEyMzc3RTI2MQorOjEwRjc3MDAwN0Q0NENGNDUwMzNFNUZBN0I4MDdDMEZDNTVGQTVDQzM4NAorOjEwRjc4MDAwRTlBM0E1ODc5NEMwRjc5RDlDMkUzREUzOUI2Mzg3N0JFRgorOjEwRjc5MDAwQzE4OTI2MTc1OThGRjhFNkUxM0RFRUE2QzA0ODEzQUNBMworOjEwRjdBMDAwQkZGNzZBRjA4RDAxQ0Y2QjEzQzY4NEUzMjk1QkEyRTAzQgorOjEwRjdCMDAwOTlDQ0YwQkM4RUI4RkZEODQ2RTUzNzY3NDU1RDZEM0MwNworOjEwRjdDMDAwRUExNTc5MkIzRDI3NUNBRkI0N0FBNEVBOEQxQUU3QkQyMAorOjEwRjdEMDAwQjZCMkZFMDA1RUJCRUQ0MTZGM0NGMThDMkU0RUE1MDQyRgorOjEwRjdFMDAwRUY1NzM5RjdDNEEzMUREMUVBRDNFNzdDRkU5RTc4NDZENAorOjEwRjdGMDAwQkYwNThBN0IwNkNDQ0ZBM0VCQ0MwNDM5MTlFRTIwQkQyNAorOjEwRjgwMDAwOEEyOTkyQzM5QkY1QThFN0E0MzVCNjdCRjhBQTdGQTUwMQorOjEwRjgxMDAwRkE1NURBN0VBQTVGQTVEQTYzRjUxRUZDREEwNEY3N0NGNgorOjEwRjgyMDAwOTAwM0E5OTlDQTJEQzVBN0Q2Q0VGNjRCOUI2REVFNDU4MAorOjEwRjgzMDAwODA1NzNDQzUzRDBFRjY4RDQzMDI1OUVDRkI1RjUxMkZCRQorOjEwRjg0MDAwQTJFOTQxQkM0NkNFOUIwMjMyQUUwQjNFQkEyRTY0NEJCRgorOjEwRjg1MDAwRTE3OEE4RTMwRjRBNDg2NDdDQTQ1QTBFRUI3RERGMUNENAorOjEwRjg2MDAwQzIwNkFCMjY5ODM3QTdFRjcwRTI4Njc1QUJFRjQ4NzZGNQorOjEwRjg3MDAwOUY3MTREMDJCM0JGQjUwOTZDREQ1MkNCQ0RCNjkyQkJDMworOjEwRjg4MDAwNTFCRjY1RTIzMzhFRkNFRTc4MDNBQTcwREY3QzZEODI5NworOjEwRjg5MDAwRUIyRUEwODdBOUM4ODVGM0U4NjMyNzRFRjA0QkZCQzg4MQorOjEwRjhBMDAwNEQxMjdDMzc5QTU0RTk5MEQ4M0Q3MzEyRkM3RThCQzI3RQorOjEwRjhCMDAwRUI1M0VDQzgwNTdERUQwM0ZCNkJFOERGMTIzOUNGRDhDNQorOjEwRjhDMDAwQTMwOUVBRkQ1RUU2N0YzQTQ5NzcxRUFGNDcxMzk4RkYyQQorOjEwRjhEMDAwNzkwODUyOUZGNDJBNTZGMzgyQTlFNzM5NEUwOUU4RDRGMQorOjEwRjhFMDAwNkVCRDBEOTE2RUJGMjAzMTNGM0Q5MUQxNEJCQjRGMDA5RQorOjEwRjhGMDAwQzI4N0ZFRkVCRDdCMEQ0NDM2Mjc5MUUwRUY1OUQ1OTlCNgorOjEwRjkwMDAwRDBCRjhGMjdDRTI2QjA1N0JCMTIwNkYwNzM0QzY3MURCMQorOjEwRjkxMDAwRDQ3RjI1Nzc5QTEyODcwNkU1NUQ5NUUzMDcyN0NDNzA5QgorOjEwRjkyMDAwNDIyQTUyREJGNTVEQzM2MTRGNDVFNTdBMjdEMEJGN0RBMgorOjEwRjkzMDAwNDJENzYwQ0M0MTQ5M0EzMzk5RkNCOEY0NDJCRTIwOTU5NQorOjEwRjk0MDAwMEZDRDhBQzAwNzMzRUNDMzQzRURBNEQ1MzAwNEZDRDFGRQorOjEwRjk1MDAwNzYyOUNFMDlGNzJDREE5NzRBMEM1RkM5QzRGMzI5Qzk3NgorOjEwRjk2MDAwQzIzQ0QzRTM5OTdGRERDMUVERDUzQjA5NTkyODI3QUFENQorOjEwRjk3MDAwM0RBNkYzQUI4MzUyM0IwRjhGMTFFRjc0OTBDRTNERjE1OAorOjEwRjk4MDAwRkVBRDcwNkVBNUM5M0ZBOUNENEYzOTY5QTEwNUVGN0ZDNgorOjEwRjk5MDAwNkNEQzYzQzZGRDZCNTcwOTNCQzdFRjZBMzFBMjdEOEVGNQorOjEwRjlBMDAwQTZCNzY5NkRFNjg4NzExQ0I1QTRGNDdCMEJFODk3QTYzMQorOjEwRjlCMDAwRDQyNDgyM0Q0QzlCN0JEMjA2N0NEN0QyQTU0M0YyNURGQQorOjEwRjlDMDAwNzMwOEY2NDVBRjJCMTFCRkJCNTVDQkY0RjQ5QjEyMTc1MAorOjEwRjlEMDAwRDFGRUU5MTk5M0IxNTQ5RjM3NThFNDg4RjdDRDRGNzM5RQorOjEwRjlFMDAwQkQ1MkU1RjE0QTNBMjJERjBGOUQwNjc5M0NFRjdFRjNFNgorOjEwRjlGMDAwMUQxNzA5REVERjZGODg2Mzc0NkM4ODYzNzRFQzcyOEY4NworOjEwRkEwMDAwNEY3ODFBRTRDRDk3ODFGQUIwNTgzRDA3RTVGQjdGMzU3MgorOjEwRkExMDAwQ0Y5NDNBREU0NkFGMjk1MUE2MkFEMEIwNjA4QTE5RDZEMworOjEwRkEyMDAwODkxNEUyOUEzQzFCOTQ3NUEzNDJFMDNCQTJDN0JDM0JGRAorOjEwRkEzMDAwMTJGMzMxOEU2RDEyRUZGOURBRDlCREUxQ0YzNzE2RTA0RQorOjEwRkE0MDAwNzdERUE5NjQ4RDc5MzBBNTQ3NTk4OUNFMDlGMTgzRjMxMgorOjEwRkE1MDAwMEJERUI3RTlBODNDMkRFOEQzOUEwM0YyRkJCQUUyMjYwNQorOjEwRkE2MDAwRjYzMTE4RUFDMkZEQzk5MjUyODMzRjQwRjk5NkRDNDA1NAorOjEwRkE3MDAwMEQwNUE1Q0I3RjAzRDg1QjM5QTgwMDgwMDAwMDAwMDBFRQorOjEwRkE4MDAwMUY4QjA4MDAwMDAwMDAwMDAwMEJCNTdEMEI3ODU0RDVEQgorOjEwRkE5MDAwQjVGMDNFNzNDRTNDOTI5OTI0MzM3OTRFMUVDMDA5RTFGNQorOjEwRkFBMDAwOUQxMDg3MjRCQzFGNEU5RTQ0ODgzMEJDMDQ4NUVBODA4QworOjEwRkFCMDAwMjhDRjI0ODhENkRGQjZERUNCQzQ0NEY0QTJCNzQ1RTkwQworOjEwRkFDMDAwQUZGNEQ2REI3RkIwQTJBODIwMDE4MjA2OUFBNDEzNDAyRgorOjEwRkFEMDAwRTQxMTM0MDhBOEE4QUQ1MTI5NjIwQkM5MDhFQUM1RDZCQgorOjEwRkFFMDAwN0JGREQ3NUE3QjlGQ0NDQzQ5MjJEOERFNEUzRUJGRUQ2MgorOjEwRkFGMDAwM0U4RkJERDc1RUVGQjVGNkRBODcyRUM5NzcxMzRCNjQxQworOjEwRkIwMDAwQ0NCN0Q4QzBCNjRBOEM3RDg3QkYxQjQzQUREOTZFNjBEOQorOjEwRkIxMDAwMkM4OUIxOTYzODNCQjU0RUU3MENDN0QyODRGMDdFODU3MAorOjEwRkIyMDAwNjM2OTNFNjNENUQ2RDg1QzE2ODc2RDdGM0Y4Qjg1RjFDMAorOjEwRkIzMDAwOEE1OEVBRDIwMjY4NUJBQ0FFNUE5NUIxMjU0NkFGREQ3MQorOjEwRkI0MDAwMEVDRjc3NEVCQTNDQTQ4RUUxMkZEOERGMzM5MkIxMkU4MAorOjEwRkI1MDAwMjM2Qjk0RTJCMDFGNjA2QzBDNDM1MEY4Q0ZFRDU2RUQ3MAorOjEwRkI2MDAwRDA5N0YwRkZFMUZENDQ4QjJEMjBDM0I4Q0NBMzVDRUMxMworOjEwRkI3MDAwQjBGMDQ3QkUxQjI4MUU0RDY2Q0MyODVFOTM5QURFRjg3NworOjEwRkI4MDAwNDZDQTY1MkM3NjcyMTE2MzcwREZDQTVDOEZCMjJDQjhERQorOjEwRkI5MDAwMzE4Q0E5OUUxOEM2QTJEODMzRjZGM0Q5OEMxOUYwN0QwMgorOjEwRkJBMDAwNTg0NzU3RjNCQkZEN0MwMEM3MUZGRUU1NEEwQzgzRkI5QgorOjEwRkJCMDAwMUYyOUMxMTg1NzBFNjMxNzFFM0MxNUUzQjZDMUY1MDc4MAorOjEwRkJDMDAwRTU3MjNGRjQ2RjQ3NDBDNjg3RjA5MjZGODcwQkEzMTkyOQorOjEwRkJEMDAwN0JDNEVFMTk4MUVCQkE2M0REN0Y4RkYxREE0MkY3RDk4RQorOjEwRkJFMDAwMDM3MDMxOTVCMTE1N0UxOUU3RTZGMEMyN0ZBQkI2NTlDNworOjEwRkJGMDAwMTlCMzg0RkE5NUY1MDkxMTdEQzAxOEUxQjVEMkNDRDZCOAorOjEwRkMwMDAwRDREQjdBRDI2MzA1RDIwM0U2NURCMTdEOEIyOTVEQzU3NQorOjEwRkMxMDAwRjlCRDkzRUNEMEJGQTBDMEFCODBFRjBCMEQzMTdFNUY4MAorOjEwRkMyMDAwNjYwODlFMjVEQjQ3OTlEMkUxRDY0NzRENjYxNjgwNzU1QQorOjEwRkMzMDAwMzBBNUREQzg2Qzg0QjUwQTA5RjBFNjE1NzhEM0MzNzkyMAorOjEwRkM0MDAwQjhDNTRBRTNEREY1N0Y2NUJGMTk5NkJBMThFNjdBMjA5NAorOjEwRkM1MDAwMUU5RTZGNUE1MUMxNzI3QkFFRTNBRTNGQTg2NTI5NDAyQworOjEwRkM2MDAwQkNCQkZFNEQ2MjNFOTUzRkZGNjAxRTNDRkZDMDIzNUY2NAorOjEwRkM3MDAwMjBEREY0RUI1Q0VDMzM3RUQyMTFCMTZFMzc2MzAwQ0Y0NAorOjEwRkM4MDAwMzI0MUVGM0IxRjhEQkNCRkFDRTkzMTFBNjcyOUYzOUFCMworOjEwRkM5MDAwOTA5RTc3NkRENERGQkZFOTMzRTRCQjY1NEMwOTVEMDcwNworOjEwRkNBMDAwM0M1QzNFOTI2NTQ1M0NEQzYxOEY0OTNDMEYyMDAzOEZGNAorOjEwRkNCMDAwOERGRDBFREVERjdENjQ2MDlDMzdBNzI3N0VCNUY2RTIwMgorOjEwRkNDMDAwM0FFMDZGMzM2MzdGNUU2N0ExRjZDMjNBNDZFRDA4QkI0OAorOjEwRkNEMDAwNEFGNDU5REQ3NEYyN0VFNEFGQUFDNjVEMjYxQ0E3QzVCRQorOjEwRkNFMDAwRkZBNzg0MDlGMDQ4NjFEMzM3MzIzMjU3MjE3M0RGN0I5NQorOjEwRkNGMDAwMEVGMEY5MjMyNkIzRUYwMDdGQkIxOUU3OUZGNTQ2Q0YzRgorOjEwRkQwMDAwM0Q0OEFGMUJBRjk2RDM3REZERkExNzY5RkM3RjI0OUU1QgorOjEwRkQxMDAwRjg2NzExQUUzQjE3QUYyQjVGRjZCNkFFOUZFMkJBODAyNQorOjEwRkQyMDAwOUZEOTU4NTg5NzdDRkRFQkQyRDZBM0FENEZCQjVGMjkyNgorOjEwRkQzMDAwMDNERkY1RjJCRUM2RUYyMzg0M0U1OEZBRENBQ0Y1Njk2QQorOjEwRkQ0MDAwODA4QURBRTZDRkZBNzcxMDNGQjFEMzI4QkYxQTNGMkQ2OQorOjEwRkQ1MDAwMTM3NEQyRjM4RDQ2Qzc2RUZFNjhGQTc3NUE5RjQ2M0ZGQQorOjEwRkQ2MDAwRTA3RkE3QzE4OTZEQzA2OTE4RDc5MzRGRjQ3Q0ExRTdFNAorOjEwRkQ3MDAwODM0RTYzNDc3Rjk0NUYzRDFGNzQ0QTZDNDE2RkVCRkE3QgorOjEwRkQ4MDAwMzdGQjQwNUFENzUyRDU1RDY2ODdGQjc3MzFDRjdBM0IzOAorOjEwRkQ5MDAwQUQ2NzIzNURCRkEwNkMzQ0ZDMzM5NEFCRTczODVGNzc2NQorOjEwRkRBMDAwRUIzOTMzOTczNzc2RENFODQ3QkRCOTM2NDY0RDcxRDgyNQorOjEwRkRCMDAwMDRGRDgwQ0U5REJCQ0MzRTdDNEU5QkU3RkMzQUI3N0JERQorOjEwRkRDMDAwOTAxMUYxNUU0RUVEOUZENzc5REM4MzA2ODdFRURGRkQ2MworOjEwRkREMDAwQUIyQkIxMkFCQ0RGMzU4Qzk1QTNEQzc3QzY0NEMyQkIwNAorOjEwRkRFMDAwQ0YyRTEzM0NGQjkwMEVDODdGNEFGQkZGN0M4MDNBRTk4NAorOjEwRkRGMDAwQjlGNjMxQTg0N0NGN0ZGQjVGQjExRTc4QkVFQjVCNzNDRQorOjEwRkUwMDAwNzk2RkVCM0MyREU4MDdFQUU1QjQxM0Y4RUM3NjIxNjc0RgorOjEwRkUxMDAwQjczNzU1MTI1RDk2M0MzM0NCODRGQ0NDMUVFMEY4QjQ2QQorOjEwRkUyMDAwQzAxRkVBRDdCNkE4RDg2NzcxMUQ4QjFCMjREMjIzN0FDRQorOjEwRkUzMDAwN0FEQ0U1OUFGQTM5RUFEQjNCRkQ4NUY0N0UwRkZBQjAwRAorOjEwRkU0MDAwQzc4OUJFNzcyMTNEODY4NUU4MzFENkExNzI3ODU0RjhGRQorOjEwRkU1MDAwMDNCRUI5NDNGMENENzk2NThEQzkwMDdBRTRGQzMzODBFNworOjEwRkU2MDAwNkYwMDc5OTVDMkRDQkRFOUMxRkUwRUNFODc3REFENDczRQorOjEwRkU3MDAwQkY4RUJFRTA1RkY2NUNDREZBMzQ4NkVCMUY2NTRBRUJDMQorOjEwRkU4MDAwNDVFRjY4RUJCRjhCQjk2MjQ5RUY4OEY1QjI4RTFCNDkyRAorOjEwRkU5MDAwNUVBQjJEN0M1RTZEOUQyQjlBRUU5QzgxN0M1MUI1MTlERAorOjEwRkVBMDAwRTg5NUQ5NzNEREE4NzcxN0Y3MDI2Rjk5N0NEMTY4ODEzRgorOjEwRkVCMDAwRjdCQTFFOTA1Q0E4NkZGQkEyODNBNjI3RUUxMkY4NUEzMQorOjEwRkVDMDAwQjk2REYxMEMzNDlBOEI2MTNFMzkxM0Y1RDExNzZGQzZCOQorOjEwRkVEMDAwMjRBMjVDNDE1RkZBMUU3QTM1QzkxRjlCNzExRDhDRTMxOQorOjEwRkVFMDAwN0IwOUUwN0I4Mzc0RkRGNDVCQjZCOUQwM0QyOEVDQjlBNworOjEwRkVGMDAwMTVGRTlCREM4M0MyRjU5OThFQUU2Q0RCQUNEMEYzNjQ0RgorOjEwRkYwMDAwQjdERDI2QjRDN0YxMEVBMUJGODQ1RUVFNUJCRTYwRTEzMworOjEwRkYxMDAwMDBFN0RBMUQwRUIyNkY2QzhEODNGNDYzNzVEMzE2NTM1MAorOjEwRkYyMDAwQjhEREQ1RTQ0QjkzQjdCMTBFM0JGMTU5NTVFMzEzRjQ2QgorOjEwRkYzMDAwMUNFODVGRDUwMUZENEE0QkM3Q0Y2RjU1QzNGMDM5NEU2MgorOjEwRkY0MDAwRDA1MUFFMzBBMUZFRUU0QjdGODJCRUY5QjIyMzZDOUQ0NAorOjEwRkY1MDAwMjMxQ0MyQUUwOEZEN0IyREZEQTBDMUFEMUY1N0QzMDdFQQorOjEwRkY2MDAwMUFEQzFBREY2QkVCRDFGMzdENUZGMEU5RTlDMjk4OUZGMQorOjEwRkY3MDAwRkIwQjNBRkFBQzQyN0E4NEY1MTE1RTA1RjBEQkQ2NkNFNQorOjEwRkY4MDAwRjUzRjA0RjBCNjQ5MUM3RTVGNzMxNEMxREZFOTJDNzY5RgorOjEwRkY5MDAwOUYwMzNGQUYyQTc1MjFCNTI3RjBDNTU0RjRFQjNDRDMzRQorOjEwRkZBMDAwMTA5RjlBM0ZDNzBBMTIyMkZDMjQ3REFCRjkzNzc5QzIxMQorOjEwRkZCMDAwOUZEQTFCRTVDRTA3MTMwOTNGNEYwMkYyQzM5NDlBOEVENgorOjEwRkZDMDAwMzkxNjIwRDlBRDhFRURFNTBBOEMzRkU1ODk4RTM5NTE4MQorOjEwRkZEMDAwRDA1RkU4RDhDMUZCNUIzQjRFNTk1QzhDRDVCMDU3Q0FBQgorOjEwRkZFMDAwNEJBMDdGM0JBMDEzQzdCQjU2NUI2MEY2MkM0NEY5NUQ2QQorOjEwRkZGMDAwMEQ3RTkyMDVFQ0QxRUFEMzQzMEVBMURDQUQ2RUFGMjhBNQorOjAyMDAwMDAyMjAwMERDCis6MTAwMDAwMDA5N0MwRUVBQzA2ODMyMzgxM0RBQTc0QzcwNkFDQjlENDcxCis6MTAwMDEwMDA2NzEzRTBCOUU3RURERTY1QzQyRjU3RUJDODZFQUQzRTYwCis6MTAwMDIwMDBBRDcwQjkzOTkyNDhFQjU3MDBGNjI4NzhBRjJFMUFGQzFDCis6MTAwMDMwMDA1NUMwNTc1REJDQzU1NTlCNDlENzdENTFGMUQ4NzdBQkFECis6MTAwMDQwMDA2QUQ4NzU4RDFFRjgxRUMyNTE2NzYwNkUwN0I0QUQ0NzQxCis6MTAwMDUwMDA4N0M0NzU3QzhGREQ2RTVEQzcyQTE0RTA4MzgzRUIyQzJCCis6MTAwMDYwMDBENEVBRUYxNzlBRUM4M0QwRUUxNTFBOThCNzM3N0RGOURBCis6MTAwMDcwMDBBNDgzRkI4REMwRTRFOTQ4RTdBQTIzMjY5Mjc3RkNBMTdDCis6MTAwMDgwMDAxRjU4MjlGNDUxMTUxMDI4MEVFMEE5M0NDRDAyRDFCMTFBCis6MTAwMDkwMDBGODVDRDlFNzBBQjYwRDEyRkIyNEMyNUY2MUExQkVEQzkxCis6MTAwMEEwMDAzN0RDRDdEQjU2RTE3ODgzQzNGOTg0RTNBOTQ4OTEyQThBCis6MTAwMEIwMDA5NEIwNzk0QjZDNTExMTdEMzlDNTMwMENEN0MzRTQ2OENECis6MTAwMEMwMDBENzU2QzBBRjlDNkU1OEIzMUJENjJGMEY4MDE2RjBBMTI5Cis6MTAwMEQwMDBEODVERjI2MjY4MzcxNjRGOTE5NzQwNUI2QkU0NzZCNTU2Cis6MTAwMEUwMDBENkMwOTY4N0UzRTkwNTgxMUZBREZEQzBFMUQ5OEE3NENBCis6MTAwMEYwMDBCRkY0NTZGQjE4MkJFOUFCMEMzQkM5Qjk1ODZGQURFNDA0Cis6MTAwMTAwMDAwQTUwRENENENBNUM1QkUxNUE5REVDNjE5QzhGRUIxOTEwCis6MTAwMTEwMDBGMkYxMUI2MjFDOTdEOUIwNDcwNTdFNkQ3NDdDNDBGQ0UwCis6MTAwMTIwMDBFQjhBMzNEQzlCMDlGREMwMTMxRkYxN0VCQUUxNEEyNjNFCis6MTAwMTMwMDBGMEY3ODEyNzNBQ0ExNTkwMDc1N0I2RTFDQTQwRTgxRjgxCis6MTAwMTQwMDA3QUUyNjM3RTdGMjIwQzA5MDZFQUYwMTM5Rjk0RkI2QzJGCis6MTAwMTUwMDAzODJFRDc2NzZDQkIzQjFCRTc1MTBDMTJDOUE5NzJDMDg0Cis6MTAwMTYwMDBFNEFGODVGRkFEOEJFNUZDNTQwNzNDODJGQ0Y3ODZCMDFECis6MTAwMTcwMDBCM0VCNkI4QTVFQjYwMkZGMkI0NTZFNzUwRDhDRTNDNzQxCis6MTAwMTgwMDA4MDY5RjRERkRGNkE3ODk0QUQwNjhBNTNCMDQ1N0NCRjlFCis6MTAwMTkwMDAyOUQ2QUREMTgxMzVCOEIzNjdBMTVFQTg3NzY3Q0Y4RTc4Cis6MTAwMUEwMDA0MUJDN0E0RjIyNUVGM0RCREFBN0EwM0U2RTc4RkJGREZFCis6MTAwMUIwMDAzMUU4QUYyMkJENzA5Q0ZDMzY4OERENjAzRDk3NUVFQjc4Cis6MTAwMUMwMDBCNzQ1MEU4QjQ3M0Y3MDE0QkVFMzAwMzk5NkRDREM5RkM5Cis6MTAwMUQwMDA5NDU0M0I1QjA0NzI1N0VCNjZBQTA5RDY5NUEyOEJFQjRECis6MTAwMUUwMDAxQTE4RDcyRkNGREIzRDdGQzRGNzU4NDY4MEVDNERBMUJFCis6MTAwMUYwMDBDM0ZCMzFDRUFGOEY1NzU5N0I3Q0FGN0E1OUFGQjc0QzI5Cis6MTAwMjAwMDBCOTBGQzhFOEU3QzRBNzM3QkVCNzA0RjVGQkVGQ0RBRTFBCis6MTAwMjEwMDBDMTJBQzJFNTY2MEYwMDNDM0IwRDRDNjFGMUM0MjZDMzA4Cis6MTAwMjIwMDA5NDAyOEMzRkEzNUQxQjUwRUU1RENDRTkwMzM5QzMzMEQzCis6MTAwMjMwMDA4RDgwODQ1RkUyOThCMEI4NTVBQzA3REUyRjYxRDA4RTE4Cis6MTAwMjQwMDA0NUY4NkVBMEY1QzlDODU3QTM5ODQ3NDZGRDM1ODZGOTBECis6MTAwMjUwMDBBREQ4NzYzNUJGRTY0NEJDM0QxOUM1RUU0MEJGQ0ZCMjQwCis6MTAwMjYwMDA4REI5RkQ2MUZBNjM0MDNDRjdGNzI2MjUxODA5RUU2ODYxCis6MTAwMjcwMDA2M0ZENkNFNEQ3RTgyRjk4MURGREFBQUVGRjM0MjkzODQyCis6MTAwMjgwMDAzRTA4Qzg3NEJDRUUzQTZDNjAwOEU3MEI0NkJGM0QwRUYyCis6MTAwMjkwMDBGQUMxRTE4QUZBMkMwQjhERDcyNUU4QUQ4REZCQTQ0OTc0Cis6MTAwMkEwMDAxREVFNDA3RDkzQzBGQjJGMTQ3MkZCMUNGQ0RDRTQ3RjMxCis6MTAwMkIwMDAzNjEzRjE2MzU5RTMwRjkzMkY2NzNDRjc1QkJENDk0NTU0Cis6MTAwMkMwMDBGMUYxRDBENjM3NDczMzlDN0Y2QzRCQjQwMUU5RjBGMkEzCis6MTAwMkQwMDBGNkJDMjhFNDg3OUQ4ODFCNTg3RkJDRDk3RTBGOEUxN0ZCCis6MTAwMkUwMDA3RjA1RTBDREE0RUI2RUMyQUJBMjhFOEEwM0JDNEU5ODE0Cis6MTAwMkYwMDA2NjUzMzcwMERFNUY4OEFBOUY4NkZDMUZEQzYxNjBDRkYzCis6MTAwMzAwMDBDMjE0M0I0REFFNTlEOERGNzk1OUI1QTNCRTdEMjFCMzk4Cis6MTAwMzEwMDAzRTlBRDZCM0MzNDBFQkQ5MTkxRDFDQjExNkUwREUzMEFFCis6MTAwMzIwMDA0QzI5NDdGODE0MkI1MzUwMEYyQjg2MjJGNTFFQjgzRTRDCis6MTAwMzMwMDAzNDlFREI1NzREMkYyRjg4RTdGMkYzQTQwNEYzRTdFMTU3Cis6MTAwMzQwMDA3Mzg1MjQzRkE1QjI4REU0QUUyQkM4RkM2Njk4Mjc2OTVGCis6MTAwMzUwMDA2RUJCOENGNDg4OUUwNUFDODQ3Q0FGMDQ2NDA2RkQ0OUJBCis6MTAwMzYwMDAxRTQ2NDk4RDQ5MzZBMzVGMjU3REVCQjYyRDA2QkE0RjUzCis6MTAwMzcwMDAxMUZBNzZDQTg3QUIyQjc4RENFMzNBM0QxMUM2M0I2OEFECis6MTAwMzgwMDAzMzMyNUNENzY0RDYyMUEzM0YzOEY5MkE3MzA1OTA3RkI2Cis6MTAwMzkwMDBBRUYyNzhDNjBFN0ZFODNGM0RBRkYzMDc0QkM1NzhFRTZGCis6MTAwM0EwMDBBMEJEMDQyRjE3QjI0ODNGQUU3NDczRDlFNzEyQ0RBMzk2Cis6MTAwM0IwMDAyQTY4QTc4QjJEQkFGQkU4RTdDNTYyMUIxOTM3OTVDNURDCis6MTAwM0MwMDAwQkZGQTYzRkVCRkYxREU5MzdFMDVFOThFRjNFM0I5RjNBCis6MTAwM0QwMDBBRjU0Q0VGOTE1QUVBRkFCRENFNDQyM0NFQ0IyQjlERkMyCis6MTAwM0UwMDA5RDg4N0FCMUREQzhCNkIyQkVFNUU5Nzk4ODNGRkRFMDA3Cis6MTAwM0YwMDA3MzBDQkI2QTY1RkU3Q0UyNDcxQkFFNjdDNEU2OERCRTJDCis6MTAwNDAwMDAyODU4Rjc4ODQxN0M3Q0U0M0JENDIzNDNGRjMzMzEwMUY3Cis6MTAwNDEwMDBGNUY4NTVBMTVGQjQ1NkUzMzNFNDI3N0IxQ0U3MjdGQkNGCis6MTAwNDIwMDAwRDIxMzlCQzMzM0U5MzlFRDNFNDBBRjkwQ0M3RDk2RjMyCis6MTAwNDMwMDBGNDJGRjRGNDYyMjc4MTNGRUY0NEZFREM2NTYzMTQ0NzM4Cis6MTAwNDQwMDAzRDk2NkE1OTgwNzJBNUNERjNCQ0UwNjM3REJCQkU2NjY0Cis6MTAwNDUwMDA2REFCMTFEN0ZEMTVEODAzODBCQjI0RURBQTI5REM5RTE2Cis6MTAwNDYwMDBFRjQ5RTI3QzU1MkE3RjRCRkU3NjY3OTNDNEQwQ0Y0RjhECis6MTAwNDcwMDA2RUUyRkEzQjlDM0Y1MjdCRTc4RjVGMjI1RUFGQzUxRjY3Cis6MTAwNDgwMDA1QUJDQjBGQjg3RjJDNzkxQkY4RjNGMzY1QzkzM0ZCRTJCCis6MTAwNDkwMDA4RDQ1M0NEQ0Q3NUM5Q0MyQkVDN0JGNjkxNEZDRDBENzdECis6MTAwNEEwMDBGREYxNTZBRUU3RjRENzVGMTE3OERENjdEQTM4M0QxNzE2Cis6MTAwNEIwMDBGNUMwQ0QwNjE3Q0EzOTUwM0Y3RDM2QUM2MzVGMzQ3RjM3Cis6MTAwNEMwMDA4RjI5NkJCMkIwQkY0QkUxN0E2NTU3OTM5OUY0Q0EyRTZFCis6MTAwNEQwMDA5QkQ3NEI3NkRDNjk2MUU4M0YzMEM1REJGMTMzRDQ4N0NECis6MTAwNEUwMDA2OTE2NzU0MzE4RkYyRThERTdGQzU2NkYwQzhDRkYwQ0I4Cis6MTAwNEYwMDBGREUyQTM5Q0NFRTM2RUNFOTM0REYwNUNFQTUyMkVFNzc0Cis6MTAwNTAwMDAwNTE3NEM1QjMwMEUyQjREMjhEQzgxN0M3NDAyNzUxNjcwCis6MTAwNTEwMDBCNEQ1RTdFMDI5NDA3Q0Q1MzkxM0U5QkJENzVBNEU5NkNDCis6MTAwNTIwMDA2MTdFMTFGQzFFMzdGMkQ5RDhGRDI3Q0I4QTcyRjA3OTkzCis6MTAwNTMwMDBBRTRGRjc4QTU2RUI4RkM3MzVDNUIzRUU3OEQ3MjNFQ0FECis6MTAwNTQwMDBDNjc4QzZGNTkyMDdGOTI0MzdENDY3NkUyM0M1NkIxQUFGCis6MTAwNTUwMDAzRkQ0NDcwMzNGODA1Q0NDNjdBQTMxMTY4NjlDNzNDRTlDCis6MTAwNTYwMDBGMzMwOTg0MzM2QTczQzkyQ0VGMzAzRDMyODNFOUM3QkNFCis6MTAwNTcwMDBCQUZENTVEMENDNkM5RTQ3Nzc1RkYwQzE3QzFEMUY4MEMzCis6MTAwNTgwMDA5RDNEMUU4RkZFRDJGMTgwQzk4MEYzOTlENjY0NzM3RkEyCis6MTAwNTkwMDA2ODREMTZGMjkzMjY0RkY0MDMzQ0Q1RkY2MUQ4QjMxQjg4Cis6MTAwNUEwMDBDMkVDN0I2QzAyOTdBM0M3NUQwQURERjc3NTk4RkM4M0VDCis6MTAwNUIwMDBFMUQyQkYzM0ZFNUVCREIwM0Y5RkEzM0M2M0ZDNzBERjYyCis6MTAwNUMwMDAyQjBCRDE4RUU2MkY3NzFGNDRGQzRGNEY5MkU5RkEyRjY5Cis6MTAwNUQwMDA1OEMwOTI4NUY0NzEyOUU0OTdENTFCRDVFMkNGQTREMEY5Cis6MTAwNUUwMDA3MzRDRjEwQ0IzQzFGREZENDlEMUY5Mzg3RjY5ODJGNzM1Cis6MTAwNUYwMDAyMkQyODkyOUMxMjNGOERFRDgwOTc5RjkyODVGQjY1MUJBCis6MTAwNjAwMDA3NTA5Njg4RjM0QjgwMUFFRjJBREI2MTAxQzFBNUM2NzdDCis6MTAwNjEwMDAwNTVGOTQyNjJDQkU4OEVCQzdGNzUwQkYzNDdFN0NERTg2Cis6MTAwNjIwMDA4MkVGNkI3NEFGNkZGRTgyRDMzQjhDRkU0OEVGMTBGRDAwCis6MTAwNjMwMDBBNTNCQjBBRkUxRTEyQkExNTdCNEZFM0Y0QTdGMkQ3RjMwCis6MTAwNjQwMDA3MDRERkE2MzdFMjBGNkVGQTJCRjM1MjEyOTQ0N0ZGMDdBCis6MTAwNjUwMDBCM0UyQjFBRkY3QjNFQTRERTA3N0U3RjRCQzVFRTgyODY4Cis6MTAwNjYwMDBBNEU3NUQyNjU4MjFGQTU1MkQxMDc3QTIzQzdBMURCNEQ3Cis6MTAwNjcwMDAyRkIwQzdDRUU3RUFGQUMzRjlGRUUwMjJCMkMxMDlGMTEyCis6MTAwNjgwMDA4NEY3NkE1MzcwMDhGQTIxQTMwMjEyRjk4NUEzNDBGMDk3Cis6MTAwNjkwMDAxNzkxRkY5NTQxN0FDRjI1RjBDNENFNEJEMkY5NjFEQzlBCis6MTAwNkEwMDA0NUZGMkUxREZEQzM0MDAyRkE1MUEzQ0MxNTAxRTRGNzBFCis6MTAwNkIwMDBEREQ2MjlFOUU4RDdFNTU5Mjc2NTIxNUZCRDNBRUNCRUNCCis6MTAwNkMwMDBFMzY4ODI1RTRENUJCRUU3MzkzNUU0RkY2OEZBRURBMDcyCis6MTAwNkQwMDAxODU2OUJCRjIwODFFQkExMUI0MUREQTIxRjg4MkU2MzEyCis6MTAwNkUwMDAzODFDOUEzRTQ3RjIyMDFDNTI2MEJFRTEzQjJCRTlFNUU0Cis6MTAwNkYwMDBBNjBFQTBDNzhEMDgwN0UwQTE1NTYyMERBOENGMEIwRDZGCis6MTAwNzAwMDBFRUM0NjJGNEQzOTIwMjBBRjdGN0JFRTk4RkY5QzE4QTA4Cis6MTAwNzEwMDBBNjM3REU0Mzc4MkI3MDNGMDRFMzUwOTdGMTYyNzczRUIzCis6MTAwNzIwMDA2MjYwNEYzRjU4RjM1N0I0Qjg0MEYzNjdCNEY4MTNGRDE1Cis6MTAwNzMwMDAxRUJDM0Y0MDVDQjc5QjAxNDBCNDQ3MDE4QkJGMDZFNjNGCis6MTAwNzQwMDA3RkYyQjIzQURDMkRFNDU2ODE3NTU0ODg3NUNDNjRFREE1Cis6MTAwNzUwMDAwNDE3RkJGNkJCRUYyNjAxN0Q2NjA4N0M1NDFDODFCOEFDCis6MTAwNzYwMDAzMTE3RUYzMzc2MzNFMEUxNjY4NUM3OTMzN0JCMjA3RUUwCis6MTAwNzcwMDAwQ0UzQTM5OUUzMjJGQkY4OUI5MjFDMUFFNzVBQ0ZFQkY4Cis6MTAwNzgwMDBFREMwNDREREZFQ0MzRkRBMUUwMTdCRjQwOUI4Q0VDN0Q0Cis6MTAwNzkwMDBENkYxQjg3NEMyNDBEOUE3QTBFMTFDOTc2OTQwN0VBQ0RECis6MTAwN0EwMDAxNkY2MERDMkU4NUVFREQyNEJDMjJGOUU2MEU4Qzg3NTBBCis6MTAwN0IwMDAwMTdFNUJGN0ZGOERFQ0UwODFGRDdGN0IwN0ZEQkNGMUU3Cis6MTAwN0MwMDA5RjJCQ0MwQ0VGNEZGOEJDMjAwRUY1MDQxQkE3MTI1RjNCCis6MTAwN0QwMDA2OUUzNTZGRkE5QzFDQUY4NzVFMkZGMkFCMUY2QzMwMDYyCis6MTAwN0UwMDA4RjdCMjhDMjY3QTFGNjc3MTc5RkRDODRFMzdENzk0RTYzCis6MTAwN0YwMDBFMUJDMkRFNjJGMzM3OTA3NjExRUJCQ0NDNEYzMDE4NzIyCis6MTAwODAwMDAyNUVFRkY2OEY3MEYxQjAxNkVCOEJFMjk0MUNCMEJCNDc0Cis6MTAwODEwMDA5M0REQzc5RjM5OENDRTM3NjMzRTIwMkY0NEQ3OUIyRjYzCis6MTAwODIwMDA5NDdGQUVFNEY2QTQwRkZFRkUzN0YyMDE1QTFFNjBBQkQxCis6MTAwODMwMDBDMDFGM0I3OEQ2QTQwMjVDNTMxQkVFNTFEMEJGOUVFQThBCis6MTAwODQwMDA5NDk5M0I2Q0RFOUI1NDJCNzM4N0U1MDM5RTQ5RDBGOTRBCis6MTAwODUwMDAyMzA3NUZEQzM0MDNFQzQ5NzU5QkVDOEE0Mjc5NkREQTNGCis6MTAwODYwMDA3NTNDMTdGQkVEQjJDQkRBMEIxRkU5RjEzQkI1RTkxRTg2Cis6MTAwODcwMDAwNUY5REY5OEE4OTI3QzVGNkJGRTA5MjM4MDRGNkU0MERDCis6MTAwODgwMDBCQTMzRjJFQjNBQzc0ODI0NDc3QUZBMUVEOEZGRUI4NDEyCis6MTAwODkwMDA4RTlDQkVGMUREMTdGREY1NzRGOEREQzUyMkRBRUZCOUU3Cis6MTAwOEEwMDAxNjNERjQ3Q0RCMDJFQkY0QzFGQTAyQjA0RTFGRjg1RDlBCis6MTAwOEIwMDAwN0Q2RDlBOTdGNjg5RDkzRkExQUJGNTYzN0ZGMzYwMTJDCis6MTAwOEMwMDBGRDM2OEQ0RjRCMTMzOERGOENERkI3Mjk4MUQ5NDJGNEM5Cis6MTAwOEQwMDBEMkYwRjVBMUIwNTc3QkEzMzQ3RkMzMzU2RjA2NUMzQUU1Cis6MTAwOEUwMDAwNTc2ODcxOEQ0QzdEQTlENjM0MkY2NkJGRUU5MzJGMkNCCis6MTAwOEYwMDAzNzM0RkIzNTVGNUU1NDRBNkE1M0Q4MkY0QzIzQTM1RUNFCis6MTAwOTAwMDBEM0RCQTlCOUVBNjIyM0VCQ0QzRTJEODhFQzk3Qjc2RDE2Cis6MTAwOTEwMDA1NDYyQTg2NzIwM0E0OTkyQzA4N0YwQjMzNTM4Q0UzMDg4Cis6MTAwOTIwMDAwRkMxQTlBN0E3MDY5NzFFMUU2RDdEOUE3RjNENUZEMEI4Cis6MTAwOTMwMDA2RkNFQTA0QzIzQzJERkMzQUU4QTc1RTI0MDk4ODdCODYxCis6MTAwOTQwMDA1RUJCRkFCNThFOUZBRjVDMjg3OTJCQjcxN0JFRUQ4QkQ3Cis6MTAwOTUwMDA3RkY1RjczNTdENTA4NjEzRTQ1MUVCNDNCRkMyOTg5ODdECis6MTAwOTYwMDA0Qzc0MkJCQjZBNjI2RUIwMUIyQzIzOEE3RDFBNjY1N0FGCis6MTAwOTcwMDA1OEM1NTBFMjlGN0I4NTFERUU4QjdGQUFBRUNBQ0M5QkVCCis6MTAwOTgwMDAxRkUyMjM2M0UzMTM1NkU0QTM3RENBNDYyQkU2MjcyNzIxCis6MTAwOTkwMDBEQjY2RDVDNjAxOUU0QUZFNTQzNDE3RkRCQ0VBMEUwMzQxCis6MTAwOUEwMDBDMzE0NTY2OUQzMTcwNzMxQUVBRjdFOEZCOTUwMkYxNkQ3Cis6MTAwOUIwMDAzNUI1MTYyM0RGMUQ1MkRBNjU4QUIzQkY2NEVDODkzMDgyCis6MTAwOUMwMDA3RkIxQjFBOUQ2OEFGRTU0NjNBMjRDNzFGQzYxMDdFN0RFCis6MTAwOUQwMDA0QkVERkU5NjQ0QUUzRjFBQ0Y1RDlFRTFFRUU1RkUxOTZCCis6MTAwOUUwMDA3MUJGRTRFMzNDRTJBM0IyNDc0MUFFMzEwRTREOEFBMUIwCis6MTAwOUYwMDBCQzQ0ODk2NDlGNTM4MTdFQzg0RDQ2RjJGMzIxOEVGOTMxCis6MTAwQTAwMDAyM0VFMDM1RTZBMzRFRkMyRDQ3RTY5RTMyM0Y3RDg4MTE0Cis6MTAwQTEwMDAxMEY1RkZGRDY5OEQxOUYzMEJCMzI0RDdCM0YwNUM5OTgyCis6MTAwQTIwMDAxQTZDQzU3RUQ5REM0Q0FBN0IxOEZCM0YzMkY5QjNDMUU2Cis6MTAwQTMwMDA1QjI1Q0E4Qjk0MDFCQjYwQkY2QzUxQTYxRkYzMTNGQkVGCis6MTAwQTQwMDAyNURFRjczNUYzN0QwMjY2RjcyNUNDODA3OURFQUU0OEVBCis6MTAwQTUwMDAxOEI1ODE3ODRBRUIwRkNFREJDMDA0MjM4N0M1NTdGNzYyCis6MTAwQTYwMDBFRDk1NDlDRkRDNTcyQUY5NzFCRkE5RDQ5RUNFN0M2MUEwCis6MTAwQTcwMDA3QzU1RjZBODg5RDYzNUJCMjlBNTA4Rjk3ODRFQjlDQzlFCis6MTAwQTgwMDBGQzYxRkMxRDEwN0VFMTNDMEZDNEUxNjFFRjFEOEVFMkI0Cis6MTAwQTkwMDA3MDA1MTcwM0RDNTI0ODZFQTcwOTNFOUZDNUI4OUYzODAyCis6MTAwQUEwMDA3RjQxNDJDNDdCRjBDNjJENjg4RjZFNkQ4MjM4MTU3QTA3Cis6MTAwQUIwMDBEMzQ0RkM3QUFCMzczRDYyNUUwRkUzN0VDRDA5MTYyQzQyCis6MTAwQUMwMDA4OTgzRjFGQjI1MEQyNEZFOUIxMUI0OEYwRUE4QTg3NzE2Cis6MTAwQUQwMDBDRTI0QTI1RTYzQzNCODlDNjg3MjU3MkFBRkFFMjM3RTUxCis6MTAwQUUwMDA3MEYyN0RCMjc5MTI0ODkzOENGQTJGNTI5RTY2OEU4QkVCCis6MTAwQUYwMDBFQ0NGNzJGN0E4Mzc4ODkwN0ZCRDVFRDdFNDdFNUVCM0Y3Cis6MTAwQjAwMDA0Q0ZCNzJGMzBBMjUxN0VCNDUzRkU4RkRFQ0IxRDE3REI0Cis6MTAwQjEwMDBFODg1NkZENTg3RTM3QUQzMEIxRjk2RkY1RDdBRTEzNUMxCis6MTAwQjIwMDAwODJCQzY4MUZDRkUzNDUxRTg4NzdFQUMxRkVBODc1MjUxCis6MTAwQjMwMDA3OUZCMjZFNDk3MkVCMDc3RTY1RUY4NDVCMzE3NUEzQzZBCis6MTAwQjQwMDA1RTA2RjI0QUYyN0U5MUVGNjc5NDVFNEQ2NUJFRkM1MDAwCis6MTAwQjUwMDAzQ0RFQUQyRkMwOUY3MEY1RTJFNzNDOUQ5ODQ1NzJENDE2Cis6MTAwQjYwMDBBRDVGMzRGRDExRTY0RjE4QzdGQ0UzRkU0NDI5Rjg5MTUwCis6MTAwQjcwMDBBNjNDODQyRjgzRTAyQjYzM0MxRjU4ODY4NTQzOTg5N0JGCis6MTAwQjgwMDA3MzdFNDFGOTk2NkE4OEYzMjlERTY3QkYyNUI4NTBDRjk2Cis6MTAwQjkwMDA0OUYxMjEzOUQwRkIxOTVBNUVENzJBRjIwODdBQkVFODBBCis6MTAwQkEwMDBDRUYzQ0QzNTUyMUQ4Q0M2MTc2NTc2MkUxRjY1NzM2NTQ1Cis6MTAwQkIwMDBDQUJCRUJGOTQ0OUI0RkNGMUYwMTVENUVFNjlBRkMyMTU3Cis6MTAwQkMwMDBFNEVDODdGMjQ3NzNBMkQ4NTcxREM0MDY1RDBGNUY2ODM3Cis6MTAwQkQwMDBGQ0EwRjE4N0RFOEUxQ0QzRTU2N0ZBQjIyMzZGQTIxRDVECis6MTAwQkUwMDAxOUREQjcxRDc5N0Q5ODkxRjRCNURFN0U2OEY2RTI3NzYwCis6MTAwQkYwMDA0OTVDMkY2NzI0RjI3RDhFNjlDM0U3RDlEMEVGQjAyNjE4Cis6MTAwQzAwMDBGMTNBMERDRDBFNzVFNzk3MzY3MzdFNzhCRDYzODkyMjc0Cis6MTAwQzEwMDBBMTNENDFCRDkwMTk4NjdGOTE2RkQ1RjhBRkVBNTE4OTBBCis6MTAwQzIwMDBGMjhEMTU0MjJGNzUzNkYzRkM1Qjc1ODlFQ0I3QzBGRjZBCis6MTAwQzMwMDAxNjM3M0RCMTg5Rjc4RDk0OUYyQjU0NUExNTBCOEMzQjc5Cis6MTAwQzQwMDBEMzI1QjkzMEFGRTMxNkY5QkExOTZFODlFN0VCNUM5MTk5Cis6MTAwQzUwMDBGQkY0MkQzQUZBQ0UxMTdDMzQ5MzA1RUJEMDFGRDdFQjgxCis6MTAwQzYwMDBBNTM5NTdCOTVGQTBENzRGNzNDNEJFRkIxQ0REQkVGQkNGCis6MTAwQzcwMDA1NTREREUwN0IwMDFGRjRDN0ZDMDlDRjRGREZFODBGNkIxCis6MTAwQzgwMDBCRTQ2NDc4RDdFMkFFRUM1QTExQzFERkNDNkE0QzY3MEJCCis6MTAwQzkwMDBGRjE5RTkzN0Y1QUE0MkUzRDg5MzA0NUYwQTdGRTZDQjUwCis6MTAwQ0EwMDA4Qjc5QkZBMDk4NEYzQzVGRERGNDg1QzkzQkIyNkZGOEVDCis6MTAwQ0IwMDBBRkU1QjdDNkEyOUYzRTNBRTRCNzZCRjM0RTUzMTg0QjZECis6MTAwQ0MwMDA0N0M3NEM2NzRGNjY4OUVCM0ZENDdFMENEN0FENDNBMzMzCis6MTAwQ0QwMDA4M0E2NDc3QkUwNTlFOEQ5QkVFODc0MkQzREFCRTlCMzY0Cis6MTAwQ0UwMDA3RkI2OUVENUM2RDdFQzgwMzZBRjVFRkZGNjE1Qjc2OUU2Cis6MTAwQ0YwMDBGQTc0RkQxNjAzRTU0QjI2OEJGODc4QjJDOEMzQ0U0RkM1Cis6MTAwRDAwMDBFMkYxQzFBRDQ5M0NFRUVDRkFDQTYyNDA3QkI5QjM4NTcxCis6MTAwRDEwMDBGQjI3MkVCM0ZEMzhGQTA1QTE3QzFGQTdFN0MzMzFDQzEyCis6MTAwRDIwMDA4N0ZCRUM0QzY5QjdEMEJFNjcxMTkwMTJGNzNERDNGODQyCis6MTAwRDMwMDBCRUU3NzYyNUUwMjEzREVENTI1ODBEQzhDOTM5N0MwRjNDCis6MTAwRDQwMDBFNjc5Rjg4MDZGMjFFQUU5ODczRjE5NjJBMEZENzcyNUVGCis6MTAwRDUwMDBEMDhFRkVDOUQ4M0M4NUY2OEYxQzY2OTVGMkMxOURDRDFDCis6MTAwRDYwMDA2NjNCQkVEN0I1RUZGRkI0MUE3MTlDQUY5ODBCNDNCODgyCis6MTAwRDcwMDA0M0NERTZFRUZEMUJENDA3QTU3MjlCOENGOUZCQUUyMDlDCis6MTAwRDgwMDBDODA4M0MzRjY5NDFBMDE4RTNBMEM5QUNCRDE2RTU3QjhCCis6MTAwRDkwMDAwMkQyQjExN0ZBRkQyQTQ5OEJCMzdCQ0ZFRjE3Mzc3MzE1Cis6MTAwREEwMDAzRkFFMzg0NjI2M0Y2RThBQUZCRDE4RjdBREE2Mjg5MkYzCis6MTAwREIwMDBBQjE2OUZENUU1Rjc1RkQxQzUxRkExRkNCRUFBRjBGQTFGCis6MTAwREMwMDA0MzVERkVCRTkxRUI5OUVCQ0RFQjRGNDBERDA2N0NCQzY1Cis6MTAwREQwMDA1RUUzNzNBMTZGNTgxRkY5RkQ5RDI2QkVFRjEzM0M2OUJBCis6MTAwREUwMDA2NEU4MDdCMzBCODlCREU2NjNBRTk1RTdERkQ3MTJFRDg0Cis6MTAwREYwMDA1NjYzNzE5RjhFRkJFQkZCNUFEMkRDNkE2RURGQ0ZFNzQ2Cis6MTAwRTAwMDA3NjA0OEJEMDNDRUVEQzNFNUJBMUZBMzU5MTFGRURCMTUwCis6MTAwRTEwMDA3RkQyQzdGRTg4QkJEMTdFMDhENTY5NUZGQjIxQzU1RjQ1Cis6MTAwRTIwMDBBQTk0RjZCOTVFQkM2OTc1MEI0Q0Q0M0ZEREM4QjQ5RjdCCis6MTAwRTMwMDA5QkU0NzRFN0Y5NjgzN0YyRjlDRUYzNjk2RTg0RUI3OUQ1Cis6MTAwRTQwMDBDMUE3MUFERkVGM0I3NzM5OUFGNjQxNEQ2RTE1Rjc4RjQwCis6MTAwRTUwMDA4MzBFOEJFQjU5RTI1QkNFRUZGNUE5NDNGQ0I4NEZGQjU5Cis6MTAwRTYwMDAxQjIxMTczQkEzODNDN0IyMTNDM0Y3M0RGODNFNDdDQjAzCis6MTAwRTcwMDBCQTQ3Njc5RjMzRDI3RUI5ODRGOTQ4NkQ3RkQ5MDc3MjJDCis6MTAwRTgwMDA0Mzc1M0RGMThDRTIwRjIzQUI2NzM4NkZBRDlCRkQxQUM0Cis6MTAwRTkwMDBEQjI5OTNENDM4QzRGQkU1NDQ2RDFGNTM4REEzM0NDNEI4Cis6MTAwRUEwMDBCNzU3QThDRTUwOEZGRkRERUI5ODA3RUI1MTFBRDY1OUY0Cis6MTAwRUIwMDAzQzBBQzhGRkFCRUJFQ0Q0NkY1Q0U3QTQ3NkZGM0E5NTM1Cis6MTAwRUMwMDBEQTg3OEVDNzNFODA3NkJGREE2REYyMjg2MUZBRTM5RDNECis6MTAwRUQwMDA2NEVFNzdFNTY1N0Y1MjRDQzVERjdGNjM1NDg3M0VFNTVFCis6MTAwRUUwMDBDMTBFMTlGNUM1OEQ1NzYxMUQxMTc1MjdDQTY1QzQzNzI3Cis6MTAwRUYwMDBFNTM3QjM0MkZENEM2OTcxMENGNjZGQkMwQUZEQjBFN0YzCis6MTAwRjAwMDBBRjI0MzlCODNEQUE1M0VBNDYyNzkzQjQxMDVGRkMyREFECis6MTAwRjEwMDBDOUREOTEwNEQ3RUY3MTc4M0VDMTc2QjczNEZGRTAyNTgzCis6MTAwRjIwMDA0NkZENzNCQzdGQUI3QzA5OUVDQjBGMTQ1MjVFMzkxRjBDCis6MTAwRjMwMDBGM0NBNzkzNEVDNDJDNERGRTg1NjEzRUQ5NzZCRjlERDYwCis6MTAwRjQwMDAzQzRERkVCRThFQ0MzM0U3OEJCQ0VFQUJBQzgzRjJDRDFBCis6MTAwRjUwMDAwNTE2MDhCNDBDMDgxN0E3OUY1QjlBRTc5NDMwMUY5OEYyCis6MTAwRjYwMDA2NDcyNjFCREMzRTgyQzRGM0VFNjYzNUI5MzE4QzU0N0NFCis6MTAwRjcwMDBBREFEQzkxOTZBMEU3MjBGQ0ZGQkJBQjVCQzJGRkJGRTFGCis6MTAwRjgwMDBCQ0VGOTE4RjYyN0RBNEI3QUU5QTY4N0ZGQUM4QTk1ODZBCis6MTAwRjkwMDA1NzgwRjYwQjJERTRGRjY5RjVDODJERDFCQ0NFODA2NUQ2Cis6MTAwRkEwMDAyQ0EwM0NEMzhEQTI5RUQxNjJGNjlBOTM0OTVGMDUwRTg4Cis6MTAwRkIwMDA5RTgwRjc3RTdGOTlGMTdEQzdGNjBGNjk1RkJCRDgzMEMxCis6MTAwRkMwMDAzQzA1RUI3RTBGNEE0M0UzQjA3REVBQTNEODFDNkE0RjkxCis6MTAwRkQwMDBDNTVFNDRGQ0I0MThBQzJBQ0U3QjY2OUQ1QTgyNzU2RDAyCis6MTAwRkUwMDAyN0Q2QjExMkFDNjM3QjZCOUQ4NURBOTNFQkVDRDQ5RTc0Cis6MTAwRkYwMDA1QUU3QTRGNjc1Qjg4RUZDNzMxQzlFNDc3RTcxQkY2NUQ4Cis6MTAxMDAwMDBBMzdEOTIyOTZGRDkxNDZDRjMxNkM2NTBCQkZCQjYxODlBCis6MTAxMDEwMDAxM0MyREIxMkNCQjY2QkYzNjBCRDVBMjAzQUQwODBDOTQ1Cis6MTAxMDIwMDBGRUQ2QTdCQzhGNTlGQTgxREQzMzdCNDc0QUEzMTg2QkU0Cis6MTAxMDMwMDA3QkNBM0I1RDk5MENFMzRFRURGRjkzQUZFMEZFOUJDOThECis6MTAxMDQwMDBDQjFFQjMwMDVDNzM0RkQ5MUFEQUEwRkY3NkYyRjJDNzU5Cis6MTAxMDUwMDA2Q0E4NkY4RjQ3ODNEMkMzRjVBRTM4RUUxRTA0NzQ0MzdECis6MTAxMDYwMDBBNTkwQzYwNTk3OEQ4MzdFODJENjVGMzFCRDY0MTI2M0RECis6MTAxMDcwMDBCNzE0Nzc2NDMzNjBBREVDRTQ5NUQzMkQ4MEM3NUJBQ0Q3Cis6MTAxMDgwMDBERTFGNjNERkU0NEI5QTVFRDIwRkZCQ0M4N0Y1NjA0MTM1Cis6MTAxMDkwMDBDOTQ4NzEzRkNCOTAxMkIxRkU2NUE2QzNGQjQ2NzI1ODlBCis6MTAxMEEwMDBGRDlFNUJGQTEzRUQzMzhENzE0QkNDNDE4NzFGOENCNEUxCis6MTAxMEIwMDBFRkM1RUMxRjI3ODRDQkRCNEM0N0U5MUI0ODhGODlDOTYwCis6MTAxMEMwMDBCQzBFNzhGNDI0QzkxRDVFNUZBMTdGNkVGNDM5QjUwNEFGCis6MTAxMEQwMDBFOTM0RTY0MjU5MURCNjMzQ0IxREQ0RjcyQzE4NUI4NzkzCis6MTAxMEUwMDBGMjVDNjJFQkVCRkQ2MjdBQkYzQzk5RDc4RDE0Mjk1MjFBCis6MTAxMEYwMDA0NDVEODlGRUI5N0M2MDI2RjQ4RjgzNDdBMzI5NEYzMDc1Cis6MTAxMTAwMDBGQUI0QjcxNkVCNEY0QjlEOTk3OUIyQTZGQUE4RUZEODZGCis6MTAxMTEwMDA4MkZCNkRBMzJCQ0U5NDI0QTBGQ0Q4MjQxNzlBODkzMThFCis6MTAxMTIwMDBBQ0EzMkUwMUVFMTdEQUIxQTAwQUQ3RjU0NDMxRDZGRkYxCis6MTAxMTMwMDA4QzU2MjUxN0EyQUREMEREREE4MEVGMTdCQTYyNUM4NTM4Cis6MTAxMTQwMDBFODhGOUY1NjRCRDBGNDlDNTI0NjlEMjg4MEU3QTYwRTEwCis6MTAxMTUwMDA5MjVEMTYxOEU4NTRFMEE2ODk5N0EwNUYzODJDOEVGMkFECis6MTAxMTYwMDBCQzg1Q0E5QTJCMjdBODFGRTNBQTUxNzExRDVCN0U1RDFGCis6MTAxMTcwMDA0NUUzOThDOUFFRUY5RTUxRkMyRkM4M0Y0NTlFMzhDQTQzCis6MTAxMTgwMDAwOTAyM0U0QUMyRUJDQTYwREQwNDc3QTE1REY2NDc0OTE5Cis6MTAxMTkwMDBDOERGRkY1QTYyODdGRUVFRkUxMjk2Q0JDMzdDQzNGRjA4Cis6MTAxMUEwMDA0MkY3OEY0NEFCNTEwMEU4NkU5M0JEMDRDN0RCNkQ5MkVDCis6MTAxMUIwMDBFQzBGNTFERjUzOENDRkZCODYxODU1Q0MxRjk1MjU0NjdECis6MTAxMUMwMDA0NThDM0ZCNTQ0MUE3RjBFRTFDRjg5MUI4NUQ3Q0EzM0MyCis6MTAxMUQwMDAxQzExRjdEQjZFQjM5MjlEQTg3ODJCODdGQ0EyQjZEQkJGCis6MTAxMUUwMDBEMkM5NUU1NEJDMzVBOTA4REIzNjAzRjdEMzJCREVBQTdGCis6MTAxMUYwMDAyOEE3RkIwNjFFMDc1NzJDRkM5MTVCRjQyOUVFQUQ1ODdGCis6MTAxMjAwMDA1ODQ5RkQ1NjI5RTUyNzM4REY5NTlDQjgzQ0NDQUY0REIxCis6MTAxMjEwMDAxQjk0NUFBMjQ0Rjg4MTAzNDlGRUYzNDQ3RUFGRDAzMEI4Cis6MTAxMjIwMDA3Q0QzMjQ4MEZGREVBMzdDOUZBMjIyMjczM0UyRjkxOTFFCis6MTAxMjMwMDAwNTUyNDk3OEZEQTg2NzUyNTQ0NDdGNzY4OUEzMjRCQzlGCis6MTAxMjQwMDAwRTc1NkU0NTZBNDRGRjk2Qjk5OTExRkQ5MkEzMDU2NDI3Cis6MTAxMjUwMDBCRjQxMEY1NDk0ODAxRTM4MEFFRDUyNjBDMTAyNTEwN0ZECis6MTAxMjYwMDBBNUU1OUYwQTA1NEIxNUI2OEJCQ0FDQzJFM0VCNjFGMDVDCis6MTAxMjcwMDA4NzdBQjBDNDE2NjlBNzc3NDc3MzNCNUZDRUQ2RDAwNjhFCis6MTAxMjgwMDA0OUY5MTFCRUJGNUQ5NjY4RkMyNERDNEU5NENCMTUzNjNGCis6MTAxMjkwMDA1RTk3MTU4OTg3QkNBMzQ2QjI5Nzc5MzE5MjFGRTNGQTBFCis6MTAxMkEwMDA5MkEzNEJFQkQwRjQ5NjY3NDRCRUFGRjk2MUU1MDIzRUUyCis6MTAxMkIwMDA2RDVFRTY3M0I3QTMzRkEyQzFBRENEQUZDMTVGMkUyRjY4Cis6MTAxMkMwMDAyQUExN0NGNzM1RDZBMTg3OTdDMTdBNTAzRkU4RTE2ODFCCis6MTAxMkQwMDA0QTE2RkUxQUY4MUZFNEFGODk3MzI0RjA0QkVDQ0Q3RTVBCis6MTAxMkUwMDA2QkZFN0EwNUU4MkI0N0I4QkVCMjQ5ODk1OEI3RDc5NzQ1Cis6MTAxMkYwMDBCRUQyQzZFRENCMkZEM0M2OURFOUYwRDBGQkVFMUQ5RjJECis6MTAxMzAwMDA5RTlBMjA4N0Y1MzMzRjRFODgwRkVGQkZGOEU5QTY4OEY1Cis6MTAxMzEwMDBGQjQ5MUZDRjcxODRGN0I3N0UzQTA3RUY0RjUxRDQ1QTdDCis6MTAxMzIwMDAxQkYwRTUzMTI2Qjk3Q0M4MDc2REFBMTIwM0Y0MjgzRUVDCis6MTAxMzMwMDBFREFFQzNCNkY0NDMyRjk2QUJCMkE5RTc3Qzc1RDg0RTk5Cis6MTAxMzQwMDBCQ0U4NkYzM0MzQkE2RTFBMjZBQjE4QkY2QjdFODgxRTFCCis6MTAxMzUwMDBERUJGMjZGM0JDQzNCMUFCQUExNUY3NTk3N0ZCNTQyQkZDCis6MTAxMzYwMDBGQUYzQkIxRjU0QURFODg3RUM3NkYzNzMxOUVFMkMwMzQ4Cis6MTAxMzcwMDA5RDhGNzE2N0YzN0FDNUJGMjRGM0JBODM0RUYxQkVENjUxCis6MTAxMzgwMDBGQThEREU0RTg0MUJFQkNDRDEzN0E4RkEyNjQ4NzVFNUUyCis6MTAxMzkwMDBDN0QwQkZDQUU5RTk1RjFENTNGQzM2OUNFRkQ4ODM3RUY2Cis6MTAxM0EwMDA1QkY4N0VFMkY1RkE1NzdGMDQxRTQzMzgwQTk5RTQwOTk4Cis6MTAxM0IwMDBENzIzQzU5NjI4NEZCOERDOTZEQTFEMTFGRDkzQzIwRkNFCis6MTAxM0MwMDA5OUVBNEM4RDc4RUYyNjM1MzNFMjM5RjAxQjg3QTE1RjFGCis6MTAxM0QwMDA1MjZCNjI1NDZGRUIzM0YwN0E1QjNEMUU1N0E0RjBGODBBCis6MTAxM0UwMDBDRTY1QjNBMzNCODNGQjY2NzI2RkU3OTE1Q0M1ODY1RUY3Cis6MTAxM0YwMDBDRkI3QTVBNDcwN0ZGMDNGNTIxOEMxMzUyQjg1QzNBNzg2Cis6MTAxNDAwMDBBRkFGRDVGNzZCRjE3QzBGRTI5M0I5OUNDOEU3MkVBQjc5Cis6MTAxNDEwMDBFMTBBQjhCQ0FDRTBFOTI3QTY1MzVENkRCRUUxREUyQzY1Cis6MTAxNDIwMDBFODU3M0NCRDc1M0FBRkFCMzVFQ0MxM0FEQjE5NEYzRkRECis6MTAxNDMwMDBDRkVGREY2MEM4Mzc4MjNGQjBDREY3QzI3NEFDMkJBRkJGCis6MTAxNDQwMDA4QUUyRjUwOTU1NTFBMjNFQjQ2RTc0NDREQ0EzMTgzRUZECis6MTAxNDUwMDA3RTZBMjFDNjlGRkI4RDBDRjNGQzhGOTlDMDBFRTY4NTNBCis6MTAxNDYwMDBGNkQ5QUQ2NjFFQUY1QTREQkMwRTdDN0RFNkE5RjVBODM3Cis6MTAxNDcwMDAzRjNFOEJGMkU2QTU1MDlFQjE0ODQ1M0M1RUI0NUJBODZBCis6MTAxNDgwMDAzRUY0QkU3REE1MjlDODA3QjM1Mjc4REUyQjdCQ0Y0NDNFCis6MTAxNDkwMDAyNzlEMkZGQkU3QzE1MUZDN0Q3MDYwRkQzMDhFNzM3MTdECis6MTAxNEEwMDA3NzM2RjlFNUQ5MDMxODlEMjdEMUU4MDFFMTMzNUQ4RjNGCis6MTAxNEIwMDA4MkYwODFDRTYzMzBCNzEzRjM2RkI1MEUxMzhEMzMyQkVCCis6MTAxNEMwMDA4NUYzRTNGNUI2M0RFQTg5RTMwQzZCNzY0MUJCMjA4NUY1Cis6MTAxNEQwMDBDN0NEQjdFMkJDMDQ2RkIwRkYyQ0RDRDBCMzA3RkJDRkE1Cis6MTAxNEUwMDAxRUM5RkI0ODZGNTlDRTBCQTI3RjFCRkM1MTBDRURDM0VDCis6MTAxNEYwMDBCQzFGQ0RGMUM2MzI4MkI0NkZGM0VFQTI2Q0Q3MDZCQTMwCis6MTAxNTAwMDBDRUYxQjhDMDNGQjBCNjQzQzVGQTBGN0YzRkFDQjcxOEI1Cis6MTAxNTEwMDBFOEY0MkU0NTdDREM2NkY2MEYyNkJFQjJBRDg5QzE3OUIzCis6MTAxNTIwMDBBRUI3REVCOEVGRjkyMUUwMDQ3QjMyN0YzQ0E3OTczNkY3Cis6MTAxNTMwMDAzRkUwRDg4Mjc0N0M1NzlDM0JEMUUwMDEzODdFOEM3MEIwCis6MTAxNTQwMDA2ODcwNzVDM0EzQUIzRkVGMTQ3RTdCMjc4RTk3MUJDQUQxCis6MTAxNTUwMDA1MzU3RkZDOTQwNzk4QTZBMDlGNDI0RjRGNzdDQzg1Q0MwCis6MTAxNTYwMDAzRTk1RTg0Mzc5NTBEQ0QyQzJGOUM2OUY1ODUyNkM4MzRECis6MTAxNTcwMDBCNkEwNzExNThGOEZEQjk1ODhCQzk4NjZDRjI2OEFFNzU5Cis6MTAxNTgwMDBDN0JFQTc0NEQ4QTM4OTIyRkUxREFGQ0I0RjRFNkM5QzhCCis6MTAxNTkwMDA0RUU3RjgyNkVBRTJFMjVGQTQ4OEJDNjUxQTRCMEJDRjVGCis6MTAxNUEwMDAyM0FDMTVGMUM2RTVCNjgxNzFFODlGMkExMEU3Q0E4MDIxCis6MTAxNUIwMDA2RjkzMkFCMzcxRjEyMUJERDBCMDhFNDU5QzUzRDRGOEZFCis6MTAxNUMwMDA3MEU0NjlGQjlEMzhERkM4RDNFQzBFRjIwN0I0NzFCQjQxCis6MTAxNUQwMDBGMzEzMUMyRjk3REZFMzc4MTlENTMxRUNFOTQ5RDAzN0E1Cis6MTAxNUUwMDAxRTMxMzJCRjFBNUFFNzA0MEUyQTgzMzA4N0UyQTRDQjk5Cis6MTAxNUYwMDAxNzZDNjQ1RkM2MUM5RDQzRjVERTY2QTc4MUE5NjFFQjhECis6MTAxNjAwMDA4RjUyQTM5OTFBQTYyRkFEQzNFMjIzRkFCMkEwNEY1RDYxCis6MTAxNjEwMDA1NEE0MUY5MDJGRTY4OTcxQTU0NThDQjczRkJFRUMwOEY2Cis6MTAxNjIwMDBGQTA1RjlCNkU1RTQxN0M0OEQxQjE4MzExRTZCNTMyMjc5Cis6MTAxNjMwMDBGQzgzM0NFNjcxNjNEQ0U4MDJGQUUyN0VEOTk4RDM0QTg3Cis6MTAxNjQwMDA4NDFGMzAyRUIwOTFDRUExOEVGQjMwRjJGQTg0NzM5MUJDCis6MTAxNjUwMDBGRDAzN0REMUE1MkZGQ0IxRENBN0QxMkZGQ0ExRjg3MzMwCis6MTAxNjYwMDBCODIzRjE5NzUwMUU4OUJGMjQ0RjI0RkU1MjE2NDRFMjNFCis6MTAxNjcwMDAyN0Q1MUI4OThGRjRFNTIzMjJFRUY3NUI5MzE3RDExRjQzCis6MTAxNjgwMDBGMEMwODQ4OEU3MzNDMTgwODVGN0IzMUU5RDE2RjFGQzU2Cis6MTAxNjkwMDBFMDhEQjMyM0ZBNDMzN0RGMTZGMUZDNzBGRjkyODhGQjJECis6MTAxNkEwMDBEOURCNTZGRTIwN0E4RkFDNUYxQkYxQkM5RURFMzczNDRGCis6MTAxNkIwMDBGRTM0NjI3QzhEREUzRUY4RkJERkE0Mzc3MzBBRkY1MEY4Cis6MTAxNkMwMDBEMDNCNTFEODU5ODc5QkQ3QUQ3NTE5NkQ4RkUyNzk3Qzg2Cis6MTAxNkQwMDAzQzM2ODJGQUNFODFFN0U5NjNEMUZFQUI1NDk3RTc5QkIzCis6MTAxNkUwMDBDNjY4NUZGQjk3QjI0NzQyQkQ5NDBFQTgzNTY0NTFCREYyCis6MTAxNkYwMDAzQ0Q1RjVGRERDNjA4OEQ4NjdCNzNCQjkzRjY0Nzc3MkFECis6MTAxNzAwMDAzREZFNkIxMzNGMkY5NTBFRkUyNkQ5MjkwMzBCQzVEOTNECis6MTAxNzEwMDAxNkFDNzc2NDgyOTlBQzhGNjM5QzVERTdFODE4QTYzQUIzCis6MTAxNzIwMDAzMDZGMDdGREM5MjFCREFBRTlEMURCQ0M2QTZEMDdFODlFCis6MTAxNzMwMDA5NzUxMzJENzkzQTAzRkZCMzk2MTlFRjdBNTA3OEREQzA3Cis6MTAxNzQwMDBGRkYwMTlEMUZGNDhCNzMwNUY2QzFFRDkxOUNBNDMzQjZGCis6MTAxNzUwMDA1OEEyODRFNzAwRTI0MjdBNUNGRDBFODg3NTcwNjUzNjE3Cis6MTAxNzYwMDA5REMzN0ExMzQxNDBCRjU5NzVEMTdFRDNBRDlBOUU1QTFECis6MTAxNzcwMDAzRTlDRjRENDY1NUJBNEZGNzY3OTY5MTY1RDNGN0JCQjI0Cis6MTAxNzgwMDA5OUVBMDdDRThBM0E0NzBEMEZGQUYzRDZEQTM5NkNFREFCCis6MTAxNzkwMDBGRUYyMkQ5QjYyRDBFRjNDMkJDRUZGNkFENzI3MEJGQ0NECis6MTAxN0EwMDA0RDc2Q0FDMkZFNTlENjYwM0U2QzExMThGMTM4QzA3QjI2Cis6MTAxN0IwMDBFNTkxOEVEOERCMThGOTlCOTM3MERENTU1QkFFRENGRUFFCis6MTAxN0MwMDAyQUY0QUIwREMxNjQ2RTM3N0NGNERFRkM3N0Y5QjlFRTE4Cis6MTAxN0QwMDBGOTdGOEJGQ0FFNDA4NTkzQzdGOTE1NjJGQzVCQTBCMTI1Cis6MTAxN0UwMDAwMzlFNkUwMTNBMzhCMDdENjM1MjE5RjIyNzVDQTdGMzZECis6MTAxN0YwMDA3MTMzOEYzMDIzQ0FGMzJDNkYyNkQ1NEQ5QzYyQUUzM0U0Cis6MTAxODAwMDA3QjAxQzRGOTRFOTVFMDlDQ0IzQzQ2Q0M1QkJENzM3QjIxCis6MTAxODEwMDA2NTBDM0VENzNEOUUzNjBFMzAwQ0ZBMjVFRjNBN0NDNjVECis6MTAxODIwMDA2NENDMUI0Q0U2NzUxMzMwOUYwNUFGN0IxNkE1M0Y4QzJGCis6MTAxODMwMDA3NjQ5OUJFRjFERTZCRDc0MDZFODNCOUJCOTY4NUM2RDdECis6MTAxODQwMDA3Qzg2RTlGOTMwM0RCNTdCRjlBQThGMTI2MEJFQjU0N0I5Cis6MTAxODUwMDAwRDk0OEY1OERCNkNBNjc4QUQ2QkU1N0ZFRDc4MEFFRUMyCis6MTAxODYwMDBERjkxREVEMTBGRURGNkZCMkJGRjM2MDRGOUUxRDZDRDhCCis6MTAxODcwMDAzMjUzODFERUFBREQ3QkE3MzM2QzVGRTVFQ0QyMkIzMURFCis6MTAxODgwMDA3ODFGRUNFRUQ2QTdEMDU4QkU2Q0E2M0FFMkY3NTdCRTRBCis6MTAxODkwMDAzQzI0REM4RkFENzQxNjJFQzdGN0Q4QjhFQjNCRUY1ODVECis6MTAxOEEwMDBGQ0QyRjAxNEFBRjcxMkZDQjQ0MkYwRDNEQTE3ODc5MkY0Cis6MTAxOEIwMDBCRkI1MzZBNjlCOUY3ODdGMkJBRjFCRDFENjcxNDZGMDY0Cis6MTAxOEMwMDBFM0NBOTdCRTg5RjhDRUM0NkVFMDIzRDVDQ0Y3QzVENDYxCis6MTAxOEQwMDBBMTYwRUZEQjJFRTdEMjc3MUY4Q0RFN0Y3NUMyQkMyREI3Cis6MTAxOEUwMDA1NzNGODlDNUZFOUUzN0ZGNEFGMEIzQjlENzA3MkZDQUM1Cis6MTAxOEYwMDBBMjZGNEM2ODdGNUEzQkVGQjlBMDI5MjExRkU5MEU3MkY1Cis6MTAxOTAwMDBCNjAxQzdCRkVENzcyRjVFRkEwMEYxRDNGQ0YyRDY5Rjg4Cis6MTAxOTEwMDBFMTMzRDc3OUZFNzM5Nzk2NzcxNEY2QzYyNUYwMDFGNjcyCis6MTAxOTIwMDA4NkUyOEIyRTE2Q0RDRjkzMDhGRjQ2QzExREY5MkNGQTA3Cis6MTAxOTMwMDA5RTg3NEE3Q0VENjZDNzcxMUZBN0I2RDU0MDc1MjZCMTU0Cis6MTAxOTQwMDBCODA5MTQ5NkFGOEI5NTBEOUE1MTcyNUI5Q0EwQUY4NTI4Cis6MTAxOTUwMDA5RUY5N0ZDRURCMkFFQUE4M0UyMEQyMUYyQTM4QjQzMjc1Cis6MTAxOTYwMDBDMjBGRjJDMDVGQUY3RUQwMzNERTVBQ0MyRkU5RkRBMUFCCis6MTAxOTcwMDBGMTAxQzM2MjUzRENGN0Y4NDU4N0E2RjVFQTE3NDE0MDQ5Cis6MTAxOTgwMDBFRDk2QzY4OEFEMjFGODM1RThGNEYzN0UyMTU3RjUzODk5Cis6MTAxOTkwMDAxNkU2RkYwM0QxRkNGQzMzOTgwRUY0N0I3RjlBQ0FGNTYwCis6MTAxOUEwMDBCNzJEODNGMUYzNjk1MkU3MzAwQkU4Q0IxNkU3QTJDN0Y2Cis6MTAxOUIwMDAxRjg1NkI5NjQxN0NEREQ4QUZBNTMzMzVGOUM0N0ZERDNCCis6MTAxOUMwMDA3RUQ3QTExMUE0QjdEOEI3MzAxQkUyNDNFNDNERjQ3NDJECis6MTAxOUQwMDAyQkMwRjNFQ0Y5NjE3MjI3REUwRjFDRkU2QjJDRTY3RDQ5Cis6MTAxOUUwMDA3N0M0QUI2RjIxM0Q4MjQ3NjVEQUZGODk1MjNBNEM4RTRFCis6MTAxOUYwMDA1RUUyQkI1NzUxMEYwMjlGQ0FBOURDMUU1ODFBNzk3RUJFCis6MTAxQTAwMDBEMUEyQkExOUM2MEY1MTc2RkJBOEYwNzM3RjhENEUxRTc2Cis6MTAxQTEwMDA0RjU2MUU3RUJGQkYwOUU4NzFDOUQwMTY5QjAzRTNBRkM2Cis6MTAxQTIwMDBERUJCM0IxNkRERkYwQzkzRjcwM0U0QzM1NTY3REYxRUY3Cis6MTAxQTMwMDA2M0E3RkNDRDk2RkUxODBGRDYwN0Y4NzczMDQ2MkFDQzYwCis6MTAxQTQwMDBBN0U0RjU4NEEzN0EzMzJDMjYwMUNGRTkyNzUwM0JCMkQzCis6MTAxQTUwMDAyOTdGMTlGMjU5NzU4MEFGMTNDN0M2NDJCRUUxOEQxMkI2Cis6MTAxQTYwMDBGNTNCMUI2QkUzNzFCQ0VBREYzN0E3QTEzQ0JEOUNDNDBGCis6MTAxQTcwMDBFM0NEOTdBRTY2RjNGNzE1QTZFMEYzNDFBNzQzMTBEMzg1Cis6MTAxQTgwMDA2RkMwRjhFNDY1MTFENzc0NUU5NUU5Mzk2REZFOTE4REVDCis6MTAxQTkwMDA4NUIyMURGODIxMjdCMEYxMDBDNTUxNEQ2NjE1RTkxQTMwCis6MTAxQUEwMDBGNTFDRTM3ODY4OEEyMkI5QUY2RTk5Q0FEMEVFNzczOTBGCis6MTAxQUIwMDA5ODRCODJGQjNCQTI4MzdGQTRGMzZFQ0Q2NjE1RjNBREZBCis6MTAxQUMwMDA1MUY2OEQyQzFFQzZERjIxRjY1OTg3MDM0N0UxNzkyOThGCis6MTAxQUQwMDBFREJBMzY1RjU0RDNEMzE4NzMyMDNGNTBERTM3NEFEOTVFCis6MTAxQUUwMDBDODI2REJDMkYxMUM0Mzc4NzZBNDcyM0VEQTExMUQzMEExCis6MTAxQUYwMDA2MDlFMjUzODk4QjE2NzA5QUUxMDlDOENFNkQ1RTAxQzM1Cis6MTAxQjAwMDBFRUM3RjM4NDNCNENDMUYzNzg2RTA2RTBCMjIzRkQ4NzQ5Cis6MTAxQjEwMDAzMzBFMjc2QjFBQUE2MjlFMjBDQUVFQTY3NTQ0RDk1NUM5Cis6MTAxQjIwMDA5NzRGRUEwOTU3NzUyRUYzQTM1REZGRjk0M0FDNUI2RTNGCis6MTAxQjMwMDA1MThFQUJBMzQzN0QwQkM4QzA4RTgxNENDOEY5Q0YxRjFCCis6MTAxQjQwMDAyRkM5MDhFRjgzNjIxOTE3N0E3RkM4QUYzNjNFNUUzNzE4Cis6MTAxQjUwMDA4OUUyMDk5RjhDRjEyRkI0MzFGMUI4NEU5NUQ2QTc2MDc4Cis6MTAxQjYwMDA4QTI5OEZFMzAxRjdEQkFEMTY3RUJGRkI3OUUwNkYxQjlGCis6MTAxQjcwMDBGNjZERkMzOTU3OUNERDNBNEQyMjM5RTFGNUI4NDIxRjJDCis6MTAxQjgwMDBEQzI3MDVDRURGMDhBNEZEMkE3MDIwNTcwNTU4NTZCRjc0Cis6MTAxQjkwMDBCMTlGRjg3NDk1QTFFOUE5OTE3MEZGRUUyOEFGMkIxNUJDCis6MTAxQkEwMDBFNjdCRUQ0MzAzOUQ2QkZERjM4QjUxRkUwQUMwQzdCMDhFCis6MTAxQkIwMDA3RDVCOTJEREJEQzg4NzdFRkM0N0RFN0JFOEM5NzRBNEVGCis6MTAxQkMwMDBGRjNFNDlDNTNDNkM5NzMxNDhERjM3QTk2QUZBQ0M0NERGCis6MTAxQkQwMDBGNTBEOEQxRjUzREREMzlCQTlERTQ5MzhDRkI4QzYxQTRBCis6MTAxQkUwMDBEQThGMUVDRjM2RDI3RTc0QjYzODBGNUVFRkU0RkFFMzlBCis6MTAxQkYwMDBGMkU5MjFDRkQ2ODRFMTdGNDkyQTk3MkYxNkY0MEU0MENGCis6MTAxQzAwMDBCOTY5MTJGMkQ5ODI3RTBBQjQ3Qjg1QkZCNEI3RjVENjIyCis6MTAxQzEwMDAyQzM1MkM3RjU4QzMwRUE0MjNCRTFGNjI4N0E4RDVBRUQ3Cis6MTAxQzIwMDA3N0Y5RjlCOUNBRUM3NzJDNzdCOEMzRjg2RjkxOTBGN0M4Cis6MTAxQzMwMDA0NUE5MjI0Rjk2RUE5RDhERjBBRTZBRkRDNDE0QUJFMjMxCis6MTAxQzQwMDAzOTk5RkFGRTY4NTdFQUMxOUZCMkY3ODI5NzZFQjlENTAzCis6MTAxQzUwMDBDOTUxQjUxMjM0RTFGM0Q1MTdGOEY5NTdBMDczMUQ5RTk5Cis6MTAxQzYwMDAzNzc4Rjk5REM2MTE4QkUxRkE1RUMwMzVENjk1RkFDRTZDCis6MTAxQzcwMDA5QUE5QkU3MkFGRDE5MzhFQ0ZENzlDRjkzQTE3RjU1Njc5Cis6MTAxQzgwMDAwOTAyMDFGMDdDRERCQzZBMDBFMjBERjhCRTI4MUFFNTBECis6MTAxQzkwMDA2QjE3MjMzREE2Qzk2NzBFQ0EyN0JDOUY4MzdDNUY4MDU0Cis6MTAxQ0EwMDBGREUxQTQ4Nzc3OThEQUY5RjlEM0JERkNGQzI5RjAzRDcyCis6MTAxQ0IwMDBDOTAxRjBCRDFERkQ4NjFDM0JDODAxQkQzRjk0RTQ3QkZFCis6MTAxQ0MwMDA0N0JCODFDRUM5RkE0MDhGMEZBNjdFRDExQ0VDRUY2OENFCis6MTAxQ0QwMDAyRkIxOTM3QzYzNUUzRjBGRTUzNDcwODBDNkE5ODdEODJGCis6MTAxQ0UwMDAwNDQ5MjczMTRGQjgzRkQ5RTg4QzI1QkE2OUZBRjFCMEQ5Cis6MTAxQ0YwMDA5MzA5M0JBMUM2RTE3OTAzQUIyQzQ3Qzg0NTk4M0RFNDY1Cis6MTAxRDAwMDA3RDYxMkY0RkZDMkFGMEY4MkZEMTc2Qjg4NTVEMTBGRTRCCis6MTAxRDEwMDAxNEYzRTY5MzlFQkY1N0Q4QUFCNUFGNEY5OEI5MURENjE2Cis6MTAxRDIwMDBCOUY2ODREQzVEM0Y4RUZFNkI0MEYwQzkwMUUxQ0ZBMkM1Cis6MTAxRDMwMDA5RDUwMTM3ODNEMEU1RTFGQkQ5OUQ3RDU4RTcxQUYyOThBCis6MTAxRDQwMDBDNkIzQ0ZFM0NBMzcxRUM0NzY4MkE3QkUxOENGM0U0RkI0Cis6MTAxRDUwMDA1QUQwN0U5MDlGODFFNkU3RDkxQjBFREM5NDhERkJERTg2Cis6MTAxRDYwMDA1RDY3Q0QwQ0Y3NUQxQUZFMUFGQ0UzNEI4MDg3RkI1QkM5Cis6MTAxRDcwMDAwMEZGQkREODI1NTgwRUYxMUY1OEVDNzRFNkVDNzlCRjcyCis6MTAxRDgwMDA0QkQyRjRDN0E5MEFFNEM3Q0UwNjM5RDQwNzQwQUE4MENCCis6MTAxRDkwMDBDMUIxRkZEQkQ0OTM4RkZCQTA5Rjk1RTY3RTNFMTVGRDdFCis6MTAxREEwMDBFRDc0MkZCNTVEMjdGRjlBOENCNjYwRUY2OUVFNDczNTZECis6MTAxREIwMDA5OERDRDlDODNGMEQwMzIzQkYxRkEwQjU0RkE2MUE4OUQxCis6MTAxREMwMDAwRTA1N0Q3Q0JGRUI0ODJBQ0Y2RjBFRjFCMUM3OTA4RjE3Cis6MTAxREQwMDBBQTFBNjRCQjFGRTg3RUE5NDE3NjlCQzAxRjNBRUZGNkEyCis6MTAxREUwMDAyNkUzRDk5QzBCQ0M3N0NCNDRCNEYzMjI4RUQ0QkVGNzM4Cis6MTAxREYwMDA3MjE3RkEyOTYwQTdFRUZFNjVFRkZCMEZBQjk5RjY1QjUxCis6MTAxRTAwMDA2MzQwQkU1QUQ2MjRCMUZGMDAxQzJDN0YyNkYyRjlENUMwCis6MTAxRTEwMDBEQUY3NkExQUI3MUNDNkVGODhBRDdDNEU3NzFGRkQxNTNFCis6MTAxRTIwMDBGQTBFNDZBNDFGNzMyNDU1RjgyNzU5MkMwQkZEMTNFMDE2Cis6MTAxRTMwMDAyM0QyMEY0Njg1MUQzMTAzREZBRTQ4RjdFRTQzN0JGQzBFCis6MTAxRTQwMDBCMkY4QkUwMkU4NTE5MkM3N0Q0RTYxNTc0NEZENDE3MDIxCis6MTAxRTUwMDAwN0FGMkIxRUJFQ0QyRjFCRTBGRDA5OEE1RjQ2N0JDNTU5Cis6MTAxRTYwMDBBMEM1N0Q4NzcxNkU2RjE5N0Q4N0M5RTczRThERkIzRUVBCis6MTAxRTcwMDBDQjg1M0U1Q0FFRjk2OTdFQkUzRjAyNjYzN0MyNEZBQjkyCis6MTAxRTgwMDAxNkFCMUZDRkZDQjVCMUI4RkU2RDEyQzVDQkFCQjY0NUQ2Cis6MTAxRTkwMDBFRUE3NTQ4QkY1QUZERTdDRjIzMDlBQkNDQTdBREQ3REJBCis6MTAxRUEwMDBCMUZFNkFEREZBQjU3REYzQ0Y1MzIzRUJCRkFFNzczRkNBCis6MTAxRUIwMDBFNDJGNDZFRTM3QkMyREM2RDFFRTlCRDJCODdFQUM4MjY1Cis6MTAxRUMwMDA2NTIwREQ1NkZCNjVCRjlGRkI3OTM2RkM1RUQwOUQ2MkM5Cis6MTAxRUQwMDA1RDc3MEFGQUQzM0FFMUI5Q0E2RDkyM0Y4MDNDRkU3ODQ5Cis6MTAxRUUwMDA2NDlERTk1REY1OEJDQjkwQUU3QTNFNTkyOUQ2QkQ3Q0Q5Cis6MTAxRUYwMDBCQjkxRkM1NUZDRkUwRkNBOUQ5RTNGNTY4QUY1QUZENEEwCis6MTAxRjAwMDBBREJGQ0EyQkU5RTBFMzdFNzQ0RkY4RUE2RjQxM0E1NzYwCis6MTAxRjEwMDA2RTM3QjJERUUwRDNFOEI1NTJFM0VCM0VFMEQ1RTBENDc1Cis6MTAxRjIwMDBFMEZFQTFGMEY2NEYxM0Y5QUQxMTZDMDREMUE5M0NFMTJDCis6MTAxRjMwMDBCQUU4QTRGNzczNzcxRDFFNDFERjVCQkI3QzY0MjBDNTQ0Cis6MTAxRjQwMDBGQjFBMUZFOERGMkYxMzdFRjJENENEREM2RkJDRDQ1ODEwCis6MTAxRjUwMDA2QzFEODlGMTRDOUJDMTI1QTkxNDlGQzU4RTA0QkNFNDVFCis6MTAxRjYwMDAzN0NCQUMwMkZBNUQ0RDU5OUJGMEZCODM3OTI3MEFFNjJCCis6MTAxRjcwMDA2MEZDOUY3RkMyNDBFN0VGRjYxQzI5QTA3REU3RkNBMzMxCis6MTAxRjgwMDA4MzEyQjIyOENGRURBMkVGRTNDMDM4NjQ1RkJCREFGMjcwCis6MTAxRjkwMDAzNkUxRjk4NEFFQjY5MjAyMUM1NzgyRTdEMDBGQzgxMzFGCis6MTAxRkEwMDA3NkEyQTYyRENGMUE3RUZFN0M0QzFBOEZFRkQ3M0IzRjMwCis6MTAxRkIwMDBGRDM5RkFFOTUzNzcxOUU5OUNDNTU0NjNGMDREQUNEQjYwCis6MTAxRkMwMDBEQTczNDRBMTdERjJENTI3OTYzQzE0ODVGNDdENTFBMkE1Cis6MTAxRkQwMDA3REYyQzNFRDZCMTMxNzIyOUYzNTE5RURCOEVGRERENUY4Cis6MTAxRkUwMDBGNEUzMDM3OERGQjc1REEyRUY1RTU0Mzc5NzY2RUY4MEM2Cis6MTAxRkYwMDA3RURFOTY3QzU3RjhGOUIzM0M4NzRBRjBCMTU0MkJDNTg2Cis6MTAyMDAwMDBDRjUzRkIxOUM5NkU1RTRDQjNGRTE2RkQ5Rjk1RUUyREE2Cis6MTAyMDEwMDAyNERGMTdGN0VGMzE1MUREREUwRTg5QTEyOTNCRUMzQ0JGCis6MTAyMDIwMDBGODBBRTJFM0UyQUIyNzRERTg4NDE3Mzc5QzM0NzU3QzZECis6MTAyMDMwMDA4RjNGNzBDOTJGQjMwMEM1Q0QxQjREMThDNzU0NkVEMTRCCis6MTAyMDQwMDBGQTFEMjZBNDkzNDdGODQ3NTVDRjdENENGRDk1RThDRjYwCis6MTAyMDUwMDBDMzdDMkI5RjkxQTk3RUY3NjBGMzZCMjZFNEU3QUFFRDgyCis6MTAyMDYwMDAxMjRCQzkwQ0JCQkY1OThBRjg1RUMzMTJDNkY5NjA4OTBFCis6MTAyMDcwMDBEMDNGQUI5ODdGN0QxQTNDQjc2QTIzQUY1QjYwOEY0NjM5Cis6MTAyMDgwMDBENjAxNkJGQ0JENDJGMEY3QUFFREIzRThGQjUzM0RCRUIxCis6MTAyMDkwMDA1Qjg4NzFFMzBERjgxQ0U3RUY2NTlCMjNFRkFGMTA3Q0M1Cis6MTAyMEEwMDBCRDQyQzdENzNGNDkxM0ZBNjczODFCOEU3Q0ZENzVBMTI3Cis6MTAyMEIwMDAxQTk3MDNEN0JGM0VCOTcyNDA2RkU3RUNEQjg0QkRENkY5Cis6MTAyMEMwMDBFQ0U1RTU4MDgxRUM4REZFQjlDRUM2MkIwNDY3NzVEQkFGCis6MTAyMEQwMDA2NTEzRkFBNzY1NEQ1RjEwRkUyQjlBNUFBOTdFRTQ2NjM4Cis6MTAyMEUwMDBFNjVEOERGOEJBQjlDOTZBNDdCOUFFRThFMDdBNjg1QUQwCis6MTAyMEYwMDA5M0Q5RUY5N0YwN0UzREQ1Mzk3N0I1RjBCQTQ5REY3RUI5Cis6MTAyMTAwMDA4OUZDMUM0RDhGNjlERjc3NUMyNkYwQjgwQzE0Nzg3QTU3Cis6MTAyMTEwMDAxRUZBQkIzQzZFQUUxMjcxRjI4QTYxNUIwRUUzM0U3QjJGCis6MTAyMTIwMDA5NUI4QkZGQUU4QzE1OEY0MEZBN0IxMkY2RTQ3RkFDMEFGCis6MTAyMTMwMDA3QzBDRTc2M0NGNDRFMjdEQkFEMDhCRDNCNzczQkRBOEU0Cis6MTAyMTQwMDBCNzZCNURBOUQ5MzMyOThGMDk3MTJBQzJCNTdBN0IyNDZGCis6MTAyMTUwMDBCRUFCNzRGMUY5NjM2OTNDM0ZGNjgyMEVERjE1NDE2NjUwCis6MTAyMTYwMDBDRDQxMzg1NEQ5RTVBN0E3REIxNTlDRjc0ODJFRDg1QjlECis6MTAyMTcwMDBCNDkzNkFENkY3N0U4N0YxNERFMTY3NkJGRDk5RTIxQzU3Cis6MTAyMTgwMDA3OEJEN0RBMzJEM0M2RThFNEFFN0ZFQzJDQUYxQjIwRjI4Cis6MTAyMTkwMDBFOUQ1MUQ2RjBDM0E5OEFCMUE0MkYxMDZDNDE5Q0Q2OTA2Cis6MTAyMUEwMDA0OTNDRUVDMDgyOTIzNzMyNjQ5Njk4MTg4QTM3MUU3MTg1Cis6MTAyMUIwMDA2RUFBQzg4MzdFRjU3NjJFRjc5REUzNjAzQzNDN0ZBRDJBCis6MTAyMUMwMDAzMEYyNDdBQkI3OUJFOTlDNjIzNUQwOUZFMjhBMjY3RTBFCis6MTAyMUQwMDA5RUMyRDMyNDk1MjJEREMxNUYzRjlBODZGQkIxOTg1MkZGCis6MTAyMUUwMDA4NTc1Q0Y2QUU0N0MzRkFCRTQwQkUyOTdBMzgzRjg3QTcyCis6MTAyMUYwMDAyRjJCNkE0QTZGRkVCQkU2QjdFM0Y5MzAzNUNDN0ZBRkQxCis6MTAyMjAwMDAwMjM5QzVFN0FCOUE3ODNENTJDMzgxNkZGQTY3QTI5RTQ3Cis6MTAyMjEwMDA2QkZFQUZGRThCQTFGRDVBRDg0NUNEMkYwQzgyNUYzOEU3Cis6MTAyMjIwMDA5MEZCNDVGNEJEQzlCQjg1N0MyREIzRjM3REJBQkI4NTVFCis6MTAyMjMwMDBGRDYxNTIxREYxNzk5NUIxRkU1MDNDRkE1OTNCNzhCREQ0Cis6MTAyMjQwMDAwMERCODcxRjg1MDNGREY4RjY0Qjc1RjFCMEVFQ0U5N0U2Cis6MTAyMjUwMDAyNEFBODdDM0Y3RjE3Qjk0OUQ0QkVBM0Y0MUJGRkJFQjc4Cis6MTAyMjYwMDAxRDE2RjIzN0VGMDZCRjY1NEE1RTRGQjlENEU0NUJGQjNCCis6MTAyMjcwMDA2RTU2MEQ3Qjg4RkNDRjg3NTgxREI1OTU4MjlGM0IxQjAyCis6MTAyMjgwMDA2QkU5RkJBMDlBQkY0MkVGMEZFQ0U5OEY1NDBBQkVBRjk3Cis6MTAyMjkwMDBENEYxNUY1NDdBMjRERkQ1QkMxRDREN0U2M0Q3NTFEOTZDCis6MTAyMkEwMDA4RUZCMzE4MEFGREZBNDg1RTM0NUY4MjEwRDA3QTI4OEJFCis6MTAyMkIwMDBBRTVEMjc2RDY0NDdGRTJDRjhFREEyQzgzRkQ3OEM5MzI2Cis6MTAyMkMwMDAwOTBGODZGMUJDQ0Q2RTc5NkQyMEQyMTFGMThFRjVGNzM0Cis6MTAyMkQwMDAyRkI3QkMzNjgyOUZGQkY2MTNGRTU3NkQ5MzIzQkUwRkJDCis6MTAyMkUwMDA1QjU5MUZGOUZERDc5QUI3NkZBM0VGMDg1NUVGRUY4NjNCCis6MTAyMkYwMDA2Qjg4MjkzMTA0NTc1RjcyMjA0OTNDOEUzNDQ4OTE3MUI0Cis6MTAyMzAwMDA2NEY1M0VEOTEzNUU3NzA2RUJCOTAzRjU1MUJBOTAwNzMxCis6MTAyMzEwMDBBNjA0OTMzMUZGMzUwMDlEMDY4MEFGQTY4OUQzRDVEMEEyCis6MTAyMzIwMDBDQzVCOThGRjE2OUUyNzMxRDJGQzNERUUxN0Y5NTZFM0ExCis6MTAyMzMwMDBGREFGMzNBRDdDRkZGQUFBQUYwMkZCRjcwRjk0QTlBRTU1Cis6MTAyMzQwMDBGM0ZFQjc1NzBFMEREN0EzMENFMTA0QkE1NjFCODNDOTkxCis6MTAyMzUwMDAxNDZGOUUzNDEwN0NENTI3MkYyNzBGQjJBMTVFREE1MjVFCis6MTAyMzYwMDA4MkRGMEY5RDJFRjRERkUxODFENkU1QzhDRjNFOUMzNzlBCis6MTAyMzcwMDAyNTM0Q0VDQjY5QkM3RThGRTE3QTlERTg2REZDOTI4RkNGCis6MTAyMzgwMDAyQkQ2RkIxMDlCMkRFMjZBQ0U0RjM5Njk3Q0JEMTA4Rjk2Cis6MTAyMzkwMDA4QzRCRUYyNTFFQjk1RUJGMTNFQ0MzQTk4NTEyRDYzMzUzCis6MTAyM0EwMDAyOTNFOEM4N0Y3QkNDN0Y1NDI0REYzQjI4RjkwREZBQjY3Cis6MTAyM0IwMDBERjM3NTM5REQ3RkQyRENCODY1MkJEQUZENzdCMDNGQUI4Cis6MTAyM0MwMDAxQjVGQjdBQ0I4ODFGMjgzRDI0MzA0OTcwRkUxNzNBMkNECis6MTAyM0QwMDA1RjczMjYxOUVCNTIyQjlCQ0YyNDkzRERERDNCN0E5MzYxCis6MTAyM0UwMDAyRjA2RkQ5N0JDRTk3ODFERkMwOUUyM0ZGMDZCODhGRkUyCis6MTAyM0YwMDBGNkI0MTU2ODdFOEMxNUM3QUQzQ0FBNzgxMDNGOTU0NzlBCis6MTAyNDAwMDAwQjhFNTdBMDdGNzFBMkE4MDBENUI5NzRBMjgwRkM5ODRBCis6MTAyNDEwMDA3Q0Y0NjM2QzIxQkZBNjVCNEZBNjczM0ZBNkFCMzU4QUU1Cis6MTAyNDIwMDBGMjBCMTIxQkM4Rjk4NzBEOEFFMDlGRDUwREFGOTNCRDQzCis6MTAyNDMwMDA1RkREMjg0N0Q0MkY2QUVGREQ5OUFFRDAzOENCMzRGRTZDCis6MTAyNDQwMDBBOTk3RENDNDFGQkI3OEJCQkE3MTBGQUQ2Rjk1QjE5RTY1Cis6MTAyNDUwMDBFODVEQjNEREM4RUZFRkUwQURGNjdENTgxRjhCRjcyMUU3Cis6MTAyNDYwMDAzRThFRTMyNUEwQzMzNDkzM0YwM0YzRDNDNzMyQjk5RjE1Cis6MTAyNDcwMDBBRkE3QzdFN0U5M0NGRjcxRUNBQzc3MDBGMkNCQjE0MjA0Cis6MTAyNDgwMDBFRjUwN0IyRjc2QzJDNzhBNzg1QzJCMDk3QzM3RjA3M0JDCis6MTAyNDkwMDA1M0ZBRTczRTRCOTdDNDc3NDIyMkNGQjc2QUVEQTk3NDRGCis6MTAyNEEwMDBBRTNGQTc5OTdBRkYyRUUwNkZEMkI1NzMwOUVDMzE0M0E2Cis6MTAyNEIwMDAwMTQ2QzU0NkZCMDZFMUQ3QTc4NjdERDc2MUNFQ0Q0NjRFCis6MTAyNEMwMDBGMjE3NEUzMUZCRUI1OEVGMzg0M0QzQjNFM0I4N0RENTY5Cis6MTAyNEQwMDBFN0NCRTc4OUY3M0M5QjU1QkU1RkE0M0IzRjMzNEYzQkJGCis6MTAyNEUwMDBERkE0M0JFRjM2NEZGODNCRjM3NEZFQ0VEM0U5QzI4RjQ3Cis6MTAyNEYwMDAxRkMyODZBMDFFQUMxN0U3RUZENjBFOEZGMjg3RTdCMzk4Cis6MTAyNTAwMDBGNEVENjFCMTJGODJFNzg3QjBBRDE5RkUyRUU1N0Q4RTI3Cis6MTAyNTEwMDBCNTlFN0Q4NUVBRERDRTQ2QjE4MTNDQUY0N0Y5RUZDQTc1Cis6MTAyNTIwMDAzRUYyREYzNURENzIzOTM3ODJDRjM0QkE1QzEyREY4Mzk5Cis6MTAyNTMwMDBEMUQzNjVCN0E2QUZDNEJFNURCNEQ4QjdGMzFCQkRCQkRFCis6MTAyNTQwMDA1MTlFMkIyRDE3NERCQ0VFMzA2ODQyN0Q1NjMzOUNGQkJGCis6MTAyNTUwMDA0RDk3NEEyNURBNkYwNzM4RkI5QkMzRjRGQkE1NTQxRTQxCis6MTAyNTYwMDA3RkREN0Y4QjQ0NzlENzU2N0MxRUUzQUM3QTg5RUFCQzQ5Cis6MTAyNTcwMDAyQjAzRUQyNkU0QTcyMTBEOEIxRjI2QjlGNUIxRDMyQzMzCis6MTAyNTgwMDBFQ0JCMUEzMzJEREM0RTc2RDM0RjVCNzdCNzFEOEJGNzQwCis6MTAyNTkwMDA3MTdEOUM0ODJEM0U4Rjc2NzE4NkIwODNGQTczNTE0M0NFCis6MTAyNUEwMDA1OTdCNTkzQUMwMzNERjJEQjlCMDFFQTAyRjNBQ0Y1RTA4Cis6MTAyNUIwMDAzMEVBNzU0NEMzRjVEMkJCMzNEREZCNEUzQUNBNzlGQjMyCis6MTAyNUMwMDBFNTVCMzA4RjdBNkNGODY3RkREMThFNTZGNUMxQzcxRjc5Cis6MTAyNUQwMDAwQjNDRUJCRjJCRTMxQUFBRDZFMkY3NTU2QTlEREUwRTQxCis6MTAyNUUwMDBEMjlGODY2RjYzNDczMDFDQTdFMzM3NkIyNUE0MTMyMzY0Cis6MTAyNUYwMDBGRUVGNEI3RTNFMTNFMzdFOTZDRUJGNzcwRkI4QTc3REVFCis6MTAyNjAwMDA5NzU1RTlCQzRFRUI5OEQxOUY0MTc5OEE5Q0VCREJGNzVCCis6MTAyNjEwMDBBQUQ5Rjc0NjJFRUFCM0NFRDZBM0I5QTYzMEJBNUU1Q0U1Cis6MTAyNjIwMDAwQjdBMDBFRDRBRjNDMTY0RDUxNkNFNzcwNkUyMzc0OTNFCis6MTAyNjMwMDBEMkY4NEYxMUY2MzI5MjBGMkYyMjFGRTY2MDdCMjY3NkRBCis6MTAyNjQwMDAxMEVBRTM1REE3NjIwN0UzNzg3Qjc5REJDREFGNERGQzUxCis6MTAyNjUwMDA3QkY2MTAxRjBEOTkxNzEzMEVERkMzMDRERkE1N0EzRTFBCis6MTAyNjYwMDAwRTYzMUQ0M0U2OEMwQ0JGNUZEQjE3MUY1QjMzODg4RjQ3Cis6MTAyNjcwMDAzQjIyRjg1ODVCNkYzRDdFQ0YwN0UzODAxNjMzN0RDRjVBCis6MTAyNjgwMDAwN0YzRDc4RTMwMzkxOTlBQzFGNUNGNThGMUZEOUVGMTc1Cis6MTAyNjkwMDBDQzQ3REYzOTFDMkJCRUUzMzM1RTYxMDEyNTFFRjdDRDJECis6MTAyNkEwMDAwMjMyREZGN0U1RTcyREM2MDg3RTFFQUIwNDVBQjE4RTc1Cis6MTAyNkIwMDA2MkJDRDhFNzk5QzBEQUU5QjkyOTJDNDhBRDlCRDlFOUMxCis6MTAyNkMwMDAxQzQ1MTE3MzUxM0JDRTEyOTg4RUVFNTQ0RTdEM0RENTc0Cis6MTAyNkQwMDAyNTA2OTIxNUM3Nzk4QjM4QUZEMTBCREQ0MkVCNTdFODUxCis6MTAyNkUwMDBCQjNEQzQ5RjMyOUVEN0U5RkRCQjJGQjMzM0I4RENEM0NCCis6MTAyNkYwMDBDNzQ1OTBCRTk3MThFNUI5RjA3QjZEMzhDOTQ0ODU5NUZDCis6MTAyNzAwMDA2MzdERDM2NDg1NTlBMjAxREU1RDg3MEMyNENGMkQxRDI2Cis6MTAyNzEwMDBBQTFGRUI1MzVEMDlFMkJEQ0YxOUQ1RTE4RTc1NzM3OTIwCis6MTAyNzIwMDA0NTkzODNGNTE4REE3QUY1Nzg5ODAwRTM2MTlFNkRBQ0VECis6MTAyNzMwMDAwMjkxMjhFMTMxNDBGM0REQzhGODM5OTI0MkE2NTJGREZBCis6MTAyNzQwMDA3MzY5NDZBNkQwRjc0MThBQTM4QTIxOEU0MjdENkZCMDc1Cis6MTAyNzUwMDBGODA4MUZEMzMzNTRCQThGRkIyNUIxMzBDRTg0OEQxMkM1Cis6MTAyNzYwMDA3QjBGRjczRkIyRjg3QUI1RjEyNzAwMjNFMEY5QzJFOTExCis6MTAyNzcwMDAxOURDOUU2MTRBRjVCRDc4QkU4RjEyNEIwNUNEMjU3NkRBCis6MTAyNzgwMDBGRTlEQTM2NEZBQ0VEMUY1RTJCNTJCOTk3RkVGMzJGNjI4Cis6MTAyNzkwMDBDRTYwRTdDRjBBNDJGQjQ5MkVGQ0VFNTE2Q0U4M0I5QjMyCis6MTAyN0EwMDAyRUVEREY4MzA4NDRGRTdCMTA3NzY0MkNGOTExRjJBMzMxCis6MTAyN0IwMDA1NkFGQzdCQ0ZDREY3REQwRDdFQjg1RDVFN0IxMEI2MTQ5Cis6MTAyN0MwMDBFN0IwQjVCQTkyNkRGRUQ5MkE5RUYzNUI5MDY4QTE3MzBCCis6MTAyN0QwMDBCRjc5OTZGRUY5NjhDNzA2M0FCRDM0RkVGQkQyRjZDMTUyCis6MTAyN0UwMDAzNDk4RTIxRkVEODkwOUYxQkI5NUI5QzcyMUJFNDM3NTQ1Cis6MTAyN0YwMDA4M0ZDM0I1MERERTdBRTkyMTk5RDU3QjQ5QTc5N0RFNTk1Cis6MTAyODAwMDA2MzIwMUZGODFEMjY5MDJFMTVFQjY4RDg4M0M1NTQ4RkMyCis6MTAyODEwMDBCOURFNjE3MUUxNzkwOTMzQzI2RDBEQzE1RDZCMTFERjA0Cis6MTAyODIwMDAwNUI1RjA3RDcxN0QzRDY4QURDRDQwREYxREFENjVEMTU1Cis6MTAyODMwMDA3NDBFM0QyOURBQkIyRTAzRTBCQTJGQTY4OENFNzc2NzQ3Cis6MTAyODQwMDBFRjlDRTQ0NEJGMzE3Q0ZEOTNCNEY1MUI3QUQ2NDdDMkJDCis6MTAyODUwMDA3QTFGQzlFOEE1MUU1MTVCQTdGNkVGNzZEODA1RkVCNDJFCis6MTAyODYwMDA3NURCQjU3MzRBNkUyNUUyOUM5Mjg2OEZDN0EyRjlCQUQyCis6MTAyODcwMDA4REI4RjM5RjQ1RUZBQUE4MzdGNEVCRkRGRkRDMjlCQzI4Cis6MTAyODgwMDAxNkEwNjQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDJFCis6MTAyODkwMDAxRjhCMDgwMDAwMDAwMDAwMDAwQkIzRDM2NjYwRjg1MUU2Cis6MTAyOEEwMDA4RkMwQzE5QTBDMEM1REQyQTg2MkI0QzQxRDEyMEMwQzZFCis6MTAyOEIwMDA5NzgwRjgwQjEwNjcwMkVERjU5MjY0NjBGMDA2RTI2RDA4Cis6MTAyOEMwMDA0MEJDMUQ4OEM1QTUxODE4MDI4MDM4MTA4OEZCODBGQzA0Cis6MTAyOEQwMDA3RTIwNEUwN0UyMjRBODFCQjMwNTE5MTg3MjgxMzgxRjA5Cis6MTAyOEUwMDA4ODBCODE1ODQ4ODA4MTQxNTg4MDc4RkI4QjE1MTkxOEQ2Cis6MTAyOEYwMDA1RUFCMjJGODVBNkEwQzBDQzkxQUY0RjNGRjYwQzM4MTZDCis6MTAyOTAwMDBCNkY0QjVFRjE2RDBCRUU1NkUwOEJFMDQ5MEJEQzIwRDlDCis6MTAyOTEwMDA1NUNENEEzN0ZDNjZBQzQyOTM1RjhEQzY1RjgzNDc3RkQ3Cis6MTAyOTIwMDA4MTBEMkE3RkFCMjkyQTdGQUYzOTAzQzMwNzI0MzVEQjBBCis6MTAyOTMwMDA0Q0YxQkIwNTFEMkIwMEZEQTc4ODI3NEM5NzMwQTJGMjU4Cis6MTAyOTQwMDAyNzMyQTFGMkY5QTE3QzAwQkUxRTMxM0NBODAzMDAwMDkxCis6MTAyOTUwMDAwMDAwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMEM1Cis6MTAyOTYwMDAwMDBCRUQ3RDBENzg1NEQ1OTlGMEI5M0Y3MzY3MjY5OTJBCis6MTAyOTcwMDA5OURDMjQ0MzMyNjAxMjZFN0VEMEEwMDE4Nzk4NjBCMDRCCis6MTAyOTgwMDA1ODZFMjBFMTQ3QTMwRTA4MkNCNDQwMjYyODg4MTY2RDA3Cis6MTAyOTkwMDBDNDlGQzZERDUwMDYwOUJGMDkyMUUxNEY3MEQxMUQxMDRCCis6MTAyOUEwMDA1REVBNjNGQkM1NTY1Qjc1QkI3NjgyRDY0NkFCMzU2ODgwCis6MTAyOUIwMDBENzg3NzY3NzY1QTAxNUJGQkE3NjFCRDk2RDk3NkVCQkEyCis6MTAyOUMwMDBGNTdCREZGNzlDQ0JDQ0JEOTkwMEZFRUNCN0JCREZGMzBBCis6MTAyOUQwMDBDNUM3RTc3MEVFM0QzRkVGNzlDRkZCN0ZERTczQzcyNUJDCis6MTAyOUUwMDBGQjU5NzAxQTYzMUZFMzFGOTQxMzczMTk2M0I1QTlCMkRGCis6MTAyOUYwMDBDNUMzNjJEOTM5OENFNTc2NDg4Q0Q1MzBCNkIyNUQ4OUNECis6MTAyQTAwMDBDRjgyN0YxNjc2QjRCQzgyRjVFNTZENkVDMzVEQ0E1ODgxCis6MTAyQTEwMDBGRjAzNkU3RjBERDQ0RjZGNTdDMjZFRThEQUE4RjhBODk3Cis6MTAyQTIwMDBCRUFDQ0IxNTc2MUJGMDdDRUI0NzJGRTdFM0ZCOEQ1MjVBCis6MTAyQTMwMDA5ODQxOURCMUJCMTk5QkNDRDgxQTBGRkMxM0VBQ0IyQTQ1Cis6MTAyQTQwMDA5MjFERjhGRUREMkQ1MjM4ODZBRjk5RTk5QjA0RUY2Rjk5Cis6MTAyQTUwMDA2NUZDN0RGMzAzOEFDNjY0QThFRkJCQUQ4OTRENjRFQ0M5Cis6MTAyQTYwMDA5NjFFOThDNTQzMEREOUM3QkMzRDYzMDU4QzQ1RjgyMzE4Cis6MTAyQTcwMDBENkIyMDVERTU3QTZERTQ3NThENzQ3MEFGNDZCOEUzOTIzCis6MTAyQTgwMDA5RUVGOUJGNTNFMEJFMDdCMkRGNTFDRDY3MzBDRkYzMUMyCis6MTAyQTkwMDA4NUIxNEI5OTNGNzgzQTFCRkUxRDY2RTE4RjE1MjgxQkM3Cis6MTAyQUEwMDBGMjE5MUI5REMyOTdCMzY0MENBMDFGQzVEODVDQzY1QzBECis6MTAyQUIwMDBBQzFDQzZBOUJEQ0NDNUNBNjA3RDE2MUVEQjM4MUU5N0VFCis6MTAyQUMwMDAzNTQ5ODRDNzY1M0U0NkY1NzdFNzRBRjEwNzRCQTkxRkFDCis6MTAyQUQwMDA5QjVFMEQyNTNDMkZDODgzMzJDOENDNDIyODIzMUU5NjBFCis6MTAyQUUwMDBDODA2RjhFN0I2NURGNjFFQUU3RjAzNEUzNTlBREEyN0M0Cis6MTAyQUYwMDAwMkYwN0UwMThCQkExOEMwRjc2NzJDNDZFNTYyMTZBNzc0Cis6MTAyQjAwMDBGMkNCMkM0MTcwMkM2NTQzMjUyQUQ0RUY1MjEyOUIxODJFCis6MTAyQjEwMDBDQzEzMEU0NUE3RTNGRUZFQUVGRUQ4QkIxMkJDQkZCRjcyCis6MTAyQjIwMDA1QUFBOUQwMjI1RjNFNUQxQkEyRkI0M0U2QjdFOTU0NTk2Cis6MTAyQjMwMDBBRUMzNzExODkzNUQxMTNGNjNFM0FENzUxRTY2QjE4QTM0Cis6MTAyQjQwMDAyMDYzN0E4RjhGRDNDQjYxRDZDRkEwM0VCRTQxRDA0QkNFCis6MTAyQjUwMDBFM0ZCNzIwOEQ2RERGMzNDMEI2MzNEMDQ5QjM5MDVFQUM5Cis6MTAyQjYwMDBBMUFFQUNGODA2QThGNzNDMUVBQjQ3QkMxQzZCMDFDQzcxCis6MTAyQjcwMDA0M0ZGNjM4RDZFMjk1QTA1QTU0Qjc3NDVBMDBDQTk4Q0EwCis6MTAyQjgwMDAyOTgwQTdGQTg2RjU5MjAyRURFNjQ2RjkzOEUzNEQ0RDI1Cis6MTAyQjkwMDA2NjU3NDJGRDcwNEM1MkM1NzNFQ0FGRUIzMTQ5ODdGQTcyCis6MTAyQkEwMDA3OEE4M0YyOEUxN0JEREM1NjA5Qzg2ODY1QzU3QjIwQTI5Cis6MTAyQkIwMDBGMUREMzM0Njg3QjJFMkIwOTY5MDAxQkZGNUE2NEVDRjY1Cis6MTAyQkMwMDAxOTVCNDQ3NDM1NUVEMERBNUM5M0Y3OUI3QjM4Q0ZDRkNBCis6MTAyQkQwMDBFODNERkJEM0M3RDY3QkMwRUYyNTQ1N0NERjhFMUQyRTlECis6MTAyQkUwMDBDQjQxNzg1OUQ0REVCRjQ4NjUzMTRGNUUwQUNGM0JENzIxCis6MTAyQkYwMDBDMTBCNzcwQUJGQkIwRTk3NkQ0NUJDMURFQjUzQzM4MjVCCis6MTAyQzAwMDA5NDZERTNDM0I4QkQwREYwRkU0Qzk1MUM1NjBDRTRCM0I3Cis6MTAyQzEwMDAyMjBFN0Y4NUVFRDc3REE5NzE3NkFFODNGNjk3QTVFMDZCCis6MTAyQzIwMDA2ODU0QTZGNjEzM0U0QzQ2RkMzOEI3MDZEQTU3QTVEQUM4Cis6MTAyQzMwMDAzRjgxRUQwMThFM0QwODBGRjU1QjczRDQ4QkYzNDQxODkzCis6MTAyQzQwMDBDRDMzMTIzREJDQjA0RUE3N0U4MzYyMUREN0ZDRUYzMDYyCis6MTAyQzUwMDBFREQzREM4NjE2ODlDRjJCRTA2QkIwQzM2Nzk1MTY3QzZECis6MTAyQzYwMDAyMzhEN0Y0Q0MwNjU4RDZGQ0RGN0M0QkExMDk1OEQ0QTBBCis6MTAyQzcwMDBENTIzRjdFMkJBOEU2ODdDNURGMzhEQzc3NzIzRkU4RThECis6MTAyQzgwMDA3OEMyMzFBODNGNzlERERGOENCOTE3ODZCODYyRkFGM0Q0Cis6MTAyQzkwMDA5NzNGQzM3MEJFRTUwRkRGOEVFQjdBMkU4QkQ2RjVENDRGCis6MTAyQ0EwMDA4NzY3NUVCQjkxMEQ5RkY3MkQ4MTg3OUY5RTlCM0Y0NDU5Cis6MTAyQ0IwMDA3NTZCRkVCOUE2MzQ0NjAyM0FBQjM0QTU4NDBCRThFNTQxCis6MTAyQ0MwMDA1OEZENTcxRUJFRDdDMDdBQkY4OUYyQTREMjNDNjY0QUNGCis6MTAyQ0QwMDA1MDRFODQ2MTY4QkY5OUZBQTc4RjQxOUU1NTQyNzdFNEIwCis6MTAyQ0UwMDBDNzQ5MEQ1MjBCQjY3QkUyQzY4N0JFNzQxRjNDRkFBOURBCis6MTAyQ0YwMDA4QkMzN0RDNTVGNzJCODJGQkI3RUVEOTMwOEVGNjUzNzQwCis6MTAyRDAwMDBBRUZERjkzMzUwQkYwMjg1MjBGMEREQTUzN0VENUZGMzRFCis6MTAyRDEwMDA3N0YwQ0Y2RjJDRkNDQkU1N0IxOEM5ODU1ODM2QzA5MTc2Cis6MTAyRDIwMDA2QjRBMENGNzc3RDlGN0REMzZCOTcyRUM3OTNGQzk5NTY0Cis6MTAyRDMwMDA0MkIzMzQ4NkZDQjdBQzRGMjJGOURDREZFODY2NDE3QzU1Cis6MTAyRDQwMDBGRjMzNzdEQzhERkNGNTgwNjQ1MkZCNjdERDcxOTQwRkY3Cis6MTAyRDUwMDBDNzVDOENBMTNDNUU3NkRDMUI0NzdFNjFBQjk2OTFCQzY4Cis6MTAyRDYwMDA4RTU4RjJEQUNDNUY3QTJGOENGNzZFODMyNUNGMzk5RDlGCis6MTAyRDcwMDBEMjdCNThERkJCRTYyRkI2NUYwREZEQ0Y5OEFFMzA4QTExCis6MTAyRDgwMDA0RDRCNUUzOEYxRkNBRUMwNkZBNEJFOUNFODYwOTk5QUQyCis6MTAyRDkwMDA3NDg1MzNEMDQzNzM5QjYyOTNEQkY1MEQyNzg5QUU5NjIwCis6MTAyREEwMDA0MUM5RDJGODc0QUVFMEIzNjUwREJGMTBGQ0E5OTM1Q0M1Cis6MTAyREIwMDA3MkMyRjM0NjZENjE3MTI2QkEzQjI1RTA0OTBBN0E3QkZGCis6MTAyREMwMDAxN0Y3RkIzMjg0MEY3QTIxREQ3NDI5NzEyNTRENEVDMzJDCis6MTAyREQwMDA5RjJCMzI4MUVBMzE2NEU5NUJCNkQ4RTFCNEU0NzY0QkVCCis6MTAyREUwMDAyQ0RCQTZBRjQwRkVGRTBCQ0FDREU2QjY3Q0RCRjNCOTBBCis6MTAyREYwMDAzOUFDNzZFQUE3OTNDMzdGMjAzOTlDOTQwODFFRDBCRkQ0Cis6MTAyRTAwMDBCNEZGOTFCODE0NDdCOTY4RURDRjFENjI3RjIyMTU4Q0NECis6MTAyRTEwMDBENkYzQUIwMzUyM0MwNkZCRkJBQjIzNjI3REZCQTRCOEFECis6MTAyRTIwMDAyMjExQkQ5QUE3M0QzODJFQ0M1OTlFREFGRkRCQzVGRTk0Cis6MTAyRTMwMDBBN0Y2OEZFM0M3QzI1NzRBQ0ZFNTZFNEEwMjA4MkRCRUY4Cis6MTAyRTQwMDA0ODA5Q0E2QjhCN0YyQ0ZDRjZFRkY5NTEwOUVFNUY2MUU0Cis6MTAyRTUwMDA1QjY5NzcxREMyNzk0MDIxRkVGREIwRkU2NDMxRUVEQjc3Cis6MTAyRTYwMDBCQjJFQzAyQkY0OEYxQzdFMkNDMDdDMjlGODVCODQxQ0VECis6MTAyRTcwMDBGQ0EwMDNFODA1OUU0QjA4Njc2NTFBOUMwMjZFMTdENkY2Cis6MTAyRTgwMDBBMURERUQwRDUyMUZGMkU5MkZDNUJDNTZCRjFGNkQ5OTk0Cis6MTAyRTkwMDAzMTEzRjE3MzQ3OEZDNDEwM0ZCNzFGRTk1REY2RTdCMEY4Cis6MTAyRUEwMDBGRUQ1RjFFQzMwNEVGMUFCQzZFMkMwMjUwMENGOEExRTU0Cis6MTAyRUIwMDBGQjdFOUVEQTcyNzMwMEU5RTZDM0JFRkMwMjFDRTdGNkY1Cis6MTAyRUMwMDBBOTA5MERFMTVDOUQ3ODU1MzM4MENFNjY5OUJENUEzMkQzCis6MTAyRUQwMDAwMzVEN0REOEI3MjE4MEVEM0Y1NDdCNkVCQzA2RTdEOUZBCis6MTAyRUUwMDBBNzg0RDdDM0Y4QUI4Rjk0Q0UzNDM5OUQxMkZEQUUxNkFDCis6MTAyRUYwMDBGODNEQTlGNkNDMUMwM0YwQjU3Q0EzOUNFNEMxN0I3RDE2Cis6MTAyRjAwMDBDQUVDNzgwNkY5Rjk3NTQ5MjEzQTU4RERFNjk2NzE5REMzCis6MTAyRjEwMDAyM0QxQ0I4NzFEMkU5NkMwNzlENDA0RTE3M0E0NzYxRkVDCis6MTAyRjIwMDBGNEI1RDBGQkZFMDcwQTZGNDBGQkVERjY3NjE3Qzk4QkIwCis6MTAyRjMwMDBEQkRCREM0NDRGQUIxQkE0Mzg5MzUyRkNCNjQyQzBCQjc2Cis6MTAyRjQwMDA3QUI3NDJFRjRGOUExMkM5MEY2QkJGNkUxN0Y0NzZGMjQxCis6MTAyRjUwMDBGMDU1QUZBMEJFM0YwM0YyMDdFNUVFOEM4RDNGRDQyRUI3Cis6MTAyRjYwMDAwMTNDQUNEOEMyRTVEMUM5RERCOTRCRUY0MTM5MjJGNEZGCis6MTAyRjcwMDBFNTFENjJEQ0RCRTI4QThEM0Y1NkI2NjdEQkY2MjNEQUJECis6MTAyRjgwMDA5NTZGQUI5RjNFOTI3RjYzMUREMjc1OTc0MkZBRjM5NjgxCis6MTAyRjkwMDA4RDhGNjkyMTkyNEY3NjdCMTMzOTZDNTI0MUNBQkUzQ0FBCis6MTAyRkEwMDBDMTg2MTY1QzIzQTVFOEM5QTI5RjVCREJDMERFMEMwQ0MyCis6MTAyRkIwMDBCNzM3NUI4RTQ4NjQ4RjVFQjQ5REQ5MDY3NkU2QzRFMTcwCis6MTAyRkMwMDA3NkE2MjU0NzIyNjg5Rjk1QTdFNDg4MjUzN0VFNTJBMjZBCis6MTAyRkQwMDA2MzgzMDBDN0FGNUREMUNCRjJDQjQ5NkUzQzIwRDUyMkQ1Cis6MTAyRkUwMDA5REU4QkY0NUJCOTJDNTk0NUE5NDZGMTcyQjJGNjhCMUNCCis6MTAyRkYwMDAxNjFGQzFERjdCMUQ0MDU3MTlFODc1MDZEMjE1Q0MzMzZCCis6MTAzMDAwMDBCM0E3M0YyMzNEQ0Y5MDBDMUEyRjQ1MzdCNzA0ODg2RkU1Cis6MTAzMDEwMDA3MTUwODBBM0Q5NjM3NjIxOUM5N0MwQzRERTZBMkE5OTM3Cis6MTAzMDIwMDA5MkM3NEIxNUVBOUIxMTY2QTA4NzUzNkJBNUY4QTE1Mjc2Cis6MTAzMDMwMDBERUNFODdGMjE0RTBCQTA2OUUzNzc3NUQxRURGMjZBMTRBCis6MTAzMDQwMDA1RDA4N0ZBODNGREJCOEREMERFRDRDN0YxRTNEMzcyNUM5Cis6MTAzMDUwMDAyODhCREE0QjVGQzZGREI5MDQwNDgwNTZDRERCRTMzQzE4Cis6MTAzMDYwMDA2MDY3MTE0QUEwN0RDMjVENEQ1RDYzMDEyODhCQTE5RjAxCis6MTAzMDcwMDBDQ0ZCRDM3QjZDMTcyMDM5MUVBN0Y1RTJGODM4NEU4NUMwCis6MTAzMDgwMDAxMjVGODM3MkM2QTJFMzY1NDJFRTgwNUNBRDU0ODFCRURFCis6MTAzMDkwMDA5QTU5NTYxOEY1NjY3MzVCRjk3OUVEOTcxQkMyNzZGOTY0Cis6MTAzMEEwMDA3MTUzOUQ1RDBGQ0MzNUVERjJGRkU2RDk5N0Q4REEyRjNECis6MTAzMEIwMDA4ODk0REJERUZGRDlBMjJCNkNFRjE3NDdBRkIyRDVCRkU4Cis6MTAzMEMwMDBCQ0VBMEJCNkY2NEI1QjY3RDhGREE0OUZFNkQyN0FENjc2Cis6MTAzMEQwMDAwOEJFMUMwOUVFRDc4NUJDRkM4OUMzM0VCNUNBQTZFQjY5Cis6MTAzMEUwMDAxMzM1NkZDMzNFQjE3NUVFRjBFMzUwOUM5OEMzMTZGNUVGCis6MTAzMEYwMDBBNUM5MTU5RjJDMTEzRTdGMDM2Q0MyRkQ4MzNGN0Q0Q0ZCCis6MTAzMTAwMDA3ODBDRjE3OTlCRkVDMkREOUE4OUVFMzREMTBGQ0QyNTgyCis6MTAzMTEwMDBCNDk3OUNFRDRGMkM4Njc5RDJGQUZEOUIyNDExMUQ5RTBECis6MTAzMTIwMDBFQkM3M0MzREJGMDQ5MDVCODA5MzczMDBGNTc3QjI2NEJFCis6MTAzMTMwMDAwOUVFOUIzQkQ3QTBGNzc3QzlDOTAyQUNGRjg2MERFRDFFCis6MTAzMTQwMDBDREM3RkRGNTI1OEI5MTdGOUE1NUY2OUM5NDgzRkRDMkUyCis6MTAzMTUwMDAxRTM3Q0MwN0Q2MTA2QjAzRkE2ODY5RkJEMTcxQjRFMzU0Cis6MTAzMTYwMDAyNDIzQzg5NjYwRERFMzRCMjA3RkIzMEVENzg3NDkwQjNECis6MTAzMTcwMDBFRkMwODdCREExRTg4NzEyQzAyMUI1RjdGRjVFQzJGNzk3Cis6MTAzMTgwMDBERjY3MDZFQTYxOTYyQ0NBNDVGRjExQTc0QUU3QzNBNjg2Cis6MTAzMTkwMDAxOUFDMTVGMTc1QTJEMThFMzdBRjU4QzdDRjI1OTlEQTgyCis6MTAzMUEwMDAzREM3Q0NERjIyMUY5RDk0NzRCRTNFMDFFRjM2QzkzQzYzCis6MTAzMUIwMDA4QkYzNTk3MEJGOUJBQjZCRUNEM0MxQURDOEI1MDhGN0FGCis6MTAzMUMwMDA4RjA4RUUwREFEMkM5OUFEOEMwQ0Y3MTVDQzc0Q0JBM0ZDCis6MTAzMUQwMDA4NkMzNzM5Njk5NTk5OTlFQ0YwMjc2Q0RGNEZDNzIzN0M3Cis6MTAzMUUwMDBBQjQ0N0JGNTg0OTQxNTVFNUY4QUU1RDAzRjdFMERGODk1Cis6MTAzMUYwMDAyQUY2MEQ1RkY4NzE2MzM4NUQ0Qzk1NzM2OUZFNjY2MTYwCis6MTAzMjAwMDBFRjE2QjY0Qjg5NkNCNDRGOTk4N0VDNTdENkYzOTBFOTFCCis6MTAzMjEwMDA0MUI5MjY0NDVDNEI5Qjc0MTJEN0NGM0ExQUNEQTQyN0YwCis6MTAzMjIwMDBCNTVFNjY0ODJDQkREREI5N0Q2RjczNTM3QjRCREU1OEIwCis6MTAzMjMwMDA3MkNCQzJBNzI1NTcyQ0Y5NjVFMUQ1MzlGRTQ4NzIwNjM1Cis6MTAzMjQwMDBDNzUzRjMxMEZFRTgyNDM5OUQ0RTc0QzBDNzA0ODRDN0U5Cis6MTAzMjUwMDBBQ0M2RkRCM0Y2MEREQ0M4OThBNzdBRTQ3REIzRTQxNEUwCis6MTAzMjYwMDBCNDYzRThGRjhGQjQ1RjgwMjdCMkVCNUM2MTQ2Nzg3QTg1Cis6MTAzMjcwMDAzNzM4QjRGNDI5NThGNzQwMUJEN0Q3RUYxNjMxQjIwRkJGCis6MTAzMjgwMDBDRkI0NUQzNTkwODNGOEYxNzgyQTEwM0Y4NTdDMkE1NkJCCis6MTAzMjkwMDAxODFDNUE4N0YyRDVBNzI2RkExMUFFNDJBMUJGQkM4Q0UyCis6MTAzMkEwMDBFQkFGNDI2NkVDQjgxQUZERkJGNjkzNEJCMDlEQjUzRjExCis6MTAzMkIwMDBCOTYyN0Y5QTYxN0ZEMDFGNjlGNjBEMTVBMzlERTQ0NjIwCis6MTAzMkMwMDBCRDA2RUREQzIwNzc1MTJFMTdCNkJGRkYxRkE4MTcwQkU4Cis6MTAzMkQwMDAxRDdBMTEyMTYxRTk3MDY0NTVFREI4REE0ODFGRkZBMzJBCis6MTAzMkUwMDA4RDY4NUY1QUUzNTI4N0Y0RkQwRjZBMjcxMUJGODVFREExCis6MTAzMkYwMDA5QkVGNTYwMkI2RjFBNThGMTEwRjQyNkVBM0Q5NzU2RUUyCis6MTAzMzAwMDA5RTUyQjQ1N0U1ODQzQjkwQTIwQjI3NUM1NkJGOTFFOEQwCis6MTAzMzEwMDA4NEE1Q0Y1MzZFQUI5MzNERTFBQ0JCQzM5QTREM0VCRjhBCis6MTAzMzIwMDBGQkM3RjI5QzU2REY3OUU4Q0QzOTlFOTNCRTlEN0MyMDg5Cis6MTAzMzMwMDBGMEYwMjlFODc0MTNBNzUzMkUxNzJDQkVGRENGQTJEM0FCCis6MTAzMzQwMDBBOEI1QUZCMURDM0I4RUEwN0VFREQyQzJCMzBDQjQxM0Y2Cis6MTAzMzUwMDA4NjdFQzhFRDA0Qjc3MTA4RTkyQzI2NjU1NUMyRkI2ODY2Cis6MTAzMzYwMDA4NzRBNzZBMzY1NTdGNEFGRkRFQjJENjVGMEZDNDRBREJECis6MTAzMzcwMDA0QzdFQzQ4OUY1OUNFRUY3M0NDMEVENTE0QjZGNDc4NTAwCis6MTAzMzgwMDBERTQ2QkIwMEYxMEE3NkMzODA5Qjk3MUUxQ0M3QkZGRUJBCis6MTAzMzkwMDBFNjUyMDlFMEY2MTg0M0ZENkU2Q0RGNjY5MEJEOUE1MzY1Cis6MTAzM0EwMDAxN0Q3MUJBMThDNTcxQ0YyOEMzMzUyNzIyOTE5Q0JDRjIzCis6MTAzM0IwMDA1QjBFRkJGNUFENUM2MzU5ODRFQ0VCRThFOEI5RkVENDM5Cis6MTAzM0MwMDBGQjFGQ0I1QzNGNEQyQjYxNzlCMzYxQkNFNDU2MzlGQ0VDCis6MTAzM0QwMDAyMEY0NEZCQUVDN0FDQzJBRDcyODVDNUYyNkJEQUMwNDI3Cis6MTAzM0UwMDBGREUwOTFEQTBEMjk5NjVFRDUzNURBOTdGOTAzQzc3MUJDCis6MTAzM0YwMDA5RjQ2REEwN0Q4MDE5REUyOThFN0U4OTBFMzFERTZBMTMxCis6MTAzNDAwMDBGMTkzN0VCQjFFM0EyOUY0OTAwNUZGMjdEMEFCMEI4QkJFCis6MTAzNDEwMDA4MTNFRjY0QTk5RTFGRTQ4OEMxNzdEMEUwMDgwRkQ4RUI0Cis6MTAzNDIwMDBBQUNDQ0NENENFQjlFRTdGMTBGRDEyQjI0QUYzRURBOEVGCis6MTAzNDMwMDBEODM5MUJGNzNCMTY1M0MyRTlGQjYxOTU3RkExNzBGRDlDCis6MTAzNDQwMDA5OTMzQjcyMUI3MTFEQUIxRjU5OURCRTU4OTc2OEZERENDCis6MTAzNDUwMDA5N0I1MDhGRDJCNDA5RDhBRjE5QTUwNEM5RjM3MUJFMzhFCis6MTAzNDYwMDA5MTUzRjMyNkExOEZGRDYzRDQzRjMwRUZFRUM4MTlCRDExCis6MTAzNDcwMDBDNUY3ODlGMDUxMTA1MjQ2QzZDNzlCQjJDQ0Y3RDFDMUVGCis6MTAzNDgwMDBCNzdCQzA1RDQzRjk5OTk0M0MxNDdGNjk4OUI5MzNGMkU1Cis6MTAzNDkwMDBCMTI1QTc5Q0YyQzhBOUU3MjREMzY0NkRENUMzRTU4QUZBCis6MTAzNEEwMDAzNUVFMjdENTY3MjAxRkIyOTQ1MTI5QkJGRDlDM0VCQjRBCis6MTAzNEIwMDA1ODdBMUM0MTBFOTRDODJDREE5N0MxM0ZCRDVBRTE3ODY2Cis6MTAzNEMwMDBFQThGRjEzODg1NkFDQUE0Qjc2NjJBNEQ0QzAyM0M2RDcyCis6MTAzNEQwMDAwODMyOTIwNzc5QjhEN0M4QjcwRDJDMEUyODYwRjkyQzlFCis6MTAzNEUwMDAzQ0UwNDM3OTEyOTQ1OTgyRkM1NkE3MUY2ODM2QTExRjBECis6MTAzNEYwMDAxOEU0QTAzMTdENTQ1OTdGMjEzQzBGQ0U1RjQ5RTcwQzgxCis6MTAzNTAwMDAyQ0MyRTVBRDBFRkY3MTNFMzI0OTVGQjgwNTVFQTNCMTM2Cis6MTAzNTEwMDA0OTE0RTdDQzZCQjJDQjcxMzdGQTgxMjAxRkY1MDZDNzhGCis6MTAzNTIwMDBGM0Y5MzNFOUJDQzFDREQyOUVDMzNBQUU1MkZDQzFEMzRDCis6MTAzNTMwMDA2MERBQjM2QTU2ODNGQzU5QkRGRkFBNUQ4QjYxRkM5QUMxCis6MTAzNTQwMDA0NzZFN0UxQkNCQzkwN0VGQzlGRjEyOTQ3NThGRUZCQTg4Cis6MTAzNTUwMDAxOUNCOTJEN0EyNjMzM0M1NTNBRDEyMzg4NUM5NzUwMDE0Cis6MTAzNTYwMDA5RjhGMTlFRTlDOTFEQjE5RUI5NTA4REFENUIwOEYxRDcyCis6MTAzNTcwMDA0ODBGQzk1ODc5MTZEMkY3MkE4NUYzN0ZGRjAyMkQ4MEFDCis6MTAzNTgwMDBGMTE5NzUwQjk3QUJFQTdDNDAxRUQxM0ZGN0QzOUI1M0UzCis6MTAzNTkwMDBGRTM0RjkxNUFBRjA5Mzk0NzY4NUUyMDg0OUJEOENFMkQxCis6MTAzNUEwMDAyRDg3QjZDODFBOTYyMDY3NjMzODhGMzU3RkFGODg1MzRBCis6MTAzNUIwMDA3NzhBNzhBQjEzQkVERTkyQTE2Mjk0ODMyN0Q2N0Y0NENDCis6MTAzNUMwMDBGNkExQTI2Nzg1NjdDMzdDNUQ3RTU2NDI3MDg4Nzg0MTBDCis6MTAzNUQwMDBCM0Q4QkZFNERBN0E0RjdBQkM0ODExN0U0RUM3RDEzOUVFCis6MTAzNUUwMDAwMzA2RDJDMTgwMTJGNjFBQzQzNzFBOEUxQkREMzI5RDMzCis6MTAzNUYwMDA2MUZDNjU5NjFFNjY2ODRGNzQwQUJGNDdGMTk5MENGNzI3Cis6MTAzNjAwMDAzNTVCNjczM0QxQUY4NTU3NUEwOEZCNTdCMTcwMDJGQjYyCis6MTAzNjEwMDBCN0Y3MjM2RTYxQkRFNkVEQzgwNzNGQjg5NkRCMjEyN0ZCCis6MTAzNjIwMDA0QUVENzIxQjQ4QTgwQkY2OTRDRDJBNUFBRjIyNkQzNjhDCis6MTAzNjMwMDAwNTI3NUQ4NTM0RkY3QkE1NDBDODU1NEVBRjZGRDQ0RTNFCis6MTAzNjQwMDA3OTZDMUJEMEMxNzM2RUYzMUU2NUQ0MjdFMDIzODc1Q0IxCis6MTAzNjUwMDBGRjAxQjAwOUVFREJBMzkyNUQ5RTVCRTU0MTI3MUZCNTNDCis6MTAzNjYwMDA0OTY0MTdBQTI2NUZFNzRDRTVDMzQ2RDQ5MzFCQzE2RTk1Cis6MTAzNjcwMDAyQzM0ODZGM0NCQzZENzE5RDk4RDFCODFGRjYyQTU5OTRGCis6MTAzNjgwMDBGOEE3NUE0MjE5NzFCMUZDOTNENzlFMkI2MTFDRTNCMzgyCis6MTAzNjkwMDBGMkNGNUYyQUUyOUM0RUYwMEZEMDU5MDJFRDk4NDcyNUY5Cis6MTAzNkEwMDBBMzczMEFBQ0VGM0JGQjFBN0YzQzA1NUUzRjdCNjA0NTkyCis6MTAzNkIwMDBGNjM1NTA3RTJGQkVGMUZBNkI2MEZFREIxRkRGOTM4RDc3Cis6MTAzNkMwMDBGQkZDRThBQkMwNEZFN0YxRTMyRDdFNkE0NjFCRjYzQ0ZFCis6MTAzNkQwMDA3MTM2NjNBRDlEOUY4Q0Y1MTVDNDRGNkYyOTVDN0ZGNUU2Cis6MTAzNkUwMDAyRkY4REQxQjU3RkY3RjdFM0ExRjNGQkRBRDAwN0Q0RTlCCis6MTAzNkYwMDBGQkQzRDlFMkU4NzlFNDVCNzMxMUQzRDBERTgyMzYyNkJFCis6MTAzNzAwMDBEMjc5MzQ2ODJGN0Q2QTE2RTE3QjlEOEJDQjMxQkZDQjlDCis6MTAzNzEwMDBDQkVEOEUxMDdGRUYxQ0VGNkZENDRGMUUzRjU4NTBGRTQ1Cis6MTAzNzIwMDBEOUY5NzQ5RENGRkNFOEYzRTA3NzkwM0IyNDZGNEU4QzgxCis6MTAzNzMwMDBCM0YzN0RBNzhCRDNEREFGNUM5Rjc4N0RFRjdDRTE3MzI2Cis6MTAzNzQwMDA1ODFGRDhGNTY0REY1REE3MzIwM0ZEODA4OTJGNzg0OEM0Cis6MTAzNzUwMDA1OEJDM0E2RUUzMTE2NDg5NjlGMDNDOTRDN0RGQkJGMzRGCis6MTAzNzYwMDA0ODVFQzZEMThFMTk1MjJBQTlCRkM5QjgxRERGNTRCMzBECis6MTAzNzcwMDBGOTA4M0Y5NzE4QUM1ODA0RkVGMjFDRjgxN0RBMjNENzYzCis6MTAzNzgwMDBGOUI4NUYwMUUzQjAxMDhDQkZEQTFCMkQ1NjQ3RDE3ODMyCis6MTAzNzkwMDBFNDVGQkVGQUZDQkUyMENBOTdENzNENjYwOTNFNjc0OTgyCis6MTAzN0EwMDAzNTE3Q0YwNzJDQkI2MzY0N0U1N0Q5RTkzNDNGRUI2OUVCCis6MTAzN0IwMDA4RDExMUNBNzJFRDUyODVFODk2MjJDMDBGNUFEQTU5NzJBCis6MTAzN0MwMDA1MjlDOTI4NTYzQzcyNUFDOEZEMjE5Q0E3MTI1MTg1OUFFCis6MTAzN0QwMDA0Qzc2NDg5QkRCOTgwNUY1QUQ2MDQwQzU4MjQ0QjcyNDI0Cis6MTAzN0UwMDAzNzk1RjZERTUwMDBFNTAwRDgyNUY4NUU4RENERjU2OEZBCis6MTAzN0YwMDBFOEJGOEM5MjMxMDhDRERDNkQxRjkxREY3REEyOThDQkE0Cis6MTAzODAwMDBEQjhFMjk4Q0NFNjkwNjFFRjhCN0E1MzJEQTNCRUQ2RTQ5Cis6MTAzODEwMDAzQUI3MDBCQjkxRjgzNTJBRTQ0NjMyMzgzREQ0ODI3RTZGCis6MTAzODIwMDA0NjkxMTY5NkEwQkUyOUY2OEJFMzVGRTNGMkM0RjQ0Q0YyCis6MTAzODMwMDA0RThGOEZGMDc4NDc0Qjg4RkJCQjRFQkI2RkYzRDcyRjczCis6MTAzODQwMDA3QkQzQzBGMTdFRjg1QUQ3RTU1MEJFRkVFNENGNUZCRjEwCis6MTAzODUwMDAxQ0RFQkRGMUFERDc2QTMwRUVFREFFRDM2QzcxNDczN0VCCis6MTAzODYwMDAzM0RFNDQ3QjBCN0NBNjg0ODZGMjM5NzY3MjA5NkU2NjYxCis6MTAzODcwMDBDQUFGOTM2Mjg4OUY2ODhEM0Y4RUVCNDVERTQ2RkMyNDdECis6MTAzODgwMDBBNzI4RkM3QzExRkU0MjAwNUY0MEMwRDcxRDNDNTU0NTc3Cis6MTAzODkwMDBGM0M0REVGRjhGNENGMjlFRkUyNjBCM0QwMkVEMzZFN0IxCis6MTAzOEEwMDBERDFGNDczOTkyOUE2RjEyQzlBNzI4QzgyN0Y0MjNBM0FFCis6MTAzOEIwMDBCRTlFMjU2QjY4M0U3RkY4NDFFQ0YzNDdEOEQ1QzlBOTc5Cis6MTAzOEMwMDBGM0MyNDM1QkU2QjUyMDlFRTcyRUYwRTg0ODY3RUVEOEVBCis6MTAzOEQwMDBFNkJCOTFDRTlERUIzQ0UzN0JGMDUyMENDREQ5RTYwN0U1Cis6MTAzOEUwMDAzRTcxNTc2OEE2OTdFQzVGNzY5OEY2NDMzNEIxRTBENjAwCis6MTAzOEYwMDA0MTgxNjBEQzAxRkEyRjVCQzEzMkY0MzdBMDNGQUUxMzg3Cis6MTAzOTAwMDBFNDE5REFEQjU2M0YyMDYzMTNENzdCQzYzN0ZENTI4QUIyCis6MTAzOTEwMDBGNzhCNzg4NUQ1RUZBNjk4NDRFNzA0Mzc5NTAzMUI5NDc5Cis6MTAzOTIwMDAwRkM3RDMwNjlGRkM5M0FGRTFCOTRCNENEMTE1NEUwNzlGCis6MTAzOTMwMDBBMThBMzRCQ0UxOUYzRDZFQzZFOUUyQjI3RDc2QkQwQjQzCis6MTAzOTQwMDBGMzJGMkNDNUY3MzE4NUU4QzVDOTJGRTNFM0Y2RjYxQjQ1Cis6MTAzOTUwMDA3Q0U3M0ZENzFGQkU5RjFDQ0YxMzA1QkY1OUZEMkRGODM1Cis6MTAzOTYwMDAwODVFMjk1MzdDREQ3RTJFNzM1MzlEQkQzRTc3MTgzRTQ1Cis6MTAzOTcwMDBDRTBGRDc3NEQ1N0U2RUQzRTBCMzhGMzczMzY4N0YzRkQ5Cis6MTAzOTgwMDBCQkM4NUVERjgwRjE5QjRGQjI2RTA3REYzRDNEQzZGQ0RBCis6MTAzOTkwMDA4RUZBMTlGQzdBNEJFRUJFRUY4OUZDMkQ4REEzODYxOUE5Cis6MTAzOUEwMDA4RUQzQkY2MEVGRkM3OTQwMDc4NTNBQjczQjBBRTcyRjFCCis6MTAzOUIwMDA2Q0M4QUQ0MTM5QzU0NDlFNDk2NkZCQTM1MEU4N0JBNTYwCis6MTAzOUMwMDBGRDI1MjUwN0ZENTE5M0I3NEYyRTc5NkI0NjBFOUUxN0E3Cis6MTAzOUQwMDBENzMxM0E0RjhGQUFGN0M0NzI4Qzk0M0REMkFGOTY2NzE1Cis6MTAzOUUwMDAyMTlFM0Y3RjdCRTQ2RTZGN0FERTREQ0ExRTc5RTA1NUUzCis6MTAzOUYwMDBBMzI2ODMzREEyREUyMzk5MzBDRUFDMjU2MDhGNTRBNTRCCis6MTAzQTAwMDBEQjIzQUQxMkNBQTBFQzI1NjA4RjkwREQxMTdEMEZGMTk0Cis6MTAzQTEwMDAzNTkyNURGMjYzQ0JCRUY3NjdCNkFCRkZBMDcyM0QwQjhDCis6MTAzQTIwMDA3QUU2OUYzRThCOUUxOUU3MzVGRjQ1RkQxQ0VDODE2OUM4Cis6MTAzQTMwMDAyNUM2Q0E0ODA2M0FGQzQwRTVGMTBFNEI3RjM2MDYxMzEwCis6MTAzQTQwMDAwQTlFOUQ4M0RFNTQ1REYwRkNEQUJBRTQ0QjI4OEUzQjdGCis6MTAzQTUwMDBGNDlENDE1QzM3QUNDN0U1QUFGREY0RUIzOUEzNzI3ODVECis6MTAzQTYwMDAyNkFBM0MwRjY2QTQ3RURGMUFDMTVGRjE2QTVFNjFCN0M5Cis6MTAzQTcwMDBEOEY3QkI3RkMxM0JCQThDRkUwQkY4MzFFOEJGMjQ3RDgxCis6MTAzQTgwMDA2NURCMzAyRTc4MjZBNjUyQkM0RTlEQkY3MkY3NUNBNDMzCis6MTAzQTkwMDAyN0IwQjMzOTNEOUZERkJFQkU3NjQ4QjZGMUYxQjRCMzZGCis6MTAzQUEwMDA1OTM2QkVBRjY3RjY3M0JBMTkxRUZCMzk1REEzNkUzRjc4Cis6MTAzQUIwMDBBNzlCMTVCMjlGRDNDRDMxRUNFNzc0RDc1N0RBQ0ZFOTg2Cis6MTAzQUMwMDA5Q0Y2RkRDQ0QxQUVGRjlFRjY3REE4OTExMTNGNURDMDY2Cis6MTAzQUQwMDBCRTA3N0VCQTA5RTk2OTI0N0VCQTJFREZCODNGOTI2MTNCCis6MTAzQUUwMDBCRkFCMzU2RUE3QUVGNjQ2MTYyMERENEQzM0I4NUQxNzc5Cis6MTAzQUYwMDA4REFEQTc3Q0MwQkMyOEM4OUI1MjhBMUI1MkRDQ0I4QUU4Cis6MTAzQjAwMDA2QjU5NzEyRjJCMkZEMDhBNjczOUUzNTc1NkRDQ0I4QTNDCis6MTAzQjEwMDA2MzQ5MzExRUI3NkFGNjQ0NTcyMEJDQ0RFRDI3NjU5NDQyCis6MTAzQjIwMDAyM0ZBNzMzMDBGMzI4Mjc1OEUzNzJDM0VDN0U1NDE0QjM2Cis6MTAzQjMwMDA3QkU2Qjg5QzMzRkUzNjYyQkI0RkM5NTc5RjgzN0U1OEU1Cis6MTAzQjQwMDA4RkVCQjVGNDAzRjBGOTgzOUY4NUNGNDE2RTZEQzNGMTIwCis6MTAzQjUwMDBGRTA1Rjk3RDE0Qzk5MzZFREFCRjBBQzAzNURBRTlCMDAzCis6MTAzQjYwMDAwRjFBQzZFOTE3OUNERThGRjEzOEY1Qjg5QkY4RjY2MjlDCis6MTAzQjcwMDBGRDVGNEM3NDkwNjFEM0EyRTA4MzYzM0MyQjFBMkIyNTJDCis6MTAzQjgwMDBGRDYyRjE4REM1Mjc0RUZGNzgxODdGRkM1N0YzQ0Y0NUI2Cis6MTAzQjkwMDBGQUM3QzAzRkRGNzM5RDQ3MUYwMTdGM0M4RkY4OUU1NkQ5Cis6MTAzQkEwMDBDOUYxRUJFNDA3OEJGRTgxMjQxMjUyMzVFRTc3MzQ4MUE0Cis6MTAzQkIwMDBFRDJEN0E2NzJGODY0RDg0NzNBMkYwNkI0RThDRDZDODlDCis6MTAzQkMwMDBCRjM4RjFGQ0JGRjM3M0Q4RTczREUxNzE2MjhERjg3RTM5Cis6MTAzQkQwMDA2Mjc3NDE3QzVCNjk4QUNGMkM3RTZBRjc0NDdGRUM0QTJFCis6MTAzQkUwMDBDQjAzQjFGMjFEMEY3QkNDRDdGMTc5NDhFRDRCQTBCRkQxCis6MTAzQkYwMDAxMjlBQ0RDMjFCMENFMkIzNjNGQzM5RTc1MzVGOTg1MUI0Cis6MTAzQzAwMDBGQ0Y0MzNGQjY1N0I1RDcxM0MxRjZBOTE4Njk2MzJGMjUyCis6MTAzQzEwMDA1Qjk5ODY3Q0FCMEE3OUYyNjI1NkY0MjRFMkIzNzk3QTM2Cis6MTAzQzIwMDBBNDg0RDNEM0QwMzgxRkMwRjU4QjBFODVGQ0I1Q0ZDQTgyCis6MTAzQzMwMDA0RkNEMjNFMUZGMUMzRUEyNDNBRURBRTFGOTAxRTk3MjY4Cis6MTAzQzQwMDAwQkU1NUIyOEE0QzUzNzQ4MTlFNDk1QzA1NzlDODVDNzg4Cis6MTAzQzUwMDBFMEZBNjAzRkZGMURGMTk4NTdDNTI0NUE4RUUwRTM2NkY1Cis6MTAzQzYwMDA4RkY5MDdENzY3QjMzRjE0QUQzNkM1Qzc4MDM3OEY4NjQ2Cis6MTAzQzcwMDA3MkIxMUFGMDU2M0UxQzZGMjc1RDdDRkQ0RUZBMEJBOUZGCis6MTAzQzgwMDA0OTE5RTkzRjA0NzI3NDgzOTQ3NjRFMkFGMDYyQUQ2NzU1Cis6MTAzQzkwMDAyNEY5NkNEMTY5REE3OTQzNDg0QjVGRUZGRkEzNzJEOUZECis6MTAzQ0EwMDA5Mjk3OTc3QkEyOTM3MTFGREM2NjQ0QzgzRjkzRjZENzI3Cis6MTAzQ0IwMDAyOTY3ODZEQjQxMzI5RDMzOUUwMUJCMDdCQjVEQUM3QzJGCis6MTAzQ0MwMDA5RDc2RDY4Qjg3MjU2Q0VBNTk4NUNBNkJDRkQyRTEwOUUwCis6MTAzQ0QwMDBGQkUyRDk2QzJBQ0RCM0Y5NTRENjlGQ0RBNTcyRkFEOTlGCis6MTAzQ0UwMDA0QkE4OUM3MTc2MzQ5NTBENjcwMTE4MzA3MTFBQ0Y5NkU4Cis6MTAzQ0YwMDA1MjM5RjNFQzE1NTRDRTNBM0I5RUNBRDk2N0FGQTI3NjNGCis6MTAzRDAwMDA3M0NFNEVBMkYyQkFCMzVGQTBGMkZBQjM1M0E4NzREQTNDCis6MTAzRDEwMDAzRkM2N0E5NUU0QjcyNUJGMkNGOUVFOTRERjk2RkNGQkZECis6MTAzRDIwMDBCRjI2QkY2MzBEMTc2NUZGODBGRUZCQUE3NjFFRjkzRDE3Cis6MTAzRDMwMDA5MkJDMDBCRUJFNEY0Qjk3MTMyOUZEN0NCRkY2MTlGODBECis6MTAzRDQwMDBGQUI4RTA1M0UwREZGNzMwMEVFMzAxMkY4RUUyNTQ2MTYyCis6MTAzRDUwMDAxRUE3MEExODlBODE3OTFBRkJCMDA5NkNBOUJGMzQ3MkEwCis6MTAzRDYwMDAxMkUzMDZDRDBCM0M3QTBDRTAxRTI4RDU0ODNFNkQwQkM1Cis6MTAzRDcwMDA2QTc0RUVCNjU5RDI0NzczNzk5MDRDMjBGREVEMEM2OTA4Cis6MTAzRDgwMDAzNERFQjYzRjJBNUVDQzVGNzg2OTU0NDEwMEU3RTlGNjNECis6MTAzRDkwMDBDQjNBQjZGRjU2NkU3MkRGMkQ3ODhFM0Y4NTg1MEZDMTA4Cis6MTAzREEwMDA3ODJCRjZFQ0YxQTRGQkUxRkJEMTM4MDBGODAyQjFBN0M3Cis6MTAzREIwMDAxOTAzQkVERTM4RUE3NzRCNzEzRURGNTQ0NkYxMTgyODBFCis6MTAzREMwMDBDRDRDRjk2MkRGNzQ4QkYzNjk3NTI4ODQ3OERBRUE5MzU1Cis6MTAzREQwMDA0OTFGNzRFQjFFOTE4NzlBMUM2ODQxM0ZCNzRFNjZEQjAyCis6MTAzREUwMDA2MERFMERBM0RGRDk4MjYwQUJFM0NBNzY5NDQxN0Q2N0M0Cis6MTAzREYwMDA1RDk5MTczN0U5RTk1NzNFMDg5MTNEMDFFRjEwMTQyODA2Cis6MTAzRTAwMDAxM0EyMzQ3MzYwN0YzQUJENjFFMzdDRTc2RDhBMzFCNEZECis6MTAzRTEwMDAwRTg5MTVGQkJCQUI0NzZFQjdDOTNGMTA0MkZBRTg5ODU1Cis6MTAzRTIwMDAzNEI5RjIxNjk4QkY3NzUyQzE2ODlDN0Y3QkNENTExQjg1Cis6MTAzRTMwMDAzRTE0REQxRTRGNTEzMEUwODg3RTc4NUQ5MkUyNkExQkIxCis6MTAzRTQwMDA2NDYzNDcxOUFDMkYyMEYyQUQwMUNDQ0E0ODVBREU4MTE5Cis6MTAzRTUwMDAwNTg3MTI4Njc1NzBCODEyMEE1RjBGMkI4MEU3Qjk3NTU3Cis6MTAzRTYwMDA4OTU4OTJBRkQ3QzRCOEFCQ0Y5NzBDQTFCRkE4RDQ5RDQ3Cis6MTAzRTcwMDBBNjc4NUJBNzNGQjk4OEVBMEUzOEFDRjE3RkFCNTk3OUQ5Cis6MTAzRTgwMDAwMTlDNkY3QzgyNkY5QTI3N0Q3QjExRTU5MTU3NjlCNDA1Cis6MTAzRTkwMDA2RkREQUVBMTA1NTg4RkFENzVCMUM3MzNDNDZGMzYwODVECis6MTAzRUEwMDA3RURFNTY3OUZFQjg4Q0VBQjNDM0QxRURCNUZCOEIxNjM2Cis6MTAzRUIwMDAzQ0VGOEJEMjA5NDdCMzZCNjg1NEE2RkRGQkI0RjM1RkFDCis6MTAzRUMwMDA2OEREOUZGNzdDOUQyM0U0MEY1Q0VFQjZFRjQzNDBDOEFFCis6MTAzRUQwMDBGM0U2MjlERjBFRTFCOUI4MDU0RkE3MDRGQjUwRjNGOTZCCis6MTAzRUUwMDBFRjQzRjMxNDJFQUYzRkVGRjVGRTRGMUJGN0Y3MUE4RjlBCis6MTAzRUYwMDBBQjAwOUZDRTJFQzczOEUzOThDOTIxOENEN0ZBQUM3ODk3Cis6MTAzRjAwMDA3NDM4NEVGOTQ5MDE4QzQ3NTMyRjgzRjQ5MEFBRjMzMTRBCis6MTAzRjEwMDAxNDk1MjU5MDBGRTVFQzBGMTNCODRGNEFCNTY2MjgyNDg5Cis6MTAzRjIwMDA2NzMzRUZCQjEyREU0NDc5NkQ0RUZFQjRFMEE2QkZDOTI1Cis6MTAzRjMwMDBDMjc0QTBGMzQzQUYxNTlGMzZENEM5RkNCRTA0QzY3RjNDCis6MTAzRjQwMDAxNTY2OURDRkYyRjhCNEQ1NUZBRDkwMjkxRTREODFFQzdBCis6MTAzRjUwMDBCNDcxNTREMEMzNzg4RUEzNjA5QzNBNkZGOEZDREY0REU3Cis6MTAzRjYwMDBEMUEzN0RGRTIyMUUxRjU3NTRFRTA3QkUyNzcxN0NDNENECis6MTAzRjcwMDA1RTU1MjhERkIzRUI3OTJFREZEODcxNDZGMkJCQUJENkE2Cis6MTAzRjgwMDBBMDczOTUxREYwM0ZGQTBGQjE1QTVGMUNFOTU2NzFFNDFBCis6MTAzRjkwMDBFMzlEQTk5QzFFNDIzOTZBQzVDNTY5M0U3RTNFNDA3MUJCCis6MTAzRkEwMDA2RUNDNTNBNEI4QjlDMTJBRjA3REI3MDBDRDFBNDdCNTdECis6MTAzRkIwMDBFMkYyOTU2QjI2NjEzQkJGQzEzQ0NGQzFGQUZDNzUyQzg4Cis6MTAzRkMwMDA3MTA5QzAxQjc0Qjc2RUJEQkMzNDQzM0NCQzcyQ0QzN0E1Cis6MTAzRkQwMDA5RTg0Nzk3NzNGMzVGRDU3NEY0MjdEOTcxQzdFQjUwRTA1Cis6MTAzRkUwMDBEQUU1N0ZCOThFRjBFQThDODc2RkFCOTQ0RDFERTU4M0RGCis6MTAzRkYwMDBDRjc3MDhGNzE1NkM2OEEyOEI1QjdCQTQxODNFQ0ZGNkQxCis6MTA0MDAwMDBGOTBFRjJGRDZFMEQyOTg4MTdEMDkzODgxN0FGMzMyRjY0Cis6MTA0MDEwMDAzMjFEREY2NTA4QzdDRTgxNzlGMDZGRUZENjc5Q0I3MDlFCis6MTA0MDIwMDA1RTg0MUJGMzJCNTdGNEQ2NkJBODY3ODI0QkVDRTcxNzIzCis6MTA0MDMwMDBGRTI2N0JERDVCNjU4NzczQUJEOEJGMEJEMUJGMzMwRjJCCis6MTA0MDQwMDBCMUM3OUNCNzA4RTlGNjRDNTA2MzI4NkYzNkFFQkRGQThECis6MTA0MDUwMDA0NjkyRkJEQjE1MzZBRTM0MDNGRDNBRDZENUE5Qjk0OEY2Cis6MTA0MDYwMDBGRjc3MUJGNTdCMkI1MDZGMzQ2ODk0RDdEMzFERjdDNkIxCis6MTA0MDcwMDAzMUM1N0I3QjVERUFEQ0M0NjZCRjFCMUEzRkM3QUE5MUQyCis6MTA0MDgwMDAxM0VFNEM3NkJDMzgxRjBCODg2N0NDNzEwRUQ2M0Q1QkE3Cis6MTA0MDkwMDAyNkJCQTZCQjg3Q0Y2MzhERDc1REY3OTYwN0U1QzQ0OERGCis6MTA0MEEwMDBFMzNFM0RDNjNDRTI0NjdCMkE5QTc3NTFGNzJFRUVEQjkzCis6MTA0MEIwMDBFOEUyNzQzRDQ1OEI0QkE1Njg4RkVBMEIxNzQxN0RGMzExCis6MTA0MEMwMDAzODk5RUMyMTI2RkNCRkVFNkJGOTc5RTJDMzlBNjFCQjBCCis6MTA0MEQwMDA1RkIxNjlDQTRBQjIxQjZFNzJFQjgyQkZDMDJFOUM5MDYwCis6MTA0MEUwMDBCQTZGNzFDMDZCQkVFMDg2RTdFQTczMzAxMkQ4MDNFRjk3Cis6MTA0MEYwMDBFNTg2NkY0NEJBNjgwQzdFNDQ3NkQ0QUQ0NUIyOEVGNDQyCis6MTA0MTAwMDBCNTYyNEYyM0FENkJCMzJFQjMwNERBQkQ2QTJCMTlBOTg4Cis6MTA0MTEwMDA0REFDRDVDNEYzMDA0Q0Q0NDRCQTlCMDM2RjY0QkExN0JBCis6MTA0MTIwMDA5MTNDRDQwOTcwQ0UxOTU3Mzg2OTFCRDREQzQ1QUQ5NDQ1Cis6MTA0MTMwMDBDN0QyNjg0OEU0ODc1RDA3OTg0MTc5RDA1MjFDNTFBNUUxCis6MTA0MTQwMDAyQUVDMzdGRjFEQjRGQkU2MDQ0QjY1RjRGN0FGNTM1OTc3Cis6MTA0MTUwMDA4Mzk2NjY5RjgzNUQ3Q0NDOURCNkFFMTNFM0Y2MDRFNTQzCis6MTA0MTYwMDAyQTlDMUZFNkMxRjkxNzc5RTgzRTgxMUJFREUzMkI1MzJBCis6MTA0MTcwMDBGNkYxNDQ0NDY0OUE5REZDNkIzNDJBMzE5RTUxOTRGOEM0Cis6MTA0MTgwMDAzREU1Nzk3RjNGMjlFM0JDRUMwNTU2QkQ0REZBRTQ3RTYxCis6MTA0MTkwMDAzNUY4OTdCRkM0RkQ4QzMzQTMxRjUzMEQzRjZCNUNFMjEyCis6MTA0MUEwMDBFQjlBRDgyNzcxNkZFNUIwMjdGMjFCMUNERjhBMDc0QzBBCis6MTA0MUIwMDBENEY4RkRFNkNEMkQyQzFDNEI4QkFCNkM3RUZFQ0Y4RjQ3Cis6MTA0MUMwMDBBM0JENkFDNTVGQ0VFNUREMDkzODJEQjgzNzQ5MkM4QjE0Cis6MTA0MUQwMDBGNEJDMjdGQTA3NzdCQTVGQ0M5MjY1NzMyNzdDN0U3MEIwCis6MTA0MUUwMDA2N0M4OTdGM0Q1MDIzRjhEMTVGQzkzNTc1QkUxNDVCOTNFCis6MTA0MUYwMDAzOTE2RjM3RDcwMUZEQUI5M0MzMUUxQkZGNDdDMUY0NUZECis6MTA0MjAwMDAzMDVGMzBEQ0RBMkYxQkMzRTU5MjIyRUU0RDAxNUQ0QkFGCis6MTA0MjEwMDA2OEM3M0FGMzgxMTRDQ0ZCOTkzODVDNkUxQzEwRjQ3RkFDCis6MTA0MjIwMDA4OTQ3RTRGRjRDNjY5M0I5MUY2RTNGQkZGMjJGRTU3QUQyCis6MTA0MjMwMDA5RkI1RTY2NUJDODdGQTdEQTFGNzVGMTQ3RTY1NDJEQzE5Cis6MTA0MjQwMDA2QjNDMkFFRTJEQkVCQ0NFMjAzRkVGOTU3NTk1NTQwRUVCCis6MTA0MjUwMDBBQzBCRDNGM0Q3RDZENTUxOTlCQTVGQzVFN0NEMTc3NjU2Cis6MTA0MjYwMDA5ODhBNDEzNTNDRTdGN0IxQjgwMUYwRkE0N0FEMTkyODEzCis6MTA0MjcwMDA0NTNFQUZFM0Y3QkJCQjlCNEU2RDI5MjdCQjkxOUY1QkQwCis6MTA0MjgwMDA2QzJFQUE0RTE0QTJGRjAyQjBFNjQzRERFNUVCRjNGMDdDCis6MTA0MjkwMDA3QjVFRTY2MDY1MDE1NzczODhGN0ZGRUFGMzBBMjc1REU2Cis6MTA0MkEwMDBFOEQ2RkUzQkY2REJDNzVBMTlDQUJCODA2OURGRUZFQ0U0Cis6MTA0MkIwMDBCMEQzQkZFMUZCRUYyQUJBQjg3REVGQzU3RkMwM0U3RTI5Cis6MTA0MkMwMDBDOURBRjdBQkQ5RDVGQ0ZCMEMxNzI3OEY5MThGMkE4NTVDCis6MTA0MkQwMDAxQzE4MDNGQzc0MDBGQzc5QjdDMkYzRDVGMzc5OUVBQkNDCis6MTA0MkUwMDAxOUUyRkM2NkFBQkMxRTFCMkZEQUJCMzgwOUIxODEzQzVGCis6MTA0MkYwMDA5RUQ3NUVDQ0NGMTNBODFGRTY5NUUzN0IwQzRCQkVDMEM4Cis6MTA0MzAwMDBFMzVCMkM0N0U0QkY4RjE1RTNBQzE2RTM0RUFDQTY3QjEyCis6MTA0MzEwMDBCQkZDRkM5RkY1RTk1OEZBNTg5MkVBQjlDMDA3NTgwNjY5Cis6MTA0MzIwMDA1OUFCODRDODFDQzMwNkM5REYyRTk2ODZBODZFNDg3QThFCis6MTA0MzMwMDAxNkQ2Q0JBNDcwMTlGN0MzRTNBNDNGQ0IxNUYzREIxNTU2Cis6MTA0MzQwMDA4NEZDODhDQ0UzNDVDOUM1NjQ0RjgyNUU0NkI5MTg1N0UyCis6MTA0MzUwMDAyMzhCNTBCRTZDNjhEM0MyODA4OTczNzk3Mjc4N0YwRUNDCis6MTA0MzYwMDBDQjBEN0QzNTAzNzhGRTExOEJDOTI0N0Y5NEU3NTg5NkQ5Cis6MTA0MzcwMDA3RTI1RDk3QkE0QkYzNkFDQ0YzQjk4NERGOTFBNDlDQUVDCis6MTA0MzgwMDA3M0RGRUYyOUI1RTlBOTg5QkU4NUQ3RTlCMDVGMUI0NTgxCis6MTA0MzkwMDAzRTlEMEJGQUIzMENGOUE3NTYzRTFEOEM1QjkyRTlCRDBFCis6MTA0M0EwMDA1NTZFRjQ2QjhCMzJGOUZEMEY3QjI0MTFDRjQ4OEVBNjJFCis6MTA0M0IwMDAzOEEwRDhEN0Y4NTQzOUUzN0RDNjdEMUU2RUQ3M0M1QTU1Cis6MTA0M0MwMDA5QUQ5OUU2NkVDNDExQTZGQkY0Nzc3OEM5QjZDQTFGQjE0Cis6MTA0M0QwMDAzMzNBOEY2RjY0Qjk0Q0NBQUZEOUQ4QzZFRkU5NUJGOEVFCis6MTA0M0UwMDAxQjBENzYyRERBQzMxQkZCRTZDRjQ2RkU4RTU1QUE5NDM1Cis6MTA0M0YwMDA2RjBFRUJGNzIxRkU1QzIyMkY3OUUzRjhFMEMxNkMxRTEzCis6MTA0NDAwMDA5NzI4NDUzOUREOEZGOEFCNERDMzVGNzA2NTEzRTJBRjc4Cis6MTA0NDEwMDBFMzU1OUVERjBCRkFEQ0M3MzJFNDFCNUFGODczRjlEODc4Cis6MTA0NDIwMDAxNzMzQkRCN0NBOEU1MURBQTI0Q0Y3ODY4RjdBMkMzQjcwCis6MTA0NDMwMDAzRDU5Q0FFOTg0RTMyRkVCNUEzNTkyQTk3RDQyRTBCQjhFCis6MTA0NDQwMDBBNDhDNDVDRjg3QkY3RThGNkUxQkQ3M0FGNzU1NDY4ODIxCis6MTA0NDUwMDA3NzQ5QkUwNEM1QjkyNjZBRENDRUQ4QjA5OEUzNzVDM0U3Cis6MTA0NDYwMDBGM0Q3MUM4RkE2OUQ0M0ZDMTI4NzlDOTI4QTA3NUI3MTMxCis6MTA0NDcwMDA2MzRCNkZCNjdCQTJGRkU4MTk5NUQyOTdFQ0ZCOENFNEY3Cis6MTA0NDgwMDAyRTdCQzE3MzEwRjcyREMzMzlDNDI5NEY2RDg2NzM4OEY1Cis6MTA0NDkwMDA5RThCRkJCRUNCNThDMUI3ODdCNjFDOUQ4N0YzRkM1NURFCis6MTA0NEEwMDAxRDIzRkIyQUYwMEM5RjM3NTc2NzcxQjkxNEJGNTM2MDY3Cis6MTA0NEIwMDA0QTE4NjdCOTI2QTJEN0EzRkRFNjZBNjcyNkU2Q0Y4QzFECis6MTA0NEMwMDAxNTcxOUJDMkY2M0UwNUU5MjIwODdCNTkyOEUxQkRBNjdECis6MTA0NEQwMDA2NDBDQkY2NzMyNzYzNzIzM0Y1MTJEOUNCOTZBQkQyMUVBCis6MTA0NEUwMDA0NDY5NUE3RTk0QzI4NkZBNjk3REVEOUFGMTc4Mjk4MUYxCis6MTA0NEYwMDBGNTUzRDQwRjYzQzRGQjQwRkJDQzVGQTFEQzFDMTM4OUQ0Cis6MTA0NTAwMDA1MjFFMkVGNDhCRjlEMUJFMTA3ODJDRjA3MkJFNURERUY3Cis6MTA0NTEwMDAxMDk2MjQ2ODFGMEMyNjI5M0VFOTk0RUI2MzAwM0Y5NzEwCis6MTA0NTIwMDBBNEQ5NkYwMTUxNjdBQkI4OUM5NkUxM0ZENEYzRjkxMTYwCis6MTA0NTMwMDBCQkRDMUVFN0I4MTcxRDcwRTRCREU0N0E0NUJFQkIyNUExCis6MTA0NTQwMDBCNzhCRjhBNjRFNTAwN0U1NEM3RTc5NEFCRjNBRTA0MzU4Cis6MTA0NTUwMDAxOTU2OURFQTFGQjBFQTlGMTEzRTIwMDRBMjY3MEIxRTY4Cis6MTA0NTYwMDBCQzRBODk3Mjc3OEY0QkZGQ0E1M0E4OUZFQjM1OUU0NzkxCis6MTA0NTcwMDAyNkVFQ0I2NTBCQkNGQkQwNjE4Njc2MDM1MzVFMzE3MUIyCis6MTA0NTgwMDA1Rjc3ODRGOTc3NjlDRTRDOUQ0NzdFNjg3NjlENzU5RkVECis6MTA0NTkwMDA4RURGNTc4NjMyODY3MUJBNkMzMUJGNzVBRjJFOUIxOThDCis6MTA0NUEwMDA2Rjk2MDMzRDY0OUI0OUJBNTdBNzVCREY1NTMwNTkwMkFDCis6MTA0NUIwMDBGMzcwNzQ5RjRDNzk3NEJBMkY0MkYyQTk2NzgxNDdDNzkwCis6MTA0NUMwMDBFRjdDNjhFMjlFOUU0QkRDMUZDRjM2NEZEM0ZEQkFFQ0VBCis6MTA0NUQwMDA2MUVCRTNGN0VCMkNCOEIzQjNBQURFMkMzNzZDRjNBQzhBCis6MTA0NUUwMDBDN0Y4MzZBQzdENzRDNkZCNzU3NURDNEZDQTM2NzkxQ0NFCis6MTA0NUYwMDAyMjZEN0NCQTVGQjc2MzZBOTlFRDdFMURDRDgzN0U5Qzg4Cis6MTA0NjAwMDBBMDNGRUI5RTlEMTNBRTczRkQ2QTMyREI2OTEzQzI3NjQ5Cis6MTA0NjEwMDAzQkUyNDJGN0VCNUMyMTdCRkIxRDE3QzhDRkZBQzRGN0U2Cis6MTA0NjIwMDBFQjA0MUU4NkI1NzNEODgzMkVDQjBFMUQyNTMzRENCRjVECis6MTA0NjMwMDAzMzBEMzI3RDQ3MjRGN0EzNjQ2NDg2NDQ3MTA5RDJGN0IxCis6MTA0NjQwMDA5NjlEOTdDNzg3RkE2RjY3RTdFNTU5NzlGRDBFM0JDRkNGCis6MTA0NjUwMDBCMkRGNzI2N0RCRjFFREI0RkJEQzU1MTFFQTczQjE3NkMyCis6MTA0NjYwMDBERTJFRkMwN0QwQ0I0MzVFODc5REQ3OTQ5OTNFOUNGMjBCCis6MTA0NjcwMDAyMjlGMERFRUJFMTJDNjM5NUFGQjIzMDVGM0Q1NzZFNTBGCis6MTA0NjgwMDBGMkVGMUZCMTYxRkVDMTVCMzM2ODVGN0NGQzdCNDdCQjBGCis6MTA0NjkwMDBBNkY0QUJGOEZEOUJERjJENjU2NDI3NTk3MTA0Qjc4MDQ0Cis6MTA0NkEwMDA3OTU3OTFCQzlFQzJFRTVEMEYxMTdFODIwMjBGNERGOENDCis6MTA0NkIwMDAwMUIyMUFDMjU1N0MxQ0YxOTlFOUM1QkM4NUZDMjY0NjlECis6MTA0NkMwMDA4RDBBMkJDMkI0RUZGODU5MDI5OTJFNkRDNTU0RDRFMzZDCis6MTA0NkQwMDBGNTg4OTUzNDNDQ0RGMEQ4QkYxM0QwQThFNzNCRjZEMTkwCis6MTA0NkUwMDBCRUNGRTdDRUMxMUZFNERGNTM5ODYzRDhGN0RERjI5MzY2Cis6MTA0NkYwMDBEMDlDQzVGOUFFQUZCNEQzQzEwOTI5MzJBODQwOTdBNzYxCis6MTA0NzAwMDBCMzRBODVGRDMzQThBM0JFRUM1RUVCMjJCQkYxQTEyNTI1Cis6MTA0NzEwMDA2NTVCQUY0NDdGMzUyOEVCRkMzODcyNjgxQ0RBNDdDRDA3Cis6MTA0NzIwMDA0NzREMkZEQTc5REIyM0QzQkRFM0UwRkQ0MzFENEExODYzCis6MTA0NzMwMDBDREMzQTc5NkFDNzkxNUVCQjFERDJFQjI4MzlFRUE5QjczCis6MTA0NzQwMDA1N0IwMjI4REVGMzZFRjVFQjA3MDMxQkVFRjcwOTE3RUM0Cis6MTA0NzUwMDA1RkIxRTdCRTgxRDIyMEY2NzdENUE2N0Y2RkFBNjVFMzY5Cis6MTA0NzYwMDA3RDNBRkE2RDZGRDQ3QTMzREEzMTU3Njc3MUJCNjRBMzNGCis6MTA0NzcwMDA5NkE0RjhEM0M2NzkxQTQzOTc2QjYzNDlGREU4MTU2ODg4Cis6MTA0NzgwMDAzRjVDQTM2NUJDNEY3RTU3OTY5QkRGRTc3M0I1NEEyODE1Cis6MTA0NzkwMDBERjBCQTM5OUVGMDU1OEVEQzZENkZDOTZDRTMxODJCMzU4Cis6MTA0N0EwMDA2NTg2N0U5Q0VCRkE3OTMyRDYxRjgyN0RENUE1MTQzREI1Cis6MTA0N0IwMDBFNTA5N0FEQTU4NzRFRkQ2MEE1Q0RGNDBFNjdCODc1NjYzCis6MTA0N0MwMDBCOTM2NkIxQ0E3RDM4ODlEQ0Y1RDg1NERBMzcxREQyRUI3Cis6MTA0N0QwMDA3NzY0QTAxRTg5QUI1MEQ2MzEyRUUyNzJCNzQ2NkU0NjgyCis6MTA0N0UwMDA3QkY0NkExNzUyMzhEQkRDRjFDMzg2NDVCODJGNjE0OTg4Cis6MTA0N0YwMDA5NzYwOUVBMDFBNTk0NTc0MTZDQzYyQTgwRjFBOTY0NDY5Cis6MTA0ODAwMDA1QTExMkY4NUEwRkYzMEI0NTc1OEY0NEIzQUE3MjhBQzYzCis6MTA0ODEwMDBEMzk4MTdFQTlFMjUzRDA5MTdCQ0Y3NTQ0NEFGNDJCQzE0Cis6MTA0ODIwMDBCRkI0OTY3RkU3QTUzMEU4QTM3QjQxODUxMTdFMEU1Nzg0Cis6MTA0ODMwMDBEOEVFNjY2ODMyNkMwNDE3RDg0NUZFODE0NDcxMjIyNzkxCis6MTA0ODQwMDAxRjU5RUI2QTVFQ0FFNUY4RUVCNUJGMUQ5NUU5N0IzM0VCCis6MTA0ODUwMDAxNTU5NjU4NDU3QUY2MTVGQjcwN0Y1MkU4QzMzRDUxQ0FBCis6MTA0ODYwMDA1QzQyRjhBRTcxQjMzOEYxQUY5QkU4N0I1N0FEOEJFMDlCCis6MTA0ODcwMDBEQTM1RTVFNDU3MTBBRURGRkQzRThCRjZGQjVBNjY0QUFCCis6MTA0ODgwMDAwODU3RkUxMDNGNjdCNUU2Qzk2RjFBNTQ3ODNDOUNGMzkxCis6MTA0ODkwMDBBMTkzRUYyQzdFNzBDMkI3NzNGNjNDM0E4RkRCQ0MwNjQ3Cis6MTA0OEEwMDBFNzIzQkU2MzY3NjVBMkEzQ0Q0NTZCQkNFOTcxRDE1NjEyCis6MTA0OEIwMDA0MTdGQjAwRjI0NUY2MjNBQTNGRDU2RkU5NUFEQzc3Q0UxCis6MTA0OEMwMDBEODhENUY4QzU0MjI3RkJDRURFNUY3NTZFRjVCQUFEMTAzCis6MTA0OEQwMDAzQTFFOUFBQjUxQkNGMTIxN0YyQkQxRkRBOThEQUVGMEQwCis6MTA0OEUwMDAyMTA0NDdENTE3RTI3RUVFMkVBRTA4NjNCQ0VERUZGMDUzCis6MTA0OEYwMDBGMDM5Q0QzRkQ4M0RFQTRCOTU4OENGMkZGRTIxOEI4RkU1Cis6MTA0OTAwMDAzMzQ1QjVDNkY5MTlEMTdCQUQ5N0UwOUNBMUI0RkY2Q0Q2Cis6MTA0OTEwMDAwNURBQTE0QkU0Qzk5NDNCQkQ2QTA5QzkyRjk3OTBFMzFFCis6MTA0OTIwMDAyRjJGQzlBQjQ3M0YyNTcwQzM3MkM2RTUyMThGNTMwNEIzCis6MTA0OTMwMDBENjU2RjNGQjBDMEVCOTlGQTg1Mzc3Q0ZBMDVERTJGMURBCis6MTA0OTQwMDA5RjdBMjFFRkM2REUzMEJEMUVENzU5MkZGNDgyQTk2NkFCCis6MTA0OTUwMDBGRTJFNjNBRTY4NUYzODE0NDE5MzZDNThGQzI3NTdFODBECis6MTA0OTYwMDA4RkIxQkIxRENGODU1RUM4MUQxNjA3MUZBQ0I4MTlFNEZCCis6MTA0OTcwMDBDRjk3QjI4NDFEMzk0MkRDNjdENzkyNzlDNDBGNjc4MDI0Cis6MTA0OTgwMDAxRjI4MkU1RDcyOTJFODNGMDY3MjAyRURFNjM3QTQ2NDlFCis6MTA0OTkwMDA2ODQ1REE3OTk4RjU5REI5OUY4ODc4NTBDNDJDQTUzQzc0Cis6MTA0OUEwMDBFMUI3NDQzQ0U4QTdFMkJCNzNFRjg4NzhEMDcxMTEwRjAwCis6MTA0OUIwMDBGQUI5ODgwN0ZEMDNDNjgzRjBGQjYxREVDQjY5REZDNjY5Cis6MTA0OUMwMDBENTdERDQ4RjcxOUM5RDM1MEIzQzA2OEMzMzU1MUY3QzU3Cis6MTA0OUQwMDAwOTgxRkNBMjM5RTgxM0Y5RjcwNDZGRDBEMjQzNzNDRkYxCis6MTA0OUUwMDAxRkE3NEEyMDVDNkU4QzRCNzEzODVGMTZERkEzN0I0NTk2Cis6MTA0OUYwMDBDMDM1MjBFMDdBNERDMDY1RTk0MTk0MUI0ODY3NkNBQzM2Cis6MTA0QTAwMDBBQTY3OTI4NzQxQjU1NUMyRjM1RTk0MTdGRDQxOTIxNzhDCis6MTA0QTEwMDAzQzRGM0NCODQ2MzIyNjBDOTcxMzMwREVFODc0M0JERDQxCis6MTA0QTIwMDBBMkJGNTNBMzdDNDRDN0NFRjExRkNERTJGNzBFNUY1QTVECis6MTA0QTMwMDAzQjZCM0YwQkE2QzlBM0M4QzI1NTQ4NzdGOUIwM0YyOEM2Cis6MTA0QTQwMDA4RkEyNEQ1QzhFNDdGMURFNDU5QTVDQjVFMjY5QjAyM0RBCis6MTA0QTUwMDA2MUQyM0IzNzcwM0M4RDI0NUYyRTI0NTcwQTFENzI2NTRFCis6MTA0QTYwMDAzN0NBMTVBOEVGNDZCOTEyNEM5NzJCQURGREI4RUUyMDBBCis6MTA0QTcwMDBDQTE1OTZEMjQzQzFDODI3OTMyQjNGRjM5NkQ5RTIyNDk3Cis6MTA0QTgwMDA5NjdDQjkxQUQ4OThFQ0M0MzBFODUzRkZBN0Q3QTc2RjIzCis6MTA0QTkwMDAwQjM5NzEyMUJENkFFNTdGMDQ0QzQ2N0E3RDBGRTY4NUFFCis6MTA0QUEwMDBBMDNGMzM5RUQxM0QxQ0M1MUNBNDdDQTJEQzc2MTdDMzVECis6MTA0QUIwMDA3QzkwQUREODY1MzRGQTMzMEIyOTFGNjRDNzdDOEY4RTg4Cis6MTA0QUMwMDA3NEYxQjA5NDA4MjEzRUY3NDkzRDVFQkUyRjdBM0ZEQTdCCis6MTA0QUQwMDAwQkRCMjZGMDM4Qzk4RTNGREVFMzQ1M0JGQkE1REIwQjQ1Cis6MTA0QUUwMDAwMjc4OEVEMzlCNkJFNTgxRTg4QjZGODVGQUE5NDY0NkU5Cis6MTA0QUYwMDA3NEIyNjJDRjBBNUJERUMzQ0ZCM0YyMDgxRkI5MzE5MDQ0Cis6MTA0QjAwMDAzRjgwOEY4NzZGRTdGQTQ3Mzc3ODFFMDg5NDE5RjM0MDg0Cis6MTA0QjEwMDBEQzNFMTEwRjUyNjMyMUE0OEY2RDUyRDQ0MzcxOTg0NjJECis6MTA0QjIwMDA5OUY0NTQ2Rjk4RTdBRkY0ODI1RjhFRTc4M0JEMEQzQjM1Cis6MTA0QjMwMDBFN0EwN0VERTcwQUJDQzI4NUZCQ0IyRTcxRTk0MzMxRENECis6MTA0QjQwMDAxMzE2MUFDODk3QUVEMTY1NkZBMjM5QkVDMTI3N0JEM0ExCis6MTA0QjUwMDBGMzQ4RjEzODQxQUJFNkU3ODZBMjM0NzMwMEU0Q0Q1RTVBCis6MTA0QjYwMDBEMzM4REZGRDUxNTVGODdERDhERjdEOUUzQ0Y4Q0VEQzkzCis6MTA0QjcwMDBEMDY4OEMxM0Y0MzYyRTBDRTFCQ0JEQTMyMkExM0NDQTM0Cis6MTA0QjgwMDA0RjE5NDNGNkMwQzY1MTlCMTY2M0ZDQTk2M0I5QzZEMjQwCis6MTA0QjkwMDBFREE0NjFGMzA1RURGNkI1MTU2NzU0MUI3OEZFNDg4NzYzCis6MTA0QkEwMDBDQ0ZEQ0I1QzcxM0UwRDdDNTU4OTc4NEI1RjI3QzJBOTRCCis6MTA0QkIwMDA5QTNDN0YwNEQ3QUJGMEY1RDJGNzRENzMxQkMwM0ZBQ0U2Cis6MTA0QkMwMDBFMkVCNDdGRjU1RjdFOUEzNTE3RUE4MEQzQzdGNjRCM0E0Cis6MTA0QkQwMDA1RjVGOEM3RUEzMTMwRTZCRkM2QkIzMjU5QjdGQTQ1Qjg2Cis6MTA0QkUwMDA3OTBCRjU2QkY4Mzk2MjExQ0Y1QkU4NzU5RDNGNkZBMUNBCis6MTA0QkYwMDA0M0M4NDNDQjZGMUMwOTFGMkVDNzM5NzVBRkQ3MUUwNzlCCis6MTA0QzAwMDBCNEUwQjk1Mjk0NEUzODQ2Q0ExN0Y4QjRGMzVGNjhERDgxCis6MTA0QzEwMDA5RkY3N0MyM0U1MTFBQ0M5OTY2Q0Y3MkI3MkFEN0M5NjlGCis6MTA0QzIwMDBDNjM1MjE5NDEzMTYzQzlCMkY5MDNGRjI2OUUxNkE2RUMyCis6MTA0QzMwMDBFNEVEM0ZFRkY1RkU0RjFCQjczRTlCRUI0N0UwRDMwMUEyCis6MTA0QzQwMDBCQzQ3RDkzMTcxNjYwOEU1NTAyQTFFMzMzNDUwOEVGNkMwCis6MTA0QzUwMDA5Q0I4Q0Y2OEU1OEZCODc0RkU0RjU1RTVERkI5OTNCM0M0Cis6MTA0QzYwMDA4QkU4M0JDQkVBNzQ5RTNGNDI3RjE5RjI0MDM2MzEzNkU3Cis6MTA0QzcwMDAxQkZEMUQ1NUM0NkY5QzdDN0EyMUY4OUQ3OTIzMzdGQjYxCis6MTA0QzgwMDA4NERGMTg3NUNDMjdGMjQ0OTgyM0VGNDQwREYxRkMxMjExCis6MTA0QzkwMDAyQjlGQTQ0QjgyRjUwNTUzRjkyMDIzQ0VFQkMwREI3ODg0Cis6MTA0Q0EwMDAyMUY3REY3M0Y0MUZCNkVFMzBCRjVGNjlFNTlGMENDQkQxCis6MTA0Q0IwMDAyMzk5MkFFRkM3MkQxODk2NDcyMkYyNTE3QTcyOEQzODIwCis6MTA0Q0MwMDBDRjEzRTc3OTI1QTgzNjMxOUUzNzJDOEY2NEVBRjQxMDhDCis6MTA0Q0QwMDA3RTUzNzI1QTg5RTg3NzAzQTNFRkVGRjY3ODc5QkQ3N0IwCis6MTA0Q0UwMDAwRThCRTNGN0NFN0FCMThFRkM1NENCMjhBRjY1NTg3RTlECis6MTA0Q0YwMDBDOUQ0MzU4NDI3OEQ0NTk2RjFGMzFEN0VERTZGRTFDMTYxCis6MTA0RDAwMDA5OTVGNzI0MTdBQkI0MDFFNDlEMDY3N0Q4RjIyNDJGMzgyCis6MTA0RDEwMDBGNEY4QzMzRkE5MjNGODY0M0E4RjJGRjhEMkYxNzBGQTYwCis6MTA0RDIwMDBGODk3RjhCODlDRUMxMTc5NzgzREI5RjY3Q0JDRkJDNEQ3Cis6MTA0RDMwMDBCRTU0ODg3NkNFRkRENThCMzg1RDc3RDVFQjE0Nzc3NzZBCis6MTA0RDQwMDAzN0YwNzhFNUIwRUY0MEQ0RDhGRDAxNjczQ0VGODQ5MEIwCis6MTA0RDUwMDBENzE3NUFCRjMzQUVCNzZEODRGQjY2MEI3QzNDOEZFQjI1Cis6MTA0RDYwMDBBMTI1ODcyODJGRjZDQzJBRDBCMzgwQUY4NzMxOUZBNTA1Cis6MTA0RDcwMDBFNkUyRjM1OTVFQ0ZFMkY5MkNCRDQ2RkRDMjRCNTE4RkZFCis6MTA0RDgwMDA0NTM1ODZGMkI0MTdGMzU5RTBGRDg2ODYxMUYyNTk0NDkxCis6MTA0RDkwMDAzQ0QxOEE4RjhFOTRDRjkyN0JFRTNDREU5RUNGRDI3QjJECis6MTA0REEwMDAyQkNGNjdFOUVERTFGMzU4RTNGNTM2NTQ5MzlEMzVEMjA3Cis6MTA0REIwMDBCODRGOEYzMTY1MUZFRTdGQzVDNTlEOUY0RTJCODlGQzc3Cis6MTA0REMwMDAxOUU2QUZGNDk0NkFGQTgzMDZEMjBCQTdFN0FFNDY4REQ0Cis6MTA0REQwMDBFOEJCQ0JDNUZERDhEODY4RUUzNzMzMzUxRTVBMDg2RDExCis6MTA0REUwMDBCNkY4MTM4QjI4OUUyQ0YyMzI3QUM1RkRGOUJGQ0YzMjZDCis6MTA0REYwMDA2Q0Y2NzE2N0UzNzc0MzY4RDcwMzFEQkVBQzczM0VBMUMxCis6MTA0RTAwMDA3MUYyRDVEMkY1NjAwMzMyQjdERTYyQTI0RjM5OTBDRDkwCis6MTA0RTEwMDBFMzA4QUVEMEIxODFCQTM0M0FERDIyRjQxREUyNDcwNjkwCis6MTA0RTIwMDBGQ0U0NEFFN0YwMTU5NTBCMjhCQTRGN0Y2QjA0N0RCRTcyCis6MTA0RTMwMDA5MUNERTdCN0U4OTBBOTkzQzJGQ0ZDOEY1NUEwMUNCMUI3Cis6MTA0RTQwMDBGQ0Q3NjFFRDNDQkNERDMwRjlFMzkwMjMzRDk4REY4NjczCis6MTA0RTUwMDAxNTRCOUVEQzYwQzkxMzNCNUQ1QUYyODMzOUU0Q0MzOUIzCis6MTA0RTYwMDA3OTMyODdEQkU5RTdFNDA5QzgwRkZDRDQ5OTUzMEVGNUUyCis6MTA0RTcwMDA3QUI5QkVCMEUwNzFBMzYwMDYzOUYyOUUyQjZDOEJEMzc5Cis6MTA0RTgwMDAzOEU1Q0U4NUY4RThGMzk2M0IyRjY1RTcwQkZCODNDQjNGCis6MTA0RTkwMDA5RDIwRDIwNkYyNERCNjc1OEVDOEVGM0Q5Qzk5RkEyMDQyCis6MTA0RUEwMDBDOTQzOEZDQUQ3RUQ4OTMwRkE5RDAwQUNBMzNDRjdFMDI3Cis6MTA0RUIwMDAzOTRBNDZCOTVFMkQ1MUJDNDE5QzhCRTQ4QkVGMEYzRUM1Cis6MTA0RUMwMDBFQzBBNTM3RURBQzNDMENGRThFNzREMzA5Q0Y2RDlGOTNGCis6MTA0RUQwMDBDRjE1OUNFNzQ5MEZBRkZEMUFGN0NGMDBERkU4Nzc1REVDCis6MTA0RUUwMDBBQzFDQjJFNEM0ODdEOTdDRERFN0U4Q0JFNDcwNUFGNEFCCis6MTA0RUYwMDA5NTQ2Q0ZGNDdEMDE4QjdFQUQ3MTJEM0E2NkM4QTAwNTM1Cis6MTA0RjAwMDBFN0ExNTc0MUQ3MTg4RUE2Mzg3NTRDOEE2MzFDQzRDQUNFCis6MTA0RjEwMDAyM0IzQzY3QkMzQzdFRDkxOTFFRTU3NTlFREJFNjNGOTNDCis6MTA0RjIwMDA1REU3RTJDMTdBNDBBNzdDQjIxRUJBNkZDRUJBMzhGRDA3Cis6MTA0RjMwMDBDRDYxQkJENTM1NTU5NDRGQTAzMkNBMjc4ODk0QTAzRjg4Cis6MTA0RjQwMDA3M0Q4NjdGNzhCQUQ3Q0IwNjkyNUUxMTBDQTg5MERDMkIzCis6MTA0RjUwMDA0RUI3RjJDOEFDQkNCNEMzQkU1Q0VCOUNEOTk2OUZCNjRFCis6MTA0RjYwMDA2MTg0RkJEOTZGOUVDM0NGQzU3RkZGMDRCRkRCQjZEQTc4Cis6MTA0RjcwMDA2QjNFOEU3MjExRjA2NThBRUYzOTUxMUU5QTM1RUU3N0NECis6MTA0RjgwMDAwNTlFNUVGNzk4NEZGQTNFQzNGREM5MTdCM0VDNzk1N0ZCCis6MTA0RjkwMDA5RDNFQzMxMTE3RTA3ODlEQThDN0VBRTkzRTVFOTRERjA1Cis6MTA0RkEwMDBBQjcyOUVBQjhGNzRGRkQ1Nzk2RkVGRENGRDU3NzFGRTRFCis6MTA0RkIwMDBERUVDODlCRTRDRjBCRkM4RjNERkY0NzBGNDYwMjdGQjcxCis6MTA0RkMwMDBGQ0Q2NzNDMDZCRkUwNEM3RUYxNEZDM0QyREM4RUZFRDlCCis6MTA0RkQwMDBCQ0VGODlCRThEQ0ZBRjYzRENBRkI2RUM5Q0MzRDgwRUZGCis6MTA0RkUwMDBGQUZCNUYwNkE5MERGNEIyQTk5NkQzNkI1MTI1QTNFRjg2Cis6MTA0RkYwMDA4RjRGNkZFNUY1MUQ0QkY5Nzc0REZCNUZFN0Y3M0VCNjM5Cis6MTA1MDAwMDA0NUY5Rjc0Q0ExNUY5RjBDNzhEOTMxOUVFQkMzRkQ1NTU0Cis6MTA1MDEwMDBCQ0RGN0VCQ0RGODQ3QzVBQzFFREFFM0M4Q0RFMkIyODJECis6MTA1MDIwMDBBRUEzNTQ0RUFGRTlGMTRFODBGNzA3OTZDQTE0MTdEREQwCis6MTA1MDMwMDAyM0Y4MjJDMDRDOEE3MzZDQUJFNEYzRUNBQTkwOUYxMDY3Cis6MTA1MDQwMDBERkEzNTk3NDBCRDQzQjY3QUY5QzhDRjc0QkI2OEI3OEJFCis6MTA1MDUwMDBDQUJFQzUyQjlGQzBCQ0JFMEYwMkU1ODJFRTEyNzRFRjI0Cis6MTA1MDYwMDBCNUU3Rjg2RDE0MUY3OTY4NDk5RUI0MTJENkI4RUY2MEExCis6MTA1MDcwMDBFNkZDOTYyQUJGMkFGQUM1REMyMjlFMjRDQTg0ODZFNTZECis6MTA1MDgwMDA1NjUzRTRBREI2MzJGMTNERjY5ODg2RjFBNzY3MDY3OTNFCis6MTA1MDkwMDBERTZBRjdFQTY3OEVDRDQ0N0Q1QzI5NTM5RTU5RDdFMERFCis6MTA1MEEwMDA1MUVGNjVCOEVFM0E5RUQ3NTNBNDI2QTQ3NEZGQzVFQjIyCis6MTA1MEIwMDA3NzcxM0JBREU2QThDN0E4MUFERUZFOTlDMUEzNDQ3Nzc1Cis6MTA1MEMwMDBEQjAxRUY0QTlBRkYyNzBCMzhCQkQxOUY4MDdFN0I1REM3Cis6MTA1MEQwMDAzRDAzMzNBMUREREU3MTc5NTJDQzQ4QjUxQkVERTdGQzExCis6MTA1MEUwMDBEN0JENDQxNkRGQTE2N0Y0MUQ4NzRFRjM5NDA3RTU2NjJDCis6MTA1MEYwMDAyNzlFN0Y0MEZCRUUxQTJCMkZCNTg3RUU2NUVEOUQzMzgzCis6MTA1MTAwMDA3OTBFRTY4OTZGQkI4MTA3NEJCQkMyODdDODRGRUU5OTBBCis6MTA1MTEwMDBDREVEQjJCRDEyQjQ4MzdERDlEN0EyNUQ0RkY3OTg1QUI5Cis6MTA1MTIwMDA3OTlDMDhDQThDNzFBMjVFNEMwNDQ2QkM4QTczM0I0QUM3Cis6MTA1MTMwMDA3RDgxNzkzQjFCRkEwNjcwOUVBMjNBRkU3RDhCQTI5QTc2Cis6MTA1MTQwMDBDQ0ZENUYwOEI4QTlGRjNFNTc4Q0UyOUYyM0VEREZCRjdGCis6MTA1MTUwMDBGQTM4M0UzQkFCRjg3OTAxNjM3MThBNEJFRDE2N0UxNzQ2Cis6MTA1MTYwMDA1M0EzNDZGQTc3NDI1QjAyMUMzRjNCNURDQ0M0Nzg5OTVGCis6MTA1MTcwMDBBRjRFMjNCRDJFODcwREIyNDNGRDYwM0Y2MjNDNkU5QjU4Cis6MTA1MTgwMDAxNDVCOENGOTIxQjE0OTFBN0I5QzMwNjI3QUM3NjFGQ0FGCis6MTA1MTkwMDA2RTQyNUUxOEU5NkY5Mzk0MDhFMTc3OTU2M0UzNzg3QzNCCis6MTA1MUEwMDBGQjY4NjQyN0REQkIzQTAwNzYzNDg1ODM1OTgyRjQ1NDZBCis6MTA1MUIwMDA3NzM0OEZFRTQzMUQ4RDU0MEY1MjdGNUY4NUVFQjYzNEVBCis6MTA1MUMwMDAwQUU2Q0REMzg3MjIxOTlCNzREOUE2QUQ2OEQ3NzQ0RTUxCis6MTA1MUQwMDA5MTc1Q0NEQkVDOTRFQUEzMzg1RTJDRDc0MzcxNjRENzhECis6MTA1MUUwMDA5NDc5QjQ3RkFFNTE3OTUyQkEzRUJBRDFDRkY1QzJEMERDCis6MTA1MUYwMDA4NEM4OEQ3RTU4NTc2OENBQTk1QzhDNUI2RUFGN0Q2NThDCis6MTA1MjAwMDAxRkVFREYyM0Y3N0I4ODhFMUVBOTFEQkMxQkU3RDk3RjBECis6MTA1MjEwMDBGNkFBRTM1MUUyNEI3RTVFRjc2OEVERTk1MkI0N0I3Njg1Cis6MTA1MjIwMDAzNTlEQ0E0NUZDMTU2MzdDMEVGNDYxNzEwNThGQTNBMTAxCis6MTA1MjMwMDAwNjI0RkI0Q0VENjEzNzAzMUU4QkRCMzQ2NkE0RTk2MzY3Cis6MTA1MjQwMDAyRkUzRTc3OUY4RTc5QjRDNzI4RkZFOUUxOTNDRTU2OUU2Cis6MTA1MjUwMDBDMUYxOTZCMEM0QTUwMTdBRUVDMTc4OTYyNTY3OEFFQkI0Cis6MTA1MjYwMDA1OEEyMDBFNEUxRkUxNUVGQzQzMDRGRUU5MTg5MDU3NEI5Cis6MTA1MjcwMDA4RkIyNDhCQzI3QzkwOUUzOTU4OEYxRkFERjc4NjUzRDBDCis6MTA1MjgwMDBCNjdCQjRCQUMwNDA3OTUxM0MzMDM0MEY5NTQ0NzFENUU3Cis6MTA1MjkwMDA2OThBQjM4NUFDRkIxRjUxNjNGRkFENDQ5RjMyN0RBNzg0Cis6MTA1MkEwMDBCMjM4RkNDRTVGRTAzQTAyQkUzRUQyNzNEMDlFRTI2NkQ4Cis6MTA1MkIwMDBDRTc1MDQyNjlBRjdGOTAxOEZERjk0NUE1RjFEMTc0Q0JCCis6MTA1MkMwMDBGOTYzRjQ4N0ZDNzgyRkJGOTc1RDlDRjUwRjczOTVCNDU1Cis6MTA1MkQwMDA3Q0RCMTIxMTE3RDgyNDBEQ0UyNkJCRjQwMTZFODc4RjBDCis6MTA1MkUwMDA2NTcxOTI3M0M1NTVCMUJCNzlCRTZEOTRGMjZEOURGMzM2Cis6MTA1MkYwMDA2RUY3OUZEM0FGMTJEREEzQ0U2RjEyRjc0QUY4RUZEODQ3Cis6MTA1MzAwMDA5NDg4REZCMTcxRDI3RDI4OTQ1RkQ1NzE1NUFBQkUyRkU0Cis6MTA1MzEwMDA3QThBRThGRjY5Q0RCODJCRDNGNzFFRjYwOUI5QjA0OUYwCis6MTA1MzIwMDBGODYzRDZGODYzNzNGOUY4NTZGRDUxOUREM0UzRDMyRjk0Cis6MTA1MzMwMDBFNzVENUYwNUVCRjlBQkI2QjI0OTE4RkZEQzMxODIxRkMwCis6MTA1MzQwMDBCNzMyQzBFOTJGN0IwMDJDMUNEMDAzRkRBRkJERTZDNUYyCis6MTA1MzUwMDA3Qzk2QTc2NUI2MEFFNTU0N0Q1NUMyOTNBQzEyNzg4NDU1Cis6MTA1MzYwMDBGMUM5MTc4M0YxMEY4NEJGRUQ0MUI5RjRENTQwMjVDMUQwCis6MTA1MzcwMDBCNTYyMkE4RjFCNzQ1NjNENDhFNzQwMjE5REVCMURFNDIyCis6MTA1MzgwMDA0Rjk0RUZCRTUwNENDMkI4RjdGMjFBQTYxRjEyRjE5NjE2Cis6MTA1MzkwMDAxOEUwOUZFRUNFQ0IyQzk1RDdCRjNEOTdGQzFDRTAxNUI3Cis6MTA1M0EwMDA3RUFGMDY3MzkzMjY4QkRGOUYyOEM3NzNBMjRENzc4QjQyCis6MTA1M0IwMDBGQzU5MTlGMUREMjlFNjAxQkVBNTc5MEUxNDg5NzFFRUJCCis6MTA1M0MwMDBFM0Y2M0ZGQTE3RDhCRjVDQ0M1MzVFRjdEREFGQTExRTAyCis6MTA1M0QwMDAyRkQyMzk1REE0RTBFQkYzMTA3Q0FEMzIyM0Y4RDRDNEI2Cis6MTA1M0UwMDBBQkU4ODc2RTlGNTQ2MDIwREQxQzA4ODVERjZFODJGQTczCis6MTA1M0YwMDBGMjQ1MkFDNUUzQ0I2QjM4MUMwNzVBNjVGQTNEMjA3RjdFCis6MTA1NDAwMDA5RDc2OTBFRThGOTlBMDJGRDJGMDY1ODg3OThCNkExMkU1Cis6MTA1NDEwMDAxMjlFNkIxOUFEN0M1REQwQ0U4QjcyRDEwODAzM0M1MENGCis6MTA1NDIwMDAzN0M0QkFDRUMxM0Y0OTIzRjg4QjNDODM5ODVCNzQwRUQ2Cis6MTA1NDMwMDAwRjJCNzEzQ0EwREY5NTc1QkM5RjNGRDRCNzA1RTVEODE1Cis6MTA1NDQwMDBGMjNBMEUzN0U4Nzc4MkE3MjhBQzFENDQ3RDVGMTRFMjVDCis6MTA1NDUwMDBFMzJEMDdGQzFDOTI1MjcwNjU1QjcwRDVDOTk0N0Y1NTkzCis6MTA1NDYwMDA1NEEzMUQ0NDNGMzg1QkMwQjczMkNDRTFFOTdGRkRENDgzCis6MTA1NDcwMDA4MEM0QzczMzcwQkM2QzAxNkZCNjU4M0YyNUVDMTYwODZBCis6MTA1NDgwMDBGRDAwRTMzREU1NEFENEUzQkQ5QzUzNTM5ODcxODhDRkJBCis6MTA1NDkwMDA0NkYxMkNFQkZEQUU1NkMwMDNFMEM3MkZFNjYxQkJERDQ1Cis6MTA1NEEwMDBDNDRGQjBDNEQ4QzczMkZGRkQxMDIzMkQ2RTUxQjE1QjdECis6MTA1NEIwMDBCM0Q1RkQ2MkZGNTgxNzdGNEU3RTFDQTk0NDVFOTc4NUM5Cis6MTA1NEMwMDA1RkI3QjJDQURFOEZENUE0RDVDQkYwN0UxOUE3RjdGNUFBCis6MTA1NEQwMDBEN0YyRjM4RTAzMTNCODdEODQ3RUM3MzlGRTQ2M0E5RjE4Cis6MTA1NEUwMDA2MjNDRDYxNUM0RjcxQUU5QkI5Mjc2RkJCOEM1QUQwNTg4Cis6MTA1NEYwMDBEMzUxM0UxNDBGM0MzQzRGODZGNTE0RERDQjY0MjU4NzE5Cis6MTA1NTAwMDBFODU5M0EyN0ZGNjBCRTZGQUY0OUQwRkREOUVDODE0ODFBCis6MTA1NTEwMDAxRUNBQkI5MkQ2QkNFOUY4RkRCN0VDODEyOEQ1QjMwNzBCCis6MTA1NTIwMDA1QTREOUU3RjA2MkU0QzFFRTZFQkE1Q0Q1MzhBNzI5QUVECis6MTA1NTMwMDBFN0QzQjE1NkFEMEZFNTVBNkQzQTlDRjBCRUU0RTU5RTU3Cis6MTA1NTQwMDBCOUQ4N0ZGM0REQUY4QzQ2RkUyRDcwRjRGN0U0NzBGRjIxCis6MTA1NTUwMDBBMUY4NjU2ODE1QzBGOTRGQUZDNUY2NTY3QzI3MUIyMTI5Cis6MTA1NTYwMDBDRUEzRjI2NTJDOEI3RDIwOEZBMTJDMTFGOTc3OTZCQ0YwCis6MTA1NTcwMDBFODlDRjBDRUE0QTg0RkQwMEZFNUUzQjE0NEJBOURFRjZDCis6MTA1NTgwMDAyQ0ExRkQ3OEQxM0UyNjlEQjdERDY5NkEzNzUyQkM2OUYyCis6MTA1NTkwMDAyMEMwRTM0RDAxNjFBRkY2MzA2MzNGRTlGNzFBOUVFRjlCCis6MTA1NUEwMDBFMUMzRTdBMDNGRkE2QThFNEVBN0ZERUM2MzYxQTRFNzcyCis6MTA1NUIwMDBFMkI2M0ZCOUQzRTVGNUNEODE1MjcxMEYzQTQxNzRBRkYwCis6MTA1NUMwMDA5NTY0RDFGOTFFRjAzMTdEREZGNDgwREE0QUU3QUM3REQ1Cis6MTA1NUQwMDA0NUZDNUNGM0U4OUM1NzI0QzQ2N0QxNzMzQzRGREJCMkI1Cis6MTA1NUUwMDA5N0E3RDcyNDQyRjhCQ0VCRDVFODY1QzQ5RjIzRDg5RjgyCis6MTA1NUYwMDA5NkJERTk1Q0NGMjVGNTBGOTIzQzE4MUI2NTVFM0M1RkJDCis6MTA1NjAwMDBGM0FGNTYyOThGQjUyNDBBNzA1NUExNUMwMDkyMkUwNDgxCis6MTA1NjEwMDBGODZCNjJFQjkxNkU4QzI4QUYxQkFCNDVCOTBBQ0FBQjM1Cis6MTA1NjIwMDBDMUJFNUQzNzUwRkU0QjU3NkFEQ0FEMTU2MEQ3QTJGRDk5Cis6MTA1NjMwMDAzNEI4REI3MzAzREEyQkFENjA4RDE4NjgyRjlFRjJFMDZGCis6MTA1NjQwMDBGNzU0QkE1QkE3RTcyMzlFOUY4OTU4RjY2NTQyQzJGMURCCis6MTA1NjUwMDA4QjdFNkE5MkJENThBQjZCM0FDNjYxMjZCODEzQTNEMzUyCis6MTA1NjYwMDBDRkU5MEVDQzc5QTc5QUJFMjczNkZGRTJGMkM5NDZEMjFGCis6MTA1NjcwMDAyNzA4OEI5Q0E2NDdGQUFCOEU5MjdFNzlDMjNGOUVGNDk4Cis6MTA1NjgwMDA5MEE1NTcyQzNENDIyMzgyN0NCOTQ1RjA1MTk3OTFGMDZCCis6MTA1NjkwMDA0ODI0QUY4MDc3MDFDRTVCNTA4RTAwMURGQjhCQjgzQzU5Cis6MTA1NkEwMDAwNzM5Q0NFNTlDQTU0RkVFRTY3QURGOTI5RjE1NjI5QzA4Cis6MTA1NkIwMDA1QjUwREU0MkJGRUVEQTI3NzI2RjQwQjkyMkU0QUMzRkE2Cis6MTA1NkMwMDA2NENDQzRGM0I5MEEyMTVGOTkxQTkzNzBCRTAzNTNGOEVFCis6MTA1NkQwMDBGNzJBMDMwRTc5NUFEMUNBQzdFOTBBMzFBMjI3RDA0MzYzCis6MTA1NkUwMDAwNzkxNkUwRTE0MjVFODlFRjg4MUQ2QTM1MkZBM0Q1MzE5Cis6MTA1NkYwMDA0QkRGMDU1QTkzMENGNzdGNUMxRDk3ODNFMzg0NUNGREI5Cis6MTA1NzAwMDA4RURGRTBGNEU5RTE3MkY1OUNERTEzRjI3NkFCNzk5NDdBCis6MTA1NzEwMDA4OUVGQzI2NkNDQzNGQTdCQTFDRjdCMkEwRTkxNUZCMDIyCis6MTA1NzIwMDBFREQ2NTM4NDRGMkIxRTFBMTJGMUQwRUVBQUI3RThGRDI2Cis6MTA1NzMwMDBGNjI4QkYwN0IwQ0I5QzNFODdFMDhGMkNENzI4RkZCNDVDCis6MTA1NzQwMDBFNkU4OUMzMkY0Mzc5QTk2NkI2OEQ3OUQwQzE0NThFN0JDCis6MTA1NzUwMDA1RkRFODU2ODRGQjZBRTIyRkJENzI3RjZGMUExMzAxMzg2Cis6MTA1NzYwMDA3RUE3NDY3RUQ2N0Q0QkJGM0Q4MEZENDNFMDE3NDkwNkIwCis6MTA1NzcwMDAzNkVBRjNCODkxQ0VGMTdCMEE4OEVGRTgyMDc1RjZENUNBCis6MTA1NzgwMDAxOEY0MUQwOEU3M0FCRTE3RTBERkE1RjU0NzkzMDNFM0Q5Cis6MTA1NzkwMDA2ODVGNjVCQUQyRTNBQjYxRTQ3NzJFMDdCRjBFODdEREExCis6MTA1N0EwMDBBRDg2QkQxM0UwRkRFRTI2NTk1RkNGNTJGREZGNTc4MDU5Cis6MTA1N0IwMDBFN0EzNERGNEYzN0IwQTNCMTc5RkRFODI3MUJFOUQ0QjNFCis6MTA1N0MwMDBDNTc3Q0UxQ0YwREZEN0Q4RTc1MTY4MUU4QzA5NTAxRTc0Cis6MTA1N0QwMDA3M0M2RUZFRDU3RjlCM0Y4RjcxNzZBRkEwNkQwOUUwRkM0Cis6MTA1N0UwMDA1NDcxQjg1RTBDMTgxQ0VGODMxQzhGM0QxMTk5Rjg2ODNBCis6MTA1N0YwMDBENzYwQjUxN0Y1OUREMzZFN0MyNEZCREQ0OTNDQUZDNTYyCis6MTA1ODAwMDBBRTZGMkU1NDJGNzZDOEZEMDlFRUJFRUI0OERFN0Q1M0Y5Cis6MTA1ODEwMDAyNjc5QzUxODk3NzcxMjkzMERGQzVEOEQ5NjAwQTdBNzgyCis6MTA1ODIwMDAyQTIxQUYzQjVDODlGRDk4NTdEMEYxQUM4RkFEMzc1MjQwCis6MTA1ODMwMDA3NDUxMjRDNkVDNkM5NTMzRkU3RURBQTE4MEMyRjc3RkVBCis6MTA1ODQwMDBGOEJFNzNGQjQxRUNGQjkzMDIwRjE3REE3RjBDQjNBMDk5Cis6MTA1ODUwMDAzREREMTdERjM0RTYwRTk0RTNBRERDN0ZFRTRCQkM0NTU3Cis6MTA1ODYwMDA3OTQ3NDVCMzE3OTJERjczRTRFMEE1RTQwRjE0NTU5OTI3Cis6MTA1ODcwMDBCNkRGRDdDQzFFQzE2RkFEQzhGMTlDMzcxRTMwOTIzQzRECis6MTA1ODgwMDBERUI3QkE4M0ZDRUM3RDgzOTlFRkM1MTRFNEYwQkNCNEI5Cis6MTA1ODkwMDAzRTkwOTdGODdEOTM5MUU2RDc3MzM4RkZGRDUzNDBEMDQzCis6MTA1OEEwMDBERDlDNzdFODdCMTk2OTdBRjY2NUExNjc0OURGMTZBQjVECis6MTA1OEIwMDAyQ0E2QTRFNTM5NEMxMEY4NzNFQTRGQTZDNjNEOTdENjNFCis6MTA1OEMwMDAxMDlEMTNGRUY2ODlGMzhCODc0Qzk5RjA2RUQxMzk5RUFCCis6MTA1OEQwMDAxRjIwNUU2MTFEQTZBMDQzM0FERkU4NjE3MTBGRjI0RDAzCis6MTA1OEUwMDBBQzg5RTc3OTM4RTE5RUUwOTcyRjZBN0RDMTFDRUU4NzhECis6MTA1OEYwMDA5QzlCNEZGOEVCMTNGRDFDRUU5REI1RjdEMzNENDc5OEVECis6MTA1OTAwMDAyRjg0RjQyMUZERTAzRjRFRDM3REE4Njc1REY0N0JCNjg0Cis6MTA1OTEwMDAzMzlFNzUyNTMwQTY3NUU3NDFGRTdCOEJGMjhCNUU4MjQ4Cis6MTA1OTIwMDBGMzlGMEZGM0VGQUIyN0ZDREMxRUZCQjVDRTdGQUZFODk4Cis6MTA1OTMwMDBBQkVFQzFFRTJGNDA3REU4NTk4NTkxM0QxOTA3QzUwNUI1Cis6MTA1OTQwMDBGNDdBNUFEMDJCN0I4RUQ3NTc3QTc5RjVDRTgzRkRDQjVDCis6MTA1OTUwMDA3MEJDNTVDRkYxM0NDQzNCOUZCRkVEQzYyRjQwRkRCNjkwCis6MTA1OTYwMDAwMTE3REQxOUI4RjNGMUY1REExOEE4REYxRTk3RkFCMEMwCis6MTA1OTcwMDBGRTlCRTk4QzdFRUYzMzk2QTc1MTlDRUIzNzgxQzE4MjY5Cis6MTA1OTgwMDAwNTgwRUYwRkQ2Nzk5ODcxMTlDNjQ5MDcwQkU2MDMxRUZCCis6MTA1OTkwMDBFRTg4M0YzRDEzRkJEREYxOTQxNDQ2QjY5REYxRUNFMzM4Cis6MTA1OUEwMDBBRjhDMDZCOEVFRkM4NjQ0Rjk1RjVGMzk5MjZEQjMwQjlECis6MTA1OUIwMDA0RkMzNTJBNkMxRkIzNTA3RjlFRjQ2REVDNjdBNjYyMjExCis6MTA1OUMwMDAzRUVFN0NCQzk3N0VGRkQwQzJFNzA3RUIyQTk5OTFGNkFBCis6MTA1OUQwMDBCQjYxNzc3RUUzNjlGQTNEQzNCQkJFMjVEMUVGMkJERTA5Cis6MTA1OUUwMDAyNUYzN0I0NEZGRkNCQzc3RDE2MzNFNUNERjdBRUQ1MjRDCis6MTA1OUYwMDAzRkFFNkJCMzg2RUQ2RThCQjc3QzE3NTM5QUVFODgxRjY0Cis6MTA1QTAwMDBENDY2QzJGQjNCMEUxQ0Q0NTZBMjVGRTY2NkNEQTg3RkNGCis6MTA1QTEwMDBCRTcyRTQwQTlCREMzOUJENEYyMUZGNjA0REFFODdFRUJDCis6MTA1QTIwMDBENzMzOUYxOTlBMzc2MUY4M0U3RkIwOEVEOUUwQkFDMzU5Cis6MTA1QTMwMDA4QTEzQTg3MTZENkU1QTdCOTdDRUZEREZBRjFDNTE2QzM3Cis6MTA1QTQwMDBGMzU4NzY0MEVDMThENzBCQjFCRkY1NTNGQ0RDREFCRjQ2Cis6MTA1QTUwMDAzNUMyRUZCNkY2NkY4RDE1ODg1Nzg3MjY2NzgyQTcxQjZDCis6MTA1QTYwMDBGNzAzRTBFOTU5QTc1M0I5NzM1RDg4Q0FEREVCMENEQTk3Cis6MTA1QTcwMDBBN0JEODg0NzI4QkIwNERDODFBOUFDMUVCRkNGMUYzMDVGCis6MTA1QTgwMDA3OURBNzE1RTkzNTk4Rjc3Q0JGMjIyQkM1RUIwMjQ0QUVCCis6MTA1QTkwMDA3RUM4NDg3NjhDNTVFRTc1NDU1QkQwODdFQ0RDRDEzRkVGCis6MTA1QUEwMDA0QjA1QkI2N0FGMTZCRDFCMjM1RjdBQzdBQkIzMUFBMDBDCis6MTA1QUIwMDBGRTM3Mzk5MThEMzkyNDZGQzIwNkYyOURFNTlGN0YzREY3Cis6MTA1QUMwMDA4N0NCREQ0REEzMzVDMkY3REVBNTkzMUY1MzJDRkYwQjBCCis6MTA1QUQwMDBFMzdFNEI1NzNFODFGNjA0RjRERjlFNDM3QzFCQTZFRjJBCis6MTA1QUUwMDA3NDhERDRCRjYwNTk5REFEN0ZDMUIyNTU1NkZGM0RENDcyCis6MTA1QUYwMDBERjczRkVGRTdCOTc1RDYzOUY3RkQ5MUQ1NkZGNDcwOENFCis6MTA1QjAwMDA3RURGRjlFMTJGNjg5RTZBOUZCRjc5MzVGNUZGQUE5QjdBCis6MTA1QjEwMDBFRkVGNTBBRTg3RjJFOTNCQkNFMTg0OEJGQzY3NDZERkQ4Cis6MTA1QjIwMDBFNzUwRjMyRTNENDRERjRGM0ExNzY3MUEzNDUxQ0ZGQTRFCis6MTA1QjMwMDA5RUNBQUQ0NjM5OTZBMkEzRTlERkM0NzVGODgxQkJEMkVGCis6MTA1QjQwMDBFOTI4QTcyRUNCQzY1N0I5NjY5RUFEOUUzRjdCOENBRDhDCis6MTA1QjUwMDBGREE4NDg5OUVEN0RFMUEyQ0IxRDc0RTlEMzI5MEY5NkVDCis6MTA1QjYwMDA3MTdENkE2MjlDMTNFMEQ0QzZGMEVGMzVENThGRjFEMDE5Cis6MTA1QjcwMDBGQUVFN0ZEMTRCRjVGQkFGRTFFQkJCN0Y4QzhGRjg5ODUyCis6MTA1QjgwMDA3NDE3RUNGQkZENUFGNENBNzRGQjE4RDYyNTYxQzhFQkY4Cis6MTA1QjkwMDAxOTNEM0E5MDUzOUJGRURDOTBGMTc5OTZDMjdGQzcyRTU3Cis6MTA1QkEwMDBDQkNERjVFNUU2RDJDOThGQzVEMkYwQjlBNTE4RTgwMThECis6MTA1QkIwMDBFQTZGRTc2OEI2MzhDRkU2RTI5NUExOTZCNDc5MzYxNTc0Cis6MTA1QkMwMDA2QjhCMEU1NUYxRTdCN0EwMURBRjQ3RkUwRUU3RkJBQUEyCis6MTA1QkQwMDAzNjc0MjlEQUFGQ0U3OURDNjU3NUI2NzkzQzI1QUI2OEM5Cis6MTA1QkUwMDA5RUE0NjMxRTc3QzkyQUM3M0M5RTQ1ODdDNDczMzFDRkU0Cis6MTA1QkYwMDAyOUE0OTM5MUU2RDk1Qzc2OEQ3RDNEMjU3N0QwM0NCRjc1Cis6MTA1QzAwMDBDNjc5NkFEM0Q2NTM3Mjg3NjM5RTJDQkUxRTc4MkVFNjYxCis6MTA1QzEwMDBGOUNENzlENzUzM0VENUJFOUVCMUFCNjk5RTdGNzdDQzg3Cis6MTA1QzIwMDBFMzFFQkJEQTMxOEY4RkU2QzFFNzM4MEYyQkUyN0U5NDlCCis6MTA1QzMwMDBFNjFFNUE0OUZCRkYwMzJGQzMzODkwRTY4RUZFMzU1RDAyCis6MTA1QzQwMDA1MkY5N0IyRkM1ODVBMTk1ODlFREZFMEZGOTQzOEREMkMxCis6MTA1QzUwMDAwMDgwMDAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMDEyCis6MTA1QzYwMDAwMDBCRTU3RDA5Nzg1NDQ1QjY3MEREQkVGN0Y2OTI3NEY5Cis6MTA1QzcwMDA3NzNBRkI0MjA4Mzc4MDEwMzRDNDBFODQwQ0UwMzIwREIyCis6MTA1QzgwMDA0MTFFM0E4MEMxMTU1Q0EwQzM5MjNERTk4ODM4MEY0Nzk4Cis6MTA1QzkwMDA5RDM0MDQxMTExQjU1MUQ0QTBDMDM0MDgwRUY4NDAwMzRFCis6MTA1Q0EwMDAxMzIwNDBDMDA2RDRDMTE5RDQzOENGNzE5OTA1OUI0NTQzCis6MTA1Q0IwMDA4MjEwOTMwNjUxRjFDREUyNUZFNzU0RERGNEJEOUQwRUY1Cis6MTA1Q0MwMDAzMENCRkZCRjc5RUY4RkRGNEM1MUI3RjZCM0Q1MzlBNzkzCis6MTA1Q0QwMDA0RTU1OTM5QzA0NDI0NjExNzIzMDhFQTYyMzA4RjkyNjM1Cis6MTA1Q0UwMDBDNjdEQjVDMzRBQzhGN0YwRjc0MzQyRkZCQzg0MjRGMzJFCis6MTA1Q0YwMDAzNDg1OTAzOTg0RkZGOTE3MEJBNDkwOTA1QTMzQ0JDRTlBCis6MTA1RDAwMDBERTNDMjU2QjAxQTQyRDQ1NjkyNTA1RjQxRjJCNkNDRUM3Cis6MTA1RDEwMDAyQjE0NDIzQTVCOEE4Q0IzNzJDM0ZEQTlFOTFDOUY3Q0E5Cis6MTA1RDIwMDAzMjk4QzNEQTdFNEZDMkUzNzhDNzkyOUMzQTNBN0U1OUUyCis6MTA1RDMwMDA5QzAzRTdBM0U2NEZENkQzQkM4OTkwNjNGNTA0RDM3NkUyCis6MTA1RDQwMDA5OUNDMjhBNkRGNEZENEQzMDkwQ0Q2Q0U3NzAxQjYzQjI5Cis6MTA1RDUwMDAyOUQxN0YyNkQxNzQ5NUUwRjcwQTc0NURDQjNGOTBDOUI1Cis6MTA1RDYwMDAwMDFDRTZDMzFDQkE4RTNCRjgzMkU2Rjg2MjA5MzE4N0E0Cis6MTA1RDcwMDBFN0UxMzExMTE3QjQwQkVEMzJGOUQ3MDlGMEQ1RDVDN0VBCis6MTA1RDgwMDA5MDQ2OTNDNjQ0NDJENEY5RjYyN0U0OEZGQjI2QkQyREY2Cis6MTA1RDkwMDBEODMxREJDNzMwOTI5MEJCOTY2QzdEMEJBQTdEMjQ5NEUyCis6MTA1REEwMDBGNDlENEJENzNCQjU3OUI5REM4N0U2M0JFNUUwNzRBN0JBCis6MTA1REIwMDA1NUQzQ0Y1NEY5MThBQ0RCNENGRjgzN0VBNkI5Njk1RThFCis6MTA1REMwMDAzM0ZFRERFNUZBRkNCRDQ0MEFFN0IzMDlCOUNBRDE5RjQ5Cis6MTA1REQwMDBFMzgzOEZBQkY4NjVDMEQ3MUQ3NDRERTkxNDg1Rjc0Mjk2Cis6MTA1REUwMDAzQTBDOEExRDg4QUZFOTBFRDY1NjlEOEZFNzIxOTkwNDlCCis6MTA1REYwMDA2MDNFNTIzMDk5RTQ0MjQ5MzJENjczNDMzREE1RTdGQ0Y4Cis6MTA1RTAwMDBBNkNCNjY1NzMxQzVFN0Y0MDc0NTg0NjNFNDdDODNGQjgyCis6MTA1RTEwMDA2MjVEODYzQzlBMzY3RTI1OTNGRTk3OUVGRjhDRjlGQTRBCis6MTA1RTIwMDA3MkUyNjVFM0E5NzA1NUU5RTBDRUE5NjM5RTNEQTFBMUE4Cis6MTA1RTMwMDA4RjY5RUUxQjlGM0RBMTgzRDMxNDVERkVERUJBNjlCQTY0Cis6MTA1RTQwMDBGQTMzRTY5N0U4Q0E0QkJDMTVCQUYyNTk0QkVFRDNFNUU0Cis6MTA1RTUwMDBFN0Y4MUVENEQ1MkY2QjVDQTAyQkFGRjAzRkFFMkJBRjc1Cis6MTA1RTYwMDBEQUI4NUM5N0FGNjk1QUE5QUJFRjY5NTlBQjJCMzdFQzNECis6MTA1RTcwMDAxQjcyMzNBMTcwNkNGOEFENDg0QzE0OEU1RjVCNEYzRUMzCis6MTA1RTgwMDA3NTREMTJBNDkyMTNFMDdFQUEzRTBERTlGQTc0QkQ4MjBDCis6MTA1RTkwMDA2OTJERDBERTI4RTA5RkUxNjYzN0M1OTMyNzI2NTQ0QTU2Cis6MTA1RUEwMDBFMjA5NzlDNDc3RUQ5MjI1RDdEMkJDOTE5NjhGQTZENDFBCis6MTA1RUIwMDBFRTFCQkJDNDlCNDlDODEyODc4Mjc0MkYzNjFBNDk4MEQ3Cis6MTA1RUMwMDA5MkFBNDAxMkJBRTkzQTI0NkFDQTgzOTcyODZGOTQ0ODgyCis6MTA1RUQwMDA2MDc4Q0Y3MjMxMThGRDdCOTcxMDFBOTQ0MUQ3RTFGRDlECis6MTA1RUUwMDBENDQ0MzYwODNERjkzQ0NDOTdBNDBGNDlFQkJEQkNDMzY0Cis6MTA1RUYwMDA0MENBOUIzNDcyNjc4M0MzODBGMzQ5NzY4Q0RERTBBMDhGCis6MTA1RjAwMDBGNDUwNkQ2NEZDNUVCRDJEN0QyQ0IxNDMzRTMwQThDRUI3Cis6MTA1RjEwMDA3QTkxRjE5QUU4NjQ1MkExMUZDNjJGMTVGRTNFNjFGRUU4Cis6MTA1RjIwMDA0NUZDMEREMEYxRkRFMDM4Rjc3QTA3MURBRjYzQkYzOEFGCis6MTA1RjMwMDAxNUU2NDEwMjA3QjM2RTFEMEFFM0JCMzZDMDc3RDI0MkI1Cis6MTA1RjQwMDAzQjQ5QTdGQzVERUY3QUY2QzQxNTg0N0M1MjNGMDFEMzMwCis6MTA1RjUwMDBERkQ1MTczRjdCNDIyNkU0MEZGNTUzMzE3RkE0REU4RDVBCis6MTA1RjYwMDA2OUIwQkUxQ0QzNjNGNTc1NTg3RUEyN0UzRUU2NEZENjVGCis6MTA1RjcwMDA3QjMxM0Q1NUJGMDREM0QzRjUzRTJDRUZBODZGQzQ3Q0Q1Cis6MTA1RjgwMDA2N0JEMUY1Mzk1MEZBODNDOUE1MTBDN0M1QTVDNkMwMDVFCis6MTA1RjkwMDAzRTlENkIyMUZDOEZFNUNGRjEzNTg4RjRERjZEQzhEN0NFCis6MTA1RkEwMDBDRTM0RTBFQjczRDY2RjA2NjU1MDdBM0JGNzA5MjVBNjMxCis6MTA1RkIwMDBFQ0RFRTExNDQ5NzdCREUzQ0Y2NTAwRkM5NUZBMjlGMUU5Cis6MTA1RkMwMDAyNEY2MkNCN0M0MzBGQzU4MEM2NDAyQTFGMkU3RjEyQjg0Cis6MTA1RkQwMDA4QzQ0QTJFM0M3QkM3MUQ1M0EzMTFCQkY0QjQwM0E3NDI1Cis6MTA1RkUwMDBFMzcwNEVCMTQ1RTk3RjIwNDE3QzVEMEE0RjZBRkQ5MzI1Cis6MTA1RkYwMDAyRkZFQTk3MDY2MkVFMEE3M0ZEMjQ5Q0M0MUIxOEVFMUI5Cis6MTA2MDAwMDBFRDY1MjdFMEVENTJGMDkzMzg3RjQ1QzI1MTc4RTM4RjdDCis6MTA2MDEwMDA1OTQxNUFGRkNCNjQxNTlFNkQ1OTg0QTZCNzNBOEE0RkYxCis6MTA2MDIwMDAwMTFEOUM2QjM2RTFCQUNFQjVDNkZBMDlGNEUxNDg0MkNGCis6MTA2MDMwMDBCQUU4MUQ2RTZDMUU1NTFCMkQzRUFEN0NBODY5OEFGNzEzCis6MTA2MDQwMDBFOUU1NDVCQTRGMkIyRkNFMUQ3QUQ5MEU3QzNGMzc0RDRGCis6MTA2MDUwMDBGNDlEMTgwRUY0RTFFMkY0QzFFODRFRURCRkE2MjlEQjkxCis6MTA2MDYwMDA2N0Q1RjVBM0NGOUZGMzA5MTM5QTUwQ0UyQjcxQjcwREM3Cis6MTA2MDcwMDBFRDdEOUU3M0QzOEMzOENFRTk4RDAzRTI2MERDRDNGNUUxCis6MTA2MDgwMDA2NjFGOENEMzUxRUZGMEIxNzFEMzdDNUFCQUFDOUUxRjBFCis6MTA2MDkwMDBFQjNCOTExODlFNUY2RkZERkVCM0U3NDc0ODMzMzk2RUM3Cis6MTA2MEEwMDAyNjA4RkFFRjA3RjQ1RUJGNTc3QzQ4RTc4REM1NDAxRjBFCis6MTA2MEIwMDBBREYyMzdCMEVGQzRFNEE4RkI4RTg0NzlCNTVGNEY5MzlGCis6MTA2MEMwMDBFODM1NUQwRERGMzdFQkM2QTNFRDk0OTMyQTlFRkE1RkFBCis6MTA2MEQwMDAwQ0VGMTIzOUE5QUU5M0NBQzlBMTU0NzYwMzlENTI2MjNFCis6MTA2MEUwMDA0NjNDQkI2OThGNzFCNEJGMkVDOUJBNDRBMEUzOThFMkE1Cis6MTA2MEYwMDAxNTJDRjdDMDQwOTQ5RTZBQ0M0MUEzNUI0MTcwQjc4MUQ4Cis6MTA2MTAwMDA5RTM1NzNBNENBRjdDQTlEQkZBNzI0RjdDNUFGNjVCMjcxCis6MTA2MTEwMDAxNENBRkY0QzdCQTdFNTMyMkY5RDREOEFFRDg0OEUzNzQ0Cis6MTA2MTIwMDBCM0I5NkEyMkM4QzkyRjc2RkM4OEVCMjlCRTQyNThGNzVBCis6MTA2MTMwMDA5N0M0MzAwMUY4RTQ0QkYyMUJGQjcwOEQ1RTM2MzlERUZDCis6MTA2MTQwMDBDOEU2Qjc4NEVEQ0Y1RUZBMUZBQzhGRUE2OUJBRkRCQTM0Cis6MTA2MTUwMDBBQzUxOUYyRjI1QjdBNDAwM0Y5NEFFOTA4OTlGQ0VCRDMwCis6MTA2MTYwMDAwMkY2N0I3NUREOTRFRkFGOEY2NzdBNUMxOUE5NUIwQzQzCis6MTA2MTcwMDA3QUNBNTI5OTRDMDU3Q0NGNzQxMEE5MEY5NTEzMzUzQjAwCis6MTA2MTgwMDA1NzE3OTZEMEZDRURGMTA2QTRBQkQzNTRCRjUzQTgxQzBGCis6MTA2MTkwMDBBQTQ4NjA3QTRDNjU5MkRGRThBMkU1Qzc5Qjg3REY3MTY5Cis6MTA2MUEwMDAwRDgxRjZGRUM1MjBEN0JDMzZFMkRDNDA3QUMyN0RENjMyCis6MTA2MUIwMDAxMkZERkMyRTM1RkZDOEY5MTJCMjEwRTdBQkNFNDNFRDRECis6MTA2MUMwMDA1NzlEODdCODUxNzBGOUEzRThCM0IzRTI4NUIwOUU0Q0YwCis6MTA2MUQwMDBEM0ZCRTNGNUZBRUI3Q0M4NkJGNERCNDcyMkYyMEIyMzJECis6MTA2MUUwMDBGMjJBOURDODlDNEU0Q0YxRUVGOUYxQzk0MDE3QTFGMTdECis6MTA2MUYwMDBBOEE3MTE0QTFGQjlFMTdBQzY3MEJENDcyRTU2Q0YwNDMxCis6MTA2MjAwMDBGNTQ0QUNCN0YwNjJGNTJDRTFGRTFFOEI1NkFGNjZFN0E1Cis6MTA2MjEwMDA5NjFENUU0QTRGOTVBRjNGNjcyNzU0OUU3RjIxRjk1MkU2Cis6MTA2MjIwMDA5Q0Y0N0JGNTg2NDdFRDAwQTc1MzkyRDcwRUY4RkVDMjhCCis6MTA2MjMwMDAyRjRFODgwNkFGN0REREYwNzI1OTA1QjAyMzkwQjQyOTRBCis6MTA2MjQwMDBEQzVGN0Q2MjMyRTg0OURGNkM5MDFEMjJBREUyRDk2OEU3Cis6MTA2MjUwMDAwQTk4MjhGREQ2MzY1NzRDMjQ3OTk4M0ZDQUYyOEY5RDZDCis6MTA2MjYwMDAxNTIxREZBMkM3NjdFNUNGOUY0QjUxNkM4ODA3QTY2RjRBCis6MTA2MjcwMDA5MzAwRUExREI1RUIzRjFGMEY3MkRDNDM0MjQ4ODc5MTQ0Cis6MTA2MjgwMDBFRDYwRkMwQjA5QzhGNzI1QzZCODlFRTU3NDlFQTgyN0VCCis6MTA2MjkwMDA3QjM4OUY3OTlBOUYzODJCREEyMUJEQjExREY4Q0MxMzNBCis6MTA2MkEwMDA0MTQ3RTVEREZCNEJEMDU4NENFN0YzN0FCQzJERTlFNEUwCis6MTA2MkIwMDA1NTM0RkIwM0YyMDM5MDA3MkE1Qzg4OUZFOTE1MEQ5Qjc4Cis6MTA2MkMwMDA1RUM4M0I0QUU3RDVCMUZFRDc3NjIxNTcyQjQ3MTgzRDJDCis6MTA2MkQwMDA5RTZCOUFGNUIzREQ0QUVGRjJBNjkzREI0NUUxNzY3RTNECis6MTA2MkUwMDA2Q0E3QjQzMDNEODhCNEIyQjQ1QTBFRDg0MUVGQUM1RTVFCis6MTA2MkYwMDAyQjNCMjlBNTkyRUEyRDJGQkZGMjIyRDg2QjlGOUFEMDczCis6MTA2MzAwMDA1RUFCREFGMkQ2NDdBMzY5QkU2QUFCOUMzNDkxMkRDNzY3Cis6MTA2MzEwMDAyQUE0ODRGMUUzQTFGRjlCM0YyQzhDOEZDQTVGQkM2NTRDCis6MTA2MzIwMDA1NDg2QjJFRjBGMjc4NEYxNTJCNTc1QkY5MTBDRUQwOTc5Cis6MTA2MzMwMDBDN0EyQTZGREM2QTAzNTBBN0U5QThFOEUwN0JEQTU2MUFFCis6MTA2MzQwMDBEM0I3NDZCMEJGQkVEODI3OTBENEVDOUVFRENCRDdCRTE2Cis6MTA2MzUwMDA4NUZCMjJDMDA5RjFDOUYxRDU4REJGMUU3ODBCNENERTNCCis6MTA2MzYwMDA1RDgwRjUxQzIwMkYyRjg1MzcxRjk3RDMzNTNCNkQyNDdCCis6MTA2MzcwMDA5RUNFQTNGQzc3MjZGRjQ0QzBFNzZCRjdEQjYxM0RFREMzCis6MTA2MzgwMDA1MjFEQTNGM0Q1OEZBNkI4RThGOEU1QjIzN0M1ODEyOTI5Cis6MTA2MzkwMDBGQjVFQkVFNjAxQTRCRjMyQTEyRUM1ODFGQ0U0NEEzN0Y0Cis6MTA2M0EwMDBBMEVDRjZBNkMzM0FFN0FDQkExREQ3NTk0QURDNDg4NzM5Cis6MTA2M0IwMDBFNUFCQzU2MjNGNERCRjk2Qzg4NEFENTFGOEE0MzA4MUFFCis6MTA2M0MwMDBGMTQ5RkIzQThBNUNCQUNFNzZEMEZCNDFERkZFOERFODFDCis6MTA2M0QwMDBERjgwRjZFOTdEMDRFNEZGMDM3Q0NENzRBN0M0RkNENzFECis6MTA2M0UwMDA2Njg2MkY2QjgyNDFCNTE3Q0QzQUZBNURGRjU4MUJFMEU4Cis6MTA2M0YwMDBFOTc0NUY1NzJBQ0M5M0MyQzFDQkUxMjY3QzRGRkIxNUQxCis6MTA2NDAwMDAzRkI4MjE5NUUxODkyODUyMjE2RjQ3Rjc4MzIyRjgwRTgyCis6MTA2NDEwMDBGNURCNjQ5NzI1NEZENzhFQ0I0RjM2RkUzQzNFM0U5RDM1Cis6MTA2NDIwMDA3NzBDRUM2RkVEMjk1NEJGOEZCMkJFOTlCMDNFREMxN0VDCis6MTA2NDMwMDBFOTNFQTdBMTMzMERCRjMzRkU1RkZGMzhFMzc3OTVGRjM5Cis6MTA2NDQwMDBGRDUzMjY0MEY5RjkwRjE5MUY0MTNCRDg0RkU4QkMwMjE0Cis6MTA2NDUwMDBBOTU4QkVGRjM2MDFFNTgzODkwNEEyRjFGOTdBOTlGM0MwCis6MTA2NDYwMDBCOUJFREM0M0Y5MTVGQzA0MkE5REQwRjk0QjQyOUM5NjM5Cis6MTA2NDcwMDA1RUU4MzgwOTg4MDdCNDU3NEE1N0QwRjY1QUZEMDZDNjcxCis6MTA2NDgwMDBDNTdBQzZGMDc3Q0RCRTUyQzZFNTQyN0UwMjk1MDdCMTA5Cis6MTA2NDkwMDA2MTc5NDA1NjI1NUY5NjFFNTkyRDEzMkZBODlDRDU5RkQ0Cis6MTA2NEEwMDA5QUQwMUVBRkRFMjIxN0MzRkFDRjZDM0VGOEQxNUQ5NEFFCis6MTA2NEIwMDBDRUNGMzRBOTdDQUI5N0FCOTE3QzVCQkU2RDgzMDA3NDZGCis6MTA2NEMwMDAxQUM5Qjc2N0NBRTkyRTFFOEQ2RkU5RjdBODdDNUIxRTUzCis6MTA2NEQwMDBGQzdGMkE1NzU1Rjg0RDRCRDBDQjUzMkExRkZCODEwQTFFCis6MTA2NEUwMDBEMTFCMUMyM0U1RTNEN0EwNkYyNUY3OTQ4RkY0RUY0MzZFCis6MTA2NEYwMDA1MkQ4OTMwRTU1RkE1M0U5OEU2QTcwRkQ0MEFFNzdEM0E5Cis6MTA2NTAwMDBBNzRBN0ZEREY0QTlEMjVGRTQ3QUY1RjA4QjJDRUYwRjc4Cis6MTA2NTEwMDAzNjEyQTU5M0UyNUQ1NEEzQTNGOEFDNkUxNUZDMjZFNEY1Cis6MTA2NTIwMDA3M0VGREI3RDBBMTA0RTJFRENERTg4RUZFRDNFNDlEQTlDCis6MTA2NTMwMDBCQzNGMjJERjE0NTFERjE1OTEyRjhFQThFRjhFQzhEN0Y0Cis6MTA2NTQwMDBFOUVBNTdCNzFDMzQxMkM0N0Y0MDU3Q0YzNEZGMjU3Mjk1Cis6MTA2NTUwMDAzQzhBM0RBOEVFM0Y5RUU2QjM0NjJGRDA0NTY2QzgwODZDCis6MTA2NTYwMDA3MjRGNUU0ODU1MzdGMEFGRUQxNUQxQkZENkE1ODRFQzFDCis6MTA2NTcwMDAwOUY0RkJBMzE2NjZBNzc1Mzk3ODNFOUVFNTQzQzlDNkE0Cis6MTA2NTgwMDBDNTIwRjdENEVGMjEwQjQxRkJCQ0FCMzg2NDhGRDdEOEMzCis6MTA2NTkwMDBGRjQ3NUI0NUJCNDJDQjgzN0UzMjQxRUI0NzA4Q0ZBNzI5Cis6MTA2NUEwMDAwMUYxMUQyNEJEOTUzM0JGNjE1NzhDM0QwRkM3OEJDOUM5Cis6MTA2NUIwMDBGMjAzRkRERDIwNUFCM0U2ODNCREU3MTM5RDk0N0NDODRBCis6MTA2NUMwMDBFQzA1NzdEQTA5QTVCM0FFRDYwMTM3NEZBNURGRTdCQ0Y2Cis6MTA2NUQwMDAyMzgyQkE0REQxRTM5MkQyMjlERENDRTI3NDdDOEE3ODUxCis6MTA2NUUwMDA5RkJGOTZBRTZGNTYyQkQzQzM2NzJGOEI0RUY3OTVCQ0NDCis6MTA2NUYwMDA3RUE5NzU5RTExRTQyQkQ1QTM4RjY5RkRBMjk1NjQxOTIwCis6MTA2NjAwMDBEMjVERjlBQTg4RUZBRDNGNDJGRUE4OENFMDBGMzdCNzA0Cis6MTA2NjEwMDAxRkY2QUFGQzkxNEZGMjUxQkUxMEMyRUM1RjJFOTc2RjhECis6MTA2NjIwMDAxMDczNkY5RTRBRjFEMDc1NDgyNDI2MDVFQzU5OTEyQ0MxCis6MTA2NjMwMDA4Njc1NkUxNkZDRTAyRjIwREU2NEU0QjM1QTEyNDI3OUIwCis6MTA2NjQwMDBBOEMyQTkwM0Y4Njg3MEVGNzJBQTYzRkIxRjBCMUYwMkIwCis6MTA2NjUwMDA3QUQ5RjFGQkJDOTc2OERBQjFFM0QzNDE3QjIwQkZGMzcxCis6MTA2NjYwMDBFM0FDREY5MzlFRjU4QkY2N0QzNzFERjZCM0FFN0QyNjRBCis6MTA2NjcwMDBGNDhCNzVFREZCNjVENjQzOTBERjZENDJCRjU4RDc0MjcyCis6MTA2NjgwMDA5MzBCRjhDMEJCQ0ZFNkJGMDJDQUZCMzJGQkExNjFFRkEwCis6MTA2NjkwMDBCNzc5NDFEQzVGMTcyMURFNEUyNTMwRkJFNTVDRUI5RkNGCis6MTA2NkEwMDA4RTA4NDk5MEQyNTU4MUZFQjAyRjE2RjlDOEIzREI4MjBGCis6MTA2NkIwMDBGNjdBRDdERTZGMEJEREQ2N0ZERTdBNkE4REM0OERGNDc1Cis6MTA2NkMwMDA2ODIzNTNCNzAxRkRDNjMzRkZCMTY3Q0ZBODk3MTdEMDMyCis6MTA2NkQwMDBGMTZCOUFGNzFCNjdEMUYyQTIzN0ZFOTIwN0YyQjM2QjA4Cis6MTA2NkUwMDAxQkQzOEIzQUU1RTAxQUUyMjRFNEFCODRCMkM3NjVGMDMxCis6MTA2NkYwMDBGMzAxMzM2NTEwRjI3NEUyQzYxQkJEQjlEMUUwQzJFMDBDCis6MTA2NzAwMDBEMDQ1RTEwMEVCQTI3MDI5MDdCOURGMUIzQzYyMTI4RDc2Cis6MTA2NzEwMDA0OEVGRkY3QUYwMzgzQjlEQzlCNTFGMTBGMDBCODVFMUJCCis6MTA2NzIwMDAyMkI4RDg3NzlCREYyQ0UwRkFEOUY3N0RERkU2ODFEQzUxCis6MTA2NzMwMDAzOUQzQjQwMEY1OTU0QkFEN0I0OEUyQkYyQTFERkNCREIzCis6MTA2NzQwMDBFQjE2MDI5N0IzRUUwOUZGQjJGODY2RjRGRjVFODI4MkExCis6MTA2NzUwMDBGMzhDRTQ4MzlFNzRCRUYzQzc5ODdGQ0RFNkM0Rjk1RUU0Cis6MTA2NzYwMDAyNkZGOTdGRjZGQzNGQjM2OEE3N0ZCQTVGMUZFRDhGRkE0Cis6MTA2NzcwMDA1OEJDQkZDM0YxNkU3Mzk4NDA5RUVERkQwQkZBNTlENTFFCis6MTA2NzgwMDBGNTVGNkFEREFGRkMwRjVEQjdBQUM3REY2NEE4M0IzQ0NECis6MTA2NzkwMDA4NUQ2M0Y0QzAyMkI4QUU5M0NERkNDQkNFMUMzMjlCNDRGCis6MTA2N0EwMDBGNDk3QkRFODI3MUYyNTMyM0JGMDk3QTA3QzgwRkQ5NzJBCis6MTA2N0IwMDAyNkY4MzdBMDVEQzFFQ0E2MjJDMkY2RjVBMjlDMzJENDIxCis6MTA2N0MwMDAzNzhBNzI5RTQwQkQ4MTQ4NzU4N0YzMjkzQzZFQ0E5QTBDCis6MTA2N0QwMDBFMzVDOEFENTg3N0RFMkE2Rjk3RjRCQkZDRTg5RkVDM0Y1Cis6MTA2N0UwMDAwOEZCQjFFOENBMUIwRjgxRkQ3MjcwMDE5RDFGMURFN0Y4Cis6MTA2N0YwMDA2MDVGRDE0MTM1MjczMjJFNTMwRTk4RjIzMDNEMEFFOUMxCis6MTA2ODAwMDBEQkY2MDk1ODZGOUM1NTZGM0Y0RDA0QkI0NzYzMEZERUE1Cis6MTA2ODEwMDBBOEU4Q0JDN0YzRkUyNzkwMDM0OTEyRUQ3RjgyNTMyNkU5Cis6MTA2ODIwMDA3RUE4NDc3QzhCQjRFN0NFRTMyM0ZBRDk0Njc1NENBREZFCis6MTA2ODMwMDA3RkVENkY4NTlGMzk4OUQ5OTlCRjI0NzMwRkU3MDNGQ0RBCis6MTA2ODQwMDAzMjY1RjQxRjVFMTI3RTAwNkY4NDU3QkU3RjI5RTg1NkMyCis6MTA2ODUwMDA5MjEzRTE3NzUzNDYwRDg3MjdCM0FCMjVERTVFQjIyRTQ4Cis6MTA2ODYwMDA2RTAzQkU5NTA4QjU4Qjk5NUU4NkY2QjQ2QTE3NUYwQTBCCis6MTA2ODcwMDBDRTg0REJEQjEyMUY1QTg1QkI5NDQ5RUQ2RDdEQkYwOENBCis6MTA2ODgwMDAxNzE1MUY3RjJCMUU1NEZDRkRCREY4RjgxREUwNjM0NDU3Cis6MTA2ODkwMDAxODFGOTlFNzFEMTJGMDY3MTFCNzA3QzY5RDZGMTMzMUQ2Cis6MTA2OEEwMDA5RkU5OTRGMEZDODVEQjAzNjNBQ0YxMTJEODAzRDc0OTcwCis6MTA2OEIwMDAxRjg4QzA5NzY1RTY1RDk1NzA4RTYwNzYwQTQ4RDc4MzFECis6MTA2OEMwMDAzQjBDNjhFRjk4MEIwNDg0N0I0RUEzODRGOTBGMEM4RTZECis6MTA2OEQwMDAxMUEwNjg0RkJFNjZFNzk5MDcwOUY4OTM1RDQ2QTY3ODUwCis6MTA2OEUwMDAxNzMzN0ZGRTlGQkZGRkZFREE0MkYwQUJCMEJGMzJGQTM0Cis6MTA2OEYwMDBCRjQ5RDQxRTlCQkQ4QTA0NjJFOEZBRTY0OEM0MEIyMTU2Cis6MTA2OTAwMDAwRTczN0MwMjM5QTZGMzA3RUJGM0YwNzc3RDRBQjg5RjRDCis6MTA2OTEwMDA0QkQ1RUY0RDhFRkNCM0QzOUQ1NDZFMURCQjgyOTA1RDY1Cis6MTA2OTIwMDA5MDMyNjdCRkE0QjU5QjdGRDBDQUUwRTUzOTRDRkNGRDJGCis6MTA2OTMwMDA1MTJFQjhDNDYyQ0QzOURCQkYyNzMxRjlCMUYzMEZEQjdCCis6MTA2OTQwMDA4NjgzRkY2QzRDNTc2RTFDOTNBNzA1MDZBMDRCMEZCN0IwCis6MTA2OTUwMDAwQkNFMTEyNTBFRTIxNUNFQjUwRTg4QzM3M0M0NDNBMjJCCis6MTA2OTYwMDBDRDFEQzU2RkIzODlEQkQzRkY1MThGNEU2NUQyQjU5RTY4Cis6MTA2OTcwMDBGODQ0QjA5QjQ4MDhGREI3REVGNUU2QThFN0MxMzM5M0JECis6MTA2OTgwMDAwQzlDNkUzOERFRTg5RjU4MDhFNzE2NkNGQzM5QjQ2OTM5Cis6MTA2OTkwMDA5QzE2NkYxRDEzQkY5MEYyN0FFMjAxRkU4RTY5Q0U1N0VFCis6MTA2OUEwMDBGRTUxRjg4MkZEMEVGMERENjQwOThFMkY4RTIyM0ZFNjQ3Cis6MTA2OUIwMDA3MUY4NEQzRUYwMURGQTNCQUY2QzVENkIwMEZBQkQ3Mjk1Cis6MTA2OUMwMDBCRDQxNzczRTU5OURDNEVEQUU2MTY0MThDQzZCRjIwMUI4Cis6MTA2OUQwMDA4QkFEMDBGMDcyNDg3NDVBRThGQTNDQUQ2NzhERUUyODMyCis6MTA2OUUwMDBFNzVDOTFGMDg0RkVDMThGRkU2QTEyM0IxN0Q4MjMzNzEzCis6MTA2OUYwMDBDRDAyQjhFRUY5RDI0Q0JDMTRCRkJCOENCRUFBNjhGMzcyCis6MTA2QTAwMDA0QzRBNjE3MjZFMEU2OUJBM0YyRkZCNUYwRkJFNjNCQUNDCis6MTA2QTEwMDBBQzgxQjE2MDY3QUUyN0RDQUYxMTQ5N0YwNEU5RjhEQ0Q3Cis6MTA2QTIwMDA0NkUyODdGRDE0RUM1MjkwMEJFNzM2MTNEQ0NGMjk0ODgxCis6MTA2QTMwMDA5RTA0QkI5QUYyRkIwRkI1N0U5QUMxMkQ1QkZGMDNGNDU3Cis6MTA2QTQwMDA4MERBNTZDMTYxQTBFNUI1NTJEMDA4RkU1ODRGNEJCQzY0Cis6MTA2QTUwMDAwOEZCNkVCRTQyNUM3ODNFMkMzOTg2REVBNkUxOEI1NzgxCis6MTA2QTYwMDA5MzI0ODRFRkMxRDE3QkVFODY3MUJGRUEzMDEyRDA0NzA4Cis6MTA2QTcwMDA1QzZGODZFQ0IwNkY3RkQ1M0ExQ0Y5QTBCNzc1RkRBMkFDCis6MTA2QTgwMDA5RTU0OEU5M0ExMUYyNjBGMjNFOTIxNzc3MzhDMkU3RkFFCis6MTA2QTkwMDA4REU4Q0UwMEZFOUE2QzBBQ0U3MzQ2QzFERkM0NjQ0NjEwCis6MTA2QUEwMDA2Nzk3MkRERkZDRkY5RkM5QjcwRjU1RjlFNjE2OEIzNUE5Cis6MTA2QUIwMDA3Qzk0OTRDQ0U4NUUyM0RGNTJBM0M5QjdCOTgyOTIwQUQyCis6MTA2QUMwMDA3MDlGQkI3NzQwMkFFMDc1RUUzQjcyNzIzNEY5QjZBNTMxCis6MTA2QUQwMDA5RTlERkZCRDRFRjkxMUQyQUU2NjJBREZBRUQ2QzhCNzc1Cis6MTA2QUUwMDA2NjJBREZCMjdCQjZGQkVCRTVDQTM3RkY3RjBGRkY2RDhGCis6MTA2QUYwMDAwMUY5MTY2NUJERjExQzdFQUE3Q0NCNkIzRDhBRjIyRDk3Cis6MTA2QjAwMDBBRkQ5NDAxNDhEREZDOTlDN0MyOUY5MjYyNERGMDZGQTExCis6MTA2QjEwMDBGMDIxRDkxOTFCODU3RUI2NzBGREZCNzUxRUI3MDdFMzAyCis6MTA2QjIwMDA4MDlDRkJCNzY0NzY1RTdBQjk3MjJFM0Q4NUYxQzkyNUVCCis6MTA2QjMwMDBFNURDN0YxMzlDNTUzOTM3NzczQjk1NzNEOUQxRTg5MEM1Cis6MTA2QjQwMDBDOUI5QjlCQkE4OUMxMzgwMUU5OTlDOUJCQjk3MzBGRjA5Cis6MTA2QjUwMDA1Qjg0N0NDQkU5MjFERjA4RDZBRjBEQjBGNjlFOTZFQ0M2Cis6MTA2QjYwMDAxN0VFQTFGRDBENzNDOTRFMzNBRDNGMkMyQ0VGNDY2OEQ3Cis6MTA2QjcwMDBFNUREQkYyNTRCMDhFNzFFRjJFRUQwRTVDOUJCRUQ1Q0I1Cis6MTA2QjgwMDBERTUxMzlENjFGRTQ2QjI0N0QzODVCNjM3NEY5M0RBMzc1Cis6MTA2QjkwMDBEQTM3RkYwMkY4RTU1RDExQ0YxNzNGMzBCMDczQTBGNzg5Cis6MTA2QkEwMDA0NkI1MTcwMDdEQURFNEYzRjE3MEZBRUJBQ0Y3NjJGRjg4Cis6MTA2QkIwMDA0NTZGQjJGNUQ1NkM2NkZFRUZEQTY2QTYxRkQ2QUUxNzQ2Cis6MTA2QkMwMDBGRDBBRkRFN0Y4RDFERjE5NjFGRTE1N0IwNTkyNEFGMzU2Cis6MTA2QkQwMDA1MzRDQkVFN0FEMjA4MzdGMkUxMzc2MkU0NjI2RTY2QjAwCis6MTA2QkUwMDBFODYxRjZDODJBRjRFMzM3NThFQ0VCMDhFNUUzRDkxMjdDCis6MTA2QkYwMDAzMTgzQkZCRUNBM0FGRTBCRjBEMzU3OEQ2NEZFRkQyQTI3Cis6MTA2QzAwMDBGRTlERjBCODAxMzUwRUIyQjRFNUJFQjdGQjkwOUVGMTIzCis6MTA2QzEwMDAwMzkzNEQwQzhGOTM1RjE2RkM2QkIzMjE3RTQ5NUY1RTJGCis6MTA2QzIwMDAxNTExRkZGODE0NUZFNzE0MzE4ODcwMjFFRjhCNTFFM0UxCis6MTA2QzMwMDAxODlFOEE4NEM3MjEwRTBGQkE3RTFEM0NGQzQyNTQ3OEYwCis6MTA2QzQwMDA1MDhDNEVDQzRGMDlBRkJGRTJEREUwNjJGMEU3NTdBQ0FECis6MTA2QzUwMDAxNEYwREM1Nzg1NDdFNDNBNTVGOEE4RkVFOTJBREVERTUxCis6MTA2QzYwMDBEMzdBMUY5RUZCNDdBRTVGODU1RjhGNzVBQkYwOEM1ODY0Cis6MTA2QzcwMDBCRjJGOTk5RjdCRTU5M0UxMTA0RjQzRTkwMUU1ODdGNzJCCis6MTA2QzgwMDA1NzE0MEU3NDlDRTIzMTU3QTQ2QUU1RjFGMzFDMEVDMzRECis6MTA2QzkwMDA3RDYzOEFEMjA5QzA4REQ0MDFGRDk0MzZERUY3NzYzQTQxCis6MTA2Q0EwMDA1REZGODg0Rjk0NjFCMDRENUUzM0RBRTQ4NjczRDQ0RDU2Cis6MTA2Q0IwMDA5NjEwQ0EzNzk1QkVEQTU1N0FFN0ZERUNDOUE4MUI4QjRBCis6MTA2Q0MwMDBGNjdBOEJFMDAwRkRDMjEzQjAyMDFDM0Q5NENFMkNCNEFDCis6MTA2Q0QwMDBDQUMxOTVERjhDRTc3MDc0OTg5MEFGRjhCRTQzRTE2RTNGCis6MTA2Q0UwMDBBMEY1QzdBQkZCMTA4NTNCRjBDREYwRDZCMzc4OUU1QjJCCis6MTA2Q0YwMDA0MDQyNzg1RTUyREIyODM4MDM3NDFEQjUyRDBDNUVBQTI1Cis6MTA2RDAwMDBCQ0E1N0Y1NjJEM0VBMkQwQTMxNDhEMUUwOTM4ODkwQjM5Cis6MTA2RDEwMDBDM0ZCNjAxNUFGMzdEOUU0RkIwOENFNjEyNjUzN0E1RjE5Cis6MTA2RDIwMDA0QkMyNzhDQ0ExRkYwMTFFMjNGMUE0QzJGMzUyRjRGOUE3Cis6MTA2RDMwMDAzOUQ3M0ZCNjAwMUNBRDAwQUYxMEQzQTMwMjc0NUZCMENCCis6MTA2RDQwMDA4NUNCM0Q5MjU3MDdDN0EyMTcyRjMwRkFEQTJCMjg3MDUwCis6MTA2RDUwMDA5RUQwMEQyN0EwNTc1QTNFQTI5NUQxMkJDMDREMDFCODA5Cis6MTA2RDYwMDBCNzk2ODg5MDJGQTVGMDREQ0NFRUI5NEUzOEJGRDRGMjJGCis6MTA2RDcwMDA2RkM1REVBM0FDRkZENTgyOTM0NEExNUY3NUREQkREMUE1Cis6MTA2RDgwMDBFRjNGNEFCN0VEMTE3NEZCOUUyNTc0NzgzOEQwRUQ1RTY1Cis6MTA2RDkwMDA4MUY5MTE1QUUzNzVFNzhFQTYxNDc2RUVCRUM5NDJFOTcxCis6MTA2REEwMDAxQkNFQkJERTkxOURFQjk0OUU3QzdFODFDMzEzRjQ3RjUyCis6MTA2REIwMDA0NUUzOTcxQTAyMEI4MEIzQzA4RDY2OEMzRkMzNzlGNDBDCis6MTA2REMwMDA2N0ZBQTU1NkJFNkVCMTkwRTREQjBBN0FFRkRGQzhFRDM0Cis6MTA2REQwMDA4MURFRjQxQjM1M0YxNEM2MDNCOUQ3NDJDN0NCMDk4RkY4Cis6MTA2REUwMDAxNzI5REY1NTdCRkY1MkVCNEE0Q0Y5QzdENkQ1MURCRjlCCis6MTA2REYwMDA0OURBRjBGQ0M5MTRFRjdFMjgwOUZEM0YyQzNFRTkwRTZDCis6MTA2RTAwMDAxRTlGNDQ2NzgwN0E5NkE2NUU1QUYyODhERUVCOTEzNDI0Cis6MTA2RTEwMDAzM0VFQzNGN0YzQjhGODFCNDQyQkYxRDI3NTdDRTU5MjNGCis6MTA2RTIwMDA5MTRFRTkyRUZEREI2QjQxMkU4RkE1RkIwODREQkUzQTNFCis6MTA2RTMwMDAzQ0UyRTM3QkIwNUNDNEYzQTg5QkRGNERBQzgxNzNCQTRBCis6MTA2RTQwMDA5QjQxMThEMUVGMzdFNzBCQjhGRjdFMDA5RDhEMDIzREM3Cis6MTA2RTUwMDBENjRDNUMyNjRFQzJCNDdDRTQwRkUyRDE2Rjk0QkZERTA4Cis6MTA2RTYwMDA1N0E0NTA3RTFBQjZEMURGMDBBOUIzMjg5NEY0MUVDMEVGCis6MTA2RTcwMDA2RjhDNDgwMDdFNkRBRUM0MjJEOEJGRUVGRjlDRTQ4QkMxCis6MTA2RTgwMDAwQUVFQjNEOENGQjA0MzI0MTlFQThENzYyNUEzMzkzMDYyCis6MTA2RTkwMDBBQTc5NDUxMUY4NDdBNzFDQjQ1QTgxQ0U3MzU2MTk4OEIwCis6MTA2RUEwMDA1QjQzQkZBMzg5QkYwMUZDMzZBMzRFQjg2RTA1RkUyQjIyCis6MTA2RUIwMDBBN0ZBMDJGODlEQ0I1QkQ3MzZEODIxQkY0QTcwMkFCNDE3Cis6MTA2RUMwMDA3RjhGRDczRERFNEVFN0I1QTVGMUVDRjhBQjgwMEY2OUJCCis6MTA2RUQwMDAzREU4QzZCMzhBRDVGM0FDMTc5QzEwMkE1QkRBQkExQzFFCis6MTA2RUUwMDBFMzcxNEFENzBCQzQwMUY1RkQwMjMxQjM3RUZENjZEQUNBCis6MTA2RUYwMDBFRjk2NTVCNDNEQ0Q5NzQxN0JFODc3RkREOTBGNkYwNUVGCis6MTA2RjAwMDAzRTNGMkNCMkY2OUJEOUI5NzUyOTZEQTcwMEJEQUVCRjI3Cis6MTA2RjEwMDAwRkZCQUI1ODI1OTAzNERBNUZGOTY2MjZGRkNCMEZDQjE5Cis6MTA2RjIwMDA0RTI4NkZERUJGMTJGN0IxODk3NEJDRjQ2QzkwRjc4MTA0Cis6MTA2RjMwMDA3MTkwMjdDMzA1MDdGQTNCMzNFRjQyQkVFRUUyN0M0RDZBCis6MTA2RjQwMDAzQUE2MzJCOTIxRjAzQ0I3MUI1NEJERTk0MDBBOEIwRjc5Cis6MTA2RjUwMDAyRTc1MkUzMDI2RDI3RURFMUI5OTlDMEQ2MTAyOUU5NkU4Cis6MTA2RjYwMDBCMzc4MUU3RDgyQzJEOTRERTFGQzAxOEZFNzM4MzhGMjNCCis6MTA2RjcwMDBCODMxQThEOTdGM0U0QjE5ODA3NDM4QkI2NTBDQzYzOTJGCis6MTA2RjgwMDBDQzIxQzUxOEU3MzA3OTE0RDNEN0RFQkZDRUUyMTdFODlECis6MTA2RjkwMDBCQ0RFOTc0Mzk5RjBGREUwNzUyNkQ0N0YzQkI3Qzg3OEY3Cis6MTA2RkEwMDA1RURDRDkzNzg4RkVFOUY2NTUzMjgxNzg4RDg2NTUyMjI4Cis6MTA2RkIwMDBDQUM1RjZDRDZDMUYxNzU3REYzRTNFMURFMEI3NDE3MEM2Cis6MTA2RkMwMDA4MkRDM0NCOEFBQzgwOEZCNUFCQjVGQzBGNjQ1QUIxRkMxCis6MTA2RkQwMDA0ODYxNzYwQzkzODdBQURENTZFQUE4RDBFRDFGOTFGMjlFCis6MTA2RkUwMDA0RDk1N0YzNTFDMEU5MTcyQUU0NkRENjcyMkU0NUMwRDM3Cis6MTA2RkYwMDA5QzM3REIyMUQ1N0ZGNzEwMkI5MzdGQTBGNzAzREUwM0FGCis6MTA3MDAwMDBERjIxRkRENjFFOTYwOUU4RkRDMkYxOEVGMTE4QjcwNTA1Cis6MTA3MDEwMDBGQjI2MkQxRkQ1MkFCOEUwOUNCRkZDMTM5MzFGRjU1NTA2Cis6MTA3MDIwMDA3RkM5OEM5RjgwRkNGRUQ0NDQwNDA1RTJFMDI5RENBOUUyCis6MTA3MDMwMDA1QzE4NjkwQUZERTE1OUZBRkQ4QjBGQ0MxMDIxNDNFOTc4Cis6MTA3MDQwMDBBNDA0RTFBQ0M2OEIxNjZDNjBGMTJEMDUxRkFDNDgyOTc5Cis6MTA3MDUwMDAwNTM4OEM0QjQ0Mzk1QkQ2MjgxMkI3NDY1RTdDMjFCODg0Cis6MTA3MDYwMDA2RUJEOEJDOTYzQzcwNjhEM0MyQTMwRkE0QTYxRkY3MjM4Cis6MTA3MDcwMDBBNDMyMzlBODZDOTAyMTY2ODQ2Q0U3RjI4OUVBRDMyRTk5Cis6MTA3MDgwMDBEMDFCMkE3NjJENEYzMUQyN0E4Qjc5M0M0OEM1REVFNTZDCis6MTA3MDkwMDAyOTU0MzQ5MDA2RDhCNzY4RkQwQTIzRUJCRjYyOUZFMEZECis6MTA3MEEwMDA1OEFCRTk1RjZEQUZGNkE3RjY2M0RDQTVFRjY3QzA1RThFCis6MTA3MEIwMDA5RUJGQ0M3RUQ0NzlBOEUzRjdBNjhGOEZGQ0NGMEIyQjk1Cis6MTA3MEMwMDAwNERBREZDOEY3NDUwQzUyMUU3OTdDRTIwMEVENzk4N0JGCis6MTA3MEQwMDA5QUFBRkVEN0MyMEYwREM0QTU4MURCQzgzRkM0MTA5NzgyCis6MTA3MEUwMDA4NjJFOUE0NzUwRkVBNjc4OUJENEMyRjRBMUU2MTE0NzlCCis6MTA3MEYwMDA4RDM1MDU5ODc3MDAzRkQ3NzIzRjZERUQzODc2NkVENUE4Cis6MTA3MTAwMDA5Q0ZGQzEyMkUwRUY4OTA1MDJEMjAxRjFCQThEODk0OUM1Cis6MTA3MTEwMDBBODA3Mjk3MEJFNTA1NkMwREE5N0QxRjZDMDc3Q0QyQjlDCis6MTA3MTIwMDAxOTFGNTI3OUEwODBCQ0E4NURCNTdDM0NENjVGMkYyODgyCis6MTA3MTMwMDBEMDdGRjNEQTEyRENFN0NCNDc4QTA0Q0JENzFGNDVCREZCCis6MTA3MTQwMDBBM0JDRTU2ODEyRjAyQkU1Q0YxNUIwRUZENjVFNkI3MkVECis6MTA3MTUwMDAwMDdGQTg3Q0E3RjJGMUZCMzI4QjBGMjE2NkM3NTBCOEU1Cis6MTA3MTYwMDAwNzUwOTZBMjQ0RTU1RkYxMzA2MTc2RUE2NjE5RjlDRUUwCis6MTA3MTcwMDAzMzkyRjFFNUZCNUI0NEU0RTc4M0Q3REQzOTFFRjhCMEQ5Cis6MTA3MTgwMDA3MzgzRDAwQjFGNTMzRTJEMDhGM0E5Qjg5QUM1RUI5NDE3Cis6MTA3MTkwMDA2RDYyRjZDQUMxNTU0QzNFQjQzNzMzM0RCMTY4QjUzQzVCCis6MTA3MUEwMDAwOUYyNjVFRkNBODRGOUJEOTgzRTc4QjlGQ0RDNDM0RjFCCis6MTA3MUIwMDBEOTE4OUQ5RjdCRTNERkM5NzJEMzQ3RjdEM0Y5RERGQzc0Cis6MTA3MUMwMDAxQTlEQkYxMjg2NTdEMUY1MEZEQUQxNEY3RkZEMzQ1QzdGCis6MTA3MUQwMDBBRjJBODc0QTI1MTZDRjM0REJCNzgwQzVGQjRBMkNFRTkxCis6MTA3MUUwMDBFRDZGOUU1N0M0M0MxRTRCQjE4NUU1ODgwOEY0MUVDRjU5Cis6MTA3MUYwMDBFMkE0RDdDQjQ4RUY5MUZDRjg4RkYyRDEzRjhCQUZCNzI5Cis6MTA3MjAwMDA3MzNBNTJFNzIzRUU2NUVEMjFBRTJDNDBFMUY4Q0JDRDg5Cis6MTA3MjEwMDAyRjYzNUNFQjk3QUYxRTlEMEM3OEFFREE0M0U5OTdBRTE3Cis6MTA3MjIwMDBCNzczQjM4RDA0NDA2RTQ5N0VEQzZGMkE5QjQ1OEMxRjdCCis6MTA3MjMwMDAyNzUyQTBGMDU2OUI5NjNGNTk3QzUyRDVFQjM2QTQ5QjIzCis6MTA3MjQwMDBDQTZEMkNFRUI0NzJDN0YxM0M4QzE3NTkxOEMyQjgyQjFBCis6MTA3MjUwMDBFRkFCNUNERkY0MDZGMzgwQkUyQjI1MTYyNzE1QzlFRkQ0Cis6MTA3MjYwMDA2MzUyOTlGRUQ5QjEyQjc2MkFBQzQzRDhCODFGQ0Y1QkI1Cis6MTA3MjcwMDAyQjlCRUU5NDgxRkVCQUU1NDdBQUFDRDZDMzczNEMyRjg0Cis6MTA3MjgwMDBBNTVGMzg2Nzg3Rjk0RDE5QUE5RERGMDJDNDUzQzcyNjQ5Cis6MTA3MjkwMDBDNkZGOTUyREIyREYwMkYzREJCODE2RkREOTlFOEQ2N0QwCis6MTA3MkEwMDAzMTNFQkVFOEY1MkRFODQ3RjBCNDg4RkFCOEM4OEQyMjIzCis6MTA3MkIwMDA5RTYzRDExNENGQUIyMkUzMTM2QjlCNkJGMERDQURCNkI2Cis6MTA3MkMwMDA4OUM3RkY0NUM0QzU1NUJEQkU3Nzg3OTc4MkE2RUExNzEzCis6MTA3MkQwMDAzRkI3ODMzQzM4RERCNkMxMEVGMEE0RkQ2MTVDRTFGNTNCCis6MTA3MkUwMDBFNzI1NUQ3QzU0RUZGMUMwMkU3REJDNjFEM0UzM0NERTJECis6MTA3MkYwMDA3MDUyM0JDOUVCMTk2Rjc4MUFGRTAxRkI0RDZBNDRCQzEyCis6MTA3MzAwMDBFNkM2NDQxRURGMUQyODJDOEVFMkNGRUZCRUY3QjNFNUE0Cis6MTA3MzEwMDBFQjM1MTAyN0RGQjFFRENDMUE5ODdGRjU1RkJGNUEwMzJDCis6MTA3MzIwMDBGMTRENjQ5RjA1RjcyOUNGQUJCRkM1Qjg2MkI1REQ4MkNCCis6MTA3MzMwMDA1NDQ2NkY5RDlCN0U4RTcxRDk5RDlGOUFEMERFRTlEQzZECis6MTA3MzQwMDBEQjlFMDVGMTZEOUQ1QkJGNEIwMUZGRENCQ0JEMzdBMDMzCis6MTA3MzUwMDBGRjcyREVGNkEyNTQxMjQ1REVBQjI5RDBBN0ZGMzJFMjVGCis6MTA3MzYwMDBDMjIzRjE3MUIwRjkyMEM2NjE3REY5ODkwOUU1NUI3NzI3Cis6MTA3MzcwMDBGQzY4NTMwRDhCQ0I1NTc4RENFOEU2RTg3MUY4NkE5QzI1Cis6MTA3MzgwMDA2MzZERjNBRDM3NUYwN0YyQkE5OUU5NzdERDcxOEY5N0Q3Cis6MTA3MzkwMDA4QTE3RkQ5MEUyRjVFQUNCQzBERjY2MUUxN0RDMzQyOUMwCis6MTA3M0EwMDA2QUJDRTg5N0YwMEY4QUE3OUZBNUVBRTM0NUJGNkU5RUU3Cis6MTA3M0IwMDBGM0IzMTdBMUFDMzlCMUQ3NzhEMUMwNjVDMDREOERGMzA3Cis6MTA3M0MwMDBBRjRFNzVCRDlBMEE3Q0I0MkRENjlCQzZGMEU2OUYyOEI5Cis6MTA3M0QwMDA4MDFFRjg3NTE2REM4RjM4MjU4NzMwMEUyNEI0RDdFNDZDCis6MTA3M0UwMDA4MEI4QzdDQUJEMUYyM0JGNzQ2RUZGMDBGREFEODRDNzQwCis6MTA3M0YwMDBEOTc3OTJFRTNGMTYwRjJERjA3NUFFQjdCMTM4NTMwRTE4Cis6MTA3NDAwMDA3Rjg4NDM1NUVDRjg5REM3OUIzMjNBNTZFMzUwN0I4QkZGCis6MTA3NDEwMDAzRjBEQTZGMkZCQzNGQ0RFNDEwREI1OUI1ODlDN0EzOEFDCis6MTA3NDIwMDAyRTU1MTgwOUY4M0FBQThCRUI1NUQ3MUREOTlGODNDQjU3Cis6MTA3NDMwMDBEMTcwNUM3NUY0Mzg1RjM1OEVCMDI3QkVEOEJFQTJDNjU5Cis6MTA3NDQwMDA0RDc3QUVFNUYxRDZGNDdCRTYzMDg4OTM2M0ZCQjlDN0EwCis6MTA3NDUwMDAyRjdDMUMwREJGNkE1Q0Y1RUYyM0YwQUJBRUFGMzdCRURGCis6MTA3NDYwMDA1MEY5RjM1MkYzRkU3QkUxRjI2RTJBRjM2N0FCRjBFOUQ5Cis6MTA3NDcwMDBGODczNzQzOUZEMERFNzc3NkFCNzdFOURBQUIxNkY2NzFGCis6MTA3NDgwMDA3MEJCNTU4NTlCM0FERkM1NEQ0Q0FGRThEOEM4RUM4NzNCCis6MTA3NDkwMDA0OEZFQTZFQjcxNDU4QkIzOTdEMjk4RkU1QkRCQjIzRkZCCis6MTA3NEEwMDAwRkU0NTBDNzgxNUQ5Q0VFMTg1REQ3NkUzRUNBRTI3NDUyCis6MTA3NEIwMDBBOURDRjY2QkU1MzY2MTdFRTRDOEZFRUNCQzNGNEY2QkExCis6MTA3NEMwMDBGNEZFM0M5QkNGNDZFREVGQjRFNEJBMTNFNjdGQkE4REYxCis6MTA3NEQwMDBFOTUxQTc5QkM0MDlGRTI4RkQ1RkUwRkI1MkY3QkE2RDk2Cis6MTA3NEUwMDA0NjhDOTcxMkVEMzFBODRGQ0RCMzhERkMyNDJFMDk1MjU2Cis6MTA3NEYwMDAyM0M2RkQzNDJDRTA3MTQyOEYzOEQzMDBDRTBEQjY5QkVECis6MTA3NTAwMDAwOENDRTc1MTgwOEZDNkZGMjAzQkRDMDRGNDM4MzlBRDRFCis6MTA3NTEwMDBCODQwNTRDMkYzNTVDQjhENDkwNkUyRDdFMjVGMEE2NDA2Cis6MTA3NTIwMDA4MjdDM0Y5MkRGMkU0MzdGOUY0NUY4NEQzRTkzQzhFMjE5Cis6MTA3NTMwMDA1NDNBQUZDRkJDODI3MzgxRDJCQkRFQURFNkREMEY4Qjk4Cis6MTA3NTQwMDAzQTNGNDdBRDI5NzQwNEY0NzdGMjg2MDVGREQ2RTIzRTUyCis6MTA3NTUwMDA4QjE3RkQ2NjZCMkNCOENFODNEQkJGN0QwNUUwRDVGOUJDCis6MTA3NTYwMDAzMzEzNjFFNzA4OTQzMEE4NUMyOEUzRkU4QkY2RURERjY3Cis6MTA3NTcwMDBBRUY5MTNFODk5RDA5ODhFNUZCNjg2RDYwN0ZEN0E3Mzc4Cis6MTA3NTgwMDAyQ0RBMDM1RERCRTJGMjUwOUY3Q0UzQTFDOTIwMzdDQTBECis6MTA3NTkwMDA2MDBGMDMzREVGRjU1NDdGMDNFREVGNjQzMkNCOUZEQ0NBCis6MTA3NUEwMDBEMjE3RUYxMzU0NkRCMzYxQkNFMUMxRUQzQjZCNDFGRUVCCis6MTA3NUIwMDA3N0JFMUUwQkM3RDFFNDRCMzlGODU3Qzg3QkY2QzQ5MTkwCis6MTA3NUMwMDBCNTBBRUE4MThBNzZCRkFEMjA5MkEyRDVGM0FBMjBBRjkwCis6MTA3NUQwMDA4QjdGMjE2OEE3QTMzRjhFRDI3MzU1NEIxQ0RFMUZEMTMyCis6MTA3NUUwMDBENEUzRkNFQ0NENjBGNzY1MDIxOUMwNzc1NDlGRDQ4RENECis6MTA3NUYwMDBBMzk2REY5NkQ2OUZERkVGMERGRDk4QkRBRkMwRUE3QjY3Cis6MTA3NjAwMDA4Q0ExNTI5NkY3NjUzMEJFNkRDM0ZBMjUyQUJERjJGMjAxCis6MTA3NjEwMDA5RUZEQjJGQTMzRDJGQUVCRUFBOUVENkI0REE0MkUxQTE1Cis6MTA3NjIwMDAxRjU0QTcwOUZDN0VFRjVGMDY0NzdCQ0YyMkNBRkNGMUZGCis6MTA3NjMwMDBGQjAzMDJGMTFBNDAwRkQ4NkFDMTM4QUU2QTYzNjAxMENBCis6MTA3NjQwMDBDNEI3RUYzMEIyRjM5MTZBN0I2MDEwQzRCN0VGRTFGMkQ4Cis6MTA3NjUwMDBBRjNBODZFNkU5RjcwQzNFMEZBODBGNzk2MjBFQkUwNjM4Cis6MTA3NjYwMDBGOEFFRDk2OTIxNEJDMTdFN0ZDM0U2MDIzQ0Q3RUNGODY2Cis6MTA3NjcwMDBGNkU0NEIwNTEwQ0YxNjhCN0VBQjlBMzdGRTFERjE1RkZCCis6MTA3NjgwMDA2MzBBNEMwN0ZBMEY2RDM1OTE3NUI0N0VDN0Q2NzdCMjkxCis6MTA3NjkwMDA0MDhGRTg5MDAzNTkwOTE3MzlGN0E5NjkzMkU5Q0VCMTRCCis6MTA3NkEwMDBENTc1OUNBRUY3MEY4NEZCRUJFQUJEQzVDQTVFRTRDNTk5Cis6MTA3NkIwMDBERTM0QTY4RjJFNEY3MzNEOUQ4NjdDNkQ3NUEwQkM4NkYzCis6MTA3NkMwMDBGRTQ0RThBNzY1ODBGNjVFNzNBNTEyNUQ4RUFENEE5MzExCis6MTA3NkQwMDA3NUY3NjhDNUYwM0RDNTU1RDBFRjk3MjRCODM4ODNBMjNCCis6MTA3NkUwMDBBNDQ2MDhFMUY5NzlFNUM2QjM0M0MxMUVGRUVDQTc1N0VECis6MTA3NkYwMDBFMUI5RDY2N0M2RDA1MDkwREI5RjY1ODU4NjZBRTVGMTEzCis6MTA3NzAwMDBBOTdBQjMyMkM5RTg5N0MwQjQ2QkVERDlEMjBDMDJGMUMzCis6MTA3NzEwMDA4Mzk2QTlEMUU0RDM5NkI0NTg5QzQ3RTVDM0IxNTFFRjAxCis6MTA3NzIwMDA4M0VFRTZGNEI2MUE2ODMwOTk4RDBCN0UwODc1RENDRkNGCis6MTA3NzMwMDA4QzdFMjNDQzIzMzc1REMxRjJDQTRDQkYxMUJFNTc2RDdFCis6MTA3NzQwMDBEQzM1NDBGN0VFODRFNEMzN0E5NEJGMTAxRTE1NjQ4NURGCis6MTA3NzUwMDBCMUMwREE1M0FFNTRDQ0I3MkExMkRFOEY5NkZFQUI5QjgzCis6MTA3NzYwMDBERUM0MzA5RUQwQzkwOTcxNkExQzg3NzQ2NzQyM0ZBODg1Cis6MTA3NzcwMDA3QTFGNDA5MjhCQ0QwMDJGMjMyOTc2NDgyMkEwREE4N0VBCis6MTA3NzgwMDA3QzFBNDM5QTMwQjU1Mjc1ODRFRDQzNzUwNEUyOEE0RUYzCis6MTA3NzkwMDBGMUYzNUI5M0E0M0MwREYyQzM3NDQ4NDQ3OTdFMjlCODlECis6MTA3N0EwMDBGRDMyQ0Q4RUYzMzY0OTc1QzQ4OTdBQzc0NDA3RThENUQyCis6MTA3N0IwMDA4MkQ3NERCRUE3RjREMDUwQkY3MUMwMDk3NkZFRUY4MkNDCis6MTA3N0MwMDAzODM4M0I2MUYzQjMzQkRFRkUwRUY0MDM0QTY3Njg2NzZCCis6MTA3N0QwMDA3QkFGMjdGRTA2M0E5RTY0NjQ3OTMyOTZGOEEzOURDNzc0Cis6MTA3N0UwMDA3NzcwM0MxMEVGN0U5NDNGNTYxMkZFMEJEMTdDMkM0QUYyCis6MTA3N0YwMDAyODNBNkVEQzVGNDc4MjlENkI3NTkwMDBFODREQjE1NjZDCis6MTA3ODAwMDAxMjg4QTVBOTM1NTczQUFERTU1RjNCNjFGOUZFOTQ5QzE2Cis6MTA3ODEwMDA0MUFFMzlBRUQ1OTc0N0QyMzU3MTRBRTdCQkU1QTI4ODZDCis6MTA3ODIwMDBFRENGNDdCNDNGN0ZCMUY2MkEzQzNDRTYwMUQ5RUNGRUYwCis6MTA3ODMwMDAzQjgzNEIwQzVGODM3N0FDRjM0MjEwRTA5MTY3NzczNjY0Cis6MTA3ODQwMDAwMDFFOERBMTIzMEYwMTNDRjJBQ0NDNEU0QzZBMjQ1QTkxCis6MTA3ODUwMDAzQjZFNDAzQTkzNTc4QjA0QjY1RkQyQkY2MkFCQTYzRkY0Cis6MTA3ODYwMDBFMjMwQTNGRkY0NzEwRUY3RUVGQUFBNUZBNTQ3N0Q4QjE1Cis6MTA3ODcwMDAwNDcwRUQ1MURGRDI1QkZEOThFOEY1NkRCRENEMjczNjg0Cis6MTA3ODgwMDBGQTdDRTI3QkU5REYxQkJEN0VFRDFCMUZCRjE3NTBFMERBCis6MTA3ODkwMDAyMzkzMUIxMjMxQThGN0EwMDdBNDgzQkQxNTc3MjRBNTU1Cis6MTA3OEEwMDA4NDUxMDUzQjI3ODhDMDVCMENEMDFGQTU4Nzk4ODE5QTFGCis6MTA3OEIwMDBFRkYwN0ZCOTFBRkNGNThGODI3RjEyNDBCQTJCRTFGMzBCCis6MTA3OEMwMDBBMTc5NkIzQTlEREY1RDdDQkFFM0Q2QjM3M0NDN0JFNkRFCis6MTA3OEQwMDAzMTNGRDI1RDBGQjNGQjQyNDc3RkNBRUVFRERGRDNDODI1Cis6MTA3OEUwMDBFQ0VEN0JFNkIzNzMzMzUyQ0VFRTAxMzlFODdGMzBERTQ4Cis6MTA3OEYwMDBCREQwMDlDNUY3QkQzRUMxMUZDODg2Nzc3MDIyRjRENzM5Cis6MTA3OTAwMDBFRUY3NzYxRTkwQTA3RTQ5ODQzRjQ2QTUyN0Y1REVEMjhECis6MTA3OTEwMDAyQ0FFNUY2NzczRkE5QzQzNDIzNkUwRkJDODdCRjRDRDI0Cis6MTA3OTIwMDA2OTJDMkU4RDlBNjMyRTU4REZERDdDN0RFQTNFRTA1RDZBCis6MTA3OTMwMDA0RTcyRTA1RDAwRDExMEUzODRGMzExOTFERjVCMjU3Njk4Cis6MTA3OTQwMDAyM0JCQjc3QTVCODI0RUZFOUNDQjUxRTI2MEJGMjM2RkI0Cis6MTA3OTUwMDBGMkVGRkMzREEyQjkzNzJBQTlEQTdCNUVEMjg1NTg3Q0NBCis6MTA3OTYwMDA3RkE0NDE3NkE2ODE1Qzk0MkZGQzg4Mjg5NDJGOEMxN0U1Cis6MTA3OTcwMDAwNjEwNDU3MzBGOERFQTc3QzhFQ0IyODNBMDFGNDc3MkRCCis6MTA3OTgwMDAxNDkzMzJEMDBCRTMzOTlEMjVEREQ0QUQ4N0JENEZFMTkzCis6MTA3OTkwMDAzMjc3Qjk4MkY3NjBFRjRDNjdGQkNCRDI4Q0UyMzk0MDhCCis6MTA3OUEwMDAxN0EyN0RBNEQzNkRFRDg5NTdFRjc2QjZCRTA2NTg1RjVBCis6MTA3OUIwMDA3NkNGNzkzNzE4OUQ0RUQ0NDM2RkEyMUEwNEZBN0I5Qzc4Cis6MTA3OUMwMDA2Njk4OEY2ODUyM0U1NjgwM0Y3RjJEMTNCMEZGN0JDMjcyCis6MTA3OUQwMDA4MUUxRjM1QzUyODIxRkUyNUY2NkRCOTcxRTAxQkE1REI0Cis6MTA3OUUwMDA1NkVGQzA3M0I0MjVGNTM5OTgyRUFENEY0MzNENzQ3MUYxCis6MTA3OUYwMDBCRDEzNTMxNTJFNjZBN0NGMjU1MjM4OUIwN0IyRkVDQzc4Cis6MTA3QTAwMDAwRTM3RDMzM0U4M0UwNEYxMTc5MkEzMkUwMDc5NzM2NjQ0Cis6MTA3QTEwMDAxRDAxRkREN0QyMEQxRjFGQzJDN0Q4OUQ3NzYzREUwNDlECis6MTA3QTIwMDA3OTlBQ0E4RDEzMTFCRUI0M0QyOTAzM0Y2QTg2N0IxOTJBCis6MTA3QTMwMDBDMEM3QTI1QzQ5MTQwRDVEOThEMjg2RTlGMjNERTBBNjZDCis6MTA3QTQwMDBEMkM3MTYwNkJGMjcwNTQ2MUY5MUYwN0I1MjZFNTNFMDQyCis6MTA3QTUwMDBGQ0Y5QzkxQkJCREZCNTQxRjg1MTc1OUZDMUVGNTdFQzZECis6MTA3QTYwMDA3Q0FFNTdGODM5MTI1MDlGOUQ1REI4NzgzQUM0NTUzRkE3Cis6MTA3QTcwMDBDMUNGMjExRkFCMUY4OUYwN0ExQ0UyQkEwNjgzN0RFMERCCis6MTA3QTgwMDBDMjU0MDRGODUxM0EzMkU1N0E4OTQ4REI5QjE0MzY2N0QwCis6MTA3QTkwMDA5M0I1RDg2NTI4NjBCNDBCRjAxM0FEMEM5RUE2QjQzQTJDCis6MTA3QUEwMDAzQzhGMzM1QjE5QkM0NEFCMTdFMTIyNUIxOUJDNDQyQjAwCis6MTA3QUIwMDBBMzM3MjNDRjRCMDBCRkUxRDgxRUJGNTNGODM1QTc4RkE0Cis6MTA3QUMwMDAwMDNDOENENkMxQ0I5ODM0RjZGMkUwQjc5MkMyOEZDRTkwCis6MTA3QUQwMDAyMzg5RjM1NzI0MUM5MkUwOUU0MjZFOThBRjdBRDNFQjMxCis6MTA3QUUwMDA5RUEzRUI4NzdERkMwNTBBMUY0ODkzN0JCMTFGOTMzMzUwCis6MTA3QUYwMDA5ODFDNEQzMkQ0RUQ5NzAxMUUwOTg0RUYyRjVFOTI1OUU4Cis6MTA3QjAwMDA0ODU4QTgyMkZDQTU3OTg5MDI3OTgxQ0Q4M0FDRDdFM0I2Cis6MTA3QjEwMDA1NTc0NDgxMUVGQkUyOTJGMDAxREFDNzg0NzM2QzAzOTg3Cis6MTA3QjIwMDBBOTM4RkY0N0JBRkJBNEUyNTQ1N0JDODJGMDc0MEJCMEVCCis6MTA3QjMwMDAzRjNGNTFBRjIwRkU5NjAzMUUwN0MzRkVDOEVDQjE0NzdFCis6MTA3QjQwMDAzOTNFMUYwMzNFNDFGQzMyRkU3ODkyRjNDQkQzOUM0RjZCCis6MTA3QjUwMDAxQTlDRUNGRUM0QjIwOTJDMkUyQjI5REZDMERGNDMwQjhDCis6MTA3QjYwMDAxMDZEREM1M0JDQjM4OTE4RTlCQzUwQzc1NjMwMERBMDZBCis6MTA3QjcwMDA5RUYxODlDOTdGMDU2RDE3OUI0QjVDNDAyN0YxOUYzQ0E3Cis6MTA3QjgwMDBFOEM3QjU5MkUyNzREMDhCRTJCOUZFNEJBRTU1RTJBN0RFCis6MTA3QjkwMDBFMTQ1REE4MEM0RUMxMDJBMEFEMUFFNjkzMzQ0N0IwNzkwCis6MTA3QkEwMDBBQkMxNzlDMDBDN0VEM0RFRTZCMzdGQ0EwRUE0Q0JEMkM0Cis6MTA3QkIwMDBBQjMxM0M5ODI0QkE4QkE3Q0RBMTc5NkI2MzJDRkEwNzIzCis6MTA3QkMwMDA2MzlERUVDMjQ3ODFDRjFCNkQ0OEE3NTYzQUZGMzIwRDI5Cis6MTA3QkQwMDBERTYzN0JDMUVCOEIxOTM3MUEzMjI4MUQ4QUEwQjQ1MUEyCis6MTA3QkUwMDBGQzNFRDMzOEMwMDI3MDdFNEUyRTRFMDdGOUZBMUNERkUxCis6MTA3QkYwMDA2NzI5MEUxNEVEMzk1NDA3OTc5M0Y2ODIyQjc1RjZFQzJFCis6MTA3QzAwMDAwQUQ5ODVFRDFDRDdFQUU1QzAwQTJFNzcxM0M2RTlFOTQzCis6MTA3QzEwMDA1RDk1QkIxRjc1Q0I1RDc3MzJDQzI3RTVDMjM4RTRDN0Q1Cis6MTA3QzIwMDBBNDVCQTJDQkRGMDZEOUU4ODU3NzA1MUE4NjMyN0VGN0ZBCis6MTA3QzMwMDA5NjE4RDk3RDk4OUVGMjAwRkREQUU3REM4M0Q2ODEzQzY4Cis6MTA3QzQwMDA1NUU5NkIyMTYxRjJDNzRCNjI5Q0I4MUZGMTc3NzQ1NDAwCis6MTA3QzUwMDBGRDc4MDlCQzM3QzhFNTJDQTRFMjQwMjNEMjREQ0EzRENCCis6MTA3QzYwMDAwNjhDQ0Y1QkM2REZDQjdBOEFEMjE3QTQzRTRBNUY5MEUwCis6MTA3QzcwMDA1RTk3QzFDRTMzMTY5QTg3RTFCQjZEMEQ1NjAzQ0EwQkQyCis6MTA3QzgwMDBFOTUzOTNERjBBRkFFQUZFNTEwRUYwMjM0OEIyQjNDRDZFCis6MTA3QzkwMDAwNUZFNDA5QkQ0QjQ4RTQwQkQwMjMzQkMyNzIxQzQxN0RGCis6MTA3Q0EwMDAzODgwMEVCRUIxQ0RFRTc3QjEzODNDOEE0RTAxRThDOEJGCis6MTA3Q0IwMDA5MTU0NEM4RUU1RTJFOTAxREU3QjkxMURCNzEwRjAyQjZCCis6MTA3Q0MwMDBCRTkwNTQ2NzAxQjhFNTY2MzBCQkFCQjFBNDEwRTE0ODgzCis6MTA3Q0QwMDBFMTNCMzYyMzM5REM0RkVBRDQ5QkJBREZEQjgyNkU1RkFGCis6MTA3Q0UwMDBFOEU1RkVDQ0U0MENBRTQ3Njc3QUM5NDAwREJGMzcwQTIxCis6MTA3Q0YwMDA1QzBGNTNCQzI0NDdDM0Y3MEJBRjE4NEZFMDVDQTkyN0I4Cis6MTA3RDAwMDBCRkY3MjJDRjM2MzA3OUI2NDg4ODJFQ0Y1NEZENTM5NTMxCis6MTA3RDEwMDA2NzcyODQ5QzUwRDNDNUZEMjZFOEVFNzcxOTkzOUM0MDhBCis6MTA3RDIwMDBCQjkwN0EwRDE0NDU5MkY3RUEyN0VGOEU0NzM4Q0MwMkM0Cis6MTA3RDMwMDAzODkwQjQ5QkJBRUREQTFGRjYwN0JEQjIzMDJBQkQ0NUM0Cis6MTA3RDQwMDBDQUIxRDlEREZCQkEyQjA1RjA3NDRBNTY1MkE3MDEzREUyCis6MTA3RDUwMDBCREQzREJCRUVFMkE0NTNBRjRGNTUxNjA1RkRBRkZDQ0M1Cis6MTA3RDYwMDA4RkQwQUY3M0UyMTk5QjAyNzJBOEVDQzJFM0I4M0Y5NEM0Cis6MTA3RDcwMDA1RTE4ODU2OTc5RTM4REI4OUYwQkNGNEUyQTA0N0E2ODI3Cis6MTA3RDgwMDA1Rjc1NDNERUE3RTBFN0YxRDk3MERGNkU2RjJDMUE4NEQwCis6MTA3RDkwMDBFNzkxQkU1ODA1RTIzQkRBMUI2OTc5NDFCODFDRTJDNUEwCis6MTA3REEwMDA0NTREQkMwMDAxRUZCQkU2RkUzNzI5NTA1MDJGNTVERjkzCis6MTA3REIwMDAzREEzNzY5RDdEMzRGODg1NTY4Qjc4MkZBQ0Y0NTk5Qjg2Cis6MTA3REMwMDAwQkY0Q0ZERUU4QUY3NDU1NzQ3RjAwREU2MTRBQzcwMTYzCis6MTA3REQwMDA3MzQwOEZERTZGMUYxRDBBRDA3RTY3QUY2M0U3MDgwRDBCCis6MTA3REUwMDA0NkQ3QzkwMEU4NERDRjU4RjAxQ0IyMjEyMUZBQkIyMDdDCis6MTA3REYwMDA3MzMyNkU1ODA2NzI2MDRFODZFQjM5QzQ5Mzk1QkQ1MzRDCis6MTA3RTAwMDBEQTNCM0ZCMEYxNEZDMjIxMzM5QzYzQkRDOERGNDc5MURECis6MTA3RTEwMDBEQ0Y2MjlCQTczMzY3NjhFNzU5MkZCNTk4OEI5OTdGMkRCCis6MTA3RTIwMDAxODVFQUVGNDUyNkU2N0YxMjJDNDExQkQ1Q0I1MzM2MkM4Cis6MTA3RTMwMDBDMzc2NDYxM0FDQTNBNkYxQ0NFMjRGMTE1RURDQ0VFMEQ0Cis6MTA3RTQwMDBGMzNFMjVCMzc5OUY3QUM1RTQ1RjE4ODVGRTRGRjFGOEJDCis6MTA3RTUwMDA5NDBBODFDMTU3RTU4MzUzRERGQTkxMUJERkMzODlBNERFCis6MTA3RTYwMDA1MzYxREQ5MDE3NDZEMTdFQkYzQTI0RTNCRTUxNERFOTAwCis6MTA3RTcwMDAwQkU5NkFERDI4OEM4RjE3OUUxOUY1MzRDNDBEOUYzRkRFCis6MTA3RTgwMDAyQzYyNzlFNTA1MEI5Njc3M0NFMjdDMDFFMjlFNDJFRjlECis6MTA3RTkwMDBDQTA0RTREM0Y5NDMzN0M0MzEzRjkxREU4RjdENkYxRkFECis6MTA3RUEwMDAyNjE3OEU3MUY5NTA3QUUxMDlBNERGNkUzQUYxQ0QzMUNGCis6MTA3RUIwMDAwMkZGOTU1RTc4OEFEMUY3NDYwMURGQUQyNERFRUE3N0NFCis6MTA3RUMwMDBDNzBDRTRGNDM5MUFEQTU3NEM1QTA4RjBCRUQ2ODdFN0UzCis6MTA3RUQwMDAyNDY1MUI0QzRFRDAwNzIyRjE3QzJDNDNEMUY5M0RDQUJFCis6MTA3RUUwMDA4MkNCQjA1RjQyRjVBRjI0Q0Q3OUZBMjkxRTY3NUM3NjZDCis6MTA3RUYwMDA4MUJENTc0ODFDNUU5MjA2RkNDMEU1NTM5ODhFRjVFRjk1Cis6MTA3RjAwMDBEMDc2NThBMkZCRTlDRjcxRkRBN0Y0QzIzNTNBM0IyM0U2Cis6MTA3RjEwMDBCQ0JFRUJGMTdCMjlERkZGQ0I4MkEzMzAxRjVFQ0YwQjEyCis6MTA3RjIwMDBBM0EyQUQyN0JDOEU2QkIxN0U0NzdDRjRGMUQzMzk5QzA0Cis6MTA3RjMwMDA0RkQ2OTcxMzE3OTU2RkU1NDY1NkFGRDRGNzgwMTFFNEU3Cis6MTA3RjQwMDA0RUU5QUFGODA0NDFCM0FFQjJDNjJBNUQ5QzQ3RDlBQTRECis6MTA3RjUwMDAxMkUzNEM0REJGNjEzQzJDN0U3NzhDMTRDNjQzRkE0QjI4Cis6MTA3RjYwMDAwQjI2MkRCNDgyNUU1MDJDRjcwMTdFNUE1NzUxRjgxMzIwCis6MTA3RjcwMDAwNUZBNjNGMkU5MEJEOTk3MDVGMkJBQkRGMTdFN0JCNDNECis6MTA3RjgwMDA3QjEzRTk3RDIyRjBEM0M4RjE0M0Y1RUEwMjBEN0U1NDVDCis6MTA3RjkwMDBCQzQ0QjYzRkI5QjZBQ0YwMjdFMDhGNUVDOTVFMjFFOUJDCis6MTA3RkEwMDA1REZFNDRFMDJEM0IzQURDODY3NUMzMkQwN0UzOEQyRTQ0Cis6MTA3RkIwMDAwREI3QUI3NDcxNDUzREUwQzZGMUFCQzI0NUZENEVGNTYyCis6MTA3RkMwMDBBOEFCRkE4QzgwRjEwOEJCQkZEM0M4RjA3RjI5Nzg4NUI1Cis6MTA3RkQwMDBDN0U1RjgxRjEzN0QxRDUzQkJENzMxOUY3ODI5QTNDRTZBCis6MTA3RkUwMDBCRUU0M0ExRTIyNUVGMzQ1RDZBMUUyOUZCQ0EyQzNGRkM3Cis6MTA3RkYwMDBENDk3RDYyMjFGQUFGODlFN0Q2MDI1RDJFRjZDQ0E4RjM3Cis6MTA4MDAwMDA3MERFREZFRTdCQzAxRTJEQkU2ODZBNkY3ODFGRTgyNTJDCis6MTA4MDEwMDBCOTg1RkZGN0YwRkU4NUVDQ0Q4MkI4MzJFRjcyMEJEQTRFCis6MTA4MDIwMDAyM0E3RDYzRDkxQTU4NUYzOUM4QzMxRjcwMjVFQzhGQTUzCis6MTA4MDMwMDBFNENCREEzRkJDNjM5RDg3QzBCRUY0M0UyM0EzM0Y2RDEzCis6MTA4MDQwMDA2Qjg2QkIwQ0RBOTc3MzNCN0M1MUZDRjg0MUQxRjQ4MzBGCis6MTA4MDUwMDA0N0VCMEYwRDAxM0Y1RDQzN0QxQkE2MzJENzJGMDlFODhCCis6MTA4MDYwMDA5N0Q5QTgyRkI5QTJCREVGQjVBNDBGOTMyQjhGRDZCNzgwCis6MTA4MDcwMDAzMUJGQTdEOTRCMUNEQUZCQzQ4NEU5NEZGRjQ1OThCRjM5Cis6MTA4MDgwMDA0NjZENjc5NEREMEVGMDlGMUEwNTUyOEM3QTlGRTQ1RTcwCis6MTA4MDkwMDA5MjVEMDA3RThGQTQ3Q0FGMDY3RThCRkJCMEZCNDhDQjRECis6MTA4MEEwMDBEMjBFMzhFMDNFQjE4OUY2MEZGRTFDNzNBNjc0NEU3RkU3Cis6MTA4MEIwMDBDRUM5RjJGOUMyQTcyMkM0MzdDQjQ5NEQwNEZEQTFCOUZDCis6MTA4MEMwMDBGNEJCMDZERUM2QTQzNjlEN0YzQTEyMEU5MkQ5OEVFNzI3Cis6MTA4MEQwMDA0RDEyNjFGQTlDQkE3RUZBMDVGN0E1QzdGOEJFQjQ4MkM0Cis6MTA4MEUwMDBGQjM1OUZBRjZGNDJCRkZGQzI1ODNCRUU3RjhCRkIxOTQyCis6MTA4MEYwMDA5ODNENjU5NkYwQkQxQTUzM0NBQjZGOEM2M0YzQjY4MDI4Cis6MTA4MTAwMDBERjVCODQ3RDM1ODA3OTFCQkNFODIzRTJEMzY4MDJFNDIxCis6MTA4MTEwMDBFMzg5MjI0MDNFOTEwNDE2RTMzQjI5NjM4MjNGODZFRkM4Cis6MTA4MTIwMDBDRTM0QjcxRkYwRjg0RDdBREIxMTAxRkNEOEM1RUVDMTkzCis6MTA4MTMwMDBCMEZGMzY4QURFN0M4NUQ2RkY5OTE4Q0E4NzdBNTlCNDkzCis6MTA4MTQwMDBFODkzMDQ5NkY2ODM3ODY4QjdFNjVDOEJCRDEzQUE2ODVCCis6MTA4MTUwMDBGRDgyOTFGOTdFRjNBNTg4RjM5RTNGMEZENjk2MkY0RkFGCis6MTA4MTYwMDA3M0JEMEVGMzY4QjBCMDc3ODY5MjhFMEI3ODlFRDM2MEE1Cis6MTA4MTcwMDA2MUVGMEQzNUQ4RUU4ODgzN0RGQzU3N0Q5OERFOEU3NEQ3Cis6MTA4MTgwMDAwMDc0NzQ4OEU5MzNFNzI0MjUyRTgxRjk0OTk1Mzc3NTAxCis6MTA4MTkwMDA3RTdFQjNGMkE2NjYxQzg5REI3QkVCMjk1RDRBOUE3MzZGCis6MTA4MUEwMDA5NTgxOTJDQjAwNzQ3Mzg1OEY3RUQ3Q0UzMzhBM0YyRTE0Cis6MTA4MUIwMDBDMThBQ0ZGMjQ2M0RDRjUxRTcwNzcxRkIwMDQ3RjFDMkJDCis6MTA4MUMwMDA3OEI0RDcyMkU5NjE0RkI3OUZEOTJCMDIzRUE3QTlFRjE4Cis6MTA4MUQwMDAxNzRCOEI1ODNFOUVBODdGNjg3RjdEREFBRDhGMkU2MjRECis6MTA4MUUwMDA3OTdFQ0VFOTk5QzlDRTMxMUI0QUUyMzAzRTRFOURDNzE5Cis6MTA4MUYwMDBCNEQ2QzdEQTQwNEY5REQ2OUEzRTBCQ0VCN0E2NTkwN0U0Cis6MTA4MjAwMDA3RDBFRTkxRTM5NzQyMDE2RjRDMDA3MDRCQzU3NzJEN0RFCis6MTA4MjEwMDA2RkRGOTQ2MzY5QkFGREMzNzU3ODlGRjk3MzJFNEZBNzFBCis6MTA4MjIwMDA5MzEwQkUwQkVGMjYwRTdFQ0VFRUM3RUYzMzg5OTNFNzk5Cis6MTA4MjMwMDA5QjY0QjBFQkVGMDlGODZGOUY0NDczRjdCRUU5OUYwNEFFCis6MTA4MjQwMDA2QURCRjQ0M0ExQjc0MDBDQjg5QjFDRTNGMTBDNDE2RDExCis6MTA4MjUwMDBEN0UyN0M5QkU1NTlCQkVFRjU0QjY2NUM0Rjc4QkQ2NjdCCis6MTA4MjYwMDA1Q0JGQkEzRTNBNTM4NDdGMzc3Q0Y4N0I0RDJBM0NDNENFCis6MTA4MjcwMDA5OTc0REQ5NDVFQTZDNURENzExM0I5ODg1RTNFQ0Q5QTEyCis6MTA4MjgwMDBGMzM5M0IzNDYxRjM4OTg0Q0Y3OTI4QTJGQTYzNDcxRjFECis6MTA4MjkwMDAxN0M5QTRGOEZCN0QxRjk3MDA2OUI1Mzk5NDI1RjU0N0U4Cis6MTA4MkEwMDAzRTkxMjE1RjJCQkFGQjQxRThGMzk3N0RERDgzOTMwMTdCCis6MTA4MkIwMDAwRTZEODk5NzI1M0Y4RjU4MThGRjFGMDE3QTg2MzhBRkJBCis6MTA4MkMwMDAwQjQ5QjgyRUY1MURGQTgzMEZCNkRCNDBFRjVDQkNGRDAxCis6MTA4MkQwMDA2MzdDNjdCOTQ2MEMzRTc5MjdGQTQzNDVCNDlCQ0UzNTlCCis6MTA4MkUwMDAwRkJFRThGREIzMjNFMEE3QTJGQjVGREY0Q0Y1OUUyNUEwCis6MTA4MkYwMDA1QkU3MEM4OUYxQzk4Q0U2NTg4Q0M3OUYzMTVGRDRCRDEwCis6MTA4MzAwMDAyMzNENjMzRThCRTcyMzUyNUJERTZEM0E3RDdENTFBRkFCCis6MTA4MzEwMDBGRDgwQkYyMEIyOUY1OUYzOEJDOEYxRTE3MDRFRUIxODdFCis6MTA4MzIwMDA4M0ZFODMzNThDQkU2NjhENzM4OTEwRUYzQzdBODk4MDFECis6MTA4MzMwMDBFN0FEQTM0RTI4MkQ0MTlBOUZFNThGNzcwMjdCQ0U3QTM5Cis6MTA4MzQwMDBGMDNGMDdDMDNCMDdCNTZEQ0MxRjk4MkFERTk3RkYwOEFBCis6MTA4MzUwMDBGODU5MEVCMDdEMUNGMkY3MDE5RDU4NUQ4QTU1NzM1RTg5Cis6MTA4MzYwMDBEMDIxRDdFNUMzN0I3RkRFN0JBRDJFRTBGRjkyREI1Q0M3Cis6MTA4MzcwMDA5RkUyN0JCRURDNUZBMUVFQUIzQjFCNEIzMDRFQjZFNDE1Cis6MTA4MzgwMDAxRTY1MjRFMEJGQTRDOUUyQzJENDRDQTQxODJBQzc0QTdGCis6MTA4MzkwMDAyNDYyODYzNEQ1NDgyNDBCQTQzMUM0MEM2OUUxNDJGNjJBCis6MTA4M0EwMDA2RTc3NjlFMzE0RDQwRkVDMjM4QjhERjAxRTZGNDlFQkNECis6MTA4M0IwMDBDRkJGODZGNjY1NTI2MEJGOTAxNzg2NEY0OUVCM0JERjEzCis6MTA4M0MwMDAwMTVFRTdCODhBMzE5RUYxQUE4RDQ2OUQxRDM4QjQ0OUY5Cis6MTA4M0QwMDA5RkJGQkE0NTlGQ0YwRkU4RjNDMzBGRTlGMzFCMzIwOUU0Cis6MTA4M0UwMDBEMkQxNENGM0FEQjkwMEFGMDM3QjRENzQyRjgyRjgzRjZGCis6MTA4M0YwMDAxM0M2QkIxQzEzMTg3RUJDOUIyQzI4MEY4QkFBNUEwQkQwCis6MTA4NDAwMDBDMTBFM0VGMzlBQ0QwMDc2RjQ5RUJGRkMwMkNGQzM0MzZCCis6MTA4NDEwMDA1QjYyMDlDNDU5RURGRjVEMEM4OTgxNzhDNUQ3MkRFQkVFCis6MTA4NDIwMDBBMEJDOEFFMjBFRkM5NzU1QUY1QkQ2ODIxREJFRTM0QTI0Cis6MTA4NDMwMDBENThFRjdFN0MxN0E3NkZDOTVDNUQ3ODQzNjk5RkM3MDVFCis6MTA4NDQwMDAzRTdFNjZEN0NGNUY4M0YzQjQzMzlCRkFBMDdFNzU0QzM0Cis6MTA4NDUwMDBGMDFBNjI2MEZDMkY5OEZGMzNDOERGOEIwQkYyRjdFMjUzCis6MTA4NDYwMDBBQTM2RUFFREUyQjk5OTRDQ0UwNDE3NUUxMzE3NEQ2RkE4Cis6MTA4NDcwMDA1MkQzOUNCNEM0REM3MTc0NkU1RDhGOUI2NjgwMUY2OEEwCis6MTA4NDgwMDA3MEEzMUUyRTZBQkQyMTdFRkRGNzg3NzhGRkEzODkzMTc4Cis6MTA4NDkwMDA0Q0E3RDkxMDI3RTA2RkIwQzNGRUZCNzJGNDc3OTIxNzk4Cis6MTA4NEEwMDA3MkZFNzlGNUQ1RUU3NjIyN0YyNzhFMjg5QTdCNTM2MTZFCis6MTA4NEIwMDBGOTRERTZGNTgxRjgwRDgwN0ZGRkYwRjcyQUEyOTk4RjNDCis6MTA4NEMwMDA0NjNGOTlDMEZCRkZDQUNDRTI5OTkzRjhGQkZEQTdFQkFFCis6MTA4NEQwMDAwRkUxQkVERkFERjdENUJCNUNFMzM0RjlEMkM2RkQyOUIxCis6MTA4NEUwMDAyNTYwM0ZBRERBOUYzMjUzMDNBRkVBNEQwNzUzRUVDNjI2Cis6MTA4NEYwMDBCODI3MDkzQ0I4QTQ3QURBMkI0RjgxQkZBMjdBOTNEODY3Cis6MTA4NTAwMDAwNEYzODQ3MjgwNUI0N0QzNUI3NkE4NDdGNUUxNjFFMEIyCis6MTA4NTEwMDAwNzA5RUJBMzM3QjhDNjY5RjhGODZGQTU1Qjk1REZBQTIyCis6MTA4NTIwMDBCOUZFQjI3MzY0REI3ODg4NTNBRjZBMTQ5QzUwQURBQTZECis6MTA4NTMwMDBFOUY2NUIyNzAxQkM1N0IxN0JBRTg1MTIyOTE2Mjk3RjZFCis6MTA4NTQwMDA1NTZGQkRGRDQ3NDMyMTZFNjZGNTA4MjdDQzg3NzY3MUQwCis6MTA4NTUwMDAxQjdDQUZEQTdDMTZFRjMzMkM4REY4REQwMzM1REQ5RDA3Cis6MTA4NTYwMDBDOUY0NDI1QTNGNjBBMEY1OTdERTYxMkQwN0Y5NDVGQjNCCis6MTA4NTcwMDA3RDEzRjIwNzcyRDZFMUZCMkFGNjUzRUNGQzgxN0VGRkY1Cis6MTA4NTgwMDBDNDQwRjU5NjUzNjNCREVGREQ0RDlCOUUyMTREMUY0REJECis6MTA4NTkwMDAwMkJGNTJBMzlFMUUyOTdEMEJBMDk3ODUzNjA4Q0U3NTdCCis6MTA4NUEwMDBGODc1NjFFMTJEQTA3MkJCMTY2MEJDMkYyRDlGMTFFREY3Cis6MTA4NUIwMDBCRTc1ODU1RkRGNEYyNERFM0ZFMkYzQTU3RjM5NUFGQUFGCis6MTA4NUMwMDA4OUFDOTczOEQxOEJGMUU0RDVGM0E5M0NENEY4MDlBQTRBCis6MTA4NUQwMDA0RkY4RjA3REM5Qzg3MTg4OTZBRTk5M0U0MTE0OTA4N0Q2Cis6MTA4NUUwMDA1QjJDRUFGQjQ3ODJCOTkwQzdFOTBFNjA3OTdDNTcxMTkyCis6MTA4NUYwMDBFODk0MTI0QUQ1OTU2NDlDMDJGMEJFODU0QzgwNzQzNDkwCis6MTA4NjAwMDBDODE1Nzg0RjdGNjQ1MzFFRDRERjJEMDQ1Rjc5MDlGQkIyCis6MTA4NjEwMDBCM0ExMUNFRjcwMDRGMDlEQzkwQzdFQ0ZCNDQzNjFGOTg3Cis6MTA4NjIwMDAyRUVFRTc1NENCMkI1QjJEMTg2NzczRTY0QjIzQ0FEOThDCis6MTA4NjMwMDAwNTREMDczMThFQkVFMzM1OEJDMTQwRTVDMTk5QUQ4OTRCCis6MTA4NjQwMDA2MzIxMUVCM0EzODlCRDUzN0NCQTI5NzFBQ0YxMjJGQjBGCis6MTA4NjUwMDA3NkE0REM1MEY3RDNBM0YwNEZCQUVGRkUyOUQzRjU0RDQzCis6MTA4NjYwMDAyNkVDNTM4QjU4QkM2QTZBNjI1RDdFQjRERkJGNTBEQjc4Cis6MTA4NjcwMDAyNTE5RUJGMkMxOEUwOURENkI3NUFFNDMzODc5QjMyNTUwCis6MTA4NjgwMDBGNDgzQTczOTIxNEVBODQ0NjBGRDFBRkIxNThCN0Q2OTQwCis6MTA4NjkwMDA3RDFCQUQwQkZFRTg4NDQzMjJGRTVFQzM3MUQxRjk2M0ZFCis6MTA4NkEwMDBDNzAwN0M0RjFFRjVBMEQ5MDU2RTdDOUY5MjJDNjI3MThECis6MTA4NkIwMDA5NUIzMjQxMjkwMjhCRENEODJGRDI4MEZGMzI4OTc2NzJCCis6MTA4NkMwMDBBRDEyMzBBRTZDRjYzMkZEN0FFMDlENUNFRDNFNUE0MTYzCis6MTA4NkQwMDBGQ0VDN0QwQkFEMUZCMTNGQzRCQkQwRkQwNkRFQjUzNDU1Cis6MTA4NkUwMDBCM0Y4OEJDQUY1RkE3NjU1MjQ4MEYzQTlERUZDQkQyOUQwCis6MTA4NkYwMDAxQUJDQkUyNkVBQkE1Qzk5QjAyRUUxMTYzM0NFRUJGRTY4Cis6MTA4NzAwMDBFN0UyRDg3OThGOTFCODYwM0YwRDNENjc0M0Y5NUU0NTQ4Cis6MTA4NzEwMDBEQ0Q4REY1RDdDNUZGNzNDNThFMjlBMEQ3Mjc4RkUyQzY2Cis6MTA4NzIwMDBEN0VDNDRCODZGQ0JGNjNGMzRGOTkwQkYwNURDNzdBQTlECis6MTA4NzMwMDBDNjkxNDA1RkY2RUUwNjgxN0RCNUFBNTUwODBDODVCQzUyCis6MTA4NzQwMDA5OTc4RURDM0Q4Nzc3ODdGMDBENkFEQkQ1RjUzNEU3QzY2Cis6MTA4NzUwMDAzODVFRjkyQUZENzdGMjIxQzM2QjM1QkZDNzQ4RDY2QjY3Cis6MTA4NzYwMDBDQUZCODM3RUM2RTA1MUJERDlBNEYzRUI4Q0RFMkM3ODI2Cis6MTA4NzcwMDA2RDc4REZENURGOTA0MkU3NTc3QjhBQ0EwQTAyNzFBQTdCCis6MTA4NzgwMDBERjlCNzRGRDQzM0NDRjA4RENGNzg5ODVFMkVEQjk2RUQxCis6MTA4NzkwMDBCOUVFMUYxMjJEQ0VGRjA4ODdFMzczQjc5N0E2MDNCRjZDCis6MTA4N0EwMDAzRTBEN0E2QjA2MDdGNDQ4OTQ1QkRDN0Y0MDAyNjYzQTI0Cis6MTA4N0IwMDA0RUNDRjBFRTNDOTYxNzJFNjRGOUM5QUI1Rjk5REM3ODhECis6MTA4N0MwMDAyREI1RjM2NDM3OUUwQkNEMTI4QkRGODZGQjYwMkZGNzQwCis6MTA4N0QwMDA3M0RGRDI5NzhFMzNDQkUwQ0E5MjkwNkY1RDgzRDAxRjQ4Cis6MTA4N0UwMDAzQTlGQzFFMTg1NjE3NTQzRUFBMkU4ODEyQTlFOUYxN0ZECis6MTA4N0YwMDA5QTAyNzAyRUVCRERDNUY0MkY1QjQxNDhENkVFQUZENTYzCis6MTA4ODAwMDA3RDk5M0M4QTNCMTBDNDdCMTNBMUVEMDJERUIzNUMyOTQ5Cis6MTA4ODEwMDAxQ0M1RkI4ODJCNkY1NDA4RDhGNzY5MTQ0RjIwOEY1NzVECis6MTA4ODIwMDAwQTY0OTE0MEUxNTJEMDNDRTVCRUI3MDBDRjA1MzE0RTFECis6MTA4ODMwMDBGOEI5OEI5QUU2MzE2MjhEMTVEN0NGRjRCNEQ4QkFCNUIyCis6MTA4ODQwMDA3MDlFOTMzQTIzNjcxOEQwMzk1REY3OEM1QkU4RjdGQjhECis6MTA4ODUwMDBGQTJBMzg1RUJBOTVFMTNENkRBMTM3MUI3RTA3MkFFRUY0Cis6MTA4ODYwMDA0MEYxN0Q2RjAxMUYwRThEQzE3QkIyQTkxNDU2QjYwNDc1Cis6MTA4ODcwMDA0Qzk3ODBGRTk1NDYxNjA4NTBFRjM5M0JFQjNGRDkyMEM4Cis6MTA4ODgwMDBDRTk4MDJGOTYxMkM5RkYwQjBFMDVBODdDNEI3MUNGQjY4Cis6MTA4ODkwMDA0RjM1OTEwOTMwNEZGODBFN0FBNDE5RkMwQTU4RUU2NzRCCis6MTA4OEEwMDBGODJEQUFDQjg3RkU1MjA3QjAzNEM5MThDODg0N0UwRUIzCis6MTA4OEIwMDA3N0UzREI4RDc2QzUzQ0JFOEZDRERCM0EyNjE1RUNCQzZECis6MTA4OEMwMDBDMzFERDRFMEE2NzJFQjcwOUFBQTBGMDVBQ0Y4RkI1MDVBCis6MTA4OEQwMDAwMzczNTg3RDZFMTdDRUNCNjdGNzBEOTJCMkY0RjVCQURECis6MTA4OEUwMDA2NDU3REM3MDkwQTMxRjMwM0RGRUJDRDU4NUZFRTk2QjVDCis6MTA4OEYwMDA4Q0QxRkQ1OTJGRjU2NTdBOEJFNzgyNDBGQzlBN0RDMEJCCis6MTA4OTAwMDAzM0Y1MUJENDJCM0QxNzI0RERGNzhFN0FCMzJFQ0VCOTY5Cis6MTA4OTEwMDBCQUZDMDBERUJCQUYyMTZEMTg4NzVERDMxNEFCOEJEQkQ3Cis6MTA4OTIwMDBCRDI2MjZGQUI4MkE3RDdCMkU4OEM0MUI3NTVDQTNGRTYzCis6MTA4OTMwMDBGQjg1NDRFMjREOEM1NjJGNDVGRjlEQUU0Mzk3NkZGOTYyCis6MTA4OTQwMDBCNjdCMURGMDlEOEMwQ0RBQzExRTlDQzhGNURBMkVCRkRCCis6MTA4OTUwMDBDMTJCNUYxREM2NEJBNzIzQThEQjc3M0ExNTk2RUZFMjI0Cis6MTA4OTYwMDBFNzcxNkFCOURBN0ZFNzU0MjNCRjU3QzRERTU1MDZGOENBCis6MTA4OTcwMDA3ODA3MTNGMjYyRUI1OUY0NDc1N0I3RUUxRkNGN0VERjRCCis6MTA4OTgwMDA4QkQxODUxNjRFNUU4REZDNDg2OTY4MEIxODI4NkZGRkU5Cis6MTA4OTkwMDBBNkVGQTlBNzcyODc1MDEyM0JBMEYyRjFFOUE3NUM5NDU5Cis6MTA4OUEwMDA2RjUzNDQ4MzhFQUY2MzBCQkFGOTFDQzVDQjczMDY5MTJBCis6MTA4OUIwMDBDQjg1MzM0RjhEQkI1NjlCNjdGNUMzRUQzQjI2OEZBMzBECis6MTA4OUMwMDBCQTdENDEyRTZCRkY4N0JFNUZCRUI3NzA2MDU4MkVEMTU3Cis6MTA4OUQwMDA3NTY0MTVEQjM0Nzk3MzQ0REU0QUYzNDMzNTc5NDc0NEQzCis6MTA4OUUwMDA3OTUyNDQ3OTVBNDQzRTkzRDVFRkIwMDVCMjQ0MjcyMUQ5Cis6MTA4OUYwMDBFRDdEQ0Y0RTk2NDZDMTM5NzY2MDNBQkMyOEIwQUNFMUU5Cis6MTA4QTAwMDBBQkM5RTM2OEJFQTZBMDBERTM2NzZBNUIwNTI3MUVFQjUyCis6MTA4QTEwMDBBQkYxRjE0RUE2Njc1OTlENDFGQzNEQkJEODgyQjZCNzdDCis6MTA4QTIwMDA0MTBFNTRCNzA4MEU4MUQyQkJCNTY5MkJDNkQ1NTQ0MzRECis6MTA4QTMwMDAzQjQ1RDNBRTg5RDk5REQ1NEQ0N0IxNURBRkZERTcxODE0Cis6MTA4QTQwMDA5MDlGOTdFNjFDQzM3QUVBRjlEMTlEQTRGQkY3M0EyRUQyCis6MTA4QTUwMDA4MEJDQUM2OTZBNjdGQjcwQzRGOTUxNjdCQUVCMjBDQTg1Cis6MTA4QTYwMDBDMzg4RkJBRjFFRThENzFBQTY3QkI1RkVFRjg3QjZGRTFDCis6MTA4QTcwMDAxNkJBODk5RDc3NzY4MTQ0RUJGRkIxQTY3RDA0RTg0QjU5Cis6MTA4QTgwMDBGMEM2MjVDOEZERTcwNUZGMTBEODlGNUYyNEVFMjFCMDkyCis6MTA4QTkwMDAxRkRENUI3M0M1N0UwM0FENzc0NDBFQUU4NkE3MUEwNjU1Cis6MTA4QUEwMDA2NTU5NkU5NkE4OUMzRTYyMEJGNjE1QTgyQ0M5NTk5MzgxCis6MTA4QUIwMDA3ODMzQzBGMzQ4NzIxMDVGNjhGOEU5OUEyNDU2REUzN0JECis6MTA4QUMwMDBEODE3Q0U1RDczQjM3RUM4RjI1NzA0NTc0M0ZFQjYzNTUwCis6MTA4QUQwMDA1N0IyRkNEMDYwNUY5MUI2RUZFRkJERUE2NjgwRkYwNjRCCis6MTA4QUUwMDA0Nzc0QkVFRDlCQzVFNEI5M0FCRkIyN0M1NzVBMTZFODRECis6MTA4QUYwMDA5QkQ1NkNCRjgwRUI5NzY2MkExN0E3NTc5RURFQjI4MTg1Cis6MTA4QjAwMDBDMjYxRkE0RjYyNTE1RTZERThCOEY1QTY2MjVDQkZCNzBDCis6MTA4QjEwMDAxOEUyRENEODEzRUY3QzNGNDNCOTJDQTExRTkwMEU3QkVBCis6MTA4QjIwMDA1ODQyMTgxRkI2QUMzNjA1RTVGRDk1NzU1QjYxREY0RjAxCis6MTA4QjMwMDA5RDlFOEJGMkZFN0NBNkFCM0U2QjQ0MzhGRDc2MDA0QkNGCis6MTA4QjQwMDBFQkIzRDg3RDhGNTREMTgwRjEwNkE5MEZEOTUwMEY3QTlECis6MTA4QjUwMDA5QTlGMjc1MUJFNDFGQzVBMzkzRTg2NjUzMUY5MzcyQzIwCis6MTA4QjYwMDA4QkQ5NDkxOTdENkZBODg3RjVEQ0M1RjVEMzE1OEZGQjI3Cis6MTA4QjcwMDAzNzU5MjhGQzdGMDc0NDkyODRGRTZERDQ3N0VGNUU0QjEzCis6MTA4QjgwMDBFNTQ2MUNDNDUzQjhEMjQxMUVEQzBERkVERkRDNzA1RTJFCis6MTA4QjkwMDBENURGNTdFNEQzQkMzNTZDQTdBRDk4RTI0QUQ3QzYwMTAwCis6MTA4QkEwMDBBRDU4Q0JDQTU1NzlCMzIyOUJCNTU3Rjc5REQ0MDYwNjZECis6MTA4QkIwMDA5RkQ0QTc4N0FDODM3NUM0NEEwNEVGNUZDQzk5M0E2ODA5Cis6MTA4QkMwMDBERDAyRENCRjZGQzFGOTEyOTcyQjFERUNFRjEzMTVGRDExCis6MTA4QkQwMDAwREEwNTdBQUY4NzkyQ0RGMzUxMUQ3MjNCMjc4NzUxNTc3Cis6MTA4QkUwMDA0RkVBRjhGNTdDRERCMzQ0QkFGRkQzNzUzRUQ0Q0Y4REEwCis6MTA4QkYwMDA3MEE0RkE0MDFFMEIyRTYwRkE0MDNEMzg2MjkzQzNGMDE5Cis6MTA4QzAwMDAyNTUyNzAwNDdDRkY1RjA0QTdGQjYwRERGRjI4OUNBMjU3Cis6MTA4QzEwMDBDODhCOUZDMkI4MzVGM0E5QkMzMDY4RTQwNTg3REZGMzgxCis6MTA4QzIwMDA0MjQwNEUyREQwQkM1RjQyQkY4MzFENzg2NzVGRjdBM0UzCis6MTA4QzMwMDA1OTlBNzM5Q0U5MEZENUEwRkVBN0NFMkJGNkRGNzc0RThECis6MTA4QzQwMDBCODkzRjRFNEIzNDhGREVDQzhFRkNDQ0JEMDBGNjg2QzFDCis6MTA4QzUwMDA0MkI5NzhFNDI2RTI1QzAwRjI4MzlGQ0JBQUZBNjVFMTkwCis6MTA4QzYwMDA0RkFBMEU4MzFENzUyRTRCQzQ3NjE2MTVBRjQyRjFENjUyCis6MTA4QzcwMDA1MjBBQTdDN0U5QjYwQUY3RDFCRDUzNTg3QzhGQkE2RjFECis6MTA4QzgwMDBBRUUwRUZFRUFFNzhGMDJBOENGM0VCMjI0MUZDNUQzNkRECis6MTA4QzkwMDBFRjQ4ODJGMkFGQkI3Q0RBMjAyQ0E3RjhGNjVBODBERkNGCis6MTA4Q0EwMDAyQjYyRjA3NzA3NTZFNDEzQkM2N0IzNjJEQTk1NThCRUJGCis6MTA4Q0IwMDA0N0Y1MkI0RDMzRTMzODJCQTYzMDdBNUE1MUMxRTIzMEI5Cis6MTA4Q0MwMDA2MTFGMDFCOEY1NDYwRjI5MERDQ0JGNDEyNDU3OUUzNkQwCis6MTA4Q0QwMDAxRUUwNUQ4RUJGRDg4MkUwRjY4RjQxQUY1QzY2NDFCRDdECis6MTA4Q0UwMDAxMkY2NEUzQzFGRjFBNUUyNzgxNEFGREJCMzkwQkVEOTZCCis6MTA4Q0YwMDAzQzY2M0Q5QkVFNUY4QUUzM0FEMTNFN0ZDQ0U2MkE0MTVCCis6MTA4RDAwMDA3OUY1NDhBQzAyRjM1RjY1MjE0QkNDQzNDMDFDMjE4QkM1Cis6MTA4RDEwMDA1MEVFRjFGOTEwREYwQjE4RTczMTgzRUI2QjlGOTU5RjU1Cis6MTA4RDIwMDBCMzgxM0VGMDI2OTczNzQwMzA2MDJGQ0YyNEFDN0NFNkVECis6MTA4RDMwMDBDM0IxNDdDMUJFOTlGOUIwODhGNzBCQzk5MjFCNUNGQTYxCis6MTA4RDQwMDBGMzBFM0FENzE0RjA4RkYzQkZDNjkwMERFMEUwODY3NkFECis6MTA4RDUwMDA3NkU4RkZCRjZDRjA5RTg5RkI2MTc2QkY5Nzc4Njk3QkYwCis6MTA4RDYwMDA0RDNDRjRDN0MwQkZFMDY3MTdEOUZDNDk3REFDMTJFRDlDCis6MTA4RDcwMDA1REQwOEZCOTdDQTdGMzc3NjlDNzUzQzc4OUVDOTdEQUMxCis6MTA4RDgwMDA3NzlGMDBCQzI4REMwMzcwMEYyQ0Y0ODhDODdGQUY1NTk4Cis6MTA4RDkwMDAzRkRGMjQ2M0U4NDkwQjJEOUY1RTJGQzYyRkE0RjA3NDlDCis6MTA4REEwMDBDRkI3RTE3QUQ1RjlDRTQ4MEQ1REM3N0UxNzU2REZGRjA0Cis6MTA4REIwMDBDOUQ4REE0MkYwODdBQkY2MDg3OTU4NkY4RjgxNUZBMjg1Cis6MTA4REMwMDAzQjJGNjI5QzM0REEzNTNEQkU3MzdCMzZEMjBFMjRFNEYxCis6MTA4REQwMDBBRjI2NkRCREVFN0IxQThBMTAzMTdGNEU1NzhBMjAwMTc3Cis6MTA4REUwMDBERURDM0M3RUExMUJERjExRjM1NkUxNjlFODE3MUQ5RTE2Cis6MTA4REYwMDA0OUM2NjA1RjkwNUJFRUY5MjY4NDQzNjQ3Qjc1RkY3QjE4Cis6MTA4RTAwMDBDMTQyQkM2MDI3MzYwQTAyRDI2M0UzODNCMUI4OUYxMTI2Cis6MTA4RTEwMDAzM0MzQTNBNzMyNDYwMUZBN0NEMTE4QzIzODI2RUY2RUJECis6MTA4RTIwMDBGNkZCOUY1RDk2RDAwRTk0NEIwMzk5M0ZBMUVCM0Q3MUVECis6MTA4RTMwMDAyREQ0RUI0QzY2NzREREI5NEJFNkZDNDREODNCMTJFRjA1Cis6MTA4RTQwMDA4OUVCQjA1QzYwRkQ3NjJFODhDNUY4MjhCOEZGNjk4NDkwCis6MTA4RTUwMDA3Qjk5REUzRkQ1ODM3RjQ1QjVFMzhGRUY2MEVGMjlDMDc3Cis6MTA4RTYwMDBFRkY2NjhFRDYwQjgzNzVCM0UyQzJDMUZGMDdEMThFMDA0Cis6MTA4RTcwMDBFNzk2NThFRTI3NzI1N0UwNzg3N0M3MTA4OEMzQTgzNTcxCis6MTA4RTgwMDAwODE4RDc1QjVCNzkyNURFMjMyMUZDMURFNzZBM0VCNTE4Cis6MTA4RTkwMDA1QTAzQjUwNzg3ODVGOUJDRDY3MDZDMTBEODUzRDVFNjUwCis6MTA4RUEwMDA2NUY4QkUzMzJEN0YxM0VDMzBGODk5RERFRURGRjFDOEE1Cis6MTA4RUIwMDBFRTQ5RDdCNUNCQ0VGQzA1RUZCNTM3RUJGMTVGMURBNjdDCis6MTA4RUMwMDAxM0JDMUY1N0E5QTU5QkVDMzAzREEwQkUwRDcyNjIxQ0MwCis6MTA4RUQwMDBDMTdCRjkzNjlFOEY5REQwRTYwNzNGOEQ4N0ZCMkQ5MjkzCis6MTA4RUUwMDAwRkIwNzc2QjZEMDU0RDA0RkNBNjlFNTM0Q0RGMThERDZCCis6MTA4RUYwMDBCQUY2MjBEOEJGRjExM0RBQzBFMkEyRjU5OURGMkRGMjVECis6MTA4RjAwMDBGRUQwQThENkU1MjJEODc1QUE5RUEyQjEyQjg3REMzMjY2Cis6MTA4RjEwMDA1NDlCQjJGQkI2NjBBN0MyNzg0MUY4MDRGQzIxQjFGREI2Cis6MTA4RjIwMDBFRDc5QkVCRkQxN0QxMEU1RjExQ0RGNjBEQzA3NjE5RkVDCis6MTA4RjMwMDAwMjM5QTZEQUI5MjBENzQwOEVCQ0RDNkZFQ0Q0N0U3NDNGCis6MTA4RjQwMDA5RDc5Q0FEODVCRkJCMTczOTgyMUE4RDc3QjJGRUZCQzYyCis6MTA4RjUwMDA0OUFEMDdGNkVFQzVGRDYxMEM2RUExOTU3MTRDNEVDMDkyCis6MTA4RjYwMDAwRjgwODI5RkY4RDdGMjVBN0NENzFCMDQyRjlERUZEQzJECis6MTA4RjcwMDBENUQ5Mjg3NzU1M0Y0RDM1Rjc1Mzk1NzJCRjRFMjlGNzEwCis6MTA4RjgwMDBFQjgwNUY1NTFCRjcwQTdFNEI2REJFOUFGMzdEMERGQzlGCis6MTA4RjkwMDA5RTE0QkUxNzYwMEFDN0JEODIzRjY3MUMwOUQ4QTAxQzdCCis6MTA4RkEwMDBGQzNBNzY3NkJGNEVEQkRFNDNGQzQ1MTJEMkY5RjcyNjVCCis6MTA4RkIwMDBEREJCNTgyQkQ4N0E2NzcwQkNBRkI0MzA3RkNFRTg4NzYyCis6MTA4RkMwMDBENzhBQ0M0OUM1RDYxQjM3Q0M5NUZENjg0MUY4N0RBRTE0Cis6MTA4RkQwMDBDRjM5OUU1NEI4MThGQjhEQkQxN0UwMUUyM0IyRjdDREQ0Cis6MTA4RkUwMDA0MzhGQjJERkJCM0U0MUY3RTdBRERDREY3MThCMTVFRjlFCis6MTA4RkYwMDAxN0JCMDY0MjVDODJFNEM4QkEyNUNBRUZCNjJFREQ2RDA3Cis6MTA5MDAwMDBDMTc3RkE5N0Y1NjNFN0MxRUFGN0IxRkREOEZENURGNEUyCis6MTA5MDEwMDAwMzAxREMxN0M0QTI5RTREQzE5QzA3NzQ1NEQ4NUZEREM4Cis6MTA5MDIwMDAyRjQ5MUVGODlGOEVGMkY4Q0VEQTNCQUM2RUU4MkZDOEJGCis6MTA5MDMwMDBGREUyMkJGQkIxN0Q2QjY1M0ZGNkRFQkY5QUVGQjZFQjMxCis6MTA5MDQwMDAzOEJEQThFNzU4RTA4RkQxRkFBRkZERERGNTk5RkY0NEIwCis6MTA5MDUwMDBERDVGOUZBRjg4NDFCOTE0QTY1QjAzREU5RjhDQ0QyREU5Cis6MTA5MDYwMDAzNjgyMUY2OTM3OTcyMzI1REM1RURGMEQwN0I0MjA0RjVBCis6MTA5MDcwMDA5QUI4REY1OTcyNEM4N0RGMDVEQTdEMkExN0UzMjU5MzBBCis6MTA5MDgwMDA4QzRDQkVFQ0JFMkI4NjQwRkNERUExRDNBRjNFRjExRTY1Cis6MTA5MDkwMDAyRDNGNzdDQTg4RUZFMUNERTZGRUQ2REQwMjcxQzE3OEJCCis6MTA5MEEwMDBERUVEMjZGNDIzNTYxQjk5QkU1OEJENkYyOEQzNTM4QzkyCis6MTA5MEIwMDBFRTk1MTBEN0VEREQyNkEzNUZBQkRBRUVERkY0MEE5NjZFCis6MTA5MEMwMDBBNzNCMjk2NkUxM0UyOEQzNzM3N0M1QjJGNjMxRkVGRjkwCis6MTA5MEQwMDA3ODBERUNDRTdEQTk0RTJGQUQzRjNGQ0RCRDBGRjA5QTYwCis6MTA5MEUwMDA2MTUyRTI4ODdBQUUyQTg0RUY4QjFFRjMzM0JERjgxODAyCis6MTA5MEYwMDAwODFFMThBN0Q1QzY3RjQ3Q0U5NTNFODdGNjczRkNGMUFDCis6MTA5MTAwMDA1NDVDMEY5NUI3QTgzRjFEN0ZDQTg0RTc2NkNGNzc4RjYxCis6MTA5MTEwMDBDQkZDOUZDN0U0NjI3QzJGRTZEOEY2N0MyN0I1MkM0OUIwCis6MTA5MTIwMDA1N0IxMzEwMEZFNkRDRkQzNEM5RjlCNjU1MEQ2MDA3QzZDCis6MTA5MTMwMDBDOEJFNThBN0NFMUU3REFBOENCRDFGNTFGOUYwRTQ4Qjg2Cis6MTA5MTQwMDA5RDYzODM3Q0Q3RkE3NzNCNDkyODBCRUREMUYyRkU0RDI2Cis6MTA5MTUwMDAxMDRGREFEOTNBQzRDOThFQUJEMkYwOTBBNDk2OUYyRkEzCis6MTA5MTYwMDA5RjkwMTk3QzQzN0I2NUE0RTdDQkVEMUZFOEEyRkI3N0JBCis6MTA5MTcwMDBFRTQ0ODJCRkRGQTYzRDRGOEIzQzg3RTg5OTY3NzhGNEM5Cis6MTA5MTgwMDBFQzRFRTU3QTlCQkVGQ0Q2NEM3NzA4RTQ1QkVEMzNERjEyCis6MTA5MTkwMDAxRTk5QUZDMDc4MjE5NDg3QzRDN0ZDRTkyNzY0RDc3NEFGCis6MTA5MUEwMDBBMERCRjg3MTAxNUQ5Qzk2NTk2MTdDMzVDQkM0Rjc3QkRGCis6MTA5MUIwMDAxMjMwNkFGOTUwMkQyRjFDNEJBMjlFREI5ODE0QTYwNzgzCis6MTA5MUMwMDBEOEY4Qjk3MzY0RjlGRjAxNEJDOTkwQzAwMDgwMDAwMDYyCis6MTA5MUQwMDAwMDAwMDAwMDFGOEIwODAwMDAwMDAwMDAwMDBCQzU3RDkwCis6MTA5MUUwMDAwQjc4NTRENUI1RjAzRTczQ0VCQzkyOTk2NDI2OTkyNDgxCis6MTA5MUYwMDA5M0Y3QzkzQkU0MDE0MzA4MTEyREVBMjQwNDBDOThEMkVCCis6MTA5MjAwMDAwOUEwNjJCNTM4QkM0MUM5NDNCMEJEQjFDNTY2MjAxMUUzCis6MTA5MjEwMDAwMkEyODYxQTExMjhFMDg0ODc2MkQ1MzY3ODAxQTM0NjE3Cis6MTA5MjIwMDBFRjgwNDhCMUQ1RkJDNzQ3NUJCNEY3Rjc4QjRBMjk1MkFCCis6MTA5MjMwMDA4MTg4OTY0QkVGQjVGNTVGNkJFRDdEOTIzOTQzMjJEODZGCis6MTA5MjQwMDBEQkRCM0Y3Q0IwRDk2N0JGRDY1RTZCRURCNUQ2NUU3QjBFCis6MTA5MjUwMDBFRDFEQjM2QTYwMkM4MUMxQ0Y0QzMzNEI2NEVDMUFDNjUwCis6MTA5MjYwMDA3RjMyNEYzMTZGRDBDNjk4NDU1NUE5RkM5QTUzMjFEMzEwCis6MTA5MjcwMDA3Q0M4NjdBRTBDOTkxNjg5RDQwRkU5MDkyMzBCNTlDQTJCCis6MTA5MjgwMDAyMURENjIwRkVFQ0NDMjk2NUU4NkZEMkM5QTAwRkY4NTMyCis6MTA5MjkwMDBBNjhCNjRENjY2MjlDM0VGNkE0RkJGOEJCMTkzMDc5QzM4Cis6MTA5MkEwMDA5RUY1RjA5RDdERjk5NUNDMkExODlCQ0I0NDNEMzM2QjAwCis6MTA5MkIwMDBCN0M0MzFGNjdDOUIxNEIyNDBCREI5OUJDRDNCQUREMDU5Cis6MTA5MkMwMDA1RkM1NkFBRjZDODdGQ0MwNzZDOUIzMTNFQUNENkRBQkRFCis6MTA5MkQwMDBDQ0RGMDJGOTNCRjc5NzdBNjQ2ODFBODNFMzYwM0VFOEQzCis6MTA5MkUwMDAwQ0NBNTBGRjlBRTY0OUVDRTM3MThDQ0QzNzA3NEQwQTYyCis6MTA5MkYwMDA3QzY3NEY0QjZDMEZBM0ZFREJCMEZGNjVEMDI4MTlFMEY1Cis6MTA5MzAwMDBGOTBBN0ZBRTFGNEExNzZGMzZDMzY0RjlEQ0JGQzI3RjBDCis6MTA5MzEwMDA4MjYxRjk2Q0U4QjdCQjRCNjYzMDVGQjYxN0JFMTcwRUJCCis6MTA5MzIwMDA3RDVGQTY4NDBFNDkzMThDRDU3NzQ3QjQ2NzdGMzMwRkI0Cis6MTA5MzMwMDBENjQzNDA1OTgwRjBFODMyQjEzQjdDMzY5QTc0NTI1RDk2Cis6MTA5MzQwMDAyOTYzN0ZDMEZGMjYzMzY2Q0FGNDhENTNDNzYzMjYzNzZGCis6MTA5MzUwMDA2OTg2MURFNjVEQzVFNzM1QjA0RjIyQkNENkIzMjYxMzNFCis6MTA5MzYwMDBDMzdFM0FFMzE5QkIzQTZDNUMwQjBCNDU0MzdBNTIwRTUxCis6MTA5MzcwMDA1MEY5MjJGMzQ2NEE2QkQ0MkMxQUVGNEVENjZGNjIzOTVECis6MTA5MzgwMDBEOEVGODBDOTA3RTNEOUZCODBBRTI1OTdDRUJGMDZGOTk5Cis6MTA5MzkwMDA2MEZDQzg3QzMwNTVGMEMxQjI1MzJDNzQyRDhDQjc2Qzc2Cis6MTA5M0EwMDAyNTBCRDU4RkU2QTkxREQyNDUwQTBCQzQwMDVFMTcwMTE3Cis6MTA5M0IwMDAwRTYyNDUxQTU1QzZGMUFBMTYwRUUxNjU2OTUwOUY0NzFGCis6MTA5M0MwMDA3Q0FBNjE3ODQ2M0M4Njk3MzdGNjdDNjUwRUNGMjc5OTU0Cis6MTA5M0QwMDAxOEIzQzYwREQxMTkwODQ1NzAyNzRENkExQURCMDQ3MDAxCis6MTA5M0UwMDA1RUIzMzIyODMzOTg1RjRBQkE3NzUyMkVDMDFCNURDRUU3Cis6MTA5M0YwMDBFN0RCNzhEQzYyNTFDNzYwREVDN0IyQTFERTE3Njk5NTkyCis6MTA5NDAwMDBDRkU1NDE3OUEzQzJCQ0RENTAxRTBENzhFOTgyRUZEQkM4Cis6MTA5NDEwMDBBRDJDODBGRDNGOUVBNzUyQkY2RTEzRTc1RkEzRTI2M0IyCis6MTA5NDIwMDA2MzZENDg5N0JFOTAwMUU5OTJDMDFDQzg4RjFBM0VCNzgxCis6MTA5NDMwMDBEQkExNUQxOUI2OTNBOERENjA3QjBCNkI4QjBBNkI1RkJDCis6MTA5NDQwMDBGNUEyOTUzMTU4MkYxNzVFQjAwN0NENTA5NTI5RkU0Q0U3Cis6MTA5NDUwMDAyN0Y0OTdGODdCMzM1QjBGRjlCMzJGREE5NzYwN0Y2N0I4Cis6MTA5NDYwMDA4RDZDNzYzN0Q0NzdDOUFDQTk5QkY4NjUwREUxRkY4NzgxCis6MTA5NDcwMDA0OEQ3RjFDODRENTVBOTBDNzk1RjlBOTZDQURDNThCRUY5Cis6MTA5NDgwMDA5QUJFRDczQjgxQkY4NkExRUY2MDc5NTZERkNEOUNBRkY2Cis6MTA5NDkwMDBDQ0VBNEUxOEVGODJCM0ZGMDc5ODA3Nzg1ODAwRjJDQjVBCis6MTA5NEEwMDA1NTBFNzdFM0ZFNDk2MzdGMDRERjFCN0QzNjBGQzdCRTkxCis6MTA5NEIwMDA3RjJDRjJBQjU5QkVFNzY2MEJGMEQ3MTQ3OUU1QzBCRDNGCis6MTA5NEMwMDAzMDhGRkE3NDlCQzMwQzREQUEzM0ZGRTNCN0I3NDJGRTRCCis6MTA5NEQwMDA5M0ZENDY2NjQ2M0FFRjk5MzQ5QjY1NUYwQTg3OTYyRTYwCis6MTA5NEUwMDAwRDFBM0ZFQTBGNUIyRjc3RURENUU3RUJCQkY1Rjk0Njk5Cis6MTA5NEYwMDBBNjdDRDRBRkYxMDFBMDYwOEI2QTc3OUQ4QzI2RDlFMTYwCis6MTA5NTAwMDBGOTBBRjhEQjZDNkUzQUQ1MDVGMDlBNUYzMjdCNTZDMUVBCis6MTA5NTEwMDBFNzA2RDVCRjAzRDc1MzgzNjFFMDI4RTJEOTlDRjlFOTc4Cis6MTA5NTIwMDA2ODNGRTBBNTJBRjNDQkEzQTk4OEZGRkI5ODA3RTFCRTFCCis6MTA5NTMwMDA2MEFEOUM0QkY0RDg2MjU1MDM2MUYyQUI1MUYwN0Y2NzhDCis6MTA5NTQwMDA0NjJEOTU3NzZFMzVBQjEyMkZBRjFEMEY3MjZCMDkyRDFGCis6MTA5NTUwMDA2MUFBNjIzMTAwRkUxQjM3NEZGRDQ0MUE0REU1MTZBNDg3Cis6MTA5NTYwMDA0NzI3RjAyOUI1N0I0RTBBQUU4Mjc2NEIzNjJGQUU2NTgzCis6MTA5NTcwMDA1MDdFODYwNTREMTY4MEU3MEY2MjNEMzVDQUJENTMyQ0RGCis6MTA5NTgwMDBGMERGQ0VCODlBNTEyODVGOTRCRjJBM0VBNEZGNUFFQzcwCis6MTA5NTkwMDBFQUVBMjE3Q0JEMzRCODNFMkQxRDI3MDAyRjM3MzI4OUUxCis6MTA5NUEwMDBDNUUyQkM5REZFOTc3MDlFRjU5NjdFNTMyNUY0NzNGRDMzCis6MTA5NUIwMDA1RkJGMjBCOUJDQjhGOUQ1OUMxM0UzNTBERTc4RTcxMjQxCis6MTA5NUMwMDBCRDYxN0UyODQ3MTZERjdCODhCRTRCMzMyQzA0REZDOTg0Cis6MTA5NUQwMDA3NDVCRDAwQ0RGNUZERDYyRTY3OUE3ODlGMjI3Qjc0QkI5Cis6MTA5NUUwMDA5NDVGREMyRDA1MkQ1OTU4RkY2MjdDMjVDQUVGRUQ0NkFFCis6MTA5NUYwMDA4Nzk5NUQ4QUE3NDhCQ0ZDNzFEQkVGNjIxODgwRkM0NzQ1Cis6MTA5NjAwMDAxMDJEQjhCRTk4QTMyOUM2NjdDN0IyQTY5ODE5QTU4ODE5Cis6MTA5NjEwMDBBRjFCM0U0MUY5QjU3OEJCRUMwOUExOUM3RUQ5RUVDOUUwCis6MTA5NjIwMDA2Mzk4OUYzQzZBQTEwRERCN0YxRTVGODlGOERCMzFEOTBGCis6MTA5NjMwMDAyMUQzNzdEOTg3NzI4ODI5REVCRUVCRTFCQkIyRTMyQTVBCis6MTA5NjQwMDAxNUQ3Q0I5MUVEMUNFRUM1NEVDQjEzNDhFN0VCRkYyQUE3Cis6MTA5NjUwMDAxM0ZGMkIwNkU2REY2NzQzM0E3ODQ3RTFCQTUzQjdFRENECis6MTA5NjYwMDA5OTgyRjhGRDYzNUQ4QTgxRUEzRjJCMzEwN0UyQzNEOTE1Cis6MTA5NjcwMDA5Qzg4REYxNzRCOEEwRkQ3RDk5MkNENEI2QjU5Q0MxMEYyCis6MTA5NjgwMDBERUQ3QTgzMkUxQkQzMjczNjU2MkJGOERGOEZFNjZENEM1Cis6MTA5NjkwMDA3N0Y1REI4MUNGNzFGQzE5RUZGRkY2NTZENzEwREY0QjYyCis6MTA5NkEwMDAzMzM2NEZCRjA2RkI3RkQyNDhGQ0E1RjVEM0I4RUREQkMwCis6MTA5NkIwMDA4MjNGMTgwQjAxOUUxNjBCM0M5OTMzNTdFNkUzRjg5NzRGCis6MTA5NkMwMDA1QjBGOEI1NzM3RTUzQjZDOTc1RjE3ODNFQjdEMUJBQ0NDCis6MTA5NkQwMDA4RjYyQzZGRUFBNEFFQzJCQTAwMzRCOEIyMzNEMzNEMkVDCis6MTA5NkUwMDA3QUQ0RjQ5M0FERDBDMEY1QkU4Nzc5Rjc0MDlBNjQ2NjFBCis6MTA5NkYwMDA1RTA5RTQ1Nzc2OTY0MkU1RDk1OTI2QzI4N0YyOTdFNTg2Cis6MTA5NzAwMDA3QkRGMDRGODlGNTNGREQxNTk5MENGNjRERUIxQTg2Nzg5Cis6MTA5NzEwMDBENDAxNDc1NTJDRjQ2NjQzMDYyOTQ3MzhDQ0MxM0QyNDczCis6MTA5NzIwMDBFNzIwMEY3OERBOTRDMDlFNTgxRjA2Njc4NkU4MEZENkE4Cis6MTA5NzMwMDBBQjBCRkIzOUZCREU5NzQ3MTE4RjBEMTk5RjhFNDZCRDkyCis6MTA5NzQwMDBERDc4RjEwQjkzMEFGNEI0RjU0QTI0Njc2RDFFMUY0M0NDCis6MTA5NzUwMDBGRTY4RUNBRDYzMEI0QTg2RTQ2M0EzODdDQkVGNEJFNDcyCis6MTA5NzYwMDA0Qzk2OTFDQjMzRDcwMEY1MzMzNTlCQ0JCNzRFMjc1RjYzCis6MTA5NzcwMDA5RjVCOUJBMzgyMjhGN0I2QkE4MjU2MDQzQUJBM0NDMEQ0Cis6MTA5NzgwMDA1MEJFNEYyRjk3M0QwOEI2NjZBN0Y4MkM5QzVFMTZFRjhCCis6MTA5NzkwMDBBQjRDNDY3RUY1QzgxRTE0RjE3RERFOEZEQkUyMjFGRjY3Cis6MTA5N0EwMDA2NkY5NjQ4RjBDNzk5Qjc3NTc3QjM2Q0VEQjYzMTRFNUMzCis6MTA5N0IwMDAzOTAxOUNGNzFCMTMyQkM5NUU5OUVFOTU2OTVDQjYyNEExCis6MTA5N0MwMDAyNjg4QUFBMkNGRkI4RTZCMDE4Q0ZCMURFNjdERTQwNEVDCis6MTA5N0QwMDBEMEIxMDY5NDM3RDJCMTBGQzcwNjdBOUQ3MUY4MjcyMDExCis6MTA5N0UwMDA1RUI0Rjk3Q0RCMzNGNTkxMTNFMTc2ODY5N0RCMDNGMDA5Cis6MTA5N0YwMDA4OUVCQjFGMkUxRjEzMDVBQURCQzBFRkJCOUZFM0E0RTQ1Cis6MTA5ODAwMDA4N0QzQ0Y5QTgzQUI2MUZDRDM1NkQwMzM2MUZBRTJCNEVECis6MTA5ODEwMDA5REVCMUQ1Rjk2MjRFQ0MyRUUwQzk0RkI4Mzc5NjU5NDVFCis6MTA5ODIwMDAwMUQ3RkQzRDBFOEUwRjk3QTkzQjAzRDdEQjlGMjQ3RDBCCis6MTA5ODMwMDAzRjc3QjZDQjJDMDg3MjY2NjlCQkM0ODIwMEUyRTlBNzA5Cis6MTA5ODQwMDA5RUNGNDBGOUZCQzk5RUU3MzNFNjg1QzExN0Q5NEU0QjQxCis6MTA5ODUwMDBCRkFCOEREN0YxOThENzAyRTNDRDYzREE3OEExMzQxQzgyCis6MTA5ODYwMDA2RjlFQzdGQzIxQ0EwRkQ2M0VEOURCMUY2NjNGOTA4NDhFCis6MTA5ODcwMDAwQ0FCQ0YzNjdCNDk3RTlGODNENTg4N0NBN0I1M0JCN0ExCis6MTA5ODgwMDAyNENBOEI3NkU2Mzk2NjA5NEEzMEQ0QkM1RTM5NjRDNjkwCis6MTA5ODkwMDBGRUJDREU1QzE3RDBCQjQxNkIxRkQxN0ZBN0UwMUZBOUM4Cis6MTA5OEEwMDA0NzBBRDlBMTdFNzRDOTAwQzlEQkE1MTZERkQxNTQyOEE3Cis6MTA5OEIwMDA1QThBNzQ4NEZBNTM5MThFMTJGMkFCRDc4NEYzNTYyNEU5Cis6MTA5OEMwMDAyRUNGQ0YzODdDNzc2N0MxQkMxNjc2RThFOTk4OUVFNTQ1Cis6MTA5OEQwMDBFMEYzNzVCOEI4M0REODYwNTM1MDVGMjRCNjMyNkUwN0Q4Cis6MTA5OEUwMDA3RURGMTA0NDdERUQ4QThBMTlDREMwOEUzMUE1Qjg2RDFBCis6MTA5OEYwMDAyOEE3QUVDRjhGNkEzM0M0RTJGNzhDMjBENjRGNEYyOTBBCis6MTA5OTAwMDBBNDc2ODEyQUNFREY4MTQ0MTY2Qzk1QjBDQjI2ODlFQ0YzCis6MTA5OTEwMDA0MDQ3M0Y1M0UwN0JEQTA0RTY1ODBGRDlERTJDNkUyNzMwCis6MTA5OTIwMDBCQTk5NjdCMzRDNzY2MkI3ODQ3NkEyODYwNzREQkUyMzk4Cis6MTA5OTMwMDBERkEwREMzQjJENTk4ODZGQTQ1RTg5RUMzRUQ5RDAzRDc5Cis6MTA5OTQwMDAwN0ZCMUQ4OThGQjY0NEYwRDE5NjdGMzIxRkVEMUE5MTI3Cis6MTA5OTUwMDA4RkZDMkFGMTkxREIzMjNDMUY4MURDRkM0NkY1NTlDMEJCCis6MTA5OTYwMDBBNzAwQkU5MjA0QkUxRTE2RjI2NUUwRkIxNkEyMUJGQzA5Cis6MTA5OTcwMDA0ODM4REY1QUQxNUZBREM1MTY5MjQ3OTM5Q0Y4NzQ1MEIyCis6MTA5OTgwMDA3RTQzM0ZEQkMwRkVDNDdENEEzMkRBQ0Y5MEE2QjZDRTFFCis6MTA5OTkwMDA1NUI5RkRERUQ3MkY0MTdGRDE1NzU5NDhFRjNENjBFOERCCis6MTA5OUEwMDBDQjQyM0IzRkE5QTg2OTFGRjI0N0QyOUM5MkIyNTZCMjY0Cis6MTA5OUIwMDA0RkQyOUMyOEY3NTFENkUwRkMxQjlBMjdGOUI4MUQwMDFFCis6MTA5OUMwMDBGRDIyMUZENTk5NjgzRkQxNzA2RkE1OEZEQjAxMzVCNDlCCis6MTA5OUQwMDAzRTFBMzc1ODU1RDQ2NzkzN0FCMzU2MjE3RjM0QUUwNDc0Cis6MTA5OUUwMDBGQjA4RTU2RjRGRDc5NjQ1OTA2Rjk4NjVGM0EwOUQ2MjkxCis6MTA5OUYwMDBCNUNDMkNDMTc2QUM1REJGQ0VENjQ5REQ2NDE3MDdBNkM5Cis6MTA5QTAwMDAzMjBGQ0FFRDczNDE0M0MwMzgwNkU1NkNGRjhFMUZBMUNCCis6MTA5QTEwMDAxRTVGNUFFMjA5QThCOERFMDQ1RkU2MzJEMjBCOUQ0RTAzCis6MTA5QTIwMDA2RjcyMUNFMEY1RTBERjY0REExNzc1OEU4NTNDQTQyRkI5Cis6MTA5QTMwMDAwOTdBNzZENjc5OTM5RDkwOUZCN0MxNEE3OEVGRUNFMjg4Cis6MTA5QTQwMDBFNUU3RUM4MDIwRTgzRjQ1RTZGREIxNTgwQkQ3MzM5N0JBCis6MTA5QTUwMDBDQTAzMEJFMjNENzEwMkQzN0UzNjYzM0U0NUNCNzczQ0IxCis6MTA5QTYwMDA0Njc2OENCNkRFM0JCMzM4M0NGNjEyNUYxNjVBQkVCNzZDCis6MTA5QTcwMDBBQkUzRkFBMjYwQkQyN0NBMDY2RDUzMTQ0MEJCM0IxQTg0Cis6MTA5QTgwMDBDN0U0NzkyRjBFRjdBODAxMDA0OUMxRUM3RjZGQUM5RUE3Cis6MTA5QTkwMDAxODlFRTdGNTg3REEzRjMwQTMzQThERjRFQjYwMzk4MjAwCis6MTA5QUEwMDAwRDdBNTdDQjdCQUQwMEM3NUFGQjUwQjkwMkY2QTRBNTdGCis6MTA5QUIwMDA0NzEyRUQyN0NDOTgwQ0FBRjg5QzI0QzYwRjI4MUJCRDkyCis6MTA5QUMwMDA4MDhGODdBRDRDMzc1RTM4N0M0QTQ0RkY0NkU4REZBNjdFCis6MTA5QUQwMDA4QUZBODE1MkRGRTQ1QzgwQjc0QzZCQkZBQUMzMEJGMEZCCis6MTA5QUUwMDAzRDZDRDRGNzQ3MjgxNUVEMzFBMzhERjdFQkRDRDczNzY0Cis6MTA5QUYwMDA2RTQ4MUJEMkZGNjAwRkQ4QjNDNzBGRDkwMTZCREZBRjIxCis6MTA5QjAwMDBFRDE4MDM2MzQ1M0IzRTM3QTE3RUQ1RjQ3OUEzNEIyMjg0Cis6MTA5QjEwMDAzQjIzNzJCRDI2NjVGM0Y1MEE3NjZENTIzNkM5MEQ2RThDCis6MTA5QjIwMDBFRkQ2QTJCRDJCOTM5RDNCMDU5NzU2RTM0QTFGNDNGQkZGCis6MTA5QjMwMDAxMkVDODZENDZDQjIxQjNFM0Q3OTA4QkU3N0NFMzg0RDEwCis6MTA5QjQwMDA3NjdFRTM0NTg1RUM4RjQ2QjAzRkQwNkVCN0Y0NzI3QkVFCis6MTA5QjUwMDA5NkY1MTg0OUVGNkE3NEJGNTNDODlGNEUyN0U4N0RFNDE1Cis6MTA5QjYwMDBEMzk3QTVGMUM4QTc4QzM1NjVEQzA0MzQ2OEM5RjZFNjNGCis6MTA5QjcwMDAyMTFDREE3RTJDMTJERUVCQjJCOTVEREU1ODU4QjUyNTE5Cis6MTA5QjgwMDAxRkZCREYyRDMxRDRGQkVCMEIzRjRBNDRGQkE0QjFGN0E1Cis6MTA5QjkwMDBDM0M0ODU2MUVEOTZGNjNDNEE3ODU4QkFENzM4RUNGQ0Q4Cis6MTA5QkEwMDBBRkNCOTY2OUZFMEQyRjFDRjBFMjdBM0YxRDk0NjgyRDE1Cis6MTA5QkIwMDAyRjUxODJFQkQwQUU1Q0IyQzQ4MDk2MUEyQjBGQ0VCRDczCis6MTA5QkMwMDAxNUQ3M0Q5QjZENjI3OTMwQkY1Q0Q0NEJCODlGRDgzQkI1Cis6MTA5QkQwMDAzMzcwMERFRURCRTBBRjA0OUZCNkZBMTZEMUZBREUzQTMxCis6MTA5QkUwMDBEQjYyNjM1OTA4RTdCQ0JCMDkwRjhFMjgyRkUyNjE3RDU5Cis6MTA5QkYwMDA2MTU1MzI4RUQzNTAzN0M1ODFGRTkzNDZCMEIzQjBCQ0E5Cis6MTA5QzAwMDBFMURFRUY5MjNGNDU4MzZCN0Q4RkIxMDZFREFGMEFCMDg5Cis6MTA5QzEwMDBCN0ZFMTVFMDRFOEY5QjU2RTM4MUY1OTgyQUVGMUJCQkVDCis6MTA5QzIwMDAwMkYyOUI0NjkwQkZCRkM5RTFGNDZDOTM3QzgxRUZFMEU4Cis6MTA5QzMwMDBCQTdGNDE2MjdCRDRBMUYyQ0MxRTZFRDdERDlDQ0RFRDA0Cis6MTA5QzQwMDA0MEVERkJDREQ5RENERTlDMThFODlCODRCQ0Y3OEFEMkMyCis6MTA5QzUwMDAxRjhERjY2RjIzRjM3RTg2RkI0RUU2QjNBOTdCODg0RUZECis6MTA5QzYwMDA1Q0VFQjg1QTU0RjIyQjU5NUNGRDBGOENDMUYyODkwQTk0Cis6MTA5QzcwMDBFRDI3OThEMkZGMDg4RTdCNzY5RENCQjM5RTA5RkVDNTVCCis6MTA5QzgwMDBGQ0JEMjU0MURBM0Y2NEZCRTcyMzdEMkI4NDFENzlGNjdCCis6MTA5QzkwMDA4NTFCQzZDRTJCMTlCMjkzRDY3NTU5ODNBQjAxMEZFQjNBCis6MTA5Q0EwMDBFQ0VBNEY2QTUwQkVGRDQ1MjFGOUM2MkMwMzdEOTM5MDI2Cis6MTA5Q0IwMDAxRUZGMTU0N0ZEQUVCMzA2RDcyMUZEMDMxQjhENTRCRTE1Cis6MTA5Q0MwMDAyRkM1REY4MDdDNzlBQUFFMjYxRkY3QzFDQzE2QzhBRjlFCis6MTA5Q0QwMDAwMzdFMzJCQTNBMThEQTBCQjA3RDIwM0Y4M0M1RTU2M0M0Cis6MTA5Q0UwMDAyQUU0MjcwNUU2MkExMkNBRjkwOEZCNjMxMkZBNzk2ODAyCis6MTA5Q0YwMDBERjAwODNDM0Y3MkEyMUI2RjI4MDBCNEU1QTY4MDlCNEZECis6MTA5RDAwMDA3RDE1M0Y2NDhGMUNGQjcyOTY4MjFGMzUzQkM1NjBGMTQ5Cis6MTA5RDEwMDAyRkM1QTZENUIzQTM5ODhDN0NCRjY2RTBBODAxRTYxMzM3Cis6MTA5RDIwMDBFREVBMjMzQkI2QkU1QkEyNzFFQTBCOUYzM0ExREZFNEYxCis6MTA5RDMwMDBBRTZFQkUyRTFCQzUzRTAwRjA5NzgxRjZDMERBRUM2ODExCis6MTA5RDQwMDBBMUM3REIzOEJGQjMzRURBNDdCMzY3MzgzRDE5ODM3QTIyCis6MTA5RDUwMDBGNkYwRkRDNDJBQUFBN0Y1Njc1QUNERkQ1RUY1QzIxRjJECis6MTA5RDYwMDAwMzcyOTBDQTdGOTIyRDg5N0RFRDZBOTE3NkYwNTQ4Q0IyCis6MTA5RDcwMDBCQjQ5RUFGM0NBODhEN0IxOTIyNzlDNkZCNEY0MjkyMTcyCis6MTA5RDgwMDAyRjYyMEYwRjRDQzFGNTNCMDBGQzg1N0U5OTJENTJEREYzCis6MTA5RDkwMDBEREFGQzFGQ0I2OEMyRkYyQTAwOUU1MDY3NjkyQ0JGMEMwCis6MTA5REEwMDAzQkIwMjJFMEJEQkNFN0IzMjlDODM3NjA3MEQzN0E2RDAxCis6MTA5REIwMDBFOEE5OTRFQjZEQTRCNzY5RkY5ODE0RERENDg1RTU0OTUzCis6MTA5REMwMDA3NzE0OTI1RThEMUFDN0VFOTgwMURGN0YyRUYwOUE2Q0ExCis6MTA5REQwMDBFMzdFMkVGN0VBNDBENkYyMTIxQ0RGNzdGNzZCMzg3RTZGCis6MTA5REUwMDA2OTE0RjkyOTkzODAzNkY2Mzg0QURCRDEyRkU0NjZBQjQzCis6MTA5REYwMDAyNEFDRjc2ODBDRUYzRkMxMjBERjUxNTc0MjcyOTdGMjU1Cis6MTA5RTAwMDA3MTFFQzlCQjEzRDI5RTZDMjdGNzY3OTk1OTBEQzI4OTgxCis6MTA5RTEwMDBERjY5M0YwNjlDODFGQjU5RjQ3MzYxM0Y0OTM5M0MzRDQyCis6MTA5RTIwMDA5QjFDNTI1MDQwNkM2NUZEM0JGNjIwN0ZGNjk4MUQ4OEM4Cis6MTA5RTMwMDBBN0RBOUU1RjFFNDc3RDU5NkI2MUREMzJEQTJCMTE3NjAyCis6MTA5RTQwMDBDNkNBRjQ5OTg3OTAzRkNGOUQzOUI5RTM3RUY4RjZFODBBCis6MTA5RTUwMDA0RDA3M0Q3RUEyOEJERTdFODhEQzJGRUNDNDJBQzkyMzExCis6MTA5RTYwMDBEQjdCQkZDQkQ2REI3QjgzRjk3RkI4QkRDN0VERkFDMDA4Cis6MTA5RTcwMDA5RTY4NzU0Rjk4M0M2RjE0RkJCNDczNEJDRUM3QTA5RTgxCis6MTA5RTgwMDBGOTc4OTBCRjQwNEY1NzBDRDkyQkYzNzY0NzdGODhFQjdBCis6MTA5RTkwMDA2QUQwRUU4RkIwMUI4RTNEMTExRDQwRkE5RkVGQjY5MjM3Cis6MTA5RUEwMDA5RjRFNDFCQjA3RTAzOTYzMUZGODAxMjJDNzY1RjI3OTc1Cis6MTA5RUIwMDAyNURDM0ZFQzMzN0E1NjQzN0Y4RDc3OUVGRUI5MDFENjgxCis6MTA5RUMwMDA5REQyMDU3NjRGMkNEQUZCNkEyQ0M5RDlENzY1QjYwNzI3Cis6MTA5RUQwMDBFRDMyQzVFQjQwQkY4NzA2QkZFMjlDRTJGNjk2QTA1QzgwCis6MTA5RUUwMDBFNEYzNUY2NjBBRTU5MzFENjQ2MjRCMjgxRjEzQ0E0N0JCCis6MTA5RUYwMDBCQkU3MjVBMTc3OTY0NTQxMUVCRTM3QkJGRDdGNDFCQTIyCis6MTA5RjAwMDBBNTk4QjlCQ0MyNzZGOEJENEJEODVCNUQ4MDEyMDdFMjVDCis6MTA5RjEwMDBFNTM4RUNCQkIzODRGRUM2RkRDRjgzRTlDMUY1RTRDN0U5Cis6MTA5RjIwMDBCMTEwM0QzRjdFQzVCQzEzRkQzQzFGMTcxQTQyMjZFRTAzCis6MTA5RjMwMDA5NzIwM0Y5NkRBQUVCMDY0QThBRjFFQjcwNjU1RUVFRjk1Cis6MTA5RjQwMDBCMjE4NDBGRkNGN0ZGOEFFMzc3MDVGMzFGRjE1RUVDNzE0Cis6MTA5RjUwMDA5QTdGRTdDQUU5QjhGRkY4NzhDNjE0MTNDQTlCODVDQzg0Cis6MTA5RjYwMDA0RjdFRTdDNThDRkJBMTk3QjIyMEY3NTczMzg3MDFDNzE3Cis6MTA5RjcwMDBCQjBCQzRDNjU2MTQzNTAxQzBGRTU1RjA1OTMyNDg2OEIzCis6MTA5RjgwMDA1N0E4NkQ5MDI3QTNEOURCNTEwM0UzQ0U2QjMzRDBCRTI2Cis6MTA5RjkwMDA2NDdFQkJERTlGN0U2MUZEREQzNUE4QzdEN0I2MTlCOEVDCis6MTA5RkEwMDBGREQ4MkU5MTFFOUZDRkJDNkVCNDNCMzRCQzE2RTRDNENBCis6MTA5RkIwMDA3M0ZGNjg5QkMxOEJFMzVDOUY2MzIyRkUwMzEyMDU2OUZDCis6MTA5RkMwMDA3RTIyNkQzMzBBM0ZCQzgwNjMxNTMzODQzMDM1NDgzQ0I0Cis6MTA5RkQwMDA1REVCNTA2QTg2RDNDRjVBN0Y2REM2MjYwQkZBQzMwNjU3Cis6MTA5RkUwMDBEMjBERTQwN0JFNjBGMkNFMjYzRjZBNUMzRTQzM0Y2MjdDCis6MTA5RkYwMDA5QkJEQTlCRDg2OTdEMzlBQjk2MDFERjA1MUY5QjUwQUVBCis6MTBBMDAwMDAzN0Y4OTgxQTg3RjIzMjNEODdEQjBGOTFGMzVERDhBMUJDCis6MTBBMDEwMDBDRjQ3OUU0RjJDMERFQUYzRjM5OUJGMjAzOTA3RkQ0NjM5Cis6MTBBMDIwMDBGQUVGRTkzOTVDNUU1RDU4OUYyNUNFMDEzQzc0MEVEMDk1Cis6MTBBMDMwMDA2NjU0REZDRTQyNzlCNTRFMjE3OUI5MkE4REUzQ0I5MEIzCis6MTBBMDQwMDBDRUQzNkM2N0Y1NkNFMjVGMjdEODE3MDQyRjg3M0ZGQkYwCis6MTBBMDUwMDA1QTk3ODQ3QUIzQ0RDOUY5RjI3RjBBNzcyNEJDMzdFNEUyCis6MTBBMDYwMDBFNDEzQkM2RDY4RTRDMTc4NkRFQkE0MjBDNzE3ODdGQkNGCis6MTBBMDcwMDA0QUZEMTc0QjcyRjQ3MjY4MzBGRjhGREY3NzcyN0U1Qzk3Cis6MTBBMDgwMDAyNzhCRjVFNjIwMzkzNENGQzFFN0Y0QjFFNDc5MjI4NDk3Cis6MTBBMDkwMDBERjZENjAxRjAwRENGM0Q3Qzk2NTY4QTc0QzlBNjlBMzIwCis6MTBBMEEwMDA3OTM0QkM2MjI1N0Y2QkZEQ0FGRTBDQjI2N0FCRkFGMzU0Cis6MTBBMEIwMDA5Qjg2QzEyQjQyQUI2OEYyMEJFQUNENzNDMTNFMDFENzQwCis6MTBBMEMwMDA2REJCRkU5QzBBMzQyRDBCM0Y3NzlBOTlFNkJEMkYyNzc2Cis6MTBBMEQwMDAwMUY3MjMxRkVGRkIyNUQyN0I5Rjk1RjQxM0ZDRUY5MDM0Cis6MTBBMEUwMDAxOUU1RDcwQjU5NjQzN0U1QTdGOUVGQ0Y0MUJEMUUxNTI4Cis6MTBBMEYwMDBEQUYxNjQxNkRBMjlEQzRFQUFFRjM1NzdBMTFEMzhBRjA0Cis6MTBBMTAwMDAyREVDREMwQkZGRDlBMDNGMDc2M0VENzFFNERGNjA5RDEwCis6MTBBMTEwMDBGQUVGNEJCNjQ1QjRCQkU0NUM4Q0VCRkI0RDI2RkYyODU1Cis6MTBBMTIwMDBCNEVGQUVCRkNFOUI4QzcyRjVDQzUyMDM0M0ZBQ0U5NzAwCis6MTBBMTMwMDAzRDhCNTA4RTlDQjFFQUVERUYzMzc2NEVBRkREODM3NEVDCis6MTBBMTQwMDBGNkU0MjM5RDc3OEY0ODY3NEYzRUQyNzlCRTgxRjlDM0VECis6MTBBMTUwMDBGQkE5NDczQTAzN0Q5NzA5M0E5RjM5NzA1NTNFRDJGOURBCis6MTBBMTYwMDBEMzdENTdFNTIzOUQzNzE5M0JCQ0I4NkU3NjY1RkFGNzZBCis6MTBBMTcwMDAyMjFFNEY0Q0Y2OTFGRDA0RjIyQUZGOUJGMEUzOEIxMTU3Cis6MTBBMTgwMDBGQ0Y4RTJGRjFFM0Y1MkJCOTFGNEUxRDE5Q0UxRjVBMTQ2Cis6MTBBMTkwMDBDQkE0QTZBMTNDOUM2NzMxN0ZBRDVFQzQ5RjYxRkQ2QkUzCis6MTBBMUEwMDAxNjMzRjkyNTVFRjlGMkYzODc5RTQwM0JBNDU3MjYzQjEwCis6MTBBMUIwMDA0NEVCRUYxNUM1OUY4MzdFODU1NzhFQkIzRDAxNjlFNDU3Cis6MTBBMUMwMDBGRUVGMTZGQjE4Qjc4NTA1RDBGRkExRDlGRDlBRkQxODQzCis6MTBBMUQwMDAyOThGREYxNzc4M0M5REUzRkQzNkVEMTc4NUJGNzY4OTIzCis6MTBBMUUwMDBFOEQzMTJGQzlDREJBOUJCMjVGMkM3NUFENDZFMkZEQTQ4Cis6MTBBMUYwMDBCRDBEMkZDRjc1QTBCRkY2NTQ5MEZCNjcxQjBFOEMyNUFECis6MTBBMjAwMDBGRkVERDJFMEFCQTE1NEI0MEI3QjI1MDdFRTFGOTZFRTE5Cis6MTBBMjEwMDBGRTMwMDZDRkJCNjEzRkZBNDk0RUQ4N0U3NEIyRDg4RjZDCis6MTBBMjIwMDA5RTBBN0UxQzgzRTdFMjMwRkU1NEQ0Q0JEMUFFMDExM0VDCis6MTBBMjMwMDBGMjZGMDNFQ0QzQTAwQTZCNTAwNjhFNjI3RjBEMkVFNjAwCis6MTBBMjQwMDAwOUEwQThFOEQxRUZEQkI0RjNDQkFEM0UxM0M5QkJBRDk5Cis6MTBBMjUwMDBCRDUyMTBGNzY5ODkyNjdGNTYxQUVBMjc5NkU2QTA3MzQxCis6MTBBMjYwMDAyRUIxNUVGRTMzQzc5Qjk4M0IzRUZDRENEOEZCOTcxQ0FGCis6MTBBMjcwMDA3RUFFNENFREZCQjdDNDEyMUZGNjFCOTk5N0VDODAyREY4Cis6MTBBMjgwMDA3NjIxOTcxNDkyNTM3RkRFRTZBNDdEMEZGRDQwRkQzRkJCCis6MTBBMjkwMDAwN0IzMjhBRkU5RUI0NTBBMEIyOTgwRjc0NUIzQkNFRkJDCis6MTBBMkEwMDAyMURENTA3RTg3MjJFNDc3Nzg3RUYwM0M5QUY1NzFGREJGCis6MTBBMkIwMDAwMkYyM0MzNERDRjlCODM4QTdDNkYzRERGMEY2MEQ2Q0Q5Cis6MTBBMkMwMDA4MERBRTEzOUFGQUU1RjZEMUZDMDlBQzZBQTAwRjc1REI0Cis6MTBBMkQwMDBCN0RCM0M2OEJGMzQwMjVGMzc5NzBERjFFMTMyMzExNUNGCis6MTBBMkUwMDA4RDBGMUI4NDlGQjc3MUM5NDdCNDFGNjhFQzkxMUNFOEEwCis6MTBBMkYwMDBERjVERTZFMTdDQjgwQ0Y2NDlFNkQxOTdBRTVCRDYwREEyCis6MTBBMzAwMDA3QzE4MDZGNzQ4RUI3ODVDQUU3RTFEMEZFNkZGNDlGRTMxCis6MTBBMzEwMDBDQ0VCNzJGNUVCNTc5QkJGRTYxNzFGOUM2N0FGQzRENzFBCis6MTBBMzIwMDA1N0M0QkMyMkY3OTc5MUZFNkM2RDdGNzhBNTcyRURBNjlECis6MTBBMzMwMDAwODdDRENGNEJGOEM4RjkxRTREQURDREM5MUU0OUFGRURCCis6MTBBMzQwMDBCQ0UwMUJDQkI1Qzg3MzgzNUNFRTA3Qzc3MzAzM0NENzc3Cis6MTBBMzUwMDBGRDlGOUUxQjdDQTI3NjI0MUE0ODBGN0E3NUU3QTk2ODk4Cis6MTBBMzYwMDBBN0UzMzhFRERCNjVCMjBGQTZDOEZDMUNCQURFNkUyNjhCCis6MTBBMzcwMDAzRjZERTQ3OTZCQTMzQTQ1OUMyRkY2RkRGNjZBRDQ5RkI2Cis6MTBBMzgwMDBGQjhEMENGNUZBMTJEQjYyM0FDRjZDOTQ5RjMxMzlENDE1Cis6MTBBMzkwMDA2MUNFMTk5NTQzNjRCRjdGRDNGM0Y3NzVCOTgzRTdFRkI3Cis6MTBBM0EwMDA1OTc4RkVGRUFBRURGMzc4N0YxODVEQUI0QUMwRDAyRjM2Cis6MTBBM0IwMDBBMTM4OTY2MUU1RjYyMzgyNEZBMjQ1RkM4NDQ1MDkzMDE5Cis6MTBBM0MwMDA2NzU4RkI5MURBRkQzNDk3REJDQkFGOEEzODFBQjc4OTJGCis6MTBBM0QwMDBCNTYzN0NDNkMzRjY2ODJGRUU0QkRDMDYxRUU3RDM5MjRFCis6MTBBM0UwMDBFRERCOEU3MkQyQTI3MjNDM0ZGRUMyMkRDQzAwRjM3RjE5Cis6MTBBM0YwMDBEQ0Q4NERGMjI0NTA2RkYzQTA1Q0Q0RkMzMDVBRkY1NkU5Cis6MTBBNDAwMDBCMTVGQkQ1MkZFM0YzMEM4Nzc5Q0ZGMDdGM0ZGMjQ3OTUwCis6MTBBNDEwMDBGMDZGREE3OERGRjQ5QzZDMzNFMDQ2Qjc0RTE4OUQ4NzE2Cis6MTBBNDIwMDBCRDgxRTczQjU5OTdGMkYzNDhGRDhDQzRENzZGRTdGQTNCCis6MTBBNDMwMDBERUNDMjVCOUUwMUQ0REU3RkU1NzI4NzdBMkNCMDczRUJECis6MTBBNDQwMDA0NjdGMEZEQjZGNTY3MURGODE3RTBGRDI5NzFCOTJCOTZCCis6MTBBNDUwMDAxRTUzM0MxNTg4NjdCMEY3MkEzMDRFRUEwM0ZDRUZENTRGCis6MTBBNDYwMDAyM0RCODdBNzA2RTUxM0I3MEY0RjhEMjg5RkZFM0VGQjIyCis6MTBBNDcwMDBGMDQ3OTlCRUQzQzg2NzI3MkFCREY5QTgzRkQ3REEwMUFDCis6MTBBNDgwMDA3RURDRjczREM1RTM2QkI2NTkzOTdGNkU5MzM4NUZCMjFBCis6MTBBNDkwMDBFNjc4Q0Q3RjQyRjMwQTNDQ0JDRkM3MjNGOThBRTVFOUMyCis6MTBBNEEwMDBGOTZBMzBGRjRGOTZBQkI2NDEzOEZFOTdFNUVBOTJGRjY2Cis6MTBBNEIwMDA4QTQxM0ZFOEM4RkQwNDg4NkUxNTU1N0Q4NEI3ODE5N0IxCis6MTBBNEMwMDAyNUI2MzNDQzNGREREOEM3RTNENEQyMDVCQ0RBRjcwQkQxCis6MTBBNEQwMDBDMkRFNUQ5NEU3Q0RDMDc4QUY0RkRGQjM1ODU4MkM5OEZCCis6MTBBNEUwMDA0MkM4NjM2ODk3Rjk2Qzc0M0VEMEQwQ0RFMzQ4MUE1NkUxCis6MTBBNEYwMDAzMjNBMEY2RTQwRkY2NzA5RkEwNUVCMThEQTdGQ0ZBOUYxCis6MTBBNTAwMDBGRUMyQkNGMTc4OUU2MTBCQzhCMUU4Mzc5RkMxRDBFRUE2Cis6MTBBNTEwMDAzQkZCMUVDRjM3QThGRTEyMkM2RjVDRDlBRjNCODdBODQwCis6MTBBNTIwMDBGOEVBRjMzNUU4RDcwMDc4Qzk0RkUwNDJCRjREMTg5REVGCis6MTBBNTMwMDA2NkU3RjFGODRCMkRCRDI5MDI3RUY0RTMxM0ZGNzdDQkRDCis6MTBBNTQwMDA0MUI0MTdBM0Q1M0UzQTE3NjhEOENGOERCODBBRDk0Qjc2Cis6MTBBNTUwMDBGRTdCNzY1NzFDNDMzRTZBRDg1RjM5RjYzNUFBNkYxRERECis6MTBBNTYwMDA4QkY2NkVDNUVGNkIxREU4QTdGOEY0NUExN0M1MUY2NDhDCis6MTBBNTcwMDBDOEZENEJEMURFM0E5MkVEOUY4NEY4QjA5NzA3QTdBMkIxCis6MTBBNTgwMDBCRDlBMDlGNjJBREFCRjlGRUU5QjNBMTZFMUQ2RTRERkMwCis6MTBBNTkwMDAyNkY0N0Y0M0JGOUJFQzdBRkYzNkIzNzhCM0VFNDdGRkQ4Cis6MTBBNUEwMDBGN0NFMjREQTNGRUU0QkYxN0YxQkU3QkZDOUNBRTEwREJFCis6MTBBNUIwMDA2Q0I0RjJGNTJBRkNERTkxRUI1RjVCRjc0OUIyODFDNjIxCis6MTBBNUMwMDA0OUJBQ0Q0MkU3RDQ5QTVDRDg2NDY0N0U0QkNFOTAzQ0M1Cis6MTBBNUQwMDAxOTI3RTJFOTAwMUYzQzlFQUZCNzhFQzc4MTg4QkNDRDJBCis6MTBBNUUwMDBBNThGNkIzQzlEMzM3OTFDQzIzMzJFNEZBMTc2MEIyRDZBCis6MTBBNUYwMDAwMzEyRkFFMTE3OEFGM0Y5MUI0NDlDODUxNjY3NzVDNkE2Cis6MTBBNjAwMDBFMTVCODBGODYwMkI2Qjg2Q0VFNUIzQjFCRDgzRjNCRjExCis6MTBBNjEwMDA4ODlGODlCRUM4RURFODZDODc4OUY4QzZERUNFRjhCOTk4Cis6MTBBNjIwMDAxMkYwMEREMjY3RTI0MERGQTQ1ODk4NEY2RTY3NjgyMjlGCis6MTBBNjMwMDBFMkYzOTU4QjA2QzI4NzUyRjcwNjlEQTdDNDIyRDlBMEU0Cis6MTBBNjQwMDA5RjlDMERGREVCMEFEMDlGRTI3OEY3NUFBNDhCREFFMUNDCis6MTBBNjUwMDBBODQyRDQzREE3RkFFRUM5QTM3NURFNTQ4OEZCQ0JBQTY1Cis6MTBBNjYwMDBERjE4NzlCQ0UwQ0JEMTY0MDc3NDY2MkNBMzc4QzFCMzQyCis6MTBBNjcwMDBFRjAzQkY2NjVEQUEwRkI0MzRDMDU2NTM3QzYwNzZDRjNCCis6MTBBNjgwMDAzQkU0RDdCN0VGOTc4NjhERkI3QzM4Q0ZDNkUzNkYwMkVDCis6MTBBNjkwMDA3RDE0ODdDNjI2QkEwODFGQ0FDQkJGMEZBMEZEQTFBQzg4Cis6MTBBNkEwMDA1M0M4OTNEMTY2RjQxQUFDNDhENzU1OENGQ0YwNzk5RDA5Cis6MTBBNkIwMDAwRTAzRDIyNTUzQzQ5RDlDN0JFNUJGNDdGQjY5QkZBMjE3Cis6MTBBNkMwMDBGOUYxODMzQzRFQzhEOEJGMDZGNzVGQ0FBQUZFRUI2MDFCCis6MTBBNkQwMDAwNUIzRkFGRDRFNDMwM0ZBM0Q4RDAzMERFNDM3NzkzOTk2Cis6MTBBNkUwMDA5QUZDQTM5OTNEMzlBQkJGMDVGOUNDNzYwNzkzNTBGRTkwCis6MTBBNkYwMDBCQzc4NTcyNkYyNzUwMEU2OTkzN0NDM0M5QkYzOENCNEI2Cis6MTBBNzAwMDA1RTk0OTdBMzBEQThCNzk0OEQ4Q0UyMTQxNTY3NjIxNTFCCis6MTBBNzEwMDBDMUZEMjhFNEExOUZFNTgyNkZCNEYzNDkwMEQ3OERGQTBCCis6MTBBNzIwMDA2ODUxOUU3RjM3RDIzQjVBQzgwMUQ2MUM0NUZFNDRCQkI4Cis6MTBBNzMwMDBDMkZEMUVGNkU2Rjc5RjVEMDVGOTFEQzIxRjdCRjg5NTY5Cis6MTBBNzQwMDBFMjE5RTRCRjVCQTc0ODQ4ODcwQkNFQjk5OTBFRjhGRTIzCis6MTBBNzUwMDA4QjNDNkU4RkQ4OTUzRUU2QjA4NUUzRkYzMEM1NjU2NkNECis6MTBBNzYwMDBCRkNDRTNENjE0MjNFNzEzNjU5REFCMEJGRDgzNUZBNDM5Cis6MTBBNzcwMDBGOTI5RkVGNERBQjY5MDRDRTc1QjhFMTM4RkQ0QTg2MTBBCis6MTBBNzgwMDBGQjlCQ0Q1QzhGMzRFQ0U1RkJFQUM4RkRDQ0U1RjRDNzYwCis6MTBBNzkwMDBCMTNDQkQ1RDNFOThGRjI3RDkyNUVGMEM4RUZGNzdFRUNCCis6MTBBN0EwMDA1Mzk4N0U3RjE3Njk5RjQ0RUVFNzJFQjFCRjIzRkExQkIzCis6MTBBN0IwMDBDOTRFRDFFMjNDQUE4NkM2MjE3RTc4RDVBRUQ5NDEwMUU4Cis6MTBBN0MwMDA1RDFDNEM5NThEOEZDQjJDRkFGRTlGMTJGMTNCNUE1QzkxCis6MTBBN0QwMDA0QzYyQUJCQTBBRTNDRjA3RUU2M0U0NkZEM0UyNzZCNDIwCis6MTBBN0UwMDAzODlENDAxNURGNDcwNDBDMjBGN0IyRjA3Q0E4ODNFMkM3Cis6MTBBN0YwMDA3MzUyNTk0ODkyNjgzRkQwQ0ZCMDdEMTJDNkU5NDBGQkYyCis6MTBBODAwMDBGRUJDNkM4MjdGM0JGM0I0Q0IyNDE3NTUwOUUxQjc2MkUxCis6MTBBODEwMDA3QzQ3M0NDMjFERENCMjA4QzdCQkM5NDZFMzU5MzFCRTA4Cis6MTBBODIwMDAyMzlFRjYxMUI0OEU1MzdDM0NBRTczRDIxMjFFMEY5QTQ3Cis6MTBBODMwMDAwMkZBMTdGMzI5Qjk5QzJGQURCMzREMTRFN0E5QzU2REUyCis6MTBBODQwMDA2OEYxMUQxQTVFQUEwNEJFNTMwQTE2NjVFMTdFNDE4QkFCCis6MTBBODUwMDAwM0Q5MTQxNTdDQ0EyQTYzRkM4NzkwRkI0QjBEMjRGNzlGCis6MTBBODYwMDBCNUY4QkFDRTNDMzU4OEZDN0UwRUUzNDA2RDU3MUVFRjNFCis6MTBBODcwMDAxMTg5NUYyREVFRTNGQTc0N0Y3MkZFNzg4QUZCMjAzRDJBCis6MTBBODgwMDBBQUM1NkI2OEZDMTI0NkM3ODAxNUM2REZGQTMyQjdERjZGCis6MTBBODkwMDBBQjk2OTgwOEZFNzM0QkE3OTE3RkYxREM1MjAzQzM3NTBBCis6MTBBOEEwMDA1NEQ1NkJFNkZDMTczMURFRDZEOTI2MTZDMjdFOTVBMEFDCis6MTBBOEIwMDAxNUU1QTdDNjA3OTdCMzVGODFBRTg1RThCRjNERENCMjVCCis6MTBBOEMwMDAzN0U3MDRBQ0Y5MjMyREREOTQ5RUIzNEFEREYyMTg0QzMyCis6MTBBOEQwMDAwN0U2QTBBNDFBRkQ2NEM2NENFNTZBOEM2MzE5Qzg5MDBCCis6MTBBOEUwMDA4MDc1Q0FGNkU2Q0VBMjdDQzJDMDA3OTg5RkY2RTRBQzlCCis6MTBBOEYwMDA1OTBBRTg4OTczNzkwMzNCMjRBOEVGMkZGODcwMjZFNUZECis6MTBBOTAwMDA5MTI3NTMxODlCRjBDNDZGNjYwNjY4REVEQzFGMzU0OTNCCis6MTBBOTEwMDBGOEEzQ0M0RUZGQjVGOTA5Nzg1RkEwN0Y0RDFGRjk3REY0Cis6MTBBOTIwMDA3OERDM0ZDNjA1MjIzRERDMzYxM0Q5Mzc2RTExOEZDOTVFCis6MTBBOTMwMDBBQTQ1N0MyNjlFQ0M0MEJFMzU3OTJDOUQ2N0RCOThCQTEzCis6MTBBOTQwMDBCRjBGQ0JEM0NDNUNERjMzQ0VDRkFENzlEQzVGNEMyQUVECis6MTBBOTUwMDAxMjY1Njc5QUU2NUZFQTBGQTBCQzZBQ0Q3MjUyRkI0MUFFCis6MTBBOTYwMDBCOUJBREYxQ0U0N0UyRTNFRkU1QjA3NEFFOTFDNEE4QjI3Cis6MTBBOTcwMDAzMzY1Q0M5MTNFQUI5NEUyNTE3NEY5ODdBREZDNUM5NEE1Cis6MTBBOTgwMDAyOThFNzRCNDFGNUE4REMyNEUxNUY5QTgzNEZGNzdGMzdGCis6MTBBOTkwMDBDM0VDQTRCNzI2RkY0QjA5QUU4NzMzMDc3Rjk0OEI3MkI1Cis6MTBBOUEwMDBFQTA2MTNEOEYxQzNDOEE1RDQ0MjJFOTdDRTE5NkRFRDhGCis6MTBBOUIwMDAxMkQ4NkQ2RkE0RkFFNzIzQkU4RTQ3Q0Y5OUUyODQ3OTRGCis6MTBBOUMwMDBDRDhFQUYzNDM5MTFERUMwNTMzMkNBQzkwNDQxNkZFN0FFCis6MTBBOUQwMDAyQzBFOUZCM0RBMjcyRDg0N0U1QkFEQjA5RUExN0Q4MkM1Cis6MTBBOUUwMDA1RkYxOTJCREVFOUYyNUREMDQ3MEI3NEFDMjdFNjc2QUIzCis6MTBBOUYwMDAyQ0Q5RUQ4NTZBMkM5RUZCMkQ2QjdFODdFMkFFNjUyMUZFCis6MTBBQTAwMDAwNzY0MjEwN0RFNkVFOUNGNTVGMjQwRTU3NjZGOTREMUY5Cis6MTBBQTEwMDBERTdFNDc5QzNGQkY5M0M1RUVBODFCNjZGRkJCMjk5RjA4Cis6MTBBQTIwMDBEQjg3MzM2NEI1MTRGOUM4NzVGRkM0Nzc2QTgxMkY2NDc2Cis6MTBBQTMwMDA5MzI3NDhGNDRCQjdBQkM4RUY4N0VDMTVFRTdFRTg0Nzk5Cis6MTBBQTQwMDBDQUJDQUYxQ0UzOTY1QkQzRUYyQkM3QjgxMzM5Q0VFMzc4Cis6MTBBQTUwMDBGNjg1RTUzN0U1NzMzRUFFQzY3QTg4QjdFOEE2NzJENEM4Cis6MTBBQTYwMDA2M0ZGQjBGRTYyQTFCRjkyQkZCRkJGQzE3RUNDMUNBRTcwCis6MTBBQTcwMDA2NTk2ODEwQzA1RDZBN0M3RURERjhBNzRCQjMwRjc0MzE2Cis6MTBBQTgwMDAzQThGRkQ0MUNBNUIxRjYwRkNDNDVCQzY4RTQ5MzEyODBBCis6MTBBQTkwMDA4N0IyMjRDMUI3REM1RTNCNUFBMEY5M0Q3OURDRkJEMTFCCis6MTBBQUEwMDA2MkVFRjcwNDM5QzRFMzJCNEJGOTNEOUJEQTU5OENENjlGCis6MTBBQUIwMDA3M0FEODhCQjk4RTJFMEY3OTZBNjk0Njc3OTVBNjE2QTBECis6MTBBQUMwMDBEM0Q5ODA4MjcyN0FDQTcxNUYwQ0QyOEZDREYyOTdGQjk0Cis6MTBBQUQwMDA0QTQ3QjZDMzk4REJBODg2Q0I5NUE5NkE1ODFFRkVERTA2Cis6MTBBQUUwMDA1OEE4Q0Y3RkRCQTNDRjdGNjdDMjVGMEJDMkYzMUJERDBDCis6MTBBQUYwMDBERUU3NzFERTJGNDkzQzhFMzM3MDM1NzNEMDNDNUQ1MkZBCis6MTBBQjAwMDAwMEVEQTVFMkU3NTNCQTg0N0Y5N0UyMEQ3RjI2RjY3MzQ2Cis6MTBBQjEwMDBDRjRGNjA1NDlFQjhEN0IyMTNFRjFGNjg3RTcyNTk5NDFFCis6MTBBQjIwMDAxN0JCOTkyNTMzOEVGMDQxN0E3NjQwMTI3MThCMkUzQUZECis6MTBBQjMwMDAwQjYyMDdFRjc2NzBGQzQxNUQxM0Y0NzM3MEFFNEFFQjY1Cis6MTBBQjQwMDAzOEQxNjY2MEQ3RTE1QTJGQjc5MEZEQTRBRDhCNTYyQjU0Cis6MTBBQjUwMDBGMDM3RTBCMTIyRDUxMjg1RkNERTZBRjQ2Q0M2QkVFNEEzCis6MTBBQjYwMDAyOEIzOEE3QUI1MzJDNjQyN0RDQjNGNTY0ODJGQURCMjY0Cis6MTBBQjcwMDA5QTI5RjRGNUYwODM1MTk0QUY1MDk4MEZFMzM1MDBDNDRGCis6MTBBQjgwMDA1OTk4QkU2NUY0MDQ5QjcwQkU1MDBGRTdEQkVBNjQyNDVECis6MTBBQjkwMDBBRkU0MEExM0U5NjlFODk3RTg3QTc4QTMyMUM4NjhGRTY4Cis6MTBBQkEwMDA5NTBBQzU2MzBBOThCNTc1MDcyM0QxRjdDN0M0QkE5NjQ1Cis6MTBBQkIwMDAwRDJDNDQ3MjJDQzU0MjcyRUMwOEY0OEZGRDFFN0U1RDk0Cis6MTBBQkMwMDBFRTIyM0Y1QkExN0EzQjk2OUZCNzE0RDBGRDlDQzZDMTk1Cis6MTBBQkQwMDA3QjQ3OEEwMTgxMkIxNDc2OTRCMzk3REYwRkQzRDZCM0NBCis6MTBBQkUwMDAyNjVGMjJENzMzNDhDMTVDNTcyMkUzMjBBQUY4MEY0Q0Q2Cis6MTBBQkYwMDAyMzExRjUzRTIzN0I1RTNCM0Y0Q0I3NjhFNThBMTdDN0MwCis6MTBBQzAwMDA0OTFFQUNDRkVGNjcyNThBN0M2QTQxMTZBRDM3QTgxMjgyCis6MTBBQzEwMDAzMjk0QTFGREYxQ0JCRjIwREY2QUYyNjFDN0RBMUY5MzQ2Cis6MTBBQzIwMDA3Q0I4MTRGRjg1REZBN0ZDMzRCQjgzRTNCRjIwMEREN0JFCis6MTBBQzMwMDBBMTFDNTU5MDg2RkFBRUQ1RTk1MTdENjFGOTQyNTg0NjdFCis6MTBBQzQwMDBCM0UzMTAzRjUwMEZGMjMzNkIzRUNDNTVDMkZDODNBOUU3Cis6MTBBQzUwMDAwNTJBMDk0QkE4RTc4RDA3MzgwRTVCRDUzNDVDQUZDM0Q2Cis6MTBBQzYwMDA4QzVCQ0ZDNzhERkVDNzhFRUI4NjcxQTFERTYxM0I4Q0ZFCis6MTBBQzcwMDAwQkY1NzY1QkNEMjE0M0NDNzBFMzRGNTA3MUJDQ0I4RDhGCis6MTBBQzgwMDAwQkU4MjRBNDRFMTM3ODA2QkUwOEEwNUZFQUIwREQ0MEFFCis6MTBBQzkwMDBGQzM5NERDNEVGMUU0RUUwRTNCMTQyN0Q3QzRENkUxNDk1Cis6MTBBQ0EwMDA4QzRGRkU1ODdEM0NDRDBERDJCNjM2RDRDQjhGNTk2MzM4Cis6MTBBQ0IwMDA3NjIyM0ZGRTUyRjBDOUQxRTgxRkU3QTI1REY1Q0IzOUZECis6MTBBQ0MwMDBGOTQ3NTBBRTRDODk1REQ1ODY0QzMyOEQ3NTkzQkNEMTE5Cis6MTBBQ0QwMDBFNERFODVFNDBGMkIzMDBGRjJFRjlBMDJBMEZCMEZCMkY3Cis6MTBBQ0UwMDBERjlBODM5RDFGNzEzRTk2OEJGQTBGRTRDM0I3MEExMjU5Cis6MTBBQ0YwMDAyRTg1NUZFMzQ3MEQ2RUU0NDM1QzA3ODM3QzE4MDFCRjNDCis6MTBBRDAwMDBDNjQ3NkM3QTM3MDUyMDZFMDdCQjE0NTNDRDRFNjVBQzMxCis6MTBBRDEwMDA4OUM3ODlBQkU5NDNGMzAzMjY5RTYyNjlFMkYzNTgxNUJDCis6MTBBRDIwMDAyMEI4NkY3MDNFNDJGMTY4RDc4RUYyRkIxMERFRDk2MzE3Cis6MTBBRDMwMDAzRUNCNTBCMEIyN0I2RTAxRUVDMzAwREVCQUZGOUZGMDk3Cis6MTBBRDQwMDA0NkRBRTU5NzhCOTdENkUwOEE1Q0M3REFGOEQyOENCREY1Cis6MTBBRDUwMDAxNDJGREQzOENCNDZGMUQzOTM0NERDNjlFMzEyMDNDNUVECis6MTBBRDYwMDAxMUMxRkU4REVDRkUwNjY2MDlBMjFDQkU0NkQ4RDE1QTYyCis6MTBBRDcwMDAxQ0ZGOEIxMkY3N0YwNjBFOThENTNENjFGNkY4QTU3MTgyCis6MTBBRDgwMDBENDJBQzU2OTA3NTZGMjc4RUI0MTdCQkI5RURCREI4Mzk3Cis6MTBBRDkwMDA3QTREREMxQkU4MUNDQjY1NzlFN0REMkFDNTUzQkMyNDYyCis6MTBBREEwMDBGMUZBODFCOThDREJFQjc1QTI3Q0ExNDNDNDVCQzA1QzdBCis6MTBBREIwMDAxMjg3RTJEOTNCQkIxOEYxN0ZBNzNEOUJDQTUzNjRBRTEzCis6MTBBREMwMDA3RkQ4QjdCOEZFRTlDQ0UyRjY2NEU3QURGOTU0MEVGQkU0Cis6MTBBREQwMDA4MjUxODhGN0Y5MzJEOENGRkNGQzlFRUYwRkYyRjg3ODU5Cis6MTBBREUwMDA5MTdFREE0RDA1REMyRTFCQjQ3MzQ0M0VEMjJGQkIyQjczCis6MTBBREYwMDBEM0JGMDVGOTY1NjE4OTM3NDMwMkJFOUE2RkUyN0U1NzdBCis6MTBBRTAwMDBFMEJCNkQ3ODY3QTY4NjM1RUQ1NjcyRjBGRTQ1RDNCQjg0Cis6MTBBRTEwMDA4NjFDRTJCQkM3ODlFRjhBODFFRjcyNzQ3QzE3MkMxOEZECis6MTBBRTIwMDBDRkU1MkYwQTUzOERFRjA2RjlBRDMwMzI1RUNFRkYxNDE5Cis6MTBBRTMwMDA4RURCRTlFQ0ZFN0QwM0VFMkI3QUNENDQwNzJERUUzMTVGCis6MTBBRTQwMDA3MjlEODdDMTczQzJDOEUxNzFDOTMyQzFCMzZGMzg3OENFCis6MTBBRTUwMDBBRTg0RkZDM0Y5MkQ4OTcxM0UxRjY5MUQyNDI5MkM2MDIyCis6MTBBRTYwMDAyRjFCNUEwNzFCRERGRTEwQzIzRkI4MUVENkYwN0RFNDMzCis6MTBBRTcwMDAyNTcwQ0IzNkUyOEI5QjZGOTUzOUJGNDY3MzdEOEVFNzhECis6MTBBRTgwMDA0REM5MzA3RTlEMThGRkU2NzVCRTZBMjdENkFCOTMwODg0Cis6MTBBRTkwMDAwRjc1QkRGNTE0MTdDNkFBRjlCOTkxMDdGRTIwM0NBRDkwCis6MTBBRUEwMDA0MkNFNjlFNzVCQjM0NUZCOTk4RTNBMjNGQUUzNjZENTU4Cis6MTBBRUIwMDBFQUNGOTk2NkRCRjgzOUQ2Q0RCMzhDMUY4NURCM0RCMzdECis6MTBBRUMwMDBEOTg2Q0YzMDhFNzEzNjlFNDM2OUY1ODE4RkRFMkYxODdCCis6MTBBRUQwMDAzQzg3MkFDMDczQTgyM0MyQ0Y3MjBFRjgxQUY5RkVCNUI4Cis6MTBBRUUwMDA4NEM1REJFRTA2QkUyQkY4Njk0OTE5RkFFMzI2MjcyRTQ2Cis6MTBBRUYwMDBEREJEMTFGMjRGNkUyREEyRkM2Qjg5QjdEREYzMTY5NjA2Cis6MTBBRjAwMDBFRkM4QTc3Q0I1NDEyMjNFM0Q1N0NGREIxNzU2REMzQTUwCis6MTBBRjEwMDAyRDJCMDZFNUJGRTgxN0Q3MTNFRUQ3QTNGQzlENzU1MDgwCis6MTBBRjIwMDBDRjNEM0FCQjBDRTM0QkFCODVERkUwRENERDhDQ0E2Rjc5Cis6MTBBRjMwMDAxQzYzRTcyMUJCOEI1NUYyRkI1NTQ3ODlGMkVGRjE3RThECis6MTBBRjQwMDBERjE4RkJCQjMyOEMzM0FFQ0UxRTk4ODNGQ0ZENDZEOTk2Cis6MTBBRjUwMDA0QjQ1OTgzRjIyN0QzNjY3Qjg3M0FGRTI0MjI5MzQwQUU5Cis6MTBBRjYwMDBGMDUyMURDN0VCRDc5NjNEOTU4MjdFOThFQTJBOUUyRjE4Cis6MTBBRjcwMDBGNjU0QUVDQkMxNzJDM0Y5MzlDM0RERkY4RDEyRkI5RTBGCis6MTBBRjgwMDBDMUZCNkM2MjVEM0ZFRkZEOTBFRUFGRjkyQzkyMDdBNzFECis6MTBBRjkwMDBFODlCRjAyMUY5MUQ5ODRENzJBMEVCQ0NFN0NENTJEMDgzCis6MTBBRkEwMDBDRjNEQzlDQkUzNTBBQjJDQUI5MjUxN0U0REY3OUJDQTQyCis6MTBBRkIwMDAzMTlFRDg2MTE5N0IwNEUzMEM2MjI3NTQ4RTQ3QkE0RTQ4Cis6MTBBRkMwMDBCMjMwQTIyQkYwNzk0QzIxRkFCNUFGRkEyQzIzMDY5OUI2Cis6MTBBRkQwMDBDQkE2RTc3MzhEOEZFQTM0RkVBRUQ2RjMzMUFDNEY1Nzc0Cis6MTBBRkUwMDBFMUY4Q0JDQkRCOTFGODE4QzZDRkMwRjZCM0JGQTVENzNECis6MTBBRkYwMDAzNzgzRkQ0NUFDQjdDOEZFNDc5MjAzRjgxMzJFMTc4Nzc5Cis6MTBCMDAwMDBFMEU4QTY3NTk1ODZEMTdEMzlCOEVFM0FCNDc1MzcwNjc1Cis6MTBCMDEwMDBFMTMwMTlGQUU4MUU0RkE2RTQyOUEyMEJBRDEzM0MxNjQ1Cis6MTBCMDIwMDBEMjQ3MTE3MDZCRjBBNTgzNkM2MzY1OTdDMjg1M0Y4QTI4Cis6MTBCMDMwMDA2NjJGNzIwODFDOEU0NDFDOTc5NzQzM0IyRjhCMUI4MkY0Cis6MTBCMDQwMDAwQkM2QkYxRUU5QzBENjcwNzhCNjRCNEQ1QzZFODhGRDRFCis6MTBCMDUwMDA4MUU2Q0Y2OEQwRTZEQkEzOUY2RjQ1MTRCRkQ3RUU0NkVECis6MTBCMDYwMDBCRjEzQjY3MzhEMkRGQTNBQjgxQjg1M0U5RDY1RjEzRDMxCis6MTBCMDcwMDA2ODg2MzlEQ0U0OUM0RkZDNzAwQjY4MzQyN0NDRkY2RjhBCis6MTBCMDgwMDBBOUZFM0FDNDQ3QUIxNDc4QjkzRjhCRkNGMTE0RkYwMTE5Cis6MTBCMDkwMDBGNDlFNTExODY2MDc2ODcwNDVFMkEzNjEwNDc5MTgwOUE3Cis6MTBCMEEwMDA3NzI0MUU4NkU4RDM5NzhDQTk3NjFGNkU3MDVFMTFGMzA1Cis6MTBCMEIwMDA2OUI1RjNGNTNBMzBERUNDREZCNTUwQzAxNDg1RkM5QkEyCis6MTBCMEMwMDA1MjExQzVBMTY4NzBCRDI5NzFCRjY0NDBFMkY3OEYzNDg5Cis6MTBCMEQwMDA3QjIyMTJCRUM4N0I3QTFBNUNFOEVGRTM3MDBDQUNDMjJDCis6MTBCMEUwMDAzQjgyMEYxNjZBN0UzRTRFQUYyNDAxOUZDOTIwMEQ3QjI2Cis6MTBCMEYwMDAxRUZFNjBBMTQxRjNCM0VBRTgxOTc5N0Y0REMzOUIxNkE4Cis6MTBCMTAwMDBFNzE1ODkyRjJENEVFQjkyNzNCNzg4NzNFNTkxRUE0OUM1Cis6MTBCMTEwMDA2MEE3QTdDNjVEOEE0N0VEREMyRTZFRDA0RkM5RkQ0MDAzCis6MTBCMTIwMDAwM0Y3REE0OTBFQzYwREZBMjk4RjI5NjhERjRGRjIxQ0EyCis6MTBCMTMwMDA1MkQwMkVBRkFEODEwOTAwMERERTE0N0UxRjBEREYwRjQyCis6MTBCMTQwMDA2NEY4QjcxNDkyREVFRTFGOEZGRTk1OUY0QzdEODJDRTgxCis6MTBCMTUwMDBBQjNFMzA3MDNGN0QyNDdFRjY4QzgwOUY5MUY4N0QyNDNECis6MTBCMTYwMDBGOEEzRDI3QzRGRTJCODY3QTRCRTBBMkNFQ0NDMTZFNzU5Cis6MTBCMTcwMDA0MkNDOUY4NUVCQzFFOUM4QUE0NEZGMTFDOEQ3QUZCRTM2Cis6MTBCMTgwMDBDMjREMkIxNjAxNURDQjMzRkRCRkMwNzZCNzMwREY2NEY3Cis6MTBCMTkwMDBBNDZGNUM4RERGQzhDRjQ5MThGOUUxOTc4QkZERTM2NDlDCis6MTBCMUEwMDBBMTc3Q0Y2RkUzRjExRUQ1REU1MThGNEQ0NEJCRjE5OEVGCis6MTBCMUIwMDA5MTA1NjlERDdCNDk3RkRFMjVFMDNGMEYyQTM2ODRGNTY2Cis6MTBCMUMwMDA5RkIxOTNGRTVERkNGQTdDOEFFMzI4RDg2QzE4N0E0RjE1Cis6MTBCMUQwMDAwM0ZFOEUwQTQ2RTlERUQzMjhERTFCQTdDQjk3NzZBN0FGCis6MTBCMUUwMDBFOEVBOEZFOUM5RDY5NThGMEQxNUU5Q0FDNzFEMkJEMzlCCis6MTBCMUYwMDBFNUM3Rjc1REEzQUI3RkQ1RjEyQTVERkVFQUZFNjlCQTJDCis6MTBCMjAwMDBGQURGM0EzNTQzOTdCRjc2RTBCQkJBRkExRjBGRkEwRjYxCis6MTBCMjEwMDA4NEREMTBGMEY2MTVDMkJDMTc4ODc5NUY3RjcxOUVBRTkxCis6MTBCMjIwMDBGRDlGNjJBNjFDNDM3RTVDQjA4MUM3QTU1NzAyODY3NDUxCis6MTBCMjMwMDBFRjhCNzQ3MEZCQTIwOUZFMjA3RDI3QjMwMThBMDc2Qzk3Cis6MTBCMjQwMDAwODRBOUUxMEMzRjgzNkJERkRCMUI0QTc4QkYwNzhCOTlCCis6MTBCMjUwMDBGQkY4MDVBRUI5MDYzNEI5NEYxNzBBRkJFMzJBNzYxNTk5Cis6MTBCMjYwMDA4RjY3RkQ3QUJBRTZCM0JDQkY4QkFFNjZCNzlFQUU1NkFCCis6MTBCMjcwMDA1NTRGRDdFODQyM0Q1REVEMUUzRDVENjMyN0U4RTlFQUE1Cis6MTBCMjgwMDBGNEVBRTkxQTVGQTNBNzZCODI0RjRGRDdBNEQ5N0FCQTIxCis6MTBCMjkwMDAyNkZCRjU3NDRENURBMkE3NkI3QTkzOUVBRTk5Q0Q3QThECis6MTBCMkEwMDBCQTY1MDVFRUQ0OTU4RjQ0NkY0RDlFRTZCNDJGRDdENTgxCis6MTBCMkIwMDAxRkE0QkI2RjA5QzUzN0U1NzVGQzUwRDdCRjQ2RjcwMDIzCis6MTBCMkMwMDBGQzQxQkExNzMwMTE4N0Y5M0ZBNDdCRTEyODNEQkQ0MTBECis6MTBCMkQwMDA2RjhEMUEzNTlFRUM4RDEyNEM2NzE3MDhCQkRFMzdCQzlDCis6MTBCMkUwMDBCREExQzk5RjcwRkQxRUJFQUYxRDQ5MkU1REEyQ0ZDNDdBCis6MTBCMkYwMDAzRTc3NDQ3RDE2QjFDRjdEOEY4MUJFQTU0MTM2OTBERjZDCis6MTBCMzAwMDBFQTU2QzE5Rjg3QTMzOERFM0ZDN0EyQUJBMTFFRDQ5OURFCis6MTBCMzEwMDAwMDcwQkQ4NzcwQzMzOEVGNDUxNTkzM0ZFMkJCQUNEQkNGCis6MTBCMzIwMDA4OEZEREZDRUZBMjg5REMzMDYyOEY1MzMwN0U5RUY3OUJCCis6MTBCMzMwMDBDQzQzRTkwMkU2MzMwOUZGQzRGNDUxMDlFOEI3RThBRkFBCis6MTBCMzQwMDA0MEZEN0Y2MUVFNUIxRkQwQjlENjFCRjE1N0Y0MEVDNUVGCis6MTBCMzUwMDA0Nzc4N0U5MkM3RDg0OTIxMEY0RUUwMzkwQUU0Q0Y1QTg4Cis6MTBCMzYwMDAwN0Y1QUJFQTBBQzNEQjQ5RTE2RjlDMzc0OTIyM0RDREMzCis6MTBCMzcwMDBFNDI4OEFFRjlBNzc4QjQ0RTc0NEYzRkU5M0E3OEI0NjQxCis6MTBCMzgwMDA0OTNDMUUyNDIyNkQ2REQ2RjBDN0Y3NDczQjQ3QTkwNDAwCis6MTBCMzkwMDA0NzFBRUIxNkY2MUNGM0RCNzJBODFGN0VFRUIxQ0I0NDA2Cis6MTBCM0EwMDBGQjU4Qjc4NUMzRjdBQ0M0OTQwOTcxNzQxRDhFRThFQUU1Cis6MTBCM0IwMDBCNjcwNzg5RTM1MzIwQkUyRjM2OUU2NTc5MTE4MEYyODg0Cis6MTBCM0MwMDAyMEEyRjgzRDhDMjJFNDhGNzlGRkY5NTYzNkZBRTlBMkUzCis6MTBCM0QwMDBBMjVFOTg1NTdEMzU5RUNCMDQ1NjkxOUZGQzdCNENFRjI5Cis6MTBCM0UwMDAyN0JGQkQ0OTIyM0ZGOUY3MDA0RTQ4REQwRThGMUJFRDA4Cis6MTBCM0YwMDA3QzJERkZCMDgwQjcxQUVCQzFGNzI0Nzc5Mzg0N0VBOTI4Cis6MTBCNDAwMDA3RjU4N0ZGQjdGQzhFQkZEOURGRDBERjZDMzM4NUNGOEQwCis6MTBCNDEwMDA4M0Y0RDNGQzlFODUwNjFFMjczMTcwMzdERjFGRURGRUI3Cis6MTBCNDIwMDAxRUUzRkVCQkU2NDA2NTAwQ0Y0NTY1MzA5NDMwOEVDQTEyCis6MTBCNDMwMDBDOEVGQzdFRjFDQzVGRDlFQzlBQzhGRkMwQkVDQTg2NjFFCis6MTBCNDQwMDBEN0ZBNDlGRTk2ODhGQjE3NjdDNUI5RTJBMjJFMEJDMzRGCis6MTBCNDUwMDAzODlEOTI3RDg3RTJGMDFDNzExMUYwNjAxRkVBNjFDNTkyCis6MTBCNDYwMDA0RkVGQkY5NDZDNzkyRDhFRkJGRDhDNEVCQzU3QTlFOTM0Cis6MTBCNDcwMDBGRjkxRjk1NDYxMjdDM0VFMzEwMERGMzUwRDY3N0ZCQ0MyCis6MTBCNDgwMDA1QUM0RTMwMzVBNUJGQTQ2RTEzOUEwMDZDRkZEMkRDNzQzCis6MTBCNDkwMDAyODJGMkIxRTg2RTc5N0Y4M0U1NDc4RkNBM0M5MDVFNUI0Cis6MTBCNEEwMDA2MUYyNEVCMTQxRkIzMDM5NjRCNEY5RTg5MTk1MzUyRDI0Cis6MTBCNEIwMDA3RDc0QkU2ODE0RUY1OEFENEQ1QkVFRjA4N0Q5ODk4Nzc3Cis6MTBCNEMwMDA0NjA5RkJDNzEyNjBCODRGRTAyQTBBNTNFNTI0Q0FCNTAzCis6MTBCNEQwMDBGRjYyN0MxRjZENzY0MzNGRTFGMkYzNjIwMjBCM0YxRjc4Cis6MTBCNEUwMDA2ODZGMzk0RUYwQUU5MUZDN0VFQ0M0OUNDQjQyNTZBMDA2Cis6MTBCNEYwMDA4RjU5QzFCQkMwRjA3RENCMERDNzMwOEVDQjY0NUZFRUUyCis6MTBCNTAwMDAwOUE5MjNFM0NERUM1NjJFODRDQkQzQjcyM0U0RTk0RjJFCis6MTBCNTEwMDA1QTA2OEE3MTlDRDY5NjdFMEQ1RjBDQ0Y2QjAzQzlEQ0YwCis6MTBCNTIwMDBCRTZFNkRGOTg0QkUxQkMwM0U0NDdFN0I3NTRCQzEyMTRGCis6MTBCNTMwMDAxNUNBM0Y4MEJGRjhERThFRDlDNUUxNjIxNzVEQTQ1N0ZBCis6MTBCNTQwMDBFNzA4M0U0MDVGNUMzQUYwQ0YwN0NENDZFMkIzMTVFOTJECis6MTBCNTUwMDAzNjNBMjc1OEYxNjZERTIxMkZBQzY3MTM0QzU3RkUwNkFBCis6MTBCNTYwMDA3MDBGOERDM0YxNjQxMkYyMTRGOEM5ODdGMkMxOTRBMjZFCis6MTBCNTcwMDBEMDc5NDE5QzYzMDZEMUU5RUZFRDRGQzNBRkM5Q0FFODZBCis6MTBCNTgwMDA5RDI0NTNCQThERUM4MjJCODVGMzZGQTNGODNCNDA4MzQ3Cis6MTBCNTkwMDBGNkM5NDUxN0M5RkYxNTAyMkZEQUJCNEYxRkRDQzNDODE4Cis6MTBCNUEwMDBERkIzRTI1RUVFMzc1QzUxQ0ZFODFFMDI2Qjg2OUY4QTA2Cis6MTBCNUIwMDAyMUJFRDFGNDRDMDJCRTUwMDMxRjNCNUE2MEM1NDExNzU3Cis6MTBCNUMwMDAwRkI1NTg5OEJGMDBFQzEwOENEQkNGMTlBMjYzODc1N0RBCis6MTBCNUQwMDA3MTYyODhDMUM2NkE1NzFEQTYwRjREMzhEMTgxRTJFRjRFCis6MTBCNUUwMDBFMTg5NUZGNDYxOEE2NzA0MzhCRUEzODkwNUQxM0VBNjZDCis6MTBCNUYwMDBCMzdGMThERkI5MDRGMjMwN0U4QzI4OEZGMUYzN0NBQzc2Cis6MTBCNjAwMDAyODhGOURDREYzRTlERUU3QTQ2QTA0MkNFMjNDMkJERDE0Cis6MTBCNjEwMDAxNjM3MzUxN0U1RjQwMkM2RUY4MThCNzcyMEI2MEI3RDIwCis6MTBCNjIwMDA5MTZBOEJBQkFCQzZGMkRCMTlERDBCRDFDQTdGMkFDQTlDCis6MTBCNjMwMDA5MzZEMUZCNUU3QTAxRTk5QTU2RkJGNDVFMDIxQzlGNjIwCis6MTBCNjQwMDA1MUM3MjQzQUY3RDI5NzZCRTc0QTA5QjZGM0M3QTg3REVBCis6MTBCNjUwMDA4OUJFRkM1MUQxREU2RTNCREYzNzA5Q0I3M0Y1RTMzRjhBCis6MTBCNjYwMDAyOENBQTM2RDVDMUUzMjFGRTNFRjE1ODhGMjA3NDRCOUE4Cis6MTBCNjcwMDAxNUNCNzE3QzBGMkY5N0I1NzczOTQ0QkQ3NTAyMEU4Q0IxCis6MTBCNjgwMDBBOTIzQkZFQjI4RUU3N0RERDE2MjI5MjFCQUI0NUMyNDZGCis6MTBCNjkwMDBGQTNDRDRDMjI4N0Y2QjUxMUNDOTA5NDMwREM3Nzc5QzYzCis6MTBCNkEwMDA4QkYzODNBMzk5MERGQjRFQzFBRDQyQUVDNUE4RkQ1RUUxCis6MTBCNkIwMDBFRjMwNzI0RjJCOEY3M0YwNzcxODY0Qjc4OUY4Qzk2QzJECis6MTBCNkMwMDAxMzcyNDNBQ0M3NDFCOTIxMzU3OTM4OTM3MTNGRkRFNTE5Cis6MTBCNkQwMDBGODFBMTZEQTA1QjQ4RjMyRTAwN0Y5M0FFRDFFMDNGM0QzCis6MTBCNkUwMDA4N0M5Q0I5NDY1NTFDQzFGNTZERkJEMjA0RTk3NEZCQzA4Cis6MTBCNkYwMDAzRDQ1NTdERjM1MkI1QjU3NkUyQjJGRDI5NUIzNTk3MUQ0Cis6MTBCNzAwMDBCNDZFOTYwQkZFOEEyQTI5RDM5NTZCRUY0M0IwRERBMjY3Cis6MTBCNzEwMDA5RTU4QkZDNkRDNkI3NEY1Q0UxN0FBQjFDOEUzMjdBNzQ1Cis6MTBCNzIwMDA4MkZFQTE3ODA2OEYwNUU1QzM3MjdCNzYxMkVBOUZBNzk5Cis6MTBCNzMwMDA1QjI2MTA3MjlFODU3NTA1NDYyQjdCQzZDOUUzREM5RjkwCis6MTBCNzQwMDBDMUYzNDMyOEZGNTk4Qjk3QkVFRjgxNzIxNUQyNURCMENDCis6MTBCNzUwMDBFRTU0QThERkQ1RTJBMEZDRTMyRDZFNEFCN0I3QTg5NDVCCis6MTBCNzYwMDBGRUI0QTU5MENBQjdCNDc4MjhGRjE4RjQ4RkU5QTNEMDI3Cis6MTBCNzcwMDAwRjdFN0ZBNEE1ODZGMjFCNUI3Qzk0N0ZCODY1MzZFNUJGCis6MTBCNzgwMDAxRjZDRjE1M0ZBNDBDQjEyRkFCRUFFQTU4OUYyNkI1Qjg3Cis6MTBCNzkwMDA5QTI5QkRCRjI1NDA2OTZCNEIzQjZGNTdDNEY1Q0MzMzJECis6MTBCN0EwMDBFMjVFRUQzMzk1RkNCRTdDMjQxRDNCOEI4NDFGNTJDNEFFCis6MTBCN0IwMDBBREQ4ODdFMjU2M0E4QjMwNkVBNUJCOUZFQzcwMkQ2RUVDCis6MTBCN0MwMDAwNUU3NERGRDU5RjlGQzIzRkI3QkFBODhEQjZGNDVBQ0VGCis6MTBCN0QwMDA2RjU1MzQ1RkNGNzQzRTlDRDdFMzU5MUQwRDdDOUZEQUMzCis6MTBCN0UwMDBDNEU5OTBENTMzNDBFNUM5NEIzODJEOUUxMkZDQzk1Q0E1Cis6MTBCN0YwMDAwMTk2NTY0MTUxMDI1NEVGQUNENDU3MTVDRENGRDUyOUZGCis6MTBCODAwMDBDRTkxQjk2MTlFMTVFMkZEMjY2MkJCQTAwMUUxNTIyNkYwCis6MTBCODEwMDA3MEZEQTlEMTc1NzBERTRFMEUyN0NFN0YzODc4RjcwQkZDCis6MTBCODIwMDA3OEU1RjI2RUZFMkU0QjRENDcwOEQ5M0VDQURCNDRFRjU5Cis6MTBCODMwMDBCMjU4NjZGQjQyMEFBNDJFOUY5RkRFODkyOEJBMzgwNUJCCis6MTBCODQwMDAzNjY3MjA2RjJFNUVDNzU0NDhEMzk2RTlGNzZEMjkwQkYzCis6MTBCODUwMDBDQTc0RkIyMkY5RTI0MzRDMDUzOTYwMkJEMUVGQUZBMjQ5Cis6MTBCODYwMDA3Mjk3RUJEQTU5RDI3RUE4MkIzN0I5NTZFQkNBRTdERENGCis6MTBCODcwMDA5NUI1QzY4REY4NENFNUU3NEJFNjBEQUI1ODMyQzBCNTMzCis6MTBCODgwMDBCMDczMjNDMUY1OTE5OEM3NTk0OUE1RkJFNTgxN0Q1QTRECis6MTBCODkwMDBCQzA1REY1RjNDMjlGNDBCQjM2QzIwN0JBQ0MwQzlCM0EzCis6MTBCOEEwMDBGOUIxMDEwM0VBODc0RkZGMzU5NkU0RDIxMzhGMUI4MjZCCis6MTBCOEIwMDBFODQ3MDZGMTY0QzBGNTVGMEM2NjFGOTY5N0IyN0VDQTMyCis6MTBCOEMwMDA2M0E4MENFNkM3MzI1NUM2RkMzODM2NDBGQjJCRDg1RjYwCis6MTBCOEQwMDBCQzVGODQ3MUFCQjJGRjcxMkJFNENGQTRGQjlGRTQ3MTFBCis6MTBCOEUwMDA3MzIxRDI5RkY5ODI5RUY5REE3RTZBQjMxMkU5NUZFRTg0Cis6MTBCOEYwMDAyRjIyRkY4REZFN0U1RDlCRDg1RkI0NTlCOTlGNkU5NTU4Cis6MTBCOTAwMDBCMzIyMDlFREQ2QjMyM0M0MzlEQUREQUYxRTVEMDBGOEVBCis6MTBCOTEwMDBCNjI3MUZBMjc0RDAyRkE3MUE4NkJEM0ZGRTQ1MDRGRjhECis6MTBCOTIwMDA4RjAyNjYxN0ZDRkYwNUYyRkY5OUYyQjcxM0QxMERENTEwCis6MTBCOTMwMDA5MDNCNDBFQkUwQUNFNDc1Q0Y0NUZDQkUyRTczN0U4NEJCCis6MTBCOTQwMDAxRDE3Q0U0RjExRjg1NUY2NTVCQUU3MDIxRTk1Mzc3M0ZECis6MTBCOTUwMDAzQzAxMzYzNENFMTMyREM3NzMzMDBFNDFDQkU3OEIzODA0Cis6MTBCOTYwMDBEREJEMkRDOUI5RDU2MURGRDU2MjRFQzc0MkQ2NTc4MzNCCis6MTBCOTcwMDBGQUFBQjBDNEUwMDk2MkM3NUU4N0NFOEY2MUNERURGMDUwCis6MTBCOTgwMDBFMjdCMDg0QTE5RjNBMDk4MUJDNTNBNTZBM0VFNTZGRTZGCis6MTBCOTkwMDAyNjUzOUM5NTcyRjg2QUE2QzI3RUM2NjYwQjMxOEM0QjA0Cis6MTBCOUEwMDBEM0ZBNjVDMjFGNzI4RjkwOUI1RjM4QUE2M0U5OURDQjYzCis6MTBCOUIwMDA5NDQxRjk4NzNBOTI3RDYxRjNGNjIxMUY3REQxNjlFNEM0Cis6MTBCOUMwMDBGMzNBQUMyRjJGQjQ3MUJGRTFBMjQyNTM1MDk1RjA1RDEyCis6MTBCOUQwMDBCNTBFN0FDNzUxRDkyMUIxQjQyQzg0NjMxMkUxODExRDBGCis6MTBCOUUwMDA4QzI2M0U4Q0RFM0M5QTA1NjBCRDk0M0JGRDk2NjJGNDRECis6MTBCOUYwMDBEQjg1RDQ4Mzg2MUNDMTkzNTBBRkJFRDhCNDEzRURCMzlFCis6MTBCQTAwMDAwMkM0OEIwREYxNzI2QjZFMzUwRTlENUI0OEY4NUQyODlDCis6MTBCQTEwMDBFNjNEQkU5OEQzQUIyRDNEMDIxRUU2RjFFMjdCQTc4QjNGCis6MTBCQTIwMDAzQTM1M0Y4RTdFOUUwRjk2NTc3RDA3REY4NTZDRUQ5M0VFCis6MTBCQTMwMDBCOTVBOEJDMEU3N0E2M0RGRThCOUQwRjU5OTdFODA0QkJECis6MTBCQTQwMDAyNjM4QzcxN0EzMERCQUI5ODIwNTQ4OEZGM0Y5RDUzRjM5Cis6MTBCQTUwMDAyRUIxQUQ1OTI0OTc2QTQ4OEY4RjM3QjBGMEYzNTMyRDJDCis6MTBCQTYwMDA5RDU4Q0NFNUVGQjEyMjFFODc2QTc3MUYyNTdFMUNDQTQwCis6MTBCQTcwMDAxRjM5QkEwMEYwRjFCNDgxMTVEMkI5QjE4MUVGOEZCNTk5Cis6MTBCQTgwMDA3ODFEMTlGRDAwNzhBRkExNThDODQ1RDZDNkE2QTFERTFECis6MTBCQTkwMDA3NjFBMjhGRTU0RUU4QUEyN0JCM0IyNTNBMUI4RjczNkM5Cis6MTBCQUEwMDA1QkI1RTM0RUVDQzdBMUQwMzlEMTE0Nzk2MjFGREFEMTZFCis6MTBCQUIwMDA2NkE3NjExQ0RBRTE0Nzc2RkVCMDBGRTM4NkU0NzQ4NTgxCis6MTBCQUMwMDBBMURGQUJDREExNzAzQjI0Q0Q0MEYxODA4QUIzREE4MkY3Cis6MTBCQUQwMDBFNzRBRjlCNjEzOTU4OENGNDM1RDNGQTA3NzIyRTRFRjlDCis6MTBCQUUwMDA4Qjk4MURFMTE3MzMwQTkyQjVCMTI2RUEzRjkwQTY4OERDCis6MTBCQUYwMDBGNzY2QkNCNTYzMTNDNTkxODg4QUZCQTE5QTRGNzBCRkU2Cis6MTBCQjAwMDA3REM0NzFERThBRkIwMkQ1QjY4OEZDODFGNzE1RjM3RDEyCis6MTBCQjEwMDBBMjExQ0YwRjIxRkZGOENBRjM0RTk0NUZBRjc3QUQ4OTIyCis6MTBCQjIwMDBDQjQyN0IzQUE4OTAyRDUyRjhEN0Q2MTQ3QTBGQTFDQkVFCis6MTBCQjMwMDA0NEVGMzU2ODc4Q0QwQzI4QkE3M0M4RjQ2NjdEREUxQ0Y2Cis6MTBCQjQwMDA3MTFFNjk4Q0I4MjdCNzVDOEM4RjI3OTdBMUIwRjkxODQ0Cis6MTBCQjUwMDBERDdDRkZDNjVDMzZEQUZGREM1NzJDREVFOTE0Rjk3QkFFCis6MTBCQjYwMDA0NDdFQUYzMTkwRTIwMUZDMUNFRTVBOTQ4OUYzQkFGMEE2Cis6MTBCQjcwMDA4MjlGRTJDRTQ3QjJGRjI3MTVBQjYyQkM4MEQ1NDBFRjczCis6MTBCQjgwMDAwMjg3QUMxODg3QkVCQjg1NzlEMENFQjMwNDE1QkEwNzNGCis6MTBCQjkwMDBCMDQ3QzhCMzVDMUJFN0ZGM0I0QUY4N0E4RDRDNzMzQjU4Cis6MTBCQkEwMDBGOEJBNTM5RTg5MEE0NjIzREQxQ0RENjUwMTU4RTdDNUI2Cis6MTBCQkIwMDBBRjRFNjUyQUU4QzE1Qzg3RDc4MEZFRjdEQzY2OTMwNzQ1Cis6MTBCQkMwMDBFRENGMjlCRkIwMTE5RjlDQjdGMTM4MkVBNUY5MDExNTEzCis6MTBCQkQwMDBCRkI3RUVBQzI4NTRDM0UwMEVCNjM4M0MyODlGNzZCNjBCCis6MTBCQkUwMDA1ODNDMTgxQjFGMUM0MUJFRTYzODBEMTQzRkFGMUE3ODk1Cis6MTBCQkYwMDAzQ0U3MkVCMTFFNzcxNUYzRjc4ODc2MEEzOUIzNEIwOTY3Cis6MTBCQzAwMDBDQzQwMzg3NzAxM0QzMTZFRkZEMDA2NkUxRjJGNUY2NTQ3Cis6MTBCQzEwMDAyMTM4OTZCRjlFNDNGNkQ1NDg3ODdCQTJDNUVEQzk0NTJECis6MTBCQzIwMDA3ODM2MTg1MkQwNUY1NUI5MkU3NzNEQkVERkIxRENDRUU1Cis6MTBCQzMwMDBERjM3OTY2MzhCMUVDM0FCMTFFQ0Q3NDY4NkY2N0M2QjYxCis6MTBCQzQwMDBDQzM1OUVGOTYxRjI1RDhFOUQ1ODg4N0MyNUNCODExNEEwCis6MTBCQzUwMDBGNEU3RjQzQzdERTEyNjhDRTcwNUZBNkRDNTdDQThGODk1Cis6MTBCQzYwMDA4MzlCMzA3RTc3QUYzRDkwODJGMUJEQzc4QTNGRTJFNThFCis6MTBCQzcwMDAwOTgxQUQxOERGREI1NzdDOTI5N0E3MDc1MjBDOTAzRkU0Cis6MTBCQzgwMDA1RTdDOUE5N0U3MDVCNjYyQkVCRkY4MkNDRkUzRDkxQjVFCis6MTBCQzkwMDBDOENFNTNDNUU3NkYwQUEwQkZDNUU0NTk4MjAyRjlFN0QxCis6MTBCQ0EwMDAwMDdGMDkyQ0IxNkU5MTlFMTY3OEQxQ0E5RkMzRUZCMDY4Cis6MTBCQ0IwMDAwMURCMkZEMkM4RjI4M0EyNURDRjA4RTUyRjhBRjJERTI2Cis6MTBCQ0MwMDAxMUZBN0Y0NUI0MEI4REQwRkVCMDY4Nzc2NDg0RjY0N0Q3Cis6MTBCQ0QwMDA0NUJCNjMyMzk0RkY0QTk0QkYzMTQyRkZGRjJFREFGNTQwCis6MTBCQ0UwMDA4REQwRkU2REQxRUVERDExREFGRjU2QjQzQjNFNDJGOTQ4Cis6MTBCQ0YwMDBGQkEyRkMzRjIyRkFGRjQwRDRFRjE3REZCM0VEMUJERUJGCis6MTBCRDAwMDA0N0ZGN0QzNkM4MTE5NDRCODVGNjBENzFCOENFNzdCNkQ2Cis6MTBCRDEwMDA5NzEzRkZCNzU2RjA3MzJBOERERkIzMjU0NkVGMEVERjdBCis6MTBCRDIwMDA1NkMyREYzQkJCQUQ4NENCNzFBNTg0RjMzOUYwRTFDM0QwCis6MTBCRDMwMDBDODc3Q0JERjk0Mjk5RUE4RDVFMDM5MTU0NDM5QkFERUZGCis6MTBCRDQwMDA0MEY2QzBGMkQ3Rjk3RTdERjkzQTI1MTg3RTFGNDg2QjgwCis6MTBCRDUwMDBBRkMxQkYwNkUxMDNDNjZEQzMxNEQ2REI5N0M1RkM5QzFCCis6MTBCRDYwMDBEMUVDNzY3QjZBQzNFNDk5RDFBMUNGODNCQzYwMjg3N0ZDCis6MTBCRDcwMDA0MTdFNTNEQzc4RTFCQUFBRjZDMjcyM0NFQjMzOTAwNUZGCis6MTBCRDgwMDBBMkQ0NUI0MkY4OEU4ODYyMTc3QUMxNTFERTUxODhGMEU2Cis6MTBCRDkwMDBEOTE0N0EzRjQxOTNGM0NDRTZENkY5MzVEQTZDMEFCRDczCis6MTBCREEwMDAyNzI3REI3OUY5OTQ1RjRDNzRBMDlERDVDNkZDN0Q1RTk2Cis6MTBCREIwMDA2Q0VGNTZDODhFM0ZENDVFRTY0MEI5NjdCMjJGNzBFMDk0Cis6MTBCREMwMDBGQUZEQjg5NEUzQkRCQUExMzAwQUU1QjVGQ0EwODFFNDYwCis6MTBCREQwMDBGNzExMDc1RkVGM0JEQzNDQ0UwQUY0MEFEREFGMDI3OUQ2Cis6MTBCREUwMDBFRDQxMUQ1MUMwNDJBQjUwNkVFRTdERThFMDVDRUVFN0U4Cis6MTBCREYwMDA2M0Y2QjExNTc0N0Y0OTNCNTc5Nzk0QjA3RDQwNkQwOTQ4Cis6MTBCRTAwMDBDNzRGQTZEMDIzMEFFQTE3NDg3Nzk1OEI3QjM3MDFFRUY4Cis6MTBCRTEwMDA4RkNBNTQ5ODNCMzVFQ0ZFNzA2RDg5Q0NFRjNENjlFN0Q1Cis6MTBCRTIwMDBBMTcyMkRCREFCOTVCMTUyRDE5RDIzQTREREEzQ0Y5QkIzCis6MTBCRTMwMDAyMkY0ODYxMkExNTc3MkRBNDE0RUVBQ0U0RjFDQkFGQ0E4Cis6MTBCRTQwMDBCNzRBODQ5RkM3QzMzQzY4Qzc0RUY5QzUwNjkyODdFN0M3Cis6MTBCRTUwMDA1MUJGNDkyM0NCQkQ0MUY5MkJFNEYxMkU0NDAwQ0FEMTk3Cis6MTBCRTYwMDAwMEJGREY3RTY4NDNEOUFGOTBERUNCRDcxOUU4M0RFQjRBCis6MTBCRTcwMDAyQjk1QTMwQUUyMThGMDkwRTc5NzQ4MkZDMDg0NTI3MEUwCis6MTBCRTgwMDBERjc0MzkzQ0U0MTk3RDcxRjRERUM3NjVGMDkxRjc2ODIxCis6MTBCRTkwMDA3OTFDQ0FEQjNDQkY0MkZENUZBMjM3MkU4M0FGNjcyNTBBCis6MTBCRUEwMDBDRjcxM0ZEMkQxMTkyNUVDNkE2MDAwRjREQkM1NDU3NTJFCis6MTBCRUIwMDBFMUY5QkU0OUY4NTNCNDM4NjUyNTQ5RTFFRkY1OEI3QkNDCis6MTBCRUMwMDBCMkIyRTBFM0ZCOTk1NzhEQ0JDMUY3OEE5QUM4QkZCRkU2Cis6MTBCRUQwMDA2MkRGM0Q2RUI0REJENzFBRkMwRUNDMUY4QjlCMzY4MDI1Cis6MTBCRUUwMDBFMzJDODc0RDNGRTI2RjJGRjY0MUVGNzJCRTdEMzNGQUIwCis6MTBCRUYwMDA0REJBODMyNkVENURDRDEwRkVCMzBGRTM4RkI0NzczQkQzCis6MTBCRjAwMDBERDY0QUY4OTdDRDVDREQ1MzBERjZFQzU1MThDMjY2ODE4Cis6MTBCRjEwMDA0N0M5RTQ0RDQ2QjA0OUY3OTlEODYwN0RCQ0VGRjdGNEM2Cis6MTBCRjIwMDAxMTgzRThFRkM2NERENTIwOTdGNjQ1MzFEREJCQTVGQjYzCis6MTBCRjMwMDBEMENGNEVGOUU5OUJGMDlENTIxOEVGNDYxOUY2NjYzQkJCCis6MTBCRjQwMDA5Rjk5QjVDOTc2RjUxMDNDQkI5RkZERUVBNjU1RThCMEFDCis6MTBCRjUwMDAxM0ZCMTQyN0UzRUZDRDlGNTFGQjYzOTBCNEIwNUY1OUZGCis6MTBCRjYwMDA1RjgyRkJGNUFFMTM4OUUxRkI3NUFEN0VBQ0E4REZEMDM3Cis6MTBCRjcwMDAzQkQwRjA4QzRBRjUzQjRBODAxRkVBN0IwNjYyNEEwOEI4Cis6MTBCRjgwMDBERjAzMTVFMUY1NjM4NDFGMjBBQ0ZFQTZBRkFCNUZBODBECis6MTBCRjkwMDBDMUYzQ0NEQjM3OTdGMEZBREJCMEZFNTlCNTNGOTE2MkM1Cis6MTBCRkEwMDA3QTIyRTA4OUJGQjRGRjlEMDRGRjA4RkQxNzg5RkE2Nzc0Cis6MTBCRkIwMDA0MjZGNTNGREIzQUMzRkIxMzQ4QkRBM0Q4NUUzOUM3QkRDCis6MTBCRkMwMDBFM0VEMEEzMUVGNDQzQ0M3NzlEN0U2RkQxOTdFNkZDMTM2Cis6MTBCRkQwMDAzRTcwN0ZBNzM0QTlGOEJEREJEMkUxNDBGQkNENkFFQzBGCis6MTBCRkUwMDBGMEExMUNDRUM1RjdDNzI2MENBNUNGQTJGMjE4N0ZFOTk5Cis6MTBCRkYwMDBGNzQ4N0VFRUI2QjBGODVBRTRENzY2MDNFRDZGN0FGQUVBCis6MTBDMDAwMDAwRDBGMjA1RkVFNDg5QkU4QzBGREYzM0U1MzVGNTkwOURBCis6MTBDMDEwMDBEQUFGMDc2QzY0QkYxQTMyM0ZCNUEyREZEQzVDQzBENzcxCis6MTBDMDIwMDBCRkQ1RDlFNDI5ODFCQzM1QkQ4NERFMEY5NUVGNURERTM3Cis6MTBDMDMwMDA0REVGOThERkM3REZGNzUyN0U2Q0YyRUY0NkZFMEEyRDE4Cis6MTBDMDQwMDAyRjVDMThCNkJFNzc5N0YyN0I5NkVCNUVCMzZEQzBGREEyCis6MTBDMDUwMDBDMTNBQTNBN0EzMDBFRDcwQkI0MjcxOUZDQThGMEY0RUQ4Cis6MTBDMDYwMDAyM0ZCRjBFNzA2NDZGMjFGRTY1OTA1RkRCNkNENTVFODdECis6MTBDMDcwMDBGNzMwMEM5NENFRUIyQjIxN0NGODdDNTU1MDJGMjM0MUNDCis6MTBDMDgwMDA5MUYwN0VEMEZEOEFDRjgyRTcxRDY2NjFEN0VERjBGMDlBCis6MTBDMDkwMDBGQjYxREFCODE3ODRGRDc5QTE4NEJGQjdCNjIzRURDMjdFCis6MTBDMEEwMDA3QjhCNURGOEZFODM4OUVFNzVEQTk2MTk0MkE2MThCQzgzCis6MTBDMEIwMDBFN0I2RjNENDYyQTQ2Nzc0RkYzQUJDRTcxQzk1QTIzOEQ0Cis6MTBDMEMwMDA3MDdFM0ZBRDg1MzIzQTk3RUJBNkVGODE3QTAzRUQxQjg4Cis6MTBDMEQwMDBFMjk3MTlCQ0U4N0Y4Q0NBMzVFOUZDMUQzNjE4MjdEQ0NECis6MTBDMEUwMDAxRjEyMzNEQUZGNDdBNEU3QjgzNzk1MUIxMUNGRUVCQjE5Cis6MTBDMEYwMDAwREY0M0VFQTgzRUU3NzJEMDY4MDMzQTY1Q0RGREUzMTU5Cis6MTBDMTAwMDA1MURGM0VBRTVBNUZFRUFBRDU5NzI3Q0VEMjk3QkI2RkNFCis6MTBDMTEwMDAzNzQ1Rjg3NUY0RjkyNjhEQUY0MDI2RDg0MDRGNDVGMUU0Cis6MTBDMTIwMDAyMjE2NjVCQkQwODJGQjlFQjVBRjQ1MzFBMkNGQ0E0RDZBCis6MTBDMTMwMDAxRDA1QjgzRUEzMDcwODVGNTE0NTUxRTQxNzU4OUI2Qzk1Cis6MTBDMTQwMDAyMkI5QkVCNjk0RkJGNTBGQTc5QjZFQTQzQ0NDMEJGOUFECis6MTBDMTUwMDA2MzQ3REE1MURBOEY1QzgyMTdEQkE5QkY2MkZGMzYxNkJDCis6MTBDMTYwMDBGNjFERkRGMkEzQkQ5NjUyMUU1N0MzREMxNUU4Qzc2MzRBCis6MTBDMTcwMDAyNDBGOUY5NUJDOUU0Mzg4RUZCN0I4QkY2MjQ3MzNGNzQzCis6MTBDMTgwMDA2MzNGMzg4QkM3NDFEMjBDMkE3MEJERjNGQTMxOTYwRDRDCis6MTBDMTkwMDA3REI4MkY4QkIxQjVERjhERjE5RDkxNzg0RDE0RTcwREYyCis6MTBDMUEwMDAzQkYwNzYyRkYyOUQ5RkJGMUJCRDQ2QkI2Nzg1REYyQjAzCis6MTBDMUIwMDBFOEQ2MDRCRDhCMzY2QkI0NzhFRjRGRDgwOUIxRUVGOEYyCis6MTBDMUMwMDA5MkI2QjBGQjFBODlDMjZGRjJGMEM0Nzk1NkQ0MUZGQjQ1Cis6MTBDMUQwMDBDNDNCMjI4M0ZEQTkzNDI4MEY3OTQ1N0Y1NEE5RTZBRkRCCis6MTBDMUUwMDBFMUVEMzc2OUU3M0MyMjlGRTBFNEY5N0Q0N0UyNkVDNDY4Cis6MTBDMUYwMDBGNUI1Njk1NjVDMTlFRUY3RDcwQUZCMkUzNkNERTQxRDZFCis6MTBDMjAwMDAwNUYzN0FFNDk4MjkyMDhEODFCQ0MyOEUxOEMxMkVEOEZFCis6MTBDMjEwMDAxN0M3QzczNUJEMUUxNUMwN0I4MThGQjhDQkU5OUU2MTlFCis6MTBDMjIwMDBBRDgwRkJCOTRBQ0YzQkI4REUwNzYwMURFRDg0RkUxRjMxCis6MTBDMjMwMDA3MTc5QUM2NUUyREMzNDAwRjA1MUE4MTU5ODI4ODc2QTYyCis6MTBDMjQwMDBDQjY4QkZGQjg4RDc2MzQ1QkRGOTQ4OUFDNzhBNzFEQUM2Cis6MTBDMjUwMDBENjY0QzU4MTcxNkI3MTZFODVERTg5N0JDNEUyNzdBMDdGCis6MTBDMjYwMDBGRDEzMDc4QUQ0ODRFNzQ5RTkxRDUzRTk3RTFERTBEQTBFCis6MTBDMjcwMDA1MEMxOEYxQTk4ODg2RkM0RjhDMjc4ODFDRjFERUUwNTFGCis6MTBDMjgwMDAwRTdDOTdDMTk1QkJGRjVGRDA0RjFGOEZGREM1RjA3NjI5Cis6MTBDMjkwMDA4ODI3QTdDMEQzQUM1Mjk1RTA3Njg5RkVFMzE3M0M0N0M4Cis6MTBDMkEwMDBGNUYxQTdBRDIyQUMzRjQxNDdEMzU0MTZDNDdEOUEzNjcxCis6MTBDMkIwMDBCRUQ2Q0Y2MEZGQ0M0QkU3MDA2QjdFQzVGMUI2MkE5REEyCis6MTBDMkMwMDBCRjhGNjVCQThCRDE3RUVFQjk0QUZGNUVFNEIzODFFNERECis6MTBDMkQwMDAyODkyNzcyOUVFOTQyQUU0QTM5NDYzNUI2N0UwQkQ4QkYwCis6MTBDMkUwMDAzNUJGOEFFMkUzMkNFNEZDOUVBMjMwQ0I3NTM4RUYwNDI0Cis6MTBDMkYwMDBCRjAzRjExOEI5NUU5MzhGNzRENDIxNTM2QTc0ODk1Q0JCCis6MTBDMzAwMDBCRkM5MEE2Qjk3RTMyRTVEQzdDOTZFNTc1NUZFRTg2MTNBCis6MTBDMzEwMDBENjczQzQ3QTQ5M0UzNkYwN0RFQzNGNzI1RDZGOEZGRTc2Cis6MTBDMzIwMDA2MDJDRDcyMzYxREZFNUNCRTdEQkE0RkU3NTI0ODc5MzgwCis6MTBDMzMwMDAxNTVBNjdFOTExRTNFMTNCN0I5ODk3OTg0MUM1QjhFODQ2Cis6MTBDMzQwMDBEREE1NEVDMUM3QTA5NzRBOTFFRjFEOTM2Q0ZDQkM5RDIzCis6MTBDMzUwMDBGOEFCRUFGOTBEREZGRDM1RTQyRkUwRUZGMzgxNUFBOUUwCis6MTBDMzYwMDBDNzNBRkE0ODJGRjZGODBCQjBGRTM2QzVGRjM4RkFEM0I1Cis6MTBDMzcwMDBCNzFENEZBMkY3MkJDREQxRkNGRDUxNTNDNDdCMjk5QTk5Cis6MTBDMzgwMDBCRUQ4NURDQUZENDg2QUM0QkI5QkRGMzRFRDRFNEIyQjYzCis6MTBDMzkwMDA3Njc4QjBCRkI3N0Y2QjQ5RjhDN0RCM0Y2OTQ3QkE1N0JDCis6MTBDM0EwMDBEOTYwNEQzRjUzNzJGMzI2QkNGRjZDN0Q5Mzk3M0YwREQwCis6MTBDM0IwMDBGOTgwODI3ODU5NDY3RTk3QzMxOTc3RDJGQzVCREYzM0M4Cis6MTBDM0MwMDA5MzNGQUI1NEY2NkNDNjNDRkJCRDk1RkM3MTdCMEY0Q0E4Cis6MTBDM0QwMDA5QzhERUJBNEQ1NUVBMUEyQkQ3RjQwQUNFMzdGMTU2OTI3Cis6MTBDM0UwMDBFNEJDNjQ5M0M3OEZGNjQwRTRGNzY3NEIzNUZGOUJFN0U3Cis6MTBDM0YwMDA3ODE3RDBCNzc0OTc4OURFNzExQThDOEZFOEIyRjI3ODBCCis6MTBDNDAwMDA1NDYxODcyRTEwRjI2Q0MxQzFGNTE5ODcxOEJFQzM1MTUzCis6MTBDNDEwMDBGNzVBMjlCNDVGNjBBRjRFNDQ3ODUyMkY0QUNDMEZGMkRFCis6MTBDNDIwMDA2RjlCMzg5RjRENzUzRDI3QTE5QzQ5NzMxREE5NDQ3OTg5Cis6MTBDNDMwMDA5RkNFRkE1NkExREM0ODZGRDI5Rjk3QTU1RTU0QThERDI3Cis6MTBDNDQwMDBCRTE0MkZGNTg3M0YxODA3NkE2MjYyNERDN0Y5RDkyQUQzCis6MTBDNDUwMDA5NEYzMjlGQ0JDQzVFNDg4RTI3MUExRUU2QUREM0Q2QTczCis6MTBDNDYwMDBFRDdEREJCNzg1MUMzNTAxNEU4RDY1OTBEQTE0N0U2RjRFCis6MTBDNDcwMDAzRkEyRkVFRjQ0M0QxOUZERjZFOEZDNzcxQzNENEVGRDYyCis6MTBDNDgwMDBEQTk0NEZDM0UzNEQ3MTVGNEE0MjZCMTkzRkZGMDQzQzlFCis6MTBDNDkwMDAwNTcwMUZDQTYyRTNGODc5QTlEN0FCODZDN0RGQTY4MjA5Cis6MTBDNEEwMDBEQzM1OTc2MUZDNDk4MEUyNDQ5MkM1QkQwODJEQUUwNzlBCis6MTBDNEIwMDAzMEUwNDRCRjlCMTZGN0IxOTNFOUVEMTEyREQ1RjZFN0I3Cis6MTBDNEMwMDBCOUNEMzJFRDNCOEE1RkI1RjJGRDQxM0IwQjVBMjVGNDA1Cis6MTBDNEQwMDA4NzMxOTIzQkI5MUJGOEY5QjRFNjE3QkIwRDE3MTNFQTg1Cis6MTBDNEUwMDAyNTdDMEY5N0M2RUJBNjM4NkFDREFFMDJGQTkyREM1OUNFCis6MTBDNEYwMDAxN0YxQ0U5NEY2OEVCNjYxMzRFNzhCNkQyRDBFQTJBM0E0Cis6MTBDNTAwMDA1NjlFRTY4RkE0QTNGRTlDNTNBQjk3N0EzMTk1RjlFMzMwCis6MTBDNTEwMDBDM0ZCMEQ1MjdGQTlDREZCODkxRjUyMkY2NjUwRjlCNjgwCis6MTBDNTIwMDAxNkY1MzJGRDY3OEZEMDdGMzJGMUNCQzhGREE3NTFGOUU4Cis6MTBDNTMwMDBGNkQwQkJDRUU5ODA4QTlGMEVFQzc3RkE1NDk0MkJBMUZCCis6MTBDNTQwMDBBOTlFNjFGMDlDN0E4RjVFNEU4RUU5RDFDQjVEMEQyRjU2Cis6MTBDNTUwMDBEQjE0QUZBQjBFRjBCREVEMUU4M0E3OEI2MUZDQTlCRTUzCis6MTBDNTYwMDA1RTRERDY2RjlDRkM1RDZCQUQ3RUM4MzUxM0VCMkZFMzQzCis6MTBDNTcwMDBGNUJGNzU0QTVGREY1Nzc5MjBCMjNFQzE3N0ZENDU3RDMzCis6MTBDNTgwMDBCRDQ4RkE0NEMyMEI3MDI1REMxNDA2RDcyNDhCRkVGNzk1Cis6MTBDNTkwMDBEQUNEOUU3QjA5NUMwOUI3ODRDMTc1ODM1QjVGREZCRjIxCis6MTBDNUEwMDA2QTc4Qjg2RTJDMzQ3RjJENUM1QUJERUY0Q0I4QjI3QUU1Cis6MTBDNUIwMDA5MUYzOTg1OTYzMUUwMUVGQkNGRTJEQjNBRkFDREZEQkU2Cis6MTBDNUMwMDA5NjdDN0RCRDNCOUEyM0M3MDk2ODcxREIzQTdCMjRCRTBDCis6MTBDNUQwMDA5OURCRUYwRTM2NDA3MTI2OUFERDExQzcxQzIyRkU4QkM3Cis6MTBDNUUwMDBEQjBERUZFMDdGOTMxOTdCNjBCNDZGQ0VFODA0QzRCRjJFCis6MTBDNUYwMDBGN0Y2NDc1NUJDMUZDM0Y1MTVBQkU1RUY1NkMyQkVBNDExCis6MTBDNjAwMDAzNEZDNURFRTIxQjg1NjUzQkYyRjYxQkMxM0U5NTk4QjQyCis6MTBDNjEwMDAwN0VEQ0VFMjU0NjY0OTQ2RTNDQjFEQ0NDNkY3QzdFQTI4Cis6MTBDNjIwMDA0NzZCRjI5QUM3OTcxNzA5REMzRDlCRDJCRERDNDlFQkZCCis6MTBDNjMwMDAzQzE4ODdGMDdDRDM3MUVGMURFREJENjdGNEY4QTFGQUNCCis6MTBDNjQwMDAyM0Y5NUIzNDNDOTk0Q0RERjQ3QjFEMDZFQTZEMUVENDY2Cis6MTBDNjUwMDAwRkVGNjIxMUI0REI3NUIzMzk4NDc2QjUxNjg3N0EzQzc3Cis6MTBDNjYwMDA3QUNFRDEwNDk1REUzRDU4OERGRENGQkU2NUVBMUFDQzU5Cis6MTBDNjcwMDA0Qjg3RTNENUU1MzZCQzM3RDVBRkREMkY1RDgzNzg1QkRGCis6MTBDNjgwMDA2NkYxNjcyNjFBRTg3Q0I1MDBGN0MzQ0MxNzJGMkUyMzc2Cis6MTBDNjkwMDBGQjRBODc4QkQzRDBFMEE5OTYzOEZFQTNEMkZDMEZFM0U4Cis6MTBDNkEwMDAzOEQ1ODZCRTFEM0VGQ0E2RjRGMTdEQjYyMzgxQkZCQjA2Cis6MTBDNkIwMDA4NEVGRUIwQ0IzRkUzNTNDNTQ4OTdFMEUxOTNENUYwRUMyCis6MTBDNkMwMDBDMEZDMEU2RDhDQTU3QkY4MEJFMjZGOTk4MzZGQjIyQ0NBCis6MTBDNkQwMDAzNEY4MTJGMTAwM0QwQ0VFRUQwNEI3NkQ2RTY2MzJDMjE3Cis6MTBDNkUwMDA2RDE0NzA1QjEyMDRERUJEQjk1RjA3Rjc2MEJDQ0M3REQyCis6MTBDNkYwMDA5MkY2N0UzQUU1OUYwRjM4RTlCRUJCRDlGMEY5QkIzMzFECis6MTBDNzAwMDA1MTBGOTcxQTNDNjg3NzZFMDNGQjAyREY3N0ZCM0YwMkZECis6MTBDNzEwMDBERkRCRjE4QzI1OEVCRUQzQkI2RjZFNzFFRkNCQkRDOTU1Cis6MTBDNzIwMDA0MEVGQkNGOEFBNUUyMDNBRUQ2QUIwNzk3MERGM0U5NzIwCis6MTBDNzMwMDBBOUY0RUVFQTdDNzEwRkU2MEY5NUZGRkQ3MjNGQ0NFRjk2Cis6MTBDNzQwMDBBNUQxRkU4MzM4OEYzQkUyMEQxOUVGMTIxQ0ZFNjI3QUYxCis6MTBDNzUwMDA0NzZCRTI5NUM1Q0Y2QUU3RjAzMzg0N0RCMDUwRTA3MTU2Cis6MTBDNzYwMDAyNkYzNTJEQ0VFNERDQzZGQzQ3MURGM0U2QkYyQTI1RDVFCis6MTBDNzcwMDBGQUI2ODg0N0JFODUwNUU4RkJBRDJDNDhFOTZEMkM0NDI4Cis6MTBDNzgwMDBGNUJGODcyRkNBNDJGRUFERThEMUU5Q0QwMDVGREQ2MzdBCis6MTBDNzkwMDAwNTc5QjgxRUMzRjBGRTA2RDIxOUY4RTUwRTE3RTc5NzIzCis6MTBDN0EwMDAzRjI2MjFERTNCMTNBRTg4N0ZFQjI0OEVCRjA3NDZGQjdFCis6MTBDN0IwMDA3RkMzRDdBQkVBRjIyMDRDOEU0OTY5RTg0NzE5NUMzRjRBCis6MTBDN0MwMDBENTA5OUNGRjE0NDdERUQ3QUQ5RkJFRjNEQTdEN0ZBRjVFCis6MTBDN0QwMDAyREI5MDJERkZCRTIzRjM3NzhFRkEyNzg3MThDQ0I3NzdGCis6MTBDN0UwMDAwMTFERkE1NDdFQ0YxMUM0ODYzRDAwNzRBQUE5OTQyOTc0Cis6MTBDN0YwMDA2RTZGRUQ2N0UyN0UzNjNBMzFBMERFMkZDN0NBRjQzRTk3Cis6MTBDODAwMDA5OTc2MkUzOTVERjQzNzNEOERERjU3QUNBRDlDRDkxNjQ2Cis6MTBDODEwMDAwQjc4OTlGMjY1N0Y3OTA4RDI5QTM0RkRGREM1QTlBRUVGCis6MTBDODIwMDAyRTdBRDI3QzVBQUVGRUZCOERBQzgzMEU4ODZCNEJGNDE1Cis6MTBDODMwMDA3MUU2RDMyM0ZDOUY4NzcwNkNFMEFCOEJBMzQ1QkM2NDhGCis6MTBDODQwMDAxMTJCMEFCRjZGRjAxREQxRjY3Q0VERTdBNjczMzA3RTg5Cis6MTBDODUwMDBDOTE4RkY1NzQ4OEZFNURGRkVDMzFDREFENzI5RUNDRDk2Cis6MTBDODYwMDA3MTMwQkY4NjdGOTdDOTlFRkNBODA1NjY1MjgwNzFENTNFCis6MTBDODcwMDAxNkU2MDU4M0ZGMjREODE1OTgzRkQ1RTJBNkY0MzREOEYwCis6MTBDODgwMDAwMTk4N0VEQTUyNDhFNTY3NUIzQzk0OUYzNUM2NjcxOThDCis6MTBDODkwMDAwM0ZEQ0U2QkZGNEM0MTdEQjQ1NjhCQzcxNjcwNjg3MTlCCis6MTBDOEEwMDA4NTZCNDVGQ0M0MEFGQkYyRTMxOEJGQjA4MjAyREUxOUI3Cis6MTBDOEIwMDAyQ0Y2OEUyOTA4RkU5RDNEREQ0NzMxODVFRjMyRUU0MzkzCis6MTBDOEMwMDA1NjZDOTRDOEFGQjNGMDg4N0YwRDkyNzlGMTFCRkREM0ZECis6MTBDOEQwMDA1MTRDOENGRkNEODk0NERDQTdEN0EzMUQwQkFDQkYyMkU0Cis6MTBDOEUwMDBDRTlCMzQwNjU4QzBEQkZCRTFEMTc4QThGRkM3OTYwOTgwCis6MTBDOEYwMDAwNERGMjcyRDVFODJFRjRGMkQzNTk0RDY4RkYxQTU1MzlGCis6MTBDOTAwMDAzREY2MTlCREYzRjRFRDY3M0U1NEYwRjdCMzRERjY0QTJBCis6MTBDOTEwMDBFNEJGQkZDRUNCODI0MUMwRUI2NjIzOTdFRjlCNDFCRTA1Cis6MTBDOTIwMDBFM0ZBQUMyQzlEQjFGRDFFODZGMkQ3NUY4MEYzQkMyOUUzCis6MTBDOTMwMDA2RUZFRTQ3OEY4M0U3REMyNUMwNUVCRERGMjI1RThBMEYyCis6MTBDOTQwMDBBQzIxM0VCQzFDNUY5Rjc5NDUyMkZDOUM3OUM1NDlGODBGCis6MTBDOTUwMDBEMEYwNTQyRkU4NzVFNjYwRjE3N0YwRERCMzU3OEVDOTVCCis6MTBDOTYwMDAxNDdGN0FGRUEyODFFMDNCN0YzQzhBRTI1MzIzREIyRkQ3Cis6MTBDOTcwMDAzRjkwOTM4NEY2RDg5RjgwN0U3OEYwQjFGQzQwMzFGOUU3Cis6MTBDOTgwMDBFM0ZGRjRFQ0JGQThFMTcxQkY3RjhBRUJCRUYwM0VDQUMzCis6MTBDOTkwMDBBOUZGQ0JFNTE0RDg5QjI3QjdBMjFDNEI0QkExRjc3QjczCis6MTBDOUEwMDAwNkUzRDU1ODUzMzRFQUIxMDY5MzU4NUYyMDY3MzBGRjQ5Cis6MTBDOUIwMDBBNzI4QkUwRkFFRjg3OTZBMTVBRTE3MUMwRkUzQkRDQ0UxCis6MTBDOUMwMDBFMkY3NjA0MDdGMUZGQzEwRkEzQkI4RDU0REVGRkQ3Q0NECis6MTBDOUQwMDBCQUVGQjE2QzFDN0Y2RkY3QzJGN0I3NDJGRjY3ODJGQ0ZBCis6MTBDOUUwMDBGNzYwOUM2MURENjc1RjQ0NzlCQURCNDY3RUNCQjUxMkE4Cis6MTBDOUYwMDBDMDg1RkE3NDRGMEFFNTBCMjUyNUFBOTk5QzE5NDExRTlBCis6MTBDQTAwMDA4NzIyQTkwQUJFN0ZCNkVDQjkyRDI5Qzg1Rjc4NEYxREQxCis6MTBDQTEwMDBFM0VBNUZEQTE4NEQ3MkVBMjVBM0U3ODM2NkVDNkYzQjIxCis6MTBDQTIwMDBFRkVGQzk4N0VFRkRBODA3RDMwN0VCQ0JFRTQ1MzkzNzBCCis6MTBDQTMwMDA4NkM3MzEyRUY4QzlEMjIyNkMwRkZBOUE3RURGRjNEMzYzCis6MTBDQTQwMDBDRjRCMjFGNDgzOTQ3NjFFNUE4RDcxNEM2M0I2N0Q2ODZBCis6MTBDQTUwMDA0ODgxNzRFQzZFQTkxNUQzRTJGNDY5QzdEMDdGNzBENzEyCis6MTBDQTYwMDAxODk1REE4RjdCMjY0QkM2RDhGNEEyOTRFMEZCRDdGMzU3Cis6MTBDQTcwMDBCODExOUQ3RTJGRTlGQ0FDMEFCNzk5OUE5RTJGOTJCQTA1Cis6MTBDQTgwMDA0Rjc3RTFCRTM4RTM3ODE5QkZERkM1REZBRjNFRDAzQjVCCis6MTBDQTkwMDBGMzlEREIxOENFMDMyQzA4ODQ3QkFFODlFMjJFNTgzMDQwCis6MTBDQUEwMDBEMDg1NzQzRUUzMkZGNEQwQkIyQUJFQzAxNkU0QUYzMzZBCis6MTBDQUIwMDBGRTQ0QkE1Rjc4RDAxMDg4QzFERkUzMTRGODgwRkZCRTZGCis6MTBDQUMwMDBBMUU3NzdCRjE1ODNGMTE0QjFGQjhEMEM3RjJGNzZGREE1Cis6MTBDQUQwMDBEODgxMjkxNDFGOTJBRUQyN0UzQzdEQzcwRDM1ODg5RjI4Cis6MTBDQUUwMDA4NkZEMDdCQUE4OUY2NTE2MEZGQTYzOTcxQ0Y4OUNFRTlGCis6MTBDQUYwMDBCREIwQTkzQzBFRjVDQzdFOUU3RkEwREE0QkVGOUQyRkZBCis6MTBDQjAwMDBFOUZBMzNDRkY3RjkyOEVGOTMwMzU5NzQ3RjYyM0VCNzAwCis6MTBDQjEwMDA3NzFFMTNGQThDRjU4RjY2RTFFRjIxNjlGNDdBMDA4QUFCCis6MTBDQjIwMDBCMTdDNzM1NjIwMTlERkJERDJGNDIwRThBRjg3NzBGREM5Cis6MTBDQjMwMDBBMURCOTFEQTNCNjZGMjdCRjI1N0E4QkY0QzQyMUY2OTNBCis6MTBDQjQwMDBGRDNENjZFMkVGRjRBMjE4QzFERjhCQjNDREM0RjVFRTc0Cis6MTBDQjUwMDAxRTkwMzdDODJGOUFERTg1NzE3N0UwQkEzNTg5RkIzMjhGCis6MTBDQjYwMDBBOUEwNjRDN0MyN0M1MjFGMzM3M0Y5N0Q4NUUzNDdERUY5Cis6MTBDQjcwMDA2N0Q1RUM5MEQ5RjFBRDc0NkZGNUQzNTRGRkNGNzAxQzJECis6MTBDQjgwMDBFREZFMkE1MzNDRjRBRUUwRUY1M0JENEY4RjQ5RTBFRjhBCis6MTBDQjkwMDA3NUUwMUM0MDJGRkUwMkYzMEQzMkQ4NTEzOTYxNzY5NEI2Cis6MTBDQkEwMDBFNUNBRjRFMkRGNTJCRDA3NzA5QzJCQUQxRjI5ODcyNzMxCis6MTBDQkIwMDAwQUY4NTdEODBEODQ4NzE1OEY5QUM5MUYzNjUxREM0MzYwCis6MTBDQkMwMDA5RDc4RkU3ODM0Q0E5MzE1N0YyRTIzQjlEMkNBRDhCMDg3Cis6MTBDQkQwMDBGODc5Qjk4NUM3NzlGRjFCRkExMTIwQkRGNjhCN0U5OUNDCis6MTBDQkUwMDBGNjIzNDcwQ0NCOEU4MjdFMjUxMEM4N0YzOEQwMUE1Qjg3Cis6MTBDQkYwMDA0RTc5MkY5MkZCQkEyRjBDQzNFRTE3QjUxNEU4RjUyRTIxCis6MTBDQzAwMDBDOUU5MkZGNUZFODdFQkJGNzREMEVGQ0Q2NEI2QjgyQjIyCis6MTBDQzEwMDA5QUY3RDBGQjNFRkFGOTZCRUY2Q0MxRkNGQTUxQkZBRjRCCis6MTBDQzIwMDBGOENDNDBGQ0JCRTJCMzMyOTI5QkJENTczODVGQUJDQjM0Cis6MTBDQzMwMDA3QjEyRTE4QzlDMEZDMEZGMjlEMjI3MTJGRTQxN0UxRjgwCis6MTBDQzQwMDBCODMyRjhCRjJGMzFGQTdENDNBMEFFQzhCRkREMkJERTZFCis6MTBDQzUwMDAzMUU4NUQ1QTQyRUY2OTFDQzRGNzQ4NTA2RUNFRTBGN0U4Cis6MTBDQzYwMDA4RTdBQzVGREU0REUwNDA3QkRGN0YxOTI5MUU3MDNCN0M0Cis6MTBDQzcwMDA4QUY2RTI3REM4REU1QjUzRjg3QjFERTZBNjVGOTc2MjBECis6MTBDQzgwMDBGRkFEM0MzRUFFRDcxOEE0REY1M0ZCRkYwMEQ5NEEzMEJFCis6MTBDQzkwMDA5NzAwODAwMDAwMDAwMDAwMUY4QjA4MDAwMDAwMDAwMENCCis6MTBDQ0EwMDAwMDBCRTU3RDBCNzhENEQ1QjVFRkZFQ0YyQjMzQzkyNDJGCis6MTBDQ0IwMDA5OTg0OTAwNzIxNjFGMjIwMDQwRDM4NzlGMTBDMzA0MEZECis6MTBDQ0MwMDA4MjY4RDEwNjEwMDU4QzcxNDIwMjg0QkMwODhGRjZDNEJDCis6MTBDQ0QwMDA5NjlBQzEwMEEyQzUxQThFODg2ODUxMDcwQTE0MTU2RDZDCis6MTBDQ0UwMDBBODg4QThDMTMzODI1MDVBNUY2OUI1MUU1QjJENEQwNEQ4Cis6MTBDQ0YwMDA5RjNDMTI4MkY2NjIwRkI3QkRGQkI3RjZERTk5RjkwRkMzCis6MTBDRDAwMDA4OURBREVEM0VGQkJFN0JCRjFEM0VERkVFRkY3NUE2QjY5Cis6MTBDRDEwMDBBRkI1RjY1QTdCRUQ2OUZGRDEyMDk3RDdDOTk4RDEzQUM0Cis6MTBDRDIwMDAzN0U3NzQzRTYzRUZGOTBDNUU3MzM0NjMyRDlBRkY1NjU4Cis6MTBDRDMwMDA2MzAxNjNERTBCMTZCNjNCOERCMTJEMzFGRUU0RTUzQzlECis6MTBDRDQwMDBCRjY1RDk1NTU0RkYzREM2NjZCNkU1RTBCQjNCMjk5NkE1Cis6MTBDRDUwMDBBNzA3RkY2NkJDQkRENENFRjNCOTNDQ0ZEMzk3MzQzNjFBCis6MTBDRDYwMDA5RkNBNjdCQjkzNjI3ODdFNjE3OEQ0Njg3NjBEQ0ZFRkY3Cis6MTBDRDcwMDBGMEVEREUxQTg3RUZEOUQ0Q0YxMDIzNkJBNDdBNjlBMjI1Cis6MTBDRDgwMDA5RjNGOUE0NUJCM0YzMEZFOTdDNEQ4QTM2NkU2QjVDNTIyCis6MTBDRDkwMDAzMjM2REVCNTY4QjhBQjkwMzFDRjhEMTEyNjE2OEQ0Mjk0Cis6MTBDREEwMDA3NzkyQzZFN0YzNDhENTcwNzZBRkM2QjNBRDBGMzExNkFDCis6MTBDREIwMDBDRkQ4N0MyQkEzM0YzNTFFMkE1QUM3MzAzNjRGN0M2NjBFCis6MTBDREMwMDAwQjE2RUZCNjc5Rjg3Q0U2NTVEQkJBQjREMTdDMURENUVECis6MTBDREQwMDA3NzQ1M0FGOTc4RjMzQzQ2N0Y1ODE0QUY3MDUzODlCQkQ2Cis6MTBDREUwMDAzMzVCRDRGRDdCM0FDNjc1RDNCOEFDNkExMENGRjBENEIwCis6MTBDREYwMDBFNEFGNjQ3Q0RDOTc3QkFDRUM1RTBFOTdCRkUzNkY0QURDCis6MTBDRTAwMDAyMEU1MTA2MzZDMzA2MzlGREFDNEY4RjU2RDUzMUYzODZBCis6MTBDRTEwMDBBREZBRTNGRjU2NUJFQzFCQjU2ODk0QTdGQTE4MUY3RkM5Cis6MTBDRTIwMDBGRjEwNEYwMUZBNUY3RUU4QkEwNzRFNUIwM0Y1QUExNkMyCis6MTBDRTMwMDA5NzY0MzE0MzYwRENEMDcxNDJDNzZCMDFERUY4NzhDMzgwCis6MTBDRTQwMDA4MDQ3REVBNDg1MTcxODgwQkYzNjlCMEZGODYzQTY5RTI3Cis6MTBDRTUwMDAzRjJDRTVGOTk2Rjk1N0I5RUVFNUQ5OTk3M0FDNkU4RDhCCis6MTBDRTYwMDBFM0ExRjc0MDk4MkY0Q0MzRjc3MDM3RDZENTcyMzhEMjZDCis6MTBDRTcwMDA2N0UwRjlEQjM1MDFGRjE2OEREMTc3RUY3RUIzNkYzN0IxCis6MTBDRTgwMDBGRjU2NjdGMTNEQjE4N0I3QUI3Qjc5QTQ4QjhGQ0MwRTkyCis6MTBDRTkwMDA1QUY4N0Y1MEZFNjI4NDI4OEY3MkE3QUQyRjQwNzkwMjI2Cis6MTBDRUEwMDBFMUY3MjVCMzMzOUFDQTdGNkQ2NDU0MUVFRUNGOEFFMTUxCis6MTBDRUIwMDBGMDZFNEFGNENDNzFGMTc5MEYwOUUzRjhCN0EzNUZGMTkyCis6MTBDRUMwMDBGREE0QTRCRjkzQkM1QkUwRDdEQjE4NDlGRDMyOTlGNzAyCis6MTBDRUQwMDBGQzcwOTBFRjVFNUE4RjNCNjkzMUYyQUJBRUE2RjU3OEVECis6MTBDRUUwMDAzMDBGM0UyRkQ2QTBEMTdBNEYzQTdDRjc2NEYxRjI5M0ZGCis6MTBDRUYwMDBFRDgzNjkxRTcxOTIxRTRFOTZGRUU1OERCMUJDREVDOUIyCis6MTBDRjAwMDA0MzQ2MTdGQUZDQTBDOUU4Qjc0NEExNUNFMDQzOUI2MzIxCis6MTBDRjEwMDBDRERBQzZEQjlEN0EzMUQyMTVDNkNCQ0JFRUFGN0QxRDA3Cis6MTBDRjIwMDBERkNCRUVBQTlGNDU2OUNEOUExQjE5QUZERjc5RDdGQkZFCis6MTBDRjMwMDBBOTlFOUMyQkYxNTE1NkM3NUIwNUUxRjE0RTk3QkIxRTk0Cis6MTBDRjQwMDBGODdEQzRFNTY5QzQ3QTk3RTc3NDJFNjE5Q0FFQ0U1QjI4Cis6MTBDRjUwMDAzQTFFNjM0NkM2REUxREVBNTk4NUVGREQyRjdDQjIwNzE3Cis6MTBDRjYwMDBERjM5OUVCMjRBNDdGMTY1OTgzODlEODA3RTNCNDcxMzcyCis6MTBDRjcwMDA1RDJGOTdGNDlCOUVFQkI5MDNGRDcxMzg5NkIzMENDNkY5Cis6MTBDRjgwMDAyMjcyM0EyQzk4MDc1QjMzRjg1QkQxQzlFN0VEQkIwRkVGCis6MTBDRjkwMDA2QTdDOUNEQUYwRjYwNjRBOERCRUQxRThFNzhDRTY4RjEzCis6MTBDRkEwMDBEMjMyMDg4RTFFRUNCRkIzMEU3RjE0RjBFMTMxRjAzQzlDCis6MTBDRkIwMDBDNzRGRUQ1RUZEQkFGMDY3RTJGM0FBQzVGRkYwNzZCNUE0Cis6MTBDRkMwMDA2RDQ2QjcwREZCODdGOTJDOTg3RjJEQjMwNEVBQTc4OTJFCis6MTBDRkQwMDA3RDA4M0FFMEZERUNBNEZENkFGRkEwRkM4NzFDMEYzNTNDCis6MTBDRkUwMDA0RjhDQ0NCQjk3RTNBNzM2RTZEMDRGMjY1MjNEREU0RUEyCis6MTBDRkYwMDBFRDE3RTM5NTc5QjU5RTJCRTcyM0Q2Nzc1NkVFODNCM0VECis6MTBEMDAwMDBGQzhCMTlGNEIzMkY0Q0QwM0YxM0Y0NzFGRTg5MjQ0OUUzCis6MTBEMDEwMDAzRjgyNkVDRjNGMzFDMjg3RjlDNENCN0Q3MzVFRjMxQTc2Cis6MTBEMDIwMDBDMkQxRUU0N0NDQjU5QkNGOEJCOURBQzZDQzFFODVEOTIxCis6MTBEMDMwMDBCNzhEOTkxM0M5RDg1NkM5RDc2QTA3QjU4RDAxQkY1MkE0Cis6MTBEMDQwMDBGQzhCNTlEQjQ2Q0ZFNkU1MkNCQjZERjQ5QzUxMDFGRTExCis6MTBEMDUwMDBDNzRBREJCMkU4QkJBRjJEMEJFRDBGMUE1ODM1RTBBOTdDCis6MTBEMDYwMDBFNjUzRjM1NEYyMEU4Mjg3NTVFQ0Q3OUFBN0FFMjZGODEyCis6MTBEMDcwMDBBODcxNUFDMDQ3QzA4RkMxMkZBMkFFNUNGN0NCMkU0RDBFCis6MTBEMDgwMDBFQ0ZGQzgzMTA5RTA2QjAzRTEzRjNCNzE1MDBFNThDOTFBCis6MTBEMDkwMDBGOTA1OTZEQkREQkNERjExREIyQ0JBN0U1NEJEOTEzRTc5Cis6MTBEMEEwMDBGREY3NUZBMTdGNEU2RkMzNDJGMDM5QzREOEYzNEExODMxCis6MTBEMEIwMDA5RjJGRkIxOTg3MTNCQjcyQkMzNzY1QkIyNzlGRUNDMzNGCis6MTBEMEMwMDA5RjUxRTA5MzMxQTdBMjFCMjdDMTQ5RTBFOTBGMTY4NUM0Cis6MTBEMEQwMDBBN0Q1Qzk5QzVGRDcwMjI2RTkwMTc4MURDQ0Y1MjQ0MzZBCis6MTBEMEUwMDBBRTlDNDcxRUYyMjY4NkU3NzlEQTIwRTFBRkYyMEFFRTFGCis6MTBEMEYwMDBBMUY0NzdENzFGOTYyNDc3RjJGNkZGRTUzMkQwQkM0MjMxCis6MTBEMTAwMDBFMUJBOTZDMzBGRTUyRDY2NzY3QjI5NkZGRjc5RjM4OTI3Cis6MTBEMTEwMDA4Q0QzRTZDMDdBM0U2RTc2QkJCOUE4RTlDQjJGRDk5NjAwCis6MTBEMTIwMDA2QkM1QkU1QkJBM0REN0JBMjgwOEVFMkQ3QkYzNEYzOEVFCis6MTBEMTMwMDAzOTVFQ0ZFRTM1NjEyNEQ2NjJGMkZENjQ0MjFDQkUxQjFGCis6MTBEMTQwMDBEQkJDOENDQUFENkU1RUZGQUNGREM4OUJBOEI3NjQ3QjMwCis6MTBEMTUwMDA0QzlFRDExOTY4QkY3NDVCODlCQjJBMDhGRTU3RUZENTc2Cis6MTBEMTYwMDBFMzYzNTQ5QjNFN0ZDRDIxN0RERTlDQ0I4ODFFRkVEMUE4Cis6MTBEMTcwMDA3NkI5N0U3RDNFRkY4NDNFRkZDOTNCQUI2RkM2MzY3OEY1Cis6MTBEMTgwMDA3RTlDRDgzNzlGRkEyMjdENTYwRUQ3RUFGNzY3OUM4MDlGCis6MTBEMTkwMDAxQ0ZERjRFMEYzNTFDMDU3RUQ5RkFBOEUyNzMzQUM0MzNBCis6MTBEMUEwMDA0RkE3MUM4RjlBODlBRkQ3QkI0NzIzN0E1OUU2MEJERDZGCis6MTBEMUIwMDBCRjkyNkY1Q0IxQUZENzEyQkVCMEIzODJFOTI2MTRCRjg1Cis6MTBEMUMwMDA2NzU4REJDRDZFNEU1Rjc1NEQ2RjY3NDA4RkE5OUVDNTZBCis6MTBEMUQwMDAwOTE5RjJCQjZEQjM4NUQ5QUYxQzZGMjBGRUMxRUM2RThGCis6MTBEMUUwMDAyN0UzRjQ1NzMxNEU5NDRENjg5QUNFNEVGMUZFRDhBNkZGCis6MTBEMUYwMDBERkNFQzA3RUFERjhCMTQ2RkE0NkM1QjMyMzVFMDVERDhECis6MTBEMjAwMDA3NEVENUY3MDNEQTUzN0NGMjQzODU0MzJCNzA1RkM3MEZDCis6MTBEMjEwMDA2OUJCRTY4RkU0NzlDNzM4RTdBMTRFREU2RUIxNEY3Mzg0Cis6MTBEMjIwMDA2MURFOEJENjg1MDVGODE5RkZCNzZBNTNDODNDQjYwNDkyCis6MTBEMjMwMDA5NUYzRjkyRjNERjRDQTU3MUFFRkJGN0FCQkJFREQzMjIyCis6MTBEMjQwMDAwRTJGQzg4RjlBNUQ3RjBGMEJGRUNFMTUyMTgyRDc4NERCCis6MTBEMjUwMDBGNjFENDZBQzdCQjE5Q0JGOTI3RkNDM0I5OTYxN0QxM0EwCis6MTBEMjYwMDA0NDEzNzYxQUZGRTE3MkMzMzJDQzUzOUM1QjE4OTA4MzRGCis6MTBEMjcwMDAxM0I2ODhGNjlDRjE1NTYwRERGNTc2OEIxM0VCQUVCN0VGCis6MTBEMjgwMDAzMjdGMDQ5RkNGODk0ODhCREJDMUJGNUZEQzE2NDlGQTMwCis6MTBEMjkwMDBDMzkyMzBFNkI1RTY1MUNBNkM3OTY4RTc4QTQ2QkI4RjFGCis6MTBEMkEwMDBERjMyOTI5RTU0Q0Y3OTBGRjVGM0I4RTY2QjQxM0Y0NkRCCis6MTBEMkIwMDA0REU0N0YyNkYyQ0I5ODlGRDYwM0JBNzEwN0FGRDNBNzcwCis6MTBEMkMwMDBDRkIzRDY0MUE0OTdENDk5RkNBRjAwMkUzNUFDOTNFMEYwCis6MTBEMkQwMDBDRDM4M0VERDBBOEUxQzZFNzU3QzlERUZDNTQyRkZEMkI3Cis6MTBEMkUwMDBCNzVGQ0VEQUE4RkVGMjQzN0YwRjBCRkVDRUY1NEM2Njk5Cis6MTBEMkYwMDBFNUY1Qjc4N0YzOTRFNkVGMjMzODFBMkRDQzZERTBGMzBDCis6MTBEMzAwMDAzNERFMTlFRUYzOTIxRTUyMUEwRTNBMzU0QjdENzlDQjZDCis6MTBEMzEwMDAzREVFMkNDQzdCQkRFNkNFNzI4MDhGNkRCNkI5QzBDNzFBCis6MTBEMzIwMDAxNkVFMTA3MjY4NEIwQ0Q3NUZFMzQ4NkZBNkY2MEJBMUEwCis6MTBEMzMwMDA0RjQxNEY1OTIwRjhERDk2OTgzNjNGRjhGRTk2MDdEM0I3Cis6MTBEMzQwMDA4NDNFRjUzNzIzQzFBNUU3M0U5QjZGQTcwNjdENUFFOENCCis6MTBEMzUwMDAzRDVCMzY4RkEwRjZFMDk3QTQ0RkREMTcyOURBQ0YxNjk0Cis6MTBEMzYwMDA3MEREMzJEOEUxRjNGMkZDMUYzMUM1MjRFOEQ5RUUyQzkwCis6MTBEMzcwMDAyQkI1RTM3QTVBNUE0MDRFMjk3REZBNjdDMzNDNzcwMUIwCis6MTBEMzgwMDBERjZBQkQ0QUZGNjZENURGNEVERkRDMkRFNTY3Q0Y2NjdECis6MTBEMzkwMDAzRTRGREVGRjY5QURGNEI4MjE0ODFGN0UyMDU3RjBGRkY1Cis6MTBEM0EwMDAzMUQzREM3QjY0M0QxN0VBNTUxOTY2REYzQjg1Q0ZCNzg3Cis6MTBEM0IwMDA2QUFCQzFEOTkyMTY4MDNCNzNCQkIzMDBFN0QzOUI2REI4Cis6MTBEM0MwMDA3OUEwQjMzMUQzMTg5RDI3NEVFNjBBN0UxRTUxQzBEQ0VBCis6MTBEM0QwMDAzRTlFNkU5N0ZENkVDRjM1RThEMkM0NzA0RTdGQkM5RkU3Cis6MTBEM0UwMDBEMzI1N0UzM0YwMUI1OTUwNkE4MTNDRTQzMjlDRjg3OTk2Cis6MTBEM0YwMDBFODNBRjZFNjBBQjk1OTY1MjlGRENEQTQ3RUU2RDM0Nzk5Cis6MTBENDAwMDAwN0M1NDI2RjM5QkQ0MkRCMjlFNjI1RjAzQ0U2REY2REZBCis6MTBENDEwMDBBRTE2NUFCNzk4OUY4MjNCQTc5QjQyOTJGNzkyNkZDNTcwCis6MTBENDIwMDBGNEQxODlFRjA5MUI0N0VENjZBNTRGMDNGRjlBOEU0RTk1Cis6MTBENDMwMDAwODlFNUJFRTFCNDU3ODVDMjhGMUNDRUVCMzQ5M0E2MTVGCis6MTBENDQwMDBFQ0FGMjgyRjcxNTJGOTM3OURCN0Q0M0EzOTFENTAzOUI2Cis6MTBENDUwMDBDN0I3MUZGODBFM0Q2RjI5N0MzMzkzQUZCMDM0NzI2MEFECis6MTBENDYwMDA3QzJGMUExNzMzNDZFM0EwNEUzNjMxNkYxODg3MEI2NEIyCis6MTBENDcwMDAxRUMxRTUxRTkzRUYyRTNFOUZBMTI2MDFGRjE0OTNBMDJGCis6MTBENDgwMDAyRkNFOURCREUxNzk1NERGNkRFMUY5OEEwNzk2MzIzN0UxCis6MTBENDkwMDBBRjVGOTFDQzVDOUFBOENGQTI1MTlGNzc2M0U0Mjk2NEQ3Cis6MTBENEEwMDAwNkRBNTU0NDhCN0UyQjEyOThFRjJFQTlGNzgzNUY2NTIxCis6MTBENEIwMDAyMjREQTc3RUREODY1OEQxM0UyQThGREE3QjBEQTJCRDk0Cis6MTBENEMwMDBEQkM0RDM2MTE5NjJCRkY0QUMwRkEzRkQ1MzcxNzc0QTdCCis6MTBENEQwMDAxNkU4NjBENjM0M0QxREU0RTcwOUJBNTFFOUUzNzk0RTE4Cis6MTBENEUwMDAyOTY3NUM4OUQ4REY4QkQ2OEQyNEI5RDE2MjJCQUQ3RkJCCis6MTBENEYwMDAwRUY4N0EzQTgyRjRDMThBMERCN0RENTA4OEY5M0QzM0NGCis6MTBENTAwMDAwODFBMEVGQkZDQzZGRDYzNDA2RjhCRDYyREY4REVFRkNDCis6MTBENTEwMDA3MTFFRDk2QkEzRUZFRDc5OUVGM0I5RDBCNzM1NjdGOURBCis6MTBENTIwMDA3M0ZDQzNBMjc5NDcyRDg5QkNCREE3NkRGNkI5MTc3OUU1Cis6MTBENTMwMDA3QUEzNzdGRjlCRDAwQjZFQkNDOTQ4RjU2RjY0NkQ3RkYzCis6MTBENTQwMDBGOTIzRjhDMjNBMzFDRTBEREUwQkE2NDRERURGMEQ0NURECis6MTBENTUwMDAxQTQzNzk5N0NEOTFCQTgyQ0ZCRjQyRTJFRkFGNzIxRkUzCis6MTBENTYwMDBCNEQ4RDhGQzVGREEzMUFGOTRBQzc0RkVGRDA2NjhBQTdCCis6MTBENTcwMDBGREU4ODFFM0YyQTQ5RTM4NTVEQjBFQkQ2N0Q4NzRCMTk3Cis6MTBENTgwMDBCRjU0N0RGNDgzN0UyNzAzMUVCQzlFNTlDMjQ1RTUzOUY2Cis6MTBENTkwMDA1Q0E5N0VENUM2QjBBRThDMjhBNDY2RkYwODlFMkUyRTUwCis6MTBENUEwMDA5ODY2Q0JFM0Y1NjZBNUIzMTkzODM3RjVEQzYxNjQzQkMzCis6MTBENUIwMDA2OUJFM0QxNUI0RUYyM0IzOUNEOEY3MUVDNkZDQzRGNzczCis6MTBENUMwMDA3QzIzODlFRUJCQTZGNjc0RERDREYzNUQzQjQ2Qjg1QUVECis6MTBENUQwMDA4OEFGOEJGM0ZCNjIwNzIzRjlERTM1NTVGMDM1QzU1RjY1Cis6MTBENUUwMDA0RTNBM0EyMzg5NUVFNTc5QkU1MjkyQzY0NzRERDNCNzhCCis6MTBENUYwMDA4RUU1RjUyQkVEOTYyRUM4ODNDNTBGQ0U4RDcyRjI3OTkwCis6MTBENjAwMDA1NjZFRTFFNzc5MkVDN0Q4MjZGRDc5OUU5RkI3MzNGMjkzCis6MTBENjEwMDAwNjVGNzkyRTBGM0Q3RjgzNjY0MDQ3NTU5QjM0QTJDMzNBCis6MTBENjIwMDA2MTJEMkU0QjEyRjEzMUNEODFGNTU1RDlGRDk5OTA3RkE5Cis6MTBENjMwMDA1NTJFOUIwQkU1Njc5QkREMEY5Q0U2RkFFMUY5RTY5OTE5Cis6MTBENjQwMDA5NEIyQ0IxQ0VFN0M5RTU3MDE3OTdDREY4RkNERjdCODZFCis6MTBENjUwMDAwMEE3OEFENjBBM0E0RjQ2RTQ3ODg4M0YyRDk3NzQzNzU4Cis6MTBENjYwMDA4QjgzNTkwM0JGMzE3NTI2NjExRjc2RTVDQUVGQjE4RUYyCis6MTBENjcwMDAyQzNCRDFCMzhEMDEwRTVENjY0NzE2RTZENUI1REU2NjRGCis6MTBENjgwMDA4MERDOUM3NTk3QTA2QkJFQ0ZBQzI2REVGRTFFMTMwQjE0Cis6MTBENjkwMDBDNzdFRkYxQkRBRjM3NTk2QUQzNTk1RUVFMEY5QTE1NjFFCis6MTBENkEwMDA2NjhBOEMwNTVERTUxMjVERkZCQ0MwNjMwNjFDM0VGRDBECis6MTBENkIwMDAxMTFCMDdCREEwNzJEMzY2OUE4RkEyMEI2NkVBMjgxRUMzCis6MTBENkMwMDAwNDNENkY3NzVBMUVDRUQ3OEE4RTdFNUUzMEVEREFCQzZGCis6MTBENkQwMDA2MDdBQjg0OTIzM0FFMEU5MkIxOTQ0MEY3MzY2MTEzRDhCCis6MTBENkUwMDA0Q0YzNjdBRUU0RjMyQTMxRDYzMTM3RUMwQzg5Q0MxNTE0Cis6MTBENkYwMDBDNkU3REZDQjdBNDg5RkU4RTVGQTA0RTQ5OUUyMjc4QTk3Cis6MTBENzAwMDA2RjcwM0E3MDVCRTMwM0Y4REREM0NDQTdDMjc5RjJERTI5Cis6MTBENzEwMDA2NjJCQTU0RjM2M0I5ODg5QzM3NzVGNzMyMkU1OUY2OUQ3Cis6MTBENzIwMDA3NjUyREFENjlDNERERjdGRDlFQ0EyRkM4MUU2NzE5NDZCCis6MTBENzMwMDAzRkQ4RUNBNkZDQTFFNjk5OTRCRUQ4NUM0QURGMTU1RjAxCis6MTBENzQwMDBFMjcwMjEzRUE0Rjg4QUUyNDc4QTlFMTQ1RjBBQTVBM0VDCis6MTBENzUwMDA3MjI3RjYwNkI1MjdCRUE3RjgxREQ2NjFDODBCRjAyM0MxCis6MTBENzYwMDA4NURGNzRBREQ0OUI5ODA2M0VENkI5MDBGQ0EyQzQ3ODgwCis6MTBENzcwMDBGNkU5RTczOTdDN0JBQkVEQUUzMDI3RTAyMkY4NUVBRjBGCis6MTBENzgwMDBERDRBNzIzRUQ1QzIwRUUxRkNERkIyQzJERDc1Nzc5MDk0Cis6MTBENzkwMDA1Q0JEQjU1QTYzQTYyMEJBQkRBREQxQzY0QzQxNzQ3QjAxCis6MTBEN0EwMDA3QjUzOEMyRTVGRDZGNEY2QjEwNERFRkZERjUzM0M1RTc0Cis6MTBEN0IwMDBFMEU1RTQ5RDFGM0ZGQTlGRkNGQkUzNzc3RTNFMUNGODBCCis6MTBEN0MwMDBFNkYzRDhGRDEwQzY1RDEzREUzNzhGNThFNEQ3OTk0OUNDCis6MTBEN0QwMDBDRTBDMEIxN0U3QTQ2MUUxRTI5Qzg0M0ZFMDY3MTExM0Q0Cis6MTBEN0UwMDBGQkY0RjEzQkZGNEFGQkJDQUIyOUNDNjk4NEZFMDE3QzE2Cis6MTBEN0YwMDA3MUY4N0UyMEYxQjVBODI5OENFMDU4QjFGRUQ0RDNDRkMyCis6MTBEODAwMDA2M0JGQUZCMTEwQkY1QkI0NEVFRUNGOEQxQ0FFNDE3QTlCCis6MTBEODEwMDBEQjg3NDk4Q0Y0MzNDRENENTgxMzg3REY4NzNGQjJGOENGCis6MTBEODIwMDBCOUVDNjcxRjZBNTY5RkM2MUI2QUZDRDA1NEM2QkY3QjAzCis6MTBEODMwMDAzNkZFRUEzREU4REI1QUQzMDlEMjhGM0Q1NkJCREY4ODdFCis6MTBEODQwMDBGOTc5Q0Q2NzgzRkJEMzlBOEU1MzNERDYzOTM0RTZFMzFECis6MTBEODUwMDAwOERBOEEwQzcwOEMyODcwNUJDMDI3NDBEQkMwREZBMjFFCis6MTBEODYwMDBFQzIzMENGQjlCQjU2QThFRTE3QzVENTVGMjdCRDU0NkMzCis6MTBEODcwMDA4REY0MEUwNUZGMjdGMjhDQjRBRjRFRTc5QTA4QUZEM0I0Cis6MTBEODgwMDBCMDY3MDcxMzAzMjMzOUE1RTg5NkYzMERCNzBGRkJBMzgxCis6MTBEODkwMDAzNUQ3QjIyNDg4MUYyRjkyREYyQkIzMEQ5NEFBRUZBN0EwCis6MTBEOEEwMDBGOUI2NDQzRkQzQjBCOTc4QkZGNzY2QTc1QjE2MTNCRjhDCis6MTBEOEIwMDA3MzVBQzAwRjU0RkQ0NUQ5NzkxQkQyMEJEMENGRDQzODQxCis6MTBEOEMwMDAxNkI0MkY5RkNCMzNDOTc5Mzk4NDFDQjM3MjM5QzZEQkE4Cis6MTBEOEQwMDBENTBEMjAwRjk0N0VGMjI5RkU3NzNDQ0Q5RkNFNUYzNThCCis6MTBEOEUwMDBDRjNDRjVDQzhCQjA0QkJDMUY0Njc4QUFCOTQ2REEzNzkzCis6MTBEOEYwMDA3MjdDNjNFNjkyNUVFM0I2NkI3QzlEMEQxMkZGQzU0RkIyCis6MTBEOTAwMDBGRDI5QUE5Mzk3MkYzRjIwRUNBNzNDRUQ0MkRBQjBBNjYxCis6MTBEOTEwMDA5QUVDNjUwRDJFQkU0RkIwMEYwRTk5M0ZFQzBDQTJDQkNBCis6MTBEOTIwMDA1NzlGNzkzRkFBOTNDRTE3REU2NDQzMjI1MjdGMzJFMzlBCis6MTBEOTMwMDA2OUMzODE1MzMzMThGQTYzM0QxQjFDRjYyQkRCMkREN0NCCis6MTBEOTQwMDAyRUQzMzk1M0FEQTNFNEYwOTdGMTM0QkU3NjI5OUVFQTg1Cis6MTBEOTUwMDAxRjVFMUZERjlGMUQ2NDM5MzM3REQ4Qjc3RkM5Q0VFMEJFCis6MTBEOTYwMDBENkQ5RDU5NkIzNEQxNzhDN0NCRUNCRDdDQ0ZDMDQ3NERFCis6MTBEOTcwMDAxRTVBRkY5M0JDQzgzOEQwMEYxQkNCQzY5MjFEQzNDNDIwCis6MTBEOTgwMDAwQ0MwRjc0QUFCODA0M0FGNkY3ODM0RkIxQUZCQ0JGMjg1Cis6MTBEOTkwMDA2REJDMTE1N0I1N0E0RENFNjgxNzlGNkYzN0VDRTdGRDE4Cis6MTBEOUEwMDBENENGQzkxNzcyRkQxQ0RGNDc4QzlGQTVCQUY3MTlFOUMwCis6MTBEOUIwMDBCQ0QwQkQyRjkyRThCRjYxREYwM0M3MjdGMjdDQzMyRTI2Cis6MTBEOUMwMDAwREMzQjI3QUQ2NDE3MDZBMzg2MDY0RDY2MDc5MDZGQkJFCis6MTBEOUQwMDBDRUEwODFFNzU5RkI1NDY0MjNFODY5NTk5QkU2REVDRDZDCis6MTBEOUUwMDBFN0QzNkI3NTQ2MEYwRTlBOEYyRDVGRDA1MzZENThEQkMyCis6MTBEOUYwMDAxODgyQUI5Q0ZGREYyNTNGNTNGNTk2QjUzRjYwMDFCRTEzCis6MTBEQTAwMDA3OEJERjNBNEJGRkMyMjgyOTFERDhDRjVCQzg5Nzk5RUEwCis6MTBEQTEwMDBEOTlFRUY4MjdENkY1OURCRkUwNjkyRkZGQjIyMUNDMzZECis6MTBEQTIwMDBGOTNBM0U5Nzc2N0VENUNGRTA3Q0IxOUYwNkU3MEJCREY1Cis6MTBEQTMwMDBFMzhDQjRFNzlFNzlDNjQ4N0MwOEYzQzQzRUZDMUM3QUFDCis6MTBEQTQwMDA2RUQwM0M5M0U1M0M5M0YzODU3RTczMDRGQkIxMzA1MDdDCis6MTBEQTUwMDA3RjU5NUI1NzU0MjZBRkZGQzlBMUI3MjkxRDJFQzc1OTVGCis6MTBEQTYwMDA2NkVGMTgwREI5RjlDOTgxODg5OTNFNEE3RjNBRTMyNUQ2Cis6MTBEQTcwMDAzRURFQjlCNkE5NzE1QUQwQkVDQUNCMzc1M0JGRTdCNjlFCis6MTBEQTgwMDAxQjY3MDI1RUNDMzc0OEVBRjk2REI0OUUzM0ZCOTIzNUQyCis6MTBEQTkwMDAzQURGMDJERTVDQ0YzRjczRTBEOTI4MDNFRDVCQUY2ODZECis6MTBEQUEwMDAyN0YxNjhCMDBBM0I2RDU4OEM1M0VBOTlENjU2RTgxQkFCCis6MTBEQUIwMDAwQkI5NzYxN0NERjk1REZEODEwQjI0N0Y0M0JGQUJGQTFGCis6MTBEQUMwMDBCNERGOTI3MEZFRUUyMUJCMDZGRjMzODA3RUVCMUQwMkI5Cis6MTBEQUQwMDBFNzI1QzY5QzA0RUM4M0YyNkI5Q0I3REMwQTNFRjY5QTAxCis6MTBEQUUwMDA1OUUwNjFBOEYzMjE5Q0FCQ0FERjFBNDQ3NjhCOTU2Njk2Cis6MTBEQUYwMDA2NzAyRjI1RkJDQ0UwRjgyN0NERUU1Rjk3MjdGMjc3NjhCCis6MTBEQjAwMDAxNkMyQ0VEOTk1MjZFNDdBREQ0NjdFNTBFMUVCMTlDMkU1Cis6MTBEQjEwMDBGMUVFRTU0QkFFRjMxOTk5MjczRkUwMjc5QTlGOUY0RTEwCis6MTBEQjIwMDBFQjdCQTREQUUwQjY5MDlGQzU5RjA1QkJFNzQ5MEJGM0ZBCis6MTBEQjMwMDA5MkRGRTg5NzM2RTEwRjQ4MTc3NkZENDdBNEJGQTgyRTdECis6MTBEQjQwMDBENjlGMzUwOEY2MkY4OUM3QkEzOUJDM0MwODlGNzUzQjZDCis6MTBEQjUwMDBGRDU5RDA1RkNFNUE4NDlEMEZFNTBFQTQ3OUEyNUU4QjRECis6MTBEQjYwMDBBNDFCRjQ4MzdFQkJEMjFDRTc0OUNGN0MyRTkyNDFERkZECis6MTBEQjcwMDAzNzNDMUYyOUVDMEEzRkI3RUQwQzBCOTI5QkQ1OTJBRUI4Cis6MTBEQjgwMDBCOENFRTRDNUZBQkRCQkM1RkMzMDJGRThDRkNCMkNBRDc5Cis6MTBEQjkwMDA1OUQwMkZENUI4Q0JBMjVBNjlCQ0IzNzJCQzY1RTFBREUwCis6MTBEQkEwMDBDMjNGNjExMUY2NDhENEE3RjFDRDhDRkMyODNENEY4NENCCis6MTBEQkIwMDA5MTlFRkE3OTUyQzc0MThDRkZGOTEzMjMxOUU0Nzg1N0UzCis6MTBEQkMwMDA5QTZGQzkyMTJBRTdGQTFCQzc0N0NEOTM2MTdFQ0NGNzJDCis6MTBEQkQwMDBCMzI3MjI3RDhDRDdGRkNDMkNGNEExQ0YyMkUzNDkxRkExCis6MTBEQkUwMDAzQTExQjlCNTlDRkMzMkJCQzIzNEQ4NTUzRUQzOTgyNTA2Cis6MTBEQkYwMDAxMUU1QkI4NTFGQTNBNkI5ODlGQzBGMzU3Q0JCQjMzQ0RGCis6MTBEQzAwMDA0QTY3QjI1ODk0OEYyNDdCQ0I2N0JGRTZGQjU0QTNFRkRGCis6MTBEQzEwMDAxQkYxRERDMzVBQ0I3RjgwN0RCNzM3ODJFQzZFOUYzRjBGCis6MTBEQzIwMDBGOTVGMjNGQkYzNUJENEVDRDJEQjk3MTQxREE4RjI3QkU2Cis6MTBEQzMwMDAyNDVGQkE0N0MyRjFCRTdDMDdFMUJGM0VBMjZENkIzQURBCis6MTBEQzQwMDBBRDUzRUM1NzhFMDczQTc3RjFGRDExMEY3QkY3QzlCNjRDCis6MTBEQzUwMDAxN0UyMzUzQkUwRUNDRkZBMjlFMEJFNTc5QzZGM0VERjgwCis6MTBEQzYwMDA2NzI2QkY0QkNERjM5MTZFQjJFM0RDM0RENjAwNzk1MTEwCis6MTBEQzcwMDA2MzE0N0E3MDhEODE4MzhGQTdEQTlEN0JCM0EwNjdCNzE5Cis6MTBEQzgwMDAzQzYxQ0IwMzNDMzhCQ0U5MUNEOUIzREIyOEM3MTFFM0FBCis6MTBEQzkwMDA3RUI2Mjc0NUQ4RjVGRDMyN0Y3MDE0RDlGNTY3QzVCMjM5Cis6MTBEQ0EwMDBEQkU3OTA5RUIzN0QzNEUwN0E3MTU3ODQwMTc0QzFDNzdECis6MTBEQ0IwMDA3MTZCMUMzRTM1M0ZGOEExODA2N0Y0MTJEMkNCRjlGRUEwCis6MTBEQ0MwMDAyMzdFNTkyN0Y5NjVGREREMTNBMzI3NjIzRkJENjU2NEY3Cis6MTBEQ0QwMDBEMDBCMkU5QTVDMDlFMDg3QTFGMEZBNDBGMjk1REE4MzI2Cis6MTBEQ0UwMDA4RjVBRTBCN0FCRTNGQkM2QzNGNzREQURGNDhGRDUzRTFCCis6MTBEQ0YwMDBBOTkxNUU1N0JCNjFFMjQzQzQwN0RGMzRCM0UxN0MxRUU4Cis6MTBERDAwMDA2N0RCMUU4ODBBQzZDNzcxQzlDRjAyRUQ1RDU0QkY5Njk2Cis6MTBERDEwMDBENzE3RUQ1RjhCQTJGOUVDMzFCQjMwOUY1MDNDN0VFQjA3Cis6MTBERDIwMDBGNjRGMUFCRjU1RkIzRUZBNjhFMzcyN0RGNDk1RUJCRUUxCis6MTBERDMwMDBDODNBQkVGRjNFRjhDOTNFMUJEOUFGMzhERTUzQTE3N0MzCis6MTBERDQwMDA5QzMxQjcyREMxQkFDRjNDNkQyMzNFNzMyNjQ2RUNGNzBDCis6MTBERDUwMDA0RjM4M0ZGNDhFQzAzQ0JFNzMzRkQ5Mzc3RTM3OTc0MTcyCis6MTBERDYwMDAxRTJDRjVFOUZCNTVFM0JFMjZGOTZGRkQyMDU3MzRFQzc4Cis6MTBERDcwMDA2NEY1MUMwRkU4OEZFM0U1QkJENEZFMkQzM0I1MEY1REQyCis6MTBERDgwMDBDNzkzNjg1NzE4QjQzRjlGOEUyMDdBMzkzMzQ0RTBFMzM1Cis6MTBERDkwMDBDQzMzMjM0OEFFNzRDNTA4M0FFN0YzNERDNTc5RTU0QzVBCis6MTBEREEwMDA4QzQ4MTk5NDExNEUwNzM1RjIzQzdBNjY2QTFCOURCRjY4Cis6MTBEREIwMDBDRjY4RkIyOUVEMzI4Qjc2MzU0REQyNkZDQ0U5MkUxMTMxCis6MTBEREMwMDA3NDAzOUE4NDNGQ0NCQUE5MDNGQTA0RUNENTYzRjIyODExCis6MTBEREQwMDBGNTg3QzU1RTY5NzcwNjdENDIwRTY1MTQwOEY5QzUzMDgyCis6MTBEREUwMDA1RUJDRjQ3RjkwOUVEMjY2MDE1RkY2NDgzREFFNkVERjZBCis6MTBEREYwMDA5NTdFMzhFMEI3NkU5RjQ2N0UyNDgzRUE4N0NGM0E0RTAxCis6MTBERTAwMDBEOUNCMzkzREQ2N0EzNUI3MERGMzU5Qjc2MjE5Rjk5MUE3Cis6MTBERTEwMDAxQTM3REYwQTdBNTdFQkE4MzVCMTk5MzgwRjc1Njk0NjdBCis6MTBERTIwMDA5QTRGOTc4REVGMUJDMDIxNzhCQzIwQkQyQjMyMzAwRTRFCis6MTBERTMwMDA3M0M0OTM5RTQ5Q0E3NTRDODE5MDU3QzhCN0YyRkVFQUU1Cis6MTBERTQwMDBENjY5OUI2ODlDMzQ3NUFFMTRFQjUzNzBFMjYwQjFDMDI4Cis6MTBERTUwMDA1RUM2Q0ZGQkEyN0M4MEY1QUI3OTg2QUU1RkNENjc3OERFCis6MTBERTYwMDA4MUIwNTM3NEE1MzlFRjJGMDJCRURGMzBCQTcwNEVCRkI4Cis6MTBERTcwMDA3ODM5M0YzQUY2NkJGNDMyOUNEQ0ZBRUNDNjdDRkU3OURBCis6MTBERTgwMDBBMDI5M0VGRjJGMjU3RkFCODU1RDlBQ0YzMzZCQkJERThDCis6MTBERTkwMDAxRjkyQkQ0QjlGQkY2QTlGM0U5RjczNDA5RjFGRERBRTg5Cis6MTBERUEwMDBDRkJCNUVENUU3ODdDODcxMTU5QzcwRUU3NThFMTBFNzA1Cis6MTBERUIwMDA1RUE0MzhGNzNBQzNDNEI5MTc3OTlDN0I5MUUyREM4QjM2Cis6MTBERUMwMDBFRjM4RjcyMjhGNzMyRkYyMzhGNzIyOEY3MzJGNTI5QzdGCis6MTBERUQwMDA3QkYxQkRCMjQwRjBFRjNBNjk3NzA0MUVFMDk3NjEyRjA1Cis6MTBERUUwMDBEODk0OUY5REY2NEJGNzgyNzhFMjlGQ0E0RkRBQkQyQ0ZCCis6MTBERUYwMDA4N0YyN0Q3NjlERDk1NkIyRUI5MEVEODZFQjI1NzM4NzQwCis6MTBERjAwMDA3QTZFMjgyODg0RkZCNDYzNDMxMkYwNjZFQTI0N0JFRTFECis6MTBERjEwMDBGMjE3ODUzREI3MkVDRjY2ODc5REExNzNGRDI3MUJBMDA1Cis6MTBERjIwMDAzRTY1MERGNUNDNDFGRDZFNzNDRjFFQTIwMzkzOUZGOEE1Cis6MTBERjMwMDA0NkU3NUFFNzVCNTMwNEZFQzhERUMxRUNCMTc0M0VBOTY0Cis6MTBERjQwMDA4MEJDOEIxRDE4OEZBMTdFMTVCNjQ5RUY0NzA5RjVBQjM0Cis6MTBERjUwMDA4NEZBNTM0MkU5NDBGOTUxMUUzN0Y3MjQ4MURGOUY3QTUyCis6MTBERjYwMDBDMkJBMDlGMzNGMjVFRDY0NkNCRTk1RjQyRkE1NTc5NzBGCis6MTBERjcwMDAxOEVEMDRBNzk1Rjc2OTNCMjFBNzU2MTVDNDUyRkJERTlGCis6MTBERjgwMDAxMzVDREZFRTQ3REVBQUI0RjI1MkJFRDBBQjU1N0U5M0VGCis6MTBERjkwMDA2NjIwM0Y4REM3NEQ3MjY4OTU5QzUzQUFENkQzNzUzN0JFCis6MTBERkEwMDA2ODI0RDI0MDcyRkNBMkRENDBFNzgyOEJFRjE4NDk4RkQzCis6MTBERkIwMDAxOEIxQ0RBMDVCQ0Y0ODVGQjg4RUJFQUVERTFCMUJFMkIyCis6MTBERkMwMDAwRjFDQTJBQjdGQ0RBMUY0MTA3RkUwNTU3QTNGRDU0RDU5Cis6MTBERkQwMDA2QjVGQzFGOTdBRUVBNjdDNURCREFBRDI4OTIxNzA5NEVGCis6MTBERkUwMDBGMzk2N0E2OUNCOUE2REE5RTAzRkFCMjI3QjY5RkVBQkQxCis6MTBERkYwMDA5RUIzRDFCRDhCMkEyRTVGREM3Q0RERDVDODcwRkU1ODY4Cis6MTBFMDAwMDA2RDc1REYwOEY4NTVCNzk5NjM2MEQ3QUE5NEYyODczNTI0Cis6MTBFMDEwMDBFOUU1NzFCNTg5NzkxREIxMDFCQUFCNzYzMDc3MEM2RjNFCis6MTBFMDIwMDA3RjJFQjc3NThGODFFM0VEOUM2MUZCRDYyMjI3RkM0QkQ5Cis6MTBFMDMwMDAzQjUyMUQ5Q0FFNTY2QjZERjFFMzc5N0ZBNzYyM0MzQjcyCis6MTBFMDQwMDAwQUY4N0U0RTM1RkI3RjUyMDY3RUI5M0Y4M0FERTVGNTdCCis6MTBFMDUwMDA0RTZEN0EzNjhBRjQ2RTQ5NjdBOTY2NDczOEYwQkRBM0RCCis6MTBFMDYwMDBENTQ4RTcwMkQ4QTc2MDBGNTJGNEIwQTM3NTUwNzhBNjQwCis6MTBFMDcwMDAzREIwQ0UwMEZFMkZEM0ZBMzg1RUU4REU0OEFGRkRDOEQzCis6MTBFMDgwMDBEMDU1RDBFM0RBQzQ3QUFCQTc2QTVFRDI5M0U1N0E1NjZDCis6MTBFMDkwMDA0QUI5QzJENjg5N0U1NkNCRkM2OTc5NUU1MEVCM0IzQkQwCis6MTBFMEEwMDBGMjk1RDE0RUY4MzU5QjBGQTUxQUMxQzcwREZCRjYyNDhBCis6MTBFMEIwMDA0MUJGNDhGMEI0NjNGRjU0RUYxOEZFOUY0NTdDREM5QUUzCis6MTBFMEMwMDBERjFCMTlGQ0M4MUY2RDk5MUUzNTFFRkFFN0QzNjZEN0YyCis6MTBFMEQwMDAyQzlFQkZCQkY1NjcxNjlDMEI2QTRDM0UwQkNFOURENUE0Cis6MTBFMEUwMDA0RkVDQjBDMEZGN0ZFRERFMURGNDdEQzlERTBBM0E2RjU0Cis6MTBFMEYwMDAyRjY1OEQ3NDhFRkNENDJDRTRCNDgyNDdGNTM0NkRCQjRGCis6MTBFMTAwMDA4M0NGM0JCMzUwRjBEN0VBNzA3MTFGQTRDNDU4NzQyQzZFCis6MTBFMTEwMDAwRUVCRERBQkU1NjJCRDM3OTVFRUI3NTRGMEVGRUY0QTlECis6MTBFMTIwMDAzRTFDQkEzRjdBNUY5RjVCMzIxODc2QTUzNkUxMDcxRDI5Cis6MTBFMTMwMDA2ODNGQ0NGMzhGQTRGRDMwRjc1MjFBQTUzNzVEQkE5QTI5Cis6MTBFMTQwMDBDRTU1QkY2N0E1QTM4ODRGRTQ4NDlDNjc1RjM3MEFCQkExCis6MTBFMTUwMDA1OUJCRDgwN0Q1MTY3RkRDNUNFQzkzOTdDREI0NEZFQTVBCis6MTBFMTYwMDA0REIwN0RFMzlDQ0NEODA0OUU5NjE2MTk3NUY0QkFCQ0NDCis6MTBFMTcwMDAzODQyNDdDRkYzNTlBQ0NFQUY3QzMzMUJBMkNCREYzNDUwCis6MTBFMTgwMDAyQjQzNTdGRjk2OUJBRTBFQTFGRkJDNDAzOUYxOTEwOTdFCis6MTBFMTkwMDBCQUZCMkJGNTZCQkM0RThERUM2OEQzRjRERjc5QkE4NkY1Cis6MTBFMUEwMDBFOEVDN0E1REZCN0EzNjI3NTAwRkU3RTA1REJGMjUzODUzCis6MTBFMUIwMDAzM0Q2NjFDMTc5QUJEQTIwRUVFQkNDRjc3NEM5RUY5REIxCis6MTBFMUMwMDBGNDlEMkY0NEI3MEY4NzY1QjhGRTUzQzg0NTMzRDlFNzkwCis6MTBFMUQwMDA5NTdEN0EzRUZFM0ZBMzNGQjlDODExMkRDNzhEMzYwQTAzCis6MTBFMUUwMDBGQjgyNDdBRjc3NzREMEY5OTMwOTNDRDQ0QjdCNEY3RENBCis6MTBFMUYwMDBCNkIwRjdENDdCM0IyQzhENzY4MkJGMjk5OTgzQTRBMTNFCis6MTBFMjAwMDA1NTIzN0IxRUFGNkY0RDhFMTVGOTM1Rjg3RUMwMUNCMEJGCis6MTBFMjEwMDBCMzMwRDFERjI1OTQ5RjMwNTY2MEJGODQ5NjM3RjA3NUI4Cis6MTBFMjIwMDA0M0NGNjg4MEJEODZFQzRDMzMzRjIxM0I5MzFBNDdGNkMxCis6MTBFMjMwMDBBRkU4NzRFOTM2QkRGREE4MDE3NjlEMjA3QzJFMkI3NEQ1Cis6MTBFMjQwMDAxMkJERDZFQ0REN0Y3QzA4ODdDRkRDRDI5ODVDRUNBM0Q2Cis6MTBFMjUwMDBCQUI2RDlFNjhBOUMyQkU5NERGMUY5OEJENTA2RjI3QjRCCis6MTBFMjYwMDBGN0JFN0U5NEU4QURCN0RBNDQ3NEZENEQ3MDY5NzAwQjZCCis6MTBFMjcwMDBCQjY2MjgxRDJFRTFFQkIyRjJGMTk3MUNEMDVDM0U0RDNGCis6MTBFMjgwMDBENDAzN0M4NjgwM0U0M0UwOTNEQzBGREMxNEJDRkFFMEQwCis6MTBFMjkwMDAxNzUyQkUxNEZGNTM4MEZCMDQ5QUNGOUZENjFGNUM0MkQ3Cis6MTBFMkEwMDBFMEE5QzYwOTgxMTcxQkE3ODdDNzEyOEZGMzJERjA5RjFFCis6MTBFMkIwMDAyNTI3OENDQ0Y3MkRENkJGMTRFQkM0M0NGODNBMzE4RjEwCis6MTBFMkMwMDAzOTk3ODRERDQ0RjkxMzZFQkU2NEEyN0MxRkREOTQ3MjFECis6MTBFMkQwMDA3OEU1NjFERkU5Rjc2OTFGMUQ5NThBN0QzM0VGNTIzQ0QwCis6MTBFMkUwMDBCNUZCNTdEMUQzMzdEMTkxOUFCRkUyREI4MTdENzQxNzRCCis6MTBFMkYwMDBDOThERTU4NTkxNzExRjczNTZDMUZGQkY5MEY4ODJFNDA3Cis6MTBFMzAwMDBBRjAzRUJBNTVFQzE0NzNEN0EzOTMzRUNDRTcxNzRFRkI0Cis6MTBFMzEwMDBBOEQ3OUU0RTdBNDU5RjFDNzJFOENCNTc0NkE2MjdBMEU5Cis6MTBFMzIwMDBEQzIzRUQ3NjhBMUY3QjY0M0QzNTRFMDUyRjc3MEUwMjg4Cis6MTBFMzMwMDA1RDBGOEQ4NzNENzZDM0JBOENENENFMjA3REM1QjNERTBDCis6MTBFMzQwMDAxQzBGN0I2MUVBREE0MTk0NTZEODFDRjE5MDIzMTU2QkJGCis6MTBFMzUwMDA4REE1OTA4RjFGREU5MzEwM0YwRUY2RjlGNUU2Qjg1OUE0Cis6MTBFMzYwMDBCQ0VCMEZFRjI4NDg2NUEzOTAyRkExRjRENEU2QjBGOUQ5Cis6MTBFMzcwMDBDMTc2NkU5NTZFMkIxNDdBNjhGRDlERUY5MTVDM0I2N0JDCis6MTBFMzgwMDA3ODNENkEzRUY2RERGQUU3QTI3MEY1QTY3NkZEREI2MzFFCis6MTBFMzkwMDAxQzVDMjVCOTNCQzZGMzUwMjFGOTUxNzdFQzcxMDA2RTM2Cis6MTBFM0EwMDA4RTFEQTM2MUE3RkUzOTZDNjg4MzAzRkE0M0NERkE5MkYwCis6MTBFM0IwMDAwNEQ4QzVFQUZFNzZGNDMxQzg3RENGNUE3MzNDRjRDRjU5Cis6MTBFM0MwMDBDRkRFRTE3MjUxMjNCOTQ2N0FDM0E3MzY0NkU3QTU0RjlGCis6MTBFM0QwMDA3NzQ3RjhFMEJGRkY1NDYzNkVGODc3OTYxOTVGMTlFRDQxCis6MTBFM0UwMDBEMEM5RDlGNjlCMzE4RkJEMDk5RTlGMTcxNjYyN0NERjdECis6MTBFM0YwMDA5RTQ0OENFRkYyRDJGRDRDQ0ZEQUUxRDFGREQ5NTE1NERECis6MTBFNDAwMDBCQTdDOUJEMEVCRjYyODNCQUVCNEY3NDI5RjQ3MUVGQThFCis6MTBFNDEwMDAzQzFCMjFGNDc5RTRBMUNGMjM4NTNFOEZFRkM3QTQxREQ3Cis6MTBFNDIwMDA3RjU4NEI0RjJFQ0VBM0RFNjkyQ0JCOTFFNEFFM0QxQjMzCis6MTBFNDMwMDBGQUZBMkEyRERDNDU3QUE2RTY0QTgwN0Q4Q0JEMTMyM0E0Cis6MTBFNDQwMDBFNDZEMDg3RTU1M0FBOTg3RUI1QzQxNzQzRkU1OTI5NUVGCis6MTBFNDUwMDAwNURGMzM5QkNBNjI3NEY5RTlENjI0NURGRDEyNDc5QTQxCis6MTBFNDYwMDBBRUZDREFDNDkxQkFGMkVCOUNCOUJBRkM3N0IyQzdFQjU2Cis6MTBFNDcwMDBFQURGRTA5QUFBQ0I3Rjc3REM3NUJBRkFCM0REQjM3NTMxCis6MTBFNDgwMDBGOUI5MzMxN0U4RUFDRjJCQUREMDk1REYzMjdGOTlBRURCCis6MTBFNDkwMDA3QzgxNjc4NTJFN0Y2QkY1MURCQUZBQjczNUFFRDU5NUIxCis6MTBFNEEwMDBCQjk5QzMwNEI5RDc4RTczMTY4N0ZCQ0IzODY3RjE3NDU5Cis6MTBFNEIwMDBENTFCQzNFREMxNzgyRDlBNkU2OEVDQ0Y0RTdGNUVFQTE2Cis6MTBFNEMwMDA0MzEzQzdCQTNGMDM3REE0MTgwNDFERjJENDBEMTVFMjBGCis6MTBFNEQwMDBCMjk0MkJDOUNDQUY4OTczNkU0NzEyRTgyNkI0NUU2ODNDCis6MTBFNEUwMDA3OTUxQzQ5MThCNEU4RUMzMjUwNzYzNkYzNTcxM0U1MkFGCis6MTBFNEYwMDAzNEY2NDg3RTA2Q0YzRjMzNjY4MUM4NEYzQ0YyNkMzQTEzCis6MTBFNTAwMDBDRjFGM0NCOEY1NTYxM0U3MUY0NUQ3MUNCOTg4RjJEMTg5Cis6MTBFNTEwMDA2M0NCNDU3RTJFMjM5NUUzQzg5OEJGMkRGNEYyNzUxNDg2Cis6MTBFNTIwMDA0RDQ5REZFNDEyNzY5MjdFRUY2OUFBMTQ3MEMwRkQ0NjcxCis6MTBFNTMwMDBDMDAxQTk5RkQzMjdEMjIzOUMzRTkxQkVDQUU5QjNDQThBCis6MTBFNTQwMDBDQ0Q4NzE0RTlGNDg0RkYwRjMyNkJFRkY4NjlGMzc5MTdGCis6MTBFNTUwMDBCRUNFQ0Y5QjQ4REZFNEU3NERBNDFERkNCQzg5RjQ3NzE5Cis6MTBFNTYwMDBDREYzMjk3REE3RDk0M0VEREU2REFFQTZGNEJERTY0NjE5Cis6MTBFNTcwMDBGQUZFQzdFNjI2NEEzRjY4RjZEMkY3QzQzMUNBQUVFMEQzCis6MTBFNTgwMDAyN0ZCOEJGMjMzMzVDMEJGMDdGQkRDMjFGM0Q5NjAzRjlCCis6MTBFNTkwMDBBQ0YyMTMyQUJGNjA0QjIzRUI4Q0MwM0VFRDM0QzU3QzNDCis6MTBFNUEwMDA2QzBERjhGQjA2RTZCMzI2RjY3MTkwMUVCNjM5RDE5REM4Cis6MTBFNUIwMDAzMTg2QzYxRkVBMjA3RjhGRkMzRTREOUI5QjAyRDdERjMyCis6MTBFNUMwMDBBREEzM0QyM0M3NzA3Q0NGQ0JBQjVDMUZDREY5Qzc5NDA3Cis6MTBFNUQwMDBDQjhENjZEMENCRUZFNTNERDVEMEZFMkY0QjNBODkxQkQ2Cis6MTBFNUUwMDBFQjFFOEQ3NjkzQURFMjFFREU2NEFCQjg2NzM3RDlENEVGCis6MTBFNUYwMDBEOTAyN0VENEYyMjU3M0UyMUVDRDJCOTExNkUyNEYyRDY3Cis6MTBFNjAwMDBGNzk4N0NCMDUzNkE1RjMwQ0E0RjhBNjM5NDZGRjlCMjRGCis6MTBFNjEwMDA4M0VFRTU0RDc2QjgxMjQ5REVDODdDOUZGRjFDN0Y0MTMyCis6MTBFNjIwMDBGNzY1OTQzRjVCREQ5MzI5RkVBMjczM0FGNDgwNDk3NjQ3Cis6MTBFNjMwMDA4QjMzMkNDNEZGMEVCRkY1MkI5MUVGQUFGOTMwOENBN0JBCis6MTBFNjQwMDBGQ0U0QkJCRTY0N0VDM0U4ODAzRjdDQjJCNTIzMEQ3NjlDCis6MTBFNjUwMDA4MjQ5QUJBREFFRTBGQjNGQ0FFRkFEN0REMTYxODQzQ0ZBCis6MTBFNjYwMDA1MUY3N0NENDM4NkFCRTkxMjZERTVGNUVFMDFFQ0Y2NDJGCis6MTBFNjcwMDA0NzVCMkVFRTM1QjRENERCQTlCRjA0RkVERDkyNDdGNTJGCis6MTBFNjgwMDBEQzQ2NkFENzk2MEIzQkYwQTQzQUJCMEJGNjZERTU2RjAwCis6MTBFNjkwMDA0RjkwRUJFNkY1Njg5REM1NUY3OEU4QkVDMTI0NzlERjUxCis6MTBFNkEwMDAwMEZENTg0NUI5MTdGRDRDOEFGMzI3OTlCMEZFNDY4QkZCCis6MTBFNkIwMDAwQkY2RDA0NzM1REUzRTJGRTBGRjQ3RkQ4OEEwRkQ4QkVGCis6MTBFNkMwMDA3OUEyREZDQ0JGRjBGOTQyNkY3N0JCMDlCRTczRDVGOUYxCis6MTBFNkQwMDBDRDI5RjM1MjNFMzNFQjM0QjI1RjE5NjVGRUI3QTMzRDRCCis6MTBFNkUwMDBDQjgxRjdEMjMwQzc5RjIyNjg5RjY3QTRDMENFMzE1QjMxCis6MTBFNkYwMDBFQUVENUY0MzJGQUJGRjdCRThDNTJERjAzRDk0OTEzREU0Cis6MTBFNzAwMDAyRDk0NkUxNDVFMTQ5RTA3QTIyMzg1RjdBMEZCNUE4NEY1Cis6MTBFNzEwMDBFN0JFRkI1N0IyOUY1MEZBMUE4OEFFMTQzRDREQjYwQUI5Cis6MTBFNzIwMDBCQzAzQUZCODQ3QTNFODQ4RkJBMjZEMDdBREEzQ0U0QTMwCis6MTBFNzMwMDA3MjRFRDE1MTI4MUQ1QzQ5NDc4MjJFNUJCRTY3QTVGRUYzCis6MTBFNzQwMDBBRUE0QTMwMEZFMDE4RjdGOUU4RTNBOEM5MEJCRkYyODYzCis6MTBFNzUwMDBGRERDREVDMzY2NDRGM0EyN0JBRkYxNUM4NkRDQThCOEM3Cis6MTBFNzYwMDBFNDNDOEU3QzI1OUIzQTAzMjRBNUNBMUY0MEY5RTAyQjhDCis6MTBFNzcwMDBDQjQzRTk0QkQ1N0Y3MTgwRkUzQzVGRjQ5OEEzODNFOERGCis6MTBFNzgwMDA3MjkyOTQ4MTdGMThBMEZFNkJGMjVFRkM2QjM2NzVERjhGCis6MTBFNzkwMDBDMzZEQ0ZFNTc0MzA1REYyRTE1NTI1ODJCRTY2QTYxOUUyCis6MTBFN0EwMDBDOTlGMzEzRDY3MjlFOUY3Q0MyRUY0NjMyN0ZGODdFQzM5Cis6MTBFN0IwMDA2REQyQkY3RUJENkMzN0UzNzJFOTNBOEMzMzIzNEVBRjI2Cis6MTBFN0MwMDA3RjVGMkZGNUVFOTkyMUZFRjZFQjczQUUyNTNERkNGQTQ3Cis6MTBFN0QwMDAxMDNERkJCRDMxNTI4RjRFNjM2OUUyN0NCRDg5RjRERjkxCis6MTBFN0UwMDA2MkI5MUY5MzI1QkUzMzlDNDY1NkM0RTE1RUMyM0MyNkU3Cis6MTBFN0YwMDAwODgxNTdDRjVCRENFOEVGNUFFNkE1RkM3NUNDNDdFOTBBCis6MTBFODAwMDA3Nzk4OUZGNDgwMUJCOEMwNDBGRUJCOENEMUZERDFBMzhDCis6MTBFODEwMDAxMTM3OTYyREU3RkQ0RENGOUY5RTg5RUY3NUQ2OUU1NEZCCis6MTBFODIwMDA4QjAxQjcwMzNEOUY0MTNFMzQxODNEN0Y4NjlFNzkyRTc0Cis6MTBFODMwMDBDNTMzMDJFN0UzMjNDNTRFRDJDMzhFNTgzMzQ4MkZDNEY1Cis6MTBFODQwMDA3RTMyMDdEOTJCN0ZDREU1NjgyNjk3NzM0N0I5OUM0NTYzCis6MTBFODUwMDA3QThDQ0JEOTRDMkVFRjdFQzVFNTJDRjJENzY3QUY2NTBECis6MTBFODYwMDA2ODM3QzNBOUJGREZBM0RBN0ZDNzMxOUQ5OTA2MEQyQzk2Cis6MTBFODcwMDBDN0JFMzNGQTg1QTFCMDYzQkQxNjMzQTIxODc4N0IyRENECis6MTBFODgwMDA2NjZDMzFENkZCNUE0QzgyNDFBNDYxMTY0QTQ3M0Q5RkMzCis6MTBFODkwMDBEOTlGREVBQUU4MzUzMERFMEMxQTJGMTRCRTBBOUVBMURECis6MTBFOEEwMDA3MDU0RjBGRDI3RTAzOTY4NkNFMTk1RjBCQzBDRkQxRTVBCis6MTBFOEIwMDBGNjUzRUJEQjUxODlFOUYwMzNDQTc4QkEwOEMxMDdFQkFDCis6MTBFOEMwMDA5RjFGOTU4MDc1RDQ1OTA1NUMyNjM1NERBNDc0NzJEMzZECis6MTBFOEQwMDA3ODY2Q0EyNzNGOTMxN0YwRkQwQzRCODBDMTM5QzRDRTMwCis6MTBFOEUwMDBDNjRDRDMyOEZGM0Q0OTVCRDkwOTlFRTE5OEM3RDkzQzY2Cis6MTBFOEYwMDA3RjE2RDdDOEQ4MjdEQjVCQTI3MDNGRjNEQzMzNDYxN0ZGCis6MTBFOTAwMDBDRTM1NzU0NkU3MjYxN0VDRTRBRjE5NDU1Q0QwRTVBMzk0Cis6MTBFOTEwMDBBOUYwNkZCMjVERkRERjk3QUVCMzJBRjg3OTA5QUUzRjdCCis6MTBFOTIwMDBCQkM2NERGQjhEQzEzQjFCMUZEMDZCODY4Njg5N0JDNjRBCis6MTBFOTMwMDBFNDVFQzgxQjU4Q0YxOTEzMkVGOENDRDAzMEMxMUYxNTc4Cis6MTBFOTQwMDBCRTc4M0IyMTc3NzkzRjYzMzg1RjRCQkUzRjlDQ0UzNTI1Cis6MTBFOTUwMDAwNUMzREM0NTU4MEYzRjJGNTA1QzUxNkY3NjA0RDkyQjBGCis6MTBFOTYwMDA3RTIzRTMxMjI3RkJBRkE2QjhCQzk5MzhCN0YzRUZDNkY2Cis6MTBFOTcwMDBGMEE4OUREOEY3QkY5MTcxODlCRjE4RTRCOTE2RURBRjIzCis6MTBFOTgwMDA0RENCNEIwNDNDQTYzMEUxNTdCOUNFNkE3NkY5Rjk5Q0UxCis6MTBFOTkwMDBBRTFCMkJGN0UxNjgzNjVBQzZGNUU4Q0UxRkNBNEVEMjM5Cis6MTBFOUEwMDAxQjY3MjQzOTM0OTk2NTNEMDQzQjQxRjEwOTMzRDkwOThBCis6MTBFOUIwMDBGQUVFQkIyNTBBQkY2OEVGODk4QjQ2RjA5NTkyNDg4RDI5Cis6MTBFOUMwMDAwRDRBMEJDNEU3ODQyNTFBOTgzMzQ4NkZCNzM5QzM5OUE5Cis6MTBFOUQwMDAzMzY4N0Y0NDY0QzdFQUYyOTFBRTIxQkFGQUQxRTNEMjM4Cis6MTBFOUUwMDA3NUU1MzFFRUFCNzRFNTgzNjZFNkU5RjI4MzRCMjdFODIzCis6MTBFOUYwMDBFQTI3Q0M5RkE2Q0IyNzc5QUVEN0Q1NEZBRTlFQTNDQjI3Cis6MTBFQTAwMDAyQkJFOTcyQzNFQjE5NEM2ODVCQUY2QzM5QTE2RTlFQTk2Cis6MTBFQTEwMDBBNzc5NkI3NEU1MEEwRkNDRUJFRUM4OEUwNzVGMTQ3RjA1Cis6MTBFQTIwMDAxOTFCNTdFQUVBRkQzNDRBQzQ5QkNDQjQyRjk5ODVGREUzCis6MTBFQTMwMDAzRUJDRjUwN0ZBNzkxOTVGRDcyODdFRDQyOUY4QUQ5NzNGCis6MTBFQTQwMDBGRjAzM0EyQTQ5RDRGM0RGRTkwRUJENUQyM0I5RDFBNDBGCis6MTBFQTUwMDBDQjZGRjg0N0YxRUNCOTRBODdFNzUwNzg3MEJDQkJGQzQ0Cis6MTBFQTYwMDBBOENGRTVCNzk3RTc0QjdFNUQ2OTgyN0UwMUZGNDVGMDUxCis6MTBFQTcwMDBGQ0UxQkYwODVFMkZGQzE3QzE3OUY4MkY4MkVCQzM3RjQyCis6MTBFQTgwMDAxMTVDMEVGRjQ1NzA3OUZFMDkzRDlFMEIzQkY0NzgxRTJDCis6MTBFQTkwMDBGQjlFMUVDRjhBRkUwNkMyQzdGODRFM0QxRDg0RTI2MzcwCis6MTBFQUEwMDBFMkE3MjE3NDIxRjEzMDlGRkZEMzFGMUVFODI4QzJFOTlECis6MTBFQUIwMDA3RjdBMjMyM0ZCREMzN0UxRTU4NTEwQkM0QzFBRTk2OTNBCis6MTBFQUMwMDBDNzdFOUQzRkU4NjJBQTA1NzhFQUYxOENDMDc5RjIzM0VGCis6MTBFQUQwMDA2OTI3MDlCREM3RTlFNUVBMDBDNTIxRkNDMDQ4RjEzNzRGCis6MTBFQUUwMDAyNzBEQUQxQUY4QjIzRkM1NzM2QzJDQUY3RjdCNEUyMzU4Cis6MTBFQUYwMDBEMTRGMjIyQkREQkY4NENGQTdGQzNGQzJDODhGNTMzRTJFCis6MTBFQjAwMDA0Q0M0RUJCMjlDNEU4QTczNTBGQ0FFM0M1OURDMjM3QTY5Cis6MTBFQjEwMDA2M0FDM0NCRkI5QzQ3REEyOEVCMTQyOUY4RDc0MzlFODBECis6MTBFQjIwMDBERTcxNDU4RTg4RTNFMEM3QUVENEYyNTFBMDlGRDc2RDY5Cis6MTBFQjMwMDAyMzQwMEY1Qjg0REZBNDEzRjFDMjcxODE3ODYxRTg5QkVECis6MTBFQjQwMDBEMEVGNTJBNDdFRDVGMjA3QUIxNUVCMThCMThERTlFNEY2Cis6MTBFQjUwMDBFNDQ4OUY1NTc3RUZGNUVBQkQwRTVEN0U1NDVCQTJBRUFCCis6MTBFQjYwMDBGRTM1ODc5Q0JBRjI1QzdGQjZBRTNDRkY4NDRCOTcyRjk0Cis6MTBFQjcwMDBFQzE4QTdBQjNGRjYzREI3MkUzRkJFNzNBNkFFRkVDNDYyCis6MTBFQjgwMDA0RjRCNzVGOTY0RDZGMzMwRTAzQjRDMTNFNzdEMkJFNzMwCis6MTBFQjkwMDA0Qjc0MEZDQzI5RTI4MUNBRUY4RTExNzFBMEQyMEVBMDY2Cis6MTBFQkEwMDBGNDY5NzUxRkRBMjNFOTJFNTQ0RjFGNjYxMTdBNkE0QkY4Cis6MTBFQkIwMDAxMjEzRTczMEFCM0M2RjMxQkRCRUVFOTFGNzk5OTU5RUQ1Cis6MTBFQkMwMDBDQUJDRkFGQkNDRUExRTczOUY1RTJGRjU3NkE1MUYwNzIxCis6MTBFQkQwMDBERDYzNzYwN0RGNjMyRTk3RjFEQkExRjIyRjZFOUNCMDI5Cis6MTBFQkUwMDBFRjg1Q0U3Rjk4NDVBQ0I3RTUwRTBCQzU4REE4Nzk4NTJFCis6MTBFQkYwMDBDRTY3Nzk5RUEwREJEREQ2RkVFMzc3RDJDNzY5RDQ3RkVFCis6MTBFQzAwMDA1MTZFRTk5MDcxQkNERTYzNjY5NzhGRUMyODU3OENFN0Y0Cis6MTBFQzEwMDBFQUY0RTI1Q0Y5MjM4QkVCMkVFNzM3OEY1NzdFOEQ1OEIxCis6MTBFQzIwMDA0Rjk5QzE3MEZCRUMxQ0JBMkYzNkZGOTc0MUUzRTc4RDdCCis6MTBFQzMwMDAxM0Y0MUQzRjQxRUI3NzdERTVEMUUyM0UxNzhCQjYzOEVCCis6MTBFQzQwMDA0MUJGMDM4RjI3RTA5OTY4NjFFQjI4Q0U0OERFRkJCRjA4Cis6MTBFQzUwMDA2RDUzREI3RDIzNzg1MTk5QTVENTRDQzYwQkU2MzM4M0U0Cis6MTBFQzYwMDAxRTY2NERFM0ZBNTQyRUVDODIyRjNFNjJFN0ZBQzY2MzJECis6MTBFQzcwMDA0RDI2QjJGMzhDMUYzN0FDOEM2QjYyN0Q3MTFDQzNGOEQwCis6MTBFQzgwMDA3OTAzRjQwMTlEMDVFNzk0MjdDNzFCNjk5Qzg1RTNDNEJDCis6MTBFQzkwMDBGQTRBOEM5N0ZCRUVERjkzRkY4MjMxQzlCRjE5REQ4N0ZCCis6MTBFQ0EwMDBFOTg3REU4ODBFRDUzQUZFNTVGN0YxMTVERDg2QzI0OUIzCis6MTBFQ0IwMDA5RDJGOTk5NDNCOTk3MjVFMEE3RTZBM0YyOEY4QTk3ODQ1Cis6MTBFQ0MwMDAwOEU3MEE3M0U5NEUzQkM1NTVDQ0M0M0QzMjg1QkY5NzcyCis6MTBFQ0QwMDBDNzBCN0VCNDA5RjAyODE0RjVDMDhGMDZBQTU3NjJDQzgyCis6MTBFQ0UwMDA4OTg2M0RCQzk3MzlBMzFENUY2M0VGRkQxN0M2MjkxMEM4Cis6MTBFQ0YwMDBGQzA3OEFBRjFBODgzRjVDQzExNzA2ODhCNzFBODgzRTlFCis6MTBFRDAwMDBFOUVGMUY4OEJCMEFFMjBGRTI1RThGQzQ4NzJGRDM0MDcyCis6MTBFRDEwMDA3RUY0QkIyM0Y1RkJGODg1NzEwMkJFMUVCOThGQjk3QzZBCis6MTBFRDIwMDBCNUU3RUFGOTA0ODNGREJFNjVCRDUxRjIwOTIxNTdBMTlCCis6MTBFRDMwMDA2RkUwRkJFMkY1NjZEMjM3MTgyQkREOEEzOEEyOEZCNjdBCis6MTBFRDQwMDA5OEU5N0VFQjY0Qjc3Mzg2NEJGOEU3NDlFRjIwQkYxNzZECis6MTBFRDUwMDA5RjVBODU1NzJGNEZCOTdDREYwOTNENzgwQTczNkQ4MDI0Cis6MTBFRDYwMDAzRkEzNzJBM0JFN0NBOTdEQzY2NzkwRTc4QjQzQ0VBNTY3Cis6MTBFRDcwMDA0QkU1Nzk3NTY5QzhCOUY0QTk3MTUyMUVCQjk4OEJGNDNCCis6MTBFRDgwMDAyNEU5RTdBRjk2NzVGQUU4Qzg5NzExMkRFRDJFQjQzRjQ4Cis6MTBFRDkwMDA3OTRBRjdDMjE0NUM5Q0YwRDdFNDA3RjIxQzdFRTFEOUYzCis6MTBFREEwMDA5MEQzRUI0Q0ZEREVEN0VCODNERjAwRjcxMUNFRTIzRUQ0Cis6MTBFREIwMDA4MjEzRkJCRDk3RTJBRDdBMEZEODg0OUY1MkY5ODM2NDJBCis6MTBFREMwMDBGREIzREU4QjU0OEVGQUU4RUQ1QzZFQzc2OEU4MjE3REZBCis6MTBFREQwMDBGRUEzMTAzRjU0QUZERDEwMzUwRUZERUQzMzUzN0ZFQTM3Cis6MTBFREUwMDBCRTQ1Q0Q1RjdEQTMxRDQxRkU2NDRGQTc1MTc3QkZFNUIyCis6MTBFREYwMDA4QUY5QUY3RDhFRUU1RkRDMURFMzc5MDc3Q0ZDOENDOTYwCis6MTBFRTAwMDA2NTA1RkVFRUIxMUY4OTQ3OUNGQzJDNjlCNzA5OUQ2RjEzCis6MTBFRTEwMDA5RkRFNTlBNDA5M0ZBQzU3QzRDREY2Q0VENEU4MUUwMEZFCis6MTBFRTIwMDBFNzgzMENGQjQ2REQxQjk4Q0RGQzcxNDg5NTNGQzZCM0NDCis6MTBFRTMwMDA3MTNDQzE1OUY5NjMyQUZDRTM2OTlFRjM1QTk2OUFDMzVGCis6MTBFRTQwMDA3OTk1Q0U4N0Q3OTQ4NDNCMDM3RTlBQ0UxNDcxRUY2NzcxCis6MTBFRTUwMDAyMDdGQ0REQzRCQjlENERGNEQ5NzI2NTIzRjE3QzdBNTk1Cis6MTBFRTYwMDAwOUJENkJERDdEMkI0MDQ3NTdFRDY1NjZBQ0IzMzNFNEUwCis6MTBFRTcwMDBERUJCNEEyQjI1QkZGMThFNTc3QzVBREUyNzVBQUIxMUQ5Cis6MTBFRTgwMDA5REFGRDQ5OEJBNUY0NDdDNUFFNTJGQjZDQTdDODlDODM2Cis6MTBFRTkwMDBBRjVBMkZGMjlENjZGMUNFQ0MxRTY5NkZDMDNBOTE2MkQ3Cis6MTBFRUEwMDAzRDM4MTdFRjkzRjYwOEFDMDMyOUQ2ODFFRkUwNEJDODQ1Cis6MTBFRUIwMDA4MzJGMjEwRkJFODQzQ0Y4MTI1MkYwMjU3QzVGQzQ0QTk4Cis6MTBFRUMwMDA1MzczOERDMkFGNTQxQ0I0NkZFMDU3MkEwRUQyN0JFMDRGCis6MTBFRUQwMDA1NzBBQ0VDM0FGMTQ1QzFGN0VBNUUwNzJGODk1ODJDQkIzCis6MTBFRUUwMDBFMTU3MEFDRUMzQUYxNDVDMUY3RUE1RTAzQzFCNzc1REUzCis6MTBFRUYwMDAyMDBGM0VFNjlFQURDQkNGRTVGQTc3NzFEMEJFODU1RkExCis6MTBFRjAwMDAyOUI4N0ZGODk1NzRGRDc5NTZFOERBREZDQTlBNzRFRDZFCis6MTBFRjEwMDBFMTU3MEFBRTdGN0I5M0E2RjMzQkREMkVERjAzQThEQzJGCis6MTBFRjIwMDAzNjg4RThFM0E1RDFBNUFFRjE3Q0JGRkUzOUUyNkZERkZDCis6MTBFRjMwMDAzM0UzMUM2MDZDNUYwNkJBNUQ1OTFGRUUxMjc4NkU5RDVDCis6MTBFRjQwMDAyOUYwNkU2MDAyQ0YzRDBCMDhDRjZCMkMyMjVGMjJFRUMyCis6MTBFRjUwMDAxRkY3RTdCRjI5MzYwQkZGMEQ1MkY4NkY5MEMyN0Y4MzcyCis6MTBFRjYwMDAxNEZFOUJFMkUxQzI3RjgzMTRGRTFCN0M4N0ZGMDYyOTBGCis6MTBFRjcwMDBGQzM3NDhFMUJGNDEwQUZGMEQ1MkY4NkY5MEMyN0Y4MzEyCis6MTBFRjgwMDA3NkYwREYyMDg1RkYwNkRGRTFCRjQxMEFGRjBEQkU5RjVGCis6MTBFRjkwMDA4NDFGMjlFOEREMENFOEU5OTlCQTczMURBNzQzRERCOUEwCis6MTBFRkEwMDBDRUExQ0I0MzRGMEZBRTBGM0QzREI4MUM3QTdBNzAzOURFCis6MTBFRkIwMDBGNEY0RTAzQ0Y0RjRFMEZBRDBEMzgzRjNBQkM3Mzk4OTNFCis6MTBFRkMwMDA1RjQyNUYwRjZFMDc3RDNEMzgzRkFBRDU3QjBDQjZBMzJECis6MTBFRkQwMDAxQkI2OUY3RjE1Njk2N0E0RjY5OEM2NTlDMThBMTcwRTlDCis6MTBFRkUwMDA5NEMxQ0ZENjY5RDM1MjYzMzhBNzM0NkIyRjk2MTVGM0VCCis6MTBFRkYwMDBCQzQ3REVFMzFCQ0Q3QTBDQzAzN0Y5RDkzOURFM0M3RTQ1Cis6MTBGMDAwMDA0NkY3OEU0NzdEOTU0NEU1Q0FBRjRCN0YxQ0VGQjkwN0E1Cis6MTBGMDEwMDAxOEU5RkRDNzY0QkNBNzZBRUY2MjBFMjM1MjU1M0Y5MDAyCis6MTBGMDIwMDBFRkJGNUVFOEY4QUExRUYxQ0JBMDc5RjA4MzYxMkVFRTY3Cis6MTBGMDMwMDA5OUU0QUVCMUU3RTFCRUZDMUU4MzI2RUU5QkRFMjVFRTMxCis6MTBGMDQwMDBGQjg2RDJENTZFQzk5N0Y2MThGNjFGMDlDN0ZEQTEwQTJGCis6MTBGMDUwMDBDRDg1Mzg4NjJDMTMzQjYxQ0UwMzlDMUFGM0EwMUZEQ0IwCis6MTBGMDYwMDAzNzNFNDZBRUFCNzEwMkVFMUZBOTc5MkIzQjIwRTcxMzZBCis6MTBGMDcwMDAxNEJGNTZENEMzMkM1NTdDOUM0OTVGMzBDQjYyRjA3N0NCCis6MTBGMDgwMDA4QkQwMEJEMDBFRTdDNUFCQkQ5QTdCNjcxMDdEM0YzNEFDCis6MTBGMDkwMDA1RUM4Mzc4Rjc3QzU4NDJBRkVGREVBN0Q4RDEzMTAxNzcxCis6MTBGMEEwMDAzNzJCNUNCNEZCRjlFMzUxMDRDNzFCRDc2OTNCMTE3RkQ1Cis6MTBGMEIwMDA1OEI0OEZCOTExRUZFQTkzRjNCRTdBOUZDMzUyNDVFMzc4Cis6MTBGMEMwMDAzQTI4OUU0RUY1NUJCMTNEOTVFMkZGMkE1ODY3MzFFMjQyCis6MTBGMEQwMDAyQjU4ODFDNkUwMUY1NTcwRTNFQjdCMTVFQkNCRTI1QjUxCis6MTBGMEUwMDBDNTRDRkFBNzg4Q0IwOTk3NzEzOTJBMUUyNzJDQTZCNERDCis6MTBGMEYwMDAwQTcyNEJDNUU1NEMyQTg4MjlDMUJEMzhENkNFNUMwOEJBCis6MTBGMTAwMDAwM0JFQTFBMDYyRkQ2MERFQkZDN0U3NzZFMTVFRDFBNEM5Cis6MTBGMTEwMDAyRjFBOEY1MTdFNTcyOUU1ODkwQ0M2RDAzODI0RDc0NjNGCis6MTBGMTIwMDA3ODM1N0E1RkUzNDZFRjBFNDM5QzEzRjFCQTZCQ0RGMTZECis6MTBGMTMwMDBBOEJGOEZCOUEwRUU3MDUxNDM3MUE3NkE3RTM5QUNDM0U2Cis6MTBGMTQwMDA2MEQzODA3Nzc2NzQ1MDEwMUQ3MTBFNzAxM0YwOUVFQkIzCis6MTBGMTUwMDAzMkQzRkIxQkIzNEQwRTMzRjg0NkE4MUNCRkYyREU2MjYwCis6MTBGMTYwMDA4ODlFMTA3MkJGQTQ2NUNEN0JBOUM2NzREQzJGMzFCODEwCis6MTBGMTcwMDBGQ0UwNUJDRjQ1OTBCRUEwRjQ5RDBBNzlERkVDRTJCQURCCis6MTBGMTgwMDA2MzgzNkZFMUU1MTVGQjg1N0VFMEQ5QTYxMUZGNTNGNzk4Cis6MTBGMTkwMDA0REVBMzM3Q0E5MDZFODBCNDM3NjhDOEUzNTBBRjkwRkNECis6MTBGMUEwMDBCRTc4QzZGQkVDQ0REOEEyMTVFQjhGNTE1QzQ0QzVGQUY2Cis6MTBGMUIwMDBDMjY4MTExNzI1RkMxMDU1MTI0RTU1RjI1RTExQ0I3MTI1Cis6MTBGMUMwMDBDNDQzQ0ZGQzkwRjMxREY3MDhCQTk3MTg0RDcxODVBRDc1Cis6MTBGMUQwMDA0MjlGNTNGNjE2QTUwRkFBRjc2MzJBREVDODNGMEVCQzVFCis6MTBGMUUwMDA1NzNDMkFERjY1RDk1ODQxRjE1N0ExRjc3QzZBQTVCRTgzCis6MTBGMUYwMDBCNzZDOUQ5OUVFMEYyRDBCRDEwNzZCRTU3REExREExMDUxCis6MTBGMjAwMDA3REYwRENGODEwN0Q1MDlFNUZENDdEREU4QTM3OEVDRTk3Cis6MTBGMjEwMDAyMzdEQTVEMTRDN0VCOUIyQjU0MjdGNjFGQjk5MEZGMTM4Cis6MTBGMjIwMDAwQzY1NkJBNzFCRjA2RTQ4RDk3MzZFOTdENjBGOURCQzBCCis6MTBGMjMwMDAyNUY1OTg1OTlEMzY4MkVCOUM0QkM5OTRERTdDMjk4OTMzCis6MTBGMjQwMDBEMjVCMkU4OTdCOTQ4ODdEMDExRDc0QkVDMDQ4OEY3RTYxCis6MTBGMjUwMDA1QkVBMkRGMzcwQUYxMkYxODhERTMwNzk3RjkyOTFERTk4Cis6MTBGMjYwMDA5NENCMUMyNUUwMUY1N0I5QjVBMzUwRkI2Njk5M0RFQjI1Cis6MTBGMjcwMDA3MTZGNzNENjBFNDZGMTQ3Mzc0MEJGNDFGQzE3RjQxRDNFCis6MTBGMjgwMDBEOEREMEJEMjRBMjgwRTYzQTY0NkYxMkMzNzE0QUM5MDc5Cis6MTBGMjkwMDBGNENERTk5RDgxREVCRDkyN0U0QjI5REYyNzE3MjQ5REE5Cis6MTBGMkEwMDA3QkJDNUQyNkMwRkQwNkFGNjZDMTNCN0MxRTc5OEU1NURBCis6MTBGMkIwMDA3NDFDNEFFRkU1MTFEMkZFNjQxN0Y2QTUzRUZCMTMyNjM3Cis6MTBGMkMwMDA4QjQ3NkRCQ0QxQjdFMTdFNkIzOTZDNzY0Mzk4NDAzQzdGCis6MTBGMkQwMDA4Nzc5NjQ4RTI4MUZGMTYyRjQ2REVCNzBBOEY5QkZCNEQyCis6MTBGMkUwMDA0Qjk0MTkwQzIyREU4OUVCNUJFMEFCQjdBRENFQjUyQ0FECis6MTBGMkYwMDAwQUUyMkY1RjRDOUMzNjYzNjI2MTAwRUY4QjQyRTJGNEJFCis6MTBGMzAwMDA1NkRFMzMzQ0UxRUJFMjQ1MkIzOTlDQjE0RkNBQTMzQkJGCis6MTBGMzEwMDBCRkM3Mjk5NDVEM0I4MUI5OEJGOTk5NzUwMTYzRUFGMTA3Cis6MTBGMzIwMDAxRTNGRUUwNTJFOTRGOUQ1MkY4RUZCRDM0NjNCQzE4N0E5Cis6MTBGMzMwMDBGMkQzMjdBNERFRTYyNUJFMkFGOEQ2QURFMDVCNDZGMDgwCis6MTBGMzQwMDAyQkNGRDQwOUM0QUYzQTY3MDAxRjExMzkzREYyMUQwMjFCCis6MTBGMzUwMDAyOTk3NDJFQzEwQUIyNzM4QzU3QTQzRUMxMTk1Mzk4MkQ2Cis6MTBGMzYwMDA5RjMzOTMzM0Y1NTY4QTBCNzY5MjNENEZDREZGNDNCM0NGCis6MTBGMzcwMDAzRTRFQjNDRjJGMzI0MUNBOTNFNjdGNEQ3Q0MzRkZDQUM2Cis6MTBGMzgwMDBGMERDODZGNTZEMzU4OEI4RjkyMUM2NTYyNkVENDJCNDE1Cis6MTBGMzkwMDBGRjE1RkY2MEYyMUQ4OTAwRkVCOTlFNDY3RTc0Q0QxMUY3Cis6MTBGM0EwMDA4QzdGQ0Y0NjREQzRBOTBGNjBCRjYxRDkzRDBGRUY4NjVBCis6MTBGM0IwMDBGREFFRDlDMjEwRTdGQTc4OTZBMEEzQzc3RjYwMjEzREMxCis6MTBGM0MwMDBCQ0NDRDI3MTBDRUY2NDI5MzhCRURGRjRFRjY2QjJDQjRGCis6MTBGM0QwMDAzM0ZGNzBCQ0ZGQjVCMEQxRTYwMjdGRkU2MjYyRTkyQTVFCis6MTBGM0UwMDBDQzNCMjJDNzQ1Rjg5OEMxQjcxOUZBM0Y5OTUyRkE3RDJDCis6MTBGM0YwMDBDMkQ3QTY1NzFFNDNEQ0ZFRjJGNjM0OEEyM0FEMzg5NEZBCis6MTBGNDAwMDBCQjAxRUY4OTdDMzFEMUYzQzMwOUYwRTNEQTFEMTZDOEUzCis6MTBGNDEwMDBGMTg2NzUzMTI0RDdDQTEzNjQ1QzI3RUIyMTNGOTU4MkFFCis6MTBGNDIwMDBGRjAzMTM4NEZERUFCQTIyNDFDN0RERjIzQzAyODYzOUFDCis6MTBGNDMwMDA1QjU3NEZERUUzMEVEOTI3Q0EyRTE4NkE1RjA4N0RDN0Q3Cis6MTBGNDQwMDA2MUEwRkRBM0VDMDhCMDFCNTg4MkVDOEFDQTJFNjFDRUU1Cis6MTBGNDUwMDBGRTcwMDFFNDY4OTk0NTFGN0ZBOEQyNTc5NURENEQ5RTQ3Cis6MTBGNDYwMDAwNzE3RjdDOUIxOUMxOTA5RDA5QjM3NkIwRUM4QjEyQTkxCis6MTBGNDcwMDBCQkYzOTZGMTNDNUY3NUMyOEMxQjk4NkM1NkFDNTNCQ0M5Cis6MTBGNDgwMDBERjcxOEY3OEJGNjMxMURGQUZFMDM3NjVGMjNFNTZENThECis6MTBGNDkwMDBCNkYxQjRERkFBN0MzQ0NEMUY3ODVGREVCQUY5NjhDQTRBCis6MTBGNEEwMDAwQkEwMUZCRjlCRTJGMkFCMUM2RTRCNkNEMEJFQUY2Q0NGCis6MTBGNEIwMDBENTc0NzFGRDJBN0Y2MDgyQjBDMzk1NzEzNTFERjBCQjk0Cis6MTBGNEMwMDA2RDc1OUEwNTZGRTg5NDcxRjUwMkY3RkI1RTlERTBENEM3Cis6MTBGNEQwMDBDNTU1RjM3QTc0QUY2MTU2M0EzQjJFREU0RkUyRjM0RUQ4Cis6MTBGNEUwMDAxM0UzRTUwNUY1QkZBODU1RkYzRTAxQUY0RjdBRDFDQjM5Cis6MTBGNEYwMDAxMzIyMDk3RjE1MEVCRUVFMzRBNDBFOUEyNzg3MDNDMThFCis6MTBGNTAwMDBBOUU3M0VERTlGOTNDNjIxN0M1NEZBN0Q2NjlDQkJDQjY3Cis6MTBGNTEwMDA3MDlGODJFNzE3M0E3QzY2OENCMzY4OUQ3ODJGQzRCM0RFCis6MTBGNTIwMDA0OThDRTNEOTE4NjMxOTA1QkRDOUU0QjBBNDAwN0UzODNECis6MTBGNTMwMDAyQ0M3RDFGQzg4MEY1NjcxQjgyMERFNEFDNTVEODZDMjQzCis6MTBGNTQwMDBBNzQyQ0VCN0FBMzU0NkFGOEZCNTZFMzYwMzFGMEIwNjVFCis6MTBGNTUwMDA3OEFGQTA0N0QyRURBMjc1NTMyOURFQkNDQUU0QTY3OEU1Cis6MTBGNTYwMDAwNjhGODRFRjQ3MkI2Q0Y3QzIyRkIwNjBDQjQzRTYzNDk1Cis6MTBGNTcwMDA5Q0IzMjcwOEZCNzM4RkRDNzdCM0QyRkRDM0U5NURBMDkyCis6MTBGNTgwMDAxNTM2MTdFNkI5QzBEMTRBRUJFQjgzRUY4MzFDMUUxQTgwCis6MTBGNTkwMDBERTlGMjkyNUY4NzJCQUYwRTI3RTVFRDUxNjNEM0UwMzY1Cis6MTBGNUEwMDBGMzExRjBBRERBNTI0MUZCNkQ4OUM5NjM3MTA0Q0Y2Mzg5Cis6MTBGNUIwMDBEQjJCQzM3MTBGNjUwMURGREY3OEVGODgzOTNDMTRERjg3Cis6MTBGNUMwMDBGNEYxODNCN0E0RDIzQUY5M0NFOTFFOTRDQjM5MDNFRkE2Cis6MTBGNUQwMDBGQzcwM0EyMTNBNTZGNEEyRTJCMkQ1NzhENjg5MjIyRUFFCis6MTBGNUUwMDBEMzNBRjE5QkY2QTU5QkY0OUExNjhFNUZEOEJCMDdEQTQ3Cis6MTBGNUYwMDA5NzE2MDQ3NkYxNzEyRDU1RTJGREI1RDA3REFBRjZBN0Q4Cis6MTBGNjAwMDBEQTk3NkE5RkFBRkRGQjk4QjlENDlGQTgwNUY4MEM5N0QyCis6MTBGNjEwMDBCNzhEQkZFQzA3NEUzM0U0N0MxNzRBQkM3MkI4QkUxQUY0Cis6MTBGNjIwMDAxQ0M3NzVDRDQ0ODFEN0IyNzRGRDdFNDc3RkU4Mzc2NTJFCis6MTBGNjMwMDBBMkQ4RUY2NUQzRkNDMzExNzdBOUVBQUI3MUNCNjI0NUMxCis6MTBGNjQwMDAzQkQwM0RFODJENjVBMkExQUZGRTRBQUFBRjhGNDdBOUU2Cis6MTBGNjUwMDBFQ0UzMTdGQkQ2Qzc4MzVGRUNENzQ4RUY1RDc5REZEMUNBCis6MTBGNjYwMDA5NDdGODMzRUZCQjREMDY3Q0ZENEVENkU0ODgyREU2OEQyCis6MTBGNjcwMDBGMkE1MDZCRjhCNTVFNTE3RkM2MTMxRDc3RkMwMkY5NkU5Cis6MTBGNjgwMDA0ODM5REQ5RUU3Qzk5OTE4QjQ3RkFCMUU3ODNBQ0IyMzgxCis6MTBGNjkwMDBGODhCMUZGQ0U1ODNBNzVGRkFGRDA0Njc0MDdFQUFGOTlCCis6MTBGNkEwMDAyRkRBRjg1QjczODUzRDE4NUU2MjdERjc2NkY3NTI5QzMyCis6MTBGNkIwMDA1REE1RERFMkM0RkRFNUNBNzUxNUM0NkY1OTIyM0Y1NzRCCis6MTBGNkMwMDA2ODAxN0M4N0QyNDFDNTNBOERERTE3QUI2QzFBRTMzM0YzCis6MTBGNkQwMDBGRTM3RjJFNUNBNERCM0U5NEQyNDg1MjdGNURFODk5MjYwCis6MTBGNkUwMDBBNzZBRkVERjk1RjM1RjI4RTk3OENFNDRCMUZGMTY1NjhFCis6MTBGNkYwMDBBNzU5OTZEMEJFNEZCMzU0ODJGRTY1Rjk4MjJBRkRGNzEyCis6MTBGNzAwMDAzRTNDRjVGOTk3NzMzNjYwN0YyMDZFODhDRTI3OUJDQzAwCis6MTBGNzEwMDBDMkNFQjcyRjkyRjRENTMzMkI5RjdGRjM2NjVFRUZGMzAzCis6MTBGNzIwMDBBRDNCNTJBMTlGQTg3OTJDOTVGNkJDQzVEMjJFQjc0NDBCCis6MTBGNzMwMDBFQUFEMUM0RjE1QzE3ODVBRkFCOEMwNTNFNTMzNkZGQ0Q3Cis6MTBGNzQwMDAwOUVGNzI5NUE1NEI3RTc2OUY4OEU3NUZENEI2OUZGMDUwCis6MTBGNzUwMDBCNjYwRTM2NjczMUFBRkI3NjI2MjlBRUU5RTRDNjUyMzk5Cis6MTBGNzYwMDAzRkU4NzI3ODJFRENCOEMzMEMzRUIwNjJBMjgwNUIyODAyCis6MTBGNzcwMDBCRDk3QzlGQkJFMEFBRTkwM0I1QTkwREY0MkQ1MDdGRjRBCis6MTBGNzgwMDBEQkNGQzc1OUJEQzIxNjA1RkJCNDFBRTcxMTQ5RDc5NTlGCis6MTBGNzkwMDA4RDMxQjExOEFGQjJCMUUyMjczODc3Mjg3RTFGQkFFRkFBCis6MTBGN0EwMDA0RUQ5QzQ3RTU4QzRGQkMzQkUzQzM1RDU0NTcxQ0RGMDlGCis6MTBGN0IwMDA2QkY1Mjc1NzM3NEJCQ0ZERDQyQ0RFNkY0QzhFNjg3QjI2Cis6MTBGN0MwMDAwMjcwNDg1RTFFRUUwMjdGQzhDQ0VDMjRCRjMxRTgxOUZGCis6MTBGN0QwMDBGM0I2MThDNDdCOEY5OTc1OUQxNzMwMEZBRTUyRDNGREM5Cis6MTBGN0UwMDAxNEE0Nzg2NzBBMkE3NjNDQ0ZFRjM0ODhGOEFCNzRBMzY4Cis6MTBGN0YwMDA0ODlGOTdGMEUxRTU3RTk0QjNCODRFN0E3N0FFRUZERDlGCis6MTBGODAwMDBBNDEwN0FCNUIwNUQxQkYxREU4RDI1OEVCOTVBOUMwMTJFCis6MTBGODEwMDBGQTU0RkQyOEZBNTRGNDNCRDBGQTdFMjFGOUM4MzdBREVBCis6MTBGODIwMDBFRjU0OUFCNDQ3NjRCQjUyMTFBNzUyN0VGRjA4MTdFQ0ZECis6MTBGODMwMDAzM0RGQjQ0RThCN0M3RkIwNkZCRDlDNThDN0M1RjZCMzI5Cis6MTBGODQwMDBERTRDNzE2RTE5NzhCRDVCNEFFMkZCNTk2RkU4M0FENTIwCis6MTBGODUwMDAzRTUxNzdEQUZCRkMwQkFEQzJCRjcwNEFFM0YyOEJCN0M3Cis6MTBGODYwMDAzQkI1QzI0NkY3QkZENEJBOTRGREZCREJDNjIxQkMzRDE1Cis6MTBGODcwMDAzMTU2REExMzNBMjNBMTQ3OTY4NUNCRkRFRjE3Nzk3Q0YxCis6MTBGODgwMDA5RjFERjQ1REM5N0RGNTVFOUJFMkNGQTcxQkE1NUM2NDVGCis6MTBGODkwMDA5REY3NjEzRkIzQTYwQzdBOUZFNDY0RUJBOTQ4QkM5NzNGCis6MTBGOEEwMDA3MjZBQUE5ODlGNkFCN0RBMkNFMjhDNTlBNEM1ODlGN0M0Cis6MTBGOEIwMDAwRkY5RjlFQTY0MTNGQzNFRUIxMkU4MUM3OTVCNTMwNjdFCis6MTBGOEMwMDBGMTg1REJCQzMxQzJGRTIwRjVGQjI1OTIwRjQ2QUNBRUM0Cis6MTBGOEQwMDBEODgwNzdCRTE3NkY0QjczNjg3QzlDQzU3NkQ3QzdEQjIzCis6MTBGOEUwMDBBOEZERDUyRUU4ODMxMTVCNjY1QkQyNDlFRjE1RTcwMEQyCis6MTBGOEYwMDBFNTI3NUFBREIxNTI4QTFCMDM5RkM0RkUzMkJDOTIwOTYwCis6MTBGOTAwMDBCOUIzNzQ5QjM4MDdDQzMyQjA4REYwMTMwRTZCMjk5REMwCis6MTBGOTEwMDA5MTA0M0VGMUIwNDY3MUU2NkNCQkZFMURBQkIxRjlBNTlBCis6MTBGOTIwMDBFN0U5RkMxN0YyMEVEQzZBNzM5QjNCMDE3QzlDRUIxQjQ2Cis6MTBGOTMwMDBCMDM3MkRCNjk3OTJERTVFMkZGOUU0QzkyRDVERjQxRTI3Cis6MTBGOTQwMDBCRDgyRUIxNUYxM0YxNjExMDdEQzEzNjkyMDNCRENCN0Q0Cis6MTBGOTUwMDA4RDAzQUE5MjdFMjU0NTM3Q0EyRkY1MDhGRTMzMUU3MDA3Cis6MTBGOTYwMDAzMjkyNUMyQjMxOTZEMTdCNEExQkI2NENBN0I0NkE3MzlBCis6MTBGOTcwMDBDOTU2RUYyOEM0MUY5N0M2NEZBMDc5OUJDOTRFNTY1NTRDCis6MTBGOTgwMDAzRjVEQzRFQkVFMEM4QkMxRjkyNkQ1RUM0RDBERDY0QjhCCis6MTBGOTkwMDBBQjc2REM0REYxM0Y5RkVFQjA1MUZDNEZCMTYzNzY3MTE5Cis6MTBGOUEwMDA0QzFDQkQ3NzRDRjE3NUFBNUU2QTkxRTAzQjM1RjVEM0VFCis6MTBGOUIwMDA3NUYxM0I4Qjc5OUY3ODY3RjNDQkI2MDhCQTFGQTZFMjQ3Cis6MTBGOUMwMDA3MkVBMTIzQzQ5NDU4MzQ1N0NDRTc4QTc4OENCNDlBMjkwCis6MTBGOUQwMDBGQUNFN0VFREUyMkFGREI4NTlDNDc5MDRDNTFCRERCODI0Cis6MTBGOUUwMDA4MEI3QUZBQjdGMzYwQUZERDQzRUY4RjYxODg3ODFFQ0JFCis6MTBGOUYwMDA1MEMzRDE3RjVGQkNEMTM2MTE2Rjk0MjVDRjRCQjM2MjFBCis6MTBGQTAwMDA0QjZGNUUwMEY4RkZEQTQ4RjAxRjY4QkNFQTQzOUFDRUZECis6MTBGQTEwMDA4Rjc3OUIyRjlBRjQ1NjhGOUY1OUUwNDdGNjM4MThFOTU1Cis6MTBGQTIwMDBDNTlGMUE1OTEzRjQwMEE1QkZBOEVGRTMyNTVDM0U4RENFCis6MTBGQTMwMDA2RTREMDU3RDJDREJGMzUwMkFFNENCNjc5MTIyNUZCNjM3Cis6MTBGQTQwMDBFNzk2REY4MDVGNzk3Njg1MDlGRERDQzQ0ODFGQUVGNDU4Cis6MTBGQTUwMDAwQUZEOUE1NUM3QUFGNzQ4NkRFNTlDOEVBNjE3NDU4OEZBCis6MTBGQTYwMDA3NzhGQjZFOUUzQ0RENTNCQjc5Rjk5QzRGQjNDODgzNzg4Cis6MTBGQTcwMDAwMkJEQkY2RkYyMkYwNjdFREZFN0ZBMkJDRUIxQTk0NTlDCis6MTBGQTgwMDA4MjNFREY2RjM1Q0VBMDdCNDM3Q0EzNDAwRjc5QkZGNTZDCis6MTBGQTkwMDBEOTQ4QzQ0MzJCN0RBREM0Rjg4MTFCRUZGRkFDN0M0RTJECis6MTBGQUEwMDBDNDA1RTM3RDdBN0EyQjU0REE0MTFBQTQxRDY0RTUwQjcwCis6MTBGQUIwMDBFNjE5Qzk3MUE0N0ZEMTk3M0E5M0RGRDIxRkZFNkFBNEQ5Cis6MTBGQUMwMDA3RUQ1OTczRkIwOUZDRTZENzVGQjg0RkU1MEQ3RDY0NTRGCis6MTBGQUQwMDBGQTgzRDI0NzU0REM2MUVEQkUyRUQyMjc1NEJCODYwMzk1Cis6MTBGQUUwMDAwMjJFRjUwN0M0Rjc4QTZDODNCMkEzQjhCNTRDOUNBNzY1Cis6MTBGQUYwMDAzNUNBN0I1RkNDMkY1RjZCMEFDRUU3OTVBRjA1QjM5RjBFCis6MTBGQjAwMDBBMEVDMjMzREE0MEZERTlCRkQzQjNBODdEN0FGOTNGRENFCis6MTBGQjEwMDBGMkJDMzk2OEJDNkExMDUxQTFGODlFNjE0NzdCQTdFRTIwCis6MTBGQjIwMDA3QzU3N0YyMDg2REFGQkVCQzMzNzQyQ0VCQjFCRUMyNjJCCis6MTBGQjMwMDBBNDJERjU3NjkyRkJEQjFCMEREOUI4QTdFRUQ2QzI1RERFCis6MTBGQjQwMDBEMEUzREFFNUZEQURDMUI1RUZEQTYwM0Y0ODYyM0Q0NzhECis6MTBGQjUwMDBGMURFQUUzRkM1RjNDMzIyREU2RjAyNUU3NzMxMDZFMjBGCis6MTBGQjYwMDA4OUJBMEY3RjkyOEZGRTI3MEZFQkJDODgzNzM1Q0NEQTJFCis6MTBGQjcwMDA5NDcyRjgyOTVBOEFFNDNBNzIzQUYzNDFENzgzOEYwODhCCis6MTBGQjgwMDBGRUZDQTg5OTZEQTQ3NzlCNERBNTBDRjY3QkJGRjQyRkM2Cis6MTBGQjkwMDA3QUJGMzJEMEZCQjNFRDlBRkY2N0MxRkFENTIxNDk5RkY2Cis6MTBGQkEwMDBBNTYxQzJDRkI4NzNCNDY3MTNFNkYxNURDRDNDMkE5NzY3Cis6MTBGQkIwMDBFRTFEMUE4N0EzRkY2RUU5ODc1NDdBRUEzNEM5OUY1MzcyCis6MTBGQkMwMDBFNEY5Q0EzMjI0RDEwRTNBNTZGN0VEMzRCNzlCRTIzRDQwCis6MTBGQkQwMDBFRkNBMzk1MjA5RjlGQ0UzMUUyQkM1MEI0Q0VCMDkyNzgwCis6MTBGQkUwMDBCRDM1NjVDODRDOTI2N0VBREQ3NjE1Rjc3MzI0QzdFMDJBCis6MTBGQkYwMDBDNTdCRjQzRjY2NTY3MTJGQzAxQUEyREYxQTZDNzQzRkEyCis6MTBGQzAwMDA1OTZCRkZENTU3RTBFQkM5QzYwQjQ3QTM3MTVGRjZERjExCis6MTBGQzEwMDAzNDdBN0ZCNEJDRjdFMzQ3REY2MjM4MEZGQjcyMjkxRUVBCis6MTBGQzIwMDAzQUM1QjMwN0VCMzlEOTNCQjNDQkMzNTFGNzYzNDc5QjE1Cis6MTBGQzMwMDBENTI1RTQwNTBCNUU0N0ZCMUQ1RjQ1QzUxQTAyRjNFQkI2Cis6MTBGQzQwMDBFRUY5OThERTc1RUNFRUIxOTJERDc2NUFCQjdDRTczMENBCis6MTBGQzUwMDA2NDNFREQ4OTRFQkEyN0NERUJEMUZCQ0ZERDc2MDNCRDA3Cis6MTBGQzYwMDBFRjM2QURGRDI4QkQ1NzM4NERCRDY3NjhENUJGNjdDOEI1Cis6MTBGQzcwMDAzQTUyNjI2MDU3MjY1QjJBNTcwRUUyNUIwNEZFMjY0NzIzCis6MTBGQzgwMDBFQkNGOEJBRjE1MDk3REYxQjUyMkFEREZGN0VFNTVEQzdCCis6MTBGQzkwMDA4QTkyMkIyRkRCRjdEQzI2RUM1MjYyOUYyRTU3N0VGRURBCis6MTBGQ0EwMDA0QkU5QTQ0RkY0QjY2NzdDRUQzQjE2NkY0M0FGRTBGQTI3Cis6MTBGQ0IwMDBDMjg1NkJEQzZGMTcxNTA2RTRFQTNDMDkyNzI1OUY1NUMyCis6MTBGQ0MwMDBEQ0MyM0MwOUFGNzk3NjgzODA0RkM4RUZBRTI4QkEwOTExCis6MTBGQ0QwMDBBNThCNTBCQzJCN0NCMjFGNzQxQzQzM0MxNkM3RTNBOEY5Cis6MTBGQ0UwMDBGQjE5RTFFRjI0RTFFRkFCRDdEN0UzRDk4NTIxNDY3N0M0Cis6MTBGQ0YwMDA5NzI3RURGRjQ1RkNGOTZEMjNBMDQ3M0M2ODIwM0Q0MjY2Cis6MTBGRDAwMDBERDc3RjRDOEY3REFENUJENDc5NkNEODgxRjk0MUJDM0JECis6MTBGRDEwMDBDOTVFRTg5MUVGQjQ3MzNFNzAwQzdDNDBFREZGNjEzMzM3Cis6MTBGRDIwMDAzQjQ3NDE4RTlFRTQ0Nzc0Q0NBRkQzRDA0NkRGNTMyNzg4Cis6MTBGRDMwMDBBNUQzN0UxRENBM0E5MkU0RkQ5QzQyRTg2RkM2QzBGQjgzCis6MTBGRDQwMDBENDQ0RjcyRDlBRUZFMTI1Qjg3RjM5Q0Y0RUY3RENCQkNECis6MTBGRDUwMDA3RDIxRUY1M0NCNzdDQ0JCOTlFNDBGRjNENTNCRTY3QzA5Cis6MTBGRDYwMDAzRkYzNzY1QjE2ODhGMkJFNzdDQzg3MzMzQTQ3NkRDOThFCis6MTBGRDcwMDA2NTU5RDBCRkQ0RUZGRTBDRjg4RUY5QjI1OEIyOUIzRTU1Cis6MTBGRDgwMDBGMjg4NkYyNEU0ODE3QUJGN0E0QThBMjc3MUQyRTAyQjA1Cis6MTBGRDkwMDBERkFGREVBQTk1MkVDMEVGQzA3ODQ3ODlGOTc2MkUwODJFCis6MTBGREEwMDA3RjY2OEYwMEI3MUZGNjlFOTM0RDkxRjQ2RUI3QTI1M0Y2Cis6MTBGREIwMDA2NUU3MUVFNkVEN0ExODcwNTI3MUI1N0Y5NkY0QTZFMEZECis6MTBGREMwMDBBRkUyMEFFMzQyRjBBMEU4Q0U2QjY2MTQ4NzBCN0MyMDFBCis6MTBGREQwMDBDRUE4RUZGNzYzRDY0OEZFQTJFMjNBNUY3NjM5OTFGRUVECis6MTBGREUwMDAzOEQ1OTMzQjA5RkI3MDA1ODczM0Q5RDEzQkJGODdGNUU1Cis6MTBGREYwMDAzRTdBNDdBNDFCRjMzQjI5N0ZENzIyNzQ1RjE1NEQzMjBGCis6MTBGRTAwMDAyODdGMzFDNTBEOTQ0QkY5NTZBRUUyMDQ5QUY0NzEwMjg1Cis6MTBGRTEwMDBBMUVGOUM4NjBGMkQ5RDBDQjg5REQzREUxRTgzOEZBRjY2Cis6MTBGRTIwMDBGRjZGNjNCRkY3NEZBRTlEMjRGODQ0NjZBMjY3QzYyNEY4Cis6MTBGRTMwMDA5MjczRDM3NEZBRTRFQkI5OUZBNEQwRUZDQzVDM0UzQTUyCis6MTBGRTQwMDAxNEYyRUY5Njk0RDJFQkQwQUYyRDUzRjgwRkZFOUNENDYyCis6MTBGRTUwMDA0OTcxMUU3RjVFRjBENzE0QjIzRkFGMTFFRkIzN0VEQjY2Cis6MTBGRTYwMDA3OTVFMTlENzJDRTg2MUQ1NjI3MTJGMzE5OTM1MTIxRDUxCis6MTBGRTcwMDAyNzA2RTI2NTZEOThDN0ZGQjRCOEU2NDBEQ0YxNUVGQThDCis6MTBGRTgwMDA3RDkxOTc5QkRCMzI0RTBGRUYwN0VGNjE0NzlFNzVGMjM2Cis6MTBGRTkwMDA5MzhERjdGMENCRTUxNEY3MUI3RDY0NTUxQUNGNkYzQ0JCCis6MTBGRUEwMDA3Q0I0OUNFMjdDOTM4RjVDNENFM0I4QjlGN0YwQUIyMjU2Cis6MTBGRUIwMDA3RkY1OTE4Qjg4MEJERTc0Rjg5OEE4MEZGRkMxMTBDNkYwCis6MTBGRUMwMDA3RTcyRjg3OEI5OTdFM0UzOEVEMTlFRkI4MUFGOUIyRkNBCis6MTBGRUQwMDAzNTFFODMzOEZFRkREQTM5OEJEMzI4QUU3NTc2NEFCNkU3Cis6MTBGRUUwMDA4ODZCNUQwN0JDQ0Y4QjVGQjQzRTVBMEJDNEI1RUU5QkVECis6MTBGRUYwMDAyNERBNzU1RjEwRkJBMEZCODJBMEYzMzBGMDgzQzFGRjEyCis6MTBGRjAwMDA3Q0FBRTI3QjE1MUYxRTg4NUZBQTdERjhBRjhBNEY1NjM4Cis6MTBGRjEwMDBGQjk5RUQ3MTZEMzQ4MzE4QkRGRjc0RENGMDkzOTM2ODI5Cis6MTBGRjIwMDA1REZBQjhFMTZFNzNDRjYzRTQ1N0JBQzA5Q0UwMTNBRkRCCis6MTBGRjMwMDA0NEJFRUI4NEJDNjgyOTE0NzE4RDVBNEY4NzEzRjczMTg2Cis6MTBGRjQwMDA4QTBBNDRCRUU1NDI4NzEzN0MxRTc5RDhCN0JBNjM0NDU3Cis6MTBGRjUwMDBCQ0EzOEE4QjZEQjlFMDRGQzIzRTI5NDJGQzIyQUY1RjQxCis6MTBGRjYwMDBEQ0QzNTMwRTNFNUE4NEZCQkM2OUU4RkZGODUxMzkxRUJFCis6MTBGRjcwMDA0MzdGQkIyRTg4QjhDMzZFNUI4N0QzMjFDNzQxM0Y3Q0NDCis6MTBGRjgwMDBEQzM0RjBDN0EyRDU1NkJBNzdENDcyQTE3MTA1RjU1MzA3Cis6MTBGRjkwMDA2NkVGMUI1NzBCMTlEN0ZBRjVFMzRFRDc4MkM2Q0RFQ0E3Cis6MTBGRkEwMDAxNUYxOUQxOEQ3QTkxQkQ3NEY3MUMxQkMzRjhBM0ZFREYyCis6MTBGRkIwMDA4RTcxMjVFMkRDQUZGMkM1MjhFN0Y5ODdFNEVGNTQxNDJGCis6MTBGRkMwMDAzOUZENDZDODAxMTUyNzk1NjA5MUVGNzFDQjczMEJBRkQyCis6MTBGRkQwMDA0NzcxOTlCQjdBQzUzQUNGMzdGQjZCQjA5RjhBMjVERjUzCis6MTBGRkUwMDAyRUI2MDhCOUM5MENFMTJFRENDNzJFMzE1RTNFOUU4Q0MwCis6MTBGRkYwMDBGM0M5MEJFMjdDNTIxQzU2QkExREZCQjFDMTI0RjgwREFCCis6MDIwMDAwMDIzMDAwQ0MKKzoxMDAwMDAwMDhCNTNCRjk3RDZCMUVDRTdCQ0RFRUZFMjkzRTlGN0M1QkYKKzoxMDAwMTAwMDg2MjYxRTY0OTkzODFGMkY5Rjk5MDNCOUMxRjVFRTMzQzgKKzoxMDAwMjAwMEMwRjdFRjU4QUIyNjdFODc0QkI0OUYzQjMzODJFRUExREYKKzoxMDAwMzAwMDc0MUYxRTUxODhGRDMzMjdDQ0Y5MUNFM0ZCQjY3N0QyMjEKKzoxMDAwNDAwMDU3QjQ0RkU3NDQzQjBCNzFFMkU5M0RGQzVGMjI5RkUwNzAKKzoxMDAwNTAwMDdDMEVGRTVEMkJGQjhBRjQ3M0U1QUZCRDI1RTBBRkZEQTIKKzoxMDAwNjAwMDVGMThBNzdFRTYzOThCRDBDRjdBRTg5REU2RkY5QTI0MDkKKzoxMDAwNzAwMERFQTdFM0ZBM0JFOTFGM0REN0M5NzczNzczOUM4NTI4OTQKKzoxMDAwODAwMDRGMzVGNzQ0MDE2RUREOTc0REUyREQ1QUQ2MTM3NTUzQjcKKzoxMDAwOTAwMDkwN0ZGNkIxNzZGMTlFNkQyODVEMUY5RTJDRTRDMEYyMzQKKzoxMDAwQTAwMDRDM0JCRDc3RDY5MDY4QjU1MkRBN0U2MTA2RkQxRThDNUEKKzoxMDAwQjAwMEE5MzQxM0U3MDNCN0E1N0ZCQkUzMkYyNjBCNzk5NUI2QzkKKzoxMDAwQzAwMEMxMTJGMEJGNzNGOUUxMEU2NzJBRUY2NUUzMThEQkYxQTcKKzoxMDAwRDAwMEZERjBCRUYzMTc0NDhDNjVCODNDOEY3OTEzMUYyRjM2QTMKKzoxMDAwRTAwMEU5RUFCQjUxQkZBRjlDODk2N0RBNTRGQjlDOTdFRDhGNUYKKzoxMDAwRjAwMEFGMzNDOUYxODBFNzI1RTJGRTQ0QThCQzY4OTgxMkRCNjMKKzoxMDAxMDAwMEY3NUUyMUM5REQzODFCRERCQkNBMzQ0QTdCMUVBRkVCNkQKKzoxMDAxMTAwMDIwQkJBMEYwREYyNkZGODc4REUyRTg3NkQ5MDQxRDY2QkMKKzoxMDAxMjAwMDFBNDRCQUNCMjBFMzdEQTVCRDRGOUQ2MzdFM0NDNTMzMDkKKzoxMDAxMzAwMDY5Q0E2MEVBQzc0RkZEMThGN0U3NDJBRjQ4NjI2RDM0RkQKKzoxMDAxNDAwMEJFRDJDRjU0M0RBRTg3RDk4OEM5QzhERjdCMkIzMjFBQzcKKzoxMDAxNTAwMEZBODVFNzNCOTNBNzk2NEUyRTA0NUQ3QkQ5NDc0MTcyMDMKKzoxMDAxNjAwMEUyN0M0NDU0NTMzMEZFMUE4QzdBQkJFNzNCOTNBNzUxOTAKKzoxMDAxNzAwMDNCRDVCRUJFNjkzQUZCODhFMjExRkQ0NDNGRjU5OTA2QzYKKzoxMDAxODAwMDNBQjczNjE4RDlBQkY0QkIwM0FDODNGQzk5QUFEREJCRjQKKzoxMDAxOTAwMDlDNEY3RTQ0RUYzNkI4Mjk3RDhGRjNDQjhGRThCRURGQ0UKKzoxMDAxQTAwMDdDNEEzRjY4RjZEMEY3OTNDREQ1OTQ3NjM2MzdEMkY3QjAKKzoxMDAxQjAwMDBGOUI5QjI4QkRGOUQ2QzgwMkQwRkZGMjQzNkJEOTQ3RUQKKzoxMDAxQzAwMDQxRjJCMUJFQ0RFQzA5QkU1RkYzRUVENEZFRTlFOEZCMkYKKzoxMDAxRDAwMDkzODVERkU2RERCNEZFQ0JFRjU3RTU5MzA1M0VCQjE3MTUKKzoxMDAxRTAwMDBCM0Q5M0QzRTUzQTQ3RUNDMEZBNDI3N0E0Qjg5N0YwQjkKKzoxMDAxRjAwMEQyMzQ3MTdFRUQ0RTEyRjlDNkM5RTJCRDUwQjc4MTZEQTEKKzoxMDAyMDAwMDQzRkI5N0E2NTkyOEZGNkVCQTgxREU3NTcwQzc4QTdFQjgKKzoxMDAyMTAwMERGQ0QzMjkwOUU3NkZEOENBOTBEODA5MzNCOUU3RkNGRTMKKzoxMDAyMjAwMDBCRTRERkJENEE5NEJCODc4OEVGNkFCRUFBN0NEMjk0RjgKKzoxMDAyMzAwMDNFM0I0Mjk2MzgxRjBCRkYzQkE3NzdFQUJGMEZCRkM1NzcKKzoxMDAyNDAwMDYyN0VBMUY1RDU3REZBNTA3OEZDNTZFRTVCREExN0QwQzgKKzoxMDAyNTAwMERGQjEwRkQyODJGNjQ1ODM5M0Y2ODVBMjQzNDU3RjBEMjkKKzoxMDAyNjAwMDUzQzQ3RUNEMEM5Mzc0Q0U2NTE3QzEwRjMyMENFN0UzRjcKKzoxMDAyNzAwMDA0MUJGOTA3RERGMDVGRjBGNUVDOTJGMUVFNTdFQzA3QTcKKzoxMDAyODAwMEU5MEY1MEZCNDFFRDAzNDVFRkM5N0M5RjA5N0Y4NzU4N0IKKzoxMDAyOTAwMEM3MjQ2M0ZGNzZGQTg3MjY4Qjc1NzdDNDQ3OTI3RURDODYKKzoxMDAyQTAwMERENkU3NjQwREU0QzMyMEFCRjQzNzdGQkJDMDJEQzBCQ0UKKzoxMDAyQjAwMDJGQjlEQkRFRDgxRkZGN0E1M0I2RkZBN0UxQTBGOEMxNDQKKzoxMDAyQzAwMDAwNzBCODYyRkQxNjY5QjdGRjA3RDc0RkZDMEQ3QzdCNDUKKzoxMDAyRDAwMEIxQjg5NzE5NEFBRkVEOTM5NURENUREMEVEM0I5M0RENTUKKzoxMDAyRTAwMDA3NDEzRkREOUFDRDg0NzM0QUI3QURGRjdCRTQyRjREQzQKKzoxMDAyRjAwMDEzRkI0MkQxNEZDMzE0MjZERkExRTFFQkNDQjg5MkRGNTAKKzoxMDAzMDAwMEE5RjVGNEFENzMyOTIzQkU5NzI5RTM4RDQzRjFBQkQ2NEMKKzoxMDAzMTAwMDE1QzRGNzVFOUYzQzM4MDA0RkM2QjhCRUMyRkIxOTVBRTEKKzoxMDAzMjAwMDY3QTc3M0FBQTJERkYzODNCRjVBMDJGOTM1N0ZCMjUzREUKKzoxMDAzMzAwMEY4OTkwQzQ2RjkxRUFDOTAyNzdEREYzNTIzQzU1RDA1ODUKKzoxMDAzNDAwMEM5MTkwNkJEQTVFN0IwRjBDN0Y5RjkzOTA5RkUyQ0Q4REYKKzoxMDAzNTAwMEEwODNFM0FFMkQ1M0M0QkE3QkU3MTcxQTYwMjczOEZGOUEKKzoxMDAzNjAwMDE3QkIxNzcyRUJGQzkwOUU5M0QwNEJDRTZGMTNFRjlEOTMKKzoxMDAzNzAwMEYzMUU2NzY5QjgzNzgyRjgxRjI3N0VCNzQ1Rjg0MThDQUUKKzoxMDAzODAwMDBGN0Y3OTEyRkFEMDkyODc4REE0QkY5Q0M3QjE5OUI3MUQKKzoxMDAzOTAwMDVCRkVBMEY4OUQzQjc1N0ZCMDRFQjY2QkQ5NzZGMTY2REIKKzoxMDAzQTAwMEZBN0QzMzRFOUZEMDdGM0VCMjM1QTQ0MzJGOUVGRUYwQTAKKzoxMDAzQjAwMDgzMjdGMEZFRkE5MkU3MzQ5ODlCRDk1MUQ4REQ3OUZFNzUKKzoxMDAzQzAwMEUzQkQ0NkYxM0JBQjMyRUU2NDg2QkNERjVGQjM1QkRDODIKKzoxMDAzRDAwMEVGQUY0M0JDMDlGNDk3MDMzQkI2RTJGNzI3RUJGNzlBN0MKKzoxMDAzRTAwMDk5OEQ3RjlGODE3N0QyRjgzODRCREIyMkY5NDE5MkY3QzQKKzoxMDAzRjAwMEJCNDUxRjM3N0EyREYzNkU4MDNEQjk3QUJCRkU3QkNEQUUKKzoxMDA0MDAwMDJFN0RCRTJFRTRERUEyMzY0NUZFOUVDMTQ4OTY0QkY3RjkKKzoxMDA0MTAwMDEzQjcwODdCQjFFMkRCNTdFQUJCNUU4MkFGN0JBNUJBQkMKKzoxMDA0MjAwMEFGRkIwNUJERUY2RDNDRkM2NUVBODc3NjkxOUYyREYzMzAKKzoxMDA0MzAwMDVEM0M3RkVFNEIwMTdGMDVCNzA2QzlGM0NGMjVCMTgyNDYKKzoxMDA0NDAwMDM2QkVCRTg2QzMzNjA3RUMwMDBEMkYwODNCQzFGOUI2OTkKKzoxMDA0NTAwMDY4ODJGM0YyRjA0RUYyMkJCMDE3OEQwRUU4NjFGNzFDQjQKKzoxMDA0NjAwMDMyOTI1REExQkVEREY2MzNGQzJFNkRDMzczMUFCRDU3MEIKKzoxMDA0NzAwMDVCN0YyOENDMjdFMDczNjEwOUNBOTcxRUIyMzk5QzI4OUMKKzoxMDA0ODAwMDdGMzE4Q0MxRkU3QzlFRTMwREY3NjJDRkE3NzQxMkZFMTQKKzoxMDA0OTAwMDgxNTdEODI1RjhERjJDRkM3RTg1QzJCRkYxNjFFMTRGODIKKzoxMDA0QTAwMDVFRjI4NEM0Q0ZCNjU1MjZDMkFCNEY2MzA5Njk1N0UyRUEKKzoxMDA0QjAwMDQ5RTFGOTU3ODZBN0ZBRjA4NDc2RDMxRkZFRkQ3MTg5Q0EKKzoxMDA0QzAwMDc3ODY3ODlCQTNEQjJBRTk3NzMxMTRCRTJEODczRjRBRDQKKzoxMDA0RDAwMDg1REVBQkYwNkNFNDc4RkVBMTZBRUY5NEVGRTE3RDBENzAKKzoxMDA0RTAwMDlFQUI4MTY3RkIzRjhFRTczRjQyM0UxNjkyREVGQkYxRkIKKzoxMDA0RjAwMDRGQTFGNzQ2NUFDODhGQUVFQzFBQ0E2RTMxQjhGNkRENzYKKzoxMDA1MDAwMDYzNzE3Q0UwRTE4OUNGOTI5RTVCMUU3QkE2N0UwNTIzMTIKKzoxMDA1MTAwMDNCREFCNTUzNjA0N0JCRUUwREZDQUMyRkZCRERGNTRGNkUKKzoxMDA1MjAwMEU1ODIzRTVBQ0M5REY0QkIzMURFMThGMUFFN0M3N0RBMjEKKzoxMDA1MzAwMEVDRURDRkYzRjE4QTYzQkY0QUREOEY3REYzNzIxOEI5MUEKKzoxMDA1NDAwMDRGRTZDQTdEODkzRjZCRjBCQjgwRUQzNkIyQjdENUI3QjkKKzoxMDA1NTAwMDg3MDlGQkRBMDFCREZGQUMzQjQ5RkM0RTVGODlBNUE3Q0IKKzoxMDA1NjAwMDdDMDVGNDcyREUxRkM2NTFFN0MxREE3NkY5RkIyRkYyODMKKzoxMDA1NzAwMEZDNTZBQkVDMENGQjQyREU4NzcyQkM0MUY1RUFBNjg4NjgKKzoxMDA1ODAwMDc4REI4Qzg0NDk0RUYwQTE5NjA1Q0MxMzlFRjE3NUZDNjYKKzoxMDA1OTAwMDlFMTFCRjU3QkY5NzM3QTAxRTM4MDBERjU3RkExRkYzRDEKKzoxMDA1QTAwMEVBRUQxQzhBRkYyQzk1QkYyRkQ5QjczRjY0QkU3QUFEMDgKKzoxMDA1QjAwMDM3Q0E2QTI0QkFBMzc3MUJFQTFFMTVCRkFGRjgwOUU4NDkKKzoxMDA1QzAwMDJFMkE0MDRGMEQzMjNFRUREOEY3N0Y2M0MyRUYzNDc1Q0YKKzoxMDA1RDAwMEVGMTJGNzIzMzg4N0RDOEE3QkZBNjdEQjQ0M0M1QzRERkIKKzoxMDA1RTAwMDQxRDcxOEJGMTNCRkQzMjFGOEQwQjI3RDlBQ0Y5OUQ2ODcKKzoxMDA1RjAwMDBGMUQzMURGMDZGMUFFN0QwODNERURGQkZBNzcwRkVGMDEKKzoxMDA2MDAwMDBERjA5MTUxN0ZFN0YwREM1MUMyQTREQ0YyRjYxQjNGMDQKKzoxMDA2MTAwMEQ5MjdCRjQyN0VDN0UzN0Y1QTNDNzc2RjBFNUZDRkQ3QTMKKzoxMDA2MjAwMEY4MUJBRjRERDRCRkUzNzI5RDUzRkYzQjREREZDOUQ2REUKKzoxMDA2MzAwMEZGNEU1M0FGNURDMjQ3RUE4MzRBNEYzRDM0NDVDOEYxOTAKKzoxMDA2NDAwMEQwNTRDMUY3MDY5NzdFMUM3NTJFRkVFRTM4RkQ3OEIzQTgKKzoxMDA2NTAwMERERkFGMUJFMkQ1RUZFNTU3MUFEREYwNEJGRTM3MkRDNDUKKzoxMDA2NjAwMDEzNzJEQ0RGQzg3MUZGNTkzOEE5NzRBMEYxRkU3RjREMDkKKzoxMDA2NzAwMEZGMEY4MjI1NjNDNjAwODAwMDAwMDAwMDFGOEIwODAwNkEKKzoxMDA2ODAwMDAwMDAwMDAwMDAwQkI1NUIwQjdDOTRENTk1QkZERjdDQjAKKzoxMDA2OTAwMEYzQ0M3MzA4MjEwOTA0QzIyNDI0MjE2MDg4MDMyNDU0NjQKKzoxMDA2QTAwMDJCOTRDOUQzMDBENjA2NUMyRDY4ODQwMTUyQzgzQjgwQzgKKzoxMDA2QjAwMEI1RDJENkZFMzIwODIyMkY1QkE4RDFBMjIyNEU4MkUxMEIKKzoxMDA2QzAwMEExNjEzQjExODI4OTg2M0EyODY0MTFBRDFCNjk4QkZEQkIKKzoxMDA2RDAwMEZENTZEQ0Y4MjhGMjMyMTNBMzc0RTU1NzVERjZGQ0NGMjMKKzoxMDA2RTAwMEZEM0UzMjE5NDJCNURERERFNEE3MzdFN0JFQkU3M0NGNkMKKzoxMDA2RjAwMEZCOUM3QkE5MjlDRTMxN0MzOTQ1ODhEQzk4NzNFNjlFMkEKKzoxMDA3MDAwMDA4MjE1Q0FCN0E4QTEyQjM4NUU4N0I0MzE1NEQwRTIxMzQKKzoxMDA3MTAwMDg0REI3QkJDM0U1Njg4REE4RUUxNjI1MzMyQzEyNTdEOTQKKzoxMDA3MjAwMDZGMUEwMEI3OERCMzZGQTJGMThERUQ3Rjc4MUJFM0JEMUIKKzoxMDA3MzAwMDA3NTU4Nzg1QzY1RjZCRkYyODBBRkI1Q0ZDMzI1Qzg4MjcKKzoxMDA3NDAwMEUxNThGNzUxOTQyMEI4RkFCMkMyRjAyNjFBNzcxMDNDNUIKKzoxMDA3NTAwMEFCNTUxNUZFNENEQUNGRTgzMzYzRkM2MkFBMEU3QkNEQjUKKzoxMDA3NjAwMDgyREE5Mjk2NTY3MzBGQjU1NTdCNUI3OUZDMEQ5RjY5QzMKKzoxMDA3NzAwMEYwRjhERUM2NDFFMzc2Q0NBN0I2Q0FFODhEQjI1MzdCNkIKKzoxMDA3ODAwMEJFNURERkNGQ0ZGM0FCNTMxNTk3MTdGRDdCRkYxMEI3REYKKzoxMDA3OTAwMDBDRjM1QURFODk1QjRBRUQxNUZDQ0NCQ0I2RkRGNEQwRjcKKzoxMDA3QTAwMDBCOTk2RTVBNTdEMzQxRkI0NDBDRUM1M0QzNjFEMjYwODIKKzoxMDA3QjAwMDg5Nzc3NTZBNkI1MTBDRDE0QkI0MjgyMjhEOUE4QjYyNjQKKzoxMDA3QzAwMEFCNTg0REY0QUM2QTZGQUUxNkQ0NUY5NTcxOEY0OTEwN0IKKzoxMDA3RDAwMDVEMDIzRUI1MThERkE3MUY4Mzg4QTM3NTc2RkE4QkU4MDQKKzoxMDA3RTAwMDc3RDFGNzc5RDQ1MkRBRjc1NURGQjFEQjVERDQwNjNBMjkKKzoxMDA3RjAwMDVGOEZDMjc3MDMwNzY5N0VFNjAwM0VEMzVENDRCRjFDNkUKKzoxMDA4MDAwMEI0NjYyMTQ2RDBCQTgzQUY0NzM5Njg3Q0EzRUY3NTQ5RjcKKzoxMDA4MTAwMDZGQTM5RkNGRkQ5QTA2MDdBODY1M0FCN0FCN0NFRThBMTcKKzoxMDA4MjAwMDJGNTVBNkJGQkVERkFEMkU5NUY3OTlENTlFMTY4OTczQkQKKzoxMDA4MzAwMDlERjRDOUVGQ0Q3NTM5NjQ3RkVBRTIzMkUwN0YyMjYxMzEKKzoxMDA4NDAwMDQxOEU5QUNDNzhCQjAwMDcyNkNFNjlERTQ0QTg1NEY5QzUKKzoxMDA4NTAwMDY4REZDQzZCRTlCNjU0REJCN0NCMjRFNkZCQzBCN0Q0N0EKKzoxMDA4NjAwMDAzNURBMzQ4M0U0RTE0MEY5RjRDMjM1N0U3RERFMzMyNTAKKzoxMDA4NzAwMEYwQkMyMkIzM0I3NTA1Q0QzQjE5RTE4OEI0RDM3RTBGQTQKKzoxMDA4ODAwMDE1OEY4QjA0NUY1RjQzOEJGRUUyNUQ2NjM3QjU5NTA3N0UKKzoxMDA4OTAwMEU1Rjc0RURBQkJBMzIwNkYyNzBGNEU1NTNEQ0FDMDdFNDkKKzoxMDA4QTAwMDc3NkFERjE1QzJDM0VEMDBERjNDQ0NBNzcyNkY2MzA0MkIKKzoxMDA4QjAwMEY2MTlFMDlGRUM5RkVCQjJGM0ZDMTNERTc3RUVCQTg3RkMKKzoxMDA4QzAwMENFNzczMjIzREMwOUJFNzQ5OTQ1Qjk4RkU1ODQzRTgyMjgKKzoxMDA4RDAwMEVGNzUyNjM2ODIwRUZBRjdFNjgyMUZCNDJFOTA2MTYwMUQKKzoxMDA4RTAwMEJFRjZCNjlCQjQ3OUY3MzQ4QjQxRjM0Q0NDQjc4QkNGQzMKKzoxMDA4RjAwMDBEQzZDN0VFRkRFMDk3RjdEMEZDRUE2NzU0NjFBMUVFQTQKKzoxMDA5MDAwMDZBRDM4QTM4OUNGRjkzMUQ4M0YxMkJEN0U4NUM2REYyODQKKzoxMDA5MTAwMEM3QzUwNUM5NkI3NUM3NTU3RDg5NjBGOUVFRDBGNUMzQUMKKzoxMDA5MjAwMEMxRkNENEY5NzgzMjQzOTU3ODI1NThCQzgyNTBBRTZFMUMKKzoxMDA5MzAwMDZENjZCOTI2NzVGM0Q4QTY3MDJCRUNENDI2ODY3NzI3N0EKKzoxMDA5NDAwMDJCNzRGRUM0MDdBQ0NFQjU4NEZGNzM4QTM2NkVBMDM2MTYKKzoxMDA5NTAwMDg2NjA4Mzg0Q0RENDVBQTk3REM2MjRGQkExQjY1ODNGQjYKKzoxMDA5NjAwMDg2RDhBOTEwNkMyQTFFOTc2MzQ4QTE3REQ0RDZDOUUwMDkKKzoxMDA5NzAwMEVCQUIzMzVEOEZCQTA4OEZDRDMzNEI2NkNDMDQzRUEyMTAKKzoxMDA5ODAwMDZGOTlBMDZGRDY1QzhBRjA4ODY4MjEwQUQ1Rjc5RUMwNUYKKzoxMDA5OTAwMDc3RkIwRjlBMDRFQzQ3OERCNUEzRjI2MzkyRDM3RTI3QzEKKzoxMDA5QTAwMDI5MEFFMUREQkZDM0U0RjVCMEZDQjkyMjk0Njk0MjJDMDkKKzoxMDA5QjAwMEJCNDlFQUNEMjcwRUY3MzQ3NTFDQ0Q1RjYzRTBGMzU1RDQKKzoxMDA5QzAwMEI3QTg1RTFCQ0RFQkFEMjcxMjEwQzkzRjZENERGRTAxRTAKKzoxMDA5RDAwMEU0QjVGQUI4NkFCN0QyQjlGMzdEQzlCRjlBMEVCOEM1MDMKKzoxMDA5RTAwMEU0QjREMEZBNUExRjc1MTI1Q0JCNTdGMTNBRTRGRTAyMjgKKzoxMDA5RjAwMDdBNTk3MzEzQ0JCQTM4NjNBQjREMTE1OUQ0QUVFOTMzN0UKKzoxMDBBMDAwMDYzREU5OUMzOEE3ODhDRTY2RDBFOEI2QTAyREUzNTk5QjcKKzoxMDBBMTAwMEIzQ0YyOTUxRDRBQTVCRDYyN0QyN0VDQkI3OUIzRUVDNkQKKzoxMDBBMjAwMEIxQ0FCNTU3RThCRkJBQ0U2RDJDQjcxNURFQzFGRDU1QkEKKzoxMDBBMzAwMDdCMDdDMzM1QzIzODAwRDNGRUNERjhFMzY2MjFEQTVDMEMKKzoxMDBBNDAwMDkxQjE2NzZFQTBCRjI3ODgwOTU3NTREMDY5N0EzQ0Y0RUEKKzoxMDBBNTAwMEUxMDRGODRBRjIyNDFBODhEODIzODVCODZGOTIzMzFFMkQKKzoxMDBBNjAwMDdBQkZEMUU4OTgwRDNBMDQzQTRENzZEMEFCRUVGMDgxREEKKzoxMDBBNzAwMDBBRTBFREFEMEU3MzFBRThBOEI1QUI1RjYxQkEwNkJFMjkKKzoxMDBBODAwMDIwQkFERjQ4NkQ4MkUwRjMwNzg0QTQ2RkEwNURDQTc5QzUKKzoxMDBBOTAwMDlENDlGMTVBQjE5RTY4QzhGQjU5MTVFRjFBMUEwQTc4OTgKKzoxMDBBQTAwMEZBQTNEODNFMDk1MTBDQkQ1OEI1MjBDNzAwM0IwNzM1MDUKKzoxMDBBQjAwMDE2ODRDQUFGNzQ3RDUwNkM0NjI1MUFBREQ0RkZFRjE5NjkKKzoxMDBBQzAwMDdCRDQ2MTQxNzZFMjNGNUQyOThDN0Y4MTU5Qjg3REQ0MkEKKzoxMDBBRDAwMDdGNUZBNDMzMUE3MjNGRDYxQTk1MDVCQ0M2NUE5M0JDRTEKKzoxMDBBRTAwMEEwRkI1ODYzREYxQTdDN0ZGMzI4QzVGMTEwNkQ3RDI0Q0QKKzoxMDBBRjAwMEVCRTVDOTBBRTBEQTA4MjdFNDQ0NDk1ODZDMDQzRDM2QkUKKzoxMDBCMDAwMDhGNUE2Qzg0QkM4RkI1RkIzMjRBMzIwN0UwMDI4QzQzQUIKKzoxMDBCMTAwMDFGODQ5N0JGNTcxNEUxMzZFMjNCQ0Y4RDU0RkMwNkRBQjEKKzoxMDBCMjAwMDNGNjAyM0ZDQTAyNzQ2QkIwOUY4MDU0QzEyMTY2MkNEOTYKKzoxMDBCMzAwMDIwRkNDODIyMzFGQ0ZGOEU5RjlERjA4QjE4QzA4RkY4REYKKzoxMDBCNDAwMDFEOERGNTlGNjcxMzdEQTg0RDlBMkI0NDM3REI4NTE1QzYKKzoxMDBCNTAwMDZDMTc3NDdBNUUyNDc5MkYyMDVFQTUyOTUyNkVBQTc3Q0QKKzoxMDBCNjAwMDFDMjlDMjc4OERFODVFOEY3NTQ1NTFGMjFDNDUzODBGRkYKKzoxMDBCNzAwMEUwMzBEOUFBQjk5MjVGQjk1QTdCN0ZBRUY0MkZCQUZEQTMKKzoxMDBCODAwMEVDQzg3NTE5NzNBOUREOUU1QjYyNDY1QkE4NjZDNkY3NjMKKzoxMDBCOTAwMDBDNjFFRjU3Mjk1Njk2OTNDRjQ5RkY2MDhGRUY1REExMDcKKzoxMDBCQTAwMEQ4NTMzMzA2RTQ1QkQ3QUIzQUQ5NzU1NTdGQUE3RUJGREQKKzoxMDBCQjAwMENCMkM1MkYwMzk1Nzc3MDY4RDk3MEJBOUQ3OEI1NkRCODQKKzoxMDBCQzAwMEVDQTlDMTdBMDQzRDIzN0E5NERCMkI2RTEzQTQ2RkVFNUIKKzoxMDBCRDAwMEQ1NzFGNkQ0QTlENEFGNUUzNDBCQzg5RUE2NUZCMUY0MkMKKzoxMDBCRTAwMDdCMjU2NTA4RkRGMjg1RTg2NUZCNjBEODZGOTM3MkVFQTIKKzoxMDBCRjAwMDhGNTRCQzZCMDlGRkQ0RENDMTdBOTdBNEU5NDFBMzVCOTUKKzoxMDBDMDAwMEUxRjMzNTdFNjU2NEQ4NTNBQTc4NDFGMzNCQTk3Mzc1NDcKKzoxMDBDMTAwMDhDNzYzOENDMkJDRkY1QzIzRkRFNDk2MDI5RkExQjYyQjcKKzoxMDBDMjAwMDU5NEY3OTkwRUNEN0JGNjhFN0JDRDNFODNGMDJGQjcxMUUKKzoxMDBDMzAwMENDRTQ0QkI2RDNEMEIxMUFBQjEzRkIyRjEwMTRFODkwMTEKKzoxMDBDNDAwMDVEMkIxNUREREM5RTBBQUY2REYzRjNFNjlFMzE5MEFGQjAKKzoxMDBDNTAwMDc3REQxNjI3RTJCMEM2NzU0RDkxQjBFMzU5NjI5REZENzAKKzoxMDBDNjAwMDRDMDY4MjBBQjFGN0NBRDRFQkM3MzMyNDM4RTI4Q0NFRTMKKzoxMDBDNzAwMDE3Mzg2MjhBNTNDMDZGOURBRkRCNzM1RDc5QjkzOUQ3N0UKKzoxMDBDODAwMDVGNUZGNUE3QjZEQkJGMDNGQjc1N0ZCMzM5NUU4QTQ5QUIKKzoxMDBDOTAwMDc3QzZCNDAxQkVFOTdDQUQxMzFFQzY1QkU3RDc1NUZFMkYKKzoxMDBDQTAwMDExRUVBMzQxMEZGNUUyNUNCNjMzQ0ZBQTgyRTMwQThEQzEKKzoxMDBDQjAwMDdGNTZGQTFEOEE3RjNBN0Q2NzZBN0M1OERFMjFFRDUxQTYKKzoxMDBDQzAwMDI4NUY3NTdBRkY5MDM2QzRGN0M5OEZFRTYwN0UwODBCRjcKKzoxMDBDRDAwMERCQkY1MEJFN0YxMzVGMjhDMjJDQzU1MDdFQUM0NTgwNjEKKzoxMDBDRTAwMDlGODkwNjY5MUYxMzk3OTE5QzEwREVGNzA4RjdFMTFFOTQKKzoxMDBDRjAwMDZBRUYwQTdGQ0JDNDcyQThGMUU3NUVGMDg3QTZCRTJCMkQKKzoxMDBEMDAwMEJDREZDRjQ4RkVCRkUzNEY0NzZFQzkwM0MxN0ExOEFBQzQKKzoxMDBEMTAwMDc3RDdEM0IzNkE4N0YzREY3NUJGNDc5Njg2RjQyQjQ0NDIKKzoxMDBEMjAwMDNGNDNGNDRGRTc5NzdCNzUxNEVCRDk1NTNFQUEyRDUyRkMKKzoxMDBEMzAwMDVGMzU3RTQ1RDBFRjkwRkE4NjNGRTg3QjM1RUQ4QUQ3NjgKKzoxMDBENDAwMDlGRkMyREY0NEYyMUM0ODk2RjhGODVFODlEQ0U5RkVCQ0EKKzoxMDBENTAwMEQ5MURERDRFOUQxNkZFNjM3NjNBRkZBOTE0MTkwNzc4NUEKKzoxMDBENjAwMDdFNjJGMTM2MDM0RTM3OTRDM0VFOUQ5QTI4REIwMzlBRDgKKzoxMDBENzAwMDdEMEI2RDRGNTM5Q0EzOTAxRkRCOTQ3MTcyMDRGQ0Y1QTcKKzoxMDBEODAwMDI5QjNCRThGQ0REQjRDRjg5RjVFRDMzRDY2MjVBRDNGQ0EKKzoxMDBEOTAwMDlEMkJEQjUzODgwQjgzNjA1Nzk4NTgwNEJCN0U3QUE0NDUKKzoxMDBEQTAwMEM1MDMzQTlENTYyNkU0QzEzRjlDNTYxRUI4NURDMkYxNkMKKzoxMDBEQjAwMDY2MDdFMDA1RjE3OTc2ODI0Rjk5RTQ3Q0REQUZFOEY2Q0QKKzoxMDBEQzAwMEZGRjQ4MkVGMTRGMDNDNDUxQzA1M0QxQzhBMjhFMUVGM0UKKzoxMDBERDAwMDI4NEE0QzMxRTE3M0ZBRkVCNDI5NkJDNUMwRjk5QjcyMDUKKzoxMDBERTAwMDBEQkNDRUFCRDk2RkMyODNFOURFRjc1M0M1REI0NDVERTIKKzoxMDBERjAwMDhCRTA1MjA4RkZFNEJDREYxNEE3NTBGRkZCM0YxQjM3MUEKKzoxMDBFMDAwMDE5RkM3NUFEMUFGQzdERjhFQkU0MUIwMTZGRTM3REJFQTgKKzoxMDBFMTAwMEY3NjU5RjY5NzE5MDVGQkFFQTI3MEIzRTkzRkQ2NTM5Q0MKKzoxMDBFMjAwMDA2RTg0QkI5QzY0MzU3Q0M4NDY4RjBBN0RGM0IyRTFBQkYKKzoxMDBFMzAwMDdFNDdGNzQzRkRDNzBGNDRCODgzRjg3NjhFRkM5NDE4QkQKKzoxMDBFNDAwMDFGMDQ0Rjc4MzQyOUQ4OEYxREQ5QkQzOTFERkI5NDlCQzEKKzoxMDBFNTAwMDNENTk0RUVBM0ZEQkY4NzQxMkUyOERGMkREOEZBNDczNDgKKzoxMDBFNjAwMDFDQkM3QjYzM0FGMjk5RjJBNkNERTkyRTg2QzNERDlDQzkKKzoxMDBFNzAwMDRGMTlFNUI5MkZFQ0JGNzlEN0E2QTBCOEJCMkE1RjY1OUIKKzoxMDBFODAwMEZDNEJBRDQ3MEFFMTZGNjdERkYwRTlDMzc2OUE5N0Y2NEUKKzoxMDBFOTAwMDMzQzUwRUYxQkE1Nzc0M0YwQ0ZGQjgxMEYxMzFGMkI3RjkKKzoxMDBFQTAwMDA2MkJEQjczREFDRjA1RkUzNzRGRjhGRTczRDBFMzEzNjIKKzoxMDBFQjAwMDE5MUY5OUNBNjhERUU1NUMyM0QzNjdBMUYwNkU4OUE3ODQKKzoxMDBFQzAwMDcxQjE0MUIxMzc4QkUwRjk2MzFBMzE3RkYxM0FDNTlDQkEKKzoxMDBFRDAwMDAwM0JCMDYyRDg2NEQ1ODE3NUMzMTg4RjI1MUIyNjc3NzcKKzoxMDBFRTAwMEExN0ZFMTgzQjI3RkI2QzU3QkYwMjRGNkY5OEREOUQ5MTUKKzoxMDBFRjAwMEVDNjA3QjkzNTIzMjY5MDBGRkNCQjk2NjVFQjc2ODhCQkEKKzoxMDBGMDAwMEMyRjFCRkZFOURCNDI3RTIxQTgzQ0Y3OTU5RTNCRkY4M0YKKzoxMDBGMTAwMENBQTI4MDJGM0ZEMEY4NzJEQjgzRUYxQzREQTA3REVEN0QKKzoxMDBGMjAwMEIxRUUyQkIwMUI2RjNGN0UyNkQ1NEZGRDA1MzFFNzMyNkEKKzoxMDBGMzAwMDIxRTc2OTY2Rjc1MzE1Mzg3NzkzQzU4OTczNjQ2NzI1ODgKKzoxMDBGNDAwMEFBRjEzNDdGQ0E4RjczMUY0M0JCRThDMUM1NEY1NUMwOTgKKzoxMDBGNTAwMERFNkVCNzcyREVBNkUzQjc0QTcxMUE2MDhGNUY2RkZDNzAKKzoxMDBGNjAwMEUxMTJEMEVERUNFMzU2OEVEQjU3MzU4RThGMTc0M0U4NTgKKzoxMDBGNzAwMEE5REVFRTIxRkUzQjI4RDFEOTU3NkZFNUY2ODU3QUJCNzUKKzoxMDBGODAwMDcwOTAzQ0VDQUY0RjYwRjhCN0Y1MEU2RUM1N0MyOTVGRjIKKzoxMDBGOTAwMEFCQjRGQ0Y4N0FGQjRERkQzMjVDMzgyODlFQ0RERTYwQTgKKzoxMDBGQTAwMDEzMEVCMjUzNDk3MUFFNTE3OTc0Q0VCNDg5MzU0RDFCQ0QKKzoxMDBGQjAwMEI1NzNBNUQxRkFDOTlFRTQ3Q0QwMjE3QkUzQ0EyRTg0MDcKKzoxMDBGQzAwMEJDRTYzQzk5OEZCRDc5NzI0MzEyOENGMkYyMDczRkQ4OTAKKzoxMDBGRDAwMDU5NDFFMzczRjM0QUM2RTU1MUJGNzVDNzY3NUM1Nzc4NUIKKzoxMDBGRTAwMEJERTM5MTg1QTA3Nzc5OTM0NTlFNEYzQkY3RDlDN0QzNTEKKzoxMDBGRjAwMEUzOUZBMkZEM0Q2Rjk4MzhERkFGREJGMUMxQ0U4REQ0MEEKKzoxMDEwMDAwMDJFRERCMkQyMUMyQ0VGREZGNkJDQzkxQTNFREZBNDU3OEUKKzoxMDEwMTAwMEQ3QTNDMzNGQUU1NzlCOTM1ODdGOUE0OEFGMzJGRjc5MEYKKzoxMDEwMjAwMEJEQUE3QjcwMEREM0VGODFCQzkyRDlBMEZCNTk5MzI3NDkKKzoxMDEwMzAwMDA5RkE3NDc2QzIwQzk2NzNDRjYxODVFOUFGREI3MTdERDYKKzoxMDEwNDAwMDdEQjE3NkRFMkE4MzZGQ0JGNEU0MDEzQjdFNDk2NDMzQzUKKzoxMDEwNTAwMDdEOEY3NDdDOTI4RUI4Rjc1MkZCODJCRjdCRUU0Mzc0MTcKKzoxMDEwNjAwMDZFM0Y5REJCOURFOEVCMUY3RkVERjgzNEIzN0I5QzkzRjcKKzoxMDEwNzAwMENFMzdDRDIwRTNERDZCRTJENjNDODM1NjJGRTgzNjk3QTIKKzoxMDEwODAwMDQ0NEE5QTJCQThDQjY4RkU5M0ZDOTgyNzlBRjBBOUVFQzUKKzoxMDEwOTAwMDU0RkM2MTU5RjA2N0I3OUUzMzIyREZBM0JDRjFDM0UwNzMKKzoxMDEwQTAwMDM4ODI3RTNFMENGMkRCRDdDM0Y3OUJEQTVBRUM5MzM2REMKKzoxMDEwQjAwMDYwNzdCRkYzNjc4M0YwMDdGOUU5OUI3QkMyODQzRkU4NjEKKzoxMDEwQzAwMEJCNTdGMzEzRUEzMzEzOUY3QTNCNDZCMjVEMDBERjhDQzQKKzoxMDEwRDAwMEE4Qzc3NTRDNjgwMjdDQ0UyQ0Y5RDg3Qjg4RTIyNjU5Q0IKKzoxMDEwRTAwMEM3MTFFQUI0ODE3MzlFRUJCODkwMDUzQjFCN0FERURBMzgKKzoxMDEwRjAwMDk3MkZCMDdDNTRCNzNGRjI5OUMyRTc5Rjc1Q0U5OEY1MTEKKzoxMDExMDAwMENERTczRkIyRkI0MjE2Rjg3N0NFRDQzMzBERjk1NkFGOTgKKzoxMDExMTAwMEI5MjcwQjdDQTg3RDQ1REFGMzdGOTQwRTdBN0ZDNTA2NEMKKzoxMDExMjAwMDNBMDhFOTc5QUQ2MjY1MzkyOTU0MkY3MkREQTBGN0I4MjQKKzoxMDExMzAwMEFDMUJENDc2RUM2MjdCREFERjI5RUIzNzc1ODZFRUEyNDYKKzoxMDExNDAwMDc4RDQzQjU2N0NEMDA1N0JENjlGMjBGMzI4REFERjA1ODgKKzoxMDExNTAwMEJBNEQxRkE3Rjk0MTYzNUZEMjVDQjI2QjJGNUU5NTA3NTIKKzoxMDExNjAwMDk5RkY5RDg1RkU4RUM3M0VCRTZBRDgwMTkxMTUyRTEwNEYKKzoxMDExNzAwMDU3OUM4NzNFNTNGRkMyRDVDOUVCMjFFNzY3QkQyM0E2MjUKKzoxMDExODAwMEMwM0VCRTk5RjVCNzVBQUVGN0JEMUE2RTU3MzlFRUExRkIKKzoxMDExOTAwMERFMjBGRTVEM0Q4NzU3MTVBRTQxRjU4MDcwRTEwQTlBNkQKKzoxMDExQTAwMDU3Njc3NkZDODBFM0UzMTNBQTQwNUM1NzM3NTFFQTkzMTQKKzoxMDExQjAwMDc4NTlFQTUzQ0RCQTIzRTY4NEEwRkQ3NjQyOUYxODZGOTIKKzoxMDExQzAwMDE5MkZDRTdFRjU2RkFDOTc1QjY2QkEzQUExOTdFMUIwNjYKKzoxMDExRDAwMDg1RDgyRjIxREFBQjI4REEzQ0UyN0ZBRDg2NDM0NEE3REQKKzoxMDExRTAwMDk2RjcxN0FCM0M1RUQ3QUU4QTkxNTg5MzEwRTk0REEzQTIKKzoxMDExRjAwMDczMTQ4QkFENDZDNEQzQjM4NTZGM0FFQTM2QzJEOEYzQzUKKzoxMDEyMDAwMENCNUI2ODdDQ0VBQkVBRDQ0RDgyRjNBNzQ1MjU5QzU3RDcKKzoxMDEyMTAwMEJBNTM1NzIxM0UzMjI4MUE1RDdERDk3MzgzRkQ1OTlFRkEKKzoxMDEyMjAwMEY0NTNEMzU1ODVGRDU4REZDODcwOEU1MzY2Q0RBRjI5NzIKKzoxMDEyMzAwMDA1QkVGQUJDQUM2MTcyMUVFREMzNzE5NkYwRjY2NUNEQzkKKzoxMDEyNDAwMDg1N0VGQUZCQjJFNjQ1MEVDQ0JCRUJENUYwMTVFQzE3NkMKKzoxMDEyNTAwMDg1MkZGQkFFQTBFRjg0RTVDQkZBRThFN0U0NDcyMDI3MzMKKzoxMDEyNjAwMDc1OTc2NEJEQTM1MEZERUEwOUM0RTdBQjBFOTNCQzIwOUIKKzoxMDEyNzAwMDNFMzQyNEJGNkI4MDFEMjczQTgzQUYxNzg4QUYyRUY4MEEKKzoxMDEyODAwMDFGQjc3MEI5QTAzRjkzNDY3OEExM0Y3NUZCMTU2MTQ0MjUKKzoxMDEyOTAwMDlEQThDM0QyODQzQTUyQURBOTI3MEVGMkJDQjFGRDRGMkUKKzoxMDEyQTAwMDY2Qzg3MzVEREIzQjY2QzcyNEFDOTc3NTI3NTI0OEI2QUEKKzoxMDEyQjAwMEUzNzU5QUZGQUE2OTFGRkYyRUVBN0MzNUM3QTUxN0FEMTMKKzoxMDEyQzAwMDMxQkVDM0Y5N0JENUMxNTZDRUQzQUI4NTlGRjNGNEVBQ0IKKzoxMDEyRDAwMDk2QzFGMkQyOUZFMEUwQkE0OEE4N0U4NEU1M0IwNkU5RDkKKzoxMDEyRTAwMEM1QUNFRDUyMkZFRTUyQzUwQUQ4MzlBMUQ1Njk2NzI1OTQKKzoxMDEyRjAwMEM0NzMzQzMyQjA0RUM2QkIyRUY1QzJDMzg4NUYwMjI5MTAKKzoxMDEzMDAwMDhBNTNBMUFEMDI2MTlFNzU4ODhCM0NFOTMyOUUwOUZDMkYKKzoxMDEzMTAwMEVFODVFQzY1NkM1N0JDRDk3N0QwQjkwMjVBQkMzQjZCRjMKKzoxMDEzMjAwMEMzMzZBMzFBODRDRkFDNEU1OTk3MEM4NDg5RjI0M0NDQjAKKzoxMDEzMzAwMDZGRjc2OEYwNDFCODRBMjJGMjczNThBRkIyNjA1NzAzQjIKKzoxMDEzNDAwMDA2NTk0NzBEM0Q0N0JENTYyRjNBODE3QTUyRTYwMERFRDkKKzoxMDEzNTAwMDczMTIxM0E1MUQxMzVFOTY5RjJFODNGQ0JFQ0I0MEUzMzQKKzoxMDEzNjAwMDUzMDZENjJGQzk5N0VCMDdGMjIxNTkwN0JCOUU1REQ5Q0IKKzoxMDEzNzAwMDRERkMyOTIzRkVFQzI1M0VBMzdEOUVGQzcxMTlEOTk5RDUKKzoxMDEzODAwMDE2RjJDNzgwRkY5NUZDMzE1QTVGN0QwNkY3QkY1OEVGMTQKKzoxMDEzOTAwMDY0Rjg2MEZENEQwQzFGQUE3NzMxREM1RTVGQ0NFRENCQUQKKzoxMDEzQTAwMEY1MjVEQzdGMDJBODdFMTdGRjdCQkExMUYyRDAwNTFENjAKKzoxMDEzQjAwMDFCMzUwMDlGOEEwOTgxNDcwRDlFN0YyQTQ2MTkwQzhGOTUKKzoxMDEzQzAwMDUyNzg3RTc2RkVEMzhEMUVENDhCNjZEQTM1RkQ3NjQ0NTgKKzoxMDEzRDAwMDIyRkUzQTZCOTM3NUE4QjMzNjU5ODc2QTFERTVCRTI1ODAKKzoxMDEzRTAwMDlGQzZDQjY2QURERDJERjM1MDU3M0FFNjE1QzQyQ0UwMTEKKzoxMDEzRjAwMEZDQjU5RkYyNTdEOEEzOTVGOUVFM0NGMEU1RjhGMUZDNjcKKzoxMDE0MDAwMEQ0NkQ2QzI3NkQ1QzA3M0Q3NUY3MEREMTVDMDc3QzgzNEYKKzoxMDE0MTAwMEYyNzFGQTc0NkVDNkQ0NzVEOTA0RTc0NjI4MkNCRjY0RkQKKzoxMDE0MjAwMDJGNkUyQ0QxRjM0QURBMjdCRjUzREVBMzE0QUFENTY1NTkKKzoxMDE0MzAwMEQ4N0ZENTQ4REI1NEQ4REZDRjVERUVEQjgwODc0RUVGMTkKKzoxMDE0NDAwMEEyNTFDQjUzMTEwRjc1OTkxQ0VGQTI4RUVCRjlCRDQ5MzgKKzoxMDE0NTAwMDIwOUZEMkVCN0RGQUJDMEU1N0VFREQ1ODM3MkI2M0RDQjQKKzoxMDE0NjAwMEJBMjlCMDNCQTQ2NEIwNzMyRUIzNjgwMTVFMkU0M0I4QjIKKzoxMDE0NzAwMEIyOTZFRDk2QzMwODNCNzBCNzI2Qzc3OTBFMTkxN0ZCRDUKKzoxMDE0ODAwMENEMEU2MzBDRUEzNzYxQjlCMTFFNUFEN0E1RjFGOUI4OTAKKzoxMDE0OTAwMEM2RTcxMzFBOUZERjQyOUQ4Q0RBQjdBOTFGNkQzN0Y1OTcKKzoxMDE0QTAwMEEzOUQwMUZBNEE3OTY1QkEzRDkxNTc1MkM2RjIyQkZBQ0IKKzoxMDE0QjAwMDkyMDBFQjc1QzFEOUQwMkY2OTZGOTIyMEQ3NUIzNEY5QjgKKzoxMDE0QzAwMDRERDBFQzRENTc2RTQ5OTU1Q0U3RTM3REFBQjQ3QURCQ0QKKzoxMDE0RDAwMDA1RUQxRTQ0M0ZBRkJFNkU2MEJERTA3NkRFOERDMjYzOUIKKzoxMDE0RTAwMDg1OUQ3RjQ5RTY5RDYyMzRDNTIzMDRDRjdCMjk5RUVEMEYKKzoxMDE0RjAwMDkwNkFCRDIzRjM2M0QyRjM3OTUzNjUxRTIwMEU1OEU0M0UKKzoxMDE1MDAwMEJDMDQ0NzBFRjQ2NEFENTY2RkVERjUxQTNDMjZENEE3MjMKKzoxMDE1MTAwMDYzQkFEMzYzRTA3RjM1RkREMkUxNDNGRkFEQjJCREFFMjgKKzoxMDE1MjAwMDk5NDIzMEI1QUYyOEYyN0MzNUYzQkFEMzg3NjFCRDYyRkEKKzoxMDE1MzAwMDMzNzA3REJCNDk4RTlGRDRGNEFGMjY0NURCNEYzQjhGODQKKzoxMDE1NDAwMEIwRkE5MkMwOEZDMEUxOTc5Mjk2MTBCQzI5QzJCRjRDRUUKKzoxMDE1NTAwMERBN0Q3RjNBREI2QkUxNEY5RjA3QkJBOEY4REUxNzRFQzEKKzoxMDE1NjAwMDhBMkIwQkE2MkUzMThFMDQzRDdDM0IwMTU3MTdFNDJDQjEKKzoxMDE1NzAwMDMxREU4Q0YxRDZGN0VEQzFFMzIzN0M0OThBMUQ3MEI2Q0MKKzoxMDE1ODAwMDFDMUZEMUJBNzM5ODMzMDgzNkJERjgzRUM2Q0Q4NjlDNzEKKzoxMDE1OTAwMDI1MDUwNENGQjE3ODhGRDc0MzZFN0UyQkU1Q0JCNkJGNDAKKzoxMDE1QTAwMEVEMENFODU2RDUyMUUzRjZCQ0ZENkQxNzVGODQ1RjZFNDgKKzoxMDE1QjAwMDhCNzRDMkJDRUZDQjRGNjY3QUFGRUREOEIzMDVGMkQ2RDEKKzoxMDE1QzAwMERCMkFFRjAzMzZCNUZDNjlFN0NGNzk5RTA1RDcyNEI0NTMKKzoxMDE1RDAwMEFGMkY1QkQwNzc1NjFFRkRFMzYyRTAzNTI3RENGNzA1QzEKKzoxMDE1RTAwMEUwODc4RUNFNjQzQ0U3MEM5NzdBRkRDOEQxQkMyNUQwNEQKKzoxMDE1RjAwMEQzREVCNkZEM0Y4MUZFQ0Q4OUE2ODAxNkY4QkM2MEUzNDAKKzoxMDE2MDAwMDNBNDRFNTgxMDkwNUQwRDNERUM4RUU4NUQ4QkZGNjc5MjYKKzoxMDE2MTAwMDhCMTM3MjVBNzkyMDNFMEZGNTgxNDNGOUIyMUU1RTMxNjkKKzoxMDE2MjAwMDcxNkIxMkZDQUNFMUU1N0RCQjdGOEVGQkQ1RTc2RDdDNzkKKzoxMDE2MzAwMDJGNTQxNzIzRTNCQzRBQjU3MURBNEFFNkRGQUVERDRGMUIKKzoxMDE2NDAwMDAzRUY3RDM2QkU5RkFENDBBRDhBRTA4QURENjk1Q0M3QTEKKzoxMDE2NTAwMDdGRTVFQjhGMTY4MjBGODVFQThFRERFOEZGRTIzOTlCOEUKKzoxMDE2NjAwMDAxNzQzODY5NzY0NUNGODAxRTlFMzQ3MUJFNTlBMUMxODAKKzoxMDE2NzAwMDE1QTc4NjRCN0NDMjdCOEE5ODdGQjE1QjkzRTA2NzJCNzIKKzoxMDE2ODAwMDg3RkZGNDc2RTAzRDQ3RERCQTEzRjk4RUQ4NjNFMUJCRkUKKzoxMDE2OTAwMDg5NzNGQjg4NkVCNEVFNUNCMzY5MEFCOERDQkIyRkQyRTkKKzoxMDE2QTAwMDA4NzlCOUEwNkM1REY4MTRGNjZGOTZGMzJFRDhCNjMyQUYKKzoxMDE2QjAwMDNEM0RDREUzMDVCRTQ3RjMwNEVDRDYwNTY1REJBMEZFNUEKKzoxMDE2QzAwMDczQ0Q3QkIyOTA4RjlFN0Y3RTBFRTdBNUJBRkNFQUZBQkYKKzoxMDE2RDAwMDUyRjk5QzY1OTA1RjY0NEI0MEY2QTg1MkZCNUJEODNEODUKKzoxMDE2RTAwMDIyODJGQzZEODUwNjlFM0ZGNDY0RUY1MzYyNjBGREY5MzMKKzoxMDE2RjAwMDE2OTNERjRDMzRBQUIwODg3NUQ2OTgwMTdEQTg0Q0JDRUYKKzoxMDE3MDAwMEI1MThFN0FCMzQzNEE2MjM2RUE5OThEQUIzMTA3QTcxMTIKKzoxMDE3MTAwMENFMjZBQzA5MzRFRjREQ0Q2RjU1MUU1QzMzMTdGMUVGN0IKKzoxMDE3MjAwMEY1RjBCOUEyRDlBMzRCMDlEMjdGNUQ2QUI3Nzk4M0VGRUYKKzoxMDE3MzAwMDI1NDNEQkY3RUE4NUZEQURCNDAxRjhERTE1MTY4RUUxMzEKKzoxMDE3NDAwMEY1RkRERTM0RkJBQTkxQTdENUM2NDhGQkYxM0VDRDZGNkYKKzoxMDE3NTAwMDIxM0JGNkI1RTZFRjE2QUQxRTNDQkYzRjNGODZCRjVGQUYKKzoxMDE3NjAwMDZCRUU0OTg3RkZEM0Y3MEZFNDZCN0VDM0Q4OTMwRTdCRjQKKzoxMDE3NzAwMDE1QkE2RTBFQzIxMUQ4OTExNzE0QjYyMzk1MDc5NTBGOUUKKzoxMDE3ODAwMDU0QTI1M0E1RDVFMzU1NDExNzYxRDZDRjY5QkNBMkM4NzEKKzoxMDE3OTAwMDc1MDlEMzM0QkFEM0RBMEQwNUM5RkNERENBMTY5QkNCNjMKKzoxMDE3QTAwMDQ2RUJBQUMyN0FBMjEwMTc1NTQ3RjY0NDIxREVFOTdEMUUKKzoxMDE3QjAwMDU5MTU0RDFBQkI2MkUzMzRGRUE0NjgyQzBCQUEzNzU2QTgKKzoxMDE3QzAwMEY4NEMyRTVCRDYxMDdDNDZGQzQ0RjM5NkUzNkZGQUZFOTEKKzoxMDE3RDAwMDMzMDUyOTdDOUVGMkY2NzBGRTlFQjBGNzRDODM5Qzk2RjIKKzoxMDE3RTAwMEVGMThCQzBFRTdCMjA3RTk1RjZGRkJBRUI4RTBCQzNDOTgKKzoxMDE3RjAwMDQ1QzMzQkEwN0NDMDdBMTJGOEZBQzMyNEYwQkREMjIwQzYKKzoxMDE4MDAwMEQ2RTFGRUYyM0NBREMxQkQyNkMxQzIyQTYxQkVGN0FDMzUKKzoxMDE4MTAwMEZDNkI0NDE4RTRFNUZDQTU2QUQ2REI1RUE1ODdFRERBMkYKKzoxMDE4MjAwMERCMDU3M0Q5MkVGNTlBN0FEOEFFQkQ3RUY0MkVCNjBGQUQKKzoxMDE4MzAwMEJEQzM3QTE2QzI0RUJENURCMDVDOEU4RkVDNTlFOEEwNzgKKzoxMDE4NDAwMEYxRkQzQTNDNDZCMERGN0ZFRjY4MEREQjhGMzlBQTdDQjMKKzoxMDE4NTAwMDU3MjE3Njk5RUNCMjFFQjRFMTU0M0RFNzE3MjY0NzcwNDQKKzoxMDE4NjAwMEZFN0RCQTQwQUJGNzBDRjA4N0YzMkU1RDZGN0E4NTYzOEYKKzoxMDE4NzAwMEZGNDFFODYxNzkwNEQ3NzUyODhFNkE3OTExRjFERTgyMUIKKzoxMDE4ODAwMDM4MjdERTZCOTQ2MzlEOTQwMzczRjA3RDYzNkNDQ0U1MjUKKzoxMDE4OTAwMDY1RTBDRjFEQTNERDQ1MDUzOUI4REZFQ0UxM0M4MkE0NEUKKzoxMDE4QTAwMDlBRkQ0REVERUYyQzlDNEYwNjRDN0RCQjYxQTdEMjQ3QjYKKzoxMDE4QjAwMEJCNjcxNzEwMUVENUU2RUVGNUQ5ODREMjQ1NTM0RjE3RjYKKzoxMDE4QzAwMDRBRTRCMzU1Njk4RkM0MUUyOTU3QkQ5OUJCRTQzRDhEQzkKKzoxMDE4RDAwMDc2NUY3OUI3NDY3RjQxNDk0QzIzRTQ0MjkxRkM3REJENTgKKzoxMDE4RTAwMEZEQzA1QkIwMkJCRERERTNEODFFODdFQUNEQjlGNkM3REUKKzoxMDE4RjAwMEEyNjAxRkZFNEM3RURDMTM5NEVGRkY3OUYxMUVCRTY3RTEKKzoxMDE5MDAwMDlEOEZGNzIwRDQyRTU5Mzc1ODFFRkFCRkJBODNGMzNFNjUKKzoxMDE5MTAwMEIxMjVBODFGNzJEODMwMTgwRTk1MjNDOEEzN0Y5MEREN0IKKzoxMDE5MjAwMEYxMzBEREI3NkI3QTU1OTVENzVEMEIzQTVDODVFNzExRTEKKzoxMDE5MzAwMEFDMDZDMUFGODVDMDIxRjM0NTg5OEMxM0I2QzNGRjEzMzQKKzoxMDE5NDAwMDNEQUFDN0Y4NEY3MTlFQkVERjI0NjBDN0Q3OTJGRjYyRTEKKzoxMDE5NTAwMEI4MkREQzhCN0NDNUIwOUZGQzUzQUNGNDRGRjAwQjU1MUQKKzoxMDE5NjAwMDUxREQ1QzlGRUE2REIzRjA3REVGNDMxRDlGMjRFMUZDRTgKKzoxMDE5NzAwMDI0ODc1Qzg3QTlFQTc4MjkwRUY5RkIzRTJENUYyMDNGN0EKKzoxMDE5ODAwMDE4QzdFRjYzREEzQUUyOTA3N0U4RkRENTA2NUYzQUYwRTAKKzoxMDE5OTAwMEEyODg4OEUzNzVCREJGNDZGNUE3MDNGRjJBQTUzQjBCQzgKKzoxMDE5QTAwMEUzRkJGMkVEREE3QzgyNTVDMDgyQ0Y1MUFENDg3RDE3NjIKKzoxMDE5QjAwMDFEMkFEQkYzNTBCRTNEQTlDOTJCRDk4NTJDN0VERkYxNTIKKzoxMDE5QzAwMEIyQUMwRkU4NzZBMDQyQjMyN0FGQTEzRjUzRUFCRDVEQUEKKzoxMDE5RDAwMEJGNTdBMkE1MTVEMEY3MjFFQzQzNDI4MTFFMTdBRkUwRjcKKzoxMDE5RTAwMEZBQ0RFMzA1MEUwOTZCRUI3OTVGNTk1RkUyRjFEQTU3NDcKKzoxMDE5RjAwMDJFNjRBNTY0NjI5RDM2MkZEODBFOEQxQkIwMkJEMEZGQjAKKzoxMDFBMDAwMDA0RDZGRjg3NEM3MTc0QUVDQTlEOEE3MzJERUM1NEU5REQKKzoxMDFBMTAwMDlBMjI5QTJFOTYxQjU3MTY3MURENEM3ODM4NkYwQkM1OUIKKzoxMDFBMjAwMDJCNTQ4RTI2MTc0ODNBNTUxQTg2MTVDNjA2RUQ3NzlFMTIKKzoxMDFBMzAwMDZDN0FDMjE0QjYzMzdFRDg5RDFGQzUzRTVBODQzQUM1MEYKKzoxMDFBNDAwMDBGNEJFNUJCODFBQkZFMjY1OENGNzE5RTFERDI4RTQzNTYKKzoxMDFBNTAwMDZEQUUxOEFFOTVFM0U1MkIxQUQ3QzcwRjgxNDcyODlFQzgKKzoxMDFBNjAwMDE1RUVDNkEyMzhDN0I1RkQzQUJFRTc2RDNBN0U3OUE2MzcKKzoxMDFBNzAwMDExQzE3NDk4QkZBNjY4MDRCNUNCQURGRjJDMURFNDc5RTUKKzoxMDFBODAwMENGNzc1OEZDRjBBQjE1QTUyQkQ3NDcwRjIxMzdEN0Y4RTgKKzoxMDFBOTAwMDgzMUQ0MUZFMkIwNUZDRjVGMkZEQzZGNUYwMEY2REFCODUKKzoxMDFBQTAwMDE1RkYyOUQ0OEIwNEU5NTUzM0VCMTdFOTRCOTA1RkI4NDgKKzoxMDFBQjAwMEI5MjBBNEVFNTBCRTc4MkNFMjZBRTE1RTNDMTY3RTg2MjgKKzoxMDFBQzAwMEY0NkFBMTczODhGQzkyMENFNDI4MDNCRjE5RjE3MDFCMUYKKzoxMDFBRDAwMDhBQ0Y1RjBBRTRCQkE0OUIwQkE0OUU2Rjk5RTkwQUMwNUUKKzoxMDFBRTAwMDZFQ0U1MDBEMUM4Nzg3RUVGNzY1ODE4QzI3QkFFMzIyRjYKKzoxMDFBRjAwMEVGRDdERjczODBEOTMzNTQ0OUI3NDQ0M0ZGREJEMEI3MDYKKzoxMDFCMDAwMEM0Qjg0ODA3RUU4MzBBRjNDM0U1QkNDMzM2M0JFQTM3RTMKKzoxMDFCMTAwMDgxQzM5N0I5QkUxQjc4Mzg2MkJFQkMzNzg4MTAyMzY5NzEKKzoxMDFCMjAwMEJDMkI2MTUyNTNCMDFGRjk3NUExM0M2Rjc4QjY4QzVCMkEKKzoxMDFCMzAwMEVBMzI0QzdGQkYzRTk0MTk3OUI1M0VDNDcxNDM2NjM4OTIKKzoxMDFCNDAwMERGOTdGNEI2N0ZDRTdFMkJEMDk5NjNDN0JENDY2RjM3NDMKKzoxMDFCNTAwMDY1ODdBNDRGNzU1RkZGNTcxQ0ZDNkI2RkU3NUZGODFEMkYKKzoxMDFCNjAwMDVBRUY1NzlGRjBGQkI0OEREQUZCQzBEN0RBQjVGNzVEQkIKKzoxMDFCNzAwMEREOEU0OEY0MDc4QTNGMkFDMkJDNEQ1QTNCNTAyNzkwNUQKKzoxMDFCODAwMEY1NjJCREQ1RjM1RkJEMUUxMDk0MDc4RjJFMUMzQTBGNzIKKzoxMDFCOTAwMDhFNzE0NzA0RDcwOTFDRjE0M0Q1NTU4MkVCMDRBOTY5MUUKKzoxMDFCQTAwMEIyNEU4MDE2NzU4MjU0OTNBQzEzMDA0NjlEMDAyREVBMDgKKzoxMDFCQjAwMDA0RTg0NzlEMDAzMEVBMDQ4MDUxMjcwMDhDM0EwMTVBMUUKKzoxMDFCQzAwMEQ0MDlEMEZGQzU3Q0Y5NUUyNjQwNDIyQ0VCOTcxMTZDRkUKKzoxMDFCRDAwMERGRUY2QjU2QkQ4OENGRUYzQjJDRUZBMUVFNkI1NEY4RDcKKzoxMDFCRTAwMDlERDY0NUZBM0VGQ0RDMzVFRjc1MEU2QUVGNzU3Q0RCNjEKKzoxMDFCRjAwMEY4NUVBRkFFNEQ3NTgyNTU3NUE2QkU2M0E4RUJENEI1NDEKKzoxMDFDMDAwMDJBQ0UzNUIwMkZGNUYzRjlGQjFCM0I3M0RFMkQ0NTdGNTQKKzoxMDFDMTAwMEIzQzk2OTcwODA0Rjk3RTI1MEFGQUFFQzZDRTZGQTUzRjMKKzoxMDFDMjAwMDQxRkM2MTMzRjNCNzQ1MTFBODk3REU2NTkxNzk2RThENUMKKzoxMDFDMzAwMDRBQkQ1M0Y4M0U5NEUzRTAxQTRCMzdFNzFGNTU3QjE1MzYKKzoxMDFDNDAwMDdCNTlGMDdERUU0RDlGQjExRDU4NkI4QjZBMDI5RTM1MUUKKzoxMDFDNTAwMDNFOUJCRDZDODhGNzFGN0MyRkVDMTA1N0VGOUI5N0M5RkMKKzoxMDFDNjAwMDI5QTIyNkEyODhFRjlCOTdFMTlFOTk1QUExN0U2NUU0NUUKKzoxMDFDNzAwMEZCNjM0QTRDODc0MzFFRjFBRTJBMDM2NkREMkVGNTNFMTgKKzoxMDFDODAwMEU0M0Q1NTY1NjdFQkZBNDQ3MUVEM0QzNDJBMDNFMDdGOEUKKzoxMDFDOTAwMEU4RkRCM0JCMzAzMkY2NEMzODBDODU5ODhDQjhBOUY4MDcKKzoxMDFDQTAwMEYxQjJGRDZERjRCREZFQUQxNjhFM0I1NkU2QkI5NzQzMUIKKzoxMDFDQjAwMDhFOEU5OTVDNUMyNzM5NzZEOEM2RjlEMUM3REJDNjBGMDIKKzoxMDFDQzAwMEFBOTM3Q0VFNzI1NzE3RjJGREZDNjhBRTVCQUMzMjI5MkEKKzoxMDFDRDAwMEVDOTdGMzhCQzdDNUYzQkI4MUUzMjZGNjNGMURBRTkyQUQKKzoxMDFDRTAwMDVBQ0M1QjM1QzlDMUY1QTk0MjhCQjg5RkY3RDFERTY5RTMKKzoxMDFDRjAwMDUxQ0JGQTU0Qjg1NkYxMUEwODVFMkM5QzY2RThDRjIyRjQKKzoxMDFEMDAwMDIyMUJDQjhCMjk2MjAzREU1MzJEMTJGMjdEODMyRTM3RUIKKzoxMDFEMTAwMEFCQjYyOTFDMTc3MEExMjAwRUY3OTI5MkJFOEIzQUZGMkEKKzoxMDFEMjAwMEVEMzJERTJGMkNCNUM4RjgzNUQxMjBFRkIzMTMzN0M5MEIKKzoxMDFEMzAwMEY3MkQzRjEyNkUzM0ZDRUQ3MkYyOEI2OEM5NEZGRUFFODkKKzoxMDFENDAwMDg3RkFEREUxQTM5MzY0N0NFRTg4QzdGRThCNEY5OEY4OTkKKzoxMDFENTAwMEJENkY2MUZDRjdEM0RERUNBRjBCRjgxRDgzRTJCRjQ3MkQKKzoxMDFENjAwMEJENzJDM0Y1RjUyN0Y0MURDMzMxOTNCNDJGNDQ0N0NFOUMKKzoxMDFENzAwMDhCQkEyMDk3NUM5RjcxNzM3QkEyQkU5Q0RCMTkzM0E1NDUKKzoxMDFEODAwMDlEQkVGQTJFOTE3ODY0MDdGRUUxN0RFRjIzNUY0QzhDQjcKKzoxMDFEOTAwMDhGNzRDMkRFRTk3QTdGQ0RGQkM0MzBEOUVBRUYxM0M3NzYKKzoxMDFEQTAwMDUwMkI4MkRFMjc2RTcxMzk3OEZGNDRDM0M5QTkwRUQwNEIKKzoxMDFEQjAwMEUzQUYxMTRFRDA0MzdGQTdCODY1NjZDOTJFRjBDOTE1QjEKKzoxMDFEQzAwMDI1M0NGODJFRUU1MUI2MTI1RDhCNzAxMDA1NzU2RTlGOTYKKzoxMDFERDAwMDRCNDVEREZBQjA2MkU3NzdEMUQ3RDhDOTZEMEZFMzFENjcKKzoxMDFERTAwMDRGNURBQTYyNTcxQ0E4ODc2RjJEOEMyM0JDOEI1MjkyMjMKKzoxMDFERjAwMDE5RUZCQTc2NTkyRjY1MEFDNUExOUVBRUU5ODNDQkRERUUKKzoxMDFFMDAwMDU2Mzg2MkEwN0Y4RUE2MTdCRDM0NUZDQUM5MkQ1RUM4NDIKKzoxMDFFMTAwMERCQjdBOEEzM0U4N0Y5MUU2MTczMzY2QkY5MUFGODNFNEIKKzoxMDFFMjAwMEU3ODYzMTVDNEZENUU1QTZCRjI1QkUwOTcyRjM0NkExMTIKKzoxMDFFMzAwMEY0MzNBNUE1RUY5ODEwMDc3NEU1QkE4RkUyRkMwQkNCM0QKKzoxMDFFNDAwMDNFN0IzODhFQ0YzNzc0MUQ4QkVDMjhERjRCODZENkIxQTYKKzoxMDFFNTAwMDc0QkJCQzVCQUI4M0MzN0UxQUI1M0FBQjUxQUJCMzFBNTAKKzoxMDFFNjAwMEI1M0FBQjUxQUJCMzFBQjUzQUFCNTFBQkIzMUFCNTNBQkQKKzoxMDFFNzAwMEFCNTFBQkIzMUFCNTNBQUI5MUVCNzcyQkI4N0RCQjdFQzgKKzoxMDFFODAwMDM1QjdEREY1MUUxRTBGQjJGRkVGNURDN0ZFODdENjQxRTkKKzoxMDFFOTAwMDNGQzJCQ0QwM0FBOEIwM0FBMkQ5OEY5MjdFQ0JGQTczOTcKKzoxMDFFQTAwMDQ4RERCMzc4Rjg5MjBENDRCRkZDMDZCMzEzNUQ3QTFEOEMKKzoxMDFFQjAwMDE0RUY5N0VGOEI2MDdCNzBCMTcwQzhGQUE3NEVCNzA4MkMKKzoxMDFFQzAwMEFFOTdGNjBCREIxNEQwM0YyRjYzOUNEMTQwRTM3RkQ1NTgKKzoxMDFFRDAwMEY4QTBENzFGQTExRjM4MUZGNDAzMkRGNEMzOTgzNkEwMTQKKzoxMDFFRTAwMDFGQ0Y5ODQ5ODVCM0E1QkZGN0IwQkZCNzMxNUZEN0FGNTQKKzoxMDFFRjAwMDIxRkI0MUYwNTI2MTFGNjQzRjJFODZEODBGNEEzQ0VFMTEKKzoxMDFGMDAwMDA2MUVDQjNBRTVCQjI2RkRGRDY2MUUzNTVGNEUxOUMyQTcKKzoxMDFGMTAwMDlFRjhBNDNEMTkxM0U2REI4N0VGOENBOTBERTNGN0MxMEEKKzoxMDFGMjAwMEM3QjRGNzU4QzczNkNBNzc3MTY1QTI4NEJGM0I4NDVERDIKKzoxMDFGMzAwMDg5MDIzRjk2MEVFRjdCRkY2OTlBQkY3NDczMDRDNzJEMjkKKzoxMDFGNDAwMEVCNDcyRTlCRjZCRkIxMkI5RjE1MEFBNkRCNkZFQUZENzAKKzoxMDFGNTAwMDk1MUYxMzJFMDU2MTUyRkUwQUNDMjIwM0Y3MzVDMjEwREQKKzoxMDFGNjAwMEM2N0E1MEE4NkU1MTcwM0ZCQUVBNUUzMTE5N0MyRUIwMjUKKzoxMDFGNzAwMDk0RUMwMDlFRjFEQUZEQjY4OEQ1RUFBREM2RUU4QTNENTYKKzoxMDFGODAwMDA0OUY4QzRCNzRFMjVFNkI3NEMyMjE4MUY3NEY4NTc1QTAKKzoxMDFGOTAwMEM1OTlCMDhCRkUzMUVFMDk0NTM5NzhCRkJDNTVDMUZBMDEKKzoxMDFGQTAwMEYwNEM3OUZFM0I4QUMzOUIyMDU3ODFDM0UzNzNDMEVGOUIKKzoxMDFGQjAwMDc5MTY0NzFCRUEwMENFQTI4NEE1QzhGM0U3NDUzQjcyMTkKKzoxMDFGQzAwMDUwMDc3MDc2OEQ5MjcwQkNBMzRENzEyMjk0NEQ1ODVBNzMKKzoxMDFGRDAwMEMwRUZDRkFDNUIzRkI2RTJERDlBMjJBMkU5NUM5NjYxMkUKKzoxMDFGRTAwMEVFMUM3Q0E3QTZGODUzOTkzNzhCM0VGNjYzMzcxN0M5Q0EKKzoxMDFGRjAwMEZDNkJDNDZCQzI4RjdCQUJCRTU5OTE3QzdGMjYzMjFEQkMKKzoxMDIwMDAwMDM5MThBN0I4RjJCQjQ1MjQxRjdGRkM5RUVCMTZBQzRGRDYKKzoxMDIwMTAwMEQ0RjA4Q0M3MkRBMjBBQUU3NkRCRDA5RUQwRUVGM0JBRjgKKzoxMDIwMjAwMDBDRUU1MkI0NDU1MTFFMjNGNzFCQkNEOTY4REYzNEY4QkYKKzoxMDIwMzAwMDdFOEM3RTkyRTcyMkVDNTdGNEQ4RTQ4OTE5MDQyNzVBNjMKKzoxMDIwNDAwMDdDNkMyNzNCNUNBRTVCQjFGRkFCMzM1REM1MTgwRkFENUQKKzoxMDIwNTAwMDlGODNCN0M4RjMwOTlGREIzMDJGRjQxRDk2Q0VDRkE1MjEKKzoxMDIwNjAwMDQ1NTJFRUNCOEFBNEZEOThCRTU2REVDNzg2RjJCREFDQzMKKzoxMDIwNzAwMEM4QTBEOUI3QkY4RjM3RTE1QjhBRUZFOUY4OEJBRDhCOEEKKzoxMDIwODAwMEIzODEwRkUxN0IyRkYwMjQ3QzE3NjI1QzQ0QzQ3MEJERTgKKzoxMDIwOTAwMEUzRkE3MkU2RTFFRjk1MTU0OUY5MjI3QjU2RjVCMUI0MDIKKzoxMDIwQTAwMDY3RENBNjFCQkRDMzEwM0Y4RUZBODU3NzE4RjAxREQ1REYKKzoxMDIwQjAwMEQ4NjdDM0JGQzM3OEQ2RDM2NzgzN0Y3RkY2QzEzRTFCODMKKzoxMDIwQzAwMEZBOUY3NUM5NzdEMkExRkIzNzE2QzlGNzEzRTlEM0ZCN0QKKzoxMDIwRDAwMDc4RkQ1OEZBNTYzN0M3RTk3REMzMTA0N0E1OTc3RkJDRUUKKzoxMDIwRTAwMDVFREVCQjY0QjA3RjE5QUJGOTk3QjFCRjQ4NjlFRjIxRTEKKzoxMDIwRjAwMDc5MUJGQjY0MzRERjZGOEI4MjU4MUVBRkI0NEEzREFENTEKKzoxMDIxMDAwMEZDNDVEOUExMzY2QUM3NkYyNzdDODNFMkFGMDk1RUMyNUUKKzoxMDIxMTAwMDdCNTA1QzY0RUM5N0VGMkQwOTA2OURGNjlBMTg4NkNDRUYKKzoxMDIxMjAwMDIyQkVBQTExRjJCREU1MjhDRDZFMjA2RTJCMjVCQjUwMzQKKzoxMDIxMzAwMDUzN0VGNDMyQkYwM0MwN0FFQzhGM0I1QkM4NUZCQjQ5NzAKKzoxMDIxNDAwMEMyRTRBRTkxOEYyRTlGQkZBNjhCRjNDM0VENTdGQkI1QjQKKzoxMDIxNTAwMDdDQjM3NTNERjI2NzhBREYwNkY1NTc5NjFERTk4MkJGQUQKKzoxMDIxNjAwMEE5REEzQkI4QkY2NkM1Njc5Q0M3NTJGQzM2QThGRkRFM0MKKzoxMDIxNzAwMDFGN0ZDMEVGNkNFQURBMDdGNzEzN0Y5RjAyOUY3NUZFOUYKKzoxMDIxODAwMDFFMzNGOTI2MjBERjNCNTYxM0U2OTRGRjdFQzBCNzEyQkMKKzoxMDIxOTAwMEZBREU1NDFEQzFFRjY3NzdGRDNBOEZFNTQ2RTczN0FEQUMKKzoxMDIxQTAwMDZGRkE3NkYyQjE5NkU3N0JGMjQ0MDZGNEUxOUJEQTVFRDEKKzoxMDIxQjAwMEQ4QTdCNDQxRjZDOUMzNzVCRUQ5OTE2Qzc3RUFCNEZDMEYKKzoxMDIxQzAwMEFBQjZDQ0NFN0UzRUIxRDZDQUY2QUI1MDBENzMwMkFFRTcKKzoxMDIxRDAwMDM1NEEzQjIzOEE1NUNENEVGOTU4RkY0RkRFM0U4Q0VCRjYKKzoxMDIxRTAwMDc5N0MwMEMwMzE5M0Y4REQ3MURDNUEwOUY3OERCMEIwMEQKKzoxMDIxRjAwMDdEMjgzNDk0NTRFRkExRjZBODYxMDVEQjgxMDRCQ0I4QjYKKzoxMDIyMDAwMDI0QkUzRjAzRkJBMDQyN0Y2NTVEQjVDRUVDNTNFNEZERTkKKzoxMDIyMTAwMEJFMjMwN0Y5QUU3RURGRDRCMEQxREI3QTEwRjlCMkUyOEIKKzoxMDIyMjAwMDdENzIxOUVBOEE3NzQ2RjBGRDQxMDBGNTQ2M0E0RkMzQzAKKzoxMDIyMzAwMDMwNjk0NzFCMTZBNEIzMUYwODg4OTJEMjk1ODg0M0U2REQKKzoxMDIyNDAwMDg3NzFGREIxNjE5OEUzNTFEQzI3MzY1NDRDRTQzOEZBQ0MKKzoxMDIyNTAwMEQwN0Y0QkJGREIzN0Q3RUE0NDFDRDUzMEQ5QjEwNkVGNkUKKzoxMDIyNjAwMDU1MUE3RUUxRTBGMTU3MTRCOTlGRTc1MTQ5OUY4NkI5QUQKKzoxMDIyNzAwMEYyRkMwRDE1MzE5Q0Y3RTg3QzY4Njg3NDhEQzRGREQ0QzAKKzoxMDIyODAwMENDMzFFRUZGMDBERjQ3NjlGNzczMERDOUQ0NEZFRDEzNzIKKzoxMDIyOTAwMDRBQzk4MjFGNjE5RjQ5MTJERjE5MzMxREFDNzdDNzE2RTcKKzoxMDIyQTAwMDRDN0M3NEI3ODNERDg5MUZGNzQ0NzVCMzIzMDdFNUM1RkMKKzoxMDIyQjAwMEZGMDMzQzc1OUQ4QjEwMzcwMDAwMDAwMDAwMDAwMDAwRkMKKzowODIyQzAwMDA1MDIwRDAwMDAwMDAwMDAwMgorOjAwMDAwMDAxRkYKZGlmZiAtLWdpdCBhL2ZzLzlwL2ZpZC5jIGIvZnMvOXAvZmlkLmMKaW5kZXggMTRkOTQ0Mi4uMDhiMmViMSAxMDA2NDQKLS0tIGEvZnMvOXAvZmlkLmMKKysrIGIvZnMvOXAvZmlkLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCQkJaWYgKGFjY2VzcyA9PSBWOUZTX0FDQ0VTU19TSU5HTEUpCiAJCQkJcmV0dXJuIEVSUl9QVFIoLUVQRVJNKTsKIAotCQkJaWYgKHY5ZnNfZXh0ZW5kZWQodjlzZXMpKQorCQkJaWYgKHY5ZnNfcHJvdG9fZG90dSh2OXNlcykpCiAJCQkJdW5hbWUgPSBOVUxMOwogCQkJZWxzZQogCQkJCXVuYW1lID0gdjlzZXMtPnVuYW1lOwpkaWZmIC0tZ2l0IGEvZnMvOXAvdjlmcy5jIGIvZnMvOXAvdjlmcy5jCmluZGV4IDdkNmMyMTMuLjZjN2Y2YTIgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Y5ZnMuYworKysgYi9mcy85cC92OWZzLmMKQEAgLTI0MSw3ICsyNDEsNyBAQAogCWxpc3RfYWRkKCZ2OXNlcy0+c2xpc3QsICZ2OWZzX3Nlc3Npb25saXN0KTsKIAlzcGluX3VubG9jaygmdjlmc19zZXNzaW9ubGlzdF9sb2NrKTsKIAotCXY5c2VzLT5mbGFncyA9IFY5RlNfRVhURU5ERUQgfCBWOUZTX0FDQ0VTU19VU0VSOworCXY5c2VzLT5mbGFncyA9IFY5RlNfUFJPVE9fMjAwMFUgfCBWOUZTX0FDQ0VTU19VU0VSOwogCXN0cmNweSh2OXNlcy0+dW5hbWUsIFY5RlNfREVGVVNFUik7CiAJc3RyY3B5KHY5c2VzLT5hbmFtZSwgVjlGU19ERUZBTkFNRSk7CiAJdjlzZXMtPnVpZCA9IH4wOwpAQCAtMjYyLDEzICsyNjIsMTMgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQlpZiAoIXY5c2VzLT5jbG50LT5kb3R1KQotCQl2OXNlcy0+ZmxhZ3MgJj0gflY5RlNfRVhURU5ERUQ7CisJaWYgKCFwOV9pc19wcm90b19kb3R1KHY5c2VzLT5jbG50KSkKKwkJdjlzZXMtPmZsYWdzICY9IH5WOUZTX1BST1RPXzIwMDBVOwogCiAJdjlzZXMtPm1heGRhdGEgPSB2OXNlcy0+Y2xudC0+bXNpemUgLSBQOV9JT0hEUlNaOwogCiAJLyogZm9yIGxlZ2FjeSBtb2RlLCBmYWxsIGJhY2sgdG8gVjlGU19BQ0NFU1NfQU5ZICovCi0JaWYgKCF2OWZzX2V4dGVuZGVkKHY5c2VzKSAmJgorCWlmICghdjlmc19wcm90b19kb3R1KHY5c2VzKSAmJgogCQkoKHY5c2VzLT5mbGFncyZWOUZTX0FDQ0VTU19NQVNLKSA9PSBWOUZTX0FDQ0VTU19VU0VSKSkgewogCiAJCXY5c2VzLT5mbGFncyAmPSB+VjlGU19BQ0NFU1NfTUFTSzsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Y5ZnMuaCBiL2ZzLzlwL3Y5ZnMuaAppbmRleCAwMTlmNGNjLi43OTAwMGJmIDEwMDY0NAotLS0gYS9mcy85cC92OWZzLmgKKysrIGIvZnMvOXAvdjlmcy5oCkBAIC0yMyw3ICsyMyw4IEBACiAKIC8qKgogICogZW51bSBwOV9zZXNzaW9uX2ZsYWdzIC0gb3B0aW9uIGZsYWdzIGZvciBlYWNoIDlQIHNlc3Npb24KLSAqIEBWOUZTX0VYVEVOREVEOiB3aGV0aGVyIG9yIG5vdCB0byB1c2UgOVAyMDAwLnUgZXh0ZW5zaW9ucworICogQFY5RlNfUFJPVE9fMjAwMFU6IHdoZXRoZXIgb3Igbm90IHRvIHVzZSA5UDIwMDAudSBleHRlbnNpb25zCisgKiBAVjlGU19QUk9UT18yMDEwTDogd2hldGhlciBvciBub3QgdG8gdXNlIDlQMjAxMC5sIGV4dGVuc2lvbnMKICAqIEBWOUZTX0FDQ0VTU19TSU5HTEU6IG9ubHkgdGhlIG1vdW50aW5nIHVzZXIgY2FuIGFjY2VzcyB0aGUgaGllcmFyY2h5CiAgKiBAVjlGU19BQ0NFU1NfVVNFUjogYSBuZXcgYXR0YWNoIHdpbGwgYmUgaXNzdWVkIGZvciBldmVyeSB1c2VyIChkZWZhdWx0KQogICogQFY5RlNfQUNDRVNTX0FOWTogdXNlIGEgc2luZ2xlIGF0dGFjaCBmb3IgYWxsIHVzZXJzCkBAIC0zMiwxMSArMzMsMTIgQEAKICAqIFNlc3Npb24gZmxhZ3MgcmVmbGVjdCBvcHRpb25zIHNlbGVjdGVkIGJ5IHVzZXJzIGF0IG1vdW50IHRpbWUKICAqLwogZW51bSBwOV9zZXNzaW9uX2ZsYWdzIHsKLQlWOUZTX0VYVEVOREVECQk9IDB4MDEsCi0JVjlGU19BQ0NFU1NfU0lOR0xFCT0gMHgwMiwKLQlWOUZTX0FDQ0VTU19VU0VSCT0gMHgwNCwKLQlWOUZTX0FDQ0VTU19BTlkJCT0gMHgwNiwKLQlWOUZTX0FDQ0VTU19NQVNLCT0gMHgwNiwKKwlWOUZTX1BST1RPXzIwMDBVCT0gMHgwMSwKKwlWOUZTX1BST1RPXzIwMTBMCT0gMHgwMiwKKwlWOUZTX0FDQ0VTU19TSU5HTEUJPSAweDA0LAorCVY5RlNfQUNDRVNTX1VTRVIJPSAweDA4LAorCVY5RlNfQUNDRVNTX0FOWQkJPSAweDBDLAorCVY5RlNfQUNDRVNTX01BU0sJPSAweDBDLAogfTsKIAogLyogcG9zc2libGUgdmFsdWVzIG9mIC0+Y2FjaGUgKi8KQEAgLTEyMSw3ICsxMjMsMTIgQEAKIAlyZXR1cm4gKGlub2RlLT5pX3NiLT5zX2ZzX2luZm8pOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB2OWZzX2V4dGVuZGVkKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMpCitzdGF0aWMgaW5saW5lIGludCB2OWZzX3Byb3RvX2RvdHUoc3RydWN0IHY5ZnNfc2Vzc2lvbl9pbmZvICp2OXNlcykKIHsKLQlyZXR1cm4gdjlzZXMtPmZsYWdzICYgVjlGU19FWFRFTkRFRDsKKwlyZXR1cm4gdjlzZXMtPmZsYWdzICYgVjlGU19QUk9UT18yMDAwVTsKK30KKworc3RhdGljIGlubGluZSBpbnQgdjlmc19wcm90b19kb3RsKHN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMpCit7CisJcmV0dXJuIHY5c2VzLT5mbGFncyAmIFY5RlNfUFJPVE9fMjAxMEw7CiB9CmRpZmYgLS1naXQgYS9mcy85cC92ZnNfZGlyLmMgYi9mcy85cC92ZnNfZGlyLmMKaW5kZXggMTVjY2U1My4uNjU4MGFhNCAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2Rpci5jCisrKyBiL2ZzLzlwL3Zmc19kaXIuYwpAQCAtMTM1LDcgKzEzNSw3IEBACiAJCXdoaWxlIChyZGlyLT5oZWFkIDwgcmRpci0+dGFpbCkgewogCQkJZXJyID0gcDlzdGF0X3JlYWQocmRpci0+YnVmICsgcmRpci0+aGVhZCwKIAkJCQkJCWJ1ZmxlbiAtIHJkaXItPmhlYWQsICZzdCwKLQkJCQkJCWZpZC0+Y2xudC0+ZG90dSk7CisJCQkJCQlmaWQtPmNsbnQtPnByb3RvX3ZlcnNpb24pOwogCQkJaWYgKGVycikgewogCQkJCVA5X0RQUklOVEsoUDlfREVCVUdfVkZTLCAicmV0dXJuZWQgJWRcbiIsIGVycik7CiAJCQkJZXJyID0gLUVJTzsKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19maWxlLmMgYi9mcy85cC92ZnNfZmlsZS5jCmluZGV4IDc0YTA0NjEuLjM2MTIyNjggMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Zmc19maWxlLmMKKysrIGIvZnMvOXAvdmZzX2ZpbGUuYwpAQCAtNjEsNyArNjEsNyBAQAogCiAJUDlfRFBSSU5USyhQOV9ERUJVR19WRlMsICJpbm9kZTogJXAgZmlsZTogJXAgXG4iLCBpbm9kZSwgZmlsZSk7CiAJdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGlub2RlKTsKLQlvbW9kZSA9IHY5ZnNfdWZsYWdzMm9tb2RlKGZpbGUtPmZfZmxhZ3MsIHY5ZnNfZXh0ZW5kZWQodjlzZXMpKTsKKwlvbW9kZSA9IHY5ZnNfdWZsYWdzMm9tb2RlKGZpbGUtPmZfZmxhZ3MsIHY5ZnNfcHJvdG9fZG90dSh2OXNlcykpOwogCWZpZCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpZiAoIWZpZCkgewogCQlmaWQgPSB2OWZzX2ZpZF9jbG9uZShmaWxlLT5mX3BhdGguZGVudHJ5KTsKQEAgLTc3LDcgKzc3LDcgQEAKIAkJCWlfc2l6ZV93cml0ZShpbm9kZSwgMCk7CiAJCQlpbm9kZS0+aV9ibG9ja3MgPSAwOwogCQl9Ci0JCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSAmJiAoIXY5ZnNfZXh0ZW5kZWQodjlzZXMpKSkKKwkJaWYgKChmaWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpICYmICghdjlmc19wcm90b19kb3R1KHY5c2VzKSkpCiAJCQlnZW5lcmljX2ZpbGVfbGxzZWVrKGZpbGUsIDAsIFNFRUtfRU5EKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmMKaW5kZXggYTQwN2ZhMy4uNWZlNDVkNiAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2lub2RlLmMKKysrIGIvZnMvOXAvdmZzX2lub2RlLmMKQEAgLTYwLDcgKzYwLDcgQEAKIAlyZXMgPSBtb2RlICYgMDc3NzsKIAlpZiAoU19JU0RJUihtb2RlKSkKIAkJcmVzIHw9IFA5X0RNRElSOwotCWlmICh2OWZzX2V4dGVuZGVkKHY5c2VzKSkgeworCWlmICh2OWZzX3Byb3RvX2RvdHUodjlzZXMpKSB7CiAJCWlmIChTX0lTTE5LKG1vZGUpKQogCQkJcmVzIHw9IFA5X0RNU1lNTElOSzsKIAkJaWYgKHY5c2VzLT5ub2RldiA9PSAwKSB7CkBAIC0xMDIsMjEgKzEwMiwyMSBAQAogCiAJaWYgKChtb2RlICYgUDlfRE1ESVIpID09IFA5X0RNRElSKQogCQlyZXMgfD0gU19JRkRJUjsKLQllbHNlIGlmICgobW9kZSAmIFA5X0RNU1lNTElOSykgJiYgKHY5ZnNfZXh0ZW5kZWQodjlzZXMpKSkKKwllbHNlIGlmICgobW9kZSAmIFA5X0RNU1lNTElOSykgJiYgKHY5ZnNfcHJvdG9fZG90dSh2OXNlcykpKQogCQlyZXMgfD0gU19JRkxOSzsKLQllbHNlIGlmICgobW9kZSAmIFA5X0RNU09DS0VUKSAmJiAodjlmc19leHRlbmRlZCh2OXNlcykpCisJZWxzZSBpZiAoKG1vZGUgJiBQOV9ETVNPQ0tFVCkgJiYgKHY5ZnNfcHJvdG9fZG90dSh2OXNlcykpCiAJCSAmJiAodjlzZXMtPm5vZGV2ID09IDApKQogCQlyZXMgfD0gU19JRlNPQ0s7Ci0JZWxzZSBpZiAoKG1vZGUgJiBQOV9ETU5BTUVEUElQRSkgJiYgKHY5ZnNfZXh0ZW5kZWQodjlzZXMpKQorCWVsc2UgaWYgKChtb2RlICYgUDlfRE1OQU1FRFBJUEUpICYmICh2OWZzX3Byb3RvX2RvdHUodjlzZXMpKQogCQkgJiYgKHY5c2VzLT5ub2RldiA9PSAwKSkKIAkJcmVzIHw9IFNfSUZJRk87Ci0JZWxzZSBpZiAoKG1vZGUgJiBQOV9ETURFVklDRSkgJiYgKHY5ZnNfZXh0ZW5kZWQodjlzZXMpKQorCWVsc2UgaWYgKChtb2RlICYgUDlfRE1ERVZJQ0UpICYmICh2OWZzX3Byb3RvX2RvdHUodjlzZXMpKQogCQkgJiYgKHY5c2VzLT5ub2RldiA9PSAwKSkKIAkJcmVzIHw9IFNfSUZCTEs7CiAJZWxzZQogCQlyZXMgfD0gU19JRlJFRzsKIAotCWlmICh2OWZzX2V4dGVuZGVkKHY5c2VzKSkgeworCWlmICh2OWZzX3Byb3RvX2RvdHUodjlzZXMpKSB7CiAJCWlmICgobW9kZSAmIFA5X0RNU0VUVUlEKSA9PSBQOV9ETVNFVFVJRCkKIAkJCXJlcyB8PSBTX0lTVUlEOwogCkBAIC0yNjUsNyArMjY1LDcgQEAKIAljYXNlIFNfSUZCTEs6CiAJY2FzZSBTX0lGQ0hSOgogCWNhc2UgU19JRlNPQ0s6Ci0JCWlmICghdjlmc19leHRlbmRlZCh2OXNlcykpIHsKKwkJaWYgKCF2OWZzX3Byb3RvX2RvdHUodjlzZXMpKSB7CiAJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLAogCQkJCSAgICJzcGVjaWFsIGZpbGVzIHdpdGhvdXQgZXh0ZW5kZWQgbW9kZVxuIik7CiAJCQllcnIgPSAtRUlOVkFMOwpAQCAtMjc4LDcgKzI3OCw3IEBACiAJCWlub2RlLT5pX2ZvcCA9ICZ2OWZzX2ZpbGVfb3BlcmF0aW9uczsKIAkJYnJlYWs7CiAJY2FzZSBTX0lGTE5LOgotCQlpZiAoIXY5ZnNfZXh0ZW5kZWQodjlzZXMpKSB7CisJCWlmICghdjlmc19wcm90b19kb3R1KHY5c2VzKSkgewogCQkJUDlfRFBSSU5USyhQOV9ERUJVR19FUlJPUiwKIAkJCQkgICAiZXh0ZW5kZWQgbW9kZXMgdXNlZCB3L28gOVAyMDAwLnVcbiIpOwogCQkJZXJyID0gLUVJTlZBTDsKQEAgLTI4OCw3ICsyODgsNyBAQAogCQlicmVhazsKIAljYXNlIFNfSUZESVI6CiAJCWluY19ubGluayhpbm9kZSk7Ci0JCWlmICh2OWZzX2V4dGVuZGVkKHY5c2VzKSkKKwkJaWYgKHY5ZnNfcHJvdG9fZG90dSh2OXNlcykpCiAJCQlpbm9kZS0+aV9vcCA9ICZ2OWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zX2V4dDsKIAkJZWxzZQogCQkJaW5vZGUtPmlfb3AgPSAmdjlmc19kaXJfaW5vZGVfb3BlcmF0aW9uczsKQEAgLTU3NSw3ICs1NzUsOCBAQAogCQlmbGFncyA9IE9fUkRXUjsKIAogCWZpZCA9IHY5ZnNfY3JlYXRlKHY5c2VzLCBkaXIsIGRlbnRyeSwgTlVMTCwgcGVybSwKLQkJCQl2OWZzX3VmbGFnczJvbW9kZShmbGFncywgdjlmc19leHRlbmRlZCh2OXNlcykpKTsKKwkJCQl2OWZzX3VmbGFnczJvbW9kZShmbGFncywKKwkJCQkJCXY5ZnNfcHJvdG9fZG90dSh2OXNlcykpKTsKIAlpZiAoSVNfRVJSKGZpZCkpIHsKIAkJZXJyID0gUFRSX0VSUihmaWQpOwogCQlmaWQgPSBOVUxMOwpAQCAtODU4LDcgKzg1OSw3IEBACiAJaWYgKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkKIAkJd3N0YXQubGVuZ3RoID0gaWF0dHItPmlhX3NpemU7CiAKLQlpZiAodjlmc19leHRlbmRlZCh2OXNlcykpIHsKKwlpZiAodjlmc19wcm90b19kb3R1KHY5c2VzKSkgewogCQlpZiAoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9VSUQpCiAJCQl3c3RhdC5uX3VpZCA9IGlhdHRyLT5pYV91aWQ7CiAKQEAgLTg4Niw2ICs4ODcsOCBAQAogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJY2hhciBleHRbMzJdOworCWNoYXIgdGFnX25hbWVbMTRdOworCXVuc2lnbmVkIGludCBpX25saW5rOwogCXN0cnVjdCB2OWZzX3Nlc3Npb25faW5mbyAqdjlzZXMgPSBzYi0+c19mc19pbmZvOwogCiAJaW5vZGUtPmlfbmxpbmsgPSAxOwpAQCAtODk3LDExICs5MDAsMjYgQEAKIAlpbm9kZS0+aV91aWQgPSB2OXNlcy0+ZGZsdHVpZDsKIAlpbm9kZS0+aV9naWQgPSB2OXNlcy0+ZGZsdGdpZDsKIAotCWlmICh2OWZzX2V4dGVuZGVkKHY5c2VzKSkgeworCWlmICh2OWZzX3Byb3RvX2RvdHUodjlzZXMpKSB7CiAJCWlub2RlLT5pX3VpZCA9IHN0YXQtPm5fdWlkOwogCQlpbm9kZS0+aV9naWQgPSBzdGF0LT5uX2dpZDsKIAl9Ci0KKwlpZiAoKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHx8IChTX0lTRElSKGlub2RlLT5pX21vZGUpKSkgeworCQlpZiAodjlmc19wcm90b19kb3R1KHY5c2VzKSAmJiAoc3RhdC0+ZXh0ZW5zaW9uWzBdICE9ICdcMCcpKSB7CisJCQkvKgorCQkJICogSGFkbGluayBzdXBwb3J0IGdvdCBhZGRlZCBsYXRlciB0bworCQkJICogdG8gdGhlIC51IGV4dGVuc2lvbi4gU28gdGhlcmUgY2FuIGJlCisJCQkgKiBzZXJ2ZXIgb3V0IHRoZXJlIHRoYXQgZG9lc24ndCBzdXBwb3J0CisJCQkgKiB0aGlzIGV2ZW4gd2l0aCAudSBleHRlbnNpb24uIFNvIGNoZWNrCisJCQkgKiBmb3Igbm9uIE5VTEwgc3RhdC0+ZXh0ZW5zaW9uCisJCQkgKi8KKwkJCXN0cm5jcHkoZXh0LCBzdGF0LT5leHRlbnNpb24sIHNpemVvZihleHQpKTsKKwkJCS8qIEhBUkRMSU5LQ09VTlQgJXUgKi8KKwkJCXNzY2FuZihleHQsICIlMTNzICV1IiwgdGFnX25hbWUsICZpX25saW5rKTsKKwkJCWlmICghc3RybmNtcCh0YWdfbmFtZSwgIkhBUkRMSU5LQ09VTlQiLCAxMykpCisJCQkJaW5vZGUtPmlfbmxpbmsgPSBpX25saW5rOworCQl9CisJfQogCWlub2RlLT5pX21vZGUgPSBwOW1vZGUydW5peG1vZGUodjlzZXMsIHN0YXQtPm1vZGUpOwogCWlmICgoU19JU0JMSyhpbm9kZS0+aV9tb2RlKSkgfHwgKFNfSVNDSFIoaW5vZGUtPmlfbW9kZSkpKSB7CiAJCWNoYXIgdHlwZSA9IDA7CkBAIC05NzYsNyArOTk0LDcgQEAKIAlpZiAoSVNfRVJSKGZpZCkpCiAJCXJldHVybiBQVFJfRVJSKGZpZCk7CiAKLQlpZiAoIXY5ZnNfZXh0ZW5kZWQodjlzZXMpKQorCWlmICghdjlmc19wcm90b19kb3R1KHY5c2VzKSkKIAkJcmV0dXJuIC1FQkFERjsKIAogCXN0ID0gcDlfY2xpZW50X3N0YXQoZmlkKTsKQEAgLTEwNjYsNyArMTA4NCw3IEBACiAJc3RydWN0IHA5X2ZpZCAqZmlkOwogCiAJdjlzZXMgPSB2OWZzX2lub2RlMnY5c2VzKGRpcik7Ci0JaWYgKCF2OWZzX2V4dGVuZGVkKHY5c2VzKSkgeworCWlmICghdjlmc19wcm90b19kb3R1KHY5c2VzKSkgewogCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAibm90IGV4dGVuZGVkXG4iKTsKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CmRpZmYgLS1naXQgYS9mcy9LY29uZmlnIGIvZnMvS2NvbmZpZwppbmRleCA2NGQ0NGVmLi43NDA1ZjA3IDEwMDY0NAotLS0gYS9mcy9LY29uZmlnCisrKyBiL2ZzL0tjb25maWcKQEAgLTE3Nyw2ICsxNzcsNyBAQAogc291cmNlICJmcy9qZmZzMi9LY29uZmlnIgogIyBVQklGUyBGaWxlIHN5c3RlbSBjb25maWd1cmF0aW9uCiBzb3VyY2UgImZzL3ViaWZzL0tjb25maWciCitzb3VyY2UgImZzL2xvZ2ZzL0tjb25maWciCiBzb3VyY2UgImZzL2NyYW1mcy9LY29uZmlnIgogc291cmNlICJmcy9zcXVhc2hmcy9LY29uZmlnIgogc291cmNlICJmcy9mcmVldnhmcy9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZnMvTWFrZWZpbGUgYi9mcy9NYWtlZmlsZQppbmRleCBhZjZkMDQ3Li5jMzYzM2FhIDEwMDY0NAotLS0gYS9mcy9NYWtlZmlsZQorKysgYi9mcy9NYWtlZmlsZQpAQCAtOTksNiArOTksNyBAQAogb2JqLSQoQ09ORklHX1VGU19GUykJCSs9IHVmcy8KIG9iai0kKENPTkZJR19FRlNfRlMpCQkrPSBlZnMvCiBvYmotJChDT05GSUdfSkZGUzJfRlMpCQkrPSBqZmZzMi8KK29iai0kKENPTkZJR19MT0dGUykJCSs9IGxvZ2ZzLwogb2JqLSQoQ09ORklHX1VCSUZTX0ZTKQkJKz0gdWJpZnMvCiBvYmotJChDT05GSUdfQUZGU19GUykJCSs9IGFmZnMvCiBvYmotJChDT05GSUdfUk9NRlNfRlMpCQkrPSByb21mcy8KZGlmZiAtLWdpdCBhL2ZzL2FkZnMvYWRmcy5oIGIvZnMvYWRmcy9hZGZzLmgKaW5kZXggOWNjMTg3Ny4uMmZmNjIyZiAxMDA2NDQKLS0tIGEvZnMvYWRmcy9hZGZzLmgKKysrIGIvZnMvYWRmcy9hZGZzLmgKQEAgLTEyMSw3ICsxMjEsNyBAQAogCiAvKiBJbm9kZSBzdHVmZiAqLwogc3RydWN0IGlub2RlICphZGZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IG9iamVjdF9pbmZvICpvYmopOwotaW50IGFkZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSxpbnQgdW51c2VkKTsKK2ludCBhZGZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKIGludCBhZGZzX25vdGlmeV9jaGFuZ2Uoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpOwogCiAvKiBtYXAuYyAqLwpkaWZmIC0tZ2l0IGEvZnMvYWRmcy9pbm9kZS5jIGIvZnMvYWRmcy9pbm9kZS5jCmluZGV4IDNmNTdjZTQuLjBmNWUzMDkgMTAwNjQ0Ci0tLSBhL2ZzL2FkZnMvaW5vZGUuYworKysgYi9mcy9hZGZzL2lub2RlLmMKQEAgLTksNiArOSw3IEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSAiYWRmcy5oIgogCiAvKgpAQCAtMzYwLDcgKzM2MSw3IEBACiAgKiBUaGUgYWRmcy1zcGVjaWZpYyBpbm9kZSBkYXRhIGhhcyBhbHJlYWR5IGJlZW4gdXBkYXRlZCBieQogICogYWRmc19ub3RpZnlfY2hhbmdlKCkKICAqLwotaW50IGFkZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpCitpbnQgYWRmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CiAJc3RydWN0IG9iamVjdF9pbmZvIG9iajsKQEAgLTM3NSw3ICszNzYsNyBAQAogCW9iai5hdHRyCT0gQURGU19JKGlub2RlKS0+YXR0cjsKIAlvYmouc2l6ZQk9IGlub2RlLT5pX3NpemU7CiAKLQlyZXQgPSBhZGZzX2Rpcl91cGRhdGUoc2IsICZvYmosIHdhaXQpOworCXJldCA9IGFkZnNfZGlyX3VwZGF0ZShzYiwgJm9iaiwgd2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpOwogCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZnMvYWZmcy9hZmZzLmggYi9mcy9hZmZzL2FmZnMuaAppbmRleCAwZTQwY2FhLi44NjFkYWU2IDEwMDY0NAotLS0gYS9mcy9hZmZzL2FmZnMuaAorKysgYi9mcy9hZmZzL2FmZnMuaApAQCAtMTc1LDcgKzE3NSw4IEBACiBleHRlcm4gdm9pZAkJCSBhZmZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogZXh0ZXJuIHN0cnVjdCBpbm9kZQkJKmFmZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCQl1bnNpZ25lZCBsb25nIGlubyk7Ci1leHRlcm4gaW50CQkJIGFmZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50KTsKK2V4dGVybiBpbnQJCQkgYWZmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CiBleHRlcm4gaW50CQkJIGFmZnNfYWRkX2VudHJ5KHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHMzMiB0eXBlKTsKIAogLyogZmlsZS5jICovCmRpZmYgLS1naXQgYS9mcy9hZmZzL2JpdG1hcC5jIGIvZnMvYWZmcy9iaXRtYXAuYwppbmRleCBkYzVlZjE0Li44MzA2ZDUzIDEwMDY0NAotLS0gYS9mcy9hZmZzL2JpdG1hcC5jCisrKyBiL2ZzL2FmZnMvYml0bWFwLmMKQEAgLTEyOCw3ICsxMjgsNyBAQAogLyoKICAqIEFsbG9jYXRlIGEgYmxvY2sgaW4gdGhlIGdpdmVuIGFsbG9jYXRpb24gem9uZS4KICAqIFNpbmNlIHdlIGhhdmUgdG8gYnl0ZS1zd2FwIHRoZSBiaXRtYXAgb24gbGl0dGxlLWVuZGlhbgotICogbWFjaGluZXMsIHRoaXMgaXMgcmF0aGVyIGV4cGVuc2l2ZS4gVGhlcmVmb3Igd2Ugd2lsbAorICogbWFjaGluZXMsIHRoaXMgaXMgcmF0aGVyIGV4cGVuc2l2ZS4gVGhlcmVmb3JlIHdlIHdpbGwKICAqIHByZWFsbG9jYXRlIHVwIHRvIDE2IGJsb2NrcyBmcm9tIHRoZSBzYW1lIHdvcmQsIGlmCiAgKiBwb3NzaWJsZS4gV2UgYXJlIG5vdCBkb2luZyBwcmVhbGxvY2F0aW9ucyBpbiB0aGUKICAqIGhlYWRlciB6b25lLCB0aG91Z2guCmRpZmYgLS1naXQgYS9mcy9hZmZzL2lub2RlLmMgYi9mcy9hZmZzL2lub2RlLmMKaW5kZXggM2M0ZWM3ZC4uYzk3NDRkNyAxMDA2NDQKLS0tIGEvZnMvYWZmcy9pbm9kZS5jCisrKyBiL2ZzL2FmZnMvaW5vZGUuYwpAQCAtMTY2LDcgKzE2Niw3IEBACiB9CiAKIGludAotYWZmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdW51c2VkKQorYWZmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sJKnNiID0gaW5vZGUtPmlfc2I7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkCSpiaDsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9pbnRlcm5hbC5oIGIvZnMvYWZzL2ludGVybmFsLmgKaW5kZXggNmVjZTJhMS4uYzU0ZGFkNCAxMDA2NDQKLS0tIGEvZnMvYWZzL2ludGVybmFsLmgKKysrIGIvZnMvYWZzL2ludGVybmFsLmgKQEAgLTczMyw3ICs3MzMsNiBAQAogCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKmZzZGF0YSk7CiBleHRlcm4gaW50IGFmc193cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopOwogZXh0ZXJuIGludCBhZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7Ci1leHRlcm4gaW50IGFmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKIGV4dGVybiB2b2lkIGFmc19wYWdlc193cml0dGVuX2JhY2soc3RydWN0IGFmc192bm9kZSAqLCBzdHJ1Y3QgYWZzX2NhbGwgKik7CiBleHRlcm4gc3NpemVfdCBhZnNfZmlsZV93cml0ZShzdHJ1Y3Qga2lvY2IgKiwgY29uc3Qgc3RydWN0IGlvdmVjICosCiAJCQkgICAgICB1bnNpZ25lZCBsb25nLCBsb2ZmX3QpOwpkaWZmIC0tZ2l0IGEvZnMvYWZzL3N1cGVyLmMgYi9mcy9hZnMvc3VwZXIuYwppbmRleCBlMWVhMWMyLi4xNGY2NDMxIDEwMDY0NAotLS0gYS9mcy9hZnMvc3VwZXIuYworKysgYi9mcy9hZnMvc3VwZXIuYwpAQCAtNDgsNyArNDgsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGFmc19zdXBlcl9vcHMgPSB7CiAJLnN0YXRmcwkJPSBhZnNfc3RhdGZzLAogCS5hbGxvY19pbm9kZQk9IGFmc19hbGxvY19pbm9kZSwKLQkud3JpdGVfaW5vZGUJPSBhZnNfd3JpdGVfaW5vZGUsCiAJLmRlc3Ryb3lfaW5vZGUJPSBhZnNfZGVzdHJveV9pbm9kZSwKIAkuY2xlYXJfaW5vZGUJPSBhZnNfY2xlYXJfaW5vZGUsCiAJLnB1dF9zdXBlcgk9IGFmc19wdXRfc3VwZXIsCmRpZmYgLS1naXQgYS9mcy9hZnMvd3JpdGUuYyBiL2ZzL2Fmcy93cml0ZS5jCmluZGV4IDVlMTVhMjEuLjNiZWQ1NGEgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy93cml0ZS5jCisrKyBiL2ZzL2Fmcy93cml0ZS5jCkBAIC01ODUsMjcgKzU4NSw2IEBACiB9CiAKIC8qCi0gKiB3cml0ZSBhbiBpbm9kZSBiYWNrCi0gKi8KLWludCBhZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHN5bmMpCi17Ci0Jc3RydWN0IGFmc192bm9kZSAqdm5vZGUgPSBBRlNfRlNfSShpbm9kZSk7Ci0JaW50IHJldDsKLQotCV9lbnRlcigieyV4OiV1fSwiLCB2bm9kZS0+ZmlkLnZpZCwgdm5vZGUtPmZpZC52bm9kZSk7Ci0KLQlyZXQgPSAwOwotCWlmIChzeW5jKSB7Ci0JCXJldCA9IGZpbGVtYXBfZmRhdGF3YWl0KGlub2RlLT5pX21hcHBpbmcpOwotCQlpZiAocmV0IDwgMCkKLQkJCV9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgSV9ESVJUWV9EQVRBU1lOQyk7Ci0JfQotCi0JX2xlYXZlKCIgPSAlZCIsIHJldCk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKICAqIGNvbXBsZXRpb24gb2Ygd3JpdGUgdG8gc2VydmVyCiAgKi8KIHZvaWQgYWZzX3BhZ2VzX3dyaXR0ZW5fYmFjayhzdHJ1Y3QgYWZzX3Zub2RlICp2bm9kZSwgc3RydWN0IGFmc19jYWxsICpjYWxsKQpkaWZmIC0tZ2l0IGEvZnMvYW5vbl9pbm9kZXMuYyBiL2ZzL2Fub25faW5vZGVzLmMKaW5kZXggOWYwYmYxMy4uMmRlMDA5NSAxMDA2NDQKLS0tIGEvZnMvYW5vbl9pbm9kZXMuYworKysgYi9mcy9hbm9uX2lub2Rlcy5jCkBAIC0yMDksNiArMjA5LDcgQEAKIAlpbm9kZS0+aV9tb2RlID0gU19JUlVTUiB8IFNfSVdVU1I7CiAJaW5vZGUtPmlfdWlkID0gY3VycmVudF9mc3VpZCgpOwogCWlub2RlLT5pX2dpZCA9IGN1cnJlbnRfZnNnaWQoKTsKKwlpbm9kZS0+aV9mbGFncyB8PSBTX1BSSVZBVEU7CiAJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCXJldHVybiBpbm9kZTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2F0dHIuYyBiL2ZzL2F0dHIuYwppbmRleCA5NmQzOTRiLi4wODE1ZTkzIDEwMDY0NAotLS0gYS9mcy9hdHRyLmMKKysrIGIvZnMvYXR0ci5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgvZmNudGwuaD4KLSNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAKIC8qIFRha2VuIG92ZXIgZnJvbSB0aGUgb2xkIGNvZGUuLi4gKi8KQEAgLTgyLDcgKzgxLDcgQEAKIAlpZiAoaW5vZGUtPmlfc2l6ZSA8IG9mZnNldCkgewogCQl1bnNpZ25lZCBsb25nIGxpbWl0OwogCi0JCWxpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9GU0laRV0ucmxpbV9jdXI7CisJCWxpbWl0ID0gcmxpbWl0KFJMSU1JVF9GU0laRSk7CiAJCWlmIChsaW1pdCAhPSBSTElNX0lORklOSVRZICYmIG9mZnNldCA+IGxpbWl0KQogCQkJZ290byBvdXRfc2lnOwogCQlpZiAob2Zmc2V0ID4gaW5vZGUtPmlfc2ItPnNfbWF4Ynl0ZXMpCkBAIC0yMTIsMTQgKzIxMSw4IEBACiAJCWVycm9yID0gaW5vZGUtPmlfb3AtPnNldGF0dHIoZGVudHJ5LCBhdHRyKTsKIAl9IGVsc2UgewogCQllcnJvciA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgYXR0cik7Ci0JCWlmICghZXJyb3IpIHsKLQkJCWlmICgoaWFfdmFsaWQgJiBBVFRSX1VJRCAmJiBhdHRyLT5pYV91aWQgIT0gaW5vZGUtPmlfdWlkKSB8fAotCQkJICAgIChpYV92YWxpZCAmIEFUVFJfR0lEICYmIGF0dHItPmlhX2dpZCAhPSBpbm9kZS0+aV9naWQpKQotCQkJCWVycm9yID0gdmZzX2RxX3RyYW5zZmVyKGlub2RlLCBhdHRyKSA/Ci0JCQkJCS1FRFFVT1QgOiAwOwotCQkJaWYgKCFlcnJvcikKLQkJCQllcnJvciA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHIpOwotCQl9CisJCWlmICghZXJyb3IpCisJCQllcnJvciA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHIpOwogCX0KIAogCWlmIChpYV92YWxpZCAmIEFUVFJfU0laRSkKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaCBiL2ZzL2F1dG9mczQvYXV0b2ZzX2kuaAppbmRleCAwMTE4ZDY3Li4zZDI4M2FiIDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L2F1dG9mc19pLmgKKysrIGIvZnMvYXV0b2ZzNC9hdXRvZnNfaS5oCkBAIC02MCwxMSArNjAsNiBAQAogCQljdXJyZW50LT5waWQsIF9fZnVuY19fLCAjI2FyZ3MpOwlcCiB9IHdoaWxlICgwKQogCi1zdHJ1Y3QgcmVoYXNoX2VudHJ5IHsKLQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotfTsKLQogLyogVW5pZmllZCBpbmZvIHN0cnVjdHVyZS4gIFRoaXMgaXMgcG9pbnRlZCB0byBieSBib3RoIHRoZSBkZW50cnkgYW5kCiAgICBpbm9kZSBzdHJ1Y3R1cmVzLiAgRWFjaCBmaWxlIGluIHRoZSBmaWxlc3lzdGVtIGhhcyBhbiBpbnN0YW5jZSBvZiB0aGlzCiAgICBzdHJ1Y3R1cmUuICBJdCBob2xkcyBhIHJlZmVyZW5jZSB0byB0aGUgZGVudHJ5LCBzbyBkZW50cmllcyBhcmUgbmV2ZXIKQEAgLTgxLDcgKzc2LDYgQEAKIAogCXN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlOwogCWludCBhY3RpdmVfY291bnQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCByZWhhc2hfbGlzdDsKIAogCXN0cnVjdCBsaXN0X2hlYWQgZXhwaXJpbmc7CiAKQEAgLTEwNCw3ICs5OCw2IEBACiAjZGVmaW5lIEFVVE9GU19JTkZfRVhQSVJJTkcJKDE8PDApIC8qIGRlbnRyeSBpcyBpbiB0aGUgcHJvY2VzcyBvZiBleHBpcmluZyAqLwogI2RlZmluZSBBVVRPRlNfSU5GX01PVU5UUE9JTlQJKDE8PDEpIC8qIG1vdW50cG9pbnQgc3RhdHVzIGZvciBkaXJlY3QgZXhwaXJlICovCiAjZGVmaW5lIEFVVE9GU19JTkZfUEVORElORwkoMTw8MikgLyogZGVudHJ5IHBlbmRpbmcgbW91bnQgKi8KLSNkZWZpbmUgQVVUT0ZTX0lORl9SRUhBU0gJKDE8PDMpIC8qIGRlbnRyeSBpbiB0cmFuc2l0IHRvIC0+bG9va3VwKCkgKi8KIAogc3RydWN0IGF1dG9mc193YWl0X3F1ZXVlIHsKIAl3YWl0X3F1ZXVlX2hlYWRfdCBxdWV1ZTsKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvZGV2LWlvY3RsLmMgYi9mcy9hdXRvZnM0L2Rldi1pb2N0bC5jCmluZGV4IDAwYmY4ZmMuLmM4YTgwZGYgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvZGV2LWlvY3RsLmMKKysrIGIvZnMvYXV0b2ZzNC9kZXYtaW9jdGwuYwpAQCAtNTQ0LDEwICs1NDQsOSBAQAogCQkJZ290byBvdXQ7CiAJCWRldmlkID0gbmV3X2VuY29kZV9kZXYocGF0aC5tbnQtPm1udF9zYi0+c19kZXYpOwogCQllcnIgPSAwOwotCQlpZiAocGF0aC5kZW50cnktPmRfaW5vZGUgJiYKLQkJICAgIHBhdGgubW50LT5tbnRfcm9vdCA9PSBwYXRoLmRlbnRyeSkgeworCQlpZiAocGF0aC5tbnQtPm1udF9yb290ID09IHBhdGguZGVudHJ5KSB7CiAJCQllcnIgPSAxOwotCQkJbWFnaWMgPSBwYXRoLmRlbnRyeS0+ZF9pbm9kZS0+aV9zYi0+c19tYWdpYzsKKwkJCW1hZ2ljID0gcGF0aC5tbnQtPm1udF9zYi0+c19tYWdpYzsKIAkJfQogCX0gZWxzZSB7CiAJCWRldl90IGRldiA9IHNiaS0+c2ItPnNfZGV2OwpAQCAtNTYwLDEwICs1NTksOCBAQAogCiAJCWVyciA9IGhhdmVfc3VibW91bnRzKHBhdGguZGVudHJ5KTsKIAotCQlpZiAocGF0aC5tbnQtPm1udF9tb3VudHBvaW50ICE9IHBhdGgubW50LT5tbnRfcm9vdCkgewotCQkJaWYgKGZvbGxvd19kb3duKCZwYXRoKSkKLQkJCQltYWdpYyA9IHBhdGgubW50LT5tbnRfc2ItPnNfbWFnaWM7Ci0JCX0KKwkJaWYgKGZvbGxvd19kb3duKCZwYXRoKSkKKwkJCW1hZ2ljID0gcGF0aC5tbnQtPm1udF9zYi0+c19tYWdpYzsKIAl9CiAKIAlwYXJhbS0+aXNtb3VudHBvaW50Lm91dC5kZXZpZCA9IGRldmlkOwpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9leHBpcmUuYyBiL2ZzL2F1dG9mczQvZXhwaXJlLmMKaW5kZXggNzRiYzlhYS4uYTc5NmM5NCAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9leHBpcmUuYworKysgYi9mcy9hdXRvZnM0L2V4cGlyZS5jCkBAIC0yNzksNyArMjc5LDYgQEAKIAkJCXJvb3QtPmRfbW91bnRlZC0tOwogCQl9CiAJCWluby0+ZmxhZ3MgfD0gQVVUT0ZTX0lORl9FWFBJUklORzsKLQkJYXV0b2ZzNF9hZGRfZXhwaXJpbmcocm9vdCk7CiAJCWluaXRfY29tcGxldGlvbigmaW5vLT5leHBpcmVfY29tcGxldGUpOwogCQlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKIAkJcmV0dXJuIHJvb3Q7CkBAIC00MDcsNyArNDA2LDYgQEAKIAkJZXhwaXJlZCwgKGludClleHBpcmVkLT5kX25hbWUubGVuLCBleHBpcmVkLT5kX25hbWUubmFtZSk7CiAJaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKGV4cGlyZWQpOwogCWluby0+ZmxhZ3MgfD0gQVVUT0ZTX0lORl9FWFBJUklORzsKLQlhdXRvZnM0X2FkZF9leHBpcmluZyhleHBpcmVkKTsKIAlpbml0X2NvbXBsZXRpb24oJmluby0+ZXhwaXJlX2NvbXBsZXRlKTsKIAlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKIAlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKQEAgLTQzNSw3ICs0MzMsNyBAQAogCiAJCURQUklOVEsoImV4cGlyZSBkb25lIHN0YXR1cz0lZCIsIHN0YXR1cyk7CiAKLQkJaWYgKGRfdW5oYXNoZWQoZGVudHJ5KSAmJiBJU19ERUFERElSKGRlbnRyeS0+ZF9pbm9kZSkpCisJCWlmIChkX3VuaGFzaGVkKGRlbnRyeSkpCiAJCQlyZXR1cm4gLUVBR0FJTjsKIAogCQlyZXR1cm4gc3RhdHVzOwpAQCAtNDc1LDcgKzQ3Myw2IEBACiAJc3Bpbl9sb2NrKCZzYmktPmZzX2xvY2spOwogCWlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhkZW50cnkpOwogCWluby0+ZmxhZ3MgJj0gfkFVVE9GU19JTkZfRVhQSVJJTkc7Ci0JYXV0b2ZzNF9kZWxfZXhwaXJpbmcoZGVudHJ5KTsKIAljb21wbGV0ZV9hbGwoJmluby0+ZXhwaXJlX2NvbXBsZXRlKTsKIAlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKIApAQCAtNTA2LDcgKzUwMyw2IEBACiAJCQlpbm8tPmZsYWdzICY9IH5BVVRPRlNfSU5GX01PVU5UUE9JTlQ7CiAJCX0KIAkJaW5vLT5mbGFncyAmPSB+QVVUT0ZTX0lORl9FWFBJUklORzsKLQkJYXV0b2ZzNF9kZWxfZXhwaXJpbmcoZGVudHJ5KTsKIAkJY29tcGxldGVfYWxsKCZpbm8tPmV4cGlyZV9jb21wbGV0ZSk7CiAJCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOwogCQlkcHV0KGRlbnRyeSk7CmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L2lub2RlLmMgYi9mcy9hdXRvZnM0L2lub2RlLmMKaW5kZXggZDBhM2RlMi4uODIxYjJiOSAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9pbm9kZS5jCisrKyBiL2ZzL2F1dG9mczQvaW5vZGUuYwpAQCAtNDksNyArNDksNiBAQAogCQlpbm8tPmRlbnRyeSA9IE5VTEw7CiAJCWluby0+c2l6ZSA9IDA7CiAJCUlOSVRfTElTVF9IRUFEKCZpbm8tPmFjdGl2ZSk7Ci0JCUlOSVRfTElTVF9IRUFEKCZpbm8tPnJlaGFzaF9saXN0KTsKIAkJaW5vLT5hY3RpdmVfY291bnQgPSAwOwogCQlJTklUX0xJU1RfSEVBRCgmaW5vLT5leHBpcmluZyk7CiAJCWF0b21pY19zZXQoJmluby0+Y291bnQsIDApOwpAQCAtOTcsNjMgKzk2LDYgQEAKIAlrZnJlZShpbm8pOwogfQogCi0vKgotICogRGVhbCB3aXRoIHRoZSBpbmZhbW91cyAiQnVzeSBpbm9kZXMgYWZ0ZXIgdW1vdW50IC4uLiIgbWVzc2FnZS4KLSAqCi0gKiBDbGVhbiB1cCB0aGUgZGVudHJ5IHRyZWUuIFRoaXMgaGFwcGVucyB3aXRoIGF1dG9mcyBpZiB0aGUgdXNlcgotICogc3BhY2UgcHJvZ3JhbSBnb2VzIGF3YXkgZHVlIHRvIGEgU0lHS0lMTCwgU0lHU0VHViBldGMuCi0gKi8KLXN0YXRpYyB2b2lkIGF1dG9mczRfZm9yY2VfcmVsZWFzZShzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICp0aGlzX3BhcmVudCA9IHNiaS0+c2ItPnNfcm9vdDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0OwotCi0JaWYgKCFzYmktPnNiLT5zX3Jvb3QpCi0JCXJldHVybjsKLQotCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwotcmVwZWF0OgotCW5leHQgPSB0aGlzX3BhcmVudC0+ZF9zdWJkaXJzLm5leHQ7Ci1yZXN1bWU6Ci0Jd2hpbGUgKG5leHQgIT0gJnRoaXNfcGFyZW50LT5kX3N1YmRpcnMpIHsKLQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gbGlzdF9lbnRyeShuZXh0LCBzdHJ1Y3QgZGVudHJ5LCBkX3UuZF9jaGlsZCk7Ci0KLQkJLyogTmVnYXRpdmUgZGVudHJ5IC0gZG9uYHQgY2FyZSAqLwotCQlpZiAoIXNpbXBsZV9wb3NpdGl2ZShkZW50cnkpKSB7Ci0JCQluZXh0ID0gbmV4dC0+bmV4dDsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKCFsaXN0X2VtcHR5KCZkZW50cnktPmRfc3ViZGlycykpIHsKLQkJCXRoaXNfcGFyZW50ID0gZGVudHJ5OwotCQkJZ290byByZXBlYXQ7Ci0JCX0KLQotCQluZXh0ID0gbmV4dC0+bmV4dDsKLQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKLQotCQlEUFJJTlRLKCJkZW50cnkgJXAgJS4qcyIsCi0JCQlkZW50cnksIChpbnQpZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKLQotCQlkcHV0KGRlbnRyeSk7Ci0JCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwotCX0KLQotCWlmICh0aGlzX3BhcmVudCAhPSBzYmktPnNiLT5zX3Jvb3QpIHsKLQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gdGhpc19wYXJlbnQ7Ci0KLQkJbmV4dCA9IHRoaXNfcGFyZW50LT5kX3UuZF9jaGlsZC5uZXh0OwotCQl0aGlzX3BhcmVudCA9IHRoaXNfcGFyZW50LT5kX3BhcmVudDsKLQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKLQkJRFBSSU5USygicGFyZW50IGRlbnRyeSAlcCAlLipzIiwKLQkJCWRlbnRyeSwgKGludClkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwotCQlkcHV0KGRlbnRyeSk7Ci0JCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwotCQlnb3RvIHJlc3VtZTsKLQl9Ci0Jc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKLX0KLQogdm9pZCBhdXRvZnM0X2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSA9IGF1dG9mczRfc2JpKHNiKTsKQEAgLTE3MCwxNSArMTEyLDEyIEBACiAJLyogRnJlZSB3YWl0IHF1ZXVlcywgY2xvc2UgcGlwZSAqLwogCWF1dG9mczRfY2F0YXRvbmljX21vZGUoc2JpKTsKIAotCS8qIENsZWFuIHVwIGFuZCByZWxlYXNlIGRhbmdsaW5nIHJlZmVyZW5jZXMgKi8KLQlhdXRvZnM0X2ZvcmNlX3JlbGVhc2Uoc2JpKTsKLQogCXNiLT5zX2ZzX2luZm8gPSBOVUxMOwogCWtmcmVlKHNiaSk7CiAKIG91dF9raWxsX3NiOgogCURQUklOVEsoInNodXR0aW5nIGRvd24iKTsKLQlraWxsX2Fub25fc3VwZXIoc2IpOworCWtpbGxfbGl0dGVyX3N1cGVyKHNiKTsKIH0KIAogc3RhdGljIGludCBhdXRvZnM0X3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2ZnNtb3VudCAqbW50KQpkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzNC9yb290LmMgYi9mcy9hdXRvZnM0L3Jvb3QuYwppbmRleCAzMGNjOWRkLi5hMDE1YjQ5IDEwMDY0NAotLS0gYS9mcy9hdXRvZnM0L3Jvb3QuYworKysgYi9mcy9hdXRvZnM0L3Jvb3QuYwpAQCAtMTA0LDk5ICsxMDQsNiBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgYXV0b2ZzNF9hZGRfcmVoYXNoX2VudHJ5KHN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vLAotCQkJCSAgICAgc3RydWN0IHJlaGFzaF9lbnRyeSAqZW50cnkpCi17Ci0JZW50cnktPnRhc2sgPSBjdXJyZW50OwotCUlOSVRfTElTVF9IRUFEKCZlbnRyeS0+bGlzdCk7Ci0JbGlzdF9hZGQoJmVudHJ5LT5saXN0LCAmaW5vLT5yZWhhc2hfbGlzdCk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBhdXRvZnM0X3JlbW92ZV9yZWhhc2hfZW50cnkoc3RydWN0IGF1dG9mc19pbmZvICppbm8pCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZpbm8tPnJlaGFzaF9saXN0OwotCXN0cnVjdCByZWhhc2hfZW50cnkgKmVudHJ5OwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIGhlYWQsIGxpc3QpIHsKLQkJaWYgKGVudHJ5LT50YXNrID09IGN1cnJlbnQpIHsKLQkJCWxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7Ci0JCQlrZnJlZShlbnRyeSk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIGF1dG9mczRfcmVtb3ZlX3JlaGFzaF9lbnRyeXMoc3RydWN0IGF1dG9mc19pbmZvICppbm8pCi17Ci0Jc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmkgPSBpbm8tPnNiaTsKLQlzdHJ1Y3QgcmVoYXNoX2VudHJ5ICplbnRyeSwgKm5leHQ7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKLQotCXNwaW5fbG9jaygmc2JpLT5mc19sb2NrKTsKLQlzcGluX2xvY2soJnNiaS0+bG9va3VwX2xvY2spOwotCWlmICghKGluby0+ZmxhZ3MgJiBBVVRPRlNfSU5GX1JFSEFTSCkpIHsKLQkJc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOwotCQlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKLQkJcmV0dXJuOwotCX0KLQlpbm8tPmZsYWdzICY9IH5BVVRPRlNfSU5GX1JFSEFTSDsKLQloZWFkID0gJmluby0+cmVoYXNoX2xpc3Q7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuZXh0LCBoZWFkLCBsaXN0KSB7Ci0JCWxpc3RfZGVsKCZlbnRyeS0+bGlzdCk7Ci0JCWtmcmVlKGVudHJ5KTsKLQl9Ci0Jc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOwotCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOwotCWRwdXQoaW5vLT5kZW50cnkpOwotCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZCBhdXRvZnM0X3JldmFsaWRhdGVfZHJvcChzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJICAgIHN0cnVjdCByZWhhc2hfZW50cnkgKmVudHJ5KQotewotCXN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpID0gYXV0b2ZzNF9zYmkoZGVudHJ5LT5kX3NiKTsKLQlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhkZW50cnkpOwotCS8qCi0JICogQWRkIHRvIHRoZSBhY3RpdmUgbGlzdCBzbyB3ZSBjYW4gcGljayB0aGlzIHVwIGluCi0JICogLT5sb29rdXAoKS4gQWxzbyBhZGQgYW4gZW50cnkgdG8gYSByZWhhc2ggbGlzdCBzbwotCSAqIHdlIGtub3cgd2hlbiB0aGVyZSBhcmUgbm8gZGVudHJ5cyBpbiBmbGlnaHQgc28gd2UKLQkgKiBrbm93IHdoZW4gd2UgY2FuIHJlaGFzaCB0aGUgZGVudHJ5LgotCSAqLwotCXNwaW5fbG9jaygmc2JpLT5sb29rdXBfbG9jayk7Ci0JaWYgKGxpc3RfZW1wdHkoJmluby0+YWN0aXZlKSkKLQkJbGlzdF9hZGQoJmluby0+YWN0aXZlLCAmc2JpLT5hY3RpdmVfbGlzdCk7Ci0JYXV0b2ZzNF9hZGRfcmVoYXNoX2VudHJ5KGlubywgZW50cnkpOwotCXNwaW5fdW5sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKLQlpZiAoIShpbm8tPmZsYWdzICYgQVVUT0ZTX0lORl9SRUhBU0gpKSB7Ci0JCWluby0+ZmxhZ3MgfD0gQVVUT0ZTX0lORl9SRUhBU0g7Ci0JCWRnZXQoZGVudHJ5KTsKLQkJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JCV9fZF9kcm9wKGRlbnRyeSk7Ci0JCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQgYXV0b2ZzNF9yZXZhbGlkYXRlX3JlaGFzaChzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0Jc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmkgPSBhdXRvZnM0X3NiaShkZW50cnktPmRfc2IpOwotCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKGRlbnRyeSk7Ci0JaWYgKGluby0+ZmxhZ3MgJiBBVVRPRlNfSU5GX1JFSEFTSCkgewotCQlzcGluX2xvY2soJnNiaS0+bG9va3VwX2xvY2spOwotCQlhdXRvZnM0X3JlbW92ZV9yZWhhc2hfZW50cnkoaW5vKTsKLQkJaWYgKGxpc3RfZW1wdHkoJmluby0+cmVoYXNoX2xpc3QpKSB7Ci0JCQlzcGluX3VubG9jaygmc2JpLT5sb29rdXBfbG9jayk7Ci0JCQlpbm8tPmZsYWdzICY9IH5BVVRPRlNfSU5GX1JFSEFTSDsKLQkJCWRfcmVoYXNoKGRlbnRyeSk7Ci0JCQlkcHV0KGluby0+ZGVudHJ5KTsKLQkJfSBlbHNlCi0JCQlzcGluX3VubG9jaygmc2JpLT5sb29rdXBfbG9jayk7Ci0JfQotCXJldHVybjsKLX0KLQogc3RhdGljIHVuc2lnbmVkIGludCBhdXRvZnM0X25lZWRfbW91bnQodW5zaWduZWQgaW50IGZsYWdzKQogewogCXVuc2lnbmVkIGludCByZXMgPSAwOwpAQCAtMjM2LDcgKzE0Myw3IEBACiAJcmV0dXJuIGRjYWNoZV9kaXJfb3Blbihpbm9kZSwgZmlsZSk7CiB9CiAKLXN0YXRpYyBpbnQgdHJ5X3RvX2ZpbGxfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3N0YXRpYyBpbnQgdHJ5X3RvX2ZpbGxfZGVudHJ5KHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGZsYWdzKQogewogCXN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpID0gYXV0b2ZzNF9zYmkoZGVudHJ5LT5kX3NiKTsKIAlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubyA9IGF1dG9mczRfZGVudHJ5X2lubyhkZW50cnkpOwpAQCAtMjQ5LDE3ICsxNTYsNTUgQEAKIAkgKiBXYWl0IGZvciBhIHBlbmRpbmcgbW91bnQsIHRyaWdnZXJpbmcgb25lIGlmIHRoZXJlCiAJICogaXNuJ3Qgb25lIGFscmVhZHkKIAkgKi8KLQlEUFJJTlRLKCJ3YWl0aW5nIGZvciBtb3VudCBuYW1lPSUuKnMiLAotCQkgZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKKwlpZiAoZGVudHJ5LT5kX2lub2RlID09IE5VTEwpIHsKKwkJRFBSSU5USygid2FpdGluZyBmb3IgbW91bnQgbmFtZT0lLipzIiwKKwkJCSBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCi0Jc3RhdHVzID0gYXV0b2ZzNF93YWl0KHNiaSwgZGVudHJ5LCBORllfTU9VTlQpOworCQlzdGF0dXMgPSBhdXRvZnM0X3dhaXQoc2JpLCBkZW50cnksIE5GWV9NT1VOVCk7CiAKLQlEUFJJTlRLKCJtb3VudCBkb25lIHN0YXR1cz0lZCIsIHN0YXR1cyk7CisJCURQUklOVEsoIm1vdW50IGRvbmUgc3RhdHVzPSVkIiwgc3RhdHVzKTsKIAotCS8qIFVwZGF0ZSBleHBpcnkgY291bnRlciAqLwotCWluby0+bGFzdF91c2VkID0gamlmZmllczsKKwkJLyogVHVybiB0aGlzIGludG8gYSByZWFsIG5lZ2F0aXZlIGRlbnRyeT8gKi8KKwkJaWYgKHN0YXR1cyA9PSAtRU5PRU5UKSB7CisJCQlzcGluX2xvY2soJnNiaS0+ZnNfbG9jayk7CisJCQlpbm8tPmZsYWdzICY9IH5BVVRPRlNfSU5GX1BFTkRJTkc7CisJCQlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0gZWxzZSBpZiAoc3RhdHVzKSB7CisJCQkvKiBSZXR1cm4gYSBuZWdhdGl2ZSBkZW50cnksIGJ1dCBsZWF2ZSBpdCAicGVuZGluZyIgKi8KKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKwkvKiBUcmlnZ2VyIG1vdW50IGZvciBwYXRoIGNvbXBvbmVudCBvciBmb2xsb3cgbGluayAqLworCX0gZWxzZSBpZiAoaW5vLT5mbGFncyAmIEFVVE9GU19JTkZfUEVORElORyB8fAorCQkJYXV0b2ZzNF9uZWVkX21vdW50KGZsYWdzKSB8fAorCQkJY3VycmVudC0+bGlua19jb3VudCkgeworCQlEUFJJTlRLKCJ3YWl0aW5nIGZvciBtb3VudCBuYW1lPSUuKnMiLAorCQkJZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKIAotCXJldHVybiBzdGF0dXM7CisJCXNwaW5fbG9jaygmc2JpLT5mc19sb2NrKTsKKwkJaW5vLT5mbGFncyB8PSBBVVRPRlNfSU5GX1BFTkRJTkc7CisJCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOworCQlzdGF0dXMgPSBhdXRvZnM0X3dhaXQoc2JpLCBkZW50cnksIE5GWV9NT1VOVCk7CisKKwkJRFBSSU5USygibW91bnQgZG9uZSBzdGF0dXM9JWQiLCBzdGF0dXMpOworCisJCWlmIChzdGF0dXMpIHsKKwkJCXNwaW5fbG9jaygmc2JpLT5mc19sb2NrKTsKKwkJCWluby0+ZmxhZ3MgJj0gfkFVVE9GU19JTkZfUEVORElORzsKKwkJCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOworCQkJcmV0dXJuIHN0YXR1czsKKwkJfQorCX0KKworCS8qIEluaXRpYWxpemUgZXhwaXJ5IGNvdW50ZXIgYWZ0ZXIgc3VjY2Vzc2Z1bCBtb3VudCAqLworCWlmIChpbm8pCisJCWluby0+bGFzdF91c2VkID0gamlmZmllczsKKworCXNwaW5fbG9jaygmc2JpLT5mc19sb2NrKTsKKwlpbm8tPmZsYWdzICY9IH5BVVRPRlNfSU5GX1BFTkRJTkc7CisJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CisKKwlyZXR1cm4gMDsKIH0KIAogLyogRm9yIGF1dG9mcyBkaXJlY3QgbW91bnRzIHRoZSBmb2xsb3cgbGluayB0cmlnZ2VycyB0aGUgbW91bnQgKi8KQEAgLTMxMywxNiArMjU4LDEwIEBACiAJICovCiAJaWYgKGluby0+ZmxhZ3MgJiBBVVRPRlNfSU5GX1BFTkRJTkcgfHwKIAkgICAgKCFkX21vdW50cG9pbnQoZGVudHJ5KSAmJiBsaXN0X2VtcHR5KCZkZW50cnktPmRfc3ViZGlycykpKSB7Ci0JCWluby0+ZmxhZ3MgfD0gQVVUT0ZTX0lORl9QRU5ESU5HOwogCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogCQlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKIAotCQlzdGF0dXMgPSB0cnlfdG9fZmlsbF9kZW50cnkoZGVudHJ5KTsKLQotCQlzcGluX2xvY2soJnNiaS0+ZnNfbG9jayk7Ci0JCWluby0+ZmxhZ3MgJj0gfkFVVE9GU19JTkZfUEVORElORzsKLQkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7Ci0KKwkJc3RhdHVzID0gdHJ5X3RvX2ZpbGxfZGVudHJ5KGRlbnRyeSwgMCk7CiAJCWlmIChzdGF0dXMpCiAJCQlnb3RvIG91dF9lcnJvcjsKIApAQCAtMzYxLDQ3ICszMDAsMTggQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKmRpciA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGU7CiAJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmkgPSBhdXRvZnM0X3NiaShkaXItPmlfc2IpOwotCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vID0gYXV0b2ZzNF9kZW50cnlfaW5vKGRlbnRyeSk7Ci0Jc3RydWN0IHJlaGFzaF9lbnRyeSAqZW50cnk7CisJaW50IG96X21vZGUgPSBhdXRvZnM0X296X21vZGUoc2JpKTsKIAlpbnQgZmxhZ3MgPSBuZCA/IG5kLT5mbGFncyA6IDA7Ci0JdW5zaWduZWQgaW50IG11dGV4X2FxdWlyZWQ7CisJaW50IHN0YXR1cyA9IDE7CiAKLQlEUFJJTlRLKCJuYW1lID0gJS4qcyBvel9tb2RlID0gJWQiLAotCQlkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIG96X21vZGUpOwotCi0JLyogRGFlbW9uIG5ldmVyIGNhdXNlcyBhIG1vdW50IHRvIHRyaWdnZXIgKi8KLQlpZiAoYXV0b2ZzNF9vel9tb2RlKHNiaSkpCi0JCXJldHVybiAxOwotCi0JZW50cnkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVoYXNoX2VudHJ5KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFlbnRyeSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQltdXRleF9hcXVpcmVkID0gbXV0ZXhfdHJ5bG9jaygmZGlyLT5pX211dGV4KTsKLQotCXNwaW5fbG9jaygmc2JpLT5mc19sb2NrKTsKLQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKIAkvKiBQZW5kaW5nIGRlbnRyeSAqLworCXNwaW5fbG9jaygmc2JpLT5mc19sb2NrKTsKIAlpZiAoYXV0b2ZzNF9pc3BlbmRpbmcoZGVudHJ5KSkgewotCQlpbnQgc3RhdHVzOwotCi0JCS8qCi0JCSAqIFdlIGNhbiBvbmx5IHVuaGFzaCBhbmQgc2VuZCB0aGlzIHRvIC0+bG9va3VwKCkgaWYKLQkJICogdGhlIGRpcmVjdG9yeSBtdXRleCBpcyBoZWxkIG92ZXIgZF9yZXZhbGlkYXRlKCkgYW5kCi0JCSAqIC0+bG9va3VwKCkuIFRoaXMgcHJldmVudHMgdGhlIFZGUyBmcm9tIGluY29ycmVjdGx5Ci0JCSAqIHNlZWluZyB0aGUgZGVudHJ5IGFzIG5vbi1leGlzdGVudC4KLQkJICovCi0JCWluby0+ZmxhZ3MgfD0gQVVUT0ZTX0lORl9QRU5ESU5HOwotCQlpZiAoIW11dGV4X2FxdWlyZWQpIHsKLQkJCWF1dG9mczRfcmV2YWxpZGF0ZV9kcm9wKGRlbnRyeSwgZW50cnkpOwotCQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKLQkJCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJLyogVGhlIGRhZW1vbiBuZXZlciBjYXVzZXMgYSBtb3VudCB0byB0cmlnZ2VyICovCiAJCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOwotCQltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7Ci0JCWtmcmVlKGVudHJ5KTsKKworCQlpZiAob3pfbW9kZSkKKwkJCXJldHVybiAxOwogCiAJCS8qCiAJCSAqIElmIHRoZSBkaXJlY3RvcnkgaGFzIGdvbmUgYXdheSBkdWUgdG8gYW4gZXhwaXJlCkBAIC00MTUsODIgKzMyNSw0NSBAQAogCQkgKiBBIHplcm8gc3RhdHVzIGlzIHN1Y2Nlc3Mgb3RoZXJ3aXNlIHdlIGhhdmUgYQogCQkgKiBuZWdhdGl2ZSBlcnJvciBjb2RlLgogCQkgKi8KLQkJc3RhdHVzID0gdHJ5X3RvX2ZpbGxfZGVudHJ5KGRlbnRyeSk7Ci0KLQkJc3Bpbl9sb2NrKCZzYmktPmZzX2xvY2spOwotCQlpbm8tPmZsYWdzICY9IH5BVVRPRlNfSU5GX1BFTkRJTkc7Ci0JCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOwotCisJCXN0YXR1cyA9IHRyeV90b19maWxsX2RlbnRyeShkZW50cnksIGZsYWdzKTsKIAkJaWYgKHN0YXR1cyA9PSAwKQogCQkJcmV0dXJuIDE7CiAKIAkJcmV0dXJuIHN0YXR1czsKIAl9CisJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CisKKwkvKiBOZWdhdGl2ZSBkZW50cnkuLiBpbnZhbGlkYXRlIGlmICJvbGQiICovCisJaWYgKGRlbnRyeS0+ZF9pbm9kZSA9PSBOVUxMKQorCQlyZXR1cm4gMDsKIAogCS8qIENoZWNrIGZvciBhIG5vbi1tb3VudHBvaW50IGRpcmVjdG9yeSB3aXRoIG5vIGNvbnRlbnRzICovCisJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CiAJaWYgKFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpICYmCiAJICAgICFkX21vdW50cG9pbnQoZGVudHJ5KSAmJiBsaXN0X2VtcHR5KCZkZW50cnktPmRfc3ViZGlycykpIHsKIAkJRFBSSU5USygiZGVudHJ5PSVwICUuKnMsIGVtcHR5ZGlyIiwKIAkJCSBkZW50cnksIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CisJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiAKLQkJaWYgKGF1dG9mczRfbmVlZF9tb3VudChmbGFncykgfHwgY3VycmVudC0+bGlua19jb3VudCkgewotCQkJaW50IHN0YXR1czsKKwkJLyogVGhlIGRhZW1vbiBuZXZlciBjYXVzZXMgYSBtb3VudCB0byB0cmlnZ2VyICovCisJCWlmIChvel9tb2RlKQorCQkJcmV0dXJuIDE7CiAKLQkJCS8qCi0JCQkgKiBXZSBjYW4gb25seSB1bmhhc2ggYW5kIHNlbmQgdGhpcyB0byAtPmxvb2t1cCgpIGlmCi0JCQkgKiB0aGUgZGlyZWN0b3J5IG11dGV4IGlzIGhlbGQgb3ZlciBkX3JldmFsaWRhdGUoKSBhbmQKLQkJCSAqIC0+bG9va3VwKCkuIFRoaXMgcHJldmVudHMgdGhlIFZGUyBmcm9tIGluY29ycmVjdGx5Ci0JCQkgKiBzZWVpbmcgdGhlIGRlbnRyeSBhcyBub24tZXhpc3RlbnQuCi0JCQkgKi8KLQkJCWluby0+ZmxhZ3MgfD0gQVVUT0ZTX0lORl9QRU5ESU5HOwotCQkJaWYgKCFtdXRleF9hcXVpcmVkKSB7Ci0JCQkJYXV0b2ZzNF9yZXZhbGlkYXRlX2Ryb3AoZGVudHJ5LCBlbnRyeSk7Ci0JCQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKLQkJCQlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7Ci0JCQlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKLQkJCW11dGV4X3VubG9jaygmZGlyLT5pX211dGV4KTsKLQkJCWtmcmVlKGVudHJ5KTsKKwkJLyoKKwkJICogQSB6ZXJvIHN0YXR1cyBpcyBzdWNjZXNzIG90aGVyd2lzZSB3ZSBoYXZlIGEKKwkJICogbmVnYXRpdmUgZXJyb3IgY29kZS4KKwkJICovCisJCXN0YXR1cyA9IHRyeV90b19maWxsX2RlbnRyeShkZW50cnksIGZsYWdzKTsKKwkJaWYgKHN0YXR1cyA9PSAwKQorCQkJcmV0dXJuIDE7CiAKLQkJCS8qCi0JCQkgKiBBIHplcm8gc3RhdHVzIGlzIHN1Y2Nlc3Mgb3RoZXJ3aXNlIHdlIGhhdmUgYQotCQkJICogbmVnYXRpdmUgZXJyb3IgY29kZS4KLQkJCSAqLwotCQkJc3RhdHVzID0gdHJ5X3RvX2ZpbGxfZGVudHJ5KGRlbnRyeSk7Ci0KLQkJCXNwaW5fbG9jaygmc2JpLT5mc19sb2NrKTsKLQkJCWluby0+ZmxhZ3MgJj0gfkFVVE9GU19JTkZfUEVORElORzsKLQkJCXNwaW5fdW5sb2NrKCZzYmktPmZzX2xvY2spOwotCi0JCQlpZiAoc3RhdHVzID09IDApCi0JCQkJcmV0dXJuIDE7Ci0KLQkJCXJldHVybiBzdGF0dXM7Ci0JCX0KKwkJcmV0dXJuIHN0YXR1czsKIAl9CiAJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKLQlzcGluX3VubG9jaygmc2JpLT5mc19sb2NrKTsKLQotCWlmIChtdXRleF9hcXVpcmVkKQotCQltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7Ci0KLQlrZnJlZShlbnRyeSk7CiAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgYXV0b2ZzNF9mcmVlX3JlaGFzaF9lbnRyeXMoc3RydWN0IGF1dG9mc19pbmZvICppbmYpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZpbmYtPnJlaGFzaF9saXN0OwotCXN0cnVjdCByZWhhc2hfZW50cnkgKmVudHJ5LCAqbmV4dDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHQsIGhlYWQsIGxpc3QpIHsKLQkJbGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKLQkJa2ZyZWUoZW50cnkpOwotCX0KLX0KLQogdm9pZCBhdXRvZnM0X2RlbnRyeV9yZWxlYXNlKHN0cnVjdCBkZW50cnkgKmRlKQogewogCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5mOwpAQCAtNTA5LDggKzM4Miw2IEBACiAJCQkJbGlzdF9kZWwoJmluZi0+YWN0aXZlKTsKIAkJCWlmICghbGlzdF9lbXB0eSgmaW5mLT5leHBpcmluZykpCiAJCQkJbGlzdF9kZWwoJmluZi0+ZXhwaXJpbmcpOwotCQkJaWYgKCFsaXN0X2VtcHR5KCZpbmYtPnJlaGFzaF9saXN0KSkKLQkJCQlhdXRvZnM0X2ZyZWVfcmVoYXNoX2VudHJ5cyhpbmYpOwogCQkJc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOwogCQl9CiAKQEAgLTU0Myw3ICs0MTQsNiBAQAogCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0ciA9IG5hbWUtPm5hbWU7CiAJc3RydWN0IGxpc3RfaGVhZCAqcCwgKmhlYWQ7CiAKLXJlc3RhcnQ6CiAJc3Bpbl9sb2NrKCZkY2FjaGVfbG9jayk7CiAJc3Bpbl9sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKIAloZWFkID0gJnNiaS0+YWN0aXZlX2xpc3Q7CkBAIC01NjEsMTkgKzQzMSw2IEBACiAJCWlmIChhdG9taWNfcmVhZCgmYWN0aXZlLT5kX2NvdW50KSA9PSAwKQogCQkJZ290byBuZXh0OwogCi0JCWlmIChhY3RpdmUtPmRfaW5vZGUgJiYgSVNfREVBRERJUihhY3RpdmUtPmRfaW5vZGUpKSB7Ci0JCQlpZiAoIWxpc3RfZW1wdHkoJmluby0+cmVoYXNoX2xpc3QpKSB7Ci0JCQkJZGdldChhY3RpdmUpOwotCQkJCXNwaW5fdW5sb2NrKCZhY3RpdmUtPmRfbG9jayk7Ci0JCQkJc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOwotCQkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7Ci0JCQkJYXV0b2ZzNF9yZW1vdmVfcmVoYXNoX2VudHJ5cyhpbm8pOwotCQkJCWRwdXQoYWN0aXZlKTsKLQkJCQlnb3RvIHJlc3RhcnQ7Ci0JCQl9Ci0JCQlnb3RvIG5leHQ7Ci0JCX0KLQogCQlxc3RyID0gJmFjdGl2ZS0+ZF9uYW1lOwogCiAJCWlmIChhY3RpdmUtPmRfbmFtZS5oYXNoICE9IGhhc2gpCkBAIC01ODYsMTEgKzQ0MywxMyBAQAogCQlpZiAobWVtY21wKHFzdHItPm5hbWUsIHN0ciwgbGVuKSkKIAkJCWdvdG8gbmV4dDsKIAotCQlkZ2V0KGFjdGl2ZSk7Ci0JCXNwaW5fdW5sb2NrKCZhY3RpdmUtPmRfbG9jayk7Ci0JCXNwaW5fdW5sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKLQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKLQkJcmV0dXJuIGFjdGl2ZTsKKwkJaWYgKGRfdW5oYXNoZWQoYWN0aXZlKSkgeworCQkJZGdldChhY3RpdmUpOworCQkJc3Bpbl91bmxvY2soJmFjdGl2ZS0+ZF9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKKwkJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CisJCQlyZXR1cm4gYWN0aXZlOworCQl9CiBuZXh0OgogCQlzcGluX3VubG9jaygmYWN0aXZlLT5kX2xvY2spOwogCX0KQEAgLTYzOSwxMSArNDk4LDEzIEBACiAJCWlmIChtZW1jbXAocXN0ci0+bmFtZSwgc3RyLCBsZW4pKQogCQkJZ290byBuZXh0OwogCi0JCWRnZXQoZXhwaXJpbmcpOwotCQlzcGluX3VubG9jaygmZXhwaXJpbmctPmRfbG9jayk7Ci0JCXNwaW5fdW5sb2NrKCZzYmktPmxvb2t1cF9sb2NrKTsKLQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKLQkJcmV0dXJuIGV4cGlyaW5nOworCQlpZiAoZF91bmhhc2hlZChleHBpcmluZykpIHsKKwkJCWRnZXQoZXhwaXJpbmcpOworCQkJc3Bpbl91bmxvY2soJmV4cGlyaW5nLT5kX2xvY2spOworCQkJc3Bpbl91bmxvY2soJnNiaS0+bG9va3VwX2xvY2spOworCQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJCXJldHVybiBleHBpcmluZzsKKwkJfQogbmV4dDoKIAkJc3Bpbl91bmxvY2soJmV4cGlyaW5nLT5kX2xvY2spOwogCX0KQEAgLTY1Myw0OCArNTE0LDYgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHN0cnVjdCBhdXRvZnNfaW5mbyAqaW5pdF9uZXdfZGVudHJ5KHN0cnVjdCBhdXRvZnNfc2JfaW5mbyAqc2JpLAotCQkJCQkgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBvel9tb2RlKQotewotCXN0cnVjdCBhdXRvZnNfaW5mbyAqaW5vOwotCi0JLyoKLQkgKiBNYXJrIHRoZSBkZW50cnkgaW5jb21wbGV0ZSBidXQgZG9uJ3QgaGFzaCBpdC4gV2UgZG8gdGhpcwotCSAqIHRvIHNlcmlhbGl6ZSBvdXIgaW5vZGUgY3JlYXRpb24gb3BlcmF0aW9ucyAoc3ltbGluayBhbmQKLQkgKiBta2Rpcikgd2hpY2ggcHJldmVudHMgZGVhZGxvY2sgZHVyaW5nIHRoZSBjYWxsYmFjayB0bwotCSAqIHRoZSBkYWVtb24uIFN1YnNlcXVlbnQgdXNlciBzcGFjZSBsb29rdXBzIGZvciB0aGUgc2FtZQotCSAqIGRlbnRyeSBhcmUgcGxhY2VkIG9uIHRoZSB3YWl0IHF1ZXVlIHdoaWxlIHRoZSBkYWVtb24KLQkgKiBpdHNlbGYgaXMgYWxsb3dlZCBwYXNzYWdlIHVucmVzdGljdGVkIHNvIHRoZSBjcmVhdGUKLQkgKiBvcGVyYXRpb24gaXRzZWxmIGNhbiB0aGVuIGhhc2ggdGhlIGRlbnRyeS4gRmluYWxseSwKLQkgKiB3ZSBjaGVjayBmb3IgdGhlIGhhc2hlZCBkZW50cnkgYW5kIHJldHVybiB0aGUgbmV3bHkKLQkgKiBoYXNoZWQgZGVudHJ5LgotCSAqLwotCWRlbnRyeS0+ZF9vcCA9ICZhdXRvZnM0X3Jvb3RfZGVudHJ5X29wZXJhdGlvbnM7Ci0KLQkvKgotCSAqIEFuZCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBzYW1lIGRlbnRyeSBpcyB1c2VkIGZvcgotCSAqIGFsbCBmb2xsb3dpbmcgbG9va3VwIGNhbGxzIHVudGlsIGl0IGlzIGhhc2hlZCBzbyB0aGF0Ci0JICogdGhlIGRlbnRyeSBmbGFncyBhcmUgcGVyc2lzdGVudCB0aHJvdWdob3V0IHRoZSByZXF1ZXN0LgotCSAqLwotCWlubyA9IGF1dG9mczRfaW5pdF9pbm8oTlVMTCwgc2JpLCAwNTU1KTsKLQlpZiAoIWlubykKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0KLQlkZW50cnktPmRfZnNkYXRhID0gaW5vOwotCWluby0+ZGVudHJ5ID0gZGVudHJ5OwotCi0JLyoKLQkgKiBPbmx5IHNldCB0aGUgbW91bnQgcGVuZGluZyBmbGFnIGZvciBuZXcgZGVudHJ5cyBub3QgY3JlYXRlZAotCSAqIGJ5IHRoZSBkYWVtb24uCi0JICovCi0JaWYgKCFvel9tb2RlKQotCQlpbm8tPmZsYWdzIHw9IEFVVE9GU19JTkZfUEVORElORzsKLQotCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBOVUxMKTsKLQotCXJldHVybiBpbm87Ci19Ci0KIC8qIExvb2t1cHMgaW4gdGhlIHJvb3QgZGlyZWN0b3J5ICovCiBzdGF0aWMgc3RydWN0IGRlbnRyeSAqYXV0b2ZzNF9sb29rdXAoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7CkBAIC03MDIsNyArNTIxLDYgQEAKIAlzdHJ1Y3QgYXV0b2ZzX2luZm8gKmlubzsKIAlzdHJ1Y3QgZGVudHJ5ICpleHBpcmluZywgKmFjdGl2ZTsKIAlpbnQgb3pfbW9kZTsKLQlpbnQgc3RhdHVzID0gMDsKIAogCURQUklOVEsoIm5hbWUgPSAlLipzIiwKIAkJZGVudHJ5LT5kX25hbWUubGVuLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKQEAgLTcxNywyNiArNTM1LDQ0IEBACiAJRFBSSU5USygicGlkID0gJXUsIHBncnAgPSAldSwgY2F0YXRvbmljID0gJWQsIG96X21vZGUgPSAlZCIsCiAJCSBjdXJyZW50LT5waWQsIHRhc2tfcGdycF9ucihjdXJyZW50KSwgc2JpLT5jYXRhdG9uaWMsIG96X21vZGUpOwogCi0Jc3Bpbl9sb2NrKCZzYmktPmZzX2xvY2spOwogCWFjdGl2ZSA9IGF1dG9mczRfbG9va3VwX2FjdGl2ZShkZW50cnkpOwogCWlmIChhY3RpdmUpIHsKIAkJZGVudHJ5ID0gYWN0aXZlOwogCQlpbm8gPSBhdXRvZnM0X2RlbnRyeV9pbm8oZGVudHJ5KTsKLQkJLyogSWYgdGhpcyBjYW1lIGZyb20gcmV2YWxpZGF0ZSwgcmVoYXNoIGl0ICovCi0JCWF1dG9mczRfcmV2YWxpZGF0ZV9yZWhhc2goZGVudHJ5KTsKLQkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CiAJfSBlbHNlIHsKLQkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7Ci0JCWlubyA9IGluaXRfbmV3X2RlbnRyeShzYmksIGRlbnRyeSwgb3pfbW9kZSk7Ci0JCWlmIChJU19FUlIoaW5vKSkKLQkJCXJldHVybiAoc3RydWN0IGRlbnRyeSAqKSBpbm87CisJCS8qCisJCSAqIE1hcmsgdGhlIGRlbnRyeSBpbmNvbXBsZXRlIGJ1dCBkb24ndCBoYXNoIGl0LiBXZSBkbyB0aGlzCisJCSAqIHRvIHNlcmlhbGl6ZSBvdXIgaW5vZGUgY3JlYXRpb24gb3BlcmF0aW9ucyAoc3ltbGluayBhbmQKKwkJICogbWtkaXIpIHdoaWNoIHByZXZlbnRzIGRlYWRsb2NrIGR1cmluZyB0aGUgY2FsbGJhY2sgdG8KKwkJICogdGhlIGRhZW1vbi4gU3Vic2VxdWVudCB1c2VyIHNwYWNlIGxvb2t1cHMgZm9yIHRoZSBzYW1lCisJCSAqIGRlbnRyeSBhcmUgcGxhY2VkIG9uIHRoZSB3YWl0IHF1ZXVlIHdoaWxlIHRoZSBkYWVtb24KKwkJICogaXRzZWxmIGlzIGFsbG93ZWQgcGFzc2FnZSB1bnJlc3RpY3RlZCBzbyB0aGUgY3JlYXRlCisJCSAqIG9wZXJhdGlvbiBpdHNlbGYgY2FuIHRoZW4gaGFzaCB0aGUgZGVudHJ5LiBGaW5hbGx5LAorCQkgKiB3ZSBjaGVjayBmb3IgdGhlIGhhc2hlZCBkZW50cnkgYW5kIHJldHVybiB0aGUgbmV3bHkKKwkJICogaGFzaGVkIGRlbnRyeS4KKwkJICovCisJCWRlbnRyeS0+ZF9vcCA9ICZhdXRvZnM0X3Jvb3RfZGVudHJ5X29wZXJhdGlvbnM7CisKKwkJLyoKKwkJICogQW5kIHdlIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHNhbWUgZGVudHJ5IGlzIHVzZWQgZm9yCisJCSAqIGFsbCBmb2xsb3dpbmcgbG9va3VwIGNhbGxzIHVudGlsIGl0IGlzIGhhc2hlZCBzbyB0aGF0CisJCSAqIHRoZSBkZW50cnkgZmxhZ3MgYXJlIHBlcnNpc3RlbnQgdGhyb3VnaG91dCB0aGUgcmVxdWVzdC4KKwkJICovCisJCWlubyA9IGF1dG9mczRfaW5pdF9pbm8oTlVMTCwgc2JpLCAwNTU1KTsKKwkJaWYgKCFpbm8pCisJCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCQlkZW50cnktPmRfZnNkYXRhID0gaW5vOworCQlpbm8tPmRlbnRyeSA9IGRlbnRyeTsKKworCQlhdXRvZnM0X2FkZF9hY3RpdmUoZGVudHJ5KTsKKworCQlkX2luc3RhbnRpYXRlKGRlbnRyeSwgTlVMTCk7CiAJfQogCi0JYXV0b2ZzNF9hZGRfYWN0aXZlKGRlbnRyeSk7Ci0KIAlpZiAoIW96X21vZGUpIHsKLQkJZXhwaXJpbmcgPSBhdXRvZnM0X2xvb2t1cF9leHBpcmluZyhkZW50cnkpOwogCQltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7CisJCWV4cGlyaW5nID0gYXV0b2ZzNF9sb29rdXBfZXhwaXJpbmcoZGVudHJ5KTsKIAkJaWYgKGV4cGlyaW5nKSB7CiAJCQkvKgogCQkJICogSWYgd2UgYXJlIHJhY2luZyB3aXRoIGV4cGlyZSB0aGUgcmVxdWVzdCBtaWdodCBub3QKQEAgLTc0NCwyMiArNTgwLDIzIEBACiAJCQkgKiBzbyBpdCBtdXN0IGhhdmUgYmVlbiBzdWNjZXNzZnVsLCBzbyBqdXN0IHdhaXQgZm9yIGl0LgogCQkJICovCiAJCQlhdXRvZnM0X2V4cGlyZV93YWl0KGV4cGlyaW5nKTsKKwkJCWF1dG9mczRfZGVsX2V4cGlyaW5nKGV4cGlyaW5nKTsKIAkJCWRwdXQoZXhwaXJpbmcpOwogCQl9Ci0JCXN0YXR1cyA9IHRyeV90b19maWxsX2RlbnRyeShkZW50cnkpOwotCQltdXRleF9sb2NrKCZkaXItPmlfbXV0ZXgpOworCiAJCXNwaW5fbG9jaygmc2JpLT5mc19sb2NrKTsKLQkJaW5vLT5mbGFncyAmPSB+QVVUT0ZTX0lORl9QRU5ESU5HOworCQlpbm8tPmZsYWdzIHw9IEFVVE9GU19JTkZfUEVORElORzsKIAkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CisJCWlmIChkZW50cnktPmRfb3AgJiYgZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUpCisJCQkoZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUpKGRlbnRyeSwgbmQpOworCQltdXRleF9sb2NrKCZkaXItPmlfbXV0ZXgpOwogCX0KIAotCWF1dG9mczRfZGVsX2FjdGl2ZShkZW50cnkpOwotCiAJLyoKLQkgKiBJZiB3ZSBoYWQgYSBtb3VudCBmYWlsLCBjaGVjayBpZiB3ZSBoYWQgdG8gaGFuZGxlCisJICogSWYgd2UgYXJlIHN0aWxsIHBlbmRpbmcsIGNoZWNrIGlmIHdlIGhhZCB0byBoYW5kbGUKIAkgKiBhIHNpZ25hbC4gSWYgc28gd2UgY2FuIGZvcmNlIGEgcmVzdGFydC4uCiAJICovCi0JaWYgKHN0YXR1cykgeworCWlmIChpbm8tPmZsYWdzICYgQVVUT0ZTX0lORl9QRU5ESU5HKSB7CiAJCS8qIFNlZSBpZiB3ZSB3ZXJlIGludGVycnVwdGVkICovCiAJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgewogCQkJc2lnc2V0X3QgKnNpZ3NldCA9ICZjdXJyZW50LT5wZW5kaW5nLnNpZ25hbDsKQEAgLTc3MSw0NiArNjA4LDQzIEBACiAJCQkgICAgcmV0dXJuIEVSUl9QVFIoLUVSRVNUQVJUTk9JTlRSKTsKIAkJCX0KIAkJfQotCX0KLQotCS8qCi0JICogVXNlciBzcGFjZSBjYW4gKGFuZCBoYXMgZG9uZSBpbiB0aGUgcGFzdCkgcmVtb3ZlIGFuZCByZS1jcmVhdGUKLQkgKiB0aGlzIGRpcmVjdG9yeSBkdXJpbmcgdGhlIGNhbGxiYWNrLiBUaGlzIGNhbiBsZWF2ZSB1cyB3aXRoIGFuCi0JICogdW5oYXNoZWQgZGVudHJ5LCBidXQgYSBzdWNjZXNzZnVsIG1vdW50ISAgU28gd2UgbmVlZCB0bwotCSAqIHBlcmZvcm0gYW5vdGhlciBjYWNoZWQgbG9va3VwIGluIGNhc2UgdGhlIGRlbnRyeSBub3cgZXhpc3RzLgotCSAqLwotCWlmICghb3pfbW9kZSAmJiAhaGF2ZV9zdWJtb3VudHMoZGVudHJ5KSkgewotCQlzdHJ1Y3QgZGVudHJ5ICpuZXc7Ci0JCW5ldyA9IGRfbG9va3VwKGRlbnRyeS0+ZF9wYXJlbnQsICZkZW50cnktPmRfbmFtZSk7Ci0JCWlmIChuZXcpIHsKLQkJCWlmIChhY3RpdmUpCi0JCQkJZHB1dChhY3RpdmUpOwotCQkJcmV0dXJuIG5ldzsKLQkJfSBlbHNlIHsKLQkJCWlmICghc3RhdHVzKQotCQkJCXN0YXR1cyA9IC1FTk9FTlQ7CisJCWlmICghb3pfbW9kZSkgeworCQkJc3Bpbl9sb2NrKCZzYmktPmZzX2xvY2spOworCQkJaW5vLT5mbGFncyAmPSB+QVVUT0ZTX0lORl9QRU5ESU5HOworCQkJc3Bpbl91bmxvY2soJnNiaS0+ZnNfbG9jayk7CiAJCX0KIAl9CiAKIAkvKgotCSAqIElmIHdlIGhhZCBhIG1vdW50IGZhaWx1cmUsIHJldHVybiBzdGF0dXMgdG8gdXNlciBzcGFjZS4KLQkgKiBJZiB0aGUgbW91bnQgc3VjY2VlZGVkIGFuZCB3ZSB1c2VkIGEgZGVudHJ5IGZyb20gdGhlIGFjdGl2ZSBxdWV1ZQotCSAqIHJldHVybiBpdC4KKwkgKiBJZiB0aGlzIGRlbnRyeSBpcyB1bmhhc2hlZCwgdGhlbiB3ZSBzaG91bGRuJ3QgaG9ub3VyIHRoaXMKKwkgKiBsb29rdXAuICBSZXR1cm5pbmcgRU5PRU5UIGhlcmUgZG9lc24ndCBkbyB0aGUgcmlnaHQgdGhpbmcKKwkgKiBmb3IgYWxsIHN5c3RlbSBjYWxscywgYnV0IGl0IHNob3VsZCBiZSBPSyBmb3IgdGhlIG9wZXJhdGlvbnMKKwkgKiB3ZSBwZXJtaXQgZnJvbSBhbiBhdXRvZnMuCiAJICovCi0JaWYgKHN0YXR1cykgewotCQlkZW50cnkgPSBFUlJfUFRSKHN0YXR1cyk7CisJaWYgKCFvel9tb2RlICYmIGRfdW5oYXNoZWQoZGVudHJ5KSkgeworCQkvKgorCQkgKiBBIHVzZXIgc3BhY2UgYXBwbGljYXRpb24gY2FuIChhbmQgaGFzIGRvbmUgaW4gdGhlIHBhc3QpCisJCSAqIHJlbW92ZSBhbmQgcmUtY3JlYXRlIHRoaXMgZGlyZWN0b3J5IGR1cmluZyB0aGUgY2FsbGJhY2suCisJCSAqIFRoaXMgY2FuIGxlYXZlIHVzIHdpdGggYW4gdW5oYXNoZWQgZGVudHJ5LCBidXQgYQorCQkgKiBzdWNjZXNzZnVsIG1vdW50ISAgU28gd2UgbmVlZCB0byBwZXJmb3JtIGFub3RoZXIKKwkJICogY2FjaGVkIGxvb2t1cCBpbiBjYXNlIHRoZSBkZW50cnkgbm93IGV4aXN0cy4KKwkJICovCisJCXN0cnVjdCBkZW50cnkgKnBhcmVudCA9IGRlbnRyeS0+ZF9wYXJlbnQ7CisJCXN0cnVjdCBkZW50cnkgKm5ldyA9IGRfbG9va3VwKHBhcmVudCwgJmRlbnRyeS0+ZF9uYW1lKTsKKwkJaWYgKG5ldyAhPSBOVUxMKQorCQkJZGVudHJ5ID0gbmV3OworCQllbHNlCisJCQlkZW50cnkgPSBFUlJfUFRSKC1FTk9FTlQpOworCiAJCWlmIChhY3RpdmUpCiAJCQlkcHV0KGFjdGl2ZSk7CisKIAkJcmV0dXJuIGRlbnRyeTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBWYWxpZCBzdWNjZXNzZnVsIG1vdW50LCByZXR1cm4gYWN0aXZlIGRlbnRyeSBvciBOVUxMCi0JCSAqIGZvciBhIG5ldyBkZW50cnkuCi0JCSAqLwotCQlpZiAoYWN0aXZlKQotCQkJcmV0dXJuIGFjdGl2ZTsKIAl9CiAKKwlpZiAoYWN0aXZlKQorCQlyZXR1cm4gYWN0aXZlOworCiAJcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTgzNCw2ICs2NjgsOCBAQAogCWlmICghaW5vKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWF1dG9mczRfZGVsX2FjdGl2ZShkZW50cnkpOworCiAJaW5vLT5zaXplID0gc3RybGVuKHN5bW5hbWUpOwogCWNwID0ga21hbGxvYyhpbm8tPnNpemUgKyAxLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNwKSB7CkBAIC05MTAsNiArNzQ2LDcgQEAKIAlkaXItPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUU7CiAKIAlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKKwlhdXRvZnM0X2FkZF9leHBpcmluZyhkZW50cnkpOwogCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOwogCV9fZF9kcm9wKGRlbnRyeSk7CiAJc3Bpbl91bmxvY2soJmRlbnRyeS0+ZF9sb2NrKTsKQEAgLTkzNSw2ICs3NzIsNyBAQAogCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogCQlyZXR1cm4gLUVOT1RFTVBUWTsKIAl9CisJYXV0b2ZzNF9hZGRfZXhwaXJpbmcoZGVudHJ5KTsKIAlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKIAlfX2RfZHJvcChkZW50cnkpOwogCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CkBAIC05NzIsNiArODEwLDggQEAKIAlpZiAoIWlubykKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlhdXRvZnM0X2RlbF9hY3RpdmUoZGVudHJ5KTsKKwogCWlub2RlID0gYXV0b2ZzNF9nZXRfaW5vZGUoZGlyLT5pX3NiLCBpbm8pOwogCWlmICghaW5vZGUpIHsKIAkJaWYgKCFkZW50cnktPmRfZnNkYXRhKQpkaWZmIC0tZ2l0IGEvZnMvYmZzL2lub2RlLmMgYi9mcy9iZnMvaW5vZGUuYwppbmRleCA4ZjNkOWZkLi5mMjJhN2QzIDEwMDY0NAotLS0gYS9mcy9iZnMvaW5vZGUuYworKysgYi9mcy9iZnMvaW5vZGUuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC92ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgImJmcy5oIgogCkBAIC05OCw3ICs5OSw3IEBACiAJcmV0dXJuIEVSUl9QVFIoLUVJTyk7CiB9CiAKLXN0YXRpYyBpbnQgYmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KQorc3RhdGljIGludCBiZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CiAJc3RydWN0IGJmc19zYl9pbmZvICppbmZvID0gQkZTX1NCKGlub2RlLT5pX3NiKTsKIAl1bnNpZ25lZCBpbnQgaW5vID0gKHUxNilpbm9kZS0+aV9pbm87CkBAIC0xNDcsNyArMTQ4LDcgQEAKIAlkaS0+aV9lb2Zmc2V0ID0gY3B1X3RvX2xlMzIoaV9zYmxvY2sgKiBCRlNfQlNJWkUgKyBpbm9kZS0+aV9zaXplIC0gMSk7CiAKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JaWYgKHdhaXQpIHsKKwlpZiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpIHsKIAkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwogCQlpZiAoYnVmZmVyX3JlcShiaCkgJiYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpCiAJCQllcnIgPSAtRUlPOwpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2FvdXQuYyBiL2ZzL2JpbmZtdF9hb3V0LmMKaW5kZXggZmRkMzk3MC4uMTVkODBiYiAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2FvdXQuYworKysgYi9mcy9iaW5mbXRfYW91dC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvYmluZm10cy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvcmVkdW1wLmg+CiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KQEAgLTYwLDI2ICs2MSw2IEBACiB9CiAKIC8qCi0gKiBUaGVzZSBhcmUgdGhlIG9ubHkgdGhpbmdzIHlvdSBzaG91bGQgZG8gb24gYSBjb3JlLWZpbGU6IHVzZSBvbmx5IHRoZXNlCi0gKiBtYWNyb3MgdG8gd3JpdGUgb3V0IGFsbCB0aGUgbmVjZXNzYXJ5IGluZm8uCi0gKi8KLQotc3RhdGljIGludCBkdW1wX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICphZGRyLCBpbnQgbnIpCi17Ci0JcmV0dXJuIGZpbGUtPmZfb3AtPndyaXRlKGZpbGUsIGFkZHIsIG5yLCAmZmlsZS0+Zl9wb3MpID09IG5yOwotfQotCi0jZGVmaW5lIERVTVBfV1JJVEUoYWRkciwgbnIpCVwKLQlpZiAoIWR1bXBfd3JpdGUoZmlsZSwgKHZvaWQgKikoYWRkciksIChucikpKSBcCi0JCWdvdG8gZW5kX2NvcmVkdW1wOwotCi0jZGVmaW5lIERVTVBfU0VFSyhvZmZzZXQpIFwKLWlmIChmaWxlLT5mX29wLT5sbHNlZWspIHsgXAotCWlmIChmaWxlLT5mX29wLT5sbHNlZWsoZmlsZSwob2Zmc2V0KSwwKSAhPSAob2Zmc2V0KSkgXAotIAkJZ290byBlbmRfY29yZWR1bXA7IFwKLX0gZWxzZSBmaWxlLT5mX3BvcyA9IChvZmZzZXQpCi0KLS8qCiAgKiBSb3V0aW5lIHdyaXRlcyBhIGNvcmUgZHVtcCBpbWFnZSBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCiAgKiBDdXJyZW50bHkgb25seSBhIHN0dWItZnVuY3Rpb24uCiAgKgpAQCAtMTMwLDI2ICsxMTEsMzEgQEAKIAogCXNldF9mcyhLRVJORUxfRFMpOwogLyogc3RydWN0IHVzZXIgKi8KLQlEVU1QX1dSSVRFKCZkdW1wLHNpemVvZihkdW1wKSk7CisJaWYgKCFkdW1wX3dyaXRlKGZpbGUsICZkdW1wLCBzaXplb2YoZHVtcCkpKQorCQlnb3RvIGVuZF9jb3JlZHVtcDsKIC8qIE5vdyBkdW1wIGFsbCBvZiB0aGUgdXNlciBkYXRhLiAgSW5jbHVkZSBtYWxsb2NlZCBzdHVmZiBhcyB3ZWxsICovCi0JRFVNUF9TRUVLKFBBR0VfU0laRSk7CisJaWYgKCFkdW1wX3NlZWsoY3BybS0+ZmlsZSwgUEFHRV9TSVpFIC0gc2l6ZW9mKGR1bXApKSkKKwkJZ290byBlbmRfY29yZWR1bXA7CiAvKiBub3cgd2Ugc3RhcnQgd3JpdGluZyBvdXQgdGhlIHVzZXIgc3BhY2UgaW5mbyAqLwogCXNldF9mcyhVU0VSX0RTKTsKIC8qIER1bXAgdGhlIGRhdGEgYXJlYSAqLwogCWlmIChkdW1wLnVfZHNpemUgIT0gMCkgewogCQlkdW1wX3N0YXJ0ID0gU1RBUlRfREFUQShkdW1wKTsKIAkJZHVtcF9zaXplID0gZHVtcC51X2RzaXplIDw8IFBBR0VfU0hJRlQ7Ci0JCURVTVBfV1JJVEUoZHVtcF9zdGFydCxkdW1wX3NpemUpOworCQlpZiAoIWR1bXBfd3JpdGUoZmlsZSwgZHVtcF9zdGFydCwgZHVtcF9zaXplKSkKKwkJCWdvdG8gZW5kX2NvcmVkdW1wOwogCX0KIC8qIE5vdyBwcmVwYXJlIHRvIGR1bXAgdGhlIHN0YWNrIGFyZWEgKi8KIAlpZiAoZHVtcC51X3NzaXplICE9IDApIHsKIAkJZHVtcF9zdGFydCA9IFNUQVJUX1NUQUNLKGR1bXApOwogCQlkdW1wX3NpemUgPSBkdW1wLnVfc3NpemUgPDwgUEFHRV9TSElGVDsKLQkJRFVNUF9XUklURShkdW1wX3N0YXJ0LGR1bXBfc2l6ZSk7CisJCWlmICghZHVtcF93cml0ZShmaWxlLCBkdW1wX3N0YXJ0LCBkdW1wX3NpemUpKQorCQkJZ290byBlbmRfY29yZWR1bXA7CiAJfQogLyogRmluYWxseSBkdW1wIHRoZSB0YXNrIHN0cnVjdC4gIE5vdCBiZSB1c2VkIGJ5IGdkYiwgYnV0IGNvdWxkIGJlIHVzZWZ1bCAqLwogCXNldF9mcyhLRVJORUxfRFMpOwotCURVTVBfV1JJVEUoY3VycmVudCxzaXplb2YoKmN1cnJlbnQpKTsKKwlpZiAoIWR1bXBfd3JpdGUoZmlsZSwgY3VycmVudCwgc2l6ZW9mKCpjdXJyZW50KSkpCisJCWdvdG8gZW5kX2NvcmVkdW1wOwogZW5kX2NvcmVkdW1wOgogCXNldF9mcyhmcyk7CiAJcmV0dXJuIGhhc19kdW1wZWQ7CkBAIC0yNDcsNyArMjMzLDcgQEAKIAkgKiBzaXplIGxpbWl0cyBpbXBvc2VkIG9uIHRoZW0gYnkgY3JlYXRpbmcgcHJvZ3JhbXMgd2l0aCBsYXJnZQogCSAqIGFycmF5cyBpbiB0aGUgZGF0YSBvciBic3MuCiAJICovCi0JcmxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfREFUQV0ucmxpbV9jdXI7CisJcmxpbSA9IHJsaW1pdChSTElNSVRfREFUQSk7CiAJaWYgKHJsaW0gPj0gUkxJTV9JTkZJTklUWSkKIAkJcmxpbSA9IH4wOwogCWlmIChleC5hX2RhdGEgKyBleC5hX2JzcyA+IHJsaW0pCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfZWxmLmMgYi9mcy9iaW5mbXRfZWxmLmMKaW5kZXggZmQ1YjJlYS4uNTM1ZTc2MyAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZi5jCisrKyBiL2ZzL2JpbmZtdF9lbGYuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9jb3JlZHVtcC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KQEAgLTEwODUsMzYgKzEwODYsNiBAQAogICogTW9kZWxsZWQgb24gZnMvZXhlYy5jOmFvdXRfY29yZV9kdW1wKCkKICAqIEplcmVteSBGaXR6aGFyZGluZ2UgPGplcmVteUBzdy5vei5hdT4KICAqLwotLyoKLSAqIFRoZXNlIGFyZSB0aGUgb25seSB0aGluZ3MgeW91IHNob3VsZCBkbyBvbiBhIGNvcmUtZmlsZTogdXNlIG9ubHkgdGhlc2UKLSAqIGZ1bmN0aW9ucyB0byB3cml0ZSBvdXQgYWxsIHRoZSBuZWNlc3NhcnkgaW5mby4KLSAqLwotc3RhdGljIGludCBkdW1wX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCB2b2lkICphZGRyLCBpbnQgbnIpCi17Ci0JcmV0dXJuIGZpbGUtPmZfb3AtPndyaXRlKGZpbGUsIGFkZHIsIG5yLCAmZmlsZS0+Zl9wb3MpID09IG5yOwotfQotCi1zdGF0aWMgaW50IGR1bXBfc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZikKLXsKLQlpZiAoZmlsZS0+Zl9vcC0+bGxzZWVrICYmIGZpbGUtPmZfb3AtPmxsc2VlayAhPSBub19sbHNlZWspIHsKLQkJaWYgKGZpbGUtPmZfb3AtPmxsc2VlayhmaWxlLCBvZmYsIFNFRUtfQ1VSKSA8IDApCi0JCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQljaGFyICpidWYgPSAoY2hhciAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKLQkJaWYgKCFidWYpCi0JCQlyZXR1cm4gMDsKLQkJd2hpbGUgKG9mZiA+IDApIHsKLQkJCXVuc2lnbmVkIGxvbmcgbiA9IG9mZjsKLQkJCWlmIChuID4gUEFHRV9TSVpFKQotCQkJCW4gPSBQQUdFX1NJWkU7Ci0JCQlpZiAoIWR1bXBfd3JpdGUoZmlsZSwgYnVmLCBuKSkKLQkJCQlyZXR1cm4gMDsKLQkJCW9mZiAtPSBuOwotCQl9Ci0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWYpOwotCX0KLQlyZXR1cm4gMTsKLX0KIAogLyoKICAqIERlY2lkZSB3aGF0IHRvIGR1bXAgb2YgYSBzZWdtZW50LCBwYXJ0LCBhbGwgb3Igbm9uZS4KQEAgLTEyNDksMTEgKzEyMjAsNiBAQAogfQogI3VuZGVmIERVTVBfV1JJVEUKIAotI2RlZmluZSBEVU1QX1dSSVRFKGFkZHIsIG5yKQkJCQlcCi0JaWYgKChzaXplICs9IChucikpID4gY3BybS0+bGltaXQgfHwJCVwKLQkgICAgIWR1bXBfd3JpdGUoY3BybS0+ZmlsZSwgKGFkZHIpLCAobnIpKSkJXAotCQlnb3RvIGVuZF9jb3JlZHVtcDsKLQogc3RhdGljIHZvaWQgZmlsbF9lbGZfaGVhZGVyKHN0cnVjdCBlbGZoZHIgKmVsZiwgaW50IHNlZ3MsCiAJCQkgICAgdTE2IG1hY2hpbmUsIHUzMiBmbGFncywgdTggb3NhYmkpCiB7CkBAIC0xODcyLDYgKzE4MzgsMzQgQEAKIAlyZXR1cm4gZ2F0ZV92bWE7CiB9CiAKK3N0YXRpYyB2b2lkIGZpbGxfZXh0bnVtX2luZm8oc3RydWN0IGVsZmhkciAqZWxmLCBzdHJ1Y3QgZWxmX3NoZHIgKnNoZHI0ZXh0bnVtLAorCQkJICAgICBlbGZfYWRkcl90IGVfc2hvZmYsIGludCBzZWdzKQoreworCWVsZi0+ZV9zaG9mZiA9IGVfc2hvZmY7CisJZWxmLT5lX3NoZW50c2l6ZSA9IHNpemVvZigqc2hkcjRleHRudW0pOworCWVsZi0+ZV9zaG51bSA9IDE7CisJZWxmLT5lX3Noc3RybmR4ID0gU0hOX1VOREVGOworCisJbWVtc2V0KHNoZHI0ZXh0bnVtLCAwLCBzaXplb2YoKnNoZHI0ZXh0bnVtKSk7CisKKwlzaGRyNGV4dG51bS0+c2hfdHlwZSA9IFNIVF9OVUxMOworCXNoZHI0ZXh0bnVtLT5zaF9zaXplID0gZWxmLT5lX3NobnVtOworCXNoZHI0ZXh0bnVtLT5zaF9saW5rID0gZWxmLT5lX3Noc3RybmR4OworCXNoZHI0ZXh0bnVtLT5zaF9pbmZvID0gc2VnczsKK30KKworc3RhdGljIHNpemVfdCBlbGZfY29yZV92bWFfZGF0YV9zaXplKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZ2F0ZV92bWEsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIG1tX2ZsYWdzKQoreworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXNpemVfdCBzaXplID0gMDsKKworCWZvciAodm1hID0gZmlyc3Rfdm1hKGN1cnJlbnQsIGdhdGVfdm1hKTsgdm1hICE9IE5VTEw7CisJICAgICB2bWEgPSBuZXh0X3ZtYSh2bWEsIGdhdGVfdm1hKSkKKwkJc2l6ZSArPSB2bWFfZHVtcF9zaXplKHZtYSwgbW1fZmxhZ3MpOworCXJldHVybiBzaXplOworfQorCiAvKgogICogQWN0dWFsIGR1bXBlcgogICoKQEAgLTE4ODgsOCArMTg4MiwxMSBAQAogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCAqZ2F0ZV92bWE7CiAJc3RydWN0IGVsZmhkciAqZWxmID0gTlVMTDsKIAlsb2ZmX3Qgb2Zmc2V0ID0gMCwgZGF0YW9mZiwgZm9mZnNldDsKLQl1bnNpZ25lZCBsb25nIG1tX2ZsYWdzOwogCXN0cnVjdCBlbGZfbm90ZV9pbmZvIGluZm87CisJc3RydWN0IGVsZl9waGRyICpwaGRyNG5vdGUgPSBOVUxMOworCXN0cnVjdCBlbGZfc2hkciAqc2hkcjRleHRudW0gPSBOVUxMOworCUVsZl9IYWxmIGVfcGhudW07CisJZWxmX2FkZHJfdCBlX3Nob2ZmOwogCiAJLyoKIAkgKiBXZSBubyBsb25nZXIgc3RvcCBhbGwgVk0gb3BlcmF0aW9ucy4KQEAgLTE5MTIsMjAgKzE5MDksMjUgQEAKIAkgKiBQbGVhc2UgY2hlY2sgREVGQVVMVF9NQVhfTUFQX0NPVU5UIGRlZmluaXRpb24gd2hlbiB5b3UgbW9kaWZ5IGhlcmUuCiAJICovCiAJc2VncyA9IGN1cnJlbnQtPm1tLT5tYXBfY291bnQ7Ci0jaWZkZWYgRUxGX0NPUkVfRVhUUkFfUEhEUlMKLQlzZWdzICs9IEVMRl9DT1JFX0VYVFJBX1BIRFJTOwotI2VuZGlmCisJc2VncyArPSBlbGZfY29yZV9leHRyYV9waGRycygpOwogCiAJZ2F0ZV92bWEgPSBnZXRfZ2F0ZV92bWEoY3VycmVudCk7CiAJaWYgKGdhdGVfdm1hICE9IE5VTEwpCiAJCXNlZ3MrKzsKIAorCS8qIGZvciBub3RlcyBzZWN0aW9uICovCisJc2VncysrOworCisJLyogSWYgc2VncyA+IFBOX1hOVU0oMHhmZmZmKSwgdGhlbiBlX3BobnVtIG92ZXJmbG93cy4gVG8gYXZvaWQKKwkgKiB0aGlzLCBrZXJuZWwgc3VwcG9ydHMgZXh0ZW5kZWQgbnVtYmVyaW5nLiBIYXZlIGEgbG9vayBhdAorCSAqIGluY2x1ZGUvbGludXgvZWxmLmggZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uICovCisJZV9waG51bSA9IHNlZ3MgPiBQTl9YTlVNID8gUE5fWE5VTSA6IHNlZ3M7CisKIAkvKgogCSAqIENvbGxlY3QgYWxsIHRoZSBub24tbWVtb3J5IGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9jZXNzIGZvciB0aGUKIAkgKiBub3Rlcy4gIFRoaXMgYWxzbyBzZXRzIHVwIHRoZSBmaWxlIGhlYWRlci4KIAkgKi8KLQlpZiAoIWZpbGxfbm90ZV9pbmZvKGVsZiwgc2VncyArIDEsIC8qIGluY2x1ZGluZyBub3RlcyBzZWN0aW9uICovCi0JCQkgICAgJmluZm8sIGNwcm0tPnNpZ25yLCBjcHJtLT5yZWdzKSkKKwlpZiAoIWZpbGxfbm90ZV9pbmZvKGVsZiwgZV9waG51bSwgJmluZm8sIGNwcm0tPnNpZ25yLCBjcHJtLT5yZWdzKSkKIAkJZ290byBjbGVhbnVwOwogCiAJaGFzX2R1bXBlZCA9IDE7CkBAIC0xOTM0LDMxICsxOTM2LDQ3IEBACiAJZnMgPSBnZXRfZnMoKTsKIAlzZXRfZnMoS0VSTkVMX0RTKTsKIAotCURVTVBfV1JJVEUoZWxmLCBzaXplb2YoKmVsZikpOwogCW9mZnNldCArPSBzaXplb2YoKmVsZik7CQkJCS8qIEVsZiBoZWFkZXIgKi8KLQlvZmZzZXQgKz0gKHNlZ3MgKyAxKSAqIHNpemVvZihzdHJ1Y3QgZWxmX3BoZHIpOyAvKiBQcm9ncmFtIGhlYWRlcnMgKi8KKwlvZmZzZXQgKz0gc2VncyAqIHNpemVvZihzdHJ1Y3QgZWxmX3BoZHIpOwkvKiBQcm9ncmFtIGhlYWRlcnMgKi8KIAlmb2Zmc2V0ID0gb2Zmc2V0OwogCiAJLyogV3JpdGUgbm90ZXMgcGhkciBlbnRyeSAqLwogCXsKLQkJc3RydWN0IGVsZl9waGRyIHBoZHI7CiAJCXNpemVfdCBzeiA9IGdldF9ub3RlX2luZm9fc2l6ZSgmaW5mbyk7CiAKIAkJc3ogKz0gZWxmX2NvcmVkdW1wX2V4dHJhX25vdGVzX3NpemUoKTsKIAotCQlmaWxsX2VsZl9ub3RlX3BoZHIoJnBoZHIsIHN6LCBvZmZzZXQpOworCQlwaGRyNG5vdGUgPSBrbWFsbG9jKHNpemVvZigqcGhkcjRub3RlKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcGhkcjRub3RlKQorCQkJZ290byBlbmRfY29yZWR1bXA7CisKKwkJZmlsbF9lbGZfbm90ZV9waGRyKHBoZHI0bm90ZSwgc3osIG9mZnNldCk7CiAJCW9mZnNldCArPSBzejsKLQkJRFVNUF9XUklURSgmcGhkciwgc2l6ZW9mKHBoZHIpKTsKIAl9CiAKIAlkYXRhb2ZmID0gb2Zmc2V0ID0gcm91bmR1cChvZmZzZXQsIEVMRl9FWEVDX1BBR0VTSVpFKTsKIAotCS8qCi0JICogV2UgbXVzdCB1c2UgdGhlIHNhbWUgbW0tPmZsYWdzIHdoaWxlIGR1bXBpbmcgY29yZSB0byBhdm9pZAotCSAqIGluY29uc2lzdGVuY3kgYmV0d2VlbiB0aGUgcHJvZ3JhbSBoZWFkZXJzIGFuZCBib2RpZXMsIG90aGVyd2lzZSBhbgotCSAqIHVudXNhYmxlIGNvcmUgZmlsZSBjYW4gYmUgZ2VuZXJhdGVkLgotCSAqLwotCW1tX2ZsYWdzID0gY3VycmVudC0+bW0tPmZsYWdzOworCW9mZnNldCArPSBlbGZfY29yZV92bWFfZGF0YV9zaXplKGdhdGVfdm1hLCBjcHJtLT5tbV9mbGFncyk7CisJb2Zmc2V0ICs9IGVsZl9jb3JlX2V4dHJhX2RhdGFfc2l6ZSgpOworCWVfc2hvZmYgPSBvZmZzZXQ7CisKKwlpZiAoZV9waG51bSA9PSBQTl9YTlVNKSB7CisJCXNoZHI0ZXh0bnVtID0ga21hbGxvYyhzaXplb2YoKnNoZHI0ZXh0bnVtKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc2hkcjRleHRudW0pCisJCQlnb3RvIGVuZF9jb3JlZHVtcDsKKwkJZmlsbF9leHRudW1faW5mbyhlbGYsIHNoZHI0ZXh0bnVtLCBlX3Nob2ZmLCBzZWdzKTsKKwl9CisKKwlvZmZzZXQgPSBkYXRhb2ZmOworCisJc2l6ZSArPSBzaXplb2YoKmVsZik7CisJaWYgKHNpemUgPiBjcHJtLT5saW1pdCB8fCAhZHVtcF93cml0ZShjcHJtLT5maWxlLCBlbGYsIHNpemVvZigqZWxmKSkpCisJCWdvdG8gZW5kX2NvcmVkdW1wOworCisJc2l6ZSArPSBzaXplb2YoKnBoZHI0bm90ZSk7CisJaWYgKHNpemUgPiBjcHJtLT5saW1pdAorCSAgICB8fCAhZHVtcF93cml0ZShjcHJtLT5maWxlLCBwaGRyNG5vdGUsIHNpemVvZigqcGhkcjRub3RlKSkpCisJCWdvdG8gZW5kX2NvcmVkdW1wOwogCiAJLyogV3JpdGUgcHJvZ3JhbSBoZWFkZXJzIGZvciBzZWdtZW50cyBkdW1wICovCiAJZm9yICh2bWEgPSBmaXJzdF92bWEoY3VycmVudCwgZ2F0ZV92bWEpOyB2bWEgIT0gTlVMTDsKQEAgLTE5NjksNyArMTk4Nyw3IEBACiAJCXBoZHIucF9vZmZzZXQgPSBvZmZzZXQ7CiAJCXBoZHIucF92YWRkciA9IHZtYS0+dm1fc3RhcnQ7CiAJCXBoZHIucF9wYWRkciA9IDA7Ci0JCXBoZHIucF9maWxlc3ogPSB2bWFfZHVtcF9zaXplKHZtYSwgbW1fZmxhZ3MpOworCQlwaGRyLnBfZmlsZXN6ID0gdm1hX2R1bXBfc2l6ZSh2bWEsIGNwcm0tPm1tX2ZsYWdzKTsKIAkJcGhkci5wX21lbXN6ID0gdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0OwogCQlvZmZzZXQgKz0gcGhkci5wX2ZpbGVzejsKIAkJcGhkci5wX2ZsYWdzID0gdm1hLT52bV9mbGFncyAmIFZNX1JFQUQgPyBQRl9SIDogMDsKQEAgLTE5NzksMTIgKzE5OTcsMTQgQEAKIAkJCXBoZHIucF9mbGFncyB8PSBQRl9YOwogCQlwaGRyLnBfYWxpZ24gPSBFTEZfRVhFQ19QQUdFU0laRTsKIAotCQlEVU1QX1dSSVRFKCZwaGRyLCBzaXplb2YocGhkcikpOworCQlzaXplICs9IHNpemVvZihwaGRyKTsKKwkJaWYgKHNpemUgPiBjcHJtLT5saW1pdAorCQkgICAgfHwgIWR1bXBfd3JpdGUoY3BybS0+ZmlsZSwgJnBoZHIsIHNpemVvZihwaGRyKSkpCisJCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAl9CiAKLSNpZmRlZiBFTEZfQ09SRV9XUklURV9FWFRSQV9QSERSUwotCUVMRl9DT1JFX1dSSVRFX0VYVFJBX1BIRFJTOwotI2VuZGlmCisJaWYgKCFlbGZfY29yZV93cml0ZV9leHRyYV9waGRycyhjcHJtLT5maWxlLCBvZmZzZXQsICZzaXplLCBjcHJtLT5saW1pdCkpCisJCWdvdG8gZW5kX2NvcmVkdW1wOwogCiAgCS8qIHdyaXRlIG91dCB0aGUgbm90ZXMgc2VjdGlvbiAqLwogCWlmICghd3JpdGVfbm90ZV9pbmZvKCZpbmZvLCBjcHJtLT5maWxlLCAmZm9mZnNldCkpCkBAIC0yMDAyLDcgKzIwMjIsNyBAQAogCQl1bnNpZ25lZCBsb25nIGFkZHI7CiAJCXVuc2lnbmVkIGxvbmcgZW5kOwogCi0JCWVuZCA9IHZtYS0+dm1fc3RhcnQgKyB2bWFfZHVtcF9zaXplKHZtYSwgbW1fZmxhZ3MpOworCQllbmQgPSB2bWEtPnZtX3N0YXJ0ICsgdm1hX2R1bXBfc2l6ZSh2bWEsIGNwcm0tPm1tX2ZsYWdzKTsKIAogCQlmb3IgKGFkZHIgPSB2bWEtPnZtX3N0YXJ0OyBhZGRyIDwgZW5kOyBhZGRyICs9IFBBR0VfU0laRSkgewogCQkJc3RydWN0IHBhZ2UgKnBhZ2U7CkBAIC0yMDIzLDE1ICsyMDQzLDI0IEBACiAJCX0KIAl9CiAKLSNpZmRlZiBFTEZfQ09SRV9XUklURV9FWFRSQV9EQVRBCi0JRUxGX0NPUkVfV1JJVEVfRVhUUkFfREFUQTsKLSNlbmRpZgorCWlmICghZWxmX2NvcmVfd3JpdGVfZXh0cmFfZGF0YShjcHJtLT5maWxlLCAmc2l6ZSwgY3BybS0+bGltaXQpKQorCQlnb3RvIGVuZF9jb3JlZHVtcDsKKworCWlmIChlX3BobnVtID09IFBOX1hOVU0pIHsKKwkJc2l6ZSArPSBzaXplb2YoKnNoZHI0ZXh0bnVtKTsKKwkJaWYgKHNpemUgPiBjcHJtLT5saW1pdAorCQkgICAgfHwgIWR1bXBfd3JpdGUoY3BybS0+ZmlsZSwgc2hkcjRleHRudW0sCisJCQkJICAgc2l6ZW9mKCpzaGRyNGV4dG51bSkpKQorCQkJZ290byBlbmRfY29yZWR1bXA7CisJfQogCiBlbmRfY29yZWR1bXA6CiAJc2V0X2ZzKGZzKTsKIAogY2xlYW51cDoKIAlmcmVlX25vdGVfaW5mbygmaW5mbyk7CisJa2ZyZWUoc2hkcjRleHRudW0pOworCWtmcmVlKHBoZHI0bm90ZSk7CiAJa2ZyZWUoZWxmKTsKIG91dDoKIAlyZXR1cm4gaGFzX2R1bXBlZDsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYyBiL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYwppbmRleCAxOGQ3NzI5Li4yYzMyZDAwIDEwMDY0NAotLS0gYS9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKKysrIGIvZnMvYmluZm10X2VsZl9mZHBpYy5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZWxmLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmLWZkcGljLmg+CiAjaW5jbHVkZSA8bGludXgvZWxmY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvcmVkdW1wLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wYXJhbS5oPgpAQCAtMTIxNiwyNiArMTIxNyw2IEBACiAjaWZkZWYgQ09ORklHX0VMRl9DT1JFCiAKIC8qCi0gKiBUaGVzZSBhcmUgdGhlIG9ubHkgdGhpbmdzIHlvdSBzaG91bGQgZG8gb24gYSBjb3JlLWZpbGU6IHVzZSBvbmx5IHRoZXNlCi0gKiBmdW5jdGlvbnMgdG8gd3JpdGUgb3V0IGFsbCB0aGUgbmVjZXNzYXJ5IGluZm8uCi0gKi8KLXN0YXRpYyBpbnQgZHVtcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYWRkciwgaW50IG5yKQotewotCXJldHVybiBmaWxlLT5mX29wLT53cml0ZShmaWxlLCBhZGRyLCBuciwgJmZpbGUtPmZfcG9zKSA9PSBucjsKLX0KLQotc3RhdGljIGludCBkdW1wX3NlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmYpCi17Ci0JaWYgKGZpbGUtPmZfb3AtPmxsc2VlaykgewotCQlpZiAoZmlsZS0+Zl9vcC0+bGxzZWVrKGZpbGUsIG9mZiwgU0VFS19TRVQpICE9IG9mZikKLQkJCXJldHVybiAwOwotCX0gZWxzZSB7Ci0JCWZpbGUtPmZfcG9zID0gb2ZmOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotLyoKICAqIERlY2lkZSB3aGV0aGVyIGEgc2VnbWVudCBpcyB3b3J0aCBkdW1waW5nOyBkZWZhdWx0IGlzIHllcyB0byBiZQogICogc3VyZSAobWlzc2luZyBpbmZvIGlzIHdvcnNlIHRoYW4gdG9vIG11Y2g7IGV0YykuCiAgKiBQZXJzb25hbGx5IEknZCBpbmNsdWRlIGV2ZXJ5dGhpbmcsIGFuZCB1c2UgdGhlIGNvcmVkdW1wIGxpbWl0Li4uCkBAIC0xMzEzLDM1ICsxMjk0LDM1IEBACiAKIC8qICNkZWZpbmUgREVCVUcgKi8KIAotI2RlZmluZSBEVU1QX1dSSVRFKGFkZHIsIG5yKQlcCi0JZG8geyBpZiAoIWR1bXBfd3JpdGUoZmlsZSwgKGFkZHIpLCAobnIpKSkgcmV0dXJuIDA7IH0gd2hpbGUoMCkKLSNkZWZpbmUgRFVNUF9TRUVLKG9mZikJXAotCWRvIHsgaWYgKCFkdW1wX3NlZWsoZmlsZSwgKG9mZikpKSByZXR1cm4gMDsgfSB3aGlsZSgwKQorI2RlZmluZSBEVU1QX1dSSVRFKGFkZHIsIG5yLCBmb2Zmc2V0KQlcCisJZG8geyBpZiAoIWR1bXBfd3JpdGUoZmlsZSwgKGFkZHIpLCAobnIpKSkgcmV0dXJuIDA7ICpmb2Zmc2V0ICs9IChucik7IH0gd2hpbGUoMCkKIAotc3RhdGljIGludCB3cml0ZW5vdGUoc3RydWN0IG1lbWVsZm5vdGUgKm1lbiwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGFsaWduZmlsZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90ICpmb2Zmc2V0KQoreworCXN0YXRpYyBjb25zdCBjaGFyIGJ1Zls0XSA9IHsgMCwgfTsKKwlEVU1QX1dSSVRFKGJ1Ziwgcm91bmR1cCgqZm9mZnNldCwgNCkgLSAqZm9mZnNldCwgZm9mZnNldCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVub3RlKHN0cnVjdCBtZW1lbGZub3RlICptZW4sIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJbG9mZl90ICpmb2Zmc2V0KQogewogCXN0cnVjdCBlbGZfbm90ZSBlbjsKLQogCWVuLm5fbmFtZXN6ID0gc3RybGVuKG1lbi0+bmFtZSkgKyAxOwogCWVuLm5fZGVzY3N6ID0gbWVuLT5kYXRhc3o7CiAJZW4ubl90eXBlID0gbWVuLT50eXBlOwogCi0JRFVNUF9XUklURSgmZW4sIHNpemVvZihlbikpOwotCURVTVBfV1JJVEUobWVuLT5uYW1lLCBlbi5uX25hbWVzeik7Ci0JLyogWFhYIC0gY2FzdCBmcm9tIGxvbmcgbG9uZyB0byBsb25nIHRvIGF2b2lkIG5lZWQgZm9yIGxpYmdjYy5hICovCi0JRFVNUF9TRUVLKHJvdW5kdXAoKHVuc2lnbmVkIGxvbmcpZmlsZS0+Zl9wb3MsIDQpKTsJLyogWFhYICovCi0JRFVNUF9XUklURShtZW4tPmRhdGEsIG1lbi0+ZGF0YXN6KTsKLQlEVU1QX1NFRUsocm91bmR1cCgodW5zaWduZWQgbG9uZylmaWxlLT5mX3BvcywgNCkpOwkvKiBYWFggKi8KKwlEVU1QX1dSSVRFKCZlbiwgc2l6ZW9mKGVuKSwgZm9mZnNldCk7CisJRFVNUF9XUklURShtZW4tPm5hbWUsIGVuLm5fbmFtZXN6LCBmb2Zmc2V0KTsKKwlpZiAoIWFsaWduZmlsZShmaWxlLCBmb2Zmc2V0KSkKKwkJcmV0dXJuIDA7CisJRFVNUF9XUklURShtZW4tPmRhdGEsIG1lbi0+ZGF0YXN6LCBmb2Zmc2V0KTsKKwlpZiAoIWFsaWduZmlsZShmaWxlLCBmb2Zmc2V0KSkKKwkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gMTsKIH0KICN1bmRlZiBEVU1QX1dSSVRFCi0jdW5kZWYgRFVNUF9TRUVLCi0KLSNkZWZpbmUgRFVNUF9XUklURShhZGRyLCBucikJCQkJXAotCWlmICgoc2l6ZSArPSAobnIpKSA+IGNwcm0tPmxpbWl0IHx8CQlcCi0JICAgICFkdW1wX3dyaXRlKGNwcm0tPmZpbGUsIChhZGRyKSwgKG5yKSkpCVwKLQkJZ290byBlbmRfY29yZWR1bXA7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsX2VsZl9mZHBpY19oZWFkZXIoc3RydWN0IGVsZmhkciAqZWxmLCBpbnQgc2VncykKIHsKQEAgLTEzOTMsNyArMTM3NCw3IEBACiAKIC8qCiAgKiBmaWxsIHVwIGFsbCB0aGUgZmllbGRzIGluIHByc3RhdHVzIGZyb20gdGhlIGdpdmVuIHRhc2sgc3RydWN0LCBleGNlcHQKLSAqIHJlZ2lzdGVycyB3aGljaCBuZWVkIHRvIGJlIGZpbGxlZCB1cCBzZXBlcmF0ZWx5LgorICogcmVnaXN0ZXJzIHdoaWNoIG5lZWQgdG8gYmUgZmlsbGVkIHVwIHNlcGFyYXRlbHkuCiAgKi8KIHN0YXRpYyB2b2lkIGZpbGxfcHJzdGF0dXMoc3RydWN0IGVsZl9wcnN0YXR1cyAqcHJzdGF0dXMsCiAJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgbG9uZyBzaWducikKQEAgLTE1MjQsNiArMTUwNSwyMiBAQAogCXJldHVybiBzejsKIH0KIAorc3RhdGljIHZvaWQgZmlsbF9leHRudW1faW5mbyhzdHJ1Y3QgZWxmaGRyICplbGYsIHN0cnVjdCBlbGZfc2hkciAqc2hkcjRleHRudW0sCisJCQkgICAgIGVsZl9hZGRyX3QgZV9zaG9mZiwgaW50IHNlZ3MpCit7CisJZWxmLT5lX3Nob2ZmID0gZV9zaG9mZjsKKwllbGYtPmVfc2hlbnRzaXplID0gc2l6ZW9mKCpzaGRyNGV4dG51bSk7CisJZWxmLT5lX3NobnVtID0gMTsKKwllbGYtPmVfc2hzdHJuZHggPSBTSE5fVU5ERUY7CisKKwltZW1zZXQoc2hkcjRleHRudW0sIDAsIHNpemVvZigqc2hkcjRleHRudW0pKTsKKworCXNoZHI0ZXh0bnVtLT5zaF90eXBlID0gU0hUX05VTEw7CisJc2hkcjRleHRudW0tPnNoX3NpemUgPSBlbGYtPmVfc2hudW07CisJc2hkcjRleHRudW0tPnNoX2xpbmsgPSBlbGYtPmVfc2hzdHJuZHg7CisJc2hkcjRleHRudW0tPnNoX2luZm8gPSBzZWdzOworfQorCiAvKgogICogZHVtcCB0aGUgc2VnbWVudHMgZm9yIGFuIE1NVSBwcm9jZXNzCiAgKi8KQEAgLTE1NTIsNyArMTU0OSw3IEBACiAJCQkJCWVyciA9IC1FSU87CiAJCQkJa3VubWFwKHBhZ2UpOwogCQkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQkJCX0gZWxzZSBpZiAoIWR1bXBfc2VlayhmaWxlLCBmaWxlLT5mX3BvcyArIFBBR0VfU0laRSkpCisJCQl9IGVsc2UgaWYgKCFkdW1wX3NlZWsoZmlsZSwgUEFHRV9TSVpFKSkKIAkJCQllcnIgPSAtRUZCSUc7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gb3V0OwpAQCAtMTU4OCw2ICsxNTg1LDE3IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIHNpemVfdCBlbGZfY29yZV92bWFfZGF0YV9zaXplKHVuc2lnbmVkIGxvbmcgbW1fZmxhZ3MpCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJc2l6ZV90IHNpemUgPSAwOworCisJZm9yICh2bWEgPSBjdXJyZW50LT5tbS0+bW1hcDsgdm1hOyB2bWEtPnZtX25leHQpCisJCWlmIChtYXlkdW1wKHZtYSwgbW1fZmxhZ3MpKQorCQkJc2l6ZSArPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7CisJcmV0dXJuIHNpemU7Cit9CisKIC8qCiAgKiBBY3R1YWwgZHVtcGVyCiAgKgpAQCAtMTYwNSw3ICsxNjEzLDcgQEAKIAlpbnQgaTsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlzdHJ1Y3QgZWxmaGRyICplbGYgPSBOVUxMOwotCWxvZmZfdCBvZmZzZXQgPSAwLCBkYXRhb2ZmOworCWxvZmZfdCBvZmZzZXQgPSAwLCBkYXRhb2ZmLCBmb2Zmc2V0OwogCWludCBudW1ub3RlOwogCXN0cnVjdCBtZW1lbGZub3RlICpub3RlcyA9IE5VTEw7CiAJc3RydWN0IGVsZl9wcnN0YXR1cyAqcHJzdGF0dXMgPSBOVUxMOwkvKiBOVF9QUlNUQVRVUyAqLwpAQCAtMTYxOCw3ICsxNjI2LDEwIEBACiAjZW5kaWYKIAlpbnQgdGhyZWFkX3N0YXR1c19zaXplID0gMDsKIAllbGZfYWRkcl90ICphdXh2OwotCXVuc2lnbmVkIGxvbmcgbW1fZmxhZ3M7CisJc3RydWN0IGVsZl9waGRyICpwaGRyNG5vdGUgPSBOVUxMOworCXN0cnVjdCBlbGZfc2hkciAqc2hkcjRleHRudW0gPSBOVUxMOworCUVsZl9IYWxmIGVfcGhudW07CisJZWxmX2FkZHJfdCBlX3Nob2ZmOwogCiAJLyoKIAkgKiBXZSBubyBsb25nZXIgc3RvcCBhbGwgVk0gb3BlcmF0aW9ucy4KQEAgLTE2ODMsMTIgKzE2OTQsMTggQEAKIAllbGZfY29yZV9jb3B5X3JlZ3MoJnByc3RhdHVzLT5wcl9yZWcsIGNwcm0tPnJlZ3MpOwogCiAJc2VncyA9IGN1cnJlbnQtPm1tLT5tYXBfY291bnQ7Ci0jaWZkZWYgRUxGX0NPUkVfRVhUUkFfUEhEUlMKLQlzZWdzICs9IEVMRl9DT1JFX0VYVFJBX1BIRFJTOwotI2VuZGlmCisJc2VncyArPSBlbGZfY29yZV9leHRyYV9waGRycygpOworCisJLyogZm9yIG5vdGVzIHNlY3Rpb24gKi8KKwlzZWdzKys7CisKKwkvKiBJZiBzZWdzID4gUE5fWE5VTSgweGZmZmYpLCB0aGVuIGVfcGhudW0gb3ZlcmZsb3dzLiBUbyBhdm9pZAorCSAqIHRoaXMsIGtlcm5lbCBzdXBwb3J0cyBleHRlbmRlZCBudW1iZXJpbmcuIEhhdmUgYSBsb29rIGF0CisJICogaW5jbHVkZS9saW51eC9lbGYuaCBmb3IgZnVydGhlciBpbmZvcm1hdGlvbi4gKi8KKwllX3BobnVtID0gc2VncyA+IFBOX1hOVU0gPyBQTl9YTlVNIDogc2VnczsKIAogCS8qIFNldCB1cCBoZWFkZXIgKi8KLQlmaWxsX2VsZl9mZHBpY19oZWFkZXIoZWxmLCBzZWdzICsgMSk7CS8qIGluY2x1ZGluZyBub3RlcyBzZWN0aW9uICovCisJZmlsbF9lbGZfZmRwaWNfaGVhZGVyKGVsZiwgZV9waG51bSk7CiAKIAloYXNfZHVtcGVkID0gMTsKIAljdXJyZW50LT5mbGFncyB8PSBQRl9EVU1QQ09SRTsKQEAgLTE3MjcsMTMgKzE3NDQsMTIgQEAKIAlmcyA9IGdldF9mcygpOwogCXNldF9mcyhLRVJORUxfRFMpOwogCi0JRFVNUF9XUklURShlbGYsIHNpemVvZigqZWxmKSk7CiAJb2Zmc2V0ICs9IHNpemVvZigqZWxmKTsJCQkJLyogRWxmIGhlYWRlciAqLwotCW9mZnNldCArPSAoc2VncysxKSAqIHNpemVvZihzdHJ1Y3QgZWxmX3BoZHIpOwkvKiBQcm9ncmFtIGhlYWRlcnMgKi8KKwlvZmZzZXQgKz0gc2VncyAqIHNpemVvZihzdHJ1Y3QgZWxmX3BoZHIpOwkvKiBQcm9ncmFtIGhlYWRlcnMgKi8KKwlmb2Zmc2V0ID0gb2Zmc2V0OwogCiAJLyogV3JpdGUgbm90ZXMgcGhkciBlbnRyeSAqLwogCXsKLQkJc3RydWN0IGVsZl9waGRyIHBoZHI7CiAJCWludCBzeiA9IDA7CiAKIAkJZm9yIChpID0gMDsgaSA8IG51bW5vdGU7IGkrKykKQEAgLTE3NDEsMjAgKzE3NTcsMzggQEAKIAogCQlzeiArPSB0aHJlYWRfc3RhdHVzX3NpemU7CiAKLQkJZmlsbF9lbGZfbm90ZV9waGRyKCZwaGRyLCBzeiwgb2Zmc2V0KTsKKwkJcGhkcjRub3RlID0ga21hbGxvYyhzaXplb2YoKnBoZHI0bm90ZSksIEdGUF9LRVJORUwpOworCQlpZiAoIXBoZHI0bm90ZSkKKwkJCWdvdG8gZW5kX2NvcmVkdW1wOworCisJCWZpbGxfZWxmX25vdGVfcGhkcihwaGRyNG5vdGUsIHN6LCBvZmZzZXQpOwogCQlvZmZzZXQgKz0gc3o7Ci0JCURVTVBfV1JJVEUoJnBoZHIsIHNpemVvZihwaGRyKSk7CiAJfQogCiAJLyogUGFnZS1hbGlnbiBkdW1wZWQgZGF0YSAqLwogCWRhdGFvZmYgPSBvZmZzZXQgPSByb3VuZHVwKG9mZnNldCwgRUxGX0VYRUNfUEFHRVNJWkUpOwogCi0JLyoKLQkgKiBXZSBtdXN0IHVzZSB0aGUgc2FtZSBtbS0+ZmxhZ3Mgd2hpbGUgZHVtcGluZyBjb3JlIHRvIGF2b2lkCi0JICogaW5jb25zaXN0ZW5jeSBiZXR3ZWVuIHRoZSBwcm9ncmFtIGhlYWRlcnMgYW5kIGJvZGllcywgb3RoZXJ3aXNlIGFuCi0JICogdW51c2FibGUgY29yZSBmaWxlIGNhbiBiZSBnZW5lcmF0ZWQuCi0JICovCi0JbW1fZmxhZ3MgPSBjdXJyZW50LT5tbS0+ZmxhZ3M7CisJb2Zmc2V0ICs9IGVsZl9jb3JlX3ZtYV9kYXRhX3NpemUoY3BybS0+bW1fZmxhZ3MpOworCW9mZnNldCArPSBlbGZfY29yZV9leHRyYV9kYXRhX3NpemUoKTsKKwllX3Nob2ZmID0gb2Zmc2V0OworCisJaWYgKGVfcGhudW0gPT0gUE5fWE5VTSkgeworCQlzaGRyNGV4dG51bSA9IGttYWxsb2Moc2l6ZW9mKCpzaGRyNGV4dG51bSksIEdGUF9LRVJORUwpOworCQlpZiAoIXNoZHI0ZXh0bnVtKQorCQkJZ290byBlbmRfY29yZWR1bXA7CisJCWZpbGxfZXh0bnVtX2luZm8oZWxmLCBzaGRyNGV4dG51bSwgZV9zaG9mZiwgc2Vncyk7CisJfQorCisJb2Zmc2V0ID0gZGF0YW9mZjsKKworCXNpemUgKz0gc2l6ZW9mKCplbGYpOworCWlmIChzaXplID4gY3BybS0+bGltaXQgfHwgIWR1bXBfd3JpdGUoY3BybS0+ZmlsZSwgZWxmLCBzaXplb2YoKmVsZikpKQorCQlnb3RvIGVuZF9jb3JlZHVtcDsKKworCXNpemUgKz0gc2l6ZW9mKCpwaGRyNG5vdGUpOworCWlmIChzaXplID4gY3BybS0+bGltaXQKKwkgICAgfHwgIWR1bXBfd3JpdGUoY3BybS0+ZmlsZSwgcGhkcjRub3RlLCBzaXplb2YoKnBoZHI0bm90ZSkpKQorCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAogCS8qIHdyaXRlIHByb2dyYW0gaGVhZGVycyBmb3Igc2VnbWVudHMgZHVtcCAqLwogCWZvciAodm1hID0gY3VycmVudC0+bW0tPm1tYXA7IHZtYTsgdm1hID0gdm1hLT52bV9uZXh0KSB7CkBAIC0xNzY3LDcgKzE4MDEsNyBAQAogCQlwaGRyLnBfb2Zmc2V0ID0gb2Zmc2V0OwogCQlwaGRyLnBfdmFkZHIgPSB2bWEtPnZtX3N0YXJ0OwogCQlwaGRyLnBfcGFkZHIgPSAwOwotCQlwaGRyLnBfZmlsZXN6ID0gbWF5ZHVtcCh2bWEsIG1tX2ZsYWdzKSA/IHN6IDogMDsKKwkJcGhkci5wX2ZpbGVzeiA9IG1heWR1bXAodm1hLCBjcHJtLT5tbV9mbGFncykgPyBzeiA6IDA7CiAJCXBoZHIucF9tZW1zeiA9IHN6OwogCQlvZmZzZXQgKz0gcGhkci5wX2ZpbGVzejsKIAkJcGhkci5wX2ZsYWdzID0gdm1hLT52bV9mbGFncyAmIFZNX1JFQUQgPyBQRl9SIDogMDsKQEAgLTE3NzcsMTYgKzE4MTEsMTggQEAKIAkJCXBoZHIucF9mbGFncyB8PSBQRl9YOwogCQlwaGRyLnBfYWxpZ24gPSBFTEZfRVhFQ19QQUdFU0laRTsKIAotCQlEVU1QX1dSSVRFKCZwaGRyLCBzaXplb2YocGhkcikpOworCQlzaXplICs9IHNpemVvZihwaGRyKTsKKwkJaWYgKHNpemUgPiBjcHJtLT5saW1pdAorCQkgICAgfHwgIWR1bXBfd3JpdGUoY3BybS0+ZmlsZSwgJnBoZHIsIHNpemVvZihwaGRyKSkpCisJCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAl9CiAKLSNpZmRlZiBFTEZfQ09SRV9XUklURV9FWFRSQV9QSERSUwotCUVMRl9DT1JFX1dSSVRFX0VYVFJBX1BIRFJTOwotI2VuZGlmCisJaWYgKCFlbGZfY29yZV93cml0ZV9leHRyYV9waGRycyhjcHJtLT5maWxlLCBvZmZzZXQsICZzaXplLCBjcHJtLT5saW1pdCkpCisJCWdvdG8gZW5kX2NvcmVkdW1wOwogCiAgCS8qIHdyaXRlIG91dCB0aGUgbm90ZXMgc2VjdGlvbiAqLwogCWZvciAoaSA9IDA7IGkgPCBudW1ub3RlOyBpKyspCi0JCWlmICghd3JpdGVub3RlKG5vdGVzICsgaSwgY3BybS0+ZmlsZSkpCisJCWlmICghd3JpdGVub3RlKG5vdGVzICsgaSwgY3BybS0+ZmlsZSwgJmZvZmZzZXQpKQogCQkJZ290byBlbmRfY29yZWR1bXA7CiAKIAkvKiB3cml0ZSBvdXQgdGhlIHRocmVhZCBzdGF0dXMgbm90ZXMgc2VjdGlvbiAqLwpAQCAtMTc5NSwyMCArMTgzMSwyNyBAQAogCQkJCWxpc3RfZW50cnkodCwgc3RydWN0IGVsZl90aHJlYWRfc3RhdHVzLCBsaXN0KTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgdG1wLT5udW1fbm90ZXM7IGkrKykKLQkJCWlmICghd3JpdGVub3RlKCZ0bXAtPm5vdGVzW2ldLCBjcHJtLT5maWxlKSkKKwkJCWlmICghd3JpdGVub3RlKCZ0bXAtPm5vdGVzW2ldLCBjcHJtLT5maWxlLCAmZm9mZnNldCkpCiAJCQkJZ290byBlbmRfY29yZWR1bXA7CiAJfQogCi0JaWYgKCFkdW1wX3NlZWsoY3BybS0+ZmlsZSwgZGF0YW9mZikpCisJaWYgKCFkdW1wX3NlZWsoY3BybS0+ZmlsZSwgZGF0YW9mZiAtIGZvZmZzZXQpKQogCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAogCWlmIChlbGZfZmRwaWNfZHVtcF9zZWdtZW50cyhjcHJtLT5maWxlLCAmc2l6ZSwgJmNwcm0tPmxpbWl0LAotCQkJCSAgICBtbV9mbGFncykgPCAwKQorCQkJCSAgICBjcHJtLT5tbV9mbGFncykgPCAwKQogCQlnb3RvIGVuZF9jb3JlZHVtcDsKIAotI2lmZGVmIEVMRl9DT1JFX1dSSVRFX0VYVFJBX0RBVEEKLQlFTEZfQ09SRV9XUklURV9FWFRSQV9EQVRBOwotI2VuZGlmCisJaWYgKCFlbGZfY29yZV93cml0ZV9leHRyYV9kYXRhKGNwcm0tPmZpbGUsICZzaXplLCBjcHJtLT5saW1pdCkpCisJCWdvdG8gZW5kX2NvcmVkdW1wOworCisJaWYgKGVfcGhudW0gPT0gUE5fWE5VTSkgeworCQlzaXplICs9IHNpemVvZigqc2hkcjRleHRudW0pOworCQlpZiAoc2l6ZSA+IGNwcm0tPmxpbWl0CisJCSAgICB8fCAhZHVtcF93cml0ZShjcHJtLT5maWxlLCBzaGRyNGV4dG51bSwKKwkJCQkgICBzaXplb2YoKnNoZHI0ZXh0bnVtKSkpCisJCQlnb3RvIGVuZF9jb3JlZHVtcDsKKwl9CiAKIAlpZiAoY3BybS0+ZmlsZS0+Zl9wb3MgIT0gb2Zmc2V0KSB7CiAJCS8qIFNhbml0eSBjaGVjayAqLwpAQCAtMTgyNiw3ICsxODY5LDcgQEAKIAkJbGlzdF9kZWwodG1wKTsKIAkJa2ZyZWUobGlzdF9lbnRyeSh0bXAsIHN0cnVjdCBlbGZfdGhyZWFkX3N0YXR1cywgbGlzdCkpOwogCX0KLQorCWtmcmVlKHBoZHI0bm90ZSk7CiAJa2ZyZWUoZWxmKTsKIAlrZnJlZShwcnN0YXR1cyk7CiAJa2ZyZWUocHNpbmZvKTsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9mbGF0LmMgYi9mcy9iaW5mbXRfZmxhdC5jCmluZGV4IDQyYzZiNGEuLmUwZTc2OWIgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9mbGF0LmMKKysrIGIvZnMvYmluZm10X2ZsYXQuYwpAQCAtNTAxLDcgKzUwMSw3IEBACiAJICogc2l6ZSBsaW1pdHMgaW1wb3NlZCBvbiB0aGVtIGJ5IGNyZWF0aW5nIHByb2dyYW1zIHdpdGggbGFyZ2UKIAkgKiBhcnJheXMgaW4gdGhlIGRhdGEgb3IgYnNzLgogCSAqLwotCXJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0RBVEFdLnJsaW1fY3VyOworCXJsaW0gPSBybGltaXQoUkxJTUlUX0RBVEEpOwogCWlmIChybGltID49IFJMSU1fSU5GSU5JVFkpCiAJCXJsaW0gPSB+MDsKIAlpZiAoZGF0YV9sZW4gKyBic3NfbGVuID4gcmxpbSkgewpkaWZmIC0tZ2l0IGEvZnMvYmlvLmMgYi9mcy9iaW8uYwppbmRleCAwYmRhMjg5Zi4uZTFmOTIyMSAxMDA2NDQKLS0tIGEvZnMvYmlvLmMKKysrIGIvZnMvYmlvLmMKQEAgLTI2NCwxMyArMjY0LDEyIEBACiAgKiBiaW9fYWxsb2NfYmlvc2V0IC0gYWxsb2NhdGUgYSBiaW8gZm9yIEkvTwogICogQGdmcF9tYXNrOiAgIHRoZSBHRlBfIG1hc2sgZ2l2ZW4gdG8gdGhlIHNsYWIgYWxsb2NhdG9yCiAgKiBAbnJfaW92ZWNzOgludW1iZXIgb2YgaW92ZWNzIHRvIHByZS1hbGxvY2F0ZQotICogQGJzOgkJdGhlIGJpb19zZXQgdG8gYWxsb2NhdGUgZnJvbS4gSWYgJU5VTEwsIGp1c3QgdXNlIGttYWxsb2MKKyAqIEBiczoJCXRoZSBiaW9fc2V0IHRvIGFsbG9jYXRlIGZyb20uCiAgKgogICogRGVzY3JpcHRpb246Ci0gKiAgIGJpb19hbGxvY19iaW9zZXQgd2lsbCBmaXJzdCB0cnkgaXRzIG93biBtZW1wb29sIHRvIHNhdGlzZnkgdGhlIGFsbG9jYXRpb24uCisgKiAgIGJpb19hbGxvY19iaW9zZXQgd2lsbCB0cnkgaXRzIG93biBtZW1wb29sIHRvIHNhdGlzZnkgdGhlIGFsbG9jYXRpb24uCiAgKiAgIElmICVfX0dGUF9XQUlUIGlzIHNldCB0aGVuIHdlIHdpbGwgYmxvY2sgb24gdGhlIGludGVybmFsIHBvb2wgd2FpdGluZwotICogICBmb3IgYSAmc3RydWN0IGJpbyB0byBiZWNvbWUgZnJlZS4gSWYgYSAlTlVMTCBAYnMgaXMgcGFzc2VkIGluLCB3ZSB3aWxsCi0gKiAgIGZhbGwgYmFjayB0byBqdXN0IHVzaW5nIEBrbWFsbG9jIHRvIGFsbG9jYXRlIHRoZSByZXF1aXJlZCBtZW1vcnkuCisgKiAgIGZvciBhICZzdHJ1Y3QgYmlvIHRvIGJlY29tZSBmcmVlLgogICoKICAqICAgTm90ZSB0aGF0IHRoZSBjYWxsZXIgbXVzdCBzZXQgLT5iaV9kZXN0cnVjdG9yIG9uIHN1Y2Nlc3NmdWwgcmV0dXJuCiAgKiAgIG9mIGEgYmlvLCB0byBkbyB0aGUgYXBwcm9wcmlhdGUgZnJlZWluZyBvZiB0aGUgYmlvIG9uY2UgdGhlIHJlZmVyZW5jZQpAQCAtNTU1LDcgKzU1NCw3IEBACiAJCQkJCS5iaV9ydyA9IGJpby0+YmlfcncsCiAJCQkJfTsKIAotCQkJCWlmIChxLT5tZXJnZV9idmVjX2ZuKHEsICZidm0sIHByZXYpICE9IHByZXYtPmJ2X2xlbikgeworCQkJCWlmIChxLT5tZXJnZV9idmVjX2ZuKHEsICZidm0sIHByZXYpIDwgbGVuKSB7CiAJCQkJCXByZXYtPmJ2X2xlbiAtPSBsZW47CiAJCQkJCXJldHVybiAwOwogCQkJCX0KQEAgLTYwOCw3ICs2MDcsNyBAQAogCQkgKiBtZXJnZV9idmVjX2ZuKCkgcmV0dXJucyBudW1iZXIgb2YgYnl0ZXMgaXQgY2FuIGFjY2VwdAogCQkgKiBhdCB0aGlzIG9mZnNldAogCQkgKi8KLQkJaWYgKHEtPm1lcmdlX2J2ZWNfZm4ocSwgJmJ2bSwgYnZlYykgIT0gYnZlYy0+YnZfbGVuKSB7CisJCWlmIChxLT5tZXJnZV9idmVjX2ZuKHEsICZidm0sIGJ2ZWMpIDwgbGVuKSB7CiAJCQlidmVjLT5idl9wYWdlID0gTlVMTDsKIAkJCWJ2ZWMtPmJ2X2xlbiA9IDA7CiAJCQlidmVjLT5idl9vZmZzZXQgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvY3RyZWUuaCBiL2ZzL2J0cmZzL2N0cmVlLmgKaW5kZXggMmFhOGVjNi4uOGI1Y2ZkZCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvY3RyZWUuaAorKysgYi9mcy9idHJmcy9jdHJlZS5oCkBAIC0yMzI2LDcgKzIzMjYsNyBAQAogaW50IGJ0cmZzX3JlYWRwYWdlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CiB2b2lkIGJ0cmZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIHZvaWQgYnRyZnNfcHV0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotaW50IGJ0cmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KTsKK2ludCBidHJmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CiB2b2lkIGJ0cmZzX2RpcnR5X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogc3RydWN0IGlub2RlICpidHJmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIHZvaWQgYnRyZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2Rpc2staW8uYyBiL2ZzL2J0cmZzL2Rpc2staW8uYwppbmRleCAyYjU5MjAxLi4wNDI3MTgzIDEwMDY0NAotLS0gYS9mcy9idHJmcy9kaXNrLWlvLmMKKysrIGIvZnMvYnRyZnMvZGlzay1pby5jCkBAIC05MDEsNyArOTAxLDcgQEAKIAlyb290LT5oaWdoZXN0X29iamVjdGlkID0gMDsKIAlyb290LT5uYW1lID0gTlVMTDsKIAlyb290LT5pbl9zeXNmcyA9IDA7Ci0Jcm9vdC0+aW5vZGVfdHJlZS5yYl9ub2RlID0gTlVMTDsKKwlyb290LT5pbm9kZV90cmVlID0gUkJfUk9PVDsKIAogCUlOSVRfTElTVF9IRUFEKCZyb290LT5kaXJ0eV9saXN0KTsKIAlJTklUX0xJU1RfSEVBRCgmcm9vdC0+b3JwaGFuX2xpc3QpOwpAQCAtMTY3Myw3ICsxNjczLDcgQEAKIAlpbnNlcnRfaW5vZGVfaGFzaChmc19pbmZvLT5idHJlZV9pbm9kZSk7CiAKIAlzcGluX2xvY2tfaW5pdCgmZnNfaW5mby0+YmxvY2tfZ3JvdXBfY2FjaGVfbG9jayk7Ci0JZnNfaW5mby0+YmxvY2tfZ3JvdXBfY2FjaGVfdHJlZS5yYl9ub2RlID0gTlVMTDsKKwlmc19pbmZvLT5ibG9ja19ncm91cF9jYWNoZV90cmVlID0gUkJfUk9PVDsKIAogCWV4dGVudF9pb190cmVlX2luaXQoJmZzX2luZm8tPmZyZWVkX2V4dGVudHNbMF0sCiAJCQkgICAgIGZzX2luZm8tPmJ0cmVlX2lub2RlLT5pX21hcHBpbmcsIEdGUF9OT0ZTKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9pby5jIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKaW5kZXggYjE3N2VkMy4uNzA3M2NiYiAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvZXh0ZW50X2lvLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X2lvLmMKQEAgLTEwNCw4ICsxMDQsOCBAQAogdm9pZCBleHRlbnRfaW9fdHJlZV9pbml0KHN0cnVjdCBleHRlbnRfaW9fdHJlZSAqdHJlZSwKIAkJCSAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGdmcF90IG1hc2spCiB7Ci0JdHJlZS0+c3RhdGUucmJfbm9kZSA9IE5VTEw7Ci0JdHJlZS0+YnVmZmVyLnJiX25vZGUgPSBOVUxMOworCXRyZWUtPnN0YXRlID0gUkJfUk9PVDsKKwl0cmVlLT5idWZmZXIgPSBSQl9ST09UOwogCXRyZWUtPm9wcyA9IE5VTEw7CiAJdHJlZS0+ZGlydHlfYnl0ZXMgPSAwOwogCXNwaW5fbG9ja19pbml0KCZ0cmVlLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2V4dGVudF9tYXAuYyBiL2ZzL2J0cmZzL2V4dGVudF9tYXAuYwppbmRleCA0MjhmY2FjLi4yOGQ4N2JhIDEwMDY0NAotLS0gYS9mcy9idHJmcy9leHRlbnRfbWFwLmMKKysrIGIvZnMvYnRyZnMvZXh0ZW50X21hcC5jCkBAIC0zNSw3ICszNSw3IEBACiAgKi8KIHZvaWQgZXh0ZW50X21hcF90cmVlX2luaXQoc3RydWN0IGV4dGVudF9tYXBfdHJlZSAqdHJlZSwgZ2ZwX3QgbWFzaykKIHsKLQl0cmVlLT5tYXAucmJfbm9kZSA9IE5VTEw7CisJdHJlZS0+bWFwID0gUkJfUk9PVDsKIAlyd2xvY2tfaW5pdCgmdHJlZS0+bG9jayk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYyBiL2ZzL2J0cmZzL2ZyZWUtc3BhY2UtY2FjaGUuYwppbmRleCBjYjI4NDlmLi5kZDgzMWVkIDEwMDY0NAotLS0gYS9mcy9idHJmcy9mcmVlLXNwYWNlLWNhY2hlLmMKKysrIGIvZnMvYnRyZnMvZnJlZS1zcGFjZS1jYWNoZS5jCkBAIC04NzAsNyArODcwLDcgQEAKIAkJdHJlZV9pbnNlcnRfb2Zmc2V0KCZibG9ja19ncm91cC0+ZnJlZV9zcGFjZV9vZmZzZXQsCiAJCQkJICAgZW50cnktPm9mZnNldCwgJmVudHJ5LT5vZmZzZXRfaW5kZXgsIDApOwogCX0KLQljbHVzdGVyLT5yb290LnJiX25vZGUgPSBOVUxMOworCWNsdXN0ZXItPnJvb3QgPSBSQl9ST09UOwogCiBvdXQ6CiAJc3Bpbl91bmxvY2soJmNsdXN0ZXItPmxvY2spOwpAQCAtMTM1NSw3ICsxMzU1LDcgQEAKIHsKIAlzcGluX2xvY2tfaW5pdCgmY2x1c3Rlci0+bG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmNsdXN0ZXItPnJlZmlsbF9sb2NrKTsKLQljbHVzdGVyLT5yb290LnJiX25vZGUgPSBOVUxMOworCWNsdXN0ZXItPnJvb3QgPSBSQl9ST09UOwogCWNsdXN0ZXItPm1heF9zaXplID0gMDsKIAljbHVzdGVyLT5wb2ludHNfdG9fYml0bWFwID0gZmFsc2U7CiAJSU5JVF9MSVNUX0hFQUQoJmNsdXN0ZXItPmJsb2NrX2dyb3VwX2xpc3QpOwpkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvaW5vZGUuYyBiL2ZzL2J0cmZzL2lub2RlLmMKaW5kZXggNGRlYjI4MC4uYzQxZGI2ZCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvaW5vZGUuYworKysgYi9mcy9idHJmcy9pbm9kZS5jCkBAIC0zOTY4LDcgKzM5NjgsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLWludCBidHJmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCkKK2ludCBidHJmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlzdHJ1Y3QgYnRyZnNfcm9vdCAqcm9vdCA9IEJUUkZTX0koaW5vZGUpLT5yb290OwogCXN0cnVjdCBidHJmc190cmFuc19oYW5kbGUgKnRyYW5zOwpAQCAtMzk3Nyw3ICszOTc3LDcgQEAKIAlpZiAocm9vdC0+ZnNfaW5mby0+YnRyZWVfaW5vZGUgPT0gaW5vZGUpCiAJCXJldHVybiAwOwogCi0JaWYgKHdhaXQpIHsKKwlpZiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpIHsKIAkJdHJhbnMgPSBidHJmc19qb2luX3RyYW5zYWN0aW9uKHJvb3QsIDEpOwogCQlidHJmc19zZXRfdHJhbnNfYmxvY2tfZ3JvdXAodHJhbnMsIGlub2RlKTsKIAkJcmV0ID0gYnRyZnNfY29tbWl0X3RyYW5zYWN0aW9uKHRyYW5zLCByb290KTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL29yZGVyZWQtZGF0YS5oIGIvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmgKaW5kZXggMWZlMTI4Mi4uOTExNmM2ZCAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmgKKysrIGIvZnMvYnRyZnMvb3JkZXJlZC1kYXRhLmgKQEAgLTEyOSw3ICsxMjksNyBAQAogYnRyZnNfb3JkZXJlZF9pbm9kZV90cmVlX2luaXQoc3RydWN0IGJ0cmZzX29yZGVyZWRfaW5vZGVfdHJlZSAqdCkKIHsKIAltdXRleF9pbml0KCZ0LT5tdXRleCk7Ci0JdC0+dHJlZS5yYl9ub2RlID0gTlVMTDsKKwl0LT50cmVlID0gUkJfUk9PVDsKIAl0LT5sYXN0ID0gTlVMTDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvYnRyZnMvcmVmLWNhY2hlLmggYi9mcy9idHJmcy9yZWYtY2FjaGUuaAppbmRleCBiYzI4M2FkLi5lMmE1NWNiIDEwMDY0NAotLS0gYS9mcy9idHJmcy9yZWYtY2FjaGUuaAorKysgYi9mcy9idHJmcy9yZWYtY2FjaGUuaApAQCAtNTIsNyArNTIsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYnRyZnNfbGVhZl9yZWZfdHJlZV9pbml0KHN0cnVjdCBidHJmc19sZWFmX3JlZl90cmVlICp0cmVlKQogewotCXRyZWUtPnJvb3QucmJfbm9kZSA9IE5VTEw7CisJdHJlZS0+cm9vdCA9IFJCX1JPT1Q7CiAJSU5JVF9MSVNUX0hFQUQoJnRyZWUtPmxpc3QpOwogCXNwaW5fbG9ja19pbml0KCZ0cmVlLT5sb2NrKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3JlbG9jYXRpb24uYyBiL2ZzL2J0cmZzL3JlbG9jYXRpb24uYwppbmRleCBhYjdhYjUzLi4wMTA5ZTU2IDEwMDY0NAotLS0gYS9mcy9idHJmcy9yZWxvY2F0aW9uLmMKKysrIGIvZnMvYnRyZnMvcmVsb2NhdGlvbi5jCkBAIC0xNzAsMTQgKzE3MCwxNCBAQAogCiBzdGF0aWMgdm9pZCBtYXBwaW5nX3RyZWVfaW5pdChzdHJ1Y3QgbWFwcGluZ190cmVlICp0cmVlKQogewotCXRyZWUtPnJiX3Jvb3QucmJfbm9kZSA9IE5VTEw7CisJdHJlZS0+cmJfcm9vdCA9IFJCX1JPT1Q7CiAJc3Bpbl9sb2NrX2luaXQoJnRyZWUtPmxvY2spOwogfQogCiBzdGF0aWMgdm9pZCBiYWNrcmVmX2NhY2hlX2luaXQoc3RydWN0IGJhY2tyZWZfY2FjaGUgKmNhY2hlKQogewogCWludCBpOwotCWNhY2hlLT5yYl9yb290LnJiX25vZGUgPSBOVUxMOworCWNhY2hlLT5yYl9yb290ID0gUkJfUk9PVDsKIAlmb3IgKGkgPSAwOyBpIDwgQlRSRlNfTUFYX0xFVkVMOyBpKyspCiAJCUlOSVRfTElTVF9IRUFEKCZjYWNoZS0+cGVuZGluZ1tpXSk7CiAJc3Bpbl9sb2NrX2luaXQoJmNhY2hlLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2J0cmZzL3N1cGVyLmMgYi9mcy9idHJmcy9zdXBlci5jCmluZGV4IDhhMWVhNmUuLmY4YjQ1MjEgMTAwNjQ0Ci0tLSBhL2ZzL2J0cmZzL3N1cGVyLmMKKysrIGIvZnMvYnRyZnMvc3VwZXIuYwpAQCAtMTI4LDcgKzEyOCw3IEBACiB7CiAJc3RydWN0IGJ0cmZzX2ZzX2luZm8gKmluZm8gPSByb290LT5mc19pbmZvOwogCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKLQljaGFyICpwLCAqbnVtOworCWNoYXIgKnAsICpudW0sICpvcmlnOwogCWludCBpbnRhcmc7CiAJaW50IHJldCA9IDA7CiAKQEAgLTE0Myw2ICsxNDMsNyBAQAogCWlmICghb3B0aW9ucykKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlvcmlnID0gb3B0aW9uczsKIAogCXdoaWxlICgocCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgewogCQlpbnQgdG9rZW47CkBAIC0yODAsNyArMjgxLDcgQEAKIAkJfQogCX0KIG91dDoKLQlrZnJlZShvcHRpb25zKTsKKwlrZnJlZShvcmlnKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9mcy9idHJmcy9zeXNmcy5jIGIvZnMvYnRyZnMvc3lzZnMuYwppbmRleCBhMjQwYjZmLi40Y2UxNmVmNyAxMDA2NDQKLS0tIGEvZnMvYnRyZnMvc3lzZnMuYworKysgYi9mcy9idHJmcy9zeXNmcy5jCkBAIC0xNjQsMTIgKzE2NCwxMiBAQAogCWNvbXBsZXRlKCZyb290LT5rb2JqX3VucmVnaXN0ZXIpOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBidHJmc19zdXBlcl9hdHRyX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIGJ0cmZzX3N1cGVyX2F0dHJfb3BzID0gewogCS5zaG93CT0gYnRyZnNfc3VwZXJfYXR0cl9zaG93LAogCS5zdG9yZQk9IGJ0cmZzX3N1cGVyX2F0dHJfc3RvcmUsCiB9OwogCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBidHJmc19yb290X2F0dHJfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgYnRyZnNfcm9vdF9hdHRyX29wcyA9IHsKIAkuc2hvdwk9IGJ0cmZzX3Jvb3RfYXR0cl9zaG93LAogCS5zdG9yZQk9IGJ0cmZzX3Jvb3RfYXR0cl9zdG9yZSwKIH07CmRpZmYgLS1naXQgYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jIGIvZnMvYnRyZnMvdHJhbnNhY3Rpb24uYwppbmRleCBiMmFjYzc5Li4yYTM2ZTIzIDEwMDY0NAotLS0gYS9mcy9idHJmcy90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2J0cmZzL3RyYW5zYWN0aW9uLmMKQEAgLTY5LDcgKzY5LDcgQEAKIAkJY3VyX3RyYW5zLT5jb21taXRfZG9uZSA9IDA7CiAJCWN1cl90cmFucy0+c3RhcnRfdGltZSA9IGdldF9zZWNvbmRzKCk7CiAKLQkJY3VyX3RyYW5zLT5kZWxheWVkX3JlZnMucm9vdC5yYl9ub2RlID0gTlVMTDsKKwkJY3VyX3RyYW5zLT5kZWxheWVkX3JlZnMucm9vdCA9IFJCX1JPT1Q7CiAJCWN1cl90cmFucy0+ZGVsYXllZF9yZWZzLm51bV9lbnRyaWVzID0gMDsKIAkJY3VyX3RyYW5zLT5kZWxheWVkX3JlZnMubnVtX2hlYWRzX3JlYWR5ID0gMDsKIAkJY3VyX3RyYW5zLT5kZWxheWVkX3JlZnMubnVtX2hlYWRzID0gMDsKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggNmZhNTMwMi4uYzljMjY2ZCAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKKysrIGIvZnMvYnVmZmVyLmMKQEAgLTI4OTMsNyArMjg5Myw3IEBACiAKIAkvKgogCSAqIFRoZSBwYWdlIHN0cmFkZGxlcyBpX3NpemUuICBJdCBtdXN0IGJlIHplcm9lZCBvdXQgb24gZWFjaCBhbmQgZXZlcnkKLQkgKiB3cml0ZXBhZ2UgaW52b2thdGlvbiBiZWNhdXNlIGl0IG1heSBiZSBtbWFwcGVkLiAgIkEgZmlsZSBpcyBtYXBwZWQKKwkgKiB3cml0ZXBhZ2UgaW52b2NhdGlvbiBiZWNhdXNlIGl0IG1heSBiZSBtbWFwcGVkLiAgIkEgZmlsZSBpcyBtYXBwZWQKIAkgKiBpbiBtdWx0aXBsZXMgb2YgdGhlIHBhZ2Ugc2l6ZS4gIEZvciBhIGZpbGUgdGhhdCBpcyBub3QgYSBtdWx0aXBsZSBvZgogCSAqIHRoZSAgcGFnZSBzaXplLCB0aGUgcmVtYWluaW5nIG1lbW9yeSBpcyB6ZXJvZWQgd2hlbiBtYXBwZWQsIGFuZAogCSAqIHdyaXRlcyB0byB0aGF0IHJlZ2lvbiBhcmUgbm90IHdyaXR0ZW4gb3V0IHRvIHRoZSBmaWxlLiIKQEAgLTMyNjUsNyArMzI2NSw3IEBACiAJCiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmFsbG9jX2J1ZmZlcl9oZWFkKGdmcF90IGdmcF9mbGFncykKIHsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJldCA9IGttZW1fY2FjaGVfYWxsb2MoYmhfY2FjaGVwLCBnZnBfZmxhZ3MpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqcmV0ID0ga21lbV9jYWNoZV96YWxsb2MoYmhfY2FjaGVwLCBnZnBfZmxhZ3MpOwogCWlmIChyZXQpIHsKIAkJSU5JVF9MSVNUX0hFQUQoJnJldC0+Yl9hc3NvY19idWZmZXJzKTsKIAkJZ2V0X2NwdV92YXIoYmhfYWNjb3VudGluZykubnIrKzsKQEAgLTMzNTIsMTUgKzMzNTIsNiBAQAogfQogRVhQT1JUX1NZTUJPTChiaF9zdWJtaXRfcmVhZCk7CiAKLXN0YXRpYyB2b2lkCi1pbml0X2J1ZmZlcl9oZWFkKHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IGRhdGE7Ci0KLQltZW1zZXQoYmgsIDAsIHNpemVvZigqYmgpKTsKLQlJTklUX0xJU1RfSEVBRCgmYmgtPmJfYXNzb2NfYnVmZmVycyk7Ci19Ci0KIHZvaWQgX19pbml0IGJ1ZmZlcl9pbml0KHZvaWQpCiB7CiAJaW50IG5ycGFnZXM7CkBAIC0zMzY5LDcgKzMzNjAsNyBAQAogCQkJc2l6ZW9mKHN0cnVjdCBidWZmZXJfaGVhZCksIDAsCiAJCQkJKFNMQUJfUkVDTEFJTV9BQ0NPVU5UfFNMQUJfUEFOSUN8CiAJCQkJU0xBQl9NRU1fU1BSRUFEKSwKLQkJCQlpbml0X2J1ZmZlcl9oZWFkKTsKKwkJCQlOVUxMKTsKIAogCS8qCiAJICogTGltaXQgdGhlIGJoIG9jY3VwYW5jeSB0byAxMCUgb2YgWk9ORV9OT1JNQUwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvQ0hBTkdFUyBiL2ZzL2NpZnMvQ0hBTkdFUwppbmRleCA0OTUwM2QyLi5iYzAwMjVjIDEwMDY0NAotLS0gYS9mcy9jaWZzL0NIQU5HRVMKKysrIGIvZnMvY2lmcy9DSEFOR0VTCkBAIC0xLDYgKzEsNyBAQAogVmVyc2lvbiAxLjYyCiAtLS0tLS0tLS0tLS0KLUFkZCBzb2Nrb3B0PVRDUF9OT0RFTEFZIG1vdW50IG9wdGlvbi4KK0FkZCBzb2Nrb3B0PVRDUF9OT0RFTEFZIG1vdW50IG9wdGlvbi4gRUEgKHhhdHRyKSByb3V0aW5lcyBoYXJkZW5lZAordG8gbW9yZSBzdHJpY3RseSBoYW5kbGUgY29ycnVwdCBmcmFtZXMuCiAKIFZlcnNpb24gMS42MQogLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9mcy9jaWZzL2FzbjEuYyBiL2ZzL2NpZnMvYXNuMS5jCmluZGV4IDIwNjkyZmIuLmEyMGJlYTUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvYXNuMS5jCisrKyBiL2ZzL2NpZnMvYXNuMS5jCkBAIC0xMzYsNyArMTM2LDcgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JY2ggPSAqKGN0eC0+cG9pbnRlcikrKzsgLyogY2ggaGFzIDB4YSwgcHRyIHBvaW50cyB0byBsZW5naHQgb2N0ZXQgKi8KKwljaCA9ICooY3R4LT5wb2ludGVyKSsrOyAvKiBjaCBoYXMgMHhhLCBwdHIgcG9pbnRzIHRvIGxlbmd0aCBvY3RldCAqLwogCWlmICgoY2gpID09IEFTTjFfRU5VTSkgIC8qIGlmIGNoIHZhbHVlIGlzIEVOVU0sIDB4YSAqLwogCQkqdmFsID0gKigrKyhjdHgtPnBvaW50ZXIpKTsgLyogdmFsdWUgaGFzIGVudW0gdmFsdWUgKi8KIAllbHNlCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jIGIvZnMvY2lmcy9jaWZzX2Rmc19yZWYuYwppbmRleCBiNDRjZTBhLi5iMWQ2MWQwIDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNfZGZzX3JlZi5jCisrKyBiL2ZzL2NpZnMvY2lmc19kZnNfcmVmLmMKQEAgLTU0LDcgKzU0LDcgQEAKICAqIEV4dHJhY3RzIHNoYXJlbmFtZSBmb3JtIGZ1bGwgVU5DLgogICogaS5lLiBzdHJpcHMgZnJvbSBVTkMgdHJhaWxpbmcgcGF0aCB0aGF0IGlzIG5vdCBwYXJ0IG9mIHNoYXJlCiAgKiBuYW1lIGFuZCBmaXh1cCBtaXNzaW5nICdcJyBpbiB0aGUgYmVnaW5pbmcgb2YgREZTIG5vZGUgcmVmZmVyYWwKLSAqIGlmIG5lY2Nlc3NhcnkuCisgKiBpZiBuZWNlc3NhcnkuCiAgKiBSZXR1cm5zIHBvaW50ZXIgdG8gc2hhcmUgbmFtZSBvbiBzdWNjZXNzIG9yIEVSUl9QVFIgb24gZXJyb3IuCiAgKiBDYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgcmV0dXJuZWQgc3RyaW5nLgogICovCmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNnbG9iLmggYi9mcy9jaWZzL2NpZnNnbG9iLmgKaW5kZXggZWQ3NTFiYi4uYTFjODE3ZSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzZ2xvYi5oCisrKyBiL2ZzL2NpZnMvY2lmc2dsb2IuaApAQCAtMjA1LDcgKzIwNSw3IEBACiBzdHJ1Y3QgY2lmc1Nlc0luZm8gewogCXN0cnVjdCBsaXN0X2hlYWQgc21iX3Nlc19saXN0OwogCXN0cnVjdCBsaXN0X2hlYWQgdGNvbl9saXN0OwotCXN0cnVjdCBzZW1hcGhvcmUgc2VzU2VtOworCXN0cnVjdCBtdXRleCBzZXNzaW9uX211dGV4OwogI2lmIDAKIAlzdHJ1Y3QgY2lmc1VpZEluZm8gKnVpZEluZm87CS8qIHBvaW50ZXIgdG8gdXNlciBpbmZvICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3BkdS5oIGIvZnMvY2lmcy9jaWZzcGR1LmgKaW5kZXggMzg3NzczNy4uMTRkMDM2ZCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzcGR1LmgKKysrIGIvZnMvY2lmcy9jaWZzcGR1LmgKQEAgLTQxNSwxMCArNDE1LDEwIEBACiAJX191OCBXb3JkQ291bnQ7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogLyogZ2l2ZW4gYSBwb2ludGVyIHRvIGFuIHNtYl9oZHIgcmV0cmlldmUgdGhlIHZhbHVlIG9mIGJ5dGUgY291bnQgKi8KLSNkZWZpbmUgQkNDKHNtYl92YXIpICgqKF9fdTE2ICopKChjaGFyICopc21iX3ZhciArIHNpemVvZihzdHJ1Y3Qgc21iX2hkcikgKyAoMiAqIHNtYl92YXItPldvcmRDb3VudCkpKQotI2RlZmluZSBCQ0NfTEUoc21iX3ZhcikgKCooX19sZTE2ICopKChjaGFyICopc21iX3ZhciArIHNpemVvZihzdHJ1Y3Qgc21iX2hkcikgKyAoMiAqIHNtYl92YXItPldvcmRDb3VudCkpKQorI2RlZmluZSBCQ0Moc21iX3ZhcikgKCooX191MTYgKikoKGNoYXIgKikoc21iX3ZhcikgKyBzaXplb2Yoc3RydWN0IHNtYl9oZHIpICsgKDIgKiAoc21iX3ZhciktPldvcmRDb3VudCkpKQorI2RlZmluZSBCQ0NfTEUoc21iX3ZhcikgKCooX19sZTE2ICopKChjaGFyICopKHNtYl92YXIpICsgc2l6ZW9mKHN0cnVjdCBzbWJfaGRyKSArICgyICogKHNtYl92YXIpLT5Xb3JkQ291bnQpKSkKIC8qIGdpdmVuIGEgcG9pbnRlciB0byBhbiBzbWJfaGRyIHJldHJpZXZlIHRoZSBwb2ludGVyIHRvIHRoZSBieXRlIGFyZWEgKi8KLSNkZWZpbmUgcEJ5dGVBcmVhKHNtYl92YXIpICgodW5zaWduZWQgY2hhciAqKXNtYl92YXIgKyBzaXplb2Yoc3RydWN0IHNtYl9oZHIpICsgKDIgKiBzbWJfdmFyLT5Xb3JkQ291bnQpICsgMikKKyNkZWZpbmUgcEJ5dGVBcmVhKHNtYl92YXIpICgodW5zaWduZWQgY2hhciAqKShzbWJfdmFyKSArIHNpemVvZihzdHJ1Y3Qgc21iX2hkcikgKyAoMiAqIChzbWJfdmFyKS0+V29yZENvdW50KSArIDIpCiAKIC8qCiAgKiBDb21wdXRlciBOYW1lIExlbmd0aCAoc2luY2UgTmV0YmlvcyBuYW1lIHdhcyBsZW5ndGggMTYgd2l0aCBsYXN0IGJ5dGUgMHgyMCkKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3Byb3RvLmggYi9mcy9jaWZzL2NpZnNwcm90by5oCmluZGV4IDU2NDY3MjcuLjg4ZTJiYzQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvY2lmc3Byb3RvLmgKKysrIGIvZnMvY2lmcy9jaWZzcHJvdG8uaApAQCAtMzYzLDEzICszNjMsMTAgQEAKIAkJCV9fdTMyIGZpbHRlciwgc3RydWN0IGZpbGUgKmZpbGUsIGludCBtdWx0aXNob3QsCiAJCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UpOwogZXh0ZXJuIHNzaXplX3QgQ0lGU1NNQlFBbGxFQXMoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKLQkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaE5hbWUsIGNoYXIgKkVBRGF0YSwKKwkJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaE5hbWUsCisJCQljb25zdCB1bnNpZ25lZCBjaGFyICplYV9uYW1lLCBjaGFyICpFQURhdGEsCiAJCQlzaXplX3QgYnVmc2l6ZSwgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLAogCQkJaW50IHJlbWFwX3NwZWNpYWxfY2hhcnMpOwotZXh0ZXJuIHNzaXplX3QgQ0lGU1NNQlF1ZXJ5RUEoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKLQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VhcmNoTmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZWFfbmFtZSwKLQkJdW5zaWduZWQgY2hhciAqZWFfdmFsdWUsIHNpemVfdCBidWZfc2l6ZSwKLQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXBfc3BlY2lhbF9jaGFycyk7CiBleHRlcm4gaW50IENJRlNTTUJTZXRFQShjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAogCQljb25zdCBjaGFyICpmaWxlTmFtZSwgY29uc3QgY2hhciAqZWFfbmFtZSwKIAkJY29uc3Qgdm9pZCAqZWFfdmFsdWUsIGNvbnN0IF9fdTE2IGVhX3ZhbHVlX2xlbiwKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc3NtYi5jIGIvZnMvY2lmcy9jaWZzc21iLmMKaW5kZXggOTQxNDQxZC4uNjExODM1OCAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzc21iLmMKKysrIGIvZnMvY2lmcy9jaWZzc21iLmMKQEAgLTE3MCwxOSArMTcwLDE5IEBACiAJICogbmVlZCB0byBwcmV2ZW50IG11bHRpcGxlIHRocmVhZHMgdHJ5aW5nIHRvIHNpbXVsdGFuZW91c2x5CiAJICogcmVjb25uZWN0IHRoZSBzYW1lIFNNQiBzZXNzaW9uCiAJICovCi0JZG93bigmc2VzLT5zZXNTZW0pOworCW11dGV4X2xvY2soJnNlcy0+c2Vzc2lvbl9tdXRleCk7CiAJaWYgKHNlcy0+bmVlZF9yZWNvbm5lY3QpCiAJCXJjID0gY2lmc19zZXR1cF9zZXNzaW9uKDAsIHNlcywgbmxzX2NvZGVwYWdlKTsKIAogCS8qIGRvIHdlIG5lZWQgdG8gcmVjb25uZWN0IHRjb24/ICovCiAJaWYgKHJjIHx8ICF0Y29uLT5uZWVkX3JlY29ubmVjdCkgewotCQl1cCgmc2VzLT5zZXNTZW0pOworCQltdXRleF91bmxvY2soJnNlcy0+c2Vzc2lvbl9tdXRleCk7CiAJCWdvdG8gb3V0OwogCX0KIAogCW1hcmtfb3Blbl9maWxlc19pbnZhbGlkKHRjb24pOwogCXJjID0gQ0lGU1RDb24oMCwgc2VzLCB0Y29uLT50cmVlTmFtZSwgdGNvbiwgbmxzX2NvZGVwYWdlKTsKLQl1cCgmc2VzLT5zZXNTZW0pOworCW11dGV4X3VubG9jaygmc2VzLT5zZXNzaW9uX211dGV4KTsKIAljRllJKDEsICgicmVjb25uZWN0IHRjb24gcmMgPSAlZCIsIHJjKSk7CiAKIAlpZiAocmMpCkBAIC03MDAsMTMgKzcwMCwxMyBAQAogCWlmICghc2VzIHx8ICFzZXMtPnNlcnZlcikKIAkJcmV0dXJuIC1FSU87CiAKLQlkb3duKCZzZXMtPnNlc1NlbSk7CisJbXV0ZXhfbG9jaygmc2VzLT5zZXNzaW9uX211dGV4KTsKIAlpZiAoc2VzLT5uZWVkX3JlY29ubmVjdCkKIAkJZ290byBzZXNzaW9uX2FscmVhZHlfZGVhZDsgLyogbm8gbmVlZCB0byBzZW5kIFNNQmxvZ29mZiBpZiB1aWQKIAkJCQkJICAgICAgYWxyZWFkeSBjbG9zZWQgZHVlIHRvIHJlY29ubmVjdCAqLwogCXJjID0gc21hbGxfc21iX2luaXQoU01CX0NPTV9MT0dPRkZfQU5EWCwgMiwgTlVMTCwgKHZvaWQgKiopJnBTTUIpOwogCWlmIChyYykgewotCQl1cCgmc2VzLT5zZXNTZW0pOworCQltdXRleF91bmxvY2soJnNlcy0+c2Vzc2lvbl9tdXRleCk7CiAJCXJldHVybiByYzsKIAl9CiAKQEAgLTcyMSw3ICs3MjEsNyBAQAogCXBTTUItPkFuZFhDb21tYW5kID0gMHhGRjsKIAlyYyA9IFNlbmRSZWNlaXZlTm9Sc3AoeGlkLCBzZXMsIChzdHJ1Y3Qgc21iX2hkciAqKSBwU01CLCAwKTsKIHNlc3Npb25fYWxyZWFkeV9kZWFkOgotCXVwKCZzZXMtPnNlc1NlbSk7CisJbXV0ZXhfdW5sb2NrKCZzZXMtPnNlc3Npb25fbXV0ZXgpOwogCiAJLyogaWYgc2Vzc2lvbiBkZWFkIHRoZW4gd2UgZG8gbm90IG5lZWQgdG8gZG8gdWxvZ29mZiwKIAkJc2luY2Ugc2VydmVyIGNsb3NlZCBzbWIgc2Vzc2lvbiwgbm8gc2Vuc2UgcmVwb3J0aW5nCkBAIC0zODg2LDcgKzM4ODYsNyBAQAogCQlnb3RvIHBhcnNlX0RGU19yZWZlcnJhbHNfZXhpdDsKIAl9CiAKLQkvKiBjb2xsZWN0IG5lY2Nlc3NhcnkgZGF0YSBmcm9tIHJlZmVycmFscyAqLworCS8qIGNvbGxlY3QgbmVjZXNzYXJ5IGRhdGEgZnJvbSByZWZlcnJhbHMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgKm51bV9vZl9ub2RlczsgaSsrKSB7CiAJCWNoYXIgKnRlbXA7CiAJCWludCBtYXhfbGVuOwpAQCAtNTI2OSwyMiArNTI2OSwzNCBAQAogCWNpZnNfYnVmX3JlbGVhc2UocFNNQik7CiAJcmV0dXJuIHJjOwogfQorCiAjaWZkZWYgQ09ORklHX0NJRlNfWEFUVFIKKy8qCisgKiBEbyBhIHBhdGgtYmFzZWQgUVVFUllfQUxMX0VBUyBjYWxsIGFuZCBwYXJzZSB0aGUgcmVzdWx0LiBUaGlzIGlzIGEgY29tbW9uCisgKiBmdW5jdGlvbiB1c2VkIGJ5IGxpc3R4YXR0ciBhbmQgZ2V0eGF0dHIgdHlwZSBjYWxscy4gV2hlbiBlYV9uYW1lIGlzIHNldCwKKyAqIGl0IGxvb2tzIGZvciB0aGF0IGF0dHJpYnV0ZSBuYW1lIGFuZCBzdHVmZnMgdGhhdCB2YWx1ZSBpbnRvIHRoZSBFQURhdGEKKyAqIGJ1ZmZlci4gV2hlbiBlYV9uYW1lIGlzIE5VTEwsIGl0IHN0dWZmcyBhIGxpc3Qgb2YgYXR0cmlidXRlIG5hbWVzIGludG8gdGhlCisgKiBidWZmZXIuIEluIGJvdGggY2FzZXMsIHRoZSByZXR1cm4gdmFsdWUgaXMgZWl0aGVyIHRoZSBsZW5ndGggb2YgdGhlCisgKiByZXN1bHRpbmcgZGF0YSBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuIElmIEVBRGF0YSBpcyBhIE5VTEwgcG9pbnRlciB0aGVuCisgKiB0aGUgZGF0YSBpc24ndCBjb3BpZWQgdG8gaXQsIGJ1dCB0aGUgbGVuZ3RoIGlzIHJldHVybmVkLgorICovCiBzc2l6ZV90CiBDSUZTU01CUUFsbEVBcyhjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLAotCQkgY29uc3QgdW5zaWduZWQgY2hhciAqc2VhcmNoTmFtZSwKLQkJIGNoYXIgKkVBRGF0YSwgc2l6ZV90IGJ1Zl9zaXplLAotCQkgY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXApCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnNlYXJjaE5hbWUsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmVhX25hbWUsCisJCWNoYXIgKkVBRGF0YSwgc2l6ZV90IGJ1Zl9zaXplLAorCQljb25zdCBzdHJ1Y3QgbmxzX3RhYmxlICpubHNfY29kZXBhZ2UsIGludCByZW1hcCkKIHsKIAkJLyogQkIgYXNzdW1lcyBvbmUgc2V0dXAgd29yZCAqLwogCVRSQU5TQUNUSU9OMl9RUElfUkVRICpwU01CID0gTlVMTDsKIAlUUkFOU0FDVElPTjJfUVBJX1JTUCAqcFNNQnIgPSBOVUxMOwogCWludCByYyA9IDA7CiAJaW50IGJ5dGVzX3JldHVybmVkOwotCWludCBuYW1lX2xlbjsKKwlpbnQgbGlzdF9sZW47CisJc3RydWN0IGZlYWxpc3QgKmVhX3Jlc3BvbnNlX2RhdGE7CiAJc3RydWN0IGZlYSAqdGVtcF9mZWE7CiAJY2hhciAqdGVtcF9wdHI7Ci0JX191MTYgcGFyYW1zLCBieXRlX2NvdW50OworCWNoYXIgKmVuZF9vZl9zbWI7CisJX191MTYgcGFyYW1zLCBieXRlX2NvdW50LCBkYXRhX29mZnNldDsKIAogCWNGWUkoMSwgKCJJbiBRdWVyeSBBbGwgRUFzIHBhdGggJXMiLCBzZWFyY2hOYW1lKSk7CiBRQWxsRUFzUmV0cnk6CkBAIC01Mjk0LDIyICs1MzA2LDIyIEBACiAJCXJldHVybiByYzsKIAogCWlmIChwU01CLT5oZHIuRmxhZ3MyICYgU01CRkxHMl9VTklDT0RFKSB7Ci0JCW5hbWVfbGVuID0KKwkJbGlzdF9sZW4gPQogCQkgICAgY2lmc0NvbnZlcnRUb1VDUygoX19sZTE2ICopIHBTTUItPkZpbGVOYW1lLCBzZWFyY2hOYW1lLAogCQkJCSAgICAgUEFUSF9NQVgsIG5sc19jb2RlcGFnZSwgcmVtYXApOwotCQluYW1lX2xlbisrOwkvKiB0cmFpbGluZyBudWxsICovCi0JCW5hbWVfbGVuICo9IDI7CisJCWxpc3RfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KKwkJbGlzdF9sZW4gKj0gMjsKIAl9IGVsc2UgewkvKiBCQiBpbXByb3ZlIHRoZSBjaGVjayBmb3IgYnVmZmVyIG92ZXJydW5zIEJCICovCi0JCW5hbWVfbGVuID0gc3RybmxlbihzZWFyY2hOYW1lLCBQQVRIX01BWCk7Ci0JCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KLQkJc3RybmNweShwU01CLT5GaWxlTmFtZSwgc2VhcmNoTmFtZSwgbmFtZV9sZW4pOworCQlsaXN0X2xlbiA9IHN0cm5sZW4oc2VhcmNoTmFtZSwgUEFUSF9NQVgpOworCQlsaXN0X2xlbisrOwkvKiB0cmFpbGluZyBudWxsICovCisJCXN0cm5jcHkocFNNQi0+RmlsZU5hbWUsIHNlYXJjaE5hbWUsIGxpc3RfbGVuKTsKIAl9CiAKLQlwYXJhbXMgPSAyIC8qIGxldmVsICovICsgNCAvKiByZXNlcnZlZCAqLyArIG5hbWVfbGVuIC8qIGluY2x1ZGVzIE5VTCAqLzsKKwlwYXJhbXMgPSAyIC8qIGxldmVsICovICsgNCAvKiByZXNlcnZlZCAqLyArIGxpc3RfbGVuIC8qIGluY2x1ZGVzIE5VTCAqLzsKIAlwU01CLT5Ub3RhbERhdGFDb3VudCA9IDA7CiAJcFNNQi0+TWF4UGFyYW1ldGVyQ291bnQgPSBjcHVfdG9fbGUxNigyKTsKIAkvKiBCQiBmaW5kIGV4YWN0IG1heCBTTUIgUERVIGZyb20gc2VzcyBzdHJ1Y3R1cmUgQkIgKi8KLQlwU01CLT5NYXhEYXRhQ291bnQgPSBjcHVfdG9fbGUxNig0MDAwKTsKKwlwU01CLT5NYXhEYXRhQ291bnQgPSBjcHVfdG9fbGUxNihDSUZTTWF4QnVmU2l6ZSk7CiAJcFNNQi0+TWF4U2V0dXBDb3VudCA9IDA7CiAJcFNNQi0+UmVzZXJ2ZWQgPSAwOwogCXBTTUItPkZsYWdzID0gMDsKQEAgLTUzMzQsODUgKzUzNDYsMTE0IEBACiAJCQkgKHN0cnVjdCBzbWJfaGRyICopIHBTTUJyLCAmYnl0ZXNfcmV0dXJuZWQsIDApOwogCWlmIChyYykgewogCQljRllJKDEsICgiU2VuZCBlcnJvciBpbiBRdWVyeUFsbEVBcyA9ICVkIiwgcmMpKTsKLQl9IGVsc2UgewkJLyogZGVjb2RlIHJlc3BvbnNlICovCi0JCXJjID0gdmFsaWRhdGVfdDIoKHN0cnVjdCBzbWJfdDJfcnNwICopcFNNQnIpOworCQlnb3RvIFFBbGxFQXNPdXQ7CisJfQogCi0JCS8qIEJCIGFsc28gY2hlY2sgZW5vdWdoIHRvdGFsIGJ5dGVzIHJldHVybmVkICovCi0JCS8qIEJCIHdlIG5lZWQgdG8gaW1wcm92ZSB0aGUgdmFsaWRpdHkgY2hlY2tpbmcKLQkJb2YgdGhlc2UgdHJhbnMyIHJlc3BvbnNlcyAqLwotCQlpZiAocmMgfHwgKHBTTUJyLT5CeXRlQ291bnQgPCA0KSkKLQkJCXJjID0gLUVJTzsJLyogYmFkIHNtYiAqLwotCSAgIC8qIGVsc2UgaWYgKHBGaW5kRGF0YSl7Ci0JCQltZW1jcHkoKGNoYXIgKikgcEZpbmREYXRhLAotCQkJICAgICAgIChjaGFyICopICZwU01Cci0+aGRyLlByb3RvY29sICsKLQkJCSAgICAgICBkYXRhX29mZnNldCwga2wpOwotCQl9Ki8gZWxzZSB7Ci0JCQkvKiBjaGVjayB0aGF0IGxlbmd0aCBvZiBsaXN0IGlzIG5vdCBtb3JlIHRoYW4gYmNjICovCi0JCQkvKiBjaGVjayB0aGF0IGVhY2ggZW50cnkgZG9lcyBub3QgZ28gYmV5b25kIGxlbmd0aAotCQkJICAgb2YgbGlzdCAqLwotCQkJLyogY2hlY2sgdGhhdCBlYWNoIGVsZW1lbnQgb2YgZWFjaCBlbnRyeSBkb2VzIG5vdAotCQkJICAgZ28gYmV5b25kIGVuZCBvZiBsaXN0ICovCi0JCQlfX3UxNiBkYXRhX29mZnNldCA9IGxlMTZfdG9fY3B1KHBTTUJyLT50Mi5EYXRhT2Zmc2V0KTsKLQkJCXN0cnVjdCBmZWFsaXN0ICplYV9yZXNwb25zZV9kYXRhOwotCQkJcmMgPSAwOwotCQkJLyogdmFsaWRhdGVfdHJhbnMyX29mZnNldHMoKSAqLwotCQkJLyogQkIgY2hlY2sgaWYgc3RhcnQgb2Ygc21iICsgZGF0YV9vZmZzZXQgPiAmYmNjKyBiY2MgKi8KLQkJCWVhX3Jlc3BvbnNlX2RhdGEgPSAoc3RydWN0IGZlYWxpc3QgKikKLQkJCQkoKChjaGFyICopICZwU01Cci0+aGRyLlByb3RvY29sKSArCi0JCQkJZGF0YV9vZmZzZXQpOwotCQkJbmFtZV9sZW4gPSBsZTMyX3RvX2NwdShlYV9yZXNwb25zZV9kYXRhLT5saXN0X2xlbik7Ci0JCQljRllJKDEsICgiZWEgbGVuZ3RoICVkIiwgbmFtZV9sZW4pKTsKLQkJCWlmIChuYW1lX2xlbiA8PSA4KSB7Ci0JCQkvKiByZXR1cm5lZCBFQSBzaXplIHplcm9lZCBhdCB0b3Agb2YgZnVuY3Rpb24gKi8KLQkJCQljRllJKDEsICgiZW1wdHkgRUEgbGlzdCByZXR1cm5lZCBmcm9tIHNlcnZlciIpKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogYWNjb3VudCBmb3IgZWEgbGlzdCBsZW4gKi8KLQkJCQluYW1lX2xlbiAtPSA0OwotCQkJCXRlbXBfZmVhID0gZWFfcmVzcG9uc2VfZGF0YS0+bGlzdDsKLQkJCQl0ZW1wX3B0ciA9IChjaGFyICopdGVtcF9mZWE7Ci0JCQkJd2hpbGUgKG5hbWVfbGVuID4gMCkgewotCQkJCQlfX3UxNiB2YWx1ZV9sZW47Ci0JCQkJCW5hbWVfbGVuIC09IDQ7Ci0JCQkJCXRlbXBfcHRyICs9IDQ7Ci0JCQkJCXJjICs9IHRlbXBfZmVhLT5uYW1lX2xlbjsKLQkJCQkvKiBhY2NvdW50IGZvciBwcmVmaXggdXNlci4gYW5kIHRyYWlsaW5nIG51bGwgKi8KLQkJCQkJcmMgPSByYyArIDUgKyAxOwotCQkJCQlpZiAocmMgPCAoaW50KWJ1Zl9zaXplKSB7Ci0JCQkJCQltZW1jcHkoRUFEYXRhLCAidXNlci4iLCA1KTsKLQkJCQkJCUVBRGF0YSArPSA1OwotCQkJCQkJbWVtY3B5KEVBRGF0YSwgdGVtcF9wdHIsCi0JCQkJCQkgICAgICAgdGVtcF9mZWEtPm5hbWVfbGVuKTsKLQkJCQkJCUVBRGF0YSArPSB0ZW1wX2ZlYS0+bmFtZV9sZW47Ci0JCQkJCQkvKiBudWxsIHRlcm1pbmF0ZSBuYW1lICovCi0JCQkJCQkqRUFEYXRhID0gMDsKLQkJCQkJCUVBRGF0YSA9IEVBRGF0YSArIDE7Ci0JCQkJCX0gZWxzZSBpZiAoYnVmX3NpemUgPT0gMCkgewotCQkJCQkJLyogc2tpcCBjb3B5IC0gY2FsYyBzaXplIG9ubHkgKi8KLQkJCQkJfSBlbHNlIHsKLQkJCQkJCS8qIHN0b3AgYmVmb3JlIG92ZXJydW4gYnVmZmVyICovCi0JCQkJCQlyYyA9IC1FUkFOR0U7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCQluYW1lX2xlbiAtPSB0ZW1wX2ZlYS0+bmFtZV9sZW47Ci0JCQkJCXRlbXBfcHRyICs9IHRlbXBfZmVhLT5uYW1lX2xlbjsKLQkJCQkJLyogYWNjb3VudCBmb3IgdHJhaWxpbmcgbnVsbCAqLwotCQkJCQluYW1lX2xlbi0tOwotCQkJCQl0ZW1wX3B0cisrOwotCQkJCQl2YWx1ZV9sZW4gPQotCQkJCQkgICAgICBsZTE2X3RvX2NwdSh0ZW1wX2ZlYS0+dmFsdWVfbGVuKTsKLQkJCQkJbmFtZV9sZW4gLT0gdmFsdWVfbGVuOwotCQkJCQl0ZW1wX3B0ciArPSB2YWx1ZV9sZW47Ci0JCQkJCS8qIEJCIGNoZWNrIHRoYXQgdGVtcF9wdHIgaXMgc3RpbGwKLQkJCQkJICAgICAgd2l0aGluIHRoZSBTTUIgQkIqLwogCi0JCQkJCS8qIG5vIHRyYWlsaW5nIG51bGwgdG8gYWNjb3VudCBmb3IKLQkJCQkJICAgaW4gdmFsdWUgbGVuICovCi0JCQkJCS8qIGdvIG9uIHRvIG5leHQgRUEgKi8KLQkJCQkJdGVtcF9mZWEgPSAoc3RydWN0IGZlYSAqKXRlbXBfcHRyOworCS8qIEJCIGFsc28gY2hlY2sgZW5vdWdoIHRvdGFsIGJ5dGVzIHJldHVybmVkICovCisJLyogQkIgd2UgbmVlZCB0byBpbXByb3ZlIHRoZSB2YWxpZGl0eSBjaGVja2luZworCW9mIHRoZXNlIHRyYW5zMiByZXNwb25zZXMgKi8KKworCXJjID0gdmFsaWRhdGVfdDIoKHN0cnVjdCBzbWJfdDJfcnNwICopcFNNQnIpOworCWlmIChyYyB8fCAocFNNQnItPkJ5dGVDb3VudCA8IDQpKSB7CisJCXJjID0gLUVJTzsJLyogYmFkIHNtYiAqLworCQlnb3RvIFFBbGxFQXNPdXQ7CisJfQorCisJLyogY2hlY2sgdGhhdCBsZW5ndGggb2YgbGlzdCBpcyBub3QgbW9yZSB0aGFuIGJjYyAqLworCS8qIGNoZWNrIHRoYXQgZWFjaCBlbnRyeSBkb2VzIG5vdCBnbyBiZXlvbmQgbGVuZ3RoCisJICAgb2YgbGlzdCAqLworCS8qIGNoZWNrIHRoYXQgZWFjaCBlbGVtZW50IG9mIGVhY2ggZW50cnkgZG9lcyBub3QKKwkgICBnbyBiZXlvbmQgZW5kIG9mIGxpc3QgKi8KKwkvKiB2YWxpZGF0ZV90cmFuczJfb2Zmc2V0cygpICovCisJLyogQkIgY2hlY2sgaWYgc3RhcnQgb2Ygc21iICsgZGF0YV9vZmZzZXQgPiAmYmNjKyBiY2MgKi8KKworCWRhdGFfb2Zmc2V0ID0gbGUxNl90b19jcHUocFNNQnItPnQyLkRhdGFPZmZzZXQpOworCWVhX3Jlc3BvbnNlX2RhdGEgPSAoc3RydWN0IGZlYWxpc3QgKikKKwkJCQkoKChjaGFyICopICZwU01Cci0+aGRyLlByb3RvY29sKSArIGRhdGFfb2Zmc2V0KTsKKworCWxpc3RfbGVuID0gbGUzMl90b19jcHUoZWFfcmVzcG9uc2VfZGF0YS0+bGlzdF9sZW4pOworCWNGWUkoMSwgKCJlYSBsZW5ndGggJWQiLCBsaXN0X2xlbikpOworCWlmIChsaXN0X2xlbiA8PSA4KSB7CisJCWNGWUkoMSwgKCJlbXB0eSBFQSBsaXN0IHJldHVybmVkIGZyb20gc2VydmVyIikpOworCQlnb3RvIFFBbGxFQXNPdXQ7CisJfQorCisJLyogbWFrZSBzdXJlIGxpc3RfbGVuIGRvZXNuJ3QgZ28gcGFzdCBlbmQgb2YgU01CICovCisJZW5kX29mX3NtYiA9IChjaGFyICopcEJ5dGVBcmVhKCZwU01Cci0+aGRyKSArIEJDQygmcFNNQnItPmhkcik7CisJaWYgKChjaGFyICopZWFfcmVzcG9uc2VfZGF0YSArIGxpc3RfbGVuID4gZW5kX29mX3NtYikgeworCQljRllJKDEsICgiRUEgbGlzdCBhcHBlYXJzIHRvIGdvIGJleW9uZCBTTUIiKSk7CisJCXJjID0gLUVJTzsKKwkJZ290byBRQWxsRUFzT3V0OworCX0KKworCS8qIGFjY291bnQgZm9yIGVhIGxpc3QgbGVuICovCisJbGlzdF9sZW4gLT0gNDsKKwl0ZW1wX2ZlYSA9IGVhX3Jlc3BvbnNlX2RhdGEtPmxpc3Q7CisJdGVtcF9wdHIgPSAoY2hhciAqKXRlbXBfZmVhOworCXdoaWxlIChsaXN0X2xlbiA+IDApIHsKKwkJdW5zaWduZWQgaW50IG5hbWVfbGVuOworCQlfX3UxNiB2YWx1ZV9sZW47CisKKwkJbGlzdF9sZW4gLT0gNDsKKwkJdGVtcF9wdHIgKz0gNDsKKwkJLyogbWFrZSBzdXJlIHdlIGNhbiByZWFkIG5hbWVfbGVuIGFuZCB2YWx1ZV9sZW4gKi8KKwkJaWYgKGxpc3RfbGVuIDwgMCkgeworCQkJY0ZZSSgxLCAoIkVBIGVudHJ5IGdvZXMgYmV5b25kIGxlbmd0aCBvZiBsaXN0IikpOworCQkJcmMgPSAtRUlPOworCQkJZ290byBRQWxsRUFzT3V0OworCQl9CisKKwkJbmFtZV9sZW4gPSB0ZW1wX2ZlYS0+bmFtZV9sZW47CisJCXZhbHVlX2xlbiA9IGxlMTZfdG9fY3B1KHRlbXBfZmVhLT52YWx1ZV9sZW4pOworCQlsaXN0X2xlbiAtPSBuYW1lX2xlbiArIDEgKyB2YWx1ZV9sZW47CisJCWlmIChsaXN0X2xlbiA8IDApIHsKKwkJCWNGWUkoMSwgKCJFQSBlbnRyeSBnb2VzIGJleW9uZCBsZW5ndGggb2YgbGlzdCIpKTsKKwkJCXJjID0gLUVJTzsKKwkJCWdvdG8gUUFsbEVBc091dDsKKwkJfQorCisJCWlmIChlYV9uYW1lKSB7CisJCQlpZiAoc3RybmNtcChlYV9uYW1lLCB0ZW1wX3B0ciwgbmFtZV9sZW4pID09IDApIHsKKwkJCQl0ZW1wX3B0ciArPSBuYW1lX2xlbiArIDE7CisJCQkJcmMgPSB2YWx1ZV9sZW47CisJCQkJaWYgKGJ1Zl9zaXplID09IDApCisJCQkJCWdvdG8gUUFsbEVBc091dDsKKwkJCQlpZiAoKHNpemVfdCl2YWx1ZV9sZW4gPiBidWZfc2l6ZSkgeworCQkJCQlyYyA9IC1FUkFOR0U7CisJCQkJCWdvdG8gUUFsbEVBc091dDsKIAkJCQl9CisJCQkJbWVtY3B5KEVBRGF0YSwgdGVtcF9wdHIsIHZhbHVlX2xlbik7CisJCQkJZ290byBRQWxsRUFzT3V0OworCQkJfQorCQl9IGVsc2UgeworCQkJLyogYWNjb3VudCBmb3IgcHJlZml4IHVzZXIuIGFuZCB0cmFpbGluZyBudWxsICovCisJCQlyYyArPSAoNSArIDEgKyBuYW1lX2xlbik7CisJCQlpZiAocmMgPCAoaW50KSBidWZfc2l6ZSkgeworCQkJCW1lbWNweShFQURhdGEsICJ1c2VyLiIsIDUpOworCQkJCUVBRGF0YSArPSA1OworCQkJCW1lbWNweShFQURhdGEsIHRlbXBfcHRyLCBuYW1lX2xlbik7CisJCQkJRUFEYXRhICs9IG5hbWVfbGVuOworCQkJCS8qIG51bGwgdGVybWluYXRlIG5hbWUgKi8KKwkJCQkqRUFEYXRhID0gMDsKKwkJCQkrK0VBRGF0YTsKKwkJCX0gZWxzZSBpZiAoYnVmX3NpemUgPT0gMCkgeworCQkJCS8qIHNraXAgY29weSAtIGNhbGMgc2l6ZSBvbmx5ICovCisJCQl9IGVsc2UgeworCQkJCS8qIHN0b3AgYmVmb3JlIG92ZXJydW4gYnVmZmVyICovCisJCQkJcmMgPSAtRVJBTkdFOworCQkJCWJyZWFrOwogCQkJfQogCQl9CisJCXRlbXBfcHRyICs9IG5hbWVfbGVuICsgMSArIHZhbHVlX2xlbjsKKwkJdGVtcF9mZWEgPSAoc3RydWN0IGZlYSAqKXRlbXBfcHRyOwogCX0KKworCS8qIGRpZG4ndCBmaW5kIHRoZSBuYW1lZCBhdHRyaWJ1dGUgKi8KKwlpZiAoZWFfbmFtZSkKKwkJcmMgPSAtRU5PREFUQTsKKworUUFsbEVBc091dDoKIAljaWZzX2J1Zl9yZWxlYXNlKHBTTUIpOwogCWlmIChyYyA9PSAtRUFHQUlOKQogCQlnb3RvIFFBbGxFQXNSZXRyeTsKQEAgLTU0MjAsMTU1ICs1NDYxLDYgQEAKIAlyZXR1cm4gKHNzaXplX3QpcmM7CiB9CiAKLXNzaXplX3QgQ0lGU1NNQlF1ZXJ5RUEoY29uc3QgaW50IHhpZCwgc3RydWN0IGNpZnNUY29uSW5mbyAqdGNvbiwKLQkJY29uc3QgdW5zaWduZWQgY2hhciAqc2VhcmNoTmFtZSwgY29uc3QgdW5zaWduZWQgY2hhciAqZWFfbmFtZSwKLQkJdW5zaWduZWQgY2hhciAqZWFfdmFsdWUsIHNpemVfdCBidWZfc2l6ZSwKLQkJY29uc3Qgc3RydWN0IG5sc190YWJsZSAqbmxzX2NvZGVwYWdlLCBpbnQgcmVtYXApCi17Ci0JVFJBTlNBQ1RJT04yX1FQSV9SRVEgKnBTTUIgPSBOVUxMOwotCVRSQU5TQUNUSU9OMl9RUElfUlNQICpwU01CciA9IE5VTEw7Ci0JaW50IHJjID0gMDsKLQlpbnQgYnl0ZXNfcmV0dXJuZWQ7Ci0JaW50IG5hbWVfbGVuOwotCXN0cnVjdCBmZWEgKnRlbXBfZmVhOwotCWNoYXIgKnRlbXBfcHRyOwotCV9fdTE2IHBhcmFtcywgYnl0ZV9jb3VudDsKLQotCWNGWUkoMSwgKCJJbiBRdWVyeSBFQSBwYXRoICVzIiwgc2VhcmNoTmFtZSkpOwotUUVBUmV0cnk6Ci0JcmMgPSBzbWJfaW5pdChTTUJfQ09NX1RSQU5TQUNUSU9OMiwgMTUsIHRjb24sICh2b2lkICoqKSAmcFNNQiwKLQkJICAgICAgKHZvaWQgKiopICZwU01Ccik7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlpZiAocFNNQi0+aGRyLkZsYWdzMiAmIFNNQkZMRzJfVU5JQ09ERSkgewotCQluYW1lX2xlbiA9Ci0JCSAgICBjaWZzQ29udmVydFRvVUNTKChfX2xlMTYgKikgcFNNQi0+RmlsZU5hbWUsIHNlYXJjaE5hbWUsCi0JCQkJICAgICBQQVRIX01BWCwgbmxzX2NvZGVwYWdlLCByZW1hcCk7Ci0JCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KLQkJbmFtZV9sZW4gKj0gMjsKLQl9IGVsc2UgewkvKiBCQiBpbXByb3ZlIHRoZSBjaGVjayBmb3IgYnVmZmVyIG92ZXJydW5zIEJCICovCi0JCW5hbWVfbGVuID0gc3RybmxlbihzZWFyY2hOYW1lLCBQQVRIX01BWCk7Ci0JCW5hbWVfbGVuKys7CS8qIHRyYWlsaW5nIG51bGwgKi8KLQkJc3RybmNweShwU01CLT5GaWxlTmFtZSwgc2VhcmNoTmFtZSwgbmFtZV9sZW4pOwotCX0KLQotCXBhcmFtcyA9IDIgLyogbGV2ZWwgKi8gKyA0IC8qIHJlc2VydmVkICovICsgbmFtZV9sZW4gLyogaW5jbHVkZXMgTlVMICovOwotCXBTTUItPlRvdGFsRGF0YUNvdW50ID0gMDsKLQlwU01CLT5NYXhQYXJhbWV0ZXJDb3VudCA9IGNwdV90b19sZTE2KDIpOwotCS8qIEJCIGZpbmQgZXhhY3QgbWF4IFNNQiBQRFUgZnJvbSBzZXNzIHN0cnVjdHVyZSBCQiAqLwotCXBTTUItPk1heERhdGFDb3VudCA9IGNwdV90b19sZTE2KDQwMDApOwotCXBTTUItPk1heFNldHVwQ291bnQgPSAwOwotCXBTTUItPlJlc2VydmVkID0gMDsKLQlwU01CLT5GbGFncyA9IDA7Ci0JcFNNQi0+VGltZW91dCA9IDA7Ci0JcFNNQi0+UmVzZXJ2ZWQyID0gMDsKLQlwU01CLT5QYXJhbWV0ZXJPZmZzZXQgPSBjcHVfdG9fbGUxNihvZmZzZXRvZigKLQkJc3RydWN0IHNtYl9jb21fdHJhbnNhY3Rpb24yX3FwaV9yZXEsIEluZm9ybWF0aW9uTGV2ZWwpIC0gNCk7Ci0JcFNNQi0+RGF0YUNvdW50ID0gMDsKLQlwU01CLT5EYXRhT2Zmc2V0ID0gMDsKLQlwU01CLT5TZXR1cENvdW50ID0gMTsKLQlwU01CLT5SZXNlcnZlZDMgPSAwOwotCXBTTUItPlN1YkNvbW1hbmQgPSBjcHVfdG9fbGUxNihUUkFOUzJfUVVFUllfUEFUSF9JTkZPUk1BVElPTik7Ci0JYnl0ZV9jb3VudCA9IHBhcmFtcyArIDEgLyogcGFkICovIDsKLQlwU01CLT5Ub3RhbFBhcmFtZXRlckNvdW50ID0gY3B1X3RvX2xlMTYocGFyYW1zKTsKLQlwU01CLT5QYXJhbWV0ZXJDb3VudCA9IHBTTUItPlRvdGFsUGFyYW1ldGVyQ291bnQ7Ci0JcFNNQi0+SW5mb3JtYXRpb25MZXZlbCA9IGNwdV90b19sZTE2KFNNQl9JTkZPX1FVRVJZX0FMTF9FQVMpOwotCXBTTUItPlJlc2VydmVkNCA9IDA7Ci0JcFNNQi0+aGRyLnNtYl9idWZfbGVuZ3RoICs9IGJ5dGVfY291bnQ7Ci0JcFNNQi0+Qnl0ZUNvdW50ID0gY3B1X3RvX2xlMTYoYnl0ZV9jb3VudCk7Ci0KLQlyYyA9IFNlbmRSZWNlaXZlKHhpZCwgdGNvbi0+c2VzLCAoc3RydWN0IHNtYl9oZHIgKikgcFNNQiwKLQkJCSAoc3RydWN0IHNtYl9oZHIgKikgcFNNQnIsICZieXRlc19yZXR1cm5lZCwgMCk7Ci0JaWYgKHJjKSB7Ci0JCWNGWUkoMSwgKCJTZW5kIGVycm9yIGluIFF1ZXJ5IEVBID0gJWQiLCByYykpOwotCX0gZWxzZSB7CQkvKiBkZWNvZGUgcmVzcG9uc2UgKi8KLQkJcmMgPSB2YWxpZGF0ZV90Migoc3RydWN0IHNtYl90Ml9yc3AgKilwU01Ccik7Ci0KLQkJLyogQkIgYWxzbyBjaGVjayBlbm91Z2ggdG90YWwgYnl0ZXMgcmV0dXJuZWQgKi8KLQkJLyogQkIgd2UgbmVlZCB0byBpbXByb3ZlIHRoZSB2YWxpZGl0eSBjaGVja2luZwotCQlvZiB0aGVzZSB0cmFuczIgcmVzcG9uc2VzICovCi0JCWlmIChyYyB8fCAocFNNQnItPkJ5dGVDb3VudCA8IDQpKQotCQkJcmMgPSAtRUlPOwkvKiBiYWQgc21iICovCi0JICAgLyogZWxzZSBpZiAocEZpbmREYXRhKXsKLQkJCW1lbWNweSgoY2hhciAqKSBwRmluZERhdGEsCi0JCQkgICAgICAgKGNoYXIgKikgJnBTTUJyLT5oZHIuUHJvdG9jb2wgKwotCQkJICAgICAgIGRhdGFfb2Zmc2V0LCBrbCk7Ci0JCX0qLyBlbHNlIHsKLQkJCS8qIGNoZWNrIHRoYXQgbGVuZ3RoIG9mIGxpc3QgaXMgbm90IG1vcmUgdGhhbiBiY2MgKi8KLQkJCS8qIGNoZWNrIHRoYXQgZWFjaCBlbnRyeSBkb2VzIG5vdCBnbyBiZXlvbmQgbGVuZ3RoCi0JCQkgICBvZiBsaXN0ICovCi0JCQkvKiBjaGVjayB0aGF0IGVhY2ggZWxlbWVudCBvZiBlYWNoIGVudHJ5IGRvZXMgbm90Ci0JCQkgICBnbyBiZXlvbmQgZW5kIG9mIGxpc3QgKi8KLQkJCV9fdTE2IGRhdGFfb2Zmc2V0ID0gbGUxNl90b19jcHUocFNNQnItPnQyLkRhdGFPZmZzZXQpOwotCQkJc3RydWN0IGZlYWxpc3QgKmVhX3Jlc3BvbnNlX2RhdGE7Ci0JCQlyYyA9IC1FTk9EQVRBOwotCQkJLyogdmFsaWRhdGVfdHJhbnMyX29mZnNldHMoKSAqLwotCQkJLyogQkIgY2hlY2sgaWYgc3RhcnQgb2Ygc21iICsgZGF0YV9vZmZzZXQgPiAmYmNjKyBiY2MqLwotCQkJZWFfcmVzcG9uc2VfZGF0YSA9IChzdHJ1Y3QgZmVhbGlzdCAqKQotCQkJCSgoKGNoYXIgKikgJnBTTUJyLT5oZHIuUHJvdG9jb2wpICsKLQkJCQlkYXRhX29mZnNldCk7Ci0JCQluYW1lX2xlbiA9IGxlMzJfdG9fY3B1KGVhX3Jlc3BvbnNlX2RhdGEtPmxpc3RfbGVuKTsKLQkJCWNGWUkoMSwgKCJlYSBsZW5ndGggJWQiLCBuYW1lX2xlbikpOwotCQkJaWYgKG5hbWVfbGVuIDw9IDgpIHsKLQkJCS8qIHJldHVybmVkIEVBIHNpemUgemVyb2VkIGF0IHRvcCBvZiBmdW5jdGlvbiAqLwotCQkJCWNGWUkoMSwgKCJlbXB0eSBFQSBsaXN0IHJldHVybmVkIGZyb20gc2VydmVyIikpOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBhY2NvdW50IGZvciBlYSBsaXN0IGxlbiAqLwotCQkJCW5hbWVfbGVuIC09IDQ7Ci0JCQkJdGVtcF9mZWEgPSBlYV9yZXNwb25zZV9kYXRhLT5saXN0OwotCQkJCXRlbXBfcHRyID0gKGNoYXIgKil0ZW1wX2ZlYTsKLQkJCQkvKiBsb29wIHRocm91Z2ggY2hlY2tpbmcgaWYgd2UgaGF2ZSBhIG1hdGNoaW5nCi0JCQkJbmFtZSBhbmQgdGhlbiByZXR1cm4gdGhlIGFzc29jaWF0ZWQgdmFsdWUgKi8KLQkJCQl3aGlsZSAobmFtZV9sZW4gPiAwKSB7Ci0JCQkJCV9fdTE2IHZhbHVlX2xlbjsKLQkJCQkJbmFtZV9sZW4gLT0gNDsKLQkJCQkJdGVtcF9wdHIgKz0gNDsKLQkJCQkJdmFsdWVfbGVuID0KLQkJCQkJICAgICAgbGUxNl90b19jcHUodGVtcF9mZWEtPnZhbHVlX2xlbik7Ci0JCQkJLyogQkIgdmFsaWRhdGUgdGhhdCB2YWx1ZV9sZW4gZmFsbHMgd2l0aGluIFNNQiwKLQkJCQlldmVuIHRob3VnaCBtYXhpbXVtIGZvciBuYW1lX2xlbiBpcyAyNTUgKi8KLQkJCQkJaWYgKG1lbWNtcCh0ZW1wX2ZlYS0+bmFtZSwgZWFfbmFtZSwKLQkJCQkJCSAgdGVtcF9mZWEtPm5hbWVfbGVuKSA9PSAwKSB7Ci0JCQkJCQkvKiBmb3VuZCBhIG1hdGNoICovCi0JCQkJCQlyYyA9IHZhbHVlX2xlbjsKLQkJCQkvKiBhY2NvdW50IGZvciBwcmVmaXggdXNlci4gYW5kIHRyYWlsaW5nIG51bGwgKi8KLQkJCQkJCWlmIChyYyA8PSAoaW50KWJ1Zl9zaXplKSB7Ci0JCQkJCQkJbWVtY3B5KGVhX3ZhbHVlLAotCQkJCQkJCQl0ZW1wX2ZlYS0+bmFtZSt0ZW1wX2ZlYS0+bmFtZV9sZW4rMSwKLQkJCQkJCQkJcmMpOwotCQkJCQkJCS8qIGVhIHZhbHVlcywgdW5saWtlIGVhCi0JCQkJCQkJICAgbmFtZXMsIGFyZSBub3QgbnVsbAotCQkJCQkJCSAgIHRlcm1pbmF0ZWQgKi8KLQkJCQkJCX0gZWxzZSBpZiAoYnVmX3NpemUgPT0gMCkgewotCQkJCQkJLyogc2tpcCBjb3B5IC0gY2FsYyBzaXplIG9ubHkgKi8KLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkvKiBzdG9wIGJlZm9yZSBvdmVycnVuIGJ1ZmZlciAqLwotCQkJCQkJCXJjID0gLUVSQU5HRTsKLQkJCQkJCX0KLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJCW5hbWVfbGVuIC09IHRlbXBfZmVhLT5uYW1lX2xlbjsKLQkJCQkJdGVtcF9wdHIgKz0gdGVtcF9mZWEtPm5hbWVfbGVuOwotCQkJCQkvKiBhY2NvdW50IGZvciB0cmFpbGluZyBudWxsICovCi0JCQkJCW5hbWVfbGVuLS07Ci0JCQkJCXRlbXBfcHRyKys7Ci0JCQkJCW5hbWVfbGVuIC09IHZhbHVlX2xlbjsKLQkJCQkJdGVtcF9wdHIgKz0gdmFsdWVfbGVuOwotCQkJCQkvKiBObyB0cmFpbGluZyBudWxsIHRvIGFjY291bnQgZm9yIGluCi0JCQkJCSAgIHZhbHVlX2xlbi4gIEdvIG9uIHRvIG5leHQgRUEgKi8KLQkJCQkJdGVtcF9mZWEgPSAoc3RydWN0IGZlYSAqKXRlbXBfcHRyOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQljaWZzX2J1Zl9yZWxlYXNlKHBTTUIpOwotCWlmIChyYyA9PSAtRUFHQUlOKQotCQlnb3RvIFFFQVJldHJ5OwotCi0JcmV0dXJuIChzc2l6ZV90KXJjOwotfQotCiBpbnQKIENJRlNTTUJTZXRFQShjb25zdCBpbnQgeGlkLCBzdHJ1Y3QgY2lmc1Rjb25JbmZvICp0Y29uLCBjb25zdCBjaGFyICpmaWxlTmFtZSwKIAkgICAgIGNvbnN0IGNoYXIgKmVhX25hbWUsIGNvbnN0IHZvaWQgKmVhX3ZhbHVlLApkaWZmIC0tZ2l0IGEvZnMvY2lmcy9jb25uZWN0LmMgYi9mcy9jaWZzL2Nvbm5lY3QuYwppbmRleCAyZTllMDljLi40NWViNmNiIDEwMDY0NAotLS0gYS9mcy9jaWZzL2Nvbm5lY3QuYworKysgYi9mcy9jaWZzL2Nvbm5lY3QuYwpAQCAtMjM4OCwxMyArMjM4OCwxMyBAQAogCQkgKi8KIAkJY2lmc19wdXRfdGNwX3Nlc3Npb24oc3J2VGNwKTsKIAotCQlkb3duKCZwU2VzSW5mby0+c2VzU2VtKTsKKwkJbXV0ZXhfbG9jaygmcFNlc0luZm8tPnNlc3Npb25fbXV0ZXgpOwogCQlpZiAocFNlc0luZm8tPm5lZWRfcmVjb25uZWN0KSB7CiAJCQljRllJKDEsICgiU2Vzc2lvbiBuZWVkcyByZWNvbm5lY3QiKSk7CiAJCQlyYyA9IGNpZnNfc2V0dXBfc2Vzc2lvbih4aWQsIHBTZXNJbmZvLAogCQkJCQkJY2lmc19zYi0+bG9jYWxfbmxzKTsKIAkJfQotCQl1cCgmcFNlc0luZm8tPnNlc1NlbSk7CisJCW11dGV4X3VubG9jaygmcFNlc0luZm8tPnNlc3Npb25fbXV0ZXgpOwogCX0gZWxzZSBpZiAoIXJjKSB7CiAJCWNGWUkoMSwgKCJFeGlzdGluZyBzbWIgc2VzcyBub3QgZm91bmQiKSk7CiAJCXBTZXNJbmZvID0gc2VzSW5mb0FsbG9jKCk7CkBAIC0yNDM3LDEyICsyNDM3LDEyIEBACiAJCX0KIAkJcFNlc0luZm8tPmxpbnV4X3VpZCA9IHZvbHVtZV9pbmZvLT5saW51eF91aWQ7CiAJCXBTZXNJbmZvLT5vdmVycmlkZVNlY0ZsZyA9IHZvbHVtZV9pbmZvLT5zZWNGbGc7Ci0JCWRvd24oJnBTZXNJbmZvLT5zZXNTZW0pOworCQltdXRleF9sb2NrKCZwU2VzSW5mby0+c2Vzc2lvbl9tdXRleCk7CiAKIAkJLyogQkIgRklYTUUgbmVlZCB0byBwYXNzIHZvbC0+c2VjRmxncyBCQiAqLwogCQlyYyA9IGNpZnNfc2V0dXBfc2Vzc2lvbih4aWQsIHBTZXNJbmZvLAogCQkJCQljaWZzX3NiLT5sb2NhbF9ubHMpOwotCQl1cCgmcFNlc0luZm8tPnNlc1NlbSk7CisJCW11dGV4X3VubG9jaygmcFNlc0luZm8tPnNlc3Npb25fbXV0ZXgpOwogCX0KIAogCS8qIHNlYXJjaCBmb3IgZXhpc3RpbmcgdGNvbiB0byB0aGlzIHNlcnZlciBzaGFyZSAqLwpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCAwNTdlMWRhLi4zZDhmOGE5IDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZpbGUuYworKysgYi9mcy9jaWZzL2ZpbGUuYwpAQCAtMjI4OSw5ICsyMjg5LDkgQEAKIAlpZiAoaW5vZGUgJiYgU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewogI2lmZGVmIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTAogCQlpZiAoY2lub2RlLT5jbGllbnRDYW5DYWNoZUFsbCA9PSAwKQotCQkJYnJlYWtfbGVhc2UoaW5vZGUsIEZNT0RFX1JFQUQpOworCQkJYnJlYWtfbGVhc2UoaW5vZGUsIE9fUkRPTkxZKTsKIAkJZWxzZSBpZiAoY2lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPT0gMCkKLQkJCWJyZWFrX2xlYXNlKGlub2RlLCBGTU9ERV9XUklURSk7CisJCQlicmVha19sZWFzZShpbm9kZSwgT19XUk9OTFkpOwogI2VuZGlmCiAJCXJjID0gZmlsZW1hcF9mZGF0YXdyaXRlKGlub2RlLT5pX21hcHBpbmcpOwogCQlpZiAoY2lub2RlLT5jbGllbnRDYW5DYWNoZVJlYWQgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9pbm9kZS5jIGIvZnMvY2lmcy9pbm9kZS5jCmluZGV4IGUzZmRhOTcuLjhiZGJjODEgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvaW5vZGUuYworKysgYi9mcy9jaWZzL2lub2RlLmMKQEAgLTExMSw2ICsxMTEsNyBAQAogCiAJY2lmc19pLT5kZWxldGVfcGVuZGluZyA9IGZhdHRyLT5jZl9mbGFncyAmIENJRlNfRkFUVFJfREVMRVRFX1BFTkRJTkc7CiAKKwljaWZzX2ktPnNlcnZlcl9lb2YgPSBmYXR0ci0+Y2ZfZW9mOwogCS8qCiAJICogQ2FuJ3Qgc2FmZWx5IGNoYW5nZSB0aGUgZmlsZSBzaXplIGhlcmUgaWYgdGhlIGNsaWVudCBpcyB3cml0aW5nIHRvCiAJICogaXQgZHVlIHRvIHBvdGVudGlhbCByYWNlcy4KQEAgLTM2Niw3ICszNjcsNyBAQAogCWNoYXIgZWFfdmFsdWVbNF07CiAJX191MzIgbW9kZTsKIAotCXJjID0gQ0lGU1NNQlF1ZXJ5RUEoeGlkLCBjaWZzX3NiLT50Y29uLCBwYXRoLCAiU0VURklMRUJJVFMiLAorCXJjID0gQ0lGU1NNQlFBbGxFQXMoeGlkLCBjaWZzX3NiLT50Y29uLCBwYXRoLCAiU0VURklMRUJJVFMiLAogCQkJICAgIGVhX3ZhbHVlLCA0IC8qIHNpemUgb2YgYnVmICovLCBjaWZzX3NiLT5sb2NhbF9ubHMsCiAJCQkgICAgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJgogCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvbWlzYy5jIGIvZnMvY2lmcy9taXNjLmMKaW5kZXggZDI3ZDRlYy4uZDE0NzQ5OSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9taXNjLmMKKysrIGIvZnMvY2lmcy9taXNjLmMKQEAgLTc5LDcgKzc5LDcgQEAKIAkJKytyZXRfYnVmLT5zZXNfY291bnQ7CiAJCUlOSVRfTElTVF9IRUFEKCZyZXRfYnVmLT5zbWJfc2VzX2xpc3QpOwogCQlJTklUX0xJU1RfSEVBRCgmcmV0X2J1Zi0+dGNvbl9saXN0KTsKLQkJaW5pdF9NVVRFWCgmcmV0X2J1Zi0+c2VzU2VtKTsKKwkJbXV0ZXhfaW5pdCgmcmV0X2J1Zi0+c2Vzc2lvbl9tdXRleCk7CiAJfQogCXJldHVybiByZXRfYnVmOwogfQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy94YXR0ci5jIGIvZnMvY2lmcy94YXR0ci5jCmluZGV4IGE3NWFmYTMuLjNlMmVmMGQgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMveGF0dHIuYworKysgYi9mcy9jaWZzL3hhdHRyLmMKQEAgLTI0NCw3ICsyNDQsNyBAQAogCQkJLyogcmV2YWxpZGF0ZS9nZXRhdHRyIHRoZW4gcG9wdWxhdGUgZnJvbSBpbm9kZSAqLwogCQl9IC8qIEJCIGFkZCBlbHNlIHdoZW4gYWJvdmUgaXMgaW1wbGVtZW50ZWQgKi8KIAkJZWFfbmFtZSArPSA1OyAvKiBza2lwIHBhc3QgdXNlci4gcHJlZml4ICovCi0JCXJjID0gQ0lGU1NNQlF1ZXJ5RUEoeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBlYV9uYW1lLCBlYV92YWx1ZSwKKwkJcmMgPSBDSUZTU01CUUFsbEVBcyh4aWQsIHBUY29uLCBmdWxsX3BhdGgsIGVhX25hbWUsIGVhX3ZhbHVlLAogCQkJYnVmX3NpemUsIGNpZnNfc2ItPmxvY2FsX25scywKIAkJCWNpZnNfc2ItPm1udF9jaWZzX2ZsYWdzICYgQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCX0gZWxzZSBpZiAoc3RybmNtcChlYV9uYW1lLCBDSUZTX1hBVFRSX09TMl9QUkVGSVgsIDQpID09IDApIHsKQEAgLTI1Miw3ICsyNTIsNyBAQAogCQkJZ290byBnZXRfZWFfZXhpdDsKIAogCQllYV9uYW1lICs9IDQ7IC8qIHNraXAgcGFzdCBvczIuIHByZWZpeCAqLwotCQlyYyA9IENJRlNTTUJRdWVyeUVBKHhpZCwgcFRjb24sIGZ1bGxfcGF0aCwgZWFfbmFtZSwgZWFfdmFsdWUsCisJCXJjID0gQ0lGU1NNQlFBbGxFQXMoeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBlYV9uYW1lLCBlYV92YWx1ZSwKIAkJCWJ1Zl9zaXplLCBjaWZzX3NiLT5sb2NhbF9ubHMsCiAJCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAl9IGVsc2UgaWYgKHN0cm5jbXAoZWFfbmFtZSwgUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUywKQEAgLTM2NCw4ICszNjQsOCBAQAogCS8qIGlmIHByb2MvZnMvY2lmcy9zdHJlYW1zdG94YXR0ciBpcyBzZXQgdGhlbgogCQlzZWFyY2ggc2VydmVyIGZvciBFQXMgb3Igc3RyZWFtcyB0bwogCQlyZXR1cm5zIGFzIHhhdHRycyAqLwotCXJjID0gQ0lGU1NNQlFBbGxFQXMoeGlkLCBwVGNvbiwgZnVsbF9wYXRoLCBkYXRhLCBidWZfc2l6ZSwKLQkJCQljaWZzX3NiLT5sb2NhbF9ubHMsCisJcmMgPSBDSUZTU01CUUFsbEVBcyh4aWQsIHBUY29uLCBmdWxsX3BhdGgsIE5VTEwsIGRhdGEsCisJCQkJYnVmX3NpemUsIGNpZnNfc2ItPmxvY2FsX25scywKIAkJCQljaWZzX3NiLT5tbnRfY2lmc19mbGFncyAmCiAJCQkJCUNJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIApkaWZmIC0tZ2l0IGEvZnMvY29tcGF0LmMgYi9mcy9jb21wYXQuYwppbmRleCAwMGQ5MGMyLi4wMzA2MDJkIDEwMDY0NAotLS0gYS9mcy9jb21wYXQuYworKysgYi9mcy9jb21wYXQuYwpAQCAtMTc5NSw2ICsxNzk1LDI0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RydWN0IGNvbXBhdF9zZWxfYXJnX3N0cnVjdCB7CisJY29tcGF0X3Vsb25nX3QgbjsKKwljb21wYXRfdXB0cl90IGlucDsKKwljb21wYXRfdXB0cl90IG91dHA7CisJY29tcGF0X3VwdHJfdCBleHA7CisJY29tcGF0X3VwdHJfdCB0dnA7Cit9OworCithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19vbGRfc2VsZWN0KHN0cnVjdCBjb21wYXRfc2VsX2FyZ19zdHJ1Y3QgX191c2VyICphcmcpCit7CisJc3RydWN0IGNvbXBhdF9zZWxfYXJnX3N0cnVjdCBhOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZhLCBhcmcsIHNpemVvZihhKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiBjb21wYXRfc3lzX3NlbGVjdChhLm4sIGNvbXBhdF9wdHIoYS5pbnApLCBjb21wYXRfcHRyKGEub3V0cCksCisJCQkJIGNvbXBhdF9wdHIoYS5leHApLCBjb21wYXRfcHRyKGEudHZwKSk7Cit9CisKICNpZmRlZiBIQVZFX1NFVF9SRVNUT1JFX1NJR01BU0sKIHN0YXRpYyBsb25nIGRvX2NvbXBhdF9wc2VsZWN0KGludCBuLCBjb21wYXRfdWxvbmdfdCBfX3VzZXIgKmlucCwKIAljb21wYXRfdWxvbmdfdCBfX3VzZXIgKm91dHAsIGNvbXBhdF91bG9uZ190IF9fdXNlciAqZXhwLApkaWZmIC0tZ2l0IGEvZnMvY29tcGF0X2JpbmZtdF9lbGYuYyBiL2ZzL2NvbXBhdF9iaW5mbXRfZWxmLmMKaW5kZXggMGFkY2VkMi4uMTEyZTQ1YSAxMDA2NDQKLS0tIGEvZnMvY29tcGF0X2JpbmZtdF9lbGYuYworKysgYi9mcy9jb21wYXRfYmluZm10X2VsZi5jCkBAIC0yOCwxMCArMjgsMTIgQEAKIAogI3VuZGVmCWVsZmhkcgogI3VuZGVmCWVsZl9waGRyCisjdW5kZWYJZWxmX3NoZHIKICN1bmRlZgllbGZfbm90ZQogI3VuZGVmCWVsZl9hZGRyX3QKICNkZWZpbmUgZWxmaGRyCQllbGYzMl9oZHIKICNkZWZpbmUgZWxmX3BoZHIJZWxmMzJfcGhkcgorI2RlZmluZSBlbGZfc2hkcgllbGYzMl9zaGRyCiAjZGVmaW5lIGVsZl9ub3RlCWVsZjMyX25vdGUKICNkZWZpbmUgZWxmX2FkZHJfdAlFbGYzMl9BZGRyCiAKZGlmZiAtLWdpdCBhL2ZzL2NvbXBhdF9pb2N0bC5jIGIvZnMvY29tcGF0X2lvY3RsLmMKaW5kZXggMGNhOWVjNC4uNmQ1NWI2MSAxMDA2NDQKLS0tIGEvZnMvY29tcGF0X2lvY3RsLmMKKysrIGIvZnMvY29tcGF0X2lvY3RsLmMKQEAgLTU0NSw3ICs1NDUsNyBAQAogCQlrY21kID0gTVRJT0NQT1M7CiAJCWthcmcgPSAmcG9zOwogCQlicmVhazsKLQljYXNlIE1USU9DR0VUMzI6CisJZGVmYXVsdDoJLyogTVRJT0NHRVQzMiAqLwogCQlrY21kID0gTVRJT0NHRVQ7CiAJCWthcmcgPSAmZ2V0OwogCQlicmVhazsKQEAgLTY2Myw3ICs2NjMsNyBAQAogCiAgICAgICAgIHN3aXRjaCAoY21kKSB7CiAgICAgICAgIGNhc2UgUkFXX1NFVEJJTkQ6Ci0gICAgICAgIGNhc2UgUkFXX0dFVEJJTkQ6IHsKKwlkZWZhdWx0OiB7CS8qIFJBV19HRVRCSU5EICovCiAgICAgICAgICAgICAgICAgc3RydWN0IHJhd19jb25maWdfcmVxdWVzdCByZXE7CiAgICAgICAgICAgICAgICAgbW1fc2VnbWVudF90IG9sZGZzID0gZ2V0X2ZzKCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2RjYWNoZS5jIGIvZnMvZGNhY2hlLmMKaW5kZXggOTUzMTczYS4uZjEzNThlNSAxMDA2NDQKLS0tIGEvZnMvZGNhY2hlLmMKKysrIGIvZnMvZGNhY2hlLmMKQEAgLTI1Nyw2ICsyNTcsNyBAQAogCWlmIChkZW50cnkpCiAJCWdvdG8gcmVwZWF0OwogfQorRVhQT1JUX1NZTUJPTChkcHV0KTsKIAogLyoqCiAgKiBkX2ludmFsaWRhdGUgLSBpbnZhbGlkYXRlIGEgZGVudHJ5CkBAIC0zMTQsNiArMzE1LDcgQEAKIAlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChkX2ludmFsaWRhdGUpOwogCiAvKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgX29ubHlfIHdpdGggZGNhY2hlX2xvY2sgaGVsZCAqLwogCkBAIC0zMjgsNiArMzMwLDcgQEAKIHsKIAlyZXR1cm4gX19kZ2V0X2xvY2tlZChkZW50cnkpOwogfQorRVhQT1JUX1NZTUJPTChkZ2V0X2xvY2tlZCk7CiAKIC8qKgogICogZF9maW5kX2FsaWFzIC0gZ3JhYiBhIGhhc2hlZCBhbGlhcyBvZiBpbm9kZQpAQCAtMzg0LDYgKzM4Nyw3IEBACiAJfQogCXJldHVybiBkZTsKIH0KK0VYUE9SVF9TWU1CT0woZF9maW5kX2FsaWFzKTsKIAogLyoKICAqCVRyeSB0byBraWxsIGRlbnRyaWVzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGlub2RlLgpAQCAtNDA4LDYgKzQxMiw3IEBACiAJfQogCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiB9CitFWFBPUlRfU1lNQk9MKGRfcHJ1bmVfYWxpYXNlcyk7CiAKIC8qCiAgKiBUaHJvdyBhd2F5IGEgZGVudHJ5IC0gZnJlZSB0aGUgaW5vZGUsIGRwdXQgdGhlIHBhcmVudC4gIFRoaXMgcmVxdWlyZXMgdGhhdApAQCAtNjEwLDYgKzYxNSw3IEBACiB7CiAJX19zaHJpbmtfZGNhY2hlX3NiKHNiLCBOVUxMLCAwKTsKIH0KK0VYUE9SVF9TWU1CT0woc2hyaW5rX2RjYWNoZV9zYik7CiAKIC8qCiAgKiBkZXN0cm95IGEgc2luZ2xlIHN1YnRyZWUgb2YgZGVudHJpZXMgZm9yIHVubW91bnQKQEAgLTc5Miw2ICs3OTgsNyBAQAogCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiAJcmV0dXJuIDE7CiB9CitFWFBPUlRfU1lNQk9MKGhhdmVfc3VibW91bnRzKTsKIAogLyoKICAqIFNlYXJjaCB0aGUgZGVudHJ5IGNoaWxkIGxpc3QgZm9yIHRoZSBzcGVjaWZpZWQgcGFyZW50LApAQCAtODc2LDYgKzg4Myw3IEBACiAJd2hpbGUgKChmb3VuZCA9IHNlbGVjdF9wYXJlbnQocGFyZW50KSkgIT0gMCkKIAkJX19zaHJpbmtfZGNhY2hlX3NiKHNiLCAmZm91bmQsIDApOwogfQorRVhQT1JUX1NZTUJPTChzaHJpbmtfZGNhY2hlX3BhcmVudCk7CiAKIC8qCiAgKiBTY2FuIGBucicgZGVudHJpZXMgYW5kIHJldHVybiB0aGUgbnVtYmVyIHdoaWNoIHJlbWFpbi4KQEAgLTk2OCw2ICs5NzYsNyBAQAogCiAJcmV0dXJuIGRlbnRyeTsKIH0KK0VYUE9SVF9TWU1CT0woZF9hbGxvYyk7CiAKIHN0cnVjdCBkZW50cnkgKmRfYWxsb2NfbmFtZShzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC0xMDEyLDYgKzEwMjEsNyBAQAogCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiAJc2VjdXJpdHlfZF9pbnN0YW50aWF0ZShlbnRyeSwgaW5vZGUpOwogfQorRVhQT1JUX1NZTUJPTChkX2luc3RhbnRpYXRlKTsKIAogLyoqCiAgKiBkX2luc3RhbnRpYXRlX3VuaXF1ZSAtIGluc3RhbnRpYXRlIGEgbm9uLWFsaWFzZWQgZGVudHJ5CkBAIC0xMTA4LDYgKzExMTgsNyBAQAogCX0KIAlyZXR1cm4gcmVzOwogfQorRVhQT1JUX1NZTUJPTChkX2FsbG9jX3Jvb3QpOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBobGlzdF9oZWFkICpkX2hhc2goc3RydWN0IGRlbnRyeSAqcGFyZW50LAogCQkJCQl1bnNpZ25lZCBsb25nIGhhc2gpCkBAIC0xMjExLDcgKzEyMjIsNiBAQAogCQkJQlVHX09OKCEobmV3LT5kX2ZsYWdzICYgRENBQ0hFX0RJU0NPTk5FQ1RFRCkpOwogCQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIAkJCXNlY3VyaXR5X2RfaW5zdGFudGlhdGUobmV3LCBpbm9kZSk7Ci0JCQlkX3JlaGFzaChkZW50cnkpOwogCQkJZF9tb3ZlKG5ldywgZGVudHJ5KTsKIAkJCWlwdXQoaW5vZGUpOwogCQl9IGVsc2UgewpAQCAtMTIyNSw2ICsxMjM1LDcgQEAKIAkJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CiAJcmV0dXJuIG5ldzsKIH0KK0VYUE9SVF9TWU1CT0woZF9zcGxpY2VfYWxpYXMpOwogCiAvKioKICAqIGRfYWRkX2NpIC0gbG9va3VwIG9yIGFsbG9jYXRlIG5ldyBkZW50cnkgd2l0aCBjYXNlLWV4YWN0IG5hbWUKQEAgLTEzMTQsNiArMTMyNSw3IEBACiAJaXB1dChpbm9kZSk7CiAJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwogfQorRVhQT1JUX1NZTUJPTChkX2FkZF9jaSk7CiAKIC8qKgogICogZF9sb29rdXAgLSBzZWFyY2ggZm9yIGEgZGVudHJ5CkBAIC0xMzU3LDYgKzEzNjksNyBAQAogCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnJlbmFtZV9sb2NrLCBzZXEpKTsKIAlyZXR1cm4gZGVudHJ5OwogfQorRVhQT1JUX1NZTUJPTChkX2xvb2t1cCk7CiAKIHN0cnVjdCBkZW50cnkgKiBfX2RfbG9va3VwKHN0cnVjdCBkZW50cnkgKiBwYXJlbnQsIHN0cnVjdCBxc3RyICogbmFtZSkKIHsKQEAgLTE0ODMsNiArMTQ5Niw3IEBACiBvdXQ6CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGRfdmFsaWRhdGUpOwogCiAvKgogICogV2hlbiBhIGZpbGUgaXMgZGVsZXRlZCwgd2UgaGF2ZSB0d28gb3B0aW9uczoKQEAgLTE1MjgsNiArMTU0Miw3IEBACiAKIAlmc25vdGlmeV9uYW1lcmVtb3ZlKGRlbnRyeSwgaXNkaXIpOwogfQorRVhQT1JUX1NZTUJPTChkX2RlbGV0ZSk7CiAKIHN0YXRpYyB2b2lkIF9fZF9yZWhhc2goc3RydWN0IGRlbnRyeSAqIGVudHJ5LCBzdHJ1Y3QgaGxpc3RfaGVhZCAqbGlzdCkKIHsKQEAgLTE1NTYsNiArMTU3MSw3IEBACiAJc3Bpbl91bmxvY2soJmVudHJ5LT5kX2xvY2spOwogCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiB9CitFWFBPUlRfU1lNQk9MKGRfcmVoYXNoKTsKIAogLyoKICAqIFdoZW4gc3dpdGNoaW5nIG5hbWVzLCB0aGUgYWN0dWFsIHN0cmluZyBkb2Vzbid0IHN0cmljdGx5IGhhdmUgdG8KQEAgLTE3MDIsNiArMTcxOCw3IEBACiAJZF9tb3ZlX2xvY2tlZChkZW50cnksIHRhcmdldCk7CiAJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKIH0KK0VYUE9SVF9TWU1CT0woZF9tb3ZlKTsKIAogLyoqCiAgKiBkX2FuY2VzdG9yIC0gc2VhcmNoIGZvciBhbiBhbmNlc3RvcgpAQCAtMTg2OCw2ICsxODg1LDcgQEAKIAlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogCUJVRygpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoZF9tYXRlcmlhbGlzZV91bmlxdWUpOwogCiBzdGF0aWMgaW50IHByZXBlbmQoY2hhciAqKmJ1ZmZlciwgaW50ICpidWZsZW4sIGNvbnN0IGNoYXIgKnN0ciwgaW50IG5hbWVsZW4pCiB7CkBAIC0yMDA1LDYgKzIwMjMsNyBAQAogCXBhdGhfcHV0KCZyb290KTsKIAlyZXR1cm4gcmVzOwogfQorRVhQT1JUX1NZTUJPTChkX3BhdGgpOwogCiAvKgogICogSGVscGVyIGZ1bmN0aW9uIGZvciBkZW50cnlfb3BlcmF0aW9ucy5kX2RuYW1lKCkgbWVtYmVycwpAQCAtMjE3MSw2ICsyMTkwLDMwIEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAoraW50IHBhdGhfaXNfdW5kZXIoc3RydWN0IHBhdGggKnBhdGgxLCBzdHJ1Y3QgcGF0aCAqcGF0aDIpCit7CisJc3RydWN0IHZmc21vdW50ICptbnQgPSBwYXRoMS0+bW50OworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IHBhdGgxLT5kZW50cnk7CisJaW50IHJlczsKKwlzcGluX2xvY2soJnZmc21vdW50X2xvY2spOworCWlmIChtbnQgIT0gcGF0aDItPm1udCkgeworCQlmb3IgKDs7KSB7CisJCQlpZiAobW50LT5tbnRfcGFyZW50ID09IG1udCkgeworCQkJCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCWlmIChtbnQtPm1udF9wYXJlbnQgPT0gcGF0aDItPm1udCkKKwkJCQlicmVhazsKKwkJCW1udCA9IG1udC0+bW50X3BhcmVudDsKKwkJfQorCQlkZW50cnkgPSBtbnQtPm1udF9tb3VudHBvaW50OworCX0KKwlyZXMgPSBpc19zdWJkaXIoZGVudHJ5LCBwYXRoMi0+ZGVudHJ5KTsKKwlzcGluX3VubG9jaygmdmZzbW91bnRfbG9jayk7CisJcmV0dXJuIHJlczsKK30KK0VYUE9SVF9TWU1CT0wocGF0aF9pc191bmRlcik7CisKIHZvaWQgZF9nZW5vY2lkZShzdHJ1Y3QgZGVudHJ5ICpyb290KQogewogCXN0cnVjdCBkZW50cnkgKnRoaXNfcGFyZW50ID0gcm9vdDsKQEAgLTIyMjgsNiArMjI3MSw3IEBACiAJfQogCXJldHVybiBpbm87CiB9CitFWFBPUlRfU1lNQk9MKGZpbmRfaW5vZGVfbnVtYmVyKTsKIAogc3RhdGljIF9faW5pdGRhdGEgdW5zaWduZWQgbG9uZyBkaGFzaF9lbnRyaWVzOwogc3RhdGljIGludCBfX2luaXQgc2V0X2RoYXNoX2VudHJpZXMoY2hhciAqc3RyKQpAQCAtMjI5Nyw2ICsyMzQxLDcgQEAKIAogLyogU0xBQiBjYWNoZSBmb3IgX19nZXRuYW1lKCkgY29uc3VtZXJzICovCiBzdHJ1Y3Qga21lbV9jYWNoZSAqbmFtZXNfY2FjaGVwIF9fcmVhZF9tb3N0bHk7CitFWFBPUlRfU1lNQk9MKG5hbWVzX2NhY2hlcCk7CiAKIEVYUE9SVF9TWU1CT0woZF9nZW5vY2lkZSk7CiAKQEAgLTIzMjYsMjYgKzIzNzEsMyBAQAogCWJkZXZfY2FjaGVfaW5pdCgpOwogCWNocmRldl9pbml0KCk7CiB9Ci0KLUVYUE9SVF9TWU1CT0woZF9hbGxvYyk7Ci1FWFBPUlRfU1lNQk9MKGRfYWxsb2Nfcm9vdCk7Ci1FWFBPUlRfU1lNQk9MKGRfZGVsZXRlKTsKLUVYUE9SVF9TWU1CT0woZF9maW5kX2FsaWFzKTsKLUVYUE9SVF9TWU1CT0woZF9pbnN0YW50aWF0ZSk7Ci1FWFBPUlRfU1lNQk9MKGRfaW52YWxpZGF0ZSk7Ci1FWFBPUlRfU1lNQk9MKGRfbG9va3VwKTsKLUVYUE9SVF9TWU1CT0woZF9tb3ZlKTsKLUVYUE9SVF9TWU1CT0xfR1BMKGRfbWF0ZXJpYWxpc2VfdW5pcXVlKTsKLUVYUE9SVF9TWU1CT0woZF9wYXRoKTsKLUVYUE9SVF9TWU1CT0woZF9wcnVuZV9hbGlhc2VzKTsKLUVYUE9SVF9TWU1CT0woZF9yZWhhc2gpOwotRVhQT1JUX1NZTUJPTChkX3NwbGljZV9hbGlhcyk7Ci1FWFBPUlRfU1lNQk9MKGRfYWRkX2NpKTsKLUVYUE9SVF9TWU1CT0woZF92YWxpZGF0ZSk7Ci1FWFBPUlRfU1lNQk9MKGRnZXRfbG9ja2VkKTsKLUVYUE9SVF9TWU1CT0woZHB1dCk7Ci1FWFBPUlRfU1lNQk9MKGZpbmRfaW5vZGVfbnVtYmVyKTsKLUVYUE9SVF9TWU1CT0woaGF2ZV9zdWJtb3VudHMpOwotRVhQT1JUX1NZTUJPTChuYW1lc19jYWNoZXApOwotRVhQT1JUX1NZTUJPTChzaHJpbmtfZGNhY2hlX3BhcmVudCk7Ci1FWFBPUlRfU1lNQk9MKHNocmlua19kY2FjaGVfc2IpOwpkaWZmIC0tZ2l0IGEvZnMvZGVidWdmcy9pbm9kZS5jIGIvZnMvZGVidWdmcy9pbm9kZS5jCmluZGV4IDI3NGFjODYuLjA0OWQ2YzMgMTAwNjQ0Ci0tLSBhL2ZzL2RlYnVnZnMvaW5vZGUuYworKysgYi9mcy9kZWJ1Z2ZzL2lub2RlLmMKQEAgLTQ5Niw3ICs0OTYsNyBAQAogCX0KIAlkX21vdmUob2xkX2RlbnRyeSwgZGVudHJ5KTsKIAlmc25vdGlmeV9tb3ZlKG9sZF9kaXItPmRfaW5vZGUsIG5ld19kaXItPmRfaW5vZGUsIG9sZF9uYW1lLAotCQlvbGRfZGVudHJ5LT5kX25hbWUubmFtZSwgU19JU0RJUihvbGRfZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpLAorCQlTX0lTRElSKG9sZF9kZW50cnktPmRfaW5vZGUtPmlfbW9kZSksCiAJCU5VTEwsIG9sZF9kZW50cnkpOwogCWZzbm90aWZ5X29sZG5hbWVfZnJlZShvbGRfbmFtZSk7CiAJdW5sb2NrX3JlbmFtZShuZXdfZGlyLCBvbGRfZGlyKTsKZGlmZiAtLWdpdCBhL2ZzL2RsbS9sb2Nrc3BhY2UuYyBiL2ZzL2RsbS9sb2Nrc3BhY2UuYwppbmRleCAyNmE4YmQ0Li5mOTk0YTdkIDEwMDY0NAotLS0gYS9mcy9kbG0vbG9ja3NwYWNlLmMKKysrIGIvZnMvZGxtL2xvY2tzcGFjZS5jCkBAIC0xNDgsNyArMTQ4LDcgQEAKIAlrZnJlZShscyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIGRsbV9hdHRyX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIGRsbV9hdHRyX29wcyA9IHsKIAkuc2hvdyAgPSBkbG1fYXR0cl9zaG93LAogCS5zdG9yZSA9IGRsbV9hdHRyX3N0b3JlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2RsbS9tZW1iZXIuYyBiL2ZzL2RsbS9tZW1iZXIuYwppbmRleCA4NGY3MGJmLi5iMTI1MzJlIDEwMDY0NAotLS0gYS9mcy9kbG0vbWVtYmVyLmMKKysrIGIvZnMvZGxtL21lbWJlci5jCkBAIC0zMTIsNyArMzEyLDcgQEAKIAkvKgogCSAqIFRoaXMgaW5fcmVjb3ZlcnkgbG9jayBkb2VzIHR3byB0aGluZ3M6CiAJICogMSkgS2VlcHMgdGhpcyBmdW5jdGlvbiBmcm9tIHJldHVybmluZyB1bnRpbCBhbGwgdGhyZWFkcyBhcmUgb3V0Ci0JICogICAgb2YgbG9ja2luZyByb3V0aW5lcyBhbmQgbG9ja2luZyBpcyB0cnVlbHkgc3RvcHBlZC4KKwkgKiAgICBvZiBsb2NraW5nIHJvdXRpbmVzIGFuZCBsb2NraW5nIGlzIHRydWx5IHN0b3BwZWQuCiAJICogMikgS2VlcHMgYW55IG5ldyByZXF1ZXN0cyBmcm9tIGJlaW5nIHByb2Nlc3NlZCB1bnRpbCBpdCdzIHVubG9ja2VkCiAJICogICAgd2hlbiByZWNvdmVyeSBpcyBjb21wbGV0ZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCBjY2U2YmJkLi40OWNkYWExIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC0xOTUsNyArMTk1LDcgQEAKIAkJICogICAgdG8gd29yayBmcm9tLgogCQkgKi8KIAkJcmxpbSA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbTsKLQkJaWYgKHNpemUgPiBybGltW1JMSU1JVF9TVEFDS10ucmxpbV9jdXIgLyA0KSB7CisJCWlmIChzaXplID4gQUNDRVNTX09OQ0UocmxpbVtSTElNSVRfU1RBQ0tdLnJsaW1fY3VyKSAvIDQpIHsKIAkJCXB1dF9wYWdlKHBhZ2UpOwogCQkJcmV0dXJuIE5VTEw7CiAJCX0KQEAgLTI0Niw2ICsyNDYsNyBAQAogCXZtYS0+dm1fc3RhcnQgPSB2bWEtPnZtX2VuZCAtIFBBR0VfU0laRTsKIAl2bWEtPnZtX2ZsYWdzID0gVk1fU1RBQ0tfRkxBR1M7CiAJdm1hLT52bV9wYWdlX3Byb3QgPSB2bV9nZXRfcGFnZV9wcm90KHZtYS0+dm1fZmxhZ3MpOworCUlOSVRfTElTVF9IRUFEKCZ2bWEtPmFub25fdm1hX2NoYWluKTsKIAllcnIgPSBpbnNlcnRfdm1fc3RydWN0KG1tLCB2bWEpOwogCWlmIChlcnIpCiAJCWdvdG8gZXJyOwpAQCAtNTE2LDcgKzUxNyw4IEBACiAJLyoKIAkgKiBjb3ZlciB0aGUgd2hvbGUgcmFuZ2U6IFtuZXdfc3RhcnQsIG9sZF9lbmQpCiAJICovCi0Jdm1hX2FkanVzdCh2bWEsIG5ld19zdGFydCwgb2xkX2VuZCwgdm1hLT52bV9wZ29mZiwgTlVMTCk7CisJaWYgKHZtYV9hZGp1c3Qodm1hLCBuZXdfc3RhcnQsIG9sZF9lbmQsIHZtYS0+dm1fcGdvZmYsIE5VTEwpKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qCiAJICogbW92ZSB0aGUgcGFnZSB0YWJsZXMgZG93bndhcmRzLCBvbiBmYWlsdXJlIHdlIHJlbHkgb24KQEAgLTU0NywxNSArNTQ5LDEzIEBACiAJdGxiX2ZpbmlzaF9tbXUodGxiLCBuZXdfZW5kLCBvbGRfZW5kKTsKIAogCS8qCi0JICogc2hyaW5rIHRoZSB2bWEgdG8ganVzdCB0aGUgbmV3IHJhbmdlLgorCSAqIFNocmluayB0aGUgdm1hIHRvIGp1c3QgdGhlIG5ldyByYW5nZS4gIEFsd2F5cyBzdWNjZWVkcy4KIAkgKi8KIAl2bWFfYWRqdXN0KHZtYSwgbmV3X3N0YXJ0LCBuZXdfZW5kLCB2bWEtPnZtX3Bnb2ZmLCBOVUxMKTsKIAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIEVYVFJBX1NUQUNLX1ZNX1BBR0VTCTIwCS8qIHJhbmRvbSAqLwotCiAvKgogICogRmluYWxpemVzIHRoZSBzdGFjayB2bV9hcmVhX3N0cnVjdC4gVGhlIGZsYWdzIGFuZCBwZXJtaXNzaW9ucyBhcmUgdXBkYXRlZCwKICAqIHRoZSBzdGFjayBpcyBvcHRpb25hbGx5IHJlbG9jYXRlZCwgYW5kIHNvbWUgZXh0cmEgc3BhY2UgaXMgYWRkZWQuCkBAIC01NzcsNyArNTc3LDcgQEAKIAogI2lmZGVmIENPTkZJR19TVEFDS19HUk9XU1VQCiAJLyogTGltaXQgc3RhY2sgc2l6ZSB0byAxR0IgKi8KLQlzdGFja19iYXNlID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9TVEFDS10ucmxpbV9tYXg7CisJc3RhY2tfYmFzZSA9IHJsaW1pdF9tYXgoUkxJTUlUX1NUQUNLKTsKIAlpZiAoc3RhY2tfYmFzZSA+ICgxIDw8IDMwKSkKIAkJc3RhY2tfYmFzZSA9IDEgPDwgMzA7CiAKQEAgLTYzMCw3ICs2MzAsNyBAQAogCQkJZ290byBvdXRfdW5sb2NrOwogCX0KIAotCXN0YWNrX2V4cGFuZCA9IEVYVFJBX1NUQUNLX1ZNX1BBR0VTICogUEFHRV9TSVpFOworCXN0YWNrX2V4cGFuZCA9IDEzMTA3MlVMOyAvKiByYW5kb21seSAzMio0ayAob3IgMio2NGspIHBhZ2VzICovCiAJc3RhY2tfc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKIAkvKgogCSAqIEFsaWduIHRoaXMgZG93biB0byBhIHBhZ2UgYm91bmRhcnkgYXMgZXhwYW5kX3N0YWNrCkBAIC03MTgsNiArNzE4LDcgQEAKIAkvKiBOb3RpZnkgcGFyZW50IHRoYXQgd2UncmUgbm8gbG9uZ2VyIGludGVyZXN0ZWQgaW4gdGhlIG9sZCBWTSAqLwogCXRzayA9IGN1cnJlbnQ7CiAJb2xkX21tID0gY3VycmVudC0+bW07CisJc3luY19tbV9yc3ModHNrLCBvbGRfbW0pOwogCW1tX3JlbGVhc2UodHNrLCBvbGRfbW0pOwogCiAJaWYgKG9sZF9tbSkgewpAQCAtMTUzMiw3ICsxNTMzLDcgQEAKIAkJCS8qIGNvcmUgbGltaXQgc2l6ZSAqLwogCQkJY2FzZSAnYyc6CiAJCQkJcmMgPSBzbnByaW50ZihvdXRfcHRyLCBvdXRfZW5kIC0gb3V0X3B0ciwKLQkJCQkJICAgICAgIiVsdSIsIGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfQ09SRV0ucmxpbV9jdXIpOworCQkJCQkgICAgICAiJWx1IiwgcmxpbWl0KFJMSU1JVF9DT1JFKSk7CiAJCQkJaWYgKHJjID4gb3V0X2VuZCAtIG91dF9wdHIpCiAJCQkJCWdvdG8gb3V0OwogCQkJCW91dF9wdHIgKz0gcmM7CkBAIC0xNTYwLDEyICsxNTYxLDEzIEBACiAJcmV0dXJuIGlzcGlwZTsKIH0KIAotc3RhdGljIGludCB6YXBfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnN0YXJ0KQorc3RhdGljIGludCB6YXBfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnN0YXJ0LCBpbnQgZXhpdF9jb2RlKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdDsKIAlpbnQgbnIgPSAwOwogCiAJc3RhcnQtPnNpZ25hbC0+ZmxhZ3MgPSBTSUdOQUxfR1JPVVBfRVhJVDsKKwlzdGFydC0+c2lnbmFsLT5ncm91cF9leGl0X2NvZGUgPSBleGl0X2NvZGU7CiAJc3RhcnQtPnNpZ25hbC0+Z3JvdXBfc3RvcF9jb3VudCA9IDA7CiAKIAl0ID0gc3RhcnQ7CkBAIC0xNTkwLDggKzE1OTIsNyBAQAogCXNwaW5fbG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAJaWYgKCFzaWduYWxfZ3JvdXBfZXhpdCh0c2stPnNpZ25hbCkpIHsKIAkJbW0tPmNvcmVfc3RhdGUgPSBjb3JlX3N0YXRlOwotCQl0c2stPnNpZ25hbC0+Z3JvdXBfZXhpdF9jb2RlID0gZXhpdF9jb2RlOwotCQluciA9IHphcF9wcm9jZXNzKHRzayk7CisJCW5yID0gemFwX3Byb2Nlc3ModHNrLCBleGl0X2NvZGUpOwogCX0KIAlzcGluX3VubG9ja19pcnEoJnRzay0+c2lnaGFuZC0+c2lnbG9jayk7CiAJaWYgKHVubGlrZWx5KG5yIDwgMCkpCkBAIC0xNjQwLDcgKzE2NDEsNyBAQAogCQkJaWYgKHAtPm1tKSB7CiAJCQkJaWYgKHVubGlrZWx5KHAtPm1tID09IG1tKSkgewogCQkJCQlsb2NrX3Rhc2tfc2lnaGFuZChwLCAmZmxhZ3MpOwotCQkJCQluciArPSB6YXBfcHJvY2VzcyhwKTsKKwkJCQkJbnIgKz0gemFwX3Byb2Nlc3MocCwgZXhpdF9jb2RlKTsKIAkJCQkJdW5sb2NrX3Rhc2tfc2lnaGFuZChwLCAmZmxhZ3MpOwogCQkJCX0KIAkJCQlicmVhazsKQEAgLTE3NDcsMTQgKzE3NDgsMTkgQEAKIAl9CiB9CiAKLWludCBnZXRfZHVtcGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0pCitzdGF0aWMgaW50IF9fZ2V0X2R1bXBhYmxlKHVuc2lnbmVkIGxvbmcgbW1fZmxhZ3MpCiB7CiAJaW50IHJldDsKIAotCXJldCA9IG1tLT5mbGFncyAmIDB4MzsKKwlyZXQgPSBtbV9mbGFncyAmIE1NRl9EVU1QQUJMRV9NQVNLOwogCXJldHVybiAocmV0ID49IDIpID8gMiA6IHJldDsKIH0KIAoraW50IGdldF9kdW1wYWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4gX19nZXRfZHVtcGFibGUobW0tPmZsYWdzKTsKK30KKwogc3RhdGljIHZvaWQgd2FpdF9mb3JfZHVtcF9oZWxwZXJzKHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGU7CkBAIC0xNzk3LDcgKzE4MDMsMTMgQEAKIAlzdHJ1Y3QgY29yZWR1bXBfcGFyYW1zIGNwcm0gPSB7CiAJCS5zaWduciA9IHNpZ25yLAogCQkucmVncyA9IHJlZ3MsCi0JCS5saW1pdCA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfQ09SRV0ucmxpbV9jdXIsCisJCS5saW1pdCA9IHJsaW1pdChSTElNSVRfQ09SRSksCisJCS8qCisJCSAqIFdlIG11c3QgdXNlIHRoZSBzYW1lIG1tLT5mbGFncyB3aGlsZSBkdW1waW5nIGNvcmUgdG8gYXZvaWQKKwkJICogaW5jb25zaXN0ZW5jeSBvZiBiaXQgZmxhZ3MsIHNpbmNlIHRoaXMgZmxhZyBpcyBub3QgcHJvdGVjdGVkCisJCSAqIGJ5IGFueSBsb2Nrcy4KKwkJICovCisJCS5tbV9mbGFncyA9IG1tLT5mbGFncywKIAl9OwogCiAJYXVkaXRfY29yZV9kdW1wcyhzaWducik7CkBAIC0xODE2LDcgKzE4MjgsNyBAQAogCS8qCiAJICogSWYgYW5vdGhlciB0aHJlYWQgZ290IGhlcmUgZmlyc3QsIG9yIHdlIGFyZSBub3QgZHVtcGFibGUsIGJhaWwgb3V0LgogCSAqLwotCWlmIChtbS0+Y29yZV9zdGF0ZSB8fCAhZ2V0X2R1bXBhYmxlKG1tKSkgeworCWlmIChtbS0+Y29yZV9zdGF0ZSB8fCAhX19nZXRfZHVtcGFibGUoY3BybS5tbV9mbGFncykpIHsKIAkJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CiAJCXB1dF9jcmVkKGNyZWQpOwogCQlnb3RvIGZhaWw7CkBAIC0xODI3LDcgKzE4MzksOCBAQAogCSAqCXByb2Nlc3Mgbm9yIGRvIHdlIGtub3cgaXRzIGVudGlyZSBoaXN0b3J5LiBXZSBvbmx5IGtub3cgaXQKIAkgKgl3YXMgdGFpbnRlZCBzbyB3ZSBkdW1wIGl0IGFzIHJvb3QgaW4gbW9kZSAyLgogCSAqLwotCWlmIChnZXRfZHVtcGFibGUobW0pID09IDIpIHsJLyogU2V0dWlkIGNvcmUgZHVtcCBtb2RlICovCisJaWYgKF9fZ2V0X2R1bXBhYmxlKGNwcm0ubW1fZmxhZ3MpID09IDIpIHsKKwkJLyogU2V0dWlkIGNvcmUgZHVtcCBtb2RlICovCiAJCWZsYWcgPSBPX0VYQ0w7CQkvKiBTdG9wIHJld3JpdGUgYXR0YWNrcyAqLwogCQljcmVkLT5mc3VpZCA9IDA7CS8qIER1bXAgcm9vdCBwcml2YXRlICovCiAJfQpAQCAtMTkyMyw4ICsxOTM2LDkgQEAKIAkvKgogCSAqIERvbnQgYWxsb3cgbG9jYWwgdXNlcnMgZ2V0IGN1dGUgYW5kIHRyaWNrIG90aGVycyB0byBjb3JlZHVtcAogCSAqIGludG8gdGhlaXIgcHJlLWNyZWF0ZWQgZmlsZXM6CisJICogTm90ZSwgdGhpcyBpcyBub3QgcmVsZXZhbnQgZm9yIHBpcGVzCiAJICovCi0JaWYgKGlub2RlLT5pX3VpZCAhPSBjdXJyZW50X2ZzdWlkKCkpCisJaWYgKCFpc3BpcGUgJiYgKGlub2RlLT5pX3VpZCAhPSBjdXJyZW50X2ZzdWlkKCkpKQogCQlnb3RvIGNsb3NlX2ZhaWw7CiAJaWYgKCFjcHJtLmZpbGUtPmZfb3ApCiAJCWdvdG8gY2xvc2VfZmFpbDsKZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL2NvbW1vbi5oIGIvZnMvZXhvZnMvY29tbW9uLmgKaW5kZXggYjFiMTc4ZS4uZjBkNTIwMyAxMDA2NDQKLS0tIGEvZnMvZXhvZnMvY29tbW9uLmgKKysrIGIvZnMvZXhvZnMvY29tbW9uLmgKQEAgLTU1LDYgKzU1LDggQEAKIC8qIGV4b2ZzIEFwcGxpY2F0aW9uIHNwZWNpZmljIHBhZ2UvYXR0cmlidXRlICovCiAjIGRlZmluZSBFWE9GU19BUEFHRV9GU19EQVRBCShPU0RfQVBBR0VfQVBQX0RFRklORURfRklSU1QgKyAzKQogIyBkZWZpbmUgRVhPRlNfQVRUUl9JTk9ERV9EQVRBCTEKKyMgZGVmaW5lIEVYT0ZTX0FUVFJfSU5PREVfRklMRV9MQVlPVVQJMgorIyBkZWZpbmUgRVhPRlNfQVRUUl9JTk9ERV9ESVJfTEFZT1VUCTMKIAogLyoKICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBmaWxlcyB3ZSBjYW4gaGF2ZSBpcyBsaW1pdGVkIGJ5IHRoZSBzaXplIG9mIHRoZQpAQCAtMjA2LDQgKzIwOCw0MSBAQAogCSgoKG5hbWVfbGVuKSArIG9mZnNldG9mKHN0cnVjdCBleG9mc19kaXJfZW50cnksIG5hbWUpICArIFwKIAkgIEVYT0ZTX0RJUl9ST1VORCkgJiB+RVhPRlNfRElSX1JPVU5EKQogCisvKgorICogVGhlIG9uLWRpc2sgKG9wdGlvbmFsKSBsYXlvdXQgc3RydWN0dXJlLgorICogc2l0cyBpbiBhbiBFWE9GU19BVFRSX0lOT0RFX0ZJTEVfTEFZT1VUIG9yIEVYT0ZTX0FUVFJfSU5PREVfRElSX0xBWU9VVAorICogYXR0cmlidXRlLCBhdHRhY2hlZCB0byBhbnkgaW5vZGUsIHVzdWFsbHkgdG8gYSBkaXJlY3RvcnkuCisgKi8KKworZW51bSBleG9mc19pbm9kZV9sYXlvdXRfZ2VuX2Z1bmN0aW9ucyB7CisJTEFZT1VUX01PVklOR19XSU5ET1cgPSAwLAorCUxBWU9VVF9JTVBMSUNUID0gMSwKK307CisKK3N0cnVjdCBleG9mc19vbl9kaXNrX2lub2RlX2xheW91dCB7CisJX19sZTE2IGdlbl9mdW5jOyAvKiBPbmUgb2YgZW51bSBleG9mc19pbm9kZV9sYXlvdXRfZ2VuX2Z1bmN0aW9ucyAqLworCV9fbGUxNiBwYWQ7CisJdW5pb24geworCQkvKiBnZW5fZnVuYyA9PSBMQVlPVVRfTU9WSU5HX1dJTkRPVyAoZGVmYXVsdCkgKi8KKwkJc3RydWN0IGV4b2ZzX2xheW91dF9zbGlkaW5nX3dpbmRvdyB7CisJCQlfX2xlMzIgbnVtX2RldmljZXM7IC8qIGZpcnN0IG4gZGV2aWNlcyBpbiBnbG9iYWwtdGFibGUqLworCQl9IHNsaWRpbmdfd2luZG93IF9fcGFja2VkOworCisJCS8qIGdlbl9mdW5jID09IExBWU9VVF9JTVBMSUNUICovCisJCXN0cnVjdCBleG9mc19sYXlvdXRfaW1wbGljdF9saXN0IHsKKwkJCXN0cnVjdCBleG9mc19kdF9kYXRhX21hcCBkYXRhX21hcDsKKwkJCS8qIFZhcmlhYmxlIGFycmF5IG9mIHNpemUgZGF0YV9tYXAuY2JfbnVtX2NvbXBzLiBUaGVzZQorCQkJICogYXJlIGRldmljZSBpbmRleGVzIG9mIHRoZSBkZXZpY2VzIGluIHRoZSBnbG9iYWwgdGFibGUKKwkJCSAqLworCQkJX19sZTMyIGRldl9pbmRleGVzW107CisJCX0gaW1wbGljdCBfX3BhY2tlZDsKKwl9OworfSBfX3BhY2tlZDsKKworc3RhdGljIGlubGluZSBzaXplX3QgZXhvZnNfb25fZGlza19pbm9kZV9sYXlvdXRfc2l6ZSh1bnNpZ25lZCBtYXhfZGV2cykKK3sKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBleG9mc19vbl9kaXNrX2lub2RlX2xheW91dCkgKworCQltYXhfZGV2cyAqIHNpemVvZihfX2xlMzIpOworfQorCiAjZW5kaWYgLyppZm5kZWYgX19FWE9GU19DT01fSF9fKi8KZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL2V4b2ZzLmggYi9mcy9leG9mcy9leG9mcy5oCmluZGV4IGMzNWZkNDYuLjg0NDJlMzUgMTAwNjQ0Ci0tLSBhL2ZzL2V4b2ZzL2V4b2ZzLmgKKysrIGIvZnMvZXhvZnMvZXhvZnMuaApAQCAtNTUsMTIgKzU1LDI4IEBACiAvKiB1NjQgaGFzIHByb2JsZW1zIHdpdGggcHJpbnRrIHRoaXMgd2lsbCBjYXN0IGl0IHRvIHVuc2lnbmVkIGxvbmcgbG9uZyAqLwogI2RlZmluZSBfTExVKHgpICh1bnNpZ25lZCBsb25nIGxvbmcpKHgpCiAKK3N0cnVjdCBleG9mc19sYXlvdXQgeworCW9zZF9pZAkJc19waWQ7CQkJLyogcGFydGl0aW9uIElEIG9mIGZpbGUgc3lzdGVtKi8KKworCS8qIE91ciB3YXkgb2YgbG9va2luZyBhdCB0aGUgZGF0YV9tYXAgKi8KKwl1bnNpZ25lZCBzdHJpcGVfdW5pdDsKKwl1bnNpZ25lZCBtaXJyb3JzX3AxOworCisJdW5zaWduZWQgZ3JvdXBfd2lkdGg7CisJdTY0CSBncm91cF9kZXB0aDsKKwl1bnNpZ25lZCBncm91cF9jb3VudDsKKworCWVudW0gZXhvZnNfaW5vZGVfbGF5b3V0X2dlbl9mdW5jdGlvbnMgbGF5X2Z1bmM7CisKKwl1bnNpZ25lZAlzX251bWRldnM7CQkvKiBOdW0gb2YgZGV2aWNlcyBpbiBhcnJheSAgICAqLworCXN0cnVjdCBvc2RfZGV2CSpzX29kc1swXTsJCS8qIFZhcmlhYmxlIGxlbmd0aCAgICAgICAgICAgICovCit9OworCiAvKgogICogb3VyIGV4dGVuc2lvbiB0byB0aGUgaW4tbWVtb3J5IHN1cGVyYmxvY2sKICAqLwogc3RydWN0IGV4b2ZzX3NiX2luZm8gewogCXN0cnVjdCBleG9mc19mc2NiIHNfZnNjYjsJCS8qIFdyaXR0ZW4gb2Z0ZW4sIHByZS1hbGxvY2F0ZSovCi0Jb3NkX2lkCQlzX3BpZDsJCQkvKiBwYXJ0aXRpb24gSUQgb2YgZmlsZSBzeXN0ZW0qLwogCWludAkJc190aW1lb3V0OwkJLyogdGltZW91dCBmb3IgT1NEIG9wZXJhdGlvbnMgKi8KIAl1aW50NjRfdAlzX25leHRpZDsJCS8qIGhpZ2hlc3Qgb2JqZWN0IElEIHVzZWQgICAgICovCiAJdWludDMyX3QJc19udW1maWxlczsJCS8qIG51bWJlciBvZiBmaWxlcyBvbiBmcyAgICAgICovCkBAIC02OSwyMiArODUsMjcgQEAKIAlhdG9taWNfdAlzX2N1cnJfcGVuZGluZzsJCS8qIG51bWJlciBvZiBwZW5kaW5nIGNvbW1hbmRzICovCiAJdWludDhfdAkJc19jcmVkW09TRF9DQVBfTEVOXTsJLyogY3JlZGVudGlhbCBmb3IgdGhlIGZzY2IgICAgKi8KIAotCXN0cnVjdCBwbmZzX29zZF9kYXRhX21hcCBkYXRhX21hcDsJLyogRGVmYXVsdCByYWlkIHRvIHVzZSAgICAgICAgKi8KLQl1bnNpZ25lZAlzX251bWRldnM7CQkvKiBOdW0gb2YgZGV2aWNlcyBpbiBhcnJheSAgICAqLwotCXN0cnVjdCBvc2RfZGV2CSpzX29kc1sxXTsJCS8qIFZhcmlhYmxlIGxlbmd0aCwgbWluaW11bSAxICovCisJc3RydWN0IHBuZnNfb3NkX2RhdGFfbWFwIGRhdGFfbWFwOwkvKiBEZWZhdWx0IHJhaWQgdG8gdXNlCisJCQkJCQkgKiBGSVhNRTogTmVlZGVkID8KKwkJCQkJCSAqLworLyoJc3RydWN0IGV4b2ZzX2xheW91dAlkaXJfbGF5b3V0OyovCS8qIERlZmF1bHQgZGlyIGxheW91dCAqLworCXN0cnVjdCBleG9mc19sYXlvdXQJbGF5b3V0OwkJLyogRGVmYXVsdCBmaWxlcyBsYXlvdXQsCisJCQkJCQkgKiBjb250YWlucyB0aGUgdmFyaWFibGUgb3NkX2RldgorCQkJCQkJICogYXJyYXkuIEtlZXAgbGFzdCAqLworCXN0cnVjdCBvc2RfZGV2CSpfbWluX29uZV9kZXZbMV07CS8qIFBsYWNlIGhvbGRlciBmb3Igb25lIGRldiAgICovCiB9OwogCiAvKgogICogb3VyIGV4dGVuc2lvbiB0byB0aGUgaW4tbWVtb3J5IGlub2RlCiAgKi8KIHN0cnVjdCBleG9mc19pX2luZm8geworCXN0cnVjdCBpbm9kZSAgIHZmc19pbm9kZTsgICAgICAgICAgLyogbm9ybWFsIGluLW1lbW9yeSBpbm9kZSAgICAgICAgICAqLworCXdhaXRfcXVldWVfaGVhZF90IGlfd3E7ICAgICAgICAgICAgLyogd2FpdCBxdWV1ZSBmb3IgaW5vZGUgICAgICAgICAgICAqLwogCXVuc2lnbmVkIGxvbmcgIGlfZmxhZ3M7ICAgICAgICAgICAgLyogdmFyaW91cyBhdG9taWMgZmxhZ3MgICAgICAgICAgICAqLwogCXVpbnQzMl90ICAgICAgIGlfZGF0YVtFWE9GU19JREFUQV07LypzaG9ydCBzeW1saW5rIG5hbWVzIGFuZCBkZXZpY2UgI3MqLwogCXVpbnQzMl90ICAgICAgIGlfZGlyX3N0YXJ0X2xvb2t1cDsgLyogd2hpY2ggcGFnZSB0byBzdGFydCBsb29rdXAgICAgICAqLwotCXdhaXRfcXVldWVfaGVhZF90IGlfd3E7ICAgICAgICAgICAgLyogd2FpdCBxdWV1ZSBmb3IgaW5vZGUgICAgICAgICAgICAqLwogCXVpbnQ2NF90ICAgICAgIGlfY29tbWl0X3NpemU7ICAgICAgLyogdGhlIG9iamVjdCdzIHdyaXR0ZW4gbGVuZ3RoICAgICAqLwogCXVpbnQ4X3QgICAgICAgIGlfY3JlZFtPU0RfQ0FQX0xFTl07LyogYWxsLXBvd2VyZnVsIGNyZWRlbnRpYWwgICAgICAgICAqLwotCXN0cnVjdCBpbm9kZSAgIHZmc19pbm9kZTsgICAgICAgICAgLyogbm9ybWFsIGluLW1lbW9yeSBpbm9kZSAgICAgICAgICAqLwogfTsKIAogc3RhdGljIGlubGluZSBvc2RfaWQgZXhvZnNfb2lfb2Jqbm8oc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2kpCkBAIC0xMDEsNyArMTIyLDcgQEAKIAl2b2lkCQkJKnByaXZhdGU7CiAJZXhvZnNfaW9fZG9uZV9mbglkb25lOwogCi0Jc3RydWN0IGV4b2ZzX3NiX2luZm8JKnNiaTsKKwlzdHJ1Y3QgZXhvZnNfbGF5b3V0CSpsYXlvdXQ7CiAJc3RydWN0IG9zZF9vYmpfaWQJb2JqOwogCXU4CQkJKmNyZWQ7CiAKQEAgLTEwOSw3ICsxMzAsMTEgQEAKIAlsb2ZmX3QJCQlvZmZzZXQ7CiAJdW5zaWduZWQgbG9uZwkJbGVuZ3RoOwogCXZvaWQJCQkqa2Vybl9idWZmOwotCXN0cnVjdCBiaW8JCSpiaW87CisKKwlzdHJ1Y3QgcGFnZQkJKipwYWdlczsKKwl1bnNpZ25lZAkJbnJfcGFnZXM7CisJdW5zaWduZWQJCXBnYmFzZTsKKwl1bnNpZ25lZAkJcGFnZXNfY29uc3VtZWQ7CiAKIAkvKiBBdHRyaWJ1dGVzICovCiAJdW5zaWduZWQJCWluX2F0dHJfbGVuOwpAQCAtMTIyLDYgKzE0Nyw5IEBACiAJc3RydWN0IGV4b2ZzX3Blcl9kZXZfc3RhdGUgewogCQlzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yOwogCQlzdHJ1Y3QgYmlvICpiaW87CisJCWxvZmZfdCBvZmZzZXQ7CisJCXVuc2lnbmVkIGxlbmd0aDsKKwkJdW5zaWduZWQgZGV2OwogCX0gcGVyX2RldltdOwogfTsKIApAQCAtMTc1LDYgKzIwMywxMiBAQAogfQogCiAvKgorICogR2l2ZW4gYSBsYXlvdXQsIG9iamVjdF9udW1iZXIgYW5kIHN0cmlwZV9pbmRleCByZXR1cm4gdGhlIGFzc29jaWF0ZWQgZ2xvYmFsCisgKiBkZXZfaW5kZXgKKyAqLwordW5zaWduZWQgZXhvZnNfbGF5b3V0X29kX2lkKHN0cnVjdCBleG9mc19sYXlvdXQgKmxheW91dCwKKwkJCSAgICBvc2RfaWQgb2JqX25vLCB1bnNpZ25lZCBsYXlvdXRfaW5kZXgpOworLyoKICAqIE1heGltdW0gY291bnQgb2YgbGlua3MgdG8gYSBmaWxlCiAgKi8KICNkZWZpbmUgRVhPRlNfTElOS19NQVggICAgICAgICAgIDMyMDAwCkBAIC0xODksNyArMjIzLDggQEAKIGludCBleG9mc19yZWFkX2tlcm4oc3RydWN0IG9zZF9kZXYgKm9kLCB1OCAqY3JlZCwgc3RydWN0IG9zZF9vYmpfaWQgKm9iaiwKIAkJICAgIHU2NCBvZmZzZXQsIHZvaWQgKnAsIHVuc2lnbmVkIGxlbmd0aCk7CiAKLWludCAgZXhvZnNfZ2V0X2lvX3N0YXRlKHN0cnVjdCBleG9mc19zYl9pbmZvICpzYmksIHN0cnVjdCBleG9mc19pb19zdGF0ZSoqIGlvcyk7CitpbnQgIGV4b2ZzX2dldF9pb19zdGF0ZShzdHJ1Y3QgZXhvZnNfbGF5b3V0ICpsYXlvdXQsCisJCQlzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKippb3MpOwogdm9pZCBleG9mc19wdXRfaW9fc3RhdGUoc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3MpOwogCiBpbnQgZXhvZnNfY2hlY2tfaW8oc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3MsIHU2NCAqcmVzaWQpOwpAQCAtMjI2LDcgKzI2MSw3IEBACiAJCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpOwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZXhvZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZyk7CiBzdHJ1Y3QgaW5vZGUgKmV4b2ZzX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKLWV4dGVybiBpbnQgZXhvZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICosIGludCk7CitleHRlcm4gaW50IGV4b2ZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CiBleHRlcm4gdm9pZCBleG9mc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICopOwogCiAvKiBkaXIuYzogICAgICAgICAgICAgICAgKi8KZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL2lub2RlLmMgYi9mcy9leG9mcy9pbm9kZS5jCmluZGV4IDJhZmJjZWIuLmExN2U0YjcgMTAwNjQ0Ci0tLSBhL2ZzL2V4b2ZzL2lub2RlLmMKKysrIGIvZnMvZXhvZnMvaW5vZGUuYwpAQCAtNDEsMTYgKzQxLDE4IEBACiAKIGVudW0geyBCSU9fTUFYX1BBR0VTX0tNQUxMT0MgPQogCQkoUEFHRV9TSVpFIC0gc2l6ZW9mKHN0cnVjdCBiaW8pKSAvIHNpemVvZihzdHJ1Y3QgYmlvX3ZlYyksCisJTUFYX1BBR0VTX0tNQUxMT0MgPQorCQlQQUdFX1NJWkUgLyBzaXplb2Yoc3RydWN0IHBhZ2UgKiksCiB9OwogCiBzdHJ1Y3QgcGFnZV9jb2xsZWN0IHsKIAlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpOwotCXN0cnVjdCByZXF1ZXN0X3F1ZXVlICpyZXFfcTsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwogCXVuc2lnbmVkIGV4cGVjdGVkX3BhZ2VzOwogCXN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zOwogCi0Jc3RydWN0IGJpbyAqYmlvOworCXN0cnVjdCBwYWdlICoqcGFnZXM7CisJdW5zaWduZWQgYWxsb2NfcGFnZXM7CiAJdW5zaWduZWQgbnJfcGFnZXM7CiAJdW5zaWduZWQgbG9uZyBsZW5ndGg7CiAJbG9mZl90IHBnX2ZpcnN0OyAvKiBrZWVwIDY0Yml0IGFsc28gaW4gMzItYXJjaGVzICovCkBAIC02MiwxNSArNjQsMTIgQEAKIAlzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpID0gaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKIAogCXBjb2wtPnNiaSA9IHNiaTsKLQkvKiBDcmVhdGUgbWFzdGVyIGJpb3Mgb24gZmlyc3QgUSwgbGF0ZXIgb24gY2xvbmluZywgZWFjaCBjbG9uZSB3aWxsIGJlCi0JICogYWxsb2NhdGVkIG9uIGl0J3MgZGVzdGluYXRpb24gUQotCSAqLwotCXBjb2wtPnJlcV9xID0gb3NkX3JlcXVlc3RfcXVldWUoc2JpLT5zX29kc1swXSk7CiAJcGNvbC0+aW5vZGUgPSBpbm9kZTsKIAlwY29sLT5leHBlY3RlZF9wYWdlcyA9IGV4cGVjdGVkX3BhZ2VzOwogCiAJcGNvbC0+aW9zID0gTlVMTDsKLQlwY29sLT5iaW8gPSBOVUxMOworCXBjb2wtPnBhZ2VzID0gTlVMTDsKKwlwY29sLT5hbGxvY19wYWdlcyA9IDA7CiAJcGNvbC0+bnJfcGFnZXMgPSAwOwogCXBjb2wtPmxlbmd0aCA9IDA7CiAJcGNvbC0+cGdfZmlyc3QgPSAtMTsKQEAgLTgwLDcgKzc5LDggQEAKIHsKIAlwY29sLT5leHBlY3RlZF9wYWdlcyAtPSBtaW4ocGNvbC0+bnJfcGFnZXMsIHBjb2wtPmV4cGVjdGVkX3BhZ2VzKTsKIAotCXBjb2wtPmJpbyA9IE5VTEw7CisJcGNvbC0+cGFnZXMgPSBOVUxMOworCXBjb2wtPmFsbG9jX3BhZ2VzID0gMDsKIAlwY29sLT5ucl9wYWdlcyA9IDA7CiAJcGNvbC0+bGVuZ3RoID0gMDsKIAlwY29sLT5wZ19maXJzdCA9IC0xOwpAQCAtOTAsMzggKzkwLDQzIEBACiAJICogaXQgbWlnaHQgbm90IGVuZCBoZXJlLiBkb24ndCBiZSBsZWZ0IHdpdGggbm90aGluZwogCSAqLwogCWlmICghcGNvbC0+ZXhwZWN0ZWRfcGFnZXMpCi0JCXBjb2wtPmV4cGVjdGVkX3BhZ2VzID0gQklPX01BWF9QQUdFU19LTUFMTE9DOworCQlwY29sLT5leHBlY3RlZF9wYWdlcyA9IE1BWF9QQUdFU19LTUFMTE9DOwogfQogCiBzdGF0aWMgaW50IHBjb2xfdHJ5X2FsbG9jKHN0cnVjdCBwYWdlX2NvbGxlY3QgKnBjb2wpCiB7Ci0JaW50IHBhZ2VzID0gbWluX3QodW5zaWduZWQsIHBjb2wtPmV4cGVjdGVkX3BhZ2VzLAotCQkJICBCSU9fTUFYX1BBR0VTX0tNQUxMT0MpOworCXVuc2lnbmVkIHBhZ2VzID0gbWluX3QodW5zaWduZWQsIHBjb2wtPmV4cGVjdGVkX3BhZ2VzLAorCQkJICBNQVhfUEFHRVNfS01BTExPQyk7CiAKIAlpZiAoIXBjb2wtPmlvcykgeyAvKiBGaXJzdCB0aW1lIGFsbG9jYXRlIGlvX3N0YXRlICovCi0JCWludCByZXQgPSBleG9mc19nZXRfaW9fc3RhdGUocGNvbC0+c2JpLCAmcGNvbC0+aW9zKTsKKwkJaW50IHJldCA9IGV4b2ZzX2dldF9pb19zdGF0ZSgmcGNvbC0+c2JpLT5sYXlvdXQsICZwY29sLT5pb3MpOwogCiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gcmV0OwogCX0KIAorCS8qIFRPRE86IGVhc2lseSBzdXBwb3J0IGJpbyBjaGFpbmluZyAqLworCXBhZ2VzID0gIG1pbl90KHVuc2lnbmVkLCBwYWdlcywKKwkJICAgICAgIHBjb2wtPnNiaS0+bGF5b3V0Lmdyb3VwX3dpZHRoICogQklPX01BWF9QQUdFU19LTUFMTE9DKTsKKwogCWZvciAoOyBwYWdlczsgcGFnZXMgPj49IDEpIHsKLQkJcGNvbC0+YmlvID0gYmlvX2ttYWxsb2MoR0ZQX0tFUk5FTCwgcGFnZXMpOwotCQlpZiAobGlrZWx5KHBjb2wtPmJpbykpCisJCXBjb2wtPnBhZ2VzID0ga21hbGxvYyhwYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSwKKwkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwkJaWYgKGxpa2VseShwY29sLT5wYWdlcykpIHsKKwkJCXBjb2wtPmFsbG9jX3BhZ2VzID0gcGFnZXM7CiAJCQlyZXR1cm4gMDsKKwkJfQogCX0KIAotCUVYT0ZTX0VSUigiRmFpbGVkIHRvIGJpb19rbWFsbG9jIGV4cGVjdGVkX3BhZ2VzPSV1XG4iLAorCUVYT0ZTX0VSUigiRmFpbGVkIHRvIGttYWxsb2MgZXhwZWN0ZWRfcGFnZXM9JXVcbiIsCiAJCSAgcGNvbC0+ZXhwZWN0ZWRfcGFnZXMpOwogCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgdm9pZCBwY29sX2ZyZWUoc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCkKIHsKLQlpZiAocGNvbC0+YmlvKSB7Ci0JCWJpb19wdXQocGNvbC0+YmlvKTsKLQkJcGNvbC0+YmlvID0gTlVMTDsKLQl9CisJa2ZyZWUocGNvbC0+cGFnZXMpOworCXBjb2wtPnBhZ2VzID0gTlVMTDsKIAogCWlmIChwY29sLT5pb3MpIHsKIAkJZXhvZnNfcHV0X2lvX3N0YXRlKHBjb2wtPmlvcyk7CkBAIC0xMzIsMTEgKzEzNywxMCBAQAogc3RhdGljIGludCBwY29sX2FkZF9wYWdlKHN0cnVjdCBwYWdlX2NvbGxlY3QgKnBjb2wsIHN0cnVjdCBwYWdlICpwYWdlLAogCQkJIHVuc2lnbmVkIGxlbikKIHsKLQlpbnQgYWRkZWRfbGVuID0gYmlvX2FkZF9wY19wYWdlKHBjb2wtPnJlcV9xLCBwY29sLT5iaW8sIHBhZ2UsIGxlbiwgMCk7Ci0JaWYgKHVubGlrZWx5KGxlbiAhPSBhZGRlZF9sZW4pKQorCWlmICh1bmxpa2VseShwY29sLT5ucl9wYWdlcyA+PSBwY29sLT5hbGxvY19wYWdlcykpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JKytwY29sLT5ucl9wYWdlczsKKwlwY29sLT5wYWdlc1twY29sLT5ucl9wYWdlcysrXSA9IHBhZ2U7CiAJcGNvbC0+bGVuZ3RoICs9IGxlbjsKIAlyZXR1cm4gMDsKIH0KQEAgLTE4MSw3ICsxODUsNiBAQAogICovCiBzdGF0aWMgaW50IF9fcmVhZHBhZ2VzX2RvbmUoc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCwgYm9vbCBkb191bmxvY2spCiB7Ci0Jc3RydWN0IGJpb192ZWMgKmJ2ZWM7CiAJaW50IGk7CiAJdTY0IHJlc2lkOwogCXU2NCBnb29kX2J5dGVzOwpAQCAtMTkzLDEzICsxOTYsMTMgQEAKIAllbHNlCiAJCWdvb2RfYnl0ZXMgPSBwY29sLT5sZW5ndGggLSByZXNpZDsKIAotCUVYT0ZTX0RCR01TRygicmVhZHBhZ2VzX2RvbmUoMHglbHgpIGdvb2RfYnl0ZXM9MHglbGx4IgorCUVYT0ZTX0RCR01TRzIoInJlYWRwYWdlc19kb25lKDB4JWx4KSBnb29kX2J5dGVzPTB4JWxseCIKIAkJICAgICAiIGxlbmd0aD0weCVseCBucl9wYWdlcz0ldVxuIiwKIAkJICAgICBwY29sLT5pbm9kZS0+aV9pbm8sIF9MTFUoZ29vZF9ieXRlcyksIHBjb2wtPmxlbmd0aCwKIAkJICAgICBwY29sLT5ucl9wYWdlcyk7CiAKLQlfX2Jpb19mb3JfZWFjaF9zZWdtZW50KGJ2ZWMsIHBjb2wtPmJpbywgaSwgMCkgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJ2ZWMtPmJ2X3BhZ2U7CisJZm9yIChpID0gMDsgaSA8IHBjb2wtPm5yX3BhZ2VzOyBpKyspIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwY29sLT5wYWdlc1tpXTsKIAkJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CiAJCWludCBwYWdlX3N0YXQ7CiAKQEAgLTIxOCwxMSArMjIxLDExIEBACiAJCXJldCA9IHVwZGF0ZV9yZWFkX3BhZ2UocGFnZSwgcGFnZV9zdGF0KTsKIAkJaWYgKGRvX3VubG9jaykKIAkJCXVubG9ja19wYWdlKHBhZ2UpOwotCQlsZW5ndGggKz0gYnZlYy0+YnZfbGVuOworCQlsZW5ndGggKz0gUEFHRV9TSVpFOwogCX0KIAogCXBjb2xfZnJlZShwY29sKTsKLQlFWE9GU19EQkdNU0coInJlYWRwYWdlc19kb25lIEVORFxuIik7CisJRVhPRlNfREJHTVNHMigicmVhZHBhZ2VzX2RvbmUgRU5EXG4iKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMzgsMTEgKzI0MSwxMCBAQAogCiBzdGF0aWMgdm9pZCBfdW5sb2NrX3Bjb2xfcGFnZXMoc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCwgaW50IHJldCwgaW50IHJ3KQogewotCXN0cnVjdCBiaW9fdmVjICpidmVjOwogCWludCBpOwogCi0JX19iaW9fZm9yX2VhY2hfc2VnbWVudChidmVjLCBwY29sLT5iaW8sIGksIDApIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBidmVjLT5idl9wYWdlOworCWZvciAoaSA9IDA7IGkgPCBwY29sLT5ucl9wYWdlczsgaSsrKSB7CisJCXN0cnVjdCBwYWdlICpwYWdlID0gcGNvbC0+cGFnZXNbaV07CiAKIAkJaWYgKHJ3ID09IFJFQUQpCiAJCQl1cGRhdGVfcmVhZF9wYWdlKHBhZ2UsIHJldCk7CkBAIC0yNjAsMTMgKzI2MiwxNCBAQAogCXN0cnVjdCBwYWdlX2NvbGxlY3QgKnBjb2xfY29weSA9IE5VTEw7CiAJaW50IHJldDsKIAotCWlmICghcGNvbC0+YmlvKQorCWlmICghcGNvbC0+cGFnZXMpCiAJCXJldHVybiAwOwogCiAJLyogc2VlIGNvbW1lbnQgaW4gX3JlYWRwYWdlKCkgYWJvdXQgc3luYyByZWFkcyAqLwogCVdBUk5fT04oaXNfc3luYyAmJiAocGNvbC0+bnJfcGFnZXMgIT0gMSkpOwogCi0JaW9zLT5iaW8gPSBwY29sLT5iaW87CisJaW9zLT5wYWdlcyA9IHBjb2wtPnBhZ2VzOworCWlvcy0+bnJfcGFnZXMgPSBwY29sLT5ucl9wYWdlczsKIAlpb3MtPmxlbmd0aCA9IHBjb2wtPmxlbmd0aDsKIAlpb3MtPm9mZnNldCA9IHBjb2wtPnBnX2ZpcnN0IDw8IFBBR0VfQ0FDSEVfU0hJRlQ7CiAKQEAgLTI5MCw3ICsyOTMsNyBAQAogCiAJYXRvbWljX2luYygmcGNvbC0+c2JpLT5zX2N1cnJfcGVuZGluZyk7CiAKLQlFWE9GU19EQkdNU0coInJlYWRfZXhlYyBvYmo9MHglbGx4IHN0YXJ0PTB4JWxseCBsZW5ndGg9MHglbHhcbiIsCisJRVhPRlNfREJHTVNHMigicmVhZF9leGVjIG9iaj0weCVsbHggc3RhcnQ9MHglbGx4IGxlbmd0aD0weCVseFxuIiwKIAkJICBpb3MtPm9iai5pZCwgX0xMVShpb3MtPm9mZnNldCksIHBjb2wtPmxlbmd0aCk7CiAKIAkvKiBwYWdlcyBvd25lcnNoaXAgd2FzIHBhc3NlZCB0byBwY29sX2NvcHkgKi8KQEAgLTM2Niw3ICszNjksNyBAQAogCQlnb3RvIHRyeV9hZ2FpbjsKIAl9CiAKLQlpZiAoIXBjb2wtPmJpbykgeworCWlmICghcGNvbC0+cGFnZXMpIHsKIAkJcmV0ID0gcGNvbF90cnlfYWxsb2MocGNvbCk7CiAJCWlmICh1bmxpa2VseShyZXQpKQogCQkJZ290byBmYWlsOwpAQCAtNDQ4LDcgKzQ1MSw2IEBACiBzdGF0aWMgdm9pZCB3cml0ZXBhZ2VzX2RvbmUoc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3MsIHZvaWQgKnApCiB7CiAJc3RydWN0IHBhZ2VfY29sbGVjdCAqcGNvbCA9IHA7Ci0Jc3RydWN0IGJpb192ZWMgKmJ2ZWM7CiAJaW50IGk7CiAJdTY0IHJlc2lkOwogCXU2NCAgZ29vZF9ieXRlczsKQEAgLTQ2MiwxMyArNDY0LDEzIEBACiAJZWxzZQogCQlnb29kX2J5dGVzID0gcGNvbC0+bGVuZ3RoIC0gcmVzaWQ7CiAKLQlFWE9GU19EQkdNU0coIndyaXRlcGFnZXNfZG9uZSgweCVseCkgZ29vZF9ieXRlcz0weCVsbHgiCisJRVhPRlNfREJHTVNHMigid3JpdGVwYWdlc19kb25lKDB4JWx4KSBnb29kX2J5dGVzPTB4JWxseCIKIAkJICAgICAiIGxlbmd0aD0weCVseCBucl9wYWdlcz0ldVxuIiwKIAkJICAgICBwY29sLT5pbm9kZS0+aV9pbm8sIF9MTFUoZ29vZF9ieXRlcyksIHBjb2wtPmxlbmd0aCwKIAkJICAgICBwY29sLT5ucl9wYWdlcyk7CiAKLQlfX2Jpb19mb3JfZWFjaF9zZWdtZW50KGJ2ZWMsIHBjb2wtPmJpbywgaSwgMCkgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IGJ2ZWMtPmJ2X3BhZ2U7CisJZm9yIChpID0gMDsgaSA8IHBjb2wtPm5yX3BhZ2VzOyBpKyspIHsKKwkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwY29sLT5wYWdlc1tpXTsKIAkJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CiAJCWludCBwYWdlX3N0YXQ7CiAKQEAgLTQ4NSwxMiArNDg3LDEyIEBACiAJCUVYT0ZTX0RCR01TRzIoIiAgICB3cml0ZXBhZ2VzX2RvbmUoMHglbHgsIDB4JWx4KSBzdGF0dXM9JWRcbiIsCiAJCQkgICAgIGlub2RlLT5pX2lubywgcGFnZS0+aW5kZXgsIHBhZ2Vfc3RhdCk7CiAKLQkJbGVuZ3RoICs9IGJ2ZWMtPmJ2X2xlbjsKKwkJbGVuZ3RoICs9IFBBR0VfU0laRTsKIAl9CiAKIAlwY29sX2ZyZWUocGNvbCk7CiAJa2ZyZWUocGNvbCk7Ci0JRVhPRlNfREJHTVNHKCJ3cml0ZXBhZ2VzX2RvbmUgRU5EXG4iKTsKKwlFWE9GU19EQkdNU0cyKCJ3cml0ZXBhZ2VzX2RvbmUgRU5EXG4iKTsKIH0KIAogc3RhdGljIGludCB3cml0ZV9leGVjKHN0cnVjdCBwYWdlX2NvbGxlY3QgKnBjb2wpCkBAIC01MDAsNyArNTAyLDcgQEAKIAlzdHJ1Y3QgcGFnZV9jb2xsZWN0ICpwY29sX2NvcHkgPSBOVUxMOwogCWludCByZXQ7CiAKLQlpZiAoIXBjb2wtPmJpbykKKwlpZiAoIXBjb2wtPnBhZ2VzKQogCQlyZXR1cm4gMDsKIAogCXBjb2xfY29weSA9IGttYWxsb2Moc2l6ZW9mKCpwY29sX2NvcHkpLCBHRlBfS0VSTkVMKTsKQEAgLTUxMiw5ICs1MTQsOCBAQAogCiAJKnBjb2xfY29weSA9ICpwY29sOwogCi0JcGNvbF9jb3B5LT5iaW8tPmJpX3J3IHw9ICgxIDw8IEJJT19SVyk7IC8qIEZJWE1FOiBiaW9fc2V0X2RpcigpICovCi0KLQlpb3MtPmJpbyA9IHBjb2xfY29weS0+YmlvOworCWlvcy0+cGFnZXMgPSBwY29sX2NvcHktPnBhZ2VzOworCWlvcy0+bnJfcGFnZXMgPSBwY29sX2NvcHktPm5yX3BhZ2VzOwogCWlvcy0+b2Zmc2V0ID0gcGNvbF9jb3B5LT5wZ19maXJzdCA8PCBQQUdFX0NBQ0hFX1NISUZUOwogCWlvcy0+bGVuZ3RoID0gcGNvbF9jb3B5LT5sZW5ndGg7CiAJaW9zLT5kb25lID0gd3JpdGVwYWdlc19kb25lOwpAQCAtNTI3LDcgKzUyOCw3IEBACiAJfQogCiAJYXRvbWljX2luYygmcGNvbC0+c2JpLT5zX2N1cnJfcGVuZGluZyk7Ci0JRVhPRlNfREJHTVNHKCJ3cml0ZV9leGVjKDB4JWx4LCAweCVsbHgpIHN0YXJ0PTB4JWxseCBsZW5ndGg9MHglbHhcbiIsCisJRVhPRlNfREJHTVNHMigid3JpdGVfZXhlYygweCVseCwgMHglbGx4KSBzdGFydD0weCVsbHggbGVuZ3RoPTB4JWx4XG4iLAogCQkgIHBjb2wtPmlub2RlLT5pX2lubywgcGNvbC0+cGdfZmlyc3QsIF9MTFUoaW9zLT5vZmZzZXQpLAogCQkgIHBjb2wtPmxlbmd0aCk7CiAJLyogcGFnZXMgb3duZXJzaGlwIHdhcyBwYXNzZWQgdG8gcGNvbF9jb3B5ICovCkBAIC02MDUsNyArNjA2LDcgQEAKIAkJZ290byB0cnlfYWdhaW47CiAJfQogCi0JaWYgKCFwY29sLT5iaW8pIHsKKwlpZiAoIXBjb2wtPnBhZ2VzKSB7CiAJCXJldCA9IHBjb2xfdHJ5X2FsbG9jKHBjb2wpOwogCQlpZiAodW5saWtlbHkocmV0KSkKIAkJCWdvdG8gZmFpbDsKQEAgLTYxNiw3ICs2MTcsNyBAQAogCiAJcmV0ID0gcGNvbF9hZGRfcGFnZShwY29sLCBwYWdlLCBsZW4pOwogCWlmICh1bmxpa2VseShyZXQpKSB7Ci0JCUVYT0ZTX0RCR01TRygiRmFpbGVkIHBjb2xfYWRkX3BhZ2UgIgorCQlFWE9GU19EQkdNU0cyKCJGYWlsZWQgcGNvbF9hZGRfcGFnZSAiCiAJCQkgICAgICJucl9wYWdlcz0ldSB0b3RhbF9sZW5ndGg9MHglbHhcbiIsCiAJCQkgICAgIHBjb2wtPm5yX3BhZ2VzLCBwY29sLT5sZW5ndGgpOwogCkBAIC02NjMsNyArNjY0LDcgQEAKIAlpZiAoZXhwZWN0ZWRfcGFnZXMgPCAzMkwpCiAJCWV4cGVjdGVkX3BhZ2VzID0gMzJMOwogCi0JRVhPRlNfREJHTVNHKCJpbm9kZSgweCVseCkgd2JjLT5zdGFydD0weCVsbHggd2JjLT5lbmQ9MHglbGx4ICIKKwlFWE9GU19EQkdNU0cyKCJpbm9kZSgweCVseCkgd2JjLT5zdGFydD0weCVsbHggd2JjLT5lbmQ9MHglbGx4ICIKIAkJICAgICAibnJwYWdlcz0lbHUgc3RhcnQ9MHglbHggZW5kPTB4JWx4IGV4cGVjdGVkX3BhZ2VzPSVsZFxuIiwKIAkJICAgICBtYXBwaW5nLT5ob3N0LT5pX2lubywgd2JjLT5yYW5nZV9zdGFydCwgd2JjLT5yYW5nZV9lbmQsCiAJCSAgICAgbWFwcGluZy0+bnJwYWdlcywgc3RhcnQsIGVuZCwgZXhwZWN0ZWRfcGFnZXMpOwpAQCAtODU5LDIwICs4NjAsMzMgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb3NkX2F0dHIgZ19hdHRyX2lub2RlX2ZpbGVfbGF5b3V0ID0gQVRUUl9ERUYoCisJRVhPRlNfQVBBR0VfRlNfREFUQSwKKwlFWE9GU19BVFRSX0lOT0RFX0ZJTEVfTEFZT1VULAorCTApOworc3RhdGljIGNvbnN0IHN0cnVjdCBvc2RfYXR0ciBnX2F0dHJfaW5vZGVfZGlyX2xheW91dCA9IEFUVFJfREVGKAorCUVYT0ZTX0FQQUdFX0ZTX0RBVEEsCisJRVhPRlNfQVRUUl9JTk9ERV9ESVJfTEFZT1VULAorCTApOworCiAvKgotICogUmVhZCBhbiBpbm9kZSBmcm9tIHRoZSBPU0QsIGFuZCByZXR1cm4gaXQgYXMgaXMuICBXZSBhbHNvIHJldHVybiB0aGUgc2l6ZQotICogYXR0cmlidXRlIGluIHRoZSAnb2JqX3NpemUnIGFyZ3VtZW50LgorICogUmVhZCB0aGUgTGludXggaW5vZGUgaW5mbyBmcm9tIHRoZSBPU0QsIGFuZCByZXR1cm4gaXQgYXMgaXMuIEluIGV4b2ZzIHRoZQorICogaW5vZGUgaW5mbyBpcyBpbiBhbiBhcHBsaWNhdGlvbiBzcGVjaWZpYyBwYWdlL2F0dHJpYnV0ZSBvZiB0aGUgb3NkLW9iamVjdC4KICAqLwogc3RhdGljIGludCBleG9mc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2ksCi0JCSAgICBzdHJ1Y3QgZXhvZnNfZmNiICppbm9kZSwgdWludDY0X3QgKm9ial9zaXplKQorCQkgICAgc3RydWN0IGV4b2ZzX2ZjYiAqaW5vZGUpCiB7CiAJc3RydWN0IGV4b2ZzX3NiX2luZm8gKnNiaSA9IHNiLT5zX2ZzX2luZm87Ci0Jc3RydWN0IG9zZF9hdHRyIGF0dHJzWzJdOworCXN0cnVjdCBvc2RfYXR0ciBhdHRyc1tdID0geworCQlbMF0gPSBnX2F0dHJfaW5vZGVfZGF0YSwKKwkJWzFdID0gZ19hdHRyX2lub2RlX2ZpbGVfbGF5b3V0LAorCQlbMl0gPSBnX2F0dHJfaW5vZGVfZGlyX2xheW91dCwKKwl9OwogCXN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zOworCXN0cnVjdCBleG9mc19vbl9kaXNrX2lub2RlX2xheW91dCAqbGF5b3V0OwogCWludCByZXQ7CiAKLQkqb2JqX3NpemUgPSB+MDsKLQlyZXQgPSBleG9mc19nZXRfaW9fc3RhdGUoc2JpLCAmaW9zKTsKKwlyZXQgPSBleG9mc19nZXRfaW9fc3RhdGUoJnNiaS0+bGF5b3V0LCAmaW9zKTsKIAlpZiAodW5saWtlbHkocmV0KSkgewogCQlFWE9GU19FUlIoIiVzOiBleG9mc19nZXRfaW9fc3RhdGUgZmFpbGVkLlxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gcmV0OwpAQCAtODgyLDE0ICs4OTYsMjUgQEAKIAlleG9mc19tYWtlX2NyZWRlbnRpYWwob2ktPmlfY3JlZCwgJmlvcy0+b2JqKTsKIAlpb3MtPmNyZWQgPSBvaS0+aV9jcmVkOwogCi0JYXR0cnNbMF0gPSBnX2F0dHJfaW5vZGVfZGF0YTsKLQlhdHRyc1sxXSA9IGdfYXR0cl9sb2dpY2FsX2xlbmd0aDsKKwlhdHRyc1sxXS5sZW4gPSBleG9mc19vbl9kaXNrX2lub2RlX2xheW91dF9zaXplKHNiaS0+bGF5b3V0LnNfbnVtZGV2cyk7CisJYXR0cnNbMl0ubGVuID0gZXhvZnNfb25fZGlza19pbm9kZV9sYXlvdXRfc2l6ZShzYmktPmxheW91dC5zX251bWRldnMpOworCiAJaW9zLT5pbl9hdHRyID0gYXR0cnM7CiAJaW9zLT5pbl9hdHRyX2xlbiA9IEFSUkFZX1NJWkUoYXR0cnMpOwogCiAJcmV0ID0gZXhvZnNfc2JpX3JlYWQoaW9zKTsKLQlpZiAocmV0KQorCWlmICh1bmxpa2VseShyZXQpKSB7CisJCUVYT0ZTX0VSUigib2JqZWN0KDB4JWxseCkgY29ycnVwdGVkLCByZXR1cm4gZW1wdHkgZmlsZT0+JWRcbiIsCisJCQkgIF9MTFUoaW9zLT5vYmouaWQpLCByZXQpOworCQltZW1zZXQoaW5vZGUsIDAsIHNpemVvZigqaW5vZGUpKTsKKwkJaW5vZGUtPmlfbW9kZSA9IDAwNDAwMDAgfCAoMDc3NyAmIH4wMjIpOworCQkvKiBJZiBvYmplY3QgaXMgbG9zdCBvbiB0YXJnZXQgd2UgbWlnaHQgYXMgd2VsbCBlbmFibGUgaXQncworCQkgKiBkZWxldGUuCisJCSAqLworCQlpZiAoKHJldCA9PSAtRU5PRU5UKSB8fCAocmV0ID09IC1FSU5WQUwpKQorCQkJcmV0ID0gMDsKIAkJZ290byBvdXQ7CisJfQogCiAJcmV0ID0gZXh0cmFjdF9hdHRyX2Zyb21faW9zKGlvcywgJmF0dHJzWzBdKTsKIAlpZiAocmV0KSB7CkBAIC05MDEsMTEgKzkyNiwzMyBAQAogCiAJcmV0ID0gZXh0cmFjdF9hdHRyX2Zyb21faW9zKGlvcywgJmF0dHJzWzFdKTsKIAlpZiAocmV0KSB7Ci0JCUVYT0ZTX0VSUigiJXM6IGV4dHJhY3RfYXR0ciBvZiBsb2dpY2FsX2xlbmd0aCBmYWlsZWRcbiIsCi0JCQkgIF9fZnVuY19fKTsKKwkJRVhPRlNfRVJSKCIlczogZXh0cmFjdF9hdHRyIG9mIGlub2RlX2RhdGEgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gb3V0OwogCX0KLQkqb2JqX3NpemUgPSBnZXRfdW5hbGlnbmVkX2JlNjQoYXR0cnNbMV0udmFsX3B0cik7CisJaWYgKGF0dHJzWzFdLmxlbikgeworCQlsYXlvdXQgPSBhdHRyc1sxXS52YWxfcHRyOworCQlpZiAobGF5b3V0LT5nZW5fZnVuYyAhPSBjcHVfdG9fbGUxNihMQVlPVVRfTU9WSU5HX1dJTkRPVykpIHsKKwkJCUVYT0ZTX0VSUigiJXM6IHVuc3VwcG9ydGVkIGZpbGVzIGxheW91dCAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgbGF5b3V0LT5nZW5fZnVuYyk7CisJCQlyZXQgPSAtRU5PVFNVUFA7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXJldCA9IGV4dHJhY3RfYXR0cl9mcm9tX2lvcyhpb3MsICZhdHRyc1syXSk7CisJaWYgKHJldCkgeworCQlFWE9GU19FUlIoIiVzOiBleHRyYWN0X2F0dHIgb2YgaW5vZGVfZGF0YSBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBvdXQ7CisJfQorCWlmIChhdHRyc1syXS5sZW4pIHsKKwkJbGF5b3V0ID0gYXR0cnNbMl0udmFsX3B0cjsKKwkJaWYgKGxheW91dC0+Z2VuX2Z1bmMgIT0gY3B1X3RvX2xlMTYoTEFZT1VUX01PVklOR19XSU5ET1cpKSB7CisJCQlFWE9GU19FUlIoIiVzOiB1bnN1cHBvcnRlZCBtZXRhLWRhdGEgbGF5b3V0ICVkXG4iLAorCQkJCV9fZnVuY19fLCBsYXlvdXQtPmdlbl9mdW5jKTsKKwkJCXJldCA9IC1FTk9UU1VQUDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQogCiBvdXQ6CiAJZXhvZnNfcHV0X2lvX3N0YXRlKGlvcyk7CkBAIC05MjUsNyArOTcyLDYgQEAKIAlzdHJ1Y3QgZXhvZnNfaV9pbmZvICpvaTsKIAlzdHJ1Y3QgZXhvZnNfZmNiIGZjYjsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCXVpbnQ2NF90IG9ial9zaXplOwogCWludCByZXQ7CiAKIAlpbm9kZSA9IGlnZXRfbG9ja2VkKHNiLCBpbm8pOwpAQCAtOTM3LDcgKzk4Myw3IEBACiAJX19vaV9pbml0KG9pKTsKIAogCS8qIHJlYWQgdGhlIGlub2RlIGZyb20gdGhlIG9zZCAqLwotCXJldCA9IGV4b2ZzX2dldF9pbm9kZShzYiwgb2ksICZmY2IsICZvYmpfc2l6ZSk7CisJcmV0ID0gZXhvZnNfZ2V0X2lub2RlKHNiLCBvaSwgJmZjYik7CiAJaWYgKHJldCkKIAkJZ290byBiYWRfaW5vZGU7CiAKQEAgLTk1OCwxMyArMTAwNCw2IEBACiAJaW5vZGUtPmlfYmxrYml0cyA9IEVYT0ZTX0JMS1NISUZUOwogCWlub2RlLT5pX2dlbmVyYXRpb24gPSBsZTMyX3RvX2NwdShmY2IuaV9nZW5lcmF0aW9uKTsKIAotCWlmICgoaW5vZGUtPmlfc2l6ZSAhPSBvYmpfc2l6ZSkgJiYKLQkJKCFleG9mc19pbm9kZV9pc19mYXN0X3N5bWxpbmsoaW5vZGUpKSkgewotCQlFWE9GU19FUlIoIldBUk5JTkc6IFNpemUgb2YgaW5vZGU9JWxsdSAhPSBvYmplY3Q9JWxsdVxuIiwKLQkJCSAgaW5vZGUtPmlfc2l6ZSwgX0xMVShvYmpfc2l6ZSkpOwotCQkvKiBGSVhNRTogY2FsbCBleG9mc19pbm9kZV9yZWNvdmVyeSgpICovCi0JfQotCiAJb2ktPmlfZGlyX3N0YXJ0X2xvb2t1cCA9IDA7CiAKIAlpZiAoKGlub2RlLT5pX25saW5rID09IDApICYmIChpbm9kZS0+aV9tb2RlID09IDApKSB7CkBAIC0xMDQzLDcgKzEwODIsNyBAQAogCiAJaWYgKHVubGlrZWx5KHJldCkpIHsKIAkJRVhPRlNfRVJSKCJvYmplY3Q9MHglbGx4IGNyZWF0aW9uIGZhaWxkIGluIHBpZD0weCVsbHgiLAotCQkJICBfTExVKGV4b2ZzX29pX29iam5vKG9pKSksIF9MTFUoc2JpLT5zX3BpZCkpOworCQkJICBfTExVKGV4b2ZzX29pX29iam5vKG9pKSksIF9MTFUoc2JpLT5sYXlvdXQuc19waWQpKTsKIAkJLypUT0RPOiBXaGVuIEZTIGlzIGNvcnJ1cHRlZCBjcmVhdGlvbiBjYW4gZmFpbCwgb2JqZWN0IGFscmVhZHkKIAkJICogZXhpc3QuIEdldCByaWQgb2YgdGhpcyBhc3luY2hyb25vdXMgY3JlYXRpb24sIGlmIGV4aXN0CiAJCSAqIGluY3JlbWVudCB0aGUgb2JqIGNvdW50ZXIgYW5kIHRyeSB0aGUgbmV4dCBvYmplY3QuIFVudGlsIHdlCkBAIC0xMTA0LDcgKzExNDMsNyBAQAogCiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAKLQlyZXQgPSBleG9mc19nZXRfaW9fc3RhdGUoc2JpLCAmaW9zKTsKKwlyZXQgPSBleG9mc19nZXRfaW9fc3RhdGUoJnNiaS0+bGF5b3V0LCAmaW9zKTsKIAlpZiAodW5saWtlbHkocmV0KSkgewogCQlFWE9GU19FUlIoImV4b2ZzX25ld19pbm9kZTogZXhvZnNfZ2V0X2lvX3N0YXRlIGZhaWxlZFxuIik7CiAJCXJldHVybiBFUlJfUFRSKHJldCk7CkBAIC0xMTcwLDggKzEyMDksMTAgQEAKIAlpbnQgcmV0OwogCiAJYXJncyA9IGt6YWxsb2Moc2l6ZW9mKCphcmdzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFhcmdzKQorCWlmICghYXJncykgeworCQlFWE9GU19EQkdNU0coIkZhaWxkIGt6YWxsb2Mgb2YgYXJnc1xuIik7CiAJCXJldHVybiAtRU5PTUVNOworCX0KIAogCWZjYiA9ICZhcmdzLT5mY2I7CiAKQEAgLTEyMDAsNyArMTI0MSw3IEBACiAJfSBlbHNlCiAJCW1lbWNweShmY2ItPmlfZGF0YSwgb2ktPmlfZGF0YSwgc2l6ZW9mKGZjYi0+aV9kYXRhKSk7CiAKLQlyZXQgPSBleG9mc19nZXRfaW9fc3RhdGUoc2JpLCAmaW9zKTsKKwlyZXQgPSBleG9mc19nZXRfaW9fc3RhdGUoJnNiaS0+bGF5b3V0LCAmaW9zKTsKIAlpZiAodW5saWtlbHkocmV0KSkgewogCQlFWE9GU19FUlIoIiVzOiBleG9mc19nZXRfaW9fc3RhdGUgZmFpbGVkLlxuIiwgX19mdW5jX18pOwogCQlnb3RvIGZyZWVfYXJnczsKQEAgLTEyMzQsMTMgKzEyNzUsMTQgQEAKIGZyZWVfYXJnczoKIAlrZnJlZShhcmdzKTsKIG91dDoKLQlFWE9GU19EQkdNU0coInJldD0+JWRcbiIsIHJldCk7CisJRVhPRlNfREJHTVNHKCIoMHglbHgpIGRvX3N5bmM9JWQgcmV0PT4lZFxuIiwKKwkJICAgICBpbm9kZS0+aV9pbm8sIGRvX3N5bmMsIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGV4b2ZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KQoraW50IGV4b2ZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewotCXJldHVybiBleG9mc191cGRhdGVfaW5vZGUoaW5vZGUsIHdhaXQpOworCXJldHVybiBleG9mc191cGRhdGVfaW5vZGUoaW5vZGUsIHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMKTsKIH0KIAogLyoKQEAgLTEyODMsNyArMTMyNSw3IEBACiAKIAljbGVhcl9pbm9kZShpbm9kZSk7CiAKLQlyZXQgPSBleG9mc19nZXRfaW9fc3RhdGUoc2JpLCAmaW9zKTsKKwlyZXQgPSBleG9mc19nZXRfaW9fc3RhdGUoJnNiaS0+bGF5b3V0LCAmaW9zKTsKIAlpZiAodW5saWtlbHkocmV0KSkgewogCQlFWE9GU19FUlIoIiVzOiBleG9mc19nZXRfaW9fc3RhdGUgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2ZzL2V4b2ZzL2lvcy5jIGIvZnMvZXhvZnMvaW9zLmMKaW5kZXggNWJhZDAxZi4uNTI5M2JjNCAxMDA2NDQKLS0tIGEvZnMvZXhvZnMvaW9zLmMKKysrIGIvZnMvZXhvZnMvaW9zLmMKQEAgLTIzLDkgKzIzLDEzIEBACiAgKi8KIAogI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAogI2luY2x1ZGUgImV4b2ZzLmgiCiAKKyNkZWZpbmUgRVhPRlNfREJHTVNHMihNLi4uKSBkbyB7fSB3aGlsZSAoMCkKKy8qICNkZWZpbmUgRVhPRlNfREJHTVNHMiBFWE9GU19EQkdNU0cgKi8KKwogdm9pZCBleG9mc19tYWtlX2NyZWRlbnRpYWwodTggY3JlZF9hW09TRF9DQVBfTEVOXSwgY29uc3Qgc3RydWN0IG9zZF9vYmpfaWQgKm9iaikKIHsKIAlvc2Rfc2VjX2luaXRfbm9zZWNfZG9hbGxfY2FwcyhjcmVkX2EsIG9iaiwgZmFsc2UsIHRydWUpOwpAQCAtNjQsMjEgKzY4LDI0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotaW50IGV4b2ZzX2dldF9pb19zdGF0ZShzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpLCBzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUqKiBwaW9zKQoraW50IGV4b2ZzX2dldF9pb19zdGF0ZShzdHJ1Y3QgZXhvZnNfbGF5b3V0ICpsYXlvdXQsCisJCSAgICAgICBzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKipwaW9zKQogewogCXN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zOwogCiAJLypUT0RPOiBNYXliZSB1c2Uga21lbV9jYWNoIHBlciBzYmkgb2Ygc2l6ZQotCSAqIGV4b2ZzX2lvX3N0YXRlX3NpemUoc2JpLT5zX251bWRldnMpCisJICogZXhvZnNfaW9fc3RhdGVfc2l6ZShsYXlvdXQtPnNfbnVtZGV2cykKIAkgKi8KLQlpb3MgPSBremFsbG9jKGV4b2ZzX2lvX3N0YXRlX3NpemUoc2JpLT5zX251bWRldnMpLCBHRlBfS0VSTkVMKTsKKwlpb3MgPSBremFsbG9jKGV4b2ZzX2lvX3N0YXRlX3NpemUobGF5b3V0LT5zX251bWRldnMpLCBHRlBfS0VSTkVMKTsKIAlpZiAodW5saWtlbHkoIWlvcykpIHsKKwkJRVhPRlNfREJHTVNHKCJGYWlsZCBremFsbG9jIGJ5dGVzPSVkXG4iLAorCQkJICAgICBleG9mc19pb19zdGF0ZV9zaXplKGxheW91dC0+c19udW1kZXZzKSk7CiAJCSpwaW9zID0gTlVMTDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JaW9zLT5zYmkgPSBzYmk7Ci0JaW9zLT5vYmoucGFydGl0aW9uID0gc2JpLT5zX3BpZDsKKwlpb3MtPmxheW91dCA9IGxheW91dDsKKwlpb3MtPm9iai5wYXJ0aXRpb24gPSBsYXlvdXQtPnNfcGlkOwogCSpwaW9zID0gaW9zOwogCXJldHVybiAwOwogfQpAQCAtMTAxLDYgKzEwOCwyOSBAQAogCX0KIH0KIAordW5zaWduZWQgZXhvZnNfbGF5b3V0X29kX2lkKHN0cnVjdCBleG9mc19sYXlvdXQgKmxheW91dCwKKwkJCSAgICBvc2RfaWQgb2JqX25vLCB1bnNpZ25lZCBsYXlvdXRfaW5kZXgpCit7CisvKglzd2l0Y2ggKGxheW91dC0+bGF5X2Z1bmMpIHsKKwljYXNlIExBWU9VVF9NT1ZJTkdfV0lORE9XOgorCXsqLworCQl1bnNpZ25lZCBkZXZfbW9kID0gb2JqX25vOworCisJCXJldHVybiAobGF5b3V0X2luZGV4ICsgZGV2X21vZCAqIGxheW91dC0+bWlycm9yc19wMSkgJQorCQkJCQkJCSAgICAgIGxheW91dC0+c19udW1kZXZzOworLyoJfQorCWNhc2UgTEFZT1VUX0ZVTkNfSU1QTElDVDoKKwkJcmV0dXJuIGxheW91dC0+ZGV2c1tsYXlvdXRfaW5kZXhdOworCX0qLworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBvc2RfZGV2ICpleG9mc19pb3Nfb2Qoc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3MsCisJCQkJCSAgIHVuc2lnbmVkIGxheW91dF9pbmRleCkKK3sKKwlyZXR1cm4gaW9zLT5sYXlvdXQtPnNfb2RzWworCQlleG9mc19sYXlvdXRfb2RfaWQoaW9zLT5sYXlvdXQsIGlvcy0+b2JqLmlkLCBsYXlvdXRfaW5kZXgpXTsKK30KKwogc3RhdGljIHZvaWQgX3N5bmNfZG9uZShzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcywgdm9pZCAqcCkKIHsKIAlzdHJ1Y3QgY29tcGxldGlvbiAqd2FpdGluZyA9IHA7CkBAIC0xNjgsNiArMTk4LDIxIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHZvaWQgX2NsZWFyX2JpbyhzdHJ1Y3QgYmlvICpiaW8pCit7CisJc3RydWN0IGJpb192ZWMgKmJ2OworCXVuc2lnbmVkIGk7CisKKwlfX2Jpb19mb3JfZWFjaF9zZWdtZW50KGJ2LCBiaW8sIGksIDApIHsKKwkJdW5zaWduZWQgdGhpc19jb3VudCA9IGJ2LT5idl9sZW47CisKKwkJaWYgKGxpa2VseShQQUdFX1NJWkUgPT0gdGhpc19jb3VudCkpCisJCQljbGVhcl9oaWdocGFnZShidi0+YnZfcGFnZSk7CisJCWVsc2UKKwkJCXplcm9fdXNlcihidi0+YnZfcGFnZSwgYnYtPmJ2X29mZnNldCwgdGhpc19jb3VudCk7CisJfQorfQorCiBpbnQgZXhvZnNfY2hlY2tfaW8oc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3MsIHU2NCAqcmVzaWQpCiB7CiAJZW51bSBvc2RfZXJyX3ByaW9yaXR5IGFjdW11bGF0ZWRfb3NkX2VyciA9IDA7CkBAIC0xNzYsMTYgKzIyMSwyNSBAQAogCiAJZm9yIChpID0gMDsgaSA8IGlvcy0+bnVtZGV2czsgaSsrKSB7CiAJCXN0cnVjdCBvc2Rfc2Vuc2VfaW5mbyBvc2k7Ci0JCWludCByZXQgPSBvc2RfcmVxX2RlY29kZV9zZW5zZShpb3MtPnBlcl9kZXZbaV0ub3IsICZvc2kpOworCQlzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yID0gaW9zLT5wZXJfZGV2W2ldLm9yOworCQlpbnQgcmV0OwogCisJCWlmICh1bmxpa2VseSghb3IpKQorCQkJY29udGludWU7CisKKwkJcmV0ID0gb3NkX3JlcV9kZWNvZGVfc2Vuc2Uob3IsICZvc2kpOwogCQlpZiAobGlrZWx5KCFyZXQpKQogCQkJY29udGludWU7CiAKLQkJaWYgKHVubGlrZWx5KHJldCA9PSAtRUZBVUxUKSkgewotCQkJRVhPRlNfREJHTVNHKCIlczogRUZBVUxUIE5lZWQgcGFnZSBjbGVhclxuIiwgX19mdW5jX18pOwotCQkJLypGSVhNRTogQWxsIHRoZSBwYWdlcyBpbiB0aGlzIGRldmljZSByYW5nZSBzaG91bGQ6Ci0JCQkgKgljbGVhcl9oaWdocGFnZShwYWdlKTsKLQkJCSAqLworCQlpZiAoT1NEX0VSUl9QUklfQ0xFQVJfUEFHRVMgPT0gb3NpLm9zZF9lcnJfcHJpKSB7CisJCQkvKiBzdGFydCByZWFkIG9mZnNldCBwYXNzZWQgZW5kb2YgZmlsZSAqLworCQkJX2NsZWFyX2Jpbyhpb3MtPnBlcl9kZXZbaV0uYmlvKTsKKwkJCUVYT0ZTX0RCR01TRygic3RhcnQgcmVhZCBvZmZzZXQgcGFzc2VkIGVuZCBvZiBmaWxlICIKKwkJCQkib2Zmc2V0PTB4JWxseCwgbGVuZ3RoPTB4JWxseFxuIiwKKwkJCQlfTExVKGlvcy0+cGVyX2RldltpXS5vZmZzZXQpLAorCQkJCV9MTFUoaW9zLT5wZXJfZGV2W2ldLmxlbmd0aCkpOworCisJCQljb250aW51ZTsgLyogd2UgcmVjb3ZlcmVkICovCiAJCX0KIAogCQlpZiAob3NpLm9zZF9lcnJfcHJpID49IGFjdW11bGF0ZWRfb3NkX2VycikgewpAQCAtMjA1LDE0ICsyNTksMjU5IEBACiAJcmV0dXJuIGFjdW11bGF0ZWRfbGluX2VycjsKIH0KIAorLyoKKyAqIEwgLSBsb2dpY2FsIG9mZnNldCBpbnRvIHRoZSBmaWxlCisgKgorICogVSAtIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gYSBzdHJpcGUgd2l0aGluIGEgZ3JvdXAKKyAqCisgKglVID0gc3RyaXBlX3VuaXQgKiBncm91cF93aWR0aAorICoKKyAqIFQgLSBUaGUgbnVtYmVyIG9mIGJ5dGVzIHN0cmlwZWQgd2l0aGluIGEgZ3JvdXAgb2YgY29tcG9uZW50IG9iamVjdHMKKyAqICAgICAoYmVmb3JlIGFkdmFuY2luZyB0byB0aGUgbmV4dCBncm91cCkKKyAqCisgKglUID0gc3RyaXBlX3VuaXQgKiBncm91cF93aWR0aCAqIGdyb3VwX2RlcHRoCisgKgorICogUyAtIFRoZSBudW1iZXIgb2YgYnl0ZXMgc3RyaXBlZCBhY3Jvc3MgYWxsIGNvbXBvbmVudCBvYmplY3RzCisgKiAgICAgYmVmb3JlIHRoZSBwYXR0ZXJuIHJlcGVhdHMKKyAqCisgKglTID0gc3RyaXBlX3VuaXQgKiBncm91cF93aWR0aCAqIGdyb3VwX2RlcHRoICogZ3JvdXBfY291bnQKKyAqCisgKiBNIC0gVGhlICJtYWpvciIgKGkuZS4sIGFjcm9zcyBhbGwgY29tcG9uZW50cykgc3RyaXBlIG51bWJlcgorICoKKyAqCU0gPSBMIC8gUworICoKKyAqIEcgLSBDb3VudHMgdGhlIGdyb3VwcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1ham9yIHN0cmlwZQorICoKKyAqCUcgPSAoTCAtIChNICogUykpIC8gVAlbb3IgKEwgJSBTKSAvIFRdCisgKgorICogSCAtIFRoZSBieXRlIG9mZnNldCB3aXRoaW4gdGhlIGdyb3VwCisgKgorICoJSCA9IChMIC0gKE0gKiBTKSkgJSBUCVtvciAoTCAlIFMpICUgVF0KKyAqCisgKiBOIC0gVGhlICJtaW5vciIgKGkuZS4sIGFjcm9zcyB0aGUgZ3JvdXApIHN0cmlwZSBudW1iZXIKKyAqCisgKglOID0gSCAvIFUKKyAqCisgKiBDIC0gVGhlIGNvbXBvbmVudCBpbmRleCBjb3Jlc3BvbmRpbmcgdG8gTAorICoKKyAqCUMgPSAoSCAtIChOICogVSkpIC8gc3RyaXBlX3VuaXQgKyBHICogZ3JvdXBfd2lkdGgKKyAqCVtvciAoTCAlIFUpIC8gc3RyaXBlX3VuaXQgKyBHICogZ3JvdXBfd2lkdGhdCisgKgorICogTyAtIFRoZSBjb21wb25lbnQgb2Zmc2V0IGNvcmVzcG9uZGluZyB0byBMCisgKgorICoJTyA9IEwgJSBzdHJpcGVfdW5pdCArIE4gKiBzdHJpcGVfdW5pdCArIE0gKiBncm91cF9kZXB0aCAqIHN0cmlwZV91bml0CisgKi8KK3N0cnVjdCBfc3RyaXBpbmdfaW5mbyB7CisJdTY0IG9ial9vZmZzZXQ7CisJdTY0IGdyb3VwX2xlbmd0aDsKKwl1NjQgdG90YWxfZ3JvdXBfbGVuZ3RoOworCXU2NCBNYWpvcjsKKwl1bnNpZ25lZCBkZXY7CisJdW5zaWduZWQgdW5pdF9vZmY7Cit9OworCitzdGF0aWMgdm9pZCBfY2FsY19zdHJpcGVfaW5mbyhzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcywgdTY0IGZpbGVfb2Zmc2V0LAorCQkJICAgICAgc3RydWN0IF9zdHJpcGluZ19pbmZvICpzaSkKK3sKKwl1MzIJc3RyaXBlX3VuaXQgPSBpb3MtPmxheW91dC0+c3RyaXBlX3VuaXQ7CisJdTMyCWdyb3VwX3dpZHRoID0gaW9zLT5sYXlvdXQtPmdyb3VwX3dpZHRoOworCXU2NAlncm91cF9kZXB0aCA9IGlvcy0+bGF5b3V0LT5ncm91cF9kZXB0aDsKKworCXUzMglVID0gc3RyaXBlX3VuaXQgKiBncm91cF93aWR0aDsKKwl1NjQJVCA9IFUgKiBncm91cF9kZXB0aDsKKwl1NjQJUyA9IFQgKiBpb3MtPmxheW91dC0+Z3JvdXBfY291bnQ7CisJdTY0CU0gPSBkaXY2NF91NjQoZmlsZV9vZmZzZXQsIFMpOworCisJLyoKKwlHID0gKEwgLSAoTSAqIFMpKSAvIFQKKwlIID0gKEwgLSAoTSAqIFMpKSAlIFQKKwkqLworCXU2NAlMbW9kUyA9IGZpbGVfb2Zmc2V0IC0gTSAqIFM7CisJdTMyCUcgPSBkaXY2NF91NjQoTG1vZFMsIFQpOworCXU2NAlIID0gTG1vZFMgLSBHICogVDsKKworCXUzMglOID0gZGl2X3U2NChILCBVKTsKKworCS8qICJIIC0gKE4gKiBVKSIgaXMganVzdCAiSCAlIFUiIHNvIGl0J3MgYm91bmQgdG8gdTMyICovCisJc2ktPmRldiA9ICh1MzIpKEggLSAoTiAqIFUpKSAvIHN0cmlwZV91bml0ICsgRyAqIGdyb3VwX3dpZHRoOworCXNpLT5kZXYgKj0gaW9zLT5sYXlvdXQtPm1pcnJvcnNfcDE7CisKKwlkaXZfdTY0X3JlbShmaWxlX29mZnNldCwgc3RyaXBlX3VuaXQsICZzaS0+dW5pdF9vZmYpOworCisJc2ktPm9ial9vZmZzZXQgPSBzaS0+dW5pdF9vZmYgKyAoTiAqIHN0cmlwZV91bml0KSArCisJCQkJICAoTSAqIGdyb3VwX2RlcHRoICogc3RyaXBlX3VuaXQpOworCisJc2ktPmdyb3VwX2xlbmd0aCA9IFQgLSBIOworCXNpLT50b3RhbF9ncm91cF9sZW5ndGggPSBUOworCXNpLT5NYWpvciA9IE07Cit9CisKK3N0YXRpYyBpbnQgX2FkZF9zdHJpcGVfdW5pdChzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcywgIHVuc2lnbmVkICpjdXJfcGcsCisJCXVuc2lnbmVkIHBnYmFzZSwgc3RydWN0IGV4b2ZzX3Blcl9kZXZfc3RhdGUgKnBlcl9kZXYsCisJCWludCBjdXJfbGVuKQoreworCXVuc2lnbmVkIHBnID0gKmN1cl9wZzsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9CisJCQlvc2RfcmVxdWVzdF9xdWV1ZShleG9mc19pb3Nfb2QoaW9zLCBwZXJfZGV2LT5kZXYpKTsKKworCXBlcl9kZXYtPmxlbmd0aCArPSBjdXJfbGVuOworCisJaWYgKHBlcl9kZXYtPmJpbyA9PSBOVUxMKSB7CisJCXVuc2lnbmVkIHBhZ2VzX2luX3N0cmlwZSA9IGlvcy0+bGF5b3V0LT5ncm91cF93aWR0aCAqCisJCQkJCShpb3MtPmxheW91dC0+c3RyaXBlX3VuaXQgLyBQQUdFX1NJWkUpOworCQl1bnNpZ25lZCBiaW9fc2l6ZSA9IChpb3MtPm5yX3BhZ2VzICsgcGFnZXNfaW5fc3RyaXBlKSAvCisJCQkJCQlpb3MtPmxheW91dC0+Z3JvdXBfd2lkdGg7CisKKwkJcGVyX2Rldi0+YmlvID0gYmlvX2ttYWxsb2MoR0ZQX0tFUk5FTCwgYmlvX3NpemUpOworCQlpZiAodW5saWtlbHkoIXBlcl9kZXYtPmJpbykpIHsKKwkJCUVYT0ZTX0RCR01TRygiRmFpbGQgdG8gYWxsb2NhdGUgQklPIHNpemU9JXVcbiIsCisJCQkJICAgICBiaW9fc2l6ZSk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCX0KKworCXdoaWxlIChjdXJfbGVuID4gMCkgeworCQl1bnNpZ25lZCBwZ2xlbiA9IG1pbl90KHVuc2lnbmVkLCBQQUdFX1NJWkUgLSBwZ2Jhc2UsIGN1cl9sZW4pOworCQl1bnNpZ25lZCBhZGRlZF9sZW47CisKKwkJQlVHX09OKGlvcy0+bnJfcGFnZXMgPD0gcGcpOworCQljdXJfbGVuIC09IHBnbGVuOworCisJCWFkZGVkX2xlbiA9IGJpb19hZGRfcGNfcGFnZShxLCBwZXJfZGV2LT5iaW8sIGlvcy0+cGFnZXNbcGddLAorCQkJCQkgICAgcGdsZW4sIHBnYmFzZSk7CisJCWlmICh1bmxpa2VseShwZ2xlbiAhPSBhZGRlZF9sZW4pKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCXBnYmFzZSA9IDA7CisJCSsrcGc7CisJfQorCUJVR19PTihjdXJfbGVuKTsKKworCSpjdXJfcGcgPSBwZzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfcHJlcGFyZV9vbmVfZ3JvdXAoc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3MsIHU2NCBsZW5ndGgsCisJCQkgICAgICBzdHJ1Y3QgX3N0cmlwaW5nX2luZm8gKnNpLCB1bnNpZ25lZCBmaXJzdF9jb21wKQoreworCXVuc2lnbmVkIHN0cmlwZV91bml0ID0gaW9zLT5sYXlvdXQtPnN0cmlwZV91bml0OworCXVuc2lnbmVkIG1pcnJvcnNfcDEgPSBpb3MtPmxheW91dC0+bWlycm9yc19wMTsKKwl1bnNpZ25lZCBkZXZzX2luX2dyb3VwID0gaW9zLT5sYXlvdXQtPmdyb3VwX3dpZHRoICogbWlycm9yc19wMTsKKwl1bnNpZ25lZCBkZXYgPSBzaS0+ZGV2OworCXVuc2lnbmVkIGZpcnN0X2RldiA9IGRldiAtIChkZXYgJSBkZXZzX2luX2dyb3VwKTsKKwl1bnNpZ25lZCBjb21wID0gZmlyc3RfY29tcCArIChkZXYgLSBmaXJzdF9kZXYpOworCXVuc2lnbmVkIG1heF9jb21wID0gaW9zLT5udW1kZXZzID8gaW9zLT5udW1kZXZzIC0gbWlycm9yc19wMSA6IDA7CisJdW5zaWduZWQgY3VyX3BnID0gaW9zLT5wYWdlc19jb25zdW1lZDsKKwlpbnQgcmV0ID0gMDsKKworCXdoaWxlIChsZW5ndGgpIHsKKwkJc3RydWN0IGV4b2ZzX3Blcl9kZXZfc3RhdGUgKnBlcl9kZXYgPSAmaW9zLT5wZXJfZGV2W2NvbXBdOworCQl1bnNpZ25lZCBjdXJfbGVuLCBwYWdlX29mZiA9IDA7CisKKwkJaWYgKCFwZXJfZGV2LT5sZW5ndGgpIHsKKwkJCXBlcl9kZXYtPmRldiA9IGRldjsKKwkJCWlmIChkZXYgPCBzaS0+ZGV2KSB7CisJCQkJcGVyX2Rldi0+b2Zmc2V0ID0gc2ktPm9ial9vZmZzZXQgKyBzdHJpcGVfdW5pdCAtCisJCQkJCQkJCSAgIHNpLT51bml0X29mZjsKKwkJCQljdXJfbGVuID0gc3RyaXBlX3VuaXQ7CisJCQl9IGVsc2UgaWYgKGRldiA9PSBzaS0+ZGV2KSB7CisJCQkJcGVyX2Rldi0+b2Zmc2V0ID0gc2ktPm9ial9vZmZzZXQ7CisJCQkJY3VyX2xlbiA9IHN0cmlwZV91bml0IC0gc2ktPnVuaXRfb2ZmOworCQkJCXBhZ2Vfb2ZmID0gc2ktPnVuaXRfb2ZmICYgflBBR0VfTUFTSzsKKwkJCQlCVUdfT04ocGFnZV9vZmYgJiYgKHBhZ2Vfb2ZmICE9IGlvcy0+cGdiYXNlKSk7CisJCQl9IGVsc2UgeyAvKiBkZXYgPiBzaS0+ZGV2ICovCisJCQkJcGVyX2Rldi0+b2Zmc2V0ID0gc2ktPm9ial9vZmZzZXQgLSBzaS0+dW5pdF9vZmY7CisJCQkJY3VyX2xlbiA9IHN0cmlwZV91bml0OworCQkJfQorCisJCQlpZiAobWF4X2NvbXAgPCBjb21wKQorCQkJCW1heF9jb21wID0gY29tcDsKKworCQkJZGV2ICs9IG1pcnJvcnNfcDE7CisJCQlkZXYgPSAoZGV2ICUgZGV2c19pbl9ncm91cCkgKyBmaXJzdF9kZXY7CisJCX0gZWxzZSB7CisJCQljdXJfbGVuID0gc3RyaXBlX3VuaXQ7CisJCX0KKwkJaWYgKGN1cl9sZW4gPj0gbGVuZ3RoKQorCQkJY3VyX2xlbiA9IGxlbmd0aDsKKworCQlyZXQgPSBfYWRkX3N0cmlwZV91bml0KGlvcywgJmN1cl9wZywgcGFnZV9vZmYgLCBwZXJfZGV2LAorCQkJCSAgICAgICBjdXJfbGVuKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlnb3RvIG91dDsKKworCQljb21wICs9IG1pcnJvcnNfcDE7CisJCWNvbXAgPSAoY29tcCAlIGRldnNfaW5fZ3JvdXApICsgZmlyc3RfY29tcDsKKworCQlsZW5ndGggLT0gY3VyX2xlbjsKKwl9CitvdXQ6CisJaW9zLT5udW1kZXZzID0gbWF4X2NvbXAgKyBtaXJyb3JzX3AxOworCWlvcy0+cGFnZXNfY29uc3VtZWQgPSBjdXJfcGc7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBfcHJlcGFyZV9mb3Jfc3RyaXBpbmcoc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3MpCit7CisJdTY0IGxlbmd0aCA9IGlvcy0+bGVuZ3RoOworCXN0cnVjdCBfc3RyaXBpbmdfaW5mbyBzaTsKKwl1bnNpZ25lZCBkZXZzX2luX2dyb3VwID0gaW9zLT5sYXlvdXQtPmdyb3VwX3dpZHRoICoKKwkJCQkgaW9zLT5sYXlvdXQtPm1pcnJvcnNfcDE7CisJdW5zaWduZWQgZmlyc3RfY29tcCA9IDA7CisJaW50IHJldCA9IDA7CisKKwlfY2FsY19zdHJpcGVfaW5mbyhpb3MsIGlvcy0+b2Zmc2V0LCAmc2kpOworCisJaWYgKCFpb3MtPnBhZ2VzKSB7CisJCWlmIChpb3MtPmtlcm5fYnVmZikgeworCQkJc3RydWN0IGV4b2ZzX3Blcl9kZXZfc3RhdGUgKnBlcl9kZXYgPSAmaW9zLT5wZXJfZGV2WzBdOworCisJCQlwZXJfZGV2LT5vZmZzZXQgPSBzaS5vYmpfb2Zmc2V0OworCQkJcGVyX2Rldi0+ZGV2ID0gc2kuZGV2OworCisJCQkvKiBubyBjcm9zcyBkZXZpY2Ugd2l0aG91dCBwYWdlIGFycmF5ICovCisJCQlCVUdfT04oKGlvcy0+bGF5b3V0LT5ncm91cF93aWR0aCA+IDEpICYmCisJCQkgICAgICAgKHNpLnVuaXRfb2ZmICsgaW9zLT5sZW5ndGggPgorCQkJCWlvcy0+bGF5b3V0LT5zdHJpcGVfdW5pdCkpOworCQl9CisJCWlvcy0+bnVtZGV2cyA9IGlvcy0+bGF5b3V0LT5taXJyb3JzX3AxOworCQlyZXR1cm4gMDsKKwl9CisKKwl3aGlsZSAobGVuZ3RoKSB7CisJCWlmIChsZW5ndGggPCBzaS5ncm91cF9sZW5ndGgpCisJCQlzaS5ncm91cF9sZW5ndGggPSBsZW5ndGg7CisKKwkJcmV0ID0gX3ByZXBhcmVfb25lX2dyb3VwKGlvcywgc2kuZ3JvdXBfbGVuZ3RoLCAmc2ksIGZpcnN0X2NvbXApOworCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCWdvdG8gb3V0OworCisJCWxlbmd0aCAtPSBzaS5ncm91cF9sZW5ndGg7CisKKwkJc2kuZ3JvdXBfbGVuZ3RoID0gc2kudG90YWxfZ3JvdXBfbGVuZ3RoOworCQlzaS51bml0X29mZiA9IDA7CisJCSsrc2kuTWFqb3I7CisJCXNpLm9ial9vZmZzZXQgPSBzaS5NYWpvciAqIGlvcy0+bGF5b3V0LT5zdHJpcGVfdW5pdCAqCisJCQkJCQlpb3MtPmxheW91dC0+Z3JvdXBfZGVwdGg7CisKKwkJc2kuZGV2ID0gKHNpLmRldiAtIChzaS5kZXYgJSBkZXZzX2luX2dyb3VwKSkgKyBkZXZzX2luX2dyb3VwOworCQlzaS5kZXYgJT0gaW9zLT5sYXlvdXQtPnNfbnVtZGV2czsKKworCQlmaXJzdF9jb21wICs9IGRldnNfaW5fZ3JvdXA7CisJCWZpcnN0X2NvbXAgJT0gaW9zLT5sYXlvdXQtPnNfbnVtZGV2czsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCiBpbnQgZXhvZnNfc2JpX2NyZWF0ZShzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcykKIHsKIAlpbnQgaSwgcmV0OwogCi0JZm9yIChpID0gMDsgaSA8IGlvcy0+c2JpLT5zX251bWRldnM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBpb3MtPmxheW91dC0+c19udW1kZXZzOyBpKyspIHsKIAkJc3RydWN0IG9zZF9yZXF1ZXN0ICpvcjsKIAotCQlvciA9IG9zZF9zdGFydF9yZXF1ZXN0KGlvcy0+c2JpLT5zX29kc1tpXSwgR0ZQX0tFUk5FTCk7CisJCW9yID0gb3NkX3N0YXJ0X3JlcXVlc3QoZXhvZnNfaW9zX29kKGlvcywgaSksIEdGUF9LRVJORUwpOwogCQlpZiAodW5saWtlbHkoIW9yKSkgewogCQkJRVhPRlNfRVJSKCIlczogb3NkX3N0YXJ0X3JlcXVlc3QgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXQgPSAtRU5PTUVNOwpAQCAtMjMzLDEwICs1MzIsMTAgQEAKIHsKIAlpbnQgaSwgcmV0OwogCi0JZm9yIChpID0gMDsgaSA8IGlvcy0+c2JpLT5zX251bWRldnM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBpb3MtPmxheW91dC0+c19udW1kZXZzOyBpKyspIHsKIAkJc3RydWN0IG9zZF9yZXF1ZXN0ICpvcjsKIAotCQlvciA9IG9zZF9zdGFydF9yZXF1ZXN0KGlvcy0+c2JpLT5zX29kc1tpXSwgR0ZQX0tFUk5FTCk7CisJCW9yID0gb3NkX3N0YXJ0X3JlcXVlc3QoZXhvZnNfaW9zX29kKGlvcywgaSksIEdGUF9LRVJORUwpOwogCQlpZiAodW5saWtlbHkoIW9yKSkgewogCQkJRVhPRlNfRVJSKCIlczogb3NkX3N0YXJ0X3JlcXVlc3QgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCQlyZXQgPSAtRU5PTUVNOwpAQCAtMjUzLDUxICs1NTIsNzQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1pbnQgZXhvZnNfc2JpX3dyaXRlKHN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zKQorc3RhdGljIGludCBfc2JpX3dyaXRlX21pcnJvcihzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcywgaW50IGN1cl9jb21wKQogewotCWludCBpLCByZXQ7CisJc3RydWN0IGV4b2ZzX3Blcl9kZXZfc3RhdGUgKm1hc3Rlcl9kZXYgPSAmaW9zLT5wZXJfZGV2W2N1cl9jb21wXTsKKwl1bnNpZ25lZCBkZXYgPSBpb3MtPnBlcl9kZXZbY3VyX2NvbXBdLmRldjsKKwl1bnNpZ25lZCBsYXN0X2NvbXAgPSBjdXJfY29tcCArIGlvcy0+bGF5b3V0LT5taXJyb3JzX3AxOworCWludCByZXQgPSAwOwogCi0JZm9yIChpID0gMDsgaSA8IGlvcy0+c2JpLT5zX251bWRldnM7IGkrKykgeworCWlmIChpb3MtPnBhZ2VzICYmICFtYXN0ZXJfZGV2LT5sZW5ndGgpCisJCXJldHVybiAwOyAvKiBKdXN0IGFuIGVtcHR5IHNsb3QgKi8KKworCWZvciAoOyBjdXJfY29tcCA8IGxhc3RfY29tcDsgKytjdXJfY29tcCwgKytkZXYpIHsKKwkJc3RydWN0IGV4b2ZzX3Blcl9kZXZfc3RhdGUgKnBlcl9kZXYgPSAmaW9zLT5wZXJfZGV2W2N1cl9jb21wXTsKIAkJc3RydWN0IG9zZF9yZXF1ZXN0ICpvcjsKIAotCQlvciA9IG9zZF9zdGFydF9yZXF1ZXN0KGlvcy0+c2JpLT5zX29kc1tpXSwgR0ZQX0tFUk5FTCk7CisJCW9yID0gb3NkX3N0YXJ0X3JlcXVlc3QoZXhvZnNfaW9zX29kKGlvcywgZGV2KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICh1bmxpa2VseSghb3IpKSB7CiAJCQlFWE9GU19FUlIoIiVzOiBvc2Rfc3RhcnRfcmVxdWVzdCBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIG91dDsKIAkJfQotCQlpb3MtPnBlcl9kZXZbaV0ub3IgPSBvcjsKLQkJaW9zLT5udW1kZXZzKys7CisJCXBlcl9kZXYtPm9yID0gb3I7CisJCXBlcl9kZXYtPm9mZnNldCA9IG1hc3Rlcl9kZXYtPm9mZnNldDsKIAotCQlpZiAoaW9zLT5iaW8pIHsKKwkJaWYgKGlvcy0+cGFnZXMpIHsKIAkJCXN0cnVjdCBiaW8gKmJpbzsKIAotCQkJaWYgKGkgIT0gMCkgeworCQkJaWYgKHBlcl9kZXYgIT0gbWFzdGVyX2RldikgewogCQkJCWJpbyA9IGJpb19rbWFsbG9jKEdGUF9LRVJORUwsCi0JCQkJCQkgIGlvcy0+YmlvLT5iaV9tYXhfdmVjcyk7CisJCQkJCQkgIG1hc3Rlcl9kZXYtPmJpby0+YmlfbWF4X3ZlY3MpOwogCQkJCWlmICh1bmxpa2VseSghYmlvKSkgeworCQkJCQlFWE9GU19EQkdNU0coCisJCQkJCSAgICAgICJGYWlsZCB0byBhbGxvY2F0ZSBCSU8gc2l6ZT0ldVxuIiwKKwkJCQkJICAgICAgbWFzdGVyX2Rldi0+YmlvLT5iaV9tYXhfdmVjcyk7CiAJCQkJCXJldCA9IC1FTk9NRU07CiAJCQkJCWdvdG8gb3V0OwogCQkJCX0KIAotCQkJCV9fYmlvX2Nsb25lKGJpbywgaW9zLT5iaW8pOworCQkJCV9fYmlvX2Nsb25lKGJpbywgbWFzdGVyX2Rldi0+YmlvKTsKIAkJCQliaW8tPmJpX2JkZXYgPSBOVUxMOwogCQkJCWJpby0+YmlfbmV4dCA9IE5VTEw7Ci0JCQkJaW9zLT5wZXJfZGV2W2ldLmJpbyA9ICBiaW87CisJCQkJcGVyX2Rldi0+bGVuZ3RoID0gbWFzdGVyX2Rldi0+bGVuZ3RoOworCQkJCXBlcl9kZXYtPmJpbyA9ICBiaW87CisJCQkJcGVyX2Rldi0+ZGV2ID0gZGV2OwogCQkJfSBlbHNlIHsKLQkJCQliaW8gPSBpb3MtPmJpbzsKKwkJCQliaW8gPSBtYXN0ZXJfZGV2LT5iaW87CisJCQkJLyogRklYTUU6IGJpb19zZXRfZGlyKCkgKi8KKwkJCQliaW8tPmJpX3J3IHw9ICgxIDw8IEJJT19SVyk7CiAJCQl9CiAKLQkJCW9zZF9yZXFfd3JpdGUob3IsICZpb3MtPm9iaiwgaW9zLT5vZmZzZXQsIGJpbywKLQkJCQkgICAgICBpb3MtPmxlbmd0aCk7Ci0vKgkJCUVYT0ZTX0RCR01TRygid3JpdGUgc3luYz0lZFxuIiwgc3luYyk7Ki8KKwkJCW9zZF9yZXFfd3JpdGUob3IsICZpb3MtPm9iaiwgcGVyX2Rldi0+b2Zmc2V0LCBiaW8sCisJCQkJICAgICAgcGVyX2Rldi0+bGVuZ3RoKTsKKwkJCUVYT0ZTX0RCR01TRygid3JpdGUoMHglbGx4KSBvZmZzZXQ9MHglbGx4ICIKKwkJCQkgICAgICAibGVuZ3RoPTB4JWxseCBkZXY9JWRcbiIsCisJCQkJICAgICBfTExVKGlvcy0+b2JqLmlkKSwgX0xMVShwZXJfZGV2LT5vZmZzZXQpLAorCQkJCSAgICAgX0xMVShwZXJfZGV2LT5sZW5ndGgpLCBkZXYpOwogCQl9IGVsc2UgaWYgKGlvcy0+a2Vybl9idWZmKSB7Ci0JCQlvc2RfcmVxX3dyaXRlX2tlcm4ob3IsICZpb3MtPm9iaiwgaW9zLT5vZmZzZXQsCisJCQlyZXQgPSBvc2RfcmVxX3dyaXRlX2tlcm4ob3IsICZpb3MtPm9iaiwgcGVyX2Rldi0+b2Zmc2V0LAogCQkJCQkgICBpb3MtPmtlcm5fYnVmZiwgaW9zLT5sZW5ndGgpOwotLyoJCQlFWE9GU19EQkdNU0coIndyaXRlX2tlcm4gc3luYz0lZFxuIiwgc3luYyk7Ki8KKwkJCWlmICh1bmxpa2VseShyZXQpKQorCQkJCWdvdG8gb3V0OworCQkJRVhPRlNfREJHTVNHMigid3JpdGVfa2VybigweCVsbHgpIG9mZnNldD0weCVsbHggIgorCQkJCSAgICAgICJsZW5ndGg9MHglbGx4IGRldj0lZFxuIiwKKwkJCQkgICAgIF9MTFUoaW9zLT5vYmouaWQpLCBfTExVKHBlcl9kZXYtPm9mZnNldCksCisJCQkJICAgICBfTExVKGlvcy0+bGVuZ3RoKSwgZGV2KTsKIAkJfSBlbHNlIHsKIAkJCW9zZF9yZXFfc2V0X2F0dHJpYnV0ZXMob3IsICZpb3MtPm9iaik7Ci0vKgkJCUVYT0ZTX0RCR01TRygic2V0X2F0dHJpYnV0ZXMgc3luYz0lZFxuIiwgc3luYyk7Ki8KKwkJCUVYT0ZTX0RCR01TRzIoIm9iaigweCVsbHgpIHNldF9hdHRyaWJ1dGVzPSVkIGRldj0lZFxuIiwKKwkJCQkgICAgIF9MTFUoaW9zLT5vYmouaWQpLCBpb3MtPm91dF9hdHRyX2xlbiwgZGV2KTsKIAkJfQogCiAJCWlmIChpb3MtPm91dF9hdHRyKQpAQCAtMzA4LDU0ICs2MzAsOTMgQEAKIAkJCW9zZF9yZXFfYWRkX2dldF9hdHRyX2xpc3Qob3IsIGlvcy0+aW5fYXR0ciwKIAkJCQkJCSAgaW9zLT5pbl9hdHRyX2xlbik7CiAJfQotCXJldCA9IGV4b2ZzX2lvX2V4ZWN1dGUoaW9zKTsKIAogb3V0OgogCXJldHVybiByZXQ7CiB9CiAKK2ludCBleG9mc19zYmlfd3JpdGUoc3RydWN0IGV4b2ZzX2lvX3N0YXRlICppb3MpCit7CisJaW50IGk7CisJaW50IHJldDsKKworCXJldCA9IF9wcmVwYXJlX2Zvcl9zdHJpcGluZyhpb3MpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlyZXR1cm4gcmV0OworCisJZm9yIChpID0gMDsgaSA8IGlvcy0+bnVtZGV2czsgaSArPSBpb3MtPmxheW91dC0+bWlycm9yc19wMSkgeworCQlyZXQgPSBfc2JpX3dyaXRlX21pcnJvcihpb3MsIGkpOworCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gZXhvZnNfaW9fZXhlY3V0ZShpb3MpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX3NiaV9yZWFkX21pcnJvcihzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvcywgdW5zaWduZWQgY3VyX2NvbXApCit7CisJc3RydWN0IG9zZF9yZXF1ZXN0ICpvcjsKKwlzdHJ1Y3QgZXhvZnNfcGVyX2Rldl9zdGF0ZSAqcGVyX2RldiA9ICZpb3MtPnBlcl9kZXZbY3VyX2NvbXBdOworCXVuc2lnbmVkIGZpcnN0X2RldiA9ICh1bnNpZ25lZClpb3MtPm9iai5pZDsKKworCWlmIChpb3MtPnBhZ2VzICYmICFwZXJfZGV2LT5sZW5ndGgpCisJCXJldHVybiAwOyAvKiBKdXN0IGFuIGVtcHR5IHNsb3QgKi8KKworCWZpcnN0X2RldiA9IHBlcl9kZXYtPmRldiArIGZpcnN0X2RldiAlIGlvcy0+bGF5b3V0LT5taXJyb3JzX3AxOworCW9yID0gb3NkX3N0YXJ0X3JlcXVlc3QoZXhvZnNfaW9zX29kKGlvcywgZmlyc3RfZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFvcikpIHsKKwkJRVhPRlNfRVJSKCIlczogb3NkX3N0YXJ0X3JlcXVlc3QgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlwZXJfZGV2LT5vciA9IG9yOworCisJaWYgKGlvcy0+cGFnZXMpIHsKKwkJb3NkX3JlcV9yZWFkKG9yLCAmaW9zLT5vYmosIHBlcl9kZXYtPm9mZnNldCwKKwkJCQlwZXJfZGV2LT5iaW8sIHBlcl9kZXYtPmxlbmd0aCk7CisJCUVYT0ZTX0RCR01TRygicmVhZCgweCVsbHgpIG9mZnNldD0weCVsbHggbGVuZ3RoPTB4JWxseCIKKwkJCSAgICAgIiBkZXY9JWRcbiIsIF9MTFUoaW9zLT5vYmouaWQpLAorCQkJICAgICBfTExVKHBlcl9kZXYtPm9mZnNldCksIF9MTFUocGVyX2Rldi0+bGVuZ3RoKSwKKwkJCSAgICAgZmlyc3RfZGV2KTsKKwl9IGVsc2UgaWYgKGlvcy0+a2Vybl9idWZmKSB7CisJCWludCByZXQgPSBvc2RfcmVxX3JlYWRfa2VybihvciwgJmlvcy0+b2JqLCBwZXJfZGV2LT5vZmZzZXQsCisJCQkJCSAgICBpb3MtPmtlcm5fYnVmZiwgaW9zLT5sZW5ndGgpOworCQlFWE9GU19EQkdNU0cyKCJyZWFkX2tlcm4oMHglbGx4KSBvZmZzZXQ9MHglbGx4ICIKKwkJCSAgICAgICJsZW5ndGg9MHglbGx4IGRldj0lZCByZXQ9PiVkXG4iLAorCQkJICAgICAgX0xMVShpb3MtPm9iai5pZCksIF9MTFUocGVyX2Rldi0+b2Zmc2V0KSwKKwkJCSAgICAgIF9MTFUoaW9zLT5sZW5ndGgpLCBmaXJzdF9kZXYsIHJldCk7CisJCWlmICh1bmxpa2VseShyZXQpKQorCQkJcmV0dXJuIHJldDsKKwl9IGVsc2UgeworCQlvc2RfcmVxX2dldF9hdHRyaWJ1dGVzKG9yLCAmaW9zLT5vYmopOworCQlFWE9GU19EQkdNU0cyKCJvYmooMHglbGx4KSBnZXRfYXR0cmlidXRlcz0lZCBkZXY9JWRcbiIsCisJCQkgICAgICBfTExVKGlvcy0+b2JqLmlkKSwgaW9zLT5pbl9hdHRyX2xlbiwgZmlyc3RfZGV2KTsKKwl9CisJaWYgKGlvcy0+b3V0X2F0dHIpCisJCW9zZF9yZXFfYWRkX3NldF9hdHRyX2xpc3Qob3IsIGlvcy0+b3V0X2F0dHIsIGlvcy0+b3V0X2F0dHJfbGVuKTsKKworCWlmIChpb3MtPmluX2F0dHIpCisJCW9zZF9yZXFfYWRkX2dldF9hdHRyX2xpc3Qob3IsIGlvcy0+aW5fYXR0ciwgaW9zLT5pbl9hdHRyX2xlbik7CisKKwlyZXR1cm4gMDsKK30KKwogaW50IGV4b2ZzX3NiaV9yZWFkKHN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zKQogewotCWludCBpLCByZXQ7CisJaW50IGk7CisJaW50IHJldDsKIAotCWZvciAoaSA9IDA7IGkgPCAxOyBpKyspIHsKLQkJc3RydWN0IG9zZF9yZXF1ZXN0ICpvcjsKLQkJdW5zaWduZWQgZmlyc3RfZGV2ID0gKHVuc2lnbmVkKWlvcy0+b2JqLmlkOworCXJldCA9IF9wcmVwYXJlX2Zvcl9zdHJpcGluZyhpb3MpOworCWlmICh1bmxpa2VseShyZXQpKQorCQlyZXR1cm4gcmV0OwogCi0JCWZpcnN0X2RldiAlPSBpb3MtPnNiaS0+c19udW1kZXZzOwotCQlvciA9IG9zZF9zdGFydF9yZXF1ZXN0KGlvcy0+c2JpLT5zX29kc1tmaXJzdF9kZXZdLCBHRlBfS0VSTkVMKTsKLQkJaWYgKHVubGlrZWx5KCFvcikpIHsKLQkJCUVYT0ZTX0VSUigiJXM6IG9zZF9zdGFydF9yZXF1ZXN0IGZhaWxlZFxuIiwgX19mdW5jX18pOwotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWlvcy0+cGVyX2RldltpXS5vciA9IG9yOwotCQlpb3MtPm51bWRldnMrKzsKLQotCQlpZiAoaW9zLT5iaW8pIHsKLQkJCW9zZF9yZXFfcmVhZChvciwgJmlvcy0+b2JqLCBpb3MtPm9mZnNldCwgaW9zLT5iaW8sCi0JCQkJICAgICBpb3MtPmxlbmd0aCk7Ci0vKgkJCUVYT0ZTX0RCR01TRygicmVhZCBzeW5jPSVkXG4iLCBzeW5jKTsqLwotCQl9IGVsc2UgaWYgKGlvcy0+a2Vybl9idWZmKSB7Ci0JCQlvc2RfcmVxX3JlYWRfa2VybihvciwgJmlvcy0+b2JqLCBpb3MtPm9mZnNldCwKLQkJCQkJICAgaW9zLT5rZXJuX2J1ZmYsIGlvcy0+bGVuZ3RoKTsKLS8qCQkJRVhPRlNfREJHTVNHKCJyZWFkX2tlcm4gc3luYz0lZFxuIiwgc3luYyk7Ki8KLQkJfSBlbHNlIHsKLQkJCW9zZF9yZXFfZ2V0X2F0dHJpYnV0ZXMob3IsICZpb3MtPm9iaik7Ci0vKgkJCUVYT0ZTX0RCR01TRygiZ2V0X2F0dHJpYnV0ZXMgc3luYz0lZFxuIiwgc3luYyk7Ki8KLQkJfQotCi0JCWlmIChpb3MtPm91dF9hdHRyKQotCQkJb3NkX3JlcV9hZGRfc2V0X2F0dHJfbGlzdChvciwgaW9zLT5vdXRfYXR0ciwKLQkJCQkJCSAgaW9zLT5vdXRfYXR0cl9sZW4pOwotCi0JCWlmIChpb3MtPmluX2F0dHIpCi0JCQlvc2RfcmVxX2FkZF9nZXRfYXR0cl9saXN0KG9yLCBpb3MtPmluX2F0dHIsCi0JCQkJCQkgIGlvcy0+aW5fYXR0cl9sZW4pOworCWZvciAoaSA9IDA7IGkgPCBpb3MtPm51bWRldnM7IGkgKz0gaW9zLT5sYXlvdXQtPm1pcnJvcnNfcDEpIHsKKwkJcmV0ID0gX3NiaV9yZWFkX21pcnJvcihpb3MsIGkpOworCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCXJldHVybiByZXQ7CiAJfQotCXJldCA9IGV4b2ZzX2lvX2V4ZWN1dGUoaW9zKTsKIAotb3V0OgorCXJldCA9IGV4b2ZzX2lvX2V4ZWN1dGUoaW9zKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zODAsNDIgKzc0MSw4MiBAQAogCXJldHVybiAtRUlPOwogfQogCitzdGF0aWMgaW50IF90cnVuY2F0ZV9taXJyb3JzKHN0cnVjdCBleG9mc19pb19zdGF0ZSAqaW9zLCB1bnNpZ25lZCBjdXJfY29tcCwKKwkJCSAgICAgc3RydWN0IG9zZF9hdHRyICphdHRyKQoreworCWludCBsYXN0X2NvbXAgPSBjdXJfY29tcCArIGlvcy0+bGF5b3V0LT5taXJyb3JzX3AxOworCisJZm9yICg7IGN1cl9jb21wIDwgbGFzdF9jb21wOyArK2N1cl9jb21wKSB7CisJCXN0cnVjdCBleG9mc19wZXJfZGV2X3N0YXRlICpwZXJfZGV2ID0gJmlvcy0+cGVyX2RldltjdXJfY29tcF07CisJCXN0cnVjdCBvc2RfcmVxdWVzdCAqb3I7CisKKwkJb3IgPSBvc2Rfc3RhcnRfcmVxdWVzdChleG9mc19pb3Nfb2QoaW9zLCBjdXJfY29tcCksIEdGUF9LRVJORUwpOworCQlpZiAodW5saWtlbHkoIW9yKSkgeworCQkJRVhPRlNfRVJSKCIlczogb3NkX3N0YXJ0X3JlcXVlc3QgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQorCQlwZXJfZGV2LT5vciA9IG9yOworCisJCW9zZF9yZXFfc2V0X2F0dHJpYnV0ZXMob3IsICZpb3MtPm9iaik7CisJCW9zZF9yZXFfYWRkX3NldF9hdHRyX2xpc3Qob3IsIGF0dHIsIDEpOworCX0KKworCXJldHVybiAwOworfQorCiBpbnQgZXhvZnNfb2lfdHJ1bmNhdGUoc3RydWN0IGV4b2ZzX2lfaW5mbyAqb2ksIHU2NCBzaXplKQogewogCXN0cnVjdCBleG9mc19zYl9pbmZvICpzYmkgPSBvaS0+dmZzX2lub2RlLmlfc2ItPnNfZnNfaW5mbzsKIAlzdHJ1Y3QgZXhvZnNfaW9fc3RhdGUgKmlvczsKLQlzdHJ1Y3Qgb3NkX2F0dHIgYXR0cjsKLQlfX2JlNjQgbmV3c2l6ZTsKKwlzdHJ1Y3QgZXhvZnNfdHJ1bmNfYXR0ciB7CisJCXN0cnVjdCBvc2RfYXR0ciBhdHRyOworCQlfX2JlNjQgbmV3c2l6ZTsKKwl9ICpzaXplX2F0dHJzOworCXN0cnVjdCBfc3RyaXBpbmdfaW5mbyBzaTsKIAlpbnQgaSwgcmV0OwogCi0JaWYgKGV4b2ZzX2dldF9pb19zdGF0ZShzYmksICZpb3MpKQotCQlyZXR1cm4gLUVOT01FTTsKKwlyZXQgPSBleG9mc19nZXRfaW9fc3RhdGUoJnNiaS0+bGF5b3V0LCAmaW9zKTsKKwlpZiAodW5saWtlbHkocmV0KSkKKwkJcmV0dXJuIHJldDsKKworCXNpemVfYXR0cnMgPSBrY2FsbG9jKGlvcy0+bGF5b3V0LT5ncm91cF93aWR0aCwgc2l6ZW9mKCpzaXplX2F0dHJzKSwKKwkJCSAgICAgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFzaXplX2F0dHJzKSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CiAKIAlpb3MtPm9iai5pZCA9IGV4b2ZzX29pX29iam5vKG9pKTsKIAlpb3MtPmNyZWQgPSBvaS0+aV9jcmVkOwogCi0JbmV3c2l6ZSA9IGNwdV90b19iZTY0KHNpemUpOwotCWF0dHIgPSBnX2F0dHJfbG9naWNhbF9sZW5ndGg7Ci0JYXR0ci52YWxfcHRyID0gJm5ld3NpemU7CisJaW9zLT5udW1kZXZzID0gaW9zLT5sYXlvdXQtPnNfbnVtZGV2czsKKwlfY2FsY19zdHJpcGVfaW5mbyhpb3MsIHNpemUsICZzaSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2JpLT5zX251bWRldnM7IGkrKykgewotCQlzdHJ1Y3Qgb3NkX3JlcXVlc3QgKm9yOworCWZvciAoaSA9IDA7IGkgPCBpb3MtPmxheW91dC0+Z3JvdXBfd2lkdGg7ICsraSkgeworCQlzdHJ1Y3QgZXhvZnNfdHJ1bmNfYXR0ciAqc2l6ZV9hdHRyID0gJnNpemVfYXR0cnNbaV07CisJCXU2NCBvYmpfc2l6ZTsKIAotCQlvciA9IG9zZF9zdGFydF9yZXF1ZXN0KHNiaS0+c19vZHNbaV0sIEdGUF9LRVJORUwpOwotCQlpZiAodW5saWtlbHkoIW9yKSkgewotCQkJRVhPRlNfRVJSKCIlczogb3NkX3N0YXJ0X3JlcXVlc3QgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7Ci0JCQlyZXQgPSAtRU5PTUVNOworCQlpZiAoaSA8IHNpLmRldikKKwkJCW9ial9zaXplID0gc2kub2JqX29mZnNldCArCisJCQkJCWlvcy0+bGF5b3V0LT5zdHJpcGVfdW5pdCAtIHNpLnVuaXRfb2ZmOworCQllbHNlIGlmIChpID09IHNpLmRldikKKwkJCW9ial9zaXplID0gc2kub2JqX29mZnNldDsKKwkJZWxzZSAvKiBpID4gc2kuZGV2ICovCisJCQlvYmpfc2l6ZSA9IHNpLm9ial9vZmZzZXQgLSBzaS51bml0X29mZjsKKworCQlzaXplX2F0dHItPm5ld3NpemUgPSBjcHVfdG9fYmU2NChvYmpfc2l6ZSk7CisJCXNpemVfYXR0ci0+YXR0ciA9IGdfYXR0cl9sb2dpY2FsX2xlbmd0aDsKKwkJc2l6ZV9hdHRyLT5hdHRyLnZhbF9wdHIgPSAmc2l6ZV9hdHRyLT5uZXdzaXplOworCisJCXJldCA9IF90cnVuY2F0ZV9taXJyb3JzKGlvcywgaSAqIGlvcy0+bGF5b3V0LT5taXJyb3JzX3AxLAorCQkJCQkmc2l6ZV9hdHRyLT5hdHRyKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCiAJCQlnb3RvIG91dDsKLQkJfQotCQlpb3MtPnBlcl9kZXZbaV0ub3IgPSBvcjsKLQkJaW9zLT5udW1kZXZzKys7Ci0KLQkJb3NkX3JlcV9zZXRfYXR0cmlidXRlcyhvciwgJmlvcy0+b2JqKTsKLQkJb3NkX3JlcV9hZGRfc2V0X2F0dHJfbGlzdChvciwgJmF0dHIsIDEpOwogCX0KIAlyZXQgPSBleG9mc19pb19leGVjdXRlKGlvcyk7CiAKIG91dDoKKwlrZnJlZShzaXplX2F0dHJzKTsKIAlleG9mc19wdXRfaW9fc3RhdGUoaW9zKTsKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZnMvZXhvZnMvc3VwZXIuYyBiL2ZzL2V4b2ZzL3N1cGVyLmMKaW5kZXggYTFkMWU3Ny4uNmNmNWU0ZSAxMDA2NDQKLS0tIGEvZnMvZXhvZnMvc3VwZXIuYworKysgYi9mcy9leG9mcy9zdXBlci5jCkBAIC0yMTAsNyArMjEwLDcgQEAKIAlzYmkgPSBzYi0+c19mc19pbmZvOwogCWZzY2IgPSAmc2JpLT5zX2ZzY2I7CiAKLQlyZXQgPSBleG9mc19nZXRfaW9fc3RhdGUoc2JpLCAmaW9zKTsKKwlyZXQgPSBleG9mc19nZXRfaW9fc3RhdGUoJnNiaS0+bGF5b3V0LCAmaW9zKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dDsKIApAQCAtMjY0LDEyICsyNjQsMTIgQEAKIAogdm9pZCBleG9mc19mcmVlX3NiaShzdHJ1Y3QgZXhvZnNfc2JfaW5mbyAqc2JpKQogewotCXdoaWxlIChzYmktPnNfbnVtZGV2cykgewotCQlpbnQgaSA9IC0tc2JpLT5zX251bWRldnM7Ci0JCXN0cnVjdCBvc2RfZGV2ICpvZCA9IHNiaS0+c19vZHNbaV07CisJd2hpbGUgKHNiaS0+bGF5b3V0LnNfbnVtZGV2cykgeworCQlpbnQgaSA9IC0tc2JpLT5sYXlvdXQuc19udW1kZXZzOworCQlzdHJ1Y3Qgb3NkX2RldiAqb2QgPSBzYmktPmxheW91dC5zX29kc1tpXTsKIAogCQlpZiAob2QpIHsKLQkJCXNiaS0+c19vZHNbaV0gPSBOVUxMOworCQkJc2JpLT5sYXlvdXQuc19vZHNbaV0gPSBOVUxMOwogCQkJb3NkdWxkX3B1dF9kZXZpY2Uob2QpOwogCQl9CiAJfQpAQCAtMjk4LDcgKzI5OCw4IEBACiAJCQkJICBtc2Vjc190b19qaWZmaWVzKDEwMCkpOwogCX0KIAotCV9leG9mc19wcmludF9kZXZpY2UoIlVubW91bnRpbmciLCBOVUxMLCBzYmktPnNfb2RzWzBdLCBzYmktPnNfcGlkKTsKKwlfZXhvZnNfcHJpbnRfZGV2aWNlKCJVbm1vdW50aW5nIiwgTlVMTCwgc2JpLT5sYXlvdXQuc19vZHNbMF0sCisJCQkgICAgc2JpLT5sYXlvdXQuc19waWQpOwogCiAJZXhvZnNfZnJlZV9zYmkoc2JpKTsKIAlzYi0+c19mc19pbmZvID0gTlVMTDsKQEAgLTMwNyw2ICszMDgsOCBAQAogc3RhdGljIGludCBfcmVhZF9hbmRfbWF0Y2hfZGF0YV9tYXAoc3RydWN0IGV4b2ZzX3NiX2luZm8gKnNiaSwgdW5zaWduZWQgbnVtZGV2cywKIAkJCQkgICAgc3RydWN0IGV4b2ZzX2RldmljZV90YWJsZSAqZHQpCiB7CisJdTY0IHN0cmlwZV9sZW5ndGg7CisKIAlzYmktPmRhdGFfbWFwLm9kbV9udW1fY29tcHMgICA9CiAJCQkJbGUzMl90b19jcHUoZHQtPmR0X2RhdGFfbWFwLmNiX251bV9jb21wcyk7CiAJc2JpLT5kYXRhX21hcC5vZG1fc3RyaXBlX3VuaXQgPQpAQCAtMzIwLDE0ICszMjMsNjMgQEAKIAlzYmktPmRhdGFfbWFwLm9kbV9yYWlkX2FsZ29yaXRobSAgPQogCQkJCWxlMzJfdG9fY3B1KGR0LT5kdF9kYXRhX21hcC5jYl9yYWlkX2FsZ29yaXRobSk7CiAKLS8qIEZJWE1FOiBIYXJkIGNvZGVkIG1pcnJvciBvbmx5IGZvciBub3cuIGlmIG5vdCBzbyBkbyBub3QgbW91bnQgKi8KLQlpZiAoKHNiaS0+ZGF0YV9tYXAub2RtX251bV9jb21wcyAhPSBudW1kZXZzKSB8fAotCSAgICAoc2JpLT5kYXRhX21hcC5vZG1fc3RyaXBlX3VuaXQgIT0gRVhPRlNfQkxLU0laRSkgfHwKLQkgICAgKHNiaS0+ZGF0YV9tYXAub2RtX3JhaWRfYWxnb3JpdGhtICE9IFBORlNfT1NEX1JBSURfMCkgfHwKLQkgICAgKHNiaS0+ZGF0YV9tYXAub2RtX21pcnJvcl9jbnQgIT0gKG51bWRldnMgLSAxKSkpCisvKiBGSVhNRTogT25seSByYWlkMCBmb3Igbm93LiBpZiBub3Qgc28sIGRvIG5vdCBtb3VudCAqLworCWlmIChzYmktPmRhdGFfbWFwLm9kbV9udW1fY29tcHMgIT0gbnVtZGV2cykgeworCQlFWE9GU19FUlIoIm9kbV9udW1fY29tcHMoJXUpICE9IG51bWRldnMoJXUpXG4iLAorCQkJICBzYmktPmRhdGFfbWFwLm9kbV9udW1fY29tcHMsIG51bWRldnMpOwogCQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlCi0JCXJldHVybiAwOworCX0KKwlpZiAoc2JpLT5kYXRhX21hcC5vZG1fcmFpZF9hbGdvcml0aG0gIT0gUE5GU19PU0RfUkFJRF8wKSB7CisJCUVYT0ZTX0VSUigiT25seSBSQUlEXzAgZm9yIG5vd1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoMCAhPSAobnVtZGV2cyAlIChzYmktPmRhdGFfbWFwLm9kbV9taXJyb3JfY250ICsgMSkpKSB7CisJCUVYT0ZTX0VSUigiRGF0YSBNYXAgd3JvbmcsIG51bWRldnM9JWQgbWlycm9ycz0lZFxuIiwKKwkJCSAgbnVtZGV2cywgc2JpLT5kYXRhX21hcC5vZG1fbWlycm9yX2NudCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICgwICE9IChzYmktPmRhdGFfbWFwLm9kbV9zdHJpcGVfdW5pdCAmIH5QQUdFX01BU0spKSB7CisJCUVYT0ZTX0VSUigiU3RyaXBlIFVuaXQoMHglbGx4KSIKKwkJCSAgIiBtdXN0IGJlIE11bHRwbGVzIG9mIFBBR0VfU0laRSgweCVseClcbiIsCisJCQkgIF9MTFUoc2JpLT5kYXRhX21hcC5vZG1fc3RyaXBlX3VuaXQpLCBQQUdFX1NJWkUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzYmktPmxheW91dC5zdHJpcGVfdW5pdCA9IHNiaS0+ZGF0YV9tYXAub2RtX3N0cmlwZV91bml0OworCXNiaS0+bGF5b3V0Lm1pcnJvcnNfcDEgPSBzYmktPmRhdGFfbWFwLm9kbV9taXJyb3JfY250ICsgMTsKKworCWlmIChzYmktPmRhdGFfbWFwLm9kbV9ncm91cF93aWR0aCkgeworCQlzYmktPmxheW91dC5ncm91cF93aWR0aCA9IHNiaS0+ZGF0YV9tYXAub2RtX2dyb3VwX3dpZHRoOworCQlzYmktPmxheW91dC5ncm91cF9kZXB0aCA9IHNiaS0+ZGF0YV9tYXAub2RtX2dyb3VwX2RlcHRoOworCQlpZiAoIXNiaS0+bGF5b3V0Lmdyb3VwX2RlcHRoKSB7CisJCQlFWE9GU19FUlIoImdyb3VwX2RlcHRoID09IDAgJiYgZ3JvdXBfd2lkdGggIT0gMFxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQlzYmktPmxheW91dC5ncm91cF9jb3VudCA9IHNiaS0+ZGF0YV9tYXAub2RtX251bV9jb21wcyAvCisJCQkJCQlzYmktPmxheW91dC5taXJyb3JzX3AxIC8KKwkJCQkJCXNiaS0+ZGF0YV9tYXAub2RtX2dyb3VwX3dpZHRoOworCX0gZWxzZSB7CisJCWlmIChzYmktPmRhdGFfbWFwLm9kbV9ncm91cF9kZXB0aCkgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJXYXJuaW5nOiBncm91cF9kZXB0aCBpZ25vcmVkICIKKwkJCQkiZ3JvdXBfd2lkdGggPT0gMCAmJiBncm91cF9kZXB0aCA9PSAlZFxuIiwKKwkJCQlzYmktPmRhdGFfbWFwLm9kbV9ncm91cF9kZXB0aCk7CisJCQlzYmktPmRhdGFfbWFwLm9kbV9ncm91cF9kZXB0aCA9IDA7CisJCX0KKwkJc2JpLT5sYXlvdXQuZ3JvdXBfd2lkdGggPSBzYmktPmRhdGFfbWFwLm9kbV9udW1fY29tcHMgLworCQkJCQkJCXNiaS0+bGF5b3V0Lm1pcnJvcnNfcDE7CisJCXNiaS0+bGF5b3V0Lmdyb3VwX2RlcHRoID0gLTE7CisJCXNiaS0+bGF5b3V0Lmdyb3VwX2NvdW50ID0gMTsKKwl9CisKKwlzdHJpcGVfbGVuZ3RoID0gKHU2NClzYmktPmxheW91dC5ncm91cF93aWR0aCAqIHNiaS0+bGF5b3V0LnN0cmlwZV91bml0OworCWlmIChzdHJpcGVfbGVuZ3RoID49ICgxVUxMIDw8IDMyKSkgeworCQlFWE9GU19FUlIoIlRvdGFsIFN0cmlwZSBsZW5ndGgoMHglbGx4KSIKKwkJCSAgIiA+PSAzMmJpdCBpcyBub3Qgc3VwcG9ydGVkXG4iLCBfTExVKHN0cmlwZV9sZW5ndGgpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7CiB9CiAKIC8qIEBvZGkgaXMgdmFsaWQgb25seSBhcyBsb25nIGFzIEBmc2NiX2RldiBpcyB2YWxpZCAqLwpAQCAtMzYxLDcgKzQxMyw3IEBACiB7CiAJc3RydWN0IGV4b2ZzX3NiX2luZm8gKnNiaSA9ICpwc2JpOwogCXN0cnVjdCBvc2RfZGV2ICpmc2NiX29kOwotCXN0cnVjdCBvc2Rfb2JqX2lkIG9iaiA9IHsucGFydGl0aW9uID0gc2JpLT5zX3BpZCwKKwlzdHJ1Y3Qgb3NkX29ial9pZCBvYmogPSB7LnBhcnRpdGlvbiA9IHNiaS0+bGF5b3V0LnNfcGlkLAogCQkJCSAuaWQgPSBFWE9GU19ERVZUQUJMRV9JRH07CiAJc3RydWN0IGV4b2ZzX2RldmljZV90YWJsZSAqZHQ7CiAJdW5zaWduZWQgdGFibGVfYnl0ZXMgPSB0YWJsZV9jb3VudCAqIHNpemVvZihkdC0+ZHRfZGV2X3RhYmxlWzBdKSArCkBAIC0zNzYsOSArNDI4LDkgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JZnNjYl9vZCA9IHNiaS0+c19vZHNbMF07Ci0Jc2JpLT5zX29kc1swXSA9IE5VTEw7Ci0Jc2JpLT5zX251bWRldnMgPSAwOworCWZzY2Jfb2QgPSBzYmktPmxheW91dC5zX29kc1swXTsKKwlzYmktPmxheW91dC5zX29kc1swXSA9IE5VTEw7CisJc2JpLT5sYXlvdXQuc19udW1kZXZzID0gMDsKIAlyZXQgPSBleG9mc19yZWFkX2tlcm4oZnNjYl9vZCwgc2JpLT5zX2NyZWQsICZvYmosIDAsIGR0LCB0YWJsZV9ieXRlcyk7CiAJaWYgKHVubGlrZWx5KHJldCkpIHsKIAkJRVhPRlNfRVJSKCJFUlJPUjogcmVhZGluZyBkZXZpY2UgdGFibGVcbiIpOwpAQCAtMzk3LDE0ICs0NDksMTUgQEAKIAkJZ290byBvdXQ7CiAKIAlpZiAobGlrZWx5KG51bWRldnMgPiAxKSkgewotCQl1bnNpZ25lZCBzaXplID0gbnVtZGV2cyAqIHNpemVvZihzYmktPnNfb2RzWzBdKTsKKwkJdW5zaWduZWQgc2l6ZSA9IG51bWRldnMgKiBzaXplb2Yoc2JpLT5sYXlvdXQuc19vZHNbMF0pOwogCiAJCXNiaSA9IGtyZWFsbG9jKHNiaSwgc2l6ZW9mKCpzYmkpICsgc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICh1bmxpa2VseSghc2JpKSkgewogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCW1lbXNldCgmc2JpLT5zX29kc1sxXSwgMCwgc2l6ZSAtIHNpemVvZihzYmktPnNfb2RzWzBdKSk7CisJCW1lbXNldCgmc2JpLT5sYXlvdXQuc19vZHNbMV0sIDAsCisJCSAgICAgICBzaXplIC0gc2l6ZW9mKHNiaS0+bGF5b3V0LnNfb2RzWzBdKSk7CiAJCSpwc2JpID0gc2JpOwogCX0KIApAQCAtNDI3LDggKzQ4MCw4IEBACiAJCSAqIGxpbmUuIFdlIGFsd2F5cyBrZWVwIHRoZW0gaW4gZGV2aWNlLXRhYmxlIG9yZGVyLgogCQkgKi8KIAkJaWYgKGZzY2Jfb2QgJiYgb3NkdWxkX2RldmljZV9zYW1lKGZzY2Jfb2QsICZvZGkpKSB7Ci0JCQlzYmktPnNfb2RzW2ldID0gZnNjYl9vZDsKLQkJCSsrc2JpLT5zX251bWRldnM7CisJCQlzYmktPmxheW91dC5zX29kc1tpXSA9IGZzY2Jfb2Q7CisJCQkrK3NiaS0+bGF5b3V0LnNfbnVtZGV2czsKIAkJCWZzY2Jfb2QgPSBOVUxMOwogCQkJY29udGludWU7CiAJCX0KQEAgLTQ0MSw4ICs0OTQsOCBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlzYmktPnNfb2RzW2ldID0gb2Q7Ci0JCSsrc2JpLT5zX251bWRldnM7CisJCXNiaS0+bGF5b3V0LnNfb2RzW2ldID0gb2Q7CisJCSsrc2JpLT5sYXlvdXQuc19udW1kZXZzOwogCiAJCS8qIFJlYWQgdGhlIGZzY2Igb2YgdGhlIG90aGVyIGRldmljZXMgdG8gbWFrZSBzdXJlIHRoZSBGUwogCQkgKiBwYXJ0aXRpb24gaXMgdGhlcmUuCkBAIC00OTksOSArNTUyLDE1IEBACiAJCWdvdG8gZnJlZV9zYmk7CiAJfQogCi0Jc2JpLT5zX29kc1swXSA9IG9kOwotCXNiaS0+c19udW1kZXZzID0gMTsKLQlzYmktPnNfcGlkID0gb3B0cy0+cGlkOworCS8qIERlZmF1bHQgbGF5b3V0IGluIGNhc2Ugd2UgZG8gbm90IGhhdmUgYSBkZXZpY2UtdGFibGUgKi8KKwlzYmktPmxheW91dC5zdHJpcGVfdW5pdCA9IFBBR0VfU0laRTsKKwlzYmktPmxheW91dC5taXJyb3JzX3AxID0gMTsKKwlzYmktPmxheW91dC5ncm91cF93aWR0aCA9IDE7CisJc2JpLT5sYXlvdXQuZ3JvdXBfZGVwdGggPSAtMTsKKwlzYmktPmxheW91dC5ncm91cF9jb3VudCA9IDE7CisJc2JpLT5sYXlvdXQuc19vZHNbMF0gPSBvZDsKKwlzYmktPmxheW91dC5zX251bWRldnMgPSAxOworCXNiaS0+bGF5b3V0LnNfcGlkID0gb3B0cy0+cGlkOwogCXNiaS0+c190aW1lb3V0ID0gb3B0cy0+dGltZW91dDsKIAogCS8qIGZpbGwgaW4gc29tZSBvdGhlciBkYXRhIGJ5IGhhbmQgKi8KQEAgLTUxNCw3ICs1NzMsNyBAQAogCXNiLT5zX2JkZXYgPSBOVUxMOwogCXNiLT5zX2RldiA9IDA7CiAKLQlvYmoucGFydGl0aW9uID0gc2JpLT5zX3BpZDsKKwlvYmoucGFydGl0aW9uID0gc2JpLT5sYXlvdXQuc19waWQ7CiAJb2JqLmlkID0gRVhPRlNfU1VQRVJfSUQ7CiAJZXhvZnNfbWFrZV9jcmVkZW50aWFsKHNiaS0+c19jcmVkLCAmb2JqKTsKIApAQCAtNTc4LDEzICs2MzcsMTMgQEAKIAkJZ290byBmcmVlX3NiaTsKIAl9CiAKLQlfZXhvZnNfcHJpbnRfZGV2aWNlKCJNb3VudGluZyIsIG9wdHMtPmRldl9uYW1lLCBzYmktPnNfb2RzWzBdLAotCQkJICAgIHNiaS0+c19waWQpOworCV9leG9mc19wcmludF9kZXZpY2UoIk1vdW50aW5nIiwgb3B0cy0+ZGV2X25hbWUsIHNiaS0+bGF5b3V0LnNfb2RzWzBdLAorCQkJICAgIHNiaS0+bGF5b3V0LnNfcGlkKTsKIAlyZXR1cm4gMDsKIAogZnJlZV9zYmk6CiAJRVhPRlNfRVJSKCJVbmFibGUgdG8gbW91bnQgZXhvZnMgb24gJXMgcGlkPTB4JWxseCBlcnI9JWRcbiIsCi0JCSAgb3B0cy0+ZGV2X25hbWUsIHNiaS0+c19waWQsIHJldCk7CisJCSAgb3B0cy0+ZGV2X25hbWUsIHNiaS0+bGF5b3V0LnNfcGlkLCByZXQpOwogCWV4b2ZzX2ZyZWVfc2JpKHNiaSk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTYyNyw3ICs2ODYsNyBAQAogCXVpbnQ4X3QgY3JlZF9hW09TRF9DQVBfTEVOXTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gZXhvZnNfZ2V0X2lvX3N0YXRlKHNiaSwgJmlvcyk7CisJcmV0ID0gZXhvZnNfZ2V0X2lvX3N0YXRlKCZzYmktPmxheW91dCwgJmlvcyk7CiAJaWYgKHJldCkgewogCQlFWE9GU19EQkdNU0coImV4b2ZzX2dldF9pb19zdGF0ZSBmYWlsZWQuXG4iKTsKIAkJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvYmFsbG9jLmMgYi9mcy9leHQyL2JhbGxvYy5jCmluZGV4IDdmOGQyZTUuLjFkMDgxZjAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvYmFsbG9jLmMKKysrIGIvZnMvZXh0Mi9iYWxsb2MuYwpAQCAtNTcwLDcgKzU3MCw3IEBACiBlcnJvcl9yZXR1cm46CiAJYnJlbHNlKGJpdG1hcF9iaCk7CiAJcmVsZWFzZV9ibG9ja3Moc2IsIGZyZWVkKTsKLQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgZnJlZWQpOworCWRxdW90X2ZyZWVfYmxvY2soaW5vZGUsIGZyZWVkKTsKIH0KIAogLyoqCkBAIC0xMjM2LDYgKzEyMzYsNyBAQAogCXVuc2lnbmVkIHNob3J0IHdpbmRvd3N6ID0gMDsKIAl1bnNpZ25lZCBsb25nIG5ncm91cHM7CiAJdW5zaWduZWQgbG9uZyBudW0gPSAqY291bnQ7CisJaW50IHJldDsKIAogCSplcnJwID0gLUVOT1NQQzsKIAlzYiA9IGlub2RlLT5pX3NiOwpAQCAtMTI0Nyw4ICsxMjQ4LDkgQEAKIAkvKgogCSAqIENoZWNrIHF1b3RhIGZvciBhbGxvY2F0aW9uIG9mIHRoaXMgYmxvY2suCiAJICovCi0JaWYgKHZmc19kcV9hbGxvY19ibG9jayhpbm9kZSwgbnVtKSkgewotCQkqZXJycCA9IC1FRFFVT1Q7CisJcmV0ID0gZHF1b3RfYWxsb2NfYmxvY2soaW5vZGUsIG51bSk7CisJaWYgKHJldCkgeworCQkqZXJycCA9IHJldDsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNDA5LDcgKzE0MTEsNyBAQAogCiAJKmVycnAgPSAwOwogCWJyZWxzZShiaXRtYXBfYmgpOwotCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCAqY291bnQtbnVtKTsKKwlkcXVvdF9mcmVlX2Jsb2NrKGlub2RlLCAqY291bnQtbnVtKTsKIAkqY291bnQgPSBudW07CiAJcmV0dXJuIHJldF9ibG9jazsKIApAQCAtMTQyMCw3ICsxNDIyLDcgQEAKIAkgKiBVbmRvIHRoZSBibG9jayBhbGxvY2F0aW9uCiAJICovCiAJaWYgKCFwZXJmb3JtZWRfYWxsb2NhdGlvbikKLQkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsICpjb3VudCk7CisJCWRxdW90X2ZyZWVfYmxvY2soaW5vZGUsICpjb3VudCk7CiAJYnJlbHNlKGJpdG1hcF9iaCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9leHQyL2V4dDIuaCBiL2ZzL2V4dDIvZXh0Mi5oCmluZGV4IDA2MTkxNGEuLjBiMDM4ZTQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvZXh0Mi5oCisrKyBiL2ZzL2V4dDIvZXh0Mi5oCkBAIC0xMTgsNyArMTE4LDcgQEAKIAogLyogaW5vZGUuYyAqLwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqZXh0Ml9pZ2V0IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gaW50IGV4dDJfd3JpdGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOworZXh0ZXJuIGludCBleHQyX3dyaXRlX2lub2RlIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopOwogZXh0ZXJuIHZvaWQgZXh0Ml9kZWxldGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBpbnQgZXh0Ml9zeW5jX2lub2RlIChzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gaW50IGV4dDJfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCwgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7CmRpZmYgLS1naXQgYS9mcy9leHQyL2ZpbGUuYyBiL2ZzL2V4dDIvZmlsZS5jCmluZGV4IDU4NmUzNTguLjVkMTk4ZDAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvZmlsZS5jCisrKyBiL2ZzL2V4dDIvZmlsZS5jCkBAIC0yMCw2ICsyMCw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAjaW5jbHVkZSAiZXh0Mi5oIgogI2luY2x1ZGUgInhhdHRyLmgiCiAjaW5jbHVkZSAiYWNsLmgiCkBAIC03MCw3ICs3MSw3IEBACiAJLmNvbXBhdF9pb2N0bAk9IGV4dDJfY29tcGF0X2lvY3RsLAogI2VuZGlmCiAJLm1tYXAJCT0gZ2VuZXJpY19maWxlX21tYXAsCi0JLm9wZW4JCT0gZ2VuZXJpY19maWxlX29wZW4sCisJLm9wZW4JCT0gZHF1b3RfZmlsZV9vcGVuLAogCS5yZWxlYXNlCT0gZXh0Ml9yZWxlYXNlX2ZpbGUsCiAJLmZzeW5jCQk9IGV4dDJfZnN5bmMsCiAJLnNwbGljZV9yZWFkCT0gZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkLApAQCAtODcsNyArODgsNyBAQAogCS5jb21wYXRfaW9jdGwJPSBleHQyX2NvbXBhdF9pb2N0bCwKICNlbmRpZgogCS5tbWFwCQk9IHhpcF9maWxlX21tYXAsCi0JLm9wZW4JCT0gZ2VuZXJpY19maWxlX29wZW4sCisJLm9wZW4JCT0gZHF1b3RfZmlsZV9vcGVuLAogCS5yZWxlYXNlCT0gZXh0Ml9yZWxlYXNlX2ZpbGUsCiAJLmZzeW5jCQk9IGV4dDJfZnN5bmMsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9pYWxsb2MuYyBiL2ZzL2V4dDIvaWFsbG9jLmMKaW5kZXggMTUzODdjOS4uYWQ3ZDU3MiAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9pYWxsb2MuYworKysgYi9mcy9leHQyL2lhbGxvYy5jCkBAIC0xMjEsOCArMTIxLDggQEAKIAlpZiAoIWlzX2JhZF9pbm9kZShpbm9kZSkpIHsKIAkJLyogUXVvdGEgaXMgYWxyZWFkeSBpbml0aWFsaXplZCBpbiBpcHV0KCkgKi8KIAkJZXh0Ml94YXR0cl9kZWxldGVfaW5vZGUoaW5vZGUpOwotCQl2ZnNfZHFfZnJlZV9pbm9kZShpbm9kZSk7Ci0JCXZmc19kcV9kcm9wKGlub2RlKTsKKwkJZHF1b3RfZnJlZV9pbm9kZShpbm9kZSk7CisJCWRxdW90X2Ryb3AoaW5vZGUpOwogCX0KIAogCWVzID0gRVhUMl9TQihzYiktPnNfZXM7CkBAIC01ODYsMTAgKzU4NiwxMCBAQAogCQlnb3RvIGZhaWxfZHJvcDsKIAl9CiAKLQlpZiAodmZzX2RxX2FsbG9jX2lub2RlKGlub2RlKSkgewotCQllcnIgPSAtRURRVU9UOworCWRxdW90X2luaXRpYWxpemUoaW5vZGUpOworCWVyciA9IGRxdW90X2FsbG9jX2lub2RlKGlub2RlKTsKKwlpZiAoZXJyKQogCQlnb3RvIGZhaWxfZHJvcDsKLQl9CiAKIAllcnIgPSBleHQyX2luaXRfYWNsKGlub2RlLCBkaXIpOwogCWlmIChlcnIpCkBAIC02MDUsMTAgKzYwNSwxMCBAQAogCXJldHVybiBpbm9kZTsKIAogZmFpbF9mcmVlX2Ryb3A6Ci0JdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpOworCWRxdW90X2ZyZWVfaW5vZGUoaW5vZGUpOwogCiBmYWlsX2Ryb3A6Ci0JdmZzX2RxX2Ryb3AoaW5vZGUpOworCWRxdW90X2Ryb3AoaW5vZGUpOwogCWlub2RlLT5pX2ZsYWdzIHw9IFNfTk9RVU9UQTsKIAlpbm9kZS0+aV9ubGluayA9IDA7CiAJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9leHQyL2lub2RlLmMgYi9mcy9leHQyL2lub2RlLmMKaW5kZXggNzFiMDMyYy4uZmMxM2NjMSAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9pbm9kZS5jCisrKyBiL2ZzL2V4dDIvaW5vZGUuYwpAQCAtNDEsNiArNDEsOCBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTZWNvbmQgRXh0ZW5kZWQgRmlsZXN5c3RlbSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCitzdGF0aWMgaW50IF9fZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYyk7CisKIC8qCiAgKiBUZXN0IHdoZXRoZXIgYW4gaW5vZGUgaXMgYSBmYXN0IHN5bWxpbmsuCiAgKi8KQEAgLTU4LDEzICs2MCwxNSBAQAogICovCiB2b2lkIGV4dDJfZGVsZXRlX2lub2RlIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIHsKKwlpZiAoIWlzX2JhZF9pbm9kZShpbm9kZSkpCisJCWRxdW90X2luaXRpYWxpemUoaW5vZGUpOwogCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKIAogCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKQogCQlnb3RvIG5vX2RlbGV0ZTsKIAlFWFQyX0koaW5vZGUpLT5pX2R0aW1lCT0gZ2V0X3NlY29uZHMoKTsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQlleHQyX3dyaXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7CisJX19leHQyX3dyaXRlX2lub2RlKGlub2RlLCBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSk7CiAKIAlpbm9kZS0+aV9zaXplID0gMDsKIAlpZiAoaW5vZGUtPmlfYmxvY2tzKQpAQCAtMTMzNSw3ICsxMzM5LDcgQEAKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCi1pbnQgZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZG9fc3luYykKK3N0YXRpYyBpbnQgX19leHQyX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKQogewogCXN0cnVjdCBleHQyX2lub2RlX2luZm8gKmVpID0gRVhUMl9JKGlub2RlKTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CkBAIC0xNDQwLDYgKzE0NDQsMTEgQEAKIAlyZXR1cm4gZXJyOwogfQogCitpbnQgZXh0Ml93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKK3sKKwlyZXR1cm4gX19leHQyX3dyaXRlX2lub2RlKGlub2RlLCB3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7Cit9CisKIGludCBleHQyX3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0gewpAQCAtMTQ1Nyw5ICsxNDY2LDEyIEBACiAJZXJyb3IgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUsIGlhdHRyKTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKKworCWlmIChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpCisJCWRxdW90X2luaXRpYWxpemUoaW5vZGUpOwogCWlmICgoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9VSUQgJiYgaWF0dHItPmlhX3VpZCAhPSBpbm9kZS0+aV91aWQpIHx8CiAJICAgIChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0dJRCAmJiBpYXR0ci0+aWFfZ2lkICE9IGlub2RlLT5pX2dpZCkpIHsKLQkJZXJyb3IgPSB2ZnNfZHFfdHJhbnNmZXIoaW5vZGUsIGlhdHRyKSA/IC1FRFFVT1QgOiAwOworCQllcnJvciA9IGRxdW90X3RyYW5zZmVyKGlub2RlLCBpYXR0cik7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKIAl9CmRpZmYgLS1naXQgYS9mcy9leHQyL25hbWVpLmMgYi9mcy9leHQyL25hbWVpLmMKaW5kZXggZGQ3MTc1Yy4uNzFlZmIwZSAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9uYW1laS5jCisrKyBiL2ZzL2V4dDIvbmFtZWkuYwpAQCAtMzEsNiArMzEsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KICNpbmNsdWRlICJleHQyLmgiCiAjaW5jbHVkZSAieGF0dHIuaCIKICNpbmNsdWRlICJhY2wuaCIKQEAgLTk5LDI0ICsxMDAsMjcgQEAKICAqLwogc3RhdGljIGludCBleHQyX2NyZWF0ZSAoc3RydWN0IGlub2RlICogZGlyLCBzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBpbnQgbW9kZSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0Jc3RydWN0IGlub2RlICogaW5vZGUgPSBleHQyX25ld19pbm9kZSAoZGlyLCBtb2RlKTsKLQlpbnQgZXJyID0gUFRSX0VSUihpbm9kZSk7Ci0JaWYgKCFJU19FUlIoaW5vZGUpKSB7Ci0JCWlub2RlLT5pX29wID0gJmV4dDJfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwotCQlpZiAoZXh0Ml91c2VfeGlwKGlub2RlLT5pX3NiKSkgewotCQkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmZXh0Ml9hb3BzX3hpcDsKLQkJCWlub2RlLT5pX2ZvcCA9ICZleHQyX3hpcF9maWxlX29wZXJhdGlvbnM7Ci0JCX0gZWxzZSBpZiAodGVzdF9vcHQoaW5vZGUtPmlfc2IsIE5PQkgpKSB7Ci0JCQlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZleHQyX25vYmhfYW9wczsKLQkJCWlub2RlLT5pX2ZvcCA9ICZleHQyX2ZpbGVfb3BlcmF0aW9uczsKLQkJfSBlbHNlIHsKLQkJCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmV4dDJfYW9wczsKLQkJCWlub2RlLT5pX2ZvcCA9ICZleHQyX2ZpbGVfb3BlcmF0aW9uczsKLQkJfQotCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQkJZXJyID0gZXh0Ml9hZGRfbm9uZGlyKGRlbnRyeSwgaW5vZGUpOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CisKKwlpbm9kZSA9IGV4dDJfbmV3X2lub2RlKGRpciwgbW9kZSk7CisJaWYgKElTX0VSUihpbm9kZSkpCisJCXJldHVybiBQVFJfRVJSKGlub2RlKTsKKworCWlub2RlLT5pX29wID0gJmV4dDJfZmlsZV9pbm9kZV9vcGVyYXRpb25zOworCWlmIChleHQyX3VzZV94aXAoaW5vZGUtPmlfc2IpKSB7CisJCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmV4dDJfYW9wc194aXA7CisJCWlub2RlLT5pX2ZvcCA9ICZleHQyX3hpcF9maWxlX29wZXJhdGlvbnM7CisJfSBlbHNlIGlmICh0ZXN0X29wdChpbm9kZS0+aV9zYiwgTk9CSCkpIHsKKwkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmZXh0Ml9ub2JoX2FvcHM7CisJCWlub2RlLT5pX2ZvcCA9ICZleHQyX2ZpbGVfb3BlcmF0aW9uczsKKwl9IGVsc2UgeworCQlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZleHQyX2FvcHM7CisJCWlub2RlLT5pX2ZvcCA9ICZleHQyX2ZpbGVfb3BlcmF0aW9uczsKIAl9Ci0JcmV0dXJuIGVycjsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwlyZXR1cm4gZXh0Ml9hZGRfbm9uZGlyKGRlbnRyeSwgaW5vZGUpOwogfQogCiBzdGF0aWMgaW50IGV4dDJfbWtub2QgKHN0cnVjdCBpbm9kZSAqIGRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwgZGV2X3QgcmRldikKQEAgLTEyNyw2ICsxMzEsOCBAQAogCWlmICghbmV3X3ZhbGlkX2RldihyZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CisKIAlpbm9kZSA9IGV4dDJfbmV3X2lub2RlIChkaXIsIG1vZGUpOwogCWVyciA9IFBUUl9FUlIoaW5vZGUpOwogCWlmICghSVNfRVJSKGlub2RlKSkgewpAQCAtMTUxLDYgKzE1Nyw4IEBACiAJaWYgKGwgPiBzYi0+c19ibG9ja3NpemUpCiAJCWdvdG8gb3V0OwogCisJZHF1b3RfaW5pdGlhbGl6ZShkaXIpOworCiAJaW5vZGUgPSBleHQyX25ld19pbm9kZSAoZGlyLCBTX0lGTE5LIHwgU19JUldYVUdPKTsKIAllcnIgPSBQVFJfRVJSKGlub2RlKTsKIAlpZiAoSVNfRVJSKGlub2RlKSkKQEAgLTE5NCw2ICsyMDIsOCBAQAogCWlmIChpbm9kZS0+aV9ubGluayA+PSBFWFQyX0xJTktfTUFYKQogCQlyZXR1cm4gLUVNTElOSzsKIAorCWRxdW90X2luaXRpYWxpemUoZGlyKTsKKwogCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAlpbm9kZV9pbmNfbGlua19jb3VudChpbm9kZSk7CiAJYXRvbWljX2luYygmaW5vZGUtPmlfY291bnQpOwpAQCAtMjE2LDYgKzIyNiw4IEBACiAJaWYgKGRpci0+aV9ubGluayA+PSBFWFQyX0xJTktfTUFYKQogCQlnb3RvIG91dDsKIAorCWRxdW90X2luaXRpYWxpemUoZGlyKTsKKwogCWlub2RlX2luY19saW5rX2NvdW50KGRpcik7CiAKIAlpbm9kZSA9IGV4dDJfbmV3X2lub2RlIChkaXIsIFNfSUZESVIgfCBtb2RlKTsKQEAgLTI2Miw2ICsyNzQsOCBAQAogCXN0cnVjdCBwYWdlICogcGFnZTsKIAlpbnQgZXJyID0gLUVOT0VOVDsKIAorCWRxdW90X2luaXRpYWxpemUoZGlyKTsKKwogCWRlID0gZXh0Ml9maW5kX2VudHJ5IChkaXIsICZkZW50cnktPmRfbmFtZSwgJnBhZ2UpOwogCWlmICghZGUpCiAJCWdvdG8gb3V0OwpAQCAtMzA0LDYgKzMxOCw5IEBACiAJc3RydWN0IGV4dDJfZGlyX2VudHJ5XzIgKiBvbGRfZGU7CiAJaW50IGVyciA9IC1FTk9FTlQ7CiAKKwlkcXVvdF9pbml0aWFsaXplKG9sZF9kaXIpOworCWRxdW90X2luaXRpYWxpemUobmV3X2Rpcik7CisKIAlvbGRfZGUgPSBleHQyX2ZpbmRfZW50cnkgKG9sZF9kaXIsICZvbGRfZGVudHJ5LT5kX25hbWUsICZvbGRfcGFnZSk7CiAJaWYgKCFvbGRfZGUpCiAJCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9zdXBlci5jIGIvZnMvZXh0Mi9zdXBlci5jCmluZGV4IGY5Y2I1NGEuLjQyZTRhMzAgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvc3VwZXIuYworKysgYi9mcy9leHQyL3N1cGVyLmMKQEAgLTE5NCw2ICsxOTQsOCBAQAogc3RhdGljIHZvaWQgZXh0Ml9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBleHQyX2Jsb2NrX2FsbG9jX2luZm8gKnJzdiA9IEVYVDJfSShpbm9kZSktPmlfYmxvY2tfYWxsb2NfaW5mbzsKKworCWRxdW90X2Ryb3AoaW5vZGUpOwogCWV4dDJfZGlzY2FyZF9yZXNlcnZhdGlvbihpbm9kZSk7CiAJRVhUMl9JKGlub2RlKS0+aV9ibG9ja19hbGxvY19pbmZvID0gTlVMTDsKIAlpZiAodW5saWtlbHkocnN2KSkKZGlmZiAtLWdpdCBhL2ZzL2V4dDIveGF0dHIuYyBiL2ZzL2V4dDIveGF0dHIuYwppbmRleCA5MDRmMDA2Li5lNDRkYzkyIDEwMDY0NAotLS0gYS9mcy9leHQyL3hhdHRyLmMKKysrIGIvZnMvZXh0Mi94YXR0ci5jCkBAIC02NDQsOCArNjQ0LDggQEAKIAkJCQkgICB0aGUgaW5vZGUuICAqLwogCQkJCWVhX2JkZWJ1ZyhuZXdfYmgsICJyZXVzaW5nIGJsb2NrIik7CiAKLQkJCQllcnJvciA9IC1FRFFVT1Q7Ci0JCQkJaWYgKHZmc19kcV9hbGxvY19ibG9jayhpbm9kZSwgMSkpIHsKKwkJCQllcnJvciA9IGRxdW90X2FsbG9jX2Jsb2NrKGlub2RlLCAxKTsKKwkJCQlpZiAoZXJyb3IpIHsKIAkJCQkJdW5sb2NrX2J1ZmZlcihuZXdfYmgpOwogCQkJCQlnb3RvIGNsZWFudXA7CiAJCQkJfQpAQCAtNzAyLDcgKzcwMiw3IEBACiAJCSAqIGFzIGlmIG5vdGhpbmcgaGFwcGVuZWQgYW5kIGNsZWFudXAgdGhlIHVudXNlZCBibG9jayAqLwogCQlpZiAoZXJyb3IgJiYgZXJyb3IgIT0gLUVOT1NQQykgewogCQkJaWYgKG5ld19iaCAmJiBuZXdfYmggIT0gb2xkX2JoKQotCQkJCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCAxKTsKKwkJCQlkcXVvdF9mcmVlX2Jsb2NrKGlub2RlLCAxKTsKIAkJCWdvdG8gY2xlYW51cDsKIAkJfQogCX0gZWxzZQpAQCAtNzM0LDcgKzczNCw3IEBACiAJCQlsZTMyX2FkZF9jcHUoJkhEUihvbGRfYmgpLT5oX3JlZmNvdW50LCAtMSk7CiAJCQlpZiAoY2UpCiAJCQkJbWJfY2FjaGVfZW50cnlfcmVsZWFzZShjZSk7Ci0JCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgMSk7CisJCQlkcXVvdF9mcmVlX2Jsb2NrKGlub2RlLCAxKTsKIAkJCW1hcmtfYnVmZmVyX2RpcnR5KG9sZF9iaCk7CiAJCQllYV9iZGVidWcob2xkX2JoLCAicmVmY291bnQgbm93PSVkIiwKIAkJCQlsZTMyX3RvX2NwdShIRFIob2xkX2JoKS0+aF9yZWZjb3VudCkpOwpAQCAtNzk3LDcgKzc5Nyw3IEBACiAJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAkJaWYgKElTX1NZTkMoaW5vZGUpKQogCQkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwotCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgMSk7CisJCWRxdW90X2ZyZWVfYmxvY2soaW5vZGUsIDEpOwogCX0KIAlFWFQyX0koaW5vZGUpLT5pX2ZpbGVfYWNsID0gMDsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0My9iYWxsb2MuYyBiL2ZzL2V4dDMvYmFsbG9jLmMKaW5kZXggMjc5NjdmOS4uMTYxZGEyZCAxMDA2NDQKLS0tIGEvZnMvZXh0My9iYWxsb2MuYworKysgYi9mcy9leHQzL2JhbGxvYy5jCkBAIC02NzYsNyArNjc2LDcgQEAKIAl9CiAJZXh0M19mcmVlX2Jsb2Nrc19zYihoYW5kbGUsIHNiLCBibG9jaywgY291bnQsICZkcXVvdF9mcmVlZF9ibG9ja3MpOwogCWlmIChkcXVvdF9mcmVlZF9ibG9ja3MpCi0JCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCBkcXVvdF9mcmVlZF9ibG9ja3MpOworCQlkcXVvdF9mcmVlX2Jsb2NrKGlub2RlLCBkcXVvdF9mcmVlZF9ibG9ja3MpOwogCXJldHVybjsKIH0KIApAQCAtMTUwMiw4ICsxNTAyLDkgQEAKIAkvKgogCSAqIENoZWNrIHF1b3RhIGZvciBhbGxvY2F0aW9uIG9mIHRoaXMgYmxvY2suCiAJICovCi0JaWYgKHZmc19kcV9hbGxvY19ibG9jayhpbm9kZSwgbnVtKSkgewotCQkqZXJycCA9IC1FRFFVT1Q7CisJZXJyID0gZHF1b3RfYWxsb2NfYmxvY2soaW5vZGUsIG51bSk7CisJaWYgKGVycikgeworCQkqZXJycCA9IGVycjsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xNzEzLDcgKzE3MTQsNyBAQAogCiAJKmVycnAgPSAwOwogCWJyZWxzZShiaXRtYXBfYmgpOwotCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCAqY291bnQtbnVtKTsKKwlkcXVvdF9mcmVlX2Jsb2NrKGlub2RlLCAqY291bnQtbnVtKTsKIAkqY291bnQgPSBudW07CiAJcmV0dXJuIHJldF9ibG9jazsKIApAQCAtMTcyOCw3ICsxNzI5LDcgQEAKIAkgKiBVbmRvIHRoZSBibG9jayBhbGxvY2F0aW9uCiAJICovCiAJaWYgKCFwZXJmb3JtZWRfYWxsb2NhdGlvbikKLQkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsICpjb3VudCk7CisJCWRxdW90X2ZyZWVfYmxvY2soaW5vZGUsICpjb3VudCk7CiAJYnJlbHNlKGJpdG1hcF9iaCk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9leHQzL2ZpbGUuYyBiL2ZzL2V4dDMvZmlsZS5jCmluZGV4IDM4OGJiZGYuLmY1NWRmMGUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvZmlsZS5jCisrKyBiL2ZzL2V4dDMvZmlsZS5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvamJkLmg+CisjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9leHQzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZXh0M19qYmQuaD4KICNpbmNsdWRlICJ4YXR0ci5oIgpAQCAtMzMsOSArMzQsOSBAQAogICovCiBzdGF0aWMgaW50IGV4dDNfcmVsZWFzZV9maWxlIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwKQogewotCWlmIChFWFQzX0koaW5vZGUpLT5pX3N0YXRlICYgRVhUM19TVEFURV9GTFVTSF9PTl9DTE9TRSkgeworCWlmIChleHQzX3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDNfU1RBVEVfRkxVU0hfT05fQ0xPU0UpKSB7CiAJCWZpbGVtYXBfZmx1c2goaW5vZGUtPmlfbWFwcGluZyk7Ci0JCUVYVDNfSShpbm9kZSktPmlfc3RhdGUgJj0gfkVYVDNfU1RBVEVfRkxVU0hfT05fQ0xPU0U7CisJCWV4dDNfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDNfU1RBVEVfRkxVU0hfT05fQ0xPU0UpOwogCX0KIAkvKiBpZiB3ZSBhcmUgdGhlIGxhc3Qgd3JpdGVyIG9uIHRoZSBpbm9kZSwgZHJvcCB0aGUgYmxvY2sgcmVzZXJ2YXRpb24gKi8KIAlpZiAoKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJgpAQCAtNjIsNyArNjMsNyBAQAogCS5jb21wYXRfaW9jdGwJPSBleHQzX2NvbXBhdF9pb2N0bCwKICNlbmRpZgogCS5tbWFwCQk9IGdlbmVyaWNfZmlsZV9tbWFwLAotCS5vcGVuCQk9IGdlbmVyaWNfZmlsZV9vcGVuLAorCS5vcGVuCQk9IGRxdW90X2ZpbGVfb3BlbiwKIAkucmVsZWFzZQk9IGV4dDNfcmVsZWFzZV9maWxlLAogCS5mc3luYwkJPSBleHQzX3N5bmNfZmlsZSwKIAkuc3BsaWNlX3JlYWQJPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQsCmRpZmYgLS1naXQgYS9mcy9leHQzL2lhbGxvYy5jIGIvZnMvZXh0My9pYWxsb2MuYwppbmRleCBiMzk5OTEyLi5lZjkwMDhiIDEwMDY0NAotLS0gYS9mcy9leHQzL2lhbGxvYy5jCisrKyBiL2ZzL2V4dDMvaWFsbG9jLmMKQEAgLTEyMywxMCArMTIzLDEwIEBACiAJICogTm90ZTogd2UgbXVzdCBmcmVlIGFueSBxdW90YSBiZWZvcmUgbG9ja2luZyB0aGUgc3VwZXJibG9jaywKIAkgKiBhcyB3cml0aW5nIHRoZSBxdW90YSB0byBkaXNrIG1heSBuZWVkIHRoZSBsb2NrIGFzIHdlbGwuCiAJICovCi0JdmZzX2RxX2luaXQoaW5vZGUpOworCWRxdW90X2luaXRpYWxpemUoaW5vZGUpOwogCWV4dDNfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUpOwotCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKLQl2ZnNfZHFfZHJvcChpbm9kZSk7CisJZHF1b3RfZnJlZV9pbm9kZShpbm9kZSk7CisJZHF1b3RfZHJvcChpbm9kZSk7CiAKIAlpc19kaXJlY3RvcnkgPSBTX0lTRElSKGlub2RlLT5pX21vZGUpOwogCkBAIC01ODgsMTAgKzU4OCwxMCBAQAogCQlzaXplb2Yoc3RydWN0IGV4dDNfaW5vZGUpIC0gRVhUM19HT09EX09MRF9JTk9ERV9TSVpFIDogMDsKIAogCXJldCA9IGlub2RlOwotCWlmICh2ZnNfZHFfYWxsb2NfaW5vZGUoaW5vZGUpKSB7Ci0JCWVyciA9IC1FRFFVT1Q7CisJZHF1b3RfaW5pdGlhbGl6ZShpbm9kZSk7CisJZXJyID0gZHF1b3RfYWxsb2NfaW5vZGUoaW5vZGUpOworCWlmIChlcnIpCiAJCWdvdG8gZmFpbF9kcm9wOwotCX0KIAogCWVyciA9IGV4dDNfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyKTsKIAlpZiAoZXJyKQpAQCAtNjE5LDEwICs2MTksMTAgQEAKIAlyZXR1cm4gcmV0OwogCiBmYWlsX2ZyZWVfZHJvcDoKLQl2ZnNfZHFfZnJlZV9pbm9kZShpbm9kZSk7CisJZHF1b3RfZnJlZV9pbm9kZShpbm9kZSk7CiAKIGZhaWxfZHJvcDoKLQl2ZnNfZHFfZHJvcChpbm9kZSk7CisJZHF1b3RfZHJvcChpbm9kZSk7CiAJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1FVT1RBOwogCWlub2RlLT5pX25saW5rID0gMDsKIAl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvaW5vZGUuYyBiL2ZzL2V4dDMvaW5vZGUuYwppbmRleCA0NTVlNmU2Li43ZjkyMGI3IDEwMDY0NAotLS0gYS9mcy9leHQzL2lub2RlLmMKKysrIGIvZnMvZXh0My9pbm9kZS5jCkBAIC0xOTYsNiArMTk2LDkgQEAKIHsKIAloYW5kbGVfdCAqaGFuZGxlOwogCisJaWYgKCFpc19iYWRfaW5vZGUoaW5vZGUpKQorCQlkcXVvdF9pbml0aWFsaXplKGlub2RlKTsKKwogCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKIAogCWlmIChpc19iYWRfaW5vZGUoaW5vZGUpKQpAQCAtMTM3OCw3ICsxMzgxLDcgQEAKIAkgKi8KIAlpZiAocG9zICsgbGVuID4gaW5vZGUtPmlfc2l6ZSAmJiBleHQzX2Nhbl90cnVuY2F0ZShpbm9kZSkpCiAJCWV4dDNfb3JwaGFuX2FkZChoYW5kbGUsIGlub2RlKTsKLQlFWFQzX0koaW5vZGUpLT5pX3N0YXRlIHw9IEVYVDNfU1RBVEVfSkRBVEE7CisJZXh0M19zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDNfU1RBVEVfSkRBVEEpOwogCWlmIChpbm9kZS0+aV9zaXplID4gRVhUM19JKGlub2RlKS0+aV9kaXNrc2l6ZSkgewogCQlFWFQzX0koaW5vZGUpLT5pX2Rpc2tzaXplID0gaW5vZGUtPmlfc2l6ZTsKIAkJcmV0MiA9IGV4dDNfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKQEAgLTE0MTcsNyArMTQyMCw3IEBACiAJam91cm5hbF90ICpqb3VybmFsOwogCWludCBlcnI7CiAKLQlpZiAoRVhUM19JKGlub2RlKS0+aV9zdGF0ZSAmIEVYVDNfU1RBVEVfSkRBVEEpIHsKKwlpZiAoZXh0M190ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQzX1NUQVRFX0pEQVRBKSkgewogCQkvKgogCQkgKiBUaGlzIGlzIGEgUkVBTExZIGhlYXZ5d2VpZ2h0IGFwcHJvYWNoLCBidXQgdGhlIHVzZSBvZgogCQkgKiBibWFwIG9uIGRpcnR5IGZpbGVzIGlzIGV4cGVjdGVkIHRvIGJlIGV4dHJlbWVseSByYXJlOgpAQCAtMTQzNiw3ICsxNDM5LDcgQEAKIAkJICogZXZlcnl0aGluZyB0aGV5IGdldC4KIAkJICovCiAKLQkJRVhUM19JKGlub2RlKS0+aV9zdGF0ZSAmPSB+RVhUM19TVEFURV9KREFUQTsKKwkJZXh0M19jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUM19TVEFURV9KREFUQSk7CiAJCWpvdXJuYWwgPSBFWFQzX0pPVVJOQUwoaW5vZGUpOwogCQlqb3VybmFsX2xvY2tfdXBkYXRlcyhqb3VybmFsKTsKIAkJZXJyID0gam91cm5hbF9mbHVzaChqb3VybmFsKTsKQEAgLTE1MjgsNiArMTUzMSw3IEBACiAJaW50IGVycjsKIAogCUpfQVNTRVJUKFBhZ2VMb2NrZWQocGFnZSkpOworCVdBUk5fT05fT05DRShJU19SRE9OTFkoaW5vZGUpKTsKIAogCS8qCiAJICogV2UgZ2l2ZSB1cCBoZXJlIGlmIHdlJ3JlIHJlZW50ZXJlZCwgYmVjYXVzZSBpdCBtaWdodCBiZSBmb3IgYQpAQCAtMTYwMCw2ICsxNjA0LDkgQEAKIAlpbnQgcmV0ID0gMDsKIAlpbnQgZXJyOwogCisJSl9BU1NFUlQoUGFnZUxvY2tlZChwYWdlKSk7CisJV0FSTl9PTl9PTkNFKElTX1JET05MWShpbm9kZSkpOworCiAJaWYgKGV4dDNfam91cm5hbF9jdXJyZW50X2hhbmRsZSgpKQogCQlnb3RvIG91dF9mYWlsOwogCkBAIC0xNjQyLDYgKzE2NDksOSBAQAogCWludCByZXQgPSAwOwogCWludCBlcnI7CiAKKwlKX0FTU0VSVChQYWdlTG9ja2VkKHBhZ2UpKTsKKwlXQVJOX09OX09OQ0UoSVNfUkRPTkxZKGlub2RlKSk7CisKIAlpZiAoZXh0M19qb3VybmFsX2N1cnJlbnRfaGFuZGxlKCkpCiAJCWdvdG8gbm9fd3JpdGU7CiAKQEAgLTE2NzAsNyArMTY4MCw3IEBACiAJCQkJUEFHRV9DQUNIRV9TSVpFLCBOVUxMLCB3cml0ZV9lbmRfZm4pOwogCQlpZiAocmV0ID09IDApCiAJCQlyZXQgPSBlcnI7Ci0JCUVYVDNfSShpbm9kZSktPmlfc3RhdGUgfD0gRVhUM19TVEFURV9KREFUQTsKKwkJZXh0M19zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDNfU1RBVEVfSkRBVEEpOwogCQl1bmxvY2tfcGFnZShwYWdlKTsKIAl9IGVsc2UgewogCQkvKgpAQCAtMTc4NSw4ICsxNzk1LDkgQEAKIAkJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGlub2RlLCAyKTsKIAkJaWYgKElTX0VSUihoYW5kbGUpKSB7CiAJCQkvKiBUaGlzIGlzIHJlYWxseSBiYWQgbHVjay4gV2UndmUgd3JpdHRlbiB0aGUgZGF0YQotCQkJICogYnV0IGNhbm5vdCBleHRlbmQgaV9zaXplLiBCYWlsIG91dCBhbmQgcHJldGVuZAotCQkJICogdGhlIHdyaXRlIGZhaWxlZC4uLiAqLworCQkJICogYnV0IGNhbm5vdCBleHRlbmQgaV9zaXplLiBUcnVuY2F0ZSBhbGxvY2F0ZWQgYmxvY2tzCisJCQkgKiBhbmQgcHJldGVuZCB0aGUgd3JpdGUgZmFpbGVkLi4uICovCisJCQlleHQzX3RydW5jYXRlKGlub2RlKTsKIAkJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKIAkJCWdvdG8gb3V0OwogCQl9CkBAIC0yNDAyLDcgKzI0MTMsNyBAQAogCQlnb3RvIG91dF9ub3RyYW5zOwogCiAJaWYgKGlub2RlLT5pX3NpemUgPT0gMCAmJiBleHQzX3Nob3VsZF93cml0ZWJhY2tfZGF0YShpbm9kZSkpCi0JCWVpLT5pX3N0YXRlIHw9IEVYVDNfU1RBVEVfRkxVU0hfT05fQ0xPU0U7CisJCWV4dDNfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQzX1NUQVRFX0ZMVVNIX09OX0NMT1NFKTsKIAogCS8qCiAJICogV2UgaGF2ZSB0byBsb2NrIHRoZSBFT0YgcGFnZSBoZXJlLCBiZWNhdXNlIGxvY2tfcGFnZSgpIG5lc3RzCkBAIC0yNzIxLDcgKzI3MzIsNyBAQAogewogCS8qIFdlIGhhdmUgYWxsIGlub2RlIGRhdGEgZXhjZXB0IHhhdHRycyBpbiBtZW1vcnkgaGVyZS4gKi8KIAlyZXR1cm4gX19leHQzX2dldF9pbm9kZV9sb2MoaW5vZGUsIGlsb2MsCi0JCSEoRVhUM19JKGlub2RlKS0+aV9zdGF0ZSAmIEVYVDNfU1RBVEVfWEFUVFIpKTsKKwkJIWV4dDNfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUM19TVEFURV9YQVRUUikpOwogfQogCiB2b2lkIGV4dDNfc2V0X2lub2RlX2ZsYWdzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCkBAIC0yODkzLDcgKzI5MDQsNyBAQAogCQkJCQlFWFQzX0dPT0RfT0xEX0lOT0RFX1NJWkUgKwogCQkJCQllaS0+aV9leHRyYV9pc2l6ZTsKIAkJCWlmICgqbWFnaWMgPT0gY3B1X3RvX2xlMzIoRVhUM19YQVRUUl9NQUdJQykpCi0JCQkJIGVpLT5pX3N0YXRlIHw9IEVYVDNfU1RBVEVfWEFUVFI7CisJCQkJIGV4dDNfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQzX1NUQVRFX1hBVFRSKTsKIAkJfQogCX0gZWxzZQogCQllaS0+aV9leHRyYV9pc2l6ZSA9IDA7CkBAIC0yOTU1LDcgKzI5NjYsNyBAQAogCiAJLyogRm9yIGZpZWxkcyBub3Qgbm90IHRyYWNraW5nIGluIHRoZSBpbi1tZW1vcnkgaW5vZGUsCiAJICogaW5pdGlhbGlzZSB0aGVtIHRvIHplcm8gZm9yIG5ldyBpbm9kZXMuICovCi0JaWYgKGVpLT5pX3N0YXRlICYgRVhUM19TVEFURV9ORVcpCisJaWYgKGV4dDNfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUM19TVEFURV9ORVcpKQogCQltZW1zZXQocmF3X2lub2RlLCAwLCBFWFQzX1NCKGlub2RlLT5pX3NiKS0+c19pbm9kZV9zaXplKTsKIAogCWV4dDNfZ2V0X2lub2RlX2ZsYWdzKGVpKTsKQEAgLTMwNTIsNyArMzA2Myw3IEBACiAJcmMgPSBleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBiaCk7CiAJaWYgKCFlcnIpCiAJCWVyciA9IHJjOwotCWVpLT5pX3N0YXRlICY9IH5FWFQzX1NUQVRFX05FVzsKKwlleHQzX2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQzX1NUQVRFX05FVyk7CiAKIAlhdG9taWNfc2V0KCZlaS0+aV9zeW5jX3RpZCwgaGFuZGxlLT5oX3RyYW5zYWN0aW9uLT50X3RpZCk7CiBvdXRfYnJlbHNlOgpAQCAtMzA5Niw3ICszMTA3LDcgQEAKICAqIGBzdHVmZigpJyBpcyBydW5uaW5nLCBhbmQgdGhlIG5ldyBpX3NpemUgd2lsbCBiZSBsb3N0LiAgUGx1cyB0aGUgaW5vZGUKICAqIHdpbGwgbm8gbG9uZ2VyIGJlIG9uIHRoZSBzdXBlcmJsb2NrJ3MgZGlydHkgaW5vZGUgbGlzdC4KICAqLwotaW50IGV4dDNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpCitpbnQgZXh0M193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlpZiAoY3VycmVudC0+ZmxhZ3MgJiBQRl9NRU1BTExPQykKIAkJcmV0dXJuIDA7CkBAIC0zMTA3LDcgKzMxMTgsNyBAQAogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQlpZiAoIXdhaXQpCisJaWYgKHdiYy0+c3luY19tb2RlICE9IFdCX1NZTkNfQUxMKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiBleHQzX2ZvcmNlX2NvbW1pdChpbm9kZS0+aV9zYik7CkBAIC0zMTQwLDYgKzMxNTEsOCBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCisJaWYgKGlhX3ZhbGlkICYgQVRUUl9TSVpFKQorCQlkcXVvdF9pbml0aWFsaXplKGlub2RlKTsKIAlpZiAoKGlhX3ZhbGlkICYgQVRUUl9VSUQgJiYgYXR0ci0+aWFfdWlkICE9IGlub2RlLT5pX3VpZCkgfHwKIAkJKGlhX3ZhbGlkICYgQVRUUl9HSUQgJiYgYXR0ci0+aWFfZ2lkICE9IGlub2RlLT5pX2dpZCkpIHsKIAkJaGFuZGxlX3QgKmhhbmRsZTsKQEAgLTMxNTIsNyArMzE2NSw3IEBACiAJCQllcnJvciA9IFBUUl9FUlIoaGFuZGxlKTsKIAkJCWdvdG8gZXJyX291dDsKIAkJfQotCQllcnJvciA9IHZmc19kcV90cmFuc2Zlcihpbm9kZSwgYXR0cikgPyAtRURRVU9UIDogMDsKKwkJZXJyb3IgPSBkcXVvdF90cmFuc2Zlcihpbm9kZSwgYXR0cik7CiAJCWlmIChlcnJvcikgewogCQkJZXh0M19qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAkJCXJldHVybiBlcnJvcjsKQEAgLTMyMzcsNyArMzI1MCw3IEBACiAJCXJldCA9IDIgKiAoYnBwICsgaW5kaXJlY3RzKSArIDI7CiAKICNpZmRlZiBDT05GSUdfUVVPVEEKLQkvKiBXZSBrbm93IHRoYXQgc3RydWN0dXJlIHdhcyBhbHJlYWR5IGFsbG9jYXRlZCBkdXJpbmcgdmZzX2RxX2luaXQgc28KKwkvKiBXZSBrbm93IHRoYXQgc3RydWN0dXJlIHdhcyBhbHJlYWR5IGFsbG9jYXRlZCBkdXJpbmcgZHF1b3RfaW5pdGlhbGl6ZSBzbwogCSAqIHdlIHdpbGwgYmUgdXBkYXRpbmcgb25seSB0aGUgZGF0YSBibG9ja3MgKyBpbm9kZXMgKi8KIAlyZXQgKz0gRVhUM19NQVhRVU9UQVNfVFJBTlNfQkxPQ0tTKGlub2RlLT5pX3NiKTsKICNlbmRpZgpAQCAtMzMyOCw3ICszMzQxLDcgQEAKICAqIGlfc2l6ZSBoYXMgYmVlbiBjaGFuZ2VkIGJ5IGdlbmVyaWNfY29tbWl0X3dyaXRlKCkgYW5kIHdlIHRodXMgbmVlZAogICogdG8gaW5jbHVkZSB0aGUgdXBkYXRlZCBpbm9kZSBpbiB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAqCi0gKiBBbHNvLCB2ZnNfZHFfYWxsb2Nfc3BhY2UoKSB3aWxsIGFsd2F5cyBkaXJ0eSB0aGUgaW5vZGUgd2hlbiBibG9ja3MKKyAqIEFsc28sIGRxdW90X2FsbG9jX3NwYWNlKCkgd2lsbCBhbHdheXMgZGlydHkgdGhlIGlub2RlIHdoZW4gYmxvY2tzCiAgKiBhcmUgYWxsb2NhdGVkIHRvIHRoZSBmaWxlLgogICoKICAqIElmIHRoZSBpbm9kZSBpcyBtYXJrZWQgc3luY2hyb25vdXMsIHdlIGRvbid0IGhvbm91ciB0aGF0IGhlcmUgLSBkb2luZwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9uYW1laS5jIGIvZnMvZXh0My9uYW1laS5jCmluZGV4IDdiMGU0NGY3Li5lZTE4NDA4IDEwMDY0NAotLS0gYS9mcy9leHQzL25hbWVpLmMKKysrIGIvZnMvZXh0My9uYW1laS5jCkBAIC0xNjk2LDYgKzE2OTYsOCBAQAogCXN0cnVjdCBpbm9kZSAqIGlub2RlOwogCWludCBlcnIsIHJldHJpZXMgPSAwOwogCisJZHF1b3RfaW5pdGlhbGl6ZShkaXIpOworCiByZXRyeToKIAloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoZGlyLCBFWFQzX0RBVEFfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikgKwogCQkJCQlFWFQzX0lOREVYX0VYVFJBX1RSQU5TX0JMT0NLUyArIDMgKwpAQCAtMTczMCw2ICsxNzMyLDggQEAKIAlpZiAoIW5ld192YWxpZF9kZXYocmRldikpCiAJCXJldHVybiAtRUlOVkFMOwogCisJZHF1b3RfaW5pdGlhbGl6ZShkaXIpOworCiByZXRyeToKIAloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoZGlyLCBFWFQzX0RBVEFfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikgKwogCQkJCQlFWFQzX0lOREVYX0VYVFJBX1RSQU5TX0JMT0NLUyArIDMgKwpAQCAtMTc2Niw2ICsxNzcwLDggQEAKIAlpZiAoZGlyLT5pX25saW5rID49IEVYVDNfTElOS19NQVgpCiAJCXJldHVybiAtRU1MSU5LOwogCisJZHF1b3RfaW5pdGlhbGl6ZShkaXIpOworCiByZXRyeToKIAloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoZGlyLCBFWFQzX0RBVEFfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikgKwogCQkJCQlFWFQzX0lOREVYX0VYVFJBX1RSQU5TX0JMT0NLUyArIDMgKwpAQCAtMjA2MCw3ICsyMDY2LDkgQEAKIAogCS8qIEluaXRpYWxpemUgcXVvdGFzIGJlZm9yZSBzbyB0aGF0IGV2ZW50dWFsIHdyaXRlcyBnbyBpbgogCSAqIHNlcGFyYXRlIHRyYW5zYWN0aW9uICovCi0JdmZzX2RxX2luaXQoZGVudHJ5LT5kX2lub2RlKTsKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CisJZHF1b3RfaW5pdGlhbGl6ZShkZW50cnktPmRfaW5vZGUpOworCiAJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGRpciwgRVhUM19ERUxFVEVfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikpOwogCWlmIChJU19FUlIoaGFuZGxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKQEAgLTIxMTksNyArMjEyNyw5IEBACiAKIAkvKiBJbml0aWFsaXplIHF1b3RhcyBiZWZvcmUgc28gdGhhdCBldmVudHVhbCB3cml0ZXMgZ28KIAkgKiBpbiBzZXBhcmF0ZSB0cmFuc2FjdGlvbiAqLwotCXZmc19kcV9pbml0KGRlbnRyeS0+ZF9pbm9kZSk7CisJZHF1b3RfaW5pdGlhbGl6ZShkaXIpOworCWRxdW90X2luaXRpYWxpemUoZGVudHJ5LT5kX2lub2RlKTsKKwogCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChkaXIsIEVYVDNfREVMRVRFX1RSQU5TX0JMT0NLUyhkaXItPmlfc2IpKTsKIAlpZiAoSVNfRVJSKGhhbmRsZSkpCiAJCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7CkBAIC0yMTc0LDYgKzIxODQsOCBAQAogCWlmIChsID4gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkKIAkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CisKIHJldHJ5OgogCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChkaXIsIEVYVDNfREFUQV9UUkFOU19CTE9DS1MoZGlyLT5pX3NiKSArCiAJCQkJCUVYVDNfSU5ERVhfRVhUUkFfVFJBTlNfQkxPQ0tTICsgNSArCkBAIC0yMjI4LDYgKzIyNDAsOSBAQAogCiAJaWYgKGlub2RlLT5pX25saW5rID49IEVYVDNfTElOS19NQVgpCiAJCXJldHVybiAtRU1MSU5LOworCisJZHF1b3RfaW5pdGlhbGl6ZShkaXIpOworCiAJLyoKIAkgKiBSZXR1cm4gLUVOT0VOVCBpZiB3ZSd2ZSByYWNlZCB3aXRoIHVubGluayBhbmQgaV9ubGluayBpcyAwLiAgRG9pbmcKIAkgKiBvdGhlcndpc2UgaGFzIHRoZSBwb3RlbnRpYWwgdG8gY29ycnVwdCB0aGUgb3JwaGFuIGlub2RlIGxpc3QuCkBAIC0yMjc4LDEyICsyMjkzLDE1IEBACiAJc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKiBvbGRfZGUsICogbmV3X2RlOwogCWludCByZXR2YWwsIGZsdXNoX2ZpbGUgPSAwOwogCisJZHF1b3RfaW5pdGlhbGl6ZShvbGRfZGlyKTsKKwlkcXVvdF9pbml0aWFsaXplKG5ld19kaXIpOworCiAJb2xkX2JoID0gbmV3X2JoID0gZGlyX2JoID0gTlVMTDsKIAogCS8qIEluaXRpYWxpemUgcXVvdGFzIGJlZm9yZSBzbyB0aGF0IGV2ZW50dWFsIHdyaXRlcyBnbwogCSAqIGluIHNlcGFyYXRlIHRyYW5zYWN0aW9uICovCiAJaWYgKG5ld19kZW50cnktPmRfaW5vZGUpCi0JCXZmc19kcV9pbml0KG5ld19kZW50cnktPmRfaW5vZGUpOworCQlkcXVvdF9pbml0aWFsaXplKG5ld19kZW50cnktPmRfaW5vZGUpOwogCWhhbmRsZSA9IGV4dDNfam91cm5hbF9zdGFydChvbGRfZGlyLCAyICoKIAkJCQkJRVhUM19EQVRBX1RSQU5TX0JMT0NLUyhvbGRfZGlyLT5pX3NiKSArCiAJCQkJCUVYVDNfSU5ERVhfRVhUUkFfVFJBTlNfQkxPQ0tTICsgMik7CmRpZmYgLS1naXQgYS9mcy9leHQzL3N1cGVyLmMgYi9mcy9leHQzL3N1cGVyLmMKaW5kZXggYWZhMmI1Ni4uMWJlZTYwNCAxMDA2NDQKLS0tIGEvZnMvZXh0My9zdXBlci5jCisrKyBiL2ZzL2V4dDMvc3VwZXIuYwpAQCAtMTY0LDcgKzE2NCw3IEBACiAgKiB3cml0ZSBvdXQgdGhlIHN1cGVyYmxvY2sgc2FmZWx5LgogICoKICAqIFdlJ2xsIGp1c3QgdXNlIHRoZSBqb3VybmFsX2Fib3J0KCkgZXJyb3IgY29kZSB0byByZWNvcmQgYW4gZXJyb3IgaW4KLSAqIHRoZSBqb3VybmFsIGluc3RlYWQuICBPbiByZWNvdmVyeSwgdGhlIGpvdXJuYWwgd2lsbCBjb21wYWluIGFib3V0CisgKiB0aGUgam91cm5hbCBpbnN0ZWFkLiAgT24gcmVjb3ZlcnksIHRoZSBqb3VybmFsIHdpbGwgY29tcGxhaW4gYWJvdXQKICAqIHRoYXQgZXJyb3IgdW50aWwgd2UndmUgbm90ZWQgaXQgZG93biBhbmQgY2xlYXJlZCBpdC4KICAqLwogCkBAIC0xODEsNyArMTgxLDcgQEAKIAlpZiAoIXRlc3Rfb3B0IChzYiwgRVJST1JTX0NPTlQpKSB7CiAJCWpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDNfU0Ioc2IpLT5zX2pvdXJuYWw7CiAKLQkJRVhUM19TQihzYiktPnNfbW91bnRfb3B0IHw9IEVYVDNfTU9VTlRfQUJPUlQ7CisJCXNldF9vcHQoRVhUM19TQihzYiktPnNfbW91bnRfb3B0LCBBQk9SVCk7CiAJCWlmIChqb3VybmFsKQogCQkJam91cm5hbF9hYm9ydChqb3VybmFsLCAtRUlPKTsKIAl9CkBAIC0yOTYsNyArMjk2LDcgQEAKIAkJImVycm9yOiByZW1vdW50aW5nIGZpbGVzeXN0ZW0gcmVhZC1vbmx5Iik7CiAJRVhUM19TQihzYiktPnNfbW91bnRfc3RhdGUgfD0gRVhUM19FUlJPUl9GUzsKIAlzYi0+c19mbGFncyB8PSBNU19SRE9OTFk7Ci0JRVhUM19TQihzYiktPnNfbW91bnRfb3B0IHw9IEVYVDNfTU9VTlRfQUJPUlQ7CisJc2V0X29wdChFWFQzX1NCKHNiKS0+c19tb3VudF9vcHQsIEFCT1JUKTsKIAlpZiAoRVhUM19TQihzYiktPnNfam91cm5hbCkKIAkJam91cm5hbF9hYm9ydChFWFQzX1NCKHNiKS0+c19qb3VybmFsLCAtRUlPKTsKIH0KQEAgLTUyOCw2ICs1MjgsOCBAQAogc3RhdGljIHZvaWQgZXh0M19jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBleHQzX2Jsb2NrX2FsbG9jX2luZm8gKnJzdiA9IEVYVDNfSShpbm9kZSktPmlfYmxvY2tfYWxsb2NfaW5mbzsKKworCWRxdW90X2Ryb3AoaW5vZGUpOwogCWV4dDNfZGlzY2FyZF9yZXNlcnZhdGlvbihpbm9kZSk7CiAJRVhUM19JKGlub2RlKS0+aV9ibG9ja19hbGxvY19pbmZvID0gTlVMTDsKIAlpZiAodW5saWtlbHkocnN2KSkKQEAgLTU2MiwxMCArNTY0LDEwIEBACiAJaWYgKHNiaS0+c19xZl9uYW1lc1tHUlBRVU9UQV0pCiAJCXNlcV9wcmludGYoc2VxLCAiLGdycGpxdW90YT0lcyIsIHNiaS0+c19xZl9uYW1lc1tHUlBRVU9UQV0pOwogCi0JaWYgKHNiaS0+c19tb3VudF9vcHQgJiBFWFQzX01PVU5UX1VTUlFVT1RBKQorCWlmICh0ZXN0X29wdChzYiwgVVNSUVVPVEEpKQogCQlzZXFfcHV0cyhzZXEsICIsdXNycXVvdGEiKTsKIAotCWlmIChzYmktPnNfbW91bnRfb3B0ICYgRVhUM19NT1VOVF9HUlBRVU9UQSkKKwlpZiAodGVzdF9vcHQoc2IsIEdSUFFVT1RBKSkKIAkJc2VxX3B1dHMoc2VxLCAiLGdycHF1b3RhIik7CiAjZW5kaWYKIH0KQEAgLTY1Niw4ICs2NTgsNyBAQAogCWlmICh0ZXN0X29wdChzYiwgTk9CSCkpCiAJCXNlcV9wdXRzKHNlcSwgIixub2JoIik7CiAKLQlzZXFfcHJpbnRmKHNlcSwgIixkYXRhPSVzIiwgZGF0YV9tb2RlX3N0cmluZyhzYmktPnNfbW91bnRfb3B0ICYKLQkJCQkJCSAgICAgRVhUM19NT1VOVF9EQVRBX0ZMQUdTKSk7CisJc2VxX3ByaW50ZihzZXEsICIsZGF0YT0lcyIsIGRhdGFfbW9kZV9zdHJpbmcodGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpKSk7CiAJaWYgKHRlc3Rfb3B0KHNiLCBEQVRBX0VSUl9BQk9SVCkpCiAJCXNlcV9wdXRzKHNlcSwgIixkYXRhX2Vycj1hYm9ydCIpOwogCkBAIC03NTEsMTMgKzc1Miw2IEBACiAJCQkJY29uc3QgY2hhciAqZGF0YSwgc2l6ZV90IGxlbiwgbG9mZl90IG9mZik7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyBleHQzX3F1b3RhX29wZXJhdGlvbnMgPSB7Ci0JLmluaXRpYWxpemUJPSBkcXVvdF9pbml0aWFsaXplLAotCS5kcm9wCQk9IGRxdW90X2Ryb3AsCi0JLmFsbG9jX3NwYWNlCT0gZHF1b3RfYWxsb2Nfc3BhY2UsCi0JLmFsbG9jX2lub2RlCT0gZHF1b3RfYWxsb2NfaW5vZGUsCi0JLmZyZWVfc3BhY2UJPSBkcXVvdF9mcmVlX3NwYWNlLAotCS5mcmVlX2lub2RlCT0gZHF1b3RfZnJlZV9pbm9kZSwKLQkudHJhbnNmZXIJPSBkcXVvdF90cmFuc2ZlciwKIAkud3JpdGVfZHF1b3QJPSBleHQzX3dyaXRlX2RxdW90LAogCS5hY3F1aXJlX2RxdW90CT0gZXh0M19hY3F1aXJlX2RxdW90LAogCS5yZWxlYXNlX2RxdW90CT0gZXh0M19yZWxlYXNlX2RxdW90LApAQCAtODk2LDYgKzg5MCw2MyBAQAogCXJldHVybiBzYl9ibG9jazsKIH0KIAorI2lmZGVmIENPTkZJR19RVU9UQQorc3RhdGljIGludCBzZXRfcWZfbmFtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgcXR5cGUsIHN1YnN0cmluZ190ICphcmdzKQoreworCXN0cnVjdCBleHQzX3NiX2luZm8gKnNiaSA9IEVYVDNfU0Ioc2IpOworCWNoYXIgKnFuYW1lOworCisJaWYgKHNiX2FueV9xdW90YV9sb2FkZWQoc2IpICYmCisJCSFzYmktPnNfcWZfbmFtZXNbcXR5cGVdKSB7CisJCWV4dDNfbXNnKHNiLCBLRVJOX0VSUiwKKwkJCSJDYW5ub3QgY2hhbmdlIGpvdXJuYWxlZCAiCisJCQkicXVvdGEgb3B0aW9ucyB3aGVuIHF1b3RhIHR1cm5lZCBvbiIpOworCQlyZXR1cm4gMDsKKwl9CisJcW5hbWUgPSBtYXRjaF9zdHJkdXAoYXJncyk7CisJaWYgKCFxbmFtZSkgeworCQlleHQzX21zZyhzYiwgS0VSTl9FUlIsCisJCQkiTm90IGVub3VnaCBtZW1vcnkgZm9yIHN0b3JpbmcgcXVvdGFmaWxlIG5hbWUiKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChzYmktPnNfcWZfbmFtZXNbcXR5cGVdICYmCisJCXN0cmNtcChzYmktPnNfcWZfbmFtZXNbcXR5cGVdLCBxbmFtZSkpIHsKKwkJZXh0M19tc2coc2IsIEtFUk5fRVJSLAorCQkJIiVzIHF1b3RhIGZpbGUgYWxyZWFkeSBzcGVjaWZpZWQiLCBRVFlQRTJOQU1FKHF0eXBlKSk7CisJCWtmcmVlKHFuYW1lKTsKKwkJcmV0dXJuIDA7CisJfQorCXNiaS0+c19xZl9uYW1lc1txdHlwZV0gPSBxbmFtZTsKKwlpZiAoc3RyY2hyKHNiaS0+c19xZl9uYW1lc1txdHlwZV0sICcvJykpIHsKKwkJZXh0M19tc2coc2IsIEtFUk5fRVJSLAorCQkJInF1b3RhZmlsZSBtdXN0IGJlIG9uIGZpbGVzeXN0ZW0gcm9vdCIpOworCQlrZnJlZShzYmktPnNfcWZfbmFtZXNbcXR5cGVdKTsKKwkJc2JpLT5zX3FmX25hbWVzW3F0eXBlXSA9IE5VTEw7CisJCXJldHVybiAwOworCX0KKwlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIFFVT1RBKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBjbGVhcl9xZl9uYW1lKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBxdHlwZSkgeworCisJc3RydWN0IGV4dDNfc2JfaW5mbyAqc2JpID0gRVhUM19TQihzYik7CisKKwlpZiAoc2JfYW55X3F1b3RhX2xvYWRlZChzYikgJiYKKwkJc2JpLT5zX3FmX25hbWVzW3F0eXBlXSkgeworCQlleHQzX21zZyhzYiwgS0VSTl9FUlIsICJDYW5ub3QgY2hhbmdlIGpvdXJuYWxlZCBxdW90YSBvcHRpb25zIgorCQkJIiB3aGVuIHF1b3RhIHR1cm5lZCBvbiIpOworCQlyZXR1cm4gMDsKKwl9CisJLyoKKwkgKiBUaGUgc3BhY2Ugd2lsbCBiZSByZWxlYXNlZCBsYXRlciB3aGVuIGFsbCBvcHRpb25zIGFyZSBjb25maXJtZWQKKwkgKiB0byBiZSBjb3JyZWN0CisJICovCisJc2JpLT5zX3FmX25hbWVzW3F0eXBlXSA9IE5VTEw7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBwYXJzZV9vcHRpb25zIChjaGFyICpvcHRpb25zLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJICB1bnNpZ25lZCBpbnQgKmludW0sIHVuc2lnbmVkIGxvbmcgKmpvdXJuYWxfZGV2bnVtLAogCQkJICBleHQzX2ZzYmxrX3QgKm5fYmxvY2tzX2NvdW50LCBpbnQgaXNfcmVtb3VudCkKQEAgLTkwNiw4ICs5NTcsNyBAQAogCWludCBkYXRhX29wdCA9IDA7CiAJaW50IG9wdGlvbjsKICNpZmRlZiBDT05GSUdfUVVPVEEKLQlpbnQgcXR5cGUsIHFmbXQ7Ci0JY2hhciAqcW5hbWU7CisJaW50IHFmbXQ7CiAjZW5kaWYKIAogCWlmICghb3B0aW9ucykKQEAgLTEwNjUsMjAgKzExMTUsMTkgQEAKIAkJCWRhdGFfb3B0ID0gRVhUM19NT1VOVF9XUklURUJBQ0tfREFUQTsKIAkJZGF0YWNoZWNrOgogCQkJaWYgKGlzX3JlbW91bnQpIHsKLQkJCQlpZiAoKHNiaS0+c19tb3VudF9vcHQgJiBFWFQzX01PVU5UX0RBVEFfRkxBR1MpCi0JCQkJCQk9PSBkYXRhX29wdCkKKwkJCQlpZiAodGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IGRhdGFfb3B0KQogCQkJCQlicmVhazsKIAkJCQlleHQzX21zZyhzYiwgS0VSTl9FUlIsCiAJCQkJCSJlcnJvcjogY2Fubm90IGNoYW5nZSAiCiAJCQkJCSJkYXRhIG1vZGUgb24gcmVtb3VudC4gVGhlIGZpbGVzeXN0ZW0gIgogCQkJCQkiaXMgbW91bnRlZCBpbiBkYXRhPSVzIG1vZGUgYW5kIHlvdSAiCiAJCQkJCSJ0cnkgdG8gcmVtb3VudCBpdCBpbiBkYXRhPSVzIG1vZGUuIiwKLQkJCQkJZGF0YV9tb2RlX3N0cmluZyhzYmktPnNfbW91bnRfb3B0ICYKLQkJCQkJCQlFWFQzX01PVU5UX0RBVEFfRkxBR1MpLAorCQkJCQlkYXRhX21vZGVfc3RyaW5nKHRlc3Rfb3B0KHNiLAorCQkJCQkJCURBVEFfRkxBR1MpKSwKIAkJCQkJZGF0YV9tb2RlX3N0cmluZyhkYXRhX29wdCkpOwogCQkJCXJldHVybiAwOwogCQkJfSBlbHNlIHsKLQkJCQlzYmktPnNfbW91bnRfb3B0ICY9IH5FWFQzX01PVU5UX0RBVEFfRkxBR1M7CisJCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIERBVEFfRkxBR1MpOwogCQkJCXNiaS0+c19tb3VudF9vcHQgfD0gZGF0YV9vcHQ7CiAJCQl9CiAJCQlicmVhazsKQEAgLTEwOTAsNjIgKzExMzksMjAgQEAKIAkJCWJyZWFrOwogI2lmZGVmIENPTkZJR19RVU9UQQogCQljYXNlIE9wdF91c3JqcXVvdGE6Ci0JCQlxdHlwZSA9IFVTUlFVT1RBOwotCQkJZ290byBzZXRfcWZfbmFtZTsKKwkJCWlmICghc2V0X3FmX25hbWUoc2IsIFVTUlFVT1RBLCAmYXJnc1swXSkpCisJCQkJcmV0dXJuIDA7CisJCQlicmVhazsKIAkJY2FzZSBPcHRfZ3JwanF1b3RhOgotCQkJcXR5cGUgPSBHUlBRVU9UQTsKLXNldF9xZl9uYW1lOgotCQkJaWYgKHNiX2FueV9xdW90YV9sb2FkZWQoc2IpICYmCi0JCQkgICAgIXNiaS0+c19xZl9uYW1lc1txdHlwZV0pIHsKLQkJCQlleHQzX21zZyhzYiwgS0VSTl9FUlIsCi0JCQkJCSJlcnJvcjogY2Fubm90IGNoYW5nZSBqb3VybmFsZWQgIgotCQkJCQkicXVvdGEgb3B0aW9ucyB3aGVuIHF1b3RhIHR1cm5lZCBvbi4iKTsKKwkJCWlmICghc2V0X3FmX25hbWUoc2IsIEdSUFFVT1RBLCAmYXJnc1swXSkpCiAJCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlxbmFtZSA9IG1hdGNoX3N0cmR1cCgmYXJnc1swXSk7Ci0JCQlpZiAoIXFuYW1lKSB7Ci0JCQkJZXh0M19tc2coc2IsIEtFUk5fRVJSLAotCQkJCQkiZXJyb3I6IG5vdCBlbm91Z2ggbWVtb3J5IGZvciAiCi0JCQkJCSJzdG9yaW5nIHF1b3RhZmlsZSBuYW1lLiIpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQkJaWYgKHNiaS0+c19xZl9uYW1lc1txdHlwZV0gJiYKLQkJCSAgICBzdHJjbXAoc2JpLT5zX3FmX25hbWVzW3F0eXBlXSwgcW5hbWUpKSB7Ci0JCQkJZXh0M19tc2coc2IsIEtFUk5fRVJSLAotCQkJCQkiZXJyb3I6ICVzIHF1b3RhIGZpbGUgYWxyZWFkeSAiCi0JCQkJCSJzcGVjaWZpZWQuIiwgUVRZUEUyTkFNRShxdHlwZSkpOwotCQkJCWtmcmVlKHFuYW1lKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCXNiaS0+c19xZl9uYW1lc1txdHlwZV0gPSBxbmFtZTsKLQkJCWlmIChzdHJjaHIoc2JpLT5zX3FmX25hbWVzW3F0eXBlXSwgJy8nKSkgewotCQkJCWV4dDNfbXNnKHNiLCBLRVJOX0VSUiwKLQkJCQkJImVycm9yOiBxdW90YWZpbGUgbXVzdCBiZSBvbiAiCi0JCQkJCSJmaWxlc3lzdGVtIHJvb3QuIik7Ci0JCQkJa2ZyZWUoc2JpLT5zX3FmX25hbWVzW3F0eXBlXSk7Ci0JCQkJc2JpLT5zX3FmX25hbWVzW3F0eXBlXSA9IE5VTEw7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIFFVT1RBKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9vZmZ1c3JqcXVvdGE6Ci0JCQlxdHlwZSA9IFVTUlFVT1RBOwotCQkJZ290byBjbGVhcl9xZl9uYW1lOwotCQljYXNlIE9wdF9vZmZncnBqcXVvdGE6Ci0JCQlxdHlwZSA9IEdSUFFVT1RBOwotY2xlYXJfcWZfbmFtZToKLQkJCWlmIChzYl9hbnlfcXVvdGFfbG9hZGVkKHNiKSAmJgotCQkJICAgIHNiaS0+c19xZl9uYW1lc1txdHlwZV0pIHsKLQkJCQlleHQzX21zZyhzYiwgS0VSTl9FUlIsICJlcnJvcjogY2Fubm90IGNoYW5nZSAiCi0JCQkJCSJqb3VybmFsZWQgcXVvdGEgb3B0aW9ucyB3aGVuICIKLQkJCQkJInF1b3RhIHR1cm5lZCBvbi4iKTsKKwkJCWlmICghY2xlYXJfcWZfbmFtZShzYiwgVVNSUVVPVEEpKQogCQkJCXJldHVybiAwOwotCQkJfQotCQkJLyoKLQkJCSAqIFRoZSBzcGFjZSB3aWxsIGJlIHJlbGVhc2VkIGxhdGVyIHdoZW4gYWxsIG9wdGlvbnMKLQkJCSAqIGFyZSBjb25maXJtZWQgdG8gYmUgY29ycmVjdAotCQkJICovCi0JCQlzYmktPnNfcWZfbmFtZXNbcXR5cGVdID0gTlVMTDsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9vZmZncnBqcXVvdGE6CisJCQlpZiAoIWNsZWFyX3FmX25hbWUoc2IsIEdSUFFVT1RBKSkKKwkJCQlyZXR1cm4gMDsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9qcWZtdF92ZnNvbGQ6CiAJCQlxZm10ID0gUUZNVF9WRlNfT0xEOwpAQCAtMTI0NCwxOCArMTI1MSwxMiBAQAogCX0KICNpZmRlZiBDT05GSUdfUVVPVEEKIAlpZiAoc2JpLT5zX3FmX25hbWVzW1VTUlFVT1RBXSB8fCBzYmktPnNfcWZfbmFtZXNbR1JQUVVPVEFdKSB7Ci0JCWlmICgoc2JpLT5zX21vdW50X29wdCAmIEVYVDNfTU9VTlRfVVNSUVVPVEEpICYmCi0JCSAgICAgc2JpLT5zX3FmX25hbWVzW1VTUlFVT1RBXSkKKwkJaWYgKHRlc3Rfb3B0KHNiLCBVU1JRVU9UQSkgJiYgc2JpLT5zX3FmX25hbWVzW1VTUlFVT1RBXSkKIAkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBVU1JRVU9UQSk7Ci0KLQkJaWYgKChzYmktPnNfbW91bnRfb3B0ICYgRVhUM19NT1VOVF9HUlBRVU9UQSkgJiYKLQkJICAgICBzYmktPnNfcWZfbmFtZXNbR1JQUVVPVEFdKQorCQlpZiAodGVzdF9vcHQoc2IsIEdSUFFVT1RBKSAmJiBzYmktPnNfcWZfbmFtZXNbR1JQUVVPVEFdKQogCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIEdSUFFVT1RBKTsKIAotCQlpZiAoKHNiaS0+c19xZl9uYW1lc1tVU1JRVU9UQV0gJiYKLQkJCQkoc2JpLT5zX21vdW50X29wdCAmIEVYVDNfTU9VTlRfR1JQUVVPVEEpKSB8fAotCQkgICAgKHNiaS0+c19xZl9uYW1lc1tHUlBRVU9UQV0gJiYKLQkJCQkoc2JpLT5zX21vdW50X29wdCAmIEVYVDNfTU9VTlRfVVNSUVVPVEEpKSkgeworCQlpZiAodGVzdF9vcHQoc2IsIEdSUFFVT1RBKSB8fCB0ZXN0X29wdChzYiwgVVNSUVVPVEEpKSB7CiAJCQlleHQzX21zZyhzYiwgS0VSTl9FUlIsICJlcnJvcjogb2xkIGFuZCBuZXcgcXVvdGEgIgogCQkJCQkiZm9ybWF0IG1peGluZy4iKTsKIAkJCXJldHVybiAwOwpAQCAtMTQ3OCw3ICsxNDc5LDcgQEAKIAkJfQogCiAJCWxpc3RfYWRkKCZFWFQzX0koaW5vZGUpLT5pX29ycGhhbiwgJkVYVDNfU0Ioc2IpLT5zX29ycGhhbik7Ci0JCXZmc19kcV9pbml0KGlub2RlKTsKKwkJZHF1b3RfaW5pdGlhbGl6ZShpbm9kZSk7CiAJCWlmIChpbm9kZS0+aV9ubGluaykgewogCQkJcHJpbnRrKEtFUk5fREVCVUcKIAkJCQkiJXM6IHRydW5jYXRpbmcgaW5vZGUgJWx1IHRvICVMZCBieXRlc1xuIiwKQEAgLTE2NzEsMTEgKzE2NzIsMTEgQEAKIAkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBQT1NJWF9BQ0wpOwogI2VuZGlmCiAJaWYgKChkZWZfbW91bnRfb3B0cyAmIEVYVDNfREVGTV9KTU9ERSkgPT0gRVhUM19ERUZNX0pNT0RFX0RBVEEpCi0JCXNiaS0+c19tb3VudF9vcHQgfD0gRVhUM19NT1VOVF9KT1VSTkFMX0RBVEE7CisJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgSk9VUk5BTF9EQVRBKTsKIAllbHNlIGlmICgoZGVmX21vdW50X29wdHMgJiBFWFQzX0RFRk1fSk1PREUpID09IEVYVDNfREVGTV9KTU9ERV9PUkRFUkVEKQotCQlzYmktPnNfbW91bnRfb3B0IHw9IEVYVDNfTU9VTlRfT1JERVJFRF9EQVRBOworCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIE9SREVSRURfREFUQSk7CiAJZWxzZSBpZiAoKGRlZl9tb3VudF9vcHRzICYgRVhUM19ERUZNX0pNT0RFKSA9PSBFWFQzX0RFRk1fSk1PREVfV0JBQ0spCi0JCXNiaS0+c19tb3VudF9vcHQgfD0gRVhUM19NT1VOVF9XUklURUJBQ0tfREFUQTsKKwkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBXUklURUJBQ0tfREFUQSk7CiAKIAlpZiAobGUxNl90b19jcHUoc2JpLT5zX2VzLT5zX2Vycm9ycykgPT0gRVhUM19FUlJPUlNfUEFOSUMpCiAJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgRVJST1JTX1BBTklDKTsKQEAgLTE2OTQsNyArMTY5NSw3IEBACiAJCWdvdG8gZmFpbGVkX21vdW50OwogCiAJc2ItPnNfZmxhZ3MgPSAoc2ItPnNfZmxhZ3MgJiB+TVNfUE9TSVhBQ0wpIHwKLQkJKChzYmktPnNfbW91bnRfb3B0ICYgRVhUM19NT1VOVF9QT1NJWF9BQ0wpID8gTVNfUE9TSVhBQ0wgOiAwKTsKKwkJKHRlc3Rfb3B0KHNiLCBQT1NJWF9BQ0wpID8gTVNfUE9TSVhBQ0wgOiAwKTsKIAogCWlmIChsZTMyX3RvX2NwdShlcy0+c19yZXZfbGV2ZWwpID09IEVYVDNfR09PRF9PTERfUkVWICYmCiAJICAgIChFWFQzX0hBU19DT01QQVRfRkVBVFVSRShzYiwgfjBVKSB8fApAQCAtMjU2MSwxMSArMjU2MiwxMSBAQAogCQlnb3RvIHJlc3RvcmVfb3B0czsKIAl9CiAKLQlpZiAoc2JpLT5zX21vdW50X29wdCAmIEVYVDNfTU9VTlRfQUJPUlQpCisJaWYgKHRlc3Rfb3B0KHNiLCBBQk9SVCkpCiAJCWV4dDNfYWJvcnQoc2IsIF9fZnVuY19fLCAiQWJvcnQgZm9yY2VkIGJ5IHVzZXIiKTsKIAogCXNiLT5zX2ZsYWdzID0gKHNiLT5zX2ZsYWdzICYgfk1TX1BPU0lYQUNMKSB8Ci0JCSgoc2JpLT5zX21vdW50X29wdCAmIEVYVDNfTU9VTlRfUE9TSVhfQUNMKSA/IE1TX1BPU0lYQUNMIDogMCk7CisJCSh0ZXN0X29wdChzYiwgUE9TSVhfQUNMKSA/IE1TX1BPU0lYQUNMIDogMCk7CiAKIAllcyA9IHNiaS0+c19lczsKIApAQCAtMjU3Myw3ICsyNTc0LDcgQEAKIAogCWlmICgoKmZsYWdzICYgTVNfUkRPTkxZKSAhPSAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpIHx8CiAJCW5fYmxvY2tzX2NvdW50ID4gbGUzMl90b19jcHUoZXMtPnNfYmxvY2tzX2NvdW50KSkgewotCQlpZiAoc2JpLT5zX21vdW50X29wdCAmIEVYVDNfTU9VTlRfQUJPUlQpIHsKKwkJaWYgKHRlc3Rfb3B0KHNiLCBBQk9SVCkpIHsKIAkJCWVyciA9IC1FUk9GUzsKIAkJCWdvdG8gcmVzdG9yZV9vcHRzOwogCQl9CkBAIC0yNzM0LDcgKzI3MzUsNyBAQAogICogUHJvY2VzcyAxICAgICAgICAgICAgICAgICAgICAgICAgIFByb2Nlc3MgMgogICogZXh0M19jcmVhdGUoKSAgICAgICAgICAgICAgICAgICAgIHF1b3RhX3N5bmMoKQogICogICBqb3VybmFsX3N0YXJ0KCkgICAgICAgICAgICAgICAgICAgd3JpdGVfZHF1b3QoKQotICogICB2ZnNfZHFfaW5pdCgpICAgICAgICAgICAgICAgICAgICAgICBkb3duKGRxaW9fbXV0ZXgpCisgKiAgIGRxdW90X2luaXRpYWxpemUoKSAgICAgICAgICAgICAgICAgICAgICAgZG93bihkcWlvX211dGV4KQogICogICAgIGRvd24oZHFpb19tdXRleCkgICAgICAgICAgICAgICAgICAgIGpvdXJuYWxfc3RhcnQoKQogICoKICAqLwpAQCAtMjk0Miw5ICsyOTQzLDcgQEAKIAlzZWN0b3JfdCBibGsgPSBvZmYgPj4gRVhUM19CTE9DS19TSVpFX0JJVFMoc2IpOwogCWludCBlcnIgPSAwOwogCWludCBvZmZzZXQgPSBvZmYgJiAoc2ItPnNfYmxvY2tzaXplIC0gMSk7Ci0JaW50IHRvY29weTsKIAlpbnQgam91cm5hbF9xdW90YSA9IEVYVDNfU0Ioc2IpLT5zX3FmX25hbWVzW3R5cGVdICE9IE5VTEw7Ci0Jc2l6ZV90IHRvd3JpdGUgPSBsZW47CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAloYW5kbGVfdCAqaGFuZGxlID0gam91cm5hbF9jdXJyZW50X2hhbmRsZSgpOwogCkBAIC0yOTU1LDUzICsyOTU0LDU0IEBACiAJCQkodW5zaWduZWQgbG9uZyBsb25nKW9mZiwgKHVuc2lnbmVkIGxvbmcgbG9uZylsZW4pOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JbXV0ZXhfbG9ja19uZXN0ZWQoJmlub2RlLT5pX211dGV4LCBJX01VVEVYX1FVT1RBKTsKLQl3aGlsZSAodG93cml0ZSA+IDApIHsKLQkJdG9jb3B5ID0gc2ItPnNfYmxvY2tzaXplIC0gb2Zmc2V0IDwgdG93cml0ZSA/Ci0JCQkJc2ItPnNfYmxvY2tzaXplIC0gb2Zmc2V0IDogdG93cml0ZTsKLQkJYmggPSBleHQzX2JyZWFkKGhhbmRsZSwgaW5vZGUsIGJsaywgMSwgJmVycik7Ci0JCWlmICghYmgpCi0JCQlnb3RvIG91dDsKLQkJaWYgKGpvdXJuYWxfcXVvdGEpIHsKLQkJCWVyciA9IGV4dDNfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgYmgpOwotCQkJaWYgKGVycikgewotCQkJCWJyZWxzZShiaCk7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0KLQkJbG9ja19idWZmZXIoYmgpOwotCQltZW1jcHkoYmgtPmJfZGF0YStvZmZzZXQsIGRhdGEsIHRvY29weSk7Ci0JCWZsdXNoX2RjYWNoZV9wYWdlKGJoLT5iX3BhZ2UpOwotCQl1bmxvY2tfYnVmZmVyKGJoKTsKLQkJaWYgKGpvdXJuYWxfcXVvdGEpCi0JCQllcnIgPSBleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBiaCk7Ci0JCWVsc2UgewotCQkJLyogQWx3YXlzIGRvIGF0IGxlYXN0IG9yZGVyZWQgd3JpdGVzIGZvciBxdW90YXMgKi8KLQkJCWVyciA9IGV4dDNfam91cm5hbF9kaXJ0eV9kYXRhKGhhbmRsZSwgYmgpOwotCQkJbWFya19idWZmZXJfZGlydHkoYmgpOwotCQl9Ci0JCWJyZWxzZShiaCk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQkJb2Zmc2V0ID0gMDsKLQkJdG93cml0ZSAtPSB0b2NvcHk7Ci0JCWRhdGEgKz0gdG9jb3B5OwotCQlibGsrKzsKKworCS8qCisJICogU2luY2Ugd2UgYWNjb3VudCBvbmx5IG9uZSBkYXRhIGJsb2NrIGluIHRyYW5zYWN0aW9uIGNyZWRpdHMsCisJICogdGhlbiBpdCBpcyBpbXBvc3NpYmxlIHRvIGNyb3NzIGEgYmxvY2sgYm91bmRhcnkuCisJICovCisJaWYgKHNiLT5zX2Jsb2Nrc2l6ZSAtIG9mZnNldCA8IGxlbikgeworCQlleHQzX21zZyhzYiwgS0VSTl9XQVJOSU5HLCAiUXVvdGEgd3JpdGUgKG9mZj0lbGx1LCBsZW49JWxsdSkiCisJCQkiIGNhbmNlbGxlZCBiZWNhdXNlIG5vdCBibG9jayBhbGlnbmVkIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpb2ZmLCAodW5zaWduZWQgbG9uZyBsb25nKWxlbik7CisJCXJldHVybiAtRUlPOwogCX0KKwltdXRleF9sb2NrX25lc3RlZCgmaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfUVVPVEEpOworCWJoID0gZXh0M19icmVhZChoYW5kbGUsIGlub2RlLCBibGssIDEsICZlcnIpOworCWlmICghYmgpCisJCWdvdG8gb3V0OworCWlmIChqb3VybmFsX3F1b3RhKSB7CisJCWVyciA9IGV4dDNfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgYmgpOworCQlpZiAoZXJyKSB7CisJCQlicmVsc2UoYmgpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJbG9ja19idWZmZXIoYmgpOworCW1lbWNweShiaC0+Yl9kYXRhK29mZnNldCwgZGF0YSwgbGVuKTsKKwlmbHVzaF9kY2FjaGVfcGFnZShiaC0+Yl9wYWdlKTsKKwl1bmxvY2tfYnVmZmVyKGJoKTsKKwlpZiAoam91cm5hbF9xdW90YSkKKwkJZXJyID0gZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgYmgpOworCWVsc2UgeworCQkvKiBBbHdheXMgZG8gYXQgbGVhc3Qgb3JkZXJlZCB3cml0ZXMgZm9yIHF1b3RhcyAqLworCQllcnIgPSBleHQzX2pvdXJuYWxfZGlydHlfZGF0YShoYW5kbGUsIGJoKTsKKwkJbWFya19idWZmZXJfZGlydHkoYmgpOworCX0KKwlicmVsc2UoYmgpOwogb3V0OgotCWlmIChsZW4gPT0gdG93cml0ZSkgeworCWlmIChlcnIpIHsKIAkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJCXJldHVybiBlcnI7CiAJfQotCWlmIChpbm9kZS0+aV9zaXplIDwgb2ZmK2xlbi10b3dyaXRlKSB7Ci0JCWlfc2l6ZV93cml0ZShpbm9kZSwgb2ZmK2xlbi10b3dyaXRlKTsKKwlpZiAoaW5vZGUtPmlfc2l6ZSA8IG9mZiArIGxlbikgeworCQlpX3NpemVfd3JpdGUoaW5vZGUsIG9mZiArIGxlbik7CiAJCUVYVDNfSShpbm9kZSktPmlfZGlza3NpemUgPSBpbm9kZS0+aV9zaXplOwogCX0KIAlpbm9kZS0+aV92ZXJzaW9uKys7CiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAlleHQzX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JcmV0dXJuIGxlbiAtIHRvd3JpdGU7CisJcmV0dXJuIGxlbjsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9leHQzL3hhdHRyLmMgYi9mcy9leHQzL3hhdHRyLmMKaW5kZXggNjY4OTVjYy4uNTM0YTk0YyAxMDA2NDQKLS0tIGEvZnMvZXh0My94YXR0ci5jCisrKyBiL2ZzL2V4dDMveGF0dHIuYwpAQCAtMjc0LDcgKzI3NCw3IEBACiAJdm9pZCAqZW5kOwogCWludCBlcnJvcjsKIAotCWlmICghKEVYVDNfSShpbm9kZSktPmlfc3RhdGUgJiBFWFQzX1NUQVRFX1hBVFRSKSkKKwlpZiAoIWV4dDNfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUM19TVEFURV9YQVRUUikpCiAJCXJldHVybiAtRU5PREFUQTsKIAllcnJvciA9IGV4dDNfZ2V0X2lub2RlX2xvYyhpbm9kZSwgJmlsb2MpOwogCWlmIChlcnJvcikKQEAgLTQwMyw3ICs0MDMsNyBAQAogCXZvaWQgKmVuZDsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoIShFWFQzX0koaW5vZGUpLT5pX3N0YXRlICYgRVhUM19TVEFURV9YQVRUUikpCisJaWYgKCFleHQzX3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDNfU1RBVEVfWEFUVFIpKQogCQlyZXR1cm4gMDsKIAllcnJvciA9IGV4dDNfZ2V0X2lub2RlX2xvYyhpbm9kZSwgJmlsb2MpOwogCWlmIChlcnJvcikKQEAgLTUwMCw3ICs1MDAsNyBAQAogCQllcnJvciA9IGV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGJoKTsKIAkJaWYgKElTX1NZTkMoaW5vZGUpKQogCQkJaGFuZGxlLT5oX3N5bmMgPSAxOwotCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgMSk7CisJCWRxdW90X2ZyZWVfYmxvY2soaW5vZGUsIDEpOwogCQllYV9iZGVidWcoYmgsICJyZWZjb3VudCBub3c9JWQ7IHJlbGVhc2luZyIsCiAJCQkgIGxlMzJfdG9fY3B1KEJIRFIoYmgpLT5oX3JlZmNvdW50KSk7CiAJCWlmIChjZSkKQEAgLTc3NSw4ICs3NzUsOCBAQAogCQkJZWxzZSB7CiAJCQkJLyogVGhlIG9sZCBibG9jayBpcyByZWxlYXNlZCBhZnRlciB1cGRhdGluZwogCQkJCSAgIHRoZSBpbm9kZS4gKi8KLQkJCQllcnJvciA9IC1FRFFVT1Q7Ci0JCQkJaWYgKHZmc19kcV9hbGxvY19ibG9jayhpbm9kZSwgMSkpCisJCQkJZXJyb3IgPSBkcXVvdF9hbGxvY19ibG9jayhpbm9kZSwgMSk7CisJCQkJaWYgKGVycm9yKQogCQkJCQlnb3RvIGNsZWFudXA7CiAJCQkJZXJyb3IgPSBleHQzX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsCiAJCQkJCQkJCSAgICAgIG5ld19iaCk7CkBAIC04NTAsNyArODUwLDcgQEAKIAlyZXR1cm4gZXJyb3I7CiAKIGNsZWFudXBfZHF1b3Q6Ci0JdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIDEpOworCWRxdW90X2ZyZWVfYmxvY2soaW5vZGUsIDEpOwogCWdvdG8gY2xlYW51cDsKIAogYmFkX2Jsb2NrOgpAQCAtODgyLDcgKzg4Miw3IEBACiAJaXMtPnMuYmFzZSA9IGlzLT5zLmZpcnN0ID0gSUZJUlNUKGhlYWRlcik7CiAJaXMtPnMuaGVyZSA9IGlzLT5zLmZpcnN0OwogCWlzLT5zLmVuZCA9ICh2b2lkICopcmF3X2lub2RlICsgRVhUM19TQihpbm9kZS0+aV9zYiktPnNfaW5vZGVfc2l6ZTsKLQlpZiAoRVhUM19JKGlub2RlKS0+aV9zdGF0ZSAmIEVYVDNfU1RBVEVfWEFUVFIpIHsKKwlpZiAoZXh0M190ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQzX1NUQVRFX1hBVFRSKSkgewogCQllcnJvciA9IGV4dDNfeGF0dHJfY2hlY2tfbmFtZXMoSUZJUlNUKGhlYWRlciksIGlzLT5zLmVuZCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKQEAgLTkxNCwxMCArOTE0LDEwIEBACiAJaGVhZGVyID0gSUhEUihpbm9kZSwgZXh0M19yYXdfaW5vZGUoJmlzLT5pbG9jKSk7CiAJaWYgKCFJU19MQVNUX0VOVFJZKHMtPmZpcnN0KSkgewogCQloZWFkZXItPmhfbWFnaWMgPSBjcHVfdG9fbGUzMihFWFQzX1hBVFRSX01BR0lDKTsKLQkJRVhUM19JKGlub2RlKS0+aV9zdGF0ZSB8PSBFWFQzX1NUQVRFX1hBVFRSOworCQlleHQzX3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUM19TVEFURV9YQVRUUik7CiAJfSBlbHNlIHsKIAkJaGVhZGVyLT5oX21hZ2ljID0gY3B1X3RvX2xlMzIoMCk7Ci0JCUVYVDNfSShpbm9kZSktPmlfc3RhdGUgJj0gfkVYVDNfU1RBVEVfWEFUVFI7CisJCWV4dDNfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDNfU1RBVEVfWEFUVFIpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTk2NywxMCArOTY3LDEwIEBACiAJaWYgKGVycm9yKQogCQlnb3RvIGNsZWFudXA7CiAKLQlpZiAoRVhUM19JKGlub2RlKS0+aV9zdGF0ZSAmIEVYVDNfU1RBVEVfTkVXKSB7CisJaWYgKGV4dDNfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUM19TVEFURV9ORVcpKSB7CiAJCXN0cnVjdCBleHQzX2lub2RlICpyYXdfaW5vZGUgPSBleHQzX3Jhd19pbm9kZSgmaXMuaWxvYyk7CiAJCW1lbXNldChyYXdfaW5vZGUsIDAsIEVYVDNfU0IoaW5vZGUtPmlfc2IpLT5zX2lub2RlX3NpemUpOwotCQlFWFQzX0koaW5vZGUpLT5pX3N0YXRlICY9IH5FWFQzX1NUQVRFX05FVzsKKwkJZXh0M19jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUM19TVEFURV9ORVcpOwogCX0KIAogCWVycm9yID0gZXh0M194YXR0cl9pYm9keV9maW5kKGlub2RlLCAmaSwgJmlzKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvYmFsbG9jLmMgYi9mcy9leHQ0L2JhbGxvYy5jCmluZGV4IDIyYmM3NDMuLmQyZjM3YTUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvYmFsbG9jLmMKKysrIGIvZnMvZXh0NC9iYWxsb2MuYwpAQCAtOTcsOCArOTcsOCBAQAogCQkvKiBJZiBjaGVja3N1bSBpcyBiYWQgbWFyayBhbGwgYmxvY2tzIHVzZWQgdG8gcHJldmVudCBhbGxvY2F0aW9uCiAJCSAqIGVzc2VudGlhbGx5IGltcGxlbWVudGluZyBhIHBlci1ncm91cCByZWFkLW9ubHkgZmxhZy4gKi8KIAkJaWYgKCFleHQ0X2dyb3VwX2Rlc2NfY3N1bV92ZXJpZnkoc2JpLCBibG9ja19ncm91cCwgZ2RwKSkgewotCQkJZXh0NF9lcnJvcihzYiwgX19mdW5jX18sCi0JCQkJICAiQ2hlY2tzdW0gYmFkIGZvciBncm91cCAldSIsIGJsb2NrX2dyb3VwKTsKKwkJCWV4dDRfZXJyb3Ioc2IsICJDaGVja3N1bSBiYWQgZm9yIGdyb3VwICV1IiwKKwkJCQkJYmxvY2tfZ3JvdXApOwogCQkJZXh0NF9mcmVlX2Jsa3Nfc2V0KHNiLCBnZHAsIDApOwogCQkJZXh0NF9mcmVlX2lub2Rlc19zZXQoc2IsIGdkcCwgMCk7CiAJCQlleHQ0X2l0YWJsZV91bnVzZWRfc2V0KHNiLCBnZHAsIDApOwpAQCAtMTMwLDggKzEzMCw3IEBACiAJCSAqIHRvIG1ha2Ugc3VyZSB3ZSBjYWxjdWxhdGUgdGhlIHJpZ2h0IGZyZWUgYmxvY2tzCiAJCSAqLwogCQlncm91cF9ibG9ja3MgPSBleHQ0X2Jsb2Nrc19jb3VudChzYmktPnNfZXMpIC0KLQkJCWxlMzJfdG9fY3B1KHNiaS0+c19lcy0+c19maXJzdF9kYXRhX2Jsb2NrKSAtCi0JCQkoRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSAqIChuZ3JvdXBzIC0gMSkpOworCQkJZXh0NF9ncm91cF9maXJzdF9ibG9ja19ubyhzYiwgbmdyb3VwcyAtIDEpOwogCX0gZWxzZSB7CiAJCWdyb3VwX2Jsb2NrcyA9IEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYik7CiAJfQpAQCAtMTg5LDkgKzE4OCw2IEBACiAgKiB3aGVuIGEgZmlsZSBzeXN0ZW0gaXMgbW91bnRlZCAoc2VlIGV4dDRfZmlsbF9zdXBlcikuCiAgKi8KIAotCi0jZGVmaW5lIGluX3JhbmdlKGIsIGZpcnN0LCBsZW4pCSgoYikgPj0gKGZpcnN0KSAmJiAoYikgPD0gKGZpcnN0KSArIChsZW4pIC0gMSkKLQogLyoqCiAgKiBleHQ0X2dldF9ncm91cF9kZXNjKCkgLS0gbG9hZCBncm91cCBkZXNjcmlwdG9yIGZyb20gZGlzawogICogQHNiOgkJCXN1cGVyIGJsb2NrCkBAIC0yMTAsMTAgKzIwNiw4IEBACiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7CiAKIAlpZiAoYmxvY2tfZ3JvdXAgPj0gbmdyb3VwcykgewotCQlleHQ0X2Vycm9yKHNiLCAiZXh0NF9nZXRfZ3JvdXBfZGVzYyIsCi0JCQkgICAiYmxvY2tfZ3JvdXAgPj0gZ3JvdXBzX2NvdW50IC0gIgotCQkJICAgImJsb2NrX2dyb3VwID0gJXUsIGdyb3Vwc19jb3VudCA9ICV1IiwKLQkJCSAgIGJsb2NrX2dyb3VwLCBuZ3JvdXBzKTsKKwkJZXh0NF9lcnJvcihzYiwgImJsb2NrX2dyb3VwID49IGdyb3Vwc19jb3VudCAtIGJsb2NrX2dyb3VwID0gJXUsIgorCQkJICAgIiBncm91cHNfY291bnQgPSAldSIsIGJsb2NrX2dyb3VwLCBuZ3JvdXBzKTsKIAogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0yMjEsOCArMjE1LDcgQEAKIAlncm91cF9kZXNjID0gYmxvY2tfZ3JvdXAgPj4gRVhUNF9ERVNDX1BFUl9CTE9DS19CSVRTKHNiKTsKIAlvZmZzZXQgPSBibG9ja19ncm91cCAmIChFWFQ0X0RFU0NfUEVSX0JMT0NLKHNiKSAtIDEpOwogCWlmICghc2JpLT5zX2dyb3VwX2Rlc2NbZ3JvdXBfZGVzY10pIHsKLQkJZXh0NF9lcnJvcihzYiwgImV4dDRfZ2V0X2dyb3VwX2Rlc2MiLAotCQkJICAgIkdyb3VwIGRlc2NyaXB0b3Igbm90IGxvYWRlZCAtICIKKwkJZXh0NF9lcnJvcihzYiwgIkdyb3VwIGRlc2NyaXB0b3Igbm90IGxvYWRlZCAtICIKIAkJCSAgICJibG9ja19ncm91cCA9ICV1LCBncm91cF9kZXNjID0gJXUsIGRlc2MgPSAldSIsCiAJCQkgICBibG9ja19ncm91cCwgZ3JvdXBfZGVzYywgb2Zmc2V0KTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0yODIsOSArMjc1LDcgQEAKIAkJcmV0dXJuIDE7CiAKIGVycl9vdXQ6Ci0JZXh0NF9lcnJvcihzYiwgX19mdW5jX18sCi0JCQkiSW52YWxpZCBibG9jayBiaXRtYXAgLSAiCi0JCQkiYmxvY2tfZ3JvdXAgPSAlZCwgYmxvY2sgPSAlbGx1IiwKKwlleHQ0X2Vycm9yKHNiLCAiSW52YWxpZCBibG9jayBiaXRtYXAgLSBibG9ja19ncm91cCA9ICVkLCBibG9jayA9ICVsbHUiLAogCQkJYmxvY2tfZ3JvdXAsIGJpdG1hcF9ibGspOwogCXJldHVybiAwOwogfQpAQCAtMzExLDggKzMwMiw3IEBACiAJYml0bWFwX2JsayA9IGV4dDRfYmxvY2tfYml0bWFwKHNiLCBkZXNjKTsKIAliaCA9IHNiX2dldGJsayhzYiwgYml0bWFwX2Jsayk7CiAJaWYgKHVubGlrZWx5KCFiaCkpIHsKLQkJZXh0NF9lcnJvcihzYiwgX19mdW5jX18sCi0JCQkgICAgIkNhbm5vdCByZWFkIGJsb2NrIGJpdG1hcCAtICIKKwkJZXh0NF9lcnJvcihzYiwgIkNhbm5vdCByZWFkIGJsb2NrIGJpdG1hcCAtICIKIAkJCSAgICAiYmxvY2tfZ3JvdXAgPSAldSwgYmxvY2tfYml0bWFwID0gJWxsdSIsCiAJCQkgICAgYmxvY2tfZ3JvdXAsIGJpdG1hcF9ibGspOwogCQlyZXR1cm4gTlVMTDsKQEAgLTM1NCw4ICszNDQsNyBAQAogCXNldF9iaXRtYXBfdXB0b2RhdGUoYmgpOwogCWlmIChiaF9zdWJtaXRfcmVhZChiaCkgPCAwKSB7CiAJCXB1dF9iaChiaCk7Ci0JCWV4dDRfZXJyb3Ioc2IsIF9fZnVuY19fLAotCQkJICAgICJDYW5ub3QgcmVhZCBibG9jayBiaXRtYXAgLSAiCisJCWV4dDRfZXJyb3Ioc2IsICJDYW5ub3QgcmVhZCBibG9jayBiaXRtYXAgLSAiCiAJCQkgICAgImJsb2NrX2dyb3VwID0gJXUsIGJsb2NrX2JpdG1hcCA9ICVsbHUiLAogCQkJICAgIGJsb2NrX2dyb3VwLCBiaXRtYXBfYmxrKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC00MTksOCArNDA4LDcgQEAKIAkgICAgaW5fcmFuZ2UoYmxvY2ssIGV4dDRfaW5vZGVfdGFibGUoc2IsIGRlc2MpLCBzYmktPnNfaXRiX3Blcl9ncm91cCkgfHwKIAkgICAgaW5fcmFuZ2UoYmxvY2sgKyBjb3VudCAtIDEsIGV4dDRfaW5vZGVfdGFibGUoc2IsIGRlc2MpLAogCQkgICAgIHNiaS0+c19pdGJfcGVyX2dyb3VwKSkgewotCQlleHQ0X2Vycm9yKHNiLCBfX2Z1bmNfXywKLQkJCSAgICJBZGRpbmcgYmxvY2tzIGluIHN5c3RlbSB6b25lcyAtICIKKwkJZXh0NF9lcnJvcihzYiwgIkFkZGluZyBibG9ja3MgaW4gc3lzdGVtIHpvbmVzIC0gIgogCQkJICAgIkJsb2NrID0gJWxsdSwgY291bnQgPSAlbHUiLAogCQkJICAgYmxvY2ssIGNvdW50KTsKIAkJZ290byBlcnJvcl9yZXR1cm47CkBAIC00NTMsOCArNDQxLDcgQEAKIAkJQlVGRkVSX1RSQUNFKGJpdG1hcF9iaCwgImNsZWFyIGJpdCIpOwogCQlpZiAoIWV4dDRfY2xlYXJfYml0X2F0b21pYyhleHQ0X2dyb3VwX2xvY2tfcHRyKHNiLCBibG9ja19ncm91cCksCiAJCQkJCQliaXQgKyBpLCBiaXRtYXBfYmgtPmJfZGF0YSkpIHsKLQkJCWV4dDRfZXJyb3Ioc2IsIF9fZnVuY19fLAotCQkJCSAgICJiaXQgYWxyZWFkeSBjbGVhcmVkIGZvciBibG9jayAlbGx1IiwKKwkJCWV4dDRfZXJyb3Ioc2IsICJiaXQgYWxyZWFkeSBjbGVhcmVkIGZvciBibG9jayAlbGx1IiwKIAkJCQkgICAoZXh0NF9mc2Jsa190KShibG9jayArIGkpKTsKIAkJCUJVRkZFUl9UUkFDRShiaXRtYXBfYmgsICJiaXQgYWxyZWFkeSBjbGVhcmVkIik7CiAJCX0gZWxzZSB7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2Jsb2NrX3ZhbGlkaXR5LmMgYi9mcy9leHQ0L2Jsb2NrX3ZhbGlkaXR5LmMKaW5kZXggYTYwYWI5YS4uOTgzZjBlMSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9ibG9ja192YWxpZGl0eS5jCisrKyBiL2ZzL2V4dDQvYmxvY2tfdmFsaWRpdHkuYwpAQCAtMjA1LDE0ICsyMDUsMTQgQEAKIAkJZW50cnkgPSByYl9lbnRyeShuLCBzdHJ1Y3QgZXh0NF9zeXN0ZW1fem9uZSwgbm9kZSk7CiAJCWttZW1fY2FjaGVfZnJlZShleHQ0X3N5c3RlbV96b25lX2NhY2hlcCwgZW50cnkpOwogCQlpZiAoIXBhcmVudCkKLQkJCUVYVDRfU0Ioc2IpLT5zeXN0ZW1fYmxrcy5yYl9ub2RlID0gTlVMTDsKKwkJCUVYVDRfU0Ioc2IpLT5zeXN0ZW1fYmxrcyA9IFJCX1JPT1Q7CiAJCWVsc2UgaWYgKHBhcmVudC0+cmJfbGVmdCA9PSBuKQogCQkJcGFyZW50LT5yYl9sZWZ0ID0gTlVMTDsKIAkJZWxzZSBpZiAocGFyZW50LT5yYl9yaWdodCA9PSBuKQogCQkJcGFyZW50LT5yYl9yaWdodCA9IE5VTEw7CiAJCW4gPSBwYXJlbnQ7CiAJfQotCUVYVDRfU0Ioc2IpLT5zeXN0ZW1fYmxrcy5yYl9ub2RlID0gTlVMTDsKKwlFWFQ0X1NCKHNiKS0+c3lzdGVtX2Jsa3MgPSBSQl9ST09UOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9kaXIuYyBiL2ZzL2V4dDQvZGlyLmMKaW5kZXggOWRjOTMxNjguLjg2Y2I2ZDggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZGlyLmMKKysrIGIvZnMvZXh0NC9kaXIuYwpAQCAtODMsMTAgKzgzLDEyIEBACiAJCWVycm9yX21zZyA9ICJpbm9kZSBvdXQgb2YgYm91bmRzIjsKIAogCWlmIChlcnJvcl9tc2cgIT0gTlVMTCkKLQkJZXh0NF9lcnJvcihkaXItPmlfc2IsIGZ1bmN0aW9uLAotCQkJImJhZCBlbnRyeSBpbiBkaXJlY3RvcnkgIyVsdTogJXMgLSAiCi0JCQkib2Zmc2V0PSV1LCBpbm9kZT0ldSwgcmVjX2xlbj0lZCwgbmFtZV9sZW49JWQiLAotCQkJZGlyLT5pX2lubywgZXJyb3JfbXNnLCBvZmZzZXQsCisJCV9fZXh0NF9lcnJvcihkaXItPmlfc2IsIGZ1bmN0aW9uLAorCQkJImJhZCBlbnRyeSBpbiBkaXJlY3RvcnkgIyVsdTogJXMgLSBibG9jaz0lbGx1IgorCQkJIm9mZnNldD0ldSgldSksIGlub2RlPSV1LCByZWNfbGVuPSVkLCBuYW1lX2xlbj0lZCIsCisJCQlkaXItPmlfaW5vLCBlcnJvcl9tc2csIAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgYmgtPmJfYmxvY2tuciwgICAgIAorCQkJKHVuc2lnbmVkKSAob2Zmc2V0JWJoLT5iX3NpemUpLCBvZmZzZXQsCiAJCQlsZTMyX3RvX2NwdShkZS0+aW5vZGUpLAogCQkJcmxlbiwgZGUtPm5hbWVfbGVuKTsKIAlyZXR1cm4gZXJyb3JfbXNnID09IE5VTEwgPyAxIDogMDsKQEAgLTE1MCw3ICsxNTIsNyBAQAogCQkgKi8KIAkJaWYgKCFiaCkgewogCQkJaWYgKCFkaXJfaGFzX2Vycm9yKSB7Ci0JCQkJZXh0NF9lcnJvcihzYiwgX19mdW5jX18sICJkaXJlY3RvcnkgIyVsdSAiCisJCQkJZXh0NF9lcnJvcihzYiwgImRpcmVjdG9yeSAjJWx1ICIKIAkJCQkJICAgImNvbnRhaW5zIGEgaG9sZSBhdCBvZmZzZXQgJUx1IiwKIAkJCQkJICAgaW5vZGUtPmlfaW5vLAogCQkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKSBmaWxwLT5mX3Bvcyk7CkBAIC0zMDMsNyArMzA1LDcgQEAKIAkJCWtmcmVlKG9sZCk7CiAJCX0KIAkJaWYgKCFwYXJlbnQpCi0JCQlyb290LT5yYl9ub2RlID0gTlVMTDsKKwkJCSpyb290ID0gUkJfUk9PVDsKIAkJZWxzZSBpZiAocGFyZW50LT5yYl9sZWZ0ID09IG4pCiAJCQlwYXJlbnQtPnJiX2xlZnQgPSBOVUxMOwogCQllbHNlIGlmIChwYXJlbnQtPnJiX3JpZ2h0ID09IG4pCmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oCmluZGV4IDg3NGQxNjkuLmJmOTM4Y2YgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCisrKyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC01Myw2ICs1MywxMiBAQAogI2RlZmluZSBleHQ0X2RlYnVnKGYsIGEuLi4pCWRvIHt9IHdoaWxlICgwKQogI2VuZGlmCiAKKyNkZWZpbmUgRVhUNF9FUlJPUl9JTk9ERShpbm9kZSwgZm10LCBhLi4uKSBcCisJZXh0NF9lcnJvcl9pbm9kZShfX2Z1bmNfXywgKGlub2RlKSwgKGZtdCksICMjIGEpOworCisjZGVmaW5lIEVYVDRfRVJST1JfRklMRShmaWxlLCBmbXQsIGEuLi4pCVwKKwlleHQ0X2Vycm9yX2ZpbGUoX19mdW5jX18sIChmaWxlKSwgKGZtdCksICMjIGEpOworCiAvKiBkYXRhIHR5cGUgZm9yIGJsb2NrIG9mZnNldCBvZiBibG9jayBncm91cCAqLwogdHlwZWRlZiBpbnQgZXh0NF9ncnBibGtfdDsKIApAQCAtMTMzLDE0ICsxMzksMTQgQEAKIAlpbnQgcGFnZXNfd3JpdHRlbjsKIAlpbnQgcmV0dmFsOwogfTsKLSNkZWZpbmUJRElPX0FJT19VTldSSVRURU4JMHgxCisjZGVmaW5lCUVYVDRfSU9fVU5XUklUVEVOCTB4MQogdHlwZWRlZiBzdHJ1Y3QgZXh0NF9pb19lbmQgewogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsJCS8qIHBlci1maWxlIGZpbmlzaGVkIEFJTyBsaXN0ICovCiAJc3RydWN0IGlub2RlCQkqaW5vZGU7CQkvKiBmaWxlIGJlaW5nIHdyaXR0ZW4gdG8gKi8KIAl1bnNpZ25lZCBpbnQJCWZsYWc7CQkvKiB1bndyaXR0ZW4gb3Igbm90ICovCi0JaW50CQkJZXJyb3I7CQkvKiBJL08gZXJyb3IgY29kZSAqLwotCWV4dDRfbGJsa190CQlvZmZzZXQ7CQkvKiBvZmZzZXQgaW4gdGhlIGZpbGUgKi8KLQlzaXplX3QJCQlzaXplOwkJLyogc2l6ZSBvZiB0aGUgZXh0ZW50ICovCisJc3RydWN0IHBhZ2UJCSpwYWdlOwkJLyogcGFnZSBzdHJ1Y3QgZm9yIGJ1ZmZlciB3cml0ZSAqLworCWxvZmZfdAkJCW9mZnNldDsJCS8qIG9mZnNldCBpbiB0aGUgZmlsZSAqLworCXNzaXplX3QJCQlzaXplOwkJLyogc2l6ZSBvZiB0aGUgZXh0ZW50ICovCiAJc3RydWN0IHdvcmtfc3RydWN0CXdvcms7CQkvKiBkYXRhIHdvcmsgcXVldWUgKi8KIH0gZXh0NF9pb19lbmRfdDsKIApAQCAtMjg0LDEwICsyOTAsMTIgQEAKICNkZWZpbmUgRVhUNF9UT1BESVJfRkwJCQkweDAwMDIwMDAwIC8qIFRvcCBvZiBkaXJlY3RvcnkgaGllcmFyY2hpZXMqLwogI2RlZmluZSBFWFQ0X0hVR0VfRklMRV9GTCAgICAgICAgICAgICAgIDB4MDAwNDAwMDAgLyogU2V0IHRvIGVhY2ggaHVnZSBmaWxlICovCiAjZGVmaW5lIEVYVDRfRVhURU5UU19GTAkJCTB4MDAwODAwMDAgLyogSW5vZGUgdXNlcyBleHRlbnRzICovCisjZGVmaW5lIEVYVDRfRUFfSU5PREVfRkwJICAgICAgICAweDAwMjAwMDAwIC8qIElub2RlIHVzZWQgZm9yIGxhcmdlIEVBICovCisjZGVmaW5lIEVYVDRfRU9GQkxPQ0tTX0ZMCQkweDAwNDAwMDAwIC8qIEJsb2NrcyBhbGxvY2F0ZWQgYmV5b25kIEVPRiAqLwogI2RlZmluZSBFWFQ0X1JFU0VSVkVEX0ZMCQkweDgwMDAwMDAwIC8qIHJlc2VydmVkIGZvciBleHQ0IGxpYiAqLwogCi0jZGVmaW5lIEVYVDRfRkxfVVNFUl9WSVNJQkxFCQkweDAwMEJERkZGIC8qIFVzZXIgdmlzaWJsZSBmbGFncyAqLwotI2RlZmluZSBFWFQ0X0ZMX1VTRVJfTU9ESUZJQUJMRQkJMHgwMDBCODBGRiAvKiBVc2VyIG1vZGlmaWFibGUgZmxhZ3MgKi8KKyNkZWZpbmUgRVhUNF9GTF9VU0VSX1ZJU0lCTEUJCTB4MDA0QkRGRkYgLyogVXNlciB2aXNpYmxlIGZsYWdzICovCisjZGVmaW5lIEVYVDRfRkxfVVNFUl9NT0RJRklBQkxFCQkweDAwNEI4MEZGIC8qIFVzZXIgbW9kaWZpYWJsZSBmbGFncyAqLwogCiAvKiBGbGFncyB0aGF0IHNob3VsZCBiZSBpbmhlcml0ZWQgYnkgbmV3IGlub2RlcyBmcm9tIHRoZWlyIHBhcmVudC4gKi8KICNkZWZpbmUgRVhUNF9GTF9JTkhFUklURUQgKEVYVDRfU0VDUk1fRkwgfCBFWFQ0X1VOUk1fRkwgfCBFWFQ0X0NPTVBSX0ZMIHxcCkBAIC0zMTMsMTcgKzMyMSw2IEBACiAJCXJldHVybiBmbGFncyAmIEVYVDRfT1RIRVJfRkxNQVNLOwogfQogCi0vKgotICogSW5vZGUgZHluYW1pYyBzdGF0ZSBmbGFncwotICovCi0jZGVmaW5lIEVYVDRfU1RBVEVfSkRBVEEJCTB4MDAwMDAwMDEgLyogam91cm5hbGVkIGRhdGEgZXhpc3RzICovCi0jZGVmaW5lIEVYVDRfU1RBVEVfTkVXCQkJMHgwMDAwMDAwMiAvKiBpbm9kZSBpcyBuZXdseSBjcmVhdGVkICovCi0jZGVmaW5lIEVYVDRfU1RBVEVfWEFUVFIJCTB4MDAwMDAwMDQgLyogaGFzIGluLWlub2RlIHhhdHRycyAqLwotI2RlZmluZSBFWFQ0X1NUQVRFX05PX0VYUEFORAkJMHgwMDAwMDAwOCAvKiBObyBzcGFjZSBmb3IgZXhwYW5zaW9uICovCi0jZGVmaW5lIEVYVDRfU1RBVEVfREFfQUxMT0NfQ0xPU0UJMHgwMDAwMDAxMCAvKiBBbGxvYyBEQSBibGtzIG9uIGNsb3NlICovCi0jZGVmaW5lIEVYVDRfU1RBVEVfRVhUX01JR1JBVEUJCTB4MDAwMDAwMjAgLyogSW5vZGUgaXMgbWlncmF0aW5nICovCi0jZGVmaW5lIEVYVDRfU1RBVEVfRElPX1VOV1JJVFRFTgkweDAwMDAwMDQwIC8qIG5lZWQgY29udmVydCBvbiBkaW8gZG9uZSovCi0KIC8qIFVzZWQgdG8gcGFzcyBncm91cCBkZXNjcmlwdG9yIGRhdGEgd2hlbiBvbmxpbmUgcmVzaXplIGlzIGRvbmUgKi8KIHN0cnVjdCBleHQ0X25ld19ncm91cF9pbnB1dCB7CiAJX191MzIgZ3JvdXA7CQkvKiBHcm91cCBudW1iZXIgZm9yIHRoaXMgZGF0YSAqLwpAQCAtMzY0LDE5ICszNjEsMjAgQEAKIAkvKiBjYWxsZXIgaXMgZnJvbSB0aGUgZGlyZWN0IElPIHBhdGgsIHJlcXVlc3QgdG8gY3JlYXRpb24gb2YgYW4KIAl1bml0aWFsaXplZCBleHRlbnRzIGlmIG5vdCBhbGxvY2F0ZWQsIHNwbGl0IHRoZSB1bmluaXRpYWxpemVkCiAJZXh0ZW50IGlmIGJsb2NrcyBoYXMgYmVlbiBwcmVhbGxvY2F0ZWQgYWxyZWFkeSovCi0jZGVmaW5lIEVYVDRfR0VUX0JMT0NLU19ESU8JCQkweDAwMDgKKyNkZWZpbmUgRVhUNF9HRVRfQkxPQ0tTX1BSRV9JTwkJCTB4MDAwOAogI2RlZmluZSBFWFQ0X0dFVF9CTE9DS1NfQ09OVkVSVAkJCTB4MDAxMAotI2RlZmluZSBFWFQ0X0dFVF9CTE9DS1NfRElPX0NSRUFURV9FWFQJCShFWFQ0X0dFVF9CTE9DS1NfRElPfFwKKyNkZWZpbmUgRVhUNF9HRVRfQkxPQ0tTX0lPX0NSRUFURV9FWFQJCShFWFQ0X0dFVF9CTE9DS1NfUFJFX0lPfFwKIAkJCQkJIEVYVDRfR0VUX0JMT0NLU19DUkVBVEVfVU5JTklUX0VYVCkKLQkvKiBDb252ZXJ0IGV4dGVudCB0byBpbml0aWFsaXplZCBhZnRlciBkaXJlY3QgSU8gY29tcGxldGUgKi8KLSNkZWZpbmUgRVhUNF9HRVRfQkxPQ0tTX0RJT19DT05WRVJUX0VYVAkJKEVYVDRfR0VUX0JMT0NLU19DT05WRVJUfFwKLQkJCQkJIEVYVDRfR0VUX0JMT0NLU19ESU9fQ1JFQVRFX0VYVCkKKwkvKiBDb252ZXJ0IGV4dGVudCB0byBpbml0aWFsaXplZCBhZnRlciBJTyBjb21wbGV0ZSAqLworI2RlZmluZSBFWFQ0X0dFVF9CTE9DS1NfSU9fQ09OVkVSVF9FWFQJCShFWFQ0X0dFVF9CTE9DS1NfQ09OVkVSVHxcCisJCQkJCSBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFX1VOSU5JVF9FWFQpCiAKIC8qCiAgKiBGbGFncyB1c2VkIGJ5IGV4dDRfZnJlZV9ibG9ja3MKICAqLwogI2RlZmluZSBFWFQ0X0ZSRUVfQkxPQ0tTX01FVEFEQVRBCTB4MDAwMQogI2RlZmluZSBFWFQ0X0ZSRUVfQkxPQ0tTX0ZPUkdFVAkJMHgwMDAyCisjZGVmaW5lIEVYVDRfRlJFRV9CTE9DS1NfVkFMSURBVEVECTB4MDAwNAogCiAvKgogICogaW9jdGwgY29tbWFuZHMKQEAgLTYzMCw3ICs2MjgsNyBAQAogCSAqIG5lYXIgdG8gdGhlaXIgcGFyZW50IGRpcmVjdG9yeSdzIGlub2RlLgogCSAqLwogCWV4dDRfZ3JvdXBfdAlpX2Jsb2NrX2dyb3VwOwotCV9fdTMyCWlfc3RhdGU7CQkvKiBEeW5hbWljIHN0YXRlIGZsYWdzIGZvciBleHQ0ICovCisJdW5zaWduZWQgbG9uZwlpX3N0YXRlX2ZsYWdzOwkJLyogRHluYW1pYyBzdGF0ZSBmbGFncyAqLwogCiAJZXh0NF9sYmxrX3QJCWlfZGlyX3N0YXJ0X2xvb2t1cDsKICNpZmRlZiBDT05GSUdfRVhUNF9GU19YQVRUUgpAQCAtNzA4LDggKzcwNiw5IEBACiAJcXNpemVfdCBpX3Jlc2VydmVkX3F1b3RhOwogI2VuZGlmCiAKLQkvKiBjb21wbGV0ZWQgYXN5bmMgRElPcyB0aGF0IG1pZ2h0IG5lZWQgdW53cml0dGVuIGV4dGVudHMgaGFuZGxpbmcgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGlfYWlvX2Rpb19jb21wbGV0ZV9saXN0OworCS8qIGNvbXBsZXRlZCBJT3MgdGhhdCBtaWdodCBuZWVkIHVud3JpdHRlbiBleHRlbnRzIGhhbmRsaW5nICovCisJc3RydWN0IGxpc3RfaGVhZCBpX2NvbXBsZXRlZF9pb19saXN0OworCXNwaW5sb2NrX3QgaV9jb21wbGV0ZWRfaW9fbG9jazsKIAkvKiBjdXJyZW50IGlvX2VuZCBzdHJ1Y3R1cmUgZm9yIGFzeW5jIERJTyB3cml0ZSovCiAJZXh0NF9pb19lbmRfdCAqY3VyX2Fpb19kaW87CiAKQEAgLTc2MCw2ICs3NTksNyBAQAogI2RlZmluZSBFWFQ0X01PVU5UX1FVT1RBCQkweDgwMDAwIC8qIFNvbWUgcXVvdGEgb3B0aW9uIHNldCAqLwogI2RlZmluZSBFWFQ0X01PVU5UX1VTUlFVT1RBCQkweDEwMDAwMCAvKiAib2xkIiB1c2VyIHF1b3RhICovCiAjZGVmaW5lIEVYVDRfTU9VTlRfR1JQUVVPVEEJCTB4MjAwMDAwIC8qICJvbGQiIGdyb3VwIHF1b3RhICovCisjZGVmaW5lIEVYVDRfTU9VTlRfRElPUkVBRF9OT0xPQ0sJMHg0MDAwMDAgLyogRW5hYmxlIHN1cHBvcnQgZm9yIGRpbyByZWFkIG5vbG9ja2luZyAqLwogI2RlZmluZSBFWFQ0X01PVU5UX0pPVVJOQUxfQ0hFQ0tTVU0JMHg4MDAwMDAgLyogSm91cm5hbCBjaGVja3N1bXMgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9KT1VSTkFMX0FTWU5DX0NPTU1JVAkweDEwMDAwMDAgLyogSm91cm5hbCBBc3luYyBDb21taXQgKi8KICNkZWZpbmUgRVhUNF9NT1VOVF9JX1ZFUlNJT04gICAgICAgICAgICAweDIwMDAwMDAgLyogaV92ZXJzaW9uIHN1cHBvcnQgKi8KQEAgLTEwMTQsNyArMTAxNCw3IEBACiAJYXRvbWljX3Qgc19sb2NrX2J1c3k7CiAKIAkvKiBsb2NhbGl0eSBncm91cHMgKi8KLQlzdHJ1Y3QgZXh0NF9sb2NhbGl0eV9ncm91cCAqc19sb2NhbGl0eV9ncm91cHM7CisJc3RydWN0IGV4dDRfbG9jYWxpdHlfZ3JvdXAgX19wZXJjcHUgKnNfbG9jYWxpdHlfZ3JvdXBzOwogCiAJLyogZm9yIHdyaXRlIHN0YXRpc3RpY3MgKi8KIAl1bnNpZ25lZCBsb25nIHNfc2VjdG9yc193cml0dGVuX3N0YXJ0OwpAQCAtMTA1MCw2ICsxMDUwLDM0IEBACiAJCShpbm8gPj0gRVhUNF9GSVJTVF9JTk8oc2IpICYmCiAJCSBpbm8gPD0gbGUzMl90b19jcHUoRVhUNF9TQihzYiktPnNfZXMtPnNfaW5vZGVzX2NvdW50KSk7CiB9CisKKy8qCisgKiBJbm9kZSBkeW5hbWljIHN0YXRlIGZsYWdzCisgKi8KK2VudW0geworCUVYVDRfU1RBVEVfSkRBVEEsCQkvKiBqb3VybmFsZWQgZGF0YSBleGlzdHMgKi8KKwlFWFQ0X1NUQVRFX05FVywJCQkvKiBpbm9kZSBpcyBuZXdseSBjcmVhdGVkICovCisJRVhUNF9TVEFURV9YQVRUUiwJCS8qIGhhcyBpbi1pbm9kZSB4YXR0cnMgKi8KKwlFWFQ0X1NUQVRFX05PX0VYUEFORCwJCS8qIE5vIHNwYWNlIGZvciBleHBhbnNpb24gKi8KKwlFWFQ0X1NUQVRFX0RBX0FMTE9DX0NMT1NFLAkvKiBBbGxvYyBEQSBibGtzIG9uIGNsb3NlICovCisJRVhUNF9TVEFURV9FWFRfTUlHUkFURSwJCS8qIElub2RlIGlzIG1pZ3JhdGluZyAqLworCUVYVDRfU1RBVEVfRElPX1VOV1JJVFRFTiwJLyogbmVlZCBjb252ZXJ0IG9uIGRpbyBkb25lKi8KK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGV4dDRfdGVzdF9pbm9kZV9zdGF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgYml0KQoreworCXJldHVybiB0ZXN0X2JpdChiaXQsICZFWFQ0X0koaW5vZGUpLT5pX3N0YXRlX2ZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGV4dDRfc2V0X2lub2RlX3N0YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBiaXQpCit7CisJc2V0X2JpdChiaXQsICZFWFQ0X0koaW5vZGUpLT5pX3N0YXRlX2ZsYWdzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGJpdCkKK3sKKwljbGVhcl9iaXQoYml0LCAmRVhUNF9JKGlub2RlKS0+aV9zdGF0ZV9mbGFncyk7Cit9CiAjZWxzZQogLyogQXNzdW1lIHRoYXQgdXNlciBtb2RlIHByb2dyYW1zIGFyZSBwYXNzaW5nIGluIGFuIGV4dDRmcyBzdXBlcmJsb2NrLCBub3QKICAqIGEga2VybmVsIHN0cnVjdCBzdXBlcl9ibG9jay4gIFRoaXMgd2lsbCBhbGxvdyB1cyB0byBjYWxsIHRoZSBmZWF0dXJlLXRlc3QKQEAgLTExMjYsNiArMTE1NCw4IEBACiAjZGVmaW5lIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF82NEJJVAkJMHgwMDgwCiAjZGVmaW5lIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9NTVAgICAgICAgICAgICAgICAweDAxMDAKICNkZWZpbmUgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZMRVhfQkcJCTB4MDIwMAorI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRUFfSU5PREUJCTB4MDQwMCAvKiBFQSBpbiBpbm9kZSAqLworI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRElSREFUQQkJMHgxMDAwIC8qIGRhdGEgaW4gZGlyZW50ICovCiAKICNkZWZpbmUgRVhUNF9GRUFUVVJFX0NPTVBBVF9TVVBQCUVYVDJfRkVBVFVSRV9DT01QQVRfRVhUX0FUVFIKICNkZWZpbmUgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX1NVUFAJKEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRXwgXApAQCAtMTQxNiw3ICsxNDQ2LDcgQEAKIAkJCQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7CiAKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmV4dDRfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gaW50ICBleHQ0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpOworZXh0ZXJuIGludCAgZXh0NF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopOwogZXh0ZXJuIGludCAgZXh0NF9zZXRhdHRyKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOwogZXh0ZXJuIGludCAgZXh0NF9nZXRhdHRyKHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkJc3RydWN0IGtzdGF0ICpzdGF0KTsKQEAgLTE0MzksNyArMTQ2OSw3IEBACiAJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBsb2ZmX3QgZnJvbSk7CiBleHRlcm4gaW50IGV4dDRfcGFnZV9ta3dyaXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZik7CiBleHRlcm4gcXNpemVfdCAqZXh0NF9nZXRfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSk7Ci1leHRlcm4gaW50IGZsdXNoX2Fpb19kaW9fY29tcGxldGVkX0lPKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworZXh0ZXJuIGludCBmbHVzaF9jb21wbGV0ZWRfSU8oc3RydWN0IGlub2RlICppbm9kZSk7CiBleHRlcm4gdm9pZCBleHQ0X2RhX3VwZGF0ZV9yZXNlcnZlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCWludCB1c2VkLCBpbnQgcXVvdGFfY2xhaW0pOwogLyogaW9jdGwuYyAqLwpAQCAtMTQ2NSwxMyArMTQ5NSwyMCBAQAogCQkJCWV4dDRfZnNibGtfdCBuX2Jsb2Nrc19jb3VudCk7CiAKIC8qIHN1cGVyLmMgKi8KLWV4dGVybiB2b2lkIGV4dDRfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pCitleHRlcm4gdm9pZCBfX2V4dDRfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pCisJX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOworI2RlZmluZSBleHQ0X2Vycm9yKHNiLCBtZXNzYWdlLi4uKQlfX2V4dDRfZXJyb3Ioc2IsIF9fZnVuY19fLCAjIyBtZXNzYWdlKQorZXh0ZXJuIHZvaWQgZXh0NF9lcnJvcl9pbm9kZShjb25zdCBjaGFyICosIHN0cnVjdCBpbm9kZSAqLCBjb25zdCBjaGFyICosIC4uLikKKwlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CitleHRlcm4gdm9pZCBleHQ0X2Vycm9yX2ZpbGUoY29uc3QgY2hhciAqLCBzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyICosIC4uLikKIAlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CiBleHRlcm4gdm9pZCBfX2V4dDRfc3RkX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBjaGFyICosIGludCk7CiBleHRlcm4gdm9pZCBleHQ0X2Fib3J0KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKQogCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKLWV4dGVybiB2b2lkIGV4dDRfd2FybmluZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikKK2V4dGVybiB2b2lkIF9fZXh0NF93YXJuaW5nKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBjaGFyICosCisJCQkgIGNvbnN0IGNoYXIgKiwgLi4uKQogCV9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKKyNkZWZpbmUgZXh0NF93YXJuaW5nKHNiLCBtZXNzYWdlLi4uKQlfX2V4dDRfd2FybmluZyhzYiwgX19mdW5jX18sICMjIG1lc3NhZ2UpCiBleHRlcm4gdm9pZCBleHQ0X21zZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikKIAlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CiBleHRlcm4gdm9pZCBleHQ0X2dycF9sb2NrZWRfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICosIGV4dDRfZ3JvdXBfdCwKQEAgLTE3NDQsNyArMTc4MSw3IEBACiBleHRlcm4gbG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwKIAkJCSAgbG9mZl90IGxlbik7CiBleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LAotCQkJICBsb2ZmX3QgbGVuKTsKKwkJCSAgc3NpemVfdCBsZW4pOwogZXh0ZXJuIGludCBleHQ0X2dldF9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSAgIHNlY3Rvcl90IGJsb2NrLCB1bnNpZ25lZCBpbnQgbWF4X2Jsb2NrcywKIAkJCSAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCBmbGFncyk7CkBAIC0xNzU2LDYgKzE3OTMsMTUgQEAKIAkJCSAgICAgX191NjQgbGVuLCBfX3U2NCAqbW92ZWRfbGVuKTsKIAogCisvKiBCSF9VbmluaXQgZmxhZzogYmxvY2tzIGFyZSBhbGxvY2F0ZWQgYnV0IHVuaW5pdGlhbGl6ZWQgb24gZGlzayAqLworZW51bSBleHQ0X3N0YXRlX2JpdHMgeworCUJIX1VuaW5pdAkvKiBibG9ja3MgYXJlIGFsbG9jYXRlZCBidXQgdW5pbml0aWFsaXplZCBvbiBkaXNrICovCisJICA9IEJIX0pCRFByaXZhdGVTdGFydCwKK307CisKK0JVRkZFUl9GTlMoVW5pbml0LCB1bmluaXQpCitUQVNfQlVGRkVSX0ZOUyhVbmluaXQsIHVuaW5pdCkKKwogLyoKICAqIEFkZCBuZXcgbWV0aG9kIHRvIHRlc3Qgd2V0aGVyIGJsb2NrIGFuZCBpbm9kZSBiaXRtYXBzIGFyZSBwcm9wZXJseQogICogaW5pdGlhbGl6ZWQuIFdpdGggdW5pbml0X2JnIHJlYWRpbmcgdGhlIGJsb2NrIGZyb20gZGlzayBpcyBub3QgZW5vdWdoCkBAIC0xNzczLDYgKzE4MTksOCBAQAogCXNldF9iaXQoQkhfQklUTUFQX1VQVE9EQVRFLCAmKGJoKS0+Yl9zdGF0ZSk7CiB9CiAKKyNkZWZpbmUgaW5fcmFuZ2UoYiwgZmlyc3QsIGxlbikJKChiKSA+PSAoZmlyc3QpICYmIChiKSA8PSAoZmlyc3QpICsgKGxlbikgLSAxKQorCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYJLyogX0VYVDRfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0X2piZDIuYyBiL2ZzL2V4dDQvZXh0NF9qYmQyLmMKaW5kZXggYjU3ZTVjNy4uNTNkMjc2NCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0X2piZDIuYworKysgYi9mcy9leHQ0L2V4dDRfamJkMi5jCkBAIC0xMjUsMTQgKzEyNSwxNCBAQAogCQkJZXh0NF9qb3VybmFsX2Fib3J0X2hhbmRsZSh3aGVyZSwgX19mdW5jX18sIGJoLAogCQkJCQkJICBoYW5kbGUsIGVycik7CiAJfSBlbHNlIHsKLQkJaWYgKGlub2RlICYmIGJoKQorCQlpZiAoaW5vZGUpCiAJCQltYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZShiaCwgaW5vZGUpOwogCQllbHNlCiAJCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJCWlmIChpbm9kZSAmJiBpbm9kZV9uZWVkc19zeW5jKGlub2RlKSkgewogCQkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwogCQkJaWYgKGJ1ZmZlcl9yZXEoYmgpICYmICFidWZmZXJfdXB0b2RhdGUoYmgpKSB7Ci0JCQkJZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwgX19mdW5jX18sCisJCQkJZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwKIAkJCQkJICAgIklPIGVycm9yIHN5bmNpbmcgaW5vZGUsICIKIAkJCQkJICAgImlub2RlPSVsdSwgYmxvY2s9JWxsdSIsCiAJCQkJCSAgIGlub2RlLT5pX2lubywKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NF9qYmQyLmggYi9mcy9leHQ0L2V4dDRfamJkMi5oCmluZGV4IDA1ZWNhODEuLmI3OWFkNTEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NF9qYmQyLmgKKysrIGIvZnMvZXh0NC9leHQ0X2piZDIuaApAQCAtMzA0LDQgKzMwNCwyOCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogVGhpcyBmdW5jdGlvbiBjb250cm9scyB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgdHJ5IHRvIGdvIGRvd24gdGhlCisgKiBkaW9yZWFkX25vbG9jayBjb2RlIHBhdGhzLCB3aGljaCBtYWtlcyBpdCBzYWZlIHRvIGF2b2lkIHRha2luZworICogaV9tdXRleCBmb3IgZGlyZWN0IEkvTyByZWFkcy4gIFRoaXMgb25seSB3b3JrcyBmb3IgZXh0ZW50LWJhc2VkCisgKiBmaWxlcywgYW5kIGl0IGRvZXNuJ3Qgd29yayBmb3Igbm9iaCBvciBpZiBkYXRhIGpvdXJuYWxpbmcgaXMKKyAqIGVuYWJsZWQsIHNpbmNlIHRoZSBkaW9yZWFkX25vbG9jayBjb2RlIHVzZXMgYl9wcml2YXRlIHRvIHBhc3MKKyAqIGluZm9ybWF0aW9uIGJhY2sgdG8gdGhlIEkvTyBjb21wbGV0aW9uIGhhbmRsZXIsIGFuZCB0aGlzIGNvbmZsaWN0cworICogd2l0aCB0aGUgamJkJ3MgdXNlIG9mIGJfcHJpdmF0ZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZXh0NF9zaG91bGRfZGlvcmVhZF9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlpZiAoIXRlc3Rfb3B0KGlub2RlLT5pX3NiLCBESU9SRUFEX05PTE9DSykpCisJCXJldHVybiAwOworCWlmICh0ZXN0X29wdChpbm9kZS0+aV9zYiwgTk9CSCkpCisJCXJldHVybiAwOworCWlmICghU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIDA7CisJaWYgKCEoRVhUNF9JKGlub2RlKS0+aV9mbGFncyAmIEVYVDRfRVhURU5UU19GTCkpCisJCXJldHVybiAwOworCWlmIChleHQ0X3Nob3VsZF9qb3VybmFsX2RhdGEoaW5vZGUpKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gMTsKK30KKwogI2VuZGlmCS8qIF9FWFQ0X0pCRDJfSCAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuYwppbmRleCA3NjVhNDgyLi45NGM4ZWU4IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dGVudHMuYworKysgYi9mcy9leHQ0L2V4dGVudHMuYwpAQCAtMTk1LDggKzE5NSw3IEBACiAJCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKQogCQkJYmxvY2tfZ3JvdXArKzsKIAl9Ci0JYmdfc3RhcnQgPSAoYmxvY2tfZ3JvdXAgKiBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoaW5vZGUtPmlfc2IpKSArCi0JCWxlMzJfdG9fY3B1KEVYVDRfU0IoaW5vZGUtPmlfc2IpLT5zX2VzLT5zX2ZpcnN0X2RhdGFfYmxvY2spOworCWJnX3N0YXJ0ID0gZXh0NF9ncm91cF9maXJzdF9ibG9ja19ubyhpbm9kZS0+aV9zYiwgYmxvY2tfZ3JvdXApOwogCWxhc3RfYmxvY2sgPSBleHQ0X2Jsb2Nrc19jb3VudChFWFQ0X1NCKGlub2RlLT5pX3NiKS0+c19lcykgLSAxOwogCiAJLyoKQEAgLTQ0MCw3ICs0MzksNyBAQAogCXJldHVybiAwOwogCiBjb3JydXB0ZWQ6Ci0JZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwgZnVuY3Rpb24sCisJX19leHQ0X2Vycm9yKGlub2RlLT5pX3NiLCBmdW5jdGlvbiwKIAkJCSJiYWQgaGVhZGVyL2V4dGVudCBpbiBpbm9kZSAjJWx1OiAlcyAtIG1hZ2ljICV4LCAiCiAJCQkiZW50cmllcyAldSwgbWF4ICV1KCV1KSwgZGVwdGggJXUoJXUpIiwKIAkJCWlub2RlLT5pX2lubywgZXJyb3JfbXNnLCBsZTE2X3RvX2NwdShlaC0+ZWhfbWFnaWMpLApAQCAtNzAzLDcgKzcwMiwxMiBAQAogCQl9CiAJCWVoID0gZXh0X2Jsb2NrX2hkcihiaCk7CiAJCXBwb3MrKzsKLQkJQlVHX09OKHBwb3MgPiBkZXB0aCk7CisJCWlmICh1bmxpa2VseShwcG9zID4gZGVwdGgpKSB7CisJCQlwdXRfYmgoYmgpOworCQkJRVhUNF9FUlJPUl9JTk9ERShpbm9kZSwKKwkJCQkJICJwcG9zICVkID4gZGVwdGggJWQiLCBwcG9zLCBkZXB0aCk7CisJCQlnb3RvIGVycjsKKwkJfQogCQlwYXRoW3Bwb3NdLnBfYmggPSBiaDsKIAkJcGF0aFtwcG9zXS5wX2hkciA9IGVoOwogCQlpLS07CkBAIC03NDksNyArNzUzLDEyIEBACiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCUJVR19PTihsb2dpY2FsID09IGxlMzJfdG9fY3B1KGN1cnAtPnBfaWR4LT5laV9ibG9jaykpOworCWlmICh1bmxpa2VseShsb2dpY2FsID09IGxlMzJfdG9fY3B1KGN1cnAtPnBfaWR4LT5laV9ibG9jaykpKSB7CisJCUVYVDRfRVJST1JfSU5PREUoaW5vZGUsCisJCQkJICJsb2dpY2FsICVkID09IGVpX2Jsb2NrICVkISIsCisJCQkJIGxvZ2ljYWwsIGxlMzJfdG9fY3B1KGN1cnAtPnBfaWR4LT5laV9ibG9jaykpOworCQlyZXR1cm4gLUVJTzsKKwl9CiAJbGVuID0gRVhUX01BWF9JTkRFWChjdXJwLT5wX2hkcikgLSBjdXJwLT5wX2lkeDsKIAlpZiAobG9naWNhbCA+IGxlMzJfdG9fY3B1KGN1cnAtPnBfaWR4LT5laV9ibG9jaykpIHsKIAkJLyogaW5zZXJ0IGFmdGVyICovCkBAIC03NzksOSArNzg4LDE3IEBACiAJZXh0NF9pZHhfc3RvcmVfcGJsb2NrKGl4LCBwdHIpOwogCWxlMTZfYWRkX2NwdSgmY3VycC0+cF9oZHItPmVoX2VudHJpZXMsIDEpOwogCi0JQlVHX09OKGxlMTZfdG9fY3B1KGN1cnAtPnBfaGRyLT5laF9lbnRyaWVzKQotCQkJICAgICA+IGxlMTZfdG9fY3B1KGN1cnAtPnBfaGRyLT5laF9tYXgpKTsKLQlCVUdfT04oaXggPiBFWFRfTEFTVF9JTkRFWChjdXJwLT5wX2hkcikpOworCWlmICh1bmxpa2VseShsZTE2X3RvX2NwdShjdXJwLT5wX2hkci0+ZWhfZW50cmllcykKKwkJCSAgICAgPiBsZTE2X3RvX2NwdShjdXJwLT5wX2hkci0+ZWhfbWF4KSkpIHsKKwkJRVhUNF9FUlJPUl9JTk9ERShpbm9kZSwKKwkJCQkgImxvZ2ljYWwgJWQgPT0gZWlfYmxvY2sgJWQhIiwKKwkJCQkgbG9naWNhbCwgbGUzMl90b19jcHUoY3VycC0+cF9pZHgtPmVpX2Jsb2NrKSk7CisJCXJldHVybiAtRUlPOworCX0KKwlpZiAodW5saWtlbHkoaXggPiBFWFRfTEFTVF9JTkRFWChjdXJwLT5wX2hkcikpKSB7CisJCUVYVDRfRVJST1JfSU5PREUoaW5vZGUsICJpeCA+IEVYVF9MQVNUX0lOREVYISIpOworCQlyZXR1cm4gLUVJTzsKKwl9CiAKIAllcnIgPSBleHQ0X2V4dF9kaXJ0eShoYW5kbGUsIGlub2RlLCBjdXJwKTsKIAlleHQ0X3N0ZF9lcnJvcihpbm9kZS0+aV9zYiwgZXJyKTsKQEAgLTgxOSw3ICs4MzYsMTAgQEAKIAogCS8qIGlmIGN1cnJlbnQgbGVhZiB3aWxsIGJlIHNwbGl0LCB0aGVuIHdlIHNob3VsZCB1c2UKIAkgKiBib3JkZXIgZnJvbSBzcGxpdCBwb2ludCAqLwotCUJVR19PTihwYXRoW2RlcHRoXS5wX2V4dCA+IEVYVF9NQVhfRVhURU5UKHBhdGhbZGVwdGhdLnBfaGRyKSk7CisJaWYgKHVubGlrZWx5KHBhdGhbZGVwdGhdLnBfZXh0ID4gRVhUX01BWF9FWFRFTlQocGF0aFtkZXB0aF0ucF9oZHIpKSkgeworCQlFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLCAicF9leHQgPiBFWFRfTUFYX0VYVEVOVCEiKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCWlmIChwYXRoW2RlcHRoXS5wX2V4dCAhPSBFWFRfTUFYX0VYVEVOVChwYXRoW2RlcHRoXS5wX2hkcikpIHsKIAkJYm9yZGVyID0gcGF0aFtkZXB0aF0ucF9leHRbMV0uZWVfYmxvY2s7CiAJCWV4dF9kZWJ1ZygibGVhZiB3aWxsIGJlIHNwbGl0LiIKQEAgLTg2MCw3ICs4ODAsMTEgQEAKIAogCS8qIGluaXRpYWxpemUgbmV3IGxlYWYgKi8KIAluZXdibG9jayA9IGFibG9ja3NbLS1hXTsKLQlCVUdfT04obmV3YmxvY2sgPT0gMCk7CisJaWYgKHVubGlrZWx5KG5ld2Jsb2NrID09IDApKSB7CisJCUVYVDRfRVJST1JfSU5PREUoaW5vZGUsICJuZXdibG9jayA9PSAwISIpOworCQllcnIgPSAtRUlPOworCQlnb3RvIGNsZWFudXA7CisJfQogCWJoID0gc2JfZ2V0YmxrKGlub2RlLT5pX3NiLCBuZXdibG9jayk7CiAJaWYgKCFiaCkgewogCQllcnIgPSAtRUlPOwpAQCAtODgwLDcgKzkwNCwxNCBAQAogCWV4ID0gRVhUX0ZJUlNUX0VYVEVOVChuZWgpOwogCiAJLyogbW92ZSByZW1haW5kZXIgb2YgcGF0aFtkZXB0aF0gdG8gdGhlIG5ldyBsZWFmICovCi0JQlVHX09OKHBhdGhbZGVwdGhdLnBfaGRyLT5laF9lbnRyaWVzICE9IHBhdGhbZGVwdGhdLnBfaGRyLT5laF9tYXgpOworCWlmICh1bmxpa2VseShwYXRoW2RlcHRoXS5wX2hkci0+ZWhfZW50cmllcyAhPQorCQkgICAgIHBhdGhbZGVwdGhdLnBfaGRyLT5laF9tYXgpKSB7CisJCUVYVDRfRVJST1JfSU5PREUoaW5vZGUsICJlaF9lbnRyaWVzICVkICE9IGVoX21heCAlZCEiLAorCQkJCSBwYXRoW2RlcHRoXS5wX2hkci0+ZWhfZW50cmllcywKKwkJCQkgcGF0aFtkZXB0aF0ucF9oZHItPmVoX21heCk7CisJCWVyciA9IC1FSU87CisJCWdvdG8gY2xlYW51cDsKKwl9CiAJLyogc3RhcnQgY29weSBmcm9tIG5leHQgZXh0ZW50ICovCiAJLyogVE9ETzogd2UgY291bGQgZG8gaXQgYnkgc2luZ2xlIG1lbW1vdmUgKi8KIAltID0gMDsKQEAgLTkyNyw3ICs5NTgsMTEgQEAKIAogCS8qIGNyZWF0ZSBpbnRlcm1lZGlhdGUgaW5kZXhlcyAqLwogCWsgPSBkZXB0aCAtIGF0IC0gMTsKLQlCVUdfT04oayA8IDApOworCWlmICh1bmxpa2VseShrIDwgMCkpIHsKKwkJRVhUNF9FUlJPUl9JTk9ERShpbm9kZSwgImsgJWQgPCAwISIsIGspOworCQllcnIgPSAtRUlPOworCQlnb3RvIGNsZWFudXA7CisJfQogCWlmIChrKQogCQlleHRfZGVidWcoImNyZWF0ZSAlZCBpbnRlcm1lZGlhdGUgaW5kaWNlc1xuIiwgayk7CiAJLyogaW5zZXJ0IG5ldyBpbmRleCBpbnRvIGN1cnJlbnQgaW5kZXggYmxvY2sgKi8KQEAgLTk2NCw4ICs5OTksMTQgQEAKIAogCQlleHRfZGVidWcoImN1ciAweCVwLCBsYXN0IDB4JXBcbiIsIHBhdGhbaV0ucF9pZHgsCiAJCQkJRVhUX01BWF9JTkRFWChwYXRoW2ldLnBfaGRyKSk7Ci0JCUJVR19PTihFWFRfTUFYX0lOREVYKHBhdGhbaV0ucF9oZHIpICE9Ci0JCQkJRVhUX0xBU1RfSU5ERVgocGF0aFtpXS5wX2hkcikpOworCQlpZiAodW5saWtlbHkoRVhUX01BWF9JTkRFWChwYXRoW2ldLnBfaGRyKSAhPQorCQkJCQlFWFRfTEFTVF9JTkRFWChwYXRoW2ldLnBfaGRyKSkpIHsKKwkJCUVYVDRfRVJST1JfSU5PREUoaW5vZGUsCisJCQkJCSAiRVhUX01BWF9JTkRFWCAhPSBFWFRfTEFTVF9JTkRFWCBlZV9ibG9jayAlZCEiLAorCQkJCQkgbGUzMl90b19jcHUocGF0aFtpXS5wX2V4dC0+ZWVfYmxvY2spKTsKKwkJCWVyciA9IC1FSU87CisJCQlnb3RvIGNsZWFudXA7CisJCX0KIAkJd2hpbGUgKHBhdGhbaV0ucF9pZHggPD0gRVhUX01BWF9JTkRFWChwYXRoW2ldLnBfaGRyKSkgewogCQkJZXh0X2RlYnVnKCIlZDogbW92ZSAlZDolbGx1IGluIG5ldyBpbmRleCAlbGx1XG4iLCBpLAogCQkJCQlsZTMyX3RvX2NwdShwYXRoW2ldLnBfaWR4LT5laV9ibG9jayksCkBAIC0xMjAzLDcgKzEyNDQsMTAgQEAKIAlzdHJ1Y3QgZXh0NF9leHRlbnQgKmV4OwogCWludCBkZXB0aCwgZWVfbGVuOwogCi0JQlVHX09OKHBhdGggPT0gTlVMTCk7CisJaWYgKHVubGlrZWx5KHBhdGggPT0gTlVMTCkpIHsKKwkJRVhUNF9FUlJPUl9JTk9ERShpbm9kZSwgInBhdGggPT0gTlVMTCAqbG9naWNhbCAlZCEiLCAqbG9naWNhbCk7CisJCXJldHVybiAtRUlPOworCX0KIAlkZXB0aCA9IHBhdGgtPnBfZGVwdGg7CiAJKnBoeXMgPSAwOwogCkBAIC0xMjE3LDE1ICsxMjYxLDMzIEBACiAJZXggPSBwYXRoW2RlcHRoXS5wX2V4dDsKIAllZV9sZW4gPSBleHQ0X2V4dF9nZXRfYWN0dWFsX2xlbihleCk7CiAJaWYgKCpsb2dpY2FsIDwgbGUzMl90b19jcHUoZXgtPmVlX2Jsb2NrKSkgewotCQlCVUdfT04oRVhUX0ZJUlNUX0VYVEVOVChwYXRoW2RlcHRoXS5wX2hkcikgIT0gZXgpOworCQlpZiAodW5saWtlbHkoRVhUX0ZJUlNUX0VYVEVOVChwYXRoW2RlcHRoXS5wX2hkcikgIT0gZXgpKSB7CisJCQlFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLAorCQkJCQkgIkVYVF9GSVJTVF9FWFRFTlQgIT0gZXggKmxvZ2ljYWwgJWQgZWVfYmxvY2sgJWQhIiwKKwkJCQkJICpsb2dpY2FsLCBsZTMyX3RvX2NwdShleC0+ZWVfYmxvY2spKTsKKwkJCXJldHVybiAtRUlPOworCQl9CiAJCXdoaWxlICgtLWRlcHRoID49IDApIHsKIAkJCWl4ID0gcGF0aFtkZXB0aF0ucF9pZHg7Ci0JCQlCVUdfT04oaXggIT0gRVhUX0ZJUlNUX0lOREVYKHBhdGhbZGVwdGhdLnBfaGRyKSk7CisJCQlpZiAodW5saWtlbHkoaXggIT0gRVhUX0ZJUlNUX0lOREVYKHBhdGhbZGVwdGhdLnBfaGRyKSkpIHsKKwkJCQlFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLAorCQkJCSAgIml4ICglZCkgIT0gRVhUX0ZJUlNUX0lOREVYICglZCkgKGRlcHRoICVkKSEiLAorCQkJCSAgaXggIT0gTlVMTCA/IGl4LT5laV9ibG9jayA6IDAsCisJCQkJICBFWFRfRklSU1RfSU5ERVgocGF0aFtkZXB0aF0ucF9oZHIpICE9IE5VTEwgPworCQkJCSAgICBFWFRfRklSU1RfSU5ERVgocGF0aFtkZXB0aF0ucF9oZHIpLT5laV9ibG9jayA6IDAsCisJCQkJICBkZXB0aCk7CisJCQkJcmV0dXJuIC1FSU87CisJCQl9CiAJCX0KIAkJcmV0dXJuIDA7CiAJfQogCi0JQlVHX09OKCpsb2dpY2FsIDwgKGxlMzJfdG9fY3B1KGV4LT5lZV9ibG9jaykgKyBlZV9sZW4pKTsKKwlpZiAodW5saWtlbHkoKmxvZ2ljYWwgPCAobGUzMl90b19jcHUoZXgtPmVlX2Jsb2NrKSArIGVlX2xlbikpKSB7CisJCUVYVDRfRVJST1JfSU5PREUoaW5vZGUsCisJCQkJICJsb2dpY2FsICVkIDwgZWVfYmxvY2sgJWQgKyBlZV9sZW4gJWQhIiwKKwkJCQkgKmxvZ2ljYWwsIGxlMzJfdG9fY3B1KGV4LT5lZV9ibG9jayksIGVlX2xlbik7CisJCXJldHVybiAtRUlPOworCX0KIAogCSpsb2dpY2FsID0gbGUzMl90b19jcHUoZXgtPmVlX2Jsb2NrKSArIGVlX2xlbiAtIDE7CiAJKnBoeXMgPSBleHRfcGJsb2NrKGV4KSArIGVlX2xlbiAtIDE7CkBAIC0xMjUxLDcgKzEzMTMsMTAgQEAKIAlpbnQgZGVwdGg7CS8qIE5vdGUsIE5PVCBlaF9kZXB0aDsgZGVwdGggZnJvbSB0b3Agb2YgdHJlZSAqLwogCWludCBlZV9sZW47CiAKLQlCVUdfT04ocGF0aCA9PSBOVUxMKTsKKwlpZiAodW5saWtlbHkocGF0aCA9PSBOVUxMKSkgeworCQlFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLCAicGF0aCA9PSBOVUxMICpsb2dpY2FsICVkISIsICpsb2dpY2FsKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCWRlcHRoID0gcGF0aC0+cF9kZXB0aDsKIAkqcGh5cyA9IDA7CiAKQEAgLTEyNjUsMTcgKzEzMzAsMzIgQEAKIAlleCA9IHBhdGhbZGVwdGhdLnBfZXh0OwogCWVlX2xlbiA9IGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGV4KTsKIAlpZiAoKmxvZ2ljYWwgPCBsZTMyX3RvX2NwdShleC0+ZWVfYmxvY2spKSB7Ci0JCUJVR19PTihFWFRfRklSU1RfRVhURU5UKHBhdGhbZGVwdGhdLnBfaGRyKSAhPSBleCk7CisJCWlmICh1bmxpa2VseShFWFRfRklSU1RfRVhURU5UKHBhdGhbZGVwdGhdLnBfaGRyKSAhPSBleCkpIHsKKwkJCUVYVDRfRVJST1JfSU5PREUoaW5vZGUsCisJCQkJCSAiZmlyc3RfZXh0ZW50KHBhdGhbJWRdLnBfaGRyKSAhPSBleCIsCisJCQkJCSBkZXB0aCk7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQogCQl3aGlsZSAoLS1kZXB0aCA+PSAwKSB7CiAJCQlpeCA9IHBhdGhbZGVwdGhdLnBfaWR4OwotCQkJQlVHX09OKGl4ICE9IEVYVF9GSVJTVF9JTkRFWChwYXRoW2RlcHRoXS5wX2hkcikpOworCQkJaWYgKHVubGlrZWx5KGl4ICE9IEVYVF9GSVJTVF9JTkRFWChwYXRoW2RlcHRoXS5wX2hkcikpKSB7CisJCQkJRVhUNF9FUlJPUl9JTk9ERShpbm9kZSwKKwkJCQkJCSAiaXggIT0gRVhUX0ZJUlNUX0lOREVYICpsb2dpY2FsICVkISIsCisJCQkJCQkgKmxvZ2ljYWwpOworCQkJCXJldHVybiAtRUlPOworCQkJfQogCQl9CiAJCSpsb2dpY2FsID0gbGUzMl90b19jcHUoZXgtPmVlX2Jsb2NrKTsKIAkJKnBoeXMgPSBleHRfcGJsb2NrKGV4KTsKIAkJcmV0dXJuIDA7CiAJfQogCi0JQlVHX09OKCpsb2dpY2FsIDwgKGxlMzJfdG9fY3B1KGV4LT5lZV9ibG9jaykgKyBlZV9sZW4pKTsKKwlpZiAodW5saWtlbHkoKmxvZ2ljYWwgPCAobGUzMl90b19jcHUoZXgtPmVlX2Jsb2NrKSArIGVlX2xlbikpKSB7CisJCUVYVDRfRVJST1JfSU5PREUoaW5vZGUsCisJCQkJICJsb2dpY2FsICVkIDwgZWVfYmxvY2sgJWQgKyBlZV9sZW4gJWQhIiwKKwkJCQkgKmxvZ2ljYWwsIGxlMzJfdG9fY3B1KGV4LT5lZV9ibG9jayksIGVlX2xlbik7CisJCXJldHVybiAtRUlPOworCX0KIAogCWlmIChleCAhPSBFWFRfTEFTVF9FWFRFTlQocGF0aFtkZXB0aF0ucF9oZHIpKSB7CiAJCS8qIG5leHQgYWxsb2NhdGVkIGJsb2NrIGluIHRoaXMgbGVhZiAqLwpAQCAtMTQxNCw4ICsxNDk0LDEyIEBACiAKIAllaCA9IHBhdGhbZGVwdGhdLnBfaGRyOwogCWV4ID0gcGF0aFtkZXB0aF0ucF9leHQ7Ci0JQlVHX09OKGV4ID09IE5VTEwpOwotCUJVR19PTihlaCA9PSBOVUxMKTsKKworCWlmICh1bmxpa2VseShleCA9PSBOVUxMIHx8IGVoID09IE5VTEwpKSB7CisJCUVYVDRfRVJST1JfSU5PREUoaW5vZGUsCisJCQkJICJleCAlcCA9PSBOVUxMIG9yIGVoICVwID09IE5VTEwiLCBleCwgZWgpOworCQlyZXR1cm4gLUVJTzsKKwl9CiAKIAlpZiAoZGVwdGggPT0gMCkgewogCQkvKiB0aGVyZSBpcyBubyB0cmVlIGF0IGFsbCAqLwpAQCAtMTUzOCw4ICsxNjIyLDkgQEAKIAkJbWVyZ2VfZG9uZSA9IDE7CiAJCVdBUk5fT04oZWgtPmVoX2VudHJpZXMgPT0gMCk7CiAJCWlmICghZWgtPmVoX2VudHJpZXMpCi0JCQlleHQ0X2Vycm9yKGlub2RlLT5pX3NiLCAiZXh0NF9leHRfdHJ5X3RvX21lcmdlIiwKLQkJCSAgICJpbm9kZSMlbHUsIGVoLT5laF9lbnRyaWVzID0gMCEiLCBpbm9kZS0+aV9pbm8pOworCQkJZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwKKwkJCQkgICAiaW5vZGUjJWx1LCBlaC0+ZWhfZW50cmllcyA9IDAhIiwKKwkJCQkgICBpbm9kZS0+aV9pbm8pOwogCX0KIAogCXJldHVybiBtZXJnZV9kb25lOwpAQCAtMTYxMiwxMyArMTY5NywxOSBAQAogCWV4dDRfbGJsa190IG5leHQ7CiAJdW5zaWduZWQgdW5pbml0aWFsaXplZCA9IDA7CiAKLQlCVUdfT04oZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4obmV3ZXh0KSA9PSAwKTsKKwlpZiAodW5saWtlbHkoZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4obmV3ZXh0KSA9PSAwKSkgeworCQlFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLCAiZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4obmV3ZXh0KSA9PSAwIik7CisJCXJldHVybiAtRUlPOworCX0KIAlkZXB0aCA9IGV4dF9kZXB0aChpbm9kZSk7CiAJZXggPSBwYXRoW2RlcHRoXS5wX2V4dDsKLQlCVUdfT04ocGF0aFtkZXB0aF0ucF9oZHIgPT0gTlVMTCk7CisJaWYgKHVubGlrZWx5KHBhdGhbZGVwdGhdLnBfaGRyID09IE5VTEwpKSB7CisJCUVYVDRfRVJST1JfSU5PREUoaW5vZGUsICJwYXRoWyVkXS5wX2hkciA9PSBOVUxMIiwgZGVwdGgpOworCQlyZXR1cm4gLUVJTzsKKwl9CiAKIAkvKiB0cnkgdG8gaW5zZXJ0IGJsb2NrIGludG8gZm91bmQgZXh0ZW50IGFuZCByZXR1cm4gKi8KLQlpZiAoZXggJiYgKGZsYWcgIT0gRVhUNF9HRVRfQkxPQ0tTX0RJT19DUkVBVEVfRVhUKQorCWlmIChleCAmJiAhKGZsYWcgJiBFWFQ0X0dFVF9CTE9DS1NfUFJFX0lPKQogCQkmJiBleHQ0X2Nhbl9leHRlbnRzX2JlX21lcmdlZChpbm9kZSwgZXgsIG5ld2V4dCkpIHsKIAkJZXh0X2RlYnVnKCJhcHBlbmQgWyVkXSVkIGJsb2NrIHRvICVkOlslZF0lZCAoZnJvbSAlbGx1KVxuIiwKIAkJCQlleHQ0X2V4dF9pc191bmluaXRpYWxpemVkKG5ld2V4dCksCkBAIC0xNzM5LDcgKzE4MzAsNyBAQAogCiBtZXJnZToKIAkvKiB0cnkgdG8gbWVyZ2UgZXh0ZW50cyB0byB0aGUgcmlnaHQgKi8KLQlpZiAoZmxhZyAhPSBFWFQ0X0dFVF9CTE9DS1NfRElPX0NSRUFURV9FWFQpCisJaWYgKCEoZmxhZyAmIEVYVDRfR0VUX0JMT0NLU19QUkVfSU8pKQogCQlleHQ0X2V4dF90cnlfdG9fbWVyZ2UoaW5vZGUsIHBhdGgsIG5lYXJleCk7CiAKIAkvKiB0cnkgdG8gbWVyZ2UgZXh0ZW50cyB0byB0aGUgbGVmdCAqLwpAQCAtMTc4Nyw3ICsxODc4LDExIEBACiAJCX0KIAogCQlkZXB0aCA9IGV4dF9kZXB0aChpbm9kZSk7Ci0JCUJVR19PTihwYXRoW2RlcHRoXS5wX2hkciA9PSBOVUxMKTsKKwkJaWYgKHVubGlrZWx5KHBhdGhbZGVwdGhdLnBfaGRyID09IE5VTEwpKSB7CisJCQlFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLCAicGF0aFslZF0ucF9oZHIgPT0gTlVMTCIsIGRlcHRoKTsKKwkJCWVyciA9IC1FSU87CisJCQlicmVhazsKKwkJfQogCQlleCA9IHBhdGhbZGVwdGhdLnBfZXh0OwogCQluZXh0ID0gZXh0NF9leHRfbmV4dF9hbGxvY2F0ZWRfYmxvY2socGF0aCk7CiAKQEAgLTE4MzgsNyArMTkzMywxMSBAQAogCQkJY2JleC5lY190eXBlID0gRVhUNF9FWFRfQ0FDSEVfRVhURU5UOwogCQl9CiAKLQkJQlVHX09OKGNiZXguZWNfbGVuID09IDApOworCQlpZiAodW5saWtlbHkoY2JleC5lY19sZW4gPT0gMCkpIHsKKwkJCUVYVDRfRVJST1JfSU5PREUoaW5vZGUsICJjYmV4LmVjX2xlbiA9PSAwIik7CisJCQllcnIgPSAtRUlPOworCQkJYnJlYWs7CisJCX0KIAkJZXJyID0gZnVuYyhpbm9kZSwgcGF0aCwgJmNiZXgsIGV4LCBjYmRhdGEpOwogCQlleHQ0X2V4dF9kcm9wX3JlZnMocGF0aCk7CiAKQEAgLTE5NTIsNyArMjA1MSw3IEBACiAKIAlCVUdfT04oY2V4LT5lY190eXBlICE9IEVYVDRfRVhUX0NBQ0hFX0dBUCAmJgogCQkJY2V4LT5lY190eXBlICE9IEVYVDRfRVhUX0NBQ0hFX0VYVEVOVCk7Ci0JaWYgKGJsb2NrID49IGNleC0+ZWNfYmxvY2sgJiYgYmxvY2sgPCBjZXgtPmVjX2Jsb2NrICsgY2V4LT5lY19sZW4pIHsKKwlpZiAoaW5fcmFuZ2UoYmxvY2ssIGNleC0+ZWNfYmxvY2ssIGNleC0+ZWNfbGVuKSkgewogCQlleC0+ZWVfYmxvY2sgPSBjcHVfdG9fbGUzMihjZXgtPmVjX2Jsb2NrKTsKIAkJZXh0NF9leHRfc3RvcmVfcGJsb2NrKGV4LCBjZXgtPmVjX3N0YXJ0KTsKIAkJZXgtPmVlX2xlbiA9IGNwdV90b19sZTE2KGNleC0+ZWNfbGVuKTsKQEAgLTE5ODEsNyArMjA4MCwxMCBAQAogCS8qIGZyZWUgaW5kZXggYmxvY2sgKi8KIAlwYXRoLS07CiAJbGVhZiA9IGlkeF9wYmxvY2socGF0aC0+cF9pZHgpOwotCUJVR19PTihwYXRoLT5wX2hkci0+ZWhfZW50cmllcyA9PSAwKTsKKwlpZiAodW5saWtlbHkocGF0aC0+cF9oZHItPmVoX2VudHJpZXMgPT0gMCkpIHsKKwkJRVhUNF9FUlJPUl9JTk9ERShpbm9kZSwgInBhdGgtPnBfaGRyLT5laF9lbnRyaWVzID09IDAiKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCWVyciA9IGV4dDRfZXh0X2dldF9hY2Nlc3MoaGFuZGxlLCBpbm9kZSwgcGF0aCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTIxMTksOCArMjIyMSwxMCBAQAogCWlmICghcGF0aFtkZXB0aF0ucF9oZHIpCiAJCXBhdGhbZGVwdGhdLnBfaGRyID0gZXh0X2Jsb2NrX2hkcihwYXRoW2RlcHRoXS5wX2JoKTsKIAllaCA9IHBhdGhbZGVwdGhdLnBfaGRyOwotCUJVR19PTihlaCA9PSBOVUxMKTsKLQorCWlmICh1bmxpa2VseShwYXRoW2RlcHRoXS5wX2hkciA9PSBOVUxMKSkgeworCQlFWFQ0X0VSUk9SX0lOT0RFKGlub2RlLCAicGF0aFslZF0ucF9oZHIgPT0gTlVMTCIsIGRlcHRoKTsKKwkJcmV0dXJuIC1FSU87CisJfQogCS8qIGZpbmQgd2hlcmUgdG8gc3RhcnQgcmVtb3ZpbmcgKi8KIAlleCA9IEVYVF9MQVNUX0VYVEVOVChlaCk7CiAKQEAgLTI5ODMsNyArMzA4Nyw3IEBACiAJZXh0NF9leHRfZGlydHkoaGFuZGxlLCBpbm9kZSwgcGF0aCArIGRlcHRoKTsKIAlyZXR1cm4gZXJyOwogfQotc3RhdGljIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfZGlvKGhhbmRsZV90ICpoYW5kbGUsCitzdGF0aWMgaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19lbmRpbyhoYW5kbGVfdCAqaGFuZGxlLAogCQkJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQkgICAgICBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqcGF0aCkKIHsKQEAgLTMwNjMsOCArMzE2Nyw4IEBACiAJCSAgZmxhZ3MsIGFsbG9jYXRlZCk7CiAJZXh0NF9leHRfc2hvd19sZWFmKGlub2RlLCBwYXRoKTsKIAotCS8qIERJTyBnZXRfYmxvY2soKSBiZWZvcmUgc3VibWl0IHRoZSBJTywgc3BsaXQgdGhlIGV4dGVudCAqLwotCWlmIChmbGFncyA9PSBFWFQ0X0dFVF9CTE9DS1NfRElPX0NSRUFURV9FWFQpIHsKKwkvKiBnZXRfYmxvY2soKSBiZWZvcmUgc3VibWl0IHRoZSBJTywgc3BsaXQgdGhlIGV4dGVudCAqLworCWlmICgoZmxhZ3MgJiBFWFQ0X0dFVF9CTE9DS1NfUFJFX0lPKSkgewogCQlyZXQgPSBleHQ0X3NwbGl0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZSwKIAkJCQkJCWlub2RlLCBwYXRoLCBpYmxvY2ssCiAJCQkJCQltYXhfYmxvY2tzLCBmbGFncyk7CkBAIC0zMDc0LDE0ICszMTc4LDE2IEBACiAJCSAqIGNvbXBsZXRlZAogCQkgKi8KIAkJaWYgKGlvKQotCQkJaW8tPmZsYWcgPSBESU9fQUlPX1VOV1JJVFRFTjsKKwkJCWlvLT5mbGFnID0gRVhUNF9JT19VTldSSVRURU47CiAJCWVsc2UKLQkJCUVYVDRfSShpbm9kZSktPmlfc3RhdGUgfD0gRVhUNF9TVEFURV9ESU9fVU5XUklUVEVOOworCQkJZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfRElPX1VOV1JJVFRFTik7CisJCWlmIChleHQ0X3Nob3VsZF9kaW9yZWFkX25vbG9jayhpbm9kZSkpCisJCQlzZXRfYnVmZmVyX3VuaW5pdChiaF9yZXN1bHQpOwogCQlnb3RvIG91dDsKIAl9Ci0JLyogYXN5bmMgRElPIGVuZF9pbyBjb21wbGV0ZSwgY29udmVydCB0aGUgZmlsbGVkIGV4dGVudCB0byB3cml0dGVuICovCi0JaWYgKGZsYWdzID09IEVYVDRfR0VUX0JMT0NLU19ESU9fQ09OVkVSVF9FWFQpIHsKLQkJcmV0ID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2RpbyhoYW5kbGUsIGlub2RlLAorCS8qIElPIGVuZF9pbyBjb21wbGV0ZSwgY29udmVydCB0aGUgZmlsbGVkIGV4dGVudCB0byB3cml0dGVuICovCisJaWYgKChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19DT05WRVJUKSkgeworCQlyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfZW5kaW8oaGFuZGxlLCBpbm9kZSwKIAkJCQkJCQlwYXRoKTsKIAkJaWYgKHJldCA+PSAwKQogCQkJZXh0NF91cGRhdGVfaW5vZGVfZnN5bmNfdHJhbnMoaGFuZGxlLCBpbm9kZSwgMSk7CkBAIC0zMTg1LDcgKzMyOTEsNyBAQAogewogCXN0cnVjdCBleHQ0X2V4dF9wYXRoICpwYXRoID0gTlVMTDsKIAlzdHJ1Y3QgZXh0NF9leHRlbnRfaGVhZGVyICplaDsKLQlzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXgsICpleDsKKwlzdHJ1Y3QgZXh0NF9leHRlbnQgbmV3ZXgsICpleCwgKmxhc3RfZXg7CiAJZXh0NF9mc2Jsa190IG5ld2Jsb2NrOwogCWludCBlcnIgPSAwLCBkZXB0aCwgcmV0LCBjYWNoZV90eXBlOwogCXVuc2lnbmVkIGludCBhbGxvY2F0ZWQgPSAwOwpAQCAtMzIzNywxMCArMzM0MywxMCBAQAogCSAqIHRoaXMgc2l0dWF0aW9uIGlzIHBvc3NpYmxlLCB0aG91Z2gsIF9kdXJpbmdfIHRyZWUgbW9kaWZpY2F0aW9uOwogCSAqIHRoaXMgaXMgd2h5IGFzc2VydCBjYW4ndCBiZSBwdXQgaW4gZXh0NF9leHRfZmluZF9leHRlbnQoKQogCSAqLwotCWlmIChwYXRoW2RlcHRoXS5wX2V4dCA9PSBOVUxMICYmIGRlcHRoICE9IDApIHsKLQkJZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwgX19mdW5jX18sICJiYWQgZXh0ZW50IGFkZHJlc3MgIgotCQkJICAgImlub2RlOiAlbHUsIGlibG9jazogJWQsIGRlcHRoOiAlZCIsCi0JCQkgICBpbm9kZS0+aV9pbm8sIGlibG9jaywgZGVwdGgpOworCWlmICh1bmxpa2VseShwYXRoW2RlcHRoXS5wX2V4dCA9PSBOVUxMICYmIGRlcHRoICE9IDApKSB7CisJCUVYVDRfRVJST1JfSU5PREUoaW5vZGUsICJiYWQgZXh0ZW50IGFkZHJlc3MgIgorCQkJCSAiaWJsb2NrOiAlZCwgZGVwdGg6ICVkIHBibG9jayAlbGxkIiwKKwkJCQkgaWJsb2NrLCBkZXB0aCwgcGF0aFtkZXB0aF0ucF9ibG9jayk7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gb3V0MjsKIAl9CkBAIC0zMjU4LDcgKzMzNjQsNyBAQAogCQkgKi8KIAkJZWVfbGVuID0gZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oZXgpOwogCQkvKiBpZiBmb3VuZCBleHRlbnQgY292ZXJzIGJsb2NrLCBzaW1wbHkgcmV0dXJuIGl0ICovCi0JCWlmIChpYmxvY2sgPj0gZWVfYmxvY2sgJiYgaWJsb2NrIDwgZWVfYmxvY2sgKyBlZV9sZW4pIHsKKwkJaWYgKGluX3JhbmdlKGlibG9jaywgZWVfYmxvY2ssIGVlX2xlbikpIHsKIAkJCW5ld2Jsb2NrID0gaWJsb2NrIC0gZWVfYmxvY2sgKyBlZV9zdGFydDsKIAkJCS8qIG51bWJlciBvZiByZW1haW5pbmcgYmxvY2tzIGluIHRoZSBleHRlbnQgKi8KIAkJCWFsbG9jYXRlZCA9IGVlX2xlbiAtIChpYmxvY2sgLSBlZV9ibG9jayk7CkBAIC0zMzUwLDIxICszNDU2LDM1IEBACiAJaWYgKGZsYWdzICYgRVhUNF9HRVRfQkxPQ0tTX1VOSU5JVF9FWFQpewogCQlleHQ0X2V4dF9tYXJrX3VuaW5pdGlhbGl6ZWQoJm5ld2V4KTsKIAkJLyoKLQkJICogaW9fZW5kIHN0cnVjdHVyZSB3YXMgY3JlYXRlZCBmb3IgZXZlcnkgYXN5bmMKLQkJICogZGlyZWN0IElPIHdyaXRlIHRvIHRoZSBtaWRkbGUgb2YgdGhlIGZpbGUuCi0JCSAqIFRvIGF2b2lkIHVuZWNlc3NhcnkgY29udmVydGlvbiBmb3IgZXZlcnkgYWlvIGRpbyByZXdyaXRlCi0JCSAqIHRvIHRoZSBtaWQgb2YgZmlsZSwgaGVyZSB3ZSBmbGFnIHRoZSBJTyB0aGF0IGlzIHJlYWxseQotCQkgKiBuZWVkIHRoZSBjb252ZXJ0aW9uLgorCQkgKiBpb19lbmQgc3RydWN0dXJlIHdhcyBjcmVhdGVkIGZvciBldmVyeSBJTyB3cml0ZSB0byBhbgorCQkgKiB1bmluaXRpYWxpemVkIGV4dGVudC4gVG8gYXZvaWQgdW5lY2Vzc2FyeSBjb252ZXJzaW9uLAorCQkgKiBoZXJlIHdlIGZsYWcgdGhlIElPIHRoYXQgcmVhbGx5IG5lZWRzIHRoZSBjb252ZXJzaW9uLgogCQkgKiBGb3Igbm9uIGFzeWNuIGRpcmVjdCBJTyBjYXNlLCBmbGFnIHRoZSBpbm9kZSBzdGF0ZQogCQkgKiB0aGF0IHdlIG5lZWQgdG8gcGVyZm9ybSBjb252ZXJ0aW9uIHdoZW4gSU8gaXMgZG9uZS4KIAkJICovCi0JCWlmIChmbGFncyA9PSBFWFQ0X0dFVF9CTE9DS1NfRElPX0NSRUFURV9FWFQpIHsKKwkJaWYgKChmbGFncyAmIEVYVDRfR0VUX0JMT0NLU19QUkVfSU8pKSB7CiAJCQlpZiAoaW8pCi0JCQkJaW8tPmZsYWcgPSBESU9fQUlPX1VOV1JJVFRFTjsKKwkJCQlpby0+ZmxhZyA9IEVYVDRfSU9fVU5XUklUVEVOOwogCQkJZWxzZQotCQkJCUVYVDRfSShpbm9kZSktPmlfc3RhdGUgfD0KLQkJCQkJRVhUNF9TVEFURV9ESU9fVU5XUklUVEVOOzsKKwkJCQlleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwKKwkJCQkJCSAgICAgRVhUNF9TVEFURV9ESU9fVU5XUklUVEVOKTsKIAkJfQorCQlpZiAoZXh0NF9zaG91bGRfZGlvcmVhZF9ub2xvY2soaW5vZGUpKQorCQkJc2V0X2J1ZmZlcl91bmluaXQoYmhfcmVzdWx0KTsKKwl9CisKKwlpZiAodW5saWtlbHkoRVhUNF9JKGlub2RlKS0+aV9mbGFncyAmIEVYVDRfRU9GQkxPQ0tTX0ZMKSkgeworCQlpZiAodW5saWtlbHkoIWVoLT5laF9lbnRyaWVzKSkgeworCQkJRVhUNF9FUlJPUl9JTk9ERShpbm9kZSwKKwkJCQkJICJlaC0+ZWhfZW50cmllcyA9PSAwIGVlX2Jsb2NrICVkIiwKKwkJCQkJIGV4LT5lZV9ibG9jayk7CisJCQllcnIgPSAtRUlPOworCQkJZ290byBvdXQyOworCQl9CisJCWxhc3RfZXggPSBFWFRfTEFTVF9FWFRFTlQoZWgpOworCQlpZiAoaWJsb2NrICsgYXIubGVuID4gbGUzMl90b19jcHUobGFzdF9leC0+ZWVfYmxvY2spCisJCSAgICArIGV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKGxhc3RfZXgpKQorCQkJRVhUNF9JKGlub2RlKS0+aV9mbGFncyAmPSB+RVhUNF9FT0ZCTE9DS1NfRkw7CiAJfQogCWVyciA9IGV4dDRfZXh0X2luc2VydF9leHRlbnQoaGFuZGxlLCBpbm9kZSwgcGF0aCwgJm5ld2V4LCBmbGFncyk7CiAJaWYgKGVycikgewpAQCAtMzQ5OSw2ICszNjE5LDEzIEBACiAJCQlpX3NpemVfd3JpdGUoaW5vZGUsIG5ld19zaXplKTsKIAkJaWYgKG5ld19zaXplID4gRVhUNF9JKGlub2RlKS0+aV9kaXNrc2l6ZSkKIAkJCWV4dDRfdXBkYXRlX2lfZGlza3NpemUoaW5vZGUsIG5ld19zaXplKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBNYXJrIHRoYXQgd2UgYWxsb2NhdGUgYmV5b25kIEVPRiBzbyB0aGUgc3Vic2VxdWVudCB0cnVuY2F0ZQorCQkgKiBjYW4gcHJvY2VlZCBldmVuIGlmIHRoZSBuZXcgc2l6ZSBpcyB0aGUgc2FtZSBhcyBpX3NpemUuCisJCSAqLworCQlpZiAobmV3X3NpemUgPiBpX3NpemVfcmVhZChpbm9kZSkpCisJCQlFWFQ0X0koaW5vZGUpLT5pX2ZsYWdzIHw9IEVYVDRfRU9GQkxPQ0tTX0ZMOwogCX0KIAogfQpAQCAtMzYwMyw3ICszNzMwLDcgQEAKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgogICovCiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsCi0JCQkJICAgIGxvZmZfdCBsZW4pCisJCQkJICAgIHNzaXplX3QgbGVuKQogewogCWhhbmRsZV90ICpoYW5kbGU7CiAJZXh0NF9sYmxrX3QgYmxvY2s7CkBAIC0zNjM1LDcgKzM3NjIsNyBAQAogCQltYXBfYmguYl9zdGF0ZSA9IDA7CiAJCXJldCA9IGV4dDRfZ2V0X2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBibG9jaywKIAkJCQkgICAgICBtYXhfYmxvY2tzLCAmbWFwX2JoLAotCQkJCSAgICAgIEVYVDRfR0VUX0JMT0NLU19ESU9fQ09OVkVSVF9FWFQpOworCQkJCSAgICAgIEVYVDRfR0VUX0JMT0NLU19JT19DT05WRVJUX0VYVCk7CiAJCWlmIChyZXQgPD0gMCkgewogCQkJV0FSTl9PTihyZXQgPD0gMCk7CiAJCQlwcmludGsoS0VSTl9FUlIgIiVzOiBleHQ0X2V4dF9nZXRfYmxvY2tzICIKQEAgLTM3MzksNyArMzg2Niw3IEBACiAJaW50IGVycm9yID0gMDsKIAogCS8qIGluLWlub2RlPyAqLwotCWlmIChFWFQ0X0koaW5vZGUpLT5pX3N0YXRlICYgRVhUNF9TVEFURV9YQVRUUikgeworCWlmIChleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpKSB7CiAJCXN0cnVjdCBleHQ0X2lsb2MgaWxvYzsKIAkJaW50IG9mZnNldDsJLyogb2Zmc2V0IG9mIHhhdHRyIGluIGlub2RlICovCiAKQEAgLTM3NjcsNyArMzg5NCw2IEBACiAJCV9fdTY0IHN0YXJ0LCBfX3U2NCBsZW4pCiB7CiAJZXh0NF9sYmxrX3Qgc3RhcnRfYmxrOwotCWV4dDRfbGJsa190IGxlbl9ibGtzOwogCWludCBlcnJvciA9IDA7CiAKIAkvKiBmYWxsYmFjayB0byBnZW5lcmljIGhlcmUgaWYgbm90IGluIGV4dGVudHMgZm10ICovCkBAIC0zNzgxLDggKzM5MDcsMTQgQEAKIAlpZiAoZmllaW5mby0+ZmlfZmxhZ3MgJiBGSUVNQVBfRkxBR19YQVRUUikgewogCQllcnJvciA9IGV4dDRfeGF0dHJfZmllbWFwKGlub2RlLCBmaWVpbmZvKTsKIAl9IGVsc2UgeworCQlleHQ0X2xibGtfdCBsZW5fYmxrczsKKwkJX191NjQgbGFzdF9ibGs7CisKIAkJc3RhcnRfYmxrID0gc3RhcnQgPj4gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7Ci0JCWxlbl9ibGtzID0gbGVuID4+IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCQlsYXN0X2JsayA9IChzdGFydCArIGxlbiAtIDEpID4+IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCQlpZiAobGFzdF9ibGsgPj0gRVhUX01BWF9CTE9DSykKKwkJCWxhc3RfYmxrID0gRVhUX01BWF9CTE9DSy0xOworCQlsZW5fYmxrcyA9ICgoZXh0NF9sYmxrX3QpIGxhc3RfYmxrKSAtIHN0YXJ0X2JsayArIDE7CiAKIAkJLyoKIAkJICogV2FsayB0aGUgZXh0ZW50IHRyZWUgZ2F0aGVyaW5nIGV4dGVudCBpbmZvcm1hdGlvbi4KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZmlsZS5jIGIvZnMvZXh0NC9maWxlLmMKaW5kZXggOTYzMDU4My4uZDA3NzZlNCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9maWxlLmMKKysrIGIvZnMvZXh0NC9maWxlLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9qYmQyLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9wYXRoLmg+CisjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KICNpbmNsdWRlICJleHQ0LmgiCiAjaW5jbHVkZSAiZXh0NF9qYmQyLmgiCiAjaW5jbHVkZSAieGF0dHIuaCIKQEAgLTM1LDkgKzM2LDkgQEAKICAqLwogc3RhdGljIGludCBleHQ0X3JlbGVhc2VfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlpZiAoRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSAmIEVYVDRfU1RBVEVfREFfQUxMT0NfQ0xPU0UpIHsKKwlpZiAoZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX0RBX0FMTE9DX0NMT1NFKSkgewogCQlleHQ0X2FsbG9jX2RhX2Jsb2Nrcyhpbm9kZSk7Ci0JCUVYVDRfSShpbm9kZSktPmlfc3RhdGUgJj0gfkVYVDRfU1RBVEVfREFfQUxMT0NfQ0xPU0U7CisJCWV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfREFfQUxMT0NfQ0xPU0UpOwogCX0KIAkvKiBpZiB3ZSBhcmUgdGhlIGxhc3Qgd3JpdGVyIG9uIHRoZSBpbm9kZSwgZHJvcCB0aGUgYmxvY2sgcmVzZXJ2YXRpb24gKi8KIAlpZiAoKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSAmJgpAQCAtMTE2LDE4ICsxMTcsMTYgQEAKIAkJICogZGV2aWNlcyBvciBmaWxlc3lzdGVtIGltYWdlcy4KIAkJICovCiAJCW1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKLQkJcGF0aC5tbnQgPSBtbnQtPm1udF9wYXJlbnQ7Ci0JCXBhdGguZGVudHJ5ID0gbW50LT5tbnRfbW91bnRwb2ludDsKLQkJcGF0aF9nZXQoJnBhdGgpOworCQlwYXRoLm1udCA9IG1udDsKKwkJcGF0aC5kZW50cnkgPSBtbnQtPm1udF9yb290OwogCQljcCA9IGRfcGF0aCgmcGF0aCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0JCXBhdGhfcHV0KCZwYXRoKTsKIAkJaWYgKCFJU19FUlIoY3ApKSB7CiAJCQltZW1jcHkoc2JpLT5zX2VzLT5zX2xhc3RfbW91bnRlZCwgY3AsCiAJCQkgICAgICAgc2l6ZW9mKHNiaS0+c19lcy0+c19sYXN0X21vdW50ZWQpKTsKIAkJCXNiLT5zX2RpcnQgPSAxOwogCQl9CiAJfQotCXJldHVybiBnZW5lcmljX2ZpbGVfb3Blbihpbm9kZSwgZmlscCk7CisJcmV0dXJuIGRxdW90X2ZpbGVfb3Blbihpbm9kZSwgZmlscCk7CiB9CiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXh0NF9maWxlX29wZXJhdGlvbnMgPSB7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2ZzeW5jLmMgYi9mcy9leHQ0L2ZzeW5jLmMKaW5kZXggOThiZDE0MC4uMGQwYzMyMyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9mc3luYy5jCisrKyBiL2ZzL2V4dDQvZnN5bmMuYwpAQCAtNjMsNyArNjMsNyBAQAogCWlmIChpbm9kZS0+aV9zYi0+c19mbGFncyAmIE1TX1JET05MWSkKIAkJcmV0dXJuIDA7CiAKLQlyZXQgPSBmbHVzaF9haW9fZGlvX2NvbXBsZXRlZF9JTyhpbm9kZSk7CisJcmV0ID0gZmx1c2hfY29tcGxldGVkX0lPKGlub2RlKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAkKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaWFsbG9jLmMgYi9mcy9leHQ0L2lhbGxvYy5jCmluZGV4IGYzNjI0ZWEuLjM2MWMwYjkgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaWFsbG9jLmMKKysrIGIvZnMvZXh0NC9pYWxsb2MuYwpAQCAtNzYsOCArNzYsNyBAQAogCS8qIElmIGNoZWNrc3VtIGlzIGJhZCBtYXJrIGFsbCBibG9ja3MgYW5kIGlub2RlcyB1c2UgdG8gcHJldmVudAogCSAqIGFsbG9jYXRpb24sIGVzc2VudGlhbGx5IGltcGxlbWVudGluZyBhIHBlci1ncm91cCByZWFkLW9ubHkgZmxhZy4gKi8KIAlpZiAoIWV4dDRfZ3JvdXBfZGVzY19jc3VtX3ZlcmlmeShzYmksIGJsb2NrX2dyb3VwLCBnZHApKSB7Ci0JCWV4dDRfZXJyb3Ioc2IsIF9fZnVuY19fLCAiQ2hlY2tzdW0gYmFkIGZvciBncm91cCAldSIsCi0JCQkgICBibG9ja19ncm91cCk7CisJCWV4dDRfZXJyb3Ioc2IsICJDaGVja3N1bSBiYWQgZm9yIGdyb3VwICV1IiwgYmxvY2tfZ3JvdXApOwogCQlleHQ0X2ZyZWVfYmxrc19zZXQoc2IsIGdkcCwgMCk7CiAJCWV4dDRfZnJlZV9pbm9kZXNfc2V0KHNiLCBnZHAsIDApOwogCQlleHQ0X2l0YWJsZV91bnVzZWRfc2V0KHNiLCBnZHAsIDApOwpAQCAtMTExLDggKzExMCw3IEBACiAJYml0bWFwX2JsayA9IGV4dDRfaW5vZGVfYml0bWFwKHNiLCBkZXNjKTsKIAliaCA9IHNiX2dldGJsayhzYiwgYml0bWFwX2Jsayk7CiAJaWYgKHVubGlrZWx5KCFiaCkpIHsKLQkJZXh0NF9lcnJvcihzYiwgX19mdW5jX18sCi0JCQkgICAgIkNhbm5vdCByZWFkIGlub2RlIGJpdG1hcCAtICIKKwkJZXh0NF9lcnJvcihzYiwgIkNhbm5vdCByZWFkIGlub2RlIGJpdG1hcCAtICIKIAkJCSAgICAiYmxvY2tfZ3JvdXAgPSAldSwgaW5vZGVfYml0bWFwID0gJWxsdSIsCiAJCQkgICAgYmxvY2tfZ3JvdXAsIGJpdG1hcF9ibGspOwogCQlyZXR1cm4gTlVMTDsKQEAgLTE1Myw4ICsxNTEsNyBAQAogCXNldF9iaXRtYXBfdXB0b2RhdGUoYmgpOwogCWlmIChiaF9zdWJtaXRfcmVhZChiaCkgPCAwKSB7CiAJCXB1dF9iaChiaCk7Ci0JCWV4dDRfZXJyb3Ioc2IsIF9fZnVuY19fLAotCQkJICAgICJDYW5ub3QgcmVhZCBpbm9kZSBiaXRtYXAgLSAiCisJCWV4dDRfZXJyb3Ioc2IsICJDYW5ub3QgcmVhZCBpbm9kZSBiaXRtYXAgLSAiCiAJCQkgICAgImJsb2NrX2dyb3VwID0gJXUsIGlub2RlX2JpdG1hcCA9ICVsbHUiLAogCQkJICAgIGJsb2NrX2dyb3VwLCBiaXRtYXBfYmxrKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0yMTcsMTAgKzIxNCwxMCBAQAogCSAqIE5vdGU6IHdlIG11c3QgZnJlZSBhbnkgcXVvdGEgYmVmb3JlIGxvY2tpbmcgdGhlIHN1cGVyYmxvY2ssCiAJICogYXMgd3JpdGluZyB0aGUgcXVvdGEgdG8gZGlzayBtYXkgbmVlZCB0aGUgbG9jayBhcyB3ZWxsLgogCSAqLwotCXZmc19kcV9pbml0KGlub2RlKTsKKwlkcXVvdF9pbml0aWFsaXplKGlub2RlKTsKIAlleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlKTsKLQl2ZnNfZHFfZnJlZV9pbm9kZShpbm9kZSk7Ci0JdmZzX2RxX2Ryb3AoaW5vZGUpOworCWRxdW90X2ZyZWVfaW5vZGUoaW5vZGUpOworCWRxdW90X2Ryb3AoaW5vZGUpOwogCiAJaXNfZGlyZWN0b3J5ID0gU19JU0RJUihpbm9kZS0+aV9tb2RlKTsKIApAQCAtMjI5LDggKzIyNiw3IEBACiAKIAllcyA9IEVYVDRfU0Ioc2IpLT5zX2VzOwogCWlmIChpbm8gPCBFWFQ0X0ZJUlNUX0lOTyhzYikgfHwgaW5vID4gbGUzMl90b19jcHUoZXMtPnNfaW5vZGVzX2NvdW50KSkgewotCQlleHQ0X2Vycm9yKHNiLCAiZXh0NF9mcmVlX2lub2RlIiwKLQkJCSAgICJyZXNlcnZlZCBvciBub25leGlzdGVudCBpbm9kZSAlbHUiLCBpbm8pOworCQlleHQ0X2Vycm9yKHNiLCAicmVzZXJ2ZWQgb3Igbm9uZXhpc3RlbnQgaW5vZGUgJWx1IiwgaW5vKTsKIAkJZ290byBlcnJvcl9yZXR1cm47CiAJfQogCWJsb2NrX2dyb3VwID0gKGlubyAtIDEpIC8gRVhUNF9JTk9ERVNfUEVSX0dST1VQKHNiKTsKQEAgLTI0OCw4ICsyNDQsNyBAQAogCWNsZWFyZWQgPSBleHQ0X2NsZWFyX2JpdF9hdG9taWMoZXh0NF9ncm91cF9sb2NrX3B0cihzYiwgYmxvY2tfZ3JvdXApLAogCQkJCQliaXQsIGJpdG1hcF9iaC0+Yl9kYXRhKTsKIAlpZiAoIWNsZWFyZWQpCi0JCWV4dDRfZXJyb3Ioc2IsICJleHQ0X2ZyZWVfaW5vZGUiLAotCQkJICAgImJpdCBhbHJlYWR5IGNsZWFyZWQgZm9yIGlub2RlICVsdSIsIGlubyk7CisJCWV4dDRfZXJyb3Ioc2IsICJiaXQgYWxyZWFkeSBjbGVhcmVkIGZvciBpbm9kZSAlbHUiLCBpbm8pOwogCWVsc2UgewogCQlnZHAgPSBleHQ0X2dldF9ncm91cF9kZXNjKHNiLCBibG9ja19ncm91cCwgJmJoMik7CiAKQEAgLTczNiw4ICs3MzEsNyBAQAogCWlmICgoZ3JvdXAgPT0gMCAmJiBpbm8gPCBFWFQ0X0ZJUlNUX0lOTyhzYikpIHx8CiAJCQlpbm8gPiBFWFQ0X0lOT0RFU19QRVJfR1JPVVAoc2IpKSB7CiAJCWV4dDRfdW5sb2NrX2dyb3VwKHNiLCBncm91cCk7Ci0JCWV4dDRfZXJyb3Ioc2IsIF9fZnVuY19fLAotCQkJICAgInJlc2VydmVkIGlub2RlIG9yIGlub2RlID4gaW5vZGVzIGNvdW50IC0gIgorCQlleHQ0X2Vycm9yKHNiLCAicmVzZXJ2ZWQgaW5vZGUgb3IgaW5vZGUgPiBpbm9kZXMgY291bnQgLSAiCiAJCQkgICAiYmxvY2tfZ3JvdXAgPSAldSwgaW5vZGU9JWx1IiwgZ3JvdXAsCiAJCQkgICBpbm8gKyBncm91cCAqIEVYVDRfSU5PREVTX1BFUl9HUk9VUChzYikpOwogCQlyZXR1cm4gMTsKQEAgLTkwNCw3ICs4OTgsNyBAQAogCQkJCUJVRkZFUl9UUkFDRShpbm9kZV9iaXRtYXBfYmgsCiAJCQkJCSJjYWxsIGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhIik7CiAJCQkJZXJyID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLAotCQkJCQkJCQkgaW5vZGUsCisJCQkJCQkJCSBOVUxMLAogCQkJCQkJCWlub2RlX2JpdG1hcF9iaCk7CiAJCQkJaWYgKGVycikKIAkJCQkJZ290byBmYWlsOwpAQCAtMTAyOSwxNSArMTAyMywxNiBAQAogCWlub2RlLT5pX2dlbmVyYXRpb24gPSBzYmktPnNfbmV4dF9nZW5lcmF0aW9uKys7CiAJc3Bpbl91bmxvY2soJnNiaS0+c19uZXh0X2dlbl9sb2NrKTsKIAotCWVpLT5pX3N0YXRlID0gRVhUNF9TVEFURV9ORVc7CisJZWktPmlfc3RhdGVfZmxhZ3MgPSAwOworCWV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX05FVyk7CiAKIAllaS0+aV9leHRyYV9pc2l6ZSA9IEVYVDRfU0Ioc2IpLT5zX3dhbnRfZXh0cmFfaXNpemU7CiAKIAlyZXQgPSBpbm9kZTsKLQlpZiAodmZzX2RxX2FsbG9jX2lub2RlKGlub2RlKSkgewotCQllcnIgPSAtRURRVU9UOworCWRxdW90X2luaXRpYWxpemUoaW5vZGUpOworCWVyciA9IGRxdW90X2FsbG9jX2lub2RlKGlub2RlKTsKKwlpZiAoZXJyKQogCQlnb3RvIGZhaWxfZHJvcDsKLQl9CiAKIAllcnIgPSBleHQ0X2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpcik7CiAJaWYgKGVycikKQEAgLTEwNzQsMTAgKzEwNjksMTAgQEAKIAlyZXR1cm4gcmV0OwogCiBmYWlsX2ZyZWVfZHJvcDoKLQl2ZnNfZHFfZnJlZV9pbm9kZShpbm9kZSk7CisJZHF1b3RfZnJlZV9pbm9kZShpbm9kZSk7CiAKIGZhaWxfZHJvcDoKLQl2ZnNfZHFfZHJvcChpbm9kZSk7CisJZHF1b3RfZHJvcChpbm9kZSk7CiAJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1FVT1RBOwogCWlub2RlLT5pX25saW5rID0gMDsKIAl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKQEAgLTEwOTgsOCArMTA5Myw3IEBACiAKIAkvKiBFcnJvciBjYXNlcyAtIGUyZnNjayBoYXMgYWxyZWFkeSBjbGVhbmVkIHVwIGZvciB1cyAqLwogCWlmIChpbm8gPiBtYXhfaW5vKSB7Ci0JCWV4dDRfd2FybmluZyhzYiwgX19mdW5jX18sCi0JCQkgICAgICJiYWQgb3JwaGFuIGlubyAlbHUhICBlMmZzY2sgd2FzIHJ1bj8iLCBpbm8pOworCQlleHQ0X3dhcm5pbmcoc2IsICJiYWQgb3JwaGFuIGlubyAlbHUhICBlMmZzY2sgd2FzIHJ1bj8iLCBpbm8pOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMTEwNyw4ICsxMTAxLDcgQEAKIAliaXQgPSAoaW5vIC0gMSkgJSBFWFQ0X0lOT0RFU19QRVJfR1JPVVAoc2IpOwogCWJpdG1hcF9iaCA9IGV4dDRfcmVhZF9pbm9kZV9iaXRtYXAoc2IsIGJsb2NrX2dyb3VwKTsKIAlpZiAoIWJpdG1hcF9iaCkgewotCQlleHQ0X3dhcm5pbmcoc2IsIF9fZnVuY19fLAotCQkJICAgICAiaW5vZGUgYml0bWFwIGVycm9yIGZvciBvcnBoYW4gJWx1IiwgaW5vKTsKKwkJZXh0NF93YXJuaW5nKHNiLCAiaW5vZGUgYml0bWFwIGVycm9yIGZvciBvcnBoYW4gJWx1IiwgaW5vKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTExNDAsOCArMTEzMyw3IEBACiAJZXJyID0gUFRSX0VSUihpbm9kZSk7CiAJaW5vZGUgPSBOVUxMOwogYmFkX29ycGhhbjoKLQlleHQ0X3dhcm5pbmcoc2IsIF9fZnVuY19fLAotCQkgICAgICJiYWQgb3JwaGFuIGlub2RlICVsdSEgIGUyZnNjayB3YXMgcnVuPyIsIGlubyk7CisJZXh0NF93YXJuaW5nKHNiLCAiYmFkIG9ycGhhbiBpbm9kZSAlbHUhICBlMmZzY2sgd2FzIHJ1bj8iLCBpbm8pOwogCXByaW50ayhLRVJOX05PVElDRSAiZXh0NF90ZXN0X2JpdChiaXQ9JWQsIGJsb2NrPSVsbHUpID0gJWRcbiIsCiAJICAgICAgIGJpdCwgKHVuc2lnbmVkIGxvbmcgbG9uZyliaXRtYXBfYmgtPmJfYmxvY2tuciwKIAkgICAgICAgZXh0NF90ZXN0X2JpdChiaXQsIGJpdG1hcF9iaC0+Yl9kYXRhKSk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmMKaW5kZXggZTExOTUyNC4uOTg2MTIwZiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCisrKyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgogI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogCiAjaW5jbHVkZSAiZXh0NF9qYmQyLmgiCiAjaW5jbHVkZSAieGF0dHIuaCIKQEAgLTE3MCw2ICsxNzEsOSBAQAogCWhhbmRsZV90ICpoYW5kbGU7CiAJaW50IGVycjsKIAorCWlmICghaXNfYmFkX2lub2RlKGlub2RlKSkKKwkJZHF1b3RfaW5pdGlhbGl6ZShpbm9kZSk7CisKIAlpZiAoZXh0NF9zaG91bGRfb3JkZXJfZGF0YShpbm9kZSkpCiAJCWV4dDRfYmVnaW5fb3JkZXJlZF90cnVuY2F0ZShpbm9kZSwgMCk7CiAJdHJ1bmNhdGVfaW5vZGVfcGFnZXMoJmlub2RlLT5pX2RhdGEsIDApOwpAQCAtMTk0LDcgKzE5OCw3IEBACiAJaW5vZGUtPmlfc2l6ZSA9IDA7CiAJZXJyID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOwogCWlmIChlcnIpIHsKLQkJZXh0NF93YXJuaW5nKGlub2RlLT5pX3NiLCBfX2Z1bmNfXywKKwkJZXh0NF93YXJuaW5nKGlub2RlLT5pX3NiLAogCQkJICAgICAiY291bGRuJ3QgbWFyayBpbm9kZSBkaXJ0eSAoZXJyICVkKSIsIGVycik7CiAJCWdvdG8gc3RvcF9oYW5kbGU7CiAJfQpAQCAtMjEyLDcgKzIxNiw3IEBACiAJCWlmIChlcnIgPiAwKQogCQkJZXJyID0gZXh0NF9qb3VybmFsX3Jlc3RhcnQoaGFuZGxlLCAzKTsKIAkJaWYgKGVyciAhPSAwKSB7Ci0JCQlleHQ0X3dhcm5pbmcoaW5vZGUtPmlfc2IsIF9fZnVuY19fLAorCQkJZXh0NF93YXJuaW5nKGlub2RlLT5pX3NiLAogCQkJCSAgICAgImNvdWxkbid0IGV4dGVuZCBqb3VybmFsIChlcnIgJWQpIiwgZXJyKTsKIAkJc3RvcF9oYW5kbGU6CiAJCQlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwpAQCAtMzIzLDggKzMyNyw3IEBACiAJCW9mZnNldHNbbisrXSA9IGlfYmxvY2sgJiAocHRycyAtIDEpOwogCQlmaW5hbCA9IHB0cnM7CiAJfSBlbHNlIHsKLQkJZXh0NF93YXJuaW5nKGlub2RlLT5pX3NiLCAiZXh0NF9ibG9ja190b19wYXRoIiwKLQkJCSAgICAgImJsb2NrICVsdSA+IG1heCBpbiBpbm9kZSAlbHUiLAorCQlleHQ0X3dhcm5pbmcoaW5vZGUtPmlfc2IsICJibG9jayAlbHUgPiBtYXggaW4gaW5vZGUgJWx1IiwKIAkJCSAgICAgaV9ibG9jayArIGRpcmVjdF9ibG9ja3MgKwogCQkJICAgICBpbmRpcmVjdF9ibG9ja3MgKyBkb3VibGVfYmxvY2tzLCBpbm9kZS0+aV9pbm8pOwogCX0KQEAgLTM0NCw3ICszNDcsNyBAQAogCQlpZiAoYmxrICYmCiAJCSAgICB1bmxpa2VseSghZXh0NF9kYXRhX2Jsb2NrX3ZhbGlkKEVYVDRfU0IoaW5vZGUtPmlfc2IpLAogCQkJCQkJICAgIGJsaywgMSkpKSB7Ci0JCQlleHQ0X2Vycm9yKGlub2RlLT5pX3NiLCBmdW5jdGlvbiwKKwkJCV9fZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwgZnVuY3Rpb24sCiAJCQkJICAgImludmFsaWQgYmxvY2sgcmVmZXJlbmNlICV1ICIKIAkJCQkgICAiaW4gaW5vZGUgIyVsdSIsIGJsaywgaW5vZGUtPmlfaW5vKTsKIAkJCXJldHVybiAtRUlPOwpAQCAtNjA3LDcgKzYxMCwxNCBAQAogCQlpZiAoKmVycikKIAkJCWdvdG8gZmFpbGVkX291dDsKIAotCQlCVUdfT04oY3VycmVudF9ibG9jayArIGNvdW50ID4gRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTKTsKKwkJaWYgKHVubGlrZWx5KGN1cnJlbnRfYmxvY2sgKyBjb3VudCA+IEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUykpIHsKKwkJCUVYVDRfRVJST1JfSU5PREUoaW5vZGUsCisJCQkJCSAiY3VycmVudF9ibG9jayAlbGx1ICsgY291bnQgJWx1ID4gJWQhIiwKKwkJCQkJIGN1cnJlbnRfYmxvY2ssIGNvdW50LAorCQkJCQkgRVhUNF9NQVhfQkxPQ0tfRklMRV9QSFlTKTsKKwkJCSplcnIgPSAtRUlPOworCQkJZ290byBmYWlsZWRfb3V0OworCQl9CiAKIAkJdGFyZ2V0IC09IGNvdW50OwogCQkvKiBhbGxvY2F0ZSBibG9ja3MgZm9yIGluZGlyZWN0IGJsb2NrcyAqLwpAQCAtNjQzLDcgKzY1MywxNCBAQAogCQlhci5mbGFncyA9IEVYVDRfTUJfSElOVF9EQVRBOwogCiAJY3VycmVudF9ibG9jayA9IGV4dDRfbWJfbmV3X2Jsb2NrcyhoYW5kbGUsICZhciwgZXJyKTsKLQlCVUdfT04oY3VycmVudF9ibG9jayArIGFyLmxlbiA+IEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUyk7CisJaWYgKHVubGlrZWx5KGN1cnJlbnRfYmxvY2sgKyBhci5sZW4gPiBFWFQ0X01BWF9CTE9DS19GSUxFX1BIWVMpKSB7CisJCUVYVDRfRVJST1JfSU5PREUoaW5vZGUsCisJCQkJICJjdXJyZW50X2Jsb2NrICVsbHUgKyBhci5sZW4gJWQgPiAlZCEiLAorCQkJCSBjdXJyZW50X2Jsb2NrLCBhci5sZW4sCisJCQkJIEVYVDRfTUFYX0JMT0NLX0ZJTEVfUEhZUyk7CisJCSplcnIgPSAtRUlPOworCQlnb3RvIGZhaWxlZF9vdXQ7CisJfQogCiAJaWYgKCplcnIgJiYgKHRhcmdldCA9PSBibGtzKSkgewogCQkvKgpAQCAtMTA2MSw2ICsxMDc4LDcgQEAKIAlpbnQgbWRiX2ZyZWUgPSAwLCBhbGxvY2F0ZWRfbWV0YV9ibG9ja3MgPSAwOwogCiAJc3Bpbl9sb2NrKCZlaS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKKwl0cmFjZV9leHQ0X2RhX3VwZGF0ZV9yZXNlcnZlX3NwYWNlKGlub2RlLCB1c2VkKTsKIAlpZiAodW5saWtlbHkodXNlZCA+IGVpLT5pX3Jlc2VydmVkX2RhdGFfYmxvY2tzKSkgewogCQlleHQ0X21zZyhpbm9kZS0+aV9zYiwgS0VSTl9OT1RJQ0UsICIlczogaW5vICVsdSwgdXNlZCAlZCAiCiAJCQkgIndpdGggb25seSAlZCByZXNlcnZlZCBkYXRhIGJsb2Nrc1xuIiwKQEAgLTEwOTMsOSArMTExMSw5IEBACiAKIAkvKiBVcGRhdGUgcXVvdGEgc3Vic3lzdGVtICovCiAJaWYgKHF1b3RhX2NsYWltKSB7Ci0JCXZmc19kcV9jbGFpbV9ibG9jayhpbm9kZSwgdXNlZCk7CisJCWRxdW90X2NsYWltX2Jsb2NrKGlub2RlLCB1c2VkKTsKIAkJaWYgKG1kYl9mcmVlKQotCQkJdmZzX2RxX3JlbGVhc2VfcmVzZXJ2YXRpb25fYmxvY2soaW5vZGUsIG1kYl9mcmVlKTsKKwkJCWRxdW90X3JlbGVhc2VfcmVzZXJ2YXRpb25fYmxvY2soaW5vZGUsIG1kYl9mcmVlKTsKIAl9IGVsc2UgewogCQkvKgogCQkgKiBXZSBkaWQgZmFsbG9jYXRlIHdpdGggYW4gb2Zmc2V0IHRoYXQgaXMgYWxyZWFkeSBkZWxheWVkCkBAIC0xMTA2LDggKzExMjQsOCBAQAogCQkgKiB0aGF0CiAJCSAqLwogCQlpZiAoYWxsb2NhdGVkX21ldGFfYmxvY2tzKQotCQkJdmZzX2RxX2NsYWltX2Jsb2NrKGlub2RlLCBhbGxvY2F0ZWRfbWV0YV9ibG9ja3MpOwotCQl2ZnNfZHFfcmVsZWFzZV9yZXNlcnZhdGlvbl9ibG9jayhpbm9kZSwgbWRiX2ZyZWUgKyB1c2VkKTsKKwkJCWRxdW90X2NsYWltX2Jsb2NrKGlub2RlLCBhbGxvY2F0ZWRfbWV0YV9ibG9ja3MpOworCQlkcXVvdF9yZWxlYXNlX3Jlc2VydmF0aW9uX2Jsb2NrKGlub2RlLCBtZGJfZnJlZSArIHVzZWQpOwogCX0KIAogCS8qCkBAIC0xMTI0LDcgKzExNDIsNyBAQAogCQkJCXNlY3Rvcl90IGxvZ2ljYWwsIHNlY3Rvcl90IHBoeXMsIGludCBsZW4pCiB7CiAJaWYgKCFleHQ0X2RhdGFfYmxvY2tfdmFsaWQoRVhUNF9TQihpbm9kZS0+aV9zYiksIHBoeXMsIGxlbikpIHsKLQkJZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwgbXNnLAorCQlfX2V4dDRfZXJyb3IoaW5vZGUtPmlfc2IsIG1zZywKIAkJCSAgICJpbm9kZSAjJWx1IGxvZ2ljYWwgYmxvY2sgJWxsdSBtYXBwZWQgdG8gJWxsdSAiCiAJCQkgICAiKHNpemUgJWQpIiwgaW5vZGUtPmlfaW5vLAogCQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgbG9naWNhbCwKQEAgLTEzMDYsNyArMTMyNCw3IEBACiAJCQkgKiBpX2RhdGEncyBmb3JtYXQgY2hhbmdpbmcuICBGb3JjZSB0aGUgbWlncmF0ZQogCQkJICogdG8gZmFpbCBieSBjbGVhcmluZyBtaWdyYXRlIGZsYWdzCiAJCQkgKi8KLQkJCUVYVDRfSShpbm9kZSktPmlfc3RhdGUgJj0gfkVYVDRfU1RBVEVfRVhUX01JR1JBVEU7CisJCQlleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX0VYVF9NSUdSQVRFKTsKIAkJfQogCiAJCS8qCkBAIC0xNTM0LDYgKzE1NTIsOCBAQAogCWV4dDRfdHJ1bmNhdGUoaW5vZGUpOwogfQogCitzdGF0aWMgaW50IGV4dDRfZ2V0X2Jsb2NrX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKKwkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpOwogc3RhdGljIGludCBleHQ0X3dyaXRlX2JlZ2luKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCSAgICBsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGZsYWdzLAogCQkJICAgIHN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpCkBAIC0xNTc1LDggKzE1OTUsMTIgQEAKIAl9CiAJKnBhZ2VwID0gcGFnZTsKIAotCXJldCA9IGJsb2NrX3dyaXRlX2JlZ2luKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBmbGFncywgcGFnZXAsIGZzZGF0YSwKLQkJCQlleHQ0X2dldF9ibG9jayk7CisJaWYgKGV4dDRfc2hvdWxkX2Rpb3JlYWRfbm9sb2NrKGlub2RlKSkKKwkJcmV0ID0gYmxvY2tfd3JpdGVfYmVnaW4oZmlsZSwgbWFwcGluZywgcG9zLCBsZW4sIGZsYWdzLCBwYWdlcCwKKwkJCQlmc2RhdGEsIGV4dDRfZ2V0X2Jsb2NrX3dyaXRlKTsKKwllbHNlCisJCXJldCA9IGJsb2NrX3dyaXRlX2JlZ2luKGZpbGUsIG1hcHBpbmcsIHBvcywgbGVuLCBmbGFncywgcGFnZXAsCisJCQkJZnNkYXRhLCBleHQ0X2dldF9ibG9jayk7CiAKIAlpZiAoIXJldCAmJiBleHQ0X3Nob3VsZF9qb3VybmFsX2RhdGEoaW5vZGUpKSB7CiAJCXJldCA9IHdhbGtfcGFnZV9idWZmZXJzKGhhbmRsZSwgcGFnZV9idWZmZXJzKHBhZ2UpLApAQCAtMTc5Myw3ICsxODE3LDcgQEAKIAluZXdfaV9zaXplID0gcG9zICsgY29waWVkOwogCWlmIChuZXdfaV9zaXplID4gaW5vZGUtPmlfc2l6ZSkKIAkJaV9zaXplX3dyaXRlKGlub2RlLCBwb3MrY29waWVkKTsKLQlFWFQ0X0koaW5vZGUpLT5pX3N0YXRlIHw9IEVYVDRfU1RBVEVfSkRBVEE7CisJZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfSkRBVEEpOwogCWlmIChuZXdfaV9zaXplID4gRVhUNF9JKGlub2RlKS0+aV9kaXNrc2l6ZSkgewogCQlleHQ0X3VwZGF0ZV9pX2Rpc2tzaXplKGlub2RlLCBuZXdfaV9zaXplKTsKIAkJcmV0MiA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKQEAgLTE4MzYsNiArMTg2MCw3IEBACiAJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihpbm9kZS0+aV9zYik7CiAJc3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBFWFQ0X0koaW5vZGUpOwogCXVuc2lnbmVkIGxvbmcgbWRfbmVlZGVkLCBtZF9yZXNlcnZlZDsKKwlpbnQgcmV0OwogCiAJLyoKIAkgKiByZWNhbGN1bGF0ZSB0aGUgYW1vdW50IG9mIG1ldGFkYXRhIGJsb2NrcyB0byByZXNlcnZlCkBAIC0xODQ2LDYgKzE4NzEsNyBAQAogCXNwaW5fbG9jaygmZWktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CiAJbWRfcmVzZXJ2ZWQgPSBlaS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrczsKIAltZF9uZWVkZWQgPSBleHQ0X2NhbGNfbWV0YWRhdGFfYW1vdW50KGlub2RlLCBsYmxvY2spOworCXRyYWNlX2V4dDRfZGFfcmVzZXJ2ZV9zcGFjZShpbm9kZSwgbWRfbmVlZGVkKTsKIAlzcGluX3VubG9jaygmZWktPmlfYmxvY2tfcmVzZXJ2YXRpb25fbG9jayk7CiAKIAkvKgpAQCAtMTg1MywxMSArMTg3OSwxMiBAQAogCSAqIGxhdGVyLiBSZWFsIHF1b3RhIGFjY291bnRpbmcgaXMgZG9uZSBhdCBwYWdlcyB3cml0ZW91dAogCSAqIHRpbWUuCiAJICovCi0JaWYgKHZmc19kcV9yZXNlcnZlX2Jsb2NrKGlub2RlLCBtZF9uZWVkZWQgKyAxKSkKLQkJcmV0dXJuIC1FRFFVT1Q7CisJcmV0ID0gZHF1b3RfcmVzZXJ2ZV9ibG9jayhpbm9kZSwgbWRfbmVlZGVkICsgMSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAogCWlmIChleHQ0X2NsYWltX2ZyZWVfYmxvY2tzKHNiaSwgbWRfbmVlZGVkICsgMSkpIHsKLQkJdmZzX2RxX3JlbGVhc2VfcmVzZXJ2YXRpb25fYmxvY2soaW5vZGUsIG1kX25lZWRlZCArIDEpOworCQlkcXVvdF9yZWxlYXNlX3Jlc2VydmF0aW9uX2Jsb2NrKGlub2RlLCBtZF9uZWVkZWQgKyAxKTsKIAkJaWYgKGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLT5pX3NiLCAmcmV0cmllcykpIHsKIAkJCXlpZWxkKCk7CiAJCQlnb3RvIHJlcGVhdDsKQEAgLTE5MTQsNyArMTk0MSw3IEBACiAKIAlzcGluX3VubG9jaygmRVhUNF9JKGlub2RlKS0+aV9ibG9ja19yZXNlcnZhdGlvbl9sb2NrKTsKIAotCXZmc19kcV9yZWxlYXNlX3Jlc2VydmF0aW9uX2Jsb2NrKGlub2RlLCB0b19mcmVlKTsKKwlkcXVvdF9yZWxlYXNlX3Jlc2VydmF0aW9uX2Jsb2NrKGlub2RlLCB0b19mcmVlKTsKIH0KIAogc3RhdGljIHZvaWQgZXh0NF9kYV9wYWdlX3JlbGVhc2VfcmVzZXJ2YXRpb24oc3RydWN0IHBhZ2UgKnBhZ2UsCkBAIC0yMDkxLDYgKzIxMTgsOCBAQAogCQkJCX0gZWxzZSBpZiAoYnVmZmVyX21hcHBlZChiaCkpCiAJCQkJCUJVR19PTihiaC0+Yl9ibG9ja25yICE9IHBibG9jayk7CiAKKwkJCQlpZiAoYnVmZmVyX3VuaW5pdChleGJoKSkKKwkJCQkJc2V0X2J1ZmZlcl91bmluaXQoYmgpOwogCQkJCWN1cl9sb2dpY2FsKys7CiAJCQkJcGJsb2NrKys7CiAJCQl9IHdoaWxlICgoYmggPSBiaC0+Yl90aGlzX3BhZ2UpICE9IGhlYWQpOwpAQCAtMjEzMywxNyArMjE2MiwxNiBAQAogCQkJYnJlYWs7CiAJCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7CiAJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHB2ZWMucGFnZXNbaV07Ci0JCQlpbmRleCA9IHBhZ2UtPmluZGV4OwotCQkJaWYgKGluZGV4ID4gZW5kKQorCQkJaWYgKHBhZ2UtPmluZGV4ID4gZW5kKQogCQkJCWJyZWFrOwotCQkJaW5kZXgrKzsKLQogCQkJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIAkJCUJVR19PTihQYWdlV3JpdGViYWNrKHBhZ2UpKTsKIAkJCWJsb2NrX2ludmFsaWRhdGVwYWdlKHBhZ2UsIDApOwogCQkJQ2xlYXJQYWdlVXB0b2RhdGUocGFnZSk7CiAJCQl1bmxvY2tfcGFnZShwYWdlKTsKIAkJfQorCQlpbmRleCA9IHB2ZWMucGFnZXNbbnJfcGFnZXMgLSAxXS0+aW5kZXggKyAxOworCQlwYWdldmVjX3JlbGVhc2UoJnB2ZWMpOwogCX0KIAlyZXR1cm47CiB9CkBAIC0yMjIwLDYgKzIyNDgsOCBAQAogCSAqLwogCW5ldy5iX3N0YXRlID0gMDsKIAlnZXRfYmxvY2tzX2ZsYWdzID0gRVhUNF9HRVRfQkxPQ0tTX0NSRUFURTsKKwlpZiAoZXh0NF9zaG91bGRfZGlvcmVhZF9ub2xvY2sobXBkLT5pbm9kZSkpCisJCWdldF9ibG9ja3NfZmxhZ3MgfD0gRVhUNF9HRVRfQkxPQ0tTX0lPX0NSRUFURV9FWFQ7CiAJaWYgKG1wZC0+Yl9zdGF0ZSAmICgxIDw8IEJIX0RlbGF5KSkKIAkJZ2V0X2Jsb2Nrc19mbGFncyB8PSBFWFQ0X0dFVF9CTE9DS1NfREVMQUxMT0NfUkVTRVJWRTsKIApAQCAtMjYzMCwxMSArMjY2MCwxNCBAQAogCQlyZXQgPSBlcnI7CiAKIAl3YWxrX3BhZ2VfYnVmZmVycyhoYW5kbGUsIHBhZ2VfYnVmcywgMCwgbGVuLCBOVUxMLCBicHV0X29uZSk7Ci0JRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSB8PSBFWFQ0X1NUQVRFX0pEQVRBOworCWV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX0pEQVRBKTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGV4dDRfc2V0X2JoX2VuZGlvKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOworc3RhdGljIHZvaWQgZXh0NF9lbmRfaW9fYnVmZmVyX3dyaXRlKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB1cHRvZGF0ZSk7CisKIC8qCiAgKiBOb3RlIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBzdGFydCBhIHRyYW5zYWN0aW9uIHVubGVzcyB3ZSdyZSBqb3VybmFsaW5nIGRhdGEKICAqIGJlY2F1c2Ugd2Ugc2hvdWxkIGhhdmUgaG9sZXMgZmlsbGVkIGZyb20gZXh0NF9wYWdlX21rd3JpdGUoKS4gV2UgZXZlbiBkb24ndApAQCAtMjY4Miw3ICsyNzE1LDcgQEAKIAlpbnQgcmV0ID0gMDsKIAlsb2ZmX3Qgc2l6ZTsKIAl1bnNpZ25lZCBpbnQgbGVuOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqcGFnZV9idWZzOworCXN0cnVjdCBidWZmZXJfaGVhZCAqcGFnZV9idWZzID0gTlVMTDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKIAogCXRyYWNlX2V4dDRfd3JpdGVwYWdlKGlub2RlLCBwYWdlKTsKQEAgLTI3NTgsNyArMjc5MSwxMSBAQAogCiAJaWYgKHRlc3Rfb3B0KGlub2RlLT5pX3NiLCBOT0JIKSAmJiBleHQ0X3Nob3VsZF93cml0ZWJhY2tfZGF0YShpbm9kZSkpCiAJCXJldCA9IG5vYmhfd3JpdGVwYWdlKHBhZ2UsIG5vYWxsb2NfZ2V0X2Jsb2NrX3dyaXRlLCB3YmMpOwotCWVsc2UKKwllbHNlIGlmIChwYWdlX2J1ZnMgJiYgYnVmZmVyX3VuaW5pdChwYWdlX2J1ZnMpKSB7CisJCWV4dDRfc2V0X2JoX2VuZGlvKHBhZ2VfYnVmcywgaW5vZGUpOworCQlyZXQgPSBibG9ja193cml0ZV9mdWxsX3BhZ2VfZW5kaW8ocGFnZSwgbm9hbGxvY19nZXRfYmxvY2tfd3JpdGUsCisJCQkJCSAgICB3YmMsIGV4dDRfZW5kX2lvX2J1ZmZlcl93cml0ZSk7CisJfSBlbHNlCiAJCXJldCA9IGJsb2NrX3dyaXRlX2Z1bGxfcGFnZShwYWdlLCBub2FsbG9jX2dldF9ibG9ja193cml0ZSwKIAkJCQkJICAgIHdiYyk7CiAKQEAgLTMzMDEsNyArMzMzOCw4IEBACiAJCWZpbGVtYXBfd3JpdGVfYW5kX3dhaXQobWFwcGluZyk7CiAJfQogCi0JaWYgKEVYVDRfSk9VUk5BTChpbm9kZSkgJiYgRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSAmIEVYVDRfU1RBVEVfSkRBVEEpIHsKKwlpZiAoRVhUNF9KT1VSTkFMKGlub2RlKSAmJgorCSAgICBleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfSkRBVEEpKSB7CiAJCS8qCiAJCSAqIFRoaXMgaXMgYSBSRUFMTFkgaGVhdnl3ZWlnaHQgYXBwcm9hY2gsIGJ1dCB0aGUgdXNlIG9mCiAJCSAqIGJtYXAgb24gZGlydHkgZmlsZXMgaXMgZXhwZWN0ZWQgdG8gYmUgZXh0cmVtZWx5IHJhcmU6CkBAIC0zMzIwLDcgKzMzNTgsNyBAQAogCQkgKiBldmVyeXRoaW5nIHRoZXkgZ2V0LgogCQkgKi8KIAotCQlFWFQ0X0koaW5vZGUpLT5pX3N0YXRlICY9IH5FWFQ0X1NUQVRFX0pEQVRBOworCQlleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX0pEQVRBKTsKIAkJam91cm5hbCA9IEVYVDRfSk9VUk5BTChpbm9kZSk7CiAJCWpiZDJfam91cm5hbF9sb2NrX3VwZGF0ZXMoam91cm5hbCk7CiAJCWVyciA9IGpiZDJfam91cm5hbF9mbHVzaChqb3VybmFsKTsKQEAgLTMzNDUsMTEgKzMzODMsNDUgQEAKIAlyZXR1cm4gbXBhZ2VfcmVhZHBhZ2VzKG1hcHBpbmcsIHBhZ2VzLCBucl9wYWdlcywgZXh0NF9nZXRfYmxvY2spOwogfQogCitzdGF0aWMgdm9pZCBleHQ0X2ZyZWVfaW9fZW5kKGV4dDRfaW9fZW5kX3QgKmlvKQoreworCUJVR19PTighaW8pOworCWlmIChpby0+cGFnZSkKKwkJcHV0X3BhZ2UoaW8tPnBhZ2UpOworCWlwdXQoaW8tPmlub2RlKTsKKwlrZnJlZShpbyk7Cit9CisKK3N0YXRpYyB2b2lkIGV4dDRfaW52YWxpZGF0ZXBhZ2VfZnJlZV9lbmRpbyhzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpoZWFkLCAqYmg7CisJdW5zaWduZWQgaW50IGN1cnJfb2ZmID0gMDsKKworCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSkKKwkJcmV0dXJuOworCWhlYWQgPSBiaCA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKKwlkbyB7CisJCWlmIChvZmZzZXQgPD0gY3Vycl9vZmYgJiYgdGVzdF9jbGVhcl9idWZmZXJfdW5pbml0KGJoKQorCQkJCQkmJiBiaC0+Yl9wcml2YXRlKSB7CisJCQlleHQ0X2ZyZWVfaW9fZW5kKGJoLT5iX3ByaXZhdGUpOworCQkJYmgtPmJfcHJpdmF0ZSA9IE5VTEw7CisJCQliaC0+Yl9lbmRfaW8gPSBOVUxMOworCQl9CisJCWN1cnJfb2ZmID0gY3Vycl9vZmYgKyBiaC0+Yl9zaXplOworCQliaCA9IGJoLT5iX3RoaXNfcGFnZTsKKwl9IHdoaWxlIChiaCAhPSBoZWFkKTsKK30KKwogc3RhdGljIHZvaWQgZXh0NF9pbnZhbGlkYXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7CiAJam91cm5hbF90ICpqb3VybmFsID0gRVhUNF9KT1VSTkFMKHBhZ2UtPm1hcHBpbmctPmhvc3QpOwogCiAJLyoKKwkgKiBmcmVlIGFueSBpb19lbmQgc3RydWN0dXJlIGFsbG9jYXRlZCBmb3IgYnVmZmVycyB0byBiZSBkaXNjYXJkZWQKKwkgKi8KKwlpZiAoZXh0NF9zaG91bGRfZGlvcmVhZF9ub2xvY2socGFnZS0+bWFwcGluZy0+aG9zdCkpCisJCWV4dDRfaW52YWxpZGF0ZXBhZ2VfZnJlZV9lbmRpbyhwYWdlLCBvZmZzZXQpOworCS8qCiAJICogSWYgaXQncyBhIGZ1bGwgdHJ1bmNhdGUgd2UganVzdCBmb3JnZXQgYWJvdXQgdGhlIHBlbmRpbmcgZGlydHlpbmcKIAkgKi8KIAlpZiAob2Zmc2V0ID09IDApCkBAIC0zNDIwLDcgKzM0OTIsMTQgQEAKIAl9CiAKIHJldHJ5OgotCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsIGlub2RlLT5pX3NiLT5zX2JkZXYsIGlvdiwKKwlpZiAocncgPT0gUkVBRCAmJiBleHQ0X3Nob3VsZF9kaW9yZWFkX25vbG9jayhpbm9kZSkpCisJCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JT19ub19sb2NraW5nKHJ3LCBpb2NiLCBpbm9kZSwKKwkJCQkgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAorCQkJCSBvZmZzZXQsIG5yX3NlZ3MsCisJCQkJIGV4dDRfZ2V0X2Jsb2NrLCBOVUxMKTsKKwllbHNlCisJCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsCisJCQkJIGlub2RlLT5pX3NiLT5zX2JkZXYsIGlvdiwKIAkJCQkgb2Zmc2V0LCBucl9zZWdzLAogCQkJCSBleHQ0X2dldF9ibG9jaywgTlVMTCk7CiAJaWYgKHJldCA9PSAtRU5PU1BDICYmIGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLT5pX3NiLCAmcmV0cmllcykpCkBAIC0zNDM2LDYgKzM1MTUsOSBAQAogCQkJICogYnV0IGNhbm5vdCBleHRlbmQgaV9zaXplLiBCYWlsIG91dCBhbmQgcHJldGVuZAogCQkJICogdGhlIHdyaXRlIGZhaWxlZC4uLiAqLwogCQkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQkJaWYgKGlub2RlLT5pX25saW5rKQorCQkJCWV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7CisKIAkJCWdvdG8gb3V0OwogCQl9CiAJCWlmIChpbm9kZS0+aV9ubGluaykKQEAgLTM0NjMsNzUgKzM1NDUsNjMgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGV4dDRfZ2V0X2Jsb2NrX2Rpb193cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzZWN0b3JfdCBpYmxvY2ssCitzdGF0aWMgaW50IGV4dDRfZ2V0X2Jsb2NrX3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKIAkJICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpCiB7Ci0JaGFuZGxlX3QgKmhhbmRsZSA9IE5VTEw7CisJaGFuZGxlX3QgKmhhbmRsZSA9IGV4dDRfam91cm5hbF9jdXJyZW50X2hhbmRsZSgpOwogCWludCByZXQgPSAwOwogCXVuc2lnbmVkIG1heF9ibG9ja3MgPSBiaF9yZXN1bHQtPmJfc2l6ZSA+PiBpbm9kZS0+aV9ibGtiaXRzOwogCWludCBkaW9fY3JlZGl0czsKKwlpbnQgc3RhcnRlZCA9IDA7CiAKLQlleHQ0X2RlYnVnKCJleHQ0X2dldF9ibG9ja19kaW9fd3JpdGU6IGlub2RlICVsdSwgY3JlYXRlIGZsYWcgJWRcbiIsCisJZXh0NF9kZWJ1ZygiZXh0NF9nZXRfYmxvY2tfd3JpdGU6IGlub2RlICVsdSwgY3JlYXRlIGZsYWcgJWRcbiIsCiAJCSAgIGlub2RlLT5pX2lubywgY3JlYXRlKTsKIAkvKgotCSAqIERJTyBWRlMgY29kZSBwYXNzZXMgY3JlYXRlID0gMCBmbGFnIGZvciB3cml0ZSB0bwotCSAqIHRoZSBtaWRkbGUgb2YgZmlsZS4gSXQgZG9lcyB0aGlzIHRvIGF2b2lkIGJsb2NrCi0JICogYWxsb2NhdGlvbiBmb3IgaG9sZXMsIHRvIHByZXZlbnQgZXhwb3NlIHN0YWxlIGRhdGEKLQkgKiBvdXQgd2hlbiB0aGVyZSBpcyBwYXJhbGxlbCBidWZmZXJlZCByZWFkICh3aGljaCBkb2VzCi0JICogbm90IGhvbGQgdGhlIGlfbXV0ZXggbG9jaykgd2hpbGUgZGlyZWN0IElPIHdyaXRlIGhhcwotCSAqIG5vdCBjb21wbGV0ZWQuIERJTyByZXF1ZXN0IG9uIGhvbGVzIGZpbmFsbHkgZmFsbHMgYmFjawotCSAqIHRvIGJ1ZmZlcmVkIElPIGZvciB0aGlzIHJlYXNvbi4KLQkgKgotCSAqIEZvciBleHQ0IGV4dGVudCBiYXNlZCBmaWxlLCBzaW5jZSB3ZSBzdXBwb3J0IGZhbGxvY2F0ZSwKLQkgKiBuZXcgYWxsb2NhdGVkIGV4dGVudCBhcyB1bmluaXRpYWxpemVkLCBmb3IgaG9sZXMsIHdlCi0JICogY291bGQgZmFsbG9jYXRlIGJsb2NrcyBmb3IgaG9sZXMsIHRodXMgcGFyYWxsZWwKLQkgKiBidWZmZXJlZCBJTyByZWFkIHdpbGwgemVybyBvdXQgdGhlIHBhZ2Ugd2hlbiByZWFkIG9uCi0JICogYSBob2xlIHdoaWxlIHBhcmFsbGVsIERJTyB3cml0ZSB0byB0aGUgaG9sZSBoYXMgbm90IGNvbXBsZXRlZC4KLQkgKgotCSAqIHdoZW4gd2UgY29tZSBoZXJlLCB3ZSBrbm93IGl0J3MgYSBkaXJlY3QgSU8gd3JpdGUgdG8KLQkgKiB0byB0aGUgbWlkZGxlIG9mIGZpbGUgKDxpX3NpemUpCi0JICogc28gaXQncyBzYWZlIHRvIG92ZXJyaWRlIHRoZSBjcmVhdGUgZmxhZyBmcm9tIFZGUy4KKwkgKiBleHQ0X2dldF9ibG9jayBpbiBwcmVwYXJlIGZvciBhIERJTyB3cml0ZSBvciBidWZmZXIgd3JpdGUuCisJICogV2UgYWxsb2NhdGUgYW4gdWluaXRpYWxpemVkIGV4dGVudCBpZiBibG9ja3MgaGF2ZW4ndCBiZWVuIGFsbG9jYXRlZC4KKwkgKiBUaGUgZXh0ZW50IHdpbGwgYmUgY29udmVydGVkIHRvIGluaXRpYWxpemVkIGFmdGVyIElPIGNvbXBsZXRlLgogCSAqLwotCWNyZWF0ZSA9IEVYVDRfR0VUX0JMT0NLU19ESU9fQ1JFQVRFX0VYVDsKKwljcmVhdGUgPSBFWFQ0X0dFVF9CTE9DS1NfSU9fQ1JFQVRFX0VYVDsKIAotCWlmIChtYXhfYmxvY2tzID4gRElPX01BWF9CTE9DS1MpCi0JCW1heF9ibG9ja3MgPSBESU9fTUFYX0JMT0NLUzsKLQlkaW9fY3JlZGl0cyA9IGV4dDRfY2h1bmtfdHJhbnNfYmxvY2tzKGlub2RlLCBtYXhfYmxvY2tzKTsKLQloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIGRpb19jcmVkaXRzKTsKLQlpZiAoSVNfRVJSKGhhbmRsZSkpIHsKLQkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOwotCQlnb3RvIG91dDsKKwlpZiAoIWhhbmRsZSkgeworCQlpZiAobWF4X2Jsb2NrcyA+IERJT19NQVhfQkxPQ0tTKQorCQkJbWF4X2Jsb2NrcyA9IERJT19NQVhfQkxPQ0tTOworCQlkaW9fY3JlZGl0cyA9IGV4dDRfY2h1bmtfdHJhbnNfYmxvY2tzKGlub2RlLCBtYXhfYmxvY2tzKTsKKwkJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBkaW9fY3JlZGl0cyk7CisJCWlmIChJU19FUlIoaGFuZGxlKSkgeworCQkJcmV0ID0gUFRSX0VSUihoYW5kbGUpOworCQkJZ290byBvdXQ7CisJCX0KKwkJc3RhcnRlZCA9IDE7CiAJfQorCiAJcmV0ID0gZXh0NF9nZXRfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGlibG9jaywgbWF4X2Jsb2NrcywgYmhfcmVzdWx0LAogCQkJICAgICAgY3JlYXRlKTsKIAlpZiAocmV0ID4gMCkgewogCQliaF9yZXN1bHQtPmJfc2l6ZSA9IChyZXQgPDwgaW5vZGUtPmlfYmxrYml0cyk7CiAJCXJldCA9IDA7CiAJfQotCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CisJaWYgKHN0YXJ0ZWQpCisJCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgZXh0NF9mcmVlX2lvX2VuZChleHQ0X2lvX2VuZF90ICppbykKLXsKLQlCVUdfT04oIWlvKTsKLQlpcHV0KGlvLT5pbm9kZSk7Ci0Ja2ZyZWUoaW8pOwotfQotc3RhdGljIHZvaWQgZHVtcF9haW9fZGlvX2xpc3Qoc3RydWN0IGlub2RlICogaW5vZGUpCitzdGF0aWMgdm9pZCBkdW1wX2NvbXBsZXRlZF9JTyhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkKIHsKICNpZmRlZglFWFQ0X0RFQlVHCiAJc3RydWN0IGxpc3RfaGVhZCAqY3VyLCAqYmVmb3JlLCAqYWZ0ZXI7CiAJZXh0NF9pb19lbmRfdCAqaW8sICppbzAsICppbzE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWlmIChsaXN0X2VtcHR5KCZFWFQ0X0koaW5vZGUpLT5pX2Fpb19kaW9fY29tcGxldGVfbGlzdCkpewotCQlleHQ0X2RlYnVnKCJpbm9kZSAlbHUgYWlvIGRpbyBsaXN0IGlzIGVtcHR5XG4iLCBpbm9kZS0+aV9pbm8pOworCWlmIChsaXN0X2VtcHR5KCZFWFQ0X0koaW5vZGUpLT5pX2NvbXBsZXRlZF9pb19saXN0KSl7CisJCWV4dDRfZGVidWcoImlub2RlICVsdSBjb21wbGV0ZWRfaW8gbGlzdCBpcyBlbXB0eVxuIiwgaW5vZGUtPmlfaW5vKTsKIAkJcmV0dXJuOwogCX0KIAotCWV4dDRfZGVidWcoIkR1bXAgaW5vZGUgJWx1IGFpb19kaW9fY29tcGxldGVkX0lPIGxpc3QgXG4iLCBpbm9kZS0+aV9pbm8pOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoaW8sICZFWFQ0X0koaW5vZGUpLT5pX2Fpb19kaW9fY29tcGxldGVfbGlzdCwgbGlzdCl7CisJZXh0NF9kZWJ1ZygiRHVtcCBpbm9kZSAlbHUgY29tcGxldGVkX2lvIGxpc3QgXG4iLCBpbm9kZS0+aV9pbm8pOworCXNwaW5fbG9ja19pcnFzYXZlKCZFWFQ0X0koaW5vZGUpLT5pX2NvbXBsZXRlZF9pb19sb2NrLCBmbGFncyk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpbywgJkVYVDRfSShpbm9kZSktPmlfY29tcGxldGVkX2lvX2xpc3QsIGxpc3QpewogCQljdXIgPSAmaW8tPmxpc3Q7CiAJCWJlZm9yZSA9IGN1ci0+cHJldjsKIAkJaW8wID0gY29udGFpbmVyX29mKGJlZm9yZSwgZXh0NF9pb19lbmRfdCwgbGlzdCk7CkBAIC0zNTQxLDMyICszNjExLDMxIEBACiAJCWV4dDRfZGVidWcoImlvIDB4JXAgZnJvbSBpbm9kZSAlbHUscHJldiAweCVwLG5leHQgMHglcFxuIiwKIAkJCSAgICBpbywgaW5vZGUtPmlfaW5vLCBpbzAsIGlvMSk7CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJkVYVDRfSShpbm9kZSktPmlfY29tcGxldGVkX2lvX2xvY2ssIGZsYWdzKTsKICNlbmRpZgogfQogCiAvKgogICogY2hlY2sgYSByYW5nZSBvZiBzcGFjZSBhbmQgY29udmVydCB1bndyaXR0ZW4gZXh0ZW50cyB0byB3cml0dGVuLgogICovCi1zdGF0aWMgaW50IGV4dDRfZW5kX2Fpb19kaW9fbm9sb2NrKGV4dDRfaW9fZW5kX3QgKmlvKQorc3RhdGljIGludCBleHQ0X2VuZF9pb19ub2xvY2soZXh0NF9pb19lbmRfdCAqaW8pCiB7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGlvLT5pbm9kZTsKIAlsb2ZmX3Qgb2Zmc2V0ID0gaW8tPm9mZnNldDsKLQlzaXplX3Qgc2l6ZSA9IGlvLT5zaXplOworCXNzaXplX3Qgc2l6ZSA9IGlvLT5zaXplOwogCWludCByZXQgPSAwOwogCi0JZXh0NF9kZWJ1ZygiZW5kX2Fpb19kaW9fb25sb2NrOiBpbyAweCVwIGZyb20gaW5vZGUgJWx1LGxpc3QtPm5leHQgMHglcCwiCisJZXh0NF9kZWJ1ZygiZXh0NF9lbmRfaW9fbm9sb2NrOiBpbyAweCVwIGZyb20gaW5vZGUgJWx1LGxpc3QtPm5leHQgMHglcCwiCiAJCSAgICJsaXN0LT5wcmV2IDB4JXBcbiIsCiAJICAgICAgICAgICBpbywgaW5vZGUtPmlfaW5vLCBpby0+bGlzdC5uZXh0LCBpby0+bGlzdC5wcmV2KTsKIAogCWlmIChsaXN0X2VtcHR5KCZpby0+bGlzdCkpCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoaW8tPmZsYWcgIT0gRElPX0FJT19VTldSSVRURU4pCisJaWYgKGlvLT5mbGFnICE9IEVYVDRfSU9fVU5XUklUVEVOKQogCQlyZXR1cm4gcmV0OwogCi0JaWYgKG9mZnNldCArIHNpemUgPD0gaV9zaXplX3JlYWQoaW5vZGUpKQotCQlyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaW5vZGUsIG9mZnNldCwgc2l6ZSk7Ci0KKwlyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaW5vZGUsIG9mZnNldCwgc2l6ZSk7CiAJaWYgKHJldCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRU1FUkcgIiVzOiBmYWlsZWQgdG8gY29udmVydCB1bndyaXR0ZW4iCiAJCQkiZXh0ZW50cyB0byB3cml0dGVuIGV4dGVudHMsIGVycm9yIGlzICVkIgpAQCAtMzU3OSw1MCArMzY0OCw2NCBAQAogCWlvLT5mbGFnID0gMDsKIAlyZXR1cm4gcmV0OwogfQorCiAvKgogICogd29yayBvbiBjb21wbGV0ZWQgYWlvIGRpbyBJTywgdG8gY29udmVydCB1bndyaXR0ZW4gZXh0ZW50cyB0byBleHRlbnRzCiAgKi8KLXN0YXRpYyB2b2lkIGV4dDRfZW5kX2Fpb19kaW9fd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCitzdGF0aWMgdm9pZCBleHQ0X2VuZF9pb193b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlleHQ0X2lvX2VuZF90ICppbyAgPSBjb250YWluZXJfb2Yod29yaywgZXh0NF9pb19lbmRfdCwgd29yayk7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGlvLT5pbm9kZTsKLQlpbnQgcmV0ID0gMDsKKwlleHQ0X2lvX2VuZF90CQkqaW8gPSBjb250YWluZXJfb2Yod29yaywgZXh0NF9pb19lbmRfdCwgd29yayk7CisJc3RydWN0IGlub2RlCQkqaW5vZGUgPSBpby0+aW5vZGU7CisJc3RydWN0IGV4dDRfaW5vZGVfaW5mbwkqZWkgPSBFWFQ0X0koaW5vZGUpOworCXVuc2lnbmVkIGxvbmcJCWZsYWdzOworCWludAkJCXJldDsKIAogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQlyZXQgPSBleHQ0X2VuZF9haW9fZGlvX25vbG9jayhpbyk7Ci0JaWYgKHJldCA+PSAwKSB7Ci0JCWlmICghbGlzdF9lbXB0eSgmaW8tPmxpc3QpKQotCQkJbGlzdF9kZWxfaW5pdCgmaW8tPmxpc3QpOwotCQlleHQ0X2ZyZWVfaW9fZW5kKGlvKTsKKwlyZXQgPSBleHQ0X2VuZF9pb19ub2xvY2soaW8pOworCWlmIChyZXQgPCAwKSB7CisJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQlyZXR1cm47CiAJfQorCisJc3Bpbl9sb2NrX2lycXNhdmUoJmVpLT5pX2NvbXBsZXRlZF9pb19sb2NrLCBmbGFncyk7CisJaWYgKCFsaXN0X2VtcHR5KCZpby0+bGlzdCkpCisJCWxpc3RfZGVsX2luaXQoJmlvLT5saXN0KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaS0+aV9jb21wbGV0ZWRfaW9fbG9jaywgZmxhZ3MpOwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCWV4dDRfZnJlZV9pb19lbmQoaW8pOwogfQorCiAvKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBleHQ0X3N5bmNfZmlsZSgpLgogICoKLSAqIFdoZW4gQUlPIERJTyBJTyBpcyBjb21wbGV0ZWQsIHRoZSB3b3JrIHRvIGNvbnZlcnQgdW53cml0dGVuCi0gKiBleHRlbnRzIHRvIHdyaXR0ZW4gaXMgcXVldWVkIG9uIHdvcmtxdWV1ZSBidXQgbWF5IG5vdCBnZXQgaW1tZWRpYXRlbHkKKyAqIFdoZW4gSU8gaXMgY29tcGxldGVkLCB0aGUgd29yayB0byBjb252ZXJ0IHVud3JpdHRlbiBleHRlbnRzIHRvCisgKiB3cml0dGVuIGlzIHF1ZXVlZCBvbiB3b3JrcXVldWUgYnV0IG1heSBub3QgZ2V0IGltbWVkaWF0ZWx5CiAgKiBzY2hlZHVsZWQuIFdoZW4gZnN5bmMgaXMgY2FsbGVkLCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGUKICAqIGNvbnZlcnNpb24gaXMgY29tcGxldGUgYmVmb3JlIGZzeW5jIHJldHVybnMuCi0gKiBUaGUgaW5vZGUga2VlcHMgdHJhY2sgb2YgYSBsaXN0IG9mIGNvbXBsZXRlZCBBSU8gZnJvbSBESU8gcGF0aAotICogdGhhdCBtaWdodCBuZWVkcyB0byBkbyB0aGUgY29udmVyc2lvbi4gVGhpcyBmdW5jdGlvbiB3YWxrcyB0aHJvdWdoCi0gKiB0aGUgbGlzdCBhbmQgY29udmVydCB0aGUgcmVsYXRlZCB1bndyaXR0ZW4gZXh0ZW50cyB0byB3cml0dGVuLgorICogVGhlIGlub2RlIGtlZXBzIHRyYWNrIG9mIGEgbGlzdCBvZiBwZW5kaW5nL2NvbXBsZXRlZCBJTyB0aGF0CisgKiBtaWdodCBuZWVkcyB0byBkbyB0aGUgY29udmVyc2lvbi4gVGhpcyBmdW5jdGlvbiB3YWxrcyB0aHJvdWdoCisgKiB0aGUgbGlzdCBhbmQgY29udmVydCB0aGUgcmVsYXRlZCB1bndyaXR0ZW4gZXh0ZW50cyBmb3IgY29tcGxldGVkIElPCisgKiB0byB3cml0dGVuLgorICogVGhlIGZ1bmN0aW9uIHJldHVybiB0aGUgbnVtYmVyIG9mIHBlbmRpbmcgSU9zIG9uIHN1Y2Nlc3MuCiAgKi8KLWludCBmbHVzaF9haW9fZGlvX2NvbXBsZXRlZF9JTyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoraW50IGZsdXNoX2NvbXBsZXRlZF9JTyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCWV4dDRfaW9fZW5kX3QgKmlvOworCXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gRVhUNF9JKGlub2RlKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCWludCByZXQyID0gMDsKIAotCWlmIChsaXN0X2VtcHR5KCZFWFQ0X0koaW5vZGUpLT5pX2Fpb19kaW9fY29tcGxldGVfbGlzdCkpCisJaWYgKGxpc3RfZW1wdHkoJmVpLT5pX2NvbXBsZXRlZF9pb19saXN0KSkKIAkJcmV0dXJuIHJldDsKIAotCWR1bXBfYWlvX2Rpb19saXN0KGlub2RlKTsKLQl3aGlsZSAoIWxpc3RfZW1wdHkoJkVYVDRfSShpbm9kZSktPmlfYWlvX2Rpb19jb21wbGV0ZV9saXN0KSl7Ci0JCWlvID0gbGlzdF9lbnRyeShFWFQ0X0koaW5vZGUpLT5pX2Fpb19kaW9fY29tcGxldGVfbGlzdC5uZXh0LAorCWR1bXBfY29tcGxldGVkX0lPKGlub2RlKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWktPmlfY29tcGxldGVkX2lvX2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmVpLT5pX2NvbXBsZXRlZF9pb19saXN0KSl7CisJCWlvID0gbGlzdF9lbnRyeShlaS0+aV9jb21wbGV0ZWRfaW9fbGlzdC5uZXh0LAogCQkJCWV4dDRfaW9fZW5kX3QsIGxpc3QpOwogCQkvKgotCQkgKiBDYWxsaW5nIGV4dDRfZW5kX2Fpb19kaW9fbm9sb2NrKCkgdG8gY29udmVydCBjb21wbGV0ZWQKKwkJICogQ2FsbGluZyBleHQ0X2VuZF9pb19ub2xvY2soKSB0byBjb252ZXJ0IGNvbXBsZXRlZAogCQkgKiBJTyB0byB3cml0dGVuLgogCQkgKgogCQkgKiBXaGVuIGV4dDRfc3luY19maWxlKCkgaXMgY2FsbGVkLCBydW5fcXVldWUoKSBtYXkgYWxyZWFkeQpAQCAtMzYzNSwyMCArMzcxOCwyMyBAQAogCQkgKiBhdm9pZCBkb3VibGUgY29udmVydGluZyBmcm9tIGJvdGggZnN5bmMgYW5kIGJhY2tncm91bmQgd29yawogCQkgKiBxdWV1ZSB3b3JrLgogCQkgKi8KLQkJcmV0ID0gZXh0NF9lbmRfYWlvX2Rpb19ub2xvY2soaW8pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlaS0+aV9jb21wbGV0ZWRfaW9fbG9jaywgZmxhZ3MpOworCQlyZXQgPSBleHQ0X2VuZF9pb19ub2xvY2soaW8pOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZWktPmlfY29tcGxldGVkX2lvX2xvY2ssIGZsYWdzKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXQyID0gcmV0OwogCQllbHNlCiAJCQlsaXN0X2RlbF9pbml0KCZpby0+bGlzdCk7CiAJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVpLT5pX2NvbXBsZXRlZF9pb19sb2NrLCBmbGFncyk7CiAJcmV0dXJuIChyZXQyIDwgMCkgPyByZXQyIDogMDsKIH0KIAotc3RhdGljIGV4dDRfaW9fZW5kX3QgKmV4dDRfaW5pdF9pb19lbmQgKHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgZXh0NF9pb19lbmRfdCAqZXh0NF9pbml0X2lvX2VuZCAoc3RydWN0IGlub2RlICppbm9kZSwgZ2ZwX3QgZmxhZ3MpCiB7CiAJZXh0NF9pb19lbmRfdCAqaW8gPSBOVUxMOwogCi0JaW8gPSBrbWFsbG9jKHNpemVvZigqaW8pLCBHRlBfTk9GUyk7CisJaW8gPSBrbWFsbG9jKHNpemVvZigqaW8pLCBmbGFncyk7CiAKIAlpZiAoaW8pIHsKIAkJaWdyYWIoaW5vZGUpOwpAQCAtMzY1Niw4ICszNzQyLDggQEAKIAkJaW8tPmZsYWcgPSAwOwogCQlpby0+b2Zmc2V0ID0gMDsKIAkJaW8tPnNpemUgPSAwOwotCQlpby0+ZXJyb3IgPSAwOwotCQlJTklUX1dPUksoJmlvLT53b3JrLCBleHQ0X2VuZF9haW9fZGlvX3dvcmspOworCQlpby0+cGFnZSA9IE5VTEw7CisJCUlOSVRfV09SSygmaW8tPndvcmssIGV4dDRfZW5kX2lvX3dvcmspOwogCQlJTklUX0xJU1RfSEVBRCgmaW8tPmxpc3QpOwogCX0KIApAQCAtMzY2OSw2ICszNzU1LDggQEAKIHsKICAgICAgICAgZXh0NF9pb19lbmRfdCAqaW9fZW5kID0gaW9jYi0+cHJpdmF0ZTsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd3E7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaTsKIAogCS8qIGlmIG5vdCBhc3luYyBkaXJlY3QgSU8gb3IgZGlvIHdpdGggMCBieXRlcyB3cml0ZSwganVzdCByZXR1cm4gKi8KIAlpZiAoIWlvX2VuZCB8fCAhc2l6ZSkKQEAgLTM2ODAsNyArMzc2OCw3IEBACiAJCSAgc2l6ZSk7CiAKIAkvKiBpZiBub3QgYWlvIGRpbyB3aXRoIHVud3JpdHRlbiBleHRlbnRzLCBqdXN0IGZyZWUgaW8gYW5kIHJldHVybiAqLwotCWlmIChpb19lbmQtPmZsYWcgIT0gRElPX0FJT19VTldSSVRURU4peworCWlmIChpb19lbmQtPmZsYWcgIT0gRVhUNF9JT19VTldSSVRURU4pewogCQlleHQ0X2ZyZWVfaW9fZW5kKGlvX2VuZCk7CiAJCWlvY2ItPnByaXZhdGUgPSBOVUxMOwogCQlyZXR1cm47CkBAIC0zNjg4LDE2ICszNzc2LDg1IEBACiAKIAlpb19lbmQtPm9mZnNldCA9IG9mZnNldDsKIAlpb19lbmQtPnNpemUgPSBzaXplOworCWlvX2VuZC0+ZmxhZyA9IEVYVDRfSU9fVU5XUklUVEVOOwogCXdxID0gRVhUNF9TQihpb19lbmQtPmlub2RlLT5pX3NiKS0+ZGlvX3Vud3JpdHRlbl93cTsKIAogCS8qIHF1ZXVlIHRoZSB3b3JrIHRvIGNvbnZlcnQgdW53cml0dGVuIGV4dGVudHMgdG8gd3JpdHRlbiAqLwogCXF1ZXVlX3dvcmsod3EsICZpb19lbmQtPndvcmspOwogCiAJLyogQWRkIHRoZSBpb19lbmQgdG8gcGVyLWlub2RlIGNvbXBsZXRlZCBhaW8gZGlvIGxpc3QqLwotCWxpc3RfYWRkX3RhaWwoJmlvX2VuZC0+bGlzdCwKLQkJICZFWFQ0X0koaW9fZW5kLT5pbm9kZSktPmlfYWlvX2Rpb19jb21wbGV0ZV9saXN0KTsKKwllaSA9IEVYVDRfSShpb19lbmQtPmlub2RlKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZWktPmlfY29tcGxldGVkX2lvX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZF90YWlsKCZpb19lbmQtPmxpc3QsICZlaS0+aV9jb21wbGV0ZWRfaW9fbGlzdCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZWktPmlfY29tcGxldGVkX2lvX2xvY2ssIGZsYWdzKTsKIAlpb2NiLT5wcml2YXRlID0gTlVMTDsKIH0KKworc3RhdGljIHZvaWQgZXh0NF9lbmRfaW9fYnVmZmVyX3dyaXRlKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGludCB1cHRvZGF0ZSkKK3sKKwlleHQ0X2lvX2VuZF90ICppb19lbmQgPSBiaC0+Yl9wcml2YXRlOworCXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp3cTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoIXRlc3RfY2xlYXJfYnVmZmVyX3VuaW5pdChiaCkgfHwgIWlvX2VuZCkKKwkJZ290byBvdXQ7CisKKwlpZiAoIShpb19lbmQtPmlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfQUNUSVZFKSkgeworCQlwcmludGsoInNiIHVtb3VudGVkLCBkaXNjYXJkIGVuZF9pbyByZXF1ZXN0IGZvciBpbm9kZSAlbHVcbiIsCisJCQlpb19lbmQtPmlub2RlLT5pX2lubyk7CisJCWV4dDRfZnJlZV9pb19lbmQoaW9fZW5kKTsKKwkJZ290byBvdXQ7CisJfQorCisJaW9fZW5kLT5mbGFnID0gRVhUNF9JT19VTldSSVRURU47CisJaW5vZGUgPSBpb19lbmQtPmlub2RlOworCisJLyogQWRkIHRoZSBpb19lbmQgdG8gcGVyLWlub2RlIGNvbXBsZXRlZCBpbyBsaXN0Ki8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmRVhUNF9JKGlub2RlKS0+aV9jb21wbGV0ZWRfaW9fbG9jaywgZmxhZ3MpOworCWxpc3RfYWRkX3RhaWwoJmlvX2VuZC0+bGlzdCwgJkVYVDRfSShpbm9kZSktPmlfY29tcGxldGVkX2lvX2xpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJkVYVDRfSShpbm9kZSktPmlfY29tcGxldGVkX2lvX2xvY2ssIGZsYWdzKTsKKworCXdxID0gRVhUNF9TQihpbm9kZS0+aV9zYiktPmRpb191bndyaXR0ZW5fd3E7CisJLyogcXVldWUgdGhlIHdvcmsgdG8gY29udmVydCB1bndyaXR0ZW4gZXh0ZW50cyB0byB3cml0dGVuICovCisJcXVldWVfd29yayh3cSwgJmlvX2VuZC0+d29yayk7CitvdXQ6CisJYmgtPmJfcHJpdmF0ZSA9IE5VTEw7CisJYmgtPmJfZW5kX2lvID0gTlVMTDsKKwljbGVhcl9idWZmZXJfdW5pbml0KGJoKTsKKwllbmRfYnVmZmVyX2FzeW5jX3dyaXRlKGJoLCB1cHRvZGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgZXh0NF9zZXRfYmhfZW5kaW8oc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlleHQ0X2lvX2VuZF90ICppb19lbmQ7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBiaC0+Yl9wYWdlOworCWxvZmZfdCBvZmZzZXQgPSAoc2VjdG9yX3QpcGFnZS0+aW5kZXggPDwgUEFHRV9DQUNIRV9TSElGVDsKKwlzaXplX3Qgc2l6ZSA9IGJoLT5iX3NpemU7CisKK3JldHJ5OgorCWlvX2VuZCA9IGV4dDRfaW5pdF9pb19lbmQoaW5vZGUsIEdGUF9BVE9NSUMpOworCWlmICghaW9fZW5kKSB7CisJCWlmIChwcmludGtfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogYWxsb2NhdGlvbiBmYWlsXG4iLCBfX2Z1bmNfXyk7CisJCXNjaGVkdWxlKCk7CisJCWdvdG8gcmV0cnk7CisJfQorCWlvX2VuZC0+b2Zmc2V0ID0gb2Zmc2V0OworCWlvX2VuZC0+c2l6ZSA9IHNpemU7CisJLyoKKwkgKiBXZSBuZWVkIHRvIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlIHBhZ2UgdG8gbWFrZSBzdXJlIGl0CisJICogZG9lc24ndCBnZXQgZXZpY3RlZCBiZWZvcmUgZXh0NF9lbmRfaW9fd29yaygpIGhhcyBhIGNoYW5jZQorCSAqIHRvIGNvbnZlcnQgdGhlIGV4dGVudCBmcm9tIHdyaXR0ZW4gdG8gdW53cml0dGVuLgorCSAqLworCWlvX2VuZC0+cGFnZSA9IHBhZ2U7CisJZ2V0X3BhZ2UoaW9fZW5kLT5wYWdlKTsKKworCWJoLT5iX3ByaXZhdGUgPSBpb19lbmQ7CisJYmgtPmJfZW5kX2lvID0gZXh0NF9lbmRfaW9fYnVmZmVyX3dyaXRlOworCXJldHVybiAwOworfQorCiAvKgogICogRm9yIGV4dDQgZXh0ZW50IGZpbGVzLCBleHQ0IHdpbGwgZG8gZGlyZWN0LWlvIHdyaXRlIHRvIGhvbGVzLAogICogcHJlYWxsb2NhdGVkIGV4dGVudHMsIGFuZCB0aG9zZSB3cml0ZSBleHRlbmQgdGhlIGZpbGUsIG5vIG5lZWQgdG8KQEAgLTM3NTEsNyArMzkwOCw3IEBACiAJCWlvY2ItPnByaXZhdGUgPSBOVUxMOwogCQlFWFQ0X0koaW5vZGUpLT5jdXJfYWlvX2RpbyA9IE5VTEw7CiAJCWlmICghaXNfc3luY19raW9jYihpb2NiKSkgewotCQkJaW9jYi0+cHJpdmF0ZSA9IGV4dDRfaW5pdF9pb19lbmQoaW5vZGUpOworCQkJaW9jYi0+cHJpdmF0ZSA9IGV4dDRfaW5pdF9pb19lbmQoaW5vZGUsIEdGUF9OT0ZTKTsKIAkJCWlmICghaW9jYi0+cHJpdmF0ZSkKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCS8qCkBAIC0zNzY3LDcgKzM5MjQsNyBAQAogCQlyZXQgPSBibG9ja2Rldl9kaXJlY3RfSU8ocncsIGlvY2IsIGlub2RlLAogCQkJCQkgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAogCQkJCQkgb2Zmc2V0LCBucl9zZWdzLAotCQkJCQkgZXh0NF9nZXRfYmxvY2tfZGlvX3dyaXRlLAorCQkJCQkgZXh0NF9nZXRfYmxvY2tfd3JpdGUsCiAJCQkJCSBleHQ0X2VuZF9pb19kaW8pOwogCQlpZiAoaW9jYi0+cHJpdmF0ZSkKIAkJCUVYVDRfSShpbm9kZSktPmN1cl9haW9fZGlvID0gTlVMTDsKQEAgLTM3ODgsOCArMzk0NSw4IEBACiAJCWlmIChyZXQgIT0gLUVJT0NCUVVFVUVEICYmIHJldCA8PSAwICYmIGlvY2ItPnByaXZhdGUpIHsKIAkJCWV4dDRfZnJlZV9pb19lbmQoaW9jYi0+cHJpdmF0ZSk7CiAJCQlpb2NiLT5wcml2YXRlID0gTlVMTDsKLQkJfSBlbHNlIGlmIChyZXQgPiAwICYmIChFWFQ0X0koaW5vZGUpLT5pX3N0YXRlICYKLQkJCQkgICAgICAgRVhUNF9TVEFURV9ESU9fVU5XUklUVEVOKSkgeworCQl9IGVsc2UgaWYgKHJldCA+IDAgJiYgZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLAorCQkJCQkJRVhUNF9TVEFURV9ESU9fVU5XUklUVEVOKSkgewogCQkJaW50IGVycjsKIAkJCS8qCiAJCQkgKiBmb3Igbm9uIEFJTyBjYXNlLCBzaW5jZSB0aGUgSU8gaXMgYWxyZWFkeQpAQCAtMzc5OSw3ICszOTU2LDcgQEAKIAkJCQkJCQkgICAgIG9mZnNldCwgcmV0KTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCXJldCA9IGVycjsKLQkJCUVYVDRfSShpbm9kZSktPmlfc3RhdGUgJj0gfkVYVDRfU1RBVEVfRElPX1VOV1JJVFRFTjsKKwkJCWV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfRElPX1VOV1JJVFRFTik7CiAJCX0KIAkJcmV0dXJuIHJldDsKIAl9CkBAIC00MTMwLDE4ICs0Mjg3LDI3IEBACiAgKiBXZSByZWxlYXNlIGBjb3VudCcgYmxvY2tzIG9uIGRpc2ssIGJ1dCAobGFzdCAtIGZpcnN0KSBtYXkgYmUgZ3JlYXRlcgogICogdGhhbiBgY291bnQnIGJlY2F1c2UgdGhlcmUgY2FuIGJlIGhvbGVzIGluIHRoZXJlLgogICovCi1zdGF0aWMgdm9pZCBleHQ0X2NsZWFyX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKLQkJCSAgICAgIGV4dDRfZnNibGtfdCBibG9ja190b19mcmVlLAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgX19sZTMyICpmaXJzdCwKLQkJCSAgICAgIF9fbGUzMiAqbGFzdCkKK3N0YXRpYyBpbnQgZXh0NF9jbGVhcl9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKKwkJCSAgICAgZXh0NF9mc2Jsa190IGJsb2NrX3RvX2ZyZWUsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIF9fbGUzMiAqZmlyc3QsCisJCQkgICAgIF9fbGUzMiAqbGFzdCkKIHsKIAlfX2xlMzIgKnA7Ci0JaW50CWZsYWdzID0gRVhUNF9GUkVFX0JMT0NLU19GT1JHRVQ7CisJaW50CWZsYWdzID0gRVhUNF9GUkVFX0JMT0NLU19GT1JHRVQgfCBFWFQ0X0ZSRUVfQkxPQ0tTX1ZBTElEQVRFRDsKIAogCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtPmlfbW9kZSkpCiAJCWZsYWdzIHw9IEVYVDRfRlJFRV9CTE9DS1NfTUVUQURBVEE7CiAKKwlpZiAoIWV4dDRfZGF0YV9ibG9ja192YWxpZChFWFQ0X1NCKGlub2RlLT5pX3NiKSwgYmxvY2tfdG9fZnJlZSwKKwkJCQkgICBjb3VudCkpIHsKKwkJZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwgImlub2RlICMlbHU6ICIKKwkJCSAgICJhdHRlbXB0IHRvIGNsZWFyIGJsb2NrcyAlbGx1IGxlbiAlbHUsIGludmFsaWQiLAorCQkJICAgaW5vZGUtPmlfaW5vLCAodW5zaWduZWQgbG9uZyBsb25nKSBibG9ja190b19mcmVlLAorCQkJICAgY291bnQpOworCQlyZXR1cm4gMTsKKwl9CisKIAlpZiAodHJ5X3RvX2V4dGVuZF90cmFuc2FjdGlvbihoYW5kbGUsIGlub2RlKSkgewogCQlpZiAoYmgpIHsKIAkJCUJVRkZFUl9UUkFDRShiaCwgImNhbGwgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEiKTsKQEAgLTQxNjAsNiArNDMyNiw3IEBACiAJCSpwID0gMDsKIAogCWV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgMCwgYmxvY2tfdG9fZnJlZSwgY291bnQsIGZsYWdzKTsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCkBAIC00MjE1LDkgKzQzODIsMTAgQEAKIAkJCX0gZWxzZSBpZiAobnIgPT0gYmxvY2tfdG9fZnJlZSArIGNvdW50KSB7CiAJCQkJY291bnQrKzsKIAkJCX0gZWxzZSB7Ci0JCQkJZXh0NF9jbGVhcl9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgdGhpc19iaCwKLQkJCQkJCSAgYmxvY2tfdG9fZnJlZSwKLQkJCQkJCSAgY291bnQsIGJsb2NrX3RvX2ZyZWVfcCwgcCk7CisJCQkJaWYgKGV4dDRfY2xlYXJfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIHRoaXNfYmgsCisJCQkJCQkgICAgICBibG9ja190b19mcmVlLCBjb3VudCwKKwkJCQkJCSAgICAgIGJsb2NrX3RvX2ZyZWVfcCwgcCkpCisJCQkJCWJyZWFrOwogCQkJCWJsb2NrX3RvX2ZyZWUgPSBucjsKIAkJCQlibG9ja190b19mcmVlX3AgPSBwOwogCQkJCWNvdW50ID0gMTsKQEAgLTQyNDEsNyArNDQwOSw3IEBACiAJCWlmICgoRVhUNF9KT1VSTkFMKGlub2RlKSA9PSBOVUxMKSB8fCBiaDJqaCh0aGlzX2JoKSkKIAkJCWV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsIHRoaXNfYmgpOwogCQllbHNlCi0JCQlleHQ0X2Vycm9yKGlub2RlLT5pX3NiLCBfX2Z1bmNfXywKKwkJCWV4dDRfZXJyb3IoaW5vZGUtPmlfc2IsCiAJCQkJICAgImNpcmN1bGFyIGluZGlyZWN0IGJsb2NrIGRldGVjdGVkLCAiCiAJCQkJICAgImlub2RlPSVsdSwgYmxvY2s9JWxsdSIsCiAJCQkJICAgaW5vZGUtPmlfaW5vLApAQCAtNDI4MSw2ICs0NDQ5LDE2IEBACiAJCQlpZiAoIW5yKQogCQkJCWNvbnRpbnVlOwkJLyogQSBob2xlICovCiAKKwkJCWlmICghZXh0NF9kYXRhX2Jsb2NrX3ZhbGlkKEVYVDRfU0IoaW5vZGUtPmlfc2IpLAorCQkJCQkJICAgbnIsIDEpKSB7CisJCQkJZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwKKwkJCQkJICAgImluZGlyZWN0IG1hcHBlZCBibG9jayBpbiBpbm9kZSAiCisJCQkJCSAgICIjJWx1IGludmFsaWQgKGxldmVsICVkLCBibGsgIyVsdSkiLAorCQkJCQkgICBpbm9kZS0+aV9pbm8sIGRlcHRoLAorCQkJCQkgICAodW5zaWduZWQgbG9uZykgbnIpOworCQkJCWJyZWFrOworCQkJfQorCiAJCQkvKiBHbyByZWFkIHRoZSBidWZmZXIgZm9yIHRoZSBuZXh0IGxldmVsIGRvd24gKi8KIAkJCWJoID0gc2JfYnJlYWQoaW5vZGUtPmlfc2IsIG5yKTsKIApAQCAtNDI4OSw3ICs0NDY3LDcgQEAKIAkJCSAqIChzaG91bGQgYmUgcmFyZSkuCiAJCQkgKi8KIAkJCWlmICghYmgpIHsKLQkJCQlleHQ0X2Vycm9yKGlub2RlLT5pX3NiLCAiZXh0NF9mcmVlX2JyYW5jaGVzIiwKKwkJCQlleHQ0X2Vycm9yKGlub2RlLT5pX3NiLAogCQkJCQkgICAiUmVhZCBmYWlsdXJlLCBpbm9kZT0lbHUsIGJsb2NrPSVsbHUiLAogCQkJCQkgICBpbm9kZS0+aV9pbm8sIG5yKTsKIAkJCQljb250aW51ZTsKQEAgLTQ0MzMsOCArNDYxMSwxMCBAQAogCWlmICghZXh0NF9jYW5fdHJ1bmNhdGUoaW5vZGUpKQogCQlyZXR1cm47CiAKKwlFWFQ0X0koaW5vZGUpLT5pX2ZsYWdzICY9IH5FWFQ0X0VPRkJMT0NLU19GTDsKKwogCWlmIChpbm9kZS0+aV9zaXplID09IDAgJiYgIXRlc3Rfb3B0KGlub2RlLT5pX3NiLCBOT19BVVRPX0RBX0FMTE9DKSkKLQkJZWktPmlfc3RhdGUgfD0gRVhUNF9TVEFURV9EQV9BTExPQ19DTE9TRTsKKwkJZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfREFfQUxMT0NfQ0xPU0UpOwogCiAJaWYgKEVYVDRfSShpbm9kZSktPmlfZmxhZ3MgJiBFWFQ0X0VYVEVOVFNfRkwpIHsKIAkJZXh0NF9leHRfdHJ1bmNhdGUoaW5vZGUpOwpAQCAtNDYwNCw5ICs0Nzg0LDggQEAKIAogCWJoID0gc2JfZ2V0YmxrKHNiLCBibG9jayk7CiAJaWYgKCFiaCkgewotCQlleHQ0X2Vycm9yKHNiLCAiZXh0NF9nZXRfaW5vZGVfbG9jIiwgInVuYWJsZSB0byByZWFkICIKLQkJCSAgICJpbm9kZSBibG9jayAtIGlub2RlPSVsdSwgYmxvY2s9JWxsdSIsCi0JCQkgICBpbm9kZS0+aV9pbm8sIGJsb2NrKTsKKwkJZXh0NF9lcnJvcihzYiwgInVuYWJsZSB0byByZWFkIGlub2RlIGJsb2NrIC0gIgorCQkJICAgImlub2RlPSVsdSwgYmxvY2s9JWxsdSIsIGlub2RlLT5pX2lubywgYmxvY2spOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKSB7CkBAIC00NzA0LDkgKzQ4ODMsOCBAQAogCQlzdWJtaXRfYmgoUkVBRF9NRVRBLCBiaCk7CiAJCXdhaXRfb25fYnVmZmVyKGJoKTsKIAkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKSB7Ci0JCQlleHQ0X2Vycm9yKHNiLCBfX2Z1bmNfXywKLQkJCQkgICAidW5hYmxlIHRvIHJlYWQgaW5vZGUgYmxvY2sgLSBpbm9kZT0lbHUsICIKLQkJCQkgICAiYmxvY2s9JWxsdSIsIGlub2RlLT5pX2lubywgYmxvY2spOworCQkJZXh0NF9lcnJvcihzYiwgInVuYWJsZSB0byByZWFkIGlub2RlIGJsb2NrIC0gaW5vZGU9JWx1LCIKKwkJCQkgICAiIGJsb2NrPSVsbHUiLCBpbm9kZS0+aV9pbm8sIGJsb2NrKTsKIAkJCWJyZWxzZShiaCk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQpAQCAtNDcyMCw3ICs0ODk4LDcgQEAKIHsKIAkvKiBXZSBoYXZlIGFsbCBpbm9kZSBkYXRhIGV4Y2VwdCB4YXR0cnMgaW4gbWVtb3J5IGhlcmUuICovCiAJcmV0dXJuIF9fZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCBpbG9jLAotCQkhKEVYVDRfSShpbm9kZSktPmlfc3RhdGUgJiBFWFQ0X1NUQVRFX1hBVFRSKSk7CisJCSFleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpKTsKIH0KIAogdm9pZCBleHQ0X3NldF9pbm9kZV9mbGFncyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQpAQCAtNDgxNCw3ICs0OTkyLDcgQEAKIAl9CiAJaW5vZGUtPmlfbmxpbmsgPSBsZTE2X3RvX2NwdShyYXdfaW5vZGUtPmlfbGlua3NfY291bnQpOwogCi0JZWktPmlfc3RhdGUgPSAwOworCWVpLT5pX3N0YXRlX2ZsYWdzID0gMDsKIAllaS0+aV9kaXJfc3RhcnRfbG9va3VwID0gMDsKIAllaS0+aV9kdGltZSA9IGxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9kdGltZSk7CiAJLyogV2Ugbm93IGhhdmUgZW5vdWdoIGZpZWxkcyB0byBjaGVjayBpZiB0aGUgaW5vZGUgd2FzIGFjdGl2ZSBvciBub3QuCkBAIC00ODk3LDcgKzUwNzUsNyBAQAogCQkJCQlFWFQ0X0dPT0RfT0xEX0lOT0RFX1NJWkUgKwogCQkJCQllaS0+aV9leHRyYV9pc2l6ZTsKIAkJCWlmICgqbWFnaWMgPT0gY3B1X3RvX2xlMzIoRVhUNF9YQVRUUl9NQUdJQykpCi0JCQkJZWktPmlfc3RhdGUgfD0gRVhUNF9TVEFURV9YQVRUUjsKKwkJCQlleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUik7CiAJCX0KIAl9IGVsc2UKIAkJZWktPmlfZXh0cmFfaXNpemUgPSAwOwpAQCAtNDkxNyw4ICs1MDk1LDcgQEAKIAlyZXQgPSAwOwogCWlmIChlaS0+aV9maWxlX2FjbCAmJgogCSAgICAhZXh0NF9kYXRhX2Jsb2NrX3ZhbGlkKEVYVDRfU0Ioc2IpLCBlaS0+aV9maWxlX2FjbCwgMSkpIHsKLQkJZXh0NF9lcnJvcihzYiwgX19mdW5jX18sCi0JCQkgICAiYmFkIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlbGx1IGluIGlub2RlICMlbHUiLAorCQlleHQ0X2Vycm9yKHNiLCAiYmFkIGV4dGVuZGVkIGF0dHJpYnV0ZSBibG9jayAlbGx1IGlub2RlICMlbHUiLAogCQkJICAgZWktPmlfZmlsZV9hY2wsIGlub2RlLT5pX2lubyk7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gYmFkX2lub2RlOwpAQCAtNDk2NCw4ICs1MTQxLDcgQEAKIAkJCSAgIG5ld19kZWNvZGVfZGV2KGxlMzJfdG9fY3B1KHJhd19pbm9kZS0+aV9ibG9ja1sxXSkpKTsKIAl9IGVsc2UgewogCQlyZXQgPSAtRUlPOwotCQlleHQ0X2Vycm9yKGlub2RlLT5pX3NiLCBfX2Z1bmNfXywKLQkJCSAgICJib2d1cyBpX21vZGUgKCVvKSBmb3IgaW5vZGU9JWx1IiwKKwkJZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwgImJvZ3VzIGlfbW9kZSAoJW8pIGZvciBpbm9kZT0lbHUiLAogCQkJICAgaW5vZGUtPmlfbW9kZSwgaW5vZGUtPmlfaW5vKTsKIAkJZ290byBiYWRfaW5vZGU7CiAJfQpAQCAtNTAzNyw3ICs1MjEzLDcgQEAKIAogCS8qIEZvciBmaWVsZHMgbm90IG5vdCB0cmFja2luZyBpbiB0aGUgaW4tbWVtb3J5IGlub2RlLAogCSAqIGluaXRpYWxpc2UgdGhlbSB0byB6ZXJvIGZvciBuZXcgaW5vZGVzLiAqLwotCWlmIChlaS0+aV9zdGF0ZSAmIEVYVDRfU1RBVEVfTkVXKQorCWlmIChleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTkVXKSkKIAkJbWVtc2V0KHJhd19pbm9kZSwgMCwgRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfaW5vZGVfc2l6ZSk7CiAKIAlleHQ0X2dldF9pbm9kZV9mbGFncyhlaSk7CkBAIC01MTAxLDcgKzUyNzcsNyBAQAogCQkJCQlFWFQ0X0ZFQVRVUkVfUk9fQ09NUEFUX0xBUkdFX0ZJTEUpOwogCQkJc2ItPnNfZGlydCA9IDE7CiAJCQlleHQ0X2hhbmRsZV9zeW5jKGhhbmRsZSk7Ci0JCQllcnIgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGlub2RlLAorCQkJZXJyID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBOVUxMLAogCQkJCQlFWFQ0X1NCKHNiKS0+c19zYmgpOwogCQl9CiAJfQpAQCAtNTEzMCwxMCArNTMwNiwxMCBAQAogCX0KIAogCUJVRkZFUl9UUkFDRShiaCwgImNhbGwgZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEiKTsKLQlyYyA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsIGJoKTsKKwlyYyA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgTlVMTCwgYmgpOwogCWlmICghZXJyKQogCQllcnIgPSByYzsKLQllaS0+aV9zdGF0ZSAmPSB+RVhUNF9TVEFURV9ORVc7CisJZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9ORVcpOwogCiAJZXh0NF91cGRhdGVfaW5vZGVfZnN5bmNfdHJhbnMoaGFuZGxlLCBpbm9kZSwgMCk7CiBvdXRfYnJlbHNlOgpAQCAtNTE3Nyw3ICs1MzUzLDcgQEAKICAqIGBzdHVmZigpJyBpcyBydW5uaW5nLCBhbmQgdGhlIG5ldyBpX3NpemUgd2lsbCBiZSBsb3N0LiAgUGx1cyB0aGUgaW5vZGUKICAqIHdpbGwgbm8gbG9uZ2VyIGJlIG9uIHRoZSBzdXBlcmJsb2NrJ3MgZGlydHkgaW5vZGUgbGlzdC4KICAqLwotaW50IGV4dDRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpCitpbnQgZXh0NF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlpbnQgZXJyOwogCkBAIC01MTkxLDcgKzUzNjcsNyBAQAogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAotCQlpZiAoIXdhaXQpCisJCWlmICh3YmMtPnN5bmNfbW9kZSAhPSBXQl9TWU5DX0FMTCkKIAkJCXJldHVybiAwOwogCiAJCWVyciA9IGV4dDRfZm9yY2VfY29tbWl0KGlub2RlLT5pX3NiKTsKQEAgLTUyMDEsMTMgKzUzNzcsMTEgQEAKIAkJZXJyID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCAmaWxvYyk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCQlpZiAod2FpdCkKKwkJaWYgKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMKQogCQkJc3luY19kaXJ0eV9idWZmZXIoaWxvYy5iaCk7CiAJCWlmIChidWZmZXJfcmVxKGlsb2MuYmgpICYmICFidWZmZXJfdXB0b2RhdGUoaWxvYy5iaCkpIHsKLQkJCWV4dDRfZXJyb3IoaW5vZGUtPmlfc2IsIF9fZnVuY19fLAotCQkJCSAgICJJTyBlcnJvciBzeW5jaW5nIGlub2RlLCAiCi0JCQkJICAgImlub2RlPSVsdSwgYmxvY2s9JWxsdSIsCi0JCQkJICAgaW5vZGUtPmlfaW5vLAorCQkJZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwgIklPIGVycm9yIHN5bmNpbmcgaW5vZGUsICIKKwkJCQkgICAiaW5vZGU9JWx1LCBibG9jaz0lbGx1IiwgaW5vZGUtPmlfaW5vLAogCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpaWxvYy5iaC0+Yl9ibG9ja25yKTsKIAkJCWVyciA9IC1FSU87CiAJCX0KQEAgLTUyNDksNiArNTQyMyw4IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKKwlpZiAoaWFfdmFsaWQgJiBBVFRSX1NJWkUpCisJCWRxdW90X2luaXRpYWxpemUoaW5vZGUpOwogCWlmICgoaWFfdmFsaWQgJiBBVFRSX1VJRCAmJiBhdHRyLT5pYV91aWQgIT0gaW5vZGUtPmlfdWlkKSB8fAogCQkoaWFfdmFsaWQgJiBBVFRSX0dJRCAmJiBhdHRyLT5pYV9naWQgIT0gaW5vZGUtPmlfZ2lkKSkgewogCQloYW5kbGVfdCAqaGFuZGxlOwpAQCAtNTI2MSw3ICs1NDM3LDcgQEAKIAkJCWVycm9yID0gUFRSX0VSUihoYW5kbGUpOwogCQkJZ290byBlcnJfb3V0OwogCQl9Ci0JCWVycm9yID0gdmZzX2RxX3RyYW5zZmVyKGlub2RlLCBhdHRyKSA/IC1FRFFVT1QgOiAwOworCQllcnJvciA9IGRxdW90X3RyYW5zZmVyKGlub2RlLCBhdHRyKTsKIAkJaWYgKGVycm9yKSB7CiAJCQlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCQkJcmV0dXJuIGVycm9yOwpAQCAtNTI4OCw3ICs1NDY0LDkgQEAKIAl9CiAKIAlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSAmJgotCSAgICBhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSAmJiBhdHRyLT5pYV9zaXplIDwgaW5vZGUtPmlfc2l6ZSkgeworCSAgICBhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSAmJgorCSAgICAoYXR0ci0+aWFfc2l6ZSA8IGlub2RlLT5pX3NpemUgfHwKKwkgICAgIChFWFQ0X0koaW5vZGUpLT5pX2ZsYWdzICYgRVhUNF9FT0ZCTE9DS1NfRkwpKSkgewogCQloYW5kbGVfdCAqaGFuZGxlOwogCiAJCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgMyk7CkBAIC01MzE5LDYgKzU0OTcsOSBAQAogCQkJCWdvdG8gZXJyX291dDsKIAkJCX0KIAkJfQorCQkvKiBleHQ0X3RydW5jYXRlIHdpbGwgY2xlYXIgdGhlIGZsYWcgKi8KKwkJaWYgKChFWFQ0X0koaW5vZGUpLT5pX2ZsYWdzICYgRVhUNF9FT0ZCTE9DS1NfRkwpKQorCQkJZXh0NF90cnVuY2F0ZShpbm9kZSk7CiAJfQogCiAJcmMgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCBhdHRyKTsKQEAgLTU1NTcsOCArNTczOCw4IEBACiAJZW50cnkgPSBJRklSU1QoaGVhZGVyKTsKIAogCS8qIE5vIGV4dGVuZGVkIGF0dHJpYnV0ZXMgcHJlc2VudCAqLwotCWlmICghKEVYVDRfSShpbm9kZSktPmlfc3RhdGUgJiBFWFQ0X1NUQVRFX1hBVFRSKSB8fAotCQloZWFkZXItPmhfbWFnaWMgIT0gY3B1X3RvX2xlMzIoRVhUNF9YQVRUUl9NQUdJQykpIHsKKwlpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUikgfHwKKwkgICAgaGVhZGVyLT5oX21hZ2ljICE9IGNwdV90b19sZTMyKEVYVDRfWEFUVFJfTUFHSUMpKSB7CiAJCW1lbXNldCgodm9pZCAqKXJhd19pbm9kZSArIEVYVDRfR09PRF9PTERfSU5PREVfU0laRSwgMCwKIAkJCW5ld19leHRyYV9pc2l6ZSk7CiAJCUVYVDRfSShpbm9kZSktPmlfZXh0cmFfaXNpemUgPSBuZXdfZXh0cmFfaXNpemU7CkBAIC01NjAyLDcgKzU3ODMsNyBAQAogCWVyciA9IGV4dDRfcmVzZXJ2ZV9pbm9kZV93cml0ZShoYW5kbGUsIGlub2RlLCAmaWxvYyk7CiAJaWYgKGV4dDRfaGFuZGxlX3ZhbGlkKGhhbmRsZSkgJiYKIAkgICAgRVhUNF9JKGlub2RlKS0+aV9leHRyYV9pc2l6ZSA8IHNiaS0+c193YW50X2V4dHJhX2lzaXplICYmCi0JICAgICEoRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSAmIEVYVDRfU1RBVEVfTk9fRVhQQU5EKSkgeworCSAgICAhZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX05PX0VYUEFORCkpIHsKIAkJLyoKIAkJICogV2UgbmVlZCBleHRyYSBidWZmZXIgY3JlZGl0cyBzaW5jZSB3ZSBtYXkgd3JpdGUgaW50byBFQSBibG9jawogCQkgKiB3aXRoIHRoaXMgc2FtZSBoYW5kbGUuIElmIGpvdXJuYWxfZXh0ZW5kIGZhaWxzLCB0aGVuIGl0IHdpbGwKQEAgLTU2MTYsMTAgKzU3OTcsMTEgQEAKIAkJCQkJCSAgICAgIHNiaS0+c193YW50X2V4dHJhX2lzaXplLAogCQkJCQkJICAgICAgaWxvYywgaGFuZGxlKTsKIAkJCWlmIChyZXQpIHsKLQkJCQlFWFQ0X0koaW5vZGUpLT5pX3N0YXRlIHw9IEVYVDRfU1RBVEVfTk9fRVhQQU5EOworCQkJCWV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLAorCQkJCQkJICAgICBFWFQ0X1NUQVRFX05PX0VYUEFORCk7CiAJCQkJaWYgKG1udF9jb3VudCAhPQogCQkJCQlsZTE2X3RvX2NwdShzYmktPnNfZXMtPnNfbW50X2NvdW50KSkgewotCQkJCQlleHQ0X3dhcm5pbmcoaW5vZGUtPmlfc2IsIF9fZnVuY19fLAorCQkJCQlleHQ0X3dhcm5pbmcoaW5vZGUtPmlfc2IsCiAJCQkJCSJVbmFibGUgdG8gZXhwYW5kIGlub2RlICVsdS4gRGVsZXRlIgogCQkJCQkiIHNvbWUgRUFzIG9yIHJ1biBlMmZzY2suIiwKIAkJCQkJaW5vZGUtPmlfaW5vKTsKQEAgLTU2NDEsNyArNTgyMyw3IEBACiAgKiBpX3NpemUgaGFzIGJlZW4gY2hhbmdlZCBieSBnZW5lcmljX2NvbW1pdF93cml0ZSgpIGFuZCB3ZSB0aHVzIG5lZWQKICAqIHRvIGluY2x1ZGUgdGhlIHVwZGF0ZWQgaW5vZGUgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uCiAgKgotICogQWxzbywgdmZzX2RxX2FsbG9jX2Jsb2NrKCkgd2lsbCBhbHdheXMgZGlydHkgdGhlIGlub2RlIHdoZW4gYmxvY2tzCisgKiBBbHNvLCBkcXVvdF9hbGxvY19ibG9jaygpIHdpbGwgYWx3YXlzIGRpcnR5IHRoZSBpbm9kZSB3aGVuIGJsb2NrcwogICogYXJlIGFsbG9jYXRlZCB0byB0aGUgZmlsZS4KICAqCiAgKiBJZiB0aGUgaW5vZGUgaXMgbWFya2VkIHN5bmNocm9ub3VzLCB3ZSBkb24ndCBob25vdXIgdGhhdCBoZXJlIC0gZG9pbmcKQEAgLTU2ODMsNyArNTg2NSw3IEBACiAJCQllcnIgPSBqYmQyX2pvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGlsb2MuYmgpOwogCQkJaWYgKCFlcnIpCiAJCQkJZXJyID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLAotCQkJCQkJCQkgaW5vZGUsCisJCQkJCQkJCSBOVUxMLAogCQkJCQkJCQkgaWxvYy5iaCk7CiAJCQlicmVsc2UoaWxvYy5iaCk7CiAJCX0KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW9jdGwuYyBiL2ZzL2V4dDQvaW9jdGwuYwppbmRleCBiNjNkMTkzLi4wMTZkMDI0IDEwMDY0NAotLS0gYS9mcy9leHQ0L2lvY3RsLmMKKysrIGIvZnMvZXh0NC9pb2N0bC5jCkBAIC05Miw2ICs5MiwxNSBAQAogCQkJZmxhZ3MgJj0gfkVYVDRfRVhURU5UU19GTDsKIAkJfQogCisJCWlmIChmbGFncyAmIEVYVDRfRU9GQkxPQ0tTX0ZMKSB7CisJCQkvKiB3ZSBkb24ndCBzdXBwb3J0IGFkZGluZyBFT0ZCTE9DS1MgZmxhZyAqLworCQkJaWYgKCEob2xkZmxhZ3MgJiBFWFQ0X0VPRkJMT0NLU19GTCkpIHsKKwkJCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJCQlnb3RvIGZsYWdzX291dDsKKwkJCX0KKwkJfSBlbHNlIGlmIChvbGRmbGFncyAmIEVYVDRfRU9GQkxPQ0tTX0ZMKQorCQkJZXh0NF90cnVuY2F0ZShpbm9kZSk7CisKIAkJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCAxKTsKIAkJaWYgKElTX0VSUihoYW5kbGUpKSB7CiAJCQllcnIgPSBQVFJfRVJSKGhhbmRsZSk7CkBAIC0yNDksNyArMjU4LDggQEAKIAkJaWYgKG1lLm1vdmVkX2xlbiA+IDApCiAJCQlmaWxlX3JlbW92ZV9zdWlkKGRvbm9yX2ZpbHApOwogCi0JCWlmIChjb3B5X3RvX3VzZXIoKHN0cnVjdCBtb3ZlX2V4dGVudCAqKWFyZywgJm1lLCBzaXplb2YobWUpKSkKKwkJaWYgKGNvcHlfdG9fdXNlcigoc3RydWN0IG1vdmVfZXh0ZW50IF9fdXNlciAqKWFyZywgCisJCQkJICZtZSwgc2l6ZW9mKG1lKSkpCiAJCQllcnIgPSAtRUZBVUxUOwogbWV4dF9vdXQ6CiAJCWZwdXQoZG9ub3JfZmlscCk7CmRpZmYgLS1naXQgYS9mcy9leHQ0L21iYWxsb2MuYyBiL2ZzL2V4dDQvbWJhbGxvYy5jCmluZGV4IGQzNGFmYWQuLjU0ZGYyMDkgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbWJhbGxvYy5jCisrKyBiL2ZzL2V4dDQvbWJhbGxvYy5jCkBAIC02OSw3ICs2OSw3IEBACiAgKgogICogcGFfbHN0YXJ0IC0+IHRoZSBsb2dpY2FsIHN0YXJ0IGJsb2NrIGZvciB0aGlzIHByZWFsbG9jIHNwYWNlCiAgKiBwYV9wc3RhcnQgLT4gdGhlIHBoeXNpY2FsIHN0YXJ0IGJsb2NrIGZvciB0aGlzIHByZWFsbG9jIHNwYWNlCi0gKiBwYV9sZW4gICAgLT4gbGVuZ2h0IGZvciB0aGlzIHByZWFsbG9jIHNwYWNlCisgKiBwYV9sZW4gICAgLT4gbGVuZ3RoIGZvciB0aGlzIHByZWFsbG9jIHNwYWNlCiAgKiBwYV9mcmVlICAgLT4gIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGluIHRoaXMgcHJlYWxsb2Mgc3BhY2UKICAqCiAgKiBUaGUgaW5vZGUgcHJlYWxsb2NhdGlvbiBzcGFjZSBpcyB1c2VkIGxvb2tpbmcgYXQgdGhlIF9sb2dpY2FsXyBzdGFydApAQCAtNDQxLDEwICs0NDEsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CiAJCWlmICghbWJfdGVzdF9iaXQoZmlyc3QgKyBpLCBlNGItPmJkX2luZm8tPmJiX2JpdG1hcCkpIHsKIAkJCWV4dDRfZnNibGtfdCBibG9ja25yOwotCQkJYmxvY2tuciA9IGU0Yi0+YmRfZ3JvdXAgKiBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpOworCisJCQlibG9ja25yID0gZXh0NF9ncm91cF9maXJzdF9ibG9ja19ubyhzYiwgZTRiLT5iZF9ncm91cCk7CiAJCQlibG9ja25yICs9IGZpcnN0ICsgaTsKLQkJCWJsb2NrbnIgKz0KLQkJCSAgICBsZTMyX3RvX2NwdShFWFQ0X1NCKHNiKS0+c19lcy0+c19maXJzdF9kYXRhX2Jsb2NrKTsKIAkJCWV4dDRfZ3JwX2xvY2tlZF9lcnJvcihzYiwgZTRiLT5iZF9ncm91cCwKIAkJCQkgICBfX2Z1bmNfXywgImRvdWJsZS1mcmVlIG9mIGlub2RlIgogCQkJCSAgICIgJWx1J3MgYmxvY2sgJWxsdShiaXQgJXUgaW4gZ3JvdXAgJXUpIiwKQEAgLTEyNTUsMTAgKzEyNTQsOSBAQAogCiAJCWlmICghbWJfdGVzdF9iaXQoYmxvY2ssIEVYVDRfTUJfQklUTUFQKGU0YikpKSB7CiAJCQlleHQ0X2ZzYmxrX3QgYmxvY2tucjsKLQkJCWJsb2NrbnIgPSBlNGItPmJkX2dyb3VwICogRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKTsKKworCQkJYmxvY2tuciA9IGV4dDRfZ3JvdXBfZmlyc3RfYmxvY2tfbm8oc2IsIGU0Yi0+YmRfZ3JvdXApOwogCQkJYmxvY2tuciArPSBibG9jazsKLQkJCWJsb2NrbnIgKz0KLQkJCSAgICBsZTMyX3RvX2NwdShFWFQ0X1NCKHNiKS0+c19lcy0+c19maXJzdF9kYXRhX2Jsb2NrKTsKIAkJCWV4dDRfZ3JwX2xvY2tlZF9lcnJvcihzYiwgZTRiLT5iZF9ncm91cCwKIAkJCQkgICBfX2Z1bmNfXywgImRvdWJsZS1mcmVlIG9mIGlub2RlIgogCQkJCSAgICIgJWx1J3MgYmxvY2sgJWxsdShiaXQgJXUgaW4gZ3JvdXAgJXUpIiwKQEAgLTE2MzEsNyArMTYyOSw2IEBACiAJaW50IG1heDsKIAlpbnQgZXJyOwogCXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IEVYVDRfU0IoYWMtPmFjX3NiKTsKLQlzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMgPSBzYmktPnNfZXM7CiAJc3RydWN0IGV4dDRfZnJlZV9leHRlbnQgZXg7CiAKIAlpZiAoIShhYy0+YWNfZmxhZ3MgJiBFWFQ0X01CX0hJTlRfVFJZX0dPQUwpKQpAQCAtMTY0OCw4ICsxNjQ1LDggQEAKIAlpZiAobWF4ID49IGFjLT5hY19nX2V4LmZlX2xlbiAmJiBhYy0+YWNfZ19leC5mZV9sZW4gPT0gc2JpLT5zX3N0cmlwZSkgewogCQlleHQ0X2ZzYmxrX3Qgc3RhcnQ7CiAKLQkJc3RhcnQgPSAoZTRiLT5iZF9ncm91cCAqIEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChhYy0+YWNfc2IpKSArCi0JCQlleC5mZV9zdGFydCArIGxlMzJfdG9fY3B1KGVzLT5zX2ZpcnN0X2RhdGFfYmxvY2spOworCQlzdGFydCA9IGV4dDRfZ3JvdXBfZmlyc3RfYmxvY2tfbm8oYWMtPmFjX3NiLCBlNGItPmJkX2dyb3VwKSArCisJCQlleC5mZV9zdGFydDsKIAkJLyogdXNlIGRvX2RpdiB0byBnZXQgcmVtYWluZGVyICh3b3VsZCBiZSA2NC1iaXQgbW9kdWxvKSAqLwogCQlpZiAoZG9fZGl2KHN0YXJ0LCBzYmktPnNfc3RyaXBlKSA9PSAwKSB7CiAJCQlhYy0+YWNfZm91bmQrKzsKQEAgLTE4MDMsOCArMTgwMCw4IEBACiAJQlVHX09OKHNiaS0+c19zdHJpcGUgPT0gMCk7CiAKIAkvKiBmaW5kIGZpcnN0IHN0cmlwZS1hbGlnbmVkIGJsb2NrIGluIGdyb3VwICovCi0JZmlyc3RfZ3JvdXBfYmxvY2sgPSBlNGItPmJkX2dyb3VwICogRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKQotCQkrIGxlMzJfdG9fY3B1KHNiaS0+c19lcy0+c19maXJzdF9kYXRhX2Jsb2NrKTsKKwlmaXJzdF9ncm91cF9ibG9jayA9IGV4dDRfZ3JvdXBfZmlyc3RfYmxvY2tfbm8oc2IsIGU0Yi0+YmRfZ3JvdXApOworCiAJYSA9IGZpcnN0X2dyb3VwX2Jsb2NrICsgc2JpLT5zX3N0cmlwZSAtIDE7CiAJZG9fZGl2KGEsIHNiaS0+c19zdHJpcGUpOwogCWkgPSAoYSAqIHNiaS0+c19zdHJpcGUpIC0gZmlyc3RfZ3JvdXBfYmxvY2s7CkBAIC0yMjU2LDcgKzIyNTMsNyBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJm1ldGFfZ3JvdXBfaW5mb1tpXS0+YmJfcHJlYWxsb2NfbGlzdCk7CiAJaW5pdF9yd3NlbSgmbWV0YV9ncm91cF9pbmZvW2ldLT5hbGxvY19zZW0pOwotCW1ldGFfZ3JvdXBfaW5mb1tpXS0+YmJfZnJlZV9yb290LnJiX25vZGUgPSBOVUxMOworCW1ldGFfZ3JvdXBfaW5mb1tpXS0+YmJfZnJlZV9yb290ID0gUkJfUk9PVDsKIAogI2lmZGVmIERPVUJMRV9DSEVDSwogCXsKQEAgLTI1NjAsMTIgKzI1NTcsOSBAQAogCQlleHQ0X3VubG9ja19ncm91cChzYiwgZW50cnktPmdyb3VwKTsKIAkJaWYgKHRlc3Rfb3B0KHNiLCBESVNDQVJEKSkgewogCQkJZXh0NF9mc2Jsa190IGRpc2NhcmRfYmxvY2s7Ci0JCQlzdHJ1Y3QgZXh0NF9zdXBlcl9ibG9jayAqZXMgPSBFWFQ0X1NCKHNiKS0+c19lczsKIAotCQkJZGlzY2FyZF9ibG9jayA9IChleHQ0X2ZzYmxrX3QpZW50cnktPmdyb3VwICoKLQkJCQkJCUVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikKLQkJCQkJKyBlbnRyeS0+c3RhcnRfYmxrCi0JCQkJCSsgbGUzMl90b19jcHUoZXMtPnNfZmlyc3RfZGF0YV9ibG9jayk7CisJCQlkaXNjYXJkX2Jsb2NrID0gZW50cnktPnN0YXJ0X2JsayArCisJCQkJZXh0NF9ncm91cF9maXJzdF9ibG9ja19ubyhzYiwgZW50cnktPmdyb3VwKTsKIAkJCXRyYWNlX2V4dDRfZGlzY2FyZF9ibG9ja3Moc2IsCiAJCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZGlzY2FyZF9ibG9jaywKIAkJCQkJZW50cnktPmNvdW50KTsKQEAgLTI3MDMsMTQgKzI2OTcsMTEgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9lcnI7CiAKLQlibG9jayA9IGFjLT5hY19iX2V4LmZlX2dyb3VwICogRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKQotCQkrIGFjLT5hY19iX2V4LmZlX3N0YXJ0Ci0JCSsgbGUzMl90b19jcHUoZXMtPnNfZmlyc3RfZGF0YV9ibG9jayk7CisJYmxvY2sgPSBleHQ0X2dycF9vZmZzX3RvX2Jsb2NrKHNiLCAmYWMtPmFjX2JfZXgpOwogCiAJbGVuID0gYWMtPmFjX2JfZXguZmVfbGVuOwogCWlmICghZXh0NF9kYXRhX2Jsb2NrX3ZhbGlkKHNiaSwgYmxvY2ssIGxlbikpIHsKLQkJZXh0NF9lcnJvcihzYiwgX19mdW5jX18sCi0JCQkgICAiQWxsb2NhdGluZyBibG9ja3MgJWxsdS0lbGx1IHdoaWNoIG92ZXJsYXAgIgorCQlleHQ0X2Vycm9yKHNiLCAiQWxsb2NhdGluZyBibG9ja3MgJWxsdS0lbGx1IHdoaWNoIG92ZXJsYXAgIgogCQkJICAgImZzIG1ldGFkYXRhXG4iLCBibG9jaywgYmxvY2srbGVuKTsKIAkJLyogRmlsZSBzeXN0ZW0gbW91bnRlZCBub3QgdG8gcGFuaWMgb24gZXJyb3IKIAkJICogRml4IHRoZSBiaXRtYXAgYW5kIHJlcGVhdCB0aGUgYmxvY2sgYWxsb2NhdGlvbgpAQCAtMzE2MSw5ICszMTUyLDcgQEAKIAkJLyogVGhlIG1heCBzaXplIG9mIGhhc2ggdGFibGUgaXMgUFJFQUxMT0NfVEJfU0laRSAqLwogCQlvcmRlciA9IFBSRUFMTE9DX1RCX1NJWkUgLSAxOwogCi0JZ29hbF9ibG9jayA9IGFjLT5hY19nX2V4LmZlX2dyb3VwICogRVhUNF9CTE9DS1NfUEVSX0dST1VQKGFjLT5hY19zYikgKwotCQkgICAgIGFjLT5hY19nX2V4LmZlX3N0YXJ0ICsKLQkJICAgICBsZTMyX3RvX2NwdShFWFQ0X1NCKGFjLT5hY19zYiktPnNfZXMtPnNfZmlyc3RfZGF0YV9ibG9jayk7CisJZ29hbF9ibG9jayA9IGV4dDRfZ3JwX29mZnNfdG9fYmxvY2soYWMtPmFjX3NiLCAmYWMtPmFjX2dfZXgpOwogCS8qCiAJICogc2VhcmNoIGZvciB0aGUgcHJlYWxsb2Mgc3BhY2UgdGhhdCBpcyBoYXZpbmcKIAkgKiBtaW5pbWFsIGRpc3RhbmNlIGZyb20gdGhlIGdvYWwgYmxvY2suCkBAIC0zNTI2LDggKzM1MTUsNyBAQAogCQlpZiAoYml0ID49IGVuZCkKIAkJCWJyZWFrOwogCQluZXh0ID0gbWJfZmluZF9uZXh0X2JpdChiaXRtYXBfYmgtPmJfZGF0YSwgZW5kLCBiaXQpOwotCQlzdGFydCA9IGdyb3VwICogRVhUNF9CTE9DS1NfUEVSX0dST1VQKHNiKSArIGJpdCArCi0JCQkJbGUzMl90b19jcHUoc2JpLT5zX2VzLT5zX2ZpcnN0X2RhdGFfYmxvY2spOworCQlzdGFydCA9IGV4dDRfZ3JvdXBfZmlyc3RfYmxvY2tfbm8oc2IsIGdyb3VwKSArIGJpdDsKIAkJbWJfZGVidWcoMSwgIiAgICBmcmVlIHByZWFsbG9jYXRlZCAldS8ldSBpbiBncm91cCAldVxuIiwKIAkJCQkodW5zaWduZWQpIHN0YXJ0LCAodW5zaWduZWQpIG5leHQgLSBiaXQsCiAJCQkJKHVuc2lnbmVkKSBncm91cCk7CkBAIC0zNjIzLDE1ICszNjExLDEzIEBACiAKIAliaXRtYXBfYmggPSBleHQ0X3JlYWRfYmxvY2tfYml0bWFwKHNiLCBncm91cCk7CiAJaWYgKGJpdG1hcF9iaCA9PSBOVUxMKSB7Ci0JCWV4dDRfZXJyb3Ioc2IsIF9fZnVuY19fLCAiRXJyb3IgaW4gcmVhZGluZyBibG9jayAiCi0JCQkJImJpdG1hcCBmb3IgJXUiLCBncm91cCk7CisJCWV4dDRfZXJyb3Ioc2IsICJFcnJvciByZWFkaW5nIGJsb2NrIGJpdG1hcCBmb3IgJXUiLCBncm91cCk7CiAJCXJldHVybiAwOwogCX0KIAogCWVyciA9IGV4dDRfbWJfbG9hZF9idWRkeShzYiwgZ3JvdXAsICZlNGIpOwogCWlmIChlcnIpIHsKLQkJZXh0NF9lcnJvcihzYiwgX19mdW5jX18sICJFcnJvciBpbiBsb2FkaW5nIGJ1ZGR5ICIKLQkJCQkiaW5mb3JtYXRpb24gZm9yICV1IiwgZ3JvdXApOworCQlleHQ0X2Vycm9yKHNiLCAiRXJyb3IgbG9hZGluZyBidWRkeSBpbmZvcm1hdGlvbiBmb3IgJXUiLCBncm91cCk7CiAJCXB1dF9iaChiaXRtYXBfYmgpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0zODA0LDE1ICszNzkwLDE1IEBACiAKIAkJZXJyID0gZXh0NF9tYl9sb2FkX2J1ZGR5KHNiLCBncm91cCwgJmU0Yik7CiAJCWlmIChlcnIpIHsKLQkJCWV4dDRfZXJyb3Ioc2IsIF9fZnVuY19fLCAiRXJyb3IgaW4gbG9hZGluZyBidWRkeSAiCi0JCQkJCSJpbmZvcm1hdGlvbiBmb3IgJXUiLCBncm91cCk7CisJCQlleHQ0X2Vycm9yKHNiLCAiRXJyb3IgbG9hZGluZyBidWRkeSBpbmZvcm1hdGlvbiBmb3IgJXUiLAorCQkJCQlncm91cCk7CiAJCQljb250aW51ZTsKIAkJfQogCiAJCWJpdG1hcF9iaCA9IGV4dDRfcmVhZF9ibG9ja19iaXRtYXAoc2IsIGdyb3VwKTsKIAkJaWYgKGJpdG1hcF9iaCA9PSBOVUxMKSB7Ci0JCQlleHQ0X2Vycm9yKHNiLCBfX2Z1bmNfXywgIkVycm9yIGluIHJlYWRpbmcgYmxvY2sgIgotCQkJCQkiYml0bWFwIGZvciAldSIsIGdyb3VwKTsKKwkJCWV4dDRfZXJyb3Ioc2IsICJFcnJvciByZWFkaW5nIGJsb2NrIGJpdG1hcCBmb3IgJXUiLAorCQkJCQlncm91cCk7CiAJCQlleHQ0X21iX3JlbGVhc2VfZGVzYygmZTRiKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC0zOTM4LDcgKzM5MjQsNyBAQAogCiAJLyogZG9uJ3QgdXNlIGdyb3VwIGFsbG9jYXRpb24gZm9yIGxhcmdlIGZpbGVzICovCiAJc2l6ZSA9IG1heChzaXplLCBpc2l6ZSk7Ci0JaWYgKHNpemUgPj0gc2JpLT5zX21iX3N0cmVhbV9yZXF1ZXN0KSB7CisJaWYgKHNpemUgPiBzYmktPnNfbWJfc3RyZWFtX3JlcXVlc3QpIHsKIAkJYWMtPmFjX2ZsYWdzIHw9IEVYVDRfTUJfU1RSRUFNX0FMTE9DOwogCQlyZXR1cm47CiAJfQpAQCAtNDA3Nyw4ICs0MDYzLDggQEAKIAogCQlleHQ0X2dldF9ncm91cF9ub19hbmRfb2Zmc2V0KHNiLCBwYS0+cGFfcHN0YXJ0LCAmZ3JvdXAsIE5VTEwpOwogCQlpZiAoZXh0NF9tYl9sb2FkX2J1ZGR5KHNiLCBncm91cCwgJmU0YikpIHsKLQkJCWV4dDRfZXJyb3Ioc2IsIF9fZnVuY19fLCAiRXJyb3IgaW4gbG9hZGluZyBidWRkeSAiCi0JCQkJCSJpbmZvcm1hdGlvbiBmb3IgJXUiLCBncm91cCk7CisJCQlleHQ0X2Vycm9yKHNiLCAiRXJyb3IgbG9hZGluZyBidWRkeSBpbmZvcm1hdGlvbiBmb3IgJXUiLAorCQkJCQlncm91cCk7CiAJCQljb250aW51ZTsKIAkJfQogCQlleHQ0X2xvY2tfZ3JvdXAoc2IsIGdyb3VwKTsKQEAgLTQyNTQsNyArNDI0MCw3IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogCQlyZXNlcnZfYmxrcyA9IGFyLT5sZW47Ci0JCXdoaWxlIChhci0+bGVuICYmIHZmc19kcV9hbGxvY19ibG9jayhhci0+aW5vZGUsIGFyLT5sZW4pKSB7CisJCXdoaWxlIChhci0+bGVuICYmIGRxdW90X2FsbG9jX2Jsb2NrKGFyLT5pbm9kZSwgYXItPmxlbikpIHsKIAkJCWFyLT5mbGFncyB8PSBFWFQ0X01CX0hJTlRfTk9QUkVBTExPQzsKIAkJCWFyLT5sZW4tLTsKIAkJfQpAQCAtNDMzMSw3ICs0MzE3LDcgQEAKIAlrbWVtX2NhY2hlX2ZyZWUoZXh0NF9hY19jYWNoZXAsIGFjKTsKIG91dDE6CiAJaWYgKGlucXVvdGEgJiYgYXItPmxlbiA8IGlucXVvdGEpCi0JCXZmc19kcV9mcmVlX2Jsb2NrKGFyLT5pbm9kZSwgaW5xdW90YSAtIGFyLT5sZW4pOworCQlkcXVvdF9mcmVlX2Jsb2NrKGFyLT5pbm9kZSwgaW5xdW90YSAtIGFyLT5sZW4pOwogb3V0MzoKIAlpZiAoIWFyLT5sZW4pIHsKIAkJaWYgKCFFWFQ0X0koYXItPmlub2RlKS0+aV9kZWxhbGxvY19yZXNlcnZlZF9mbGFnKQpAQCAtNDQ3NiwxMCArNDQ2MiwxMCBAQAogCiAJc2JpID0gRVhUNF9TQihzYik7CiAJZXMgPSBFWFQ0X1NCKHNiKS0+c19lczsKLQlpZiAoIWV4dDRfZGF0YV9ibG9ja192YWxpZChzYmksIGJsb2NrLCBjb3VudCkpIHsKLQkJZXh0NF9lcnJvcihzYiwgX19mdW5jX18sCi0JCQkgICAgIkZyZWVpbmcgYmxvY2tzIG5vdCBpbiBkYXRhem9uZSAtICIKLQkJCSAgICAiYmxvY2sgPSAlbGx1LCBjb3VudCA9ICVsdSIsIGJsb2NrLCBjb3VudCk7CisJaWYgKCEoZmxhZ3MgJiBFWFQ0X0ZSRUVfQkxPQ0tTX1ZBTElEQVRFRCkgJiYKKwkgICAgIWV4dDRfZGF0YV9ibG9ja192YWxpZChzYmksIGJsb2NrLCBjb3VudCkpIHsKKwkJZXh0NF9lcnJvcihzYiwgIkZyZWVpbmcgYmxvY2tzIG5vdCBpbiBkYXRhem9uZSAtICIKKwkJCSAgICJibG9jayA9ICVsbHUsIGNvdW50ID0gJWx1IiwgYmxvY2ssIGNvdW50KTsKIAkJZ290byBlcnJvcl9yZXR1cm47CiAJfQogCkBAIC00NTQ3LDggKzQ1MzMsNyBAQAogCSAgICBpbl9yYW5nZShibG9jayArIGNvdW50IC0gMSwgZXh0NF9pbm9kZV90YWJsZShzYiwgZ2RwKSwKIAkJICAgICAgRVhUNF9TQihzYiktPnNfaXRiX3Blcl9ncm91cCkpIHsKIAotCQlleHQ0X2Vycm9yKHNiLCBfX2Z1bmNfXywKLQkJCSAgICJGcmVlaW5nIGJsb2NrcyBpbiBzeXN0ZW0gem9uZSAtICIKKwkJZXh0NF9lcnJvcihzYiwgIkZyZWVpbmcgYmxvY2tzIGluIHN5c3RlbSB6b25lIC0gIgogCQkJICAgIkJsb2NrID0gJWxsdSwgY291bnQgPSAlbHUiLCBibG9jaywgY291bnQpOwogCQkvKiBlcnIgPSAwLiBleHQ0X3N0ZF9lcnJvciBzaG91bGQgYmUgYSBubyBvcCAqLwogCQlnb3RvIGVycm9yX3JldHVybjsKQEAgLTQ2NDYsNyArNDYzMSw3IEBACiAJc2ItPnNfZGlydCA9IDE7CiBlcnJvcl9yZXR1cm46CiAJaWYgKGZyZWVkKQotCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgZnJlZWQpOworCQlkcXVvdF9mcmVlX2Jsb2NrKGlub2RlLCBmcmVlZCk7CiAJYnJlbHNlKGJpdG1hcF9iaCk7CiAJZXh0NF9zdGRfZXJyb3Ioc2IsIGVycik7CiAJaWYgKGFjKQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tYmFsbG9jLmggYi9mcy9leHQ0L21iYWxsb2MuaAppbmRleCA0MzY1MjFjLi5iNjE5MzIyIDEwMDY0NAotLS0gYS9mcy9leHQ0L21iYWxsb2MuaAorKysgYi9mcy9leHQ0L21iYWxsb2MuaApAQCAtMjIwLDE2ICsyMjAsOSBAQAogI2RlZmluZSBFWFQ0X01CX0JJVE1BUChlNGIpCSgoZTRiKS0+YmRfYml0bWFwKQogI2RlZmluZSBFWFQ0X01CX0JVRERZKGU0YikJKChlNGIpLT5iZF9idWRkeSkKIAotI2RlZmluZSBpbl9yYW5nZShiLCBmaXJzdCwgbGVuKQkoKGIpID49IChmaXJzdCkgJiYgKGIpIDw9IChmaXJzdCkgKyAobGVuKSAtIDEpCi0KIHN0YXRpYyBpbmxpbmUgZXh0NF9mc2Jsa190IGV4dDRfZ3JwX29mZnNfdG9fYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJc3RydWN0IGV4dDRfZnJlZV9leHRlbnQgKmZleCkKIHsKLQlleHQ0X2ZzYmxrX3QgYmxvY2s7Ci0KLQlibG9jayA9IChleHQ0X2ZzYmxrX3QpIGZleC0+ZmVfZ3JvdXAgKiBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpCi0JCQkrIGZleC0+ZmVfc3RhcnQKLQkJCSsgbGUzMl90b19jcHUoRVhUNF9TQihzYiktPnNfZXMtPnNfZmlyc3RfZGF0YV9ibG9jayk7Ci0JcmV0dXJuIGJsb2NrOworCXJldHVybiBleHQ0X2dyb3VwX2ZpcnN0X2Jsb2NrX25vKHNiLCBmZXgtPmZlX2dyb3VwKSArIGZleC0+ZmVfc3RhcnQ7CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvbWlncmF0ZS5jIGIvZnMvZXh0NC9taWdyYXRlLmMKaW5kZXggODE0MTU4MS4uOGI4N2JkMCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9taWdyYXRlLmMKKysrIGIvZnMvZXh0NC9taWdyYXRlLmMKQEAgLTM2NSwxMiArMzY1LDEyIEBACiAJICogaGFwcGVuZWQgYWZ0ZXIgd2Ugc3RhcnRlZCB0aGUgbWlncmF0ZS4gV2UgbmVlZCB0bwogCSAqIGZhaWwgdGhlIG1pZ3JhdGUKIAkgKi8KLQlpZiAoIShFWFQ0X0koaW5vZGUpLT5pX3N0YXRlICYgRVhUNF9TVEFURV9FWFRfTUlHUkFURSkpIHsKKwlpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9FWFRfTUlHUkFURSkpIHsKIAkJcmV0dmFsID0gLUVBR0FJTjsKIAkJdXBfd3JpdGUoJkVYVDRfSShpbm9kZSktPmlfZGF0YV9zZW0pOwogCQlnb3RvIGVycl9vdXQ7CiAJfSBlbHNlCi0JCUVYVDRfSShpbm9kZSktPmlfc3RhdGUgJj0gfkVYVDRfU1RBVEVfRVhUX01JR1JBVEU7CisJCWV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfRVhUX01JR1JBVEUpOwogCS8qCiAJICogV2UgaGF2ZSB0aGUgZXh0ZW50IG1hcCBidWlsZCB3aXRoIHRoZSB0bXAgaW5vZGUuCiAJICogTm93IGNvcHkgdGhlIGlfZGF0YSBhY3Jvc3MKQEAgLTUwMywxNCArNTAzLDEwIEBACiAJfQogCWlfc2l6ZV93cml0ZSh0bXBfaW5vZGUsIGlfc2l6ZV9yZWFkKGlub2RlKSk7CiAJLyoKLQkgKiBXZSBkb24ndCB3YW50IHRoZSBpbm9kZSB0byBiZSByZWNsYWltZWQKLQkgKiBpZiB3ZSBnb3QgaW50ZXJydXB0ZWQgaW4gYmV0d2Vlbi4gV2UgaGF2ZQotCSAqIHRoaXMgdG1wIGlub2RlIGNhcnJ5aW5nIHJlZmVyZW5jZSB0byB0aGUKLQkgKiBkYXRhIGJsb2NrcyBvZiB0aGUgb3JpZ2luYWwgZmlsZS4gV2Ugc2V0Ci0JICogdGhlIGlfbmxpbmsgdG8gemVybyBhdCB0aGUgbGFzdCBzdGFnZSBhZnRlcgotCSAqIHN3aXRjaGluZyB0aGUgb3JpZ2luYWwgZmlsZSB0byBleHRlbnQgZm9ybWF0CisJICogU2V0IHRoZSBpX25saW5rIHRvIHplcm8gc28gaXQgd2lsbCBiZSBkZWxldGVkIGxhdGVyCisJICogd2hlbiB3ZSBkcm9wIGlub2RlIHJlZmVyZW5jZS4KIAkgKi8KLQl0bXBfaW5vZGUtPmlfbmxpbmsgPSAxOworCXRtcF9pbm9kZS0+aV9ubGluayA9IDA7CiAKIAlleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCB0bXBfaW5vZGUpOwogCWV4dDRfb3JwaGFuX2FkZChoYW5kbGUsIHRtcF9pbm9kZSk7CkBAIC01MzMsMTAgKzUyOSwyMCBAQAogCSAqIGFsbG9jYXRpb24uCiAJICovCiAJZG93bl9yZWFkKCgmRVhUNF9JKGlub2RlKS0+aV9kYXRhX3NlbSkpOwotCUVYVDRfSShpbm9kZSktPmlfc3RhdGUgfD0gRVhUNF9TVEFURV9FWFRfTUlHUkFURTsKKwlleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9FWFRfTUlHUkFURSk7CiAJdXBfcmVhZCgoJkVYVDRfSShpbm9kZSktPmlfZGF0YV9zZW0pKTsKIAogCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgMSk7CisJaWYgKElTX0VSUihoYW5kbGUpKSB7CisJCS8qCisJCSAqIEl0IGlzIGltcG9zc2libGUgdG8gdXBkYXRlIG9uLWRpc2sgc3RydWN0dXJlcyB3aXRob3V0CisJCSAqIGEgaGFuZGxlLCBzbyBqdXN0IHJvbGxiYWNrIGluLWNvcmUgY2hhbmdlcyBhbmQgbGl2ZSBvdGhlcgorCQkgKiB3b3JrIHRvIG9ycGhhbl9saXN0X2NsZWFudXAoKQorCQkgKi8KKwkJZXh0NF9vcnBoYW5fZGVsKE5VTEwsIHRtcF9pbm9kZSk7CisJCXJldHZhbCA9IFBUUl9FUlIoaGFuZGxlKTsKKwkJZ290byBvdXQ7CisJfQogCiAJZWkgPSBFWFQ0X0koaW5vZGUpOwogCWlfZGF0YSA9IGVpLT5pX2RhdGE7CkBAIC02MTgsMTUgKzYyNCw4IEBACiAKIAkvKiBSZXNldCB0aGUgZXh0ZW50IGRldGFpbHMgKi8KIAlleHQ0X2V4dF90cmVlX2luaXQoaGFuZGxlLCB0bXBfaW5vZGUpOwotCi0JLyoKLQkgKiBTZXQgdGhlIGlfbmxpbmsgdG8gemVybyBzbyB0aGF0Ci0JICogZ2VuZXJpY19kcm9wX2lub2RlIHJlYWxseSBkZWxldGVzIHRoZQotCSAqIGlub2RlCi0JICovCi0JdG1wX2lub2RlLT5pX25saW5rID0gMDsKLQogCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CitvdXQ6CiAJdW5sb2NrX25ld19pbm9kZSh0bXBfaW5vZGUpOwogCWlwdXQodG1wX2lub2RlKTsKIApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9tb3ZlX2V4dGVudC5jIGIvZnMvZXh0NC9tb3ZlX2V4dGVudC5jCmluZGV4IDgyYzQxNWIuLmFhNWZlMjggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvbW92ZV9leHRlbnQuYworKysgYi9mcy9leHQ0L21vdmVfZXh0ZW50LmMKQEAgLTE1MiwxMiArMTUyLDEyIEBACiAJaW50IHJldCA9IDA7CiAKIAlpZiAoaW5vZGUxID09IE5VTEwpIHsKLQkJZXh0NF9lcnJvcihpbm9kZTItPmlfc2IsIGZ1bmN0aW9uLAorCQlfX2V4dDRfZXJyb3IoaW5vZGUyLT5pX3NiLCBmdW5jdGlvbiwKIAkJCSJCb3RoIGlub2RlcyBzaG91bGQgbm90IGJlIE5VTEw6ICIKIAkJCSJpbm9kZTEgTlVMTCBpbm9kZTIgJWx1IiwgaW5vZGUyLT5pX2lubyk7CiAJCXJldCA9IC1FSU87CiAJfSBlbHNlIGlmIChpbm9kZTIgPT0gTlVMTCkgewotCQlleHQ0X2Vycm9yKGlub2RlMS0+aV9zYiwgZnVuY3Rpb24sCisJCV9fZXh0NF9lcnJvcihpbm9kZTEtPmlfc2IsIGZ1bmN0aW9uLAogCQkJIkJvdGggaW5vZGVzIHNob3VsZCBub3QgYmUgTlVMTDogIgogCQkJImlub2RlMSAlbHUgaW5vZGUyIE5VTEwiLCBpbm9kZTEtPmlfaW5vKTsKIAkJcmV0ID0gLUVJTzsKQEAgLTI1Miw2ICsyNTIsNyBAQAogCQl9CiAKIAkJb19zdGFydC0+ZWVfbGVuID0gc3RhcnRfZXh0LT5lZV9sZW47CisJCWVibG9jayA9IGxlMzJfdG9fY3B1KHN0YXJ0X2V4dC0+ZWVfYmxvY2spOwogCQluZXdfZmxhZyA9IDE7CiAKIAl9IGVsc2UgaWYgKHN0YXJ0X2V4dC0+ZWVfbGVuICYmIG5ld19leHQtPmVlX2xlbiAmJgpAQCAtMjYyLDYgKzI2Myw3IEBACiAJCSAqIG9yaWcgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CiAJCSAqLwogCQlvX3N0YXJ0LT5lZV9sZW4gPSBzdGFydF9leHQtPmVlX2xlbjsKKwkJZWJsb2NrID0gbGUzMl90b19jcHUoc3RhcnRfZXh0LT5lZV9ibG9jayk7CiAJCW5ld19mbGFnID0gMTsKIAogCX0gZWxzZSBpZiAoIXN0YXJ0X2V4dC0+ZWVfbGVuICYmIG5ld19leHQtPmVlX2xlbiAmJgpAQCAtNDc1LDcgKzQ3Nyw2IEBACiAJc3RydWN0IGV4dDRfZXh0ZW50ICpvZXh0LCAqb19zdGFydCwgKm9fZW5kLCAqcHJldl9leHQ7CiAJc3RydWN0IGV4dDRfZXh0ZW50IG5ld19leHQsIHN0YXJ0X2V4dCwgZW5kX2V4dDsKIAlleHQ0X2xibGtfdCBuZXdfZXh0X2VuZDsKLQlleHQ0X2ZzYmxrX3QgbmV3X3BoeXNfZW5kOwogCWludCBvZXh0X2FsZW4sIG5ld19leHRfYWxlbiwgZW5kX2V4dF9hbGVuOwogCWludCBkZXB0aCA9IGV4dF9kZXB0aChvcmlnX2lub2RlKTsKIAlpbnQgcmV0OwpAQCAtNDg5LDcgKzQ5MCw2IEBACiAJbmV3X2V4dC5lZV9sZW4gPSBkZXh0LT5lZV9sZW47CiAJbmV3X2V4dF9hbGVuID0gZXh0NF9leHRfZ2V0X2FjdHVhbF9sZW4oJm5ld19leHQpOwogCW5ld19leHRfZW5kID0gbGUzMl90b19jcHUobmV3X2V4dC5lZV9ibG9jaykgKyBuZXdfZXh0X2FsZW4gLSAxOwotCW5ld19waHlzX2VuZCA9IGV4dF9wYmxvY2soJm5ld19leHQpICsgbmV3X2V4dF9hbGVuIC0gMTsKIAogCS8qCiAJICogQ2FzZTogb3JpZ2luYWwgZXh0ZW50IGlzIGZpcnN0CkBAIC01MDIsNiArNTAyLDcgQEAKIAkJbGUzMl90b19jcHUob2V4dC0+ZWVfYmxvY2spICsgb2V4dF9hbGVuKSB7CiAJCXN0YXJ0X2V4dC5lZV9sZW4gPSBjcHVfdG9fbGUxNihsZTMyX3RvX2NwdShuZXdfZXh0LmVlX2Jsb2NrKSAtCiAJCQkJCSAgICAgICBsZTMyX3RvX2NwdShvZXh0LT5lZV9ibG9jaykpOworCQlzdGFydF9leHQuZWVfYmxvY2sgPSBvZXh0LT5lZV9ibG9jazsKIAkJY29weV9leHRlbnRfc3RhdHVzKG9leHQsICZzdGFydF9leHQpOwogCX0gZWxzZSBpZiAob2V4dCA+IEVYVF9GSVJTVF9FWFRFTlQob3JpZ19wYXRoW2RlcHRoXS5wX2hkcikpIHsKIAkJcHJldl9leHQgPSBvZXh0IC0gMTsKQEAgLTUxNSw2ICs1MTYsNyBAQAogCQkJc3RhcnRfZXh0LmVlX2xlbiA9IGNwdV90b19sZTE2KAogCQkJCWV4dDRfZXh0X2dldF9hY3R1YWxfbGVuKHByZXZfZXh0KSArCiAJCQkJbmV3X2V4dF9hbGVuKTsKKwkJCXN0YXJ0X2V4dC5lZV9ibG9jayA9IG9leHQtPmVlX2Jsb2NrOwogCQkJY29weV9leHRlbnRfc3RhdHVzKHByZXZfZXh0LCAmc3RhcnRfZXh0KTsKIAkJCW5ld19leHQuZWVfbGVuID0gMDsKIAkJfQpAQCAtNTI2LDcgKzUyOCw3IEBACiAJICogbmV3X2V4dCAgICAgICB8LS0tLS0tLXwKIAkgKi8KIAlpZiAobGUzMl90b19jcHUob2V4dC0+ZWVfYmxvY2spICsgb2V4dF9hbGVuIC0gMSA8IG5ld19leHRfZW5kKSB7Ci0JCWV4dDRfZXJyb3Iob3JpZ19pbm9kZS0+aV9zYiwgX19mdW5jX18sCisJCWV4dDRfZXJyb3Iob3JpZ19pbm9kZS0+aV9zYiwKIAkJCSJuZXdfZXh0X2VuZCgldSkgc2hvdWxkIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAiCiAJCQkib2V4dC0+ZWVfYmxvY2soJXUpICsgb2V4dF9hbGVuKCVkKSAtIDEiLAogCQkJbmV3X2V4dF9lbmQsIGxlMzJfdG9fY3B1KG9leHQtPmVlX2Jsb2NrKSwKQEAgLTY4OSwxMiArNjkxLDEyIEBACiAJd2hpbGUgKDEpIHsKIAkJLyogVGhlIGV4dGVudCBmb3IgZG9ub3IgbXVzdCBiZSBmb3VuZC4gKi8KIAkJaWYgKCFkZXh0KSB7Ci0JCQlleHQ0X2Vycm9yKGRvbm9yX2lub2RlLT5pX3NiLCBfX2Z1bmNfXywKKwkJCWV4dDRfZXJyb3IoZG9ub3JfaW5vZGUtPmlfc2IsCiAJCQkJICAgIlRoZSBleHRlbnQgZm9yIGRvbm9yIG11c3QgYmUgZm91bmQiKTsKIAkJCSplcnIgPSAtRUlPOwogCQkJZ290byBvdXQ7CiAJCX0gZWxzZSBpZiAoZG9ub3Jfb2ZmICE9IGxlMzJfdG9fY3B1KHRtcF9kZXh0LmVlX2Jsb2NrKSkgewotCQkJZXh0NF9lcnJvcihkb25vcl9pbm9kZS0+aV9zYiwgX19mdW5jX18sCisJCQlleHQ0X2Vycm9yKGRvbm9yX2lub2RlLT5pX3NiLAogCQkJCSJEb25vciBvZmZzZXQoJXUpIGFuZCB0aGUgZmlyc3QgYmxvY2sgb2YgZG9ub3IgIgogCQkJCSJleHRlbnQoJXUpIHNob3VsZCBiZSBlcXVhbCIsCiAJCQkJZG9ub3Jfb2ZmLApAQCAtOTI4LDcgKzkzMCw3IEBACiB9CiAKIC8qKgotICogbWV4dF9jaGVja19hcmd1bWFudHMgLSBDaGVjayB3aGV0aGVyIG1vdmUgZXh0ZW50IGNhbiBiZSBkb25lCisgKiBtZXh0X2NoZWNrX2FyZ3VtZW50cyAtIENoZWNrIHdoZXRoZXIgbW92ZSBleHRlbnQgY2FuIGJlIGRvbmUKICAqCiAgKiBAb3JpZ19pbm9kZToJCW9yaWdpbmFsIGlub2RlCiAgKiBAZG9ub3JfaW5vZGU6CWRvbm9yIGlub2RlCkBAIC05NDksMTQgKzk1MSw2IEBACiAJdW5zaWduZWQgaW50IGJsa2JpdHMgPSBvcmlnX2lub2RlLT5pX2Jsa2JpdHM7CiAJdW5zaWduZWQgaW50IGJsb2Nrc2l6ZSA9IDEgPDwgYmxrYml0czsKIAotCS8qIFJlZ3VsYXIgZmlsZSBjaGVjayAqLwotCWlmICghU19JU1JFRyhvcmlnX2lub2RlLT5pX21vZGUpIHx8ICFTX0lTUkVHKGRvbm9yX2lub2RlLT5pX21vZGUpKSB7Ci0JCWV4dDRfZGVidWcoImV4dDQgbW92ZSBleHRlbnQ6IFRoZSBhcmd1bWVudCBmaWxlcyBzaG91bGQgYmUgIgotCQkJInJlZ3VsYXIgZmlsZSBbaW5vOm9yaWcgJWx1LCBkb25vciAlbHVdXG4iLAotCQkJb3JpZ19pbm9kZS0+aV9pbm8sIGRvbm9yX2lub2RlLT5pX2lubyk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQogCWlmIChkb25vcl9pbm9kZS0+aV9tb2RlICYgKFNfSVNVSUR8U19JU0dJRCkpIHsKIAkJZXh0NF9kZWJ1ZygiZXh0NCBtb3ZlIGV4dGVudDogc3VpZCBvciBzZ2lkIGlzIHNldCIKIAkJCSAgICIgdG8gZG9ub3IgZmlsZSBbaW5vOm9yaWcgJWx1LCBkb25vciAlbHVdXG4iLApAQCAtMTIwNCw2ICsxMTk4LDE0IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCS8qIFJlZ3VsYXIgZmlsZSBjaGVjayAqLworCWlmICghU19JU1JFRyhvcmlnX2lub2RlLT5pX21vZGUpIHx8ICFTX0lTUkVHKGRvbm9yX2lub2RlLT5pX21vZGUpKSB7CisJCWV4dDRfZGVidWcoImV4dDQgbW92ZSBleHRlbnQ6IFRoZSBhcmd1bWVudCBmaWxlcyBzaG91bGQgYmUgIgorCQkJInJlZ3VsYXIgZmlsZSBbaW5vOm9yaWcgJWx1LCBkb25vciAlbHVdXG4iLAorCQkJb3JpZ19pbm9kZS0+aV9pbm8sIGRvbm9yX2lub2RlLT5pX2lubyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCS8qIFByb3RlY3Qgb3JpZyBhbmQgZG9ub3IgaW5vZGVzIGFnYWluc3QgYSB0cnVuY2F0ZSAqLwogCXJldDEgPSBtZXh0X2lub2RlX2RvdWJsZV9sb2NrKG9yaWdfaW5vZGUsIGRvbm9yX2lub2RlKTsKIAlpZiAocmV0MSA8IDApCkBAIC0xMzUxLDcgKzEzNTMsNyBAQAogCQkJaWYgKHJldDEgPCAwKQogCQkJCWJyZWFrOwogCQkJaWYgKCptb3ZlZF9sZW4gPiBsZW4pIHsKLQkJCQlleHQ0X2Vycm9yKG9yaWdfaW5vZGUtPmlfc2IsIF9fZnVuY19fLAorCQkJCWV4dDRfZXJyb3Iob3JpZ19pbm9kZS0+aV9zYiwKIAkJCQkJIldlIHJlcGxhY2VkIGJsb2NrcyB0b28gbXVjaCEgIgogCQkJCQkic3VtIG9mIHJlcGxhY2VkOiAlbGx1IHJlcXVlc3RlZDogJWxsdSIsCiAJCQkJCSptb3ZlZF9sZW4sIGxlbik7CmRpZmYgLS1naXQgYS9mcy9leHQ0L25hbWVpLmMgYi9mcy9leHQ0L25hbWVpLmMKaW5kZXggMTdhMTdlMS4uMGMwNzBmYSAxMDA2NDQKLS0tIGEvZnMvZXh0NC9uYW1laS5jCisrKyBiL2ZzL2V4dDQvbmFtZWkuYwpAQCAtMzgzLDggKzM4Myw3IEBACiAJaWYgKHJvb3QtPmluZm8uaGFzaF92ZXJzaW9uICE9IERYX0hBU0hfVEVBICYmCiAJICAgIHJvb3QtPmluZm8uaGFzaF92ZXJzaW9uICE9IERYX0hBU0hfSEFMRl9NRDQgJiYKIAkgICAgcm9vdC0+aW5mby5oYXNoX3ZlcnNpb24gIT0gRFhfSEFTSF9MRUdBQ1kpIHsKLQkJZXh0NF93YXJuaW5nKGRpci0+aV9zYiwgX19mdW5jX18sCi0JCQkgICAgICJVbnJlY29nbmlzZWQgaW5vZGUgaGFzaCBjb2RlICVkIiwKKwkJZXh0NF93YXJuaW5nKGRpci0+aV9zYiwgIlVucmVjb2duaXNlZCBpbm9kZSBoYXNoIGNvZGUgJWQiLAogCQkJICAgICByb290LT5pbmZvLmhhc2hfdmVyc2lvbik7CiAJCWJyZWxzZShiaCk7CiAJCSplcnIgPSBFUlJfQkFEX0RYX0RJUjsKQEAgLTM5OSw4ICszOTgsNyBAQAogCWhhc2ggPSBoaW5mby0+aGFzaDsKIAogCWlmIChyb290LT5pbmZvLnVudXNlZF9mbGFncyAmIDEpIHsKLQkJZXh0NF93YXJuaW5nKGRpci0+aV9zYiwgX19mdW5jX18sCi0JCQkgICAgICJVbmltcGxlbWVudGVkIGlub2RlIGhhc2ggZmxhZ3M6ICUjMDZ4IiwKKwkJZXh0NF93YXJuaW5nKGRpci0+aV9zYiwgIlVuaW1wbGVtZW50ZWQgaW5vZGUgaGFzaCBmbGFnczogJSMwNngiLAogCQkJICAgICByb290LT5pbmZvLnVudXNlZF9mbGFncyk7CiAJCWJyZWxzZShiaCk7CiAJCSplcnIgPSBFUlJfQkFEX0RYX0RJUjsKQEAgLTQwOCw4ICs0MDYsNyBAQAogCX0KIAogCWlmICgoaW5kaXJlY3QgPSByb290LT5pbmZvLmluZGlyZWN0X2xldmVscykgPiAxKSB7Ci0JCWV4dDRfd2FybmluZyhkaXItPmlfc2IsIF9fZnVuY19fLAotCQkJICAgICAiVW5pbXBsZW1lbnRlZCBpbm9kZSBoYXNoIGRlcHRoOiAlIzA2eCIsCisJCWV4dDRfd2FybmluZyhkaXItPmlfc2IsICJVbmltcGxlbWVudGVkIGlub2RlIGhhc2ggZGVwdGg6ICUjMDZ4IiwKIAkJCSAgICAgcm9vdC0+aW5mby5pbmRpcmVjdF9sZXZlbHMpOwogCQlicmVsc2UoYmgpOwogCQkqZXJyID0gRVJSX0JBRF9EWF9ESVI7CkBAIC00MjEsOCArNDE4LDcgQEAKIAogCWlmIChkeF9nZXRfbGltaXQoZW50cmllcykgIT0gZHhfcm9vdF9saW1pdChkaXIsCiAJCQkJCQkgICByb290LT5pbmZvLmluZm9fbGVuZ3RoKSkgewotCQlleHQ0X3dhcm5pbmcoZGlyLT5pX3NiLCBfX2Z1bmNfXywKLQkJCSAgICAgImR4IGVudHJ5OiBsaW1pdCAhPSByb290IGxpbWl0Iik7CisJCWV4dDRfd2FybmluZyhkaXItPmlfc2IsICJkeCBlbnRyeTogbGltaXQgIT0gcm9vdCBsaW1pdCIpOwogCQlicmVsc2UoYmgpOwogCQkqZXJyID0gRVJSX0JBRF9EWF9ESVI7CiAJCWdvdG8gZmFpbDsKQEAgLTQzMyw3ICs0MjksNyBAQAogCXsKIAkJY291bnQgPSBkeF9nZXRfY291bnQoZW50cmllcyk7CiAJCWlmICghY291bnQgfHwgY291bnQgPiBkeF9nZXRfbGltaXQoZW50cmllcykpIHsKLQkJCWV4dDRfd2FybmluZyhkaXItPmlfc2IsIF9fZnVuY19fLAorCQkJZXh0NF93YXJuaW5nKGRpci0+aV9zYiwKIAkJCQkgICAgICJkeCBlbnRyeTogbm8gY291bnQgb3IgY291bnQgPiBsaW1pdCIpOwogCQkJYnJlbHNlKGJoKTsKIAkJCSplcnIgPSBFUlJfQkFEX0RYX0RJUjsKQEAgLTQ3OCw3ICs0NzQsNyBAQAogCQkJZ290byBmYWlsMjsKIAkJYXQgPSBlbnRyaWVzID0gKChzdHJ1Y3QgZHhfbm9kZSAqKSBiaC0+Yl9kYXRhKS0+ZW50cmllczsKIAkJaWYgKGR4X2dldF9saW1pdChlbnRyaWVzKSAhPSBkeF9ub2RlX2xpbWl0IChkaXIpKSB7Ci0JCQlleHQ0X3dhcm5pbmcoZGlyLT5pX3NiLCBfX2Z1bmNfXywKKwkJCWV4dDRfd2FybmluZyhkaXItPmlfc2IsCiAJCQkJICAgICAiZHggZW50cnk6IGxpbWl0ICE9IG5vZGUgbGltaXQiKTsKIAkJCWJyZWxzZShiaCk7CiAJCQkqZXJyID0gRVJSX0JBRF9EWF9ESVI7CkBAIC00OTQsNyArNDkwLDcgQEAKIAl9CiBmYWlsOgogCWlmICgqZXJyID09IEVSUl9CQURfRFhfRElSKQotCQlleHQ0X3dhcm5pbmcoZGlyLT5pX3NiLCBfX2Z1bmNfXywKKwkJZXh0NF93YXJuaW5nKGRpci0+aV9zYiwKIAkJCSAgICAgIkNvcnJ1cHQgZGlyIGlub2RlICVsZCwgcnVubmluZyBlMmZzY2sgaXMgIgogCQkJICAgICAicmVjb21tZW5kZWQuIiwgZGlyLT5pX2lubyk7CiAJcmV0dXJuIE5VTEw7CkBAIC05NDcsOSArOTQzLDggQEAKIAkJd2FpdF9vbl9idWZmZXIoYmgpOwogCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKIAkJCS8qIHJlYWQgZXJyb3IsIHNraXAgYmxvY2sgJiBob3BlIGZvciB0aGUgYmVzdCAqLwotCQkJZXh0NF9lcnJvcihzYiwgX19mdW5jX18sICJyZWFkaW5nIGRpcmVjdG9yeSAjJWx1ICIKLQkJCQkgICAib2Zmc2V0ICVsdSIsIGRpci0+aV9pbm8sCi0JCQkJICAgKHVuc2lnbmVkIGxvbmcpYmxvY2spOworCQkJZXh0NF9lcnJvcihzYiwgInJlYWRpbmcgZGlyZWN0b3J5ICMlbHUgb2Zmc2V0ICVsdSIsCisJCQkJICAgZGlyLT5pX2lubywgKHVuc2lnbmVkIGxvbmcpYmxvY2spOwogCQkJYnJlbHNlKGJoKTsKIAkJCWdvdG8gbmV4dDsKIAkJfQpAQCAtMTA0MSw3ICsxMDM2LDcgQEAKIAkJcmV0dmFsID0gZXh0NF9odHJlZV9uZXh0X2Jsb2NrKGRpciwgaGFzaCwgZnJhbWUsCiAJCQkJCSAgICAgICBmcmFtZXMsIE5VTEwpOwogCQlpZiAocmV0dmFsIDwgMCkgewotCQkJZXh0NF93YXJuaW5nKHNiLCBfX2Z1bmNfXywKKwkJCWV4dDRfd2FybmluZyhzYiwKIAkJCSAgICAgImVycm9yIHJlYWRpbmcgaW5kZXggcGFnZSBpbiBkaXJlY3RvcnkgIyVsdSIsCiAJCQkgICAgIGRpci0+aV9pbm8pOwogCQkJKmVyciA9IHJldHZhbDsKQEAgLTEwNzEsMTQgKzEwNjYsMTMgQEAKIAkJX191MzIgaW5vID0gbGUzMl90b19jcHUoZGUtPmlub2RlKTsKIAkJYnJlbHNlKGJoKTsKIAkJaWYgKCFleHQ0X3ZhbGlkX2ludW0oZGlyLT5pX3NiLCBpbm8pKSB7Ci0JCQlleHQ0X2Vycm9yKGRpci0+aV9zYiwgImV4dDRfbG9va3VwIiwKLQkJCQkgICAiYmFkIGlub2RlIG51bWJlcjogJXUiLCBpbm8pOworCQkJZXh0NF9lcnJvcihkaXItPmlfc2IsICJiYWQgaW5vZGUgbnVtYmVyOiAldSIsIGlubyk7CiAJCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKIAkJfQogCQlpbm9kZSA9IGV4dDRfaWdldChkaXItPmlfc2IsIGlubyk7CiAJCWlmICh1bmxpa2VseShJU19FUlIoaW5vZGUpKSkgewogCQkJaWYgKFBUUl9FUlIoaW5vZGUpID09IC1FU1RBTEUpIHsKLQkJCQlleHQ0X2Vycm9yKGRpci0+aV9zYiwgX19mdW5jX18sCisJCQkJZXh0NF9lcnJvcihkaXItPmlfc2IsCiAJCQkJCQkiZGVsZXRlZCBpbm9kZSByZWZlcmVuY2VkOiAldSIsCiAJCQkJCQlpbm8pOwogCQkJCXJldHVybiBFUlJfUFRSKC1FSU8pOwpAQCAtMTExMCw3ICsxMTA0LDcgQEAKIAlicmVsc2UoYmgpOwogCiAJaWYgKCFleHQ0X3ZhbGlkX2ludW0oY2hpbGQtPmRfaW5vZGUtPmlfc2IsIGlubykpIHsKLQkJZXh0NF9lcnJvcihjaGlsZC0+ZF9pbm9kZS0+aV9zYiwgImV4dDRfZ2V0X3BhcmVudCIsCisJCWV4dDRfZXJyb3IoY2hpbGQtPmRfaW5vZGUtPmlfc2IsCiAJCQkgICAiYmFkIGlub2RlIG51bWJlcjogJXUiLCBpbm8pOwogCQlyZXR1cm4gRVJSX1BUUigtRUlPKTsKIAl9CkBAIC0xNDEwLDcgKzE0MDQsNyBAQAogCWRlID0gKHN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICopKChjaGFyICopZmRlICsKIAkJZXh0NF9yZWNfbGVuX2Zyb21fZGlzayhmZGUtPnJlY19sZW4sIGJsb2Nrc2l6ZSkpOwogCWlmICgoY2hhciAqKSBkZSA+PSAoKChjaGFyICopIHJvb3QpICsgYmxvY2tzaXplKSkgewotCQlleHQ0X2Vycm9yKGRpci0+aV9zYiwgX19mdW5jX18sCisJCWV4dDRfZXJyb3IoZGlyLT5pX3NiLAogCQkJICAgImludmFsaWQgcmVjX2xlbiBmb3IgJy4uJyBpbiBpbm9kZSAlbHUiLAogCQkJICAgZGlyLT5pX2lubyk7CiAJCWJyZWxzZShiaCk7CkBAIC0xNTc1LDggKzE1NjksNyBAQAogCiAJCWlmIChsZXZlbHMgJiYgKGR4X2dldF9jb3VudChmcmFtZXMtPmVudHJpZXMpID09CiAJCQkgICAgICAgZHhfZ2V0X2xpbWl0KGZyYW1lcy0+ZW50cmllcykpKSB7Ci0JCQlleHQ0X3dhcm5pbmcoc2IsIF9fZnVuY19fLAotCQkJCSAgICAgIkRpcmVjdG9yeSBpbmRleCBmdWxsISIpOworCQkJZXh0NF93YXJuaW5nKHNiLCAiRGlyZWN0b3J5IGluZGV4IGZ1bGwhIik7CiAJCQllcnIgPSAtRU5PU1BDOwogCQkJZ290byBjbGVhbnVwOwogCQl9CkBAIC0xNzY2LDYgKzE3NTksOCBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJaW50IGVyciwgcmV0cmllcyA9IDA7CiAKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CisKIHJldHJ5OgogCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChkaXIsIEVYVDRfREFUQV9UUkFOU19CTE9DS1MoZGlyLT5pX3NiKSArCiAJCQkJCUVYVDRfSU5ERVhfRVhUUkFfVFJBTlNfQkxPQ0tTICsgMyArCkBAIC0xODAwLDYgKzE3OTUsOCBAQAogCWlmICghbmV3X3ZhbGlkX2RldihyZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CisKIHJldHJ5OgogCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChkaXIsIEVYVDRfREFUQV9UUkFOU19CTE9DS1MoZGlyLT5pX3NiKSArCiAJCQkJCUVYVDRfSU5ERVhfRVhUUkFfVFJBTlNfQkxPQ0tTICsgMyArCkBAIC0xODM3LDYgKzE4MzQsOCBAQAogCWlmIChFWFQ0X0RJUl9MSU5LX01BWChkaXIpKQogCQlyZXR1cm4gLUVNTElOSzsKIAorCWRxdW90X2luaXRpYWxpemUoZGlyKTsKKwogcmV0cnk6CiAJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGRpciwgRVhUNF9EQVRBX1RSQU5TX0JMT0NLUyhkaXItPmlfc2IpICsKIAkJCQkJRVhUNF9JTkRFWF9FWFRSQV9UUkFOU19CTE9DS1MgKyAzICsKQEAgLTE5MTYsMTEgKzE5MTUsMTEgQEAKIAlpZiAoaW5vZGUtPmlfc2l6ZSA8IEVYVDRfRElSX1JFQ19MRU4oMSkgKyBFWFQ0X0RJUl9SRUNfTEVOKDIpIHx8CiAJICAgICEoYmggPSBleHQ0X2JyZWFkKE5VTEwsIGlub2RlLCAwLCAwLCAmZXJyKSkpIHsKIAkJaWYgKGVycikKLQkJCWV4dDRfZXJyb3IoaW5vZGUtPmlfc2IsIF9fZnVuY19fLAorCQkJZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwKIAkJCQkgICAiZXJyb3IgJWQgcmVhZGluZyBkaXJlY3RvcnkgIyVsdSBvZmZzZXQgMCIsCiAJCQkJICAgZXJyLCBpbm9kZS0+aV9pbm8pOwogCQllbHNlCi0JCQlleHQ0X3dhcm5pbmcoaW5vZGUtPmlfc2IsIF9fZnVuY19fLAorCQkJZXh0NF93YXJuaW5nKGlub2RlLT5pX3NiLAogCQkJCSAgICAgImJhZCBkaXJlY3RvcnkgKGRpciAjJWx1KSAtIG5vIGRhdGEgYmxvY2siLAogCQkJCSAgICAgaW5vZGUtPmlfaW5vKTsKIAkJcmV0dXJuIDE7CkBAIC0xOTMxLDcgKzE5MzAsNyBAQAogCQkJIWxlMzJfdG9fY3B1KGRlMS0+aW5vZGUpIHx8CiAJCQlzdHJjbXAoIi4iLCBkZS0+bmFtZSkgfHwKIAkJCXN0cmNtcCgiLi4iLCBkZTEtPm5hbWUpKSB7Ci0JCWV4dDRfd2FybmluZyhpbm9kZS0+aV9zYiwgImVtcHR5X2RpciIsCisJCWV4dDRfd2FybmluZyhpbm9kZS0+aV9zYiwKIAkJCSAgICAgImJhZCBkaXJlY3RvcnkgKGRpciAjJWx1KSAtIG5vIGAuJyBvciBgLi4nIiwKIAkJCSAgICAgaW5vZGUtPmlfaW5vKTsKIAkJYnJlbHNlKGJoKTsKQEAgLTE5NDksNyArMTk0OCw3IEBACiAJCQkJb2Zmc2V0ID4+IEVYVDRfQkxPQ0tfU0laRV9CSVRTKHNiKSwgMCwgJmVycik7CiAJCQlpZiAoIWJoKSB7CiAJCQkJaWYgKGVycikKLQkJCQkJZXh0NF9lcnJvcihzYiwgX19mdW5jX18sCisJCQkJCWV4dDRfZXJyb3Ioc2IsCiAJCQkJCQkgICAiZXJyb3IgJWQgcmVhZGluZyBkaXJlY3RvcnkiCiAJCQkJCQkgICAiICMlbHUgb2Zmc2V0ICV1IiwKIAkJCQkJCSAgIGVyciwgaW5vZGUtPmlfaW5vLCBvZmZzZXQpOwpAQCAtMjAyMCwxMSArMjAxOSwxOCBAQAogCWVyciA9IGV4dDRfcmVzZXJ2ZV9pbm9kZV93cml0ZShoYW5kbGUsIGlub2RlLCAmaWxvYyk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfdW5sb2NrOworCS8qCisJICogRHVlIHRvIHByZXZpb3VzIGVycm9ycyBpbm9kZSBtYXkgYmUgYWxyZWFkeSBhIHBhcnQgb2Ygb24tZGlzaworCSAqIG9ycGhhbiBsaXN0LiBJZiBzbyBza2lwIG9uLWRpc2sgbGlzdCBtb2RpZmljYXRpb24uCisJICovCisJaWYgKE5FWFRfT1JQSEFOKGlub2RlKSAmJiBORVhUX09SUEhBTihpbm9kZSkgPD0KKwkJKGxlMzJfdG9fY3B1KEVYVDRfU0Ioc2IpLT5zX2VzLT5zX2lub2Rlc19jb3VudCkpKQorCQkJZ290byBtZW1faW5zZXJ0OwogCiAJLyogSW5zZXJ0IHRoaXMgaW5vZGUgYXQgdGhlIGhlYWQgb2YgdGhlIG9uLWRpc2sgb3JwaGFuIGxpc3QuLi4gKi8KIAlORVhUX09SUEhBTihpbm9kZSkgPSBsZTMyX3RvX2NwdShFWFQ0X1NCKHNiKS0+c19lcy0+c19sYXN0X29ycGhhbik7CiAJRVhUNF9TQihzYiktPnNfZXMtPnNfbGFzdF9vcnBoYW4gPSBjcHVfdG9fbGUzMihpbm9kZS0+aV9pbm8pOwotCWVyciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsIEVYVDRfU0Ioc2IpLT5zX3NiaCk7CisJZXJyID0gZXh0NF9oYW5kbGVfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCBOVUxMLCBFWFQ0X1NCKHNiKS0+c19zYmgpOwogCXJjID0gZXh0NF9tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgJmlsb2MpOwogCWlmICghZXJyKQogCQllcnIgPSByYzsKQEAgLTIwMzcsNiArMjA0Myw3IEBACiAJICoKIAkgKiBUaGlzIGlzIHNhZmU6IG9uIGVycm9yIHdlJ3JlIGdvaW5nIHRvIGlnbm9yZSB0aGUgb3JwaGFuIGxpc3QKIAkgKiBhbnl3YXkgb24gdGhlIG5leHQgcmVjb3ZlcnkuICovCittZW1faW5zZXJ0OgogCWlmICghZXJyKQogCQlsaXN0X2FkZCgmRVhUNF9JKGlub2RlKS0+aV9vcnBoYW4sICZFWFQ0X1NCKHNiKS0+c19vcnBoYW4pOwogCkBAIC0yMDk2LDcgKzIxMDMsNyBAQAogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfYnJlbHNlOwogCQlzYmktPnNfZXMtPnNfbGFzdF9vcnBoYW4gPSBjcHVfdG9fbGUzMihpbm9fbmV4dCk7Ci0JCWVyciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsIHNiaS0+c19zYmgpOworCQllcnIgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIE5VTEwsIHNiaS0+c19zYmgpOwogCX0gZWxzZSB7CiAJCXN0cnVjdCBleHQ0X2lsb2MgaWxvYzI7CiAJCXN0cnVjdCBpbm9kZSAqaV9wcmV2ID0KQEAgLTIxMzYsNyArMjE0Myw5IEBACiAKIAkvKiBJbml0aWFsaXplIHF1b3RhcyBiZWZvcmUgc28gdGhhdCBldmVudHVhbCB3cml0ZXMgZ28gaW4KIAkgKiBzZXBhcmF0ZSB0cmFuc2FjdGlvbiAqLwotCXZmc19kcV9pbml0KGRlbnRyeS0+ZF9pbm9kZSk7CisJZHF1b3RfaW5pdGlhbGl6ZShkaXIpOworCWRxdW90X2luaXRpYWxpemUoZGVudHJ5LT5kX2lub2RlKTsKKwogCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChkaXIsIEVYVDRfREVMRVRFX1RSQU5TX0JMT0NLUyhkaXItPmlfc2IpKTsKIAlpZiAoSVNfRVJSKGhhbmRsZSkpCiAJCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7CkBAIC0yMTYzLDcgKzIxNzIsNyBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZW5kX3JtZGlyOwogCWlmICghRVhUNF9ESVJfTElOS19FTVBUWShpbm9kZSkpCi0JCWV4dDRfd2FybmluZyhpbm9kZS0+aV9zYiwgImV4dDRfcm1kaXIiLAorCQlleHQ0X3dhcm5pbmcoaW5vZGUtPmlfc2IsCiAJCQkgICAgICJlbXB0eSBkaXJlY3RvcnkgaGFzIHRvbyBtYW55IGxpbmtzICglZCkiLAogCQkJICAgICBpbm9kZS0+aV9ubGluayk7CiAJaW5vZGUtPmlfdmVyc2lvbisrOwpAQCAtMjE5NSw3ICsyMjA0LDkgQEAKIAogCS8qIEluaXRpYWxpemUgcXVvdGFzIGJlZm9yZSBzbyB0aGF0IGV2ZW50dWFsIHdyaXRlcyBnbwogCSAqIGluIHNlcGFyYXRlIHRyYW5zYWN0aW9uICovCi0JdmZzX2RxX2luaXQoZGVudHJ5LT5kX2lub2RlKTsKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CisJZHF1b3RfaW5pdGlhbGl6ZShkZW50cnktPmRfaW5vZGUpOworCiAJaGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGRpciwgRVhUNF9ERUxFVEVfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikpOwogCWlmIChJU19FUlIoaGFuZGxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKQEAgLTIyMTUsNyArMjIyNiw3IEBACiAJCWdvdG8gZW5kX3VubGluazsKIAogCWlmICghaW5vZGUtPmlfbmxpbmspIHsKLQkJZXh0NF93YXJuaW5nKGlub2RlLT5pX3NiLCAiZXh0NF91bmxpbmsiLAorCQlleHQ0X3dhcm5pbmcoaW5vZGUtPmlfc2IsCiAJCQkgICAgICJEZWxldGluZyBub25leGlzdGVudCBmaWxlICglbHUpLCAlZCIsCiAJCQkgICAgIGlub2RlLT5pX2lubywgaW5vZGUtPmlfbmxpbmspOwogCQlpbm9kZS0+aV9ubGluayA9IDE7CkBAIC0yMjUwLDYgKzIyNjEsOCBAQAogCWlmIChsID4gZGlyLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkKIAkJcmV0dXJuIC1FTkFNRVRPT0xPTkc7CiAKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CisKIHJldHJ5OgogCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChkaXIsIEVYVDRfREFUQV9UUkFOU19CTE9DS1MoZGlyLT5pX3NiKSArCiAJCQkJCUVYVDRfSU5ERVhfRVhUUkFfVFJBTlNfQkxPQ0tTICsgNSArCkBAIC0yMzA4LDYgKzIzMjEsOCBAQAogCWlmIChpbm9kZS0+aV9ubGluayA+PSBFWFQ0X0xJTktfTUFYKQogCQlyZXR1cm4gLUVNTElOSzsKIAorCWRxdW90X2luaXRpYWxpemUoZGlyKTsKKwogCS8qCiAJICogUmV0dXJuIC1FTk9FTlQgaWYgd2UndmUgcmFjZWQgd2l0aCB1bmxpbmsgYW5kIGlfbmxpbmsgaXMgMC4gIERvaW5nCiAJICogb3RoZXJ3aXNlIGhhcyB0aGUgcG90ZW50aWFsIHRvIGNvcnJ1cHQgdGhlIG9ycGhhbiBpbm9kZSBsaXN0LgpAQCAtMjM1OCwxMiArMjM3MywxNSBAQAogCXN0cnVjdCBleHQ0X2Rpcl9lbnRyeV8yICpvbGRfZGUsICpuZXdfZGU7CiAJaW50IHJldHZhbCwgZm9yY2VfZGFfYWxsb2MgPSAwOwogCisJZHF1b3RfaW5pdGlhbGl6ZShvbGRfZGlyKTsKKwlkcXVvdF9pbml0aWFsaXplKG5ld19kaXIpOworCiAJb2xkX2JoID0gbmV3X2JoID0gZGlyX2JoID0gTlVMTDsKIAogCS8qIEluaXRpYWxpemUgcXVvdGFzIGJlZm9yZSBzbyB0aGF0IGV2ZW50dWFsIHdyaXRlcyBnbwogCSAqIGluIHNlcGFyYXRlIHRyYW5zYWN0aW9uICovCiAJaWYgKG5ld19kZW50cnktPmRfaW5vZGUpCi0JCXZmc19kcV9pbml0KG5ld19kZW50cnktPmRfaW5vZGUpOworCQlkcXVvdF9pbml0aWFsaXplKG5ld19kZW50cnktPmRfaW5vZGUpOwogCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChvbGRfZGlyLCAyICoKIAkJCQkJRVhUNF9EQVRBX1RSQU5TX0JMT0NLUyhvbGRfZGlyLT5pX3NiKSArCiAJCQkJCUVYVDRfSU5ERVhfRVhUUkFfVFJBTlNfQkxPQ0tTICsgMik7CkBAIC0yNDYyLDcgKzI0ODAsNyBAQAogCQl9CiAJfQogCWlmIChyZXR2YWwpIHsKLQkJZXh0NF93YXJuaW5nKG9sZF9kaXItPmlfc2IsICJleHQ0X3JlbmFtZSIsCisJCWV4dDRfd2FybmluZyhvbGRfZGlyLT5pX3NiLAogCQkJCSJEZWxldGluZyBvbGQgZmlsZSAoJWx1KSwgJWQsIGVycm9yPSVkIiwKIAkJCQlvbGRfZGlyLT5pX2lubywgb2xkX2Rpci0+aV9ubGluaywgcmV0dmFsKTsKIAl9CmRpZmYgLS1naXQgYS9mcy9leHQ0L3Jlc2l6ZS5jIGIvZnMvZXh0NC9yZXNpemUuYwppbmRleCAzYjJjNTU0Li41NjkyYzQ4IDEwMDY0NAotLS0gYS9mcy9leHQ0L3Jlc2l6ZS5jCisrKyBiL2ZzL2V4dDQvcmVzaXplLmMKQEAgLTQ4LDY1ICs0OCw1NCBAQAogCiAJZXh0NF9nZXRfZ3JvdXBfbm9fYW5kX29mZnNldChzYiwgc3RhcnQsIE5VTEwsICZvZmZzZXQpOwogCWlmIChncm91cCAhPSBzYmktPnNfZ3JvdXBzX2NvdW50KQotCQlleHQ0X3dhcm5pbmcoc2IsIF9fZnVuY19fLAotCQkJICAgICAiQ2Fubm90IGFkZCBhdCBncm91cCAldSAob25seSAldSBncm91cHMpIiwKKwkJZXh0NF93YXJuaW5nKHNiLCAiQ2Fubm90IGFkZCBhdCBncm91cCAldSAob25seSAldSBncm91cHMpIiwKIAkJCSAgICAgaW5wdXQtPmdyb3VwLCBzYmktPnNfZ3JvdXBzX2NvdW50KTsKIAllbHNlIGlmIChvZmZzZXQgIT0gMCkKLQkJCWV4dDRfd2FybmluZyhzYiwgX19mdW5jX18sICJMYXN0IGdyb3VwIG5vdCBmdWxsIik7CisJCQlleHQ0X3dhcm5pbmcoc2IsICJMYXN0IGdyb3VwIG5vdCBmdWxsIik7CiAJZWxzZSBpZiAoaW5wdXQtPnJlc2VydmVkX2Jsb2NrcyA+IGlucHV0LT5ibG9ja3NfY291bnQgLyA1KQotCQlleHQ0X3dhcm5pbmcoc2IsIF9fZnVuY19fLCAiUmVzZXJ2ZWQgYmxvY2tzIHRvbyBoaWdoICgldSkiLAorCQlleHQ0X3dhcm5pbmcoc2IsICJSZXNlcnZlZCBibG9ja3MgdG9vIGhpZ2ggKCV1KSIsCiAJCQkgICAgIGlucHV0LT5yZXNlcnZlZF9ibG9ja3MpOwogCWVsc2UgaWYgKGZyZWVfYmxvY2tzX2NvdW50IDwgMCkKLQkJZXh0NF93YXJuaW5nKHNiLCBfX2Z1bmNfXywgIkJhZCBibG9ja3MgY291bnQgJXUiLAorCQlleHQ0X3dhcm5pbmcoc2IsICJCYWQgYmxvY2tzIGNvdW50ICV1IiwKIAkJCSAgICAgaW5wdXQtPmJsb2Nrc19jb3VudCk7CiAJZWxzZSBpZiAoIShiaCA9IHNiX2JyZWFkKHNiLCBlbmQgLSAxKSkpCi0JCWV4dDRfd2FybmluZyhzYiwgX19mdW5jX18sCi0JCQkgICAgICJDYW5ub3QgcmVhZCBsYXN0IGJsb2NrICglbGx1KSIsCisJCWV4dDRfd2FybmluZyhzYiwgIkNhbm5vdCByZWFkIGxhc3QgYmxvY2sgKCVsbHUpIiwKIAkJCSAgICAgZW5kIC0gMSk7CiAJZWxzZSBpZiAob3V0c2lkZShpbnB1dC0+YmxvY2tfYml0bWFwLCBzdGFydCwgZW5kKSkKLQkJZXh0NF93YXJuaW5nKHNiLCBfX2Z1bmNfXywKLQkJCSAgICAgIkJsb2NrIGJpdG1hcCBub3QgaW4gZ3JvdXAgKGJsb2NrICVsbHUpIiwKKwkJZXh0NF93YXJuaW5nKHNiLCAiQmxvY2sgYml0bWFwIG5vdCBpbiBncm91cCAoYmxvY2sgJWxsdSkiLAogCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWlucHV0LT5ibG9ja19iaXRtYXApOwogCWVsc2UgaWYgKG91dHNpZGUoaW5wdXQtPmlub2RlX2JpdG1hcCwgc3RhcnQsIGVuZCkpCi0JCWV4dDRfd2FybmluZyhzYiwgX19mdW5jX18sCi0JCQkgICAgICJJbm9kZSBiaXRtYXAgbm90IGluIGdyb3VwIChibG9jayAlbGx1KSIsCisJCWV4dDRfd2FybmluZyhzYiwgIklub2RlIGJpdG1hcCBub3QgaW4gZ3JvdXAgKGJsb2NrICVsbHUpIiwKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbnB1dC0+aW5vZGVfYml0bWFwKTsKIAllbHNlIGlmIChvdXRzaWRlKGlucHV0LT5pbm9kZV90YWJsZSwgc3RhcnQsIGVuZCkgfHwKIAkJIG91dHNpZGUoaXRlbmQgLSAxLCBzdGFydCwgZW5kKSkKLQkJZXh0NF93YXJuaW5nKHNiLCBfX2Z1bmNfXywKLQkJCSAgICAgIklub2RlIHRhYmxlIG5vdCBpbiBncm91cCAoYmxvY2tzICVsbHUtJWxsdSkiLAorCQlleHQ0X3dhcm5pbmcoc2IsICJJbm9kZSB0YWJsZSBub3QgaW4gZ3JvdXAgKGJsb2NrcyAlbGx1LSVsbHUpIiwKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbnB1dC0+aW5vZGVfdGFibGUsIGl0ZW5kIC0gMSk7CiAJZWxzZSBpZiAoaW5wdXQtPmlub2RlX2JpdG1hcCA9PSBpbnB1dC0+YmxvY2tfYml0bWFwKQotCQlleHQ0X3dhcm5pbmcoc2IsIF9fZnVuY19fLAotCQkJICAgICAiQmxvY2sgYml0bWFwIHNhbWUgYXMgaW5vZGUgYml0bWFwICglbGx1KSIsCisJCWV4dDRfd2FybmluZyhzYiwgIkJsb2NrIGJpdG1hcCBzYW1lIGFzIGlub2RlIGJpdG1hcCAoJWxsdSkiLAogCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWlucHV0LT5ibG9ja19iaXRtYXApOwogCWVsc2UgaWYgKGluc2lkZShpbnB1dC0+YmxvY2tfYml0bWFwLCBpbnB1dC0+aW5vZGVfdGFibGUsIGl0ZW5kKSkKLQkJZXh0NF93YXJuaW5nKHNiLCBfX2Z1bmNfXywKLQkJCSAgICAgIkJsb2NrIGJpdG1hcCAoJWxsdSkgaW4gaW5vZGUgdGFibGUgKCVsbHUtJWxsdSkiLAorCQlleHQ0X3dhcm5pbmcoc2IsICJCbG9jayBiaXRtYXAgKCVsbHUpIGluIGlub2RlIHRhYmxlICIKKwkJCSAgICAgIiglbGx1LSVsbHUpIiwKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbnB1dC0+YmxvY2tfYml0bWFwLAogCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWlucHV0LT5pbm9kZV90YWJsZSwgaXRlbmQgLSAxKTsKIAllbHNlIGlmIChpbnNpZGUoaW5wdXQtPmlub2RlX2JpdG1hcCwgaW5wdXQtPmlub2RlX3RhYmxlLCBpdGVuZCkpCi0JCWV4dDRfd2FybmluZyhzYiwgX19mdW5jX18sCi0JCQkgICAgICJJbm9kZSBiaXRtYXAgKCVsbHUpIGluIGlub2RlIHRhYmxlICglbGx1LSVsbHUpIiwKKwkJZXh0NF93YXJuaW5nKHNiLCAiSW5vZGUgYml0bWFwICglbGx1KSBpbiBpbm9kZSB0YWJsZSAiCisJCQkgICAgICIoJWxsdS0lbGx1KSIsCiAJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5wdXQtPmlub2RlX2JpdG1hcCwKIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylpbnB1dC0+aW5vZGVfdGFibGUsIGl0ZW5kIC0gMSk7CiAJZWxzZSBpZiAoaW5zaWRlKGlucHV0LT5ibG9ja19iaXRtYXAsIHN0YXJ0LCBtZXRhZW5kKSkKLQkJZXh0NF93YXJuaW5nKHNiLCBfX2Z1bmNfXywKLQkJCSAgICAgIkJsb2NrIGJpdG1hcCAoJWxsdSkgaW4gR0RUIHRhYmxlIgotCQkJICAgICAiICglbGx1LSVsbHUpIiwKKwkJZXh0NF93YXJuaW5nKHNiLCAiQmxvY2sgYml0bWFwICglbGx1KSBpbiBHRFQgdGFibGUgKCVsbHUtJWxsdSkiLAogCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWlucHV0LT5ibG9ja19iaXRtYXAsCiAJCQkgICAgIHN0YXJ0LCBtZXRhZW5kIC0gMSk7CiAJZWxzZSBpZiAoaW5zaWRlKGlucHV0LT5pbm9kZV9iaXRtYXAsIHN0YXJ0LCBtZXRhZW5kKSkKLQkJZXh0NF93YXJuaW5nKHNiLCBfX2Z1bmNfXywKLQkJCSAgICAgIklub2RlIGJpdG1hcCAoJWxsdSkgaW4gR0RUIHRhYmxlIgotCQkJICAgICAiICglbGx1LSVsbHUpIiwKKwkJZXh0NF93YXJuaW5nKHNiLCAiSW5vZGUgYml0bWFwICglbGx1KSBpbiBHRFQgdGFibGUgKCVsbHUtJWxsdSkiLAogCQkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWlucHV0LT5pbm9kZV9iaXRtYXAsCiAJCQkgICAgIHN0YXJ0LCBtZXRhZW5kIC0gMSk7CiAJZWxzZSBpZiAoaW5zaWRlKGlucHV0LT5pbm9kZV90YWJsZSwgc3RhcnQsIG1ldGFlbmQpIHx8CiAJCSBpbnNpZGUoaXRlbmQgLSAxLCBzdGFydCwgbWV0YWVuZCkpCi0JCWV4dDRfd2FybmluZyhzYiwgX19mdW5jX18sCi0JCQkgICAgICJJbm9kZSB0YWJsZSAoJWxsdS0lbGx1KSBvdmVybGFwcyIKLQkJCSAgICAgIkdEVCB0YWJsZSAoJWxsdS0lbGx1KSIsCisJCWV4dDRfd2FybmluZyhzYiwgIklub2RlIHRhYmxlICglbGx1LSVsbHUpIG92ZXJsYXBzIEdEVCB0YWJsZSAiCisJCQkgICAgICIoJWxsdS0lbGx1KSIsCiAJCQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpaW5wdXQtPmlub2RlX3RhYmxlLAogCQkJICAgICBpdGVuZCAtIDEsIHN0YXJ0LCBtZXRhZW5kIC0gMSk7CiAJZWxzZQpAQCAtMzY0LDggKzM1Myw3IEBACiAJd2hpbGUgKChncnAgPSBleHQ0X2xpc3RfYmFja3VwcyhzYiwgJnRocmVlLCAmZml2ZSwgJnNldmVuKSkgPCBlbmQpIHsKIAkJaWYgKGxlMzJfdG9fY3B1KCpwKyspICE9CiAJCSAgICBncnAgKiBFWFQ0X0JMT0NLU19QRVJfR1JPVVAoc2IpICsgYmxrKXsKLQkJCWV4dDRfd2FybmluZyhzYiwgX19mdW5jX18sCi0JCQkJICAgICAicmVzZXJ2ZWQgR0RUICVsbHUiCisJCQlleHQ0X3dhcm5pbmcoc2IsICJyZXNlcnZlZCBHRFQgJWxsdSIKIAkJCQkgICAgICIgbWlzc2luZyBncnAgJWQgKCVsbHUpIiwKIAkJCQkgICAgIGJsaywgZ3JwLAogCQkJCSAgICAgZ3JwICoKQEAgLTQyMCw4ICs0MDgsNyBAQAogICAgICAgICAgKi8KIAlpZiAoRVhUNF9TQihzYiktPnNfc2JoLT5iX2Jsb2NrbnIgIT0KIAkgICAgbGUzMl90b19jcHUoRVhUNF9TQihzYiktPnNfZXMtPnNfZmlyc3RfZGF0YV9ibG9jaykpIHsKLQkJZXh0NF93YXJuaW5nKHNiLCBfX2Z1bmNfXywKLQkJCSJ3b24ndCByZXNpemUgdXNpbmcgYmFja3VwIHN1cGVyYmxvY2sgYXQgJWxsdSIsCisJCWV4dDRfd2FybmluZyhzYiwgIndvbid0IHJlc2l6ZSB1c2luZyBiYWNrdXAgc3VwZXJibG9jayBhdCAlbGx1IiwKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpRVhUNF9TQihzYiktPnNfc2JoLT5iX2Jsb2NrbnIpOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KQEAgLTQ0NCw4ICs0MzEsNyBAQAogCiAJZGF0YSA9IChfX2xlMzIgKilkaW5kLT5iX2RhdGE7CiAJaWYgKGxlMzJfdG9fY3B1KGRhdGFbZ2RiX251bSAlIEVYVDRfQUREUl9QRVJfQkxPQ0soc2IpXSkgIT0gZ2RibG9jaykgewotCQlleHQ0X3dhcm5pbmcoc2IsIF9fZnVuY19fLAotCQkJICAgICAibmV3IGdyb3VwICV1IEdEVCBibG9jayAlbGx1IG5vdCByZXNlcnZlZCIsCisJCWV4dDRfd2FybmluZyhzYiwgIm5ldyBncm91cCAldSBHRFQgYmxvY2sgJWxsdSBub3QgcmVzZXJ2ZWQiLAogCQkJICAgICBpbnB1dC0+Z3JvdXAsIGdkYmxvY2spOwogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGV4aXRfZGluZDsKQEAgLTQ2OCw3ICs0NTQsNyBAQAogCQkJR0ZQX05PRlMpOwogCWlmICghbl9ncm91cF9kZXNjKSB7CiAJCWVyciA9IC1FTk9NRU07Ci0JCWV4dDRfd2FybmluZyhzYiwgX19mdW5jX18sCisJCWV4dDRfd2FybmluZyhzYiwKIAkJCSAgICAgICJub3QgZW5vdWdoIG1lbW9yeSBmb3IgJWx1IGdyb3VwcyIsIGdkYl9udW0gKyAxKTsKIAkJZ290byBleGl0X2lub2RlOwogCX0KQEAgLTU2Nyw4ICs1NTMsNyBAQAogCS8qIEdldCBlYWNoIHJlc2VydmVkIHByaW1hcnkgR0RUIGJsb2NrIGFuZCB2ZXJpZnkgaXQgaG9sZHMgYmFja3VwcyAqLwogCWZvciAocmVzID0gMDsgcmVzIDwgcmVzZXJ2ZWRfZ2RiOyByZXMrKywgYmxrKyspIHsKIAkJaWYgKGxlMzJfdG9fY3B1KCpkYXRhKSAhPSBibGspIHsKLQkJCWV4dDRfd2FybmluZyhzYiwgX19mdW5jX18sCi0JCQkJICAgICAicmVzZXJ2ZWQgYmxvY2sgJWxsdSIKKwkJCWV4dDRfd2FybmluZyhzYiwgInJlc2VydmVkIGJsb2NrICVsbHUiCiAJCQkJICAgICAiIG5vdCBhdCBvZmZzZXQgJWxkIiwKIAkJCQkgICAgIGJsaywKIAkJCQkgICAgIChsb25nKShkYXRhIC0gKF9fbGUzMiAqKWRpbmQtPmJfZGF0YSkpOwpAQCAtNzEzLDggKzY5OCw3IEBACiAJICovCiBleGl0X2VycjoKIAlpZiAoZXJyKSB7Ci0JCWV4dDRfd2FybmluZyhzYiwgX19mdW5jX18sCi0JCQkgICAgICJjYW4ndCB1cGRhdGUgYmFja3VwIGZvciBncm91cCAldSAoZXJyICVkKSwgIgorCQlleHQ0X3dhcm5pbmcoc2IsICJjYW4ndCB1cGRhdGUgYmFja3VwIGZvciBncm91cCAldSAoZXJyICVkKSwgIgogCQkJICAgICAiZm9yY2luZyBmc2NrIG9uIG5leHQgcmVib290IiwgZ3JvdXAsIGVycik7CiAJCXNiaS0+c19tb3VudF9zdGF0ZSAmPSB+RVhUNF9WQUxJRF9GUzsKIAkJc2JpLT5zX2VzLT5zX3N0YXRlICY9IGNwdV90b19sZTE2KH5FWFQ0X1ZBTElEX0ZTKTsKQEAgLTc1MywyMCArNzM3LDE5IEBACiAKIAlpZiAoZ2RiX29mZiA9PSAwICYmICFFWFQ0X0hBU19ST19DT01QQVRfRkVBVFVSRShzYiwKIAkJCQkJRVhUNF9GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVIpKSB7Ci0JCWV4dDRfd2FybmluZyhzYiwgX19mdW5jX18sCi0JCQkgICAgICJDYW4ndCByZXNpemUgbm9uLXNwYXJzZSBmaWxlc3lzdGVtIGZ1cnRoZXIiKTsKKwkJZXh0NF93YXJuaW5nKHNiLCAiQ2FuJ3QgcmVzaXplIG5vbi1zcGFyc2UgZmlsZXN5c3RlbSBmdXJ0aGVyIik7CiAJCXJldHVybiAtRVBFUk07CiAJfQogCiAJaWYgKGV4dDRfYmxvY2tzX2NvdW50KGVzKSArIGlucHV0LT5ibG9ja3NfY291bnQgPAogCSAgICBleHQ0X2Jsb2Nrc19jb3VudChlcykpIHsKLQkJZXh0NF93YXJuaW5nKHNiLCBfX2Z1bmNfXywgImJsb2Nrc19jb3VudCBvdmVyZmxvdyIpOworCQlleHQ0X3dhcm5pbmcoc2IsICJibG9ja3NfY291bnQgb3ZlcmZsb3ciKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJaWYgKGxlMzJfdG9fY3B1KGVzLT5zX2lub2Rlc19jb3VudCkgKyBFWFQ0X0lOT0RFU19QRVJfR1JPVVAoc2IpIDwKIAkgICAgbGUzMl90b19jcHUoZXMtPnNfaW5vZGVzX2NvdW50KSkgewotCQlleHQ0X3dhcm5pbmcoc2IsIF9fZnVuY19fLCAiaW5vZGVzX2NvdW50IG92ZXJmbG93Iik7CisJCWV4dDRfd2FybmluZyhzYiwgImlub2Rlc19jb3VudCBvdmVyZmxvdyIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTc3NCwxNCArNzU3LDEzIEBACiAJCWlmICghRVhUNF9IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsCiAJCQkJCSAgICAgRVhUNF9GRUFUVVJFX0NPTVBBVF9SRVNJWkVfSU5PREUpCiAJCSAgICB8fCAhbGUxNl90b19jcHUoZXMtPnNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrcykpIHsKLQkJCWV4dDRfd2FybmluZyhzYiwgX19mdW5jX18sCisJCQlleHQ0X3dhcm5pbmcoc2IsCiAJCQkJICAgICAiTm8gcmVzZXJ2ZWQgR0RUIGJsb2NrcywgY2FuJ3QgcmVzaXplIik7CiAJCQlyZXR1cm4gLUVQRVJNOwogCQl9CiAJCWlub2RlID0gZXh0NF9pZ2V0KHNiLCBFWFQ0X1JFU0laRV9JTk8pOwogCQlpZiAoSVNfRVJSKGlub2RlKSkgewotCQkJZXh0NF93YXJuaW5nKHNiLCBfX2Z1bmNfXywKLQkJCQkgICAgICJFcnJvciBvcGVuaW5nIHJlc2l6ZSBpbm9kZSIpOworCQkJZXh0NF93YXJuaW5nKHNiLCAiRXJyb3Igb3BlbmluZyByZXNpemUgaW5vZGUiKTsKIAkJCXJldHVybiBQVFJfRVJSKGlub2RlKTsKIAkJfQogCX0KQEAgLTgxMCw4ICs3OTIsNyBAQAogCiAJbXV0ZXhfbG9jaygmc2JpLT5zX3Jlc2l6ZV9sb2NrKTsKIAlpZiAoaW5wdXQtPmdyb3VwICE9IHNiaS0+c19ncm91cHNfY291bnQpIHsKLQkJZXh0NF93YXJuaW5nKHNiLCBfX2Z1bmNfXywKLQkJCSAgICAgIm11bHRpcGxlIHJlc2l6ZXJzIHJ1biBvbiBmaWxlc3lzdGVtISIpOworCQlleHQ0X3dhcm5pbmcoc2IsICJtdWx0aXBsZSByZXNpemVycyBydW4gb24gZmlsZXN5c3RlbSEiKTsKIAkJZXJyID0gLUVCVVNZOwogCQlnb3RvIGV4aXRfam91cm5hbDsKIAl9CkBAIC05OTcsMTMgKzk3OCwxMiBAQAogCQkJIiB0b28gbGFyZ2UgdG8gcmVzaXplIHRvICVsbHUgYmxvY2tzIHNhZmVseVxuIiwKIAkJCXNiLT5zX2lkLCBuX2Jsb2Nrc19jb3VudCk7CiAJCWlmIChzaXplb2Yoc2VjdG9yX3QpIDwgOCkKLQkJCWV4dDRfd2FybmluZyhzYiwgX19mdW5jX18sICJDT05GSUdfTEJEQUYgbm90IGVuYWJsZWQiKTsKKwkJCWV4dDRfd2FybmluZyhzYiwgIkNPTkZJR19MQkRBRiBub3QgZW5hYmxlZCIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAobl9ibG9ja3NfY291bnQgPCBvX2Jsb2Nrc19jb3VudCkgewotCQlleHQ0X3dhcm5pbmcoc2IsIF9fZnVuY19fLAotCQkJICAgICAiY2FuJ3Qgc2hyaW5rIEZTIC0gcmVzaXplIGFib3J0ZWQiKTsKKwkJZXh0NF93YXJuaW5nKHNiLCAiY2FuJ3Qgc2hyaW5rIEZTIC0gcmVzaXplIGFib3J0ZWQiKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKQEAgLTEwMTEsMTUgKzk5MSwxNCBAQAogCWV4dDRfZ2V0X2dyb3VwX25vX2FuZF9vZmZzZXQoc2IsIG9fYmxvY2tzX2NvdW50LCAmZ3JvdXAsICZsYXN0KTsKIAogCWlmIChsYXN0ID09IDApIHsKLQkJZXh0NF93YXJuaW5nKHNiLCBfX2Z1bmNfXywKLQkJCSAgICAgIm5lZWQgdG8gdXNlIGV4dDJvbmxpbmUgdG8gcmVzaXplIGZ1cnRoZXIiKTsKKwkJZXh0NF93YXJuaW5nKHNiLCAibmVlZCB0byB1c2UgZXh0Mm9ubGluZSB0byByZXNpemUgZnVydGhlciIpOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KIAogCWFkZCA9IEVYVDRfQkxPQ0tTX1BFUl9HUk9VUChzYikgLSBsYXN0OwogCiAJaWYgKG9fYmxvY2tzX2NvdW50ICsgYWRkIDwgb19ibG9ja3NfY291bnQpIHsKLQkJZXh0NF93YXJuaW5nKHNiLCBfX2Z1bmNfXywgImJsb2Nrc19jb3VudCBvdmVyZmxvdyIpOworCQlleHQ0X3dhcm5pbmcoc2IsICJibG9ja3NfY291bnQgb3ZlcmZsb3ciKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0xMDI3LDE2ICsxMDA2LDEzIEBACiAJCWFkZCA9IG5fYmxvY2tzX2NvdW50IC0gb19ibG9ja3NfY291bnQ7CiAKIAlpZiAob19ibG9ja3NfY291bnQgKyBhZGQgPCBuX2Jsb2Nrc19jb3VudCkKLQkJZXh0NF93YXJuaW5nKHNiLCBfX2Z1bmNfXywKLQkJCSAgICAgIndpbGwgb25seSBmaW5pc2ggZ3JvdXAgKCVsbHUiCi0JCQkgICAgICIgYmxvY2tzLCAldSBuZXcpIiwKKwkJZXh0NF93YXJuaW5nKHNiLCAid2lsbCBvbmx5IGZpbmlzaCBncm91cCAoJWxsdSBibG9ja3MsICV1IG5ldykiLAogCQkJICAgICBvX2Jsb2Nrc19jb3VudCArIGFkZCwgYWRkKTsKIAogCS8qIFNlZSBpZiB0aGUgZGV2aWNlIGlzIGFjdHVhbGx5IGFzIGJpZyBhcyB3aGF0IHdhcyByZXF1ZXN0ZWQgKi8KIAliaCA9IHNiX2JyZWFkKHNiLCBvX2Jsb2Nrc19jb3VudCArIGFkZCAtIDEpOwogCWlmICghYmgpIHsKLQkJZXh0NF93YXJuaW5nKHNiLCBfX2Z1bmNfXywKLQkJCSAgICAgImNhbid0IHJlYWQgbGFzdCBibG9jaywgcmVzaXplIGFib3J0ZWQiKTsKKwkJZXh0NF93YXJuaW5nKHNiLCAiY2FuJ3QgcmVhZCBsYXN0IGJsb2NrLCByZXNpemUgYWJvcnRlZCIpOwogCQlyZXR1cm4gLUVOT1NQQzsKIAl9CiAJYnJlbHNlKGJoKTsKQEAgLTEwNDcsMTQgKzEwMjMsMTMgQEAKIAloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnRfc2Ioc2IsIDMpOwogCWlmIChJU19FUlIoaGFuZGxlKSkgewogCQllcnIgPSBQVFJfRVJSKGhhbmRsZSk7Ci0JCWV4dDRfd2FybmluZyhzYiwgX19mdW5jX18sICJlcnJvciAlZCBvbiBqb3VybmFsIHN0YXJ0IiwgZXJyKTsKKwkJZXh0NF93YXJuaW5nKHNiLCAiZXJyb3IgJWQgb24gam91cm5hbCBzdGFydCIsIGVycik7CiAJCWdvdG8gZXhpdF9wdXQ7CiAJfQogCiAJbXV0ZXhfbG9jaygmRVhUNF9TQihzYiktPnNfcmVzaXplX2xvY2spOwogCWlmIChvX2Jsb2Nrc19jb3VudCAhPSBleHQ0X2Jsb2Nrc19jb3VudChlcykpIHsKLQkJZXh0NF93YXJuaW5nKHNiLCBfX2Z1bmNfXywKLQkJCSAgICAgIm11bHRpcGxlIHJlc2l6ZXJzIHJ1biBvbiBmaWxlc3lzdGVtISIpOworCQlleHQ0X3dhcm5pbmcoc2IsICJtdWx0aXBsZSByZXNpemVycyBydW4gb24gZmlsZXN5c3RlbSEiKTsKIAkJbXV0ZXhfdW5sb2NrKCZFWFQ0X1NCKHNiKS0+c19yZXNpemVfbG9jayk7CiAJCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJCWVyciA9IC1FQlVTWTsKQEAgLTEwNjMsOCArMTAzOCw3IEBACiAKIAlpZiAoKGVyciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwKIAkJCQkJCSBFWFQ0X1NCKHNiKS0+c19zYmgpKSkgewotCQlleHQ0X3dhcm5pbmcoc2IsIF9fZnVuY19fLAotCQkJICAgICAiZXJyb3IgJWQgb24gam91cm5hbCB3cml0ZSBhY2Nlc3MiLCBlcnIpOworCQlleHQ0X3dhcm5pbmcoc2IsICJlcnJvciAlZCBvbiBqb3VybmFsIHdyaXRlIGFjY2VzcyIsIGVycik7CiAJCW11dGV4X3VubG9jaygmRVhUNF9TQihzYiktPnNfcmVzaXplX2xvY2spOwogCQlleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwogCQlnb3RvIGV4aXRfcHV0OwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IDczNWMyMGQuLmJhMTkxZGEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYworKysgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTMwMiw3ICszMDIsNyBAQAogICogd3JpdGUgb3V0IHRoZSBzdXBlcmJsb2NrIHNhZmVseS4KICAqCiAgKiBXZSdsbCBqdXN0IHVzZSB0aGUgamJkMl9qb3VybmFsX2Fib3J0KCkgZXJyb3IgY29kZSB0byByZWNvcmQgYW4gZXJyb3IgaW4KLSAqIHRoZSBqb3VybmFsIGluc3RlYWQuICBPbiByZWNvdmVyeSwgdGhlIGpvdXJuYWwgd2lsbCBjb21wYWluIGFib3V0CisgKiB0aGUgam91cm5hbCBpbnN0ZWFkLiAgT24gcmVjb3ZlcnksIHRoZSBqb3VybmFsIHdpbGwgY29tcGxhaW4gYWJvdXQKICAqIHRoYXQgZXJyb3IgdW50aWwgd2UndmUgbm90ZWQgaXQgZG93biBhbmQgY2xlYXJlZCBpdC4KICAqLwogCkBAIC0zMzMsNyArMzMzLDcgQEAKIAkJCXNiLT5zX2lkKTsKIH0KIAotdm9pZCBleHQ0X2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAordm9pZCBfX2V4dDRfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqZnVuY3Rpb24sCiAJCWNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgYXJnczsKQEAgLTM0Nyw2ICszNDcsNDIgQEAKIAlleHQ0X2hhbmRsZV9lcnJvcihzYik7CiB9CiAKK3ZvaWQgZXh0NF9lcnJvcl9pbm9kZShjb25zdCBjaGFyICpmdW5jdGlvbiwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJICAgICAgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcmdzOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlwcmludGsoS0VSTl9DUklUICJFWFQ0LWZzIGVycm9yIChkZXZpY2UgJXMpOiAlczogaW5vZGUgIyVsdTogKGNvbW0gJXMpICIsCisJICAgICAgIGlub2RlLT5pX3NiLT5zX2lkLCBmdW5jdGlvbiwgaW5vZGUtPmlfaW5vLCBjdXJyZW50LT5jb21tKTsKKwl2cHJpbnRrKGZtdCwgYXJncyk7CisJcHJpbnRrKCJcbiIpOworCXZhX2VuZChhcmdzKTsKKworCWV4dDRfaGFuZGxlX2Vycm9yKGlub2RlLT5pX3NiKTsKK30KKwordm9pZCBleHQ0X2Vycm9yX2ZpbGUoY29uc3QgY2hhciAqZnVuY3Rpb24sIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJY2hhciBwYXRobmFtZVs4MF0sICpwYXRoOworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlwYXRoID0gZF9wYXRoKCYoZmlsZS0+Zl9wYXRoKSwgcGF0aG5hbWUsIHNpemVvZihwYXRobmFtZSkpOworCWlmICghcGF0aCkKKwkJcGF0aCA9ICIodW5rbm93bikiOworCXByaW50ayhLRVJOX0NSSVQKKwkgICAgICAgIkVYVDQtZnMgZXJyb3IgKGRldmljZSAlcyk6ICVzOiBpbm9kZSAjJWx1IChjb21tICVzIHBhdGggJXMpOiAiLAorCSAgICAgICBpbm9kZS0+aV9zYi0+c19pZCwgZnVuY3Rpb24sIGlub2RlLT5pX2lubywgY3VycmVudC0+Y29tbSwgcGF0aCk7CisJdnByaW50ayhmbXQsIGFyZ3MpOworCXByaW50aygiXG4iKTsKKwl2YV9lbmQoYXJncyk7CisKKwlleHQ0X2hhbmRsZV9lcnJvcihpbm9kZS0+aV9zYik7Cit9CisKIHN0YXRpYyBjb25zdCBjaGFyICpleHQ0X2RlY29kZV9lcnJvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgZXJybm8sCiAJCQkJICAgICBjaGFyIG5idWZbMTZdKQogewpAQCAtNDUwLDcgKzQ4Niw3IEBACiAJdmFfZW5kKGFyZ3MpOwogfQogCi12b2lkIGV4dDRfd2FybmluZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICpmdW5jdGlvbiwKK3ZvaWQgX19leHQ0X3dhcm5pbmcoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqZnVuY3Rpb24sCiAJCSAgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcmdzOwpAQCAtNTA3LDcgKzU0Myw3IEBACiAJaWYgKGxlMzJfdG9fY3B1KGVzLT5zX3Jldl9sZXZlbCkgPiBFWFQ0X0dPT0RfT0xEX1JFVikKIAkJcmV0dXJuOwogCi0JZXh0NF93YXJuaW5nKHNiLCBfX2Z1bmNfXywKKwlleHQ0X3dhcm5pbmcoc2IsCiAJCSAgICAgInVwZGF0aW5nIHRvIHJldiAlZCBiZWNhdXNlIG9mIG5ldyBmZWF0dXJlIGZsYWcsICIKIAkJICAgICAicnVubmluZyBlMmZzY2sgaXMgcmVjb21tZW5kZWQiLAogCQkgICAgIEVYVDRfRFlOQU1JQ19SRVYpOwpAQCAtNzA4LDcgKzc0NCw4IEBACiAjaWZkZWYgQ09ORklHX1FVT1RBCiAJZWktPmlfcmVzZXJ2ZWRfcXVvdGEgPSAwOwogI2VuZGlmCi0JSU5JVF9MSVNUX0hFQUQoJmVpLT5pX2Fpb19kaW9fY29tcGxldGVfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmVpLT5pX2NvbXBsZXRlZF9pb19saXN0KTsKKwlzcGluX2xvY2tfaW5pdCgmZWktPmlfY29tcGxldGVkX2lvX2xvY2spOwogCWVpLT5jdXJfYWlvX2RpbyA9IE5VTEw7CiAJZWktPmlfc3luY190aWQgPSAwOwogCWVpLT5pX2RhdGFzeW5jX3RpZCA9IDA7CkBAIC03NjEsNiArNzk4LDcgQEAKIAogc3RhdGljIHZvaWQgZXh0NF9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogeworCWRxdW90X2Ryb3AoaW5vZGUpOwogCWV4dDRfZGlzY2FyZF9wcmVhbGxvY2F0aW9ucyhpbm9kZSk7CiAJaWYgKEVYVDRfSk9VUk5BTChpbm9kZSkpCiAJCWpiZDJfam91cm5hbF9yZWxlYXNlX2piZF9pbm9kZShFWFQ0X1NCKGlub2RlLT5pX3NiKS0+c19qb3VybmFsLApAQCAtNzk2LDEwICs4MzQsMTAgQEAKIAlpZiAoc2JpLT5zX3FmX25hbWVzW0dSUFFVT1RBXSkKIAkJc2VxX3ByaW50ZihzZXEsICIsZ3JwanF1b3RhPSVzIiwgc2JpLT5zX3FmX25hbWVzW0dSUFFVT1RBXSk7CiAKLQlpZiAoc2JpLT5zX21vdW50X29wdCAmIEVYVDRfTU9VTlRfVVNSUVVPVEEpCisJaWYgKHRlc3Rfb3B0KHNiLCBVU1JRVU9UQSkpCiAJCXNlcV9wdXRzKHNlcSwgIix1c3JxdW90YSIpOwogCi0JaWYgKHNiaS0+c19tb3VudF9vcHQgJiBFWFQ0X01PVU5UX0dSUFFVT1RBKQorCWlmICh0ZXN0X29wdChzYiwgR1JQUVVPVEEpKQogCQlzZXFfcHV0cyhzZXEsICIsZ3JwcXVvdGEiKTsKICNlbmRpZgogfQpAQCAtOTI2LDYgKzk2NCw5IEBACiAJaWYgKHRlc3Rfb3B0KHNiLCBOT0xPQUQpKQogCQlzZXFfcHV0cyhzZXEsICIsbm9yZWNvdmVyeSIpOwogCisJaWYgKHRlc3Rfb3B0KHNiLCBESU9SRUFEX05PTE9DSykpCisJCXNlcV9wdXRzKHNlcSwgIixkaW9yZWFkX25vbG9jayIpOworCiAJZXh0NF9zaG93X3F1b3RhX29wdGlvbnMoc2VxLCBzYik7CiAKIAlyZXR1cm4gMDsKQEAgLTEwMTIsMTkgKzEwNTMsOSBAQAogCQkJCWNvbnN0IGNoYXIgKmRhdGEsIHNpemVfdCBsZW4sIGxvZmZfdCBvZmYpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRxdW90X29wZXJhdGlvbnMgZXh0NF9xdW90YV9vcGVyYXRpb25zID0gewotCS5pbml0aWFsaXplCT0gZHF1b3RfaW5pdGlhbGl6ZSwKLQkuZHJvcAkJPSBkcXVvdF9kcm9wLAotCS5hbGxvY19zcGFjZQk9IGRxdW90X2FsbG9jX3NwYWNlLAotCS5yZXNlcnZlX3NwYWNlCT0gZHF1b3RfcmVzZXJ2ZV9zcGFjZSwKLQkuY2xhaW1fc3BhY2UJPSBkcXVvdF9jbGFpbV9zcGFjZSwKLQkucmVsZWFzZV9yc3YJPSBkcXVvdF9yZWxlYXNlX3Jlc2VydmVkX3NwYWNlLAogI2lmZGVmIENPTkZJR19RVU9UQQogCS5nZXRfcmVzZXJ2ZWRfc3BhY2UgPSBleHQ0X2dldF9yZXNlcnZlZF9zcGFjZSwKICNlbmRpZgotCS5hbGxvY19pbm9kZQk9IGRxdW90X2FsbG9jX2lub2RlLAotCS5mcmVlX3NwYWNlCT0gZHF1b3RfZnJlZV9zcGFjZSwKLQkuZnJlZV9pbm9kZQk9IGRxdW90X2ZyZWVfaW5vZGUsCi0JLnRyYW5zZmVyCT0gZHF1b3RfdHJhbnNmZXIsCiAJLndyaXRlX2RxdW90CT0gZXh0NF93cml0ZV9kcXVvdCwKIAkuYWNxdWlyZV9kcXVvdAk9IGV4dDRfYWNxdWlyZV9kcXVvdCwKIAkucmVsZWFzZV9kcXVvdAk9IGV4dDRfcmVsZWFzZV9kcXVvdCwKQEAgLTExMDksNiArMTE0MCw3IEBACiAJT3B0X3N0cmlwZSwgT3B0X2RlbGFsbG9jLCBPcHRfbm9kZWxhbGxvYywKIAlPcHRfYmxvY2tfdmFsaWRpdHksIE9wdF9ub2Jsb2NrX3ZhbGlkaXR5LAogCU9wdF9pbm9kZV9yZWFkYWhlYWRfYmxrcywgT3B0X2pvdXJuYWxfaW9wcmlvLAorCU9wdF9kaW9yZWFkX25vbG9jaywgT3B0X2Rpb3JlYWRfbG9jaywKIAlPcHRfZGlzY2FyZCwgT3B0X25vZGlzY2FyZCwKIH07CiAKQEAgLTExNzYsNiArMTIwOCw4IEBACiAJe09wdF9hdXRvX2RhX2FsbG9jLCAiYXV0b19kYV9hbGxvYz0ldSJ9LAogCXtPcHRfYXV0b19kYV9hbGxvYywgImF1dG9fZGFfYWxsb2MifSwKIAl7T3B0X25vYXV0b19kYV9hbGxvYywgIm5vYXV0b19kYV9hbGxvYyJ9LAorCXtPcHRfZGlvcmVhZF9ub2xvY2ssICJkaW9yZWFkX25vbG9jayJ9LAorCXtPcHRfZGlvcmVhZF9sb2NrLCAiZGlvcmVhZF9sb2NrIn0sCiAJe09wdF9kaXNjYXJkLCAiZGlzY2FyZCJ9LAogCXtPcHRfbm9kaXNjYXJkLCAibm9kaXNjYXJkIn0sCiAJe09wdF9lcnIsIE5VTEx9LApAQCAtMTIwNSw2ICsxMjM5LDY2IEBACiB9CiAKICNkZWZpbmUgREVGQVVMVF9KT1VSTkFMX0lPUFJJTyAoSU9QUklPX1BSSU9fVkFMVUUoSU9QUklPX0NMQVNTX0JFLCAzKSkKK3N0YXRpYyBjaGFyIGRlcHJlY2F0ZWRfbXNnW10gPSAiTW91bnQgb3B0aW9uIFwiJXNcIiB3aWxsIGJlIHJlbW92ZWQgYnkgJXNcbiIKKwkiQ29udGFjdCBsaW51eC1leHQ0QHZnZXIua2VybmVsLm9yZyBpZiB5b3UgdGhpbmsgd2Ugc2hvdWxkIGtlZXAgaXQuXG4iOworCisjaWZkZWYgQ09ORklHX1FVT1RBCitzdGF0aWMgaW50IHNldF9xZl9uYW1lKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBxdHlwZSwgc3Vic3RyaW5nX3QgKmFyZ3MpCit7CisJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7CisJY2hhciAqcW5hbWU7CisKKwlpZiAoc2JfYW55X3F1b3RhX2xvYWRlZChzYikgJiYKKwkJIXNiaS0+c19xZl9uYW1lc1txdHlwZV0pIHsKKwkJZXh0NF9tc2coc2IsIEtFUk5fRVJSLAorCQkJIkNhbm5vdCBjaGFuZ2Ugam91cm5hbGVkICIKKwkJCSJxdW90YSBvcHRpb25zIHdoZW4gcXVvdGEgdHVybmVkIG9uIik7CisJCXJldHVybiAwOworCX0KKwlxbmFtZSA9IG1hdGNoX3N0cmR1cChhcmdzKTsKKwlpZiAoIXFuYW1lKSB7CisJCWV4dDRfbXNnKHNiLCBLRVJOX0VSUiwKKwkJCSJOb3QgZW5vdWdoIG1lbW9yeSBmb3Igc3RvcmluZyBxdW90YWZpbGUgbmFtZSIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKHNiaS0+c19xZl9uYW1lc1txdHlwZV0gJiYKKwkJc3RyY21wKHNiaS0+c19xZl9uYW1lc1txdHlwZV0sIHFuYW1lKSkgeworCQlleHQ0X21zZyhzYiwgS0VSTl9FUlIsCisJCQkiJXMgcXVvdGEgZmlsZSBhbHJlYWR5IHNwZWNpZmllZCIsIFFUWVBFMk5BTUUocXR5cGUpKTsKKwkJa2ZyZWUocW5hbWUpOworCQlyZXR1cm4gMDsKKwl9CisJc2JpLT5zX3FmX25hbWVzW3F0eXBlXSA9IHFuYW1lOworCWlmIChzdHJjaHIoc2JpLT5zX3FmX25hbWVzW3F0eXBlXSwgJy8nKSkgeworCQlleHQ0X21zZyhzYiwgS0VSTl9FUlIsCisJCQkicXVvdGFmaWxlIG11c3QgYmUgb24gZmlsZXN5c3RlbSByb290Iik7CisJCWtmcmVlKHNiaS0+c19xZl9uYW1lc1txdHlwZV0pOworCQlzYmktPnNfcWZfbmFtZXNbcXR5cGVdID0gTlVMTDsKKwkJcmV0dXJuIDA7CisJfQorCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgUVVPVEEpOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IGNsZWFyX3FmX25hbWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHF0eXBlKQoreworCisJc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gRVhUNF9TQihzYik7CisKKwlpZiAoc2JfYW55X3F1b3RhX2xvYWRlZChzYikgJiYKKwkJc2JpLT5zX3FmX25hbWVzW3F0eXBlXSkgeworCQlleHQ0X21zZyhzYiwgS0VSTl9FUlIsICJDYW5ub3QgY2hhbmdlIGpvdXJuYWxlZCBxdW90YSBvcHRpb25zIgorCQkJIiB3aGVuIHF1b3RhIHR1cm5lZCBvbiIpOworCQlyZXR1cm4gMDsKKwl9CisJLyoKKwkgKiBUaGUgc3BhY2Ugd2lsbCBiZSByZWxlYXNlZCBsYXRlciB3aGVuIGFsbCBvcHRpb25zIGFyZSBjb25maXJtZWQKKwkgKiB0byBiZSBjb3JyZWN0CisJICovCisJc2JpLT5zX3FmX25hbWVzW3F0eXBlXSA9IE5VTEw7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYKIAogc3RhdGljIGludCBwYXJzZV9vcHRpb25zKGNoYXIgKm9wdGlvbnMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkgdW5zaWduZWQgbG9uZyAqam91cm5hbF9kZXZudW0sCkBAIC0xMjE3LDggKzEzMTEsNyBAQAogCWludCBkYXRhX29wdCA9IDA7CiAJaW50IG9wdGlvbjsKICNpZmRlZiBDT05GSUdfUVVPVEEKLQlpbnQgcXR5cGUsIHFmbXQ7Ci0JY2hhciAqcW5hbWU7CisJaW50IHFmbXQ7CiAjZW5kaWYKIAogCWlmICghb3B0aW9ucykKQEAgLTEyMjksMTkgKzEzMjIsMzEgQEAKIAkJaWYgKCEqcCkKIAkJCWNvbnRpbnVlOwogCisJCS8qCisJCSAqIEluaXRpYWxpemUgYXJncyBzdHJ1Y3Qgc28gd2Uga25vdyB3aGV0aGVyIGFyZyB3YXMKKwkJICogZm91bmQ7IHNvbWUgb3B0aW9ucyB0YWtlIG9wdGlvbmFsIGFyZ3VtZW50cy4KKwkJICovCisJCWFyZ3NbMF0udG8gPSBhcmdzWzBdLmZyb20gPSAwOwogCQl0b2tlbiA9IG1hdGNoX3Rva2VuKHAsIHRva2VucywgYXJncyk7CiAJCXN3aXRjaCAodG9rZW4pIHsKIAkJY2FzZSBPcHRfYnNkX2RmOgorCQkJZXh0NF9tc2coc2IsIEtFUk5fV0FSTklORywgZGVwcmVjYXRlZF9tc2csIHAsICIyLjYuMzgiKTsKIAkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBNSU5JWF9ERik7CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbWluaXhfZGY6CisJCQlleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLCBkZXByZWNhdGVkX21zZywgcCwgIjIuNi4zOCIpOwogCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBNSU5JWF9ERik7CisKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9ncnBpZDoKKwkJCWV4dDRfbXNnKHNiLCBLRVJOX1dBUk5JTkcsIGRlcHJlY2F0ZWRfbXNnLCBwLCAiMi42LjM4Iik7CiAJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEdSUElEKTsKKwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X25vZ3JwaWQ6CisJCQlleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLCBkZXByZWNhdGVkX21zZywgcCwgIjIuNi4zOCIpOwogCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIEdSUElEKTsKKwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X3Jlc3VpZDoKIAkJCWlmIChtYXRjaF9pbnQoJmFyZ3NbMF0sICZvcHRpb24pKQpAQCAtMTM3OCwxNCArMTQ4MywxMyBAQAogCQkJZGF0YV9vcHQgPSBFWFQ0X01PVU5UX1dSSVRFQkFDS19EQVRBOwogCQlkYXRhY2hlY2s6CiAJCQlpZiAoaXNfcmVtb3VudCkgewotCQkJCWlmICgoc2JpLT5zX21vdW50X29wdCAmIEVYVDRfTU9VTlRfREFUQV9GTEFHUykKLQkJCQkJCSE9IGRhdGFfb3B0KSB7CisJCQkJaWYgKHRlc3Rfb3B0KHNiLCBEQVRBX0ZMQUdTKSAhPSBkYXRhX29wdCkgewogCQkJCQlleHQ0X21zZyhzYiwgS0VSTl9FUlIsCiAJCQkJCQkiQ2Fubm90IGNoYW5nZSBkYXRhIG1vZGUgb24gcmVtb3VudCIpOwogCQkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQl9IGVsc2UgewotCQkJCXNiaS0+c19tb3VudF9vcHQgJj0gfkVYVDRfTU9VTlRfREFUQV9GTEFHUzsKKwkJCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgREFUQV9GTEFHUyk7CiAJCQkJc2JpLT5zX21vdW50X29wdCB8PSBkYXRhX29wdDsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMTM5Nyw2MyArMTUwMSwyMiBAQAogCQkJYnJlYWs7CiAjaWZkZWYgQ09ORklHX1FVT1RBCiAJCWNhc2UgT3B0X3VzcmpxdW90YToKLQkJCXF0eXBlID0gVVNSUVVPVEE7Ci0JCQlnb3RvIHNldF9xZl9uYW1lOworCQkJaWYgKCFzZXRfcWZfbmFtZShzYiwgVVNSUVVPVEEsICZhcmdzWzBdKSkKKwkJCQlyZXR1cm4gMDsKKwkJCWJyZWFrOwogCQljYXNlIE9wdF9ncnBqcXVvdGE6Ci0JCQlxdHlwZSA9IEdSUFFVT1RBOwotc2V0X3FmX25hbWU6Ci0JCQlpZiAoc2JfYW55X3F1b3RhX2xvYWRlZChzYikgJiYKLQkJCSAgICAhc2JpLT5zX3FmX25hbWVzW3F0eXBlXSkgewotCQkJCWV4dDRfbXNnKHNiLCBLRVJOX0VSUiwKLQkJCQkgICAgICAgIkNhbm5vdCBjaGFuZ2Ugam91cm5hbGVkICIKLQkJCQkgICAgICAgInF1b3RhIG9wdGlvbnMgd2hlbiBxdW90YSB0dXJuZWQgb24iKTsKKwkJCWlmICghc2V0X3FmX25hbWUoc2IsIEdSUFFVT1RBLCAmYXJnc1swXSkpCiAJCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlxbmFtZSA9IG1hdGNoX3N0cmR1cCgmYXJnc1swXSk7Ci0JCQlpZiAoIXFuYW1lKSB7Ci0JCQkJZXh0NF9tc2coc2IsIEtFUk5fRVJSLAotCQkJCQkiTm90IGVub3VnaCBtZW1vcnkgZm9yICIKLQkJCQkJInN0b3JpbmcgcXVvdGFmaWxlIG5hbWUiKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCWlmIChzYmktPnNfcWZfbmFtZXNbcXR5cGVdICYmCi0JCQkgICAgc3RyY21wKHNiaS0+c19xZl9uYW1lc1txdHlwZV0sIHFuYW1lKSkgewotCQkJCWV4dDRfbXNnKHNiLCBLRVJOX0VSUiwKLQkJCQkJIiVzIHF1b3RhIGZpbGUgYWxyZWFkeSAiCi0JCQkJCSJzcGVjaWZpZWQiLCBRVFlQRTJOQU1FKHF0eXBlKSk7Ci0JCQkJa2ZyZWUocW5hbWUpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQkJc2JpLT5zX3FmX25hbWVzW3F0eXBlXSA9IHFuYW1lOwotCQkJaWYgKHN0cmNocihzYmktPnNfcWZfbmFtZXNbcXR5cGVdLCAnLycpKSB7Ci0JCQkJZXh0NF9tc2coc2IsIEtFUk5fRVJSLAotCQkJCQkicXVvdGFmaWxlIG11c3QgYmUgb24gIgotCQkJCQkiZmlsZXN5c3RlbSByb290Iik7Ci0JCQkJa2ZyZWUoc2JpLT5zX3FmX25hbWVzW3F0eXBlXSk7Ci0JCQkJc2JpLT5zX3FmX25hbWVzW3F0eXBlXSA9IE5VTEw7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIFFVT1RBKTsKIAkJCWJyZWFrOwogCQljYXNlIE9wdF9vZmZ1c3JqcXVvdGE6Ci0JCQlxdHlwZSA9IFVTUlFVT1RBOwotCQkJZ290byBjbGVhcl9xZl9uYW1lOwotCQljYXNlIE9wdF9vZmZncnBqcXVvdGE6Ci0JCQlxdHlwZSA9IEdSUFFVT1RBOwotY2xlYXJfcWZfbmFtZToKLQkJCWlmIChzYl9hbnlfcXVvdGFfbG9hZGVkKHNiKSAmJgotCQkJICAgIHNiaS0+c19xZl9uYW1lc1txdHlwZV0pIHsKLQkJCQlleHQ0X21zZyhzYiwgS0VSTl9FUlIsICJDYW5ub3QgY2hhbmdlICIKLQkJCQkJImpvdXJuYWxlZCBxdW90YSBvcHRpb25zIHdoZW4gIgotCQkJCQkicXVvdGEgdHVybmVkIG9uIik7CisJCQlpZiAoIWNsZWFyX3FmX25hbWUoc2IsIFVTUlFVT1RBKSkKIAkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCS8qCi0JCQkgKiBUaGUgc3BhY2Ugd2lsbCBiZSByZWxlYXNlZCBsYXRlciB3aGVuIGFsbCBvcHRpb25zCi0JCQkgKiBhcmUgY29uZmlybWVkIHRvIGJlIGNvcnJlY3QKLQkJCSAqLwotCQkJc2JpLT5zX3FmX25hbWVzW3F0eXBlXSA9IE5VTEw7CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfb2ZmZ3JwanF1b3RhOgorCQkJaWYgKCFjbGVhcl9xZl9uYW1lKHNiLCBHUlBRVU9UQSkpCisJCQkJcmV0dXJuIDA7CisJCQlicmVhazsKKwogCQljYXNlIE9wdF9qcWZtdF92ZnNvbGQ6CiAJCQlxZm10ID0gUUZNVF9WRlNfT0xEOwogCQkJZ290byBzZXRfcWZfZm9ybWF0OwpAQCAtMTUxOCwxMCArMTU4MSwxMSBAQAogCQkJY2xlYXJfb3B0KHNiaS0+c19tb3VudF9vcHQsIEJBUlJJRVIpOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2JhcnJpZXI6Ci0JCQlpZiAobWF0Y2hfaW50KCZhcmdzWzBdLCAmb3B0aW9uKSkgewotCQkJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgQkFSUklFUik7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlpZiAoYXJnc1swXS5mcm9tKSB7CisJCQkJaWYgKG1hdGNoX2ludCgmYXJnc1swXSwgJm9wdGlvbikpCisJCQkJCXJldHVybiAwOworCQkJfSBlbHNlCisJCQkJb3B0aW9uID0gMTsJLyogTm8gYXJndW1lbnQsIGRlZmF1bHQgdG8gMSAqLwogCQkJaWYgKG9wdGlvbikKIAkJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEJBUlJJRVIpOwogCQkJZWxzZQpAQCAtMTU5NCwxMCArMTY1OCwxMSBAQAogCQkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LE5PX0FVVE9fREFfQUxMT0MpOwogCQkJYnJlYWs7CiAJCWNhc2UgT3B0X2F1dG9fZGFfYWxsb2M6Ci0JCQlpZiAobWF0Y2hfaW50KCZhcmdzWzBdLCAmb3B0aW9uKSkgewotCQkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBOT19BVVRPX0RBX0FMTE9DKTsKLQkJCQlicmVhazsKLQkJCX0KKwkJCWlmIChhcmdzWzBdLmZyb20pIHsKKwkJCQlpZiAobWF0Y2hfaW50KCZhcmdzWzBdLCAmb3B0aW9uKSkKKwkJCQkJcmV0dXJuIDA7CisJCQl9IGVsc2UKKwkJCQlvcHRpb24gPSAxOwkvKiBObyBhcmd1bWVudCwgZGVmYXVsdCB0byAxICovCiAJCQlpZiAob3B0aW9uKQogCQkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBOT19BVVRPX0RBX0FMTE9DKTsKIAkJCWVsc2UKQEAgLTE2MDksNiArMTY3NCwxMiBAQAogCQljYXNlIE9wdF9ub2Rpc2NhcmQ6CiAJCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgRElTQ0FSRCk7CiAJCQlicmVhazsKKwkJY2FzZSBPcHRfZGlvcmVhZF9ub2xvY2s6CisJCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIERJT1JFQURfTk9MT0NLKTsKKwkJCWJyZWFrOworCQljYXNlIE9wdF9kaW9yZWFkX2xvY2s6CisJCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgRElPUkVBRF9OT0xPQ0spOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlleHQ0X21zZyhzYiwgS0VSTl9FUlIsCiAJCQkgICAgICAgIlVucmVjb2duaXplZCBtb3VudCBvcHRpb24gXCIlc1wiICIKQEAgLTE2MTgsMTggKzE2ODksMTMgQEAKIAl9CiAjaWZkZWYgQ09ORklHX1FVT1RBCiAJaWYgKHNiaS0+c19xZl9uYW1lc1tVU1JRVU9UQV0gfHwgc2JpLT5zX3FmX25hbWVzW0dSUFFVT1RBXSkgewotCQlpZiAoKHNiaS0+c19tb3VudF9vcHQgJiBFWFQ0X01PVU5UX1VTUlFVT1RBKSAmJgotCQkgICAgIHNiaS0+c19xZl9uYW1lc1tVU1JRVU9UQV0pCisJCWlmICh0ZXN0X29wdChzYiwgVVNSUVVPVEEpICYmIHNiaS0+c19xZl9uYW1lc1tVU1JRVU9UQV0pCiAJCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgVVNSUVVPVEEpOwogCi0JCWlmICgoc2JpLT5zX21vdW50X29wdCAmIEVYVDRfTU9VTlRfR1JQUVVPVEEpICYmCi0JCSAgICAgc2JpLT5zX3FmX25hbWVzW0dSUFFVT1RBXSkKKwkJaWYgKHRlc3Rfb3B0KHNiLCBHUlBRVU9UQSkgJiYgc2JpLT5zX3FmX25hbWVzW0dSUFFVT1RBXSkKIAkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBHUlBRVU9UQSk7CiAKLQkJaWYgKChzYmktPnNfcWZfbmFtZXNbVVNSUVVPVEFdICYmCi0JCQkJKHNiaS0+c19tb3VudF9vcHQgJiBFWFQ0X01PVU5UX0dSUFFVT1RBKSkgfHwKLQkJICAgIChzYmktPnNfcWZfbmFtZXNbR1JQUVVPVEFdICYmCi0JCQkJKHNiaS0+c19tb3VudF9vcHQgJiBFWFQ0X01PVU5UX1VTUlFVT1RBKSkpIHsKKwkJaWYgKHRlc3Rfb3B0KHNiLCBHUlBRVU9UQSkgfHwgdGVzdF9vcHQoc2IsIFVTUlFVT1RBKSkgewogCQkJZXh0NF9tc2coc2IsIEtFUk5fRVJSLCAib2xkIGFuZCBuZXcgcXVvdGEgIgogCQkJCQkiZm9ybWF0IG1peGluZyIpOwogCQkJcmV0dXJuIDA7CkBAIC0xOTM5LDcgKzIwMDUsNyBAQAogCQl9CiAKIAkJbGlzdF9hZGQoJkVYVDRfSShpbm9kZSktPmlfb3JwaGFuLCAmRVhUNF9TQihzYiktPnNfb3JwaGFuKTsKLQkJdmZzX2RxX2luaXQoaW5vZGUpOworCQlkcXVvdF9pbml0aWFsaXplKGlub2RlKTsKIAkJaWYgKGlub2RlLT5pX25saW5rKSB7CiAJCQlleHQ0X21zZyhzYiwgS0VSTl9ERUJVRywKIAkJCQkiJXM6IHRydW5jYXRpbmcgaW5vZGUgJWx1IHRvICVsbGQgYnl0ZXMiLApAQCAtMjI5Miw3ICsyMzU4LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBleHQ0X2F0dHJfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzeXNmc19vcHMgZXh0NF9hdHRyX29wcyA9IHsKIAkuc2hvdwk9IGV4dDRfYXR0cl9zaG93LAogCS5zdG9yZQk9IGV4dDRfYXR0cl9zdG9yZSwKIH07CkBAIC0yNDMyLDggKzI0OTgsMTEgQEAKIAlkZWZfbW91bnRfb3B0cyA9IGxlMzJfdG9fY3B1KGVzLT5zX2RlZmF1bHRfbW91bnRfb3B0cyk7CiAJaWYgKGRlZl9tb3VudF9vcHRzICYgRVhUNF9ERUZNX0RFQlVHKQogCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIERFQlVHKTsKLQlpZiAoZGVmX21vdW50X29wdHMgJiBFWFQ0X0RFRk1fQlNER1JPVVBTKQorCWlmIChkZWZfbW91bnRfb3B0cyAmIEVYVDRfREVGTV9CU0RHUk9VUFMpIHsKKwkJZXh0NF9tc2coc2IsIEtFUk5fV0FSTklORywgZGVwcmVjYXRlZF9tc2csICJic2Rncm91cHMiLAorCQkJIjIuNi4zOCIpOwogCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIEdSUElEKTsKKwl9CiAJaWYgKGRlZl9tb3VudF9vcHRzICYgRVhUNF9ERUZNX1VJRDE2KQogCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIE5PX1VJRDMyKTsKICNpZmRlZiBDT05GSUdfRVhUNF9GU19YQVRUUgpAQCAtMjQ0NSwxMSArMjUxNCwxMSBAQAogCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIFBPU0lYX0FDTCk7CiAjZW5kaWYKIAlpZiAoKGRlZl9tb3VudF9vcHRzICYgRVhUNF9ERUZNX0pNT0RFKSA9PSBFWFQ0X0RFRk1fSk1PREVfREFUQSkKLQkJc2JpLT5zX21vdW50X29wdCB8PSBFWFQ0X01PVU5UX0pPVVJOQUxfREFUQTsKKwkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBKT1VSTkFMX0RBVEEpOwogCWVsc2UgaWYgKChkZWZfbW91bnRfb3B0cyAmIEVYVDRfREVGTV9KTU9ERSkgPT0gRVhUNF9ERUZNX0pNT0RFX09SREVSRUQpCi0JCXNiaS0+c19tb3VudF9vcHQgfD0gRVhUNF9NT1VOVF9PUkRFUkVEX0RBVEE7CisJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgT1JERVJFRF9EQVRBKTsKIAllbHNlIGlmICgoZGVmX21vdW50X29wdHMgJiBFWFQ0X0RFRk1fSk1PREUpID09IEVYVDRfREVGTV9KTU9ERV9XQkFDSykKLQkJc2JpLT5zX21vdW50X29wdCB8PSBFWFQ0X01PVU5UX1dSSVRFQkFDS19EQVRBOworCQlzZXRfb3B0KHNiaS0+c19tb3VudF9vcHQsIFdSSVRFQkFDS19EQVRBKTsKIAogCWlmIChsZTE2X3RvX2NwdShzYmktPnNfZXMtPnNfZXJyb3JzKSA9PSBFWFQ0X0VSUk9SU19QQU5JQykKIAkJc2V0X29wdChzYmktPnNfbW91bnRfb3B0LCBFUlJPUlNfUEFOSUMpOwpAQCAtMjQ3Nyw3ICsyNTQ2LDcgQEAKIAkJZ290byBmYWlsZWRfbW91bnQ7CiAKIAlzYi0+c19mbGFncyA9IChzYi0+c19mbGFncyAmIH5NU19QT1NJWEFDTCkgfAotCQkoKHNiaS0+c19tb3VudF9vcHQgJiBFWFQ0X01PVU5UX1BPU0lYX0FDTCkgPyBNU19QT1NJWEFDTCA6IDApOworCQkodGVzdF9vcHQoc2IsIFBPU0lYX0FDTCkgPyBNU19QT1NJWEFDTCA6IDApOwogCiAJaWYgKGxlMzJfdG9fY3B1KGVzLT5zX3Jldl9sZXZlbCkgPT0gRVhUNF9HT09EX09MRF9SRVYgJiYKIAkgICAgKEVYVDRfSEFTX0NPTVBBVF9GRUFUVVJFKHNiLCB+MFUpIHx8CkBAIC0yNzY2LDcgKzI4MzUsNyBAQAogCSAgICAgIEVYVDRfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoc2IsIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9SRUNPVkVSKSkgewogCQlleHQ0X21zZyhzYiwgS0VSTl9FUlIsICJyZXF1aXJlZCBqb3VybmFsIHJlY292ZXJ5ICIKIAkJICAgICAgICJzdXBwcmVzc2VkIGFuZCBub3QgbW91bnRlZCByZWFkLW9ubHkiKTsKLQkJZ290byBmYWlsZWRfbW91bnQ0OworCQlnb3RvIGZhaWxlZF9tb3VudF93cTsKIAl9IGVsc2UgewogCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgREFUQV9GTEFHUyk7CiAJCXNldF9vcHQoc2JpLT5zX21vdW50X29wdCwgV1JJVEVCQUNLX0RBVEEpOwpAQCAtMjc3OSw3ICsyODQ4LDcgQEAKIAkgICAgIWpiZDJfam91cm5hbF9zZXRfZmVhdHVyZXMoRVhUNF9TQihzYiktPnNfam91cm5hbCwgMCwgMCwKIAkJCQkgICAgICAgSkJEMl9GRUFUVVJFX0lOQ09NUEFUXzY0QklUKSkgewogCQlleHQ0X21zZyhzYiwgS0VSTl9FUlIsICJGYWlsZWQgdG8gc2V0IDY0LWJpdCBqb3VybmFsIGZlYXR1cmUiKTsKLQkJZ290byBmYWlsZWRfbW91bnQ0OworCQlnb3RvIGZhaWxlZF9tb3VudF93cTsKIAl9CiAKIAlpZiAodGVzdF9vcHQoc2IsIEpPVVJOQUxfQVNZTkNfQ09NTUlUKSkgewpAQCAtMjgxOCw3ICsyODg3LDcgQEAKIAkJICAgIChzYmktPnNfam91cm5hbCwgMCwgMCwgSkJEMl9GRUFUVVJFX0lOQ09NUEFUX1JFVk9LRSkpIHsKIAkJCWV4dDRfbXNnKHNiLCBLRVJOX0VSUiwgIkpvdXJuYWwgZG9lcyBub3Qgc3VwcG9ydCAiCiAJCQkgICAgICAgInJlcXVlc3RlZCBkYXRhIGpvdXJuYWxpbmcgbW9kZSIpOwotCQkJZ290byBmYWlsZWRfbW91bnQ0OworCQkJZ290byBmYWlsZWRfbW91bnRfd3E7CiAJCX0KIAlkZWZhdWx0OgogCQlicmVhazsKQEAgLTI4MjYsMTMgKzI4OTUsMTcgQEAKIAlzZXRfdGFza19pb3ByaW8oc2JpLT5zX2pvdXJuYWwtPmpfdGFzaywgam91cm5hbF9pb3ByaW8pOwogCiBub19qb3VybmFsOgotCiAJaWYgKHRlc3Rfb3B0KHNiLCBOT0JIKSkgewogCQlpZiAoISh0ZXN0X29wdChzYiwgREFUQV9GTEFHUykgPT0gRVhUNF9NT1VOVF9XUklURUJBQ0tfREFUQSkpIHsKIAkJCWV4dDRfbXNnKHNiLCBLRVJOX1dBUk5JTkcsICJJZ25vcmluZyBub2JoIG9wdGlvbiAtICIKIAkJCQkiaXRzIHN1cHBvcnRlZCBvbmx5IHdpdGggd3JpdGViYWNrIG1vZGUiKTsKIAkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBOT0JIKTsKIAkJfQorCQlpZiAodGVzdF9vcHQoc2IsIERJT1JFQURfTk9MT0NLKSkgeworCQkJZXh0NF9tc2coc2IsIEtFUk5fV0FSTklORywgImRpb3JlYWRfbm9sb2NrIG9wdGlvbiBpcyAiCisJCQkJIm5vdCBzdXBwb3J0ZWQgd2l0aCBub2JoIG1vZGUiKTsKKwkJCWdvdG8gZmFpbGVkX21vdW50X3dxOworCQl9CiAJfQogCUVYVDRfU0Ioc2IpLT5kaW9fdW53cml0dGVuX3dxID0gY3JlYXRlX3dvcmtxdWV1ZSgiZXh0NC1kaW8tdW53cml0dGVuIik7CiAJaWYgKCFFWFQ0X1NCKHNiKS0+ZGlvX3Vud3JpdHRlbl93cSkgewpAQCAtMjg5Nyw2ICsyOTcwLDE4IEBACiAJCQkgInJlcXVlc3RlZCBkYXRhIGpvdXJuYWxpbmcgbW9kZSIpOwogCQljbGVhcl9vcHQoc2JpLT5zX21vdW50X29wdCwgREVMQUxMT0MpOwogCX0KKwlpZiAodGVzdF9vcHQoc2IsIERJT1JFQURfTk9MT0NLKSkgeworCQlpZiAodGVzdF9vcHQoc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfSk9VUk5BTF9EQVRBKSB7CisJCQlleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLCAiSWdub3JpbmcgZGlvcmVhZF9ub2xvY2sgIgorCQkJCSJvcHRpb24gLSByZXF1ZXN0ZWQgZGF0YSBqb3VybmFsaW5nIG1vZGUiKTsKKwkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBESU9SRUFEX05PTE9DSyk7CisJCX0KKwkJaWYgKHNiLT5zX2Jsb2Nrc2l6ZSA8IFBBR0VfU0laRSkgeworCQkJZXh0NF9tc2coc2IsIEtFUk5fV0FSTklORywgIklnbm9yaW5nIGRpb3JlYWRfbm9sb2NrICIKKwkJCQkib3B0aW9uIC0gYmxvY2sgc2l6ZSBpcyB0b28gc21hbGwiKTsKKwkJCWNsZWFyX29wdChzYmktPnNfbW91bnRfb3B0LCBESU9SRUFEX05PTE9DSyk7CisJCX0KKwl9CiAKIAllcnIgPSBleHQ0X3NldHVwX3N5c3RlbV96b25lKHNiKTsKIAlpZiAoZXJyKSB7CkBAIC0zMzYwLDEwICszNDQ1LDkgQEAKIAkJY2hhciBuYnVmWzE2XTsKIAogCQllcnJzdHIgPSBleHQ0X2RlY29kZV9lcnJvcihzYiwgal9lcnJubywgbmJ1Zik7Ci0JCWV4dDRfd2FybmluZyhzYiwgX19mdW5jX18sICJGaWxlc3lzdGVtIGVycm9yIHJlY29yZGVkICIKKwkJZXh0NF93YXJuaW5nKHNiLCAiRmlsZXN5c3RlbSBlcnJvciByZWNvcmRlZCAiCiAJCQkgICAgICJmcm9tIHByZXZpb3VzIG1vdW50OiAlcyIsIGVycnN0cik7Ci0JCWV4dDRfd2FybmluZyhzYiwgX19mdW5jX18sICJNYXJraW5nIGZzIGluIG5lZWQgb2YgIgotCQkJICAgICAiZmlsZXN5c3RlbSBjaGVjay4iKTsKKwkJZXh0NF93YXJuaW5nKHNiLCAiTWFya2luZyBmcyBpbiBuZWVkIG9mIGZpbGVzeXN0ZW0gY2hlY2suIik7CiAKIAkJRVhUNF9TQihzYiktPnNfbW91bnRfc3RhdGUgfD0gRVhUNF9FUlJPUl9GUzsKIAkJZXMtPnNfc3RhdGUgfD0gY3B1X3RvX2xlMTYoRVhUNF9FUlJPUl9GUyk7CkBAIC0zNTE0LDcgKzM1OTgsNyBAQAogCQlleHQ0X2Fib3J0KHNiLCBfX2Z1bmNfXywgIkFib3J0IGZvcmNlZCBieSB1c2VyIik7CiAKIAlzYi0+c19mbGFncyA9IChzYi0+c19mbGFncyAmIH5NU19QT1NJWEFDTCkgfAotCQkoKHNiaS0+c19tb3VudF9vcHQgJiBFWFQ0X01PVU5UX1BPU0lYX0FDTCkgPyBNU19QT1NJWEFDTCA6IDApOworCQkodGVzdF9vcHQoc2IsIFBPU0lYX0FDTCkgPyBNU19QT1NJWEFDTCA6IDApOwogCiAJZXMgPSBzYmktPnNfZXM7CiAKQEAgLTM3MDgsNyArMzc5Miw3IEBACiAgKiBQcm9jZXNzIDEgICAgICAgICAgICAgICAgICAgICAgICAgUHJvY2VzcyAyCiAgKiBleHQ0X2NyZWF0ZSgpICAgICAgICAgICAgICAgICAgICAgcXVvdGFfc3luYygpCiAgKiAgIGpiZDJfam91cm5hbF9zdGFydCgpICAgICAgICAgICAgICAgICAgd3JpdGVfZHF1b3QoKQotICogICB2ZnNfZHFfaW5pdCgpICAgICAgICAgICAgICAgICAgICAgICAgIGRvd24oZHFpb19tdXRleCkKKyAqICAgZHF1b3RfaW5pdGlhbGl6ZSgpICAgICAgICAgICAgICAgICAgICAgICAgIGRvd24oZHFpb19tdXRleCkKICAqICAgICBkb3duKGRxaW9fbXV0ZXgpICAgICAgICAgICAgICAgICAgICBqYmQyX2pvdXJuYWxfc3RhcnQoKQogICoKICAqLwpAQCAtMzkxNyw5ICs0MDAxLDcgQEAKIAlleHQ0X2xibGtfdCBibGsgPSBvZmYgPj4gRVhUNF9CTE9DS19TSVpFX0JJVFMoc2IpOwogCWludCBlcnIgPSAwOwogCWludCBvZmZzZXQgPSBvZmYgJiAoc2ItPnNfYmxvY2tzaXplIC0gMSk7Ci0JaW50IHRvY29weTsKIAlpbnQgam91cm5hbF9xdW90YSA9IEVYVDRfU0Ioc2IpLT5zX3FmX25hbWVzW3R5cGVdICE9IE5VTEw7Ci0Jc2l6ZV90IHRvd3JpdGUgPSBsZW47CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAloYW5kbGVfdCAqaGFuZGxlID0gam91cm5hbF9jdXJyZW50X2hhbmRsZSgpOwogCkBAIC0zOTI5LDUyICs0MDExLDUzIEBACiAJCQkodW5zaWduZWQgbG9uZyBsb25nKW9mZiwgKHVuc2lnbmVkIGxvbmcgbG9uZylsZW4pOwogCQlyZXR1cm4gLUVJTzsKIAl9Ci0JbXV0ZXhfbG9ja19uZXN0ZWQoJmlub2RlLT5pX211dGV4LCBJX01VVEVYX1FVT1RBKTsKLQl3aGlsZSAodG93cml0ZSA+IDApIHsKLQkJdG9jb3B5ID0gc2ItPnNfYmxvY2tzaXplIC0gb2Zmc2V0IDwgdG93cml0ZSA/Ci0JCQkJc2ItPnNfYmxvY2tzaXplIC0gb2Zmc2V0IDogdG93cml0ZTsKLQkJYmggPSBleHQ0X2JyZWFkKGhhbmRsZSwgaW5vZGUsIGJsaywgMSwgJmVycik7Ci0JCWlmICghYmgpCi0JCQlnb3RvIG91dDsKLQkJaWYgKGpvdXJuYWxfcXVvdGEpIHsKLQkJCWVyciA9IGV4dDRfam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZSwgYmgpOwotCQkJaWYgKGVycikgewotCQkJCWJyZWxzZShiaCk7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0KLQkJbG9ja19idWZmZXIoYmgpOwotCQltZW1jcHkoYmgtPmJfZGF0YStvZmZzZXQsIGRhdGEsIHRvY29weSk7Ci0JCWZsdXNoX2RjYWNoZV9wYWdlKGJoLT5iX3BhZ2UpOwotCQl1bmxvY2tfYnVmZmVyKGJoKTsKLQkJaWYgKGpvdXJuYWxfcXVvdGEpCi0JCQllcnIgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIE5VTEwsIGJoKTsKLQkJZWxzZSB7Ci0JCQkvKiBBbHdheXMgZG8gYXQgbGVhc3Qgb3JkZXJlZCB3cml0ZXMgZm9yIHF1b3RhcyAqLwotCQkJZXJyID0gZXh0NF9qYmQyX2ZpbGVfaW5vZGUoaGFuZGxlLCBpbm9kZSk7Ci0JCQltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7Ci0JCX0KLQkJYnJlbHNlKGJoKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCQlvZmZzZXQgPSAwOwotCQl0b3dyaXRlIC09IHRvY29weTsKLQkJZGF0YSArPSB0b2NvcHk7Ci0JCWJsaysrOworCS8qCisJICogU2luY2Ugd2UgYWNjb3VudCBvbmx5IG9uZSBkYXRhIGJsb2NrIGluIHRyYW5zYWN0aW9uIGNyZWRpdHMsCisJICogdGhlbiBpdCBpcyBpbXBvc3NpYmxlIHRvIGNyb3NzIGEgYmxvY2sgYm91bmRhcnkuCisJICovCisJaWYgKHNiLT5zX2Jsb2Nrc2l6ZSAtIG9mZnNldCA8IGxlbikgeworCQlleHQ0X21zZyhzYiwgS0VSTl9XQVJOSU5HLCAiUXVvdGEgd3JpdGUgKG9mZj0lbGx1LCBsZW49JWxsdSkiCisJCQkiIGNhbmNlbGxlZCBiZWNhdXNlIG5vdCBibG9jayBhbGlnbmVkIiwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpb2ZmLCAodW5zaWduZWQgbG9uZyBsb25nKWxlbik7CisJCXJldHVybiAtRUlPOwogCX0KKworCW11dGV4X2xvY2tfbmVzdGVkKCZpbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9RVU9UQSk7CisJYmggPSBleHQ0X2JyZWFkKGhhbmRsZSwgaW5vZGUsIGJsaywgMSwgJmVycik7CisJaWYgKCFiaCkKKwkJZ290byBvdXQ7CisJaWYgKGpvdXJuYWxfcXVvdGEpIHsKKwkJZXJyID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLCBiaCk7CisJCWlmIChlcnIpIHsKKwkJCWJyZWxzZShiaCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlsb2NrX2J1ZmZlcihiaCk7CisJbWVtY3B5KGJoLT5iX2RhdGErb2Zmc2V0LCBkYXRhLCBsZW4pOworCWZsdXNoX2RjYWNoZV9wYWdlKGJoLT5iX3BhZ2UpOworCXVubG9ja19idWZmZXIoYmgpOworCWlmIChqb3VybmFsX3F1b3RhKQorCQllcnIgPSBleHQ0X2hhbmRsZV9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIE5VTEwsIGJoKTsKKwllbHNlIHsKKwkJLyogQWx3YXlzIGRvIGF0IGxlYXN0IG9yZGVyZWQgd3JpdGVzIGZvciBxdW90YXMgKi8KKwkJZXJyID0gZXh0NF9qYmQyX2ZpbGVfaW5vZGUoaGFuZGxlLCBpbm9kZSk7CisJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKKwl9CisJYnJlbHNlKGJoKTsKIG91dDoKLQlpZiAobGVuID09IHRvd3JpdGUpIHsKKwlpZiAoZXJyKSB7CiAJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCQlyZXR1cm4gZXJyOwogCX0KLQlpZiAoaW5vZGUtPmlfc2l6ZSA8IG9mZitsZW4tdG93cml0ZSkgewotCQlpX3NpemVfd3JpdGUoaW5vZGUsIG9mZitsZW4tdG93cml0ZSk7CisJaWYgKGlub2RlLT5pX3NpemUgPCBvZmYgKyBsZW4pIHsKKwkJaV9zaXplX3dyaXRlKGlub2RlLCBvZmYgKyBsZW4pOwogCQlFWFQ0X0koaW5vZGUpLT5pX2Rpc2tzaXplID0gaW5vZGUtPmlfc2l6ZTsKIAl9CiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAlleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JcmV0dXJuIGxlbiAtIHRvd3JpdGU7CisJcmV0dXJuIGxlbjsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmMKaW5kZXggZjNhMmY3ZS4uYjRjNWFhOCAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5jCisrKyBiL2ZzL2V4dDQveGF0dHIuYwpAQCAtMjI3LDcgKzIyNyw4IEBACiAJZWFfYmRlYnVnKGJoLCAiYl9jb3VudD0lZCwgcmVmY291bnQ9JWQiLAogCQlhdG9taWNfcmVhZCgmKGJoLT5iX2NvdW50KSksIGxlMzJfdG9fY3B1KEJIRFIoYmgpLT5oX3JlZmNvdW50KSk7CiAJaWYgKGV4dDRfeGF0dHJfY2hlY2tfYmxvY2soYmgpKSB7Ci1iYWRfYmxvY2s6CWV4dDRfZXJyb3IoaW5vZGUtPmlfc2IsIF9fZnVuY19fLAorYmFkX2Jsb2NrOgorCQlleHQ0X2Vycm9yKGlub2RlLT5pX3NiLAogCQkJICAgImlub2RlICVsdTogYmFkIGJsb2NrICVsbHUiLCBpbm9kZS0+aV9pbm8sCiAJCQkgICBFWFQ0X0koaW5vZGUpLT5pX2ZpbGVfYWNsKTsKIAkJZXJyb3IgPSAtRUlPOwpAQCAtMjY3LDcgKzI2OCw3IEBACiAJdm9pZCAqZW5kOwogCWludCBlcnJvcjsKIAotCWlmICghKEVYVDRfSShpbm9kZSktPmlfc3RhdGUgJiBFWFQ0X1NUQVRFX1hBVFRSKSkKKwlpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUikpCiAJCXJldHVybiAtRU5PREFUQTsKIAllcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgJmlsb2MpOwogCWlmIChlcnJvcikKQEAgLTM3MSw3ICszNzIsNyBAQAogCWVhX2JkZWJ1ZyhiaCwgImJfY291bnQ9JWQsIHJlZmNvdW50PSVkIiwKIAkJYXRvbWljX3JlYWQoJihiaC0+Yl9jb3VudCkpLCBsZTMyX3RvX2NwdShCSERSKGJoKS0+aF9yZWZjb3VudCkpOwogCWlmIChleHQ0X3hhdHRyX2NoZWNrX2Jsb2NrKGJoKSkgewotCQlleHQ0X2Vycm9yKGlub2RlLT5pX3NiLCBfX2Z1bmNfXywKKwkJZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwKIAkJCSAgICJpbm9kZSAlbHU6IGJhZCBibG9jayAlbGx1IiwgaW5vZGUtPmlfaW5vLAogCQkJICAgRVhUNF9JKGlub2RlKS0+aV9maWxlX2FjbCk7CiAJCWVycm9yID0gLUVJTzsKQEAgLTM5Niw3ICszOTcsNyBAQAogCXZvaWQgKmVuZDsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoIShFWFQ0X0koaW5vZGUpLT5pX3N0YXRlICYgRVhUNF9TVEFURV9YQVRUUikpCisJaWYgKCFleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpKQogCQlyZXR1cm4gMDsKIAllcnJvciA9IGV4dDRfZ2V0X2lub2RlX2xvYyhpbm9kZSwgJmlsb2MpOwogCWlmIChlcnJvcikKQEAgLTQ5NCw3ICs0OTUsNyBAQAogCQllcnJvciA9IGV4dDRfaGFuZGxlX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgaW5vZGUsIGJoKTsKIAkJaWYgKElTX1NZTkMoaW5vZGUpKQogCQkJZXh0NF9oYW5kbGVfc3luYyhoYW5kbGUpOwotCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgMSk7CisJCWRxdW90X2ZyZWVfYmxvY2soaW5vZGUsIDEpOwogCQllYV9iZGVidWcoYmgsICJyZWZjb3VudCBub3c9JWQ7IHJlbGVhc2luZyIsCiAJCQkgIGxlMzJfdG9fY3B1KEJIRFIoYmgpLT5oX3JlZmNvdW50KSk7CiAJCWlmIChjZSkKQEAgLTY2NSw5ICs2NjYsOCBAQAogCQkJYXRvbWljX3JlYWQoJihicy0+YmgtPmJfY291bnQpKSwKIAkJCWxlMzJfdG9fY3B1KEJIRFIoYnMtPmJoKS0+aF9yZWZjb3VudCkpOwogCQlpZiAoZXh0NF94YXR0cl9jaGVja19ibG9jayhicy0+YmgpKSB7Ci0JCQlleHQ0X2Vycm9yKHNiLCBfX2Z1bmNfXywKLQkJCQkiaW5vZGUgJWx1OiBiYWQgYmxvY2sgJWxsdSIsIGlub2RlLT5pX2lubywKLQkJCQlFWFQ0X0koaW5vZGUpLT5pX2ZpbGVfYWNsKTsKKwkJCWV4dDRfZXJyb3Ioc2IsICJpbm9kZSAlbHU6IGJhZCBibG9jayAlbGx1IiwKKwkJCQkgICBpbm9kZS0+aV9pbm8sIEVYVDRfSShpbm9kZSktPmlfZmlsZV9hY2wpOwogCQkJZXJyb3IgPSAtRUlPOwogCQkJZ290byBjbGVhbnVwOwogCQl9CkBAIC03ODcsOCArNzg3LDggQEAKIAkJCWVsc2UgewogCQkJCS8qIFRoZSBvbGQgYmxvY2sgaXMgcmVsZWFzZWQgYWZ0ZXIgdXBkYXRpbmcKIAkJCQkgICB0aGUgaW5vZGUuICovCi0JCQkJZXJyb3IgPSAtRURRVU9UOwotCQkJCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaW5vZGUsIDEpKQorCQkJCWVycm9yID0gZHF1b3RfYWxsb2NfYmxvY2soaW5vZGUsIDEpOworCQkJCWlmIChlcnJvcikKIAkJCQkJZ290byBjbGVhbnVwOwogCQkJCWVycm9yID0gZXh0NF9qb3VybmFsX2dldF93cml0ZV9hY2Nlc3MoaGFuZGxlLAogCQkJCQkJCQkgICAgICBuZXdfYmgpOwpAQCAtODc2LDEzICs4NzYsMTIgQEAKIAlyZXR1cm4gZXJyb3I7CiAKIGNsZWFudXBfZHF1b3Q6Ci0JdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIDEpOworCWRxdW90X2ZyZWVfYmxvY2soaW5vZGUsIDEpOwogCWdvdG8gY2xlYW51cDsKIAogYmFkX2Jsb2NrOgotCWV4dDRfZXJyb3IoaW5vZGUtPmlfc2IsIF9fZnVuY19fLAotCQkgICAiaW5vZGUgJWx1OiBiYWQgYmxvY2sgJWxsdSIsIGlub2RlLT5pX2lubywKLQkJICAgRVhUNF9JKGlub2RlKS0+aV9maWxlX2FjbCk7CisJZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwgImlub2RlICVsdTogYmFkIGJsb2NrICVsbHUiLAorCQkgICBpbm9kZS0+aV9pbm8sIEVYVDRfSShpbm9kZSktPmlfZmlsZV9hY2wpOwogCWdvdG8gY2xlYW51cDsKIAogI3VuZGVmIGhlYWRlcgpAQCAtOTA4LDcgKzkwNyw3IEBACiAJaXMtPnMuYmFzZSA9IGlzLT5zLmZpcnN0ID0gSUZJUlNUKGhlYWRlcik7CiAJaXMtPnMuaGVyZSA9IGlzLT5zLmZpcnN0OwogCWlzLT5zLmVuZCA9ICh2b2lkICopcmF3X2lub2RlICsgRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfaW5vZGVfc2l6ZTsKLQlpZiAoRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSAmIEVYVDRfU1RBVEVfWEFUVFIpIHsKKwlpZiAoZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKSkgewogCQllcnJvciA9IGV4dDRfeGF0dHJfY2hlY2tfbmFtZXMoSUZJUlNUKGhlYWRlciksIGlzLT5zLmVuZCk7CiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKQEAgLTk0MCwxMCArOTM5LDEwIEBACiAJaGVhZGVyID0gSUhEUihpbm9kZSwgZXh0NF9yYXdfaW5vZGUoJmlzLT5pbG9jKSk7CiAJaWYgKCFJU19MQVNUX0VOVFJZKHMtPmZpcnN0KSkgewogCQloZWFkZXItPmhfbWFnaWMgPSBjcHVfdG9fbGUzMihFWFQ0X1hBVFRSX01BR0lDKTsKLQkJRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSB8PSBFWFQ0X1NUQVRFX1hBVFRSOworCQlleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUik7CiAJfSBlbHNlIHsKIAkJaGVhZGVyLT5oX21hZ2ljID0gY3B1X3RvX2xlMzIoMCk7Ci0JCUVYVDRfSShpbm9kZSktPmlfc3RhdGUgJj0gfkVYVDRfU1RBVEVfWEFUVFI7CisJCWV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTk4Niw4ICs5ODUsOCBAQAogCWlmIChzdHJsZW4obmFtZSkgPiAyNTUpCiAJCXJldHVybiAtRVJBTkdFOwogCWRvd25fd3JpdGUoJkVYVDRfSShpbm9kZSktPnhhdHRyX3NlbSk7Ci0Jbm9fZXhwYW5kID0gRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSAmIEVYVDRfU1RBVEVfTk9fRVhQQU5EOwotCUVYVDRfSShpbm9kZSktPmlfc3RhdGUgfD0gRVhUNF9TVEFURV9OT19FWFBBTkQ7CisJbm9fZXhwYW5kID0gZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX05PX0VYUEFORCk7CisJZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTk9fRVhQQU5EKTsKIAogCWVycm9yID0gZXh0NF9nZXRfaW5vZGVfbG9jKGlub2RlLCAmaXMuaWxvYyk7CiAJaWYgKGVycm9yKQpAQCAtOTk3LDEwICs5OTYsMTAgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gY2xlYW51cDsKIAotCWlmIChFWFQ0X0koaW5vZGUpLT5pX3N0YXRlICYgRVhUNF9TVEFURV9ORVcpIHsKKwlpZiAoZXh0NF90ZXN0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX05FVykpIHsKIAkJc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSA9IGV4dDRfcmF3X2lub2RlKCZpcy5pbG9jKTsKIAkJbWVtc2V0KHJhd19pbm9kZSwgMCwgRVhUNF9TQihpbm9kZS0+aV9zYiktPnNfaW5vZGVfc2l6ZSk7Ci0JCUVYVDRfSShpbm9kZSktPmlfc3RhdGUgJj0gfkVYVDRfU1RBVEVfTkVXOworCQlleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX05FVyk7CiAJfQogCiAJZXJyb3IgPSBleHQ0X3hhdHRyX2lib2R5X2ZpbmQoaW5vZGUsICZpLCAmaXMpOwpAQCAtMTA1Miw3ICsxMDUxLDcgQEAKIAkJZXh0NF94YXR0cl91cGRhdGVfc3VwZXJfYmxvY2soaGFuZGxlLCBpbm9kZS0+aV9zYik7CiAJCWlub2RlLT5pX2N0aW1lID0gZXh0NF9jdXJyZW50X3RpbWUoaW5vZGUpOwogCQlpZiAoIXZhbHVlKQotCQkJRVhUNF9JKGlub2RlKS0+aV9zdGF0ZSAmPSB+RVhUNF9TVEFURV9OT19FWFBBTkQ7CisJCQlleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX05PX0VYUEFORCk7CiAJCWVycm9yID0gZXh0NF9tYXJrX2lsb2NfZGlydHkoaGFuZGxlLCBpbm9kZSwgJmlzLmlsb2MpOwogCQkvKgogCQkgKiBUaGUgYmggaXMgY29uc3VtZWQgYnkgZXh0NF9tYXJrX2lsb2NfZGlydHksIGV2ZW4gd2l0aApAQCAtMTA2Nyw3ICsxMDY2LDcgQEAKIAlicmVsc2UoaXMuaWxvYy5iaCk7CiAJYnJlbHNlKGJzLmJoKTsKIAlpZiAobm9fZXhwYW5kID09IDApCi0JCUVYVDRfSShpbm9kZSktPmlfc3RhdGUgJj0gfkVYVDRfU1RBVEVfTk9fRVhQQU5EOworCQlleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX05PX0VYUEFORCk7CiAJdXBfd3JpdGUoJkVYVDRfSShpbm9kZSktPnhhdHRyX3NlbSk7CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMTE5NSw5ICsxMTk0LDggQEAKIAkJaWYgKCFiaCkKIAkJCWdvdG8gY2xlYW51cDsKIAkJaWYgKGV4dDRfeGF0dHJfY2hlY2tfYmxvY2soYmgpKSB7Ci0JCQlleHQ0X2Vycm9yKGlub2RlLT5pX3NiLCBfX2Z1bmNfXywKLQkJCQkiaW5vZGUgJWx1OiBiYWQgYmxvY2sgJWxsdSIsIGlub2RlLT5pX2lubywKLQkJCQlFWFQ0X0koaW5vZGUpLT5pX2ZpbGVfYWNsKTsKKwkJCWV4dDRfZXJyb3IoaW5vZGUtPmlfc2IsICJpbm9kZSAlbHU6IGJhZCBibG9jayAlbGx1IiwKKwkJCQkgICBpbm9kZS0+aV9pbm8sIEVYVDRfSShpbm9kZSktPmlfZmlsZV9hY2wpOwogCQkJZXJyb3IgPSAtRUlPOwogCQkJZ290byBjbGVhbnVwOwogCQl9CkBAIC0xMzAyLDYgKzEzMDAsOCBAQAogCiAJCS8qIFJlbW92ZSB0aGUgY2hvc2VuIGVudHJ5IGZyb20gdGhlIGlub2RlICovCiAJCWVycm9yID0gZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlLCBpbm9kZSwgJmksIGlzKTsKKwkJaWYgKGVycm9yKQorCQkJZ290byBjbGVhbnVwOwogCiAJCWVudHJ5ID0gSUZJUlNUKGhlYWRlcik7CiAJCWlmIChlbnRyeV9zaXplICsgRVhUNF9YQVRUUl9TSVpFKHNpemUpID49IG5ld19leHRyYV9pc2l6ZSkKQEAgLTEzNzIsMTYgKzEzNzIsMTQgQEAKIAkJZ290byBjbGVhbnVwOwogCWJoID0gc2JfYnJlYWQoaW5vZGUtPmlfc2IsIEVYVDRfSShpbm9kZSktPmlfZmlsZV9hY2wpOwogCWlmICghYmgpIHsKLQkJZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwgX19mdW5jX18sCi0JCQkiaW5vZGUgJWx1OiBibG9jayAlbGx1IHJlYWQgZXJyb3IiLCBpbm9kZS0+aV9pbm8sCi0JCQlFWFQ0X0koaW5vZGUpLT5pX2ZpbGVfYWNsKTsKKwkJZXh0NF9lcnJvcihpbm9kZS0+aV9zYiwgImlub2RlICVsdTogYmxvY2sgJWxsdSByZWFkIGVycm9yIiwKKwkJCSAgIGlub2RlLT5pX2lubywgRVhUNF9JKGlub2RlKS0+aV9maWxlX2FjbCk7CiAJCWdvdG8gY2xlYW51cDsKIAl9CiAJaWYgKEJIRFIoYmgpLT5oX21hZ2ljICE9IGNwdV90b19sZTMyKEVYVDRfWEFUVFJfTUFHSUMpIHx8CiAJICAgIEJIRFIoYmgpLT5oX2Jsb2NrcyAhPSBjcHVfdG9fbGUzMigxKSkgewotCQlleHQ0X2Vycm9yKGlub2RlLT5pX3NiLCBfX2Z1bmNfXywKLQkJCSJpbm9kZSAlbHU6IGJhZCBibG9jayAlbGx1IiwgaW5vZGUtPmlfaW5vLAotCQkJRVhUNF9JKGlub2RlKS0+aV9maWxlX2FjbCk7CisJCWV4dDRfZXJyb3IoaW5vZGUtPmlfc2IsICJpbm9kZSAlbHU6IGJhZCBibG9jayAlbGx1IiwKKwkJCSAgIGlub2RlLT5pX2lubywgRVhUNF9JKGlub2RlKS0+aV9maWxlX2FjbCk7CiAJCWdvdG8gY2xlYW51cDsKIAl9CiAJZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoKTsKQEAgLTE1MDYsNyArMTUwNCw3IEBACiAJCX0KIAkJYmggPSBzYl9icmVhZChpbm9kZS0+aV9zYiwgY2UtPmVfYmxvY2spOwogCQlpZiAoIWJoKSB7Ci0JCQlleHQ0X2Vycm9yKGlub2RlLT5pX3NiLCBfX2Z1bmNfXywKKwkJCWV4dDRfZXJyb3IoaW5vZGUtPmlfc2IsCiAJCQkJImlub2RlICVsdTogYmxvY2sgJWx1IHJlYWQgZXJyb3IiLAogCQkJCWlub2RlLT5pX2lubywgKHVuc2lnbmVkIGxvbmcpIGNlLT5lX2Jsb2NrKTsKIAkJfSBlbHNlIGlmIChsZTMyX3RvX2NwdShCSERSKGJoKS0+aF9yZWZjb3VudCkgPj0KZGlmZiAtLWdpdCBhL2ZzL2ZhdC9pbm9kZS5jIGIvZnMvZmF0L2lub2RlLmMKaW5kZXggMTRkYTUzMC4uZmJlZWNkYyAxMDA2NDQKLS0tIGEvZnMvZmF0L2lub2RlLmMKKysrIGIvZnMvZmF0L2lub2RlLmMKQEAgLTU3Nyw3ICs1NzcsNyBAQAogCXJldHVybiBpX3BvczsKIH0KIAotc3RhdGljIGludCBmYXRfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpCitzdGF0aWMgaW50IF9fZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAlzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0Ioc2IpOwpAQCAtNjM0LDkgKzYzNCwxNCBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgZmF0X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQoreworCXJldHVybiBfX2ZhdF93cml0ZV9pbm9kZShpbm9kZSwgd2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpOworfQorCiBpbnQgZmF0X3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlyZXR1cm4gZmF0X3dyaXRlX2lub2RlKGlub2RlLCAxKTsKKwlyZXR1cm4gX19mYXRfd3JpdGVfaW5vZGUoaW5vZGUsIDEpOwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChmYXRfc3luY19pbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9mY250bC5jIGIvZnMvZmNudGwuYwppbmRleCA5N2UwMWRjLi40NTJkMDJmIDEwMDY0NAotLS0gYS9mcy9mY250bC5jCisrKyBiL2ZzL2ZjbnRsLmMKQEAgLTM0NCw3ICszNDQsNyBAQAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBGX0RVUEZEOgogCWNhc2UgRl9EVVBGRF9DTE9FWEVDOgotCQlpZiAoYXJnID49IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTk9GSUxFXS5ybGltX2N1cikKKwkJaWYgKGFyZyA+PSBybGltaXQoUkxJTUlUX05PRklMRSkpCiAJCQlicmVhazsKIAkJZXJyID0gYWxsb2NfZmQoYXJnLCBjbWQgPT0gRl9EVVBGRF9DTE9FWEVDID8gT19DTE9FWEVDIDogMCk7CiAJCWlmIChlcnIgPj0gMCkgewpkaWZmIC0tZ2l0IGEvZnMvZmlsZS5jIGIvZnMvZmlsZS5jCmluZGV4IDM4MDM5YWYuLjM0YmI3ZjcgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGUuYworKysgYi9mcy9maWxlLmMKQEAgLTI1Nyw3ICsyNTcsNyBAQAogCSAqIE4uQi4gRm9yIGNsb25lIHRhc2tzIHNoYXJpbmcgYSBmaWxlcyBzdHJ1Y3R1cmUsIHRoaXMgdGVzdAogCSAqIHdpbGwgbGltaXQgdGhlIHRvdGFsIG51bWJlciBvZiBmaWxlcyB0aGF0IGNhbiBiZSBvcGVuZWQuCiAJICovCi0JaWYgKG5yID49IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTk9GSUxFXS5ybGltX2N1cikKKwlpZiAobnIgPj0gcmxpbWl0KFJMSU1JVF9OT0ZJTEUpKQogCQlyZXR1cm4gLUVNRklMRTsKIAogCS8qIERvIHdlIG5lZWQgdG8gZXhwYW5kPyAqLwpkaWZmIC0tZ2l0IGEvZnMvZmlsZV90YWJsZS5jIGIvZnMvZmlsZV90YWJsZS5jCmluZGV4IGI5ODQwNGIuLjMyZDEyYjcgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGVfdGFibGUuYworKysgYi9mcy9maWxlX3RhYmxlLmMKQEAgLTM5Myw3ICszOTMsOSBAQAogCQkJY29udGludWU7CiAJCWlmICghKGYtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKIAkJCWNvbnRpbnVlOworCQlzcGluX2xvY2soJmYtPmZfbG9jayk7CiAJCWYtPmZfbW9kZSAmPSB+Rk1PREVfV1JJVEU7CisJCXNwaW5fdW5sb2NrKCZmLT5mX2xvY2spOwogCQlpZiAoZmlsZV9jaGVja193cml0ZWFibGUoZikgIT0gMCkKIAkJCWNvbnRpbnVlOwogCQlmaWxlX3JlbGVhc2Vfd3JpdGUoZik7CmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jCmluZGV4IDFhN2M0MmMuLjc2ZmM0ZDUgMTAwNjQ0Ci0tLSBhL2ZzL2ZzLXdyaXRlYmFjay5jCisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jCkBAIC0zODEsMTAgKzM4MSwxMCBAQAogCW1vdmVfZXhwaXJlZF9pbm9kZXMoJndiLT5iX2RpcnR5LCAmd2ItPmJfaW8sIG9sZGVyX3RoYW5fdGhpcyk7CiB9CiAKLXN0YXRpYyBpbnQgd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHN5bmMpCitzdGF0aWMgaW50IHdyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewogCWlmIChpbm9kZS0+aV9zYi0+c19vcC0+d3JpdGVfaW5vZGUgJiYgIWlzX2JhZF9pbm9kZShpbm9kZSkpCi0JCXJldHVybiBpbm9kZS0+aV9zYi0+c19vcC0+d3JpdGVfaW5vZGUoaW5vZGUsIHN5bmMpOworCQlyZXR1cm4gaW5vZGUtPmlfc2ItPnNfb3AtPndyaXRlX2lub2RlKGlub2RlLCB3YmMpOwogCXJldHVybiAwOwogfQogCkBAIC00MjEsNyArNDIxLDYgQEAKIHdyaXRlYmFja19zaW5nbGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS0+aV9tYXBwaW5nOwotCWludCB3YWl0ID0gd2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEw7CiAJdW5zaWduZWQgZGlydHk7CiAJaW50IHJldDsKIApAQCAtNDM5LDcgKzQzOCw3IEBACiAJCSAqIFdlJ2xsIGhhdmUgYW5vdGhlciBnbyBhdCB3cml0aW5nIGJhY2sgdGhpcyBpbm9kZSB3aGVuIHdlCiAJCSAqIGNvbXBsZXRlZCBhIGZ1bGwgc2NhbiBvZiBiX2lvLgogCQkgKi8KLQkJaWYgKCF3YWl0KSB7CisJCWlmICh3YmMtPnN5bmNfbW9kZSAhPSBXQl9TWU5DX0FMTCkgewogCQkJcmVxdWV1ZV9pbyhpbm9kZSk7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtNDYxLDE1ICs0NjAsMjAgQEAKIAogCXJldCA9IGRvX3dyaXRlcGFnZXMobWFwcGluZywgd2JjKTsKIAotCS8qIERvbid0IHdyaXRlIHRoZSBpbm9kZSBpZiBvbmx5IElfRElSVFlfUEFHRVMgd2FzIHNldCAqLwotCWlmIChkaXJ0eSAmIChJX0RJUlRZX1NZTkMgfCBJX0RJUlRZX0RBVEFTWU5DKSkgewotCQlpbnQgZXJyID0gd3JpdGVfaW5vZGUoaW5vZGUsIHdhaXQpOworCS8qCisJICogTWFrZSBzdXJlIHRvIHdhaXQgb24gdGhlIGRhdGEgYmVmb3JlIHdyaXRpbmcgb3V0IHRoZSBtZXRhZGF0YS4KKwkgKiBUaGlzIGlzIGltcG9ydGFudCBmb3IgZmlsZXN5c3RlbXMgdGhhdCBtb2RpZnkgbWV0YWRhdGEgb24gZGF0YQorCSAqIEkvTyBjb21wbGV0aW9uLgorCSAqLworCWlmICh3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCkgeworCQlpbnQgZXJyID0gZmlsZW1hcF9mZGF0YXdhaXQobWFwcGluZyk7CiAJCWlmIChyZXQgPT0gMCkKIAkJCXJldCA9IGVycjsKIAl9CiAKLQlpZiAod2FpdCkgewotCQlpbnQgZXJyID0gZmlsZW1hcF9mZGF0YXdhaXQobWFwcGluZyk7CisJLyogRG9uJ3Qgd3JpdGUgdGhlIGlub2RlIGlmIG9ubHkgSV9ESVJUWV9QQUdFUyB3YXMgc2V0ICovCisJaWYgKGRpcnR5ICYgKElfRElSVFlfU1lOQyB8IElfRElSVFlfREFUQVNZTkMpKSB7CisJCWludCBlcnIgPSB3cml0ZV9pbm9kZShpbm9kZSwgd2JjKTsKIAkJaWYgKHJldCA9PSAwKQogCQkJcmV0ID0gZXJyOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2ZzY2FjaGUvS2NvbmZpZyBiL2ZzL2ZzY2FjaGUvS2NvbmZpZwppbmRleCA4NjRkYWMyLi5jYzk0YmI5IDEwMDY0NAotLS0gYS9mcy9mc2NhY2hlL0tjb25maWcKKysrIGIvZnMvZnNjYWNoZS9LY29uZmlnCkBAIC0xLDcgKzEsNiBAQAogCiBjb25maWcgRlNDQUNIRQogCXRyaXN0YXRlICJHZW5lcmFsIGZpbGVzeXN0ZW0gbG9jYWwgY2FjaGluZyBtYW5hZ2VyIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCiAJc2VsZWN0IFNMT1dfV09SSwogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgYSBnZW5lcmljIGZpbGVzeXN0ZW0gY2FjaGluZyBtYW5hZ2VyIHRoYXQgY2FuIGJlCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rldi5jIGIvZnMvZnVzZS9kZXYuYwppbmRleCA1MWQ5ZTMzLi5lYjdlOTQyIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rldi5jCisrKyBiL2ZzL2Z1c2UvZGV2LmMKQEAgLTg2NSwxMyArODY1LDEwIEBACiAKIAlkb3duX3JlYWQoJmZjLT5raWxsc2IpOwogCWVyciA9IC1FTk9FTlQ7Ci0JaWYgKCFmYy0+c2IpCi0JCWdvdG8gZXJyX3VubG9jazsKLQotCWVyciA9IGZ1c2VfcmV2ZXJzZV9pbnZhbF9pbm9kZShmYy0+c2IsIG91dGFyZy5pbm8sCi0JCQkJICAgICAgIG91dGFyZy5vZmYsIG91dGFyZy5sZW4pOwotCi1lcnJfdW5sb2NrOgorCWlmIChmYy0+c2IpIHsKKwkJZXJyID0gZnVzZV9yZXZlcnNlX2ludmFsX2lub2RlKGZjLT5zYiwgb3V0YXJnLmlubywKKwkJCQkJICAgICAgIG91dGFyZy5vZmYsIG91dGFyZy5sZW4pOworCX0KIAl1cF9yZWFkKCZmYy0+a2lsbHNiKTsKIAlyZXR1cm4gZXJyOwogCkBAIC04ODQsMTAgKzg4MSwxNSBAQAogCQkJCSAgIHN0cnVjdCBmdXNlX2NvcHlfc3RhdGUgKmNzKQogewogCXN0cnVjdCBmdXNlX25vdGlmeV9pbnZhbF9lbnRyeV9vdXQgb3V0YXJnOwotCWludCBlcnIgPSAtRUlOVkFMOwotCWNoYXIgYnVmW0ZVU0VfTkFNRV9NQVgrMV07CisJaW50IGVyciA9IC1FTk9NRU07CisJY2hhciAqYnVmOwogCXN0cnVjdCBxc3RyIG5hbWU7CiAKKwlidWYgPSBremFsbG9jKEZVU0VfTkFNRV9NQVggKyAxLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBlcnI7CisKKwllcnIgPSAtRUlOVkFMOwogCWlmIChzaXplIDwgc2l6ZW9mKG91dGFyZykpCiAJCWdvdG8gZXJyOwogCkBAIC05MTAsMTYgKzkxMiwxNCBAQAogCiAJZG93bl9yZWFkKCZmYy0+a2lsbHNiKTsKIAllcnIgPSAtRU5PRU5UOwotCWlmICghZmMtPnNiKQotCQlnb3RvIGVycl91bmxvY2s7Ci0KLQllcnIgPSBmdXNlX3JldmVyc2VfaW52YWxfZW50cnkoZmMtPnNiLCBvdXRhcmcucGFyZW50LCAmbmFtZSk7Ci0KLWVycl91bmxvY2s6CisJaWYgKGZjLT5zYikKKwkJZXJyID0gZnVzZV9yZXZlcnNlX2ludmFsX2VudHJ5KGZjLT5zYiwgb3V0YXJnLnBhcmVudCwgJm5hbWUpOwogCXVwX3JlYWQoJmZjLT5raWxsc2IpOworCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIGVycjsKIAogZXJyOgorCWtmcmVlKGJ1Zik7CiAJZnVzZV9jb3B5X2ZpbmlzaChjcyk7CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuYwppbmRleCAxYTgyMmNlLi5lYzE0ZDE5IDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC04NTAsNyArODUwLDcgQEAKIAlyZXEtPmluLmFyZ3NbMF0uc2l6ZSA9IHNpemVvZigqYXJnKTsKIAlyZXEtPmluLmFyZ3NbMF0udmFsdWUgPSBhcmc7CiAJcmVxLT5vdXQubnVtYXJncyA9IDE7Ci0JLyogVmFyaWFibGUgbGVuZ3RoIGFyZ3VlbWVudCB1c2VkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5CisJLyogVmFyaWFibGUgbGVuZ3RoIGFyZ3VtZW50IHVzZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKIAkgICB3aXRoIGludGVyZmFjZSB2ZXJzaW9uIDwgNy41LiAgUmVzdCBvZiBpbml0X291dCBpcyB6ZXJvZWQKIAkgICBieSBkb19nZXRfcmVxdWVzdCgpLCBzbyBhIHNob3J0IHJlcGx5IGlzIG5vdCBhIHByb2JsZW0gKi8KIAlyZXEtPm91dC5hcmd2YXIgPSAxOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9hb3BzLmMgYi9mcy9nZnMyL2FvcHMuYwppbmRleCA3YjhkYTk0Li4wYzFkMGI4IDEwMDY0NAotLS0gYS9mcy9nZnMyL2FvcHMuYworKysgYi9mcy9nZnMyL2FvcHMuYwpAQCAtMTA2MSw4ICsxMDYxLDggQEAKIAogaW50IGdmczJfcmVsZWFzZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGdmcF9tYXNrKQogewotCXN0cnVjdCBpbm9kZSAqYXNwYWNlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKLQlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGFzcGFjZS0+aV9zYi0+c19mc19pbmZvOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGdmczJfbWFwcGluZzJzYmQobWFwcGluZyk7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgKmhlYWQ7CiAJc3RydWN0IGdmczJfYnVmZGF0YSAqYmQ7CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvY2suYyBiL2ZzL2dmczIvZ2xvY2suYwppbmRleCBmNDI2NjMzLi40NTRkNGI0IDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb2NrLmMKKysrIGIvZnMvZ2ZzMi9nbG9jay5jCkBAIC0xOSw3ICsxOSw2IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CkBAIC02MCw3ICs1OSw2IEBACiAjZGVmaW5lIEdMT0NLX0JVR19PTihnbCx4KSBkbyB7IGlmICh1bmxpa2VseSh4KSkgeyBfX2R1bXBfZ2xvY2soTlVMTCwgZ2wpOyBCVUcoKTsgfSB9IHdoaWxlKDApCiBzdGF0aWMgdm9pZCBkb194bW90ZShzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wsIHN0cnVjdCBnZnMyX2hvbGRlciAqZ2gsIHVuc2lnbmVkIGludCB0YXJnZXQpOwogCi1zdGF0aWMgREVDTEFSRV9SV1NFTShnZnMyX3Vtb3VudF9mbHVzaF9zZW0pOwogc3RhdGljIHN0cnVjdCBkZW50cnkgKmdmczJfcm9vdDsKIHN0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqZ2xvY2tfd29ya3F1ZXVlOwogc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmdmczJfZGVsZXRlX3dvcmtxdWV1ZTsKQEAgLTE1NCwxMiArMTUyLDE0IEBACiBzdGF0aWMgdm9pZCBnbG9ja19mcmVlKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGdsLT5nbF9zYmQ7Ci0Jc3RydWN0IGlub2RlICphc3BhY2UgPSBnbC0+Z2xfYXNwYWNlOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZ2ZzMl9nbG9jazJhc3BhY2UoZ2wpOworCXN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAgPSBnZnMyX2dsb2NrX2NhY2hlcDsKIAotCWlmIChhc3BhY2UpCi0JCWdmczJfYXNwYWNlX3B1dChhc3BhY2UpOworCUdMT0NLX0JVR19PTihnbCwgbWFwcGluZyAmJiBtYXBwaW5nLT5ucnBhZ2VzKTsKIAl0cmFjZV9nZnMyX2dsb2NrX3B1dChnbCk7Ci0Jc2RwLT5zZF9sb2Nrc3RydWN0LmxzX29wcy0+bG1fcHV0X2xvY2soZ2ZzMl9nbG9ja19jYWNoZXAsIGdsKTsKKwlpZiAobWFwcGluZykKKwkJY2FjaGVwID0gZ2ZzMl9nbG9ja19hc3BhY2VfY2FjaGVwOworCXNkcC0+c2RfbG9ja3N0cnVjdC5sc19vcHMtPmxtX3B1dF9sb2NrKGNhY2hlcCwgZ2wpOwogfQogCiAvKioKQEAgLTcxMiw3ICs3MTIsNiBAQAogCQlmaW5pc2hfeG1vdGUoZ2wsIGdsLT5nbF9yZXBseSk7CiAJCWRyb3BfcmVmID0gMTsKIAl9Ci0JZG93bl9yZWFkKCZnZnMyX3Vtb3VudF9mbHVzaF9zZW0pOwogCXNwaW5fbG9jaygmZ2wtPmdsX3NwaW4pOwogCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoR0xGX1BFTkRJTkdfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSAmJgogCSAgICBnbC0+Z2xfc3RhdGUgIT0gTE1fU1RfVU5MT0NLRUQgJiYKQEAgLTcyNSw3ICs3MjQsNiBAQAogCX0KIAlydW5fcXVldWUoZ2wsIDApOwogCXNwaW5fdW5sb2NrKCZnbC0+Z2xfc3Bpbik7Ci0JdXBfcmVhZCgmZ2ZzMl91bW91bnRfZmx1c2hfc2VtKTsKIAlpZiAoIWRlbGF5IHx8CiAJICAgIHF1ZXVlX2RlbGF5ZWRfd29yayhnbG9ja193b3JrcXVldWUsICZnbC0+Z2xfd29yaywgZGVsYXkpID09IDApCiAJCWdmczJfZ2xvY2tfcHV0KGdsKTsKQEAgLTc1MCwxMCArNzQ4LDExIEBACiAJCSAgIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgKmdsb3BzLCBpbnQgY3JlYXRlLAogCQkgICBzdHJ1Y3QgZ2ZzMl9nbG9jayAqKmdscCkKIHsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMgPSBzZHAtPnNkX3ZmczsKIAlzdHJ1Y3QgbG1fbG9ja25hbWUgbmFtZSA9IHsgLmxuX251bWJlciA9IG51bWJlciwgLmxuX3R5cGUgPSBnbG9wcy0+Z29fdHlwZSB9OwogCXN0cnVjdCBnZnMyX2dsb2NrICpnbCwgKnRtcDsKIAl1bnNpZ25lZCBpbnQgaGFzaCA9IGdsX2hhc2goc2RwLCAmbmFtZSk7Ci0JaW50IGVycm9yOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwogCiAJcmVhZF9sb2NrKGdsX2xvY2tfYWRkcihoYXNoKSk7CiAJZ2wgPSBzZWFyY2hfYnVja2V0KGhhc2gsIHNkcCwgJm5hbWUpOwpAQCAtNzY1LDcgKzc2NCwxMCBAQAogCWlmICghY3JlYXRlKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCWdsID0ga21lbV9jYWNoZV9hbGxvYyhnZnMyX2dsb2NrX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CisJaWYgKGdsb3BzLT5nb19mbGFncyAmIEdMT0ZfQVNQQUNFKQorCQlnbCA9IGttZW1fY2FjaGVfYWxsb2MoZ2ZzMl9nbG9ja19hc3BhY2VfY2FjaGVwLCBHRlBfS0VSTkVMKTsKKwllbHNlCisJCWdsID0ga21lbV9jYWNoZV9hbGxvYyhnZnMyX2dsb2NrX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFnbCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTc4NCwxOCArNzg2LDE4IEBACiAJZ2wtPmdsX3RjaGFuZ2UgPSBqaWZmaWVzOwogCWdsLT5nbF9vYmplY3QgPSBOVUxMOwogCWdsLT5nbF9zYmQgPSBzZHA7Ci0JZ2wtPmdsX2FzcGFjZSA9IE5VTEw7CiAJSU5JVF9ERUxBWUVEX1dPUksoJmdsLT5nbF93b3JrLCBnbG9ja193b3JrX2Z1bmMpOwogCUlOSVRfV09SSygmZ2wtPmdsX2RlbGV0ZSwgZGVsZXRlX3dvcmtfZnVuYyk7CiAKLQkvKiBJZiB0aGlzIGdsb2NrIHByb3RlY3RzIGFjdHVhbCBvbi1kaXNrIGRhdGEgb3IgbWV0YWRhdGEgYmxvY2tzLAotCSAgIGNyZWF0ZSBhIFZGUyBpbm9kZSB0byBtYW5hZ2UgdGhlIHBhZ2VzL2J1ZmZlcnMgaG9sZGluZyB0aGVtLiAqLwotCWlmIChnbG9wcyA9PSAmZ2ZzMl9pbm9kZV9nbG9wcyB8fCBnbG9wcyA9PSAmZ2ZzMl9yZ3JwX2dsb3BzKSB7Ci0JCWdsLT5nbF9hc3BhY2UgPSBnZnMyX2FzcGFjZV9nZXQoc2RwKTsKLQkJaWYgKCFnbC0+Z2xfYXNwYWNlKSB7Ci0JCQllcnJvciA9IC1FTk9NRU07Ci0JCQlnb3RvIGZhaWw7Ci0JCX0KKwltYXBwaW5nID0gZ2ZzMl9nbG9jazJhc3BhY2UoZ2wpOworCWlmIChtYXBwaW5nKSB7CisgICAgICAgICAgICAgICAgbWFwcGluZy0+YV9vcHMgPSAmZ2ZzMl9tZXRhX2FvcHM7CisJCW1hcHBpbmctPmhvc3QgPSBzLT5zX2JkZXYtPmJkX2lub2RlOworCQltYXBwaW5nLT5mbGFncyA9IDA7CisJCW1hcHBpbmdfc2V0X2dmcF9tYXNrKG1hcHBpbmcsIEdGUF9OT0ZTKTsKKwkJbWFwcGluZy0+YXNzb2NfbWFwcGluZyA9IE5VTEw7CisJCW1hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPSBzLT5zX2JkaTsKKwkJbWFwcGluZy0+d3JpdGViYWNrX2luZGV4ID0gMDsKIAl9CiAKIAl3cml0ZV9sb2NrKGdsX2xvY2tfYWRkcihoYXNoKSk7CkBAIC04MTIsMTAgKzgxNCw2IEBACiAJKmdscCA9IGdsOwogCiAJcmV0dXJuIDA7Ci0KLWZhaWw6Ci0Ja21lbV9jYWNoZV9mcmVlKGdmczJfZ2xvY2tfY2FjaGVwLCBnbCk7Ci0JcmV0dXJuIGVycm9yOwogfQogCiAvKioKQEAgLTE1MTAsMzUgKzE1MDgsMTAgQEAKIAogdm9pZCBnZnMyX2dsX2hhc2hfY2xlYXIoc3RydWN0IGdmczJfc2JkICpzZHApCiB7Ci0JdW5zaWduZWQgbG9uZyB0OwogCXVuc2lnbmVkIGludCB4OwotCWludCBjb250OwogCi0JdCA9IGppZmZpZXM7Ci0KLQlmb3IgKDs7KSB7Ci0JCWNvbnQgPSAwOwotCQlmb3IgKHggPSAwOyB4IDwgR0ZTMl9HTF9IQVNIX1NJWkU7IHgrKykgewotCQkJaWYgKGV4YW1pbmVfYnVja2V0KGNsZWFyX2dsb2NrLCBzZHAsIHgpKQotCQkJCWNvbnQgPSAxOwotCQl9Ci0KLQkJaWYgKCFjb250KQotCQkJYnJlYWs7Ci0KLQkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywKLQkJCQkgIHQgKyBnZnMyX3R1bmVfZ2V0KHNkcCwgZ3Rfc3RhbGxfc2VjcykgKiBIWikpIHsKLQkJCWZzX3dhcm4oc2RwLCAiVW5tb3VudCBzZWVtcyB0byBiZSBzdGFsbGVkLiAiCi0JCQkJICAgICAiRHVtcGluZyBsb2NrIHN0YXRlLi4uXG4iKTsKLQkJCWdmczJfZHVtcF9sb2Nrc3RhdGUoc2RwKTsKLQkJCXQgPSBqaWZmaWVzOwotCQl9Ci0KLQkJZG93bl93cml0ZSgmZ2ZzMl91bW91bnRfZmx1c2hfc2VtKTsKLQkJaW52YWxpZGF0ZV9pbm9kZXMoc2RwLT5zZF92ZnMpOwotCQl1cF93cml0ZSgmZ2ZzMl91bW91bnRfZmx1c2hfc2VtKTsKLQkJbXNsZWVwKDEwKTsKLQl9CisJZm9yICh4ID0gMDsgeCA8IEdGUzJfR0xfSEFTSF9TSVpFOyB4KyspCisJCWV4YW1pbmVfYnVja2V0KGNsZWFyX2dsb2NrLCBzZHAsIHgpOwogCWZsdXNoX3dvcmtxdWV1ZShnbG9ja193b3JrcXVldWUpOwogCXdhaXRfZXZlbnQoc2RwLT5zZF9nbG9ja193YWl0LCBhdG9taWNfcmVhZCgmc2RwLT5zZF9nbG9ja19kaXNwb3NhbCkgPT0gMCk7CiAJZ2ZzMl9kdW1wX2xvY2tzdGF0ZShzZHApOwpAQCAtMTY4NSw3ICsxNjU4LDcgQEAKIAlkdGltZSAqPSAxMDAwMDAwL0haOyAvKiBkZW1vdGUgdGltZSBpbiB1U2VjICovCiAJaWYgKCF0ZXN0X2JpdChHTEZfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSkKIAkJZHRpbWUgPSAwOwotCWdmczJfcHJpbnRfZGJnKHNlcSwgIkc6ICBzOiVzIG46JXUvJWxsdSBmOiVzIHQ6JXMgZDolcy8lbGx1IGE6JWQgcjolZFxuIiwKKwlnZnMyX3ByaW50X2RiZyhzZXEsICJHOiAgczolcyBuOiV1LyVsbHggZjolcyB0OiVzIGQ6JXMvJWxsdSBhOiVkIHI6JWRcbiIsCiAJCSAgc3RhdGUyc3RyKGdsLT5nbF9zdGF0ZSksCiAJCSAgZ2wtPmdsX25hbWUubG5fdHlwZSwKIAkJICAodW5zaWduZWQgbG9uZyBsb25nKWdsLT5nbF9uYW1lLmxuX251bWJlciwKZGlmZiAtLWdpdCBhL2ZzL2dmczIvZ2xvY2suaCBiL2ZzL2dmczIvZ2xvY2suaAppbmRleCBjMDI2MmZhLi4yYmRhMTkxIDEwMDY0NAotLS0gYS9mcy9nZnMyL2dsb2NrLmgKKysrIGIvZnMvZ2ZzMi9nbG9jay5oCkBAIC0xODAsNiArMTgwLDEzIEBACiAJcmV0dXJuIGdsLT5nbF9zdGF0ZSA9PSBMTV9TVF9TSEFSRUQ7CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKmdmczJfZ2xvY2syYXNwYWNlKHN0cnVjdCBnZnMyX2dsb2NrICpnbCkKK3sKKwlpZiAoZ2wtPmdsX29wcy0+Z29fZmxhZ3MgJiBHTE9GX0FTUEFDRSkKKwkJcmV0dXJuIChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKShnbCArIDEpOworCXJldHVybiBOVUxMOworfQorCiBpbnQgZ2ZzMl9nbG9ja19nZXQoc3RydWN0IGdmczJfc2JkICpzZHAsCiAJCSAgIHU2NCBudW1iZXIsIGNvbnN0IHN0cnVjdCBnZnMyX2dsb2NrX29wZXJhdGlvbnMgKmdsb3BzLAogCQkgICBpbnQgY3JlYXRlLCBzdHJ1Y3QgZ2ZzMl9nbG9jayAqKmdscCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL2dsb3BzLmMgYi9mcy9nZnMyL2dsb3BzLmMKaW5kZXggNzg1NTRhYy4uMzhlMzc0OSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9nbG9wcy5jCisrKyBiL2ZzL2dmczIvZ2xvcHMuYwpAQCAtODcsNyArODcsNyBAQAogCiBzdGF0aWMgdm9pZCByZ3JwX2dvX3N5bmMoc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogewotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptZXRhbWFwcGluZyA9IGdsLT5nbF9hc3BhY2UtPmlfbWFwcGluZzsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWV0YW1hcHBpbmcgPSBnZnMyX2dsb2NrMmFzcGFjZShnbCk7CiAJaW50IGVycm9yOwogCiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoR0xGX0RJUlRZLCAmZ2wtPmdsX2ZsYWdzKSkKQEAgLTExMyw3ICsxMTMsNyBAQAogCiBzdGF0aWMgdm9pZCByZ3JwX2dvX2ludmFsKHN0cnVjdCBnZnMyX2dsb2NrICpnbCwgaW50IGZsYWdzKQogewotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZ2wtPmdsX2FzcGFjZS0+aV9tYXBwaW5nOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZ2ZzMl9nbG9jazJhc3BhY2UoZ2wpOwogCiAJQlVHX09OKCEoZmxhZ3MgJiBESU9fTUVUQURBVEEpKTsKIAlnZnMyX2Fzc2VydF93aXRoZHJhdyhnbC0+Z2xfc2JkLCAhYXRvbWljX3JlYWQoJmdsLT5nbF9haWxfY291bnQpKTsKQEAgLTEzNCw3ICsxMzQsNyBAQAogc3RhdGljIHZvaWQgaW5vZGVfZ29fc3luYyhzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCiB7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gZ2wtPmdsX29iamVjdDsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWV0YW1hcHBpbmcgPSBnbC0+Z2xfYXNwYWNlLT5pX21hcHBpbmc7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1ldGFtYXBwaW5nID0gZ2ZzMl9nbG9jazJhc3BhY2UoZ2wpOwogCWludCBlcnJvcjsKIAogCWlmIChpcCAmJiAhU19JU1JFRyhpcC0+aV9pbm9kZS5pX21vZGUpKQpAQCAtMTgzLDcgKzE4Myw3IEBACiAJZ2ZzMl9hc3NlcnRfd2l0aGRyYXcoZ2wtPmdsX3NiZCwgIWF0b21pY19yZWFkKCZnbC0+Z2xfYWlsX2NvdW50KSk7CiAKIAlpZiAoZmxhZ3MgJiBESU9fTUVUQURBVEEpIHsKLQkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBnbC0+Z2xfYXNwYWNlLT5pX21hcHBpbmc7CisJCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZ2ZzMl9nbG9jazJhc3BhY2UoZ2wpOwogCQl0cnVuY2F0ZV9pbm9kZV9wYWdlcyhtYXBwaW5nLCAwKTsKIAkJaWYgKGlwKSB7CiAJCQlzZXRfYml0KEdJRl9JTlZBTElELCAmaXAtPmlfZmxhZ3MpOwpAQCAtMjgyLDcgKzI4Miw4IEBACiAKIHN0YXRpYyBpbnQgcmdycF9nb19kZW1vdGVfb2soY29uc3Qgc3RydWN0IGdmczJfZ2xvY2sgKmdsKQogewotCXJldHVybiAhZ2wtPmdsX2FzcGFjZS0+aV9tYXBwaW5nLT5ucnBhZ2VzOworCWNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gKGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlICopKGdsICsgMSk7CisJcmV0dXJuICFtYXBwaW5nLT5ucnBhZ2VzOwogfQogCiAvKioKQEAgLTM4Nyw4ICszODgsNyBAQAogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IChzdHJ1Y3QgZ2ZzMl9pbm9kZSAqKWdsLT5nbF9vYmplY3Q7CiAKIAlpZiAoZ2wtPmdsX2RlbW90ZV9zdGF0ZSA9PSBMTV9TVF9VTkxPQ0tFRCAmJgotCSAgICBnbC0+Z2xfc3RhdGUgPT0gTE1fU1RfU0hBUkVEICYmCi0JICAgIGlwICYmIHRlc3RfYml0KEdJRl9VU0VSLCAmaXAtPmlfZmxhZ3MpKSB7CisJICAgIGdsLT5nbF9zdGF0ZSA9PSBMTV9TVF9TSEFSRUQgJiYgaXApIHsKIAkJZ2ZzMl9nbG9ja19ob2xkKGdsKTsKIAkJaWYgKHF1ZXVlX3dvcmsoZ2ZzMl9kZWxldGVfd29ya3F1ZXVlLCAmZ2wtPmdsX2RlbGV0ZSkgPT0gMCkKIAkJCWdmczJfZ2xvY2tfcHV0X25vbG9jayhnbCk7CkBAIC00MDcsNiArNDA3LDcgQEAKIAkuZ29fZHVtcCA9IGlub2RlX2dvX2R1bXAsCiAJLmdvX3R5cGUgPSBMTV9UWVBFX0lOT0RFLAogCS5nb19taW5faG9sZF90aW1lID0gSFogLyA1LAorCS5nb19mbGFncyA9IEdMT0ZfQVNQQUNFLAogfTsKIAogY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX3JncnBfZ2xvcHMgPSB7CkBAIC00MTgsNiArNDE5LDcgQEAKIAkuZ29fZHVtcCA9IGdmczJfcmdycF9kdW1wLAogCS5nb190eXBlID0gTE1fVFlQRV9SR1JQLAogCS5nb19taW5faG9sZF90aW1lID0gSFogLyA1LAorCS5nb19mbGFncyA9IEdMT0ZfQVNQQUNFLAogfTsKIAogY29uc3Qgc3RydWN0IGdmczJfZ2xvY2tfb3BlcmF0aW9ucyBnZnMyX3RyYW5zX2dsb3BzID0gewpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9pbmNvcmUuaCBiL2ZzL2dmczIvaW5jb3JlLmgKaW5kZXggYmMwYWQxNS4uYjgwMjVlNSAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9pbmNvcmUuaAorKysgYi9mcy9nZnMyL2luY29yZS5oCkBAIC0xNjIsNiArMTYyLDggQEAKIAl2b2lkICgqZ29fY2FsbGJhY2spIChzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpOwogCWNvbnN0IGludCBnb190eXBlOwogCWNvbnN0IHVuc2lnbmVkIGxvbmcgZ29fbWluX2hvbGRfdGltZTsKKwljb25zdCB1bnNpZ25lZCBsb25nIGdvX2ZsYWdzOworI2RlZmluZSBHTE9GX0FTUEFDRSAxCiB9OwogCiBlbnVtIHsKQEAgLTIyNSw3ICsyMjcsNiBAQAogCiAJc3RydWN0IGdmczJfc2JkICpnbF9zYmQ7CiAKLQlzdHJ1Y3QgaW5vZGUgKmdsX2FzcGFjZTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGdsX2FpbF9saXN0OwogCWF0b21pY190IGdsX2FpbF9jb3VudDsKIAlzdHJ1Y3QgZGVsYXllZF93b3JrIGdsX3dvcms7CkBAIC0yNTgsNyArMjU5LDYgQEAKIAlHSUZfSU5WQUxJRAkJPSAwLAogCUdJRl9RRF9MT0NLRUQJCT0gMSwKIAlHSUZfU1dfUEFHRUQJCT0gMywKLQlHSUZfVVNFUiAgICAgICAgICAgICAgICA9IDQsIC8qIHVzZXIgaW5vZGUsIG5vdCBtZXRhZGF0YSBhZGRyIHNwYWNlICovCiB9OwogCiAKQEAgLTQ1MSw3ICs0NTEsNiBAQAogCXVuc2lnbmVkIGludCBndF9xdW90YV9xdWFudHVtOyAvKiBTZWNzIGJldHdlZW4gc3luY3MgdG8gcXVvdGEgZmlsZSAqLwogCXVuc2lnbmVkIGludCBndF9uZXdfZmlsZXNfamRhdGE7CiAJdW5zaWduZWQgaW50IGd0X21heF9yZWFkYWhlYWQ7IC8qIE1heCBieXRlcyB0byByZWFkLWFoZWFkIGZyb20gZGlzayAqLwotCXVuc2lnbmVkIGludCBndF9zdGFsbF9zZWNzOyAvKiBEZXRlY3RzIHRyb3VibGUhICovCiAJdW5zaWduZWQgaW50IGd0X2NvbXBsYWluX3NlY3M7CiAJdW5zaWduZWQgaW50IGd0X3N0YXRmc19xdWFudHVtOwogCXVuc2lnbmVkIGludCBndF9zdGF0ZnNfc2xvdzsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvaW5vZGUuYyBiL2ZzL2dmczIvaW5vZGUuYwppbmRleCA2ZTIyMGY0Li5iMWJmMjY5IDEwMDY0NAotLS0gYS9mcy9nZnMyL2lub2RlLmMKKysrIGIvZnMvZ2ZzMi9pbm9kZS5jCkBAIC00NSw3ICs0NSw3IEBACiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKIAl1NjQgKm5vX2FkZHIgPSBvcGFxdWU7CiAKLQlpZiAoaXAtPmlfbm9fYWRkciA9PSAqbm9fYWRkciAmJiB0ZXN0X2JpdChHSUZfVVNFUiwgJmlwLT5pX2ZsYWdzKSkKKwlpZiAoaXAtPmlfbm9fYWRkciA9PSAqbm9fYWRkcikKIAkJcmV0dXJuIDE7CiAKIAlyZXR1cm4gMDsKQEAgLTU4LDcgKzU4LDYgQEAKIAogCWlub2RlLT5pX2lubyA9ICh1bnNpZ25lZCBsb25nKSpub19hZGRyOwogCWlwLT5pX25vX2FkZHIgPSAqbm9fYWRkcjsKLQlzZXRfYml0KEdJRl9VU0VSLCAmaXAtPmlfZmxhZ3MpOwogCXJldHVybiAwOwogfQogCkBAIC04NCw3ICs4Myw3IEBACiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9za2lwX2RhdGEgKmRhdGEgPSBvcGFxdWU7CiAKLQlpZiAoaXAtPmlfbm9fYWRkciA9PSBkYXRhLT5ub19hZGRyICYmIHRlc3RfYml0KEdJRl9VU0VSLCAmaXAtPmlfZmxhZ3MpKXsKKwlpZiAoaXAtPmlfbm9fYWRkciA9PSBkYXRhLT5ub19hZGRyKSB7CiAJCWlmIChpbm9kZS0+aV9zdGF0ZSAmIChJX0ZSRUVJTkd8SV9DTEVBUnxJX1dJTExfRlJFRSkpewogCQkJZGF0YS0+c2tpcHBlZCA9IDE7CiAJCQlyZXR1cm4gMDsKQEAgLTEwMyw3ICsxMDIsNiBAQAogCQlyZXR1cm4gMTsKIAlpbm9kZS0+aV9pbm8gPSAodW5zaWduZWQgbG9uZykoZGF0YS0+bm9fYWRkcik7CiAJaXAtPmlfbm9fYWRkciA9IGRhdGEtPm5vX2FkZHI7Ci0Jc2V0X2JpdChHSUZfVVNFUiwgJmlwLT5pX2ZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9sb2NrX2RsbS5jIGIvZnMvZ2ZzMi9sb2NrX2RsbS5jCmluZGV4IDBlNWUwZTcuLjU2OWI0NjIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbG9ja19kbG0uYworKysgYi9mcy9nZnMyL2xvY2tfZGxtLmMKQEAgLTMwLDcgKzMwLDEwIEBACiAKIAlzd2l0Y2ggKGdsLT5nbF9sa3NiLnNiX3N0YXR1cykgewogCWNhc2UgLURMTV9FVU5MT0NLOiAvKiBVbmxvY2tlZCwgc28gZ2xvY2sgY2FuIGJlIGZyZWVkICovCi0JCWttZW1fY2FjaGVfZnJlZShnZnMyX2dsb2NrX2NhY2hlcCwgZ2wpOworCQlpZiAoZ2wtPmdsX29wcy0+Z29fZmxhZ3MgJiBHTE9GX0FTUEFDRSkKKwkJCWttZW1fY2FjaGVfZnJlZShnZnMyX2dsb2NrX2FzcGFjZV9jYWNoZXAsIGdsKTsKKwkJZWxzZQorCQkJa21lbV9jYWNoZV9mcmVlKGdmczJfZ2xvY2tfY2FjaGVwLCBnbCk7CiAJCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzZHAtPnNkX2dsb2NrX2Rpc3Bvc2FsKSkKIAkJCXdha2VfdXAoJnNkcC0+c2RfZ2xvY2tfd2FpdCk7CiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2ZzL2dmczIvbG9wcy5jIGIvZnMvZ2ZzMi9sb3BzLmMKaW5kZXggZGU5NzYzMi4uYWRjMjYwZiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9sb3BzLmMKKysrIGIvZnMvZ2ZzMi9sb3BzLmMKQEAgLTUyOCw5ICs1MjgsOSBAQAogCQlnZnMyX3BpbihzZHAsIGJkLT5iZF9iaCk7CiAJCXRyLT50cl9udW1fZGF0YWJ1Zl9uZXcrKzsKIAkJc2RwLT5zZF9sb2dfbnVtX2RhdGFidWYrKzsKLQkJbGlzdF9hZGQoJmxlLT5sZV9saXN0LCAmc2RwLT5zZF9sb2dfbGVfZGF0YWJ1Zik7CisJCWxpc3RfYWRkX3RhaWwoJmxlLT5sZV9saXN0LCAmc2RwLT5zZF9sb2dfbGVfZGF0YWJ1Zik7CiAJfSBlbHNlIHsKLQkJbGlzdF9hZGQoJmxlLT5sZV9saXN0LCAmc2RwLT5zZF9sb2dfbGVfb3JkZXJlZCk7CisJCWxpc3RfYWRkX3RhaWwoJmxlLT5sZV9saXN0LCAmc2RwLT5zZF9sb2dfbGVfb3JkZXJlZCk7CiAJfQogb3V0OgogCWdmczJfbG9nX3VubG9jayhzZHApOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tYWluLmMgYi9mcy9nZnMyL21haW4uYwppbmRleCA1YjMxZjc3Li5hODhmYWRjIDEwMDY0NAotLS0gYS9mcy9nZnMyL21haW4uYworKysgYi9mcy9nZnMyL21haW4uYwpAQCAtNTIsNiArNTIsMjIgQEAKIAlhdG9taWNfc2V0KCZnbC0+Z2xfYWlsX2NvdW50LCAwKTsKIH0KIAorc3RhdGljIHZvaWQgZ2ZzMl9pbml0X2dsX2FzcGFjZV9vbmNlKHZvaWQgKmZvbykKK3sKKwlzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wgPSBmb287CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKikoZ2wgKyAxKTsKKworCWdmczJfaW5pdF9nbG9ja19vbmNlKGdsKTsKKwltZW1zZXQobWFwcGluZywgMCwgc2l6ZW9mKCptYXBwaW5nKSk7CisJSU5JVF9SQURJWF9UUkVFKCZtYXBwaW5nLT5wYWdlX3RyZWUsIEdGUF9BVE9NSUMpOworCXNwaW5fbG9ja19pbml0KCZtYXBwaW5nLT50cmVlX2xvY2spOworCXNwaW5fbG9ja19pbml0KCZtYXBwaW5nLT5pX21tYXBfbG9jayk7CisJSU5JVF9MSVNUX0hFQUQoJm1hcHBpbmctPnByaXZhdGVfbGlzdCk7CisJc3Bpbl9sb2NrX2luaXQoJm1hcHBpbmctPnByaXZhdGVfbG9jayk7CisJSU5JVF9SQVdfUFJJT19UUkVFX1JPT1QoJm1hcHBpbmctPmlfbW1hcCk7CisJSU5JVF9MSVNUX0hFQUQoJm1hcHBpbmctPmlfbW1hcF9ub25saW5lYXIpOworfQorCiAvKioKICAqIGluaXRfZ2ZzMl9mcyAtIFJlZ2lzdGVyIEdGUzIgYXMgYSBmaWxlc3lzdGVtCiAgKgpAQCAtNzgsNiArOTQsMTQgQEAKIAlpZiAoIWdmczJfZ2xvY2tfY2FjaGVwKQogCQlnb3RvIGZhaWw7CiAKKwlnZnMyX2dsb2NrX2FzcGFjZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZ2ZzMl9nbG9jayAoYXNwYWNlKSIsCisJCQkJCXNpemVvZihzdHJ1Y3QgZ2ZzMl9nbG9jaykgKworCQkJCQlzaXplb2Yoc3RydWN0IGFkZHJlc3Nfc3BhY2UpLAorCQkJCQkwLCAwLCBnZnMyX2luaXRfZ2xfYXNwYWNlX29uY2UpOworCisJaWYgKCFnZnMyX2dsb2NrX2FzcGFjZV9jYWNoZXApCisJCWdvdG8gZmFpbDsKKwogCWdmczJfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImdmczJfaW5vZGUiLAogCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IGdmczJfaW5vZGUpLAogCQkJCQkgICAgICAwLCAgU0xBQl9SRUNMQUlNX0FDQ09VTlR8CkBAIC0xNDQsNiArMTY4LDkgQEAKIAlpZiAoZ2ZzMl9pbm9kZV9jYWNoZXApCiAJCWttZW1fY2FjaGVfZGVzdHJveShnZnMyX2lub2RlX2NhY2hlcCk7CiAKKwlpZiAoZ2ZzMl9nbG9ja19hc3BhY2VfY2FjaGVwKQorCQlrbWVtX2NhY2hlX2Rlc3Ryb3koZ2ZzMl9nbG9ja19hc3BhY2VfY2FjaGVwKTsKKwogCWlmIChnZnMyX2dsb2NrX2NhY2hlcCkKIAkJa21lbV9jYWNoZV9kZXN0cm95KGdmczJfZ2xvY2tfY2FjaGVwKTsKIApAQCAtMTY5LDYgKzE5Niw3IEBACiAJa21lbV9jYWNoZV9kZXN0cm95KGdmczJfcmdycGRfY2FjaGVwKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koZ2ZzMl9idWZkYXRhX2NhY2hlcCk7CiAJa21lbV9jYWNoZV9kZXN0cm95KGdmczJfaW5vZGVfY2FjaGVwKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koZ2ZzMl9nbG9ja19hc3BhY2VfY2FjaGVwKTsKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koZ2ZzMl9nbG9ja19jYWNoZXApOwogCiAJZ2ZzMl9zeXNfdW5pbml0KCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL21ldGFfaW8uYyBiL2ZzL2dmczIvbWV0YV9pby5jCmluZGV4IDZmNjhhNWYuLjBiYjEyYzggMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvbWV0YV9pby5jCisrKyBiL2ZzL2dmczIvbWV0YV9pby5jCkBAIC05Myw0OSArOTMsMTMgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBhc3BhY2VfYW9wcyA9IHsKK2NvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZ2ZzMl9tZXRhX2FvcHMgPSB7CiAJLndyaXRlcGFnZSA9IGdmczJfYXNwYWNlX3dyaXRlcGFnZSwKIAkucmVsZWFzZXBhZ2UgPSBnZnMyX3JlbGVhc2VwYWdlLAogCS5zeW5jX3BhZ2UgPSBibG9ja19zeW5jX3BhZ2UsCiB9OwogCiAvKioKLSAqIGdmczJfYXNwYWNlX2dldCAtIENyZWF0ZSBhbmQgaW5pdGlhbGl6ZSBhIHN0cnVjdCBpbm9kZSBzdHJ1Y3R1cmUKLSAqIEBzZHA6IHRoZSBmaWxlc3lzdGVtIHRoZSBhc3BhY2UgaXMgaW4KLSAqCi0gKiBSaWdodCBub3cgYSBzdHJ1Y3QgaW5vZGUgaXMganVzdCBhIHN0cnVjdCBpbm9kZS4gIE1heWJlIExpbnV4Ci0gKiB3aWxsIHN1cHBseSBhIG1vcmUgbGlnaHR3ZWlnaHQgYWRkcmVzcyBzcGFjZSBjb25zdHJ1Y3QgKHRoYXQgd29ya3MpCi0gKiBpbiB0aGUgZnV0dXJlLgotICoKLSAqIE1ha2Ugc3VyZSBwYWdlcy9idWZmZXJzIGluIHRoaXMgYXNwYWNlIGFyZW4ndCBpbiBoaWdoIG1lbW9yeS4KLSAqCi0gKiBSZXR1cm5zOiB0aGUgYXNwYWNlCi0gKi8KLQotc3RydWN0IGlub2RlICpnZnMyX2FzcGFjZV9nZXQoc3RydWN0IGdmczJfc2JkICpzZHApCi17Ci0Jc3RydWN0IGlub2RlICphc3BhY2U7Ci0Jc3RydWN0IGdmczJfaW5vZGUgKmlwOwotCi0JYXNwYWNlID0gbmV3X2lub2RlKHNkcC0+c2RfdmZzKTsKLQlpZiAoYXNwYWNlKSB7Ci0JCW1hcHBpbmdfc2V0X2dmcF9tYXNrKGFzcGFjZS0+aV9tYXBwaW5nLCBHRlBfTk9GUyk7Ci0JCWFzcGFjZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZhc3BhY2VfYW9wczsKLQkJYXNwYWNlLT5pX3NpemUgPSBNQVhfTEZTX0ZJTEVTSVpFOwotCQlpcCA9IEdGUzJfSShhc3BhY2UpOwotCQljbGVhcl9iaXQoR0lGX1VTRVIsICZpcC0+aV9mbGFncyk7Ci0JCWluc2VydF9pbm9kZV9oYXNoKGFzcGFjZSk7Ci0JfQotCXJldHVybiBhc3BhY2U7Ci19Ci0KLXZvaWQgZ2ZzMl9hc3BhY2VfcHV0KHN0cnVjdCBpbm9kZSAqYXNwYWNlKQotewotCXJlbW92ZV9pbm9kZV9oYXNoKGFzcGFjZSk7Ci0JaXB1dChhc3BhY2UpOwotfQotCi0vKioKICAqIGdmczJfbWV0YV9zeW5jIC0gU3luYyBhbGwgYnVmZmVycyBhc3NvY2lhdGVkIHdpdGggYSBnbG9jawogICogQGdsOiBUaGUgZ2xvY2sKICAqCkBAIC0xNDMsNyArMTA3LDcgQEAKIAogdm9pZCBnZnMyX21ldGFfc3luYyhzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpCiB7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBnbC0+Z2xfYXNwYWNlLT5pX21hcHBpbmc7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBnZnMyX2dsb2NrMmFzcGFjZShnbCk7CiAJaW50IGVycm9yOwogCiAJZmlsZW1hcF9mZGF0YXdyaXRlKG1hcHBpbmcpOwpAQCAtMTY0LDcgKzEyOCw3IEBACiAKIHN0cnVjdCBidWZmZXJfaGVhZCAqZ2ZzMl9nZXRidWYoc3RydWN0IGdmczJfZ2xvY2sgKmdsLCB1NjQgYmxrbm8sIGludCBjcmVhdGUpCiB7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBnbC0+Z2xfYXNwYWNlLT5pX21hcHBpbmc7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBnZnMyX2dsb2NrMmFzcGFjZShnbCk7CiAJc3RydWN0IGdmczJfc2JkICpzZHAgPSBnbC0+Z2xfc2JkOwogCXN0cnVjdCBwYWdlICpwYWdlOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CkBAIC0zNDQsOCArMzA4LDEwIEBACiAKIHZvaWQgZ2ZzMl9yZW1vdmVfZnJvbV9qb3VybmFsKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHN0cnVjdCBnZnMyX3RyYW5zICp0ciwgaW50IG1ldGEpCiB7Ci0Jc3RydWN0IGdmczJfc2JkICpzZHAgPSBHRlMyX1NCKGJoLT5iX3BhZ2UtPm1hcHBpbmctPmhvc3QpOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gYmgtPmJfcGFnZS0+bWFwcGluZzsKKwlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IGdmczJfbWFwcGluZzJzYmQobWFwcGluZyk7CiAJc3RydWN0IGdmczJfYnVmZGF0YSAqYmQgPSBiaC0+Yl9wcml2YXRlOworCiAJaWYgKHRlc3RfY2xlYXJfYnVmZmVyX3Bpbm5lZChiaCkpIHsKIAkJbGlzdF9kZWxfaW5pdCgmYmQtPmJkX2xlLmxlX2xpc3QpOwogCQlpZiAobWV0YSkgewpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9tZXRhX2lvLmggYi9mcy9nZnMyL21ldGFfaW8uaAppbmRleCBkZTI3MGMyLi42YTFkOWJhIDEwMDY0NAotLS0gYS9mcy9nZnMyL21ldGFfaW8uaAorKysgYi9mcy9nZnMyL21ldGFfaW8uaApAQCAtMzcsOCArMzcsMTYgQEAKIAkgICAgICAgMCwgZnJvbV9oZWFkIC0gdG9faGVhZCk7CiB9CiAKLXN0cnVjdCBpbm9kZSAqZ2ZzMl9hc3BhY2VfZ2V0KHN0cnVjdCBnZnMyX3NiZCAqc2RwKTsKLXZvaWQgZ2ZzMl9hc3BhY2VfcHV0KHN0cnVjdCBpbm9kZSAqYXNwYWNlKTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGdmczJfbWV0YV9hb3BzOworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBnZnMyX3NiZCAqZ2ZzMl9tYXBwaW5nMnNiZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKKwlpZiAobWFwcGluZy0+YV9vcHMgPT0gJmdmczJfbWV0YV9hb3BzKQorCQlyZXR1cm4gKCgoc3RydWN0IGdmczJfZ2xvY2sgKiltYXBwaW5nKSAtIDEpLT5nbF9zYmQ7CisJZWxzZQorCQlyZXR1cm4gaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKK30KIAogdm9pZCBnZnMyX21ldGFfc3luYyhzdHJ1Y3QgZ2ZzMl9nbG9jayAqZ2wpOwogCmRpZmYgLS1naXQgYS9mcy9nZnMyL29wc19mc3R5cGUuYyBiL2ZzL2dmczIvb3BzX2ZzdHlwZS5jCmluZGV4IGE4NmVkNjMuLmMxMzA5ZWQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2ZzdHlwZS5jCisrKyBiL2ZzL2dmczIvb3BzX2ZzdHlwZS5jCkBAIC02NSw3ICs2NSw2IEBACiAJZ3QtPmd0X3F1b3RhX3NjYWxlX2RlbiA9IDE7CiAJZ3QtPmd0X25ld19maWxlc19qZGF0YSA9IDA7CiAJZ3QtPmd0X21heF9yZWFkYWhlYWQgPSAxIDw8IDE4OwotCWd0LT5ndF9zdGFsbF9zZWNzID0gNjAwOwogCWd0LT5ndF9jb21wbGFpbl9zZWNzID0gMTA7CiB9CiAKQEAgLTEwMDIsNyArMTAwMSw3IEBACiAvKioKICAqIGdmczJfbG1fbW91bnQgLSBtb3VudCBhIGxvY2tpbmcgcHJvdG9jb2wKICAqIEBzZHA6IHRoZSBmaWxlc3lzdGVtCi0gKiBAYXJnczogbW91bnQgYXJndWVtZW50cworICogQGFyZ3M6IG1vdW50IGFyZ3VtZW50cwogICogQHNpbGVudDogaWYgMSwgZG9uJ3QgY29tcGxhaW4gaWYgdGhlIEZTIGlzbid0IGEgR0ZTMiBmcwogICoKICAqIFJldHVybnM6IGVycm5vCkBAIC0xMjQxLDEwICsxMjQwLDkgQEAKIGZhaWxfbG9ja2luZzoKIAlpbml0X2xvY2tpbmcoc2RwLCAmbW91bnRfZ2gsIFVORE8pOwogZmFpbF9sbToKKwlpbnZhbGlkYXRlX2lub2RlcyhzYik7CiAJZ2ZzMl9nbF9oYXNoX2NsZWFyKHNkcCk7CiAJZ2ZzMl9sbV91bm1vdW50KHNkcCk7Ci0Jd2hpbGUgKGludmFsaWRhdGVfaW5vZGVzKHNiKSkKLQkJeWllbGQoKTsKIGZhaWxfc3lzOgogCWdmczJfc3lzX2ZzX2RlbChzZHApOwogZmFpbDoKZGlmZiAtLWdpdCBhL2ZzL2dmczIvb3BzX2lub2RlLmMgYi9mcy9nZnMyL29wc19pbm9kZS5jCmluZGV4IDg0MzUwZTEuLjRlNjQzNTIgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvb3BzX2lub2RlLmMKKysrIGIvZnMvZ2ZzMi9vcHNfaW5vZGUuYwpAQCAtOTc2LDEwMiArOTc2LDExIEBACiB9CiAKIC8qKgotICogZ2ZzMl9yZWFkbGlua2kgLSByZXR1cm4gdGhlIGNvbnRlbnRzIG9mIGEgc3ltbGluawotICogQGlwOiB0aGUgc3ltbGluaydzIGlub2RlCi0gKiBAYnVmOiBhIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBiZSBmaWxsZWQKLSAqIEBsZW46IGEgcG9pbnRlciB0byB0aGUgbGVuZ3RoIG9mIEBidWYKLSAqCi0gKiBJZiBAYnVmIGlzIHRvbyBzbWFsbCwgYSBwaWVjZSBvZiBtZW1vcnkgaXMga21hbGxvYygpZWQgYW5kIG5lZWRzCi0gKiB0byBiZSBmcmVlZCBieSB0aGUgY2FsbGVyLgotICoKLSAqIFJldHVybnM6IGVycm5vCi0gKi8KLQotc3RhdGljIGludCBnZnMyX3JlYWRsaW5raShzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAsIGNoYXIgKipidWYsIHVuc2lnbmVkIGludCAqbGVuKQotewotCXN0cnVjdCBnZnMyX2hvbGRlciBpX2doOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqZGliaDsKLQl1bnNpZ25lZCBpbnQgeDsKLQlpbnQgZXJyb3I7Ci0KLQlnZnMyX2hvbGRlcl9pbml0KGlwLT5pX2dsLCBMTV9TVF9TSEFSRUQsIDAsICZpX2doKTsKLQllcnJvciA9IGdmczJfZ2xvY2tfbnEoJmlfZ2gpOwotCWlmIChlcnJvcikgewotCQlnZnMyX2hvbGRlcl91bmluaXQoJmlfZ2gpOwotCQlyZXR1cm4gZXJyb3I7Ci0JfQotCi0JaWYgKCFpcC0+aV9kaXNrc2l6ZSkgewotCQlnZnMyX2NvbnNpc3RfaW5vZGUoaXApOwotCQllcnJvciA9IC1FSU87Ci0JCWdvdG8gb3V0OwotCX0KLQotCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihpcCwgJmRpYmgpOwotCWlmIChlcnJvcikKLQkJZ290byBvdXQ7Ci0KLQl4ID0gaXAtPmlfZGlza3NpemUgKyAxOwotCWlmICh4ID4gKmxlbikgewotCQkqYnVmID0ga21hbGxvYyh4LCBHRlBfTk9GUyk7Ci0JCWlmICghKmJ1ZikgewotCQkJZXJyb3IgPSAtRU5PTUVNOwotCQkJZ290byBvdXRfYnJlbHNlOwotCQl9Ci0JfQotCi0JbWVtY3B5KCpidWYsIGRpYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9kaW5vZGUpLCB4KTsKLQkqbGVuID0geDsKLQotb3V0X2JyZWxzZToKLQlicmVsc2UoZGliaCk7Ci1vdXQ6Ci0JZ2ZzMl9nbG9ja19kcV91bmluaXQoJmlfZ2gpOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyoqCi0gKiBnZnMyX3JlYWRsaW5rIC0gUmVhZCB0aGUgdmFsdWUgb2YgYSBzeW1saW5rCi0gKiBAZGVudHJ5OiB0aGUgc3ltbGluawotICogQGJ1ZjogdGhlIGJ1ZmZlciB0byByZWFkIHRoZSBzeW1saW5rIGRhdGEgaW50bwotICogQHNpemU6IHRoZSBzaXplIG9mIHRoZSBidWZmZXIKLSAqCi0gKiBSZXR1cm5zOiBlcnJubwotICovCi0KLXN0YXRpYyBpbnQgZ2ZzMl9yZWFkbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKLQkJCSBpbnQgdXNlcl9zaXplKQotewotCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShkZW50cnktPmRfaW5vZGUpOwotCWNoYXIgYXJyYXlbR0ZTMl9GQVNUX05BTUVfU0laRV0sICpidWYgPSBhcnJheTsKLQl1bnNpZ25lZCBpbnQgbGVuID0gR0ZTMl9GQVNUX05BTUVfU0laRTsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IGdmczJfcmVhZGxpbmtpKGlwLCAmYnVmLCAmbGVuKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKLQotCWlmICh1c2VyX3NpemUgPiBsZW4gLSAxKQotCQl1c2VyX3NpemUgPSBsZW4gLSAxOwotCi0JaWYgKGNvcHlfdG9fdXNlcih1c2VyX2J1ZiwgYnVmLCB1c2VyX3NpemUpKQotCQllcnJvciA9IC1FRkFVTFQ7Ci0JZWxzZQotCQllcnJvciA9IHVzZXJfc2l6ZTsKLQotCWlmIChidWYgIT0gYXJyYXkpCi0JCWtmcmVlKGJ1Zik7Ci0KLQlyZXR1cm4gZXJyb3I7Ci19Ci0KLS8qKgogICogZ2ZzMl9mb2xsb3dfbGluayAtIEZvbGxvdyBhIHN5bWJvbGljIGxpbmsKICAqIEBkZW50cnk6IFRoZSBkZW50cnkgb2YgdGhlIGxpbmsKICAqIEBuZDogRGF0YSB0aGF0IHdlIHBhc3MgdG8gdmZzX2ZvbGxvd19saW5rKCkKICAqCi0gKiBUaGlzIGNhbiBoYW5kbGUgc3ltbGlua3Mgb2YgYW55IHNpemUuIEl0IGlzIG9wdGltaXNlZCBmb3Igc3ltbGlua3MKLSAqIHVuZGVyIEdGUzJfRkFTVF9OQU1FX1NJWkUuCisgKiBUaGlzIGNhbiBoYW5kbGUgc3ltbGlua3Mgb2YgYW55IHNpemUuCiAgKgogICogUmV0dXJuczogMCBvbiBzdWNjZXNzIG9yIGVycm9yIGNvZGUKICAqLwpAQCAtMTA3OSwxOSArOTg4LDUwIEBACiBzdGF0aWMgdm9pZCAqZ2ZzMl9mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShkZW50cnktPmRfaW5vZGUpOwotCWNoYXIgYXJyYXlbR0ZTMl9GQVNUX05BTUVfU0laRV0sICpidWYgPSBhcnJheTsKLQl1bnNpZ25lZCBpbnQgbGVuID0gR0ZTMl9GQVNUX05BTUVfU0laRTsKKwlzdHJ1Y3QgZ2ZzMl9ob2xkZXIgaV9naDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpYmg7CisJdW5zaWduZWQgaW50IHg7CisJY2hhciAqYnVmOwogCWludCBlcnJvcjsKIAotCWVycm9yID0gZ2ZzMl9yZWFkbGlua2koaXAsICZidWYsICZsZW4pOwotCWlmICghZXJyb3IpIHsKLQkJZXJyb3IgPSB2ZnNfZm9sbG93X2xpbmsobmQsIGJ1Zik7Ci0JCWlmIChidWYgIT0gYXJyYXkpCi0JCQlrZnJlZShidWYpOwotCX0gZWxzZQotCQlwYXRoX3B1dCgmbmQtPnBhdGgpOworCWdmczJfaG9sZGVyX2luaXQoaXAtPmlfZ2wsIExNX1NUX1NIQVJFRCwgMCwgJmlfZ2gpOworCWVycm9yID0gZ2ZzMl9nbG9ja19ucSgmaV9naCk7CisJaWYgKGVycm9yKSB7CisJCWdmczJfaG9sZGVyX3VuaW5pdCgmaV9naCk7CisJCW5kX3NldF9saW5rKG5kLCBFUlJfUFRSKGVycm9yKSk7CisJCXJldHVybiBOVUxMOworCX0KIAotCXJldHVybiBFUlJfUFRSKGVycm9yKTsKKwlpZiAoIWlwLT5pX2Rpc2tzaXplKSB7CisJCWdmczJfY29uc2lzdF9pbm9kZShpcCk7CisJCWJ1ZiA9IEVSUl9QVFIoLUVJTyk7CisJCWdvdG8gb3V0OworCX0KKworCWVycm9yID0gZ2ZzMl9tZXRhX2lub2RlX2J1ZmZlcihpcCwgJmRpYmgpOworCWlmIChlcnJvcikgeworCQlidWYgPSBFUlJfUFRSKGVycm9yKTsKKwkJZ290byBvdXQ7CisJfQorCisJeCA9IGlwLT5pX2Rpc2tzaXplICsgMTsKKwlidWYgPSBrbWFsbG9jKHgsIEdGUF9OT0ZTKTsKKwlpZiAoIWJ1ZikKKwkJYnVmID0gRVJSX1BUUigtRU5PTUVNKTsKKwllbHNlCisJCW1lbWNweShidWYsIGRpYmgtPmJfZGF0YSArIHNpemVvZihzdHJ1Y3QgZ2ZzMl9kaW5vZGUpLCB4KTsKKwlicmVsc2UoZGliaCk7CitvdXQ6CisJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmlfZ2gpOworCW5kX3NldF9saW5rKG5kLCBidWYpOworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBnZnMyX3B1dF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IG5hbWVpZGF0YSAqbmQsIHZvaWQgKnApCit7CisJY2hhciAqcyA9IG5kX2dldF9saW5rKG5kKTsKKwlpZiAoIUlTX0VSUihzKSkKKwkJa2ZyZWUocyk7CiB9CiAKIC8qKgpAQCAtMTQyNiw4ICsxMzY2LDkgQEAKIH07CiAKIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGdmczJfc3ltbGlua19pb3BzID0gewotCS5yZWFkbGluayA9IGdmczJfcmVhZGxpbmssCisJLnJlYWRsaW5rID0gZ2VuZXJpY19yZWFkbGluaywKIAkuZm9sbG93X2xpbmsgPSBnZnMyX2ZvbGxvd19saW5rLAorCS5wdXRfbGluayA9IGdmczJfcHV0X2xpbmssCiAJLnBlcm1pc3Npb24gPSBnZnMyX3Blcm1pc3Npb24sCiAJLnNldGF0dHIgPSBnZnMyX3NldGF0dHIsCiAJLmdldGF0dHIgPSBnZnMyX2dldGF0dHIsCmRpZmYgLS1naXQgYS9mcy9nZnMyL3F1b3RhLmMgYi9mcy9nZnMyL3F1b3RhLmMKaW5kZXggZTNiZjZlYS4uNmRiY2JhZCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9xdW90YS5jCisrKyBiL2ZzL2dmczIvcXVvdGEuYwpAQCAtMTA4Myw3ICsxMDgzLDcgQEAKIAl9CiB9CiAKLWludCBnZnMyX3F1b3RhX3N5bmMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCitpbnQgZ2ZzMl9xdW90YV9zeW5jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgd2FpdCkKIHsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IHNiLT5zX2ZzX2luZm87CiAJc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqKnFkYTsKQEAgLTExMjcsNiArMTEyNywxMSBAQAogCXJldHVybiBlcnJvcjsKIH0KIAorc3RhdGljIGludCBnZnMyX3F1b3RhX3N5bmNfdGltZW8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCit7CisJcmV0dXJuIGdmczJfcXVvdGFfc3luYyhzYiwgdHlwZSwgMCk7Cit9CisKIGludCBnZnMyX3F1b3RhX3JlZnJlc2goc3RydWN0IGdmczJfc2JkICpzZHAsIGludCB1c2VyLCB1MzIgaWQpCiB7CiAJc3RydWN0IGdmczJfcXVvdGFfZGF0YSAqcWQ7CkBAIC0xMzgyLDcgKzEzODcsNyBAQAogCQkJCQkgICAmdHVuZS0+Z3Rfc3RhdGZzX3F1YW50dW0pOwogCiAJCS8qIFVwZGF0ZSBxdW90YSBmaWxlICovCi0JCXF1b3RhZF9jaGVja190aW1lbyhzZHAsICJzeW5jIiwgZ2ZzMl9xdW90YV9zeW5jLCB0LAorCQlxdW90YWRfY2hlY2tfdGltZW8oc2RwLCAic3luYyIsIGdmczJfcXVvdGFfc3luY190aW1lbywgdCwKIAkJCQkgICAmcXVvdGFkX3RpbWVvLCAmdHVuZS0+Z3RfcXVvdGFfcXVhbnR1bSk7CiAKIAkJLyogQ2hlY2sgZm9yICYgcmVjb3ZlciBwYXJ0aWFsbHkgdHJ1bmNhdGVkIGlub2RlcyAqLwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9xdW90YS5oIGIvZnMvZ2ZzMi9xdW90YS5oCmluZGV4IGUyNzFmYTAuLjE5NWY2MGMgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvcXVvdGEuaAorKysgYi9mcy9nZnMyL3F1b3RhLmgKQEAgLTI1LDcgKzI1LDcgQEAKIGV4dGVybiB2b2lkIGdmczJfcXVvdGFfY2hhbmdlKHN0cnVjdCBnZnMyX2lub2RlICppcCwgczY0IGNoYW5nZSwKIAkJCSAgICAgIHUzMiB1aWQsIHUzMiBnaWQpOwogCi1leHRlcm4gaW50IGdmczJfcXVvdGFfc3luYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSk7CitleHRlcm4gaW50IGdmczJfcXVvdGFfc3luYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IHdhaXQpOwogZXh0ZXJuIGludCBnZnMyX3F1b3RhX3JlZnJlc2goc3RydWN0IGdmczJfc2JkICpzZHAsIGludCB1c2VyLCB1MzIgaWQpOwogCiBleHRlcm4gaW50IGdmczJfcXVvdGFfaW5pdChzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL3N1cGVyLmMgYi9mcy9nZnMyL3N1cGVyLmMKaW5kZXggYjlkZDNkYS4uNTBhYWM2MCAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zdXBlci5jCisrKyBiL2ZzL2dmczIvc3VwZXIuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KIAogI2luY2x1ZGUgImdmczIuaCIKICNpbmNsdWRlICJpbmNvcmUuaCIKQEAgLTcxMSw3ICs3MTIsNyBAQAogICogUmV0dXJuczogZXJybm8KICAqLwogCi1zdGF0aWMgaW50IGdmczJfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHN5bmMpCitzdGF0aWMgaW50IGdmczJfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CiAJc3RydWN0IGdmczJfaW5vZGUgKmlwID0gR0ZTMl9JKGlub2RlKTsKIAlzdHJ1Y3QgZ2ZzMl9zYmQgKnNkcCA9IEdGUzJfU0IoaW5vZGUpOwpAQCAtNzIyLDggKzcyMyw3IEBACiAJaW50IHJldCA9IDA7CiAKIAkvKiBDaGVjayB0aGlzIGlzIGEgIm5vcm1hbCIgaW5vZGUsIGV0YyAqLwotCWlmICghdGVzdF9iaXQoR0lGX1VTRVIsICZpcC0+aV9mbGFncykgfHwKLQkgICAgKGN1cnJlbnQtPmZsYWdzICYgUEZfTUVNQUxMT0MpKQorCWlmIChjdXJyZW50LT5mbGFncyAmIFBGX01FTUFMTE9DKQogCQlyZXR1cm4gMDsKIAlyZXQgPSBnZnMyX2dsb2NrX25xX2luaXQoaXAtPmlfZ2wsIExNX1NUX0VYQ0xVU0lWRSwgMCwgJmdoKTsKIAlpZiAocmV0KQpAQCAtNzQ2LDcgKzc0Niw3IEBACiBkb191bmxvY2s6CiAJZ2ZzMl9nbG9ja19kcV91bmluaXQoJmdoKTsKIGRvX2ZsdXNoOgotCWlmIChzeW5jICE9IDApCisJaWYgKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMKQogCQlnZnMyX2xvZ19mbHVzaChHRlMyX1NCKGlub2RlKSwgaXAtPmlfZ2wpOwogCXJldHVybiByZXQ7CiB9CkBAIC03NjQsNyArNzY0LDcgQEAKIAlpbnQgZXJyb3I7CiAKIAlmbHVzaF93b3JrcXVldWUoZ2ZzMl9kZWxldGVfd29ya3F1ZXVlKTsKLQlnZnMyX3F1b3RhX3N5bmMoc2RwLT5zZF92ZnMsIDApOworCWdmczJfcXVvdGFfc3luYyhzZHAtPnNkX3ZmcywgMCwgMSk7CiAJZ2ZzMl9zdGF0ZnNfc3luYyhzZHAtPnNkX3ZmcywgMCk7CiAKIAllcnJvciA9IGdmczJfZ2xvY2tfbnFfaW5pdChzZHAtPnNkX3RyYW5zX2dsLCBMTV9TVF9TSEFSRUQsIEdMX05PQ0FDSEUsCkBAIC04NjAsNiArODYwLDcgQEAKIAlnZnMyX2NsZWFyX3JncnBkKHNkcCk7CiAJZ2ZzMl9qaW5kZXhfZnJlZShzZHApOwogCS8qICBUYWtlIGFwYXJ0IGdsb2NrIHN0cnVjdHVyZXMgYW5kIGJ1ZmZlciBsaXN0cyAgKi8KKwlpbnZhbGlkYXRlX2lub2RlcyhzZHAtPnNkX3Zmcyk7CiAJZ2ZzMl9nbF9oYXNoX2NsZWFyKHNkcCk7CiAJLyogIFVubW91bnQgdGhlIGxvY2tpbmcgcHJvdG9jb2wgICovCiAJZ2ZzMl9sbV91bm1vdW50KHNkcCk7CkBAIC0xMTk0LDcgKzExOTUsNyBAQAogewogCXN0cnVjdCBnZnMyX2lub2RlICppcCA9IEdGUzJfSShpbm9kZSk7CiAKLQlpZiAodGVzdF9iaXQoR0lGX1VTRVIsICZpcC0+aV9mbGFncykgJiYgaW5vZGUtPmlfbmxpbmspIHsKKwlpZiAoaW5vZGUtPmlfbmxpbmspIHsKIAkJc3RydWN0IGdmczJfZ2xvY2sgKmdsID0gaXAtPmlfaW9wZW5fZ2guZ2hfZ2w7CiAJCWlmIChnbCAmJiB0ZXN0X2JpdChHTEZfREVNT1RFLCAmZ2wtPmdsX2ZsYWdzKSkKIAkJCWNsZWFyX25saW5rKGlub2RlKTsKQEAgLTEyMTIsMTggKzEyMTMsMTIgQEAKIHsKIAlzdHJ1Y3QgZ2ZzMl9pbm9kZSAqaXAgPSBHRlMyX0koaW5vZGUpOwogCi0JLyogVGhpcyB0ZWxscyB1cyBpdHMgYSAicmVhbCIgaW5vZGUgYW5kIG5vdCBvbmUgd2hpY2ggb25seQotCSAqIHNlcnZlcyB0byBjb250YWluIGFuIGFkZHJlc3Mgc3BhY2UgKHNlZSByZ3JwLmMsIG1ldGFfaW8uYykKLQkgKiB3aGljaCB0aGVyZWZvcmUgZG9lc24ndCBoYXZlIGl0cyBvd24gZ2xvY2tzLgotCSAqLwotCWlmICh0ZXN0X2JpdChHSUZfVVNFUiwgJmlwLT5pX2ZsYWdzKSkgewotCQlpcC0+aV9nbC0+Z2xfb2JqZWN0ID0gTlVMTDsKLQkJZ2ZzMl9nbG9ja19wdXQoaXAtPmlfZ2wpOwotCQlpcC0+aV9nbCA9IE5VTEw7Ci0JCWlmIChpcC0+aV9pb3Blbl9naC5naF9nbCkgewotCQkJaXAtPmlfaW9wZW5fZ2guZ2hfZ2wtPmdsX29iamVjdCA9IE5VTEw7Ci0JCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaXAtPmlfaW9wZW5fZ2gpOwotCQl9CisJaXAtPmlfZ2wtPmdsX29iamVjdCA9IE5VTEw7CisJZ2ZzMl9nbG9ja19wdXQoaXAtPmlfZ2wpOworCWlwLT5pX2dsID0gTlVMTDsKKwlpZiAoaXAtPmlfaW9wZW5fZ2guZ2hfZ2wpIHsKKwkJaXAtPmlfaW9wZW5fZ2guZ2hfZ2wtPmdsX29iamVjdCA9IE5VTEw7CisJCWdmczJfZ2xvY2tfZHFfdW5pbml0KCZpcC0+aV9pb3Blbl9naCk7CiAJfQogfQogCkBAIC0xMzU4LDkgKzEzNTMsNiBAQAogCXN0cnVjdCBnZnMyX2hvbGRlciBnaDsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoIXRlc3RfYml0KEdJRl9VU0VSLCAmaXAtPmlfZmxhZ3MpKQotCQlnb3RvIG91dDsKLQogCWVycm9yID0gZ2ZzMl9nbG9ja19ucV9pbml0KGlwLT5pX2dsLCBMTV9TVF9FWENMVVNJVkUsIDAsICZnaCk7CiAJaWYgKHVubGlrZWx5KGVycm9yKSkgewogCQlnZnMyX2dsb2NrX2RxX3VuaW5pdCgmaXAtPmlfaW9wZW5fZ2gpOwpkaWZmIC0tZ2l0IGEvZnMvZ2ZzMi9zeXMuYyBiL2ZzL2dmczIvc3lzLmMKaW5kZXggMGRjMzQ2Mi4uNDE5MDQyZiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi9zeXMuYworKysgYi9mcy9nZnMyL3N5cy5jCkBAIC00OSw3ICs0OSw3IEBACiAJcmV0dXJuIGEtPnN0b3JlID8gYS0+c3RvcmUoc2RwLCBidWYsIGxlbikgOiBsZW47CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIGdmczJfYXR0cl9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBnZnMyX2F0dHJfb3BzID0gewogCS5zaG93ICA9IGdmczJfYXR0cl9zaG93LAogCS5zdG9yZSA9IGdmczJfYXR0cl9zdG9yZSwKIH07CkBAIC0xNjcsNyArMTY3LDcgQEAKIAlpZiAoc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDApICE9IDEpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZ2ZzMl9xdW90YV9zeW5jKHNkcC0+c2RfdmZzLCAwKTsKKwlnZnMyX3F1b3RhX3N5bmMoc2RwLT5zZF92ZnMsIDAsIDEpOwogCXJldHVybiBsZW47CiB9CiAKQEAgLTQ3OCw3ICs0NzgsNiBAQAogVFVORV9BVFRSKHN0YXRmc19zbG93LCAwKTsKIFRVTkVfQVRUUihuZXdfZmlsZXNfamRhdGEsIDApOwogVFVORV9BVFRSKHF1b3RhX3NpbXVsX3N5bmMsIDEpOwotVFVORV9BVFRSKHN0YWxsX3NlY3MsIDEpOwogVFVORV9BVFRSKHN0YXRmc19xdWFudHVtLCAxKTsKIFRVTkVfQVRUUl8zKHF1b3RhX3NjYWxlLCBxdW90YV9zY2FsZV9zaG93LCBxdW90YV9zY2FsZV9zdG9yZSk7CiAKQEAgLTQ5MSw3ICs0OTAsNiBAQAogCSZ0dW5lX2F0dHJfY29tcGxhaW5fc2Vjcy5hdHRyLAogCSZ0dW5lX2F0dHJfc3RhdGZzX3Nsb3cuYXR0ciwKIAkmdHVuZV9hdHRyX3F1b3RhX3NpbXVsX3N5bmMuYXR0ciwKLQkmdHVuZV9hdHRyX3N0YWxsX3NlY3MuYXR0ciwKIAkmdHVuZV9hdHRyX3N0YXRmc19xdWFudHVtLmF0dHIsCiAJJnR1bmVfYXR0cl9xdW90YV9zY2FsZS5hdHRyLAogCSZ0dW5lX2F0dHJfbmV3X2ZpbGVzX2pkYXRhLmF0dHIsCkBAIC01NzYsNyArNTc0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBrc2V0X3VldmVudF9vcHMgZ2ZzMl91ZXZlbnRfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBrc2V0X3VldmVudF9vcHMgZ2ZzMl91ZXZlbnRfb3BzID0gewogCS51ZXZlbnQgPSBnZnMyX3VldmVudCwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2dmczIvdXRpbC5jIGIvZnMvZ2ZzMi91dGlsLmMKaW5kZXggZjZhN2VmYS4uMjI2ZjJiZiAxMDA2NDQKLS0tIGEvZnMvZ2ZzMi91dGlsLmMKKysrIGIvZnMvZ2ZzMi91dGlsLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJ1dGlsLmgiCiAKIHN0cnVjdCBrbWVtX2NhY2hlICpnZnMyX2dsb2NrX2NhY2hlcCBfX3JlYWRfbW9zdGx5Oworc3RydWN0IGttZW1fY2FjaGUgKmdmczJfZ2xvY2tfYXNwYWNlX2NhY2hlcCBfX3JlYWRfbW9zdGx5Owogc3RydWN0IGttZW1fY2FjaGUgKmdmczJfaW5vZGVfY2FjaGVwIF9fcmVhZF9tb3N0bHk7CiBzdHJ1Y3Qga21lbV9jYWNoZSAqZ2ZzMl9idWZkYXRhX2NhY2hlcCBfX3JlYWRfbW9zdGx5Owogc3RydWN0IGttZW1fY2FjaGUgKmdmczJfcmdycGRfY2FjaGVwIF9fcmVhZF9tb3N0bHk7CmRpZmYgLS1naXQgYS9mcy9nZnMyL3V0aWwuaCBiL2ZzL2dmczIvdXRpbC5oCmluZGV4IDMzZTk2YjAuLmI0MzJlMDQgMTAwNjQ0Ci0tLSBhL2ZzL2dmczIvdXRpbC5oCisrKyBiL2ZzL2dmczIvdXRpbC5oCkBAIC0xNDUsNiArMTQ1LDcgQEAKIAogCiBleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmdmczJfZ2xvY2tfY2FjaGVwOworZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpnZnMyX2dsb2NrX2FzcGFjZV9jYWNoZXA7CiBleHRlcm4gc3RydWN0IGttZW1fY2FjaGUgKmdmczJfaW5vZGVfY2FjaGVwOwogZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpnZnMyX2J1ZmRhdGFfY2FjaGVwOwogZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpnZnMyX3JncnBkX2NhY2hlcDsKZGlmZiAtLWdpdCBhL2ZzL2hmcy9oZnNfZnMuaCBiL2ZzL2hmcy9oZnNfZnMuaAppbmRleCAwNTIzODdlLi5mZTM1ZTNiIDEwMDY0NAotLS0gYS9mcy9oZnMvaGZzX2ZzLmgKKysrIGIvZnMvaGZzL2hmc19mcy5oCkBAIC0xODgsNyArMTg4LDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqaGZzX25ld19pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHFzdHIgKiwgaW50KTsKIGV4dGVybiB2b2lkIGhmc19pbm9kZV93cml0ZV9mb3JrKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaGZzX2V4dGVudCAqLCBfX2JlMzIgKiwgX19iZTMyICopOwotZXh0ZXJuIGludCBoZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICosIGludCk7CitleHRlcm4gaW50IGhmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopOwogZXh0ZXJuIGludCBoZnNfaW5vZGVfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKIGV4dGVybiB2b2lkIGhmc19pbm9kZV9yZWFkX2Zvcmsoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGhmc19leHRlbnQgKmV4dCwKIAkJCV9fYmUzMiBsb2dfc2l6ZSwgX19iZTMyIHBoeXNfc2l6ZSwgdTMyIGNsdW1wX3NpemUpOwpkaWZmIC0tZ2l0IGEvZnMvaGZzL2lub2RlLmMgYi9mcy9oZnMvaW5vZGUuYwppbmRleCBhMWNiZmYyLi4xNGY1Y2IxIDEwMDY0NAotLS0gYS9mcy9oZnMvaW5vZGUuYworKysgYi9mcy9oZnMvaW5vZGUuYwpAQCAtMzgxLDcgKzM4MSw3IEBACiAJCQkJCSBIRlNfU0IoaW5vZGUtPmlfc2IpLT5hbGxvY19ibGtzeik7CiB9CiAKLWludCBoZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHVudXNlZCkKK2ludCBoZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CiAJc3RydWN0IGlub2RlICptYWluX2lub2RlID0gaW5vZGU7CiAJc3RydWN0IGhmc19maW5kX2RhdGEgZmQ7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL3N1cGVyLmMgYi9mcy9oZnNwbHVzL3N1cGVyLmMKaW5kZXggNDMwMjJmMy4uNzRiNDczYSAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9zdXBlci5jCisrKyBiL2ZzL2hmc3BsdXMvc3VwZXIuYwpAQCAtODcsNyArODcsOCBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKLXN0YXRpYyBpbnQgaGZzcGx1c193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdW51c2VkKQorc3RhdGljIGludCBoZnNwbHVzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewogCXN0cnVjdCBoZnNwbHVzX3ZoICp2aGRyOwogCWludCByZXQgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9hbm9kZS5jIGIvZnMvaHBmcy9hbm9kZS5jCmluZGV4IDFhYTg4YzQuLjZhMmYwNGIgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvYW5vZGUuYworKysgYi9mcy9ocGZzL2Fub2RlLmMKQEAgLTM1Myw3ICszNTMsNyBAQAogfQogCiBpbnQgaHBmc19lYV93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHNlY25vIGEsIGludCBhbm8sIHVuc2lnbmVkIHBvcywKLQkgICAgIHVuc2lnbmVkIGxlbiwgY2hhciAqYnVmKQorCSAgICAgdW5zaWduZWQgbGVuLCBjb25zdCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAljaGFyICpkYXRhOwpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9kZW50cnkuYyBiL2ZzL2hwZnMvZGVudHJ5LmMKaW5kZXggOTQwZDZkMS4uNjdkOWQzNiAxMDA2NDQKLS0tIGEvZnMvaHBmcy9kZW50cnkuYworKysgYi9mcy9ocGZzL2RlbnRyeS5jCkBAIC0yMCw4ICsyMCw4IEBACiAKIAlpZiAobCA9PSAxKSBpZiAocXN0ci0+bmFtZVswXT09Jy4nKSBnb3RvIHg7CiAJaWYgKGwgPT0gMikgaWYgKHFzdHItPm5hbWVbMF09PScuJyB8fCBxc3RyLT5uYW1lWzFdPT0nLicpIGdvdG8geDsKLQlocGZzX2FkanVzdF9sZW5ndGgoKGNoYXIgKilxc3RyLT5uYW1lLCAmbCk7Ci0JLyppZiAoaHBmc19jaGtfbmFtZSgoY2hhciAqKXFzdHItPm5hbWUsJmwpKSovCisJaHBmc19hZGp1c3RfbGVuZ3RoKHFzdHItPm5hbWUsICZsKTsKKwkvKmlmIChocGZzX2Noa19uYW1lKHFzdHItPm5hbWUsJmwpKSovCiAJCS8qcmV0dXJuIC1FTkFNRVRPT0xPTkc7Ki8KIAkJLypyZXR1cm4gLUVOT0VOVDsqLwogCXg6CkBAIC0zOCwxNCArMzgsMTYgQEAKIHsKIAl1bnNpZ25lZCBhbD1hLT5sZW47CiAJdW5zaWduZWQgYmw9Yi0+bGVuOwotCWhwZnNfYWRqdXN0X2xlbmd0aCgoY2hhciAqKWEtPm5hbWUsICZhbCk7Ci0JLypocGZzX2FkanVzdF9sZW5ndGgoKGNoYXIgKiliLT5uYW1lLCAmYmwpOyovCisJaHBmc19hZGp1c3RfbGVuZ3RoKGEtPm5hbWUsICZhbCk7CisJLypocGZzX2FkanVzdF9sZW5ndGgoYi0+bmFtZSwgJmJsKTsqLwogCS8qICdhJyBpcyB0aGUgcXN0ciBvZiBhbiBhbHJlYWR5IGV4aXN0aW5nIGRlbnRyeSwgc28gdGhlIG5hbWUKIAkgKiBtdXN0IGJlIHZhbGlkLiAnYicgbXVzdCBiZSB2YWxpZGF0ZWQgZmlyc3QuCiAJICovCiAKLQlpZiAoaHBmc19jaGtfbmFtZSgoY2hhciAqKWItPm5hbWUsICZibCkpIHJldHVybiAxOwotCWlmIChocGZzX2NvbXBhcmVfbmFtZXMoZGVudHJ5LT5kX3NiLCAoY2hhciAqKWEtPm5hbWUsIGFsLCAoY2hhciAqKWItPm5hbWUsIGJsLCAwKSkgcmV0dXJuIDE7CisJaWYgKGhwZnNfY2hrX25hbWUoYi0+bmFtZSwgJmJsKSkKKwkJcmV0dXJuIDE7CisJaWYgKGhwZnNfY29tcGFyZV9uYW1lcyhkZW50cnktPmRfc2IsIGEtPm5hbWUsIGFsLCBiLT5uYW1lLCBibCwgMCkpCisJCXJldHVybiAxOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9ocGZzL2Rpci5jIGIvZnMvaHBmcy9kaXIuYwppbmRleCA4ODY1Yzk0Li4yNmUzOTY0IDEwMDY0NAotLS0gYS9mcy9ocGZzL2Rpci5jCisrKyBiL2ZzL2hwZnMvZGlyLmMKQEAgLTU5LDcgKzU5LDcgQEAKIAlzdHJ1Y3QgaHBmc19kaXJlbnQgKmRlOwogCWludCBsYzsKIAlsb25nIG9sZF9wb3M7Ci0JY2hhciAqdGVtcG5hbWU7CisJdW5zaWduZWQgY2hhciAqdGVtcG5hbWU7CiAJaW50IGMxLCBjMiA9IDA7CiAJaW50IHJldCA9IDA7CiAKQEAgLTE1OCwxMSArMTU4LDExIEBACiAJCXRlbXBuYW1lID0gaHBmc190cmFuc2xhdGVfbmFtZShpbm9kZS0+aV9zYiwgZGUtPm5hbWUsIGRlLT5uYW1lbGVuLCBsYywgZGUtPm5vdF84eDMpOwogCQlpZiAoZmlsbGRpcihkaXJlbnQsIHRlbXBuYW1lLCBkZS0+bmFtZWxlbiwgb2xkX3BvcywgZGUtPmZub2RlLCBEVF9VTktOT1dOKSA8IDApIHsKIAkJCWZpbHAtPmZfcG9zID0gb2xkX3BvczsKLQkJCWlmICh0ZW1wbmFtZSAhPSAoY2hhciAqKWRlLT5uYW1lKSBrZnJlZSh0ZW1wbmFtZSk7CisJCQlpZiAodGVtcG5hbWUgIT0gZGUtPm5hbWUpIGtmcmVlKHRlbXBuYW1lKTsKIAkJCWhwZnNfYnJlbHNlNCgmcWJoKTsKIAkJCWdvdG8gb3V0OwogCQl9Ci0JCWlmICh0ZW1wbmFtZSAhPSAoY2hhciAqKWRlLT5uYW1lKSBrZnJlZSh0ZW1wbmFtZSk7CisJCWlmICh0ZW1wbmFtZSAhPSBkZS0+bmFtZSkga2ZyZWUodGVtcG5hbWUpOwogCQlocGZzX2JyZWxzZTQoJnFiaCk7CiAJfQogb3V0OgpAQCAtMTg3LDcgKzE4Nyw3IEBACiAKIHN0cnVjdCBkZW50cnkgKmhwZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewotCWNvbnN0IGNoYXIgKm5hbWUgPSBkZW50cnktPmRfbmFtZS5uYW1lOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBkZW50cnktPmRfbmFtZS5uYW1lOwogCXVuc2lnbmVkIGxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKIAlzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCBxYmg7CiAJc3RydWN0IGhwZnNfZGlyZW50ICpkZTsKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCXN0cnVjdCBocGZzX2lub2RlX2luZm8gKmhwZnNfcmVzdWx0OwogCiAJbG9ja19rZXJuZWwoKTsKLQlpZiAoKGVyciA9IGhwZnNfY2hrX25hbWUoKGNoYXIgKiluYW1lLCAmbGVuKSkpIHsKKwlpZiAoKGVyciA9IGhwZnNfY2hrX25hbWUobmFtZSwgJmxlbikpKSB7CiAJCWlmIChlcnIgPT0gLUVOQU1FVE9PTE9ORykgewogCQkJdW5sb2NrX2tlcm5lbCgpOwogCQkJcmV0dXJuIEVSUl9QVFIoLUVOQU1FVE9PTE9ORyk7CkBAIC0yMDksNyArMjA5LDcgQEAKIAkgKiAnLicgYW5kICcuLicgd2lsbCBuZXZlciBiZSBwYXNzZWQgaGVyZS4KIAkgKi8KIAotCWRlID0gbWFwX2RpcmVudChkaXIsIGhwZnNfaShkaXIpLT5pX2RubywgKGNoYXIgKikgbmFtZSwgbGVuLCBOVUxMLCAmcWJoKTsKKwlkZSA9IG1hcF9kaXJlbnQoZGlyLCBocGZzX2koZGlyKS0+aV9kbm8sIG5hbWUsIGxlbiwgTlVMTCwgJnFiaCk7CiAKIAkvKgogCSAqIFRoaXMgaXMgbm90IHJlYWxseSBhIGJhaWxvdXQsIGp1c3QgbWVhbnMgZmlsZSBub3QgZm91bmQuCkBAIC0yNTAsNyArMjUwLDcgQEAKIAlocGZzX3Jlc3VsdCA9IGhwZnNfaShyZXN1bHQpOwogCWlmICghZGUtPmRpcmVjdG9yeSkgaHBmc19yZXN1bHQtPmlfcGFyZW50X2RpciA9IGRpci0+aV9pbm87CiAKLQlocGZzX2RlY2lkZV9jb252KHJlc3VsdCwgKGNoYXIgKiluYW1lLCBsZW4pOworCWhwZnNfZGVjaWRlX2NvbnYocmVzdWx0LCBuYW1lLCBsZW4pOwogCiAJaWYgKGRlLT5oYXNfYWNsIHx8IGRlLT5oYXNfeHRkX3Blcm0pIGlmICghKGRpci0+aV9zYi0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKIAkJaHBmc19lcnJvcihyZXN1bHQtPmlfc2IsICJBQ0xzIG9yIFhQRVJNIGZvdW5kLiBUaGlzIGlzIHByb2JhYmx5IEhQRlMzODYuIFRoaXMgZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCBpdCBub3cuIFNlbmQgbWUgc29tZSBpbmZvIG9uIHRoZXNlIHN0cnVjdHVyZXMiKTsKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvZG5vZGUuYyBiL2ZzL2hwZnMvZG5vZGUuYwppbmRleCBmZTgzYzJiLi45YjJmZmFkIDEwMDY0NAotLS0gYS9mcy9ocGZzL2Rub2RlLmMKKysrIGIvZnMvaHBmcy9kbm9kZS5jCkBAIC0xNTgsNyArMTU4LDggQEAKIAogLyogQWRkIGFuIGVudHJ5IHRvIGRub2RlIGFuZCBkb24ndCBjYXJlIGlmIGl0IGdyb3dzIG92ZXIgMjA0OCBieXRlcyAqLwogCi1zdHJ1Y3QgaHBmc19kaXJlbnQgKmhwZnNfYWRkX2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IGRub2RlICpkLCB1bnNpZ25lZCBjaGFyICpuYW1lLAorc3RydWN0IGhwZnNfZGlyZW50ICpocGZzX2FkZF9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHN0cnVjdCBkbm9kZSAqZCwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLAogCQkJCXVuc2lnbmVkIG5hbWVsZW4sIHNlY25vIGRvd25fcHRyKQogewogCXN0cnVjdCBocGZzX2RpcmVudCAqZGU7CkBAIC0yMjMsNyArMjI0LDcgQEAKIC8qIEFkZCBhbiBlbnRyeSB0byBkbm9kZSBhbmQgZG8gZG5vZGUgc3BsaXR0aW5nIGlmIHJlcXVpcmVkICovCiAKIHN0YXRpYyBpbnQgaHBmc19hZGRfdG9fZG5vZGUoc3RydWN0IGlub2RlICppLCBkbm9kZV9zZWNubyBkbm8sCi0JCQkgICAgIHVuc2lnbmVkIGNoYXIgKm5hbWUsIHVuc2lnbmVkIG5hbWVsZW4sCisJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIHVuc2lnbmVkIG5hbWVsZW4sCiAJCQkgICAgIHN0cnVjdCBocGZzX2RpcmVudCAqbmV3X2RlLCBkbm9kZV9zZWNubyBkb3duX3B0cikKIHsKIAlzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCBxYmgsIHFiaDEsIHFiaDI7CkBAIC0yMzEsNyArMjMyLDcgQEAKIAlkbm9kZV9zZWNubyBhZG5vLCByZG5vOwogCXN0cnVjdCBocGZzX2RpcmVudCAqZGU7CiAJc3RydWN0IGhwZnNfZGlyZW50IG5kZTsKLQljaGFyICpubmFtZTsKKwl1bnNpZ25lZCBjaGFyICpubmFtZTsKIAlpbnQgaDsKIAlpbnQgcG9zOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CkBAIC0zMDUsNyArMzA2LDkgQEAKIAkJcG9zKys7CiAJfQogCWNvcHlfZGUobmV3X2RlID0gJm5kZSwgZGUpOwotCW1lbWNweShuYW1lID0gbm5hbWUsIGRlLT5uYW1lLCBuYW1lbGVuID0gZGUtPm5hbWVsZW4pOworCW1lbWNweShubmFtZSwgZGUtPm5hbWUsIGRlLT5uYW1lbGVuKTsKKwluYW1lID0gbm5hbWU7CisJbmFtZWxlbiA9IGRlLT5uYW1lbGVuOwogCWZvcl9hbGxfcG9zcyhpLCBocGZzX3Bvc19zdWJzdCwgKChsb2ZmX3QpZG5vIDw8IDQpIHwgcG9zLCA0KTsKIAlkb3duX3B0ciA9IGFkbm87CiAJc2V0X2xhc3RfcG9pbnRlcihpLT5pX3NiLCBhZCwgZGUtPmRvd24gPyBkZV9kb3duX3BvaW50ZXIoZGUpIDogMCk7CkBAIC0zNjgsNyArMzcxLDggQEAKICAqIEkgaG9wZSwgbm93IGl0J3MgZmluYWxseSBidWctZnJlZS4KICAqLwogCi1pbnQgaHBmc19hZGRfZGlyZW50KHN0cnVjdCBpbm9kZSAqaSwgdW5zaWduZWQgY2hhciAqbmFtZSwgdW5zaWduZWQgbmFtZWxlbiwKK2ludCBocGZzX2FkZF9kaXJlbnQoc3RydWN0IGlub2RlICppLAorCQkgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwgdW5zaWduZWQgbmFtZWxlbiwKIAkJICAgIHN0cnVjdCBocGZzX2RpcmVudCAqbmV3X2RlLCBpbnQgY2RlcHRoKQogewogCXN0cnVjdCBocGZzX2lub2RlX2luZm8gKmhwZnNfaW5vZGUgPSBocGZzX2koaSk7CkBAIC04OTcsNyArOTAxLDggQEAKIAogLyogRmluZCBhIGRpcmVudCBpbiB0cmVlICovCiAKLXN0cnVjdCBocGZzX2RpcmVudCAqbWFwX2RpcmVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkbm9kZV9zZWNubyBkbm8sIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxlbiwKK3N0cnVjdCBocGZzX2RpcmVudCAqbWFwX2RpcmVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBkbm9kZV9zZWNubyBkbm8sCisJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSwgdW5zaWduZWQgbGVuLAogCQkJICAgICAgIGRub2RlX3NlY25vICpkZCwgc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgKnFiaCkKIHsKIAlzdHJ1Y3QgZG5vZGUgKmRub2RlOwpAQCAtOTg4LDggKzk5Myw4IEBACiBzdHJ1Y3QgaHBmc19kaXJlbnQgKm1hcF9mbm9kZV9kaXJlbnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBmbm9kZV9zZWNubyBmbm8sCiAJCQkJICAgICBzdHJ1Y3QgZm5vZGUgKmYsIHN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkICpxYmgpCiB7Ci0JY2hhciAqbmFtZTE7Ci0JY2hhciAqbmFtZTI7CisJdW5zaWduZWQgY2hhciAqbmFtZTE7CisJdW5zaWduZWQgY2hhciAqbmFtZTI7CiAJaW50IG5hbWUxbGVuLCBuYW1lMmxlbjsKIAlzdHJ1Y3QgZG5vZGUgKmQ7CiAJZG5vZGVfc2Vjbm8gZG5vLCBkb3duZDsKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvZWEuYyBiL2ZzL2hwZnMvZWEuYwppbmRleCA1NDdhODM4Li40NWU1M2Q5IDEwMDY0NAotLS0gYS9mcy9ocGZzL2VhLmMKKysrIGIvZnMvaHBmcy9lYS5jCkBAIC02Miw4ICs2Miw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgc2V0X2luZGlyZWN0X2VhKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgaW50IGFubywgc2Vjbm8gYSwgY2hhciAqZGF0YSwKLQkJCSAgICBpbnQgc2l6ZSkKK3N0YXRpYyB2b2lkIHNldF9pbmRpcmVjdF9lYShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGludCBhbm8sIHNlY25vIGEsCisJCQkgICAgY29uc3QgY2hhciAqZGF0YSwgaW50IHNpemUpCiB7CiAJaHBmc19lYV93cml0ZShzLCBhLCBhbm8sIDAsIHNpemUsIGRhdGEpOwogfQpAQCAtMTg2LDcgKzE4Niw4IEBACiAgKiBUaGlzIGRyaXZlciBjYW4ndCBjaGFuZ2Ugc2l6ZXMgb2YgZWFzICgnY2F1c2UgSSBqdXN0IGRvbid0IG5lZWQgaXQpLgogICovCiAKLXZvaWQgaHBmc19zZXRfZWEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZub2RlICpmbm9kZSwgY2hhciAqa2V5LCBjaGFyICpkYXRhLCBpbnQgc2l6ZSkKK3ZvaWQgaHBmc19zZXRfZWEoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZub2RlICpmbm9kZSwgY29uc3QgY2hhciAqa2V5LAorCQkgY29uc3QgY2hhciAqZGF0YSwgaW50IHNpemUpCiB7CiAJZm5vZGVfc2Vjbm8gZm5vID0gaW5vZGUtPmlfaW5vOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IGlub2RlLT5pX3NiOwpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9ocGZzX2ZuLmggYi9mcy9ocGZzL2hwZnNfZm4uaAppbmRleCA3MDFjYTU0Li45N2JmNzM4IDEwMDY0NAotLS0gYS9mcy9ocGZzL2hwZnNfZm4uaAorKysgYi9mcy9ocGZzL2hwZnNfZm4uaApAQCAtMjE1LDcgKzIxNSw3IEBACiBzZWNubyBocGZzX2FkZF9zZWN0b3JfdG9fYnRyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY25vLCBpbnQsIHVuc2lnbmVkKTsKIHZvaWQgaHBmc19yZW1vdmVfYnRyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBicGx1c19oZWFkZXIgKik7CiBpbnQgaHBmc19lYV9yZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzZWNubywgaW50LCB1bnNpZ25lZCwgdW5zaWduZWQsIGNoYXIgKik7Ci1pbnQgaHBmc19lYV93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc2Vjbm8sIGludCwgdW5zaWduZWQsIHVuc2lnbmVkLCBjaGFyICopOworaW50IGhwZnNfZWFfd3JpdGUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY25vLCBpbnQsIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgY2hhciAqKTsKIHZvaWQgaHBmc19lYV9yZW1vdmUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY25vLCBpbnQsIHVuc2lnbmVkKTsKIHZvaWQgaHBmc190cnVuY2F0ZV9idHJlZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc2Vjbm8sIGludCwgdW5zaWduZWQpOwogdm9pZCBocGZzX3JlbW92ZV9mbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgZm5vZGVfc2Vjbm8gZm5vKTsKQEAgLTI0NCwxMyArMjQ0LDE3IEBACiAKIHZvaWQgaHBmc19hZGRfcG9zKHN0cnVjdCBpbm9kZSAqLCBsb2ZmX3QgKik7CiB2b2lkIGhwZnNfZGVsX3BvcyhzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90ICopOwotc3RydWN0IGhwZnNfZGlyZW50ICpocGZzX2FkZF9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGRub2RlICosIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQsIHNlY25vKTsKLWludCBocGZzX2FkZF9kaXJlbnQoc3RydWN0IGlub2RlICosIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQsIHN0cnVjdCBocGZzX2RpcmVudCAqLCBpbnQpOworc3RydWN0IGhwZnNfZGlyZW50ICpocGZzX2FkZF9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGRub2RlICosCisJCQkJY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCwgc2Vjbm8pOworaW50IGhwZnNfYWRkX2RpcmVudChzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCwKKwkJICAgIHN0cnVjdCBocGZzX2RpcmVudCAqLCBpbnQpOwogaW50IGhwZnNfcmVtb3ZlX2RpcmVudChzdHJ1Y3QgaW5vZGUgKiwgZG5vZGVfc2Vjbm8sIHN0cnVjdCBocGZzX2RpcmVudCAqLCBzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCAqLCBpbnQpOwogdm9pZCBocGZzX2NvdW50X2Rub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgZG5vZGVfc2Vjbm8sIGludCAqLCBpbnQgKiwgaW50ICopOwogZG5vZGVfc2Vjbm8gaHBmc19kZV9hc19kb3duX2FzX3Bvc3NpYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBkbm9kZV9zZWNubyBkbm8pOwogc3RydWN0IGhwZnNfZGlyZW50ICptYXBfcG9zX2RpcmVudChzdHJ1Y3QgaW5vZGUgKiwgbG9mZl90ICosIHN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkICopOwotc3RydWN0IGhwZnNfZGlyZW50ICptYXBfZGlyZW50KHN0cnVjdCBpbm9kZSAqLCBkbm9kZV9zZWNubywgY2hhciAqLCB1bnNpZ25lZCwgZG5vZGVfc2Vjbm8gKiwgc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgKik7CitzdHJ1Y3QgaHBmc19kaXJlbnQgKm1hcF9kaXJlbnQoc3RydWN0IGlub2RlICosIGRub2RlX3NlY25vLAorCQkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQsIGRub2RlX3NlY25vICosCisJCQkgICAgICAgc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgKik7CiB2b2lkIGhwZnNfcmVtb3ZlX2R0cmVlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBkbm9kZV9zZWNubyk7CiBzdHJ1Y3QgaHBmc19kaXJlbnQgKm1hcF9mbm9kZV9kaXJlbnQoc3RydWN0IHN1cGVyX2Jsb2NrICosIGZub2RlX3NlY25vLCBzdHJ1Y3QgZm5vZGUgKiwgc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgKik7CiAKQEAgLTI1OSw3ICsyNjMsOCBAQAogdm9pZCBocGZzX2VhX2V4dF9yZW1vdmUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY25vLCBpbnQsIHVuc2lnbmVkKTsKIGludCBocGZzX3JlYWRfZWEoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBmbm9kZSAqLCBjaGFyICosIGNoYXIgKiwgaW50KTsKIGNoYXIgKmhwZnNfZ2V0X2VhKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZm5vZGUgKiwgY2hhciAqLCBpbnQgKik7Ci12b2lkIGhwZnNfc2V0X2VhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZm5vZGUgKiwgY2hhciAqLCBjaGFyICosIGludCk7Cit2b2lkIGhwZnNfc2V0X2VhKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZm5vZGUgKiwgY29uc3QgY2hhciAqLAorCQkgY29uc3QgY2hhciAqLCBpbnQpOwogCiAvKiBmaWxlLmMgKi8KIApAQCAtMjgyLDcgKzI4Nyw3IEBACiAKIHVuc2lnbmVkICpocGZzX21hcF9kbm9kZV9iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkICopOwogdW5zaWduZWQgKmhwZnNfbWFwX2JpdG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQsIHN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkICosIGNoYXIgKik7Ci1jaGFyICpocGZzX2xvYWRfY29kZV9wYWdlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzZWNubyk7Cit1bnNpZ25lZCBjaGFyICpocGZzX2xvYWRfY29kZV9wYWdlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzZWNubyk7CiBzZWNubyAqaHBmc19sb2FkX2JpdG1hcF9kaXJlY3Rvcnkoc3RydWN0IHN1cGVyX2Jsb2NrICosIHNlY25vIGJtcCk7CiBzdHJ1Y3QgZm5vZGUgKmhwZnNfbWFwX2Zub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgaW5vX3QsIHN0cnVjdCBidWZmZXJfaGVhZCAqKik7CiBzdHJ1Y3QgYW5vZGUgKmhwZnNfbWFwX2Fub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgYW5vZGVfc2Vjbm8sIHN0cnVjdCBidWZmZXJfaGVhZCAqKik7CkBAIC0yOTIsMTIgKzI5NywxMyBAQAogLyogbmFtZS5jICovCiAKIHVuc2lnbmVkIGNoYXIgaHBmc191cGNhc2UodW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyKTsKLWludCBocGZzX2Noa19uYW1lKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgKik7Ci1jaGFyICpocGZzX3RyYW5zbGF0ZV9uYW1lKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkLCBpbnQsIGludCk7Ci1pbnQgaHBmc19jb21wYXJlX25hbWVzKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkLCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkLCBpbnQpOwotaW50IGhwZnNfaXNfbmFtZV9sb25nKHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQpOwotdm9pZCBocGZzX2FkanVzdF9sZW5ndGgodW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCAqKTsKLXZvaWQgaHBmc19kZWNpZGVfY29udihzdHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCk7CitpbnQgaHBmc19jaGtfbmFtZShjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkICopOwordW5zaWduZWQgY2hhciAqaHBmc190cmFuc2xhdGVfbmFtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCwgaW50LCBpbnQpOworaW50IGhwZnNfY29tcGFyZV9uYW1lcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCwKKwkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQsIGludCk7CitpbnQgaHBmc19pc19uYW1lX2xvbmcoY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCk7Cit2b2lkIGhwZnNfYWRqdXN0X2xlbmd0aChjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkICopOwordm9pZCBocGZzX2RlY2lkZV9jb252KHN0cnVjdCBpbm9kZSAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkKTsKIAogLyogbmFtZWkuYyAqLwogCmRpZmYgLS1naXQgYS9mcy9ocGZzL2lub2RlLmMgYi9mcy9ocGZzL2lub2RlLmMKaW5kZXggZmU3MDNhZS4uZmY5MGFmZmIgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvaW5vZGUuYworKysgYi9mcy9ocGZzL2lub2RlLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAlzdHJ1Y3QgZm5vZGUgKmZub2RlOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpLT5pX3NiOwogCXN0cnVjdCBocGZzX2lub2RlX2luZm8gKmhwZnNfaW5vZGUgPSBocGZzX2koaSk7Ci0JdW5zaWduZWQgY2hhciAqZWE7CisJdm9pZCAqZWE7CiAJaW50IGVhX3NpemU7CiAKIAlpZiAoIShmbm9kZSA9IGhwZnNfbWFwX2Zub2RlKHNiLCBpLT5pX2lubywgJmJoKSkpIHsKQEAgLTExMiw3ICsxMTIsNyBAQAogCQl9CiAJfQogCWlmIChmbm9kZS0+ZGlyZmxhZykgewotCQl1bnNpZ25lZCBuX2Rub2Rlcywgbl9zdWJkaXJzOworCQlpbnQgbl9kbm9kZXMsIG5fc3ViZGlyczsKIAkJaS0+aV9tb2RlIHw9IFNfSUZESVI7CiAJCWktPmlfb3AgPSAmaHBmc19kaXJfaW9wczsKIAkJaS0+aV9mb3AgPSAmaHBmc19kaXJfb3BzOwpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9tYXAuYyBiL2ZzL2hwZnMvbWFwLmMKaW5kZXggYzQ3MjQ1OC4uODQwZDAzMyAxMDA2NDQKLS0tIGEvZnMvaHBmcy9tYXAuYworKysgYi9mcy9ocGZzL21hcC5jCkBAIC0zNSw3ICszNSw3IEBACiAgKiBsb3dlcmNhc2luZyB0YWJsZQogICovCiAKLWNoYXIgKmhwZnNfbG9hZF9jb2RlX3BhZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzZWNubyBjcHMpCit1bnNpZ25lZCBjaGFyICpocGZzX2xvYWRfY29kZV9wYWdlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc2Vjbm8gY3BzKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc2Vjbm8gY3BkczsKQEAgLTcxLDcgKzcxLDcgQEAKIAkJYnJlbHNlKGJoKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCXB0ciA9IChjaGFyICopY3BkICsgY3BkLT5vZmZzW2NwaV0gKyA2OworCXB0ciA9ICh1bnNpZ25lZCBjaGFyICopY3BkICsgY3BkLT5vZmZzW2NwaV0gKyA2OwogCWlmICghKGNwX3RhYmxlID0ga21hbGxvYygyNTYsIEdGUF9LRVJORUwpKSkgewogCQlwcmludGsoIkhQRlM6IG91dCBvZiBtZW1vcnkgZm9yIGNvZGUgcGFnZSB0YWJsZVxuIik7CiAJCWJyZWxzZShiaCk7CkBAIC0yMTcsNyArMjE3LDcgQEAKIAlpZiAoKGRub2RlID0gaHBmc19tYXBfNHNlY3RvcnMocywgc2Vjbm8sIHFiaCwgRE5PREVfUkRfQUhFQUQpKSkKIAkJaWYgKGhwZnNfc2IocyktPnNiX2NoaykgewogCQkJdW5zaWduZWQgcCwgcHAgPSAwOwotCQkJdW5zaWduZWQgY2hhciAqZCA9IChjaGFyICopZG5vZGU7CisJCQl1bnNpZ25lZCBjaGFyICpkID0gKHVuc2lnbmVkIGNoYXIgKilkbm9kZTsKIAkJCWludCBiID0gMDsKIAkJCWlmIChkbm9kZS0+bWFnaWMgIT0gRE5PREVfTUFHSUMpIHsKIAkJCQlocGZzX2Vycm9yKHMsICJiYWQgbWFnaWMgb24gZG5vZGUgJTA4eCIsIHNlY25vKTsKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvbmFtZS5jIGIvZnMvaHBmcy9uYW1lLmMKaW5kZXggMWY0YTk2NC4uZjI0NzM2ZCAxMDA2NDQKLS0tIGEvZnMvaHBmcy9uYW1lLmMKKysrIGIvZnMvaHBmcy9uYW1lLmMKQEAgLTgsMTYgKzgsMTYgQEAKIAogI2luY2x1ZGUgImhwZnNfZm4uaCIKIAotc3RhdGljIGNoYXIgKnRleHRfcG9zdGZpeFtdPXsKK3N0YXRpYyBjb25zdCBjaGFyICp0ZXh0X3Bvc3RmaXhbXT17CiAiLkFTTSIsICIuQkFTIiwgIi5CQVQiLCAiLkMiLCAiLkNDIiwgIi5DRkciLCAiLkNNRCIsICIuQ09OIiwgIi5DUFAiLCAiLkRFRiIsCiAiLkRPQyIsICIuRFBSIiwgIi5FUlgiLCAiLkgiLCAiLkhQUCIsICIuSFRNIiwgIi5IVE1MIiwgIi5KQVZBIiwgIi5MT0ciLCAiLlBBUyIsCiAiLlJDIiwgIi5URVgiLCAiLlRYVCIsICIuWSIsICIifTsKIAotc3RhdGljIGNoYXIgKnRleHRfcHJlZml4W109eworc3RhdGljIGNvbnN0IGNoYXIgKnRleHRfcHJlZml4W109ewogIkFVVE9FWEVDLiIsICJDSEFOR0VTIiwgIkNPUFlJTkciLCAiQ09ORklHLiIsICJDUkVESVRTIiwgIkZBUSIsICJGSUxFX0lELkRJWiIsCiAiTUFLRUZJTEUiLCAiUkVBRC5NRSIsICJSRUFETUUiLCAiVEVSTUNBUCIsICIifTsKIAotdm9pZCBocGZzX2RlY2lkZV9jb252KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxlbikKK3ZvaWQgaHBmc19kZWNpZGVfY29udihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCB1bnNpZ25lZCBsZW4pCiB7CiAJc3RydWN0IGhwZnNfaW5vZGVfaW5mbyAqaHBmc19pbm9kZSA9IGhwZnNfaShpbm9kZSk7CiAJaW50IGk7CkBAIC03MSw3ICs3MSw3IEBACiAJcmV0dXJuIGRpclthXTsKIH0KIAotaW50IGhwZnNfY2hrX25hbWUodW5zaWduZWQgY2hhciAqbmFtZSwgdW5zaWduZWQgKmxlbikKK2ludCBocGZzX2Noa19uYW1lKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIHVuc2lnbmVkICpsZW4pCiB7CiAJaW50IGk7CiAJaWYgKCpsZW4gPiAyNTQpIHJldHVybiAtRU5BTUVUT09MT05HOwpAQCAtODMsMTAgKzgzLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLWNoYXIgKmhwZnNfdHJhbnNsYXRlX25hbWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCB1bnNpZ25lZCBjaGFyICpmcm9tLAordW5zaWduZWQgY2hhciAqaHBmc190cmFuc2xhdGVfbmFtZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHVuc2lnbmVkIGNoYXIgKmZyb20sCiAJCQkgIHVuc2lnbmVkIGxlbiwgaW50IGxjLCBpbnQgbG5nKQogewotCWNoYXIgKnRvOworCXVuc2lnbmVkIGNoYXIgKnRvOwogCWludCBpOwogCWlmIChocGZzX3NiKHMpLT5zYl9jaGsgPj0gMikgaWYgKGhwZnNfaXNfbmFtZV9sb25nKGZyb20sIGxlbikgIT0gbG5nKSB7CiAJCXByaW50aygiSFBGUzogTG9uZyBuYW1lIGZsYWcgbWlzbWF0Y2ggLSBuYW1lICIpOwpAQCAtMTAzLDggKzEwMyw5IEBACiAJcmV0dXJuIHRvOwogfQogCi1pbnQgaHBmc19jb21wYXJlX25hbWVzKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgdW5zaWduZWQgY2hhciAqbjEsIHVuc2lnbmVkIGwxLAotCQkgICAgICAgdW5zaWduZWQgY2hhciAqbjIsIHVuc2lnbmVkIGwyLCBpbnQgbGFzdCkKK2ludCBocGZzX2NvbXBhcmVfbmFtZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzLAorCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbjEsIHVuc2lnbmVkIGwxLAorCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbjIsIHVuc2lnbmVkIGwyLCBpbnQgbGFzdCkKIHsKIAl1bnNpZ25lZCBsID0gbDEgPCBsMiA/IGwxIDogbDI7CiAJdW5zaWduZWQgaTsKQEAgLTEyMCw3ICsxMjEsNyBAQAogCXJldHVybiAwOwogfQogCi1pbnQgaHBmc19pc19uYW1lX2xvbmcodW5zaWduZWQgY2hhciAqbmFtZSwgdW5zaWduZWQgbGVuKQoraW50IGhwZnNfaXNfbmFtZV9sb25nKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxlbikKIHsKIAlpbnQgaSxqOwogCWZvciAoaSA9IDA7IGkgPCBsZW4gJiYgbmFtZVtpXSAhPSAnLic7IGkrKykKQEAgLTEzNCw3ICsxMzUsNyBAQAogCiAvKiBPUy8yIGNsZWFycyBkb3RzIGFuZCBzcGFjZXMgYXQgdGhlIGVuZCBvZiBmaWxlIG5hbWUsIHNvIHdlIGhhdmUgdG8gKi8KIAotdm9pZCBocGZzX2FkanVzdF9sZW5ndGgodW5zaWduZWQgY2hhciAqbmFtZSwgdW5zaWduZWQgKmxlbikKK3ZvaWQgaHBmc19hZGp1c3RfbGVuZ3RoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIHVuc2lnbmVkICpsZW4pCiB7CiAJaWYgKCEqbGVuKSByZXR1cm47CiAJaWYgKCpsZW4gPT0gMSAmJiBuYW1lWzBdID09ICcuJykgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9uYW1laS5jIGIvZnMvaHBmcy9uYW1laS5jCmluZGV4IDgyYjljNGIuLjExYzJiNDAgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvbmFtZWkuYworKysgYi9mcy9ocGZzL25hbWVpLmMKQEAgLTExLDcgKzExLDcgQEAKIAogc3RhdGljIGludCBocGZzX21rZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlKQogewotCWNvbnN0IGNoYXIgKm5hbWUgPSBkZW50cnktPmRfbmFtZS5uYW1lOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBkZW50cnktPmRfbmFtZS5uYW1lOwogCXVuc2lnbmVkIGxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKIAlzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCBxYmgwOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CkBAIC0yNCw3ICsyNCw3IEBACiAJaW50IHI7CiAJc3RydWN0IGhwZnNfZGlyZW50IGRlZTsKIAlpbnQgZXJyOwotCWlmICgoZXJyID0gaHBmc19jaGtfbmFtZSgoY2hhciAqKW5hbWUsICZsZW4pKSkgcmV0dXJuIGVycj09LUVOT0VOVCA/IC1FSU5WQUwgOiBlcnI7CisJaWYgKChlcnIgPSBocGZzX2Noa19uYW1lKG5hbWUsICZsZW4pKSkgcmV0dXJuIGVycj09LUVOT0VOVCA/IC1FSU5WQUwgOiBlcnI7CiAJbG9ja19rZXJuZWwoKTsKIAllcnIgPSAtRU5PU1BDOwogCWZub2RlID0gaHBmc19hbGxvY19mbm9kZShkaXItPmlfc2IsIGhwZnNfaShkaXIpLT5pX2RubywgJmZubywgJmJoKTsKQEAgLTYyLDcgKzYyLDcgQEAKIAkJcmVzdWx0LT5pX21vZGUgJj0gfjAyMjI7CiAKIAltdXRleF9sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7Ci0JciA9IGhwZnNfYWRkX2RpcmVudChkaXIsIChjaGFyICopbmFtZSwgbGVuLCAmZGVlLCAwKTsKKwlyID0gaHBmc19hZGRfZGlyZW50KGRpciwgbmFtZSwgbGVuLCAmZGVlLCAwKTsKIAlpZiAociA9PSAxKQogCQlnb3RvIGJhaWwzOwogCWlmIChyID09IC0xKSB7CkBAIC0xMjEsNyArMTIxLDcgQEAKIAogc3RhdGljIGludCBocGZzX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwgc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0JY29uc3QgY2hhciAqbmFtZSA9IGRlbnRyeS0+ZF9uYW1lLm5hbWU7CisJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSA9IGRlbnRyeS0+ZF9uYW1lLm5hbWU7CiAJdW5zaWduZWQgbGVuID0gZGVudHJ5LT5kX25hbWUubGVuOwogCXN0cnVjdCBpbm9kZSAqcmVzdWx0ID0gTlVMTDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwpAQCAtMTMwLDcgKzEzMCw3IEBACiAJaW50IHI7CiAJc3RydWN0IGhwZnNfZGlyZW50IGRlZTsKIAlpbnQgZXJyOwotCWlmICgoZXJyID0gaHBmc19jaGtfbmFtZSgoY2hhciAqKW5hbWUsICZsZW4pKSkKKwlpZiAoKGVyciA9IGhwZnNfY2hrX25hbWUobmFtZSwgJmxlbikpKQogCQlyZXR1cm4gZXJyPT0tRU5PRU5UID8gLUVJTlZBTCA6IGVycjsKIAlsb2NrX2tlcm5lbCgpOwogCWVyciA9IC1FTk9TUEM7CkBAIC0xNTUsNyArMTU1LDcgQEAKIAlyZXN1bHQtPmlfb3AgPSAmaHBmc19maWxlX2lvcHM7CiAJcmVzdWx0LT5pX2ZvcCA9ICZocGZzX2ZpbGVfb3BzOwogCXJlc3VsdC0+aV9ubGluayA9IDE7Ci0JaHBmc19kZWNpZGVfY29udihyZXN1bHQsIChjaGFyICopbmFtZSwgbGVuKTsKKwlocGZzX2RlY2lkZV9jb252KHJlc3VsdCwgbmFtZSwgbGVuKTsKIAlocGZzX2kocmVzdWx0KS0+aV9wYXJlbnRfZGlyID0gZGlyLT5pX2lubzsKIAlyZXN1bHQtPmlfY3RpbWUudHZfc2VjID0gcmVzdWx0LT5pX210aW1lLnR2X3NlYyA9IHJlc3VsdC0+aV9hdGltZS50dl9zZWMgPSBsb2NhbF90b19nbXQoZGlyLT5pX3NiLCBkZWUuY3JlYXRpb25fZGF0ZSk7CiAJcmVzdWx0LT5pX2N0aW1lLnR2X25zZWMgPSAwOwpAQCAtMTcwLDcgKzE3MCw3IEBACiAJaHBmc19pKHJlc3VsdCktPm1tdV9wcml2YXRlID0gMDsKIAogCW11dGV4X2xvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKLQlyID0gaHBmc19hZGRfZGlyZW50KGRpciwgKGNoYXIgKiluYW1lLCBsZW4sICZkZWUsIDApOworCXIgPSBocGZzX2FkZF9kaXJlbnQoZGlyLCBuYW1lLCBsZW4sICZkZWUsIDApOwogCWlmIChyID09IDEpCiAJCWdvdG8gYmFpbDI7CiAJaWYgKHIgPT0gLTEpIHsKQEAgLTIxMSw3ICsyMTEsNyBAQAogCiBzdGF0aWMgaW50IGhwZnNfbWtub2Qoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsIGRldl90IHJkZXYpCiB7Ci0JY29uc3QgY2hhciAqbmFtZSA9IGRlbnRyeS0+ZF9uYW1lLm5hbWU7CisJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSA9IGRlbnRyeS0+ZF9uYW1lLm5hbWU7CiAJdW5zaWduZWQgbGVuID0gZGVudHJ5LT5kX25hbWUubGVuOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IGZub2RlICpmbm9kZTsKQEAgLTIyMCw3ICsyMjAsNyBAQAogCXN0cnVjdCBocGZzX2RpcmVudCBkZWU7CiAJc3RydWN0IGlub2RlICpyZXN1bHQgPSBOVUxMOwogCWludCBlcnI7Ci0JaWYgKChlcnIgPSBocGZzX2Noa19uYW1lKChjaGFyICopbmFtZSwgJmxlbikpKSByZXR1cm4gZXJyPT0tRU5PRU5UID8gLUVJTlZBTCA6IGVycjsKKwlpZiAoKGVyciA9IGhwZnNfY2hrX25hbWUobmFtZSwgJmxlbikpKSByZXR1cm4gZXJyPT0tRU5PRU5UID8gLUVJTlZBTCA6IGVycjsKIAlpZiAoaHBmc19zYihkaXItPmlfc2IpLT5zYl9lYXMgPCAyKSByZXR1cm4gLUVQRVJNOwogCWlmICghbmV3X3ZhbGlkX2RldihyZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNTYsNyArMjU2LDcgQEAKIAlpbml0X3NwZWNpYWxfaW5vZGUocmVzdWx0LCBtb2RlLCByZGV2KTsKIAogCW11dGV4X2xvY2soJmhwZnNfaShkaXIpLT5pX211dGV4KTsKLQlyID0gaHBmc19hZGRfZGlyZW50KGRpciwgKGNoYXIgKiluYW1lLCBsZW4sICZkZWUsIDApOworCXIgPSBocGZzX2FkZF9kaXJlbnQoZGlyLCBuYW1lLCBsZW4sICZkZWUsIDApOwogCWlmIChyID09IDEpCiAJCWdvdG8gYmFpbDI7CiAJaWYgKHIgPT0gLTEpIHsKQEAgLTI4OSw3ICsyODksNyBAQAogCiBzdGF0aWMgaW50IGhwZnNfc3ltbGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpzeW1saW5rKQogewotCWNvbnN0IGNoYXIgKm5hbWUgPSBkZW50cnktPmRfbmFtZS5uYW1lOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBkZW50cnktPmRfbmFtZS5uYW1lOwogCXVuc2lnbmVkIGxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXN0cnVjdCBmbm9kZSAqZm5vZGU7CkBAIC0yOTgsNyArMjk4LDcgQEAKIAlzdHJ1Y3QgaHBmc19kaXJlbnQgZGVlOwogCXN0cnVjdCBpbm9kZSAqcmVzdWx0OwogCWludCBlcnI7Ci0JaWYgKChlcnIgPSBocGZzX2Noa19uYW1lKChjaGFyICopbmFtZSwgJmxlbikpKSByZXR1cm4gZXJyPT0tRU5PRU5UID8gLUVJTlZBTCA6IGVycjsKKwlpZiAoKGVyciA9IGhwZnNfY2hrX25hbWUobmFtZSwgJmxlbikpKSByZXR1cm4gZXJyPT0tRU5PRU5UID8gLUVJTlZBTCA6IGVycjsKIAlsb2NrX2tlcm5lbCgpOwogCWlmIChocGZzX3NiKGRpci0+aV9zYiktPnNiX2VhcyA8IDIpIHsKIAkJdW5sb2NrX2tlcm5lbCgpOwpAQCAtMzM1LDcgKzMzNSw3IEBACiAJcmVzdWx0LT5pX2RhdGEuYV9vcHMgPSAmaHBmc19zeW1saW5rX2FvcHM7CiAKIAltdXRleF9sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7Ci0JciA9IGhwZnNfYWRkX2RpcmVudChkaXIsIChjaGFyICopbmFtZSwgbGVuLCAmZGVlLCAwKTsKKwlyID0gaHBmc19hZGRfZGlyZW50KGRpciwgbmFtZSwgbGVuLCAmZGVlLCAwKTsKIAlpZiAociA9PSAxKQogCQlnb3RvIGJhaWwyOwogCWlmIChyID09IC0xKSB7CkBAIC0zNDUsNyArMzQ1LDcgQEAKIAlmbm9kZS0+bGVuID0gbGVuOwogCW1lbWNweShmbm9kZS0+bmFtZSwgbmFtZSwgbGVuID4gMTUgPyAxNSA6IGxlbik7CiAJZm5vZGUtPnVwID0gZGlyLT5pX2lubzsKLQlocGZzX3NldF9lYShyZXN1bHQsIGZub2RlLCAiU1lNTElOSyIsIChjaGFyICopc3ltbGluaywgc3RybGVuKHN5bWxpbmspKTsKKwlocGZzX3NldF9lYShyZXN1bHQsIGZub2RlLCAiU1lNTElOSyIsIHN5bWxpbmssIHN0cmxlbihzeW1saW5rKSk7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwogCWJyZWxzZShiaCk7CiAKQEAgLTM2OSw3ICszNjksNyBAQAogCiBzdGF0aWMgaW50IGhwZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7Ci0JY29uc3QgY2hhciAqbmFtZSA9IGRlbnRyeS0+ZF9uYW1lLm5hbWU7CisJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSA9IGRlbnRyeS0+ZF9uYW1lLm5hbWU7CiAJdW5zaWduZWQgbGVuID0gZGVudHJ5LT5kX25hbWUubGVuOwogCXN0cnVjdCBxdWFkX2J1ZmZlcl9oZWFkIHFiaDsKIAlzdHJ1Y3QgaHBmc19kaXJlbnQgKmRlOwpAQCAtMzgxLDEyICszODEsMTIgQEAKIAlpbnQgZXJyOwogCiAJbG9ja19rZXJuZWwoKTsKLQlocGZzX2FkanVzdF9sZW5ndGgoKGNoYXIgKiluYW1lLCAmbGVuKTsKKwlocGZzX2FkanVzdF9sZW5ndGgobmFtZSwgJmxlbik7CiBhZ2FpbjoKIAltdXRleF9sb2NrKCZocGZzX2koaW5vZGUpLT5pX3BhcmVudF9tdXRleCk7CiAJbXV0ZXhfbG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwogCWVyciA9IC1FTk9FTlQ7Ci0JZGUgPSBtYXBfZGlyZW50KGRpciwgaHBmc19pKGRpciktPmlfZG5vLCAoY2hhciAqKW5hbWUsIGxlbiwgJmRubywgJnFiaCk7CisJZGUgPSBtYXBfZGlyZW50KGRpciwgaHBmc19pKGRpciktPmlfZG5vLCBuYW1lLCBsZW4sICZkbm8sICZxYmgpOwogCWlmICghZGUpCiAJCWdvdG8gb3V0OwogCkBAIC00MTMsMjIgKzQxMywyNSBAQAogCiAJCW11dGV4X3VubG9jaygmaHBmc19pKGRpciktPmlfbXV0ZXgpOwogCQltdXRleF91bmxvY2soJmhwZnNfaShpbm9kZSktPmlfcGFyZW50X211dGV4KTsKLQkJZF9kcm9wKGRlbnRyeSk7Ci0JCXNwaW5fbG9jaygmZGVudHJ5LT5kX2xvY2spOwotCQlpZiAoYXRvbWljX3JlYWQoJmRlbnRyeS0+ZF9jb3VudCkgPiAxIHx8Ci0JCSAgICBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIE1BWV9XUklURSwgTlVMTCkgfHwKKwkJZGVudHJ5X3VuaGFzaChkZW50cnkpOworCQlpZiAoIWRfdW5oYXNoZWQoZGVudHJ5KSkgeworCQkJZHB1dChkZW50cnkpOworCQkJdW5sb2NrX2tlcm5lbCgpOworCQkJcmV0dXJuIC1FTk9TUEM7CisJCX0KKwkJaWYgKGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgTUFZX1dSSVRFLCBOVUxMKSB8fAogCQkgICAgIVNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgfHwKIAkJICAgIGdldF93cml0ZV9hY2Nlc3MoaW5vZGUpKSB7Ci0JCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCQkJZF9yZWhhc2goZGVudHJ5KTsKKwkJCWRwdXQoZGVudHJ5KTsKIAkJfSBlbHNlIHsKIAkJCXN0cnVjdCBpYXR0ciBuZXdhdHRyczsKLQkJCXNwaW5fdW5sb2NrKCZkZW50cnktPmRfbG9jayk7CiAJCQkvKnByaW50aygiSFBGUzogdHJ1bmNhdGluZyBmaWxlIGJlZm9yZSBkZWxldGUuXG4iKTsqLwogCQkJbmV3YXR0cnMuaWFfc2l6ZSA9IDA7CiAJCQluZXdhdHRycy5pYV92YWxpZCA9IEFUVFJfU0laRSB8IEFUVFJfQ1RJTUU7CiAJCQllcnIgPSBub3RpZnlfY2hhbmdlKGRlbnRyeSwgJm5ld2F0dHJzKTsKIAkJCXB1dF93cml0ZV9hY2Nlc3MoaW5vZGUpOworCQkJZHB1dChkZW50cnkpOwogCQkJaWYgKCFlcnIpCiAJCQkJZ290byBhZ2FpbjsKIAkJfQpAQCAtNDUxLDcgKzQ1NCw3IEBACiAKIHN0YXRpYyBpbnQgaHBmc19ybWRpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCWNvbnN0IGNoYXIgKm5hbWUgPSBkZW50cnktPmRfbmFtZS5uYW1lOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBkZW50cnktPmRfbmFtZS5uYW1lOwogCXVuc2lnbmVkIGxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKIAlzdHJ1Y3QgcXVhZF9idWZmZXJfaGVhZCBxYmg7CiAJc3RydWN0IGhwZnNfZGlyZW50ICpkZTsKQEAgLTQ2MiwxMiArNDY1LDEyIEBACiAJaW50IGVycjsKIAlpbnQgcjsKIAotCWhwZnNfYWRqdXN0X2xlbmd0aCgoY2hhciAqKW5hbWUsICZsZW4pOworCWhwZnNfYWRqdXN0X2xlbmd0aChuYW1lLCAmbGVuKTsKIAlsb2NrX2tlcm5lbCgpOwogCW11dGV4X2xvY2soJmhwZnNfaShpbm9kZSktPmlfcGFyZW50X211dGV4KTsKIAltdXRleF9sb2NrKCZocGZzX2koZGlyKS0+aV9tdXRleCk7CiAJZXJyID0gLUVOT0VOVDsKLQlkZSA9IG1hcF9kaXJlbnQoZGlyLCBocGZzX2koZGlyKS0+aV9kbm8sIChjaGFyICopbmFtZSwgbGVuLCAmZG5vLCAmcWJoKTsKKwlkZSA9IG1hcF9kaXJlbnQoZGlyLCBocGZzX2koZGlyKS0+aV9kbm8sIG5hbWUsIGxlbiwgJmRubywgJnFiaCk7CiAJaWYgKCFkZSkKIAkJZ290byBvdXQ7CiAKQEAgLTU0NiwxMCArNTQ5LDEwIEBACiBzdGF0aWMgaW50IGhwZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqb2xkX2Rpciwgc3RydWN0IGRlbnRyeSAqb2xkX2RlbnRyeSwKIAkJc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQogewotCWNoYXIgKm9sZF9uYW1lID0gKGNoYXIgKilvbGRfZGVudHJ5LT5kX25hbWUubmFtZTsKLQlpbnQgb2xkX2xlbiA9IG9sZF9kZW50cnktPmRfbmFtZS5sZW47Ci0JY2hhciAqbmV3X25hbWUgPSAoY2hhciAqKW5ld19kZW50cnktPmRfbmFtZS5uYW1lOwotCWludCBuZXdfbGVuID0gbmV3X2RlbnRyeS0+ZF9uYW1lLmxlbjsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfbmFtZSA9IG9sZF9kZW50cnktPmRfbmFtZS5uYW1lOworCXVuc2lnbmVkIG9sZF9sZW4gPSBvbGRfZGVudHJ5LT5kX25hbWUubGVuOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5ld19uYW1lID0gbmV3X2RlbnRyeS0+ZF9uYW1lLm5hbWU7CisJdW5zaWduZWQgbmV3X2xlbiA9IG5ld19kZW50cnktPmRfbmFtZS5sZW47CiAJc3RydWN0IGlub2RlICppID0gb2xkX2RlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgaW5vZGUgKm5ld19pbm9kZSA9IG5ld19kZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IHF1YWRfYnVmZmVyX2hlYWQgcWJoLCBxYmgxOwpAQCAtNTYwLDkgKzU2Myw5IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlzdHJ1Y3QgZm5vZGUgKmZub2RlOwogCWludCBlcnI7Ci0JaWYgKChlcnIgPSBocGZzX2Noa19uYW1lKChjaGFyICopbmV3X25hbWUsICZuZXdfbGVuKSkpIHJldHVybiBlcnI7CisJaWYgKChlcnIgPSBocGZzX2Noa19uYW1lKG5ld19uYW1lLCAmbmV3X2xlbikpKSByZXR1cm4gZXJyOwogCWVyciA9IDA7Ci0JaHBmc19hZGp1c3RfbGVuZ3RoKChjaGFyICopb2xkX25hbWUsICZvbGRfbGVuKTsKKwlocGZzX2FkanVzdF9sZW5ndGgob2xkX25hbWUsICZvbGRfbGVuKTsKIAogCWxvY2tfa2VybmVsKCk7CiAJLyogb3JkZXIgZG9lc24ndCBtYXR0ZXIsIGR1ZSB0byBWRlMgZXhjbHVzaW9uICovCkBAIC01NzksNyArNTgyLDcgQEAKIAkJZ290byBlbmQxOwogCX0KIAotCWlmICghKGRlcCA9IG1hcF9kaXJlbnQob2xkX2RpciwgaHBmc19pKG9sZF9kaXIpLT5pX2RubywgKGNoYXIgKilvbGRfbmFtZSwgb2xkX2xlbiwgJmRubywgJnFiaCkpKSB7CisJaWYgKCEoZGVwID0gbWFwX2RpcmVudChvbGRfZGlyLCBocGZzX2kob2xkX2RpciktPmlfZG5vLCBvbGRfbmFtZSwgb2xkX2xlbiwgJmRubywgJnFiaCkpKSB7CiAJCWhwZnNfZXJyb3IoaS0+aV9zYiwgImxvb2t1cCBzdWNjZWVkZWQgYnV0IG1hcCBkaXJlbnQgZmFpbGVkIik7CiAJCWVyciA9IC1FTk9FTlQ7CiAJCWdvdG8gZW5kMTsKQEAgLTU5MCw3ICs1OTMsNyBAQAogCWlmIChuZXdfaW5vZGUpIHsKIAkJaW50IHI7CiAJCWlmICgociA9IGhwZnNfcmVtb3ZlX2RpcmVudChvbGRfZGlyLCBkbm8sIGRlcCwgJnFiaCwgMSkpICE9IDIpIHsKLQkJCWlmICgobmRlID0gbWFwX2RpcmVudChuZXdfZGlyLCBocGZzX2kobmV3X2RpciktPmlfZG5vLCAoY2hhciAqKW5ld19uYW1lLCBuZXdfbGVuLCBOVUxMLCAmcWJoMSkpKSB7CisJCQlpZiAoKG5kZSA9IG1hcF9kaXJlbnQobmV3X2RpciwgaHBmc19pKG5ld19kaXIpLT5pX2RubywgbmV3X25hbWUsIG5ld19sZW4sIE5VTEwsICZxYmgxKSkpIHsKIAkJCQljbGVhcl9ubGluayhuZXdfaW5vZGUpOwogCQkJCWNvcHlfZGUobmRlLCAmZGUpOwogCQkJCW1lbWNweShuZGUtPm5hbWUsIG5ld19uYW1lLCBuZXdfbGVuKTsKQEAgLTYxOCw3ICs2MjEsNyBAQAogCX0KIAkKIAlpZiAobmV3X2RpciA9PSBvbGRfZGlyKQotCQlpZiAoIShkZXAgPSBtYXBfZGlyZW50KG9sZF9kaXIsIGhwZnNfaShvbGRfZGlyKS0+aV9kbm8sIChjaGFyICopb2xkX25hbWUsIG9sZF9sZW4sICZkbm8sICZxYmgpKSkgeworCQlpZiAoIShkZXAgPSBtYXBfZGlyZW50KG9sZF9kaXIsIGhwZnNfaShvbGRfZGlyKS0+aV9kbm8sIG9sZF9uYW1lLCBvbGRfbGVuLCAmZG5vLCAmcWJoKSkpIHsKIAkJCWhwZnNfdW5sb2NrX2NyZWF0aW9uKGktPmlfc2IpOwogCQkJaHBmc19lcnJvcihpLT5pX3NiLCAibG9va3VwIHN1Y2NlZWRlZCBidXQgbWFwIGRpcmVudCBmYWlsZWQgYXQgIzIiKTsKIAkJCWVyciA9IC1FTk9FTlQ7CkBAIC02NDgsNyArNjUxLDcgQEAKIAkJYnJlbHNlKGJoKTsKIAl9CiAJaHBmc19pKGkpLT5pX2NvbnYgPSBocGZzX3NiKGktPmlfc2IpLT5zYl9jb252OwotCWhwZnNfZGVjaWRlX2NvbnYoaSwgKGNoYXIgKiluZXdfbmFtZSwgbmV3X2xlbik7CisJaHBmc19kZWNpZGVfY29udihpLCBuZXdfbmFtZSwgbmV3X2xlbik7CiBlbmQxOgogCWlmIChvbGRfZGlyICE9IG5ld19kaXIpCiAJCW11dGV4X3VubG9jaygmaHBmc19pKG5ld19kaXIpLT5pX211dGV4KTsKZGlmZiAtLWdpdCBhL2ZzL2hwcGZzL2hwcGZzLmMgYi9mcy9ocHBmcy9ocHBmcy5jCmluZGV4IDcyMzllZmMuLjJlNGRmYTggMTAwNjQ0Ci0tLSBhL2ZzL2hwcGZzL2hwcGZzLmMKKysrIGIvZnMvaHBwZnMvaHBwZnMuYwpAQCAtNzE4LDcgKzcxOCw3IEBACiAJc3RydWN0IHZmc21vdW50ICpwcm9jX21udDsKIAlpbnQgZXJyID0gLUVOT0VOVDsKIAotCXByb2NfbW50ID0gZG9fa2Vybl9tb3VudCgicHJvYyIsIDAsICJwcm9jIiwgTlVMTCk7CisJcHJvY19tbnQgPSBtbnRnZXQoY3VycmVudC0+bnNwcm94eS0+cGlkX25zLT5wcm9jX21udCk7CiAJaWYgKElTX0VSUihwcm9jX21udCkpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9mcy9pbm9kZS5jIGIvZnMvaW5vZGUuYwppbmRleCAwM2RmZWIyLi40MDdiZjM5IDEwMDY0NAotLS0gYS9mcy9pbm9kZS5jCisrKyBiL2ZzL2lub2RlLmMKQEAgLTgsNyArOCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9kY2FjaGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0zMTQsNyArMzEzLDYgQEAKIAlCVUdfT04oIShpbm9kZS0+aV9zdGF0ZSAmIElfRlJFRUlORykpOwogCUJVR19PTihpbm9kZS0+aV9zdGF0ZSAmIElfQ0xFQVIpOwogCWlub2RlX3N5bmNfd2FpdChpbm9kZSk7Ci0JdmZzX2RxX2Ryb3AoaW5vZGUpOwogCWlmIChpbm9kZS0+aV9zYi0+c19vcC0+Y2xlYXJfaW5vZGUpCiAJCWlub2RlLT5pX3NiLT5zX29wLT5jbGVhcl9pbm9kZShpbm9kZSk7CiAJaWYgKFNfSVNCTEsoaW5vZGUtPmlfbW9kZSkgJiYgaW5vZGUtPmlfYmRldikKQEAgLTEyMTEsOCArMTIwOSw2IEBACiAKIAlpZiAob3AtPmRlbGV0ZV9pbm9kZSkgewogCQl2b2lkICgqZGVsZXRlKShzdHJ1Y3QgaW5vZGUgKikgPSBvcC0+ZGVsZXRlX2lub2RlOwotCQlpZiAoIWlzX2JhZF9pbm9kZShpbm9kZSkpCi0JCQl2ZnNfZHFfaW5pdChpbm9kZSk7CiAJCS8qIEZpbGVzeXN0ZW1zIGltcGxlbWVudGluZyB0aGVpciBvd24KIAkJICogc19vcC0+ZGVsZXRlX2lub2RlIGFyZSByZXF1aXJlZCB0byBjYWxsCiAJCSAqIHRydW5jYXRlX2lub2RlX3BhZ2VzIGFuZCBjbGVhcl9pbm9kZSgpCmRpZmYgLS1naXQgYS9mcy9pbnRlcm5hbC5oIGIvZnMvaW50ZXJuYWwuaAppbmRleCBlOTZhMTY2Li44YTAzYTU0IDEwMDY0NAotLS0gYS9mcy9pbnRlcm5hbC5oCisrKyBiL2ZzL2ludGVybmFsLmgKQEAgLTcwLDYgKzcwLDggQEAKIAogZXh0ZXJuIHZvaWQgX19pbml0IG1udF9pbml0KHZvaWQpOwogCitleHRlcm4gc3BpbmxvY2tfdCB2ZnNtb3VudF9sb2NrOworCiAvKgogICogZnNfc3RydWN0LmMKICAqLwpkaWZmIC0tZ2l0IGEvZnMvamJkL2NvbW1pdC5jIGIvZnMvamJkL2NvbW1pdC5jCmluZGV4IDRiZDg4MjUuLjJjOTBlM2UgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9jb21taXQuYworKysgYi9mcy9qYmQvY29tbWl0LmMKQEAgLTg2MiwxMiArODYyLDEyIEBACiAJCS8qIEEgYnVmZmVyIHdoaWNoIGhhcyBiZWVuIGZyZWVkIHdoaWxlIHN0aWxsIGJlaW5nCiAJCSAqIGpvdXJuYWxlZCBieSBhIHByZXZpb3VzIHRyYW5zYWN0aW9uIG1heSBlbmQgdXAgc3RpbGwKIAkJICogYmVpbmcgZGlydHkgaGVyZSwgYnV0IHdlIHdhbnQgdG8gYXZvaWQgd3JpdGluZyBiYWNrCi0JCSAqIHRoYXQgYnVmZmVyIGluIHRoZSBmdXR1cmUgbm93IHRoYXQgdGhlIGxhc3QgdXNlIGhhcwotCQkgKiBiZWVuIGNvbW1pdHRlZC4gIFRoYXQncyBub3Qgb25seSBhIHBlcmZvcm1hbmNlIGdhaW4sCi0JCSAqIGl0IGFsc28gc3RvcHMgYWxpYXNpbmcgcHJvYmxlbXMgaWYgdGhlIGJ1ZmZlciBpcyBsZWZ0Ci0JCSAqIGJlaGluZCBmb3Igd3JpdGViYWNrIGFuZCBnZXRzIHJlYWxsb2NhdGVkIGZvciBhbm90aGVyCisJCSAqIHRoYXQgYnVmZmVyIGluIHRoZSBmdXR1cmUgYWZ0ZXIgdGhlICJhZGQgdG8gb3JwaGFuIgorCQkgKiBvcGVyYXRpb24gYmVlbiBjb21taXR0ZWQsICBUaGF0J3Mgbm90IG9ubHkgYSBwZXJmb3JtYW5jZQorCQkgKiBnYWluLCBpdCBhbHNvIHN0b3BzIGFsaWFzaW5nIHByb2JsZW1zIGlmIHRoZSBidWZmZXIgaXMKKwkJICogbGVmdCBiZWhpbmQgZm9yIHdyaXRlYmFjayBhbmQgZ2V0cyByZWFsbG9jYXRlZCBmb3IgYW5vdGhlcgogCQkgKiB1c2UgaW4gYSBkaWZmZXJlbnQgcGFnZS4gKi8KLQkJaWYgKGJ1ZmZlcl9mcmVlZChiaCkpIHsKKwkJaWYgKGJ1ZmZlcl9mcmVlZChiaCkgJiYgIWpoLT5iX25leHRfdHJhbnNhY3Rpb24pIHsKIAkJCWNsZWFyX2J1ZmZlcl9mcmVlZChiaCk7CiAJCQljbGVhcl9idWZmZXJfamJkZGlydHkoYmgpOwogCQl9CmRpZmYgLS1naXQgYS9mcy9qYmQvdHJhbnNhY3Rpb24uYyBiL2ZzL2piZC90cmFuc2FjdGlvbi5jCmluZGV4IDAwNmY5YWQuLjVhZTcxZTcgMTAwNjQ0Ci0tLSBhL2ZzL2piZC90cmFuc2FjdGlvbi5jCisrKyBiL2ZzL2piZC90cmFuc2FjdGlvbi5jCkBAIC0xMzk4LDcgKzEzOTgsNyBAQAogCSAqIHRoZSBjYXNlIHdoZXJlIG91ciBzdG9yYWdlIGlzIHNvIGZhc3QgdGhhdCBpdCBpcyBtb3JlIG9wdGltYWwgdG8gZ28KIAkgKiBhaGVhZCBhbmQgZm9yY2UgYSBmbHVzaCBhbmQgd2FpdCBmb3IgdGhlIHRyYW5zYWN0aW9uIHRvIGJlIGNvbW1pdHRlZAogCSAqIHRoYW4gaXQgaXMgdG8gd2FpdCBmb3IgYW4gYXJiaXRyYXJ5IGFtb3VudCBvZiB0aW1lIGZvciBuZXcgd3JpdGVycyB0bwotCSAqIGpvaW4gdGhlIHRyYW5zYWN0aW9uLiAgV2UgYWNoZWl2ZSB0aGlzIGJ5IG1lYXN1cmluZyBob3cgbG9uZyBpdCB0YWtlcworCSAqIGpvaW4gdGhlIHRyYW5zYWN0aW9uLiAgV2UgYWNoaWV2ZSB0aGlzIGJ5IG1lYXN1cmluZyBob3cgbG9uZyBpdCB0YWtlcwogCSAqIHRvIGNvbW1pdCBhIHRyYW5zYWN0aW9uLCBhbmQgY29tcGFyZSBpdCB3aXRoIGhvdyBsb25nIHRoaXMKIAkgKiB0cmFuc2FjdGlvbiBoYXMgYmVlbiBydW5uaW5nLCBhbmQgaWYgcnVuIHRpbWUgPCBjb21taXQgdGltZSB0aGVuIHdlCiAJICogc2xlZXAgZm9yIHRoZSBkZWx0YSBhbmQgY29tbWl0LiAgVGhpcyBncmVhdGx5IGhlbHBzIHN1cGVyIGZhc3QgZGlza3MKQEAgLTE4NjQsNiArMTg2NCwyMSBAQAogCWlmICghamgpCiAJCWdvdG8gemFwX2J1ZmZlcl9ub19qaDsKIAorCS8qCisJICogV2UgY2Fubm90IHJlbW92ZSB0aGUgYnVmZmVyIGZyb20gY2hlY2twb2ludCBsaXN0cyB1bnRpbCB0aGUKKwkgKiB0cmFuc2FjdGlvbiBhZGRpbmcgaW5vZGUgdG8gb3JwaGFuIGxpc3QgKGxldCdzIGNhbGwgaXQgVCkKKwkgKiBpcyBjb21taXR0ZWQuICBPdGhlcndpc2UgaWYgdGhlIHRyYW5zYWN0aW9uIGNoYW5naW5nIHRoZQorCSAqIGJ1ZmZlciB3b3VsZCBiZSBjbGVhbmVkIGZyb20gdGhlIGpvdXJuYWwgYmVmb3JlIFQgaXMKKwkgKiBjb21taXR0ZWQsIGEgY3Jhc2ggd2lsbCBjYXVzZSB0aGF0IHRoZSBjb3JyZWN0IGNvbnRlbnRzIG9mCisJICogdGhlIGJ1ZmZlciB3aWxsIGJlIGxvc3QuICBPbiB0aGUgb3RoZXIgaGFuZCB3ZSBoYXZlIHRvCisJICogY2xlYXIgdGhlIGJ1ZmZlciBkaXJ0eSBiaXQgYXQgbGF0ZXN0IGF0IHRoZSBtb21lbnQgd2hlbiB0aGUKKwkgKiB0cmFuc2FjdGlvbiBtYXJraW5nIHRoZSBidWZmZXIgYXMgZnJlZWQgaW4gdGhlIGZpbGVzeXN0ZW0KKwkgKiBzdHJ1Y3R1cmVzIGlzIGNvbW1pdHRlZCBiZWNhdXNlIGZyb20gdGhhdCBtb21lbnQgb24gdGhlCisJICogYnVmZmVyIGNhbiBiZSByZWFsbG9jYXRlZCBhbmQgdXNlZCBieSBhIGRpZmZlcmVudCBwYWdlLgorCSAqIFNpbmNlIHRoZSBibG9jayBoYXNuJ3QgYmVlbiBmcmVlZCB5ZXQgYnV0IHRoZSBpbm9kZSBoYXMKKwkgKiBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gb3JwaGFuIGxpc3QsIGl0IGlzIHNhZmUgZm9yIHVzIHRvIGFkZAorCSAqIHRoZSBidWZmZXIgdG8gQkpfRm9yZ2V0IGxpc3Qgb2YgdGhlIG5ld2VzdCB0cmFuc2FjdGlvbi4KKwkgKi8KIAl0cmFuc2FjdGlvbiA9IGpoLT5iX3RyYW5zYWN0aW9uOwogCWlmICh0cmFuc2FjdGlvbiA9PSBOVUxMKSB7CiAJCS8qIEZpcnN0IGNhc2U6IG5vdCBvbiBhbnkgdHJhbnNhY3Rpb24uICBJZiBpdApAQCAtMTkyOSwxNiArMTk0NCwxNSBAQAogCQkJZ290byB6YXBfYnVmZmVyOwogCQl9CiAJCS8qCi0JCSAqIElmIGl0IGlzIGNvbW1pdHRpbmcsIHdlIHNpbXBseSBjYW5ub3QgdG91Y2ggaXQuICBXZQotCQkgKiBjYW4gcmVtb3ZlIGl0J3MgbmV4dF90cmFuc2FjdGlvbiBwb2ludGVyIGZyb20gdGhlCi0JCSAqIHJ1bm5pbmcgdHJhbnNhY3Rpb24gaWYgdGhhdCBpcyBzZXQsIGJ1dCBub3RoaW5nCi0JCSAqIGVsc2UuICovCisJCSAqIFRoZSBidWZmZXIgaXMgY29tbWl0dGluZywgd2Ugc2ltcGx5IGNhbm5vdCB0b3VjaAorCQkgKiBpdC4gU28gd2UganVzdCBzZXQgal9uZXh0X3RyYW5zYWN0aW9uIHRvIHRoZQorCQkgKiBydW5uaW5nIHRyYW5zYWN0aW9uIChpZiB0aGVyZSBpcyBvbmUpIGFuZCBtYXJrCisJCSAqIGJ1ZmZlciBhcyBmcmVlZCBzbyB0aGF0IGNvbW1pdCBjb2RlIGtub3dzIGl0IHNob3VsZAorCQkgKiBjbGVhciBkaXJ0eSBiaXRzIHdoZW4gaXQgaXMgZG9uZSB3aXRoIHRoZSBidWZmZXIuCisJCSAqLwogCQlzZXRfYnVmZmVyX2ZyZWVkKGJoKTsKLQkJaWYgKGpoLT5iX25leHRfdHJhbnNhY3Rpb24pIHsKLQkJCUpfQVNTRVJUKGpoLT5iX25leHRfdHJhbnNhY3Rpb24gPT0KLQkJCQkJam91cm5hbC0+al9ydW5uaW5nX3RyYW5zYWN0aW9uKTsKLQkJCWpoLT5iX25leHRfdHJhbnNhY3Rpb24gPSBOVUxMOwotCQl9CisJCWlmIChqb3VybmFsLT5qX3J1bm5pbmdfdHJhbnNhY3Rpb24gJiYgYnVmZmVyX2piZGRpcnR5KGJoKSkKKwkJCWpoLT5iX25leHRfdHJhbnNhY3Rpb24gPSBqb3VybmFsLT5qX3J1bm5pbmdfdHJhbnNhY3Rpb247CiAJCWpvdXJuYWxfcHV0X2pvdXJuYWxfaGVhZChqaCk7CiAJCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX2xpc3RfbG9jayk7CiAJCWpiZF91bmxvY2tfYmhfc3RhdGUoYmgpOwpAQCAtMjEyMCw3ICsyMTM0LDcgQEAKICAqLwogdm9pZCBfX2pvdXJuYWxfcmVmaWxlX2J1ZmZlcihzdHJ1Y3Qgam91cm5hbF9oZWFkICpqaCkKIHsKLQlpbnQgd2FzX2RpcnR5OworCWludCB3YXNfZGlydHksIGpsaXN0OwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBqaDJiaChqaCk7CiAKIAlKX0FTU0VSVF9KSChqaCwgamJkX2lzX2xvY2tlZF9iaF9zdGF0ZShiaCkpOwpAQCAtMjE0Miw4ICsyMTU2LDEzIEBACiAJX19qb3VybmFsX3RlbXBfdW5saW5rX2J1ZmZlcihqaCk7CiAJamgtPmJfdHJhbnNhY3Rpb24gPSBqaC0+Yl9uZXh0X3RyYW5zYWN0aW9uOwogCWpoLT5iX25leHRfdHJhbnNhY3Rpb24gPSBOVUxMOwotCV9fam91cm5hbF9maWxlX2J1ZmZlcihqaCwgamgtPmJfdHJhbnNhY3Rpb24sCi0JCQkJamgtPmJfbW9kaWZpZWQgPyBCSl9NZXRhZGF0YSA6IEJKX1Jlc2VydmVkKTsKKwlpZiAoYnVmZmVyX2ZyZWVkKGJoKSkKKwkJamxpc3QgPSBCSl9Gb3JnZXQ7CisJZWxzZSBpZiAoamgtPmJfbW9kaWZpZWQpCisJCWpsaXN0ID0gQkpfTWV0YWRhdGE7CisJZWxzZQorCQlqbGlzdCA9IEJKX1Jlc2VydmVkOworCV9fam91cm5hbF9maWxlX2J1ZmZlcihqaCwgamgtPmJfdHJhbnNhY3Rpb24sIGpsaXN0KTsKIAlKX0FTU0VSVF9KSChqaCwgamgtPmJfdHJhbnNhY3Rpb24tPnRfc3RhdGUgPT0gVF9SVU5OSU5HKTsKIAogCWlmICh3YXNfZGlydHkpCmRpZmYgLS1naXQgYS9mcy9qYmQyL2NoZWNrcG9pbnQuYyBiL2ZzL2piZDIvY2hlY2twb2ludC5jCmluZGV4IDg4Njg0OTMuLjMwYmViMTEgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvY2hlY2twb2ludC5jCisrKyBiL2ZzL2piZDIvY2hlY2twb2ludC5jCkBAIC01MDcsNiArNTA3LDcgQEAKIAlpZiAoYmxvY2tuciA8IGpvdXJuYWwtPmpfdGFpbCkKIAkJZnJlZWQgPSBmcmVlZCArIGpvdXJuYWwtPmpfbGFzdCAtIGpvdXJuYWwtPmpfZmlyc3Q7CiAKKwl0cmFjZV9qYmQyX2NsZWFudXBfam91cm5hbF90YWlsKGpvdXJuYWwsIGZpcnN0X3RpZCwgYmxvY2tuciwgZnJlZWQpOwogCWpiZF9kZWJ1ZygxLAogCQkgICJDbGVhbmluZyBqb3VybmFsIHRhaWwgZnJvbSAlZCB0byAlZCAob2Zmc2V0ICVsdSksICIKIAkJICAiZnJlZWluZyAlbHVcbiIsCmRpZmYgLS1naXQgYS9mcy9qYmQyL2NvbW1pdC5jIGIvZnMvamJkMi9jb21taXQuYwppbmRleCAxYmM3NGI2Li42NzFkYTdmIDEwMDY0NAotLS0gYS9mcy9qYmQyL2NvbW1pdC5jCisrKyBiL2ZzL2piZDIvY29tbWl0LmMKQEAgLTg4Myw4ICs4ODMsNyBAQAogCQlzcGluX3VubG9jaygmam91cm5hbC0+al9saXN0X2xvY2spOwogCQliaCA9IGpoMmJoKGpoKTsKIAkJamJkX2xvY2tfYmhfc3RhdGUoYmgpOwotCQlKX0FTU0VSVF9KSChqaCwJamgtPmJfdHJhbnNhY3Rpb24gPT0gY29tbWl0X3RyYW5zYWN0aW9uIHx8Ci0JCQlqaC0+Yl90cmFuc2FjdGlvbiA9PSBqb3VybmFsLT5qX3J1bm5pbmdfdHJhbnNhY3Rpb24pOworCQlKX0FTU0VSVF9KSChqaCwJamgtPmJfdHJhbnNhY3Rpb24gPT0gY29tbWl0X3RyYW5zYWN0aW9uKTsKIAogCQkvKgogCQkgKiBJZiB0aGVyZSBpcyB1bmRvLXByb3RlY3RlZCBjb21taXR0ZWQgZGF0YSBhZ2FpbnN0CkBAIC05MzAsMTIgKzkyOSwxMiBAQAogCQkvKiBBIGJ1ZmZlciB3aGljaCBoYXMgYmVlbiBmcmVlZCB3aGlsZSBzdGlsbCBiZWluZwogCQkgKiBqb3VybmFsZWQgYnkgYSBwcmV2aW91cyB0cmFuc2FjdGlvbiBtYXkgZW5kIHVwIHN0aWxsCiAJCSAqIGJlaW5nIGRpcnR5IGhlcmUsIGJ1dCB3ZSB3YW50IHRvIGF2b2lkIHdyaXRpbmcgYmFjawotCQkgKiB0aGF0IGJ1ZmZlciBpbiB0aGUgZnV0dXJlIG5vdyB0aGF0IHRoZSBsYXN0IHVzZSBoYXMKLQkJICogYmVlbiBjb21taXR0ZWQuICBUaGF0J3Mgbm90IG9ubHkgYSBwZXJmb3JtYW5jZSBnYWluLAotCQkgKiBpdCBhbHNvIHN0b3BzIGFsaWFzaW5nIHByb2JsZW1zIGlmIHRoZSBidWZmZXIgaXMgbGVmdAotCQkgKiBiZWhpbmQgZm9yIHdyaXRlYmFjayBhbmQgZ2V0cyByZWFsbG9jYXRlZCBmb3IgYW5vdGhlcgorCQkgKiB0aGF0IGJ1ZmZlciBpbiB0aGUgZnV0dXJlIGFmdGVyIHRoZSAiYWRkIHRvIG9ycGhhbiIKKwkJICogb3BlcmF0aW9uIGJlZW4gY29tbWl0dGVkLCAgVGhhdCdzIG5vdCBvbmx5IGEgcGVyZm9ybWFuY2UKKwkJICogZ2FpbiwgaXQgYWxzbyBzdG9wcyBhbGlhc2luZyBwcm9ibGVtcyBpZiB0aGUgYnVmZmVyIGlzCisJCSAqIGxlZnQgYmVoaW5kIGZvciB3cml0ZWJhY2sgYW5kIGdldHMgcmVhbGxvY2F0ZWQgZm9yIGFub3RoZXIKIAkJICogdXNlIGluIGEgZGlmZmVyZW50IHBhZ2UuICovCi0JCWlmIChidWZmZXJfZnJlZWQoYmgpKSB7CisJCWlmIChidWZmZXJfZnJlZWQoYmgpICYmICFqaC0+Yl9uZXh0X3RyYW5zYWN0aW9uKSB7CiAJCQljbGVhcl9idWZmZXJfZnJlZWQoYmgpOwogCQkJY2xlYXJfYnVmZmVyX2piZGRpcnR5KGJoKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvamJkMi9qb3VybmFsLmMgYi9mcy9qYmQyL2pvdXJuYWwuYwppbmRleCBhYzBkMDI3Li5jMDNkNGRjIDEwMDY0NAotLS0gYS9mcy9qYmQyL2pvdXJuYWwuYworKysgYi9mcy9qYmQyL2pvdXJuYWwuYwpAQCAtMzksNiArMzksOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+CiAjaW5jbHVkZSA8bGludXgvaGFzaC5oPgorI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKICNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UUwogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9qYmQyLmg+CkBAIC05Myw2ICs5NSw3IEBACiAKIHN0YXRpYyBpbnQgam91cm5hbF9jb252ZXJ0X3N1cGVyYmxvY2tfdjEoam91cm5hbF90ICosIGpvdXJuYWxfc3VwZXJibG9ja190ICopOwogc3RhdGljIHZvaWQgX19qb3VybmFsX2Fib3J0X3NvZnQgKGpvdXJuYWxfdCAqam91cm5hbCwgaW50IGVycm5vKTsKK3N0YXRpYyBpbnQgamJkMl9qb3VybmFsX2NyZWF0ZV9zbGFiKHNpemVfdCBzbGFiX3NpemUpOwogCiAvKgogICogSGVscGVyIGZ1bmN0aW9uIHVzZWQgdG8gbWFuYWdlIGNvbW1pdCB0aW1lb3V0cwpAQCAtMTI0OCw2ICsxMjUxLDEzIEBACiAJCX0KIAl9CiAKKwkvKgorCSAqIENyZWF0ZSBhIHNsYWIgZm9yIHRoaXMgYmxvY2tzaXplCisJICovCisJZXJyID0gamJkMl9qb3VybmFsX2NyZWF0ZV9zbGFiKGJlMzJfdG9fY3B1KHNiLT5zX2Jsb2Nrc2l6ZSkpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKIAkvKiBMZXQgdGhlIHJlY292ZXJ5IGNvZGUgY2hlY2sgd2hldGhlciBpdCBuZWVkcyB0byByZWNvdmVyIGFueQogCSAqIGRhdGEgZnJvbSB0aGUgam91cm5hbC4gKi8KIAlpZiAoamJkMl9qb3VybmFsX3JlY292ZXIoam91cm5hbCkpCkBAIC0xODA3LDYgKzE4MTcsMTI3IEBACiB9CiAKIC8qCisgKiBKQkQgbWVtb3J5IG1hbmFnZW1lbnQKKyAqCisgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQgdG8gYWxsb2NhdGUgYmxvY2stc2l6ZWQgY2h1bmtzIG9mIG1lbW9yeQorICogdXNlZCBmb3IgbWFraW5nIGNvcGllcyBvZiBidWZmZXJfaGVhZCBkYXRhLiAgVmVyeSBvZnRlbiBpdCB3aWxsIGJlCisgKiBwYWdlLXNpemVkIGNodW5rcyBvZiBkYXRhLCBidXQgc29tZXRpbWVzIGl0IHdpbGwgYmUgaW4KKyAqIHN1Yi1wYWdlLXNpemUgY2h1bmtzLiAgKEZvciBleGFtcGxlLCAxNmsgcGFnZXMgb24gUG93ZXIgc3lzdGVtcworICogd2l0aCBhIDRrIGJsb2NrIGZpbGUgc3lzdGVtLikgIEZvciBibG9ja3Mgc21hbGxlciB0aGFuIGEgcGFnZSwgd2UKKyAqIHVzZSBhIFNMQUIgYWxsb2NhdG9yLiAgVGhlcmUgYXJlIHNsYWIgY2FjaGVzIGZvciBlYWNoIGJsb2NrIHNpemUsCisgKiB3aGljaCBhcmUgYWxsb2NhdGVkIGF0IG1vdW50IHRpbWUsIGlmIG5lY2Vzc2FyeSwgYW5kIHdlIG9ubHkgZnJlZQorICogKGFsbCBvZikgdGhlIHNsYWIgY2FjaGVzIHdoZW4vaWYgdGhlIGpiZDIgbW9kdWxlIGlzIHVubG9hZGVkLiAgRm9yCisgKiB0aGlzIHJlYXNvbiB3ZSBkb24ndCBuZWVkIHRvIGEgbXV0ZXggdG8gcHJvdGVjdCBhY2Nlc3MgdG8KKyAqIGpiZDJfc2xhYltdIGFsbG9jYXRpbmcgb3IgcmVsZWFzaW5nIG1lbW9yeTsgb25seSBpbgorICogamJkMl9qb3VybmFsX2NyZWF0ZV9zbGFiKCkuCisgKi8KKyNkZWZpbmUgSkJEMl9NQVhfU0xBQlMgOAorc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpqYmQyX3NsYWJbSkJEMl9NQVhfU0xBQlNdOworc3RhdGljIERFQ0xBUkVfTVVURVgoamJkMl9zbGFiX2NyZWF0ZV9zZW0pOworCitzdGF0aWMgY29uc3QgY2hhciAqamJkMl9zbGFiX25hbWVzW0pCRDJfTUFYX1NMQUJTXSA9IHsKKwkiamJkMl8xayIsICJqYmQyXzJrIiwgImpiZDJfNGsiLCAiamJkMl84ayIsCisJImpiZDJfMTZrIiwgImpiZDJfMzJrIiwgImpiZDJfNjRrIiwgImpiZDJfMTI4ayIKK307CisKKworc3RhdGljIHZvaWQgamJkMl9qb3VybmFsX2Rlc3Ryb3lfc2xhYnModm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBKQkQyX01BWF9TTEFCUzsgaSsrKSB7CisJCWlmIChqYmQyX3NsYWJbaV0pCisJCQlrbWVtX2NhY2hlX2Rlc3Ryb3koamJkMl9zbGFiW2ldKTsKKwkJamJkMl9zbGFiW2ldID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyBpbnQgamJkMl9qb3VybmFsX2NyZWF0ZV9zbGFiKHNpemVfdCBzaXplKQoreworCWludCBpID0gb3JkZXJfYmFzZV8yKHNpemUpIC0gMTA7CisJc2l6ZV90IHNsYWJfc2l6ZTsKKworCWlmIChzaXplID09IFBBR0VfU0laRSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoaSA+PSBKQkQyX01BWF9TTEFCUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodW5saWtlbHkoaSA8IDApKQorCQlpID0gMDsKKwlkb3duKCZqYmQyX3NsYWJfY3JlYXRlX3NlbSk7CisJaWYgKGpiZDJfc2xhYltpXSkgeworCQl1cCgmamJkMl9zbGFiX2NyZWF0ZV9zZW0pOworCQlyZXR1cm4gMDsJLyogQWxyZWFkeSBjcmVhdGVkICovCisJfQorCisJc2xhYl9zaXplID0gMSA8PCAoaSsxMCk7CisJamJkMl9zbGFiW2ldID0ga21lbV9jYWNoZV9jcmVhdGUoamJkMl9zbGFiX25hbWVzW2ldLCBzbGFiX3NpemUsCisJCQkJCSBzbGFiX3NpemUsIDAsIE5VTEwpOworCXVwKCZqYmQyX3NsYWJfY3JlYXRlX3NlbSk7CisJaWYgKCFqYmQyX3NsYWJbaV0pIHsKKwkJcHJpbnRrKEtFUk5fRU1FUkcgIkpCRDI6IG5vIG1lbW9yeSBmb3IgamJkMl9zbGFiIGNhY2hlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmdldF9zbGFiKHNpemVfdCBzaXplKQoreworCWludCBpID0gb3JkZXJfYmFzZV8yKHNpemUpIC0gMTA7CisKKwlCVUdfT04oaSA+PSBKQkQyX01BWF9TTEFCUyk7CisJaWYgKHVubGlrZWx5KGkgPCAwKSkKKwkJaSA9IDA7CisJQlVHX09OKGpiZDJfc2xhYltpXSA9PSAwKTsKKwlyZXR1cm4gamJkMl9zbGFiW2ldOworfQorCit2b2lkICpqYmQyX2FsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncykKK3sKKwl2b2lkICpwdHI7CisKKwlCVUdfT04oc2l6ZSAmIChzaXplLTEpKTsgLyogTXVzdCBiZSBhIHBvd2VyIG9mIDIgKi8KKworCWZsYWdzIHw9IF9fR0ZQX1JFUEVBVDsKKwlpZiAoc2l6ZSA9PSBQQUdFX1NJWkUpCisJCXB0ciA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhmbGFncywgMCk7CisJZWxzZSBpZiAoc2l6ZSA+IFBBR0VfU0laRSkgeworCQlpbnQgb3JkZXIgPSBnZXRfb3JkZXIoc2l6ZSk7CisKKwkJaWYgKG9yZGVyIDwgMykKKwkJCXB0ciA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhmbGFncywgb3JkZXIpOworCQllbHNlCisJCQlwdHIgPSB2bWFsbG9jKHNpemUpOworCX0gZWxzZQorCQlwdHIgPSBrbWVtX2NhY2hlX2FsbG9jKGdldF9zbGFiKHNpemUpLCBmbGFncyk7CisKKwkvKiBDaGVjayBhbGlnbm1lbnQ7IFNMVUIgaGFzIGdvdHRlbiB0aGlzIHdyb25nIGluIHRoZSBwYXN0LAorCSAqIGFuZCB0aGlzIGNhbiBsZWFkIHRvIHVzZXIgZGF0YSBjb3JydXB0aW9uISAqLworCUJVR19PTigoKHVuc2lnbmVkIGxvbmcpIHB0cikgJiAoc2l6ZS0xKSk7CisKKwlyZXR1cm4gcHRyOworfQorCit2b2lkIGpiZDJfZnJlZSh2b2lkICpwdHIsIHNpemVfdCBzaXplKQoreworCWlmIChzaXplID09IFBBR0VfU0laRSkgeworCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXB0ciwgMCk7CisJCXJldHVybjsKKwl9CisJaWYgKHNpemUgPiBQQUdFX1NJWkUpIHsKKwkJaW50IG9yZGVyID0gZ2V0X29yZGVyKHNpemUpOworCisJCWlmIChvcmRlciA8IDMpCisJCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXB0ciwgb3JkZXIpOworCQllbHNlCisJCQl2ZnJlZShwdHIpOworCQlyZXR1cm47CisJfQorCWttZW1fY2FjaGVfZnJlZShnZXRfc2xhYihzaXplKSwgcHRyKTsKK307CisKKy8qCiAgKiBKb3VybmFsX2hlYWQgc3RvcmFnZSBtYW5hZ2VtZW50CiAgKi8KIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqamJkMl9qb3VybmFsX2hlYWRfY2FjaGU7CkBAIC0yMjA0LDYgKzIzMzUsNyBAQAogCWpiZDJfam91cm5hbF9kZXN0cm95X3Jldm9rZV9jYWNoZXMoKTsKIAlqYmQyX2pvdXJuYWxfZGVzdHJveV9qYmQyX2pvdXJuYWxfaGVhZF9jYWNoZSgpOwogCWpiZDJfam91cm5hbF9kZXN0cm95X2hhbmRsZV9jYWNoZSgpOworCWpiZDJfam91cm5hbF9kZXN0cm95X3NsYWJzKCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGpvdXJuYWxfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZnMvamJkMi90cmFuc2FjdGlvbi5jIGIvZnMvamJkMi90cmFuc2FjdGlvbi5jCmluZGV4IGEwNTEyNzAuLmJmYzcwZjUgMTAwNjQ0Ci0tLSBhL2ZzL2piZDIvdHJhbnNhY3Rpb24uYworKysgYi9mcy9qYmQyL3RyYW5zYWN0aW9uLmMKQEAgLTE3MjcsNiArMTcyNywyMSBAQAogCWlmICghamgpCiAJCWdvdG8gemFwX2J1ZmZlcl9ub19qaDsKIAorCS8qCisJICogV2UgY2Fubm90IHJlbW92ZSB0aGUgYnVmZmVyIGZyb20gY2hlY2twb2ludCBsaXN0cyB1bnRpbCB0aGUKKwkgKiB0cmFuc2FjdGlvbiBhZGRpbmcgaW5vZGUgdG8gb3JwaGFuIGxpc3QgKGxldCdzIGNhbGwgaXQgVCkKKwkgKiBpcyBjb21taXR0ZWQuICBPdGhlcndpc2UgaWYgdGhlIHRyYW5zYWN0aW9uIGNoYW5naW5nIHRoZQorCSAqIGJ1ZmZlciB3b3VsZCBiZSBjbGVhbmVkIGZyb20gdGhlIGpvdXJuYWwgYmVmb3JlIFQgaXMKKwkgKiBjb21taXR0ZWQsIGEgY3Jhc2ggd2lsbCBjYXVzZSB0aGF0IHRoZSBjb3JyZWN0IGNvbnRlbnRzIG9mCisJICogdGhlIGJ1ZmZlciB3aWxsIGJlIGxvc3QuICBPbiB0aGUgb3RoZXIgaGFuZCB3ZSBoYXZlIHRvCisJICogY2xlYXIgdGhlIGJ1ZmZlciBkaXJ0eSBiaXQgYXQgbGF0ZXN0IGF0IHRoZSBtb21lbnQgd2hlbiB0aGUKKwkgKiB0cmFuc2FjdGlvbiBtYXJraW5nIHRoZSBidWZmZXIgYXMgZnJlZWQgaW4gdGhlIGZpbGVzeXN0ZW0KKwkgKiBzdHJ1Y3R1cmVzIGlzIGNvbW1pdHRlZCBiZWNhdXNlIGZyb20gdGhhdCBtb21lbnQgb24gdGhlCisJICogYnVmZmVyIGNhbiBiZSByZWFsbG9jYXRlZCBhbmQgdXNlZCBieSBhIGRpZmZlcmVudCBwYWdlLgorCSAqIFNpbmNlIHRoZSBibG9jayBoYXNuJ3QgYmVlbiBmcmVlZCB5ZXQgYnV0IHRoZSBpbm9kZSBoYXMKKwkgKiBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gb3JwaGFuIGxpc3QsIGl0IGlzIHNhZmUgZm9yIHVzIHRvIGFkZAorCSAqIHRoZSBidWZmZXIgdG8gQkpfRm9yZ2V0IGxpc3Qgb2YgdGhlIG5ld2VzdCB0cmFuc2FjdGlvbi4KKwkgKi8KIAl0cmFuc2FjdGlvbiA9IGpoLT5iX3RyYW5zYWN0aW9uOwogCWlmICh0cmFuc2FjdGlvbiA9PSBOVUxMKSB7CiAJCS8qIEZpcnN0IGNhc2U6IG5vdCBvbiBhbnkgdHJhbnNhY3Rpb24uICBJZiBpdApAQCAtMTc4MywxNiArMTc5OCwxNSBAQAogCX0gZWxzZSBpZiAodHJhbnNhY3Rpb24gPT0gam91cm5hbC0+al9jb21taXR0aW5nX3RyYW5zYWN0aW9uKSB7CiAJCUpCVUZGRVJfVFJBQ0UoamgsICJvbiBjb21taXR0aW5nIHRyYW5zYWN0aW9uIik7CiAJCS8qCi0JCSAqIElmIGl0IGlzIGNvbW1pdHRpbmcsIHdlIHNpbXBseSBjYW5ub3QgdG91Y2ggaXQuICBXZQotCQkgKiBjYW4gcmVtb3ZlIGl0J3MgbmV4dF90cmFuc2FjdGlvbiBwb2ludGVyIGZyb20gdGhlCi0JCSAqIHJ1bm5pbmcgdHJhbnNhY3Rpb24gaWYgdGhhdCBpcyBzZXQsIGJ1dCBub3RoaW5nCi0JCSAqIGVsc2UuICovCisJCSAqIFRoZSBidWZmZXIgaXMgY29tbWl0dGluZywgd2Ugc2ltcGx5IGNhbm5vdCB0b3VjaAorCQkgKiBpdC4gU28gd2UganVzdCBzZXQgal9uZXh0X3RyYW5zYWN0aW9uIHRvIHRoZQorCQkgKiBydW5uaW5nIHRyYW5zYWN0aW9uIChpZiB0aGVyZSBpcyBvbmUpIGFuZCBtYXJrCisJCSAqIGJ1ZmZlciBhcyBmcmVlZCBzbyB0aGF0IGNvbW1pdCBjb2RlIGtub3dzIGl0IHNob3VsZAorCQkgKiBjbGVhciBkaXJ0eSBiaXRzIHdoZW4gaXQgaXMgZG9uZSB3aXRoIHRoZSBidWZmZXIuCisJCSAqLwogCQlzZXRfYnVmZmVyX2ZyZWVkKGJoKTsKLQkJaWYgKGpoLT5iX25leHRfdHJhbnNhY3Rpb24pIHsKLQkJCUpfQVNTRVJUKGpoLT5iX25leHRfdHJhbnNhY3Rpb24gPT0KLQkJCQkJam91cm5hbC0+al9ydW5uaW5nX3RyYW5zYWN0aW9uKTsKLQkJCWpoLT5iX25leHRfdHJhbnNhY3Rpb24gPSBOVUxMOwotCQl9CisJCWlmIChqb3VybmFsLT5qX3J1bm5pbmdfdHJhbnNhY3Rpb24gJiYgYnVmZmVyX2piZGRpcnR5KGJoKSkKKwkJCWpoLT5iX25leHRfdHJhbnNhY3Rpb24gPSBqb3VybmFsLT5qX3J1bm5pbmdfdHJhbnNhY3Rpb247CiAJCWpiZDJfam91cm5hbF9wdXRfam91cm5hbF9oZWFkKGpoKTsKIAkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKIAkJamJkX3VubG9ja19iaF9zdGF0ZShiaCk7CkBAIC0xOTY5LDcgKzE5ODMsNyBAQAogICovCiB2b2lkIF9famJkMl9qb3VybmFsX3JlZmlsZV9idWZmZXIoc3RydWN0IGpvdXJuYWxfaGVhZCAqamgpCiB7Ci0JaW50IHdhc19kaXJ0eTsKKwlpbnQgd2FzX2RpcnR5LCBqbGlzdDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gamgyYmgoamgpOwogCiAJSl9BU1NFUlRfSkgoamgsIGpiZF9pc19sb2NrZWRfYmhfc3RhdGUoYmgpKTsKQEAgLTE5OTEsOCArMjAwNSwxMyBAQAogCV9famJkMl9qb3VybmFsX3RlbXBfdW5saW5rX2J1ZmZlcihqaCk7CiAJamgtPmJfdHJhbnNhY3Rpb24gPSBqaC0+Yl9uZXh0X3RyYW5zYWN0aW9uOwogCWpoLT5iX25leHRfdHJhbnNhY3Rpb24gPSBOVUxMOwotCV9famJkMl9qb3VybmFsX2ZpbGVfYnVmZmVyKGpoLCBqaC0+Yl90cmFuc2FjdGlvbiwKLQkJCQlqaC0+Yl9tb2RpZmllZCA/IEJKX01ldGFkYXRhIDogQkpfUmVzZXJ2ZWQpOworCWlmIChidWZmZXJfZnJlZWQoYmgpKQorCQlqbGlzdCA9IEJKX0ZvcmdldDsKKwllbHNlIGlmIChqaC0+Yl9tb2RpZmllZCkKKwkJamxpc3QgPSBCSl9NZXRhZGF0YTsKKwllbHNlCisJCWpsaXN0ID0gQkpfUmVzZXJ2ZWQ7CisJX19qYmQyX2pvdXJuYWxfZmlsZV9idWZmZXIoamgsIGpoLT5iX3RyYW5zYWN0aW9uLCBqbGlzdCk7CiAJSl9BU1NFUlRfSkgoamgsIGpoLT5iX3RyYW5zYWN0aW9uLT50X3N0YXRlID09IFRfUlVOTklORyk7CiAKIAlpZiAod2FzX2RpcnR5KQpkaWZmIC0tZ2l0IGEvZnMvamZzL2FjbC5jIGIvZnMvamZzL2FjbC5jCmluZGV4IGQ2NjQ3N2MuLjIxMzE2OTcgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9hY2wuYworKysgYi9mcy9qZnMvYWNsLmMKQEAgLTIwLDcgKzIwLDYgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbF94YXR0ci5oPgogI2luY2x1ZGUgImpmc19pbmNvcmUuaCIKICNpbmNsdWRlICJqZnNfdHhubWdyLmgiCkBAIC0xNzQsNyArMTczLDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgamZzX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoraW50IGpmc19hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgcG9zaXhfYWNsICphY2wsICpjbG9uZTsKIAlpbnQgcmM7CkBAIC0yMDUsMjYgKzIwNCwzIEBACiAJcG9zaXhfYWNsX3JlbGVhc2UoY2xvbmUpOwogCXJldHVybiByYzsKIH0KLQotaW50IGpmc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cikKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCWludCByYzsKLQotCXJjID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBpYXR0cik7Ci0JaWYgKHJjKQotCQlyZXR1cm4gcmM7Ci0KLQlpZiAoKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfVUlEICYmIGlhdHRyLT5pYV91aWQgIT0gaW5vZGUtPmlfdWlkKSB8fAotCSAgICAoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9HSUQgJiYgaWF0dHItPmlhX2dpZCAhPSBpbm9kZS0+aV9naWQpKSB7Ci0JCWlmICh2ZnNfZHFfdHJhbnNmZXIoaW5vZGUsIGlhdHRyKSkKLQkJCXJldHVybiAtRURRVU9UOwotCX0KLQotCXJjID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgaWF0dHIpOwotCi0JaWYgKCFyYyAmJiAoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9NT0RFKSkKLQkJcmMgPSBqZnNfYWNsX2NobW9kKGlub2RlKTsKLQotCXJldHVybiByYzsKLX0KZGlmZiAtLWdpdCBhL2ZzL2pmcy9maWxlLmMgYi9mcy9qZnMvZmlsZS5jCmluZGV4IDJiNzBmYTcuLjE0YmE5ODIgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9maWxlLmMKKysrIGIvZnMvamZzL2ZpbGUuYwpAQCAtMTgsNiArMTgsNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAjaW5jbHVkZSAiamZzX2luY29yZS5oIgogI2luY2x1ZGUgImpmc19pbm9kZS5oIgogI2luY2x1ZGUgImpmc19kbWFwLmgiCkBAIC00Nyw3ICs0OCw3IEBACiB7CiAJaW50IHJjOwogCi0JaWYgKChyYyA9IGdlbmVyaWNfZmlsZV9vcGVuKGlub2RlLCBmaWxlKSkpCisJaWYgKChyYyA9IGRxdW90X2ZpbGVfb3Blbihpbm9kZSwgZmlsZSkpKQogCQlyZXR1cm4gcmM7CiAKIAkvKgpAQCAtODgsMTQgKzg5LDQwIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludCBqZnNfc2V0YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBpYXR0ciAqaWF0dHIpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgcmM7CisKKwlyYyA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgaWF0dHIpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJaWYgKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkKKwkJZHF1b3RfaW5pdGlhbGl6ZShpbm9kZSk7CisJaWYgKChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1VJRCAmJiBpYXR0ci0+aWFfdWlkICE9IGlub2RlLT5pX3VpZCkgfHwKKwkgICAgKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfR0lEICYmIGlhdHRyLT5pYV9naWQgIT0gaW5vZGUtPmlfZ2lkKSkgeworCQlyYyA9IGRxdW90X3RyYW5zZmVyKGlub2RlLCBpYXR0cik7CisJCWlmIChyYykKKwkJCXJldHVybiByYzsKKwl9CisKKwlyYyA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGlhdHRyKTsKKworCWlmICghcmMgJiYgKGlhdHRyLT5pYV92YWxpZCAmIEFUVFJfTU9ERSkpCisJCXJjID0gamZzX2FjbF9jaG1vZChpbm9kZSk7CisKKwlyZXR1cm4gcmM7Cit9CisKIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGpmc19maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7CiAJLnRydW5jYXRlCT0gamZzX3RydW5jYXRlLAogCS5zZXR4YXR0cgk9IGpmc19zZXR4YXR0ciwKIAkuZ2V0eGF0dHIJPSBqZnNfZ2V0eGF0dHIsCiAJLmxpc3R4YXR0cgk9IGpmc19saXN0eGF0dHIsCiAJLnJlbW92ZXhhdHRyCT0gamZzX3JlbW92ZXhhdHRyLAotI2lmZGVmIENPTkZJR19KRlNfUE9TSVhfQUNMCiAJLnNldGF0dHIJPSBqZnNfc2V0YXR0ciwKKyNpZmRlZiBDT05GSUdfSkZTX1BPU0lYX0FDTAogCS5jaGVja19hY2wJPSBqZnNfY2hlY2tfYWNsLAogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvZnMvamZzL2lub2RlLmMgYi9mcy9qZnMvaW5vZGUuYwppbmRleCBiMmFlMTkwLi45ZGQxMjYyIDEwMDY0NAotLS0gYS9mcy9qZnMvaW5vZGUuYworKysgYi9mcy9qZnMvaW5vZGUuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSAiamZzX2luY29yZS5oIgogI2luY2x1ZGUgImpmc19pbm9kZS5oIgogI2luY2x1ZGUgImpmc19maWxzeXMuaCIKQEAgLTEyMCw4ICsxMjEsMTAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLWludCBqZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpCitpbnQgamZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogeworCWludCB3YWl0ID0gd2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEw7CisKIAlpZiAodGVzdF9jZmxhZyhDT01NSVRfTm9saW5rLCBpbm9kZSkpCiAJCXJldHVybiAwOwogCS8qCkBAIC0xNDYsNiArMTQ5LDkgQEAKIHsKIAlqZnNfaW5mbygiSW4gamZzX2RlbGV0ZV9pbm9kZSwgaW5vZGUgPSAweCVwIiwgaW5vZGUpOwogCisJaWYgKCFpc19iYWRfaW5vZGUoaW5vZGUpKQorCQlkcXVvdF9pbml0aWFsaXplKGlub2RlKTsKKwogCWlmICghaXNfYmFkX2lub2RlKGlub2RlKSAmJgogCSAgICAoSkZTX0lQKGlub2RlKS0+ZmlsZXNldCA9PSBGSUxFU1lTVEVNX0kpKSB7CiAJCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKQEAgLTE1OCw5ICsxNjQsOSBAQAogCQkvKgogCQkgKiBGcmVlIHRoZSBpbm9kZSBmcm9tIHRoZSBxdW90YSBhbGxvY2F0aW9uLgogCQkgKi8KLQkJdmZzX2RxX2luaXQoaW5vZGUpOwotCQl2ZnNfZHFfZnJlZV9pbm9kZShpbm9kZSk7Ci0JCXZmc19kcV9kcm9wKGlub2RlKTsKKwkJZHF1b3RfaW5pdGlhbGl6ZShpbm9kZSk7CisJCWRxdW90X2ZyZWVfaW5vZGUoaW5vZGUpOworCQlkcXVvdF9kcm9wKGlub2RlKTsKIAl9CiAKIAljbGVhcl9pbm9kZShpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2FjbC5oIGIvZnMvamZzL2pmc19hY2wuaAppbmRleCBiMDdiZDQxLi41NGUwNzU1IDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2FjbC5oCisrKyBiL2ZzL2pmcy9qZnNfYWNsLmgKQEAgLTIyLDcgKzIyLDcgQEAKIAogaW50IGpmc19jaGVja19hY2woc3RydWN0IGlub2RlICosIGludCk7CiBpbnQgamZzX2luaXRfYWNsKHRpZF90LCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICopOwotaW50IGpmc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOworaW50IGpmc19hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSk7CiAKICNlbHNlCiAKQEAgLTMyLDUgKzMyLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGpmc19hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gMDsKK30KKwogI2VuZGlmCiAjZW5kaWYJCS8qIF9IX0pGU19BQ0wgKi8KZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfZHRyZWUuYyBiL2ZzL2pmcy9qZnNfZHRyZWUuYwppbmRleCA5MjU4NzFlLi4wZTQ2MjNiIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2R0cmVlLmMKKysrIGIvZnMvamZzL2pmc19kdHJlZS5jCkBAIC0zODEsMTAgKzM4MSwxMCBAQAogCQkgKiBJdCdzIHRpbWUgdG8gbW92ZSB0aGUgaW5saW5lIHRhYmxlIHRvIGFuIGV4dGVybmFsCiAJCSAqIHBhZ2UgYW5kIGJlZ2luIHRvIGJ1aWxkIHRoZSB4dHJlZQogCQkgKi8KLQkJaWYgKHZmc19kcV9hbGxvY19ibG9jayhpcCwgc2JpLT5uYnBlcnBhZ2UpKQorCQlpZiAoZHF1b3RfYWxsb2NfYmxvY2soaXAsIHNiaS0+bmJwZXJwYWdlKSkKIAkJCWdvdG8gY2xlYW5fdXA7CiAJCWlmIChkYkFsbG9jKGlwLCAwLCBzYmktPm5icGVycGFnZSwgJnhhZGRyKSkgewotCQkJdmZzX2RxX2ZyZWVfYmxvY2soaXAsIHNiaS0+bmJwZXJwYWdlKTsKKwkJCWRxdW90X2ZyZWVfYmxvY2soaXAsIHNiaS0+bmJwZXJwYWdlKTsKIAkJCWdvdG8gY2xlYW5fdXA7CiAJCX0KIApAQCAtNDA4LDcgKzQwOCw3IEBACiAJCQltZW1jcHkoJmpmc19pcC0+aV9kaXJ0YWJsZSwgdGVtcF90YWJsZSwKIAkJCSAgICAgICBzaXplb2YgKHRlbXBfdGFibGUpKTsKIAkJCWRiRnJlZShpcCwgeGFkZHIsIHNiaS0+bmJwZXJwYWdlKTsKLQkJCXZmc19kcV9mcmVlX2Jsb2NrKGlwLCBzYmktPm5icGVycGFnZSk7CisJCQlkcXVvdF9mcmVlX2Jsb2NrKGlwLCBzYmktPm5icGVycGFnZSk7CiAJCQlnb3RvIGNsZWFuX3VwOwogCQl9CiAJCWlwLT5pX3NpemUgPSBQU0laRTsKQEAgLTEwMjcsMTAgKzEwMjcsOSBAQAogCQkJbiA9IHhsZW47CiAKIAkJLyogQWxsb2NhdGUgYmxvY2tzIHRvIHF1b3RhLiAqLwotCQlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlwLCBuKSkgewotCQkJcmMgPSAtRURRVU9UOworCQlyYyA9IGRxdW90X2FsbG9jX2Jsb2NrKGlwLCBuKTsKKwkJaWYgKHJjKQogCQkJZ290byBleHRlbmRPdXQ7Ci0JCX0KIAkJcXVvdGFfYWxsb2NhdGlvbiArPSBuOwogCiAJCWlmICgocmMgPSBkYlJlQWxsb2Moc2JpLT5pcGJtYXAsIHhhZGRyLCAoczY0KSB4bGVuLApAQCAtMTMwOCw3ICsxMzA3LDcgQEAKIAogCS8qIFJvbGxiYWNrIHF1b3RhIGFsbG9jYXRpb24gKi8KIAlpZiAocmMgJiYgcXVvdGFfYWxsb2NhdGlvbikKLQkJdmZzX2RxX2ZyZWVfYmxvY2soaXAsIHF1b3RhX2FsbG9jYXRpb24pOworCQlkcXVvdF9mcmVlX2Jsb2NrKGlwLCBxdW90YV9hbGxvY2F0aW9uKTsKIAogICAgICAgZHRTcGxpdFVwX0V4aXQ6CiAKQEAgLTEzNjksOSArMTM2OCwxMCBAQAogCQlyZXR1cm4gLUVJTzsKIAogCS8qIEFsbG9jYXRlIGJsb2NrcyB0byBxdW90YS4gKi8KLQlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlwLCBsZW5ndGhQWEQocHhkKSkpIHsKKwlyYyA9IGRxdW90X2FsbG9jX2Jsb2NrKGlwLCBsZW5ndGhQWEQocHhkKSk7CisJaWYgKHJjKSB7CiAJCXJlbGVhc2VfbWV0YXBhZ2Uocm1wKTsKLQkJcmV0dXJuIC1FRFFVT1Q7CisJCXJldHVybiByYzsKIAl9CiAKIAlqZnNfaW5mbygiZHRTcGxpdFBhZ2U6IGlwOjB4JXAgc21wOjB4JXAgcm1wOjB4JXAiLCBpcCwgc21wLCBybXApOwpAQCAtMTg5Miw2ICsxODkyLDcgQEAKIAlzdHJ1Y3QgZHRfbG9jayAqZHRsY2s7CiAJc3RydWN0IHRsb2NrICp0bGNrOwogCXN0cnVjdCBsdiAqbHY7CisJaW50IHJjOwogCiAJLyogZ2V0IHNwbGl0IHJvb3QgcGFnZSAqLwogCXNtcCA9IHNwbGl0LT5tcDsKQEAgLTE5MTYsOSArMTkxNywxMCBAQAogCXJwID0gcm1wLT5kYXRhOwogCiAJLyogQWxsb2NhdGUgYmxvY2tzIHRvIHF1b3RhLiAqLwotCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaXAsIGxlbmd0aFBYRChweGQpKSkgeworCXJjID0gZHF1b3RfYWxsb2NfYmxvY2soaXAsIGxlbmd0aFBYRChweGQpKTsKKwlpZiAocmMpIHsKIAkJcmVsZWFzZV9tZXRhcGFnZShybXApOwotCQlyZXR1cm4gLUVEUVVPVDsKKwkJcmV0dXJuIHJjOwogCX0KIAogCUJUX01BUktfRElSVFkocm1wLCBpcCk7CkBAIC0yMjg3LDcgKzIyODksNyBAQAogCXhsZW4gPSBsZW5ndGhQWEQoJmZwLT5oZWFkZXIuc2VsZik7CiAKIAkvKiBGcmVlIHF1b3RhIGFsbG9jYXRpb24uICovCi0JdmZzX2RxX2ZyZWVfYmxvY2soaXAsIHhsZW4pOworCWRxdW90X2ZyZWVfYmxvY2soaXAsIHhsZW4pOwogCiAJLyogZnJlZS9pbnZhbGlkYXRlIGl0cyBidWZmZXIgcGFnZSAqLwogCWRpc2NhcmRfbWV0YXBhZ2UoZm1wKTsKQEAgLTIzNjMsNyArMjM2NSw3IEBACiAJCQkJeGxlbiA9IGxlbmd0aFBYRCgmcC0+aGVhZGVyLnNlbGYpOwogCiAJCQkJLyogRnJlZSBxdW90YSBhbGxvY2F0aW9uICovCi0JCQkJdmZzX2RxX2ZyZWVfYmxvY2soaXAsIHhsZW4pOworCQkJCWRxdW90X2ZyZWVfYmxvY2soaXAsIHhsZW4pOwogCiAJCQkJLyogZnJlZS9pbnZhbGlkYXRlIGl0cyBidWZmZXIgcGFnZSAqLwogCQkJCWRpc2NhcmRfbWV0YXBhZ2UobXApOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19leHRlbnQuYyBiL2ZzL2pmcy9qZnNfZXh0ZW50LmMKaW5kZXggNDFkNjA0NS4uNWQzYmJkMSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19leHRlbnQuYworKysgYi9mcy9qZnMvamZzX2V4dGVudC5jCkBAIC0xNDEsMTAgKzE0MSwxMSBAQAogCX0KIAogCS8qIEFsbG9jYXRlIGJsb2NrcyB0byBxdW90YS4gKi8KLQlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlwLCBueGxlbikpIHsKKwlyYyA9IGRxdW90X2FsbG9jX2Jsb2NrKGlwLCBueGxlbik7CisJaWYgKHJjKSB7CiAJCWRiRnJlZShpcCwgbnhhZGRyLCAoczY0KSBueGxlbik7CiAJCW11dGV4X3VubG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKLQkJcmV0dXJuIC1FRFFVT1Q7CisJCXJldHVybiByYzsKIAl9CiAKIAkvKiBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIHRoZSBleHRlbnQgZmxhZyAqLwpAQCAtMTY0LDcgKzE2NSw3IEBACiAJICovCiAJaWYgKHJjKSB7CiAJCWRiRnJlZShpcCwgbnhhZGRyLCBueGxlbik7Ci0JCXZmc19kcV9mcmVlX2Jsb2NrKGlwLCBueGxlbik7CisJCWRxdW90X2ZyZWVfYmxvY2soaXAsIG54bGVuKTsKIAkJbXV0ZXhfdW5sb2NrKCZKRlNfSVAoaXApLT5jb21taXRfbXV0ZXgpOwogCQlyZXR1cm4gKHJjKTsKIAl9CkBAIC0yNTYsMTAgKzI1NywxMSBAQAogCQlnb3RvIGV4aXQ7CiAKIAkvKiBBbGxvY2F0IGJsb2NrcyB0byBxdW90YS4gKi8KLQlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlwLCBueGxlbikpIHsKKwlyYyA9IGRxdW90X2FsbG9jX2Jsb2NrKGlwLCBueGxlbik7CisJaWYgKHJjKSB7CiAJCWRiRnJlZShpcCwgbnhhZGRyLCAoczY0KSBueGxlbik7CiAJCW11dGV4X3VubG9jaygmSkZTX0lQKGlwKS0+Y29tbWl0X211dGV4KTsKLQkJcmV0dXJuIC1FRFFVT1Q7CisJCXJldHVybiByYzsKIAl9CiAKIAlkZWx0YSA9IG54bGVuIC0geGxlbjsKQEAgLTI5Nyw3ICsyOTksNyBAQAogCQkvKiBleHRlbmQgdGhlIGV4dGVudCAqLwogCQlpZiAoKHJjID0geHRFeHRlbmQoMCwgaXAsIHhvZmYgKyB4bGVuLCAoaW50KSBuZXh0ZW5kLCAwKSkpIHsKIAkJCWRiRnJlZShpcCwgeGFkZHIgKyB4bGVuLCBkZWx0YSk7Ci0JCQl2ZnNfZHFfZnJlZV9ibG9jayhpcCwgbnhsZW4pOworCQkJZHF1b3RfZnJlZV9ibG9jayhpcCwgbnhsZW4pOwogCQkJZ290byBleGl0OwogCQl9CiAJfSBlbHNlIHsKQEAgLTMwOCw3ICszMTAsNyBAQAogCQkgKi8KIAkJaWYgKChyYyA9IHh0VGFpbGdhdGUoMCwgaXAsIHhvZmYsIChpbnQpIG50YWlsLCBueGFkZHIsIDApKSkgewogCQkJZGJGcmVlKGlwLCBueGFkZHIsIG54bGVuKTsKLQkJCXZmc19kcV9mcmVlX2Jsb2NrKGlwLCBueGxlbik7CisJCQlkcXVvdF9mcmVlX2Jsb2NrKGlwLCBueGxlbik7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2lub2RlLmMgYi9mcy9qZnMvamZzX2lub2RlLmMKaW5kZXggZGMwZTAyMS4uODI5OTIxYiAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19pbm9kZS5jCisrKyBiL2ZzL2pmcy9qZnNfaW5vZGUuYwpAQCAtMTE2LDEwICsxMTYsMTAgQEAKIAkvKgogCSAqIEFsbG9jYXRlIGlub2RlIHRvIHF1b3RhLgogCSAqLwotCWlmICh2ZnNfZHFfYWxsb2NfaW5vZGUoaW5vZGUpKSB7Ci0JCXJjID0gLUVEUVVPVDsKKwlkcXVvdF9pbml0aWFsaXplKGlub2RlKTsKKwlyYyA9IGRxdW90X2FsbG9jX2lub2RlKGlub2RlKTsKKwlpZiAocmMpCiAJCWdvdG8gZmFpbF9kcm9wOwotCX0KIAogCWlub2RlLT5pX21vZGUgPSBtb2RlOwogCS8qIGluaGVyaXQgZmxhZ3MgZnJvbSBwYXJlbnQgKi8KQEAgLTE2Miw3ICsxNjIsNyBAQAogCXJldHVybiBpbm9kZTsKIAogZmFpbF9kcm9wOgotCXZmc19kcV9kcm9wKGlub2RlKTsKKwlkcXVvdF9kcm9wKGlub2RlKTsKIAlpbm9kZS0+aV9mbGFncyB8PSBTX05PUVVPVEE7CiBmYWlsX3VubG9jazoKIAlpbm9kZS0+aV9ubGluayA9IDA7CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2lub2RlLmggYi9mcy9qZnMvamZzX2lub2RlLmgKaW5kZXggMWVmZjdkYi4uNzllMmM3OSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19pbm9kZS5oCisrKyBiL2ZzL2pmcy9qZnNfaW5vZGUuaApAQCAtMjYsNyArMjYsNyBAQAogZXh0ZXJuIGxvbmcgamZzX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIHN0cnVjdCBpbm9kZSAqamZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIGludCBqZnNfY29tbWl0X2lub2RlKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwotZXh0ZXJuIGludCBqZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlKiwgaW50KTsKK2V4dGVybiBpbnQgamZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKik7CiBleHRlcm4gdm9pZCBqZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiB2b2lkIGpmc19kaXJ0eV9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCBqZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICopOwpAQCAtNDAsNiArNDAsNyBAQAogCWludCBmaF9sZW4sIGludCBmaF90eXBlKTsKIGV4dGVybiB2b2lkIGpmc19zZXRfaW5vZGVfZmxhZ3Moc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBqZnNfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCwgc3RydWN0IGJ1ZmZlcl9oZWFkICosIGludCk7CitleHRlcm4gaW50IGpmc19zZXRhdHRyKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlhdHRyICopOwogCiBleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBqZnNfYW9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBqZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX3h0cmVlLmMgYi9mcy9qZnMvamZzX3h0cmVlLmMKaW5kZXggZDY1NGE2NC4uNmM1MDg3MSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc194dHJlZS5jCisrKyBiL2ZzL2pmcy9qZnNfeHRyZWUuYwpAQCAtNTg1LDEwICs1ODUsMTAgQEAKIAkJCWhpbnQgPSBhZGRyZXNzWEFEKHhhZCkgKyBsZW5ndGhYQUQoeGFkKSAtIDE7CiAJCX0gZWxzZQogCQkJaGludCA9IDA7Ci0JCWlmICgocmMgPSB2ZnNfZHFfYWxsb2NfYmxvY2soaXAsIHhsZW4pKSkKKwkJaWYgKChyYyA9IGRxdW90X2FsbG9jX2Jsb2NrKGlwLCB4bGVuKSkpCiAJCQlnb3RvIG91dDsKIAkJaWYgKChyYyA9IGRiQWxsb2MoaXAsIGhpbnQsIChzNjQpIHhsZW4sICZ4YWRkcikpKSB7Ci0JCQl2ZnNfZHFfZnJlZV9ibG9jayhpcCwgeGxlbik7CisJCQlkcXVvdF9mcmVlX2Jsb2NrKGlwLCB4bGVuKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJfQpAQCAtNjE3LDcgKzYxNyw3IEBACiAJCQkvKiB1bmRvIGRhdGEgZXh0ZW50IGFsbG9jYXRpb24gKi8KIAkJCWlmICgqeGFkZHJwID09IDApIHsKIAkJCQlkYkZyZWUoaXAsIHhhZGRyLCAoczY0KSB4bGVuKTsKLQkJCQl2ZnNfZHFfZnJlZV9ibG9jayhpcCwgeGxlbik7CisJCQkJZHF1b3RfZnJlZV9ibG9jayhpcCwgeGxlbik7CiAJCQl9CiAJCQlyZXR1cm4gcmM7CiAJCX0KQEAgLTk4NSwxMCArOTg1LDkgQEAKIAlyYm4gPSBhZGRyZXNzUFhEKHB4ZCk7CiAKIAkvKiBBbGxvY2F0ZSBibG9ja3MgdG8gcXVvdGEuICovCi0JaWYgKHZmc19kcV9hbGxvY19ibG9jayhpcCwgbGVuZ3RoUFhEKHB4ZCkpKSB7Ci0JCXJjID0gLUVEUVVPVDsKKwlyYyA9IGRxdW90X2FsbG9jX2Jsb2NrKGlwLCBsZW5ndGhQWEQocHhkKSk7CisJaWYgKHJjKQogCQlnb3RvIGNsZWFuX3VwOwotCX0KIAogCXF1b3RhX2FsbG9jYXRpb24gKz0gbGVuZ3RoUFhEKHB4ZCk7CiAKQEAgLTExOTUsNyArMTE5NCw3IEBACiAKIAkvKiBSb2xsYmFjayBxdW90YSBhbGxvY2F0aW9uLiAqLwogCWlmIChxdW90YV9hbGxvY2F0aW9uKQotCQl2ZnNfZHFfZnJlZV9ibG9jayhpcCwgcXVvdGFfYWxsb2NhdGlvbik7CisJCWRxdW90X2ZyZWVfYmxvY2soaXAsIHF1b3RhX2FsbG9jYXRpb24pOwogCiAJcmV0dXJuIChyYyk7CiB9CkBAIC0xMjM1LDYgKzEyMzQsNyBAQAogCXN0cnVjdCBweGRsaXN0ICpweGRsaXN0OwogCXN0cnVjdCB0bG9jayAqdGxjazsKIAlzdHJ1Y3QgeHRsb2NrICp4dGxjazsKKwlpbnQgcmM7CiAKIAlzcCA9ICZKRlNfSVAoaXApLT5pX3h0cm9vdDsKIApAQCAtMTI1Miw5ICsxMjUyLDEwIEBACiAJCXJldHVybiAtRUlPOwogCiAJLyogQWxsb2NhdGUgYmxvY2tzIHRvIHF1b3RhLiAqLwotCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaXAsIGxlbmd0aFBYRChweGQpKSkgeworCXJjID0gZHF1b3RfYWxsb2NfYmxvY2soaXAsIGxlbmd0aFBYRChweGQpKTsKKwlpZiAocmMpIHsKIAkJcmVsZWFzZV9tZXRhcGFnZShybXApOwotCQlyZXR1cm4gLUVEUVVPVDsKKwkJcmV0dXJuIHJjOwogCX0KIAogCWpmc19pbmZvKCJ4dFNwbGl0Um9vdDogaXA6MHglcCBybXA6MHglcCIsIGlwLCBybXApOwpAQCAtMzY4MCw3ICszNjgxLDcgQEAKIAkJaXAtPmlfc2l6ZSA9IG5ld3NpemU7CiAKIAkvKiB1cGRhdGUgcXVvdGEgYWxsb2NhdGlvbiB0byByZWZsZWN0IGZyZWVkIGJsb2NrcyAqLwotCXZmc19kcV9mcmVlX2Jsb2NrKGlwLCBuZnJlZWQpOworCWRxdW90X2ZyZWVfYmxvY2soaXAsIG5mcmVlZCk7CiAKIAkvKgogCSAqIGZyZWUgdGxvY2sgb2YgaW52YWxpZGF0ZWQgcGFnZXMKZGlmZiAtLWdpdCBhL2ZzL2pmcy9uYW1laS5jIGIvZnMvamZzL25hbWVpLmMKaW5kZXggYzc5YTQyNzAuLjRhM2U5ZjMgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9uYW1laS5jCisrKyBiL2ZzL2pmcy9uYW1laS5jCkBAIC04NSw2ICs4NSw4IEBACiAKIAlqZnNfaW5mbygiamZzX2NyZWF0ZTogZGlwOjB4JXAgbmFtZTolcyIsIGRpcCwgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKKwlkcXVvdF9pbml0aWFsaXplKGRpcCk7CisKIAkvKgogCSAqIHNlYXJjaCBwYXJlbnQgZGlyZWN0b3J5IGZvciBlbnRyeS9mcmVlc3BhY2UKIAkgKiAoZHRTZWFyY2goKSByZXR1cm5zIHBhcmVudCBkaXJlY3RvcnkgcGFnZSBwaW5uZWQpCkBAIC0yMTUsNiArMjE3LDggQEAKIAogCWpmc19pbmZvKCJqZnNfbWtkaXI6IGRpcDoweCVwIG5hbWU6JXMiLCBkaXAsIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCisJZHF1b3RfaW5pdGlhbGl6ZShkaXApOworCiAJLyogbGluayBjb3VudCBvdmVyZmxvdyBvbiBwYXJlbnQgZGlyZWN0b3J5ID8gKi8KIAlpZiAoZGlwLT5pX25saW5rID09IEpGU19MSU5LX01BWCkgewogCQlyYyA9IC1FTUxJTks7CkBAIC0zNTYsNyArMzYwLDggQEAKIAlqZnNfaW5mbygiamZzX3JtZGlyOiBkaXA6MHglcCBuYW1lOiVzIiwgZGlwLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKIAogCS8qIEluaXQgaW5vZGUgZm9yIHF1b3RhIG9wZXJhdGlvbnMuICovCi0JdmZzX2RxX2luaXQoaXApOworCWRxdW90X2luaXRpYWxpemUoZGlwKTsKKwlkcXVvdF9pbml0aWFsaXplKGlwKTsKIAogCS8qIGRpcmVjdG9yeSBtdXN0IGJlIGVtcHR5IHRvIGJlIHJlbW92ZWQgKi8KIAlpZiAoIWR0RW1wdHkoaXApKSB7CkBAIC00ODMsNyArNDg4LDggQEAKIAlqZnNfaW5mbygiamZzX3VubGluazogZGlwOjB4JXAgbmFtZTolcyIsIGRpcCwgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKIAkvKiBJbml0IGlub2RlIGZvciBxdW90YSBvcGVyYXRpb25zLiAqLwotCXZmc19kcV9pbml0KGlwKTsKKwlkcXVvdF9pbml0aWFsaXplKGRpcCk7CisJZHF1b3RfaW5pdGlhbGl6ZShpcCk7CiAKIAlpZiAoKHJjID0gZ2V0X1VDU25hbWUoJmRuYW1lLCBkZW50cnkpKSkKIAkJZ290byBvdXQ7CkBAIC04MDUsNiArODExLDggQEAKIAlpZiAoaXAtPmlfbmxpbmsgPT0gMCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CisKIAl0aWQgPSB0eEJlZ2luKGlwLT5pX3NiLCAwKTsKIAogCW11dGV4X2xvY2tfbmVzdGVkKCZKRlNfSVAoZGlyKS0+Y29tbWl0X211dGV4LCBDT01NSVRfTVVURVhfUEFSRU5UKTsKQEAgLTg5Niw2ICs5MDQsOCBAQAogCiAJamZzX2luZm8oImpmc19zeW1saW5rOiBkaXA6MHglcCBuYW1lOiVzIiwgZGlwLCBuYW1lKTsKIAorCWRxdW90X2luaXRpYWxpemUoZGlwKTsKKwogCXNzaXplID0gc3RybGVuKG5hbWUpICsgMTsKIAogCS8qCkBAIC0xMDg3LDYgKzEwOTcsOSBAQAogCWpmc19pbmZvKCJqZnNfcmVuYW1lOiAlcyAlcyIsIG9sZF9kZW50cnktPmRfbmFtZS5uYW1lLAogCQkgbmV3X2RlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCisJZHF1b3RfaW5pdGlhbGl6ZShvbGRfZGlyKTsKKwlkcXVvdF9pbml0aWFsaXplKG5ld19kaXIpOworCiAJb2xkX2lwID0gb2xkX2RlbnRyeS0+ZF9pbm9kZTsKIAluZXdfaXAgPSBuZXdfZGVudHJ5LT5kX2lub2RlOwogCkBAIC0xMTM2LDcgKzExNDksNyBAQAogCX0gZWxzZSBpZiAobmV3X2lwKSB7CiAJCUlXUklURV9MT0NLKG5ld19pcCwgUkRXUkxPQ0tfTk9STUFMKTsKIAkJLyogSW5pdCBpbm9kZSBmb3IgcXVvdGEgb3BlcmF0aW9ucy4gKi8KLQkJdmZzX2RxX2luaXQobmV3X2lwKTsKKwkJZHF1b3RfaW5pdGlhbGl6ZShuZXdfaXApOwogCX0KIAogCS8qCkBAIC0xMzYwLDYgKzEzNzMsOCBAQAogCiAJamZzX2luZm8oImpmc19ta25vZDogJXMiLCBkZW50cnktPmRfbmFtZS5uYW1lKTsKIAorCWRxdW90X2luaXRpYWxpemUoZGlyKTsKKwogCWlmICgocmMgPSBnZXRfVUNTbmFtZSgmZG5hbWUsIGRlbnRyeSkpKQogCQlnb3RvIG91dDsKIApAQCAtMTU0MSw4ICsxNTU2LDggQEAKIAkuZ2V0eGF0dHIJPSBqZnNfZ2V0eGF0dHIsCiAJLmxpc3R4YXR0cgk9IGpmc19saXN0eGF0dHIsCiAJLnJlbW92ZXhhdHRyCT0gamZzX3JlbW92ZXhhdHRyLAotI2lmZGVmIENPTkZJR19KRlNfUE9TSVhfQUNMCiAJLnNldGF0dHIJPSBqZnNfc2V0YXR0ciwKKyNpZmRlZiBDT05GSUdfSkZTX1BPU0lYX0FDTAogCS5jaGVja19hY2wJPSBqZnNfY2hlY2tfYWNsLAogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvZnMvamZzL3N1cGVyLmMgYi9mcy9qZnMvc3VwZXIuYwppbmRleCBkOTI5YTgyLi4yNjY2OTlkZSAxMDA2NDQKLS0tIGEvZnMvamZzL3N1cGVyLmMKKysrIGIvZnMvamZzL3N1cGVyLmMKQEAgLTEzMSw2ICsxMzEsMTEgQEAKIAlrbWVtX2NhY2hlX2ZyZWUoamZzX2lub2RlX2NhY2hlcCwgamkpOwogfQogCitzdGF0aWMgdm9pZCBqZnNfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlkcXVvdF9kcm9wKGlub2RlKTsKK30KKwogc3RhdGljIGludCBqZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIHsKIAlzdHJ1Y3QgamZzX3NiX2luZm8gKnNiaSA9IEpGU19TQkkoZGVudHJ5LT5kX3NiKTsKQEAgLTc0NSw2ICs3NTAsNyBAQAogCS5kaXJ0eV9pbm9kZQk9IGpmc19kaXJ0eV9pbm9kZSwKIAkud3JpdGVfaW5vZGUJPSBqZnNfd3JpdGVfaW5vZGUsCiAJLmRlbGV0ZV9pbm9kZQk9IGpmc19kZWxldGVfaW5vZGUsCisJLmNsZWFyX2lub2RlCT0gamZzX2NsZWFyX2lub2RlLAogCS5wdXRfc3VwZXIJPSBqZnNfcHV0X3N1cGVyLAogCS5zeW5jX2ZzCT0gamZzX3N5bmNfZnMsCiAJLmZyZWV6ZV9mcwk9IGpmc19mcmVlemUsCmRpZmYgLS1naXQgYS9mcy9qZnMveGF0dHIuYyBiL2ZzL2pmcy94YXR0ci5jCmluZGV4IGZhZDM2NDUuLjFmNTk0YWIgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy94YXR0ci5jCisrKyBiL2ZzL2pmcy94YXR0ci5jCkBAIC0yNjAsMTQgKzI2MCwxNCBAQAogCW5ibG9ja3MgPSAoc2l6ZSArIChzYi0+c19ibG9ja3NpemUgLSAxKSkgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHM7CiAKIAkvKiBBbGxvY2F0ZSBuZXcgYmxvY2tzIHRvIHF1b3RhLiAqLwotCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaXAsIG5ibG9ja3MpKSB7Ci0JCXJldHVybiAtRURRVU9UOwotCX0KKwlyYyA9IGRxdW90X2FsbG9jX2Jsb2NrKGlwLCBuYmxvY2tzKTsKKwlpZiAocmMpCisJCXJldHVybiByYzsKIAogCXJjID0gZGJBbGxvYyhpcCwgSU5PSElOVChpcCksIG5ibG9ja3MsICZibGtubyk7CiAJaWYgKHJjKSB7CiAJCS8qUm9sbGJhY2sgcXVvdGEgYWxsb2NhdGlvbi4gKi8KLQkJdmZzX2RxX2ZyZWVfYmxvY2soaXAsIG5ibG9ja3MpOworCQlkcXVvdF9mcmVlX2Jsb2NrKGlwLCBuYmxvY2tzKTsKIAkJcmV0dXJuIHJjOwogCX0KIApAQCAtMzMyLDcgKzMzMiw3IEBACiAKICAgICAgIGZhaWxlZDoKIAkvKiBSb2xsYmFjayBxdW90YSBhbGxvY2F0aW9uLiAqLwotCXZmc19kcV9mcmVlX2Jsb2NrKGlwLCBuYmxvY2tzKTsKKwlkcXVvdF9mcmVlX2Jsb2NrKGlwLCBuYmxvY2tzKTsKIAogCWRiRnJlZShpcCwgYmxrbm8sIG5ibG9ja3MpOwogCXJldHVybiByYzsKQEAgLTUzOCw3ICs1MzgsOCBAQAogCiAJaWYgKGJsb2Nrc19uZWVkZWQgPiBjdXJyZW50X2Jsb2NrcykgewogCQkvKiBBbGxvY2F0ZSBuZXcgYmxvY2tzIHRvIHF1b3RhLiAqLwotCQlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlub2RlLCBibG9ja3NfbmVlZGVkKSkKKwkJcmMgPSBkcXVvdF9hbGxvY19ibG9jayhpbm9kZSwgYmxvY2tzX25lZWRlZCk7CisJCWlmIChyYykKIAkJCXJldHVybiAtRURRVU9UOwogCiAJCXF1b3RhX2FsbG9jYXRpb24gPSBibG9ja3NfbmVlZGVkOwpAQCAtNjAyLDcgKzYwMyw3IEBACiAgICAgICBjbGVhbl91cDoKIAkvKiBSb2xsYmFjayBxdW90YSBhbGxvY2F0aW9uICovCiAJaWYgKHF1b3RhX2FsbG9jYXRpb24pCi0JCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCBxdW90YV9hbGxvY2F0aW9uKTsKKwkJZHF1b3RfZnJlZV9ibG9jayhpbm9kZSwgcXVvdGFfYWxsb2NhdGlvbik7CiAKIAlyZXR1cm4gKHJjKTsKIH0KQEAgLTY3Nyw3ICs2NzgsNyBAQAogCiAJLyogSWYgb2xkIGJsb2NrcyBleGlzdCwgdGhleSBtdXN0IGJlIHJlbW92ZWQgZnJvbSBxdW90YSBhbGxvY2F0aW9uLiAqLwogCWlmIChvbGRfYmxvY2tzKQotCQl2ZnNfZHFfZnJlZV9ibG9jayhpbm9kZSwgb2xkX2Jsb2Nrcyk7CisJCWRxdW90X2ZyZWVfYmxvY2soaW5vZGUsIG9sZF9ibG9ja3MpOwogCiAJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAKZGlmZiAtLWdpdCBhL2ZzL2xpYmZzLmMgYi9mcy9saWJmcy5jCmluZGV4IDZlOGQxN2UuLjllNTBiY2YgMTAwNjQ0Ci0tLSBhL2ZzL2xpYmZzLmMKKysrIGIvZnMvbGliZnMuYwpAQCAtMzM4LDI4ICszMzgsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHNpbXBsZV9wcmVwYXJlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCXVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKQotewotCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7Ci0JCWlmICh0byAtIGZyb20gIT0gUEFHRV9DQUNIRV9TSVpFKQotCQkJemVyb191c2VyX3NlZ21lbnRzKHBhZ2UsCi0JCQkJMCwgZnJvbSwKLQkJCQl0bywgUEFHRV9DQUNIRV9TSVpFKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIGludCBzaW1wbGVfd3JpdGVfYmVnaW4oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKIAkJCXN0cnVjdCBwYWdlICoqcGFnZXAsIHZvaWQgKipmc2RhdGEpCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJcGdvZmZfdCBpbmRleDsKLQl1bnNpZ25lZCBmcm9tOwogCiAJaW5kZXggPSBwb3MgPj4gUEFHRV9DQUNIRV9TSElGVDsKLQlmcm9tID0gcG9zICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOwogCiAJcGFnZSA9IGdyYWJfY2FjaGVfcGFnZV93cml0ZV9iZWdpbihtYXBwaW5nLCBpbmRleCwgZmxhZ3MpOwogCWlmICghcGFnZSkKQEAgLTM2NywxNCArMzUzLDQ4IEBACiAKIAkqcGFnZXAgPSBwYWdlOwogCi0JcmV0dXJuIHNpbXBsZV9wcmVwYXJlX3dyaXRlKGZpbGUsIHBhZ2UsIGZyb20sIGZyb20rbGVuKTsKKwlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSAmJiAobGVuICE9IFBBR0VfQ0FDSEVfU0laRSkpIHsKKwkJdW5zaWduZWQgZnJvbSA9IHBvcyAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKKworCQl6ZXJvX3VzZXJfc2VnbWVudHMocGFnZSwgMCwgZnJvbSwgZnJvbSArIGxlbiwgUEFHRV9DQUNIRV9TSVpFKTsKKwl9CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2ltcGxlX2NvbW1pdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQkgICAgICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pCisvKioKKyAqIHNpbXBsZV93cml0ZV9lbmQgLSAud3JpdGVfZW5kIGhlbHBlciBmb3Igbm9uLWJsb2NrLWRldmljZSBGU2VzCisgKiBAYXZhaWxhYmxlOiBTZWUgLndyaXRlX2VuZCBvZiBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMKKyAqIEBmaWxlOiAJCSIKKyAqIEBtYXBwaW5nOiAJCSIKKyAqIEBwb3M6IAkJIgorICogQGxlbjogCQkiCisgKiBAY29waWVkOiAJCSIKKyAqIEBwYWdlOiAJCSIKKyAqIEBmc2RhdGE6IAkJIgorICoKKyAqIHNpbXBsZV93cml0ZV9lbmQgZG9lcyB0aGUgbWluaW11bSBuZWVkZWQgZm9yIHVwZGF0aW5nIGEgcGFnZSBhZnRlciB3cml0aW5nIGlzCisgKiBkb25lLiBJdCBoYXMgdGhlIHNhbWUgQVBJIHNpZ25hdHVyZSBhcyB0aGUgLndyaXRlX2VuZCBvZgorICogYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHZlY3Rvci4gU28gaXQgY2FuIGp1c3QgYmUgc2V0IG9udG8gLndyaXRlX2VuZCBmb3IKKyAqIEZTZXMgdGhhdCBkb24ndCBuZWVkIGFueSBvdGhlciBwcm9jZXNzaW5nLiBpX211dGV4IGlzIGFzc3VtZWQgdG8gYmUgaGVsZC4KKyAqIEJsb2NrIGJhc2VkIGZpbGVzeXN0ZW1zIHNob3VsZCB1c2UgZ2VuZXJpY193cml0ZV9lbmQoKS4KKyAqIE5PVEU6IEV2ZW4gdGhvdWdoIGlfc2l6ZSBtaWdodCBnZXQgdXBkYXRlZCBieSB0aGlzIGZ1bmN0aW9uLCBtYXJrX2lub2RlX2RpcnR5CisgKiBpcyBub3QgY2FsbGVkLCBzbyBhIGZpbGVzeXN0ZW0gdGhhdCBhY3R1YWxseSBkb2VzIHN0b3JlIGRhdGEgaW4gLndyaXRlX2lub2RlCisgKiBzaG91bGQgZXh0ZW5kIG9uIHdoYXQncyBkb25lIGhlcmUgd2l0aCBhIGNhbGwgdG8gbWFya19pbm9kZV9kaXJ0eSgpIGluIHRoZQorICogY2FzZSB0aGF0IGlfc2l6ZSBoYXMgY2hhbmdlZC4KKyAqLworaW50IHNpbXBsZV93cml0ZV9lbmQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBjb3BpZWQsCisJCQlzdHJ1Y3QgcGFnZSAqcGFnZSwgdm9pZCAqZnNkYXRhKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwotCWxvZmZfdCBwb3MgPSAoKGxvZmZfdClwYWdlLT5pbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUKSArIHRvOworCWxvZmZfdCBsYXN0X3BvcyA9IHBvcyArIGNvcGllZDsKKworCS8qIHplcm8gdGhlIHN0YWxlIHBhcnQgb2YgdGhlIHBhZ2UgaWYgd2UgZGlkIGEgc2hvcnQgY29weSAqLworCWlmIChjb3BpZWQgPCBsZW4pIHsKKwkJdW5zaWduZWQgZnJvbSA9IHBvcyAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKKworCQl6ZXJvX3VzZXIocGFnZSwgZnJvbSArIGNvcGllZCwgbGVuIC0gY29waWVkKTsKKwl9CiAKIAlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkKIAkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwpAQCAtMzgyLDI4ICs0MDIsMTAgQEAKIAkgKiBObyBuZWVkIHRvIHVzZSBpX3NpemVfcmVhZCgpIGhlcmUsIHRoZSBpX3NpemUKIAkgKiBjYW5ub3QgY2hhbmdlIHVuZGVyIHVzIGJlY2F1c2Ugd2UgaG9sZCB0aGUgaV9tdXRleC4KIAkgKi8KLQlpZiAocG9zID4gaW5vZGUtPmlfc2l6ZSkKLQkJaV9zaXplX3dyaXRlKGlub2RlLCBwb3MpOworCWlmIChsYXN0X3BvcyA+IGlub2RlLT5pX3NpemUpCisJCWlfc2l6ZV93cml0ZShpbm9kZSwgbGFzdF9wb3MpOworCiAJc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBzaW1wbGVfd3JpdGVfZW5kKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKLQkJCWxvZmZfdCBwb3MsIHVuc2lnbmVkIGxlbiwgdW5zaWduZWQgY29waWVkLAotCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIHZvaWQgKmZzZGF0YSkKLXsKLQl1bnNpZ25lZCBmcm9tID0gcG9zICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOwotCi0JLyogemVybyB0aGUgc3RhbGUgcGFydCBvZiB0aGUgcGFnZSBpZiB3ZSBkaWQgYSBzaG9ydCBjb3B5ICovCi0JaWYgKGNvcGllZCA8IGxlbikgewotCQl2b2lkICprYWRkciA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKLQkJbWVtc2V0KGthZGRyICsgZnJvbSArIGNvcGllZCwgMCwgbGVuIC0gY29waWVkKTsKLQkJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7Ci0JCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKLQl9Ci0KLQlzaW1wbGVfY29tbWl0X3dyaXRlKGZpbGUsIHBhZ2UsIGZyb20sIGZyb20rY29waWVkKTsKLQogCXVubG9ja19wYWdlKHBhZ2UpOwogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIApAQCAtODUzLDcgKzg1NSw2IEBACiBFWFBPUlRfU1lNQk9MKHNpbXBsZV9saW5rKTsKIEVYUE9SVF9TWU1CT0woc2ltcGxlX2xvb2t1cCk7CiBFWFBPUlRfU1lNQk9MKHNpbXBsZV9waW5fZnMpOwotRVhQT1JUX1VOVVNFRF9TWU1CT0woc2ltcGxlX3ByZXBhcmVfd3JpdGUpOwogRVhQT1JUX1NZTUJPTChzaW1wbGVfcmVhZHBhZ2UpOwogRVhQT1JUX1NZTUJPTChzaW1wbGVfcmVsZWFzZV9mcyk7CiBFWFBPUlRfU1lNQk9MKHNpbXBsZV9yZW5hbWUpOwpkaWZmIC0tZ2l0IGEvZnMvbG9ja2QvaG9zdC5jIGIvZnMvbG9ja2QvaG9zdC5jCmluZGV4IDQ2MDBjMjAuLmJiNDY0ZDEyMTAgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL2hvc3QuYworKysgYi9mcy9sb2NrZC9ob3N0LmMKQEAgLTQ3OSw4ICs0NzksOCBAQAogCQkJfQogCQl9CiAJfQotCiAJbXV0ZXhfdW5sb2NrKCZubG1faG9zdF9tdXRleCk7CisJbnNtX3JlbGVhc2UobnNtKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL21vbi5jIGIvZnMvbG9ja2QvbW9uLmMKaW5kZXggZjk1NjY1MS4uZmVmYTRkZiAxMDA2NDQKLS0tIGEvZnMvbG9ja2QvbW9uLmMKKysrIGIvZnMvbG9ja2QvbW9uLmMKQEAgLTM0OSw5ICszNDksOSBAQAogICogbnNtX3JlYm9vdF9sb29rdXAgLSBtYXRjaCBOTE1QUk9DX1NNX05PVElGWSBhcmd1bWVudHMgdG8gYW4gbnNtX2hhbmRsZQogICogQGluZm86IHBvaW50ZXIgdG8gTkxNUFJPQ19TTV9OT1RJRlkgYXJndW1lbnRzCiAgKgotICogUmV0dXJucyBhIG1hdGNoaW5nIG5zbV9oYW5kbGUgaWYgZm91bmQgaW4gdGhlIG5zbSBjYWNoZTsgdGhlIHJldHVybmVkCi0gKiBuc21faGFuZGxlJ3MgcmVmZXJlbmNlIGNvdW50IGlzIGJ1bXBlZCBhbmQgc21fbW9uaXRvcmVkIGlzIGNsZWFyZWQuCi0gKiBPdGhlcndpc2UgcmV0dXJucyBOVUxMIGlmIHNvbWUgZXJyb3Igb2NjdXJyZWQuCisgKiBSZXR1cm5zIGEgbWF0Y2hpbmcgbnNtX2hhbmRsZSBpZiBmb3VuZCBpbiB0aGUgbnNtIGNhY2hlLiBUaGUgcmV0dXJuZWQKKyAqIG5zbV9oYW5kbGUncyByZWZlcmVuY2UgY291bnQgaXMgYnVtcGVkLiBPdGhlcndpc2UgcmV0dXJucyBOVUxMIGlmIHNvbWUKKyAqIGVycm9yIG9jY3VycmVkLgogICovCiBzdHJ1Y3QgbnNtX2hhbmRsZSAqbnNtX3JlYm9vdF9sb29rdXAoY29uc3Qgc3RydWN0IG5sbV9yZWJvb3QgKmluZm8pCiB7CkBAIC0zNzAsMTIgKzM3MCw2IEBACiAJYXRvbWljX2luYygmY2FjaGVkLT5zbV9jb3VudCk7CiAJc3Bpbl91bmxvY2soJm5zbV9sb2NrKTsKIAotCS8qCi0JICogRHVyaW5nIHN1YnNlcXVlbnQgbG9jayBhY3Rpdml0eSwgZm9yY2UgYSBmcmVzaAotCSAqIG5vdGlmaWNhdGlvbiB0byBiZSBzZXQgdXAgZm9yIHRoaXMgaG9zdC4KLQkgKi8KLQljYWNoZWQtPnNtX21vbml0b3JlZCA9IDA7Ci0KIAlkcHJpbnRrKCJsb2NrZDogaG9zdCAlcyAoJXMpIHJlYm9vdGVkLCBjbnQgJWRcbiIsCiAJCQljYWNoZWQtPnNtX25hbWUsIGNhY2hlZC0+c21fYWRkcmJ1ZiwKIAkJCWF0b21pY19yZWFkKCZjYWNoZWQtPnNtX2NvdW50KSk7CmRpZmYgLS1naXQgYS9mcy9sb2NrZC9zdmMuYyBiL2ZzL2xvY2tkL3N2Yy5jCmluZGV4IGU1MGNmYTMuLjdkMTUwNTEgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL3N2Yy5jCisrKyBiL2ZzL2xvY2tkL3N2Yy5jCkBAIC0yNDMsMTEgKzI0Myw5IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gb3V0X2VycjsKIAotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogCWVyciA9IGNyZWF0ZV9sb2NrZF9mYW1pbHkoc2VydiwgUEZfSU5FVDYpOwogCWlmIChlcnIgPCAwICYmIGVyciAhPSAtRUFGTk9TVVBQT1JUKQogCQlnb3RvIG91dF9lcnI7Ci0jZW5kaWYJLyogQ09ORklHX0lQVjYgfHwgQ09ORklHX0lQVjZfTU9EVUxFICovCiAKIAl3YXJuZWQgPSAwOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvbG9ja3MuYyBiL2ZzL2xvY2tzLmMKaW5kZXggYTg3OTRmMi4uYWIyNGQ0OSAxMDA2NDQKLS0tIGEvZnMvbG9ja3MuYworKysgYi9mcy9sb2Nrcy5jCkBAIC0xMTgyLDggKzExODIsOSBAQAogCXN0cnVjdCBmaWxlX2xvY2sgKmZsOwogCXVuc2lnbmVkIGxvbmcgYnJlYWtfdGltZTsKIAlpbnQgaV9oYXZlX3RoaXNfbGVhc2UgPSAwOworCWludCB3YW50X3dyaXRlID0gKG1vZGUgJiBPX0FDQ01PREUpICE9IE9fUkRPTkxZOwogCi0JbmV3X2ZsID0gbGVhc2VfYWxsb2MoTlVMTCwgbW9kZSAmIEZNT0RFX1dSSVRFID8gRl9XUkxDSyA6IEZfUkRMQ0spOworCW5ld19mbCA9IGxlYXNlX2FsbG9jKE5VTEwsIHdhbnRfd3JpdGUgPyBGX1dSTENLIDogRl9SRExDSyk7CiAKIAlsb2NrX2tlcm5lbCgpOwogCkBAIC0xMTk3LDcgKzExOTgsNyBAQAogCQlpZiAoZmwtPmZsX293bmVyID09IGN1cnJlbnQtPmZpbGVzKQogCQkJaV9oYXZlX3RoaXNfbGVhc2UgPSAxOwogCi0JaWYgKG1vZGUgJiBGTU9ERV9XUklURSkgeworCWlmICh3YW50X3dyaXRlKSB7CiAJCS8qIElmIHdlIHdhbnQgd3JpdGUgYWNjZXNzLCB3ZSBoYXZlIHRvIHJldm9rZSBhbnkgbGVhc2UuICovCiAJCWZ1dHVyZSA9IEZfVU5MQ0sgfCBGX0lOUFJPR1JFU1M7CiAJfSBlbHNlIGlmIChmbG9jay0+ZmxfdHlwZSAmIEZfSU5QUk9HUkVTUykgewpAQCAtMTQ1NCw3ICsxNDU1LDcgQEAKICAqCWxlYXNlcyBoZWxkIGJ5IHByb2Nlc3NlcyBvbiB0aGlzIG5vZGUuCiAgKgogICoJVGhlcmUgaXMgYWxzbyBubyBicmVha19sZWFzZSBtZXRob2Q7IGZpbGVzeXN0ZW1zIHRoYXQKLSAqCWhhbmRsZSB0aGVpciBvd24gbGVhc2VzIHNob3VkIGJyZWFrIGxlYXNlcyB0aGVtc2VsdmVzIGZyb20gdGhlCisgKgloYW5kbGUgdGhlaXIgb3duIGxlYXNlcyBzaG91bGQgYnJlYWsgbGVhc2VzIHRoZW1zZWx2ZXMgZnJvbSB0aGUKICAqCWZpbGVzeXN0ZW0ncyBvcGVuLCBjcmVhdGUsIGFuZCAob24gdHJ1bmNhdGUpIHNldGF0dHIgbWV0aG9kcy4KICAqCiAgKglXYXJuaW5nOiB0aGUgb25seSBjdXJyZW50IHNldGxlYXNlIG1ldGhvZHMgZXhpc3Qgb25seSB0byBkaXNhYmxlCmRpZmYgLS1naXQgYS9mcy9sb2dmcy9LY29uZmlnIGIvZnMvbG9nZnMvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWY5YTliCi0tLSAvZGV2L251bGwKKysrIGIvZnMvbG9nZnMvS2NvbmZpZwpAQCAtMCwwICsxLDE3IEBACitjb25maWcgTE9HRlMKKwl0cmlzdGF0ZSAiTG9nRlMgZmlsZSBzeXN0ZW0gKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiAoTVREIHx8IEJMT0NLKSAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgWkxJQl9JTkZMQVRFCisJc2VsZWN0IFpMSUJfREVGTEFURQorCXNlbGVjdCBDUkMzMgorCXNlbGVjdCBCVFJFRQorCWhlbHAKKwkgIEZsYXNoIGZpbGVzeXN0ZW0gYWltZWQgdG8gc2NhbGUgZWZmaWNpZW50bHkgdG8gbGFyZ2UgZGV2aWNlcy4KKwkgIEluIGNvbXBhcmlzb24gdG8gSkZGUzIgaXQgb2ZmZXJzIHNpZ25pZmljYW50bHkgZmFzdGVyIG1vdW50CisJICB0aW1lcyBhbmQgcG90ZW50aWFsbHkgbGVzcyBSQU0gdXNhZ2UsIGFsdGhvdWdoIHRoZSBsYXR0ZXIgaGFzCisJICBub3QgYmVlbiBtZWFzdXJlZCB5ZXQuCisKKwkgIEluIGl0cyBjdXJyZW50IHN0YXRlIGl0IGlzIHN0aWxsIHZlcnkgZXhwZXJpbWVudGFsIGFuZCBzaG91bGQKKwkgIG5vdCBiZSB1c2VkIGZvciBvdGhlciB0aGFuIHRlc3RpbmcgcHVycG9zZXMuCisKKwkgIElmIHVuc3VyZSwgc2F5IE4uCmRpZmYgLS1naXQgYS9mcy9sb2dmcy9NYWtlZmlsZSBiL2ZzL2xvZ2ZzL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MjAwMjcKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9sb2dmcy9NYWtlZmlsZQpAQCAtMCwwICsxLDEzIEBACitvYmotJChDT05GSUdfTE9HRlMpCSs9IGxvZ2ZzLm8KKworbG9nZnMteQkrPSBjb21wci5vCitsb2dmcy15CSs9IGRpci5vCitsb2dmcy15CSs9IGZpbGUubworbG9nZnMteQkrPSBnYy5vCitsb2dmcy15CSs9IGlub2RlLm8KK2xvZ2ZzLXkJKz0gam91cm5hbC5vCitsb2dmcy15CSs9IHJlYWR3cml0ZS5vCitsb2dmcy15CSs9IHNlZ21lbnQubworbG9nZnMteQkrPSBzdXBlci5vCitsb2dmcy0kKENPTkZJR19CTE9DSykJKz0gZGV2X2JkZXYubworbG9nZnMtJChDT05GSUdfTVREKQkrPSBkZXZfbXRkLm8KZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL2NvbXByLmMgYi9mcy9sb2dmcy9jb21wci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0YmJmZDIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9sb2dmcy9jb21wci5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBmcy9sb2dmcy9jb21wci5jCS0gY29tcHJlc3Npb24gcm91dGluZXMKKyAqCisgKiBBcyBzaG91bGQgYmUgb2J2aW91cyBmb3IgTGludXgga2VybmVsIGNvZGUsIGxpY2Vuc2UgaXMgR1BMdjIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBKb2VybiBFbmdlbCA8am9lcm5AbG9nZnMub3JnPgorICovCisjaW5jbHVkZSAibG9nZnMuaCIKKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvemxpYi5oPgorCisjZGVmaW5lIENPTVBSX0xFVkVMIDMKKworc3RhdGljIERFRklORV9NVVRFWChjb21wcl9tdXRleCk7CitzdGF0aWMgc3RydWN0IHpfc3RyZWFtX3Mgc3RyZWFtOworCitpbnQgbG9nZnNfY29tcHJlc3Modm9pZCAqaW4sIHZvaWQgKm91dCwgc2l6ZV90IGlubGVuLCBzaXplX3Qgb3V0bGVuKQoreworCWludCBlcnIsIHJldDsKKworCXJldCA9IC1FSU87CisJbXV0ZXhfbG9jaygmY29tcHJfbXV0ZXgpOworCWVyciA9IHpsaWJfZGVmbGF0ZUluaXQoJnN0cmVhbSwgQ09NUFJfTEVWRUwpOworCWlmIChlcnIgIT0gWl9PSykKKwkJZ290byBlcnJvcjsKKworCXN0cmVhbS5uZXh0X2luID0gaW47CisJc3RyZWFtLmF2YWlsX2luID0gaW5sZW47CisJc3RyZWFtLnRvdGFsX2luID0gMDsKKwlzdHJlYW0ubmV4dF9vdXQgPSBvdXQ7CisJc3RyZWFtLmF2YWlsX291dCA9IG91dGxlbjsKKwlzdHJlYW0udG90YWxfb3V0ID0gMDsKKworCWVyciA9IHpsaWJfZGVmbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCk7CisJaWYgKGVyciAhPSBaX1NUUkVBTV9FTkQpCisJCWdvdG8gZXJyb3I7CisKKwllcnIgPSB6bGliX2RlZmxhdGVFbmQoJnN0cmVhbSk7CisJaWYgKGVyciAhPSBaX09LKQorCQlnb3RvIGVycm9yOworCisJaWYgKHN0cmVhbS50b3RhbF9vdXQgPj0gc3RyZWFtLnRvdGFsX2luKQorCQlnb3RvIGVycm9yOworCisJcmV0ID0gc3RyZWFtLnRvdGFsX291dDsKK2Vycm9yOgorCW11dGV4X3VubG9jaygmY29tcHJfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBsb2dmc191bmNvbXByZXNzKHZvaWQgKmluLCB2b2lkICpvdXQsIHNpemVfdCBpbmxlbiwgc2l6ZV90IG91dGxlbikKK3sKKwlpbnQgZXJyLCByZXQ7CisKKwlyZXQgPSAtRUlPOworCW11dGV4X2xvY2soJmNvbXByX211dGV4KTsKKwllcnIgPSB6bGliX2luZmxhdGVJbml0KCZzdHJlYW0pOworCWlmIChlcnIgIT0gWl9PSykKKwkJZ290byBlcnJvcjsKKworCXN0cmVhbS5uZXh0X2luID0gaW47CisJc3RyZWFtLmF2YWlsX2luID0gaW5sZW47CisJc3RyZWFtLnRvdGFsX2luID0gMDsKKwlzdHJlYW0ubmV4dF9vdXQgPSBvdXQ7CisJc3RyZWFtLmF2YWlsX291dCA9IG91dGxlbjsKKwlzdHJlYW0udG90YWxfb3V0ID0gMDsKKworCWVyciA9IHpsaWJfaW5mbGF0ZSgmc3RyZWFtLCBaX0ZJTklTSCk7CisJaWYgKGVyciAhPSBaX1NUUkVBTV9FTkQpCisJCWdvdG8gZXJyb3I7CisKKwllcnIgPSB6bGliX2luZmxhdGVFbmQoJnN0cmVhbSk7CisJaWYgKGVyciAhPSBaX09LKQorCQlnb3RvIGVycm9yOworCisJcmV0ID0gMDsKK2Vycm9yOgorCW11dGV4X3VubG9jaygmY29tcHJfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBfX2luaXQgbG9nZnNfY29tcHJfaW5pdCh2b2lkKQoreworCXNpemVfdCBzaXplID0gbWF4KHpsaWJfZGVmbGF0ZV93b3Jrc3BhY2VzaXplKCksCisJCQl6bGliX2luZmxhdGVfd29ya3NwYWNlc2l6ZSgpKTsKKwlzdHJlYW0ud29ya3NwYWNlID0gdm1hbGxvYyhzaXplKTsKKwlpZiAoIXN0cmVhbS53b3Jrc3BhY2UpCisJCXJldHVybiAtRU5PTUVNOworCXJldHVybiAwOworfQorCit2b2lkIGxvZ2ZzX2NvbXByX2V4aXQodm9pZCkKK3sKKwl2ZnJlZShzdHJlYW0ud29ya3NwYWNlKTsKK30KZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL2Rldl9iZGV2LmMgYi9mcy9sb2dmcy9kZXZfYmRldi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3MThjMjIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9sb2dmcy9kZXZfYmRldi5jCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogZnMvbG9nZnMvZGV2X2JkZXYuYwktIERldmljZSBhY2Nlc3MgbWV0aG9kcyBmb3IgYmxvY2sgZGV2aWNlcworICoKKyAqIEFzIHNob3VsZCBiZSBvYnZpb3VzIGZvciBMaW51eCBrZXJuZWwgY29kZSwgbGljZW5zZSBpcyBHUEx2MgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA4IEpvZXJuIEVuZ2VsIDxqb2VybkBsb2dmcy5vcmc+CisgKi8KKyNpbmNsdWRlICJsb2dmcy5oIgorI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisKKyNkZWZpbmUgUEFHRV9PRlMob2ZzKSAoKG9mcykgJiAoUEFHRV9TSVpFLTEpKQorCitzdGF0aWMgdm9pZCByZXF1ZXN0X2NvbXBsZXRlKHN0cnVjdCBiaW8gKmJpbywgaW50IGVycikKK3sKKwljb21wbGV0ZSgoc3RydWN0IGNvbXBsZXRpb24gKiliaW8tPmJpX3ByaXZhdGUpOworfQorCitzdGF0aWMgaW50IHN5bmNfcmVxdWVzdChzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgaW50IHJ3KQoreworCXN0cnVjdCBiaW8gYmlvOworCXN0cnVjdCBiaW9fdmVjIGJpb192ZWM7CisJc3RydWN0IGNvbXBsZXRpb24gY29tcGxldGU7CisKKwliaW9faW5pdCgmYmlvKTsKKwliaW8uYmlfaW9fdmVjID0gJmJpb192ZWM7CisJYmlvX3ZlYy5idl9wYWdlID0gcGFnZTsKKwliaW9fdmVjLmJ2X2xlbiA9IFBBR0VfU0laRTsKKwliaW9fdmVjLmJ2X29mZnNldCA9IDA7CisJYmlvLmJpX3ZjbnQgPSAxOworCWJpby5iaV9pZHggPSAwOworCWJpby5iaV9zaXplID0gUEFHRV9TSVpFOworCWJpby5iaV9iZGV2ID0gYmRldjsKKwliaW8uYmlfc2VjdG9yID0gcGFnZS0+aW5kZXggKiAoUEFHRV9TSVpFID4+IDkpOworCWluaXRfY29tcGxldGlvbigmY29tcGxldGUpOworCWJpby5iaV9wcml2YXRlID0gJmNvbXBsZXRlOworCWJpby5iaV9lbmRfaW8gPSByZXF1ZXN0X2NvbXBsZXRlOworCisJc3VibWl0X2JpbyhydywgJmJpbyk7CisJZ2VuZXJpY191bnBsdWdfZGV2aWNlKGJkZXZfZ2V0X3F1ZXVlKGJkZXYpKTsKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjb21wbGV0ZSk7CisJcmV0dXJuIHRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpby5iaV9mbGFncykgPyAwIDogLUVJTzsKK30KKworc3RhdGljIGludCBiZGV2X3JlYWRwYWdlKHZvaWQgKl9zYiwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IF9zYjsKKwlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gbG9nZnNfc3VwZXIoc2IpLT5zX2JkZXY7CisJaW50IGVycjsKKworCWVyciA9IHN5bmNfcmVxdWVzdChwYWdlLCBiZGV2LCBSRUFEKTsKKwlpZiAoZXJyKSB7CisJCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOworCQlTZXRQYWdlRXJyb3IocGFnZSk7CisJfSBlbHNlIHsKKwkJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCQlDbGVhclBhZ2VFcnJvcihwYWdlKTsKKwl9CisJdW5sb2NrX3BhZ2UocGFnZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHdxKTsKKworc3RhdGljIHZvaWQgd3JpdGVzZWdfZW5kX2lvKHN0cnVjdCBiaW8gKmJpbywgaW50IGVycikKK3sKKwljb25zdCBpbnQgdXB0b2RhdGUgPSB0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKTsKKwlzdHJ1Y3QgYmlvX3ZlYyAqYnZlYyA9IGJpby0+YmlfaW9fdmVjICsgYmlvLT5iaV92Y250IC0gMTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gYmlvLT5iaV9wcml2YXRlOworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlCVUdfT04oIXVwdG9kYXRlKTsgLyogRklYTUU6IFJldHJ5IGlvIG9yIHdyaXRlIGVsc2V3aGVyZSAqLworCUJVR19PTihlcnIpOworCUJVR19PTihiaW8tPmJpX3ZjbnQgPT0gMCk7CisJZG8geworCQlwYWdlID0gYnZlYy0+YnZfcGFnZTsKKwkJaWYgKC0tYnZlYyA+PSBiaW8tPmJpX2lvX3ZlYykKKwkJCXByZWZldGNodygmYnZlYy0+YnZfcGFnZS0+ZmxhZ3MpOworCisJCWVuZF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKKwl9IHdoaWxlIChidmVjID49IGJpby0+YmlfaW9fdmVjKTsKKwliaW9fcHV0KGJpbyk7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnN1cGVyLT5zX3BlbmRpbmdfd3JpdGVzKSkKKwkJd2FrZV91cCgmd3EpOworfQorCitzdGF0aWMgaW50IF9fYmRldl93cml0ZXNlZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgb2ZzLCBwZ29mZl90IGluZGV4LAorCQlzaXplX3QgbnJfcGFnZXMpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHN1cGVyLT5zX21hcHBpbmdfaW5vZGUtPmlfbWFwcGluZzsKKwlzdHJ1Y3QgYmlvICpiaW87CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3RydWN0IHJlcXVlc3RfcXVldWUgKnEgPSBiZGV2X2dldF9xdWV1ZShzYi0+c19iZGV2KTsKKwl1bnNpZ25lZCBpbnQgbWF4X3BhZ2VzID0gcXVldWVfbWF4X2h3X3NlY3RvcnMocSkgPj4gKFBBR0VfU0hJRlQgLSA5KTsKKwlpbnQgaTsKKworCWJpbyA9IGJpb19hbGxvYyhHRlBfTk9GUywgbWF4X3BhZ2VzKTsKKwlCVUdfT04oIWJpbyk7IC8qIEZJWE1FOiBoYW5kbGUgdGhpcyAqLworCisJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKKwkJaWYgKGkgPj0gbWF4X3BhZ2VzKSB7CisJCQkvKiBCbG9jayBsYXllciBjYW5ub3Qgc3BsaXQgYmlvcyA6KCAqLworCQkJYmlvLT5iaV92Y250ID0gaTsKKwkJCWJpby0+YmlfaWR4ID0gMDsKKwkJCWJpby0+Ymlfc2l6ZSA9IGkgKiBQQUdFX1NJWkU7CisJCQliaW8tPmJpX2JkZXYgPSBzdXBlci0+c19iZGV2OworCQkJYmlvLT5iaV9zZWN0b3IgPSBvZnMgPj4gOTsKKwkJCWJpby0+YmlfcHJpdmF0ZSA9IHNiOworCQkJYmlvLT5iaV9lbmRfaW8gPSB3cml0ZXNlZ19lbmRfaW87CisJCQlhdG9taWNfaW5jKCZzdXBlci0+c19wZW5kaW5nX3dyaXRlcyk7CisJCQlzdWJtaXRfYmlvKFdSSVRFLCBiaW8pOworCisJCQlvZnMgKz0gaSAqIFBBR0VfU0laRTsKKwkJCWluZGV4ICs9IGk7CisJCQlucl9wYWdlcyAtPSBpOworCQkJaSA9IDA7CisKKwkJCWJpbyA9IGJpb19hbGxvYyhHRlBfTk9GUywgbWF4X3BhZ2VzKTsKKwkJCUJVR19PTighYmlvKTsKKwkJfQorCQlwYWdlID0gZmluZF9sb2NrX3BhZ2UobWFwcGluZywgaW5kZXggKyBpKTsKKwkJQlVHX09OKCFwYWdlKTsKKwkJYmlvLT5iaV9pb192ZWNbaV0uYnZfcGFnZSA9IHBhZ2U7CisJCWJpby0+YmlfaW9fdmVjW2ldLmJ2X2xlbiA9IFBBR0VfU0laRTsKKwkJYmlvLT5iaV9pb192ZWNbaV0uYnZfb2Zmc2V0ID0gMDsKKworCQlCVUdfT04oUGFnZVdyaXRlYmFjayhwYWdlKSk7CisJCXNldF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJfQorCWJpby0+YmlfdmNudCA9IG5yX3BhZ2VzOworCWJpby0+YmlfaWR4ID0gMDsKKwliaW8tPmJpX3NpemUgPSBucl9wYWdlcyAqIFBBR0VfU0laRTsKKwliaW8tPmJpX2JkZXYgPSBzdXBlci0+c19iZGV2OworCWJpby0+Ymlfc2VjdG9yID0gb2ZzID4+IDk7CisJYmlvLT5iaV9wcml2YXRlID0gc2I7CisJYmlvLT5iaV9lbmRfaW8gPSB3cml0ZXNlZ19lbmRfaW87CisJYXRvbWljX2luYygmc3VwZXItPnNfcGVuZGluZ193cml0ZXMpOworCXN1Ym1pdF9iaW8oV1JJVEUsIGJpbyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJkZXZfd3JpdGVzZWcoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IG9mcywgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCWludCBoZWFkOworCisJQlVHX09OKHN1cGVyLT5zX2ZsYWdzICYgTE9HRlNfU0JfRkxBR19STyk7CisKKwlpZiAobGVuID09IDApIHsKKwkJLyogVGhpcyBjYW4gaGFwcGVuIHdoZW4gdGhlIG9iamVjdCBmaXQgcGVyZmVjdGx5IGludG8gYQorCQkgKiBzZWdtZW50LCB0aGUgc2VnbWVudCBnZXRzIHdyaXR0ZW4gcGVyIHN5bmMgYW5kIHN1YnNlcXVlbnRseQorCQkgKiBjbG9zZWQuCisJCSAqLworCQlyZXR1cm47CisJfQorCWhlYWQgPSBvZnMgJiAoUEFHRV9TSVpFIC0gMSk7CisJaWYgKGhlYWQpIHsKKwkJb2ZzIC09IGhlYWQ7CisJCWxlbiArPSBoZWFkOworCX0KKwlsZW4gPSBQQUdFX0FMSUdOKGxlbik7CisJX19iZGV2X3dyaXRlc2VnKHNiLCBvZnMsIG9mcyA+PiBQQUdFX1NISUZULCBsZW4gPj4gUEFHRV9TSElGVCk7CisJZ2VuZXJpY191bnBsdWdfZGV2aWNlKGJkZXZfZ2V0X3F1ZXVlKGxvZ2ZzX3N1cGVyKHNiKS0+c19iZGV2KSk7Cit9CisKKworc3RhdGljIHZvaWQgZXJhc2VfZW5kX2lvKHN0cnVjdCBiaW8gKmJpbywgaW50IGVycikgCit7IAorCWNvbnN0IGludCB1cHRvZGF0ZSA9IHRlc3RfYml0KEJJT19VUFRPREFURSwgJmJpby0+YmlfZmxhZ3MpOyAKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gYmlvLT5iaV9wcml2YXRlOyAKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOyAKKworCUJVR19PTighdXB0b2RhdGUpOyAvKiBGSVhNRTogUmV0cnkgaW8gb3Igd3JpdGUgZWxzZXdoZXJlICovIAorCUJVR19PTihlcnIpOyAKKwlCVUdfT04oYmlvLT5iaV92Y250ID09IDApOyAKKwliaW9fcHV0KGJpbyk7IAorCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZzdXBlci0+c19wZW5kaW5nX3dyaXRlcykpCisJCXdha2VfdXAoJndxKTsgCit9IAorCitzdGF0aWMgaW50IGRvX2VyYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBvZnMsIHBnb2ZmX3QgaW5kZXgsCisJCXNpemVfdCBucl9wYWdlcykKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBiaW8gKmJpbzsKKwlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGJkZXZfZ2V0X3F1ZXVlKHNiLT5zX2JkZXYpOworCXVuc2lnbmVkIGludCBtYXhfcGFnZXMgPSBxdWV1ZV9tYXhfaHdfc2VjdG9ycyhxKSA+PiAoUEFHRV9TSElGVCAtIDkpOworCWludCBpOworCisJYmlvID0gYmlvX2FsbG9jKEdGUF9OT0ZTLCBtYXhfcGFnZXMpOworCUJVR19PTighYmlvKTsgLyogRklYTUU6IGhhbmRsZSB0aGlzICovCisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcGFnZXM7IGkrKykgeworCQlpZiAoaSA+PSBtYXhfcGFnZXMpIHsKKwkJCS8qIEJsb2NrIGxheWVyIGNhbm5vdCBzcGxpdCBiaW9zIDooICovCisJCQliaW8tPmJpX3ZjbnQgPSBpOworCQkJYmlvLT5iaV9pZHggPSAwOworCQkJYmlvLT5iaV9zaXplID0gaSAqIFBBR0VfU0laRTsKKwkJCWJpby0+YmlfYmRldiA9IHN1cGVyLT5zX2JkZXY7CisJCQliaW8tPmJpX3NlY3RvciA9IG9mcyA+PiA5OworCQkJYmlvLT5iaV9wcml2YXRlID0gc2I7CisJCQliaW8tPmJpX2VuZF9pbyA9IGVyYXNlX2VuZF9pbzsKKwkJCWF0b21pY19pbmMoJnN1cGVyLT5zX3BlbmRpbmdfd3JpdGVzKTsKKwkJCXN1Ym1pdF9iaW8oV1JJVEUsIGJpbyk7CisKKwkJCW9mcyArPSBpICogUEFHRV9TSVpFOworCQkJaW5kZXggKz0gaTsKKwkJCW5yX3BhZ2VzIC09IGk7CisJCQlpID0gMDsKKworCQkJYmlvID0gYmlvX2FsbG9jKEdGUF9OT0ZTLCBtYXhfcGFnZXMpOworCQkJQlVHX09OKCFiaW8pOworCQl9CisJCWJpby0+YmlfaW9fdmVjW2ldLmJ2X3BhZ2UgPSBzdXBlci0+c19lcmFzZV9wYWdlOworCQliaW8tPmJpX2lvX3ZlY1tpXS5idl9sZW4gPSBQQUdFX1NJWkU7CisJCWJpby0+YmlfaW9fdmVjW2ldLmJ2X29mZnNldCA9IDA7CisJfQorCWJpby0+YmlfdmNudCA9IG5yX3BhZ2VzOworCWJpby0+YmlfaWR4ID0gMDsKKwliaW8tPmJpX3NpemUgPSBucl9wYWdlcyAqIFBBR0VfU0laRTsKKwliaW8tPmJpX2JkZXYgPSBzdXBlci0+c19iZGV2OworCWJpby0+Ymlfc2VjdG9yID0gb2ZzID4+IDk7CisJYmlvLT5iaV9wcml2YXRlID0gc2I7CisJYmlvLT5iaV9lbmRfaW8gPSBlcmFzZV9lbmRfaW87CisJYXRvbWljX2luYygmc3VwZXItPnNfcGVuZGluZ193cml0ZXMpOworCXN1Ym1pdF9iaW8oV1JJVEUsIGJpbyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYmRldl9lcmFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBsb2ZmX3QgdG8sIHNpemVfdCBsZW4sCisJCWludCBlbnN1cmVfd3JpdGUpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKworCUJVR19PTih0byAmIChQQUdFX1NJWkUgLSAxKSk7CisJQlVHX09OKGxlbiAmIChQQUdFX1NJWkUgLSAxKSk7CisKKwlpZiAoc3VwZXItPnNfZmxhZ3MgJiBMT0dGU19TQl9GTEFHX1JPKQorCQlyZXR1cm4gLUVST0ZTOworCisJaWYgKGVuc3VyZV93cml0ZSkgeworCQkvKgorCQkgKiBPYmplY3Qgc3RvcmUgZG9lc24ndCBjYXJlIHdoZXRoZXIgZXJhc2VzIGhhcHBlbiBvciBub3QuCisJCSAqIEJ1dCBmb3IgdGhlIGpvdXJuYWwgdGhleSBhcmUgcmVxdWlyZWQuICBPdGhlcndpc2UgYSBzY2FuCisJCSAqIGNhbiBmaW5kIGFuIG9sZCBjb21taXQgZW50cnkgYW5kIGFzc3VtZSBpdCBpcyB0aGUgY3VycmVudAorCQkgKiBvbmUsIHRyYXZlbGxpbmcgYmFjayBpbiB0aW1lLgorCQkgKi8KKwkJZG9fZXJhc2Uoc2IsIHRvLCB0byA+PiBQQUdFX1NISUZULCBsZW4gPj4gUEFHRV9TSElGVCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGJkZXZfc3luYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisKKwl3YWl0X2V2ZW50KHdxLCBhdG9taWNfcmVhZCgmc3VwZXItPnNfcGVuZGluZ193cml0ZXMpID09IDApOworfQorCitzdGF0aWMgc3RydWN0IHBhZ2UgKmJkZXZfZmluZF9maXJzdF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgKm9mcykKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gc3VwZXItPnNfbWFwcGluZ19pbm9kZS0+aV9tYXBwaW5nOworCWZpbGxlcl90ICpmaWxsZXIgPSBiZGV2X3JlYWRwYWdlOworCisJKm9mcyA9IDA7CisJcmV0dXJuIHJlYWRfY2FjaGVfcGFnZShtYXBwaW5nLCAwLCBmaWxsZXIsIHNiKTsKK30KKworc3RhdGljIHN0cnVjdCBwYWdlICpiZGV2X2ZpbmRfbGFzdF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgKm9mcykKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gc3VwZXItPnNfbWFwcGluZ19pbm9kZS0+aV9tYXBwaW5nOworCWZpbGxlcl90ICpmaWxsZXIgPSBiZGV2X3JlYWRwYWdlOworCXU2NCBwb3MgPSAoc3VwZXItPnNfYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSAmIH4weGZmZlVMTCkgLSAweDEwMDA7CisJcGdvZmZfdCBpbmRleCA9IHBvcyA+PiBQQUdFX1NISUZUOworCisJKm9mcyA9IHBvczsKKwlyZXR1cm4gcmVhZF9jYWNoZV9wYWdlKG1hcHBpbmcsIGluZGV4LCBmaWxsZXIsIHNiKTsKK30KKworc3RhdGljIGludCBiZGV2X3dyaXRlX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYgPSBsb2dmc19zdXBlcihzYiktPnNfYmRldjsKKworCS8qIE5vdGhpbmcgc3BlY2lhbCB0byBkbyBmb3IgYmxvY2sgZGV2aWNlcy4gKi8KKwlyZXR1cm4gc3luY19yZXF1ZXN0KHBhZ2UsIGJkZXYsIFdSSVRFKTsKK30KKworc3RhdGljIHZvaWQgYmRldl9wdXRfZGV2aWNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJY2xvc2VfYmRldl9leGNsdXNpdmUobG9nZnNfc3VwZXIoc2IpLT5zX2JkZXYsIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGxvZ2ZzX2RldmljZV9vcHMgYmRfZGV2b3BzID0geworCS5maW5kX2ZpcnN0X3NiCT0gYmRldl9maW5kX2ZpcnN0X3NiLAorCS5maW5kX2xhc3Rfc2IJPSBiZGV2X2ZpbmRfbGFzdF9zYiwKKwkud3JpdGVfc2IJPSBiZGV2X3dyaXRlX3NiLAorCS5yZWFkcGFnZQk9IGJkZXZfcmVhZHBhZ2UsCisJLndyaXRlc2VnCT0gYmRldl93cml0ZXNlZywKKwkuZXJhc2UJCT0gYmRldl9lcmFzZSwKKwkuc3luYwkJPSBiZGV2X3N5bmMsCisJLnB1dF9kZXZpY2UJPSBiZGV2X3B1dF9kZXZpY2UsCit9OworCitpbnQgbG9nZnNfZ2V0X3NiX2JkZXYoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncywKKwkJY29uc3QgY2hhciAqZGV2bmFtZSwgc3RydWN0IHZmc21vdW50ICptbnQpCit7CisJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKKworCWJkZXYgPSBvcGVuX2JkZXZfZXhjbHVzaXZlKGRldm5hbWUsIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUsIHR5cGUpOworCWlmIChJU19FUlIoYmRldikpCisJCXJldHVybiBQVFJfRVJSKGJkZXYpOworCisJaWYgKE1BSk9SKGJkZXYtPmJkX2RldikgPT0gTVREX0JMT0NLX01BSk9SKSB7CisJCWludCBtdGRuciA9IE1JTk9SKGJkZXYtPmJkX2Rldik7CisJCWNsb3NlX2JkZXZfZXhjbHVzaXZlKGJkZXYsIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpOworCQlyZXR1cm4gbG9nZnNfZ2V0X3NiX210ZCh0eXBlLCBmbGFncywgbXRkbnIsIG1udCk7CisJfQorCisJcmV0dXJuIGxvZ2ZzX2dldF9zYl9kZXZpY2UodHlwZSwgZmxhZ3MsIE5VTEwsIGJkZXYsICZiZF9kZXZvcHMsIG1udCk7Cit9CmRpZmYgLS1naXQgYS9mcy9sb2dmcy9kZXZfbXRkLmMgYi9mcy9sb2dmcy9kZXZfbXRkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FmYjZlZgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2xvZ2ZzL2Rldl9tdGQuYwpAQCAtMCwwICsxLDI1NCBAQAorLyoKKyAqIGZzL2xvZ2ZzL2Rldl9tdGQuYwktIERldmljZSBhY2Nlc3MgbWV0aG9kcyBmb3IgTVRECisgKgorICogQXMgc2hvdWxkIGJlIG9idmlvdXMgZm9yIExpbnV4IGtlcm5lbCBjb2RlLCBsaWNlbnNlIGlzIEdQTHYyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDggSm9lcm4gRW5nZWwgPGpvZXJuQGxvZ2ZzLm9yZz4KKyAqLworI2luY2x1ZGUgImxvZ2ZzLmgiCisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworI2RlZmluZSBQQUdFX09GUyhvZnMpICgob2ZzKSAmIChQQUdFX1NJWkUtMSkpCisKK3N0YXRpYyBpbnQgbXRkX3JlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgbG9mZl90IG9mcywgc2l6ZV90IGxlbiwgdm9pZCAqYnVmKQoreworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gbG9nZnNfc3VwZXIoc2IpLT5zX210ZDsKKwlzaXplX3QgcmV0bGVuOworCWludCByZXQ7CisKKwlyZXQgPSBtdGQtPnJlYWQobXRkLCBvZnMsIGxlbiwgJnJldGxlbiwgYnVmKTsKKwlCVUdfT04ocmV0ID09IC1FSU5WQUwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwkvKiBOb3Qgc3VyZSBpZiB3ZSBzaG91bGQgbG9vcCBpbnN0ZWFkLiAqLworCWlmIChyZXRsZW4gIT0gbGVuKQorCQlyZXR1cm4gLUVJTzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG10ZF93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLCB2b2lkICpidWYpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IHN1cGVyLT5zX210ZDsKKwlzaXplX3QgcmV0bGVuOworCWxvZmZfdCBwYWdlX3N0YXJ0LCBwYWdlX2VuZDsKKwlpbnQgcmV0OworCisJaWYgKHN1cGVyLT5zX2ZsYWdzICYgTE9HRlNfU0JfRkxBR19STykKKwkJcmV0dXJuIC1FUk9GUzsKKworCUJVR19PTigob2ZzID49IG10ZC0+c2l6ZSkgfHwgKGxlbiA+IG10ZC0+c2l6ZSAtIG9mcykpOworCUJVR19PTihvZnMgIT0gKG9mcyA+PiBzdXBlci0+c193cml0ZXNoaWZ0KSA8PCBzdXBlci0+c193cml0ZXNoaWZ0KTsKKwlCVUdfT04obGVuID4gUEFHRV9DQUNIRV9TSVpFKTsKKwlwYWdlX3N0YXJ0ID0gb2ZzICYgUEFHRV9DQUNIRV9NQVNLOworCXBhZ2VfZW5kID0gUEFHRV9DQUNIRV9BTElHTihvZnMgKyBsZW4pIC0gMTsKKwlyZXQgPSBtdGQtPndyaXRlKG10ZCwgb2ZzLCBsZW4sICZyZXRsZW4sIGJ1Zik7CisJaWYgKHJldCB8fCAocmV0bGVuICE9IGxlbikpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBGb3IgYXMgbG9uZyBhcyBJIGNhbiByZW1lbWJlciAoc2luY2UgYWJvdXQgMjAwMSkgbXRkLT5lcmFzZSBoYXMgYmVlbiBhbgorICogYXN5bmNocm9ub3VzIGludGVyZmFjZSBsYWNraW5nIHRoZSBmaXJzdCBkcml2ZXIgdG8gYWN0dWFsbHkgdXNlIHRoZQorICogYXN5bmNocm9ub3VzIHByb3BlcnRpZXMuICBTbyBqdXN0IHRvIHByZXZlbnQgdGhlIGZpcnN0IGltcGxlbWVudG9yIG9mIHN1Y2gKKyAqIGEgdGhpbmcgZnJvbSBicmVha2luZyBsb2dmcyBpbiAyMzUwLCB3ZSBkbyB0aGUgdXN1YWwgcG9pbnRsZXNzIGRhbmNlIHRvCisgKiBkZWNsYXJlIGEgY29tcGxldGlvbiB2YXJpYWJsZSBhbmQgd2FpdCBmb3IgY29tcGxldGlvbiBiZWZvcmUgcmV0dXJuaW5nCisgKiBmcm9tIG10ZF9lcmFzZSgpLiAgV2hhdCBhbiBleGNlcmNpc2UgaW4gZnV0aWxpdHkhCisgKi8KK3N0YXRpYyB2b2lkIGxvZ2ZzX2VyYXNlX2NhbGxiYWNrKHN0cnVjdCBlcmFzZV9pbmZvICplaSkKK3sKKwljb21wbGV0ZSgoc3RydWN0IGNvbXBsZXRpb24gKillaS0+cHJpdik7Cit9CisKK3N0YXRpYyBpbnQgbXRkX2VyYXNlX21hcHBpbmcoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgbG9mZl90IG9mcywgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gc3VwZXItPnNfbWFwcGluZ19pbm9kZS0+aV9tYXBwaW5nOworCXN0cnVjdCBwYWdlICpwYWdlOworCXBnb2ZmX3QgaW5kZXggPSBvZnMgPj4gUEFHRV9TSElGVDsKKworCWZvciAoaW5kZXggPSBvZnMgPj4gUEFHRV9TSElGVDsgaW5kZXggPCAob2ZzICsgbGVuKSA+PiBQQUdFX1NISUZUOyBpbmRleCsrKSB7CisJCXBhZ2UgPSBmaW5kX2dldF9wYWdlKG1hcHBpbmcsIGluZGV4KTsKKwkJaWYgKCFwYWdlKQorCQkJY29udGludWU7CisJCW1lbXNldChwYWdlX2FkZHJlc3MocGFnZSksIDB4RkYsIFBBR0VfU0laRSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXRkX2VyYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4sCisJCWludCBlbnN1cmVfd3JpdGUpCit7CisJc3RydWN0IG10ZF9pbmZvICptdGQgPSBsb2dmc19zdXBlcihzYiktPnNfbXRkOworCXN0cnVjdCBlcmFzZV9pbmZvIGVpOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNvbXBsZXRlKTsKKwlpbnQgcmV0OworCisJQlVHX09OKGxlbiAlIG10ZC0+ZXJhc2VzaXplKTsKKwlpZiAobG9nZnNfc3VwZXIoc2IpLT5zX2ZsYWdzICYgTE9HRlNfU0JfRkxBR19STykKKwkJcmV0dXJuIC1FUk9GUzsKKworCW1lbXNldCgmZWksIDAsIHNpemVvZihlaSkpOworCWVpLm10ZCA9IG10ZDsKKwllaS5hZGRyID0gb2ZzOworCWVpLmxlbiA9IGxlbjsKKwllaS5jYWxsYmFjayA9IGxvZ2ZzX2VyYXNlX2NhbGxiYWNrOworCWVpLnByaXYgPSAobG9uZykmY29tcGxldGU7CisJcmV0ID0gbXRkLT5lcmFzZShtdGQsICZlaSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU87CisKKwl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjb21wbGV0ZSk7CisJaWYgKGVpLnN0YXRlICE9IE1URF9FUkFTRV9ET05FKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gbXRkX2VyYXNlX21hcHBpbmcoc2IsIG9mcywgbGVuKTsKK30KKworc3RhdGljIHZvaWQgbXRkX3N5bmMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbXRkX2luZm8gKm10ZCA9IGxvZ2ZzX3N1cGVyKHNiKS0+c19tdGQ7CisKKwlpZiAobXRkLT5zeW5jKQorCQltdGQtPnN5bmMobXRkKTsKK30KKworc3RhdGljIGludCBtdGRfcmVhZHBhZ2Uodm9pZCAqX3NiLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gX3NiOworCWludCBlcnI7CisKKwllcnIgPSBtdGRfcmVhZChzYiwgcGFnZS0+aW5kZXggPDwgUEFHRV9TSElGVCwgUEFHRV9TSVpFLAorCQkJcGFnZV9hZGRyZXNzKHBhZ2UpKTsKKwlpZiAoZXJyID09IC1FVUNMRUFOKSB7CisJCWVyciA9IDA7CisJCS8qIEZJWE1FOiBmb3JjZSBHQyB0aGlzIHNlZ21lbnQgKi8KKwl9CisJaWYgKGVycikgeworCQlDbGVhclBhZ2VVcHRvZGF0ZShwYWdlKTsKKwkJU2V0UGFnZUVycm9yKHBhZ2UpOworCX0gZWxzZSB7CisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwkJQ2xlYXJQYWdlRXJyb3IocGFnZSk7CisJfQorCXVubG9ja19wYWdlKHBhZ2UpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqbXRkX2ZpbmRfZmlyc3Rfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0ICpvZnMpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHN1cGVyLT5zX21hcHBpbmdfaW5vZGUtPmlfbWFwcGluZzsKKwlmaWxsZXJfdCAqZmlsbGVyID0gbXRkX3JlYWRwYWdlOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gc3VwZXItPnNfbXRkOworCisJaWYgKCFtdGQtPmJsb2NrX2lzYmFkKQorCQlyZXR1cm4gTlVMTDsKKworCSpvZnMgPSAwOworCXdoaWxlIChtdGQtPmJsb2NrX2lzYmFkKG10ZCwgKm9mcykpIHsKKwkJKm9mcyArPSBtdGQtPmVyYXNlc2l6ZTsKKwkJaWYgKCpvZnMgPj0gbXRkLT5zaXplKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCUJVR19PTigqb2ZzICYgflBBR0VfTUFTSyk7CisJcmV0dXJuIHJlYWRfY2FjaGVfcGFnZShtYXBwaW5nLCAqb2ZzID4+IFBBR0VfU0hJRlQsIGZpbGxlciwgc2IpOworfQorCitzdGF0aWMgc3RydWN0IHBhZ2UgKm10ZF9maW5kX2xhc3Rfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0ICpvZnMpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHN1cGVyLT5zX21hcHBpbmdfaW5vZGUtPmlfbWFwcGluZzsKKwlmaWxsZXJfdCAqZmlsbGVyID0gbXRkX3JlYWRwYWdlOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gc3VwZXItPnNfbXRkOworCisJaWYgKCFtdGQtPmJsb2NrX2lzYmFkKQorCQlyZXR1cm4gTlVMTDsKKworCSpvZnMgPSBtdGQtPnNpemUgLSBtdGQtPmVyYXNlc2l6ZTsKKwl3aGlsZSAobXRkLT5ibG9ja19pc2JhZChtdGQsICpvZnMpKSB7CisJCSpvZnMgLT0gbXRkLT5lcmFzZXNpemU7CisJCWlmICgqb2ZzIDw9IDApCisJCQlyZXR1cm4gTlVMTDsKKwl9CisJKm9mcyA9ICpvZnMgKyBtdGQtPmVyYXNlc2l6ZSAtIDB4MTAwMDsKKwlCVUdfT04oKm9mcyAmIH5QQUdFX01BU0spOworCXJldHVybiByZWFkX2NhY2hlX3BhZ2UobWFwcGluZywgKm9mcyA+PiBQQUdFX1NISUZULCBmaWxsZXIsIHNiKTsKK30KKworc3RhdGljIGludCBfX210ZF93cml0ZXNlZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgb2ZzLCBwZ29mZl90IGluZGV4LAorCQlzaXplX3QgbnJfcGFnZXMpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHN1cGVyLT5zX21hcHBpbmdfaW5vZGUtPmlfbWFwcGluZzsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgaSwgZXJyOworCisJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKKwkJcGFnZSA9IGZpbmRfbG9ja19wYWdlKG1hcHBpbmcsIGluZGV4ICsgaSk7CisJCUJVR19PTighcGFnZSk7CisKKwkJZXJyID0gbXRkX3dyaXRlKHNiLCBwYWdlLT5pbmRleCA8PCBQQUdFX1NISUZULCBQQUdFX1NJWkUsCisJCQkJcGFnZV9hZGRyZXNzKHBhZ2UpKTsKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBtdGRfd3JpdGVzZWcoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IG9mcywgc2l6ZV90IGxlbikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCWludCBoZWFkOworCisJaWYgKHN1cGVyLT5zX2ZsYWdzICYgTE9HRlNfU0JfRkxBR19STykKKwkJcmV0dXJuOworCisJaWYgKGxlbiA9PSAwKSB7CisJCS8qIFRoaXMgY2FuIGhhcHBlbiB3aGVuIHRoZSBvYmplY3QgZml0IHBlcmZlY3RseSBpbnRvIGEKKwkJICogc2VnbWVudCwgdGhlIHNlZ21lbnQgZ2V0cyB3cml0dGVuIHBlciBzeW5jIGFuZCBzdWJzZXF1ZW50bHkKKwkJICogY2xvc2VkLgorCQkgKi8KKwkJcmV0dXJuOworCX0KKwloZWFkID0gb2ZzICYgKFBBR0VfU0laRSAtIDEpOworCWlmIChoZWFkKSB7CisJCW9mcyAtPSBoZWFkOworCQlsZW4gKz0gaGVhZDsKKwl9CisJbGVuID0gUEFHRV9BTElHTihsZW4pOworCV9fbXRkX3dyaXRlc2VnKHNiLCBvZnMsIG9mcyA+PiBQQUdFX1NISUZULCBsZW4gPj4gUEFHRV9TSElGVCk7Cit9CisKK3N0YXRpYyB2b2lkIG10ZF9wdXRfZGV2aWNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJcHV0X210ZF9kZXZpY2UobG9nZnNfc3VwZXIoc2IpLT5zX210ZCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbG9nZnNfZGV2aWNlX29wcyBtdGRfZGV2b3BzID0geworCS5maW5kX2ZpcnN0X3NiCT0gbXRkX2ZpbmRfZmlyc3Rfc2IsCisJLmZpbmRfbGFzdF9zYgk9IG10ZF9maW5kX2xhc3Rfc2IsCisJLnJlYWRwYWdlCT0gbXRkX3JlYWRwYWdlLAorCS53cml0ZXNlZwk9IG10ZF93cml0ZXNlZywKKwkuZXJhc2UJCT0gbXRkX2VyYXNlLAorCS5zeW5jCQk9IG10ZF9zeW5jLAorCS5wdXRfZGV2aWNlCT0gbXRkX3B1dF9kZXZpY2UsCit9OworCitpbnQgbG9nZnNfZ2V0X3NiX210ZChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLAorCQlpbnQgbXRkbnIsIHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCXN0cnVjdCBtdGRfaW5mbyAqbXRkOworCWNvbnN0IHN0cnVjdCBsb2dmc19kZXZpY2Vfb3BzICpkZXZvcHMgPSAmbXRkX2Rldm9wczsKKworCW10ZCA9IGdldF9tdGRfZGV2aWNlKE5VTEwsIG10ZG5yKTsKKwlyZXR1cm4gbG9nZnNfZ2V0X3NiX2RldmljZSh0eXBlLCBmbGFncywgbXRkLCBOVUxMLCBkZXZvcHMsIG1udCk7Cit9CmRpZmYgLS1naXQgYS9mcy9sb2dmcy9kaXIuYyBiL2ZzL2xvZ2ZzL2Rpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2YThiZmIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9sb2dmcy9kaXIuYwpAQCAtMCwwICsxLDgyNyBAQAorLyoKKyAqIGZzL2xvZ2ZzL2Rpci5jCS0gZGlyZWN0b3J5LXJlbGF0ZWQgY29kZQorICoKKyAqIEFzIHNob3VsZCBiZSBvYnZpb3VzIGZvciBMaW51eCBrZXJuZWwgY29kZSwgbGljZW5zZSBpcyBHUEx2MgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA4IEpvZXJuIEVuZ2VsIDxqb2VybkBsb2dmcy5vcmc+CisgKi8KKyNpbmNsdWRlICJsb2dmcy5oIgorCisKKy8qCisgKiBBdG9taWMgZGlyIG9wZXJhdGlvbnMKKyAqCisgKiBEaXJlY3Rvcnkgb3BlcmF0aW9ucyBhcmUgYnkgZGVmYXVsdCBub3QgYXRvbWljLiAgRGVudHJpZXMgYW5kIElub2RlcyBhcmUKKyAqIGNyZWF0ZWQvcmVtb3ZlZC9hbHRlcmVkIGluIHNlcGVyYXRlIG9wZXJhdGlvbnMuICBUaGVyZWZvcmUgd2UgbmVlZCB0byBkbworICogYSBzbWFsbCBhbW91bnQgb2Ygam91cm5hbGluZy4KKyAqCisgKiBDcmVhdGUsIGxpbmssIG1rZGlyLCBta25vZCBhbmQgc3ltbGluayBhbGwgc2hhcmUgdGhlIHNhbWUgZnVuY3Rpb24gdG8gZG8KKyAqIHRoZSB3b3JrOiBfX2xvZ2ZzX2NyZWF0ZS4gIFRoaXMgZnVuY3Rpb24gd29ya3MgaW4gdHdvIGF0b21pYyBzdGVwczoKKyAqIDEuIGFsbG9jYXRlIGlub2RlIChyZW1lbWJlciBpbiBqb3VybmFsKQorICogMi4gYWxsb2NhdGUgZGVudHJ5IChjbGVhciBqb3VybmFsKQorICoKKyAqIEFzIHdlIGNhbiBvbmx5IGdldCBpbnRlcnJ1cHRlZCBiZXR3ZWVuIHRoZSB0d28sIHdoZW4gdGhlIGlub2RlIHdlIGp1c3QKKyAqIGNyZWF0ZWQgaXMgc2ltcGx5IHN0b3JlZCBpbiB0aGUgYW5jaG9yLiAgT24gbmV4dCBtb3VudCwgaWYgd2Ugd2VyZQorICogaW50ZXJydXB0ZWQsIHdlIGRlbGV0ZSB0aGUgaW5vZGUuICBGcm9tIGEgdXNlcnMgcG9pbnQgb2YgdmlldyB0aGUKKyAqIG9wZXJhdGlvbiBuZXZlciBoYXBwZW5lZC4KKyAqCisgKiBVbmxpbmsgYW5kIHJtZGlyIGFsc28gc2hhcmUgdGhlIHNhbWUgZnVuY3Rpb246IHVubGluay4gIEFnYWluLCB0aGlzCisgKiBmdW5jdGlvbiB3b3JrcyBpbiB0d28gYXRvbWljIHN0ZXBzCisgKiAxLiByZW1vdmUgZGVudHJ5IChyZW1lbWJlciBpbm9kZSBpbiBqb3VybmFsKQorICogMi4gdW5saW5rIGlub2RlIChjbGVhciBqb3VybmFsKQorICoKKyAqIEFuZCBhZ2Fpbiwgb24gdGhlIG5leHQgbW91bnQsIGlmIHdlIHdlcmUgaW50ZXJydXB0ZWQsIHdlIGRlbGV0ZSB0aGUgaW5vZGUuCisgKiBGcm9tIGEgdXNlcnMgcG9pbnQgb2YgdmlldyB0aGUgb3BlcmF0aW9uIHN1Y2NlZWRlZC4KKyAqCisgKiBSZW5hbWUgaXMgdGhlIHJlYWwgcGFpbiB0byBkZWFsIHdpdGgsIGhhcmRlciB0aGFuIGFsbCB0aGUgb3RoZXIgbWV0aG9kcworICogY29tYmluZWQuICBEZXBlbmRpbmcgb24gdGhlIGNpcmN1bXN0YW5jZXMgd2UgY2FuIHJ1biBpbnRvIHRocmVlIGNhc2VzLgorICogQSAidGFyZ2V0IHJlbmFtZSIgd2hlcmUgdGhlIHRhcmdldCBkZW50cnkgYWxyZWFkeSBleGlzdGVkLCBhICJsb2NhbAorICogcmVuYW1lIiB3aGVyZSBib3RoIHBhcmVudCBkaXJlY3RvcmllcyBhcmUgaWRlbnRpY2FsIG9yIGEgImNyb3NzLWRpcmVjdG9yeQorICogcmVuYW1lIiBpbiB0aGUgcmVtYWluaW5nIGNhc2UuCisgKgorICogTG9jYWwgcmVuYW1lIGlzIGF0b21pYywgYXMgdGhlIG9sZCBkZW50cnkgaXMgc2ltcGx5IHJld3JpdHRlbiB3aXRoIGEgbmV3CisgKiBuYW1lLgorICoKKyAqIENyb3NzLWRpcmVjdG9yeSByZW5hbWUgd29ya3MgaW4gdHdvIHN0ZXBzLCBzaW1pbGFyIHRvIF9fbG9nZnNfY3JlYXRlIGFuZAorICogbG9nZnNfdW5saW5rOgorICogMS4gV3JpdGUgbmV3IGRlbnRyeSAocmVtZW1iZXIgb2xkIGRlbnRyeSBpbiBqb3VybmFsKQorICogMi4gUmVtb3ZlIG9sZCBkZW50cnkgKGNsZWFyIGpvdXJuYWwpCisgKgorICogSGVyZSB3ZSByZW1lbWJlciBhIGRlbnRyeSBpbnN0ZWFkIG9mIGFuIGlub2RlLiAgT24gbmV4dCBtb3VudCwgaWYgd2Ugd2VyZQorICogaW50ZXJydXB0ZWQsIHdlIGRlbGV0ZSB0aGUgZGVudHJ5LiAgRnJvbSBhIHVzZXJzIHBvaW50IG9mIHZpZXcsIHRoZQorICogb3BlcmF0aW9uIHN1Y2NlZWRlZC4KKyAqCisgKiBUYXJnZXQgcmVuYW1lIHdvcmtzIGluIHRocmVlIGF0b21pYyBzdGVwczoKKyAqIDEuIEF0dGFjaCBvbGQgaW5vZGUgdG8gbmV3IGRlbnRyeSAocmVtZW1iZXIgb2xkIGRlbnRyeSBhbmQgbmV3IGlub2RlKQorICogMi4gUmVtb3ZlIG9sZCBkZW50cnkgKHN0aWxsIHJlbWVtYmVyIHRoZSBuZXcgaW5vZGUpCisgKiAzLiBSZW1vdmUgdmljdGltIGlub2RlCisgKgorICogSGVyZSB3ZSByZW1lbWJlciBib3RoIGFuIGlub2RlIGFuIGEgZGVudHJ5LiAgSWYgd2UgZ2V0IGludGVycnVwdGVkCisgKiBiZXR3ZWVuIHN0ZXBzIDEgYW5kIDIsIHdlIGRlbGV0ZSBib3RoIHRoZSBkZW50cnkgYW5kIHRoZSBpbm9kZS4gIElmCisgKiB3ZSBnZXQgaW50ZXJydXB0ZWQgYmV0d2VlbiBzdGVwcyAyIGFuZCAzLCB3ZSBkZWxldGUganVzdCB0aGUgaW5vZGUuCisgKiBJbiBlaXRoZXIgY2FzZSwgdGhlIHJlbWFpbmluZyBvYmplY3RzIGFyZSBkZWxldGVkIG9uIG5leHQgbW91bnQuICBGcm9tCisgKiBhIHVzZXJzIHBvaW50IG9mIHZpZXcsIHRoZSBvcGVyYXRpb24gc3VjY2VlZGVkLgorICovCisKK3N0YXRpYyBpbnQgd3JpdGVfZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgbG9nZnNfZGlza19kZW50cnkgKmRkLAorCQlsb2ZmX3QgcG9zKQoreworCXJldHVybiBsb2dmc19pbm9kZV93cml0ZShkaXIsIGRkLCBzaXplb2YoKmRkKSwgcG9zLCBXRl9MT0NLLCBOVUxMKTsKK30KKworc3RhdGljIGludCB3cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiBfX2xvZ2ZzX3dyaXRlX2lub2RlKGlub2RlLCBXRl9MT0NLKTsKK30KKworc3RhdGljIHM2NCBkaXJfc2Vla19kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHM2NCBwb3MpCit7CisJczY0IG5ld19wb3MgPSBsb2dmc19zZWVrX2RhdGEoaW5vZGUsIHBvcyk7CisKKwlyZXR1cm4gbWF4KHBvcywgbmV3X3BvcyAtIDEpOworfQorCitzdGF0aWMgaW50IGJleW9uZF9lb2Yoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IGJpeCkKK3sKKwlsb2ZmX3QgcG9zID0gYml4IDw8IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCXJldHVybiBwb3MgPj0gaV9zaXplX3JlYWQoaW5vZGUpOworfQorCisvKgorICogUHJpbWUgdmFsdWUgd2FzIGNob3NlbiB0byBiZSByb3VnaGx5IDI1NiArIDI2LiAgcjUgaGFzaCB1c2VzIDExLAorICogc28gc2hvcnQgbmFtZXMgKGxlbiA8PSA5KSBkb24ndCBldmVuIG9jY3VweSB0aGUgY29tcGxldGUgMzJiaXQgbmFtZQorICogc3BhY2UuICBBIHByaW1lID4yNTYgZW5zdXJlcyBzaG9ydCBuYW1lcyBxdWlja2x5IHNwcmVhZCB0aGUgMzJiaXQKKyAqIG5hbWUgc3BhY2UuICBBZGQgYWJvdXQgMjYgZm9yIHRoZSBlc3RpbWF0ZWQgYW1vdW50IG9mIGluZm9ybWF0aW9uCisgKiBvZiBlYWNoIGNoYXJhY3RlciBhbmQgcGljayBhIHByaW1lIG5lYXJieSwgcHJlZmVycmFibHkgYSBiaXQtc3BhcnNlCisgKiBvbmUuCisgKi8KK3N0YXRpYyB1MzIgaGFzaF8zMihjb25zdCBjaGFyICpzLCBpbnQgbGVuLCB1MzIgc2VlZCkKK3sKKwl1MzIgaGFzaCA9IHNlZWQ7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCWhhc2ggPSBoYXNoICogMjkzICsgc1tpXTsKKwlyZXR1cm4gaGFzaDsKK30KKworLyoKKyAqIFdlIGhhdmUgdG8gc2F0aXNmeSBzZXZlcmFsIGNvbmZsaWN0aW5nIHJlcXVpcmVtZW50cyBoZXJlLiAgU21hbGwKKyAqIGRpcmVjdG9yaWVzIHNob3VsZCBzdGF5IGZhaXJseSBjb21wYWN0IGFuZCBub3QgcmVxdWlyZSB0b28gbWFueQorICogaW5kaXJlY3QgYmxvY2tzLiAgVGhlIG51bWJlciBvZiBwb3NzaWJsZSBsb2NhdGlvbnMgZm9yIGEgZ2l2ZW4gaGFzaAorICogc2hvdWxkIGJlIHNtYWxsIHRvIG1ha2UgbG9va3VwKCkgZmFzdC4gIEFuZCB3ZSBzaG91bGQgdHJ5IGhhcmQgbm90CisgKiB0byBvdmVyZmxvdyB0aGUgMzJiaXQgbmFtZSBzcGFjZSBvciBuZnMgYW5kIDMyYml0IGhvc3Qgc3lzdGVtcyB3aWxsCisgKiBiZSB1bmhhcHB5LgorICoKKyAqIFNvIHdlIHVzZSB0aGUgZm9sbG93aW5nIHNjaGVtZS4gIEZpcnN0IHdlIHJlZHVjZSB0aGUgaGFzaCB0byAwLi4xNQorICogYW5kIHRyeSBhIGRpcmVjdCBibG9jay4gIElmIHRoYXQgaXMgb2NjdXBpZWQgd2UgcmVkdWNlIHRoZSBoYXNoIHRvCisgKiAxNi4uMjU1IGFuZCB0cnkgYW4gaW5kaXJlY3QgYmxvY2suICBTYW1lIGZvciAyeCBhbmQgM3ggaW5kaXJlY3QKKyAqIGJsb2Nrcy4gIExhc3RseSB3ZSByZWR1Y2UgdGhlIGhhc2ggdG8gMHg4MDBfMDAwMCAuLiAweGZmZmZfZmZmZiwKKyAqIGJ1dCB1c2UgYnVja2V0cyBjb250YWluaW5nIGVpZ2h0IGVudHJpZXMgaW5zdGVhZCBvZiBhIHNpbmdsZSBvbmUuCisgKgorICogVXNpbmcgMTYgZW50cmllcyBzaG91bGQgYWxsb3cgZm9yIGEgcmVhc29uYWJsZSBhbW91bnQgb2YgaGFzaAorICogY29sbGlzaW9ucywgc28gdGhlIDMyYml0IG5hbWUgc3BhY2UgY2FuIGJlIHBhY2tlZCBmYWlybHkgdGlnaHQKKyAqIGJlZm9yZSBvdmVyZmxvd2luZy4gIE9oIGFuZCBjdXJyZW50bHkgd2UgZG9uJ3Qgb3ZlcmZsb3cgYnV0IHJldHVybgorICogYW5kIGVycm9yLgorICoKKyAqIEhvdyBsaWtlbHkgYXJlIGNvbGxpc2lvbnM/ICBEb2luZyB0aGUgYXBwcm9wcmlhdGUgbWF0aCBpcyBiZXlvbmQgbWUKKyAqIGFuZCB0aGUgQnJvbnN0ZWluIHRleHRib29rLiAgQnV0IHJ1bm5pbmcgYSB0ZXN0IHByb2dyYW0gdG8gYnJ1dGUKKyAqIGZvcmNlIGNvbGxpc2lvbnMgZm9yIGEgY291cGxlIG9mIGRheXMgc2hvd2VkIHRoYXQgb24gYXZlcmFnZSB0aGUKKyAqIGZpcnN0IGNvbGxpc2lvbiBvY2N1cnMgYWZ0ZXIgNTk4TSBlbnRyaWVzLCB3aXRoIDI5ME0gYmVpbmcgdGhlCisgKiBzbWFsbGVzdCByZXN1bHQuICBPYnZpb3VzbHkgMjEgZW50cmllcyBjb3VsZCBhbHJlYWR5IGNhdXNlIGEKKyAqIGNvbGxpc2lvbiBpZiBhbGwgZW50cmllcyBhcmUgY2FyZWZ1bGx5IGNob3Nlbi4KKyAqLworc3RhdGljIHBnb2ZmX3QgaGFzaF9pbmRleCh1MzIgaGFzaCwgaW50IHJvdW5kKQoreworCXUzMiBpMF9ibG9ja3MgPSBJMF9CTE9DS1M7CisJdTMyIGkxX2Jsb2NrcyA9IEkxX0JMT0NLUzsKKwl1MzIgaTJfYmxvY2tzID0gSTJfQkxPQ0tTOworCXUzMiBpM19ibG9ja3MgPSBJM19CTE9DS1M7CisKKwlzd2l0Y2ggKHJvdW5kKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gaGFzaCAlIGkwX2Jsb2NrczsKKwljYXNlIDE6CisJCXJldHVybiBpMF9ibG9ja3MgKyBoYXNoICUgKGkxX2Jsb2NrcyAtIGkwX2Jsb2Nrcyk7CisJY2FzZSAyOgorCQlyZXR1cm4gaTFfYmxvY2tzICsgaGFzaCAlIChpMl9ibG9ja3MgLSBpMV9ibG9ja3MpOworCWNhc2UgMzoKKwkJcmV0dXJuIGkyX2Jsb2NrcyArIGhhc2ggJSAoaTNfYmxvY2tzIC0gaTJfYmxvY2tzKTsKKwljYXNlIDQgLi4uIDE5OgorCQlyZXR1cm4gaTNfYmxvY2tzICsgMTYgKiAoaGFzaCAlICgoKDE8PDMxKSAtIGkzX2Jsb2NrcykgLyAxNikpCisJCQkrIHJvdW5kIC0gNDsKKwl9CisJQlVHKCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqbG9nZnNfZ2V0X2RkX3BhZ2Uoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgcXN0ciAqbmFtZSA9ICZkZW50cnktPmRfbmFtZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgbG9nZnNfZGlza19kZW50cnkgKmRkOworCXUzMiBoYXNoID0gaGFzaF8zMihuYW1lLT5uYW1lLCBuYW1lLT5sZW4sIDApOworCXBnb2ZmX3QgaW5kZXg7CisJaW50IHJvdW5kOworCisJaWYgKG5hbWUtPmxlbiA+IExPR0ZTX01BWF9OQU1FTEVOKQorCQlyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTsKKworCWZvciAocm91bmQgPSAwOyByb3VuZCA8IDIwOyByb3VuZCsrKSB7CisJCWluZGV4ID0gaGFzaF9pbmRleChoYXNoLCByb3VuZCk7CisKKwkJaWYgKGJleW9uZF9lb2YoZGlyLCBpbmRleCkpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKCFsb2dmc19leGlzdF9ibG9jayhkaXIsIGluZGV4KSkKKwkJCWNvbnRpbnVlOworCQlwYWdlID0gcmVhZF9jYWNoZV9wYWdlKGRpci0+aV9tYXBwaW5nLCBpbmRleCwKKwkJCQkoZmlsbGVyX3QgKilsb2dmc19yZWFkcGFnZSwgTlVMTCk7CisJCWlmIChJU19FUlIocGFnZSkpCisJCQlyZXR1cm4gcGFnZTsKKwkJZGQgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJCUJVR19PTihkZC0+bmFtZWxlbiA9PSAwKTsKKworCQlpZiAobmFtZS0+bGVuICE9IGJlMTZfdG9fY3B1KGRkLT5uYW1lbGVuKSB8fAorCQkJCW1lbWNtcChuYW1lLT5uYW1lLCBkZC0+bmFtZSwgbmFtZS0+bGVuKSkgeworCQkJa3VubWFwX2F0b21pYyhkZCwgS01fVVNFUjApOworCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQkJY29udGludWU7CisJCX0KKworCQlrdW5tYXBfYXRvbWljKGRkLCBLTV9VU0VSMCk7CisJCXJldHVybiBwYWdlOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGludCBsb2dmc19yZW1vdmVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlpbnQgcmV0OworCisJaW5vZGUtPmlfbmxpbmstLTsKKwlyZXQgPSB3cml0ZV9pbm9kZShpbm9kZSk7CisJTE9HRlNfQlVHX09OKHJldCwgaW5vZGUtPmlfc2IpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIGFib3J0X3RyYW5zYWN0aW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBsb2dmc190cmFuc2FjdGlvbiAqdGEpCit7CisJaWYgKGxvZ2ZzX2lub2RlKGlub2RlKS0+bGlfYmxvY2spCisJCWxvZ2ZzX2lub2RlKGlub2RlKS0+bGlfYmxvY2stPnRhID0gTlVMTDsKKwlrZnJlZSh0YSk7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfdW5saW5rKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKGRpci0+aV9zYik7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgbG9nZnNfdHJhbnNhY3Rpb24gKnRhOworCXN0cnVjdCBwYWdlICpwYWdlOworCXBnb2ZmX3QgaW5kZXg7CisJaW50IHJldDsKKworCXRhID0ga3phbGxvYyhzaXplb2YoKnRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0YS0+c3RhdGUgPSBVTkxJTktfMTsKKwl0YS0+aW5vID0gaW5vZGUtPmlfaW5vOworCisJaW5vZGUtPmlfY3RpbWUgPSBkaXItPmlfY3RpbWUgPSBkaXItPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUU7CisKKwlwYWdlID0gbG9nZnNfZ2V0X2RkX3BhZ2UoZGlyLCBkZW50cnkpOworCWlmICghcGFnZSkgeworCQlrZnJlZSh0YSk7CisJCXJldHVybiAtRU5PRU5UOworCX0KKwlpZiAoSVNfRVJSKHBhZ2UpKSB7CisJCWtmcmVlKHRhKTsKKwkJcmV0dXJuIFBUUl9FUlIocGFnZSk7CisJfQorCWluZGV4ID0gcGFnZS0+aW5kZXg7CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCisJbXV0ZXhfbG9jaygmc3VwZXItPnNfZGlyb3BfbXV0ZXgpOworCWxvZ2ZzX2FkZF90cmFuc2FjdGlvbihkaXIsIHRhKTsKKworCXJldCA9IGxvZ2ZzX2RlbGV0ZShkaXIsIGluZGV4LCBOVUxMKTsKKwlpZiAoIXJldCkKKwkJcmV0ID0gd3JpdGVfaW5vZGUoZGlyKTsKKworCWlmIChyZXQpIHsKKwkJYWJvcnRfdHJhbnNhY3Rpb24oZGlyLCB0YSk7CisJCXByaW50ayhLRVJOX0VSUiJMT0dGUzogdW5hYmxlIHRvIGRlbGV0ZSBpbm9kZVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXRhLT5zdGF0ZSA9IFVOTElOS18yOworCWxvZ2ZzX2FkZF90cmFuc2FjdGlvbihpbm9kZSwgdGEpOworCXJldCA9IGxvZ2ZzX3JlbW92ZV9pbm9kZShpbm9kZSk7CitvdXQ6CisJbXV0ZXhfdW5sb2NrKCZzdXBlci0+c19kaXJvcF9tdXRleCk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGlubGluZSBpbnQgbG9nZnNfZW1wdHlfZGlyKHN0cnVjdCBpbm9kZSAqZGlyKQoreworCXU2NCBkYXRhOworCisJZGF0YSA9IGxvZ2ZzX3NlZWtfZGF0YShkaXIsIDApIDw8IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKKwlyZXR1cm4gZGF0YSA+PSBpX3NpemVfcmVhZChkaXIpOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKworCWlmICghbG9nZnNfZW1wdHlfZGlyKGlub2RlKSkKKwkJcmV0dXJuIC1FTk9URU1QVFk7CisKKwlyZXR1cm4gbG9nZnNfdW5saW5rKGRpciwgZGVudHJ5KTsKK30KKworLyogRklYTUU6IHJlYWRkaXIgY3VycmVudGx5IGhhcyBpdCdzIG93biBkaXJfd2FsayBjb2RlLiAgSSBkb24ndCBzZWUgYSBnb29kCisgKiB3YXkgdG8gY29tYmluZSB0aGUgdHdvIGNvcGllcyAqLworI2RlZmluZSBJTVBMSUNJVF9OT0RFUyAyCitzdGF0aWMgaW50IF9fbG9nZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqYnVmLCBmaWxsZGlyX3QgZmlsbGRpcikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmRpciA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCWxvZmZfdCBwb3MgPSBmaWxlLT5mX3BvcyAtIElNUExJQ0lUX05PREVTOworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBsb2dmc19kaXNrX2RlbnRyeSAqZGQ7CisJaW50IGZ1bGw7CisKKwlCVUdfT04ocG9zIDwgMCk7CisJZm9yICg7OyBwb3MrKykgeworCQlpZiAoYmV5b25kX2VvZihkaXIsIHBvcykpCisJCQlicmVhazsKKwkJaWYgKCFsb2dmc19leGlzdF9ibG9jayhkaXIsIHBvcykpIHsKKwkJCS8qIGRlbGV0ZWQgZGVudHJ5ICovCisJCQlwb3MgPSBkaXJfc2Vla19kYXRhKGRpciwgcG9zKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXBhZ2UgPSByZWFkX2NhY2hlX3BhZ2UoZGlyLT5pX21hcHBpbmcsIHBvcywKKwkJCQkoZmlsbGVyX3QgKilsb2dmc19yZWFkcGFnZSwgTlVMTCk7CisJCWlmIChJU19FUlIocGFnZSkpCisJCQlyZXR1cm4gUFRSX0VSUihwYWdlKTsKKwkJZGQgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJCUJVR19PTihkZC0+bmFtZWxlbiA9PSAwKTsKKworCQlmdWxsID0gZmlsbGRpcihidWYsIChjaGFyICopZGQtPm5hbWUsIGJlMTZfdG9fY3B1KGRkLT5uYW1lbGVuKSwKKwkJCQlwb3MsIGJlNjRfdG9fY3B1KGRkLT5pbm8pLCBkZC0+dHlwZSk7CisJCWt1bm1hcF9hdG9taWMoZGQsIEtNX1VTRVIwKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQlpZiAoZnVsbCkKKwkJCWJyZWFrOworCX0KKworCWZpbGUtPmZfcG9zID0gcG9zICsgSU1QTElDSVRfTk9ERVM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqYnVmLCBmaWxsZGlyX3QgZmlsbGRpcikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJaW5vX3QgcGlubyA9IHBhcmVudF9pbm8oZmlsZS0+Zl9kZW50cnkpOworCWludCBlcnI7CisKKwlpZiAoZmlsZS0+Zl9wb3MgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmaWxlLT5mX3BvcyA9PSAwKSB7CisJCWlmIChmaWxsZGlyKGJ1ZiwgIi4iLCAxLCAxLCBpbm9kZS0+aV9pbm8sIERUX0RJUikgPCAwKQorCQkJcmV0dXJuIDA7CisJCWZpbGUtPmZfcG9zKys7CisJfQorCWlmIChmaWxlLT5mX3BvcyA9PSAxKSB7CisJCWlmIChmaWxsZGlyKGJ1ZiwgIi4uIiwgMiwgMiwgcGlubywgRFRfRElSKSA8IDApCisJCQlyZXR1cm4gMDsKKwkJZmlsZS0+Zl9wb3MrKzsKKwl9CisKKwllcnIgPSBfX2xvZ2ZzX3JlYWRkaXIoZmlsZSwgYnVmLCBmaWxsZGlyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBsb2dmc19zZXRfbmFtZShzdHJ1Y3QgbG9nZnNfZGlza19kZW50cnkgKmRkLCBzdHJ1Y3QgcXN0ciAqbmFtZSkKK3sKKwlkZC0+bmFtZWxlbiA9IGNwdV90b19iZTE2KG5hbWUtPmxlbik7CisJbWVtY3B5KGRkLT5uYW1lLCBuYW1lLT5uYW1lLCBuYW1lLT5sZW4pOworfQorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqbG9nZnNfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCXN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBsb2dmc19kaXNrX2RlbnRyeSAqZGQ7CisJcGdvZmZfdCBpbmRleDsKKwl1NjQgaW5vID0gMDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCisJcGFnZSA9IGxvZ2ZzX2dldF9kZF9wYWdlKGRpciwgZGVudHJ5KTsKKwlpZiAoSVNfRVJSKHBhZ2UpKQorCQlyZXR1cm4gRVJSX0NBU1QocGFnZSk7CisJaWYgKCFwYWdlKSB7CisJCWRfYWRkKGRlbnRyeSwgTlVMTCk7CisJCXJldHVybiBOVUxMOworCX0KKwlpbmRleCA9IHBhZ2UtPmluZGV4OworCWRkID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCWlubyA9IGJlNjRfdG9fY3B1KGRkLT5pbm8pOworCWt1bm1hcF9hdG9taWMoZGQsIEtNX1VTRVIwKTsKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisKKwlpbm9kZSA9IGxvZ2ZzX2lnZXQoZGlyLT5pX3NiLCBpbm8pOworCWlmIChJU19FUlIoaW5vZGUpKSB7CisJCXByaW50ayhLRVJOX0VSUiJMb2dGUzogQ2Fubm90IHJlYWQgaW5vZGUgIyVsbHggZm9yIGRlbnRyeSAoJWx4LCAlbHgpbiIsCisJCQkJaW5vLCBkaXItPmlfaW5vLCBpbmRleCk7CisJCXJldHVybiBFUlJfQ0FTVChpbm9kZSk7CisJfQorCXJldHVybiBkX3NwbGljZV9hbGlhcyhpbm9kZSwgZGVudHJ5KTsKK30KKworc3RhdGljIHZvaWQgZ3Jvd19kaXIoc3RydWN0IGlub2RlICpkaXIsIGxvZmZfdCBpbmRleCkKK3sKKwlpbmRleCA9IChpbmRleCArIDEpIDw8IGRpci0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKKwlpZiAoaV9zaXplX3JlYWQoZGlyKSA8IGluZGV4KQorCQlpX3NpemVfd3JpdGUoZGlyLCBpbmRleCk7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfd3JpdGVfZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCXN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3RydWN0IGxvZ2ZzX2Rpc2tfZGVudHJ5ICpkZDsKKwl1MzIgaGFzaCA9IGhhc2hfMzIoZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubGVuLCAwKTsKKwlwZ29mZl90IGluZGV4OworCWludCByb3VuZCwgZXJyOworCisJZm9yIChyb3VuZCA9IDA7IHJvdW5kIDwgMjA7IHJvdW5kKyspIHsKKwkJaW5kZXggPSBoYXNoX2luZGV4KGhhc2gsIHJvdW5kKTsKKworCQlpZiAobG9nZnNfZXhpc3RfYmxvY2soZGlyLCBpbmRleCkpCisJCQljb250aW51ZTsKKwkJcGFnZSA9IGZpbmRfb3JfY3JlYXRlX3BhZ2UoZGlyLT5pX21hcHBpbmcsIGluZGV4LCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFwYWdlKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJZGQgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJCW1lbXNldChkZCwgMCwgc2l6ZW9mKCpkZCkpOworCQlkZC0+aW5vID0gY3B1X3RvX2JlNjQoaW5vZGUtPmlfaW5vKTsKKwkJZGQtPnR5cGUgPSBsb2dmc190eXBlKGlub2RlKTsKKwkJbG9nZnNfc2V0X25hbWUoZGQsICZkZW50cnktPmRfbmFtZSk7CisJCWt1bm1hcF9hdG9taWMoZGQsIEtNX1VTRVIwKTsKKworCQllcnIgPSBsb2dmc193cml0ZV9idWYoZGlyLCBwYWdlLCBXRl9MT0NLKTsKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwkJaWYgKCFlcnIpCisJCQlncm93X2RpcihkaXIsIGluZGV4KTsKKwkJcmV0dXJuIGVycjsKKwl9CisJLyogRklYTUU6IElzIHRoZXJlIGEgYmV0dGVyIHJldHVybiB2YWx1ZT8gIEluIG1vc3QgY2FzZXMgbmVpdGhlcgorCSAqIHRoZSBmaWxlc3lzdGVtIG5vciB0aGUgZGlyZWN0b3J5IGFyZSBmdWxsLiAgQnV0IHdlIGhhdmUgaGFkCisJICogdG9vIG1hbnkgY29sbGlzaW9ucyBmb3IgdGhpcyBwYXJ0aWN1bGFyIGhhc2ggYW5kIG5vIGZhbGxiYWNrLgorCSAqLworCXJldHVybiAtRU5PU1BDOworfQorCitzdGF0aWMgaW50IF9fbG9nZnNfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCXN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKmRlc3QsIGxvbmcgZGVzdGxlbikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoZGlyLT5pX3NiKTsKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCXN0cnVjdCBsb2dmc190cmFuc2FjdGlvbiAqdGE7CisJaW50IHJldDsKKworCXRhID0ga3phbGxvYyhzaXplb2YoKnRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0YS0+c3RhdGUgPSBDUkVBVEVfMTsKKwl0YS0+aW5vID0gaW5vZGUtPmlfaW5vOworCW11dGV4X2xvY2soJnN1cGVyLT5zX2Rpcm9wX211dGV4KTsKKwlsb2dmc19hZGRfdHJhbnNhY3Rpb24oaW5vZGUsIHRhKTsKKworCWlmIChkZXN0KSB7CisJCS8qIHN5bWxpbmsgKi8KKwkJcmV0ID0gbG9nZnNfaW5vZGVfd3JpdGUoaW5vZGUsIGRlc3QsIGRlc3RsZW4sIDAsIFdGX0xPQ0ssIE5VTEwpOworCQlpZiAoIXJldCkKKwkJCXJldCA9IHdyaXRlX2lub2RlKGlub2RlKTsKKwl9IGVsc2UgeworCQkvKiBjcmVhdC9ta2Rpci9ta25vZCAqLworCQlyZXQgPSB3cml0ZV9pbm9kZShpbm9kZSk7CisJfQorCWlmIChyZXQpIHsKKwkJYWJvcnRfdHJhbnNhY3Rpb24oaW5vZGUsIHRhKTsKKwkJbGktPmxpX2ZsYWdzIHw9IExPR0ZTX0lGX1NUSUxMQk9STjsKKwkJLyogRklYTUU6IHRydW5jYXRlIHN5bWxpbmsgKi8KKwkJaW5vZGUtPmlfbmxpbmstLTsKKwkJaXB1dChpbm9kZSk7CisJCWdvdG8gb3V0OworCX0KKworCXRhLT5zdGF0ZSA9IENSRUFURV8yOworCWxvZ2ZzX2FkZF90cmFuc2FjdGlvbihkaXIsIHRhKTsKKwlyZXQgPSBsb2dmc193cml0ZV9kaXIoZGlyLCBkZW50cnksIGlub2RlKTsKKwkvKiBzeW5jIGRpcmVjdG9yeSAqLworCWlmICghcmV0KQorCQlyZXQgPSB3cml0ZV9pbm9kZShkaXIpOworCisJaWYgKHJldCkgeworCQlsb2dmc19kZWxfdHJhbnNhY3Rpb24oZGlyLCB0YSk7CisJCXRhLT5zdGF0ZSA9IENSRUFURV8yOworCQlsb2dmc19hZGRfdHJhbnNhY3Rpb24oaW5vZGUsIHRhKTsKKwkJbG9nZnNfcmVtb3ZlX2lub2RlKGlub2RlKTsKKwkJaXB1dChpbm9kZSk7CisJCWdvdG8gb3V0OworCX0KKwlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOworb3V0OgorCW11dGV4X3VubG9jaygmc3VwZXItPnNfZGlyb3BfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfbWtkaXIoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCit7CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCS8qCisJICogRklYTUU6IHdoeSBkbyB3ZSBoYXZlIHRvIGZpbGwgaW4gU19JRkRJUiwgd2hpbGUgdGhlIG1vZGUgaXMKKwkgKiBjb3JyZWN0IGZvciBta25vZCwgY3JlYXQsIGV0Yy4/ICBTbWVsbHMgbGlrZSB0aGUgdmZzICpzaG91bGQqCisJICogZG8gaXQgZm9yIHVzIGJ1dCBmb3Igc29tZSByZWFzb24gZmFpbHMgdG8gZG8gc28uCisJICovCisJaW5vZGUgPSBsb2dmc19uZXdfaW5vZGUoZGlyLCBTX0lGRElSIHwgbW9kZSk7CisJaWYgKElTX0VSUihpbm9kZSkpCisJCXJldHVybiBQVFJfRVJSKGlub2RlKTsKKworCWlub2RlLT5pX29wID0gJmxvZ2ZzX2Rpcl9pb3BzOworCWlub2RlLT5pX2ZvcCA9ICZsb2dmc19kaXJfZm9wczsKKworCXJldHVybiBfX2xvZ2ZzX2NyZWF0ZShkaXIsIGRlbnRyeSwgaW5vZGUsIE5VTEwsIDApOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwKKwkJc3RydWN0IG5hbWVpZGF0YSAqbmQpCit7CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCWlub2RlID0gbG9nZnNfbmV3X2lub2RlKGRpciwgbW9kZSk7CisJaWYgKElTX0VSUihpbm9kZSkpCisJCXJldHVybiBQVFJfRVJSKGlub2RlKTsKKworCWlub2RlLT5pX29wID0gJmxvZ2ZzX3JlZ19pb3BzOworCWlub2RlLT5pX2ZvcCA9ICZsb2dmc19yZWdfZm9wczsKKwlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZsb2dmc19yZWdfYW9wczsKKworCXJldHVybiBfX2xvZ2ZzX2NyZWF0ZShkaXIsIGRlbnRyeSwgaW5vZGUsIE5VTEwsIDApOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX21rbm9kKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGludCBtb2RlLAorCQlkZXZfdCByZGV2KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpZiAoZGVudHJ5LT5kX25hbWUubGVuID4gTE9HRlNfTUFYX05BTUVMRU4pCisJCXJldHVybiAtRU5BTUVUT09MT05HOworCisJaW5vZGUgPSBsb2dmc19uZXdfaW5vZGUoZGlyLCBtb2RlKTsKKwlpZiAoSVNfRVJSKGlub2RlKSkKKwkJcmV0dXJuIFBUUl9FUlIoaW5vZGUpOworCisJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBtb2RlLCByZGV2KTsKKworCXJldHVybiBfX2xvZ2ZzX2NyZWF0ZShkaXIsIGRlbnRyeSwgaW5vZGUsIE5VTEwsIDApOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3N5bWxpbmsoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJY29uc3QgY2hhciAqdGFyZ2V0KQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc2l6ZV90IGRlc3RsZW4gPSBzdHJsZW4odGFyZ2V0KSArIDE7CisKKwlpZiAoZGVzdGxlbiA+IGRpci0+aV9zYi0+c19ibG9ja3NpemUpCisJCXJldHVybiAtRU5BTUVUT09MT05HOworCisJaW5vZGUgPSBsb2dmc19uZXdfaW5vZGUoZGlyLCBTX0lGTE5LIHwgMDc3Nyk7CisJaWYgKElTX0VSUihpbm9kZSkpCisJCXJldHVybiBQVFJfRVJSKGlub2RlKTsKKworCWlub2RlLT5pX29wID0gJmxvZ2ZzX3N5bWxpbmtfaW9wczsKKwlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZsb2dmc19yZWdfYW9wczsKKworCXJldHVybiBfX2xvZ2ZzX2NyZWF0ZShkaXIsIGRlbnRyeSwgaW5vZGUsIHRhcmdldCwgZGVzdGxlbik7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKK3sKKwlyZXR1cm4gZ2VuZXJpY19wZXJtaXNzaW9uKGlub2RlLCBtYXNrLCBOVUxMKTsKK30KKworc3RhdGljIGludCBsb2dmc19saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBpbm9kZSAqZGlyLAorCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IG9sZF9kZW50cnktPmRfaW5vZGU7CisKKwlpZiAoaW5vZGUtPmlfbmxpbmsgPj0gTE9HRlNfTElOS19NQVgpCisJCXJldHVybiAtRU1MSU5LOworCisJaW5vZGUtPmlfY3RpbWUgPSBkaXItPmlfY3RpbWUgPSBkaXItPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUU7CisJYXRvbWljX2luYygmaW5vZGUtPmlfY291bnQpOworCWlub2RlLT5pX25saW5rKys7CisJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKKworCXJldHVybiBfX2xvZ2ZzX2NyZWF0ZShkaXIsIGRlbnRyeSwgaW5vZGUsIE5VTEwsIDApOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX2dldF9kZChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQlzdHJ1Y3QgbG9nZnNfZGlza19kZW50cnkgKmRkLCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl2b2lkICptYXA7CisKKwlwYWdlID0gbG9nZnNfZ2V0X2RkX3BhZ2UoZGlyLCBkZW50cnkpOworCWlmIChJU19FUlIocGFnZSkpCisJCXJldHVybiBQVFJfRVJSKHBhZ2UpOworCSpwb3MgPSBwYWdlLT5pbmRleDsKKwltYXAgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJbWVtY3B5KGRkLCBtYXAsIHNpemVvZigqZGQpKTsKKwlrdW5tYXBfYXRvbWljKG1hcCwgS01fVVNFUjApOworCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2dmc19kZWxldGVfZGQoc3RydWN0IGlub2RlICpkaXIsIGxvZmZfdCBwb3MpCit7CisJLyoKKwkgKiBHZXR0aW5nIGNhbGxlZCB3aXRoIHBvcyBzb21ld2hlcmUgYmV5b25kIGVvZiBpcyBlaXRoZXIgYSBnb29mdXAKKwkgKiB3aXRoaW4gdGhpcyBmaWxlIG9yIG1lYW5zIHNvbWVvbmUgbWFsaWNpb3VzbHkgZWRpdGVkIHRoZQorCSAqIChjcmMtcHJvdGVjdGVkKSBqb3VybmFsLgorCSAqLworCUJVR19PTihiZXlvbmRfZW9mKGRpciwgcG9zKSk7CisJZGlyLT5pX2N0aW1lID0gZGlyLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOworCWxvZ19kaXIoIiBEZWxldGUgZGVudHJ5ICglbHgsICVsbHgpXG4iLCBkaXItPmlfaW5vLCBwb3MpOworCXJldHVybiBsb2dmc19kZWxldGUoZGlyLCBwb3MsIE5VTEwpOworfQorCisvKgorICogQ3Jvc3MtZGlyZWN0b3J5IHJlbmFtZSwgdGFyZ2V0IGRvZXMgbm90IGV4aXN0LiAgSnVzdCBhIGxpdHRsZSBuYXN0eS4KKyAqIENyZWF0ZSBhIG5ldyBkZW50cnkgaW4gdGhlIHRhcmdldCBkaXIsIHRoZW4gcmVtb3ZlIHRoZSBvbGQgZGVudHJ5LAorICogYWxsIHRoZSB3aGlsZSB0YWtpbmcgY2FyZSB0byByZW1lbWJlciBvdXIgb3BlcmF0aW9uIGluIHRoZSBqb3VybmFsLgorICovCitzdGF0aWMgaW50IGxvZ2ZzX3JlbmFtZV9jcm9zcyhzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCisJCQkgICAgICBzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKG9sZF9kaXItPmlfc2IpOworCXN0cnVjdCBsb2dmc19kaXNrX2RlbnRyeSBkZDsKKwlzdHJ1Y3QgbG9nZnNfdHJhbnNhY3Rpb24gKnRhOworCWxvZmZfdCBwb3M7CisJaW50IGVycjsKKworCS8qIDEuIGxvY2F0ZSBzb3VyY2UgZGQgKi8KKwllcnIgPSBsb2dmc19nZXRfZGQob2xkX2Rpciwgb2xkX2RlbnRyeSwgJmRkLCAmcG9zKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJdGEgPSBremFsbG9jKHNpemVvZigqdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXRhKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXRhLT5zdGF0ZSA9IENST1NTX1JFTkFNRV8xOworCXRhLT5kaXIgPSBvbGRfZGlyLT5pX2lubzsKKwl0YS0+cG9zID0gcG9zOworCisJLyogMi4gd3JpdGUgdGFyZ2V0IGRkICovCisJbXV0ZXhfbG9jaygmc3VwZXItPnNfZGlyb3BfbXV0ZXgpOworCWxvZ2ZzX2FkZF90cmFuc2FjdGlvbihuZXdfZGlyLCB0YSk7CisJZXJyID0gbG9nZnNfd3JpdGVfZGlyKG5ld19kaXIsIG5ld19kZW50cnksIG9sZF9kZW50cnktPmRfaW5vZGUpOworCWlmICghZXJyKQorCQllcnIgPSB3cml0ZV9pbm9kZShuZXdfZGlyKTsKKworCWlmIChlcnIpIHsKKwkJc3VwZXItPnNfcmVuYW1lX2RpciA9IDA7CisJCXN1cGVyLT5zX3JlbmFtZV9wb3MgPSAwOworCQlhYm9ydF90cmFuc2FjdGlvbihuZXdfZGlyLCB0YSk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIDMuIHJlbW92ZSBzb3VyY2UgZGQgKi8KKwl0YS0+c3RhdGUgPSBDUk9TU19SRU5BTUVfMjsKKwlsb2dmc19hZGRfdHJhbnNhY3Rpb24ob2xkX2RpciwgdGEpOworCWVyciA9IGxvZ2ZzX2RlbGV0ZV9kZChvbGRfZGlyLCBwb3MpOworCWlmICghZXJyKQorCQllcnIgPSB3cml0ZV9pbm9kZShvbGRfZGlyKTsKKwlMT0dGU19CVUdfT04oZXJyLCBvbGRfZGlyLT5pX3NiKTsKK291dDoKKwltdXRleF91bmxvY2soJnN1cGVyLT5zX2Rpcm9wX211dGV4KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3JlcGxhY2VfaW5vZGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKKwkJc3RydWN0IGxvZ2ZzX2Rpc2tfZGVudHJ5ICpkZCwgc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlsb2ZmX3QgcG9zOworCWludCBlcnI7CisKKwllcnIgPSBsb2dmc19nZXRfZGQoZGlyLCBkZW50cnksIGRkLCAmcG9zKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWRkLT5pbm8gPSBjcHVfdG9fYmU2NChpbm9kZS0+aV9pbm8pOworCWRkLT50eXBlID0gbG9nZnNfdHlwZShpbm9kZSk7CisKKwllcnIgPSB3cml0ZV9kaXIoZGlyLCBkZCwgcG9zKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWxvZ19kaXIoIlJlcGxhY2UgZGVudHJ5ICglbHgsICVsbHgpICVzIC0+ICVsbHhcbiIsIGRpci0+aV9pbm8sIHBvcywKKwkJCWRkLT5uYW1lLCBiZTY0X3RvX2NwdShkZC0+aW5vKSk7CisJcmV0dXJuIHdyaXRlX2lub2RlKGRpcik7Cit9CisKKy8qIFRhcmdldCBkZW50cnkgZXhpc3RzIC0gdGhlIHdvcnN0IGNhc2UuICBXZSBuZWVkIHRvIGF0dGFjaCB0aGUgc291cmNlCisgKiBpbm9kZSB0byB0aGUgdGFyZ2V0IGRlbnRyeSwgdGhlbiByZW1vdmUgdGhlIG9ycGhhbmVkIHRhcmdldCBpbm9kZSBhbmQKKyAqIHNvdXJjZSBkZW50cnkuCisgKi8KK3N0YXRpYyBpbnQgbG9nZnNfcmVuYW1lX3RhcmdldChzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCisJCQkgICAgICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihvbGRfZGlyLT5pX3NiKTsKKwlzdHJ1Y3QgaW5vZGUgKm9sZF9pbm9kZSA9IG9sZF9kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICpuZXdfaW5vZGUgPSBuZXdfZGVudHJ5LT5kX2lub2RlOworCWludCBpc2RpciA9IFNfSVNESVIob2xkX2lub2RlLT5pX21vZGUpOworCXN0cnVjdCBsb2dmc19kaXNrX2RlbnRyeSBkZDsKKwlzdHJ1Y3QgbG9nZnNfdHJhbnNhY3Rpb24gKnRhOworCWxvZmZfdCBwb3M7CisJaW50IGVycjsKKworCUJVR19PTihpc2RpciAhPSBTX0lTRElSKG5ld19pbm9kZS0+aV9tb2RlKSk7CisJaWYgKGlzZGlyKSB7CisJCWlmICghbG9nZnNfZW1wdHlfZGlyKG5ld19pbm9kZSkpCisJCQlyZXR1cm4gLUVOT1RFTVBUWTsKKwl9CisKKwkvKiAxLiBsb2NhdGUgc291cmNlIGRkICovCisJZXJyID0gbG9nZnNfZ2V0X2RkKG9sZF9kaXIsIG9sZF9kZW50cnksICZkZCwgJnBvcyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCXRhID0ga3phbGxvYyhzaXplb2YoKnRhKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF0YSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl0YS0+c3RhdGUgPSBUQVJHRVRfUkVOQU1FXzE7CisJdGEtPmRpciA9IG9sZF9kaXItPmlfaW5vOworCXRhLT5wb3MgPSBwb3M7CisJdGEtPmlubyA9IG5ld19pbm9kZS0+aV9pbm87CisKKwkvKiAyLiBhdHRhY2ggc291cmNlIGlub2RlIHRvIHRhcmdldCBkZCAqLworCW11dGV4X2xvY2soJnN1cGVyLT5zX2Rpcm9wX211dGV4KTsKKwlsb2dmc19hZGRfdHJhbnNhY3Rpb24obmV3X2RpciwgdGEpOworCWVyciA9IGxvZ2ZzX3JlcGxhY2VfaW5vZGUobmV3X2RpciwgbmV3X2RlbnRyeSwgJmRkLCBvbGRfaW5vZGUpOworCWlmIChlcnIpIHsKKwkJc3VwZXItPnNfcmVuYW1lX2RpciA9IDA7CisJCXN1cGVyLT5zX3JlbmFtZV9wb3MgPSAwOworCQlzdXBlci0+c192aWN0aW1faW5vID0gMDsKKwkJYWJvcnRfdHJhbnNhY3Rpb24obmV3X2RpciwgdGEpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiAzLiByZW1vdmUgc291cmNlIGRkICovCisJdGEtPnN0YXRlID0gVEFSR0VUX1JFTkFNRV8yOworCWxvZ2ZzX2FkZF90cmFuc2FjdGlvbihvbGRfZGlyLCB0YSk7CisJZXJyID0gbG9nZnNfZGVsZXRlX2RkKG9sZF9kaXIsIHBvcyk7CisJaWYgKCFlcnIpCisJCWVyciA9IHdyaXRlX2lub2RlKG9sZF9kaXIpOworCUxPR0ZTX0JVR19PTihlcnIsIG9sZF9kaXItPmlfc2IpOworCisJLyogNC4gcmVtb3ZlIHRhcmdldCBpbm9kZSAqLworCXRhLT5zdGF0ZSA9IFRBUkdFVF9SRU5BTUVfMzsKKwlsb2dmc19hZGRfdHJhbnNhY3Rpb24obmV3X2lub2RlLCB0YSk7CisJZXJyID0gbG9nZnNfcmVtb3ZlX2lub2RlKG5ld19pbm9kZSk7CisKK291dDoKKwltdXRleF91bmxvY2soJnN1cGVyLT5zX2Rpcm9wX211dGV4KTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3JlbmFtZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCisJCQlzdHJ1Y3QgaW5vZGUgKm5ld19kaXIsIHN0cnVjdCBkZW50cnkgKm5ld19kZW50cnkpCit7CisJaWYgKG5ld19kZW50cnktPmRfaW5vZGUpCisJCXJldHVybiBsb2dmc19yZW5hbWVfdGFyZ2V0KG9sZF9kaXIsIG9sZF9kZW50cnksCisJCQkJCSAgIG5ld19kaXIsIG5ld19kZW50cnkpOworCXJldHVybiBsb2dmc19yZW5hbWVfY3Jvc3Mob2xkX2Rpciwgb2xkX2RlbnRyeSwgbmV3X2RpciwgbmV3X2RlbnRyeSk7Cit9CisKKy8qIE5vIGxvY2tpbmcgZG9uZSBoZXJlLCBhcyB0aGlzIGlzIGNhbGxlZCBiZWZvcmUgLmdldF9zYigpIHJldHVybnMuICovCitpbnQgbG9nZnNfcmVwbGF5X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJdTY0IGlubywgcG9zOworCWludCBlcnI7CisKKwlpZiAoc3VwZXItPnNfdmljdGltX2lubykgeworCQkvKiBkZWxldGUgdmljdGltIGlub2RlICovCisJCWlubyA9IHN1cGVyLT5zX3ZpY3RpbV9pbm87CisJCXByaW50ayhLRVJOX0lORk8iTG9nRlM6IGRlbGV0ZSB1bm1hcHBlZCBpbm9kZSAjJWxseFxuIiwgaW5vKTsKKwkJaW5vZGUgPSBsb2dmc19pZ2V0KHNiLCBpbm8pOworCQlpZiAoSVNfRVJSKGlub2RlKSkKKwkJCWdvdG8gZmFpbDsKKworCQlMT0dGU19CVUdfT04oaV9zaXplX3JlYWQoaW5vZGUpID4gMCwgc2IpOworCQlzdXBlci0+c192aWN0aW1faW5vID0gMDsKKwkJZXJyID0gbG9nZnNfcmVtb3ZlX2lub2RlKGlub2RlKTsKKwkJaXB1dChpbm9kZSk7CisJCWlmIChlcnIpIHsKKwkJCXN1cGVyLT5zX3ZpY3RpbV9pbm8gPSBpbm87CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisJaWYgKHN1cGVyLT5zX3JlbmFtZV9kaXIpIHsKKwkJLyogZGVsZXRlIG9sZCBkZCBmcm9tIHJlbmFtZSAqLworCQlpbm8gPSBzdXBlci0+c19yZW5hbWVfZGlyOworCQlwb3MgPSBzdXBlci0+c19yZW5hbWVfcG9zOworCQlwcmludGsoS0VSTl9JTkZPIkxvZ0ZTOiBkZWxldGUgdW5iYWNrZWQgZGVudHJ5ICglbGx4LCAlbGx4KVxuIiwKKwkJCQlpbm8sIHBvcyk7CisJCWlub2RlID0gbG9nZnNfaWdldChzYiwgaW5vKTsKKwkJaWYgKElTX0VSUihpbm9kZSkpCisJCQlnb3RvIGZhaWw7CisKKwkJc3VwZXItPnNfcmVuYW1lX2RpciA9IDA7CisJCXN1cGVyLT5zX3JlbmFtZV9wb3MgPSAwOworCQllcnIgPSBsb2dmc19kZWxldGVfZGQoaW5vZGUsIHBvcyk7CisJCWlwdXQoaW5vZGUpOworCQlpZiAoZXJyKSB7CisJCQlzdXBlci0+c19yZW5hbWVfZGlyID0gaW5vOworCQkJc3VwZXItPnNfcmVuYW1lX3BvcyA9IHBvczsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK2ZhaWw6CisJTE9HRlNfQlVHKHNiKTsKKwlyZXR1cm4gLUVJTzsKK30KKworY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbG9nZnNfc3ltbGlua19pb3BzID0geworCS5yZWFkbGluawk9IGdlbmVyaWNfcmVhZGxpbmssCisJLmZvbGxvd19saW5rCT0gcGFnZV9mb2xsb3dfbGlua19saWdodCwKK307CisKK2NvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGxvZ2ZzX2Rpcl9pb3BzID0geworCS5jcmVhdGUJCT0gbG9nZnNfY3JlYXRlLAorCS5saW5rCQk9IGxvZ2ZzX2xpbmssCisJLmxvb2t1cAkJPSBsb2dmc19sb29rdXAsCisJLm1rZGlyCQk9IGxvZ2ZzX21rZGlyLAorCS5ta25vZAkJPSBsb2dmc19ta25vZCwKKwkucmVuYW1lCQk9IGxvZ2ZzX3JlbmFtZSwKKwkucm1kaXIJCT0gbG9nZnNfcm1kaXIsCisJLnBlcm1pc3Npb24JPSBsb2dmc19wZXJtaXNzaW9uLAorCS5zeW1saW5rCT0gbG9nZnNfc3ltbGluaywKKwkudW5saW5rCQk9IGxvZ2ZzX3VubGluaywKK307Citjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxvZ2ZzX2Rpcl9mb3BzID0geworCS5mc3luYwkJPSBsb2dmc19mc3luYywKKwkuaW9jdGwJCT0gbG9nZnNfaW9jdGwsCisJLnJlYWRkaXIJPSBsb2dmc19yZWFkZGlyLAorCS5yZWFkCQk9IGdlbmVyaWNfcmVhZF9kaXIsCit9OwpkaWZmIC0tZ2l0IGEvZnMvbG9nZnMvZmlsZS5jIGIvZnMvbG9nZnMvZmlsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MGYzNjcKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9sb2dmcy9maWxlLmMKQEAgLTAsMCArMSwyNjMgQEAKKy8qCisgKiBmcy9sb2dmcy9maWxlLmMJLSBwcmVwYXJlX3dyaXRlLCBjb21taXRfd3JpdGUgYW5kIGZyaWVuZHMKKyAqCisgKiBBcyBzaG91bGQgYmUgb2J2aW91cyBmb3IgTGludXgga2VybmVsIGNvZGUsIGxpY2Vuc2UgaXMgR1BMdjIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBKb2VybiBFbmdlbCA8am9lcm5AbG9nZnMub3JnPgorICovCisjaW5jbHVkZSAibG9nZnMuaCIKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgorCitzdGF0aWMgaW50IGxvZ2ZzX3dyaXRlX2JlZ2luKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKKwkJbG9mZl90IHBvcywgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCBmbGFncywKKwkJc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAqKmZzZGF0YSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlwZ29mZl90IGluZGV4ID0gcG9zID4+IFBBR0VfQ0FDSEVfU0hJRlQ7CisKKwlwYWdlID0gZ3JhYl9jYWNoZV9wYWdlX3dyaXRlX2JlZ2luKG1hcHBpbmcsIGluZGV4LCBmbGFncyk7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gLUVOT01FTTsKKwkqcGFnZXAgPSBwYWdlOworCisJaWYgKChsZW4gPT0gUEFHRV9DQUNIRV9TSVpFKSB8fCBQYWdlVXB0b2RhdGUocGFnZSkpCisJCXJldHVybiAwOworCWlmICgocG9zICYgUEFHRV9DQUNIRV9NQVNLKSA+PSBpX3NpemVfcmVhZChpbm9kZSkpIHsKKwkJdW5zaWduZWQgc3RhcnQgPSBwb3MgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CisJCXVuc2lnbmVkIGVuZCA9IHN0YXJ0ICsgbGVuOworCisJCS8qIFJlYWRpbmcgYmV5b25kIGlfc2l6ZSBpcyBzaW1wbGU6IG1lbXNldCB0byB6ZXJvICovCisJCXplcm9fdXNlcl9zZWdtZW50cyhwYWdlLCAwLCBzdGFydCwgZW5kLCBQQUdFX0NBQ0hFX1NJWkUpOworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIGxvZ2ZzX3JlYWRwYWdlX25vbG9jayhwYWdlKTsKK30KKworc3RhdGljIGludCBsb2dmc193cml0ZV9lbmQoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGNvcGllZCwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCXZvaWQgKmZzZGF0YSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKKwlwZ29mZl90IGluZGV4ID0gcGFnZS0+aW5kZXg7CisJdW5zaWduZWQgc3RhcnQgPSBwb3MgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSk7CisJdW5zaWduZWQgZW5kID0gc3RhcnQgKyBjb3BpZWQ7CisJaW50IHJldCA9IDA7CisKKwlCVUdfT04oUEFHRV9DQUNIRV9TSVpFICE9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7CisJQlVHX09OKHBhZ2UtPmluZGV4ID4gSTNfQkxPQ0tTKTsKKworCWlmIChjb3BpZWQgPCBsZW4pIHsKKwkJLyoKKwkJICogU2hvcnQgd3JpdGUgb2YgYSBub24taW5pdGlhbGl6ZWQgcGFnZWQuICBKdXN0IHRlbGwgdXNlcnNwYWNlCisJCSAqIHRvIHJldHJ5IHRoZSBlbnRpcmUgcGFnZS4KKwkJICovCisJCWlmICghUGFnZVVwdG9kYXRlKHBhZ2UpKSB7CisJCQljb3BpZWQgPSAwOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJaWYgKGNvcGllZCA9PSAwKQorCQlnb3RvIG91dDsgLyogRklYTUU6IGRvIHdlIG5lZWQgdG8gdXBkYXRlIGlub2RlPyAqLworCisJaWYgKGlfc2l6ZV9yZWFkKGlub2RlKSA8IChpbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUKSArIGVuZCkgeworCQlpX3NpemVfd3JpdGUoaW5vZGUsIChpbmRleCA8PCBQQUdFX0NBQ0hFX1NISUZUKSArIGVuZCk7CisJCW1hcmtfaW5vZGVfZGlydHlfc3luYyhpbm9kZSk7CisJfQorCisJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOworCWlmICghUGFnZURpcnR5KHBhZ2UpKSB7CisJCWlmICghZ2V0X3BhZ2VfcmVzZXJ2ZShpbm9kZSwgcGFnZSkpCisJCQlfX3NldF9wYWdlX2RpcnR5X25vYnVmZmVycyhwYWdlKTsKKwkJZWxzZQorCQkJcmV0ID0gbG9nZnNfd3JpdGVfYnVmKGlub2RlLCBwYWdlLCBXRl9MT0NLKTsKKwl9CitvdXQ6CisJdW5sb2NrX3BhZ2UocGFnZSk7CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCXJldHVybiByZXQgPyByZXQgOiBjb3BpZWQ7Cit9CisKK2ludCBsb2dmc19yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaW50IHJldDsKKworCXJldCA9IGxvZ2ZzX3JlYWRwYWdlX25vbG9jayhwYWdlKTsKKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlyZXR1cm4gcmV0OworfQorCisvKiBDbGVhciB0aGUgcGFnZSdzIGRpcnR5IGZsYWcgaW4gdGhlIHJhZGl4IHRyZWUuICovCisvKiBUT0RPOiBtdWNraW5nIHdpdGggUGFnZVdyaXRlYmFjayBpcyBzaWxseS4gIEFkZCBhIGdlbmVyaWMgZnVuY3Rpb24gdG8gY2xlYXIKKyAqIHRoZSBkaXJ0eSBiaXQgZnJvbSB0aGUgcmFkaXggdHJlZSBmb3IgZmlsZXN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIHRvIHdhaXQKKyAqIGZvciBwYWdlIHdyaXRlYmFjayB0byBmaW5pc2ggKGkuZS4gYW55IGNvbXByZXNzaW5nIGZpbGVzeXN0ZW0pLgorICovCitzdGF0aWMgdm9pZCBjbGVhcl9yYWRpeF90cmVlX2RpcnR5KHN0cnVjdCBwYWdlICpwYWdlKQoreworCUJVR19PTihQYWdlUHJpdmF0ZShwYWdlKSB8fCBwYWdlLT5wcml2YXRlKTsKKwlzZXRfcGFnZV93cml0ZWJhY2socGFnZSk7CisJZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOworfQorCitzdGF0aWMgaW50IF9fbG9nZnNfd3JpdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCWludCBlcnI7CisKKwllcnIgPSBsb2dmc193cml0ZV9idWYoaW5vZGUsIHBhZ2UsIFdGX0xPQ0spOworCWlmIChlcnIpCisJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOworCWVsc2UKKwkJY2xlYXJfcmFkaXhfdHJlZV9kaXJ0eShwYWdlKTsKKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3dyaXRlcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IHBhZ2UtPm1hcHBpbmctPmhvc3Q7CisJbG9mZl90IGlfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwlwZ29mZl90IGVuZF9pbmRleCA9IGlfc2l6ZSA+PiBQQUdFX0NBQ0hFX1NISUZUOworCXVuc2lnbmVkIG9mZnNldDsKKwl1NjQgYml4OworCWxldmVsX3QgbGV2ZWw7CisKKwlsb2dfZmlsZSgibG9nZnNfd3JpdGVwYWdlKCVseCwgJWx4LCAlcClcbiIsIGlub2RlLT5pX2lubywgcGFnZS0+aW5kZXgsCisJCQlwYWdlKTsKKworCWxvZ2ZzX3VucGFja19pbmRleChwYWdlLT5pbmRleCwgJmJpeCwgJmxldmVsKTsKKworCS8qIEluZGlyZWN0IGJsb2NrcyBhcmUgbmV2ZXIgdHJ1bmNhdGVkICovCisJaWYgKGxldmVsICE9IDApCisJCXJldHVybiBfX2xvZ2ZzX3dyaXRlcGFnZShwYWdlKTsKKworCS8qCisJICogVE9ETzogZXZlcnl0aGluZyBiZWxvdyBpcyBhIG5lYXItdmVyYmF0aW0gY29weSBvZiBub2JoX3dyaXRlcGFnZSgpLgorCSAqIFRoZSByZWxldmFudCBiaXRzIHNob3VsZCBiZSBmYWN0b3JlZCBvdXQgYWZ0ZXIgbG9nZnMgaXMgbWVyZ2VkLgorCSAqLworCisJLyogSXMgdGhlIHBhZ2UgZnVsbHkgaW5zaWRlIGlfc2l6ZT8gKi8KKwlpZiAoYml4IDwgZW5kX2luZGV4KQorCQlyZXR1cm4gX19sb2dmc193cml0ZXBhZ2UocGFnZSk7CisKKwkgLyogSXMgdGhlIHBhZ2UgZnVsbHkgb3V0c2lkZSBpX3NpemU/ICh0cnVuY2F0ZSBpbiBwcm9ncmVzcykgKi8KKwlvZmZzZXQgPSBpX3NpemUgJiAoUEFHRV9DQUNIRV9TSVpFLTEpOworCWlmIChiaXggPiBlbmRfaW5kZXggfHwgb2Zmc2V0ID09IDApIHsKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCXJldHVybiAwOyAvKiBkb24ndCBjYXJlICovCisJfQorCisJLyoKKwkgKiBUaGUgcGFnZSBzdHJhZGRsZXMgaV9zaXplLiAgSXQgbXVzdCBiZSB6ZXJvZWQgb3V0IG9uIGVhY2ggYW5kIGV2ZXJ5CisJICogd3JpdGVwYWdlIGludm9rYXRpb24gYmVjYXVzZSBpdCBtYXkgYmUgbW1hcHBlZC4gICJBIGZpbGUgaXMgbWFwcGVkCisJICogaW4gbXVsdGlwbGVzIG9mIHRoZSBwYWdlIHNpemUuICBGb3IgYSBmaWxlIHRoYXQgaXMgbm90IGEgbXVsdGlwbGUgb2YKKwkgKiB0aGUgIHBhZ2Ugc2l6ZSwgdGhlIHJlbWFpbmluZyBtZW1vcnkgaXMgemVyb2VkIHdoZW4gbWFwcGVkLCBhbmQKKwkgKiB3cml0ZXMgdG8gdGhhdCByZWdpb24gYXJlIG5vdCB3cml0dGVuIG91dCB0byB0aGUgZmlsZS4iCisJICovCisJemVyb191c2VyX3NlZ21lbnQocGFnZSwgb2Zmc2V0LCBQQUdFX0NBQ0hFX1NJWkUpOworCXJldHVybiBfX2xvZ2ZzX3dyaXRlcGFnZShwYWdlKTsKK30KKworc3RhdGljIHZvaWQgbG9nZnNfaW52YWxpZGF0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCW1vdmVfcGFnZV90b19idHJlZShwYWdlKTsKKwlCVUdfT04oUGFnZVByaXZhdGUocGFnZSkgfHwgcGFnZS0+cHJpdmF0ZSk7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfcmVsZWFzZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IG9ubHlfeGZzX3VzZXNfdGhpcykKK3sKKwlyZXR1cm4gMDsgLyogTm9uZSBvZiB0aGVzZSBhcmUgZWFzeSB0byByZWxlYXNlICovCit9CisKKworaW50IGxvZ2ZzX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQl1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCXVuc2lnbmVkIGludCBvbGRmbGFncywgZmxhZ3M7CisJaW50IGVycjsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBGU19JT0NfR0VURkxBR1M6CisJCWZsYWdzID0gbGktPmxpX2ZsYWdzICYgTE9HRlNfRkxfVVNFUl9WSVNJQkxFOworCQlyZXR1cm4gcHV0X3VzZXIoZmxhZ3MsIChpbnQgX191c2VyICopYXJnKTsKKwljYXNlIEZTX0lPQ19TRVRGTEFHUzoKKwkJaWYgKElTX1JET05MWShpbm9kZSkpCisJCQlyZXR1cm4gLUVST0ZTOworCisJCWlmICghaXNfb3duZXJfb3JfY2FwKGlub2RlKSkKKwkJCXJldHVybiAtRUFDQ0VTOworCisJCWVyciA9IGdldF91c2VyKGZsYWdzLCAoaW50IF9fdXNlciAqKWFyZyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwkJb2xkZmxhZ3MgPSBsaS0+bGlfZmxhZ3M7CisJCWZsYWdzICY9IExPR0ZTX0ZMX1VTRVJfTU9ESUZJQUJMRTsKKwkJZmxhZ3MgfD0gb2xkZmxhZ3MgJiB+TE9HRlNfRkxfVVNFUl9NT0RJRklBQkxFOworCQlsaS0+bGlfZmxhZ3MgPSBmbGFnczsKKwkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisKKwkJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJCW1hcmtfaW5vZGVfZGlydHlfc3luYyhpbm9kZSk7CisJCXJldHVybiAwOworCisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FTk9UVFk7CisJfQorfQorCitpbnQgbG9nZnNfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGRhdGFzeW5jKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBkZW50cnktPmRfaW5vZGUtPmlfc2I7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKworCS8qIEZJWE1FOiB3cml0ZSBhbmNob3IgKi8KKwlzdXBlci0+c19kZXZvcHMtPnN5bmMoc2IpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgZXJyID0gMDsKKworCWlmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfU0laRSkKKwkJZXJyID0gbG9nZnNfdHJ1bmNhdGUoaW5vZGUsIGF0dHItPmlhX3NpemUpOworCWF0dHItPmlhX3ZhbGlkICY9IH5BVFRSX1NJWkU7CisKKwlpZiAoIWVycikKKwkJZXJyID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBhdHRyKTsKKwlpZiAoIWVycikKKwkJZXJyID0gaW5vZGVfc2V0YXR0cihpbm9kZSwgYXR0cik7CisJcmV0dXJuIGVycjsKK30KKworY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbG9nZnNfcmVnX2lvcHMgPSB7CisJLnNldGF0dHIJPSBsb2dmc19zZXRhdHRyLAorfTsKKworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsb2dmc19yZWdfZm9wcyA9IHsKKwkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCisJLmFpb193cml0ZQk9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUsCisJLmZzeW5jCQk9IGxvZ2ZzX2ZzeW5jLAorCS5pb2N0bAkJPSBsb2dmc19pb2N0bCwKKwkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCisJLm1tYXAJCT0gZ2VuZXJpY19maWxlX3JlYWRvbmx5X21tYXAsCisJLm9wZW4JCT0gZ2VuZXJpY19maWxlX29wZW4sCisJLnJlYWQJCT0gZG9fc3luY19yZWFkLAorCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLAorfTsKKworY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBsb2dmc19yZWdfYW9wcyA9IHsKKwkuaW52YWxpZGF0ZXBhZ2UJPSBsb2dmc19pbnZhbGlkYXRlcGFnZSwKKwkucmVhZHBhZ2UJPSBsb2dmc19yZWFkcGFnZSwKKwkucmVsZWFzZXBhZ2UJPSBsb2dmc19yZWxlYXNlcGFnZSwKKwkuc2V0X3BhZ2VfZGlydHkJPSBfX3NldF9wYWdlX2RpcnR5X25vYnVmZmVycywKKwkud3JpdGVwYWdlCT0gbG9nZnNfd3JpdGVwYWdlLAorCS53cml0ZXBhZ2VzCT0gZ2VuZXJpY193cml0ZXBhZ2VzLAorCS53cml0ZV9iZWdpbgk9IGxvZ2ZzX3dyaXRlX2JlZ2luLAorCS53cml0ZV9lbmQJPSBsb2dmc193cml0ZV9lbmQsCit9OwpkaWZmIC0tZ2l0IGEvZnMvbG9nZnMvZ2MuYyBiL2ZzL2xvZ2ZzL2djLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI5NDlmOQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2xvZ2ZzL2djLmMKQEAgLTAsMCArMSw3MzAgQEAKKy8qCisgKiBmcy9sb2dmcy9nYy5jCS0gZ2FyYmFnZSBjb2xsZWN0aW9uIGNvZGUKKyAqCisgKiBBcyBzaG91bGQgYmUgb2J2aW91cyBmb3IgTGludXgga2VybmVsIGNvZGUsIGxpY2Vuc2UgaXMgR1BMdjIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBKb2VybiBFbmdlbCA8am9lcm5AbG9nZnMub3JnPgorICovCisjaW5jbHVkZSAibG9nZnMuaCIKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisvKgorICogV2VhciBsZXZlbGluZyBuZWVkcyB0byBraWNrIGluIHdoZW4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBsb3cgZXJhc2UKKyAqIGNvdW50cyBhbmQgaGlnaCBlcmFzZSBjb3VudHMgZ2V0cyB0b28gYmlnLiAgQSBnb29kIHZhbHVlIGZvciAidG9vIGJpZyIKKyAqIG1heSBiZSBzb21ld2hhdCBiZWxvdyAxMCUgb2YgbWF4aW11bSBlcmFzZSBjb3VudCBmb3IgdGhlIGRldmljZS4KKyAqIFdoeSBub3QgMzk3LCB0byBwaWNrIGEgbmljZSByb3VuZCBudW1iZXIgd2l0aCBubyBzcGVjaWZpYyBtZWFuaW5nPyA6KQorICoKKyAqIFdMX1JBVEVMSU1JVCBpcyB0aGUgbWluaW11bSB0aW1lIGJldHdlZW4gdHdvIHdlYXIgbGV2ZWwgZXZlbnRzLiAgQSBodWdlCisgKiBudW1iZXIgb2Ygc2VnbWVudHMgbWF5IGZ1bGZpbCB0aGUgcmVxdWlyZW1lbnRzIGZvciB3ZWFyIGxldmVsaW5nIGF0IHRoZQorICogc2FtZSB0aW1lLiAgSWYgdGhhdCBoYXBwZW5zIHdlIGRvbid0IHdhbnQgdG8gY2F1c2UgYSBsYXRlbmN5IGZyb20gaGVsbCwKKyAqIGJ1dCBqdXN0IGdlbnRseSBwaWNrIG9uZSBzZWdtZW50IGV2ZXJ5IHNvIG9mdGVuIGFuZCBtaW5pbWl6ZSBvdmVyaGVhZC4KKyAqLworI2RlZmluZSBXTF9ERUxUQSAzOTcKKyNkZWZpbmUgV0xfUkFURUxJTUlUIDEwMAorI2RlZmluZSBNQVhfT0JKX0FMSUFTRVMJMjYwMAorI2RlZmluZSBTQ0FOX1JBVElPIDUxMgkvKiBudW1iZXIgb2Ygc2Nhbm5lZCBzZWdtZW50cyBwZXIgZ2MnZCBzZWdtZW50ICovCisjZGVmaW5lIExJU1RfU0laRSA2NAkvKiBiYXNlIHNpemUgb2YgY2FuZGlkYXRlIGxpc3RzICovCisjZGVmaW5lIFNDQU5fUk9VTkRTIDEyOAkvKiBtYXhpbXVtIG51bWJlciBvZiBjb21wbGV0ZSBtZWRpdW0gc2NhbnMgKi8KKyNkZWZpbmUgU0NBTl9ST1VORFNfSElHSCA0IC8qIG1heGltdW0gbnVtYmVyIG9mIGhpZ2hlci1sZXZlbCBzY2FucyAqLworCitzdGF0aWMgaW50IG5vX2ZyZWVfc2VnbWVudHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCisJcmV0dXJuIHN1cGVyLT5zX2ZyZWVfbGlzdC5jb3VudDsKK30KKworLyogam91cm5hbCBoYXMgZGlzdGFuY2UgLTEsIHRvcC1tb3N0IGlmaWxlIGxheWVyIGRpc3RhbmNlIDAgKi8KK3N0YXRpYyB1OCByb290X2Rpc3RhbmNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGdjX2xldmVsX3QgX19nY19sZXZlbCkKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXU4IGdjX2xldmVsID0gKF9fZm9yY2UgdTgpX19nY19sZXZlbDsKKworCXN3aXRjaCAoZ2NfbGV2ZWwpIHsKKwljYXNlIDA6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgMTogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSAyOiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIDM6CisJCS8qIGZpbGUgZGF0YSBvciBpbmRpcmVjdCBibG9ja3MgKi8KKwkJcmV0dXJuIHN1cGVyLT5zX2lmaWxlX2xldmVscyArIHN1cGVyLT5zX2libG9ja19sZXZlbHMgLSBnY19sZXZlbDsKKwljYXNlIDY6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgNzogLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSA4OiAvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIDk6CisJCS8qIGlub2RlIGZpbGUgZGF0YSBvciBpbmRpcmVjdCBibG9ja3MgKi8KKwkJcmV0dXJuIHN1cGVyLT5zX2lmaWxlX2xldmVscyAtIChnY19sZXZlbCAtIDYpOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0VSUiJMT0dGUzogc2VnbWVudCBvZiB1bmtub3duIGxldmVsICV4IGZvdW5kXG4iLAorCQkJCWdjX2xldmVsKTsKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIHN1cGVyLT5zX2lmaWxlX2xldmVscyArIHN1cGVyLT5zX2libG9ja19sZXZlbHM7CisJfQorfQorCitzdGF0aWMgaW50IHNlZ21lbnRfaXNfcmVzZXJ2ZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlZ25vKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX2FyZWEgKmFyZWE7CisJdm9pZCAqcmVzZXJ2ZWQ7CisJaW50IGk7CisKKwkvKiBTb21lIHNlZ21lbnRzIGFyZSByZXNlcnZlZC4gIEp1c3QgcHJldGVuZCB0aGV5IHdlcmUgYWxsIHZhbGlkICovCisJcmVzZXJ2ZWQgPSBidHJlZV9sb29rdXAzMigmc3VwZXItPnNfcmVzZXJ2ZWRfc2VnbWVudHMsIHNlZ25vKTsKKwlpZiAocmVzZXJ2ZWQpCisJCXJldHVybiAxOworCisJLyogQ3VycmVudGx5IG9wZW4gc2VnbWVudHMgKi8KKwlmb3JfZWFjaF9hcmVhKGkpIHsKKwkJYXJlYSA9IHN1cGVyLT5zX2FyZWFbaV07CisJCWlmIChhcmVhLT5hX2lzX29wZW4gJiYgYXJlYS0+YV9zZWdubyA9PSBzZWdubykKKwkJCXJldHVybiAxOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsb2dmc19tYXJrX3NlZ21lbnRfYmFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzZWdubykKK3sKKwlCVUcoKTsKK30KKworLyoKKyAqIFJldHVybnMgdGhlIGJ5dGVzIGNvbnN1bWVkIGJ5IHZhbGlkIG9iamVjdHMgaW4gdGhpcyBzZWdtZW50LiAgT2JqZWN0IGhlYWRlcnMKKyAqIGFyZSBjb3VudGVkLCB0aGUgc2VnbWVudCBoZWFkZXIgaXMgbm90LgorICovCitzdGF0aWMgdTMyIGxvZ2ZzX3ZhbGlkX2J5dGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzZWdubywgdTMyICplYywKKwkJZ2NfbGV2ZWxfdCAqZ2NfbGV2ZWwpCit7CisJc3RydWN0IGxvZ2ZzX3NlZ21lbnRfZW50cnkgc2U7CisJdTMyIGVjX2xldmVsOworCisJbG9nZnNfZ2V0X3NlZ21lbnRfZW50cnkoc2IsIHNlZ25vLCAmc2UpOworCWlmIChzZS5lY19sZXZlbCA9PSBjcHVfdG9fYmUzMihCQURTRUcpIHx8CisJCQlzZS52YWxpZCA9PSBjcHVfdG9fYmUzMihSRVNFUlZFRCkpCisJCXJldHVybiBSRVNFUlZFRDsKKworCWVjX2xldmVsID0gYmUzMl90b19jcHUoc2UuZWNfbGV2ZWwpOworCSplYyA9IGVjX2xldmVsID4+IDQ7CisJKmdjX2xldmVsID0gR0NfTEVWRUwoZWNfbGV2ZWwgJiAweGYpOworCXJldHVybiBiZTMyX3RvX2NwdShzZS52YWxpZCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ2ZzX2NsZWFuc2VfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IG9mcywgdTY0IGlubywKKwkJdTY0IGJpeCwgZ2NfbGV2ZWxfdCBnY19sZXZlbCkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWludCBlcnIsIGNvb2tpZTsKKworCWlub2RlID0gbG9nZnNfc2FmZV9pZ2V0KHNiLCBpbm8sICZjb29raWUpOworCWVyciA9IGxvZ2ZzX3Jld3JpdGVfYmxvY2soaW5vZGUsIGJpeCwgb2ZzLCBnY19sZXZlbCwgMCk7CisJQlVHX09OKGVycik7CisJbG9nZnNfc2FmZV9pcHV0KGlub2RlLCBjb29raWUpOworfQorCitzdGF0aWMgdTMyIGxvZ2ZzX2djX3NlZ21lbnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlZ25vLCB1OCBkaXN0KQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX3NlZ21lbnRfaGVhZGVyIHNoOworCXN0cnVjdCBsb2dmc19vYmplY3RfaGVhZGVyIG9oOworCXU2NCBvZnMsIGlubywgYml4OworCXUzMiBzZWdfb2ZzLCBsb2dpY2FsX3NlZ25vLCBjbGVhbmVkID0gMDsKKwlpbnQgZXJyLCBsZW4sIHZhbGlkOworCWdjX2xldmVsX3QgZ2NfbGV2ZWw7CisKKwlMT0dGU19CVUdfT04oc2VnbWVudF9pc19yZXNlcnZlZChzYiwgc2Vnbm8pLCBzYik7CisKKwlidHJlZV9pbnNlcnQzMigmc3VwZXItPnNfcmVzZXJ2ZWRfc2VnbWVudHMsIHNlZ25vLCAodm9pZCAqKTEsIEdGUF9OT0ZTKTsKKwllcnIgPSB3YnVmX3JlYWQoc2IsIGRldl9vZnMoc2IsIHNlZ25vLCAwKSwgc2l6ZW9mKHNoKSwgJnNoKTsKKwlCVUdfT04oZXJyKTsKKwlnY19sZXZlbCA9IEdDX0xFVkVMKHNoLmxldmVsKTsKKwlsb2dpY2FsX3NlZ25vID0gYmUzMl90b19jcHUoc2guc2Vnbm8pOworCWlmIChzaC5jcmMgIT0gbG9nZnNfY3JjMzIoJnNoLCBzaXplb2Yoc2gpLCA0KSkgeworCQlsb2dmc19tYXJrX3NlZ21lbnRfYmFkKHNiLCBzZWdubyk7CisJCWNsZWFuZWQgPSAtMTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9yIChzZWdfb2ZzID0gTE9HRlNfU0VHTUVOVF9IRUFERVJTSVpFOworCQkJc2VnX29mcyArIHNpemVvZihvaCkgPCBzdXBlci0+c19zZWdzaXplOyApIHsKKwkJb2ZzID0gZGV2X29mcyhzYiwgbG9naWNhbF9zZWdubywgc2VnX29mcyk7CisJCWVyciA9IHdidWZfcmVhZChzYiwgZGV2X29mcyhzYiwgc2Vnbm8sIHNlZ19vZnMpLCBzaXplb2Yob2gpLAorCQkJCSZvaCk7CisJCUJVR19PTihlcnIpOworCisJCWlmICghbWVtY2hyX2ludigmb2gsIDB4ZmYsIHNpemVvZihvaCkpKQorCQkJYnJlYWs7CisKKwkJaWYgKG9oLmNyYyAhPSBsb2dmc19jcmMzMigmb2gsIHNpemVvZihvaCkgLSA0LCA0KSkgeworCQkJbG9nZnNfbWFya19zZWdtZW50X2JhZChzYiwgc2Vnbm8pOworCQkJY2xlYW5lZCA9IHN1cGVyLT5zX3NlZ3NpemUgLSAxOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpbm8gPSBiZTY0X3RvX2NwdShvaC5pbm8pOworCQliaXggPSBiZTY0X3RvX2NwdShvaC5iaXgpOworCQlsZW4gPSBzaXplb2Yob2gpICsgYmUxNl90b19jcHUob2gubGVuKTsKKwkJdmFsaWQgPSBsb2dmc19pc192YWxpZF9ibG9jayhzYiwgb2ZzLCBpbm8sIGJpeCwgZ2NfbGV2ZWwpOworCQlpZiAodmFsaWQgPT0gMSkgeworCQkJbG9nZnNfY2xlYW5zZV9ibG9jayhzYiwgb2ZzLCBpbm8sIGJpeCwgZ2NfbGV2ZWwpOworCQkJY2xlYW5lZCArPSBsZW47CisJCX0gZWxzZSBpZiAodmFsaWQgPT0gMikgeworCQkJLyogV2lsbCBiZSBpbnZhbGlkIHVwb24gam91cm5hbCBjb21taXQgKi8KKwkJCWNsZWFuZWQgKz0gbGVuOworCQl9CisJCXNlZ19vZnMgKz0gbGVuOworCX0KK291dDoKKwlidHJlZV9yZW1vdmUzMigmc3VwZXItPnNfcmVzZXJ2ZWRfc2VnbWVudHMsIHNlZ25vKTsKKwlyZXR1cm4gY2xlYW5lZDsKK30KKworc3RhdGljIHN0cnVjdCBnY19jYW5kaWRhdGUgKmFkZF9saXN0KHN0cnVjdCBnY19jYW5kaWRhdGUgKmNhbmQsCisJCXN0cnVjdCBjYW5kaWRhdGVfbGlzdCAqbGlzdCkKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmbGlzdC0+cmJfdHJlZS5yYl9ub2RlOworCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOworCXN0cnVjdCBnY19jYW5kaWRhdGUgKmN1cjsKKwlpbnQgY29tcDsKKworCWNhbmQtPmxpc3QgPSBsaXN0OworCXdoaWxlICgqcCkgeworCQlwYXJlbnQgPSAqcDsKKwkJY3VyID0gcmJfZW50cnkocGFyZW50LCBzdHJ1Y3QgZ2NfY2FuZGlkYXRlLCByYl9ub2RlKTsKKworCQlpZiAobGlzdC0+c29ydF9ieV9lYykKKwkJCWNvbXAgPSBjYW5kLT5lcmFzZV9jb3VudCA8IGN1ci0+ZXJhc2VfY291bnQ7CisJCWVsc2UKKwkJCWNvbXAgPSBjYW5kLT52YWxpZCA8IGN1ci0+dmFsaWQ7CisKKwkJaWYgKGNvbXApCisJCQlwID0gJnBhcmVudC0+cmJfbGVmdDsKKwkJZWxzZQorCQkJcCA9ICZwYXJlbnQtPnJiX3JpZ2h0OworCX0KKwlyYl9saW5rX25vZGUoJmNhbmQtPnJiX25vZGUsIHBhcmVudCwgcCk7CisJcmJfaW5zZXJ0X2NvbG9yKCZjYW5kLT5yYl9ub2RlLCAmbGlzdC0+cmJfdHJlZSk7CisKKwlpZiAobGlzdC0+Y291bnQgPD0gbGlzdC0+bWF4Y291bnQpIHsKKwkJbGlzdC0+Y291bnQrKzsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWNhbmQgPSByYl9lbnRyeShyYl9sYXN0KCZsaXN0LT5yYl90cmVlKSwgc3RydWN0IGdjX2NhbmRpZGF0ZSwgcmJfbm9kZSk7CisJcmJfZXJhc2UoJmNhbmQtPnJiX25vZGUsICZsaXN0LT5yYl90cmVlKTsKKwljYW5kLT5saXN0ID0gTlVMTDsKKwlyZXR1cm4gY2FuZDsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2Zyb21fbGlzdChzdHJ1Y3QgZ2NfY2FuZGlkYXRlICpjYW5kKQoreworCXN0cnVjdCBjYW5kaWRhdGVfbGlzdCAqbGlzdCA9IGNhbmQtPmxpc3Q7CisKKwlyYl9lcmFzZSgmY2FuZC0+cmJfbm9kZSwgJmxpc3QtPnJiX3RyZWUpOworCWxpc3QtPmNvdW50LS07Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfY2FuZGlkYXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBnY19jYW5kaWRhdGUgKmNhbmQpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKworCWJ0cmVlX3JlbW92ZTMyKCZzdXBlci0+c19jYW5kX3RyZWUsIGNhbmQtPnNlZ25vKTsKKwlrZnJlZShjYW5kKTsKK30KKwordTMyIGdldF9iZXN0X2NhbmQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGNhbmRpZGF0ZV9saXN0ICpsaXN0LCB1MzIgKmVjKQoreworCXN0cnVjdCBnY19jYW5kaWRhdGUgKmNhbmQ7CisJdTMyIHNlZ25vOworCisJQlVHX09OKGxpc3QtPmNvdW50ID09IDApOworCisJY2FuZCA9IHJiX2VudHJ5KHJiX2ZpcnN0KCZsaXN0LT5yYl90cmVlKSwgc3RydWN0IGdjX2NhbmRpZGF0ZSwgcmJfbm9kZSk7CisJcmVtb3ZlX2Zyb21fbGlzdChjYW5kKTsKKwlzZWdubyA9IGNhbmQtPnNlZ25vOworCWlmIChlYykKKwkJKmVjID0gY2FuZC0+ZXJhc2VfY291bnQ7CisJZnJlZV9jYW5kaWRhdGUoc2IsIGNhbmQpOworCXJldHVybiBzZWdubzsKK30KKworLyoKKyAqIFdlIGhhdmUgc2V2ZXJhbCBsaXN0cyB0byBtYW5hZ2Ugc2VnbWVudHMgd2l0aC4gIFRoZSByZXNlcnZlX2xpc3QgaXMgdXNlZCB0bworICogZGVhbCB3aXRoIGJhZCBibG9ja3MuICBXZSB0cnkgdG8ga2VlcCB0aGUgYmVzdCAobG93ZXN0IGVjKSBzZWdtZW50cyBvbiB0aGlzCisgKiBsaXN0LgorICogVGhlIGZyZWVfbGlzdCBjb250YWlucyBmcmVlIHNlZ21lbnRzIGZvciBub3JtYWwgdXNhZ2UuICBJdCB1c3VhbGx5IGdldHMgdGhlCisgKiBzZWNvbmQgcGljayBhZnRlciB0aGUgcmVzZXJ2ZV9saXN0LiAgQnV0IHdoZW4gdGhlIGZyZWVfbGlzdCBpcyBydW5uaW5nIHNob3J0CisgKiBpdCBpcyBtb3JlIGltcG9ydGFudCB0byBrZWVwIHRoZSBmcmVlX2xpc3QgZnVsbCB0aGFuIHRvIGtlZXAgYSByZXNlcnZlLgorICoKKyAqIFNlZ21lbnRzIHRoYXQgYXJlIG5vdCBmcmVlIGFyZSBwdXQgb250byBhIHBlci1sZXZlbCBsb3dfbGlzdC4gIElmIHdlIGhhdmUKKyAqIHRvIHJ1biBnYXJiYWdlIGNvbGxlY3Rpb24sIHdlIHBpY2sgYSBjYW5kaWRhdGUgZnJvbSB0aGVyZS4gIEFsbCBzZWdtZW50cyBvbgorICogdGhvc2UgbGlzdHMgc2hvdWxkIGhhdmUgYXQgbGVhc3Qgc29tZSBmcmVlIHNwYWNlIHNvIEdDIHdpbGwgbWFrZSBwcm9ncmVzcy4KKyAqCisgKiBBbmQgbGFzdCB3ZSBoYXZlIHRoZSBlY19saXN0LCB3aGljaCBpcyB1c2VkIHRvIHBpY2sgc2VnbWVudHMgZm9yIHdlYXIKKyAqIGxldmVsaW5nLgorICoKKyAqIElmIGFsbCBhcHByb3ByaWF0ZSBsaXN0cyBhcmUgZnVsbCwgd2Ugc2ltcGx5IGZyZWUgdGhlIGNhbmRpZGF0ZSBhbmQgZm9yZ2V0CisgKiBhYm91dCB0aGF0IHNlZ21lbnQgZm9yIGEgd2hpbGUuICBXZSBoYXZlIGJldHRlciBjYW5kaWRhdGVzIGZvciBlYWNoIHB1cnBvc2UuCisgKi8KK3N0YXRpYyB2b2lkIF9fYWRkX2NhbmRpZGF0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZ2NfY2FuZGlkYXRlICpjYW5kKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJdTMyIGZ1bGwgPSBzdXBlci0+c19zZWdzaXplIC0gTE9HRlNfU0VHTUVOVF9SRVNFUlZFOworCisJaWYgKGNhbmQtPnZhbGlkID09IDApIHsKKwkJLyogMTAwJSBmcmVlIHNlZ21lbnRzICovCisJCWxvZ19nY19ub2lzeSgiYWRkIHJlc2VydmUgc2VnbWVudCAleCAoZWMgJXgpIGF0ICVsbHhcbiIsCisJCQkJY2FuZC0+c2Vnbm8sIGNhbmQtPmVyYXNlX2NvdW50LAorCQkJCWRldl9vZnMoc2IsIGNhbmQtPnNlZ25vLCAwKSk7CisJCWNhbmQgPSBhZGRfbGlzdChjYW5kLCAmc3VwZXItPnNfcmVzZXJ2ZV9saXN0KTsKKwkJaWYgKGNhbmQpIHsKKwkJCWxvZ19nY19ub2lzeSgiYWRkIGZyZWUgc2VnbWVudCAleCAoZWMgJXgpIGF0ICVsbHhcbiIsCisJCQkJCWNhbmQtPnNlZ25vLCBjYW5kLT5lcmFzZV9jb3VudCwKKwkJCQkJZGV2X29mcyhzYiwgY2FuZC0+c2Vnbm8sIDApKTsKKwkJCWNhbmQgPSBhZGRfbGlzdChjYW5kLCAmc3VwZXItPnNfZnJlZV9saXN0KTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGdvb2QgY2FuZGlkYXRlcyBmb3IgR2FyYmFnZSBDb2xsZWN0aW9uICovCisJCWlmIChjYW5kLT52YWxpZCA8IGZ1bGwpCisJCQljYW5kID0gYWRkX2xpc3QoY2FuZCwgJnN1cGVyLT5zX2xvd19saXN0W2NhbmQtPmRpc3RdKTsKKwkJLyogZ29vZCBjYW5kaWRhdGVzIGZvciB3ZWFyIGxldmVsaW5nLAorCQkgKiBzZWdtZW50cyB0aGF0IHdlcmUgcmVjZW50bHkgd3JpdHRlbiBnZXQgaWdub3JlZCAqLworCQlpZiAoY2FuZCkKKwkJCWNhbmQgPSBhZGRfbGlzdChjYW5kLCAmc3VwZXItPnNfZWNfbGlzdCk7CisJfQorCWlmIChjYW5kKQorCQlmcmVlX2NhbmRpZGF0ZShzYiwgY2FuZCk7Cit9CisKK3N0YXRpYyBpbnQgYWRkX2NhbmRpZGF0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2Vnbm8sIHUzMiB2YWxpZCwgdTMyIGVjLAorCQl1OCBkaXN0KQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGdjX2NhbmRpZGF0ZSAqY2FuZDsKKworCWNhbmQgPSBrbWFsbG9jKHNpemVvZigqY2FuZCksIEdGUF9OT0ZTKTsKKwlpZiAoIWNhbmQpCisJCXJldHVybiAtRU5PTUVNOworCisJY2FuZC0+c2Vnbm8gPSBzZWdubzsKKwljYW5kLT52YWxpZCA9IHZhbGlkOworCWNhbmQtPmVyYXNlX2NvdW50ID0gZWM7CisJY2FuZC0+ZGlzdCA9IGRpc3Q7CisKKwlidHJlZV9pbnNlcnQzMigmc3VwZXItPnNfY2FuZF90cmVlLCBzZWdubywgY2FuZCwgR0ZQX05PRlMpOworCV9fYWRkX2NhbmRpZGF0ZShzYiwgY2FuZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHJlbW92ZV9zZWdtZW50X2Zyb21fbGlzdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlZ25vKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGdjX2NhbmRpZGF0ZSAqY2FuZDsKKworCWNhbmQgPSBidHJlZV9sb29rdXAzMigmc3VwZXItPnNfY2FuZF90cmVlLCBzZWdubyk7CisJaWYgKGNhbmQpIHsKKwkJcmVtb3ZlX2Zyb21fbGlzdChjYW5kKTsKKwkJZnJlZV9jYW5kaWRhdGUoc2IsIGNhbmQpOworCX0KK30KKworc3RhdGljIHZvaWQgc2Nhbl9zZWdtZW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzZWdubykKK3sKKwl1MzIgdmFsaWQsIGVjID0gMDsKKwlnY19sZXZlbF90IGdjX2xldmVsID0gMDsKKwl1OCBkaXN0OworCisJaWYgKHNlZ21lbnRfaXNfcmVzZXJ2ZWQoc2IsIHNlZ25vKSkKKwkJcmV0dXJuOworCisJcmVtb3ZlX3NlZ21lbnRfZnJvbV9saXN0cyhzYiwgc2Vnbm8pOworCXZhbGlkID0gbG9nZnNfdmFsaWRfYnl0ZXMoc2IsIHNlZ25vLCAmZWMsICZnY19sZXZlbCk7CisJaWYgKHZhbGlkID09IFJFU0VSVkVEKQorCQlyZXR1cm47CisKKwlkaXN0ID0gcm9vdF9kaXN0YW5jZShzYiwgZ2NfbGV2ZWwpOworCWFkZF9jYW5kaWRhdGUoc2IsIHNlZ25vLCB2YWxpZCwgZWMsIGRpc3QpOworfQorCitzdGF0aWMgc3RydWN0IGdjX2NhbmRpZGF0ZSAqZmlyc3RfaW5fbGlzdChzdHJ1Y3QgY2FuZGlkYXRlX2xpc3QgKmxpc3QpCit7CisJaWYgKGxpc3QtPmNvdW50ID09IDApCisJCXJldHVybiBOVUxMOworCXJldHVybiByYl9lbnRyeShyYl9maXJzdCgmbGlzdC0+cmJfdHJlZSksIHN0cnVjdCBnY19jYW5kaWRhdGUsIHJiX25vZGUpOworfQorCisvKgorICogRmluZCB0aGUgYmVzdCBzZWdtZW50IGZvciBnYXJiYWdlIGNvbGxlY3Rpb24uICBNYWluIGNyaXRlcmlvbiBpcworICogdGhlIHNlZ21lbnQgcmVxdWlyaW5nIHRoZSBsZWFzdCBlZmZvcnQgdG8gY2xlYW4uICBTZWNvbmRhcnkKKyAqIGNyaXRlcmlvbiBpcyB0byBHQyBvbiB0aGUgbG93ZXN0IGxldmVsIGF2YWlsYWJsZS4KKyAqCisgKiBTbyB3ZSBzZWFyY2ggdGhlIGxlYXN0IGVmZm9ydCBzZWdtZW50IG9uIHRoZSBsb3dlc3QgbGV2ZWwgZmlyc3QsCisgKiB0aGVuIG1vdmUgdXAgYW5kIHBpY2sgYW5vdGhlciBzZWdtZW50IGlmZiBpcyByZXF1aXJlcyBzaWduaWZpY2FudGx5CisgKiBsZXNzIGVmZm9ydC4gIEhlbmNlIHRoZSBMT0dGU19NQVhfT0JKRUNUU0laRSBpbiB0aGUgY29tcGFyaXNvbi4KKyAqLworc3RhdGljIHN0cnVjdCBnY19jYW5kaWRhdGUgKmdldF9jYW5kaWRhdGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCWludCBpLCBtYXhfZGlzdDsKKwlzdHJ1Y3QgZ2NfY2FuZGlkYXRlICpjYW5kID0gTlVMTCwgKnRoaXM7CisKKwltYXhfZGlzdCA9IG1pbihub19mcmVlX3NlZ21lbnRzKHNiKSwgTE9HRlNfTk9fQVJFQVMpOworCisJZm9yIChpID0gbWF4X2Rpc3Q7IGkgPj0gMDsgaS0tKSB7CisJCXRoaXMgPSBmaXJzdF9pbl9saXN0KCZzdXBlci0+c19sb3dfbGlzdFtpXSk7CisJCWlmICghdGhpcykKKwkJCWNvbnRpbnVlOworCQlpZiAoIWNhbmQpCisJCQljYW5kID0gdGhpczsKKwkJaWYgKHRoaXMtPnZhbGlkICsgTE9HRlNfTUFYX09CSkVDVFNJWkUgPD0gY2FuZC0+dmFsaWQpCisJCQljYW5kID0gdGhpczsKKwl9CisJcmV0dXJuIGNhbmQ7Cit9CisKK3N0YXRpYyBpbnQgX19sb2dmc19nY19vbmNlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBnY19jYW5kaWRhdGUgKmNhbmQpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlnY19sZXZlbF90IGdjX2xldmVsOworCXUzMiBjbGVhbmVkLCB2YWxpZCwgc2Vnbm8sIGVjOworCXU4IGRpc3Q7CisKKwlpZiAoIWNhbmQpIHsKKwkJbG9nX2djKCJHQyBhdHRlbXB0ZWQsIGJ1dCBubyBjYW5kaWRhdGUgZm91bmRcbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlzZWdubyA9IGNhbmQtPnNlZ25vOworCWRpc3QgPSBjYW5kLT5kaXN0OworCXZhbGlkID0gbG9nZnNfdmFsaWRfYnl0ZXMoc2IsIHNlZ25vLCAmZWMsICZnY19sZXZlbCk7CisJZnJlZV9jYW5kaWRhdGUoc2IsIGNhbmQpOworCWxvZ19nYygiR0Mgc2VnbWVudCAjJTAyeCBhdCAlbGx4LCAleCByZXF1aXJlZCwgJXggZnJlZSwgJXggdmFsaWQsICVsbHggZnJlZVxuIiwKKwkJCXNlZ25vLCAodTY0KXNlZ25vIDw8IHN1cGVyLT5zX3NlZ3NoaWZ0LAorCQkJZGlzdCwgbm9fZnJlZV9zZWdtZW50cyhzYiksIHZhbGlkLAorCQkJc3VwZXItPnNfZnJlZV9ieXRlcyk7CisJY2xlYW5lZCA9IGxvZ2ZzX2djX3NlZ21lbnQoc2IsIHNlZ25vLCBkaXN0KTsKKwlsb2dfZ2MoIkdDIHNlZ21lbnQgIyUwMnggY29tcGxldGUgLSBub3cgJXggdmFsaWRcbiIsIHNlZ25vLAorCQkJdmFsaWQgLSBjbGVhbmVkKTsKKwlCVUdfT04oY2xlYW5lZCAhPSB2YWxpZCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfZ2Nfb25jZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBnY19jYW5kaWRhdGUgKmNhbmQ7CisKKwljYW5kID0gZ2V0X2NhbmRpZGF0ZShzYik7CisJaWYgKGNhbmQpCisJCXJlbW92ZV9mcm9tX2xpc3QoY2FuZCk7CisJcmV0dXJuIF9fbG9nZnNfZ2Nfb25jZShzYiwgY2FuZCk7Cit9CisKKy8qIHJldHVybnMgMSBpZiBhIHdyYXAgb2NjdXJzLCAwIG90aGVyd2lzZSAqLworc3RhdGljIGludCBsb2dmc19zY2FuX3NvbWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXUzMiBzZWdubzsKKwlpbnQgaSwgcmV0ID0gMDsKKworCXNlZ25vID0gc3VwZXItPnNfc3dlZXBlcjsKKwlmb3IgKGkgPSBTQ0FOX1JBVElPOyBpID4gMDsgaS0tKSB7CisJCXNlZ25vKys7CisJCWlmIChzZWdubyA+PSBzdXBlci0+c19ub19zZWdzKSB7CisJCQlzZWdubyA9IDA7CisJCQlyZXQgPSAxOworCQkJLyogQnJlYWsgb3V0IG9mIHRoZSBsb29wLiAgV2Ugd2FudCB0byByZWFkIGEgc2luZ2xlCisJCQkgKiBibG9jayBmcm9tIHRoZSBzZWdtZW50IHNpemUgb24gbmV4dCBpbnZvY2F0aW9uIGlmCisJCQkgKiBTQ0FOX1JBVElPIGlzIHNldCB0byBtYXRjaCBibG9jayBzaXplCisJCQkgKi8KKwkJCWJyZWFrOworCQl9CisKKwkJc2Nhbl9zZWdtZW50KHNiLCBzZWdubyk7CisJfQorCXN1cGVyLT5zX3N3ZWVwZXIgPSBzZWdubzsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogSW4gcHJpbmNpcGxlLCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBsb29wIGZvcmV2ZXIsIGxvb2tpbmcgZm9yIEdDIGNhbmRpZGF0ZXMKKyAqIGFuZCBtb3ZpbmcgZGF0YS4gIExvZ0ZTIGlzIGRlc2lnbmVkIGluIHN1Y2ggYSB3YXkgdGhhdCB0aGlzIGxvb3AgaXMKKyAqIGd1YXJhbnRlZWQgdG8gdGVybWluYXRlLgorICoKKyAqIExpbWl0aW5nIHRoZSBsb29wIHRvIHNvbWUgaXRlcmF0aW9ucyBzZXJ2ZXMgcHVyZWx5IHRvIGNhdGNoIGNhc2VzIHdoZW4KKyAqIHRoZXNlIGd1YXJhbnRlZXMgaGF2ZSBmYWlsZWQuICBBbiBhY3R1YWwgZW5kbGVzcyBsb29wIGlzIGFuIG9idmlvdXMgYnVnCisgKiBhbmQgc2hvdWxkIGJlIHJlcG9ydGVkIGFzIHN1Y2guCisgKi8KK3N0YXRpYyB2b2lkIF9fbG9nZnNfZ2NfcGFzcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdGFyZ2V0KQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jazsKKwlpbnQgcm91bmQsIHByb2dyZXNzLCBsYXN0X3Byb2dyZXNzID0gMDsKKworCWlmIChub19mcmVlX3NlZ21lbnRzKHNiKSA+PSB0YXJnZXQgJiYKKwkJCXN1cGVyLT5zX25vX29iamVjdF9hbGlhc2VzIDwgTUFYX09CSl9BTElBU0VTKQorCQlyZXR1cm47CisKKwlsb2dfZ2MoIl9fbG9nZnNfZ2NfcGFzcygleClcbiIsIHRhcmdldCk7CisJZm9yIChyb3VuZCA9IDA7IHJvdW5kIDwgU0NBTl9ST1VORFM7ICkgeworCQlpZiAobm9fZnJlZV9zZWdtZW50cyhzYikgPj0gdGFyZ2V0KQorCQkJZ290byB3cml0ZV9hbGlhczsKKworCQkvKiBTeW5jIGluLW1lbW9yeSBzdGF0ZSB3aXRoIG9uLW1lZGl1bSBzdGF0ZSBpbiBjYXNlIHRoZXkKKwkJICogZGl2ZXJnZWQgKi8KKwkJbG9nZnNfd3JpdGVfYW5jaG9yKHNiKTsKKwkJcm91bmQgKz0gbG9nZnNfc2Nhbl9zb21lKHNiKTsKKwkJaWYgKG5vX2ZyZWVfc2VnbWVudHMoc2IpID49IHRhcmdldCkKKwkJCWdvdG8gd3JpdGVfYWxpYXM7CisJCXByb2dyZXNzID0gbG9nZnNfZ2Nfb25jZShzYik7CisJCWlmIChwcm9ncmVzcykKKwkJCWxhc3RfcHJvZ3Jlc3MgPSByb3VuZDsKKwkJZWxzZSBpZiAocm91bmQgLSBsYXN0X3Byb2dyZXNzID4gMikKKwkJCWJyZWFrOworCQljb250aW51ZTsKKworCQkvKgorCQkgKiBUaGUgZ290byBsb2dpYyBpcyBuYXN0eSwgSSBqdXN0IGRvbid0IGtub3cgYSBiZXR0ZXIgd2F5IHRvCisJCSAqIGNvZGUgaXQuICBHQyBpcyBzdXBwb3NlZCB0byBlbnN1cmUgdHdvIHRoaW5nczoKKwkJICogMS4gRW5vdWdoIGZyZWUgc2VnbWVudHMgYXJlIGF2YWlsYWJsZS4KKwkJICogMi4gVGhlIG51bWJlciBvZiBhbGlhc2VzIGlzIGJvdW5kZWQuCisJCSAqIFdoZW4gMS4gaXMgYWNoaWV2ZWQsIHdlIHRha2UgYSBsb29rIGF0IDIuIGFuZCB3cml0ZSBiYWNrCisJCSAqIHNvbWUgYWxpYXMtY29udGFpbmluZyBibG9ja3MsIGlmIG5lY2Vzc2FyeS4gIEhvd2V2ZXIsIGFmdGVyCisJCSAqIGVhY2ggc3VjaCB3cml0ZSB3ZSBuZWVkIHRvIGdvIGJhY2sgdG8gMS4sIGFzIHdyaXRlcyBjYW4KKwkJICogY29uc3VtZSBmcmVlIHNlZ21lbnRzLgorCQkgKi8KK3dyaXRlX2FsaWFzOgorCQlpZiAoc3VwZXItPnNfbm9fb2JqZWN0X2FsaWFzZXMgPCBNQVhfT0JKX0FMSUFTRVMpCisJCQlyZXR1cm47CisJCWlmIChsaXN0X2VtcHR5KCZzdXBlci0+c19vYmplY3RfYWxpYXMpKSB7CisJCQkvKiBBbGwgYWxpYXNlcyBhcmUgc3RpbGwgaW4gYnRyZWUgKi8KKwkJCXJldHVybjsKKwkJfQorCQlsb2dfZ2MoIldyaXRlIGJhY2sgb25lIGFsaWFzXG4iKTsKKwkJYmxvY2sgPSBsaXN0X2VudHJ5KHN1cGVyLT5zX29iamVjdF9hbGlhcy5uZXh0LAorCQkJCXN0cnVjdCBsb2dmc19ibG9jaywgYWxpYXNfbGlzdCk7CisJCWJsb2NrLT5vcHMtPndyaXRlX2Jsb2NrKGJsb2NrKTsKKwkJLyoKKwkJICogVG8gcm91bmQgb2ZmIHRoZSBuYXN0eSBnb3RvIGxvZ2ljLCB3ZSByZXNldCByb3VuZCBoZXJlLiAgSXQKKwkJICogaXMgYSBzYWZldHktbmV0IGZvciBHQyBub3QgbWFraW5nIGFueSBwcm9ncmVzcyBhbmQgbGltaXRlZAorCQkgKiB0byBzb21ldGhpbmcgcmVhc29uYWJseSBzbWFsbC4gIElmIGluY3JlbWVudGVkIGl0IGZvciBldmVyeQorCQkgKiBzaW5nbGUgYWxpYXMsIHRoZSBsb29wIGNvdWxkIHRlcm1pbmF0ZSByYXRoZXIgcXVpY2tseS4KKwkJICovCisJCXJvdW5kID0gMDsKKwl9CisJTE9HRlNfQlVHKHNiKTsKK30KKworc3RhdGljIGludCB3bF9yYXRlbGltaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0ICpuZXh0X2V2ZW50KQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisKKwlpZiAoKm5leHRfZXZlbnQgPCBzdXBlci0+c19nZWMpIHsKKwkJKm5leHRfZXZlbnQgPSBzdXBlci0+c19nZWMgKyBXTF9SQVRFTElNSVQ7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RhdGljIHZvaWQgbG9nZnNfd2xfcGFzcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGdjX2NhbmRpZGF0ZSAqd2xfY2FuZCwgKmZyZWVfY2FuZDsKKworCWlmICh3bF9yYXRlbGltaXQoc2IsICZzdXBlci0+c193bF9nZWNfb3N0b3JlKSkKKwkJcmV0dXJuOworCisJd2xfY2FuZCA9IGZpcnN0X2luX2xpc3QoJnN1cGVyLT5zX2VjX2xpc3QpOworCWlmICghd2xfY2FuZCkKKwkJcmV0dXJuOworCWZyZWVfY2FuZCA9IGZpcnN0X2luX2xpc3QoJnN1cGVyLT5zX2ZyZWVfbGlzdCk7CisJaWYgKCFmcmVlX2NhbmQpCisJCXJldHVybjsKKworCWlmICh3bF9jYW5kLT5lcmFzZV9jb3VudCA8IGZyZWVfY2FuZC0+ZXJhc2VfY291bnQgKyBXTF9ERUxUQSkgeworCQlyZW1vdmVfZnJvbV9saXN0KHdsX2NhbmQpOworCQlfX2xvZ2ZzX2djX29uY2Uoc2IsIHdsX2NhbmQpOworCX0KK30KKworLyoKKyAqIFRoZSBqb3VybmFsIG5lZWRzIHdlYXIgbGV2ZWxpbmcgYXMgd2VsbC4gIEJ1dCBtb3ZpbmcgdGhlIGpvdXJuYWwgaXMgYW4KKyAqIGV4cGVuc2l2ZSBvcGVyYXRpb24gc28gd2UgdHJ5IHRvIGF2b2lkIGl0IGFzIG11Y2ggYXMgcG9zc2libGUuICBBbmQgaWYgd2UKKyAqIGhhdmUgdG8gZG8gaXQsIHdlIG1vdmUgdGhlIHdob2xlIGpvdXJuYWwsIG5vdCBpbmRpdmlkdWFsIHNlZ21lbnRzLgorICoKKyAqIFJhdGVsaW1pdGluZyBpcyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IGhlcmUsIGl0IG1haW5seSBzZXJ2ZXMgdG8gYXZvaWQgdGhlCisgKiBjYWxjdWxhdGlvbnMuICBGaXJzdCB3ZSBjaGVjayB3aGV0aGVyIG1vdmluZyB0aGUgam91cm5hbCB3b3VsZCBiZSBhCisgKiBzaWduaWZpY2FudCBpbXByb3ZlbWVudC4gIFRoYXQgbWVhbnMgdGhhdCBhKSB0aGUgY3VycmVudCBqb3VybmFsIHNlZ21lbnRzCisgKiBoYXZlIG1vcmUgd2VhciB0aGFuIHRoZSBmdXR1cmUgam91cm5hbCBzZWdtZW50cyBhbmQgYikgdGhlIGN1cnJlbnQgam91cm5hbAorICogc2VnbWVudHMgaGF2ZSBtb3JlIHdlYXIgdGhhbiBub3JtYWwgb3N0b3JlIHNlZ21lbnRzLgorICogUmF0aW9uYWxlIGZvciBiKSBpcyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gbW92ZSB0aGUgam91cm5hbCBpZiBpdCBpcyBhZ2luZworICogbGVzcyB0aGFuIHRoZSBvc3RvcmUsIGV2ZW4gaWYgdGhlIHJlc2VydmUgc2VnbWVudHMgYWdlIGV2ZW4gbGVzcyAodGhleSBhcmUKKyAqIGV4Y2x1ZGVkIGZyb20gd2VhciBsZXZlbGluZywgYWZ0ZXIgYWxsKS4KKyAqIE5leHQgd2UgY2hlY2sgdGhhdCB0aGUgc3VwZXJibG9ja3MgaGF2ZSBsZXNzIHdlYXIgdGhhbiB0aGUgam91cm5hbC4gIFNpbmNlCisgKiBtb3ZpbmcgdGhlIGpvdXJuYWwgcmVxdWlyZXMgd3JpdGluZyB0aGUgc3VwZXJibG9ja3MsIHdlIGhhdmUgdG8gcHJvdGVjdCB0aGUKKyAqIHN1cGVyYmxvY2tzIGV2ZW4gbW9yZSB0aGFuIHRoZSBqb3VybmFsLgorICoKKyAqIEFsc28gd2UgZG91YmxlIHRoZSBhY2NlcHRhYmxlIHdlYXIgZGlmZmVyZW5jZSwgY29tcGFyZWQgdG8gb3N0b3JlIHdlYXIKKyAqIGxldmVsaW5nLiAgSm91cm5hbCBkYXRhIGlzIHJlYWQgYW5kIHJld3JpdHRlbiByYXBpZGx5LCBjb21wYXJhdGl2ZWx5LiAgU28KKyAqIHNvZnQgZXJyb3JzIGhhdmUgbXVjaCBsZXNzIHRpbWUgdG8gYWNjdW11bGF0ZSBhbmQgd2UgYWxsb3cgdGhlIGpvdXJuYWwgdG8KKyAqIGJlIGEgYml0IHdvcnNlIHRoYW4gdGhlIG9zdG9yZS4KKyAqLworc3RhdGljIHZvaWQgbG9nZnNfam91cm5hbF93bF9wYXNzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgZ2NfY2FuZGlkYXRlICpjYW5kOworCXUzMiBtaW5fam91cm5hbF9lYyA9IC0xLCBtYXhfcmVzZXJ2ZV9lYyA9IDA7CisJaW50IGk7CisKKwlpZiAod2xfcmF0ZWxpbWl0KHNiLCAmc3VwZXItPnNfd2xfZ2VjX2pvdXJuYWwpKQorCQlyZXR1cm47CisKKwlpZiAoc3VwZXItPnNfcmVzZXJ2ZV9saXN0LmNvdW50IDwgc3VwZXItPnNfbm9fam91cm5hbF9zZWdzKSB7CisJCS8qIFJlc2VydmUgaXMgbm90IGZ1bGwgZW5vdWdoIHRvIG1vdmUgY29tcGxldGUgam91cm5hbCAqLworCQlyZXR1cm47CisJfQorCisJam91cm5hbF9mb3JfZWFjaChpKQorCQlpZiAoc3VwZXItPnNfam91cm5hbF9zZWdbaV0pCisJCQltaW5fam91cm5hbF9lYyA9IG1pbihtaW5fam91cm5hbF9lYywKKwkJCQkJc3VwZXItPnNfam91cm5hbF9lY1tpXSk7CisJY2FuZCA9IHJiX2VudHJ5KHJiX2ZpcnN0KCZzdXBlci0+c19mcmVlX2xpc3QucmJfdHJlZSksCisJCQlzdHJ1Y3QgZ2NfY2FuZGlkYXRlLCByYl9ub2RlKTsKKwltYXhfcmVzZXJ2ZV9lYyA9IGNhbmQtPmVyYXNlX2NvdW50OworCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKKwkJc3RydWN0IGxvZ2ZzX3NlZ21lbnRfZW50cnkgc2U7CisJCXUzMiBzZWdubyA9IHNlZ19ubyhzYiwgc3VwZXItPnNfc2Jfb2ZzW2ldKTsKKwkJdTMyIGVjOworCisJCWxvZ2ZzX2dldF9zZWdtZW50X2VudHJ5KHNiLCBzZWdubywgJnNlKTsKKwkJZWMgPSBiZTMyX3RvX2NwdShzZS5lY19sZXZlbCkgPj4gNDsKKwkJbWF4X3Jlc2VydmVfZWMgPSBtYXgobWF4X3Jlc2VydmVfZWMsIGVjKTsKKwl9CisKKwlpZiAobWluX2pvdXJuYWxfZWMgPiBtYXhfcmVzZXJ2ZV9lYyArIDIgKiBXTF9ERUxUQSkgeworCQlkb19sb2dmc19qb3VybmFsX3dsX3Bhc3Moc2IpOworCX0KK30KKwordm9pZCBsb2dmc19nY19wYXNzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKworCS8vQlVHX09OKG11dGV4X3RyeWxvY2soJmxvZ2ZzX3N1cGVyKHNiKS0+c193X211dGV4KSk7CisJLyogV3JpdGUgam91cm5hbCBiZWZvcmUgZnJlZSBzcGFjZSBpcyBnZXR0aW5nIHNhdHVyYXRlZCB3aXRoIGRpcnR5CisJICogb2JqZWN0cy4KKwkgKi8KKwlpZiAoc3VwZXItPnNfZGlydHlfdXNlZF9ieXRlcyArIHN1cGVyLT5zX2RpcnR5X2ZyZWVfYnl0ZXMKKwkJCSsgTE9HRlNfTUFYX09CSkVDVFNJWkUgPj0gc3VwZXItPnNfZnJlZV9ieXRlcykKKwkJbG9nZnNfd3JpdGVfYW5jaG9yKHNiKTsKKwlfX2xvZ2ZzX2djX3Bhc3Moc2IsIHN1cGVyLT5zX3RvdGFsX2xldmVscyk7CisJbG9nZnNfd2xfcGFzcyhzYik7CisJbG9nZnNfam91cm5hbF93bF9wYXNzKHNiKTsKK30KKworc3RhdGljIGludCBjaGVja19hcmVhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBpKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX2FyZWEgKmFyZWEgPSBzdXBlci0+c19hcmVhW2ldOworCXN0cnVjdCBsb2dmc19vYmplY3RfaGVhZGVyIG9oOworCXUzMiBzZWdubyA9IGFyZWEtPmFfc2Vnbm87CisJdTMyIG9mcyA9IGFyZWEtPmFfdXNlZF9ieXRlczsKKwlfX2JlMzIgY3JjOworCWludCBlcnI7CisKKwlpZiAoIWFyZWEtPmFfaXNfb3BlbikKKwkJcmV0dXJuIDA7CisKKwlmb3IgKG9mcyA9IGFyZWEtPmFfdXNlZF9ieXRlczsKKwkgICAgIG9mcyA8PSBzdXBlci0+c19zZWdzaXplIC0gc2l6ZW9mKG9oKTsKKwkgICAgIG9mcyArPSAodTMyKWJlMTZfdG9fY3B1KG9oLmxlbikgKyBzaXplb2Yob2gpKSB7CisJCWVyciA9IHdidWZfcmVhZChzYiwgZGV2X29mcyhzYiwgc2Vnbm8sIG9mcyksIHNpemVvZihvaCksICZvaCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCisJCWlmICghbWVtY2hyX2ludigmb2gsIDB4ZmYsIHNpemVvZihvaCkpKQorCQkJYnJlYWs7CisKKwkJY3JjID0gbG9nZnNfY3JjMzIoJm9oLCBzaXplb2Yob2gpIC0gNCwgNCk7CisJCWlmIChjcmMgIT0gb2guY3JjKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJpbnRlcnJ1cHRlZCBoZWFkZXIgYXQgJWxseFxuIiwKKwkJCQkJZGV2X29mcyhzYiwgc2Vnbm8sIG9mcykpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJaWYgKG9mcyAhPSBhcmVhLT5hX3VzZWRfYnl0ZXMpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXggYnl0ZXMgdW5hY2NvdW50ZWQgZGF0YSBmb3VuZCBhdCAlbGx4XG4iLAorCQkJCW9mcyAtIGFyZWEtPmFfdXNlZF9ieXRlcywKKwkJCQlkZXZfb2ZzKHNiLCBzZWdubywgYXJlYS0+YV91c2VkX2J5dGVzKSk7CisJCWFyZWEtPmFfdXNlZF9ieXRlcyA9IG9mczsKKwl9CisJcmV0dXJuIDA7Cit9CisKK2ludCBsb2dmc19jaGVja19hcmVhcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWludCBpLCBlcnI7CisKKwlmb3JfZWFjaF9hcmVhKGkpIHsKKwkJZXJyID0gY2hlY2tfYXJlYShzYiwgaSk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbG9nZnNfaW5pdF9jYW5kbGlzdChzdHJ1Y3QgY2FuZGlkYXRlX2xpc3QgKmxpc3QsIGludCBtYXhjb3VudCwKKwkJaW50IHNvcnRfYnlfZWMpCit7CisJbGlzdC0+Y291bnQgPSAwOworCWxpc3QtPm1heGNvdW50ID0gbWF4Y291bnQ7CisJbGlzdC0+c29ydF9ieV9lYyA9IHNvcnRfYnlfZWM7CisJbGlzdC0+cmJfdHJlZSA9IFJCX1JPT1Q7Cit9CisKK2ludCBsb2dmc19pbml0X2djKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlpbnQgaTsKKworCWJ0cmVlX2luaXRfbWVtcG9vbDMyKCZzdXBlci0+c19jYW5kX3RyZWUsIHN1cGVyLT5zX2J0cmVlX3Bvb2wpOworCWxvZ2ZzX2luaXRfY2FuZGxpc3QoJnN1cGVyLT5zX2ZyZWVfbGlzdCwgTElTVF9TSVpFICsgU0NBTl9SQVRJTywgMSk7CisJbG9nZnNfaW5pdF9jYW5kbGlzdCgmc3VwZXItPnNfcmVzZXJ2ZV9saXN0LAorCQkJc3VwZXItPnNfYmFkX3NlZ19yZXNlcnZlLCAxKTsKKwlmb3JfZWFjaF9hcmVhKGkpCisJCWxvZ2ZzX2luaXRfY2FuZGxpc3QoJnN1cGVyLT5zX2xvd19saXN0W2ldLCBMSVNUX1NJWkUsIDApOworCWxvZ2ZzX2luaXRfY2FuZGxpc3QoJnN1cGVyLT5zX2VjX2xpc3QsIExJU1RfU0laRSwgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ2ZzX2NsZWFudXBfbGlzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQlzdHJ1Y3QgY2FuZGlkYXRlX2xpc3QgKmxpc3QpCit7CisJc3RydWN0IGdjX2NhbmRpZGF0ZSAqY2FuZDsKKworCXdoaWxlIChsaXN0LT5jb3VudCkgeworCQljYW5kID0gcmJfZW50cnkobGlzdC0+cmJfdHJlZS5yYl9ub2RlLCBzdHJ1Y3QgZ2NfY2FuZGlkYXRlLAorCQkJCXJiX25vZGUpOworCQlyZW1vdmVfZnJvbV9saXN0KGNhbmQpOworCQlmcmVlX2NhbmRpZGF0ZShzYiwgY2FuZCk7CisJfQorCUJVR19PTihsaXN0LT5yYl90cmVlLnJiX25vZGUpOworfQorCit2b2lkIGxvZ2ZzX2NsZWFudXBfZ2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCWludCBpOworCisJaWYgKCFzdXBlci0+c19mcmVlX2xpc3QuY291bnQpCisJCXJldHVybjsKKworCS8qCisJICogRklYTUU6IFRoZSBidHJlZSBtYXkgc3RpbGwgY29udGFpbiBhIHNpbmdsZSBlbXB0eSBub2RlLiAgU28gd2UKKwkgKiBjYWxsIHRoZSBncmltIHZpc2l0b3IgdG8gY2xlYW4gdXAgdGhhdCBtZXNzLiAgQnRyZWUgY29kZSBzaG91bGQKKwkgKiBkbyBpdCBmb3IgdXMsIHJlYWxseS4KKwkgKi8KKwlidHJlZV9ncmltX3Zpc2l0b3IzMigmc3VwZXItPnNfY2FuZF90cmVlLCAwLCBOVUxMKTsKKwlsb2dmc19jbGVhbnVwX2xpc3Qoc2IsICZzdXBlci0+c19mcmVlX2xpc3QpOworCWxvZ2ZzX2NsZWFudXBfbGlzdChzYiwgJnN1cGVyLT5zX3Jlc2VydmVfbGlzdCk7CisJZm9yX2VhY2hfYXJlYShpKQorCQlsb2dmc19jbGVhbnVwX2xpc3Qoc2IsICZzdXBlci0+c19sb3dfbGlzdFtpXSk7CisJbG9nZnNfY2xlYW51cF9saXN0KHNiLCAmc3VwZXItPnNfZWNfbGlzdCk7Cit9CmRpZmYgLS1naXQgYS9mcy9sb2dmcy9pbm9kZS5jIGIvZnMvbG9nZnMvaW5vZGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2VjMWFlCi0tLSAvZGV2L251bGwKKysrIGIvZnMvbG9nZnMvaW5vZGUuYwpAQCAtMCwwICsxLDQxNyBAQAorLyoKKyAqIGZzL2xvZ2ZzL2lub2RlLmMJLSBpbm9kZSBoYW5kbGluZyBjb2RlCisgKgorICogQXMgc2hvdWxkIGJlIG9idmlvdXMgZm9yIExpbnV4IGtlcm5lbCBjb2RlLCBsaWNlbnNlIGlzIEdQTHYyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDggSm9lcm4gRW5nZWwgPGpvZXJuQGxvZ2ZzLm9yZz4KKyAqLworI2luY2x1ZGUgImxvZ2ZzLmgiCisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KKworLyoKKyAqIEhvdyBzb29uIHRvIHJldXNlIG9sZCBpbm9kZSBudW1iZXJzPyAgTG9nRlMgZG9lc24ndCBzdG9yZSBkZWxldGVkIGlub2RlcworICogb24gdGhlIG1lZGl1bS4gIEl0IHRoZXJlZm9yZSBhbHNvIGxhY2tzIGEgbWV0aG9kIHRvIHN0b3JlIHRoZSBwcmV2aW91cworICogZ2VuZXJhdGlvbiBudW1iZXIgZm9yIGRlbGV0ZWQgaW5vZGVzLiAgSW5zdGVhZCBhIHNpbmdsZSBnZW5lcmF0aW9uIG51bWJlcgorICogaXMgc3RvcmVkIHdoaWNoIHdpbGwgYmUgdXNlZCBmb3IgbmV3IGlub2Rlcy4gIEJlaW5nIGp1c3QgYSAzMmJpdCBjb3VudGVyLAorICogdGhpcyBjYW4gb2J2aW91cyB3cmFwIHJlbGF0aXZlbHkgcXVpY2tseS4gIFNvIHdlIG9ubHkgcmV1c2UgaW5vZGVzIGlmIHdlCisgKiBrbm93IHRoYXQgYSBmYWlyIG51bWJlciBvZiBpbm9kZXMgY2FuIGJlIGNyZWF0ZWQgYmVmb3JlIHdlIGhhdmUgdG8gaW5jcmVtZW50CisgKiB0aGUgZ2VuZXJhdGlvbiBhZ2FpbiAtIGVmZmVjdGl2ZWx5IGFkZGluZyBzb21lIGJpdHMgdG8gdGhlIGNvdW50ZXIuCisgKiBCdXQgYmVpbmcgdG9vIGFnZ3Jlc3NpdmUgaGVyZSBtZWFucyB3ZSBrZWVwIGEgdmVyeSBsYXJnZSBhbmQgdmVyeSBzcGFyc2UKKyAqIGlub2RlIGZpbGUsIHdhc3Rpbmcgc3BhY2Ugb24gaW5kaXJlY3QgYmxvY2tzLgorICogU28gd2hhdCBpcyBhIGdvb2QgdmFsdWU/ICBCZWF0cyBtZS4gIDY0ayBzZWVtcyBtb2RlcmF0ZWx5IGJhZCBvbiBib3RoCisgKiBmcm9udHMsIHNvIGxldCdzIHVzZSB0aGF0IGZvciBub3cuLi4KKyAqCisgKiBORlMgc3Vja3MsIGFzIGV2ZXJ5b25lIGFscmVhZHkga25vd3MuCisgKi8KKyNkZWZpbmUgSU5PU19QRVJfV1JBUCAoMHgxMDAwMCkKKworLyoKKyAqIExvZ2ZzJyByZXF1aXJlbWVudCB0byByZWFkIGlub2RlcyBmb3IgZ2FyYmFnZSBjb2xsZWN0aW9uIG1ha2VzIGxpZmUgYSBiaXQKKyAqIGhhcmRlci4gIEdDIG1heSBoYXZlIHRvIHJlYWQgaW5vZGVzIHRoYXQgYXJlIGluIElfRlJFRUlORyBzdGF0ZSwgd2hlbiB0aGV5CisgKiBhcmUgYmVpbmcgd3JpdHRlbiBvdXQgLSBhbmQgd2FpdGluZyBmb3IgR0MgdG8gbWFrZSBwcm9ncmVzcywgbmF0dXJhbGx5LgorICoKKyAqIFNvIHdlIGNhbm5vdCBqdXN0IGNhbGwgaWdldCgpIG9yIHNvbWUgdmFyaWFudCBvZiBpdCwgYnV0IGZpcnN0IGhhdmUgdG8gY2hlY2sKKyAqIHdldGhlciB0aGUgaW5vZGUgaW4gcXVlc3Rpb24gbWlnaHQgYmUgaW4gSV9GUkVFSU5HIHN0YXRlLiAgVGhlcmVmb3JlIHdlCisgKiBtYWludGFpbiBvdXIgb3duIHBlci1zYiBsaXN0IG9mICJhbG1vc3QgZGVsZXRlZCIgaW5vZGVzIGFuZCBjaGVjayBhZ2FpbnN0CisgKiB0aGF0IGxpc3QgZmlyc3QuICBOb3JtYWxseSB0aGlzIHNob3VsZCBiZSBhdCBtb3N0IDEtMiBlbnRyaWVzIGxvbmcuCisgKgorICogQWxzbywgaW5vZGVzIGhhdmUgbG9nZnMtc3BlY2lmaWMgcmVmZXJlbmNlIGNvdW50aW5nIG9uIHRvcCBvZiB3aGF0IHRoZSB2ZnMKKyAqIGRvZXMuICBXaGVuIC5kZXN0cm95X2lub2RlIGlzIGNhbGxlZCwgbm9ybWFsbHkgdGhlIHJlZmVyZW5jZSBjb3VudCB3aWxsIGRyb3AKKyAqIHRvIHplcm8gYW5kIHRoZSBpbm9kZSBnZXRzIGRlbGV0ZWQuICBCdXQgaWYgR0MgYWNjZXNzZWQgdGhlIGlub2RlLCBpdHMKKyAqIHJlZmNvdW50IHdpbGwgcmVtYWluIG5vbnplcm8gYW5kIGZpbmFsIGRlbGV0aW9uIHdpbGwgaGF2ZSB0byB3YWl0LgorICoKKyAqIEFzIGEgcmVzdWx0IHdlIGhhdmUgdHdvIHNldHMgb2YgZnVuY3Rpb25zIHRvIGdldC9wdXQgaW5vZGVzOgorICogbG9nZnNfc2FmZV9pZ2V0L2xvZ2ZzX3NhZmVfaXB1dAktIHNhZmUgdG8gY2FsbCBmcm9tIEdDIGNvbnRleHQKKyAqIGxvZ2ZzX2lnZXQvaXB1dAkJCS0gbm9ybWFsIHZlcnNpb24KKyAqLworc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpsb2dmc19pbm9kZV9jYWNoZTsKKworc3RhdGljIERFRklORV9TUElOTE9DSyhsb2dmc19pbm9kZV9sb2NrKTsKKworc3RhdGljIHZvaWQgbG9nZnNfaW5vZGVfc2V0b3BzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3dpdGNoIChpbm9kZS0+aV9tb2RlICYgU19JRk1UKSB7CisJY2FzZSBTX0lGRElSOgorCQlpbm9kZS0+aV9vcCA9ICZsb2dmc19kaXJfaW9wczsKKwkJaW5vZGUtPmlfZm9wID0gJmxvZ2ZzX2Rpcl9mb3BzOworCQlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZsb2dmc19yZWdfYW9wczsKKwkJYnJlYWs7CisJY2FzZSBTX0lGUkVHOgorCQlpbm9kZS0+aV9vcCA9ICZsb2dmc19yZWdfaW9wczsKKwkJaW5vZGUtPmlfZm9wID0gJmxvZ2ZzX3JlZ19mb3BzOworCQlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZsb2dmc19yZWdfYW9wczsKKwkJYnJlYWs7CisJY2FzZSBTX0lGTE5LOgorCQlpbm9kZS0+aV9vcCA9ICZsb2dmc19zeW1saW5rX2lvcHM7CisJCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJmxvZ2ZzX3JlZ19hb3BzOworCQlicmVhazsKKwljYXNlIFNfSUZTT0NLOgkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNfSUZCTEs6CS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU19JRkNIUjoJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTX0lGSUZPOgorCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsIGlub2RlLT5pX3JkZXYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaW5vZGUgKl9fbG9nZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbm9fdCBpbm8pCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGlnZXRfbG9ja2VkKHNiLCBpbm8pOworCWludCBlcnI7CisKKwlpZiAoIWlub2RlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlpZiAoIShpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKSkKKwkJcmV0dXJuIGlub2RlOworCisJZXJyID0gbG9nZnNfcmVhZF9pbm9kZShpbm9kZSk7CisJaWYgKGVyciB8fCBpbm9kZS0+aV9ubGluayA9PSAwKSB7CisJCS8qIGlub2RlLT5pX25saW5rID09IDAgY2FuIGJlIHRydWUgd2hlbiBjYWxsZWQgZnJvbQorCQkgKiBibG9jayB2YWxpZGF0b3IgKi8KKwkJLyogc2V0IGlfbmxpbmsgdG8gMCB0byBwcmV2ZW50IGNhY2hpbmcgKi8KKwkJaW5vZGUtPmlfbmxpbmsgPSAwOworCQlsb2dmc19pbm9kZShpbm9kZSktPmxpX2ZsYWdzIHw9IExPR0ZTX0lGX1pPTUJJRTsKKwkJaWdldF9mYWlsZWQoaW5vZGUpOworCQlpZiAoIWVycikKKwkJCWVyciA9IC1FTk9FTlQ7CisJCXJldHVybiBFUlJfUFRSKGVycik7CisJfQorCisJbG9nZnNfaW5vZGVfc2V0b3BzKGlub2RlKTsKKwl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKKwlyZXR1cm4gaW5vZGU7Cit9CisKK3N0cnVjdCBpbm9kZSAqbG9nZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbm9fdCBpbm8pCit7CisJQlVHX09OKGlubyA9PSBMT0dGU19JTk9fTUFTVEVSKTsKKwlCVUdfT04oaW5vID09IExPR0ZTX0lOT19TRUdGSUxFKTsKKwlyZXR1cm4gX19sb2dmc19pZ2V0KHNiLCBpbm8pOworfQorCisvKgorICogaXNfY2FjaGVkIGlzIHNldCB0byAxIGlmIHdlIGhhbmQgb3V0IGEgY2FjaGVkIGlub2RlLCAwIG90aGVyd2lzZS4KKyAqIHRoaXMgYWxsb3dzIGxvZ2ZzX2lwdXQgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIGxhdGVyCisgKi8KK3N0cnVjdCBpbm9kZSAqbG9nZnNfc2FmZV9pZ2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGlub190IGlubywgaW50ICppc19jYWNoZWQpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpOworCisJaWYgKGlubyA9PSBMT0dGU19JTk9fTUFTVEVSKQorCQlyZXR1cm4gc3VwZXItPnNfbWFzdGVyX2lub2RlOworCWlmIChpbm8gPT0gTE9HRlNfSU5PX1NFR0ZJTEUpCisJCXJldHVybiBzdXBlci0+c19zZWdmaWxlX2lub2RlOworCisJc3Bpbl9sb2NrKCZsb2dmc19pbm9kZV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxpLCAmc3VwZXItPnNfZnJlZWluZ19saXN0LCBsaV9mcmVlaW5nX2xpc3QpCisJCWlmIChsaS0+dmZzX2lub2RlLmlfaW5vID09IGlubykgeworCQkJbGktPmxpX3JlZmNvdW50Kys7CisJCQlzcGluX3VubG9jaygmbG9nZnNfaW5vZGVfbG9jayk7CisJCQkqaXNfY2FjaGVkID0gMTsKKwkJCXJldHVybiAmbGktPnZmc19pbm9kZTsKKwkJfQorCXNwaW5fdW5sb2NrKCZsb2dmc19pbm9kZV9sb2NrKTsKKworCSppc19jYWNoZWQgPSAwOworCXJldHVybiBfX2xvZ2ZzX2lnZXQoc2IsIGlubyk7Cit9CisKK3N0YXRpYyB2b2lkIF9fbG9nZnNfZGVzdHJveV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisKKwlCVUdfT04obGktPmxpX2Jsb2NrKTsKKwlsaXN0X2RlbCgmbGktPmxpX2ZyZWVpbmdfbGlzdCk7CisJa21lbV9jYWNoZV9mcmVlKGxvZ2ZzX2lub2RlX2NhY2hlLCBsaSk7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ2ZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCisJQlVHX09OKGxpc3RfZW1wdHkoJmxpLT5saV9mcmVlaW5nX2xpc3QpKTsKKwlzcGluX2xvY2soJmxvZ2ZzX2lub2RlX2xvY2spOworCWxpLT5saV9yZWZjb3VudC0tOworCWlmIChsaS0+bGlfcmVmY291bnQgPT0gMCkKKwkJX19sb2dmc19kZXN0cm95X2lub2RlKGlub2RlKTsKKwlzcGluX3VubG9jaygmbG9nZnNfaW5vZGVfbG9jayk7Cit9CisKK3ZvaWQgbG9nZnNfc2FmZV9pcHV0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBpc19jYWNoZWQpCit7CisJaWYgKGlub2RlLT5pX2lubyA9PSBMT0dGU19JTk9fTUFTVEVSKQorCQlyZXR1cm47CisJaWYgKGlub2RlLT5pX2lubyA9PSBMT0dGU19JTk9fU0VHRklMRSkKKwkJcmV0dXJuOworCisJaWYgKGlzX2NhY2hlZCkgeworCQlsb2dmc19kZXN0cm95X2lub2RlKGlub2RlKTsKKwkJcmV0dXJuOworCX0KKworCWlwdXQoaW5vZGUpOworfQorCitzdGF0aWMgdm9pZCBsb2dmc19pbml0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwlpbnQgaTsKKworCWxpLT5saV9mbGFncwk9IDA7CisJbGktPmxpX2hlaWdodAk9IDA7CisJbGktPmxpX3VzZWRfYnl0ZXMgPSAwOworCWxpLT5saV9ibG9jawk9IE5VTEw7CisJaW5vZGUtPmlfdWlkCT0gMDsKKwlpbm9kZS0+aV9naWQJPSAwOworCWlub2RlLT5pX3NpemUJPSAwOworCWlub2RlLT5pX2Jsb2Nrcwk9IDA7CisJaW5vZGUtPmlfY3RpbWUJPSBDVVJSRU5UX1RJTUU7CisJaW5vZGUtPmlfbXRpbWUJPSBDVVJSRU5UX1RJTUU7CisJaW5vZGUtPmlfbmxpbmsJPSAxOworCUlOSVRfTElTVF9IRUFEKCZsaS0+bGlfZnJlZWluZ19saXN0KTsKKworCWZvciAoaSA9IDA7IGkgPCBMT0dGU19FTUJFRERFRF9GSUVMRFM7IGkrKykKKwkJbGktPmxpX2RhdGFbaV0gPSAwOworCisJcmV0dXJuOworfQorCitzdGF0aWMgc3RydWN0IGlub2RlICpsb2dmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGk7CisKKwlsaSA9IGttZW1fY2FjaGVfYWxsb2MobG9nZnNfaW5vZGVfY2FjaGUsIEdGUF9OT0ZTKTsKKwlpZiAoIWxpKQorCQlyZXR1cm4gTlVMTDsKKwlsb2dmc19pbml0X2lub2RlKHNiLCAmbGktPnZmc19pbm9kZSk7CisJcmV0dXJuICZsaS0+dmZzX2lub2RlOworfQorCisvKgorICogSW4gbG9nZnMgaW5vZGVzIGFyZSB3cml0dGVuIHRvIGFuIGlub2RlIGZpbGUuICBUaGUgaW5vZGUgZmlsZSwgbGlrZSBhbnkKKyAqIG90aGVyIGZpbGUsIGlzIG1hbmFnZWQgd2l0aCBhIGlub2RlLiAgVGhlIGlub2RlIGZpbGUncyBpbm9kZSwgYWthIG1hc3RlcgorICogaW5vZGUsIHJlcXVpcmVzIHNwZWNpYWwgaGFuZGxpbmcgaW4gc2V2ZXJhbCByZXNwZWN0cy4gIEZpcnN0LCBpdCBjYW5ub3QgYmUKKyAqIHdyaXR0ZW4gdG8gdGhlIGlub2RlIGZpbGUsIHNvIGl0IGlzIHN0b3JlZCBpbiB0aGUgam91cm5hbCBpbnN0ZWFkLgorICoKKyAqIFNlY29uZGx5LCB0aGlzIGlub2RlIGNhbm5vdCBiZSB3cml0dGVuIGJhY2sgYW5kIGRlc3Ryb3llZCBiZWZvcmUgYWxsIG90aGVyCisgKiBpbm9kZXMgaGF2ZSBiZWVuIHdyaXR0ZW4uICBUaGUgb3JkZXJpbmcgaXMgaW1wb3J0YW50LiAgTGludXgnIFZGUyBpcyBoYXBwaWx5CisgKiB1bmF3YXJlIG9mIHRoZSBvcmRlcmluZyBjb25zdHJhaW50IGFuZCB3b3VsZCBvcmRpbmFyaWx5IGRlc3Ryb3kgdGhlIG1hc3RlcgorICogaW5vZGUgYXQgdW1vdW50IHRpbWUgd2hpbGUgb3RoZXIgaW5vZGVzIGFyZSBzdGlsbCBpbiB1c2UgYW5kIGRpcnR5LiAgTm90CisgKiBnb29kLgorICoKKyAqIFNvIGxvZ2ZzIG1ha2VzIHN1cmUgdGhlIG1hc3RlciBpbm9kZSBpcyBub3Qgd3JpdHRlbiB1bnRpbCBhbGwgb3RoZXIgaW5vZGVzCisgKiBoYXZlIGJlZW4gZGVzdHJveWVkLiAgU2FkbHksIHRoaXMgbWV0aG9kIGhhcyBhbm90aGVyIHNpZGUtZWZmZWN0LiAgVGhlIFZGUworICogd2lsbCBub3RpY2Ugb25lIHJlbWFpbmluZyBpbm9kZSBhbmQgcHJpbnQgYSBmcmlnaHRlbmluZyB3YXJuaW5nIG1lc3NhZ2UuCisgKiBXb3JzZSwgaXQgaXMgaW1wb3NzaWJsZSB0byBqdWRnZSB3aGV0aGVyIHN1Y2ggYSB3YXJuaW5nIHdhcyBjYXVzZWQgYnkgdGhlCisgKiBtYXN0ZXIgaW5vZGUgb3IgYW55IG90aGVyIGlub2RlcyBoYXZlIGxlYWtlZCBhcyB3ZWxsLgorICoKKyAqIE91ciBhdHRlbXB0IG9mIHNvbHZpbmcgdGhpcyBpcyB3aXRoIGxvZ2ZzX25ld19tZXRhX2lub2RlKCkgYmVsb3cuICBJdHMKKyAqIHB1cnBvc2UgaXMgdG8gY3JlYXRlIGEgbmV3IGlub2RlIHRoYXQgd2lsbCBub3QgdHJpZ2dlciB0aGUgd2FybmluZyBpZiBzdWNoCisgKiBhbiBpbm9kZSBpcyBzdGlsbCBpbiB1c2UuICBBbiB1Z2x5IGhhY2ssIG5vIGRvdWJ0LiAgU3VnZ2VjdGlvbnMgZm9yCisgKiBpbXByb3ZlbWVudCBhcmUgd2VsY29tZS4KKyAqLworc3RydWN0IGlub2RlICpsb2dmc19uZXdfbWV0YV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgaW5vKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpbm9kZSA9IGxvZ2ZzX2FsbG9jX2lub2RlKHNiKTsKKwlpZiAoIWlub2RlKQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWlub2RlLT5pX21vZGUgPSBTX0lGUkVHOworCWlub2RlLT5pX2lubyA9IGlubzsKKwlpbm9kZS0+aV9zYiA9IHNiOworCisJLyogVGhpcyBpcyBhIGJsYXRhbnQgY29weSBvZiBhbGxvY19pbm9kZSBjb2RlLiAgV2UnZCBuZWVkIGFsbG9jX2lub2RlCisJICogdG8gYmUgbm9uc3RhdGljLCBhbGFzLiAqLworCXsKKwkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiBjb25zdCBtYXBwaW5nID0gJmlub2RlLT5pX2RhdGE7CisKKwkJbWFwcGluZy0+YV9vcHMgPSAmbG9nZnNfcmVnX2FvcHM7CisJCW1hcHBpbmctPmhvc3QgPSBpbm9kZTsKKwkJbWFwcGluZy0+ZmxhZ3MgPSAwOworCQltYXBwaW5nX3NldF9nZnBfbWFzayhtYXBwaW5nLCBHRlBfTk9GUyk7CisJCW1hcHBpbmctPmFzc29jX21hcHBpbmcgPSBOVUxMOworCQltYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvID0gJmRlZmF1bHRfYmFja2luZ19kZXZfaW5mbzsKKwkJaW5vZGUtPmlfbWFwcGluZyA9IG1hcHBpbmc7CisJCWlub2RlLT5pX25saW5rID0gMTsKKwl9CisKKwlyZXR1cm4gaW5vZGU7Cit9CisKK3N0cnVjdCBpbm9kZSAqbG9nZnNfcmVhZF9tZXRhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBpbm8pCit7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlpbnQgZXJyOworCisJaW5vZGUgPSBsb2dmc19uZXdfbWV0YV9pbm9kZShzYiwgaW5vKTsKKwlpZiAoSVNfRVJSKGlub2RlKSkKKwkJcmV0dXJuIGlub2RlOworCisJZXJyID0gbG9nZnNfcmVhZF9pbm9kZShpbm9kZSk7CisJaWYgKGVycikgeworCQlkZXN0cm95X21ldGFfaW5vZGUoaW5vZGUpOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KKwlsb2dmc19pbm9kZV9zZXRvcHMoaW5vZGUpOworCXJldHVybiBpbm9kZTsKK30KKworc3RhdGljIGludCBsb2dmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKK3sKKwlpbnQgcmV0OworCWxvbmcgZmxhZ3MgPSBXRl9MT0NLOworCisJLyogQ2FuIG9ubHkgaGFwcGVuIGlmIGNyZWF0KCkgZmFpbGVkLiAgU2FmZSB0byBza2lwLiAqLworCWlmIChsb2dmc19pbm9kZShpbm9kZSktPmxpX2ZsYWdzICYgTE9HRlNfSUZfU1RJTExCT1JOKQorCQlyZXR1cm4gMDsKKworCXJldCA9IF9fbG9nZnNfd3JpdGVfaW5vZGUoaW5vZGUsIGZsYWdzKTsKKwlMT0dGU19CVUdfT04ocmV0LCBpbm9kZS0+aV9zYik7CisJcmV0dXJuIHJldDsKK30KKwordm9pZCBkZXN0cm95X21ldGFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlpZiAoaW5vZGUpIHsKKwkJaWYgKGlub2RlLT5pX2RhdGEubnJwYWdlcykKKwkJCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKKwkJbG9nZnNfY2xlYXJfaW5vZGUoaW5vZGUpOworCQlrbWVtX2NhY2hlX2ZyZWUobG9nZnNfaW5vZGVfY2FjaGUsIGxvZ2ZzX2lub2RlKGlub2RlKSk7CisJfQorfQorCisvKiBjYWxsZWQgd2l0aCBpbm9kZV9sb2NrIGhlbGQgKi8KK3N0YXRpYyB2b2lkIGxvZ2ZzX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisKKwlzcGluX2xvY2soJmxvZ2ZzX2lub2RlX2xvY2spOworCWxpc3RfbW92ZSgmbGktPmxpX2ZyZWVpbmdfbGlzdCwgJnN1cGVyLT5zX2ZyZWVpbmdfbGlzdCk7CisJc3Bpbl91bmxvY2soJmxvZ2ZzX2lub2RlX2xvY2spOworCWdlbmVyaWNfZHJvcF9pbm9kZShpbm9kZSk7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ2ZzX3NldF9pbm9fZ2VuZXJhdGlvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJdTY0IGlubzsKKworCW11dGV4X2xvY2soJnN1cGVyLT5zX2pvdXJuYWxfbXV0ZXgpOworCWlubyA9IGxvZ2ZzX3NlZWtfaG9sZShzdXBlci0+c19tYXN0ZXJfaW5vZGUsIHN1cGVyLT5zX2xhc3RfaW5vKTsKKwlzdXBlci0+c19sYXN0X2lubyA9IGlubzsKKwlzdXBlci0+c19pbm9zX3RpbGxfd3JhcC0tOworCWlmIChzdXBlci0+c19pbm9zX3RpbGxfd3JhcCA8IDApIHsKKwkJc3VwZXItPnNfbGFzdF9pbm8gPSBMT0dGU19SRVNFUlZFRF9JTk9TOworCQlzdXBlci0+c19nZW5lcmF0aW9uKys7CisJCXN1cGVyLT5zX2lub3NfdGlsbF93cmFwID0gSU5PU19QRVJfV1JBUDsKKwl9CisJaW5vZGUtPmlfaW5vID0gaW5vOworCWlub2RlLT5pX2dlbmVyYXRpb24gPSBzdXBlci0+c19nZW5lcmF0aW9uOworCW11dGV4X3VubG9jaygmc3VwZXItPnNfam91cm5hbF9tdXRleCk7Cit9CisKK3N0cnVjdCBpbm9kZSAqbG9nZnNfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBpbnQgbW9kZSkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLT5pX3NiOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpbm9kZSA9IG5ld19pbm9kZShzYik7CisJaWYgKCFpbm9kZSkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlsb2dmc19pbml0X2lub2RlKHNiLCBpbm9kZSk7CisKKwkvKiBpbmhlcml0IHBhcmVudCBmbGFncyAqLworCWxvZ2ZzX2lub2RlKGlub2RlKS0+bGlfZmxhZ3MgfD0KKwkJbG9nZnNfaW5vZGUoZGlyKS0+bGlfZmxhZ3MgJiBMT0dGU19GTF9JTkhFUklURUQ7CisKKwlpbm9kZS0+aV9tb2RlID0gbW9kZTsKKwlsb2dmc19zZXRfaW5vX2dlbmVyYXRpb24oc2IsIGlub2RlKTsKKworCWlub2RlLT5pX3VpZCA9IGN1cnJlbnRfZnN1aWQoKTsKKwlpbm9kZS0+aV9naWQgPSBjdXJyZW50X2ZzZ2lkKCk7CisJaWYgKGRpci0+aV9tb2RlICYgU19JU0dJRCkgeworCQlpbm9kZS0+aV9naWQgPSBkaXItPmlfZ2lkOworCQlpZiAoU19JU0RJUihtb2RlKSkKKwkJCWlub2RlLT5pX21vZGUgfD0gU19JU0dJRDsKKwl9CisKKwlsb2dmc19pbm9kZV9zZXRvcHMoaW5vZGUpOworCWluc2VydF9pbm9kZV9oYXNoKGlub2RlKTsKKworCXJldHVybiBpbm9kZTsKK30KKworc3RhdGljIHZvaWQgbG9nZnNfaW5pdF9vbmNlKHZvaWQgKl9saSkKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gX2xpOworCWludCBpOworCisJbGktPmxpX2ZsYWdzID0gMDsKKwlsaS0+bGlfdXNlZF9ieXRlcyA9IDA7CisJbGktPmxpX3JlZmNvdW50ID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgTE9HRlNfRU1CRURERURfRklFTERTOyBpKyspCisJCWxpLT5saV9kYXRhW2ldID0gMDsKKwlpbm9kZV9pbml0X29uY2UoJmxpLT52ZnNfaW5vZGUpOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3N5bmNfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHdhaXQpCit7CisJLyogRklYTUU6IHdyaXRlIGFuY2hvciAqLworCWxvZ2ZzX3N1cGVyKHNiKS0+c19kZXZvcHMtPnN5bmMoc2IpOworCXJldHVybiAwOworfQorCitjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBsb2dmc19zdXBlcl9vcGVyYXRpb25zID0geworCS5hbGxvY19pbm9kZQk9IGxvZ2ZzX2FsbG9jX2lub2RlLAorCS5jbGVhcl9pbm9kZQk9IGxvZ2ZzX2NsZWFyX2lub2RlLAorCS5kZWxldGVfaW5vZGUJPSBsb2dmc19kZWxldGVfaW5vZGUsCisJLmRlc3Ryb3lfaW5vZGUJPSBsb2dmc19kZXN0cm95X2lub2RlLAorCS5kcm9wX2lub2RlCT0gbG9nZnNfZHJvcF9pbm9kZSwKKwkud3JpdGVfaW5vZGUJPSBsb2dmc193cml0ZV9pbm9kZSwKKwkuc3RhdGZzCQk9IGxvZ2ZzX3N0YXRmcywKKwkuc3luY19mcwk9IGxvZ2ZzX3N5bmNfZnMsCit9OworCitpbnQgbG9nZnNfaW5pdF9pbm9kZV9jYWNoZSh2b2lkKQoreworCWxvZ2ZzX2lub2RlX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImxvZ2ZzX2lub2RlX2NhY2hlIiwKKwkJCXNpemVvZihzdHJ1Y3QgbG9nZnNfaW5vZGUpLCAwLCBTTEFCX1JFQ0xBSU1fQUNDT1VOVCwKKwkJCWxvZ2ZzX2luaXRfb25jZSk7CisJaWYgKCFsb2dmc19pbm9kZV9jYWNoZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgbG9nZnNfZGVzdHJveV9pbm9kZV9jYWNoZSh2b2lkKQoreworCWttZW1fY2FjaGVfZGVzdHJveShsb2dmc19pbm9kZV9jYWNoZSk7Cit9CmRpZmYgLS1naXQgYS9mcy9sb2dmcy9qb3VybmFsLmMgYi9mcy9sb2dmcy9qb3VybmFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFkMzBhNAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2xvZ2ZzL2pvdXJuYWwuYwpAQCAtMCwwICsxLDg4MyBAQAorLyoKKyAqIGZzL2xvZ2ZzL2pvdXJuYWwuYwktIGpvdXJuYWwgaGFuZGxpbmcgY29kZQorICoKKyAqIEFzIHNob3VsZCBiZSBvYnZpb3VzIGZvciBMaW51eCBrZXJuZWwgY29kZSwgbGljZW5zZSBpcyBHUEx2MgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA4IEpvZXJuIEVuZ2VsIDxqb2VybkBsb2dmcy5vcmc+CisgKi8KKyNpbmNsdWRlICJsb2dmcy5oIgorCitzdGF0aWMgdm9pZCBsb2dmc19jYWxjX2ZyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXU2NCByZXNlcnZlLCBub19zZWdzID0gc3VwZXItPnNfbm9fc2VnczsKKwlzNjQgZnJlZTsKKwlpbnQgaTsKKworCS8qIHN1cGVyYmxvY2sgc2VnbWVudHMgKi8KKwlub19zZWdzIC09IDI7CisJc3VwZXItPnNfbm9fam91cm5hbF9zZWdzID0gMDsKKwkvKiBqb3VybmFsICovCisJam91cm5hbF9mb3JfZWFjaChpKQorCQlpZiAoc3VwZXItPnNfam91cm5hbF9zZWdbaV0pIHsKKwkJCW5vX3NlZ3MtLTsKKwkJCXN1cGVyLT5zX25vX2pvdXJuYWxfc2VncysrOworCQl9CisKKwkvKiBvcGVuIHNlZ21lbnRzIHBsdXMgb25lIGV4dHJhIHBlciBsZXZlbCBmb3IgR0MgKi8KKwlub19zZWdzIC09IDIgKiBzdXBlci0+c190b3RhbF9sZXZlbHM7CisKKwlmcmVlID0gbm9fc2VncyAqIChzdXBlci0+c19zZWdzaXplIC0gTE9HRlNfU0VHTUVOVF9SRVNFUlZFKTsKKwlmcmVlIC09IHN1cGVyLT5zX3VzZWRfYnl0ZXM7CisJLyoganVzdCBhIGJpdCBleHRyYSAqLworCWZyZWUgLT0gc3VwZXItPnNfdG90YWxfbGV2ZWxzICogNDA5NjsKKworCS8qIEJhZCBibG9ja3MgYXJlICdwYWlkJyBmb3Igd2l0aCBzcGVlZCByZXNlcnZlIC0gdGhlIGZpbGVzeXN0ZW0KKwkgKiBzaW1wbHkgZ2V0cyBzbG93ZXIgYXMgYmFkIGJsb2NrcyBhY2N1bXVsYXRlLiAgVW50aWwgdGhlIGJhZCBibG9ja3MKKwkgKiBleGNlZWQgdGhlIHNwZWVkIHJlc2VydmUgLSB0aGVuIHRoZSBmaWxlc3lzdGVtIGdldHMgc21hbGxlci4KKwkgKi8KKwlyZXNlcnZlID0gc3VwZXItPnNfYmFkX3NlZ21lbnRzICsgc3VwZXItPnNfYmFkX3NlZ19yZXNlcnZlOworCXJlc2VydmUgKj0gc3VwZXItPnNfc2Vnc2l6ZSAtIExPR0ZTX1NFR01FTlRfUkVTRVJWRTsKKwlyZXNlcnZlID0gbWF4KHJlc2VydmUsIHN1cGVyLT5zX3NwZWVkX3Jlc2VydmUpOworCWZyZWUgLT0gcmVzZXJ2ZTsKKwlpZiAoZnJlZSA8IDApCisJCWZyZWUgPSAwOworCisJc3VwZXItPnNfZnJlZV9ieXRlcyA9IGZyZWU7Cit9CisKK3N0YXRpYyB2b2lkIHJlc2VydmVfc2JfYW5kX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBidHJlZV9oZWFkMzIgKmhlYWQgPSAmc3VwZXItPnNfcmVzZXJ2ZWRfc2VnbWVudHM7CisJaW50IGksIGVycjsKKworCWVyciA9IGJ0cmVlX2luc2VydDMyKGhlYWQsIHNlZ19ubyhzYiwgc3VwZXItPnNfc2Jfb2ZzWzBdKSwgKHZvaWQgKikxLAorCQkJR0ZQX0tFUk5FTCk7CisJQlVHX09OKGVycik7CisKKwllcnIgPSBidHJlZV9pbnNlcnQzMihoZWFkLCBzZWdfbm8oc2IsIHN1cGVyLT5zX3NiX29mc1sxXSksICh2b2lkICopMSwKKwkJCUdGUF9LRVJORUwpOworCUJVR19PTihlcnIpOworCisJam91cm5hbF9mb3JfZWFjaChpKSB7CisJCWlmICghc3VwZXItPnNfam91cm5hbF9zZWdbaV0pCisJCQljb250aW51ZTsKKwkJZXJyID0gYnRyZWVfaW5zZXJ0MzIoaGVhZCwgc3VwZXItPnNfam91cm5hbF9zZWdbaV0sICh2b2lkICopMSwKKwkJCQlHRlBfS0VSTkVMKTsKKwkJQlVHX09OKGVycik7CisJfQorfQorCitzdGF0aWMgdm9pZCByZWFkX2R5bnNiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCXN0cnVjdCBsb2dmc19qZV9keW5zYiAqZHluc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKworCXN1cGVyLT5zX2dlYwkJPSBiZTY0X3RvX2NwdShkeW5zYi0+ZHNfZ2VjKTsKKwlzdXBlci0+c19zd2VlcGVyCT0gYmU2NF90b19jcHUoZHluc2ItPmRzX3N3ZWVwZXIpOworCXN1cGVyLT5zX3ZpY3RpbV9pbm8JPSBiZTY0X3RvX2NwdShkeW5zYi0+ZHNfdmljdGltX2lubyk7CisJc3VwZXItPnNfcmVuYW1lX2Rpcgk9IGJlNjRfdG9fY3B1KGR5bnNiLT5kc19yZW5hbWVfZGlyKTsKKwlzdXBlci0+c19yZW5hbWVfcG9zCT0gYmU2NF90b19jcHUoZHluc2ItPmRzX3JlbmFtZV9wb3MpOworCXN1cGVyLT5zX3VzZWRfYnl0ZXMJPSBiZTY0X3RvX2NwdShkeW5zYi0+ZHNfdXNlZF9ieXRlcyk7CisJc3VwZXItPnNfZ2VuZXJhdGlvbgk9IGJlMzJfdG9fY3B1KGR5bnNiLT5kc19nZW5lcmF0aW9uKTsKK30KKworc3RhdGljIHZvaWQgcmVhZF9hbmNob3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJc3RydWN0IGxvZ2ZzX2plX2FuY2hvciAqZGEpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gc3VwZXItPnNfbWFzdGVyX2lub2RlOworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisJaW50IGk7CisKKwlzdXBlci0+c19sYXN0X2lubyA9IGJlNjRfdG9fY3B1KGRhLT5kYV9sYXN0X2lubyk7CisJbGktPmxpX2ZsYWdzCT0gMDsKKwlsaS0+bGlfaGVpZ2h0CT0gZGEtPmRhX2hlaWdodDsKKwlpX3NpemVfd3JpdGUoaW5vZGUsIGJlNjRfdG9fY3B1KGRhLT5kYV9zaXplKSk7CisJbGktPmxpX3VzZWRfYnl0ZXMgPSBiZTY0X3RvX2NwdShkYS0+ZGFfdXNlZF9ieXRlcyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTE9HRlNfRU1CRURERURfRklFTERTOyBpKyspCisJCWxpLT5saV9kYXRhW2ldID0gYmU2NF90b19jcHUoZGEtPmRhX2RhdGFbaV0pOworfQorCitzdGF0aWMgdm9pZCByZWFkX2VyYXNlY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJc3RydWN0IGxvZ2ZzX2plX2pvdXJuYWxfZWMgKmVjKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJaW50IGk7CisKKwlqb3VybmFsX2Zvcl9lYWNoKGkpCisJCXN1cGVyLT5zX2pvdXJuYWxfZWNbaV0gPSBiZTMyX3RvX2NwdShlYy0+ZWNbaV0pOworfQorCitzdGF0aWMgaW50IHJlYWRfYXJlYShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgbG9nZnNfamVfYXJlYSAqYSkKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBsb2dmc19hcmVhICphcmVhID0gc3VwZXItPnNfYXJlYVthLT5nY19sZXZlbF07CisJdTY0IG9mczsKKwl1MzIgd3JpdGVtYXNrID0gfihzdXBlci0+c193cml0ZXNpemUgLSAxKTsKKworCWlmIChhLT5nY19sZXZlbCA+PSBMT0dGU19OT19BUkVBUykKKwkJcmV0dXJuIC1FSU87CisJaWYgKGEtPnZpbSAhPSBWSU1fREVGQVVMVCkKKwkJcmV0dXJuIC1FSU87IC8qIFRPRE86IGNsb3NlIGFyZWEgYW5kIGNvbnRpbnVlICovCisKKwlhcmVhLT5hX3VzZWRfYnl0ZXMgPSBiZTMyX3RvX2NwdShhLT51c2VkX2J5dGVzKTsKKwlhcmVhLT5hX3dyaXR0ZW5fYnl0ZXMgPSBhcmVhLT5hX3VzZWRfYnl0ZXMgJiB3cml0ZW1hc2s7CisJYXJlYS0+YV9zZWdubyA9IGJlMzJfdG9fY3B1KGEtPnNlZ25vKTsKKwlpZiAoYXJlYS0+YV9zZWdubykKKwkJYXJlYS0+YV9pc19vcGVuID0gMTsKKworCW9mcyA9IGRldl9vZnMoc2IsIGFyZWEtPmFfc2Vnbm8sIGFyZWEtPmFfd3JpdHRlbl9ieXRlcyk7CisJaWYgKHN1cGVyLT5zX3dyaXRlc2l6ZSA+IDEpCisJCWxvZ2ZzX2J1Zl9yZWNvdmVyKGFyZWEsIG9mcywgYSArIDEsIHN1cGVyLT5zX3dyaXRlc2l6ZSk7CisJZWxzZQorCQlsb2dmc19idWZfcmVjb3ZlcihhcmVhLCBvZnMsIE5VTEwsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAqdW5wYWNrKHZvaWQgKmZyb20sIHZvaWQgKnRvKQoreworCXN0cnVjdCBsb2dmc19qb3VybmFsX2hlYWRlciAqamggPSBmcm9tOworCXZvaWQgKmRhdGEgPSBmcm9tICsgc2l6ZW9mKHN0cnVjdCBsb2dmc19qb3VybmFsX2hlYWRlcik7CisJaW50IGVycjsKKwlzaXplX3QgaW5sZW4sIG91dGxlbjsKKworCWlubGVuID0gYmUxNl90b19jcHUoamgtPmhfbGVuKTsKKwlvdXRsZW4gPSBiZTE2X3RvX2NwdShqaC0+aF9kYXRhbGVuKTsKKworCWlmIChqaC0+aF9jb21wciA9PSBDT01QUl9OT05FKQorCQltZW1jcHkodG8sIGRhdGEsIGlubGVuKTsKKwllbHNlIHsKKwkJZXJyID0gbG9nZnNfdW5jb21wcmVzcyhkYXRhLCB0bywgaW5sZW4sIG91dGxlbik7CisJCUJVR19PTihlcnIpOworCX0KKwlyZXR1cm4gdG87Cit9CisKK3N0YXRpYyBpbnQgX19yZWFkX2plX2hlYWRlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgb2ZzLAorCQlzdHJ1Y3QgbG9nZnNfam91cm5hbF9oZWFkZXIgKmpoKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc2l6ZV90IGJ1ZnNpemUgPSBtYXhfdChzaXplX3QsIHNiLT5zX2Jsb2Nrc2l6ZSwgc3VwZXItPnNfd3JpdGVzaXplKQorCQkrIE1BWF9KT1VSTkFMX0hFQURFUjsKKwl1MTYgdHlwZSwgbGVuLCBkYXRhbGVuOworCWludCBlcnI7CisKKwkvKiByZWFkIGhlYWRlciBvbmx5ICovCisJZXJyID0gd2J1Zl9yZWFkKHNiLCBvZnMsIHNpemVvZigqamgpLCBqaCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwl0eXBlID0gYmUxNl90b19jcHUoamgtPmhfdHlwZSk7CisJbGVuID0gYmUxNl90b19jcHUoamgtPmhfbGVuKTsKKwlkYXRhbGVuID0gYmUxNl90b19jcHUoamgtPmhfZGF0YWxlbik7CisJaWYgKGxlbiA+IHNiLT5zX2Jsb2Nrc2l6ZSkKKwkJcmV0dXJuIC1FSU87CisJaWYgKCh0eXBlIDwgSkVfRklSU1QpIHx8ICh0eXBlID4gSkVfTEFTVCkpCisJCXJldHVybiAtRUlPOworCWlmIChkYXRhbGVuID4gYnVmc2l6ZSkKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19yZWFkX2plX3BheWxvYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IG9mcywKKwkJc3RydWN0IGxvZ2ZzX2pvdXJuYWxfaGVhZGVyICpqaCkKK3sKKwl1MTYgbGVuOworCWludCBlcnI7CisKKwlsZW4gPSBiZTE2X3RvX2NwdShqaC0+aF9sZW4pOworCWVyciA9IHdidWZfcmVhZChzYiwgb2ZzICsgc2l6ZW9mKCpqaCksIGxlbiwgamggKyAxKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWlmIChqaC0+aF9jcmMgIT0gbG9nZnNfY3JjMzIoamgsIGxlbiArIHNpemVvZigqamgpLCA0KSkgeworCQkvKiBPbGQgY29kZSB3YXMgY29uZnVzZWQuICBJdCBmb3Jnb3QgYWJvdXQgdGhlIGhlYWRlciBsZW5ndGgKKwkJICogYW5kIHN0b3BwZWQgY2FsY3VsYXRpbmcgdGhlIGNyYyAxNiBieXRlcyBiZWZvcmUgdGhlIGVuZAorCQkgKiBvZiBkYXRhIC0gaWNrIQorCQkgKiBGSVhNRTogUmVtb3ZlIHRoaXMgaGFjayBvbmNlIHRoZSBvbGQgY29kZSBpcyBmaXhlZC4KKwkJICovCisJCWlmIChqaC0+aF9jcmMgPT0gbG9nZnNfY3JjMzIoamgsIGxlbiwgNCkpCisJCQlXQVJOX09OX09OQ0UoMSk7CisJCWVsc2UKKwkJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGpoIG5lZWRzIHRvIGJlIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZSBjb21wbGV0ZSBlbnRyeSwgbm90IGp1c3QgdGhlIGhlYWRlcgorICovCitzdGF0aWMgaW50IF9fcmVhZF9qZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgb2ZzLAorCQlzdHJ1Y3QgbG9nZnNfam91cm5hbF9oZWFkZXIgKmpoKQoreworCWludCBlcnI7CisKKwllcnIgPSBfX3JlYWRfamVfaGVhZGVyKHNiLCBvZnMsIGpoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXJldHVybiBfX3JlYWRfamVfcGF5bG9hZChzYiwgb2ZzLCBqaCk7Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9qZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgb2ZzKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX2pvdXJuYWxfaGVhZGVyICpqaCA9IHN1cGVyLT5zX2NvbXByZXNzZWRfamU7CisJdm9pZCAqc2NyYXRjaCA9IHN1cGVyLT5zX2plOworCXUxNiB0eXBlLCBkYXRhbGVuOworCWludCBlcnI7CisKKwllcnIgPSBfX3JlYWRfamUoc2IsIG9mcywgamgpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJdHlwZSA9IGJlMTZfdG9fY3B1KGpoLT5oX3R5cGUpOworCWRhdGFsZW4gPSBiZTE2X3RvX2NwdShqaC0+aF9kYXRhbGVuKTsKKworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgSkVfRFlOU0I6CisJCXJlYWRfZHluc2Ioc2IsIHVucGFjayhqaCwgc2NyYXRjaCkpOworCQlicmVhazsKKwljYXNlIEpFX0FOQ0hPUjoKKwkJcmVhZF9hbmNob3Ioc2IsIHVucGFjayhqaCwgc2NyYXRjaCkpOworCQlicmVhazsKKwljYXNlIEpFX0VSQVNFQ09VTlQ6CisJCXJlYWRfZXJhc2Vjb3VudChzYiwgdW5wYWNrKGpoLCBzY3JhdGNoKSk7CisJCWJyZWFrOworCWNhc2UgSkVfQVJFQToKKwkJcmVhZF9hcmVhKHNiLCB1bnBhY2soamgsIHNjcmF0Y2gpKTsKKwkJYnJlYWs7CisJY2FzZSBKRV9PQkpfQUxJQVM6CisJCWVyciA9IGxvZ2ZzX2xvYWRfb2JqZWN0X2FsaWFzZXMoc2IsIHVucGFjayhqaCwgc2NyYXRjaCksCisJCQkJZGF0YWxlbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVdBUk5fT05fT05DRSgxKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfcmVhZF9zZWdtZW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzZWdubykKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBsb2dmc19qb3VybmFsX2hlYWRlciAqamggPSBzdXBlci0+c19jb21wcmVzc2VkX2plOworCXU2NCBvZnMsIHNlZ19vZnMgPSBkZXZfb2ZzKHNiLCBzZWdubywgMCk7CisJdTMyIGhfb2ZzLCBsYXN0X29mcyA9IDA7CisJdTE2IGxlbiwgZGF0YWxlbiwgbGFzdF9sZW4gPSAwOworCWludCBpLCBlcnI7CisKKwkvKiBzZWFyY2ggZm9yIG1vc3QgcmVjZW50IGNvbW1pdCAqLworCWZvciAoaF9vZnMgPSAwOyBoX29mcyA8IHN1cGVyLT5zX3NlZ3NpemU7IGhfb2ZzICs9IHNpemVvZigqamgpKSB7CisJCW9mcyA9IHNlZ19vZnMgKyBoX29mczsKKwkJZXJyID0gX19yZWFkX2plX2hlYWRlcihzYiwgb2ZzLCBqaCk7CisJCWlmIChlcnIpCisJCQljb250aW51ZTsKKwkJaWYgKGpoLT5oX3R5cGUgIT0gY3B1X3RvX2JlMTYoSkVfQ09NTUlUKSkKKwkJCWNvbnRpbnVlOworCQllcnIgPSBfX3JlYWRfamVfcGF5bG9hZChzYiwgb2ZzLCBqaCk7CisJCWlmIChlcnIpCisJCQljb250aW51ZTsKKwkJbGVuID0gYmUxNl90b19jcHUoamgtPmhfbGVuKTsKKwkJZGF0YWxlbiA9IGJlMTZfdG9fY3B1KGpoLT5oX2RhdGFsZW4pOworCQlpZiAoKGRhdGFsZW4gPiBzaXplb2Yoc3VwZXItPnNfamVfYXJyYXkpKSB8fAorCQkJCShkYXRhbGVuICUgc2l6ZW9mKF9fYmU2NCkpKQorCQkJY29udGludWU7CisJCWxhc3Rfb2ZzID0gaF9vZnM7CisJCWxhc3RfbGVuID0gZGF0YWxlbjsKKwkJaF9vZnMgKz0gQUxJR04obGVuLCBzaXplb2YoKmpoKSkgLSBzaXplb2YoKmpoKTsKKwl9CisJLyogcmVhZCBjb21taXQgKi8KKwlpZiAobGFzdF9vZnMgPT0gMCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJb2ZzID0gc2VnX29mcyArIGxhc3Rfb2ZzOworCWxvZ19qb3VybmFsKCJSZWFkIGNvbW1pdCBmcm9tICVsbHhcbiIsIG9mcyk7CisJZXJyID0gX19yZWFkX2plKHNiLCBvZnMsIGpoKTsKKwlCVUdfT04oZXJyKTsgLyogV2Ugc2hvdWxkIGhhdmUgY2F1Z2h0IGl0IGluIHRoZSBzY2FuIGxvb3AgYWxyZWFkeSAqLworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJLyogdW5jb21wcmVzcyAqLworCXVucGFjayhqaCwgc3VwZXItPnNfamVfYXJyYXkpOworCXN1cGVyLT5zX25vX2plID0gbGFzdF9sZW4gLyBzaXplb2YoX19iZTY0KTsKKwkvKiBpdGVyYXRlIG92ZXIgYXJyYXkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3VwZXItPnNfbm9famU7IGkrKykgeworCQllcnIgPSByZWFkX2plKHNiLCBiZTY0X3RvX2NwdShzdXBlci0+c19qZV9hcnJheVtpXSkpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJc3VwZXItPnNfam91cm5hbF9hcmVhLT5hX3NlZ25vID0gc2Vnbm87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1NjQgcmVhZF9nZWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlZ25vKQoreworCXN0cnVjdCBsb2dmc19zZWdtZW50X2hlYWRlciBzaDsKKwlfX2JlMzIgY3JjOworCWludCBlcnI7CisKKwlpZiAoIXNlZ25vKQorCQlyZXR1cm4gMDsKKwllcnIgPSB3YnVmX3JlYWQoc2IsIGRldl9vZnMoc2IsIHNlZ25vLCAwKSwgc2l6ZW9mKHNoKSwgJnNoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gMDsKKwljcmMgPSBsb2dmc19jcmMzMigmc2gsIHNpemVvZihzaCksIDQpOworCWlmIChjcmMgIT0gc2guY3JjKSB7CisJCVdBUk5fT04oc2guZ2VjICE9IGNwdV90b19iZTY0KDB4ZmZmZmZmZmZmZmZmZmZmZnVsbCkpOworCQkvKiBNb3N0IGxpa2VseSBpdCB3YXMganVzdCBlcmFzZWQgKi8KKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBiZTY0X3RvX2NwdShzaC5nZWMpOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3JlYWRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJdTY0IGdlY1tMT0dGU19KT1VSTkFMX1NFR1NdLCBtYXg7CisJdTMyIHNlZ25vOworCWludCBpLCBtYXhfaTsKKworCW1heCA9IDA7CisJbWF4X2kgPSAtMTsKKwlqb3VybmFsX2Zvcl9lYWNoKGkpIHsKKwkJc2Vnbm8gPSBzdXBlci0+c19qb3VybmFsX3NlZ1tpXTsKKwkJZ2VjW2ldID0gcmVhZF9nZWMoc2IsIHN1cGVyLT5zX2pvdXJuYWxfc2VnW2ldKTsKKwkJaWYgKGdlY1tpXSA+IG1heCkgeworCQkJbWF4ID0gZ2VjW2ldOworCQkJbWF4X2kgPSBpOworCQl9CisJfQorCWlmIChtYXhfaSA9PSAtMSkKKwkJcmV0dXJuIC1FSU87CisJLyogRklYTUU6IFRyeSBvbGRlciBzZWdtZW50cyBpbiBjYXNlIG9mIGVycm9yICovCisJcmV0dXJuIGxvZ2ZzX3JlYWRfc2VnbWVudChzYiwgc3VwZXItPnNfam91cm5hbF9zZWdbbWF4X2ldKTsKK30KKworLyoKKyAqIEZpcnN0IHNlYXJjaCB0aGUgY3VycmVudCBzZWdtZW50IChvdXRlciBsb29wKSwgdGhlbiBwaWNrIHRoZSBuZXh0IHNlZ21lbnQKKyAqIGluIHRoZSBhcnJheSwgc2tpcHBpbmcgYW55IHplcm8gZW50cmllcyAoaW5uZXIgbG9vcCkuCisgKi8KK3N0YXRpYyB2b2lkIGpvdXJuYWxfZ2V0X2ZyZWVfc2VnbWVudChzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSkKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoYXJlYS0+YV9zYik7CisJaW50IGk7CisKKwlqb3VybmFsX2Zvcl9lYWNoKGkpIHsKKwkJaWYgKGFyZWEtPmFfc2Vnbm8gIT0gc3VwZXItPnNfam91cm5hbF9zZWdbaV0pCisJCQljb250aW51ZTsKKworCQlkbyB7CisJCQlpKys7CisJCQlpZiAoaSA9PSBMT0dGU19KT1VSTkFMX1NFR1MpCisJCQkJaSA9IDA7CisJCX0gd2hpbGUgKCFzdXBlci0+c19qb3VybmFsX3NlZ1tpXSk7CisKKwkJYXJlYS0+YV9zZWdubyA9IHN1cGVyLT5zX2pvdXJuYWxfc2VnW2ldOworCQlhcmVhLT5hX2VyYXNlX2NvdW50ID0gKysoc3VwZXItPnNfam91cm5hbF9lY1tpXSk7CisJCWxvZ19qb3VybmFsKCJKb3VybmFsIG5vdyBhdCAleCAoZWMgJXgpXG4iLCBhcmVhLT5hX3NlZ25vLAorCQkJCWFyZWEtPmFfZXJhc2VfY291bnQpOworCQlyZXR1cm47CisJfQorCUJVRygpOworfQorCitzdGF0aWMgdm9pZCBqb3VybmFsX2dldF9lcmFzZV9jb3VudChzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSkKK3sKKwkvKiBlcmFzZSBjb3VudCBpcyBzdG9yZWQgZ2xvYmFsbHkgYW5kIGluY3JlbWVudGVkIGluCisJICogam91cm5hbF9nZXRfZnJlZV9zZWdtZW50KCkgLSBub3RoaW5nIHRvIGRvIGhlcmUgKi8KK30KKworc3RhdGljIGludCBqb3VybmFsX2VyYXNlX3NlZ21lbnQoc3RydWN0IGxvZ2ZzX2FyZWEgKmFyZWEpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGFyZWEtPmFfc2I7CisJc3RydWN0IGxvZ2ZzX3NlZ21lbnRfaGVhZGVyIHNoOworCXU2NCBvZnM7CisJaW50IGVycjsKKworCWVyciA9IGxvZ2ZzX2VyYXNlX3NlZ21lbnQoc2IsIGFyZWEtPmFfc2Vnbm8sIDEpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlzaC5wYWQgPSAwOworCXNoLnR5cGUgPSBTRUdfSk9VUk5BTDsKKwlzaC5sZXZlbCA9IDA7CisJc2guc2Vnbm8gPSBjcHVfdG9fYmUzMihhcmVhLT5hX3NlZ25vKTsKKwlzaC5lYyA9IGNwdV90b19iZTMyKGFyZWEtPmFfZXJhc2VfY291bnQpOworCXNoLmdlYyA9IGNwdV90b19iZTY0KGxvZ2ZzX3N1cGVyKHNiKS0+c19nZWMpOworCXNoLmNyYyA9IGxvZ2ZzX2NyYzMyKCZzaCwgc2l6ZW9mKHNoKSwgNCk7CisKKwkvKiBUaGlzIGNhdXNlcyBhIGJ1ZyBpbiBzZWdtZW50LmMuICBOb3QgeWV0LiAqLworCS8vbG9nZnNfc2V0X3NlZ21lbnRfZXJhc2VkKHNiLCBhcmVhLT5hX3NlZ25vLCBhcmVhLT5hX2VyYXNlX2NvdW50LCAwKTsKKworCW9mcyA9IGRldl9vZnMoc2IsIGFyZWEtPmFfc2Vnbm8sIDApOworCWFyZWEtPmFfdXNlZF9ieXRlcyA9IEFMSUdOKHNpemVvZihzaCksIDE2KTsKKwlsb2dmc19idWZfd3JpdGUoYXJlYSwgb2ZzLCAmc2gsIHNpemVvZihzaCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc2l6ZV90IF9fbG9nZnNfd3JpdGVfaGVhZGVyKHN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIsCisJCXN0cnVjdCBsb2dmc19qb3VybmFsX2hlYWRlciAqamgsIHNpemVfdCBsZW4sIHNpemVfdCBkYXRhbGVuLAorCQl1MTYgdHlwZSwgdTggY29tcHIpCit7CisJamgtPmhfbGVuCT0gY3B1X3RvX2JlMTYobGVuKTsKKwlqaC0+aF90eXBlCT0gY3B1X3RvX2JlMTYodHlwZSk7CisJamgtPmhfZGF0YWxlbgk9IGNwdV90b19iZTE2KGRhdGFsZW4pOworCWpoLT5oX2NvbXByCT0gY29tcHI7CisJamgtPmhfcGFkWzBdCT0gJ0gnOworCWpoLT5oX3BhZFsxXQk9ICdFJzsKKwlqaC0+aF9wYWRbMl0JPSAnQSc7CisJamgtPmhfcGFkWzNdCT0gJ0QnOworCWpoLT5oX3BhZFs0XQk9ICdSJzsKKwlqaC0+aF9jcmMJPSBsb2dmc19jcmMzMihqaCwgbGVuICsgc2l6ZW9mKCpqaCksIDQpOworCXJldHVybiBBTElHTihsZW4sIDE2KSArIHNpemVvZigqamgpOworfQorCitzdGF0aWMgc2l6ZV90IGxvZ2ZzX3dyaXRlX2hlYWRlcihzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyLAorCQlzdHJ1Y3QgbG9nZnNfam91cm5hbF9oZWFkZXIgKmpoLCBzaXplX3QgZGF0YWxlbiwgdTE2IHR5cGUpCit7CisJc2l6ZV90IGxlbiA9IGRhdGFsZW47CisKKwlyZXR1cm4gX19sb2dmc193cml0ZV9oZWFkZXIoc3VwZXIsIGpoLCBsZW4sIGRhdGFsZW4sIHR5cGUsIENPTVBSX05PTkUpOworfQorCitzdGF0aWMgaW5saW5lIHNpemVfdCBsb2dmc19qb3VybmFsX2VyYXNlY291bnRfc2l6ZShzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyKQoreworCXJldHVybiBMT0dGU19KT1VSTkFMX1NFR1MgKiBzaXplb2YoX19iZTMyKTsKK30KKworc3RhdGljIHZvaWQgKmxvZ2ZzX3dyaXRlX2VyYXNlY291bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqX2VjLAorCQl1MTYgKnR5cGUsIHNpemVfdCAqbGVuKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX2plX2pvdXJuYWxfZWMgKmVjID0gX2VjOworCWludCBpOworCisJam91cm5hbF9mb3JfZWFjaChpKQorCQllYy0+ZWNbaV0gPSBjcHVfdG9fYmUzMihzdXBlci0+c19qb3VybmFsX2VjW2ldKTsKKwkqdHlwZSA9IEpFX0VSQVNFQ09VTlQ7CisJKmxlbiA9IGxvZ2ZzX2pvdXJuYWxfZXJhc2Vjb3VudF9zaXplKHN1cGVyKTsKKwlyZXR1cm4gZWM7Cit9CisKK3N0YXRpYyB2b2lkIGFjY291bnRfc2hhZG93KHZvaWQgKl9zaGFkb3csIHVuc2lnbmVkIGxvbmcgX3NiLCB1NjQgaWdub3JlLAorCQlzaXplX3QgaWdub3JlMikKK3sKKwlzdHJ1Y3QgbG9nZnNfc2hhZG93ICpzaGFkb3cgPSBfc2hhZG93OworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSAodm9pZCAqKV9zYjsKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCisJLyogY29uc3VtZSBuZXcgc3BhY2UgKi8KKwlzdXBlci0+c19mcmVlX2J5dGVzCSAgLT0gc2hhZG93LT5uZXdfbGVuOworCXN1cGVyLT5zX3VzZWRfYnl0ZXMJICArPSBzaGFkb3ctPm5ld19sZW47CisJc3VwZXItPnNfZGlydHlfdXNlZF9ieXRlcyAtPSBzaGFkb3ctPm5ld19sZW47CisKKwkvKiBmcmVlIHVwIG9sZCBzcGFjZSAqLworCXN1cGVyLT5zX2ZyZWVfYnl0ZXMJICArPSBzaGFkb3ctPm9sZF9sZW47CisJc3VwZXItPnNfdXNlZF9ieXRlcwkgIC09IHNoYWRvdy0+b2xkX2xlbjsKKwlzdXBlci0+c19kaXJ0eV9mcmVlX2J5dGVzIC09IHNoYWRvdy0+b2xkX2xlbjsKKworCWxvZ2ZzX3NldF9zZWdtZW50X3VzZWQoc2IsIHNoYWRvdy0+b2xkX29mcywgLXNoYWRvdy0+b2xkX2xlbik7CisJbG9nZnNfc2V0X3NlZ21lbnRfdXNlZChzYiwgc2hhZG93LT5uZXdfb2ZzLCBzaGFkb3ctPm5ld19sZW4pOworCisJbG9nX2pvdXJuYWwoImFjY291bnRfc2hhZG93KCVsbHgsICVsbHgsICV4KSAlbGx4LT4lbGx4ICV4LT4leFxuIiwKKwkJCXNoYWRvdy0+aW5vLCBzaGFkb3ctPmJpeCwgc2hhZG93LT5nY19sZXZlbCwKKwkJCXNoYWRvdy0+b2xkX29mcywgc2hhZG93LT5uZXdfb2ZzLAorCQkJc2hhZG93LT5vbGRfbGVuLCBzaGFkb3ctPm5ld19sZW4pOworCW1lbXBvb2xfZnJlZShzaGFkb3csIHN1cGVyLT5zX3NoYWRvd19wb29sKTsKK30KKworc3RhdGljIHZvaWQgYWNjb3VudF9zaGFkb3dzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gc3VwZXItPnNfbWFzdGVyX2lub2RlOworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisJc3RydWN0IHNoYWRvd190cmVlICp0cmVlID0gJnN1cGVyLT5zX3NoYWRvd190cmVlOworCisJYnRyZWVfZ3JpbV92aXNpdG9yNjQoJnRyZWUtPm5ldywgKHVuc2lnbmVkIGxvbmcpc2IsIGFjY291bnRfc2hhZG93KTsKKwlidHJlZV9ncmltX3Zpc2l0b3I2NCgmdHJlZS0+b2xkLCAodW5zaWduZWQgbG9uZylzYiwgYWNjb3VudF9zaGFkb3cpOworCisJaWYgKGxpLT5saV9ibG9jaykgeworCQkvKgorCQkgKiBXZSBuZXZlciBhY3R1YWxseSB1c2UgdGhlIHN0cnVjdHVyZSwgd2hlbiBhdHRhY2hlZCB0byB0aGUKKwkJICogbWFzdGVyIGlub2RlLiAgQnV0IGl0IGlzIGVhc2llciB0byBhbHdheXMgZnJlZSBpdCBoZXJlIHRoYW4KKwkJICogdG8gaGF2ZSBjaGVja3MgaW4gc2V2ZXJhbCBwbGFjZXMgZWxzZXdoZXJlIHdoZW4gYWxsb2NhdGluZworCQkgKiBpdC4KKwkJICovCisJCWxpLT5saV9ibG9jay0+b3BzLT5mcmVlX2Jsb2NrKHNiLCBsaS0+bGlfYmxvY2spOworCX0KKwlCVUdfT04oKHM2NClsaS0+bGlfdXNlZF9ieXRlcyA8IDApOworfQorCitzdGF0aWMgdm9pZCAqX19sb2dmc193cml0ZV9hbmNob3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqX2RhLAorCQl1MTYgKnR5cGUsIHNpemVfdCAqbGVuKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX2plX2FuY2hvciAqZGEgPSBfZGE7CisJc3RydWN0IGlub2RlICppbm9kZSA9IHN1cGVyLT5zX21hc3Rlcl9pbm9kZTsKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCWludCBpOworCisJZGEtPmRhX2hlaWdodAk9IGxpLT5saV9oZWlnaHQ7CisJZGEtPmRhX2xhc3RfaW5vID0gY3B1X3RvX2JlNjQoc3VwZXItPnNfbGFzdF9pbm8pOworCWRhLT5kYV9zaXplCT0gY3B1X3RvX2JlNjQoaV9zaXplX3JlYWQoaW5vZGUpKTsKKwlkYS0+ZGFfdXNlZF9ieXRlcyA9IGNwdV90b19iZTY0KGxpLT5saV91c2VkX2J5dGVzKTsKKwlmb3IgKGkgPSAwOyBpIDwgTE9HRlNfRU1CRURERURfRklFTERTOyBpKyspCisJCWRhLT5kYV9kYXRhW2ldID0gY3B1X3RvX2JlNjQobGktPmxpX2RhdGFbaV0pOworCSp0eXBlID0gSkVfQU5DSE9SOworCSpsZW4gPSBzaXplb2YoKmRhKTsKKwlyZXR1cm4gZGE7Cit9CisKK3N0YXRpYyB2b2lkICpsb2dmc193cml0ZV9keW5zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpfZHluc2IsCisJCXUxNiAqdHlwZSwgc2l6ZV90ICpsZW4pCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgbG9nZnNfamVfZHluc2IgKmR5bnNiID0gX2R5bnNiOworCisJZHluc2ItPmRzX2dlYwkJPSBjcHVfdG9fYmU2NChzdXBlci0+c19nZWMpOworCWR5bnNiLT5kc19zd2VlcGVyCT0gY3B1X3RvX2JlNjQoc3VwZXItPnNfc3dlZXBlcik7CisJZHluc2ItPmRzX3ZpY3RpbV9pbm8JPSBjcHVfdG9fYmU2NChzdXBlci0+c192aWN0aW1faW5vKTsKKwlkeW5zYi0+ZHNfcmVuYW1lX2Rpcgk9IGNwdV90b19iZTY0KHN1cGVyLT5zX3JlbmFtZV9kaXIpOworCWR5bnNiLT5kc19yZW5hbWVfcG9zCT0gY3B1X3RvX2JlNjQoc3VwZXItPnNfcmVuYW1lX3Bvcyk7CisJZHluc2ItPmRzX3VzZWRfYnl0ZXMJPSBjcHVfdG9fYmU2NChzdXBlci0+c191c2VkX2J5dGVzKTsKKwlkeW5zYi0+ZHNfZ2VuZXJhdGlvbgk9IGNwdV90b19iZTMyKHN1cGVyLT5zX2dlbmVyYXRpb24pOworCSp0eXBlID0gSkVfRFlOU0I7CisJKmxlbiA9IHNpemVvZigqZHluc2IpOworCXJldHVybiBkeW5zYjsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfd2J1ZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSwKKwkJdm9pZCAqd2J1ZikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gc3VwZXItPnNfbWFwcGluZ19pbm9kZS0+aV9tYXBwaW5nOworCXU2NCBvZnM7CisJcGdvZmZfdCBpbmRleDsKKwlpbnQgcGFnZV9vZnM7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlvZnMgPSBkZXZfb2ZzKHNiLCBhcmVhLT5hX3NlZ25vLAorCQkJYXJlYS0+YV91c2VkX2J5dGVzICYgfihzdXBlci0+c193cml0ZXNpemUgLSAxKSk7CisJaW5kZXggPSBvZnMgPj4gUEFHRV9TSElGVDsKKwlwYWdlX29mcyA9IG9mcyAmIChQQUdFX1NJWkUgLSAxKTsKKworCXBhZ2UgPSBmaW5kX2xvY2tfcGFnZShtYXBwaW5nLCBpbmRleCk7CisJQlVHX09OKCFwYWdlKTsKKwltZW1jcHkod2J1ZiwgcGFnZV9hZGRyZXNzKHBhZ2UpICsgcGFnZV9vZnMsIHN1cGVyLT5zX3dyaXRlc2l6ZSk7CisJdW5sb2NrX3BhZ2UocGFnZSk7Cit9CisKK3N0YXRpYyB2b2lkICpsb2dmc193cml0ZV9hcmVhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKl9hLAorCQl1MTYgKnR5cGUsIHNpemVfdCAqbGVuKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX2FyZWEgKmFyZWEgPSBzdXBlci0+c19hcmVhW3N1cGVyLT5zX3N1bV9pbmRleF07CisJc3RydWN0IGxvZ2ZzX2plX2FyZWEgKmEgPSBfYTsKKworCWEtPnZpbSA9IFZJTV9ERUZBVUxUOworCWEtPmdjX2xldmVsID0gc3VwZXItPnNfc3VtX2luZGV4OworCWEtPnVzZWRfYnl0ZXMgPSBjcHVfdG9fYmUzMihhcmVhLT5hX3VzZWRfYnl0ZXMpOworCWEtPnNlZ25vID0gY3B1X3RvX2JlMzIoYXJlYS0+YV9zZWdubyk7CisJaWYgKHN1cGVyLT5zX3dyaXRlc2l6ZSA+IDEpCisJCXdyaXRlX3didWYoc2IsIGFyZWEsIGEgKyAxKTsKKworCSp0eXBlID0gSkVfQVJFQTsKKwkqbGVuID0gc2l6ZW9mKCphKSArIHN1cGVyLT5zX3dyaXRlc2l6ZTsKKwlyZXR1cm4gYTsKK30KKworc3RhdGljIHZvaWQgKmxvZ2ZzX3dyaXRlX2NvbW1pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpoLAorCQl1MTYgKnR5cGUsIHNpemVfdCAqbGVuKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisKKwkqdHlwZSA9IEpFX0NPTU1JVDsKKwkqbGVuID0gc3VwZXItPnNfbm9famUgKiBzaXplb2YoX19iZTY0KTsKKwlyZXR1cm4gc3VwZXItPnNfamVfYXJyYXk7Cit9CisKK3N0YXRpYyBzaXplX3QgX19sb2dmc193cml0ZV9qZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpidWYsIHUxNiB0eXBlLAorCQlzaXplX3QgbGVuKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJdm9pZCAqaGVhZGVyID0gc3VwZXItPnNfY29tcHJlc3NlZF9qZTsKKwl2b2lkICpkYXRhID0gaGVhZGVyICsgc2l6ZW9mKHN0cnVjdCBsb2dmc19qb3VybmFsX2hlYWRlcik7CisJc3NpemVfdCBjb21wcl9sZW4sIHBhZF9sZW47CisJdTggY29tcHIgPSBDT01QUl9aTElCOworCisJaWYgKGxlbiA9PSAwKQorCQlyZXR1cm4gbG9nZnNfd3JpdGVfaGVhZGVyKHN1cGVyLCBoZWFkZXIsIDAsIHR5cGUpOworCisJY29tcHJfbGVuID0gbG9nZnNfY29tcHJlc3MoYnVmLCBkYXRhLCBsZW4sIHNiLT5zX2Jsb2Nrc2l6ZSk7CisJaWYgKGNvbXByX2xlbiA8IDAgfHwgdHlwZSA9PSBKRV9BTkNIT1IpIHsKKwkJQlVHX09OKGxlbiA+IHNiLT5zX2Jsb2Nrc2l6ZSk7CisJCW1lbWNweShkYXRhLCBidWYsIGxlbik7CisJCWNvbXByX2xlbiA9IGxlbjsKKwkJY29tcHIgPSBDT01QUl9OT05FOworCX0KKworCXBhZF9sZW4gPSBBTElHTihjb21wcl9sZW4sIDE2KTsKKwltZW1zZXQoZGF0YSArIGNvbXByX2xlbiwgMCwgcGFkX2xlbiAtIGNvbXByX2xlbik7CisKKwlyZXR1cm4gX19sb2dmc193cml0ZV9oZWFkZXIoc3VwZXIsIGhlYWRlciwgY29tcHJfbGVuLCBsZW4sIHR5cGUsIGNvbXByKTsKK30KKworc3RhdGljIHM2NCBsb2dmc19nZXRfZnJlZV9ieXRlcyhzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSwgc2l6ZV90ICpieXRlcywKKwkJaW50IG11c3RfcGFkKQoreworCXUzMiB3cml0ZXNpemUgPSBsb2dmc19zdXBlcihhcmVhLT5hX3NiKS0+c193cml0ZXNpemU7CisJczMyIG9mczsKKwlpbnQgcmV0OworCisJcmV0ID0gbG9nZnNfb3Blbl9hcmVhKGFyZWEsICpieXRlcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlvZnMgPSBhcmVhLT5hX3VzZWRfYnl0ZXM7CisJYXJlYS0+YV91c2VkX2J5dGVzICs9ICpieXRlczsKKworCWlmIChtdXN0X3BhZCkgeworCQlhcmVhLT5hX3VzZWRfYnl0ZXMgPSBBTElHTihhcmVhLT5hX3VzZWRfYnl0ZXMsIHdyaXRlc2l6ZSk7CisJCSpieXRlcyA9IGFyZWEtPmFfdXNlZF9ieXRlcyAtIG9mczsKKwl9CisKKwlyZXR1cm4gZGV2X29mcyhhcmVhLT5hX3NiLCBhcmVhLT5hX3NlZ25vLCBvZnMpOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3dyaXRlX2plX2J1ZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkICpidWYsIHUxNiB0eXBlLAorCQlzaXplX3QgYnVmX2xlbikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBsb2dmc19hcmVhICphcmVhID0gc3VwZXItPnNfam91cm5hbF9hcmVhOworCXN0cnVjdCBsb2dmc19qb3VybmFsX2hlYWRlciAqamggPSBzdXBlci0+c19jb21wcmVzc2VkX2plOworCXNpemVfdCBsZW47CisJaW50IG11c3RfcGFkID0gMDsKKwlzNjQgb2ZzOworCisJbGVuID0gX19sb2dmc193cml0ZV9qZShzYiwgYnVmLCB0eXBlLCBidWZfbGVuKTsKKwlpZiAoamgtPmhfdHlwZSA9PSBjcHVfdG9fYmUxNihKRV9DT01NSVQpKQorCQltdXN0X3BhZCA9IDE7CisKKwlvZnMgPSBsb2dmc19nZXRfZnJlZV9ieXRlcyhhcmVhLCAmbGVuLCBtdXN0X3BhZCk7CisJaWYgKG9mcyA8IDApCisJCXJldHVybiBvZnM7CisJbG9nZnNfYnVmX3dyaXRlKGFyZWEsIG9mcywgc3VwZXItPnNfY29tcHJlc3NlZF9qZSwgbGVuKTsKKwlzdXBlci0+c19qZV9hcnJheVtzdXBlci0+c19ub19qZSsrXSA9IGNwdV90b19iZTY0KG9mcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfd3JpdGVfamUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJdm9pZCogKCp3cml0ZSkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdm9pZCAqc2NyYXRjaCwKKwkJCXUxNiAqdHlwZSwgc2l6ZV90ICpsZW4pKQoreworCXZvaWQgKmJ1ZjsKKwlzaXplX3QgbGVuOworCXUxNiB0eXBlOworCisJYnVmID0gd3JpdGUoc2IsIGxvZ2ZzX3N1cGVyKHNiKS0+c19qZSwgJnR5cGUsICZsZW4pOworCXJldHVybiBsb2dmc193cml0ZV9qZV9idWYoc2IsIGJ1ZiwgdHlwZSwgbGVuKTsKK30KKworaW50IHdyaXRlX2FsaWFzX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IGlubywgdTY0IGJpeCwKKwkJbGV2ZWxfdCBsZXZlbCwgaW50IGNoaWxkX25vLCBfX2JlNjQgdmFsKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX29ial9hbGlhcyAqb2EgPSBzdXBlci0+c19qZTsKKwlpbnQgZXJyID0gMCwgZmlsbCA9IHN1cGVyLT5zX2plX2ZpbGw7CisKKwlsb2dfYWxpYXNlcygibG9nZnNfd3JpdGVfb2JqX2FsaWFzZXMgIyV4KCVsbHgsICVsbHgsICV4LCAleCkgJWxseFxuIiwKKwkJCWZpbGwsIGlubywgYml4LCBsZXZlbCwgY2hpbGRfbm8sIGJlNjRfdG9fY3B1KHZhbCkpOworCW9hW2ZpbGxdLmlubyA9IGNwdV90b19iZTY0KGlubyk7CisJb2FbZmlsbF0uYml4ID0gY3B1X3RvX2JlNjQoYml4KTsKKwlvYVtmaWxsXS52YWwgPSB2YWw7CisJb2FbZmlsbF0ubGV2ZWwgPSAoX19mb3JjZSB1OClsZXZlbDsKKwlvYVtmaWxsXS5jaGlsZF9ubyA9IGNwdV90b19iZTE2KGNoaWxkX25vKTsKKwlmaWxsKys7CisJaWYgKGZpbGwgPj0gc2ItPnNfYmxvY2tzaXplIC8gc2l6ZW9mKCpvYSkpIHsKKwkJZXJyID0gbG9nZnNfd3JpdGVfamVfYnVmKHNiLCBvYSwgSkVfT0JKX0FMSUFTLCBzYi0+c19ibG9ja3NpemUpOworCQlmaWxsID0gMDsKKwl9CisKKwlzdXBlci0+c19qZV9maWxsID0gZmlsbDsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3dyaXRlX29ial9hbGlhc2VzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlpbnQgZXJyOworCisJbG9nX2pvdXJuYWwoImxvZ2ZzX3dyaXRlX29ial9hbGlhc2VzOiAlZCBhbGlhc2VzIHRvIHdyaXRlXG4iLAorCQkJc3VwZXItPnNfbm9fb2JqZWN0X2FsaWFzZXMpOworCXN1cGVyLT5zX2plX2ZpbGwgPSAwOworCWVyciA9IGxvZ2ZzX3dyaXRlX29ial9hbGlhc2VzX3BhZ2VjYWNoZShzYik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWlmIChzdXBlci0+c19qZV9maWxsKQorCQllcnIgPSBsb2dmc193cml0ZV9qZV9idWYoc2IsIHN1cGVyLT5zX2plLCBKRV9PQkpfQUxJQVMsCisJCQkJc3VwZXItPnNfamVfZmlsbAorCQkJCSogc2l6ZW9mKHN0cnVjdCBsb2dmc19vYmpfYWxpYXMpKTsKKwlyZXR1cm4gZXJyOworfQorCisvKgorICogV3JpdGUgYWxsIGpvdXJuYWwgZW50cmllcy4gIFRoZSBnb3RvIGxvZ2ljIGVuc3VyZXMgdGhhdCBhbGwgam91cm5hbCBlbnRyaWVzCisgKiBhcmUgd3JpdHRlbiB3aGVuZXZlciBhIG5ldyBzZWdtZW50IGlzIHVzZWQuICBJdCBpcyB1Z2x5IGFuZCBwb3RlbnRpYWxseSBhCisgKiBiaXQgd2FzdGVmdWwsIGJ1dCByb2J1c3RuZXNzIGlzIG1vcmUgaW1wb3J0YW50LiAgV2l0aCB0aGlzIHdlIGNhbiAqYWx3YXlzKgorICogZXJhc2UgYWxsIGpvdXJuYWwgc2VnbWVudHMgZXhjZXB0IHRoZSBvbmUgY29udGFpbmluZyB0aGUgbW9zdCByZWNlbnQgY29tbWl0LgorICovCit2b2lkIGxvZ2ZzX3dyaXRlX2FuY2hvcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX2FyZWEgKmFyZWEgPSBzdXBlci0+c19qb3VybmFsX2FyZWE7CisJaW50IGksIGVycjsKKworCWlmICghKHN1cGVyLT5zX2ZsYWdzICYgTE9HRlNfU0JfRkxBR19ESVJUWSkpCisJCXJldHVybjsKKwlzdXBlci0+c19mbGFncyAmPSB+TE9HRlNfU0JfRkxBR19ESVJUWTsKKworCUJVR19PTihzdXBlci0+c19mbGFncyAmIExPR0ZTX1NCX0ZMQUdfU0hVVERPV04pOworCW11dGV4X2xvY2soJnN1cGVyLT5zX2pvdXJuYWxfbXV0ZXgpOworCisJLyogRG8gdGhpcyBmaXJzdCBvciBzdWZmZXIgY29ycnVwdGlvbiAqLworCWxvZ2ZzX3N5bmNfc2VnbWVudHMoc2IpOworCWFjY291bnRfc2hhZG93cyhzYik7CisKK2FnYWluOgorCXN1cGVyLT5zX25vX2plID0gMDsKKwlmb3JfZWFjaF9hcmVhKGkpIHsKKwkJaWYgKCFzdXBlci0+c19hcmVhW2ldLT5hX2lzX29wZW4pCisJCQljb250aW51ZTsKKwkJc3VwZXItPnNfc3VtX2luZGV4ID0gaTsKKwkJZXJyID0gbG9nZnNfd3JpdGVfamUoc2IsIGxvZ2ZzX3dyaXRlX2FyZWEpOworCQlpZiAoZXJyKQorCQkJZ290byBhZ2FpbjsKKwl9CisJZXJyID0gbG9nZnNfd3JpdGVfb2JqX2FsaWFzZXMoc2IpOworCWlmIChlcnIpCisJCWdvdG8gYWdhaW47CisJZXJyID0gbG9nZnNfd3JpdGVfamUoc2IsIGxvZ2ZzX3dyaXRlX2VyYXNlY291bnQpOworCWlmIChlcnIpCisJCWdvdG8gYWdhaW47CisJZXJyID0gbG9nZnNfd3JpdGVfamUoc2IsIF9fbG9nZnNfd3JpdGVfYW5jaG9yKTsKKwlpZiAoZXJyKQorCQlnb3RvIGFnYWluOworCWVyciA9IGxvZ2ZzX3dyaXRlX2plKHNiLCBsb2dmc193cml0ZV9keW5zYik7CisJaWYgKGVycikKKwkJZ290byBhZ2FpbjsKKwkvKgorCSAqIE9yZGVyIGlzIGltcGVyYXRpdmUuICBGaXJzdCB3ZSBzeW5jIGFsbCB3cml0ZXMsIGluY2x1ZGluZyB0aGUKKwkgKiBub24tY29tbWl0dGVkIGpvdXJuYWwgd3JpdGVzLiAgVGhlbiB3ZSB3cml0ZSB0aGUgZmluYWwgY29tbWl0IGFuZAorCSAqIHN5bmMgdGhlIGN1cnJlbnQgam91cm5hbCBzZWdtZW50LgorCSAqIFRoZXJlIGlzIGEgdGhlb3JldGljYWwgYnVnIGhlcmUuICBTeW5jaW5nIHRoZSBqb3VybmFsIHNlZ21lbnQgd2lsbAorCSAqIHdyaXRlIGEgbnVtYmVyIG9mIGpvdXJuYWwgZW50cmllcyBhbmQgdGhlIGZpbmFsIGNvbW1pdC4gIEFsbCB0aGVzZQorCSAqIGFyZSB3cml0dGVuIGluIGEgc2luZ2xlIG9wZXJhdGlvbi4gIElmIHRoZSBkZXZpY2UgbGF5ZXIgd3JpdGVzIHRoZQorCSAqIGRhdGEgYmFjay10by1mcm9udCwgdGhlIGNvbW1pdCB3aWxsIHByZWNlZGUgdGhlIG90aGVyIGpvdXJuYWwKKwkgKiBlbnRyaWVzLCBsZWF2aW5nIGEgcmFjZSB3aW5kb3cuCisJICogVHdvIGZpeGVzIGFyZSBwb3NzaWJsZS4gIFByZWZlcnJlZCBpcyB0byBmaXggdGhlIGRldmljZSBsYXllciB0bworCSAqIGVuc3VyZSB3cml0ZXMgaGFwcGVuIGZyb250LXRvLWJhY2suICBBbHRlcm5hdGl2ZWx5IHdlIGNhbiBpbnNlcnQKKwkgKiBhbm90aGVyIGxvZ2ZzX3N5bmNfYXJlYSgpIHN1cGVyLT5zX2Rldm9wcy0+c3luYygpIGNvbWJvIGJlZm9yZQorCSAqIHdyaXRpbmcgdGhlIGNvbW1pdC4KKwkgKi8KKwkvKgorCSAqIE9uIGFub3RoZXIgc3ViamVjdCwgc3VwZXItPnNfZGV2b3BzLT5zeW5jIGlzIHVzdWFsbHkgbm90IG5lY2Vzc2FyeS4KKwkgKiBVbmxlc3MgY2FsbGVkIGZyb20gc3lzX3N5bmMgb3IgZnJpZW5kcywgYSBiYXJyaWVyIHdvdWxkIHN1ZmZpY2UuCisJICovCisJc3VwZXItPnNfZGV2b3BzLT5zeW5jKHNiKTsKKwllcnIgPSBsb2dmc193cml0ZV9qZShzYiwgbG9nZnNfd3JpdGVfY29tbWl0KTsKKwlpZiAoZXJyKQorCQlnb3RvIGFnYWluOworCWxvZ19qb3VybmFsKCJXcml0ZSBjb21taXQgdG8gJWxseFxuIiwKKwkJCWJlNjRfdG9fY3B1KHN1cGVyLT5zX2plX2FycmF5W3N1cGVyLT5zX25vX2plIC0gMV0pKTsKKwlsb2dmc19zeW5jX2FyZWEoYXJlYSk7CisJQlVHX09OKGFyZWEtPmFfdXNlZF9ieXRlcyAhPSBhcmVhLT5hX3dyaXR0ZW5fYnl0ZXMpOworCXN1cGVyLT5zX2Rldm9wcy0+c3luYyhzYik7CisKKwltdXRleF91bmxvY2soJnN1cGVyLT5zX2pvdXJuYWxfbXV0ZXgpOworCXJldHVybjsKK30KKwordm9pZCBkb19sb2dmc19qb3VybmFsX3dsX3Bhc3Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBsb2dmc19hcmVhICphcmVhID0gc3VwZXItPnNfam91cm5hbF9hcmVhOworCXUzMiBzZWdubywgZWM7CisJaW50IGksIGVycjsKKworCWxvZ19qb3VybmFsKCJKb3VybmFsIHJlcXVpcmVzIHdlYXItbGV2ZWxpbmcuXG4iKTsKKwkvKiBEcm9wIG9sZCBzZWdtZW50cyAqLworCWpvdXJuYWxfZm9yX2VhY2goaSkKKwkJaWYgKHN1cGVyLT5zX2pvdXJuYWxfc2VnW2ldKSB7CisJCQlsb2dmc19zZXRfc2VnbWVudF91bnJlc2VydmVkKHNiLAorCQkJCQlzdXBlci0+c19qb3VybmFsX3NlZ1tpXSwKKwkJCQkJc3VwZXItPnNfam91cm5hbF9lY1tpXSk7CisJCQlzdXBlci0+c19qb3VybmFsX3NlZ1tpXSA9IDA7CisJCQlzdXBlci0+c19qb3VybmFsX2VjW2ldID0gMDsKKwkJfQorCS8qIEdldCBuZXcgc2VnbWVudHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3VwZXItPnNfbm9fam91cm5hbF9zZWdzOyBpKyspIHsKKwkJc2Vnbm8gPSBnZXRfYmVzdF9jYW5kKHNiLCAmc3VwZXItPnNfcmVzZXJ2ZV9saXN0LCAmZWMpOworCQlzdXBlci0+c19qb3VybmFsX3NlZ1tpXSA9IHNlZ25vOworCQlzdXBlci0+c19qb3VybmFsX2VjW2ldID0gZWM7CisJCWxvZ2ZzX3NldF9zZWdtZW50X3Jlc2VydmVkKHNiLCBzZWdubyk7CisJfQorCS8qIE1hbnVhbGx5IG1vdmUgam91cm5hbF9hcmVhICovCisJYXJlYS0+YV9zZWdubyA9IHN1cGVyLT5zX2pvdXJuYWxfc2VnWzBdOworCWFyZWEtPmFfaXNfb3BlbiA9IDA7CisJYXJlYS0+YV91c2VkX2J5dGVzID0gMDsKKwkvKiBXcml0ZSBqb3VybmFsICovCisJbG9nZnNfd3JpdGVfYW5jaG9yKHNiKTsKKwkvKiBXcml0ZSBzdXBlcmJsb2NrcyAqLworCWVyciA9IGxvZ2ZzX3dyaXRlX3NiKHNiKTsKKwlCVUdfT04oZXJyKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBsb2dmc19hcmVhX29wcyBqb3VybmFsX2FyZWFfb3BzID0geworCS5nZXRfZnJlZV9zZWdtZW50CT0gam91cm5hbF9nZXRfZnJlZV9zZWdtZW50LAorCS5nZXRfZXJhc2VfY291bnQJPSBqb3VybmFsX2dldF9lcmFzZV9jb3VudCwKKwkuZXJhc2Vfc2VnbWVudAkJPSBqb3VybmFsX2VyYXNlX3NlZ21lbnQsCit9OworCitpbnQgbG9nZnNfaW5pdF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzaXplX3QgYnVmc2l6ZSA9IG1heF90KHNpemVfdCwgc2ItPnNfYmxvY2tzaXplLCBzdXBlci0+c193cml0ZXNpemUpCisJCSsgTUFYX0pPVVJOQUxfSEVBREVSOworCWludCByZXQgPSAtRU5PTUVNOworCisJbXV0ZXhfaW5pdCgmc3VwZXItPnNfam91cm5hbF9tdXRleCk7CisJYnRyZWVfaW5pdF9tZW1wb29sMzIoJnN1cGVyLT5zX3Jlc2VydmVkX3NlZ21lbnRzLCBzdXBlci0+c19idHJlZV9wb29sKTsKKworCXN1cGVyLT5zX2plID0ga3phbGxvYyhidWZzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXN1cGVyLT5zX2plKQorCQlyZXR1cm4gcmV0OworCisJc3VwZXItPnNfY29tcHJlc3NlZF9qZSA9IGt6YWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdXBlci0+c19jb21wcmVzc2VkX2plKQorCQlyZXR1cm4gcmV0OworCisJc3VwZXItPnNfbWFzdGVyX2lub2RlID0gbG9nZnNfbmV3X21ldGFfaW5vZGUoc2IsIExPR0ZTX0lOT19NQVNURVIpOworCWlmIChJU19FUlIoc3VwZXItPnNfbWFzdGVyX2lub2RlKSkKKwkJcmV0dXJuIFBUUl9FUlIoc3VwZXItPnNfbWFzdGVyX2lub2RlKTsKKworCXJldCA9IGxvZ2ZzX3JlYWRfam91cm5hbChzYik7CisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXNlcnZlX3NiX2FuZF9qb3VybmFsKHNiKTsKKwlsb2dmc19jYWxjX2ZyZWUoc2IpOworCisJc3VwZXItPnNfam91cm5hbF9hcmVhLT5hX29wcyA9ICZqb3VybmFsX2FyZWFfb3BzOworCXJldHVybiAwOworfQorCit2b2lkIGxvZ2ZzX2NsZWFudXBfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisKKwlidHJlZV9ncmltX3Zpc2l0b3IzMigmc3VwZXItPnNfcmVzZXJ2ZWRfc2VnbWVudHMsIDAsIE5VTEwpOworCWRlc3Ryb3lfbWV0YV9pbm9kZShzdXBlci0+c19tYXN0ZXJfaW5vZGUpOworCXN1cGVyLT5zX21hc3Rlcl9pbm9kZSA9IE5VTEw7CisKKwlrZnJlZShzdXBlci0+c19jb21wcmVzc2VkX2plKTsKKwlrZnJlZShzdXBlci0+c19qZSk7Cit9CmRpZmYgLS1naXQgYS9mcy9sb2dmcy9sb2dmcy5oIGIvZnMvbG9nZnMvbG9nZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjk3Nzk0Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvbG9nZnMvbG9nZnMuaApAQCAtMCwwICsxLDcyNCBAQAorLyoKKyAqIGZzL2xvZ2ZzL2xvZ2ZzLmgKKyAqCisgKiBBcyBzaG91bGQgYmUgb2J2aW91cyBmb3IgTGludXgga2VybmVsIGNvZGUsIGxpY2Vuc2UgaXMgR1BMdjIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBKb2VybiBFbmdlbCA8am9lcm5AbG9nZnMub3JnPgorICoKKyAqIFByaXZhdGUgaGVhZGVyIGZvciBsb2dmcy4KKyAqLworI2lmbmRlZiBGU19MT0dGU19MT0dGU19ICisjZGVmaW5lIEZTX0xPR0ZTX0xPR0ZTX0gKKworI3VuZGVmIF9fQ0hFQ0tfRU5ESUFOX18KKyNkZWZpbmUgX19DSEVDS19FTkRJQU5fXworCisjaW5jbHVkZSA8bGludXgvYnRyZWUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSAibG9nZnNfYWJpLmgiCisKKyNkZWZpbmUgTE9HRlNfREVCVUdfU1VQRVIJKDB4MDAwMSkKKyNkZWZpbmUgTE9HRlNfREVCVUdfU0VHTUVOVAkoMHgwMDAyKQorI2RlZmluZSBMT0dGU19ERUJVR19KT1VSTkFMCSgweDAwMDQpCisjZGVmaW5lIExPR0ZTX0RFQlVHX0RJUgkJKDB4MDAwOCkKKyNkZWZpbmUgTE9HRlNfREVCVUdfRklMRQkoMHgwMDEwKQorI2RlZmluZSBMT0dGU19ERUJVR19JTk9ERQkoMHgwMDIwKQorI2RlZmluZSBMT0dGU19ERUJVR19SRUFEV1JJVEUJKDB4MDA0MCkKKyNkZWZpbmUgTE9HRlNfREVCVUdfR0MJCSgweDAwODApCisjZGVmaW5lIExPR0ZTX0RFQlVHX0dDX05PSVNZCSgweDAxMDApCisjZGVmaW5lIExPR0ZTX0RFQlVHX0FMSUFTRVMJKDB4MDIwMCkKKyNkZWZpbmUgTE9HRlNfREVCVUdfQkxPQ0tNT1ZFCSgweDA0MDApCisjZGVmaW5lIExPR0ZTX0RFQlVHX0FMTAkJKDB4ZmZmZmZmZmYpCisKKyNkZWZpbmUgTE9HRlNfREVCVUcJCSgweDAxKQorLyoKKyAqIFRvIGVuYWJsZSBzcGVjaWZpYyBsb2cgbWVzc2FnZXMsIHNpbXBseSBkZWZpbmUgTE9HRlNfREVCVUcgdG8gbWF0Y2ggYW55CisgKiBvciBhbGwgb2YgdGhlIGFib3ZlLgorICovCisjaWZuZGVmIExPR0ZTX0RFQlVHCisjZGVmaW5lIExPR0ZTX0RFQlVHCQkoMCkKKyNlbmRpZgorCisjZGVmaW5lIGxvZ19jb25kKGNvbmQsIGZtdCwgYXJnLi4uKSBkbyB7CVwKKwlpZiAoY29uZCkJCQkJXAorCQlwcmludGsoS0VSTl9ERUJVRyBmbXQsICMjYXJnKTsJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBsb2dfc3VwZXIoZm10LCBhcmcuLi4pIFwKKwlsb2dfY29uZChMT0dGU19ERUJVRyAmIExPR0ZTX0RFQlVHX1NVUEVSLCBmbXQsICMjYXJnKQorI2RlZmluZSBsb2dfc2VnbWVudChmbXQsIGFyZy4uLikgXAorCWxvZ19jb25kKExPR0ZTX0RFQlVHICYgTE9HRlNfREVCVUdfU0VHTUVOVCwgZm10LCAjI2FyZykKKyNkZWZpbmUgbG9nX2pvdXJuYWwoZm10LCBhcmcuLi4pIFwKKwlsb2dfY29uZChMT0dGU19ERUJVRyAmIExPR0ZTX0RFQlVHX0pPVVJOQUwsIGZtdCwgIyNhcmcpCisjZGVmaW5lIGxvZ19kaXIoZm10LCBhcmcuLi4pIFwKKwlsb2dfY29uZChMT0dGU19ERUJVRyAmIExPR0ZTX0RFQlVHX0RJUiwgZm10LCAjI2FyZykKKyNkZWZpbmUgbG9nX2ZpbGUoZm10LCBhcmcuLi4pIFwKKwlsb2dfY29uZChMT0dGU19ERUJVRyAmIExPR0ZTX0RFQlVHX0ZJTEUsIGZtdCwgIyNhcmcpCisjZGVmaW5lIGxvZ19pbm9kZShmbXQsIGFyZy4uLikgXAorCWxvZ19jb25kKExPR0ZTX0RFQlVHICYgTE9HRlNfREVCVUdfSU5PREUsIGZtdCwgIyNhcmcpCisjZGVmaW5lIGxvZ19yZWFkd3JpdGUoZm10LCBhcmcuLi4pIFwKKwlsb2dfY29uZChMT0dGU19ERUJVRyAmIExPR0ZTX0RFQlVHX1JFQURXUklURSwgZm10LCAjI2FyZykKKyNkZWZpbmUgbG9nX2djKGZtdCwgYXJnLi4uKSBcCisJbG9nX2NvbmQoTE9HRlNfREVCVUcgJiBMT0dGU19ERUJVR19HQywgZm10LCAjI2FyZykKKyNkZWZpbmUgbG9nX2djX25vaXN5KGZtdCwgYXJnLi4uKSBcCisJbG9nX2NvbmQoTE9HRlNfREVCVUcgJiBMT0dGU19ERUJVR19HQ19OT0lTWSwgZm10LCAjI2FyZykKKyNkZWZpbmUgbG9nX2FsaWFzZXMoZm10LCBhcmcuLi4pIFwKKwlsb2dfY29uZChMT0dGU19ERUJVRyAmIExPR0ZTX0RFQlVHX0FMSUFTRVMsIGZtdCwgIyNhcmcpCisjZGVmaW5lIGxvZ19ibG9ja21vdmUoZm10LCBhcmcuLi4pIFwKKwlsb2dfY29uZChMT0dGU19ERUJVRyAmIExPR0ZTX0RFQlVHX0JMT0NLTU9WRSwgZm10LCAjI2FyZykKKworI2RlZmluZSBQR19wcmVfbG9ja2VkCQlQR19vd25lcl9wcml2XzEKKyNkZWZpbmUgUGFnZVByZUxvY2tlZChwYWdlKQl0ZXN0X2JpdChQR19wcmVfbG9ja2VkLCAmKHBhZ2UpLT5mbGFncykKKyNkZWZpbmUgU2V0UGFnZVByZUxvY2tlZChwYWdlKQlzZXRfYml0KFBHX3ByZV9sb2NrZWQsICYocGFnZSktPmZsYWdzKQorI2RlZmluZSBDbGVhclBhZ2VQcmVMb2NrZWQocGFnZSkgY2xlYXJfYml0KFBHX3ByZV9sb2NrZWQsICYocGFnZSktPmZsYWdzKQorCisvKiBGSVhNRTogVGhpcyBzaG91bGQgcmVhbGx5IGJlIHNvbWV3aGVyZSBpbiB0aGUgNjRiaXQgYXJlYS4gKi8KKyNkZWZpbmUgTE9HRlNfTElOS19NQVgJCSgxPDwzMCkKKworLyogUmVhZC1vbmx5IGZpbGVzeXN0ZW0gKi8KKyNkZWZpbmUgTE9HRlNfU0JfRkxBR19STwkweDAwMDEKKyNkZWZpbmUgTE9HRlNfU0JfRkxBR19ESVJUWQkweDAwMDIKKyNkZWZpbmUgTE9HRlNfU0JfRkxBR19PQkpfQUxJQVMJMHgwMDA0CisjZGVmaW5lIExPR0ZTX1NCX0ZMQUdfU0hVVERPV04JMHgwMDA4CisKKy8qIFdyaXRlIENvbnRyb2wgRmxhZ3MgKi8KKyNkZWZpbmUgV0ZfTE9DSwkJCTB4MDEgLyogdGFrZSB3cml0ZSBsb2NrICovCisjZGVmaW5lIFdGX1dSSVRFCQkweDAyIC8qIHdyaXRlIGJsb2NrICovCisjZGVmaW5lIFdGX0RFTEVURQkJMHgwNCAvKiBkZWxldGUgb2xkIGJsb2NrICovCisKK3R5cGVkZWYgdTggX19iaXR3aXNlIGxldmVsX3Q7Cit0eXBlZGVmIHU4IF9fYml0d2lzZSBnY19sZXZlbF90OworCisjZGVmaW5lIExFVkVMKGxldmVsKSAoKF9fZm9yY2UgbGV2ZWxfdCkobGV2ZWwpKQorI2RlZmluZSBHQ19MRVZFTChnY19sZXZlbCkgKChfX2ZvcmNlIGdjX2xldmVsX3QpKGdjX2xldmVsKSkKKworI2RlZmluZSBTVUJMRVZFTChsZXZlbCkgKCAodm9pZCkoKGxldmVsKSA9PSBMRVZFTCgxKSksCVwKKwkJKF9fZm9yY2UgbGV2ZWxfdCkoKF9fZm9yY2UgdTgpKGxldmVsKSAtIDEpICkKKworLyoqCisgKiBzdHJ1Y3QgbG9nZnNfYXJlYSAtIGFyZWEgbWFuYWdlbWVudCBpbmZvcm1hdGlvbgorICoKKyAqIEBhX3NiOgkJCXRoZSBzdXBlcmJsb2NrIHRoaXMgYXJlYSBiZWxvbmdzIHRvCisgKiBAYV9pc19vcGVuOgkJCTEgaWYgdGhlIGFyZWEgaXMgY3VycmVudGx5IG9wZW4sIGVsc2UgMAorICogQGFfc2Vnbm86CQkJc2VnbWVudCBudW1iZXIgb2YgYXJlYQorICogQGFfd3JpdHRlbl9ieXRlczoJCW51bWJlciBvZiBieXRlcyBhbHJlYWR5IHdyaXR0ZW4gYmFjaworICogQGFfdXNlZF9ieXRlczoJCW51bWJlciBvZiB1c2VkIGJ5dGVzCisgKiBAYV9vcHM6CQkJYXJlYSBvcGVyYXRpb25zIChlaXRoZXIgam91cm5hbCBvciBvc3RvcmUpCisgKiBAYV9lcmFzZV9jb3VudDoJCWVyYXNlIGNvdW50CisgKiBAYV9sZXZlbDoJCQlHQyBsZXZlbAorICovCitzdHJ1Y3QgbG9nZnNfYXJlYSB7IC8qIGEgc2VnbWVudCBvcGVuIGZvciB3cml0aW5nICovCisJc3RydWN0IHN1cGVyX2Jsb2NrICphX3NiOworCWludAlhX2lzX29wZW47CisJdTMyCWFfc2Vnbm87CisJdTMyCWFfd3JpdHRlbl9ieXRlczsKKwl1MzIJYV91c2VkX2J5dGVzOworCWNvbnN0IHN0cnVjdCBsb2dmc19hcmVhX29wcyAqYV9vcHM7CisJdTMyCWFfZXJhc2VfY291bnQ7CisJZ2NfbGV2ZWxfdCBhX2xldmVsOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbG9nZnNfYXJlYV9vcHMgLSBhcmVhIG9wZXJhdGlvbnMKKyAqCisgKiBAZ2V0X2ZyZWVfc2VnbWVudDoJCWZpbGwgYXJlYS0+b2ZzIHdpdGggdGhlIG9mZnNldCBvZiBhIGZyZWUgc2VnbWVudAorICogQGdldF9lcmFzZV9jb3VudDoJCWZpbGwgYXJlYS0+ZXJhc2VfY291bnQgKG5lZWRzIGFyZWEtPm9mcykKKyAqIEBlcmFzZV9zZWdtZW50OgkJZXJhc2UgYW5kIHNldHVwIHNlZ21lbnQKKyAqLworc3RydWN0IGxvZ2ZzX2FyZWFfb3BzIHsKKwl2b2lkCSgqZ2V0X2ZyZWVfc2VnbWVudCkoc3RydWN0IGxvZ2ZzX2FyZWEgKmFyZWEpOworCXZvaWQJKCpnZXRfZXJhc2VfY291bnQpKHN0cnVjdCBsb2dmc19hcmVhICphcmVhKTsKKwlpbnQJKCplcmFzZV9zZWdtZW50KShzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSk7Cit9OworCisvKioKKyAqIHN0cnVjdCBsb2dmc19kZXZpY2Vfb3BzIC0gZGV2aWNlIGFjY2VzcyBvcGVyYXRpb25zCisgKgorICogQHJlYWRwYWdlOgkJCXJlYWQgb25lIHBhZ2UgKG1tIHBhZ2UpCisgKiBAd3JpdGVzZWc6CQkJd3JpdGUgb25lIHNlZ21lbnQuICBtYXkgYmUgYSBwYXJ0aWFsIHNlZ21lbnQKKyAqIEBlcmFzZToJCQllcmFzZSBvbmUgc2VnbWVudAorICogQHJlYWQ6CQkJcmVhZCBmcm9tIHRoZSBkZXZpY2UKKyAqIEBlcmFzZToJCQllcmFzZSBwYXJ0IG9mIHRoZSBkZXZpY2UKKyAqLworc3RydWN0IGxvZ2ZzX2RldmljZV9vcHMgeworCXN0cnVjdCBwYWdlICooKmZpbmRfZmlyc3Rfc2IpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCAqb2ZzKTsKKwlzdHJ1Y3QgcGFnZSAqKCpmaW5kX2xhc3Rfc2IpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCAqb2ZzKTsKKwlpbnQgKCp3cml0ZV9zYikoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHBhZ2UgKnBhZ2UpOworCWludCAoKnJlYWRwYWdlKSh2b2lkICpfc2IsIHN0cnVjdCBwYWdlICpwYWdlKTsKKwl2b2lkICgqd3JpdGVzZWcpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBvZnMsIHNpemVfdCBsZW4pOworCWludCAoKmVyYXNlKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBsb2ZmX3Qgb2ZzLCBzaXplX3QgbGVuLAorCQkJaW50IGVuc3VyZV93cml0ZSk7CisJdm9pZCAoKnN5bmMpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworCXZvaWQgKCpwdXRfZGV2aWNlKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK307CisKKy8qKgorICogc3RydWN0IGNhbmRpZGF0ZV9saXN0IC0gbGlzdCBvZiBzaW1pbGFyIGNhbmRpZGF0ZXMKKyAqLworc3RydWN0IGNhbmRpZGF0ZV9saXN0IHsKKwlzdHJ1Y3QgcmJfcm9vdCByYl90cmVlOworCWludCBjb3VudDsKKwlpbnQgbWF4Y291bnQ7CisJaW50IHNvcnRfYnlfZWM7Cit9OworCisvKioKKyAqIHN0cnVjdCBnY19jYW5kaWRhdGUgLSAiY2FuZGlkYXRlIiBzZWdtZW50IHRvIGJlIGdhcmJhZ2UgY29sbGVjdGVkIG5leHQKKyAqCisgKiBAbGlzdDoJCQlsaXN0IChlaXRoZXIgZnJlZSBvZiBsb3cpCisgKiBAc2Vnbm86CQkJc2VnbWVudCBudW1iZXIKKyAqIEB2YWxpZDoJCQludW1iZXIgb2YgdmFsaWQgYnl0ZXMKKyAqIEBlcmFzZV9jb3VudDoJCWVyYXNlIGNvdW50IG9mIHNlZ21lbnQKKyAqIEBkaXN0OgkJCWRpc3RhbmNlIGZyb20gdHJlZSByb290CisgKgorICogQ2FuZGlkYXRlcyBjYW4gYmUgb24gdHdvIGxpc3RzLiAgVGhlIGZyZWUgbGlzdCBjb250YWlucyBlbGVjdGVlcyByYXRoZXIKKyAqIHRoYW4gY2FuZGlkYXRlcyAtIHNlZ21lbnRzIHRoYXQgbm8gbG9uZ2VyIGNvbnRhaW4gYW55IHZhbGlkIGRhdGEuICBUaGUKKyAqIGxvdyBsaXN0IGNvbnRhaW5zIGNhbmRpZGF0ZXMgdG8gYmUgcGlja2VkIGZvciBHQy4gIEl0IHNob3VsZCBiZSBrZXB0CisgKiBzaG9ydC4gIEl0IGlzIG5vdCByZXF1aXJlZCB0byBhbHdheXMgcGljayBhIHBlcmZlY3QgY2FuZGlkYXRlLiAgSW4gdGhlCisgKiB3b3JzdCBjYXNlIEdDIHdpbGwgaGF2ZSB0byBtb3ZlIG1vcmUgZGF0YSB0aGFuIGFic29sdXRlbHkgbmVjZXNzYXJ5LgorICovCitzdHJ1Y3QgZ2NfY2FuZGlkYXRlIHsKKwlzdHJ1Y3QgcmJfbm9kZSByYl9ub2RlOworCXN0cnVjdCBjYW5kaWRhdGVfbGlzdCAqbGlzdDsKKwl1MzIJc2Vnbm87CisJdTMyCXZhbGlkOworCXUzMgllcmFzZV9jb3VudDsKKwl1OAlkaXN0OworfTsKKworLyoqCisgKiBzdHJ1Y3QgbG9nZnNfam91cm5hbF9lbnRyeSAtIHRlbXBvcmFyeSBzdHJ1Y3R1cmUgdXNlZCBkdXJpbmcgam91cm5hbCBzY2FuCisgKgorICogQHVzZWQ6CisgKiBAdmVyc2lvbjoJCQlub3JtYWxpemVkIHZlcnNpb24KKyAqIEBsZW46CQkJbGVuZ3RoCisgKiBAb2Zmc2V0OgkJCW9mZnNldAorICovCitzdHJ1Y3QgbG9nZnNfam91cm5hbF9lbnRyeSB7CisJaW50IHVzZWQ7CisJczE2IHZlcnNpb247CisJdTE2IGxlbjsKKwl1MTYgZGF0YWxlbjsKKwl1NjQgb2Zmc2V0OworfTsKKworZW51bSB0cmFuc2FjdGlvbl9zdGF0ZSB7CisJQ1JFQVRFXzEgPSAxLAorCUNSRUFURV8yLAorCVVOTElOS18xLAorCVVOTElOS18yLAorCUNST1NTX1JFTkFNRV8xLAorCUNST1NTX1JFTkFNRV8yLAorCVRBUkdFVF9SRU5BTUVfMSwKKwlUQVJHRVRfUkVOQU1FXzIsCisJVEFSR0VUX1JFTkFNRV8zCit9OworCisvKioKKyAqIHN0cnVjdCBsb2dmc190cmFuc2FjdGlvbiAtIGVzc2VudGlhbCBmaWVsZHMgdG8gc3VwcG9ydCBhdG9taWMgZGlyb3BzCisgKgorICogQGlubzoJCQl0YXJnZXQgaW5vZGUKKyAqIEBkaXI6CQkJaW5vZGUgb2YgZGlyZWN0b3J5IGNvbnRhaW5pbmcgZGVudHJ5CisgKiBAcG9zOgkJCXBvcyBvZiBkZW50cnkgaW4gZGlyZWN0b3J5CisgKi8KK3N0cnVjdCBsb2dmc190cmFuc2FjdGlvbiB7CisJZW51bSB0cmFuc2FjdGlvbl9zdGF0ZSBzdGF0ZTsKKwl1NjQJIGlubzsKKwl1NjQJIGRpcjsKKwl1NjQJIHBvczsKK307CisKKy8qKgorICogc3RydWN0IGxvZ2ZzX3NoYWRvdyAtIG9sZCBibG9jayBpbiB0aGUgc2hhZG93IG9mIGEgbm90LXlldC1jb21taXR0ZWQgbmV3IG9uZQorICogQG9sZF9vZnM6CQkJb2Zmc2V0IG9mIG9sZCBibG9jayBvbiBtZWRpdW0KKyAqIEBuZXdfb2ZzOgkJCW9mZnNldCBvZiBuZXcgYmxvY2sgb24gbWVkaXVtCisgKiBAaW5vOgkJCWlub2RlIG51bWJlcgorICogQGJpeDoJCQlibG9jayBpbmRleAorICogQG9sZF9sZW46CQkJc2l6ZSBvZiBvbGQgYmxvY2ssIGluY2x1ZGluZyBoZWFkZXIKKyAqIEBuZXdfbGVuOgkJCXNpemUgb2YgbmV3IGJsb2NrLCBpbmNsdWRpbmcgaGVhZGVyCisgKiBAbGV2ZWw6CQkJYmxvY2sgbGV2ZWwKKyAqLworc3RydWN0IGxvZ2ZzX3NoYWRvdyB7CisJdTY0IG9sZF9vZnM7CisJdTY0IG5ld19vZnM7CisJdTY0IGlubzsKKwl1NjQgYml4OworCWludCBvbGRfbGVuOworCWludCBuZXdfbGVuOworCWdjX2xldmVsX3QgZ2NfbGV2ZWw7Cit9OworCisvKioKKyAqIHN0cnVjdCBzaGFkb3dfdHJlZQorICogQG5ldzoJCQlzaGFkb3dzIHdoZXJlIG9sZF9vZnM9PTAsIGluZGV4ZWQgYnkgbmV3X29mcworICogQG9sZDoJCQlzaGFkb3dzIHdoZXJlIG9sZF9vZnMhPTAsIGluZGV4ZWQgYnkgb2xkX29mcworICovCitzdHJ1Y3Qgc2hhZG93X3RyZWUgeworCXN0cnVjdCBidHJlZV9oZWFkNjQgbmV3OworCXN0cnVjdCBidHJlZV9oZWFkNjQgb2xkOworfTsKKworc3RydWN0IG9iamVjdF9hbGlhc19pdGVtIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJX19iZTY0IHZhbDsKKwlpbnQgY2hpbGRfbm87Cit9OworCisvKioKKyAqIHN0cnVjdCBsb2dmc19ibG9jayAtIGNvbnRhaW5zIGFueSBibG9jayBzdGF0ZQorICogQHR5cGU6CQkJaW5kaXJlY3QgYmxvY2sgb3IgaW5vZGUKKyAqIEBmdWxsOgkJCW51bWJlciBvZiBmdWxseSBwb3B1bGF0ZWQgY2hpbGRyZW4KKyAqIEBwYXJ0aWFsOgkJCW51bWJlciBvZiBwYXJ0aWFsbHkgcG9wdWxhdGVkIGNoaWxkcmVuCisgKgorICogTW9zdCBibG9ja3MgYXJlIGRpcmVjdGx5IHJlcHJlc2VudGVkIGJ5IHBhZ2UgY2FjaGUgcGFnZXMuICBCdXQgd2hlbiBhIGJsb2NrCisgKiBiZWNvbWVzIGRpcnR5LCBpcyBwYXJ0IG9mIGEgdHJhbnNhY3Rpb24sIGNvbnRhaW5zIGFsaWFzZXMgb3IgaXMgb3RoZXJ3aXNlCisgKiBzcGVjaWFsLCBhIHN0cnVjdCBsb2dmc19ibG9jayBpcyBhbGxvY2F0ZWQgdG8gdHJhY2sgdGhlIGFkZGl0aW9uYWwgc3RhdGUuCisgKiBJbm9kZXMgYXJlIHZlcnkgc2ltaWxhciB0byBpbmRpcmVjdCBibG9ja3MsIHNvIHRoZXkgY2FuIGFsc28gZ2V0IG9uZSBvZgorICogdGhlc2Ugc3RydWN0dXJlcyBhZGRlZCB3aGVuIGFwcHJvcHJpYXRlLgorICovCisjZGVmaW5lIEJMT0NLX0lORElSRUNUCTEJLyogSW5kaXJlY3QgYmxvY2sgKi8KKyNkZWZpbmUgQkxPQ0tfSU5PREUJMgkvKiBJbm9kZSAqLworc3RydWN0IGxvZ2ZzX2Jsb2NrX29wczsKK3N0cnVjdCBsb2dmc19ibG9jayB7CisJc3RydWN0IGxpc3RfaGVhZCBhbGlhc19saXN0OworCXN0cnVjdCBsaXN0X2hlYWQgaXRlbV9saXN0OworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CisJdTY0IGlubzsKKwl1NjQgYml4OworCWxldmVsX3QgbGV2ZWw7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgbG9nZnNfdHJhbnNhY3Rpb24gKnRhOworCXVuc2lnbmVkIGxvbmcgYWxpYXNfbWFwW0xPR0ZTX0JMT0NLX0ZBQ1RPUiAvIEJJVFNfUEVSX0xPTkddOworCXN0cnVjdCBsb2dmc19ibG9ja19vcHMgKm9wczsKKwlpbnQgZnVsbDsKKwlpbnQgcGFydGlhbDsKKwlpbnQgcmVzZXJ2ZWRfYnl0ZXM7Cit9OworCit0eXBlZGVmIGludCB3cml0ZV9hbGlhc190KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBpbm8sIHU2NCBiaXgsCisJCWxldmVsX3QgbGV2ZWwsIGludCBjaGlsZF9ubywgX19iZTY0IHZhbCk7CitzdHJ1Y3QgbG9nZnNfYmxvY2tfb3BzIHsKKwl2b2lkCSgqd3JpdGVfYmxvY2spKHN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2spOworCWdjX2xldmVsX3QJKCpibG9ja19sZXZlbCkoc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jayk7CisJdm9pZAkoKmZyZWVfYmxvY2spKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBsb2dmc19ibG9jaypibG9jayk7CisJaW50CSgqd3JpdGVfYWxpYXMpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQlzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrLAorCQkJd3JpdGVfYWxpYXNfdCAqd3JpdGVfb25lX2FsaWFzKTsKK307CisKK3N0cnVjdCBsb2dmc19zdXBlciB7CisJc3RydWN0IG10ZF9pbmZvICpzX210ZDsJCQkvKiB1bmRlcmx5aW5nIGRldmljZSAqLworCXN0cnVjdCBibG9ja19kZXZpY2UgKnNfYmRldjsJCS8qIHVuZGVybHlpbmcgZGV2aWNlICovCisJY29uc3Qgc3RydWN0IGxvZ2ZzX2RldmljZV9vcHMgKnNfZGV2b3BzOy8qIGRldmljZSBhY2Nlc3MgKi8KKwlzdHJ1Y3QgaW5vZGUJKnNfbWFzdGVyX2lub2RlOwkvKiBpbm9kZSBmaWxlICovCisJc3RydWN0IGlub2RlCSpzX3NlZ2ZpbGVfaW5vZGU7CS8qIHNlZ21lbnQgZmlsZSAqLworCXN0cnVjdCBpbm9kZSAqc19tYXBwaW5nX2lub2RlOwkJLyogZGV2aWNlIG1hcHBpbmcgKi8KKwlhdG9taWNfdCBzX3BlbmRpbmdfd3JpdGVzOwkJLyogb3V0c3RhbnRpbmcgYmlvcyAqLworCWxvbmcJIHNfZmxhZ3M7CisJbWVtcG9vbF90ICpzX2J0cmVlX3Bvb2w7CQkvKiBmb3IgYnRyZWUgbm9kZXMgKi8KKwltZW1wb29sX3QgKnNfYWxpYXNfcG9vbDsJCS8qIGFsaWFzZXMgaW4gc2VnbWVudC5jICovCisJdTY0CSBzX2ZlYXR1cmVfaW5jb21wYXQ7CisJdTY0CSBzX2ZlYXR1cmVfcm9fY29tcGF0OworCXU2NAkgc19mZWF0dXJlX2NvbXBhdDsKKwl1NjQJIHNfZmVhdHVyZV9mbGFnczsKKwl1NjQJIHNfc2Jfb2ZzWzJdOworCXN0cnVjdCBwYWdlICpzX2VyYXNlX3BhZ2U7CQkvKiBmb3IgZGV2X2JkZXYuYyAqLworCS8qIGFsaWFzLmMgZmllbGRzICovCisJc3RydWN0IGJ0cmVlX2hlYWQzMiBzX3NlZ21lbnRfYWxpYXM7CS8qIHJlbWFwcGVkIHNlZ21lbnRzICovCisJaW50CSBzX25vX29iamVjdF9hbGlhc2VzOworCXN0cnVjdCBsaXN0X2hlYWQgc19vYmplY3RfYWxpYXM7CS8qIHJlbWFwcGVkIG9iamVjdHMgKi8KKwlzdHJ1Y3QgYnRyZWVfaGVhZDEyOCBzX29iamVjdF9hbGlhc190cmVlOyAvKiByZW1hcHBlZCBvYmplY3RzICovCisJc3RydWN0IG11dGV4IHNfb2JqZWN0X2FsaWFzX211dGV4OworCS8qIGRpci5jIGZpZWxkcyAqLworCXN0cnVjdCBtdXRleCBzX2Rpcm9wX211dGV4OwkJLyogZm9yIGNyZWF0L3VubGluay9yZW5hbWUgKi8KKwl1NjQJIHNfdmljdGltX2lubzsJCQkvKiB1c2VkIGZvciBhdG9taWMgZGlyLW9wcyAqLworCXU2NAkgc19yZW5hbWVfZGlyOwkJCS8qIHNvdXJjZSBkaXJlY3RvcnkgaW5vICovCisJdTY0CSBzX3JlbmFtZV9wb3M7CQkJLyogcG9zaXRpb24gb2Ygc291cmNlIGRkICovCisJLyogZ2MuYyBmaWVsZHMgKi8KKwlsb25nCSBzX3NlZ3NpemU7CQkJLyogc2l6ZSBvZiBhIHNlZ21lbnQgKi8KKwlpbnQJIHNfc2Vnc2hpZnQ7CQkJLyogbG9nMiBvZiBzZWdtZW50IHNpemUgKi8KKwlsb25nCSBzX3NlZ21hc2s7CQkJLyogMSA8PCBzX3NlZ3NoaWZ0IC0gMSAqLworCWxvbmcJIHNfbm9fc2VnczsJCQkvKiBzZWdtZW50cyBvbiBkZXZpY2UgKi8KKwlsb25nCSBzX25vX2pvdXJuYWxfc2VnczsJCS8qIHNlZ21lbnRzIHVzZWQgZm9yIGpvdXJuYWwgKi8KKwlsb25nCSBzX25vX2Jsb2NrczsJCQkvKiBibG9ja3MgcGVyIHNlZ21lbnQgKi8KKwlsb25nCSBzX3dyaXRlc2l6ZTsJCQkvKiBtaW5pbXVtIHdyaXRlIHNpemUgKi8KKwlpbnQJIHNfd3JpdGVzaGlmdDsJCQkvKiBsb2cyIG9mIHdyaXRlIHNpemUgKi8KKwl1NjQJIHNfc2l6ZTsJCQkvKiBmaWxlc3lzdGVtIHNpemUgKi8KKwlzdHJ1Y3QgbG9nZnNfYXJlYSAqc19hcmVhW0xPR0ZTX05PX0FSRUFTXTsJLyogb3BlbiBzZWdtZW50IGFycmF5ICovCisJdTY0CSBzX2dlYzsJCQkJLyogZ2xvYmFsIGVyYXNlIGNvdW50ICovCisJdTY0CSBzX3dsX2dlY19vc3RvcmU7CQkvKiB0aW1lIG9mIGxhc3Qgd2wgZXZlbnQgKi8KKwl1NjQJIHNfd2xfZ2VjX2pvdXJuYWw7CQkvKiB0aW1lIG9mIGxhc3Qgd2wgZXZlbnQgKi8KKwl1NjQJIHNfc3dlZXBlcjsJCQkvKiBjdXJyZW50IHN3ZWVwZXIgcG9zICovCisJdTgJIHNfaWZpbGVfbGV2ZWxzOwkJLyogbWF4IGxldmVsIG9mIGlmaWxlICovCisJdTgJIHNfaWJsb2NrX2xldmVsczsJCS8qIG1heCBsZXZlbCBvZiByZWd1bGFyIGZpbGVzICovCisJdTgJIHNfZGF0YV9sZXZlbHM7CQkJLyogIyBvZiBzZWdtZW50cyB0byBsZWFmIGJsb2NrKi8KKwl1OAkgc190b3RhbF9sZXZlbHM7CQkvKiBzdW0gb2YgYWJvdmUgdGhyZWUgKi8KKwlzdHJ1Y3QgYnRyZWVfaGVhZDMyIHNfY2FuZF90cmVlOwkvKiBhbGwgY2FuZGlkYXRlcyAqLworCXN0cnVjdCBjYW5kaWRhdGVfbGlzdCBzX2ZyZWVfbGlzdDsJLyogMTAwJSBmcmVlIHNlZ21lbnRzICovCisJc3RydWN0IGNhbmRpZGF0ZV9saXN0IHNfcmVzZXJ2ZV9saXN0OwkvKiBCYWQgc2VnbWVudCByZXNlcnZlICovCisJc3RydWN0IGNhbmRpZGF0ZV9saXN0IHNfbG93X2xpc3RbTE9HRlNfTk9fQVJFQVNdOy8qIGdvb2QgY2FuZGlkYXRlcyAqLworCXN0cnVjdCBjYW5kaWRhdGVfbGlzdCBzX2VjX2xpc3Q7CS8qIHdlYXIgbGV2ZWwgY2FuZGlkYXRlcyAqLworCXN0cnVjdCBidHJlZV9oZWFkMzIgc19yZXNlcnZlZF9zZWdtZW50czsvKiBzYiwgam91cm5hbCwgYmFkLCBldGMuICovCisJLyogaW5vZGUuYyBmaWVsZHMgKi8KKwl1NjQJIHNfbGFzdF9pbm87CQkJLyogaGlnaGVzdCBpbm8gdXNlZCAqLworCWxvbmcJIHNfaW5vc190aWxsX3dyYXA7CisJdTMyCSBzX2dlbmVyYXRpb247CQkJLyogaV9nZW5lcmF0aW9uIGZvciBuZXcgZmlsZXMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIHNfZnJlZWluZ19saXN0OwkvKiBpbm9kZXMgYmVpbmcgZnJlZWQgKi8KKwkvKiBqb3VybmFsLmMgZmllbGRzICovCisJc3RydWN0IG11dGV4IHNfam91cm5hbF9tdXRleDsKKwl2b2lkCSpzX2plOwkJCQkvKiBqb3VybmFsIGVudHJ5IHRvIGNvbXByZXNzICovCisJdm9pZAkqc19jb21wcmVzc2VkX2plOwkJLyogYmxvY2sgdG8gd3JpdGUgdG8gam91cm5hbCAqLworCXUzMgkgc19qb3VybmFsX3NlZ1tMT0dGU19KT1VSTkFMX1NFR1NdOyAvKiBqb3VybmFsIHNlZ21lbnRzICovCisJdTMyCSBzX2pvdXJuYWxfZWNbTE9HRlNfSk9VUk5BTF9TRUdTXTsgLyogam91cm5hbCBlcmFzZWNvdW50cyAqLworCXU2NAkgc19sYXN0X3ZlcnNpb247CisJc3RydWN0IGxvZ2ZzX2FyZWEgKnNfam91cm5hbF9hcmVhOwkvKiBvcGVuIGpvdXJuYWwgc2VnbWVudCAqLworCV9fYmU2NAlzX2plX2FycmF5WzY0XTsKKwlpbnQJc19ub19qZTsKKworCWludAkgc19zdW1faW5kZXg7CQkJLyogZm9yIHRoZSAxMiBzdW1tYXJpZXMgKi8KKwlzdHJ1Y3Qgc2hhZG93X3RyZWUgc19zaGFkb3dfdHJlZTsKKwlpbnQJIHNfamVfZmlsbDsJCQkvKiBpbmRleCBvZiBjdXJyZW50IGplICovCisJLyogcmVhZHdyaXRlLmMgZmllbGRzICovCisJc3RydWN0IG11dGV4IHNfd3JpdGVfbXV0ZXg7CisJaW50CSBzX2xvY2tfY291bnQ7CisJbWVtcG9vbF90ICpzX2Jsb2NrX3Bvb2w7CQkvKiBzdHJ1Y3QgbG9nZnNfYmxvY2sgcG9vbCAqLworCW1lbXBvb2xfdCAqc19zaGFkb3dfcG9vbDsJCS8qIHN0cnVjdCBsb2dmc19zaGFkb3cgcG9vbCAqLworCS8qCisJICogU3BhY2UgYWNjb3VudGluZzoKKwkgKiAtIHNfdXNlZF9ieXRlcyBzcGVjaWZpZXMgc3BhY2UgdXNlZCB0byBzdG9yZSB2YWxpZCBkYXRhIG9iamVjdHMuCisJICogLSBzX2RpcnR5X3VzZWRfYnl0ZXMgaXMgc3BhY2UgdXNlZCB0byBzdG9yZSBub24tY29tbWl0dGVkIGRhdGEKKwkgKiAgIG9iamVjdHMuICBUaG9zZSBvYmplY3RzIGhhdmUgYWxyZWFkeSBiZWVuIHdyaXR0ZW4gdGhlbXNlbHZlcywKKwkgKiAgIGJ1dCB0aGV5IGRvbid0IGJlY29tZSB2YWxpZCB1bnRpbCBhbGwgaW5kaXJlY3QgYmxvY2tzIHVwIHRvIHRoZQorCSAqICAgam91cm5hbCBoYXZlIGJlZW4gd3JpdHRlbiBhcyB3ZWxsLgorCSAqIC0gc19kaXJ0eV9mcmVlX2J5dGVzIGlzIHNwYWNlIHVzZWQgdG8gc3RvcmUgdGhlIG9sZCBjb3B5IG9mIGEKKwkgKiAgIHJlcGxhY2VkIG9iamVjdCwgYXMgbG9uZyBhcyB0aGUgcmVwbGFjZW1lbnQgaXMgbm9uLWNvbW1pdHRlZC4KKwkgKiAgIEluIG90aGVyIHdvcmRzLCBpdCBpcyB0aGUgYW1vdW50IG9mIHNwYWNlIGZyZWVkIHdoZW4gYWxsIGRpcnR5CisJICogICBibG9ja3MgYXJlIHdyaXR0ZW4gYmFjay4KKwkgKiAtIHNfZnJlZV9ieXRlcyBpcyB0aGUgYW1vdW50IG9mIGZyZWUgc3BhY2UgYXZhaWxhYmxlIGZvciBhbnkKKwkgKiAgIHB1cnBvc2UuCisJICogLSBzX3Jvb3RfcmVzZXJ2ZSBpcyB0aGUgYW1vdW50IG9mIGZyZWUgc3BhY2UgYXZhaWxhYmxlIG9ubHkgdG8KKwkgKiAgIHRoZSByb290IHVzZXIuICBOb24tcHJpdmlsZWdlZCB1c2VycyBjYW4gbm8gbG9uZ2VyIHdyaXRlIG9uY2UKKwkgKiAgIHRoaXMgd2F0ZXJtYXJrIGhhcyBiZWVuIHJlYWNoZWQuCisJICogLSBzX3NwZWVkX3Jlc2VydmUgaXMgc3BhY2Ugd2hpY2ggcmVtYWlucyB1bnVzZWQgdG8gc3BlZWQgdXAKKwkgKiAgIGdhcmJhZ2UgY29sbGVjdGlvbiBwZXJmb3JtYW5jZS4KKwkgKiAtIHNfZGlydHlfcGFnZXMgaXMgdGhlIHNwYWNlIHJlc2VydmVkIGZvciBjdXJyZW50bHkgZGlydHkgcGFnZXMuCisJICogICBJdCBpcyBhIHBlc3NpbWlzdGljIGVzdGltYXRlLCBzbyBzb21lL21vc3Qgd2lsbCBnZXQgZnJlZWQgb24KKwkgKiAgIHBhZ2Ugd3JpdGViYWNrLgorCSAqCisJICogc191c2VkX2J5dGVzICsgc19mcmVlX2J5dGVzICsgc19zcGVlZF9yZXNlcnZlID0gdG90YWwgdXNhYmxlIHNpemUKKwkgKi8KKwl1NjQJIHNfZnJlZV9ieXRlczsKKwl1NjQJIHNfdXNlZF9ieXRlczsKKwl1NjQJIHNfZGlydHlfZnJlZV9ieXRlczsKKwl1NjQJIHNfZGlydHlfdXNlZF9ieXRlczsKKwl1NjQJIHNfcm9vdF9yZXNlcnZlOworCXU2NAkgc19zcGVlZF9yZXNlcnZlOworCXU2NAkgc19kaXJ0eV9wYWdlczsKKwkvKiBCYWQgYmxvY2sgaGFuZGxpbmc6CisJICogLSBzX2JhZF9zZWdfcmVzZXJ2ZSBpcyBhIG51bWJlciBvZiBzZWdtZW50cyB1c3VhbGx5IGtlcHQKKwkgKiAgIGZyZWUuICBXaGVuIGVuY291bnRlcmluZyBiYWQgYmxvY2tzLCB0aGUgYWZmZWN0ZWQgc2VnbWVudCdzIGRhdGEKKwkgKiAgIGlzIF90ZW1wb3JhcmlseV8gbW92ZWQgdG8gYSByZXNlcnZlZCBzZWdtZW50LgorCSAqIC0gc19iYWRfc2VnbWVudHMgaXMgdGhlIG51bWJlciBvZiBrbm93biBiYWQgc2VnbWVudHMuCisJICovCisJdTMyCSBzX2JhZF9zZWdfcmVzZXJ2ZTsKKwl1MzIJIHNfYmFkX3NlZ21lbnRzOworfTsKKworLyoqCisgKiBzdHJ1Y3QgbG9nZnNfaW5vZGUgLSBpbi1tZW1vcnkgaW5vZGUKKyAqCisgKiBAdmZzX2lub2RlOgkJCXN0cnVjdCBpbm9kZQorICogQGxpX2RhdGE6CQkJZGF0YSBwb2ludGVycworICogQGxpX3VzZWRfYnl0ZXM6CQludW1iZXIgb2YgdXNlZCBieXRlcworICogQGxpX2ZyZWVpbmdfbGlzdDoJCXVzZWQgdG8gdHJhY2sgaW5vZGVzIGN1cnJlbnRseSBiZWluZyBmcmVlZAorICogQGxpX2ZsYWdzOgkJCWlub2RlIGZsYWdzCisgKiBAbGlfcmVmY291bnQ6CQludW1iZXIgb2YgaW50ZXJuYWwgKEdDLWluZHVjZWQpIHJlZmVyZW5jZXMKKyAqLworc3RydWN0IGxvZ2ZzX2lub2RlIHsKKwlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOworCXU2NAlsaV9kYXRhW0xPR0ZTX0VNQkVEREVEX0ZJRUxEU107CisJdTY0CWxpX3VzZWRfYnl0ZXM7CisJc3RydWN0IGxpc3RfaGVhZCBsaV9mcmVlaW5nX2xpc3Q7CisJc3RydWN0IGxvZ2ZzX2Jsb2NrICpsaV9ibG9jazsKKwl1MzIJbGlfZmxhZ3M7CisJdTgJbGlfaGVpZ2h0OworCWludAlsaV9yZWZjb3VudDsKK307CisKKyNkZWZpbmUgam91cm5hbF9mb3JfZWFjaChfX2kpIGZvciAoX19pID0gMDsgX19pIDwgTE9HRlNfSk9VUk5BTF9TRUdTOyBfX2krKykKKyNkZWZpbmUgZm9yX2VhY2hfYXJlYShfX2kpIGZvciAoX19pID0gMDsgX19pIDwgTE9HRlNfTk9fQVJFQVM7IF9faSsrKQorI2RlZmluZSBmb3JfZWFjaF9hcmVhX2Rvd24oX19pKSBmb3IgKF9faSA9IExPR0ZTX05PX0FSRUFTIC0gMTsgX19pID49IDA7IF9faS0tKQorCisvKiBjb21wci5jICovCitpbnQgbG9nZnNfY29tcHJlc3Modm9pZCAqaW4sIHZvaWQgKm91dCwgc2l6ZV90IGlubGVuLCBzaXplX3Qgb3V0bGVuKTsKK2ludCBsb2dmc191bmNvbXByZXNzKHZvaWQgKmluLCB2b2lkICpvdXQsIHNpemVfdCBpbmxlbiwgc2l6ZV90IG91dGxlbik7CitpbnQgX19pbml0IGxvZ2ZzX2NvbXByX2luaXQodm9pZCk7Cit2b2lkIGxvZ2ZzX2NvbXByX2V4aXQodm9pZCk7CisKKy8qIGRldl9iZGV2LmMgKi8KKyNpZmRlZiBDT05GSUdfQkxPQ0sKK2ludCBsb2dmc19nZXRfc2JfYmRldihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLAorCQljb25zdCBjaGFyICpkZXZuYW1lLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgbG9nZnNfZ2V0X3NiX2JkZXYoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncywKKwkJY29uc3QgY2hhciAqZGV2bmFtZSwgc3RydWN0IHZmc21vdW50ICptbnQpCit7CisJcmV0dXJuIC1FTk9ERVY7Cit9CisjZW5kaWYKKworLyogZGV2X210ZC5jICovCisjaWZkZWYgQ09ORklHX01URAoraW50IGxvZ2ZzX2dldF9zYl9tdGQoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncywKKwkJaW50IG10ZG5yLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgbG9nZnNfZ2V0X3NiX210ZChzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLAorCQlpbnQgbXRkbnIsIHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCXJldHVybiAtRU5PREVWOworfQorI2VuZGlmCisKKy8qIGRpci5jICovCitleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbG9nZnNfc3ltbGlua19pb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGxvZ2ZzX2Rpcl9pb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbG9nZnNfZGlyX2ZvcHM7CitpbnQgbG9nZnNfcmVwbGF5X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CisKKy8qIGZpbGUuYyAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGxvZ2ZzX3JlZ19pb3BzOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbG9nZnNfcmVnX2ZvcHM7CitleHRlcm4gY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBsb2dmc19yZWdfYW9wczsKK2ludCBsb2dmc19yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpOworaW50IGxvZ2ZzX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQl1bnNpZ25lZCBsb25nIGFyZyk7CitpbnQgbG9nZnNfZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGRhdGFzeW5jKTsKKworLyogZ2MuYyAqLwordTMyIGdldF9iZXN0X2NhbmQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGNhbmRpZGF0ZV9saXN0ICpsaXN0LCB1MzIgKmVjKTsKK3ZvaWQgbG9nZnNfZ2NfcGFzcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK2ludCBsb2dmc19jaGVja19hcmVhcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK2ludCBsb2dmc19pbml0X2djKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwordm9pZCBsb2dmc19jbGVhbnVwX2djKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworCisvKiBpbm9kZS5jICovCitleHRlcm4gY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgbG9nZnNfc3VwZXJfb3BlcmF0aW9uczsKK3N0cnVjdCBpbm9kZSAqbG9nZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbm9fdCBpbm8pOworc3RydWN0IGlub2RlICpsb2dmc19zYWZlX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW5vX3QgaW5vLCBpbnQgKmNvb2tpZSk7Cit2b2lkIGxvZ2ZzX3NhZmVfaXB1dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgY29va2llKTsKK3N0cnVjdCBpbm9kZSAqbG9nZnNfbmV3X2lub2RlKHN0cnVjdCBpbm9kZSAqZGlyLCBpbnQgbW9kZSk7CitzdHJ1Y3QgaW5vZGUgKmxvZ2ZzX25ld19tZXRhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBpbm8pOworc3RydWN0IGlub2RlICpsb2dmc19yZWFkX21ldGFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IGlubyk7CitpbnQgbG9nZnNfaW5pdF9pbm9kZV9jYWNoZSh2b2lkKTsKK3ZvaWQgbG9nZnNfZGVzdHJveV9pbm9kZV9jYWNoZSh2b2lkKTsKK3ZvaWQgZGVzdHJveV9tZXRhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwordm9pZCBsb2dmc19zZXRfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBubyk7CisvKiB0aGVzZSBsb2dpY2FsbHkgYmVsb25nIGludG8gaW5vZGUuYyBidXQgYWN0dWFsbHkgcmVzaWRlIGluIHJlYWR3cml0ZS5jICovCitpbnQgbG9nZnNfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2ludCBfX2xvZ2ZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgZmxhZ3MpOwordm9pZCBsb2dmc19kZWxldGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSk7Cit2b2lkIGxvZ2ZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworCisvKiBqb3VybmFsLmMgKi8KK3ZvaWQgbG9nZnNfd3JpdGVfYW5jaG9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworaW50IGxvZ2ZzX2luaXRfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK3ZvaWQgbG9nZnNfY2xlYW51cF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworaW50IHdyaXRlX2FsaWFzX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IGlubywgdTY0IGJpeCwKKwkJbGV2ZWxfdCBsZXZlbCwgaW50IGNoaWxkX25vLCBfX2JlNjQgdmFsKTsKK3ZvaWQgZG9fbG9nZnNfam91cm5hbF93bF9wYXNzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworCisvKiByZWFkd3JpdGUuYyAqLworcGdvZmZfdCBsb2dmc19wYWNrX2luZGV4KHU2NCBiaXgsIGxldmVsX3QgbGV2ZWwpOwordm9pZCBsb2dmc191bnBhY2tfaW5kZXgocGdvZmZfdCBpbmRleCwgdTY0ICpiaXgsIGxldmVsX3QgKmxldmVsKTsKK2ludCBsb2dmc19pbm9kZV93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICpidWYsIHNpemVfdCBjb3VudCwKKwkJbG9mZl90IGJpeCwgbG9uZyBmbGFncywgc3RydWN0IHNoYWRvd190cmVlICpzaGFkb3dfdHJlZSk7CitpbnQgbG9nZnNfcmVhZHBhZ2Vfbm9sb2NrKHN0cnVjdCBwYWdlICpwYWdlKTsKK2ludCBsb2dmc193cml0ZV9idWYoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsIGxvbmcgZmxhZ3MpOworaW50IGxvZ2ZzX2RlbGV0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGluZGV4LAorCQlzdHJ1Y3Qgc2hhZG93X3RyZWUgKnNoYWRvd190cmVlKTsKK2ludCBsb2dmc19yZXdyaXRlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBiaXgsIHU2NCBvZnMsCisJCWdjX2xldmVsX3QgZ2NfbGV2ZWwsIGxvbmcgZmxhZ3MpOworaW50IGxvZ2ZzX2lzX3ZhbGlkX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBvZnMsIHU2NCBpbm8sIHU2NCBiaXgsCisJCWdjX2xldmVsX3QgZ2NfbGV2ZWwpOworaW50IGxvZ2ZzX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBzaXplKTsKK3U2NCBsb2dmc19zZWVrX2hvbGUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJpeCk7Cit1NjQgbG9nZnNfc2Vla19kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBiaXgpOworaW50IGxvZ2ZzX29wZW5fc2VnZmlsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK2ludCBsb2dmc19pbml0X3J3KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwordm9pZCBsb2dmc19jbGVhbnVwX3J3KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwordm9pZCBsb2dmc19hZGRfdHJhbnNhY3Rpb24oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGxvZ2ZzX3RyYW5zYWN0aW9uICp0YSk7Cit2b2lkIGxvZ2ZzX2RlbF90cmFuc2FjdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbG9nZnNfdHJhbnNhY3Rpb24gKnRhKTsKK3ZvaWQgbG9nZnNfd3JpdGVfYmxvY2soc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jaywgbG9uZyBmbGFncyk7CitpbnQgbG9nZnNfd3JpdGVfb2JqX2FsaWFzZXNfcGFnZWNhY2hlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwordm9pZCBsb2dmc19nZXRfc2VnbWVudF9lbnRyeShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2Vnbm8sCisJCXN0cnVjdCBsb2dmc19zZWdtZW50X2VudHJ5ICpzZSk7Cit2b2lkIGxvZ2ZzX3NldF9zZWdtZW50X3VzZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IG9mcywgaW50IGluY3JlbWVudCk7Cit2b2lkIGxvZ2ZzX3NldF9zZWdtZW50X2VyYXNlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2Vnbm8sIHUzMiBlYywKKwkJZ2NfbGV2ZWxfdCBnY19sZXZlbCk7Cit2b2lkIGxvZ2ZzX3NldF9zZWdtZW50X3Jlc2VydmVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzZWdubyk7Cit2b2lkIGxvZ2ZzX3NldF9zZWdtZW50X3VucmVzZXJ2ZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlZ25vLCB1MzIgZWMpOworc3RydWN0IGxvZ2ZzX2Jsb2NrICpfX2FsbG9jX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCXU2NCBpbm8sIHU2NCBiaXgsIGxldmVsX3QgbGV2ZWwpOwordm9pZCBfX2ZyZWVfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jayk7Cit2b2lkIGJ0cmVlX3dyaXRlX2Jsb2NrKHN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2spOwordm9pZCBpbml0aWFsaXplX2Jsb2NrX2NvdW50ZXJzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrLAorCQlfX2JlNjQgKmFycmF5LCBpbnQgcGFnZV9pc19lbXB0eSk7CitpbnQgbG9nZnNfZXhpc3RfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJpeCk7CitpbnQgZ2V0X3BhZ2VfcmVzZXJ2ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CitleHRlcm4gc3RydWN0IGxvZ2ZzX2Jsb2NrX29wcyBpbmRpcmVjdF9ibG9ja19vcHM7CisKKy8qIHNlZ21lbnQuYyAqLworaW50IGxvZ2ZzX2VyYXNlX3NlZ21lbnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIG9mcywgaW50IGVuc3VyZV9lcmFzZSk7CitpbnQgd2J1Zl9yZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBvZnMsIHNpemVfdCBsZW4sIHZvaWQgKmJ1Zik7CitpbnQgbG9nZnNfc2VnbWVudF9yZWFkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLCB1NjQgb2ZzLCB1NjQgYml4LAorCQlsZXZlbF90IGxldmVsKTsKK2ludCBsb2dmc19zZWdtZW50X3dyaXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLAorCQlzdHJ1Y3QgbG9nZnNfc2hhZG93ICpzaGFkb3cpOworaW50IGxvZ2ZzX3NlZ21lbnRfZGVsZXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBsb2dmc19zaGFkb3cgKnNoYWRvdyk7CitpbnQgbG9nZnNfbG9hZF9vYmplY3RfYWxpYXNlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQlzdHJ1Y3QgbG9nZnNfb2JqX2FsaWFzICpvYSwgaW50IGNvdW50KTsKK3ZvaWQgbW92ZV9wYWdlX3RvX2J0cmVlKHN0cnVjdCBwYWdlICpwYWdlKTsKK2ludCBsb2dmc19pbml0X21hcHBpbmcoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7Cit2b2lkIGxvZ2ZzX3N5bmNfYXJlYShzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSk7Cit2b2lkIGxvZ2ZzX3N5bmNfc2VnbWVudHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CisKKy8qIGFyZWEgaGFuZGxpbmcgKi8KK2ludCBsb2dmc19pbml0X2FyZWFzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwordm9pZCBsb2dmc19jbGVhbnVwX2FyZWFzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOworaW50IGxvZ2ZzX29wZW5fYXJlYShzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSwgc2l6ZV90IGJ5dGVzKTsKK3ZvaWQgX19sb2dmc19idWZfd3JpdGUoc3RydWN0IGxvZ2ZzX2FyZWEgKmFyZWEsIHU2NCBvZnMsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwKKwkJaW50IHVzZV9maWxsZXIpOworCitzdGF0aWMgaW5saW5lIHZvaWQgbG9nZnNfYnVmX3dyaXRlKHN0cnVjdCBsb2dmc19hcmVhICphcmVhLCB1NjQgb2ZzLAorCQl2b2lkICpidWYsIHNpemVfdCBsZW4pCit7CisJX19sb2dmc19idWZfd3JpdGUoYXJlYSwgb2ZzLCBidWYsIGxlbiwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2dmc19idWZfcmVjb3ZlcihzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSwgdTY0IG9mcywKKwkJdm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworCV9fbG9nZnNfYnVmX3dyaXRlKGFyZWEsIG9mcywgYnVmLCBsZW4sIDEpOworfQorCisvKiBzdXBlci5jICovCitzdHJ1Y3QgcGFnZSAqZW1lcmdlbmN5X3JlYWRfYmVnaW4oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaW5kZXgpOwordm9pZCBlbWVyZ2VuY3lfcmVhZF9lbmQoc3RydWN0IHBhZ2UgKnBhZ2UpOwordm9pZCBsb2dmc19jcmFzaF9kdW1wKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwordm9pZCAqbWVtY2hyX2ludihjb25zdCB2b2lkICpzLCBpbnQgYywgc2l6ZV90IG4pOworaW50IGxvZ2ZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpzdGF0cyk7CitpbnQgbG9nZnNfZ2V0X3NiX2RldmljZShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgaW50IGZsYWdzLAorCQlzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKKwkJY29uc3Qgc3RydWN0IGxvZ2ZzX2RldmljZV9vcHMgKmRldm9wcywgc3RydWN0IHZmc21vdW50ICptbnQpOworaW50IGxvZ2ZzX2NoZWNrX2RzKHN0cnVjdCBsb2dmc19kaXNrX3N1cGVyICpkcyk7CitpbnQgbG9nZnNfd3JpdGVfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxvZ2ZzX3N1cGVyICpsb2dmc19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXJldHVybiBzYi0+c19mc19pbmZvOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsb2dmc19pbm9kZSAqbG9nZnNfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgbG9nZnNfaW5vZGUsIHZmc19pbm9kZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2dmc19zZXRfcm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlsb2dmc19zdXBlcihzYiktPnNfZmxhZ3MgfD0gTE9HRlNfU0JfRkxBR19STzsKK30KKworI2RlZmluZSBMT0dGU19CVUcoc2IpIGRvIHsJCQkJCVwKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKl9fc2IgPSBzYjsJCQkJXAorCWxvZ2ZzX2NyYXNoX2R1bXAoX19zYik7CQkJCQlcCisJbG9nZnNfc3VwZXIoX19zYiktPnNfZmxhZ3MgfD0gTE9HRlNfU0JfRkxBR19STzsJCVwKKwlCVUcoKTsJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBMT0dGU19CVUdfT04oY29uZGl0aW9uLCBzYikgXAorCWRvIHsgaWYgKHVubGlrZWx5KGNvbmRpdGlvbikpIExPR0ZTX0JVRygoc2IpKTsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSBfX2JlMzIgbG9nZnNfY3JjMzIodm9pZCAqZGF0YSwgc2l6ZV90IGxlbiwgc2l6ZV90IHNraXApCit7CisJcmV0dXJuIGNwdV90b19iZTMyKGNyYzMyKH4wLCBkYXRhK3NraXAsIGxlbi1za2lwKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggbG9nZnNfdHlwZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXJldHVybiAoaW5vZGUtPmlfbW9kZSA+PiAxMikgJiAxNTsKK30KKworc3RhdGljIGlubGluZSBwZ29mZl90IGxvZ2ZzX2luZGV4KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBwb3MpCit7CisJcmV0dXJuIHBvcyA+PiBzYi0+c19ibG9ja3NpemVfYml0czsKK30KKworc3RhdGljIGlubGluZSB1NjQgZGV2X29mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2Vnbm8sIHUzMiBvZnMpCit7CisJcmV0dXJuICgodTY0KXNlZ25vIDw8IGxvZ2ZzX3N1cGVyKHNiKS0+c19zZWdzaGlmdCkgKyBvZnM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTMyIHNlZ19ubyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgb2ZzKQoreworCXJldHVybiBvZnMgPj4gbG9nZnNfc3VwZXIoc2IpLT5zX3NlZ3NoaWZ0OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBzZWdfb2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBvZnMpCit7CisJcmV0dXJuIG9mcyAmIGxvZ2ZzX3N1cGVyKHNiKS0+c19zZWdtYXNrOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBzZWdfYWxpZ24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IG9mcykKK3sKKwlyZXR1cm4gb2ZzICYgfmxvZ2ZzX3N1cGVyKHNiKS0+c19zZWdtYXNrOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBsb2dmc19ibG9jayAqbG9nZnNfYmxvY2soc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJcmV0dXJuICh2b2lkICopcGFnZS0+cHJpdmF0ZTsKK30KKworc3RhdGljIGlubGluZSBsZXZlbF90IHNocmlua19sZXZlbChnY19sZXZlbF90IF9fbGV2ZWwpCit7CisJdTggbGV2ZWwgPSAoX19mb3JjZSB1OClfX2xldmVsOworCisJaWYgKGxldmVsID49IExPR0ZTX01BWF9MRVZFTFMpCisJCWxldmVsIC09IExPR0ZTX01BWF9MRVZFTFM7CisJcmV0dXJuIChfX2ZvcmNlIGxldmVsX3QpbGV2ZWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgZ2NfbGV2ZWxfdCBleHBhbmRfbGV2ZWwodTY0IGlubywgbGV2ZWxfdCBfX2xldmVsKQoreworCXU4IGxldmVsID0gKF9fZm9yY2UgdTgpX19sZXZlbDsKKworCWlmIChpbm8gPT0gTE9HRlNfSU5PX01BU1RFUikgeworCQkvKiBpZmlsZSBoYXMgc2VwZXJhdGUgYXJlYXMgKi8KKwkJbGV2ZWwgKz0gTE9HRlNfTUFYX0xFVkVMUzsKKwl9CisJcmV0dXJuIChfX2ZvcmNlIGdjX2xldmVsX3QpbGV2ZWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxvZ2ZzX2Jsb2NrX3NoaWZ0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxldmVsX3QgbGV2ZWwpCit7CisJbGV2ZWwgPSBzaHJpbmtfbGV2ZWwoKF9fZm9yY2UgZ2NfbGV2ZWxfdClsZXZlbCk7CisJcmV0dXJuIChfX2ZvcmNlIGludClsZXZlbCAqIChzYi0+c19ibG9ja3NpemVfYml0cyAtIDMpOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBsb2dmc19ibG9ja19tYXNrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGxldmVsX3QgbGV2ZWwpCit7CisJcmV0dXJuIH4wdWxsIDw8IGxvZ2ZzX2Jsb2NrX3NoaWZ0KHNiLCBsZXZlbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGxvZ2ZzX2FyZWEgKmdldF9hcmVhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCWdjX2xldmVsX3QgZ2NfbGV2ZWwpCit7CisJcmV0dXJuIGxvZ2ZzX3N1cGVyKHNiKS0+c19hcmVhWyhfX2ZvcmNlIHU4KWdjX2xldmVsXTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9sb2dmcy9sb2dmc19hYmkuaCBiL2ZzL2xvZ2ZzL2xvZ2ZzX2FiaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2NzQ3MjUKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9sb2dmcy9sb2dmc19hYmkuaApAQCAtMCwwICsxLDYyOSBAQAorLyoKKyAqIGZzL2xvZ2ZzL2xvZ2ZzX2FiaS5oCisgKgorICogQXMgc2hvdWxkIGJlIG9idmlvdXMgZm9yIExpbnV4IGtlcm5lbCBjb2RlLCBsaWNlbnNlIGlzIEdQTHYyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDggSm9lcm4gRW5nZWwgPGpvZXJuQGxvZ2ZzLm9yZz4KKyAqCisgKiBQdWJsaWMgaGVhZGVyIGZvciBsb2dmcy4KKyAqLworI2lmbmRlZiBGU19MT0dGU19MT0dGU19BQklfSAorI2RlZmluZSBGU19MT0dGU19MT0dGU19BQklfSAorCisvKiBGb3Igb3V0LW9mLWtlcm5lbCBjb21waWxlcyAqLworI2lmbmRlZiBCVUlMRF9CVUdfT04KKyNkZWZpbmUgQlVJTERfQlVHX09OKGNvbmRpdGlvbikgLyoqLworI2VuZGlmCisKKyNkZWZpbmUgU0laRV9DSEVDSyh0eXBlLCBzaXplKQkJCQkJXAorc3RhdGljIGlubGluZSB2b2lkIGNoZWNrXyMjdHlwZSh2b2lkKQkJCQlcCit7CQkJCQkJCQlcCisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3QgdHlwZSkgIT0gKHNpemUpKTsJCVwKK30KKworLyoKKyAqIFRocm91Z2hvdXQgdGhlIGxvZ2ZzIGNvZGUsIHdlJ3JlIGNvbnN0YW50bHkgZGVhbGluZyB3aXRoIGJsb2NrcyBhdAorICogdmFyaW91cyBwb3NpdGlvbnMgb3Igb2Zmc2V0cy4gIFRvIHJlbW92ZSBjb25mdXNpb24sIHdlIHN0cmljbHkKKyAqIGRpc3Rpbmd1aXNoIGJldHdlZW4gYSAicG9zaXRpb24iIC0gdGhlIGxvZ2ljYWwgcG9zaXRpb24gd2l0aGluIGEKKyAqIGZpbGUgYW5kIGFuICJvZmZzZXQiIC0gdGhlIHBoeXNpY2FsIGxvY2F0aW9uIHdpdGhpbiB0aGUgZGV2aWNlLgorICoKKyAqIEFueSB1c2FnZSBvZiB0aGUgdGVybSBvZmZzZXQgZm9yIGEgbG9naWNhbCBsb2NhdGlvbiBvciBwb3NpdGlvbiBmb3IKKyAqIGEgcGh5c2ljYWwgb25lIGlzIGEgYnVnIGFuZCBzaG91bGQgZ2V0IGZpeGVkLgorICovCisKKy8qCisgKiBCbG9jayBhcmUgYWxsb2NhdGVkIGluIG9uZSBvZiBzZXZlcmFsIHNlZ21lbnRzIGRlcGVuZGluZyBvbiB0aGVpcgorICogbGV2ZWwuICBUaGUgZm9sbG93aW5nIGxldmVscyBhcmUgdXNlZDoKKyAqICAwCS0gcmVndWxhciBkYXRhIGJsb2NrCisgKiAgMQktIGkxIGluZGlyZWN0IGJsb2NrcworICogIDIJLSBpMiBpbmRpcmVjdCBibG9ja3MKKyAqICAzCS0gaTMgaW5kaXJlY3QgYmxvY2tzCisgKiAgNAktIGk0IGluZGlyZWN0IGJsb2NrcworICogIDUJLSBpNSBpbmRpcmVjdCBibG9ja3MKKyAqICA2CS0gaWZpbGUgZGF0YSBibG9ja3MKKyAqICA3CS0gaWZpbGUgaTEgaW5kaXJlY3QgYmxvY2tzCisgKiAgOAktIGlmaWxlIGkyIGluZGlyZWN0IGJsb2NrcworICogIDkJLSBpZmlsZSBpMyBpbmRpcmVjdCBibG9ja3MKKyAqIDEwCS0gaWZpbGUgaTQgaW5kaXJlY3QgYmxvY2tzCisgKiAxMQktIGlmaWxlIGk1IGluZGlyZWN0IGJsb2NrcworICogUG90ZW50aWFsIGxldmVscyB0byBiZSB1c2VkIGluIHRoZSBmdXR1cmU6CisgKiAxMgktIGdjIHJlY3ljbGVkIGJsb2NrcywgbG9uZy1saXZlZCBkYXRhCisgKiAxMwktIHJlcGxhY2VtZW50IGJsb2Nrcywgc2hvcnQtbGl2ZWQgZGF0YQorICoKKyAqIExldmVscyAxLTExIGFyZSBuZWNlc3NhcnkgZm9yIHJvYnVzdCBnYyBvcGVyYXRpb25zIGFuZCBoZWxwIHNlcGVyYXRlCisgKiBzaG9ydC1saXZlZCBtZXRhZGF0YSBmcm9tIGxvbmdlci1saXZlZCBmaWxlIGRhdGEuICBJbiB0aGUgZnV0dXJlLAorICogZmlsZSBkYXRhIHNob3VsZCBnZXQgc2VwZXJhdGVkIGludG8gc2V2ZXJhbCBzZWdtZW50cyBiYXNlZCBvbiBzaW1wbGUKKyAqIGhldXJpc3RpY3MuICBPbGQgZGF0YSByZWN5Y2xlZCBkdXJpbmcgZ2Mgb3BlcmF0aW9uIGlzIGV4cGVjdGVkIHRvIGJlCisgKiBsb25nLWxpdmVkLiAgTmV3IGRhdGEgaXMgb2YgdW5jZXJ0YWluIGxpZmUgZXhwZWN0YW5jeS4gIE5ldyBkYXRhCisgKiB1c2VkIHRvIHJlcGxhY2Ugb2xkZXIgYmxvY2tzIGluIGV4aXN0aW5nIGZpbGVzIGlzIGV4cGVjdGVkIHRvIGJlCisgKiBzaG9ydC1saXZlZC4KKyAqLworCisKKy8qIE1hZ2ljIG51bWJlcnMuICA2NGJpdCBmb3Igc3VwZXJibG9jaywgMzJiaXQgZm9yIHN0YXRmcyBmX3R5cGUgKi8KKyNkZWZpbmUgTE9HRlNfTUFHSUMJCTB4N2EzYThlNWNiOWQ1YmY2N3VsbAorI2RlZmluZSBMT0dGU19NQUdJQ19VMzIJCTB4Yzk3ZTgxNjh1CisKKy8qCisgKiBWYXJpb3VzIGJsb2Nrc2l6ZSByZWxhdGVkIG1hY3Jvcy4gIEJsb2Nrc2l6ZSBpcyBjdXJyZW50bHkgZml4ZWQgYXQgNEtpQi4KKyAqIFNvb25lciBvciBsYXRlciB0aGF0IHNob3VsZCBiZWNvbWUgY29uZmlndXJhYmxlIGFuZCB0aGUgbWFjcm9zIHJlcGxhY2VkCisgKiBieSBzb21ldGhpbmcgc3VwZXJibG9jay1kZXBlbmRlbnQuICBQb2ludGVycyBpbiBpbmRpcmVjdCBibG9ja3MgYXJlIGFuZAorICogd2lsbCByZW1haW4gNjRiaXQuCisgKgorICogTE9HRlNfQkxPQ0tTSVpFCS0gc2VsZi1leHBsYWluaW5nCisgKiBMT0dGU19CTE9DS19GQUNUT1IJLSBudW1iZXIgb2YgcG9pbnRlcnMgcGVyIGluZGlyZWN0IGJsb2NrCisgKiBMT0dGU19CTE9DS19CSVRTCS0gbG9nMiBvZiBMT0dGU19CTE9DS19GQUNUT1IsIHVzZWQgZm9yIHNoaWZ0cworICovCisjZGVmaW5lIExPR0ZTX0JMT0NLU0laRQkJKDQwOTZ1bGwpCisjZGVmaW5lIExPR0ZTX0JMT0NLX0ZBQ1RPUgkoTE9HRlNfQkxPQ0tTSVpFIC8gc2l6ZW9mKHU2NCkpCisjZGVmaW5lIExPR0ZTX0JMT0NLX0JJVFMJKDkpCisKKy8qCisgKiBOdW1iZXIgb2YgYmxvY2tzIGF0IHZhcmlvdXMgbGV2ZWxzIG9mIGluZGlyZWN0aW9uLiAgVGhlcmUgYXJlIDE2IGRpcmVjdAorICogYmxvY2sgcG9pbnRlcnMgcGx1cyBhIHNpbmdsZSBpbmRpcmVjdCBwb2ludGVyLgorICovCisjZGVmaW5lIEkwX0JMT0NLUwkJKDE2KQorI2RlZmluZSBJMV9CTE9DS1MJCUxPR0ZTX0JMT0NLX0ZBQ1RPUgorI2RlZmluZSBJMl9CTE9DS1MJCShMT0dGU19CTE9DS19GQUNUT1IgKiBJMV9CTE9DS1MpCisjZGVmaW5lIEkzX0JMT0NLUwkJKExPR0ZTX0JMT0NLX0ZBQ1RPUiAqIEkyX0JMT0NLUykKKyNkZWZpbmUgSTRfQkxPQ0tTCQkoTE9HRlNfQkxPQ0tfRkFDVE9SICogSTNfQkxPQ0tTKQorI2RlZmluZSBJNV9CTE9DS1MJCShMT0dGU19CTE9DS19GQUNUT1IgKiBJNF9CTE9DS1MpCisKKyNkZWZpbmUgSU5ESVJFQ1RfSU5ERVgJCUkwX0JMT0NLUworI2RlZmluZSBMT0dGU19FTUJFRERFRF9GSUVMRFMJKEkwX0JMT0NLUyArIDEpCisKKy8qCisgKiBTaXplcyBhdCB3aGljaCBmaWxlcyByZXF1aXJlIGFub3RoZXIgbGV2ZWwgb2YgaW5kaXJlY3Rpb24uICBGaWxlcyBzbWFsbGVyCisgKiB0aGFuIExPR0ZTX0VNQkVEREVEX1NJWkUgY2FuIGJlIGNvbXBsZXRlbHkgc3RvcmVkIGluIHRoZSBpbm9kZSBpdHNlbGYsCisgKiBzaW1pbGFyIGxpa2UgZXh0MiBmYXN0IHN5bWxpbmtzLgorICoKKyAqIERhdGEgYXQgYSBwb3NpdGlvbiBzbWFsbGVyIHRoYW4gTE9HRlNfSTBfU0laRSBpcyBhY2Nlc3NlZCB0aHJvdWdoIHRoZQorICogZGlyZWN0IHBvaW50ZXJzLCBlbHNlIHRocm91Z2ggdGhlIDF4IGluZGlyZWN0IHBvaW50ZXIgYW5kIHNvIGZvcnRoLgorICovCisjZGVmaW5lIExPR0ZTX0VNQkVEREVEX1NJWkUJKExPR0ZTX0VNQkVEREVEX0ZJRUxEUyAqIHNpemVvZih1NjQpKQorI2RlZmluZSBMT0dGU19JMF9TSVpFCQkoSTBfQkxPQ0tTICogTE9HRlNfQkxPQ0tTSVpFKQorI2RlZmluZSBMT0dGU19JMV9TSVpFCQkoSTFfQkxPQ0tTICogTE9HRlNfQkxPQ0tTSVpFKQorI2RlZmluZSBMT0dGU19JMl9TSVpFCQkoSTJfQkxPQ0tTICogTE9HRlNfQkxPQ0tTSVpFKQorI2RlZmluZSBMT0dGU19JM19TSVpFCQkoSTNfQkxPQ0tTICogTE9HRlNfQkxPQ0tTSVpFKQorI2RlZmluZSBMT0dGU19JNF9TSVpFCQkoSTRfQkxPQ0tTICogTE9HRlNfQkxPQ0tTSVpFKQorI2RlZmluZSBMT0dGU19JNV9TSVpFCQkoSTVfQkxPQ0tTICogTE9HRlNfQkxPQ0tTSVpFKQorCisvKgorICogRWFjaCBpbmRpcmVjdCBibG9jayBwb2ludGVyIG11c3QgaGF2ZSB0aGlzIGZsYWcgc2V0LCBpZiBhbGwgYmxvY2sgcG9pbnRlcnMKKyAqIGJlaGluZCBpdCBhcmUgc2V0LCBpLmUuIHRoZXJlIGlzIG5vIGhvbGUgaGlkZGVuIGluIHRoZSBzaGFkb3cgb2YgdGhpcworICogaW5kaXJlY3QgYmxvY2sgcG9pbnRlci4KKyAqLworI2RlZmluZSBMT0dGU19GVUxMWV9QT1BVTEFURUQgKDFVTEwgPDwgNjMpCisjZGVmaW5lIHB1cmVfb2ZzKG9mcykgKG9mcyAmIH5MT0dGU19GVUxMWV9QT1BVTEFURUQpCisKKy8qCisgKiBMb2dGUyBuZWVkcyB0byBzZXBlcmF0ZSBkYXRhIGludG8gbGV2ZWxzLiAgRWFjaCBsZXZlbCBpcyBkZWZpbmVkIGFzIHRoZQorICogbWF4aW1hbCBwb3NzaWJsZSBkaXN0YW5jZSBmcm9tIHRoZSBtYXN0ZXIgaW5vZGUgKGlub2RlIG9mIHRoZSBpbm9kZSBmaWxlKS4KKyAqIERhdGEgYmxvY2tzIHJlc2lkZSBvbiBsZXZlbCAwLCAxeCBpbmRpcmVjdCBibG9jayBvbiBsZXZlbCAxLCBldGMuCisgKiBJbm9kZXMgcmVzaWRlIG9uIGxldmVsIDYsIGluZGlyZWN0IGJsb2NrcyBmb3IgdGhlIGlub2RlIGZpbGUgb24gbGV2ZWxzIDctMTEuCisgKiBUaGlzIGVmZm9ydCBpcyBuZWNlc3NhcnkgdG8gZ3VhcmFudGVlIGdhcmJhZ2UgY29sbGVjdGlvbiB0byBhbHdheXMgbWFrZQorICogcHJvZ3Jlc3MuCisgKgorICogTE9HRlNfTUFYX0lORElSRUNUIGlzIHRoZSBtYXhpbWFsIGluZGlyZWN0aW9uIHRocm91Z2ggaW5kaXJlY3QgYmxvY2tzLAorICogTE9HRlNfTUFYX0xFVkVMUyBpcyBvbmUgbW9yZSBmb3IgdGhlIGFjdHVhbCBkYXRhIGxldmVsIG9mIGEgZmlsZS4gIEl0IGlzCisgKiB0aGUgbWF4aW1hbCBudW1iZXIgb2YgbGV2ZWxzIGZvciBvbmUgZmlsZS4KKyAqIExPR0ZTX05PX0FSRUFTIGlzIHR3aWNlIHRoYXQsIGFzIHRoZSBpbm9kZSBmaWxlIGFuZCByZWd1bGFyIGZpbGVzIGFyZQorICogZWZmZWN0aXZlbHkgc3RhY2tlZCBvbiB0b3Agb2YgZWFjaCBvdGhlci4KKyAqLworI2RlZmluZSBMT0dGU19NQVhfSU5ESVJFQ1QJKDUpCisjZGVmaW5lIExPR0ZTX01BWF9MRVZFTFMJKExPR0ZTX01BWF9JTkRJUkVDVCArIDEpCisjZGVmaW5lIExPR0ZTX05PX0FSRUFTCQkoMiAqIExPR0ZTX01BWF9MRVZFTFMpCisKKy8qIE1heGltdW0gc2l6ZSBvZiBmaWxlbmFtZXMgKi8KKyNkZWZpbmUgTE9HRlNfTUFYX05BTUVMRU4JKDI1NSkKKworLyogTnVtYmVyIG9mIHNlZ21lbnRzIGluIHRoZSBwcmltYXJ5IGpvdXJuYWwuICovCisjZGVmaW5lIExPR0ZTX0pPVVJOQUxfU0VHUwkoMTYpCisKKy8qIE1heGltdW0gbnVtYmVyIG9mIGZyZWUvZXJhc2VkL2V0Yy4gc2VnbWVudHMgaW4gam91cm5hbCBlbnRyaWVzICovCisjZGVmaW5lIE1BWF9DQUNIRURfU0VHUwkJKDY0KQorCisKKy8qCisgKiBMT0dGU19PQkpFQ1RfSEVBREVSU0laRSBpcyB0aGUgc2l6ZSBvZiBhIHNpbmdsZSBoZWFkZXIgaW4gdGhlIG9iamVjdCBzdG9yZSwKKyAqIExPR0ZTX01BWF9PQkpFQ1RTSVpFIHRoZSBzaXplIG9mIHRoZSBsYXJnZXN0IHBvc3NpYmxlIG9iamVjdCwgaW5jbHVkaW5nCisgKiBpdHMgaGVhZGVyLAorICogTE9HRlNfU0VHTUVOVF9SRVNFUlZFIGlzIHRoZSBhbW91bnQgb2Ygc3BhY2UgcmVzZXJ2ZWQgZm9yIGVhY2ggc2VnbWVudCBmb3IKKyAqIGl0cyBzZWdtZW50IGhlYWRlciBhbmQgdGhlIHBhZGRlZCBzcGFjZSBhdCB0aGUgZW5kIHdoZW4gbm8gZnVydGhlciBvYmplY3RzCisgKiBmaXQuCisgKi8KKyNkZWZpbmUgTE9HRlNfT0JKRUNUX0hFQURFUlNJWkUJKDB4MWMpCisjZGVmaW5lIExPR0ZTX1NFR01FTlRfSEVBREVSU0laRSAoMHgxOCkKKyNkZWZpbmUgTE9HRlNfTUFYX09CSkVDVFNJWkUJKExPR0ZTX09CSkVDVF9IRUFERVJTSVpFICsgTE9HRlNfQkxPQ0tTSVpFKQorI2RlZmluZSBMT0dGU19TRUdNRU5UX1JFU0VSVkUJXAorCShMT0dGU19TRUdNRU5UX0hFQURFUlNJWkUgKyBMT0dGU19NQVhfT0JKRUNUU0laRSAtIDEpCisKKy8qCisgKiBTZWdtZW50IHR5cGVzOgorICogU0VHX1NVUEVSCS0gRGF0YSBvciBpbmRpcmVjdCBibG9jaworICogU0VHX0pPVVJOQUwJLSBJbm9kZQorICogU0VHX09TVE9SRQktIERlbnRyeQorICovCitlbnVtIHsKKwlTRUdfU1VQRVIJPSAweDAxLAorCVNFR19KT1VSTkFMCT0gMHgwMiwKKwlTRUdfT1NUT1JFCT0gMHgwMywKK307CisKKy8qKgorICogc3RydWN0IGxvZ2ZzX3NlZ21lbnRfaGVhZGVyIC0gcGVyLXNlZ21lbnQgaGVhZGVyIGluIHRoZSBvc3RvcmUKKyAqCisgKiBAY3JjOgkJCWNyYzMyIG9mIGhlYWRlciAodGhlcmUgaXMgbm8gZGF0YSkKKyAqIEBwYWQ6CQkJdW51c2VkLCBtdXN0IGJlIDAKKyAqIEB0eXBlOgkJCXNlZ21lbnQgdHlwZSwgc2VlIGFib3ZlCisgKiBAbGV2ZWw6CQkJR0MgbGV2ZWwgZm9yIGFsbCBvYmplY3RzIGluIHRoaXMgc2VnbWVudAorICogQHNlZ25vOgkJCXNlZ21lbnQgbnVtYmVyCisgKiBAZWM6CQkJCWVyYXNlIGNvdW50IGZvciB0aGlzIHNlZ21lbnQKKyAqIEBnZWM6CQkJZ2xvYmFsIGVyYXNlIGNvdW50IGF0IHRpbWUgb2Ygd3JpdGluZworICovCitzdHJ1Y3QgbG9nZnNfc2VnbWVudF9oZWFkZXIgeworCV9fYmUzMgljcmM7CisJX19iZTE2CXBhZDsKKwlfX3U4CXR5cGU7CisJX191OAlsZXZlbDsKKwlfX2JlMzIJc2Vnbm87CisJX19iZTMyCWVjOworCV9fYmU2NAlnZWM7Cit9OworCitTSVpFX0NIRUNLKGxvZ2ZzX3NlZ21lbnRfaGVhZGVyLCBMT0dGU19TRUdNRU5UX0hFQURFUlNJWkUpOworCisjZGVmaW5lIExPR0ZTX0ZFQVRVUkVTX0lOQ09NUEFUCQkoMHVsbCkKKyNkZWZpbmUgTE9HRlNfRkVBVFVSRVNfUk9fQ09NUEFUCSgwdWxsKQorI2RlZmluZSBMT0dGU19GRUFUVVJFU19DT01QQVQJCSgwdWxsKQorCisvKioKKyAqIHN0cnVjdCBsb2dmc19kaXNrX3N1cGVyIC0gb24tbWVkaXVtIHN1cGVyYmxvY2sKKyAqCisgKiBAZHNfbWFnaWM6CQkJbWFnaWMgbnVtYmVyLCBtdXN0IGVxdWFsIExPR0ZTX01BR0lDCisgKiBAZHNfY3JjOgkJCWNyYzMyIG9mIHN0cnVjdHVyZSBzdGFydGluZyB3aXRoIHRoZSBuZXh0IGZpZWxkCisgKiBAZHNfaWZpbGVfbGV2ZWxzOgkJbWF4aW11bSBudW1iZXIgb2YgbGV2ZWxzIGZvciBpZmlsZQorICogQGRzX2libG9ja19sZXZlbHM6CQltYXhpbXVtIG51bWJlciBvZiBsZXZlbHMgZm9yIHJlZ3VsYXIgZmlsZXMKKyAqIEBkc19kYXRhX2xldmVsczoJCW51bWJlciBvZiBzZXBlcmF0ZSBsZXZlbHMgZm9yIGRhdGEKKyAqIEBwYWQwOgkJCXJlc2VydmVkLCBtdXN0IGJlIDAKKyAqIEBkc19mZWF0dXJlX2luY29tcGF0OglpbmNvbXBhdGlibGUgZmlsZXN5c3RlbSBmZWF0dXJlcworICogQGRzX2ZlYXR1cmVfcm9fY29tcGF0OglyZWFkLW9ubHkgY29tcGF0aWJsZSBmaWxlc3lzdGVtIGZlYXR1cmVzCisgKiBAZHNfZmVhdHVyZV9jb21wYXQ6CQljb21wYXRpYmxlIGZpbGVzeXN0ZW0gZmVhdHVyZXMKKyAqIEBkc19mbGFnczoJCQlmbGFncworICogQGRzX3NlZ21lbnRfc2hpZnQ6CQlsb2cyIG9mIHNlZ21lbnQgc2l6ZQorICogQGRzX2Jsb2NrX3NoaWZ0OgkJbG9nMiBvZiBibG9jayBzaXplCisgKiBAZHNfd3JpdGVfc2hpZnQ6CQlsb2cyIG9mIHdyaXRlIHNpemUKKyAqIEBwYWQxOgkJCXJlc2VydmVkLCBtdXN0IGJlIDAKKyAqIEBkc19qb3VybmFsX3NlZzoJCXNlZ21lbnRzIHVzZWQgYnkgcHJpbWFyeSBqb3VybmFsCisgKiBAZHNfcm9vdF9yZXNlcnZlOgkJYnl0ZXMgcmVzZXJ2ZWQgZm9yIHRoZSBzdXBlcnVzZXIKKyAqIEBkc19zcGVlZF9yZXNlcnZlOgkJYnl0ZXMgcmVzZXJ2ZWQgdG8gc3BlZWQgdXAgR0MKKyAqIEBkc19iYWRfc2VnX3Jlc2VydmU6CQludW1iZXIgb2Ygc2VnbWVudHMgcmVzZXJ2ZWQgdG8gaGFuZGxlIGJhZCBibG9ja3MKKyAqIEBwYWQyOgkJCXJlc2VydmVkLCBtdXN0IGJlIDAKKyAqIEBwYWQzOgkJCXJlc2VydmVkLCBtdXN0IGJlIDAKKyAqCisgKiBDb250YWlucyBvbmx5IHJlYWQtb25seSBmaWVsZHMuICBSZWFkLXdyaXRlIGZpZWxkcyBsaWtlIHRoZSBhbW91bnQgb2YgdXNlZAorICogc3BhY2UgaXMgdHJhY2tlZCBpbiB0aGUgZHluYW1pYyBzdXBlcmJsb2NrLCB3aGljaCBpcyBzdG9yZWQgaW4gdGhlIGpvdXJuYWwuCisgKi8KK3N0cnVjdCBsb2dmc19kaXNrX3N1cGVyIHsKKwlzdHJ1Y3QgbG9nZnNfc2VnbWVudF9oZWFkZXIgZHNfc2g7CisJX19iZTY0CWRzX21hZ2ljOworCisJX19iZTMyCWRzX2NyYzsKKwlfX3U4CWRzX2lmaWxlX2xldmVsczsKKwlfX3U4CWRzX2libG9ja19sZXZlbHM7CisJX191OAlkc19kYXRhX2xldmVsczsKKwlfX3U4CWRzX3NlZ21lbnRfc2hpZnQ7CisJX191OAlkc19ibG9ja19zaGlmdDsKKwlfX3U4CWRzX3dyaXRlX3NoaWZ0OworCV9fdTgJcGFkMFs2XTsKKworCV9fYmU2NAlkc19maWxlc3lzdGVtX3NpemU7CisJX19iZTMyCWRzX3NlZ21lbnRfc2l6ZTsKKwlfX2JlMzIgIGRzX2JhZF9zZWdfcmVzZXJ2ZTsKKworCV9fYmU2NAlkc19mZWF0dXJlX2luY29tcGF0OworCV9fYmU2NAlkc19mZWF0dXJlX3JvX2NvbXBhdDsKKworCV9fYmU2NAlkc19mZWF0dXJlX2NvbXBhdDsKKwlfX2JlNjQJZHNfZmVhdHVyZV9mbGFnczsKKworCV9fYmU2NAlkc19yb290X3Jlc2VydmU7CisJX19iZTY0ICBkc19zcGVlZF9yZXNlcnZlOworCisJX19iZTMyCWRzX2pvdXJuYWxfc2VnW0xPR0ZTX0pPVVJOQUxfU0VHU107CisKKwlfX2JlNjQJZHNfc3VwZXJfb2ZzWzJdOworCV9fYmU2NAlwYWQzWzhdOworfTsKKworU0laRV9DSEVDSyhsb2dmc19kaXNrX3N1cGVyLCAyNTYpOworCisvKgorICogT2JqZWN0IHR5cGVzOgorICogT0JKX0JMT0NLCS0gRGF0YSBvciBpbmRpcmVjdCBibG9jaworICogT0JKX0lOT0RFCS0gSW5vZGUKKyAqIE9CSl9ERU5UUlkJLSBEZW50cnkKKyAqLworZW51bSB7CisJT0JKX0JMT0NLCT0gMHgwNCwKKwlPQkpfSU5PREUJPSAweDA1LAorCU9CSl9ERU5UUlkJPSAweDA2LAorfTsKKworLyoqCisgKiBzdHJ1Y3QgbG9nZnNfb2JqZWN0X2hlYWRlciAtIHBlci1vYmplY3QgaGVhZGVyIGluIHRoZSBvc3RvcmUKKyAqCisgKiBAY3JjOgkJCWNyYzMyIG9mIGhlYWRlciwgZXhjbHVkaW5nIGRhdGFfY3JjCisgKiBAbGVuOgkJCWxlbmd0aCBvZiBkYXRhCisgKiBAdHlwZToJCQlvYmplY3QgdHlwZSwgc2VlIGFib3ZlCisgKiBAY29tcHI6CQkJY29tcHJlc3Npb24gdHlwZQorICogQGlubzoJCQlpbm9kZSBudW1iZXIKKyAqIEBiaXg6CQkJYmxvY2sgaW5kZXgKKyAqIEBkYXRhX2NyYzoJCQljcmMzMiBvZiBwYXlsb2FkCisgKi8KK3N0cnVjdCBsb2dmc19vYmplY3RfaGVhZGVyIHsKKwlfX2JlMzIJY3JjOworCV9fYmUxNglsZW47CisJX191OAl0eXBlOworCV9fdTgJY29tcHI7CisJX19iZTY0CWlubzsKKwlfX2JlNjQJYml4OworCV9fYmUzMglkYXRhX2NyYzsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK1NJWkVfQ0hFQ0sobG9nZnNfb2JqZWN0X2hlYWRlciwgTE9HRlNfT0JKRUNUX0hFQURFUlNJWkUpOworCisvKgorICogUmVzZXJ2ZWQgaW5vZGUgbnVtYmVyczoKKyAqIExPR0ZTX0lOT19NQVNURVIJLSBtYXN0ZXIgaW5vZGUgKGZvciBpbm9kZSBmaWxlKQorICogTE9HRlNfSU5PX1JPT1QJLSByb290IGRpcmVjdG9yeQorICogTE9HRlNfSU5PX1NFR0ZJTEUJLSBwZXItc2VnbWVudCB1c2VkIGJ5dGVzIGFuZCBlcmFzZSBjb3VudAorICovCitlbnVtIHsKKwlMT0dGU19JTk9fTUFQUElORwk9IDB4MDAsCisJTE9HRlNfSU5PX01BU1RFUgk9IDB4MDEsCisJTE9HRlNfSU5PX1JPT1QJCT0gMHgwMiwKKwlMT0dGU19JTk9fU0VHRklMRQk9IDB4MDMsCisJTE9HRlNfUkVTRVJWRURfSU5PUwk9IDB4MTAsCit9OworCisvKgorICogSW5vZGUgZmxhZ3MuICBIaWdoIGJpdHMgc2hvdWxkIG5ldmVyIGJlIHdyaXR0ZW4gdG8gdGhlIG1lZGl1bS4gIFRoZXkgYXJlCisgKiByZXNlcnZlZCBmb3IgaW4tbWVtb3J5IHVzYWdlLgorICogTG93IGJpdHMgc2hvdWxkIGVpdGhlciByZW1haW4gaW4gc3luYyB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIEZTXypfRkwgb3IKKyAqIHJldXNlIHNsb3RzIHRoYXQgb2J2aW91c2x5IGRvbid0IG1ha2Ugc2Vuc2UgZm9yIGxvZ2ZzLgorICoKKyAqIExPR0ZTX0lGX0RJUlRZCUlub2RlIG11c3QgYmUgd3JpdHRlbiBiYWNrCisgKiBMT0dGU19JRl9aT01CSUUJSW5vZGUgaGFzIGJlZW4gZGVsZXRlZAorICogTE9HRlNfSUZfU1RJTExCT1JOCS1FTk9TUEMgaGFwcGVuZWQgd2hlbiBjcmVhdGluZyBpbm9kZQorICovCisjZGVmaW5lIExPR0ZTX0lGX0NPTVBSRVNTRUQJMHgwMDAwMDAwNCAvKiA9PSBGU19DT01QUl9GTCAqLworI2RlZmluZSBMT0dGU19JRl9ESVJUWQkJMHgyMDAwMDAwMAorI2RlZmluZSBMT0dGU19JRl9aT01CSUUJCTB4NDAwMDAwMDAKKyNkZWZpbmUgTE9HRlNfSUZfU1RJTExCT1JOCTB4ODAwMDAwMDAKKworLyogRmxhZ3MgYXZhaWxhYmxlIHRvIGNoYXR0ciAqLworI2RlZmluZSBMT0dGU19GTF9VU0VSX1ZJU0lCTEUJKExPR0ZTX0lGX0NPTVBSRVNTRUQpCisjZGVmaW5lIExPR0ZTX0ZMX1VTRVJfTU9ESUZJQUJMRSAoTE9HRlNfSUZfQ09NUFJFU1NFRCkKKy8qIEZsYWdzIGluaGVyaXRlZCBmcm9tIHBhcmVudCBkaXJlY3Rvcnkgb24gZmlsZS9kaXJlY3RvcnkgY3JlYXRpb24gKi8KKyNkZWZpbmUgTE9HRlNfRkxfSU5IRVJJVEVECShMT0dGU19JRl9DT01QUkVTU0VEKQorCisvKioKKyAqIHN0cnVjdCBsb2dmc19kaXNrX2lub2RlIC0gb24tbWVkaXVtIGlub2RlCisgKgorICogQGRpX21vZGU6CQkJZmlsZSBtb2RlCisgKiBAZGlfcGFkOgkJCXJlc2VydmVkLCBtdXN0IGJlIDAKKyAqIEBkaV9mbGFnczoJCQlpbm9kZSBmbGFncywgc2VlIGFib3ZlCisgKiBAZGlfdWlkOgkJCXVzZXIgaWQKKyAqIEBkaV9naWQ6CQkJZ3JvdXAgaWQKKyAqIEBkaV9jdGltZToJCQljaGFuZ2UgdGltZQorICogQGRpX210aW1lOgkJCW1vZGlmeSB0aW1lCisgKiBAZGlfcmVmY291bnQ6CQlyZWZlcmVuY2UgY291bnQgKGFrYSBubGluayBvciBsaW5rIGNvdW50KQorICogQGRpX2dlbmVyYXRpb246CQlpbm9kZSBnZW5lcmF0aW9uLCBmb3IgbmZzCisgKiBAZGlfdXNlZF9ieXRlczoJCW51bWJlciBvZiBieXRlcyB1c2VkCisgKiBAZGlfc2l6ZToJCQlmaWxlIHNpemUKKyAqIEBkaV9kYXRhOgkJCWRhdGEgcG9pbnRlcnMKKyAqLworc3RydWN0IGxvZ2ZzX2Rpc2tfaW5vZGUgeworCV9fYmUxNglkaV9tb2RlOworCV9fdTgJZGlfaGVpZ2h0OworCV9fdTgJZGlfcGFkOworCV9fYmUzMglkaV9mbGFnczsKKwlfX2JlMzIJZGlfdWlkOworCV9fYmUzMglkaV9naWQ7CisKKwlfX2JlNjQJZGlfY3RpbWU7CisJX19iZTY0CWRpX210aW1lOworCisJX19iZTY0CWRpX2F0aW1lOworCV9fYmUzMglkaV9yZWZjb3VudDsKKwlfX2JlMzIJZGlfZ2VuZXJhdGlvbjsKKworCV9fYmU2NAlkaV91c2VkX2J5dGVzOworCV9fYmU2NAlkaV9zaXplOworCisJX19iZTY0CWRpX2RhdGFbTE9HRlNfRU1CRURERURfRklFTERTXTsKK307CisKK1NJWkVfQ0hFQ0sobG9nZnNfZGlza19pbm9kZSwgMjAwKTsKKworI2RlZmluZSBJTk9ERV9QT0lOVEVSX09GUyBcCisJKG9mZnNldG9mKHN0cnVjdCBsb2dmc19kaXNrX2lub2RlLCBkaV9kYXRhKSAvIHNpemVvZihfX2JlNjQpKQorI2RlZmluZSBJTk9ERV9VU0VEX09GUyBcCisJKG9mZnNldG9mKHN0cnVjdCBsb2dmc19kaXNrX2lub2RlLCBkaV91c2VkX2J5dGVzKSAvIHNpemVvZihfX2JlNjQpKQorI2RlZmluZSBJTk9ERV9TSVpFX09GUyBcCisJKG9mZnNldG9mKHN0cnVjdCBsb2dmc19kaXNrX2lub2RlLCBkaV9zaXplKSAvIHNpemVvZihfX2JlNjQpKQorI2RlZmluZSBJTk9ERV9IRUlHSFRfT0ZTCSgwKQorCisvKioKKyAqIHN0cnVjdCBsb2dmc19kaXNrX2RlbnRyeSAtIG9uLW1lZGl1bSBkZW50cnkgc3RydWN0dXJlCisgKgorICogQGlubzoJCQlpbm9kZSBudW1iZXIKKyAqIEBuYW1lbGVuOgkJCWxlbmd0aCBvZiBmaWxlIG5hbWUKKyAqIEB0eXBlOgkJCWZpbGUgdHlwZSwgaWRlbnRpY2FsIHRvIGJpdHMgMTIuLjE1IG9mIG1vZGUKKyAqIEBuYW1lOgkJCWZpbGUgbmFtZQorICovCisvKiBGSVhNRTogYWRkIDYgYnl0ZXMgb2YgcGFkZGluZyB0byByZW1vdmUgdGhlIF9fcGFja2VkICovCitzdHJ1Y3QgbG9nZnNfZGlza19kZW50cnkgeworCV9fYmU2NAlpbm87CisJX19iZTE2CW5hbWVsZW47CisJX191OAl0eXBlOworCV9fdTgJbmFtZVtMT0dGU19NQVhfTkFNRUxFTl07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitTSVpFX0NIRUNLKGxvZ2ZzX2Rpc2tfZGVudHJ5LCAyNjYpOworCisjZGVmaW5lIFJFU0VSVkVECQkweGZmZmZmZmZmCisjZGVmaW5lIEJBRFNFRwkJCTB4ZmZmZmZmZmYKKy8qKgorICogc3RydWN0IGxvZ2ZzX3NlZ21lbnRfZW50cnkgLSBzZWdtZW50IGZpbGUgZW50cnkKKyAqCisgKiBAZWNfbGV2ZWw6CQkJZXJhc2UgY291bnQgYW5kIGxldmVsCisgKiBAdmFsaWQ6CQkJbnVtYmVyIG9mIHZhbGlkIGJ5dGVzCisgKgorICogU2VnbWVudCBmaWxlIGNvbnRhaW5zIG9uZSBlbnRyeSBmb3IgZXZlcnkgc2VnbWVudC4gIGVjX2xldmVsIGNvbnRhaW5zIHRoZQorICogZXJhc2Vjb3VudCBpbiB0aGUgdXBwZXIgMjggYml0cyBhbmQgdGhlIGxldmVsIGluIHRoZSBsb3dlciA0IGJpdHMuICBBbgorICogZWNfbGV2ZWwgb2YgQkFEU0VHICgtMSkgaWRlbnRpZmllcyBiYWQgc2VnbWVudHMuICB2YWxpZCBjb250YWlucyB0aGUgbnVtYmVyCisgKiBvZiB2YWxpZCBieXRlcyBvciBSRVNFUlZFRCAoLTEgYWdhaW4pIGlmIHRoZSBzZWdtZW50IGlzIHVzZWQgZm9yIGVpdGhlciB0aGUKKyAqIHN1cGVyYmxvY2sgb3IgdGhlIGpvdXJuYWwsIG9yIHdoZW4gdGhlIHNlZ21lbnQgaXMgYmFkLgorICovCitzdHJ1Y3QgbG9nZnNfc2VnbWVudF9lbnRyeSB7CisJX19iZTMyCWVjX2xldmVsOworCV9fYmUzMgl2YWxpZDsKK307CisKK1NJWkVfQ0hFQ0sobG9nZnNfc2VnbWVudF9lbnRyeSwgOCk7CisKKy8qKgorICogc3RydWN0IGxvZ2ZzX2pvdXJuYWxfaGVhZGVyIC0gaGVhZGVyIGZvciBqb3VybmFsIGVudHJpZXMgKEpFcykKKyAqCisgKiBAaF9jcmM6CQkJY3JjMzIgb2Ygam91cm5hbCBlbnRyeQorICogQGhfbGVuOgkJCWxlbmd0aCBvZiBjb21wcmVzc2VkIGpvdXJuYWwgZW50cnksCisgKgkJCQlub3QgaW5jbHVkaW5nIGhlYWRlcgorICogQGhfZGF0YWxlbjoJCQlsZW5ndGggb2YgdW5jb21wcmVzc2VkIGRhdGEKKyAqIEBoX3R5cGU6CQkJSkUgdHlwZQorICogQGhfY29tcHI6CQkJY29tcHJlc3Npb24gdHlwZQorICogQGhfcGFkOgkJCXJlc2VydmVkCisgKi8KK3N0cnVjdCBsb2dmc19qb3VybmFsX2hlYWRlciB7CisJX19iZTMyCWhfY3JjOworCV9fYmUxNgloX2xlbjsKKwlfX2JlMTYJaF9kYXRhbGVuOworCV9fYmUxNgloX3R5cGU7CisJX191OAloX2NvbXByOworCV9fdTgJaF9wYWRbNV07Cit9OworCitTSVpFX0NIRUNLKGxvZ2ZzX2pvdXJuYWxfaGVhZGVyLCAxNik7CisKKy8qCisgKiBMaWZlIGV4cGVjdGVuY3kgb2YgZGF0YS4KKyAqIFZJTV9ERUZBVUxUCQktIGRlZmF1bHQgdmltCisgKiBWSU1fU0VHRklMRQkJLSBmb3Igc2VnbWVudCBmaWxlIG9ubHkgLSB2ZXJ5IHNob3J0LWxpdmluZworICogVklNX0dDCQktIEdDJ2QgZGF0YSAtIGxpa2VseSBsb25nLWxpdmluZworICovCitlbnVtIGxvZ2ZzX3ZpbSB7CisJVklNX0RFRkFVTFQJPSAwLAorCVZJTV9TRUdGSUxFCT0gMSwKK307CisKKy8qKgorICogc3RydWN0IGxvZ2ZzX2plX2FyZWEgLSB3YnVmIGhlYWRlcgorICoKKyAqIEBzZWdubzoJCQlzZWdtZW50IG51bWJlciBvZiBhcmVhCisgKiBAdXNlZF9ieXRlczoJCQludW1iZXIgb2YgYnl0ZXMgYWxyZWFkeSB1c2VkCisgKiBAZ2NfbGV2ZWw6CQkJR0MgbGV2ZWwKKyAqIEB2aW06CQkJbGlmZSBleHBlY3RhbmN5IG9mIGRhdGEKKyAqCisgKiAiQXJlYXMiIGFyZSBzZWdtZW50cyBjdXJyZW50bHkgYmVpbmcgdXNlZCBmb3Igd3JpdGluZy4gIFRoZXJlIGlzIGF0IGxlYXN0CisgKiBvbmUgYXJlYSBwZXIgR0MgbGV2ZWwuICBTZXZlcmFsIG1heSBiZSB1c2VkIHRvIHNlcGVyYXRlIGxvbmctbGl2aW5nIGZyb20KKyAqIHNob3J0LWxpdmluZyBkYXRhLiAgSWYgYW4gYXJlYSB3aXRoIHVua25vd24gdmltIGlzIGVuY291bnRlcmVkLCBpdCBjYW4KKyAqIHNpbXBseSBiZSBjbG9zZWQuCisgKiBUaGUgd3JpdGUgYnVmZmVyIGltbWVkaWF0ZWx5IGZvbGxvdyB0aGlzIGhlYWRlci4KKyAqLworc3RydWN0IGxvZ2ZzX2plX2FyZWEgeworCV9fYmUzMglzZWdubzsKKwlfX2JlMzIJdXNlZF9ieXRlczsKKwlfX3U4CWdjX2xldmVsOworCV9fdTgJdmltOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworU0laRV9DSEVDSyhsb2dmc19qZV9hcmVhLCAxMCk7CisKKyNkZWZpbmUgTUFYX0pPVVJOQUxfSEVBREVSIFwKKwkoc2l6ZW9mKHN0cnVjdCBsb2dmc19qb3VybmFsX2hlYWRlcikgKyBzaXplb2Yoc3RydWN0IGxvZ2ZzX2plX2FyZWEpKQorCisvKioKKyAqIHN0cnVjdCBsb2dmc19qZV9keW5zYiAtIGR5bmFtaWMgc3VwZXJibG9jaworICoKKyAqIEBkc19nZWM6CQkJZ2xvYmFsIGVyYXNlIGNvdW50CisgKiBAZHNfc3dlZXBlcjoJCQljdXJyZW50IHBvc2l0aW9uIG9mIEdDICJzd2VlcGVyIgorICogQGRzX3JlbmFtZV9kaXI6CQlzb3VyY2UgZGlyZWN0b3J5IGlubyAoc2VlIGRpci5jIGRvY3VtZW50YXRpb24pCisgKiBAZHNfcmVuYW1lX3BvczoJCXBvc2l0aW9uIG9mIHNvdXJjZSBkZCAoc2VlIGRpci5jIGRvY3VtZW50YXRpb24pCisgKiBAZHNfdmljdGltX2lubzoJCXZpY3RpbXMgb2YgaW5jb21wbGV0ZSBkaXIgb3BlcmF0aW9uIChzZWUgZGlyLmMpCisgKiBAZHNfdmljdGltX2lubzoJCXBhcmVudCBpbm9kZSBvZiB2aWN0aW0gKHNlZSBkaXIuYykKKyAqIEBkc191c2VkX2J5dGVzOgkJbnVtYmVyIG9mIHVzZWQgYnl0ZXMKKyAqLworc3RydWN0IGxvZ2ZzX2plX2R5bnNiIHsKKwlfX2JlNjQJZHNfZ2VjOworCV9fYmU2NAlkc19zd2VlcGVyOworCisJX19iZTY0CWRzX3JlbmFtZV9kaXI7CisJX19iZTY0CWRzX3JlbmFtZV9wb3M7CisKKwlfX2JlNjQJZHNfdmljdGltX2lubzsKKwlfX2JlNjQJZHNfdmljdGltX3BhcmVudDsgLyogWFhYICovCisKKwlfX2JlNjQJZHNfdXNlZF9ieXRlczsKKwlfX2JlMzIJZHNfZ2VuZXJhdGlvbjsKKwlfX2JlMzIJcGFkOworfTsKKworU0laRV9DSEVDSyhsb2dmc19qZV9keW5zYiwgNjQpOworCisvKioKKyAqIHN0cnVjdCBsb2dmc19qZV9hbmNob3IgLSBhbmNob3Igb2YgZmlsZXN5c3RlbSB0cmVlLCBha2EgbWFzdGVyIGlub2RlCisgKgorICogQGRhX3NpemU6CQkJc2l6ZSBvZiBpbm9kZSBmaWxlCisgKiBAZGFfbGFzdF9pbm86CQlsYXN0IGNyZWF0ZWQgaW5vZGUKKyAqIEBkYV91c2VkX2J5dGVzOgkJbnVtYmVyIG9mIGJ5dGVzIHVzZWQKKyAqIEBkYV9kYXRhOgkJCWRhdGEgcG9pbnRlcnMKKyAqLworc3RydWN0IGxvZ2ZzX2plX2FuY2hvciB7CisJX19iZTY0CWRhX3NpemU7CisJX19iZTY0CWRhX2xhc3RfaW5vOworCisJX19iZTY0CWRhX3VzZWRfYnl0ZXM7CisJdTgJZGFfaGVpZ2h0OworCXU4CXBhZFs3XTsKKworCV9fYmU2NAlkYV9kYXRhW0xPR0ZTX0VNQkVEREVEX0ZJRUxEU107Cit9OworCitTSVpFX0NIRUNLKGxvZ2ZzX2plX2FuY2hvciwgMTY4KTsKKworLyoqCisgKiBzdHJ1Y3QgbG9nZnNfamVfc3BpbGxvdXQgLSBzcGlsbG91dCBlbnRyeSAoZnJvbSAxc3QgdG8gMm5kIGpvdXJuYWwpCisgKgorICogQHNvX3NlZ21lbnQ6CQkJc2VnbWVudHMgdXNlZCBmb3IgMm5kIGpvdXJuYWwKKyAqCisgKiBMZW5ndGggb2YgdGhlIGFycmF5IGlzIGdpdmVuIGJ5IGhfbGVuIGZpZWxkIGluIHRoZSBoZWFkZXIuCisgKi8KK3N0cnVjdCBsb2dmc19qZV9zcGlsbG91dCB7CisJX19iZTY0CXNvX3NlZ21lbnRbMF07Cit9OworCitTSVpFX0NIRUNLKGxvZ2ZzX2plX3NwaWxsb3V0LCAwKTsKKworLyoqCisgKiBzdHJ1Y3QgbG9nZnNfamVfam91cm5hbF9lYyAtIGVyYXNlIGNvdW50cyBmb3IgYWxsIGpvdXJuYWwgc2VnbWVudHMKKyAqCisgKiBAZWM6CQkJCWVyYXNlIGNvdW50CisgKgorICogTGVuZ3RoIG9mIHRoZSBhcnJheSBpcyBnaXZlbiBieSBoX2xlbiBmaWVsZCBpbiB0aGUgaGVhZGVyLgorICovCitzdHJ1Y3QgbG9nZnNfamVfam91cm5hbF9lYyB7CisJX19iZTMyCWVjWzBdOworfTsKKworU0laRV9DSEVDSyhsb2dmc19qZV9qb3VybmFsX2VjLCAwKTsKKworLyoqCisgKiBzdHJ1Y3QgbG9nZnNfamVfZnJlZV9zZWdtZW50cyAtIGxpc3Qgb2YgZnJlZSBzZWdtZXRucyB3aXRoIGVyYXNlIGNvdW50CisgKi8KK3N0cnVjdCBsb2dmc19qZV9mcmVlX3NlZ21lbnRzIHsKKwlfX2JlMzIJc2Vnbm87CisJX19iZTMyCWVjOworfTsKKworU0laRV9DSEVDSyhsb2dmc19qZV9mcmVlX3NlZ21lbnRzLCA4KTsKKworLyoqCisgKiBzdHJ1Y3QgbG9nZnNfc2VnX2FsaWFzIC0gbGlzdCBvZiBzZWdtZW50IGFsaWFzZXMKKyAqLworc3RydWN0IGxvZ2ZzX3NlZ19hbGlhcyB7CisJX19iZTMyCW9sZF9zZWdubzsKKwlfX2JlMzIJbmV3X3NlZ25vOworfTsKKworU0laRV9DSEVDSyhsb2dmc19zZWdfYWxpYXMsIDgpOworCisvKioKKyAqIHN0cnVjdCBsb2dmc19vYmpfYWxpYXMgLSBsaXN0IG9mIG9iamVjdCBhbGlhc2VzCisgKi8KK3N0cnVjdCBsb2dmc19vYmpfYWxpYXMgeworCV9fYmU2NAlpbm87CisJX19iZTY0CWJpeDsKKwlfX2JlNjQJdmFsOworCXU4CWxldmVsOworCXU4CXBhZFs1XTsKKwlfX2JlMTYJY2hpbGRfbm87Cit9OworCitTSVpFX0NIRUNLKGxvZ2ZzX29ial9hbGlhcywgMzIpOworCisvKioKKyAqIENvbXByZXNzaW9uIHR5cGVzLgorICoKKyAqIENPTVBSX05PTkUJLSB1bmNvbXByZXNzZWQKKyAqIENPTVBSX1pMSUIJLSBjb21wcmVzc2VkIHdpdGggemxpYgorICovCitlbnVtIHsKKwlDT01QUl9OT05FCT0gMCwKKwlDT01QUl9aTElCCT0gMSwKK307CisKKy8qCisgKiBKb3VybmFsIGVudHJpZXMgY29tZSBpbiBncm91cHMgb2YgMTYuICBGaXJzdCBncm91cCBjb250YWlucyB1bmlxdWUKKyAqIGVudHJpZXMsIG5leHQgZ3JvdXBzIGNvbnRhaW4gb25lIGVudHJ5IHBlciBsZXZlbAorICoKKyAqIEpFX0ZJUlNUCS0gc21hbGxlc3QgcG9zc2libGUgam91cm5hbCBlbnRyeSBudW1iZXIKKyAqCisgKiBKRUdfQkFTRQktIGJhc2UgZ3JvdXAsIGNvbnRhaW5pbmcgdW5pcXVlIGVudHJpZXMKKyAqIEpFX0NPTU1JVAktIGNvbW1pdCBlbnRyeSwgdmFsaWRhdGVzIGFsbCBwcmV2aW91cyBlbnRyaWVzCisgKiBKRV9EWU5TQgktIGR5bmFtaWMgc3VwZXJibG9jaywgYW55dGhpbmcgdGhhdCBvdWdodCB0byBiZSBpbiB0aGUKKyAqCQkgIHN1cGVyYmxvY2sgYnV0IGNhbm5vdCBiZWNhdXNlIGl0IGlzIHJlYWQtd3JpdGUgZGF0YQorICogSkVfQU5DSE9SCS0gYW5jaG9yIGFrYSBtYXN0ZXIgaW5vZGUgYWthIGlub2RlIGZpbGUncyBpbm9kZQorICogSkVfRVJBU0VDT1VOVCAgZXJhc2Vjb3VudHMgZm9yIGFsbCBqb3VybmFsIHNlZ21lbnRzCisgKiBKRV9TUElMTE9VVAktIHVudXNlZAorICogSkVfU0VHX0FMSUFTCS0gYWxpYXNlcyBzZWdtZW50cworICogSkVfQVJFQQktIGFyZWEgZGVzY3JpcHRpb24KKyAqCisgKiBKRV9MQVNUCS0gbGFyZ2VzdCBwb3NzaWJsZSBqb3VybmFsIGVudHJ5IG51bWJlcgorICovCitlbnVtIHsKKwlKRV9GSVJTVAk9IDB4MDEsCisKKwlKRUdfQkFTRQk9IDB4MDAsCisJSkVfQ09NTUlUCT0gMHgwMiwKKwlKRV9EWU5TQgk9IDB4MDMsCisJSkVfQU5DSE9SCT0gMHgwNCwKKwlKRV9FUkFTRUNPVU5UCT0gMHgwNSwKKwlKRV9TUElMTE9VVAk9IDB4MDYsCisJSkVfT0JKX0FMSUFTCT0gMHgwZCwKKwlKRV9BUkVBCQk9IDB4MGUsCisKKwlKRV9MQVNUCQk9IDB4MGUsCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL3JlYWR3cml0ZS5jIGIvZnMvbG9nZnMvcmVhZHdyaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EyM2IzZQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2xvZ2ZzL3JlYWR3cml0ZS5jCkBAIC0wLDAgKzEsMjI0NiBAQAorLyoKKyAqIGZzL2xvZ2ZzL3JlYWR3cml0ZS5jCisgKgorICogQXMgc2hvdWxkIGJlIG9idmlvdXMgZm9yIExpbnV4IGtlcm5lbCBjb2RlLCBsaWNlbnNlIGlzIEdQTHYyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDggSm9lcm4gRW5nZWwgPGpvZXJuQGxvZ2ZzLm9yZz4KKyAqCisgKgorICogQWN0dWFsbHkgY29udGFpbnMgZml2ZSBzZXRzIG9mIHZlcnkgc2ltaWxhciBmdW5jdGlvbnM6CisgKiByZWFkCQlyZWFkIGJsb2NrcyBmcm9tIGEgZmlsZQorICogc2Vla19ob2xlCWZpbmQgbmV4dCBob2xlCisgKiBzZWVrX2RhdGEJZmluZCBuZXh0IGRhdGEgYmxvY2sKKyAqIHZhbGlkCWNoZWNrIHdoZXRoZXIgYSBibG9jayBzdGlsbCBiZWxvbmdzIHRvIGEgZmlsZQorICogd3JpdGUJd3JpdGUgYmxvY2tzIHRvIGEgZmlsZQorICogZGVsZXRlCWRlbGV0ZSBhIGJsb2NrIChmb3IgZGlyZWN0b3JpZXMgYW5kIGlmaWxlKQorICogcmV3cml0ZQltb3ZlIGV4aXN0aW5nIGJsb2NrcyBvZiBhIGZpbGUgdG8gYSBuZXcgbG9jYXRpb24gKGdjIGhlbHBlcikKKyAqIHRydW5jYXRlCXRydW5jYXRlIGEgZmlsZQorICovCisjaW5jbHVkZSAibG9nZnMuaCIKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCitzdGF0aWMgdTY0IGFkanVzdF9iaXgodTY0IGJpeCwgbGV2ZWxfdCBsZXZlbCkKK3sKKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSAwOgorCQlyZXR1cm4gYml4OworCWNhc2UgTEVWRUwoMSk6CisJCXJldHVybiBtYXhfdCh1NjQsIGJpeCwgSTBfQkxPQ0tTKTsKKwljYXNlIExFVkVMKDIpOgorCQlyZXR1cm4gbWF4X3QodTY0LCBiaXgsIEkxX0JMT0NLUyk7CisJY2FzZSBMRVZFTCgzKToKKwkJcmV0dXJuIG1heF90KHU2NCwgYml4LCBJMl9CTE9DS1MpOworCWNhc2UgTEVWRUwoNCk6CisJCXJldHVybiBtYXhfdCh1NjQsIGJpeCwgSTNfQkxPQ0tTKTsKKwljYXNlIExFVkVMKDUpOgorCQlyZXR1cm4gbWF4X3QodTY0LCBiaXgsIEk0X0JMT0NLUyk7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIGJpeDsKKwl9Cit9CisKK3N0YXRpYyBpbmxpbmUgdTY0IG1heGJpeCh1OCBoZWlnaHQpCit7CisJcmV0dXJuIDFVTEwgPDwgKExPR0ZTX0JMT0NLX0JJVFMgKiBoZWlnaHQpOworfQorCisvKioKKyAqIFRoZSBpbm9kZSBhZGRyZXNzIHNwYWNlIGlzIGN1dCBpbiB0d28gaGFsdmVzLiAgTG93ZXIgaGFsZiBiZWxvbmdzIHRvIGRhdGEKKyAqIHBhZ2VzLCB1cHBlciBoYWxmIHRvIGluZGlyZWN0IGJsb2Nrcy4gIElmIHRoZSBoaWdoIGJpdCAoSU5ESVJFQ1RfQklUKSBpcworICogc2V0LCB0aGUgYWN0dWFsIGJsb2NrIGluZGV4IChiaXgpIGFuZCBsZXZlbCBjYW4gYmUgZGVyaXZlZCBmcm9tIHRoZSBwYWdlCisgKiBpbmRleC4KKyAqCisgKiBUaGUgbG93ZXN0IHRocmVlIGJpdHMgb2YgdGhlIGJsb2NrIGluZGV4IGFyZSBzZXQgdG8gMCBhZnRlciBwYWNraW5nIGFuZAorICogdW5wYWNraW5nLiAgU2luY2UgdGhlIGxvd2VzdCBuIGJpdHMgKDkgZm9yIDRLaUIgYmxvY2tzaXplKSBhcmUgaWdub3JlZAorICogYW55d2F5IHRoaXMgaXMgaGFybWxlc3MuCisgKi8KKyNkZWZpbmUgQVJDSF9TSElGVAkoQklUU19QRVJfTE9ORyAtIDMyKQorI2RlZmluZSBJTkRJUkVDVF9CSVQJKDB4ODAwMDAwMDBVTCA8PCBBUkNIX1NISUZUKQorI2RlZmluZSBMRVZFTF9TSElGVAkoMjggKyBBUkNIX1NISUZUKQorc3RhdGljIGlubGluZSBwZ29mZl90IGZpcnN0X2luZGlyZWN0X2Jsb2NrKHZvaWQpCit7CisJcmV0dXJuIElORElSRUNUX0JJVCB8ICgxVUxMIDw8IExFVkVMX1NISUZUKTsKK30KKworcGdvZmZfdCBsb2dmc19wYWNrX2luZGV4KHU2NCBiaXgsIGxldmVsX3QgbGV2ZWwpCit7CisJcGdvZmZfdCBpbmRleDsKKworCUJVR19PTihiaXggPj0gSU5ESVJFQ1RfQklUKTsKKwlpZiAobGV2ZWwgPT0gMCkKKwkJcmV0dXJuIGJpeDsKKworCWluZGV4ICA9IElORElSRUNUX0JJVDsKKwlpbmRleCB8PSAoX19mb3JjZSBsb25nKWxldmVsIDw8IExFVkVMX1NISUZUOworCWluZGV4IHw9IGJpeCA+PiAoKF9fZm9yY2UgdTgpbGV2ZWwgKiBMT0dGU19CTE9DS19CSVRTKTsKKwlyZXR1cm4gaW5kZXg7Cit9CisKK3ZvaWQgbG9nZnNfdW5wYWNrX2luZGV4KHBnb2ZmX3QgaW5kZXgsIHU2NCAqYml4LCBsZXZlbF90ICpsZXZlbCkKK3sKKwl1OCBfX2xldmVsOworCisJaWYgKCEoaW5kZXggJiBJTkRJUkVDVF9CSVQpKSB7CisJCSpiaXggPSBpbmRleDsKKwkJKmxldmVsID0gMDsKKwkJcmV0dXJuOworCX0KKworCV9fbGV2ZWwgPSAoaW5kZXggJiB+SU5ESVJFQ1RfQklUKSA+PiBMRVZFTF9TSElGVDsKKwkqbGV2ZWwgPSBMRVZFTChfX2xldmVsKTsKKwkqYml4ID0gKGluZGV4IDw8IChfX2xldmVsICogTE9HRlNfQkxPQ0tfQklUUykpICYgfklORElSRUNUX0JJVDsKKwkqYml4ID0gYWRqdXN0X2JpeCgqYml4LCAqbGV2ZWwpOworCXJldHVybjsKK30KKyN1bmRlZiBBUkNIX1NISUZUCisjdW5kZWYgSU5ESVJFQ1RfQklUCisjdW5kZWYgTEVWRUxfU0hJRlQKKworLyoKKyAqIFRpbWUgaXMgc3RvcmVkIGFzIG5hbm9zZWNvbmRzIHNpbmNlIHRoZSBlcG9jaC4KKyAqLworc3RhdGljIHN0cnVjdCB0aW1lc3BlYyBiZTY0X3RvX3RpbWVzcGVjKF9fYmU2NCBiZXRpbWUpCit7CisJcmV0dXJuIG5zX3RvX3RpbWVzcGVjKGJlNjRfdG9fY3B1KGJldGltZSkpOworfQorCitzdGF0aWMgX19iZTY0IHRpbWVzcGVjX3RvX2JlNjQoc3RydWN0IHRpbWVzcGVjIHRzcCkKK3sKKwlyZXR1cm4gY3B1X3RvX2JlNjQoKHU2NCl0c3AudHZfc2VjICogTlNFQ19QRVJfU0VDICsgdHNwLnR2X25zZWMpOworfQorCitzdGF0aWMgdm9pZCBsb2dmc19kaXNrX3RvX2lub2RlKHN0cnVjdCBsb2dmc19kaXNrX2lub2RlICpkaSwgc3RydWN0IGlub2RlKmlub2RlKQoreworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisJaW50IGk7CisKKwlpbm9kZS0+aV9tb2RlCT0gYmUxNl90b19jcHUoZGktPmRpX21vZGUpOworCWxpLT5saV9oZWlnaHQJPSBkaS0+ZGlfaGVpZ2h0OworCWxpLT5saV9mbGFncwk9IGJlMzJfdG9fY3B1KGRpLT5kaV9mbGFncyk7CisJaW5vZGUtPmlfdWlkCT0gYmUzMl90b19jcHUoZGktPmRpX3VpZCk7CisJaW5vZGUtPmlfZ2lkCT0gYmUzMl90b19jcHUoZGktPmRpX2dpZCk7CisJaW5vZGUtPmlfc2l6ZQk9IGJlNjRfdG9fY3B1KGRpLT5kaV9zaXplKTsKKwlsb2dmc19zZXRfYmxvY2tzKGlub2RlLCBiZTY0X3RvX2NwdShkaS0+ZGlfdXNlZF9ieXRlcykpOworCWlub2RlLT5pX2F0aW1lCT0gYmU2NF90b190aW1lc3BlYyhkaS0+ZGlfYXRpbWUpOworCWlub2RlLT5pX2N0aW1lCT0gYmU2NF90b190aW1lc3BlYyhkaS0+ZGlfY3RpbWUpOworCWlub2RlLT5pX210aW1lCT0gYmU2NF90b190aW1lc3BlYyhkaS0+ZGlfbXRpbWUpOworCWlub2RlLT5pX25saW5rCT0gYmUzMl90b19jcHUoZGktPmRpX3JlZmNvdW50KTsKKwlpbm9kZS0+aV9nZW5lcmF0aW9uID0gYmUzMl90b19jcHUoZGktPmRpX2dlbmVyYXRpb24pOworCisJc3dpdGNoIChpbm9kZS0+aV9tb2RlICYgU19JRk1UKSB7CisJY2FzZSBTX0lGU09DSzoJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTX0lGQkxLOgkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNfSUZDSFI6CS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU19JRklGTzoKKwkJaW5vZGUtPmlfcmRldiA9IGJlNjRfdG9fY3B1KGRpLT5kaV9kYXRhWzBdKTsKKwkJYnJlYWs7CisJY2FzZSBTX0lGRElSOgkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNfSUZSRUc6CS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU19JRkxOSzoKKwkJZm9yIChpID0gMDsgaSA8IExPR0ZTX0VNQkVEREVEX0ZJRUxEUzsgaSsrKQorCQkJbGktPmxpX2RhdGFbaV0gPSBiZTY0X3RvX2NwdShkaS0+ZGlfZGF0YVtpXSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCX0KK30KKworc3RhdGljIHZvaWQgbG9nZnNfaW5vZGVfdG9fZGlzayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbG9nZnNfZGlza19pbm9kZSpkaSkKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCWludCBpOworCisJZGktPmRpX21vZGUJPSBjcHVfdG9fYmUxNihpbm9kZS0+aV9tb2RlKTsKKwlkaS0+ZGlfaGVpZ2h0CT0gbGktPmxpX2hlaWdodDsKKwlkaS0+ZGlfcGFkCT0gMDsKKwlkaS0+ZGlfZmxhZ3MJPSBjcHVfdG9fYmUzMihsaS0+bGlfZmxhZ3MpOworCWRpLT5kaV91aWQJPSBjcHVfdG9fYmUzMihpbm9kZS0+aV91aWQpOworCWRpLT5kaV9naWQJPSBjcHVfdG9fYmUzMihpbm9kZS0+aV9naWQpOworCWRpLT5kaV9zaXplCT0gY3B1X3RvX2JlNjQoaV9zaXplX3JlYWQoaW5vZGUpKTsKKwlkaS0+ZGlfdXNlZF9ieXRlcyA9IGNwdV90b19iZTY0KGxpLT5saV91c2VkX2J5dGVzKTsKKwlkaS0+ZGlfYXRpbWUJPSB0aW1lc3BlY190b19iZTY0KGlub2RlLT5pX2F0aW1lKTsKKwlkaS0+ZGlfY3RpbWUJPSB0aW1lc3BlY190b19iZTY0KGlub2RlLT5pX2N0aW1lKTsKKwlkaS0+ZGlfbXRpbWUJPSB0aW1lc3BlY190b19iZTY0KGlub2RlLT5pX210aW1lKTsKKwlkaS0+ZGlfcmVmY291bnQJPSBjcHVfdG9fYmUzMihpbm9kZS0+aV9ubGluayk7CisJZGktPmRpX2dlbmVyYXRpb24gPSBjcHVfdG9fYmUzMihpbm9kZS0+aV9nZW5lcmF0aW9uKTsKKworCXN3aXRjaCAoaW5vZGUtPmlfbW9kZSAmIFNfSUZNVCkgeworCWNhc2UgU19JRlNPQ0s6CS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgU19JRkJMSzoJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTX0lGQ0hSOgkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNfSUZJRk86CisJCWRpLT5kaV9kYXRhWzBdID0gY3B1X3RvX2JlNjQoaW5vZGUtPmlfcmRldik7CisJCWJyZWFrOworCWNhc2UgU19JRkRJUjoJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBTX0lGUkVHOgkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIFNfSUZMTks6CisJCWZvciAoaSA9IDA7IGkgPCBMT0dGU19FTUJFRERFRF9GSUVMRFM7IGkrKykKKwkJCWRpLT5kaV9kYXRhW2ldID0gY3B1X3RvX2JlNjQobGktPmxpX2RhdGFbaV0pOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9fbG9nZnNfc2V0X2Jsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCisJaW5vZGUtPmlfYmxvY2tzID0gVUxPTkdfTUFYOworCWlmIChsaS0+bGlfdXNlZF9ieXRlcyA+PiBzYi0+c19ibG9ja3NpemVfYml0cyA8IFVMT05HX01BWCkKKwkJaW5vZGUtPmlfYmxvY2tzID0gQUxJR04obGktPmxpX3VzZWRfYnl0ZXMsIDUxMikgPj4gOTsKK30KKwordm9pZCBsb2dmc19zZXRfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBieXRlcykKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCisJbGktPmxpX3VzZWRfYnl0ZXMgPSBieXRlczsKKwlfX2xvZ2ZzX3NldF9ibG9ja3MoaW5vZGUpOworfQorCitzdGF0aWMgdm9pZCBwcmVsb2NrX3BhZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBsb2NrKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisKKwlCVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCWlmIChsb2NrKSB7CisJCUJVR19PTihQYWdlUHJlTG9ja2VkKHBhZ2UpKTsKKwkJU2V0UGFnZVByZUxvY2tlZChwYWdlKTsKKwl9IGVsc2UgeworCQkvKiBXZSBhcmUgaW4gR0MgcGF0aC4gKi8KKwkJaWYgKFBhZ2VQcmVMb2NrZWQocGFnZSkpCisJCQlzdXBlci0+c19sb2NrX2NvdW50Kys7CisJCWVsc2UKKwkJCVNldFBhZ2VQcmVMb2NrZWQocGFnZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcmV1bmxvY2tfcGFnZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGxvY2spCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKworCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CisJaWYgKGxvY2spCisJCUNsZWFyUGFnZVByZUxvY2tlZChwYWdlKTsKKwllbHNlIHsKKwkJLyogV2UgYXJlIGluIEdDIHBhdGguICovCisJCUJVR19PTighUGFnZVByZUxvY2tlZChwYWdlKSk7CisJCWlmIChzdXBlci0+c19sb2NrX2NvdW50KQorCQkJc3VwZXItPnNfbG9ja19jb3VudC0tOworCQllbHNlCisJCQlDbGVhclBhZ2VQcmVMb2NrZWQocGFnZSk7CisJfQorfQorCisvKgorICogTG9nZnMgaXMgcHJvbmUgdG8gYW4gQUItQkEgZGVhZGxvY2sgd2hlcmUgb25lIHRhc2sgdHJpZXMgdG8gYWNxdWlyZQorICogc193cml0ZV9tdXRleCB3aXRoIGEgbG9ja2VkIHBhZ2UgYW5kIEdDIHRyaWVzIHRvIGdldCB0aGF0IHBhZ2Ugd2hpbGUgaG9sZGluZworICogc193cml0ZV9tdXRleC4KKyAqIFRvIHNvbHZlIHRoaXMgaXNzdWUgbG9nZnMgd2lsbCBpZ25vcmUgdGhlIHBhZ2UgbG9jayBpZmYgdGhlIHBhZ2UgaW4gcXVlc3Rpb24KKyAqIGlzIHdhaXRpbmcgZm9yIHNfd3JpdGVfbXV0ZXguICBXZSBhbm5vdGF0ZSB0aGlzIGZhY3QgYnkgc2V0dGluZyBQR19wcmVfbG9ja2VkCisgKiBpbiBhZGRpdGlvbiB0byBQR19sb2NrZWQuCisgKi8KK3N0YXRpYyB2b2lkIGxvZ2ZzX2dldF93YmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBwYWdlICpwYWdlLAorCQlpbnQgbG9jaykKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCisJaWYgKHBhZ2UpCisJCXByZWxvY2tfcGFnZShzYiwgcGFnZSwgbG9jayk7CisKKwlpZiAobG9jaykgeworCQltdXRleF9sb2NrKCZzdXBlci0+c193cml0ZV9tdXRleCk7CisJCWxvZ2ZzX2djX3Bhc3Moc2IpOworCQkvKiBGSVhNRTogV2UgYWxzbyBoYXZlIHRvIGNoZWNrIGZvciBzaGFkb3dlZCBzcGFjZQorCQkgKiBhbmQgbWVtcG9vbCBmaWxsIGdyYWRlICovCisJfQorfQorCitzdGF0aWMgdm9pZCBsb2dmc19wdXRfd2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJaW50IGxvY2spCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKworCWlmIChwYWdlKQorCQlwcmV1bmxvY2tfcGFnZShzYiwgcGFnZSwgbG9jayk7CisJLyogT3JkZXIgbWF0dGVycyAtIHdlIG11c3QgY2xlYXIgUEdfcHJlX2xvY2tlZCBiZWZvcmUgcmVsZWFzaW5nCisJICogc193cml0ZV9tdXRleCBvciB3ZSBjb3VsZCByYWNlIGFnYWluc3QgYW5vdGhlciB0YXNrLiAqLworCWlmIChsb2NrKQorCQltdXRleF91bmxvY2soJnN1cGVyLT5zX3dyaXRlX211dGV4KTsKK30KKworc3RhdGljIHN0cnVjdCBwYWdlICpsb2dmc19nZXRfcmVhZF9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBiaXgsCisJCWxldmVsX3QgbGV2ZWwpCit7CisJcmV0dXJuIGZpbmRfb3JfY3JlYXRlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywKKwkJCWxvZ2ZzX3BhY2tfaW5kZXgoYml4LCBsZXZlbCksIEdGUF9OT0ZTKTsKK30KKworc3RhdGljIHZvaWQgbG9nZnNfcHV0X3JlYWRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl1bmxvY2tfcGFnZShwYWdlKTsKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ2ZzX2xvY2tfd3JpdGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlpbnQgbG9vcCA9IDA7CisKKwl3aGlsZSAodW5saWtlbHkoIXRyeWxvY2tfcGFnZShwYWdlKSkpIHsKKwkJaWYgKGxvb3ArKyA+IDB4MTAwMCkgeworCQkJLyogSGFzIGJlZW4gb2JzZXJ2ZWQgb25jZSBzbyBmYXIuLi4gKi8KKwkJCXByaW50ayhLRVJOX0VSUiAic3RhY2sgYXQgJXBcbiIsICZsb29wKTsKKwkJCUJVRygpOworCQl9CisJCWlmIChQYWdlUHJlTG9ja2VkKHBhZ2UpKSB7CisJCQkvKiBIb2xkZXIgb2YgcGFnZSBsb2NrIGlzIHdhaXRpbmcgZm9yIHVzLCBpdAorCQkJICogaXMgc2FmZSB0byB1c2UgdGhpcyBwYWdlLiAqLworCQkJYnJlYWs7CisJCX0KKwkJLyogU29tZSBvdGhlciBwcm9jZXNzIGhhcyB0aGlzIHBhZ2UgbG9ja2VkIGFuZCBoYXMKKwkJICogbm90aGluZyB0byBkbyB3aXRoIHVzLiAgV2FpdCBmb3IgaXQgdG8gZmluaXNoLgorCQkgKi8KKwkJc2NoZWR1bGUoKTsKKwl9CisJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKK30KKworc3RhdGljIHN0cnVjdCBwYWdlICpsb2dmc19nZXRfd3JpdGVfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgYml4LAorCQlsZXZlbF90IGxldmVsKQoreworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKKwlwZ29mZl90IGluZGV4ID0gbG9nZnNfcGFja19pbmRleChiaXgsIGxldmVsKTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgZXJyOworCityZXBlYXQ6CisJcGFnZSA9IGZpbmRfZ2V0X3BhZ2UobWFwcGluZywgaW5kZXgpOworCWlmICghcGFnZSkgeworCQlwYWdlID0gX19wYWdlX2NhY2hlX2FsbG9jKEdGUF9OT0ZTKTsKKwkJaWYgKCFwYWdlKQorCQkJcmV0dXJuIE5VTEw7CisJCWVyciA9IGFkZF90b19wYWdlX2NhY2hlX2xydShwYWdlLCBtYXBwaW5nLCBpbmRleCwgR0ZQX05PRlMpOworCQlpZiAodW5saWtlbHkoZXJyKSkgeworCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCQkJaWYgKGVyciA9PSAtRUVYSVNUKQorCQkJCWdvdG8gcmVwZWF0OworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwl9IGVsc2UgbG9nZnNfbG9ja193cml0ZV9wYWdlKHBhZ2UpOworCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CisJcmV0dXJuIHBhZ2U7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ2ZzX3VubG9ja193cml0ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmICghUGFnZVByZUxvY2tlZChwYWdlKSkKKwkJdW5sb2NrX3BhZ2UocGFnZSk7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ2ZzX3B1dF93cml0ZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWxvZ2ZzX3VubG9ja193cml0ZV9wYWdlKHBhZ2UpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKK30KKworc3RhdGljIHN0cnVjdCBwYWdlICpsb2dmc19nZXRfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgYml4LCBsZXZlbF90IGxldmVsLAorCQlpbnQgcncpCit7CisJaWYgKHJ3ID09IFJFQUQpCisJCXJldHVybiBsb2dmc19nZXRfcmVhZF9wYWdlKGlub2RlLCBiaXgsIGxldmVsKTsKKwllbHNlCisJCXJldHVybiBsb2dmc19nZXRfd3JpdGVfcGFnZShpbm9kZSwgYml4LCBsZXZlbCk7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ2ZzX3B1dF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgcncpCit7CisJaWYgKHJ3ID09IFJFQUQpCisJCWxvZ2ZzX3B1dF9yZWFkX3BhZ2UocGFnZSk7CisJZWxzZQorCQlsb2dmc19wdXRfd3JpdGVfcGFnZShwYWdlKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19nZXRfYml0cyh1NjQgdmFsLCBpbnQgc2tpcCwgaW50IG5vKQoreworCXU2NCByZXQgPSB2YWw7CisKKwlyZXQgPj49IHNraXAgKiBubzsKKwlyZXQgPDw9IDY0IC0gbm87CisJcmV0ID4+PSA2NCAtIG5vOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9iaXRzKHU2NCB2YWwsIGxldmVsX3Qgc2tpcCkKK3sKKwlyZXR1cm4gX19nZXRfYml0cyh2YWwsIChfX2ZvcmNlIGludClza2lwLCBMT0dGU19CTE9DS19CSVRTKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGluaXRfc2hhZG93X3RyZWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJc3RydWN0IHNoYWRvd190cmVlICp0cmVlKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisKKwlidHJlZV9pbml0X21lbXBvb2w2NCgmdHJlZS0+bmV3LCBzdXBlci0+c19idHJlZV9wb29sKTsKKwlidHJlZV9pbml0X21lbXBvb2w2NCgmdHJlZS0+b2xkLCBzdXBlci0+c19idHJlZV9wb29sKTsKK30KKworc3RhdGljIHZvaWQgaW5kaXJlY3Rfd3JpdGVfYmxvY2soc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jaykKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWludCByZXQ7CisKKwlwYWdlID0gYmxvY2stPnBhZ2U7CisJaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OworCWxvZ2ZzX2xvY2tfd3JpdGVfcGFnZShwYWdlKTsKKwlyZXQgPSBsb2dmc193cml0ZV9idWYoaW5vZGUsIHBhZ2UsIDApOworCWxvZ2ZzX3VubG9ja193cml0ZV9wYWdlKHBhZ2UpOworCS8qCisJICogVGhpcyBuZWVkcyBzb21lIHJld29yay4gIFVubGVzcyB5b3Ugd2FudCB5b3VyIGZpbGVzeXN0ZW0gdG8gcnVuCisJICogY29tcGxldGVseSBzeW5jaHJvbm91c2x5ICh5b3UgZG9uJ3QpLCB0aGUgZmlsZXN5c3RlbSB3aWxsIGFsd2F5cworCSAqIHJlcG9ydCB3cml0ZXMgYXMgJ3N1Y2Nlc3NmdWwnIGJlZm9yZSB0aGUgYWN0dWFsIHdvcmsgaGFzIGJlZW4KKwkgKiBkb25lLiAgVGhlIGFjdHVhbCB3b3JrIGdldHMgZG9uZSBoZXJlIGFuZCB0aGlzIGlzIHdoZXJlIGFueSBlcnJvcnMKKwkgKiB3aWxsIHNob3cgdXAuICBBbmQgdGhlcmUgaXNuJ3QgbXVjaCB3ZSBjYW4gZG8gYWJvdXQgaXQsIHJlYWxseS4KKwkgKgorCSAqIFNvbWUgYXR0ZW1wdHMgdG8gZml4IHRoZSBlcnJvcnMgKG1vdmUgZnJvbSBiYWQgYmxvY2tzLCByZXRyeSBpbywuLi4pCisJICogaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZSwgc28gYW55dGhpbmcgbGVmdCBzaG91bGQgYmUgZWl0aGVyIGEgYnJva2VuCisJICogZGV2aWNlIG9yIGEgYnVnIHNvbWV3aGVyZSBpbiBsb2dmcyBpdHNlbGYuICBCZWluZyByZWxhdGl2ZWx5IG5ldywKKwkgKiB0aGUgb2RkcyBjdXJyZW50bHkgZmF2b3IgYSBidWcsIHNvIGZvciBub3cgdGhlIGxpbmUgYmVsb3cgaXNuJ3QKKwkgKiBlbnRpcmVseSB0YXN0ZWxlcy4KKwkgKi8KKwlCVUdfT04ocmV0KTsKK30KKworc3RhdGljIHZvaWQgaW5vZGVfd3JpdGVfYmxvY2soc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jaykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCWludCByZXQ7CisKKwlpbm9kZSA9IGJsb2NrLT5pbm9kZTsKKwlpZiAoaW5vZGUtPmlfaW5vID09IExPR0ZTX0lOT19NQVNURVIpCisJCWxvZ2ZzX3dyaXRlX2FuY2hvcihpbm9kZS0+aV9zYik7CisJZWxzZSB7CisJCXJldCA9IF9fbG9nZnNfd3JpdGVfaW5vZGUoaW5vZGUsIDApOworCQkvKiBzZWUgaW5kaXJlY3Rfd3JpdGVfYmxvY2sgY29tbWVudCAqLworCQlCVUdfT04ocmV0KTsKKwl9Cit9CisKK3N0YXRpYyBnY19sZXZlbF90IGlub2RlX2Jsb2NrX2xldmVsKHN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2spCit7CisJQlVHX09OKGJsb2NrLT5pbm9kZS0+aV9pbm8gPT0gTE9HRlNfSU5PX01BU1RFUik7CisJcmV0dXJuIEdDX0xFVkVMKExPR0ZTX01BWF9MRVZFTFMpOworfQorCitzdGF0aWMgZ2NfbGV2ZWxfdCBpbmRpcmVjdF9ibG9ja19sZXZlbChzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJdTY0IGJpeDsKKwlsZXZlbF90IGxldmVsOworCisJcGFnZSA9IGJsb2NrLT5wYWdlOworCWlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwlsb2dmc191bnBhY2tfaW5kZXgocGFnZS0+aW5kZXgsICZiaXgsICZsZXZlbCk7CisJcmV0dXJuIGV4cGFuZF9sZXZlbChpbm9kZS0+aV9pbm8sIGxldmVsKTsKK30KKworLyoKKyAqIFRoaXMgc2lsZW5jZXMgYSBmYWxzZSwgeWV0IGFubm95aW5nIGdjYyB3YXJuaW5nLiAgSSBoYXRlIGl0IHdoZW4gbXkgZWRpdG9yCisgKiBqdW1wcyBpbnRvIGJpdG9wcy5oIGVhY2ggdGltZSBJIHJlY29tcGlsZSB0aGlzIGZpbGUuCisgKiBUT0RPOiBDb21wbGFpbiB0byBnY2MgZm9sa3MgYWJvdXQgdGhpcyBhbmQgdXBncmFkZSBjb21waWxlci4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgZm5iKGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkZHIsCisJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpCit7CisJcmV0dXJuIGZpbmRfbmV4dF9iaXQoYWRkciwgc2l6ZSwgb2Zmc2V0KTsKK30KKworc3RhdGljIF9fYmU2NCBpbm9kZV92YWwwKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwl1NjQgdmFsOworCisJLyoKKwkgKiBFeHBsaWNpdCBzaGlmdGluZyBnZW5lcmF0ZXMgZ29vZCBjb2RlLCBidXQgbXVzdCBtYXRjaCB0aGUgZm9ybWF0CisJICogb2YgdGhlIHN0cnVjdHVyZS4gIEFkZCBzb21lIHBhcmFub2lhIGp1c3QgaW4gY2FzZS4KKwkgKi8KKwlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGxvZ2ZzX2Rpc2tfaW5vZGUsIGRpX21vZGUpICE9IDApOworCUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgbG9nZnNfZGlza19pbm9kZSwgZGlfaGVpZ2h0KSAhPSAyKTsKKwlCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGxvZ2ZzX2Rpc2tfaW5vZGUsIGRpX2ZsYWdzKSAhPSA0KTsKKworCXZhbCA9CSh1NjQpaW5vZGUtPmlfbW9kZSA8PCA0OCB8CisJCSh1NjQpbGktPmxpX2hlaWdodCA8PCA0MCB8CisJCSh1NjQpbGktPmxpX2ZsYWdzOworCXJldHVybiBjcHVfdG9fYmU2NCh2YWwpOworfQorCitzdGF0aWMgaW50IGlub2RlX3dyaXRlX2FsaWFzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCXN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2ssIHdyaXRlX2FsaWFzX3QgKndyaXRlX29uZV9hbGlhcykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gYmxvY2stPmlub2RlOworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisJdW5zaWduZWQgbG9uZyBwb3M7CisJdTY0IGlubyAsIGJpeDsKKwlfX2JlNjQgdmFsOworCWxldmVsX3QgbGV2ZWw7CisJaW50IGVycjsKKworCWZvciAocG9zID0gMDsgOyBwb3MrKykgeworCQlwb3MgPSBmbmIoYmxvY2stPmFsaWFzX21hcCwgTE9HRlNfQkxPQ0tfRkFDVE9SLCBwb3MpOworCQlpZiAocG9zID49IExPR0ZTX0VNQkVEREVEX0ZJRUxEUyArIElOT0RFX1BPSU5URVJfT0ZTKQorCQkJcmV0dXJuIDA7CisKKwkJc3dpdGNoIChwb3MpIHsKKwkJY2FzZSBJTk9ERV9IRUlHSFRfT0ZTOgorCQkJdmFsID0gaW5vZGVfdmFsMChpbm9kZSk7CisJCQlicmVhazsKKwkJY2FzZSBJTk9ERV9VU0VEX09GUzoKKwkJCXZhbCA9IGNwdV90b19iZTY0KGxpLT5saV91c2VkX2J5dGVzKTs7CisJCQlicmVhazsKKwkJY2FzZSBJTk9ERV9TSVpFX09GUzoKKwkJCXZhbCA9IGNwdV90b19iZTY0KGlfc2l6ZV9yZWFkKGlub2RlKSk7CisJCQlicmVhazsKKwkJY2FzZSBJTk9ERV9QT0lOVEVSX09GUyAuLi4gSU5PREVfUE9JTlRFUl9PRlMgKyBMT0dGU19FTUJFRERFRF9GSUVMRFMgLSAxOgorCQkJdmFsID0gY3B1X3RvX2JlNjQobGktPmxpX2RhdGFbcG9zIC0gSU5PREVfUE9JTlRFUl9PRlNdKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCX0KKworCQlpbm8gPSBMT0dGU19JTk9fTUFTVEVSOworCQliaXggPSBpbm9kZS0+aV9pbm87CisJCWxldmVsID0gTEVWRUwoMCk7CisJCWVyciA9IHdyaXRlX29uZV9hbGlhcyhzYiwgaW5vLCBiaXgsIGxldmVsLCBwb3MsIHZhbCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KK30KKworc3RhdGljIGludCBpbmRpcmVjdF93cml0ZV9hbGlhcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQlzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrLCB3cml0ZV9hbGlhc190ICp3cml0ZV9vbmVfYWxpYXMpCit7CisJdW5zaWduZWQgbG9uZyBwb3M7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBibG9jay0+cGFnZTsKKwl1NjQgaW5vICwgYml4OworCV9fYmU2NCAqY2hpbGQsIHZhbDsKKwlsZXZlbF90IGxldmVsOworCWludCBlcnI7CisKKwlmb3IgKHBvcyA9IDA7IDsgcG9zKyspIHsKKwkJcG9zID0gZm5iKGJsb2NrLT5hbGlhc19tYXAsIExPR0ZTX0JMT0NLX0ZBQ1RPUiwgcG9zKTsKKwkJaWYgKHBvcyA+PSBMT0dGU19CTE9DS19GQUNUT1IpCisJCQlyZXR1cm4gMDsKKworCQlpbm8gPSBwYWdlLT5tYXBwaW5nLT5ob3N0LT5pX2lubzsKKwkJbG9nZnNfdW5wYWNrX2luZGV4KHBhZ2UtPmluZGV4LCAmYml4LCAmbGV2ZWwpOworCQljaGlsZCA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwkJdmFsID0gY2hpbGRbcG9zXTsKKwkJa3VubWFwX2F0b21pYyhjaGlsZCwgS01fVVNFUjApOworCQllcnIgPSB3cml0ZV9vbmVfYWxpYXMoc2IsIGlubywgYml4LCBsZXZlbCwgcG9zLCB2YWwpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9Cit9CisKK2ludCBsb2dmc193cml0ZV9vYmpfYWxpYXNlc19wYWdlY2FjaGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2s7CisJaW50IGVycjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYmxvY2ssICZzdXBlci0+c19vYmplY3RfYWxpYXMsIGFsaWFzX2xpc3QpIHsKKwkJZXJyID0gYmxvY2stPm9wcy0+d3JpdGVfYWxpYXMoc2IsIGJsb2NrLCB3cml0ZV9hbGlhc19qb3VybmFsKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIF9fZnJlZV9ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrKQoreworCUJVR19PTighbGlzdF9lbXB0eSgmYmxvY2stPml0ZW1fbGlzdCkpOworCWxpc3RfZGVsKCZibG9jay0+YWxpYXNfbGlzdCk7CisJbWVtcG9vbF9mcmVlKGJsb2NrLCBsb2dmc19zdXBlcihzYiktPnNfYmxvY2tfcG9vbCk7Cit9CisKK3N0YXRpYyB2b2lkIGlub2RlX2ZyZWVfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jaykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gYmxvY2stPmlub2RlOworCisJbG9nZnNfaW5vZGUoaW5vZGUpLT5saV9ibG9jayA9IE5VTEw7CisJX19mcmVlX2Jsb2NrKHNiLCBibG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGluZGlyZWN0X2ZyZWVfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jaykKK3sKKwlDbGVhclBhZ2VQcml2YXRlKGJsb2NrLT5wYWdlKTsKKwlibG9jay0+cGFnZS0+cHJpdmF0ZSA9IDA7CisJX19mcmVlX2Jsb2NrKHNiLCBibG9jayk7Cit9CisKKworc3RhdGljIHN0cnVjdCBsb2dmc19ibG9ja19vcHMgaW5vZGVfYmxvY2tfb3BzID0geworCS53cml0ZV9ibG9jayA9IGlub2RlX3dyaXRlX2Jsb2NrLAorCS5ibG9ja19sZXZlbCA9IGlub2RlX2Jsb2NrX2xldmVsLAorCS5mcmVlX2Jsb2NrID0gaW5vZGVfZnJlZV9ibG9jaywKKwkud3JpdGVfYWxpYXMgPSBpbm9kZV93cml0ZV9hbGlhcywKK307CisKK3N0cnVjdCBsb2dmc19ibG9ja19vcHMgaW5kaXJlY3RfYmxvY2tfb3BzID0geworCS53cml0ZV9ibG9jayA9IGluZGlyZWN0X3dyaXRlX2Jsb2NrLAorCS5ibG9ja19sZXZlbCA9IGluZGlyZWN0X2Jsb2NrX2xldmVsLAorCS5mcmVlX2Jsb2NrID0gaW5kaXJlY3RfZnJlZV9ibG9jaywKKwkud3JpdGVfYWxpYXMgPSBpbmRpcmVjdF93cml0ZV9hbGlhcywKK307CisKK3N0cnVjdCBsb2dmc19ibG9jayAqX19hbGxvY19ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQl1NjQgaW5vLCB1NjQgYml4LCBsZXZlbF90IGxldmVsKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jazsKKworCWJsb2NrID0gbWVtcG9vbF9hbGxvYyhzdXBlci0+c19ibG9ja19wb29sLCBHRlBfTk9GUyk7CisJbWVtc2V0KGJsb2NrLCAwLCBzaXplb2YoKmJsb2NrKSk7CisJSU5JVF9MSVNUX0hFQUQoJmJsb2NrLT5hbGlhc19saXN0KTsKKwlJTklUX0xJU1RfSEVBRCgmYmxvY2stPml0ZW1fbGlzdCk7CisJYmxvY2stPnNiID0gc2I7CisJYmxvY2stPmlubyA9IGlubzsKKwlibG9jay0+Yml4ID0gYml4OworCWJsb2NrLT5sZXZlbCA9IGxldmVsOworCXJldHVybiBibG9jazsKK30KKworc3RhdGljIHZvaWQgYWxsb2NfaW5vZGVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCXN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2s7CisKKwlpZiAobGktPmxpX2Jsb2NrKQorCQlyZXR1cm47CisKKwlibG9jayA9IF9fYWxsb2NfYmxvY2soaW5vZGUtPmlfc2IsIExPR0ZTX0lOT19NQVNURVIsIGlub2RlLT5pX2lubywgMCk7CisJYmxvY2stPmlub2RlID0gaW5vZGU7CisJbGktPmxpX2Jsb2NrID0gYmxvY2s7CisJYmxvY2stPm9wcyA9ICZpbm9kZV9ibG9ja19vcHM7Cit9CisKK3ZvaWQgaW5pdGlhbGl6ZV9ibG9ja19jb3VudGVycyhzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jaywKKwkJX19iZTY0ICphcnJheSwgaW50IHBhZ2VfaXNfZW1wdHkpCit7CisJdTY0IHB0cjsKKwlpbnQgaSwgc3RhcnQ7CisKKwlibG9jay0+cGFydGlhbCA9IDA7CisJYmxvY2stPmZ1bGwgPSAwOworCXN0YXJ0ID0gMDsKKwlpZiAocGFnZS0+aW5kZXggPCBmaXJzdF9pbmRpcmVjdF9ibG9jaygpKSB7CisJCS8qIENvdW50ZXJzIGFyZSBwb2ludGxlc3Mgb24gbGV2ZWwgMCAqLworCQlyZXR1cm47CisJfQorCWlmIChwYWdlLT5pbmRleCA9PSBmaXJzdF9pbmRpcmVjdF9ibG9jaygpKSB7CisJCS8qIFNraXAgdW51c2VkIHBvaW50ZXJzICovCisJCXN0YXJ0ID0gSTBfQkxPQ0tTOworCQlibG9jay0+ZnVsbCA9IEkwX0JMT0NLUzsKKwl9CisJaWYgKCFwYWdlX2lzX2VtcHR5KSB7CisJCWZvciAoaSA9IHN0YXJ0OyBpIDwgTE9HRlNfQkxPQ0tfRkFDVE9SOyBpKyspIHsKKwkJCXB0ciA9IGJlNjRfdG9fY3B1KGFycmF5W2ldKTsKKwkJCWlmIChwdHIpCisJCQkJYmxvY2stPnBhcnRpYWwrKzsKKwkJCWlmIChwdHIgJiBMT0dGU19GVUxMWV9QT1BVTEFURUQpCisJCQkJYmxvY2stPmZ1bGwrKzsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgYWxsb2NfZGF0YV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrOworCXU2NCBiaXg7CisJbGV2ZWxfdCBsZXZlbDsKKworCWlmIChQYWdlUHJpdmF0ZShwYWdlKSkKKwkJcmV0dXJuOworCisJbG9nZnNfdW5wYWNrX2luZGV4KHBhZ2UtPmluZGV4LCAmYml4LCAmbGV2ZWwpOworCWJsb2NrID0gX19hbGxvY19ibG9jayhpbm9kZS0+aV9zYiwgaW5vZGUtPmlfaW5vLCBiaXgsIGxldmVsKTsKKwlibG9jay0+cGFnZSA9IHBhZ2U7CisJU2V0UGFnZVByaXZhdGUocGFnZSk7CisJcGFnZS0+cHJpdmF0ZSA9ICh1bnNpZ25lZCBsb25nKWJsb2NrOworCWJsb2NrLT5vcHMgPSAmaW5kaXJlY3RfYmxvY2tfb3BzOworfQorCitzdGF0aWMgdm9pZCBhbGxvY19pbmRpcmVjdF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJaW50IHBhZ2VfaXNfZW1wdHkpCit7CisJc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jazsKKwlfX2JlNjQgKmFycmF5OworCisJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpKQorCQlyZXR1cm47CisKKwlhbGxvY19kYXRhX2Jsb2NrKGlub2RlLCBwYWdlKTsKKworCWJsb2NrID0gbG9nZnNfYmxvY2socGFnZSk7CisJYXJyYXkgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJaW5pdGlhbGl6ZV9ibG9ja19jb3VudGVycyhwYWdlLCBibG9jaywgYXJyYXksIHBhZ2VfaXNfZW1wdHkpOworCWt1bm1hcF9hdG9taWMoYXJyYXksIEtNX1VTRVIwKTsKK30KKworc3RhdGljIHZvaWQgYmxvY2tfc2V0X3BvaW50ZXIoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBpbmRleCwgdTY0IHB0cikKK3sKKwlzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrID0gbG9nZnNfYmxvY2socGFnZSk7CisJX19iZTY0ICphcnJheTsKKwl1NjQgb2xkcHRyOworCisJQlVHX09OKCFibG9jayk7CisJYXJyYXkgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJb2xkcHRyID0gYmU2NF90b19jcHUoYXJyYXlbaW5kZXhdKTsKKwlhcnJheVtpbmRleF0gPSBjcHVfdG9fYmU2NChwdHIpOworCWt1bm1hcF9hdG9taWMoYXJyYXksIEtNX1VTRVIwKTsKKwlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisKKwlibG9jay0+ZnVsbCArPSAhIShwdHIgJiBMT0dGU19GVUxMWV9QT1BVTEFURUQpCisJCS0gISEob2xkcHRyICYgTE9HRlNfRlVMTFlfUE9QVUxBVEVEKTsKKwlibG9jay0+cGFydGlhbCArPSAhIXB0ciAtICEhb2xkcHRyOworfQorCitzdGF0aWMgdTY0IGJsb2NrX2dldF9wb2ludGVyKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgaW5kZXgpCit7CisJX19iZTY0ICpibG9jazsKKwl1NjQgcHRyOworCisJYmxvY2sgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJcHRyID0gYmU2NF90b19jcHUoYmxvY2tbaW5kZXhdKTsKKwlrdW5tYXBfYXRvbWljKGJsb2NrLCBLTV9VU0VSMCk7CisJcmV0dXJuIHB0cjsKK30KKworc3RhdGljIGludCBsb2dmc19yZWFkX2VtcHR5KHN0cnVjdCBwYWdlICpwYWdlKQoreworCXplcm9fdXNlcl9zZWdtZW50KHBhZ2UsIDAsIFBBR0VfQ0FDSEVfU0laRSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfcmVhZF9kaXJlY3Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwlwZ29mZl90IGluZGV4ID0gcGFnZS0+aW5kZXg7CisJdTY0IGJsb2NrOworCisJYmxvY2sgPSBsaS0+bGlfZGF0YVtpbmRleF07CisJaWYgKCFibG9jaykKKwkJcmV0dXJuIGxvZ2ZzX3JlYWRfZW1wdHkocGFnZSk7CisKKwlyZXR1cm4gbG9nZnNfc2VnbWVudF9yZWFkKGlub2RlLCBwYWdlLCBibG9jaywgaW5kZXgsIDApOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3JlYWRfbG9vcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJaW50IHJ3X2NvbnRleHQpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwl1NjQgYml4LCBib2ZzID0gbGktPmxpX2RhdGFbSU5ESVJFQ1RfSU5ERVhdOworCWxldmVsX3QgbGV2ZWwsIHRhcmdldF9sZXZlbDsKKwlpbnQgcmV0OworCXN0cnVjdCBwYWdlICppcGFnZTsKKworCWxvZ2ZzX3VucGFja19pbmRleChwYWdlLT5pbmRleCwgJmJpeCwgJnRhcmdldF9sZXZlbCk7CisJaWYgKCFib2ZzKQorCQlyZXR1cm4gbG9nZnNfcmVhZF9lbXB0eShwYWdlKTsKKworCWlmIChiaXggPj0gbWF4Yml4KGxpLT5saV9oZWlnaHQpKQorCQlyZXR1cm4gbG9nZnNfcmVhZF9lbXB0eShwYWdlKTsKKworCWZvciAobGV2ZWwgPSBMRVZFTChsaS0+bGlfaGVpZ2h0KTsKKwkJCShfX2ZvcmNlIHU4KWxldmVsID4gKF9fZm9yY2UgdTgpdGFyZ2V0X2xldmVsOworCQkJbGV2ZWwgPSBTVUJMRVZFTChsZXZlbCkpeworCQlpcGFnZSA9IGxvZ2ZzX2dldF9wYWdlKGlub2RlLCBiaXgsIGxldmVsLCByd19jb250ZXh0KTsKKwkJaWYgKCFpcGFnZSkKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXJldCA9IGxvZ2ZzX3NlZ21lbnRfcmVhZChpbm9kZSwgaXBhZ2UsIGJvZnMsIGJpeCwgbGV2ZWwpOworCQlpZiAocmV0KSB7CisJCQlsb2dmc19wdXRfcmVhZF9wYWdlKGlwYWdlKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKworCQlib2ZzID0gYmxvY2tfZ2V0X3BvaW50ZXIoaXBhZ2UsIGdldF9iaXRzKGJpeCwgU1VCTEVWRUwobGV2ZWwpKSk7CisJCWxvZ2ZzX3B1dF9wYWdlKGlwYWdlLCByd19jb250ZXh0KTsKKwkJaWYgKCFib2ZzKQorCQkJcmV0dXJuIGxvZ2ZzX3JlYWRfZW1wdHkocGFnZSk7CisJfQorCisJcmV0dXJuIGxvZ2ZzX3NlZ21lbnRfcmVhZChpbm9kZSwgcGFnZSwgYm9mcywgYml4LCAwKTsKK30KKworc3RhdGljIGludCBsb2dmc19yZWFkX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLAorCQlpbnQgcndfY29udGV4dCkKK3sKKwlwZ29mZl90IGluZGV4ID0gcGFnZS0+aW5kZXg7CisKKwlpZiAoaW5kZXggPCBJMF9CTE9DS1MpCisJCXJldHVybiBsb2dmc19yZWFkX2RpcmVjdChpbm9kZSwgcGFnZSk7CisJcmV0dXJuIGxvZ2ZzX3JlYWRfbG9vcChpbm9kZSwgcGFnZSwgcndfY29udGV4dCk7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfZXhpc3RfbG9vcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgYml4KQoreworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisJdTY0IGJvZnMgPSBsaS0+bGlfZGF0YVtJTkRJUkVDVF9JTkRFWF07CisJbGV2ZWxfdCBsZXZlbDsKKwlpbnQgcmV0OworCXN0cnVjdCBwYWdlICppcGFnZTsKKworCWlmICghYm9mcykKKwkJcmV0dXJuIDA7CisJaWYgKGJpeCA+PSBtYXhiaXgobGktPmxpX2hlaWdodCkpCisJCXJldHVybiAwOworCisJZm9yIChsZXZlbCA9IExFVkVMKGxpLT5saV9oZWlnaHQpOyBsZXZlbCAhPSAwOyBsZXZlbCA9IFNVQkxFVkVMKGxldmVsKSkgeworCQlpcGFnZSA9IGxvZ2ZzX2dldF9yZWFkX3BhZ2UoaW5vZGUsIGJpeCwgbGV2ZWwpOworCQlpZiAoIWlwYWdlKQorCQkJcmV0dXJuIC1FTk9NRU07CisKKwkJcmV0ID0gbG9nZnNfc2VnbWVudF9yZWFkKGlub2RlLCBpcGFnZSwgYm9mcywgYml4LCBsZXZlbCk7CisJCWlmIChyZXQpIHsKKwkJCWxvZ2ZzX3B1dF9yZWFkX3BhZ2UoaXBhZ2UpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWJvZnMgPSBibG9ja19nZXRfcG9pbnRlcihpcGFnZSwgZ2V0X2JpdHMoYml4LCBTVUJMRVZFTChsZXZlbCkpKTsKKwkJbG9nZnNfcHV0X3JlYWRfcGFnZShpcGFnZSk7CisJCWlmICghYm9mcykKKwkJCXJldHVybiAwOworCX0KKworCXJldHVybiAxOworfQorCitpbnQgbG9nZnNfZXhpc3RfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJpeCkKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCisJaWYgKGJpeCA8IEkwX0JMT0NLUykKKwkJcmV0dXJuICEhbGktPmxpX2RhdGFbYml4XTsKKwlyZXR1cm4gbG9nZnNfZXhpc3RfbG9vcChpbm9kZSwgYml4KTsKK30KKworc3RhdGljIHU2NCBzZWVrX2hvbGVkYXRhX2RpcmVjdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgYml4LCBpbnQgZGF0YSkKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCisJZm9yICg7IGJpeCA8IEkwX0JMT0NLUzsgYml4KyspCisJCWlmIChkYXRhIF4gKGxpLT5saV9kYXRhW2JpeF0gPT0gMCkpCisJCQlyZXR1cm4gYml4OworCXJldHVybiBJMF9CTE9DS1M7Cit9CisKK3N0YXRpYyB1NjQgc2Vla19ob2xlZGF0YV9sb29wKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBiaXgsIGludCBkYXRhKQoreworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisJX19iZTY0ICpyYmxvY2s7CisJdTY0IGluY3JlbWVudCwgYm9mcyA9IGxpLT5saV9kYXRhW0lORElSRUNUX0lOREVYXTsKKwlsZXZlbF90IGxldmVsOworCWludCByZXQsIHNsb3Q7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlCVUdfT04oIWJvZnMpOworCisJZm9yIChsZXZlbCA9IExFVkVMKGxpLT5saV9oZWlnaHQpOyBsZXZlbCAhPSAwOyBsZXZlbCA9IFNVQkxFVkVMKGxldmVsKSkgeworCQlpbmNyZW1lbnQgPSAxIDw8IChMT0dGU19CTE9DS19CSVRTICogKChfX2ZvcmNlIHU4KWxldmVsLTEpKTsKKwkJcGFnZSA9IGxvZ2ZzX2dldF9yZWFkX3BhZ2UoaW5vZGUsIGJpeCwgbGV2ZWwpOworCQlpZiAoIXBhZ2UpCisJCQlyZXR1cm4gYml4OworCisJCXJldCA9IGxvZ2ZzX3NlZ21lbnRfcmVhZChpbm9kZSwgcGFnZSwgYm9mcywgYml4LCBsZXZlbCk7CisJCWlmIChyZXQpIHsKKwkJCWxvZ2ZzX3B1dF9yZWFkX3BhZ2UocGFnZSk7CisJCQlyZXR1cm4gYml4OworCQl9CisKKwkJc2xvdCA9IGdldF9iaXRzKGJpeCwgU1VCTEVWRUwobGV2ZWwpKTsKKwkJcmJsb2NrID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCQl3aGlsZSAoc2xvdCA8IExPR0ZTX0JMT0NLX0ZBQ1RPUikgeworCQkJaWYgKGRhdGEgJiYgKHJibG9ja1tzbG90XSAhPSAwKSkKKwkJCQlicmVhazsKKwkJCWlmICghZGF0YSAmJiAhKGJlNjRfdG9fY3B1KHJibG9ja1tzbG90XSkgJiBMT0dGU19GVUxMWV9QT1BVTEFURUQpKQorCQkJCWJyZWFrOworCQkJc2xvdCsrOworCQkJYml4ICs9IGluY3JlbWVudDsKKwkJCWJpeCAmPSB+KGluY3JlbWVudCAtIDEpOworCQl9CisJCWlmIChzbG90ID49IExPR0ZTX0JMT0NLX0ZBQ1RPUikgeworCQkJa3VubWFwX2F0b21pYyhyYmxvY2ssIEtNX1VTRVIwKTsKKwkJCWxvZ2ZzX3B1dF9yZWFkX3BhZ2UocGFnZSk7CisJCQlyZXR1cm4gYml4OworCQl9CisJCWJvZnMgPSBiZTY0X3RvX2NwdShyYmxvY2tbc2xvdF0pOworCQlrdW5tYXBfYXRvbWljKHJibG9jaywgS01fVVNFUjApOworCQlsb2dmc19wdXRfcmVhZF9wYWdlKHBhZ2UpOworCQlpZiAoIWJvZnMpIHsKKwkJCUJVR19PTihkYXRhKTsKKwkJCXJldHVybiBiaXg7CisJCX0KKwl9CisJcmV0dXJuIGJpeDsKK30KKworLyoqCisgKiBsb2dmc19zZWVrX2hvbGUgLSBmaW5kIG5leHQgaG9sZSBzdGFydGluZyBhdCBhIGdpdmVuIGJsb2NrIGluZGV4CisgKiBAaW5vZGU6CQlpbm9kZSB0byBzZWFyY2ggaW4KKyAqIEBiaXg6CQlibG9jayBpbmRleCB0byBzdGFydCBzZWFyY2hpbmcKKyAqCisgKiBSZXR1cm5zIG5leHQgaG9sZS4gIElmIHRoZSBmaWxlIGRvZXNuJ3QgY29udGFpbiBhbnkgZnVydGhlciBob2xlcywgdGhlCisgKiBibG9jayBhZGRyZXNzIG5leHQgdG8gZW9mIGlzIHJldHVybmVkIGluc3RlYWQuCisgKi8KK3U2NCBsb2dmc19zZWVrX2hvbGUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJpeCkKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCisJaWYgKGJpeCA8IEkwX0JMT0NLUykgeworCQliaXggPSBzZWVrX2hvbGVkYXRhX2RpcmVjdChpbm9kZSwgYml4LCAwKTsKKwkJaWYgKGJpeCA8IEkwX0JMT0NLUykKKwkJCXJldHVybiBiaXg7CisJfQorCisJaWYgKCFsaS0+bGlfZGF0YVtJTkRJUkVDVF9JTkRFWF0pCisJCXJldHVybiBiaXg7CisJZWxzZSBpZiAobGktPmxpX2RhdGFbSU5ESVJFQ1RfSU5ERVhdICYgTE9HRlNfRlVMTFlfUE9QVUxBVEVEKQorCQliaXggPSBtYXhiaXgobGktPmxpX2hlaWdodCk7CisJZWxzZSB7CisJCWJpeCA9IHNlZWtfaG9sZWRhdGFfbG9vcChpbm9kZSwgYml4LCAwKTsKKwkJaWYgKGJpeCA8IG1heGJpeChsaS0+bGlfaGVpZ2h0KSkKKwkJCXJldHVybiBiaXg7CisJCS8qIFNob3VsZCBub3QgaGFwcGVuIGFueW1vcmUuICBCdXQgaWYgc29tZSBwb3J0IHdyaXRlcyBzZW1pLQorCQkgKiBjb3JydXB0IGltYWdlcyAoYXMgdGhpcyBvbmUgdXNlZCB0bykgd2UgbWlnaHQgcnVuIGludG8gaXQuCisJCSAqLworCQlXQVJOX09OX09OQ0UoYml4ID09IG1heGJpeChsaS0+bGlfaGVpZ2h0KSk7CisJfQorCisJcmV0dXJuIGJpeDsKK30KKworc3RhdGljIHU2NCBfX2xvZ2ZzX3NlZWtfZGF0YShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgYml4KQoreworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisKKwlpZiAoYml4IDwgSTBfQkxPQ0tTKSB7CisJCWJpeCA9IHNlZWtfaG9sZWRhdGFfZGlyZWN0KGlub2RlLCBiaXgsIDEpOworCQlpZiAoYml4IDwgSTBfQkxPQ0tTKQorCQkJcmV0dXJuIGJpeDsKKwl9CisKKwlpZiAoYml4IDwgbWF4Yml4KGxpLT5saV9oZWlnaHQpKSB7CisJCWlmICghbGktPmxpX2RhdGFbSU5ESVJFQ1RfSU5ERVhdKQorCQkJYml4ID0gbWF4Yml4KGxpLT5saV9oZWlnaHQpOworCQllbHNlCisJCQlyZXR1cm4gc2Vla19ob2xlZGF0YV9sb29wKGlub2RlLCBiaXgsIDEpOworCX0KKworCXJldHVybiBiaXg7Cit9CisKKy8qKgorICogbG9nZnNfc2Vla19kYXRhIC0gZmluZCBuZXh0IGRhdGEgYmxvY2sgYWZ0ZXIgYSBnaXZlbiBibG9jayBpbmRleAorICogQGlub2RlOgkJaW5vZGUgdG8gc2VhcmNoIGluCisgKiBAYml4OgkJYmxvY2sgaW5kZXggdG8gc3RhcnQgc2VhcmNoaW5nCisgKgorICogUmV0dXJucyBuZXh0IGRhdGEgYmxvY2suICBJZiB0aGUgZmlsZSBkb2Vzbid0IGNvbnRhaW4gYW55IGZ1cnRoZXIgZGF0YQorICogYmxvY2tzLCB0aGUgbGFzdCBibG9jayBpbiB0aGUgZmlsZSBpcyByZXR1cm5lZCBpbnN0ZWFkLgorICovCit1NjQgbG9nZnNfc2Vla19kYXRhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBiaXgpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXU2NCByZXQsIGVuZDsKKworCXJldCA9IF9fbG9nZnNfc2Vla19kYXRhKGlub2RlLCBiaXgpOworCWVuZCA9IGlfc2l6ZV9yZWFkKGlub2RlKSA+PiBzYi0+c19ibG9ja3NpemVfYml0czsKKwlpZiAocmV0ID49IGVuZCkKKwkJcmV0ID0gbWF4KGJpeCwgZW5kKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxvZ2ZzX2lzX3ZhbGlkX2RpcmVjdChzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpLCB1NjQgYml4LCB1NjQgb2ZzKQoreworCXJldHVybiBwdXJlX29mcyhsaS0+bGlfZGF0YVtiaXhdKSA9PSBvZnM7Cit9CisKK3N0YXRpYyBpbnQgX19sb2dmc19pc192YWxpZF9sb29wKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBiaXgsCisJCXU2NCBvZnMsIHU2NCBib2ZzKQoreworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisJbGV2ZWxfdCBsZXZlbDsKKwlpbnQgcmV0OworCXN0cnVjdCBwYWdlICpwYWdlOworCisJZm9yIChsZXZlbCA9IExFVkVMKGxpLT5saV9oZWlnaHQpOyBsZXZlbCAhPSAwOyBsZXZlbCA9IFNVQkxFVkVMKGxldmVsKSl7CisJCXBhZ2UgPSBsb2dmc19nZXRfd3JpdGVfcGFnZShpbm9kZSwgYml4LCBsZXZlbCk7CisJCUJVR19PTighcGFnZSk7CisKKwkJcmV0ID0gbG9nZnNfc2VnbWVudF9yZWFkKGlub2RlLCBwYWdlLCBib2ZzLCBiaXgsIGxldmVsKTsKKwkJaWYgKHJldCkgeworCQkJbG9nZnNfcHV0X3dyaXRlX3BhZ2UocGFnZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWJvZnMgPSBibG9ja19nZXRfcG9pbnRlcihwYWdlLCBnZXRfYml0cyhiaXgsIFNVQkxFVkVMKGxldmVsKSkpOworCQlsb2dmc19wdXRfd3JpdGVfcGFnZShwYWdlKTsKKwkJaWYgKCFib2ZzKQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKHB1cmVfb2ZzKGJvZnMpID09IG9mcykKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2dmc19pc192YWxpZF9sb29wKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBiaXgsIHU2NCBvZnMpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwl1NjQgYm9mcyA9IGxpLT5saV9kYXRhW0lORElSRUNUX0lOREVYXTsKKworCWlmICghYm9mcykKKwkJcmV0dXJuIDA7CisKKwlpZiAoYml4ID49IG1heGJpeChsaS0+bGlfaGVpZ2h0KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAocHVyZV9vZnMoYm9mcykgPT0gb2ZzKQorCQlyZXR1cm4gMTsKKworCXJldHVybiBfX2xvZ2ZzX2lzX3ZhbGlkX2xvb3AoaW5vZGUsIGJpeCwgb2ZzLCBib2ZzKTsKK30KKworc3RhdGljIGludCBfX2xvZ2ZzX2lzX3ZhbGlkX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBiaXgsIHU2NCBvZnMpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKworCWlmICgoaW5vZGUtPmlfbmxpbmsgPT0gMCkgJiYgYXRvbWljX3JlYWQoJmlub2RlLT5pX2NvdW50KSA9PSAxKQorCQlyZXR1cm4gMDsKKworCWlmIChiaXggPCBJMF9CTE9DS1MpCisJCXJldHVybiBsb2dmc19pc192YWxpZF9kaXJlY3QobGksIGJpeCwgb2ZzKTsKKwlyZXR1cm4gbG9nZnNfaXNfdmFsaWRfbG9vcChpbm9kZSwgYml4LCBvZnMpOworfQorCisvKioKKyAqIGxvZ2ZzX2lzX3ZhbGlkX2Jsb2NrIC0gY2hlY2sgd2hldGhlciB0aGlzIGJsb2NrIGlzIHN0aWxsIHZhbGlkCisgKgorICogQHNiCS0gc3VwZXJibG9jaworICogQG9mcwktIGJsb2NrIHBoeXNpY2FsIG9mZnNldAorICogQGlubwktIGJsb2NrIGlub2RlIG51bWJlcgorICogQGJpeAktIGJsb2NrIGluZGV4CisgKiBAbGV2ZWwgLSBibG9jayBsZXZlbAorICoKKyAqIFJldHVybnMgMCBpZiB0aGUgYmxvY2sgaXMgaW52YWxpZCwgMSBpZiBpdCBpcyB2YWxpZCBhbmQgMiBpZiBpdCB3aWxsCisgKiBiZWNvbWUgaW52YWxpZCBvbmNlIHRoZSBqb3VybmFsIGlzIHdyaXR0ZW4uCisgKi8KK2ludCBsb2dmc19pc192YWxpZF9ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgb2ZzLCB1NjQgaW5vLCB1NjQgYml4LAorCQlnY19sZXZlbF90IGdjX2xldmVsKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlpbnQgcmV0LCBjb29raWU7CisKKwkvKiBVbW91bnQgY2xvc2VzIGEgc2VnbWVudCB3aXRoIGZyZWUgYmxvY2tzIHJlbWFpbmluZy4gIFRob3NlCisJICogYmxvY2tzIGFyZSBieSBkZWZpbml0aW9uIGludmFsaWQuICovCisJaWYgKGlubyA9PSAtMSkKKwkJcmV0dXJuIDA7CisKKwlMT0dGU19CVUdfT04oKHU2NCkodV9sb25nKWlubyAhPSBpbm8sIHNiKTsKKworCWlub2RlID0gbG9nZnNfc2FmZV9pZ2V0KHNiLCBpbm8sICZjb29raWUpOworCWlmIChJU19FUlIoaW5vZGUpKQorCQlnb3RvIGludmFsaWQ7CisKKwlyZXQgPSBfX2xvZ2ZzX2lzX3ZhbGlkX2Jsb2NrKGlub2RlLCBiaXgsIG9mcyk7CisJbG9nZnNfc2FmZV9pcHV0KGlub2RlLCBjb29raWUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKK2ludmFsaWQ6CisJLyogQmxvY2sgaXMgbm9taW5hbGx5IGludmFsaWQsIGJ1dCBtYXkgc3RpbGwgc2l0IGluIHRoZSBzaGFkb3cgdHJlZSwKKwkgKiB3YWl0aW5nIGZvciBhIGpvdXJuYWwgY29tbWl0LgorCSAqLworCWlmIChidHJlZV9sb29rdXA2NCgmc3VwZXItPnNfc2hhZG93X3RyZWUub2xkLCBvZnMpKQorCQlyZXR1cm4gMjsKKwlyZXR1cm4gMDsKK30KKworaW50IGxvZ2ZzX3JlYWRwYWdlX25vbG9jayhzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwlpbnQgcmV0ID0gLUVJTzsKKworCXJldCA9IGxvZ2ZzX3JlYWRfYmxvY2soaW5vZGUsIHBhZ2UsIFJFQUQpOworCisJaWYgKHJldCkgeworCQlDbGVhclBhZ2VVcHRvZGF0ZShwYWdlKTsKKwkJU2V0UGFnZUVycm9yKHBhZ2UpOworCX0gZWxzZSB7CisJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKKwkJQ2xlYXJQYWdlRXJyb3IocGFnZSk7CisJfQorCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsb2dmc19yZXNlcnZlX2J5dGVzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBieXRlcykKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoaW5vZGUtPmlfc2IpOworCXU2NCBhdmFpbGFibGUgPSBzdXBlci0+c19mcmVlX2J5dGVzICsgc3VwZXItPnNfZGlydHlfZnJlZV9ieXRlcworCQkJLSBzdXBlci0+c19kaXJ0eV91c2VkX2J5dGVzIC0gc3VwZXItPnNfZGlydHlfcGFnZXM7CisKKwlpZiAoIWJ5dGVzKQorCQlyZXR1cm4gMDsKKworCWlmIChhdmFpbGFibGUgPCBieXRlcykKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlpZiAoYXZhaWxhYmxlIDwgYnl0ZXMgKyBzdXBlci0+c19yb290X3Jlc2VydmUgJiYKKwkJCSFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCXJldHVybiAwOworfQorCitpbnQgZ2V0X3BhZ2VfcmVzZXJ2ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoaW5vZGUtPmlfc2IpOworCWludCByZXQ7CisKKwlpZiAobG9nZnNfYmxvY2socGFnZSkgJiYgbG9nZnNfYmxvY2socGFnZSktPnJlc2VydmVkX2J5dGVzKQorCQlyZXR1cm4gMDsKKworCWxvZ2ZzX2dldF93YmxvY2tzKGlub2RlLT5pX3NiLCBwYWdlLCBXRl9MT0NLKTsKKwlyZXQgPSBsb2dmc19yZXNlcnZlX2J5dGVzKGlub2RlLCA2ICogTE9HRlNfTUFYX09CSkVDVFNJWkUpOworCWlmICghcmV0KSB7CisJCWFsbG9jX2RhdGFfYmxvY2soaW5vZGUsIHBhZ2UpOworCQlsb2dmc19ibG9jayhwYWdlKS0+cmVzZXJ2ZWRfYnl0ZXMgKz0gNiAqIExPR0ZTX01BWF9PQkpFQ1RTSVpFOworCQlzdXBlci0+c19kaXJ0eV9wYWdlcyArPSA2ICogTE9HRlNfTUFYX09CSkVDVFNJWkU7CisJfQorCWxvZ2ZzX3B1dF93YmxvY2tzKGlub2RlLT5pX3NiLCBwYWdlLCBXRl9MT0NLKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogV2UgYXJlIHByb3RlY3RlZCBieSB3cml0ZSBsb2NrLiAgUHVzaCB2aWN0aW1zIHVwIHRvIHN1cGVyYmxvY2sgbGV2ZWwKKyAqIGFuZCByZWxlYXNlIHRyYW5zYWN0aW9uIHdoZW4gYXBwcm9wcmlhdGUuCisgKi8KKy8qIEZJWE1FOiBUaGlzIGlzIGN1cnJlbnRseSBjYWxsZWQgZnJvbSB0aGUgd3Jvbmcgc3BvdHMuICovCitzdGF0aWMgdm9pZCBsb2dmc19oYW5kbGVfdHJhbnNhY3Rpb24oc3RydWN0IGlub2RlICppbm9kZSwKKwkJc3RydWN0IGxvZ2ZzX3RyYW5zYWN0aW9uICp0YSkKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoaW5vZGUtPmlfc2IpOworCisJaWYgKCF0YSkKKwkJcmV0dXJuOworCWxvZ2ZzX2lub2RlKGlub2RlKS0+bGlfYmxvY2stPnRhID0gTlVMTDsKKworCWlmIChpbm9kZS0+aV9pbm8gIT0gTE9HRlNfSU5PX01BU1RFUikgeworCQlCVUcoKTsgLyogRklYTUU6IFllcywgdGhpcyBuZWVkcyBtb3JlIHRob3VnaHQgKi8KKwkJLyoganVzdCByZW1lbWJlciB0aGUgdHJhbnNhY3Rpb24gdW50aWwgaW5vZGUgaXMgd3JpdHRlbiAqLworCQkvL0JVR19PTihsb2dmc19pbm9kZShpbm9kZSktPmxpX3RyYW5zYWN0aW9uKTsKKwkJLy9sb2dmc19pbm9kZShpbm9kZSktPmxpX3RyYW5zYWN0aW9uID0gdGE7CisJCXJldHVybjsKKwl9CisKKwlzd2l0Y2ggKHRhLT5zdGF0ZSkgeworCWNhc2UgQ1JFQVRFXzE6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgVU5MSU5LXzE6CisJCUJVR19PTihzdXBlci0+c192aWN0aW1faW5vKTsKKwkJc3VwZXItPnNfdmljdGltX2lubyA9IHRhLT5pbm87CisJCWJyZWFrOworCWNhc2UgQ1JFQVRFXzI6IC8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgVU5MSU5LXzI6CisJCUJVR19PTihzdXBlci0+c192aWN0aW1faW5vICE9IHRhLT5pbm8pOworCQlzdXBlci0+c192aWN0aW1faW5vID0gMDsKKwkJLyogdHJhbnNhY3Rpb24gZW5kcyBoZXJlIC0gZnJlZSBpdCAqLworCQlrZnJlZSh0YSk7CisJCWJyZWFrOworCWNhc2UgQ1JPU1NfUkVOQU1FXzE6CisJCUJVR19PTihzdXBlci0+c19yZW5hbWVfZGlyKTsKKwkJQlVHX09OKHN1cGVyLT5zX3JlbmFtZV9wb3MpOworCQlzdXBlci0+c19yZW5hbWVfZGlyID0gdGEtPmRpcjsKKwkJc3VwZXItPnNfcmVuYW1lX3BvcyA9IHRhLT5wb3M7CisJCWJyZWFrOworCWNhc2UgQ1JPU1NfUkVOQU1FXzI6CisJCUJVR19PTihzdXBlci0+c19yZW5hbWVfZGlyICE9IHRhLT5kaXIpOworCQlCVUdfT04oc3VwZXItPnNfcmVuYW1lX3BvcyAhPSB0YS0+cG9zKTsKKwkJc3VwZXItPnNfcmVuYW1lX2RpciA9IDA7CisJCXN1cGVyLT5zX3JlbmFtZV9wb3MgPSAwOworCQlrZnJlZSh0YSk7CisJCWJyZWFrOworCWNhc2UgVEFSR0VUX1JFTkFNRV8xOgorCQlCVUdfT04oc3VwZXItPnNfcmVuYW1lX2Rpcik7CisJCUJVR19PTihzdXBlci0+c19yZW5hbWVfcG9zKTsKKwkJQlVHX09OKHN1cGVyLT5zX3ZpY3RpbV9pbm8pOworCQlzdXBlci0+c19yZW5hbWVfZGlyID0gdGEtPmRpcjsKKwkJc3VwZXItPnNfcmVuYW1lX3BvcyA9IHRhLT5wb3M7CisJCXN1cGVyLT5zX3ZpY3RpbV9pbm8gPSB0YS0+aW5vOworCQlicmVhazsKKwljYXNlIFRBUkdFVF9SRU5BTUVfMjoKKwkJQlVHX09OKHN1cGVyLT5zX3JlbmFtZV9kaXIgIT0gdGEtPmRpcik7CisJCUJVR19PTihzdXBlci0+c19yZW5hbWVfcG9zICE9IHRhLT5wb3MpOworCQlCVUdfT04oc3VwZXItPnNfdmljdGltX2lubyAhPSB0YS0+aW5vKTsKKwkJc3VwZXItPnNfcmVuYW1lX2RpciA9IDA7CisJCXN1cGVyLT5zX3JlbmFtZV9wb3MgPSAwOworCQlicmVhazsKKwljYXNlIFRBUkdFVF9SRU5BTUVfMzoKKwkJQlVHX09OKHN1cGVyLT5zX3JlbmFtZV9kaXIpOworCQlCVUdfT04oc3VwZXItPnNfcmVuYW1lX3Bvcyk7CisJCUJVR19PTihzdXBlci0+c192aWN0aW1faW5vICE9IHRhLT5pbm8pOworCQlzdXBlci0+c192aWN0aW1faW5vID0gMDsKKwkJa2ZyZWUodGEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKKy8qCisgKiBOb3Qgc3RyaWN0bHkgYSByZXNlcnZhdGlvbiwgYnV0IHJhdGhlciBhIGNoZWNrIHRoYXQgd2Ugc3RpbGwgaGF2ZSBlbm91Z2gKKyAqIHNwYWNlIHRvIHNhdGlzZnkgdGhlIHdyaXRlLgorICovCitzdGF0aWMgaW50IGxvZ2ZzX3Jlc2VydmVfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBibG9ja3MpCit7CisJcmV0dXJuIGxvZ2ZzX3Jlc2VydmVfYnl0ZXMoaW5vZGUsIGJsb2NrcyAqIExPR0ZTX01BWF9PQkpFQ1RTSVpFKTsKK30KKworc3RydWN0IHdyaXRlX2NvbnRyb2wgeworCXU2NCBvZnM7CisJbG9uZyBmbGFnczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbG9nZnNfc2hhZG93ICphbGxvY19zaGFkb3coc3RydWN0IGlub2RlICppbm9kZSwgdTY0IGJpeCwKKwkJbGV2ZWxfdCBsZXZlbCwgdTY0IG9sZF9vZnMpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKGlub2RlLT5pX3NiKTsKKwlzdHJ1Y3QgbG9nZnNfc2hhZG93ICpzaGFkb3c7CisKKwlzaGFkb3cgPSBtZW1wb29sX2FsbG9jKHN1cGVyLT5zX3NoYWRvd19wb29sLCBHRlBfTk9GUyk7CisJbWVtc2V0KHNoYWRvdywgMCwgc2l6ZW9mKCpzaGFkb3cpKTsKKwlzaGFkb3ctPmlubyA9IGlub2RlLT5pX2lubzsKKwlzaGFkb3ctPmJpeCA9IGJpeDsKKwlzaGFkb3ctPmdjX2xldmVsID0gZXhwYW5kX2xldmVsKGlub2RlLT5pX2lubywgbGV2ZWwpOworCXNoYWRvdy0+b2xkX29mcyA9IG9sZF9vZnMgJiB+TE9HRlNfRlVMTFlfUE9QVUxBVEVEOworCXJldHVybiBzaGFkb3c7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfc2hhZG93KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBsb2dmc19zaGFkb3cgKnNoYWRvdykKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoaW5vZGUtPmlfc2IpOworCisJbWVtcG9vbF9mcmVlKHNoYWRvdywgc3VwZXItPnNfc2hhZG93X3Bvb2wpOworfQorCisvKioKKyAqIGZpbGxfc2hhZG93X3RyZWUgLSBQcm9wYWdhdGUgc2hhZG93IHRyZWUgY2hhbmdlcyBkdWUgdG8gYSB3cml0ZQorICogQGlub2RlOglJbm9kZSBvd25pbmcgdGhlIHBhZ2UKKyAqIEBwYWdlOglTdHJ1Y3QgcGFnZSB0aGF0IHdhcyB3cml0dGVuCisgKiBAc2hhZG93OglTaGFkb3cgZm9yIHRoZSBjdXJyZW50IHdyaXRlCisgKgorICogV3JpdGVzIGluIGxvZ2ZzIGNhbiByZXN1bHQgaW4gdHdvIHNlbWktdmFsaWQgb2JqZWN0cy4gIFRoZSBvbGQgb2JqZWN0CisgKiBpcyBzdGlsbCB2YWxpZCBhcyBsb25nIGFzIGl0IGNhbiBiZSByZWFjaGVkIGJ5IGZvbGxvd2luZyBwb2ludGVycyBvbgorICogdGhlIG1lZGl1bS4gIE9ubHkgd2hlbiB3cml0ZXMgcHJvcGFnYXRlIGFsbCB0aGUgd2F5IHVwIHRvIHRoZSBqb3VybmFsCisgKiBoYXMgdGhlIG5ldyBvYmplY3Qgc2FmZWx5IHJlcGxhY2VkIHRoZSBvbGQgb25lLgorICoKKyAqIFRvIGhhbmRsZSB0aGlzIHByb2JsZW0sIGEgc3RydWN0IGxvZ2ZzX3NoYWRvdyBpcyB1c2VkIHRvIHJlcHJlc2VudAorICogZXZlcnkgc2luZ2xlIHdyaXRlLiAgSXQgaXMgYXR0YWNoZWQgdG8gdGhlIGluZGlyZWN0IGJsb2NrLCB3aGljaCBpcworICogbWFya2VkIGRpcnR5LiAgV2hlbiB0aGUgaW5kaXJlY3QgYmxvY2sgaXMgd3JpdHRlbiwgaXRzIHNoYWRvd3MgYXJlCisgKiBoYW5kZWQgdXAgdG8gdGhlIG5leHQgaW5kaXJlY3QgYmxvY2sgKG9yIGlub2RlKS4gIFVudGltYXRlbHkgdGhleQorICogd2lsbCByZWFjaCB0aGUgbWFzdGVyIGlub2RlIGFuZCBiZSBmcmVlZCB1cG9uIGpvdXJuYWwgY29tbWl0LgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyBhIHNpbmdsZSBzdGVwIGluIHRoZSBwcm9wYWdhdGlvbi4gIEl0IGFkZHMgdGhlCisgKiBzaGFkb3cgZm9yIHRoZSBjdXJyZW50IHdyaXRlIHRvIHRoZSB0cmVlLCBhbG9uZyB3aXRoIGFueSBzaGFkb3dzIGluCisgKiB0aGUgcGFnZSdzIHRyZWUsIGluIGNhc2UgaXQgd2FzIGFuIGluZGlyZWN0IGJsb2NrLiAgSWYgYSBwYWdlIGlzCisgKiB3cml0dGVuLCB0aGUgaW5vZGUgcGFyYW1ldGVyIGlzIGxlZnQgTlVMTCwgaWYgYW4gaW5vZGUgaXMgd3JpdHRlbiwKKyAqIHRoZSBwYWdlIHBhcmFtZXRlciBpcyBsZWZ0IE5VTEwuCisgKi8KK3N0YXRpYyB2b2lkIGZpbGxfc2hhZG93X3RyZWUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCXN0cnVjdCBsb2dmc19zaGFkb3cgKnNoYWRvdykKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2sgPSBsb2dmc19ibG9jayhwYWdlKTsKKwlzdHJ1Y3Qgc2hhZG93X3RyZWUgKnRyZWUgPSAmc3VwZXItPnNfc2hhZG93X3RyZWU7CisKKwlpZiAoUGFnZVByaXZhdGUocGFnZSkpIHsKKwkJaWYgKGJsb2NrLT5hbGlhc19tYXApCisJCQlzdXBlci0+c19ub19vYmplY3RfYWxpYXNlcyAtPSBiaXRtYXBfd2VpZ2h0KAorCQkJCQlibG9jay0+YWxpYXNfbWFwLCBMT0dGU19CTE9DS19GQUNUT1IpOworCQlsb2dmc19oYW5kbGVfdHJhbnNhY3Rpb24oaW5vZGUsIGJsb2NrLT50YSk7CisJCWJsb2NrLT5vcHMtPmZyZWVfYmxvY2soaW5vZGUtPmlfc2IsIGJsb2NrKTsKKwl9CisJaWYgKHNoYWRvdykgeworCQlpZiAoc2hhZG93LT5vbGRfb2ZzKQorCQkJYnRyZWVfaW5zZXJ0NjQoJnRyZWUtPm9sZCwgc2hhZG93LT5vbGRfb2ZzLCBzaGFkb3csCisJCQkJCUdGUF9OT0ZTKTsKKwkJZWxzZQorCQkJYnRyZWVfaW5zZXJ0NjQoJnRyZWUtPm5ldywgc2hhZG93LT5uZXdfb2ZzLCBzaGFkb3csCisJCQkJCUdGUF9OT0ZTKTsKKworCQlzdXBlci0+c19kaXJ0eV91c2VkX2J5dGVzICs9IHNoYWRvdy0+bmV3X2xlbjsKKwkJc3VwZXItPnNfZGlydHlfZnJlZV9ieXRlcyArPSBzaGFkb3ctPm9sZF9sZW47CisJfQorfQorCitzdGF0aWMgdm9pZCBsb2dmc19zZXRfYWxpYXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jaywKKwkJbG9uZyBjaGlsZF9ubykKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCisJaWYgKGJsb2NrLT5pbm9kZSAmJiBibG9jay0+aW5vZGUtPmlfaW5vID09IExPR0ZTX0lOT19NQVNURVIpIHsKKwkJLyogQWxpYXNlcyBpbiB0aGUgbWFzdGVyIGlub2RlIGFyZSBwb2ludGxlc3MuICovCisJCXJldHVybjsKKwl9CisKKwlpZiAoIXRlc3RfYml0KGNoaWxkX25vLCBibG9jay0+YWxpYXNfbWFwKSkgeworCQlzZXRfYml0KGNoaWxkX25vLCBibG9jay0+YWxpYXNfbWFwKTsKKwkJc3VwZXItPnNfbm9fb2JqZWN0X2FsaWFzZXMrKzsKKwl9CisJbGlzdF9tb3ZlX3RhaWwoJmJsb2NrLT5hbGlhc19saXN0LCAmc3VwZXItPnNfb2JqZWN0X2FsaWFzKTsKK30KKworLyoKKyAqIE9iamVjdCBhbGlhc2VzIGNhbiBhbmQgb2Z0ZW4gZG8gY2hhbmdlIHRoZSBzaXplIGFuZCBvY2N1cGllZCBzcGFjZSBvZiBhCisgKiBmaWxlLiAgU28gbm90IG9ubHkgZG8gd2UgaGF2ZSB0byBjaGFuZ2UgdGhlIHBvaW50ZXJzLCB3ZSBhbHNvIGhhdmUgdG8KKyAqIGNoYW5nZSBpbm9kZS0+aV9zaXplIGFuZCBsaS0+bGlfdXNlZF9ieXRlcy4gIFdoaWNoIGlzIGRvbmUgYnkgc2V0dGluZworICogYW5vdGhlciB0d28gb2JqZWN0IGFsaWFzZXMgZm9yIHRoZSBpbm9kZSBpdHNlbGYuCisgKi8KK3N0YXRpYyB2b2lkIHNldF9pdXNlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbG9nZnNfc2hhZG93ICpzaGFkb3cpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKworCWlmIChzaGFkb3ctPm5ld19sZW4gPT0gc2hhZG93LT5vbGRfbGVuKQorCQlyZXR1cm47CisKKwlhbGxvY19pbm9kZV9ibG9jayhpbm9kZSk7CisJbGktPmxpX3VzZWRfYnl0ZXMgKz0gc2hhZG93LT5uZXdfbGVuIC0gc2hhZG93LT5vbGRfbGVuOworCV9fbG9nZnNfc2V0X2Jsb2Nrcyhpbm9kZSk7CisJbG9nZnNfc2V0X2FsaWFzKGlub2RlLT5pX3NiLCBsaS0+bGlfYmxvY2ssIElOT0RFX1VTRURfT0ZTKTsKKwlsb2dmc19zZXRfYWxpYXMoaW5vZGUtPmlfc2IsIGxpLT5saV9ibG9jaywgSU5PREVfU0laRV9PRlMpOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3dyaXRlX2kwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLAorCQlzdHJ1Y3Qgd3JpdGVfY29udHJvbCAqd2MpCit7CisJc3RydWN0IGxvZ2ZzX3NoYWRvdyAqc2hhZG93OworCXU2NCBiaXg7CisJbGV2ZWxfdCBsZXZlbDsKKwlpbnQgZnVsbCwgZXJyID0gMDsKKworCWxvZ2ZzX3VucGFja19pbmRleChwYWdlLT5pbmRleCwgJmJpeCwgJmxldmVsKTsKKwlpZiAod2MtPm9mcyA9PSAwKQorCQlpZiAobG9nZnNfcmVzZXJ2ZV9ibG9ja3MoaW5vZGUsIDEpKQorCQkJcmV0dXJuIC1FTk9TUEM7CisKKwlzaGFkb3cgPSBhbGxvY19zaGFkb3coaW5vZGUsIGJpeCwgbGV2ZWwsIHdjLT5vZnMpOworCWlmICh3Yy0+ZmxhZ3MgJiBXRl9XUklURSkKKwkJZXJyID0gbG9nZnNfc2VnbWVudF93cml0ZShpbm9kZSwgcGFnZSwgc2hhZG93KTsKKwlpZiAod2MtPmZsYWdzICYgV0ZfREVMRVRFKQorCQlsb2dmc19zZWdtZW50X2RlbGV0ZShpbm9kZSwgc2hhZG93KTsKKwlpZiAoZXJyKSB7CisJCWZyZWVfc2hhZG93KGlub2RlLCBzaGFkb3cpOworCQlyZXR1cm4gZXJyOworCX0KKworCXNldF9pdXNlZChpbm9kZSwgc2hhZG93KTsKKwlmdWxsID0gMTsKKwlpZiAobGV2ZWwgIT0gMCkgeworCQlhbGxvY19pbmRpcmVjdF9ibG9jayhpbm9kZSwgcGFnZSwgMCk7CisJCWZ1bGwgPSBsb2dmc19ibG9jayhwYWdlKS0+ZnVsbCA9PSBMT0dGU19CTE9DS19GQUNUT1I7CisJfQorCWZpbGxfc2hhZG93X3RyZWUoaW5vZGUsIHBhZ2UsIHNoYWRvdyk7CisJd2MtPm9mcyA9IHNoYWRvdy0+bmV3X29mczsKKwlpZiAod2MtPm9mcyAmJiBmdWxsKQorCQl3Yy0+b2ZzIHw9IExPR0ZTX0ZVTExZX1BPUFVMQVRFRDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2dmc193cml0ZV9kaXJlY3Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCWxvbmcgZmxhZ3MpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwlzdHJ1Y3Qgd3JpdGVfY29udHJvbCB3YyA9IHsKKwkJLm9mcyA9IGxpLT5saV9kYXRhW3BhZ2UtPmluZGV4XSwKKwkJLmZsYWdzID0gZmxhZ3MsCisJfTsKKwlpbnQgZXJyOworCisJYWxsb2NfaW5vZGVfYmxvY2soaW5vZGUpOworCisJZXJyID0gbG9nZnNfd3JpdGVfaTAoaW5vZGUsIHBhZ2UsICZ3Yyk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKworCWxpLT5saV9kYXRhW3BhZ2UtPmluZGV4XSA9IHdjLm9mczsKKwlsb2dmc19zZXRfYWxpYXMoaW5vZGUtPmlfc2IsIGxpLT5saV9ibG9jaywKKwkJCXBhZ2UtPmluZGV4ICsgSU5PREVfUE9JTlRFUl9PRlMpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHB0cl9jaGFuZ2UodTY0IG9mcywgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jayA9IGxvZ2ZzX2Jsb2NrKHBhZ2UpOworCWludCBlbXB0eTAsIGVtcHR5MSwgZnVsbDAsIGZ1bGwxOworCisJZW1wdHkwID0gb2ZzID09IDA7CisJZW1wdHkxID0gYmxvY2stPnBhcnRpYWwgPT0gMDsKKwlpZiAoZW1wdHkwICE9IGVtcHR5MSkKKwkJcmV0dXJuIDE7CisKKwkvKiBUaGUgISEgaXMgbmVjZXNzYXJ5IHRvIHNocmluayByZXN1bHQgdG8gaW50ICovCisJZnVsbDAgPSAhIShvZnMgJiBMT0dGU19GVUxMWV9QT1BVTEFURUQpOworCWZ1bGwxID0gYmxvY2stPmZ1bGwgPT0gTE9HRlNfQkxPQ0tfRkFDVE9SOworCWlmIChmdWxsMCAhPSBmdWxsMSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgX19sb2dmc193cml0ZV9yZWMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCXN0cnVjdCB3cml0ZV9jb250cm9sICp0aGlzX3djLAorCQlwZ29mZl90IGJpeCwgbGV2ZWxfdCB0YXJnZXRfbGV2ZWwsIGxldmVsX3QgbGV2ZWwpCit7CisJaW50IHJldCwgcGFnZV9lbXB0eSA9IDA7CisJaW50IGNoaWxkX25vID0gZ2V0X2JpdHMoYml4LCBTVUJMRVZFTChsZXZlbCkpOworCXN0cnVjdCBwYWdlICppcGFnZTsKKwlzdHJ1Y3Qgd3JpdGVfY29udHJvbCBjaGlsZF93YyA9IHsKKwkJLmZsYWdzID0gdGhpc193Yy0+ZmxhZ3MsCisJfTsKKworCWlwYWdlID0gbG9nZnNfZ2V0X3dyaXRlX3BhZ2UoaW5vZGUsIGJpeCwgbGV2ZWwpOworCWlmICghaXBhZ2UpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKHRoaXNfd2MtPm9mcykgeworCQlyZXQgPSBsb2dmc19zZWdtZW50X3JlYWQoaW5vZGUsIGlwYWdlLCB0aGlzX3djLT5vZnMsIGJpeCwgbGV2ZWwpOworCQlpZiAocmV0KQorCQkJZ290byBvdXQ7CisJfSBlbHNlIGlmICghUGFnZVVwdG9kYXRlKGlwYWdlKSkgeworCQlwYWdlX2VtcHR5ID0gMTsKKwkJbG9nZnNfcmVhZF9lbXB0eShpcGFnZSk7CisJfQorCisJY2hpbGRfd2Mub2ZzID0gYmxvY2tfZ2V0X3BvaW50ZXIoaXBhZ2UsIGNoaWxkX25vKTsKKworCWlmICgoX19mb3JjZSB1OClsZXZlbC0xID4gKF9fZm9yY2UgdTgpdGFyZ2V0X2xldmVsKQorCQlyZXQgPSBfX2xvZ2ZzX3dyaXRlX3JlYyhpbm9kZSwgcGFnZSwgJmNoaWxkX3djLCBiaXgsCisJCQkJdGFyZ2V0X2xldmVsLCBTVUJMRVZFTChsZXZlbCkpOworCWVsc2UKKwkJcmV0ID0gbG9nZnNfd3JpdGVfaTAoaW5vZGUsIHBhZ2UsICZjaGlsZF93Yyk7CisKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKworCWFsbG9jX2luZGlyZWN0X2Jsb2NrKGlub2RlLCBpcGFnZSwgcGFnZV9lbXB0eSk7CisJYmxvY2tfc2V0X3BvaW50ZXIoaXBhZ2UsIGNoaWxkX25vLCBjaGlsZF93Yy5vZnMpOworCS8qIEZJWE1FOiBmaXJzdCBjb25kaXRpb24gc2VlbXMgc3VwZXJmbHVvdXMgKi8KKwlpZiAoY2hpbGRfd2Mub2ZzIHx8IGxvZ2ZzX2Jsb2NrKGlwYWdlKS0+cGFydGlhbCkKKwkJdGhpc193Yy0+ZmxhZ3MgfD0gV0ZfV1JJVEU7CisJLyogdGhlIGNvbmRpdGlvbiBvbiB0aGlzX3djLT5vZnMgZW5zdXJlcyB0aGF0IHdlIHdvbid0IGNvbnN1bWUgZXh0cmEKKwkgKiBzcGFjZSBmb3IgaW5kaXJlY3QgYmxvY2tzIGluIHRoZSBmdXR1cmUsIHdoaWNoIHdlIGNhbm5vdCByZXNlcnZlICovCisJaWYgKCF0aGlzX3djLT5vZnMgfHwgcHRyX2NoYW5nZSh0aGlzX3djLT5vZnMsIGlwYWdlKSkKKwkJcmV0ID0gbG9nZnNfd3JpdGVfaTAoaW5vZGUsIGlwYWdlLCB0aGlzX3djKTsKKwllbHNlCisJCWxvZ2ZzX3NldF9hbGlhcyhpbm9kZS0+aV9zYiwgbG9nZnNfYmxvY2soaXBhZ2UpLCBjaGlsZF9ubyk7CitvdXQ6CisJbG9nZnNfcHV0X3dyaXRlX3BhZ2UoaXBhZ2UpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfd3JpdGVfcmVjKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLAorCQlwZ29mZl90IGJpeCwgbGV2ZWxfdCB0YXJnZXRfbGV2ZWwsIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwlzdHJ1Y3Qgd3JpdGVfY29udHJvbCB3YyA9IHsKKwkJLm9mcyA9IGxpLT5saV9kYXRhW0lORElSRUNUX0lOREVYXSwKKwkJLmZsYWdzID0gZmxhZ3MsCisJfTsKKwlpbnQgcmV0OworCisJYWxsb2NfaW5vZGVfYmxvY2soaW5vZGUpOworCisJaWYgKGxpLT5saV9oZWlnaHQgPiAoX19mb3JjZSB1OCl0YXJnZXRfbGV2ZWwpCisJCXJldCA9IF9fbG9nZnNfd3JpdGVfcmVjKGlub2RlLCBwYWdlLCAmd2MsIGJpeCwgdGFyZ2V0X2xldmVsLAorCQkJCUxFVkVMKGxpLT5saV9oZWlnaHQpKTsKKwllbHNlCisJCXJldCA9IGxvZ2ZzX3dyaXRlX2kwKGlub2RlLCBwYWdlLCAmd2MpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAobGktPmxpX2RhdGFbSU5ESVJFQ1RfSU5ERVhdICE9IHdjLm9mcykgeworCQlsaS0+bGlfZGF0YVtJTkRJUkVDVF9JTkRFWF0gPSB3Yy5vZnM7CisJCWxvZ2ZzX3NldF9hbGlhcyhpbm9kZS0+aV9zYiwgbGktPmxpX2Jsb2NrLAorCQkJCUlORElSRUNUX0lOREVYICsgSU5PREVfUE9JTlRFUl9PRlMpOworCX0KKwlyZXR1cm4gcmV0OworfQorCit2b2lkIGxvZ2ZzX2FkZF90cmFuc2FjdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbG9nZnNfdHJhbnNhY3Rpb24gKnRhKQoreworCWFsbG9jX2lub2RlX2Jsb2NrKGlub2RlKTsKKwlsb2dmc19pbm9kZShpbm9kZSktPmxpX2Jsb2NrLT50YSA9IHRhOworfQorCit2b2lkIGxvZ2ZzX2RlbF90cmFuc2FjdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbG9nZnNfdHJhbnNhY3Rpb24gKnRhKQoreworCXN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2sgPSBsb2dmc19pbm9kZShpbm9kZSktPmxpX2Jsb2NrOworCisJaWYgKGJsb2NrICYmIGJsb2NrLT50YSkKKwkJYmxvY2stPnRhID0gTlVMTDsKK30KKworc3RhdGljIGludCBncm93X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBiaXgsIGxldmVsX3QgbGV2ZWwpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwl1OCBoZWlnaHQgPSAoX19mb3JjZSB1OClsZXZlbDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3Qgd3JpdGVfY29udHJvbCB3YyA9IHsKKwkJLmZsYWdzID0gV0ZfV1JJVEUsCisJfTsKKwlpbnQgZXJyOworCisJQlVHX09OKGhlaWdodCA+IDUgfHwgbGktPmxpX2hlaWdodCA+IDUpOworCXdoaWxlIChoZWlnaHQgPiBsaS0+bGlfaGVpZ2h0IHx8IGJpeCA+PSBtYXhiaXgobGktPmxpX2hlaWdodCkpIHsKKwkJcGFnZSA9IGxvZ2ZzX2dldF93cml0ZV9wYWdlKGlub2RlLCBJMF9CTE9DS1MgKyAxLAorCQkJCUxFVkVMKGxpLT5saV9oZWlnaHQgKyAxKSk7CisJCWlmICghcGFnZSkKKwkJCXJldHVybiAtRU5PTUVNOworCQlsb2dmc19yZWFkX2VtcHR5KHBhZ2UpOworCQlhbGxvY19pbmRpcmVjdF9ibG9jayhpbm9kZSwgcGFnZSwgMSk7CisJCWJsb2NrX3NldF9wb2ludGVyKHBhZ2UsIDAsIGxpLT5saV9kYXRhW0lORElSRUNUX0lOREVYXSk7CisJCWVyciA9IGxvZ2ZzX3dyaXRlX2kwKGlub2RlLCBwYWdlLCAmd2MpOworCQlsb2dmc19wdXRfd3JpdGVfcGFnZShwYWdlKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCWxpLT5saV9kYXRhW0lORElSRUNUX0lOREVYXSA9IHdjLm9mczsKKwkJd2Mub2ZzID0gMDsKKwkJbGktPmxpX2hlaWdodCsrOworCQlsb2dmc19zZXRfYWxpYXMoaW5vZGUtPmlfc2IsIGxpLT5saV9ibG9jaywgSU5PREVfSEVJR0hUX09GUyk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fbG9nZnNfd3JpdGVfYnVmKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihpbm9kZS0+aV9zYik7CisJcGdvZmZfdCBpbmRleCA9IHBhZ2UtPmluZGV4OworCXU2NCBiaXg7CisJbGV2ZWxfdCBsZXZlbDsKKwlpbnQgZXJyOworCisJZmxhZ3MgfD0gV0ZfV1JJVEUgfCBXRl9ERUxFVEU7CisJaW5vZGUtPmlfY3RpbWUgPSBpbm9kZS0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKKworCWxvZ2ZzX3VucGFja19pbmRleChpbmRleCwgJmJpeCwgJmxldmVsKTsKKwlpZiAobG9nZnNfYmxvY2socGFnZSkgJiYgbG9nZnNfYmxvY2socGFnZSktPnJlc2VydmVkX2J5dGVzKQorCQlzdXBlci0+c19kaXJ0eV9wYWdlcyAtPSBsb2dmc19ibG9jayhwYWdlKS0+cmVzZXJ2ZWRfYnl0ZXM7CisKKwlpZiAoaW5kZXggPCBJMF9CTE9DS1MpCisJCXJldHVybiBsb2dmc193cml0ZV9kaXJlY3QoaW5vZGUsIHBhZ2UsIGZsYWdzKTsKKworCWJpeCA9IGFkanVzdF9iaXgoYml4LCBsZXZlbCk7CisJZXJyID0gZ3Jvd19pbm9kZShpbm9kZSwgYml4LCBsZXZlbCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gbG9nZnNfd3JpdGVfcmVjKGlub2RlLCBwYWdlLCBiaXgsIGxldmVsLCBmbGFncyk7Cit9CisKK2ludCBsb2dmc193cml0ZV9idWYoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsIGxvbmcgZmxhZ3MpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCWludCByZXQ7CisKKwlsb2dmc19nZXRfd2Jsb2NrcyhzYiwgcGFnZSwgZmxhZ3MgJiBXRl9MT0NLKTsKKwlyZXQgPSBfX2xvZ2ZzX3dyaXRlX2J1Zihpbm9kZSwgcGFnZSwgZmxhZ3MpOworCWxvZ2ZzX3B1dF93YmxvY2tzKHNiLCBwYWdlLCBmbGFncyAmIFdGX0xPQ0spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX19sb2dmc19kZWxldGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJbG9uZyBmbGFncyA9IFdGX0RFTEVURTsKKworCWlub2RlLT5pX2N0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUU7CisKKwlpZiAocGFnZS0+aW5kZXggPCBJMF9CTE9DS1MpCisJCXJldHVybiBsb2dmc193cml0ZV9kaXJlY3QoaW5vZGUsIHBhZ2UsIGZsYWdzKTsKKwlyZXR1cm4gbG9nZnNfd3JpdGVfcmVjKGlub2RlLCBwYWdlLCBwYWdlLT5pbmRleCwgMCwgZmxhZ3MpOworfQorCitpbnQgbG9nZnNfZGVsZXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHBnb2ZmX3QgaW5kZXgsCisJCXN0cnVjdCBzaGFkb3dfdHJlZSAqc2hhZG93X3RyZWUpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCByZXQ7CisKKwlwYWdlID0gbG9nZnNfZ2V0X3JlYWRfcGFnZShpbm9kZSwgaW5kZXgsIDApOworCWlmICghcGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlsb2dmc19nZXRfd2Jsb2NrcyhzYiwgcGFnZSwgMSk7CisJcmV0ID0gX19sb2dmc19kZWxldGUoaW5vZGUsIHBhZ2UpOworCWxvZ2ZzX3B1dF93YmxvY2tzKHNiLCBwYWdlLCAxKTsKKworCWxvZ2ZzX3B1dF9yZWFkX3BhZ2UocGFnZSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBSZXdyaXRlIGNhbm5vdCBtYXJrIHRoZSBpbm9kZSBkaXJ0eSBidXQgaGFzIHRvIHdyaXRlIGl0IGltbWVkaWF0bHkuICovCitpbnQgbG9nZnNfcmV3cml0ZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgYml4LCB1NjQgb2ZzLAorCQlnY19sZXZlbF90IGdjX2xldmVsLCBsb25nIGZsYWdzKQoreworCWxldmVsX3QgbGV2ZWwgPSBzaHJpbmtfbGV2ZWwoZ2NfbGV2ZWwpOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBlcnI7CisKKwlwYWdlID0gbG9nZnNfZ2V0X3dyaXRlX3BhZ2UoaW5vZGUsIGJpeCwgbGV2ZWwpOworCWlmICghcGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSBsb2dmc19zZWdtZW50X3JlYWQoaW5vZGUsIHBhZ2UsIG9mcywgYml4LCBsZXZlbCk7CisJaWYgKCFlcnIpIHsKKwkJaWYgKGxldmVsICE9IDApCisJCQlhbGxvY19pbmRpcmVjdF9ibG9jayhpbm9kZSwgcGFnZSwgMCk7CisJCWVyciA9IGxvZ2ZzX3dyaXRlX2J1Zihpbm9kZSwgcGFnZSwgZmxhZ3MpOworCX0KKwlsb2dmc19wdXRfd3JpdGVfcGFnZShwYWdlKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHRydW5jYXRlX2RhdGFfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCXU2NCBvZnMsIHN0cnVjdCBsb2dmc19zaGFkb3cgKnNoYWRvdywgdTY0IHNpemUpCit7CisJbG9mZl90IHBhZ2VvZnMgPSBwYWdlLT5pbmRleCA8PCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKKwl1NjQgYml4OworCWxldmVsX3QgbGV2ZWw7CisJaW50IGVycjsKKworCS8qIERvZXMgdHJ1bmNhdGlvbiBoYXBwZW4gd2l0aGluIHRoaXMgcGFnZT8gKi8KKwlpZiAoc2l6ZSA8PSBwYWdlb2ZzIHx8IHNpemUgLSBwYWdlb2ZzID49IFBBR0VfU0laRSkKKwkJcmV0dXJuIDA7CisKKwlsb2dmc191bnBhY2tfaW5kZXgocGFnZS0+aW5kZXgsICZiaXgsICZsZXZlbCk7CisJQlVHX09OKGxldmVsICE9IDApOworCisJZXJyID0gbG9nZnNfc2VnbWVudF9yZWFkKGlub2RlLCBwYWdlLCBvZnMsIGJpeCwgbGV2ZWwpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwl6ZXJvX3VzZXJfc2VnbWVudChwYWdlLCBzaXplIC0gcGFnZW9mcywgUEFHRV9DQUNIRV9TSVpFKTsKKwlyZXR1cm4gbG9nZnNfc2VnbWVudF93cml0ZShpbm9kZSwgcGFnZSwgc2hhZG93KTsKK30KKworc3RhdGljIGludCBsb2dmc190cnVuY2F0ZV9pMChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJc3RydWN0IHdyaXRlX2NvbnRyb2wgKndjLCB1NjQgc2l6ZSkKK3sKKwlzdHJ1Y3QgbG9nZnNfc2hhZG93ICpzaGFkb3c7CisJdTY0IGJpeDsKKwlsZXZlbF90IGxldmVsOworCWludCBlcnIgPSAwOworCisJbG9nZnNfdW5wYWNrX2luZGV4KHBhZ2UtPmluZGV4LCAmYml4LCAmbGV2ZWwpOworCUJVR19PTihsZXZlbCAhPSAwKTsKKwlzaGFkb3cgPSBhbGxvY19zaGFkb3coaW5vZGUsIGJpeCwgbGV2ZWwsIHdjLT5vZnMpOworCisJZXJyID0gdHJ1bmNhdGVfZGF0YV9ibG9jayhpbm9kZSwgcGFnZSwgd2MtPm9mcywgc2hhZG93LCBzaXplKTsKKwlpZiAoZXJyKSB7CisJCWZyZWVfc2hhZG93KGlub2RlLCBzaGFkb3cpOworCQlyZXR1cm4gZXJyOworCX0KKworCWxvZ2ZzX3NlZ21lbnRfZGVsZXRlKGlub2RlLCBzaGFkb3cpOworCXNldF9pdXNlZChpbm9kZSwgc2hhZG93KTsKKwlmaWxsX3NoYWRvd190cmVlKGlub2RlLCBwYWdlLCBzaGFkb3cpOworCXdjLT5vZnMgPSBzaGFkb3ctPm5ld19vZnM7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfdHJ1bmNhdGVfZGlyZWN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBzaXplKQoreworCXN0cnVjdCBsb2dmc19pbm9kZSAqbGkgPSBsb2dmc19pbm9kZShpbm9kZSk7CisJc3RydWN0IHdyaXRlX2NvbnRyb2wgd2M7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IGU7CisJaW50IGVycjsKKworCWFsbG9jX2lub2RlX2Jsb2NrKGlub2RlKTsKKworCWZvciAoZSA9IEkwX0JMT0NLUyAtIDE7IGUgPj0gMDsgZS0tKSB7CisJCWlmIChzaXplID4gKGUrMSkgKiBMT0dGU19CTE9DS1NJWkUpCisJCQlicmVhazsKKworCQl3Yy5vZnMgPSBsaS0+bGlfZGF0YVtlXTsKKwkJaWYgKCF3Yy5vZnMpCisJCQljb250aW51ZTsKKworCQlwYWdlID0gbG9nZnNfZ2V0X3dyaXRlX3BhZ2UoaW5vZGUsIGUsIDApOworCQlpZiAoIXBhZ2UpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZXJyID0gbG9nZnNfc2VnbWVudF9yZWFkKGlub2RlLCBwYWdlLCB3Yy5vZnMsIGUsIDApOworCQlpZiAoZXJyKSB7CisJCQlsb2dmc19wdXRfd3JpdGVfcGFnZShwYWdlKTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwkJZXJyID0gbG9nZnNfdHJ1bmNhdGVfaTAoaW5vZGUsIHBhZ2UsICZ3Yywgc2l6ZSk7CisJCWxvZ2ZzX3B1dF93cml0ZV9wYWdlKHBhZ2UpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKworCQlsaS0+bGlfZGF0YVtlXSA9IHdjLm9mczsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIEZJWE1FOiB0aGVzZSBuZWVkIHRvIGJlY29tZSBwZXItc2Igb25jZSB3ZSBzdXBwb3J0IGRpZmZlcmVudCBibG9ja3NpemVzICovCitzdGF0aWMgdTY0IF9fbG9nZnNfc3RlcFtdID0geworCTEsCisJSTFfQkxPQ0tTLAorCUkyX0JMT0NLUywKKwlJM19CTE9DS1MsCit9OworCitzdGF0aWMgdTY0IF9fbG9nZnNfc3RhcnRfaW5kZXhbXSA9IHsKKwlJMF9CTE9DS1MsCisJSTFfQkxPQ0tTLAorCUkyX0JMT0NLUywKKwlJM19CTE9DS1MKK307CisKK3N0YXRpYyBpbmxpbmUgdTY0IGxvZ2ZzX3N0ZXAobGV2ZWxfdCBsZXZlbCkKK3sKKwlyZXR1cm4gX19sb2dmc19zdGVwWyhfX2ZvcmNlIHU4KWxldmVsXTsKK30KKworc3RhdGljIGlubGluZSB1NjQgbG9nZnNfZmFjdG9yKHU4IGxldmVsKQoreworCXJldHVybiBfX2xvZ2ZzX3N0ZXBbbGV2ZWxdICogTE9HRlNfQkxPQ0tTSVpFOworfQorCitzdGF0aWMgaW5saW5lIHU2NCBsb2dmc19zdGFydF9pbmRleChsZXZlbF90IGxldmVsKQoreworCXJldHVybiBfX2xvZ2ZzX3N0YXJ0X2luZGV4WyhfX2ZvcmNlIHU4KWxldmVsXTsKK30KKworc3RhdGljIHZvaWQgbG9nZnNfdW5wYWNrX3Jhd19pbmRleChwZ29mZl90IGluZGV4LCB1NjQgKmJpeCwgbGV2ZWxfdCAqbGV2ZWwpCit7CisJbG9nZnNfdW5wYWNrX2luZGV4KGluZGV4LCBiaXgsIGxldmVsKTsKKwlpZiAoKmJpeCA8PSBsb2dmc19zdGFydF9pbmRleChTVUJMRVZFTCgqbGV2ZWwpKSkKKwkJKmJpeCA9IDA7Cit9CisKK3N0YXRpYyBpbnQgX19sb2dmc190cnVuY2F0ZV9yZWMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKmlwYWdlLAorCQlzdHJ1Y3Qgd3JpdGVfY29udHJvbCAqdGhpc193YywgdTY0IHNpemUpCit7CisJaW50IHRydW5jYXRlX2hhcHBlbmVkID0gMDsKKwlpbnQgZSwgZXJyID0gMDsKKwl1NjQgYml4LCBjaGlsZF9iaXgsIG5leHRfYml4OworCWxldmVsX3QgbGV2ZWw7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3RydWN0IHdyaXRlX2NvbnRyb2wgY2hpbGRfd2MgPSB7IC8qIEZJWE1FOiBmbGFncyAqLyB9OworCisJbG9nZnNfdW5wYWNrX3Jhd19pbmRleChpcGFnZS0+aW5kZXgsICZiaXgsICZsZXZlbCk7CisJZXJyID0gbG9nZnNfc2VnbWVudF9yZWFkKGlub2RlLCBpcGFnZSwgdGhpc193Yy0+b2ZzLCBiaXgsIGxldmVsKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZm9yIChlID0gTE9HRlNfQkxPQ0tfRkFDVE9SIC0gMTsgZSA+PSAwOyBlLS0pIHsKKwkJY2hpbGRfYml4ID0gYml4ICsgZSAqIGxvZ2ZzX3N0ZXAoU1VCTEVWRUwobGV2ZWwpKTsKKwkJbmV4dF9iaXggPSBjaGlsZF9iaXggKyBsb2dmc19zdGVwKFNVQkxFVkVMKGxldmVsKSk7CisJCWlmIChzaXplID4gbmV4dF9iaXggKiBMT0dGU19CTE9DS1NJWkUpCisJCQlicmVhazsKKworCQljaGlsZF93Yy5vZnMgPSBwdXJlX29mcyhibG9ja19nZXRfcG9pbnRlcihpcGFnZSwgZSkpOworCQlpZiAoIWNoaWxkX3djLm9mcykKKwkJCWNvbnRpbnVlOworCisJCXBhZ2UgPSBsb2dmc19nZXRfd3JpdGVfcGFnZShpbm9kZSwgY2hpbGRfYml4LCBTVUJMRVZFTChsZXZlbCkpOworCQlpZiAoIXBhZ2UpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlpZiAoKF9fZm9yY2UgdTgpbGV2ZWwgPiAxKQorCQkJZXJyID0gX19sb2dmc190cnVuY2F0ZV9yZWMoaW5vZGUsIHBhZ2UsICZjaGlsZF93Yywgc2l6ZSk7CisJCWVsc2UKKwkJCWVyciA9IGxvZ2ZzX3RydW5jYXRlX2kwKGlub2RlLCBwYWdlLCAmY2hpbGRfd2MsIHNpemUpOworCQlsb2dmc19wdXRfd3JpdGVfcGFnZShwYWdlKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisKKwkJdHJ1bmNhdGVfaGFwcGVuZWQgPSAxOworCQlhbGxvY19pbmRpcmVjdF9ibG9jayhpbm9kZSwgaXBhZ2UsIDApOworCQlibG9ja19zZXRfcG9pbnRlcihpcGFnZSwgZSwgY2hpbGRfd2Mub2ZzKTsKKwl9CisKKwlpZiAoIXRydW5jYXRlX2hhcHBlbmVkKSB7CisJCXByaW50aygiaW5lZmZlY3R1YWwgdHJ1bmNhdGUgKCVseCwgJWx4LCAlbGx4KVxuIiwgaW5vZGUtPmlfaW5vLCBpcGFnZS0+aW5kZXgsIHNpemUpOworCQlyZXR1cm4gMDsKKwl9CisKKwl0aGlzX3djLT5mbGFncyA9IFdGX0RFTEVURTsKKwlpZiAobG9nZnNfYmxvY2soaXBhZ2UpLT5wYXJ0aWFsKQorCQl0aGlzX3djLT5mbGFncyB8PSBXRl9XUklURTsKKworCXJldHVybiBsb2dmc193cml0ZV9pMChpbm9kZSwgaXBhZ2UsIHRoaXNfd2MpOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3RydW5jYXRlX3JlYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgc2l6ZSkKK3sKKwlzdHJ1Y3QgbG9nZnNfaW5vZGUgKmxpID0gbG9nZnNfaW5vZGUoaW5vZGUpOworCXN0cnVjdCB3cml0ZV9jb250cm9sIHdjID0geworCQkub2ZzID0gbGktPmxpX2RhdGFbSU5ESVJFQ1RfSU5ERVhdLAorCX07CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJaW50IGVycjsKKworCWFsbG9jX2lub2RlX2Jsb2NrKGlub2RlKTsKKworCWlmICghd2Mub2ZzKQorCQlyZXR1cm4gMDsKKworCXBhZ2UgPSBsb2dmc19nZXRfd3JpdGVfcGFnZShpbm9kZSwgMCwgTEVWRUwobGktPmxpX2hlaWdodCkpOworCWlmICghcGFnZSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwllcnIgPSBfX2xvZ2ZzX3RydW5jYXRlX3JlYyhpbm9kZSwgcGFnZSwgJndjLCBzaXplKTsKKwlsb2dmc19wdXRfd3JpdGVfcGFnZShwYWdlKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJaWYgKGxpLT5saV9kYXRhW0lORElSRUNUX0lOREVYXSAhPSB3Yy5vZnMpCisJCWxpLT5saV9kYXRhW0lORElSRUNUX0lOREVYXSA9IHdjLm9mczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBfX2xvZ2ZzX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCBzaXplKQoreworCWludCByZXQ7CisKKwlpZiAoc2l6ZSA+PSBsb2dmc19mYWN0b3IobG9nZnNfaW5vZGUoaW5vZGUpLT5saV9oZWlnaHQpKQorCQlyZXR1cm4gMDsKKworCXJldCA9IGxvZ2ZzX3RydW5jYXRlX3JlYyhpbm9kZSwgc2l6ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldHVybiBsb2dmc190cnVuY2F0ZV9kaXJlY3QoaW5vZGUsIHNpemUpOworfQorCitpbnQgbG9nZnNfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHNpemUpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCWludCBlcnI7CisKKwlsb2dmc19nZXRfd2Jsb2NrcyhzYiwgTlVMTCwgMSk7CisJZXJyID0gX19sb2dmc190cnVuY2F0ZShpbm9kZSwgc2l6ZSk7CisJaWYgKCFlcnIpCisJCWVyciA9IF9fbG9nZnNfd3JpdGVfaW5vZGUoaW5vZGUsIDApOworCWxvZ2ZzX3B1dF93YmxvY2tzKHNiLCBOVUxMLCAxKTsKKworCWlmICghZXJyKQorCQllcnIgPSB2bXRydW5jYXRlKGlub2RlLCBzaXplKTsKKworCS8qIEkgZG9uJ3QgdHJ1c3QgZXJyb3IgcmVjb3ZlcnkgeWV0LiAqLworCVdBUk5fT04oZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBtb3ZlX3BhZ2VfdG9faW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwlzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrID0gbG9nZnNfYmxvY2socGFnZSk7CisKKwlpZiAoIWJsb2NrKQorCQlyZXR1cm47CisKKwlsb2dfYmxvY2ttb3ZlKCJtb3ZlX3BhZ2VfdG9faW5vZGUoJWxseCwgJWxseCwgJXgpXG4iLAorCQkJYmxvY2stPmlubywgYmxvY2stPmJpeCwgYmxvY2stPmxldmVsKTsKKwlCVUdfT04obGktPmxpX2Jsb2NrKTsKKwlibG9jay0+b3BzID0gJmlub2RlX2Jsb2NrX29wczsKKwlibG9jay0+aW5vZGUgPSBpbm9kZTsKKwlsaS0+bGlfYmxvY2sgPSBibG9jazsKKworCWJsb2NrLT5wYWdlID0gTlVMTDsKKwlwYWdlLT5wcml2YXRlID0gMDsKKwlDbGVhclBhZ2VQcml2YXRlKHBhZ2UpOworfQorCitzdGF0aWMgdm9pZCBtb3ZlX2lub2RlX3RvX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwlzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrID0gbGktPmxpX2Jsb2NrOworCisJaWYgKCFibG9jaykKKwkJcmV0dXJuOworCisJbG9nX2Jsb2NrbW92ZSgibW92ZV9pbm9kZV90b19wYWdlKCVsbHgsICVsbHgsICV4KVxuIiwKKwkJCWJsb2NrLT5pbm8sIGJsb2NrLT5iaXgsIGJsb2NrLT5sZXZlbCk7CisJQlVHX09OKFBhZ2VQcml2YXRlKHBhZ2UpKTsKKwlibG9jay0+b3BzID0gJmluZGlyZWN0X2Jsb2NrX29wczsKKwlibG9jay0+cGFnZSA9IHBhZ2U7CisJcGFnZS0+cHJpdmF0ZSA9ICh1bnNpZ25lZCBsb25nKWJsb2NrOworCVNldFBhZ2VQcml2YXRlKHBhZ2UpOworCisJYmxvY2stPmlub2RlID0gTlVMTDsKKwlsaS0+bGlfYmxvY2sgPSBOVUxMOworfQorCitpbnQgbG9nZnNfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBpbm9kZSAqbWFzdGVyX2lub2RlID0gc3VwZXItPnNfbWFzdGVyX2lub2RlOworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBsb2dmc19kaXNrX2lub2RlICpkaTsKKwl1NjQgaW5vID0gaW5vZGUtPmlfaW5vOworCisJaWYgKGlubyA8PCBzYi0+c19ibG9ja3NpemVfYml0cyA+IGlfc2l6ZV9yZWFkKG1hc3Rlcl9pbm9kZSkpCisJCXJldHVybiAtRU5PREFUQTsKKwlpZiAoIWxvZ2ZzX2V4aXN0X2Jsb2NrKG1hc3Rlcl9pbm9kZSwgaW5vKSkKKwkJcmV0dXJuIC1FTk9EQVRBOworCisJcGFnZSA9IHJlYWRfY2FjaGVfcGFnZShtYXN0ZXJfaW5vZGUtPmlfbWFwcGluZywgaW5vLAorCQkJKGZpbGxlcl90ICopbG9nZnNfcmVhZHBhZ2UsIE5VTEwpOworCWlmIChJU19FUlIocGFnZSkpCisJCXJldHVybiBQVFJfRVJSKHBhZ2UpOworCisJZGkgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJbG9nZnNfZGlza190b19pbm9kZShkaSwgaW5vZGUpOworCWt1bm1hcF9hdG9taWMoZGksIEtNX1VTRVIwKTsKKwltb3ZlX3BhZ2VfdG9faW5vZGUoaW5vZGUsIHBhZ2UpOworCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwlyZXR1cm4gMDsKK30KKworLyogQ2FsbGVyIG11c3QgbG9nZnNfcHV0X3dyaXRlX3BhZ2UocGFnZSk7ICovCitzdGF0aWMgc3RydWN0IHBhZ2UgKmlub2RlX3RvX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3QgaW5vZGUgKm1hc3Rlcl9pbm9kZSA9IGxvZ2ZzX3N1cGVyKGlub2RlLT5pX3NiKS0+c19tYXN0ZXJfaW5vZGU7CisJc3RydWN0IGxvZ2ZzX2Rpc2tfaW5vZGUgKmRpOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJQlVHX09OKGlub2RlLT5pX2lubyA9PSBMT0dGU19JTk9fTUFTVEVSKTsKKworCXBhZ2UgPSBsb2dmc19nZXRfd3JpdGVfcGFnZShtYXN0ZXJfaW5vZGUsIGlub2RlLT5pX2lubywgMCk7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gTlVMTDsKKworCWRpID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCWxvZ2ZzX2lub2RlX3RvX2Rpc2soaW5vZGUsIGRpKTsKKwlrdW5tYXBfYXRvbWljKGRpLCBLTV9VU0VSMCk7CisJbW92ZV9pbm9kZV90b19wYWdlKHBhZ2UsIGlub2RlKTsKKwlyZXR1cm4gcGFnZTsKK30KKworLyogQ2hlYXBlciB2ZXJzaW9uIG9mIHdyaXRlX2lub2RlLiAgQWxsIGNoYW5nZXMgYXJlIGNvbmNlYWxlZCBpbgorICogYWxpYXNlcywgd2hpY2ggYXJlIG1vdmVkIGJhY2suICBObyB3cml0ZSB0byB0aGUgbWVkaXVtIGhhcHBlbnMuCisgKi8KK3ZvaWQgbG9nZnNfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKwlzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrID0gbGktPmxpX2Jsb2NrOworCXN0cnVjdCBwYWdlICpwYWdlOworCisJLyogT25seSBkZWxldGVkIGZpbGVzIG1heSBiZSBkaXJ0eSBhdCB0aGlzIHBvaW50ICovCisJQlVHX09OKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWSAmJiBpbm9kZS0+aV9ubGluayk7CisJaWYgKCFibG9jaykKKwkJcmV0dXJuOworCWlmICgobG9nZnNfc3VwZXIoc2IpLT5zX2ZsYWdzICYgTE9HRlNfU0JfRkxBR19TSFVURE9XTikpIHsKKwkJYmxvY2stPm9wcy0+ZnJlZV9ibG9jayhpbm9kZS0+aV9zYiwgYmxvY2spOworCQlyZXR1cm47CisJfQorCisJQlVHX09OKGlub2RlLT5pX2lubyA8IExPR0ZTX1JFU0VSVkVEX0lOT1MpOworCXBhZ2UgPSBpbm9kZV90b19wYWdlKGlub2RlKTsKKwlCVUdfT04oIXBhZ2UpOyAvKiBGSVhNRTogVXNlIGVtZXJnZW5jeSBwYWdlICovCisJbG9nZnNfcHV0X3dyaXRlX3BhZ2UocGFnZSk7Cit9CisKK3N0YXRpYyBpbnQgZG9fd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJc3RydWN0IGlub2RlICptYXN0ZXJfaW5vZGUgPSBsb2dmc19zdXBlcihzYiktPnNfbWFzdGVyX2lub2RlOworCWxvZmZfdCBzaXplID0gKGlub2RlLT5pX2lubyArIDEpIDw8IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBlcnI7CisKKwlCVUdfT04oaW5vZGUtPmlfaW5vID09IExPR0ZTX0lOT19NQVNURVIpOworCS8qIEZJWE1FOiBsb2NrIGlub2RlICovCisKKwlpZiAoaV9zaXplX3JlYWQobWFzdGVyX2lub2RlKSA8IHNpemUpCisJCWlfc2l6ZV93cml0ZShtYXN0ZXJfaW5vZGUsIHNpemUpOworCisJLyogVE9ETzogVGVsbCB2ZnMgdGhpcyBpbm9kZSBpcyBjbGVhbiBub3cgKi8KKworCXBhZ2UgPSBpbm9kZV90b19wYWdlKGlub2RlKTsKKwlpZiAoIXBhZ2UpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogRklYTUU6IHRyYW5zYWN0aW9uIGlzIHBhcnQgb2YgbG9nZnNfYmxvY2sgbm93LiAgSXMgdGhhdCBlbm91Z2g/ICovCisJZXJyID0gbG9nZnNfd3JpdGVfYnVmKG1hc3Rlcl9pbm9kZSwgcGFnZSwgMCk7CisJbG9nZnNfcHV0X3dyaXRlX3BhZ2UocGFnZSk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgbG9nZnNfbW9kX3NlZ21lbnRfZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlZ25vLAorCQlpbnQgd3JpdGUsCisJCXZvaWQgKCpjaGFuZ2Vfc2UpKHN0cnVjdCBsb2dmc19zZWdtZW50X2VudHJ5ICosIGxvbmcpLAorCQlsb25nIGFyZykKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJc3RydWN0IGxvZ2ZzX3NlZ21lbnRfZW50cnkgKnNlOworCXBnb2ZmX3QgcGFnZV9ubzsKKwlpbnQgY2hpbGRfbm87CisKKwlwYWdlX25vID0gc2Vnbm8gPj4gKHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzIC0gMyk7CisJY2hpbGRfbm8gPSBzZWdubyAmICgoc2ItPnNfYmxvY2tzaXplID4+IDMpIC0gMSk7CisKKwlpbm9kZSA9IHN1cGVyLT5zX3NlZ2ZpbGVfaW5vZGU7CisJcGFnZSA9IGxvZ2ZzX2dldF93cml0ZV9wYWdlKGlub2RlLCBwYWdlX25vLCAwKTsKKwlCVUdfT04oIXBhZ2UpOyAvKiBGSVhNRTogV2UgbmVlZCBzb21lIHJlc2VydmUgcGFnZSBmb3IgdGhpcyBjYXNlICovCisJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpCisJCWxvZ2ZzX3JlYWRfYmxvY2soaW5vZGUsIHBhZ2UsIFdSSVRFKTsKKworCWlmICh3cml0ZSkKKwkJYWxsb2NfaW5kaXJlY3RfYmxvY2soaW5vZGUsIHBhZ2UsIDApOworCXNlID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOworCWNoYW5nZV9zZShzZSArIGNoaWxkX25vLCBhcmcpOworCWlmICh3cml0ZSkgeworCQlsb2dmc19zZXRfYWxpYXMoc2IsIGxvZ2ZzX2Jsb2NrKHBhZ2UpLCBjaGlsZF9ubyk7CisJCUJVR19PTigoaW50KWJlMzJfdG9fY3B1KHNlW2NoaWxkX25vXS52YWxpZCkgPiBzdXBlci0+c19zZWdzaXplKTsKKwl9CisJa3VubWFwX2F0b21pYyhzZSwgS01fVVNFUjApOworCisJbG9nZnNfcHV0X3dyaXRlX3BhZ2UocGFnZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZ2V0X3NlZ21lbnRfZW50cnkoc3RydWN0IGxvZ2ZzX3NlZ21lbnRfZW50cnkgKnNlLCBsb25nIF90YXJnZXQpCit7CisJc3RydWN0IGxvZ2ZzX3NlZ21lbnRfZW50cnkgKnRhcmdldCA9ICh2b2lkICopX3RhcmdldDsKKworCSp0YXJnZXQgPSAqc2U7Cit9CisKK3ZvaWQgbG9nZnNfZ2V0X3NlZ21lbnRfZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlZ25vLAorCQlzdHJ1Y3QgbG9nZnNfc2VnbWVudF9lbnRyeSAqc2UpCit7CisJbG9nZnNfbW9kX3NlZ21lbnRfZW50cnkoc2IsIHNlZ25vLCAwLCBfX2dldF9zZWdtZW50X2VudHJ5LCAobG9uZylzZSk7Cit9CisKK3N0YXRpYyB2b2lkIF9fc2V0X3NlZ21lbnRfdXNlZChzdHJ1Y3QgbG9nZnNfc2VnbWVudF9lbnRyeSAqc2UsIGxvbmcgaW5jcmVtZW50KQoreworCXUzMiB2YWxpZDsKKworCXZhbGlkID0gYmUzMl90b19jcHUoc2UtPnZhbGlkKTsKKwl2YWxpZCArPSBpbmNyZW1lbnQ7CisJc2UtPnZhbGlkID0gY3B1X3RvX2JlMzIodmFsaWQpOworfQorCit2b2lkIGxvZ2ZzX3NldF9zZWdtZW50X3VzZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IG9mcywgaW50IGluY3JlbWVudCkKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXUzMiBzZWdubyA9IG9mcyA+PiBzdXBlci0+c19zZWdzaGlmdDsKKworCWlmICghaW5jcmVtZW50KQorCQlyZXR1cm47CisKKwlsb2dmc19tb2Rfc2VnbWVudF9lbnRyeShzYiwgc2Vnbm8sIDEsIF9fc2V0X3NlZ21lbnRfdXNlZCwgaW5jcmVtZW50KTsKK30KKworc3RhdGljIHZvaWQgX19zZXRfc2VnbWVudF9lcmFzZWQoc3RydWN0IGxvZ2ZzX3NlZ21lbnRfZW50cnkgKnNlLCBsb25nIGVjX2xldmVsKQoreworCXNlLT5lY19sZXZlbCA9IGNwdV90b19iZTMyKGVjX2xldmVsKTsKK30KKwordm9pZCBsb2dmc19zZXRfc2VnbWVudF9lcmFzZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlZ25vLCB1MzIgZWMsCisJCWdjX2xldmVsX3QgZ2NfbGV2ZWwpCit7CisJdTMyIGVjX2xldmVsID0gZWMgPDwgNCB8IChfX2ZvcmNlIHU4KWdjX2xldmVsOworCisJbG9nZnNfbW9kX3NlZ21lbnRfZW50cnkoc2IsIHNlZ25vLCAxLCBfX3NldF9zZWdtZW50X2VyYXNlZCwgZWNfbGV2ZWwpOworfQorCitzdGF0aWMgdm9pZCBfX3NldF9zZWdtZW50X3Jlc2VydmVkKHN0cnVjdCBsb2dmc19zZWdtZW50X2VudHJ5ICpzZSwgbG9uZyBpZ25vcmUpCit7CisJc2UtPnZhbGlkID0gY3B1X3RvX2JlMzIoUkVTRVJWRUQpOworfQorCit2b2lkIGxvZ2ZzX3NldF9zZWdtZW50X3Jlc2VydmVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzZWdubykKK3sKKwlsb2dmc19tb2Rfc2VnbWVudF9lbnRyeShzYiwgc2Vnbm8sIDEsIF9fc2V0X3NlZ21lbnRfcmVzZXJ2ZWQsIDApOworfQorCitzdGF0aWMgdm9pZCBfX3NldF9zZWdtZW50X3VucmVzZXJ2ZWQoc3RydWN0IGxvZ2ZzX3NlZ21lbnRfZW50cnkgKnNlLAorCQlsb25nIGVjX2xldmVsKQoreworCXNlLT52YWxpZCA9IDA7CisJc2UtPmVjX2xldmVsID0gY3B1X3RvX2JlMzIoZWNfbGV2ZWwpOworfQorCit2b2lkIGxvZ2ZzX3NldF9zZWdtZW50X3VucmVzZXJ2ZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlZ25vLCB1MzIgZWMpCit7CisJdTMyIGVjX2xldmVsID0gZWMgPDwgNDsKKworCWxvZ2ZzX21vZF9zZWdtZW50X2VudHJ5KHNiLCBzZWdubywgMSwgX19zZXRfc2VnbWVudF91bnJlc2VydmVkLAorCQkJZWNfbGV2ZWwpOworfQorCitpbnQgX19sb2dmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlpbnQgcmV0OworCisJbG9nZnNfZ2V0X3dibG9ja3Moc2IsIE5VTEwsIGZsYWdzICYgV0ZfTE9DSyk7CisJcmV0ID0gZG9fd3JpdGVfaW5vZGUoaW5vZGUpOworCWxvZ2ZzX3B1dF93YmxvY2tzKHNiLCBOVUxMLCBmbGFncyAmIFdGX0xPQ0spOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgZG9fZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCBpbm9kZSAqbWFzdGVyX2lub2RlID0gbG9nZnNfc3VwZXIoc2IpLT5zX21hc3Rlcl9pbm9kZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgcmV0OworCisJcGFnZSA9IGxvZ2ZzX2dldF93cml0ZV9wYWdlKG1hc3Rlcl9pbm9kZSwgaW5vZGUtPmlfaW5vLCAwKTsKKwlpZiAoIXBhZ2UpCisJCXJldHVybiAtRU5PTUVNOworCisJbW92ZV9pbm9kZV90b19wYWdlKHBhZ2UsIGlub2RlKTsKKworCWxvZ2ZzX2dldF93YmxvY2tzKHNiLCBwYWdlLCAxKTsKKwlyZXQgPSBfX2xvZ2ZzX2RlbGV0ZShtYXN0ZXJfaW5vZGUsIHBhZ2UpOworCWxvZ2ZzX3B1dF93YmxvY2tzKHNiLCBwYWdlLCAxKTsKKworCWxvZ2ZzX3B1dF93cml0ZV9wYWdlKHBhZ2UpOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBaT01CSUUgaW5vZGVzIGhhdmUgYWxyZWFkeSBiZWVuIGRlbGV0ZWQgYmVmb3JlIGFuZCBzaG91bGQgcmVtYWluIGRlYWQsCisgKiBpZiBpdCB3ZXJlbid0IGZvciB2YWxpZCBjaGVja2luZy4gIE5vIG5lZWQgdG8ga2lsbCB0aGVtIGFnYWluIGhlcmUuCisgKi8KK3ZvaWQgbG9nZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJc3RydWN0IGxvZ2ZzX2lub2RlICpsaSA9IGxvZ2ZzX2lub2RlKGlub2RlKTsKKworCWlmICghKGxpLT5saV9mbGFncyAmIExPR0ZTX0lGX1pPTUJJRSkpIHsKKwkJbGktPmxpX2ZsYWdzIHw9IExPR0ZTX0lGX1pPTUJJRTsKKwkJaWYgKGlfc2l6ZV9yZWFkKGlub2RlKSA+IDApCisJCQlsb2dmc190cnVuY2F0ZShpbm9kZSwgMCk7CisJCWRvX2RlbGV0ZV9pbm9kZShpbm9kZSk7CisJfQorCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKKwljbGVhcl9pbm9kZShpbm9kZSk7Cit9CisKK3ZvaWQgYnRyZWVfd3JpdGVfYmxvY2soc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jaykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBwYWdlICpwYWdlOworCWludCBlcnIsIGNvb2tpZTsKKworCWlub2RlID0gbG9nZnNfc2FmZV9pZ2V0KGJsb2NrLT5zYiwgYmxvY2stPmlubywgJmNvb2tpZSk7CisJcGFnZSA9IGxvZ2ZzX2dldF93cml0ZV9wYWdlKGlub2RlLCBibG9jay0+Yml4LCBibG9jay0+bGV2ZWwpOworCisJZXJyID0gbG9nZnNfcmVhZHBhZ2Vfbm9sb2NrKHBhZ2UpOworCUJVR19PTihlcnIpOworCUJVR19PTighUGFnZVByaXZhdGUocGFnZSkpOworCUJVR19PTihsb2dmc19ibG9jayhwYWdlKSAhPSBibG9jayk7CisJZXJyID0gX19sb2dmc193cml0ZV9idWYoaW5vZGUsIHBhZ2UsIDApOworCUJVR19PTihlcnIpOworCUJVR19PTihQYWdlUHJpdmF0ZShwYWdlKSB8fCBwYWdlLT5wcml2YXRlKTsKKworCWxvZ2ZzX3B1dF93cml0ZV9wYWdlKHBhZ2UpOworCWxvZ2ZzX3NhZmVfaXB1dChpbm9kZSwgY29va2llKTsKK30KKworLyoqCisgKiBsb2dmc19pbm9kZV93cml0ZSAtIHdyaXRlIGlub2RlIG9yIGRlbnRyeSBvYmplY3RzCisgKgorICogQGlub2RlOgkJcGFyZW50IGlub2RlIChpZmlsZSBvciBkaXJlY3RvcnkpCisgKiBAYnVmOgkJb2JqZWN0IHRvIHdyaXRlIChpbm9kZSBvciBkZW50cnkpCisgKiBAbjoJCQlvYmplY3Qgc2l6ZQorICogQF9wb3M6CQlvYmplY3QgbnVtYmVyIChmaWxlIHBvc2l0aW9uIGluIGJsb2Nrcy9vYmplY3RzKQorICogQGZsYWdzOgkJd3JpdGUgZmxhZ3MKKyAqIEBsb2NrOgkJMCBpZiB3cml0ZSBsb2NrIGlzIGFscmVhZHkgdGFrZW4sIDEgb3RoZXJ3aXNlCisgKiBAc2hhZG93X3RyZWU6CXNoYWRvdyBiZWxvdyB0aGlzIGlub2RlCisgKgorICogRklYTUU6IEFsbCBjYWxsZXIgb2YgdGhpcyBwdXQgYSAyMDAtMzAwIGJ5dGUgdmFyaWFibGUgb24gdGhlIHN0YWNrLAorICogb25seSB0byBjYWxsIGhlcmUgYW5kIGRvIGEgbWVtY3B5IGZyb20gdGhhdCBzdGFjayB2YXJpYWJsZS4gIEEgZ29vZAorICogZXhhbXBsZSBvZiB3YXN0ZWQgcGVyZm9ybWFuY2UgYW5kIHN0YWNrIHNwYWNlLgorICovCitpbnQgbG9nZnNfaW5vZGVfd3JpdGUoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgY291bnQsCisJCWxvZmZfdCBiaXgsIGxvbmcgZmxhZ3MsIHN0cnVjdCBzaGFkb3dfdHJlZSAqc2hhZG93X3RyZWUpCit7CisJbG9mZl90IHBvcyA9IGJpeCA8PCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKKwlpbnQgZXJyOworCXN0cnVjdCBwYWdlICpwYWdlOworCXZvaWQgKnBhZ2VidWY7CisKKwlCVUdfT04ocG9zICYgKExPR0ZTX0JMT0NLU0laRS0xKSk7CisJQlVHX09OKGNvdW50ID4gTE9HRlNfQkxPQ0tTSVpFKTsKKwlwYWdlID0gbG9nZnNfZ2V0X3dyaXRlX3BhZ2UoaW5vZGUsIGJpeCwgMCk7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXBhZ2VidWYgPSBrbWFwX2F0b21pYyhwYWdlLCBLTV9VU0VSMCk7CisJbWVtY3B5KHBhZ2VidWYsIGJ1ZiwgY291bnQpOworCWZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpOworCWt1bm1hcF9hdG9taWMocGFnZWJ1ZiwgS01fVVNFUjApOworCisJaWYgKGlfc2l6ZV9yZWFkKGlub2RlKSA8IHBvcyArIExPR0ZTX0JMT0NLU0laRSkKKwkJaV9zaXplX3dyaXRlKGlub2RlLCBwb3MgKyBMT0dGU19CTE9DS1NJWkUpOworCisJZXJyID0gbG9nZnNfd3JpdGVfYnVmKGlub2RlLCBwYWdlLCBmbGFncyk7CisJbG9nZnNfcHV0X3dyaXRlX3BhZ2UocGFnZSk7CisJcmV0dXJuIGVycjsKK30KKworaW50IGxvZ2ZzX29wZW5fc2VnZmlsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGlub2RlICppbm9kZTsKKworCWlub2RlID0gbG9nZnNfcmVhZF9tZXRhX2lub2RlKHNiLCBMT0dGU19JTk9fU0VHRklMRSk7CisJaWYgKElTX0VSUihpbm9kZSkpCisJCXJldHVybiBQVFJfRVJSKGlub2RlKTsKKwlzdXBlci0+c19zZWdmaWxlX2lub2RlID0gaW5vZGU7CisJcmV0dXJuIDA7Cit9CisKK2ludCBsb2dmc19pbml0X3J3KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlpbnQgbWluX2ZpbGwgPSAzICogc3VwZXItPnNfbm9fYmxvY2tzOworCisJSU5JVF9MSVNUX0hFQUQoJnN1cGVyLT5zX29iamVjdF9hbGlhcyk7CisJbXV0ZXhfaW5pdCgmc3VwZXItPnNfd3JpdGVfbXV0ZXgpOworCXN1cGVyLT5zX2Jsb2NrX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Bvb2wobWluX2ZpbGwsCisJCQlzaXplb2Yoc3RydWN0IGxvZ2ZzX2Jsb2NrKSk7CisJc3VwZXItPnNfc2hhZG93X3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Bvb2wobWluX2ZpbGwsCisJCQlzaXplb2Yoc3RydWN0IGxvZ2ZzX3NoYWRvdykpOworCXJldHVybiAwOworfQorCit2b2lkIGxvZ2ZzX2NsZWFudXBfcncoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCisJZGVzdHJveV9tZXRhX2lub2RlKHN1cGVyLT5zX3NlZ2ZpbGVfaW5vZGUpOworCWlmIChzdXBlci0+c19ibG9ja19wb29sKQorCQltZW1wb29sX2Rlc3Ryb3koc3VwZXItPnNfYmxvY2tfcG9vbCk7CisJaWYgKHN1cGVyLT5zX3NoYWRvd19wb29sKQorCQltZW1wb29sX2Rlc3Ryb3koc3VwZXItPnNfc2hhZG93X3Bvb2wpOworfQpkaWZmIC0tZ2l0IGEvZnMvbG9nZnMvc2VnbWVudC5jIGIvZnMvbG9nZnMvc2VnbWVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMTRmOTkKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9sb2dmcy9zZWdtZW50LmMKQEAgLTAsMCArMSw5MjcgQEAKKy8qCisgKiBmcy9sb2dmcy9zZWdtZW50LmMJLSBIYW5kbGluZyB0aGUgT2JqZWN0IFN0b3JlCisgKgorICogQXMgc2hvdWxkIGJlIG9idmlvdXMgZm9yIExpbnV4IGtlcm5lbCBjb2RlLCBsaWNlbnNlIGlzIEdQTHYyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDggSm9lcm4gRW5nZWwgPGpvZXJuQGxvZ2ZzLm9yZz4KKyAqCisgKiBPYmplY3Qgc3RvcmUgb3Igb3N0b3JlIG1ha2VzIHVwIHRoZSBjb21wbGV0ZSBkZXZpY2Ugd2l0aCBleGNlcHRpb24gb2YKKyAqIHRoZSBzdXBlcmJsb2NrIGFuZCBqb3VybmFsIGFyZWFzLiAgQXBhcnQgZnJvbSBpdHMgb3duIG1ldGFkYXRhIGl0IHN0b3JlcworICogdGhyZWUga2luZHMgb2Ygb2JqZWN0czogaW5vZGVzLCBkZW50cmllcyBhbmQgYmxvY2tzLCBib3RoIGRhdGEgYW5kIGluZGlyZWN0LgorICovCisjaW5jbHVkZSAibG9nZnMuaCIKKworc3RhdGljIGludCBsb2dmc19tYXJrX3NlZ21lbnRfYmFkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHUzMiBzZWdubykKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBidHJlZV9oZWFkMzIgKmhlYWQgPSAmc3VwZXItPnNfcmVzZXJ2ZWRfc2VnbWVudHM7CisJaW50IGVycjsKKworCWVyciA9IGJ0cmVlX2luc2VydDMyKGhlYWQsIHNlZ25vLCAodm9pZCAqKTEsIEdGUF9OT0ZTKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWxvZ2ZzX3N1cGVyKHNiKS0+c19iYWRfc2VnbWVudHMrKzsKKwkvKiBGSVhNRTogd3JpdGUgdG8gam91cm5hbCAqLworCXJldHVybiAwOworfQorCitpbnQgbG9nZnNfZXJhc2Vfc2VnbWVudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1MzIgc2Vnbm8sIGludCBlbnN1cmVfZXJhc2UpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKworCXN1cGVyLT5zX2dlYysrOworCisJcmV0dXJuIHN1cGVyLT5zX2Rldm9wcy0+ZXJhc2Uoc2IsICh1NjQpc2Vnbm8gPDwgc3VwZXItPnNfc2Vnc2hpZnQsCisJCQlzdXBlci0+c19zZWdzaXplLCBlbnN1cmVfZXJhc2UpOworfQorCitzdGF0aWMgczY0IGxvZ2ZzX2dldF9mcmVlX2J5dGVzKHN0cnVjdCBsb2dmc19hcmVhICphcmVhLCBzaXplX3QgYnl0ZXMpCit7CisJczMyIG9mczsKKworCWxvZ2ZzX29wZW5fYXJlYShhcmVhLCBieXRlcyk7CisKKwlvZnMgPSBhcmVhLT5hX3VzZWRfYnl0ZXM7CisJYXJlYS0+YV91c2VkX2J5dGVzICs9IGJ5dGVzOworCUJVR19PTihhcmVhLT5hX3VzZWRfYnl0ZXMgPj0gbG9nZnNfc3VwZXIoYXJlYS0+YV9zYiktPnNfc2Vnc2l6ZSk7CisKKwlyZXR1cm4gZGV2X29mcyhhcmVhLT5hX3NiLCBhcmVhLT5hX3NlZ25vLCBvZnMpOworfQorCitzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tYXBwaW5nX3BhZ2Uoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgcGdvZmZfdCBpbmRleCwKKwkJaW50IHVzZV9maWxsZXIpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHN1cGVyLT5zX21hcHBpbmdfaW5vZGUtPmlfbWFwcGluZzsKKwlmaWxsZXJfdCAqZmlsbGVyID0gc3VwZXItPnNfZGV2b3BzLT5yZWFkcGFnZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCUJVR19PTihtYXBwaW5nX2dmcF9tYXNrKG1hcHBpbmcpICYgX19HRlBfRlMpOworCWlmICh1c2VfZmlsbGVyKQorCQlwYWdlID0gcmVhZF9jYWNoZV9wYWdlKG1hcHBpbmcsIGluZGV4LCBmaWxsZXIsIHNiKTsKKwllbHNlIHsKKwkJcGFnZSA9IGZpbmRfb3JfY3JlYXRlX3BhZ2UobWFwcGluZywgaW5kZXgsIEdGUF9OT0ZTKTsKKwkJdW5sb2NrX3BhZ2UocGFnZSk7CisJfQorCXJldHVybiBwYWdlOworfQorCit2b2lkIF9fbG9nZnNfYnVmX3dyaXRlKHN0cnVjdCBsb2dmc19hcmVhICphcmVhLCB1NjQgb2ZzLCB2b2lkICpidWYsIHNpemVfdCBsZW4sCisJCWludCB1c2VfZmlsbGVyKQoreworCXBnb2ZmX3QgaW5kZXggPSBvZnMgPj4gUEFHRV9TSElGVDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlsb25nIG9mZnNldCA9IG9mcyAmIChQQUdFX1NJWkUtMSk7CisJbG9uZyBjb3B5bGVuOworCisJLyogT25seSBsb2dmc193YnVmX3JlY292ZXIgbWF5IHVzZSBsZW49PTAgKi8KKwlCVUdfT04oIWxlbiAmJiAhdXNlX2ZpbGxlcik7CisJZG8geworCQljb3B5bGVuID0gbWluKCh1bG9uZylsZW4sIFBBR0VfU0laRSAtIG9mZnNldCk7CisKKwkJcGFnZSA9IGdldF9tYXBwaW5nX3BhZ2UoYXJlYS0+YV9zYiwgaW5kZXgsIHVzZV9maWxsZXIpOworCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJCUJVR19PTighcGFnZSk7IC8qIEZJWE1FOiByZXNlcnZlIGEgcG9vbCAqLworCQltZW1jcHkocGFnZV9hZGRyZXNzKHBhZ2UpICsgb2Zmc2V0LCBidWYsIGNvcHlsZW4pOworCQlTZXRQYWdlUHJpdmF0ZShwYWdlKTsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCisJCWJ1ZiArPSBjb3B5bGVuOworCQlsZW4gLT0gY29weWxlbjsKKwkJb2Zmc2V0ID0gMDsKKwkJaW5kZXgrKzsKKwl9IHdoaWxlIChsZW4pOworfQorCisvKgorICogYmRldl93cml0ZXNlZyB3aWxsIHdyaXRlIGZ1bGwgcGFnZXMuICBNZW1zZXQgdGhlIHRhaWwgdG8gcHJldmVudCBkYXRhIGxlYWtzLgorICovCitzdGF0aWMgdm9pZCBwYWRfd2J1ZihzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSwgaW50IGZpbmFsKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBhcmVhLT5hX3NiOworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdTY0IG9mcyA9IGRldl9vZnMoc2IsIGFyZWEtPmFfc2Vnbm8sIGFyZWEtPmFfdXNlZF9ieXRlcyk7CisJcGdvZmZfdCBpbmRleCA9IG9mcyA+PiBQQUdFX1NISUZUOworCWxvbmcgb2Zmc2V0ID0gb2ZzICYgKFBBR0VfU0laRS0xKTsKKwl1MzIgbGVuID0gUEFHRV9TSVpFIC0gb2Zmc2V0OworCisJaWYgKGxlbiA9PSBQQUdFX1NJWkUpIHsKKwkJLyogVGhlIG1hdGggaW4gdGhpcyBmdW5jdGlvbiBjYW4gc3VyZWx5IHVzZSBzb21lIGxvdmUgKi8KKwkJbGVuID0gMDsKKwl9CisJaWYgKGxlbikgeworCQlCVUdfT04oYXJlYS0+YV91c2VkX2J5dGVzID49IHN1cGVyLT5zX3NlZ3NpemUpOworCisJCXBhZ2UgPSBnZXRfbWFwcGluZ19wYWdlKGFyZWEtPmFfc2IsIGluZGV4LCAwKTsKKwkJQlVHX09OKCFwYWdlKTsgLyogRklYTUU6IHJlc2VydmUgYSBwb29sICovCisJCW1lbXNldChwYWdlX2FkZHJlc3MocGFnZSkgKyBvZmZzZXQsIDB4ZmYsIGxlbik7CisJCVNldFBhZ2VQcml2YXRlKHBhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJfQorCisJaWYgKCFmaW5hbCkKKwkJcmV0dXJuOworCisJYXJlYS0+YV91c2VkX2J5dGVzICs9IGxlbjsKKwlmb3IgKCA7IGFyZWEtPmFfdXNlZF9ieXRlcyA8IHN1cGVyLT5zX3NlZ3NpemU7CisJCQlhcmVhLT5hX3VzZWRfYnl0ZXMgKz0gUEFHRV9TSVpFKSB7CisJCS8qIE1lbXNldCBhbm90aGVyIHBhZ2UgKi8KKwkJaW5kZXgrKzsKKwkJcGFnZSA9IGdldF9tYXBwaW5nX3BhZ2UoYXJlYS0+YV9zYiwgaW5kZXgsIDApOworCQlCVUdfT04oIXBhZ2UpOyAvKiBGSVhNRTogcmVzZXJ2ZSBhIHBvb2wgKi8KKwkJbWVtc2V0KHBhZ2VfYWRkcmVzcyhwYWdlKSwgMHhmZiwgUEFHRV9TSVpFKTsKKwkJU2V0UGFnZVByaXZhdGUocGFnZSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwl9Cit9CisKKy8qCisgKiBXZSBoYXZlIHRvIGJlIGNhcmVmdWwgd2l0aCB0aGUgYWxpYXMgdHJlZS4gIFNpbmNlIGxvb2t1cCBpcyBkb25lIGJ5IGJpeCwKKyAqIGl0IG5lZWRzIHRvIGJlIG5vcm1hbGl6ZWQsIHNvIDE0LCAxNSwgMTYsIGV0Yy4gYWxsIG1hdGNoIHdoZW4gZGVhbGluZyB3aXRoCisgKiBpbmRpcmVjdCBibG9ja3MuICBTbyBhbHdheXMgdXNlIGl0IHRocm91Z2ggYWNjZXNzb3IgZnVuY3Rpb25zLgorICovCitzdGF0aWMgdm9pZCAqYWxpYXNfdHJlZV9sb29rdXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IGlubywgdTY0IGJpeCwKKwkJbGV2ZWxfdCBsZXZlbCkKK3sKKwlzdHJ1Y3QgYnRyZWVfaGVhZDEyOCAqaGVhZCA9ICZsb2dmc19zdXBlcihzYiktPnNfb2JqZWN0X2FsaWFzX3RyZWU7CisJcGdvZmZfdCBpbmRleCA9IGxvZ2ZzX3BhY2tfaW5kZXgoYml4LCBsZXZlbCk7CisKKwlyZXR1cm4gYnRyZWVfbG9va3VwMTI4KGhlYWQsIGlubywgaW5kZXgpOworfQorCitzdGF0aWMgaW50IGFsaWFzX3RyZWVfaW5zZXJ0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBpbm8sIHU2NCBiaXgsCisJCWxldmVsX3QgbGV2ZWwsIHZvaWQgKnZhbCkKK3sKKwlzdHJ1Y3QgYnRyZWVfaGVhZDEyOCAqaGVhZCA9ICZsb2dmc19zdXBlcihzYiktPnNfb2JqZWN0X2FsaWFzX3RyZWU7CisJcGdvZmZfdCBpbmRleCA9IGxvZ2ZzX3BhY2tfaW5kZXgoYml4LCBsZXZlbCk7CisKKwlyZXR1cm4gYnRyZWVfaW5zZXJ0MTI4KGhlYWQsIGlubywgaW5kZXgsIHZhbCwgR0ZQX05PRlMpOworfQorCitzdGF0aWMgaW50IGJ0cmVlX3dyaXRlX2FsaWFzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2ssCisJCXdyaXRlX2FsaWFzX3QgKndyaXRlX29uZV9hbGlhcykKK3sKKwlzdHJ1Y3Qgb2JqZWN0X2FsaWFzX2l0ZW0gKml0ZW07CisJaW50IGVycjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoaXRlbSwgJmJsb2NrLT5pdGVtX2xpc3QsIGxpc3QpIHsKKwkJZXJyID0gd3JpdGVfYWxpYXNfam91cm5hbChzYiwgYmxvY2stPmlubywgYmxvY2stPmJpeCwKKwkJCQlibG9jay0+bGV2ZWwsIGl0ZW0tPmNoaWxkX25vLCBpdGVtLT52YWwpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBnY19sZXZlbF90IGJ0cmVlX2Jsb2NrX2xldmVsKHN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2spCit7CisJcmV0dXJuIGV4cGFuZF9sZXZlbChibG9jay0+aW5vLCBibG9jay0+bGV2ZWwpOworfQorCitzdGF0aWMgc3RydWN0IGxvZ2ZzX2Jsb2NrX29wcyBidHJlZV9ibG9ja19vcHMgPSB7CisJLndyaXRlX2Jsb2NrCT0gYnRyZWVfd3JpdGVfYmxvY2ssCisJLmJsb2NrX2xldmVsCT0gYnRyZWVfYmxvY2tfbGV2ZWwsCisJLmZyZWVfYmxvY2sJPSBfX2ZyZWVfYmxvY2ssCisJLndyaXRlX2FsaWFzCT0gYnRyZWVfd3JpdGVfYWxpYXMsCit9OworCitpbnQgbG9nZnNfbG9hZF9vYmplY3RfYWxpYXNlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQlzdHJ1Y3QgbG9nZnNfb2JqX2FsaWFzICpvYSwgaW50IGNvdW50KQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jazsKKwlzdHJ1Y3Qgb2JqZWN0X2FsaWFzX2l0ZW0gKml0ZW07CisJdTY0IGlubywgYml4OworCWxldmVsX3QgbGV2ZWw7CisJaW50IGksIGVycjsKKworCXN1cGVyLT5zX2ZsYWdzIHw9IExPR0ZTX1NCX0ZMQUdfT0JKX0FMSUFTOworCWNvdW50IC89IHNpemVvZigqb2EpOworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCWl0ZW0gPSBtZW1wb29sX2FsbG9jKHN1cGVyLT5zX2FsaWFzX3Bvb2wsIEdGUF9OT0ZTKTsKKwkJaWYgKCFpdGVtKQorCQkJcmV0dXJuIC1FTk9NRU07CisJCW1lbXNldChpdGVtLCAwLCBzaXplb2YoKml0ZW0pKTsKKworCQlzdXBlci0+c19ub19vYmplY3RfYWxpYXNlcysrOworCQlpdGVtLT52YWwgPSBvYVtpXS52YWw7CisJCWl0ZW0tPmNoaWxkX25vID0gYmUxNl90b19jcHUob2FbaV0uY2hpbGRfbm8pOworCisJCWlubyA9IGJlNjRfdG9fY3B1KG9hW2ldLmlubyk7CisJCWJpeCA9IGJlNjRfdG9fY3B1KG9hW2ldLmJpeCk7CisJCWxldmVsID0gTEVWRUwob2FbaV0ubGV2ZWwpOworCisJCWxvZ19hbGlhc2VzKCJsb2dmc19sb2FkX29iamVjdF9hbGlhc2VzKCVsbHgsICVsbHgsICV4LCAleCkgJWxseFxuIiwKKwkJCQlpbm8sIGJpeCwgbGV2ZWwsIGl0ZW0tPmNoaWxkX25vLAorCQkJCWJlNjRfdG9fY3B1KGl0ZW0tPnZhbCkpOworCQlibG9jayA9IGFsaWFzX3RyZWVfbG9va3VwKHNiLCBpbm8sIGJpeCwgbGV2ZWwpOworCQlpZiAoIWJsb2NrKSB7CisJCQlibG9jayA9IF9fYWxsb2NfYmxvY2soc2IsIGlubywgYml4LCBsZXZlbCk7CisJCQlibG9jay0+b3BzID0gJmJ0cmVlX2Jsb2NrX29wczsKKwkJCWVyciA9IGFsaWFzX3RyZWVfaW5zZXJ0KHNiLCBpbm8sIGJpeCwgbGV2ZWwsIGJsb2NrKTsKKwkJCUJVR19PTihlcnIpOyAvKiBtZW1wb29sIGVtcHR5ICovCisJCX0KKwkJaWYgKHRlc3RfYW5kX3NldF9iaXQoaXRlbS0+Y2hpbGRfbm8sIGJsb2NrLT5hbGlhc19tYXApKSB7CisJCQlwcmludGsoS0VSTl9FUlIiTG9nRlM6IEFsaWFzIGNvbGxpc2lvbiBkZXRlY3RlZFxuIik7CisJCQlyZXR1cm4gLUVJTzsKKwkJfQorCQlsaXN0X21vdmVfdGFpbCgmYmxvY2stPmFsaWFzX2xpc3QsICZzdXBlci0+c19vYmplY3RfYWxpYXMpOworCQlsaXN0X2FkZCgmaXRlbS0+bGlzdCwgJmJsb2NrLT5pdGVtX2xpc3QpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQga2lsbF9hbGlhcyh2b2lkICpfYmxvY2ssIHVuc2lnbmVkIGxvbmcgaWdub3JlMCwKKwkJdTY0IGlnbm9yZTEsIHU2NCBpZ25vcmUyLCBzaXplX3QgaWdub3JlMykKK3sKKwlzdHJ1Y3QgbG9nZnNfYmxvY2sgKmJsb2NrID0gX2Jsb2NrOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBibG9jay0+c2I7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3Qgb2JqZWN0X2FsaWFzX2l0ZW0gKml0ZW07CisKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmJsb2NrLT5pdGVtX2xpc3QpKSB7CisJCWl0ZW0gPSBsaXN0X2VudHJ5KGJsb2NrLT5pdGVtX2xpc3QubmV4dCwgdHlwZW9mKCppdGVtKSwgbGlzdCk7CisJCWxpc3RfZGVsKCZpdGVtLT5saXN0KTsKKwkJbWVtcG9vbF9mcmVlKGl0ZW0sIHN1cGVyLT5zX2FsaWFzX3Bvb2wpOworCX0KKwlibG9jay0+b3BzLT5mcmVlX2Jsb2NrKHNiLCBibG9jayk7Cit9CisKK3N0YXRpYyBpbnQgb2JqX3R5cGUoc3RydWN0IGlub2RlICppbm9kZSwgbGV2ZWxfdCBsZXZlbCkKK3sKKwlpZiAobGV2ZWwgPT0gMCkgeworCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkJCXJldHVybiBPQkpfREVOVFJZOworCQlpZiAoaW5vZGUtPmlfaW5vID09IExPR0ZTX0lOT19NQVNURVIpCisJCQlyZXR1cm4gT0JKX0lOT0RFOworCX0KKwlyZXR1cm4gT0JKX0JMT0NLOworfQorCitzdGF0aWMgaW50IG9ial9sZW4oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG9ial90eXBlKQoreworCXN3aXRjaCAob2JqX3R5cGUpIHsKKwljYXNlIE9CSl9ERU5UUlk6CisJCXJldHVybiBzaXplb2Yoc3RydWN0IGxvZ2ZzX2Rpc2tfZGVudHJ5KTsKKwljYXNlIE9CSl9JTk9ERToKKwkJcmV0dXJuIHNpemVvZihzdHJ1Y3QgbG9nZnNfZGlza19pbm9kZSk7CisJY2FzZSBPQkpfQkxPQ0s6CisJCXJldHVybiBzYi0+c19ibG9ja3NpemU7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorfQorCitzdGF0aWMgaW50IF9fbG9nZnNfc2VnbWVudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsCisJCXN0cnVjdCBsb2dmc19zaGFkb3cgKnNoYWRvdywgaW50IHR5cGUsIGludCBsZW4sIGludCBjb21wcikKK3sKKwlzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJczY0IG9mczsKKwlzdHJ1Y3QgbG9nZnNfb2JqZWN0X2hlYWRlciBoOworCWludCBhY2NfbGVuOworCisJaWYgKHNoYWRvdy0+Z2NfbGV2ZWwgPT0gMCkKKwkJYWNjX2xlbiA9IGxlbjsKKwllbHNlCisJCWFjY19sZW4gPSBvYmpfbGVuKHNiLCB0eXBlKTsKKworCWFyZWEgPSBnZXRfYXJlYShzYiwgc2hhZG93LT5nY19sZXZlbCk7CisJb2ZzID0gbG9nZnNfZ2V0X2ZyZWVfYnl0ZXMoYXJlYSwgbGVuICsgTE9HRlNfT0JKRUNUX0hFQURFUlNJWkUpOworCUxPR0ZTX0JVR19PTihvZnMgPD0gMCwgc2IpOworCS8qCisJICogT3JkZXIgaXMgaW1wb3J0YW50LiAgbG9nZnNfZ2V0X2ZyZWVfYnl0ZXMoKSwgYnkgbW9kaWZ5aW5nIHRoZQorCSAqIHNlZ21lbnQgZmlsZSwgbWF5IG1vZGlmeSB0aGUgY29udGVudCBvZiB0aGUgdmVyeSBwYWdlIHdlJ3JlIGFib3V0CisJICogdG8gd3JpdGUgbm93LiAgV2hpY2ggaXMgZmluZSwgYXMgbG9uZyBhcyB0aGUgY2FsY3VsYXRlZCBjcmMgYW5kCisJICogd3JpdHRlbiBkYXRhIHN0aWxsIG1hdGNoLiAgU28gZG8gdGhlIG1vZGlmaWNhdGlvbnMgX2JlZm9yZV8KKwkgKiBjYWxjdWxhdGluZyB0aGUgY3JjLgorCSAqLworCisJaC5sZW4JPSBjcHVfdG9fYmUxNihsZW4pOworCWgudHlwZQk9IHR5cGU7CisJaC5jb21wcgk9IGNvbXByOworCWguaW5vCT0gY3B1X3RvX2JlNjQoaW5vZGUtPmlfaW5vKTsKKwloLmJpeAk9IGNwdV90b19iZTY0KHNoYWRvdy0+Yml4KTsKKwloLmNyYwk9IGxvZ2ZzX2NyYzMyKCZoLCBzaXplb2YoaCkgLSA0LCA0KTsKKwloLmRhdGFfY3JjID0gbG9nZnNfY3JjMzIoYnVmLCBsZW4sIDApOworCisJbG9nZnNfYnVmX3dyaXRlKGFyZWEsIG9mcywgJmgsIHNpemVvZihoKSk7CisJbG9nZnNfYnVmX3dyaXRlKGFyZWEsIG9mcyArIExPR0ZTX09CSkVDVF9IRUFERVJTSVpFLCBidWYsIGxlbik7CisKKwlzaGFkb3ctPm5ld19vZnMgPSBvZnM7CisJc2hhZG93LT5uZXdfbGVuID0gYWNjX2xlbiArIExPR0ZTX09CSkVDVF9IRUFERVJTSVpFOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzNjQgbG9nZnNfc2VnbWVudF93cml0ZV9jb21wcmVzcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsCisJCXN0cnVjdCBsb2dmc19zaGFkb3cgKnNoYWRvdywgaW50IHR5cGUsIGludCBsZW4pCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXZvaWQgKmNvbXByZXNzb3JfYnVmID0gbG9nZnNfc3VwZXIoc2IpLT5zX2NvbXByZXNzZWRfamU7CisJc3NpemVfdCBjb21wcl9sZW47CisJaW50IHJldDsKKworCW11dGV4X2xvY2soJmxvZ2ZzX3N1cGVyKHNiKS0+c19qb3VybmFsX211dGV4KTsKKwljb21wcl9sZW4gPSBsb2dmc19jb21wcmVzcyhidWYsIGNvbXByZXNzb3JfYnVmLCBsZW4sIGxlbik7CisKKwlpZiAoY29tcHJfbGVuID49IDApIHsKKwkJcmV0ID0gX19sb2dmc19zZWdtZW50X3dyaXRlKGlub2RlLCBjb21wcmVzc29yX2J1Ziwgc2hhZG93LAorCQkJCXR5cGUsIGNvbXByX2xlbiwgQ09NUFJfWkxJQik7CisJfSBlbHNlIHsKKwkJcmV0ID0gX19sb2dmc19zZWdtZW50X3dyaXRlKGlub2RlLCBidWYsIHNoYWRvdywgdHlwZSwgbGVuLAorCQkJCUNPTVBSX05PTkUpOworCX0KKwltdXRleF91bmxvY2soJmxvZ2ZzX3N1cGVyKHNiKS0+c19qb3VybmFsX211dGV4KTsKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIGxvZ2ZzX3NlZ21lbnRfd3JpdGUgLSB3cml0ZSBkYXRhIGJsb2NrIHRvIG9iamVjdCBzdG9yZQorICogQGlub2RlOgkJaW5vZGUgY29udGFpbmluZyBkYXRhCisgKgorICogUmV0dXJucyBhbiBlcnJubyBvciB6ZXJvLgorICovCitpbnQgbG9nZnNfc2VnbWVudF93cml0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJc3RydWN0IGxvZ2ZzX3NoYWRvdyAqc2hhZG93KQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCWludCBkb19jb21wcmVzcywgdHlwZSwgbGVuOworCWludCByZXQ7CisJdm9pZCAqYnVmOworCisJc3VwZXItPnNfZmxhZ3MgfD0gTE9HRlNfU0JfRkxBR19ESVJUWTsKKwlCVUdfT04oc3VwZXItPnNfZmxhZ3MgJiBMT0dGU19TQl9GTEFHX1NIVVRET1dOKTsKKwlkb19jb21wcmVzcyA9IGxvZ2ZzX2lub2RlKGlub2RlKS0+bGlfZmxhZ3MgJiBMT0dGU19JRl9DT01QUkVTU0VEOworCWlmIChzaGFkb3ctPmdjX2xldmVsICE9IDApIHsKKwkJLyogdGVtcG9yYXJpbHkgZGlzYWJsZSBjb21wcmVzc2lvbiBmb3IgaW5kaXJlY3QgYmxvY2tzICovCisJCWRvX2NvbXByZXNzID0gMDsKKwl9CisKKwl0eXBlID0gb2JqX3R5cGUoaW5vZGUsIHNocmlua19sZXZlbChzaGFkb3ctPmdjX2xldmVsKSk7CisJbGVuID0gb2JqX2xlbihzYiwgdHlwZSk7CisJYnVmID0ga21hcChwYWdlKTsKKwlpZiAoZG9fY29tcHJlc3MpCisJCXJldCA9IGxvZ2ZzX3NlZ21lbnRfd3JpdGVfY29tcHJlc3MoaW5vZGUsIGJ1Ziwgc2hhZG93LCB0eXBlLAorCQkJCWxlbik7CisJZWxzZQorCQlyZXQgPSBfX2xvZ2ZzX3NlZ21lbnRfd3JpdGUoaW5vZGUsIGJ1Ziwgc2hhZG93LCB0eXBlLCBsZW4sCisJCQkJQ09NUFJfTk9ORSk7CisJa3VubWFwKHBhZ2UpOworCisJbG9nX3NlZ21lbnQoImxvZ2ZzX3NlZ21lbnRfd3JpdGUoJWxseCwgJWxseCwgJXgpICVsbHgtPiVsbHggJXgtPiV4XG4iLAorCQkJc2hhZG93LT5pbm8sIHNoYWRvdy0+Yml4LCBzaGFkb3ctPmdjX2xldmVsLAorCQkJc2hhZG93LT5vbGRfb2ZzLCBzaGFkb3ctPm5ld19vZnMsCisJCQlzaGFkb3ctPm9sZF9sZW4sIHNoYWRvdy0+bmV3X2xlbik7CisJLyogdGhpcyBCVUdfT04gZGlkIGNhdGNoIGEgbG9ja2luZyBidWcuICB1c2VmdWwgKi8KKwlCVUdfT04oIShzaGFkb3ctPm5ld19vZnMgJiAoc3VwZXItPnNfc2Vnc2l6ZSAtIDEpKSk7CisJcmV0dXJuIHJldDsKK30KKworaW50IHdidWZfcmVhZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1NjQgb2ZzLCBzaXplX3QgbGVuLCB2b2lkICpidWYpCit7CisJcGdvZmZfdCBpbmRleCA9IG9mcyA+PiBQQUdFX1NISUZUOworCXN0cnVjdCBwYWdlICpwYWdlOworCWxvbmcgb2Zmc2V0ID0gb2ZzICYgKFBBR0VfU0laRS0xKTsKKwlsb25nIGNvcHlsZW47CisKKwl3aGlsZSAobGVuKSB7CisJCWNvcHlsZW4gPSBtaW4oKHVsb25nKWxlbiwgUEFHRV9TSVpFIC0gb2Zmc2V0KTsKKworCQlwYWdlID0gZ2V0X21hcHBpbmdfcGFnZShzYiwgaW5kZXgsIDEpOworCQlpZiAoSVNfRVJSKHBhZ2UpKQorCQkJcmV0dXJuIFBUUl9FUlIocGFnZSk7CisJCW1lbWNweShidWYsIHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldCwgY29weWxlbik7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKworCQlidWYgKz0gY29weWxlbjsKKwkJbGVuIC09IGNvcHlsZW47CisJCW9mZnNldCA9IDA7CisJCWluZGV4Kys7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogVGhlICJwb3NpdGlvbiIgb2YgaW5kaXJlY3QgYmxvY2tzIGlzIGFtYmlndW91cy4gIEl0IGNhbiBiZSB0aGUgcG9zaXRpb24KKyAqIG9mIGFueSBkYXRhIGJsb2NrIHNvbWV3aGVyZSBiZWhpbmQgdGhpcyBpbmRpcmVjdCBibG9jay4gIFNvIHdlIG5lZWQgdG8KKyAqIG5vcm1hbGl6ZSB0aGUgcG9zaXRpb25zIHRocm91Z2ggbG9nZnNfYmxvY2tfbWFzaygpIGJlZm9yZSBjb21wYXJpbmcuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfcG9zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBwb3MxLCB1NjQgcG9zMiwgbGV2ZWxfdCBsZXZlbCkKK3sKKwlyZXR1cm4JKHBvczEgJiBsb2dmc19ibG9ja19tYXNrKHNiLCBsZXZlbCkpICE9CisJCShwb3MyICYgbG9nZnNfYmxvY2tfbWFzayhzYiwgbGV2ZWwpKTsKK30KKworI2lmIDAKK3N0YXRpYyBpbnQgcmVhZF9zZWdfaGVhZGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCBvZnMsCisJCXN0cnVjdCBsb2dmc19zZWdtZW50X2hlYWRlciAqc2gpCit7CisJX19iZTMyIGNyYzsKKwlpbnQgZXJyOworCisJZXJyID0gd2J1Zl9yZWFkKHNiLCBvZnMsIHNpemVvZigqc2gpLCBzaCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwljcmMgPSBsb2dmc19jcmMzMihzaCwgc2l6ZW9mKCpzaCksIDQpOworCWlmIChjcmMgIT0gc2gtPmNyYykgeworCQlwcmludGsoS0VSTl9FUlIiTE9HRlM6IGhlYWRlciBjcmMgZXJyb3IgYXQgJWxseDogZXhwZWN0ZWQgJXgsICIKKwkJCQkiZ290ICV4XG4iLCBvZnMsIGJlMzJfdG9fY3B1KHNoLT5jcmMpLAorCQkJCWJlMzJfdG9fY3B1KGNyYykpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCByZWFkX29ial9oZWFkZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTY0IG9mcywKKwkJc3RydWN0IGxvZ2ZzX29iamVjdF9oZWFkZXIgKm9oKQoreworCV9fYmUzMiBjcmM7CisJaW50IGVycjsKKworCWVyciA9IHdidWZfcmVhZChzYiwgb2ZzLCBzaXplb2YoKm9oKSwgb2gpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJY3JjID0gbG9nZnNfY3JjMzIob2gsIHNpemVvZigqb2gpIC0gNCwgNCk7CisJaWYgKGNyYyAhPSBvaC0+Y3JjKSB7CisJCXByaW50ayhLRVJOX0VSUiJMT0dGUzogaGVhZGVyIGNyYyBlcnJvciBhdCAlbGx4OiBleHBlY3RlZCAleCwgIgorCQkJCSJnb3QgJXhcbiIsIG9mcywgYmUzMl90b19jcHUob2gtPmNyYyksCisJCQkJYmUzMl90b19jcHUoY3JjKSk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbW92ZV9idHJlZV90b19wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLAorCQlfX2JlNjQgKmRhdGEpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGJ0cmVlX2hlYWQxMjggKmhlYWQgPSAmc3VwZXItPnNfb2JqZWN0X2FsaWFzX3RyZWU7CisJc3RydWN0IGxvZ2ZzX2Jsb2NrICpibG9jazsKKwlzdHJ1Y3Qgb2JqZWN0X2FsaWFzX2l0ZW0gKml0ZW0sICpuZXh0OworCisJaWYgKCEoc3VwZXItPnNfZmxhZ3MgJiBMT0dGU19TQl9GTEFHX09CSl9BTElBUykpCisJCXJldHVybjsKKworCWJsb2NrID0gYnRyZWVfcmVtb3ZlMTI4KGhlYWQsIGlub2RlLT5pX2lubywgcGFnZS0+aW5kZXgpOworCWlmICghYmxvY2spCisJCXJldHVybjsKKworCWxvZ19ibG9ja21vdmUoIm1vdmVfYnRyZWVfdG9fcGFnZSglbGx4LCAlbGx4LCAleClcbiIsCisJCQlibG9jay0+aW5vLCBibG9jay0+Yml4LCBibG9jay0+bGV2ZWwpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpdGVtLCBuZXh0LCAmYmxvY2stPml0ZW1fbGlzdCwgbGlzdCkgeworCQlkYXRhW2l0ZW0tPmNoaWxkX25vXSA9IGl0ZW0tPnZhbDsKKwkJbGlzdF9kZWwoJml0ZW0tPmxpc3QpOworCQltZW1wb29sX2ZyZWUoaXRlbSwgc3VwZXItPnNfYWxpYXNfcG9vbCk7CisJfQorCWJsb2NrLT5wYWdlID0gcGFnZTsKKwlTZXRQYWdlUHJpdmF0ZShwYWdlKTsKKwlwYWdlLT5wcml2YXRlID0gKHVuc2lnbmVkIGxvbmcpYmxvY2s7CisJYmxvY2stPm9wcyA9ICZpbmRpcmVjdF9ibG9ja19vcHM7CisJaW5pdGlhbGl6ZV9ibG9ja19jb3VudGVycyhwYWdlLCBibG9jaywgZGF0YSwgMCk7Cit9CisKKy8qCisgKiBUaGlzIHNpbGVuY2VzIGEgZmFsc2UsIHlldCBhbm5veWluZyBnY2Mgd2FybmluZy4gIEkgaGF0ZSBpdCB3aGVuIG15IGVkaXRvcgorICoganVtcHMgaW50byBiaXRvcHMuaCBlYWNoIHRpbWUgSSByZWNvbXBpbGUgdGhpcyBmaWxlLgorICogVE9ETzogQ29tcGxhaW4gdG8gZ2NjIGZvbGtzIGFib3V0IHRoaXMgYW5kIHVwZ3JhZGUgY29tcGlsZXIuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGZuYihjb25zdCB1bnNpZ25lZCBsb25nICphZGRyLAorCQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXJldHVybiBmaW5kX25leHRfYml0KGFkZHIsIHNpemUsIG9mZnNldCk7Cit9CisKK3ZvaWQgbW92ZV9wYWdlX3RvX2J0cmVlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXN0cnVjdCBsb2dmc19ibG9jayAqYmxvY2sgPSBsb2dmc19ibG9jayhwYWdlKTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gYmxvY2stPnNiOworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IG9iamVjdF9hbGlhc19pdGVtICppdGVtOworCXVuc2lnbmVkIGxvbmcgcG9zOworCV9fYmU2NCAqY2hpbGQ7CisJaW50IGVycjsKKworCWlmIChzdXBlci0+c19mbGFncyAmIExPR0ZTX1NCX0ZMQUdfU0hVVERPV04pIHsKKwkJYmxvY2stPm9wcy0+ZnJlZV9ibG9jayhzYiwgYmxvY2spOworCQlyZXR1cm47CisJfQorCWxvZ19ibG9ja21vdmUoIm1vdmVfcGFnZV90b19idHJlZSglbGx4LCAlbGx4LCAleClcbiIsCisJCQlibG9jay0+aW5vLCBibG9jay0+Yml4LCBibG9jay0+bGV2ZWwpOworCXN1cGVyLT5zX2ZsYWdzIHw9IExPR0ZTX1NCX0ZMQUdfT0JKX0FMSUFTOworCisJZm9yIChwb3MgPSAwOyA7IHBvcysrKSB7CisJCXBvcyA9IGZuYihibG9jay0+YWxpYXNfbWFwLCBMT0dGU19CTE9DS19GQUNUT1IsIHBvcyk7CisJCWlmIChwb3MgPj0gTE9HRlNfQkxPQ0tfRkFDVE9SKQorCQkJYnJlYWs7CisKKwkJaXRlbSA9IG1lbXBvb2xfYWxsb2Moc3VwZXItPnNfYWxpYXNfcG9vbCwgR0ZQX05PRlMpOworCQlCVUdfT04oIWl0ZW0pOyAvKiBtZW1wb29sIGVtcHR5ICovCisJCW1lbXNldChpdGVtLCAwLCBzaXplb2YoKml0ZW0pKTsKKworCQljaGlsZCA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX1VTRVIwKTsKKwkJaXRlbS0+dmFsID0gY2hpbGRbcG9zXTsKKwkJa3VubWFwX2F0b21pYyhjaGlsZCwgS01fVVNFUjApOworCQlpdGVtLT5jaGlsZF9ubyA9IHBvczsKKwkJbGlzdF9hZGQoJml0ZW0tPmxpc3QsICZibG9jay0+aXRlbV9saXN0KTsKKwl9CisJYmxvY2stPnBhZ2UgPSBOVUxMOworCUNsZWFyUGFnZVByaXZhdGUocGFnZSk7CisJcGFnZS0+cHJpdmF0ZSA9IDA7CisJYmxvY2stPm9wcyA9ICZidHJlZV9ibG9ja19vcHM7CisJZXJyID0gYWxpYXNfdHJlZV9pbnNlcnQoYmxvY2stPnNiLCBibG9jay0+aW5vLCBibG9jay0+Yml4LCBibG9jay0+bGV2ZWwsCisJCQlibG9jayk7CisJQlVHX09OKGVycik7IC8qIG1lbXBvb2wgZW1wdHkgKi8KKwlDbGVhclBhZ2VVcHRvZGF0ZShwYWdlKTsKK30KKworc3RhdGljIGludCBfX2xvZ2ZzX3NlZ21lbnRfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB2b2lkICpidWYsCisJCXU2NCBvZnMsIHU2NCBiaXgsIGxldmVsX3QgbGV2ZWwpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXZvaWQgKmNvbXByZXNzb3JfYnVmID0gbG9nZnNfc3VwZXIoc2IpLT5zX2NvbXByZXNzZWRfamU7CisJc3RydWN0IGxvZ2ZzX29iamVjdF9oZWFkZXIgb2g7CisJX19iZTMyIGNyYzsKKwl1MTYgbGVuOworCWludCBlcnIsIGJsb2NrX2xlbjsKKworCWJsb2NrX2xlbiA9IG9ial9sZW4oc2IsIG9ial90eXBlKGlub2RlLCBsZXZlbCkpOworCWVyciA9IHJlYWRfb2JqX2hlYWRlcihzYiwgb2ZzLCAmb2gpOworCWlmIChlcnIpCisJCWdvdG8gb3V0X2VycjsKKworCWVyciA9IC1FSU87CisJaWYgKGJlNjRfdG9fY3B1KG9oLmlubykgIT0gaW5vZGUtPmlfaW5vCisJCQl8fCBjaGVja19wb3Moc2IsIGJlNjRfdG9fY3B1KG9oLmJpeCksIGJpeCwgbGV2ZWwpKSB7CisJCXByaW50ayhLRVJOX0VSUiJMT0dGUzogKGlubywgYml4KSBkb24ndCBtYXRjaCBhdCAlbGx4OiAiCisJCQkJImV4cGVjdGVkICglbHgsICVsbHgpLCBnb3QgKCVsbHgsICVsbHgpXG4iLAorCQkJCW9mcywgaW5vZGUtPmlfaW5vLCBiaXgsCisJCQkJYmU2NF90b19jcHUob2guaW5vKSwgYmU2NF90b19jcHUob2guYml4KSk7CisJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlsZW4gPSBiZTE2X3RvX2NwdShvaC5sZW4pOworCisJc3dpdGNoIChvaC5jb21wcikgeworCWNhc2UgQ09NUFJfTk9ORToKKwkJZXJyID0gd2J1Zl9yZWFkKHNiLCBvZnMgKyBMT0dGU19PQkpFQ1RfSEVBREVSU0laRSwgbGVuLCBidWYpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXRfZXJyOworCQljcmMgPSBsb2dmc19jcmMzMihidWYsIGxlbiwgMCk7CisJCWlmIChjcmMgIT0gb2guZGF0YV9jcmMpIHsKKwkJCXByaW50ayhLRVJOX0VSUiJMT0dGUzogdW5jb21wcmVzc2VkIGRhdGEgY3JjIGVycm9yIGF0ICIKKwkJCQkJIiVsbHg6IGV4cGVjdGVkICV4LCBnb3QgJXhcbiIsIG9mcywKKwkJCQkJYmUzMl90b19jcHUob2guZGF0YV9jcmMpLAorCQkJCQliZTMyX3RvX2NwdShjcmMpKTsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCQlicmVhazsKKwljYXNlIENPTVBSX1pMSUI6CisJCW11dGV4X2xvY2soJmxvZ2ZzX3N1cGVyKHNiKS0+c19qb3VybmFsX211dGV4KTsKKwkJZXJyID0gd2J1Zl9yZWFkKHNiLCBvZnMgKyBMT0dGU19PQkpFQ1RfSEVBREVSU0laRSwgbGVuLAorCQkJCWNvbXByZXNzb3JfYnVmKTsKKwkJaWYgKGVycikgeworCQkJbXV0ZXhfdW5sb2NrKCZsb2dmc19zdXBlcihzYiktPnNfam91cm5hbF9tdXRleCk7CisJCQlnb3RvIG91dF9lcnI7CisJCX0KKwkJY3JjID0gbG9nZnNfY3JjMzIoY29tcHJlc3Nvcl9idWYsIGxlbiwgMCk7CisJCWlmIChjcmMgIT0gb2guZGF0YV9jcmMpIHsKKwkJCXByaW50ayhLRVJOX0VSUiJMT0dGUzogY29tcHJlc3NlZCBkYXRhIGNyYyBlcnJvciBhdCAiCisJCQkJCSIlbGx4OiBleHBlY3RlZCAleCwgZ290ICV4XG4iLCBvZnMsCisJCQkJCWJlMzJfdG9fY3B1KG9oLmRhdGFfY3JjKSwKKwkJCQkJYmUzMl90b19jcHUoY3JjKSk7CisJCQltdXRleF91bmxvY2soJmxvZ2ZzX3N1cGVyKHNiKS0+c19qb3VybmFsX211dGV4KTsKKwkJCWdvdG8gb3V0X2VycjsKKwkJfQorCQllcnIgPSBsb2dmc191bmNvbXByZXNzKGNvbXByZXNzb3JfYnVmLCBidWYsIGxlbiwgYmxvY2tfbGVuKTsKKwkJbXV0ZXhfdW5sb2NrKCZsb2dmc19zdXBlcihzYiktPnNfam91cm5hbF9tdXRleCk7CisJCWlmIChlcnIpIHsKKwkJCXByaW50ayhLRVJOX0VSUiJMT0dGUzogdW5jb21wcmVzcyBlcnJvciBhdCAlbGx4XG4iLCBvZnMpOworCQkJZ290byBvdXRfZXJyOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUxPR0ZTX0JVRyhzYik7CisJCWVyciA9IC1FSU87CisJCWdvdG8gb3V0X2VycjsKKwl9CisJcmV0dXJuIDA7CisKK291dF9lcnI6CisJbG9nZnNfc2V0X3JvKHNiKTsKKwlwcmludGsoS0VSTl9FUlIiTE9HRlM6IGRldmljZSBpcyByZWFkLW9ubHkgbm93XG4iKTsKKwlMT0dGU19CVUcoc2IpOworCXJldHVybiBlcnI7Cit9CisKKy8qKgorICogbG9nZnNfc2VnbWVudF9yZWFkIC0gcmVhZCBkYXRhIGJsb2NrIGZyb20gb2JqZWN0IHN0b3JlCisgKiBAaW5vZGU6CQlpbm9kZSBjb250YWluaW5nIGRhdGEKKyAqIEBidWY6CQlkYXRhIGJ1ZmZlcgorICogQG9mczoJCXBoeXNpY2FsIGRhdGEgb2Zmc2V0CisgKiBAYml4OgkJYmxvY2sgaW5kZXgKKyAqIEBsZXZlbDoJCWJsb2NrIGxldmVsCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSBlcnJuby4KKyAqLworaW50IGxvZ2ZzX3NlZ21lbnRfcmVhZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJdTY0IG9mcywgdTY0IGJpeCwgbGV2ZWxfdCBsZXZlbCkKK3sKKwlpbnQgZXJyOworCXZvaWQgKmJ1ZjsKKworCWlmIChQYWdlVXB0b2RhdGUocGFnZSkpCisJCXJldHVybiAwOworCisJb2ZzICY9IH5MT0dGU19GVUxMWV9QT1BVTEFURUQ7CisKKwlidWYgPSBrbWFwKHBhZ2UpOworCWVyciA9IF9fbG9nZnNfc2VnbWVudF9yZWFkKGlub2RlLCBidWYsIG9mcywgYml4LCBsZXZlbCk7CisJaWYgKCFlcnIpIHsKKwkJbW92ZV9idHJlZV90b19wYWdlKGlub2RlLCBwYWdlLCBidWYpOworCQlTZXRQYWdlVXB0b2RhdGUocGFnZSk7CisJfQorCWt1bm1hcChwYWdlKTsKKwlsb2dfc2VnbWVudCgibG9nZnNfc2VnbWVudF9yZWFkKCVseCwgJWxseCwgJXgpICVsbHggKCVkKVxuIiwKKwkJCWlub2RlLT5pX2lubywgYml4LCBsZXZlbCwgb2ZzLCBlcnIpOworCXJldHVybiBlcnI7Cit9CisKK2ludCBsb2dmc19zZWdtZW50X2RlbGV0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbG9nZnNfc2hhZG93ICpzaGFkb3cpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX29iamVjdF9oZWFkZXIgaDsKKwl1MTYgbGVuOworCWludCBlcnI7CisKKwlzdXBlci0+c19mbGFncyB8PSBMT0dGU19TQl9GTEFHX0RJUlRZOworCUJVR19PTihzdXBlci0+c19mbGFncyAmIExPR0ZTX1NCX0ZMQUdfU0hVVERPV04pOworCUJVR19PTihzaGFkb3ctPm9sZF9vZnMgJiBMT0dGU19GVUxMWV9QT1BVTEFURUQpOworCWlmICghc2hhZG93LT5vbGRfb2ZzKQorCQlyZXR1cm4gMDsKKworCWxvZ19zZWdtZW50KCJsb2dmc19zZWdtZW50X2RlbGV0ZSglbGx4LCAlbGx4LCAleCkgJWxseC0+JWxseCAleC0+JXhcbiIsCisJCQlzaGFkb3ctPmlubywgc2hhZG93LT5iaXgsIHNoYWRvdy0+Z2NfbGV2ZWwsCisJCQlzaGFkb3ctPm9sZF9vZnMsIHNoYWRvdy0+bmV3X29mcywKKwkJCXNoYWRvdy0+b2xkX2xlbiwgc2hhZG93LT5uZXdfbGVuKTsKKwllcnIgPSByZWFkX29ial9oZWFkZXIoc2IsIHNoYWRvdy0+b2xkX29mcywgJmgpOworCUxPR0ZTX0JVR19PTihlcnIsIHNiKTsKKwlMT0dGU19CVUdfT04oYmU2NF90b19jcHUoaC5pbm8pICE9IGlub2RlLT5pX2lubywgc2IpOworCUxPR0ZTX0JVR19PTihjaGVja19wb3Moc2IsIHNoYWRvdy0+Yml4LCBiZTY0X3RvX2NwdShoLmJpeCksCisJCQkJc2hyaW5rX2xldmVsKHNoYWRvdy0+Z2NfbGV2ZWwpKSwgc2IpOworCisJaWYgKHNoYWRvdy0+Z2NfbGV2ZWwgPT0gMCkKKwkJbGVuID0gYmUxNl90b19jcHUoaC5sZW4pOworCWVsc2UKKwkJbGVuID0gb2JqX2xlbihzYiwgaC50eXBlKTsKKwlzaGFkb3ctPm9sZF9sZW4gPSBsZW4gKyBzaXplb2YoaCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVzZWcoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdTMyIHNlZ25vKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBzdXBlci0+c19tYXBwaW5nX2lub2RlLT5pX21hcHBpbmc7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisJdTY0IG9mcywgc3RhcnQsIGVuZDsKKworCXN0YXJ0ID0gZGV2X29mcyhzYiwgc2Vnbm8sIDApOworCWVuZCA9IGRldl9vZnMoc2IsIHNlZ25vICsgMSwgMCk7CisJZm9yIChvZnMgPSBzdGFydDsgb2ZzIDwgZW5kOyBvZnMgKz0gUEFHRV9TSVpFKSB7CisJCXBhZ2UgPSBmaW5kX2dldF9wYWdlKG1hcHBpbmcsIG9mcyA+PiBQQUdFX1NISUZUKTsKKwkJaWYgKCFwYWdlKQorCQkJY29udGludWU7CisJCUNsZWFyUGFnZVByaXZhdGUocGFnZSk7CisJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKKwl9Cit9CisKK2ludCBsb2dmc19vcGVuX2FyZWEoc3RydWN0IGxvZ2ZzX2FyZWEgKmFyZWEsIHNpemVfdCBieXRlcykKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gYXJlYS0+YV9zYjsKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCWludCBlcnIsIGNsb3NlZCA9IDA7CisKKwlpZiAoYXJlYS0+YV9pc19vcGVuICYmIGFyZWEtPmFfdXNlZF9ieXRlcyArIGJ5dGVzIDw9IHN1cGVyLT5zX3NlZ3NpemUpCisJCXJldHVybiAwOworCisJaWYgKGFyZWEtPmFfaXNfb3BlbikgeworCQl1NjQgb2ZzID0gZGV2X29mcyhzYiwgYXJlYS0+YV9zZWdubywgYXJlYS0+YV93cml0dGVuX2J5dGVzKTsKKwkJdTMyIGxlbiA9IHN1cGVyLT5zX3NlZ3NpemUgLSBhcmVhLT5hX3dyaXR0ZW5fYnl0ZXM7CisKKwkJbG9nX2djKCJsb2dmc19jbG9zZV9hcmVhKCV4KVxuIiwgYXJlYS0+YV9zZWdubyk7CisJCXBhZF93YnVmKGFyZWEsIDEpOworCQlzdXBlci0+c19kZXZvcHMtPndyaXRlc2VnKGFyZWEtPmFfc2IsIG9mcywgbGVuKTsKKwkJZnJlZXNlZyhzYiwgYXJlYS0+YV9zZWdubyk7CisJCWNsb3NlZCA9IDE7CisJfQorCisJYXJlYS0+YV91c2VkX2J5dGVzID0gMDsKKwlhcmVhLT5hX3dyaXR0ZW5fYnl0ZXMgPSAwOworYWdhaW46CisJYXJlYS0+YV9vcHMtPmdldF9mcmVlX3NlZ21lbnQoYXJlYSk7CisJYXJlYS0+YV9vcHMtPmdldF9lcmFzZV9jb3VudChhcmVhKTsKKworCWxvZ19nYygibG9nZnNfb3Blbl9hcmVhKCV4LCAleClcbiIsIGFyZWEtPmFfc2Vnbm8sIGFyZWEtPmFfbGV2ZWwpOworCWVyciA9IGFyZWEtPmFfb3BzLT5lcmFzZV9zZWdtZW50KGFyZWEpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTG9nRlM6IEVycm9yIGVyYXNpbmcgc2VnbWVudCAleFxuIiwKKwkJCQlhcmVhLT5hX3NlZ25vKTsKKwkJbG9nZnNfbWFya19zZWdtZW50X2JhZChzYiwgYXJlYS0+YV9zZWdubyk7CisJCWdvdG8gYWdhaW47CisJfQorCWFyZWEtPmFfaXNfb3BlbiA9IDE7CisJcmV0dXJuIGNsb3NlZDsKK30KKwordm9pZCBsb2dmc19zeW5jX2FyZWEoc3RydWN0IGxvZ2ZzX2FyZWEgKmFyZWEpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGFyZWEtPmFfc2I7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwl1NjQgb2ZzID0gZGV2X29mcyhzYiwgYXJlYS0+YV9zZWdubywgYXJlYS0+YV93cml0dGVuX2J5dGVzKTsKKwl1MzIgbGVuID0gKGFyZWEtPmFfdXNlZF9ieXRlcyAtIGFyZWEtPmFfd3JpdHRlbl9ieXRlcyk7CisKKwlpZiAoc3VwZXItPnNfd3JpdGVzaXplKQorCQlsZW4gJj0gfihzdXBlci0+c193cml0ZXNpemUgLSAxKTsKKwlpZiAobGVuID09IDApCisJCXJldHVybjsKKwlwYWRfd2J1ZihhcmVhLCAwKTsKKwlzdXBlci0+c19kZXZvcHMtPndyaXRlc2VnKHNiLCBvZnMsIGxlbik7CisJYXJlYS0+YV93cml0dGVuX2J5dGVzICs9IGxlbjsKK30KKwordm9pZCBsb2dmc19zeW5jX3NlZ21lbnRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlpbnQgaTsKKworCWZvcl9lYWNoX2FyZWEoaSkKKwkJbG9nZnNfc3luY19hcmVhKHN1cGVyLT5zX2FyZWFbaV0pOworfQorCisvKgorICogUGljayBhIGZyZWUgc2VnbWVudCB0byBiZSB1c2VkIGZvciB0aGlzIGFyZWEuICBFZmZlY3RpdmVseSB0YWtlcyBhCisgKiBjYW5kaWRhdGUgZnJvbSB0aGUgZnJlZSBsaXN0IChub3QgcmVhbGx5IGEgY2FuZGlkYXRlIGFueW1vcmUpLgorICovCitzdGF0aWMgdm9pZCBvc3RvcmVfZ2V0X2ZyZWVfc2VnbWVudChzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSkKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gYXJlYS0+YV9zYjsKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCisJaWYgKHN1cGVyLT5zX2ZyZWVfbGlzdC5jb3VudCA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiJMT0dGUzogcmFuIG91dCBvZiBmcmVlIHNlZ21lbnRzXG4iKTsKKwkJTE9HRlNfQlVHKHNiKTsKKwl9CisKKwlhcmVhLT5hX3NlZ25vID0gZ2V0X2Jlc3RfY2FuZChzYiwgJnN1cGVyLT5zX2ZyZWVfbGlzdCwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkIG9zdG9yZV9nZXRfZXJhc2VfY291bnQoc3RydWN0IGxvZ2ZzX2FyZWEgKmFyZWEpCit7CisJc3RydWN0IGxvZ2ZzX3NlZ21lbnRfZW50cnkgc2U7CisJdTMyIGVjX2xldmVsOworCisJbG9nZnNfZ2V0X3NlZ21lbnRfZW50cnkoYXJlYS0+YV9zYiwgYXJlYS0+YV9zZWdubywgJnNlKTsKKwlCVUdfT04oc2UuZWNfbGV2ZWwgPT0gY3B1X3RvX2JlMzIoQkFEU0VHKSB8fAorCQkJc2UudmFsaWQgPT0gY3B1X3RvX2JlMzIoUkVTRVJWRUQpKTsKKworCWVjX2xldmVsID0gYmUzMl90b19jcHUoc2UuZWNfbGV2ZWwpOworCWFyZWEtPmFfZXJhc2VfY291bnQgPSAoZWNfbGV2ZWwgPj4gNCkgKyAxOworfQorCitzdGF0aWMgaW50IG9zdG9yZV9lcmFzZV9zZWdtZW50KHN0cnVjdCBsb2dmc19hcmVhICphcmVhKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBhcmVhLT5hX3NiOworCXN0cnVjdCBsb2dmc19zZWdtZW50X2hlYWRlciBzaDsKKwl1NjQgb2ZzOworCWludCBlcnI7CisKKwllcnIgPSBsb2dmc19lcmFzZV9zZWdtZW50KHNiLCBhcmVhLT5hX3NlZ25vLCAwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJc2gucGFkID0gMDsKKwlzaC50eXBlID0gU0VHX09TVE9SRTsKKwlzaC5sZXZlbCA9IChfX2ZvcmNlIHU4KWFyZWEtPmFfbGV2ZWw7CisJc2guc2Vnbm8gPSBjcHVfdG9fYmUzMihhcmVhLT5hX3NlZ25vKTsKKwlzaC5lYyA9IGNwdV90b19iZTMyKGFyZWEtPmFfZXJhc2VfY291bnQpOworCXNoLmdlYyA9IGNwdV90b19iZTY0KGxvZ2ZzX3N1cGVyKHNiKS0+c19nZWMpOworCXNoLmNyYyA9IGxvZ2ZzX2NyYzMyKCZzaCwgc2l6ZW9mKHNoKSwgNCk7CisKKwlsb2dmc19zZXRfc2VnbWVudF9lcmFzZWQoc2IsIGFyZWEtPmFfc2Vnbm8sIGFyZWEtPmFfZXJhc2VfY291bnQsCisJCQlhcmVhLT5hX2xldmVsKTsKKworCW9mcyA9IGRldl9vZnMoc2IsIGFyZWEtPmFfc2Vnbm8sIDApOworCWFyZWEtPmFfdXNlZF9ieXRlcyA9IHNpemVvZihzaCk7CisJbG9nZnNfYnVmX3dyaXRlKGFyZWEsIG9mcywgJnNoLCBzaXplb2Yoc2gpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBsb2dmc19hcmVhX29wcyBvc3RvcmVfYXJlYV9vcHMgPSB7CisJLmdldF9mcmVlX3NlZ21lbnQJPSBvc3RvcmVfZ2V0X2ZyZWVfc2VnbWVudCwKKwkuZ2V0X2VyYXNlX2NvdW50CT0gb3N0b3JlX2dldF9lcmFzZV9jb3VudCwKKwkuZXJhc2Vfc2VnbWVudAkJPSBvc3RvcmVfZXJhc2Vfc2VnbWVudCwKK307CisKK3N0YXRpYyB2b2lkIGZyZWVfYXJlYShzdHJ1Y3QgbG9nZnNfYXJlYSAqYXJlYSkKK3sKKwlpZiAoYXJlYSkKKwkJZnJlZXNlZyhhcmVhLT5hX3NiLCBhcmVhLT5hX3NlZ25vKTsKKwlrZnJlZShhcmVhKTsKK30KKworc3RhdGljIHN0cnVjdCBsb2dmc19hcmVhICphbGxvY19hcmVhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX2FyZWEgKmFyZWE7CisKKwlhcmVhID0ga3phbGxvYyhzaXplb2YoKmFyZWEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFyZWEpCisJCXJldHVybiBOVUxMOworCisJYXJlYS0+YV9zYiA9IHNiOworCXJldHVybiBhcmVhOworfQorCitzdGF0aWMgdm9pZCBtYXBfaW52YWxpZGF0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgbCkKK3sKKwlCVUcoKTsKK30KKworc3RhdGljIGludCBtYXBfcmVsZWFzZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IGcpCit7CisJLyogRG9uJ3QgcmVsZWFzZSB0aGVzZSBwYWdlcyAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBtYXBwaW5nX2FvcHMgPSB7CisJLmludmFsaWRhdGVwYWdlID0gbWFwX2ludmFsaWRhdGVwYWdlLAorCS5yZWxlYXNlcGFnZQk9IG1hcF9yZWxlYXNlcGFnZSwKKwkuc2V0X3BhZ2VfZGlydHkgPSBfX3NldF9wYWdlX2RpcnR5X25vYnVmZmVycywKK307CisKK2ludCBsb2dmc19pbml0X21hcHBpbmcoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisKKwlpbm9kZSA9IGxvZ2ZzX25ld19tZXRhX2lub2RlKHNiLCBMT0dGU19JTk9fTUFQUElORyk7CisJaWYgKElTX0VSUihpbm9kZSkpCisJCXJldHVybiBQVFJfRVJSKGlub2RlKTsKKwlzdXBlci0+c19tYXBwaW5nX2lub2RlID0gaW5vZGU7CisJbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7CisJbWFwcGluZy0+YV9vcHMgPSAmbWFwcGluZ19hb3BzOworCS8qIFdvdWxkIGl0IGJlIHBvc3NpYmxlIHRvIHVzZSBfX0dGUF9ISUdITUVNIGFzIHdlbGw/ICovCisJbWFwcGluZ19zZXRfZ2ZwX21hc2sobWFwcGluZywgR0ZQX05PRlMpOworCXJldHVybiAwOworfQorCitpbnQgbG9nZnNfaW5pdF9hcmVhcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJaW50IGkgPSAtMTsKKworCXN1cGVyLT5zX2FsaWFzX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9rbWFsbG9jX3Bvb2woNjAwLAorCQkJc2l6ZW9mKHN0cnVjdCBvYmplY3RfYWxpYXNfaXRlbSkpOworCWlmICghc3VwZXItPnNfYWxpYXNfcG9vbCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzdXBlci0+c19qb3VybmFsX2FyZWEgPSBhbGxvY19hcmVhKHNiKTsKKwlpZiAoIXN1cGVyLT5zX2pvdXJuYWxfYXJlYSkKKwkJZ290byBlcnI7CisKKwlmb3JfZWFjaF9hcmVhKGkpIHsKKwkJc3VwZXItPnNfYXJlYVtpXSA9IGFsbG9jX2FyZWEoc2IpOworCQlpZiAoIXN1cGVyLT5zX2FyZWFbaV0pCisJCQlnb3RvIGVycjsKKwkJc3VwZXItPnNfYXJlYVtpXS0+YV9sZXZlbCA9IEdDX0xFVkVMKGkpOworCQlzdXBlci0+c19hcmVhW2ldLT5hX29wcyA9ICZvc3RvcmVfYXJlYV9vcHM7CisJfQorCWJ0cmVlX2luaXRfbWVtcG9vbDEyOCgmc3VwZXItPnNfb2JqZWN0X2FsaWFzX3RyZWUsCisJCQlzdXBlci0+c19idHJlZV9wb29sKTsKKwlyZXR1cm4gMDsKKworZXJyOgorCWZvciAoaS0tOyBpID49IDA7IGktLSkKKwkJZnJlZV9hcmVhKHN1cGVyLT5zX2FyZWFbaV0pOworCWZyZWVfYXJlYShzdXBlci0+c19qb3VybmFsX2FyZWEpOworCW1lbXBvb2xfZGVzdHJveShzdXBlci0+c19hbGlhc19wb29sKTsKKwlyZXR1cm4gLUVOT01FTTsKK30KKwordm9pZCBsb2dmc19jbGVhbnVwX2FyZWFzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlpbnQgaTsKKworCWJ0cmVlX2dyaW1fdmlzaXRvcjEyOCgmc3VwZXItPnNfb2JqZWN0X2FsaWFzX3RyZWUsIDAsIGtpbGxfYWxpYXMpOworCWZvcl9lYWNoX2FyZWEoaSkKKwkJZnJlZV9hcmVhKHN1cGVyLT5zX2FyZWFbaV0pOworCWZyZWVfYXJlYShzdXBlci0+c19qb3VybmFsX2FyZWEpOworCWRlc3Ryb3lfbWV0YV9pbm9kZShzdXBlci0+c19tYXBwaW5nX2lub2RlKTsKK30KZGlmZiAtLWdpdCBhL2ZzL2xvZ2ZzL3N1cGVyLmMgYi9mcy9sb2dmcy9zdXBlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NmJlYWIKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9sb2dmcy9zdXBlci5jCkBAIC0wLDAgKzEsNjUwIEBACisvKgorICogZnMvbG9nZnMvc3VwZXIuYworICoKKyAqIEFzIHNob3VsZCBiZSBvYnZpb3VzIGZvciBMaW51eCBrZXJuZWwgY29kZSwgbGljZW5zZSBpcyBHUEx2MgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNS0yMDA4IEpvZXJuIEVuZ2VsIDxqb2VybkBsb2dmcy5vcmc+CisgKgorICogR2VuZXJhbGx5IGNvbnRhaW5zIG1vdW50L3Vtb3VudCBjb2RlIGFuZCBhbHNvIHNlcnZlcyBhcyBhIGR1bXAgYXJlYSBmb3IKKyAqIGFueSBmdW5jdGlvbnMgdGhhdCBkb24ndCBmaXQgZWxzZXdoZXJlIGFuZCBuZWl0aGVyIGp1c3RpZnkgYSBmaWxlIG9mIHRoZWlyCisgKiBvd24uCisgKi8KKyNpbmNsdWRlICJsb2dmcy5oIgorI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgorCitzdGF0aWMgREVGSU5FX01VVEVYKGVtZXJnZW5jeV9tdXRleCk7CitzdGF0aWMgc3RydWN0IHBhZ2UgKmVtZXJnZW5jeV9wYWdlOworCitzdHJ1Y3QgcGFnZSAqZW1lcmdlbmN5X3JlYWRfYmVnaW4oc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgaW5kZXgpCit7CisJZmlsbGVyX3QgKmZpbGxlciA9IChmaWxsZXJfdCAqKW1hcHBpbmctPmFfb3BzLT5yZWFkcGFnZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgZXJyOworCisJcGFnZSA9IHJlYWRfY2FjaGVfcGFnZShtYXBwaW5nLCBpbmRleCwgZmlsbGVyLCBOVUxMKTsKKwlpZiAocGFnZSkKKwkJcmV0dXJuIHBhZ2U7CisKKwkvKiBObyBtb3JlIHBhZ2VzIGF2YWlsYWJsZSwgc3dpdGNoIHRvIGVtZXJnZW5jeSBwYWdlICovCisJcHJpbnRrKEtFUk5fSU5GTyJMb2dmczogVXNpbmcgZW1lcmdlbmN5IHBhZ2VcbiIpOworCW11dGV4X2xvY2soJmVtZXJnZW5jeV9tdXRleCk7CisJZXJyID0gZmlsbGVyKE5VTEwsIGVtZXJnZW5jeV9wYWdlKTsKKwlpZiAoZXJyKSB7CisJCW11dGV4X3VubG9jaygmZW1lcmdlbmN5X211dGV4KTsKKwkJcHJpbnRrKEtFUk5fRU1FUkciTG9nZnM6IEVycm9yIHJlYWRpbmcgZW1lcmdlbmN5IHBhZ2VcbiIpOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KKwlyZXR1cm4gZW1lcmdlbmN5X3BhZ2U7Cit9CisKK3ZvaWQgZW1lcmdlbmN5X3JlYWRfZW5kKHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmIChwYWdlID09IGVtZXJnZW5jeV9wYWdlKQorCQltdXRleF91bmxvY2soJmVtZXJnZW5jeV9tdXRleCk7CisJZWxzZQorCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7Cit9CisKK3N0YXRpYyB2b2lkIGR1bXBfc2VnZmlsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX3NlZ21lbnRfZW50cnkgc2U7CisJdTMyIHNlZ25vOworCisJZm9yIChzZWdubyA9IDA7IHNlZ25vIDwgc3VwZXItPnNfbm9fc2Vnczsgc2Vnbm8rKykgeworCQlsb2dmc19nZXRfc2VnbWVudF9lbnRyeShzYiwgc2Vnbm8sICZzZSk7CisJCXByaW50aygiJTN4OiAlNnggJTh4Iiwgc2Vnbm8sIGJlMzJfdG9fY3B1KHNlLmVjX2xldmVsKSwKKwkJCQliZTMyX3RvX2NwdShzZS52YWxpZCkpOworCQlpZiAoKytzZWdubyA8IHN1cGVyLT5zX25vX3NlZ3MpIHsKKwkJCWxvZ2ZzX2dldF9zZWdtZW50X2VudHJ5KHNiLCBzZWdubywgJnNlKTsKKwkJCXByaW50aygiICU2eCAlOHgiLCBiZTMyX3RvX2NwdShzZS5lY19sZXZlbCksCisJCQkJCWJlMzJfdG9fY3B1KHNlLnZhbGlkKSk7CisJCX0KKwkJaWYgKCsrc2Vnbm8gPCBzdXBlci0+c19ub19zZWdzKSB7CisJCQlsb2dmc19nZXRfc2VnbWVudF9lbnRyeShzYiwgc2Vnbm8sICZzZSk7CisJCQlwcmludGsoIiAlNnggJTh4IiwgYmUzMl90b19jcHUoc2UuZWNfbGV2ZWwpLAorCQkJCQliZTMyX3RvX2NwdShzZS52YWxpZCkpOworCQl9CisJCWlmICgrK3NlZ25vIDwgc3VwZXItPnNfbm9fc2VncykgeworCQkJbG9nZnNfZ2V0X3NlZ21lbnRfZW50cnkoc2IsIHNlZ25vLCAmc2UpOworCQkJcHJpbnRrKCIgJTZ4ICU4eCIsIGJlMzJfdG9fY3B1KHNlLmVjX2xldmVsKSwKKwkJCQkJYmUzMl90b19jcHUoc2UudmFsaWQpKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisJfQorfQorCisvKgorICogbG9nZnNfY3Jhc2hfZHVtcCAtIGR1bXAgZGVidWcgaW5mb3JtYXRpb24gdG8gZGV2aWNlCisgKgorICogVGhlIExvZ0ZTIHN1cGVyYmxvY2sgb25seSBvY2N1cGllcyBwYXJ0IG9mIGEgc2VnbWVudC4gIFRoaXMgZnVuY3Rpb24gd2lsbAorICogd3JpdGUgYXMgbXVjaCBkZWJ1ZyBpbmZvcm1hdGlvbiBhcyBpdCBjYW4gZ2F0aGVyIGludG8gdGhlIHNwYXJlIHNwYWNlLgorICovCit2b2lkIGxvZ2ZzX2NyYXNoX2R1bXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlkdW1wX3NlZ2ZpbGUoc2IpOworfQorCisvKgorICogVE9ETzogbW92ZSB0byBsaWIvc3RyaW5nLmMKKyAqLworLyoqCisgKiBtZW1jaHJfaW52IC0gRmluZCBhIGNoYXJhY3RlciBpbiBhbiBhcmVhIG9mIG1lbW9yeS4KKyAqIEBzOiBUaGUgbWVtb3J5IGFyZWEKKyAqIEBjOiBUaGUgYnl0ZSB0byBzZWFyY2ggZm9yCisgKiBAbjogVGhlIHNpemUgb2YgdGhlIGFyZWEuCisgKgorICogcmV0dXJucyB0aGUgYWRkcmVzcyBvZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG90aGVyIHRoYW4gQGMsIG9yICVOVUxMCisgKiBpZiB0aGUgd2hvbGUgYnVmZmVyIGNvbnRhaW5zIGp1c3QgQGMuCisgKi8KK3ZvaWQgKm1lbWNocl9pbnYoY29uc3Qgdm9pZCAqcywgaW50IGMsIHNpemVfdCBuKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnAgPSBzOworCXdoaWxlIChuLS0gIT0gMCkKKwkJaWYgKCh1bnNpZ25lZCBjaGFyKWMgIT0gKnArKykKKwkJCXJldHVybiAodm9pZCAqKShwIC0gMSk7CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIEZJWE1FOiBUaGVyZSBzaG91bGQgYmUgYSByZXNlcnZlIGZvciByb290LCBzaW1pbGFyIHRvIGV4dDIuCisgKi8KK2ludCBsb2dmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqc3RhdHMpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRlbnRyeS0+ZF9zYjsKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCisJc3RhdHMtPmZfdHlwZQkJPSBMT0dGU19NQUdJQ19VMzI7CisJc3RhdHMtPmZfYnNpemUJCT0gc2ItPnNfYmxvY2tzaXplOworCXN0YXRzLT5mX2Jsb2NrcwkJPSBzdXBlci0+c19zaXplID4+IExPR0ZTX0JMT0NLX0JJVFMgPj4gMzsKKwlzdGF0cy0+Zl9iZnJlZQkJPSBzdXBlci0+c19mcmVlX2J5dGVzID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCXN0YXRzLT5mX2JhdmFpbAkJPSBzdXBlci0+c19mcmVlX2J5dGVzID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCXN0YXRzLT5mX2ZpbGVzCQk9IDA7CisJc3RhdHMtPmZfZmZyZWUJCT0gMDsKKwlzdGF0cy0+Zl9uYW1lbGVuCT0gTE9HRlNfTUFYX05BTUVMRU47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfc2Jfc2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKl9zdXBlcikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gX3N1cGVyOworCisJc2ItPnNfZnNfaW5mbyA9IHN1cGVyOworCXNiLT5zX210ZCA9IHN1cGVyLT5zX210ZDsKKwlzYi0+c19iZGV2ID0gc3VwZXItPnNfYmRldjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2dmc19zYl90ZXN0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKl9zdXBlcikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gX3N1cGVyOworCXN0cnVjdCBtdGRfaW5mbyAqbXRkID0gc3VwZXItPnNfbXRkOworCisJaWYgKG10ZCAmJiBzYi0+c19tdGQgPT0gbXRkKQorCQlyZXR1cm4gMTsKKwlpZiAoc3VwZXItPnNfYmRldiAmJiBzYi0+c19iZGV2ID09IHN1cGVyLT5zX2JkZXYpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzZXRfc2VnbWVudF9oZWFkZXIoc3RydWN0IGxvZ2ZzX3NlZ21lbnRfaGVhZGVyICpzaCwgdTggdHlwZSwKKwkJdTggbGV2ZWwsIHUzMiBzZWdubywgdTMyIGVjKQoreworCXNoLT5wYWQgPSAwOworCXNoLT50eXBlID0gdHlwZTsKKwlzaC0+bGV2ZWwgPSBsZXZlbDsKKwlzaC0+c2Vnbm8gPSBjcHVfdG9fYmUzMihzZWdubyk7CisJc2gtPmVjID0gY3B1X3RvX2JlMzIoZWMpOworCXNoLT5nZWMgPSBjcHVfdG9fYmU2NChzZWdubyk7CisJc2gtPmNyYyA9IGxvZ2ZzX2NyYzMyKHNoLCBMT0dGU19TRUdNRU5UX0hFQURFUlNJWkUsIDQpOworfQorCitzdGF0aWMgdm9pZCBsb2dmc193cml0ZV9kcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgbG9nZnNfZGlza19zdXBlciAqZHMsCisJCXUzMiBzZWdubywgdTMyIGVjKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX3NlZ21lbnRfaGVhZGVyICpzaCA9ICZkcy0+ZHNfc2g7CisJaW50IGk7CisKKwltZW1zZXQoZHMsIDAsIHNpemVvZigqZHMpKTsKKwlzZXRfc2VnbWVudF9oZWFkZXIoc2gsIFNFR19TVVBFUiwgMCwgc2Vnbm8sIGVjKTsKKworCWRzLT5kc19pZmlsZV9sZXZlbHMJPSBzdXBlci0+c19pZmlsZV9sZXZlbHM7CisJZHMtPmRzX2libG9ja19sZXZlbHMJPSBzdXBlci0+c19pYmxvY2tfbGV2ZWxzOworCWRzLT5kc19kYXRhX2xldmVscwk9IHN1cGVyLT5zX2RhdGFfbGV2ZWxzOyAvKiBYWFg6IFJlbW92ZSAqLworCWRzLT5kc19zZWdtZW50X3NoaWZ0CT0gc3VwZXItPnNfc2Vnc2hpZnQ7CisJZHMtPmRzX2Jsb2NrX3NoaWZ0CT0gc2ItPnNfYmxvY2tzaXplX2JpdHM7CisJZHMtPmRzX3dyaXRlX3NoaWZ0CT0gc3VwZXItPnNfd3JpdGVzaGlmdDsKKwlkcy0+ZHNfZmlsZXN5c3RlbV9zaXplCT0gY3B1X3RvX2JlNjQoc3VwZXItPnNfc2l6ZSk7CisJZHMtPmRzX3NlZ21lbnRfc2l6ZQk9IGNwdV90b19iZTMyKHN1cGVyLT5zX3NlZ3NpemUpOworCWRzLT5kc19iYWRfc2VnX3Jlc2VydmUJPSBjcHVfdG9fYmUzMihzdXBlci0+c19iYWRfc2VnX3Jlc2VydmUpOworCWRzLT5kc19mZWF0dXJlX2luY29tcGF0CT0gY3B1X3RvX2JlNjQoc3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCk7CisJZHMtPmRzX2ZlYXR1cmVfcm9fY29tcGF0PSBjcHVfdG9fYmU2NChzdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCk7CisJZHMtPmRzX2ZlYXR1cmVfY29tcGF0CT0gY3B1X3RvX2JlNjQoc3VwZXItPnNfZmVhdHVyZV9jb21wYXQpOworCWRzLT5kc19mZWF0dXJlX2ZsYWdzCT0gY3B1X3RvX2JlNjQoc3VwZXItPnNfZmVhdHVyZV9mbGFncyk7CisJZHMtPmRzX3Jvb3RfcmVzZXJ2ZQk9IGNwdV90b19iZTY0KHN1cGVyLT5zX3Jvb3RfcmVzZXJ2ZSk7CisJZHMtPmRzX3NwZWVkX3Jlc2VydmUJPSBjcHVfdG9fYmU2NChzdXBlci0+c19zcGVlZF9yZXNlcnZlKTsKKwlqb3VybmFsX2Zvcl9lYWNoKGkpCisJCWRzLT5kc19qb3VybmFsX3NlZ1tpXSA9IGNwdV90b19iZTMyKHN1cGVyLT5zX2pvdXJuYWxfc2VnW2ldKTsKKwlkcy0+ZHNfbWFnaWMJCT0gY3B1X3RvX2JlNjQoTE9HRlNfTUFHSUMpOworCWRzLT5kc19jcmMgPSBsb2dmc19jcmMzMihkcywgc2l6ZW9mKCpkcyksCisJCQlMT0dGU19TRUdNRU5UX0hFQURFUlNJWkUgKyAxMik7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVfb25lX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCXN0cnVjdCBwYWdlICooKmZpbmRfc2IpKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHU2NCAqb2ZzKSkKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCXN0cnVjdCBsb2dmc19kaXNrX3N1cGVyICpkczsKKwlzdHJ1Y3QgbG9nZnNfc2VnbWVudF9lbnRyeSBzZTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwl1NjQgb2ZzOworCXUzMiBlYywgc2Vnbm87CisJaW50IGVycjsKKworCXBhZ2UgPSBmaW5kX3NiKHNiLCAmb2ZzKTsKKwlpZiAoIXBhZ2UpCisJCXJldHVybiAtRUlPOworCWRzID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCXNlZ25vID0gc2VnX25vKHNiLCBvZnMpOworCWxvZ2ZzX2dldF9zZWdtZW50X2VudHJ5KHNiLCBzZWdubywgJnNlKTsKKwllYyA9IGJlMzJfdG9fY3B1KHNlLmVjX2xldmVsKSA+PiA0OworCWVjKys7CisJbG9nZnNfc2V0X3NlZ21lbnRfZXJhc2VkKHNiLCBzZWdubywgZWMsIDApOworCWxvZ2ZzX3dyaXRlX2RzKHNiLCBkcywgc2Vnbm8sIGVjKTsKKwllcnIgPSBzdXBlci0+c19kZXZvcHMtPndyaXRlX3NiKHNiLCBwYWdlKTsKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJcmV0dXJuIGVycjsKK30KKworaW50IGxvZ2ZzX3dyaXRlX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlpbnQgZXJyOworCisJLyogRmlyc3Qgc3VwZXJibG9jayAqLworCWVyciA9IHdyaXRlX29uZV9zYihzYiwgc3VwZXItPnNfZGV2b3BzLT5maW5kX2ZpcnN0X3NiKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogTGFzdCBzdXBlcmJsb2NrICovCisJZXJyID0gd3JpdGVfb25lX3NiKHNiLCBzdXBlci0+c19kZXZvcHMtPmZpbmRfbGFzdF9zYik7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkc19jbXAoY29uc3Qgdm9pZCAqZHMwLCBjb25zdCB2b2lkICpkczEpCit7CisJc2l6ZV90IGxlbiA9IHNpemVvZihzdHJ1Y3QgbG9nZnNfZGlza19zdXBlcik7CisKKwkvKiBXZSBrbm93IHRoZSBzZWdtZW50IGhlYWRlcnMgZGlmZmVyLCBzbyBpZ25vcmUgdGhlbSAqLworCWxlbiAtPSBMT0dGU19TRUdNRU5UX0hFQURFUlNJWkU7CisJZHMwICs9IExPR0ZTX1NFR01FTlRfSEVBREVSU0laRTsKKwlkczEgKz0gTE9HRlNfU0VHTUVOVF9IRUFERVJTSVpFOworCXJldHVybiBtZW1jbXAoZHMwLCBkczEsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfcmVjb3Zlcl9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IGxvZ2ZzX2Rpc2tfc3VwZXIgX2RzMCwgKmRzMCA9ICZfZHMwOworCXN0cnVjdCBsb2dmc19kaXNrX3N1cGVyIF9kczEsICpkczEgPSAmX2RzMTsKKwlpbnQgZXJyLCB2YWxpZDAsIHZhbGlkMTsKKworCS8qIHJlYWQgZmlyc3Qgc3VwZXJibG9jayAqLworCWVyciA9IHdidWZfcmVhZChzYiwgc3VwZXItPnNfc2Jfb2ZzWzBdLCBzaXplb2YoKmRzMCksIGRzMCk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwkvKiByZWFkIGxhc3Qgc3VwZXJibG9jayAqLworCWVyciA9IHdidWZfcmVhZChzYiwgc3VwZXItPnNfc2Jfb2ZzWzFdLCBzaXplb2YoKmRzMSksIGRzMSk7CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwl2YWxpZDAgPSBsb2dmc19jaGVja19kcyhkczApID09IDA7CisJdmFsaWQxID0gbG9nZnNfY2hlY2tfZHMoZHMxKSA9PSAwOworCisJaWYgKCF2YWxpZDAgJiYgdmFsaWQxKSB7CisJCXByaW50ayhLRVJOX0lORk8iRmlyc3Qgc3VwZXJibG9jayBpcyBpbnZhbGlkIC0gZml4aW5nLlxuIik7CisJCXJldHVybiB3cml0ZV9vbmVfc2Ioc2IsIHN1cGVyLT5zX2Rldm9wcy0+ZmluZF9maXJzdF9zYik7CisJfQorCWlmICh2YWxpZDAgJiYgIXZhbGlkMSkgeworCQlwcmludGsoS0VSTl9JTkZPIkxhc3Qgc3VwZXJibG9jayBpcyBpbnZhbGlkIC0gZml4aW5nLlxuIik7CisJCXJldHVybiB3cml0ZV9vbmVfc2Ioc2IsIHN1cGVyLT5zX2Rldm9wcy0+ZmluZF9sYXN0X3NiKTsKKwl9CisJaWYgKHZhbGlkMCAmJiB2YWxpZDEgJiYgZHNfY21wKGRzMCwgZHMxKSkgeworCQlwcmludGsoS0VSTl9JTkZPIlN1cGVyYmxvY2tzIGRvbid0IG1hdGNoIC0gZml4aW5nLlxuIik7CisJCXJldHVybiB3cml0ZV9vbmVfc2Ioc2IsIHN1cGVyLT5zX2Rldm9wcy0+ZmluZF9sYXN0X3NiKTsKKwl9CisJLyogSWYgbmVpdGhlciBpcyB2YWxpZCBub3csIHNvbWV0aGluZydzIHdyb25nLiAgRGlkbid0IHdlIHByb3Blcmx5CisJICogY2hlY2sgdGhlbSBiZWZvcmU/IT8gKi8KKwlCVUdfT04oIXZhbGlkMCAmJiAhdmFsaWQxKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2dmc19tYWtlX3dyaXRlYWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCWludCBlcnI7CisKKwkvKiBSZXBhaXIgYW55IGJyb2tlbiBzdXBlcmJsb2NrIGNvcGllcyAqLworCWVyciA9IGxvZ2ZzX3JlY292ZXJfc2Ioc2IpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwkvKiBDaGVjayBhcmVhcyBmb3IgdHJhaWxpbmcgdW5hY2NvdW50ZWQgZGF0YSAqLworCWVyciA9IGxvZ2ZzX2NoZWNrX2FyZWFzKHNiKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJZXJyID0gbG9nZnNfb3Blbl9zZWdmaWxlKHNiKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJLyogRG8gb25lIEdDIHBhc3MgYmVmb3JlIGFueSBkYXRhIGdldHMgZGlydGllZCAqLworCWxvZ2ZzX2djX3Bhc3Moc2IpOworCisJLyogYWZ0ZXIgYWxsIGluaXRpYWxpemF0aW9ucyBhcmUgZG9uZSwgcmVwbGF5IHRoZSBqb3VybmFsCisJICogZm9yIHJ3LW1vdW50cywgaWYgbmVjZXNzYXJ5ICovCisJZXJyID0gbG9nZnNfcmVwbGF5X2pvdXJuYWwoc2IpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsb2dmc19nZXRfc2JfZmluYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IHZmc21vdW50ICptbnQpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgaW5vZGUgKnJvb3RkaXI7CisJaW50IGVycjsKKworCS8qIHJvb3QgZGlyICovCisJcm9vdGRpciA9IGxvZ2ZzX2lnZXQoc2IsIExPR0ZTX0lOT19ST09UKTsKKwlpZiAoSVNfRVJSKHJvb3RkaXIpKQorCQlnb3RvIGZhaWw7CisKKwlzYi0+c19yb290ID0gZF9hbGxvY19yb290KHJvb3RkaXIpOworCWlmICghc2ItPnNfcm9vdCkKKwkJZ290byBmYWlsOworCisJc3VwZXItPnNfZXJhc2VfcGFnZSA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwsIDApOworCWlmICghc3VwZXItPnNfZXJhc2VfcGFnZSkKKwkJZ290byBmYWlsMjsKKwltZW1zZXQocGFnZV9hZGRyZXNzKHN1cGVyLT5zX2VyYXNlX3BhZ2UpLCAweEZGLCBQQUdFX1NJWkUpOworCisJLyogRklYTUU6IGNoZWNrIGZvciByZWFkLW9ubHkgbW91bnRzICovCisJZXJyID0gbG9nZnNfbWFrZV93cml0ZWFibGUoc2IpOworCWlmIChlcnIpCisJCWdvdG8gZmFpbDM7CisKKwlsb2dfc3VwZXIoIkxvZ0ZTOiBGaW5pc2hlZCBtb3VudGluZ1xuIik7CisJc2ltcGxlX3NldF9tbnQobW50LCBzYik7CisJcmV0dXJuIDA7CisKK2ZhaWwzOgorCV9fZnJlZV9wYWdlKHN1cGVyLT5zX2VyYXNlX3BhZ2UpOworZmFpbDI6CisJaXB1dChyb290ZGlyKTsKK2ZhaWw6CisJaXB1dChsb2dmc19zdXBlcihzYiktPnNfbWFzdGVyX2lub2RlKTsKKwlyZXR1cm4gLUVJTzsKK30KKworaW50IGxvZ2ZzX2NoZWNrX2RzKHN0cnVjdCBsb2dmc19kaXNrX3N1cGVyICpkcykKK3sKKwlzdHJ1Y3QgbG9nZnNfc2VnbWVudF9oZWFkZXIgKnNoID0gJmRzLT5kc19zaDsKKworCWlmIChkcy0+ZHNfbWFnaWMgIT0gY3B1X3RvX2JlNjQoTE9HRlNfTUFHSUMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoc2gtPmNyYyAhPSBsb2dmc19jcmMzMihzaCwgTE9HRlNfU0VHTUVOVF9IRUFERVJTSVpFLCA0KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRzLT5kc19jcmMgIT0gbG9nZnNfY3JjMzIoZHMsIHNpemVvZigqZHMpLAorCQkJCUxPR0ZTX1NFR01FTlRfSEVBREVSU0laRSArIDEyKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqZmluZF9zdXBlcl9ibG9jayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXIgPSBsb2dmc19zdXBlcihzYik7CisJc3RydWN0IHBhZ2UgKmZpcnN0LCAqbGFzdDsKKworCWZpcnN0ID0gc3VwZXItPnNfZGV2b3BzLT5maW5kX2ZpcnN0X3NiKHNiLCAmc3VwZXItPnNfc2Jfb2ZzWzBdKTsKKwlpZiAoIWZpcnN0IHx8IElTX0VSUihmaXJzdCkpCisJCXJldHVybiBOVUxMOworCWxhc3QgPSBzdXBlci0+c19kZXZvcHMtPmZpbmRfbGFzdF9zYihzYiwgJnN1cGVyLT5zX3NiX29mc1sxXSk7CisJaWYgKCFsYXN0IHx8IElTX0VSUihmaXJzdCkpIHsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKGZpcnN0KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWYgKCFsb2dmc19jaGVja19kcyhwYWdlX2FkZHJlc3MoZmlyc3QpKSkgeworCQlwYWdlX2NhY2hlX3JlbGVhc2UobGFzdCk7CisJCXJldHVybiBmaXJzdDsKKwl9CisKKwkvKiBGaXJzdCBvbmUgZGlkbid0IHdvcmssIHRyeSB0aGUgc2Vjb25kIHN1cGVyYmxvY2sgKi8KKwlpZiAoIWxvZ2ZzX2NoZWNrX2RzKHBhZ2VfYWRkcmVzcyhsYXN0KSkpIHsKKwkJcGFnZV9jYWNoZV9yZWxlYXNlKGZpcnN0KTsKKwkJcmV0dXJuIGxhc3Q7CisJfQorCisJLyogTmVpdGhlciB3b3JrZWQsIHNvcnJ5IGZvbGtzICovCisJcGFnZV9jYWNoZV9yZWxlYXNlKGZpcnN0KTsKKwlwYWdlX2NhY2hlX3JlbGVhc2UobGFzdCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgX19sb2dmc19yZWFkX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IGxvZ2ZzX3N1cGVyICpzdXBlciA9IGxvZ2ZzX3N1cGVyKHNiKTsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgbG9nZnNfZGlza19zdXBlciAqZHM7CisJaW50IGk7CisKKwlwYWdlID0gZmluZF9zdXBlcl9ibG9jayhzYik7CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gLUVJTzsKKworCWRzID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCXN1cGVyLT5zX3NpemUgPSBiZTY0X3RvX2NwdShkcy0+ZHNfZmlsZXN5c3RlbV9zaXplKTsKKwlzdXBlci0+c19yb290X3Jlc2VydmUgPSBiZTY0X3RvX2NwdShkcy0+ZHNfcm9vdF9yZXNlcnZlKTsKKwlzdXBlci0+c19zcGVlZF9yZXNlcnZlID0gYmU2NF90b19jcHUoZHMtPmRzX3NwZWVkX3Jlc2VydmUpOworCXN1cGVyLT5zX2JhZF9zZWdfcmVzZXJ2ZSA9IGJlMzJfdG9fY3B1KGRzLT5kc19iYWRfc2VnX3Jlc2VydmUpOworCXN1cGVyLT5zX3NlZ3NpemUgPSAxIDw8IGRzLT5kc19zZWdtZW50X3NoaWZ0OworCXN1cGVyLT5zX3NlZ21hc2sgPSAoMSA8PCBkcy0+ZHNfc2VnbWVudF9zaGlmdCkgLSAxOworCXN1cGVyLT5zX3NlZ3NoaWZ0ID0gZHMtPmRzX3NlZ21lbnRfc2hpZnQ7CisJc2ItPnNfYmxvY2tzaXplID0gMSA8PCBkcy0+ZHNfYmxvY2tfc2hpZnQ7CisJc2ItPnNfYmxvY2tzaXplX2JpdHMgPSBkcy0+ZHNfYmxvY2tfc2hpZnQ7CisJc3VwZXItPnNfd3JpdGVzaXplID0gMSA8PCBkcy0+ZHNfd3JpdGVfc2hpZnQ7CisJc3VwZXItPnNfd3JpdGVzaGlmdCA9IGRzLT5kc193cml0ZV9zaGlmdDsKKwlzdXBlci0+c19ub19zZWdzID0gc3VwZXItPnNfc2l6ZSA+PiBzdXBlci0+c19zZWdzaGlmdDsKKwlzdXBlci0+c19ub19ibG9ja3MgPSBzdXBlci0+c19zZWdzaXplID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCXN1cGVyLT5zX2ZlYXR1cmVfaW5jb21wYXQgPSBiZTY0X3RvX2NwdShkcy0+ZHNfZmVhdHVyZV9pbmNvbXBhdCk7CisJc3VwZXItPnNfZmVhdHVyZV9yb19jb21wYXQgPSBiZTY0X3RvX2NwdShkcy0+ZHNfZmVhdHVyZV9yb19jb21wYXQpOworCXN1cGVyLT5zX2ZlYXR1cmVfY29tcGF0ID0gYmU2NF90b19jcHUoZHMtPmRzX2ZlYXR1cmVfY29tcGF0KTsKKwlzdXBlci0+c19mZWF0dXJlX2ZsYWdzID0gYmU2NF90b19jcHUoZHMtPmRzX2ZlYXR1cmVfZmxhZ3MpOworCisJam91cm5hbF9mb3JfZWFjaChpKQorCQlzdXBlci0+c19qb3VybmFsX3NlZ1tpXSA9IGJlMzJfdG9fY3B1KGRzLT5kc19qb3VybmFsX3NlZ1tpXSk7CisKKwlzdXBlci0+c19pZmlsZV9sZXZlbHMgPSBkcy0+ZHNfaWZpbGVfbGV2ZWxzOworCXN1cGVyLT5zX2libG9ja19sZXZlbHMgPSBkcy0+ZHNfaWJsb2NrX2xldmVsczsKKwlzdXBlci0+c19kYXRhX2xldmVscyA9IGRzLT5kc19kYXRhX2xldmVsczsKKwlzdXBlci0+c190b3RhbF9sZXZlbHMgPSBzdXBlci0+c19pZmlsZV9sZXZlbHMgKyBzdXBlci0+c19pYmxvY2tfbGV2ZWxzCisJCSsgc3VwZXItPnNfZGF0YV9sZXZlbHM7CisJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxvZ2ZzX3JlYWRfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHJlYWRfb25seSkKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCWludCByZXQ7CisKKwlzdXBlci0+c19idHJlZV9wb29sID0gbWVtcG9vbF9jcmVhdGUoMzIsIGJ0cmVlX2FsbG9jLCBidHJlZV9mcmVlLCBOVUxMKTsKKwlpZiAoIXN1cGVyLT5zX2J0cmVlX3Bvb2wpCisJCXJldHVybiAtRU5PTUVNOworCisJYnRyZWVfaW5pdF9tZW1wb29sNjQoJnN1cGVyLT5zX3NoYWRvd190cmVlLm5ldywgc3VwZXItPnNfYnRyZWVfcG9vbCk7CisJYnRyZWVfaW5pdF9tZW1wb29sNjQoJnN1cGVyLT5zX3NoYWRvd190cmVlLm9sZCwgc3VwZXItPnNfYnRyZWVfcG9vbCk7CisKKwlyZXQgPSBsb2dmc19pbml0X21hcHBpbmcoc2IpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBfX2xvZ2ZzX3JlYWRfc2Ioc2IpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoc3VwZXItPnNfZmVhdHVyZV9pbmNvbXBhdCAmIH5MT0dGU19GRUFUVVJFU19JTkNPTVBBVCkKKwkJcmV0dXJuIC1FSU87CisJaWYgKChzdXBlci0+c19mZWF0dXJlX3JvX2NvbXBhdCAmIH5MT0dGU19GRUFUVVJFU19ST19DT01QQVQpICYmCisJCQkhcmVhZF9vbmx5KQorCQlyZXR1cm4gLUVJTzsKKworCW11dGV4X2luaXQoJnN1cGVyLT5zX2Rpcm9wX211dGV4KTsKKwltdXRleF9pbml0KCZzdXBlci0+c19vYmplY3RfYWxpYXNfbXV0ZXgpOworCUlOSVRfTElTVF9IRUFEKCZzdXBlci0+c19mcmVlaW5nX2xpc3QpOworCisJcmV0ID0gbG9nZnNfaW5pdF9ydyhzYik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGxvZ2ZzX2luaXRfYXJlYXMoc2IpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlyZXQgPSBsb2dmc19pbml0X2djKHNiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0ID0gbG9nZnNfaW5pdF9qb3VybmFsKHNiKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGxvZ2ZzX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgbG9nZnNfc3VwZXIgKnN1cGVyID0gbG9nZnNfc3VwZXIoc2IpOworCisJbG9nX3N1cGVyKCJMb2dGUzogU3RhcnQgdW5tb3VudGluZ1xuIik7CisJLyogQWxpYXMgZW50cmllcyBzbG93IGRvd24gbW91bnQsIHNvIGV2aWN0IGFzIG1hbnkgYXMgcG9zc2libGUgKi8KKwlzeW5jX2ZpbGVzeXN0ZW0oc2IpOworCWxvZ2ZzX3dyaXRlX2FuY2hvcihzYik7CisKKwkvKgorCSAqIEZyb20gdGhpcyBwb2ludCBvbiBhbGlhcyBlbnRyaWVzIGFyZSBzaW1wbHkgZHJvcHBlZCAtIGFuZCBhbnkKKwkgKiB3cml0ZXMgdG8gdGhlIG9iamVjdCBzdG9yZSBhcmUgY29uc2lkZXJlZCBidWdzLgorCSAqLworCXN1cGVyLT5zX2ZsYWdzIHw9IExPR0ZTX1NCX0ZMQUdfU0hVVERPV047CisJbG9nX3N1cGVyKCJMb2dGUzogTm93IGluIHNodXRkb3duXG4iKTsKKwlnZW5lcmljX3NodXRkb3duX3N1cGVyKHNiKTsKKworCUJVR19PTihzdXBlci0+c19kaXJ0eV91c2VkX2J5dGVzIHx8IHN1cGVyLT5zX2RpcnR5X2ZyZWVfYnl0ZXMpOworCisJbG9nZnNfY2xlYW51cF9nYyhzYik7CisJbG9nZnNfY2xlYW51cF9qb3VybmFsKHNiKTsKKwlsb2dmc19jbGVhbnVwX2FyZWFzKHNiKTsKKwlsb2dmc19jbGVhbnVwX3J3KHNiKTsKKwlpZiAoc3VwZXItPnNfZXJhc2VfcGFnZSkKKwkJX19mcmVlX3BhZ2Uoc3VwZXItPnNfZXJhc2VfcGFnZSk7CisJc3VwZXItPnNfZGV2b3BzLT5wdXRfZGV2aWNlKHNiKTsKKwltZW1wb29sX2Rlc3Ryb3koc3VwZXItPnNfYnRyZWVfcG9vbCk7CisJbWVtcG9vbF9kZXN0cm95KHN1cGVyLT5zX2FsaWFzX3Bvb2wpOworCWtmcmVlKHN1cGVyKTsKKwlsb2dfc3VwZXIoIkxvZ0ZTOiBGaW5pc2hlZCB1bm1vdW50aW5nXG4iKTsKK30KKworaW50IGxvZ2ZzX2dldF9zYl9kZXZpY2Uoc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKnR5cGUsIGludCBmbGFncywKKwkJc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCisJCWNvbnN0IHN0cnVjdCBsb2dmc19kZXZpY2Vfb3BzICpkZXZvcHMsIHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCXN0cnVjdCBsb2dmc19zdXBlciAqc3VwZXI7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKKwlpbnQgZXJyID0gLUVOT01FTTsKKwlzdGF0aWMgaW50IG1vdW50X2NvdW50OworCisJbG9nX3N1cGVyKCJMb2dGUzogU3RhcnQgbW91bnQgJXhcbiIsIG1vdW50X2NvdW50KyspOworCXN1cGVyID0ga3phbGxvYyhzaXplb2YoKnN1cGVyKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzdXBlcikKKwkJZ290byBlcnIwOworCisJc3VwZXItPnNfbXRkCT0gbXRkOworCXN1cGVyLT5zX2JkZXYJPSBiZGV2OworCWVyciA9IC1FSU5WQUw7CisJc2IgPSBzZ2V0KHR5cGUsIGxvZ2ZzX3NiX3Rlc3QsIGxvZ2ZzX3NiX3NldCwgc3VwZXIpOworCWlmIChJU19FUlIoc2IpKQorCQlnb3RvIGVycjA7CisKKwlpZiAoc2ItPnNfcm9vdCkgeworCQkvKiBEZXZpY2UgaXMgYWxyZWFkeSBpbiB1c2UgKi8KKwkJZXJyID0gMDsKKwkJc2ltcGxlX3NldF9tbnQobW50LCBzYik7CisJCWdvdG8gZXJyMDsKKwl9CisKKwlzdXBlci0+c19kZXZvcHMgPSBkZXZvcHM7CisKKwkvKgorCSAqIHNiLT5zX21heGJ5dGVzIGlzIGxpbWl0ZWQgdG8gOFRCLiAgT24gMzJiaXQgc3lzdGVtcywgdGhlIHBhZ2UgY2FjaGUKKwkgKiBvbmx5IGNvdmVycyAxNlRCIGFuZCB0aGUgdXBwZXIgOFRCIGFyZSB1c2VkIGZvciBpbmRpcmVjdCBibG9ja3MuCisJICogT24gNjRiaXQgc3lzdGVtIHdlIGNvdWxkIGJ1bXAgdXAgdGhlIGxpbWl0LCBidXQgdGhhdCB3b3VsZCBtYWtlCisJICogdGhlIGZpbGVzeXN0ZW0gaW5jb21wYXRpYmxlIHdpdGggMzJiaXQgc3lzdGVtcy4KKwkgKi8KKwlzYi0+c19tYXhieXRlcwk9ICgxdWxsIDw8IDQzKSAtIDE7CisJc2ItPnNfb3AJPSAmbG9nZnNfc3VwZXJfb3BlcmF0aW9uczsKKwlzYi0+c19mbGFncwk9IGZsYWdzIHwgTVNfTk9BVElNRTsKKworCWVyciA9IGxvZ2ZzX3JlYWRfc2Ioc2IsIHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycjE7CisKKwlzYi0+c19mbGFncyB8PSBNU19BQ1RJVkU7CisJZXJyID0gbG9nZnNfZ2V0X3NiX2ZpbmFsKHNiLCBtbnQpOworCWlmIChlcnIpCisJCWdvdG8gZXJyMTsKKwlyZXR1cm4gMDsKKworZXJyMToKKwl1cF93cml0ZSgmc2ItPnNfdW1vdW50KTsKKwlkZWFjdGl2YXRlX3N1cGVyKHNiKTsKKwlyZXR1cm4gZXJyOworZXJyMDoKKwlrZnJlZShzdXBlcik7CisJLy9kZXZvcHMtPnB1dF9kZXZpY2Uoc2IpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbG9nZnNfZ2V0X3NiKHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICp0eXBlLCBpbnQgZmxhZ3MsCisJCWNvbnN0IGNoYXIgKmRldm5hbWUsIHZvaWQgKmRhdGEsIHN0cnVjdCB2ZnNtb3VudCAqbW50KQoreworCXVsb25nIG10ZG5yOworCisJaWYgKCFkZXZuYW1lKQorCQlyZXR1cm4gbG9nZnNfZ2V0X3NiX2JkZXYodHlwZSwgZmxhZ3MsIGRldm5hbWUsIG1udCk7CisJaWYgKHN0cm5jbXAoZGV2bmFtZSwgIm10ZCIsIDMpKQorCQlyZXR1cm4gbG9nZnNfZ2V0X3NiX2JkZXYodHlwZSwgZmxhZ3MsIGRldm5hbWUsIG1udCk7CisKKwl7CisJCWNoYXIgKmdhcmJhZ2U7CisJCW10ZG5yID0gc2ltcGxlX3N0cnRvdWwoZGV2bmFtZSszLCAmZ2FyYmFnZSwgMCk7CisJCWlmICgqZ2FyYmFnZSkKKwkJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiBsb2dmc19nZXRfc2JfbXRkKHR5cGUsIGZsYWdzLCBtdGRuciwgbW50KTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGxvZ2ZzX2ZzX3R5cGUgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5uYW1lCQk9ICJsb2dmcyIsCisJLmdldF9zYgkJPSBsb2dmc19nZXRfc2IsCisJLmtpbGxfc2IJPSBsb2dmc19raWxsX3NiLAorCS5mc19mbGFncwk9IEZTX1JFUVVJUkVTX0RFViwKKworfTsKKworc3RhdGljIGludCBfX2luaXQgbG9nZnNfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwllbWVyZ2VuY3lfcGFnZSA9IGFsbG9jX3BhZ2VzKEdGUF9LRVJORUwsIDApOworCWlmICghZW1lcmdlbmN5X3BhZ2UpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0ID0gbG9nZnNfY29tcHJfaW5pdCgpOworCWlmIChyZXQpCisJCWdvdG8gb3V0MTsKKworCXJldCA9IGxvZ2ZzX2luaXRfaW5vZGVfY2FjaGUoKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDI7CisKKwlyZXR1cm4gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmbG9nZnNfZnNfdHlwZSk7CitvdXQyOgorCWxvZ2ZzX2NvbXByX2V4aXQoKTsKK291dDE6CisJX19mcmVlX3BhZ2VzKGVtZXJnZW5jeV9wYWdlLCAwKTsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbG9nZnNfZXhpdCh2b2lkKQoreworCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmbG9nZnNfZnNfdHlwZSk7CisJbG9nZnNfZGVzdHJveV9pbm9kZV9jYWNoZSgpOworCWxvZ2ZzX2NvbXByX2V4aXQoKTsKKwlfX2ZyZWVfcGFnZXMoZW1lcmdlbmN5X3BhZ2UsIDApOworfQorCittb2R1bGVfaW5pdChsb2dmc19pbml0KTsKK21vZHVsZV9leGl0KGxvZ2ZzX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CitNT0RVTEVfQVVUSE9SKCJKb2VybiBFbmdlbCA8am9lcm5AbG9nZnMub3JnPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJzY2FsYWJsZSBmbGFzaCBmaWxlc3lzdGVtIik7CmRpZmYgLS1naXQgYS9mcy9taW5peC9pbm9kZS5jIGIvZnMvbWluaXgvaW5vZGUuYwppbmRleCA3NGVhODJkLi43NTZmOGM5IDEwMDY0NAotLS0gYS9mcy9taW5peC9pbm9kZS5jCisrKyBiL2ZzL21pbml4L2lub2RlLmMKQEAgLTE3LDggKzE3LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2h1aWQuaD4KICNpbmNsdWRlIDxsaW51eC92ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KIAotc3RhdGljIGludCBtaW5peF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgaW50IHdhaXQpOworc3RhdGljIGludCBtaW5peF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CiBzdGF0aWMgaW50IG1pbml4X3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpOwogc3RhdGljIGludCBtaW5peF9yZW1vdW50IChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgaW50ICogZmxhZ3MsIGNoYXIgKiBkYXRhKTsKIApAQCAtNTUyLDcgKzU1NCw3IEBACiAJcmV0dXJuIGJoOwogfQogCi1zdGF0aWMgaW50IG1pbml4X3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KQorc3RhdGljIGludCBtaW5peF93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwpAQCAtNTYzLDcgKzU2NSw3IEBACiAJCWJoID0gVjJfbWluaXhfdXBkYXRlX2lub2RlKGlub2RlKTsKIAlpZiAoIWJoKQogCQlyZXR1cm4gLUVJTzsKLQlpZiAod2FpdCAmJiBidWZmZXJfZGlydHkoYmgpKSB7CisJaWYgKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMICYmIGJ1ZmZlcl9kaXJ0eShiaCkpIHsKIAkJc3luY19kaXJ0eV9idWZmZXIoYmgpOwogCQlpZiAoYnVmZmVyX3JlcShiaCkgJiYgIWJ1ZmZlcl91cHRvZGF0ZShiaCkpIHsKIAkJCXByaW50aygiSU8gZXJyb3Igc3luY2luZyBtaW5peCBpbm9kZSBbJXM6JTA4bHhdXG4iLApkaWZmIC0tZ2l0IGEvZnMvbXBhZ2UuYyBiL2ZzL21wYWdlLmMKaW5kZXggNDIzODFiZC4uNTk4ZDU0ZSAxMDA2NDQKLS0tIGEvZnMvbXBhZ2UuYworKysgYi9mcy9tcGFnZS5jCkBAIC01NjEsNyArNTYxLDcgQEAKIAlpZiAocGFnZS0+aW5kZXggPj0gZW5kX2luZGV4KSB7CiAJCS8qCiAJCSAqIFRoZSBwYWdlIHN0cmFkZGxlcyBpX3NpemUuICBJdCBtdXN0IGJlIHplcm9lZCBvdXQgb24gZWFjaAotCQkgKiBhbmQgZXZlcnkgd3JpdGVwYWdlIGludm9rYXRpb24gYmVjYXVzZSBpdCBtYXkgYmUgbW1hcHBlZC4KKwkJICogYW5kIGV2ZXJ5IHdyaXRlcGFnZSBpbnZvY2F0aW9uIGJlY2F1c2UgaXQgbWF5IGJlIG1tYXBwZWQuCiAJCSAqICJBIGZpbGUgaXMgbWFwcGVkIGluIG11bHRpcGxlcyBvZiB0aGUgcGFnZSBzaXplLiAgRm9yIGEgZmlsZQogCQkgKiB0aGF0IGlzIG5vdCBhIG11bHRpcGxlIG9mIHRoZSBwYWdlIHNpemUsIHRoZSByZW1haW5pbmcgbWVtb3J5CiAJCSAqIGlzIHplcm9lZCB3aGVuIG1hcHBlZCwgYW5kIHdyaXRlcyB0byB0aGF0IHJlZ2lvbiBhcmUgbm90CmRpZmYgLS1naXQgYS9mcy9uYW1laS5jIGIvZnMvbmFtZWkuYwppbmRleCBhNDg1NWFmLi4xYzBmY2E2IDEwMDY0NAotLS0gYS9mcy9uYW1laS5jCisrKyBiL2ZzL25hbWVpLmMKQEAgLTE5LDcgKzE5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgotI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2Zzbm90aWZ5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KQEAgLTQ5OCw4ICs0OTcsNiBAQAogCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIGludCBfX3Zmc19mb2xsb3dfbGluayhzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgY29uc3QgY2hhciAqbGluaykKIHsKLQlpbnQgcmVzID0gMDsKLQljaGFyICpuYW1lOwogCWlmIChJU19FUlIobGluaykpCiAJCWdvdG8gZmFpbDsKIApAQCAtNTEwLDIyICs1MDcsNyBAQAogCQlwYXRoX2dldCgmbmQtPnJvb3QpOwogCX0KIAotCXJlcyA9IGxpbmtfcGF0aF93YWxrKGxpbmssIG5kKTsKLQlpZiAobmQtPmRlcHRoIHx8IHJlcyB8fCBuZC0+bGFzdF90eXBlIT1MQVNUX05PUk0pCi0JCXJldHVybiByZXM7Ci0JLyoKLQkgKiBJZiBpdCBpcyBhbiBpdGVyYXRpdmUgc3ltbGlua3MgcmVzb2x1dGlvbiBpbiBvcGVuX25hbWVpKCkgd2UKLQkgKiBoYXZlIHRvIGNvcHkgdGhlIGxhc3QgY29tcG9uZW50LiBBbmQgYWxsIHRoYXQgY3JhcCBiZWNhdXNlIG9mCi0JICogYmxvb2R5IGNyZWF0ZSgpIG9uIGJyb2tlbiBzeW1saW5rcy4gRnVycmZ1Li4uCi0JICovCi0JbmFtZSA9IF9fZ2V0bmFtZSgpOwotCWlmICh1bmxpa2VseSghbmFtZSkpIHsKLQkJcGF0aF9wdXQoJm5kLT5wYXRoKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXN0cmNweShuYW1lLCBuZC0+bGFzdC5uYW1lKTsKLQluZC0+bGFzdC5uYW1lID0gbmFtZTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gbGlua19wYXRoX3dhbGsobGluaywgbmQpOwogZmFpbDoKIAlwYXRoX3B1dCgmbmQtPnBhdGgpOwogCXJldHVybiBQVFJfRVJSKGxpbmspOwpAQCAtNTQ3LDEwICs1MjksMTAgQEAKIAluZC0+cGF0aC5kZW50cnkgPSBwYXRoLT5kZW50cnk7CiB9CiAKLXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IF9fZG9fZm9sbG93X2xpbmsoc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQKK19fZG9fZm9sbG93X2xpbmsoc3RydWN0IHBhdGggKnBhdGgsIHN0cnVjdCBuYW1laWRhdGEgKm5kLCB2b2lkICoqcCkKIHsKIAlpbnQgZXJyb3I7Ci0Jdm9pZCAqY29va2llOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IHBhdGgtPmRlbnRyeTsKIAogCXRvdWNoX2F0aW1lKHBhdGgtPm1udCwgZGVudHJ5KTsKQEAgLTU2Miw5ICs1NDQsOSBAQAogCX0KIAltbnRnZXQocGF0aC0+bW50KTsKIAluZC0+bGFzdF90eXBlID0gTEFTVF9CSU5EOwotCWNvb2tpZSA9IGRlbnRyeS0+ZF9pbm9kZS0+aV9vcC0+Zm9sbG93X2xpbmsoZGVudHJ5LCBuZCk7Ci0JZXJyb3IgPSBQVFJfRVJSKGNvb2tpZSk7Ci0JaWYgKCFJU19FUlIoY29va2llKSkgeworCSpwID0gZGVudHJ5LT5kX2lub2RlLT5pX29wLT5mb2xsb3dfbGluayhkZW50cnksIG5kKTsKKwllcnJvciA9IFBUUl9FUlIoKnApOworCWlmICghSVNfRVJSKCpwKSkgewogCQljaGFyICpzID0gbmRfZ2V0X2xpbmsobmQpOwogCQllcnJvciA9IDA7CiAJCWlmIChzKQpAQCAtNTc0LDggKzU1Niw2IEBACiAJCQlpZiAoZXJyb3IpCiAJCQkJcGF0aF9wdXQoJm5kLT5wYXRoKTsKIAkJfQotCQlpZiAoZGVudHJ5LT5kX2lub2RlLT5pX29wLT5wdXRfbGluaykKLQkJCWRlbnRyeS0+ZF9pbm9kZS0+aV9vcC0+cHV0X2xpbmsoZGVudHJ5LCBuZCwgY29va2llKTsKIAl9CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtNTg5LDYgKzU2OSw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGRvX2ZvbGxvd19saW5rKHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKKwl2b2lkICpjb29raWU7CiAJaW50IGVyciA9IC1FTE9PUDsKIAlpZiAoY3VycmVudC0+bGlua19jb3VudCA+PSBNQVhfTkVTVEVEX0xJTktTKQogCQlnb3RvIGxvb3A7CkBAIC02MDIsNyArNTgzLDkgQEAKIAljdXJyZW50LT5saW5rX2NvdW50Kys7CiAJY3VycmVudC0+dG90YWxfbGlua19jb3VudCsrOwogCW5kLT5kZXB0aCsrOwotCWVyciA9IF9fZG9fZm9sbG93X2xpbmsocGF0aCwgbmQpOworCWVyciA9IF9fZG9fZm9sbG93X2xpbmsocGF0aCwgbmQsICZjb29raWUpOworCWlmICghSVNfRVJSKGNvb2tpZSkgJiYgcGF0aC0+ZGVudHJ5LT5kX2lub2RlLT5pX29wLT5wdXRfbGluaykKKwkJcGF0aC0+ZGVudHJ5LT5kX2lub2RlLT5pX29wLT5wdXRfbGluayhwYXRoLT5kZW50cnksIG5kLCBjb29raWUpOwogCXBhdGhfcHV0KHBhdGgpOwogCWN1cnJlbnQtPmxpbmtfY291bnQtLTsKIAluZC0+ZGVwdGgtLTsKQEAgLTY4OSwzMyArNjcyLDIwIEBACiAJc2V0X3Jvb3QobmQpOwogCiAJd2hpbGUoMSkgewotCQlzdHJ1Y3QgdmZzbW91bnQgKnBhcmVudDsKIAkJc3RydWN0IGRlbnRyeSAqb2xkID0gbmQtPnBhdGguZGVudHJ5OwogCiAJCWlmIChuZC0+cGF0aC5kZW50cnkgPT0gbmQtPnJvb3QuZGVudHJ5ICYmCiAJCSAgICBuZC0+cGF0aC5tbnQgPT0gbmQtPnJvb3QubW50KSB7CiAJCQlicmVhazsKIAkJfQotCQlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKIAkJaWYgKG5kLT5wYXRoLmRlbnRyeSAhPSBuZC0+cGF0aC5tbnQtPm1udF9yb290KSB7Ci0JCQluZC0+cGF0aC5kZW50cnkgPSBkZ2V0KG5kLT5wYXRoLmRlbnRyeS0+ZF9wYXJlbnQpOwotCQkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKKwkJCS8qIHJhcmUgY2FzZSBvZiBsZWdpdGltYXRlIGRnZXRfcGFyZW50KCkuLi4gKi8KKwkJCW5kLT5wYXRoLmRlbnRyeSA9IGRnZXRfcGFyZW50KG5kLT5wYXRoLmRlbnRyeSk7CiAJCQlkcHV0KG9sZCk7CiAJCQlicmVhazsKIAkJfQotCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwotCQlzcGluX2xvY2soJnZmc21vdW50X2xvY2spOwotCQlwYXJlbnQgPSBuZC0+cGF0aC5tbnQtPm1udF9wYXJlbnQ7Ci0JCWlmIChwYXJlbnQgPT0gbmQtPnBhdGgubW50KSB7Ci0JCQlzcGluX3VubG9jaygmdmZzbW91bnRfbG9jayk7CisJCWlmICghZm9sbG93X3VwKCZuZC0+cGF0aCkpCiAJCQlicmVhazsKLQkJfQotCQltbnRnZXQocGFyZW50KTsKLQkJbmQtPnBhdGguZGVudHJ5ID0gZGdldChuZC0+cGF0aC5tbnQtPm1udF9tb3VudHBvaW50KTsKLQkJc3Bpbl91bmxvY2soJnZmc21vdW50X2xvY2spOwotCQlkcHV0KG9sZCk7Ci0JCW1udHB1dChuZC0+cGF0aC5tbnQpOwotCQluZC0+cGF0aC5tbnQgPSBwYXJlbnQ7CiAJfQogCWZvbGxvd19tb3VudCgmbmQtPnBhdGgpOwogfQpAQCAtMTM0Nyw3ICsxMzE3LDcgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlCVUdfT04odmljdGltLT5kX3BhcmVudC0+ZF9pbm9kZSAhPSBkaXIpOwotCWF1ZGl0X2lub2RlX2NoaWxkKHZpY3RpbS0+ZF9uYW1lLm5hbWUsIHZpY3RpbSwgZGlyKTsKKwlhdWRpdF9pbm9kZV9jaGlsZCh2aWN0aW0sIGRpcik7CiAKIAllcnJvciA9IGlub2RlX3Blcm1pc3Npb24oZGlyLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7CiAJaWYgKGVycm9yKQpAQCAtMTM4OCwyMiArMTM1OCw2IEBACiAJcmV0dXJuIGlub2RlX3Blcm1pc3Npb24oZGlyLCBNQVlfV1JJVEUgfCBNQVlfRVhFQyk7CiB9CiAKLS8qIAotICogT19ESVJFQ1RPUlkgdHJhbnNsYXRlcyBpbnRvIGZvcmNpbmcgYSBkaXJlY3RvcnkgbG9va3VwLgotICovCi1zdGF0aWMgaW5saW5lIGludCBsb29rdXBfZmxhZ3ModW5zaWduZWQgaW50IGYpCi17Ci0JdW5zaWduZWQgbG9uZyByZXR2YWwgPSBMT09LVVBfRk9MTE9XOwotCi0JaWYgKGYgJiBPX05PRk9MTE9XKQotCQlyZXR2YWwgJj0gfkxPT0tVUF9GT0xMT1c7Ci0JCi0JaWYgKGYgJiBPX0RJUkVDVE9SWSkKLQkJcmV0dmFsIHw9IExPT0tVUF9ESVJFQ1RPUlk7Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCiAvKgogICogcDEgYW5kIHAyIHNob3VsZCBiZSBkaXJlY3RvcmllcyBvbiB0aGUgc2FtZSBmcy4KICAqLwpAQCAtMTQ2MSw3ICsxNDE1LDYgQEAKIAllcnJvciA9IHNlY3VyaXR5X2lub2RlX2NyZWF0ZShkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7Ci0JdmZzX2RxX2luaXQoZGlyKTsKIAllcnJvciA9IGRpci0+aV9vcC0+Y3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlLCBuZCk7CiAJaWYgKCFlcnJvcikKIAkJZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTsKQEAgLTE1MDMsNyArMTQ1Niw3IEBACiAJICogQW4gYXBwZW5kLW9ubHkgZmlsZSBtdXN0IGJlIG9wZW5lZCBpbiBhcHBlbmQgbW9kZSBmb3Igd3JpdGluZy4KIAkgKi8KIAlpZiAoSVNfQVBQRU5EKGlub2RlKSkgewotCQlpZiAgKChmbGFnICYgRk1PREVfV1JJVEUpICYmICEoZmxhZyAmIE9fQVBQRU5EKSkKKwkJaWYgICgoZmxhZyAmIE9fQUNDTU9ERSkgIT0gT19SRE9OTFkgJiYgIShmbGFnICYgT19BUFBFTkQpKQogCQkJcmV0dXJuIC1FUEVSTTsKIAkJaWYgKGZsYWcgJiBPX1RSVU5DKQogCQkJcmV0dXJuIC1FUEVSTTsKQEAgLTE1NDcsNyArMTUwMCw3IEBACiAgKiB3aGF0IGdldCBwYXNzZWQgdG8gc3lzX29wZW4oKS4KICAqLwogc3RhdGljIGludCBfX29wZW5fbmFtZWlfY3JlYXRlKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgcGF0aCAqcGF0aCwKLQkJCQlpbnQgZmxhZywgaW50IG1vZGUpCisJCQkJaW50IG9wZW5fZmxhZywgaW50IG1vZGUpCiB7CiAJaW50IGVycm9yOwogCXN0cnVjdCBkZW50cnkgKmRpciA9IG5kLT5wYXRoLmRlbnRyeTsKQEAgLTE1NjUsNyArMTUxOCw3IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJLyogRG9uJ3QgY2hlY2sgZm9yIHdyaXRlIHBlcm1pc3Npb24sIGRvbid0IHRydW5jYXRlICovCi0JcmV0dXJuIG1heV9vcGVuKCZuZC0+cGF0aCwgMCwgZmxhZyAmIH5PX1RSVU5DKTsKKwlyZXR1cm4gbWF5X29wZW4oJm5kLT5wYXRoLCAwLCBvcGVuX2ZsYWcgJiB+T19UUlVOQyk7CiB9CiAKIC8qCkBAIC0xNjAzLDEyOSArMTU1NiwxMzIgQEAKIAlyZXR1cm4gKGZsYWcgJiBPX1RSVU5DKTsKIH0KIAotLyoKLSAqIE5vdGUgdGhhdCB0aGUgbG93IGJpdHMgb2YgdGhlIHBhc3NlZCBpbiAib3Blbl9mbGFnIgotICogYXJlIG5vdCB0aGUgc2FtZSBhcyBpbiB0aGUgbG9jYWwgdmFyaWFibGUgImZsYWciLiBTZWUKLSAqIG9wZW5fdG9fbmFtZWlfZmxhZ3MoKSBmb3IgbW9yZSBkZXRhaWxzLgotICovCi1zdHJ1Y3QgZmlsZSAqZG9fZmlscF9vcGVuKGludCBkZmQsIGNvbnN0IGNoYXIgKnBhdGhuYW1lLAotCQlpbnQgb3Blbl9mbGFnLCBpbnQgbW9kZSwgaW50IGFjY19tb2RlKQorc3RhdGljIHN0cnVjdCBmaWxlICpmaW5pc2hfb3BlbihzdHJ1Y3QgbmFtZWlkYXRhICpuZCwKKwkJCQlpbnQgb3Blbl9mbGFnLCBpbnQgYWNjX21vZGUpCiB7CiAJc3RydWN0IGZpbGUgKmZpbHA7Ci0Jc3RydWN0IG5hbWVpZGF0YSBuZDsKLQlpbnQgZXJyb3I7Ci0Jc3RydWN0IHBhdGggcGF0aDsKLQlzdHJ1Y3QgZGVudHJ5ICpkaXI7Ci0JaW50IGNvdW50ID0gMDsKIAlpbnQgd2lsbF90cnVuY2F0ZTsKLQlpbnQgZmxhZyA9IG9wZW5fdG9fbmFtZWlfZmxhZ3Mob3Blbl9mbGFnKTsKLQlpbnQgZm9yY2VfcmV2YWwgPSAwOworCWludCBlcnJvcjsKIAotCS8qCi0JICogT19TWU5DIGlzIGltcGxlbWVudGVkIGFzIF9fT19TWU5DfE9fRFNZTkMuICBBcyBtYW55IHBsYWNlcyBvbmx5Ci0JICogY2hlY2sgZm9yIE9fRFNZTkMgaWYgdGhlIG5lZWQgYW55IHN5bmNpbmcgYXQgYWxsIHdlIGVuZm9yY2UgaXQncwotCSAqIGFsd2F5cyBzZXQgaW5zdGVhZCBvZiBoYXZpbmcgdG8gZGVhbCB3aXRoIHBvc3NpYmx5IHdlaXJkIGJlaGF2aW91cgotCSAqIGZvciBtYWxpY2lvdXMgYXBwbGljYXRpb25zIHNldHRpbmcgb25seSBfX09fU1lOQy4KLQkgKi8KLQlpZiAob3Blbl9mbGFnICYgX19PX1NZTkMpCi0JCW9wZW5fZmxhZyB8PSBPX0RTWU5DOwotCi0JaWYgKCFhY2NfbW9kZSkKLQkJYWNjX21vZGUgPSBNQVlfT1BFTiB8IEFDQ19NT0RFKG9wZW5fZmxhZyk7Ci0KLQkvKiBPX1RSVU5DIGltcGxpZXMgd2UgbmVlZCBhY2Nlc3MgY2hlY2tzIGZvciB3cml0ZSBwZXJtaXNzaW9ucyAqLwotCWlmIChmbGFnICYgT19UUlVOQykKLQkJYWNjX21vZGUgfD0gTUFZX1dSSVRFOwotCi0JLyogQWxsb3cgdGhlIExTTSBwZXJtaXNzaW9uIGhvb2sgdG8gZGlzdGluZ3Vpc2ggYXBwZW5kIAotCSAgIGFjY2VzcyBmcm9tIGdlbmVyYWwgd3JpdGUgYWNjZXNzLiAqLwotCWlmIChmbGFnICYgT19BUFBFTkQpCi0JCWFjY19tb2RlIHw9IE1BWV9BUFBFTkQ7Ci0KLQkvKgotCSAqIFRoZSBzaW1wbGVzdCBjYXNlIC0ganVzdCBhIHBsYWluIGxvb2t1cC4KLQkgKi8KLQlpZiAoIShmbGFnICYgT19DUkVBVCkpIHsKLQkJZmlscCA9IGdldF9lbXB0eV9maWxwKCk7Ci0KLQkJaWYgKGZpbHAgPT0gTlVMTCkKLQkJCXJldHVybiBFUlJfUFRSKC1FTkZJTEUpOwotCQluZC5pbnRlbnQub3Blbi5maWxlID0gZmlscDsKLQkJZmlscC0+Zl9mbGFncyA9IG9wZW5fZmxhZzsKLQkJbmQuaW50ZW50Lm9wZW4uZmxhZ3MgPSBmbGFnOwotCQluZC5pbnRlbnQub3Blbi5jcmVhdGVfbW9kZSA9IDA7Ci0JCWVycm9yID0gZG9fcGF0aF9sb29rdXAoZGZkLCBwYXRobmFtZSwKLQkJCQkJbG9va3VwX2ZsYWdzKGZsYWcpfExPT0tVUF9PUEVOLCAmbmQpOwotCQlpZiAoSVNfRVJSKG5kLmludGVudC5vcGVuLmZpbGUpKSB7Ci0JCQlpZiAoZXJyb3IgPT0gMCkgewotCQkJCWVycm9yID0gUFRSX0VSUihuZC5pbnRlbnQub3Blbi5maWxlKTsKLQkJCQlwYXRoX3B1dCgmbmQucGF0aCk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoZXJyb3IpCi0JCQlyZWxlYXNlX29wZW5faW50ZW50KCZuZCk7CisJd2lsbF90cnVuY2F0ZSA9IG9wZW5fd2lsbF90cnVuY2F0ZShvcGVuX2ZsYWcsIG5kLT5wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7CisJaWYgKHdpbGxfdHJ1bmNhdGUpIHsKKwkJZXJyb3IgPSBtbnRfd2FudF93cml0ZShuZC0+cGF0aC5tbnQpOwogCQlpZiAoZXJyb3IpCi0JCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CisJCQlnb3RvIGV4aXQ7CisJfQorCWVycm9yID0gbWF5X29wZW4oJm5kLT5wYXRoLCBhY2NfbW9kZSwgb3Blbl9mbGFnKTsKKwlpZiAoZXJyb3IpIHsKKwkJaWYgKHdpbGxfdHJ1bmNhdGUpCisJCQltbnRfZHJvcF93cml0ZShuZC0+cGF0aC5tbnQpOworCQlnb3RvIGV4aXQ7CisJfQorCWZpbHAgPSBuYW1laWRhdGFfdG9fZmlscChuZCk7CisJaWYgKCFJU19FUlIoZmlscCkpIHsKKwkJZXJyb3IgPSBpbWFfZmlsZV9jaGVjayhmaWxwLCBhY2NfbW9kZSk7CisJCWlmIChlcnJvcikgeworCQkJZnB1dChmaWxwKTsKKwkJCWZpbHAgPSBFUlJfUFRSKGVycm9yKTsKKwkJfQorCX0KKwlpZiAoIUlTX0VSUihmaWxwKSkgeworCQlpZiAod2lsbF90cnVuY2F0ZSkgeworCQkJZXJyb3IgPSBoYW5kbGVfdHJ1bmNhdGUoJm5kLT5wYXRoKTsKKwkJCWlmIChlcnJvcikgeworCQkJCWZwdXQoZmlscCk7CisJCQkJZmlscCA9IEVSUl9QVFIoZXJyb3IpOworCQkJfQorCQl9CisJfQorCS8qCisJICogSXQgaXMgbm93IHNhZmUgdG8gZHJvcCB0aGUgbW50IHdyaXRlCisJICogYmVjYXVzZSB0aGUgZmlscCBoYXMgaGFkIGEgd3JpdGUgdGFrZW4KKwkgKiBvbiBpdHMgYmVoYWxmLgorCSAqLworCWlmICh3aWxsX3RydW5jYXRlKQorCQltbnRfZHJvcF93cml0ZShuZC0+cGF0aC5tbnQpOworCXJldHVybiBmaWxwOworCitleGl0OgorCWlmICghSVNfRVJSKG5kLT5pbnRlbnQub3Blbi5maWxlKSkKKwkJcmVsZWFzZV9vcGVuX2ludGVudChuZCk7CisJcGF0aF9wdXQoJm5kLT5wYXRoKTsKKwlyZXR1cm4gRVJSX1BUUihlcnJvcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZSAqZG9fbGFzdChzdHJ1Y3QgbmFtZWlkYXRhICpuZCwgc3RydWN0IHBhdGggKnBhdGgsCisJCQkgICAgaW50IG9wZW5fZmxhZywgaW50IGFjY19tb2RlLAorCQkJICAgIGludCBtb2RlLCBjb25zdCBjaGFyICpwYXRobmFtZSwKKwkJCSAgICBpbnQgKndhbnRfZGlyKQoreworCXN0cnVjdCBkZW50cnkgKmRpciA9IG5kLT5wYXRoLmRlbnRyeTsKKwlzdHJ1Y3QgZmlsZSAqZmlscDsKKwlpbnQgZXJyb3IgPSAtRUlTRElSOworCisJc3dpdGNoIChuZC0+bGFzdF90eXBlKSB7CisJY2FzZSBMQVNUX0RPVERPVDoKKwkJZm9sbG93X2RvdGRvdChuZCk7CisJCWRpciA9IG5kLT5wYXRoLmRlbnRyeTsKKwkJaWYgKG5kLT5wYXRoLm1udC0+bW50X3NiLT5zX3R5cGUtPmZzX2ZsYWdzICYgRlNfUkVWQUxfRE9UKSB7CisJCQlpZiAoIWRpci0+ZF9vcC0+ZF9yZXZhbGlkYXRlKGRpciwgbmQpKSB7CisJCQkJZXJyb3IgPSAtRVNUQUxFOworCQkJCWdvdG8gZXhpdDsKKwkJCX0KKwkJfQorCQkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgTEFTVF9ET1Q6CisJY2FzZSBMQVNUX1JPT1Q6CisJCWlmIChvcGVuX2ZsYWcgJiBPX0NSRUFUKQorCQkJZ290byBleGl0OworCQkvKiBmYWxsdGhyb3VnaCAqLworCWNhc2UgTEFTVF9CSU5EOgorCQlhdWRpdF9pbm9kZShwYXRobmFtZSwgZGlyKTsKIAkJZ290byBvazsKIAl9CiAKLQkvKgotCSAqIENyZWF0ZSAtIHdlIG5lZWQgdG8ga25vdyB0aGUgcGFyZW50LgotCSAqLwotcmV2YWw6Ci0JZXJyb3IgPSBwYXRoX2luaXQoZGZkLCBwYXRobmFtZSwgTE9PS1VQX1BBUkVOVCwgJm5kKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiBFUlJfUFRSKGVycm9yKTsKLQlpZiAoZm9yY2VfcmV2YWwpCi0JCW5kLmZsYWdzIHw9IExPT0tVUF9SRVZBTDsKLQllcnJvciA9IHBhdGhfd2FsayhwYXRobmFtZSwgJm5kKTsKLQlpZiAoZXJyb3IpIHsKLQkJaWYgKG5kLnJvb3QubW50KQotCQkJcGF0aF9wdXQoJm5kLnJvb3QpOwotCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CisJLyogdHJhaWxpbmcgc2xhc2hlcz8gKi8KKwlpZiAobmQtPmxhc3QubmFtZVtuZC0+bGFzdC5sZW5dKSB7CisJCWlmIChvcGVuX2ZsYWcgJiBPX0NSRUFUKQorCQkJZ290byBleGl0OworCQkqd2FudF9kaXIgPSAxOwogCX0KLQlpZiAodW5saWtlbHkoIWF1ZGl0X2R1bW15X2NvbnRleHQoKSkpCi0JCWF1ZGl0X2lub2RlKHBhdGhuYW1lLCBuZC5wYXRoLmRlbnRyeSk7CiAKLQkvKgotCSAqIFdlIGhhdmUgdGhlIHBhcmVudCBhbmQgbGFzdCBjb21wb25lbnQuIEZpcnN0IG9mIGFsbCwgY2hlY2sKLQkgKiB0aGF0IHdlIGFyZSBub3QgYXNrZWQgdG8gY3JlYXQoMikgYW4gb2J2aW91cyBkaXJlY3RvcnkgLSB0aGF0Ci0JICogd2lsbCBub3QgZG8uCi0JICovCi0JZXJyb3IgPSAtRUlTRElSOwotCWlmIChuZC5sYXN0X3R5cGUgIT0gTEFTVF9OT1JNIHx8IG5kLmxhc3QubmFtZVtuZC5sYXN0Lmxlbl0pCi0JCWdvdG8gZXhpdF9wYXJlbnQ7CisJLyoganVzdCBwbGFpbiBvcGVuPyAqLworCWlmICghKG9wZW5fZmxhZyAmIE9fQ1JFQVQpKSB7CisJCWVycm9yID0gZG9fbG9va3VwKG5kLCAmbmQtPmxhc3QsIHBhdGgpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIGV4aXQ7CisJCWVycm9yID0gLUVOT0VOVDsKKwkJaWYgKCFwYXRoLT5kZW50cnktPmRfaW5vZGUpCisJCQlnb3RvIGV4aXRfZHB1dDsKKwkJaWYgKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZS0+aV9vcC0+Zm9sbG93X2xpbmspCisJCQlyZXR1cm4gTlVMTDsKKwkJZXJyb3IgPSAtRU5PVERJUjsKKwkJaWYgKCp3YW50X2RpciAmJiAhcGF0aC0+ZGVudHJ5LT5kX2lub2RlLT5pX29wLT5sb29rdXApCisJCQlnb3RvIGV4aXRfZHB1dDsKKwkJcGF0aF90b19uYW1laWRhdGEocGF0aCwgbmQpOworCQlhdWRpdF9pbm9kZShwYXRobmFtZSwgbmQtPnBhdGguZGVudHJ5KTsKKwkJZ290byBvazsKKwl9CiAKLQllcnJvciA9IC1FTkZJTEU7Ci0JZmlscCA9IGdldF9lbXB0eV9maWxwKCk7Ci0JaWYgKGZpbHAgPT0gTlVMTCkKLQkJZ290byBleGl0X3BhcmVudDsKLQluZC5pbnRlbnQub3Blbi5maWxlID0gZmlscDsKLQlmaWxwLT5mX2ZsYWdzID0gb3Blbl9mbGFnOwotCW5kLmludGVudC5vcGVuLmZsYWdzID0gZmxhZzsKLQluZC5pbnRlbnQub3Blbi5jcmVhdGVfbW9kZSA9IG1vZGU7Ci0JZGlyID0gbmQucGF0aC5kZW50cnk7Ci0JbmQuZmxhZ3MgJj0gfkxPT0tVUF9QQVJFTlQ7Ci0JbmQuZmxhZ3MgfD0gTE9PS1VQX0NSRUFURSB8IExPT0tVUF9PUEVOOwotCWlmIChmbGFnICYgT19FWENMKQotCQluZC5mbGFncyB8PSBMT09LVVBfRVhDTDsKKwkvKiBPSywgaXQncyBPX0NSRUFUICovCiAJbXV0ZXhfbG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKLQlwYXRoLmRlbnRyeSA9IGxvb2t1cF9oYXNoKCZuZCk7Ci0JcGF0aC5tbnQgPSBuZC5wYXRoLm1udDsKIAotZG9fbGFzdDoKLQllcnJvciA9IFBUUl9FUlIocGF0aC5kZW50cnkpOwotCWlmIChJU19FUlIocGF0aC5kZW50cnkpKSB7CisJcGF0aC0+ZGVudHJ5ID0gbG9va3VwX2hhc2gobmQpOworCXBhdGgtPm1udCA9IG5kLT5wYXRoLm1udDsKKworCWVycm9yID0gUFRSX0VSUihwYXRoLT5kZW50cnkpOworCWlmIChJU19FUlIocGF0aC0+ZGVudHJ5KSkgewogCQltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLQlpZiAoSVNfRVJSKG5kLmludGVudC5vcGVuLmZpbGUpKSB7Ci0JCWVycm9yID0gUFRSX0VSUihuZC5pbnRlbnQub3Blbi5maWxlKTsKKwlpZiAoSVNfRVJSKG5kLT5pbnRlbnQub3Blbi5maWxlKSkgeworCQllcnJvciA9IFBUUl9FUlIobmQtPmludGVudC5vcGVuLmZpbGUpOwogCQlnb3RvIGV4aXRfbXV0ZXhfdW5sb2NrOwogCX0KIAogCS8qIE5lZ2F0aXZlIGRlbnRyeSwganVzdCBjcmVhdGUgdGhlIGZpbGUgKi8KLQlpZiAoIXBhdGguZGVudHJ5LT5kX2lub2RlKSB7CisJaWYgKCFwYXRoLT5kZW50cnktPmRfaW5vZGUpIHsKIAkJLyoKIAkJICogVGhpcyB3cml0ZSBpcyBuZWVkZWQgdG8gZW5zdXJlIHRoYXQgYQogCQkgKiByby0+cncgdHJhbnNpdGlvbiBkb2VzIG5vdCBvY2N1ciBiZXR3ZWVuCkBAIC0xNzMzLDE4ICsxNjg5LDE2IEBACiAJCSAqIGEgcGVybWFuZW50IHdyaXRlIGNvdW50IGlzIHRha2VuIHRocm91Z2gKIAkJICogdGhlICdzdHJ1Y3QgZmlsZScgaW4gbmFtZWlkYXRhX3RvX2ZpbHAoKS4KIAkJICovCi0JCWVycm9yID0gbW50X3dhbnRfd3JpdGUobmQucGF0aC5tbnQpOworCQllcnJvciA9IG1udF93YW50X3dyaXRlKG5kLT5wYXRoLm1udCk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gZXhpdF9tdXRleF91bmxvY2s7Ci0JCWVycm9yID0gX19vcGVuX25hbWVpX2NyZWF0ZSgmbmQsICZwYXRoLCBmbGFnLCBtb2RlKTsKKwkJZXJyb3IgPSBfX29wZW5fbmFtZWlfY3JlYXRlKG5kLCBwYXRoLCBvcGVuX2ZsYWcsIG1vZGUpOwogCQlpZiAoZXJyb3IpIHsKLQkJCW1udF9kcm9wX3dyaXRlKG5kLnBhdGgubW50KTsKKwkJCW1udF9kcm9wX3dyaXRlKG5kLT5wYXRoLm1udCk7CiAJCQlnb3RvIGV4aXQ7CiAJCX0KLQkJZmlscCA9IG5hbWVpZGF0YV90b19maWxwKCZuZCk7Ci0JCW1udF9kcm9wX3dyaXRlKG5kLnBhdGgubW50KTsKLQkJaWYgKG5kLnJvb3QubW50KQotCQkJcGF0aF9wdXQoJm5kLnJvb3QpOworCQlmaWxwID0gbmFtZWlkYXRhX3RvX2ZpbHAobmQpOworCQltbnRfZHJvcF93cml0ZShuZC0+cGF0aC5tbnQpOwogCQlpZiAoIUlTX0VSUihmaWxwKSkgewogCQkJZXJyb3IgPSBpbWFfZmlsZV9jaGVjayhmaWxwLCBhY2NfbW9kZSk7CiAJCQlpZiAoZXJyb3IpIHsKQEAgLTE3NTksMTUwICsxNzEzLDE4MSBAQAogCSAqIEl0IGFscmVhZHkgZXhpc3RzLgogCSAqLwogCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKLQlhdWRpdF9pbm9kZShwYXRobmFtZSwgcGF0aC5kZW50cnkpOworCWF1ZGl0X2lub2RlKHBhdGhuYW1lLCBwYXRoLT5kZW50cnkpOwogCiAJZXJyb3IgPSAtRUVYSVNUOwotCWlmIChmbGFnICYgT19FWENMKQorCWlmIChvcGVuX2ZsYWcgJiBPX0VYQ0wpCiAJCWdvdG8gZXhpdF9kcHV0OwogCi0JaWYgKF9fZm9sbG93X21vdW50KCZwYXRoKSkgeworCWlmIChfX2ZvbGxvd19tb3VudChwYXRoKSkgewogCQllcnJvciA9IC1FTE9PUDsKLQkJaWYgKGZsYWcgJiBPX05PRk9MTE9XKQorCQlpZiAob3Blbl9mbGFnICYgT19OT0ZPTExPVykKIAkJCWdvdG8gZXhpdF9kcHV0OwogCX0KIAogCWVycm9yID0gLUVOT0VOVDsKLQlpZiAoIXBhdGguZGVudHJ5LT5kX2lub2RlKQorCWlmICghcGF0aC0+ZGVudHJ5LT5kX2lub2RlKQogCQlnb3RvIGV4aXRfZHB1dDsKLQlpZiAocGF0aC5kZW50cnktPmRfaW5vZGUtPmlfb3AtPmZvbGxvd19saW5rKQotCQlnb3RvIGRvX2xpbms7CiAKLQlwYXRoX3RvX25hbWVpZGF0YSgmcGF0aCwgJm5kKTsKKwlpZiAocGF0aC0+ZGVudHJ5LT5kX2lub2RlLT5pX29wLT5mb2xsb3dfbGluaykKKwkJcmV0dXJuIE5VTEw7CisKKwlwYXRoX3RvX25hbWVpZGF0YShwYXRoLCBuZCk7CiAJZXJyb3IgPSAtRUlTRElSOwotCWlmIChTX0lTRElSKHBhdGguZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQorCWlmIChTX0lTRElSKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkKIAkJZ290byBleGl0Owogb2s6Ci0JLyoKLQkgKiBDb25zaWRlcjoKLQkgKiAxLiBtYXlfb3BlbigpIHRydW5jYXRlcyBhIGZpbGUKLQkgKiAyLiBhIHJ3LT5ybyBtb3VudCB0cmFuc2l0aW9uIG9jY3VycwotCSAqIDMuIG5hbWVpZGF0YV90b19maWxwKCkgZmFpbHMgZHVlIHRvCi0JICogICAgdGhlIHJvIG1vdW50LgotCSAqIFRoYXQgd291bGQgYmUgaW5jb25zaXN0ZW50LCBhbmQgc2hvdWxkCi0JICogYmUgYXZvaWRlZC4gVGFraW5nIHRoaXMgbW50IHdyaXRlIGhlcmUKLQkgKiBlbnN1cmVzIHRoYXQgKDIpIGNhbiBub3Qgb2NjdXIuCi0JICovCi0Jd2lsbF90cnVuY2F0ZSA9IG9wZW5fd2lsbF90cnVuY2F0ZShmbGFnLCBuZC5wYXRoLmRlbnRyeS0+ZF9pbm9kZSk7Ci0JaWYgKHdpbGxfdHJ1bmNhdGUpIHsKLQkJZXJyb3IgPSBtbnRfd2FudF93cml0ZShuZC5wYXRoLm1udCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gZXhpdDsKLQl9Ci0JZXJyb3IgPSBtYXlfb3BlbigmbmQucGF0aCwgYWNjX21vZGUsIGZsYWcpOwotCWlmIChlcnJvcikgewotCQlpZiAod2lsbF90cnVuY2F0ZSkKLQkJCW1udF9kcm9wX3dyaXRlKG5kLnBhdGgubW50KTsKLQkJZ290byBleGl0OwotCX0KLQlmaWxwID0gbmFtZWlkYXRhX3RvX2ZpbHAoJm5kKTsKLQlpZiAoIUlTX0VSUihmaWxwKSkgewotCQllcnJvciA9IGltYV9maWxlX2NoZWNrKGZpbHAsIGFjY19tb2RlKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlmcHV0KGZpbHApOwotCQkJZmlscCA9IEVSUl9QVFIoZXJyb3IpOwotCQl9Ci0JfQotCWlmICghSVNfRVJSKGZpbHApKSB7Ci0JCWlmIChhY2NfbW9kZSAmIE1BWV9XUklURSkKLQkJCXZmc19kcV9pbml0KG5kLnBhdGguZGVudHJ5LT5kX2lub2RlKTsKLQotCQlpZiAod2lsbF90cnVuY2F0ZSkgewotCQkJZXJyb3IgPSBoYW5kbGVfdHJ1bmNhdGUoJm5kLnBhdGgpOwotCQkJaWYgKGVycm9yKSB7Ci0JCQkJZnB1dChmaWxwKTsKLQkJCQlmaWxwID0gRVJSX1BUUihlcnJvcik7Ci0JCQl9Ci0JCX0KLQl9Ci0JLyoKLQkgKiBJdCBpcyBub3cgc2FmZSB0byBkcm9wIHRoZSBtbnQgd3JpdGUKLQkgKiBiZWNhdXNlIHRoZSBmaWxwIGhhcyBoYWQgYSB3cml0ZSB0YWtlbgotCSAqIG9uIGl0cyBiZWhhbGYuCi0JICovCi0JaWYgKHdpbGxfdHJ1bmNhdGUpCi0JCW1udF9kcm9wX3dyaXRlKG5kLnBhdGgubW50KTsKLQlpZiAobmQucm9vdC5tbnQpCi0JCXBhdGhfcHV0KCZuZC5yb290KTsKKwlmaWxwID0gZmluaXNoX29wZW4obmQsIG9wZW5fZmxhZywgYWNjX21vZGUpOwogCXJldHVybiBmaWxwOwogCiBleGl0X211dGV4X3VubG9jazoKIAltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CiBleGl0X2RwdXQ6Ci0JcGF0aF9wdXRfY29uZGl0aW9uYWwoJnBhdGgsICZuZCk7CisJcGF0aF9wdXRfY29uZGl0aW9uYWwocGF0aCwgbmQpOwogZXhpdDoKKwlpZiAoIUlTX0VSUihuZC0+aW50ZW50Lm9wZW4uZmlsZSkpCisJCXJlbGVhc2Vfb3Blbl9pbnRlbnQobmQpOworCXBhdGhfcHV0KCZuZC0+cGF0aCk7CisJcmV0dXJuIEVSUl9QVFIoZXJyb3IpOworfQorCisvKgorICogTm90ZSB0aGF0IHRoZSBsb3cgYml0cyBvZiB0aGUgcGFzc2VkIGluICJvcGVuX2ZsYWciCisgKiBhcmUgbm90IHRoZSBzYW1lIGFzIGluIHRoZSBsb2NhbCB2YXJpYWJsZSAiZmxhZyIuIFNlZQorICogb3Blbl90b19uYW1laV9mbGFncygpIGZvciBtb3JlIGRldGFpbHMuCisgKi8KK3N0cnVjdCBmaWxlICpkb19maWxwX29wZW4oaW50IGRmZCwgY29uc3QgY2hhciAqcGF0aG5hbWUsCisJCWludCBvcGVuX2ZsYWcsIGludCBtb2RlLCBpbnQgYWNjX21vZGUpCit7CisJc3RydWN0IGZpbGUgKmZpbHA7CisJc3RydWN0IG5hbWVpZGF0YSBuZDsKKwlpbnQgZXJyb3I7CisJc3RydWN0IHBhdGggcGF0aDsKKwlpbnQgY291bnQgPSAwOworCWludCBmbGFnID0gb3Blbl90b19uYW1laV9mbGFncyhvcGVuX2ZsYWcpOworCWludCBmb3JjZV9yZXZhbCA9IDA7CisJaW50IHdhbnRfZGlyID0gb3Blbl9mbGFnICYgT19ESVJFQ1RPUlk7CisKKwlpZiAoIShvcGVuX2ZsYWcgJiBPX0NSRUFUKSkKKwkJbW9kZSA9IDA7CisKKwkvKgorCSAqIE9fU1lOQyBpcyBpbXBsZW1lbnRlZCBhcyBfX09fU1lOQ3xPX0RTWU5DLiAgQXMgbWFueSBwbGFjZXMgb25seQorCSAqIGNoZWNrIGZvciBPX0RTWU5DIGlmIHRoZSBuZWVkIGFueSBzeW5jaW5nIGF0IGFsbCB3ZSBlbmZvcmNlIGl0J3MKKwkgKiBhbHdheXMgc2V0IGluc3RlYWQgb2YgaGF2aW5nIHRvIGRlYWwgd2l0aCBwb3NzaWJseSB3ZWlyZCBiZWhhdmlvdXIKKwkgKiBmb3IgbWFsaWNpb3VzIGFwcGxpY2F0aW9ucyBzZXR0aW5nIG9ubHkgX19PX1NZTkMuCisJICovCisJaWYgKG9wZW5fZmxhZyAmIF9fT19TWU5DKQorCQlvcGVuX2ZsYWcgfD0gT19EU1lOQzsKKworCWlmICghYWNjX21vZGUpCisJCWFjY19tb2RlID0gTUFZX09QRU4gfCBBQ0NfTU9ERShvcGVuX2ZsYWcpOworCisJLyogT19UUlVOQyBpbXBsaWVzIHdlIG5lZWQgYWNjZXNzIGNoZWNrcyBmb3Igd3JpdGUgcGVybWlzc2lvbnMgKi8KKwlpZiAob3Blbl9mbGFnICYgT19UUlVOQykKKwkJYWNjX21vZGUgfD0gTUFZX1dSSVRFOworCisJLyogQWxsb3cgdGhlIExTTSBwZXJtaXNzaW9uIGhvb2sgdG8gZGlzdGluZ3Vpc2ggYXBwZW5kIAorCSAgIGFjY2VzcyBmcm9tIGdlbmVyYWwgd3JpdGUgYWNjZXNzLiAqLworCWlmIChvcGVuX2ZsYWcgJiBPX0FQUEVORCkKKwkJYWNjX21vZGUgfD0gTUFZX0FQUEVORDsKKworCS8qIGZpbmQgdGhlIHBhcmVudCAqLworcmV2YWw6CisJZXJyb3IgPSBwYXRoX2luaXQoZGZkLCBwYXRobmFtZSwgTE9PS1VQX1BBUkVOVCwgJm5kKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBFUlJfUFRSKGVycm9yKTsKKwlpZiAoZm9yY2VfcmV2YWwpCisJCW5kLmZsYWdzIHw9IExPT0tVUF9SRVZBTDsKKworCWN1cnJlbnQtPnRvdGFsX2xpbmtfY291bnQgPSAwOworCWVycm9yID0gbGlua19wYXRoX3dhbGsocGF0aG5hbWUsICZuZCk7CisJaWYgKGVycm9yKSB7CisJCWZpbHAgPSBFUlJfUFRSKGVycm9yKTsKKwkJZ290byBvdXQ7CisJfQorCWlmICh1bmxpa2VseSghYXVkaXRfZHVtbXlfY29udGV4dCgpKSAmJiAob3Blbl9mbGFnICYgT19DUkVBVCkpCisJCWF1ZGl0X2lub2RlKHBhdGhuYW1lLCBuZC5wYXRoLmRlbnRyeSk7CisKKwkvKgorCSAqIFdlIGhhdmUgdGhlIHBhcmVudCBhbmQgbGFzdCBjb21wb25lbnQuCisJICovCisKKwllcnJvciA9IC1FTkZJTEU7CisJZmlscCA9IGdldF9lbXB0eV9maWxwKCk7CisJaWYgKGZpbHAgPT0gTlVMTCkKKwkJZ290byBleGl0X3BhcmVudDsKKwluZC5pbnRlbnQub3Blbi5maWxlID0gZmlscDsKKwlmaWxwLT5mX2ZsYWdzID0gb3Blbl9mbGFnOworCW5kLmludGVudC5vcGVuLmZsYWdzID0gZmxhZzsKKwluZC5pbnRlbnQub3Blbi5jcmVhdGVfbW9kZSA9IG1vZGU7CisJbmQuZmxhZ3MgJj0gfkxPT0tVUF9QQVJFTlQ7CisJbmQuZmxhZ3MgfD0gTE9PS1VQX09QRU47CisJaWYgKG9wZW5fZmxhZyAmIE9fQ1JFQVQpIHsKKwkJbmQuZmxhZ3MgfD0gTE9PS1VQX0NSRUFURTsKKwkJaWYgKG9wZW5fZmxhZyAmIE9fRVhDTCkKKwkJCW5kLmZsYWdzIHw9IExPT0tVUF9FWENMOworCX0KKwlmaWxwID0gZG9fbGFzdCgmbmQsICZwYXRoLCBvcGVuX2ZsYWcsIGFjY19tb2RlLCBtb2RlLCBwYXRobmFtZSwgJndhbnRfZGlyKTsKKwl3aGlsZSAodW5saWtlbHkoIWZpbHApKSB7IC8qIHRyYWlsaW5nIHN5bWxpbmsgKi8KKwkJc3RydWN0IHBhdGggaG9sZGVyOworCQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gcGF0aC5kZW50cnktPmRfaW5vZGU7CisJCXZvaWQgKmNvb2tpZTsKKwkJZXJyb3IgPSAtRUxPT1A7CisJCS8qIFNfSVNESVIgcGFydCBpcyBhIHRlbXBvcmFyeSBhdXRvbW91bnQga2x1ZGdlICovCisJCWlmICgob3Blbl9mbGFnICYgT19OT0ZPTExPVykgJiYgIVNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCisJCQlnb3RvIGV4aXRfZHB1dDsKKwkJaWYgKGNvdW50KysgPT0gMzIpCisJCQlnb3RvIGV4aXRfZHB1dDsKKwkJLyoKKwkJICogVGhpcyBpcyBzdWJ0bGUuIEluc3RlYWQgb2YgY2FsbGluZyBkb19mb2xsb3dfbGluaygpIHdlIGRvCisJCSAqIHRoZSB0aGluZyBieSBoYW5kcy4gVGhlIHJlYXNvbiBpcyB0aGF0IHRoaXMgd2F5IHdlIGhhdmUgemVybworCQkgKiBsaW5rX2NvdW50IGFuZCBwYXRoX3dhbGsoKSAoY2FsbGVkIGZyb20gLT5mb2xsb3dfbGluaykKKwkJICogaG9ub3JpbmcgTE9PS1VQX1BBUkVOVC4gIEFmdGVyIHRoYXQgd2UgaGF2ZSB0aGUgcGFyZW50IGFuZAorCQkgKiBsYXN0IGNvbXBvbmVudCwgaS5lLiB3ZSBhcmUgaW4gdGhlIHNhbWUgc2l0dWF0aW9uIGFzIGFmdGVyCisJCSAqIHRoZSBmaXJzdCBwYXRoX3dhbGsoKS4gIFdlbGwsIGFsbW9zdCAtIGlmIHRoZSBsYXN0IGNvbXBvbmVudAorCQkgKiBpcyBub3JtYWwgd2UgZ2V0IGl0cyBjb3B5IHN0b3JlZCBpbiBuZC0+bGFzdC5uYW1lIGFuZCB3ZSB3aWxsCisJCSAqIGhhdmUgdG8gcHV0bmFtZSgpIGl0IHdoZW4gd2UgYXJlIGRvbmUuIFByb2Nmcy1saWtlIHN5bWxpbmtzCisJCSAqIGp1c3Qgc2V0IExBU1RfQklORC4KKwkJICovCisJCW5kLmZsYWdzIHw9IExPT0tVUF9QQVJFTlQ7CisJCWVycm9yID0gc2VjdXJpdHlfaW5vZGVfZm9sbG93X2xpbmsocGF0aC5kZW50cnksICZuZCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZXhpdF9kcHV0OworCQllcnJvciA9IF9fZG9fZm9sbG93X2xpbmsoJnBhdGgsICZuZCwgJmNvb2tpZSk7CisJCWlmICh1bmxpa2VseShlcnJvcikpIHsKKwkJCS8qIG5kLnBhdGggaGFkIGJlZW4gZHJvcHBlZCAqLworCQkJaWYgKCFJU19FUlIoY29va2llKSAmJiBpbm9kZS0+aV9vcC0+cHV0X2xpbmspCisJCQkJaW5vZGUtPmlfb3AtPnB1dF9saW5rKHBhdGguZGVudHJ5LCAmbmQsIGNvb2tpZSk7CisJCQlwYXRoX3B1dCgmcGF0aCk7CisJCQlyZWxlYXNlX29wZW5faW50ZW50KCZuZCk7CisJCQlmaWxwID0gRVJSX1BUUihlcnJvcik7CisJCQlnb3RvIG91dDsKKwkJfQorCQlob2xkZXIgPSBwYXRoOworCQluZC5mbGFncyAmPSB+TE9PS1VQX1BBUkVOVDsKKwkJZmlscCA9IGRvX2xhc3QoJm5kLCAmcGF0aCwgb3Blbl9mbGFnLCBhY2NfbW9kZSwgbW9kZSwgcGF0aG5hbWUsICZ3YW50X2Rpcik7CisJCWlmIChpbm9kZS0+aV9vcC0+cHV0X2xpbmspCisJCQlpbm9kZS0+aV9vcC0+cHV0X2xpbmsoaG9sZGVyLmRlbnRyeSwgJm5kLCBjb29raWUpOworCQlwYXRoX3B1dCgmaG9sZGVyKTsKKwl9CitvdXQ6CisJaWYgKG5kLnJvb3QubW50KQorCQlwYXRoX3B1dCgmbmQucm9vdCk7CisJaWYgKGZpbHAgPT0gRVJSX1BUUigtRVNUQUxFKSAmJiAhZm9yY2VfcmV2YWwpIHsKKwkJZm9yY2VfcmV2YWwgPSAxOworCQlnb3RvIHJldmFsOworCX0KKwlyZXR1cm4gZmlscDsKKworZXhpdF9kcHV0OgorCXBhdGhfcHV0X2NvbmRpdGlvbmFsKCZwYXRoLCAmbmQpOwogCWlmICghSVNfRVJSKG5kLmludGVudC5vcGVuLmZpbGUpKQogCQlyZWxlYXNlX29wZW5faW50ZW50KCZuZCk7CiBleGl0X3BhcmVudDoKLQlpZiAobmQucm9vdC5tbnQpCi0JCXBhdGhfcHV0KCZuZC5yb290KTsKIAlwYXRoX3B1dCgmbmQucGF0aCk7Ci0JcmV0dXJuIEVSUl9QVFIoZXJyb3IpOwotCi1kb19saW5rOgotCWVycm9yID0gLUVMT09QOwotCWlmIChmbGFnICYgT19OT0ZPTExPVykKLQkJZ290byBleGl0X2RwdXQ7Ci0JLyoKLQkgKiBUaGlzIGlzIHN1YnRsZS4gSW5zdGVhZCBvZiBjYWxsaW5nIGRvX2ZvbGxvd19saW5rKCkgd2UgZG8gdGhlCi0JICogdGhpbmcgYnkgaGFuZHMuIFRoZSByZWFzb24gaXMgdGhhdCB0aGlzIHdheSB3ZSBoYXZlIHplcm8gbGlua19jb3VudAotCSAqIGFuZCBwYXRoX3dhbGsoKSAoY2FsbGVkIGZyb20gLT5mb2xsb3dfbGluaykgaG9ub3JpbmcgTE9PS1VQX1BBUkVOVC4KLQkgKiBBZnRlciB0aGF0IHdlIGhhdmUgdGhlIHBhcmVudCBhbmQgbGFzdCBjb21wb25lbnQsIGkuZS4KLQkgKiB3ZSBhcmUgaW4gdGhlIHNhbWUgc2l0dWF0aW9uIGFzIGFmdGVyIHRoZSBmaXJzdCBwYXRoX3dhbGsoKS4KLQkgKiBXZWxsLCBhbG1vc3QgLSBpZiB0aGUgbGFzdCBjb21wb25lbnQgaXMgbm9ybWFsIHdlIGdldCBpdHMgY29weQotCSAqIHN0b3JlZCBpbiBuZC0+bGFzdC5uYW1lIGFuZCB3ZSB3aWxsIGhhdmUgdG8gcHV0bmFtZSgpIGl0IHdoZW4gd2UKLQkgKiBhcmUgZG9uZS4gUHJvY2ZzLWxpa2Ugc3ltbGlua3MganVzdCBzZXQgTEFTVF9CSU5ELgotCSAqLwotCW5kLmZsYWdzIHw9IExPT0tVUF9QQVJFTlQ7Ci0JZXJyb3IgPSBzZWN1cml0eV9pbm9kZV9mb2xsb3dfbGluayhwYXRoLmRlbnRyeSwgJm5kKTsKLQlpZiAoZXJyb3IpCi0JCWdvdG8gZXhpdF9kcHV0OwotCWVycm9yID0gX19kb19mb2xsb3dfbGluaygmcGF0aCwgJm5kKTsKLQlwYXRoX3B1dCgmcGF0aCk7Ci0JaWYgKGVycm9yKSB7Ci0JCS8qIERvZXMgc29tZW9uZSB1bmRlcnN0YW5kIGNvZGUgZmxvdyBoZXJlPyBPciBpdCBpcyBvbmx5Ci0JCSAqIG1lIHNvIHN0dXBpZD8gQW5hdGhlbWEgdG8gd2hvZXZlciBkZXNpZ25lZCB0aGlzIG5vbi1zZW5zZQotCQkgKiB3aXRoICJpbnRlbnQub3BlbiIuCi0JCSAqLwotCQlyZWxlYXNlX29wZW5faW50ZW50KCZuZCk7Ci0JCWlmIChuZC5yb290Lm1udCkKLQkJCXBhdGhfcHV0KCZuZC5yb290KTsKLQkJaWYgKGVycm9yID09IC1FU1RBTEUgJiYgIWZvcmNlX3JldmFsKSB7Ci0JCQlmb3JjZV9yZXZhbCA9IDE7Ci0JCQlnb3RvIHJldmFsOwotCQl9Ci0JCXJldHVybiBFUlJfUFRSKGVycm9yKTsKLQl9Ci0JbmQuZmxhZ3MgJj0gfkxPT0tVUF9QQVJFTlQ7Ci0JaWYgKG5kLmxhc3RfdHlwZSA9PSBMQVNUX0JJTkQpCi0JCWdvdG8gb2s7Ci0JZXJyb3IgPSAtRUlTRElSOwotCWlmIChuZC5sYXN0X3R5cGUgIT0gTEFTVF9OT1JNKQotCQlnb3RvIGV4aXQ7Ci0JaWYgKG5kLmxhc3QubmFtZVtuZC5sYXN0Lmxlbl0pIHsKLQkJX19wdXRuYW1lKG5kLmxhc3QubmFtZSk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JZXJyb3IgPSAtRUxPT1A7Ci0JaWYgKGNvdW50Kys9PTMyKSB7Ci0JCV9fcHV0bmFtZShuZC5sYXN0Lm5hbWUpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCWRpciA9IG5kLnBhdGguZGVudHJ5OwotCW11dGV4X2xvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7Ci0JcGF0aC5kZW50cnkgPSBsb29rdXBfaGFzaCgmbmQpOwotCXBhdGgubW50ID0gbmQucGF0aC5tbnQ7Ci0JX19wdXRuYW1lKG5kLmxhc3QubmFtZSk7Ci0JZ290byBkb19sYXN0OworCWZpbHAgPSBFUlJfUFRSKGVycm9yKTsKKwlnb3RvIG91dDsKIH0KIAogLyoqCkBAIC0xOTk2LDcgKzE5ODEsNiBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCi0JdmZzX2RxX2luaXQoZGlyKTsKIAllcnJvciA9IGRpci0+aV9vcC0+bWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiAJaWYgKCFlcnJvcikKIAkJZnNub3RpZnlfY3JlYXRlKGRpciwgZGVudHJ5KTsKQEAgLTIwOTUsNyArMjA3OSw2IEBACiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAKLQl2ZnNfZHFfaW5pdChkaXIpOwogCWVycm9yID0gZGlyLT5pX29wLT5ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7CiAJaWYgKCFlcnJvcikKIAkJZnNub3RpZnlfbWtkaXIoZGlyLCBkZW50cnkpOwpAQCAtMjE4MSw4ICsyMTY0LDYgQEAKIAlpZiAoIWRpci0+aV9vcC0+cm1kaXIpCiAJCXJldHVybiAtRVBFUk07CiAKLQl2ZnNfZHFfaW5pdChkaXIpOwotCiAJbXV0ZXhfbG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlkZW50cnlfdW5oYXNoKGRlbnRyeSk7CiAJaWYgKGRfbW91bnRwb2ludChkZW50cnkpKQpAQCAtMjI2OCwxNSArMjI0OSwxNiBAQAogCWlmICghZGlyLT5pX29wLT51bmxpbmspCiAJCXJldHVybiAtRVBFUk07CiAKLQl2ZnNfZHFfaW5pdChkaXIpOwotCiAJbXV0ZXhfbG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIAlpZiAoZF9tb3VudHBvaW50KGRlbnRyeSkpCiAJCWVycm9yID0gLUVCVVNZOwogCWVsc2UgewogCQllcnJvciA9IHNlY3VyaXR5X2lub2RlX3VubGluayhkaXIsIGRlbnRyeSk7Ci0JCWlmICghZXJyb3IpCisJCWlmICghZXJyb3IpIHsKIAkJCWVycm9yID0gZGlyLT5pX29wLT51bmxpbmsoZGlyLCBkZW50cnkpOworCQkJaWYgKCFlcnJvcikKKwkJCQlkZW50cnktPmRfaW5vZGUtPmlfZmxhZ3MgfD0gU19ERUFEOworCQl9CiAJfQogCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIApAQCAtMjM3OSw3ICsyMzYxLDYgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCXZmc19kcV9pbml0KGRpcik7CiAJZXJyb3IgPSBkaXItPmlfb3AtPnN5bWxpbmsoZGlyLCBkZW50cnksIG9sZG5hbWUpOwogCWlmICghZXJyb3IpCiAJCWZzbm90aWZ5X2NyZWF0ZShkaXIsIGRlbnRyeSk7CkBAIC0yNDYzLDcgKzI0NDQsNiBAQAogCQlyZXR1cm4gZXJyb3I7CiAKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JdmZzX2RxX2luaXQoZGlyKTsKIAllcnJvciA9IGRpci0+aV9vcC0+bGluayhvbGRfZGVudHJ5LCBkaXIsIG5ld19kZW50cnkpOwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmICghZXJyb3IpCkBAIC0yNTY0LDcgKzI1NDQsNyBAQAogICoJZSkgY29udmVyc2lvbiBmcm9tIGZoYW5kbGUgdG8gZGVudHJ5IG1heSBjb21lIGluIHRoZSB3cm9uZyBtb21lbnQgLSB3aGVuCiAgKgkgICB3ZSBhcmUgcmVtb3ZpbmcgdGhlIHRhcmdldC4gU29sdXRpb246IHdlIHdpbGwgaGF2ZSB0byBncmFiIC0+aV9tdXRleAogICoJICAgaW4gdGhlIGZoYW5kbGVfdG9fZGVudHJ5IGNvZGUuIFtGSVhNRSAtIGN1cnJlbnQgbmZzZmguYyByZWxpZXMgb24KLSAqCSAgIC0+aV9tdXRleCBvbiBwYXJlbnRzLCB3aGljaCB3b3JrcyBidXQgbGVhZHMgdG8gc29tZSB0cnVlbHkgZXhjZXNzaXZlCisgKgkgICAtPmlfbXV0ZXggb24gcGFyZW50cywgd2hpY2ggd29ya3MgYnV0IGxlYWRzIHRvIHNvbWUgdHJ1bHkgZXhjZXNzaXZlCiAgKgkgICBsb2NraW5nXS4KICAqLwogc3RhdGljIGludCB2ZnNfcmVuYW1lX2RpcihzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksCkBAIC0yNjI5LDYgKzI2MDksOCBAQAogCWVsc2UKIAkJZXJyb3IgPSBvbGRfZGlyLT5pX29wLT5yZW5hbWUob2xkX2Rpciwgb2xkX2RlbnRyeSwgbmV3X2RpciwgbmV3X2RlbnRyeSk7CiAJaWYgKCFlcnJvcikgeworCQlpZiAodGFyZ2V0KQorCQkJdGFyZ2V0LT5pX2ZsYWdzIHw9IFNfREVBRDsKIAkJaWYgKCEob2xkX2Rpci0+aV9zYi0+c190eXBlLT5mc19mbGFncyAmIEZTX1JFTkFNRV9ET0VTX0RfTU9WRSkpCiAJCQlkX21vdmUob2xkX2RlbnRyeSwgbmV3X2RlbnRyeSk7CiAJfQpAQCAtMjY2MiwyMCArMjY0NCwxNSBAQAogCWlmICghb2xkX2Rpci0+aV9vcC0+cmVuYW1lKQogCQlyZXR1cm4gLUVQRVJNOwogCi0JdmZzX2RxX2luaXQob2xkX2Rpcik7Ci0JdmZzX2RxX2luaXQobmV3X2Rpcik7Ci0KIAlvbGRfbmFtZSA9IGZzbm90aWZ5X29sZG5hbWVfaW5pdChvbGRfZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKIAlpZiAoaXNfZGlyKQogCQllcnJvciA9IHZmc19yZW5hbWVfZGlyKG9sZF9kaXIsb2xkX2RlbnRyeSxuZXdfZGlyLG5ld19kZW50cnkpOwogCWVsc2UKIAkJZXJyb3IgPSB2ZnNfcmVuYW1lX290aGVyKG9sZF9kaXIsb2xkX2RlbnRyeSxuZXdfZGlyLG5ld19kZW50cnkpOwotCWlmICghZXJyb3IpIHsKLQkJY29uc3QgY2hhciAqbmV3X25hbWUgPSBvbGRfZGVudHJ5LT5kX25hbWUubmFtZTsKLQkJZnNub3RpZnlfbW92ZShvbGRfZGlyLCBuZXdfZGlyLCBvbGRfbmFtZSwgbmV3X25hbWUsIGlzX2RpciwKKwlpZiAoIWVycm9yKQorCQlmc25vdGlmeV9tb3ZlKG9sZF9kaXIsIG5ld19kaXIsIG9sZF9uYW1lLCBpc19kaXIsCiAJCQkgICAgICBuZXdfZGVudHJ5LT5kX2lub2RlLCBvbGRfZGVudHJ5KTsKLQl9CiAJZnNub3RpZnlfb2xkbmFtZV9mcmVlKG9sZF9uYW1lKTsKIAogCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggYzc2OGY3My4uODE3NGM4YSAxMDA2NDQKLS0tIGEvZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmFtZXNwYWNlLmMKQEAgLTU3Myw3ICs1NzMsNyBAQAogCQkJbW50LT5tbnRfbWFzdGVyID0gb2xkOwogCQkJQ0xFQVJfTU5UX1NIQVJFRChtbnQpOwogCQl9IGVsc2UgaWYgKCEoZmxhZyAmIENMX1BSSVZBVEUpKSB7Ci0JCQlpZiAoKGZsYWcgJiBDTF9QUk9QQUdBVElPTikgfHwgSVNfTU5UX1NIQVJFRChvbGQpKQorCQkJaWYgKChmbGFnICYgQ0xfTUFLRV9TSEFSRUQpIHx8IElTX01OVF9TSEFSRUQob2xkKSkKIAkJCQlsaXN0X2FkZCgmbW50LT5tbnRfc2hhcmUsICZvbGQtPm1udF9zaGFyZSk7CiAJCQlpZiAoSVNfTU5UX1NMQVZFKG9sZCkpCiAJCQkJbGlzdF9hZGQoJm1udC0+bW50X3NsYXZlLCAmb2xkLT5tbnRfc2xhdmUpOwpAQCAtNzM3LDYgKzczNywyMSBAQAogCXVwX3JlYWQoJm5hbWVzcGFjZV9zZW0pOwogfQogCitpbnQgbW50X2hhZF9ldmVudHMoc3RydWN0IHByb2NfbW91bnRzICpwKQoreworCXN0cnVjdCBtbnRfbmFtZXNwYWNlICpucyA9IHAtPm5zOworCWludCByZXMgPSAwOworCisJc3Bpbl9sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKKwlpZiAocC0+ZXZlbnQgIT0gbnMtPmV2ZW50KSB7CisJCXAtPmV2ZW50ID0gbnMtPmV2ZW50OworCQlyZXMgPSAxOworCX0KKwlzcGluX3VubG9jaygmdmZzbW91bnRfbG9jayk7CisKKwlyZXR1cm4gcmVzOworfQorCiBzdHJ1Y3QgcHJvY19mc19pbmZvIHsKIAlpbnQgZmxhZzsKIAljb25zdCBjaGFyICpzdHI7CkBAIC0xMTIxLDggKzExMzYsMTUgQEAKIHsKIAlzdHJ1Y3QgcGF0aCBwYXRoOwogCWludCByZXR2YWw7CisJaW50IGxvb2t1cF9mbGFncyA9IDA7CiAKLQlyZXR2YWwgPSB1c2VyX3BhdGgobmFtZSwgJnBhdGgpOworCWlmIChmbGFncyAmIH4oTU5UX0ZPUkNFIHwgTU5UX0RFVEFDSCB8IE1OVF9FWFBJUkUgfCBVTU9VTlRfTk9GT0xMT1cpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICghKGZsYWdzICYgVU1PVU5UX05PRk9MTE9XKSkKKwkJbG9va3VwX2ZsYWdzIHw9IExPT0tVUF9GT0xMT1c7CisKKwlyZXR2YWwgPSB1c2VyX3BhdGhfYXQoQVRfRkRDV0QsIG5hbWUsIGxvb2t1cF9mbGFncywgJnBhdGgpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gb3V0OwogCXJldHZhbCA9IC1FSU5WQUw7CkBAIC0xMjQ2LDYgKzEyNjgsMjEgQEAKIAlyZWxlYXNlX21vdW50cygmdW1vdW50X2xpc3QpOwogfQogCitpbnQgaXRlcmF0ZV9tb3VudHMoaW50ICgqZikoc3RydWN0IHZmc21vdW50ICosIHZvaWQgKiksIHZvaWQgKmFyZywKKwkJICAgc3RydWN0IHZmc21vdW50ICpyb290KQoreworCXN0cnVjdCB2ZnNtb3VudCAqbW50OworCWludCByZXMgPSBmKHJvb3QsIGFyZyk7CisJaWYgKHJlcykKKwkJcmV0dXJuIHJlczsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1udCwgJnJvb3QtPm1udF9saXN0LCBtbnRfbGlzdCkgeworCQlyZXMgPSBmKG1udCwgYXJnKTsKKwkJaWYgKHJlcykKKwkJCXJldHVybiByZXM7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgdm9pZCBjbGVhbnVwX2dyb3VwX2lkcyhzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IHZmc21vdW50ICplbmQpCiB7CiAJc3RydWN0IHZmc21vdW50ICpwOwpAQCAtMTUzOCw3ICsxNTc1LDcgQEAKIAkJZXJyID0gZG9fcmVtb3VudF9zYihzYiwgZmxhZ3MsIGRhdGEsIDApOwogCWlmICghZXJyKSB7CiAJCXNwaW5fbG9jaygmdmZzbW91bnRfbG9jayk7Ci0JCW1udF9mbGFncyB8PSBwYXRoLT5tbnQtPm1udF9mbGFncyAmIE1OVF9QTk9ERV9NQVNLOworCQltbnRfZmxhZ3MgfD0gcGF0aC0+bW50LT5tbnRfZmxhZ3MgJiBNTlRfUFJPUEFHQVRJT05fTUFTSzsKIAkJcGF0aC0+bW50LT5tbnRfZmxhZ3MgPSBtbnRfZmxhZ3M7CiAJCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKIAl9CkBAIC0xNjcxLDcgKzE3MDgsNyBAQAogewogCWludCBlcnI7CiAKLQltbnRfZmxhZ3MgJj0gfihNTlRfU0hBUkVEIHwgTU5UX1dSSVRFX0hPTEQpOworCW1udF9mbGFncyAmPSB+KE1OVF9TSEFSRUQgfCBNTlRfV1JJVEVfSE9MRCB8IE1OVF9JTlRFUk5BTCk7CiAKIAlkb3duX3dyaXRlKCZuYW1lc3BhY2Vfc2VtKTsKIAkvKiBTb21ldGhpbmcgd2FzIG1vdW50ZWQgaGVyZSB3aGlsZSB3ZSBzbGVwdCAqLwpAQCAtMjMxNCwxNyArMjM1MSwxMyBAQAogCiB2b2lkIHB1dF9tbnRfbnMoc3RydWN0IG1udF9uYW1lc3BhY2UgKm5zKQogewotCXN0cnVjdCB2ZnNtb3VudCAqcm9vdDsKIAlMSVNUX0hFQUQodW1vdW50X2xpc3QpOwogCi0JaWYgKCFhdG9taWNfZGVjX2FuZF9sb2NrKCZucy0+Y291bnQsICZ2ZnNtb3VudF9sb2NrKSkKKwlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJm5zLT5jb3VudCkpCiAJCXJldHVybjsKLQlyb290ID0gbnMtPnJvb3Q7Ci0JbnMtPnJvb3QgPSBOVUxMOwotCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKIAlkb3duX3dyaXRlKCZuYW1lc3BhY2Vfc2VtKTsKIAlzcGluX2xvY2soJnZmc21vdW50X2xvY2spOwotCXVtb3VudF90cmVlKHJvb3QsIDAsICZ1bW91bnRfbGlzdCk7CisJdW1vdW50X3RyZWUobnMtPnJvb3QsIDAsICZ1bW91bnRfbGlzdCk7CiAJc3Bpbl91bmxvY2soJnZmc21vdW50X2xvY2spOwogCXVwX3dyaXRlKCZuYW1lc3BhY2Vfc2VtKTsKIAlyZWxlYXNlX21vdW50cygmdW1vdW50X2xpc3QpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrLmMgYi9mcy9uZnMvY2FsbGJhY2suYwppbmRleCA3M2FiMjIwLi4zNmRmZGFlIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2suYworKysgYi9mcy9uZnMvY2FsbGJhY2suYwpAQCAtMTE4LDcgKzExOCw2IEBACiAJZHByaW50aygiTkZTOiBDYWxsYmFjayBsaXN0ZW5lciBwb3J0ID0gJXUgKGFmICV1KVxuIiwKIAkJCW5mc19jYWxsYmFja190Y3Bwb3J0LCBQRl9JTkVUKTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogCXJldCA9IHN2Y19jcmVhdGVfeHBydChzZXJ2LCAidGNwIiwgUEZfSU5FVDYsCiAJCQkJbmZzX2NhbGxiYWNrX3NldF90Y3Bwb3J0LCBTVkNfU09DS19BTk9OWU1PVVMpOwogCWlmIChyZXQgPiAwKSB7CkBAIC0xMjksNyArMTI4LDYgQEAKIAkJcmV0ID0gMDsKIAllbHNlCiAJCWdvdG8gb3V0X2VycjsKLSNlbmRpZgkvKiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkgKi8KIAogCXJldHVybiBzdmNfcHJlcGFyZV90aHJlYWQoc2VydiwgJnNlcnYtPnN2X3Bvb2xzWzBdKTsKIApkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrLmggYi9mcy9uZnMvY2FsbGJhY2suaAppbmRleCBkNDAzNmJlLi44NWE3Y2ZkIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2suaAorKysgYi9mcy9uZnMvY2FsbGJhY2suaApAQCAtMTE5LDYgKzExOSwxNCBAQAogfTsKIAogZXh0ZXJuIHVuc2lnbmVkIG5mczRfY2FsbGJhY2tfcmVjYWxsYW55KHN0cnVjdCBjYl9yZWNhbGxhbnlhcmdzICphcmdzLCB2b2lkICpkdW1teSk7CisKK3N0cnVjdCBjYl9yZWNhbGxzbG90YXJncyB7CisJc3RydWN0IHNvY2thZGRyCSpjcnNhX2FkZHI7CisJdWludDMyX3QJY3JzYV90YXJnZXRfbWF4X3Nsb3RzOworfTsKK2V4dGVybiB1bnNpZ25lZCBuZnM0X2NhbGxiYWNrX3JlY2FsbHNsb3Qoc3RydWN0IGNiX3JlY2FsbHNsb3RhcmdzICphcmdzLAorCQkJCQkgIHZvaWQgKmR1bW15KTsKKwogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwogCiBleHRlcm4gX19iZTMyIG5mczRfY2FsbGJhY2tfZ2V0YXR0cihzdHJ1Y3QgY2JfZ2V0YXR0cmFyZ3MgKmFyZ3MsIHN0cnVjdCBjYl9nZXRhdHRycmVzICpyZXMpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYyBiL2ZzL25mcy9jYWxsYmFja19wcm9jLmMKaW5kZXggZGVmYTliNC4uODQ3NjFiNSAxMDA2NDQKLS0tIGEvZnMvbmZzL2NhbGxiYWNrX3Byb2MuYworKysgYi9mcy9uZnMvY2FsbGJhY2tfcHJvYy5jCkBAIC0xNDMsNDQgKzE0Myw0OSBAQAogICogUmV0dXJuIHN1Y2Nlc3MgaWYgdGhlIHNlcXVlbmNlSUQgaXMgb25lIG1vcmUgdGhhbiB3aGF0IHdlIGxhc3Qgc2F3IG9uCiAgKiB0aGlzIHNsb3QsIGFjY291bnRpbmcgZm9yIHdyYXBhcm91bmQuICBJbmNyZW1lbnRzIHRoZSBzbG90J3Mgc2VxdWVuY2UuCiAgKgotICogV2UgZG9uJ3QgeWV0IGltcGxlbWVudCBhIGR1cGxpY2F0ZSByZXF1ZXN0IGNhY2hlLCBzbyBhdCB0aGlzIHRpbWUKLSAqIHdlIHdpbGwgbG9nIHJlcGxheXMsIGFuZCBwcm9jZXNzIHRoZW0gYXMgaWYgd2UgaGFkIG5vdCBzZWVuIHRoZW0gYmVmb3JlLAotICogYnV0IHdlIGRvbid0IGJ1bXAgdGhlIHNlcXVlbmNlIGluIHRoZSBzbG90LiAgTm90IHRvbyB3b3JyaWVkIGFib3V0IGl0LAorICogV2UgZG9uJ3QgeWV0IGltcGxlbWVudCBhIGR1cGxpY2F0ZSByZXF1ZXN0IGNhY2hlLCBpbnN0ZWFkIHdlIHNldCB0aGUKKyAqIGJhY2sgY2hhbm5lbCBjYV9tYXhyZXNwb25zZXNpemVfY2FjaGVkIHRvIHplcm8uIFRoaXMgaXMgT0sgZm9yIG5vdwogICogc2luY2Ugd2Ugb25seSBjdXJyZW50bHkgaW1wbGVtZW50IGlkZW1wb3RlbnQgY2FsbGJhY2tzIGFueXdheS4KICAqCiAgKiBXZSBoYXZlIGEgc2luZ2xlIHNsb3QgYmFja2NoYW5uZWwgYXQgdGhpcyB0aW1lLCBzbyB3ZSBkb24ndCBib3RoZXIKICAqIGNoZWNraW5nIHRoZSB1c2VkX3Nsb3RzIGJpdCBhcnJheSBvbiB0aGUgdGFibGUuICBUaGUgbG93ZXIgbGF5ZXIgZ3VhcmFudGVlcwogICogYSBzaW5nbGUgb3V0c3RhbmRpbmcgY2FsbGJhY2sgcmVxdWVzdCBhdCBhIHRpbWUuCiAgKi8KLXN0YXRpYyBpbnQKLXZhbGlkYXRlX3NlcWlkKHN0cnVjdCBuZnM0X3Nsb3RfdGFibGUgKnRibCwgdTMyIHNsb3RpZCwgdTMyIHNlcWlkKQorc3RhdGljIF9fYmUzMgordmFsaWRhdGVfc2VxaWQoc3RydWN0IG5mczRfc2xvdF90YWJsZSAqdGJsLCBzdHJ1Y3QgY2Jfc2VxdWVuY2VhcmdzICogYXJncykKIHsKIAlzdHJ1Y3QgbmZzNF9zbG90ICpzbG90OwogCiAJZHByaW50aygiJXMgZW50ZXIuIHNsb3RpZCAlZCBzZXFpZCAlZFxuIiwKLQkJX19mdW5jX18sIHNsb3RpZCwgc2VxaWQpOworCQlfX2Z1bmNfXywgYXJncy0+Y3NhX3Nsb3RpZCwgYXJncy0+Y3NhX3NlcXVlbmNlaWQpOwogCi0JaWYgKHNsb3RpZCA+IE5GUzQxX0JDX01BWF9DQUxMQkFDS1MpCisJaWYgKGFyZ3MtPmNzYV9zbG90aWQgPiBORlM0MV9CQ19NQVhfQ0FMTEJBQ0tTKQogCQlyZXR1cm4gaHRvbmwoTkZTNEVSUl9CQURTTE9UKTsKIAotCXNsb3QgPSB0YmwtPnNsb3RzICsgc2xvdGlkOworCXNsb3QgPSB0YmwtPnNsb3RzICsgYXJncy0+Y3NhX3Nsb3RpZDsKIAlkcHJpbnRrKCIlcyBzbG90IHRhYmxlIHNlcWlkOiAlZFxuIiwgX19mdW5jX18sIHNsb3QtPnNlcV9ucik7CiAKIAkvKiBOb3JtYWwgKi8KLQlpZiAobGlrZWx5KHNlcWlkID09IHNsb3QtPnNlcV9uciArIDEpKSB7CisJaWYgKGxpa2VseShhcmdzLT5jc2Ffc2VxdWVuY2VpZCA9PSBzbG90LT5zZXFfbnIgKyAxKSkgewogCQlzbG90LT5zZXFfbnIrKzsKIAkJcmV0dXJuIGh0b25sKE5GUzRfT0spOwogCX0KIAogCS8qIFJlcGxheSAqLwotCWlmIChzZXFpZCA9PSBzbG90LT5zZXFfbnIpIHsKLQkJZHByaW50aygiJXMgc2VxaWQgJWQgaXMgYSByZXBsYXkgLSBubyBEUkMgYXZhaWxhYmxlXG4iLAotCQkJX19mdW5jX18sIHNlcWlkKTsKLQkJcmV0dXJuIGh0b25sKE5GUzRfT0spOworCWlmIChhcmdzLT5jc2Ffc2VxdWVuY2VpZCA9PSBzbG90LT5zZXFfbnIpIHsKKwkJZHByaW50aygiJXMgc2VxaWQgJWQgaXMgYSByZXBsYXlcbiIsCisJCQlfX2Z1bmNfXywgYXJncy0+Y3NhX3NlcXVlbmNlaWQpOworCQkvKiBTaWduYWwgcHJvY2Vzc19vcCB0byBzZXQgdGhpcyBlcnJvciBvbiBuZXh0IG9wICovCisJCWlmIChhcmdzLT5jc2FfY2FjaGV0aGlzID09IDApCisJCQlyZXR1cm4gaHRvbmwoTkZTNEVSUl9SRVRSWV9VTkNBQ0hFRF9SRVApOworCisJCS8qIFRoZSBjYV9tYXhyZXNwb25zZXNpemVfY2FjaGVkIGlzIDAgd2l0aCBubyBEUkMgKi8KKwkJZWxzZSBpZiAoYXJncy0+Y3NhX2NhY2hldGhpcyA9PSAxKQorCQkJcmV0dXJuIGh0b25sKE5GUzRFUlJfUkVQX1RPT19CSUdfVE9fQ0FDSEUpOwogCX0KIAogCS8qIFdyYXBhcm91bmQgKi8KLQlpZiAoc2VxaWQgPT0gMSAmJiAoc2xvdC0+c2VxX25yICsgMSkgPT0gMCkgeworCWlmIChhcmdzLT5jc2Ffc2VxdWVuY2VpZCA9PSAxICYmIChzbG90LT5zZXFfbnIgKyAxKSA9PSAwKSB7CiAJCXNsb3QtPnNlcV9uciA9IDE7CiAJCXJldHVybiBodG9ubChORlM0X09LKTsKIAl9CkBAIC0yMjUsMjcgKzIzMCw4NyBAQAogCXJldHVybiBOVUxMOwogfQogCi0vKiBGSVhNRTogcmVmZXJyaW5nIGNhbGxzIHNob3VsZCBiZSBwcm9jZXNzZWQgKi8KLXVuc2lnbmVkIG5mczRfY2FsbGJhY2tfc2VxdWVuY2Uoc3RydWN0IGNiX3NlcXVlbmNlYXJncyAqYXJncywKKy8qCisgKiBGb3IgZWFjaCByZWZlcnJpbmcgY2FsbCB0cmlwbGUsIGNoZWNrIHRoZSBzZXNzaW9uJ3Mgc2xvdCB0YWJsZSBmb3IKKyAqIGEgbWF0Y2guICBJZiB0aGUgc2xvdCBpcyBpbiB1c2UgYW5kIHRoZSBzZXF1ZW5jZSBudW1iZXJzIG1hdGNoLCB0aGUKKyAqIGNsaWVudCBpcyBzdGlsbCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIHRvIHRoZSBvcmlnaW5hbCByZXF1ZXN0LgorICovCitzdGF0aWMgYm9vbCByZWZlcnJpbmdfY2FsbF9leGlzdHMoc3RydWN0IG5mc19jbGllbnQgKmNscCwKKwkJCQkgIHVpbnQzMl90IG5yY2xpc3RzLAorCQkJCSAgc3RydWN0IHJlZmVycmluZ19jYWxsX2xpc3QgKnJjbGlzdHMpCit7CisJYm9vbCBzdGF0dXMgPSAwOworCWludCBpLCBqOworCXN0cnVjdCBuZnM0X3Nlc3Npb24gKnNlc3Npb247CisJc3RydWN0IG5mczRfc2xvdF90YWJsZSAqdGJsOworCXN0cnVjdCByZWZlcnJpbmdfY2FsbF9saXN0ICpyY2xpc3Q7CisJc3RydWN0IHJlZmVycmluZ19jYWxsICpyZWY7CisKKwkvKgorCSAqIFhYWCBXaGVuIGNsaWVudCB0cnVua2luZyBpcyBpbXBsZW1lbnRlZCwgdGhpcyBiZWNvbWVzCisJICogYSBzZXNzaW9uIGxvb2t1cCBmcm9tIHdpdGhpbiB0aGUgbG9vcAorCSAqLworCXNlc3Npb24gPSBjbHAtPmNsX3Nlc3Npb247CisJdGJsID0gJnNlc3Npb24tPmZjX3Nsb3RfdGFibGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJjbGlzdHM7IGkrKykgeworCQlyY2xpc3QgPSAmcmNsaXN0c1tpXTsKKwkJaWYgKG1lbWNtcChzZXNzaW9uLT5zZXNzX2lkLmRhdGEsCisJCQkgICByY2xpc3QtPnJjbF9zZXNzaW9uaWQuZGF0YSwKKwkJCSAgIE5GUzRfTUFYX1NFU1NJT05JRF9MRU4pICE9IDApCisJCQljb250aW51ZTsKKworCQlmb3IgKGogPSAwOyBqIDwgcmNsaXN0LT5yY2xfbnJlZmNhbGxzOyBqKyspIHsKKwkJCXJlZiA9ICZyY2xpc3QtPnJjbF9yZWZjYWxsc1tqXTsKKworCQkJZHByaW50aygiJXM6IHNlc3Npb25pZCAleDoleDoleDoleCBzZXF1ZW5jZWlkICV1ICIKKwkJCQkic2xvdGlkICV1XG4iLCBfX2Z1bmNfXywKKwkJCQkoKHUzMiAqKSZyY2xpc3QtPnJjbF9zZXNzaW9uaWQuZGF0YSlbMF0sCisJCQkJKCh1MzIgKikmcmNsaXN0LT5yY2xfc2Vzc2lvbmlkLmRhdGEpWzFdLAorCQkJCSgodTMyICopJnJjbGlzdC0+cmNsX3Nlc3Npb25pZC5kYXRhKVsyXSwKKwkJCQkoKHUzMiAqKSZyY2xpc3QtPnJjbF9zZXNzaW9uaWQuZGF0YSlbM10sCisJCQkJcmVmLT5yY19zZXF1ZW5jZWlkLCByZWYtPnJjX3Nsb3RpZCk7CisKKwkJCXNwaW5fbG9jaygmdGJsLT5zbG90X3RibF9sb2NrKTsKKwkJCXN0YXR1cyA9ICh0ZXN0X2JpdChyZWYtPnJjX3Nsb3RpZCwgdGJsLT51c2VkX3Nsb3RzKSAmJgorCQkJCSAgdGJsLT5zbG90c1tyZWYtPnJjX3Nsb3RpZF0uc2VxX25yID09CisJCQkJCXJlZi0+cmNfc2VxdWVuY2VpZCk7CisJCQlzcGluX3VubG9jaygmdGJsLT5zbG90X3RibF9sb2NrKTsKKwkJCWlmIChzdGF0dXMpCisJCQkJZ290byBvdXQ7CisJCX0KKwl9CisKK291dDoKKwlyZXR1cm4gc3RhdHVzOworfQorCitfX2JlMzIgbmZzNF9jYWxsYmFja19zZXF1ZW5jZShzdHJ1Y3QgY2Jfc2VxdWVuY2VhcmdzICphcmdzLAogCQkJCXN0cnVjdCBjYl9zZXF1ZW5jZXJlcyAqcmVzKQogewogCXN0cnVjdCBuZnNfY2xpZW50ICpjbHA7Ci0JaW50IGksIHN0YXR1czsKLQotCWZvciAoaSA9IDA7IGkgPCBhcmdzLT5jc2FfbnJjbGlzdHM7IGkrKykKLQkJa2ZyZWUoYXJncy0+Y3NhX3JjbGlzdHNbaV0ucmNsX3JlZmNhbGxzKTsKLQlrZnJlZShhcmdzLT5jc2FfcmNsaXN0cyk7CisJaW50IGk7CisJX19iZTMyIHN0YXR1czsKIAogCXN0YXR1cyA9IGh0b25sKE5GUzRFUlJfQkFEU0VTU0lPTik7CiAJY2xwID0gZmluZF9jbGllbnRfd2l0aF9zZXNzaW9uKGFyZ3MtPmNzYV9hZGRyLCA0LCAmYXJncy0+Y3NhX3Nlc3Npb25pZCk7CiAJaWYgKGNscCA9PSBOVUxMKQogCQlnb3RvIG91dDsKIAotCXN0YXR1cyA9IHZhbGlkYXRlX3NlcWlkKCZjbHAtPmNsX3Nlc3Npb24tPmJjX3Nsb3RfdGFibGUsCi0JCQkJYXJncy0+Y3NhX3Nsb3RpZCwgYXJncy0+Y3NhX3NlcXVlbmNlaWQpOworCXN0YXR1cyA9IHZhbGlkYXRlX3NlcWlkKCZjbHAtPmNsX3Nlc3Npb24tPmJjX3Nsb3RfdGFibGUsIGFyZ3MpOwogCWlmIChzdGF0dXMpCiAJCWdvdG8gb3V0X3B1dGNsaWVudDsKIAorCS8qCisJICogQ2hlY2sgZm9yIHBlbmRpbmcgcmVmZXJyaW5nIGNhbGxzLiAgSWYgYSBtYXRjaCBpcyBmb3VuZCwgYQorCSAqIHJlbGF0ZWQgY2FsbGJhY2sgd2FzIHJlY2VpdmVkIGJlZm9yZSB0aGUgcmVzcG9uc2UgdG8gdGhlIG9yaWdpbmFsCisJICogY2FsbC4KKwkgKi8KKwlpZiAocmVmZXJyaW5nX2NhbGxfZXhpc3RzKGNscCwgYXJncy0+Y3NhX25yY2xpc3RzLCBhcmdzLT5jc2FfcmNsaXN0cykpIHsKKwkJc3RhdHVzID0gaHRvbmwoTkZTNEVSUl9ERUxBWSk7CisJCWdvdG8gb3V0X3B1dGNsaWVudDsKKwl9CisKIAltZW1jcHkoJnJlcy0+Y3NyX3Nlc3Npb25pZCwgJmFyZ3MtPmNzYV9zZXNzaW9uaWQsCiAJICAgICAgIHNpemVvZihyZXMtPmNzcl9zZXNzaW9uaWQpKTsKIAlyZXMtPmNzcl9zZXF1ZW5jZWlkID0gYXJncy0+Y3NhX3NlcXVlbmNlaWQ7CkBAIC0yNTYsMTUgKzMyMSwyMyBAQAogb3V0X3B1dGNsaWVudDoKIAluZnNfcHV0X2NsaWVudChjbHApOwogb3V0OgotCWRwcmludGsoIiVzOiBleGl0IHdpdGggc3RhdHVzID0gJWRcbiIsIF9fZnVuY19fLCBudG9obChzdGF0dXMpKTsKLQlyZXMtPmNzcl9zdGF0dXMgPSBzdGF0dXM7Ci0JcmV0dXJuIHJlcy0+Y3NyX3N0YXR1czsKKwlmb3IgKGkgPSAwOyBpIDwgYXJncy0+Y3NhX25yY2xpc3RzOyBpKyspCisJCWtmcmVlKGFyZ3MtPmNzYV9yY2xpc3RzW2ldLnJjbF9yZWZjYWxscyk7CisJa2ZyZWUoYXJncy0+Y3NhX3JjbGlzdHMpOworCisJaWYgKHN0YXR1cyA9PSBodG9ubChORlM0RVJSX1JFVFJZX1VOQ0FDSEVEX1JFUCkpCisJCXJlcy0+Y3NyX3N0YXR1cyA9IDA7CisJZWxzZQorCQlyZXMtPmNzcl9zdGF0dXMgPSBzdGF0dXM7CisJZHByaW50aygiJXM6IGV4aXQgd2l0aCBzdGF0dXMgPSAlZCByZXMtPmNzcl9zdGF0dXMgJWRcbiIsIF9fZnVuY19fLAorCQludG9obChzdGF0dXMpLCBudG9obChyZXMtPmNzcl9zdGF0dXMpKTsKKwlyZXR1cm4gc3RhdHVzOwogfQogCi11bnNpZ25lZCBuZnM0X2NhbGxiYWNrX3JlY2FsbGFueShzdHJ1Y3QgY2JfcmVjYWxsYW55YXJncyAqYXJncywgdm9pZCAqZHVtbXkpCitfX2JlMzIgbmZzNF9jYWxsYmFja19yZWNhbGxhbnkoc3RydWN0IGNiX3JlY2FsbGFueWFyZ3MgKmFyZ3MsIHZvaWQgKmR1bW15KQogewogCXN0cnVjdCBuZnNfY2xpZW50ICpjbHA7Ci0JaW50IHN0YXR1czsKKwlfX2JlMzIgc3RhdHVzOwogCWZtb2RlX3QgZmxhZ3MgPSAwOwogCiAJc3RhdHVzID0gaHRvbmwoTkZTNEVSUl9PUF9OT1RfSU5fU0VTU0lPTik7CkBAIC0yODksNCArMzYyLDQwIEBACiAJZHByaW50aygiJXM6IGV4aXQgd2l0aCBzdGF0dXMgPSAlZFxuIiwgX19mdW5jX18sIG50b2hsKHN0YXR1cykpOwogCXJldHVybiBzdGF0dXM7CiB9CisKKy8qIFJlZHVjZSB0aGUgZm9yZSBjaGFubmVsJ3MgbWF4X3Nsb3RzIHRvIHRoZSB0YXJnZXQgdmFsdWUgKi8KK19fYmUzMiBuZnM0X2NhbGxiYWNrX3JlY2FsbHNsb3Qoc3RydWN0IGNiX3JlY2FsbHNsb3RhcmdzICphcmdzLCB2b2lkICpkdW1teSkKK3sKKwlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwOworCXN0cnVjdCBuZnM0X3Nsb3RfdGFibGUgKmZjX3RibDsKKwlfX2JlMzIgc3RhdHVzOworCisJc3RhdHVzID0gaHRvbmwoTkZTNEVSUl9PUF9OT1RfSU5fU0VTU0lPTik7CisJY2xwID0gbmZzX2ZpbmRfY2xpZW50KGFyZ3MtPmNyc2FfYWRkciwgNCk7CisJaWYgKGNscCA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCWRwcmludGsoIk5GUzogQ0JfUkVDQUxMX1NMT1QgcmVxdWVzdCBmcm9tICVzIHRhcmdldCBtYXggc2xvdHMgJWRcbiIsCisJCXJwY19wZWVyYWRkcjJzdHIoY2xwLT5jbF9ycGNjbGllbnQsIFJQQ19ESVNQTEFZX0FERFIpLAorCQlhcmdzLT5jcnNhX3RhcmdldF9tYXhfc2xvdHMpOworCisJZmNfdGJsID0gJmNscC0+Y2xfc2Vzc2lvbi0+ZmNfc2xvdF90YWJsZTsKKworCXN0YXR1cyA9IGh0b25sKE5GUzRFUlJfQkFEX0hJR0hfU0xPVCk7CisJaWYgKGFyZ3MtPmNyc2FfdGFyZ2V0X21heF9zbG90cyA+IGZjX3RibC0+bWF4X3Nsb3RzIHx8CisJICAgIGFyZ3MtPmNyc2FfdGFyZ2V0X21heF9zbG90cyA8IDEpCisJCWdvdG8gb3V0X3B1dGNsaWVudDsKKworCXN0YXR1cyA9IGh0b25sKE5GUzRfT0spOworCWlmIChhcmdzLT5jcnNhX3RhcmdldF9tYXhfc2xvdHMgPT0gZmNfdGJsLT5tYXhfc2xvdHMpCisJCWdvdG8gb3V0X3B1dGNsaWVudDsKKworCWZjX3RibC0+dGFyZ2V0X21heF9zbG90cyA9IGFyZ3MtPmNyc2FfdGFyZ2V0X21heF9zbG90czsKKwluZnM0MV9oYW5kbGVfcmVjYWxsX3Nsb3QoY2xwKTsKK291dF9wdXRjbGllbnQ6CisJbmZzX3B1dF9jbGllbnQoY2xwKTsJLyogYmFsYW5jZSBuZnNfZmluZF9jbGllbnQgKi8KK291dDoKKwlkcHJpbnRrKCIlczogZXhpdCB3aXRoIHN0YXR1cyA9ICVkXG4iLCBfX2Z1bmNfXywgbnRvaGwoc3RhdHVzKSk7CisJcmV0dXJuIHN0YXR1czsKK30KICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KZGlmZiAtLWdpdCBhL2ZzL25mcy9jYWxsYmFja194ZHIuYyBiL2ZzL25mcy9jYWxsYmFja194ZHIuYwppbmRleCA4ZTFhMjUxLi5kYjMwYzBiIDEwMDY0NAotLS0gYS9mcy9uZnMvY2FsbGJhY2tfeGRyLmMKKysrIGIvZnMvbmZzL2NhbGxiYWNrX3hkci5jCkBAIC0yNCwxMCArMjQsMTQgQEAKICNkZWZpbmUgQ0JfT1BfU0VRVUVOQ0VfUkVTX01BWFNaCShDQl9PUF9IRFJfUkVTX01BWFNaICsgXAogCQkJCQk0ICsgMSArIDMpCiAjZGVmaW5lIENCX09QX1JFQ0FMTEFOWV9SRVNfTUFYU1oJKENCX09QX0hEUl9SRVNfTUFYU1opCisjZGVmaW5lIENCX09QX1JFQ0FMTFNMT1RfUkVTX01BWFNaCShDQl9PUF9IRFJfUkVTX01BWFNaKQogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwogCiAjZGVmaW5lIE5GU0RCR19GQUNJTElUWSBORlNEQkdfQ0FMTEJBQ0sKIAorLyogSW50ZXJuYWwgZXJyb3IgY29kZSAqLworI2RlZmluZSBORlM0RVJSX1JFU09VUkNFX0hEUgkxMTA1MAorCiB0eXBlZGVmIF9fYmUzMiAoKmNhbGxiYWNrX3Byb2Nlc3Nfb3BfdCkodm9pZCAqLCB2b2lkICopOwogdHlwZWRlZiBfX2JlMzIgKCpjYWxsYmFja19kZWNvZGVfYXJnX3QpKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqLCB2b2lkICopOwogdHlwZWRlZiBfX2JlMzIgKCpjYWxsYmFja19lbmNvZGVfcmVzX3QpKHN0cnVjdCBzdmNfcnFzdCAqLCBzdHJ1Y3QgeGRyX3N0cmVhbSAqLCB2b2lkICopOwpAQCAtMTczLDcgKzE3Nyw3IEBACiAJX19iZTMyICpwOwogCXAgPSByZWFkX2J1Zih4ZHIsIDQpOwogCWlmICh1bmxpa2VseShwID09IE5VTEwpKQotCQlyZXR1cm4gaHRvbmwoTkZTNEVSUl9SRVNPVVJDRSk7CisJCXJldHVybiBodG9ubChORlM0RVJSX1JFU09VUkNFX0hEUik7CiAJKm9wID0gbnRvaGwoKnApOwogCXJldHVybiAwOwogfQpAQCAtMjE1LDEwICsyMTksMTAgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX05GU19WNF8xKQogCi1zdGF0aWMgdW5zaWduZWQgZGVjb2RlX3Nlc3Npb25pZChzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorc3RhdGljIF9fYmUzMiBkZWNvZGVfc2Vzc2lvbmlkKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCiAJCQkJIHN0cnVjdCBuZnM0X3Nlc3Npb25pZCAqc2lkKQogewotCXVpbnQzMl90ICpwOworCV9fYmUzMiAqcDsKIAlpbnQgbGVuID0gTkZTNF9NQVhfU0VTU0lPTklEX0xFTjsKIAogCXAgPSByZWFkX2J1Zih4ZHIsIGxlbik7CkBAIC0yMjksMTIgKzIzMywxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdW5zaWduZWQgZGVjb2RlX3JjX2xpc3Qoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKK3N0YXRpYyBfX2JlMzIgZGVjb2RlX3JjX2xpc3Qoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKIAkJCSAgICAgICBzdHJ1Y3QgcmVmZXJyaW5nX2NhbGxfbGlzdCAqcmNfbGlzdCkKIHsKLQl1aW50MzJfdCAqcDsKKwlfX2JlMzIgKnA7CiAJaW50IGk7Ci0JdW5zaWduZWQgc3RhdHVzOworCV9fYmUzMiBzdGF0dXM7CiAKIAlzdGF0dXMgPSBkZWNvZGVfc2Vzc2lvbmlkKHhkciwgJnJjX2xpc3QtPnJjbF9zZXNzaW9uaWQpOwogCWlmIChzdGF0dXMpCkBAIC0yNjcsMTMgKzI3MSwxMyBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBkZWNvZGVfY2Jfc2VxdWVuY2VfYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAorc3RhdGljIF9fYmUzMiBkZWNvZGVfY2Jfc2VxdWVuY2VfYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAogCQkJCQlzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAogCQkJCQlzdHJ1Y3QgY2Jfc2VxdWVuY2VhcmdzICphcmdzKQogewotCXVpbnQzMl90ICpwOworCV9fYmUzMiAqcDsKIAlpbnQgaTsKLQl1bnNpZ25lZCBzdGF0dXM7CisJX19iZTMyIHN0YXR1czsKIAogCXN0YXR1cyA9IGRlY29kZV9zZXNzaW9uaWQoeGRyLCAmYXJncy0+Y3NhX3Nlc3Npb25pZCk7CiAJaWYgKHN0YXR1cykKQEAgLTMyNywxMSArMzMxLDExIEBACiAJZ290byBvdXQ7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBkZWNvZGVfcmVjYWxsYW55X2FyZ3Moc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKK3N0YXRpYyBfX2JlMzIgZGVjb2RlX3JlY2FsbGFueV9hcmdzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCiAJCQkJICAgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKIAkJCQkgICAgICBzdHJ1Y3QgY2JfcmVjYWxsYW55YXJncyAqYXJncykKIHsKLQl1aW50MzJfdCAqcDsKKwlfX2JlMzIgKnA7CiAKIAlhcmdzLT5jcmFhX2FkZHIgPSBzdmNfYWRkcihycXN0cCk7CiAJcCA9IHJlYWRfYnVmKHhkciwgNCk7CkBAIC0zNDYsNiArMzUwLDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBfX2JlMzIgZGVjb2RlX3JlY2FsbHNsb3RfYXJncyhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLAorCQkJCQlzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLAorCQkJCQlzdHJ1Y3QgY2JfcmVjYWxsc2xvdGFyZ3MgKmFyZ3MpCit7CisJX19iZTMyICpwOworCisJYXJncy0+Y3JzYV9hZGRyID0gc3ZjX2FkZHIocnFzdHApOworCXAgPSByZWFkX2J1Zih4ZHIsIDQpOworCWlmICh1bmxpa2VseShwID09IE5VTEwpKQorCQlyZXR1cm4gaHRvbmwoTkZTNEVSUl9CQURYRFIpOworCWFyZ3MtPmNyc2FfdGFyZ2V0X21heF9zbG90cyA9IG50b2hsKCpwKyspOworCXJldHVybiAwOworfQorCiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiAKIHN0YXRpYyBfX2JlMzIgZW5jb2RlX3N0cmluZyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1bnNpZ25lZCBpbnQgbGVuLCBjb25zdCBjaGFyICpzdHIpCkBAIC00NjUsNyArNDgzLDcgQEAKIAkKIAlwID0geGRyX3Jlc2VydmVfc3BhY2UoeGRyLCA4KTsKIAlpZiAodW5saWtlbHkocCA9PSBOVUxMKSkKLQkJcmV0dXJuIGh0b25sKE5GUzRFUlJfUkVTT1VSQ0UpOworCQlyZXR1cm4gaHRvbmwoTkZTNEVSUl9SRVNPVVJDRV9IRFIpOwogCSpwKysgPSBodG9ubChvcCk7CiAJKnAgPSByZXM7CiAJcmV0dXJuIDA7CkBAIC00OTksMTAgKzUxNywxMCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdfTkZTX1Y0XzEpCiAKLXN0YXRpYyB1bnNpZ25lZCBlbmNvZGVfc2Vzc2lvbmlkKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsCitzdGF0aWMgX19iZTMyIGVuY29kZV9zZXNzaW9uaWQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKIAkJCQkgY29uc3Qgc3RydWN0IG5mczRfc2Vzc2lvbmlkICpzaWQpCiB7Ci0JdWludDMyX3QgKnA7CisJX19iZTMyICpwOwogCWludCBsZW4gPSBORlM0X01BWF9TRVNTSU9OSURfTEVOOwogCiAJcCA9IHhkcl9yZXNlcnZlX3NwYWNlKHhkciwgbGVuKTsKQEAgLTUxMywxMSArNTMxLDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBlbmNvZGVfY2Jfc2VxdWVuY2VfcmVzKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsCitzdGF0aWMgX19iZTMyIGVuY29kZV9jYl9zZXF1ZW5jZV9yZXMoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKIAkJCQkgICAgICAgc3RydWN0IHhkcl9zdHJlYW0gKnhkciwKIAkJCQkgICAgICAgY29uc3Qgc3RydWN0IGNiX3NlcXVlbmNlcmVzICpyZXMpCiB7Ci0JdWludDMyX3QgKnA7CisJX19iZTMyICpwOwogCXVuc2lnbmVkIHN0YXR1cyA9IHJlcy0+Y3NyX3N0YXR1czsKIAogCWlmICh1bmxpa2VseShzdGF0dXMgIT0gMCkpCkBAIC01NTQsNiArNTcyLDcgQEAKIAljYXNlIE9QX0NCX1JFQ0FMTDoKIAljYXNlIE9QX0NCX1NFUVVFTkNFOgogCWNhc2UgT1BfQ0JfUkVDQUxMX0FOWToKKwljYXNlIE9QX0NCX1JFQ0FMTF9TTE9UOgogCQkqb3AgPSAmY2FsbGJhY2tfb3BzW29wX25yXTsKIAkJYnJlYWs7CiAKQEAgLTU2Miw3ICs1ODEsNiBAQAogCWNhc2UgT1BfQ0JfTk9USUZZOgogCWNhc2UgT1BfQ0JfUFVTSF9ERUxFRzoKIAljYXNlIE9QX0NCX1JFQ0FMTEFCTEVfT0JKX0FWQUlMOgotCWNhc2UgT1BfQ0JfUkVDQUxMX1NMT1Q6CiAJY2FzZSBPUF9DQl9XQU5UU19DQU5DRUxMRUQ6CiAJY2FzZSBPUF9DQl9OT1RJRllfTE9DSzoKIAkJcmV0dXJuIGh0b25sKE5GUzRFUlJfTk9UU1VQUCk7CkBAIC02MDIsMjAgKzYyMCwxOCBAQAogc3RhdGljIF9fYmUzMiBwcm9jZXNzX29wKHVpbnQzMl90IG1pbm9ydmVyc2lvbiwgaW50IG5vcCwKIAkJc3RydWN0IHN2Y19ycXN0ICpycXN0cCwKIAkJc3RydWN0IHhkcl9zdHJlYW0gKnhkcl9pbiwgdm9pZCAqYXJncCwKLQkJc3RydWN0IHhkcl9zdHJlYW0gKnhkcl9vdXQsIHZvaWQgKnJlc3ApCisJCXN0cnVjdCB4ZHJfc3RyZWFtICp4ZHJfb3V0LCB2b2lkICpyZXNwLCBpbnQqIGRyY19zdGF0dXMpCiB7CiAJc3RydWN0IGNhbGxiYWNrX29wICpvcCA9ICZjYWxsYmFja19vcHNbMF07Ci0JdW5zaWduZWQgaW50IG9wX25yID0gT1BfQ0JfSUxMRUdBTDsKKwl1bnNpZ25lZCBpbnQgb3BfbnI7CiAJX19iZTMyIHN0YXR1czsKIAlsb25nIG1heGxlbjsKIAlfX2JlMzIgcmVzOwogCiAJZHByaW50aygiJXM6IHN0YXJ0XG4iLCBfX2Z1bmNfXyk7CiAJc3RhdHVzID0gZGVjb2RlX29wX2hkcih4ZHJfaW4sICZvcF9ucik7Ci0JaWYgKHVubGlrZWx5KHN0YXR1cykpIHsKLQkJc3RhdHVzID0gaHRvbmwoTkZTNEVSUl9PUF9JTExFR0FMKTsKLQkJZ290byBvdXQ7Ci0JfQorCWlmICh1bmxpa2VseShzdGF0dXMpKQorCQlyZXR1cm4gc3RhdHVzOwogCiAJZHByaW50aygiJXM6IG1pbm9ydmVyc2lvbj0lZCBub3A9JWQgb3BfbnI9JXVcbiIsCiAJCV9fZnVuY19fLCBtaW5vcnZlcnNpb24sIG5vcCwgb3BfbnIpOwpAQCAtNjI0LDE5ICs2NDAsMzIgQEAKIAkJCQlwcmVwcm9jZXNzX25mczRfb3Aob3BfbnIsICZvcCk7CiAJaWYgKHN0YXR1cyA9PSBodG9ubChORlM0RVJSX09QX0lMTEVHQUwpKQogCQlvcF9uciA9IE9QX0NCX0lMTEVHQUw7Ci1vdXQ6CisJaWYgKHN0YXR1cykKKwkJZ290byBlbmNvZGVfaGRyOworCisJaWYgKCpkcmNfc3RhdHVzKSB7CisJCXN0YXR1cyA9ICpkcmNfc3RhdHVzOworCQlnb3RvIGVuY29kZV9oZHI7CisJfQorCiAJbWF4bGVuID0geGRyX291dC0+ZW5kIC0geGRyX291dC0+cDsKIAlpZiAobWF4bGVuID4gMCAmJiBtYXhsZW4gPCBQQUdFX1NJWkUpIHsKLQkJaWYgKGxpa2VseShzdGF0dXMgPT0gMCAmJiBvcC0+ZGVjb2RlX2FyZ3MgIT0gTlVMTCkpCi0JCQlzdGF0dXMgPSBvcC0+ZGVjb2RlX2FyZ3MocnFzdHAsIHhkcl9pbiwgYXJncCk7Ci0JCWlmIChsaWtlbHkoc3RhdHVzID09IDAgJiYgb3AtPnByb2Nlc3Nfb3AgIT0gTlVMTCkpCisJCXN0YXR1cyA9IG9wLT5kZWNvZGVfYXJncyhycXN0cCwgeGRyX2luLCBhcmdwKTsKKwkJaWYgKGxpa2VseShzdGF0dXMgPT0gMCkpCiAJCQlzdGF0dXMgPSBvcC0+cHJvY2Vzc19vcChhcmdwLCByZXNwKTsKIAl9IGVsc2UKIAkJc3RhdHVzID0gaHRvbmwoTkZTNEVSUl9SRVNPVVJDRSk7CiAKKwkvKiBPbmx5IHNldCBieSBPUF9DQl9TRVFVRU5DRSBwcm9jZXNzaW5nICovCisJaWYgKHN0YXR1cyA9PSBodG9ubChORlM0RVJSX1JFVFJZX1VOQ0FDSEVEX1JFUCkpIHsKKwkJKmRyY19zdGF0dXMgPSBzdGF0dXM7CisJCXN0YXR1cyA9IDA7CisJfQorCitlbmNvZGVfaGRyOgogCXJlcyA9IGVuY29kZV9vcF9oZHIoeGRyX291dCwgb3BfbnIsIHN0YXR1cyk7Ci0JaWYgKHN0YXR1cyA9PSAwKQotCQlzdGF0dXMgPSByZXM7CisJaWYgKHVubGlrZWx5KHJlcykpCisJCXJldHVybiByZXM7CiAJaWYgKG9wLT5lbmNvZGVfcmVzICE9IE5VTEwgJiYgc3RhdHVzID09IDApCiAJCXN0YXR1cyA9IG9wLT5lbmNvZGVfcmVzKHJxc3RwLCB4ZHJfb3V0LCByZXNwKTsKIAlkcHJpbnRrKCIlczogZG9uZSwgc3RhdHVzID0gJWRcbiIsIF9fZnVuY19fLCBudG9obChzdGF0dXMpKTsKQEAgLTY1Miw3ICs2ODEsNyBAQAogCXN0cnVjdCBjYl9jb21wb3VuZF9oZHJfcmVzIGhkcl9yZXMgPSB7IE5VTEwgfTsKIAlzdHJ1Y3QgeGRyX3N0cmVhbSB4ZHJfaW4sIHhkcl9vdXQ7CiAJX19iZTMyICpwOwotCV9fYmUzMiBzdGF0dXM7CisJX19iZTMyIHN0YXR1cywgZHJjX3N0YXR1cyA9IDA7CiAJdW5zaWduZWQgaW50IG5vcHMgPSAwOwogCiAJZHByaW50aygiJXM6IHN0YXJ0XG4iLCBfX2Z1bmNfXyk7CkBAIC02NzIsMTEgKzcwMSwxOCBAQAogCQlyZXR1cm4gcnBjX3N5c3RlbV9lcnI7CiAKIAl3aGlsZSAoc3RhdHVzID09IDAgJiYgbm9wcyAhPSBoZHJfYXJnLm5vcHMpIHsKLQkJc3RhdHVzID0gcHJvY2Vzc19vcChoZHJfYXJnLm1pbm9ydmVyc2lvbiwgbm9wcywKLQkJCQkgICAgcnFzdHAsICZ4ZHJfaW4sIGFyZ3AsICZ4ZHJfb3V0LCByZXNwKTsKKwkJc3RhdHVzID0gcHJvY2Vzc19vcChoZHJfYXJnLm1pbm9ydmVyc2lvbiwgbm9wcywgcnFzdHAsCisJCQkJICAgICZ4ZHJfaW4sIGFyZ3AsICZ4ZHJfb3V0LCByZXNwLCAmZHJjX3N0YXR1cyk7CiAJCW5vcHMrKzsKIAl9CiAKKwkvKiBCdWZmZXIgb3ZlcmZsb3cgaW4gZGVjb2RlX29wc19oZHIgb3IgZW5jb2RlX29wc19oZHIuIFJldHVybgorCSogcmVzb3VyY2UgZXJyb3IgaW4gY2JfY29tcG91bmQgc3RhdHVzIHdpdGhvdXQgcmV0dXJuaW5nIG9wICovCisJaWYgKHVubGlrZWx5KHN0YXR1cyA9PSBodG9ubChORlM0RVJSX1JFU09VUkNFX0hEUikpKSB7CisJCXN0YXR1cyA9IGh0b25sKE5GUzRFUlJfUkVTT1VSQ0UpOworCQlub3BzLS07CisJfQorCiAJKmhkcl9yZXMuc3RhdHVzID0gc3RhdHVzOwogCSpoZHJfcmVzLm5vcHMgPSBodG9ubChub3BzKTsKIAlkcHJpbnRrKCIlczogZG9uZSwgc3RhdHVzID0gJXVcbiIsIF9fZnVuY19fLCBudG9obChzdGF0dXMpKTsKQEAgLTcxMyw2ICs3NDksMTEgQEAKIAkJLmRlY29kZV9hcmdzID0gKGNhbGxiYWNrX2RlY29kZV9hcmdfdClkZWNvZGVfcmVjYWxsYW55X2FyZ3MsCiAJCS5yZXNfbWF4c2l6ZSA9IENCX09QX1JFQ0FMTEFOWV9SRVNfTUFYU1osCiAJfSwKKwlbT1BfQ0JfUkVDQUxMX1NMT1RdID0geworCQkucHJvY2Vzc19vcCA9IChjYWxsYmFja19wcm9jZXNzX29wX3QpbmZzNF9jYWxsYmFja19yZWNhbGxzbG90LAorCQkuZGVjb2RlX2FyZ3MgPSAoY2FsbGJhY2tfZGVjb2RlX2FyZ190KWRlY29kZV9yZWNhbGxzbG90X2FyZ3MsCisJCS5yZXNfbWF4c2l6ZSA9IENCX09QX1JFQ0FMTFNMT1RfUkVTX01BWFNaLAorCX0sCiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCiB9OwogCmRpZmYgLS1naXQgYS9mcy9uZnMvY2xpZW50LmMgYi9mcy9uZnMvY2xpZW50LmMKaW5kZXggZWU3NzcxMy4uMjI3NGYxNyAxMDA2NDQKLS0tIGEvZnMvbmZzL2NsaWVudC5jCisrKyBiL2ZzL25mcy9jbGllbnQuYwpAQCAtMTY0LDMwICsxNjQsNyBAQAogCXJldHVybiBFUlJfUFRSKGVycik7CiB9CiAKLXN0YXRpYyB2b2lkIG5mczRfc2h1dGRvd25fY2xpZW50KHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCi17CiAjaWZkZWYgQ09ORklHX05GU19WNAotCWlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChORlNfQ1NfUkVORVdELCAmY2xwLT5jbF9yZXNfc3RhdGUpKQotCQluZnM0X2tpbGxfcmVuZXdkKGNscCk7Ci0JQlVHX09OKCFSQl9FTVBUWV9ST09UKCZjbHAtPmNsX3N0YXRlX293bmVycykpOwotCWlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChORlNfQ1NfSURNQVAsICZjbHAtPmNsX3Jlc19zdGF0ZSkpCi0JCW5mc19pZG1hcF9kZWxldGUoY2xwKTsKLQotCXJwY19kZXN0cm95X3dhaXRfcXVldWUoJmNscC0+Y2xfcnBjd2FpdHEpOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBEZXN0cm95IHRoZSBORlM0IGNhbGxiYWNrIHNlcnZpY2UKLSAqLwotc3RhdGljIHZvaWQgbmZzNF9kZXN0cm95X2NhbGxiYWNrKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCi17Ci0jaWZkZWYgQ09ORklHX05GU19WNAotCWlmIChfX3Rlc3RfYW5kX2NsZWFyX2JpdChORlNfQ1NfQ0FMTEJBQ0ssICZjbHAtPmNsX3Jlc19zdGF0ZSkpCi0JCW5mc19jYWxsYmFja19kb3duKGNscC0+Y2xfbWlub3J2ZXJzaW9uKTsKLSNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0ICovCi19Ci0KIC8qCiAgKiBDbGVhcnMvcHV0cyBhbGwgbWlub3IgdmVyc2lvbiBzcGVjaWZpYyBwYXJ0cyBmcm9tIGFuIG5mc19jbGllbnQgc3RydWN0CiAgKiByZXZlcnRpbmcgaXQgdG8gbWlub3J2ZXJzaW9uIDAuCkBAIC0yMDIsMTggKzE3OSw0MSBAQAogCiAJY2xwLT5jbF9jYWxsX3N5bmMgPSBfbmZzNF9jYWxsX3N5bmM7CiAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovCi0KLQluZnM0X2Rlc3Ryb3lfY2FsbGJhY2soY2xwKTsKIH0KIAogLyoKKyAqIERlc3Ryb3kgdGhlIE5GUzQgY2FsbGJhY2sgc2VydmljZQorICovCitzdGF0aWMgdm9pZCBuZnM0X2Rlc3Ryb3lfY2FsbGJhY2soc3RydWN0IG5mc19jbGllbnQgKmNscCkKK3sKKwlpZiAoX190ZXN0X2FuZF9jbGVhcl9iaXQoTkZTX0NTX0NBTExCQUNLLCAmY2xwLT5jbF9yZXNfc3RhdGUpKQorCQluZnNfY2FsbGJhY2tfZG93bihjbHAtPmNsX21pbm9ydmVyc2lvbik7Cit9CisKK3N0YXRpYyB2b2lkIG5mczRfc2h1dGRvd25fY2xpZW50KHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCit7CisJaWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KE5GU19DU19SRU5FV0QsICZjbHAtPmNsX3Jlc19zdGF0ZSkpCisJCW5mczRfa2lsbF9yZW5ld2QoY2xwKTsKKwluZnM0X2NsZWFyX2NsaWVudF9taW5vcl92ZXJzaW9uKGNscCk7CisJbmZzNF9kZXN0cm95X2NhbGxiYWNrKGNscCk7CisJaWYgKF9fdGVzdF9hbmRfY2xlYXJfYml0KE5GU19DU19JRE1BUCwgJmNscC0+Y2xfcmVzX3N0YXRlKSkKKwkJbmZzX2lkbWFwX2RlbGV0ZShjbHApOworCisJcnBjX2Rlc3Ryb3lfd2FpdF9xdWV1ZSgmY2xwLT5jbF9ycGN3YWl0cSk7Cit9CisjZWxzZQorc3RhdGljIHZvaWQgbmZzNF9zaHV0ZG93bl9jbGllbnQoc3RydWN0IG5mc19jbGllbnQgKmNscCkKK3sKK30KKyNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0ICovCisKKy8qCiAgKiBEZXN0cm95IGEgc2hhcmVkIGNsaWVudCByZWNvcmQKICAqLwogc3RhdGljIHZvaWQgbmZzX2ZyZWVfY2xpZW50KHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCiB7CiAJZHByaW50aygiLS0+IG5mc19mcmVlX2NsaWVudCgldSlcbiIsIGNscC0+cnBjX29wcy0+dmVyc2lvbik7CiAKLQluZnM0X2NsZWFyX2NsaWVudF9taW5vcl92ZXJzaW9uKGNscCk7CiAJbmZzNF9zaHV0ZG93bl9jbGllbnQoY2xwKTsKIAogCW5mc19mc2NhY2hlX3JlbGVhc2VfY2xpZW50X2Nvb2tpZShjbHApOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL2Rpci5jIGIvZnMvbmZzL2Rpci5jCmluZGV4IDNjN2YwM2IuLmExZjZiNDQgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kaXIuYworKysgYi9mcy9uZnMvZGlyLmMKQEAgLTU2MCw3ICs1NjAsNyBAQAogCWRlc2MtPmVudHJ5ID0gJm15X2VudHJ5OwogCiAJbmZzX2Jsb2NrX3NpbGx5cmVuYW1lKGRlbnRyeSk7Ci0JcmVzID0gbmZzX3JldmFsaWRhdGVfbWFwcGluZ19ub2xvY2soaW5vZGUsIGZpbHAtPmZfbWFwcGluZyk7CisJcmVzID0gbmZzX3JldmFsaWRhdGVfbWFwcGluZyhpbm9kZSwgZmlscC0+Zl9tYXBwaW5nKTsKIAlpZiAocmVzIDwgMCkKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9kbnNfcmVzb2x2ZS5jIGIvZnMvbmZzL2Ruc19yZXNvbHZlLmMKaW5kZXggOTVlMWNhNy4uM2YwY2Q0ZCAxMDA2NDQKLS0tIGEvZnMvbmZzL2Ruc19yZXNvbHZlLmMKKysrIGIvZnMvbmZzL2Ruc19yZXNvbHZlLmMKQEAgLTM2LDYgKzM2LDE5IEBACiB9OwogCiAKK3N0YXRpYyB2b2lkIG5mc19kbnNfZW50X3VwZGF0ZShzdHJ1Y3QgY2FjaGVfaGVhZCAqY25ldywKKwkJc3RydWN0IGNhY2hlX2hlYWQgKmNrZXkpCit7CisJc3RydWN0IG5mc19kbnNfZW50ICpuZXc7CisJc3RydWN0IG5mc19kbnNfZW50ICprZXk7CisKKwluZXcgPSBjb250YWluZXJfb2YoY25ldywgc3RydWN0IG5mc19kbnNfZW50LCBoKTsKKwlrZXkgPSBjb250YWluZXJfb2YoY2tleSwgc3RydWN0IG5mc19kbnNfZW50LCBoKTsKKworCW1lbWNweSgmbmV3LT5hZGRyLCAma2V5LT5hZGRyLCBrZXktPmFkZHJsZW4pOworCW5ldy0+YWRkcmxlbiA9IGtleS0+YWRkcmxlbjsKK30KKwogc3RhdGljIHZvaWQgbmZzX2Ruc19lbnRfaW5pdChzdHJ1Y3QgY2FjaGVfaGVhZCAqY25ldywKIAkJc3RydWN0IGNhY2hlX2hlYWQgKmNrZXkpCiB7CkBAIC00OSw4ICs2Miw3IEBACiAJbmV3LT5ob3N0bmFtZSA9IGtzdHJuZHVwKGtleS0+aG9zdG5hbWUsIGtleS0+bmFtZWxlbiwgR0ZQX0tFUk5FTCk7CiAJaWYgKG5ldy0+aG9zdG5hbWUpIHsKIAkJbmV3LT5uYW1lbGVuID0ga2V5LT5uYW1lbGVuOwotCQltZW1jcHkoJm5ldy0+YWRkciwgJmtleS0+YWRkciwga2V5LT5hZGRybGVuKTsKLQkJbmV3LT5hZGRybGVuID0ga2V5LT5hZGRybGVuOworCQluZnNfZG5zX2VudF91cGRhdGUoY25ldywgY2tleSk7CiAJfSBlbHNlIHsKIAkJbmV3LT5uYW1lbGVuID0gMDsKIAkJbmV3LT5hZGRybGVuID0gMDsKQEAgLTIzNCw3ICsyNDYsNyBAQAogCS5jYWNoZV9zaG93ID0gbmZzX2Ruc19zaG93LAogCS5tYXRjaCA9IG5mc19kbnNfbWF0Y2gsCiAJLmluaXQgPSBuZnNfZG5zX2VudF9pbml0LAotCS51cGRhdGUgPSBuZnNfZG5zX2VudF9pbml0LAorCS51cGRhdGUgPSBuZnNfZG5zX2VudF91cGRhdGUsCiAJLmFsbG9jID0gbmZzX2Ruc19lbnRfYWxsb2MsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9uZnMvZmlsZS5jIGIvZnMvbmZzL2ZpbGUuYwppbmRleCA2M2YyMDcxLi5hZThkMDIyIDEwMDY0NAotLS0gYS9mcy9uZnMvZmlsZS5jCisrKyBiL2ZzL25mcy9maWxlLmMKQEAgLTEyMywxMSArMTIzLDExIEBACiAJCQlmaWxwLT5mX3BhdGguZGVudHJ5LT5kX3BhcmVudC0+ZF9uYW1lLm5hbWUsCiAJCQlmaWxwLT5mX3BhdGguZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKKwluZnNfaW5jX3N0YXRzKGlub2RlLCBORlNJT1NfVkZTT1BFTik7CiAJcmVzID0gbmZzX2NoZWNrX2ZsYWdzKGZpbHAtPmZfZmxhZ3MpOwogCWlmIChyZXMpCiAJCXJldHVybiByZXM7CiAKLQluZnNfaW5jX3N0YXRzKGlub2RlLCBORlNJT1NfVkZTT1BFTik7CiAJcmVzID0gbmZzX29wZW4oaW5vZGUsIGZpbHApOwogCXJldHVybiByZXM7CiB9CkBAIC0yMzcsOSArMjM3LDkgQEAKIAkJCWRlbnRyeS0+ZF9wYXJlbnQtPmRfbmFtZS5uYW1lLAogCQkJZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKKwluZnNfaW5jX3N0YXRzKGlub2RlLCBORlNJT1NfVkZTRkxVU0gpOwogCWlmICgoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpID09IDApCiAJCXJldHVybiAwOwotCW5mc19pbmNfc3RhdHMoaW5vZGUsIE5GU0lPU19WRlNGTFVTSCk7CiAKIAkvKiBGbHVzaCB3cml0ZXMgdG8gdGhlIHNlcnZlciBhbmQgcmV0dXJuIGFueSBlcnJvcnMgKi8KIAlyZXR1cm4gbmZzX2RvX2ZzeW5jKGN0eCwgaW5vZGUpOwpAQCAtMjYyLDkgKzI2MiwxMSBAQAogCQkodW5zaWduZWQgbG9uZykgY291bnQsICh1bnNpZ25lZCBsb25nKSBwb3MpOwogCiAJcmVzdWx0ID0gbmZzX3JldmFsaWRhdGVfbWFwcGluZyhpbm9kZSwgaW9jYi0+a2lfZmlscC0+Zl9tYXBwaW5nKTsKLQluZnNfYWRkX3N0YXRzKGlub2RlLCBORlNJT1NfTk9STUFMUkVBREJZVEVTLCBjb3VudCk7Ci0JaWYgKCFyZXN1bHQpCisJaWYgKCFyZXN1bHQpIHsKIAkJcmVzdWx0ID0gZ2VuZXJpY19maWxlX2Fpb19yZWFkKGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKKwkJaWYgKHJlc3VsdCA+IDApCisJCQluZnNfYWRkX3N0YXRzKGlub2RlLCBORlNJT1NfTk9STUFMUkVBREJZVEVTLCByZXN1bHQpOworCX0KIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC0yODIsOCArMjg0LDExIEBACiAJCSh1bnNpZ25lZCBsb25nKSBjb3VudCwgKHVuc2lnbmVkIGxvbmcgbG9uZykgKnBwb3MpOwogCiAJcmVzID0gbmZzX3JldmFsaWRhdGVfbWFwcGluZyhpbm9kZSwgZmlscC0+Zl9tYXBwaW5nKTsKLQlpZiAoIXJlcykKKwlpZiAoIXJlcykgewogCQlyZXMgPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQoZmlscCwgcHBvcywgcGlwZSwgY291bnQsIGZsYWdzKTsKKwkJaWYgKHJlcyA+IDApCisJCQluZnNfYWRkX3N0YXRzKGlub2RlLCBORlNJT1NfTk9STUFMUkVBREJZVEVTLCByZXMpOworCX0KIAlyZXR1cm4gcmVzOwogfQogCkBAIC01OTYsNiArNjAxLDcgQEAKIHsKIAlzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5ID0gaW9jYi0+a2lfZmlscC0+Zl9wYXRoLmRlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwl1bnNpZ25lZCBsb25nIHdyaXR0ZW4gPSAwOwogCXNzaXplX3QgcmVzdWx0OwogCXNpemVfdCBjb3VudCA9IGlvdl9sZW5ndGgoaW92LCBucl9zZWdzKTsKIApAQCAtNjIyLDE0ICs2MjgsMTggQEAKIAlpZiAoIWNvdW50KQogCQlnb3RvIG91dDsKIAotCW5mc19hZGRfc3RhdHMoaW5vZGUsIE5GU0lPU19OT1JNQUxXUklUVEVOQllURVMsIGNvdW50KTsKIAlyZXN1bHQgPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlKGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKKwlpZiAocmVzdWx0ID4gMCkKKwkJd3JpdHRlbiA9IHJlc3VsdDsKKwogCS8qIFJldHVybiBlcnJvciB2YWx1ZXMgZm9yIE9fRFNZTkMgYW5kIElTX1NZTkMoKSAqLwogCWlmIChyZXN1bHQgPj0gMCAmJiBuZnNfbmVlZF9zeW5jX3dyaXRlKGlvY2ItPmtpX2ZpbHAsIGlub2RlKSkgewogCQlpbnQgZXJyID0gbmZzX2RvX2ZzeW5jKG5mc19maWxlX29wZW5fY29udGV4dChpb2NiLT5raV9maWxwKSwgaW5vZGUpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJlc3VsdCA9IGVycjsKIAl9CisJaWYgKHJlc3VsdCA+IDApCisJCW5mc19hZGRfc3RhdHMoaW5vZGUsIE5GU0lPU19OT1JNQUxXUklUVEVOQllURVMsIHdyaXR0ZW4pOwogb3V0OgogCXJldHVybiByZXN1bHQ7CiAKQEAgLTY0NCw2ICs2NTQsNyBAQAogewogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwl1bnNpZ25lZCBsb25nIHdyaXR0ZW4gPSAwOwogCXNzaXplX3QgcmV0OwogCiAJZHByaW50aygiTkZTIHNwbGljZV93cml0ZSglcy8lcywgJWx1QCVsbHUpXG4iLApAQCAtNjU0LDE0ICs2NjUsMTcgQEAKIAkgKiBUaGUgY29tYmluYXRpb24gb2Ygc3BsaWNlIGFuZCBhbiBPX0FQUEVORCBkZXN0aW5hdGlvbiBpcyBkaXNhbGxvd2VkLgogCSAqLwogCi0JbmZzX2FkZF9zdGF0cyhpbm9kZSwgTkZTSU9TX05PUk1BTFdSSVRURU5CWVRFUywgY291bnQpOwotCiAJcmV0ID0gZ2VuZXJpY19maWxlX3NwbGljZV93cml0ZShwaXBlLCBmaWxwLCBwcG9zLCBjb3VudCwgZmxhZ3MpOworCWlmIChyZXQgPiAwKQorCQl3cml0dGVuID0gcmV0OworCiAJaWYgKHJldCA+PSAwICYmIG5mc19uZWVkX3N5bmNfd3JpdGUoZmlscCwgaW5vZGUpKSB7CiAJCWludCBlcnIgPSBuZnNfZG9fZnN5bmMobmZzX2ZpbGVfb3Blbl9jb250ZXh0KGZpbHApLCBpbm9kZSk7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0ID0gZXJyOwogCX0KKwlpZiAocmV0ID4gMCkKKwkJbmZzX2FkZF9zdGF0cyhpbm9kZSwgTkZTSU9TX05PUk1BTFdSSVRURU5CWVRFUywgd3JpdHRlbik7CiAJcmV0dXJuIHJldDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL2lub2RlLmMgYi9mcy9uZnMvaW5vZGUuYwppbmRleCBmMTQxYmRlLi42NTcyMDFhIDEwMDY0NAotLS0gYS9mcy9uZnMvaW5vZGUuYworKysgYi9mcy9uZnMvaW5vZGUuYwpAQCAtOTcsMjIgKzk3LDYgQEAKIAlyZXR1cm4gaW5vOwogfQogCi1pbnQgbmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBzeW5jKQotewotCWludCByZXQ7Ci0KLQlpZiAoc3luYykgewotCQlyZXQgPSBmaWxlbWFwX2ZkYXRhd2FpdChpbm9kZS0+aV9tYXBwaW5nKTsKLQkJaWYgKHJldCA9PSAwKQotCQkJcmV0ID0gbmZzX2NvbW1pdF9pbm9kZShpbm9kZSwgRkxVU0hfU1lOQyk7Ci0JfSBlbHNlCi0JCXJldCA9IG5mc19jb21taXRfaW5vZGUoaW5vZGUsIDApOwotCWlmIChyZXQgPj0gMCkKLQkJcmV0dXJuIDA7Ci0JX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBJX0RJUlRZX0RBVEFTWU5DKTsKLQlyZXR1cm4gcmV0OwotfQotCiB2b2lkIG5mc19jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCS8qCkBAIC0xMzAsMTYgKzExNCwxMiBAQAogICovCiBpbnQgbmZzX3N5bmNfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZykKIHsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCi0JaWYgKG1hcHBpbmctPm5ycGFnZXMgPT0gMCkKLQkJcmV0dXJuIDA7Ci0JdW5tYXBfbWFwcGluZ19yYW5nZShtYXBwaW5nLCAwLCAwLCAwKTsKLQlyZXQgPSBmaWxlbWFwX3dyaXRlX2FuZF93YWl0KG1hcHBpbmcpOwotCWlmIChyZXQgIT0gMCkKLQkJZ290byBvdXQ7Ci0JcmV0ID0gbmZzX3diX2FsbChtYXBwaW5nLT5ob3N0KTsKLW91dDoKKwlpZiAobWFwcGluZy0+bnJwYWdlcyAhPSAwKSB7CisJCXVubWFwX21hcHBpbmdfcmFuZ2UobWFwcGluZywgMCwgMCwgMCk7CisJCXJldCA9IG5mc193Yl9hbGwobWFwcGluZy0+aG9zdCk7CisJfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTUxMSwxNyArNDkxLDExIEBACiAJaW50IG5lZWRfYXRpbWUgPSBORlNfSShpbm9kZSktPmNhY2hlX3ZhbGlkaXR5ICYgTkZTX0lOT19JTlZBTElEX0FUSU1FOwogCWludCBlcnI7CiAKLQkvKgotCSAqIEZsdXNoIG91dCB3cml0ZXMgdG8gdGhlIHNlcnZlciBpbiBvcmRlciB0byB1cGRhdGUgYy9tdGltZS4KLQkgKgotCSAqIEhvbGQgdGhlIGlfbXV0ZXggdG8gc3VzcGVuZCBhcHBsaWNhdGlvbiB3cml0ZXMgdGVtcG9yYXJpbHk7Ci0JICogdGhpcyBwcmV2ZW50cyBsb25nLXJ1bm5pbmcgd3JpdGluZyBhcHBsaWNhdGlvbnMgZnJvbSBibG9ja2luZwotCSAqIG5mc193Yl9ub2NvbW1pdC4KLQkgKi8KKwkvKiBGbHVzaCBvdXQgd3JpdGVzIHRvIHRoZSBzZXJ2ZXIgaW4gb3JkZXIgdG8gdXBkYXRlIGMvbXRpbWUuICAqLwogCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7Ci0JCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQkJbmZzX3diX25vY29tbWl0KGlub2RlKTsKLQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJCWVyciA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXQoaW5vZGUtPmlfbWFwcGluZyk7CisJCWlmIChlcnIpCisJCQlnb3RvIG91dDsKIAl9CiAKIAkvKgpAQCAtNTQ1LDYgKzUxOSw3IEBACiAJCWdlbmVyaWNfZmlsbGF0dHIoaW5vZGUsIHN0YXQpOwogCQlzdGF0LT5pbm8gPSBuZnNfY29tcGF0X3VzZXJfaW5vNjQoTkZTX0ZJTEVJRChpbm9kZSkpOwogCX0KK291dDoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC01NzQsMTQgKzU0OSwxNCBAQAogCW5mc19yZXZhbGlkYXRlX2lub2RlKHNlcnZlciwgaW5vZGUpOwogfQogCi1zdGF0aWMgc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmFsbG9jX25mc19vcGVuX2NvbnRleHQoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHJwY19jcmVkICpjcmVkKQorc3RhdGljIHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICphbGxvY19uZnNfb3Blbl9jb250ZXh0KHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQpCiB7CiAJc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eDsKIAogCWN0eCA9IGttYWxsb2Moc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY3R4ICE9IE5VTEwpIHsKLQkJY3R4LT5wYXRoLmRlbnRyeSA9IGRnZXQoZGVudHJ5KTsKLQkJY3R4LT5wYXRoLm1udCA9IG1udGdldChtbnQpOworCQljdHgtPnBhdGggPSAqcGF0aDsKKwkJcGF0aF9nZXQoJmN0eC0+cGF0aCk7CiAJCWN0eC0+Y3JlZCA9IGdldF9ycGNjcmVkKGNyZWQpOwogCQljdHgtPnN0YXRlID0gTlVMTDsKIAkJY3R4LT5sb2Nrb3duZXIgPSBjdXJyZW50LT5maWxlczsKQEAgLTYyMCwxMSArNTk1LDYgQEAKIAlfX3B1dF9uZnNfb3Blbl9jb250ZXh0KGN0eCwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIHB1dF9uZnNfb3Blbl9jb250ZXh0X3N5bmMoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCkKLXsKLQlfX3B1dF9uZnNfb3Blbl9jb250ZXh0KGN0eCwgMSk7Ci19Ci0KIC8qCiAgKiBFbnN1cmUgdGhhdCBtbWFwIGhhcyBhIHJlY2VudCBSUEMgY3JlZGVudGlhbCBmb3IgdXNlIHdoZW4gd3JpdGluZyBvdXQKICAqIHNoYXJlZCBwYWdlcwpAQCAtNjcxLDcgKzY0MSw3IEBACiAJCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJCWxpc3RfbW92ZV90YWlsKCZjdHgtPmxpc3QsICZORlNfSShpbm9kZSktPm9wZW5fZmlsZXMpOwogCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JCXB1dF9uZnNfb3Blbl9jb250ZXh0X3N5bmMoY3R4KTsKKwkJX19wdXRfbmZzX29wZW5fY29udGV4dChjdHgsIGZpbHAtPmZfZmxhZ3MgJiBPX0RJUkVDVCA/IDAgOiAxKTsKIAl9CiB9CiAKQEAgLTY4Niw3ICs2NTYsNyBAQAogCWNyZWQgPSBycGNfbG9va3VwX2NyZWQoKTsKIAlpZiAoSVNfRVJSKGNyZWQpKQogCQlyZXR1cm4gUFRSX0VSUihjcmVkKTsKLQljdHggPSBhbGxvY19uZnNfb3Blbl9jb250ZXh0KGZpbHAtPmZfcGF0aC5tbnQsIGZpbHAtPmZfcGF0aC5kZW50cnksIGNyZWQpOworCWN0eCA9IGFsbG9jX25mc19vcGVuX2NvbnRleHQoJmZpbHAtPmZfcGF0aCwgY3JlZCk7CiAJcHV0X3JwY2NyZWQoY3JlZCk7CiAJaWYgKGN0eCA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTc3OSw3ICs3NDksNyBAQAogCXJldHVybiBfX25mc19yZXZhbGlkYXRlX2lub2RlKHNlcnZlciwgaW5vZGUpOwogfQogCi1zdGF0aWMgaW50IG5mc19pbnZhbGlkYXRlX21hcHBpbmdfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQorc3RhdGljIGludCBuZnNfaW52YWxpZGF0ZV9tYXBwaW5nKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogewogCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7CiAJCkBAIC04MDAsNDkgKzc3MCwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG5mc19pbnZhbGlkYXRlX21hcHBpbmcoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpCi17Ci0JaW50IHJldCA9IDA7Ci0KLQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JaWYgKE5GU19JKGlub2RlKS0+Y2FjaGVfdmFsaWRpdHkgJiBORlNfSU5PX0lOVkFMSURfREFUQSkgewotCQlyZXQgPSBuZnNfc3luY19tYXBwaW5nKG1hcHBpbmcpOwotCQlpZiAocmV0ID09IDApCi0JCQlyZXQgPSBuZnNfaW52YWxpZGF0ZV9tYXBwaW5nX25vbG9jayhpbm9kZSwgbWFwcGluZyk7Ci0JfQotCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogbmZzX3JldmFsaWRhdGVfbWFwcGluZ19ub2xvY2sgLSBSZXZhbGlkYXRlIHRoZSBwYWdlY2FjaGUKLSAqIEBpbm9kZSAtIHBvaW50ZXIgdG8gaG9zdCBpbm9kZQotICogQG1hcHBpbmcgLSBwb2ludGVyIHRvIG1hcHBpbmcKLSAqLwotaW50IG5mc19yZXZhbGlkYXRlX21hcHBpbmdfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQotewotCXN0cnVjdCBuZnNfaW5vZGUgKm5mc2kgPSBORlNfSShpbm9kZSk7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoKG5mc2ktPmNhY2hlX3ZhbGlkaXR5ICYgTkZTX0lOT19SRVZBTF9QQUdFQ0FDSEUpCi0JCQl8fCBuZnNfYXR0cmlidXRlX3RpbWVvdXQoaW5vZGUpIHx8IE5GU19TVEFMRShpbm9kZSkpIHsKLQkJcmV0ID0gX19uZnNfcmV2YWxpZGF0ZV9pbm9kZShORlNfU0VSVkVSKGlub2RlKSwgaW5vZGUpOwotCQlpZiAocmV0IDwgMCkKLQkJCWdvdG8gb3V0OwotCX0KLQlpZiAobmZzaS0+Y2FjaGVfdmFsaWRpdHkgJiBORlNfSU5PX0lOVkFMSURfREFUQSkKLQkJcmV0ID0gbmZzX2ludmFsaWRhdGVfbWFwcGluZ19ub2xvY2soaW5vZGUsIG1hcHBpbmcpOwotb3V0OgotCXJldHVybiByZXQ7Ci19Ci0KIC8qKgogICogbmZzX3JldmFsaWRhdGVfbWFwcGluZyAtIFJldmFsaWRhdGUgdGhlIHBhZ2VjYWNoZQogICogQGlub2RlIC0gcG9pbnRlciB0byBob3N0IGlub2RlCiAgKiBAbWFwcGluZyAtIHBvaW50ZXIgdG8gbWFwcGluZwotICoKLSAqIFRoaXMgdmVyc2lvbiBvZiB0aGUgZnVuY3Rpb24gd2lsbCB0YWtlIHRoZSBpbm9kZS0+aV9tdXRleCBhbmQgYXR0ZW1wdCB0bwotICogZmx1c2ggb3V0IGFsbCBkaXJ0eSBkYXRhIGlmIGl0IG5lZWRzIHRvIGludmFsaWRhdGUgdGhlIHBhZ2UgY2FjaGUuCiAgKi8KIGludCBuZnNfcmV2YWxpZGF0ZV9tYXBwaW5nKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQogewpAQCAtMTQyMCw2ICsxMzUxLDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmbmZzaS0+YWNjZXNzX2NhY2hlX2lub2RlX2xydSk7CiAJSU5JVF9SQURJWF9UUkVFKCZuZnNpLT5uZnNfcGFnZV90cmVlLCBHRlBfQVRPTUlDKTsKIAluZnNpLT5ucGFnZXMgPSAwOworCW5mc2ktPm5jb21taXQgPSAwOwogCWF0b21pY19zZXQoJm5mc2ktPnNpbGx5X2NvdW50LCAxKTsKIAlJTklUX0hMSVNUX0hFQUQoJm5mc2ktPnNpbGx5X2xpc3QpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm5mc2ktPndhaXRxdWV1ZSk7CmRpZmYgLS1naXQgYS9mcy9uZnMvaW50ZXJuYWwuaCBiL2ZzL25mcy9pbnRlcm5hbC5oCmluZGV4IDI5ZTQ2NGQuLjExZjgyZjAgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbnRlcm5hbC5oCisrKyBiL2ZzL25mcy9pbnRlcm5hbC5oCkBAIC0yMTEsNyArMjExLDcgQEAKIGV4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqbmZzaW9kX3dvcmtxdWV1ZTsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKm5mc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIGV4dGVybiB2b2lkIG5mc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKLWV4dGVybiBpbnQgbmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLGludCk7CitleHRlcm4gaW50IG5mc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopOwogZXh0ZXJuIHZvaWQgbmZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKICNpZmRlZiBDT05GSUdfTkZTX1Y0CiBleHRlcm4gdm9pZCBuZnM0X2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9pb3N0YXQuaCBiL2ZzL25mcy9pb3N0YXQuaAppbmRleCA0NmQ3NzlhLi4xZDhkNWM4IDEwMDY0NAotLS0gYS9mcy9uZnMvaW9zdGF0LmgKKysrIGIvZnMvbmZzL2lvc3RhdC5oCkBAIC01NywxMiArNTcsMTIgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBuZnNfaW9zdGF0cyAqbmZzX2FsbG9jX2lvc3RhdHModm9pZCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5mc19pb3N0YXRzIF9fcGVyY3B1ICpuZnNfYWxsb2NfaW9zdGF0cyh2b2lkKQogewogCXJldHVybiBhbGxvY19wZXJjcHUoc3RydWN0IG5mc19pb3N0YXRzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG5mc19mcmVlX2lvc3RhdHMoc3RydWN0IG5mc19pb3N0YXRzICpzdGF0cykKK3N0YXRpYyBpbmxpbmUgdm9pZCBuZnNfZnJlZV9pb3N0YXRzKHN0cnVjdCBuZnNfaW9zdGF0cyBfX3BlcmNwdSAqc3RhdHMpCiB7CiAJaWYgKHN0YXRzICE9IE5VTEwpCiAJCWZyZWVfcGVyY3B1KHN0YXRzKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnMzcHJvYy5jIGIvZnMvbmZzL25mczNwcm9jLmMKaW5kZXggM2Y4ODgxZC4uMjQ5OTJmMCAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczNwcm9jLmMKKysrIGIvZnMvbmZzL25mczNwcm9jLmMKQEAgLTIyLDE0ICsyMiwxNCBAQAogCiAjZGVmaW5lIE5GU0RCR19GQUNJTElUWQkJTkZTREJHX1BST0MKIAotLyogQSB3cmFwcGVyIHRvIGhhbmRsZSB0aGUgRUpVS0VCT1ggZXJyb3IgbWVzc2FnZSAqLworLyogQSB3cmFwcGVyIHRvIGhhbmRsZSB0aGUgRUpVS0VCT1ggYW5kIEVLRVlFWFBJUkVEIGVycm9yIG1lc3NhZ2VzICovCiBzdGF0aWMgaW50CiBuZnMzX3JwY193cmFwcGVyKHN0cnVjdCBycGNfY2xudCAqY2xudCwgc3RydWN0IHJwY19tZXNzYWdlICptc2csIGludCBmbGFncykKIHsKIAlpbnQgcmVzOwogCWRvIHsKIAkJcmVzID0gcnBjX2NhbGxfc3luYyhjbG50LCBtc2csIGZsYWdzKTsKLQkJaWYgKHJlcyAhPSAtRUpVS0VCT1gpCisJCWlmIChyZXMgIT0gLUVKVUtFQk9YICYmIHJlcyAhPSAtRUtFWUVYUElSRUQpCiAJCQlicmVhazsKIAkJc2NoZWR1bGVfdGltZW91dF9raWxsYWJsZShORlNfSlVLRUJPWF9SRVRSWV9USU1FKTsKIAkJcmVzID0gLUVSRVNUQVJUU1lTOwpAQCAtNDIsOSArNDIsMTAgQEAKIHN0YXRpYyBpbnQKIG5mczNfYXN5bmNfaGFuZGxlX2p1a2Vib3goc3RydWN0IHJwY190YXNrICp0YXNrLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWlmICh0YXNrLT50a19zdGF0dXMgIT0gLUVKVUtFQk9YKQorCWlmICh0YXNrLT50a19zdGF0dXMgIT0gLUVKVUtFQk9YICYmIHRhc2stPnRrX3N0YXR1cyAhPSAtRUtFWUVYUElSRUQpCiAJCXJldHVybiAwOwotCW5mc19pbmNfc3RhdHMoaW5vZGUsIE5GU0lPU19ERUxBWSk7CisJaWYgKHRhc2stPnRrX3N0YXR1cyA9PSAtRUpVS0VCT1gpCisJCW5mc19pbmNfc3RhdHMoaW5vZGUsIE5GU0lPU19ERUxBWSk7CiAJdGFzay0+dGtfc3RhdHVzID0gMDsKIAlycGNfcmVzdGFydF9jYWxsKHRhc2spOwogCXJwY19kZWxheSh0YXNrLCBORlNfSlVLRUJPWF9SRVRSWV9USU1FKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0X2ZzLmggYi9mcy9uZnMvbmZzNF9mcy5oCmluZGV4IDBjNmZkYTMuLmExODcyMDAgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0X2ZzLmgKKysrIGIvZnMvbmZzL25mczRfZnMuaApAQCAtNDYsNiArNDYsNyBAQAogCU5GUzRDTE5UX0RFTEVHUkVUVVJOLAogCU5GUzRDTE5UX1NFU1NJT05fUkVTRVQsCiAJTkZTNENMTlRfU0VTU0lPTl9EUkFJTklORywKKwlORlM0Q0xOVF9SRUNBTExfU0xPVCwKIH07CiAKIC8qCkBAIC0yODAsNiArMjgxLDcgQEAKIGV4dGVybiBpbnQgbmZzNF9zdGF0ZV9tYXJrX3JlY2xhaW1fbm9ncmFjZShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCBzdHJ1Y3QgbmZzNF9zdGF0ZSAqc3RhdGUpOwogZXh0ZXJuIGludCBuZnM0X3N0YXRlX21hcmtfcmVjbGFpbV9yZWJvb3Qoc3RydWN0IG5mc19jbGllbnQgKmNscCwgc3RydWN0IG5mczRfc3RhdGUgKnN0YXRlKTsKIGV4dGVybiB2b2lkIG5mczQxX2hhbmRsZV9zZXF1ZW5jZV9mbGFnX2Vycm9ycyhzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLCB1MzIgZmxhZ3MpOworZXh0ZXJuIHZvaWQgbmZzNDFfaGFuZGxlX3JlY2FsbF9zbG90KHN0cnVjdCBuZnNfY2xpZW50ICpjbHApOwogZXh0ZXJuIHZvaWQgbmZzNF9wdXRfbG9ja19zdGF0ZShzdHJ1Y3QgbmZzNF9sb2NrX3N0YXRlICpsc3ApOwogZXh0ZXJuIGludCBuZnM0X3NldF9sb2NrX3N0YXRlKHN0cnVjdCBuZnM0X3N0YXRlICpzdGF0ZSwgc3RydWN0IGZpbGVfbG9jayAqZmwpOwogZXh0ZXJuIHZvaWQgbmZzNF9jb3B5X3N0YXRlaWQobmZzNF9zdGF0ZWlkICosIHN0cnVjdCBuZnM0X3N0YXRlICosIGZsX293bmVyX3QpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRwcm9jLmMgYi9mcy9uZnMvbmZzNHByb2MuYwppbmRleCAzNzVmMGZhLi5lZGE3NGM0IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzNHByb2MuYworKysgYi9mcy9uZnMvbmZzNHByb2MuYwpAQCAtMjgxLDYgKzI4MSw3IEBACiAJCQl9CiAJCWNhc2UgLU5GUzRFUlJfR1JBQ0U6CiAJCWNhc2UgLU5GUzRFUlJfREVMQVk6CisJCWNhc2UgLUVLRVlFWFBJUkVEOgogCQkJcmV0ID0gbmZzNF9kZWxheShzZXJ2ZXItPmNsaWVudCwgJmV4Y2VwdGlvbi0+dGltZW91dCk7CiAJCQlpZiAocmV0ICE9IDApCiAJCQkJYnJlYWs7CkBAIC00MTgsNyArNDE5LDggQEAKIAkJCWNscC0+Y2xfbGFzdF9yZW5ld2FsID0gdGltZXN0YW1wOwogCQlzcGluX3VubG9jaygmY2xwLT5jbF9sb2NrKTsKIAkJLyogQ2hlY2sgc2VxdWVuY2UgZmxhZ3MgKi8KLQkJbmZzNDFfaGFuZGxlX3NlcXVlbmNlX2ZsYWdfZXJyb3JzKGNscCwgcmVzLT5zcl9zdGF0dXNfZmxhZ3MpOworCQlpZiAoYXRvbWljX3JlYWQoJmNscC0+Y2xfY291bnQpID4gMSkKKwkJCW5mczQxX2hhbmRsZV9zZXF1ZW5jZV9mbGFnX2Vycm9ycyhjbHAsIHJlcy0+c3Jfc3RhdHVzX2ZsYWdzKTsKIAl9CiBvdXQ6CiAJLyogVGhlIHNlc3Npb24gbWF5IGJlIHJlc2V0IGJ5IG9uZSBvZiB0aGUgZXJyb3IgaGFuZGxlcnMuICovCkBAIC03MjQsOCArNzI2LDggQEAKIAlwLT5vX2FyZy5zZXFpZCA9IG5mc19hbGxvY19zZXFpZCgmc3AtPnNvX3NlcWlkKTsKIAlpZiAocC0+b19hcmcuc2VxaWQgPT0gTlVMTCkKIAkJZ290byBlcnJfZnJlZTsKLQlwLT5wYXRoLm1udCA9IG1udGdldChwYXRoLT5tbnQpOwotCXAtPnBhdGguZGVudHJ5ID0gZGdldChwYXRoLT5kZW50cnkpOworCXBhdGhfZ2V0KHBhdGgpOworCXAtPnBhdGggPSAqcGF0aDsKIAlwLT5kaXIgPSBwYXJlbnQ7CiAJcC0+b3duZXIgPSBzcDsKIAlhdG9taWNfaW5jKCZzcC0+c29fY291bnQpOwpAQCAtMTE2Myw3ICsxMTY1LDcgQEAKIAlpbnQgZXJyOwogCWRvIHsKIAkJZXJyID0gX25mczRfZG9fb3Blbl9yZWNsYWltKGN0eCwgc3RhdGUpOwotCQlpZiAoZXJyICE9IC1ORlM0RVJSX0RFTEFZKQorCQlpZiAoZXJyICE9IC1ORlM0RVJSX0RFTEFZICYmIGVyciAhPSAtRUtFWUVYUElSRUQpCiAJCQlicmVhazsKIAkJbmZzNF9oYW5kbGVfZXhjZXB0aW9uKHNlcnZlciwgZXJyLCAmZXhjZXB0aW9uKTsKIAl9IHdoaWxlIChleGNlcHRpb24ucmV0cnkpOwpAQCAtMTU4Miw2ICsxNTg0LDcgQEAKIAkJCWdvdG8gb3V0OwogCQljYXNlIC1ORlM0RVJSX0dSQUNFOgogCQljYXNlIC1ORlM0RVJSX0RFTEFZOgorCQljYXNlIC1FS0VZRVhQSVJFRDoKIAkJCW5mczRfaGFuZGxlX2V4Y2VwdGlvbihzZXJ2ZXIsIGVyciwgJmV4Y2VwdGlvbik7CiAJCQllcnIgPSAwOwogCQl9CkBAIC0xOTQ0LDggKzE5NDcsOCBAQAogCWNhbGxkYXRhLT5yZXMuc2VxaWQgPSBjYWxsZGF0YS0+YXJnLnNlcWlkOwogCWNhbGxkYXRhLT5yZXMuc2VydmVyID0gc2VydmVyOwogCWNhbGxkYXRhLT5yZXMuc2VxX3Jlcy5zcl9zbG90aWQgPSBORlM0X01BWF9TTE9UX1RBQkxFOwotCWNhbGxkYXRhLT5wYXRoLm1udCA9IG1udGdldChwYXRoLT5tbnQpOwotCWNhbGxkYXRhLT5wYXRoLmRlbnRyeSA9IGRnZXQocGF0aC0+ZGVudHJ5KTsKKwlwYXRoX2dldChwYXRoKTsKKwljYWxsZGF0YS0+cGF0aCA9ICpwYXRoOwogCiAJbXNnLnJwY19hcmdwID0gJmNhbGxkYXRhLT5hcmcsCiAJbXNnLnJwY19yZXNwID0gJmNhbGxkYXRhLT5yZXMsCkBAIC0zMTQ1LDEwICszMTQ4LDE5IEBACiAgKiBuZnM0X3Byb2NfYXN5bmNfcmVuZXcoKTogVGhpcyBpcyBub3Qgb25lIG9mIHRoZSBuZnNfcnBjX29wczsgaXQgaXMgYSBzcGVjaWFsCiAgKiBzdGFuZGFsb25lIHByb2NlZHVyZSBmb3IgcXVldWVpbmcgYW4gYXN5bmNocm9ub3VzIFJFTkVXLgogICovCitzdGF0aWMgdm9pZCBuZnM0X3JlbmV3X3JlbGVhc2Uodm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwID0gZGF0YTsKKworCWlmIChhdG9taWNfcmVhZCgmY2xwLT5jbF9jb3VudCkgPiAxKQorCQluZnM0X3NjaGVkdWxlX3N0YXRlX3JlbmV3YWwoY2xwKTsKKwluZnNfcHV0X2NsaWVudChjbHApOworfQorCiBzdGF0aWMgdm9pZCBuZnM0X3JlbmV3X2RvbmUoc3RydWN0IHJwY190YXNrICp0YXNrLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSAoc3RydWN0IG5mc19jbGllbnQgKil0YXNrLT50a19tc2cucnBjX2FyZ3A7Ci0JdW5zaWduZWQgbG9uZyB0aW1lc3RhbXAgPSAodW5zaWduZWQgbG9uZylkYXRhOworCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSBkYXRhOworCXVuc2lnbmVkIGxvbmcgdGltZXN0YW1wID0gdGFzay0+dGtfc3RhcnQ7CiAKIAlpZiAodGFzay0+dGtfc3RhdHVzIDwgMCkgewogCQkvKiBVbmxlc3Mgd2UncmUgc2h1dHRpbmcgZG93biwgc2NoZWR1bGUgc3RhdGUgcmVjb3ZlcnkhICovCkBAIC0zMTY0LDYgKzMxNzYsNyBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyBuZnM0X3JlbmV3X29wcyA9IHsKIAkucnBjX2NhbGxfZG9uZSA9IG5mczRfcmVuZXdfZG9uZSwKKwkucnBjX3JlbGVhc2UgPSBuZnM0X3JlbmV3X3JlbGVhc2UsCiB9OwogCiBpbnQgbmZzNF9wcm9jX2FzeW5jX3JlbmV3KHN0cnVjdCBuZnNfY2xpZW50ICpjbHAsIHN0cnVjdCBycGNfY3JlZCAqY3JlZCkKQEAgLTMxNzQsOCArMzE4NywxMCBAQAogCQkucnBjX2NyZWQJPSBjcmVkLAogCX07CiAKKwlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJmNscC0+Y2xfY291bnQpKQorCQlyZXR1cm4gLUVJTzsKIAlyZXR1cm4gcnBjX2NhbGxfYXN5bmMoY2xwLT5jbF9ycGNjbGllbnQsICZtc2csIFJQQ19UQVNLX1NPRlQsCi0JCQkmbmZzNF9yZW5ld19vcHMsICh2b2lkICopamlmZmllcyk7CisJCQkmbmZzNF9yZW5ld19vcHMsIGNscCk7CiB9CiAKIGludCBuZnM0X3Byb2NfcmVuZXcoc3RydWN0IG5mc19jbGllbnQgKmNscCwgc3RydWN0IHJwY19jcmVkICpjcmVkKQpAQCAtMzQ1Miw2ICszNDY3LDcgQEAKIAkJCWlmIChzZXJ2ZXIpCiAJCQkJbmZzX2luY19zZXJ2ZXJfc3RhdHMoc2VydmVyLCBORlNJT1NfREVMQVkpOwogCQljYXNlIC1ORlM0RVJSX0dSQUNFOgorCQljYXNlIC1FS0VZRVhQSVJFRDoKIAkJCXJwY19kZWxheSh0YXNrLCBORlM0X1BPTExfUkVUUllfTUFYKTsKIAkJCXRhc2stPnRrX3N0YXR1cyA9IDA7CiAJCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTM1NjQsNiArMzU4MCw3IEBACiAJCQljYXNlIC1ORlM0RVJSX1JFU09VUkNFOgogCQkJCS8qIFRoZSBJQk0gbGF3eWVycyBtaXNyZWFkIGFub3RoZXIgZG9jdW1lbnQhICovCiAJCQljYXNlIC1ORlM0RVJSX0RFTEFZOgorCQkJY2FzZSAtRUtFWUVYUElSRUQ6CiAJCQkJZXJyID0gbmZzNF9kZWxheShjbHAtPmNsX3JwY2NsaWVudCwgJnRpbWVvdXQpOwogCQl9CiAJfSB3aGlsZSAoZXJyID09IDApOwpAQCAtNDE3OSw3ICs0MTk2LDcgQEAKIAkJaWYgKHRlc3RfYml0KE5GU19ERUxFR0FURURfU1RBVEUsICZzdGF0ZS0+ZmxhZ3MpICE9IDApCiAJCQlyZXR1cm4gMDsKIAkJZXJyID0gX25mczRfZG9fc2V0bGsoc3RhdGUsIEZfU0VUTEssIHJlcXVlc3QsIE5GU19MT0NLX1JFQ0xBSU0pOwotCQlpZiAoZXJyICE9IC1ORlM0RVJSX0RFTEFZKQorCQlpZiAoZXJyICE9IC1ORlM0RVJSX0RFTEFZICYmIGVyciAhPSAtRUtFWUVYUElSRUQpCiAJCQlicmVhazsKIAkJbmZzNF9oYW5kbGVfZXhjZXB0aW9uKHNlcnZlciwgZXJyLCAmZXhjZXB0aW9uKTsKIAl9IHdoaWxlIChleGNlcHRpb24ucmV0cnkpOwpAQCAtNDIwNCw2ICs0MjIxLDcgQEAKIAkJCWdvdG8gb3V0OwogCQljYXNlIC1ORlM0RVJSX0dSQUNFOgogCQljYXNlIC1ORlM0RVJSX0RFTEFZOgorCQljYXNlIC1FS0VZRVhQSVJFRDoKIAkJCW5mczRfaGFuZGxlX2V4Y2VwdGlvbihzZXJ2ZXIsIGVyciwgJmV4Y2VwdGlvbik7CiAJCQllcnIgPSAwOwogCQl9CkBAIC00MzU1LDYgKzQzNzMsNyBAQAogCQkJCWVyciA9IDA7CiAJCQkJZ290byBvdXQ7CiAJCQljYXNlIC1ORlM0RVJSX0RFTEFZOgorCQkJY2FzZSAtRUtFWUVYUElSRUQ6CiAJCQkJYnJlYWs7CiAJCX0KIAkJZXJyID0gbmZzNF9oYW5kbGVfZXhjZXB0aW9uKHNlcnZlciwgZXJyLCAmZXhjZXB0aW9uKTsKQEAgLTQ1MDAsNyArNDUxOSw3IEBACiAKIAkJc3RhdHVzID0gcnBjX2NhbGxfc3luYyhjbHAtPmNsX3JwY2NsaWVudCwgJm1zZywgMCk7CiAKLQkJaWYgKHN0YXR1cyAhPSBORlM0RVJSX0NMSURfSU5VU0UpCisJCWlmIChzdGF0dXMgIT0gLU5GUzRFUlJfQ0xJRF9JTlVTRSkKIAkJCWJyZWFrOwogCiAJCWlmIChzaWduYWxsZWQoKSkKQEAgLTQ1NTQsNiArNDU3Myw3IEBACiAJc3dpdGNoICh0YXNrLT50a19zdGF0dXMpIHsKIAljYXNlIC1ORlM0RVJSX0RFTEFZOgogCWNhc2UgLU5GUzRFUlJfR1JBQ0U6CisJY2FzZSAtRUtFWUVYUElSRUQ6CiAJCWRwcmludGsoIiVzIFJldHJ5OiB0a19zdGF0dXMgJWRcbiIsIF9fZnVuY19fLCB0YXNrLT50a19zdGF0dXMpOwogCQlycGNfZGVsYXkodGFzaywgTkZTNF9QT0xMX1JFVFJZX01JTik7CiAJCXRhc2stPnRrX3N0YXR1cyA9IDA7CkBAIC00NjExLDI2ICs0NjMxLDMyIEBACiAvKgogICogUmVzZXQgYSBzbG90IHRhYmxlCiAgKi8KLXN0YXRpYyBpbnQgbmZzNF9yZXNldF9zbG90X3RhYmxlKHN0cnVjdCBuZnM0X3Nsb3RfdGFibGUgKnRibCwgaW50IG1heF9zbG90cywKLQkJaW50IG9sZF9tYXhfc2xvdHMsIGludCBpdmFsdWUpCitzdGF0aWMgaW50IG5mczRfcmVzZXRfc2xvdF90YWJsZShzdHJ1Y3QgbmZzNF9zbG90X3RhYmxlICp0YmwsIHUzMiBtYXhfcmVxcywKKwkJCQkgaW50IGl2YWx1ZSkKIHsKKwlzdHJ1Y3QgbmZzNF9zbG90ICpuZXcgPSBOVUxMOwogCWludCBpOwogCWludCByZXQgPSAwOwogCi0JZHByaW50aygiLS0+ICVzOiBtYXhfcmVxcz0ldSwgdGJsICVwXG4iLCBfX2Z1bmNfXywgbWF4X3Nsb3RzLCB0YmwpOworCWRwcmludGsoIi0tPiAlczogbWF4X3JlcXM9JXUsIHRibC0+bWF4X3Nsb3RzICVkXG4iLCBfX2Z1bmNfXywKKwkJbWF4X3JlcXMsIHRibC0+bWF4X3Nsb3RzKTsKIAotCS8qCi0JICogVW50aWwgd2UgaGF2ZSBkeW5hbWljIHNsb3QgdGFibGUgYWRqdXN0bWVudCwgaW5zaXN0Ci0JICogdXBvbiB0aGUgc2FtZSBzbG90IHRhYmxlIHNpemUKLQkgKi8KLQlpZiAobWF4X3Nsb3RzICE9IG9sZF9tYXhfc2xvdHMpIHsKLQkJZHByaW50aygiJXMgcmVzZXQgc2xvdCB0YWJsZSBkb2VzJ3QgbWF0Y2ggb2xkXG4iLAotCQkJX19mdW5jX18pOwotCQlyZXQgPSAtRUlOVkFMOyAvKlhYWCBORlM0RVJSX1JFUV9UT09fQklHID8gKi8KLQkJZ290byBvdXQ7CisJLyogRG9lcyB0aGUgbmV3bHkgbmVnb3RpYXRlZCBtYXhfcmVxcyBtYXRjaCB0aGUgZXhpc3Rpbmcgc2xvdCB0YWJsZT8gKi8KKwlpZiAobWF4X3JlcXMgIT0gdGJsLT5tYXhfc2xvdHMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJbmV3ID0ga21hbGxvYyhtYXhfcmVxcyAqIHNpemVvZihzdHJ1Y3QgbmZzNF9zbG90KSwKKwkJCSAgICAgIEdGUF9LRVJORUwpOworCQlpZiAoIW5ldykKKwkJCWdvdG8gb3V0OworCQlyZXQgPSAwOworCQlrZnJlZSh0YmwtPnNsb3RzKTsKIAl9CiAJc3Bpbl9sb2NrKCZ0YmwtPnNsb3RfdGJsX2xvY2spOwotCWZvciAoaSA9IDA7IGkgPCBtYXhfc2xvdHM7ICsraSkKKwlpZiAobmV3KSB7CisJCXRibC0+c2xvdHMgPSBuZXc7CisJCXRibC0+bWF4X3Nsb3RzID0gbWF4X3JlcXM7CisJfQorCWZvciAoaSA9IDA7IGkgPCB0YmwtPm1heF9zbG90czsgKytpKQogCQl0YmwtPnNsb3RzW2ldLnNlcV9uciA9IGl2YWx1ZTsKIAlzcGluX3VubG9jaygmdGJsLT5zbG90X3RibF9sb2NrKTsKIAlkcHJpbnRrKCIlczogdGJsPSVwIHNsb3RzPSVwIG1heF9zbG90cz0lZFxuIiwgX19mdW5jX18sCkBAIC00NjQ4LDE2ICs0Njc0LDEyIEBACiAJaW50IHN0YXR1czsKIAogCXN0YXR1cyA9IG5mczRfcmVzZXRfc2xvdF90YWJsZSgmc2Vzc2lvbi0+ZmNfc2xvdF90YWJsZSwKLQkJCXNlc3Npb24tPmZjX2F0dHJzLm1heF9yZXFzLAotCQkJc2Vzc2lvbi0+ZmNfc2xvdF90YWJsZS5tYXhfc2xvdHMsCi0JCQkxKTsKKwkJCXNlc3Npb24tPmZjX2F0dHJzLm1heF9yZXFzLCAxKTsKIAlpZiAoc3RhdHVzKQogCQlyZXR1cm4gc3RhdHVzOwogCiAJc3RhdHVzID0gbmZzNF9yZXNldF9zbG90X3RhYmxlKCZzZXNzaW9uLT5iY19zbG90X3RhYmxlLAotCQkJc2Vzc2lvbi0+YmNfYXR0cnMubWF4X3JlcXMsCi0JCQlzZXNzaW9uLT5iY19zbG90X3RhYmxlLm1heF9zbG90cywKLQkJCTApOworCQkJc2Vzc2lvbi0+YmNfYXR0cnMubWF4X3JlcXMsIDApOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTQ3OTgsMTYgKzQ4MjAsMTQgQEAKIAlhcmdzLT5mY19hdHRycy5oZWFkZXJwYWRzeiA9IDA7CiAJYXJncy0+ZmNfYXR0cnMubWF4X3Jxc3Rfc3ogPSBteHJxc3Rfc3o7CiAJYXJncy0+ZmNfYXR0cnMubWF4X3Jlc3Bfc3ogPSBteHJlc3Bfc3o7Ci0JYXJncy0+ZmNfYXR0cnMubWF4X3Jlc3Bfc3pfY2FjaGVkID0gbXhyZXNwX3N6OwogCWFyZ3MtPmZjX2F0dHJzLm1heF9vcHMgPSBORlM0X01BWF9PUFM7CiAJYXJncy0+ZmNfYXR0cnMubWF4X3JlcXMgPSBzZXNzaW9uLT5jbHAtPmNsX3JwY2NsaWVudC0+Y2xfeHBydC0+bWF4X3JlcXM7CiAKIAlkcHJpbnRrKCIlczogRm9yZSBDaGFubmVsIDogbWF4X3Jxc3Rfc3o9JXUgbWF4X3Jlc3Bfc3o9JXUgIgotCQkibWF4X3Jlc3Bfc3pfY2FjaGVkPSV1IG1heF9vcHM9JXUgbWF4X3JlcXM9JXVcbiIsCisJCSJtYXhfb3BzPSV1IG1heF9yZXFzPSV1XG4iLAogCQlfX2Z1bmNfXywKIAkJYXJncy0+ZmNfYXR0cnMubWF4X3Jxc3Rfc3osIGFyZ3MtPmZjX2F0dHJzLm1heF9yZXNwX3N6LAotCQlhcmdzLT5mY19hdHRycy5tYXhfcmVzcF9zel9jYWNoZWQsIGFyZ3MtPmZjX2F0dHJzLm1heF9vcHMsCi0JCWFyZ3MtPmZjX2F0dHJzLm1heF9yZXFzKTsKKwkJYXJncy0+ZmNfYXR0cnMubWF4X29wcywgYXJncy0+ZmNfYXR0cnMubWF4X3JlcXMpOwogCiAJLyogQmFjayBjaGFubmVsIGF0dHJpYnV0ZXMgKi8KIAlhcmdzLT5iY19hdHRycy5oZWFkZXJwYWRzeiA9IDA7CkBAIC01MDE2LDcgKzUwMzYsMTYgQEAKIAkJCQkgICAgICAgJnJlcywgYXJncy5zYV9jYWNoZV90aGlzLCAxKTsKIH0KIAotdm9pZCBuZnM0MV9zZXF1ZW5jZV9jYWxsX2RvbmUoc3RydWN0IHJwY190YXNrICp0YXNrLCB2b2lkICpkYXRhKQorc3RhdGljIHZvaWQgbmZzNDFfc2VxdWVuY2VfcmVsZWFzZSh2b2lkICpkYXRhKQoreworCXN0cnVjdCBuZnNfY2xpZW50ICpjbHAgPSAoc3RydWN0IG5mc19jbGllbnQgKilkYXRhOworCisJaWYgKGF0b21pY19yZWFkKCZjbHAtPmNsX2NvdW50KSA+IDEpCisJCW5mczRfc2NoZWR1bGVfc3RhdGVfcmVuZXdhbChjbHApOworCW5mc19wdXRfY2xpZW50KGNscCk7Cit9CisKK3N0YXRpYyB2b2lkIG5mczQxX3NlcXVlbmNlX2NhbGxfZG9uZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IChzdHJ1Y3QgbmZzX2NsaWVudCAqKWRhdGE7CiAKQEAgLTUwMjQsNiArNTA1Myw4IEBACiAKIAlpZiAodGFzay0+dGtfc3RhdHVzIDwgMCkgewogCQlkcHJpbnRrKCIlcyBFUlJPUiAlZFxuIiwgX19mdW5jX18sIHRhc2stPnRrX3N0YXR1cyk7CisJCWlmIChhdG9taWNfcmVhZCgmY2xwLT5jbF9jb3VudCkgPT0gMSkKKwkJCWdvdG8gb3V0OwogCiAJCWlmIChfbmZzNF9hc3luY19oYW5kbGVfZXJyb3IodGFzaywgTlVMTCwgY2xwLCBOVUxMKQogCQkJCQkJCQk9PSAtRUFHQUlOKSB7CkBAIC01MDMyLDcgKzUwNjMsNyBAQAogCQl9CiAJfQogCWRwcmludGsoIiVzIHJwY19jcmVkICVwXG4iLCBfX2Z1bmNfXywgdGFzay0+dGtfbXNnLnJwY19jcmVkKTsKLQorb3V0OgogCWtmcmVlKHRhc2stPnRrX21zZy5ycGNfYXJncCk7CiAJa2ZyZWUodGFzay0+dGtfbXNnLnJwY19yZXNwKTsKIApAQCAtNTA1Nyw2ICs1MDg4LDcgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzIG5mczQxX3NlcXVlbmNlX29wcyA9IHsKIAkucnBjX2NhbGxfZG9uZSA9IG5mczQxX3NlcXVlbmNlX2NhbGxfZG9uZSwKIAkucnBjX2NhbGxfcHJlcGFyZSA9IG5mczQxX3NlcXVlbmNlX3ByZXBhcmUsCisJLnJwY19yZWxlYXNlID0gbmZzNDFfc2VxdWVuY2VfcmVsZWFzZSwKIH07CiAKIHN0YXRpYyBpbnQgbmZzNDFfcHJvY19hc3luY19zZXF1ZW5jZShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwLApAQCAtNTA2OSwxMiArNTEwMSwxMyBAQAogCQkucnBjX2NyZWQgPSBjcmVkLAogCX07CiAKKwlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJmNscC0+Y2xfY291bnQpKQorCQlyZXR1cm4gLUVJTzsKIAlhcmdzID0ga3phbGxvYyhzaXplb2YoKmFyZ3MpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWFyZ3MpCi0JCXJldHVybiAtRU5PTUVNOwogCXJlcyA9IGt6YWxsb2Moc2l6ZW9mKCpyZXMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlcykgeworCWlmICghYXJncyB8fCAhcmVzKSB7CiAJCWtmcmVlKGFyZ3MpOworCQluZnNfcHV0X2NsaWVudChjbHApOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJcmVzLT5zcl9zbG90aWQgPSBORlM0X01BWF9TTE9UX1RBQkxFOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRyZW5ld2QuYyBiL2ZzL25mcy9uZnM0cmVuZXdkLmMKaW5kZXggMDE1NmMwMS4uZDg3ZjEwMyAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczRyZW5ld2QuYworKysgYi9mcy9uZnMvbmZzNHJlbmV3ZC5jCkBAIC0zNiwxMSArMzYsNiBAQAogICogYXMgYW4gcnBjX3Rhc2ssIG5vdCBhIHJlYWwga2VybmVsIHRocmVhZCwgc28gaXQgYWx3YXlzIHJ1bnMgaW4gcnBjaW9kJ3MKICAqIGNvbnRleHQuICBUaGVyZSBpcyBvbmUgcmVuZXdkIHBlciBuZnNfc2VydmVyLgogICoKLSAqIFRPRE86IElmIHRoZSBzZW5kIHF1ZXVlIGdldHMgYmFja2xvZ2dlZCAoZS5nLiwgaWYgdGhlIHNlcnZlciBnb2VzIGRvd24pLAotICogd2Ugd2lsbCBrZWVwIGZpbGxpbmcgdGhlIHF1ZXVlIHdpdGggcGVyaW9kaWMgUkVORVcgcmVxdWVzdHMuICBXZSBuZWVkIGEKLSAqIG1lY2hhbmlzbSBmb3IgZW5zdXJpbmcgdGhhdCBpZiByZW5ld2Qgc3VjY2Vzc2Z1bGx5IHNlbmRzIG9mZiBhIHJlcXVlc3QsCi0gKiB0aGVuIGl0IG9ubHkgd2FrZXMgdXAgd2hlbiB0aGUgcmVxdWVzdCBpcyBmaW5pc2hlZC4gIE1heWJlIHVzZSB0aGUKLSAqIGNoaWxkIHRhc2sgZnJhbWV3b3JrIG9mIHRoZSBSUEMgbGF5ZXI/CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC02Myw3ICs1OCw3IEBACiAJc3RydWN0IG5mc19jbGllbnQgKmNscCA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbmZzX2NsaWVudCwgY2xfcmVuZXdkLndvcmspOwogCXN0cnVjdCBycGNfY3JlZCAqY3JlZDsKLQlsb25nIGxlYXNlLCB0aW1lb3V0OworCWxvbmcgbGVhc2U7CiAJdW5zaWduZWQgbG9uZyBsYXN0LCBub3c7CiAKIAlvcHMgPSBuZnM0X3N0YXRlX3JlbmV3YWxfb3BzW2NscC0+Y2xfbWlub3J2ZXJzaW9uXTsKQEAgLTc1LDcgKzcwLDYgQEAKIAlsZWFzZSA9IGNscC0+Y2xfbGVhc2VfdGltZTsKIAlsYXN0ID0gY2xwLT5jbF9sYXN0X3JlbmV3YWw7CiAJbm93ID0gamlmZmllczsKLQl0aW1lb3V0ID0gKDIgKiBsZWFzZSkgLyAzICsgKGxvbmcpbGFzdCAtIChsb25nKW5vdzsKIAkvKiBBcmUgd2UgY2xvc2UgdG8gYSBsZWFzZSB0aW1lb3V0PyAqLwogCWlmICh0aW1lX2FmdGVyKG5vdywgbGFzdCArIGxlYXNlLzMpKSB7CiAJCWNyZWQgPSBvcHMtPmdldF9zdGF0ZV9yZW5ld2FsX2NyZWRfbG9ja2VkKGNscCk7CkBAIC05MCwxOSArODQsMTUgQEAKIAkJCS8qIFF1ZXVlIGFuIGFzeW5jaHJvbm91cyBSRU5FVy4gKi8KIAkJCW9wcy0+c2NoZWRfc3RhdGVfcmVuZXdhbChjbHAsIGNyZWQpOwogCQkJcHV0X3JwY2NyZWQoY3JlZCk7CisJCQlnb3RvIG91dF9leHA7CiAJCX0KLQkJdGltZW91dCA9ICgyICogbGVhc2UpIC8gMzsKLQkJc3Bpbl9sb2NrKCZjbHAtPmNsX2xvY2spOwotCX0gZWxzZQorCX0gZWxzZSB7CiAJCWRwcmludGsoIiVzOiBmYWlsZWQgdG8gY2FsbCByZW5ld2QuIFJlYXNvbjogbGVhc2Ugbm90IGV4cGlyZWQgXG4iLAogCQkJCV9fZnVuY19fKTsKLQlpZiAodGltZW91dCA8IDUgKiBIWikgICAgLyogc2FmZWd1YXJkICovCi0JCXRpbWVvdXQgPSA1ICogSFo7Ci0JZHByaW50aygiJXM6IHJlcXVldWVpbmcgd29yay4gTGVhc2UgcGVyaW9kID0gJWxkXG4iLAotCQkJX19mdW5jX18sICh0aW1lb3V0ICsgSFogLSAxKSAvIEhaKTsKLQljYW5jZWxfZGVsYXllZF93b3JrKCZjbHAtPmNsX3JlbmV3ZCk7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZjbHAtPmNsX3JlbmV3ZCwgdGltZW91dCk7Ci0Jc3Bpbl91bmxvY2soJmNscC0+Y2xfbG9jayk7CisJCXNwaW5fdW5sb2NrKCZjbHAtPmNsX2xvY2spOworCX0KKwluZnM0X3NjaGVkdWxlX3N0YXRlX3JlbmV3YWwoY2xwKTsKK291dF9leHA6CiAJbmZzX2V4cGlyZV91bnJlZmVyZW5jZWRfZGVsZWdhdGlvbnMoY2xwKTsKIG91dDoKIAlkcHJpbnRrKCIlczogZG9uZVxuIiwgX19mdW5jX18pOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczRzdGF0ZS5jIGIvZnMvbmZzL25mczRzdGF0ZS5jCmluZGV4IGMxZTI3MzMuLjZjNWVkNTEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9uZnM0c3RhdGUuYworKysgYi9mcy9uZnMvbmZzNHN0YXRlLmMKQEAgLTEyNDksMjYgKzEyNDksNjUgQEAKIH0KIAogI2lmZGVmIENPTkZJR19ORlNfVjRfMQordm9pZCBuZnM0MV9oYW5kbGVfcmVjYWxsX3Nsb3Qoc3RydWN0IG5mc19jbGllbnQgKmNscCkKK3sKKwlzZXRfYml0KE5GUzRDTE5UX1JFQ0FMTF9TTE9ULCAmY2xwLT5jbF9zdGF0ZSk7CisJbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZWNvdmVyeShjbHApOworfQorCitzdGF0aWMgdm9pZCBuZnM0X3Jlc2V0X2FsbF9zdGF0ZShzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQoreworCWlmICh0ZXN0X2FuZF9zZXRfYml0KE5GUzRDTE5UX0xFQVNFX0VYUElSRUQsICZjbHAtPmNsX3N0YXRlKSA9PSAwKSB7CisJCWNscC0+Y2xfYm9vdF90aW1lID0gQ1VSUkVOVF9USU1FOworCQluZnM0X3N0YXRlX3N0YXJ0X3JlY2xhaW1fbm9ncmFjZShjbHApOworCQluZnM0X3NjaGVkdWxlX3N0YXRlX3JlY292ZXJ5KGNscCk7CisJfQorfQorCitzdGF0aWMgdm9pZCBuZnM0MV9oYW5kbGVfc2VydmVyX3JlYm9vdChzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQoreworCWlmICh0ZXN0X2FuZF9zZXRfYml0KE5GUzRDTE5UX0xFQVNFX0VYUElSRUQsICZjbHAtPmNsX3N0YXRlKSA9PSAwKSB7CisJCW5mczRfc3RhdGVfc3RhcnRfcmVjbGFpbV9yZWJvb3QoY2xwKTsKKwkJbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZWNvdmVyeShjbHApOworCX0KK30KKworc3RhdGljIHZvaWQgbmZzNDFfaGFuZGxlX3N0YXRlX3Jldm9rZWQoc3RydWN0IG5mc19jbGllbnQgKmNscCkKK3sKKwkvKiBUZW1wb3JhcnkgKi8KKwluZnM0X3Jlc2V0X2FsbF9zdGF0ZShjbHApOworfQorCitzdGF0aWMgdm9pZCBuZnM0MV9oYW5kbGVfcmVjYWxsYWJsZV9zdGF0ZV9yZXZva2VkKHN0cnVjdCBuZnNfY2xpZW50ICpjbHApCit7CisJLyogVGhpcyB3aWxsIG5lZWQgdG8gaGFuZGxlIGxheW91dHMgdG9vICovCisJbmZzX2V4cGlyZV9hbGxfZGVsZWdhdGlvbnMoY2xwKTsKK30KKworc3RhdGljIHZvaWQgbmZzNDFfaGFuZGxlX2NiX3BhdGhfZG93bihzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKQoreworCW5mc19leHBpcmVfYWxsX2RlbGVnYXRpb25zKGNscCk7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoTkZTNENMTlRfU0VTU0lPTl9SRVNFVCwgJmNscC0+Y2xfc3RhdGUpID09IDApCisJCW5mczRfc2NoZWR1bGVfc3RhdGVfcmVjb3ZlcnkoY2xwKTsKK30KKwogdm9pZCBuZnM0MV9oYW5kbGVfc2VxdWVuY2VfZmxhZ19lcnJvcnMoc3RydWN0IG5mc19jbGllbnQgKmNscCwgdTMyIGZsYWdzKQogewogCWlmICghZmxhZ3MpCiAJCXJldHVybjsKLQllbHNlIGlmIChmbGFncyAmIFNFUTRfU1RBVFVTX1JFU1RBUlRfUkVDTEFJTV9ORUVERUQpIHsKLQkJc2V0X2JpdChORlM0Q0xOVF9MRUFTRV9FWFBJUkVELCAmY2xwLT5jbF9zdGF0ZSk7Ci0JCW5mczRfc3RhdGVfc3RhcnRfcmVjbGFpbV9yZWJvb3QoY2xwKTsKLQkJbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZWNvdmVyeShjbHApOwotCX0gZWxzZSBpZiAoZmxhZ3MgJiAoU0VRNF9TVEFUVVNfRVhQSVJFRF9BTExfU1RBVEVfUkVWT0tFRCB8CisJZWxzZSBpZiAoZmxhZ3MgJiBTRVE0X1NUQVRVU19SRVNUQVJUX1JFQ0xBSU1fTkVFREVEKQorCQluZnM0MV9oYW5kbGVfc2VydmVyX3JlYm9vdChjbHApOworCWVsc2UgaWYgKGZsYWdzICYgKFNFUTRfU1RBVFVTX0VYUElSRURfQUxMX1NUQVRFX1JFVk9LRUQgfAogCQkJICAgIFNFUTRfU1RBVFVTX0VYUElSRURfU09NRV9TVEFURV9SRVZPS0VEIHwKIAkJCSAgICBTRVE0X1NUQVRVU19BRE1JTl9TVEFURV9SRVZPS0VEIHwKLQkJCSAgICBTRVE0X1NUQVRVU19SRUNBTExBQkxFX1NUQVRFX1JFVk9LRUQgfAotCQkJICAgIFNFUTRfU1RBVFVTX0xFQVNFX01PVkVEKSkgewotCQlzZXRfYml0KE5GUzRDTE5UX0xFQVNFX0VYUElSRUQsICZjbHAtPmNsX3N0YXRlKTsKLQkJbmZzNF9zdGF0ZV9zdGFydF9yZWNsYWltX25vZ3JhY2UoY2xwKTsKLQkJbmZzNF9zY2hlZHVsZV9zdGF0ZV9yZWNvdmVyeShjbHApOwotCX0gZWxzZSBpZiAoZmxhZ3MgJiAoU0VRNF9TVEFUVVNfQ0JfUEFUSF9ET1dOIHwKKwkJCSAgICBTRVE0X1NUQVRVU19MRUFTRV9NT1ZFRCkpCisJCW5mczQxX2hhbmRsZV9zdGF0ZV9yZXZva2VkKGNscCk7CisJZWxzZSBpZiAoZmxhZ3MgJiBTRVE0X1NUQVRVU19SRUNBTExBQkxFX1NUQVRFX1JFVk9LRUQpCisJCW5mczQxX2hhbmRsZV9yZWNhbGxhYmxlX3N0YXRlX3Jldm9rZWQoY2xwKTsKKwllbHNlIGlmIChmbGFncyAmIChTRVE0X1NUQVRVU19DQl9QQVRIX0RPV04gfAogCQkJICAgIFNFUTRfU1RBVFVTX0JBQ0tDSEFOTkVMX0ZBVUxUIHwKIAkJCSAgICBTRVE0X1NUQVRVU19DQl9QQVRIX0RPV05fU0VTU0lPTikpCi0JCW5mc19leHBpcmVfYWxsX2RlbGVnYXRpb25zKGNscCk7CisJCW5mczQxX2hhbmRsZV9jYl9wYXRoX2Rvd24oY2xwKTsKIH0KIAogc3RhdGljIGludCBuZnM0X3Jlc2V0X3Nlc3Npb24oc3RydWN0IG5mc19jbGllbnQgKmNscCkKQEAgLTEyODUsMjMgKzEzMjQsNTIgQEAKIAogCW1lbXNldChjbHAtPmNsX3Nlc3Npb24tPnNlc3NfaWQuZGF0YSwgMCwgTkZTNF9NQVhfU0VTU0lPTklEX0xFTik7CiAJc3RhdHVzID0gbmZzNF9wcm9jX2NyZWF0ZV9zZXNzaW9uKGNscCk7Ci0JaWYgKHN0YXR1cykKKwlpZiAoc3RhdHVzKSB7CiAJCXN0YXR1cyA9IG5mczRfcmVjb3ZlcnlfaGFuZGxlX2Vycm9yKGNscCwgc3RhdHVzKTsKKwkJZ290byBvdXQ7CisJfQorCS8qIGNyZWF0ZV9zZXNzaW9uIG5lZ290aWF0ZWQgbmV3IHNsb3QgdGFibGUgKi8KKwljbGVhcl9iaXQoTkZTNENMTlRfUkVDQUxMX1NMT1QsICZjbHAtPmNsX3N0YXRlKTsKIAotb3V0OgotCS8qCi0JICogTGV0IHRoZSBzdGF0ZSBtYW5hZ2VyIHJlZXN0YWJsaXNoIHN0YXRlCi0JICovCi0JaWYgKCF0ZXN0X2JpdChORlM0Q0xOVF9MRUFTRV9FWFBJUkVELCAmY2xwLT5jbF9zdGF0ZSkgJiYKLQkgICAgc3RhdHVzID09IDApCisJIC8qIExldCB0aGUgc3RhdGUgbWFuYWdlciByZWVzdGFibGlzaCBzdGF0ZSAqLworCWlmICghdGVzdF9iaXQoTkZTNENMTlRfTEVBU0VfRVhQSVJFRCwgJmNscC0+Y2xfc3RhdGUpKQogCQluZnM0MV9zZXR1cF9zdGF0ZV9yZW5ld2FsKGNscCk7Ci0KK291dDoKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgaW50IG5mczRfcmVjYWxsX3Nsb3Qoc3RydWN0IG5mc19jbGllbnQgKmNscCkKK3sKKwlzdHJ1Y3QgbmZzNF9zbG90X3RhYmxlICpmY190YmwgPSAmY2xwLT5jbF9zZXNzaW9uLT5mY19zbG90X3RhYmxlOworCXN0cnVjdCBuZnM0X2NoYW5uZWxfYXR0cnMgKmZjX2F0dHJzID0gJmNscC0+Y2xfc2Vzc2lvbi0+ZmNfYXR0cnM7CisJc3RydWN0IG5mczRfc2xvdCAqbmV3LCAqb2xkOworCWludCBpOworCisJbmZzNF9iZWdpbl9kcmFpbl9zZXNzaW9uKGNscCk7CisJbmV3ID0ga21hbGxvYyhmY190YmwtPnRhcmdldF9tYXhfc2xvdHMgKiBzaXplb2Yoc3RydWN0IG5mczRfc2xvdCksCisJCSAgICAgIEdGUF9LRVJORUwpOworICAgICAgICBpZiAoIW5ldykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2soJmZjX3RibC0+c2xvdF90YmxfbG9jayk7CisJZm9yIChpID0gMDsgaSA8IGZjX3RibC0+dGFyZ2V0X21heF9zbG90czsgaSsrKQorCQluZXdbaV0uc2VxX25yID0gZmNfdGJsLT5zbG90c1tpXS5zZXFfbnI7CisJb2xkID0gZmNfdGJsLT5zbG90czsKKwlmY190YmwtPnNsb3RzID0gbmV3OworCWZjX3RibC0+bWF4X3Nsb3RzID0gZmNfdGJsLT50YXJnZXRfbWF4X3Nsb3RzOworCWZjX3RibC0+dGFyZ2V0X21heF9zbG90cyA9IDA7CisJZmNfYXR0cnMtPm1heF9yZXFzID0gZmNfdGJsLT5tYXhfc2xvdHM7CisJc3Bpbl91bmxvY2soJmZjX3RibC0+c2xvdF90YmxfbG9jayk7CisKKwlrZnJlZShvbGQpOworCW5mczRfZW5kX2RyYWluX3Nlc3Npb24oY2xwKTsKKwlyZXR1cm4gMDsKK30KKwogI2Vsc2UgLyogQ09ORklHX05GU19WNF8xICovCiBzdGF0aWMgaW50IG5mczRfcmVzZXRfc2Vzc2lvbihzdHJ1Y3QgbmZzX2NsaWVudCAqY2xwKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW50IG5mczRfZW5kX2RyYWluX3Nlc3Npb24oc3RydWN0IG5mc19jbGllbnQgKmNscCkgeyByZXR1cm4gMDsgfQorc3RhdGljIGludCBuZnM0X3JlY2FsbF9zbG90KHN0cnVjdCBuZnNfY2xpZW50ICpjbHApIHsgcmV0dXJuIDA7IH0KICNlbmRpZiAvKiBDT05GSUdfTkZTX1Y0XzEgKi8KIAogLyogU2V0IE5GUzRDTE5UX0xFQVNFX0VYUElSRUQgZm9yIGFsbCB2NC4wIGVycm9ycyBhbmQgZm9yIHJlY292ZXJhYmxlIGVycm9ycwpAQCAtMTMxNCw2ICsxMzgyLDcgQEAKIAkJY2FzZSAtTkZTNEVSUl9ERUxBWToKIAkJY2FzZSAtTkZTNEVSUl9DTElEX0lOVVNFOgogCQljYXNlIC1FQUdBSU46CisJCWNhc2UgLUVLRVlFWFBJUkVEOgogCQkJYnJlYWs7CiAKIAkJY2FzZSAtTkZTNEVSUl9OT1RfU0FNRTogLyogRml4TWU6IGltcGxlbWVudCByZWNvdmVyeQpAQCAtMTM5Nyw2ICsxNDY2LDE1IEBACiAJCQluZnNfY2xpZW50X3JldHVybl9tYXJrZWRfZGVsZWdhdGlvbnMoY2xwKTsKIAkJCWNvbnRpbnVlOwogCQl9CisJCS8qIFJlY2FsbCBzZXNzaW9uIHNsb3RzICovCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoTkZTNENMTlRfUkVDQUxMX1NMT1QsICZjbHAtPmNsX3N0YXRlKQorCQkgICAmJiBuZnM0X2hhc19zZXNzaW9uKGNscCkpIHsKKwkJCXN0YXR1cyA9IG5mczRfcmVjYWxsX3Nsb3QoY2xwKTsKKwkJCWlmIChzdGF0dXMgPCAwKQorCQkJCWdvdG8gb3V0X2Vycm9yOworCQkJY29udGludWU7CisJCX0KKwogCiAJCW5mczRfY2xlYXJfc3RhdGVfbWFuYWdlcl9iaXQoY2xwKTsKIAkJLyogRGlkIHdlIHJhY2Ugd2l0aCBhbiBhdHRlbXB0IHRvIGdpdmUgdXMgbW9yZSB3b3JrPyAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczR4ZHIuYyBiL2ZzL25mcy9uZnM0eGRyLmMKaW5kZXggNWNkNTE4NC4uNGQzMzhiZSAxMDA2NDQKLS0tIGEvZnMvbmZzL25mczR4ZHIuYworKysgYi9mcy9uZnMvbmZzNHhkci5jCkBAIC0xNTc4LDYgKzE1NzgsMTQgQEAKIAljaGFyIG1hY2hpbmVfbmFtZVtORlM0X01BWF9NQUNISU5FX05BTUVfTEVOXTsKIAl1aW50MzJfdCBsZW47CiAJc3RydWN0IG5mc19jbGllbnQgKmNscCA9IGFyZ3MtPmNsaWVudDsKKwl1MzIgbWF4X3Jlc3Bfc3pfY2FjaGVkOworCisJLyoKKwkgKiBBc3N1bWVzIE9QRU4gaXMgdGhlIGJpZ2dlc3Qgbm9uLWlkZW1wb3RlbnQgY29tcG91bmQuCisJICogMiBpcyB0aGUgdmVyaWZpZXIuCisJICovCisJbWF4X3Jlc3Bfc3pfY2FjaGVkID0gKE5GUzRfZGVjX29wZW5fc3ogKyBSUENfUkVQSERSU0laRSArCisJCQkgICAgICBSUENfTUFYX0FVVEhfU0laRSArIDIpICogWERSX1VOSVQ7CiAKIAlsZW4gPSBzY25wcmludGYobWFjaGluZV9uYW1lLCBzaXplb2YobWFjaGluZV9uYW1lKSwgIiVzIiwKIAkJCWNscC0+Y2xfaXBhZGRyKTsKQEAgLTE1OTIsNyArMTYwMCw3IEBACiAJKnArKyA9IGNwdV90b19iZTMyKGFyZ3MtPmZjX2F0dHJzLmhlYWRlcnBhZHN6KTsJLyogaGVhZGVyIHBhZGRpbmcgc2l6ZSAqLwogCSpwKysgPSBjcHVfdG9fYmUzMihhcmdzLT5mY19hdHRycy5tYXhfcnFzdF9zeik7CS8qIG1heCByZXEgc2l6ZSAqLwogCSpwKysgPSBjcHVfdG9fYmUzMihhcmdzLT5mY19hdHRycy5tYXhfcmVzcF9zeik7CS8qIG1heCByZXNwIHNpemUgKi8KLQkqcCsrID0gY3B1X3RvX2JlMzIoYXJncy0+ZmNfYXR0cnMubWF4X3Jlc3Bfc3pfY2FjaGVkKTsJLyogTWF4IHJlc3Agc3ogY2FjaGVkICovCisJKnArKyA9IGNwdV90b19iZTMyKG1heF9yZXNwX3N6X2NhY2hlZCk7CQkvKiBNYXggcmVzcCBzeiBjYWNoZWQgKi8KIAkqcCsrID0gY3B1X3RvX2JlMzIoYXJncy0+ZmNfYXR0cnMubWF4X29wcyk7CS8qIG1heCBvcGVyYXRpb25zICovCiAJKnArKyA9IGNwdV90b19iZTMyKGFyZ3MtPmZjX2F0dHJzLm1heF9yZXFzKTsJLyogbWF4IHJlcXVlc3RzICovCiAJKnArKyA9IGNwdV90b19iZTMyKDApOwkJCQkvKiByZG1hY2hhbm5lbF9hdHRycyAqLwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3Byb2MuYyBiL2ZzL25mcy9wcm9jLmMKaW5kZXggZWY1ODM4NS4uYzc1MmQ5NCAxMDA2NDQKLS0tIGEvZnMvbmZzL3Byb2MuYworKysgYi9mcy9uZnMvcHJvYy5jCkBAIC00Nyw2ICs0NywzOSBAQAogI2RlZmluZSBORlNEQkdfRkFDSUxJVFkJCU5GU0RCR19QUk9DCiAKIC8qCisgKiB3cmFwcGVyIHRvIGhhbmRsZSB0aGUgLUVLRVlFWFBJUkVEIGVycm9yIG1lc3NhZ2UuIFRoaXMgc2hvdWxkIGdlbmVyYWxseQorICogb25seSBoYXBwZW4gaWYgdXNpbmcga3JiNSBhdXRoIGFuZCBhIHVzZXIncyBUR1QgZXhwaXJlcy4gTkZTdjIgZG9lc24ndAorICogc3VwcG9ydCB0aGUgTkZTRVJSX0pVS0VCT1ggZXJyb3IgY29kZSwgYnV0IHdlIGhhbmRsZSB0aGlzIHNpdHVhdGlvbiBpbiB0aGUKKyAqIHNhbWUgd2F5IHRoYXQgd2UgaGFuZGxlIHRoYXQgZXJyb3Igd2l0aCBORlN2My4KKyAqLworc3RhdGljIGludAorbmZzX3JwY193cmFwcGVyKHN0cnVjdCBycGNfY2xudCAqY2xudCwgc3RydWN0IHJwY19tZXNzYWdlICptc2csIGludCBmbGFncykKK3sKKwlpbnQgcmVzOworCWRvIHsKKwkJcmVzID0gcnBjX2NhbGxfc3luYyhjbG50LCBtc2csIGZsYWdzKTsKKwkJaWYgKHJlcyAhPSAtRUtFWUVYUElSRUQpCisJCQlicmVhazsKKwkJc2NoZWR1bGVfdGltZW91dF9raWxsYWJsZShORlNfSlVLRUJPWF9SRVRSWV9USU1FKTsKKwkJcmVzID0gLUVSRVNUQVJUU1lTOworCX0gd2hpbGUgKCFmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSk7CisJcmV0dXJuIHJlczsKK30KKworI2RlZmluZSBycGNfY2FsbF9zeW5jKGNsbnQsIG1zZywgZmxhZ3MpCW5mc19ycGNfd3JhcHBlcihjbG50LCBtc2csIGZsYWdzKQorCitzdGF0aWMgaW50CituZnNfYXN5bmNfaGFuZGxlX2V4cGlyZWRfa2V5KHN0cnVjdCBycGNfdGFzayAqdGFzaykKK3sKKwlpZiAodGFzay0+dGtfc3RhdHVzICE9IC1FS0VZRVhQSVJFRCkKKwkJcmV0dXJuIDA7CisJdGFzay0+dGtfc3RhdHVzID0gMDsKKwlycGNfcmVzdGFydF9jYWxsKHRhc2spOworCXJwY19kZWxheSh0YXNrLCBORlNfSlVLRUJPWF9SRVRSWV9USU1FKTsKKwlyZXR1cm4gMTsKK30KKworLyoKICAqIEJhcmUtYm9uZXMgYWNjZXNzIHRvIGdldGF0dHI6IHRoaXMgaXMgZm9yIG5mc19yZWFkX3N1cGVyLgogICovCiBzdGF0aWMgaW50CkBAIC0zMDcsNiArMzQwLDggQEAKIAogc3RhdGljIGludCBuZnNfcHJvY191bmxpbmtfZG9uZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHN0cnVjdCBpbm9kZSAqZGlyKQogeworCWlmIChuZnNfYXN5bmNfaGFuZGxlX2V4cGlyZWRfa2V5KHRhc2spKQorCQlyZXR1cm4gMDsKIAluZnNfbWFya19mb3JfcmV2YWxpZGF0ZShkaXIpOwogCXJldHVybiAxOwogfQpAQCAtNTYwLDYgKzU5NSw5IEBACiAKIHN0YXRpYyBpbnQgbmZzX3JlYWRfZG9uZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHN0cnVjdCBuZnNfcmVhZF9kYXRhICpkYXRhKQogeworCWlmIChuZnNfYXN5bmNfaGFuZGxlX2V4cGlyZWRfa2V5KHRhc2spKQorCQlyZXR1cm4gLUVBR0FJTjsKKwogCW5mc19pbnZhbGlkYXRlX2F0aW1lKGRhdGEtPmlub2RlKTsKIAlpZiAodGFzay0+dGtfc3RhdHVzID49IDApIHsKIAkJbmZzX3JlZnJlc2hfaW5vZGUoZGF0YS0+aW5vZGUsIGRhdGEtPnJlcy5mYXR0cik7CkBAIC01NzksNiArNjE3LDkgQEAKIAogc3RhdGljIGludCBuZnNfd3JpdGVfZG9uZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqZGF0YSkKIHsKKwlpZiAobmZzX2FzeW5jX2hhbmRsZV9leHBpcmVkX2tleSh0YXNrKSkKKwkJcmV0dXJuIC1FQUdBSU47CisKIAlpZiAodGFzay0+dGtfc3RhdHVzID49IDApCiAJCW5mc19wb3N0X29wX3VwZGF0ZV9pbm9kZV9mb3JjZV93Y2MoZGF0YS0+aW5vZGUsIGRhdGEtPnJlcy5mYXR0cik7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9uZnMvc3ltbGluay5jIGIvZnMvbmZzL3N5bWxpbmsuYwppbmRleCA0MTI3MzhkLi4yZWE5ZTVjIDEwMDY0NAotLS0gYS9mcy9uZnMvc3ltbGluay5jCisrKyBiL2ZzL25mcy9zeW1saW5rLmMKQEAgLTUwLDcgKzUwLDcgQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAl2b2lkICplcnI7CiAKLQllcnIgPSBFUlJfUFRSKG5mc19yZXZhbGlkYXRlX21hcHBpbmdfbm9sb2NrKGlub2RlLCBpbm9kZS0+aV9tYXBwaW5nKSk7CisJZXJyID0gRVJSX1BUUihuZnNfcmV2YWxpZGF0ZV9tYXBwaW5nKGlub2RlLCBpbm9kZS0+aV9tYXBwaW5nKSk7CiAJaWYgKGVycikKIAkJZ290byByZWFkX2ZhaWxlZDsKIAlwYWdlID0gcmVhZF9jYWNoZV9wYWdlKCZpbm9kZS0+aV9kYXRhLCAwLApkaWZmIC0tZ2l0IGEvZnMvbmZzL3dyaXRlLmMgYi9mcy9uZnMvd3JpdGUuYwppbmRleCBkNjNkOTY0Li41M2ZmNzBlIDEwMDY0NAotLS0gYS9mcy9uZnMvd3JpdGUuYworKysgYi9mcy9uZnMvd3JpdGUuYwpAQCAtNDM4LDYgKzQzOCw3IEBACiAJcmFkaXhfdHJlZV90YWdfc2V0KCZuZnNpLT5uZnNfcGFnZV90cmVlLAogCQkJcmVxLT53Yl9pbmRleCwKIAkJCU5GU19QQUdFX1RBR19DT01NSVQpOworCW5mc2ktPm5jb21taXQrKzsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiAJaW5jX3pvbmVfcGFnZV9zdGF0ZShyZXEtPndiX3BhZ2UsIE5SX1VOU1RBQkxFX05GUyk7CiAJaW5jX2JkaV9zdGF0KHJlcS0+d2JfcGFnZS0+bWFwcGluZy0+YmFja2luZ19kZXZfaW5mbywgQkRJX1JFQ0xBSU1BQkxFKTsKQEAgLTUwMSw1NyArNTAyLDYgQEAKIH0KICNlbmRpZgogCi0vKgotICogV2FpdCBmb3IgYSByZXF1ZXN0IHRvIGNvbXBsZXRlLgotICoKLSAqIEludGVycnVwdGlibGUgYnkgZmF0YWwgc2lnbmFscyBvbmx5LgotICovCi1zdGF0aWMgaW50IG5mc193YWl0X29uX3JlcXVlc3RzX2xvY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBwZ29mZl90IGlkeF9zdGFydCwgdW5zaWduZWQgaW50IG5wYWdlcykKLXsKLQlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOwotCXN0cnVjdCBuZnNfcGFnZSAqcmVxOwotCXBnb2ZmX3QgaWR4X2VuZCwgbmV4dDsKLQl1bnNpZ25lZCBpbnQJCXJlcyA9IDA7Ci0JaW50CQkJZXJyb3I7Ci0KLQlpZiAobnBhZ2VzID09IDApCi0JCWlkeF9lbmQgPSB+MDsKLQllbHNlCi0JCWlkeF9lbmQgPSBpZHhfc3RhcnQgKyBucGFnZXMgLSAxOwotCi0JbmV4dCA9IGlkeF9zdGFydDsKLQl3aGlsZSAocmFkaXhfdHJlZV9nYW5nX2xvb2t1cF90YWcoJm5mc2ktPm5mc19wYWdlX3RyZWUsICh2b2lkICoqKSZyZXEsIG5leHQsIDEsIE5GU19QQUdFX1RBR19MT0NLRUQpKSB7Ci0JCWlmIChyZXEtPndiX2luZGV4ID4gaWR4X2VuZCkKLQkJCWJyZWFrOwotCi0JCW5leHQgPSByZXEtPndiX2luZGV4ICsgMTsKLQkJQlVHX09OKCFORlNfV0JBQ0tfQlVTWShyZXEpKTsKLQotCQlrcmVmX2dldCgmcmVxLT53Yl9rcmVmKTsKLQkJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCQllcnJvciA9IG5mc193YWl0X29uX3JlcXVlc3QocmVxKTsKLQkJbmZzX3JlbGVhc2VfcmVxdWVzdChyZXEpOwotCQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCQlpZiAoZXJyb3IgPCAwKQotCQkJcmV0dXJuIGVycm9yOwotCQlyZXMrKzsKLQl9Ci0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIHZvaWQgbmZzX2NhbmNlbF9jb21taXRfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQotewotCXN0cnVjdCBuZnNfcGFnZSAqcmVxOwotCi0Jd2hpbGUoIWxpc3RfZW1wdHkoaGVhZCkpIHsKLQkJcmVxID0gbmZzX2xpc3RfZW50cnkoaGVhZC0+bmV4dCk7Ci0JCW5mc19saXN0X3JlbW92ZV9yZXF1ZXN0KHJlcSk7Ci0JCW5mc19jbGVhcl9yZXF1ZXN0X2NvbW1pdChyZXEpOwotCQluZnNfaW5vZGVfcmVtb3ZlX3JlcXVlc3QocmVxKTsKLQkJbmZzX3VubG9ja19yZXF1ZXN0KHJlcSk7Ci0JfQotfQotCiAjaWYgZGVmaW5lZChDT05GSUdfTkZTX1YzKSB8fCBkZWZpbmVkKENPTkZJR19ORlNfVjQpCiBzdGF0aWMgaW50CiBuZnNfbmVlZF9jb21taXQoc3RydWN0IG5mc19pbm9kZSAqbmZzaSkKQEAgLTU3MywxMSArNTIzLDE3IEBACiBuZnNfc2Nhbl9jb21taXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqZHN0LCBwZ29mZl90IGlkeF9zdGFydCwgdW5zaWduZWQgaW50IG5wYWdlcykKIHsKIAlzdHJ1Y3QgbmZzX2lub2RlICpuZnNpID0gTkZTX0koaW5vZGUpOworCWludCByZXQ7CiAKIAlpZiAoIW5mc19uZWVkX2NvbW1pdChuZnNpKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gbmZzX3NjYW5fbGlzdChuZnNpLCBkc3QsIGlkeF9zdGFydCwgbnBhZ2VzLCBORlNfUEFHRV9UQUdfQ09NTUlUKTsKKwlyZXQgPSBuZnNfc2Nhbl9saXN0KG5mc2ksIGRzdCwgaWR4X3N0YXJ0LCBucGFnZXMsIE5GU19QQUdFX1RBR19DT01NSVQpOworCWlmIChyZXQgPiAwKQorCQluZnNpLT5uY29tbWl0IC09IHJldDsKKwlpZiAobmZzX25lZWRfY29tbWl0KE5GU19JKGlub2RlKSkpCisJCV9fbWFya19pbm9kZV9kaXJ0eShpbm9kZSwgSV9ESVJUWV9EQVRBU1lOQyk7CisJcmV0dXJuIHJldDsKIH0KICNlbHNlCiBzdGF0aWMgaW5saW5lIGludCBuZnNfbmVlZF9jb21taXQoc3RydWN0IG5mc19pbm9kZSAqbmZzaSkKQEAgLTY0Miw5ICs1OTgsMTAgQEAKIAkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAl9CiAKLQlpZiAobmZzX2NsZWFyX3JlcXVlc3RfY29tbWl0KHJlcSkpCi0JCXJhZGl4X3RyZWVfdGFnX2NsZWFyKCZORlNfSShpbm9kZSktPm5mc19wYWdlX3RyZWUsCi0JCQkJcmVxLT53Yl9pbmRleCwgTkZTX1BBR0VfVEFHX0NPTU1JVCk7CisJaWYgKG5mc19jbGVhcl9yZXF1ZXN0X2NvbW1pdChyZXEpICYmCisJCQlyYWRpeF90cmVlX3RhZ19jbGVhcigmTkZTX0koaW5vZGUpLT5uZnNfcGFnZV90cmVlLAorCQkJCXJlcS0+d2JfaW5kZXgsIE5GU19QQUdFX1RBR19DT01NSVQpICE9IE5VTEwpCisJCU5GU19JKGlub2RlKS0+bmNvbW1pdC0tOwogCiAJLyogT2theSwgdGhlIHJlcXVlc3QgbWF0Y2hlcy4gVXBkYXRlIHRoZSByZWdpb24gKi8KIAlpZiAob2Zmc2V0IDwgcmVxLT53Yl9vZmZzZXQpIHsKQEAgLTEzOTEsNyArMTM0OCw3IEBACiAJLnJwY19yZWxlYXNlID0gbmZzX2NvbW1pdF9yZWxlYXNlLAogfTsKIAotaW50IG5mc19jb21taXRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGhvdykKK3N0YXRpYyBpbnQgbmZzX2NvbW1pdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgaG93KQogewogCUxJU1RfSEVBRChoZWFkKTsKIAlpbnQgcmVzOwpAQCAtMTQwNiw5MiArMTM2Myw1MSBAQAogCX0KIAlyZXR1cm4gcmVzOwogfQorCitzdGF0aWMgaW50IG5mc19jb21taXRfdW5zdGFibGVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCit7CisJc3RydWN0IG5mc19pbm9kZSAqbmZzaSA9IE5GU19JKGlub2RlKTsKKwlpbnQgZmxhZ3MgPSBGTFVTSF9TWU5DOworCWludCByZXQgPSAwOworCisJLyogRG9uJ3QgY29tbWl0IHlldCBpZiB0aGlzIGlzIGEgbm9uLWJsb2NraW5nIGZsdXNoIGFuZCB0aGVyZSBhcmUKKwkgKiBsb3RzIG9mIG91dHN0YW5kaW5nIHdyaXRlcyBmb3IgdGhpcyBtYXBwaW5nLgorCSAqLworCWlmICh3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX05PTkUgJiYKKwkgICAgbmZzaS0+bmNvbW1pdCA8PSAobmZzaS0+bnBhZ2VzID4+IDEpKQorCQlnb3RvIG91dF9tYXJrX2RpcnR5OworCisJaWYgKHdiYy0+bm9uYmxvY2tpbmcgfHwgd2JjLT5mb3JfYmFja2dyb3VuZCkKKwkJZmxhZ3MgPSAwOworCXJldCA9IG5mc19jb21taXRfaW5vZGUoaW5vZGUsIGZsYWdzKTsKKwlpZiAocmV0ID49IDApIHsKKwkJaWYgKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfTk9ORSkgeworCQkJaWYgKHJldCA8IHdiYy0+bnJfdG9fd3JpdGUpCisJCQkJd2JjLT5ucl90b193cml0ZSAtPSByZXQ7CisJCQllbHNlCisJCQkJd2JjLT5ucl90b193cml0ZSA9IDA7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorb3V0X21hcmtfZGlydHk6CisJX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBJX0RJUlRZX0RBVEFTWU5DKTsKKwlyZXR1cm4gcmV0OworfQogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50IG5mc19jb21taXRfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBpbnQgaG93KQorc3RhdGljIGludCBuZnNfY29tbWl0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBob3cpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbmZzX2NvbW1pdF91bnN0YWJsZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgogCi1sb25nIG5mc19zeW5jX21hcHBpbmdfd2FpdChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsIGludCBob3cpCitpbnQgbmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwotCXBnb2ZmX3QgaWR4X3N0YXJ0LCBpZHhfZW5kOwotCXVuc2lnbmVkIGludCBucGFnZXMgPSAwOwotCUxJU1RfSEVBRChoZWFkKTsKLQlpbnQgbm9jb21taXQgPSBob3cgJiBGTFVTSF9OT0NPTU1JVDsKLQlsb25nIHBhZ2VzLCByZXQ7Ci0KLQkvKiBGSVhNRSAqLwotCWlmICh3YmMtPnJhbmdlX2N5Y2xpYykKLQkJaWR4X3N0YXJ0ID0gMDsKLQllbHNlIHsKLQkJaWR4X3N0YXJ0ID0gd2JjLT5yYW5nZV9zdGFydCA+PiBQQUdFX0NBQ0hFX1NISUZUOwotCQlpZHhfZW5kID0gd2JjLT5yYW5nZV9lbmQgPj4gUEFHRV9DQUNIRV9TSElGVDsKLQkJaWYgKGlkeF9lbmQgPiBpZHhfc3RhcnQpIHsKLQkJCXBnb2ZmX3QgbF9ucGFnZXMgPSAxICsgaWR4X2VuZCAtIGlkeF9zdGFydDsKLQkJCW5wYWdlcyA9IGxfbnBhZ2VzOwotCQkJaWYgKHNpemVvZihucGFnZXMpICE9IHNpemVvZihsX25wYWdlcykgJiYKLQkJCQkJKHBnb2ZmX3QpbnBhZ2VzICE9IGxfbnBhZ2VzKQotCQkJCW5wYWdlcyA9IDA7Ci0JCX0KLQl9Ci0JaG93ICY9IH5GTFVTSF9OT0NPTU1JVDsKLQlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOwotCWRvIHsKLQkJcmV0ID0gbmZzX3dhaXRfb25fcmVxdWVzdHNfbG9ja2VkKGlub2RlLCBpZHhfc3RhcnQsIG5wYWdlcyk7Ci0JCWlmIChyZXQgIT0gMCkKLQkJCWNvbnRpbnVlOwotCQlpZiAobm9jb21taXQpCi0JCQlicmVhazsKLQkJcGFnZXMgPSBuZnNfc2Nhbl9jb21taXQoaW5vZGUsICZoZWFkLCBpZHhfc3RhcnQsIG5wYWdlcyk7Ci0JCWlmIChwYWdlcyA9PSAwKQotCQkJYnJlYWs7Ci0JCWlmIChob3cgJiBGTFVTSF9JTlZBTElEQVRFKSB7Ci0JCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JCQluZnNfY2FuY2VsX2NvbW1pdF9saXN0KCZoZWFkKTsKLQkJCXJldCA9IHBhZ2VzOwotCQkJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXBhZ2VzICs9IG5mc19zY2FuX2NvbW1pdChpbm9kZSwgJmhlYWQsIDAsIDApOwotCQlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7Ci0JCXJldCA9IG5mc19jb21taXRfbGlzdChpbm9kZSwgJmhlYWQsIGhvdyk7Ci0JCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7Ci0KLQl9IHdoaWxlIChyZXQgPj0gMCk7Ci0Jc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgX19uZnNfd3JpdGVfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsIGludCBob3cpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IG5mc193cml0ZXBhZ2VzKG1hcHBpbmcsIHdiYyk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCXJldCA9IG5mc19zeW5jX21hcHBpbmdfd2FpdChtYXBwaW5nLCB3YmMsIGhvdyk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gb3V0OwotCXJldHVybiAwOwotb3V0OgotCV9fbWFya19pbm9kZV9kaXJ0eShtYXBwaW5nLT5ob3N0LCBJX0RJUlRZX1BBR0VTKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKiBUd28gcGFzcyBzeW5jOiBmaXJzdCB1c2luZyBXQl9TWU5DX05PTkUsIHRoZW4gV0JfU1lOQ19BTEwgKi8KLXN0YXRpYyBpbnQgbmZzX3dyaXRlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIGludCBob3cpCi17Ci0Jc3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHsKLQkJLmJkaSA9IG1hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8sCi0JCS5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCwKLQkJLm5yX3RvX3dyaXRlID0gTE9OR19NQVgsCi0JCS5yYW5nZV9zdGFydCA9IDAsCi0JCS5yYW5nZV9lbmQgPSBMTE9OR19NQVgsCi0JfTsKLQotCXJldHVybiBfX25mc193cml0ZV9tYXBwaW5nKG1hcHBpbmcsICZ3YmMsIGhvdyk7CisJcmV0dXJuIG5mc19jb21taXRfdW5zdGFibGVfcGFnZXMoaW5vZGUsIHdiYyk7CiB9CiAKIC8qCkBAIC0xNDk5LDM3ICsxNDE1LDI2IEBACiAgKi8KIGludCBuZnNfd2JfYWxsKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JcmV0dXJuIG5mc193cml0ZV9tYXBwaW5nKGlub2RlLT5pX21hcHBpbmcsIDApOwotfQorCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7CisJCS5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCwKKwkJLm5yX3RvX3dyaXRlID0gTE9OR19NQVgsCisJCS5yYW5nZV9zdGFydCA9IDAsCisJCS5yYW5nZV9lbmQgPSBMTE9OR19NQVgsCisJfTsKIAotaW50IG5mc193Yl9ub2NvbW1pdChzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXJldHVybiBuZnNfd3JpdGVfbWFwcGluZyhpbm9kZS0+aV9tYXBwaW5nLCBGTFVTSF9OT0NPTU1JVCk7CisJcmV0dXJuIHN5bmNfaW5vZGUoaW5vZGUsICZ3YmMpOwogfQogCiBpbnQgbmZzX3diX3BhZ2VfY2FuY2VsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlKQogewogCXN0cnVjdCBuZnNfcGFnZSAqcmVxOwotCWxvZmZfdCByYW5nZV9zdGFydCA9IHBhZ2Vfb2Zmc2V0KHBhZ2UpOwotCWxvZmZfdCByYW5nZV9lbmQgPSByYW5nZV9zdGFydCArIChsb2ZmX3QpKFBBR0VfQ0FDSEVfU0laRSAtIDEpOwotCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCB3YmMgPSB7Ci0JCS5iZGkgPSBwYWdlLT5tYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvLAotCQkuc3luY19tb2RlID0gV0JfU1lOQ19BTEwsCi0JCS5ucl90b193cml0ZSA9IExPTkdfTUFYLAotCQkucmFuZ2Vfc3RhcnQgPSByYW5nZV9zdGFydCwKLQkJLnJhbmdlX2VuZCA9IHJhbmdlX2VuZCwKLQl9OwogCWludCByZXQgPSAwOwogCiAJQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKIAlmb3IgKDs7KSB7CiAJCXJlcSA9IG5mc19wYWdlX2ZpbmRfcmVxdWVzdChwYWdlKTsKIAkJaWYgKHJlcSA9PSBOVUxMKQotCQkJZ290byBvdXQ7Ci0JCWlmICh0ZXN0X2JpdChQR19DTEVBTiwgJnJlcS0+d2JfZmxhZ3MpKSB7Ci0JCQluZnNfcmVsZWFzZV9yZXF1ZXN0KHJlcSk7CiAJCQlicmVhazsKLQkJfQogCQlpZiAobmZzX2xvY2tfcmVxdWVzdF9kb250Z2V0KHJlcSkpIHsKIAkJCW5mc19pbm9kZV9yZW1vdmVfcmVxdWVzdChyZXEpOwogCQkJLyoKQEAgLTE1NDMsNTIgKzE0NDgsNTIgQEAKIAkJcmV0ID0gbmZzX3dhaXRfb25fcmVxdWVzdChyZXEpOwogCQluZnNfcmVsZWFzZV9yZXF1ZXN0KHJlcSk7CiAJCWlmIChyZXQgPCAwKQotCQkJZ290byBvdXQ7Ci0JfQotCWlmICghUGFnZVByaXZhdGUocGFnZSkpCi0JCXJldHVybiAwOwotCXJldCA9IG5mc19zeW5jX21hcHBpbmdfd2FpdChwYWdlLT5tYXBwaW5nLCAmd2JjLCBGTFVTSF9JTlZBTElEQVRFKTsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG5mc193Yl9wYWdlX3ByaW9yaXR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJCWludCBob3cpCi17Ci0JbG9mZl90IHJhbmdlX3N0YXJ0ID0gcGFnZV9vZmZzZXQocGFnZSk7Ci0JbG9mZl90IHJhbmdlX2VuZCA9IHJhbmdlX3N0YXJ0ICsgKGxvZmZfdCkoUEFHRV9DQUNIRV9TSVpFIC0gMSk7Ci0Jc3RydWN0IHdyaXRlYmFja19jb250cm9sIHdiYyA9IHsKLQkJLmJkaSA9IHBhZ2UtPm1hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8sCi0JCS5zeW5jX21vZGUgPSBXQl9TWU5DX0FMTCwKLQkJLm5yX3RvX3dyaXRlID0gTE9OR19NQVgsCi0JCS5yYW5nZV9zdGFydCA9IHJhbmdlX3N0YXJ0LAotCQkucmFuZ2VfZW5kID0gcmFuZ2VfZW5kLAotCX07Ci0JaW50IHJldDsKLQotCWRvIHsKLQkJaWYgKGNsZWFyX3BhZ2VfZGlydHlfZm9yX2lvKHBhZ2UpKSB7Ci0JCQlyZXQgPSBuZnNfd3JpdGVwYWdlX2xvY2tlZChwYWdlLCAmd2JjKTsKLQkJCWlmIChyZXQgPCAwKQotCQkJCWdvdG8gb3V0X2Vycm9yOwotCQl9IGVsc2UgaWYgKCFQYWdlUHJpdmF0ZShwYWdlKSkKIAkJCWJyZWFrOwotCQlyZXQgPSBuZnNfc3luY19tYXBwaW5nX3dhaXQocGFnZS0+bWFwcGluZywgJndiYywgaG93KTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIG91dF9lcnJvcjsKLQl9IHdoaWxlIChQYWdlUHJpdmF0ZShwYWdlKSk7Ci0JcmV0dXJuIDA7Ci1vdXRfZXJyb3I6Ci0JX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBJX0RJUlRZX1BBR0VTKTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIAogLyoKICAqIFdyaXRlIGJhY2sgYWxsIHJlcXVlc3RzIG9uIG9uZSBwYWdlIC0gd2UgZG8gdGhpcyBiZWZvcmUgcmVhZGluZyBpdC4KICAqLwotaW50IG5mc193Yl9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlKiBwYWdlKQoraW50IG5mc193Yl9wYWdlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlKQogewotCXJldHVybiBuZnNfd2JfcGFnZV9wcmlvcml0eShpbm9kZSwgcGFnZSwgRkxVU0hfU1RBQkxFKTsKKwlsb2ZmX3QgcmFuZ2Vfc3RhcnQgPSBwYWdlX29mZnNldChwYWdlKTsKKwlsb2ZmX3QgcmFuZ2VfZW5kID0gcmFuZ2Vfc3RhcnQgKyAobG9mZl90KShQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKKwlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0geworCQkuc3luY19tb2RlID0gV0JfU1lOQ19BTEwsCisJCS5ucl90b193cml0ZSA9IDAsCisJCS5yYW5nZV9zdGFydCA9IHJhbmdlX3N0YXJ0LAorCQkucmFuZ2VfZW5kID0gcmFuZ2VfZW5kLAorCX07CisJc3RydWN0IG5mc19wYWdlICpyZXE7CisJaW50IG5lZWRfY29tbWl0OworCWludCByZXQ7CisKKwl3aGlsZShQYWdlUHJpdmF0ZShwYWdlKSkgeworCQlpZiAoY2xlYXJfcGFnZV9kaXJ0eV9mb3JfaW8ocGFnZSkpIHsKKwkJCXJldCA9IG5mc193cml0ZXBhZ2VfbG9ja2VkKHBhZ2UsICZ3YmMpOworCQkJaWYgKHJldCA8IDApCisJCQkJZ290byBvdXRfZXJyb3I7CisJCX0KKwkJcmVxID0gbmZzX2ZpbmRfYW5kX2xvY2tfcmVxdWVzdChwYWdlKTsKKwkJaWYgKCFyZXEpCisJCQlicmVhazsKKwkJaWYgKElTX0VSUihyZXEpKSB7CisJCQlyZXQgPSBQVFJfRVJSKHJlcSk7CisJCQlnb3RvIG91dF9lcnJvcjsKKwkJfQorCQluZWVkX2NvbW1pdCA9IHRlc3RfYml0KFBHX0NMRUFOLCAmcmVxLT53Yl9mbGFncyk7CisJCW5mc19jbGVhcl9wYWdlX3RhZ19sb2NrZWQocmVxKTsKKwkJaWYgKG5lZWRfY29tbWl0KSB7CisJCQlyZXQgPSBuZnNfY29tbWl0X2lub2RlKGlub2RlLCBGTFVTSF9TWU5DKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gb3V0X2Vycm9yOworCQl9CisJfQorCXJldHVybiAwOworb3V0X2Vycm9yOgorCXJldHVybiByZXQ7CiB9CiAKICNpZmRlZiBDT05GSUdfTUlHUkFUSU9OCmRpZmYgLS1naXQgYS9mcy9uZnNjdGwuYyBiL2ZzL25mc2N0bC5jCmluZGV4IGQzODU0ZDkuLmJmOWNiZDIgMTAwNjQ0Ci0tLSBhL2ZzL25mc2N0bC5jCisrKyBiL2ZzL25mc2N0bC5jCkBAIC0zNiwxMCArMzYsOSBAQAogCQlyZXR1cm4gRVJSX1BUUihlcnJvcik7CiAKIAlpZiAoZmxhZ3MgPT0gT19SRFdSKQotCQllcnJvciA9IG1heV9vcGVuKCZuZC5wYXRoLCBNQVlfUkVBRHxNQVlfV1JJVEUsCi0JCQkJCSAgIEZNT0RFX1JFQUR8Rk1PREVfV1JJVEUpOworCQllcnJvciA9IG1heV9vcGVuKCZuZC5wYXRoLCBNQVlfUkVBRHxNQVlfV1JJVEUsIGZsYWdzKTsKIAllbHNlCi0JCWVycm9yID0gbWF5X29wZW4oJm5kLnBhdGgsIE1BWV9XUklURSwgRk1PREVfV1JJVEUpOworCQllcnJvciA9IG1heV9vcGVuKCZuZC5wYXRoLCBNQVlfV1JJVEUsIGZsYWdzKTsKIAogCWlmICghZXJyb3IpCiAJCXJldHVybiBkZW50cnlfb3BlbihuZC5wYXRoLmRlbnRyeSwgbmQucGF0aC5tbnQsIGZsYWdzLApkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYyBiL2ZzL25mc2QvbmZzNGNhbGxiYWNrLmMKaW5kZXggYzZlZWQyYS4uNGJjMjJjNyAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0Y2FsbGJhY2suYworKysgYi9mcy9uZnNkL25mczRjYWxsYmFjay5jCkBAIC01MjUsNiArNTI1LDggQEAKIAogaW50IHNldF9jYWxsYmFja19jcmVkKHZvaWQpCiB7CisJaWYgKGNhbGxiYWNrX2NyZWQpCisJCXJldHVybiAwOwogCWNhbGxiYWNrX2NyZWQgPSBycGNfbG9va3VwX21hY2hpbmVfY3JlZCgpOwogCWlmICghY2FsbGJhY2tfY3JlZCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC01NDIsNyArNTQ0LDggQEAKIAl9OwogCWludCBzdGF0dXM7CiAKLQlzdGF0dXMgPSBycGNfY2FsbF9hc3luYyhjYi0+Y2JfY2xpZW50LCAmbXNnLCBSUENfVEFTS19TT0ZULAorCXN0YXR1cyA9IHJwY19jYWxsX2FzeW5jKGNiLT5jYl9jbGllbnQsICZtc2csCisJCQkJUlBDX1RBU0tfU09GVCB8IFJQQ19UQVNLX1NPRlRDT05OLAogCQkJCSZuZnNkNF9jYl9wcm9iZV9vcHMsICh2b2lkICopY2xwKTsKIAlpZiAoc3RhdHVzKSB7CiAJCXdhcm5fbm9fY2FsbGJhY2tfcGF0aChjbHAsIHN0YXR1cyk7CmRpZmYgLS1naXQgYS9mcy9uZnNkL25mczRyZWNvdmVyLmMgYi9mcy9uZnNkL25mczRyZWNvdmVyLmMKaW5kZXggNWE3NTRmNy4uOThmYjk4ZSAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0cmVjb3Zlci5jCisrKyBiL2ZzL25mc2QvbmZzNHJlY292ZXIuYwpAQCAtMTE5LDkgKzExOSw3IEBACiBzdGF0aWMgdm9pZAogbmZzZDRfc3luY19yZWNfZGlyKHZvaWQpCiB7Ci0JbXV0ZXhfbG9jaygmcmVjX2Rpci5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOwotCW5mc2Rfc3luY19kaXIocmVjX2Rpci5kZW50cnkpOwotCW11dGV4X3VubG9jaygmcmVjX2Rpci5kZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCXZmc19mc3luYyhOVUxMLCByZWNfZGlyLmRlbnRyeSwgMCk7CiB9CiAKIGludApkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0c3RhdGUuYyBiL2ZzL25mc2QvbmZzNHN0YXRlLmMKaW5kZXggZjE5ZWQ4Ni4uYzk3ZmRkYiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0c3RhdGUuYworKysgYi9mcy9uZnNkL25mczRzdGF0ZS5jCkBAIC0xOTk4LDcgKzE5OTgsOSBAQAogewogCWlmIChzaGFyZV9hY2Nlc3MgJiBORlM0X1NIQVJFX0FDQ0VTU19XUklURSkgewogCQlkcm9wX2ZpbGVfd3JpdGVfYWNjZXNzKGZpbHApOworCQlzcGluX2xvY2soJmZpbHAtPmZfbG9jayk7CiAJCWZpbHAtPmZfbW9kZSA9IChmaWxwLT5mX21vZGUgfCBGTU9ERV9SRUFEKSAmIH5GTU9ERV9XUklURTsKKwkJc3Bpbl91bmxvY2soJmZpbHAtPmZfbG9jayk7CiAJfQogfQogCkBAIC0yNDgwLDggKzI0ODIsMTAgQEAKIAl9CiAJbWVtY3B5KCZvcGVuLT5vcF9zdGF0ZWlkLCAmc3RwLT5zdF9zdGF0ZWlkLCBzaXplb2Yoc3RhdGVpZF90KSk7CiAKLQlpZiAobmZzZDRfaGFzX3Nlc3Npb24oJnJlc3AtPmNzdGF0ZSkpCisJaWYgKG5mc2Q0X2hhc19zZXNzaW9uKCZyZXNwLT5jc3RhdGUpKSB7CiAJCW9wZW4tPm9wX3N0YXRlb3duZXItPnNvX2NvbmZpcm1lZCA9IDE7CisJCW5mc2Q0X2NyZWF0ZV9jbGlkX2RpcihvcGVuLT5vcF9zdGF0ZW93bmVyLT5zb19jbGllbnQpOworCX0KIAogCS8qCiAJKiBBdHRlbXB0IHRvIGhhbmQgb3V0IGEgZGVsZWdhdGlvbi4gTm8gZXJyb3IgcmV0dXJuLCBiZWNhdXNlIHRoZQpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0eGRyLmMgYi9mcy9uZnNkL25mczR4ZHIuYwppbmRleCBhODU4N2U5Li5jNDdiNGQ3IDEwMDY0NAotLS0gYS9mcy9uZnNkL25mczR4ZHIuYworKysgYi9mcy9uZnNkL25mczR4ZHIuYwpAQCAtMTQzNCw3ICsxNDM0LDcgQEAKIAkJfQogCQlvcC0+b3BudW0gPSBudG9obCgqYXJncC0+cCsrKTsKIAotCQlpZiAob3AtPm9wbnVtID49IE9QX0FDQ0VTUyAmJiBvcC0+b3BudW0gPCBvcHMtPm5vcHMpCisJCWlmIChvcC0+b3BudW0gPj0gRklSU1RfTkZTNF9PUCAmJiBvcC0+b3BudW0gPD0gTEFTVF9ORlM0X09QKQogCQkJb3AtPnN0YXR1cyA9IG9wcy0+ZGVjb2RlcnNbb3AtPm9wbnVtXShhcmdwLCAmb3AtPnUpOwogCQllbHNlIHsKIAkJCW9wLT5vcG51bSA9IE9QX0lMTEVHQUw7CkBAIC0xNTI4LDcgKzE1MjgsNyBAQAogCX0gfSB3aGlsZSAoMCk7CiAKIC8qIEVuY29kZSBhcyBhbiBhcnJheSBvZiBzdHJpbmdzIHRoZSBzdHJpbmcgZ2l2ZW4gd2l0aCBjb21wb25lbnRzCi0gKiBzZXBlcmF0ZWQgQHNlcC4KKyAqIHNlcGFyYXRlZCBAc2VwLgogICovCiBzdGF0aWMgX19iZTMyIG5mc2Q0X2VuY29kZV9jb21wb25lbnRzKGNoYXIgc2VwLCBjaGFyICpjb21wb25lbnRzLAogCQkJCSAgIF9fYmUzMiAqKnBwLCBpbnQgKmJ1ZmxlbikKQEAgLTIxMjEsOSArMjEyMSwxNSBAQAogCQkgKiBhbmQgdGhpcyBpcyB0aGUgcm9vdCBvZiBhIGNyb3NzLW1vdW50ZWQgZmlsZXN5c3RlbS4KIAkJICovCiAJCWlmIChpZ25vcmVfY3Jvc3NtbnQgPT0gMCAmJgotCQkgICAgZXhwLT5leF9wYXRoLm1udC0+bW50X3Jvb3QtPmRfaW5vZGUgPT0gZGVudHJ5LT5kX2lub2RlKSB7Ci0JCQllcnIgPSB2ZnNfZ2V0YXR0cihleHAtPmV4X3BhdGgubW50LT5tbnRfcGFyZW50LAotCQkJCWV4cC0+ZXhfcGF0aC5tbnQtPm1udF9tb3VudHBvaW50LCAmc3RhdCk7CisJCSAgICBkZW50cnkgPT0gZXhwLT5leF9wYXRoLm1udC0+bW50X3Jvb3QpIHsKKwkJCXN0cnVjdCBwYXRoIHBhdGggPSBleHAtPmV4X3BhdGg7CisJCQlwYXRoX2dldCgmcGF0aCk7CisJCQl3aGlsZSAoZm9sbG93X3VwKCZwYXRoKSkgeworCQkJCWlmIChwYXRoLmRlbnRyeSAhPSBwYXRoLm1udC0+bW50X3Jvb3QpCisJCQkJCWJyZWFrOworCQkJfQorCQkJZXJyID0gdmZzX2dldGF0dHIocGF0aC5tbnQsIHBhdGguZGVudHJ5LCAmc3RhdCk7CisJCQlwYXRoX3B1dCgmcGF0aCk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gb3V0X25mc2VycjsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnNjdGwuYyBiL2ZzL25mc2QvbmZzY3RsLmMKaW5kZXggMjYwNGMzZS4uMGYwZTc3ZiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnNjdGwuYworKysgYi9mcy9uZnNkL25mc2N0bC5jCkBAIC05ODgsNiArOTg4LDcgQEAKIHN0YXRpYyBzc2l6ZV90IF9fd3JpdGVfcG9ydHNfYWRkeHBydChjaGFyICpidWYpCiB7CiAJY2hhciB0cmFuc3BvcnRbMTZdOworCXN0cnVjdCBzdmNfeHBydCAqeHBydDsKIAlpbnQgcG9ydCwgZXJyOwogCiAJaWYgKHNzY2FuZihidWYsICIlMTVzICU0dSIsIHRyYW5zcG9ydCwgJnBvcnQpICE9IDIpCkBAIC0xMDAyLDEzICsxMDAzLDI0IEBACiAKIAllcnIgPSBzdmNfY3JlYXRlX3hwcnQobmZzZF9zZXJ2LCB0cmFuc3BvcnQsCiAJCQkJUEZfSU5FVCwgcG9ydCwgU1ZDX1NPQ0tfQU5PTllNT1VTKTsKLQlpZiAoZXJyIDwgMCkgewotCQkvKiBHaXZlIGEgcmVhc29uYWJsZSBwZXJyb3IgbXNnIGZvciBiYWQgdHJhbnNwb3J0IHN0cmluZyAqLwotCQlpZiAoZXJyID09IC1FTk9FTlQpCi0JCQllcnIgPSAtRVBST1RPTk9TVVBQT1JUOwotCQlyZXR1cm4gZXJyOwotCX0KKwlpZiAoZXJyIDwgMCkKKwkJZ290byBvdXRfZXJyOworCisJZXJyID0gc3ZjX2NyZWF0ZV94cHJ0KG5mc2Rfc2VydiwgdHJhbnNwb3J0LAorCQkJCVBGX0lORVQ2LCBwb3J0LCBTVkNfU09DS19BTk9OWU1PVVMpOworCWlmIChlcnIgPCAwICYmIGVyciAhPSAtRUFGTk9TVVBQT1JUKQorCQlnb3RvIG91dF9jbG9zZTsKIAlyZXR1cm4gMDsKK291dF9jbG9zZToKKwl4cHJ0ID0gc3ZjX2ZpbmRfeHBydChuZnNkX3NlcnYsIHRyYW5zcG9ydCwgUEZfSU5FVCwgcG9ydCk7CisJaWYgKHhwcnQgIT0gTlVMTCkgeworCQlzdmNfY2xvc2VfeHBydCh4cHJ0KTsKKwkJc3ZjX3hwcnRfcHV0KHhwcnQpOworCX0KK291dF9lcnI6CisJLyogRGVjcmVhc2UgdGhlIGNvdW50LCBidXQgZG9uJ3Qgc2h1dCBkb3duIHRoZSBzZXJ2aWNlICovCisJbmZzZF9zZXJ2LT5zdl9ucnRocmVhZHMtLTsKKwlyZXR1cm4gZXJyOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvbmZzZC92ZnMuYyBiL2ZzL25mc2QvdmZzLmMKaW5kZXggODcxNWQxOS4uYTExYjBlODY3IDEwMDY0NAotLS0gYS9mcy9uZnNkL3Zmcy5jCisrKyBiL2ZzL25mc2QvdmZzLmMKQEAgLTIwLDEzICsyMCwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+CiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9wb3NpeF9hY2xfeGF0dHIuaD4KICNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgogI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvaW1hLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9leHBvcnRmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogCiAjaWZkZWYgQ09ORklHX05GU0RfVjMKICNpbmNsdWRlICJ4ZHIzLmgiCkBAIC0yNzEsNiArMjcyLDMyIEBACiAJcmV0dXJuIGVycjsKIH0KIAorLyoKKyAqIENvbW1pdCBtZXRhZGF0YSBjaGFuZ2VzIHRvIHN0YWJsZSBzdG9yYWdlLgorICovCitzdGF0aWMgaW50Citjb21taXRfbWV0YWRhdGEoc3RydWN0IHN2Y19maCAqZmhwKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaHAtPmZoX2RlbnRyeS0+ZF9pbm9kZTsKKwljb25zdCBzdHJ1Y3QgZXhwb3J0X29wZXJhdGlvbnMgKmV4cG9ydF9vcHMgPSBpbm9kZS0+aV9zYi0+c19leHBvcnRfb3A7CisJaW50IGVycm9yID0gMDsKKworCWlmICghRVhfSVNTWU5DKGZocC0+ZmhfZXhwb3J0KSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZXhwb3J0X29wcy0+Y29tbWl0X21ldGFkYXRhKSB7CisJCWVycm9yID0gZXhwb3J0X29wcy0+Y29tbWl0X21ldGFkYXRhKGlub2RlKTsKKwl9IGVsc2UgeworCQlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0geworCQkJLnN5bmNfbW9kZSA9IFdCX1NZTkNfQUxMLAorCQkJLm5yX3RvX3dyaXRlID0gMCwgLyogbWV0YWRhdGEgb25seSAqLworCQl9OworCisJCWVycm9yID0gc3luY19pbm9kZShpbm9kZSwgJndiYyk7CisJfQorCisJcmV0dXJuIGVycm9yOworfQogCiAvKgogICogU2V0IHZhcmlvdXMgZmlsZSBhdHRyaWJ1dGVzLgpAQCAtMzYxLDcgKzM4OCw3IEBACiAJCSAqIElmIHdlIGFyZSBjaGFuZ2luZyB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwgdGhlbgogCQkgKiB3ZSBuZWVkIHRvIGJyZWFrIGFsbCBsZWFzZXMuCiAJCSAqLwotCQlob3N0X2VyciA9IGJyZWFrX2xlYXNlKGlub2RlLCBGTU9ERV9XUklURSB8IE9fTk9OQkxPQ0spOworCQlob3N0X2VyciA9IGJyZWFrX2xlYXNlKGlub2RlLCBPX1dST05MWSB8IE9fTk9OQkxPQ0spOwogCQlpZiAoaG9zdF9lcnIgPT0gLUVXT1VMREJMT0NLKQogCQkJaG9zdF9lcnIgPSAtRVRJTUVET1VUOwogCQlpZiAoaG9zdF9lcnIpIC8qIEVOT01FTSBvciBFV09VTERCTE9DSyAqLwpAQCAtMzc3LDcgKzQwNCw2IEBACiAJCQlwdXRfd3JpdGVfYWNjZXNzKGlub2RlKTsKIAkJCWdvdG8gb3V0X25mc2VycjsKIAkJfQotCQl2ZnNfZHFfaW5pdChpbm9kZSk7CiAJfQogCiAJLyogc2FuaXRpemUgdGhlIG1vZGUgY2hhbmdlICovCkBAIC03MzQsNyArNzYwLDcgQEAKIAkgKiBDaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBsZWFzZXMgb24gdGhpcyBmaWxlLgogCSAqIFRoaXMgbWF5IGJsb2NrIHdoaWxlIGxlYXNlcyBhcmUgYnJva2VuLgogCSAqLwotCWhvc3RfZXJyID0gYnJlYWtfbGVhc2UoaW5vZGUsIE9fTk9OQkxPQ0sgfCAoKGFjY2VzcyAmIE5GU0RfTUFZX1dSSVRFKSA/IEZNT0RFX1dSSVRFIDogMCkpOworCWhvc3RfZXJyID0gYnJlYWtfbGVhc2UoaW5vZGUsIE9fTk9OQkxPQ0sgfCAoKGFjY2VzcyAmIE5GU0RfTUFZX1dSSVRFKSA/IE9fV1JPTkxZIDogMCkpOwogCWlmIChob3N0X2VyciA9PSAtRVdPVUxEQkxPQ0spCiAJCWhvc3RfZXJyID0gLUVUSU1FRE9VVDsKIAlpZiAoaG9zdF9lcnIpIC8qIE5PTUVNIG9yIFdPVUxEQkxPQ0sgKi8KQEAgLTc0NSw4ICs3NzEsNiBAQAogCQkJZmxhZ3MgPSBPX1JEV1J8T19MQVJHRUZJTEU7CiAJCWVsc2UKIAkJCWZsYWdzID0gT19XUk9OTFl8T19MQVJHRUZJTEU7Ci0KLQkJdmZzX2RxX2luaXQoaW5vZGUpOwogCX0KIAkqZmlscCA9IGRlbnRyeV9vcGVuKGRnZXQoZGVudHJ5KSwgbW50Z2V0KGZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCksCiAJCQkgICAgZmxhZ3MsIGN1cnJlbnRfY3JlZCgpKTsKQEAgLTc3MSw0MyArNzk1LDYgQEAKIH0KIAogLyoKLSAqIFN5bmMgYSBmaWxlCi0gKiBBcyB0aGlzIGNhbGxzIGZzeW5jIChub3QgZmRhdGFzeW5jKSB0aGVyZSBpcyBubyBuZWVkIGZvciBhIHdyaXRlX2lub2RlCi0gKiBhZnRlciBpdC4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgbmZzZF9kb3N5bmMoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBkZW50cnkgKmRwLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkcC0+ZF9pbm9kZTsKLQlpbnQgKCpmc3luYykgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwgaW50KTsKLQlpbnQgZXJyOwotCi0JZXJyID0gZmlsZW1hcF93cml0ZV9hbmRfd2FpdChpbm9kZS0+aV9tYXBwaW5nKTsKLQlpZiAoZXJyID09IDAgJiYgZm9wICYmIChmc3luYyA9IGZvcC0+ZnN5bmMpKQotCQllcnIgPSBmc3luYyhmaWxwLCBkcCwgMCk7Ci0JcmV0dXJuIGVycjsKLX0KLQotc3RhdGljIGludAotbmZzZF9zeW5jKHN0cnVjdCBmaWxlICpmaWxwKQotewotICAgICAgICBpbnQgZXJyOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCWRwcmludGsoIm5mc2Q6IHN5bmMgZmlsZSAlc1xuIiwgZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9uYW1lLm5hbWUpOwotCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQllcnI9bmZzZF9kb3N5bmMoZmlscCwgZmlscC0+Zl9wYXRoLmRlbnRyeSwgZmlscC0+Zl9vcCk7Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0KLQlyZXR1cm4gZXJyOwotfQotCi1pbnQKLW5mc2Rfc3luY19kaXIoc3RydWN0IGRlbnRyeSAqZHApCi17Ci0JcmV0dXJuIG5mc2RfZG9zeW5jKE5VTEwsIGRwLCBkcC0+ZF9pbm9kZS0+aV9mb3ApOwotfQotCi0vKgogICogT2J0YWluIHRoZSByZWFkYWhlYWQgcGFyYW1ldGVycyBmb3IgdGhlIGZpbGUKICAqIHNwZWNpZmllZCBieSAoZGV2LCBpbm8pLgogICovCkBAIC0xMDEwLDcgKzk5Nyw3IEBACiAKIAlpZiAoaW5vZGUtPmlfc3RhdGUgJiBJX0RJUlRZKSB7CiAJCWRwcmludGsoIm5mc2Q6IHdyaXRlIHN5bmMgJWRcbiIsIHRhc2tfcGlkX25yKGN1cnJlbnQpKTsKLQkJZXJyID0gbmZzZF9zeW5jKGZpbGUpOworCQllcnIgPSB2ZnNfZnN5bmMoZmlsZSwgZmlsZS0+Zl9wYXRoLmRlbnRyeSwgMCk7CiAJfQogCWxhc3RfaW5vID0gaW5vZGUtPmlfaW5vOwogCWxhc3RfZGV2ID0gaW5vZGUtPmlfc2ItPnNfZGV2OwpAQCAtMTE1OCw4ICsxMTQ1LDkgQEAKICNpZmRlZiBDT05GSUdfTkZTRF9WMwogLyoKICAqIENvbW1pdCBhbGwgcGVuZGluZyB3cml0ZXMgdG8gc3RhYmxlIHN0b3JhZ2UuCi0gKiBTdHJpY3RseSBzcGVha2luZywgd2UgY291bGQgc3luYyBqdXN0IHRoZSBpbmRpY2F0ZWQgZmlsZSByZWdpb24gaGVyZSwKLSAqIGJ1dCB0aGVyZSdzIGN1cnJlbnRseSBubyB3YXkgd2UgY2FuIGFzayB0aGUgVkZTIHRvIGRvIHNvLgorICoKKyAqIE5vdGU6IHdlIG9ubHkgZ3VhcmFudGVlIHRoYXQgZGF0YSB0aGF0IGxpZXMgd2l0aGluIHRoZSByYW5nZSBzcGVjaWZpZWQKKyAqIGJ5IHRoZSAnb2Zmc2V0JyBhbmQgJ2NvdW50JyBwYXJhbWV0ZXJzIHdpbGwgYmUgc3luY2VkLgogICoKICAqIFVuZm9ydHVuYXRlbHkgd2UgY2Fubm90IGxvY2sgdGhlIGZpbGUgdG8gbWFrZSBzdXJlIHdlIHJldHVybiBmdWxsIFdDQwogICogZGF0YSB0byB0aGUgY2xpZW50LCBhcyBsb2NraW5nIGhhcHBlbnMgbG93ZXIgZG93biBpbiB0aGUgZmlsZXN5c3RlbS4KQEAgLTExNjksMjMgKzExNTcsMzIgQEAKICAgICAgICAgICAgICAgIGxvZmZfdCBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7CiAJc3RydWN0IGZpbGUJKmZpbGU7Ci0JX19iZTMyCQllcnI7CisJbG9mZl90CQllbmQgPSBMTE9OR19NQVg7CisJX19iZTMyCQllcnIgPSBuZnNlcnJfaW52YWw7CiAKLQlpZiAoKHU2NCljb3VudCA+IH4odTY0KW9mZnNldCkKLQkJcmV0dXJuIG5mc2Vycl9pbnZhbDsKKwlpZiAob2Zmc2V0IDwgMCkKKwkJZ290byBvdXQ7CisJaWYgKGNvdW50ICE9IDApIHsKKwkJZW5kID0gb2Zmc2V0ICsgKGxvZmZfdCljb3VudCAtIDE7CisJCWlmIChlbmQgPCBvZmZzZXQpCisJCQlnb3RvIG91dDsKKwl9CiAKIAllcnIgPSBuZnNkX29wZW4ocnFzdHAsIGZocCwgU19JRlJFRywgTkZTRF9NQVlfV1JJVEUsICZmaWxlKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dDsKIAlpZiAoRVhfSVNTWU5DKGZocC0+ZmhfZXhwb3J0KSkgewotCQlpZiAoZmlsZS0+Zl9vcCAmJiBmaWxlLT5mX29wLT5mc3luYykgewotCQkJZXJyID0gbmZzZXJybm8obmZzZF9zeW5jKGZpbGUpKTsKLQkJfSBlbHNlIHsKKwkJaW50IGVycjIgPSB2ZnNfZnN5bmNfcmFuZ2UoZmlsZSwgZmlsZS0+Zl9wYXRoLmRlbnRyeSwKKwkJCQlvZmZzZXQsIGVuZCwgMCk7CisKKwkJaWYgKGVycjIgIT0gLUVJTlZBTCkKKwkJCWVyciA9IG5mc2Vycm5vKGVycjIpOworCQllbHNlCiAJCQllcnIgPSBuZnNlcnJfbm90c3VwcDsKLQkJfQogCX0KIAogCW5mc2RfY2xvc2UoZmlsZSk7CitvdXQ6CiAJcmV0dXJuIGVycjsKIH0KICNlbmRpZiAvKiBDT05GSUdfTkZTRF9WMyAqLwpAQCAtMTMzOCwxMiArMTMzNSwxNCBAQAogCQlnb3RvIG91dF9uZnNlcnI7CiAJfQogCi0JaWYgKEVYX0lTU1lOQyhmaHAtPmZoX2V4cG9ydCkpIHsKLQkJZXJyID0gbmZzZXJybm8obmZzZF9zeW5jX2RpcihkZW50cnkpKTsKLQkJd3JpdGVfaW5vZGVfbm93KGRjaGlsZC0+ZF9pbm9kZSwgMSk7Ci0JfQorCWVyciA9IG5mc2RfY3JlYXRlX3NldGF0dHIocnFzdHAsIHJlc2ZocCwgaWFwKTsKIAotCWVycjIgPSBuZnNkX2NyZWF0ZV9zZXRhdHRyKHJxc3RwLCByZXNmaHAsIGlhcCk7CisJLyoKKwkgKiBuZnNkX3NldGF0dHIgYWxyZWFkeSBjb21taXR0ZWQgdGhlIGNoaWxkLiAgVHJhbnNhY3Rpb25hbCBmaWxlc3lzdGVtcworCSAqIGhhZCBhIGNoYW5jZSB0byBjb21taXQgY2hhbmdlcyBmb3IgYm90aCBwYXJlbnQgYW5kIGNoaWxkCisJICogc2ltdWx0YW5lb3VzbHkgbWFraW5nIHRoZSBmb2xsb3dpbmcgY29tbWl0X21ldGFkYXRhIGEgbm9vcC4KKwkgKi8KKwllcnIyID0gbmZzZXJybm8oY29tbWl0X21ldGFkYXRhKGZocCkpOwogCWlmIChlcnIyKQogCQllcnIgPSBlcnIyOwogCW1udF9kcm9wX3dyaXRlKGZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7CkBAIC0xMzc1LDcgKzEzNzQsNiBAQAogCXN0cnVjdCBkZW50cnkJKmRlbnRyeSwgKmRjaGlsZCA9IE5VTEw7CiAJc3RydWN0IGlub2RlCSpkaXJwOwogCV9fYmUzMgkJZXJyOwotCV9fYmUzMgkJZXJyMjsKIAlpbnQJCWhvc3RfZXJyOwogCV9fdTMyCQl2X210aW1lPTAsIHZfYXRpbWU9MDsKIApAQCAtMTQ3MCwxMSArMTQ2OCw2IEBACiAJaWYgKGNyZWF0ZWQpCiAJCSpjcmVhdGVkID0gMTsKIAotCWlmIChFWF9JU1NZTkMoZmhwLT5maF9leHBvcnQpKSB7Ci0JCWVyciA9IG5mc2Vycm5vKG5mc2Rfc3luY19kaXIoZGVudHJ5KSk7Ci0JCS8qIHNldGF0dHIgd2lsbCBzeW5jIHRoZSBjaGlsZCAob3Igbm90KSAqLwotCX0KLQogCW5mc2RfY2hlY2tfaWdub3JlX3Jlc2l6aW5nKGlhcCk7CiAKIAlpZiAoY3JlYXRlbW9kZSA9PSBORlMzX0NSRUFURV9FWENMVVNJVkUpIHsKQEAgLTE0ODksOSArMTQ4MiwxMyBAQAogCX0KIAogIHNldF9hdHRyOgotCWVycjIgPSBuZnNkX2NyZWF0ZV9zZXRhdHRyKHJxc3RwLCByZXNmaHAsIGlhcCk7Ci0JaWYgKGVycjIpCi0JCWVyciA9IGVycjI7CisJZXJyID0gbmZzZF9jcmVhdGVfc2V0YXR0cihycXN0cCwgcmVzZmhwLCBpYXApOworCisJLyoKKwkgKiBuZnNkX3NldGF0dHIgYWxyZWFkeSBjb21taXR0ZWQgdGhlIGNoaWxkIChhbmQgcG9zc2libHkgYWxzbyB0aGUgcGFyZW50KS4KKwkgKi8KKwlpZiAoIWVycikKKwkJZXJyID0gbmZzZXJybm8oY29tbWl0X21ldGFkYXRhKGZocCkpOwogCiAJbW50X2Ryb3Bfd3JpdGUoZmhwLT5maF9leHBvcnQtPmV4X3BhdGgubW50KTsKIAkvKgpAQCAtMTYwNiwxMiArMTYwMyw5IEBACiAJCX0KIAl9IGVsc2UKIAkJaG9zdF9lcnIgPSB2ZnNfc3ltbGluayhkZW50cnktPmRfaW5vZGUsIGRuZXcsIHBhdGgpOwotCi0JaWYgKCFob3N0X2VycikgewotCQlpZiAoRVhfSVNTWU5DKGZocC0+ZmhfZXhwb3J0KSkKLQkJCWhvc3RfZXJyID0gbmZzZF9zeW5jX2RpcihkZW50cnkpOwotCX0KIAllcnIgPSBuZnNlcnJubyhob3N0X2Vycik7CisJaWYgKCFlcnIpCisJCWVyciA9IG5mc2Vycm5vKGNvbW1pdF9tZXRhZGF0YShmaHApKTsKIAlmaF91bmxvY2soZmhwKTsKIAogCW1udF9kcm9wX3dyaXRlKGZocC0+ZmhfZXhwb3J0LT5leF9wYXRoLm1udCk7CkBAIC0xNjczLDExICsxNjY3LDkgQEAKIAl9CiAJaG9zdF9lcnIgPSB2ZnNfbGluayhkb2xkLCBkaXJwLCBkbmV3KTsKIAlpZiAoIWhvc3RfZXJyKSB7Ci0JCWlmIChFWF9JU1NZTkMoZmZocC0+ZmhfZXhwb3J0KSkgewotCQkJZXJyID0gbmZzZXJybm8obmZzZF9zeW5jX2RpcihkZGlyKSk7Ci0JCQl3cml0ZV9pbm9kZV9ub3coZGVzdCwgMSk7Ci0JCX0KLQkJZXJyID0gMDsKKwkJZXJyID0gbmZzZXJybm8oY29tbWl0X21ldGFkYXRhKGZmaHApKTsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSBuZnNlcnJubyhjb21taXRfbWV0YWRhdGEodGZocCkpOwogCX0gZWxzZSB7CiAJCWlmIChob3N0X2VyciA9PSAtRVhERVYgJiYgcnFzdHAtPnJxX3ZlcnMgPT0gMikKIAkJCWVyciA9IG5mc2Vycl9hY2NlczsKQEAgLTE3NzMsMTAgKzE3NjUsMTAgQEAKIAkJZ290byBvdXRfZHB1dF9uZXc7CiAKIAlob3N0X2VyciA9IHZmc19yZW5hbWUoZmRpciwgb2RlbnRyeSwgdGRpciwgbmRlbnRyeSk7Ci0JaWYgKCFob3N0X2VyciAmJiBFWF9JU1NZTkModGZocC0+ZmhfZXhwb3J0KSkgewotCQlob3N0X2VyciA9IG5mc2Rfc3luY19kaXIodGRlbnRyeSk7CisJaWYgKCFob3N0X2VycikgeworCQlob3N0X2VyciA9IGNvbW1pdF9tZXRhZGF0YSh0ZmhwKTsKIAkJaWYgKCFob3N0X2VycikKLQkJCWhvc3RfZXJyID0gbmZzZF9zeW5jX2RpcihmZGVudHJ5KTsKKwkJCWhvc3RfZXJyID0gY29tbWl0X21ldGFkYXRhKGZmaHApOwogCX0KIAogCW1udF9kcm9wX3dyaXRlKGZmaHAtPmZoX2V4cG9ydC0+ZXhfcGF0aC5tbnQpOwpAQCAtMTg1NywxMiArMTg0OSw5IEBACiAKIAlkcHV0KHJkZW50cnkpOwogCi0JaWYgKGhvc3RfZXJyKQotCQlnb3RvIG91dF9kcm9wOwotCWlmIChFWF9JU1NZTkMoZmhwLT5maF9leHBvcnQpKQotCQlob3N0X2VyciA9IG5mc2Rfc3luY19kaXIoZGVudHJ5KTsKKwlpZiAoIWhvc3RfZXJyKQorCQlob3N0X2VyciA9IGNvbW1pdF9tZXRhZGF0YShmaHApOwogCi1vdXRfZHJvcDoKIAltbnRfZHJvcF93cml0ZShmaHAtPmZoX2V4cG9ydC0+ZXhfcGF0aC5tbnQpOwogb3V0X25mc2VycjoKIAllcnIgPSBuZnNlcnJubyhob3N0X2Vycik7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvZGF0LmMgYi9mcy9uaWxmczIvZGF0LmMKaW5kZXggMTg3ZGQwNy4uOWQxZTVkZSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL2RhdC5jCisrKyBiL2ZzL25pbGZzMi9kYXQuYwpAQCAtMzg4LDggKzM4OCw3IEBACiAJCXJldCA9IC1FTk9FTlQ7CiAJCWdvdG8gb3V0OwogCX0KLQlpZiAoYmxvY2tucnAgIT0gTlVMTCkKLQkJKmJsb2NrbnJwID0gYmxvY2tucjsKKwkqYmxvY2tucnAgPSBibG9ja25yOwogCiAgb3V0OgogCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi9kaXIuYyBiL2ZzL25pbGZzMi9kaXIuYwppbmRleCA3NmQ4MDNlLi4wMDkyODQwIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvZGlyLmMKKysrIGIvZnMvbmlsZnMyL2Rpci5jCkBAIC0yMjQsNyArMjI0LDcgQEAKICAqIGxlbiA8PSBOSUxGU19OQU1FX0xFTiBhbmQgZGUgIT0gTlVMTCBhcmUgZ3VhcmFudGVlZCBieSBjYWxsZXIuCiAgKi8KIHN0YXRpYyBpbnQKLW5pbGZzX21hdGNoKGludCBsZW4sIGNvbnN0IGNoYXIgKiBjb25zdCBuYW1lLCBzdHJ1Y3QgbmlsZnNfZGlyX2VudHJ5ICpkZSkKK25pbGZzX21hdGNoKGludCBsZW4sIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIHN0cnVjdCBuaWxmc19kaXJfZW50cnkgKmRlKQogewogCWlmIChsZW4gIT0gZGUtPm5hbWVfbGVuKQogCQlyZXR1cm4gMDsKQEAgLTM0OSwxMSArMzQ5LDExIEBACiAgKiBFbnRyeSBpcyBndWFyYW50ZWVkIHRvIGJlIHZhbGlkLgogICovCiBzdHJ1Y3QgbmlsZnNfZGlyX2VudHJ5ICoKLW5pbGZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKK25pbGZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLAogCQkgc3RydWN0IHBhZ2UgKipyZXNfcGFnZSkKIHsKLQljb25zdCBjaGFyICpuYW1lID0gZGVudHJ5LT5kX25hbWUubmFtZTsKLQlpbnQgbmFtZWxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lID0gcXN0ci0+bmFtZTsKKwlpbnQgbmFtZWxlbiA9IHFzdHItPmxlbjsKIAl1bnNpZ25lZCByZWNsZW4gPSBOSUxGU19ESVJfUkVDX0xFTihuYW1lbGVuKTsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBuOwogCXVuc2lnbmVkIGxvbmcgbnBhZ2VzID0gZGlyX3BhZ2VzKGRpcik7CkBAIC00MjQsMTMgKzQyNCwxMyBAQAogCXJldHVybiBkZTsKIH0KIAotaW5vX3QgbmlsZnNfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoraW5vX3QgbmlsZnNfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIpCiB7CiAJaW5vX3QgcmVzID0gMDsKIAlzdHJ1Y3QgbmlsZnNfZGlyX2VudHJ5ICpkZTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAotCWRlID0gbmlsZnNfZmluZF9lbnRyeShkaXIsIGRlbnRyeSwgJnBhZ2UpOworCWRlID0gbmlsZnNfZmluZF9lbnRyeShkaXIsIHFzdHIsICZwYWdlKTsKIAlpZiAoZGUpIHsKIAkJcmVzID0gbGU2NF90b19jcHUoZGUtPmlub2RlKTsKIAkJa3VubWFwKHBhZ2UpOwpAQCAtNDY1LDcgKzQ2NSw3IEBACiBpbnQgbmlsZnNfYWRkX2xpbmsoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBpbm9kZSAqZGlyID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZTsKLQljb25zdCBjaGFyICpuYW1lID0gZGVudHJ5LT5kX25hbWUubmFtZTsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lID0gZGVudHJ5LT5kX25hbWUubmFtZTsKIAlpbnQgbmFtZWxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKIAl1bnNpZ25lZCBjaHVua19zaXplID0gbmlsZnNfY2h1bmtfc2l6ZShkaXIpOwogCXVuc2lnbmVkIHJlY2xlbiA9IE5JTEZTX0RJUl9SRUNfTEVOKG5hbWVsZW4pOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL2lvY3RsLmMgYi9mcy9uaWxmczIvaW9jdGwuYwppbmRleCBkNmIyYjgzLi4zMTNkMGEyIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvaW9jdGwuYworKysgYi9mcy9uaWxmczIvaW9jdGwuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4JLyogY2FwYWJsZSgpICovCiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgkvKiBjb3B5X2Zyb21fdXNlcigpLCBjb3B5X3RvX3VzZXIoKSAqLwogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgkvKiBtbnRfd2FudF93cml0ZSgpLCBtbnRfZHJvcF93cml0ZSgpICovCiAjaW5jbHVkZSA8bGludXgvbmlsZnMyX2ZzLmg+CiAjaW5jbHVkZSAibmlsZnMuaCIKICNpbmNsdWRlICJzZWdtZW50LmgiCkBAIC0xMDcsMjAgKzEwOCwyOCBAQAogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOworCisJcmV0ID0gbW50X3dhbnRfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IC1FRkFVTFQ7CiAJaWYgKGNvcHlfZnJvbV91c2VyKCZjcG1vZGUsIGFyZ3AsIHNpemVvZihjcG1vZGUpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CisJCWdvdG8gb3V0OwogCiAJbXV0ZXhfbG9jaygmbmlsZnMtPm5zX21vdW50X211dGV4KTsKKwogCW5pbGZzX3RyYW5zYWN0aW9uX2JlZ2luKGlub2RlLT5pX3NiLCAmdGksIDApOwogCXJldCA9IG5pbGZzX2NwZmlsZV9jaGFuZ2VfY3Btb2RlKAogCQljcGZpbGUsIGNwbW9kZS5jbV9jbm8sIGNwbW9kZS5jbV9tb2RlKTsKLQlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKKwlpZiAodW5saWtlbHkocmV0IDwgMCkpCiAJCW5pbGZzX3RyYW5zYWN0aW9uX2Fib3J0KGlub2RlLT5pX3NiKTsKLQkJbXV0ZXhfdW5sb2NrKCZuaWxmcy0+bnNfbW91bnRfbXV0ZXgpOwotCQlyZXR1cm4gcmV0OwotCX0KLQluaWxmc190cmFuc2FjdGlvbl9jb21taXQoaW5vZGUtPmlfc2IpOyAvKiBuZXZlciBmYWlscyAqLworCWVsc2UKKwkJbmlsZnNfdHJhbnNhY3Rpb25fY29tbWl0KGlub2RlLT5pX3NiKTsgLyogbmV2ZXIgZmFpbHMgKi8KKwogCW11dGV4X3VubG9jaygmbmlsZnMtPm5zX21vdW50X211dGV4KTsKK291dDoKKwltbnRfZHJvcF93cml0ZShmaWxwLT5mX3BhdGgubW50KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMzUsMTYgKzE0NCwyMyBAQAogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOworCisJcmV0ID0gbW50X3dhbnRfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IC1FRkFVTFQ7CiAJaWYgKGNvcHlfZnJvbV91c2VyKCZjbm8sIGFyZ3AsIHNpemVvZihjbm8pKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CisJCWdvdG8gb3V0OwogCiAJbmlsZnNfdHJhbnNhY3Rpb25fYmVnaW4oaW5vZGUtPmlfc2IsICZ0aSwgMCk7CiAJcmV0ID0gbmlsZnNfY3BmaWxlX2RlbGV0ZV9jaGVja3BvaW50KGNwZmlsZSwgY25vKTsKLQlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKKwlpZiAodW5saWtlbHkocmV0IDwgMCkpCiAJCW5pbGZzX3RyYW5zYWN0aW9uX2Fib3J0KGlub2RlLT5pX3NiKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JbmlsZnNfdHJhbnNhY3Rpb25fY29tbWl0KGlub2RlLT5pX3NiKTsgLyogbmV2ZXIgZmFpbHMgKi8KKwllbHNlCisJCW5pbGZzX3RyYW5zYWN0aW9uX2NvbW1pdChpbm9kZS0+aV9zYik7IC8qIG5ldmVyIGZhaWxzICovCitvdXQ6CisJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDk2LDEyICs1MTIsMTkgQEAKIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAKLQlpZiAoY29weV9mcm9tX3VzZXIoYXJndiwgYXJncCwgc2l6ZW9mKGFyZ3YpKSkKLQkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0ID0gbW50X3dhbnRfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKIAorCXJldCA9IC1FRkFVTFQ7CisJaWYgKGNvcHlfZnJvbV91c2VyKGFyZ3YsIGFyZ3AsIHNpemVvZihhcmd2KSkpCisJCWdvdG8gb3V0OworCisJcmV0ID0gLUVJTlZBTDsKIAluc2VncyA9IGFyZ3ZbNF0udl9ubWVtYnM7CiAJaWYgKGFyZ3ZbNF0udl9zaXplICE9IGFyZ3N6WzRdKQotCQlyZXR1cm4gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisKIAkvKgogCSAqIGFyZ3ZbNF0gcG9pbnRzIHRvIHNlZ21lbnQgbnVtYmVycyB0aGlzIGlvY3RsIGNsZWFucy4gIFdlCiAJICogdXNlIGttYWxsb2MoKSBmb3IgaXRzIGJ1ZmZlciBiZWNhdXNlIG1lbW9yeSB1c2VkIGZvciB0aGUKQEAgLTUwOSw5ICs1MzIsMTAgQEAKIAkgKi8KIAlrYnVmc1s0XSA9IG1lbWR1cF91c2VyKCh2b2lkIF9fdXNlciAqKSh1bnNpZ25lZCBsb25nKWFyZ3ZbNF0udl9iYXNlLAogCQkJICAgICAgIG5zZWdzICogc2l6ZW9mKF9fdTY0KSk7Ci0JaWYgKElTX0VSUihrYnVmc1s0XSkpCi0JCXJldHVybiBQVFJfRVJSKGtidWZzWzRdKTsKLQorCWlmIChJU19FUlIoa2J1ZnNbNF0pKSB7CisJCXJldCA9IFBUUl9FUlIoa2J1ZnNbNF0pOworCQlnb3RvIG91dDsKKwl9CiAJbmlsZnMgPSBOSUxGU19TQihpbm9kZS0+aV9zYiktPnNfbmlsZnM7CiAKIAlmb3IgKG4gPSAwOyBuIDwgNDsgbisrKSB7CkBAIC01NjMsMTAgKzU4NywxMiBAQAogCQluaWxmc19yZW1vdmVfYWxsX2djaW5vZGUobmlsZnMpOwogCWNsZWFyX25pbGZzX2djX3J1bm5pbmcobmlsZnMpOwogCi0gb3V0X2ZyZWU6CitvdXRfZnJlZToKIAl3aGlsZSAoLS1uID49IDApCiAJCXZmcmVlKGtidWZzW25dKTsKIAlrZnJlZShrYnVmc1s0XSk7CitvdXQ6CisJbW50X2Ryb3Bfd3JpdGUoZmlscC0+Zl9wYXRoLm1udCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNTc1LDEzICs2MDEsMTcgQEAKIHsKIAlfX3U2NCBjbm87CiAJaW50IHJldDsKKwlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmczsKIAogCXJldCA9IG5pbGZzX2NvbnN0cnVjdF9zZWdtZW50KGlub2RlLT5pX3NiKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAogCWlmIChhcmdwICE9IE5VTEwpIHsKLQkJY25vID0gTklMRlNfU0IoaW5vZGUtPmlfc2IpLT5zX25pbGZzLT5uc19jbm8gLSAxOworCQluaWxmcyA9IE5JTEZTX1NCKGlub2RlLT5pX3NiKS0+c19uaWxmczsKKwkJZG93bl9yZWFkKCZuaWxmcy0+bnNfc2VnY3Rvcl9zZW0pOworCQljbm8gPSBuaWxmcy0+bnNfY25vIC0gMTsKKwkJdXBfcmVhZCgmbmlsZnMtPm5zX3NlZ2N0b3Jfc2VtKTsKIAkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmY25vLCBzaXplb2YoY25vKSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbmFtZWkuYyBiL2ZzL25pbGZzMi9uYW1laS5jCmluZGV4IDA3YmE4MzguLmFkNmVkMmMgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9uYW1laS5jCisrKyBiL2ZzL25pbGZzMi9uYW1laS5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJaWYgKGRlbnRyeS0+ZF9uYW1lLmxlbiA+IE5JTEZTX05BTUVfTEVOKQogCQlyZXR1cm4gRVJSX1BUUigtRU5BTUVUT09MT05HKTsKIAotCWlubyA9IG5pbGZzX2lub2RlX2J5X25hbWUoZGlyLCBkZW50cnkpOworCWlubyA9IG5pbGZzX2lub2RlX2J5X25hbWUoZGlyLCAmZGVudHJ5LT5kX25hbWUpOwogCWlub2RlID0gTlVMTDsKIAlpZiAoaW5vKSB7CiAJCWlub2RlID0gbmlsZnNfaWdldChkaXItPmlfc2IsIGlubyk7CkBAIC04MSwxMCArODEsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgaW5vOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0Jc3RydWN0IGRlbnRyeSBkb3Rkb3Q7Ci0KLQlkb3Rkb3QuZF9uYW1lLm5hbWUgPSAiLi4iOwotCWRvdGRvdC5kX25hbWUubGVuID0gMjsKKwlzdHJ1Y3QgcXN0ciBkb3Rkb3QgPSB7Lm5hbWUgPSAiLi4iLCAubGVuID0gMn07CiAKIAlpbm8gPSBuaWxmc19pbm9kZV9ieV9uYW1lKGNoaWxkLT5kX2lub2RlLCAmZG90ZG90KTsKIAlpZiAoIWlubykKQEAgLTI5Niw3ICsyOTMsNyBAQAogCWludCBlcnI7CiAKIAllcnIgPSAtRU5PRU5UOwotCWRlID0gbmlsZnNfZmluZF9lbnRyeShkaXIsIGRlbnRyeSwgJnBhZ2UpOworCWRlID0gbmlsZnNfZmluZF9lbnRyeShkaXIsICZkZW50cnktPmRfbmFtZSwgJnBhZ2UpOwogCWlmICghZGUpCiAJCWdvdG8gb3V0OwogCkBAIC0zODksNyArMzg2LDcgQEAKIAkJcmV0dXJuIGVycjsKIAogCWVyciA9IC1FTk9FTlQ7Ci0Jb2xkX2RlID0gbmlsZnNfZmluZF9lbnRyeShvbGRfZGlyLCBvbGRfZGVudHJ5LCAmb2xkX3BhZ2UpOworCW9sZF9kZSA9IG5pbGZzX2ZpbmRfZW50cnkob2xkX2RpciwgJm9sZF9kZW50cnktPmRfbmFtZSwgJm9sZF9wYWdlKTsKIAlpZiAoIW9sZF9kZSkKIAkJZ290byBvdXQ7CiAKQEAgLTQwOSw3ICs0MDYsNyBAQAogCQkJZ290byBvdXRfZGlyOwogCiAJCWVyciA9IC1FTk9FTlQ7Ci0JCW5ld19kZSA9IG5pbGZzX2ZpbmRfZW50cnkobmV3X2RpciwgbmV3X2RlbnRyeSwgJm5ld19wYWdlKTsKKwkJbmV3X2RlID0gbmlsZnNfZmluZF9lbnRyeShuZXdfZGlyLCAmbmV3X2RlbnRyeS0+ZF9uYW1lLCAmbmV3X3BhZ2UpOwogCQlpZiAoIW5ld19kZSkKIAkJCWdvdG8gb3V0X2RpcjsKIAkJaW5jX25saW5rKG9sZF9pbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvbmlsZnMuaCBiL2ZzL25pbGZzMi9uaWxmcy5oCmluZGV4IDRkYTZmNjcuLjg3MjNlNWIgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9uaWxmcy5oCisrKyBiL2ZzL25pbGZzMi9uaWxmcy5oCkBAIC0yMTcsMTAgKzIxNywxMCBAQAogCiAvKiBkaXIuYyAqLwogZXh0ZXJuIGludCBuaWxmc19hZGRfbGluayhzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpbm9kZSAqKTsKLWV4dGVybiBpbm9fdCBuaWxmc19pbm9kZV9ieV9uYW1lKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOworZXh0ZXJuIGlub190IG5pbGZzX2lub2RlX2J5X25hbWUoc3RydWN0IGlub2RlICosIGNvbnN0IHN0cnVjdCBxc3RyICopOwogZXh0ZXJuIGludCBuaWxmc19tYWtlX2VtcHR5KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gc3RydWN0IG5pbGZzX2Rpcl9lbnRyeSAqCi1uaWxmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBwYWdlICoqKTsKK25pbGZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICosIGNvbnN0IHN0cnVjdCBxc3RyICosIHN0cnVjdCBwYWdlICoqKTsKIGV4dGVybiBpbnQgbmlsZnNfZGVsZXRlX2VudHJ5KHN0cnVjdCBuaWxmc19kaXJfZW50cnkgKiwgc3RydWN0IHBhZ2UgKik7CiBleHRlcm4gaW50IG5pbGZzX2VtcHR5X2RpcihzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gc3RydWN0IG5pbGZzX2Rpcl9lbnRyeSAqbmlsZnNfZG90ZG90KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcGFnZSAqKik7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvcmVjb3ZlcnkuYyBiL2ZzL25pbGZzMi9yZWNvdmVyeS5jCmluZGV4IGM5Yzk2YzcuLjAxN2JlZGMgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9yZWNvdmVyeS5jCisrKyBiL2ZzL25pbGZzMi9yZWNvdmVyeS5jCkBAIC0zOSw3ICszOSw2IEBACiAJTklMRlNfU0VHX0ZBSUxfSU8sCiAJTklMRlNfU0VHX0ZBSUxfTUFHSUMsCiAJTklMRlNfU0VHX0ZBSUxfU0VRLAotCU5JTEZTX1NFR19GQUlMX0NIRUNLU1VNX1NFR1NVTSwKIAlOSUxGU19TRUdfRkFJTF9DSEVDS1NVTV9TVVBFUl9ST09ULAogCU5JTEZTX1NFR19GQUlMX0NIRUNLU1VNX0ZVTEwsCiAJTklMRlNfU0VHX0ZBSUxfQ09OU0lTVEVOQ1ksCkBAIC03MSwxMCArNzAsNiBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAiTklMRlMgd2FybmluZzogU2VxdWVuY2UgbnVtYmVyIG1pc21hdGNoXG4iKTsKIAkJYnJlYWs7Ci0JY2FzZSBOSUxGU19TRUdfRkFJTF9DSEVDS1NVTV9TRUdTVU06Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJOSUxGUyB3YXJuaW5nOiBDaGVja3N1bSBlcnJvciBpbiBzZWdtZW50IHN1bW1hcnlcbiIpOwotCQlicmVhazsKIAljYXNlIE5JTEZTX1NFR19GQUlMX0NIRUNLU1VNX1NVUEVSX1JPT1Q6CiAJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICJOSUxGUyB3YXJuaW5nOiBDaGVja3N1bSBlcnJvciBpbiBzdXBlciByb290XG4iKTsKQEAgLTIwNiwxOSArMjAxLDE1IEBACiAgKiBAcHNlZ19zdGFydDogc3RhcnQgZGlzayBibG9jayBudW1iZXIgb2YgcGFydGlhbCBzZWdtZW50CiAgKiBAc2VnX3NlcTogc2VxdWVuY2UgbnVtYmVyIHJlcXVlc3RlZAogICogQHNzaTogcG9pbnRlciB0byBuaWxmc19zZWdzdW1faW5mbyBzdHJ1Y3QgdG8gc3RvcmUgaW5mb3JtYXRpb24KLSAqIEBmdWxsX2NoZWNrOiBmdWxsIGNoZWNrIGZsYWcKLSAqICAgICAgICAgICAgICAoMDogb25seSBjaGVja3Mgc2VnbWVudCBzdW1tYXJ5IENSQywgMTogZGF0YSBDUkMpCiAgKi8KIHN0YXRpYyBpbnQKIGxvYWRfc2VnbWVudF9zdW1tYXJ5KHN0cnVjdCBuaWxmc19zYl9pbmZvICpzYmksIHNlY3Rvcl90IHBzZWdfc3RhcnQsCi0JCSAgICAgdTY0IHNlZ19zZXEsIHN0cnVjdCBuaWxmc19zZWdzdW1faW5mbyAqc3NpLAotCQkgICAgIGludCBmdWxsX2NoZWNrKQorCQkgICAgIHU2NCBzZWdfc2VxLCBzdHJ1Y3QgbmlsZnNfc2Vnc3VtX2luZm8gKnNzaSkKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3N1bTsKIAlzdHJ1Y3QgbmlsZnNfc2VnbWVudF9zdW1tYXJ5ICpzdW07Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQsIG5ibG9jazsKLQl1NjQgY2hlY2tfYnl0ZXM7Ci0JdTMyIGNyYywgY3JjX3N1bTsKKwl1bnNpZ25lZCBsb25nIG5ibG9jazsKKwl1MzIgY3JjOwogCWludCByZXQgPSBOSUxGU19TRUdfRkFJTF9JTzsKIAogCWJoX3N1bSA9IHNiX2JyZWFkKHNiaS0+c19zdXBlciwgcHNlZ19zdGFydCk7CkBAIC0yMzcsMzQgKzIyOCwyNCBAQAogCQlyZXQgPSBOSUxGU19TRUdfRkFJTF9TRVE7CiAJCWdvdG8gZmFpbGVkOwogCX0KLQlpZiAoZnVsbF9jaGVjaykgewotCQlvZmZzZXQgPSBzaXplb2Yoc3VtLT5zc19kYXRhc3VtKTsKLQkJY2hlY2tfYnl0ZXMgPQotCQkJKCh1NjQpc3NpLT5uYmxvY2tzIDw8IHNiaS0+c19zdXBlci0+c19ibG9ja3NpemVfYml0cyk7Ci0JCW5ibG9jayA9IHNzaS0+bmJsb2NrczsKLQkJY3JjX3N1bSA9IGxlMzJfdG9fY3B1KHN1bS0+c3NfZGF0YXN1bSk7Ci0JCXJldCA9IE5JTEZTX1NFR19GQUlMX0NIRUNLU1VNX0ZVTEw7Ci0JfSBlbHNlIHsgLyogb25seSBjaGVja3Mgc2VnbWVudCBzdW1tYXJ5ICovCi0JCW9mZnNldCA9IHNpemVvZihzdW0tPnNzX2RhdGFzdW0pICsgc2l6ZW9mKHN1bS0+c3Nfc3Vtc3VtKTsKLQkJY2hlY2tfYnl0ZXMgPSBzc2ktPnN1bWJ5dGVzOwotCQluYmxvY2sgPSBzc2ktPm5zdW1ibGs7Ci0JCWNyY19zdW0gPSBsZTMyX3RvX2NwdShzdW0tPnNzX3N1bXN1bSk7Ci0JCXJldCA9IE5JTEZTX1NFR19GQUlMX0NIRUNLU1VNX1NFR1NVTTsKLQl9CiAKKwluYmxvY2sgPSBzc2ktPm5ibG9ja3M7CiAJaWYgKHVubGlrZWx5KG5ibG9jayA9PSAwIHx8CiAJCSAgICAgbmJsb2NrID4gc2JpLT5zX25pbGZzLT5uc19ibG9ja3NfcGVyX3NlZ21lbnQpKSB7CiAJCS8qIFRoaXMgbGltaXRzIHRoZSBudW1iZXIgb2YgYmxvY2tzIHJlYWQgaW4gdGhlIENSQyBjaGVjayAqLwogCQlyZXQgPSBOSUxGU19TRUdfRkFJTF9DT05TSVNURU5DWTsKIAkJZ290byBmYWlsZWQ7CiAJfQotCWlmIChjYWxjX2NyY19jb250KHNiaSwgYmhfc3VtLCAmY3JjLCBvZmZzZXQsIGNoZWNrX2J5dGVzLAorCWlmIChjYWxjX2NyY19jb250KHNiaSwgYmhfc3VtLCAmY3JjLCBzaXplb2Yoc3VtLT5zc19kYXRhc3VtKSwKKwkJCSAgKCh1NjQpbmJsb2NrIDw8IHNiaS0+c19zdXBlci0+c19ibG9ja3NpemVfYml0cyksCiAJCQkgIHBzZWdfc3RhcnQsIG5ibG9jaykpIHsKIAkJcmV0ID0gTklMRlNfU0VHX0ZBSUxfSU87CiAJCWdvdG8gZmFpbGVkOwogCX0KLQlpZiAoY3JjID09IGNyY19zdW0pCisJaWYgKGNyYyA9PSBsZTMyX3RvX2NwdShzdW0tPnNzX2RhdGFzdW0pKQogCQlyZXQgPSAwOworCWVsc2UKKwkJcmV0ID0gTklMRlNfU0VHX0ZBSUxfQ0hFQ0tTVU1fRlVMTDsKICBmYWlsZWQ6CiAJYnJlbHNlKGJoX3N1bSk7CiAgb3V0OgpAQCAtNTk4LDcgKzU3OSw3IEBACiAKIAl3aGlsZSAoc2VnbnVtICE9IHJpLT5yaV9zZWdudW0gfHwgcHNlZ19zdGFydCA8PSByaS0+cmlfcHNlZ19zdGFydCkgewogCi0JCXJldCA9IGxvYWRfc2VnbWVudF9zdW1tYXJ5KHNiaSwgcHNlZ19zdGFydCwgc2VnX3NlcSwgJnNzaSwgMSk7CisJCXJldCA9IGxvYWRfc2VnbWVudF9zdW1tYXJ5KHNiaSwgcHNlZ19zdGFydCwgc2VnX3NlcSwgJnNzaSk7CiAJCWlmIChyZXQpIHsKIAkJCWlmIChyZXQgPT0gTklMRlNfU0VHX0ZBSUxfSU8pIHsKIAkJCQllcnIgPSAtRUlPOwpAQCAtODIxLDcgKzgwMiw3IEBACiAKIAlmb3IgKDs7KSB7CiAJCS8qIExvYWQgc2VnbWVudCBzdW1tYXJ5ICovCi0JCXJldCA9IGxvYWRfc2VnbWVudF9zdW1tYXJ5KHNiaSwgcHNlZ19zdGFydCwgc2VnX3NlcSwgJnNzaSwgMSk7CisJCXJldCA9IGxvYWRfc2VnbWVudF9zdW1tYXJ5KHNiaSwgcHNlZ19zdGFydCwgc2VnX3NlcSwgJnNzaSk7CiAJCWlmIChyZXQpIHsKIAkJCWlmIChyZXQgPT0gTklMRlNfU0VHX0ZBSUxfSU8pCiAJCQkJZ290byBmYWlsZWQ7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc2VnYnVmLmMgYi9mcy9uaWxmczIvc2VnYnVmLmMKaW5kZXggNjQ1Yzc4Ni4uYWI1NmZlNCAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3NlZ2J1Zi5jCisrKyBiL2ZzL25pbGZzMi9zZWdidWYuYwpAQCAtNDAsNiArNDAsMTEgQEAKIH07CiAKIAorc3RhdGljIGludCBuaWxmc19zZWdidWZfd3JpdGUoc3RydWN0IG5pbGZzX3NlZ21lbnRfYnVmZmVyICpzZWdidWYsCisJCQkgICAgICBzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyk7CitzdGF0aWMgaW50IG5pbGZzX3NlZ2J1Zl93YWl0KHN0cnVjdCBuaWxmc19zZWdtZW50X2J1ZmZlciAqc2VnYnVmKTsKKworCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKm5pbGZzX3NlZ2J1Zl9jYWNoZXA7CiAKIHN0YXRpYyB2b2lkIG5pbGZzX3NlZ2J1Zl9pbml0X29uY2Uodm9pZCAqb2JqKQpAQCAtMzAyLDYgKzMwNywxOSBAQAogCX0KIH0KIAoraW50IG5pbGZzX3dyaXRlX2xvZ3Moc3RydWN0IGxpc3RfaGVhZCAqbG9ncywgc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMpCit7CisJc3RydWN0IG5pbGZzX3NlZ21lbnRfYnVmZmVyICpzZWdidWY7CisJaW50IHJldCA9IDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlZ2J1ZiwgbG9ncywgc2JfbGlzdCkgeworCQlyZXQgPSBuaWxmc19zZWdidWZfd3JpdGUoc2VnYnVmLCBuaWxmcyk7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKwogaW50IG5pbGZzX3dhaXRfb25fbG9ncyhzdHJ1Y3QgbGlzdF9oZWFkICpsb2dzKQogewogCXN0cnVjdCBuaWxmc19zZWdtZW50X2J1ZmZlciAqc2VnYnVmOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3NlZ2J1Zi5oIGIvZnMvbmlsZnMyL3NlZ2J1Zi5oCmluZGV4IDZhZjE2MzAuLjk0ZGZkMzUgMTAwNjQ0Ci0tLSBhL2ZzL25pbGZzMi9zZWdidWYuaAorKysgYi9mcy9uaWxmczIvc2VnYnVmLmgKQEAgLTE2NiwxMyArMTY2LDEwIEBACiAJc2VnYnVmLT5zYl9zdW0ubmZpbGVibGsrKzsKIH0KIAotaW50IG5pbGZzX3NlZ2J1Zl93cml0ZShzdHJ1Y3QgbmlsZnNfc2VnbWVudF9idWZmZXIgKnNlZ2J1ZiwKLQkJICAgICAgIHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzKTsKLWludCBuaWxmc19zZWdidWZfd2FpdChzdHJ1Y3QgbmlsZnNfc2VnbWVudF9idWZmZXIgKnNlZ2J1Zik7Ci0KIHZvaWQgbmlsZnNfY2xlYXJfbG9ncyhzdHJ1Y3QgbGlzdF9oZWFkICpsb2dzKTsKIHZvaWQgbmlsZnNfdHJ1bmNhdGVfbG9ncyhzdHJ1Y3QgbGlzdF9oZWFkICpsb2dzLAogCQkJIHN0cnVjdCBuaWxmc19zZWdtZW50X2J1ZmZlciAqbGFzdCk7CitpbnQgbmlsZnNfd3JpdGVfbG9ncyhzdHJ1Y3QgbGlzdF9oZWFkICpsb2dzLCBzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyk7CiBpbnQgbmlsZnNfd2FpdF9vbl9sb2dzKHN0cnVjdCBsaXN0X2hlYWQgKmxvZ3MpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbmlsZnNfZGVzdHJveV9sb2dzKHN0cnVjdCBsaXN0X2hlYWQgKmxvZ3MpCmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc2VnbWVudC5jIGIvZnMvbmlsZnMyL3NlZ21lbnQuYwppbmRleCAxMDViNTA4Li5hZGEyZjFiIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc2VnbWVudC5jCisrKyBiL2ZzL25pbGZzMi9zZWdtZW50LmMKQEAgLTE3NjQsMTQgKzE3NjQsOSBAQAogc3RhdGljIGludCBuaWxmc19zZWdjdG9yX3dyaXRlKHN0cnVjdCBuaWxmc19zY19pbmZvICpzY2ksCiAJCQkgICAgICAgc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMpCiB7Ci0Jc3RydWN0IG5pbGZzX3NlZ21lbnRfYnVmZmVyICpzZWdidWY7Ci0JaW50IHJldCA9IDA7CisJaW50IHJldDsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2VnYnVmLCAmc2NpLT5zY19zZWdidWZzLCBzYl9saXN0KSB7Ci0JCXJldCA9IG5pbGZzX3NlZ2J1Zl93cml0ZShzZWdidWYsIG5pbGZzKTsKLQkJaWYgKHJldCkKLQkJCWJyZWFrOwotCX0KKwlyZXQgPSBuaWxmc193cml0ZV9sb2dzKCZzY2ktPnNjX3NlZ2J1ZnMsIG5pbGZzKTsKIAlsaXN0X3NwbGljZV90YWlsX2luaXQoJnNjaS0+c2Nfc2VnYnVmcywgJnNjaS0+c2Nfd3JpdGVfbG9ncyk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE5MzcsOCArMTkzMiw3IEBACiB7CiAJc3RydWN0IG5pbGZzX3NlZ21lbnRfYnVmZmVyICpzZWdidWY7CiAJc3RydWN0IHBhZ2UgKmJkX3BhZ2UgPSBOVUxMLCAqZnNfcGFnZSA9IE5VTEw7Ci0Jc3RydWN0IG5pbGZzX3NiX2luZm8gKnNiaSA9IHNjaS0+c2Nfc2JpOwotCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc2JpLT5zX25pbGZzOworCXN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzID0gc2NpLT5zY19zYmktPnNfbmlsZnM7CiAJaW50IHVwZGF0ZV9zciA9IChzY2ktPnNjX3N1cGVyX3Jvb3QgIT0gTlVMTCk7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNlZ2J1ZiwgJnNjaS0+c2Nfd3JpdGVfbG9ncywgc2JfbGlzdCkgewpAQCAtMjAyMCw3ICsyMDE0LDcgQEAKIAlpZiAodXBkYXRlX3NyKSB7CiAJCW5pbGZzX3NldF9sYXN0X3NlZ21lbnQobmlsZnMsIHNlZ2J1Zi0+c2JfcHNlZ19zdGFydCwKIAkJCQkgICAgICAgc2VnYnVmLT5zYl9zdW0uc2VnX3NlcSwgbmlsZnMtPm5zX2NubysrKTsKLQkJc2JpLT5zX3N1cGVyLT5zX2RpcnQgPSAxOworCQlzZXRfbmlsZnNfc2JfZGlydHkobmlsZnMpOwogCiAJCWNsZWFyX2JpdChOSUxGU19TQ19IQVZFX0RFTFRBLCAmc2NpLT5zY19mbGFncyk7CiAJCWNsZWFyX2JpdChOSUxGU19TQ19ESVJUWSwgJnNjaS0+c2NfZmxhZ3MpOwpAQCAtMjQyNSw0MyArMjQxOSw0MyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0cnVjdCBuaWxmc19zZWdjdG9yX3JlcSB7Ci0JaW50IG1vZGU7Ci0JX191MzIgc2VxX2FjY2VwdGVkOwotCWludCBzY19lcnI7ICAvKiBjb25zdHJ1Y3Rpb24gZmFpbHVyZSAqLwotCWludCBzYl9lcnI7ICAvKiBzdXBlciBibG9jayB3cml0ZWJhY2sgZmFpbHVyZSAqLwotfTsKLQogI2RlZmluZSBGTFVTSF9GSUxFX0JJVAkoMHgxKSAvKiBkYXRhIGZpbGUgb25seSAqLwogI2RlZmluZSBGTFVTSF9EQVRfQklUCSgxIDw8IE5JTEZTX0RBVF9JTk8pIC8qIERBVCBvbmx5ICovCiAKLXN0YXRpYyB2b2lkIG5pbGZzX3NlZ2N0b3JfYWNjZXB0KHN0cnVjdCBuaWxmc19zY19pbmZvICpzY2ksCi0JCQkJIHN0cnVjdCBuaWxmc19zZWdjdG9yX3JlcSAqcmVxKQorLyoqCisgKiBuaWxmc19zZWdjdG9yX2FjY2VwdCAtIHJlY29yZCBhY2NlcHRlZCBzZXF1ZW5jZSBjb3VudCBvZiBsb2ctd3JpdGUgcmVxdWVzdHMKKyAqIEBzY2k6IHNlZ21lbnQgY29uc3RydWN0b3Igb2JqZWN0CisgKi8KK3N0YXRpYyB2b2lkIG5pbGZzX3NlZ2N0b3JfYWNjZXB0KHN0cnVjdCBuaWxmc19zY19pbmZvICpzY2kpCiB7Ci0JcmVxLT5zY19lcnIgPSByZXEtPnNiX2VyciA9IDA7CiAJc3Bpbl9sb2NrKCZzY2ktPnNjX3N0YXRlX2xvY2spOwotCXJlcS0+c2VxX2FjY2VwdGVkID0gc2NpLT5zY19zZXFfcmVxdWVzdDsKKwlzY2ktPnNjX3NlcV9hY2NlcHRlZCA9IHNjaS0+c2Nfc2VxX3JlcXVlc3Q7CiAJc3Bpbl91bmxvY2soJnNjaS0+c2Nfc3RhdGVfbG9jayk7CiAKIAlpZiAoc2NpLT5zY190aW1lcikKIAkJZGVsX3RpbWVyX3N5bmMoc2NpLT5zY190aW1lcik7CiB9CiAKLXN0YXRpYyB2b2lkIG5pbGZzX3NlZ2N0b3Jfbm90aWZ5KHN0cnVjdCBuaWxmc19zY19pbmZvICpzY2ksCi0JCQkJIHN0cnVjdCBuaWxmc19zZWdjdG9yX3JlcSAqcmVxKQorLyoqCisgKiBuaWxmc19zZWdjdG9yX25vdGlmeSAtIG5vdGlmeSB0aGUgcmVzdWx0IG9mIHJlcXVlc3QgdG8gY2FsbGVyIHRocmVhZHMKKyAqIEBzY2k6IHNlZ21lbnQgY29uc3RydWN0b3Igb2JqZWN0CisgKiBAbW9kZTogbW9kZSBvZiBsb2cgZm9ybWluZworICogQGVycjogZXJyb3IgY29kZSB0byBiZSBub3RpZmllZAorICovCitzdGF0aWMgdm9pZCBuaWxmc19zZWdjdG9yX25vdGlmeShzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqc2NpLCBpbnQgbW9kZSwgaW50IGVycikKIHsKIAkvKiBDbGVhciByZXF1ZXN0cyAoZXZlbiB3aGVuIHRoZSBjb25zdHJ1Y3Rpb24gZmFpbGVkKSAqLwogCXNwaW5fbG9jaygmc2NpLT5zY19zdGF0ZV9sb2NrKTsKIAotCWlmIChyZXEtPm1vZGUgPT0gU0NfTFNFR19TUikgeworCWlmIChtb2RlID09IFNDX0xTRUdfU1IpIHsKIAkJc2NpLT5zY19zdGF0ZSAmPSB+TklMRlNfU0VHQ1RPUl9DT01NSVQ7Ci0JCXNjaS0+c2Nfc2VxX2RvbmUgPSByZXEtPnNlcV9hY2NlcHRlZDsKLQkJbmlsZnNfc2VnY3Rvcl93YWtldXAoc2NpLCByZXEtPnNjX2VyciA/IDogcmVxLT5zYl9lcnIpOworCQlzY2ktPnNjX3NlcV9kb25lID0gc2NpLT5zY19zZXFfYWNjZXB0ZWQ7CisJCW5pbGZzX3NlZ2N0b3Jfd2FrZXVwKHNjaSwgZXJyKTsKIAkJc2NpLT5zY19mbHVzaF9yZXF1ZXN0ID0gMDsKIAl9IGVsc2UgewotCQlpZiAocmVxLT5tb2RlID09IFNDX0ZMVVNIX0ZJTEUpCisJCWlmIChtb2RlID09IFNDX0ZMVVNIX0ZJTEUpCiAJCQlzY2ktPnNjX2ZsdXNoX3JlcXVlc3QgJj0gfkZMVVNIX0ZJTEVfQklUOwotCQllbHNlIGlmIChyZXEtPm1vZGUgPT0gU0NfRkxVU0hfREFUKQorCQllbHNlIGlmIChtb2RlID09IFNDX0ZMVVNIX0RBVCkKIAkJCXNjaS0+c2NfZmx1c2hfcmVxdWVzdCAmPSB+RkxVU0hfREFUX0JJVDsKIAogCQkvKiByZS1lbmFibGUgdGltZXIgaWYgY2hlY2twb2ludCBjcmVhdGlvbiB3YXMgbm90IGRvbmUgKi8KQEAgLTI0NzIsMzAgKzI0NjYsMzcgQEAKIAlzcGluX3VubG9jaygmc2NpLT5zY19zdGF0ZV9sb2NrKTsKIH0KIAotc3RhdGljIGludCBuaWxmc19zZWdjdG9yX2NvbnN0cnVjdChzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqc2NpLAotCQkJCSAgIHN0cnVjdCBuaWxmc19zZWdjdG9yX3JlcSAqcmVxKQorLyoqCisgKiBuaWxmc19zZWdjdG9yX2NvbnN0cnVjdCAtIGZvcm0gbG9ncyBhbmQgd3JpdGUgdGhlbSB0byBkaXNrCisgKiBAc2NpOiBzZWdtZW50IGNvbnN0cnVjdG9yIG9iamVjdAorICogQG1vZGU6IG1vZGUgb2YgbG9nIGZvcm1pbmcKKyAqLworc3RhdGljIGludCBuaWxmc19zZWdjdG9yX2NvbnN0cnVjdChzdHJ1Y3QgbmlsZnNfc2NfaW5mbyAqc2NpLCBpbnQgbW9kZSkKIHsKIAlzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpID0gc2NpLT5zY19zYmk7CiAJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYmktPnNfbmlsZnM7CiAJaW50IGVyciA9IDA7CiAKKwluaWxmc19zZWdjdG9yX2FjY2VwdChzY2kpOworCiAJaWYgKG5pbGZzX2Rpc2NvbnRpbnVlZChuaWxmcykpCi0JCXJlcS0+bW9kZSA9IFNDX0xTRUdfU1I7Ci0JaWYgKCFuaWxmc19zZWdjdG9yX2NvbmZpcm0oc2NpKSkgewotCQllcnIgPSBuaWxmc19zZWdjdG9yX2RvX2NvbnN0cnVjdChzY2ksIHJlcS0+bW9kZSk7Ci0JCXJlcS0+c2NfZXJyID0gZXJyOwotCX0KKwkJbW9kZSA9IFNDX0xTRUdfU1I7CisJaWYgKCFuaWxmc19zZWdjdG9yX2NvbmZpcm0oc2NpKSkKKwkJZXJyID0gbmlsZnNfc2VnY3Rvcl9kb19jb25zdHJ1Y3Qoc2NpLCBtb2RlKTsKKwogCWlmIChsaWtlbHkoIWVycikpIHsKLQkJaWYgKHJlcS0+bW9kZSAhPSBTQ19GTFVTSF9EQVQpCisJCWlmIChtb2RlICE9IFNDX0ZMVVNIX0RBVCkKIAkJCWF0b21pY19zZXQoJm5pbGZzLT5uc19uZGlydHlibGtzLCAwKTsKIAkJaWYgKHRlc3RfYml0KE5JTEZTX1NDX1NVUEVSX1JPT1QsICZzY2ktPnNjX2ZsYWdzKSAmJgogCQkgICAgbmlsZnNfZGlzY29udGludWVkKG5pbGZzKSkgewogCQkJZG93bl93cml0ZSgmbmlsZnMtPm5zX3NlbSk7Ci0JCQlyZXEtPnNiX2VyciA9IG5pbGZzX2NvbW1pdF9zdXBlcihzYmksCi0JCQkJCW5pbGZzX2FsdHNiX25lZWRfdXBkYXRlKG5pbGZzKSk7CisJCQllcnIgPSBuaWxmc19jb21taXRfc3VwZXIoCisJCQkJc2JpLCBuaWxmc19hbHRzYl9uZWVkX3VwZGF0ZShuaWxmcykpOwogCQkJdXBfd3JpdGUoJm5pbGZzLT5uc19zZW0pOwogCQl9CiAJfQorCisJbmlsZnNfc2VnY3Rvcl9ub3RpZnkoc2NpLCBtb2RlLCBlcnIpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI1MjYsNyArMjUyNyw2IEBACiAJc3RydWN0IG5pbGZzX3NjX2luZm8gKnNjaSA9IE5JTEZTX1NDKHNiaSk7CiAJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzYmktPnNfbmlsZnM7CiAJc3RydWN0IG5pbGZzX3RyYW5zYWN0aW9uX2luZm8gdGk7Ci0Jc3RydWN0IG5pbGZzX3NlZ2N0b3JfcmVxIHJlcSA9IHsgLm1vZGUgPSBTQ19MU0VHX1NSIH07CiAJaW50IGVycjsKIAogCWlmICh1bmxpa2VseSghc2NpKSkKQEAgLTI1NDcsMTAgKzI1NDcsOCBAQAogCWxpc3Rfc3BsaWNlX3RhaWxfaW5pdCgmbmlsZnMtPm5zX2djX2lub2RlcywgJnNjaS0+c2NfZ2NfaW5vZGVzKTsKIAogCWZvciAoOzspIHsKLQkJbmlsZnNfc2VnY3Rvcl9hY2NlcHQoc2NpLCAmcmVxKTsKLQkJZXJyID0gbmlsZnNfc2VnY3Rvcl9jb25zdHJ1Y3Qoc2NpLCAmcmVxKTsKKwkJZXJyID0gbmlsZnNfc2VnY3Rvcl9jb25zdHJ1Y3Qoc2NpLCBTQ19MU0VHX1NSKTsKIAkJbmlsZnNfcmVtb3ZlX3dyaXR0ZW5fZ2Npbm9kZXMobmlsZnMsICZzY2ktPnNjX2djX2lub2Rlcyk7Ci0JCW5pbGZzX3NlZ2N0b3Jfbm90aWZ5KHNjaSwgJnJlcSk7CiAKIAkJaWYgKGxpa2VseSghZXJyKSkKIAkJCWJyZWFrOwpAQCAtMjU2MCw2ICsyNTU4LDE2IEBACiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCXNjaGVkdWxlX3RpbWVvdXQoc2NpLT5zY19pbnRlcnZhbCk7CiAJfQorCWlmIChuaWxmc190ZXN0X29wdChzYmksIERJU0NBUkQpKSB7CisJCWludCByZXQgPSBuaWxmc19kaXNjYXJkX3NlZ21lbnRzKG5pbGZzLCBzY2ktPnNjX2ZyZWVzZWdzLAorCQkJCQkJIHNjaS0+c2NfbmZyZWVzZWdzKTsKKwkJaWYgKHJldCkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgICAgICJOSUxGUyB3YXJuaW5nOiBlcnJvciAlZCBvbiBkaXNjYXJkIHJlcXVlc3QsICIKKwkJCSAgICAgICAidHVybmluZyBkaXNjYXJkcyBvZmYgZm9yIHRoZSBkZXZpY2VcbiIsIHJldCk7CisJCQluaWxmc19jbGVhcl9vcHQoc2JpLCBESVNDQVJEKTsKKwkJfQorCX0KIAogIG91dF91bmxvY2s6CiAJc2NpLT5zY19mcmVlc2VncyA9IE5VTEw7CkBAIC0yNTczLDEzICsyNTgxLDkgQEAKIHsKIAlzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpID0gc2NpLT5zY19zYmk7CiAJc3RydWN0IG5pbGZzX3RyYW5zYWN0aW9uX2luZm8gdGk7Ci0Jc3RydWN0IG5pbGZzX3NlZ2N0b3JfcmVxIHJlcSA9IHsgLm1vZGUgPSBtb2RlIH07CiAKIAluaWxmc190cmFuc2FjdGlvbl9sb2NrKHNiaSwgJnRpLCAwKTsKLQotCW5pbGZzX3NlZ2N0b3JfYWNjZXB0KHNjaSwgJnJlcSk7Ci0JbmlsZnNfc2VnY3Rvcl9jb25zdHJ1Y3Qoc2NpLCAmcmVxKTsKLQluaWxmc19zZWdjdG9yX25vdGlmeShzY2ksICZyZXEpOworCW5pbGZzX3NlZ2N0b3JfY29uc3RydWN0KHNjaSwgbW9kZSk7CiAKIAkvKgogCSAqIFVuY2xvc2VkIHNlZ21lbnQgc2hvdWxkIGJlIHJldHJpZWQuICBXZSBkbyB0aGlzIHVzaW5nIHNjX3RpbWVyLgpAQCAtMjYzNSw2ICsyNjM5LDcgQEAKIHN0YXRpYyBpbnQgbmlsZnNfc2VnY3Rvcl90aHJlYWQodm9pZCAqYXJnKQogewogCXN0cnVjdCBuaWxmc19zY19pbmZvICpzY2kgPSAoc3RydWN0IG5pbGZzX3NjX2luZm8gKilhcmc7CisJc3RydWN0IHRoZV9uaWxmcyAqbmlsZnMgPSBzY2ktPnNjX3NiaS0+c19uaWxmczsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAlpbnQgdGltZW91dCA9IDA7CiAKQEAgLTI2ODAsNyArMjY4NSw2IEBACiAJfSBlbHNlIHsKIAkJREVGSU5FX1dBSVQod2FpdCk7CiAJCWludCBzaG91bGRfc2xlZXAgPSAxOwotCQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmczsKIAogCQlwcmVwYXJlX3RvX3dhaXQoJnNjaS0+c2Nfd2FpdF9kYWVtb24sICZ3YWl0LAogCQkJCVRBU0tfSU5URVJSVVBUSUJMRSk7CkBAIC0yNzAxLDggKzI3MDUsOCBAQAogCQlmaW5pc2hfd2FpdCgmc2NpLT5zY193YWl0X2RhZW1vbiwgJndhaXQpOwogCQl0aW1lb3V0ID0gKChzY2ktPnNjX3N0YXRlICYgTklMRlNfU0VHQ1RPUl9DT01NSVQpICYmCiAJCQkgICB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHNjaS0+c2NfdGltZXItPmV4cGlyZXMpKTsKLQkJbmlsZnMgPSBzY2ktPnNjX3NiaS0+c19uaWxmczsKLQkJaWYgKHNjaS0+c2Nfc3VwZXItPnNfZGlydCAmJiBuaWxmc19zYl9uZWVkX3VwZGF0ZShuaWxmcykpCisKKwkJaWYgKG5pbGZzX3NiX2RpcnR5KG5pbGZzKSAmJiBuaWxmc19zYl9uZWVkX3VwZGF0ZShuaWxmcykpCiAJCQlzZXRfbmlsZnNfZGlzY29udGludWVkKG5pbGZzKTsKIAl9CiAJZ290byBsb29wOwpAQCAtMjc5NywxMiArMjgwMSw5IEBACiAJZG8gewogCQlzdHJ1Y3QgbmlsZnNfc2JfaW5mbyAqc2JpID0gc2NpLT5zY19zYmk7CiAJCXN0cnVjdCBuaWxmc190cmFuc2FjdGlvbl9pbmZvIHRpOwotCQlzdHJ1Y3QgbmlsZnNfc2VnY3Rvcl9yZXEgcmVxID0geyAubW9kZSA9IFNDX0xTRUdfU1IgfTsKIAogCQluaWxmc190cmFuc2FjdGlvbl9sb2NrKHNiaSwgJnRpLCAwKTsKLQkJbmlsZnNfc2VnY3Rvcl9hY2NlcHQoc2NpLCAmcmVxKTsKLQkJcmV0ID0gbmlsZnNfc2VnY3Rvcl9jb25zdHJ1Y3Qoc2NpLCAmcmVxKTsKLQkJbmlsZnNfc2VnY3Rvcl9ub3RpZnkoc2NpLCAmcmVxKTsKKwkJcmV0ID0gbmlsZnNfc2VnY3Rvcl9jb25zdHJ1Y3Qoc2NpLCBTQ19MU0VHX1NSKTsKIAkJbmlsZnNfdHJhbnNhY3Rpb25fdW5sb2NrKHNiaSk7CiAKIAl9IHdoaWxlIChyZXQgJiYgcmV0cnljb3VudC0tID4gMCk7CkBAIC0yODY1LDggKzI4NjYsMTUgQEAKIAlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKIAlpbnQgZXJyOwogCi0JLyogRWFjaCBmaWVsZCBvZiBuaWxmc19zZWdjdG9yIGlzIGNsZWFyZWQgdGhyb3VnaCB0aGUgaW5pdGlhbGl6YXRpb24KLQkgICBvZiBzdXBlci1ibG9jayBpbmZvICovCisJaWYgKE5JTEZTX1NDKHNiaSkpIHsKKwkJLyoKKwkJICogVGhpcyBoYXBwZW5zIGlmIHRoZSBmaWxlc3lzdGVtIHdhcyByZW1vdW50ZWQKKwkJICogcmVhZC93cml0ZSBhZnRlciBuaWxmc19lcnJvciBkZWdlbmVyYXRlZCBpdCBpbnRvIGEKKwkJICogcmVhZC1vbmx5IG1vdW50LgorCQkgKi8KKwkJbmlsZnNfZGV0YWNoX3NlZ21lbnRfY29uc3RydWN0b3Ioc2JpKTsKKwl9CisKIAlzYmktPnNfc2NfaW5mbyA9IG5pbGZzX3NlZ2N0b3JfbmV3KHNiaSk7CiAJaWYgKCFzYmktPnNfc2NfaW5mbykKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvc2VnbWVudC5oIGIvZnMvbmlsZnMyL3NlZ21lbnQuaAppbmRleCAzZDNhYjJmLi4zMTU1ZTBjIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc2VnbWVudC5oCisrKyBiL2ZzL25pbGZzMi9zZWdtZW50LmgKQEAgLTExNiw2ICsxMTYsNyBAQAogICogQHNjX3dhaXRfZGFlbW9uOiBEYWVtb24gd2FpdCBxdWV1ZQogICogQHNjX3dhaXRfdGFzazogU3RhcnQvZW5kIHdhaXQgcXVldWUgdG8gY29udHJvbCBzZWdjdG9yZCB0YXNrCiAgKiBAc2Nfc2VxX3JlcXVlc3Q6IFJlcXVlc3QgY291bnRlcgorICogQHNjX3NlcV9hY2NlcHQ6IEFjY2VwdGVkIHJlcXVlc3QgY291bnQKICAqIEBzY19zZXFfZG9uZTogQ29tcGxldGlvbiBjb3VudGVyCiAgKiBAc2Nfc3luYzogUmVxdWVzdCBvZiBleHBsaWNpdCBzeW5jIG9wZXJhdGlvbgogICogQHNjX2ludGVydmFsOiBUaW1lb3V0IHZhbHVlIG9mIGJhY2tncm91bmQgY29uc3RydWN0aW9uCkBAIC0xNjksNiArMTcwLDcgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdAlzY193YWl0X3Rhc2s7CiAKIAlfX3UzMgkJCXNjX3NlcV9yZXF1ZXN0OworCV9fdTMyCQkJc2Nfc2VxX2FjY2VwdGVkOwogCV9fdTMyCQkJc2Nfc2VxX2RvbmU7CiAKIAlpbnQJCQlzY19zeW5jOwpkaWZmIC0tZ2l0IGEvZnMvbmlsZnMyL3N1cGVyLmMgYi9mcy9uaWxmczIvc3VwZXIuYwppbmRleCA4MTczZmFlLi45MjU3OWNjIDEwMDY0NAotLS0gYS9mcy9uaWxmczIvc3VwZXIuYworKysgYi9mcy9uaWxmczIvc3VwZXIuYwpAQCAtOTYsOSArOTYsNiBAQAogCWlmICghKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgewogCQlzdHJ1Y3QgdGhlX25pbGZzICpuaWxmcyA9IHNiaS0+c19uaWxmczsKIAotCQlpZiAoIW5pbGZzX3Rlc3Rfb3B0KHNiaSwgRVJST1JTX0NPTlQpKQotCQkJbmlsZnNfZGV0YWNoX3NlZ21lbnRfY29uc3RydWN0b3Ioc2JpKTsKLQogCQlkb3duX3dyaXRlKCZuaWxmcy0+bnNfc2VtKTsKIAkJaWYgKCEobmlsZnMtPm5zX21vdW50X3N0YXRlICYgTklMRlNfRVJST1JfRlMpKSB7CiAJCQluaWxmcy0+bnNfbW91bnRfc3RhdGUgfD0gTklMRlNfRVJST1JfRlM7CkBAIC0zMDEsNyArMjk4LDcgQEAKIAkJbWVtY3B5KHNicFsxXSwgc2JwWzBdLCBuaWxmcy0+bnNfc2JzaXplKTsKIAkJbmlsZnMtPm5zX3Nid3RpbWVbMV0gPSB0OwogCX0KLQlzYmktPnNfc3VwZXItPnNfZGlydCA9IDA7CisJY2xlYXJfbmlsZnNfc2JfZGlydHkobmlsZnMpOwogCXJldHVybiBuaWxmc19zeW5jX3N1cGVyKHNiaSwgZHVwc2IpOwogfQogCkBAIC0zNDUsNyArMzQyLDcgQEAKIAkJZXJyID0gbmlsZnNfY29uc3RydWN0X3NlZ21lbnQoc2IpOwogCiAJZG93bl93cml0ZSgmbmlsZnMtPm5zX3NlbSk7Ci0JaWYgKHNiLT5zX2RpcnQpCisJaWYgKG5pbGZzX3NiX2RpcnR5KG5pbGZzKSkKIAkJbmlsZnNfY29tbWl0X3N1cGVyKHNiaSwgMSk7CiAJdXBfd3JpdGUoJm5pbGZzLT5uc19zZW0pOwogCkBAIC00ODEsNiArNDc4LDggQEAKIAkJc2VxX3ByaW50ZihzZXEsICIsb3JkZXI9c3RyaWN0Iik7CiAJaWYgKG5pbGZzX3Rlc3Rfb3B0KHNiaSwgTk9SRUNPVkVSWSkpCiAJCXNlcV9wcmludGYoc2VxLCAiLG5vcmVjb3ZlcnkiKTsKKwlpZiAobmlsZnNfdGVzdF9vcHQoc2JpLCBESVNDQVJEKSkKKwkJc2VxX3ByaW50ZihzZXEsICIsZGlzY2FyZCIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC01NTAsNyArNTQ5LDcgQEAKIGVudW0gewogCU9wdF9lcnJfY29udCwgT3B0X2Vycl9wYW5pYywgT3B0X2Vycl9ybywKIAlPcHRfbm9iYXJyaWVyLCBPcHRfc25hcHNob3QsIE9wdF9vcmRlciwgT3B0X25vcmVjb3ZlcnksCi0JT3B0X2VyciwKKwlPcHRfZGlzY2FyZCwgT3B0X2VyciwKIH07CiAKIHN0YXRpYyBtYXRjaF90YWJsZV90IHRva2VucyA9IHsKQEAgLTU2MSw2ICs1NjAsNyBAQAogCXtPcHRfc25hcHNob3QsICJjcD0ldSJ9LAogCXtPcHRfb3JkZXIsICJvcmRlcj0lcyJ9LAogCXtPcHRfbm9yZWNvdmVyeSwgIm5vcmVjb3ZlcnkifSwKKwl7T3B0X2Rpc2NhcmQsICJkaXNjYXJkIn0sCiAJe09wdF9lcnIsIE5VTEx9CiB9OwogCkBAIC02MTQsNiArNjE0LDkgQEAKIAkJY2FzZSBPcHRfbm9yZWNvdmVyeToKIAkJCW5pbGZzX3NldF9vcHQoc2JpLCBOT1JFQ09WRVJZKTsKIAkJCWJyZWFrOworCQljYXNlIE9wdF9kaXNjYXJkOgorCQkJbmlsZnNfc2V0X29wdChzYmksIERJU0NBUkQpOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiTklMRlM6IFVucmVjb2duaXplZCBtb3VudCBvcHRpb24gXCIlc1wiXG4iLCBwKTsKZGlmZiAtLWdpdCBhL2ZzL25pbGZzMi90aGVfbmlsZnMuYyBiL2ZzL25pbGZzMi90aGVfbmlsZnMuYwppbmRleCA2MjQxZTE3Li45MjczM2Q1IDEwMDY0NAotLS0gYS9mcy9uaWxmczIvdGhlX25pbGZzLmMKKysrIGIvZnMvbmlsZnMyL3RoZV9uaWxmcy5jCkBAIC02NDYsNiArNjQ2LDQ0IEBACiAJZ290byBvdXQ7CiB9CiAKK2ludCBuaWxmc19kaXNjYXJkX3NlZ21lbnRzKHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzLCBfX3U2NCAqc2VnbnVtcCwKKwkJCSAgICBzaXplX3QgbnNlZ3MpCit7CisJc2VjdG9yX3Qgc2VnX3N0YXJ0LCBzZWdfZW5kOworCXNlY3Rvcl90IHN0YXJ0ID0gMCwgbmJsb2NrcyA9IDA7CisJdW5zaWduZWQgaW50IHNlY3RzX3Blcl9ibG9jazsKKwlfX3U2NCAqc247CisJaW50IHJldCA9IDA7CisKKwlzZWN0c19wZXJfYmxvY2sgPSAoMSA8PCBuaWxmcy0+bnNfYmxvY2tzaXplX2JpdHMpIC8KKwkJYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUobmlsZnMtPm5zX2JkZXYpOworCWZvciAoc24gPSBzZWdudW1wOyBzbiA8IHNlZ251bXAgKyBuc2Vnczsgc24rKykgeworCQluaWxmc19nZXRfc2VnbWVudF9yYW5nZShuaWxmcywgKnNuLCAmc2VnX3N0YXJ0LCAmc2VnX2VuZCk7CisKKwkJaWYgKCFuYmxvY2tzKSB7CisJCQlzdGFydCA9IHNlZ19zdGFydDsKKwkJCW5ibG9ja3MgPSBzZWdfZW5kIC0gc2VnX3N0YXJ0ICsgMTsKKwkJfSBlbHNlIGlmIChzdGFydCArIG5ibG9ja3MgPT0gc2VnX3N0YXJ0KSB7CisJCQluYmxvY2tzICs9IHNlZ19lbmQgLSBzZWdfc3RhcnQgKyAxOworCQl9IGVsc2UgeworCQkJcmV0ID0gYmxrZGV2X2lzc3VlX2Rpc2NhcmQobmlsZnMtPm5zX2JkZXYsCisJCQkJCQkgICBzdGFydCAqIHNlY3RzX3Blcl9ibG9jaywKKwkJCQkJCSAgIG5ibG9ja3MgKiBzZWN0c19wZXJfYmxvY2ssCisJCQkJCQkgICBHRlBfTk9GUywKKwkJCQkJCSAgIERJU0NBUkRfRkxfQkFSUklFUik7CisJCQlpZiAocmV0IDwgMCkKKwkJCQlyZXR1cm4gcmV0OworCQkJbmJsb2NrcyA9IDA7CisJCX0KKwl9CisJaWYgKG5ibG9ja3MpCisJCXJldCA9IGJsa2Rldl9pc3N1ZV9kaXNjYXJkKG5pbGZzLT5uc19iZGV2LAorCQkJCQkgICBzdGFydCAqIHNlY3RzX3Blcl9ibG9jaywKKwkJCQkJICAgbmJsb2NrcyAqIHNlY3RzX3Blcl9ibG9jaywKKwkJCQkJICAgR0ZQX05PRlMsIERJU0NBUkRfRkxfQkFSUklFUik7CisJcmV0dXJuIHJldDsKK30KKwogaW50IG5pbGZzX2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCB0aGVfbmlsZnMgKm5pbGZzLCBzZWN0b3JfdCAqbmJsb2NrcykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmRhdCA9IG5pbGZzX2RhdF9pbm9kZShuaWxmcyk7CmRpZmYgLS1naXQgYS9mcy9uaWxmczIvdGhlX25pbGZzLmggYi9mcy9uaWxmczIvdGhlX25pbGZzLmgKaW5kZXggNTg5Nzg2ZS4uZTk3OTVmMSAxMDA2NDQKLS0tIGEvZnMvbmlsZnMyL3RoZV9uaWxmcy5oCisrKyBiL2ZzL25pbGZzMi90aGVfbmlsZnMuaApAQCAtMzgsNiArMzgsNyBAQAogCQkJCSAgIHRoZSBsYXRlc3QgY2hlY2twb2ludCB3YXMgbG9hZGVkICovCiAJVEhFX05JTEZTX0RJU0NPTlRJTlVFRCwJLyogJ25leHQnIHBvaW50ZXIgY2hhaW4gaGFzIGJyb2tlbiAqLwogCVRIRV9OSUxGU19HQ19SVU5OSU5HLAkvKiBnYyBwcm9jZXNzIGlzIHJ1bm5pbmcgKi8KKwlUSEVfTklMRlNfU0JfRElSVFksCS8qIHN1cGVyIGJsb2NrIGlzIGRpcnR5ICovCiB9OwogCiAvKioKQEAgLTE5Nyw2ICsxOTgsNyBAQAogVEhFX05JTEZTX0ZOUyhMT0FERUQsIGxvYWRlZCkKIFRIRV9OSUxGU19GTlMoRElTQ09OVElOVUVELCBkaXNjb250aW51ZWQpCiBUSEVfTklMRlNfRk5TKEdDX1JVTk5JTkcsIGdjX3J1bm5pbmcpCitUSEVfTklMRlNfRk5TKFNCX0RJUlRZLCBzYl9kaXJ0eSkKIAogLyogTWluaW11bSBpbnRlcnZhbCBvZiBwZXJpb2RpY2FsIHVwZGF0ZSBvZiBzdXBlcmJsb2NrcyAoaW4gc2Vjb25kcykgKi8KICNkZWZpbmUgTklMRlNfU0JfRlJFUQkJMTAKQEAgLTIyMSw2ICsyMjMsNyBAQAogdm9pZCBwdXRfbmlsZnMoc3RydWN0IHRoZV9uaWxmcyAqKTsKIGludCBpbml0X25pbGZzKHN0cnVjdCB0aGVfbmlsZnMgKiwgc3RydWN0IG5pbGZzX3NiX2luZm8gKiwgY2hhciAqKTsKIGludCBsb2FkX25pbGZzKHN0cnVjdCB0aGVfbmlsZnMgKiwgc3RydWN0IG5pbGZzX3NiX2luZm8gKik7CitpbnQgbmlsZnNfZGlzY2FyZF9zZWdtZW50cyhzdHJ1Y3QgdGhlX25pbGZzICosIF9fdTY0ICosIHNpemVfdCk7CiBpbnQgbmlsZnNfY291bnRfZnJlZV9ibG9ja3Moc3RydWN0IHRoZV9uaWxmcyAqLCBzZWN0b3JfdCAqKTsKIHN0cnVjdCBuaWxmc19zYl9pbmZvICpuaWxmc19maW5kX3NiaW5mbyhzdHJ1Y3QgdGhlX25pbGZzICosIGludCwgX191NjQpOwogaW50IG5pbGZzX2NoZWNrcG9pbnRfaXNfbW91bnRlZChzdHJ1Y3QgdGhlX25pbGZzICosIF9fdTY0LCBpbnQpOwpkaWZmIC0tZ2l0IGEvZnMvbm90aWZ5L2lub3RpZnkvaW5vdGlmeV91c2VyLmMgYi9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYwppbmRleCBhOTRlOGJkLi40NzJjZGYyIDEwMDY0NAotLS0gYS9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYworKysgYi9mcy9ub3RpZnkvaW5vdGlmeS9pbm90aWZ5X3VzZXIuYwpAQCAtMjksMTQgKzI5LDEyIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPiAvKiBtb2R1bGVfaW5pdCAqLwogI2luY2x1ZGUgPGxpbnV4L2lub3RpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4gLyogcm91bmR1cCgpICovCi0jaW5jbHVkZSA8bGludXgvbWFnaWMuaD4gLyogc3VwZXJibG9jayBtYWdpYyBudW1iZXIgKi8KLSNpbmNsdWRlIDxsaW51eC9tb3VudC5oPiAvKiBtbnRnZXQgKi8KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPiAvKiBMT09LVVBfRk9MTE9XICovCi0jaW5jbHVkZSA8bGludXgvcGF0aC5oPiAvKiBzdHJ1Y3QgcGF0aCAqLwogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+IC8qIHN0cnVjdCB1c2VyICovCiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPiAvKiBzdHJ1Y3Qga21lbV9jYWNoZSAqLwogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hbm9uX2lub2Rlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgpAQCAtNDUsOCArNDMsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgogCi1zdGF0aWMgc3RydWN0IHZmc21vdW50ICppbm90aWZ5X21udCBfX3JlYWRfbW9zdGx5OwotCiAvKiB0aGVzZSBhcmUgY29uZmlndXJhYmxlIHZpYSAvcHJvYy9zeXMvZnMvaW5vdGlmeS8gKi8KIHN0YXRpYyBpbnQgaW5vdGlmeV9tYXhfdXNlcl9pbnN0YW5jZXMgX19yZWFkX21vc3RseTsKIHN0YXRpYyBpbnQgaW5vdGlmeV9tYXhfcXVldWVkX2V2ZW50cyBfX3JlYWRfbW9zdGx5OwpAQCAtNjQ1LDkgKzY0MSw3IEBACiB7CiAJc3RydWN0IGZzbm90aWZ5X2dyb3VwICpncm91cDsKIAlzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXI7Ci0Jc3RydWN0IGZpbGUgKmZpbHA7Ci0Jc3RydWN0IHBhdGggcGF0aDsKLQlpbnQgZmQsIHJldDsKKwlpbnQgcmV0OwogCiAJLyogQ2hlY2sgdGhlIElOXyogY29uc3RhbnRzIGZvciBjb25zaXN0ZW5jeS4gICovCiAJQlVJTERfQlVHX09OKElOX0NMT0VYRUMgIT0gT19DTE9FWEVDKTsKQEAgLTY1NiwxMCArNjUwLDYgQEAKIAlpZiAoZmxhZ3MgJiB+KElOX0NMT0VYRUMgfCBJTl9OT05CTE9DSykpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZmQgPSBnZXRfdW51c2VkX2ZkX2ZsYWdzKGZsYWdzICYgT19DTE9FWEVDKTsKLQlpZiAoZmQgPCAwKQotCQlyZXR1cm4gZmQ7Ci0KIAl1c2VyID0gZ2V0X2N1cnJlbnRfdXNlcigpOwogCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmdXNlci0+aW5vdGlmeV9kZXZzKSA+PQogCQkJaW5vdGlmeV9tYXhfdXNlcl9pbnN0YW5jZXMpKSB7CkBAIC02NzYsMjcgKzY2NiwxNCBAQAogCiAJYXRvbWljX2luYygmdXNlci0+aW5vdGlmeV9kZXZzKTsKIAotCXBhdGgubW50ID0gaW5vdGlmeV9tbnQ7Ci0JcGF0aC5kZW50cnkgPSBpbm90aWZ5X21udC0+bW50X3Jvb3Q7Ci0JcGF0aF9nZXQoJnBhdGgpOwotCWZpbHAgPSBhbGxvY19maWxlKCZwYXRoLCBGTU9ERV9SRUFELCAmaW5vdGlmeV9mb3BzKTsKLQlpZiAoIWZpbHApCi0JCWdvdG8gRW5maWxlOworCXJldCA9IGFub25faW5vZGVfZ2V0ZmQoImlub3RpZnkiLCAmaW5vdGlmeV9mb3BzLCBncm91cCwKKwkJCQkgIE9fUkRPTkxZIHwgZmxhZ3MpOworCWlmIChyZXQgPj0gMCkKKwkJcmV0dXJuIHJldDsKIAotCWZpbHAtPmZfZmxhZ3MgPSBPX1JET05MWSB8IChmbGFncyAmIE9fTk9OQkxPQ0spOwotCWZpbHAtPnByaXZhdGVfZGF0YSA9IGdyb3VwOwotCi0JZmRfaW5zdGFsbChmZCwgZmlscCk7Ci0KLQlyZXR1cm4gZmQ7Ci0KLUVuZmlsZToKLQlyZXQgPSAtRU5GSUxFOwotCXBhdGhfcHV0KCZwYXRoKTsKIAlhdG9taWNfZGVjKCZ1c2VyLT5pbm90aWZ5X2RldnMpOwogb3V0X2ZyZWVfdWlkOgogCWZyZWVfdWlkKHVzZXIpOwotCXB1dF91bnVzZWRfZmQoZmQpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTc4MywyMCArNzYwLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50Ci1pbm90aWZ5X2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwgaW50IGZsYWdzLAotCSAgICAgICBjb25zdCBjaGFyICpkZXZfbmFtZSwgdm9pZCAqZGF0YSwgc3RydWN0IHZmc21vdW50ICptbnQpCi17Ci0JcmV0dXJuIGdldF9zYl9wc2V1ZG8oZnNfdHlwZSwgImlub3RpZnkiLCBOVUxMLAotCQkJSU5PVElGWUZTX1NVUEVSX01BR0lDLCBtbnQpOwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgaW5vdGlmeV9mc190eXBlID0gewotICAgIC5uYW1lCT0gImlub3RpZnlmcyIsCi0gICAgLmdldF9zYgk9IGlub3RpZnlfZ2V0X3NiLAotICAgIC5raWxsX3NiCT0ga2lsbF9hbm9uX3N1cGVyLAotfTsKLQogLyoKICAqIGlub3RpZnlfdXNlcl9zZXR1cCAtIE91ciBpbml0aWFsaXphdGlvbiBmdW5jdGlvbi4gIE5vdGUgdGhhdCB3ZSBjYW5ubm90IHJldHVybgogICogZXJyb3IgYmVjYXVzZSB3ZSBoYXZlIGNvbXBpbGVkLWluIFZGUyBob29rcy4gIFNvIGFuICh1bmxpa2VseSkgZmFpbHVyZSBoZXJlCkBAIC04MDQsMTYgKzc2Nyw2IEBACiAgKi8KIHN0YXRpYyBpbnQgX19pbml0IGlub3RpZnlfdXNlcl9zZXR1cCh2b2lkKQogewotCWludCByZXQ7Ci0KLQlyZXQgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZpbm90aWZ5X2ZzX3R5cGUpOwotCWlmICh1bmxpa2VseShyZXQpKQotCQlwYW5pYygiaW5vdGlmeTogcmVnaXN0ZXJfZmlsZXN5c3RlbSByZXR1cm5lZCAlZCFcbiIsIHJldCk7Ci0KLQlpbm90aWZ5X21udCA9IGtlcm5fbW91bnQoJmlub3RpZnlfZnNfdHlwZSk7Ci0JaWYgKElTX0VSUihpbm90aWZ5X21udCkpCi0JCXBhbmljKCJpbm90aWZ5OiBrZXJuX21vdW50IHJldCAlbGQhXG4iLCBQVFJfRVJSKGlub3RpZnlfbW50KSk7Ci0KIAlpbm90aWZ5X2lub2RlX21hcmtfY2FjaGVwID0gS01FTV9DQUNIRShpbm90aWZ5X2lub2RlX21hcmtfZW50cnksIFNMQUJfUEFOSUMpOwogCWV2ZW50X3ByaXZfY2FjaGVwID0gS01FTV9DQUNIRShpbm90aWZ5X2V2ZW50X3ByaXZhdGVfZGF0YSwgU0xBQl9QQU5JQyk7CiAKZGlmZiAtLWdpdCBhL2ZzL250ZnMvQ2hhbmdlTG9nIGIvZnMvbnRmcy9DaGFuZ2VMb2cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM3YzExZTEuLjAwMDAwMDAKLS0tIGEvZnMvbnRmcy9DaGFuZ2VMb2cKKysrIC9kZXYvbnVsbApAQCAtMSwxNzAyICswLDAgQEAKLVRvRG8vTm90ZXM6Ci0JLSBGaW5kIGFuZCBmaXggYnVncy4KLQktIFRoZSBvbmx5IHBsYWNlcyBpbiB0aGUga2VybmVsIHdoZXJlIGEgZmlsZSBpcyByZXNpemVkIGFyZQotCSAgbnRmc19maWxlX3dyaXRlKigpIGFuZCBudGZzX3RydW5jYXRlKCkgZm9yIGJvdGggb2Ygd2hpY2ggaV9tdXRleCBpcwotCSAgaGVsZC4gIEp1c3QgaGF2ZSB0byBiZSBjYXJlZnVsIGluIHJlYWQtL3dyaXRlcGFnZSBhbmQgb3RoZXIgaGVscGVycwotCSAgbm90IHJ1bm5pbmcgdW5kZXIgaV9tdXRleCB0aGF0IHdlIHBsYXkgbmljZS4gIEFsc28gbmVlZCB0byBiZSBjYXJlZnVsCi0JICB3aXRoIGluaXRpYWxpemVkX3NpemUgZXh0ZW5zaW9uIGluIG50ZnNfZmlsZV93cml0ZSooKSBhbmQgd3JpdGVwYWdlLgotCSAgVVBEQVRFOiBUaGUgb25seSB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlIGNoZWNrZWQgYXJlIHRoZSBjb21wcmVzc2VkCi0JICB3cml0ZSBhbmQgdGhlIG90aGVyIGF0dHJpYnV0ZSByZXNpemUvd3JpdGUgY2FzZXMgbGlrZSBpbmRleAotCSAgYXR0cmlidXRlcywgZXRjLiAgRm9yIG5vdyBub25lIG9mIHRoZXNlIGFyZSBpbXBsZW1lbnRlZCBzbyBhcmUgc2FmZS4KLQktIEltcGxlbWVudCBmaWxsaW5nIGluIG9mIGhvbGVzIGluIGFvcHMuYzo6bnRmc193cml0ZXBhZ2UoKSBhbmQgaXRzCi0JICBoZWxwZXJzLgotCS0gSW1wbGVtZW50IG1mdC5jOjpzeW5jX21mdF9taXJyb3JfdW1vdW50KCkuICBXZSBjdXJyZW50bHkgd2lsbCBqdXN0Ci0JICBsZWF2ZSB0aGUgdm9sdW1lIGRpcnR5IG9uIHVtb3VudCBpZiB0aGUgZmluYWwgaXB1dCh2b2wtPm1mdF9pbm8pCi0JICBjYXVzZXMgYSB3cml0ZSBvZiBhbnkgbWlycm9yZWQgbWZ0IHJlY29yZHMgZHVlIHRvIHRoZSBtZnQgbWlycm9yCi0JICBpbm9kZSBoYXZpbmcgYmVlbiBkaXNjYXJkZWQgYWxyZWFkeS4gIFdoZXRoZXIgdGhpcyBjYW4gYWN0dWFsbHkgZXZlcgotCSAgaGFwcGVuIGlzIHVuY2xlYXIgaG93ZXZlciBzbyBpdCBpcyB3b3J0aCB3YWl0aW5nIHVudGlsIHNvbWVvbmUgaGl0cwotCSAgdGhlIHByb2JsZW0uCi0KLTIuMS4yOSAtIEZpeCBhIGRlYWRsb2NrIGF0IG1vdW50IHRpbWUuCi0KLQktIER1cmluZyBtb3VudCB0aGUgVkZTIGhvbGRzIHNfdW1vdW50IGxvY2sgb24gdGhlIHN1cGVyYmxvY2suICBTbyB3aGVuCi0JICB3ZSB0cnkgdG8gZW1wdHkgdGhlIGpvdXJuYWwgJExvZ0ZpbGUgY29udGVudHMgYnkgY2FsbGluZwotCSAgbnRmc19hdHRyX3NldCgpIHdoZW4gdGhlIG1hY2hpbmUgZG9lcyBub3QgaGF2ZSBtdWNoIG1lbW9yeSBhbmQgdGhlCi0JICBqb3VybmFsIGlzIGxhcmdlIG50ZnNfYXR0cl9zZXQoKSByZXN1bHRzIGluIHRoZSBWTSB0cnlpbmcgdG8gYmFsYW5jZQotCSAgZGlydHkgcGFnZXMgd2hpY2ggaW4gdHVybiB0cmllcyB0byB0aGF0IHRoZSBzX3Vtb3VudCBsb2NrIGFuZCB0aHVzIHdlCi0JICBnZXQgYSBkZWFkbG9jay4gIFRoZSBzb2x1dGlvbiBpcyB0byBub3QgdXNlIG50ZnNfYXR0cl9zZXQoKSBhbmQKLQkgIGluc3RlYWQgZG8gdGhlIHplcm9pbmcgYnkgaGFuZCBhdCB0aGUgYmxvY2sgbGV2ZWwgcmF0aGVyIHRoYW4gcGFnZQotCSAgY2FjaGUgbGV2ZWwuCi0JLSBGaXggc3BhcnNlIHdhcm5pbmdzLgotCi0yLjEuMjggLSBGaXggYSBkZWFkbG9jay4KLQotCS0gRml4IGRlYWRsb2NrIGluIGZzL250ZnMvaW5vZGUuYzo6bnRmc19wdXRfaW5vZGUoKS4gIFRoYW5rcyB0byBTZXJnZXkKLQkgIFZsYXNvdiBmb3IgdGhlIHJlcG9ydCBhbmQgZGV0YWlsZWQgYW5hbHlzaXMgb2YgdGhlIGRlYWRsb2NrLiAgVGhlIGZpeAotCSAgaW52b2x2ZWQgZ2V0dGluZyByaWQgb2YgbnRmc19wdXRfaW5vZGUoKSBhbHRvZ2V0aGVyIGFuZCBoZW5jZSBOVEZTIG5vCi0JICBsb25nZXIgaGFzIGEgLT5wdXRfaW5vZGUgc3VwZXIgb3BlcmF0aW9uLgotCi0yLjEuMjcgLSBWYXJpb3VzIGJ1ZyBmaXhlcyBhbmQgY2xlYW51cHMuCi0KLQktIEZpeCB0d28gY29tcGlsZXIgd2FybmluZ3Mgb24gQWxwaGEuICBUaGFua3MgdG8gQW5kcmV3IE1vcnRvbiBmb3IKLQkgIHJlcG9ydGluZyB0aGVtLgotCS0gRml4IGFuIChpbm5vY2VudCkgb2ZmLWJ5LW9uZSBlcnJvciBpbiB0aGUgcnVubGlzdCBjb2RlLgotCS0gRml4IGEgYnVnZ2V0dGUgaW4gYW4gInNob3VsZCBiZSBpbXBvc3NpYmxlIiBjYXNlIGhhbmRsaW5nIHdoZXJlIHdlCi0JICBjb250aW51ZWQgdGhlIGF0dHJpYnV0ZSBsb29rdXAgbG9vcCBpbnN0ZWFkIG9mIGFib3J0aW5nIGl0LgotCS0gVXNlIGJ1ZmZlcl9taWdyYXRlX3BhZ2UoKSBmb3IgdGhlIC0+bWlncmF0ZXBhZ2UgZnVuY3Rpb24gb2YgYWxsIG50ZnMKLQkgIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucy4KLQktIEZpeCBjb21wYXJpc29uIG9mICRNRlQgYW5kICRNRlRNaXJyIHRvIG5vdCBiYWlsIG91dCB3aGVuIHRoZXJlIGFyZQotCSAgdW51c2VkLCBpbnZhbGlkIG1mdCByZWNvcmRzIHdoaWNoIGFyZSB0aGUgc2FtZSBpbiBib3RoICRNRlQgYW5kCi0JICAkTUZUTWlyci4KLQktIEFkZCBzdXBwb3J0IGZvciBzcGFyc2UgZmlsZXMgd2hpY2ggaGF2ZSBhIGNvbXByZXNzaW9uIHVuaXQgb2YgMC4KLQktIFJlbW92ZSBhbGwgdGhlIG1ha2VfYmFkX2lub2RlKCkgY2FsbHMuICBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZAotCSAgZnJvbSByZWFkIGlub2RlIGFuZCBuZXcgaW5vZGUgY29kZSBwYXRocy4KLQktIExpbWl0IG5hbWUgbGVuZ3RoIGluIGZzL250ZnMvdW5pc3RyLmM6Om50ZnNfbmxzdG91Y3MoKSB0byBtYXhpbXVtCi0JICBhbGxvd2VkIGJ5IE5URlMsIGkuZS4gMjU1IFVuaWNvZGUgY2hhcmFjdGVycywgbm90IGluY2x1ZGluZyB0aGUKLQkgIHRlcm1pbmF0aW5nIE5VTEwgKHdoaWNoIGlzIG5vdCBzdG9yZWQgb24gZGlzaykuCi0JLSBJbXByb3ZlIGNvbW1lbnRzIG9uIGZpbGUgYXR0cmlidXRlIGZsYWdzIGluIGZzL250ZnMvbGF5b3V0LmguCi0JLSBGaXggYSBidWcgaW4gZnMvbnRmcy9pbm9kZS5jOjpudGZzX3JlYWRfbG9ja2VkX2luZGV4X2lub2RlKCkgd2hlcmUgd2UKLQkgIGZvcmdvdCB0byB1cGRhdGUgYSB0ZW1wb3JhcnkgdmFyaWFibGUgc28gbG9hZGluZyBpbmRleCBpbm9kZXMgd2hpY2gKLQkgIGhhdmUgYW4gaW5kZXggYWxsb2NhdGlvbiBhdHRyaWJ1dGUgZmFpbGVkLgotCS0gQWRkIGEgbWlzc2luZyBjYWxsIHRvIGZsdXNoX2RjYWNoZV9tZnRfcmVjb3JkX3BhZ2UoKSBpbgotCSAgZnMvbnRmcy9pbm9kZS5jOjpudGZzX3dyaXRlX2lub2RlKCkuCi0JLSBIYW5kbGUgdGhlIHJlY2VudGx5IGludHJvZHVjZWQgLUVOQU1FVE9PTE9ORyByZXR1cm4gdmFsdWUgZnJvbQotCSAgZnMvbnRmcy91bmlzdHIuYzo6bnRmc19ubHN0b3VjcygpIGluIGZzL250ZnMvbmFtZWkuYzo6bnRmc19sb29rdXAoKS4KLQktIFNlbWFwaG9yZSB0byBtdXRleCBjb252ZXJzaW9uLiAgKEluZ28gTW9sbmFyKQotCi0yLjEuMjYgLSBNaW5vciBidWcgZml4ZXMgYW5kIHVwZGF0ZXMuCi0KLQktIEZpeCBhIHBvdGVudGlhbCBvdmVyZmxvdyBpbiBmaWxlLmMgd2hlcmUgYSBjYXN0IHRvIHM2NCB3YXMgbWlzc2luZyBpbgotCSAgYSBsZWZ0IHNoaWZ0IG9mIGEgcGFnZSBpbmRleC4KLQktIFRoZSBzdHJ1Y3QgaW5vZGUgaGFzIGhhZCBpdHMgaV9zZW0gc2VtYXBob3JlIGNoYW5nZWQgdG8gYSBtdXRleCBuYW1lZAotCSAgaV9tdXRleC4KLQktIFdlIGhhdmUgc3RydWN0IGttZW1fY2FjaGUgbm93IHNvIHVzZSBpdCBpbnN0ZWFkIG9mIHRoZSB0eXBlZGVmCi0JICBrbWVtX2NhY2hlX3QuICAoUGVra2EgRW5iZXJnKQotCS0gSW1wbGVtZW50IHN1cHBvcnQgZm9yIHNlY3RvciBzaXplcyBhYm92ZSA1MTIgYnl0ZXMgKHVwIHRvIHRoZSBtYXhpbXVtCi0JICBzdXBwb3J0ZWQgYnkgTlRGUyB3aGljaCBpcyA0MDk2IGJ5dGVzKS4KLQktIERvIG1vcmUgZGV0YWlsZWQgcmVwb3J0aW5nIG9mIHdoeSB3ZSBjYW5ub3QgbW91bnQgcmVhZC13cml0ZSBieQotCSAgc3BlY2lhbCBjYXNpbmcgdGhlIFZPTFVNRV9NT0RJRklFRF9CWV9DSEtEU0sgZmxhZy4KLQktIE1pc2NlbGxhbmVvdXMgdXBkYXRlcyB0byBsYXlvdXQuaC4KLQktIENvcGUgd2l0aCBhdHRyaWJ1dGUgbGlzdCBhdHRyaWJ1dGUgaGF2aW5nIGludmFsaWQgZmxhZ3MuICBXaW5kb3dzCi0JICBjb3BlcyB3aXRoIHRoaXMgYW5kIGV2ZW4gY2hrZHNrIGRvZXMgbm90IGRldGVjdCBvciBmaXggdGhpcyBzbyB3ZQotCSAgaGF2ZSB0byBjb3BlIHdpdGggaXQsIHRvby4gIFRoYW5rcyB0byBQYXdlbCBLb3QgZm9yIHJlcG9ydGluZyB0aGUKLQkgIHByb2JsZW0uCi0KLTIuMS4yNSAtIChBbG1vc3QpIGZ1bGx5IGltcGxlbWVudCB3cml0ZSgyKSBhbmQgdHJ1bmNhdGUoMikuCi0KLQktIENoYW5nZSBudGZzX21hcF9ydW5saXN0X25vbG9jaygpLCBudGZzX2F0dHJfZmluZF92Y25fbm9sb2NrKCkgYW5kCi0JICB7X18sfW50ZnNfY2x1c3Rlcl9mcmVlKCkgdG8gYWxzbyB0YWtlIGFuIG9wdGlvbmFsIGF0dHJpYnV0ZSBzZWFyY2gKLQkgIGNvbnRleHQgYXMgYXJndW1lbnQuICBUaGlzIGFsbG93cyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyB3aXRoIHRoZQotCSAgbWZ0IHJlY29yZCBtYXBwZWQuICBVcGRhdGUgYWxsIGNhbGxlcnMuCi0JLSBGaXggcG90ZW50aWFsIGRlYWRsb2NrIGluIG50ZnNfbWZ0X2RhdGFfZXh0ZW5kX2FsbG9jYXRpb25fbm9sb2NrKCkKLQkgIGVycm9yIGhhbmRsaW5nIGJ5IHBhc3NpbmcgaW4gdGhlIGFjdGl2ZSBzZWFyY2ggY29udGV4dCB3aGVuIGNhbGxpbmcKLQkgIG50ZnNfY2x1c3Rlcl9mcmVlKCkuCi0JLSBDaGFuZ2UgbnRmc19jbHVzdGVyX2FsbG9jKCkgdG8gdGFrZSBhbiBleHRyYSBib29sZWFuIHBhcmFtZXRlcgotCSAgc3BlY2lmeWluZyB3aGV0aGVyIHRoZSBjbHVzdGVyIGFyZSBiZWluZyBhbGxvY2F0ZWQgdG8gZXh0ZW5kIGFuCi0JICBhdHRyaWJ1dGUgb3IgdG8gZmlsbCBhIGhvbGUuCi0JLSBDaGFuZ2UgbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KCkgdG8gY2FsbCBudGZzX2NsdXN0ZXJfYWxsb2MoKQotCSAgd2l0aCBAaXNfZXh0ZW5zaW9uIHNldCB0byBUUlVFIGFuZCByZW1vdmUgdGhlIHJ1bmxpc3QgdGVybWluYXRvcgotCSAgZml4dXAgY29kZSBhcyB0aGlzIGlzIG5vdyBkb25lIGJ5IG50ZnNfY2x1c3Rlcl9hbGxvYygpLgotCS0gQ2hhbmdlIG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudCB0byB0YWtlIHRoZSBhdHRyaWJ1dGUgdmFsdWUgc2l6ZQotCSAgYXMgYW4gZXh0cmEgcGFyYW1ldGVyLiAgVGhpcyBpcyBuZWVkZWQgc2luY2Ugd2UgbmVlZCB0byBrbm93IHRoZSBzaXplCi0JICBiZWZvcmUgd2UgY2FuIG1hcCB0aGUgbWZ0IHJlY29yZCBhbmQgb3VyIGNhbGxlcnMgYWx3YXlzIGtub3cgaXQuICBUaGUKLQkgIHJlYXNvbiB3ZSBjYW5ub3Qgc2ltcGx5IHJlYWQgdGhlIHNpemUgZnJvbSB0aGUgdmZzIGlub2RlIGlfc2l6ZSBpcwotCSAgdGhhdCB0aGlzIGlzIG5vdCBuZWNlc3NhcmlseSB1cHRvZGF0ZS4gIFRoaXMgaGFwcGVucyB3aGVuCi0JICBudGZzX2F0dHJfbWFrZV9ub25fcmVzaWRlbnQoKSBpcyBjYWxsZWQgaW4gdGhlIC0+dHJ1bmNhdGUgY2FsbCBwYXRoLgotCS0gRml4IG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudCgpIHRvIHVwZGF0ZSB0aGUgdmZzIGlub2RlIGlfYmxvY2tzCi0JICB3aGljaCBpcyB6ZXJvIGZvciBhIHJlc2lkZW50IGF0dHJpYnV0ZSBidXQgc2hvdWxkIG5vIGxvbmdlciBiZSB6ZXJvCi0JICBvbmNlIHRoZSBhdHRyaWJ1dGUgaXMgbm9uLXJlc2lkZW50IGFzIGl0IHRoZW4gaGFzIHJlYWwgY2x1c3RlcnMKLQkgIGFsbG9jYXRlZC4KLQktIEFkZCBmcy9udGZzL2F0dHJpYi5baGNdOjpudGZzX2F0dHJfZXh0ZW5kX2FsbG9jYXRpb24oKSwgYSBmdW5jdGlvbiB0bwotCSAgZXh0ZW5kIHRoZSBhbGxvY2F0aW9uIG9mIGFuIGF0dHJpYnV0ZXMuICBPcHRpb25hbGx5LCB0aGUgZGF0YSBzaXplLAotCSAgYnV0IG5vdCB0aGUgaW5pdGlhbGl6ZWQgc2l6ZSBjYW4gYmUgZXh0ZW5kZWQsIHRvby4KLQktIEltcGxlbWVudCBmcy9udGZzL2lub2RlLltoY106Om50ZnNfdHJ1bmNhdGUoKS4gIEl0IG9ubHkgc3VwcG9ydHMKLQkgIHVuY29tcHJlc3NlZCBhbmQgdW5lbmNyeXB0ZWQgZmlsZXMgYW5kIGl0IG5ldmVyIGNyZWF0ZXMgc3BhcnNlIGZpbGVzCi0JICBhdCBsZWFzdCBmb3IgdGhlIG1vbWVudCAobWFraW5nIGEgZmlsZSBzcGFyc2UgcmVxdWlyZXMgdXMgdG8gbW9kaWZ5Ci0JICBpdHMgZGlyZWN0b3J5IGVudHJpZXMgYW5kIHdlIGRvIG5vdCBzdXBwb3J0IGRpcmVjdG9yeSBvcGVyYXRpb25zIGF0Ci0JICB0aGUgbW9tZW50KS4gIEFsc28sIHN1cHBvcnQgZm9yIGhpZ2hseSBmcmFnbWVudGVkIGZpbGVzLCBpLmUuIG9uZXMKLQkgIHdob3NlIGRhdGEgYXR0cmlidXRlIGlzIHNwbGl0IGFjcm9zcyBtdWx0aXBsZSBleHRlbnRzLCBpcyBzZXZlcmx5Ci0JICBsaW1pdGVkLiAgV2hlbiBzdWNoIGEgY2FzZSBpcyBlbmNvdW50ZXJlZCwgRU9QTk9UU1VQUCBpcyByZXR1cm5lZC4KLQktIEVuYWJsZSBBVFRSX1NJWkUgYXR0cmlidXRlIGNoYW5nZXMgaW4gbnRmc19zZXRhdHRyKCkuICBUaGlzIGNvbXBsZXRlcwotCSAgdGhlIGluaXRpYWwgaW1wbGVtZW50YXRpb24gb2YgZmlsZSB0cnVuY2F0aW9uLiAgTm93IGJvdGggb3BlbigyKWluZwotCSAgYSBmaWxlIHdpdGggdGhlIE9fVFJVTkMgZmxhZyBhbmQgdGhlIHssZn10cnVuY2F0ZSgyKSBzeXN0ZW0gY2FsbHMKLQkgIHdpbGwgcmVzaXplIGEgZmlsZSBhcHByb3ByaWF0ZWx5LiAgVGhlIGxpbWl0YXRpb25zIGFyZSB0aGF0IG9ubHkKLQkgIHVuY29tcHJlc3NlZCBhbmQgdW5lbmNyeXB0ZWQgZmlsZXMgYXJlIHN1cHBvcnRlZC4gIEFsc28sIHRoZXJlIGlzCi0JICBvbmx5IHZlcnkgbGltaXRlZCBzdXBwb3J0IGZvciBoaWdobHkgZnJhZ21lbnRlZCBmaWxlcyAodGhlIG9uZXMgd2hvc2UKLQkgICREQVRBIGF0dHJpYnV0ZSBpcyBzcGxpdCBpbnRvIG11bHRpcGxlIGF0dHJpYnV0ZSBleHRlbnRzKS4KLQktIEluIGF0dHJpYi5jOjpudGZzX2F0dHJfc2V0KCkgY2FsbCBiYWxhbmNlX2RpcnR5X3BhZ2VzX3JhdGVsaW1pdGVkKCkKLQkgIGFuZCBjb25kX3Jlc2NoZWQoKSBpbiB0aGUgbWFpbiBsb29wIGFzIHdlIGNvdWxkIGJlIGRpcnR5aW5nIGEgbG90IG9mCi0JICBwYWdlcyBhbmQgdGhpcyBlbnN1cmVzIHdlIHBsYXkgbmljZSB3aXRoIHRoZSBWTSBhbmQgdGhlIHN5c3RlbSBhcyBhCi0JICB3aG9sZS4KLQktIEltcGxlbWVudCBmaWxlIG9wZXJhdGlvbnMgLT53cml0ZSwgLT5haW9fd3JpdGUsIC0+d3JpdGV2IGZvciByZWd1bGFyCi0JICBmaWxlcy4gIFRoaXMgcmVwbGFjZXMgdGhlIG9sZCB1c2Ugb2YgZ2VuZXJpY19maWxlX3dyaXRlKCksIGV0IGFsIGFuZAotCSAgdGhlIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucyAtPnByZXBhcmVfd3JpdGUgYW5kIC0+Y29tbWl0X3dyaXRlLgotCSAgVGhpcyBtZWFucyB0aGF0IGJvdGggc3BhcnNlIGFuZCBub24tc3BhcnNlICh1bmVuY3J5cHRlZCBhbmQKLQkgIHVuY29tcHJlc3NlZCkgZmlsZXMgY2FuIG5vdyBiZSBleHRlbmRlZCB1c2luZyB0aGUgbm9ybWFsIHdyaXRlKDIpCi0JICBjb2RlIHBhdGguICBUaGVyZSBhcmUgdHdvIGxpbWl0YXRpb25zIGF0IHByZXNlbnQgYW5kIHRoZXNlIGFyZSB0aGF0Ci0JICB3ZSBuZXZlciBjcmVhdGUgc3BhcnNlIGZpbGVzIGFuZCB0aGF0IHdlIG9ubHkgaGF2ZSBsaW1pdGVkIHN1cHBvcnQKLQkgIGZvciBoaWdobHkgZnJhZ21lbnRlZCBmaWxlcywgaS5lLiBvbmVzIHdob3NlIGRhdGEgYXR0cmlidXRlIGlzIHNwbGl0Ci0JICBhY3Jvc3MgbXVsdGlwbGUgZXh0ZW50cy4gICBXaGVuIHN1Y2ggYSBjYXNlIGlzIGVuY291bnRlcmVkLAotCSAgRU9QTk9UU1VQUCBpcyByZXR1cm5lZC4KLQktICRFQSBhdHRyaWJ1dGVzIGNhbiBiZSBib3RoIHJlc2lkZW50IGFuZCBub24tcmVzaWRlbnQuCi0JLSBVc2UgJXogZm9yIHNpemVfdCB0byBmaXggY29tcGlsYXRpb24gd2FybmluZ3MuICAoQW5kcmV3IE1vcnRvbikKLQktIEZpeCBjb21waWxhdGlvbiB3YXJuaW5ncyB3aXRoIGdjYy00LjAuMiBvbiBTVVNFIDEwLjAuCi0JLSBEb2N1bWVudCBleHRlbmRlZCBhdHRyaWJ1dGUgKCRFQSkgTkVFRF9FQSBmbGFnLiAgKEJhc2VkIG9uIGxpYm50ZnMKLQkgIHBhdGNoIGJ5IFl1cmEgUGFraHVjaGl5LikKLQotMi4xLjI0IC0gTG90cyBvZiBidWcgZml4ZXMgYW5kIHN1cHBvcnQgbW9yZSBjbGVhbiBqb3VybmFsIHN0YXRlcy4KLQotCS0gU3VwcG9ydCBqb3VybmFscyAoJExvZ0ZpbGUpIHdoaWNoIGhhdmUgYmVlbiBtb2RpZmllZCBieSBjaGtkc2suICBUaGlzCi0JICBtZWFucyB1c2VycyBjYW4gYm9vdCBpbnRvIFdpbmRvd3MgYWZ0ZXIgd2UgbWFya2VkIHRoZSB2b2x1bWUgZGlydHkuCi0JICBUaGUgV2luZG93cyBib290IHdpbGwgcnVuIGNoa2RzayBhbmQgdGhlbiByZWJvb3QuICBUaGUgdXNlciBjYW4gdGhlbgotCSAgaW1tZWRpYXRlbHkgYm9vdCBpbnRvIExpbnV4IHJhdGhlciB0aGFuIGhhdmluZyB0byBkbyBhIGZ1bGwgV2luZG93cwotCSAgYm9vdCBmaXJzdCBiZWZvcmUgcmVib290aW5nIGludG8gTGludXggYW5kIHdlIHdpbGwgcmVjb2duaXplIHN1Y2ggYQotCSAgam91cm5hbCBhbmQgZW1wdHkgaXQgYXMgaXQgaXMgY2xlYW4gYnkgZGVmaW5pdGlvbi4gIE5vdGUsIHRoaXMgb25seQotCSAgd29ya3MgaWYgY2hrZHNrIGxlZnQgdGhlIGpvdXJuYWwgaW4gYW4gb2J2aW91c2x5IGNsZWFuIHN0YXRlLgotCS0gU3VwcG9ydCBqb3VybmFscyAoJExvZ0ZpbGUpIHdpdGggb25seSBvbmUgcmVzdGFydCBwYWdlIGFzIHdlbGwgYXMKLQkgIGpvdXJuYWxzIHdpdGggdHdvIGRpZmZlcmVudCByZXN0YXJ0IHBhZ2VzLiAgV2Ugc2FuaXR5IGNoZWNrIGJvdGggYW5kCi0JICBlaXRoZXIgdXNlIHRoZSBvbmx5IHNhbmUgb25lIG9yIHRoZSBtb3JlIHJlY2VudCBvbmUgb2YgdGhlIHR3byBpbiB0aGUKLQkgIGNhc2UgdGhhdCBib3RoIGFyZSB2YWxpZC4KLQktIEFkZCBmcy9udGZzL21hbGxvYy5oOjpudGZzX21hbGxvY19ub2ZzX25vZmFpbCgpIHdoaWNoIGlzIGFuYWxvZ291cyB0bwotCSAgbnRmc19tYWxsb2Nfbm9mcygpIGJ1dCBpdCBwZXJmb3JtcyBhbGxvY2F0aW9ucyB3aXRoIF9fR0ZQX05PRkFJTCBhbmQKLQkgIGhlbmNlIGNhbm5vdCBmYWlsLgotCS0gVXNlIG50ZnNfbWFsbG9jX25vZnNfbm9mYWlsKCkgaW4gdGhlIHR3byBjcml0aWNhbCByZWdpb25zIGluCi0JICBmcy9udGZzL3J1bmxpc3QuYzo6bnRmc19ydW5saXN0c19tZXJnZSgpLiAgVGhpcyBtZWFucyB3ZSBubyBsb25nZXIKLQkgIG5lZWQgdG8gcGFuaWMoKSBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscyBhcyBpdCBub3cgY2Fubm90IGZhaWwuCi0JLSBGaXggdHdvIG5hc3R5IHJ1bmxpc3QgbWVyZ2luZyBidWdzIHRoYXQgaGFkIGdvbmUgdW5ub3RpY2VkIHNvIGZhci4KLQkgIFRoYW5rcyB0byBTdGVmYW5vIFBpY2Vybm8gZm9yIHRoZSBidWcgcmVwb3J0LgotCS0gUmVtb3ZlIHR3byBib2d1cyBCVUdfT04oKXMgZnJvbSBmcy9udGZzL21mdC5jLgotCS0gRml4IGhhbmRsaW5nIG9mIHZhbGlkIGJ1dCBlbXB0eSBtYXBwaW5nIHBhaXJzIGFycmF5IGluCi0JICBmcy9udGZzL3J1bmxpc3QuYzo6bnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoKS4KLQktIFJlcG9ydCB1bnJlcHJlc2VudGFibGUgaW5vZGVzIGR1cmluZyBudGZzX3JlYWRkaXIoKSBhcyBLRVJOX1dBUk5JTkcKLQkgIG1lc3NhZ2VzIGFuZCBpbmNsdWRlIHRoZSBpbm9kZSBudW1iZXIuICBUaGFua3MgdG8gWXVyYSBQYWtodWNoaXkgZm9yCi0JICBwb2ludGluZyB0aGlzIG91dC4KLQktIENoYW5nZSBudGZzX3JsX3RydW5jYXRlX25vbG9jaygpIHRvIHRocm93IGF3YXkgdGhlIHJ1bmxpc3QgaWYgdGhlIG5ldwotCSAgbGVuZ3RoIGlzIHplcm8uCi0JLSBBZGQgcnVubGlzdC5baGNdOjpudGZzX3JsX3B1bmNoX25vbG9jaygpIHdoaWNoIHB1bmNoZXMgYSBjYWxsZXIKLQkgIHNwZWNpZmllZCBob2xlIGludG8gYSBydW5saXN0LgotCS0gRml4IGEgYnVnIGluIGZzL250ZnMvaW5kZXguYzo6bnRmc19pbmRleF9sb29rdXAoKS4gIFdoZW4gdGhlIHJldHVybmVkCi0JICBpbmRleCBlbnRyeSBpcyBpbiB0aGUgaW5kZXggcm9vdCwgd2UgZm9yZ290IHRvIHNldCB0aGUgQGlyIHBvaW50ZXIgaW4KLQkgIHRoZSBpbmRleCBjb250ZXh0LiAgVGhhbmtzIHRvIFl1cmEgUGFraHVjaGl5IGZvciBmaW5kaW5nIHRoaXMgYnVnLgotCS0gUmVtb3ZlIGJvZ3VzIHNldHRpbmcgb2YgUGFnZUVycm9yIGluIG50ZnNfcmVhZF9jb21wcmVzc2VkX2Jsb2NrKCkuCi0JLSBBZGQgZnMvbnRmcy9hdHRyaWIuW2hjXTo6bnRmc19yZXNpZGVudF9hdHRyX3ZhbHVlX3Jlc2l6ZSgpLgotCS0gRml4IGEgYnVnIGluIG50ZnNfbWFwX3J1bmxpc3Rfbm9sb2NrKCkgd2hlcmUgd2UgZm9yZ290IHRvIHByb3RlY3QKLQkgIGFjY2VzcyB0byB0aGUgYWxsb2NhdGVkIHNpemUgaW4gdGhlIG50ZnMgaW5vZGUgd2l0aCB0aGUgc2l6ZSBsb2NrLgotCS0gRml4IG50ZnNfYXR0cl92Y25fdG9fbGNuX25vbG9jaygpIGFuZCBudGZzX2F0dHJfZmluZF92Y25fbm9sb2NrKCkgdG8KLQkgIHJldHVybiBMQ05fRU5PRU5UIHdoZW4gdGhlcmUgaXMgbm8gcnVubGlzdCBhbmQgdGhlIGFsbG9jYXRlZCBzaXplIGlzCi0JICB6ZXJvLgotCS0gRml4IGxvYWRfYXR0cmlidXRlX2xpc3QoKSB0byBoYW5kbGUgdGhlIGNhc2Ugb2YgYSBOVUxMIHJ1bmxpc3QuCi0JLSBGaXggaGFuZGxpbmcgb2Ygc3BhcnNlIGF0dHJpYnV0ZXMgaW4gbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KCkuCi0JLSBBZGQgQlVHKCkgY2hlY2tzIHRvIG50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudCgpIGFuZCBudGZzX2F0dHJfc2V0KCkKLQkgIHRvIGVuc3VyZSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgbmV2ZXIgY2FsbGVkIGZvciBjb21wcmVzc2VkIG9yCi0JICBlbmNyeXB0ZWQgYXR0cmlidXRlcy4KLQktIEZpeCBjbHVzdGVyIChkZSlhbGxvY2F0b3JzIHRvIHdvcmsgd2hlbiB0aGUgcnVubGlzdCBpcyBOVUxMIGFuZCBtb3JlCi0JICBpbXBvcnRhbnRseSB0byB0YWtlIGEgbG9ja2VkIHJ1bmxpc3QgcmF0aGVyIHRoYW4gdGhlbSBsb2NraW5nIGl0Ci0JICB3aGljaCBsZWFkcyB0byBsb2NrIHJldmVyc2FsLgotCS0gVHJ1bmNhdGUge2EsYyxtfXRpbWUgdG8gdGhlIG50ZnMgc3VwcG9ydGVkIHRpbWUgZ3JhbnVsYXJpdHkgd2hlbgotCSAgdXBkYXRpbmcgdGhlIHRpbWVzIGluIHRoZSBpbm9kZSBpbiBudGZzX3NldGF0dHIoKS4KLQktIEZpeHVwIGhhbmRsaW5nIG9mIHNwYXJzZSwgY29tcHJlc3NlZCwgYW5kIGVuY3J5cHRlZCBhdHRyaWJ1dGVzIGluCi0JICBmcy9udGZzL2lub2RlLmM6Om50ZnNfcmVhZF9sb2NrZWRfeyxhdHRyXyxpbmRleF99aW5vZGUoKSwKLQkgIGZzL250ZnMvYW9wcy5jOjpudGZzX3tyZWFkLHdyaXRlfXBhZ2UoKS4KLQktIE1ha2UgbnRmc193cml0ZV9ibG9jaygpIG5vdCBpbnN0YW50aWF0ZSBzcGFyc2UgYmxvY2tzIGlmIHRoZXkgY29udGFpbgotCSAgb25seSB6ZXJvZXMuCi0JLSBPcHRpbWl6ZSBmcy9udGZzL2FvcHMuYzo6bnRmc193cml0ZV9ibG9jaygpIGJ5IGV4dGVuZGluZyB0aGUgcGFnZQotCSAgbG9jayBwcm90ZWN0aW9uIG92ZXIgdGhlIGJ1ZmZlciBzdWJtaXNzaW9uIGZvciBpL28gd2hpY2ggYWxsb3dzIHRoZQotCSAgcmVtb3ZhbCBvZiB0aGUgZ2V0X2JoKCkvcHV0X2JoKCkgcGFpcnMgZm9yIGVhY2ggYnVmZmVyLgotCS0gRml4IGZzL250ZnMvYW9wcy5jOjpudGZzX3tyZWFkLHdyaXRlfV9ibG9jaygpIHRvIGhhbmRsZSB0aGUgY2FzZQotCSAgd2hlcmUgYSBjb25jdXJyZW50IHRydW5jYXRlIGhhcyB0cnVuY2F0ZWQgdGhlIHJ1bmxpc3QgdW5kZXIgb3VyIGZlZXQuCi0JLSBGaXggcGFnZV9oYXNfYnVmZmVycygpL3BhZ2VfYnVmZmVycygpIGhhbmRsaW5nIGluIGZzL250ZnMvYW9wcy5jLgotCS0gSW4gZnMvbnRmcy9hb3BzLmM6Om50ZnNfZW5kX2J1ZmZlcl9hc3luY19yZWFkKCksIHVzZSBhIGJpdCBzcGluIGxvY2sKLQkgIGluIHRoZSBmaXJzdCBidWZmZXIgaGVhZCBpbnN0ZWFkIG9mIGEgZHJpdmVyIGdsb2JhbCBzcGluIGxvY2sgdG8KLQkgIGltcHJvdmUgc2NhbGFiaWxpdHkuCi0JLSBNaW5vciBmaXggdG8gZXJyb3IgaGFuZGxpbmcgYW5kIGVycm9yIG1lc3NhZ2UgZGlzcGxheSBpbgotCSAgZnMvbnRmcy9hb3BzLmM6Om50ZnNfcHJlcGFyZV9ub25yZXNpZGVudF93cml0ZSgpLgotCS0gQ2hhbmdlIHRoZSBtb3VudCBvcHRpb25zIHt1LGYsZH1tYXNrIHRvIGFsd2F5cyBwYXJzZSB0aGUgbnVtYmVyIGFzCi0JICBhbiBvY3RhbCBudW1iZXIgdG8gY29uZm9ybSB0byBob3cgY2htb2QoMSkgd29ya3MsIHRvby4gIFRoYW5rcyB0bwotCSAgR2l1c2VwcGUgQmlsb3R0YSBhbmQgSG9yc3Qgdm9uIEJyYW5kIGZvciBwb2ludGluZyBvdXQgdGhlIGVycm9ycyBvZgotCSAgbXkgd2F5cy4KLQktIEZpeCB2YXJpb3VzIGJ1Z3MgaW4gdGhlIHJ1bmxpc3QgbWVyZ2luZyBjb2RlLiAgKEJhc2VkIG9uIGxpYm50ZnMKLQkgIGNoYW5nZXMgYnkgUmljaGFyZCBSdXNzb24uKQotCS0gRml4IHNwYXJzZSB3YXJuaW5ncyB0aGF0IGhhdmUgY3JlcHQgaW4gb3ZlciB0aW1lLgotCS0gQ2hhbmdlIG50ZnNfY2x1c3Rlcl9mcmVlKCkgdG8gcmVxdWlyZSBhIHdyaXRlIGxvY2tlZCBydW5saXN0IG9uIGVudHJ5Ci0JICBzaW5jZSB3ZSBvdGhlcndpc2UgZ2V0IGludG8gYSBsb2NrIHJldmVyc2FsIGRlYWRsb2NrIGlmIGEgcmVhZCBsb2NrZWQKLQkgIHJ1bmxpc3QgaXMgcGFzc2VkIGluLiBJbiB0aGUgcHJvY2VzcyBhbHNvIGNoYW5nZSBpdCB0byB0YWtlIGFuIG50ZnMKLQkgIGlub2RlIGluc3RlYWQgb2YgYSB2ZnMgaW5vZGUgYXMgcGFyYW1ldGVyLgotCS0gRml4IHRoZSBkZWZpbml0aW9uIG9mIHRoZSBDSEtEIG50ZnMgcmVjb3JkIG1hZ2ljLiAgSXQgaGFkIGFuIG9mZiBieQotCSAgdHdvIGVycm9yIGNhdXNpbmcgaXQgdG8gYmUgQ0hLQiBpbnN0ZWFkIG9mIENIS0QuCi0JLSBGaXggYSBzdHVwaWQgYnVnIGluIF9fbnRmc19iaXRtYXBfc2V0X2JpdHNfaW5fcnVuKCkgd2hpY2ggY2F1c2VkIHRoZQotCSAgY291bnQgdG8gYmVjb21lIG5lZ2F0aXZlIGFuZCBoZW5jZSB3ZSBoYWQgYSB3aWxkIG1lbXNldCgpIHNjcmliYmxpbmcKLQkgIGFsbCBvdmVyIHRoZSBzeXN0ZW0ncyByYW0uCi0KLTIuMS4yMyAtIEltcGxlbWVudCBleHRlbnNpb24gb2YgcmVzaWRlbnQgZmlsZXMgYW5kIG1ha2Ugd3JpdGluZyBzYWZlIGFzIHdlbGwgYXMKLQkgbWFueSBidWcgZml4ZXMsIGNsZWFudXBzLCBhbmQgZW5oYW5jZW1lbnRzLi4uCi0KLQktIEFkZCBwcmludGsgcmF0ZSBsaW1pdGluZyBmb3IgbnRmc193YXJuaW5nKCkgYW5kIG50ZnNfZXJyb3IoKSB3aGVuCi0JICBjb21waWxlZCB3aXRob3V0IGRlYnVnLiAgVGhpcyBhdm9pZHMgYSBwb3NzaWJsZSBkZW5pYWwgb2Ygc2VydmljZQotCSAgYXR0YWNrLiAgVGhhbmtzIHRvIENhcmwtRGFuaWVsIEhhaWxmaW5nZXIgZnJvbSBTdVNFIGZvciBwb2ludGluZyB0aGlzCi0JICBvdXQuCi0JLSBGaXggY29tcGlsYXRpb24gd2FybmluZ3Mgb24gaWE2NC4gIChSYW5keSBEdW5sYXApCi0JLSBVc2UgaV9zaXplX3tyZWFkLHdyaXRlfSgpIGluc3RlYWQgb2YgcmVhZGluZyBpX3NpemUgYnkgaGFuZCBhbmQgY2FjaGUKLQkgIHRoZSB2YWx1ZSB3aGVyZSBhcHJvcHJpYXRlLgotCS0gQWRkIHNpemVfbG9jayB0byB0aGUgbnRmc19pbm9kZSBzdHJ1Y3R1cmUuICBUaGlzIGlzIGFuIHJ3IHNwaW5sb2NrCi0JICBhbmQgaXQgbG9ja3MgYWdhaW5zdCBhY2Nlc3MgdG8gdGhlIGlub2RlIHNpemVzLiAgTm90ZSwgLT5zaXplX2xvY2sKLQkgIGlzIGFsc28gYWNjZXNzZWQgZnJvbSBpcnEgY29udGV4dCBzbyB5b3UgbXVzdCB1c2UgdGhlIF9pcnFzYXZlIGFuZAotCSAgX2lycXJlc3RvcmUgbG9jayBhbmQgdW5sb2NrIGZ1bmN0aW9ucywgcmVzcGVjdGl2ZWx5LiAgUHJvdGVjdCBhbGwKLQkgIGFjY2Vzc2VzIHRvIGFsbG9jYXRlZF9zaXplLCBpbml0aWFsaXplZF9zaXplLCBhbmQgY29tcHJlc3NlZF9zaXplLgotCS0gTWlub3Igb3B0aW1pemF0aW9uIHRvIGZzL250ZnMvc3VwZXIuYzo6bnRmc19zdGF0ZnMoKSBhbmQgaXRzIGhlbHBlcnMuCi0JLSBJbXBsZW1lbnQgZXh0ZW5zaW9uIG9mIHJlc2lkZW50IGZpbGVzIGluIHRoZSByZWd1bGFyIGZpbGUgd3JpdGUgY29kZQotCSAgcGF0aHMgKGZzL250ZnMvYW9wcy5jOjpudGZzX3twcmVwYXJlLGNvbW1pdH1fd3JpdGUoKSkuICBBdCBwcmVzZW50Ci0JICB0aGlzIG9ubHkgd29ya3MgdW50aWwgdGhlIGRhdGEgYXR0cmlidXRlIGJlY29tZXMgdG9vIGJpZyBmb3IgdGhlIG1mdAotCSAgcmVjb3JkIGFmdGVyIHdoaWNoIHdlIGFib3J0IHRoZSB3cml0ZSByZXR1cm5pbmcgLUVPUE5PVFNVUFAgZnJvbQotCSAgbnRmc19wcmVwYXJlX3dyaXRlKCkuCi0JLSBBZGQgZGlzYWJsZV9zcGFyc2UgbW91bnQgb3B0aW9uIHRvZ2V0aGVyIHdpdGggYSBwZXIgdm9sdW1lIHNwYXJzZQotCSAgZW5hYmxlIGJpdCB3aGljaCBpcyBzZXQgYXBwcm9wcmlhdGVseSBhbmQgYSBwZXIgaW5vZGUgc3BhcnNlIGRpc2FibGUKLQkgIGJpdCB3aGljaCBpcyBwcmVzZXQgb24gc29tZSBzeXN0ZW0gZmlsZSBpbm9kZXMgYXMgYXBwcm9wcmlhdGUuCi0JLSBFbmZvcmNlIHRoYXQgc3BhcnNlIHN1cHBvcnQgaXMgZGlzYWJsZWQgb24gTlRGUyB2b2x1bWVzIHByZSAzLjAuCi0JLSBGaXggYSBidWcgaW4gZnMvbnRmcy9ydW5saXN0LmM6Om50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKCkgaW4KLQkgIHRoZSBjcmVhdGlvbiBvZiB0aGUgdW5tYXBwZWQgcnVubGlzdCBlbGVtZW50IGZvciB0aGUgYmFzZSBhdHRyaWJ1dGUKLQkgIGV4dGVudC4KLQktIFNwbGl0IG50ZnNfbWFwX3J1bmxpc3QoKSBpbnRvIG50ZnNfbWFwX3J1bmxpc3QoKSBhbmQgYSBub24tbG9ja2luZwotCSAgaGVscGVyIG50ZnNfbWFwX3J1bmxpc3Rfbm9sb2NrKCkgd2hpY2ggaXMgdXNlZCBieSBudGZzX21hcF9ydW5saXN0KCkuCi0JICBUaGlzIGFsbG93cyB1cyB0byBtYXAgcnVubGlzdCBmcmFnbWVudHMgd2l0aCB0aGUgcnVubGlzdCBsb2NrIGFscmVhZHkKLQkgIGhlbGQgd2l0aG91dCBoYXZpbmcgdG8gZHJvcCBhbmQgcmVhY3F1aXJlIGl0IGFyb3VuZCB0aGUgY2FsbC4gIEFkYXB0Ci0JICBhbGwgY2FsbGVycy4KLQktIENoYW5nZSBudGZzX2ZpbmRfdmNuKCkgdG8gbnRmc19maW5kX3Zjbl9ub2xvY2soKSB3aGljaCB0YWtlcyBhIGxvY2tlZAotCSAgcnVubGlzdC4gIFRoaXMgYWxsb3dzIHVzIHRvIGZpbmQgcnVubGlzdCBlbGVtZW50cyB3aXRoIHRoZSBydW5saXN0Ci0JICBsb2NrIGFscmVhZHkgaGVsZCB3aXRob3V0IGhhdmluZyB0byBkcm9wIGFuZCByZWFjcXVpcmUgaXQgYXJvdW5kIHRoZQotCSAgY2FsbC4gIEFkYXB0IGFsbCBjYWxsZXJzLgotCS0gQ2hhbmdlIHRpbWUgdG8gdTY0IGluIHRpbWUuaDo6bnRmczJ1dGMoKSBhcyBpdCBvdGhlcndpc2UgZ2VuZXJhdGVzIGEKLQkgIHdhcm5pbmcgaW4gdGhlIGRvX2RpdigpIGNhbGwgb24gc3BhcmMzMi4gIFRoYW5rcyB0byBNZWVsaXMgUm9vcyBmb3IKLQkgIHRoZSByZXBvcnQgYW5kIGFuYWx5c2lzIG9mIHRoZSB3YXJuaW5nLgotCS0gRml4IGEgbmFzdHkgcnVubGlzdCBtZXJnZSBidWcgd2hlbiBtZXJnaW5nIHR3byBob2xlcy4KLQktIFNldCB0aGUgbnRmc19pbm9kZS0+YWxsb2NhdGVkX3NpemUgdG8gdGhlIHJlYWwgYWxsb2NhdGVkIHNpemUgaW4gdGhlCi0JICBtZnQgcmVjb3JkIGZvciByZXNpZGVudCBhdHRyaWJ1dGVzIChmcy9udGZzL2lub2RlLmMpLgotCS0gU21hbGwgcmVhZGFiaWxpdHkgY2xlYW51cCB0byB1c2UgImEiIGluc3RlYWQgb2YgImN0eC0+YXR0ciIKLQkgIGV2ZXJ5d2hlcmUgKGZzL250ZnMvaW5vZGUuYykuCi0JLSBNYWtlIGZzL250ZnMvbmFtZWkuYzo6bnRmc19nZXRfe3BhcmVudCxkZW50cnl9IHN0YXRpYyBhbmQgbW92ZSB0aGUKLQkgIGRlZmluaXRpb24gb2YgbnRmc19leHBvcnRfb3BzIGZyb20gZnMvbnRmcy9zdXBlci5jIHRvIG5hbWVpLmMuICBBbHNvLAotCSAgZGVjbGFyZSBudGZzX2V4cG9ydF9vcHMgaW4gZnMvbnRmcy9udGZzLmguCi0JLSBDb3JyZWN0IHNwYXJzZSBmaWxlIGhhbmRsaW5nLiAgVGhlIGNvbXByZXNzZWQgdmFsdWVzIG5lZWQgdG8gYmUKLQkgIGNoZWNrZWQgYW5kIHNldCBpbiB0aGUgbnRmcyBpbm9kZSBhcyBkb25lIGZvciBjb21wcmVzc2VkIGZpbGVzIGFuZAotCSAgdGhlIGNvbXByZXNzZWQgc2l6ZSBuZWVkcyB0byBiZSB1c2VkIGZvciB2ZnMgaW5vZGUtPmlfYmxvY2tzIGluc3RlYWQKLQkgIG9mIHRoZSBhbGxvY2F0ZWQgc2l6ZSwgYWdhaW4sIGFzIGRvbmUgZm9yIGNvbXByZXNzZWQgZmlsZXMuCi0JLSBBZGQgQVRfRUEgaW4gYWRkaXRpb24gdG8gQVRfREFUQSB0byB3aGl0ZWxpc3QgZm9yIGJlaW5nIGFsbG93ZWQgdG8gYmUKLQkgIG5vbi1yZXNpZGVudCBpbiBmcy9udGZzL2F0dHJpYi5jOjpudGZzX2F0dHJfY2FuX2JlX25vbl9yZXNpZGVudCgpLgotCS0gQWRkIGZzL250ZnMvYXR0cmliLmM6Om50ZnNfYXR0cl92Y25fdG9fbGNuX25vbG9jaygpIHVzZWQgYnkgdGhlIG5ldwotCSAgd3JpdGUgY29kZS4KLQktIEZpeCBidWcgaW4gZnMvbnRmcy9hdHRyaWIuYzo6bnRmc19maW5kX3Zjbl9ub2xvY2soKSB3aGVyZSBhZnRlcgotCSAgZHJvcHBpbmcgdGhlIHJlYWQgbG9jayBhbmQgdGFraW5nIHRoZSB3cml0ZSBsb2NrIHdlIHdlcmUgbm90IGNoZWNraW5nCi0JICB3aGV0aGVyIHNvbWVvbmUgZWxzZSBkaWQgbm90IGFscmVhZHkgZG8gdGhlIHdvcmsgd2Ugd2FudGVkIHRvIGRvLgotCS0gUmVuYW1lIGZzL250ZnMvYXR0cmliLmM6Om50ZnNfZmluZF92Y25fbm9sb2NrKCkgdG8KLQkgIG50ZnNfYXR0cl9maW5kX3Zjbl9ub2xvY2soKSBhbmQgdXBkYXRlIGFsbCBjYWxsZXJzLgotCS0gQWRkIGZzL250ZnMvYXR0cmliLltoY106Om50ZnNfYXR0cl9tYWtlX25vbl9yZXNpZGVudCgpLgotCS0gRml4IHNpZ24gb2YgdmFyaW91cyBlcnJvciByZXR1cm4gdmFsdWVzIHRvIGJlIG5lZ2F0aXZlIGluCi0JICBmcy9udGZzL2xjbmFsbG9jLmMuCi0JLSBNb2RpZnkgLT5yZWFkcGFnZSBhbmQgLT53cml0ZXBhZ2UgKGZzL250ZnMvYW9wcy5jKSBzbyB0aGV5IGRldGVjdCBhbmQKLQkgIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhbiBhdHRyaWJ1dGUgaXMgY29udmVydGVkIGZyb20gcmVzaWRlbnQgdG8KLQkgIG5vbi1yZXNpZGVudCBieSBhIGNvbmN1cnJlbnQgZmlsZSB3cml0ZS4KLQktIFJlbW92ZSBjaGVja3MgZm9yIE5VTEwgYmVmb3JlIGNhbGxpbmcga2ZyZWUoKSBzaW5jZSBrZnJlZSgpIGRvZXMgdGhlCi0JICBjaGVja2luZyBpdHNlbGYuICAoSmVzcGVyIEp1aGwpCi0JLSBTb21lIHV0aWxpdGllcyBtb2RpZnkgdGhlIGJvb3Qgc2VjdG9yIGJ1dCBkbyBub3QgdXBkYXRlIHRoZSBjaGVja3N1bS4KLQkgIFRodXMsIHJlbGF4IHRoZSBjaGVja2luZyBpbiBmcy9udGZzL3N1cGVyLmM6OmlzX2Jvb3Rfc2VjdG9yX250ZnMoKSB0bwotCSAgb25seSBlbWl0IGEgd2FybmluZyB3aGVuIHRoZSBjaGVja3N1bSBpcyBpbmNvcnJlY3QgcmF0aGVyIHRoYW4KLQkgIHJlZnVzaW5nIHRoZSBtb3VudC4gIFRoYW5rcyB0byBCZXJuZCBDYXNpbWlyIGZvciBwb2ludGluZyB0aGlzCi0JICBwcm9ibGVtIG91dC4KLQktIFVwZGF0ZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiBoYW5kbGluZy4KLQktIEFkZCBOVEZTX01BWF9DTFVTVEVSX1NJWkUgYW5kIE5URlNfTUFYX1BBR0VTX1BFUl9DTFVTVEVSIGNvbnN0YW50cy4KLQktIFVzZSBOVEZTX01BWF9DTFVTVEVSX1NJWkUgaW4gc3VwZXIuYyBpbnN0ZWFkIG9mIGhhcmQgY29kaW5nIDB4MTAwMDAuCi0JLSBVc2UgTUFYX0JVRl9QRVJfUEFHRSBpbnN0ZWFkIG9mIHZhcmlhYmxlIHNpemVkIGFycmF5IGFsbG9jYXRpb24gZm9yCi0JICBiZXR0ZXIgY29kZSBnZW5lcmF0aW9uIGFuZCBvbmUgbGVzcyBzcGFyc2Ugd2FybmluZyBpbiBmcy9udGZzL2FvcHMuYy4KLQktIFJlbW92ZSBzcHVyaW91cyB2b2lkIHBvaW50ZXIgY2FzdHMgZnJvbSBmcy9udGZzLy4gIChQZWtrYSBFbmJlcmcpCi0JLSBVc2UgQzk5IHN0eWxlIHN0cnVjdHVyZSBpbml0aWFsaXphdGlvbiBhZnRlciBtZW1vcnkgYWxsb2NhdGlvbiB3aGVyZQotCSAgcG9zc2libGUgKGZzL250ZnMve2F0dHJpYi5jLGluZGV4LmMsc3VwZXIuY30pLiAgVGhhbmtzIHRvIEFsIFZpcm8gYW5kCi0JICBQZWtrYSBFbmJlcmcuCi0JLSBTdGFtcCB0aGUgdHJhbnNhY3Rpb24gbG9nICgkVXNuSnJubCksIGFrYSB1c2VyIHNwYWNlIGpvdXJuYWwsIGlmIGl0Ci0JICBpcyBhY3RpdmUgb24gdGhlIHZvbHVtZSBhbmQgd2UgYXJlIG1vdW50aW5nIHJlYWQtd3JpdGUgb3IgcmVtb3VudGluZwotCSAgZnJvbSByZWFkLW9ubHkgdG8gcmVhZC13cml0ZS4KLQktIEZpeCBhIGJ1ZyBpbiBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMgZXJyb3IgcmVjb3ZlcnkgY29kZSBwYXRocyB3aGVyZQotCSAgaWYgdGhlIHJ1bmxpc3Qgd2FzIG5vdCBtYXBwZWQgYXQgYWxsIGFuZCBhIG1hcHBpbmcgZXJyb3Igb2NjdXJlZCB3ZQotCSAgd291bGQgbGVhdmUgdGhlIHJ1bmxpc3QgbG9ja2VkIG9uIGV4aXQgdG8gdGhlIGZ1bmN0aW9uIHNvIHRoYXQgdGhlCi0JICBuZXh0IGFjY2VzcyB0byB0aGUgc2FtZSBmaWxlIHdvdWxkIHRyeSB0byB0YWtlIHRoZSBsb2NrIGFuZCBkZWFkbG9jay4KLQktIERldGVjdCB0aGUgY2FzZSB3aGVuIFdpbmRvd3MgaGFzIGJlZW4gc3VzcGVuZGVkIHRvIGRpc2sgb24gdGhlIHZvbHVtZQotCSAgdG8gYmUgbW91bnRlZCBhbmQgaWYgdGhpcyBpcyB0aGUgY2FzZSBkbyBub3QgYWxsb3cgKHJlKW1vdW50aW5nCi0JICByZWFkLXdyaXRlLiAgVGhpcyBpcyBkb25lIGJ5IHBhcnNpbmcgaGliZXJmaWwuc3lzIGlmIHByZXNlbnQuCi0JLSBGaXggc2V2ZXJhbCBvY2N1cmVuY2VzIG9mIGEgYnVnIHdoZXJlIHdlIHdvdWxkIHBlcmZvcm0gJ3ZhciAmIH5jb25zdCcKLQkgIHdpdGggYSA2NC1iaXQgdmFyaWFibGUgYW5kIGEgaW50LCBpLmUuIDMyLWJpdCwgY29uc3RhbnQuICBUaGlzIGNhdXNlcwotCSAgdGhlIGhpZ2hlciBvcmRlciAzMi1iaXRzIG9mIHRoZSA2NC1iaXQgdmFyaWFibGUgdG8gYmUgemVyb2VkLiAgVG8gZml4Ci0JICB0aGlzIGNhc3QgdGhlICdjb25zdCcgdG8gdGhlIHNhbWUgNjQtYml0IHR5cGUgYXMgJ3ZhcicuCi0JLSBDaGFuZ2UgdGhlIHJ1bmxpc3QgdGVybWluYXRvciBvZiB0aGUgbmV3bHkgYWxsb2NhdGVkIGNsdXN0ZXIocykgdG8KLQkgIExDTl9FTk9FTlQgaW4gbnRmc19hdHRyX21ha2Vfbm9uX3Jlc2lkZW50KCkuICBPdGhlcndpc2UgdGhlIHJ1bmxpc3QKLQkgIGNvZGUgZ2V0cyBjb25mdXNlZC4KLQktIEFkZCBhbiBleHRyYSBwYXJhbWV0ZXIgQGxhc3RfdmNuIHRvIG50ZnNfZ2V0X3NpemVfZm9yX21hcHBpbmdfcGFpcnMoKQotCSAgYW5kIG50ZnNfbWFwcGluZ19wYWlyc19idWlsZCgpIHRvIGFsbG93IHRoZSBydW5saXN0IGVuY29kaW5nIHRvIGJlCi0JICBwYXJ0aWFsIHdoaWNoIGlzIGRlc2lyYWJsZSB3aGVuIGZpbGxpbmcgaG9sZXMgaW4gc3BhcnNlIGF0dHJpYnV0ZXMuCi0JICBVcGRhdGUgYWxsIGNhbGxlcnMuCi0JLSBDaGFuZ2UgbnRmc19tYXBfcnVubGlzdF9ub2xvY2soKSB0byBvbmx5IGRlY29tcHJlc3MgdGhlIG1hcHBpbmcgcGFpcnMKLQkgIGlmIHRoZSByZXF1ZXN0ZWQgdmNuIGlzIGluc2lkZSBpdC4gIE90aGVyd2lzZSB3ZSBnZXQgaW50byBwcm9ibGVtcwotCSAgd2hlbiB3ZSB0cnkgdG8gbWFwIGFuIG91dCBvZiBib3VuZHMgdmNuIGJlY2F1c2Ugd2UgdGhlbiB0cnkgdG8gbWFwCi0JICB0aGUgYWxyZWFkeSBtYXBwZWQgcnVubGlzdCBmcmFnbWVudCB3aGljaCBjYXVzZXMKLQkgIG50ZnNfbWFwcGluZ19wYWlyc19kZWNvbXByZXNzKCkgdG8gZmFpbCBhbmQgcmV0dXJuIGVycm9yLiAgVXBkYXRlCi0JICBudGZzX2F0dHJfZmluZF92Y25fbm9sb2NrKCkgYWNjb3JkaW5nbHkuCi0JLSBGaXggYSBuYXN0eSBkZWFkbG9jayB0aGF0IGFwcGVhcmVkIGluIHJlY2VudCBrZXJuZWxzLgotCSAgVGhlIHNpdHVhdGlvbjogVkZTIGlub2RlIFggb24gYSBtb3VudGVkIG50ZnMgdm9sdW1lIGlzIGRpcnR5LiAgRm9yCi0JICBzYW1lIGlub2RlIFgsIHRoZSBudGZzX2lub2RlIGlzIGRpcnR5IGFuZCB0aHVzIGNvcnJlc3BvbmRpbmcgb24tZGlzawotCSAgaW5vZGUsIGkuZS4gbWZ0IHJlY29yZCwgd2hpY2ggaXMgaW4gYSBkaXJ0eSBQQUdFX0NBQ0hFX1BBR0UgYmVsb25naW5nCi0JICB0byB0aGUgdGFibGUgb2YgaW5vZGVzLCBpLmUuICRNRlQsIGlub2RlIDAuCi0JICBXaGF0IGhhcHBlbnM6Ci0JICBQcm9jZXNzIDE6IHN5c19zeW5jKCkvdW1vdW50KCkvd2hhdGV2ZXIuLi4gIGNhbGxzCi0JICBfX3N5bmNfc2luZ2xlX2lub2RlKCkgZm9yICRNRlQgLT4gZG9fd3JpdGVwYWdlcygpIC0+IHdyaXRlX3BhZ2UgZm9yCi0JICB0aGUgZGlydHkgcGFnZSBjb250YWluaW5nIHRoZSBvbi1kaXNrIGlub2RlIFgsIHRoZSBwYWdlIGlzIG5vdyBsb2NrZWQKLQkgIC0+IG50ZnNfd3JpdGVfbXN0X2Jsb2NrKCkgd2hpY2ggY2xlYXJzIFBhZ2VVcHRvZGF0ZSgpIG9uIHRoZSBwYWdlIHRvCi0JICBwcmV2ZW50IGFueW9uZSBlbHNlIGdldHRpbmcgaG9sZCBvZiBpdCB3aGlsc3QgaXQgZG9lcyB0aGUgd3JpdGUgb3V0LgotCSAgVGhpcyBpcyBuZWNlc3NhcnkgYXMgdGhlIG9uLWRpc2sgaW5vZGUgbmVlZHMgImZpeHVwcyIgYXBwbGllZCBiZWZvcmUKLQkgIHRoZSB3cml0ZSB0byBkaXNrIHdoaWNoIGFyZSByZW1vdmVkIGFnYWluIGFmdGVyIHRoZSB3cml0ZSBhbmQKLQkgIFBhZ2VVcHRvZGF0ZSBpcyB0aGVuIHNldCBhZ2Fpbi4gIEl0IHRoZW4gYW5hbHlzZXMgdGhlIHBhZ2UgbG9va2luZwotCSAgZm9yIGRpcnR5IG9uLWRpc2sgaW5vZGVzIGFuZCB3aGVuIGl0IGZpbmRzIG9uZSBpdCBjYWxscwotCSAgbnRmc19tYXlfd3JpdGVfbWZ0X3JlY29yZCgpIHRvIHNlZSBpZiBpdCBpcyBzYWZlIHRvIHdyaXRlIHRoaXMKLQkgIG9uLWRpc2sgaW5vZGUuICBUaGlzIHRoZW4gY2FsbHMgaWxvb2t1cDUoKSB0byBjaGVjayBpZiB0aGUKLQkgIGNvcnJlc3BvbmRpbmcgVkZTIGlub2RlIGlzIGluIGljYWNoZSgpLiAgVGhpcyBpbiB0dXJuIGNhbGxzIGlmaW5kKCkKLQkgIHdoaWNoIHdhaXRzIG9uIHRoZSBpbm9kZSBsb2NrIHZpYSB3YWl0X29uX2lub2RlIHdoaWxzdCBob2xkaW5nIHRoZQotCSAgZ2xvYmFsIGlub2RlX2xvY2suCi0JICBQcm9jZXNzIDI6IHBkZmx1c2ggcmVzdWx0cyBpbiBhIGNhbGwgdG8gX19zeW5jX3NpbmdsZV9pbm9kZSBmb3IgdGhlCi0JICBzYW1lIFZGUyBpbm9kZSBYIG9uIHRoZSBudGZzIHZvbHVtZS4gIFRoaXMgbG9ja3MgdGhlIGlub2RlIChJX0xPQ0spCi0JICB0aGVuIGNhbGxzIHdyaXRlLWlub2RlIC0+IG50ZnNfd3JpdGVfaW5vZGUgLT4gbWFwX21mdF9yZWNvcmQoKSAtPgotCSAgcmVhZF9jYWNoZV9wYWdlKCkgZm9yIHRoZSBwYWdlIChpbiBwYWdlIGNhY2hlIG9mIHRhYmxlIG9mIGlub2RlcwotCSAgJE1GVCwgaW5vZGUgMCkgY29udGFpbmluZyB0aGUgb24tZGlzayBpbm9kZS4gIFRoaXMgcGFnZSBoYXMKLQkgIFBhZ2VVcHRvZGF0ZSgpIGNsZWFyIGJlY2F1c2Ugb2YgUHJvY2VzcyAxIChzZWUgYWJvdmUpIHNvCi0JICByZWFkX2NhY2hlX3BhZ2UoKSBibG9ja3Mgd2hlbiBpdCB0cmllcyB0byB0YWtlIHRoZSBwYWdlIGxvY2sgZm9yIHRoZQotCSAgcGFnZSBzbyBpdCBjYW4gY2FsbCBudGZzX3JlYWRfcGFnZSgpLgotCSAgVGh1cyBQcm9jZXNzIDEgaXMgaG9sZGluZyB0aGUgcGFnZSBsb2NrIG9uIHRoZSBwYWdlIGNvbnRhaW5pbmcgdGhlCi0JICBvbi1kaXNrIGlub2RlIFggYW5kIGl0IGlzIHdhaXRpbmcgb24gdGhlIGlub2RlIFggdG8gYmUgdW5sb2NrZWQgaW4KLQkgIGlmaW5kKCkgc28gaXQgY2FuIHdyaXRlIHRoZSBwYWdlIG91dCBhbmQgdGhlbiB1bmxvY2sgdGhlIHBhZ2UuCi0JICBBbmQgUHJvY2VzcyAyIGlzIGhvbGRpbmcgdGhlIGlub2RlIGxvY2sgb24gaW5vZGUgWCBhbmQgaXMgd2FpdGluZyBmb3IKLQkgIHRoZSBwYWdlIHRvIGJlIHVubG9ja2VkIHNvIGl0IGNhbiBjYWxsIG50ZnNfcmVhZHBhZ2UoKSBvciBkaXNjb3ZlcgotCSAgdGhhdCBQcm9jZXNzIDEgc2V0IFBhZ2VVcHRvZGF0ZSgpIGFnYWluIGFuZCB1c2UgdGhlIHBhZ2UuCi0JICBUaHVzIHdlIGhhdmUgYSBkZWFkbG9jayBkdWUgdG8gaWZpbmQoKSB3YWl0aW5nIG9uIHRoZSBpbm9kZSBsb2NrLgotCSAgVGhlIHNvbHV0aW9uOiBUaGUgZml4IGlzIHRvIHVzZSB0aGUgbmV3bHkgaW50cm9kdWNlZAotCSAgaWxvb2t1cDVfbm93YWl0KCkgd2hpY2ggZG9lcyBub3Qgd2FpdCBvbiB0aGUgaW5vZGUncyBsb2NrIGFuZCBoZW5jZQotCSAgYXZvaWRzIHRoZSBkZWFkbG9jay4gIFRoaXMgaXMgc2FmZSBhcyB3ZSBkbyBub3QgY2FyZSBhYm91dCB0aGUgVkZTCi0JICBpbm9kZSBhbmQgb25seSB1c2UgdGhlIGZhY3QgdGhhdCBpdCBpcyBpbiB0aGUgVkZTIGlub2RlIGNhY2hlIGFuZCB0aGUKLQkgIGZhY3QgdGhhdCB0aGUgdmZzIGFuZCBudGZzIGlub2RlcyBhcmUgb25lIHN0cnVjdCBpbiBtZW1vcnkgdG8gZmluZAotCSAgdGhlIG50ZnMgaW5vZGUgaW4gbWVtb3J5IGlmIHByZXNlbnQuICBBbHNvLCB0aGUgbnRmcyBpbm9kZSBoYXMgaXRzCi0JICBvd24gbG9ja2luZyBzbyBpdCBkb2VzIG5vdCBtYXR0ZXIgaWYgdGhlIHZmcyBpbm9kZSBpcyBsb2NrZWQuCi0JLSBGaXggYnVnIGluIG1mdCByZWNvcmQgd3JpdGluZyB3aGVyZSB3ZSBmb3Jnb3QgdG8gc2V0IHRoZSBkZXZpY2UgaW4KLQkgIHRoZSBidWZmZXJzIHdoZW4gbWFwcGluZyB0aGVtIGFmdGVyIHRoZSBWTSBoYWQgZGlzY2FyZGVkIHRoZW0uCi0JICBUaGFua3MgdG8gTWFydGluIE1PS1JFSsOFIGZvciB0aGUgYnVnIHJlcG9ydC4KLQotMi4xLjIyIC0gTWFueSBidWcgYW5kIHJhY2UgZml4ZXMgYW5kIGVycm9yIGhhbmRsaW5nIGltcHJvdmVtZW50cy4KLQotCS0gSW1wcm92ZSBlcnJvciBoYW5kbGluZyBpbiBmcy9udGZzL2lub2RlLmM6Om50ZnNfdHJ1bmNhdGUoKS4KLQktIENoYW5nZSBmcy9udGZzL2lub2RlLmM6Om50ZnNfdHJ1bmNhdGUoKSB0byByZXR1cm4gYW4gZXJyb3IgY29kZQotCSAgaW5zdGVhZCBvZiB2b2lkIGFuZCBwcm92aWRlIGEgaGVscGVyIG50ZnNfdHJ1bmNhdGVfdmZzKCkgZm9yIHRoZQotCSAgdmZzIC0+dHJ1bmNhdGUgbWV0aG9kLgotCS0gQWRkIGEgbmV3IG50ZnMgaW5vZGUgZmxhZyBOSW5vVHJ1bmNhdGVGYWlsZWQoKSBhbmQgbW9kaWZ5Ci0JICBmcy9udGZzL2lub2RlLmM6Om50ZnNfdHJ1bmNhdGUoKSB0byBzZXQgYW5kIGNsZWFyIGl0IGFwcHJvcHJpYXRlbHkuCi0JLSBGaXggbWluX3NpemUgYW5kIG1heF9zaXplIGRlZmluaXRpb25zIGluIEFUVFJfREVGIHN0cnVjdHVyZSBpbgotCSAgZnMvbnRmcy9sYXlvdXQuaCB0byBiZSBzaWduZWQuCi0JLSBBZGQgYXR0cmlidXRlIGRlZmluaXRpb24gaGFuZGxpbmcgaGVscGVycyB0byBmcy9udGZzL2F0dHJpYi5baGNdOgotCSAgbnRmc19hdHRyX3NpemVfYm91bmRzX2NoZWNrKCksIG50ZnNfYXR0cl9jYW5fYmVfbm9uX3Jlc2lkZW50KCksIGFuZAotCSAgbnRmc19hdHRyX2Nhbl9iZV9yZXNpZGVudCgpLCB3aGljaCBpbiB0dXJuIHVzZSB0aGUgbmV3IHByaXZhdGUgaGVscGVyCi0JICBudGZzX2F0dHJfZmluZF9pbl9hdHRyZGVmKCkuCi0JLSBJbiBmcy9udGZzL2FvcHMuYzo6bWFya19udGZzX3JlY29yZF9kaXJ0eSgpLCB0YWtlIHRoZQotCSAgbWFwcGluZy0+cHJpdmF0ZV9sb2NrIGFyb3VuZCB0aGUgZGlydHlpbmcgb2YgdGhlIGJ1ZmZlciBoZWFkcwotCSAgYW5hbGFnb3VzIHRvIHRoZSB3YXkgaXQgaXMgZG9uZSBpbiBfX3NldF9wYWdlX2RpcnR5X2J1ZmZlcnMoKS4KLQktIEVuc3VyZSB0aGUgbWZ0IHJlY29yZCBzaXplIGRvZXMgbm90IGV4Y2VlZCB0aGUgUEFHRV9DQUNIRV9TSVpFIGF0Ci0JICBtb3VudCB0aW1lIGFzIHRoaXMgY2Fubm90IHdvcmsgd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbi4KLQktIENoZWNrIGZvciBsb2NhdGlvbiBvZiBhdHRyaWJ1dGUgbmFtZSBhbmQgaW1wcm92ZSBlcnJvciBoYW5kbGluZyBpbgotCSAgZ2VuZXJhbCBpbiBmcy9udGZzL2lub2RlLmM6Om50ZnNfcmVhZF9sb2NrZWRfaW5vZGUoKSBhbmQgZnJpZW5kcy4KLQktIEluIGZzL250ZnMvYW9wcy5jOjpudGZzX3dyaXRlcGFnZSgpLCBpZiB0aGUgcGFnZSBpcyBmdWxseSBvdXRzaWRlCi0JICBpX3NpemUsIGkuZS4gcmFjZSB3aXRoIHRydW5jYXRlLCBpbnZhbGlkYXRlIHRoZSBidWZmZXJzIG9uIHRoZSBwYWdlCi0JICBzbyB0aGF0IHRoZXkgYmVjb21lIGZyZWVhYmxlIGFuZCBoZW5jZSB0aGUgcGFnZSBkb2VzIG5vdCBsZWFrLgotCS0gUmVtb3ZlIHVudXNlZCBmdW5jdGlvbiBmcy9udGZzL3J1bmxpc3QuYzo6bnRmc19ybF9tZXJnZSgpLiAgKEFkcmlhbgotCSAgQnVuaykKLQktIEZpeCBzdHVwaWQgYnVnIGluIGZzL250ZnMvYXR0cmliLmM6Om50ZnNfYXR0cl9maW5kKCkgdGhhdCByZXN1bHRlZCBpbgotCSAgYSBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2UgaW4gdGhlIGVycm9yIGNvZGUgcGF0aCB3aGVuIGEgY29ycnVwdAotCSAgYXR0cmlidXRlIHdhcyBmb3VuZC4gIChUaGFua3MgdG8gRG9tZW4gUHVuY2VyIGZvciB0aGUgYnVnIHJlcG9ydC4pCi0JLSBBZGQgTU9EVUxFX1ZFUlNJT04oKSB0byBmcy9udGZzL3N1cGVyLmMuCi0JLSBNYWtlIHNldmVyYWwgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXMgc3RhdGljLiAgKEFkcmlhbiBCdW5rKQotCS0gTW9kaWZ5IGZzL250ZnMvYW9wcy5jOjptYXJrX250ZnNfcmVjb3JkX2RpcnR5KCkgc28gaXQgYWxsb2NhdGVzCi0JICBidWZmZXJzIGZvciB0aGUgcGFnZSBpZiB0aGV5IGFyZSBub3QgcHJlc2VudCBhbmQgdGhlbiBtYXJrcyB0aGUKLQkgIGJ1ZmZlcnMgYmVsb25naW5nIHRvIHRoZSBudGZzIHJlY29yZCBkaXJ0eS4gIFRoaXMgY2F1c2VzIHRoZSBidWZmZXJzCi0JICB0byBiZWNvbWUgYnVzeSBhbmQgaGVuY2UgdGhleSBhcmUgc2FmZSBmcm9tIHJlbW92YWwgdW50aWwgdGhlIHBhZ2UKLQkgIGhhcyBiZWVuIHdyaXR0ZW4gb3V0LgotCS0gRml4IHN0dXBpZCBidWcgaW4gZnMvbnRmcy9hdHRyaWIuYzo6bnRmc19leHRlcm5hbF9hdHRyX2ZpbmQoKSBpbiB0aGUKLQkgIGVycm9yIGhhbmRsaW5nIGNvZGUgcGF0aCB0aGF0IHJlc3VsdGVkIGluIGEgQlVHKCkgZHVlIHRvIHRyeWluZyB0bwotCSAgdW5tYXAgYW4gZXh0ZW50IG1mdCByZWNvcmQgd2hlbiB0aGUgbWFwcGluZyBvZiBpdCBoYWQgZmFpbGVkIGFuZCBpdAotCSAgdGh1cyB3YXMgbm90IG1hcHBlZC4gIChUaGFua3MgdG8gS2VuIE1hY0ZlcnJpbiBmb3IgdGhlIGJ1ZyByZXBvcnQuKQotCS0gRHJvcCB0aGUgcnVubGlzdCBsb2NrIGFmdGVyIHRoZSB2Y24gaGFzIGJlZW4gcmVhZCBpbgotCSAgZnMvbnRmcy9sY25hbGxvYy5jOjpfX250ZnNfY2x1c3Rlcl9mcmVlKCkuCi0JLSBSZXdyaXRlIGhhbmRsaW5nIG9mIG11bHRpIHNlY3RvciB0cmFuc2ZlciBlcnJvcnMuICBXZSBub3cgZG8gbm90IHNldAotCSAgUGFnZUVycm9yKCkgd2hlbiBzdWNoIGVycm9ycyBhcmUgZGV0ZWN0ZWQgaW4gdGhlIGFzeW5jIGkvbyBoYW5kbGVyCi0JICBmcy9udGZzL2FvcHMuYzo6bnRmc19lbmRfYnVmZmVyX2FzeW5jX3JlYWQoKS4gIEFsbCB1c2VycyBvZiBtc3QKLQkgIHByb3RlY3RlZCBhdHRyaWJ1dGVzIG5vdyBjaGVjayB0aGUgbWFnaWMgb2YgZWFjaCBudGZzIHJlY29yZCBhcyB0aGV5Ci0JICB1c2UgaXQgYW5kIGFjdCBhcHByb3ByaWF0ZWx5LiAgVGhpcyBoYXMgdGhlIGVmZmVjdCBvZiBtYWtpbmcgZXJyb3JzCi0JICBncmFudWxhciBwZXIgbnRmcyByZWNvcmQgcmF0aGVyIHRoYW4gcGVyIHBhZ2Ugd2hpY2ggc29sdmVzIHRoZSBjYXNlCi0JICB3aGVyZSB3ZSBjYW5ub3QgYWNjZXNzIGFueSBvZiB0aGUgbnRmcyByZWNvcmRzIGluIGEgcGFnZSB3aGVuIGEKLQkgIHNpbmdsZSBvbmUgb2YgdGhlbSBoYWQgYW4gbXN0IGVycm9yLiAgKFRoYW5rcyB0byBLZW4gTWFjRmVycmluIGZvcgotCSAgdGhlIGJ1ZyByZXBvcnQuKQotCS0gRml4IGVycm9yIGhhbmRsaW5nIGluIGZzL250ZnMvcXVvdGEuYzo6bnRmc19tYXJrX3F1b3Rhc19vdXRfb2ZfZGF0ZSgpCi0JICB3aGVyZSB3ZSBmYWlsZWQgdG8gcmVsZWFzZSBpX211dGV4IG9uIHRoZSAkUXVvdGEvJFEgYXR0cmlidXRlIGlub2RlLgotCS0gRml4IGJ1ZyBpbiBoYW5kbGluZyBvZiBiYWQgaW5vZGVzIGluIGZzL250ZnMvbmFtZWkuYzo6bnRmc19sb29rdXAoKS4KLQktIEFkZCBtYXBwaW5nIG9mIHVubWFwcGVkIGJ1ZmZlcnMgdG8gYWxsIHJlbWFpbmluZyBjb2RlIHBhdGhzLCBpLmUuCi0JICBmcy9udGZzL2FvcHMuYzo6bnRmc193cml0ZV9tc3RfYmxvY2soKSwgbWZ0LmM6Om50ZnNfc3luY19tZnRfbWlycm9yKCksCi0JICBhbmQgd3JpdGVfbWZ0X3JlY29yZF9ub2xvY2soKS4gIEZyb20gbm93IG9uIHdlIHJlcXVpcmUgdGhhdCB0aGUKLQkgIGNvbXBsZXRlIHJ1bmxpc3QgZm9yIHRoZSBtZnQgbWlycm9yIGlzIGFsd2F5cyBtYXBwZWQgaW50byBtZW1vcnkuCi0JLSBBZGQgY3JlYXRpb24gb2YgYnVmZmVycyB0byBmcy9udGZzL21mdC5jOjpudGZzX3N5bmNfbWZ0X21pcnJvcigpLgotCS0gSW1wcm92ZSBlcnJvciBoYW5kbGluZyBpbiBmcy9udGZzL2FvcHMuYzo6bnRmc197cmVhZCx3cml0ZX1fYmxvY2soKS4KLQktIENsZWFudXAgZnMvbnRmcy9hb3BzLmM6Om50ZnNfe3JlYWQsd3JpdGV9cGFnZSgpIHNpbmNlIHdlIGtub3cgdGhhdCBhCi0JICByZXNpZGVudCBhdHRyaWJ1dGUgd2lsbCBiZSBzbWFsbGVyIHRoYW4gYSBwYWdlIHdoaWNoIG1ha2VzIHRoZSBjb2RlCi0JICBzaW1wbGVyLiAgQWxzbyBtYWtlIHRoZSBjb2RlIG1vcmUgdG9sZXJhbnQgdG8gY29uY3VycmVudCAtPnRydW5jYXRlLgotCi0yLjEuMjEgLSBGaXggc29tZSByYWNlcyBhbmQgYnVncywgcmV3cml0ZSBtZnQgd3JpdGUgY29kZSwgYWRkIG1mdCBhbGxvY2F0b3IuCi0KLQktIEltcGxlbWVudCBleHRlbnQgbWZ0IHJlY29yZCBkZWFsbG9jYXRpb24KLQkgIGZzL250ZnMvbWZ0LmM6Om50ZnNfZXh0ZW50X21mdF9yZWNvcmRfZnJlZSgpLgotCS0gU3BsaXR0IHJ1bmxpc3QgcmVsYXRlZCBmdW5jdGlvbnMgb2ZmIGZyb20gYXR0cmliLltoY10gdG8gcnVubGlzdC5baGNdLgotCS0gQWRkIHZvbC0+bWZ0X2RhdGFfcG9zIGFuZCBpbml0aWFsaXplIGl0IGF0IG1vdW50IHRpbWUuCi0JLSBSZW5hbWUgaW5pdF9ydW5saXN0KCkgdG8gbnRmc19pbml0X3J1bmxpc3QoKSwgbnRmc192Y25fdG9fbGNuKCkgdG8KLQkgIG50ZnNfcmxfdmNuX3RvX2xjbigpLCBkZWNvbXByZXNzX21hcHBpbmdfcGFpcnMoKSB0bwotCSAgbnRmc19tYXBwaW5nX3BhaXJzX2RlY29tcHJlc3MoKSwgbnRmc19tZXJnZV9ydW5saXN0cygpIHRvCi0JICBudGZzX3J1bmxpc3RzX21lcmdlKCkgYW5kIGFkYXB0IGFsbCBjYWxsZXJzLgotCS0gQWRkIGZzL250ZnMvcnVubGlzdC5baGNdOjpudGZzX2dldF9ucl9zaWduaWZpY2FudF9ieXRlcygpLAotCSAgbnRmc19nZXRfc2l6ZV9mb3JfbWFwcGluZ19wYWlycygpLCBudGZzX3dyaXRlX3NpZ25pZmljYW50X2J5dGVzKCksCi0JICBhbmQgbnRmc19tYXBwaW5nX3BhaXJzX2J1aWxkKCksIGFkYXB0ZWQgZnJvbSBsaWJudGZzLgotCS0gTWFrZSBmcy9udGZzL2xjbmFsbG9jLmM6Om50ZnNfY2x1c3Rlcl9mcmVlX2Zyb21fcmxfbm9sb2NrKCkgbm90Ci0JICBzdGF0aWMgYW5kIGFkZCBhIGRlY2xhcmF0aW9uIGZvciBpdCB0byBsY25hbGxvYy5oLgotCS0gQWRkIGZzL250ZnMvbGNuYWxsb2MuaDo6bnRmc19jbHVzdGVyX2ZyZWVfZnJvbV9ybCgpIHdoaWNoIGlzIGEgc3RhdGljCi0JICBpbmxpbmUgd3JhcHBlciBmb3IgbnRmc19jbHVzdGVyX2ZyZWVfZnJvbV9ybF9ub2xvY2soKSB3aGljaCB0YWtlcyB0aGUKLQkgIGNsdXN0ZXIgYml0bWFwIGxvY2sgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgY2FsbC4KLQktIEFkZCBmcy9udGZzL2F0dHJpYi5baGNdOjpudGZzX2F0dHJfcmVjb3JkX3Jlc2l6ZSgpLgotCS0gSW1wbGVtZW50IHRoZSBlcXVpdmFsZW50IG9mIG1lbXNldCgpIGZvciBhbiBudGZzIGF0dHJpYnV0ZSBpbgotCSAgZnMvbnRmcy9hdHRyaWIuW2hjXTo6bnRmc19hdHRyX3NldCgpIGFuZCBzd2l0Y2gKLQkgIGZzL250ZnMvbG9nZmlsZS5jOjpudGZzX2VtcHR5X2xvZ2ZpbGUoKSB0byB1c2luZyBpdC4KLQktIFJlbW92ZSB1bm5lY2Vzc2FyeSBjYXN0cyBmcm9tIExDTl8qIGNvbnN0YW50cy4KLQktIEltcGxlbWVudCBmcy9udGZzL3J1bmxpc3QuYzo6bnRmc19ybF90cnVuY2F0ZV9ub2xvY2soKS4KLQktIEFkZCBNRlRfUkVDT1JEX09MRCBhcyBhIGNvcHkgb2YgTUZUX1JFQ09SRCBpbiBmcy9udGZzL2xheW91dC5oIGFuZAotCSAgY2hhbmdlIE1GVF9SRUNPUkQgdG8gY29udGFpbiB0aGUgTlRGUyAzLjErIHNwZWNpZmljIGZpZWxkcy4KLQktIEFkZCBhIGhlbHBlciBmdW5jdGlvbiBmcy9udGZzL2FvcHMuYzo6bWFya19udGZzX3JlY29yZF9kaXJ0eSgpIHdoaWNoCi0JICBtYXJrcyBhbGwgYnVmZmVycyBiZWxvbmdpbmcgdG8gYW4gbnRmcyByZWNvcmQgZGlydHksIGZvbGxvd2VkIGJ5Ci0JICBtYXJraW5nIHRoZSBwYWdlIHRoZSBudGZzIHJlY29yZCBpcyBpbiBkaXJ0eSBhbmQgYWxzbyBtYXJraW5nIHRoZSB2ZnMKLQkgIGlub2RlIGNvbnRhaW5pbmcgdGhlIG50ZnMgcmVjb3JkIGRpcnR5IChJX0RJUlRZX1BBR0VTKS4KLQktIFN3aXRjaCBmcy9udGZzL2luZGV4Lmg6Om50ZnNfaW5kZXhfZW50cnlfbWFya19kaXJ0eSgpIHRvIHVzaW5nIHRoZQotCSAgbmV3IGhlbHBlciBmcy9udGZzL2FvcHMuYzo6bWFya19udGZzX3JlY29yZF9kaXJ0eSgpIGFuZCByZW1vdmUgdGhlIG5vCi0JICBsb25nZXIgbmVlZGVkIGZzL250ZnMvaW5kZXguW2hjXTo6X19udGZzX2luZGV4X2VudHJ5X21hcmtfZGlydHkoKS4KLQktIE1vdmUgbnRmc197dW4sfW1hcF9wYWdlKCkgZnJvbSBudGZzLmggdG8gYW9wcy5oIGFuZCBmaXggcmVzdWx0aW5nCi0JICBpbmNsdWRlIGVycm9ycy4KLQktIE1vdmUgdGhlIHR5cGVkZWZzIGZvciBydW5saXN0X2VsZW1lbnQgYW5kIHJ1bmxpc3QgZnJvbSB0eXBlcy5oIHRvCi0JICBydW5saXN0LmggYW5kIGZpeCByZXN1bHRpbmcgaW5jbHVkZSBlcnJvcnMuCi0JLSBSZW1vdmUgdW51c2VkIHtfXyx9Zm9ybWF0X21mdF9yZWNvcmQoKSBmcm9tIGZzL250ZnMvbWZ0LmMuCi0JLSBNb2RpZnkgZnMvbnRmcy9tZnQuYzo6X19tYXJrX21mdF9yZWNvcmRfZGlydHkoKSB0byB1c2UgdGhlIGhlbHBlcgotCSAgbWFya19udGZzX3JlY29yZF9kaXJ0eSgpIHdoaWNoIGFsc28gY2hhbmdlcyB0aGUgYmVoYXZpb3VyIGluIHRoYXQgd2UKLQkgIG5vdyBzZXQgdGhlIGJ1ZmZlcnMgYmVsb25naW5nIHRvIHRoZSBtZnQgcmVjb3JkIGRpcnR5IGFzIHdlbGwgYXMgdGhlCi0JICBwYWdlIGl0c2VsZi4KLQktIFVwZGF0ZSBmcy9udGZzL21mdC5jOjp3cml0ZV9tZnRfcmVjb3JkX25vbG9jaygpIGFuZCBzeW5jX21mdF9taXJyb3IoKQotCSAgdG8gY29wZSB3aXRoIHRoZSBmYWN0IHRoYXQgdGhlcmUgbm93IGFyZSBkaXJ0eSBidWZmZXJzIGluIG1mdCBwYWdlcy4KLQktIFVwZGF0ZSBmcy9udGZzL2lub2RlLmM6Om50ZnNfd3JpdGVfaW5vZGUoKSB0byBhbHNvIHVzZSB0aGUgaGVscGVyCi0JICBtYXJrX250ZnNfcmVjb3JkX2RpcnR5KCkgYW5kIHRodXMgdG8gc2V0IHRoZSBidWZmZXJzIGJlbG9uZ2luZyB0byB0aGUKLQkgIG1mdCByZWNvcmQgZGlydHkgYXMgd2VsbCBhcyB0aGUgcGFnZSBpdHNlbGYuCi0JLSBGaXggY29tcGlsZXIgd2FybmluZ3Mgb24geDg2LTY0IGluIGZzL250ZnMvZGlyLmMuICAoUmFuZHkgRHVubGFwLAotCSAgc2xpZ2h0bHkgbW9kaWZpZWQgYnkgbWUpCi0JLSBBZGQgZnMvbnRmcy9tZnQuYzo6dHJ5X21hcF9tZnRfcmVjb3JkKCkgd2hpY2ggZmFpbHMgd2l0aCAtRUFMUkVBRFkgaWYKLQkgIHRoZSBtZnQgcmVjb3JkIGlzIGFscmVhZHkgbG9ja2VkIGFuZCBvdGhlcndpc2UgYmVoYXZlcyB0aGUgc2FtZSB3YXkKLQkgIGFzIGZzL250ZnMvbWZ0LmM6Om1hcF9tZnRfcmVjb3JkKCkuCi0JLSBNb2RpZnkgZnMvbnRmcy9tZnQuYzo6d3JpdGVfbWZ0X3JlY29yZF9ub2xvY2soKSBzbyB0aGF0IGl0IG9ubHkKLQkgIHdyaXRlcyB0aGUgbWZ0IHJlY29yZCBpZiB0aGUgYnVmZmVycyBiZWxvbmdpbmcgdG8gaXQgYXJlIGRpcnR5LgotCSAgT3RoZXJ3aXNlIHdlIGFzc3VtZSB0aGF0IGl0IHdhcyB3cml0dGVuIG91dCBieSBvdGhlciBtZWFucyBhbHJlYWR5LgotCS0gQXR0ZW1wdGluZyB0byB3cml0ZSBvdXRzaWRlIGluaXRpYWxpemVkIHNpemUgaXMgX25vdF8gYSBidWcgc28gcmVtb3ZlCi0JICB0aGUgYnVnIGNoZWNrIGZyb20gZnMvbnRmcy9hb3BzLmM6Om50ZnNfd3JpdGVfbXN0X2Jsb2NrKCkuICBJdCBpcyBpbgotCSAgZmFjdCByZXF1aXJlZCB0byB3cml0ZSBvdXRzaWRlIGluaXRpYWxpemVkIHNpemUgd2hlbiBwcmVwYXJpbmcgdG8KLQkgIGV4dGVuZCB0aGUgaW5pdGlhbGl6ZWQgc2l6ZS4KLQktIE1hcCB0aGUgcGFnZSBpbnN0ZWFkIG9mIHVzaW5nIHBhZ2VfYWRkcmVzcygpIGJlZm9yZSB3cml0aW5nIHRvIGl0IGluCi0JICBmcy9udGZzL2FvcHMuYzo6bnRmc19tZnRfd3JpdGVwYWdlKCkuCi0JLSBQcm92aWRlIGV4Y2x1c2lvbiBiZXR3ZWVuIG9wZW5pbmcgYW4gaW5vZGUgLyBtYXBwaW5nIGFuIG1mdCByZWNvcmQKLQkgIGFuZCBhY2Nlc3NpbmcgdGhlIG1mdCByZWNvcmQgaW4gZnMvbnRmcy9tZnQuYzo6bnRmc19tZnRfd3JpdGVwYWdlKCkKLQkgIGJ5IHNldHRpbmcgdGhlIHBhZ2Ugbm90IHVwdG9kYXRlIHRocm91Z2hvdXQgbnRmc19tZnRfd3JpdGVwYWdlKCkuCi0JLSBDbGVhciB0aGUgcGFnZSB1cHRvZGF0ZSBmbGFnIGluIGZzL250ZnMvYW9wcy5jOjpudGZzX3dyaXRlX21zdF9ibG9jaygpCi0JICB0byBlbnN1cmUgbm9vbmUgY2FuIHNlZSB0aGUgcGFnZSB3aGlsc3QgdGhlIG1zdCBmaXh1cHMgYXJlIGFwcGxpZWQuCi0JLSBBZGQgdGhlIGhlbHBlciBmcy9udGZzL21mdC5jOjpudGZzX21heV93cml0ZV9tZnRfcmVjb3JkKCkgd2hpY2gKLQkgIGNoZWNrcyBpZiBhbiBtZnQgcmVjb3JkIG1heSBiZSB3cml0dGVuIG91dCBzYWZlbHkgb2J0YWluaW5nIGFueQotCSAgbmVjZXNzYXJ5IGxvY2tzIGluIHRoZSBwcm9jZXNzLiAgVGhpcyBpcyB1c2VkIGJ5Ci0JICBmcy9udGZzL2FvcHMuYzo6bnRmc193cml0ZV9tc3RfYmxvY2soKS4KLQktIE1vZGlmeSBmcy9udGZzL2FvcHMuYzo6bnRmc193cml0ZV9tc3RfYmxvY2soKSB0byBhbHNvIHdvcmsgZm9yCi0JICB3cml0aW5nIG1mdCByZWNvcmRzIGFuZCBpbXByb3ZlIGl0cyBlcnJvciBoYW5kbGluZyBpbiB0aGUgcHJvY2Vzcy4KLQkgIE5vdyBpZiBhbnkgb2YgdGhlIHJlY29yZHMgaW4gdGhlIHBhZ2UgZmFpbCB0byBiZSB3cml0dGVuIG91dCwgYWxsCi0JICBvdGhlciByZWNvcmRzIHdpbGwgYmUgd3JpdHRlbiBvdXQgaW5zdGVhZCBvZiBhYm9ydGluZyBjb21wbGV0ZWx5LgotCS0gUmVtb3ZlIG50ZnNfbWZ0X2FvcHMgYW5kIHVwZGF0ZSBhbGwgdXNlcnMgdG8gdXNlIG50ZnNfbXN0X2FvcHMuCi0JLSBNb2RpZnkgZnMvbnRmcy9pbm9kZS5jOjpudGZzX3JlYWRfbG9ja2VkX2lub2RlKCkgdG8gc2V0IHRoZQotCSAgbnRmc19tc3RfYW9wcyBmb3IgYWxsIGlub2RlcyB3aGljaCBhcmUgTklub01zdFByb3RlY3RlZCgpIGFuZAotCSAgbnRmc19hb3BzIGZvciBhbGwgb3RoZXIgaW5vZGVzLgotCS0gUmVuYW1lIGZzL250ZnMvbWZ0LmM6OnN5bmNfbWZ0X21pcnJvcnssX3Vtb3VudH0oKSB0bwotCSAgbnRmc19zeW5jX21mdF9taXJyb3J7LF91bW91bnR9KCkgYW5kIGNoYW5nZSB0aGVpciBwYXJhbWV0ZXJzIHNvIHRoZXkKLQkgIG5vIGxvbmdlciByZXF1aXJlIGFuIG50ZnMgaW5vZGUgdG8gYmUgcHJlc2VudC4gIFVwZGF0ZSBhbGwgY2FsbGVycy4KLQktIENsZWFudXAgdGhlIGVycm9yIGhhbmRsaW5nIGluIGZzL250ZnMvbWZ0LmM6Om50ZnNfc3luY19tZnRfbWlycm9yKCkuCi0JLSBDbGVhciB0aGUgcGFnZSB1cHRvZGF0ZSBmbGFnIGluIGZzL250ZnMvbWZ0LmM6Om50ZnNfc3luY19tZnRfbWlycm9yKCkKLQkgIHRvIGVuc3VyZSBub29uZSBjYW4gc2VlIHRoZSBwYWdlIHdoaWxzdCB0aGUgbXN0IGZpeHVwcyBhcmUgYXBwbGllZC4KLQktIFJlbW92ZSB0aGUgbm8gbG9uZ2VyIG5lZWRlZCBmcy9udGZzL21mdC5jOjpudGZzX21mdF93cml0ZXBhZ2UoKSBhbmQKLQkgIGZzL250ZnMvbWZ0LmM6OnRyeV9tYXBfbWZ0X3JlY29yZCgpLgotCS0gRml4IGNhbGxlcnMgb2YgZnMvbnRmcy9hb3BzLmM6Om1hcmtfbnRmc19yZWNvcmRfZGlydHkoKSB0byBjYWxsIGl0Ci0JICB3aXRoIHRoZSBudGZzIGlub2RlIHdoaWNoIGNvbnRhaW5zIHRoZSBwYWdlIHJhdGhlciB0aGFuIHRoZSBudGZzCi0JICBpbm9kZSB0aGUgbWZ0IHJlY29yZCBvZiB3aGljaCBpcyBpbiB0aGUgcGFnZS4KLQktIEZpeCByYWNlIGNvbmRpdGlvbiBpbiBmcy9udGZzL2lub2RlLmM6Om50ZnNfcHV0X2lub2RlKCkgYnkgbW92aW5nIHRoZQotCSAgaW5kZXggaW5vZGUgYml0bWFwIGlub2RlIHJlbGVhc2UgY29kZSBmcm9tIHRoZXJlIHRvCi0JICBmcy9udGZzL2lub2RlLmM6Om50ZnNfY2xlYXJfYmlnX2lub2RlKCkuICAoVGhhbmtzIHRvIENocmlzdG9waAotCSAgSGVsbHdpZyBmb3Igc3BvdHRpbmcgdGhpcy4pCi0JLSBGaXggcmFjZSBjb25kaXRpb24gaW4gZnMvbnRmcy9pbm9kZS5jOjpudGZzX3B1dF9pbm9kZSgpIGJ5IHRha2luZyB0aGUKLQkgIGlub2RlIHNlbWFwaG9yZSBhcm91bmQgdGhlIGNvZGUgdGhhdCBzZXRzIG5pLT5pdHlwZS5pbmRleC5ibXBfaW5vIHRvCi0JICBOVUxMIGFuZCByZW9yZ2FuaXplIHRoZSBjb2RlIHRvIG9wdGltaXplIGl0IGEgYml0LiAgKFRoYW5rcyB0bwotCSAgQ2hyaXN0b3BoIEhlbGx3aWcgZm9yIHNwb3R0aW5nIHRoaXMuKQotCS0gTW9kaWZ5IGZzL250ZnMvYW9wcy5jOjptYXJrX250ZnNfcmVjb3JkX2RpcnR5KCkgdG8gbm8gbG9uZ2VyIHRha2UgdGhlCi0JICBudGZzIGlub2RlIGFzIGEgcGFyYW1ldGVyIGFzIHRoaXMgaXMgY29uZnVzaW5nIGFuZCBtaXNsZWFkaW5nIGFuZCB0aGUKLQkgIG5lZWRlZCBudGZzIGlub2RlIGlzIGF2YWlsYWJsZSB2aWEgTlRGU19JKHBhZ2UtPm1hcHBpbmctPmhvc3QpLgotCSAgQWRhcHQgYWxsIGNhbGxlcnMgdG8gdGhpcyBjaGFuZ2UuCi0JLSBNb2RpZnkgZnMvbnRmcy9tZnQuYzo6d3JpdGVfbWZ0X3JlY29yZF9ub2xvY2soKSBhbmQKLQkgIGZzL250ZnMvYW9wcy5jOjpudGZzX3dyaXRlX21zdF9ibG9jaygpIHRvIG9ubHkgY2hlY2sgdGhlIGRpcnR5IHN0YXRlCi0JICBvZiB0aGUgZmlyc3QgYnVmZmVyIGluIGEgcmVjb3JkIGFuZCB0byB0YWtlIHRoaXMgYXMgdGhlIG50ZnMgcmVjb3JkCi0JICBkaXJ0eSBzdGF0ZS4gIFdlIGNhbm5vdCBsb29rIGF0IHRoZSBkaXJ0eSBzdGF0ZSBmb3Igc3Vic2VxdWVudAotCSAgYnVmZmVycyBiZWNhdXNlIHdlIG1pZ2h0IGJlIHJhY2luZyB3aXRoCi0JICBmcy9udGZzL2FvcHMuYzo6bWFya19udGZzX3JlY29yZF9kaXJ0eSgpLgotCS0gTW92ZSB0aGUgc3RhdGljIGlubGluZSBudGZzX2luaXRfYmlnX2lub2RlKCkgZnJvbSBmcy9udGZzL2lub2RlLmMgdG8KLQkgIGlub2RlLmggYW5kIG1ha2UgZnMvbnRmcy9pbm9kZS5jOjpfX250ZnNfaW5pdF9pbm9kZSgpIG5vbi1zdGF0aWMgYW5kCi0JICBhZGQgYSBkZWNsYXJhdGlvbiBmb3IgaXQgdG8gaW5vZGUuaC4gIEZpeCBzb21lIGNvbXBpbGF0aW9uIGlzc3VlcwotCSAgdGhhdCByZXN1bHRlZCBkdWUgdG8gI2luY2x1ZGVzIGFuZCBoZWFkZXIgZmlsZSBpbnRlcmRlcGVuZGVuY2llcy4KLQktIFNpbXBsaWZ5IHNldHVwIG9mIGlfbW9kZSBpbiBmcy9udGZzL2lub2RlLmM6Om50ZnNfcmVhZF9sb2NrZWRfaW5vZGUoKS4KLQktIEFkZCBoZWxwZXJzIGZzL250ZnMvbGF5b3V0Lmg6Ok1LX01SRUYoKSBhbmQgTUtfTEVfTVJFRigpLgotCS0gTW9kaWZ5IGZzL250ZnMvbWZ0LmM6Om1hcF9leHRlbnRfbWZ0X3JlY29yZCgpIHRvIG9ubHkgdmVyaWZ5IHRoZSBtZnQKLQkgIHJlY29yZCBzZXF1ZW5jZSBudW1iZXIgaWYgaXQgaXMgc3BlY2lmaWVkIChpLmUuIG5vdCB6ZXJvKS4KLQktIEFkZCBmcy9udGZzL21mdC5baGNdOjpudGZzX21mdF9yZWNvcmRfYWxsb2MoKSBhbmQgdmFyaW91cyBoZWxwZXIKLQkgIGZ1bmN0aW9ucyB1c2VkIGJ5IGl0LgotCS0gVXBkYXRlIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQgd2l0aCBpbnN0cnVjdGlvbnMgb24gaG93IHRvCi0JICB1c2UgdGhlIERldmljZS1NYXBwZXIgZHJpdmVyIHdpdGggTlRGUyBmdGRpc2svTERNIHJhaWQuICBUaGlzIHJlbW92ZXMKLQkgIHRoZSBsaW5lYXIgcmFpZCBwcm9ibGVtIHdpdGggdGhlIFNvZnR3YXJlIFJBSUQgLyBNRCBkcml2ZXIgd2hlbiBvbmUKLQkgIG9yIG1vcmUgb2YgdGhlIGRldmljZXMgaGFzIGFuIG9kZCBudW1iZXIgb2Ygc2VjdG9ycy4KLQotMi4xLjIwIC0gRml4IHR3byBzdHVwaWQgYnVncyBpbnRyb2R1Y2VkIGluIDIuMS4xOCByZWxlYXNlLgotCi0JLSBGaXggc3R1cGlkIGJ1ZyBpbiBmcy9udGZzL2F0dHJpYi5jOjpudGZzX2F0dHJfcmVpbml0X3NlYXJjaF9jdHgoKQotCSAgd2hlcmUgd2UgZGlkIG5vdCBjbGVhciBjdHgtPmFsX2VudHJ5IGJ1dCBpdCB3YXMgc3RpbGwgc2V0IGR1ZSB0bwotCSAgY2hhbmdlcyBpbiBudGZzX2F0dHJfbG9va3VwKCkgYW5kIG50ZnNfZXh0ZXJuYWxfYXR0cl9maW5kKCkgaW4KLQkgIHBhcnRpY3VsYXIuCi0JLSBGaXggYW5vdGhlciBzdHVwaWQgYnVnIGluIGZzL250ZnMvYXR0cmliLmM6Om50ZnNfZXh0ZXJuYWxfYXR0cl9maW5kKCkKLQkgIHdoZXJlIHdlIGZvcmdvdCB0byB1bm1hcCB0aGUgZXh0ZW50IG1mdCByZWNvcmQgd2hlbiB3ZSBoYWQgZmluaXNoZWQKLQkgIGVudW1lcmF0aW5nIGFuIGF0dHJpYnV0ZSB3aGljaCBjYXVzZWQgYSBidWcgY2hlY2sgdG8gdHJpZ2dlciB3aGVuIHRoZQotCSAgVkZTIGNhbGxzIC0+Y2xlYXJfaW5vZGUuCi0KLTIuMS4xOSAtIE1hbnkgY2xlYW51cHMsIGltcHJvdmVtZW50cywgYW5kIGEgbWlub3IgYnVnIGZpeC4KLQotCS0gVXBkYXRlIC0+c2V0YXR0ciAoZnMvbnRmcy9pbm9kZS5jOjpudGZzX3NldGF0dHIoKSkgdG8gcmVmdXNlIHRvCi0JICBjaGFuZ2UgdGhlIHVpZCwgZ2lkLCBhbmQgbW9kZSBvZiBhbiBpbm9kZSBhcyB3ZSBkbyBub3Qgc3VwcG9ydCBOVEZTCi0JICBBQ0xzIHlldC4KLQktIFJlbW92ZSBCS0wgdXNlIGZyb20gbnRmc19zZXRhdHRyKCkgc3luY2luZyB1cCB3aXRoIHRoZSByZXN0IG9mIHRoZQotCSAga2VybmVsLgotCS0gR2V0IHJpZCBvZiB0aGUgdWdseSB0cmFuc3BhcmVudCB1bmlvbiBpbiBmcy9udGZzL2Rpci5jOjpudGZzX3JlYWRkaXIoKQotCSAgYW5kIG50ZnNfZmlsbGRpcigpIGFzIHBlciBzdWdnZXN0aW9uIGZyb20gQWwgVmlyby4KLQktIENoYW5nZSAnXDAnIGFuZCBMJ1wwJyB0byBzaW1wbHkgMCBhcyBwZXIgYWR2aWNlIGZyb20gTGludXMgVG9ydmFsZHMuCi0JLSBVcGRhdGUgLT50cnVuY2F0ZSAoZnMvbnRmcy9pbm9kZS5jOjpudGZzX3RydW5jYXRlKCkpIHRvIGNoZWNrIGlmIHRoZQotCSAgaW5vZGUgc2l6ZSBoYXMgY2hhbmdlZCBhbmQgdG8gb25seSBvdXRwdXQgYW4gZXJyb3IgaWYgc28uCi0JLSBSZW5hbWUgZnMvbnRmcy9hdHRyaWIuaDo6YXR0cmlidXRlX3ZhbHVlX2xlbmd0aCgpIHRvIG50ZnNfYXR0cl9zaXplKCkuCi0JLSBBZGQgbGV7MTYsMzIsNjR9IGFzIHdlbGwgYXMgc2xlezE2LDMyLDY0fSBkYXRhIHR5cGVzIHRvCi0JICBmcy9udGZzL3R5cGVzLmguCi0JLSBDaGFuZ2UgbnRmc2NoYXIgdG8gYmUgbGUxNiBpbnN0ZWFkIG9mIHUxNiBpbiBmcy9udGZzL3R5cGVzLmguCi0JLSBBZGQgbGUgdmVyc2lvbnMgb2YgVkNOLCBMQ04sIGFuZCBMU04gY2FsbGVkIGxlVkNOLCBsZUxDTiwgYW5kIGxlTFNOLAotCSAgcmVzcGVjdGl2ZWx5LCB0byBmcy9udGZzL3R5cGVzLmguCi0JLSBVcGRhdGUgZW5kaWFubmVzcyBjb252ZXJzaW9uIG1hY3JvcyBpbiBmcy9udGZzL2VuZGlhbi5oIHRvIHVzZSB0aGUKLQkgIG5ldyB0eXBlcyBhcyBhcHByb3ByaWF0ZS4KLQktIERvIHByb3BlciB0eXBlIGNhc3Rpbmcgd2hlbiB1c2luZyBzbGU2NF90b19jcHVwKCkgaW4gZnMvbnRmcy9kaXIuYwotCSAgYW5kIGluZGV4LmMuCi0JLSBBZGQgbGVNRlRfUkVGIGRhdGEgdHlwZSB0byBmcy9udGZzL2xheW91dC5oLgotCS0gVXBkYXRlIGFsbCBOVEZTIGhlYWRlciBmaWxlcyB3aXRoIHRoZSBuZXcgbGl0dGxlIGVuZGlhbiBkYXRhIHR5cGVzLgotCSAgQWZmZWN0ZWQgZmlsZXMgYXJlIGZzL250ZnMvbGF5b3V0LmgsIGxvZ2ZpbGUuaCwgYW5kIHRpbWUuaC4KLQktIERvIHByb3BlciB0eXBlIGNhc3Rpbmcgd2hlbiB1c2luZyBudGZzX2lzXypfcmVjb3JkcCgpIGluCi0JICBmcy9udGZzL2xvZ2ZpbGUuYywgbWZ0LmMsIGFuZCBzdXBlci5jLiAKLQktIEZpeCBhbGwgdGhlIHNwYXJzZSBiaXR3aXNlIHdhcm5pbmdzLiAgSGFkIHRvIGNoYW5nZSBhbGwgdGhlIHR5cGVkZWYKLQkgIGVudW1zIHN0b3JpbmcgbGl0dGxlIGVuZGlhbiB2YWx1ZXMgdG8gc2ltcGxlIGVudW1zIHBsdXMgYSB0eXBlZGVmIGZvcgotCSAgdGhlIGRhdGF0eXBlIHRvIG1ha2Ugc3BhcnNlIGhhcHB5LgotCS0gRml4IGEgYnVnIGZvdW5kIGJ5IHRoZSBuZXcgc3BhcnNlIGJpdHdpc2Ugd2FybmluZ3Mgd2hlcmUgdGhlIGRlZmF1bHQKLQkgIHVwY2FzZSB0YWJsZSB3YXMgZGVmaW5lZCBhcyBhIHBvaW50ZXIgdG8gd2NoYXJfdCByYXRoZXIgdGhhbiBudGZzY2hhcgotCSAgaW4gZnMvbnRmcy9udGZzLmggYW5kIHN1cGVyLmMuCi0JLSBDaGFuZ2Uge2NvbnN0Xyx9Y3B1X3RvX2xlezE2LDMyfSgwKSB0byBqdXN0IDAgYXMgc3VnZ2VzdGVkIGJ5IEFsIFZpcm8uCi0KLTIuMS4xOCAtIEZpeCBzY2hlZHVsaW5nIGxhdGVuY2llcyBhdCBtb3VudCB0aW1lIGFzIHdlbGwgYXMgYW4gZW5kaWFubmVzcyBidWcuCi0KLQktIFJlbW92ZSB2b2wtPm5yX21mdF9yZWNvcmRzIGFzIGl0IHdhcyBwcmV0dHkgbWVhbmluZ2xlc3MgYW5kIG9wdGltaXplCi0JICB0aGUgY2FsY3VsYXRpb24gb2YgdG90YWwvZnJlZSBpbm9kZXMgYXMgdXNlZCBieSBzdGF0ZnMoKS4KLQktIEZpeCBzY2hlZHVsaW5nIGxhdGVuY2llcyBpbiBudGZzX2ZpbGxfc3VwZXIoKSBieSBkcm9wcGluZyB0aGUgQktMCi0JICBiZWNhdXNlIHRoZSBjb2RlIGl0c2VsZiBpcyB1c2luZyB0aGUgbnRmc19sb2NrIHNlbWFwaG9yZSB3aGljaAotCSAgcHJvdmlkZXMgc2FmZSBsb2NraW5nLiAgKEluZ28gTW9sbmFyKQotCS0gRml4IGEgcG90ZW50aWFsIGJ1ZyBpbiBmcy9udGZzL21mdC5jOjptYXBfZXh0ZW50X21mdF9yZWNvcmQoKSB0aGF0Ci0JICBjb3VsZCBvY2N1ciBpbiB0aGUgZnV0dXJlIGZvciB3aGVuIHdlIHN0YXJ0IGNsb3NpbmcvZnJlZWluZyBleHRlbnQKLQkgIGlub2RlcyBpZiB3ZSBkb24ndCBzZXQgYmFzZV9uaS0+ZXh0LmV4dGVudF9udGZzX2lub3MgdG8gTlVMTCBhZnRlcgotCSAgd2UgZnJlZSBpdC4KLQktIFJlbmFtZSB7ZmluZCxsb29rdXB9X2F0dHIoKSB0byBudGZzX2F0dHJfe2ZpbmQsbG9va3VwfSgpIGFzIHdlbGwgYXMKLQkgIGZpbmRfZXh0ZXJuYWxfYXR0cigpIHRvIG50ZnNfZXh0ZXJuYWxfYXR0cl9maW5kKCkgdG8gY2xlYW51cCB0aGUKLQkgIG5hbWVzcGFjZSBhIGJpdCBhbmQgdG8gYmUgbW9yZSBjb25zaXN0ZW50IHdpdGggbGlibnRmcy4KLQktIFJlbmFtZSB7e3JlLH1pbml0LGdldCxwdXR9X2F0dHJfc2VhcmNoX2N0eCgpIHRvCi0JICBudGZzX2F0dHJfe3tyZSx9aW5pdCxnZXQscHV0fV9zZWFyY2hfY3R4KCkgYXMgd2VsbCBhcyB0aGUgdHlwZQotCSAgYXR0cl9zZWFyY2hfY29udGV4dCB0byBudGZzX2F0dHJfc2VhcmNoX2N0eC4KLQktIEZvcmNlIHVzZSBvZiBudGZzX2F0dHJfZmluZCgpIGluIG50ZnNfYXR0cl9sb29rdXAoKSB3aGVuIHNlYXJjaGluZwotCSAgZm9yIHRoZSBhdHRyaWJ1dGUgbGlzdCBhdHRyaWJ1dGUgaXRzZWxmLgotCS0gRml4IGVuZGlhbm5lc3MgYnVnIGluIG50ZnNfZXh0ZXJuYWxfYXR0cl9maW5kKCkuCi0JLSBDaGFuZ2UgbnRmc197ZXh0ZXJuYWxfLH1hdHRyX2ZpbmQoKSB0byByZXR1cm4gMCBvbiBzdWNjZXNzLCAtRU5PRU5UCi0JICBpZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBmb3VuZCwgYW5kIC1FSU8gb24gcmVhbCBlcnJvci4gIEluIHRoZSBjYXNlCi0JICBvZiAtRU5PRU5ULCB0aGUgc2VhcmNoIGNvbnRleHQgaXMgdXBkYXRlZCB0byBkZXNjcmliZSB0aGUgYXR0cmlidXRlCi0JICBiZWZvcmUgd2hpY2ggdGhlIGF0dHJpYnV0ZSBiZWluZyBzZWFyY2hlZCBmb3Igd291bGQgbmVlZCB0byBiZQotCSAgaW5zZXJ0ZWQgaWYgc3VjaCBhbiBhY3Rpb24gd2VyZSB0byBiZSBkZXNpcmVkIGFuZCBpbiB0aGUgY2FzZSBvZgotCSAgbnRmc19leHRlcm5hbF9hdHRyX2ZpbmQoKSB0aGUgc2VhcmNoIGNvbnRleHQgaXMgYWxzbyB1cGRhdGVkIHRvCi0JICBpbmRpY2F0ZSB0aGUgYXR0cmlidXRlIGxpc3QgZW50cnkgYmVmb3JlIHdoaWNoIHRoZSBhdHRyaWJ1dGUgbGlzdAotCSAgZW50cnkgb2YgdGhlIGF0dHJpYnV0ZSBiZWluZyBzZWFyY2hlZCBmb3Igd291bGQgbmVlZCB0byBiZSBpbnNlcnRlZAotCSAgaWYgc3VjaCBhbiBhY3Rpb24gd2VyZSB0byBiZSBkZXNpcmVkLiAgQWxzbyBtYWtlIG50ZnNfZmluZF9hdHRyKCkKLQkgIHN0YXRpYyBhbmQgcmVtb3ZlIGl0cyBwcm90b3R5cGUgZnJvbSBhdHRyaWIuaCBhcyBpdCBpcyBub3QgdXNlZAotCSAgYW55d2hlcmUgb3RoZXIgdGhhbiBhdHRyaWIuYy4gIFVwZGF0ZSBudGZzX2F0dHJfbG9va3VwKCkgYW5kIGFsbAotCSAgY2FsbGVycyBvZiBudGZzX3tleHRlcm5hbCx9YXR0cl97ZmluZCxsb29rdXB9KCkgZm9yIHRoZSBuZXcgcmV0dXJuCi0JICB2YWx1ZXMuCi0JLSBNaW5vciBjbGVhbnVwIG9mIGZzL250ZnMvaW5vZGUuYzo6bnRmc19pbml0X2xvY2tlZF9pbm9kZSgpLgotCi0yLjEuMTcgLSBGaXggYnVncyBpbiBtb3VudCB0aW1lIGVycm9yIGNvZGUgcGF0aHMgYW5kIG90aGVyIHVwZGF0ZXMuCi0KLQktIEltcGxlbWVudCBiaXRtYXAgbW9kaWZpY2F0aW9uIGNvZGUgKGZzL250ZnMvYml0bWFwLltoY10pLiAgVGhpcwotCSAgaW5jbHVkZXMgZnVuY3Rpb25zIHRvIHNldC9jbGVhciBhIHNpbmdsZSBiaXQgb3IgYSBydW4gb2YgYml0cy4KLQktIEFkZCBmcy9udGZzL2F0dHJpYi5baGNdOjpudGZzX2ZpbmRfdmNuKCkgd2hpY2ggcmV0dXJucyB0aGUgbG9ja2VkCi0JICBydW5saXN0IGVsZW1lbnQgY29udGFpbmluZyBhIHBhcnRpY3VsYXIgdmNuLiAgSXQgYWxzbyB0YWtlcyBjYXJlIG9mCi0JICBtYXBwaW5nIGFueSBuZWVkZWQgcnVubGlzdCBmcmFnbWVudHMuCi0JLSBJbXBsZW1lbnQgY2x1c3RlciAoZGUtKWFsbG9jYXRpb24gY29kZSAoZnMvbnRmcy9sY25hbGxvYy5baGNdKS4KLQktIExvYWQgYXR0cmlidXRlIGRlZmluaXRpb24gdGFibGUgZnJvbSAkQXR0ckRlZiBhdCBtb3VudCB0aW1lLgotCS0gRml4IGJ1Z3MgaW4gbW91bnQgdGltZSBlcnJvciBjb2RlIHBhdGhzIGludm9sdmluZyAoZGUpYWxsb2NhdGlvbiBvZgotCSAgdGhlIGRlZmF1bHQgYW5kIHZvbHVtZSB1cGNhc2UgdGFibGVzLgotCS0gUmVtb3ZlIG50ZnNfbnJfbW91bnRzIGFzIGl0IGlzIG5vIGxvbmdlciB1c2VkLgotCi0yLjEuMTYgLSBJbXBsZW1lbnQgYWNjZXNzIHRpbWUgdXBkYXRlcywgZmlsZSBzeW5jLCBhc3luYyBpbywgYW5kIHJlYWQvd3JpdGV2LgotCi0JLSBBZGQgc3VwcG9ydCBmb3IgcmVhZHYvd3JpdGV2IGFuZCBhaW9fcmVhZC9haW9fd3JpdGUgKGZzL250ZnMvZmlsZS5jKS4KLQkgIFRoaXMgaXMgZG9uZSBieSBzZXR0aW5nIHRoZSBhcHByb3ByaWF0ZSBmaWxlIG9wZXJhdGlvbnMgcG9pbnRlcnMgdG8KLQkgIHRoZSBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgcHJvdmlkZWQgYnkgbW0vZmlsZW1hcC5jLgotCS0gSW1wbGVtZW50IGZzeW5jLCBmZGF0YXN5bmMsIGFuZCBtc3luYyBib3RoIGZvciBmaWxlcyAoZnMvbnRmcy9maWxlLmMpCi0JICBhbmQgZGlyZWN0b3JpZXMgKGZzL250ZnMvZGlyLmMpLgotCS0gQWRkIHN1cHBvcnQgZm9yIHthLG0sY310aW1lIHVwZGF0ZXMgdG8gaW5vZGUuYzo6bnRmc193cml0ZV9pbm9kZSgpLgotCSAgTm90ZSwgZXhjZXB0IGZvciB0aGUgcm9vdCBkaXJlY3RvcnkgYW5kIGFueSBvdGhlciBzeXN0ZW0gZmlsZXMgb3BlbmVkCi0JICBieSB0aGUgdXNlciwgdGhlIHN5c3RlbSBmaWxlcyB3aWxsIG5vdCBoYXZlIHRoZWlyIGFjY2VzcyB0aW1lcwotCSAgdXBkYXRlZCBhcyB0aGV5IGFyZSBvbmx5IGFjY2Vzc2VkIGF0IHRoZSBpbm9kZSBsZXZlbCBhbiBoZW5jZSB0aGUKLQkgIGZpbGUgbGV2ZWwgZnVuY3Rpb25zIHdoaWNoIGNhdXNlIHRoZSB0aW1lcyB0byBiZSB1cGRhdGVkIGFyZSBuZXZlcgotCSAgaW52b2tlZC4KLQotMi4xLjE1IC0gSW52YWxpZGF0ZSBxdW90YXMgd2hlbiAocmUpbW91bnRpbmcgcmVhZC13cml0ZS4KLQotCS0gQWRkIG5ldyBlbGVtZW50IGl0eXBlLmluZGV4LmNvbGxhdGlvbl9ydWxlIHRvIHRoZSBudGZzIGlub2RlCi0JICBzdHJ1Y3R1cmUgYW5kIHNldCBpdCBhcHByb3ByaWF0ZWx5IGluIG50ZnNfcmVhZF9sb2NrZWRfaW5vZGUoKS4KLQktIEltcGxlbWVudCBhIG5ldyBpbm9kZSB0eXBlICJpbmRleCIgdG8gYWxsb3cgZWZmaWNpZW50IGFjY2VzcyB0byB0aGUKLQkgIGluZGljZXMgZm91bmQgaW4gdmFyaW91cyBzeXN0ZW0gZmlsZXMgYW5kIGFkYXB0IGlub2RlIGhhbmRsaW5nCi0JICBhY2NvcmRpbmdseSAoZnMvbnRmcy9pbm9kZS5baGNdKS4gIEFuIGluZGV4IGlub2RlIGlzIGVzc2VudGlhbGx5IGFuCi0JICBhdHRyaWJ1dGUgaW5vZGUgKE5Jbm9BdHRyKCkgaXMgdHJ1ZSkgd2l0aCBhbiBhdHRyaWJ1dGUgdHlwZSBvZgotCSAgQVRfSU5ERVhfQUxMT0NBVElPTi4gIEFzIHN1Y2gsIGl0IGlzIG5vIGxvbmdlciBhbGxvd2VkIHRvIGNhbGwKLQkgIG50ZnNfYXR0cl9pZ2V0KCkgd2l0aCBhbiBhdHRyaWJ1dGUgdHlwZSBvZiBBVF9JTkRFWF9BTExPQ0FUSU9OIGFzCi0JICB0aGVyZSB3b3VsZCBiZSBubyB3YXkgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBub3JtYWwgYXR0cmlidXRlIGlub2RlcwotCSAgYW5kIGluZGV4IGlub2Rlcy4gIFRoZSBmdW5jdGlvbiB0byBvYnRhaW4gYW4gaW5kZXggaW5vZGUgaXMKLQkgIG50ZnNfaW5kZXhfaWdldCgpIGFuZCBpdCB1c2VzIHRoZSBoZWxwZXIgZnVuY3Rpb24KLQkgIG50ZnNfcmVhZF9sb2NrZWRfaW5kZXhfaW5vZGUoKS4gIE5vdGUsIHdlIGRvIG5vdCBvdmVybG9hZAotCSAgbnRmc19hdHRyX2lnZXQoKSBhcyBpbmRpY2VzIGNvbnNpc3Qgb2YgbXVsdGlwbGUgYXR0cmlidXRlcyBzbyB1c2luZwotCSAgbnRmc19hdHRyX2lnZXQoKSB0byBvYnRhaW4gYW4gaW5kZXggaW5vZGUgd291bGQgYmUgY29uZnVzaW5nLgotCS0gRW5zdXJlIHRoYXQgdGhlcmUgaXMgbm8gb3ZlcmZsb3cgd2hlbiBkb2luZyBwYWdlLT5pbmRleCA8PAotCSAgUEFHRV9DQUNIRV9TSElGVCBieSBjYXN0aW5nIHBhZ2UtPmluZGV4IHRvIHM2NCBpbiBmcy9udGZzL2FvcHMuYy4KLQktIFVzZSBhdG9taWMga21hcCBpbnN0ZWFkIG9mIGttYXAoKSBpbiBmcy9udGZzL2FvcHMuYzo6bnRmc19yZWFkX3BhZ2UoKQotCSAgYW5kIG50ZnNfcmVhZF9ibG9jaygpLgotCS0gVXNlIGNhc2Ugc2Vuc2l0aXZlIGF0dHJpYnV0ZSBsb29rdXBzIGluc3RlYWQgb2YgY2FzZSBpbnNlbnNpdGl2ZSBvbmVzLgotCS0gTG9jayBhbGwgcGFnZSBjYWNoZSBwYWdlcyBiZWxvbmdpbmcgdG8gbXN0IHByb3RlY3RlZCBhdHRyaWJ1dGVzIHdoaWxlCi0JICBhY2Nlc3NpbmcgdGhlbSB0byBlbnN1cmUgd2UgbmV2ZXIgc2VlIGNvcnJ1cHQgZGF0YSB3aGlsZSB0aGUgcGFnZSBpcwotCSAgdW5kZXIgd3JpdGVvdXQuCi0JLSBBZGQgZnJhbWV3b3JrIGZvciBnZW5lcmljIG50ZnMgY29sbGF0aW9uIChmcy9udGZzL2NvbGxhdGlvbi5baGNdKS4KLQkgIFdlIGhhdmUgbnRmc19pc19jb2xsYXRpb25fcnVsZV9zdXBwb3J0ZWQoKSB0byBjaGVjayBpZiB0aGUgY29sbGF0aW9uCi0JICBydWxlIHlvdSB3YW50IHRvIHVzZSBpcyBzdXBwb3J0ZWQgYW5kIG50ZnNfY29sbGF0aW9uKCkgd2hpY2ggYWN0dWFsbHkKLQkgIGNvbGxhdGVzIHR3byBkYXRhIGl0ZW1zLiAgV2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCBDT0xMQVRJT05fQklOQVJZCi0JICBhbmQgQ09MTEFUSU9OX05UT0ZTX1VMT05HIGJ1dCBzdXBwb3J0IGZvciBvdGhlciBjb2xsYXRpb24gcnVsZXMgd2lsbAotCSAgYmUgYWRkZWQgYXMgdGhlIG5lZWQgYXJpc2VzLgotCS0gQWRkIGEgbmV3IHR5cGUsIG50ZnNfaW5kZXhfY29udGV4dCwgdG8gYWxsb3cgcmV0cmlldmFsIG9mIGFuIGluZGV4Ci0JICBlbnRyeSB1c2luZyB0aGUgY29ycmVzcG9uZGluZyBpbmRleCBrZXkuICBUbyBnZXQgYW4gaW5kZXggY29udGV4dCwKLQkgIHVzZSBudGZzX2luZGV4X2N0eF9nZXQoKSBhbmQgdG8gcmVsZWFzZSBpdCwgdXNlIG50ZnNfaW5kZXhfY3R4X3B1dCgpLgotCSAgVGhpcyBhbHNvIGFkZHMgYSBuZXcgc2xhYiBjYWNoZSBmb3IgdGhlIGluZGV4IGNvbnRleHRzLiAgVG8gbG9va3VwIGEKLQkgIGtleSBpbiBhbiBpbmRleCBpbm9kZSwgdXNlIG50ZnNfaW5kZXhfbG9va3VwKCkuICBBZnRlciBtb2RpZnlpbmcgYW4KLQkgIGluZGV4IGVudHJ5LCBjYWxsIG50ZnNfaW5kZXhfZW50cnlfZmx1c2hfZGNhY2hlX3BhZ2UoKSBmb2xsb3dlZCBieQotCSAgbnRmc19pbmRleF9lbnRyeV9tYXJrX2RpcnR5KCkgdG8gZW5zdXJlIHRoZSBjaGFuZ2VzIGFyZSB3cml0dGVuIG91dAotCSAgdG8gZGlzay4gIEZvciBkZXRhaWxzIHNlZSBmcy9udGZzL2luZGV4LltoY10uICBOb3RlLCBhdCBwcmVzZW50LCBpZgotCSAgYW4gaW5kZXggZW50cnkgaXMgaW4gdGhlIGluZGV4IGFsbG9jYXRpb24gYXR0cmlidXRlIHJhdGhlciB0aGFuIHRoZQotCSAgaW5kZXggcm9vdCBhdHRyaWJ1dGUgaXQgd2lsbCBub3QgYmUgd3JpdHRlbiBvdXQgKHlvdSB3aWxsIGdldCBhCi0JICB3YXJuaW5nIG1lc3NhZ2UgYWJvdXQgZGlzY2FyZGVkIGNoYW5nZXMgaW5zdGVhZCkuCi0JLSBMb2FkIHRoZSBxdW90YSBmaWxlICgkUXVvdGEpIGFuZCBjaGVjayBpZiBxdW90YSB0cmFja2luZyBpcyBlbmFibGVkCi0JICBhbmQgaWYgc28sIG1hcmsgdGhlIHF1b3RhcyBvdXQgb2YgZGF0ZS4gIFRoaXMgY2F1c2VzIHdpbmRvd3MgdG8KLQkgIHJlc2NhbiB0aGUgdm9sdW1lIG9uIGJvb3QgYW5kIHVwZGF0ZSBhbGwgcXVvdGEgZW50cmllcy4KLQktIEFkZCBhIHNldF9wYWdlX2RpcnR5IGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9uIGZvciBudGZzX21bZnNddF9hb3BzLgotCSAgSXQgaXMgc2ltcGx5IHNldCB0byBfX3NldF9wYWdlX2RpcnR5X25vYnVmZmVycygpIHRvIG1ha2Ugc3VyZSB0aGF0Ci0JICBydW5uaW5nIHNldF9wYWdlX2RpcnR5KCkgb24gYSBwYWdlIGNvbnRhaW5pbmcgbWZ0L250ZnMgcmVjb3JkcyB3aWxsCi0JICBub3QgYWZmZWN0IHRoZSBkaXJ0eSBzdGF0ZSBvZiB0aGUgcGFnZSBidWZmZXJzLgotCS0gQWRkIGZzL250ZnMvaW5kZXguYzo6X19udGZzX2luZGV4X2VudHJ5X21hcmtfZGlydHkoKSB3aGljaCBzZXRzIGFsbAotCSAgYnVmZmVycyB0aGF0IGFyZSBpbnNpZGUgdGhlIG50ZnMgcmVjb3JkIGluIHRoZSBwYWdlIGRpcnR5IGFmdGVyIHdoaWNoCi0JICBpdCBzZXRzIHRoZSBwYWdlIGRpcnR5LiAgVGhpcyBhbGxvd3MgLT53cml0ZXBhZ2UgdG8gb25seSB3cml0ZSB0aGUKLQkgIGRpcnR5IGluZGV4IHJlY29yZHMgcmF0aGVyIHRoYW4gaGF2aW5nIHRvIHdyaXRlIGFsbCB0aGUgcmVjb3JkcyBpbgotCSAgdGhlIHBhZ2UuICBNb2RpZnkgZnMvbnRmcy9pbmRleC5oOjpudGZzX2luZGV4X2VudHJ5X21hcmtfZGlydHkoKSB0bwotCSAgdXNlIHRoaXMgcmF0aGVyIHRoYW4gX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMoKS4KLQktIEltcGxlbWVudCBmcy9udGZzL2FvcHMuYzo6bnRmc193cml0ZV9tc3RfYmxvY2soKSB3aGljaCBlbmFibGVzIHRoZQotCSAgd3JpdGluZyBvZiBwYWdlIGNhY2hlIHBhZ2VzIGJlbG9uZ2luZyB0byBtc3QgcHJvdGVjdGVkIGF0dHJpYnV0ZXMKLQkgIGxpa2UgdGhlIGluZGV4IGFsbG9jYXRpb24gYXR0cmlidXRlIGluIGRpcmVjdG9yeSBpbmRpY2VzIGFuZCBvdGhlcgotCSAgaW5kaWNlcyBsaWtlICRRdW90YS8kUSwgZXRjLiAgVGhpcyBtZWFucyB0aGF0IHRoZSBxdW90YSBpcyBub3cgbWFya2VkCi0JICBvdXQgb2YgZGF0ZSBvbiBhbGwgdm9sdW1lcyByYXRoZXIgdGhhbiBvbmx5IG9uIG9uZXMgd2hlcmUgdGhlIHF1b3RhCi0JICBkZWZhdWx0cyBlbnRyeSBpcyBpbiB0aGUgaW5kZXggcm9vdCBhdHRyaWJ1dGUgb2YgdGhlICRRdW90YS8kUSBpbmRleC4KLQotMi4xLjE0IC0gRml4IGFuIE5GU2QgY2F1c2VkIGRlYWRsb2NrIHJlcG9ydGVkIGJ5IHNldmVyYWwgdXNlcnMuCi0KLQktIE1vZGlmeSBmcy9udGZzL250ZnNfcmVhZGRpcigpIHRvIGNvcHkgdGhlIGluZGV4IHJvb3QgYXR0cmlidXRlIHZhbHVlCi0JICB0byBhIGJ1ZmZlciBzbyB0aGF0IHdlIGNhbiBwdXQgdGhlIHNlYXJjaCBjb250ZXh0IGFuZCB1bm1hcCB0aGUgbWZ0Ci0JICByZWNvcmQgYmVmb3JlIGNhbGxpbmcgdGhlIGZpbGxkaXIoKSBjYWxsYmFjay4gIFdlIG5lZWQgdG8gZG8gdGhpcwotCSAgYmVjYXVzZSBvZiBORlNkIHdoaWNoIGNhbGxzIC0+bG9va3VwKCkgZnJvbSBpdHMgZmlsbGRpciBjYWxsYmFjaygpCi0JICBhbmQgdGhpcyBjYXVzZXMgTlRGUyB0byBkZWFkbG9jayBhcyBudGZzX2xvb2t1cCgpIG1hcHMgdGhlIG1mdCByZWNvcmQKLQkgIG9mIHRoZSBkaXJlY3RvcnkgYW5kIHNpbmNlIG50ZnNfcmVhZGRpcigpIGhhcyBnb3QgaXQgbWFwcGVkIGFscmVhZHkKLQkgIG50ZnNfbG9va3VwKCkgZGVhZGxvY2tzLgotCi0yLjEuMTMgLSBFbmFibGUgb3ZlcndyaXRpbmcgb2YgcmVzaWRlbnQgZmlsZXMgYW5kIGhvdXNla2VlcGluZyBvZiBzeXN0ZW0gZmlsZXMuCi0KLQktIEltcGxlbWVudCB3cml0aW5nIG9mIG1mdCByZWNvcmRzIChmcy9udGZzL21mdC5baGNdKSwgd2hpY2ggaW5jbHVkZXMKLQkgIGtlZXBpbmcgdGhlIG1mdCBtaXJyb3IgaW4gc3luYyB3aXRoIHRoZSBtZnQgd2hlbiBtaXJyb3JlZCBtZnQgcmVjb3JkcwotCSAgYXJlIHdyaXR0ZW4uICBUaGUgZnVuY3Rpb25zIGFyZSB3cml0ZV9tZnRfcmVjb3Jkeyxfbm9sb2NrfSgpLiAgVGhlCi0JICBpbXBsZW1lbnRhdGlvbiBpcyBxdWl0ZSBydWRpbWVudGFyeSBmb3Igbm93IHdpdGggbG90cyBvZiB0aGluZ3Mgbm90Ci0JICBpbXBsZW1lbnRlZCB5ZXQgYnV0IEkgYW0gbm90IHN1cmUgYW55IG9mIHRoZW0gY2FuIGFjdHVhbGx5IG9jY3VyIHNvCi0JICBJIHdpbGwgd2FpdCBmb3IgcGVvcGxlIHRvIGhpdCBlYWNoIG9uZSBhbmQgb25seSB0aGVuIGltcGxlbWVudCBpdC4KLQktIENvbW1pdCBvcGVuIHN5c3RlbSBpbm9kZXMgYXQgdW1vdW50IHRpbWUuICBUaGlzIHNob3VsZCBtYWtlIGl0Ci0JICB2aXJ0dWFsbHkgaW1wb3NzaWJsZSBmb3Igc3luY19tZnRfbWlycm9yX3Vtb3VudCgpIHRvIGV2ZXIgYmUgbmVlZGVkLgotCS0gSW1wbGVtZW50IC0+d3JpdGVfaW5vZGUgKGZzL250ZnMvaW5vZGUuYzo6bnRmc193cml0ZV9pbm9kZSgpKSBmb3IgdGhlCi0JICBudGZzIHN1cGVyIG9wZXJhdGlvbnMuICBUaGlzIGdpdmVzIHVzIGlub2RlIHdyaXRpbmcgdmlhIHRoZSBWRlMgaW5vZGUKLQkgIGRpcnR5IGNvZGUgcGF0aHMuICBOb3RlOiAgQWNjZXNzIHRpbWUgdXBkYXRlcyBhcmUgbm90IGltcGxlbWVudGVkIHlldC4KLQktIEltcGxlbWVudCBmcy9udGZzL21mdC5baGNdOjp7LF9ffW1hcmtfbWZ0X3JlY29yZF9kaXJ0eSgpIGFuZCBtYWtlCi0JICBmcy9udGZzL2FvcHMuYzo6bnRmc193cml0ZXBhZ2UoKSBhbmQgbnRmc19jb21taXRfd3JpdGUoKSB1c2UgaXQsIHRodXMKLQkgIGZpbmFsbHkgZW5hYmxpbmcgcmVzaWRlbnQgZmlsZSBvdmVyd3JpdGUhICAoLTggIFRoaXMgYWxzbyBpbmNsdWRlcyBhCi0JICBwbGFjZWhvbGRlciBmb3IgLT53cml0ZXBhZ2UgKG50ZnNfbWZ0X3dyaXRlcGFnZSgpKSwgd2hpY2ggZm9yIG5vdwotCSAganVzdCByZWRpcnRpZXMgdGhlIHBhZ2UgYW5kIHJldHVybnMuICBBbHNvLCBhdCB1bW91bnQgdGltZSwgd2UgZm9yCi0JICBub3cgdGhyb3cgYXdheSBhbGwgbWZ0IGRhdGEgcGFnZSBjYWNoZSBwYWdlcyBhZnRlciB0aGUgbGFzdCBjYWxsIHRvCi0JICBudGZzX2NvbW1pdF9pbm9kZSgpIGluIHRoZSBob3BlIHRoYXQgYWxsIGlub2RlcyB3aWxsIGhhdmUgYmVlbgotCSAgd3JpdHRlbiBvdXQgYnkgdGhlbiBhbmQgaGVuY2Ugbm8gZGlydHkgKG1ldGEpZGF0YSB3aWxsIGJlIGxvc3QuICBXZQotCSAgYWxzbyBjaGVjayBmb3IgdGhpcyBjYXNlIGFuZCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UgdGVsbGluZyB0aGUgdXNlcgotCSAgdG8gcnVuIGNoa2Rzay4KLQktIFVzZSBzZXRfcGFnZV93cml0ZWJhY2soKSBhbmQgZW5kX3BhZ2Vfd3JpdGViYWNrKCkgaW4gdGhlIHJlc2lkZW50Ci0JICBhdHRyaWJ1dGUgY29kZSBwYXRoIG9mIGZzL250ZnMvYW9wcy5jOjpudGZzX3dyaXRlcGFnZSgpIG90aGVyd2lzZQotCSAgdGhlIHJhZGl4LXRyZWUgdGFnIFBBR0VDQUNIRV9UQUdfRElSVFkgcmVtYWlucyBzZXQgZXZlbiB0aG91Z2ggdGhlCi0JICBwYWdlIGlzIGNsZWFuLgotCS0gSW1wbGVtZW50IG50ZnNfbWZ0X3dyaXRlcGFnZSgpIHNvIGl0IG5vdyBjaGVja3MgaWYgYW55IG9mIHRoZSBtZnQKLQkgIHJlY29yZHMgaW4gdGhlIHBhZ2UgYXJlIGRpcnR5IGFuZCBpZiBzbyByZWRpcnRpZXMgdGhlIHBhZ2UgYW5kCi0JICByZXR1cm5zLiAgT3RoZXJ3aXNlIGl0IGp1c3QgcmV0dXJucyAoYWZ0ZXIgZG9pbmcgc2V0X3BhZ2Vfd3JpdGViYWNrKCksCi0JICB1bmxvY2tfcGFnZSgpLCBlbmRfcGFnZV93cml0ZWJhY2soKSBvciB0aGUgcmFkaXgtdHJlZSB0YWcKLQkgIFBBR0VDQUNIRV9UQUdfRElSVFkgcmVtYWlucyBzZXQgZXZlbiB0aG91Z2ggdGhlIHBhZ2UgaXMgY2xlYW4pLCB0aHVzCi0JICBhbG93aW5nIHRoZSBWTSB0byBkbyB3aXRoIHRoZSBwYWdlIGFzIGl0IHBsZWFzZXMuICBBbHNvLCBhdCB1bW91bnQKLQkgIHRpbWUsIG5vdyBvbmx5IHRocm93IGF3YXkgZGlydHkgbWZ0IChtZXRhKWRhdGEgcGFnZXMgaWYgZGlydHkgaW5vZGVzCi0JICBhcmUgcHJlc2VudCBhbmQgYXNrIHRoZSB1c2VyIHRvIGVtYWlsIHVzIGlmIHRoZXkgc2VlIHRoaXMgaGFwcGVuaW5nLgotCS0gQWRkIGZ1bmN0aW9ucyBudGZzX3tjbGVhcixzZXR9X3ZvbHVtZV9mbGFncygpLCB0byBtb2RpZnkgdGhlIHZvbHVtZQotCSAgaW5mb3JtYXRpb24gZmxhZ3MgKGZzL250ZnMvc3VwZXIuYykuCi0JLSBNYXJrIHRoZSB2b2x1bWUgZGlydHkgd2hlbiAocmUpbW91bnRpbmcgcmVhZC13cml0ZSBhbmQgbWFyayBpdCBjbGVhbgotCSAgd2hlbiB1bm1vdW50aW5nIG9yIHJlbW91bnRpbmcgcmVhZC1vbmx5LiAgSWYgYW55IHZvbHVtZSBlcnJvcnMgYXJlCi0JICBmb3VuZCwgdGhlIHZvbHVtZSBpcyBsZWZ0IG1hcmtlZCBkaXJ0eSB0byBmb3JjZSBjaGtkc2sgdG8gcnVuLgotCS0gQWRkIGNvZGUgdG8gc2V0IHRoZSBOVDQgY29tcGF0aWJpbGl0eSBmbGFnIHdoZW4gKHJlKW1vdW50aW5nCi0JICByZWFkLXdyaXRlIGZvciBuZXdlciBOVEZTIHZlcnNpb25zIGJ1dCBsZWF2ZSBpdCBjb21tZW50ZWQgb3V0IGZvciBub3cKLQkgIHNpbmNlIHdlIGRvIG5vdCBtYWtlIGFueSBtb2RpZmljYXRpb25zIHRoYXQgYXJlIE5URlMgMS4yIHNwZWNpZmljIHlldAotCSAgYW5kIHNpbmNlIHNldHRpbmcgdGhpcyBmbGFnIGJyZWFrcyBDYXB0aXZlLU5URlMgd2hpY2ggaXMgbm90IG5pY2UuCi0JICBUaGlzIGNvZGUgbXVzdCBiZSBlbmFibGVkIG9uY2Ugd2Ugc3RhcnQgd3JpdGluZyBOVEZTIDEuMiBzcGVjaWZpYwotCSAgY2hhbmdlcyBvdGhlcndpc2UgV2luZG93cyBOVEZTIGRyaXZlciBtaWdodCBjcmFzaCAvIGNhdXNlIGNvcnJ1cHRpb24uCi0KLTIuMS4xMiAtIEZpeCB0aGUgc2Vjb25kIGZpeCB0byB0aGUgZGVjb21wcmVzc2lvbiBlbmdpbmUgYW5kIHNvbWUgY2xlYW51cHMuCi0KLQktIEFkZCBhIG5ldyBhZGRyZXNzIHNwYWNlIG9wZXJhdGlvbnMgc3RydWN0LCBudGZzX21zdF9hb3BzLCBmb3IgbXN0Ci0JICBwcm90ZWN0ZWQgYXR0cmlidXRlcy4gIFRoaXMgaXMgYmVjYXVzZSB0aGUgZGVmYXVsdCBudGZzX2FvcHMgZG8gbm90Ci0JICBtYWtlIHNlbnNlIHdpdGggbXN0IHByb3RlY3RlZCBkYXRhIGFuZCB3ZXJlIHRoZXkgdG8gd3JpdGUgYW55dGhpbmcgdG8KLQkgIHN1Y2ggYW4gYXR0cmlidXRlIHRoZXkgd291bGQgY2F1c2UgZGF0YSBjb3JydXB0aW9uIHNvIHdlIHByb3ZpZGUKLQkgIG50ZnNfbXN0X2FvcHMgd2hpY2ggZG9lcyBub3QgaGF2ZSBhbnkgd3JpdGUgcmVsYXRlZCBvcGVyYXRpb25zIHNldC4KLQktIENsZWFudXAgZGlydHkgbnRmcyBpbm9kZSBoYW5kbGluZyAoZnMvbnRmcy9pbm9kZS5baGNdKSB3aGljaCBhbHNvCi0JICBpbmNsdWRlcyBhbiBhZGFwdGVkIG50ZnNfY29tbWl0X2lub2RlKCkgYW5kIGFuIGltcGxlbWVudGF0aW9uIG9mCi0JICBudGZzX3dyaXRlX2lub2RlKCkgd2hpY2ggZm9yIG5vdyBqdXN0IGNsZWFucyBkaXJ0eSBpbm9kZXMgd2l0aG91dAotCSAgd3JpdGluZyB0aGVtIChpdCBkb2VzIGVtaXQgYSB3YXJuaW5nIHRoYXQgdGhpcyBpcyBoYXBwZW5pbmcpLgotCS0gVW5kbyB0aGUgc2Vjb25kIGRlY29tcHJlc3Npb24gZW5naW5lIGZpeCAoc2VlIDIuMS45IHJlbGVhc2UgQ2hhbmdlTG9nCi0JICBlbnRyeSkgYXMgaXQgd2FzIG9ubHkgZml4aW5nIGEgdGhlb3JldGljYWwgYnVnIGJ1dCBhdCB0aGUgc2FtZSB0aW1lCi0JICBpdCBiYWRseSBicm9rZSB0aGUgaGFuZGxpbmcgb2Ygc3BhcnNlIGFuZCB1bmNvbXByZXNzZWQgY29tcHJlc3Npb24KLQkgIGJsb2Nrcy4KLQotMi4xLjExIC0gRHJpdmVyIGludGVybmFsIGNsZWFudXBzLgotCi0JLSBPbmx5IGJ1aWxkIGxvZ2ZpbGUubyBpZiBidWlsZGluZyB0aGUgZHJpdmVyIHdpdGggcmVhZC13cml0ZSBzdXBwb3J0LgotCS0gUmVhbGx5IGZpbmFsIHdoaXRlIHNwYWNlIGNsZWFudXBzLgotCS0gVXNlIGdlbmVyaWNfZmZzKCkgaW5zdGVhZCBvZiBmZnMoKSBpbiBsb2dmaWxlLmMgd2hpY2ggYWxsb3dzIHRoZQotCSAgbG9nX3BhZ2Vfc2l6ZSB2YXJpYWJsZSB0byBiZSBvcHRpbWl6ZWQgYnkgZ2NjIGludG8gYSBjb25zdGFudC4KLQktIFJlbmFtZSB1Y2hhcl90IHRvIG50ZnNjaGFyIGV2ZXJ5d2hlcmUgYXMgdWNoYXJfdCBpcyB1bnNpZ25lZCAxLWJ5dGUKLQkgIGNoYXIgYXMgZGVmaW5lZCBieSBQT1NJWCBhbmQgYXMgZm91bmQgb24gc29tZSBzeXN0ZW1zLgotCi0yLjEuMTAgLSBGb3JjZSByZWFkLW9ubHkgKHJlKW1vdW50aW5nIG9mIHZvbHVtZXMgd2l0aCB1bnN1cHBvcnRlZCB2b2x1bWUgZmxhZ3MuCi0KLQktIEZpbmlzaCBvZmYgdGhlIHdoaXRlIHNwYWNlIGNsZWFudXBzIChyZW1vdmUgdHJhaWxpbmcgc3BhY2VzLCBldGMpLgotCS0gQ2xlYW4gdXAgbnRmc19maWxsX3N1cGVyKCkgYW5kIG50ZnNfcmVhZF9pbm9kZV9tb3VudCgpIGJ5IHJlbW92aW5nCi0JICB0aGUga2x1ZGdlcyBhcm91bmQgdGhlIGZpcnN0IGlnZXQoKS4gIEluc3RlYWQgb2YgKHJlKXNldHRpbmcgLT5zX29wCi0JICB3ZSBoYXZlIHRoZSAkTUZUIGlub2RlIHNldCB1cCBieSBleHBsaWNpdCBuZXdfaW5vZGUoKSAvIHNldCAtPmlfaW5vIC8KLQkgIGluc2VydF9pbm9kZV9oYXNoKCkgLyBjYWxsIG50ZnNfcmVhZF9pbm9kZV9tb3VudCgpIGRpcmVjdGx5LiAgVGhpcwotCSAga2lsbHMgdGhlIG5lZWQgZm9yIHNlY29uZCBzdXBlcl9vcGVyYXRpb25zIGFuZCBhbGxvd3MgdG8gcmV0dXJuIGVycm9yCi0JICBmcm9tIG50ZnNfcmVhZF9pbm9kZV9tb3VudCgpIHdpdGhvdXQgcmVzb3J0aW5nIHRvIHVnbHkgInBvaXNvbmluZyIKLQkgIHRyaWNrcy4gIChBbCBWaXJvKQotCS0gRm9yY2UgcmVhZC1vbmx5IChyZSltb3VudGluZyBpZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBiaXRzIGFyZSBzZXQgaW4KLQkgIHRoZSB2b2x1bWUgaW5mb3JtYXRpb24gZmxhZ3M6Ci0JICAJVk9MVU1FX0lTX0RJUlRZLCBWT0xVTUVfUkVTSVpFX0xPR19GSUxFLAotCQlWT0xVTUVfVVBHUkFERV9PTl9NT1VOVCwgVk9MVU1FX0RFTEVURV9VU05fVU5ERVJXQVksCi0JCVZPTFVNRV9SRVBBSVJfT0JKRUNUX0lELCBWT0xVTUVfTU9ESUZJRURfQllfQ0hLRFNLCi0JICBUbyBtYWtlIHRoaXMgZWFzaWVyIHdlIGRlZmluZSBWT0xVTUVfTVVTVF9NT1VOVF9ST19NQVNLIHdpdGggYWxsIHRoZQotCSAgYWJvdmUgYml0cyBzZXQgc28gdGhlIHRlc3QgaXMgbWFkZSBlYXN5LgotCi0yLjEuOSAtIEZpeCB0d28gYnVncyBpbiBkZWNvbXByZXNzaW9uIGVuZ2luZS4KLQotCS0gRml4IGEgYnVnIHdoZXJlIHdlIHdvdWxkIG5vdCBhbHdheXMgZGV0ZWN0IHRoYXQgd2UgaGF2ZSByZWFjaGVkIHRoZQotCSAgZW5kIG9mIGEgY29tcHJlc3Npb24gYmxvY2sgYmVjYXVzZSB3ZSB3ZXJlIGVuZGluZyBhdCBtaW51cyBvbmUgYnl0ZQotCSAgd2hpY2ggaXMgZWZmZWN0aXZlbHkgdGhlIHNhbWUgYXMgYmVpbmcgYXQgdGhlIGVuZC4gIFRoZSBmaXggaXMgdG8KLQkgIGNoZWNrIHdoZXRoZXIgdGhlIHVuY29tcHJlc3NlZCBidWZmZXIgaGFzIGJlZW4gZnVsbHkgZmlsbGVkIGFuZCBpZiBzbwotCSAgd2UgYXNzdW1lIHdlIGhhdmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBjb21wcmVzc2lvbiBibG9jay4gIEEgYmlnCi0JICB0aGFuayB5b3UgdG8gTWFyY2luIEdpYnXFgmEgZm9yIHRoZSBidWcgcmVwb3J0LCB0aGUgYXNzaXN0YW5jZSBpbgotCSAgdHJhY2tpbmcgZG93biB0aGUgYnVnIGFuZCB0ZXN0aW5nIHRoZSBmaXguCi0JLSBGaXggYSBwb3NzaWJsZSBidWcgd2hlcmUgd2hlbiBhIGNvbXByZXNzZWQgcmVhZCBpcyB0cnVuY2F0ZWQgdG8gdGhlCi0JICBlbmQgb2YgdGhlIGZpbGUsIHRoZSBvZmZzZXQgaW5zaWRlIHRoZSBsYXN0IHBhZ2Ugd2FzIG5vdCB0cnVuY2F0ZWQuCi0KLTIuMS44IC0gSGFuZGxlICRNRlQgbWlycm9yIGFuZCAkTG9nRmlsZSwgaW1wcm92ZSB0aW1lIGhhbmRsaW5nLCBhbmQgY2xlYW51cHMuCi0KLQktIFVzZSBnZXRfYmgoKSBpbnN0ZWFkIG9mIG1hbnVhbCBhdG9taWNfaW5jKCkgaW4gZnMvbnRmcy9jb21wcmVzcy5jLgotCS0gTW9kaWZ5IGZzL250ZnMvdGltZS5jOjpudGZzMnV0YygpLCBnZXRfY3VycmVudF9udGZzX3RpbWUoKSwgYW5kCi0JICB1dGMybnRmcygpIHRvIHdvcmsgd2l0aCBzdHJ1Y3QgdGltZXNwZWMgaW5zdGVhZCBvZiB0aW1lX3Qgb24gdGhlCi0JICBMaW51eCBVVEMgdGltZSBzaWRlIHRodXMgcHJlc2VydmluZyB0aGUgZnVsbCBwcmVjaXNpb24gb2YgdGhlIE5URlMKLQkgIHRpbWUgYW5kIG9ubHkgbG9vc2luZyB1cCB0byA5OSBuYW5vLXNlY29uZHMgaW4gdGhlIExpbnV4IFVUQyB0aW1lLgotCS0gTW92ZSBmcy9udGZzL3RpbWUuYyB0byBmcy9udGZzL3RpbWUuaCBhbmQgbWFrZSB0aGUgdGltZSBmdW5jdGlvbnMKLQkgIHN0YXRpYyBpbmxpbmUuCi0JLSBSZW1vdmUgdW51c2VkIG50ZnNfZGlydHlfaW5vZGUoKS4KLQktIENsZWFudXAgc3VwZXIgb3BlcmF0aW9ucyBkZWNsYXJhdGlvbiBpbiBmcy9udGZzL3N1cGVyLmMuCi0JLSBXcmFwIGZsdXNoX2RjYWNoZV9tZnRfcmVjb3JkX3BhZ2UoKSBpbiAjaWZkZWYgTlRGU19SVy4KLQktIEFkZCBOSW5vVGVzdFNldEZvbygpIGFuZCBOSW5vVGVzdENsZWFyRm9vKCkgbWFjcm8gbWFnaWMgdG8KLQkgIGZzL250ZnMvaW5vZGUuaCBhbmQgdXNlIGl0IHRvIGRlY2xhcmUgTklub1Rlc3R7U2V0LENsZWFyfURpcnR5LgotCS0gTW92ZSB0eXBlZGVmcyBmb3IgbnRmc19hdHRyIGFuZCB0ZXN0X3QgZnJvbSBmcy9udGZzL2lub2RlLmMgdG8KLQkgIGZzL250ZnMvaW5vZGUuaCBzbyB0aGV5IGNhbiBiZSB1c2VkIGVsc2V3aGVyZS4KLQktIERldGVybWluZSB0aGUgbWZ0IG1pcnJvciBzaXplIGFzIHRoZSBudW1iZXIgb2YgbWlycm9yZWQgbWZ0IHJlY29yZHMKLQkgIGFuZCBzdG9yZSBpdCBpbiBudGZzX3ZvbHVtZS0+bWZ0bWlycl9zaXplIChmcy9udGZzL3N1cGVyLmMpLgotCS0gTG9hZCB0aGUgbWZ0IG1pcnJvciBhdCBtb3VudCB0aW1lIGFuZCBjb21wYXJlIHRoZSBtZnQgcmVjb3JkcyBzdG9yZWQKLQkgIGluIGl0IHRvIHRoZSBvbmVzIGluIHRoZSBtZnQuICBGb3JjZSBhIHJlYWQtb25seSBtb3VudCBpZiB0aGUgdHdvIGRvCi0JICBub3QgbWF0Y2ggKGZzL250ZnMvc3VwZXIuYykuCi0JLSBGaXggdHlwZSBjYXN0aW5nIHJlbGF0ZWQgd2FybmluZ3Mgb24gNjQtYml0IGFyY2hpdGVjdHVyZXMuICBUaGFua3MKLQkgIHRvIE1lZWxpcyBSb29zIGZvciByZXBvcnRpbmcgdGhlbS4KLQktIE1vdmUgJUwgdG8gJWxsIGFzICVMIGlzIGZsb2F0aW5nIHBvaW50IGFuZCAlbGwgaXMgaW50ZWdlciB3aGljaCBpcwotCSAgd2hhdCB3ZSB3YW50LgotCS0gUmVhZCB0aGUgam91cm5hbCAoJExvZ0ZpbGUpIGFuZCBkZXRlcm1pbmUgaWYgdGhlIHZvbHVtZSBoYXMgYmVlbgotCSAgc2h1dGRvd24gY2xlYW5seSBhbmQgZm9yY2UgYSByZWFkLW9ubHkgbW91bnQgaWYgbm90IChmcy9udGZzL3N1cGVyLmMKLQkgIGFuZCBmcy9udGZzL2xvZ2ZpbGUuYykuICBUaGlzIGlzIGEgbGl0dGxlIGJpdCBvZiBhIGNydWRlIGNoZWNrIGluCi0JICB0aGF0IHdlIG9ubHkgbG9vayBhdCB0aGUgcmVzdGFydCBhcmVhcyBhbmQgbm90IGF0IHRoZSBhY3R1YWwgbG9nCi0JICByZWNvcmRzIHNvIHRoYXQgdGhlcmUgd2lsbCBiZSBhIHZlcnkgc21hbGwgbnVtYmVyIG9mIGNhc2VzIHdoZXJlIHdlCi0JICB0aGluayB0aGF0IGEgdm9sdW1lIGlzIGRpcnR5IHdoZW4gaW4gZmFjdCBpdCBpcyBjbGVhbi4gIFRoaXMgc2hvdWxkCi0JICBvbmx5IGFmZmVjdCB2b2x1bWVzIHRoYXQgaGF2ZSBub3QgYmVlbiBzaHV0ZG93biBjbGVhbmx5IGFuZCBkaWQgbm90Ci0JICBoYXZlIGFueSBwZW5kaW5nLCBub24tY2hlY2stcG9pbnRlZCBpL28uCi0JLSBJZiB0aGUgJExvZ0ZpbGUgaW5kaWNhdGVzIGEgY2xlYW4gc2h1dGRvd24gYW5kIGEgcmVhZC13cml0ZSAocmUpbW91bnQKLQkgIGlzIHJlcXVlc3RlZCwgZW1wdHkgJExvZ0ZpbGUgYnkgb3ZlcndyaXRpbmcgaXQgd2l0aCAweGZmIGJ5dGVzIHRvCi0JICBlbnN1cmUgdGhhdCBXaW5kb3dzIGNhbm5vdCBjYXVzZSBkYXRhIGNvcnJ1cHRpb24gYnkgcmVwbGF5aW5nIGEgc3RhbGUKLQkgIGpvdXJuYWwgYWZ0ZXIgTGludXggaGFzIHdyaXR0ZW4gdG8gdGhlIHZvbHVtZS4KLQotMi4xLjcgLSBFbmFibGUgTkZTIGV4cG9ydGluZyBvZiBtb3VudGVkIE5URlMgdm9sdW1lcy4KLQotCS0gU2V0IGlfZ2VuZXJhdGlvbiBpbiB0aGUgVkZTIGlub2RlIGZyb20gdGhlIHNlcV9ubyBvZiB0aGUgTlRGUyBpbm9kZS4KLQktIE1ha2UgbnRmc19sb29rdXAoKSBORlMgZXhwb3J0IHNhZmUsIGkuZS4gdXNlIGRfc3BsaWNlX2FsaWFzKCksIGV0Yy4KLQktIEltcGxlbWVudCAtPmdldF9kZW50cnkoKSBpbiBmcy9udGZzL25hbWVpLmM6Om50ZnNfZ2V0X2RlbnRyeSgpIGFzIHRoZQotCSAgZGVmYXVsdCBkb2Vzbid0IGFsbG93IGlub2RlIG51bWJlciAwIHdoaWNoIGlzIGEgdmFsaWQgaW5vZGUgb24gTlRGUwotCSAgYW5kIGV2ZW4gaWYgaXQgZGlkIGFsbG93IHRoYXQgaXQgdXNlcyBpZ2V0KCkgaW5zdGVhZCBvZiBudGZzX2lnZXQoKQotCSAgd2hpY2ggbWFrZXMgaXQgdXNlbGVzcyBmb3IgdXMuCi0JLSBJbXBsZW1lbnQgLT5nZXRfcGFyZW50KCkgaW4gZnMvbnRmcy9uYW1laS5jOjpudGZzX2dldF9wYXJlbnQoKSBhcyB0aGUKLQkgIGRlZmF1bHQganVzdCByZXR1cm5zIC1FQUNDRVMgd2hpY2ggaXMgbm90IHZlcnkgdXNlZnVsLgotCS0gRGVmaW5lIGV4cG9ydCBvcGVyYXRpb25zICgtPnNfZXhwb3J0X29wKSBmb3IgTlRGUyAobnRmc19leHBvcnRfb3BzKQotCSAgYW5kIHNldCB0aGVtIHVwIGluIHRoZSBzdXBlciBibG9jayBhdCBtb3VudCB0aW1lIChzdXBlci5jKSB0aGlzCi0JICBhbGxvd3MgbW91bnRlZCBOVEZTIHZvbHVtZXMgdG8gYmUgZXhwb3J0ZWQgdmlhIE5GUy4KLQktIEFkZCBtaXNzaW5nIHJldHVybiAtRU9QTk9UU1VQUDsgaW4KLQkgIGZzL250ZnMvYW9wcy5jOjpudGZzX2NvbW1pdF9ub25yZXNpZGVudF93cml0ZSgpLgotCS0gRW5mb3JjZSBubyBhdGltZSBhbmQgbm8gZGlyIGF0aW1lIHVwZGF0ZXMgYXQgbW91bnQvcmVtb3VudCB0aW1lIGFzCi0JICB0aGV5IGFyZSBub3QgaW1wbGVtZW50ZWQgeWV0IGFueXdheS4KLQktIE1vdmUgYSBmZXcgYXNzaWdubWVudHMgaW4gZnMvbnRmcy9hdHRyaWIuYzo6bG9hZF9hdHRyaWJ1dGVfbGlzdCgpIHRvCi0JICBhZnRlciBhIE5VTEwgY2hlY2suICBUaGFua3MgdG8gRGF2ZSBKb25lcyBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuCi0KLTIuMS42IC0gRml4IG1pbm9yIGJ1ZyBpbiBoYW5kbGluZyBvZiBjb21wcmVzc2VkIGRpcmVjdG9yaWVzLgotCi0JLSBGaXggYnVnIGluIGhhbmRsaW5nIG9mIGNvbXByZXNzZWQgZGlyZWN0b3JpZXMuICBBIGNvbXByZXNzZWQKLQkgIGRpcmVjdG9yeSBpcyBub3QgcmVhbGx5IGNvbXByZXNzZWQgc28gd2hlbiB3ZSBzZXQgdGhlIC0+aV9ibG9ja3MKLQkgIGZpZWxkIG9mIGEgY29tcHJlc3NlZCBkaXJlY3RvcnkgaW5vZGUgd2Ugd2VyZSBzZXR0aW5nIGl0IGZyb20gdGhlCi0JICBub24tZXhpc3RpbmcgZmllbGQgbmktPml0eXBlLmNvbXByZXNzZWQuc2l6ZSB3aGljaCBnYXZlIHJhbmRvbQotCSAgcmVzdWx0cy4uLiAgRm9yIGRpcmVjdG9yaWVzIHdlIG5vdyBhbHdheXMgdXNlIG5pLT5hbGxvY2F0ZWRfc2l6ZS4KLQotMi4xLjUgLSBGaXggbWlub3IgYnVnIGluIGF0dHJpYnV0ZSBsaXN0IGF0dHJpYnV0ZSBoYW5kbGluZy4KLQotCS0gRml4IGJ1ZyBpbiBhdHRyaWJ1dGUgbGlzdCBoYW5kbGluZy4gIEFjdHVhbGx5IGl0IGlzIG5vdCBhcyBtdWNoIGEgYnVnCi0JICBhcyB0b28gbXVjaCBwcm90ZWN0aW9uIGluIHRoYXQgd2Ugd2VyZSBub3QgYWxsb3dpbmcgYXR0cmlidXRlIGxpc3RzCi0JICB3aGljaCB3YXN0ZSBzcGFjZSBvbiBkaXNrIHdoaWxlIFdpbmRvd3MgWFAgY2xlYXJseSBhbGxvd3MgaXQgYW5kIGluCi0JICBmYWN0IGNyZWF0ZXMgc3VjaCBhdHRyaWJ1dGUgbGlzdHMgc28gb3VyIGRyaXZlciB3YXMgZmFpbGluZy4KLQktIFVwZGF0ZSBOVEZTIGRvY3VtZW50YXRpb24gcmVhZHkgZm9yIDIuNiBrZXJuZWwgcmVsZWFzZS4KLQotMi4xLjQgLSBSZWR1Y2UgY29tcGlsZXIgcmVxdWlyZW1lbnRzLgotCi0JLSBSZW1vdmUgYWxsIHVzZXMgb2YgdW5uYW1lZCBzdHJ1Y3RzIGFuZCB1bmlvbnMgaW4gdGhlIGRyaXZlciB0byBtYWtlCi0JICBvbGQgYW5kIG5ld2VyIGdjYyB2ZXJzaW9ucyBoYXBweS4gTWFrZXMgaXQgYSBiaXQgdWdsaWVyIElNTyBidXQgYXQKLQkgIGxlYXN0IHBlb3BsZSB3aWxsIHN0b3AgaGFzc2xpbmcgbWUgYWJvdXQgaXQuCi0KLTIuMS4zIC0gSW1wb3J0YW50IGJ1ZyBmaXhlcyBpbiBjb3JuZXIgY2FzZXMuCi0KLQktIHN1cGVyLmM6OnBhcnNlX250ZnNfYm9vdF9zZWN0b3IoKTogQ29ycmVjdCB0aGUgY2hlY2sgZm9yIDY0LWJpdAotCSAgY2x1c3RlcnMuIChQaGlsaXBwIFRob21hcykKLQktIGF0dHJpYi5jOjpsb2FkX2F0dHJpYnV0ZV9saXN0KCk6IEZpeCBidWcgd2hlbiBpbml0aWFsaXplZF9zaXplIGlzIGEKLQkgIG11bHRpcGxlIG9mIHRoZSBibG9ja19zaXplIGJ1dCBub3QgdGhlIGNsdXN0ZXIgc2l6ZS4gKFN6YWJvbGNzCi0JICBTemFrYWNzaXRzKQotCi0yLjEuMiAtIEltcG9ydGFudCBidWcgZml4ZXMgYWxldmlhdGluZyB0aGUgaGFuZ3MgaW4gc3RhdGZzLgotCi0JLSBGaXggYnVnZ3kgZnJlZSBjbHVzdGVyIGFuZCBmcmVlIGlub2RlIGRldGVybWluYXRpb24gbG9naWMuCi0KLTIuMS4xIC0gTWlub3IgdXBkYXRlcy4KLQotCS0gQWRkIGhhbmRsaW5nIGZvciBpbml0aWFsaXplZF9zaXplICE9IGRhdGFfc2l6ZSBpbiBjb21wcmVzc2VkIGZpbGVzLgotCS0gUmVkdWNlIGZ1bmN0aW9uIGxvY2FsIHN0YWNrIHVzYWdlIGZyb20gMHgzZDQgYnl0ZXMgdG8ganVzdCBub2lzZSBpbgotCSAgZnMvbnRmcy91cGNhc2UuYy4gKFJhbmR5IER1bmxhcCkKLQktIFJlbW92ZSBjb21waWxlciB3YXJuaW5ncyBmb3IgbmV3ZXIgZ2NjLgotCS0gUGFnZXMgYXJlIG5vIGxvbmdlciBrbWFwcGVkIGJ5IG1tL2ZpbGVtYXAuYzo6Z2VuZXJpY19maWxlX3dyaXRlKCkKLQkgIGFyb3VuZCBjYWxscyB0byAtPntwcmVwYXJlLGNvbW1pdH1fd3JpdGUuICBBZGFwdCBOVEZTIGFwcHJvcHJpYXRlbHkKLQkgIGluIGZzL250ZnMvYW9wcy5jOjpudGZzX3ByZXBhcmVfbm9ucmVzaWRlbnRfd3JpdGUoKSBieSB1c2luZwotCSAga21hcF9hdG9taWMoS01fVVNFUjApLgotCi0yLjEuMCAtIEZpcnN0IHN0ZXBzIHRvd2FyZHMgd3JpdGUgc3VwcG9ydDogaW1wbGVtZW50IGZpbGUgb3ZlcndyaXRlLgotCi0JLSBBZGQgY29uZmlndXJhdGlvbiBvcHRpb24gZm9yIGRldmVsb3BtZW50YWwgd3JpdGUgc3VwcG9ydCB3aXRoIGFuCi0JICBhcHByb3ByaWF0ZWx5IHNjYXJ5IGNvbmZpZ3VyYXRpb24gaGVscCB0ZXh0LgotCS0gSW5pdGlhbCBpbXBsZW1lbnRhdGlvbiBvZiBmcy9udGZzL2FvcHMuYzo6bnRmc193cml0ZXBhZ2UoKSBhbmQgaXRzCi0JICBoZWxwZXIgZnMvbnRmcy9hb3BzLmM6Om50ZnNfd3JpdGVfYmxvY2soKS4gVGhpcyBlbmFibGVzIG1tYXAoMikgYmFzZWQKLQkgIG92ZXJ3cml0aW5nIG9mIGV4aXN0aW5nIGZpbGVzIG9uIG50ZnMuIE5vdGU6IFJlc2lkZW50IGZpbGVzIGFyZQotCSAgb25seSB3cml0dGVuIGludG8gbWVtb3J5LCBhbmQgbm90IHdyaXR0ZW4gb3V0IHRvIGRpc2sgYXQgcHJlc2VudCwgc28KLQkgIGF2b2lkIHdyaXRpbmcgdG8gZmlsZXMgc21hbGxlciB0aGFuIGFib3V0IDFraUIuCi0JLSBJbml0aWFsIGltcGxlbWVudGF0aW9uIG9mIGZzL250ZnMvYW9wcy5jOjpudGZzX3ByZXBhcmVfd3JpdGUoKSwgaXRzCi0JICBoZWxwZXIgZnMvbnRmcy9hb3BzLmM6Om50ZnNfcHJlcGFyZV9ub25yZXNpZGVudF93cml0ZSgpIGFuZCB0aGVpcgotCSAgY291bnRlcnBhcnRzLCBmcy9udGZzL2FvcHMuYzo6bnRmc19jb21taXRfd3JpdGUoKSwgYW5kCi0JICBmcy9udGZzL2FvcHMuYzo6bnRmc19jb21taXRfbm9ucmVzaWRlbnRfd3JpdGUoKSwgcmVzcGVjdGl2ZWx5LiBBbHNvLAotCSAgYWRkIGdlbmVyaWNfZmlsZV93cml0ZSgpIHRvIHRoZSBudGZzIGZpbGUgb3BlcmF0aW9ucyAoZnMvbnRmcy9maWxlLmMpLgotCSAgVGhpcyBlbmFibGVzIHdyaXRlKDIpIGJhc2VkIG92ZXJ3cml0aW5nIG9mIGV4aXN0aW5nIGZpbGVzIG9uIG50ZnMuCi0JICBOb3RlOiBBcyB3aXRoIG1tYXAoMikgYmFzZWQgb3ZlcndyaXRpbmcsIHJlc2lkZW50IGZpbGVzIGFyZSBvbmx5Ci0JICB3cml0dGVuIGludG8gbWVtb3J5LCBhbmQgbm90IHdyaXR0ZW4gb3V0IHRvIGRpc2sgYXQgcHJlc2VudCwgc28gYXZvaWQKLQkgIHdyaXRpbmcgdG8gZmlsZXMgc21hbGxlciB0aGFuIGFib3V0IDFraUIuCi0JLSBJbXBsZW1lbnQgLT50cnVuY2F0ZSAoZnMvbnRmcy9pbm9kZS5jOjpudGZzX3RydW5jYXRlKCkpIGFuZAotCSAgLT5zZXRhdHRyKCkgKGZzL250ZnMvaW5vZGUuYzo6bnRmc19zZXRhdHRyKCkpIGlub2RlIG9wZXJhdGlvbnMgZm9yCi0JICBmaWxlcyB3aXRoIHRoZSBwdXJwb3NlIG9mIGludGVyY2VwdGluZyBhbmQgYWJvcnRpbmcgYWxsIGlfc2l6ZQotCSAgY2hhbmdlcyB3aGljaCB3ZSBkbyBub3Qgc3VwcG9ydCB5ZXQuIG50ZnNfdHJ1bmNhdGUoKSBhY3R1YWxseSBvbmx5Ci0JICBlbWl0cyBhIHdhcm5pbmcgbWVzc2FnZSBidXQgQUZBSUNTIG91ciBpbnRlcmNlcHRpb24gb2YgaV9zaXplIGNoYW5nZXMKLQkgIGVsc2V3aGVyZSBtZWFucyBudGZzX3RydW5jYXRlKCkgbmV2ZXIgZ2V0cyBjYWxsZWQgZm9yIGlfc2l6ZSBjaGFuZ2VzLgotCSAgSXQgaXMgb25seSBjYWxsZWQgZnJvbSBnZW5lcmljX2ZpbGVfd3JpdGUoKSB3aGVuIHdlIGZhaWwgaW4KLQkgIG50ZnNfcHJlcGFyZV97LG5vbnJlc2lkZW50X313cml0ZSgpIGluIG9yZGVyIHRvIGRpc2NhcmQgYW55Ci0JICBpbnN0YW50aWF0ZWQgYnVmZmVycyBiZXlvbmQgaV9zaXplLiBUaHVzIGlfc2l6ZSBpcyBub3QgYWN0dWFsbHkKLQkgIGNoYW5nZWQgc28gb3VyIHdhcm5pbmcgbWVzc2FnZSBpcyBlbm91Z2guIFVuZm9ydHVuYXRlbHkgaXQgaXMgbm90Ci0JICBwb3NzaWJsZSB0byBlYXNpbHkgZGV0ZXJtaW5lIGlmIGlfc2l6ZSBpcyBiZWluZyBjaGFuZ2VkIG9yIG5vdCBoZW5jZQotCSAgd2UganVzdCBlbWl0IGFuIGFwcHJvcHJpYXRlbHkgd29yZGVkIGVycm9yIG1lc3NhZ2UuCi0KLTIuMC4yNSAtIFNtYWxsIGJ1ZyBmaXhlcyBhbmQgY2xlYW51cHMuCi0KLQktIFVubG9jayB0aGUgcGFnZSBpbiBhbiBvdXQgb2YgbWVtb3J5IGVycm9yIGNvZGUgcGF0aCBpbgotCSAgZnMvbnRmcy9hb3BzLmM6Om50ZnNfcmVhZF9ibG9jaygpLgotCS0gSWYgZnMvbnRmcy9hb3BzLmM6Om50ZnNfcmVhZF9wYWdlKCkgaXMgY2FsbGVkIG9uIGFuIHVwdG9kYXRlIHBhZ2UsCi0JICBqdXN0IHVubG9jayB0aGUgcGFnZSBhbmQgcmV0dXJuLiAoVGhpcyBjYW4gaGFwcGVuIGR1ZSB0byAtPndyaXRlcGFnZQotCSAgY2xlYXJpbmcgUGFnZVVwdG9kYXRlKCkgZHVyaW5nIHdyaXRlIG91dCBvZiBNc3RQcm90ZWN0ZWQoKQotCSAgYXR0cmlidXRlcy4KLQktIFJlbW92ZSBsZWFrZWQgd3JpdGUgY29kZSBhZ2Fpbi4KLQotMi4wLjI0IC0gQ2xlYW51cHMuCi0KLQktIFRyZWF0IEJVR19PTigpIGFzIEFTU0VSVCgpIG5vdCBWRVJJRlkoKSwgaS5lLiBkbyBub3QgdXNlIHNpZGUgZWZmZWN0cwotCSAgaW5zaWRlIEJVR19PTigpLiAoQWRhbSBKLiBSaWNodGVyKQotCS0gU3BsaXQgbG9naWNhbCBPUiBleHByZXNzaW9ucyBpbnNpZGUgQlVHX09OKCkgaW50byBpbmRpdmlkdWFsIEJVR19PTigpCi0JICBjYWxscyBmb3IgaW1wcm92ZWQgZGVidWdnaW5nLiAoQWRhbSBKLiBSaWNodGVyKQotCS0gQWRkIGVycm9ycyBmbGFnIHRvIHRoZSBudGZzIHZvbHVtZSBzdGF0ZSwgYWNjZXNzZWQgdmlhCi0JICBOVm9seyxTZXQsQ2xlYXJ9RXJyb3JzKHZvbCkuCi0JLSBEbyBub3QgYWxsb3cgcmVhZC13cml0ZSByZW1vdW50cyBvZiByZWFkLW9ubHkgdm9sdW1lcyB3aXRoIGVycm9ycy4KLQktIENsYXJpZnkgY29tbWVudCBmb3IgbnRmcyBmaWxlIG9wZXJhdGlvbiBzZW5kZmlsZSB3aGljaCB3YXMgYWRkZWQgYnkKLQkgIENocmlzdG9waCBIZWxsd2lnIGEgd2hpbGUgYWdvIChqdXN0IHVzaW5nIGdlbmVyaWNfZmlsZV9zZW5kZmlsZSgpKQotCSAgdG8gc2F5IHRoYXQgbnRmcyAtPnNlbmRmaWxlIGlzIG9ubHkgdXNlZCBmb3IgdGhlIGNhc2Ugd2hlcmUgdGhlCi0JICBzb3VyY2UgZGF0YSBpcyBvbiB0aGUgbnRmcyBwYXJ0aXRpb24gYW5kIHRoZSBkZXN0aW5hdGlvbiBpcwotCSAgc29tZXdoZXJlIGVsc2UsIGkuZS4gbm90aGluZyB3ZSBuZWVkIHRvIGNvbmNlcm4gb3Vyc2VsdmVzIHdpdGguCi0JLSBBZGQgZ2VuZXJpY19maWxlX3dyaXRlKCkgYXMgb3VyIG50ZnMgZmlsZSB3cml0ZSBvcGVyYXRpb24uCi0KLTIuMC4yMyAtIE1ham9yIGJ1ZyBmaXhlcyAocmFjZXMsIGRlYWRsb2Nrcywgbm9uLWkzODYgYXJjaGl0ZWN0dXJlcykuCi0KLQktIE1hc3NpdmUgaW50ZXJuYWwgbG9ja2luZyBjaGFuZ2VzIHRvIG1mdCByZWNvcmQgbG9ja2luZy4gRml4ZXMgbG9jawotCSAgcmVjdXJzaW9uIGFuZCByZXBsYWNlcyB0aGUgbXJlY19sb2NrIHJlYWQvd3JpdGUgc2VtYXBob3JlIHdpdGggYQotCSAgbXV0ZXguIEFsc28gcmVtb3ZlcyB0aGUgbm93IHN1cGVyZmx1b3VzIG1mdF9jb3VudC4gVGhpcyBmaXhlcyBzZXZlcmFsCi0JICByYWNlIGNvbmRpdGlvbnMgYW5kIGRlYWRsb2NrcywgZXNwZWNpYWxseSBpbiB0aGUgZnV0dXJlIHdyaXRlIGNvZGUuCi0JLSBGaXggbnRmcyBvdmVyIGxvb3BiYWNrIGZvciBjb21wcmVzc2VkIGZpbGVzIGJ5IGFkZGluZyBhbgotCSAgb3B0aW1pemF0aW9uIGJhcnJpZXIuIChnY2Mgd2FzIHNjcmV3aW5nIHVwIG90aGVyd2lzZSA/KQotCS0gTWlzY2VsbGFuZW91cyBjbGVhbnVwcyBhbGwgb3ZlciB0aGUgY29kZSBhbmQgYSBmaXggb3IgdHdvIGluIGVycm9yCi0JICBoYW5kbGluZyBjb2RlIHBhdGhzLgotCVRoYW5rcyBnbyB0byBDaHJpc3RvcGggSGVsbHdpZyBmb3IgcG9pbnRpbmcgb3V0IHRoZSBmb2xsb3dpbmcgdHdvOgotCS0gUmVtb3ZlIG5vdyB1bnVzZWQgZnVuY3Rpb24gZnMvbnRmcy9tYWxsb2MuaDo6dm1hbGxvY19ub2ZzKCkuCi0JLSBGaXggbnRmc19mcmVlKCkgZm9yIGlhNjQgYW5kIHBhcmlzYyBieSBjaGVja2luZyBmb3IgVk1BTExPQ19FTkQsIHRvby4KLQotMi4wLjIyIC0gQ2xlYW51cHMsIG1haW5seSB0byBudGZzX3JlYWRkaXIoKSwgYW5kIHVzZSBDOTkgaW5pdGlhbGl6ZXJzLgotCi0JLSBDaGFuZ2UgZnMvbnRmcy9kaXIuYzo6bnRmc19yZWRkaXIoKSB0byBvbmx5IHJlYWQvd3JpdGUgLT5mX3BvcyBvbmNlCi0JICBhdCBlbnRyeS9leGl0IHJlc3BlY3RpdmVseS4KLQktIFVzZSBDOTkgaW5pdGlhbGl6ZXJzIGZvciBzdHJ1Y3R1cmVzLgotCS0gUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBibG9ja3MgZnJvbSBmcy9udGZzL2FvcHMuYzo6bnRmc19yZWFkX2Jsb2NrKCkuCi0KLTIuMC4yMSAtIENoZWNrIGZvciwgYW5kIHJlZnVzZSB0byB3b3JrIHdpdGggdG9vIGxhcmdlIGZpbGVzL2RpcmVjdG9yaWVzL3ZvbHVtZXMuCi0KLQktIExpbWl0IHZvbHVtZSBzaXplIGF0IG1vdW50IHRpbWUgdG8gMlRpQiBvbiBhcmNoaXRlY3R1cmVzIHdoZXJlCi0JICB1bnNpZ25lZCBsb25nIGlzIDMyLWJpdHMgKGZzL250ZnMvc3VwZXIuYzo6cGFyc2VfbnRmc19ib290X3NlY3RvcigpKS4KLQkgIFRoaXMgaXMgdGhlIG1vc3Qgd2UgY2FuIGRvIHdpdGhvdXQgb3ZlcmZsb3dpbmcgdGhlIDMyLWJpdCBsaW1pdCBvZgotCSAgdGhlIGJsb2NrIGRldmljZSBzaXplIGltcG9zZWQgb24gdXMgYnkgc2JfYnJlYWQoKSBhbmQgc2JfZ2V0YmxrKCkKLQkgIGZvciB0aGUgdGltZSBiZWluZy4KLQktIExpbWl0IGZpbGUvZGlyZWN0b3J5IHNpemUgYXQgb3BlbigpIHRpbWUgdG8gMTZUaUIgb24gYXJjaGl0ZWN0dXJlcwotCSAgd2hlcmUgdW5zaWduZWQgbG9uZyBpcyAzMi1iaXRzIChmcy9udGZzL2ZpbGUuYzo6bnRmc19maWxlX29wZW4oKSBhbmQKLQkgIGZzL250ZnMvZGlyLmM6Om50ZnNfZGlyX29wZW4oKSkuIFRoaXMgaXMgdGhlIG1vc3Qgd2UgY2FuIGRvIHdpdGhvdXQKLQkgIG92ZXJmbG93aW5nIHRoZSBwYWdlIGNhY2hlIHBhZ2UgaW5kZXguCi0KLTIuMC4yMCAtIFN1cHBvcnQgbm9uLXJlc2lkZW50IGRpcmVjdG9yeSBpbmRleCBiaXRtYXBzLCBmaXggcGFnZSBsZWFrIGluIHJlYWRkaXIuCi0KLQktIE1vdmUgdGhlIGRpcmVjdG9yeSBpbmRleCBiaXRtYXAgdG8gdXNlIGFuIGF0dHJpYnV0ZSBpbm9kZSBpbnN0ZWFkIG9mCi0JICBoYXZpbmcgc3BlY2lhbCBmaWVsZHMgZm9yIGl0IGluc2lkZSB0aGUgbnRmcyBpbm9kZSBzdHJ1Y3R1cmUuIFRoaXMKLQkgIG1lYW5zIHRoYXQgdGhlIGluZGV4IGJpdG1hcHMgbm93IHVzZSB0aGUgcGFnZSBjYWNoZSBmb3IgaS9vLCB0b28sCi0JICBhbmQgYWxzbyBhcyBhIHNpZGUgZWZmZWN0IHdlIGdldCBzdXBwb3J0IGZvciBub24tcmVzaWRlbnQgaW5kZXgKLQkgIGJpdG1hcHMgZm9yIGZyZWUuCi0JLSBTaW1wbGlmeS9jbGVhbnVwIGVycm9yIGhhbmRsaW5nIGluIGZzL250ZnMvZGlyLmM6Om50ZnNfcmVhZGRpcigpIGFuZAotCSAgZml4IGEgcGFnZSBsZWFrIHRoYXQgbWFuaWZlc3RlZCBpdHNlbGYgaW4gc29tZSBjYXNlcy4KLQktIEFkZCBmcy9udGZzL2lub2RlLmM6Om50ZnNfcHV0X2lub2RlKCksIHdoaWNoIHdlIG5lZWQgdG8gcmVsZWFzZSB0aGUKLQkgIGluZGV4IGJpdG1hcCBpbm9kZSBvbiB0aGUgZmluYWwgaXB1dCgpLgotCi0yLjAuMTkgLSBGaXggcmFjZSBjb25kaXRpb24sIGltcHJvdmVtZW50cywgYW5kIG9wdGltaXphdGlvbnMgaW4gaS9vIGludGVyZmFjZS4KLQotCS0gQXBwbHkgYmxvY2sgb3B0aW1pemF0aW9uIGFkZGVkIHRvIGZzL250ZnMvYW9wcy5jOjpudGZzX3JlYWRfYmxvY2soKQotCSAgdG8gZnMvbnRmcy9jb21wcmVzcy5jOjpudGZzX2ZpbGVfcmVhZF9jb21wcmVzc2VkX2Jsb2NrKCkgYXMgd2VsbC4KLQktIERyb3AgdGhlICJmaWxlIiBmcm9tIG50ZnNfZmlsZV9yZWFkX2NvbXByZXNzZWRfYmxvY2soKS4KLQktIFJlbmFtZSBmcy9udGZzL2FvcHMuYzo6bnRmc19lbmJfYnVmZmVyX3JlYWRfYXN5bmMoKSB0bwotCSAgbnRmc19lbmRfYnVmZmVyX2FzeW5jX3JlYWQoKSAobW9yZSBsaWtlIHRoZSBmcy9idWZmZXIuYyBjb3VudGVycGFydCkuCi0JLSBVcGRhdGUgbnRmc19lbmRfYnVmZmVyX2FzeW5jX3JlYWQoKSB3aXRoIHRoZSBpbXByb3ZlZCBsb2dpYyBmcm9tCi0JICBpdHMgdXBkYXRlZCBjb3VudGVycGFydCBmcy9idWZmZXIuYzo6ZW5kX2J1ZmZlcl9hc3luY19yZWFkKCkuIEFwcGx5Ci0JICBmdXJ0aGVyIGxvZ2ljIGltcHJvdmVtZW50cyB0byBiZXR0ZXIgZGV0ZXJtaW5lIHdoZW4gd2Ugc2V0IFBhZ2VFcnJvci4KLQktIFVwZGF0ZSBzdWJtaXNzaW9uIG9mIGJ1ZmZlcnMgaW4gZnMvbnRmcy9hb3BzLmM6Om50ZnNfcmVhZF9ibG9jaygpIHRvCi0JICBjaGVjayBmb3IgdGhlIGJ1ZmZlcnMgYmVpbmcgdXB0b2RhdGUgZmlyc3QgaW4gbGluZSB3aXRoIHRoZSB1cGRhdGVkCi0JICBmcy9idWZmZXIuYzo6YmxvY2tfcmVhZF9mdWxsX3BhZ2UoKS4gVGhpcyBwbHVncyBhIHNtYWxsIHJhY2UKLQkgIGNvbmRpdGlvbi4KLQotMi4wLjE4IC0gRml4IHJhY2UgY29uZGl0aW9uIGluIHJlYWRpbmcgb2YgY29tcHJlc3NlZCBmaWxlcy4KLQotCS0gVGhlcmUgd2FzIGEgbmFycm93IHdpbmRvdyBiZXR3ZWVuIGNoZWNraW5nIGEgYnVmZmVyIGhlYWQgZm9yIGJlaW5nCi0JICB1cHRvZGF0ZSBhbmQgbG9ja2luZyBpdCBpbiBudGZzX2ZpbGVfcmVhZF9jb21wcmVzc2VkX2Jsb2NrKCkuIFdlIG5vdwotCSAgbG9jayB0aGUgYnVmZmVyIGFuZCB0aGVuIGNoZWNrIHdoZXRoZXIgaXQgaXMgdXB0b2RhdGUgb3Igbm90LgotCi0yLjAuMTcgLSBDbGVhbnVwcyBhbmQgb3B0aW1pemF0aW9ucyAtIHNocmlua2luZyB0aGUgVG9EbyBsaXN0LgotCi0JLSBNb2RpZnkgZnMvbnRmcy9pbm9kZS5jOjpudGZzX3JlYWRfbG9ja2VkX2lub2RlKCkgdG8gcmV0dXJuIGFuIGVycm9yCi0JICBjb2RlIGFuZCB1cGRhdGUgY2FsbGVycywgaS5lLiBudGZzX2lnZXQoKSwgdG8gcGFzcyB0aGF0IGVycm9yIGNvZGUKLQkgIHVwIGluc3RlYWQgb2YganVzdCB1c2luZyAtRUlPLgotCS0gTW9kaWZpY2F0aW9ucyB0byBzdXBlci5jIHRvIGVuc3VyZSB0aGF0IGJvdGggbW91bnQgYW5kIHJlbW91bnQKLQkgIGNhbm5vdCBzZXQgYW55IHdyaXRlIHJlbGF0ZWQgb3B0aW9ucyB3aGVuIHRoZSBkcml2ZXIgaXMgY29tcGlsZWQKLQkgIHJlYWQtb25seS4KLQktIE9wdGltaXplIGJsb2NrIHJlc29sdXRpb24gaW4gZnMvbnRmcy9hb3BzLmM6Om50ZnNfcmVhZF9ibG9jaygpIHRvCi0JICBjYWNoZSB0aGUgY3VycmVudCBydW5saXN0IGVsZW1lbnQuIFRoaXMgc2hvdWxkIGltcHJvdmUgcGVyZm9ybWFuY2UKLQkgIHdoZW4gcmVhZGluZyB2ZXJ5IGxhcmdlIGFuZC9vciB2ZXJ5IGZyYWdtZW50ZWQgZGF0YS4KLQotMi4wLjE2IC0gQ29udmVydCBhY2Nlc3MgdG8gJE1GVC8kQklUTUFQIHRvIGF0dHJpYnV0ZSBpbm9kZSBBUEkuCi0KLQktIEZpeCBhIHN0dXBpZCBidWcgaW50cm9kdWNlZCBpbiAyLjAuMTUgd2hlcmUgd2Ugd2VyZSB1bm1hcHBpbmcgdGhlCi0JICB3cm9uZyBpbm9kZSBpbiBmcy9udGZzL2lub2RlLmM6Om50ZnNfYXR0cl9pZ2V0KCkuCi0JLSBGaXggZGVidWdnaW5nIGNoZWNrIGluIGZzL250ZnMvYW9wcy5jOjpudGZzX3JlYWRfYmxvY2soKS4KLQktIENvbnZlcnQgJE1GVC8kQklUTUFQIGFjY2VzcyB0byBhdHRyaWJ1dGUgaW5vZGUgQVBJIGFuZCByZW1vdmUgYWxsCi0JICByZW1uYW50cyBvZiB0aGUgdWdseSBtZnRibXAgYWRkcmVzcyBzcGFjZSBhbmQgb3BlcmF0aW9ucyBoYWNrLiBUaGlzCi0JICBtZWFucyB3ZSBmaW5hbGx5IGhhdmUgb25seSBvbmUgcmVhZHBhZ2UgZnVuY3Rpb24gYXMgd2VsbCBhcyBvbmx5IG9uZQotCSAgYXN5bmMgaW8gY29tcGxldGlvbiBoYW5kbGVyLiBZZXkhIFRoZSBtZnQgYml0bWFwIGlzIG5vdyBqdXN0IGFuCi0JICBhdHRyaWJ1dGUgaW5vZGUgYW5kIGlzIGFjY2Vzc2VkIGZyb20gdm9sLT5tZnRibXBfaW5vIGp1c3QgYXMgaWYgaXQKLQkgIHdlcmUgYSBub3JtYWwgZmlsZS4gRmFrZSBpbm9kZXMgcnVsZS4gKC06Ci0KLTIuMC4xNSAtIEZha2UgaW5vZGVzIGJhc2VkIGF0dHJpYnV0ZSBpL28gdmlhIHRoZSBwYWdlY2FjaGUsIGZpeGVzIGFuZCBjbGVhbnVwcy4KLQotCS0gRml4IHNpbGx5IGJ1ZyBpbiBmcy9udGZzL3N1cGVyLmM6OnBhcnNlX29wdGlvbnMoKSB3aGljaCB3YXMgY2F1c2luZwotCSAgcmVtb3VudHMgdG8gZmFpbCB3aGVuIHRoZSBwYXJ0aXRpb24gaGFkIGFuIGVudHJ5IGluIC9ldGMvZnN0YWIgYW5kCi0JICB0aGUgZW50cnkgc3BlY2lmaWVkIHRoZSBubHM9IG9wdGlvbi4KLQktIEFwcGx5IHNhbWUgbWFjcm8gbWFnaWMgdXNlZCBpbiBmcy9udGZzL2lub2RlLmggdG8gZnMvbnRmcy92b2x1bWUuaCB0bwotCSAgZXhwYW5kIGFsbCB0aGUgaGVscGVyIGZ1bmN0aW9ucyBOVm9sRm9vKCksIE5Wb2xTZXRGb28oKSwgYW5kCi0JICBOVm9sQ2xlYXJGb28oKS4KLQktIE1vdmUgY29weXJpZ2h0IHN0YXRlbWVudCBmcm9tIGRyaXZlciBpbml0aWFsaXNhdGlvbiBtZXNzYWdlIHRvCi0JICBtb2R1bGUgZGVzY3JpcHRpb24gKGZzL3N1cGVyLmMpLiBUaGlzIG1ha2VzIHRoZSBpbml0aWFsaXNhdGlvbgotCSAgbWVzc2FnZSBmaXQgb24gb25lIGxpbmUgYW5kIGZpdHMgaW4gYmV0dGVyIHdpdGggcmVzdCBvZiBrZXJuZWwuCi0JLSBVcGRhdGUgZnMvbnRmcy9hdHRyaWIuYzo6bWFwX3J1bl9saXN0KCkgdG8gd29yayBvbiBib3RoIHJlYWwgYW5kCi0JICBhdHRyaWJ1dGUgaW5vZGVzLCBhbmQgYm90aCBmb3IgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgotCS0gSW1wbGVtZW50IGZha2UgYXR0cmlidXRlIGlub2RlcyBhbGxvd2luZyBhbGwgYXR0cmlidXRlIGkvbyB0byBnbyB2aWEKLQkgIHRoZSBwYWdlIGNhY2hlIGFuZCB0byB1c2UgYWxsIHRoZSBub3JtYWwgdmZzL21tIGZ1bmN0aW9uYWxpdHk6Ci0JICAtIEFkZCBudGZzX2F0dHJfaWdldCgpIGFuZCBpdHMgaGVscGVyIG50ZnNfcmVhZF9sb2NrZWRfYXR0cl9pbm9kZSgpCi0JICAgIHRvIGZzL250ZnMvaW5vZGUuYy4KLQkgIC0gQWRkIG5lZWRlZCBjbGVhbnVwIGNvZGUgdG8gbnRmc19jbGVhcl9iaWdfaW5vZGUoKS4KLQktIE1lcmdlIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucyBmb3IgZmlsZXMgYW5kIGRpcmVjdG9yaWVzIChhb3BzLmMpLAotCSAgbm93IGp1c3QgaGF2ZSBudGZzX2FvcHM6Ci0JICAtIFJlbmFtZToKLQkJZW5kX2J1ZmZlcl9yZWFkX2F0dHJfYXN5bmMoKSAtPgludGZzX2VuZF9idWZmZXJfcmVhZF9hc3luYygpLAotCQludGZzX2F0dHJfcmVhZF9ibG9jaygpCSAgICAgLT4JbnRmc19yZWFkX2Jsb2NrKCksCi0JCW50ZnNfZmlsZV9yZWFkX3BhZ2UoKQkgICAgIC0+CW50ZnNfcmVhZHBhZ2UoKS4KLQkgIC0gUmV3cml0ZSBmcy9udGZzL2FvcHMuYzo6bnRmc19yZWFkcGFnZSgpIHRvIHdvcmsgb24gYm90aCByZWFsIGFuZAotCSAgICBhdHRyaWJ1dGUgaW5vZGVzLCBhbmQgYm90aCBmb3IgZmlsZXMgYW5kIGRpcmVjdG9yaWVzLgotCSAgLSBSZW1vdmUgb2Jzb2xldGUgZnMvbnRmcy9hb3BzLmM6Om50ZnNfbXN0X3JlYWRwYWdlKCkuCi0KLTIuMC4xNCAtIFJ1biBsaXN0IG1lcmdpbmcgY29kZSBjbGVhbnVwLCBtaW5vciBsb2NraW5nIGNoYW5nZXMsIHR5cG8gZml4ZXMuCi0KLQktIENoYW5nZSBmcy9udGZzL3N1cGVyLmM6Om50ZnNfc3RhdGZzKCkgdG8gbm90IHJlbHkgb24gQktMIGJ5IG1vdmluZwotCSAgdGhlIGxvY2tpbmcgb3V0IG9mIHN1cGVyLmM6OmdldF9ucl9mcmVlX21mdF9yZWNvcmRzKCkgYW5kIHRha2luZyBhbmQKLQkgIGRyb3BwaW5nIHRoZSBtZnRibXBfbG9jayByd19zZW1hcGhvcmUgaW4gbnRmc19zdGF0ZnMoKSBpdHNlbGYuCi0JLSBCcmluZyBhdHRyaWJ1dGUgcnVubGlzdCBtZXJnaW5nIGNvZGUgKGZzL250ZnMvYXR0cmliLmMpIGluIHN5bmMgd2l0aAotCSAgY3VycmVudCB1c2Vyc3BhY2UgbnRmcyBsaWJyYXJ5IGNvZGUuIFRoaXMgbWVhbnMgdGhhdCBpZiBhIG1lcmdlCi0JICBmYWlscyB0aGUgb3JpZ2luYWwgcnVubGlzdHMgYXJlIGFsd2F5cyBsZWZ0IHVubW9kaWZpZWQgaW5zdGVhZCBvZgotCSAgYmVpbmcgc2lsZW50bHkgY29ycnVwdGVkLgotCS0gTWlzYyB0eXBvIGZpeGVzLgotCi0yLjAuMTMgLSBVc2UgaWdldDVfbG9ja2VkKCkgaW4gcHJlcGFyYXRpb24gZm9yIGZha2UgaW5vZGVzIGFuZCBzbWFsbCBjbGVhbnVwcy4KLQotCS0gUmVtb3ZlIG5yX21mdF9iaXRzIGFuZCB0aGUgbm93IHN1cGVyZmx1b3VzIHVuaW9uIHdpdGggbnJfbWZ0X3JlY29yZHMKLQkgIGZyb20gbnRmc192b2x1bWUgc3RydWN0dXJlLgotCS0gUmVtb3ZlIG5yX2xjbl9iaXRzIGFuZCB0aGUgbm93IHN1cGVyZmx1b3VzIHVuaW9uIHdpdGggbnJfY2x1c3RlcnMKLQkgIGZyb20gbnRmc192b2x1bWUgc3RydWN0dXJlLgotCS0gVXNlIGlnZXQ1X2xvY2tlZCgpIGFuZCBmcmllbmRzIGluc3RlYWQgb2YgY29udmVudGlvbmFsIGlnZXQoKS4gV3JhcAotCSAgdGhlIGNhbGwgaW4gZnMvbnRmcy9pbm9kZS5jOjpudGZzX2lnZXQoKSBhbmQgdXBkYXRlIGNhbGxlcnMgb2YgaWdldCgpCi0JICB0byB1c2UgbnRmc19pZ2V0KCkuIExlYXZlIG9ubHkgb25lIGlnZXQoKSBjYWxsIGF0IG1vdW50IHRpbWUgc28gd2UKLQkgIGRvbid0IG5lZWQgYW4gbnRmc19pZ2V0X21vdW50KCkuCi0JLSBDaGFuZ2UgZnMvbnRmcy9pbm9kZS5jOjpudGZzX25ld19leHRlbnRfaW5vZGUoKSB0byB0YWtlIG1mdF9ubyBhcyBhbgotCSAgYWRkaXRpb25hbCBhcmd1bWVudC4KLQotMi4wLjEyIC0gSW5pdGlhbCBjbGVhbnVwIG9mIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucyBmb2xsb3dpbmcgMi4wLjExIGNoYW5nZXMuCi0KLQktIE1lcmdlIGZzL250ZnMvYW9wcy5jOjplbmRfYnVmZmVyX3JlYWRfbXN0X2FzeW5jKCkgYW5kCi0JICBmcy9udGZzL2FvcHMuYzo6ZW5kX2J1ZmZlcl9yZWFkX2ZpbGVfYXN5bmMoKSBpbnRvIG9uZSBmdW5jdGlvbgotCSAgZnMvbnRmcy9hb3BzLmM6OmVuZF9idWZmZXJfcmVhZF9hdHRyX2FzeW5jKCkgdXNpbmcgTklub01zdFByb3RlY3RlZCgpCi0JICB0byBkZXRlcm1pbmUgd2hldGhlciB0byBhcHBseSBtc3QgZml4dXBzIG9yIG5vdC4KLQktIEFib3ZlIGNoYW5nZSBhbGxvd3MgbWVyZ2luZyBmcy9udGZzL2FvcHMuYzo6bnRmc19maWxlX3JlYWRfYmxvY2soKQotCSAgYW5kIGZzL250ZnMvYW9wcy5jOjpudGZzX21zdF9yZWFkcGFnZSgpIGludG8gb25lIGZ1bmN0aW9uCi0JICBmcy9udGZzL2FvcHMuYzo6bnRmc19hdHRyX3JlYWRfYmxvY2soKS4gQWxzbywgY3JlYXRlIGEgdGlueSB3cmFwcGVyCi0JICBmcy9udGZzL2FvcHMuYzo6bnRmc19tc3RfcmVhZHBhZ2UoKSB0byB0cmFuc2Zvcm0gdGhlIHBhcmFtZXRlcnMgZnJvbQotCSAgdGhlIFZGUyByZWFkcGFnZSBmdW5jdGlvbiBwcm90b3R5cGUgdG8gdGhlIG50ZnNfYXR0cl9yZWFkX2Jsb2NrKCkKLQkgIGZ1bmN0aW9uIHByb3RvdHlwZS4KLQotMi4wLjExIC0gSW5pdGlhbCBwcmVwYXJhdGlvbnMgZm9yIGZha2UgaW5vZGUgYmFzZWQgYXR0cmlidXRlIGkvby4KLQotCS0gTW92ZSBkZWZpbml0aW9uIG9mIG50ZnNfaW5vZGVfc3RhdGVfYml0cyB0byBmcy9udGZzL2lub2RlLmggYW5kCi0JICBkbyBzb21lIG1hY3JvIG1hZ2ljIChhZGFwdGVkIGZyb20gaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oKSB0bwotCSAgZXhwYW5kIGFsbCB0aGUgaGVscGVyIGZ1bmN0aW9ucyBOSW5vRm9vKCksIE5Jbm9TZXRGb28oKSwgYW5kCi0JICBOSW5vQ2xlYXJGb28oKS4KLQktIEFkZCBuZXcgZmxhZyB0byBudGZzX2lub2RlX3N0YXRlX2JpdHM6IE5JX1NwYXJzZS4KLQktIEFkZCBuZXcgZmllbGRzIHRvIG50ZnNfaW5vZGUgc3RydWN0dXJlIHRvIGFsbG93IHVzZSBvZiBmYWtlIGlub2RlcwotCSAgZm9yIGF0dHJpYnV0ZSBpL286IHR5cGUsIG5hbWUsIG5hbWVfbGVuLiBBbHNvIGFkZCBuZXcgc3RhdGUgYml0czoKLQkgIE5JX0F0dHIsIHdoaWNoLCBpZiBzZXQsIGluZGljYXRlcyB0aGUgaW5vZGUgaXMgYSBmYWtlIGlub2RlLCBhbmQKLQkgIE5JX01zdFByb3RlY3RlZCwgd2hpY2gsIGlmIHNldCwgaW5kaWNhdGVzIHRoZSBhdHRyaWJ1dGUgdXNlcyBtdWx0aQotCSAgc2VjdG9yIHRyYW5zZmVyIHByb3RlY3Rpb24sIGkuZS4gZml4dXBzIG5lZWQgdG8gYmUgYXBwbGllZCBhZnRlcgotCSAgcmVhZHMgYW5kIGJlZm9yZS9hZnRlciB3cml0ZXMuCi0JLSBSZW5hbWUgZnMvbnRmcy9pbm9kZS5jOjpudGZzX3tuZXcsY2xlYXIsZGVzdHJveX1faW5vZGUoKSB0bwotCSAgbnRmc197bmV3LGNsZWFyLGRlc3Ryb3l9X2V4dGVudF9pbm9kZSgpIGFuZCB1cGRhdGUgY2FsbGVycy4KLQktIFVzZSBudGZzX2NsZWFyX2V4dGVudF9pbm9kZSgpIGluIGZzL250ZnMvaW5vZGUuYzo6X19udGZzX2NsZWFyX2lub2RlKCkKLQkgIGluc3RlYWQgb2YgbnRmc19kZXN0cm95X2V4dGVudF9pbm9kZSgpLgotCS0gQ2xlYW51cCBtZW1vcnkgZGVhbGxvY2F0aW9ucyBpbiB7X18sfW50ZnNfY2xlYXJfeyxiaWdffWlub2RlKCkuCi0JLSBNYWtlIGFsbCBvcGVyYXRpb25zIG9uIG50ZnMgaW5vZGUgc3RhdGUgYml0cyB1c2UgdGhlIE5Jbm8qIGZ1bmN0aW9ucy4KLQktIFNldCB1cCB0aGUgbmV3IG50ZnMgaW5vZGUgZmllbGRzIGFuZCBzdGF0ZSBiaXRzIGluCi0JICBmcy9udGZzL2lub2RlLmM6Om50ZnNfcmVhZF9pbm9kZSgpIGFuZCBhZGQgYXBwcm9wcmlhdGUgY2xlYW51cCBvZgotCSAgYWxsb2NhdGVkIG1lbW9yeSB0byBfX250ZnNfY2xlYXJfaW5vZGUoKS4KLQktIENsZWFudXAgbnRmc19pbm9kZSBzdHJ1Y3R1cmUgYSBiaXQgZm9yIGJldHRlciBvcmRlcmluZyBvZiBlbGVtZW50cwotCSAgdy5yLnQuIHRoZWlyIHNpemUgdG8gYWxsb3cgYmV0dGVyIHBhY2tpbmcgb2YgdGhlIHN0cnVjdHVyZSBpbiBtZW1vcnkuCi0KLTIuMC4xMCAtIFRoZXJlIGNhbiBvbmx5IGJlIDJeMzIgLSAxIGlub2RlcyBvbiBhbiBOVEZTIHZvbHVtZS4KLQotCS0gQWRkIGNoZWNrIGF0IG1vdW50IHRpbWUgdG8gdmVyaWZ5IHRoYXQgdGhlIG51bWJlciBvZiBpbm9kZXMgb24gdGhlCi0JICB2b2x1bWUgZG9lcyBub3QgZXhjZWVkIDJeMzIgLSAxLCB3aGljaCBpcyB0aGUgbWF4aW11bSBhbGxvd2VkIGZvcgotCSAgTlRGUyBhY2NvcmRpbmcgdG8gTWljcm9zb2Z0LgotCS0gQ2hhbmdlIG1mdF9ubyBtZW1iZXIgb2YgbnRmc19pbm9kZSBzdHJ1Y3R1cmUgdG8gYmUgdW5zaWduZWQgbG9uZy4KLQkgIFVwZGF0ZSBhbGwgdXNlcnMuIFRoaXMgbWFrZXMgbnRmc19pbm9kZS0+bWZ0X25vIGp1c3QgYSBjb3B5IG9mIHN0cnVjdAotCSAgaW5vZGUtPmlfaW5vLiBCdXQgd2UgY2FuJ3QganVzdCBhbHdheXMgdXNlIHN0cnVjdCBpbm9kZS0+aV9pbm8gYW5kCi0JICByZW1vdmUgbWZ0X25vIGJlY2F1c2UgZXh0ZW50IGlub2RlcyBkbyBub3QgaGF2ZSBhbiBhdHRhY2hlZCBzdHJ1Y3QKLQkgIGlub2RlLgotCi0yLjAuOSAtIERlY29tcHJlc3Npb24gZW5naW5lIG5vdyB1c2VzIGEgc2luZ2xlIGJ1ZmZlciBhbmQgb3RoZXIgY2xlYW51cHMuCi0KLQktIENoYW5nZSBkZWNvbXByZXNzaW9uIGVuZ2luZSB0byB1c2UgYSBzaW5nbGUgYnVmZmVyIHByb3RlY3RlZCBieSBhCi0JICBzcGluIGxvY2sgaW5zdGVhZCBvZiBwZXItQ1BVIGJ1ZmZlcnMuIChSdXN0eSBSdXNzZWxsKQotCS0gRG8gbm90IHVwZGF0ZSBjYl9wb3Mgd2hlbiBoYW5kbGluZyBhIHBhcnRpYWwgZmluYWwgcGFnZSBkdXJpbmcKLQkgIGRlY29tcHJlc3Npb24gb2YgYSBzcGFyc2UgY29tcHJlc3Npb24gYmxvY2ssIGFzIHRoZSB2YWx1ZSBpcyBsYXRlcgotCSAgcmVzZXQgd2l0aG91dCBiZWluZyByZWFkL3VzZWQuIChSdXN0eSBSdXNzZWxsKQotCS0gU3dpdGNoIHRvIHVzaW5nIHRoZSBuZXcgS01fQklPX1NSQ19JUlEgZm9yIGF0b21pYyBrbWFwKClzLiAoQW5kcmV3Ci0JICBNb3J0b24pCi0JLSBDaGFuZ2UgYnVmZmVyIHNpemUgaW4gbnRmc19yZWFkZGlyKCkvbnRmc19maWxsZGlyKCkgdG8gdXNlCi0JICBOTFNfTUFYX0NIQVJTRVRfU0laRSB3aGljaCBtYWtlcyB0aGUgYnVmZmVycyBhbG1vc3QgMWtpQiBlYWNoIGJ1dAotCSAgaXQgYWxzbyBtYWtlcyBldmVyeXRoaW5nIHNhZmVyIHNvIGl0IGlzIGEgZ29vZCB0aGluZy4KLQktIE1pc2NlbGxhbmVvdXMgbWlub3IgY2xlYW51cHMgdG8gY29tbWVudHMuCi0KLTIuMC44IC0gTWFqb3IgdXBkYXRlcyBmb3IgaGFuZGxpbmcgb2YgY2FzZSBzZW5zaXRpdml0eSBhbmQgZGNhY2hlIGFsaWFzaW5nLgotCi0JQmlnIHRoYW5rcyBnbyB0byBBbCBWaXJvIGFuZCBvdGhlciBpbmhhYml0YW50cyBvZiAja2VybmVsIGZvciBpbnZlc3RpbmcKLQl0aGVpciB0aW1lIHRvIGRpc2N1c3MgdGhlIGNhc2Ugc2Vuc2l0aXZpdHkgYW5kIGRjYWNoZSBhbGlhc2luZyBpc3N1ZXMuCi0KLQktIFJlbW92ZSB1bnVzZWQgc291cmNlIGZpbGUgZnMvbnRmcy9hdHRyYW9wcy5jLgotCS0gUmVtb3ZlIHNob3dfaW5vZGVzIG1vdW50IG9wdGlvbihzKSwgdGh1cyBkcm9wcGluZyBzdXBwb3J0IGZvcgotCSAgZGlzcGxheWluZyBvZiBzaG9ydCBmaWxlIG5hbWVzLgotCS0gUmVtb3ZlIGRlcHJlY2F0ZWQgbW91bnQgb3B0aW9uIHBvc2l4LgotCS0gUmVzdG9yZSBzaG93X3N5c19maWxlcyBtb3VudCBvcHRpb24uCi0JLSBBZGQgbmV3IG1vdW50IG9wdGlvbiBjYXNlX3NlbnNpdGl2ZSwgdG8gZGV0ZXJtaW5lIGlmIHRoZSBkcml2ZXIKLQkgIHRyZWF0cyBmaWxlIG5hbWVzIGFzIGNhc2Ugc2Vuc2l0aXZlIG9yIG5vdC4gSWYgY2FzZSBzZW5zaXRpdmUsIGNyZWF0ZQotCSAgZmlsZSBuYW1lcyBpbiB0aGUgUE9TSVggbmFtZXNwYWNlLiBPdGhlcndpc2UgY3JlYXRlIGZpbGUgbmFtZXMgaW4gdGhlCi0JICBMT05HL1dJTjMyIG5hbWVzcGFjZS4gTm90ZSwgZmlsZXMgcmVtYWluIGFjY2Vzc2libGUgdmlhIHRoZWlyIHNob3J0Ci0JICBmaWxlIG5hbWUsIGlmIGl0IGV4aXN0cy4KLQktIFJlbW92ZSByZWFsbHkgZHVtYiBsb2dpYyBidWcgaW4gYm9vdCBzZWN0b3IgcmVjb3ZlcnkgY29kZS4KLQktIEZpeCBkY2FjaGUgYWxpYXNpbmcgaXNzdWVzIHdydCBzaG9ydC9sb25nIGZpbGUgbmFtZXMgdmlhIGNoYW5nZXMKLQkgIHRvIGZzL250ZnMvZGlyLmM6Om50ZnNfbG9va3VwX2lub2RlX2J5X25hbWUoKSBhbmQKLQkgIGZzL250ZnMvbmFtZWkuYzo6bnRmc19sb29rdXAoKToKLQkgIC0gQWRkIGFkZGl0aW9uYWwgYXJndW1lbnQgdG8gbnRmc19sb29rdXBfaW5vZGVfYnlfbmFtZSgpIGluIHdoaWNoIHdlCi0JICAgIHJldHVybiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgbWF0Y2hpbmcgZmlsZSBuYW1lIGlmIHRoZSBjYXNlIGlzIG5vdAotCSAgICBtYXRjaGluZyBvciB0aGUgbWF0Y2ggaXMgYSBzaG9ydCBmaWxlIG5hbWUuIFNlZSBjb21tZW50cyBhYm92ZSB0aGUKLQkgICAgZnVuY3Rpb24gZGVmaW5pdGlvbiBmb3IgZGV0YWlscy4KLQkgIC0gQ2hhbmdlIG50ZnNfbG9va3VwKCkgdG8gb25seSBjcmVhdGUgZGNhY2hlIGVudHJpZXMgZm9yIHRoZSBjb3JyZWN0bHkKLQkgICAgY2FzZWQgZmlsZSBuYW1lIGFuZCBvbmx5IGZvciB0aGUgV0lOMzIgbmFtZXNwYWNlIGNvdW50ZXJwYXJ0IG9mIERPUwotCSAgICBuYW1lc3BhY2UgZmlsZSBuYW1lcy4gVGhpcyBlbnN1cmVzIHdlIGhhdmUgb25seSBvbmUgZGVudHJ5IHBlcgotCSAgICBkaXJlY3RvcnkgYW5kIGFsc28gcmVtb3ZlcyBhbGwgZGNhY2hlIGFsaWFzaW5nIGlzc3VlcyBiZXR3ZWVuIHNob3J0Ci0JICAgIGFuZCBsb25nIGZpbGUgbmFtZXMgb25jZSB3ZSBhZGQgd3JpdGUgc3VwcG9ydC4gU2VlIGNvbW1lbnRzIGFib3ZlCi0JICAgIGZ1bmN0aW9uIGZvciBkZXRhaWxzLgotCS0gRml4IHBvdGVudGlhbCAxIGJ5dGUgb3ZlcmZsb3cgaW4gZnMvbnRmcy91bmlzdHIuYzo6bnRmc191Y3N0b25scygpLgotCi0yLjAuNyAtIE1pbm9yIGNsZWFudXBzIGFuZCB1cGRhdGVzIGZvciBjaGFuZ2VzIGluIGNvcmUga2VybmVsIGNvZGUuCi0KLQktIFJlbW92ZSBtdWNoIG9mIHRoZSBOVUxMIHN0cnVjdCBlbGVtZW50IGluaXRpYWxpemVycy4KLQktIFZhcmlvdXMgdXBkYXRlcyB0byBtYWtlIGNvbXBhdGlibGUgd2l0aCByZWNlbnQga2VybmVscy4KLQktIFJlbW92ZSBkZWZpbmVzIG9mIE1BWF9CVUZfUEVSX1BBR0UgYW5kIGluY2x1ZGUgbGludXgvYnVmZmVyX2hlYWQuaAotCSAgaW4gZnMvbnRmcy9udGZzLmggaW5zdGVhZC4KLQktIFJlbW92ZSBubyBsb25nZXIgbmVlZGVkIEtFUk5FTF9WRVJTSU9OIGNoZWNrcy4gV2UgYXJlIG5vdyBpbiB0aGUKLQkgIGtlcm5lbCBwcm9wZXIgc28gdGhleSBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4KLQotMi4wLjYgLSBNYWpvciBidWdmaXggdG8gbWFrZSBjb21wYXRpYmxlIHdpdGggb3RoZXIga2VybmVsIGNoYW5nZXMuCi0KLQktIEluaXRpYWxpemUgdGhlIG1mdGJtcCBhZGRyZXNzIHNwYWNlIHByb3Blcmx5IG5vdyB0aGF0IHRoZXJlIGFyZSBtb3JlCi0JICBmaWVsZHMgaW4gdGhlIHN0cnVjdCBhZGRyZXNzX3NwYWNlLiBUaGlzIHdhcyBsZWFkaW5nIHRvIGhhbmdzIGFuZAotCSAgb29wc2VzIG9uIHVtb3VudCBzaW5jZSAyLjUuMTIgYmVjYXVzZSBvZiBjaGFuZ2VzIHRvIG90aGVyIHBhcnRzIG9mCi0JICB0aGUga2VybmVsLiBXZSBwcm9iYWJseSB3YW50IGEga2VybmVsIGdlbmVyaWMgaW5pdF9hZGRyZXNzX3NwYWNlKCkKLQkgIGZ1bmN0aW9uLi4uCi0JLSBEcm9wIEJLTCBmcm9tIG50ZnNfcmVhZGRpcigpIGFmdGVyIGNvbnN1bHRhdGlvbiB3aXRoIEFsIFZpcm8uIFRoZQotCSAgb25seSBjYWxsZXIgb2YgLT5yZWFkZGlyKCkgaXMgdmZzX3JlYWRkaXIoKSB3aGljaCBob2xkcyBpX211dGV4Ci0JICBkdXJpbmcgdGhlIGNhbGwsIGFuZCBpX211dGV4IGlzIHN1ZmZpY2llbnQgcHJvdGVjdGlvbiBhZ2FpbnN0IGNoYW5nZXMKLQkgIGluIHRoZSBkaXJlY3RvcnkgaW5vZGUgKGluY2x1ZGluZyAtPmlfc2l6ZSkuCi0JLSBVc2UgZ2VuZXJpY19maWxlX2xsc2VlaygpIGZvciBkaXJlY3RvcmllcyAoYXMgb3Bwb3NlZCB0bwotCSAgZGVmYXVsdF9sbHNlZWsoKSkgYXMgdGhpcyBkb3ducyBpX211dGV4IGluc3RlYWQgb2YgdGhlIEJLTCB3aGljaCBpcwotCSAgd2hhdCB3ZSBub3cgbmVlZCBmb3IgZXhjbHVzaW9uIGFnYWluc3QgLT5mX3BvcyBjaGFuZ2VzIGNvbnNpZGVyaW5nIHdlCi0JICBubyBsb25nZXIgdGFrZSB0aGUgQktMIGluIG50ZnNfcmVhZGRpcigpLgotCi0yLjAuNSAtIE1ham9yIGJ1Z2ZpeC4gQnVmZmVyIG92ZXJmbG93IGluIGV4dGVudCBpbm9kZSBoYW5kbGluZy4KLQotCS0gTm8gbmVlZCB0byBzZXQgb2xkIGJsb2Nrc2l6ZSBpbiBzdXBlci5jOjpudGZzX2ZpbGxfc3VwZXIoKSBhcyB0aGUKLQkgIFZGUyBkb2VzIHNvIHZpYSBpbnZvY2F0aW9uIG9mIGRlYWN0aXZhdGVfc3VwZXIoKSBjYWxsaW5nCi0JICBmcy0+ZmlsbF9zdXBlcigpIGNhbGxpbmcgYmxvY2tfa2lsbF9zdXBlcigpIHdoaWNoIGRvZXMgaXQuCi0JLSBCS0wgbW92ZWQgZnJvbSBWRlMgaW50byBkaXIuYzo6bnRmc19yZWFkZGlyKCkuIChMaW51cyBUb3J2YWxkcykKLQkgIC0+IERvIHdlIHJlYWxseSBuZWVkIGl0PyBJIGRvbid0IHRoaW5rIHNvIGFzIHdlIGhhdmUgZXhjbHVzaW9uIG9uCi0JICB0aGUgZGlyZWN0b3J5IG50ZnNfaW5vZGUgcndfc2VtYXBob3JlIG1yZWNfbG9jay4gV2UgbW1pZ2h0IGhhdmUgdG8KLQkgIG1vdmUgdGhlIC0+Zl9wb3MgYWNjZXNzZXMgdW5kZXIgdGhlIG1yZWNfbG9jayB0aG91Z2guIENoZWNrIHRoaXMuLi4KLQktIEZpeCByZWFsbHksIHJlYWxseSwgcmVhbGx5IHN0dXBpZCBidWZmZXIgb3ZlcmZsb3cgaW4gZXh0ZW50IGlub2RlCi0JICBoYW5kbGluZyBpbiBtZnQuYzo6bWFwX2V4dGVudF9tZnRfcmVjb3JkKCkuCi0KLTIuMC40IC0gQ2xlYW51cHMgYW5kIHVwZGF0ZXMgZm9yIGtlcm5lbCAyLjUuMTEuCi0KLQktIEFkZCBkb2N1bWVudGF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIE1EIGRyaXZlciB0byBiZSBhYmxlIHRvIHVzZSBOVEZTCi0JICBzdHJpcGUgYW5kIHZvbHVtZSBzZXRzIGluIExpbnV4IGFuZCBnZW5lcmFsbHkgY2xlYW51cCBkb2N1bWVudGF0aW9uCi0JICBhIGJpdC4KLQlSZW1vdmUgYWxsIHVzZXMgb2Yga2Rldl90IGluIGZhdm91ciBvZiBzdHJ1Y3QgYmxvY2tfZGV2aWNlICo6Ci0JLSBDaGFuZ2UgY29tcHJlc3MuYzo6bnRmc19maWxlX3JlYWRfY29tcHJlc3NlZF9ibG9jaygpIHRvIHVzZQotCSAgc2JfZ2V0YmxrKCkgaW5zdGVhZCBvZiBnZXRibGsoKS4KLQktIENoYW5nZSBzdXBlci5jOjpudGZzX2ZpbGxfc3VwZXIoKSB0byB1c2UgYmRldl9oYXJkc2VjdF9zaXplKCkgaW5zdGVhZAotCSAgb2YgZ2V0X2hhcmRzZWN0X3NpemUoKS4KLQktIE5vIG5lZWQgdG8gZ2V0IG9sZCBibG9ja3NpemUgaW4gc3VwZXIuYzo6bnRmc19maWxsX3N1cGVyKCkgYXMKLQkgIGZzL3N1cGVyLmM6OmdldF9zYl9iZGV2KCkgYWxyZWFkeSBkb2VzIHRoaXMuCi0JLSBTZXQgYmgtPmJfYmRldiBpbnN0ZWFkIG9mIGJoLT5iX2RldiB0aHJvdWdob3V0IGFvcHMuYy4KLQotMi4wLjMgLSBTbWFsbCBidWcgZml4ZXMsIGNsZWFudXBzLCBhbmQgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzLgotCi0JLSBSZW1vdmUgc29tZSBkZWFkIGNvZGUgZnJvbSBtZnQuYy4KLQktIE9wdGltaXplIHJlYWRwYWdlIGFuZCByZWFkX2Jsb2NrIGZ1bmN0aW9ucyB0aHJvdWdob3V0IGFvcHMuYyBzbyB0aGF0Ci0JICBvbmx5IGluaXRpYWxpemVkIGJsb2NrcyBhcmUgcmVhZC4gTm9uLWluaXRpYWxpemVkIG9uZXMgaGF2ZSB0aGVpcgotCSAgYnVmZmVyIGhlYWQgbWFwcGVkLCB6ZXJvZWQsIGFuZCBzZXQgdXAgdG8gZGF0ZSwgd2l0aG91dCBzY2hlZHVsaW5nCi0JICBhbnkgaS9vLiBUaGFua3MgdG8gQWwgVmlybyBmb3IgYWR2aWNlIG9uIGhvdyB0byBhdm9pZCB0aGUgZGV2aWNlIGkvby4KLQlUaGFua3MgZ28gdG8gQW5kcmV3IE1vcnRvbiBmb3Igc3BvdHRpbmcgdGhlIGJlbG93OgotCS0gRml4IGJ1Z2xldCBpbiBhbGxvY2F0ZV9jb21wcmVzc2lvbl9idWZmZXJzKCkgZXJyb3IgY29kZSBwYXRoLgotCS0gQ2FsbCBmbHVzaF9kY2FjaGVfcGFnZSgpIGFmdGVyIG1vZGlmeWluZyBwYWdlIGNhY2hlIHBhZ2UgY29udGVudHMgaW4KLQkgIG50ZnNfZmlsZV9yZWFkcGFnZSgpLgotCS0gQ2hlY2sgZm9yIGV4aXN0ZW5jZSBvZiBwYWdlIGJ1ZmZlcnMgdGhyb3VnaG91dCBhb3BzLmMgYmVmb3JlIGNhbGxpbmcKLQkgIGNyZWF0ZV9lbXB0eV9idWZmZXJzKCkuIFRoaXMgaGFwcGVucyB3aGVuIGFuIEkvTyBlcnJvciBvY2N1cnMgYW5kIHRoZQotCSAgcmVhZCBpcyByZXRyaWVkLiAoSXQgYWxzbyBoYXBwZW5zIG9uY2Ugd3JpdGluZyBpcyBpbXBsZW1lbnRlZCBzbyB0aGF0Ci0JICBuZWVkZWQgZG9pbmcgYW55d2F5IGJ1dCBJIGhhZCBsZWZ0IGl0IGZvciBsYXRlci4uLikKLQktIERvbid0IEJVR19PTigpIHVwdG9kYXRlIGFuZC9vciBtYXBwZWQgYnVmZmVycyB0aHJvdWdob3V0IGFvcHMuYyBpbgotCSAgcmVhZHBhZ2UgYW5kIHJlYWRfYmxvY2sgZnVuY3Rpb25zLiBSZWFzb25pbmcgc2FtZSBhcyBhYm92ZSAoaS5lLiBJL08KLQkgIGVycm9yIHJldHJpZXMgYW5kIGZ1dHVyZSB3cml0ZSBjb2RlIHBhdGhzLikKLQotMi4wLjIgLSBNaW5vciB1cGRhdGVzIGFuZCBjbGVhbnVwcy4KLQotCS0gQ2xlYW51cDogcmVuYW1lIG1zdC5jOjpfX3Bvc3RfcmVhZF9tc3RfZml4dXAgdG8gcG9zdF93cml0ZV9tc3RfZml4dXAKLQkgIGFuZCBjbGVhbnVwIHRoZSBjb2RlIGEgYml0LCByZW1vdmluZyB0aGUgdW51c2VkIHNpemUgcGFyYW1ldGVyLgotCS0gQ2hhbmdlIGRlZmF1bHQgZm1hc2sgdG8gMDE3NyBhbmQgdXBkYXRlIGRvY3VtZW50YXRpb24uCi0JLSBDaGFuZ2UgYXR0cmliLmM6OmdldF9hdHRyX3NlYXJjaF9jdHgoKSB0byByZXR1cm4gdGhlIHNlYXJjaCBjb250ZXh0Ci0JICBkaXJlY3RseSBpbnN0ZWFkIG9mIHRha2luZyB0aGUgYWRkcmVzcyBvZiBhIHBvaW50ZXIuIEEgcmV0dXJuIHZhbHVlCi0JICBvZiBOVUxMIG1lYW5zIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gVXBkYXRlZCBhbGwgY2FsbGVycwotCSAgYXBwcm9wcmlhdGVseS4KLQktIFVwZGF0ZSB0byAyLjUuOSBrZXJuZWwgKHByZXNlcnZpbmcgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpIGJ5Ci0JICByZXBsYWNpbmcgYWxsIG9jY3VyZW5jZXMgb2YgcGFnZS0+YnVmZmVycyB3aXRoIHBhZ2VfYnVmZmVycyhwYWdlKS4KLQktIEZpeCBtaW5vciBidWdzIGluIHJ1bmxpc3QgbWVyZ2luZywgYWxzbyBtaW5vciBjbGVhbnVwLgotCS0gVXBkYXRlcyB0byBib290c2VjdG9yIGxheW91dCBhbmQgbWZ0IG1pcnJvciBjb250ZW50cyBkZXNjcmlwdGlvbnMuCi0JLSBTbWFsbCBidWcgZml4IGluIGVycm9yIGRldGVjdGlvbiBpbiB1bmlzdHIuYyBhbmQgc29tZSBjbGVhbnVwcy4KLQktIEdyb3cgbmFtZSBidWZmZXIgYWxsb2NhdGlvbnMgaW4gdW5pc3RyLmMgaW4gYWxpZ25lZCBtdXRsaXBsZWQgb2YgNjQKLQkgIGJ5dGVzLgotCi0yLjAuMSAtIE1pbm9yIHVwZGF0ZXMuCi0KLQktIE1ha2UgZGVmYXVsdCB1bWFzayBjb3JyZXNwb25kIHRvIGRvY3VtZW50YXRpb24uCi0JLSBJbXByb3ZlIGRvY3VtZW50YXRpb24uCi0JLSBTZXQgZGVmYXVsdCBtb2RlIHRvIGluY2x1ZGUgZXhlY3V0ZSBiaXQuIFRoZSB7dSxmLGR9bWFzayBjYW4gYmUgdXNlZAotCSAgdG8gdGFrZSBpdCBhd2F5IGlmIGRlc2lyZWQuIFRoaXMgYWxsb3dzIGJpbmFyaWVzIHRvIGJlIGV4ZWN1dGVkIGZyb20KLQkgIGEgbW91bnRlZCBudGZzIHBhcnRpdGlvbi4KLQotMi4wLjAgLSBOZXcgdmVyc2lvbiBudW1iZXIuIFJlbW92ZSBUTkcgZnJvbSB0aGUgbmFtZS4gTm93IGluIHRoZSBrZXJuZWwuCi0KLQktIEFkZCBraWxsX3N1cGVyLCBqdXN0IGtlZXBpbmcgdXAgd2l0aCB0aGUgdmZzIGNoYW5nZXMgaW4gdGhlIGtlcm5lbC4KLQktIFJlcGVhdCBzb21lIGNoYW5nZXMgZnJvbSB0bmctMC4wLjggdGhhdCBzb21laG93IGdvdCBsb3N0IG9uIHRoZSB3YXkKLQkgIGZyb20gdGhlIENWUyBpbXBvcnQgaW50byBCaXRLZWVwZXIuCi0JLSBCZWdpbiB0byBpbXBsZW1lbnQgcHJvcGVyIGhhbmRsaW5nIG9mIGFsbG9jYXRlZF9zaXplIHZzCi0JICBpbml0aWFsaXplZF9zaXplIHZzIGRhdGFfc2l6ZSAoaS5lLiBpX3NpemUpLiBEb25lIGFyZQotCSAgbWZ0LmM6Om50ZnNfbWZ0X3JlYWRwYWdlKCksIGFvcHMuYzo6ZW5kX2J1ZmZlcl9yZWFkX2luZGV4X2FzeW5jKCksCi0JICBhbmQgYXR0cmliLmM6OmxvYWRfYXR0cmlidXRlX2xpc3QoKS4KLQktIExvY2sgdGhlIHJ1bmxpc3QgaW4gYXR0cmliLmM6OmxvYWRfYXR0cmlidXRlX2xpc3QoKSB3aGlsZSB1c2luZyBpdC4KLQktIEZpeCBtZW1vcnkgbGVhayBpbiBudGZzX2ZpbGVfcmVhZF9jb21wcmVzc2VkX2Jsb2NrKCkgYW5kIGdlbmVyYWxseQotCSAgY2xlYW4gdXAgY29tcHJlc3MuYyBhIGxpdHRsZSwgcmVtb3Zpbmcgc29tZSB1bmNvbW1lbnRlZC91bnVzZWQgZGVidWcKLQkgIGNvZGUuCi0JLSBUaWR5IHVwIGRpci5jIGEgbGl0dGxlIGJpdC4KLQktIERvbid0IGJvdGhlciBnZXR0aW5nIHRoZSBydW5saXN0IGluIGlub2RlLmM6Om50ZnNfcmVhZF9pbm9kZSgpLgotCS0gTWVyZ2UgbWZ0LmM6Om50ZnNfbWZ0X3JlYWRwYWdlKCkgYW5kIGFvcHMuYzo6bnRmc19pbmRleF9yZWFkcGFnZSgpCi0JICBjcmVhdGluZyBhb3BzLmM6Om50ZnNfbXN0X3JlYWRwYWdlKCksIGltcHJvdmluZyB0aGUgaGFuZGxpbmcgb2YKLQkgIGhvbGVzIGFuZCBvdmVyZmxvdyBpbiB0aGUgcHJvY2VzcyBhbmQgaW1wbGVtZW50aW5nIHRoZSBjb3JyZWN0Ci0JICBlcXVpdmFsZW50IG9mIG50ZnNfZmlsZV9nZXRfYmxvY2soKSBpbiBudGZzX21zdF9yZWFkcGFnZSgpIGl0c2VsZi4KLQkgIEkgYW0gYWltaW5nIGZvciBjb3JyZWN0bmVzcyBhdCB0aGUgbW9tZW50LiBNb2R1bGFyaXNhdGlvbiBjYW4gY29tZQotCSAgbGF0ZXIuCi0JLSBSZW5hbWUgYW9wcy5jOjplbmRfYnVmZmVyX3JlYWRfaW5kZXhfYXN5bmMoKSB0bwotCSAgZW5kX2J1ZmZlcl9yZWFkX21zdF9hc3luYygpIGFuZCBvcHRpbWl6ZSB0aGUgb3ZlcmZsb3cgY2hlY2tpbmcgYW5kCi0JICBoYW5kbGluZy4KLQktIFVzZSB0aGUgaG9zdCBvZiB0aGUgbWZ0Ym1wIGFkZHJlc3Mgc3BhY2UgbWFwcGluZyB0byBob2xkIHRoZSBudGZzCi0JICB2b2x1bWUuIFRoaXMgaXMgbmVlZGVkIHNvIHRoZSBhc3luYyBpL28gY29tcGxldGlvbiBoYW5kbGVyIGNhbgotCSAgcmV0cmlldmUgYSBwb2ludGVyIHRvIHRoZSB2b2x1bWUuIEhvcGVmdWxseSB0aGlzIHdpbGwgbm90IGNhdXNlCi0JICBwcm9ibGVtcyBlbHNld2hlcmUgaW4gdGhlIGtlcm5lbC4uLiBPdGhlcndpc2Ugd2lsbCBuZWVkIHRvIHVzZSBhCi0JICBmYWtlIGlub2RlLgotCS0gQ29tcGxldGUgaW1wbGVtZW50YXRpb24gb2YgcHJvcGVyIGhhbmRsaW5nIG9mIGFsbG9jYXRlZF9zaXplIHZzCi0JICBpbml0aWFsaXplZF9zaXplIHZzIGRhdGFfc2l6ZSAoaS5lLiBpX3NpemUpIGluIHdob2xlIGRyaXZlci4KLQkgIEJhc2ljYWxseSBhb3BzLmMgaXMgbm93IGNvbXBsZXRlbHkgcmV3cml0dGVuLgotCS0gQ2hhbmdlIE5URlMgZHJpdmVyIG5hbWUgdG8ganVzdCBOVEZTIGFuZCBzZXQgdmVyc2lvbiBudW1iZXIgdG8gMi4wLjAKLQkgIHRvIG1ha2UgYSBjbGVhciBkaXN0aW5jdGlvbiBmcm9tIHRoZSBvbGQgZHJpdmVyIHdoaWNoIGlzIHN0aWxsIG9uCi0JICB2ZXJzaW9uIDEuMS4yMi4KLQotdG5nLTAuMC44IC0gMDgvMDMvMjAwMiAtIE5vdyB1c2luZyBCaXRLZWVwZXIsIGh0dHA6Ly9saW51eC1udGZzLmJrYml0cy5uZXQvCi0KLQktIFJlcGxhY2UgYmRldm5hbWUoc2ItPnNfZGV2KSB3aXRoIHNiLT5zX2lkLgotCS0gUmVtb3ZlIG5vdyBzdXBlcmZsdW91cyBuZXctbGluZSBjaGFyYWN0ZXJzIGluIGFsbCBjYWxsZXJzIG9mCi0JICBudGZzX2RlYnVnKCkuCi0JLSBBcHBseSBrbHVkZ2UgaW4gbnRmc19yZWFkX2lub2RlKCksIHNldHRpbmcgaV9ubGluayB0byAxIGZvcgotCSAgZGlyZWN0b3JpZXMuIFdpdGhvdXQgdGhpcyB0aGUgImZpbmQiIHV0aWxpdHkgZ2V0cyB2ZXJ5IHVwc2V0IHdoaWNoIGlzCi0JICBmYWlyIGVub3VnaCBhcyBMaW51eC9Vbml4IGRvIG5vdCBzdXBwb3J0IGRpcmVjdG9yeSBoYXJkIGxpbmtzLgotCS0gRnVydGhlciBydW5saXN0IG1lcmdpbmcgd29yay4gKFJpY2hhcmQgUnVzc29uKQotCS0gQmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIGdjYy0yLjk1LiAoUmljaGFyZCBSdXNzb24pCi0JLSBVcGRhdGUgdG8ga2VybmVsIDIuNS41LXByZTEgYW5kIHJlZGlmZiB0aGUgbm93IHRpbnkgcGF0Y2guCi0JLSBDb252ZXJ0IHRvIG5ldyBmaWxlc3lzdGVtIGRlY2xhcmF0aW9uIHVzaW5nIC0+bnRmc19nZXRfc2IoKSBhbmQKLQkgIHJlcGxhY2luZyBudGZzX3JlYWRfc3VwZXIoKSB3aXRoIG50ZnNfZmlsbF9zdXBlcigpLgotCS0gU2V0IHNfbWF4Ynl0ZXMgdG8gTUFYX0xGU19GSUxFU0laRSB0byBhdm9pZCBwYWdlIGNhY2hlIHBhZ2UgaW5kZXgKLQkgIG92ZXJmbG93IG9uIDMyLWJpdCBhcmNoaXRlY3R1cmVzLgotCS0gQ2xlYW51cCB1cGNhc2UgbG9hZGluZyBjb2RlIHRvIHVzZSBudGZzXyh1biltYXBfcGFnZSgpLgotCS0gRGlzYWJsZS9yZWVuYWJsZSBwcmVlbXRpb24gaW4gY3JpdGljYWwgc2VjdGlvbnMgb2YgY29tcGVzc2lvbiBlbmdpbmUuCi0JLSBSZXBsYWNlIGRldmljZSBzaXplIGRldGVybWluYXRpb24gaW4gbnRmc19maWxsX3N1cGVyKCkgd2l0aAotCSAgc2ItPnNfYmRldi0+YmRfaW5vZGUtPmlfc2l6ZSAoaW4gYnl0ZXMpIGFuZCByZW1vdmUgbm93IHN1cGVyZmx1b3VzCi0JICBmdW5jdGlvbiBzdXBlci5jOjpnZXRfbnJfYmxvY2tzKCkuCi0JLSBJbXBsZW1lbnQgYSBtb3VudCB0aW1lIG9wdGlvbiAoc2hvd19pbm9kZXMpIGFsbG93aW5nIGNob2ljZSBvZiB3aGljaAotCSAgdHlwZXMgb2YgaW5vZGUgbmFtZXMgcmVhZGRpcigpIHJldHVybnMgYW5kIG1vZGlmeSBudGZzX2ZpbGxkaXIoKQotCSAgYWNjb3JkaW5nbHkuIFRoZXJlIGFyZSBzZXZlcmFsIHBhcmFtZXRlcnMgdG8gc2hvd19pbm9kZXM6Ci0JCXN5c3RlbToJc3lzdGVtIGZpbGVzCi0JCXdpbjMyOglsb25nIGZpbGUgbmFtZXMgKGluY2x1ZGluZyBQT1NJWCBmaWxlIG5hbWVzKSBbREVGQVVMVF0KLQkJbG9uZzoJc2FtZSBhcyB3aW4zMgotCQlkb3M6CXNob3J0IGZpbGUgbmFtZXMgb25seSAoZXhjbHVkaW5nIFBPU0lYIGZpbGUgbmFtZXMpCi0JCXNob3J0OglzYW1lIGFzIGRvcwotCQlwb3NpeDoJc2FtZSBhcyBib3RoIHdpbjMyIGFuZCBkb3MKLQkJYWxsOglhbGwgZmlsZSBuYW1lcwotCSAgTm90ZSB0aGF0IHRoZSBvcHRpb25zIGFyZSBhZGRpdGl2ZSwgaS5lLiBzcGVjaWZ5aW5nOgotCQktbyBzaG93X2lub2Rlcz1zeXN0ZW0sc2hvd19pbm9kZXM9d2luMzIsc2hvd19pbm9kZXM9ZG9zCi0JICBpcyB0aGUgc2FtZSBhcyBzcGVjaWZ5aW5nOgotCQktbyBzaG93X2lub2Rlcz1hbGwKLQkgIE5vdGUgdGhhdCB0aGUgInBvc2l4IiBhbmQgImFsbCIgb3B0aW9ucyB3aWxsIHNob3cgYWxsIGRpcmVjdG9yeQotCSAgbmFtZXMsIEJVVCB0aGUgbGluayBjb3VudCBvbiBlYWNoIGRpcmVjdG9yeSBpbm9kZSBlbnRyeSBpcyBzZXQgdG8gMSwKLQkgIGR1ZSB0byBMaW51eCBub3Qgc3VwcG9ydGluZyBkaXJlY3RvcnkgaGFyZCBsaW5rcy4gVGhpcyBtYXkgd2VsbAotCSAgY29uZnVzZSBzb21lIHVzZXJzcGFjZSBhcHBsaWNhdGlvbnMsIHNpbmNlIHRoZSBkaXJlY3RvcnkgbmFtZXMgd2lsbAotCSAgaGF2ZSB0aGUgc2FtZSBpbm9kZSBudW1iZXJzLiBUaHVzIGl0IGlzIE5PVCBhZHZpc2FibGUgdG8gdXNlIHRoZQotCSAgInBvc2l4IiBvciAiYWxsIiBvcHRpb25zLiBXZSBwcm92aWRlIHRoZW0gb25seSBmb3IgY29tcGxldGVuZXNzIHNha2UuCi0JLSBBZGQgY29waWVzIG9mIGFsbG9jYXRlZF9zaXplLCBpbml0aWFsaXplZF9zaXplLCBhbmQgY29tcHJlc3NlZF9zaXplIHRvCi0JICB0aGUgbnRmcyBpbm9kZSBzdHJ1Y3R1cmUgYW5kIHNldCB0aGVtIHVwIGluCi0JICBpbm9kZS5jOjpudGZzX3JlYWRfaW5vZGUoKS4gVGhlc2UgcmVmbGVjdCB0aGUgdW5uYW1lZCBkYXRhIGF0dHJpYnV0ZQotCSAgZm9yIGZpbGVzIGFuZCB0aGUgaW5kZXggYWxsb2NhdGlvbiBhdHRyaWJ1dGUgZm9yIGRpcmVjdG9yaWVzLgotCS0gQWRkIGNvcGllcyBvZiBhbGxvY2F0ZWRfc2l6ZSBhbmQgaW5pdGlhbGl6ZWRfc2l6ZSB0byBudGZzIGlub2RlIGZvcgotCSAgJEJJVE1BUCBhdHRyaWJ1dGUgb2YgbGFyZ2UgZGlyZWN0b3JpZXMgYW5kIHNldCB0aGVtIHVwIGluCi0JICBpbm9kZS5jOjpudGZzX3JlYWRfaW5vZGUoKS4KLQktIEFkZCBjb3BpZXMgb2YgYWxsb2NhdGVkX3NpemUgYW5kIGluaXRpYWxpemVkX3NpemUgdG8gbnRmcyB2b2x1bWUgZm9yCi0JICAkQklUTUFQIGF0dHJpYnV0ZSBvZiAkTUZUIGFuZCBzZXQgdGhlbSB1cCBpbgotCSAgc3VwZXIuYzo6bG9hZF9zeXN0ZW1fZmlsZXMoKS4KLQktIFBhcnNlIGRlcHJlY2F0ZWQgbnRmcyBkcml2ZXIgb3B0aW9ucyAoaW9jaGFyc2V0LCBzaG93X3N5c19maWxlcywKLQkgIHBvc2l4LCBhbmQgdXRmOCkgYW5kIHRlbGwgdXNlciB3aGF0IHRoZSBuZXcgb3B0aW9ucyB0byB1c2UgYXJlLiBOb3RlCi0JICB3ZSBzdGlsbCBkbyBzdXBwb3J0IHRoZW0gYnV0IHRoZXkgd2lsbCBiZSByZW1vdmVkIHdpdGgga2VybmVsIDIuNy54LgotCS0gQ2hhbmdlIGFsbCBvY2N1cmVuY2VzIG9mIGludGVnZXIgbG9uZyBsb25nIHByaW50ZiBmb3JtYXR0aW5nIHRvIGhleAotCSAgYXMgcHJpbnRrKCkgd2lsbCBub3Qgc3VwcG9ydCBsb25nIGxvbmcgaW50ZWdlciBmb3JtYXQgaWYvd2hlbiB0aGUKLQkgIGRpdjY0IHBhdGNoIGdvZXMgaW50byB0aGUga2VybmVsLgotCS0gTWFrZSBzbGFiIGNhY2hlcyBoYXZlIHN0YWJsZSBuYW1lcyBhbmQgY2hhbmdlIHRoZSBuYW1lcyB0byB3aGF0IHRoZXkKLQkgIHdlcmUgaW50ZW5kZWQgdG8gYmUuIFRoZXNlIGNoYW5nZXMgYXJlIHJlcXVpcmVkL21hZGUgcG9zc2libGUgYnkgdGhlCi0JICBuZXcgc2xhYiBjYWNoZSBuYW1lIGhhbmRsaW5nIHdoaWNoIHJlbW92ZXMgdGhlIGxlbmd0aCBsaW1pdGF0aW9uIGJ5Ci0JICByZXF1aXJpbmcgdGhlIGNhbGxlciBvZiBrbWVtX2NhY2hlX2NyZWF0ZSgpIHRvIHN1cHBseSBhIHN0YWJsZSBuYW1lCi0JICB3aGljaCBpcyB0aGVuIHJlZmVyZW5jZWQgYnV0IG5vdCBjb3BpZWQuCi0JLSBSZW5hbWUgcnVuX2xpc3Qgc3RydWN0dXJlIHRvIHJ1bl9saXN0X2VsZW1lbnQgYW5kIGNyZWF0ZSBhIG5ldwotCSAgcnVuX2xpc3Qgc3RydWN0dXJlIGNvbnRhaW5pbmcgYSBwb2ludGVyIHRvIGEgcnVuX2xpc3RfZWxlbWVudAotCSAgc3RydWN0dXJlIGFuZCBhIHJlYWQvd3JpdGUgc2VtYXBob3JlLiBBZGFwdCBhbGwgdXNlcnMgb2YgcnVubGlzdHMKLQkgIHRvIG5ldyBzY2hlbWUgYW5kIHRha2UgYW5kIHJlbGVhc2UgdGhlIGxvY2sgYXMgbmVlZGVkLiBUaGlzIGZpeGVzIGEKLQkgIG5hc3R5IHJhY2UgYXMgdGhlIHJ1bl9saXN0IGNoYW5nZXMgZXZlbiB3aGVuIGlub2RlcyBhcmUgbG9ja2VkIGZvcgotCSAgcmVhZGluZyBhbmQgZXZlbiB3aGVuIHRoZSBpbm9kZSBpc24ndCBsb2NrZWQgYXQgYWxsLCBzbyB3ZSByZWFsbHkKLQkgIG5lZWRlZCB0aGUgc2VyaWFsaXphdGlvbi4gV2UgdXNlIGEgc2VtYXBob3JlIHJhdGhlciB0aGFuIGEgc3BpbmxvY2sKLQkgIGFzIG1lbW9yeSBhbGxvY2F0aW9ucyBjYW4gc2xlZXAgYW5kIGRvaW5nIGV2ZXJ5dGhpbmcgR0ZQX0FUT01JQwotCSAgd291bGQgYmUgc2lsbHkuCi0JLSBDbGVhbnVwIHJlYWRfaW5vZGUoKSByZW1vdmluZyBhbGwgY29kZSBjaGVja2luZyBmb3IgbG93ZXN0X3ZjbiAhPSAwLgotCSAgVGhpcyBjYW4gbmV2ZXIgaGFwcGVuIGR1ZSB0byB0aGUgbmF0dXJlIG9mIGxvb2t1cF9hdHRyKCkgYW5kIGhvdyB3ZQotCSAgc3VwcG9ydCBhdHRyaWJ1dGUgbGlzdHMuIElmIGl0IGRpZCBoYXBwZW4gaXQgd291bGQgaW1wbHkgdGhlIGlub2RlCi0JICBiZWluZyBjb3JydXB0LgotCS0gQ2hlY2sgZm9yIGxvd2VzdF92Y24gIT0gMCBpbiBudGZzX3JlYWRfaW5vZGUoKSBhbmQgbWFyayB0aGUgaW5vZGUgYXMKLQkgIGJhZCBpZiBmb3VuZC4KLQktIFVwZGF0ZSB0byAyLjUuNi1wcmUyIGNoYW5nZXMgaW4gc3RydWN0IGFkZHJlc3Nfc3BhY2UuCi0JLSBVc2UgcGFyZW50X2lubygpIHdoZW4gYWNjZXNzaW5nIGRfcGFyZW50IGlub2RlIG51bWJlciBpbiBkaXIuYy4KLQktIEltcG9ydCBTb3VyY2Vmb3JnZSBDVlMgcmVwb3NpdG9yeSBpbnRvIEJpdEtlZXBlciByZXBvc2l0b3J5OgotCQlodHRwOi8vbGludXgtbnRmcy5ia2JpdHMubmV0L250ZnMtdG5nLTIuNQotCS0gVXBkYXRlIGZzL01ha2VmaWxlLCBmcy9Db25maWcuaGVscCwgZnMvQ29uZmlnLmluLCBhbmQKLQkgIERvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbnRmcy50eHQgZm9yIE5URlMgVE5HLgotCS0gQ3JlYXRlIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbiBjb250cm9sbGluZyB3aGV0aGVyIGRlYnVnZ2luZwotCSAgaXMgZW5hYmxlZCBvciBub3QuCi0JLSBBZGQgdGhlIHJlcXVpcmVkIGV4cG9ydCBvZiBlbmRfYnVmZmVyX2lvX3N5bmMoKSBmcm9tIHRoZSBwYXRjaGVzCi0JICBkaXJlY3RvcnkgdG8gdGhlIGtlcm5lbCBjb2RlLgotCS0gVXBkYXRlIGlub2RlLmM6Om50ZnNfc2hvd19vcHRpb25zKCkgd2l0aCBzaG93X2lub2RlcyBtb3VudCBvcHRpb24uCi0JLSBVcGRhdGUgZXJyb3JzIG1vdW50IG9wdGlvbi4KLQotdG5nLTAuMC43IC0gMTMvMDIvMjAwMiAtIFRoZSBkcml2ZXIgaXMgbm93IGZlYXR1cmUgY29tcGxldGUgZm9yIHJlYWQtb25seSEKLQotCS0gQ2xlYW51cCBtZnQuYyBhbmQgaXQncyBkZWJ1Zy9lcnJvciBvdXRwdXQgaW4gcGFydGljdWxhci4gRml4IGEgbWlub3IKLQkgIGJ1ZyBpbiBtYXBwaW5nIG9mIGV4dGVudCBpbm9kZXMuIFVwZGF0ZSBhbGwgdGhlIGNvbW1lbnRzIHRvIGZpdCBhbGwKLQkgIHRoZSByZWNlbnQgY29kZSBjaGFuZ2VzLgotCS0gTW9kaWZ5IHZjbl90b19sY24oKSB0byBjb3BlIHdpdGggZW50aXJlbHkgdW5tYXBwZWQgcnVubGlzdHMuCi0JLSBDbGVhbnVwcyBpbiBjb21wcmVzcy5jLCBtb3N0bHkgY29tbWVudHMgYW5kIGZvbGRpbmcgaGVscC4KLQktIEltcGxlbWVudCBhdHRyaWIuYzo6bWFwX3J1bl9saXN0KCkgYXMgYSBnZW5lcmljIGhlbHBlci4KLQktIE1ha2UgY29tcHJlc3MuYzo6bnRmc19maWxlX3JlYWRfY29tcHJlc3NlZF9ibG9jaygpIHVzZSBtYXBfcnVuX2xpc3QoKQotCSAgdGh1cyBtYWtpbmcgY29kZSBzaG9ydGVyIGFuZCBlbmFibGluZyBhdHRyaWJ1dGUgbGlzdCBzdXBwb3J0LgotCS0gQ2xlYW51cCBpbmNvcnJlY3QgdXNlIG9mIFtzdV02NCB3aXRoICVMIHByaW50ZiBmb3JtYXQgc3BlY2lmaWVyIGluCi0JICBhbGwgc291cmNlIGZpbGVzLiBUeXBlIGNhc3RzIHRvIFt1bnNpZ25lZF0gbG9uZyBsb25nIGFkZGVkIHRvIGNvcnJlY3QKLQkgIHRoZSBtaXNtYXRjaGVzIChpbXBvcnRhbnQgZm9yIGFyY2hpdGVjdHVyZXMgd2hpY2ggaGF2ZSBsb25nIGxvbmcgbm90Ci0JICBiZWluZyA2NCBiaXRzKS4KLQktIE1lcmdlIGFzeW5jIGlvIGNvbXBsZXRpb24gaGFuZGxlcnMgZm9yIGRpcmVjdG9yeSBpbmRleGVzIGFuZCAkTUZUCi0JICBkYXRhIGludG8gb25lIGJ5IHNldHRpbmcgdGhlIGluZGV4X2Jsb2NrX3NpemV7X2JpdHN9IG9mIHRoZSBudGZzCi0JICBpbm9kZSBmb3IgJE1GVCB0byB0aGUgbWZ0X3JlY29yZF9zaXple19iaXRzfSBvZiB0aGUgbnRmc192b2x1bWUuCi0JLSBDbGVhbnVwIGFvcHMuYywgdXBkYXRlIGNvbW1lbnRzLgotCS0gTWFrZSBudGZzX2ZpbGVfZ2V0X2Jsb2NrKCkgdXNlIG1hcF9ydW5fbGlzdCgpIHNvIGFsbCBmaWxlcyBub3cKLQkgIHN1cHBvcnQgYXR0cmlidXRlIGxpc3RzLgotCS0gTWFrZSBudGZzX2Rpcl9yZWFkcGFnZSgpIGFsbW9zdCB2ZXJiYXRpbSBjb3B5IG9mCi0JICBibG9ja19yZWFkX2Z1bGxfcGFnZSgpIGJ5IHVzaW5nIG50ZnNfZmlsZV9nZXRfYmxvY2soKSB3aXRoIG9ubHkgcmVhbAotCSAgZGlmZmVyZW5jZSBiZWluZyB0aGUgdXNlIG9mIG91ciBvd24gYXN5bmMgaW8gY29tcGxldGlvbiBoYW5kbGVyCi0JICByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBvbmUsIHRodXMgcmVkdWNpbmcgdGhlIGFtb3VudCBvZiBjb2RlIGFuZAotCSAgYXV0b21hdGljYWxseSBlbmFibGluZyBhdHRyaWJ1dGUgbGlzdCBzdXBwb3J0IGZvciBkaXJlY3RvcnkgaW5kaWNlcy4KLQktIEZpeCBidWcgaW4gbG9hZF9hdHRyaWJ1dGVfbGlzdCgpIC0gZm9yZ290IHRvIGNhbGwgYnJlbHNlIGluIGVycm9yCi0JICBjb2RlIHBhdGguCi0JLSBDaGFuZ2UgcGFyYW1ldGVycyB0byBmaW5kX2F0dHIoKSBhbmQgbG9va3VwX2F0dHIoKS4gV2Ugbm8gbG9uZ2VyCi0JICBwYXNzIGluIHRoZSB1cGNhc2UgdGFibGUgYW5kIGl0cyBsZW5ndGguIFRoZXNlIGNhbiBiZSBnb3R0ZW4gZnJvbQotCSAgY3R4LT5udGZzX2luby0+dm9sLT51cGNhc2V7X2xlbn0uIFVwZGF0ZSBhbGwgY2FsbGVycy4KLQktIENsZWFudXBzIGluIGF0dHJpYi5jLgotCS0gSW1wbGVtZW50IG1lcmdpbmcgb2YgcnVubGlzdHMsIGF0dHJpYi5jOjptZXJnZV9ydW5fbGlzdHMoKSBhbmQgaXRzCi0JICBoZWxwZXJzLiAoUmljaGFyZCBSdXNzb24pCi0JLSBBdHRyaWJ1dGUgbGlzdHMgcGFydCAyLCBhdHRyaWJ1dGUgZXh0ZW50cyBhbmQgbXVsdGkgcGFydCBydW5saXN0czoKLQkgIGVuYWJsZSBwcm9wZXIgc3VwcG9ydCBmb3IgTENOX1JMX05PVF9NQVBQRUQgYW5kIGF1dG9tYXRpYyBtYXBwaW5nIG9mCi0JICBmdXJ0aGVyIHJ1bmxpc3QgcGFydHMgdmlhIGF0dHJpYi5jOjptYXBfcnVuX2xpc3QoKS4KLQktIFRpbnkgZW5kaWFubmVzcyBidWcgZml4IGluIGRlY29tcHJlc3NfbWFwcGluZ19wYWlycygpLgotCi10bmctMC4wLjYgLSBFbmNyeXB0ZWQgZGlyZWN0b3JpZXMsIGJ1ZyBmaXhlcywgY2xlYW51cHMsIGRlYnVnZ2luZyBlbmhhbmNlbWVudHMuCi0KLQktIEVuYWJsZSBlbmNyeXB0ZWQgZGlyZWN0b3JpZXMuIChUaGVpciBpbmRleCByb290IGlzIG1hcmtlZCBlbmNyeXB0ZWQKLQkgIHRvIGluZGljYXRlIHRoYXQgbmV3IGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5IHNob3VsZCBiZSBjcmVhdGVkCi0JICBlbmNyeXB0ZWQuKQotCS0gRml4IGJ1ZyBpbiBOSW5vQm1wTm9uUmVzaWRlbnQoKSBtYWNyby4gKEN1dCBhbmQgcGFzdGUgZXJyb3IuKQotCS0gRW5hYmxlICRFeHRlbmQgc3lzdGVtIGRpcmVjdG9yeS4gTW9zdCAoaWYgbm90IGFsbCkgZXh0ZW5kZWQgc3lzdGVtCi0JICBmaWxlcyBkbyBub3QgaGF2ZSB1bm5hbWVkIGRhdGEgYXR0cmlidXRlcyBzbyBudGZzX3JlYWRfaW5vZGUoKSBoYWQgdG8KLQkgIHNwZWNpYWwgY2FzZSB0aGVtIGJ1dCB0aGF0IGlzIG9rLCBhcyB0aGUgc3BlY2lhbCBjYXNpbmcgcmVjb3ZlcnkKLQkgIGhhcHBlbnMgaW5zaWRlIGFuIGVycm9yIGNvZGUgcGF0aCBzbyB0aGVyZSBpcyB6ZXJvIHNsb3cgZG93biBpbiB0aGUKLQkgIG5vcm1hbCBmYXN0IHBhdGguIFRoZSBzcGVjaWFsIGNhc2luZyBpcyBkb25lIGJ5IGludHJvZHVjaW5nIGEgbmV3Ci0JICBmdW5jdGlvbiBpbm9kZS5jOjpudGZzX2lzX2V4dGVuZGVkX3N5c3RlbV9maWxlKCkgd2hpY2ggY2hlY2tzIGlmIGFueQotCSAgb2YgdGhlIGhhcmQgbGlua3MgaW4gdGhlIGlub2RlIHBvaW50IHRvICRFeHRlbmQgYXMgYmVpbmcgdGhlaXIgcGFyZW50Ci0JICBkaXJlY3RvcnkgYW5kIGlmIHRoZXkgZG8gd2UgYXNzdW1lIHRoaXMgaXMgYW4gZXh0ZW5kZWQgc3lzdGVtIGZpbGUuCi0JLSBDcmVhdGUgYSBzeXNjdGwvcHJvYyBpbnRlcmZhY2UgdG8gYWxsb3cge2Rpcyxlbn1hYmxpbmcgb2YgZGVidWcgb3V0cHV0Ci0JICB3aGVuIGNvbXBpbGVkIHdpdGggLURERUJVRy4gRGVmYXVsdCBpcyBkZWJ1ZyBtZXNzYWdlcyB0byBiZSBkaXNhYmxlZC4KLQkgIFRvIGVuYWJsZSB0aGVtLCBvbmUgd3JpdGVzIGEgbm9uLXplcm8gdmFsdWUgdG8gL3Byb2Mvc3lzL2ZzL250ZnMtZGVidWcKLQkgIChpZiAvcHJvYyBpcyBlbmFibGVkKSBvciB1c2VzIHN5c2N0bCgyKSB0byBlZmZlY3QgdGhlIHNhbWUgKGlmIHN5c2N0bAotCSAgaW50ZXJmYWNlIGlzIGVuYWJsZWQpLiBJbnNwaXJlZCBieSBvbGQgbnRmcyBkcml2ZXIuCi0JLSBBZGQgZGVidWdfbXNncyBpbnNtb2Qva2VybmVsIGJvb3QgcGFyYW1ldGVyIHRvIHNldCB3aGV0aGVyIGRlYnVnCi0JICBtZXNzYWdlcyBhcmUge2Rpcyxlbn1hYmxlZC4gVGhpcyBpcyB1c2VmdWwgdG8gZW5hYmxlIGRlYnVnIG1lc3NhZ2VzCi0JICBkdXJpbmcgbnRmcyBpbml0aWFsaXphdGlvbiBhbmQgaXMgdGhlIG9ubHkgd2F5IHRvIGFjdGl2YXRlIGRlYnVnZ2luZwotCSAgd2hlbiB0aGUgc3lzY3RsIGludGVyZmFjZSBpcyBub3QgZW5hYmxlZC4KLQktIENsZWFudXAgZGVidWcgb3V0cHV0IGluIHZhcmlvdXMgcGxhY2VzLgotCS0gUmVtb3ZlIGFsbCBkb2xsYXIgc2lnbnMgKCQpIGZyb20gdGhlIHNvdXJjZSAoZXhjZXB0IGNvbW1lbnRzKSB0bwotCSAgZW5hYmxlIGNvbXBpbGF0aW9uIG9uIGFyY2hpdGVjdHVyZXMgd2hvc2UgZ2NjIGNvbXBpbGVyIGRvZXMgbm90Ci0JICBzdXBwb3J0IGRvbGxhciBzaWducyBpbiB0aGUgbmFtZXMgb2YgdmFyaWFibGVzL2NvbnN0YW50cy4gQXR0cmlidXRlCi0JICB0eXBlcyBub3cgc3RhcnQgd2l0aCBBVF8gaW5zdGVhZCBvZiAkIGFuZCAkSTMwIGlzIG5vdyBqdXN0IEkzMC4KLQktIENsZWFudXAgbnRmc19sb29rdXAoKSBhbmQgYWRkIGNvbnNpc3RlbmN5IGNoZWNrIG9mIHNlcXVlbmNlIG51bWJlcnMuCi0JLSBMb2FkIGNvbXBsZXRlIHJ1bmxpc3QgZm9yICRNRlQvJEJJVE1BUCBkdXJpbmcgbW91bnQgYW5kIGNsZWFudXAKLQkgIGFjY2VzcyBmdW5jdGlvbnMuIFRoaXMgbWVhbnMgd2Ugbm93IGNvcGUgd2l0aCAkTUZULyRCSVRNQVAgYmVpbmcKLQkgIHNwcmVhZCBhY2Nyb3NzIHNldmVyYWwgbWZ0IHJlY29yZHMuCi0JLSBEaXNhYmxlIG1vZGlmaWNhdGlvbiBvZiBtZnRfem9uZV9tdWx0aXBsaWVyIG9uIHJlbW91bnQuIFdlIGNhbiBhbHdheXMKLQkgIHJlZW5hYmxlIHRoaXMgbGF0ZXIgb24gaWYgd2UgcmVhbGx5IHdhbnQgdG8sIGJ1dCB3ZSB3aWxsIG5lZWQgdG8gbWFrZQotCSAgc3VyZSB3ZSByZWFkanVzdCB0aGUgbWZ0X3pvbmUgc2l6ZSAvIGxheW91dCBhY2NvcmRpbmdseS4KLQotdG5nLTAuMC41IC0gTW9kZXJuaXplIGZvciAyLjUueCBhbmQgZnVydGhlciBpbiBsaW5lLWluZyB3aXRoIEFsIFZpcm8ncyBjb21tZW50cy4KLQotCS0gVXNlIHNiX3NldF9ibG9ja3NpemUoKSBpbnN0ZWFkIG9mIHNldF9ibG9ja3NpemUoKSBhbmQgdmVyaWZ5IHRoZQotCSAgcmV0dXJuIHZhbHVlLgotCS0gVXNlIHNiX2JyZWFkKCkgaW5zdGVhZCBvZiBicmVhZCgpIHRocm91Z2hvdXQuCi0JLSBBZGQgaW5kZXhfdmNuX3NpemV7X2JpdHN9IHRvIG50ZnNfaW5vZGUgc3RydWN0dXJlIHRvIHN0b3JlIHRoZSBzaXplCi0JICBvZiBhIGRpcmVjdG9yeSBpbmRleCBibG9jayB2Y24uIEFwcGx5IHJlc3VsdGluZyBzaW1wbGlmaWNhdGlvbnMgaW4KLQkgIGRpci5jIGV2ZXJ5d2hlcmUuCi0JLSBGaXggYSBzbWFsbCBidWcgc29tZXdoZXJlIChidXQgZm9yZ290IHdoYXQgaXQgd2FzKS4KLQktIENoYW5nZSBudGZzX3tkZWJ1ZyxlcnJvcix3YXJuaW5nfSB0byBlbmFibGUgZ2NjIHRvIGRvIHR5cGUgY2hlY2tpbmcKLQkgIG9uIHRoZSBwcmludGYtZm9ybWF0IHBhcmFtZXRlciBsaXN0IGFuZCBmaXggYnVncyByZXBvcnRlZCBieSBnY2MKLQkgIGFzIGEgcmVzdWx0LiAoUmljaGFyZCBSdXNzb24pCi0JLSBNb3ZlIGlub2RlIGFsbG9jYXRpb24gc3RyYXRlZ3kgdG8gQWwncyBuZXcgc3R1ZmYgYnV0IG1haW50YWluIHRoZQotCSAgZGl2b3JjZSBvZiBudGZzX2lub2RlIGZyb20gc3RydWN0IGlub2RlLiBUbyBhY2hpZXZlIHRoaXMgd2UgaGF2ZSB0d28KLQkgIHNlcGFyYXRlIHNsYWIgY2FjaGVzLCBvbmUgZm9yIGJpZyBudGZzIGlub2RlcyBjb250YWluaW5nIGEgc3RydWN0Ci0JICBpbm9kZSBhbmQgcHVyZSBudGZzIGlub2RlcyBhbmQgYXQgdGhlIHNhbWUgdGltZSBmaXggc29tZSBmYXVsdHkKLQkgIGVycm9yIGNvZGUgcGF0aHMgaW4gbnRmc19yZWFkX2lub2RlKCkuCi0JLSBTaG93IG1vdW50IG9wdGlvbnMgaW4gcHJvYyAoaW5vZGUuYzo6bnRmc19zaG93X29wdGlvbnMoKSkuCi0KLXRuZy0wLjAuNCAtIEJpZyBjaGFuZ2VzLCBnZXR0aW5nIGluIGxpbmUgd2l0aCBBbCBWaXJvJ3MgY29tbWVudHMuCi0KLQktIE1vZGlmaWVkICh1biltYXBfbWZ0X3JlY29yZCBmdW5jdGlvbnMgdG8gYmUgY29tbW9uIGZvciByZWFkIGFuZCB3cml0ZQotCSAgY2FzZS4gVG8gc3BlY2lmeSB3aGljaCBpcyB3aGljaCwgYWRkZWQgZXh0cmEgcGFyYW1ldGVyIGF0IGZyb250IG9mCi0JICBwYXJhbWV0ZXIgbGlzdC4gUGFzcyBlaXRoZXIgUkVBRCBvciBXUklURSB0byB0aGlzLCBlYWNoIGhhcyB0aGUKLQkgIG9idmlvdXMgbWVhbmluZy4KLQktIEdlbmVyYWwgY2xlYW51cHMgdG8gYWxsb3cgZm9yIGVhc2llciBmb2xkaW5nIGluIHZpLgotCS0gYXR0cmliLmM6OmRlY29tcHJlc3NfbWFwcGluZ19wYWlycygpIG5vdyBhY2NlcHRzIHRoZSBvbGQgcnVubGlzdAotCSAgYXJndW1lbnQsIGFuZCBpbnZva2VzIGF0dHJpYi5jOjptZXJnZV9ydW5fbGlzdHMoKSB0byBtZXJnZSB0aGUgb2xkCi0JICBhbmQgdGhlIG5ldyBydW5saXN0cy4KLQktIFJlbW92ZWQgYXR0cmliLmM6OmZpbmRfZmlyc3RfYXR0cigpLgotCS0gSW1wbGVtZW50ZWQgbG9hZGluZyBvZiBhdHRyaWJ1dGUgbGlzdCBhbmQgY29tcGxldGUgcnVubGlzdCBmb3IgJE1GVC4KLQkgIFRoaXMgbWVhbnMgd2Ugbm93IGNvcGUgd2l0aCAkTUZUIGJlaW5nIHNwcmVhZCBhY3Jvc3Mgc2V2ZXJhbCBtZnQKLQkgIHJlY29yZHMuCi0JLSBBZGFwdCB0byAyLjUuMi1wcmU5IGFuZCB0aGUgY2hhbmdlZCBjcmVhdGVfZW1wdHlfYnVmZmVycygpIHN5bnRheC4KLQktIEFkYXB0IG1ham9yL21pbm9yL2tkZXZfdC9bYmtdZGV2bmFtZSBzdHVmZiB0byBuZXcgMi41Lngga2VybmVscy4KLQktIE1ha2UgbnRmc192b2x1bWUgYmUgYWxsb2NhdGVkIHZpYSBrbWFsbG9jKCkgaW5zdGVhZCBvZiB1c2luZyBhIHNsYWIKLQkgIGNhY2hlLiBUaGVyZSBhcmUgdG9vIGxpdHRsZSBudGZzX3ZvbHVtZSBzdHJ1Y3R1cmVzIGF0IGFueSBvbmUgdGltZQotCSAgdG8ganVzdGlmeSBhIHByaXZhdGUgc2xhYiBjYWNoZS4KLQktIEZpeCBib2d1cyBrbWFwKCkgdXNlIGluIGFzeW5jIGlvIGNvbXBsZXRpb24uIE5vdyB1c2Uga21hcF9hdG9taWMoKS4KLQkgIFVzZSBLTV9CSU9fSVJRIG9uIGFkdmljZSBmcm9tIElSQy9rZXJuZWwuLi4KLQktIFVzZSBudGZzX21hcF9wYWdlKCkgaW4gbWFwX21mdF9yZWNvcmQoKSBhbmQgY3JlYXRlIC0+cmVhZHBhZ2UgbWV0aG9kCi0JICBmb3IgcmVhZGluZyAkTUZUIChudGZzX21mdF9yZWFkcGFnZSkuIEluIHRoZSBwcm9jZXNzIGNyZWF0ZSBkZWRpY2F0ZWQKLQkgIGFkZHJlc3Mgc3BhY2Ugb3BlcmF0aW9ucyAobnRmc19tZnRfYW9wcykgZm9yICRNRlQgaW5vZGUgbWFwcGluZy4gQWxzbwotCSAgcmVtb3ZlZCB0aGUgbm93IHN1cGVyZmx1b3VzIGV4cG9ydHMgZnJvbSB0aGUga2VybmVsIGNvcmUgcGF0Y2guCi0JLSBGaXggYSBidWcgd2hlcmUga2ZyZWUoKSB3YXMgdXNlZCBpbnN0ZWFkIG9mIG50ZnNfZnJlZSgpLgotCS0gQ2hhbmdlIG1hcF9tZnRfcmVjb3JkKCkgdG8gdGFrZSBudGZzX2lub2RlIGFzIGFyZ3VtZW50IGluc3RlYWQgb2YKLQkgIHZmcyBpbm9kZS4gRGl0byBmb3IgdW5tYXBfbWZ0X3JlY29yZCgpLiBBZGFwdCBhbGwgY2FsbGVycy4KLQktIEFkZCBwb2ludGVyIHRvIG50ZnNfdm9sdW1lIHRvIG50ZnNfaW5vZGUuCi0JLSBBZGQgbWZ0IHJlY29yZCBudW1iZXIgYW5kIHNlcXVlbmNlIG51bWJlciB0byBudGZzX2lub2RlLiBTdG9wIHVzaW5nCi0JICBpX2lubyBhbmQgaV9nZW5lcmF0aW9uIGZvciBpbi1kcml2ZXIgcHVycG9zZXMuCi0JLSBJbXBsZW1lbnQgYXR0cmliLmM6Om1lcmdlX3J1bl9saXN0cygpLiAoUmljaGFyZCBSdXNzb24pCi0JLSBSZW1vdmUgdXNlIG9mIHByb3BlciBpbm9kZXMgYnkgZXh0ZW50IGlub2Rlcy4gTW92ZSBpX2lubyBhbmQKLQkgIGlfZ2VuZXJhdGlvbiB0byBudGZzX2lub2RlIHRvIGRvIHRoaXMuIEFwcGx5IHNpbXBsaWZpY2F0aW9ucyB0aGF0Ci0JICByZXN1bHQgYW5kIHJlbW92ZSBpZ2V0X25vX3dhaXQoKSwgZXRjLgotCS0gUGFzcyBudGZzX2lub2RlIGV2ZXJ5d2hlcmUgaW4gdGhlIGRyaXZlciAodXNlZCB0byBiZSBzdHJ1Y3QgaW5vZGUpLgotCS0gQWRkIHJlZmVyZW5jZSBjb3VudGluZyBpbiBudGZzX2lub2RlIGZvciB0aGUgbnRmcyBpbm9kZSBpdHNlbGYgYW5kCi0JICBmb3IgdGhlIG1hcHBlZCBtZnQgcmVjb3JkLgotCS0gRXh0ZW5kIG1mdCByZWNvcmQgbWFwcGluZyBzbyB3ZSBjYW4gKHVuKW1hcCBleHRlbnQgbWZ0IHJlY29yZHMgKG5ldwotCSAgZnVuY3Rpb25zICh1biltYXBfZXh0ZW50X21mdF9yZWNvcmQpLCBhbmQgc28gbWFwcGluZ3MgYXJlIHJlZmVyZW5jZQotCSAgY291bnRlZCBhbmQgZG9uJ3QgaGF2ZSB0byBoYXBwZW4gdHdpY2UgaWYgYWxyZWFkeSBtYXBwZWQgLSBqdXN0IHJlZgotCSAgY291bnQgaW5jcmVhc2VzLgotCS0gQWRkIC1vIGlvY2hhcnNldCBhcyBhbGlhcyB0byAtbyBubHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgotCS0gVGhlIGxhdGVzdCBjb3JlIHBhdGNoIGlzIG5vdyB0aW55LiBJbiBmYWN0IGp1c3QgYSBzaW5nbGUgYWRkaXRpb25hbAotCSAgZXhwb3J0IGlzIG5lY2Vzc2FyeSBvdmVyIHRoZSBiYXNlIGtlcm5lbC4KLQotdG5nLTAuMC4zIC0gQ2xlYW51cHMsIGVuaGFuY2VtZW50cywgYnVnIGZpeGVzLgotCi0JLSBXb3JrIG9uIGF0dHJpYi5jOjpkZWNvbXByZXNzX21hcHBpbmdfcGFpcnMoKSB0byBkZXRlY3QgYmFzZSBleHRlbnRzCi0JICBhbmQgc2V0dXAgdGhlIHJ1bmxpc3QgYXBwcm9wcmlhdGVseSB1c2luZyBrbm93bGVkZ2UgcHJvdmlkZWQgYnkgdGhlCi0JICBzaXplcyBpbiB0aGUgYmFzZSBhdHRyaWJ1dGUgcmVjb3JkLgotCS0gQmFsYW5jZSB0aGUgZ2V0Xy9wdXRfYXR0cl9zZWFyY2hfY3R4KCkgY2FsbHMgc28gd2UgZG9uJ3QgbGVhayBtZW1vcnkKLQkgIGFueSBtb3JlLgotCS0gSW50cm9kdWNlIG50ZnNfbWFsbG9jX25vZnMoKSBhbmQgbnRmc19mcmVlKCkgdG8gYWxsb2NhdGUvZnJlZSBhIHNpbmdsZQotCSAgcGFnZSBvciB1c2Ugdm1hbGxvYyBkZXBlbmRpbmcgb24gdGhlIGFtb3VudCBvZiBtZW1vcnkgcmVxdWVzdGVkLgotCS0gQ2xlYW51cCBlcnJvciBvdXRwdXQuIFRoZSBfX0ZVTkNUSU9OX18gIigpOiAiIGlzIG5vdyBhZGRlZAotCSAgYXV0b21hdGljYWxseS4gSW50cm9kdWNlZCBhIG5ldyBoZWFkZXIgZmlsZSBkZWJ1Zy5oIHRvIHN1cHBvcnQgdGhpcwotCSAgYW5kIGFsc28gbW92ZWQgbnRmc19kZWJ1ZygpIGZ1bmN0aW9uIGludG8gaXQuCi0JLSBNYWtlIHJlYWRpbmcgb2YgY29tcHJlc3NlZCBmaWxlcyBtb3JlIGludGVsbGlnZW50IGFuZCBlc3BlY2lhbGx5IGdldAotCSAgcmlkIG9mIHRoZSB2bWFsbG9jX25vZnMoKSBmcm9tIHJlYWRwYWdlKCkuIFRoaXMgbm93IHVzZXMgcGVyIENQVQotCSAgYnVmZmVycyAoYWxsb2NhdGVkIGF0IGZpcnN0IG1vdW50IHdpdGggY2x1c3RlciBzaXplIDw9IDRraUIgYW5kCi0JICBkZWFsbG9jYXRlZCBvbiBsYXN0IHVtb3VudCB3aXRoIGNsdXN0ZXIgc2l6ZSA8PSA0a2lCKSwgYW5kCi0JICBhc3luY2hyb25vdXMgaW8gZm9yIHRoZSBjb21wcmVzc2VkIGRhdGEgdXNpbmcgYSBsaXN0IG9mIGJ1ZmZlciBoZWFkcy4KLQkgIEVyLCB3ZSB1c2Ugc3luY2hyb25vdXMgaW8gYXMgYXN5bmMgaW8gb25seSB3b3JrcyBvbiB3aG9sZSBwYWdlcwotCSAgY292ZXJlZCBieSBidWZmZXJzIGFuZCBub3Qgb24gaW5kaXZpZHVhbCBidWZmZXIgaGVhZHMuLi4KLQktIEJ1ZyBmaXggZm9yIHJlYWRpbmcgY29tcHJlc3NlZCBmaWxlcyB3aXRoIHNwYXJzZSBjb21wcmVzc2lvbiBibG9ja3MuCi0KLXRuZy0wLjAuMiAtIE5vdyBoYW5kbGVzIGxhcmdlci9mcmFnbWVudGVkL2NvbXByZXNzZWQgdm9sdW1lcy9maWxlcy9kaXJzLgotCi0JLSBGaXhlZCBoYW5kbGluZyBvZiBkaXJlY3RvcmllcyB3aGVuIGNsdXN0ZXIgc2l6ZSBleGNlZWRzIGluZGV4IGJsb2NrCi0JICBzaXplLgotCS0gSGlkZSBET1Mgb25seSBuYW1lIHNwYWNlIGRpcmVjdG9yeSBlbnRyaWVzIGZyb20gcmVhZGRpcigpIGJ1dCBhbGxvdwotCSAgdGhlbSBpbiBsb29rdXAoKS4gVGhpcyBzaG91bGQgZml4IHRoZSBwcm9ibGVtIHRoYXQgTGludXggZG9lc24ndAotCSAgc3VwcG9ydCBkaXJlY3RvcnkgaGFyZCBsaW5rcywgd2hpbGUgc3RpbGwgYWxsb3dpbmcgYWNjZXNzIHRvIGVudHJpZXMKLQkgIHZpYSB0aGVpciBzaG9ydCBmaWxlIG5hbWUuIFRoaXMgYWxzbyBoYXMgdGhlIGJlbmVmaXQgb2YgbWltaWNraW5nCi0JICB3aGF0IFdpbmRvd3MgdXNlcnMgYXJlIHVzZWQgdG8sIHNvIGl0IGlzIHRoZSBpZGVhbCBzb2x1dGlvbi4KLQktIEltcGxlbWVudGVkIHN5bmNfcGFnZSBldmVyeXdoZXJlIHNvIG5vIG1vcmUgaGFuZ3MgaW4gRCBzdGF0ZSB3aGVuCi0JICB3YWl0aW5nIGZvciBhIHBhZ2UuCi0JLSBTdG9wIHVzaW5nIGJmb3JnZXQoKSBpbiBmYXZvdXIgb2YgYnJlbHNlKCkuCi0JLSBTdG9wIGxvY2tpbmcgYnVmZmVycyB1bm5lY2Vzc2FyaWx5LgotCS0gSW1wbGVtZW50ZWQgY29tcHJlc3NlZCBmaWxlcyAoaW5vZGUtPm1hcHBpbmcgY29udGFpbnMgdW5jb21wcmVzc2VkCi0JICBkYXRhLCByYXcgY29tcHJlc3NlZCBkYXRhIGlzIGN1cnJlbnRseSBicmVhZCgpIGludG8gYSB2bWFsbG9jKCllZAotCSAgbWVtb3J5IGJ1ZmZlcikuCi0JLSBFbmFibGUgY29tcHJlc3NlZCBkaXJlY3Rvcmllcy4gKFRoZWlyIGluZGV4IHJvb3QgaXMgbWFya2VkIGNvbXByZXNzZWQKLQkgIHRvIGluZGljYXRlIHRoYXQgbmV3IGZpbGVzIGluIHRoYXQgZGlyZWN0b3J5IHNob3VsZCBiZSBjcmVhdGVkCi0JICBjb21wcmVzc2VkLikKLQktIFVzZSB2c25wcmludGYgcmF0aGVyIHRoYW4gdnNwcmludGYgaW4gdGhlIG50ZnNfZXJyb3IgYW5kIG50ZnNfd2FybmluZwotCSAgZnVuY3Rpb25zLiAoVGhhbmtzIHRvIFdpbGwgRHlzb24gZm9yIHBvaW50aW5nIHRoaXMgb3V0LikKLQktIE1vdmVkIHRoZSBudGZzX2lub2RlIGFuZCBudGZzX3ZvbHVtZSAodGhlIGZvcm1lciBudGZzX2lub2RlX2luZm8gYW5kCi0JICBudGZzX3NiX2luZm8pIG91dCBvZiB0aGUgY29tbW9uIGlub2RlIGFuZCBzdXBlcl9ibG9jayBzdHJ1Y3R1cmVzIGFuZAotCSAgc3RhcnRlZCB1c2luZyB0aGUgZ2VuZXJpY19pcCBhbmQgZ2VuZXJpY19zYnAgcG9pbnRlcnMgaW5zdGVhZC4gVGhpcwotCSAgbWFrZXMgbnRmcyBlbnRpcmVseSBwcml2YXRlIHdpdGggcmVzcGVjdCB0byB0aGUga2VybmVsIHRyZWUuCi0JLSBEZXRlY3QgY29tcGlsZXIgdmVyc2lvbiBhbmQgYWJvcnQgd2l0aCBlcnJvciBtZXNzYWdlIGlmIGdjYyBsZXNzIHRoYW4KLQkgIDIuOTYgaXMgdXNlZC4KLQktIEZpeCBidWcgaW4gbmFtZSBjb21wYXJpc29uIGZ1bmN0aW9uIGluIHVuaXN0ci5jLgotCS0gSW1wbGVtZW50IGF0dHJpYnV0ZSBsaXN0cyBwYXJ0IDEsIHRoZSBpbmZyYXN0cnVjdHVyZTogc2VhcmNoIGNvbnRleHRzCi0JICBhbmQgb3BlcmF0aW9ucywgZmluZF9leHRlcm5hbF9hdHRyKCksIGxvb2t1cF9hdHRyKCkpIGFuZCBtYWtlIHRoZQotCSAgY29kZSB1c2UgdGhlIGluZnJhc3RydWN0dXJlLgotCS0gRml4IHN0dXBpZCBidWZmZXIgb3ZlcmZsb3cgYnVnIHRoYXQgYmVjYW1lIGFwcGFyZW50IG9uIGxhcmdlciBydW4KLQkgIGxpc3QgY29udGFpbmluZyBhdHRyaWJ1dGVzLgotCS0gRml4IGJ1Z3MgaW4gcmVhZGRpcigpIHRoYXQgYmVjYW1lIGFwcGFyZW50IG9uIGxhcmdlciBkaXJlY3Rvcmllcy4KLQotCVRoZSBkcml2ZXIgaXMgbm93IHJlYWxseSB1c2VmdWwgYW5kIHN1cnZpdmVzIHRoZSB0ZXN0Ci0JCWZpbmQgLiAtdHlwZSBmIC1leGVjIG1kNXN1bSAie30iIFw7Ci0Jd2l0aG91dCBhbnkgZXJyb3IgbWVzc2FnZXMgb24gYSBvdmVyIDFHaUIgc2l6ZWQgcGFydGl0aW9uIHdpdGggPjE2awotCWZpbGVzIG9uIGl0LCBpbmNsdWRpbmcgY29tcHJlc3NlZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgYW5kIG1hbnkgZmlsZXMKLQlhbmQgZGlyZWN0b3JpZXMgd2l0aCBhdHRyaWJ1dGUgbGlzdHMuCi0KLXRuZy0wLjAuMSAtIFRoZSBmaXJzdCB1c2VmdWwgdmVyc2lvbi4KLQotCS0gQWRkZWQgbnRmc19sb29rdXAoKS4KLQktIEFkZGVkIGRlZmF1bHQgdXBjYXNlIGdlbmVyYXRpb24gYW5kIGhhbmRsaW5nLgotCS0gQWRkZWQgY29tcGlsZSBvcHRpb25zIHRvIGJlIHNob3duIG9uIG1vZHVsZSBpbml0LgotCS0gTWFueSBidWcgZml4ZXMgdGhhdCB3ZXJlICJoaWRkZW4iIGJlZm9yZS4KLQktIFVwZGF0ZSB0byBsYXRlc3Qga2VybmVsLgotCS0gQWRkZWQgbnRmc19yZWFkZGlyKCkuCi0JLSBBZGRlZCBmaWxlIG9wZXJhdGlvbnMgZm9yIG1tYXAoKSwgcmVhZCgpLCBvcGVuKCkgYW5kIGxsc2VlaygpLiBXZSBqdXN0Ci0JICB1c2UgdGhlIGdlbmVyaWMgb25lcy4gVGhlIHdob2xlIHBvaW50IG9mIGdvaW5nIHRocm91Z2ggaW1wbGVtZW50aW5nCi0JICByZWFkcGFnZSgpIG1ldGhvZHMgYW5kIHdoZXJlIHBvc3NpYmxlIGdldF9ibG9jaygpIGNhbGwgYmFja3MgaXMgdGhhdAotCSAgdGhpcyBhbGxvd3MgdXMgdG8gbWFrZSB1c2Ugb2YgdGhlIGdlbmVyaWMgaGlnaCBsZXZlbCBtZXRob2RzIHByb3ZpZGVkCi0JICBieSB0aGUga2VybmVsLgotCi0JVGhlIGRyaXZlciBpcyBub3cgYWN0dWFsbHkgdXNlZnVsISBZZXkuICgtOiBJdCB1bmRvdWJ0ZWRseSBoYXMgZ290IGJ1Z3MKLQl0aG91Z2ggYW5kIGl0IGRvZXNuJ3QgaW1wbGVtZW50IGFjY2Vzc3NpbmcgY29tcHJlc3NlZCBmaWxlcyB5ZXQuIEFsc28sCi0JYWNjZXNzaW5nIGZpbGVzIHdpdGggYXR0cmlidXRlIGxpc3QgYXR0cmlidXRlcyBpcyBub3QgaW1wbGVtZW50ZWQgeWV0Ci0JZWl0aGVyLiBCdXQgZm9yIHNtYWxsIG9yIHNpbXBsZSBmaWxlc3lzdGVtcyBpdCBzaG91bGQgd29yayBhbmQgYWxsb3cKLQl5b3UgdG8gbGlzdCBkaXJlY3RvcmllcywgdXNlIHN0YXQgb24gZGlyZWN0b3J5IGVudHJpZXMgYW5kIHRoZSBmaWxlCi0Jc3lzdGVtLCBvcGVuLCByZWFkLCBtbWFwIGFuZCBsbHNlZWsgYXJvdW5kIGluIGZpbGVzLiBBIGJpZyBtaWxlIHN0b25lCi0JaGFzIGJlZW4gcmVhY2hlZCEKLQotdG5nLTAuMC4wIC0gSW5pdGlhbCB2ZXJzaW9uIHRhZy4KLQotCUluaXRpYWwgZHJpdmVyIGltcGxlbWVudGF0aW9uLiBUaGUgZHJpdmVyIGNhbiBtb3VudCBhbmQgdW1vdW50IHNpbXBsZQotCU5URlMgZmlsZXN5c3RlbXMgKGkuZS4gb25lcyB3aXRob3V0IGF0dHJpYnV0ZSBsaXN0cyBpbiB0aGUgc3lzdGVtCi0JZmlsZXMpLiBJZiB0aGUgbW91bnQgZmFpbHMgdGhlcmUgbWlnaHQgYmUgcHJvYmxlbXMgaW4gdGhlIGVycm9yIGhhbmRsaW5nCi0JY29kZSBwYXRocywgc28gYmUgd2FybmVkLiBPdGhlcndpc2UgaXQgc2VlbXMgdG8gYmUgbG9hZGluZyB0aGUgc3lzdGVtCi0JZmlsZXMgbmljZWx5IGFuZCB0aGUgbWZ0IHJlY29yZCByZWFkIG1hcHBpbmcvdW5tYXBwaW5nIHNlZW1zIHRvIGJlCi0Jd29ya2luZyBuaWNlbHksIHRvby4gUHJvb2Ygb2YgaW5vZGUgbWV0YWRhdGEgaW4gdGhlIHBhZ2UgY2FjaGUgYW5kIG5vbi0KLQlyZXNpZGVudCBmaWxlIHVubmFtZWQgc3RyZWFtIGRhdGEgaW4gdGhlIHBhZ2UgY2FjaGUgY29uY2VwdHMgaXMgdGh1cwotCWNvbXBsZXRlLgpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9kaXIuYyBiL2ZzL250ZnMvZGlyLmMKaW5kZXggNWE5ZTM0NC4uOTE3M2U4MiAxMDA2NDQKLS0tIGEvZnMvbnRmcy9kaXIuYworKysgYi9mcy9udGZzL2Rpci5jCkBAIC0xNTQ1LDcgKzE1NDUsNyBAQAogIAkJd3JpdGVfaW5vZGVfbm93KGJtcF92aSwgIWRhdGFzeW5jKTsKIAkJaXB1dChibXBfdmkpOwogCX0KLQlyZXQgPSBudGZzX3dyaXRlX2lub2RlKHZpLCAxKTsKKwlyZXQgPSBfX250ZnNfd3JpdGVfaW5vZGUodmksIDEpOwogCXdyaXRlX2lub2RlX25vdyh2aSwgIWRhdGFzeW5jKTsKIAllcnIgPSBzeW5jX2Jsb2NrZGV2KHZpLT5pX3NiLT5zX2JkZXYpOwogCWlmICh1bmxpa2VseShlcnIgJiYgIXJldCkpCmRpZmYgLS1naXQgYS9mcy9udGZzL2ZpbGUuYyBiL2ZzL250ZnMvZmlsZS5jCmluZGV4IDQzMTc5ZGQuLmI2ODFjNzEgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvZmlsZS5jCisrKyBiL2ZzL250ZnMvZmlsZS5jCkBAIC0yMTgyLDcgKzIxODIsNyBAQAogCW50ZnNfZGVidWcoIkVudGVyaW5nIGZvciBpbm9kZSAweCVseC4iLCB2aS0+aV9pbm8pOwogCUJVR19PTihTX0lTRElSKHZpLT5pX21vZGUpKTsKIAlpZiAoIWRhdGFzeW5jIHx8ICFOSW5vTm9uUmVzaWRlbnQoTlRGU19JKHZpKSkpCi0JCXJldCA9IG50ZnNfd3JpdGVfaW5vZGUodmksIDEpOworCQlyZXQgPSBfX250ZnNfd3JpdGVfaW5vZGUodmksIDEpOwogCXdyaXRlX2lub2RlX25vdyh2aSwgIWRhdGFzeW5jKTsKIAkvKgogCSAqIE5PVEU6IElmIHdlIHdlcmUgdG8gdXNlIG1hcHBpbmctPnByaXZhdGVfbGlzdCAoc2VlIGV4dDIgYW5kCmRpZmYgLS1naXQgYS9mcy9udGZzL2lub2RlLmMgYi9mcy9udGZzL2lub2RlLmMKaW5kZXggZGMyNTA1YS4uNGI1N2ZiMSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9pbm9kZS5jCisrKyBiL2ZzL250ZnMvaW5vZGUuYwpAQCAtMjk1Nyw3ICsyOTU3LDcgQEAKICAqCiAgKiBSZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCAtZXJybm8gb24gZXJyb3IuCiAgKi8KLWludCBudGZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqdmksIGludCBzeW5jKQoraW50IF9fbnRmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpLCBpbnQgc3luYykKIHsKIAlzbGU2NCBudDsKIAludGZzX2lub2RlICpuaSA9IE5URlNfSSh2aSk7CmRpZmYgLS1naXQgYS9mcy9udGZzL2lub2RlLmggYi9mcy9udGZzL2lub2RlLmgKaW5kZXggMTE3ZWFmOC4uOWExMTM1NCAxMDA2NDQKLS0tIGEvZnMvbnRmcy9pbm9kZS5oCisrKyBiL2ZzL250ZnMvaW5vZGUuaApAQCAtMzA3LDEyICszMDcsMTIgQEAKIAogZXh0ZXJuIGludCBudGZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmF0dHIpOwogCi1leHRlcm4gaW50IG50ZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICp2aSwgaW50IHN5bmMpOworZXh0ZXJuIGludCBfX250ZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICp2aSwgaW50IHN5bmMpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgbnRmc19jb21taXRfaW5vZGUoc3RydWN0IGlub2RlICp2aSkKIHsKIAlpZiAoIWlzX2JhZF9pbm9kZSh2aSkpCi0JCW50ZnNfd3JpdGVfaW5vZGUodmksIDEpOworCQlfX250ZnNfd3JpdGVfaW5vZGUodmksIDEpOwogCXJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbnRmcy9zdXBlci5jIGIvZnMvbnRmcy9zdXBlci5jCmluZGV4IDgwYjA0NzcuLjFjZjM5ZGYgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvc3VwZXIuYworKysgYi9mcy9udGZzL3N1cGVyLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJkaXIuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgImluZGV4LmgiCisjaW5jbHVkZSAiaW5vZGUuaCIKICNpbmNsdWRlICJhb3BzLmgiCiAjaW5jbHVkZSAibGF5b3V0LmgiCiAjaW5jbHVkZSAibWFsbG9jLmgiCkBAIC0yNjYyLDYgKzI2NjMsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIE5URlNfUlcKK3N0YXRpYyBpbnQgbnRmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKnZpLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKK3sKKwlyZXR1cm4gX19udGZzX3dyaXRlX2lub2RlKHZpLCB3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7Cit9CisjZW5kaWYKKwogLyoqCiAgKiBUaGUgY29tcGxldGUgc3VwZXIgb3BlcmF0aW9ucy4KICAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvTWFrZWZpbGUgYi9mcy9vY2ZzMi9NYWtlZmlsZQppbmRleCA2MDBkMmQyLi43OTFjMDg4IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9NYWtlZmlsZQorKysgYi9mcy9vY2ZzMi9NYWtlZmlsZQpAQCAtNDYsNiArNDYsNyBAQAogb2NmczJfc3RhY2tfbzJjYi1vYmpzIDo9IHN0YWNrX28yY2Iubwogb2NmczJfc3RhY2tfdXNlci1vYmpzIDo9IHN0YWNrX3VzZXIubwogCitvYmotJChDT05GSUdfT0NGUzJfRlMpICs9IGRsbWZzLwogIyBjbHVzdGVyLyBpcyBhbHdheXMgbmVlZGVkIHdoZW4gT0NGUzJfRlMgZm9yIG1hc2tsb2cgc3VwcG9ydAogb2JqLSQoQ09ORklHX09DRlMyX0ZTKSArPSBjbHVzdGVyLwogb2JqLSQoQ09ORklHX09DRlMyX0ZTX08yQ0IpICs9IGRsbS8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2FsbG9jLmMgYi9mcy9vY2ZzMi9hbGxvYy5jCmluZGV4IGQxN2JkYzcuLjlmOGJkOTEgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FsbG9jLmMKKysrIGIvZnMvb2NmczIvYWxsb2MuYwpAQCAtMTA1MCw3ICsxMDUwLDggQEAKIAkJCXN0cmNweShlYi0+aF9zaWduYXR1cmUsIE9DRlMyX0VYVEVOVF9CTE9DS19TSUdOQVRVUkUpOwogCQkJZWItPmhfYmxrbm8gPSBjcHVfdG9fbGU2NChmaXJzdF9ibGtubyk7CiAJCQllYi0+aF9mc19nZW5lcmF0aW9uID0gY3B1X3RvX2xlMzIob3NiLT5mc19nZW5lcmF0aW9uKTsKLQkJCWViLT5oX3N1YmFsbG9jX3Nsb3QgPSBjcHVfdG9fbGUxNihvc2ItPnNsb3RfbnVtKTsKKwkJCWViLT5oX3N1YmFsbG9jX3Nsb3QgPQorCQkJCWNwdV90b19sZTE2KG1ldGFfYWMtPmFjX2FsbG9jX3Nsb3QpOwogCQkJZWItPmhfc3ViYWxsb2NfYml0ID0gY3B1X3RvX2xlMTYoc3ViYWxsb2NfYml0X3N0YXJ0KTsKIAkJCWViLT5oX2xpc3QubF9jb3VudCA9CiAJCQkJY3B1X3RvX2xlMTYob2NmczJfZXh0ZW50X3JlY3NfcGVyX2ViKG9zYi0+c2IpKTsKQEAgLTU3MTIsNyArNTcxMyw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsCisJZHF1b3RfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLAogCQkJCSAgb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMoaW5vZGUtPmlfc2IsIGxlbikpOwogCiAJcmV0ID0gb2NmczJfcmVtb3ZlX2V4dGVudChoYW5kbGUsIGV0LCBjcG9zLCBsZW4sIG1ldGFfYWMsIGRlYWxsb2MpOwpAQCAtNjAzNyw3ICs2MDM4LDcgQEAKIAlpZiAoc3RhdHVzIDwgMCkKIAkJbWxvZ19lcnJubyhzdGF0dXMpOwogCWVsc2UKLQkJb2NmczJfaW5pdF9pbm9kZV9zdGVhbF9zbG90KG9zYik7CisJCW9jZnMyX2luaXRfc3RlYWxfc2xvdHMob3NiKTsKIAogCW1sb2dfZXhpdChzdGF0dXMpOwogfQpAQCAtNjkzNSw3ICs2OTM2LDcgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsCisJZHF1b3RfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLAogCQkJb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMob3NiLT5zYiwgY2x1c3RlcnNfdG9fZGVsKSk7CiAJc3Bpbl9sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfbG9jayk7CiAJT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzID0gbGUzMl90b19jcHUoZmUtPmlfY2x1c3RlcnMpIC0KQEAgLTczMDAsMTEgKzczMDEsMTAgQEAKIAkJdW5zaWduZWQgaW50IHBhZ2VfZW5kOwogCQl1NjQgcGh5czsKIAotCQlpZiAodmZzX2RxX2FsbG9jX3NwYWNlX25vZGlydHkoaW5vZGUsCi0JCQkJICAgICAgIG9jZnMyX2NsdXN0ZXJzX3RvX2J5dGVzKG9zYi0+c2IsIDEpKSkgewotCQkJcmV0ID0gLUVEUVVPVDsKKwkJcmV0ID0gZHF1b3RfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSwKKwkJCQkgICAgICAgb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMob3NiLT5zYiwgMSkpOworCQlpZiAocmV0KQogCQkJZ290byBvdXRfY29tbWl0OwotCQl9CiAJCWRpZF9xdW90YSA9IDE7CiAKIAkJcmV0ID0gb2NmczJfY2xhaW1fY2x1c3RlcnMob3NiLCBoYW5kbGUsIGRhdGFfYWMsIDEsICZiaXRfb2ZmLApAQCAtNzM4MCw3ICs3MzgwLDcgQEAKIAogb3V0X2NvbW1pdDoKIAlpZiAocmV0IDwgMCAmJiBkaWRfcXVvdGEpCi0JCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsCisJCWRxdW90X2ZyZWVfc3BhY2Vfbm9kaXJ0eShpbm9kZSwKIAkJCQkJICBvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhvc2ItPnNiLCAxKSk7CiAKIAlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvYW9wcy5jIGIvZnMvb2NmczIvYW9wcy5jCmluZGV4IDdlOWRmMTEuLjIxNDQxZGQgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2FvcHMuYworKysgYi9mcy9vY2ZzMi9hb3BzLmMKQEAgLTU3Nyw4ICs1NzcsOSBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0JLyogV2Ugc2hvdWxkIGFscmVhZHkgQ29XIHRoZSByZWZjb3VudGVkIGV4dGVudC4gKi8KLQlCVUdfT04oZXh0X2ZsYWdzICYgT0NGUzJfRVhUX1JFRkNPVU5URUQpOworCS8qIFdlIHNob3VsZCBhbHJlYWR5IENvVyB0aGUgcmVmY291bnRlZCBleHRlbnQgaW4gY2FzZSBvZiBjcmVhdGUuICovCisJQlVHX09OKGNyZWF0ZSAmJiAoZXh0X2ZsYWdzICYgT0NGUzJfRVhUX1JFRkNPVU5URUQpKTsKKwogCS8qCiAJICogZ2V0X21vcmVfYmxvY2tzKCkgZXhwZWN0cyB1cyB0byBkZXNjcmliZSBhIGhvbGUgYnkgY2xlYXJpbmcKIAkgKiB0aGUgbWFwcGVkIGJpdCBvbiBiaF9yZXN1bHQoKS4KQEAgLTE3NjMsMTAgKzE3NjQsMTEgQEAKIAogCXdjLT53X2hhbmRsZSA9IGhhbmRsZTsKIAotCWlmIChjbHVzdGVyc190b19hbGxvYyAmJiB2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSwKLQkJCW9jZnMyX2NsdXN0ZXJzX3RvX2J5dGVzKG9zYi0+c2IsIGNsdXN0ZXJzX3RvX2FsbG9jKSkpIHsKLQkJcmV0ID0gLUVEUVVPVDsKLQkJZ290byBvdXRfY29tbWl0OworCWlmIChjbHVzdGVyc190b19hbGxvYykgeworCQlyZXQgPSBkcXVvdF9hbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLAorCQkJb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMob3NiLT5zYiwgY2x1c3RlcnNfdG9fYWxsb2MpKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gb3V0X2NvbW1pdDsKIAl9CiAJLyoKIAkgKiBXZSBkb24ndCB3YW50IHRoaXMgdG8gZmFpbCBpbiBvY2ZzMl93cml0ZV9lbmQoKSwgc28gZG8gaXQKQEAgLTE4MDksNyArMTgxMSw3IEBACiAJcmV0dXJuIDA7CiBvdXRfcXVvdGE6CiAJaWYgKGNsdXN0ZXJzX3RvX2FsbG9jKQotCQl2ZnNfZHFfZnJlZV9zcGFjZShpbm9kZSwKKwkJZHF1b3RfZnJlZV9zcGFjZShpbm9kZSwKIAkJCSAgb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMob3NiLT5zYiwgY2x1c3RlcnNfdG9fYWxsb2MpKTsKIG91dF9jb21taXQ6CiAJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvbWFza2xvZy5jIGIvZnMvb2NmczIvY2x1c3Rlci9tYXNrbG9nLmMKaW5kZXggMWNkMjkzNC4uM2JiOTI4YSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvY2x1c3Rlci9tYXNrbG9nLmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci9tYXNrbG9nLmMKQEAgLTExMiw2ICsxMTIsNyBAQAogCWRlZmluZV9tYXNrKFhBVFRSKSwKIAlkZWZpbmVfbWFzayhRVU9UQSksCiAJZGVmaW5lX21hc2soUkVGQ09VTlQpLAorCWRlZmluZV9tYXNrKEJBU1RTKSwKIAlkZWZpbmVfbWFzayhFUlJPUiksCiAJZGVmaW5lX21hc2soTk9USUNFKSwKIAlkZWZpbmVfbWFzayhLVEhSRUFEKSwKQEAgLTEzNSw3ICsxMzYsNyBAQAogCXJldHVybiBtbG9nX21hc2tfc3RvcmUobWxvZ19hdHRyLT5tYXNrLCBidWYsIGNvdW50KTsKIH0KIAotc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgbWxvZ19hdHRyX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIG1sb2dfYXR0cl9vcHMgPSB7CiAJLnNob3cgID0gbWxvZ19zaG93LAogCS5zdG9yZSA9IG1sb2dfc3RvcmUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvY2x1c3Rlci9tYXNrbG9nLmggYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaAppbmRleCA5YjRkMTE3Li4zZGZkZGJlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaAorKysgYi9mcy9vY2ZzMi9jbHVzdGVyL21hc2tsb2cuaApAQCAtMTE0LDYgKzExNCw3IEBACiAjZGVmaW5lIE1MX1hBVFRSCTB4MDAwMDAwMDAyMDAwMDAwMFVMTCAvKiBvY2ZzMiBleHRlbmRlZCBhdHRyaWJ1dGVzICovCiAjZGVmaW5lIE1MX1FVT1RBCTB4MDAwMDAwMDA0MDAwMDAwMFVMTCAvKiBvY2ZzMiBxdW90YSBvcGVyYXRpb25zICovCiAjZGVmaW5lIE1MX1JFRkNPVU5UCTB4MDAwMDAwMDA4MDAwMDAwMFVMTCAvKiByZWZjb3VudCB0cmVlIG9wZXJhdGlvbnMgKi8KKyNkZWZpbmUgTUxfQkFTVFMJMHgwMDAwMDAxMDAwMDAwMDAwVUxMIC8qIGRsbWdsdWUgYXN0cyBhbmQgYmFzdHMgKi8KIC8qIGJpdHMgdGhhdCBhcmUgaW5mcmVxdWVudGx5IGdpdmVuIGFuZCBmcmVxdWVudGx5IG1hdGNoZWQgaW4gdGhlIGhpZ2ggd29yZCAqLwogI2RlZmluZSBNTF9FUlJPUgkweDAwMDAwMDAxMDAwMDAwMDBVTEwgLyogc2VudCB0byBLRVJOX0VSUiAqLwogI2RlZmluZSBNTF9OT1RJQ0UJMHgwMDAwMDAwMjAwMDAwMDAwVUxMIC8qIHNldG4gdG8gS0VSTl9OT1RJQ0UgKi8KQEAgLTE5NCw5ICsxOTUsOSBAQAogICogcHJldmlvdXMgdG9rZW4gaWYgYXJncyBleHBhbmRzIHRvIG5vdGhpbmcuCiAgKi8KICNkZWZpbmUgX19tbG9nX3ByaW50ayhsZXZlbCwgZm10LCBhcmdzLi4uKQkJCQlcCi0JcHJpbnRrKGxldmVsICIoJXUsJWx1KTolczolZCAiIGZtdCwgdGFza19waWRfbnIoY3VycmVudCksCVwKLQkgICAgICAgX19tbG9nX2NwdV9ndWVzcywgX19QUkVUVFlfRlVOQ1RJT05fXywgX19MSU5FX18gLAlcCi0JICAgICAgICMjYXJncykKKwlwcmludGsobGV2ZWwgIiglcywldSwlbHUpOiVzOiVkICIgZm10LCBjdXJyZW50LT5jb21tLAkJXAorCSAgICAgICB0YXNrX3BpZF9ucihjdXJyZW50KSwgX19tbG9nX2NwdV9ndWVzcywJCQlcCisJICAgICAgIF9fUFJFVFRZX0ZVTkNUSU9OX18sIF9fTElORV9fICwgIyNhcmdzKQogCiAjZGVmaW5lIG1sb2cobWFzaywgZm10LCBhcmdzLi4uKSBkbyB7CQkJCQlcCiAJdTY0IF9fbSA9IE1MT0dfTUFTS19QUkVGSVggfCAobWFzayk7CQkJCVwKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmMgYi9mcy9vY2ZzMi9jbHVzdGVyL3RjcC5jCmluZGV4IGQ4ZDBjNjUuLjczZTc0M2UgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2NsdXN0ZXIvdGNwLmMKKysrIGIvZnMvb2NmczIvY2x1c3Rlci90Y3AuYwpAQCAtNzIsOSArNzIsOSBAQAogCiAjaW5jbHVkZSAidGNwX2ludGVybmFsLmgiCiAKLSNkZWZpbmUgU0NfTk9ERUZfRk1UICJub2RlICVzIChudW0gJXUpIGF0ICV1LiV1LiV1LiV1OiV1IgorI2RlZmluZSBTQ19OT0RFRl9GTVQgIm5vZGUgJXMgKG51bSAldSkgYXQgJXBJNDoldSIKICNkZWZpbmUgU0NfTk9ERUZfQVJHUyhzYykgc2MtPnNjX25vZGUtPm5kX25hbWUsIHNjLT5zY19ub2RlLT5uZF9udW0sCVwKLQkJCSAgTklQUVVBRChzYy0+c2Nfbm9kZS0+bmRfaXB2NF9hZGRyZXNzKSwJXAorCQkJICAmc2MtPnNjX25vZGUtPm5kX2lwdjRfYWRkcmVzcywJCVwKIAkJCSAgbnRvaHMoc2MtPnNjX25vZGUtPm5kX2lwdjRfcG9ydCkKIAogLyoKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2Rpci5jIGIvZnMvb2NmczIvZGlyLmMKaW5kZXggMjhjM2VjMi4uZWZkNzdkMCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGlyLmMKKysrIGIvZnMvb2NmczIvZGlyLmMKQEAgLTI0MzksNyArMjQzOSw3IEBACiAJZHhfcm9vdCA9IChzdHJ1Y3Qgb2NmczJfZHhfcm9vdF9ibG9jayAqKWR4X3Jvb3RfYmgtPmJfZGF0YTsKIAltZW1zZXQoZHhfcm9vdCwgMCwgb3NiLT5zYi0+c19ibG9ja3NpemUpOwogCXN0cmNweShkeF9yb290LT5kcl9zaWduYXR1cmUsIE9DRlMyX0RYX1JPT1RfU0lHTkFUVVJFKTsKLQlkeF9yb290LT5kcl9zdWJhbGxvY19zbG90ID0gY3B1X3RvX2xlMTYob3NiLT5zbG90X251bSk7CisJZHhfcm9vdC0+ZHJfc3ViYWxsb2Nfc2xvdCA9IGNwdV90b19sZTE2KG1ldGFfYWMtPmFjX2FsbG9jX3Nsb3QpOwogCWR4X3Jvb3QtPmRyX3N1YmFsbG9jX2JpdCA9IGNwdV90b19sZTE2KGRyX3N1YmFsbG9jX2JpdCk7CiAJZHhfcm9vdC0+ZHJfZnNfZ2VuZXJhdGlvbiA9IGNwdV90b19sZTMyKG9zYi0+ZnNfZ2VuZXJhdGlvbik7CiAJZHhfcm9vdC0+ZHJfYmxrbm8gPSBjcHVfdG9fbGU2NChkcl9ibGtubyk7CkBAIC0yOTY0LDEyICsyOTY0LDEwIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICh2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShkaXIsCi0JCQkJb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMob3NiLT5zYiwKLQkJCQkJCQlhbGxvYyArIGR4X2FsbG9jKSkpIHsKLQkJcmV0ID0gLUVEUVVPVDsKKwlyZXQgPSBkcXVvdF9hbGxvY19zcGFjZV9ub2RpcnR5KGRpciwKKwkJb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMob3NiLT5zYiwgYWxsb2MgKyBkeF9hbGxvYykpOworCWlmIChyZXQpCiAJCWdvdG8gb3V0X2NvbW1pdDsKLQl9CiAJZGlkX3F1b3RhID0gMTsKIAogCWlmIChvY2ZzMl9zdXBwb3J0c19pbmRleGVkX2RpcnMob3NiKSAmJiAhZHhfaW5saW5lKSB7CkBAIC0zMTc4LDcgKzMxNzYsNyBAQAogCiBvdXRfY29tbWl0OgogCWlmIChyZXQgPCAwICYmIGRpZF9xdW90YSkKLQkJdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShkaXIsIGJ5dGVzX2FsbG9jYXRlZCk7CisJCWRxdW90X2ZyZWVfc3BhY2Vfbm9kaXJ0eShkaXIsIGJ5dGVzX2FsbG9jYXRlZCk7CiAKIAlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOwogCkBAIC0zMjIxLDExICszMjE5LDEwIEBACiAJaWYgKGV4dGVuZCkgewogCQl1MzIgb2Zmc2V0ID0gT0NGUzJfSShkaXIpLT5pcF9jbHVzdGVyczsKIAotCQlpZiAodmZzX2RxX2FsbG9jX3NwYWNlX25vZGlydHkoZGlyLAotCQkJCQlvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhzYiwgMSkpKSB7Ci0JCQlzdGF0dXMgPSAtRURRVU9UOworCQlzdGF0dXMgPSBkcXVvdF9hbGxvY19zcGFjZV9ub2RpcnR5KGRpciwKKwkJCQkJb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMoc2IsIDEpKTsKKwkJaWYgKHN0YXR1cykKIAkJCWdvdG8gYmFpbDsKLQkJfQogCQlkaWRfcXVvdGEgPSAxOwogCiAJCXN0YXR1cyA9IG9jZnMyX2FkZF9pbm9kZV9kYXRhKE9DRlMyX1NCKHNiKSwgZGlyLCAmb2Zmc2V0LApAQCAtMzI1NCw3ICszMjUxLDcgQEAKIAlzdGF0dXMgPSAwOwogYmFpbDoKIAlpZiAoZGlkX3F1b3RhICYmIHN0YXR1cyA8IDApCi0JCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoZGlyLCBvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhzYiwgMSkpOworCQlkcXVvdF9mcmVlX3NwYWNlX25vZGlydHkoZGlyLCBvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhzYiwgMSkpOwogCW1sb2dfZXhpdChzdGF0dXMpOwogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0zODg5LDExICszODg2LDEwIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICh2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShkaXIsCi0JCQkJICAgICAgIG9jZnMyX2NsdXN0ZXJzX3RvX2J5dGVzKGRpci0+aV9zYiwgMSkpKSB7Ci0JCXJldCA9IC1FRFFVT1Q7CisJcmV0ID0gZHF1b3RfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShkaXIsCisJCQkJICAgICAgIG9jZnMyX2NsdXN0ZXJzX3RvX2J5dGVzKGRpci0+aV9zYiwgMSkpOworCWlmIChyZXQpCiAJCWdvdG8gb3V0X2NvbW1pdDsKLQl9CiAJZGlkX3F1b3RhID0gMTsKIAogCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RsKGhhbmRsZSwgSU5PREVfQ0FDSEUoZGlyKSwgZHhfbGVhZl9iaCwKQEAgLTM5ODMsNyArMzk3OSw3IEBACiAKIG91dF9jb21taXQ6CiAJaWYgKHJldCA8IDAgJiYgZGlkX3F1b3RhKQotCQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGRpciwKKwkJZHF1b3RfZnJlZV9zcGFjZV9ub2RpcnR5KGRpciwKIAkJCQlvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhkaXItPmlfc2IsIDEpKTsKIAogCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CkBAIC00MTY1LDExICs0MTYxLDEwIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICh2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShkaXIsCi0JCQkJICAgICAgIG9jZnMyX2NsdXN0ZXJzX3RvX2J5dGVzKG9zYi0+c2IsIDEpKSkgewotCQlyZXQgPSAtRURRVU9UOworCXJldCA9IGRxdW90X2FsbG9jX3NwYWNlX25vZGlydHkoZGlyLAorCQkJCSAgICAgICBvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhvc2ItPnNiLCAxKSk7CisJaWYgKHJldCkKIAkJZ290byBvdXRfY29tbWl0OwotCX0KIAlkaWRfcXVvdGEgPSAxOwogCiAJLyoKQEAgLTQyMjksNyArNDIyNCw3IEBACiAKIG91dF9jb21taXQ6CiAJaWYgKHJldCA8IDAgJiYgZGlkX3F1b3RhKQotCQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGRpciwKKwkJZHF1b3RfZnJlZV9zcGFjZV9ub2RpcnR5KGRpciwKIAkJCQkJICBvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhkaXItPmlfc2IsIDEpKTsKIAogCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vTWFrZWZpbGUgYi9mcy9vY2ZzMi9kbG0vTWFrZWZpbGUKaW5kZXggMTkwMzYxMy4uZGNlYmYwZCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtL01ha2VmaWxlCisrKyBiL2ZzL29jZnMyL2RsbS9NYWtlZmlsZQpAQCAtMSw4ICsxLDcgQEAKIEVYVFJBX0NGTEFHUyArPSAtSWZzL29jZnMyCiAKLW9iai0kKENPTkZJR19PQ0ZTMl9GU19PMkNCKSArPSBvY2ZzMl9kbG0ubyBvY2ZzMl9kbG1mcy5vCitvYmotJChDT05GSUdfT0NGUzJfRlNfTzJDQikgKz0gb2NmczJfZGxtLm8KIAogb2NmczJfZGxtLW9ianMgOj0gZGxtZG9tYWluLm8gZGxtZGVidWcubyBkbG10aHJlYWQubyBkbG1yZWNvdmVyeS5vIFwKIAlkbG1tYXN0ZXIubyBkbG1hc3QubyBkbG1jb252ZXJ0Lm8gZGxtbG9jay5vIGRsbXVubG9jay5vIGRsbXZlci5vCiAKLW9jZnMyX2RsbWZzLW9ianMgOj0gdXNlcmRsbS5vIGRsbWZzLm8gZGxtZnN2ZXIubwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWZzLmMgYi9mcy9vY2ZzMi9kbG0vZGxtZnMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDJiZjE3OC4uMDAwMDAwMAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtZnMuYworKysgL2Rldi9udWxsCkBAIC0xLDY1MiArMCwwIEBACi0vKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDg7IC0qLQotICogdmltOiBub2V4cGFuZHRhYiBzdz04IHRzPTggc3RzPTA6Ci0gKgotICogZGxtZnMuYwotICoKLSAqIENvZGUgd2hpY2ggaW1wbGVtZW50cyB0aGUga2VybmVsIHNpZGUgb2YgYSBtaW5pbWFsIHVzZXJzcGFjZQotICogaW50ZXJmYWNlIHRvIG91ciBETE0uIFRoaXMgZmlsZSBoYW5kbGVzIHRoZSB2aXJ0dWFsIGZpbGUgc3lzdGVtCi0gKiB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHdpdGggdXNlcnNwYWNlLiBDcmVkaXQgc2hvdWxkIGdvIHRvIHJhbWZzLAotICogd2hpY2ggd2FzIGEgdGVtcGxhdGUgZm9yIHRoZSBmcyBzaWRlIG9mIHRoaXMgbW9kdWxlLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAqIEJvc3RvbiwgTUEgMDIxMTEwLTEzMDcsIFVTQS4KLSAqLwotCi0vKiBTaW1wbGUgVkZTIGhvb2tzIGJhc2VkIG9uOiAqLwotLyoKLSAqIFJlc2l6YWJsZSBzaW1wbGUgcmFtIGZpbGVzeXN0ZW0gZm9yIExpbnV4LgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBMaW51cyBUb3J2YWxkcy4KLSAqICAgICAgICAgICAgICAgMjAwMCBUcmFuc21ldGEgQ29ycC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQotCi0jaW5jbHVkZSAiY2x1c3Rlci9ub2RlbWFuYWdlci5oIgotI2luY2x1ZGUgImNsdXN0ZXIvaGVhcnRiZWF0LmgiCi0jaW5jbHVkZSAiY2x1c3Rlci90Y3AuaCIKLQotI2luY2x1ZGUgImRsbWFwaS5oIgotCi0jaW5jbHVkZSAidXNlcmRsbS5oIgotCi0jaW5jbHVkZSAiZGxtZnN2ZXIuaCIKLQotI2RlZmluZSBNTE9HX01BU0tfUFJFRklYIE1MX0RMTUZTCi0jaW5jbHVkZSAiY2x1c3Rlci9tYXNrbG9nLmgiCi0KLSNpbmNsdWRlICJvY2ZzMl9sb2NraW5ndmVyLmgiCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBkbG1mc19vcHM7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkbG1mc19maWxlX29wZXJhdGlvbnM7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGxtZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7Ci1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGxtZnNfcm9vdF9pbm9kZV9vcGVyYXRpb25zOwotc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGRsbWZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKLXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqZGxtZnNfaW5vZGVfY2FjaGU7Ci0KLXN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp1c2VyX2RsbV93b3JrZXI7Ci0KLS8qCi0gKiBUaGlzIGlzIHRoZSB1c2VyZGxtZnMgbG9ja2luZyBwcm90b2NvbCB2ZXJzaW9uLgotICoKLSAqIFNlZSBmcy9vY2ZzMi9kbG1nbHVlLmMgZm9yIG1vcmUgZGV0YWlscyBvbiBsb2NraW5nIHZlcnNpb25zLgotICovCi1zdGF0aWMgY29uc3Qgc3RydWN0IGRsbV9wcm90b2NvbF92ZXJzaW9uIHVzZXJfbG9ja2luZ19wcm90b2NvbCA9IHsKLQkucHZfbWFqb3IgPSBPQ0ZTMl9MT0NLSU5HX1BST1RPQ09MX01BSk9SLAotCS5wdl9taW5vciA9IE9DRlMyX0xPQ0tJTkdfUFJPVE9DT0xfTUlOT1IsCi19OwotCi0vKgotICogZGVjb2RlcyBhIHNldCBvZiBvcGVuIGZsYWdzIGludG8gYSB2YWxpZCBsb2NrIGxldmVsIGFuZCBhIHNldCBvZiBmbGFncy4KLSAqIHJldHVybnMgPCAwIGlmIHdlIGhhdmUgaW52YWxpZCBmbGFncwotICogZmxhZ3Mgd2hpY2ggbWVhbiBzb21ldGhpbmcgdG8gdXM6Ci0gKiBPX1JET05MWSAtPiBQUk1PREUgbGV2ZWwKLSAqIE9fV1JPTkxZIC0+IEVYTU9ERSBsZXZlbAotICoKLSAqIE9fTk9OQkxPQ0sgLT4gTEtNX05PUVVFVUUKLSAqLwotc3RhdGljIGludCBkbG1mc19kZWNvZGVfb3Blbl9mbGFncyhpbnQgb3Blbl9mbGFncywKLQkJCQkgICBpbnQgKmxldmVsLAotCQkJCSAgIGludCAqZmxhZ3MpCi17Ci0JaWYgKG9wZW5fZmxhZ3MgJiAoT19XUk9OTFl8T19SRFdSKSkKLQkJKmxldmVsID0gTEtNX0VYTU9ERTsKLQllbHNlCi0JCSpsZXZlbCA9IExLTV9QUk1PREU7Ci0KLQkqZmxhZ3MgPSAwOwotCWlmIChvcGVuX2ZsYWdzICYgT19OT05CTE9DSykKLQkJKmZsYWdzIHw9IExLTV9OT1FVRVVFOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZGxtZnNfZmlsZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkgICBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlpbnQgc3RhdHVzLCBsZXZlbCwgZmxhZ3M7Ci0Jc3RydWN0IGRsbWZzX2ZpbHBfcHJpdmF0ZSAqZnAgPSBOVUxMOwotCXN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlICppcDsKLQotCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKQotCQlCVUcoKTsKLQotCW1sb2coMCwgIm9wZW4gY2FsbGVkIG9uIGlub2RlICVsdSwgZmxhZ3MgMHgleFxuIiwgaW5vZGUtPmlfaW5vLAotCQlmaWxlLT5mX2ZsYWdzKTsKLQotCXN0YXR1cyA9IGRsbWZzX2RlY29kZV9vcGVuX2ZsYWdzKGZpbGUtPmZfZmxhZ3MsICZsZXZlbCwgJmZsYWdzKTsKLQlpZiAoc3RhdHVzIDwgMCkKLQkJZ290byBiYWlsOwotCi0JLyogV2UgZG9uJ3Qgd2FudCB0byBob25vciBPX0FQUEVORCBhdCByZWFkL3dyaXRlIHRpbWUgYXMgaXQKLQkgKiBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yIExWQiB3cml0ZXMuICovCi0JZmlsZS0+Zl9mbGFncyAmPSB+T19BUFBFTkQ7Ci0KLQlmcCA9IGttYWxsb2Moc2l6ZW9mKCpmcCksIEdGUF9OT0ZTKTsKLQlpZiAoIWZwKSB7Ci0JCXN0YXR1cyA9IC1FTk9NRU07Ci0JCWdvdG8gYmFpbDsKLQl9Ci0JZnAtPmZwX2xvY2tfbGV2ZWwgPSBsZXZlbDsKLQotCWlwID0gRExNRlNfSShpbm9kZSk7Ci0KLQlzdGF0dXMgPSB1c2VyX2RsbV9jbHVzdGVyX2xvY2soJmlwLT5pcF9sb2NrcmVzLCBsZXZlbCwgZmxhZ3MpOwotCWlmIChzdGF0dXMgPCAwKSB7Ci0JCS8qIHRoaXMgaXMgYSBzdHJhbmdlIGVycm9yIHRvIHJldHVybiBoZXJlIGJ1dCBJIHdhbnQKLQkJICogdG8gYmUgYWJsZSB1c2Vyc3BhY2UgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBhCi0JCSAqIHZhbGlkIGxvY2sgcmVxdWVzdCBmcm9tIG9uZSB0aGF0IHNpbXBseSBjb3VsZG4ndCBiZQotCQkgKiBncmFudGVkLiAqLwotCQlpZiAoZmxhZ3MgJiBMS01fTk9RVUVVRSAmJiBzdGF0dXMgPT0gLUVBR0FJTikKLQkJCXN0YXR1cyA9IC1FVFhUQlNZOwotCQlrZnJlZShmcCk7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0KLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBmcDsKLWJhaWw6Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIGludCBkbG1mc19maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWludCBsZXZlbCwgc3RhdHVzOwotCXN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlICppcCA9IERMTUZTX0koaW5vZGUpOwotCXN0cnVjdCBkbG1mc19maWxwX3ByaXZhdGUgKmZwID0KLQkJKHN0cnVjdCBkbG1mc19maWxwX3ByaXZhdGUgKikgZmlsZS0+cHJpdmF0ZV9kYXRhOwotCi0JaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCi0JCUJVRygpOwotCi0JbWxvZygwLCAiY2xvc2UgY2FsbGVkIG9uIGlub2RlICVsdVxuIiwgaW5vZGUtPmlfaW5vKTsKLQotCXN0YXR1cyA9IDA7Ci0JaWYgKGZwKSB7Ci0JCWxldmVsID0gZnAtPmZwX2xvY2tfbGV2ZWw7Ci0JCWlmIChsZXZlbCAhPSBMS01fSVZNT0RFKQotCQkJdXNlcl9kbG1fY2x1c3Rlcl91bmxvY2soJmlwLT5pcF9sb2NrcmVzLCBsZXZlbCk7Ci0KLQkJa2ZyZWUoZnApOwotCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBOVUxMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3NpemVfdCBkbG1mc19maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkgICAgICAgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCSAgICAgICBzaXplX3QgY291bnQsCi0JCQkgICAgICAgbG9mZl90ICpwcG9zKQotewotCWludCBieXRlc19sZWZ0OwotCXNzaXplX3QgcmVhZGxlbjsKLQljaGFyICpsdmJfYnVmOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCi0JbWxvZygwLCAiaW5vZGUgJWx1LCBjb3VudCA9ICV6dSwgKnBwb3MgPSAlbGx1XG4iLAotCQlpbm9kZS0+aV9pbm8sIGNvdW50LCAqcHBvcyk7Ci0KLQlpZiAoKnBwb3MgPj0gaV9zaXplX3JlYWQoaW5vZGUpKQotCQlyZXR1cm4gMDsKLQotCWlmICghY291bnQpCi0JCXJldHVybiAwOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBidWYsIGNvdW50KSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQkvKiBkb24ndCByZWFkIHBhc3QgdGhlIGx2YiAqLwotCWlmICgoY291bnQgKyAqcHBvcykgPiBpX3NpemVfcmVhZChpbm9kZSkpCi0JCXJlYWRsZW4gPSBpX3NpemVfcmVhZChpbm9kZSkgLSAqcHBvczsKLQllbHNlCi0JCXJlYWRsZW4gPSBjb3VudCAtICpwcG9zOwotCi0JbHZiX2J1ZiA9IGttYWxsb2MocmVhZGxlbiwgR0ZQX05PRlMpOwotCWlmICghbHZiX2J1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl1c2VyX2RsbV9yZWFkX2x2Yihpbm9kZSwgbHZiX2J1ZiwgcmVhZGxlbik7Ci0JYnl0ZXNfbGVmdCA9IF9fY29weV90b191c2VyKGJ1ZiwgbHZiX2J1ZiwgcmVhZGxlbik7Ci0JcmVhZGxlbiAtPSBieXRlc19sZWZ0OwotCi0Ja2ZyZWUobHZiX2J1Zik7Ci0KLQkqcHBvcyA9ICpwcG9zICsgcmVhZGxlbjsKLQotCW1sb2coMCwgInJlYWQgJXpkIGJ5dGVzXG4iLCByZWFkbGVuKTsKLQlyZXR1cm4gcmVhZGxlbjsKLX0KLQotc3RhdGljIHNzaXplX3QgZGxtZnNfZmlsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCQljb25zdCBjaGFyIF9fdXNlciAqYnVmLAotCQkJCXNpemVfdCBjb3VudCwKLQkJCQlsb2ZmX3QgKnBwb3MpCi17Ci0JaW50IGJ5dGVzX2xlZnQ7Ci0Jc3NpemVfdCB3cml0ZWxlbjsKLQljaGFyICpsdmJfYnVmOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCi0JbWxvZygwLCAiaW5vZGUgJWx1LCBjb3VudCA9ICV6dSwgKnBwb3MgPSAlbGx1XG4iLAotCQlpbm9kZS0+aV9pbm8sIGNvdW50LCAqcHBvcyk7Ci0KLQlpZiAoKnBwb3MgPj0gaV9zaXplX3JlYWQoaW5vZGUpKQotCQlyZXR1cm4gLUVOT1NQQzsKLQotCWlmICghY291bnQpCi0JCXJldHVybiAwOwotCi0JaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZiwgY291bnQpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCS8qIGRvbid0IHdyaXRlIHBhc3QgdGhlIGx2YiAqLwotCWlmICgoY291bnQgKyAqcHBvcykgPiBpX3NpemVfcmVhZChpbm9kZSkpCi0JCXdyaXRlbGVuID0gaV9zaXplX3JlYWQoaW5vZGUpIC0gKnBwb3M7Ci0JZWxzZQotCQl3cml0ZWxlbiA9IGNvdW50IC0gKnBwb3M7Ci0KLQlsdmJfYnVmID0ga21hbGxvYyh3cml0ZWxlbiwgR0ZQX05PRlMpOwotCWlmICghbHZiX2J1ZikKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlieXRlc19sZWZ0ID0gY29weV9mcm9tX3VzZXIobHZiX2J1ZiwgYnVmLCB3cml0ZWxlbik7Ci0Jd3JpdGVsZW4gLT0gYnl0ZXNfbGVmdDsKLQlpZiAod3JpdGVsZW4pCi0JCXVzZXJfZGxtX3dyaXRlX2x2Yihpbm9kZSwgbHZiX2J1Ziwgd3JpdGVsZW4pOwotCi0Ja2ZyZWUobHZiX2J1Zik7Ci0KLQkqcHBvcyA9ICpwcG9zICsgd3JpdGVsZW47Ci0JbWxvZygwLCAid3JvdGUgJXpkIGJ5dGVzXG4iLCB3cml0ZWxlbik7Ci0JcmV0dXJuIHdyaXRlbGVuOwotfQotCi1zdGF0aWMgdm9pZCBkbG1mc19pbml0X29uY2Uodm9pZCAqZm9vKQotewotCXN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlICppcCA9Ci0JCShzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqKSBmb287Ci0KLQlpcC0+aXBfZGxtID0gTlVMTDsKLQlpcC0+aXBfcGFyZW50ID0gTlVMTDsKLQotCWlub2RlX2luaXRfb25jZSgmaXAtPmlwX3Zmc19pbm9kZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmRsbWZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0Jc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUgKmlwOwotCi0JaXAgPSBrbWVtX2NhY2hlX2FsbG9jKGRsbWZzX2lub2RlX2NhY2hlLCBHRlBfTk9GUyk7Ci0JaWYgKCFpcCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlyZXR1cm4gJmlwLT5pcF92ZnNfaW5vZGU7Ci19Ci0KLXN0YXRpYyB2b2lkIGRsbWZzX2Rlc3Ryb3lfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlrbWVtX2NhY2hlX2ZyZWUoZGxtZnNfaW5vZGVfY2FjaGUsIERMTUZTX0koaW5vZGUpKTsKLX0KLQotc3RhdGljIHZvaWQgZGxtZnNfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLQlpbnQgc3RhdHVzOwotCXN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlICppcDsKLQotCWlmICghaW5vZGUpCi0JCXJldHVybjsKLQotCW1sb2coMCwgImlub2RlICVsdVxuIiwgaW5vZGUtPmlfaW5vKTsKLQotCWlwID0gRExNRlNfSShpbm9kZSk7Ci0KLQlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewotCQlzdGF0dXMgPSB1c2VyX2RsbV9kZXN0cm95X2xvY2soJmlwLT5pcF9sb2NrcmVzKTsKLQkJaWYgKHN0YXR1cyA8IDApCi0JCQltbG9nX2Vycm5vKHN0YXR1cyk7Ci0JCWlwdXQoaXAtPmlwX3BhcmVudCk7Ci0JCWdvdG8gY2xlYXJfZmllbGRzOwotCX0KLQotCW1sb2coMCwgIndlJ3JlIGEgZGlyZWN0b3J5LCBpcC0+aXBfZGxtID0gMHglcFxuIiwgaXAtPmlwX2RsbSk7Ci0JLyogd2UgbXVzdCBiZSBhIGRpcmVjdG9yeS4gSWYgcmVxdWlyZWQsIGxldHMgdW5yZWdpc3RlciB0aGUKLQkgKiBkbG0gY29udGV4dCBub3cuICovCi0JaWYgKGlwLT5pcF9kbG0pCi0JCXVzZXJfZGxtX3VucmVnaXN0ZXJfY29udGV4dChpcC0+aXBfZGxtKTsKLWNsZWFyX2ZpZWxkczoKLQlpcC0+aXBfcGFyZW50ID0gTlVMTDsKLQlpcC0+aXBfZGxtID0gTlVMTDsKLX0KLQotc3RhdGljIHN0cnVjdCBiYWNraW5nX2Rldl9pbmZvIGRsbWZzX2JhY2tpbmdfZGV2X2luZm8gPSB7Ci0JLm5hbWUJCT0gIm9jZnMyLWRsbWZzIiwKLQkucmFfcGFnZXMJPSAwLAkvKiBObyByZWFkYWhlYWQgKi8KLQkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9OT19BQ0NUX0FORF9XUklURUJBQ0ssCi19OwotCi1zdGF0aWMgc3RydWN0IGlub2RlICpkbG1mc19nZXRfcm9vdF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBuZXdfaW5vZGUoc2IpOwotCWludCBtb2RlID0gU19JRkRJUiB8IDA3NTU7Ci0Jc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUgKmlwOwotCi0JaWYgKGlub2RlKSB7Ci0JCWlwID0gRExNRlNfSShpbm9kZSk7Ci0KLQkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7Ci0JCWlub2RlLT5pX3VpZCA9IGN1cnJlbnRfZnN1aWQoKTsKLQkJaW5vZGUtPmlfZ2lkID0gY3VycmVudF9mc2dpZCgpOwotCQlpbm9kZS0+aV9tYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvID0gJmRsbWZzX2JhY2tpbmdfZGV2X2luZm87Ci0JCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKLQkJaW5jX25saW5rKGlub2RlKTsKLQotCQlpbm9kZS0+aV9mb3AgPSAmc2ltcGxlX2Rpcl9vcGVyYXRpb25zOwotCQlpbm9kZS0+aV9vcCA9ICZkbG1mc19yb290X2lub2RlX29wZXJhdGlvbnM7Ci0JfQotCi0JcmV0dXJuIGlub2RlOwotfQotCi1zdGF0aWMgc3RydWN0IGlub2RlICpkbG1mc19nZXRfaW5vZGUoc3RydWN0IGlub2RlICpwYXJlbnQsCi0JCQkJICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCi0JCQkJICAgICBpbnQgbW9kZSkKLXsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gcGFyZW50LT5pX3NiOwotCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gbmV3X2lub2RlKHNiKTsKLQlzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqaXA7Ci0KLQlpZiAoIWlub2RlKQotCQlyZXR1cm4gTlVMTDsKLQotCWlub2RlLT5pX21vZGUgPSBtb2RlOwotCWlub2RlLT5pX3VpZCA9IGN1cnJlbnRfZnN1aWQoKTsKLQlpbm9kZS0+aV9naWQgPSBjdXJyZW50X2ZzZ2lkKCk7Ci0JaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9ICZkbG1mc19iYWNraW5nX2Rldl9pbmZvOwotCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKLQotCWlwID0gRExNRlNfSShpbm9kZSk7Ci0JaXAtPmlwX2RsbSA9IERMTUZTX0kocGFyZW50KS0+aXBfZGxtOwotCi0Jc3dpdGNoIChtb2RlICYgU19JRk1UKSB7Ci0JZGVmYXVsdDoKLQkJLyogZm9yIG5vdyB3ZSBkb24ndCBzdXBwb3J0IGFueXRoaW5nIG90aGVyIHRoYW4KLQkJICogZGlyZWN0b3JpZXMgYW5kIHJlZ3VsYXIgZmlsZXMuICovCi0JCUJVRygpOwotCQlicmVhazsKLQljYXNlIFNfSUZSRUc6Ci0JCWlub2RlLT5pX29wID0gJmRsbWZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKLQkJaW5vZGUtPmlfZm9wID0gJmRsbWZzX2ZpbGVfb3BlcmF0aW9uczsKLQotCQlpX3NpemVfd3JpdGUoaW5vZGUsICBETE1fTFZCX0xFTik7Ci0KLQkJdXNlcl9kbG1fbG9ja19yZXNfaW5pdCgmaXAtPmlwX2xvY2tyZXMsIGRlbnRyeSk7Ci0KLQkJLyogcmVsZWFzZWQgYXQgY2xlYXJfaW5vZGUgdGltZSwgdGhpcyBpbnN1cmVzIHRoYXQgd2UKLQkJICogZ2V0IHRvIGRyb3AgdGhlIGRsbSByZWZlcmVuY2Ugb24gZWFjaCBsb2NrICpiZWZvcmUqCi0JCSAqIHdlIGNhbGwgdGhlIHVucmVnaXN0ZXIgY29kZSBmb3IgcmVsZWFzaW5nIHBhcmVudAotCQkgKiBkaXJlY3Rvcmllcy4gKi8KLQkJaXAtPmlwX3BhcmVudCA9IGlncmFiKHBhcmVudCk7Ci0JCUJVR19PTighaXAtPmlwX3BhcmVudCk7Ci0JCWJyZWFrOwotCWNhc2UgU19JRkRJUjoKLQkJaW5vZGUtPmlfb3AgPSAmZGxtZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7Ci0JCWlub2RlLT5pX2ZvcCA9ICZzaW1wbGVfZGlyX29wZXJhdGlvbnM7Ci0KLQkJLyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09Ci0JCSAqIDIgKGZvciAiLiIgZW50cnkpICovCi0JCWluY19ubGluayhpbm9kZSk7Ci0JCWJyZWFrOwotCX0KLQotCWlmIChwYXJlbnQtPmlfbW9kZSAmIFNfSVNHSUQpIHsKLQkJaW5vZGUtPmlfZ2lkID0gcGFyZW50LT5pX2dpZDsKLQkJaWYgKFNfSVNESVIobW9kZSkpCi0JCQlpbm9kZS0+aV9tb2RlIHw9IFNfSVNHSUQ7Ci0JfQotCi0JcmV0dXJuIGlub2RlOwotfQotCi0vKgotICogRmlsZSBjcmVhdGlvbi4gQWxsb2NhdGUgYW4gaW5vZGUsIGFuZCB3ZSdyZSBkb25lLi4KLSAqLwotLyogU01QLXNhZmUgKi8KLXN0YXRpYyBpbnQgZGxtZnNfbWtkaXIoc3RydWN0IGlub2RlICogZGlyLAotCQkgICAgICAgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwKLQkJICAgICAgIGludCBtb2RlKQotewotCWludCBzdGF0dXM7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7Ci0Jc3RydWN0IHFzdHIgKmRvbWFpbiA9ICZkZW50cnktPmRfbmFtZTsKLQlzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqaXA7Ci0Jc3RydWN0IGRsbV9jdHh0ICpkbG07Ci0Jc3RydWN0IGRsbV9wcm90b2NvbF92ZXJzaW9uIHByb3RvID0gdXNlcl9sb2NraW5nX3Byb3RvY29sOwotCi0JbWxvZygwLCAibWtkaXIgJS4qc1xuIiwgZG9tYWluLT5sZW4sIGRvbWFpbi0+bmFtZSk7Ci0KLQkvKiB2ZXJpZnkgdGhhdCB3ZSBoYXZlIGEgcHJvcGVyIGRvbWFpbiAqLwotCWlmIChkb21haW4tPmxlbiA+PSBPMk5NX01BWF9OQU1FX0xFTikgewotCQlzdGF0dXMgPSAtRUlOVkFMOwotCQltbG9nKE1MX0VSUk9SLCAiaW52YWxpZCBkb21haW4gbmFtZSBmb3IgZGlyZWN0b3J5LlxuIik7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0KLQlpbm9kZSA9IGRsbWZzX2dldF9pbm9kZShkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZESVIpOwotCWlmICghaW5vZGUpIHsKLQkJc3RhdHVzID0gLUVOT01FTTsKLQkJbWxvZ19lcnJubyhzdGF0dXMpOwotCQlnb3RvIGJhaWw7Ci0JfQotCi0JaXAgPSBETE1GU19JKGlub2RlKTsKLQotCWRsbSA9IHVzZXJfZGxtX3JlZ2lzdGVyX2NvbnRleHQoZG9tYWluLCAmcHJvdG8pOwotCWlmIChJU19FUlIoZGxtKSkgewotCQlzdGF0dXMgPSBQVFJfRVJSKGRsbSk7Ci0JCW1sb2coTUxfRVJST1IsICJFcnJvciAlZCBjb3VsZCBub3QgcmVnaXN0ZXIgZG9tYWluIFwiJS4qc1wiXG4iLAotCQkgICAgIHN0YXR1cywgZG9tYWluLT5sZW4sIGRvbWFpbi0+bmFtZSk7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0JaXAtPmlwX2RsbSA9IGRsbTsKLQotCWluY19ubGluayhkaXIpOwotCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7Ci0JZGdldChkZW50cnkpOwkvKiBFeHRyYSBjb3VudCAtIHBpbiB0aGUgZGVudHJ5IGluIGNvcmUgKi8KLQotCXN0YXR1cyA9IDA7Ci1iYWlsOgotCWlmIChzdGF0dXMgPCAwKQotCQlpcHV0KGlub2RlKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgaW50IGRsbWZzX2NyZWF0ZShzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCWludCBtb2RlLAotCQkJc3RydWN0IG5hbWVpZGF0YSAqbmQpCi17Ci0JaW50IHN0YXR1cyA9IDA7Ci0Jc3RydWN0IGlub2RlICppbm9kZTsKLQlzdHJ1Y3QgcXN0ciAqbmFtZSA9ICZkZW50cnktPmRfbmFtZTsKLQotCW1sb2coMCwgImNyZWF0ZSAlLipzXG4iLCBuYW1lLT5sZW4sIG5hbWUtPm5hbWUpOwotCi0JLyogdmVyaWZ5IG5hbWUgaXMgdmFsaWQgYW5kIGRvZXNuJ3QgY29udGFpbiBhbnkgZGxtIHJlc2VydmVkCi0JICogY2hhcmFjdGVycyAqLwotCWlmIChuYW1lLT5sZW4gPj0gVVNFUl9ETE1fTE9DS19JRF9NQVhfTEVOIHx8Ci0JICAgIG5hbWUtPm5hbWVbMF0gPT0gJyQnKSB7Ci0JCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCW1sb2coTUxfRVJST1IsICJpbnZhbGlkIGxvY2sgbmFtZSwgJS4qc1xuIiwgbmFtZS0+bGVuLAotCQkgICAgIG5hbWUtPm5hbWUpOwotCQlnb3RvIGJhaWw7Ci0JfQotCi0JaW5vZGUgPSBkbG1mc19nZXRfaW5vZGUoZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHKTsKLQlpZiAoIWlub2RlKSB7Ci0JCXN0YXR1cyA9IC1FTk9NRU07Ci0JCW1sb2dfZXJybm8oc3RhdHVzKTsKLQkJZ290byBiYWlsOwotCX0KLQotCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7Ci0JZGdldChkZW50cnkpOwkvKiBFeHRyYSBjb3VudCAtIHBpbiB0aGUgZGVudHJ5IGluIGNvcmUgKi8KLWJhaWw6Ci0JcmV0dXJuIHN0YXR1czsKLX0KLQotc3RhdGljIGludCBkbG1mc191bmxpbmsoc3RydWN0IGlub2RlICpkaXIsCi0JCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCi17Ci0JaW50IHN0YXR1czsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCi0JbWxvZygwLCAidW5saW5rIGlub2RlICVsdVxuIiwgaW5vZGUtPmlfaW5vKTsKLQotCS8qIGlmIHRoZXJlIGFyZSBubyBjdXJyZW50IGhvbGRlcnMsIG9yIG5vbmUgdGhhdCBhcmUgd2FpdGluZwotCSAqIHRvIGFjcXVpcmUgYSBsb2NrLCB0aGlzIGJhc2ljYWxseSBkZXN0cm95cyBvdXIgbG9ja3Jlcy4gKi8KLQlzdGF0dXMgPSB1c2VyX2RsbV9kZXN0cm95X2xvY2soJkRMTUZTX0koaW5vZGUpLT5pcF9sb2NrcmVzKTsKLQlpZiAoc3RhdHVzIDwgMCkgewotCQltbG9nKE1MX0VSUk9SLCAidW5saW5rICUuKnMsIGVycm9yICVkIGZyb20gZGVzdHJveVxuIiwKLQkJICAgICBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUsIHN0YXR1cyk7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0Jc3RhdHVzID0gc2ltcGxlX3VubGluayhkaXIsIGRlbnRyeSk7Ci1iYWlsOgotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbnQgZGxtZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwKLQkJCSAgICB2b2lkICogZGF0YSwKLQkJCSAgICBpbnQgc2lsZW50KQotewotCXN0cnVjdCBpbm9kZSAqIGlub2RlOwotCXN0cnVjdCBkZW50cnkgKiByb290OwotCi0Jc2ItPnNfbWF4Ynl0ZXMgPSBNQVhfTEZTX0ZJTEVTSVpFOwotCXNiLT5zX2Jsb2Nrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKLQlzYi0+c19ibG9ja3NpemVfYml0cyA9IFBBR0VfQ0FDSEVfU0hJRlQ7Ci0Jc2ItPnNfbWFnaWMgPSBETE1GU19NQUdJQzsKLQlzYi0+c19vcCA9ICZkbG1mc19vcHM7Ci0JaW5vZGUgPSBkbG1mc19nZXRfcm9vdF9pbm9kZShzYik7Ci0JaWYgKCFpbm9kZSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyb290ID0gZF9hbGxvY19yb290KGlub2RlKTsKLQlpZiAoIXJvb3QpIHsKLQkJaXB1dChpbm9kZSk7Ci0JCXJldHVybiAtRU5PTUVNOwotCX0KLQlzYi0+c19yb290ID0gcm9vdDsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGxtZnNfZmlsZV9vcGVyYXRpb25zID0gewotCS5vcGVuCQk9IGRsbWZzX2ZpbGVfb3BlbiwKLQkucmVsZWFzZQk9IGRsbWZzX2ZpbGVfcmVsZWFzZSwKLQkucmVhZAkJPSBkbG1mc19maWxlX3JlYWQsCi0JLndyaXRlCQk9IGRsbWZzX2ZpbGVfd3JpdGUsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGxtZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7Ci0JLmNyZWF0ZQkJPSBkbG1mc19jcmVhdGUsCi0JLmxvb2t1cAkJPSBzaW1wbGVfbG9va3VwLAotCS51bmxpbmsJCT0gZGxtZnNfdW5saW5rLAotfTsKLQotLyogdGhpcyB3YXkgd2UgY2FuIHJlc3RyaWN0IG1rZGlyIHRvIG9ubHkgdGhlIHRvcGxldmVsIG9mIHRoZSBmcy4gKi8KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBkbG1mc19yb290X2lub2RlX29wZXJhdGlvbnMgPSB7Ci0JLmxvb2t1cAkJPSBzaW1wbGVfbG9va3VwLAotCS5ta2RpcgkJPSBkbG1mc19ta2RpciwKLQkucm1kaXIJCT0gc2ltcGxlX3JtZGlyLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGRsbWZzX29wcyA9IHsKLQkuc3RhdGZzCQk9IHNpbXBsZV9zdGF0ZnMsCi0JLmFsbG9jX2lub2RlCT0gZGxtZnNfYWxsb2NfaW5vZGUsCi0JLmRlc3Ryb3lfaW5vZGUJPSBkbG1mc19kZXN0cm95X2lub2RlLAotCS5jbGVhcl9pbm9kZQk9IGRsbWZzX2NsZWFyX2lub2RlLAotCS5kcm9wX2lub2RlCT0gZ2VuZXJpY19kZWxldGVfaW5vZGUsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGxtZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0gewotCS5nZXRhdHRyCT0gc2ltcGxlX2dldGF0dHIsCi19OwotCi1zdGF0aWMgaW50IGRsbWZzX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKLQlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKLXsKLQlyZXR1cm4gZ2V0X3NiX25vZGV2KGZzX3R5cGUsIGZsYWdzLCBkYXRhLCBkbG1mc19maWxsX3N1cGVyLCBtbnQpOwotfQotCi1zdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZGxtZnNfZnNfdHlwZSA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm5hbWUJCT0gIm9jZnMyX2RsbWZzIiwKLQkuZ2V0X3NiCQk9IGRsbWZzX2dldF9zYiwKLQkua2lsbF9zYgk9IGtpbGxfbGl0dGVyX3N1cGVyLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgaW5pdF9kbG1mc19mcyh2b2lkKQotewotCWludCBzdGF0dXM7Ci0JaW50IGNsZWFudXBfaW5vZGUgPSAwLCBjbGVhbnVwX3dvcmtlciA9IDA7Ci0KLQlkbG1mc19wcmludF92ZXJzaW9uKCk7Ci0KLQlzdGF0dXMgPSBiZGlfaW5pdCgmZGxtZnNfYmFja2luZ19kZXZfaW5mbyk7Ci0JaWYgKHN0YXR1cykKLQkJcmV0dXJuIHN0YXR1czsKLQotCWRsbWZzX2lub2RlX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImRsbWZzX2lub2RlX2NhY2hlIiwKLQkJCQlzaXplb2Yoc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUpLAotCQkJCTAsIChTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9SRUNMQUlNX0FDQ09VTlR8Ci0JCQkJCVNMQUJfTUVNX1NQUkVBRCksCi0JCQkJZGxtZnNfaW5pdF9vbmNlKTsKLQlpZiAoIWRsbWZzX2lub2RlX2NhY2hlKSB7Ci0JCXN0YXR1cyA9IC1FTk9NRU07Ci0JCWdvdG8gYmFpbDsKLQl9Ci0JY2xlYW51cF9pbm9kZSA9IDE7Ci0KLQl1c2VyX2RsbV93b3JrZXIgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgidXNlcl9kbG0iKTsKLQlpZiAoIXVzZXJfZGxtX3dvcmtlcikgewotCQlzdGF0dXMgPSAtRU5PTUVNOwotCQlnb3RvIGJhaWw7Ci0JfQotCWNsZWFudXBfd29ya2VyID0gMTsKLQotCXN0YXR1cyA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmRsbWZzX2ZzX3R5cGUpOwotYmFpbDoKLQlpZiAoc3RhdHVzKSB7Ci0JCWlmIChjbGVhbnVwX2lub2RlKQotCQkJa21lbV9jYWNoZV9kZXN0cm95KGRsbWZzX2lub2RlX2NhY2hlKTsKLQkJaWYgKGNsZWFudXBfd29ya2VyKQotCQkJZGVzdHJveV93b3JrcXVldWUodXNlcl9kbG1fd29ya2VyKTsKLQkJYmRpX2Rlc3Ryb3koJmRsbWZzX2JhY2tpbmdfZGV2X2luZm8pOwotCX0gZWxzZQotCQlwcmludGsoIk9DRlMyIFVzZXIgRExNIGtlcm5lbCBpbnRlcmZhY2UgbG9hZGVkXG4iKTsKLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9kbG1mc19mcyh2b2lkKQotewotCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmZGxtZnNfZnNfdHlwZSk7Ci0KLQlmbHVzaF93b3JrcXVldWUodXNlcl9kbG1fd29ya2VyKTsKLQlkZXN0cm95X3dvcmtxdWV1ZSh1c2VyX2RsbV93b3JrZXIpOwotCi0Ja21lbV9jYWNoZV9kZXN0cm95KGRsbWZzX2lub2RlX2NhY2hlKTsKLQotCWJkaV9kZXN0cm95KCZkbG1mc19iYWNraW5nX2Rldl9pbmZvKTsKLX0KLQotTU9EVUxFX0FVVEhPUigiT3JhY2xlIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9pbml0KGluaXRfZGxtZnNfZnMpCi1tb2R1bGVfZXhpdChleGl0X2RsbWZzX2ZzKQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbXJlY292ZXJ5LmMgYi9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYwppbmRleCAzNDRiY2Y5Li5iNGY5OWRlIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtcmVjb3ZlcnkuYwpAQCAtMzEwLDcgKzMxMCw3IEBACiAJbWxvZygwLCAiZGxtIHRocmVhZCBydW5uaW5nIGZvciAlcy4uLlxuIiwgZGxtLT5uYW1lKTsKIAogCXdoaWxlICgha3RocmVhZF9zaG91bGRfc3RvcCgpKSB7Ci0JCWlmIChkbG1fam9pbmVkKGRsbSkpIHsKKwkJaWYgKGRsbV9kb21haW5fZnVsbHlfam9pbmVkKGRsbSkpIHsKIAkJCXN0YXR1cyA9IGRsbV9kb19yZWNvdmVyeShkbG0pOwogCQkJaWYgKHN0YXR1cyA9PSAtRUFHQUlOKSB7CiAJCQkJLyogZG8gbm90IHNsZWVwLCByZWNoZWNrIGltbWVkaWF0ZWx5LiAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL3VzZXJkbG0uYyBiL2ZzL29jZnMyL2RsbS91c2VyZGxtLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjYjFkM2QuLjAwMDAwMDAKLS0tIGEvZnMvb2NmczIvZGxtL3VzZXJkbG0uYworKysgL2Rldi9udWxsCkBAIC0xLDY3NiArMCwwIEBACi0vKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDg7IC0qLQotICogdmltOiBub2V4cGFuZHRhYiBzdz04IHRzPTggc3RzPTA6Ci0gKgotICogdXNlcmRsbS5jCi0gKgotICogQ29kZSB3aGljaCBpbXBsZW1lbnRzIHRoZSBrZXJuZWwgc2lkZSBvZiBhIG1pbmltYWwgdXNlcnNwYWNlCi0gKiBpbnRlcmZhY2UgdG8gb3VyIERMTS4KLSAqCi0gKiBNYW55IG9mIHRoZSBmdW5jdGlvbnMgaGVyZSBhcmUgcGFyZWQgZG93biB2ZXJzaW9ucyBvZiBkbG1nbHVlLmMKLSAqIGZ1bmN0aW9ucy4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgT3JhY2xlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZQotICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsCi0gKiBCb3N0b24sIE1BIDAyMTExMC0xMzA3LCBVU0EuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+Ci0KLQotI2luY2x1ZGUgImNsdXN0ZXIvbm9kZW1hbmFnZXIuaCIKLSNpbmNsdWRlICJjbHVzdGVyL2hlYXJ0YmVhdC5oIgotI2luY2x1ZGUgImNsdXN0ZXIvdGNwLmgiCi0KLSNpbmNsdWRlICJkbG1hcGkuaCIKLQotI2luY2x1ZGUgInVzZXJkbG0uaCIKLQotI2RlZmluZSBNTE9HX01BU0tfUFJFRklYIE1MX0RMTUZTCi0jaW5jbHVkZSAiY2x1c3Rlci9tYXNrbG9nLmgiCi0KLXN0YXRpYyBpbmxpbmUgaW50IHVzZXJfY2hlY2tfd2FpdF9mbGFnKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzLAotCQkJCSAgICAgICBpbnQgZmxhZykKLXsKLQlpbnQgcmV0OwotCi0Jc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCXJldCA9IGxvY2tyZXMtPmxfZmxhZ3MgJiBmbGFnOwotCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVzZXJfd2FpdF9vbl9idXN5X2xvY2soc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMpCi0KLXsKLQl3YWl0X2V2ZW50KGxvY2tyZXMtPmxfZXZlbnQsCi0JCSAgICF1c2VyX2NoZWNrX3dhaXRfZmxhZyhsb2NrcmVzLCBVU0VSX0xPQ0tfQlVTWSkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdXNlcl93YWl0X29uX2Jsb2NrZWRfbG9jayhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcykKLQotewotCXdhaXRfZXZlbnQobG9ja3Jlcy0+bF9ldmVudCwKLQkJICAgIXVzZXJfY2hlY2tfd2FpdF9mbGFnKGxvY2tyZXMsIFVTRVJfTE9DS19CTE9DS0VEKSk7Ci19Ci0KLS8qIEkgaGVhcnQgY29udGFpbmVyX29mLi4uICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkbG1fY3R4dCAqCi1kbG1fY3R4dF9mcm9tX3VzZXJfbG9ja3JlcyhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcykKLXsKLQlzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqaXA7Ci0KLQlpcCA9IGNvbnRhaW5lcl9vZihsb2NrcmVzLAotCQkJICBzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSwKLQkJCSAgaXBfbG9ja3Jlcyk7Ci0JcmV0dXJuIGlwLT5pcF9kbG07Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKgotdXNlcl9kbG1faW5vZGVfZnJvbV91c2VyX2xvY2tyZXMoc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMpCi17Ci0Jc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUgKmlwOwotCi0JaXAgPSBjb250YWluZXJfb2YobG9ja3JlcywKLQkJCSAgc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUsCi0JCQkgIGlwX2xvY2tyZXMpOwotCXJldHVybiAmaXAtPmlwX3Zmc19pbm9kZTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVzZXJfcmVjb3Zlcl9mcm9tX2RsbV9lcnJvcihzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcykKLXsKLQlzcGluX2xvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci0JbG9ja3Jlcy0+bF9mbGFncyAmPSB+VVNFUl9MT0NLX0JVU1k7Ci0Jc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci19Ci0KLSNkZWZpbmUgdXNlcl9sb2dfZGxtX2Vycm9yKF9mdW5jLCBfc3RhdCwgX2xvY2tyZXMpIGRvIHsJCQlcCi0JbWxvZyhNTF9FUlJPUiwgIkRsbSBlcnJvciBcIiVzXCIgd2hpbGUgY2FsbGluZyAlcyBvbiAiCQlcCi0JCSJyZXNvdXJjZSAlLipzOiAlc1xuIiwgZGxtX2Vycm5hbWUoX3N0YXQpLCBfZnVuYywJXAotCQlfbG9ja3Jlcy0+bF9uYW1lbGVuLCBfbG9ja3Jlcy0+bF9uYW1lLCBkbG1fZXJybXNnKF9zdGF0KSk7IFwKLX0gd2hpbGUgKDApCi0KLS8qIFdBUk5JTkc6IFRoaXMgZnVuY3Rpb24gbGl2ZXMgaW4gYSB3b3JsZCB3aGVyZSB0aGUgb25seSB0aHJlZSBsb2NrCi0gKiBsZXZlbHMgYXJlIEVYLCBQUiwgYW5kIE5MLiBJdCAqd2lsbCogaGF2ZSB0byBiZSBhZGp1c3RlZCB3aGVuIG1vcmUKLSAqIGxvY2sgdHlwZXMgYXJlIGFkZGVkLiAqLwotc3RhdGljIGlubGluZSBpbnQgdXNlcl9oaWdoZXN0X2NvbXBhdF9sb2NrX2xldmVsKGludCBsZXZlbCkKLXsKLQlpbnQgbmV3X2xldmVsID0gTEtNX0VYTU9ERTsKLQotCWlmIChsZXZlbCA9PSBMS01fRVhNT0RFKQotCQluZXdfbGV2ZWwgPSBMS01fTkxNT0RFOwotCWVsc2UgaWYgKGxldmVsID09IExLTV9QUk1PREUpCi0JCW5ld19sZXZlbCA9IExLTV9QUk1PREU7Ci0JcmV0dXJuIG5ld19sZXZlbDsKLX0KLQotc3RhdGljIHZvaWQgdXNlcl9hc3Qodm9pZCAqb3BhcXVlKQotewotCXN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzID0gb3BhcXVlOwotCXN0cnVjdCBkbG1fbG9ja3N0YXR1cyAqbGtzYjsKLQotCW1sb2coMCwgIkFTVCBmaXJlZCBmb3IgbG9ja3JlcyAlLipzXG4iLCBsb2NrcmVzLT5sX25hbWVsZW4sCi0JICAgICBsb2NrcmVzLT5sX25hbWUpOwotCi0Jc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0JbGtzYiA9ICYobG9ja3Jlcy0+bF9sa3NiKTsKLQlpZiAobGtzYi0+c3RhdHVzICE9IERMTV9OT1JNQUwpIHsKLQkJbWxvZyhNTF9FUlJPUiwgImxrc2Igc3RhdHVzIHZhbHVlIG9mICV1IG9uIGxvY2tyZXMgJS4qc1xuIiwKLQkJICAgICBsa3NiLT5zdGF0dXMsIGxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lKTsKLQkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci0JCXJldHVybjsKLQl9Ci0KLQltbG9nX2J1Z19vbl9tc2cobG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPT0gTEtNX0lWTU9ERSwKLQkJCSJMb2NrcmVzICUuKnMsIHJlcXVlc3RlZCBpdm1vZGUuIGZsYWdzIDB4JXhcbiIsCi0JCQlsb2NrcmVzLT5sX25hbWVsZW4sIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9mbGFncyk7Ci0KLQkvKiB3ZSdyZSBkb3duY29udmVydGluZy4gKi8KLQlpZiAobG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPCBsb2NrcmVzLT5sX2xldmVsKSB7Ci0JCWlmIChsb2NrcmVzLT5sX3JlcXVlc3RlZCA8PQotCQkgICAgdXNlcl9oaWdoZXN0X2NvbXBhdF9sb2NrX2xldmVsKGxvY2tyZXMtPmxfYmxvY2tpbmcpKSB7Ci0JCQlsb2NrcmVzLT5sX2Jsb2NraW5nID0gTEtNX05MTU9ERTsKLQkJCWxvY2tyZXMtPmxfZmxhZ3MgJj0gflVTRVJfTE9DS19CTE9DS0VEOwotCQl9Ci0JfQotCi0JbG9ja3Jlcy0+bF9sZXZlbCA9IGxvY2tyZXMtPmxfcmVxdWVzdGVkOwotCWxvY2tyZXMtPmxfcmVxdWVzdGVkID0gTEtNX0lWTU9ERTsKLQlsb2NrcmVzLT5sX2ZsYWdzIHw9IFVTRVJfTE9DS19BVFRBQ0hFRDsKLQlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfQlVTWTsKLQotCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0Jd2FrZV91cCgmbG9ja3Jlcy0+bF9ldmVudCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1c2VyX2RsbV9ncmFiX2lub2RlX3JlZihzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcykKLXsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCWlub2RlID0gdXNlcl9kbG1faW5vZGVfZnJvbV91c2VyX2xvY2tyZXMobG9ja3Jlcyk7Ci0JaWYgKCFpZ3JhYihpbm9kZSkpCi0JCUJVRygpOwotfQotCi1zdGF0aWMgdm9pZCB1c2VyX2RsbV91bmJsb2NrX2xvY2soc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKLQotc3RhdGljIHZvaWQgX191c2VyX2RsbV9xdWV1ZV9sb2NrcmVzKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzKQotewotCWlmICghKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfUVVFVUVEKSkgewotCQl1c2VyX2RsbV9ncmFiX2lub2RlX3JlZihsb2NrcmVzKTsKLQotCQlJTklUX1dPUksoJmxvY2tyZXMtPmxfd29yaywgdXNlcl9kbG1fdW5ibG9ja19sb2NrKTsKLQotCQlxdWV1ZV93b3JrKHVzZXJfZGxtX3dvcmtlciwgJmxvY2tyZXMtPmxfd29yayk7Ci0JCWxvY2tyZXMtPmxfZmxhZ3MgfD0gVVNFUl9MT0NLX1FVRVVFRDsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9fdXNlcl9kbG1fY29uZF9xdWV1ZV9sb2NrcmVzKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzKQotewotCWludCBxdWV1ZSA9IDA7Ci0KLQlpZiAoIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0JMT0NLRUQpKQotCQlyZXR1cm47Ci0KLQlzd2l0Y2ggKGxvY2tyZXMtPmxfYmxvY2tpbmcpIHsKLQljYXNlIExLTV9FWE1PREU6Ci0JCWlmICghbG9ja3Jlcy0+bF9leF9ob2xkZXJzICYmICFsb2NrcmVzLT5sX3JvX2hvbGRlcnMpCi0JCQlxdWV1ZSA9IDE7Ci0JCWJyZWFrOwotCWNhc2UgTEtNX1BSTU9ERToKLQkJaWYgKCFsb2NrcmVzLT5sX2V4X2hvbGRlcnMpCi0JCQlxdWV1ZSA9IDE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCX0KLQotCWlmIChxdWV1ZSkKLQkJX191c2VyX2RsbV9xdWV1ZV9sb2NrcmVzKGxvY2tyZXMpOwotfQotCi1zdGF0aWMgdm9pZCB1c2VyX2Jhc3Qodm9pZCAqb3BhcXVlLCBpbnQgbGV2ZWwpCi17Ci0Jc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMgPSBvcGFxdWU7Ci0KLQltbG9nKDAsICJCbG9ja2luZyBBU1QgZmlyZWQgZm9yIGxvY2tyZXMgJS4qcy4gQmxvY2tpbmcgbGV2ZWwgJWRcbiIsCi0JICAgICBsb2NrcmVzLT5sX25hbWVsZW4sIGxvY2tyZXMtPmxfbmFtZSwgbGV2ZWwpOwotCi0Jc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCWxvY2tyZXMtPmxfZmxhZ3MgfD0gVVNFUl9MT0NLX0JMT0NLRUQ7Ci0JaWYgKGxldmVsID4gbG9ja3Jlcy0+bF9ibG9ja2luZykKLQkJbG9ja3Jlcy0+bF9ibG9ja2luZyA9IGxldmVsOwotCi0JX191c2VyX2RsbV9xdWV1ZV9sb2NrcmVzKGxvY2tyZXMpOwotCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0Jd2FrZV91cCgmbG9ja3Jlcy0+bF9ldmVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHVzZXJfdW5sb2NrX2FzdCh2b2lkICpvcGFxdWUsIGVudW0gZGxtX3N0YXR1cyBzdGF0dXMpCi17Ci0Jc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMgPSBvcGFxdWU7Ci0KLQltbG9nKDAsICJVTkxPQ0sgQVNUIGNhbGxlZCBvbiBsb2NrICUuKnNcbiIsIGxvY2tyZXMtPmxfbmFtZWxlbiwKLQkgICAgIGxvY2tyZXMtPmxfbmFtZSk7Ci0KLQlpZiAoc3RhdHVzICE9IERMTV9OT1JNQUwgJiYgc3RhdHVzICE9IERMTV9DQU5DRUxHUkFOVCkKLQkJbWxvZyhNTF9FUlJPUiwgIkRsbSByZXR1cm5zIHN0YXR1cyAlZFxuIiwgc3RhdHVzKTsKLQotCXNwaW5fbG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQkvKiBUaGUgdGVhcmRvd24gZmxhZyBnZXRzIHNldCBlYXJseSBkdXJpbmcgdGhlIHVubG9jayBwcm9jZXNzLAotCSAqIHNvIHRlc3QgdGhlIGNhbmNlbCBmbGFnIHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgYXN0IGlzbid0Ci0JICogZm9yIGEgY29uY3VycmVudCBjYW5jZWwuICovCi0JaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fVEVBUkRPV04KLQkgICAgJiYgIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0lOX0NBTkNFTCkpIHsKLQkJbG9ja3Jlcy0+bF9sZXZlbCA9IExLTV9JVk1PREU7Ci0JfSBlbHNlIGlmIChzdGF0dXMgPT0gRExNX0NBTkNFTEdSQU5UKSB7Ci0JCS8qIFdlIHRyaWVkIHRvIGNhbmNlbCBhIGNvbnZlcnQgcmVxdWVzdCwgYnV0IGl0IHdhcwotCQkgKiBhbHJlYWR5IGdyYW50ZWQuIERvbid0IGNsZWFyIHRoZSBidXN5IGZsYWcgLSB0aGUKLQkJICogYXN0IHNob3VsZCd2ZSBkb25lIHRoaXMgYWxyZWFkeS4gKi8KLQkJQlVHX09OKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9DQU5DRUwpKTsKLQkJbG9ja3Jlcy0+bF9mbGFncyAmPSB+VVNFUl9MT0NLX0lOX0NBTkNFTDsKLQkJZ290byBvdXRfbm9jbGVhcjsKLQl9IGVsc2UgewotCQlCVUdfT04oIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0lOX0NBTkNFTCkpOwotCQkvKiBDYW5jZWwgc3VjY2VlZGVkLCB3ZSB3YW50IHRvIHJlLXF1ZXVlICovCi0JCWxvY2tyZXMtPmxfcmVxdWVzdGVkID0gTEtNX0lWTU9ERTsgLyogY2FuY2VsIGFuCi0JCQkJCQkgICAgKiB1cGNvbnZlcnQKLQkJCQkJCSAgICAqIHJlcXVlc3QuICovCi0JCWxvY2tyZXMtPmxfZmxhZ3MgJj0gflVTRVJfTE9DS19JTl9DQU5DRUw7Ci0JCS8qIHdlIHdhbnQgdGhlIHVuYmxvY2sgdGhyZWFkIHRvIGxvb2sgYXQgaXQgYWdhaW4KLQkJICogbm93LiAqLwotCQlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CTE9DS0VEKQotCQkJX191c2VyX2RsbV9xdWV1ZV9sb2NrcmVzKGxvY2tyZXMpOwotCX0KLQotCWxvY2tyZXMtPmxfZmxhZ3MgJj0gflVTRVJfTE9DS19CVVNZOwotb3V0X25vY2xlYXI6Ci0Jc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci0KLQl3YWtlX3VwKCZsb2NrcmVzLT5sX2V2ZW50KTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVzZXJfZGxtX2Ryb3BfaW5vZGVfcmVmKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGU7Ci0JaW5vZGUgPSB1c2VyX2RsbV9pbm9kZV9mcm9tX3VzZXJfbG9ja3Jlcyhsb2NrcmVzKTsKLQlpcHV0KGlub2RlKTsKLX0KLQotc3RhdGljIHZvaWQgdXNlcl9kbG1fdW5ibG9ja19sb2NrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKLXsKLQlpbnQgbmV3X2xldmVsLCBzdGF0dXM7Ci0Jc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMgPQotCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzZXJfbG9ja19yZXMsIGxfd29yayk7Ci0Jc3RydWN0IGRsbV9jdHh0ICpkbG0gPSBkbG1fY3R4dF9mcm9tX3VzZXJfbG9ja3Jlcyhsb2NrcmVzKTsKLQotCW1sb2coMCwgInByb2Nlc3NpbmcgbG9ja3JlcyAlLipzXG4iLCBsb2NrcmVzLT5sX25hbWVsZW4sCi0JICAgICBsb2NrcmVzLT5sX25hbWUpOwotCi0Jc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0JbWxvZ19idWdfb25fbXNnKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19RVUVVRUQpLAotCQkJIkxvY2tyZXMgJS4qcywgZmxhZ3MgMHgleFxuIiwKLQkJCWxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2ZsYWdzKTsKLQotCS8qIG5vdGljZSB0aGF0IHdlIGRvbid0IGNsZWFyIFVTRVJfTE9DS19CTE9DS0VEIGhlcmUuIElmIGl0J3MKLQkgKiBzZXQsIHdlIHdhbnQgdXNlcl9hc3QgY2xlYXIgaXQuICovCi0JbG9ja3Jlcy0+bF9mbGFncyAmPSB+VVNFUl9MT0NLX1FVRVVFRDsKLQotCS8qIEl0J3MgdmFsaWQgdG8gZ2V0IGhlcmUgYW5kIG5vIGxvbmdlciBiZSBibG9ja2VkIC0gaWYgd2UgZ2V0Ci0JICogc2V2ZXJhbCBiYXN0cyBpbiBhIHJvdywgd2UgbWlnaHQgYmUgcXVldWVkIGJ5IHRoZSBmaXJzdAotCSAqIG9uZSwgdGhlIHVuYmxvY2sgdGhyZWFkIG1pZ2h0IHJ1biBhbmQgY2xlYXIgdGhlIHF1ZXVlZAotCSAqIGZsYWcsIGFuZCBmaW5hbGx5IHdlIG1pZ2h0IGdldCBhbm90aGVyIGJhc3Qgd2hpY2ggcmUtcXVldWVzCi0JICogdXMgYmVmb3JlIG91ciBhc3QgZm9yIHRoZSBkb3duY29udmVydCBpcyBjYWxsZWQuICovCi0JaWYgKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CTE9DS0VEKSkgewotCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQkJZ290byBkcm9wX3JlZjsKLQl9Ci0KLQlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9URUFSRE9XTikgewotCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQkJZ290byBkcm9wX3JlZjsKLQl9Ci0KLQlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CVVNZKSB7Ci0JCWlmIChsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0lOX0NBTkNFTCkgewotCQkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci0JCQlnb3RvIGRyb3BfcmVmOwotCQl9Ci0KLQkJbG9ja3Jlcy0+bF9mbGFncyB8PSBVU0VSX0xPQ0tfSU5fQ0FOQ0VMOwotCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQotCQlzdGF0dXMgPSBkbG11bmxvY2soZGxtLAotCQkJCSAgICZsb2NrcmVzLT5sX2xrc2IsCi0JCQkJICAgTEtNX0NBTkNFTCwKLQkJCQkgICB1c2VyX3VubG9ja19hc3QsCi0JCQkJICAgbG9ja3Jlcyk7Ci0JCWlmIChzdGF0dXMgIT0gRExNX05PUk1BTCkKLQkJCXVzZXJfbG9nX2RsbV9lcnJvcigiZGxtdW5sb2NrIiwgc3RhdHVzLCBsb2NrcmVzKTsKLQkJZ290byBkcm9wX3JlZjsKLQl9Ci0KLQkvKiBJZiB0aGVyZSBhcmUgc3RpbGwgaW5jb21wYXQgaG9sZGVycywgd2UgY2FuIGV4aXQgc2FmZWx5Ci0JICogd2l0aG91dCB3b3JyeWluZyBhYm91dCByZS1xdWV1ZWluZyB0aGlzIGxvY2sgYXMgdGhhdCB3aWxsCi0JICogaGFwcGVuIG9uIHRoZSBsYXN0IGNhbGwgdG8gdXNlcl9jbHVzdGVyX3VubG9jay4gKi8KLQlpZiAoKGxvY2tyZXMtPmxfYmxvY2tpbmcgPT0gTEtNX0VYTU9ERSkKLQkgICAgJiYgKGxvY2tyZXMtPmxfZXhfaG9sZGVycyB8fCBsb2NrcmVzLT5sX3JvX2hvbGRlcnMpKSB7Ci0JCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCQltbG9nKDAsICJjYW4ndCBkb3duY29udmVydCBmb3IgZXg6IHJvID0gJXUsIGV4ID0gJXVcbiIsCi0JCQlsb2NrcmVzLT5sX3JvX2hvbGRlcnMsIGxvY2tyZXMtPmxfZXhfaG9sZGVycyk7Ci0JCWdvdG8gZHJvcF9yZWY7Ci0JfQotCi0JaWYgKChsb2NrcmVzLT5sX2Jsb2NraW5nID09IExLTV9QUk1PREUpCi0JICAgICYmIGxvY2tyZXMtPmxfZXhfaG9sZGVycykgewotCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQkJbWxvZygwLCAiY2FuJ3QgZG93bmNvbnZlcnQgZm9yIHByOiBleCA9ICV1XG4iLAotCQkJbG9ja3Jlcy0+bF9leF9ob2xkZXJzKTsKLQkJZ290byBkcm9wX3JlZjsKLQl9Ci0KLQkvKiB5YXksIHdlIGNhbiBkb3duY29udmVydCBub3cuICovCi0JbmV3X2xldmVsID0gdXNlcl9oaWdoZXN0X2NvbXBhdF9sb2NrX2xldmVsKGxvY2tyZXMtPmxfYmxvY2tpbmcpOwotCWxvY2tyZXMtPmxfcmVxdWVzdGVkID0gbmV3X2xldmVsOwotCWxvY2tyZXMtPmxfZmxhZ3MgfD0gVVNFUl9MT0NLX0JVU1k7Ci0JbWxvZygwLCAiRG93bmNvbnZlcnQgbG9jayBmcm9tICVkIHRvICVkXG4iLAotCQlsb2NrcmVzLT5sX2xldmVsLCBuZXdfbGV2ZWwpOwotCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0JLyogbmVlZCBsb2NrIGRvd25jb252ZXJ0IHJlcXVlc3Qgbm93Li4uICovCi0Jc3RhdHVzID0gZGxtbG9jayhkbG0sCi0JCQkgbmV3X2xldmVsLAotCQkJICZsb2NrcmVzLT5sX2xrc2IsCi0JCQkgTEtNX0NPTlZFUlR8TEtNX1ZBTEJMSywKLQkJCSBsb2NrcmVzLT5sX25hbWUsCi0JCQkgbG9ja3Jlcy0+bF9uYW1lbGVuLAotCQkJIHVzZXJfYXN0LAotCQkJIGxvY2tyZXMsCi0JCQkgdXNlcl9iYXN0KTsKLQlpZiAoc3RhdHVzICE9IERMTV9OT1JNQUwpIHsKLQkJdXNlcl9sb2dfZGxtX2Vycm9yKCJkbG1sb2NrIiwgc3RhdHVzLCBsb2NrcmVzKTsKLQkJdXNlcl9yZWNvdmVyX2Zyb21fZGxtX2Vycm9yKGxvY2tyZXMpOwotCX0KLQotZHJvcF9yZWY6Ci0JdXNlcl9kbG1fZHJvcF9pbm9kZV9yZWYobG9ja3Jlcyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1c2VyX2RsbV9pbmNfaG9sZGVycyhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcywKLQkJCQkJaW50IGxldmVsKQotewotCXN3aXRjaChsZXZlbCkgewotCWNhc2UgTEtNX0VYTU9ERToKLQkJbG9ja3Jlcy0+bF9leF9ob2xkZXJzKys7Ci0JCWJyZWFrOwotCWNhc2UgTEtNX1BSTU9ERToKLQkJbG9ja3Jlcy0+bF9yb19ob2xkZXJzKys7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCUJVRygpOwotCX0KLX0KLQotLyogcHJlZGljdCB3aGF0IGxvY2sgbGV2ZWwgd2UnbGwgYmUgZHJvcHBpbmcgZG93biB0byBvbiBiZWhhbGYKLSAqIG9mIGFub3RoZXIgbm9kZSwgYW5kIHJldHVybiB0cnVlIGlmIHRoZSBjdXJyZW50bHkgd2FudGVkCi0gKiBsZXZlbCB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCBpdC4gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci11c2VyX21heV9jb250aW51ZV9vbl9ibG9ja2VkX2xvY2soc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMsCi0JCQkJICBpbnQgd2FudGVkKQotewotCUJVR19PTighKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfQkxPQ0tFRCkpOwotCi0JcmV0dXJuIHdhbnRlZCA8PSB1c2VyX2hpZ2hlc3RfY29tcGF0X2xvY2tfbGV2ZWwobG9ja3Jlcy0+bF9ibG9ja2luZyk7Ci19Ci0KLWludCB1c2VyX2RsbV9jbHVzdGVyX2xvY2soc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMsCi0JCQkgIGludCBsZXZlbCwKLQkJCSAgaW50IGxrbV9mbGFncykKLXsKLQlpbnQgc3RhdHVzLCBsb2NhbF9mbGFnczsKLQlzdHJ1Y3QgZGxtX2N0eHQgKmRsbSA9IGRsbV9jdHh0X2Zyb21fdXNlcl9sb2NrcmVzKGxvY2tyZXMpOwotCi0JaWYgKGxldmVsICE9IExLTV9FWE1PREUgJiYKLQkgICAgbGV2ZWwgIT0gTEtNX1BSTU9ERSkgewotCQltbG9nKE1MX0VSUk9SLCAibG9ja3JlcyAlLipzOiBpbnZhbGlkIHJlcXVlc3QhXG4iLAotCQkgICAgIGxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lKTsKLQkJc3RhdHVzID0gLUVJTlZBTDsKLQkJZ290byBiYWlsOwotCX0KLQotCW1sb2coMCwgImxvY2tyZXMgJS4qczogYXNraW5nIGZvciAlcyBsb2NrLCBwYXNzZWQgZmxhZ3MgPSAweCV4XG4iLAotCSAgICAgbG9ja3Jlcy0+bF9uYW1lbGVuLCBsb2NrcmVzLT5sX25hbWUsCi0JICAgICAobGV2ZWwgPT0gTEtNX0VYTU9ERSkgPyAiTEtNX0VYTU9ERSIgOiAiTEtNX1BSTU9ERSIsCi0JICAgICBsa21fZmxhZ3MpOwotCi1hZ2FpbjoKLQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHsKLQkJc3RhdHVzID0gLUVSRVNUQVJUU1lTOwotCQlnb3RvIGJhaWw7Ci0JfQotCi0Jc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0JLyogV2Ugb25seSBjb21wYXJlIGFnYWluc3QgdGhlIGN1cnJlbnRseSBncmFudGVkIGxldmVsCi0JICogaGVyZS4gSWYgdGhlIGxvY2sgaXMgYmxvY2tlZCB3YWl0aW5nIG9uIGEgZG93bmNvbnZlcnQsCi0JICogd2UnbGwgZ2V0IGNhdWdodCBiZWxvdy4gKi8KLQlpZiAoKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfQlVTWSkgJiYKLQkgICAgKGxldmVsID4gbG9ja3Jlcy0+bF9sZXZlbCkpIHsKLQkJLyogaXMgc29tZW9uZSBzaXR0aW5nIGluIGRsbV9sb2NrPyBJZiBzbywgd2FpdCBvbgotCQkgKiB0aGVtLiAqLwotCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQotCQl1c2VyX3dhaXRfb25fYnVzeV9sb2NrKGxvY2tyZXMpOwotCQlnb3RvIGFnYWluOwotCX0KLQotCWlmICgobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CTE9DS0VEKSAmJgotCSAgICAoIXVzZXJfbWF5X2NvbnRpbnVlX29uX2Jsb2NrZWRfbG9jayhsb2NrcmVzLCBsZXZlbCkpKSB7Ci0JCS8qIGlzIHRoZSBsb2NrIGlzIGN1cnJlbnRseSBibG9ja2VkIG9uIGJlaGFsZiBvZgotCQkgKiBhbm90aGVyIG5vZGUgKi8KLQkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci0KLQkJdXNlcl93YWl0X29uX2Jsb2NrZWRfbG9jayhsb2NrcmVzKTsKLQkJZ290byBhZ2FpbjsKLQl9Ci0KLQlpZiAobGV2ZWwgPiBsb2NrcmVzLT5sX2xldmVsKSB7Ci0JCWxvY2FsX2ZsYWdzID0gbGttX2ZsYWdzIHwgTEtNX1ZBTEJMSzsKLQkJaWYgKGxvY2tyZXMtPmxfbGV2ZWwgIT0gTEtNX0lWTU9ERSkKLQkJCWxvY2FsX2ZsYWdzIHw9IExLTV9DT05WRVJUOwotCi0JCWxvY2tyZXMtPmxfcmVxdWVzdGVkID0gbGV2ZWw7Ci0JCWxvY2tyZXMtPmxfZmxhZ3MgfD0gVVNFUl9MT0NLX0JVU1k7Ci0JCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0JCUJVR19PTihsZXZlbCA9PSBMS01fSVZNT0RFKTsKLQkJQlVHX09OKGxldmVsID09IExLTV9OTE1PREUpOwotCi0JCS8qIGNhbGwgZGxtX2xvY2sgdG8gdXBncmFkZSBsb2NrIG5vdyAqLwotCQlzdGF0dXMgPSBkbG1sb2NrKGRsbSwKLQkJCQkgbGV2ZWwsCi0JCQkJICZsb2NrcmVzLT5sX2xrc2IsCi0JCQkJIGxvY2FsX2ZsYWdzLAotCQkJCSBsb2NrcmVzLT5sX25hbWUsCi0JCQkJIGxvY2tyZXMtPmxfbmFtZWxlbiwKLQkJCQkgdXNlcl9hc3QsCi0JCQkJIGxvY2tyZXMsCi0JCQkJIHVzZXJfYmFzdCk7Ci0JCWlmIChzdGF0dXMgIT0gRExNX05PUk1BTCkgewotCQkJaWYgKChsa21fZmxhZ3MgJiBMS01fTk9RVUVVRSkgJiYKLQkJCSAgICAoc3RhdHVzID09IERMTV9OT1RRVUVVRUQpKQotCQkJCXN0YXR1cyA9IC1FQUdBSU47Ci0JCQllbHNlIHsKLQkJCQl1c2VyX2xvZ19kbG1fZXJyb3IoImRsbWxvY2siLCBzdGF0dXMsIGxvY2tyZXMpOwotCQkJCXN0YXR1cyA9IC1FSU5WQUw7Ci0JCQl9Ci0JCQl1c2VyX3JlY292ZXJfZnJvbV9kbG1fZXJyb3IobG9ja3Jlcyk7Ci0JCQlnb3RvIGJhaWw7Ci0JCX0KLQotCQl1c2VyX3dhaXRfb25fYnVzeV9sb2NrKGxvY2tyZXMpOwotCQlnb3RvIGFnYWluOwotCX0KLQotCXVzZXJfZGxtX2luY19ob2xkZXJzKGxvY2tyZXMsIGxldmVsKTsKLQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQotCXN0YXR1cyA9IDA7Ci1iYWlsOgotCXJldHVybiBzdGF0dXM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1c2VyX2RsbV9kZWNfaG9sZGVycyhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcywKLQkJCQkJaW50IGxldmVsKQotewotCXN3aXRjaChsZXZlbCkgewotCWNhc2UgTEtNX0VYTU9ERToKLQkJQlVHX09OKCFsb2NrcmVzLT5sX2V4X2hvbGRlcnMpOwotCQlsb2NrcmVzLT5sX2V4X2hvbGRlcnMtLTsKLQkJYnJlYWs7Ci0JY2FzZSBMS01fUFJNT0RFOgotCQlCVUdfT04oIWxvY2tyZXMtPmxfcm9faG9sZGVycyk7Ci0JCWxvY2tyZXMtPmxfcm9faG9sZGVycy0tOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQl9Ci19Ci0KLXZvaWQgdXNlcl9kbG1fY2x1c3Rlcl91bmxvY2soc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMsCi0JCQkgICAgIGludCBsZXZlbCkKLXsKLQlpZiAobGV2ZWwgIT0gTEtNX0VYTU9ERSAmJgotCSAgICBsZXZlbCAhPSBMS01fUFJNT0RFKSB7Ci0JCW1sb2coTUxfRVJST1IsICJsb2NrcmVzICUuKnM6IGludmFsaWQgcmVxdWVzdCFcbiIsCi0JCSAgICAgbG9ja3Jlcy0+bF9uYW1lbGVuLCBsb2NrcmVzLT5sX25hbWUpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCXVzZXJfZGxtX2RlY19ob2xkZXJzKGxvY2tyZXMsIGxldmVsKTsKLQlfX3VzZXJfZGxtX2NvbmRfcXVldWVfbG9ja3Jlcyhsb2NrcmVzKTsKLQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLX0KLQotdm9pZCB1c2VyX2RsbV93cml0ZV9sdmIoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCWNvbnN0IGNoYXIgKnZhbCwKLQkJCXVuc2lnbmVkIGludCBsZW4pCi17Ci0Jc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMgPSAmRExNRlNfSShpbm9kZSktPmlwX2xvY2tyZXM7Ci0JY2hhciAqbHZiID0gbG9ja3Jlcy0+bF9sa3NiLmx2YjsKLQotCUJVR19PTihsZW4gPiBETE1fTFZCX0xFTik7Ci0KLQlzcGluX2xvY2soJmxvY2tyZXMtPmxfbG9jayk7Ci0KLQlCVUdfT04obG9ja3Jlcy0+bF9sZXZlbCA8IExLTV9FWE1PREUpOwotCW1lbWNweShsdmIsIHZhbCwgbGVuKTsKLQotCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotfQotCi12b2lkIHVzZXJfZGxtX3JlYWRfbHZiKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCSAgICAgICBjaGFyICp2YWwsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgbGVuKQotewotCXN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzID0gJkRMTUZTX0koaW5vZGUpLT5pcF9sb2NrcmVzOwotCWNoYXIgKmx2YiA9IGxvY2tyZXMtPmxfbGtzYi5sdmI7Ci0KLQlCVUdfT04obGVuID4gRExNX0xWQl9MRU4pOwotCi0Jc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0JQlVHX09OKGxvY2tyZXMtPmxfbGV2ZWwgPCBMS01fUFJNT0RFKTsKLQltZW1jcHkodmFsLCBsdmIsIGxlbik7Ci0KLQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLX0KLQotdm9pZCB1c2VyX2RsbV9sb2NrX3Jlc19pbml0KHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzLAotCQkJICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKLXsKLQltZW1zZXQobG9ja3JlcywgMCwgc2l6ZW9mKCpsb2NrcmVzKSk7Ci0KLQlzcGluX2xvY2tfaW5pdCgmbG9ja3Jlcy0+bF9sb2NrKTsKLQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZsb2NrcmVzLT5sX2V2ZW50KTsKLQlsb2NrcmVzLT5sX2xldmVsID0gTEtNX0lWTU9ERTsKLQlsb2NrcmVzLT5sX3JlcXVlc3RlZCA9IExLTV9JVk1PREU7Ci0JbG9ja3Jlcy0+bF9ibG9ja2luZyA9IExLTV9JVk1PREU7Ci0KLQkvKiBzaG91bGQgaGF2ZSBiZWVuIGNoZWNrZWQgYmVmb3JlIGdldHRpbmcgaGVyZS4gKi8KLQlCVUdfT04oZGVudHJ5LT5kX25hbWUubGVuID49IFVTRVJfRExNX0xPQ0tfSURfTUFYX0xFTik7Ci0KLQltZW1jcHkobG9ja3Jlcy0+bF9uYW1lLAotCSAgICAgICBkZW50cnktPmRfbmFtZS5uYW1lLAotCSAgICAgICBkZW50cnktPmRfbmFtZS5sZW4pOwotCWxvY2tyZXMtPmxfbmFtZWxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKLX0KLQotaW50IHVzZXJfZGxtX2Rlc3Ryb3lfbG9jayhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcykKLXsKLQlpbnQgc3RhdHVzID0gLUVCVVNZOwotCXN0cnVjdCBkbG1fY3R4dCAqZGxtID0gZGxtX2N0eHRfZnJvbV91c2VyX2xvY2tyZXMobG9ja3Jlcyk7Ci0KLQltbG9nKDAsICJhc2tlZCB0byBkZXN0cm95ICUuKnNcbiIsIGxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lKTsKLQotCXNwaW5fbG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9URUFSRE9XTikgewotCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JbG9ja3Jlcy0+bF9mbGFncyB8PSBVU0VSX0xPQ0tfSU5fVEVBUkRPV047Ci0KLQl3aGlsZSAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CVVNZKSB7Ci0JCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0JCXVzZXJfd2FpdF9vbl9idXN5X2xvY2sobG9ja3Jlcyk7Ci0KLQkJc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCX0KLQotCWlmIChsb2NrcmVzLT5sX3JvX2hvbGRlcnMgfHwgbG9ja3Jlcy0+bF9leF9ob2xkZXJzKSB7Ci0JCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCQlnb3RvIGJhaWw7Ci0JfQotCi0Jc3RhdHVzID0gMDsKLQlpZiAoIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0FUVEFDSEVEKSkgewotCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKLQkJZ290byBiYWlsOwotCX0KLQotCWxvY2tyZXMtPmxfZmxhZ3MgJj0gflVTRVJfTE9DS19BVFRBQ0hFRDsKLQlsb2NrcmVzLT5sX2ZsYWdzIHw9IFVTRVJfTE9DS19CVVNZOwotCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOwotCi0Jc3RhdHVzID0gZGxtdW5sb2NrKGRsbSwKLQkJCSAgICZsb2NrcmVzLT5sX2xrc2IsCi0JCQkgICBMS01fVkFMQkxLLAotCQkJICAgdXNlcl91bmxvY2tfYXN0LAotCQkJICAgbG9ja3Jlcyk7Ci0JaWYgKHN0YXR1cyAhPSBETE1fTk9STUFMKSB7Ci0JCXVzZXJfbG9nX2RsbV9lcnJvcigiZGxtdW5sb2NrIiwgc3RhdHVzLCBsb2NrcmVzKTsKLQkJc3RhdHVzID0gLUVJTlZBTDsKLQkJZ290byBiYWlsOwotCX0KLQotCXVzZXJfd2FpdF9vbl9idXN5X2xvY2sobG9ja3Jlcyk7Ci0KLQlzdGF0dXMgPSAwOwotYmFpbDoKLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdHJ1Y3QgZGxtX2N0eHQgKnVzZXJfZGxtX3JlZ2lzdGVyX2NvbnRleHQoc3RydWN0IHFzdHIgKm5hbWUsCi0JCQkJCSAgIHN0cnVjdCBkbG1fcHJvdG9jb2xfdmVyc2lvbiAqcHJvdG8pCi17Ci0Jc3RydWN0IGRsbV9jdHh0ICpkbG07Ci0JdTMyIGRsbV9rZXk7Ci0JY2hhciAqZG9tYWluOwotCi0JZG9tYWluID0ga21hbGxvYyhuYW1lLT5sZW4gKyAxLCBHRlBfTk9GUyk7Ci0JaWYgKCFkb21haW4pIHsKLQkJbWxvZ19lcnJubygtRU5PTUVNKTsKLQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Ci0JfQotCi0JZGxtX2tleSA9IGNyYzMyX2xlKDAsIG5hbWUtPm5hbWUsIG5hbWUtPmxlbik7Ci0KLQlzbnByaW50Zihkb21haW4sIG5hbWUtPmxlbiArIDEsICIlLipzIiwgbmFtZS0+bGVuLCBuYW1lLT5uYW1lKTsKLQotCWRsbSA9IGRsbV9yZWdpc3Rlcl9kb21haW4oZG9tYWluLCBkbG1fa2V5LCBwcm90byk7Ci0JaWYgKElTX0VSUihkbG0pKQotCQltbG9nX2Vycm5vKFBUUl9FUlIoZGxtKSk7Ci0KLQlrZnJlZShkb21haW4pOwotCXJldHVybiBkbG07Ci19Ci0KLXZvaWQgdXNlcl9kbG1fdW5yZWdpc3Rlcl9jb250ZXh0KHN0cnVjdCBkbG1fY3R4dCAqZGxtKQotewotCWRsbV91bnJlZ2lzdGVyX2RvbWFpbihkbG0pOwotfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL3VzZXJkbG0uaCBiL2ZzL29jZnMyL2RsbS91c2VyZGxtLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBjM2NjMDMuLjAwMDAwMDAKLS0tIGEvZnMvb2NmczIvZGxtL3VzZXJkbG0uaAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDg7IC0qLQotICogdmltOiBub2V4cGFuZHRhYiBzdz04IHRzPTggc3RzPTA6Ci0gKgotICogdXNlcmRsbS5oCi0gKgotICogVXNlcnNwYWNlIGRsbSBkZWZpbmVzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyLCAyMDA0IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAotICogQm9zdG9uLCBNQSAwMjExMTAtMTMwNywgVVNBLgotICovCi0KLQotI2lmbmRlZiBVU0VSRExNX0gKLSNkZWZpbmUgVVNFUkRMTV9ICi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+Ci0KLS8qIHVzZXJfbG9ja19yZXMtPmxfZmxhZ3MgZmxhZ3MuICovCi0jZGVmaW5lIFVTRVJfTE9DS19BVFRBQ0hFRCAgICAgICgweDAwMDAwMDAxKSAvKiB3ZSBoYXZlIGluaXRpYWxpemVkCi0JCQkJCSAgICAgICAqIHRoZSBsdmIgKi8KLSNkZWZpbmUgVVNFUl9MT0NLX0JVU1kgICAgICAgICAgKDB4MDAwMDAwMDIpIC8qIHdlIGFyZSBjdXJyZW50bHkgaW4KLQkJCQkJICAgICAgICogZGxtX2xvY2sgKi8KLSNkZWZpbmUgVVNFUl9MT0NLX0JMT0NLRUQgICAgICAgKDB4MDAwMDAwMDQpIC8qIGJsb2NrZWQgd2FpdGluZyB0bwotCQkJCQkgICAgICAqIGRvd25jb252ZXJ0Ki8KLSNkZWZpbmUgVVNFUl9MT0NLX0lOX1RFQVJET1dOICAgKDB4MDAwMDAwMDgpIC8qIHdlJ3JlIGN1cnJlbnRseQotCQkJCQkgICAgICAqIGRlc3Ryb3lpbmcgdGhpcwotCQkJCQkgICAgICAqIGxvY2suICovCi0jZGVmaW5lIFVTRVJfTE9DS19RVUVVRUQgICAgICAgICgweDAwMDAwMDEwKSAvKiBsb2NrIGlzIG9uIHRoZQotCQkJCQkgICAgICAqIHdvcmtxdWV1ZSAqLwotI2RlZmluZSBVU0VSX0xPQ0tfSU5fQ0FOQ0VMICAgICAoMHgwMDAwMDAyMCkKLQotc3RydWN0IHVzZXJfbG9ja19yZXMgewotCXNwaW5sb2NrX3QgICAgICAgICAgICAgICBsX2xvY2s7Ci0KLQlpbnQgICAgICAgICAgICAgICAgICAgICAgbF9mbGFnczsKLQotI2RlZmluZSBVU0VSX0RMTV9MT0NLX0lEX01BWF9MRU4gIDMyCi0JY2hhciAgICAgICAgICAgICAgICAgICAgIGxfbmFtZVtVU0VSX0RMTV9MT0NLX0lEX01BWF9MRU5dOwotCWludCAgICAgICAgICAgICAgICAgICAgICBsX25hbWVsZW47Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgIGxfbGV2ZWw7Ci0JdW5zaWduZWQgaW50ICAgICAgICAgICAgIGxfcm9faG9sZGVyczsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgbF9leF9ob2xkZXJzOwotCXN0cnVjdCBkbG1fbG9ja3N0YXR1cyAgICBsX2xrc2I7Ci0KLQlpbnQgICAgICAgICAgICAgICAgICAgICAgbF9yZXF1ZXN0ZWQ7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgIGxfYmxvY2tpbmc7Ci0KLQl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICAgbF9ldmVudDsKLQotCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgICBsX3dvcms7Ci19OwotCi1leHRlcm4gc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnVzZXJfZGxtX3dvcmtlcjsKLQotdm9pZCB1c2VyX2RsbV9sb2NrX3Jlc19pbml0KHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzLAotCQkJICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci1pbnQgdXNlcl9kbG1fZGVzdHJveV9sb2NrKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzKTsKLWludCB1c2VyX2RsbV9jbHVzdGVyX2xvY2soc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMsCi0JCQkgIGludCBsZXZlbCwKLQkJCSAgaW50IGxrbV9mbGFncyk7Ci12b2lkIHVzZXJfZGxtX2NsdXN0ZXJfdW5sb2NrKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzLAotCQkJICAgICBpbnQgbGV2ZWwpOwotdm9pZCB1c2VyX2RsbV93cml0ZV9sdmIoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCWNvbnN0IGNoYXIgKnZhbCwKLQkJCXVuc2lnbmVkIGludCBsZW4pOwotdm9pZCB1c2VyX2RsbV9yZWFkX2x2YihzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkgICAgICAgY2hhciAqdmFsLAotCQkgICAgICAgdW5zaWduZWQgaW50IGxlbik7Ci1zdHJ1Y3QgZGxtX2N0eHQgKnVzZXJfZGxtX3JlZ2lzdGVyX2NvbnRleHQoc3RydWN0IHFzdHIgKm5hbWUsCi0JCQkJCSAgIHN0cnVjdCBkbG1fcHJvdG9jb2xfdmVyc2lvbiAqcHJvdG8pOwotdm9pZCB1c2VyX2RsbV91bnJlZ2lzdGVyX2NvbnRleHQoc3RydWN0IGRsbV9jdHh0ICpkbG0pOwotCi1zdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSB7Ci0Jc3RydWN0IGRsbV9jdHh0ICAgICAgICAgICAgICppcF9kbG07Ci0KLQlzdHJ1Y3QgdXNlcl9sb2NrX3JlcyBpcF9sb2NrcmVzOyAvKiB1bnVzZWQgZm9yIGRpcmVjdG9yaWVzLiAqLwotCXN0cnVjdCBpbm9kZSAgICAgICAgICppcF9wYXJlbnQ7Ci0KLQlzdHJ1Y3QgaW5vZGUgICAgICAgICBpcF92ZnNfaW5vZGU7Ci19OwotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlICoKLURMTUZTX0koc3RydWN0IGlub2RlICppbm9kZSkKLXsKLSAgICAgICAgcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwKLQkJCSAgICBzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSwKLQkJCSAgICBpcF92ZnNfaW5vZGUpOwotfQotCi1zdHJ1Y3QgZGxtZnNfZmlscF9wcml2YXRlIHsKLQlpbnQgICAgICAgICAgICAgICAgICBmcF9sb2NrX2xldmVsOwotfTsKLQotI2RlZmluZSBETE1GU19NQUdJQwkweDc2YTlmNDI1Ci0KLSNlbmRpZiAvKiBVU0VSRExNX0ggKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbWZzL01ha2VmaWxlIGIvZnMvb2NmczIvZGxtZnMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY2OWI0OAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL29jZnMyL2RsbWZzL01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorRVhUUkFfQ0ZMQUdTICs9IC1JZnMvb2NmczIKKworb2JqLSQoQ09ORklHX09DRlMyX0ZTKSArPSBvY2ZzMl9kbG1mcy5vCisKK29jZnMyX2RsbWZzLW9ianMgOj0gdXNlcmRsbS5vIGRsbWZzLm8gZGxtZnN2ZXIubwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtZnMvZGxtZnMuYyBiL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwZGUxNQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL29jZnMyL2RsbWZzL2RsbWZzLmMKQEAgLTAsMCArMSw3MTUgQEAKKy8qIC0qLSBtb2RlOiBjOyBjLWJhc2ljLW9mZnNldDogODsgLSotCisgKiB2aW06IG5vZXhwYW5kdGFiIHN3PTggdHM9OCBzdHM9MDoKKyAqCisgKiBkbG1mcy5jCisgKgorICogQ29kZSB3aGljaCBpbXBsZW1lbnRzIHRoZSBrZXJuZWwgc2lkZSBvZiBhIG1pbmltYWwgdXNlcnNwYWNlCisgKiBpbnRlcmZhY2UgdG8gb3VyIERMTS4gVGhpcyBmaWxlIGhhbmRsZXMgdGhlIHZpcnR1YWwgZmlsZSBzeXN0ZW0KKyAqIHVzZWQgZm9yIGNvbW11bmljYXRpb24gd2l0aCB1c2Vyc3BhY2UuIENyZWRpdCBzaG91bGQgZ28gdG8gcmFtZnMsCisgKiB3aGljaCB3YXMgYSB0ZW1wbGF0ZSBmb3IgdGhlIGZzIHNpZGUgb2YgdGhpcyBtb2R1bGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMTAtMTMwNywgVVNBLgorICovCisKKy8qIFNpbXBsZSBWRlMgaG9va3MgYmFzZWQgb246ICovCisvKgorICogUmVzaXphYmxlIHNpbXBsZSByYW0gZmlsZXN5c3RlbSBmb3IgTGludXguCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIExpbnVzIFRvcnZhbGRzLgorICogICAgICAgICAgICAgICAyMDAwIFRyYW5zbWV0YSBDb3JwLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorCisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgInN0YWNrZ2x1ZS5oIgorI2luY2x1ZGUgInVzZXJkbG0uaCIKKyNpbmNsdWRlICJkbG1mc3Zlci5oIgorCisjZGVmaW5lIE1MT0dfTUFTS19QUkVGSVggTUxfRExNRlMKKyNpbmNsdWRlICJjbHVzdGVyL21hc2tsb2cuaCIKKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgZGxtZnNfb3BzOworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGxtZnNfZmlsZV9vcGVyYXRpb25zOworc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGRsbWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGRsbWZzX3Jvb3RfaW5vZGVfb3BlcmF0aW9uczsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBkbG1mc19maWxlX2lub2RlX29wZXJhdGlvbnM7CitzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmRsbWZzX2lub2RlX2NhY2hlOworCitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdXNlcl9kbG1fd29ya2VyOworCisKKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgQUJJIGNhcGFiaWxpdGllcyBvZiBkbG1mcy4KKyAqCisgKiBPdmVyIHRpbWUsIGRsbWZzIGhhcyBhZGRlZCBzb21lIGZlYXR1cmVzIHRoYXQgd2VyZSBub3QgcGFydCBvZiB0aGUKKyAqIGluaXRpYWwgQUJJLiAgVW5mb3J0dW5hdGVseSwgc29tZSBvZiB0aGVzZSBmZWF0dXJlcyBhcmUgbm90IGRldGVjdGFibGUKKyAqIHZpYSBzdGFuZGFyZCB1c2FnZS4gIEZvciBleGFtcGxlLCBMaW51eCdzIGRlZmF1bHQgcG9sbCBhbHdheXMgcmV0dXJucworICogUE9MTElOLCBzbyB0aGVyZSBpcyBubyB3YXkgZm9yIGEgY2FsbGVyIG9mIHBvbGwoMikgdG8ga25vdyB3aGVuIGRsbWZzCisgKiBhZGRlZCBwb2xsIHN1cHBvcnQuICBJbnN0ZWFkLCB3ZSBwcm92aWRlIHRoaXMgbGlzdCBvZiBuZXcgY2FwYWJpbGl0aWVzLgorICoKKyAqIENhcGFiaWxpdGllcyBpcyBhIHJlYWQtb25seSBhdHRyaWJ1dGUuICBXZSBkbyBpdCBhcyBhIG1vZHVsZSBwYXJhbWV0ZXIKKyAqIHNvIHdlIGNhbiBkaXNjb3ZlciBpdCB3aGV0aGVyIGRsbWZzIGlzIGJ1aWx0IGluLCBsb2FkZWQsIG9yIGV2ZW4gbm90CisgKiBsb2FkZWQuCisgKgorICogVGhlIEFCSSBmZWF0dXJlcyBhcmUgbG9jYWwgdG8gdGhpcyBtYWNoaW5lJ3MgZGxtZnMgbW91bnQuICBUaGlzIGlzCisgKiBkaXN0aW5jdCBmcm9tIHRoZSBsb2NraW5nIHByb3RvY29sLCB3aGljaCBpcyBjb25jZXJuZWQgd2l0aCBpbnRlci1ub2RlCisgKiBpbnRlcmFjdGlvbi4KKyAqCisgKiBDYXBhYmlsaXRpZXM6CisgKiAtIGJhc3QJOiBQT0xMSU4gYWdhaW5zdCB0aGUgZmlsZSBkZXNjcmlwdG9yIG9mIGEgaGVsZCBsb2NrCisgKgkJICBzaWduaWZpZXMgYSBiYXN0IGZpcmVkIG9uIHRoZSBsb2NrLgorICovCisjZGVmaW5lIERMTUZTX0NBUEFCSUxJVElFUyAiYmFzdCBzdGFja2dsdWUiCitleHRlcm4gaW50IHBhcmFtX3NldF9kbG1mc19jYXBhYmlsaXRpZXMoY29uc3QgY2hhciAqdmFsLAorCQkJCQlzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCkKK3sKKwlwcmludGsoS0VSTl9FUlIgIiVzOiByZWFkb25seSBwYXJhbWV0ZXJcbiIsIGtwLT5uYW1lKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KK3N0YXRpYyBpbnQgcGFyYW1fZ2V0X2RsbWZzX2NhcGFiaWxpdGllcyhjaGFyICpidWZmZXIsCisJCQkJCXN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKQoreworCXJldHVybiBzdHJsY3B5KGJ1ZmZlciwgRExNRlNfQ0FQQUJJTElUSUVTLAorCQkgICAgICAgc3RybGVuKERMTUZTX0NBUEFCSUxJVElFUykgKyAxKTsKK30KK21vZHVsZV9wYXJhbV9jYWxsKGNhcGFiaWxpdGllcywgcGFyYW1fc2V0X2RsbWZzX2NhcGFiaWxpdGllcywKKwkJICBwYXJhbV9nZXRfZGxtZnNfY2FwYWJpbGl0aWVzLCBOVUxMLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY2FwYWJpbGl0aWVzLCBETE1GU19DQVBBQklMSVRJRVMpOworCisKKy8qCisgKiBkZWNvZGVzIGEgc2V0IG9mIG9wZW4gZmxhZ3MgaW50byBhIHZhbGlkIGxvY2sgbGV2ZWwgYW5kIGEgc2V0IG9mIGZsYWdzLgorICogcmV0dXJucyA8IDAgaWYgd2UgaGF2ZSBpbnZhbGlkIGZsYWdzCisgKiBmbGFncyB3aGljaCBtZWFuIHNvbWV0aGluZyB0byB1czoKKyAqIE9fUkRPTkxZIC0+IFBSTU9ERSBsZXZlbAorICogT19XUk9OTFkgLT4gRVhNT0RFIGxldmVsCisgKgorICogT19OT05CTE9DSyAtPiBMS01fTk9RVUVVRQorICovCitzdGF0aWMgaW50IGRsbWZzX2RlY29kZV9vcGVuX2ZsYWdzKGludCBvcGVuX2ZsYWdzLAorCQkJCSAgIGludCAqbGV2ZWwsCisJCQkJICAgaW50ICpmbGFncykKK3sKKwlpZiAob3Blbl9mbGFncyAmIChPX1dST05MWXxPX1JEV1IpKQorCQkqbGV2ZWwgPSBMS01fRVhNT0RFOworCWVsc2UKKwkJKmxldmVsID0gTEtNX1BSTU9ERTsKKworCSpmbGFncyA9IDA7CisJaWYgKG9wZW5fZmxhZ3MgJiBPX05PTkJMT0NLKQorCQkqZmxhZ3MgfD0gTEtNX05PUVVFVUU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkbG1mc19maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWludCBzdGF0dXMsIGxldmVsLCBmbGFnczsKKwlzdHJ1Y3QgZGxtZnNfZmlscF9wcml2YXRlICpmcCA9IE5VTEw7CisJc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUgKmlwOworCisJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCisJCUJVRygpOworCisJbWxvZygwLCAib3BlbiBjYWxsZWQgb24gaW5vZGUgJWx1LCBmbGFncyAweCV4XG4iLCBpbm9kZS0+aV9pbm8sCisJCWZpbGUtPmZfZmxhZ3MpOworCisJc3RhdHVzID0gZGxtZnNfZGVjb2RlX29wZW5fZmxhZ3MoZmlsZS0+Zl9mbGFncywgJmxldmVsLCAmZmxhZ3MpOworCWlmIChzdGF0dXMgPCAwKQorCQlnb3RvIGJhaWw7CisKKwkvKiBXZSBkb24ndCB3YW50IHRvIGhvbm9yIE9fQVBQRU5EIGF0IHJlYWQvd3JpdGUgdGltZSBhcyBpdAorCSAqIGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3IgTFZCIHdyaXRlcy4gKi8KKwlmaWxlLT5mX2ZsYWdzICY9IH5PX0FQUEVORDsKKworCWZwID0ga21hbGxvYyhzaXplb2YoKmZwKSwgR0ZQX05PRlMpOworCWlmICghZnApIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJZ290byBiYWlsOworCX0KKwlmcC0+ZnBfbG9ja19sZXZlbCA9IGxldmVsOworCisJaXAgPSBETE1GU19JKGlub2RlKTsKKworCXN0YXR1cyA9IHVzZXJfZGxtX2NsdXN0ZXJfbG9jaygmaXAtPmlwX2xvY2tyZXMsIGxldmVsLCBmbGFncyk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJLyogdGhpcyBpcyBhIHN0cmFuZ2UgZXJyb3IgdG8gcmV0dXJuIGhlcmUgYnV0IEkgd2FudAorCQkgKiB0byBiZSBhYmxlIHVzZXJzcGFjZSB0byBiZSBhYmxlIHRvIGRpc3Rpbmd1aXNoIGEKKwkJICogdmFsaWQgbG9jayByZXF1ZXN0IGZyb20gb25lIHRoYXQgc2ltcGx5IGNvdWxkbid0IGJlCisJCSAqIGdyYW50ZWQuICovCisJCWlmIChmbGFncyAmIExLTV9OT1FVRVVFICYmIHN0YXR1cyA9PSAtRUFHQUlOKQorCQkJc3RhdHVzID0gLUVUWFRCU1k7CisJCWtmcmVlKGZwKTsKKwkJZ290byBiYWlsOworCX0KKworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZwOworYmFpbDoKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGRsbWZzX2ZpbGVfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgICAgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IGxldmVsLCBzdGF0dXM7CisJc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUgKmlwID0gRExNRlNfSShpbm9kZSk7CisJc3RydWN0IGRsbWZzX2ZpbHBfcHJpdmF0ZSAqZnAgPQorCQkoc3RydWN0IGRsbWZzX2ZpbHBfcHJpdmF0ZSAqKSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkJQlVHKCk7CisKKwltbG9nKDAsICJjbG9zZSBjYWxsZWQgb24gaW5vZGUgJWx1XG4iLCBpbm9kZS0+aV9pbm8pOworCisJc3RhdHVzID0gMDsKKwlpZiAoZnApIHsKKwkJbGV2ZWwgPSBmcC0+ZnBfbG9ja19sZXZlbDsKKwkJaWYgKGxldmVsICE9IExLTV9JVk1PREUpCisJCQl1c2VyX2RsbV9jbHVzdGVyX3VubG9jaygmaXAtPmlwX2xvY2tyZXMsIGxldmVsKTsKKworCQlrZnJlZShmcCk7CisJCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBXZSBkbyAtPnNldGF0dHIoKSBqdXN0IHRvIG92ZXJyaWRlIHNpemUgY2hhbmdlcy4gIE91ciBzaXplIGlzIHRoZSBzaXplCisgKiBvZiB0aGUgTFZCIGFuZCBub3RoaW5nIGVsc2UuCisgKi8KK3N0YXRpYyBpbnQgZGxtZnNfZmlsZV9zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKQoreworCWludCBlcnJvcjsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCisJYXR0ci0+aWFfdmFsaWQgJj0gfkFUVFJfU0laRTsKKwllcnJvciA9IGlub2RlX2NoYW5nZV9vayhpbm9kZSwgYXR0cik7CisJaWYgKCFlcnJvcikKKwkJZXJyb3IgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCBhdHRyKTsKKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBkbG1mc19maWxlX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJaW50IGV2ZW50ID0gMDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqaXAgPSBETE1GU19JKGlub2RlKTsKKworCXBvbGxfd2FpdChmaWxlLCAmaXAtPmlwX2xvY2tyZXMubF9ldmVudCwgd2FpdCk7CisKKwlzcGluX2xvY2soJmlwLT5pcF9sb2NrcmVzLmxfbG9jayk7CisJaWYgKGlwLT5pcF9sb2NrcmVzLmxfZmxhZ3MgJiBVU0VSX0xPQ0tfQkxPQ0tFRCkKKwkJZXZlbnQgPSBQT0xMSU4gfCBQT0xMUkROT1JNOworCXNwaW5fdW5sb2NrKCZpcC0+aXBfbG9ja3Jlcy5sX2xvY2spOworCisJcmV0dXJuIGV2ZW50OworfQorCitzdGF0aWMgc3NpemVfdCBkbG1mc19maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsCisJCQkgICAgICAgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCSAgICAgICBzaXplX3QgY291bnQsCisJCQkgICAgICAgbG9mZl90ICpwcG9zKQoreworCWludCBieXRlc19sZWZ0OworCXNzaXplX3QgcmVhZGxlbiwgZ290OworCWNoYXIgKmx2Yl9idWY7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisKKwltbG9nKDAsICJpbm9kZSAlbHUsIGNvdW50ID0gJXp1LCAqcHBvcyA9ICVsbHVcbiIsCisJCWlub2RlLT5pX2lubywgY291bnQsICpwcG9zKTsKKworCWlmICgqcHBvcyA+PSBpX3NpemVfcmVhZChpbm9kZSkpCisJCXJldHVybiAwOworCisJaWYgKCFjb3VudCkKKwkJcmV0dXJuIDA7CisKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZiwgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIGRvbid0IHJlYWQgcGFzdCB0aGUgbHZiICovCisJaWYgKChjb3VudCArICpwcG9zKSA+IGlfc2l6ZV9yZWFkKGlub2RlKSkKKwkJcmVhZGxlbiA9IGlfc2l6ZV9yZWFkKGlub2RlKSAtICpwcG9zOworCWVsc2UKKwkJcmVhZGxlbiA9IGNvdW50IC0gKnBwb3M7CisKKwlsdmJfYnVmID0ga21hbGxvYyhyZWFkbGVuLCBHRlBfTk9GUyk7CisJaWYgKCFsdmJfYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWdvdCA9IHVzZXJfZGxtX3JlYWRfbHZiKGlub2RlLCBsdmJfYnVmLCByZWFkbGVuKTsKKwlpZiAoZ290KSB7CisJCUJVR19PTihnb3QgIT0gcmVhZGxlbik7CisJCWJ5dGVzX2xlZnQgPSBfX2NvcHlfdG9fdXNlcihidWYsIGx2Yl9idWYsIHJlYWRsZW4pOworCQlyZWFkbGVuIC09IGJ5dGVzX2xlZnQ7CisJfSBlbHNlCisJCXJlYWRsZW4gPSAwOworCisJa2ZyZWUobHZiX2J1Zik7CisKKwkqcHBvcyA9ICpwcG9zICsgcmVhZGxlbjsKKworCW1sb2coMCwgInJlYWQgJXpkIGJ5dGVzXG4iLCByZWFkbGVuKTsKKwlyZXR1cm4gcmVhZGxlbjsKK30KKworc3RhdGljIHNzaXplX3QgZGxtZnNfZmlsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCQljb25zdCBjaGFyIF9fdXNlciAqYnVmLAorCQkJCXNpemVfdCBjb3VudCwKKwkJCQlsb2ZmX3QgKnBwb3MpCit7CisJaW50IGJ5dGVzX2xlZnQ7CisJc3NpemVfdCB3cml0ZWxlbjsKKwljaGFyICpsdmJfYnVmOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOworCisJbWxvZygwLCAiaW5vZGUgJWx1LCBjb3VudCA9ICV6dSwgKnBwb3MgPSAlbGx1XG4iLAorCQlpbm9kZS0+aV9pbm8sIGNvdW50LCAqcHBvcyk7CisKKwlpZiAoKnBwb3MgPj0gaV9zaXplX3JlYWQoaW5vZGUpKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmICghY291bnQpCisJCXJldHVybiAwOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZiwgY291bnQpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCS8qIGRvbid0IHdyaXRlIHBhc3QgdGhlIGx2YiAqLworCWlmICgoY291bnQgKyAqcHBvcykgPiBpX3NpemVfcmVhZChpbm9kZSkpCisJCXdyaXRlbGVuID0gaV9zaXplX3JlYWQoaW5vZGUpIC0gKnBwb3M7CisJZWxzZQorCQl3cml0ZWxlbiA9IGNvdW50IC0gKnBwb3M7CisKKwlsdmJfYnVmID0ga21hbGxvYyh3cml0ZWxlbiwgR0ZQX05PRlMpOworCWlmICghbHZiX2J1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlieXRlc19sZWZ0ID0gY29weV9mcm9tX3VzZXIobHZiX2J1ZiwgYnVmLCB3cml0ZWxlbik7CisJd3JpdGVsZW4gLT0gYnl0ZXNfbGVmdDsKKwlpZiAod3JpdGVsZW4pCisJCXVzZXJfZGxtX3dyaXRlX2x2Yihpbm9kZSwgbHZiX2J1Ziwgd3JpdGVsZW4pOworCisJa2ZyZWUobHZiX2J1Zik7CisKKwkqcHBvcyA9ICpwcG9zICsgd3JpdGVsZW47CisJbWxvZygwLCAid3JvdGUgJXpkIGJ5dGVzXG4iLCB3cml0ZWxlbik7CisJcmV0dXJuIHdyaXRlbGVuOworfQorCitzdGF0aWMgdm9pZCBkbG1mc19pbml0X29uY2Uodm9pZCAqZm9vKQoreworCXN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlICppcCA9CisJCShzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqKSBmb287CisKKwlpcC0+aXBfY29ubiA9IE5VTEw7CisJaXAtPmlwX3BhcmVudCA9IE5VTEw7CisKKwlpbm9kZV9pbml0X29uY2UoJmlwLT5pcF92ZnNfaW5vZGUpOworfQorCitzdGF0aWMgc3RydWN0IGlub2RlICpkbG1mc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlICppcDsKKworCWlwID0ga21lbV9jYWNoZV9hbGxvYyhkbG1mc19pbm9kZV9jYWNoZSwgR0ZQX05PRlMpOworCWlmICghaXApCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuICZpcC0+aXBfdmZzX2lub2RlOworfQorCitzdGF0aWMgdm9pZCBkbG1mc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJa21lbV9jYWNoZV9mcmVlKGRsbWZzX2lub2RlX2NhY2hlLCBETE1GU19JKGlub2RlKSk7Cit9CisKK3N0YXRpYyB2b2lkIGRsbWZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqaXA7CisKKwlpZiAoIWlub2RlKQorCQlyZXR1cm47CisKKwltbG9nKDAsICJpbm9kZSAlbHVcbiIsIGlub2RlLT5pX2lubyk7CisKKwlpcCA9IERMTUZTX0koaW5vZGUpOworCisJaWYgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkpIHsKKwkJc3RhdHVzID0gdXNlcl9kbG1fZGVzdHJveV9sb2NrKCZpcC0+aXBfbG9ja3Jlcyk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlpcHV0KGlwLT5pcF9wYXJlbnQpOworCQlnb3RvIGNsZWFyX2ZpZWxkczsKKwl9CisKKwltbG9nKDAsICJ3ZSdyZSBhIGRpcmVjdG9yeSwgaXAtPmlwX2Nvbm4gPSAweCVwXG4iLCBpcC0+aXBfY29ubik7CisJLyogd2UgbXVzdCBiZSBhIGRpcmVjdG9yeS4gSWYgcmVxdWlyZWQsIGxldHMgdW5yZWdpc3RlciB0aGUKKwkgKiBkbG0gY29udGV4dCBub3cuICovCisJaWYgKGlwLT5pcF9jb25uKQorCQl1c2VyX2RsbV91bnJlZ2lzdGVyKGlwLT5pcF9jb25uKTsKK2NsZWFyX2ZpZWxkczoKKwlpcC0+aXBfcGFyZW50ID0gTlVMTDsKKwlpcC0+aXBfY29ubiA9IE5VTEw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyBkbG1mc19iYWNraW5nX2Rldl9pbmZvID0geworCS5uYW1lCQk9ICJvY2ZzMi1kbG1mcyIsCisJLnJhX3BhZ2VzCT0gMCwJLyogTm8gcmVhZGFoZWFkICovCisJLmNhcGFiaWxpdGllcwk9IEJESV9DQVBfTk9fQUNDVF9BTkRfV1JJVEVCQUNLLAorfTsKKworc3RhdGljIHN0cnVjdCBpbm9kZSAqZGxtZnNfZ2V0X3Jvb3RfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbmV3X2lub2RlKHNiKTsKKwlpbnQgbW9kZSA9IFNfSUZESVIgfCAwNzU1OworCXN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlICppcDsKKworCWlmIChpbm9kZSkgeworCQlpcCA9IERMTUZTX0koaW5vZGUpOworCisJCWlub2RlLT5pX21vZGUgPSBtb2RlOworCQlpbm9kZS0+aV91aWQgPSBjdXJyZW50X2ZzdWlkKCk7CisJCWlub2RlLT5pX2dpZCA9IGN1cnJlbnRfZnNnaWQoKTsKKwkJaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9ICZkbG1mc19iYWNraW5nX2Rldl9pbmZvOworCQlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisJCWluY19ubGluayhpbm9kZSk7CisKKwkJaW5vZGUtPmlfZm9wID0gJnNpbXBsZV9kaXJfb3BlcmF0aW9uczsKKwkJaW5vZGUtPmlfb3AgPSAmZGxtZnNfcm9vdF9pbm9kZV9vcGVyYXRpb25zOworCX0KKworCXJldHVybiBpbm9kZTsKK30KKworc3RhdGljIHN0cnVjdCBpbm9kZSAqZGxtZnNfZ2V0X2lub2RlKHN0cnVjdCBpbm9kZSAqcGFyZW50LAorCQkJCSAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCSAgICAgaW50IG1vZGUpCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHBhcmVudC0+aV9zYjsKKwlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IG5ld19pbm9kZShzYik7CisJc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUgKmlwOworCisJaWYgKCFpbm9kZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlpbm9kZS0+aV9tb2RlID0gbW9kZTsKKwlpbm9kZS0+aV91aWQgPSBjdXJyZW50X2ZzdWlkKCk7CisJaW5vZGUtPmlfZ2lkID0gY3VycmVudF9mc2dpZCgpOworCWlub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPSAmZGxtZnNfYmFja2luZ19kZXZfaW5mbzsKKwlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CisKKwlpcCA9IERMTUZTX0koaW5vZGUpOworCWlwLT5pcF9jb25uID0gRExNRlNfSShwYXJlbnQpLT5pcF9jb25uOworCisJc3dpdGNoIChtb2RlICYgU19JRk1UKSB7CisJZGVmYXVsdDoKKwkJLyogZm9yIG5vdyB3ZSBkb24ndCBzdXBwb3J0IGFueXRoaW5nIG90aGVyIHRoYW4KKwkJICogZGlyZWN0b3JpZXMgYW5kIHJlZ3VsYXIgZmlsZXMuICovCisJCUJVRygpOworCQlicmVhazsKKwljYXNlIFNfSUZSRUc6CisJCWlub2RlLT5pX29wID0gJmRsbWZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKKwkJaW5vZGUtPmlfZm9wID0gJmRsbWZzX2ZpbGVfb3BlcmF0aW9uczsKKworCQlpX3NpemVfd3JpdGUoaW5vZGUsICBETE1fTFZCX0xFTik7CisKKwkJdXNlcl9kbG1fbG9ja19yZXNfaW5pdCgmaXAtPmlwX2xvY2tyZXMsIGRlbnRyeSk7CisKKwkJLyogcmVsZWFzZWQgYXQgY2xlYXJfaW5vZGUgdGltZSwgdGhpcyBpbnN1cmVzIHRoYXQgd2UKKwkJICogZ2V0IHRvIGRyb3AgdGhlIGRsbSByZWZlcmVuY2Ugb24gZWFjaCBsb2NrICpiZWZvcmUqCisJCSAqIHdlIGNhbGwgdGhlIHVucmVnaXN0ZXIgY29kZSBmb3IgcmVsZWFzaW5nIHBhcmVudAorCQkgKiBkaXJlY3Rvcmllcy4gKi8KKwkJaXAtPmlwX3BhcmVudCA9IGlncmFiKHBhcmVudCk7CisJCUJVR19PTighaXAtPmlwX3BhcmVudCk7CisJCWJyZWFrOworCWNhc2UgU19JRkRJUjoKKwkJaW5vZGUtPmlfb3AgPSAmZGxtZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CisJCWlub2RlLT5pX2ZvcCA9ICZzaW1wbGVfZGlyX29wZXJhdGlvbnM7CisKKwkJLyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09CisJCSAqIDIgKGZvciAiLiIgZW50cnkpICovCisJCWluY19ubGluayhpbm9kZSk7CisJCWJyZWFrOworCX0KKworCWlmIChwYXJlbnQtPmlfbW9kZSAmIFNfSVNHSUQpIHsKKwkJaW5vZGUtPmlfZ2lkID0gcGFyZW50LT5pX2dpZDsKKwkJaWYgKFNfSVNESVIobW9kZSkpCisJCQlpbm9kZS0+aV9tb2RlIHw9IFNfSVNHSUQ7CisJfQorCisJcmV0dXJuIGlub2RlOworfQorCisvKgorICogRmlsZSBjcmVhdGlvbi4gQWxsb2NhdGUgYW4gaW5vZGUsIGFuZCB3ZSdyZSBkb25lLi4KKyAqLworLyogU01QLXNhZmUgKi8KK3N0YXRpYyBpbnQgZGxtZnNfbWtkaXIoc3RydWN0IGlub2RlICogZGlyLAorCQkgICAgICAgc3RydWN0IGRlbnRyeSAqIGRlbnRyeSwKKwkJICAgICAgIGludCBtb2RlKQoreworCWludCBzdGF0dXM7CisJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CisJc3RydWN0IHFzdHIgKmRvbWFpbiA9ICZkZW50cnktPmRfbmFtZTsKKwlzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqaXA7CisJc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubjsKKworCW1sb2coMCwgIm1rZGlyICUuKnNcbiIsIGRvbWFpbi0+bGVuLCBkb21haW4tPm5hbWUpOworCisJLyogdmVyaWZ5IHRoYXQgd2UgaGF2ZSBhIHByb3BlciBkb21haW4gKi8KKwlpZiAoZG9tYWluLT5sZW4gPj0gR1JPVVBfTkFNRV9NQVgpIHsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJbWxvZyhNTF9FUlJPUiwgImludmFsaWQgZG9tYWluIG5hbWUgZm9yIGRpcmVjdG9yeS5cbiIpOworCQlnb3RvIGJhaWw7CisJfQorCisJaW5vZGUgPSBkbG1mc19nZXRfaW5vZGUoZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGRElSKTsKKwlpZiAoIWlub2RlKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCW1sb2dfZXJybm8oc3RhdHVzKTsKKwkJZ290byBiYWlsOworCX0KKworCWlwID0gRExNRlNfSShpbm9kZSk7CisKKwljb25uID0gdXNlcl9kbG1fcmVnaXN0ZXIoZG9tYWluKTsKKwlpZiAoSVNfRVJSKGNvbm4pKSB7CisJCXN0YXR1cyA9IFBUUl9FUlIoY29ubik7CisJCW1sb2coTUxfRVJST1IsICJFcnJvciAlZCBjb3VsZCBub3QgcmVnaXN0ZXIgZG9tYWluIFwiJS4qc1wiXG4iLAorCQkgICAgIHN0YXR1cywgZG9tYWluLT5sZW4sIGRvbWFpbi0+bmFtZSk7CisJCWdvdG8gYmFpbDsKKwl9CisJaXAtPmlwX2Nvbm4gPSBjb25uOworCisJaW5jX25saW5rKGRpcik7CisJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwlkZ2V0KGRlbnRyeSk7CS8qIEV4dHJhIGNvdW50IC0gcGluIHRoZSBkZW50cnkgaW4gY29yZSAqLworCisJc3RhdHVzID0gMDsKK2JhaWw6CisJaWYgKHN0YXR1cyA8IDApCisJCWlwdXQoaW5vZGUpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgZGxtZnNfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJaW50IG1vZGUsCisJCQlzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlpbnQgc3RhdHVzID0gMDsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlOworCXN0cnVjdCBxc3RyICpuYW1lID0gJmRlbnRyeS0+ZF9uYW1lOworCisJbWxvZygwLCAiY3JlYXRlICUuKnNcbiIsIG5hbWUtPmxlbiwgbmFtZS0+bmFtZSk7CisKKwkvKiB2ZXJpZnkgbmFtZSBpcyB2YWxpZCBhbmQgZG9lc24ndCBjb250YWluIGFueSBkbG0gcmVzZXJ2ZWQKKwkgKiBjaGFyYWN0ZXJzICovCisJaWYgKG5hbWUtPmxlbiA+PSBVU0VSX0RMTV9MT0NLX0lEX01BWF9MRU4gfHwKKwkgICAgbmFtZS0+bmFtZVswXSA9PSAnJCcpIHsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJbWxvZyhNTF9FUlJPUiwgImludmFsaWQgbG9jayBuYW1lLCAlLipzXG4iLCBuYW1lLT5sZW4sCisJCSAgICAgbmFtZS0+bmFtZSk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlpbm9kZSA9IGRsbWZzX2dldF9pbm9kZShkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZSRUcpOworCWlmICghaW5vZGUpIHsKKwkJc3RhdHVzID0gLUVOT01FTTsKKwkJbWxvZ19lcnJubyhzdGF0dXMpOworCQlnb3RvIGJhaWw7CisJfQorCisJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKKwlkZ2V0KGRlbnRyeSk7CS8qIEV4dHJhIGNvdW50IC0gcGluIHRoZSBkZW50cnkgaW4gY29yZSAqLworYmFpbDoKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IGRsbWZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwKKwkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisKKwltbG9nKDAsICJ1bmxpbmsgaW5vZGUgJWx1XG4iLCBpbm9kZS0+aV9pbm8pOworCisJLyogaWYgdGhlcmUgYXJlIG5vIGN1cnJlbnQgaG9sZGVycywgb3Igbm9uZSB0aGF0IGFyZSB3YWl0aW5nCisJICogdG8gYWNxdWlyZSBhIGxvY2ssIHRoaXMgYmFzaWNhbGx5IGRlc3Ryb3lzIG91ciBsb2NrcmVzLiAqLworCXN0YXR1cyA9IHVzZXJfZGxtX2Rlc3Ryb3lfbG9jaygmRExNRlNfSShpbm9kZSktPmlwX2xvY2tyZXMpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCW1sb2coTUxfRVJST1IsICJ1bmxpbmsgJS4qcywgZXJyb3IgJWQgZnJvbSBkZXN0cm95XG4iLAorCQkgICAgIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSwgc3RhdHVzKTsKKwkJZ290byBiYWlsOworCX0KKwlzdGF0dXMgPSBzaW1wbGVfdW5saW5rKGRpciwgZGVudHJ5KTsKK2JhaWw6CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBkbG1mc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiLAorCQkJICAgIHZvaWQgKiBkYXRhLAorCQkJICAgIGludCBzaWxlbnQpCit7CisJc3RydWN0IGlub2RlICogaW5vZGU7CisJc3RydWN0IGRlbnRyeSAqIHJvb3Q7CisKKwlzYi0+c19tYXhieXRlcyA9IE1BWF9MRlNfRklMRVNJWkU7CisJc2ItPnNfYmxvY2tzaXplID0gUEFHRV9DQUNIRV9TSVpFOworCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gUEFHRV9DQUNIRV9TSElGVDsKKwlzYi0+c19tYWdpYyA9IERMTUZTX01BR0lDOworCXNiLT5zX29wID0gJmRsbWZzX29wczsKKwlpbm9kZSA9IGRsbWZzX2dldF9yb290X2lub2RlKHNiKTsKKwlpZiAoIWlub2RlKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJvb3QgPSBkX2FsbG9jX3Jvb3QoaW5vZGUpOworCWlmICghcm9vdCkgeworCQlpcHV0KGlub2RlKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXNiLT5zX3Jvb3QgPSByb290OworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkbG1mc19maWxlX29wZXJhdGlvbnMgPSB7CisJLm9wZW4JCT0gZGxtZnNfZmlsZV9vcGVuLAorCS5yZWxlYXNlCT0gZGxtZnNfZmlsZV9yZWxlYXNlLAorCS5wb2xsCQk9IGRsbWZzX2ZpbGVfcG9sbCwKKwkucmVhZAkJPSBkbG1mc19maWxlX3JlYWQsCisJLndyaXRlCQk9IGRsbWZzX2ZpbGVfd3JpdGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGxtZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7CisJLmNyZWF0ZQkJPSBkbG1mc19jcmVhdGUsCisJLmxvb2t1cAkJPSBzaW1wbGVfbG9va3VwLAorCS51bmxpbmsJCT0gZGxtZnNfdW5saW5rLAorfTsKKworLyogdGhpcyB3YXkgd2UgY2FuIHJlc3RyaWN0IG1rZGlyIHRvIG9ubHkgdGhlIHRvcGxldmVsIG9mIHRoZSBmcy4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBkbG1mc19yb290X2lub2RlX29wZXJhdGlvbnMgPSB7CisJLmxvb2t1cAkJPSBzaW1wbGVfbG9va3VwLAorCS5ta2RpcgkJPSBkbG1mc19ta2RpciwKKwkucm1kaXIJCT0gc2ltcGxlX3JtZGlyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGRsbWZzX29wcyA9IHsKKwkuc3RhdGZzCQk9IHNpbXBsZV9zdGF0ZnMsCisJLmFsbG9jX2lub2RlCT0gZGxtZnNfYWxsb2NfaW5vZGUsCisJLmRlc3Ryb3lfaW5vZGUJPSBkbG1mc19kZXN0cm95X2lub2RlLAorCS5jbGVhcl9pbm9kZQk9IGRsbWZzX2NsZWFyX2lub2RlLAorCS5kcm9wX2lub2RlCT0gZ2VuZXJpY19kZWxldGVfaW5vZGUsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgZGxtZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0geworCS5nZXRhdHRyCT0gc2ltcGxlX2dldGF0dHIsCisJLnNldGF0dHIJPSBkbG1mc19maWxlX3NldGF0dHIsCit9OworCitzdGF0aWMgaW50IGRsbWZzX2dldF9zYihzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqZnNfdHlwZSwKKwlpbnQgZmxhZ3MsIGNvbnN0IGNoYXIgKmRldl9uYW1lLCB2b2lkICpkYXRhLCBzdHJ1Y3QgdmZzbW91bnQgKm1udCkKK3sKKwlyZXR1cm4gZ2V0X3NiX25vZGV2KGZzX3R5cGUsIGZsYWdzLCBkYXRhLCBkbG1mc19maWxsX3N1cGVyLCBtbnQpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgZGxtZnNfZnNfdHlwZSA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm5hbWUJCT0gIm9jZnMyX2RsbWZzIiwKKwkuZ2V0X3NiCQk9IGRsbWZzX2dldF9zYiwKKwkua2lsbF9zYgk9IGtpbGxfbGl0dGVyX3N1cGVyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaW5pdF9kbG1mc19mcyh2b2lkKQoreworCWludCBzdGF0dXM7CisJaW50IGNsZWFudXBfaW5vZGUgPSAwLCBjbGVhbnVwX3dvcmtlciA9IDA7CisKKwlkbG1mc19wcmludF92ZXJzaW9uKCk7CisKKwlzdGF0dXMgPSBiZGlfaW5pdCgmZGxtZnNfYmFja2luZ19kZXZfaW5mbyk7CisJaWYgKHN0YXR1cykKKwkJcmV0dXJuIHN0YXR1czsKKworCWRsbWZzX2lub2RlX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImRsbWZzX2lub2RlX2NhY2hlIiwKKwkJCQlzaXplb2Yoc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUpLAorCQkJCTAsIChTTEFCX0hXQ0FDSEVfQUxJR058U0xBQl9SRUNMQUlNX0FDQ09VTlR8CisJCQkJCVNMQUJfTUVNX1NQUkVBRCksCisJCQkJZGxtZnNfaW5pdF9vbmNlKTsKKwlpZiAoIWRsbWZzX2lub2RlX2NhY2hlKSB7CisJCXN0YXR1cyA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDsKKwl9CisJY2xlYW51cF9pbm9kZSA9IDE7CisKKwl1c2VyX2RsbV93b3JrZXIgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgidXNlcl9kbG0iKTsKKwlpZiAoIXVzZXJfZGxtX3dvcmtlcikgeworCQlzdGF0dXMgPSAtRU5PTUVNOworCQlnb3RvIGJhaWw7CisJfQorCWNsZWFudXBfd29ya2VyID0gMTsKKworCXVzZXJfZGxtX3NldF9sb2NraW5nX3Byb3RvY29sKCk7CisJc3RhdHVzID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmZGxtZnNfZnNfdHlwZSk7CitiYWlsOgorCWlmIChzdGF0dXMpIHsKKwkJaWYgKGNsZWFudXBfaW5vZGUpCisJCQlrbWVtX2NhY2hlX2Rlc3Ryb3koZGxtZnNfaW5vZGVfY2FjaGUpOworCQlpZiAoY2xlYW51cF93b3JrZXIpCisJCQlkZXN0cm95X3dvcmtxdWV1ZSh1c2VyX2RsbV93b3JrZXIpOworCQliZGlfZGVzdHJveSgmZGxtZnNfYmFja2luZ19kZXZfaW5mbyk7CisJfSBlbHNlCisJCXByaW50aygiT0NGUzIgVXNlciBETE0ga2VybmVsIGludGVyZmFjZSBsb2FkZWRcbiIpOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBleGl0X2RsbWZzX2ZzKHZvaWQpCit7CisJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZkbG1mc19mc190eXBlKTsKKworCWZsdXNoX3dvcmtxdWV1ZSh1c2VyX2RsbV93b3JrZXIpOworCWRlc3Ryb3lfd29ya3F1ZXVlKHVzZXJfZGxtX3dvcmtlcik7CisKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koZGxtZnNfaW5vZGVfY2FjaGUpOworCisJYmRpX2Rlc3Ryb3koJmRsbWZzX2JhY2tpbmdfZGV2X2luZm8pOworfQorCitNT0RVTEVfQVVUSE9SKCJPcmFjbGUiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQoaW5pdF9kbG1mc19mcykKK21vZHVsZV9leGl0KGV4aXRfZGxtZnNfZnMpCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtZnN2ZXIuYyBiL2ZzL29jZnMyL2RsbWZzL2RsbWZzdmVyLmMKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGZzL29jZnMyL2RsbS9kbG1mc3Zlci5jCnJlbmFtZSB0byBmcy9vY2ZzMi9kbG1mcy9kbG1mc3Zlci5jCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG0vZGxtZnN2ZXIuaCBiL2ZzL29jZnMyL2RsbWZzL2RsbWZzdmVyLmgKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIGZzL29jZnMyL2RsbS9kbG1mc3Zlci5oCnJlbmFtZSB0byBmcy9vY2ZzMi9kbG1mcy9kbG1mc3Zlci5oCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG1mcy91c2VyZGxtLmMgYi9mcy9vY2ZzMi9kbG1mcy91c2VyZGxtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ5OWUzZgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL29jZnMyL2RsbWZzL3VzZXJkbG0uYwpAQCAtMCwwICsxLDY4OCBAQAorLyogLSotIG1vZGU6IGM7IGMtYmFzaWMtb2Zmc2V0OiA4OyAtKi0KKyAqIHZpbTogbm9leHBhbmR0YWIgc3c9OCB0cz04IHN0cz0wOgorICoKKyAqIHVzZXJkbG0uYworICoKKyAqIENvZGUgd2hpY2ggaW1wbGVtZW50cyB0aGUga2VybmVsIHNpZGUgb2YgYSBtaW5pbWFsIHVzZXJzcGFjZQorICogaW50ZXJmYWNlIHRvIG91ciBETE0uCisgKgorICogTWFueSBvZiB0aGUgZnVuY3Rpb25zIGhlcmUgYXJlIHBhcmVkIGRvd24gdmVyc2lvbnMgb2YgZGxtZ2x1ZS5jCisgKiBmdW5jdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0IE9yYWNsZS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAwMjExMTAtMTMwNywgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgorCisjaW5jbHVkZSAib2NmczJfbG9ja2luZ3Zlci5oIgorI2luY2x1ZGUgInN0YWNrZ2x1ZS5oIgorI2luY2x1ZGUgInVzZXJkbG0uaCIKKworI2RlZmluZSBNTE9HX01BU0tfUFJFRklYIE1MX0RMTUZTCisjaW5jbHVkZSAiY2x1c3Rlci9tYXNrbG9nLmgiCisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqdXNlcl9sa3NiX3RvX2xvY2tfcmVzKHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGxrc2IsIHN0cnVjdCB1c2VyX2xvY2tfcmVzLCBsX2xrc2IpOworfQorCitzdGF0aWMgaW5saW5lIGludCB1c2VyX2NoZWNrX3dhaXRfZmxhZyhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcywKKwkJCQkgICAgICAgaW50IGZsYWcpCit7CisJaW50IHJldDsKKworCXNwaW5fbG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKwlyZXQgPSBsb2NrcmVzLT5sX2ZsYWdzICYgZmxhZzsKKwlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2VyX3dhaXRfb25fYnVzeV9sb2NrKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzKQorCit7CisJd2FpdF9ldmVudChsb2NrcmVzLT5sX2V2ZW50LAorCQkgICAhdXNlcl9jaGVja193YWl0X2ZsYWcobG9ja3JlcywgVVNFUl9MT0NLX0JVU1kpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVzZXJfd2FpdF9vbl9ibG9ja2VkX2xvY2soc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMpCisKK3sKKwl3YWl0X2V2ZW50KGxvY2tyZXMtPmxfZXZlbnQsCisJCSAgICF1c2VyX2NoZWNrX3dhaXRfZmxhZyhsb2NrcmVzLCBVU0VSX0xPQ0tfQkxPQ0tFRCkpOworfQorCisvKiBJIGhlYXJ0IGNvbnRhaW5lcl9vZi4uLiAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICoKK2NsdXN0ZXJfY29ubmVjdGlvbl9mcm9tX3VzZXJfbG9ja3JlcyhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcykKK3sKKwlzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqaXA7CisKKwlpcCA9IGNvbnRhaW5lcl9vZihsb2NrcmVzLAorCQkJICBzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSwKKwkJCSAgaXBfbG9ja3Jlcyk7CisJcmV0dXJuIGlwLT5pcF9jb25uOworfQorCitzdGF0aWMgc3RydWN0IGlub2RlICoKK3VzZXJfZGxtX2lub2RlX2Zyb21fdXNlcl9sb2NrcmVzKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzKQoreworCXN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlICppcDsKKworCWlwID0gY29udGFpbmVyX29mKGxvY2tyZXMsCisJCQkgIHN0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlLAorCQkJICBpcF9sb2NrcmVzKTsKKwlyZXR1cm4gJmlwLT5pcF92ZnNfaW5vZGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2VyX3JlY292ZXJfZnJvbV9kbG1fZXJyb3Ioc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMpCit7CisJc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCWxvY2tyZXMtPmxfZmxhZ3MgJj0gflVTRVJfTE9DS19CVVNZOworCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworfQorCisjZGVmaW5lIHVzZXJfbG9nX2RsbV9lcnJvcihfZnVuYywgX3N0YXQsIF9sb2NrcmVzKSBkbyB7CQkJXAorCW1sb2coTUxfRVJST1IsICJEbG0gZXJyb3IgJWQgd2hpbGUgY2FsbGluZyAlcyBvbiAiCQlcCisJCSJyZXNvdXJjZSAlLipzXG4iLCBfc3RhdCwgX2Z1bmMsCQkJXAorCQlfbG9ja3Jlcy0+bF9uYW1lbGVuLCBfbG9ja3Jlcy0+bF9uYW1lKTsgCQlcCit9IHdoaWxlICgwKQorCisvKiBXQVJOSU5HOiBUaGlzIGZ1bmN0aW9uIGxpdmVzIGluIGEgd29ybGQgd2hlcmUgdGhlIG9ubHkgdGhyZWUgbG9jaworICogbGV2ZWxzIGFyZSBFWCwgUFIsIGFuZCBOTC4gSXQgKndpbGwqIGhhdmUgdG8gYmUgYWRqdXN0ZWQgd2hlbiBtb3JlCisgKiBsb2NrIHR5cGVzIGFyZSBhZGRlZC4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IHVzZXJfaGlnaGVzdF9jb21wYXRfbG9ja19sZXZlbChpbnQgbGV2ZWwpCit7CisJaW50IG5ld19sZXZlbCA9IERMTV9MT0NLX0VYOworCisJaWYgKGxldmVsID09IERMTV9MT0NLX0VYKQorCQluZXdfbGV2ZWwgPSBETE1fTE9DS19OTDsKKwllbHNlIGlmIChsZXZlbCA9PSBETE1fTE9DS19QUikKKwkJbmV3X2xldmVsID0gRExNX0xPQ0tfUFI7CisJcmV0dXJuIG5ld19sZXZlbDsKK30KKworc3RhdGljIHZvaWQgdXNlcl9hc3Qoc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiKQoreworCXN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzID0gdXNlcl9sa3NiX3RvX2xvY2tfcmVzKGxrc2IpOworCWludCBzdGF0dXM7CisKKwltbG9nKE1MX0JBU1RTLCAiQVNUIGZpcmVkIGZvciBsb2NrcmVzICUuKnMsIGxldmVsICVkID0+ICVkXG4iLAorCSAgICAgbG9ja3Jlcy0+bF9uYW1lbGVuLCBsb2NrcmVzLT5sX25hbWUsIGxvY2tyZXMtPmxfbGV2ZWwsCisJICAgICBsb2NrcmVzLT5sX3JlcXVlc3RlZCk7CisKKwlzcGluX2xvY2soJmxvY2tyZXMtPmxfbG9jayk7CisKKwlzdGF0dXMgPSBvY2ZzMl9kbG1fbG9ja19zdGF0dXMoJmxvY2tyZXMtPmxfbGtzYik7CisJaWYgKHN0YXR1cykgeworCQltbG9nKE1MX0VSUk9SLCAibGtzYiBzdGF0dXMgdmFsdWUgb2YgJXUgb24gbG9ja3JlcyAlLipzXG4iLAorCQkgICAgIHN0YXR1cywgbG9ja3Jlcy0+bF9uYW1lbGVuLCBsb2NrcmVzLT5sX25hbWUpOworCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKwkJcmV0dXJuOworCX0KKworCW1sb2dfYnVnX29uX21zZyhsb2NrcmVzLT5sX3JlcXVlc3RlZCA9PSBETE1fTE9DS19JViwKKwkJCSJMb2NrcmVzICUuKnMsIHJlcXVlc3RlZCBpdm1vZGUuIGZsYWdzIDB4JXhcbiIsCisJCQlsb2NrcmVzLT5sX25hbWVsZW4sIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9mbGFncyk7CisKKwkvKiB3ZSdyZSBkb3duY29udmVydGluZy4gKi8KKwlpZiAobG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPCBsb2NrcmVzLT5sX2xldmVsKSB7CisJCWlmIChsb2NrcmVzLT5sX3JlcXVlc3RlZCA8PQorCQkgICAgdXNlcl9oaWdoZXN0X2NvbXBhdF9sb2NrX2xldmVsKGxvY2tyZXMtPmxfYmxvY2tpbmcpKSB7CisJCQlsb2NrcmVzLT5sX2Jsb2NraW5nID0gRExNX0xPQ0tfTkw7CisJCQlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfQkxPQ0tFRDsKKwkJfQorCX0KKworCWxvY2tyZXMtPmxfbGV2ZWwgPSBsb2NrcmVzLT5sX3JlcXVlc3RlZDsKKwlsb2NrcmVzLT5sX3JlcXVlc3RlZCA9IERMTV9MT0NLX0lWOworCWxvY2tyZXMtPmxfZmxhZ3MgfD0gVVNFUl9MT0NLX0FUVEFDSEVEOworCWxvY2tyZXMtPmxfZmxhZ3MgJj0gflVTRVJfTE9DS19CVVNZOworCisJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisKKwl3YWtlX3VwKCZsb2NrcmVzLT5sX2V2ZW50KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVzZXJfZGxtX2dyYWJfaW5vZGVfcmVmKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJaW5vZGUgPSB1c2VyX2RsbV9pbm9kZV9mcm9tX3VzZXJfbG9ja3Jlcyhsb2NrcmVzKTsKKwlpZiAoIWlncmFiKGlub2RlKSkKKwkJQlVHKCk7Cit9CisKK3N0YXRpYyB2b2lkIHVzZXJfZGxtX3VuYmxvY2tfbG9jayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOworCitzdGF0aWMgdm9pZCBfX3VzZXJfZGxtX3F1ZXVlX2xvY2tyZXMoc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMpCit7CisJaWYgKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19RVUVVRUQpKSB7CisJCXVzZXJfZGxtX2dyYWJfaW5vZGVfcmVmKGxvY2tyZXMpOworCisJCUlOSVRfV09SSygmbG9ja3Jlcy0+bF93b3JrLCB1c2VyX2RsbV91bmJsb2NrX2xvY2spOworCisJCXF1ZXVlX3dvcmsodXNlcl9kbG1fd29ya2VyLCAmbG9ja3Jlcy0+bF93b3JrKTsKKwkJbG9ja3Jlcy0+bF9mbGFncyB8PSBVU0VSX0xPQ0tfUVVFVUVEOworCX0KK30KKworc3RhdGljIHZvaWQgX191c2VyX2RsbV9jb25kX3F1ZXVlX2xvY2tyZXMoc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMpCit7CisJaW50IHF1ZXVlID0gMDsKKworCWlmICghKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfQkxPQ0tFRCkpCisJCXJldHVybjsKKworCXN3aXRjaCAobG9ja3Jlcy0+bF9ibG9ja2luZykgeworCWNhc2UgRExNX0xPQ0tfRVg6CisJCWlmICghbG9ja3Jlcy0+bF9leF9ob2xkZXJzICYmICFsb2NrcmVzLT5sX3JvX2hvbGRlcnMpCisJCQlxdWV1ZSA9IDE7CisJCWJyZWFrOworCWNhc2UgRExNX0xPQ0tfUFI6CisJCWlmICghbG9ja3Jlcy0+bF9leF9ob2xkZXJzKQorCQkJcXVldWUgPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9CisKKwlpZiAocXVldWUpCisJCV9fdXNlcl9kbG1fcXVldWVfbG9ja3Jlcyhsb2NrcmVzKTsKK30KKworc3RhdGljIHZvaWQgdXNlcl9iYXN0KHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwgaW50IGxldmVsKQoreworCXN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzID0gdXNlcl9sa3NiX3RvX2xvY2tfcmVzKGxrc2IpOworCisJbWxvZyhNTF9CQVNUUywgIkJBU1QgZmlyZWQgZm9yIGxvY2tyZXMgJS4qcywgYmxvY2tpbmcgJWQsIGxldmVsICVkXG4iLAorCSAgICAgbG9ja3Jlcy0+bF9uYW1lbGVuLCBsb2NrcmVzLT5sX25hbWUsIGxldmVsLCBsb2NrcmVzLT5sX2xldmVsKTsKKworCXNwaW5fbG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKwlsb2NrcmVzLT5sX2ZsYWdzIHw9IFVTRVJfTE9DS19CTE9DS0VEOworCWlmIChsZXZlbCA+IGxvY2tyZXMtPmxfYmxvY2tpbmcpCisJCWxvY2tyZXMtPmxfYmxvY2tpbmcgPSBsZXZlbDsKKworCV9fdXNlcl9kbG1fcXVldWVfbG9ja3Jlcyhsb2NrcmVzKTsKKwlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKworCXdha2VfdXAoJmxvY2tyZXMtPmxfZXZlbnQpOworfQorCitzdGF0aWMgdm9pZCB1c2VyX3VubG9ja19hc3Qoc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiLCBpbnQgc3RhdHVzKQoreworCXN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzID0gdXNlcl9sa3NiX3RvX2xvY2tfcmVzKGxrc2IpOworCisJbWxvZyhNTF9CQVNUUywgIlVOTE9DSyBBU1QgZmlyZWQgZm9yIGxvY2tyZXMgJS4qcywgZmxhZ3MgMHgleFxuIiwKKwkgICAgIGxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2ZsYWdzKTsKKworCWlmIChzdGF0dXMpCisJCW1sb2coTUxfRVJST1IsICJkbG0gcmV0dXJucyBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CisKKwlzcGluX2xvY2soJmxvY2tyZXMtPmxfbG9jayk7CisJLyogVGhlIHRlYXJkb3duIGZsYWcgZ2V0cyBzZXQgZWFybHkgZHVyaW5nIHRoZSB1bmxvY2sgcHJvY2VzcywKKwkgKiBzbyB0ZXN0IHRoZSBjYW5jZWwgZmxhZyB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIGFzdCBpc24ndAorCSAqIGZvciBhIGNvbmN1cnJlbnQgY2FuY2VsLiAqLworCWlmIChsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0lOX1RFQVJET1dOCisJICAgICYmICEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19JTl9DQU5DRUwpKSB7CisJCWxvY2tyZXMtPmxfbGV2ZWwgPSBETE1fTE9DS19JVjsKKwl9IGVsc2UgaWYgKHN0YXR1cyA9PSBETE1fQ0FOQ0VMR1JBTlQpIHsKKwkJLyogV2UgdHJpZWQgdG8gY2FuY2VsIGEgY29udmVydCByZXF1ZXN0LCBidXQgaXQgd2FzCisJCSAqIGFscmVhZHkgZ3JhbnRlZC4gRG9uJ3QgY2xlYXIgdGhlIGJ1c3kgZmxhZyAtIHRoZQorCQkgKiBhc3Qgc2hvdWxkJ3ZlIGRvbmUgdGhpcyBhbHJlYWR5LiAqLworCQlCVUdfT04oIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0lOX0NBTkNFTCkpOworCQlsb2NrcmVzLT5sX2ZsYWdzICY9IH5VU0VSX0xPQ0tfSU5fQ0FOQ0VMOworCQlnb3RvIG91dF9ub2NsZWFyOworCX0gZWxzZSB7CisJCUJVR19PTighKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fQ0FOQ0VMKSk7CisJCS8qIENhbmNlbCBzdWNjZWVkZWQsIHdlIHdhbnQgdG8gcmUtcXVldWUgKi8KKwkJbG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPSBETE1fTE9DS19JVjsgLyogY2FuY2VsIGFuCisJCQkJCQkgICAgKiB1cGNvbnZlcnQKKwkJCQkJCSAgICAqIHJlcXVlc3QuICovCisJCWxvY2tyZXMtPmxfZmxhZ3MgJj0gflVTRVJfTE9DS19JTl9DQU5DRUw7CisJCS8qIHdlIHdhbnQgdGhlIHVuYmxvY2sgdGhyZWFkIHRvIGxvb2sgYXQgaXQgYWdhaW4KKwkJICogbm93LiAqLworCQlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CTE9DS0VEKQorCQkJX191c2VyX2RsbV9xdWV1ZV9sb2NrcmVzKGxvY2tyZXMpOworCX0KKworCWxvY2tyZXMtPmxfZmxhZ3MgJj0gflVTRVJfTE9DS19CVVNZOworb3V0X25vY2xlYXI6CisJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisKKwl3YWtlX3VwKCZsb2NrcmVzLT5sX2V2ZW50KTsKK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIHVzZXJkbG1mcyBsb2NraW5nIHByb3RvY29sIHZlcnNpb24uCisgKgorICogU2VlIGZzL29jZnMyL2RsbWdsdWUuYyBmb3IgbW9yZSBkZXRhaWxzIG9uIGxvY2tpbmcgdmVyc2lvbnMuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgb2NmczJfbG9ja2luZ19wcm90b2NvbCB1c2VyX2RsbV9scHJvdG8gPSB7CisJLmxwX21heF92ZXJzaW9uID0geworCQkucHZfbWFqb3IgPSBPQ0ZTMl9MT0NLSU5HX1BST1RPQ09MX01BSk9SLAorCQkucHZfbWlub3IgPSBPQ0ZTMl9MT0NLSU5HX1BST1RPQ09MX01JTk9SLAorCX0sCisJLmxwX2xvY2tfYXN0CQk9IHVzZXJfYXN0LAorCS5scF9ibG9ja2luZ19hc3QJPSB1c2VyX2Jhc3QsCisJLmxwX3VubG9ja19hc3QJCT0gdXNlcl91bmxvY2tfYXN0LAorfTsKKworc3RhdGljIGlubGluZSB2b2lkIHVzZXJfZGxtX2Ryb3BfaW5vZGVfcmVmKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJaW5vZGUgPSB1c2VyX2RsbV9pbm9kZV9mcm9tX3VzZXJfbG9ja3Jlcyhsb2NrcmVzKTsKKwlpcHV0KGlub2RlKTsKK30KKworc3RhdGljIHZvaWQgdXNlcl9kbG1fdW5ibG9ja19sb2NrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlpbnQgbmV3X2xldmVsLCBzdGF0dXM7CisJc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzZXJfbG9ja19yZXMsIGxfd29yayk7CisJc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiA9CisJCWNsdXN0ZXJfY29ubmVjdGlvbl9mcm9tX3VzZXJfbG9ja3Jlcyhsb2NrcmVzKTsKKworCW1sb2coMCwgImxvY2tyZXMgJS4qc1xuIiwgbG9ja3Jlcy0+bF9uYW1lbGVuLCBsb2NrcmVzLT5sX25hbWUpOworCisJc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCisJbWxvZ19idWdfb25fbXNnKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19RVUVVRUQpLAorCQkJIkxvY2tyZXMgJS4qcywgZmxhZ3MgMHgleFxuIiwKKwkJCWxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2ZsYWdzKTsKKworCS8qIG5vdGljZSB0aGF0IHdlIGRvbid0IGNsZWFyIFVTRVJfTE9DS19CTE9DS0VEIGhlcmUuIElmIGl0J3MKKwkgKiBzZXQsIHdlIHdhbnQgdXNlcl9hc3QgY2xlYXIgaXQuICovCisJbG9ja3Jlcy0+bF9mbGFncyAmPSB+VVNFUl9MT0NLX1FVRVVFRDsKKworCS8qIEl0J3MgdmFsaWQgdG8gZ2V0IGhlcmUgYW5kIG5vIGxvbmdlciBiZSBibG9ja2VkIC0gaWYgd2UgZ2V0CisJICogc2V2ZXJhbCBiYXN0cyBpbiBhIHJvdywgd2UgbWlnaHQgYmUgcXVldWVkIGJ5IHRoZSBmaXJzdAorCSAqIG9uZSwgdGhlIHVuYmxvY2sgdGhyZWFkIG1pZ2h0IHJ1biBhbmQgY2xlYXIgdGhlIHF1ZXVlZAorCSAqIGZsYWcsIGFuZCBmaW5hbGx5IHdlIG1pZ2h0IGdldCBhbm90aGVyIGJhc3Qgd2hpY2ggcmUtcXVldWVzCisJICogdXMgYmVmb3JlIG91ciBhc3QgZm9yIHRoZSBkb3duY29udmVydCBpcyBjYWxsZWQuICovCisJaWYgKCEobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CTE9DS0VEKSkgeworCQltbG9nKE1MX0JBU1RTLCAibG9ja3JlcyAlLipzIFVTRVJfTE9DS19CTE9DS0VEXG4iLAorCQkgICAgIGxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lKTsKKwkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisJCWdvdG8gZHJvcF9yZWY7CisJfQorCisJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfSU5fVEVBUkRPV04pIHsKKwkJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJS4qcyBVU0VSX0xPQ0tfSU5fVEVBUkRPV05cbiIsCisJCSAgICAgbG9ja3Jlcy0+bF9uYW1lbGVuLCBsb2NrcmVzLT5sX25hbWUpOworCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKwkJZ290byBkcm9wX3JlZjsKKwl9CisKKwlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CVVNZKSB7CisJCWlmIChsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0lOX0NBTkNFTCkgeworCQkJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJS4qcyBVU0VSX0xPQ0tfSU5fQ0FOQ0VMXG4iLAorCQkJICAgICBsb2NrcmVzLT5sX25hbWVsZW4sIGxvY2tyZXMtPmxfbmFtZSk7CisJCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKwkJCWdvdG8gZHJvcF9yZWY7CisJCX0KKworCQlsb2NrcmVzLT5sX2ZsYWdzIHw9IFVTRVJfTE9DS19JTl9DQU5DRUw7CisJCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCisJCXN0YXR1cyA9IG9jZnMyX2RsbV91bmxvY2soY29ubiwgJmxvY2tyZXMtPmxfbGtzYiwKKwkJCQkJICBETE1fTEtGX0NBTkNFTCk7CisJCWlmIChzdGF0dXMpCisJCQl1c2VyX2xvZ19kbG1fZXJyb3IoIm9jZnMyX2RsbV91bmxvY2siLCBzdGF0dXMsIGxvY2tyZXMpOworCQlnb3RvIGRyb3BfcmVmOworCX0KKworCS8qIElmIHRoZXJlIGFyZSBzdGlsbCBpbmNvbXBhdCBob2xkZXJzLCB3ZSBjYW4gZXhpdCBzYWZlbHkKKwkgKiB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IHJlLXF1ZXVlaW5nIHRoaXMgbG9jayBhcyB0aGF0IHdpbGwKKwkgKiBoYXBwZW4gb24gdGhlIGxhc3QgY2FsbCB0byB1c2VyX2NsdXN0ZXJfdW5sb2NrLiAqLworCWlmICgobG9ja3Jlcy0+bF9ibG9ja2luZyA9PSBETE1fTE9DS19FWCkKKwkgICAgJiYgKGxvY2tyZXMtPmxfZXhfaG9sZGVycyB8fCBsb2NrcmVzLT5sX3JvX2hvbGRlcnMpKSB7CisJCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCQltbG9nKE1MX0JBU1RTLCAibG9ja3JlcyAlLipzLCBFWC9QUiBIb2xkZXJzICV1LCV1XG4iLAorCQkgICAgIGxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lLAorCQkgICAgIGxvY2tyZXMtPmxfZXhfaG9sZGVycywgbG9ja3Jlcy0+bF9yb19ob2xkZXJzKTsKKwkJZ290byBkcm9wX3JlZjsKKwl9CisKKwlpZiAoKGxvY2tyZXMtPmxfYmxvY2tpbmcgPT0gRExNX0xPQ0tfUFIpCisJICAgICYmIGxvY2tyZXMtPmxfZXhfaG9sZGVycykgeworCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKwkJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJS4qcywgRVggSG9sZGVycyAldVxuIiwKKwkJICAgICBsb2NrcmVzLT5sX25hbWVsZW4sIGxvY2tyZXMtPmxfbmFtZSwKKwkJICAgICBsb2NrcmVzLT5sX2V4X2hvbGRlcnMpOworCQlnb3RvIGRyb3BfcmVmOworCX0KKworCS8qIHlheSwgd2UgY2FuIGRvd25jb252ZXJ0IG5vdy4gKi8KKwluZXdfbGV2ZWwgPSB1c2VyX2hpZ2hlc3RfY29tcGF0X2xvY2tfbGV2ZWwobG9ja3Jlcy0+bF9ibG9ja2luZyk7CisJbG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPSBuZXdfbGV2ZWw7CisJbG9ja3Jlcy0+bF9mbGFncyB8PSBVU0VSX0xPQ0tfQlVTWTsKKwltbG9nKE1MX0JBU1RTLCAibG9ja3JlcyAlLipzLCBkb3duY29udmVydCAlZCA9PiAlZFxuIiwKKwkgICAgIGxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2xldmVsLCBuZXdfbGV2ZWwpOworCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCisJLyogbmVlZCBsb2NrIGRvd25jb252ZXJ0IHJlcXVlc3Qgbm93Li4uICovCisJc3RhdHVzID0gb2NmczJfZGxtX2xvY2soY29ubiwgbmV3X2xldmVsLCAmbG9ja3Jlcy0+bF9sa3NiLAorCQkJCURMTV9MS0ZfQ09OVkVSVHxETE1fTEtGX1ZBTEJMSywKKwkJCQlsb2NrcmVzLT5sX25hbWUsCisJCQkJbG9ja3Jlcy0+bF9uYW1lbGVuKTsKKwlpZiAoc3RhdHVzKSB7CisJCXVzZXJfbG9nX2RsbV9lcnJvcigib2NmczJfZGxtX2xvY2siLCBzdGF0dXMsIGxvY2tyZXMpOworCQl1c2VyX3JlY292ZXJfZnJvbV9kbG1fZXJyb3IobG9ja3Jlcyk7CisJfQorCitkcm9wX3JlZjoKKwl1c2VyX2RsbV9kcm9wX2lub2RlX3JlZihsb2NrcmVzKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVzZXJfZGxtX2luY19ob2xkZXJzKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzLAorCQkJCQlpbnQgbGV2ZWwpCit7CisJc3dpdGNoKGxldmVsKSB7CisJY2FzZSBETE1fTE9DS19FWDoKKwkJbG9ja3Jlcy0+bF9leF9ob2xkZXJzKys7CisJCWJyZWFrOworCWNhc2UgRExNX0xPQ0tfUFI6CisJCWxvY2tyZXMtPmxfcm9faG9sZGVycysrOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKKy8qIHByZWRpY3Qgd2hhdCBsb2NrIGxldmVsIHdlJ2xsIGJlIGRyb3BwaW5nIGRvd24gdG8gb24gYmVoYWxmCisgKiBvZiBhbm90aGVyIG5vZGUsIGFuZCByZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudGx5IHdhbnRlZAorICogbGV2ZWwgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggaXQuICovCitzdGF0aWMgaW5saW5lIGludAordXNlcl9tYXlfY29udGludWVfb25fYmxvY2tlZF9sb2NrKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzLAorCQkJCSAgaW50IHdhbnRlZCkKK3sKKwlCVUdfT04oIShsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0JMT0NLRUQpKTsKKworCXJldHVybiB3YW50ZWQgPD0gdXNlcl9oaWdoZXN0X2NvbXBhdF9sb2NrX2xldmVsKGxvY2tyZXMtPmxfYmxvY2tpbmcpOworfQorCitpbnQgdXNlcl9kbG1fY2x1c3Rlcl9sb2NrKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzLAorCQkJICBpbnQgbGV2ZWwsCisJCQkgIGludCBsa21fZmxhZ3MpCit7CisJaW50IHN0YXR1cywgbG9jYWxfZmxhZ3M7CisJc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiA9CisJCWNsdXN0ZXJfY29ubmVjdGlvbl9mcm9tX3VzZXJfbG9ja3Jlcyhsb2NrcmVzKTsKKworCWlmIChsZXZlbCAhPSBETE1fTE9DS19FWCAmJgorCSAgICBsZXZlbCAhPSBETE1fTE9DS19QUikgeworCQltbG9nKE1MX0VSUk9SLCAibG9ja3JlcyAlLipzOiBpbnZhbGlkIHJlcXVlc3QhXG4iLAorCQkgICAgIGxvY2tyZXMtPmxfbmFtZWxlbiwgbG9ja3Jlcy0+bF9uYW1lKTsKKwkJc3RhdHVzID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKworCW1sb2coTUxfQkFTVFMsICJsb2NrcmVzICUuKnMsIGxldmVsICVkLCBmbGFncyA9IDB4JXhcbiIsCisJICAgICBsb2NrcmVzLT5sX25hbWVsZW4sIGxvY2tyZXMtPmxfbmFtZSwgbGV2ZWwsIGxrbV9mbGFncyk7CisKK2FnYWluOgorCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQlzdGF0dXMgPSAtRVJFU1RBUlRTWVM7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlzcGluX2xvY2soJmxvY2tyZXMtPmxfbG9jayk7CisKKwkvKiBXZSBvbmx5IGNvbXBhcmUgYWdhaW5zdCB0aGUgY3VycmVudGx5IGdyYW50ZWQgbGV2ZWwKKwkgKiBoZXJlLiBJZiB0aGUgbG9jayBpcyBibG9ja2VkIHdhaXRpbmcgb24gYSBkb3duY29udmVydCwKKwkgKiB3ZSdsbCBnZXQgY2F1Z2h0IGJlbG93LiAqLworCWlmICgobG9ja3Jlcy0+bF9mbGFncyAmIFVTRVJfTE9DS19CVVNZKSAmJgorCSAgICAobGV2ZWwgPiBsb2NrcmVzLT5sX2xldmVsKSkgeworCQkvKiBpcyBzb21lb25lIHNpdHRpbmcgaW4gZGxtX2xvY2s/IElmIHNvLCB3YWl0IG9uCisJCSAqIHRoZW0uICovCisJCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCisJCXVzZXJfd2FpdF9vbl9idXN5X2xvY2sobG9ja3Jlcyk7CisJCWdvdG8gYWdhaW47CisJfQorCisJaWYgKChsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0JMT0NLRUQpICYmCisJICAgICghdXNlcl9tYXlfY29udGludWVfb25fYmxvY2tlZF9sb2NrKGxvY2tyZXMsIGxldmVsKSkpIHsKKwkJLyogaXMgdGhlIGxvY2sgaXMgY3VycmVudGx5IGJsb2NrZWQgb24gYmVoYWxmIG9mCisJCSAqIGFub3RoZXIgbm9kZSAqLworCQlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKworCQl1c2VyX3dhaXRfb25fYmxvY2tlZF9sb2NrKGxvY2tyZXMpOworCQlnb3RvIGFnYWluOworCX0KKworCWlmIChsZXZlbCA+IGxvY2tyZXMtPmxfbGV2ZWwpIHsKKwkJbG9jYWxfZmxhZ3MgPSBsa21fZmxhZ3MgfCBETE1fTEtGX1ZBTEJMSzsKKwkJaWYgKGxvY2tyZXMtPmxfbGV2ZWwgIT0gRExNX0xPQ0tfSVYpCisJCQlsb2NhbF9mbGFncyB8PSBETE1fTEtGX0NPTlZFUlQ7CisKKwkJbG9ja3Jlcy0+bF9yZXF1ZXN0ZWQgPSBsZXZlbDsKKwkJbG9ja3Jlcy0+bF9mbGFncyB8PSBVU0VSX0xPQ0tfQlVTWTsKKwkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisKKwkJQlVHX09OKGxldmVsID09IERMTV9MT0NLX0lWKTsKKwkJQlVHX09OKGxldmVsID09IERMTV9MT0NLX05MKTsKKworCQkvKiBjYWxsIGRsbV9sb2NrIHRvIHVwZ3JhZGUgbG9jayBub3cgKi8KKwkJc3RhdHVzID0gb2NmczJfZGxtX2xvY2soY29ubiwgbGV2ZWwsICZsb2NrcmVzLT5sX2xrc2IsCisJCQkJCWxvY2FsX2ZsYWdzLCBsb2NrcmVzLT5sX25hbWUsCisJCQkJCWxvY2tyZXMtPmxfbmFtZWxlbik7CisJCWlmIChzdGF0dXMpIHsKKwkJCWlmICgobGttX2ZsYWdzICYgRExNX0xLRl9OT1FVRVVFKSAmJgorCQkJICAgIChzdGF0dXMgIT0gLUVBR0FJTikpCisJCQkJdXNlcl9sb2dfZGxtX2Vycm9yKCJvY2ZzMl9kbG1fbG9jayIsCisJCQkJCQkgICBzdGF0dXMsIGxvY2tyZXMpOworCQkJdXNlcl9yZWNvdmVyX2Zyb21fZGxtX2Vycm9yKGxvY2tyZXMpOworCQkJZ290byBiYWlsOworCQl9CisKKwkJdXNlcl93YWl0X29uX2J1c3lfbG9jayhsb2NrcmVzKTsKKwkJZ290byBhZ2FpbjsKKwl9CisKKwl1c2VyX2RsbV9pbmNfaG9sZGVycyhsb2NrcmVzLCBsZXZlbCk7CisJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisKKwlzdGF0dXMgPSAwOworYmFpbDoKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXNlcl9kbG1fZGVjX2hvbGRlcnMoc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMsCisJCQkJCWludCBsZXZlbCkKK3sKKwlzd2l0Y2gobGV2ZWwpIHsKKwljYXNlIERMTV9MT0NLX0VYOgorCQlCVUdfT04oIWxvY2tyZXMtPmxfZXhfaG9sZGVycyk7CisJCWxvY2tyZXMtPmxfZXhfaG9sZGVycy0tOworCQlicmVhazsKKwljYXNlIERMTV9MT0NLX1BSOgorCQlCVUdfT04oIWxvY2tyZXMtPmxfcm9faG9sZGVycyk7CisJCWxvY2tyZXMtPmxfcm9faG9sZGVycy0tOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlCVUcoKTsKKwl9Cit9CisKK3ZvaWQgdXNlcl9kbG1fY2x1c3Rlcl91bmxvY2soc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMsCisJCQkgICAgIGludCBsZXZlbCkKK3sKKwlpZiAobGV2ZWwgIT0gRExNX0xPQ0tfRVggJiYKKwkgICAgbGV2ZWwgIT0gRExNX0xPQ0tfUFIpIHsKKwkJbWxvZyhNTF9FUlJPUiwgImxvY2tyZXMgJS4qczogaW52YWxpZCByZXF1ZXN0IVxuIiwKKwkJICAgICBsb2NrcmVzLT5sX25hbWVsZW4sIGxvY2tyZXMtPmxfbmFtZSk7CisJCXJldHVybjsKKwl9CisKKwlzcGluX2xvY2soJmxvY2tyZXMtPmxfbG9jayk7CisJdXNlcl9kbG1fZGVjX2hvbGRlcnMobG9ja3JlcywgbGV2ZWwpOworCV9fdXNlcl9kbG1fY29uZF9xdWV1ZV9sb2NrcmVzKGxvY2tyZXMpOworCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworfQorCit2b2lkIHVzZXJfZGxtX3dyaXRlX2x2YihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJY29uc3QgY2hhciAqdmFsLAorCQkJdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcyA9ICZETE1GU19JKGlub2RlKS0+aXBfbG9ja3JlczsKKwljaGFyICpsdmI7CisKKwlCVUdfT04obGVuID4gRExNX0xWQl9MRU4pOworCisJc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCisJQlVHX09OKGxvY2tyZXMtPmxfbGV2ZWwgPCBETE1fTE9DS19FWCk7CisJbHZiID0gb2NmczJfZGxtX2x2YigmbG9ja3Jlcy0+bF9sa3NiKTsKKwltZW1jcHkobHZiLCB2YWwsIGxlbik7CisKKwlzcGluX3VubG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKK30KKworc3NpemVfdCB1c2VyX2RsbV9yZWFkX2x2YihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICBjaGFyICp2YWwsCisJCQkgIHVuc2lnbmVkIGludCBsZW4pCit7CisJc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMgPSAmRExNRlNfSShpbm9kZSktPmlwX2xvY2tyZXM7CisJY2hhciAqbHZiOworCXNzaXplX3QgcmV0ID0gbGVuOworCisJQlVHX09OKGxlbiA+IERMTV9MVkJfTEVOKTsKKworCXNwaW5fbG9jaygmbG9ja3Jlcy0+bF9sb2NrKTsKKworCUJVR19PTihsb2NrcmVzLT5sX2xldmVsIDwgRExNX0xPQ0tfUFIpOworCWlmIChvY2ZzMl9kbG1fbHZiX3ZhbGlkKCZsb2NrcmVzLT5sX2xrc2IpKSB7CisJCWx2YiA9IG9jZnMyX2RsbV9sdmIoJmxvY2tyZXMtPmxfbGtzYik7CisJCW1lbWNweSh2YWwsIGx2YiwgbGVuKTsKKwl9IGVsc2UKKwkJcmV0ID0gMDsKKworCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgdXNlcl9kbG1fbG9ja19yZXNfaW5pdChzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcywKKwkJCSAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJbWVtc2V0KGxvY2tyZXMsIDAsIHNpemVvZigqbG9ja3JlcykpOworCisJc3Bpbl9sb2NrX2luaXQoJmxvY2tyZXMtPmxfbG9jayk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbG9ja3Jlcy0+bF9ldmVudCk7CisJbG9ja3Jlcy0+bF9sZXZlbCA9IERMTV9MT0NLX0lWOworCWxvY2tyZXMtPmxfcmVxdWVzdGVkID0gRExNX0xPQ0tfSVY7CisJbG9ja3Jlcy0+bF9ibG9ja2luZyA9IERMTV9MT0NLX0lWOworCisJLyogc2hvdWxkIGhhdmUgYmVlbiBjaGVja2VkIGJlZm9yZSBnZXR0aW5nIGhlcmUuICovCisJQlVHX09OKGRlbnRyeS0+ZF9uYW1lLmxlbiA+PSBVU0VSX0RMTV9MT0NLX0lEX01BWF9MRU4pOworCisJbWVtY3B5KGxvY2tyZXMtPmxfbmFtZSwKKwkgICAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwKKwkgICAgICAgZGVudHJ5LT5kX25hbWUubGVuKTsKKwlsb2NrcmVzLT5sX25hbWVsZW4gPSBkZW50cnktPmRfbmFtZS5sZW47Cit9CisKK2ludCB1c2VyX2RsbV9kZXN0cm95X2xvY2soc3RydWN0IHVzZXJfbG9ja19yZXMgKmxvY2tyZXMpCit7CisJaW50IHN0YXR1cyA9IC1FQlVTWTsKKwlzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uID0KKwkJY2x1c3Rlcl9jb25uZWN0aW9uX2Zyb21fdXNlcl9sb2NrcmVzKGxvY2tyZXMpOworCisJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJS4qc1xuIiwgbG9ja3Jlcy0+bF9uYW1lbGVuLCBsb2NrcmVzLT5sX25hbWUpOworCisJc3Bpbl9sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCWlmIChsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0lOX1RFQVJET1dOKSB7CisJCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCQlyZXR1cm4gMDsKKwl9CisKKwlsb2NrcmVzLT5sX2ZsYWdzIHw9IFVTRVJfTE9DS19JTl9URUFSRE9XTjsKKworCXdoaWxlIChsb2NrcmVzLT5sX2ZsYWdzICYgVVNFUl9MT0NLX0JVU1kpIHsKKwkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisKKwkJdXNlcl93YWl0X29uX2J1c3lfbG9jayhsb2NrcmVzKTsKKworCQlzcGluX2xvY2soJmxvY2tyZXMtPmxfbG9jayk7CisJfQorCisJaWYgKGxvY2tyZXMtPmxfcm9faG9sZGVycyB8fCBsb2NrcmVzLT5sX2V4X2hvbGRlcnMpIHsKKwkJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlzdGF0dXMgPSAwOworCWlmICghKGxvY2tyZXMtPmxfZmxhZ3MgJiBVU0VSX0xPQ0tfQVRUQUNIRUQpKSB7CisJCXNwaW5fdW5sb2NrKCZsb2NrcmVzLT5sX2xvY2spOworCQlnb3RvIGJhaWw7CisJfQorCisJbG9ja3Jlcy0+bF9mbGFncyAmPSB+VVNFUl9MT0NLX0FUVEFDSEVEOworCWxvY2tyZXMtPmxfZmxhZ3MgfD0gVVNFUl9MT0NLX0JVU1k7CisJc3Bpbl91bmxvY2soJmxvY2tyZXMtPmxfbG9jayk7CisKKwlzdGF0dXMgPSBvY2ZzMl9kbG1fdW5sb2NrKGNvbm4sICZsb2NrcmVzLT5sX2xrc2IsIERMTV9MS0ZfVkFMQkxLKTsKKwlpZiAoc3RhdHVzKSB7CisJCXVzZXJfbG9nX2RsbV9lcnJvcigib2NmczJfZGxtX3VubG9jayIsIHN0YXR1cywgbG9ja3Jlcyk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwl1c2VyX3dhaXRfb25fYnVzeV9sb2NrKGxvY2tyZXMpOworCisJc3RhdHVzID0gMDsKK2JhaWw6CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIHZvaWQgdXNlcl9kbG1fcmVjb3ZlcnlfaGFuZGxlcl9ub29wKGludCBub2RlX251bSwKKwkJCQkJICAgdm9pZCAqcmVjb3ZlcnlfZGF0YSkKK3sKKwkvKiBXZSBpZ25vcmUgcmVjb3ZlcnkgZXZlbnRzICovCisJcmV0dXJuOworfQorCit2b2lkIHVzZXJfZGxtX3NldF9sb2NraW5nX3Byb3RvY29sKHZvaWQpCit7CisJb2NmczJfc3RhY2tfZ2x1ZV9zZXRfbWF4X3Byb3RvX3ZlcnNpb24oJnVzZXJfZGxtX2xwcm90by5scF9tYXhfdmVyc2lvbik7Cit9CisKK3N0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKnVzZXJfZGxtX3JlZ2lzdGVyKHN0cnVjdCBxc3RyICpuYW1lKQoreworCWludCByYzsKKwlzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uOworCisJcmMgPSBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3RfYWdub3N0aWMobmFtZS0+bmFtZSwgbmFtZS0+bGVuLAorCQkJCQkgICAgJnVzZXJfZGxtX2xwcm90bywKKwkJCQkJICAgIHVzZXJfZGxtX3JlY292ZXJ5X2hhbmRsZXJfbm9vcCwKKwkJCQkJICAgIE5VTEwsICZjb25uKTsKKwlpZiAocmMpCisJCW1sb2dfZXJybm8ocmMpOworCisJcmV0dXJuIHJjID8gRVJSX1BUUihyYykgOiBjb25uOworfQorCit2b2lkIHVzZXJfZGxtX3VucmVnaXN0ZXIoc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubikKK3sKKwlvY2ZzMl9jbHVzdGVyX2Rpc2Nvbm5lY3QoY29ubiwgMCk7Cit9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG1mcy91c2VyZGxtLmggYi9mcy9vY2ZzMi9kbG1mcy91c2VyZGxtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I0MmQ3OQotLS0gL2Rldi9udWxsCisrKyBiL2ZzL29jZnMyL2RsbWZzL3VzZXJkbG0uaApAQCAtMCwwICsxLDExMyBAQAorLyogLSotIG1vZGU6IGM7IGMtYmFzaWMtb2Zmc2V0OiA4OyAtKi0KKyAqIHZpbTogbm9leHBhbmR0YWIgc3c9OCB0cz04IHN0cz0wOgorICoKKyAqIHVzZXJkbG0uaAorICoKKyAqIFVzZXJzcGFjZSBkbG0gZGVmaW5lcworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwNCBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKKyAqIEJvc3RvbiwgTUEgMDIxMTEwLTEzMDcsIFVTQS4KKyAqLworCisKKyNpZm5kZWYgVVNFUkRMTV9ICisjZGVmaW5lIFVTRVJETE1fSAorCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisvKiB1c2VyX2xvY2tfcmVzLT5sX2ZsYWdzIGZsYWdzLiAqLworI2RlZmluZSBVU0VSX0xPQ0tfQVRUQUNIRUQgICAgICAoMHgwMDAwMDAwMSkgLyogd2UgaGF2ZSBpbml0aWFsaXplZAorCQkJCQkgICAgICAgKiB0aGUgbHZiICovCisjZGVmaW5lIFVTRVJfTE9DS19CVVNZICAgICAgICAgICgweDAwMDAwMDAyKSAvKiB3ZSBhcmUgY3VycmVudGx5IGluCisJCQkJCSAgICAgICAqIGRsbV9sb2NrICovCisjZGVmaW5lIFVTRVJfTE9DS19CTE9DS0VEICAgICAgICgweDAwMDAwMDA0KSAvKiBibG9ja2VkIHdhaXRpbmcgdG8KKwkJCQkJICAgICAgKiBkb3duY29udmVydCovCisjZGVmaW5lIFVTRVJfTE9DS19JTl9URUFSRE9XTiAgICgweDAwMDAwMDA4KSAvKiB3ZSdyZSBjdXJyZW50bHkKKwkJCQkJICAgICAgKiBkZXN0cm95aW5nIHRoaXMKKwkJCQkJICAgICAgKiBsb2NrLiAqLworI2RlZmluZSBVU0VSX0xPQ0tfUVVFVUVEICAgICAgICAoMHgwMDAwMDAxMCkgLyogbG9jayBpcyBvbiB0aGUKKwkJCQkJICAgICAgKiB3b3JrcXVldWUgKi8KKyNkZWZpbmUgVVNFUl9MT0NLX0lOX0NBTkNFTCAgICAgKDB4MDAwMDAwMjApCisKK3N0cnVjdCB1c2VyX2xvY2tfcmVzIHsKKwlzcGlubG9ja190ICAgICAgICAgICAgICAgbF9sb2NrOworCisJaW50ICAgICAgICAgICAgICAgICAgICAgIGxfZmxhZ3M7CisKKyNkZWZpbmUgVVNFUl9ETE1fTE9DS19JRF9NQVhfTEVOICAzMgorCWNoYXIgICAgICAgICAgICAgICAgICAgICBsX25hbWVbVVNFUl9ETE1fTE9DS19JRF9NQVhfTEVOXTsKKwlpbnQgICAgICAgICAgICAgICAgICAgICAgbF9uYW1lbGVuOworCWludCAgICAgICAgICAgICAgICAgICAgICBsX2xldmVsOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICBsX3JvX2hvbGRlcnM7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgIGxfZXhfaG9sZGVyczsKKwlzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgICAgbF9sa3NiOworCisJaW50ICAgICAgICAgICAgICAgICAgICAgIGxfcmVxdWVzdGVkOworCWludCAgICAgICAgICAgICAgICAgICAgICBsX2Jsb2NraW5nOworCisJd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgIGxfZXZlbnQ7CisKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgICAgICAgbF93b3JrOworfTsKKworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICp1c2VyX2RsbV93b3JrZXI7CisKK3ZvaWQgdXNlcl9kbG1fbG9ja19yZXNfaW5pdChzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcywKKwkJCSAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOworaW50IHVzZXJfZGxtX2Rlc3Ryb3lfbG9jayhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3Jlcyk7CitpbnQgdXNlcl9kbG1fY2x1c3Rlcl9sb2NrKHN0cnVjdCB1c2VyX2xvY2tfcmVzICpsb2NrcmVzLAorCQkJICBpbnQgbGV2ZWwsCisJCQkgIGludCBsa21fZmxhZ3MpOwordm9pZCB1c2VyX2RsbV9jbHVzdGVyX3VubG9jayhzdHJ1Y3QgdXNlcl9sb2NrX3JlcyAqbG9ja3JlcywKKwkJCSAgICAgaW50IGxldmVsKTsKK3ZvaWQgdXNlcl9kbG1fd3JpdGVfbHZiKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQljb25zdCBjaGFyICp2YWwsCisJCQl1bnNpZ25lZCBpbnQgbGVuKTsKK3NzaXplX3QgdXNlcl9kbG1fcmVhZF9sdmIoc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgY2hhciAqdmFsLAorCQkJICB1bnNpZ25lZCBpbnQgbGVuKTsKK3N0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKnVzZXJfZGxtX3JlZ2lzdGVyKHN0cnVjdCBxc3RyICpuYW1lKTsKK3ZvaWQgdXNlcl9kbG1fdW5yZWdpc3RlcihzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uKTsKK3ZvaWQgdXNlcl9kbG1fc2V0X2xvY2tpbmdfcHJvdG9jb2wodm9pZCk7CisKK3N0cnVjdCBkbG1mc19pbm9kZV9wcml2YXRlIHsKKwlzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uCSppcF9jb25uOworCisJc3RydWN0IHVzZXJfbG9ja19yZXMgaXBfbG9ja3JlczsgLyogdW51c2VkIGZvciBkaXJlY3Rvcmllcy4gKi8KKwlzdHJ1Y3QgaW5vZGUgICAgICAgICAqaXBfcGFyZW50OworCisJc3RydWN0IGlub2RlICAgICAgICAgaXBfdmZzX2lub2RlOworfTsKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgZGxtZnNfaW5vZGVfcHJpdmF0ZSAqCitETE1GU19JKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisgICAgICAgIHJldHVybiBjb250YWluZXJfb2YoaW5vZGUsCisJCQkgICAgc3RydWN0IGRsbWZzX2lub2RlX3ByaXZhdGUsCisJCQkgICAgaXBfdmZzX2lub2RlKTsKK30KKworc3RydWN0IGRsbWZzX2ZpbHBfcHJpdmF0ZSB7CisJaW50ICAgICAgICAgICAgICAgICAgZnBfbG9ja19sZXZlbDsKK307CisKKyNkZWZpbmUgRExNRlNfTUFHSUMJMHg3NmE5ZjQyNQorCisjZW5kaWYgLyogVVNFUkRMTV9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9kbG1nbHVlLmMgYi9mcy9vY2ZzMi9kbG1nbHVlLmMKaW5kZXggZTA0NDAxOS4uNTBjNGVlOCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvZGxtZ2x1ZS5jCisrKyBiL2ZzL29jZnMyL2RsbWdsdWUuYwpAQCAtMjk3LDYgKzI5NywxMSBAQAogCQlsb2NrcmVzLT5sX3R5cGUgPT0gT0NGUzJfTE9DS19UWVBFX09QRU47CiB9CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG9jZnMyX2xvY2tfcmVzICpvY2ZzMl9sa3NiX3RvX2xvY2tfcmVzKHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGxrc2IsIHN0cnVjdCBvY2ZzMl9sb2NrX3JlcywgbF9sa3NiKTsKK30KKwogc3RhdGljIGlubGluZSBzdHJ1Y3QgaW5vZGUgKm9jZnMyX2xvY2tfcmVzX2lub2RlKHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcykKIHsKIAlCVUdfT04oIW9jZnMyX2lzX2lub2RlX2xvY2sobG9ja3JlcykpOwpAQCAtOTI3LDYgKzkzMiwxMCBAQAogCQlsb2NrcmVzLT5sX2Jsb2NraW5nID0gbGV2ZWw7CiAJfQogCisJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJXMsIGJsb2NrICVkLCBsZXZlbCAlZCwgbF9ibG9jayAlZCwgZHduICVkXG4iLAorCSAgICAgbG9ja3Jlcy0+bF9uYW1lLCBsZXZlbCwgbG9ja3Jlcy0+bF9sZXZlbCwgbG9ja3Jlcy0+bF9ibG9ja2luZywKKwkgICAgIG5lZWRzX2Rvd25jb252ZXJ0KTsKKwogCWlmIChuZWVkc19kb3duY29udmVydCkKIAkJbG9ja3Jlc19vcl9mbGFncyhsb2NrcmVzLCBPQ0ZTMl9MT0NLX0JMT0NLRUQpOwogCkBAIC0xMDQwLDE4ICsxMDQ5LDE3IEBACiAJcmV0dXJuIGxvY2tyZXMtPmxfcGVuZGluZ19nZW47CiB9CiAKLQotc3RhdGljIHZvaWQgb2NmczJfYmxvY2tpbmdfYXN0KHZvaWQgKm9wYXF1ZSwgaW50IGxldmVsKQorc3RhdGljIHZvaWQgb2NmczJfYmxvY2tpbmdfYXN0KHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwgaW50IGxldmVsKQogewotCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcyA9IG9wYXF1ZTsKKwlzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMgPSBvY2ZzMl9sa3NiX3RvX2xvY2tfcmVzKGxrc2IpOwogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gb2NmczJfZ2V0X2xvY2tyZXNfb3NiKGxvY2tyZXMpOwogCWludCBuZWVkc19kb3duY29udmVydDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJQlVHX09OKGxldmVsIDw9IERMTV9MT0NLX05MKTsKIAotCW1sb2coMCwgIkJBU1QgZmlyZWQgZm9yIGxvY2tyZXMgJXMsIGJsb2NraW5nICVkLCBsZXZlbCAlZCB0eXBlICVzXG4iLAotCSAgICAgbG9ja3Jlcy0+bF9uYW1lLCBsZXZlbCwgbG9ja3Jlcy0+bF9sZXZlbCwKKwltbG9nKE1MX0JBU1RTLCAiQkFTVCBmaXJlZCBmb3IgbG9ja3JlcyAlcywgYmxvY2tpbmcgJWQsIGxldmVsICVkLCAiCisJICAgICAidHlwZSAlc1xuIiwgbG9ja3Jlcy0+bF9uYW1lLCBsZXZlbCwgbG9ja3Jlcy0+bF9sZXZlbCwKIAkgICAgIG9jZnMyX2xvY2tfdHlwZV9zdHJpbmcobG9ja3Jlcy0+bF90eXBlKSk7CiAKIAkvKgpAQCAtMTA3Miw5ICsxMDgwLDkgQEAKIAlvY2ZzMl93YWtlX2Rvd25jb252ZXJ0X3RocmVhZChvc2IpOwogfQogCi1zdGF0aWMgdm9pZCBvY2ZzMl9sb2NraW5nX2FzdCh2b2lkICpvcGFxdWUpCitzdGF0aWMgdm9pZCBvY2ZzMl9sb2NraW5nX2FzdChzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IpCiB7Ci0Jc3RydWN0IG9jZnMyX2xvY2tfcmVzICpsb2NrcmVzID0gb3BhcXVlOworCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcyA9IG9jZnMyX2xrc2JfdG9fbG9ja19yZXMobGtzYik7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBvY2ZzMl9nZXRfbG9ja3Jlc19vc2IobG9ja3Jlcyk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc3RhdHVzOwpAQCAtMTA5NSw2ICsxMTAzLDEwIEBACiAJCXJldHVybjsKIAl9CiAKKwltbG9nKE1MX0JBU1RTLCAiQVNUIGZpcmVkIGZvciBsb2NrcmVzICVzLCBhY3Rpb24gJWQsIHVubG9jayAlZCwgIgorCSAgICAgImxldmVsICVkID0+ICVkXG4iLCBsb2NrcmVzLT5sX25hbWUsIGxvY2tyZXMtPmxfYWN0aW9uLAorCSAgICAgbG9ja3Jlcy0+bF91bmxvY2tfYWN0aW9uLCBsb2NrcmVzLT5sX2xldmVsLCBsb2NrcmVzLT5sX3JlcXVlc3RlZCk7CisKIAlzd2l0Y2gobG9ja3Jlcy0+bF9hY3Rpb24pIHsKIAljYXNlIE9DRlMyX0FTVF9BVFRBQ0g6CiAJCW9jZnMyX2dlbmVyaWNfaGFuZGxlX2F0dGFjaF9hY3Rpb24obG9ja3Jlcyk7CkBAIC0xMTA3LDggKzExMTksOCBAQAogCQlvY2ZzMl9nZW5lcmljX2hhbmRsZV9kb3duY29udmVydF9hY3Rpb24obG9ja3Jlcyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCW1sb2coTUxfRVJST1IsICJsb2NrcmVzICVzOiBhc3QgZmlyZWQgd2l0aCBpbnZhbGlkIGFjdGlvbjogJXUgIgotCQkgICAgICJsb2NrcmVzIGZsYWdzID0gMHglbHgsIHVubG9jayBhY3Rpb246ICV1XG4iLAorCQltbG9nKE1MX0VSUk9SLCAibG9ja3JlcyAlczogQVNUIGZpcmVkIHdpdGggaW52YWxpZCBhY3Rpb246ICV1LCAiCisJCSAgICAgImZsYWdzIDB4JWx4LCB1bmxvY2s6ICV1XG4iLAogCQkgICAgIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9hY3Rpb24sIGxvY2tyZXMtPmxfZmxhZ3MsCiAJCSAgICAgbG9ja3Jlcy0+bF91bmxvY2tfYWN0aW9uKTsKIAkJQlVHKCk7CkBAIC0xMTM0LDYgKzExNDYsODggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKIH0KIAorc3RhdGljIHZvaWQgb2NmczJfdW5sb2NrX2FzdChzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IsIGludCBlcnJvcikKK3sKKwlzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMgPSBvY2ZzMl9sa3NiX3RvX2xvY2tfcmVzKGxrc2IpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwltbG9nX2VudHJ5X3ZvaWQoKTsKKworCW1sb2coTUxfQkFTVFMsICJVTkxPQ0sgQVNUIGZpcmVkIGZvciBsb2NrcmVzICVzLCBhY3Rpb24gPSAlZFxuIiwKKwkgICAgIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF91bmxvY2tfYWN0aW9uKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKKwlpZiAoZXJyb3IpIHsKKwkJbWxvZyhNTF9FUlJPUiwgIkRsbSBwYXNzZXMgZXJyb3IgJWQgZm9yIGxvY2sgJXMsICIKKwkJICAgICAidW5sb2NrX2FjdGlvbiAlZFxuIiwgZXJyb3IsIGxvY2tyZXMtPmxfbmFtZSwKKwkJICAgICBsb2NrcmVzLT5sX3VubG9ja19hY3Rpb24pOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKKwkJbWxvZ19leGl0X3ZvaWQoKTsKKwkJcmV0dXJuOworCX0KKworCXN3aXRjaChsb2NrcmVzLT5sX3VubG9ja19hY3Rpb24pIHsKKwljYXNlIE9DRlMyX1VOTE9DS19DQU5DRUxfQ09OVkVSVDoKKwkJbWxvZygwLCAiQ2FuY2VsIGNvbnZlcnQgc3VjY2VzcyBmb3IgJXNcbiIsIGxvY2tyZXMtPmxfbmFtZSk7CisJCWxvY2tyZXMtPmxfYWN0aW9uID0gT0NGUzJfQVNUX0lOVkFMSUQ7CisJCS8qIERvd25jb252ZXJ0IHRocmVhZCBtYXkgaGF2ZSByZXF1ZXVlZCB0aGlzIGxvY2ssIHdlCisJCSAqIG5lZWQgdG8gd2FrZSBpdC4gKi8KKwkJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBPQ0ZTMl9MT0NLX0JMT0NLRUQpCisJCQlvY2ZzMl93YWtlX2Rvd25jb252ZXJ0X3RocmVhZChvY2ZzMl9nZXRfbG9ja3Jlc19vc2IobG9ja3JlcykpOworCQlicmVhazsKKwljYXNlIE9DRlMyX1VOTE9DS19EUk9QX0xPQ0s6CisJCWxvY2tyZXMtPmxfbGV2ZWwgPSBETE1fTE9DS19JVjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJQlVHKCk7CisJfQorCisJbG9ja3Jlc19jbGVhcl9mbGFncyhsb2NrcmVzLCBPQ0ZTMl9MT0NLX0JVU1kpOworCWxvY2tyZXMtPmxfdW5sb2NrX2FjdGlvbiA9IE9DRlMyX1VOTE9DS19JTlZBTElEOworCXdha2VfdXAoJmxvY2tyZXMtPmxfZXZlbnQpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2tyZXMtPmxfbG9jaywgZmxhZ3MpOworCisJbWxvZ19leGl0X3ZvaWQoKTsKK30KKworLyoKKyAqIFRoaXMgaXMgdGhlIGZpbGVzeXN0ZW0gbG9ja2luZyBwcm90b2NvbC4gIEl0IHByb3ZpZGVzIHRoZSBsb2NrIGhhbmRsaW5nCisgKiBob29rcyBmb3IgdGhlIHVuZGVybHlpbmcgRExNLiAgSXQgaGFzIGEgbWF4aW11bSB2ZXJzaW9uIG51bWJlci4KKyAqIFRoZSB2ZXJzaW9uIG51bWJlciBhbGxvd3MgaW50ZXJvcGVyYWJpbGl0eSB3aXRoIHN5c3RlbXMgcnVubmluZyBhdAorICogdGhlIHNhbWUgbWFqb3IgbnVtYmVyIGFuZCBhbiBlcXVhbCBvciBzbWFsbGVyIG1pbm9yIG51bWJlci4KKyAqCisgKiBXaGVuZXZlciB0aGUgZmlsZXN5c3RlbSBkb2VzIG5ldyB0aGluZ3Mgd2l0aCBsb2NrcyAoYWRkcyBvciByZW1vdmVzIGEKKyAqIGxvY2ssIG9yZGVycyB0aGVtIGRpZmZlcmVudGx5LCBkb2VzIGRpZmZlcmVudCB0aGluZ3MgdW5kZXJuZWF0aCBhIGxvY2spLAorICogdGhlIHZlcnNpb24gbXVzdCBiZSBjaGFuZ2VkLiAgVGhlIHByb3RvY29sIGlzIG5lZ290aWF0ZWQgd2hlbiBqb2luaW5nCisgKiB0aGUgZGxtIGRvbWFpbi4gIEEgbm9kZSBtYXkgam9pbiB0aGUgZG9tYWluIGlmIGl0cyBtYWpvciB2ZXJzaW9uIGlzCisgKiBpZGVudGljYWwgdG8gYWxsIG90aGVyIG5vZGVzIGFuZCBpdHMgbWlub3IgdmVyc2lvbiBpcyBncmVhdGVyIHRoYW4KKyAqIG9yIGVxdWFsIHRvIGFsbCBvdGhlciBub2Rlcy4gIFdoZW4gaXRzIG1pbm9yIHZlcnNpb24gaXMgZ3JlYXRlciB0aGFuCisgKiB0aGUgb3RoZXIgbm9kZXMsIGl0IHdpbGwgcnVuIGF0IHRoZSBtaW5vciB2ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUKKyAqIG90aGVyIG5vZGVzLgorICoKKyAqIElmIGEgbG9ja2luZyBjaGFuZ2UgaXMgbWFkZSB0aGF0IHdpbGwgbm90IGJlIGNvbXBhdGlibGUgd2l0aCBvbGRlcgorICogdmVyc2lvbnMsIHRoZSBtYWpvciBudW1iZXIgbXVzdCBiZSBpbmNyZWFzZWQgYW5kIHRoZSBtaW5vciB2ZXJzaW9uIHNldAorICogdG8gemVyby4gIElmIGEgY2hhbmdlIG1lcmVseSBhZGRzIGEgYmVoYXZpb3IgdGhhdCBjYW4gYmUgZGlzYWJsZWQgd2hlbgorICogc3BlYWtpbmcgdG8gb2xkZXIgdmVyc2lvbnMsIHRoZSBtaW5vciB2ZXJzaW9uIG11c3QgYmUgaW5jcmVhc2VkLiAgSWYgYQorICogY2hhbmdlIGFkZHMgYSBmdWxseSBiYWNrd2FyZHMgY29tcGF0aWJsZSBjaGFuZ2UgKGVnLCBMVkIgY2hhbmdlcyB0aGF0CisgKiBhcmUganVzdCBpZ25vcmVkIGJ5IG9sZGVyIHZlcnNpb25zKSwgdGhlIHZlcnNpb24gZG9lcyBub3QgbmVlZCB0byBiZQorICogdXBkYXRlZC4KKyAqLworc3RhdGljIHN0cnVjdCBvY2ZzMl9sb2NraW5nX3Byb3RvY29sIGxwcm90byA9IHsKKwkubHBfbWF4X3ZlcnNpb24gPSB7CisJCS5wdl9tYWpvciA9IE9DRlMyX0xPQ0tJTkdfUFJPVE9DT0xfTUFKT1IsCisJCS5wdl9taW5vciA9IE9DRlMyX0xPQ0tJTkdfUFJPVE9DT0xfTUlOT1IsCisJfSwKKwkubHBfbG9ja19hc3QJCT0gb2NmczJfbG9ja2luZ19hc3QsCisJLmxwX2Jsb2NraW5nX2FzdAk9IG9jZnMyX2Jsb2NraW5nX2FzdCwKKwkubHBfdW5sb2NrX2FzdAkJPSBvY2ZzMl91bmxvY2tfYXN0LAorfTsKKwordm9pZCBvY2ZzMl9zZXRfbG9ja2luZ19wcm90b2NvbCh2b2lkKQoreworCW9jZnMyX3N0YWNrX2dsdWVfc2V0X21heF9wcm90b192ZXJzaW9uKCZscHJvdG8ubHBfbWF4X3ZlcnNpb24pOworfQorCiBzdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfcmVjb3Zlcl9mcm9tX2RsbV9lcnJvcihzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMsCiAJCQkJCQlpbnQgY29udmVydCkKIHsKQEAgLTExODksOCArMTI4Myw3IEBACiAJCQkgICAgICZsb2NrcmVzLT5sX2xrc2IsCiAJCQkgICAgIGRsbV9mbGFncywKIAkJCSAgICAgbG9ja3Jlcy0+bF9uYW1lLAotCQkJICAgICBPQ0ZTMl9MT0NLX0lEX01BWF9MRU4gLSAxLAotCQkJICAgICBsb2NrcmVzKTsKKwkJCSAgICAgT0NGUzJfTE9DS19JRF9NQVhfTEVOIC0gMSk7CiAJbG9ja3Jlc19jbGVhcl9wZW5kaW5nKGxvY2tyZXMsIGdlbiwgb3NiKTsKIAlpZiAocmV0KSB7CiAJCW9jZnMyX2xvZ19kbG1fZXJyb3IoIm9jZnMyX2RsbV9sb2NrIiwgcmV0LCBsb2NrcmVzKTsKQEAgLTE0MTIsNyArMTUwNSw3IEBACiAJCUJVR19PTihsZXZlbCA9PSBETE1fTE9DS19JVik7CiAJCUJVR19PTihsZXZlbCA9PSBETE1fTE9DS19OTCk7CiAKLQkJbWxvZygwLCAibG9jayAlcywgY29udmVydCBmcm9tICVkIHRvIGxldmVsID0gJWRcbiIsCisJCW1sb2coTUxfQkFTVFMsICJsb2NrcmVzICVzLCBjb252ZXJ0IGZyb20gJWQgdG8gJWRcbiIsCiAJCSAgICAgbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2xldmVsLCBsZXZlbCk7CiAKIAkJLyogY2FsbCBkbG1fbG9jayB0byB1cGdyYWRlIGxvY2sgbm93ICovCkBAIC0xNDIxLDggKzE1MTQsNyBAQAogCQkJCSAgICAgJmxvY2tyZXMtPmxfbGtzYiwKIAkJCQkgICAgIGxrbV9mbGFncywKIAkJCQkgICAgIGxvY2tyZXMtPmxfbmFtZSwKLQkJCQkgICAgIE9DRlMyX0xPQ0tfSURfTUFYX0xFTiAtIDEsCi0JCQkJICAgICBsb2NrcmVzKTsKKwkJCQkgICAgIE9DRlMyX0xPQ0tfSURfTUFYX0xFTiAtIDEpOwogCQlsb2NrcmVzX2NsZWFyX3BlbmRpbmcobG9ja3JlcywgZ2VuLCBvc2IpOwogCQlpZiAocmV0KSB7CiAJCQlpZiAoIShsa21fZmxhZ3MgJiBETE1fTEtGX05PUVVFVUUpIHx8CkBAIC0xNzg5LDcgKzE4ODEsNyBAQAogICogb2NmczJfZmlsZV9sb2NrKCkgYW5kIG9jZnMyX2ZpbGVfdW5sb2NrKCkgbWFwIHRvIGEgc2luZ2xlIHBhaXIgb2YKICAqIGZsb2NrKCkgY2FsbHMuIFRoZSBsb2NraW5nIGFwcHJvYWNoIHRoaXMgcmVxdWlyZXMgaXMgc3VmZmljaWVudGx5CiAgKiBkaWZmZXJlbnQgZnJvbSBhbGwgb3RoZXIgY2x1c3RlciBsb2NrIHR5cGVzIHRoYXQgd2UgaW1wbGVtZW50IGEKLSAqIHNlcGVyYXRlIHBhdGggdG8gdGhlICJsb3ctbGV2ZWwiIGRsbSBjYWxscy4gSW4gcGFydGljdWxhcjoKKyAqIHNlcGFyYXRlIHBhdGggdG8gdGhlICJsb3ctbGV2ZWwiIGRsbSBjYWxscy4gSW4gcGFydGljdWxhcjoKICAqCiAgKiAtIE5vIG9wdGltaXphdGlvbiBvZiBsb2NrIGxldmVscyBpcyBkb25lIC0gd2UgdGFrZSBhdCBleGFjdGx5CiAgKiAgIHdoYXQncyBiZWVuIHJlcXVlc3RlZC4KQEAgLTE4NTksOCArMTk1MSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9ja3Jlcy0+bF9sb2NrLCBmbGFncyk7CiAKIAlyZXQgPSBvY2ZzMl9kbG1fbG9jayhvc2ItPmNjb25uLCBsZXZlbCwgJmxvY2tyZXMtPmxfbGtzYiwgbGttX2ZsYWdzLAotCQkJICAgICBsb2NrcmVzLT5sX25hbWUsIE9DRlMyX0xPQ0tfSURfTUFYX0xFTiAtIDEsCi0JCQkgICAgIGxvY2tyZXMpOworCQkJICAgICBsb2NrcmVzLT5sX25hbWUsIE9DRlMyX0xPQ0tfSURfTUFYX0xFTiAtIDEpOwogCWlmIChyZXQpIHsKIAkJaWYgKCF0cnlsb2NrIHx8IChyZXQgIT0gLUVBR0FJTikpIHsKIAkJCW9jZnMyX2xvZ19kbG1fZXJyb3IoIm9jZnMyX2RsbV9sb2NrIiwgcmV0LCBsb2NrcmVzKTsKQEAgLTI5ODksNyArMzA4MCw3IEBACiAJc3RhdHVzID0gb2NmczJfY2x1c3Rlcl9jb25uZWN0KG9zYi0+b3NiX2NsdXN0ZXJfc3RhY2ssCiAJCQkJICAgICAgIG9zYi0+dXVpZF9zdHIsCiAJCQkJICAgICAgIHN0cmxlbihvc2ItPnV1aWRfc3RyKSwKLQkJCQkgICAgICAgb2NmczJfZG9fbm9kZV9kb3duLCBvc2IsCisJCQkJICAgICAgICZscHJvdG8sIG9jZnMyX2RvX25vZGVfZG93biwgb3NiLAogCQkJCSAgICAgICAmY29ubik7CiAJaWYgKHN0YXR1cykgewogCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC0zMDU2LDUwICszMTQ3LDYgQEAKIAltbG9nX2V4aXRfdm9pZCgpOwogfQogCi1zdGF0aWMgdm9pZCBvY2ZzMl91bmxvY2tfYXN0KHZvaWQgKm9wYXF1ZSwgaW50IGVycm9yKQotewotCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqbG9ja3JlcyA9IG9wYXF1ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbWxvZ19lbnRyeV92b2lkKCk7Ci0KLQltbG9nKDAsICJVTkxPQ0sgQVNUIGNhbGxlZCBvbiBsb2NrICVzLCBhY3Rpb24gPSAlZFxuIiwgbG9ja3Jlcy0+bF9uYW1lLAotCSAgICAgbG9ja3Jlcy0+bF91bmxvY2tfYWN0aW9uKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKLQlpZiAoZXJyb3IpIHsKLQkJbWxvZyhNTF9FUlJPUiwgIkRsbSBwYXNzZXMgZXJyb3IgJWQgZm9yIGxvY2sgJXMsICIKLQkJICAgICAidW5sb2NrX2FjdGlvbiAlZFxuIiwgZXJyb3IsIGxvY2tyZXMtPmxfbmFtZSwKLQkJICAgICBsb2NrcmVzLT5sX3VubG9ja19hY3Rpb24pOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKLQkJbWxvZ19leGl0X3ZvaWQoKTsKLQkJcmV0dXJuOwotCX0KLQotCXN3aXRjaChsb2NrcmVzLT5sX3VubG9ja19hY3Rpb24pIHsKLQljYXNlIE9DRlMyX1VOTE9DS19DQU5DRUxfQ09OVkVSVDoKLQkJbWxvZygwLCAiQ2FuY2VsIGNvbnZlcnQgc3VjY2VzcyBmb3IgJXNcbiIsIGxvY2tyZXMtPmxfbmFtZSk7Ci0JCWxvY2tyZXMtPmxfYWN0aW9uID0gT0NGUzJfQVNUX0lOVkFMSUQ7Ci0JCS8qIERvd25jb252ZXJ0IHRocmVhZCBtYXkgaGF2ZSByZXF1ZXVlZCB0aGlzIGxvY2ssIHdlCi0JCSAqIG5lZWQgdG8gd2FrZSBpdC4gKi8KLQkJaWYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBPQ0ZTMl9MT0NLX0JMT0NLRUQpCi0JCQlvY2ZzMl93YWtlX2Rvd25jb252ZXJ0X3RocmVhZChvY2ZzMl9nZXRfbG9ja3Jlc19vc2IobG9ja3JlcykpOwotCQlicmVhazsKLQljYXNlIE9DRlMyX1VOTE9DS19EUk9QX0xPQ0s6Ci0JCWxvY2tyZXMtPmxfbGV2ZWwgPSBETE1fTE9DS19JVjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJQlVHKCk7Ci0JfQotCi0JbG9ja3Jlc19jbGVhcl9mbGFncyhsb2NrcmVzLCBPQ0ZTMl9MT0NLX0JVU1kpOwotCWxvY2tyZXMtPmxfdW5sb2NrX2FjdGlvbiA9IE9DRlMyX1VOTE9DS19JTlZBTElEOwotCXdha2VfdXAoJmxvY2tyZXMtPmxfZXZlbnQpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2tyZXMtPmxfbG9jaywgZmxhZ3MpOwotCi0JbWxvZ19leGl0X3ZvaWQoKTsKLX0KLQogc3RhdGljIGludCBvY2ZzMl9kcm9wX2xvY2soc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkgICBzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMpCiB7CkBAIC0zMTY3LDggKzMyMTQsNyBAQAogCiAJbWxvZygwLCAibG9jayAlc1xuIiwgbG9ja3Jlcy0+bF9uYW1lKTsKIAotCXJldCA9IG9jZnMyX2RsbV91bmxvY2sob3NiLT5jY29ubiwgJmxvY2tyZXMtPmxfbGtzYiwgbGttX2ZsYWdzLAotCQkJICAgICAgIGxvY2tyZXMpOworCXJldCA9IG9jZnMyX2RsbV91bmxvY2sob3NiLT5jY29ubiwgJmxvY2tyZXMtPmxfbGtzYiwgbGttX2ZsYWdzKTsKIAlpZiAocmV0KSB7CiAJCW9jZnMyX2xvZ19kbG1fZXJyb3IoIm9jZnMyX2RsbV91bmxvY2siLCByZXQsIGxvY2tyZXMpOwogCQltbG9nKE1MX0VSUk9SLCAibG9ja3JlcyBmbGFnczogJWx1XG4iLCBsb2NrcmVzLT5sX2ZsYWdzKTsKQEAgLTMyNzYsMTMgKzMzMjIsMjAgQEAKIAlCVUdfT04obG9ja3Jlcy0+bF9ibG9ja2luZyA8PSBETE1fTE9DS19OTCk7CiAKIAlpZiAobG9ja3Jlcy0+bF9sZXZlbCA8PSBuZXdfbGV2ZWwpIHsKLQkJbWxvZyhNTF9FUlJPUiwgImxvY2tyZXMtPmxfbGV2ZWwgKCVkKSA8PSBuZXdfbGV2ZWwgKCVkKVxuIiwKLQkJICAgICBsb2NrcmVzLT5sX2xldmVsLCBuZXdfbGV2ZWwpOworCQltbG9nKE1MX0VSUk9SLCAibG9ja3JlcyAlcywgbHZsICVkIDw9ICVkLCBibGNrbHN0ICVkLCBtYXNrICVkLCAiCisJCSAgICAgInR5cGUgJWQsIGZsYWdzIDB4JWx4LCBob2xkICVkICVkLCBhY3QgJWQgJWQsIHJlcSAlZCwgIgorCQkgICAgICJibG9jayAlZCwgcGdlbiAlZFxuIiwgbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2xldmVsLAorCQkgICAgIG5ld19sZXZlbCwgbGlzdF9lbXB0eSgmbG9ja3Jlcy0+bF9ibG9ja2VkX2xpc3QpLAorCQkgICAgIGxpc3RfZW1wdHkoJmxvY2tyZXMtPmxfbWFza193YWl0ZXJzKSwgbG9ja3Jlcy0+bF90eXBlLAorCQkgICAgIGxvY2tyZXMtPmxfZmxhZ3MsIGxvY2tyZXMtPmxfcm9faG9sZGVycywKKwkJICAgICBsb2NrcmVzLT5sX2V4X2hvbGRlcnMsIGxvY2tyZXMtPmxfYWN0aW9uLAorCQkgICAgIGxvY2tyZXMtPmxfdW5sb2NrX2FjdGlvbiwgbG9ja3Jlcy0+bF9yZXF1ZXN0ZWQsCisJCSAgICAgbG9ja3Jlcy0+bF9ibG9ja2luZywgbG9ja3Jlcy0+bF9wZW5kaW5nX2dlbik7CiAJCUJVRygpOwogCX0KIAotCW1sb2coMCwgImxvY2sgJXMsIG5ld19sZXZlbCA9ICVkLCBsX2Jsb2NraW5nID0gJWRcbiIsCi0JICAgICBsb2NrcmVzLT5sX25hbWUsIG5ld19sZXZlbCwgbG9ja3Jlcy0+bF9ibG9ja2luZyk7CisJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJXMsIGxldmVsICVkID0+ICVkLCBibG9ja2luZyAlZFxuIiwKKwkgICAgIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9sZXZlbCwgbmV3X2xldmVsLCBsb2NrcmVzLT5sX2Jsb2NraW5nKTsKIAogCWxvY2tyZXMtPmxfYWN0aW9uID0gT0NGUzJfQVNUX0RPV05DT05WRVJUOwogCWxvY2tyZXMtPmxfcmVxdWVzdGVkID0gbmV3X2xldmVsOwpAQCAtMzMwMSw2ICszMzU0LDkgQEAKIAogCW1sb2dfZW50cnlfdm9pZCgpOwogCisJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJXMsIGxldmVsICVkID0+ICVkXG4iLCBsb2NrcmVzLT5sX25hbWUsCisJICAgICBsb2NrcmVzLT5sX2xldmVsLCBuZXdfbGV2ZWwpOworCiAJaWYgKGx2YikKIAkJZGxtX2ZsYWdzIHw9IERMTV9MS0ZfVkFMQkxLOwogCkBAIC0zMzA5LDggKzMzNjUsNyBAQAogCQkJICAgICAmbG9ja3Jlcy0+bF9sa3NiLAogCQkJICAgICBkbG1fZmxhZ3MsCiAJCQkgICAgIGxvY2tyZXMtPmxfbmFtZSwKLQkJCSAgICAgT0NGUzJfTE9DS19JRF9NQVhfTEVOIC0gMSwKLQkJCSAgICAgbG9ja3Jlcyk7CisJCQkgICAgIE9DRlMyX0xPQ0tfSURfTUFYX0xFTiAtIDEpOwogCWxvY2tyZXNfY2xlYXJfcGVuZGluZyhsb2NrcmVzLCBnZW5lcmF0aW9uLCBvc2IpOwogCWlmIChyZXQpIHsKIAkJb2NmczJfbG9nX2RsbV9lcnJvcigib2NmczJfZGxtX2xvY2siLCByZXQsIGxvY2tyZXMpOwpAQCAtMzMzMSwxNCArMzM4NiwxMiBAQAogCWFzc2VydF9zcGluX2xvY2tlZCgmbG9ja3Jlcy0+bF9sb2NrKTsKIAogCW1sb2dfZW50cnlfdm9pZCgpOwotCW1sb2coMCwgImxvY2sgJXNcbiIsIGxvY2tyZXMtPmxfbmFtZSk7CiAKIAlpZiAobG9ja3Jlcy0+bF91bmxvY2tfYWN0aW9uID09IE9DRlMyX1VOTE9DS19DQU5DRUxfQ09OVkVSVCkgewogCQkvKiBJZiB3ZSdyZSBhbHJlYWR5IHRyeWluZyB0byBjYW5jZWwgYSBsb2NrIGNvbnZlcnNpb24KIAkJICogdGhlbiBqdXN0IGRyb3AgdGhlIHNwaW5sb2NrIGFuZCBhbGxvdyB0aGUgY2FsbGVyIHRvCiAJCSAqIHJlcXVldWUgdGhpcyBsb2NrLiAqLwotCi0JCW1sb2coMCwgIkxvY2tyZXMgJXMsIHNraXAgY29udmVydFxuIiwgbG9ja3Jlcy0+bF9uYW1lKTsKKwkJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJXMsIHNraXAgY29udmVydFxuIiwgbG9ja3Jlcy0+bF9uYW1lKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zMzUzLDYgKzM0MDYsOCBAQAogCQkJImxvY2sgJXMsIGludmFsaWQgZmxhZ3M6IDB4JWx4XG4iLAogCQkJbG9ja3Jlcy0+bF9uYW1lLCBsb2NrcmVzLT5sX2ZsYWdzKTsKIAorCW1sb2coTUxfQkFTVFMsICJsb2NrcmVzICVzXG4iLCBsb2NrcmVzLT5sX25hbWUpOworCiAJcmV0dXJuIDE7CiB9CiAKQEAgLTMzNjIsMTYgKzM0MTcsMTUgQEAKIAlpbnQgcmV0OwogCiAJbWxvZ19lbnRyeV92b2lkKCk7Ci0JbWxvZygwLCAibG9jayAlc1xuIiwgbG9ja3Jlcy0+bF9uYW1lKTsKIAogCXJldCA9IG9jZnMyX2RsbV91bmxvY2sob3NiLT5jY29ubiwgJmxvY2tyZXMtPmxfbGtzYiwKLQkJCSAgICAgICBETE1fTEtGX0NBTkNFTCwgbG9ja3Jlcyk7CisJCQkgICAgICAgRExNX0xLRl9DQU5DRUwpOwogCWlmIChyZXQpIHsKIAkJb2NmczJfbG9nX2RsbV9lcnJvcigib2NmczJfZGxtX3VubG9jayIsIHJldCwgbG9ja3Jlcyk7CiAJCW9jZnMyX3JlY292ZXJfZnJvbV9kbG1fZXJyb3IobG9ja3JlcywgMCk7CiAJfQogCi0JbWxvZygwLCAibG9jayAlcyByZXR1cm4gZnJvbSBvY2ZzMl9kbG1fdW5sb2NrXG4iLCBsb2NrcmVzLT5sX25hbWUpOworCW1sb2coTUxfQkFTVFMsICJsb2NrcmVzICVzXG4iLCBsb2NrcmVzLT5sX25hbWUpOwogCiAJbWxvZ19leGl0KHJldCk7CiAJcmV0dXJuIHJldDsKQEAgLTM0MjgsOCArMzQ4MiwxMSBAQAogCQkgKiBhdCB0aGUgc2FtZSB0aW1lIHRoZXkgc2V0IE9DRlMyX0RMTV9CVVNZLiAgVGhleSBtdXN0CiAJCSAqIGNsZWFyIE9DRlMyX0RMTV9QRU5ESU5HIGFmdGVyIGRsbV9sb2NrKCkgcmV0dXJucy4KIAkJICovCi0JCWlmIChsb2NrcmVzLT5sX2ZsYWdzICYgT0NGUzJfTE9DS19QRU5ESU5HKQorCQlpZiAobG9ja3Jlcy0+bF9mbGFncyAmIE9DRlMyX0xPQ0tfUEVORElORykgeworCQkJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJXMsIFJlUTogUGVuZGluZ1xuIiwKKwkJCSAgICAgbG9ja3Jlcy0+bF9uYW1lKTsKIAkJCWdvdG8gbGVhdmVfcmVxdWV1ZTsKKwkJfQogCiAJCWN0bC0+cmVxdWV1ZSA9IDE7CiAJCXJldCA9IG9jZnMyX3ByZXBhcmVfY2FuY2VsX2NvbnZlcnQob3NiLCBsb2NrcmVzKTsKQEAgLTM0NjEsNiArMzUxOCw3IEBACiAJICovCiAJaWYgKGxvY2tyZXMtPmxfbGV2ZWwgPT0gRExNX0xPQ0tfTkwpIHsKIAkJQlVHX09OKGxvY2tyZXMtPmxfZXhfaG9sZGVycyB8fCBsb2NrcmVzLT5sX3JvX2hvbGRlcnMpOworCQltbG9nKE1MX0JBU1RTLCAibG9ja3JlcyAlcywgQWJvcnRpbmcgZGNcbiIsIGxvY2tyZXMtPmxfbmFtZSk7CiAJCWxvY2tyZXMtPmxfYmxvY2tpbmcgPSBETE1fTE9DS19OTDsKIAkJbG9ja3Jlc19jbGVhcl9mbGFncyhsb2NrcmVzLCBPQ0ZTMl9MT0NLX0JMT0NLRUQpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKQEAgLTM0NzAsMjggKzM1MjgsNDEgQEAKIAkvKiBpZiB3ZSdyZSBibG9ja2luZyBhbiBleGNsdXNpdmUgYW5kIHdlIGhhdmUgKmFueSogaG9sZGVycywKIAkgKiB0aGVuIHJlcXVldWUuICovCiAJaWYgKChsb2NrcmVzLT5sX2Jsb2NraW5nID09IERMTV9MT0NLX0VYKQotCSAgICAmJiAobG9ja3Jlcy0+bF9leF9ob2xkZXJzIHx8IGxvY2tyZXMtPmxfcm9faG9sZGVycykpCisJICAgICYmIChsb2NrcmVzLT5sX2V4X2hvbGRlcnMgfHwgbG9ja3Jlcy0+bF9yb19ob2xkZXJzKSkgeworCQltbG9nKE1MX0JBU1RTLCAibG9ja3JlcyAlcywgUmVROiBFWC9QUiBIb2xkZXJzICV1LCV1XG4iLAorCQkgICAgIGxvY2tyZXMtPmxfbmFtZSwgbG9ja3Jlcy0+bF9leF9ob2xkZXJzLAorCQkgICAgIGxvY2tyZXMtPmxfcm9faG9sZGVycyk7CiAJCWdvdG8gbGVhdmVfcmVxdWV1ZTsKKwl9CiAKIAkvKiBJZiBpdCdzIGEgUFIgd2UncmUgYmxvY2tpbmcsIHRoZW4gb25seQogCSAqIHJlcXVldWUgaWYgd2UndmUgZ290IGFueSBFWCBob2xkZXJzICovCiAJaWYgKGxvY2tyZXMtPmxfYmxvY2tpbmcgPT0gRExNX0xPQ0tfUFIgJiYKLQkgICAgbG9ja3Jlcy0+bF9leF9ob2xkZXJzKQorCSAgICBsb2NrcmVzLT5sX2V4X2hvbGRlcnMpIHsKKwkJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJXMsIFJlUTogRVggSG9sZGVycyAldVxuIiwKKwkJICAgICBsb2NrcmVzLT5sX25hbWUsIGxvY2tyZXMtPmxfZXhfaG9sZGVycyk7CiAJCWdvdG8gbGVhdmVfcmVxdWV1ZTsKKwl9CiAKIAkvKgogCSAqIENhbiB3ZSBnZXQgYSBsb2NrIGluIHRoaXMgc3RhdGUgaWYgdGhlIGhvbGRlciBjb3VudHMgYXJlCiAJICogemVybz8gVGhlIG1ldGEgZGF0YSB1bmJsb2NrIGNvZGUgdXNlZCB0byBjaGVjayB0aGlzLgogCSAqLwogCWlmICgobG9ja3Jlcy0+bF9vcHMtPmZsYWdzICYgTE9DS19UWVBFX1JFUVVJUkVTX1JFRlJFU0gpCi0JICAgICYmIChsb2NrcmVzLT5sX2ZsYWdzICYgT0NGUzJfTE9DS19SRUZSRVNISU5HKSkKKwkgICAgJiYgKGxvY2tyZXMtPmxfZmxhZ3MgJiBPQ0ZTMl9MT0NLX1JFRlJFU0hJTkcpKSB7CisJCW1sb2coTUxfQkFTVFMsICJsb2NrcmVzICVzLCBSZVE6IExvY2sgUmVmcmVzaGluZ1xuIiwKKwkJICAgICBsb2NrcmVzLT5sX25hbWUpOwogCQlnb3RvIGxlYXZlX3JlcXVldWU7CisJfQogCiAJbmV3X2xldmVsID0gb2NmczJfaGlnaGVzdF9jb21wYXRfbG9ja19sZXZlbChsb2NrcmVzLT5sX2Jsb2NraW5nKTsKIAogCWlmIChsb2NrcmVzLT5sX29wcy0+Y2hlY2tfZG93bmNvbnZlcnQKLQkgICAgJiYgIWxvY2tyZXMtPmxfb3BzLT5jaGVja19kb3duY29udmVydChsb2NrcmVzLCBuZXdfbGV2ZWwpKQorCSAgICAmJiAhbG9ja3Jlcy0+bF9vcHMtPmNoZWNrX2Rvd25jb252ZXJ0KGxvY2tyZXMsIG5ld19sZXZlbCkpIHsKKwkJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJXMsIFJlUTogQ2hlY2twb2ludGluZ1xuIiwKKwkJICAgICBsb2NrcmVzLT5sX25hbWUpOwogCQlnb3RvIGxlYXZlX3JlcXVldWU7CisJfQogCiAJLyogSWYgd2UgZ2V0IGhlcmUsIHRoZW4gd2Uga25vdyB0aGF0IHRoZXJlIGFyZSBubyBtb3JlCiAJICogaW5jb21wYXRpYmxlIGhvbGRlcnMgKGFuZCBhbnlvbmUgYXNraW5nIGZvciBhbiBpbmNvbXBhdGlibGUKQEAgLTM1MDksMTMgKzM1ODAsMTkgQEAKIAogCWN0bC0+dW5ibG9ja19hY3Rpb24gPSBsb2NrcmVzLT5sX29wcy0+ZG93bmNvbnZlcnRfd29ya2VyKGxvY2tyZXMsIGJsb2NraW5nKTsKIAotCWlmIChjdGwtPnVuYmxvY2tfYWN0aW9uID09IFVOQkxPQ0tfU1RPUF9QT1NUKQorCWlmIChjdGwtPnVuYmxvY2tfYWN0aW9uID09IFVOQkxPQ0tfU1RPUF9QT1NUKSB7CisJCW1sb2coTUxfQkFTVFMsICJsb2NrcmVzICVzLCBVTkJMT0NLX1NUT1BfUE9TVFxuIiwKKwkJICAgICBsb2NrcmVzLT5sX25hbWUpOwogCQlnb3RvIGxlYXZlOworCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKIAlpZiAoKGJsb2NraW5nICE9IGxvY2tyZXMtPmxfYmxvY2tpbmcpIHx8IChsZXZlbCAhPSBsb2NrcmVzLT5sX2xldmVsKSkgewogCQkvKiBJZiB0aGlzIGNoYW5nZWQgdW5kZXJuZWF0aCB1cywgdGhlbiB3ZSBjYW4ndCBkcm9wCiAJCSAqIGl0IGp1c3QgeWV0LiAqLworCQltbG9nKE1MX0JBU1RTLCAibG9ja3JlcyAlcywgYmxvY2s9JWQ6JWQsIGxldmVsPSVkOiVkLCAiCisJCSAgICAgIlJlY2hlY2tcbiIsIGxvY2tyZXMtPmxfbmFtZSwgYmxvY2tpbmcsCisJCSAgICAgbG9ja3Jlcy0+bF9ibG9ja2luZywgbGV2ZWwsIGxvY2tyZXMtPmxfbGV2ZWwpOwogCQlnb3RvIHJlY2hlY2s7CiAJfQogCkBAIC0zOTEwLDQ1ICszOTg3LDYgQEAKIAkJb2NmczJfY2x1c3Rlcl91bmxvY2sob3NiLCBsb2NrcmVzLCBsZXZlbCk7CiB9CiAKLS8qCi0gKiBUaGlzIGlzIHRoZSBmaWxlc3lzdGVtIGxvY2tpbmcgcHJvdG9jb2wuICBJdCBwcm92aWRlcyB0aGUgbG9jayBoYW5kbGluZwotICogaG9va3MgZm9yIHRoZSB1bmRlcmx5aW5nIERMTS4gIEl0IGhhcyBhIG1heGltdW0gdmVyc2lvbiBudW1iZXIuCi0gKiBUaGUgdmVyc2lvbiBudW1iZXIgYWxsb3dzIGludGVyb3BlcmFiaWxpdHkgd2l0aCBzeXN0ZW1zIHJ1bm5pbmcgYXQKLSAqIHRoZSBzYW1lIG1ham9yIG51bWJlciBhbmQgYW4gZXF1YWwgb3Igc21hbGxlciBtaW5vciBudW1iZXIuCi0gKgotICogV2hlbmV2ZXIgdGhlIGZpbGVzeXN0ZW0gZG9lcyBuZXcgdGhpbmdzIHdpdGggbG9ja3MgKGFkZHMgb3IgcmVtb3ZlcyBhCi0gKiBsb2NrLCBvcmRlcnMgdGhlbSBkaWZmZXJlbnRseSwgZG9lcyBkaWZmZXJlbnQgdGhpbmdzIHVuZGVybmVhdGggYSBsb2NrKSwKLSAqIHRoZSB2ZXJzaW9uIG11c3QgYmUgY2hhbmdlZC4gIFRoZSBwcm90b2NvbCBpcyBuZWdvdGlhdGVkIHdoZW4gam9pbmluZwotICogdGhlIGRsbSBkb21haW4uICBBIG5vZGUgbWF5IGpvaW4gdGhlIGRvbWFpbiBpZiBpdHMgbWFqb3IgdmVyc2lvbiBpcwotICogaWRlbnRpY2FsIHRvIGFsbCBvdGhlciBub2RlcyBhbmQgaXRzIG1pbm9yIHZlcnNpb24gaXMgZ3JlYXRlciB0aGFuCi0gKiBvciBlcXVhbCB0byBhbGwgb3RoZXIgbm9kZXMuICBXaGVuIGl0cyBtaW5vciB2ZXJzaW9uIGlzIGdyZWF0ZXIgdGhhbgotICogdGhlIG90aGVyIG5vZGVzLCBpdCB3aWxsIHJ1biBhdCB0aGUgbWlub3IgdmVyc2lvbiBzcGVjaWZpZWQgYnkgdGhlCi0gKiBvdGhlciBub2Rlcy4KLSAqCi0gKiBJZiBhIGxvY2tpbmcgY2hhbmdlIGlzIG1hZGUgdGhhdCB3aWxsIG5vdCBiZSBjb21wYXRpYmxlIHdpdGggb2xkZXIKLSAqIHZlcnNpb25zLCB0aGUgbWFqb3IgbnVtYmVyIG11c3QgYmUgaW5jcmVhc2VkIGFuZCB0aGUgbWlub3IgdmVyc2lvbiBzZXQKLSAqIHRvIHplcm8uICBJZiBhIGNoYW5nZSBtZXJlbHkgYWRkcyBhIGJlaGF2aW9yIHRoYXQgY2FuIGJlIGRpc2FibGVkIHdoZW4KLSAqIHNwZWFraW5nIHRvIG9sZGVyIHZlcnNpb25zLCB0aGUgbWlub3IgdmVyc2lvbiBtdXN0IGJlIGluY3JlYXNlZC4gIElmIGEKLSAqIGNoYW5nZSBhZGRzIGEgZnVsbHkgYmFja3dhcmRzIGNvbXBhdGlibGUgY2hhbmdlIChlZywgTFZCIGNoYW5nZXMgdGhhdAotICogYXJlIGp1c3QgaWdub3JlZCBieSBvbGRlciB2ZXJzaW9ucyksIHRoZSB2ZXJzaW9uIGRvZXMgbm90IG5lZWQgdG8gYmUKLSAqIHVwZGF0ZWQuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgb2NmczJfbG9ja2luZ19wcm90b2NvbCBscHJvdG8gPSB7Ci0JLmxwX21heF92ZXJzaW9uID0gewotCQkucHZfbWFqb3IgPSBPQ0ZTMl9MT0NLSU5HX1BST1RPQ09MX01BSk9SLAotCQkucHZfbWlub3IgPSBPQ0ZTMl9MT0NLSU5HX1BST1RPQ09MX01JTk9SLAotCX0sCi0JLmxwX2xvY2tfYXN0CQk9IG9jZnMyX2xvY2tpbmdfYXN0LAotCS5scF9ibG9ja2luZ19hc3QJPSBvY2ZzMl9ibG9ja2luZ19hc3QsCi0JLmxwX3VubG9ja19hc3QJCT0gb2NmczJfdW5sb2NrX2FzdCwKLX07Ci0KLXZvaWQgb2NmczJfc2V0X2xvY2tpbmdfcHJvdG9jb2wodm9pZCkKLXsKLQlvY2ZzMl9zdGFja19nbHVlX3NldF9sb2NraW5nX3Byb3RvY29sKCZscHJvdG8pOwotfQotCi0KIHN0YXRpYyB2b2lkIG9jZnMyX3Byb2Nlc3NfYmxvY2tlZF9sb2NrKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAogCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmxvY2tyZXMpCiB7CkBAIC0zOTY1LDcgKzQwMDMsNyBAQAogCUJVR19PTighbG9ja3Jlcyk7CiAJQlVHX09OKCFsb2NrcmVzLT5sX29wcyk7CiAKLQltbG9nKDAsICJsb2NrcmVzICVzIGJsb2NrZWQuXG4iLCBsb2NrcmVzLT5sX25hbWUpOworCW1sb2coTUxfQkFTVFMsICJsb2NrcmVzICVzIGJsb2NrZWRcbiIsIGxvY2tyZXMtPmxfbmFtZSk7CiAKIAkvKiBEZXRlY3Qgd2hldGhlciBhIGxvY2sgaGFzIGJlZW4gbWFya2VkIGFzIGdvaW5nIGF3YXkgd2hpbGUKIAkgKiB0aGUgZG93bmNvbnZlcnQgdGhyZWFkIHdhcyBwcm9jZXNzaW5nIG90aGVyIHRoaW5ncy4gQSBsb2NrIGNhbgpAQCAtMzk4OCw3ICs0MDI2LDcgQEAKIAl9IGVsc2UKIAkJb2NmczJfc2NoZWR1bGVfYmxvY2tlZF9sb2NrKG9zYiwgbG9ja3Jlcyk7CiAKLQltbG9nKDAsICJsb2NrcmVzICVzLCByZXF1ZXVlID0gJXMuXG4iLCBsb2NrcmVzLT5sX25hbWUsCisJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJXMsIHJlcXVldWUgPSAlcy5cbiIsIGxvY2tyZXMtPmxfbmFtZSwKIAkgICAgIGN0bC5yZXF1ZXVlID8gInllcyIgOiAibm8iKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NrcmVzLT5sX2xvY2ssIGZsYWdzKTsKIApAQCAtNDAxMCw3ICs0MDQ4LDcgQEAKIAkJLyogRG8gbm90IHNjaGVkdWxlIGEgbG9jayBmb3IgZG93bmNvbnZlcnQgd2hlbiBpdCdzIG9uCiAJCSAqIHRoZSB3YXkgdG8gZGVzdHJ1Y3Rpb24gLSBhbnkgbm9kZXMgd2FudGluZyBhY2Nlc3MKIAkJICogdG8gdGhlIHJlc291cmNlIHdpbGwgZ2V0IGl0IHNvb24uICovCi0JCW1sb2coMCwgIkxvY2tyZXMgJXMgd29uJ3QgYmUgc2NoZWR1bGVkOiBmbGFncyAweCVseFxuIiwKKwkJbWxvZyhNTF9CQVNUUywgImxvY2tyZXMgJXMgd29uJ3QgYmUgc2NoZWR1bGVkOiBmbGFncyAweCVseFxuIiwKIAkJICAgICBsb2NrcmVzLT5sX25hbWUsIGxvY2tyZXMtPmxfZmxhZ3MpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZXh0ZW50X21hcC5jIGIvZnMvb2NmczIvZXh0ZW50X21hcC5jCmluZGV4IDUzMjg1MjkuLmM1NjJhNzUgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2V4dGVudF9tYXAuYworKysgYi9mcy9vY2ZzMi9leHRlbnRfbWFwLmMKQEAgLTQ1Myw3ICs0NTMsNyBAQAogCWlmIChpID09IC0xKSB7CiAJCS8qCiAJCSAqIEhvbGVzIGNhbiBiZSBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBzaXplIG9mIGFuCi0JCSAqIGV4dGVudCwgc28gd2UgcmV0dXJuIHRoZWlyIGxlbmd0aHMgaW4gYSBzZXBlcmF0ZQorCQkgKiBleHRlbnQsIHNvIHdlIHJldHVybiB0aGVpciBsZW5ndGhzIGluIGEgc2VwYXJhdGUKIAkJICogZmllbGQuCiAJCSAqLwogCQlpZiAoaG9sZV9sZW4pIHsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2ZpbGUuYyBiL2ZzL29jZnMyL2ZpbGUuYwppbmRleCA1NThjZTAzLi4xNzk0N2RjIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9maWxlLmMKKysrIGIvZnMvb2NmczIvZmlsZS5jCkBAIC0xMDcsNiArMTA3LDkgQEAKIAltbG9nX2VudHJ5KCIoMHglcCwgMHglcCwgJyUuKnMnKVxuIiwgaW5vZGUsIGZpbGUsCiAJCSAgIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5sZW4sIGZpbGUtPmZfcGF0aC5kZW50cnktPmRfbmFtZS5uYW1lKTsKIAorCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9XUklURSkKKwkJZHF1b3RfaW5pdGlhbGl6ZShpbm9kZSk7CisKIAlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKIAogCS8qIENoZWNrIHRoYXQgdGhlIGlub2RlIGhhc24ndCBiZWVuIHdpcGVkIGZyb20gZGlzayBieSBhbm90aGVyCkBAIC02MjksMTEgKzYzMiwxMCBAQAogCX0KIAogcmVzdGFydGVkX3RyYW5zYWN0aW9uOgotCWlmICh2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMob3NiLT5zYiwKLQkgICAgY2x1c3RlcnNfdG9fYWRkKSkpIHsKLQkJc3RhdHVzID0gLUVEUVVPVDsKKwlzdGF0dXMgPSBkcXVvdF9hbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLAorCQkJb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMob3NiLT5zYiwgY2x1c3RlcnNfdG9fYWRkKSk7CisJaWYgKHN0YXR1cykKIAkJZ290byBsZWF2ZTsKLQl9CiAJZGlkX3F1b3RhID0gMTsKIAogCS8qIHJlc2VydmUgYSB3cml0ZSB0byB0aGUgZmlsZSBlbnRyeSBlYXJseSBvbiAtIHRoYXQgd2UgaWYgd2UKQEAgLTY3NCw3ICs2NzYsNyBAQAogCWNsdXN0ZXJzX3RvX2FkZCAtPSAoT0NGUzJfSShpbm9kZSktPmlwX2NsdXN0ZXJzIC0gcHJldl9jbHVzdGVycyk7CiAJc3Bpbl91bmxvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9sb2NrKTsKIAkvKiBSZWxlYXNlIHVudXNlZCBxdW90YSByZXNlcnZhdGlvbiAqLwotCXZmc19kcV9mcmVlX3NwYWNlKGlub2RlLAorCWRxdW90X2ZyZWVfc3BhY2UoaW5vZGUsCiAJCQlvY2ZzMl9jbHVzdGVyc190b19ieXRlcyhvc2ItPnNiLCBjbHVzdGVyc190b19hZGQpKTsKIAlkaWRfcXVvdGEgPSAwOwogCkBAIC03MTAsNyArNzEyLDcgQEAKIAogbGVhdmU6CiAJaWYgKHN0YXR1cyA8IDAgJiYgZGlkX3F1b3RhKQotCQl2ZnNfZHFfZnJlZV9zcGFjZShpbm9kZSwKKwkJZHF1b3RfZnJlZV9zcGFjZShpbm9kZSwKIAkJCW9jZnMyX2NsdXN0ZXJzX3RvX2J5dGVzKG9zYi0+c2IsIGNsdXN0ZXJzX3RvX2FkZCkpOwogCWlmIChoYW5kbGUpIHsKIAkJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKQEAgLTk3OCw2ICs5ODAsOCBAQAogCiAJc2l6ZV9jaGFuZ2UgPSBTX0lTUkVHKGlub2RlLT5pX21vZGUpICYmIGF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFOwogCWlmIChzaXplX2NoYW5nZSkgeworCQlkcXVvdF9pbml0aWFsaXplKGlub2RlKTsKKwogCQlzdGF0dXMgPSBvY2ZzMl9yd19sb2NrKGlub2RlLCAxKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKIAkJCW1sb2dfZXJybm8oc3RhdHVzKTsKQEAgLTk5MywxMCArOTk3LDkgQEAKIAl9CiAKIAlpZiAoc2l6ZV9jaGFuZ2UgJiYgYXR0ci0+aWFfc2l6ZSAhPSBpX3NpemVfcmVhZChpbm9kZSkpIHsKLQkJaWYgKGF0dHItPmlhX3NpemUgPiBzYi0+c19tYXhieXRlcykgewotCQkJc3RhdHVzID0gLUVGQklHOworCQlzdGF0dXMgPSBpbm9kZV9uZXdzaXplX29rKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKKwkJaWYgKHN0YXR1cykKIAkJCWdvdG8gYmFpbF91bmxvY2s7Ci0JCX0KIAogCQlpZiAoaV9zaXplX3JlYWQoaW5vZGUpID4gYXR0ci0+aWFfc2l6ZSkgewogCQkJaWYgKG9jZnMyX3Nob3VsZF9vcmRlcl9kYXRhKGlub2RlKSkgewpAQCAtMTAyMSw3ICsxMDI0LDcgQEAKIAkJLyoKIAkJICogR2F0aGVyIHBvaW50ZXJzIHRvIHF1b3RhIHN0cnVjdHVyZXMgc28gdGhhdCBhbGxvY2F0aW9uIC8KIAkJICogZnJlZWluZyBvZiBxdW90YSBzdHJ1Y3R1cmVzIGhhcHBlbnMgaGVyZSBhbmQgbm90IGluc2lkZQotCQkgKiB2ZnNfZHFfdHJhbnNmZXIoKSB3aGVyZSB3ZSBoYXZlIHByb2JsZW1zIHdpdGggbG9jayBvcmRlcmluZworCQkgKiBkcXVvdF90cmFuc2ZlcigpIHdoZXJlIHdlIGhhdmUgcHJvYmxlbXMgd2l0aCBsb2NrIG9yZGVyaW5nCiAJCSAqLwogCQlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1VJRCAmJiBhdHRyLT5pYV91aWQgIT0gaW5vZGUtPmlfdWlkCiAJCSAgICAmJiBPQ0ZTMl9IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoc2IsCkBAIC0xMDU0LDcgKzEwNTcsNyBAQAogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byBiYWlsX3VubG9jazsKIAkJfQotCQlzdGF0dXMgPSB2ZnNfZHFfdHJhbnNmZXIoaW5vZGUsIGF0dHIpID8gLUVEUVVPVCA6IDA7CisJCXN0YXR1cyA9IGRxdW90X3RyYW5zZmVyKGlub2RlLCBhdHRyKTsKIAkJaWYgKHN0YXR1cyA8IDApCiAJCQlnb3RvIGJhaWxfY29tbWl0OwogCX0gZWxzZSB7CkBAIC0xODM2LDYgKzE4MzksOCBAQAogCQkJCQkJCSAgICAgICAmbWV0YV9sZXZlbCk7CiAJCQlpZiAoaGFzX3JlZmNvdW50KQogCQkJCSpoYXNfcmVmY291bnQgPSAxOworCQkJaWYgKGRpcmVjdF9pbykKKwkJCQkqZGlyZWN0X2lvID0gMDsKIAkJfQogCiAJCWlmIChyZXQgPCAwKSB7CkBAIC0xODU5LDEwICsxODY0LDYgQEAKIAkJCWJyZWFrOwogCQl9CiAKLQkJaWYgKGhhc19yZWZjb3VudCAmJiAqaGFzX3JlZmNvdW50ID09IDEpIHsKLQkJCSpkaXJlY3RfaW8gPSAwOwotCQkJYnJlYWs7Ci0JCX0KIAkJLyoKIAkJICogQWxsb3dpbmcgY29uY3VycmVudCBkaXJlY3Qgd3JpdGVzIG1lYW5zCiAJCSAqIGlfc2l6ZSBjaGFuZ2VzIHdvdWxkbid0IGJlIHN5bmNocm9uaXplZCwgc28KQEAgLTIwNDMsNyArMjA0NCw3IEBACiAJICogYXN5bmMgZGlvIGlzIGdvaW5nIHRvIGRvIGl0IGluIHRoZSBmdXR1cmUgb3IgYW4gZW5kX2lvIGFmdGVyIGFuCiAJICogZXJyb3IgaGFzIGFscmVhZHkgZG9uZSBpdC4KIAkgKi8KLQlpZiAocmV0ID09IC1FSU9DQlFVRVVFRCB8fCAhb2NmczJfaW9jYl9pc19yd19sb2NrZWQoaW9jYikpIHsKKwlpZiAoKHJldCA9PSAtRUlPQ0JRVUVVRUQpIHx8ICghb2NmczJfaW9jYl9pc19yd19sb2NrZWQoaW9jYikpKSB7CiAJCXJ3X2xldmVsID0gLTE7CiAJCWhhdmVfYWxsb2Nfc2VtID0gMDsKIAl9CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9pbm9kZS5jIGIvZnMvb2NmczIvaW5vZGUuYwppbmRleCA4ODQ1OWJkLi4yNzhhMjIzIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9pbm9kZS5jCisrKyBiL2ZzL29jZnMyL2lub2RlLmMKQEAgLTY2NSw3ICs2NjUsNyBAQAogCX0KIAogCW9jZnMyX3JlbW92ZV9mcm9tX2NhY2hlKElOT0RFX0NBQ0hFKGlub2RlKSwgZGlfYmgpOwotCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKKwlkcXVvdF9mcmVlX2lub2RlKGlub2RlKTsKIAogCXN0YXR1cyA9IG9jZnMyX2ZyZWVfZGlub2RlKGhhbmRsZSwgaW5vZGVfYWxsb2NfaW5vZGUsCiAJCQkJICAgaW5vZGVfYWxsb2NfYmgsIGRpKTsKQEAgLTk3MSw2ICs5NzEsOCBAQAogCQlnb3RvIGJhaWw7CiAJfQogCisJZHF1b3RfaW5pdGlhbGl6ZShpbm9kZSk7CisKIAlpZiAoIW9jZnMyX2lub2RlX2lzX3ZhbGlkX3RvX2RlbGV0ZShpbm9kZSkpIHsKIAkJLyogSXQncyBwcm9iYWJseSBub3QgbmVjZXNzYXJ5IHRvIHRydW5jYXRlX2lub2RlX3BhZ2VzCiAJCSAqIGhlcmUgYnV0IHdlIGRvIGl0IGZvciBzYWZldHkgYW55d2F5IChpdCB3aWxsIG1vc3QKQEAgLTEwODcsNiArMTA4OSw4IEBACiAJbWxvZ19idWdfb25fbXNnKE9DRlMyX1NCKGlub2RlLT5pX3NiKSA9PSBOVUxMLAogCQkJIklub2RlPSVsdVxuIiwgaW5vZGUtPmlfaW5vKTsKIAorCWRxdW90X2Ryb3AoaW5vZGUpOworCiAJLyogVG8gcHJldmVuIHJlbW90ZSBkZWxldGVzIHdlIGhvbGQgb3BlbiBsb2NrIGJlZm9yZSwgbm93IGl0CiAJICogaXMgdGltZSB0byB1bmxvY2sgUFIgYW5kIEVYIG9wZW4gbG9ja3MuICovCiAJb2NmczJfb3Blbl91bmxvY2soaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvaW9jdGwuaCBiL2ZzL29jZnMyL2lvY3RsLmgKaW5kZXggY2Y5YTVlZS4uMGNkNTMyMyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvaW9jdGwuaAorKysgYi9mcy9vY2ZzMi9pb2N0bC5oCkBAIC03LDEwICs3LDEwIEBACiAgKgogICovCiAKLSNpZm5kZWYgT0NGUzJfSU9DVExfSAotI2RlZmluZSBPQ0ZTMl9JT0NUTF9ICisjaWZuZGVmIE9DRlMyX0lPQ1RMX1BST1RPX0gKKyNkZWZpbmUgT0NGUzJfSU9DVExfUFJPVE9fSAogCiBsb25nIG9jZnMyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBsb25nIG9jZnMyX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAKLSNlbmRpZiAvKiBPQ0ZTMl9JT0NUTF9IICovCisjZW5kaWYgLyogT0NGUzJfSU9DVExfUFJPVE9fSCAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvbG9jYWxhbGxvYy5jIGIvZnMvb2NmczIvbG9jYWxhbGxvYy5jCmluZGV4IGFjMTBmODMuLmNhOTkyZDkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL2xvY2FsYWxsb2MuYworKysgYi9mcy9vY2ZzMi9sb2NhbGFsbG9jLmMKQEAgLTQ3Niw3ICs0NzYsNyBAQAogCiBvdXQ6CiAJaWYgKCFzdGF0dXMpCi0JCW9jZnMyX2luaXRfaW5vZGVfc3RlYWxfc2xvdChvc2IpOworCQlvY2ZzMl9pbml0X3N0ZWFsX3Nsb3RzKG9zYik7CiAJbWxvZ19leGl0KHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL25hbWVpLmMgYi9mcy9vY2ZzMi9uYW1laS5jCmluZGV4IDUwZmIyNmEuLmQ5Y2Q0ZTMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL25hbWVpLmMKKysrIGIvZnMvb2NmczIvbmFtZWkuYwpAQCAtMjEyLDcgKzIxMiw3IEBACiAJfSBlbHNlCiAJCWlub2RlLT5pX2dpZCA9IGN1cnJlbnRfZnNnaWQoKTsKIAlpbm9kZS0+aV9tb2RlID0gbW9kZTsKLQl2ZnNfZHFfaW5pdChpbm9kZSk7CisJZHF1b3RfaW5pdGlhbGl6ZShpbm9kZSk7CiAJcmV0dXJuIGlub2RlOwogfQogCkBAIC0yNDQsNiArMjQ0LDggQEAKIAkJICAgKHVuc2lnbmVkIGxvbmcpZGV2LCBkZW50cnktPmRfbmFtZS5sZW4sCiAJCSAgIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCisJZHF1b3RfaW5pdGlhbGl6ZShkaXIpOworCiAJLyogZ2V0IG91ciBzdXBlciBibG9jayAqLwogCW9zYiA9IE9DRlMyX1NCKGRpci0+aV9zYik7CiAKQEAgLTM0OCwxMyArMzUwLDkgQEAKIAkJZ290byBsZWF2ZTsKIAl9CiAKLQkvKiBXZSBkb24ndCB1c2Ugc3RhbmRhcmQgVkZTIHdyYXBwZXIgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHZmc19kcV9pbml0Ci0JICogdG8gYmUgY2FsbGVkLiAqLwotCWlmIChzYl9hbnlfcXVvdGFfYWN0aXZlKG9zYi0+c2IpICYmCi0JICAgIG9zYi0+c2ItPmRxX29wLT5hbGxvY19pbm9kZShpbm9kZSwgMSkgPT0gTk9fUVVPVEEpIHsKLQkJc3RhdHVzID0gLUVEUVVPVDsKKwlzdGF0dXMgPSBkcXVvdF9hbGxvY19pbm9kZShpbm9kZSk7CisJaWYgKHN0YXR1cykKIAkJZ290byBsZWF2ZTsKLQl9CiAJZGlkX3F1b3RhX2lub2RlID0gMTsKIAogCW1sb2dfZW50cnkoIigweCVwLCAweCVwLCAlZCwgJWx1LCAnJS4qcycpXG4iLCBkaXIsIGRlbnRyeSwKQEAgLTQzMSw3ICs0MjksNyBAQAogCXN0YXR1cyA9IDA7CiBsZWF2ZToKIAlpZiAoc3RhdHVzIDwgMCAmJiBkaWRfcXVvdGFfaW5vZGUpCi0JCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKKwkJZHF1b3RfZnJlZV9pbm9kZShpbm9kZSk7CiAJaWYgKGhhbmRsZSkKIAkJb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKIApAQCAtNjM2LDYgKzYzNCw4IEBACiAJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpCiAJCXJldHVybiAtRVBFUk07CiAKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CisKIAllcnIgPSBvY2ZzMl9pbm9kZV9sb2NrX25lc3RlZChkaXIsICZwYXJlbnRfZmVfYmgsIDEsIE9JX0xTX1BBUkVOVCk7CiAJaWYgKGVyciA8IDApIHsKIAkJaWYgKGVyciAhPSAtRU5PRU5UKQpAQCAtNzkxLDYgKzc5MSw4IEBACiAJbWxvZ19lbnRyeSgiKDB4JXAsIDB4JXAsICclLipzJylcbiIsIGRpciwgZGVudHJ5LAogCQkgICBkZW50cnktPmRfbmFtZS5sZW4sIGRlbnRyeS0+ZF9uYW1lLm5hbWUpOwogCisJZHF1b3RfaW5pdGlhbGl6ZShkaXIpOworCiAJQlVHX09OKGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGUgIT0gZGlyKTsKIAogCW1sb2coMCwgImlubyA9ICVsbHVcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpT0NGUzJfSShpbm9kZSktPmlwX2Jsa25vKTsKQEAgLTEwNTEsNiArMTA1Myw5IEBACiAJCSAgIG9sZF9kZW50cnktPmRfbmFtZS5sZW4sIG9sZF9kZW50cnktPmRfbmFtZS5uYW1lLAogCQkgICBuZXdfZGVudHJ5LT5kX25hbWUubGVuLCBuZXdfZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKKwlkcXVvdF9pbml0aWFsaXplKG9sZF9kaXIpOworCWRxdW90X2luaXRpYWxpemUobmV3X2Rpcik7CisKIAlvc2IgPSBPQ0ZTMl9TQihvbGRfZGlyLT5pX3NiKTsKIAogCWlmIChuZXdfaW5vZGUpIHsKQEAgLTE1OTksNiArMTYwNCw4IEBACiAJbWxvZ19lbnRyeSgiKDB4JXAsIDB4JXAsIHN5bW5hbWU9JyVzJyBhY3R1YWw9JyUuKnMnKVxuIiwgZGlyLAogCQkgICBkZW50cnksIHN5bW5hbWUsIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CisKIAlzYiA9IGRpci0+aV9zYjsKIAlvc2IgPSBPQ0ZTMl9TQihzYik7CiAKQEAgLTE2ODgsMTMgKzE2OTUsOSBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0JLyogV2UgZG9uJ3QgdXNlIHN0YW5kYXJkIFZGUyB3cmFwcGVyIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB2ZnNfZHFfaW5pdAotCSAqIHRvIGJlIGNhbGxlZC4gKi8KLQlpZiAoc2JfYW55X3F1b3RhX2FjdGl2ZShvc2ItPnNiKSAmJgotCSAgICBvc2ItPnNiLT5kcV9vcC0+YWxsb2NfaW5vZGUoaW5vZGUsIDEpID09IE5PX1FVT1RBKSB7Ci0JCXN0YXR1cyA9IC1FRFFVT1Q7CisJc3RhdHVzID0gZHF1b3RfYWxsb2NfaW5vZGUoaW5vZGUpOworCWlmIChzdGF0dXMpCiAJCWdvdG8gYmFpbDsKLQl9CiAJZGlkX3F1b3RhX2lub2RlID0gMTsKIAogCW1sb2dfZW50cnkoIigweCVwLCAweCVwLCAlZCwgJyUuKnMnKVxuIiwgZGlyLCBkZW50cnksCkBAIC0xNzE2LDExICsxNzE5LDEwIEBACiAJCXUzMiBvZmZzZXQgPSAwOwogCiAJCWlub2RlLT5pX29wID0gJm9jZnMyX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKLQkJaWYgKHZmc19kcV9hbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLAotCQkgICAgb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMob3NiLT5zYiwgMSkpKSB7Ci0JCQlzdGF0dXMgPSAtRURRVU9UOworCQlzdGF0dXMgPSBkcXVvdF9hbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLAorCQkgICAgb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMob3NiLT5zYiwgMSkpOworCQlpZiAoc3RhdHVzKQogCQkJZ290byBiYWlsOwotCQl9CiAJCWRpZF9xdW90YSA9IDE7CiAJCXN0YXR1cyA9IG9jZnMyX2FkZF9pbm9kZV9kYXRhKG9zYiwgaW5vZGUsICZvZmZzZXQsIDEsIDAsCiAJCQkJCSAgICAgIG5ld19mZV9iaCwKQEAgLTE3ODgsMTAgKzE3OTAsMTAgQEAKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogYmFpbDoKIAlpZiAoc3RhdHVzIDwgMCAmJiBkaWRfcXVvdGEpCi0JCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsCisJCWRxdW90X2ZyZWVfc3BhY2Vfbm9kaXJ0eShpbm9kZSwKIAkJCQkJb2NmczJfY2x1c3RlcnNfdG9fYnl0ZXMob3NiLT5zYiwgMSkpOwogCWlmIChzdGF0dXMgPCAwICYmIGRpZF9xdW90YV9pbm9kZSkKLQkJdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpOworCQlkcXVvdF9mcmVlX2lub2RlKGlub2RlKTsKIAlpZiAoaGFuZGxlKQogCQlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBoYW5kbGUpOwogCkBAIC0yMDk5LDEzICsyMTAxLDkgQEAKIAkJZ290byBsZWF2ZTsKIAl9CiAKLQkvKiBXZSBkb24ndCB1c2Ugc3RhbmRhcmQgVkZTIHdyYXBwZXIgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHZmc19kcV9pbml0Ci0JICogdG8gYmUgY2FsbGVkLiAqLwotCWlmIChzYl9hbnlfcXVvdGFfYWN0aXZlKG9zYi0+c2IpICYmCi0JICAgIG9zYi0+c2ItPmRxX29wLT5hbGxvY19pbm9kZShpbm9kZSwgMSkgPT0gTk9fUVVPVEEpIHsKLQkJc3RhdHVzID0gLUVEUVVPVDsKKwlzdGF0dXMgPSBkcXVvdF9hbGxvY19pbm9kZShpbm9kZSk7CisJaWYgKHN0YXR1cykKIAkJZ290byBsZWF2ZTsKLQl9CiAJZGlkX3F1b3RhX2lub2RlID0gMTsKIAogCWlub2RlLT5pX25saW5rID0gMDsKQEAgLTIxNDAsNyArMjEzOCw3IEBACiAJaW5zZXJ0X2lub2RlX2hhc2goaW5vZGUpOwogbGVhdmU6CiAJaWYgKHN0YXR1cyA8IDAgJiYgZGlkX3F1b3RhX2lub2RlKQotCQl2ZnNfZHFfZnJlZV9pbm9kZShpbm9kZSk7CisJCWRxdW90X2ZyZWVfaW5vZGUoaW5vZGUpOwogCWlmIChoYW5kbGUpCiAJCW9jZnMyX2NvbW1pdF90cmFucyhvc2IsIGhhbmRsZSk7CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL29jZnMyLmggYi9mcy9vY2ZzMi9vY2ZzMi5oCmluZGV4IDc0MGY0NDguLjEyMzhiNDkgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL29jZnMyLmgKKysrIGIvZnMvb2NmczIvb2NmczIuaApAQCAtNDIsNiArNDIsNyBAQAogCiAjaW5jbHVkZSAib2NmczJfZnMuaCIKICNpbmNsdWRlICJvY2ZzMl9sb2NraWQuaCIKKyNpbmNsdWRlICJvY2ZzMl9pb2N0bC5oIgogCiAvKiBGb3Igc3RydWN0IG9jZnMyX2Jsb2NrY2hlY2tfc3RhdHMgKi8KICNpbmNsdWRlICJibG9ja2NoZWNrLmgiCkBAIC0xNTksNyArMTYwLDcgQEAKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgbF9sZXZlbDsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgbF9yb19ob2xkZXJzOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICBsX2V4X2hvbGRlcnM7Ci0JdW5pb24gb2NmczJfZGxtX2xrc2IgICAgIGxfbGtzYjsKKwlzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgICAgbF9sa3NiOwogCiAJLyogdXNlZCBmcm9tIEFTVC9CQVNUIGZ1bmNzLiAqLwogCWVudW0gb2NmczJfYXN0X2FjdGlvbiAgICBsX2FjdGlvbjsKQEAgLTMwNSw3ICszMDYsOSBAQAogCXUzMiBzX25leHRfZ2VuZXJhdGlvbjsKIAl1bnNpZ25lZCBsb25nIG9zYl9mbGFnczsKIAlzMTYgc19pbm9kZV9zdGVhbF9zbG90OworCXMxNiBzX21ldGFfc3RlYWxfc2xvdDsKIAlhdG9taWNfdCBzX251bV9pbm9kZXNfc3RvbGVuOworCWF0b21pY190IHNfbnVtX21ldGFfc3RvbGVuOwogCiAJdW5zaWduZWQgbG9uZyBzX21vdW50X29wdDsKIAl1bnNpZ25lZCBpbnQgc19hdGltZV9xdWFudHVtOwpAQCAtNzYwLDMzICs3NjMsNiBAQAogCXJldHVybiBtZWdzIDw8ICgyMCAtIE9DRlMyX1NCKHNiKS0+c19jbHVzdGVyc2l6ZV9iaXRzKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG9jZnMyX2luaXRfaW5vZGVfc3RlYWxfc2xvdChzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYikKLXsKLQlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOwotCW9zYi0+c19pbm9kZV9zdGVhbF9zbG90ID0gT0NGUzJfSU5WQUxJRF9TTE9UOwotCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKLQlhdG9taWNfc2V0KCZvc2ItPnNfbnVtX2lub2Rlc19zdG9sZW4sIDApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfc2V0X2lub2RlX3N0ZWFsX3Nsb3Qoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCi0JCQkJCSAgICAgIHMxNiBzbG90KQotewotCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7Ci0Jb3NiLT5zX2lub2RlX3N0ZWFsX3Nsb3QgPSBzbG90OwotCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKLX0KLQotc3RhdGljIGlubGluZSBzMTYgb2NmczJfZ2V0X2lub2RlX3N0ZWFsX3Nsb3Qoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCi17Ci0JczE2IHNsb3Q7Ci0KLQlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOwotCXNsb3QgPSBvc2ItPnNfaW5vZGVfc3RlYWxfc2xvdDsKLQlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7Ci0KLQlyZXR1cm4gc2xvdDsKLX0KLQogI2RlZmluZSBvY2ZzMl9zZXRfYml0IGV4dDJfc2V0X2JpdAogI2RlZmluZSBvY2ZzMl9jbGVhcl9iaXQgZXh0Ml9jbGVhcl9iaXQKICNkZWZpbmUgb2NmczJfdGVzdF9iaXQgZXh0Ml90ZXN0X2JpdApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvb2NmczJfZnMuaCBiL2ZzL29jZnMyL29jZnMyX2ZzLmgKaW5kZXggNzYzOGEzOC4uYmIzNzIxOCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczJfZnMuaAorKysgYi9mcy9vY2ZzMi9vY2ZzMl9mcy5oCkBAIC0yNTQsNjMgKzI1NCw2IEBACiAJCQkJCQkgKiByZWZjb3VudCB0cmVlICovCiAKIC8qCi0gKiBpb2N0bCBjb21tYW5kcwotICovCi0jZGVmaW5lIE9DRlMyX0lPQ19HRVRGTEFHUwlfSU9SKCdmJywgMSwgbG9uZykKLSNkZWZpbmUgT0NGUzJfSU9DX1NFVEZMQUdTCV9JT1coJ2YnLCAyLCBsb25nKQotI2RlZmluZSBPQ0ZTMl9JT0MzMl9HRVRGTEFHUwlfSU9SKCdmJywgMSwgaW50KQotI2RlZmluZSBPQ0ZTMl9JT0MzMl9TRVRGTEFHUwlfSU9XKCdmJywgMiwgaW50KQotCi0vKgotICogU3BhY2UgcmVzZXJ2YXRpb24gLyBhbGxvY2F0aW9uIC8gZnJlZSBpb2N0bHMgYW5kIGFyZ3VtZW50IHN0cnVjdHVyZQotICogYXJlIGRlc2lnbmVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBYRlMuCi0gKgotICogQUxMT0NTUCogYW5kIEZSRUVTUCogYXJlIG5vdCBhbmQgd2lsbCBuZXZlciBiZSBzdXBwb3J0ZWQsIGJ1dCBhcmUKLSAqIGluY2x1ZGVkIGhlcmUgZm9yIGNvbXBsZXRlbmVzcy4KLSAqLwotc3RydWN0IG9jZnMyX3NwYWNlX3Jlc3YgewotCV9fczE2CQlsX3R5cGU7Ci0JX19zMTYJCWxfd2hlbmNlOwotCV9fczY0CQlsX3N0YXJ0OwotCV9fczY0CQlsX2xlbjsJCS8qIGxlbiA9PSAwIG1lYW5zIHVudGlsIGVuZCBvZiBmaWxlICovCi0JX19zMzIJCWxfc3lzaWQ7Ci0JX191MzIJCWxfcGlkOwotCV9fczMyCQlsX3BhZFs0XTsJLyogcmVzZXJ2ZSBhcmVhCQkJICAgICovCi19OwotCi0jZGVmaW5lIE9DRlMyX0lPQ19BTExPQ1NQCQlfSU9XICgnWCcsIDEwLCBzdHJ1Y3Qgb2NmczJfc3BhY2VfcmVzdikKLSNkZWZpbmUgT0NGUzJfSU9DX0ZSRUVTUAkJX0lPVyAoJ1gnLCAxMSwgc3RydWN0IG9jZnMyX3NwYWNlX3Jlc3YpCi0jZGVmaW5lIE9DRlMyX0lPQ19SRVNWU1AJCV9JT1cgKCdYJywgNDAsIHN0cnVjdCBvY2ZzMl9zcGFjZV9yZXN2KQotI2RlZmluZSBPQ0ZTMl9JT0NfVU5SRVNWU1AJX0lPVyAoJ1gnLCA0MSwgc3RydWN0IG9jZnMyX3NwYWNlX3Jlc3YpCi0jZGVmaW5lIE9DRlMyX0lPQ19BTExPQ1NQNjQJX0lPVyAoJ1gnLCAzNiwgc3RydWN0IG9jZnMyX3NwYWNlX3Jlc3YpCi0jZGVmaW5lIE9DRlMyX0lPQ19GUkVFU1A2NAlfSU9XICgnWCcsIDM3LCBzdHJ1Y3Qgb2NmczJfc3BhY2VfcmVzdikKLSNkZWZpbmUgT0NGUzJfSU9DX1JFU1ZTUDY0CV9JT1cgKCdYJywgNDIsIHN0cnVjdCBvY2ZzMl9zcGFjZV9yZXN2KQotI2RlZmluZSBPQ0ZTMl9JT0NfVU5SRVNWU1A2NAlfSU9XICgnWCcsIDQzLCBzdHJ1Y3Qgb2NmczJfc3BhY2VfcmVzdikKLQotLyogVXNlZCB0byBwYXNzIGdyb3VwIGRlc2NyaXB0b3IgZGF0YSB3aGVuIG9ubGluZSByZXNpemUgaXMgZG9uZSAqLwotc3RydWN0IG9jZnMyX25ld19ncm91cF9pbnB1dCB7Ci0JX191NjQgZ3JvdXA7CQkvKiBHcm91cCBkZXNjcmlwdG9yJ3MgYmxrbm8uICovCi0JX191MzIgY2x1c3RlcnM7CQkvKiBUb3RhbCBudW1iZXIgb2YgY2x1c3RlcnMgaW4gdGhpcyBncm91cCAqLwotCV9fdTMyIGZyZWVzOwkJLyogVG90YWwgZnJlZSBjbHVzdGVycyBpbiB0aGlzIGdyb3VwICovCi0JX191MTYgY2hhaW47CQkvKiBDaGFpbiBmb3IgdGhpcyBncm91cCAqLwotCV9fdTE2IHJlc2VydmVkMTsKLQlfX3UzMiByZXNlcnZlZDI7Ci19OwotCi0jZGVmaW5lIE9DRlMyX0lPQ19HUk9VUF9FWFRFTkQJX0lPVygnbycsIDEsIGludCkKLSNkZWZpbmUgT0NGUzJfSU9DX0dST1VQX0FERAlfSU9XKCdvJywgMixzdHJ1Y3Qgb2NmczJfbmV3X2dyb3VwX2lucHV0KQotI2RlZmluZSBPQ0ZTMl9JT0NfR1JPVVBfQURENjQJX0lPVygnbycsIDMsc3RydWN0IG9jZnMyX25ld19ncm91cF9pbnB1dCkKLQotLyogVXNlZCB0byBwYXNzIDIgZmlsZSBuYW1lcyB0byByZWZsaW5rLiAqLwotc3RydWN0IHJlZmxpbmtfYXJndW1lbnRzIHsKLQlfX3U2NCBvbGRfcGF0aDsKLQlfX3U2NCBuZXdfcGF0aDsKLQlfX3U2NCBwcmVzZXJ2ZTsKLX07Ci0jZGVmaW5lIE9DRlMyX0lPQ19SRUZMSU5LCV9JT1coJ28nLCA0LCBzdHJ1Y3QgcmVmbGlua19hcmd1bWVudHMpCi0KLQotLyoKICAqIEpvdXJuYWwgRmxhZ3MgKG9jZnMyX2Rpbm9kZS5pZDEuam91cm5hbDEuaV9mbGFncykKICAqLwogI2RlZmluZSBPQ0ZTMl9KT1VSTkFMX0RJUlRZX0ZMCSgweDAwMDAwMDAxKQkvKiBKb3VybmFsIG5lZWRzIHJlY292ZXJ5ICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9vY2ZzMl9pb2N0bC5oIGIvZnMvb2NmczIvb2NmczJfaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDM0MjBhCi0tLSAvZGV2L251bGwKKysrIGIvZnMvb2NmczIvb2NmczJfaW9jdGwuaApAQCAtMCwwICsxLDc5IEBACisvKiAtKi0gbW9kZTogYzsgYy1iYXNpYy1vZmZzZXQ6IDg7IC0qLQorICogdmltOiBub2V4cGFuZHRhYiBzdz04IHRzPTggc3RzPTA6CisgKgorICogb2NmczJfaW9jdGwuaAorICoKKyAqIERlZmluZXMgT0NGUzIgaW9jdGxzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBPcmFjbGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSwgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgT0NGUzJfSU9DVExfSAorI2RlZmluZSBPQ0ZTMl9JT0NUTF9ICisKKy8qCisgKiBpb2N0bCBjb21tYW5kcworICovCisjZGVmaW5lIE9DRlMyX0lPQ19HRVRGTEFHUwlfSU9SKCdmJywgMSwgbG9uZykKKyNkZWZpbmUgT0NGUzJfSU9DX1NFVEZMQUdTCV9JT1coJ2YnLCAyLCBsb25nKQorI2RlZmluZSBPQ0ZTMl9JT0MzMl9HRVRGTEFHUwlfSU9SKCdmJywgMSwgaW50KQorI2RlZmluZSBPQ0ZTMl9JT0MzMl9TRVRGTEFHUwlfSU9XKCdmJywgMiwgaW50KQorCisvKgorICogU3BhY2UgcmVzZXJ2YXRpb24gLyBhbGxvY2F0aW9uIC8gZnJlZSBpb2N0bHMgYW5kIGFyZ3VtZW50IHN0cnVjdHVyZQorICogYXJlIGRlc2lnbmVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCBYRlMuCisgKgorICogQUxMT0NTUCogYW5kIEZSRUVTUCogYXJlIG5vdCBhbmQgd2lsbCBuZXZlciBiZSBzdXBwb3J0ZWQsIGJ1dCBhcmUKKyAqIGluY2x1ZGVkIGhlcmUgZm9yIGNvbXBsZXRlbmVzcy4KKyAqLworc3RydWN0IG9jZnMyX3NwYWNlX3Jlc3YgeworCV9fczE2CQlsX3R5cGU7CisJX19zMTYJCWxfd2hlbmNlOworCV9fczY0CQlsX3N0YXJ0OworCV9fczY0CQlsX2xlbjsJCS8qIGxlbiA9PSAwIG1lYW5zIHVudGlsIGVuZCBvZiBmaWxlICovCisJX19zMzIJCWxfc3lzaWQ7CisJX191MzIJCWxfcGlkOworCV9fczMyCQlsX3BhZFs0XTsJLyogcmVzZXJ2ZSBhcmVhCQkJICAgICovCit9OworCisjZGVmaW5lIE9DRlMyX0lPQ19BTExPQ1NQCQlfSU9XICgnWCcsIDEwLCBzdHJ1Y3Qgb2NmczJfc3BhY2VfcmVzdikKKyNkZWZpbmUgT0NGUzJfSU9DX0ZSRUVTUAkJX0lPVyAoJ1gnLCAxMSwgc3RydWN0IG9jZnMyX3NwYWNlX3Jlc3YpCisjZGVmaW5lIE9DRlMyX0lPQ19SRVNWU1AJCV9JT1cgKCdYJywgNDAsIHN0cnVjdCBvY2ZzMl9zcGFjZV9yZXN2KQorI2RlZmluZSBPQ0ZTMl9JT0NfVU5SRVNWU1AJX0lPVyAoJ1gnLCA0MSwgc3RydWN0IG9jZnMyX3NwYWNlX3Jlc3YpCisjZGVmaW5lIE9DRlMyX0lPQ19BTExPQ1NQNjQJX0lPVyAoJ1gnLCAzNiwgc3RydWN0IG9jZnMyX3NwYWNlX3Jlc3YpCisjZGVmaW5lIE9DRlMyX0lPQ19GUkVFU1A2NAlfSU9XICgnWCcsIDM3LCBzdHJ1Y3Qgb2NmczJfc3BhY2VfcmVzdikKKyNkZWZpbmUgT0NGUzJfSU9DX1JFU1ZTUDY0CV9JT1cgKCdYJywgNDIsIHN0cnVjdCBvY2ZzMl9zcGFjZV9yZXN2KQorI2RlZmluZSBPQ0ZTMl9JT0NfVU5SRVNWU1A2NAlfSU9XICgnWCcsIDQzLCBzdHJ1Y3Qgb2NmczJfc3BhY2VfcmVzdikKKworLyogVXNlZCB0byBwYXNzIGdyb3VwIGRlc2NyaXB0b3IgZGF0YSB3aGVuIG9ubGluZSByZXNpemUgaXMgZG9uZSAqLworc3RydWN0IG9jZnMyX25ld19ncm91cF9pbnB1dCB7CisJX191NjQgZ3JvdXA7CQkvKiBHcm91cCBkZXNjcmlwdG9yJ3MgYmxrbm8uICovCisJX191MzIgY2x1c3RlcnM7CQkvKiBUb3RhbCBudW1iZXIgb2YgY2x1c3RlcnMgaW4gdGhpcyBncm91cCAqLworCV9fdTMyIGZyZWVzOwkJLyogVG90YWwgZnJlZSBjbHVzdGVycyBpbiB0aGlzIGdyb3VwICovCisJX191MTYgY2hhaW47CQkvKiBDaGFpbiBmb3IgdGhpcyBncm91cCAqLworCV9fdTE2IHJlc2VydmVkMTsKKwlfX3UzMiByZXNlcnZlZDI7Cit9OworCisjZGVmaW5lIE9DRlMyX0lPQ19HUk9VUF9FWFRFTkQJX0lPVygnbycsIDEsIGludCkKKyNkZWZpbmUgT0NGUzJfSU9DX0dST1VQX0FERAlfSU9XKCdvJywgMixzdHJ1Y3Qgb2NmczJfbmV3X2dyb3VwX2lucHV0KQorI2RlZmluZSBPQ0ZTMl9JT0NfR1JPVVBfQURENjQJX0lPVygnbycsIDMsc3RydWN0IG9jZnMyX25ld19ncm91cF9pbnB1dCkKKworLyogVXNlZCB0byBwYXNzIDIgZmlsZSBuYW1lcyB0byByZWZsaW5rLiAqLworc3RydWN0IHJlZmxpbmtfYXJndW1lbnRzIHsKKwlfX3U2NCBvbGRfcGF0aDsKKwlfX3U2NCBuZXdfcGF0aDsKKwlfX3U2NCBwcmVzZXJ2ZTsKK307CisjZGVmaW5lIE9DRlMyX0lPQ19SRUZMSU5LCV9JT1coJ28nLCA0LCBzdHJ1Y3QgcmVmbGlua19hcmd1bWVudHMpCisKKyNlbmRpZiAvKiBPQ0ZTMl9JT0NUTF9IICovCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9vY2ZzMl9sb2NraW5ndmVyLmggYi9mcy9vY2ZzMi9vY2ZzMl9sb2NraW5ndmVyLmgKaW5kZXggODJkNWVlYS4uMmU0NWM4ZCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvb2NmczJfbG9ja2luZ3Zlci5oCisrKyBiL2ZzL29jZnMyL29jZnMyX2xvY2tpbmd2ZXIuaApAQCAtMjMsNiArMjMsOCBAQAogLyoKICAqIFRoZSBwcm90b2NvbCB2ZXJzaW9uIGZvciBvY2ZzMiBjbHVzdGVyIGxvY2tpbmcuICBTZWUgZGxtZ2x1ZS5jIGZvcgogICogbW9yZSBkZXRhaWxzLgorICoKKyAqIDEuMCAtIEluaXRpYWwgbG9ja2luZyB2ZXJzaW9uIGZyb20gb2NmczIgMS40LgogICovCiAjZGVmaW5lIE9DRlMyX0xPQ0tJTkdfUFJPVE9DT0xfTUFKT1IgMQogI2RlZmluZSBPQ0ZTMl9MT0NLSU5HX1BST1RPQ09MX01JTk9SIDAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3F1b3RhX2dsb2JhbC5jIGIvZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMKaW5kZXggYjQzN2RjMC4uMzU1ZjQxZCAxMDA2NDQKLS0tIGEvZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMKKysrIGIvZnMvb2NmczIvcXVvdGFfZ2xvYmFsLmMKQEAgLTg1MSwxMyArODUxLDYgQEAKIH0KIAogY29uc3Qgc3RydWN0IGRxdW90X29wZXJhdGlvbnMgb2NmczJfcXVvdGFfb3BlcmF0aW9ucyA9IHsKLQkuaW5pdGlhbGl6ZQk9IGRxdW90X2luaXRpYWxpemUsCi0JLmRyb3AJCT0gZHF1b3RfZHJvcCwKLQkuYWxsb2Nfc3BhY2UJPSBkcXVvdF9hbGxvY19zcGFjZSwKLQkuYWxsb2NfaW5vZGUJPSBkcXVvdF9hbGxvY19pbm9kZSwKLQkuZnJlZV9zcGFjZQk9IGRxdW90X2ZyZWVfc3BhY2UsCi0JLmZyZWVfaW5vZGUJPSBkcXVvdF9mcmVlX2lub2RlLAotCS50cmFuc2Zlcgk9IGRxdW90X3RyYW5zZmVyLAogCS53cml0ZV9kcXVvdAk9IG9jZnMyX3dyaXRlX2RxdW90LAogCS5hY3F1aXJlX2RxdW90CT0gb2NmczJfYWNxdWlyZV9kcXVvdCwKIAkucmVsZWFzZV9kcXVvdAk9IG9jZnMyX3JlbGVhc2VfZHF1b3QsCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9xdW90YV9sb2NhbC5jIGIvZnMvb2NmczIvcXVvdGFfbG9jYWwuYwppbmRleCAyMWY5ZTcxLi5hNjQ2N2YzIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9xdW90YV9sb2NhbC5jCisrKyBiL2ZzL29jZnMyL3F1b3RhX2xvY2FsLmMKQEAgLTQ1Nyw3ICs0NTcsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAkJZGNodW5rID0gKHN0cnVjdCBvY2ZzMl9sb2NhbF9kaXNrX2NodW5rICopaGJoLT5iX2RhdGE7Ci0JCWZvcl9lYWNoX2JpdChiaXQsIHJjaHVuay0+cmNfYml0bWFwLCBvbF9jaHVua19lbnRyaWVzKHNiKSkgeworCQlmb3JfZWFjaF9zZXRfYml0KGJpdCwgcmNodW5rLT5yY19iaXRtYXAsIG9sX2NodW5rX2VudHJpZXMoc2IpKSB7CiAJCQlxYmggPSBOVUxMOwogCQkJc3RhdHVzID0gb2NmczJfcmVhZF9xdW90YV9ibG9jayhscWlub2RlLAogCQkJCQkJb2xfZHFibGtfYmxvY2soc2IsIGNodW5rLCBiaXQpLApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvcmVmY291bnR0cmVlLmMgYi9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYwppbmRleCA4YWU2NWM5Li45ZTk2OTIxIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYworKysgYi9mcy9vY2ZzMi9yZWZjb3VudHRyZWUuYwpAQCAtNjI2LDcgKzYyNiw3IEBACiAJcmIgPSAoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopbmV3X2JoLT5iX2RhdGE7CiAJbWVtc2V0KHJiLCAwLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOwogCXN0cmNweSgodm9pZCAqKXJiLCBPQ0ZTMl9SRUZDT1VOVF9CTE9DS19TSUdOQVRVUkUpOwotCXJiLT5yZl9zdWJhbGxvY19zbG90ID0gY3B1X3RvX2xlMTYob3NiLT5zbG90X251bSk7CisJcmItPnJmX3N1YmFsbG9jX3Nsb3QgPSBjcHVfdG9fbGUxNihtZXRhX2FjLT5hY19hbGxvY19zbG90KTsKIAlyYi0+cmZfc3ViYWxsb2NfYml0ID0gY3B1X3RvX2xlMTYoc3ViYWxsb2NfYml0X3N0YXJ0KTsKIAlyYi0+cmZfZnNfZ2VuZXJhdGlvbiA9IGNwdV90b19sZTMyKG9zYi0+ZnNfZ2VuZXJhdGlvbik7CiAJcmItPnJmX2Jsa25vID0gY3B1X3RvX2xlNjQoZmlyc3RfYmxrbm8pOwpAQCAtMTMzMCw3ICsxMzMwLDcgQEAKIAltZW1jcHkobmV3X2JoLT5iX2RhdGEsIHJlZl9yb290X2JoLT5iX2RhdGEsIHNiLT5zX2Jsb2Nrc2l6ZSk7CiAKIAluZXdfcmIgPSAoc3RydWN0IG9jZnMyX3JlZmNvdW50X2Jsb2NrICopbmV3X2JoLT5iX2RhdGE7Ci0JbmV3X3JiLT5yZl9zdWJhbGxvY19zbG90ID0gY3B1X3RvX2xlMTYoT0NGUzJfU0Ioc2IpLT5zbG90X251bSk7CisJbmV3X3JiLT5yZl9zdWJhbGxvY19zbG90ID0gY3B1X3RvX2xlMTYobWV0YV9hYy0+YWNfYWxsb2Nfc2xvdCk7CiAJbmV3X3JiLT5yZl9zdWJhbGxvY19iaXQgPSBjcHVfdG9fbGUxNihzdWJhbGxvY19iaXRfc3RhcnQpOwogCW5ld19yYi0+cmZfYmxrbm8gPSBjcHVfdG9fbGU2NChibGtubyk7CiAJbmV3X3JiLT5yZl9jcG9zID0gY3B1X3RvX2xlMzIoMCk7CkBAIC0xNTc2LDcgKzE1NzYsNyBAQAogCW5ld19yYiA9IChzdHJ1Y3Qgb2NmczJfcmVmY291bnRfYmxvY2sgKiluZXdfYmgtPmJfZGF0YTsKIAltZW1zZXQobmV3X3JiLCAwLCBzYi0+c19ibG9ja3NpemUpOwogCXN0cmNweSgodm9pZCAqKW5ld19yYiwgT0NGUzJfUkVGQ09VTlRfQkxPQ0tfU0lHTkFUVVJFKTsKLQluZXdfcmItPnJmX3N1YmFsbG9jX3Nsb3QgPSBjcHVfdG9fbGUxNihPQ0ZTMl9TQihzYiktPnNsb3RfbnVtKTsKKwluZXdfcmItPnJmX3N1YmFsbG9jX3Nsb3QgPSBjcHVfdG9fbGUxNihtZXRhX2FjLT5hY19hbGxvY19zbG90KTsKIAluZXdfcmItPnJmX3N1YmFsbG9jX2JpdCA9IGNwdV90b19sZTE2KHN1YmFsbG9jX2JpdF9zdGFydCk7CiAJbmV3X3JiLT5yZl9mc19nZW5lcmF0aW9uID0gY3B1X3RvX2xlMzIoT0NGUzJfU0Ioc2IpLT5mc19nZW5lcmF0aW9uKTsKIAluZXdfcmItPnJmX2Jsa25vID0gY3B1X3RvX2xlNjQoYmxrbm8pOwpAQCAtNDM5MCw3ICs0MzkwLDcgQEAKIAl9CiAKIAltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JdmZzX2RxX2luaXQoZGlyKTsKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CiAJZXJyb3IgPSBvY2ZzMl9yZWZsaW5rKG9sZF9kZW50cnksIGRpciwgbmV3X2RlbnRyeSwgcHJlc2VydmUpOwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWlmICghZXJyb3IpCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdGFja19vMmNiLmMgYi9mcy9vY2ZzMi9zdGFja19vMmNiLmMKaW5kZXggMzAzOGM5Mi4uNzAyMGUxMiAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3RhY2tfbzJjYi5jCisrKyBiL2ZzL29jZnMyL3N0YWNrX28yY2IuYwpAQCAtMTYxLDI0ICsxNjEsMjMgQEAKIAogc3RhdGljIHZvaWQgbzJkbG1fbG9ja19hc3Rfd3JhcHBlcih2b2lkICphc3RhcmcpCiB7Ci0JQlVHX09OKG8yY2Jfc3RhY2suc3BfcHJvdG8gPT0gTlVMTCk7CisJc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiID0gYXN0YXJnOwogCi0JbzJjYl9zdGFjay5zcF9wcm90by0+bHBfbG9ja19hc3QoYXN0YXJnKTsKKwlsa3NiLT5sa3NiX2Nvbm4tPmNjX3Byb3RvLT5scF9sb2NrX2FzdChsa3NiKTsKIH0KIAogc3RhdGljIHZvaWQgbzJkbG1fYmxvY2tpbmdfYXN0X3dyYXBwZXIodm9pZCAqYXN0YXJnLCBpbnQgbGV2ZWwpCiB7Ci0JQlVHX09OKG8yY2Jfc3RhY2suc3BfcHJvdG8gPT0gTlVMTCk7CisJc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiID0gYXN0YXJnOwogCi0JbzJjYl9zdGFjay5zcF9wcm90by0+bHBfYmxvY2tpbmdfYXN0KGFzdGFyZywgbGV2ZWwpOworCWxrc2ItPmxrc2JfY29ubi0+Y2NfcHJvdG8tPmxwX2Jsb2NraW5nX2FzdChsa3NiLCBsZXZlbCk7CiB9CiAKIHN0YXRpYyB2b2lkIG8yZGxtX3VubG9ja19hc3Rfd3JhcHBlcih2b2lkICphc3RhcmcsIGVudW0gZGxtX3N0YXR1cyBzdGF0dXMpCiB7CisJc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiID0gYXN0YXJnOwogCWludCBlcnJvciA9IGRsbV9zdGF0dXNfdG9fZXJybm8oc3RhdHVzKTsKIAotCUJVR19PTihvMmNiX3N0YWNrLnNwX3Byb3RvID09IE5VTEwpOwotCiAJLyoKIAkgKiBJbiBvMmRsbSwgeW91IGNhbiBnZXQgYm90aCB0aGUgbG9ja19hc3QoKSBmb3IgdGhlIGxvY2sgYmVpbmcKIAkgKiBncmFudGVkIGFuZCB0aGUgdW5sb2NrX2FzdCgpIGZvciB0aGUgQ0FOQ0VMIGZhaWxpbmcuICBBCkBAIC0xOTMsMTYgKzE5MiwxNSBAQAogCWlmIChzdGF0dXMgPT0gRExNX0NBTkNFTEdSQU5UKQogCQlyZXR1cm47CiAKLQlvMmNiX3N0YWNrLnNwX3Byb3RvLT5scF91bmxvY2tfYXN0KGFzdGFyZywgZXJyb3IpOworCWxrc2ItPmxrc2JfY29ubi0+Y2NfcHJvdG8tPmxwX3VubG9ja19hc3QobGtzYiwgZXJyb3IpOwogfQogCiBzdGF0aWMgaW50IG8yY2JfZGxtX2xvY2soc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwKIAkJCSBpbnQgbW9kZSwKLQkJCSB1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwKKwkJCSBzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IsCiAJCQkgdTMyIGZsYWdzLAogCQkJIHZvaWQgKm5hbWUsCi0JCQkgdW5zaWduZWQgaW50IG5hbWVsZW4sCi0JCQkgdm9pZCAqYXN0YXJnKQorCQkJIHVuc2lnbmVkIGludCBuYW1lbGVuKQogewogCWVudW0gZGxtX3N0YXR1cyBzdGF0dXM7CiAJaW50IG8yZGxtX21vZGUgPSBtb2RlX3RvX28yZGxtKG1vZGUpOwpAQCAtMjExLDI4ICsyMDksMjcgQEAKIAogCXN0YXR1cyA9IGRsbWxvY2soY29ubi0+Y2NfbG9ja3NwYWNlLCBvMmRsbV9tb2RlLCAmbGtzYi0+bGtzYl9vMmRsbSwKIAkJCSBvMmRsbV9mbGFncywgbmFtZSwgbmFtZWxlbiwKLQkJCSBvMmRsbV9sb2NrX2FzdF93cmFwcGVyLCBhc3RhcmcsCisJCQkgbzJkbG1fbG9ja19hc3Rfd3JhcHBlciwgbGtzYiwKIAkJCSBvMmRsbV9ibG9ja2luZ19hc3Rfd3JhcHBlcik7CiAJcmV0ID0gZGxtX3N0YXR1c190b19lcnJubyhzdGF0dXMpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbzJjYl9kbG1fdW5sb2NrKHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm4sCi0JCQkgICB1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwKLQkJCSAgIHUzMiBmbGFncywKLQkJCSAgIHZvaWQgKmFzdGFyZykKKwkJCSAgIHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwKKwkJCSAgIHUzMiBmbGFncykKIHsKIAllbnVtIGRsbV9zdGF0dXMgc3RhdHVzOwogCWludCBvMmRsbV9mbGFncyA9IGZsYWdzX3RvX28yZGxtKGZsYWdzKTsKIAlpbnQgcmV0OwogCiAJc3RhdHVzID0gZGxtdW5sb2NrKGNvbm4tPmNjX2xvY2tzcGFjZSwgJmxrc2ItPmxrc2JfbzJkbG0sCi0JCQkgICBvMmRsbV9mbGFncywgbzJkbG1fdW5sb2NrX2FzdF93cmFwcGVyLCBhc3RhcmcpOworCQkJICAgbzJkbG1fZmxhZ3MsIG8yZGxtX3VubG9ja19hc3Rfd3JhcHBlciwgbGtzYik7CiAJcmV0ID0gZGxtX3N0YXR1c190b19lcnJubyhzdGF0dXMpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbzJjYl9kbG1fbG9ja19zdGF0dXModW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpCitzdGF0aWMgaW50IG8yY2JfZGxtX2xvY2tfc3RhdHVzKHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYikKIHsKIAlyZXR1cm4gZGxtX3N0YXR1c190b19lcnJubyhsa3NiLT5sa3NiX28yZGxtLnN0YXR1cyk7CiB9CkBAIC0yNDIsMTcgKzIzOSwxNyBAQAogICogY29udGVudHMsIGl0IHdpbGwgemVybyBvdXQgdGhlIExWQi4gIFRodXMgdGhlIGNhbGxlciBjYW4gYWx3YXlzIHRydXN0CiAgKiB0aGUgY29udGVudHMuCiAgKi8KLXN0YXRpYyBpbnQgbzJjYl9kbG1fbHZiX3ZhbGlkKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKQorc3RhdGljIGludCBvMmNiX2RsbV9sdmJfdmFsaWQoc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiKQogewogCXJldHVybiAxOwogfQogCi1zdGF0aWMgdm9pZCAqbzJjYl9kbG1fbHZiKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKQorc3RhdGljIHZvaWQgKm8yY2JfZGxtX2x2YihzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IpCiB7CiAJcmV0dXJuICh2b2lkICopKGxrc2ItPmxrc2JfbzJkbG0ubHZiKTsKIH0KIAotc3RhdGljIHZvaWQgbzJjYl9kdW1wX2xrc2IodW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpCitzdGF0aWMgdm9pZCBvMmNiX2R1bXBfbGtzYihzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IpCiB7CiAJZGxtX3ByaW50X29uZV9sb2NrKGxrc2ItPmxrc2JfbzJkbG0ubG9ja2lkKTsKIH0KQEAgLTI4MCw3ICsyNzcsNyBAQAogCXN0cnVjdCBkbG1fcHJvdG9jb2xfdmVyc2lvbiBmc192ZXJzaW9uOwogCiAJQlVHX09OKGNvbm4gPT0gTlVMTCk7Ci0JQlVHX09OKG8yY2Jfc3RhY2suc3BfcHJvdG8gPT0gTlVMTCk7CisJQlVHX09OKGNvbm4tPmNjX3Byb3RvID09IE5VTEwpOwogCiAJLyogZm9yIG5vdyB3ZSBvbmx5IGhhdmUgb25lIGNsdXN0ZXIvbm9kZSwgbWFrZSBzdXJlIHdlIHNlZSBpdAogCSAqIGluIHRoZSBoZWFydGJlYXQgdW5pdmVyc2UgKi8KZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N0YWNrX3VzZXIuYyBiL2ZzL29jZnMyL3N0YWNrX3VzZXIuYwppbmRleCBkYTc4YTJhLi41YWU4ODEyIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdGFja191c2VyLmMKKysrIGIvZnMvb2NmczIvc3RhY2tfdXNlci5jCkBAIC0yNSw3ICsyNSw2IEBACiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2luY2x1ZGUgIm9jZnMyLmgiICAvKiBGb3Igc3RydWN0IG9jZnMyX2xvY2tfcmVzICovCiAjaW5jbHVkZSAic3RhY2tnbHVlLmgiCiAKICNpbmNsdWRlIDxsaW51eC9kbG1fcGxvY2suaD4KQEAgLTYzLDggKzYyLDggQEAKICAqIG5lZ290aWF0ZWQgYnkgdGhlIGNsaWVudC4gIFRoZSBjbGllbnQgbmVnb3RpYXRlcyBiYXNlZCBvbiB0aGUgbWF4aW11bQogICogdmVyc2lvbiBhZHZlcnRpc2VkIGluIC9zeXMvZnMvb2NmczIvbWF4X2xvY2tpbmdfcHJvdG9jb2wuICBUaGUgbWFqb3IKICAqIG51bWJlciBmcm9tIHRoZSAiU0VUViIgbWVzc2FnZSBtdXN0IG1hdGNoCi0gKiBvY2ZzMl91c2VyX3BsdWdpbi5zcF9wcm90by0+bHBfbWF4X3ZlcnNpb24ucHZfbWFqb3IsIGFuZCB0aGUgbWlub3IgbnVtYmVyCi0gKiBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAuLi4tPmxwX21heF92ZXJzaW9uLnB2X21pbm9yLgorICogb2NmczJfdXNlcl9wbHVnaW4uc3BfbWF4X3Byb3RvLnB2X21ham9yLCBhbmQgdGhlIG1pbm9yIG51bWJlcgorICogbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gLi4uc3BfbWF4X3ZlcnNpb24ucHZfbWlub3IuCiAgKgogICogT25jZSB0aGlzIGluZm9ybWF0aW9uIGhhcyBiZWVuIHNldCwgbW91bnRzIHdpbGwgYmUgYWxsb3dlZC4gIEZyb20gdGhpcwogICogcG9pbnQgb24sIHRoZSAiRE9XTiIgbWVzc2FnZSBjYW4gYmUgc2VudCBmb3Igbm9kZSBkb3duIG5vdGlmaWNhdGlvbi4KQEAgLTQwMSw3ICs0MDAsNyBAQAogCWNoYXIgKnB0ciA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX2NvbnRyb2xfcHJpdmF0ZSAqcCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgb2NmczJfcHJvdG9jb2xfdmVyc2lvbiAqbWF4ID0KLQkJJm9jZnMyX3VzZXJfcGx1Z2luLnNwX3Byb3RvLT5scF9tYXhfdmVyc2lvbjsKKwkJJm9jZnMyX3VzZXJfcGx1Z2luLnNwX21heF9wcm90bzsKIAogCWlmIChvY2ZzMl9jb250cm9sX2dldF9oYW5kc2hha2Vfc3RhdGUoZmlsZSkgIT0KIAkgICAgT0NGUzJfQ09OVFJPTF9IQU5EU0hBS0VfUFJPVE9DT0wpCkBAIC02NjQsMTggKzY2MywxMCBAQAogCQkgICAgICAgLXJjKTsKIH0KIAotc3RhdGljIHN0cnVjdCBkbG1fbGtzYiAqZnNkbG1fYXN0YXJnX3RvX2xrc2Iodm9pZCAqYXN0YXJnKQotewotCXN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqcmVzID0gYXN0YXJnOwotCXJldHVybiAmcmVzLT5sX2xrc2IubGtzYl9mc2RsbTsKLX0KLQogc3RhdGljIHZvaWQgZnNkbG1fbG9ja19hc3Rfd3JhcHBlcih2b2lkICphc3RhcmcpCiB7Ci0Jc3RydWN0IGRsbV9sa3NiICpsa3NiID0gZnNkbG1fYXN0YXJnX3RvX2xrc2IoYXN0YXJnKTsKLQlpbnQgc3RhdHVzID0gbGtzYi0+c2Jfc3RhdHVzOwotCi0JQlVHX09OKG9jZnMyX3VzZXJfcGx1Z2luLnNwX3Byb3RvID09IE5VTEwpOworCXN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYiA9IGFzdGFyZzsKKwlpbnQgc3RhdHVzID0gbGtzYi0+bGtzYl9mc2RsbS5zYl9zdGF0dXM7CiAKIAkvKgogCSAqIEZvciBub3cgd2UncmUgcHVudGluZyBvbiB0aGUgaXNzdWUgb2Ygb3RoZXIgbm9uLXN0YW5kYXJkIGVycm9ycwpAQCAtNjg4LDI1ICs2NzksMjQgQEAKIAkgKi8KIAogCWlmIChzdGF0dXMgPT0gLURMTV9FVU5MT0NLIHx8IHN0YXR1cyA9PSAtRExNX0VDQU5DRUwpCi0JCW9jZnMyX3VzZXJfcGx1Z2luLnNwX3Byb3RvLT5scF91bmxvY2tfYXN0KGFzdGFyZywgMCk7CisJCWxrc2ItPmxrc2JfY29ubi0+Y2NfcHJvdG8tPmxwX3VubG9ja19hc3QobGtzYiwgMCk7CiAJZWxzZQotCQlvY2ZzMl91c2VyX3BsdWdpbi5zcF9wcm90by0+bHBfbG9ja19hc3QoYXN0YXJnKTsKKwkJbGtzYi0+bGtzYl9jb25uLT5jY19wcm90by0+bHBfbG9ja19hc3QobGtzYik7CiB9CiAKIHN0YXRpYyB2b2lkIGZzZGxtX2Jsb2NraW5nX2FzdF93cmFwcGVyKHZvaWQgKmFzdGFyZywgaW50IGxldmVsKQogewotCUJVR19PTihvY2ZzMl91c2VyX3BsdWdpbi5zcF9wcm90byA9PSBOVUxMKTsKKwlzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IgPSBhc3Rhcmc7CiAKLQlvY2ZzMl91c2VyX3BsdWdpbi5zcF9wcm90by0+bHBfYmxvY2tpbmdfYXN0KGFzdGFyZywgbGV2ZWwpOworCWxrc2ItPmxrc2JfY29ubi0+Y2NfcHJvdG8tPmxwX2Jsb2NraW5nX2FzdChsa3NiLCBsZXZlbCk7CiB9CiAKIHN0YXRpYyBpbnQgdXNlcl9kbG1fbG9jayhzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uLAogCQkJIGludCBtb2RlLAotCQkJIHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiLAorCQkJIHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwKIAkJCSB1MzIgZmxhZ3MsCiAJCQkgdm9pZCAqbmFtZSwKLQkJCSB1bnNpZ25lZCBpbnQgbmFtZWxlbiwKLQkJCSB2b2lkICphc3RhcmcpCisJCQkgdW5zaWduZWQgaW50IG5hbWVsZW4pCiB7CiAJaW50IHJldDsKIApAQCAtNzE2LDM2ICs3MDYsMzUgQEAKIAogCXJldCA9IGRsbV9sb2NrKGNvbm4tPmNjX2xvY2tzcGFjZSwgbW9kZSwgJmxrc2ItPmxrc2JfZnNkbG0sCiAJCSAgICAgICBmbGFnc3xETE1fTEtGX05PRExDS1dULCBuYW1lLCBuYW1lbGVuLCAwLAotCQkgICAgICAgZnNkbG1fbG9ja19hc3Rfd3JhcHBlciwgYXN0YXJnLAorCQkgICAgICAgZnNkbG1fbG9ja19hc3Rfd3JhcHBlciwgbGtzYiwKIAkJICAgICAgIGZzZGxtX2Jsb2NraW5nX2FzdF93cmFwcGVyKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHVzZXJfZGxtX3VubG9jayhzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uLAotCQkJICAgdW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IsCi0JCQkgICB1MzIgZmxhZ3MsCi0JCQkgICB2b2lkICphc3RhcmcpCisJCQkgICBzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IsCisJCQkgICB1MzIgZmxhZ3MpCiB7CiAJaW50IHJldDsKIAogCXJldCA9IGRsbV91bmxvY2soY29ubi0+Y2NfbG9ja3NwYWNlLCBsa3NiLT5sa3NiX2ZzZGxtLnNiX2xraWQsCi0JCQkgZmxhZ3MsICZsa3NiLT5sa3NiX2ZzZGxtLCBhc3RhcmcpOworCQkJIGZsYWdzLCAmbGtzYi0+bGtzYl9mc2RsbSwgbGtzYik7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB1c2VyX2RsbV9sb2NrX3N0YXR1cyh1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYikKK3N0YXRpYyBpbnQgdXNlcl9kbG1fbG9ja19zdGF0dXMoc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiKQogewogCXJldHVybiBsa3NiLT5sa3NiX2ZzZGxtLnNiX3N0YXR1czsKIH0KIAotc3RhdGljIGludCB1c2VyX2RsbV9sdmJfdmFsaWQodW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpCitzdGF0aWMgaW50IHVzZXJfZGxtX2x2Yl92YWxpZChzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IpCiB7CiAJaW50IGludmFsaWQgPSBsa3NiLT5sa3NiX2ZzZGxtLnNiX2ZsYWdzICYgRExNX1NCRl9WQUxOT1RWQUxJRDsKIAogCXJldHVybiAhaW52YWxpZDsKIH0KIAotc3RhdGljIHZvaWQgKnVzZXJfZGxtX2x2Yih1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYikKK3N0YXRpYyB2b2lkICp1c2VyX2RsbV9sdmIoc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiKQogewogCWlmICghbGtzYi0+bGtzYl9mc2RsbS5zYl9sdmJwdHIpCiAJCWxrc2ItPmxrc2JfZnNkbG0uc2JfbHZicHRyID0gKGNoYXIgKilsa3NiICsKQEAgLTc1Myw3ICs3NDIsNyBAQAogCXJldHVybiAodm9pZCAqKShsa3NiLT5sa3NiX2ZzZGxtLnNiX2x2YnB0cik7CiB9CiAKLXN0YXRpYyB2b2lkIHVzZXJfZGxtX2R1bXBfbGtzYih1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYikKK3N0YXRpYyB2b2lkIHVzZXJfZGxtX2R1bXBfbGtzYihzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IpCiB7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N0YWNrZ2x1ZS5jIGIvZnMvb2NmczIvc3RhY2tnbHVlLmMKaW5kZXggZjNkZjBiYS4uMzlhYmY4OSAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3RhY2tnbHVlLmMKKysrIGIvZnMvb2NmczIvc3RhY2tnbHVlLmMKQEAgLTM2LDcgKzM2LDcgQEAKICNkZWZpbmUgT0NGUzJfU1RBQ0tfUExVR0lOX1VTRVIJCSJ1c2VyIgogI2RlZmluZSBPQ0ZTMl9NQVhfSEJfQ1RMX1BBVEgJCTI1NgogCi1zdGF0aWMgc3RydWN0IG9jZnMyX2xvY2tpbmdfcHJvdG9jb2wgKmxwcm90bzsKK3N0YXRpYyBzdHJ1Y3Qgb2NmczJfcHJvdG9jb2xfdmVyc2lvbiBsb2NraW5nX21heF92ZXJzaW9uOwogc3RhdGljIERFRklORV9TUElOTE9DSyhvY2ZzMl9zdGFja19sb2NrKTsKIHN0YXRpYyBMSVNUX0hFQUQob2NmczJfc3RhY2tfbGlzdCk7CiBzdGF0aWMgY2hhciBjbHVzdGVyX3N0YWNrX25hbWVbT0NGUzJfU1RBQ0tfTEFCRUxfTEVOICsgMV07CkBAIC0xNzYsNyArMTc2LDcgQEAKIAlzcGluX2xvY2soJm9jZnMyX3N0YWNrX2xvY2spOwogCWlmICghb2NmczJfc3RhY2tfbG9va3VwKHBsdWdpbi0+c3BfbmFtZSkpIHsKIAkJcGx1Z2luLT5zcF9jb3VudCA9IDA7Ci0JCXBsdWdpbi0+c3BfcHJvdG8gPSBscHJvdG87CisJCXBsdWdpbi0+c3BfbWF4X3Byb3RvID0gbG9ja2luZ19tYXhfdmVyc2lvbjsKIAkJbGlzdF9hZGQoJnBsdWdpbi0+c3BfbGlzdCwgJm9jZnMyX3N0YWNrX2xpc3QpOwogCQlwcmludGsoS0VSTl9JTkZPICJvY2ZzMjogUmVnaXN0ZXJlZCBjbHVzdGVyIGludGVyZmFjZSAlc1xuIiwKIAkJICAgICAgIHBsdWdpbi0+c3BfbmFtZSk7CkBAIC0yMTMsNzcgKzIxMyw3NiBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwob2NmczJfc3RhY2tfZ2x1ZV91bnJlZ2lzdGVyKTsKIAotdm9pZCBvY2ZzMl9zdGFja19nbHVlX3NldF9sb2NraW5nX3Byb3RvY29sKHN0cnVjdCBvY2ZzMl9sb2NraW5nX3Byb3RvY29sICpwcm90bykKK3ZvaWQgb2NmczJfc3RhY2tfZ2x1ZV9zZXRfbWF4X3Byb3RvX3ZlcnNpb24oc3RydWN0IG9jZnMyX3Byb3RvY29sX3ZlcnNpb24gKm1heF9wcm90bykKIHsKIAlzdHJ1Y3Qgb2NmczJfc3RhY2tfcGx1Z2luICpwOwogCi0JQlVHX09OKHByb3RvID09IE5VTEwpOwotCiAJc3Bpbl9sb2NrKCZvY2ZzMl9zdGFja19sb2NrKTsKLQlCVUdfT04oYWN0aXZlX3N0YWNrICE9IE5VTEwpOworCWlmIChtZW1jbXAobWF4X3Byb3RvLCAmbG9ja2luZ19tYXhfdmVyc2lvbiwKKwkJICAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9wcm90b2NvbF92ZXJzaW9uKSkpIHsKKwkJQlVHX09OKGxvY2tpbmdfbWF4X3ZlcnNpb24ucHZfbWFqb3IgIT0gMCk7CiAKLQlscHJvdG8gPSBwcm90bzsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZvY2ZzMl9zdGFja19saXN0LCBzcF9saXN0KSB7Ci0JCXAtPnNwX3Byb3RvID0gbHByb3RvOworCQlsb2NraW5nX21heF92ZXJzaW9uID0gKm1heF9wcm90bzsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmb2NmczJfc3RhY2tfbGlzdCwgc3BfbGlzdCkgeworCQkJcC0+c3BfbWF4X3Byb3RvID0gbG9ja2luZ19tYXhfdmVyc2lvbjsKKwkJfQogCX0KLQogCXNwaW5fdW5sb2NrKCZvY2ZzMl9zdGFja19sb2NrKTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKG9jZnMyX3N0YWNrX2dsdWVfc2V0X2xvY2tpbmdfcHJvdG9jb2wpOworRVhQT1JUX1NZTUJPTF9HUEwob2NmczJfc3RhY2tfZ2x1ZV9zZXRfbWF4X3Byb3RvX3ZlcnNpb24pOwogCiAKIC8qCi0gKiBUaGUgb2NmczJfZGxtX2xvY2soKSBhbmQgb2NmczJfZGxtX3VubG9jaygpIGZ1bmN0aW9ucyB0YWtlCi0gKiAic3RydWN0IG9jZnMyX2xvY2tfcmVzICphc3RhcmciIGluc3RlYWQgb2YgInZvaWQgKmFzdGFyZyIgYmVjYXVzZSB0aGUKLSAqIHVuZGVybHlpbmcgc3RhY2sgcGx1Z2lucyBuZWVkIHRvIHBpbGZlciB0aGUgbGtzYiBvZmYgb2YgdGhlIGxvY2tfcmVzLgotICogSWYgc29tZSBvdGhlciBzdHJ1Y3R1cmUgbmVlZHMgdG8gYmUgcGFzc2VkIGFzIGFuIGFzdGFyZywgdGhlIHBsdWdpbnMKLSAqIHdpbGwgbmVlZCB0byBiZSBnaXZlbiBhIGRpZmZlcmVudCBhdmVudWUgdG8gdGhlIGxrc2IuCisgKiBUaGUgb2NmczJfZGxtX2xvY2soKSBhbmQgb2NmczJfZGxtX3VubG9jaygpIGZ1bmN0aW9ucyB0YWtlIG5vIGFyZ3VtZW50CisgKiBmb3IgdGhlIGFzdCBhbmQgYmFzdCBmdW5jdGlvbnMuICBUaGV5IHdpbGwgcGFzcyB0aGUgbGtzYiB0byB0aGUgYXN0CisgKiBhbmQgYmFzdC4gIFRoZSBjYWxsZXIgY2FuIHdyYXAgdGhlIGxrc2Igd2l0aCB0aGVpciBvd24gc3RydWN0dXJlIHRvCisgKiBnZXQgbW9yZSBpbmZvcm1hdGlvbi4KICAqLwogaW50IG9jZnMyX2RsbV9sb2NrKHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm4sCiAJCSAgIGludCBtb2RlLAotCQkgICB1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwKKwkJICAgc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiLAogCQkgICB1MzIgZmxhZ3MsCiAJCSAgIHZvaWQgKm5hbWUsCi0JCSAgIHVuc2lnbmVkIGludCBuYW1lbGVuLAotCQkgICBzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmFzdGFyZykKKwkJICAgdW5zaWduZWQgaW50IG5hbWVsZW4pCiB7Ci0JQlVHX09OKGxwcm90byA9PSBOVUxMKTsKLQorCWlmICghbGtzYi0+bGtzYl9jb25uKQorCQlsa3NiLT5sa3NiX2Nvbm4gPSBjb25uOworCWVsc2UKKwkJQlVHX09OKGxrc2ItPmxrc2JfY29ubiAhPSBjb25uKTsKIAlyZXR1cm4gYWN0aXZlX3N0YWNrLT5zcF9vcHMtPmRsbV9sb2NrKGNvbm4sIG1vZGUsIGxrc2IsIGZsYWdzLAotCQkJCQkgICAgICBuYW1lLCBuYW1lbGVuLCBhc3RhcmcpOworCQkJCQkgICAgICBuYW1lLCBuYW1lbGVuKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG9jZnMyX2RsbV9sb2NrKTsKIAogaW50IG9jZnMyX2RsbV91bmxvY2soc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwKLQkJICAgICB1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwKLQkJICAgICB1MzIgZmxhZ3MsCi0JCSAgICAgc3RydWN0IG9jZnMyX2xvY2tfcmVzICphc3RhcmcpCisJCSAgICAgc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiLAorCQkgICAgIHUzMiBmbGFncykKIHsKLQlCVUdfT04obHByb3RvID09IE5VTEwpOworCUJVR19PTihsa3NiLT5sa3NiX2Nvbm4gPT0gTlVMTCk7CiAKLQlyZXR1cm4gYWN0aXZlX3N0YWNrLT5zcF9vcHMtPmRsbV91bmxvY2soY29ubiwgbGtzYiwgZmxhZ3MsIGFzdGFyZyk7CisJcmV0dXJuIGFjdGl2ZV9zdGFjay0+c3Bfb3BzLT5kbG1fdW5sb2NrKGNvbm4sIGxrc2IsIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG9jZnMyX2RsbV91bmxvY2spOwogCi1pbnQgb2NmczJfZGxtX2xvY2tfc3RhdHVzKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKQoraW50IG9jZnMyX2RsbV9sb2NrX3N0YXR1cyhzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IpCiB7CiAJcmV0dXJuIGFjdGl2ZV9zdGFjay0+c3Bfb3BzLT5sb2NrX3N0YXR1cyhsa3NiKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG9jZnMyX2RsbV9sb2NrX3N0YXR1cyk7CiAKLWludCBvY2ZzMl9kbG1fbHZiX3ZhbGlkKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKQoraW50IG9jZnMyX2RsbV9sdmJfdmFsaWQoc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiKQogewogCXJldHVybiBhY3RpdmVfc3RhY2stPnNwX29wcy0+bHZiX3ZhbGlkKGxrc2IpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwob2NmczJfZGxtX2x2Yl92YWxpZCk7CiAKLXZvaWQgKm9jZnMyX2RsbV9sdmIodW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpCit2b2lkICpvY2ZzMl9kbG1fbHZiKHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYikKIHsKIAlyZXR1cm4gYWN0aXZlX3N0YWNrLT5zcF9vcHMtPmxvY2tfbHZiKGxrc2IpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwob2NmczJfZGxtX2x2Yik7CiAKLXZvaWQgb2NmczJfZGxtX2R1bXBfbGtzYih1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYikKK3ZvaWQgb2NmczJfZGxtX2R1bXBfbGtzYihzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IpCiB7CiAJYWN0aXZlX3N0YWNrLT5zcF9vcHMtPmR1bXBfbGtzYihsa3NiKTsKIH0KQEAgLTMxMiw2ICszMTEsNyBAQAogaW50IG9jZnMyX2NsdXN0ZXJfY29ubmVjdChjb25zdCBjaGFyICpzdGFja19uYW1lLAogCQkJICBjb25zdCBjaGFyICpncm91cCwKIAkJCSAgaW50IGdyb3VwbGVuLAorCQkJICBzdHJ1Y3Qgb2NmczJfbG9ja2luZ19wcm90b2NvbCAqbHByb3RvLAogCQkJICB2b2lkICgqcmVjb3ZlcnlfaGFuZGxlcikoaW50IG5vZGVfbnVtLAogCQkJCQkJICAgdm9pZCAqcmVjb3ZlcnlfZGF0YSksCiAJCQkgIHZvaWQgKnJlY292ZXJ5X2RhdGEsCkBAIC0zMjksNiArMzI5LDEyIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWlmIChtZW1jbXAoJmxwcm90by0+bHBfbWF4X3ZlcnNpb24sICZsb2NraW5nX21heF92ZXJzaW9uLAorCQkgICBzaXplb2Yoc3RydWN0IG9jZnMyX3Byb3RvY29sX3ZlcnNpb24pKSkgeworCQlyYyA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwogCW5ld19jb25uID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiksCiAJCQkgICBHRlBfS0VSTkVMKTsKIAlpZiAoIW5ld19jb25uKSB7CkBAIC0zNDEsNiArMzQ3LDcgQEAKIAluZXdfY29ubi0+Y2NfcmVjb3ZlcnlfaGFuZGxlciA9IHJlY292ZXJ5X2hhbmRsZXI7CiAJbmV3X2Nvbm4tPmNjX3JlY292ZXJ5X2RhdGEgPSByZWNvdmVyeV9kYXRhOwogCisJbmV3X2Nvbm4tPmNjX3Byb3RvID0gbHByb3RvOwogCS8qIFN0YXJ0IHRoZSBuZXcgY29ubmVjdGlvbiBhdCBvdXIgbWF4aW11bSBjb21wYXRpYmlsaXR5IGxldmVsICovCiAJbmV3X2Nvbm4tPmNjX3ZlcnNpb24gPSBscHJvdG8tPmxwX21heF92ZXJzaW9uOwogCkBAIC0zNjYsNiArMzczLDI0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChvY2ZzMl9jbHVzdGVyX2Nvbm5lY3QpOwogCisvKiBUaGUgY2FsbGVyIHdpbGwgZW5zdXJlIGFsbCBub2RlcyBoYXZlIHRoZSBzYW1lIGNsdXN0ZXIgc3RhY2sgKi8KK2ludCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3RfYWdub3N0aWMoY29uc3QgY2hhciAqZ3JvdXAsCisJCQkJICAgaW50IGdyb3VwbGVuLAorCQkJCSAgIHN0cnVjdCBvY2ZzMl9sb2NraW5nX3Byb3RvY29sICpscHJvdG8sCisJCQkJICAgdm9pZCAoKnJlY292ZXJ5X2hhbmRsZXIpKGludCBub2RlX251bSwKKwkJCQkJCQkgICAgdm9pZCAqcmVjb3ZlcnlfZGF0YSksCisJCQkJICAgdm9pZCAqcmVjb3ZlcnlfZGF0YSwKKwkJCQkgICBzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICoqY29ubikKK3sKKwljaGFyICpzdGFja19uYW1lID0gTlVMTDsKKworCWlmIChjbHVzdGVyX3N0YWNrX25hbWVbMF0pCisJCXN0YWNrX25hbWUgPSBjbHVzdGVyX3N0YWNrX25hbWU7CisJcmV0dXJuIG9jZnMyX2NsdXN0ZXJfY29ubmVjdChzdGFja19uYW1lLCBncm91cCwgZ3JvdXBsZW4sIGxwcm90bywKKwkJCQkgICAgIHJlY292ZXJ5X2hhbmRsZXIsIHJlY292ZXJ5X2RhdGEsIGNvbm4pOworfQorRVhQT1JUX1NZTUJPTF9HUEwob2NmczJfY2x1c3Rlcl9jb25uZWN0X2Fnbm9zdGljKTsKKwogLyogSWYgaGFuZ3VwX3BlbmRpbmcgaXMgMCwgdGhlIHN0YWNrIGRyaXZlciB3aWxsIGJlIGRyb3BwZWQgKi8KIGludCBvY2ZzMl9jbHVzdGVyX2Rpc2Nvbm5lY3Qoc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwKIAkJCSAgICAgaW50IGhhbmd1cF9wZW5kaW5nKQpAQCAtNDUzLDEwICs0NzgsMTAgQEAKIAlzc2l6ZV90IHJldCA9IDA7CiAKIAlzcGluX2xvY2soJm9jZnMyX3N0YWNrX2xvY2spOwotCWlmIChscHJvdG8pCisJaWYgKGxvY2tpbmdfbWF4X3ZlcnNpb24ucHZfbWFqb3IpCiAJCXJldCA9IHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXUuJXVcbiIsCi0JCQkgICAgICAgbHByb3RvLT5scF9tYXhfdmVyc2lvbi5wdl9tYWpvciwKLQkJCSAgICAgICBscHJvdG8tPmxwX21heF92ZXJzaW9uLnB2X21pbm9yKTsKKwkJCSAgICAgICBsb2NraW5nX21heF92ZXJzaW9uLnB2X21ham9yLAorCQkJICAgICAgIGxvY2tpbmdfbWF4X3ZlcnNpb24ucHZfbWlub3IpOwogCXNwaW5fdW5sb2NrKCZvY2ZzMl9zdGFja19sb2NrKTsKIAogCXJldHVybiByZXQ7CkBAIC02ODUsNyArNzEwLDEwIEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBvY2ZzMl9zdGFja19nbHVlX2V4aXQodm9pZCkKIHsKLQlscHJvdG8gPSBOVUxMOworCW1lbXNldCgmbG9ja2luZ19tYXhfdmVyc2lvbiwgMCwKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl9wcm90b2NvbF92ZXJzaW9uKSk7CisJbG9ja2luZ19tYXhfdmVyc2lvbi5wdl9tYWpvciA9IDA7CisJbG9ja2luZ19tYXhfdmVyc2lvbi5wdl9taW5vciA9IDA7CiAJb2NmczJfc3lzZnNfZXhpdCgpOwogCWlmIChvY2ZzMl90YWJsZV9oZWFkZXIpCiAJCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKG9jZnMyX3RhYmxlX2hlYWRlcik7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdGFja2dsdWUuaCBiL2ZzL29jZnMyL3N0YWNrZ2x1ZS5oCmluZGV4IDAzYTQ0ZDYuLjhjZTczOTggMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N0YWNrZ2x1ZS5oCisrKyBiL2ZzL29jZnMyL3N0YWNrZ2x1ZS5oCkBAIC01NiwxNyArNTYsNiBAQAogfTsKIAogLyoKLSAqIFRoZSBvY2ZzMl9sb2NraW5nX3Byb3RvY29sIGRlZmluZXMgdGhlIGhhbmRsZXJzIGNhbGxlZCBvbiBvY2ZzMidzIGJlaGFsZi4KLSAqLwotc3RydWN0IG9jZnMyX2xvY2tpbmdfcHJvdG9jb2wgewotCXN0cnVjdCBvY2ZzMl9wcm90b2NvbF92ZXJzaW9uIGxwX21heF92ZXJzaW9uOwotCXZvaWQgKCpscF9sb2NrX2FzdCkodm9pZCAqYXN0YXJnKTsKLQl2b2lkICgqbHBfYmxvY2tpbmdfYXN0KSh2b2lkICphc3RhcmcsIGludCBsZXZlbCk7Ci0Jdm9pZCAoKmxwX3VubG9ja19hc3QpKHZvaWQgKmFzdGFyZywgaW50IGVycm9yKTsKLX07Ci0KLQotLyoKICAqIFRoZSBkbG1fbG9ja3N0YXR1cyBzdHJ1Y3QgaW5jbHVkZXMgbHZiIHNwYWNlLCBidXQgdGhlIGRsbV9sa3NiIHN0cnVjdCBvbmx5CiAgKiBoYXMgYSBwb2ludGVyIHRvIHNlcGFyYXRlbHkgYWxsb2NhdGVkIGx2YiBzcGFjZS4gIFRoaXMgc3RydWN0IGV4aXN0cyBvbmx5IHRvCiAgKiBpbmNsdWRlIGluIHRoZSBsa3NiIHVuaW9uIHRvIG1ha2Ugc3BhY2UgZm9yIGEgY29tYmluZWQgZGxtX2xrc2IgYW5kIGx2Yi4KQEAgLTgxLDEzICs3MCwyOCBAQAogICogc2l6ZSBvZiB0aGUgdW5pb24gaXMga25vd24uICBMb2NrIHN0YXR1cyBzdHJ1Y3R1cmVzIGFyZSBlbWJlZGRlZCBpbgogICogb2NmczIgaW5vZGVzLgogICovCi11bmlvbiBvY2ZzMl9kbG1fbGtzYiB7Ci0Jc3RydWN0IGRsbV9sb2Nrc3RhdHVzIGxrc2JfbzJkbG07Ci0Jc3RydWN0IGRsbV9sa3NiIGxrc2JfZnNkbG07Ci0Jc3RydWN0IGZzZGxtX2xrc2JfcGx1c19sdmIgcGFkZGluZzsKK3N0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb247CitzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgeworCSB1bmlvbiB7CisJCSBzdHJ1Y3QgZGxtX2xvY2tzdGF0dXMgbGtzYl9vMmRsbTsKKwkJIHN0cnVjdCBkbG1fbGtzYiBsa3NiX2ZzZGxtOworCQkgc3RydWN0IGZzZGxtX2xrc2JfcGx1c19sdmIgcGFkZGluZzsKKwkgfTsKKwkgc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqbGtzYl9jb25uOwogfTsKIAogLyoKKyAqIFRoZSBvY2ZzMl9sb2NraW5nX3Byb3RvY29sIGRlZmluZXMgdGhlIGhhbmRsZXJzIGNhbGxlZCBvbiBvY2ZzMidzIGJlaGFsZi4KKyAqLworc3RydWN0IG9jZnMyX2xvY2tpbmdfcHJvdG9jb2wgeworCXN0cnVjdCBvY2ZzMl9wcm90b2NvbF92ZXJzaW9uIGxwX21heF92ZXJzaW9uOworCXZvaWQgKCpscF9sb2NrX2FzdCkoc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiKTsKKwl2b2lkICgqbHBfYmxvY2tpbmdfYXN0KShzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IsIGludCBsZXZlbCk7CisJdm9pZCAoKmxwX3VubG9ja19hc3QpKHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwgaW50IGVycm9yKTsKK307CisKKworLyoKICAqIEEgY2x1c3RlciBjb25uZWN0aW9uLiAgTW9zdGx5IG9wYXF1ZSB0byBvY2ZzMiwgdGhlIGNvbm5lY3Rpb24gaG9sZHMKICAqIHN0YXRlIGZvciB0aGUgdW5kZXJseWluZyBzdGFjay4gIG9jZnMyIGRvZXMgdXNlIGNjX3ZlcnNpb24gdG8gZGV0ZXJtaW5lCiAgKiBsb2NraW5nIGNvbXBhdGliaWxpdHkuCkBAIC05Niw2ICsxMDAsNyBAQAogCWNoYXIgY2NfbmFtZVtHUk9VUF9OQU1FX01BWF07CiAJaW50IGNjX25hbWVsZW47CiAJc3RydWN0IG9jZnMyX3Byb3RvY29sX3ZlcnNpb24gY2NfdmVyc2lvbjsKKwlzdHJ1Y3Qgb2NmczJfbG9ja2luZ19wcm90b2NvbCAqY2NfcHJvdG87CiAJdm9pZCAoKmNjX3JlY292ZXJ5X2hhbmRsZXIpKGludCBub2RlX251bSwgdm9pZCAqcmVjb3ZlcnlfZGF0YSk7CiAJdm9pZCAqY2NfcmVjb3ZlcnlfZGF0YTsKIAl2b2lkICpjY19sb2Nrc3BhY2U7CkBAIC0xNTUsMjcgKzE2MCwyOSBAQAogCSAqCiAJICogYXN0IGFuZCBiYXN0IGZ1bmN0aW9ucyBhcmUgbm90IHBhcnQgb2YgdGhlIGNhbGwgYmVjYXVzZSB0aGUKIAkgKiBzdGFjayB3aWxsIGxpa2VseSB3YW50IHRvIHdyYXAgYXN0IGFuZCBiYXN0IGNhbGxzIGJlZm9yZSBwYXNzaW5nCi0JICogdGhlbSB0byBzdGFjay0+c3BfcHJvdG8uCisJICogdGhlbSB0byBzdGFjay0+c3BfcHJvdG8uICBUaGVyZSBpcyBubyBhc3RhcmcuICBUaGUgbGtzYiB3aWxsCisJICogYmUgcGFzc2VkIGJhY2sgdG8gdGhlIGFzdCBhbmQgYmFzdCBmdW5jdGlvbnMuICBUaGUgY2FsbGVyIGNhbgorCSAqIHVzZSB0aGlzIHRvIGZpbmQgdGhlaXIgb2JqZWN0LgogCSAqLwogCWludCAoKmRsbV9sb2NrKShzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uLAogCQkJaW50IG1vZGUsCi0JCQl1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwKKwkJCXN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwKIAkJCXUzMiBmbGFncywKIAkJCXZvaWQgKm5hbWUsCi0JCQl1bnNpZ25lZCBpbnQgbmFtZWxlbiwKLQkJCXZvaWQgKmFzdGFyZyk7CisJCQl1bnNpZ25lZCBpbnQgbmFtZWxlbik7CiAKIAkvKgogCSAqIENhbGwgdGhlIHVuZGVybHlpbmcgZGxtIHVubG9jayBmdW5jdGlvbi4gIFRoZSAtPmRsbV91bmxvY2soKQogCSAqIGZ1bmN0aW9uIHNob3VsZCBjb252ZXJ0IHRoZSBmbGFncyBhcyBhcHByb3ByaWF0ZS4KIAkgKgogCSAqIFRoZSB1bmxvY2sgYXN0IGlzIG5vdCBwYXNzZWQsIGFzIHRoZSBzdGFjayB3aWxsIHdhbnQgdG8gd3JhcAotCSAqIGl0IGJlZm9yZSBjYWxsaW5nIHN0YWNrLT5zcF9wcm90by0+bHBfdW5sb2NrX2FzdCgpLgorCSAqIGl0IGJlZm9yZSBjYWxsaW5nIHN0YWNrLT5zcF9wcm90by0+bHBfdW5sb2NrX2FzdCgpLiAgVGhlcmUgaXMKKwkgKiBubyBhc3RhcmcuICBUaGUgbGtzYiB3aWxsIGJlIHBhc3NlZCBiYWNrIHRvIHRoZSB1bmxvY2sgYXN0CisJICogZnVuY3Rpb24uICBUaGUgY2FsbGVyIGNhbiB1c2UgdGhpcyB0byBmaW5kIHRoZWlyIG9iamVjdC4KIAkgKi8KIAlpbnQgKCpkbG1fdW5sb2NrKShzdHJ1Y3Qgb2NmczJfY2x1c3Rlcl9jb25uZWN0aW9uICpjb25uLAotCQkJICB1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwKLQkJCSAgdTMyIGZsYWdzLAotCQkJICB2b2lkICphc3RhcmcpOworCQkJICBzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IsCisJCQkgIHUzMiBmbGFncyk7CiAKIAkvKgogCSAqIFJldHVybiB0aGUgc3RhdHVzIG9mIHRoZSBjdXJyZW50IGxvY2sgc3RhdHVzIGJsb2NrLiAgVGhlIGZzCkBAIC0xODMsMTcgKzE5MCwxNyBAQAogCSAqIGNhbGxiYWNrIHB1bGxzIG91dCB0aGUgc3RhY2stc3BlY2lmaWMgbGtzYiwgY29udmVydHMgdGhlIHN0YXR1cwogCSAqIHRvIGEgcHJvcGVyIGVycm5vLCBhbmQgcmV0dXJucyBpdC4KIAkgKi8KLQlpbnQgKCpsb2NrX3N0YXR1cykodW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IpOworCWludCAoKmxvY2tfc3RhdHVzKShzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IpOwogCiAJLyoKIAkgKiBSZXR1cm4gbm9uLXplcm8gaWYgdGhlIExWQiBpcyB2YWxpZC4KIAkgKi8KLQlpbnQgKCpsdmJfdmFsaWQpKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKTsKKwlpbnQgKCpsdmJfdmFsaWQpKHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYik7CiAKIAkvKgogCSAqIFB1bGwgdGhlIGx2YiBwb2ludGVyIG9mZiBvZiB0aGUgc3RhY2stc3BlY2lmaWMgbGtzYi4KIAkgKi8KLQl2b2lkICooKmxvY2tfbHZiKSh1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYik7CisJdm9pZCAqKCpsb2NrX2x2Yikoc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiKTsKIAogCS8qCiAJICogQ2x1c3Rlci1hd2FyZSBwb3NpeCBsb2NrcwpAQCAtMjEwLDcgKzIxNyw3IEBACiAJICogVGhpcyBpcyBhbiBvcHRvaW5hbCBkZWJ1Z2dpbmcgaG9vay4gIElmIHByb3ZpZGVkLCB0aGUKIAkgKiBzdGFjayBjYW4gZHVtcCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhpcyBsb2NrLgogCSAqLwotCXZvaWQgKCpkdW1wX2xrc2IpKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKTsKKwl2b2lkICgqZHVtcF9sa3NiKShzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IpOwogfTsKIAogLyoKQEAgLTIyNiw3ICsyMzMsNyBAQAogCS8qIFRoZXNlIGFyZSBtYW5hZ2VkIGJ5IHRoZSBzdGFja2dsdWUgY29kZS4gKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHNwX2xpc3Q7CiAJdW5zaWduZWQgaW50IHNwX2NvdW50OwotCXN0cnVjdCBvY2ZzMl9sb2NraW5nX3Byb3RvY29sICpzcF9wcm90bzsKKwlzdHJ1Y3Qgb2NmczJfcHJvdG9jb2xfdmVyc2lvbiBzcF9tYXhfcHJvdG87CiB9OwogCiAKQEAgLTIzNCwxMCArMjQxLDIyIEBACiBpbnQgb2NmczJfY2x1c3Rlcl9jb25uZWN0KGNvbnN0IGNoYXIgKnN0YWNrX25hbWUsCiAJCQkgIGNvbnN0IGNoYXIgKmdyb3VwLAogCQkJICBpbnQgZ3JvdXBsZW4sCisJCQkgIHN0cnVjdCBvY2ZzMl9sb2NraW5nX3Byb3RvY29sICpscHJvdG8sCiAJCQkgIHZvaWQgKCpyZWNvdmVyeV9oYW5kbGVyKShpbnQgbm9kZV9udW0sCiAJCQkJCQkgICB2b2lkICpyZWNvdmVyeV9kYXRhKSwKIAkJCSAgdm9pZCAqcmVjb3ZlcnlfZGF0YSwKIAkJCSAgc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqKmNvbm4pOworLyoKKyAqIFVzZWQgYnkgY2FsbGVycyB0aGF0IGRvbid0IHN0b3JlIHRoZWlyIHN0YWNrIG5hbWUuICBUaGV5IG11c3QgZW5zdXJlCisgKiBhbGwgbm9kZXMgaGF2ZSB0aGUgc2FtZSBzdGFjay4KKyAqLworaW50IG9jZnMyX2NsdXN0ZXJfY29ubmVjdF9hZ25vc3RpYyhjb25zdCBjaGFyICpncm91cCwKKwkJCQkgICBpbnQgZ3JvdXBsZW4sCisJCQkJICAgc3RydWN0IG9jZnMyX2xvY2tpbmdfcHJvdG9jb2wgKmxwcm90bywKKwkJCQkgICB2b2lkICgqcmVjb3ZlcnlfaGFuZGxlcikoaW50IG5vZGVfbnVtLAorCQkJCQkJCSAgICB2b2lkICpyZWNvdmVyeV9kYXRhKSwKKwkJCQkgICB2b2lkICpyZWNvdmVyeV9kYXRhLAorCQkJCSAgIHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKipjb25uKTsKIGludCBvY2ZzMl9jbHVzdGVyX2Rpc2Nvbm5lY3Qoc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwKIAkJCSAgICAgaW50IGhhbmd1cF9wZW5kaW5nKTsKIHZvaWQgb2NmczJfY2x1c3Rlcl9oYW5ndXAoY29uc3QgY2hhciAqZ3JvdXAsIGludCBncm91cGxlbik7CkBAIC0yNDYsMjYgKzI2NSwyNCBAQAogc3RydWN0IG9jZnMyX2xvY2tfcmVzOwogaW50IG9jZnMyX2RsbV9sb2NrKHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm4sCiAJCSAgIGludCBtb2RlLAotCQkgICB1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYiwKKwkJICAgc3RydWN0IG9jZnMyX2RsbV9sa3NiICpsa3NiLAogCQkgICB1MzIgZmxhZ3MsCiAJCSAgIHZvaWQgKm5hbWUsCi0JCSAgIHVuc2lnbmVkIGludCBuYW1lbGVuLAotCQkgICBzdHJ1Y3Qgb2NmczJfbG9ja19yZXMgKmFzdGFyZyk7CisJCSAgIHVuc2lnbmVkIGludCBuYW1lbGVuKTsKIGludCBvY2ZzMl9kbG1fdW5sb2NrKHN0cnVjdCBvY2ZzMl9jbHVzdGVyX2Nvbm5lY3Rpb24gKmNvbm4sCi0JCSAgICAgdW5pb24gb2NmczJfZGxtX2xrc2IgKmxrc2IsCi0JCSAgICAgdTMyIGZsYWdzLAotCQkgICAgIHN0cnVjdCBvY2ZzMl9sb2NrX3JlcyAqYXN0YXJnKTsKKwkJICAgICBzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IsCisJCSAgICAgdTMyIGZsYWdzKTsKIAotaW50IG9jZnMyX2RsbV9sb2NrX3N0YXR1cyh1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYik7Ci1pbnQgb2NmczJfZGxtX2x2Yl92YWxpZCh1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYik7Ci12b2lkICpvY2ZzMl9kbG1fbHZiKHVuaW9uIG9jZnMyX2RsbV9sa3NiICpsa3NiKTsKLXZvaWQgb2NmczJfZGxtX2R1bXBfbGtzYih1bmlvbiBvY2ZzMl9kbG1fbGtzYiAqbGtzYik7CitpbnQgb2NmczJfZGxtX2xvY2tfc3RhdHVzKHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYik7CitpbnQgb2NmczJfZGxtX2x2Yl92YWxpZChzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IpOwordm9pZCAqb2NmczJfZGxtX2x2YihzdHJ1Y3Qgb2NmczJfZGxtX2xrc2IgKmxrc2IpOwordm9pZCBvY2ZzMl9kbG1fZHVtcF9sa3NiKHN0cnVjdCBvY2ZzMl9kbG1fbGtzYiAqbGtzYik7CiAKIGludCBvY2ZzMl9zdGFja19zdXBwb3J0c19wbG9ja3Modm9pZCk7CiBpbnQgb2NmczJfcGxvY2soc3RydWN0IG9jZnMyX2NsdXN0ZXJfY29ubmVjdGlvbiAqY29ubiwgdTY0IGlubywKIAkJc3RydWN0IGZpbGUgKmZpbGUsIGludCBjbWQsIHN0cnVjdCBmaWxlX2xvY2sgKmZsKTsKIAotdm9pZCBvY2ZzMl9zdGFja19nbHVlX3NldF9sb2NraW5nX3Byb3RvY29sKHN0cnVjdCBvY2ZzMl9sb2NraW5nX3Byb3RvY29sICpwcm90byk7Cit2b2lkIG9jZnMyX3N0YWNrX2dsdWVfc2V0X21heF9wcm90b192ZXJzaW9uKHN0cnVjdCBvY2ZzMl9wcm90b2NvbF92ZXJzaW9uICptYXhfcHJvdG8pOwogCiAKIC8qIFVzZWQgYnkgc3RhY2sgcGx1Z2lucyAqLwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIvc3ViYWxsb2MuYyBiL2ZzL29jZnMyL3N1YmFsbG9jLmMKaW5kZXggYzMwYjY0NC4uYzNjNjBiYyAxMDA2NDQKLS0tIGEvZnMvb2NmczIvc3ViYWxsb2MuYworKysgYi9mcy9vY2ZzMi9zdWJhbGxvYy5jCkBAIC01MSw3ICs1MSw3IEBACiAjZGVmaW5lIEFMTE9DX05FV19HUk9VUAkJCTB4MQogI2RlZmluZSBBTExPQ19HUk9VUFNfRlJPTV9HTE9CQUwJMHgyCiAKLSNkZWZpbmUgT0NGUzJfTUFYX0lOT0RFU19UT19TVEVBTAkxMDI0CisjZGVmaW5lIE9DRlMyX01BWF9UT19TVEVBTAkJMTAyNAogCiBzdGF0aWMgaW5saW5lIHZvaWQgb2NmczJfZGVidWdfYmcoc3RydWN0IG9jZnMyX2dyb3VwX2Rlc2MgKmJnKTsKIHN0YXRpYyBpbmxpbmUgdm9pZCBvY2ZzMl9kZWJ1Z19zdWJhbGxvY19pbm9kZShzdHJ1Y3Qgb2NmczJfZGlub2RlICpmZSk7CkBAIC02MzcsMTIgKzYzNywxMTMgQEAKIAlyZXR1cm4gc3RhdHVzOwogfQogCitzdGF0aWMgdm9pZCBvY2ZzMl9pbml0X2lub2RlX3N0ZWFsX3Nsb3Qoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwlvc2ItPnNfaW5vZGVfc3RlYWxfc2xvdCA9IE9DRlMyX0lOVkFMSURfU0xPVDsKKwlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CisJYXRvbWljX3NldCgmb3NiLT5zX251bV9pbm9kZXNfc3RvbGVuLCAwKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfaW5pdF9tZXRhX3N0ZWFsX3Nsb3Qoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IpCit7CisJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwlvc2ItPnNfbWV0YV9zdGVhbF9zbG90ID0gT0NGUzJfSU5WQUxJRF9TTE9UOworCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwlhdG9taWNfc2V0KCZvc2ItPnNfbnVtX21ldGFfc3RvbGVuLCAwKTsKK30KKwordm9pZCBvY2ZzMl9pbml0X3N0ZWFsX3Nsb3RzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCW9jZnMyX2luaXRfaW5vZGVfc3RlYWxfc2xvdChvc2IpOworCW9jZnMyX2luaXRfbWV0YV9zdGVhbF9zbG90KG9zYik7Cit9CisKK3N0YXRpYyB2b2lkIF9fb2NmczJfc2V0X3N0ZWFsX3Nsb3Qoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIGludCBzbG90LCBpbnQgdHlwZSkKK3sKKwlzcGluX2xvY2soJm9zYi0+b3NiX2xvY2spOworCWlmICh0eXBlID09IElOT0RFX0FMTE9DX1NZU1RFTV9JTk9ERSkKKwkJb3NiLT5zX2lub2RlX3N0ZWFsX3Nsb3QgPSBzbG90OworCWVsc2UgaWYgKHR5cGUgPT0gRVhURU5UX0FMTE9DX1NZU1RFTV9JTk9ERSkKKwkJb3NiLT5zX21ldGFfc3RlYWxfc2xvdCA9IHNsb3Q7CisJc3Bpbl91bmxvY2soJm9zYi0+b3NiX2xvY2spOworfQorCitzdGF0aWMgaW50IF9fb2NmczJfZ2V0X3N0ZWFsX3Nsb3Qoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsIGludCB0eXBlKQoreworCWludCBzbG90ID0gT0NGUzJfSU5WQUxJRF9TTE9UOworCisJc3Bpbl9sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKwlpZiAodHlwZSA9PSBJTk9ERV9BTExPQ19TWVNURU1fSU5PREUpCisJCXNsb3QgPSBvc2ItPnNfaW5vZGVfc3RlYWxfc2xvdDsKKwllbHNlIGlmICh0eXBlID09IEVYVEVOVF9BTExPQ19TWVNURU1fSU5PREUpCisJCXNsb3QgPSBvc2ItPnNfbWV0YV9zdGVhbF9zbG90OworCXNwaW5fdW5sb2NrKCZvc2ItPm9zYl9sb2NrKTsKKworCXJldHVybiBzbG90OworfQorCitzdGF0aWMgaW50IG9jZnMyX2dldF9pbm9kZV9zdGVhbF9zbG90KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCXJldHVybiBfX29jZnMyX2dldF9zdGVhbF9zbG90KG9zYiwgSU5PREVfQUxMT0NfU1lTVEVNX0lOT0RFKTsKK30KKworc3RhdGljIGludCBvY2ZzMl9nZXRfbWV0YV9zdGVhbF9zbG90KHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKQoreworCXJldHVybiBfX29jZnMyX2dldF9zdGVhbF9zbG90KG9zYiwgRVhURU5UX0FMTE9DX1NZU1RFTV9JTk9ERSk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfc3RlYWxfcmVzb3VyY2Uoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkJc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjLAorCQkJCWludCB0eXBlKQoreworCWludCBpLCBzdGF0dXMgPSAtRU5PU1BDOworCWludCBzbG90ID0gX19vY2ZzMl9nZXRfc3RlYWxfc2xvdChvc2IsIHR5cGUpOworCisJLyogU3RhcnQgdG8gc3RlYWwgcmVzb3VyY2UgZnJvbSB0aGUgZmlyc3Qgc2xvdCBhZnRlciBvdXJzLiAqLworCWlmIChzbG90ID09IE9DRlMyX0lOVkFMSURfU0xPVCkKKwkJc2xvdCA9IG9zYi0+c2xvdF9udW0gKyAxOworCisJZm9yIChpID0gMDsgaSA8IG9zYi0+bWF4X3Nsb3RzOyBpKyssIHNsb3QrKykgeworCQlpZiAoc2xvdCA9PSBvc2ItPm1heF9zbG90cykKKwkJCXNsb3QgPSAwOworCisJCWlmIChzbG90ID09IG9zYi0+c2xvdF9udW0pCisJCQljb250aW51ZTsKKworCQlzdGF0dXMgPSBvY2ZzMl9yZXNlcnZlX3N1YmFsbG9jX2JpdHMob3NiLCBhYywKKwkJCQkJCSAgICAgdHlwZSwKKwkJCQkJCSAgICAgKHUzMilzbG90LCBOVUxMLAorCQkJCQkJICAgICBOT1RfQUxMT0NfTkVXX0dST1VQKTsKKwkJaWYgKHN0YXR1cyA+PSAwKSB7CisJCQlfX29jZnMyX3NldF9zdGVhbF9zbG90KG9zYiwgc2xvdCwgdHlwZSk7CisJCQlicmVhazsKKwkJfQorCisJCW9jZnMyX2ZyZWVfYWNfcmVzb3VyY2UoYWMpOworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfc3RlYWxfaW5vZGUoc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCisJCQkgICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYykKK3sKKwlyZXR1cm4gb2NmczJfc3RlYWxfcmVzb3VyY2Uob3NiLCBhYywgSU5PREVfQUxMT0NfU1lTVEVNX0lOT0RFKTsKK30KKworc3RhdGljIGludCBvY2ZzMl9zdGVhbF9tZXRhKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiLAorCQkJICAgIHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYykKK3sKKwlyZXR1cm4gb2NmczJfc3RlYWxfcmVzb3VyY2Uob3NiLCBhYywgRVhURU5UX0FMTE9DX1NZU1RFTV9JTk9ERSk7Cit9CisKIGludCBvY2ZzMl9yZXNlcnZlX25ld19tZXRhZGF0YV9ibG9ja3Moc3RydWN0IG9jZnMyX3N1cGVyICpvc2IsCiAJCQkJICAgICAgaW50IGJsb2NrcywKIAkJCQkgICAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKmFjKQogewogCWludCBzdGF0dXM7Ci0JdTMyIHNsb3Q7CisJaW50IHNsb3QgPSBvY2ZzMl9nZXRfbWV0YV9zdGVhbF9zbG90KG9zYik7CiAKIAkqYWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCksIEdGUF9LRVJORUwpOwogCWlmICghKCphYykpIHsKQEAgLTY1MywxMiArNzU0LDM0IEBACiAKIAkoKmFjKS0+YWNfYml0c193YW50ZWQgPSBibG9ja3M7CiAJKCphYyktPmFjX3doaWNoID0gT0NGUzJfQUNfVVNFX01FVEE7Ci0Jc2xvdCA9IG9zYi0+c2xvdF9udW07CiAJKCphYyktPmFjX2dyb3VwX3NlYXJjaCA9IG9jZnMyX2Jsb2NrX2dyb3VwX3NlYXJjaDsKIAorCWlmIChzbG90ICE9IE9DRlMyX0lOVkFMSURfU0xPVCAmJgorCQlhdG9taWNfcmVhZCgmb3NiLT5zX251bV9tZXRhX3N0b2xlbikgPCBPQ0ZTMl9NQVhfVE9fU1RFQUwpCisJCWdvdG8gZXh0ZW50X3N0ZWFsOworCisJYXRvbWljX3NldCgmb3NiLT5zX251bV9tZXRhX3N0b2xlbiwgMCk7CiAJc3RhdHVzID0gb2NmczJfcmVzZXJ2ZV9zdWJhbGxvY19iaXRzKG9zYiwgKCphYyksCiAJCQkJCSAgICAgRVhURU5UX0FMTE9DX1NZU1RFTV9JTk9ERSwKLQkJCQkJICAgICBzbG90LCBOVUxMLCBBTExPQ19ORVdfR1JPVVApOworCQkJCQkgICAgICh1MzIpb3NiLT5zbG90X251bSwgTlVMTCwKKwkJCQkJICAgICBBTExPQ19ORVdfR1JPVVApOworCisKKwlpZiAoc3RhdHVzID49IDApIHsKKwkJc3RhdHVzID0gMDsKKwkJaWYgKHNsb3QgIT0gT0NGUzJfSU5WQUxJRF9TTE9UKQorCQkJb2NmczJfaW5pdF9tZXRhX3N0ZWFsX3Nsb3Qob3NiKTsKKwkJZ290byBiYWlsOworCX0gZWxzZSBpZiAoc3RhdHVzIDwgMCAmJiBzdGF0dXMgIT0gLUVOT1NQQykgeworCQltbG9nX2Vycm5vKHN0YXR1cyk7CisJCWdvdG8gYmFpbDsKKwl9CisKKwlvY2ZzMl9mcmVlX2FjX3Jlc291cmNlKCphYyk7CisKK2V4dGVudF9zdGVhbDoKKwlzdGF0dXMgPSBvY2ZzMl9zdGVhbF9tZXRhKG9zYiwgKmFjKTsKKwlhdG9taWNfaW5jKCZvc2ItPnNfbnVtX21ldGFfc3RvbGVuKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQlpZiAoc3RhdHVzICE9IC1FTk9TUEMpCiAJCQltbG9nX2Vycm5vKHN0YXR1cyk7CkBAIC02ODUsNDMgKzgwOCwxMSBAQAogCQkJCQlhYyk7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfc3RlYWxfaW5vZGVfZnJvbV9vdGhlcl9ub2RlcyhzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKLQkJCQkJICAgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKmFjKQotewotCWludCBpLCBzdGF0dXMgPSAtRU5PU1BDOwotCXMxNiBzbG90ID0gb2NmczJfZ2V0X2lub2RlX3N0ZWFsX3Nsb3Qob3NiKTsKLQotCS8qIFN0YXJ0IHRvIHN0ZWFsIGlub2RlcyBmcm9tIHRoZSBmaXJzdCBzbG90IGFmdGVyIG91cnMuICovCi0JaWYgKHNsb3QgPT0gT0NGUzJfSU5WQUxJRF9TTE9UKQotCQlzbG90ID0gb3NiLT5zbG90X251bSArIDE7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgb3NiLT5tYXhfc2xvdHM7IGkrKywgc2xvdCsrKSB7Ci0JCWlmIChzbG90ID09IG9zYi0+bWF4X3Nsb3RzKQotCQkJc2xvdCA9IDA7Ci0KLQkJaWYgKHNsb3QgPT0gb3NiLT5zbG90X251bSkKLQkJCWNvbnRpbnVlOwotCi0JCXN0YXR1cyA9IG9jZnMyX3Jlc2VydmVfc3ViYWxsb2NfYml0cyhvc2IsIGFjLAotCQkJCQkJICAgICBJTk9ERV9BTExPQ19TWVNURU1fSU5PREUsCi0JCQkJCQkgICAgIHNsb3QsIE5VTEwsCi0JCQkJCQkgICAgIE5PVF9BTExPQ19ORVdfR1JPVVApOwotCQlpZiAoc3RhdHVzID49IDApIHsKLQkJCW9jZnMyX3NldF9pbm9kZV9zdGVhbF9zbG90KG9zYiwgc2xvdCk7Ci0JCQlicmVhazsKLQkJfQotCi0JCW9jZnMyX2ZyZWVfYWNfcmVzb3VyY2UoYWMpOwotCX0KLQotCXJldHVybiBzdGF0dXM7Ci19Ci0KIGludCBvY2ZzMl9yZXNlcnZlX25ld19pbm9kZShzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiwKIAkJCSAgICBzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqKmFjKQogewogCWludCBzdGF0dXM7Ci0JczE2IHNsb3QgPSBvY2ZzMl9nZXRfaW5vZGVfc3RlYWxfc2xvdChvc2IpOworCWludCBzbG90ID0gb2NmczJfZ2V0X2lub2RlX3N0ZWFsX3Nsb3Qob3NiKTsKIAl1NjQgYWxsb2NfZ3JvdXA7CiAKIAkqYWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCksIEdGUF9LRVJORUwpOwpAQCAtNzU0LDE0ICs4NDUsMTQgQEAKIAkgKiBuZWVkIHRvIGNoZWNrIG91ciBzbG90cyB0byBzZWUgd2hldGhlciB0aGVyZSBpcyBzb21lIHNwYWNlIGZvciB1cy4KIAkgKi8KIAlpZiAoc2xvdCAhPSBPQ0ZTMl9JTlZBTElEX1NMT1QgJiYKLQkgICAgYXRvbWljX3JlYWQoJm9zYi0+c19udW1faW5vZGVzX3N0b2xlbikgPCBPQ0ZTMl9NQVhfSU5PREVTX1RPX1NURUFMKQorCSAgICBhdG9taWNfcmVhZCgmb3NiLT5zX251bV9pbm9kZXNfc3RvbGVuKSA8IE9DRlMyX01BWF9UT19TVEVBTCkKIAkJZ290byBpbm9kZV9zdGVhbDsKIAogCWF0b21pY19zZXQoJm9zYi0+c19udW1faW5vZGVzX3N0b2xlbiwgMCk7CiAJYWxsb2NfZ3JvdXAgPSBvc2ItPm9zYl9pbm9kZV9hbGxvY19ncm91cDsKIAlzdGF0dXMgPSBvY2ZzMl9yZXNlcnZlX3N1YmFsbG9jX2JpdHMob3NiLCAqYWMsCiAJCQkJCSAgICAgSU5PREVfQUxMT0NfU1lTVEVNX0lOT0RFLAotCQkJCQkgICAgIG9zYi0+c2xvdF9udW0sCisJCQkJCSAgICAgKHUzMilvc2ItPnNsb3RfbnVtLAogCQkJCQkgICAgICZhbGxvY19ncm91cCwKIAkJCQkJICAgICBBTExPQ19ORVdfR1JPVVAgfAogCQkJCQkgICAgIEFMTE9DX0dST1VQU19GUk9NX0dMT0JBTCk7CkBAIC03ODksNyArODgwLDcgQEAKIAlvY2ZzMl9mcmVlX2FjX3Jlc291cmNlKCphYyk7CiAKIGlub2RlX3N0ZWFsOgotCXN0YXR1cyA9IG9jZnMyX3N0ZWFsX2lub2RlX2Zyb21fb3RoZXJfbm9kZXMob3NiLCAqYWMpOworCXN0YXR1cyA9IG9jZnMyX3N0ZWFsX2lub2RlKG9zYiwgKmFjKTsKIAlhdG9taWNfaW5jKCZvc2ItPnNfbnVtX2lub2Rlc19zdG9sZW4pOwogCWlmIChzdGF0dXMgPCAwKSB7CiAJCWlmIChzdGF0dXMgIT0gLUVOT1NQQykKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL3N1YmFsbG9jLmggYi9mcy9vY2ZzMi9zdWJhbGxvYy5oCmluZGV4IDhjOWE3OGEuLmZhNjA3MjMgMTAwNjQ0Ci0tLSBhL2ZzL29jZnMyL3N1YmFsbG9jLmgKKysrIGIvZnMvb2NmczIvc3ViYWxsb2MuaApAQCAtNTYsNiArNTYsNyBAQAogCQkJCSBpcyB0aGUgc2FtZSBhcyB+MCAtIHVubGltaXRlZCAqLwogfTsKIAordm9pZCBvY2ZzMl9pbml0X3N0ZWFsX3Nsb3RzKHN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiKTsKIHZvaWQgb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KHN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICphYyk7CiBzdGF0aWMgaW5saW5lIGludCBvY2ZzMl9hbGxvY19jb250ZXh0X2JpdHNfbGVmdChzdHJ1Y3Qgb2NmczJfYWxsb2NfY29udGV4dCAqYWMpCiB7CmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9zdXBlci5jIGIvZnMvb2NmczIvc3VwZXIuYwppbmRleCA3NTVjZDQ5Li5kZWUwMzE5IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9zdXBlci5jCisrKyBiL2ZzL29jZnMyL3N1cGVyLmMKQEAgLTY5LDYgKzY5LDcgQEAKICNpbmNsdWRlICJ4YXR0ci5oIgogI2luY2x1ZGUgInF1b3RhLmgiCiAjaW5jbHVkZSAicmVmY291bnR0cmVlLmgiCisjaW5jbHVkZSAic3ViYWxsb2MuaCIKIAogI2luY2x1ZGUgImJ1ZmZlcl9oZWFkX2lvLmgiCiAKQEAgLTMwMSw5ICszMDIsMTIgQEAKIAogCXNwaW5fbG9jaygmb3NiLT5vc2JfbG9jayk7CiAJb3V0ICs9IHNucHJpbnRmKGJ1ZiArIG91dCwgbGVuIC0gb3V0LAotCQkJIiUxMHMgPT4gU2xvdDogJWQgIE51bVN0b2xlbjogJWRcbiIsICJTdGVhbCIsCisJCQkiJTEwcyA9PiBJbm9kZVNsb3Q6ICVkICBTdG9sZW5Jbm9kZXM6ICVkLCAiCisJCQkiTWV0YVNsb3Q6ICVkICBTdG9sZW5NZXRhOiAlZFxuIiwgIlN0ZWFsIiwKIAkJCW9zYi0+c19pbm9kZV9zdGVhbF9zbG90LAotCQkJYXRvbWljX3JlYWQoJm9zYi0+c19udW1faW5vZGVzX3N0b2xlbikpOworCQkJYXRvbWljX3JlYWQoJm9zYi0+c19udW1faW5vZGVzX3N0b2xlbiksCisJCQlvc2ItPnNfbWV0YV9zdGVhbF9zbG90LAorCQkJYXRvbWljX3JlYWQoJm9zYi0+c19udW1fbWV0YV9zdG9sZW4pKTsKIAlzcGluX3VubG9jaygmb3NiLT5vc2JfbG9jayk7CiAKIAlvdXQgKz0gc25wcmludGYoYnVmICsgb3V0LCBsZW4gLSBvdXQsICJPcnBoYW5TY2FuID0+ICIpOwpAQCAtMTk5Nyw3ICsyMDAxLDcgQEAKIAlvc2ItPmJsb2NrZWRfbG9ja19jb3VudCA9IDA7CiAJc3Bpbl9sb2NrX2luaXQoJm9zYi0+b3NiX2xvY2spOwogCXNwaW5fbG9ja19pbml0KCZvc2ItPm9zYl94YXR0cl9sb2NrKTsKLQlvY2ZzMl9pbml0X2lub2RlX3N0ZWFsX3Nsb3Qob3NiKTsKKwlvY2ZzMl9pbml0X3N0ZWFsX3Nsb3RzKG9zYik7CiAKIAlhdG9taWNfc2V0KCZvc2ItPmFsbG9jX3N0YXRzLm1vdmVzLCAwKTsKIAlhdG9taWNfc2V0KCZvc2ItPmFsbG9jX3N0YXRzLmxvY2FsX2RhdGEsIDApOwpkaWZmIC0tZ2l0IGEvZnMvb2NmczIveGF0dHIuYyBiL2ZzL29jZnMyL3hhdHRyLmMKaW5kZXggOGZjNmZiMC4uZDFiMGQzOCAxMDA2NDQKLS0tIGEvZnMvb2NmczIveGF0dHIuYworKysgYi9mcy9vY2ZzMi94YXR0ci5jCkBAIC0xMTYsMTAgKzExNiwxMSBAQAogfTsKIAogc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gewotCWludCBuYW1lX2luZGV4OwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JY29uc3Qgdm9pZCAqdmFsdWU7Ci0Jc2l6ZV90IHZhbHVlX2xlbjsKKwlpbnQJCXhpX25hbWVfaW5kZXg7CisJY29uc3QgY2hhcgkqeGlfbmFtZTsKKwlpbnQJCXhpX25hbWVfbGVuOworCWNvbnN0IHZvaWQJKnhpX3ZhbHVlOworCXNpemVfdAkJeGlfdmFsdWVfbGVuOwogfTsKIAogc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCB7CkBAIC0xMzcsNiArMTM4LDExNSBAQAogCWludCBub3RfZm91bmQ7CiB9OwogCisvKiBPcGVyYXRpb25zIG9uIHN0cnVjdCBvY2ZzMl94YV9lbnRyeSAqLworc3RydWN0IG9jZnMyX3hhX2xvYzsKK3N0cnVjdCBvY2ZzMl94YV9sb2Nfb3BlcmF0aW9ucyB7CisJLyoKKwkgKiBKb3VybmFsIGZ1bmN0aW9ucworCSAqLworCWludCAoKnhsb19qb3VybmFsX2FjY2VzcykoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJCSAgaW50IHR5cGUpOworCXZvaWQgKCp4bG9fam91cm5hbF9kaXJ0eSkoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jKTsKKworCS8qCisJICogUmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYXBwcm9wcmlhdGUgYnVmZmVyIGluIGxvYy0+eGxfc3RvcmFnZQorCSAqIGF0IHRoZSBnaXZlbiBvZmZzZXQgZnJvbSBsb2MtPnhsX2hlYWRlci4KKwkgKi8KKwl2b2lkICooKnhsb19vZmZzZXRfcG9pbnRlcikoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLCBpbnQgb2Zmc2V0KTsKKworCS8qIENhbiB3ZSByZXVzZSB0aGUgZXhpc3RpbmcgZW50cnkgZm9yIHRoZSBuZXcgdmFsdWU/ICovCisJaW50ICgqeGxvX2Nhbl9yZXVzZSkoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGkpOworCisJLyogSG93IG11Y2ggc3BhY2UgaXMgbmVlZGVkIGZvciB0aGUgbmV3IHZhbHVlPyAqLworCWludCAoKnhsb19jaGVja19zcGFjZSkoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJICAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSk7CisKKwkvKgorCSAqIFJldHVybiB0aGUgb2Zmc2V0IG9mIHRoZSBmaXJzdCBuYW1lK3ZhbHVlIHBhaXIuICBUaGlzIGlzCisJICogdGhlIHN0YXJ0IG9mIG91ciBkb3dud2FyZC1maWxsaW5nIGZyZWUgc3BhY2UuCisJICovCisJaW50ICgqeGxvX2dldF9mcmVlX3N0YXJ0KShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MpOworCisJLyoKKwkgKiBSZW1vdmUgdGhlIG5hbWUrdmFsdWUgYXQgdGhpcyBsb2NhdGlvbi4gIERvIHdoYXRldmVyIGlzCisJICogYXBwcm9wcmlhdGUgd2l0aCB0aGUgcmVtYWluaW5nIG5hbWUrdmFsdWUgcGFpcnMuCisJICovCisJdm9pZCAoKnhsb193aXBlX25hbWV2YWx1ZSkoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jKTsKKworCS8qIEZpbGwgeGxfZW50cnkgd2l0aCBhIG5ldyBlbnRyeSAqLworCXZvaWQgKCp4bG9fYWRkX2VudHJ5KShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsIHUzMiBuYW1lX2hhc2gpOworCisJLyogQWRkIG5hbWUrdmFsdWUgc3RvcmFnZSB0byBhbiBlbnRyeSAqLworCXZvaWQgKCp4bG9fYWRkX25hbWV2YWx1ZSkoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLCBpbnQgc2l6ZSk7CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIHZhbHVlIGJ1ZidzIGFjY2VzcyBhbmQgYmggZmllbGRzIGZvciB0aGlzIGVudHJ5LgorCSAqIG9jZnMyX3hhX2ZpbGxfdmFsdWVfYnVmKCkgd2lsbCBoYW5kbGUgdGhlIHh2IHBvaW50ZXIuCisJICovCisJdm9pZCAoKnhsb19maWxsX3ZhbHVlX2J1Zikoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgKnZiKTsKK307CisKKy8qCisgKiBEZXNjcmliZXMgYW4geGF0dHIgZW50cnkgbG9jYXRpb24uICBUaGlzIGlzIGEgbWVtb3J5IHN0cnVjdHVyZQorICogdHJhY2tpbmcgdGhlIG9uLWRpc2sgc3RydWN0dXJlLgorICovCitzdHJ1Y3Qgb2NmczJfeGFfbG9jIHsKKwkvKiBUaGlzIHhhdHRyIGJlbG9uZ3MgdG8gdGhpcyBpbm9kZSAqLworCXN0cnVjdCBpbm9kZSAqeGxfaW5vZGU7CisKKwkvKiBUaGUgb2NmczJfeGF0dHJfaGVhZGVyIGluc2lkZSB0aGUgb24tZGlzayBzdG9yYWdlLiBOb3QgTlVMTC4gKi8KKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4bF9oZWFkZXI7CisKKwkvKiBCeXRlcyBmcm9tIHhsX2hlYWRlciB0byB0aGUgZW5kIG9mIHRoZSBzdG9yYWdlICovCisJaW50IHhsX3NpemU7CisKKwkvKgorCSAqIFRoZSBvY2ZzMl94YXR0cl9lbnRyeSB0aGlzIGxvY2F0aW9uIGRlc2NyaWJlcy4gIElmIHRoaXMgaXMKKwkgKiBOVUxMLCB0aGlzIGxvY2F0aW9uIGRlc2NyaWJlcyB0aGUgb24tZGlzayBzdHJ1Y3R1cmUgd2hlcmUgaXQKKwkgKiB3b3VsZCBoYXZlIGJlZW4uCisJICovCisJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4bF9lbnRyeTsKKworCS8qCisJICogSW50ZXJuYWwgaG91c2VrZWVwaW5nCisJICovCisKKwkvKiBCdWZmZXIocykgY29udGFpbmluZyB0aGlzIGVudHJ5ICovCisJdm9pZCAqeGxfc3RvcmFnZTsKKworCS8qIE9wZXJhdGlvbnMgb24gdGhlIHN0b3JhZ2UgYmFja2luZyB0aGlzIGxvY2F0aW9uICovCisJY29uc3Qgc3RydWN0IG9jZnMyX3hhX2xvY19vcGVyYXRpb25zICp4bF9vcHM7Cit9OworCisvKgorICogQ29udmVuaWVuY2UgZnVuY3Rpb25zIHRvIGNhbGN1bGF0ZSBob3cgbXVjaCBzcGFjZSBpcyBuZWVkZWQgZm9yIGEKKyAqIGdpdmVuIG5hbWUrdmFsdWUgcGFpcgorICovCitzdGF0aWMgaW50IG5hbWV2YWx1ZV9zaXplKGludCBuYW1lX2xlbiwgdWludDY0X3QgdmFsdWVfbGVuKQoreworCWlmICh2YWx1ZV9sZW4gPiBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkKKwkJcmV0dXJuIE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsgT0NGUzJfWEFUVFJfUk9PVF9TSVpFOworCWVsc2UKKwkJcmV0dXJuIE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsgT0NGUzJfWEFUVFJfU0laRSh2YWx1ZV9sZW4pOworfQorCitzdGF0aWMgaW50IG5hbWV2YWx1ZV9zaXplX3hpKHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSkKK3sKKwlyZXR1cm4gbmFtZXZhbHVlX3NpemUoeGktPnhpX25hbWVfbGVuLCB4aS0+eGlfdmFsdWVfbGVuKTsKK30KKworc3RhdGljIGludCBuYW1ldmFsdWVfc2l6ZV94ZShzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlKQoreworCXU2NCB2YWx1ZV9sZW4gPSBsZTY0X3RvX2NwdSh4ZS0+eGVfdmFsdWVfc2l6ZSk7CisKKwlCVUdfT04oKHZhbHVlX2xlbiA+IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSAmJgorCSAgICAgICBvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpOworCXJldHVybiBuYW1ldmFsdWVfc2l6ZSh4ZS0+eGVfbmFtZV9sZW4sIHZhbHVlX2xlbik7Cit9CisKKwogc3RhdGljIGludCBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X25hbWVfdmFsdWUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCwKIAkJCQkJICAgICBpbnQgaW5kZXgsCkBAIC0yMTIsMTQgKzMyMiw2IEBACiAJcmV0dXJuIE9DRlMyX1hBVFRSX0JVQ0tFVF9TSVpFIC8gKDEgPDwgc2ItPnNfYmxvY2tzaXplX2JpdHMpOwogfQogCi1zdGF0aWMgaW5saW5lIHUxNiBvY2ZzMl94YXR0cl9tYXhfeGVfaW5fYnVja2V0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCi17Ci0JdTE2IGxlbiA9IHNiLT5zX2Jsb2Nrc2l6ZSAtCi0JCSBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyLCB4aF9lbnRyaWVzKTsKLQotCXJldHVybiBsZW4gLyBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KTsKLX0KLQogI2RlZmluZSBidWNrZXRfYmxrbm8oX2IpICgoX2IpLT5idV9iaHNbMF0tPmJfYmxvY2tucikKICNkZWZpbmUgYnVja2V0X2Jsb2NrKF9iLCBfbikgKChfYiktPmJ1X2Joc1soX24pXS0+Yl9kYXRhKQogI2RlZmluZSBidWNrZXRfeGgoX2IpICgoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKWJ1Y2tldF9ibG9jaygoX2IpLCAwKSkKQEAgLTQ2MywzNSArNTY1LDIyIEBACiAJcmV0dXJuIGhhc2g7CiB9CiAKLS8qCi0gKiBvY2ZzMl94YXR0cl9oYXNoX2VudHJ5KCkKLSAqCi0gKiBDb21wdXRlIHRoZSBoYXNoIG9mIGFuIGV4dGVuZGVkIGF0dHJpYnV0ZS4KLSAqLwotc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfaGFzaF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKmhlYWRlciwKLQkJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKmVudHJ5KQotewotCXUzMiBoYXNoID0gMDsKLQljaGFyICpuYW1lID0gKGNoYXIgKiloZWFkZXIgKyBsZTE2X3RvX2NwdShlbnRyeS0+eGVfbmFtZV9vZmZzZXQpOwotCi0JaGFzaCA9IG9jZnMyX3hhdHRyX25hbWVfaGFzaChpbm9kZSwgbmFtZSwgZW50cnktPnhlX25hbWVfbGVuKTsKLQllbnRyeS0+eGVfbmFtZV9oYXNoID0gY3B1X3RvX2xlMzIoaGFzaCk7Ci0KLQlyZXR1cm47Ci19Ci0KIHN0YXRpYyBpbnQgb2NmczJfeGF0dHJfZW50cnlfcmVhbF9zaXplKGludCBuYW1lX2xlbiwgc2l6ZV90IHZhbHVlX2xlbikKIHsKLQlpbnQgc2l6ZSA9IDA7CisJcmV0dXJuIG5hbWV2YWx1ZV9zaXplKG5hbWVfbGVuLCB2YWx1ZV9sZW4pICsKKwkJc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSk7Cit9CiAKLQlpZiAodmFsdWVfbGVuIDw9IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKQotCQlzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKyBPQ0ZTMl9YQVRUUl9TSVpFKHZhbHVlX2xlbik7Ci0JZWxzZQotCQlzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKyBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7Ci0Jc2l6ZSArPSBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KTsKK3N0YXRpYyBpbnQgb2NmczJfeGlfZW50cnlfdXNhZ2Uoc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpKQoreworCXJldHVybiBuYW1ldmFsdWVfc2l6ZV94aSh4aSkgKworCQlzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KTsKK30KIAotCXJldHVybiBzaXplOworc3RhdGljIGludCBvY2ZzMl94ZV9lbnRyeV91c2FnZShzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlKQoreworCXJldHVybiBuYW1ldmFsdWVfc2l6ZV94ZSh4ZSkgKworCQlzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KTsKIH0KIAogaW50IG9jZnMyX2NhbGNfc2VjdXJpdHlfaW5pdChzdHJ1Y3QgaW5vZGUgKmRpciwKQEAgLTEzMDgsNDUyICsxMzk3LDg5NyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb2NmczJfeGF0dHJfY2xlYW51cChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgICAgIGhhbmRsZV90ICpoYW5kbGUsCi0JCQkgICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpLAotCQkJICAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzLAotCQkJICAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgKnZiLAotCQkJICAgICAgIHNpemVfdCBvZmZzKQorc3RhdGljIGludCBvY2ZzMl94YV9jaGVja19zcGFjZV9oZWxwZXIoaW50IG5lZWRlZF9zcGFjZSwgaW50IGZyZWVfc3RhcnQsCisJCQkJICAgICAgIGludCBudW1fZW50cmllcykKIHsKLQlpbnQgcmV0ID0gMDsKLQlzaXplX3QgbmFtZV9sZW4gPSBzdHJsZW4oeGktPm5hbWUpOwotCXZvaWQgKnZhbCA9IHhzLT5iYXNlICsgb2ZmczsKLQlzaXplX3Qgc2l6ZSA9IE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsgT0NGUzJfWEFUVFJfUk9PVF9TSVpFOworCWludCBmcmVlX3NwYWNlOwogCi0JcmV0ID0gdmItPnZiX2FjY2VzcyhoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgdmItPnZiX2JoLAotCQkJICAgIE9DRlMyX0pPVVJOQUxfQUNDRVNTX1dSSVRFKTsKLQlpZiAocmV0KSB7Ci0JCW1sb2dfZXJybm8ocmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCS8qIERlY3JlYXNlIHhhdHRyIGNvdW50ICovCi0JbGUxNl9hZGRfY3B1KCZ4cy0+aGVhZGVyLT54aF9jb3VudCwgLTEpOwotCS8qIFJlbW92ZSB0aGUgeGF0dHIgZW50cnkgYW5kIHRyZWUgcm9vdCB3aGljaCBoYXMgYWxyZWFkeSBiZSBzZXQqLwotCW1lbXNldCgodm9pZCAqKXhzLT5oZXJlLCAwLCBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSk7Ci0JbWVtc2V0KHZhbCwgMCwgc2l6ZSk7CisJaWYgKCFuZWVkZWRfc3BhY2UpCisJCXJldHVybiAwOwogCi0JcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIHZiLT52Yl9iaCk7Ci0JaWYgKHJldCA8IDApCi0JCW1sb2dfZXJybm8ocmV0KTsKLW91dDoKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG9jZnMyX3hhdHRyX3VwZGF0ZV9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgICBoYW5kbGVfdCAqaGFuZGxlLAotCQkJCSAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGksCi0JCQkJICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzLAotCQkJCSAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmICp2YiwKLQkJCQkgICAgc2l6ZV90IG9mZnMpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHZiLT52Yl9hY2Nlc3MoaGFuZGxlLCBJTk9ERV9DQUNIRShpbm9kZSksIHZiLT52Yl9iaCwKLQkJCSAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7Ci0JaWYgKHJldCkgewotCQltbG9nX2Vycm5vKHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCXhzLT5oZXJlLT54ZV9uYW1lX29mZnNldCA9IGNwdV90b19sZTE2KG9mZnMpOwotCXhzLT5oZXJlLT54ZV92YWx1ZV9zaXplID0gY3B1X3RvX2xlNjQoeGktPnZhbHVlX2xlbik7Ci0JaWYgKHhpLT52YWx1ZV9sZW4gPD0gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpCi0JCW9jZnMyX3hhdHRyX3NldF9sb2NhbCh4cy0+aGVyZSwgMSk7Ci0JZWxzZQotCQlvY2ZzMl94YXR0cl9zZXRfbG9jYWwoeHMtPmhlcmUsIDApOwotCW9jZnMyX3hhdHRyX2hhc2hfZW50cnkoaW5vZGUsIHhzLT5oZWFkZXIsIHhzLT5oZXJlKTsKLQotCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCB2Yi0+dmJfYmgpOwotCWlmIChyZXQgPCAwKQotCQltbG9nX2Vycm5vKHJldCk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIG9jZnMyX3hhdHRyX3NldF92YWx1ZV9vdXRzaWRlKCkKLSAqCi0gKiBTZXQgbGFyZ2Ugc2l6ZSB2YWx1ZSBpbiBCIHRyZWUuCi0gKi8KLXN0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2V0X3ZhbHVlX291dHNpZGUoc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKLQkJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzLAotCQkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX3NldF9jdHh0ICpjdHh0LAotCQkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiAqdmIsCi0JCQkJCSBzaXplX3Qgb2ZmcykKLXsKLQlzaXplX3QgbmFtZV9sZW4gPSBzdHJsZW4oeGktPm5hbWUpOwotCXZvaWQgKnZhbCA9IHhzLT5iYXNlICsgb2ZmczsKLQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHYgPSBOVUxMOwotCXNpemVfdCBzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKyBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7Ci0JaW50IHJldCA9IDA7Ci0KLQltZW1zZXQodmFsLCAwLCBzaXplKTsKLQltZW1jcHkodmFsLCB4aS0+bmFtZSwgbmFtZV9sZW4pOwotCXh2ID0gKHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICopCi0JCSh2YWwgKyBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSk7Ci0JeHYtPnhyX2NsdXN0ZXJzID0gMDsKLQl4di0+eHJfbGFzdF9lYl9ibGsgPSAwOwotCXh2LT54cl9saXN0LmxfdHJlZV9kZXB0aCA9IDA7Ci0JeHYtPnhyX2xpc3QubF9jb3VudCA9IGNwdV90b19sZTE2KDEpOwotCXh2LT54cl9saXN0LmxfbmV4dF9mcmVlX3JlYyA9IDA7Ci0JdmItPnZiX3h2ID0geHY7Ci0KLQlyZXQgPSBvY2ZzMl94YXR0cl92YWx1ZV90cnVuY2F0ZShpbm9kZSwgdmIsIHhpLT52YWx1ZV9sZW4sIGN0eHQpOwotCWlmIChyZXQgPCAwKSB7Ci0JCW1sb2dfZXJybm8ocmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0ID0gb2NmczJfeGF0dHJfdXBkYXRlX2VudHJ5KGlub2RlLCBjdHh0LT5oYW5kbGUsIHhpLCB4cywgdmIsIG9mZnMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCW1sb2dfZXJybm8ocmV0KTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JcmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfdmFsdWVfb3V0c2lkZShpbm9kZSwgY3R4dC0+aGFuZGxlLCB2YiwKLQkJCQkJICAgICAgeGktPnZhbHVlLCB4aS0+dmFsdWVfbGVuKTsKLQlpZiAocmV0IDwgMCkKLQkJbWxvZ19lcnJubyhyZXQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIG9jZnMyX3hhdHRyX3NldF9lbnRyeV9sb2NhbCgpCi0gKgotICogU2V0LCByZXBsYWNlIG9yIHJlbW92ZSBleHRlbmRlZCBhdHRyaWJ1dGUgaW4gbG9jYWwuCi0gKi8KLXN0YXRpYyB2b2lkIG9jZnMyX3hhdHRyX3NldF9lbnRyeV9sb2NhbChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGksCi0JCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzLAotCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKmxhc3QsCi0JCQkJCXNpemVfdCBtaW5fb2ZmcykKLXsKLQlzaXplX3QgbmFtZV9sZW4gPSBzdHJsZW4oeGktPm5hbWUpOwotCWludCBpOwotCi0JaWYgKHhpLT52YWx1ZSAmJiB4cy0+bm90X2ZvdW5kKSB7Ci0JCS8qIEluc2VydCB0aGUgbmV3IHhhdHRyIGVudHJ5LiAqLwotCQlsZTE2X2FkZF9jcHUoJnhzLT5oZWFkZXItPnhoX2NvdW50LCAxKTsKLQkJb2NmczJfeGF0dHJfc2V0X3R5cGUobGFzdCwgeGktPm5hbWVfaW5kZXgpOwotCQlvY2ZzMl94YXR0cl9zZXRfbG9jYWwobGFzdCwgMSk7Ci0JCWxhc3QtPnhlX25hbWVfbGVuID0gbmFtZV9sZW47Ci0JfSBlbHNlIHsKLQkJdm9pZCAqZmlyc3RfdmFsOwotCQl2b2lkICp2YWw7Ci0JCXNpemVfdCBvZmZzLCBzaXplOwotCi0JCWZpcnN0X3ZhbCA9IHhzLT5iYXNlICsgbWluX29mZnM7Ci0JCW9mZnMgPSBsZTE2X3RvX2NwdSh4cy0+aGVyZS0+eGVfbmFtZV9vZmZzZXQpOwotCQl2YWwgPSB4cy0+YmFzZSArIG9mZnM7Ci0KLQkJaWYgKGxlNjRfdG9fY3B1KHhzLT5oZXJlLT54ZV92YWx1ZV9zaXplKSA+Ci0JCSAgICBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkKLQkJCXNpemUgPSBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArCi0JCQkJT0NGUzJfWEFUVFJfUk9PVF9TSVpFOwotCQllbHNlCi0JCQlzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKwotCQkJT0NGUzJfWEFUVFJfU0laRShsZTY0X3RvX2NwdSh4cy0+aGVyZS0+eGVfdmFsdWVfc2l6ZSkpOwotCi0JCWlmICh4aS0+dmFsdWUgJiYgc2l6ZSA9PSBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArCi0JCQkJT0NGUzJfWEFUVFJfU0laRSh4aS0+dmFsdWVfbGVuKSkgewotCQkJLyogVGhlIG9sZCBhbmQgdGhlIG5ldyB2YWx1ZSBoYXZlIHRoZQotCQkJICAgc2FtZSBzaXplLiBKdXN0IHJlcGxhY2UgdGhlIHZhbHVlLiAqLwotCQkJb2NmczJfeGF0dHJfc2V0X2xvY2FsKHhzLT5oZXJlLCAxKTsKLQkJCXhzLT5oZXJlLT54ZV92YWx1ZV9zaXplID0gY3B1X3RvX2xlNjQoeGktPnZhbHVlX2xlbik7Ci0JCQkvKiBDbGVhciB2YWx1ZSBieXRlcy4gKi8KLQkJCW1lbXNldCh2YWwgKyBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSwKLQkJCSAgICAgICAwLAotCQkJICAgICAgIE9DRlMyX1hBVFRSX1NJWkUoeGktPnZhbHVlX2xlbikpOwotCQkJbWVtY3B5KHZhbCArIE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pLAotCQkJICAgICAgIHhpLT52YWx1ZSwKLQkJCSAgICAgICB4aS0+dmFsdWVfbGVuKTsKLQkJCXJldHVybjsKLQkJfQotCQkvKiBSZW1vdmUgdGhlIG9sZCBuYW1lK3ZhbHVlLiAqLwotCQltZW1tb3ZlKGZpcnN0X3ZhbCArIHNpemUsIGZpcnN0X3ZhbCwgdmFsIC0gZmlyc3RfdmFsKTsKLQkJbWVtc2V0KGZpcnN0X3ZhbCwgMCwgc2l6ZSk7Ci0JCXhzLT5oZXJlLT54ZV9uYW1lX2hhc2ggPSAwOwotCQl4cy0+aGVyZS0+eGVfbmFtZV9vZmZzZXQgPSAwOwotCQlvY2ZzMl94YXR0cl9zZXRfbG9jYWwoeHMtPmhlcmUsIDEpOwotCQl4cy0+aGVyZS0+eGVfdmFsdWVfc2l6ZSA9IDA7Ci0KLQkJbWluX29mZnMgKz0gc2l6ZTsKLQotCQkvKiBBZGp1c3QgYWxsIHZhbHVlIG9mZnNldHMuICovCi0JCWxhc3QgPSB4cy0+aGVhZGVyLT54aF9lbnRyaWVzOwotCQlmb3IgKGkgPSAwIDsgaSA8IGxlMTZfdG9fY3B1KHhzLT5oZWFkZXItPnhoX2NvdW50KTsgaSsrKSB7Ci0JCQlzaXplX3QgbyA9IGxlMTZfdG9fY3B1KGxhc3QtPnhlX25hbWVfb2Zmc2V0KTsKLQotCQkJaWYgKG8gPCBvZmZzKQotCQkJCWxhc3QtPnhlX25hbWVfb2Zmc2V0ID0gY3B1X3RvX2xlMTYobyArIHNpemUpOwotCQkJbGFzdCArPSAxOwotCQl9Ci0KLQkJaWYgKCF4aS0+dmFsdWUpIHsKLQkJCS8qIFJlbW92ZSB0aGUgb2xkIGVudHJ5LiAqLwotCQkJbGFzdCAtPSAxOwotCQkJbWVtbW92ZSh4cy0+aGVyZSwgeHMtPmhlcmUgKyAxLAotCQkJCSh2b2lkICopbGFzdCAtICh2b2lkICopeHMtPmhlcmUpOwotCQkJbWVtc2V0KGxhc3QsIDAsIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpKTsKLQkJCWxlMTZfYWRkX2NwdSgmeHMtPmhlYWRlci0+eGhfY291bnQsIC0xKTsKLQkJfQotCX0KLQlpZiAoeGktPnZhbHVlKSB7Ci0JCS8qIEluc2VydCB0aGUgbmV3IG5hbWUrdmFsdWUuICovCi0JCXNpemVfdCBzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKwotCQkJCU9DRlMyX1hBVFRSX1NJWkUoeGktPnZhbHVlX2xlbik7Ci0JCXZvaWQgKnZhbCA9IHhzLT5iYXNlICsgbWluX29mZnMgLSBzaXplOwotCi0JCXhzLT5oZXJlLT54ZV9uYW1lX29mZnNldCA9IGNwdV90b19sZTE2KG1pbl9vZmZzIC0gc2l6ZSk7Ci0JCW1lbXNldCh2YWwsIDAsIHNpemUpOwotCQltZW1jcHkodmFsLCB4aS0+bmFtZSwgbmFtZV9sZW4pOwotCQltZW1jcHkodmFsICsgT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbiksCi0JCSAgICAgICB4aS0+dmFsdWUsCi0JCSAgICAgICB4aS0+dmFsdWVfbGVuKTsKLQkJeHMtPmhlcmUtPnhlX3ZhbHVlX3NpemUgPSBjcHVfdG9fbGU2NCh4aS0+dmFsdWVfbGVuKTsKLQkJb2NmczJfeGF0dHJfc2V0X2xvY2FsKHhzLT5oZXJlLCAxKTsKLQkJb2NmczJfeGF0dHJfaGFzaF9lbnRyeShpbm9kZSwgeHMtPmhlYWRlciwgeHMtPmhlcmUpOwotCX0KLQotCXJldHVybjsKLX0KLQotLyoKLSAqIG9jZnMyX3hhdHRyX3NldF9lbnRyeSgpCi0gKgotICogU2V0IGV4dGVuZGVkIGF0dHJpYnV0ZSBlbnRyeSBpbnRvIGlub2RlIG9yIGJsb2NrLgotICoKLSAqIElmIGV4dGVuZGVkIGF0dHJpYnV0ZSB2YWx1ZSBzaXplID4gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUsCi0gKiBXZSBmaXJzdCBpbnNlcnQgdHJlZSByb290KG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QpIHdpdGggc2V0X2VudHJ5X2xvY2FsKCksCi0gKiB0aGVuIHNldCB2YWx1ZSBpbiBCIHRyZWUgd2l0aCBzZXRfdmFsdWVfb3V0c2lkZSgpLgotICovCi1zdGF0aWMgaW50IG9jZnMyX3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSBzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGksCi0JCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzLAotCQkJCSBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2V0X2N0eHQgKmN0eHQsCi0JCQkJIGludCBmbGFnKQotewotCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqbGFzdDsKLQlzdHJ1Y3Qgb2NmczJfaW5vZGVfaW5mbyAqb2kgPSBPQ0ZTMl9JKGlub2RlKTsKLQlzdHJ1Y3Qgb2NmczJfZGlub2RlICpkaSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopeHMtPmlub2RlX2JoLT5iX2RhdGE7Ci0Jc2l6ZV90IG1pbl9vZmZzID0geHMtPmVuZCAtIHhzLT5iYXNlLCBuYW1lX2xlbiA9IHN0cmxlbih4aS0+bmFtZSk7Ci0Jc2l6ZV90IHNpemVfbCA9IDA7Ci0JaGFuZGxlX3QgKmhhbmRsZSA9IGN0eHQtPmhhbmRsZTsKLQlpbnQgZnJlZSwgaSwgcmV0OwotCXN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvIHhpX2wgPSB7Ci0JCS5uYW1lX2luZGV4ID0geGktPm5hbWVfaW5kZXgsCi0JCS5uYW1lID0geGktPm5hbWUsCi0JCS52YWx1ZSA9IHhpLT52YWx1ZSwKLQkJLnZhbHVlX2xlbiA9IHhpLT52YWx1ZV9sZW4sCi0JfTsKLQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmIHZiID0gewotCQkudmJfYmggPSB4cy0+eGF0dHJfYmgsCi0JCS52Yl9hY2Nlc3MgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaSwKLQl9OwotCi0JaWYgKCEoZmxhZyAmIE9DRlMyX0lOTElORV9YQVRUUl9GTCkpIHsKLQkJQlVHX09OKHhzLT54YXR0cl9iaCA9PSB4cy0+aW5vZGVfYmgpOwotCQl2Yi52Yl9hY2Nlc3MgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc194YjsKLQl9IGVsc2UKLQkJQlVHX09OKHhzLT54YXR0cl9iaCAhPSB4cy0+aW5vZGVfYmgpOwotCi0JLyogQ29tcHV0ZSBtaW5fb2ZmcywgbGFzdCBhbmQgZnJlZSBzcGFjZS4gKi8KLQlsYXN0ID0geHMtPmhlYWRlci0+eGhfZW50cmllczsKLQotCWZvciAoaSA9IDAgOyBpIDwgbGUxNl90b19jcHUoeHMtPmhlYWRlci0+eGhfY291bnQpOyBpKyspIHsKLQkJc2l6ZV90IG9mZnMgPSBsZTE2X3RvX2NwdShsYXN0LT54ZV9uYW1lX29mZnNldCk7Ci0JCWlmIChvZmZzIDwgbWluX29mZnMpCi0JCQltaW5fb2ZmcyA9IG9mZnM7Ci0JCWxhc3QgKz0gMTsKLQl9Ci0KLQlmcmVlID0gbWluX29mZnMgLSAoKHZvaWQgKilsYXN0IC0geHMtPmJhc2UpIC0gT0NGUzJfWEFUVFJfSEVBREVSX0dBUDsKLQlpZiAoZnJlZSA8IDApCisJZnJlZV9zcGFjZSA9IGZyZWVfc3RhcnQgLQorCQlzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlcikgLQorCQkobnVtX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSkgLQorCQlPQ0ZTMl9YQVRUUl9IRUFERVJfR0FQOworCWlmIChmcmVlX3NwYWNlIDwgMCkKIAkJcmV0dXJuIC1FSU87CisJaWYgKGZyZWVfc3BhY2UgPCBuZWVkZWRfc3BhY2UpCisJCXJldHVybiAtRU5PU1BDOwogCi0JaWYgKCF4cy0+bm90X2ZvdW5kKSB7Ci0JCXNpemVfdCBzaXplID0gMDsKLQkJaWYgKG9jZnMyX3hhdHRyX2lzX2xvY2FsKHhzLT5oZXJlKSkKLQkJCXNpemUgPSBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSArCi0JCQlPQ0ZTMl9YQVRUUl9TSVpFKGxlNjRfdG9fY3B1KHhzLT5oZXJlLT54ZV92YWx1ZV9zaXplKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGFfam91cm5hbF9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJCSAgIGludCB0eXBlKQoreworCXJldHVybiBsb2MtPnhsX29wcy0+eGxvX2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgbG9jLCB0eXBlKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfeGFfam91cm5hbF9kaXJ0eShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MpCit7CisJbG9jLT54bF9vcHMtPnhsb19qb3VybmFsX2RpcnR5KGhhbmRsZSwgbG9jKTsKK30KKworLyogR2l2ZSBhIHBvaW50ZXIgaW50byB0aGUgc3RvcmFnZSBmb3IgdGhlIGdpdmVuIG9mZnNldCAqLworc3RhdGljIHZvaWQgKm9jZnMyX3hhX29mZnNldF9wb2ludGVyKHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYywgaW50IG9mZnNldCkKK3sKKwlCVUdfT04ob2Zmc2V0ID49IGxvYy0+eGxfc2l6ZSk7CisJcmV0dXJuIGxvYy0+eGxfb3BzLT54bG9fb2Zmc2V0X3BvaW50ZXIobG9jLCBvZmZzZXQpOworfQorCisvKgorICogV2lwZSB0aGUgbmFtZSt2YWx1ZSBwYWlyIGFuZCBhbGxvdyB0aGUgc3RvcmFnZSB0byByZWNsYWltIGl0LiAgVGhpcworICogbXVzdCBiZSBmb2xsb3dlZCBieSBlaXRoZXIgcmVtb3ZhbCBvZiB0aGUgZW50cnkgb3IgYSBjYWxsIHRvCisgKiBvY2ZzMl94YV9hZGRfbmFtZXZhbHVlKCkuCisgKi8KK3N0YXRpYyB2b2lkIG9jZnMyX3hhX3dpcGVfbmFtZXZhbHVlKHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYykKK3sKKwlsb2MtPnhsX29wcy0+eGxvX3dpcGVfbmFtZXZhbHVlKGxvYyk7Cit9CisKKy8qCisgKiBGaW5kIGxvd2VzdCBvZmZzZXQgdG8gYSBuYW1lK3ZhbHVlIHBhaXIuICBUaGlzIGlzIHRoZSBzdGFydCBvZiBvdXIKKyAqIGRvd253YXJkLWdyb3dpbmcgZnJlZSBzcGFjZS4KKyAqLworc3RhdGljIGludCBvY2ZzMl94YV9nZXRfZnJlZV9zdGFydChzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MpCit7CisJcmV0dXJuIGxvYy0+eGxfb3BzLT54bG9fZ2V0X2ZyZWVfc3RhcnQobG9jKTsKK30KKworLyogQ2FuIHdlIHJldXNlIGxvYy0+eGxfZW50cnkgZm9yIHhpPyAqLworc3RhdGljIGludCBvY2ZzMl94YV9jYW5fcmV1c2VfZW50cnkoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGkpCit7CisJcmV0dXJuIGxvYy0+eGxfb3BzLT54bG9fY2FuX3JldXNlKGxvYywgeGkpOworfQorCisvKiBIb3cgbXVjaCBmcmVlIHNwYWNlIGlzIG5lZWRlZCB0byBzZXQgdGhlIG5ldyB2YWx1ZSAqLworc3RhdGljIGludCBvY2ZzMl94YV9jaGVja19zcGFjZShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkJc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpKQoreworCXJldHVybiBsb2MtPnhsX29wcy0+eGxvX2NoZWNrX3NwYWNlKGxvYywgeGkpOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl94YV9hZGRfZW50cnkoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLCB1MzIgbmFtZV9oYXNoKQoreworCWxvYy0+eGxfb3BzLT54bG9fYWRkX2VudHJ5KGxvYywgbmFtZV9oYXNoKTsKKwlsb2MtPnhsX2VudHJ5LT54ZV9uYW1lX2hhc2ggPSBjcHVfdG9fbGUzMihuYW1lX2hhc2gpOworCS8qCisJICogV2UgY2FuJ3QgbGVhdmUgdGhlIG5ldyBlbnRyeSdzIHhlX25hbWVfb2Zmc2V0IGF0IHplcm8gb3IKKwkgKiBhZGRfbmFtZXZhbHVlKCkgd2lsbCBnbyBudXRzLiAgV2Ugc2V0IGl0IHRvIHRoZSBzaXplIG9mIG91cgorCSAqIHN0b3JhZ2Ugc28gdGhhdCBpdCBjYW4gbmV2ZXIgYmUgbGVzcyB0aGFuIGFueSBvdGhlciBlbnRyeS4KKwkgKi8KKwlsb2MtPnhsX2VudHJ5LT54ZV9uYW1lX29mZnNldCA9IGNwdV90b19sZTE2KGxvYy0+eGxfc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3hhX2FkZF9uYW1ldmFsdWUoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSkKK3sKKwlpbnQgc2l6ZSA9IG5hbWV2YWx1ZV9zaXplX3hpKHhpKTsKKwlpbnQgbmFtZXZhbF9vZmZzZXQ7CisJY2hhciAqbmFtZXZhbF9idWY7CisKKwlsb2MtPnhsX29wcy0+eGxvX2FkZF9uYW1ldmFsdWUobG9jLCBzaXplKTsKKwlsb2MtPnhsX2VudHJ5LT54ZV92YWx1ZV9zaXplID0gY3B1X3RvX2xlNjQoeGktPnhpX3ZhbHVlX2xlbik7CisJbG9jLT54bF9lbnRyeS0+eGVfbmFtZV9sZW4gPSB4aS0+eGlfbmFtZV9sZW47CisJb2NmczJfeGF0dHJfc2V0X3R5cGUobG9jLT54bF9lbnRyeSwgeGktPnhpX25hbWVfaW5kZXgpOworCW9jZnMyX3hhdHRyX3NldF9sb2NhbChsb2MtPnhsX2VudHJ5LAorCQkJICAgICAgeGktPnhpX3ZhbHVlX2xlbiA8PSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSk7CisKKwluYW1ldmFsX29mZnNldCA9IGxlMTZfdG9fY3B1KGxvYy0+eGxfZW50cnktPnhlX25hbWVfb2Zmc2V0KTsKKwluYW1ldmFsX2J1ZiA9IG9jZnMyX3hhX29mZnNldF9wb2ludGVyKGxvYywgbmFtZXZhbF9vZmZzZXQpOworCW1lbXNldChuYW1ldmFsX2J1ZiwgMCwgc2l6ZSk7CisJbWVtY3B5KG5hbWV2YWxfYnVmLCB4aS0+eGlfbmFtZSwgeGktPnhpX25hbWVfbGVuKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfeGFfZmlsbF92YWx1ZV9idWYoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmICp2YikKK3sKKwlpbnQgbmFtZXZhbF9vZmZzZXQgPSBsZTE2X3RvX2NwdShsb2MtPnhsX2VudHJ5LT54ZV9uYW1lX29mZnNldCk7CisJaW50IG5hbWVfc2l6ZSA9IE9DRlMyX1hBVFRSX1NJWkUobG9jLT54bF9lbnRyeS0+eGVfbmFtZV9sZW4pOworCisJLyogVmFsdWUgYnVmcyBhcmUgZm9yIHZhbHVlIHRyZWVzICovCisJQlVHX09OKG9jZnMyX3hhdHRyX2lzX2xvY2FsKGxvYy0+eGxfZW50cnkpKTsKKwlCVUdfT04obmFtZXZhbHVlX3NpemVfeGUobG9jLT54bF9lbnRyeSkgIT0KKwkgICAgICAgKG5hbWVfc2l6ZSArIE9DRlMyX1hBVFRSX1JPT1RfU0laRSkpOworCisJbG9jLT54bF9vcHMtPnhsb19maWxsX3ZhbHVlX2J1Zihsb2MsIHZiKTsKKwl2Yi0+dmJfeHYgPQorCQkoc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QgKilvY2ZzMl94YV9vZmZzZXRfcG9pbnRlcihsb2MsCisJCQkJCQkJbmFtZXZhbF9vZmZzZXQgKworCQkJCQkJCW5hbWVfc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGFfYmxvY2tfam91cm5hbF9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJIHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYywgaW50IHR5cGUpCit7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IGxvYy0+eGxfc3RvcmFnZTsKKwlvY2ZzMl9qb3VybmFsX2FjY2Vzc19mdW5jIGFjY2VzczsKKworCWlmIChsb2MtPnhsX3NpemUgPT0gKGJoLT5iX3NpemUgLQorCQkJICAgICBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2ssCisJCQkJICAgICAgeGJfYXR0cnMueGJfaGVhZGVyKSkpCisJCWFjY2VzcyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX3hiOworCWVsc2UKKwkJYWNjZXNzID0gb2NmczJfam91cm5hbF9hY2Nlc3NfZGk7CisJcmV0dXJuIGFjY2VzcyhoYW5kbGUsIElOT0RFX0NBQ0hFKGxvYy0+eGxfaW5vZGUpLCBiaCwgdHlwZSk7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3hhX2Jsb2NrX2pvdXJuYWxfZGlydHkoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJIHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYykKK3sKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gbG9jLT54bF9zdG9yYWdlOworCisJb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGJoKTsKK30KKworc3RhdGljIHZvaWQgKm9jZnMyX3hhX2Jsb2NrX29mZnNldF9wb2ludGVyKHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYywKKwkJCQkJICAgaW50IG9mZnNldCkKK3sKKwlyZXR1cm4gKGNoYXIgKilsb2MtPnhsX2hlYWRlciArIG9mZnNldDsKK30KKworc3RhdGljIGludCBvY2ZzMl94YV9ibG9ja19jYW5fcmV1c2Uoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJCSAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGkpCit7CisJLyoKKwkgKiBCbG9jayBzdG9yYWdlIGlzIHN0cmljdC4gIElmIHRoZSBzaXplcyBhcmVuJ3QgZXhhY3QsIHdlIHdpbGwKKwkgKiByZW1vdmUgdGhlIG9sZCBvbmUgYW5kIHJlaW5zZXJ0IHRoZSBuZXcuCisJICovCisJcmV0dXJuIG5hbWV2YWx1ZV9zaXplX3hlKGxvYy0+eGxfZW50cnkpID09CisJCW5hbWV2YWx1ZV9zaXplX3hpKHhpKTsKK30KKworc3RhdGljIGludCBvY2ZzMl94YV9ibG9ja19nZXRfZnJlZV9zdGFydChzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MpCit7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGggPSBsb2MtPnhsX2hlYWRlcjsKKwlpbnQgaSwgY291bnQgPSBsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpOworCWludCBvZmZzZXQsIGZyZWVfc3RhcnQgPSBsb2MtPnhsX3NpemU7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlvZmZzZXQgPSBsZTE2X3RvX2NwdSh4aC0+eGhfZW50cmllc1tpXS54ZV9uYW1lX29mZnNldCk7CisJCWlmIChvZmZzZXQgPCBmcmVlX3N0YXJ0KQorCQkJZnJlZV9zdGFydCA9IG9mZnNldDsKKwl9CisKKwlyZXR1cm4gZnJlZV9zdGFydDsKK30KKworc3RhdGljIGludCBvY2ZzMl94YV9ibG9ja19jaGVja19zcGFjZShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkJICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpKQoreworCWludCBjb3VudCA9IGxlMTZfdG9fY3B1KGxvYy0+eGxfaGVhZGVyLT54aF9jb3VudCk7CisJaW50IGZyZWVfc3RhcnQgPSBvY2ZzMl94YV9nZXRfZnJlZV9zdGFydChsb2MpOworCWludCBuZWVkZWRfc3BhY2UgPSBvY2ZzMl94aV9lbnRyeV91c2FnZSh4aSk7CisKKwkvKgorCSAqIEJsb2NrIHN0b3JhZ2Ugd2lsbCByZWNsYWltIHRoZSBvcmlnaW5hbCBlbnRyeSBiZWZvcmUgaW5zZXJ0aW5nCisJICogdGhlIG5ldyB2YWx1ZSwgc28gd2Ugb25seSBuZWVkIHRoZSBkaWZmZXJlbmNlLiAgSWYgdGhlIG5ldworCSAqIGVudHJ5IGlzIHNtYWxsZXIgdGhhbiB0aGUgb2xkIG9uZSwgd2UgZG9uJ3QgbmVlZCBhbnl0aGluZy4KKwkgKi8KKwlpZiAobG9jLT54bF9lbnRyeSkgeworCQkvKiBEb24ndCBuZWVkIHNwYWNlIGlmIHdlJ3JlIHJldXNpbmchICovCisJCWlmIChvY2ZzMl94YV9jYW5fcmV1c2VfZW50cnkobG9jLCB4aSkpCisJCQluZWVkZWRfc3BhY2UgPSAwOwogCQllbHNlCi0JCQlzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKwotCQkJCU9DRlMyX1hBVFRSX1JPT1RfU0laRTsKLQkJZnJlZSArPSAoc2l6ZSArIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpKTsKKwkJCW5lZWRlZF9zcGFjZSAtPSBvY2ZzMl94ZV9lbnRyeV91c2FnZShsb2MtPnhsX2VudHJ5KTsKIAl9Ci0JLyogQ2hlY2sgZnJlZSBzcGFjZSBpbiBpbm9kZSBvciBibG9jayAqLwotCWlmICh4aS0+dmFsdWUgJiYgeGktPnZhbHVlX2xlbiA+IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7Ci0JCWlmIChmcmVlIDwgc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkgKwotCQkJICAgT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKwotCQkJICAgT0NGUzJfWEFUVFJfUk9PVF9TSVpFKSB7Ci0JCQlyZXQgPSAtRU5PU1BDOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJc2l6ZV9sID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKyBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7Ci0JCXhpX2wudmFsdWUgPSAodm9pZCAqKSZkZWZfeHY7Ci0JCXhpX2wudmFsdWVfbGVuID0gT0NGUzJfWEFUVFJfUk9PVF9TSVpFOwotCX0gZWxzZSBpZiAoeGktPnZhbHVlKSB7Ci0JCWlmIChmcmVlIDwgc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkgKwotCQkJICAgT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKwotCQkJICAgT0NGUzJfWEFUVFJfU0laRSh4aS0+dmFsdWVfbGVuKSkgewotCQkJcmV0ID0gLUVOT1NQQzsKLQkJCWdvdG8gb3V0OworCWlmIChuZWVkZWRfc3BhY2UgPCAwKQorCQluZWVkZWRfc3BhY2UgPSAwOworCXJldHVybiBvY2ZzMl94YV9jaGVja19zcGFjZV9oZWxwZXIobmVlZGVkX3NwYWNlLCBmcmVlX3N0YXJ0LCBjb3VudCk7Cit9CisKKy8qCisgKiBCbG9jayBzdG9yYWdlIGZvciB4YXR0cnMga2VlcHMgdGhlIG5hbWUrdmFsdWUgcGFpcnMgY29tcGFjdGVkLiAgV2hlbgorICogd2UgcmVtb3ZlIG9uZSwgd2UgaGF2ZSB0byBzaGlmdCBhbnkgdGhhdCBwcmVjZWRlZCBpdCB0b3dhcmRzIHRoZSBlbmQuCisgKi8KK3N0YXRpYyB2b2lkIG9jZnMyX3hhX2Jsb2NrX3dpcGVfbmFtZXZhbHVlKHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYykKK3sKKwlpbnQgaSwgb2Zmc2V0OworCWludCBuYW1ldmFsdWVfb2Zmc2V0LCBmaXJzdF9uYW1ldmFsdWVfb2Zmc2V0LCBuYW1ldmFsdWVfc2l6ZTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKmVudHJ5ID0gbG9jLT54bF9lbnRyeTsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9IGxvYy0+eGxfaGVhZGVyOworCWludCBjb3VudCA9IGxlMTZfdG9fY3B1KHhoLT54aF9jb3VudCk7CisKKwluYW1ldmFsdWVfb2Zmc2V0ID0gbGUxNl90b19jcHUoZW50cnktPnhlX25hbWVfb2Zmc2V0KTsKKwluYW1ldmFsdWVfc2l6ZSA9IG5hbWV2YWx1ZV9zaXplX3hlKGVudHJ5KTsKKwlmaXJzdF9uYW1ldmFsdWVfb2Zmc2V0ID0gb2NmczJfeGFfZ2V0X2ZyZWVfc3RhcnQobG9jKTsKKworCS8qIFNoaWZ0IHRoZSBuYW1lK3ZhbHVlIHBhaXJzICovCisJbWVtbW92ZSgoY2hhciAqKXhoICsgZmlyc3RfbmFtZXZhbHVlX29mZnNldCArIG5hbWV2YWx1ZV9zaXplLAorCQkoY2hhciAqKXhoICsgZmlyc3RfbmFtZXZhbHVlX29mZnNldCwKKwkJbmFtZXZhbHVlX29mZnNldCAtIGZpcnN0X25hbWV2YWx1ZV9vZmZzZXQpOworCW1lbXNldCgoY2hhciAqKXhoICsgZmlyc3RfbmFtZXZhbHVlX29mZnNldCwgMCwgbmFtZXZhbHVlX3NpemUpOworCisJLyogTm93IHRlbGwgeGgtPnhoX2VudHJpZXMgYWJvdXQgaXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlvZmZzZXQgPSBsZTE2X3RvX2NwdSh4aC0+eGhfZW50cmllc1tpXS54ZV9uYW1lX29mZnNldCk7CisJCWlmIChvZmZzZXQgPCBuYW1ldmFsdWVfb2Zmc2V0KQorCQkJbGUxNl9hZGRfY3B1KCZ4aC0+eGhfZW50cmllc1tpXS54ZV9uYW1lX29mZnNldCwKKwkJCQkgICAgIG5hbWV2YWx1ZV9zaXplKTsKKwl9CisKKwkvKgorCSAqIE5vdGUgdGhhdCB3ZSBkb24ndCB1cGRhdGUgeGhfZnJlZV9zdGFydCBvciB4aF9uYW1lX3ZhbHVlX2xlbgorCSAqIGJlY2F1c2UgdGhleSdyZSBub3QgdXNlZCBpbiBibG9jay1zdG9yZWQgeGF0dHJzLgorCSAqLworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl94YV9ibG9ja19hZGRfZW50cnkoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLCB1MzIgbmFtZV9oYXNoKQoreworCWludCBjb3VudCA9IGxlMTZfdG9fY3B1KGxvYy0+eGxfaGVhZGVyLT54aF9jb3VudCk7CisJbG9jLT54bF9lbnRyeSA9ICYobG9jLT54bF9oZWFkZXItPnhoX2VudHJpZXNbY291bnRdKTsKKwlsZTE2X2FkZF9jcHUoJmxvYy0+eGxfaGVhZGVyLT54aF9jb3VudCwgMSk7CisJbWVtc2V0KGxvYy0+eGxfZW50cnksIDAsIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfeGFfYmxvY2tfYWRkX25hbWV2YWx1ZShzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsIGludCBzaXplKQoreworCWludCBmcmVlX3N0YXJ0ID0gb2NmczJfeGFfZ2V0X2ZyZWVfc3RhcnQobG9jKTsKKworCWxvYy0+eGxfZW50cnktPnhlX25hbWVfb2Zmc2V0ID0gY3B1X3RvX2xlMTYoZnJlZV9zdGFydCAtIHNpemUpOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl94YV9ibG9ja19maWxsX3ZhbHVlX2J1ZihzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkJCSAgc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiAqdmIpCit7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IGxvYy0+eGxfc3RvcmFnZTsKKworCWlmIChsb2MtPnhsX3NpemUgPT0gKGJoLT5iX3NpemUgLQorCQkJICAgICBvZmZzZXRvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2ssCisJCQkJICAgICAgeGJfYXR0cnMueGJfaGVhZGVyKSkpCisJCXZiLT52Yl9hY2Nlc3MgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc194YjsKKwllbHNlCisJCXZiLT52Yl9hY2Nlc3MgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc19kaTsKKwl2Yi0+dmJfYmggPSBiaDsKK30KKworLyoKKyAqIE9wZXJhdGlvbnMgZm9yIHhhdHRycyBzdG9yZWQgaW4gYmxvY2tzLiAgVGhpcyBpbmNsdWRlcyBpbmxpbmUgaW5vZGUKKyAqIHN0b3JhZ2UgYW5kIHVuaW5kZXhlZCBvY2ZzMl94YXR0cl9ibG9ja3MuCisgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2NmczJfeGFfbG9jX29wZXJhdGlvbnMgb2NmczJfeGFfYmxvY2tfbG9jX29wcyA9IHsKKwkueGxvX2pvdXJuYWxfYWNjZXNzCT0gb2NmczJfeGFfYmxvY2tfam91cm5hbF9hY2Nlc3MsCisJLnhsb19qb3VybmFsX2RpcnR5CT0gb2NmczJfeGFfYmxvY2tfam91cm5hbF9kaXJ0eSwKKwkueGxvX29mZnNldF9wb2ludGVyCT0gb2NmczJfeGFfYmxvY2tfb2Zmc2V0X3BvaW50ZXIsCisJLnhsb19jaGVja19zcGFjZQk9IG9jZnMyX3hhX2Jsb2NrX2NoZWNrX3NwYWNlLAorCS54bG9fY2FuX3JldXNlCQk9IG9jZnMyX3hhX2Jsb2NrX2Nhbl9yZXVzZSwKKwkueGxvX2dldF9mcmVlX3N0YXJ0CT0gb2NmczJfeGFfYmxvY2tfZ2V0X2ZyZWVfc3RhcnQsCisJLnhsb193aXBlX25hbWV2YWx1ZQk9IG9jZnMyX3hhX2Jsb2NrX3dpcGVfbmFtZXZhbHVlLAorCS54bG9fYWRkX2VudHJ5CQk9IG9jZnMyX3hhX2Jsb2NrX2FkZF9lbnRyeSwKKwkueGxvX2FkZF9uYW1ldmFsdWUJPSBvY2ZzMl94YV9ibG9ja19hZGRfbmFtZXZhbHVlLAorCS54bG9fZmlsbF92YWx1ZV9idWYJPSBvY2ZzMl94YV9ibG9ja19maWxsX3ZhbHVlX2J1ZiwKK307CisKK3N0YXRpYyBpbnQgb2NmczJfeGFfYnVja2V0X2pvdXJuYWxfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJCSAgc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0ICpidWNrZXQgPSBsb2MtPnhsX3N0b3JhZ2U7CisKKwlyZXR1cm4gb2NmczJfeGF0dHJfYnVja2V0X2pvdXJuYWxfYWNjZXNzKGhhbmRsZSwgYnVja2V0LCB0eXBlKTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfeGFfYnVja2V0X2pvdXJuYWxfZGlydHkoaGFuZGxlX3QgKmhhbmRsZSwKKwkJCQkJICBzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MpCit7CisJc3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCAqYnVja2V0ID0gbG9jLT54bF9zdG9yYWdlOworCisJb2NmczJfeGF0dHJfYnVja2V0X2pvdXJuYWxfZGlydHkoaGFuZGxlLCBidWNrZXQpOworfQorCitzdGF0aWMgdm9pZCAqb2NmczJfeGFfYnVja2V0X29mZnNldF9wb2ludGVyKHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYywKKwkJCQkJICAgIGludCBvZmZzZXQpCit7CisJc3RydWN0IG9jZnMyX3hhdHRyX2J1Y2tldCAqYnVja2V0ID0gbG9jLT54bF9zdG9yYWdlOworCWludCBibG9jaywgYmxvY2tfb2Zmc2V0OworCisJLyogVGhlIGhlYWRlciBpcyBhdCB0aGUgZnJvbnQgb2YgdGhlIGJ1Y2tldCAqLworCWJsb2NrID0gb2Zmc2V0ID4+IGxvYy0+eGxfaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CisJYmxvY2tfb2Zmc2V0ID0gb2Zmc2V0ICUgbG9jLT54bF9pbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CisKKwlyZXR1cm4gYnVja2V0X2Jsb2NrKGJ1Y2tldCwgYmxvY2spICsgYmxvY2tfb2Zmc2V0OworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhX2J1Y2tldF9jYW5fcmV1c2Uoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX2luZm8gKnhpKQoreworCXJldHVybiBuYW1ldmFsdWVfc2l6ZV94ZShsb2MtPnhsX2VudHJ5KSA+PQorCQluYW1ldmFsdWVfc2l6ZV94aSh4aSk7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGFfYnVja2V0X2dldF9mcmVlX3N0YXJ0KHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYykKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0ICpidWNrZXQgPSBsb2MtPnhsX3N0b3JhZ2U7CisJcmV0dXJuIGxlMTZfdG9fY3B1KGJ1Y2tldF94aChidWNrZXQpLT54aF9mcmVlX3N0YXJ0KTsKK30KKworc3RhdGljIGludCBvY2ZzMl9idWNrZXRfYWxpZ25fZnJlZV9zdGFydChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAorCQkJCQkgaW50IGZyZWVfc3RhcnQsIGludCBzaXplKQoreworCS8qCisJICogV2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbmFtZSt2YWx1ZSBwYWlyIGZpdHMgd2l0aGluCisJICogb25lIGJsb2NrLgorCSAqLworCWlmICgoKGZyZWVfc3RhcnQgLSBzaXplKSA+PiBzYi0+c19ibG9ja3NpemVfYml0cykgIT0KKwkgICAgKChmcmVlX3N0YXJ0IC0gMSkgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHMpKQorCQlmcmVlX3N0YXJ0IC09IGZyZWVfc3RhcnQgJSBzYi0+c19ibG9ja3NpemU7CisKKwlyZXR1cm4gZnJlZV9zdGFydDsKK30KKworc3RhdGljIGludCBvY2ZzMl94YV9idWNrZXRfY2hlY2tfc3BhY2Uoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJCSAgICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGkpCit7CisJaW50IHJjOworCWludCBjb3VudCA9IGxlMTZfdG9fY3B1KGxvYy0+eGxfaGVhZGVyLT54aF9jb3VudCk7CisJaW50IGZyZWVfc3RhcnQgPSBvY2ZzMl94YV9nZXRfZnJlZV9zdGFydChsb2MpOworCWludCBuZWVkZWRfc3BhY2UgPSBvY2ZzMl94aV9lbnRyeV91c2FnZSh4aSk7CisJaW50IHNpemUgPSBuYW1ldmFsdWVfc2l6ZV94aSh4aSk7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGxvYy0+eGxfaW5vZGUtPmlfc2I7CisKKwkvKgorCSAqIEJ1Y2tldCBzdG9yYWdlIGRvZXMgbm90IHJlY2xhaW0gbmFtZSt2YWx1ZSBwYWlycyBpdCBjYW5ub3QKKwkgKiByZXVzZS4gIFRoZXkgbGl2ZSBhcyBob2xlcyB1bnRpbCB0aGUgYnVja2V0IGZpbGxzLCBhbmQgdGhlbgorCSAqIHRoZSBidWNrZXQgaXMgZGVmcmFnbWVudGVkLiAgSG93ZXZlciwgdGhlIGJ1Y2tldCBjYW4gcmVjbGFpbQorCSAqIHRoZSBvY2ZzMl94YXR0cl9lbnRyeS4KKwkgKi8KKwlpZiAobG9jLT54bF9lbnRyeSkgeworCQkvKiBEb24ndCBuZWVkIHNwYWNlIGlmIHdlJ3JlIHJldXNpbmchICovCisJCWlmIChvY2ZzMl94YV9jYW5fcmV1c2VfZW50cnkobG9jLCB4aSkpCisJCQluZWVkZWRfc3BhY2UgPSAwOworCQllbHNlCisJCQluZWVkZWRfc3BhY2UgLT0gc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSk7CisJfQorCUJVR19PTihuZWVkZWRfc3BhY2UgPCAwKTsKKworCWlmIChmcmVlX3N0YXJ0IDwgc2l6ZSkgeworCQlpZiAobmVlZGVkX3NwYWNlKQorCQkJcmV0dXJuIC1FTk9TUEM7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRmlyc3Qgd2UgY2hlY2sgaWYgaXQgd291bGQgZml0IGluIHRoZSBmaXJzdCBwbGFjZS4KKwkJICogQmVsb3csIHdlIGFsaWduIHRoZSBmcmVlIHN0YXJ0IHRvIGEgYmxvY2suICBUaGlzIG1heQorCQkgKiBzbGlkZSB1cyBiZWxvdyB0aGUgbWluaW11bSBnYXAuICBCeSBjaGVja2luZyB1bmFsaWduZWQKKwkJICogZmlyc3QsIHdlIGF2b2lkIHRoYXQgZXJyb3IuCisJCSAqLworCQlyYyA9IG9jZnMyX3hhX2NoZWNrX3NwYWNlX2hlbHBlcihuZWVkZWRfc3BhY2UsIGZyZWVfc3RhcnQsCisJCQkJCQkgY291bnQpOworCQlpZiAocmMpCisJCQlyZXR1cm4gcmM7CisJCWZyZWVfc3RhcnQgPSBvY2ZzMl9idWNrZXRfYWxpZ25fZnJlZV9zdGFydChzYiwgZnJlZV9zdGFydCwKKwkJCQkJCQkgICBzaXplKTsKKwl9CisJcmV0dXJuIG9jZnMyX3hhX2NoZWNrX3NwYWNlX2hlbHBlcihuZWVkZWRfc3BhY2UsIGZyZWVfc3RhcnQsIGNvdW50KTsKK30KKworc3RhdGljIHZvaWQgb2NmczJfeGFfYnVja2V0X3dpcGVfbmFtZXZhbHVlKHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYykKK3sKKwlsZTE2X2FkZF9jcHUoJmxvYy0+eGxfaGVhZGVyLT54aF9uYW1lX3ZhbHVlX2xlbiwKKwkJICAgICAtbmFtZXZhbHVlX3NpemVfeGUobG9jLT54bF9lbnRyeSkpOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl94YV9idWNrZXRfYWRkX2VudHJ5KHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYywgdTMyIG5hbWVfaGFzaCkKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9IGxvYy0+eGxfaGVhZGVyOworCWludCBjb3VudCA9IGxlMTZfdG9fY3B1KHhoLT54aF9jb3VudCk7CisJaW50IGxvdyA9IDAsIGhpZ2ggPSBjb3VudCAtIDEsIHRtcDsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnRtcF94ZTsKKworCS8qCisJICogV2Uga2VlcCBidWNrZXRzIHNvcnRlZCBieSBuYW1lX2hhc2gsIHNvIHdlIG5lZWQgdG8gZmluZAorCSAqIG91ciBpbnNlcnQgcGxhY2UuCisJICovCisJd2hpbGUgKGxvdyA8PSBoaWdoICYmIGNvdW50KSB7CisJCXRtcCA9IChsb3cgKyBoaWdoKSAvIDI7CisJCXRtcF94ZSA9ICZ4aC0+eGhfZW50cmllc1t0bXBdOworCisJCWlmIChuYW1lX2hhc2ggPiBsZTMyX3RvX2NwdSh0bXBfeGUtPnhlX25hbWVfaGFzaCkpCisJCQlsb3cgPSB0bXAgKyAxOworCQllbHNlIGlmIChuYW1lX2hhc2ggPCBsZTMyX3RvX2NwdSh0bXBfeGUtPnhlX25hbWVfaGFzaCkpCisJCQloaWdoID0gdG1wIC0gMTsKKwkJZWxzZSB7CisJCQlsb3cgPSB0bXA7CisJCQlicmVhazsKIAkJfQogCX0KIAotCWlmICgheHMtPm5vdF9mb3VuZCkgewotCQkvKiBGb3IgZXhpc3RpbmcgZXh0ZW5kZWQgYXR0cmlidXRlICovCi0JCXNpemVfdCBzaXplID0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKwotCQkJT0NGUzJfWEFUVFJfU0laRShsZTY0X3RvX2NwdSh4cy0+aGVyZS0+eGVfdmFsdWVfc2l6ZSkpOwotCQlzaXplX3Qgb2ZmcyA9IGxlMTZfdG9fY3B1KHhzLT5oZXJlLT54ZV9uYW1lX29mZnNldCk7Ci0JCXZvaWQgKnZhbCA9IHhzLT5iYXNlICsgb2ZmczsKKwlpZiAobG93ICE9IGNvdW50KQorCQltZW1tb3ZlKCZ4aC0+eGhfZW50cmllc1tsb3cgKyAxXSwKKwkJCSZ4aC0+eGhfZW50cmllc1tsb3ddLAorCQkJKChjb3VudCAtIGxvdykgKiBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSkpOwogCi0JCWlmIChvY2ZzMl94YXR0cl9pc19sb2NhbCh4cy0+aGVyZSkgJiYgc2l6ZSA9PSBzaXplX2wpIHsKLQkJCS8qIFJlcGxhY2UgZXhpc3RpbmcgbG9jYWwgeGF0dHIgd2l0aCB0cmVlIHJvb3QgKi8KLQkJCXJldCA9IG9jZnMyX3hhdHRyX3NldF92YWx1ZV9vdXRzaWRlKGlub2RlLCB4aSwgeHMsCi0JCQkJCQkJICAgIGN0eHQsICZ2Yiwgb2Zmcyk7Ci0JCQlpZiAocmV0IDwgMCkKLQkJCQltbG9nX2Vycm5vKHJldCk7Ci0JCQlnb3RvIG91dDsKLQkJfSBlbHNlIGlmICghb2NmczJfeGF0dHJfaXNfbG9jYWwoeHMtPmhlcmUpKSB7Ci0JCQkvKiBGb3IgZXhpc3RpbmcgeGF0dHIgd2hpY2ggaGFzIHZhbHVlIG91dHNpZGUgKi8KLQkJCXZiLnZiX3h2ID0gKHN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9yb290ICopCi0JCQkJKHZhbCArIE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pKTsKKwlsZTE2X2FkZF9jcHUoJnhoLT54aF9jb3VudCwgMSk7CisJbG9jLT54bF9lbnRyeSA9ICZ4aC0+eGhfZW50cmllc1tsb3ddOworCW1lbXNldChsb2MtPnhsX2VudHJ5LCAwLCBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSk7Cit9CiAKLQkJCWlmICh4aS0+dmFsdWVfbGVuID4gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHsKLQkJCQkvKgotCQkJCSAqIElmIG5ldyB2YWx1ZSBuZWVkIHNldCBvdXRzaWRlIGFsc28sCi0JCQkJICogZmlyc3QgdHJ1bmNhdGUgb2xkIHZhbHVlIHRvIG5ldyB2YWx1ZSwKLQkJCQkgKiB0aGVuIHNldCBuZXcgdmFsdWUgd2l0aCBzZXRfdmFsdWVfb3V0c2lkZSgpLgotCQkJCSAqLwotCQkJCXJldCA9IG9jZnMyX3hhdHRyX3ZhbHVlX3RydW5jYXRlKGlub2RlLAotCQkJCQkJCQkgJnZiLAotCQkJCQkJCQkgeGktPnZhbHVlX2xlbiwKLQkJCQkJCQkJIGN0eHQpOwotCQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCQkJZ290byBvdXQ7Ci0JCQkJfQorc3RhdGljIHZvaWQgb2NmczJfeGFfYnVja2V0X2FkZF9uYW1ldmFsdWUoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLCBpbnQgc2l6ZSkKK3sKKwlpbnQgZnJlZV9zdGFydCA9IG9jZnMyX3hhX2dldF9mcmVlX3N0YXJ0KGxvYyk7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGggPSBsb2MtPnhsX2hlYWRlcjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gbG9jLT54bF9pbm9kZS0+aV9zYjsKKwlpbnQgbmFtZXZhbF9vZmZzZXQ7CiAKLQkJCQlyZXQgPSBvY2ZzMl94YXR0cl91cGRhdGVfZW50cnkoaW5vZGUsCi0JCQkJCQkJICAgICAgIGhhbmRsZSwKLQkJCQkJCQkgICAgICAgeGksCi0JCQkJCQkJICAgICAgIHhzLAotCQkJCQkJCSAgICAgICAmdmIsCi0JCQkJCQkJICAgICAgIG9mZnMpOwotCQkJCWlmIChyZXQgPCAwKSB7Ci0JCQkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCQkJZ290byBvdXQ7Ci0JCQkJfQorCWZyZWVfc3RhcnQgPSBvY2ZzMl9idWNrZXRfYWxpZ25fZnJlZV9zdGFydChzYiwgZnJlZV9zdGFydCwgc2l6ZSk7CisJbmFtZXZhbF9vZmZzZXQgPSBmcmVlX3N0YXJ0IC0gc2l6ZTsKKwlsb2MtPnhsX2VudHJ5LT54ZV9uYW1lX29mZnNldCA9IGNwdV90b19sZTE2KG5hbWV2YWxfb2Zmc2V0KTsKKwl4aC0+eGhfZnJlZV9zdGFydCA9IGNwdV90b19sZTE2KG5hbWV2YWxfb2Zmc2V0KTsKKwlsZTE2X2FkZF9jcHUoJnhoLT54aF9uYW1lX3ZhbHVlX2xlbiwgc2l6ZSk7CiAKLQkJCQlyZXQgPSBfX29jZnMyX3hhdHRyX3NldF92YWx1ZV9vdXRzaWRlKGlub2RlLAotCQkJCQkJCQloYW5kbGUsCi0JCQkJCQkJCSZ2YiwKLQkJCQkJCQkJeGktPnZhbHVlLAotCQkJCQkJCQl4aS0+dmFsdWVfbGVuKTsKLQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJbWxvZ19lcnJubyhyZXQpOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl94YV9idWNrZXRfZmlsbF92YWx1ZV9idWYoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmICp2YikKK3sKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0ICpidWNrZXQgPSBsb2MtPnhsX3N0b3JhZ2U7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGxvYy0+eGxfaW5vZGUtPmlfc2I7CisJaW50IG5hbWV2YWxfb2Zmc2V0ID0gbGUxNl90b19jcHUobG9jLT54bF9lbnRyeS0+eGVfbmFtZV9vZmZzZXQpOworCWludCBzaXplID0gbmFtZXZhbHVlX3NpemVfeGUobG9jLT54bF9lbnRyeSk7CisJaW50IGJsb2NrX29mZnNldCA9IG5hbWV2YWxfb2Zmc2V0ID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCisJLyogVmFsdWVzIGFyZSBub3QgYWxsb3dlZCB0byBzdHJhZGRsZSBibG9jayBib3VuZGFyaWVzICovCisJQlVHX09OKGJsb2NrX29mZnNldCAhPQorCSAgICAgICAoKG5hbWV2YWxfb2Zmc2V0ICsgc2l6ZSAtIDEpID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSk7CisJLyogV2UgZXhwZWN0IHRoZSBidWNrZXQgdG8gYmUgZmlsbGVkIGluICovCisJQlVHX09OKCFidWNrZXQtPmJ1X2Joc1tibG9ja19vZmZzZXRdKTsKKworCXZiLT52Yl9hY2Nlc3MgPSBvY2ZzMl9qb3VybmFsX2FjY2VzczsKKwl2Yi0+dmJfYmggPSBidWNrZXQtPmJ1X2Joc1tibG9ja19vZmZzZXRdOworfQorCisvKiBPcGVyYXRpb25zIGZvciB4YXR0cnMgc3RvcmVkIGluIGJ1Y2tldHMuICovCitzdGF0aWMgY29uc3Qgc3RydWN0IG9jZnMyX3hhX2xvY19vcGVyYXRpb25zIG9jZnMyX3hhX2J1Y2tldF9sb2Nfb3BzID0geworCS54bG9fam91cm5hbF9hY2Nlc3MJPSBvY2ZzMl94YV9idWNrZXRfam91cm5hbF9hY2Nlc3MsCisJLnhsb19qb3VybmFsX2RpcnR5CT0gb2NmczJfeGFfYnVja2V0X2pvdXJuYWxfZGlydHksCisJLnhsb19vZmZzZXRfcG9pbnRlcgk9IG9jZnMyX3hhX2J1Y2tldF9vZmZzZXRfcG9pbnRlciwKKwkueGxvX2NoZWNrX3NwYWNlCT0gb2NmczJfeGFfYnVja2V0X2NoZWNrX3NwYWNlLAorCS54bG9fY2FuX3JldXNlCQk9IG9jZnMyX3hhX2J1Y2tldF9jYW5fcmV1c2UsCisJLnhsb19nZXRfZnJlZV9zdGFydAk9IG9jZnMyX3hhX2J1Y2tldF9nZXRfZnJlZV9zdGFydCwKKwkueGxvX3dpcGVfbmFtZXZhbHVlCT0gb2NmczJfeGFfYnVja2V0X3dpcGVfbmFtZXZhbHVlLAorCS54bG9fYWRkX2VudHJ5CQk9IG9jZnMyX3hhX2J1Y2tldF9hZGRfZW50cnksCisJLnhsb19hZGRfbmFtZXZhbHVlCT0gb2NmczJfeGFfYnVja2V0X2FkZF9uYW1ldmFsdWUsCisJLnhsb19maWxsX3ZhbHVlX2J1Zgk9IG9jZnMyX3hhX2J1Y2tldF9maWxsX3ZhbHVlX2J1ZiwKK307CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgb2NmczJfeGFfdmFsdWVfY2x1c3RlcnMoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jKQoreworCXN0cnVjdCBvY2ZzMl94YXR0cl92YWx1ZV9idWYgdmI7CisKKwlpZiAob2NmczJfeGF0dHJfaXNfbG9jYWwobG9jLT54bF9lbnRyeSkpCisJCXJldHVybiAwOworCisJb2NmczJfeGFfZmlsbF92YWx1ZV9idWYobG9jLCAmdmIpOworCXJldHVybiBsZTMyX3RvX2NwdSh2Yi52Yl94di0+eHJfY2x1c3RlcnMpOworfQorCitzdGF0aWMgaW50IG9jZnMyX3hhX3ZhbHVlX3RydW5jYXRlKHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYywgdTY0IGJ5dGVzLAorCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl9zZXRfY3R4dCAqY3R4dCkKK3sKKwlpbnQgdHJ1bmNfcmMsIGFjY2Vzc19yYzsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmIHZiOworCisJb2NmczJfeGFfZmlsbF92YWx1ZV9idWYobG9jLCAmdmIpOworCXRydW5jX3JjID0gb2NmczJfeGF0dHJfdmFsdWVfdHJ1bmNhdGUobG9jLT54bF9pbm9kZSwgJnZiLCBieXRlcywKKwkJCQkJICAgICAgY3R4dCk7CisKKwkvKgorCSAqIFRoZSBjYWxsZXIgb2Ygb2NmczJfeGFfdmFsdWVfdHJ1bmNhdGUoKSBoYXMgYWxyZWFkeSBjYWxsZWQKKwkgKiBvY2ZzMl94YV9qb3VybmFsX2FjY2VzcyBvbiB0aGUgbG9jLiAgSG93ZXZlciwgVGhlIHRydW5jYXRlIGNvZGUKKwkgKiBjYWxscyBvY2ZzMl9leHRlbmRfdHJhbnMoKS4gIFRoaXMgbWF5IGNvbW1pdCB0aGUgcHJldmlvdXMKKwkgKiB0cmFuc2FjdGlvbiBhbmQgb3BlbiBhIG5ldyBvbmUuICBJZiB0aGlzIGlzIGEgYnVja2V0LCB0cnVuY2F0ZQorCSAqIGNvdWxkIGxlYXZlIG9ubHkgdmItPnZiX2JoIHNldCB1cCBmb3Igam91cm5hbGluZy4gIE1lYW53aGlsZSwKKwkgKiB0aGUgY2FsbGVyIGlzIGV4cGVjdGluZyB0byBkaXJ0eSB0aGUgZW50aXJlIGJ1Y2tldC4gIFNvIHdlIG11c3QKKwkgKiByZXNldCB0aGUgam91cm5hbCB3b3JrLiAgV2UgZG8gdGhpcyBldmVuIGlmIHRydW5jYXRlIGhhcyBmYWlsZWQsCisJICogYXMgaXQgY291bGQgaGF2ZSBmYWlsZWQgYWZ0ZXIgY29tbWl0dGluZyB0aGUgZXh0ZW5kLgorCSAqLworCWFjY2Vzc19yYyA9IG9jZnMyX3hhX2pvdXJuYWxfYWNjZXNzKGN0eHQtPmhhbmRsZSwgbG9jLAorCQkJCQkgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOworCisJLyogRXJyb3JzIGluIHRydW5jYXRlIHRha2UgcHJlY2VkZW5jZSAqLworCXJldHVybiB0cnVuY19yYyA/IHRydW5jX3JjIDogYWNjZXNzX3JjOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl94YV9yZW1vdmVfZW50cnkoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jKQoreworCWludCBpbmRleCwgY291bnQ7CisJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGggPSBsb2MtPnhsX2hlYWRlcjsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKmVudHJ5ID0gbG9jLT54bF9lbnRyeTsKKworCW9jZnMyX3hhX3dpcGVfbmFtZXZhbHVlKGxvYyk7CisJbG9jLT54bF9lbnRyeSA9IE5VTEw7CisKKwlsZTE2X2FkZF9jcHUoJnhoLT54aF9jb3VudCwgLTEpOworCWNvdW50ID0gbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KTsKKworCS8qCisJICogT25seSB6ZXJvIG91dCB0aGUgZW50cnkgaWYgdGhlcmUgYXJlIG1vcmUgcmVtYWluaW5nLiAgVGhpcyBpcworCSAqIGltcG9ydGFudCBmb3IgYW4gZW1wdHkgYnVja2V0LCBhcyBpdCBrZWVwcyB0cmFjayBvZiB0aGUKKwkgKiBidWNrZXQncyBoYXNoIHZhbHVlLiAgSXQgZG9lc24ndCBodXJ0IGVtcHR5IGJsb2NrIHN0b3JhZ2UuCisJICovCisJaWYgKGNvdW50KSB7CisJCWluZGV4ID0gKChjaGFyICopZW50cnkgLSAoY2hhciAqKSZ4aC0+eGhfZW50cmllcykgLworCQkJc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSk7CisJCW1lbW1vdmUoJnhoLT54aF9lbnRyaWVzW2luZGV4XSwgJnhoLT54aF9lbnRyaWVzW2luZGV4ICsgMV0sCisJCQkoY291bnQgLSBpbmRleCkgKiBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSk7CisJCW1lbXNldCgmeGgtPnhoX2VudHJpZXNbY291bnRdLCAwLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkpOworCX0KK30KKworLyoKKyAqIElmIHdlIGhhdmUgYSBwcm9ibGVtIGFkanVzdGluZyB0aGUgc2l6ZSBvZiBhbiBleHRlcm5hbCB2YWx1ZSBkdXJpbmcKKyAqIG9jZnMyX3hhX3ByZXBhcmVfZW50cnkoKSBvciBvY2ZzMl94YV9yZW1vdmUoKSwgd2UgbWF5IGhhdmUgYW4geGF0dHIKKyAqIGluIGFuIGludGVybWVkaWF0ZSBzdGF0ZS4gIEZvciBleGFtcGxlLCB0aGUgdmFsdWUgbWF5IGJlIHBhcnRpYWxseQorICogdHJ1bmNhdGVkLgorICoKKyAqIElmIHRoZSB2YWx1ZSB0cmVlIGhhc24ndCBjaGFuZ2VkLCB0aGUgZXh0ZW5kL3RydW5jYXRlIHdlbnQgbm93aGVyZS4KKyAqIFdlIGhhdmUgbm90aGluZyB0byBkby4gIFRoZSBjYWxsZXIgY2FuIHRyZWF0IGl0IGFzIGEgc3RyYWlnaHQgZXJyb3IuCisgKgorICogSWYgdGhlIHZhbHVlIHRyZWUgZ290IHBhcnRpYWxseSB0cnVuY2F0ZWQsIHdlIG5vdyBoYXZlIGEgY29ycnVwdGVkCisgKiBleHRlbmRlZCBhdHRyaWJ1dGUuICBXZSdyZSBnb2luZyB0byB3aXBlIGl0cyBlbnRyeSBhbmQgbGVhayB0aGUKKyAqIGNsdXN0ZXJzLiAgQmV0dGVyIHRvIGxlYWsgc29tZSBzdG9yYWdlIHRoYW4gbGVhdmUgYSBjb3JydXB0IGVudHJ5LgorICoKKyAqIElmIHRoZSB2YWx1ZSB0cmVlIGdyZXcsIGl0IG9idmlvdXNseSBkaWRuJ3QgZ3JvdyBlbm91Z2ggZm9yIHRoZQorICogbmV3IGVudHJ5LiAgV2UncmUgbm90IGdvaW5nIHRvIHRyeSBhbmQgcmVjbGFpbSB0aG9zZSBjbHVzdGVycyBlaXRoZXIuCisgKiBJZiB0aGVyZSB3YXMgYWxyZWFkeSBhbiBleHRlcm5hbCB2YWx1ZSB0aGVyZSAob3JpZ19jbHVzdGVycyAhPSAwKSwKKyAqIHRoZSBuZXcgY2x1c3RlcnMgYXJlIGF0dGFjaGVkIHNhZmVseSBhbmQgd2UgY2FuIGp1c3QgbGVhdmUgdGhlIG9sZAorICogdmFsdWUgaW4gcGxhY2UuICBJZiB0aGVyZSB3YXMgbm8gZXh0ZXJuYWwgdmFsdWUgdGhlcmUsIHdlIHJlbW92ZQorICogdGhlIGVudHJ5LgorICoKKyAqIFRoaXMgd2F5LCB0aGUgeGF0dHIgYmxvY2sgd2Ugc3RvcmUgaW4gdGhlIGpvdXJuYWwgd2lsbCBiZSBjb25zaXN0ZW50LgorICogSWYgdGhlIHNpemUgY2hhbmdlIGJyb2tlIGJlY2F1c2Ugb2YgdGhlIGpvdXJuYWwsIG5vIGNoYW5nZXMgd2lsbCBoaXQKKyAqIGRpc2sgYW55d2F5LgorICovCitzdGF0aWMgdm9pZCBvY2ZzMl94YV9jbGVhbnVwX3ZhbHVlX3RydW5jYXRlKHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYywKKwkJCQkJICAgIGNvbnN0IGNoYXIgKndoYXQsCisJCQkJCSAgICB1bnNpZ25lZCBpbnQgb3JpZ19jbHVzdGVycykKK3sKKwl1bnNpZ25lZCBpbnQgbmV3X2NsdXN0ZXJzID0gb2NmczJfeGFfdmFsdWVfY2x1c3RlcnMobG9jKTsKKwljaGFyICpuYW1ldmFsX2J1ZiA9IG9jZnMyX3hhX29mZnNldF9wb2ludGVyKGxvYywKKwkJCQlsZTE2X3RvX2NwdShsb2MtPnhsX2VudHJ5LT54ZV9uYW1lX29mZnNldCkpOworCisJaWYgKG5ld19jbHVzdGVycyA8IG9yaWdfY2x1c3RlcnMpIHsKKwkJbWxvZyhNTF9FUlJPUiwKKwkJICAgICAiUGFydGlhbCB0cnVuY2F0ZSB3aGlsZSAlcyB4YXR0ciAlLipzLiAgTGVha2luZyAiCisJCSAgICAgIiV1IGNsdXN0ZXJzIGFuZCByZW1vdmluZyB0aGUgZW50cnlcbiIsCisJCSAgICAgd2hhdCwgbG9jLT54bF9lbnRyeS0+eGVfbmFtZV9sZW4sIG5hbWV2YWxfYnVmLAorCQkgICAgIG9yaWdfY2x1c3RlcnMgLSBuZXdfY2x1c3RlcnMpOworCQlvY2ZzMl94YV9yZW1vdmVfZW50cnkobG9jKTsKKwl9IGVsc2UgaWYgKCFvcmlnX2NsdXN0ZXJzKSB7CisJCW1sb2coTUxfRVJST1IsCisJCSAgICAgIlVuYWJsZSB0byBhbGxvY2F0ZSBhbiBleHRlcm5hbCB2YWx1ZSBmb3IgeGF0dHIgIgorCQkgICAgICIlLipzIHNhZmVseS4gIExlYWtpbmcgJXUgY2x1c3RlcnMgYW5kIHJlbW92aW5nIHRoZSAiCisJCSAgICAgImVudHJ5XG4iLAorCQkgICAgIGxvYy0+eGxfZW50cnktPnhlX25hbWVfbGVuLCBuYW1ldmFsX2J1ZiwKKwkJICAgICBuZXdfY2x1c3RlcnMgLSBvcmlnX2NsdXN0ZXJzKTsKKwkJb2NmczJfeGFfcmVtb3ZlX2VudHJ5KGxvYyk7CisJfSBlbHNlIGlmIChuZXdfY2x1c3RlcnMgPiBvcmlnX2NsdXN0ZXJzKQorCQltbG9nKE1MX0VSUk9SLAorCQkgICAgICJVbmFibGUgdG8gZ3JvdyB4YXR0ciAlLipzIHNhZmVseS4gICV1IG5ldyBjbHVzdGVycyAiCisJCSAgICAgImhhdmUgYmVlbiBhZGRlZCwgYnV0IHRoZSB2YWx1ZSB3aWxsIG5vdCBiZSAiCisJCSAgICAgIm1vZGlmaWVkXG4iLAorCQkgICAgIGxvYy0+eGxfZW50cnktPnhlX25hbWVfbGVuLCBuYW1ldmFsX2J1ZiwKKwkJICAgICBuZXdfY2x1c3RlcnMgLSBvcmlnX2NsdXN0ZXJzKTsKK30KKworc3RhdGljIGludCBvY2ZzMl94YV9yZW1vdmUoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJICAgc3RydWN0IG9jZnMyX3hhdHRyX3NldF9jdHh0ICpjdHh0KQoreworCWludCByYyA9IDA7CisJdW5zaWduZWQgaW50IG9yaWdfY2x1c3RlcnM7CisKKwlpZiAoIW9jZnMyX3hhdHRyX2lzX2xvY2FsKGxvYy0+eGxfZW50cnkpKSB7CisJCW9yaWdfY2x1c3RlcnMgPSBvY2ZzMl94YV92YWx1ZV9jbHVzdGVycyhsb2MpOworCQlyYyA9IG9jZnMyX3hhX3ZhbHVlX3RydW5jYXRlKGxvYywgMCwgY3R4dCk7CisJCWlmIChyYykgeworCQkJbWxvZ19lcnJubyhyYyk7CisJCQkvKgorCQkJICogU2luY2UgdGhpcyBpcyByZW1vdmUsIHdlIGNhbiByZXR1cm4gMCBpZgorCQkJICogb2NmczJfeGFfY2xlYW51cF92YWx1ZV90cnVuY2F0ZSgpIGlzIGdvaW5nIHRvCisJCQkgKiB3aXBlIHRoZSBlbnRyeSBhbnl3YXkuICBTbyB3ZSBjaGVjayB0aGUKKwkJCSAqIGNsdXN0ZXIgY291bnQgYXMgd2VsbC4KKwkJCSAqLworCQkJaWYgKG9yaWdfY2x1c3RlcnMgIT0gb2NmczJfeGFfdmFsdWVfY2x1c3RlcnMobG9jKSkKKwkJCQlyYyA9IDA7CisJCQlvY2ZzMl94YV9jbGVhbnVwX3ZhbHVlX3RydW5jYXRlKGxvYywgInJlbW92aW5nIiwKKwkJCQkJCQlvcmlnX2NsdXN0ZXJzKTsKKwkJCWlmIChyYykKIAkJCQlnb3RvIG91dDsKLQkJCX0gZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBJZiBuZXcgdmFsdWUgbmVlZCBzZXQgaW4gbG9jYWwsCi0JCQkJICoganVzdCB0cnVjYXRlIG9sZCB2YWx1ZSB0byB6ZXJvLgotCQkJCSAqLwotCQkJCSByZXQgPSBvY2ZzMl94YXR0cl92YWx1ZV90cnVuY2F0ZShpbm9kZSwKLQkJCQkJCQkJICAmdmIsCi0JCQkJCQkJCSAgMCwKLQkJCQkJCQkJICBjdHh0KTsKLQkJCQlpZiAocmV0IDwgMCkKLQkJCQkJbWxvZ19lcnJubyhyZXQpOworCQl9CisJfQorCisJb2NmczJfeGFfcmVtb3ZlX2VudHJ5KGxvYyk7CisKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIG9jZnMyX3hhX2luc3RhbGxfdmFsdWVfcm9vdChzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MpCit7CisJaW50IG5hbWVfc2l6ZSA9IE9DRlMyX1hBVFRSX1NJWkUobG9jLT54bF9lbnRyeS0+eGVfbmFtZV9sZW4pOworCWNoYXIgKm5hbWV2YWxfYnVmOworCisJbmFtZXZhbF9idWYgPSBvY2ZzMl94YV9vZmZzZXRfcG9pbnRlcihsb2MsCisJCQkJbGUxNl90b19jcHUobG9jLT54bF9lbnRyeS0+eGVfbmFtZV9vZmZzZXQpKTsKKwltZW1jcHkobmFtZXZhbF9idWYgKyBuYW1lX3NpemUsICZkZWZfeHYsIE9DRlMyX1hBVFRSX1JPT1RfU0laRSk7Cit9CisKKy8qCisgKiBUYWtlIGFuIGV4aXN0aW5nIGVudHJ5IGFuZCBtYWtlIGl0IHJlYWR5IGZvciB0aGUgbmV3IHZhbHVlLiAgVGhpcworICogd29uJ3QgYWxsb2NhdGUgc3BhY2UsIGJ1dCBpdCBtYXkgZnJlZSBzcGFjZS4gIEl0IHNob3VsZCBiZSByZWFkeSBmb3IKKyAqIG9jZnMyX3hhX3ByZXBhcmVfZW50cnkoKSB0byBmaW5pc2ggdGhlIHdvcmsuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfeGFfcmV1c2VfZW50cnkoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKKwkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2V0X2N0eHQgKmN0eHQpCit7CisJaW50IHJjID0gMDsKKwlpbnQgbmFtZV9zaXplID0gT0NGUzJfWEFUVFJfU0laRSh4aS0+eGlfbmFtZV9sZW4pOworCXVuc2lnbmVkIGludCBvcmlnX2NsdXN0ZXJzOworCWNoYXIgKm5hbWV2YWxfYnVmOworCWludCB4ZV9sb2NhbCA9IG9jZnMyX3hhdHRyX2lzX2xvY2FsKGxvYy0+eGxfZW50cnkpOworCWludCB4aV9sb2NhbCA9IHhpLT54aV92YWx1ZV9sZW4gPD0gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkU7CisKKwlCVUdfT04oT0NGUzJfWEFUVFJfU0laRShsb2MtPnhsX2VudHJ5LT54ZV9uYW1lX2xlbikgIT0KKwkgICAgICAgbmFtZV9zaXplKTsKKworCW5hbWV2YWxfYnVmID0gb2NmczJfeGFfb2Zmc2V0X3BvaW50ZXIobG9jLAorCQkJCWxlMTZfdG9fY3B1KGxvYy0+eGxfZW50cnktPnhlX25hbWVfb2Zmc2V0KSk7CisJaWYgKHhlX2xvY2FsKSB7CisJCW1lbXNldChuYW1ldmFsX2J1ZiArIG5hbWVfc2l6ZSwgMCwKKwkJICAgICAgIG5hbWV2YWx1ZV9zaXplX3hlKGxvYy0+eGxfZW50cnkpIC0gbmFtZV9zaXplKTsKKwkJaWYgKCF4aV9sb2NhbCkKKwkJCW9jZnMyX3hhX2luc3RhbGxfdmFsdWVfcm9vdChsb2MpOworCX0gZWxzZSB7CisJCW9yaWdfY2x1c3RlcnMgPSBvY2ZzMl94YV92YWx1ZV9jbHVzdGVycyhsb2MpOworCQlpZiAoeGlfbG9jYWwpIHsKKwkJCXJjID0gb2NmczJfeGFfdmFsdWVfdHJ1bmNhdGUobG9jLCAwLCBjdHh0KTsKKwkJCWlmIChyYyA8IDApCisJCQkJbWxvZ19lcnJubyhyYyk7CisJCQllbHNlCisJCQkJbWVtc2V0KG5hbWV2YWxfYnVmICsgbmFtZV9zaXplLCAwLAorCQkJCSAgICAgICBuYW1ldmFsdWVfc2l6ZV94ZShsb2MtPnhsX2VudHJ5KSAtCisJCQkJICAgICAgIG5hbWVfc2l6ZSk7CisJCX0gZWxzZSBpZiAobGU2NF90b19jcHUobG9jLT54bF9lbnRyeS0+eGVfdmFsdWVfc2l6ZSkgPgorCQkJICAgeGktPnhpX3ZhbHVlX2xlbikgeworCQkJcmMgPSBvY2ZzMl94YV92YWx1ZV90cnVuY2F0ZShsb2MsIHhpLT54aV92YWx1ZV9sZW4sCisJCQkJCQkgICAgIGN0eHQpOworCQkJaWYgKHJjIDwgMCkKKwkJCQltbG9nX2Vycm5vKHJjKTsKKwkJfQorCisJCWlmIChyYykgeworCQkJb2NmczJfeGFfY2xlYW51cF92YWx1ZV90cnVuY2F0ZShsb2MsICJyZXVzaW5nIiwKKwkJCQkJCQlvcmlnX2NsdXN0ZXJzKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJbG9jLT54bF9lbnRyeS0+eGVfdmFsdWVfc2l6ZSA9IGNwdV90b19sZTY0KHhpLT54aV92YWx1ZV9sZW4pOworCW9jZnMyX3hhdHRyX3NldF9sb2NhbChsb2MtPnhsX2VudHJ5LCB4aV9sb2NhbCk7CisKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKKy8qCisgKiBQcmVwYXJlcyBsb2MtPnhsX2VudHJ5IHRvIHJlY2VpdmUgdGhlIG5ldyB4YXR0ci4gIFRoaXMgaW5jbHVkZXMKKyAqIHByb3Blcmx5IHNldHRpbmcgdXAgdGhlIG5hbWUrdmFsdWUgcGFpciByZWdpb24uICBJZiBsb2MtPnhsX2VudHJ5CisgKiBhbHJlYWR5IGV4aXN0cywgaXQgd2lsbCB0YWtlIGNhcmUgb2YgbW9kaWZ5aW5nIGl0IGFwcHJvcHJpYXRlbHkuCisgKgorICogTm90ZSB0aGF0IHRoaXMgbW9kaWZpZXMgdGhlIGRhdGEuICBZb3UgZGlkIGpvdXJuYWxfYWNjZXNzIGFscmVhZHksCisgKiByaWdodD8KKyAqLworc3RhdGljIGludCBvY2ZzMl94YV9wcmVwYXJlX2VudHJ5KHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYywKKwkJCQkgIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKKwkJCQkgIHUzMiBuYW1lX2hhc2gsCisJCQkJICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2V0X2N0eHQgKmN0eHQpCit7CisJaW50IHJjID0gMDsKKwl1bnNpZ25lZCBpbnQgb3JpZ19jbHVzdGVyczsKKwlfX2xlNjQgb3JpZ192YWx1ZV9zaXplID0gMDsKKworCXJjID0gb2NmczJfeGFfY2hlY2tfc3BhY2UobG9jLCB4aSk7CisJaWYgKHJjKQorCQlnb3RvIG91dDsKKworCWlmIChsb2MtPnhsX2VudHJ5KSB7CisJCWlmIChvY2ZzMl94YV9jYW5fcmV1c2VfZW50cnkobG9jLCB4aSkpIHsKKwkJCW9yaWdfdmFsdWVfc2l6ZSA9IGxvYy0+eGxfZW50cnktPnhlX3ZhbHVlX3NpemU7CisJCQlyYyA9IG9jZnMyX3hhX3JldXNlX2VudHJ5KGxvYywgeGksIGN0eHQpOworCQkJaWYgKHJjKQorCQkJCWdvdG8gb3V0OworCQkJZ290byBhbGxvY192YWx1ZTsKKwkJfQorCisJCWlmICghb2NmczJfeGF0dHJfaXNfbG9jYWwobG9jLT54bF9lbnRyeSkpIHsKKwkJCW9yaWdfY2x1c3RlcnMgPSBvY2ZzMl94YV92YWx1ZV9jbHVzdGVycyhsb2MpOworCQkJcmMgPSBvY2ZzMl94YV92YWx1ZV90cnVuY2F0ZShsb2MsIDAsIGN0eHQpOworCQkJaWYgKHJjKSB7CisJCQkJbWxvZ19lcnJubyhyYyk7CisJCQkJb2NmczJfeGFfY2xlYW51cF92YWx1ZV90cnVuY2F0ZShsb2MsCisJCQkJCQkJCSJvdmVyd3JpdGluZyIsCisJCQkJCQkJCW9yaWdfY2x1c3RlcnMpOworCQkJCWdvdG8gb3V0OwogCQkJfQogCQl9CisJCW9jZnMyX3hhX3dpcGVfbmFtZXZhbHVlKGxvYyk7CisJfSBlbHNlCisJCW9jZnMyX3hhX2FkZF9lbnRyeShsb2MsIG5hbWVfaGFzaCk7CisKKwkvKgorCSAqIElmIHdlIGdldCBoZXJlLCB3ZSBoYXZlIGEgYmxhbmsgZW50cnkuICBGaWxsIGl0LiAgV2UgZ3JvdyBvdXIKKwkgKiBuYW1lK3ZhbHVlIHBhaXIgYmFjayBmcm9tIHRoZSBlbmQuCisJICovCisJb2NmczJfeGFfYWRkX25hbWV2YWx1ZShsb2MsIHhpKTsKKwlpZiAoeGktPnhpX3ZhbHVlX2xlbiA+IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKQorCQlvY2ZzMl94YV9pbnN0YWxsX3ZhbHVlX3Jvb3QobG9jKTsKKworYWxsb2NfdmFsdWU6CisJaWYgKHhpLT54aV92YWx1ZV9sZW4gPiBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgeworCQlvcmlnX2NsdXN0ZXJzID0gb2NmczJfeGFfdmFsdWVfY2x1c3RlcnMobG9jKTsKKwkJcmMgPSBvY2ZzMl94YV92YWx1ZV90cnVuY2F0ZShsb2MsIHhpLT54aV92YWx1ZV9sZW4sIGN0eHQpOworCQlpZiAocmMgPCAwKSB7CisJCQkvKgorCQkJICogSWYgd2UgdHJpZWQgdG8gZ3JvdyBhbiBleGlzdGluZyBleHRlcm5hbCB2YWx1ZSwKKwkJCSAqIG9jZnMyX3hhX2NsZWFudVAtdmFsdWVfdHJ1bmNhdGUoKSBpcyBnb2luZyB0bworCQkJICogbGV0IGl0IHN0YW5kLiAgV2UgaGF2ZSB0byByZXN0b3JlIGl0cyBvcmlnaW5hbAorCQkJICogdmFsdWUgc2l6ZS4KKwkJCSAqLworCQkJbG9jLT54bF9lbnRyeS0+eGVfdmFsdWVfc2l6ZSA9IG9yaWdfdmFsdWVfc2l6ZTsKKwkJCW9jZnMyX3hhX2NsZWFudXBfdmFsdWVfdHJ1bmNhdGUobG9jLCAiZ3Jvd2luZyIsCisJCQkJCQkJb3JpZ19jbHVzdGVycyk7CisJCQltbG9nX2Vycm5vKHJjKTsKKwkJfQogCX0KIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCB4cy0+aW5vZGVfYmgsCitvdXQ6CisJcmV0dXJuIHJjOworfQorCisvKgorICogU3RvcmUgdGhlIHZhbHVlIHBvcnRpb24gb2YgdGhlIG5hbWUrdmFsdWUgcGFpci4gIFRoaXMgd2lsbCBza2lwCisgKiB2YWx1ZXMgdGhhdCBhcmUgc3RvcmVkIGV4dGVybmFsbHkuICBUaGVpciB0cmVlIHJvb3RzIHdlcmUgc2V0IHVwCisgKiBieSBvY2ZzMl94YV9wcmVwYXJlX2VudHJ5KCkuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfeGFfc3RvcmVfdmFsdWUoc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKKwkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2V0X2N0eHQgKmN0eHQpCit7CisJaW50IHJjID0gMDsKKwlpbnQgbmFtZXZhbF9vZmZzZXQgPSBsZTE2X3RvX2NwdShsb2MtPnhsX2VudHJ5LT54ZV9uYW1lX29mZnNldCk7CisJaW50IG5hbWVfc2l6ZSA9IE9DRlMyX1hBVFRSX1NJWkUoeGktPnhpX25hbWVfbGVuKTsKKwljaGFyICpuYW1ldmFsX2J1ZjsKKwlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfYnVmIHZiOworCisJbmFtZXZhbF9idWYgPSBvY2ZzMl94YV9vZmZzZXRfcG9pbnRlcihsb2MsIG5hbWV2YWxfb2Zmc2V0KTsKKwlpZiAoeGktPnhpX3ZhbHVlX2xlbiA+IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7CisJCW9jZnMyX3hhX2ZpbGxfdmFsdWVfYnVmKGxvYywgJnZiKTsKKwkJcmMgPSBfX29jZnMyX3hhdHRyX3NldF92YWx1ZV9vdXRzaWRlKGxvYy0+eGxfaW5vZGUsCisJCQkJCQkgICAgIGN0eHQtPmhhbmRsZSwgJnZiLAorCQkJCQkJICAgICB4aS0+eGlfdmFsdWUsCisJCQkJCQkgICAgIHhpLT54aV92YWx1ZV9sZW4pOworCX0gZWxzZQorCQltZW1jcHkobmFtZXZhbF9idWYgKyBuYW1lX3NpemUsIHhpLT54aV92YWx1ZSwgeGktPnhpX3ZhbHVlX2xlbik7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgb2NmczJfeGFfc2V0KHN0cnVjdCBvY2ZzMl94YV9sb2MgKmxvYywKKwkJCXN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKKwkJCXN0cnVjdCBvY2ZzMl94YXR0cl9zZXRfY3R4dCAqY3R4dCkKK3sKKwlpbnQgcmV0OworCXUzMiBuYW1lX2hhc2ggPSBvY2ZzMl94YXR0cl9uYW1lX2hhc2gobG9jLT54bF9pbm9kZSwgeGktPnhpX25hbWUsCisJCQkJCSAgICAgIHhpLT54aV9uYW1lX2xlbik7CisKKwlyZXQgPSBvY2ZzMl94YV9qb3VybmFsX2FjY2VzcyhjdHh0LT5oYW5kbGUsIGxvYywKIAkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CiAJaWYgKHJldCkgewogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwogCX0KIAotCWlmICghKGZsYWcgJiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpKSB7Ci0JCXJldCA9IHZiLnZiX2FjY2VzcyhoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwgdmIudmJfYmgsCi0JCQkJICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwotCQlpZiAocmV0KSB7Ci0JCQltbG9nX2Vycm5vKHJldCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQogCS8qCi0JICogU2V0IHZhbHVlIGluIGxvY2FsLCBpbmNsdWRlIHNldCB0cmVlIHJvb3QgaW4gbG9jYWwuCi0JICogVGhpcyBpcyB0aGUgZmlyc3Qgc3RlcCBmb3IgdmFsdWUgc2l6ZSA+SU5MSU5FX1NJWkUuCisJICogRnJvbSBoZXJlIG9uIG91dCwgZXZlcnl0aGluZyBpcyBnb2luZyB0byBtb2RpZnkgdGhlIGJ1ZmZlciBhCisJICogbGl0dGxlLiAgRXJyb3JzIGFyZSBnb2luZyB0byBsZWF2ZSB0aGUgeGF0dHIgaGVhZGVyIGluIGEKKwkgKiBzYW5lIHN0YXRlLiAgVGh1cywgZXZlbiB3aXRoIGVycm9ycyB3ZSBkaXJ0eSB0aGUgc3Vja2VyLgogCSAqLwotCW9jZnMyX3hhdHRyX3NldF9lbnRyeV9sb2NhbChpbm9kZSwgJnhpX2wsIHhzLCBsYXN0LCBtaW5fb2Zmcyk7CiAKLQlpZiAoIShmbGFnICYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMKSkgewotCQlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgeHMtPnhhdHRyX2JoKTsKLQkJaWYgKHJldCA8IDApIHsKKwkvKiBEb24ndCB3b3JyeSwgd2UgYXJlIG5ldmVyIGNhbGxlZCB3aXRoICF4aV92YWx1ZSBhbmQgIXhsX2VudHJ5ICovCisJaWYgKCF4aS0+eGlfdmFsdWUpIHsKKwkJcmV0ID0gb2NmczJfeGFfcmVtb3ZlKGxvYywgY3R4dCk7CisJCWdvdG8gb3V0X2RpcnR5OworCX0KKworCXJldCA9IG9jZnMyX3hhX3ByZXBhcmVfZW50cnkobG9jLCB4aSwgbmFtZV9oYXNoLCBjdHh0KTsKKwlpZiAocmV0KSB7CisJCWlmIChyZXQgIT0gLUVOT1NQQykKIAkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCWdvdG8gb3V0OwotCQl9CisJCWdvdG8gb3V0X2RpcnR5OwogCX0KIAotCWlmICghKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpICYmCi0JICAgIChmbGFnICYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMKSkgewotCQlzdHJ1Y3Qgb2NmczJfc3VwZXIgKm9zYiA9IE9DRlMyX1NCKGlub2RlLT5pX3NiKTsKLQkJdW5zaWduZWQgaW50IHhhdHRyc2l6ZSA9IG9zYi0+c194YXR0cl9pbmxpbmVfc2l6ZTsKLQotCQkvKgotCQkgKiBBZGp1c3QgZXh0ZW50IHJlY29yZCBjb3VudCBvciBpbmxpbmUgZGF0YSBzaXplCi0JCSAqIHRvIHJlc2VydmUgc3BhY2UgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZS4KLQkJICovCi0JCWlmIChvaS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX0RBVEFfRkwpIHsKLQkJCXN0cnVjdCBvY2ZzMl9pbmxpbmVfZGF0YSAqaWRhdGEgPSAmZGktPmlkMi5pX2RhdGE7Ci0JCQlsZTE2X2FkZF9jcHUoJmlkYXRhLT5pZF9jb3VudCwgLXhhdHRyc2l6ZSk7Ci0JCX0gZWxzZSBpZiAoIShvY2ZzMl9pbm9kZV9pc19mYXN0X3N5bWxpbmsoaW5vZGUpKSkgewotCQkJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCA9ICZkaS0+aWQyLmlfbGlzdDsKLQkJCWxlMTZfYWRkX2NwdSgmZWwtPmxfY291bnQsIC0oeGF0dHJzaXplIC8KLQkJCQkJc2l6ZW9mKHN0cnVjdCBvY2ZzMl9leHRlbnRfcmVjKSkpOwotCQl9Ci0JCWRpLT5pX3hhdHRyX2lubGluZV9zaXplID0gY3B1X3RvX2xlMTYoeGF0dHJzaXplKTsKLQl9Ci0JLyogVXBkYXRlIHhhdHRyIGZsYWcgKi8KLQlzcGluX2xvY2soJm9pLT5pcF9sb2NrKTsKLQlvaS0+aXBfZHluX2ZlYXR1cmVzIHw9IGZsYWc7Ci0JZGktPmlfZHluX2ZlYXR1cmVzID0gY3B1X3RvX2xlMTYob2ktPmlwX2R5bl9mZWF0dXJlcyk7Ci0Jc3Bpbl91bmxvY2soJm9pLT5pcF9sb2NrKTsKLQotCXJldCA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCB4cy0+aW5vZGVfYmgpOwotCWlmIChyZXQgPCAwKQorCXJldCA9IG9jZnMyX3hhX3N0b3JlX3ZhbHVlKGxvYywgeGksIGN0eHQpOworCWlmIChyZXQpCiAJCW1sb2dfZXJybm8ocmV0KTsKIAotCWlmICghcmV0ICYmIHhpLT52YWx1ZV9sZW4gPiBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgewotCQkvKgotCQkgKiBTZXQgdmFsdWUgb3V0c2lkZSBpbiBCIHRyZWUuCi0JCSAqIFRoaXMgaXMgdGhlIHNlY29uZCBzdGVwIGZvciB2YWx1ZSBzaXplID4gSU5MSU5FX1NJWkUuCi0JCSAqLwotCQlzaXplX3Qgb2ZmcyA9IGxlMTZfdG9fY3B1KHhzLT5oZXJlLT54ZV9uYW1lX29mZnNldCk7Ci0JCXJldCA9IG9jZnMyX3hhdHRyX3NldF92YWx1ZV9vdXRzaWRlKGlub2RlLCB4aSwgeHMsIGN0eHQsCi0JCQkJCQkgICAgJnZiLCBvZmZzKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCWludCByZXQyOworb3V0X2RpcnR5OgorCW9jZnMyX3hhX2pvdXJuYWxfZGlydHkoY3R4dC0+aGFuZGxlLCBsb2MpOwogCi0JCQltbG9nX2Vycm5vKHJldCk7Ci0JCQkvKgotCQkJICogSWYgc2V0IHZhbHVlIG91dHNpZGUgZmFpbGVkLCB3ZSBoYXZlIHRvIGNsZWFuCi0JCQkgKiB0aGUganVuayB0cmVlIHJvb3Qgd2UgaGF2ZSBhbHJlYWR5IHNldCBpbiBsb2NhbC4KLQkJCSAqLwotCQkJcmV0MiA9IG9jZnMyX3hhdHRyX2NsZWFudXAoaW5vZGUsIGN0eHQtPmhhbmRsZSwKLQkJCQkJCSAgIHhpLCB4cywgJnZiLCBvZmZzKTsKLQkJCWlmIChyZXQyIDwgMCkKLQkJCQltbG9nX2Vycm5vKHJldDIpOwotCQl9Ci0JfQogb3V0OgogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB2b2lkIG9jZnMyX2luaXRfZGlub2RlX3hhX2xvYyhzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKKwkJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWJoLT5iX2RhdGE7CisKKwlCVUdfT04oIShPQ0ZTMl9JKGlub2RlKS0+aXBfZHluX2ZlYXR1cmVzICYgT0NGUzJfSU5MSU5FX1hBVFRSX0ZMKSk7CisKKwlsb2MtPnhsX2lub2RlID0gaW5vZGU7CisJbG9jLT54bF9vcHMgPSAmb2NmczJfeGFfYmxvY2tfbG9jX29wczsKKwlsb2MtPnhsX3N0b3JhZ2UgPSBiaDsKKwlsb2MtPnhsX2VudHJ5ID0gZW50cnk7CisJbG9jLT54bF9zaXplID0gbGUxNl90b19jcHUoZGktPmlfeGF0dHJfaW5saW5lX3NpemUpOworCWxvYy0+eGxfaGVhZGVyID0KKwkJKHN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKikoYmgtPmJfZGF0YSArIGJoLT5iX3NpemUgLQorCQkJCQkgICAgICBsb2MtPnhsX3NpemUpOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9pbml0X3hhdHRyX2Jsb2NrX3hhX2xvYyhzdHJ1Y3Qgb2NmczJfeGFfbG9jICpsb2MsCisJCQkJCSAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAorCQkJCQkgIHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqZW50cnkpCit7CisJc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICp4YiA9CisJCShzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKiliaC0+Yl9kYXRhOworCisJQlVHX09OKGxlMTZfdG9fY3B1KHhiLT54Yl9mbGFncykgJiBPQ0ZTMl9YQVRUUl9JTkRFWEVEKTsKKworCWxvYy0+eGxfaW5vZGUgPSBpbm9kZTsKKwlsb2MtPnhsX29wcyA9ICZvY2ZzMl94YV9ibG9ja19sb2Nfb3BzOworCWxvYy0+eGxfc3RvcmFnZSA9IGJoOworCWxvYy0+eGxfaGVhZGVyID0gJih4Yi0+eGJfYXR0cnMueGJfaGVhZGVyKTsKKwlsb2MtPnhsX2VudHJ5ID0gZW50cnk7CisJbG9jLT54bF9zaXplID0gYmgtPmJfc2l6ZSAtIG9mZnNldG9mKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jaywKKwkJCQkJICAgICB4Yl9hdHRycy54Yl9oZWFkZXIpOworfQorCitzdGF0aWMgdm9pZCBvY2ZzMl9pbml0X3hhdHRyX2J1Y2tldF94YV9sb2Moc3RydWN0IG9jZnMyX3hhX2xvYyAqbG9jLAorCQkJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0ICpidWNrZXQsCisJCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqZW50cnkpCit7CisJbG9jLT54bF9pbm9kZSA9IGJ1Y2tldC0+YnVfaW5vZGU7CisJbG9jLT54bF9vcHMgPSAmb2NmczJfeGFfYnVja2V0X2xvY19vcHM7CisJbG9jLT54bF9zdG9yYWdlID0gYnVja2V0OworCWxvYy0+eGxfaGVhZGVyID0gYnVja2V0X3hoKGJ1Y2tldCk7CisJbG9jLT54bF9lbnRyeSA9IGVudHJ5OworCWxvYy0+eGxfc2l6ZSA9IE9DRlMyX1hBVFRSX0JVQ0tFVF9TSVpFOworfQorCiAvKgogICogSW4geGF0dHIgcmVtb3ZlLCBpZiBpdCBpcyBzdG9yZWQgb3V0c2lkZSBhbmQgcmVmY291bnRlZCwgd2UgbWF5IGhhdmUKICAqIHRoZSBjaGFuY2UgdG8gc3BsaXQgdGhlIHJlZmNvdW50IHRyZWUuIFNvIG5lZWQgdGhlIGFsbG9jYXRvcnMuCkBAIC0yMTQ5LDYgKzI2ODMsNTUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBvY2ZzMl94YXR0cl9pYm9keV9pbml0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmRpX2JoLAorCQkJCSAgc3RydWN0IG9jZnMyX3hhdHRyX3NldF9jdHh0ICpjdHh0KQoreworCWludCByZXQ7CisJc3RydWN0IG9jZnMyX2lub2RlX2luZm8gKm9pID0gT0NGUzJfSShpbm9kZSk7CisJc3RydWN0IG9jZnMyX2Rpbm9kZSAqZGkgPSAoc3RydWN0IG9jZnMyX2Rpbm9kZSAqKWRpX2JoLT5iX2RhdGE7CisJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihpbm9kZS0+aV9zYik7CisJdW5zaWduZWQgaW50IHhhdHRyc2l6ZSA9IG9zYi0+c194YXR0cl9pbmxpbmVfc2l6ZTsKKworCWlmICghb2NmczJfeGF0dHJfaGFzX3NwYWNlX2lubGluZShpbm9kZSwgZGkpKSB7CisJCXJldCA9IC1FTk9TUEM7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGN0eHQtPmhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCBkaV9iaCwKKwkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogQWRqdXN0IGV4dGVudCByZWNvcmQgY291bnQgb3IgaW5saW5lIGRhdGEgc2l6ZQorCSAqIHRvIHJlc2VydmUgc3BhY2UgZm9yIGV4dGVuZGVkIGF0dHJpYnV0ZS4KKwkgKi8KKwlpZiAob2ktPmlwX2R5bl9mZWF0dXJlcyAmIE9DRlMyX0lOTElORV9EQVRBX0ZMKSB7CisJCXN0cnVjdCBvY2ZzMl9pbmxpbmVfZGF0YSAqaWRhdGEgPSAmZGktPmlkMi5pX2RhdGE7CisJCWxlMTZfYWRkX2NwdSgmaWRhdGEtPmlkX2NvdW50LCAteGF0dHJzaXplKTsKKwl9IGVsc2UgaWYgKCEob2NmczJfaW5vZGVfaXNfZmFzdF9zeW1saW5rKGlub2RlKSkpIHsKKwkJc3RydWN0IG9jZnMyX2V4dGVudF9saXN0ICplbCA9ICZkaS0+aWQyLmlfbGlzdDsKKwkJbGUxNl9hZGRfY3B1KCZlbC0+bF9jb3VudCwgLSh4YXR0cnNpemUgLworCQkJCQkgICAgIHNpemVvZihzdHJ1Y3Qgb2NmczJfZXh0ZW50X3JlYykpKTsKKwl9CisJZGktPmlfeGF0dHJfaW5saW5lX3NpemUgPSBjcHVfdG9fbGUxNih4YXR0cnNpemUpOworCisJc3Bpbl9sb2NrKCZvaS0+aXBfbG9jayk7CisJb2ktPmlwX2R5bl9mZWF0dXJlcyB8PSBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkx8T0NGUzJfSEFTX1hBVFRSX0ZMOworCWRpLT5pX2R5bl9mZWF0dXJlcyA9IGNwdV90b19sZTE2KG9pLT5pcF9keW5fZmVhdHVyZXMpOworCXNwaW5fdW5sb2NrKCZvaS0+aXBfbG9jayk7CisKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2RpcnR5KGN0eHQtPmhhbmRsZSwgZGlfYmgpOworCWlmIChyZXQgPCAwKQorCQltbG9nX2Vycm5vKHJldCk7CisKK291dDoKKwlyZXR1cm4gcmV0OworfQorCiAvKgogICogb2NmczJfeGF0dHJfaWJvZHlfc2V0KCkKICAqCkBAIC0yMTYwLDkgKzI3NDMsMTAgQEAKIAkJCQkgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCiAJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9zZXRfY3R4dCAqY3R4dCkKIHsKKwlpbnQgcmV0OwogCXN0cnVjdCBvY2ZzMl9pbm9kZV9pbmZvICpvaSA9IE9DRlMyX0koaW5vZGUpOwogCXN0cnVjdCBvY2ZzMl9kaW5vZGUgKmRpID0gKHN0cnVjdCBvY2ZzMl9kaW5vZGUgKil4cy0+aW5vZGVfYmgtPmJfZGF0YTsKLQlpbnQgcmV0OworCXN0cnVjdCBvY2ZzMl94YV9sb2MgbG9jOwogCiAJaWYgKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSA9PSBPQ0ZTMl9NSU5fQkxPQ0tTSVpFKQogCQlyZXR1cm4gLUVOT1NQQzsKQEAgLTIxNzUsOCArMjc1OSwyNSBAQAogCQl9CiAJfQogCi0JcmV0ID0gb2NmczJfeGF0dHJfc2V0X2VudHJ5KGlub2RlLCB4aSwgeHMsIGN0eHQsCi0JCQkJKE9DRlMyX0lOTElORV9YQVRUUl9GTCB8IE9DRlMyX0hBU19YQVRUUl9GTCkpOworCWlmICghKG9pLT5pcF9keW5fZmVhdHVyZXMgJiBPQ0ZTMl9JTkxJTkVfWEFUVFJfRkwpKSB7CisJCXJldCA9IG9jZnMyX3hhdHRyX2lib2R5X2luaXQoaW5vZGUsIHhzLT5pbm9kZV9iaCwgY3R4dCk7CisJCWlmIChyZXQpIHsKKwkJCWlmIChyZXQgIT0gLUVOT1NQQykKKwkJCQltbG9nX2Vycm5vKHJldCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCW9jZnMyX2luaXRfZGlub2RlX3hhX2xvYygmbG9jLCBpbm9kZSwgeHMtPmlub2RlX2JoLAorCQkJCSB4cy0+bm90X2ZvdW5kID8gTlVMTCA6IHhzLT5oZXJlKTsKKwlyZXQgPSBvY2ZzMl94YV9zZXQoJmxvYywgeGksIGN0eHQpOworCWlmIChyZXQpIHsKKwkJaWYgKHJldCAhPSAtRU5PU1BDKQorCQkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisJeHMtPmhlcmUgPSBsb2MueGxfZW50cnk7CisKIG91dDoKIAl1cF93cml0ZSgmb2ktPmlwX2FsbG9jX3NlbSk7CiAKQEAgLTIyMzYsMTIgKzI4MzcsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG9jZnMyX2NyZWF0ZV94YXR0cl9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLAotCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorc3RhdGljIGludCBvY2ZzMl9jcmVhdGVfeGF0dHJfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICppbm9kZV9iaCwKLQkJCQkgICAgc3RydWN0IG9jZnMyX2FsbG9jX2NvbnRleHQgKm1ldGFfYWMsCi0JCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnJldF9iaCwKLQkJCQkgICAgaW50IGluZGV4ZWQpCisJCQkJICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9zZXRfY3R4dCAqY3R4dCwKKwkJCQkgICAgaW50IGluZGV4ZWQsCisJCQkJICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnJldF9iaCkKIHsKIAlpbnQgcmV0OwogCXUxNiBzdWJhbGxvY19iaXRfc3RhcnQ7CkBAIC0yMjUyLDE0ICsyODUyLDE0IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXdfYmggPSBOVUxMOwogCXN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqeGJsazsKIAotCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLCBpbm9kZV9iaCwKLQkJCQkgICAgICBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEUpOworCXJldCA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzX2RpKGN0eHQtPmhhbmRsZSwgSU5PREVfQ0FDSEUoaW5vZGUpLAorCQkJCSAgICAgIGlub2RlX2JoLCBPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19DUkVBVEUpOwogCWlmIChyZXQgPCAwKSB7CiAJCW1sb2dfZXJybm8ocmV0KTsKIAkJZ290byBlbmQ7CiAJfQogCi0JcmV0ID0gb2NmczJfY2xhaW1fbWV0YWRhdGEob3NiLCBoYW5kbGUsIG1ldGFfYWMsIDEsCisJcmV0ID0gb2NmczJfY2xhaW1fbWV0YWRhdGEob3NiLCBjdHh0LT5oYW5kbGUsIGN0eHQtPm1ldGFfYWMsIDEsCiAJCQkJICAgJnN1YmFsbG9jX2JpdF9zdGFydCwgJm51bV9nb3QsCiAJCQkJICAgJmZpcnN0X2Jsa25vKTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMjI3MCw3ICsyODcwLDcgQEAKIAluZXdfYmggPSBzYl9nZXRibGsoaW5vZGUtPmlfc2IsIGZpcnN0X2Jsa25vKTsKIAlvY2ZzMl9zZXRfbmV3X2J1ZmZlcl91cHRvZGF0ZShJTk9ERV9DQUNIRShpbm9kZSksIG5ld19iaCk7CiAKLQlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc194YihoYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwKKwlyZXQgPSBvY2ZzMl9qb3VybmFsX2FjY2Vzc194YihjdHh0LT5oYW5kbGUsIElOT0RFX0NBQ0hFKGlub2RlKSwKIAkJCQkgICAgICBuZXdfYmgsCiAJCQkJICAgICAgT0NGUzJfSk9VUk5BTF9BQ0NFU1NfQ1JFQVRFKTsKIAlpZiAocmV0IDwgMCkgewpAQCAtMjI4MiwxMSArMjg4MiwxMCBAQAogCXhibGsgPSAoc3RydWN0IG9jZnMyX3hhdHRyX2Jsb2NrICopbmV3X2JoLT5iX2RhdGE7CiAJbWVtc2V0KHhibGssIDAsIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7CiAJc3RyY3B5KCh2b2lkICopeGJsaywgT0NGUzJfWEFUVFJfQkxPQ0tfU0lHTkFUVVJFKTsKLQl4YmxrLT54Yl9zdWJhbGxvY19zbG90ID0gY3B1X3RvX2xlMTYob3NiLT5zbG90X251bSk7CisJeGJsay0+eGJfc3ViYWxsb2Nfc2xvdCA9IGNwdV90b19sZTE2KGN0eHQtPm1ldGFfYWMtPmFjX2FsbG9jX3Nsb3QpOwogCXhibGstPnhiX3N1YmFsbG9jX2JpdCA9IGNwdV90b19sZTE2KHN1YmFsbG9jX2JpdF9zdGFydCk7CiAJeGJsay0+eGJfZnNfZ2VuZXJhdGlvbiA9IGNwdV90b19sZTMyKG9zYi0+ZnNfZ2VuZXJhdGlvbik7CiAJeGJsay0+eGJfYmxrbm8gPSBjcHVfdG9fbGU2NChmaXJzdF9ibGtubyk7Ci0KIAlpZiAoaW5kZXhlZCkgewogCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdHJlZV9yb290ICp4ciA9ICZ4YmxrLT54Yl9hdHRycy54Yl9yb290OwogCQl4ci0+eHRfY2x1c3RlcnMgPSBjcHVfdG9fbGUzMigxKTsKQEAgLTIyOTcsMTQgKzI4OTYsMTcgQEAKIAkJeHItPnh0X2xpc3QubF9uZXh0X2ZyZWVfcmVjID0gY3B1X3RvX2xlMTYoMSk7CiAJCXhibGstPnhiX2ZsYWdzID0gY3B1X3RvX2xlMTYoT0NGUzJfWEFUVFJfSU5ERVhFRCk7CiAJfQorCW9jZnMyX2pvdXJuYWxfZGlydHkoY3R4dC0+aGFuZGxlLCBuZXdfYmgpOwogCi0JcmV0ID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIG5ld19iaCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJbWxvZ19lcnJubyhyZXQpOwotCQlnb3RvIGVuZDsKLQl9CisJLyogQWRkIGl0IHRvIHRoZSBpbm9kZSAqLwogCWRpLT5pX3hhdHRyX2xvYyA9IGNwdV90b19sZTY0KGZpcnN0X2Jsa25vKTsKLQlvY2ZzMl9qb3VybmFsX2RpcnR5KGhhbmRsZSwgaW5vZGVfYmgpOworCisJc3Bpbl9sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfbG9jayk7CisJT0NGUzJfSShpbm9kZSktPmlwX2R5bl9mZWF0dXJlcyB8PSBPQ0ZTMl9IQVNfWEFUVFJfRkw7CisJZGktPmlfZHluX2ZlYXR1cmVzID0gY3B1X3RvX2xlMTYoT0NGUzJfSShpbm9kZSktPmlwX2R5bl9mZWF0dXJlcyk7CisJc3Bpbl91bmxvY2soJk9DRlMyX0koaW5vZGUpLT5pcF9sb2NrKTsKKworCW9jZnMyX2pvdXJuYWxfZGlydHkoY3R4dC0+aGFuZGxlLCBpbm9kZV9iaCk7CiAKIAkqcmV0X2JoID0gbmV3X2JoOwogCW5ld19iaCA9IE5VTEw7CkBAIC0yMzI2LDEzICsyOTI4LDEzIEBACiAJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9zZXRfY3R4dCAqY3R4dCkKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKm5ld19iaCA9IE5VTEw7Ci0JaGFuZGxlX3QgKmhhbmRsZSA9IGN0eHQtPmhhbmRsZTsKIAlzdHJ1Y3Qgb2NmczJfeGF0dHJfYmxvY2sgKnhibGsgPSBOVUxMOwogCWludCByZXQ7CisJc3RydWN0IG9jZnMyX3hhX2xvYyBsb2M7CiAKIAlpZiAoIXhzLT54YXR0cl9iaCkgewotCQlyZXQgPSBvY2ZzMl9jcmVhdGVfeGF0dHJfYmxvY2soaGFuZGxlLCBpbm9kZSwgeHMtPmlub2RlX2JoLAotCQkJCQkgICAgICAgY3R4dC0+bWV0YV9hYywgJm5ld19iaCwgMCk7CisJCXJldCA9IG9jZnMyX2NyZWF0ZV94YXR0cl9ibG9jayhpbm9kZSwgeHMtPmlub2RlX2JoLCBjdHh0LAorCQkJCQkgICAgICAgMCwgJm5ld19iaCk7CiAJCWlmIChyZXQpIHsKIAkJCW1sb2dfZXJybm8ocmV0KTsKIAkJCWdvdG8gZW5kOwpAQCAtMjM0OCwyMSArMjk1MCwyNSBAQAogCQl4YmxrID0gKHN0cnVjdCBvY2ZzMl94YXR0cl9ibG9jayAqKXhzLT54YXR0cl9iaC0+Yl9kYXRhOwogCiAJaWYgKCEobGUxNl90b19jcHUoeGJsay0+eGJfZmxhZ3MpICYgT0NGUzJfWEFUVFJfSU5ERVhFRCkpIHsKLQkJLyogU2V0IGV4dGVuZGVkIGF0dHJpYnV0ZSBpbnRvIGV4dGVybmFsIGJsb2NrICovCi0JCXJldCA9IG9jZnMyX3hhdHRyX3NldF9lbnRyeShpbm9kZSwgeGksIHhzLCBjdHh0LAotCQkJCQkgICAgT0NGUzJfSEFTX1hBVFRSX0ZMKTsKLQkJaWYgKCFyZXQgfHwgcmV0ICE9IC1FTk9TUEMpCi0JCQlnb3RvIGVuZDsKKwkJb2NmczJfaW5pdF94YXR0cl9ibG9ja194YV9sb2MoJmxvYywgaW5vZGUsIHhzLT54YXR0cl9iaCwKKwkJCQkJICAgICAgeHMtPm5vdF9mb3VuZCA/IE5VTEwgOiB4cy0+aGVyZSk7CiAKLQkJcmV0ID0gb2NmczJfeGF0dHJfY3JlYXRlX2luZGV4X2Jsb2NrKGlub2RlLCB4cywgY3R4dCk7Ci0JCWlmIChyZXQpCisJCXJldCA9IG9jZnMyX3hhX3NldCgmbG9jLCB4aSwgY3R4dCk7CisJCWlmICghcmV0KQorCQkJeHMtPmhlcmUgPSBsb2MueGxfZW50cnk7CisJCWVsc2UgaWYgKHJldCAhPSAtRU5PU1BDKQogCQkJZ290byBlbmQ7CisJCWVsc2UgeworCQkJcmV0ID0gb2NmczJfeGF0dHJfY3JlYXRlX2luZGV4X2Jsb2NrKGlub2RlLCB4cywgY3R4dCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZW5kOworCQl9CiAJfQogCi0JcmV0ID0gb2NmczJfeGF0dHJfc2V0X2VudHJ5X2luZGV4X2Jsb2NrKGlub2RlLCB4aSwgeHMsIGN0eHQpOworCWlmIChsZTE2X3RvX2NwdSh4YmxrLT54Yl9mbGFncykgJiBPQ0ZTMl9YQVRUUl9JTkRFWEVEKQorCQlyZXQgPSBvY2ZzMl94YXR0cl9zZXRfZW50cnlfaW5kZXhfYmxvY2soaW5vZGUsIHhpLCB4cywgY3R4dCk7CiAKIGVuZDoKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIzNzEsNyArMjk3Nyw2IEBACiAJCQkJICAgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvICp4aSwKIAkJCQkgICAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMpCiB7Ci0JdTY0IHZhbHVlX3NpemU7CiAJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICpsYXN0OwogCWludCBmcmVlLCBpOwogCXNpemVfdCBtaW5fb2ZmcyA9IHhzLT5lbmQgLSB4cy0+YmFzZTsKQEAgLTIzOTQsMTMgKzI5OTksNyBAQAogCiAJQlVHX09OKCF4cy0+bm90X2ZvdW5kKTsKIAotCWlmICh4aS0+dmFsdWVfbGVuID4gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpCi0JCXZhbHVlX3NpemUgPSBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7Ci0JZWxzZQotCQl2YWx1ZV9zaXplID0gT0NGUzJfWEFUVFJfU0laRSh4aS0+dmFsdWVfbGVuKTsKLQotCWlmIChmcmVlID49IHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpICsKLQkJICAgT0NGUzJfWEFUVFJfU0laRShzdHJsZW4oeGktPm5hbWUpKSArIHZhbHVlX3NpemUpCisJaWYgKGZyZWUgPj0gKHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpICsgbmFtZXZhbHVlX3NpemVfeGkoeGkpKSkKIAkJcmV0dXJuIDE7CiAKIAlyZXR1cm4gMDsKQEAgLTI0MjQsNyArMzAyMyw3IEBACiAJY2hhciAqYmFzZSA9IE5VTEw7CiAJaW50IG5hbWVfb2Zmc2V0LCBuYW1lX2xlbiA9IDA7CiAJdTMyIG5ld19jbHVzdGVycyA9IG9jZnMyX2NsdXN0ZXJzX2Zvcl9ieXRlcyhpbm9kZS0+aV9zYiwKLQkJCQkJCSAgICB4aS0+dmFsdWVfbGVuKTsKKwkJCQkJCSAgICB4aS0+eGlfdmFsdWVfbGVuKTsKIAl1NjQgdmFsdWVfc2l6ZTsKIAogCS8qCkBAIC0yNDMyLDE0ICszMDMxLDE0IEBACiAJICogTm8gbWF0dGVyIHdoZXRoZXIgd2UgcmVwbGFjZSBhbiBvbGQgb25lIG9yIGFkZCBhIG5ldyBvbmUsCiAJICogd2UgbmVlZCB0aGlzIGZvciB3cml0aW5nLgogCSAqLwotCWlmICh4aS0+dmFsdWVfbGVuID4gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpCisJaWYgKHhpLT54aV92YWx1ZV9sZW4gPiBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkKIAkJY3JlZGl0cyArPSBuZXdfY2x1c3RlcnMgKgogCQkJICAgb2NmczJfY2x1c3RlcnNfdG9fYmxvY2tzKGlub2RlLT5pX3NiLCAxKTsKIAogCWlmICh4aXMtPm5vdF9mb3VuZCAmJiB4YnMtPm5vdF9mb3VuZCkgewogCQljcmVkaXRzICs9IG9jZnMyX2Jsb2Nrc19wZXJfeGF0dHJfYnVja2V0KGlub2RlLT5pX3NiKTsKIAotCQlpZiAoeGktPnZhbHVlX2xlbiA+IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7CisJCWlmICh4aS0+eGlfdmFsdWVfbGVuID4gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHsKIAkJCWNsdXN0ZXJzX2FkZCArPSBuZXdfY2x1c3RlcnM7CiAJCQljcmVkaXRzICs9IG9jZnMyX2NhbGNfZXh0ZW5kX2NyZWRpdHMoaW5vZGUtPmlfc2IsCiAJCQkJCQkJJmRlZl94di54di54cl9saXN0LApAQCAtMjQ4NCw3ICszMDgzLDcgQEAKIAkgKiBUaGUgY3JlZGl0cyBmb3IgcmVtb3ZpbmcgdGhlIHZhbHVlIHRyZWUgd2lsbCBiZSBleHRlbmRlZAogCSAqIGJ5IG9jZnMyX3JlbW92ZV9leHRlbnQgaXRzZWxmLgogCSAqLwotCWlmICgheGktPnZhbHVlKSB7CisJaWYgKCF4aS0+eGlfdmFsdWUpIHsKIAkJaWYgKCFvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpCiAJCQljcmVkaXRzICs9IG9jZnMyX3JlbW92ZV9leHRlbnRfY3JlZGl0cyhpbm9kZS0+aV9zYik7CiAKQEAgLTI1MTQsNyArMzExMyw3IEBACiAJCX0KIAl9CiAKLQlpZiAoeGktPnZhbHVlX2xlbiA+IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKSB7CisJaWYgKHhpLT54aV92YWx1ZV9sZW4gPiBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgewogCQkvKiB0aGUgbmV3IHZhbHVlcyB3aWxsIGJlIHN0b3JlZCBvdXRzaWRlLiAqLwogCQl1MzIgb2xkX2NsdXN0ZXJzID0gMDsKIApAQCAtMjU0Nyw5ICszMTQ2LDEwIEBACiAJCSAqIHZhbHVlLCB3ZSBkb24ndCBuZWVkIGFueSBhbGxvY2F0aW9uLCBvdGhlcndpc2Ugd2UgaGF2ZQogCQkgKiB0byBndWVzcyBtZXRhZGF0YSBhbGxvY2F0aW9uLgogCQkgKi8KLQkJaWYgKChvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkgJiYgdmFsdWVfc2l6ZSA+PSB4aS0+dmFsdWVfbGVuKSB8fAorCQlpZiAoKG9jZnMyX3hhdHRyX2lzX2xvY2FsKHhlKSAmJgorCQkgICAgICh2YWx1ZV9zaXplID49IHhpLT54aV92YWx1ZV9sZW4pKSB8fAogCQkgICAgKCFvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkgJiYKLQkJICAgICBPQ0ZTMl9YQVRUUl9ST09UX1NJWkUgPj0geGktPnZhbHVlX2xlbikpCisJCSAgICAgT0NGUzJfWEFUVFJfUk9PVF9TSVpFID49IHhpLT54aV92YWx1ZV9sZW4pKQogCQkJZ290byBvdXQ7CiAJfQogCkBAIC0yNjM5LDcgKzMyMzksNyBAQAogCiAJbWV0YV9hZGQgKz0gZXh0cmFfbWV0YTsKIAltbG9nKDAsICJTZXQgeGF0dHIgJXMsIHJlc2VydmUgbWV0YSBibG9ja3MgPSAlZCwgY2x1c3RlcnMgPSAlZCwgIgotCSAgICAgImNyZWRpdHMgPSAlZFxuIiwgeGktPm5hbWUsIG1ldGFfYWRkLCBjbHVzdGVyc19hZGQsICpjcmVkaXRzKTsKKwkgICAgICJjcmVkaXRzID0gJWRcbiIsIHhpLT54aV9uYW1lLCBtZXRhX2FkZCwgY2x1c3RlcnNfYWRkLCAqY3JlZGl0cyk7CiAKIAlpZiAobWV0YV9hZGQpIHsKIAkJcmV0ID0gb2NmczJfcmVzZXJ2ZV9uZXdfbWV0YWRhdGFfYmxvY2tzKG9zYiwgbWV0YV9hZGQsCkBAIC0yNjc5LDcgKzMyNzksNyBAQAogewogCWludCByZXQgPSAwLCBjcmVkaXRzLCBvbGRfZm91bmQ7CiAKLQlpZiAoIXhpLT52YWx1ZSkgeworCWlmICgheGktPnhpX3ZhbHVlKSB7CiAJCS8qIFJlbW92ZSBleGlzdGluZyBleHRlbmRlZCBhdHRyaWJ1dGUgKi8KIAkJaWYgKCF4aXMtPm5vdF9mb3VuZCkKIAkJCXJldCA9IG9jZnMyX3hhdHRyX2lib2R5X3NldChpbm9kZSwgeGksIHhpcywgY3R4dCk7CkBAIC0yNjkzLDggKzMyOTMsOCBAQAogCQkJICogSWYgc3VjY2VlZCBhbmQgdGhhdCBleHRlbmRlZCBhdHRyaWJ1dGUgZXhpc3RpbmcgaW4KIAkJCSAqIGV4dGVybmFsIGJsb2NrLCB0aGVuIHdlIHdpbGwgcmVtb3ZlIGl0LgogCQkJICovCi0JCQl4aS0+dmFsdWUgPSBOVUxMOwotCQkJeGktPnZhbHVlX2xlbiA9IDA7CisJCQl4aS0+eGlfdmFsdWUgPSBOVUxMOworCQkJeGktPnhpX3ZhbHVlX2xlbiA9IDA7CiAKIAkJCW9sZF9mb3VuZCA9IHhpcy0+bm90X2ZvdW5kOwogCQkJeGlzLT5ub3RfZm91bmQgPSAtRU5PREFUQTsKQEAgLTI3MjIsOCArMzMyMiw4IEBACiAJCX0gZWxzZSBpZiAocmV0ID09IC1FTk9TUEMpIHsKIAkJCWlmIChkaS0+aV94YXR0cl9sb2MgJiYgIXhicy0+eGF0dHJfYmgpIHsKIAkJCQlyZXQgPSBvY2ZzMl94YXR0cl9ibG9ja19maW5kKGlub2RlLAotCQkJCQkJCSAgICAgeGktPm5hbWVfaW5kZXgsCi0JCQkJCQkJICAgICB4aS0+bmFtZSwgeGJzKTsKKwkJCQkJCQkgICAgIHhpLT54aV9uYW1lX2luZGV4LAorCQkJCQkJCSAgICAgeGktPnhpX25hbWUsIHhicyk7CiAJCQkJaWYgKHJldCkKIAkJCQkJZ290byBvdXQ7CiAKQEAgLTI3NjIsOCArMzM2Miw4IEBACiAJCQkJICogSWYgc3VjY2VlZCBhbmQgdGhhdCBleHRlbmRlZCBhdHRyaWJ1dGUKIAkJCQkgKiBleGlzdGluZyBpbiBpbm9kZSwgd2Ugd2lsbCByZW1vdmUgaXQuCiAJCQkJICovCi0JCQkJeGktPnZhbHVlID0gTlVMTDsKLQkJCQl4aS0+dmFsdWVfbGVuID0gMDsKKwkJCQl4aS0+eGlfdmFsdWUgPSBOVUxMOworCQkJCXhpLT54aV92YWx1ZV9sZW4gPSAwOwogCQkJCXhicy0+bm90X2ZvdW5kID0gLUVOT0RBVEE7CiAJCQkJcmV0ID0gb2NmczJfY2FsY194YXR0cl9zZXRfbmVlZChpbm9kZSwKIAkJCQkJCQkJZGksCkBAIC0yODI5LDEwICszNDI5LDExIEBACiAJaW50IHJldDsKIAogCXN0cnVjdCBvY2ZzMl94YXR0cl9pbmZvIHhpID0gewotCQkubmFtZV9pbmRleCA9IG5hbWVfaW5kZXgsCi0JCS5uYW1lID0gbmFtZSwKLQkJLnZhbHVlID0gdmFsdWUsCi0JCS52YWx1ZV9sZW4gPSB2YWx1ZV9sZW4sCisJCS54aV9uYW1lX2luZGV4ID0gbmFtZV9pbmRleCwKKwkJLnhpX25hbWUgPSBuYW1lLAorCQkueGlfbmFtZV9sZW4gPSBzdHJsZW4obmFtZSksCisJCS54aV92YWx1ZSA9IHZhbHVlLAorCQkueGlfdmFsdWVfbGVuID0gdmFsdWVfbGVuLAogCX07CiAKIAlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoIHhpcyA9IHsKQEAgLTI5MTIsMTAgKzM1MTMsMTEgQEAKIAlzdHJ1Y3Qgb2NmczJfcmVmY291bnRfdHJlZSAqcmVmX3RyZWUgPSBOVUxMOwogCiAJc3RydWN0IG9jZnMyX3hhdHRyX2luZm8geGkgPSB7Ci0JCS5uYW1lX2luZGV4ID0gbmFtZV9pbmRleCwKLQkJLm5hbWUgPSBuYW1lLAotCQkudmFsdWUgPSB2YWx1ZSwKLQkJLnZhbHVlX2xlbiA9IHZhbHVlX2xlbiwKKwkJLnhpX25hbWVfaW5kZXggPSBuYW1lX2luZGV4LAorCQkueGlfbmFtZSA9IG5hbWUsCisJCS54aV9uYW1lX2xlbiA9IHN0cmxlbihuYW1lKSwKKwkJLnhpX3ZhbHVlID0gdmFsdWUsCisJCS54aV92YWx1ZV9sZW4gPSB2YWx1ZV9sZW4sCiAJfTsKIAogCXN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggeGlzID0gewpAQCAtMzc1OSw3ICs0MzYxLDcgQEAKIAkJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9idWNrZXQgKmJ1Y2tldCkKIHsKIAlpbnQgcmV0LCBpOwotCXNpemVfdCBlbmQsIG9mZnNldCwgbGVuLCB2YWx1ZV9sZW47CisJc2l6ZV90IGVuZCwgb2Zmc2V0LCBsZW47CiAJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGg7CiAJY2hhciAqZW50cmllcywgKmJ1ZiwgKmJ1Y2tldF9idWYgPSBOVUxMOwogCXU2NCBibGtubyA9IGJ1Y2tldF9ibGtubyhidWNrZXQpOwpAQCAtMzgxMywxMiArNDQxNSw3IEBACiAJZW5kID0gT0NGUzJfWEFUVFJfQlVDS0VUX1NJWkU7CiAJZm9yIChpID0gMDsgaSA8IGxlMTZfdG9fY3B1KHhoLT54aF9jb3VudCk7IGkrKywgeGUrKykgewogCQlvZmZzZXQgPSBsZTE2X3RvX2NwdSh4ZS0+eGVfbmFtZV9vZmZzZXQpOwotCQlpZiAob2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKQotCQkJdmFsdWVfbGVuID0gT0NGUzJfWEFUVFJfU0laRSgKLQkJCQkJbGU2NF90b19jcHUoeGUtPnhlX3ZhbHVlX3NpemUpKTsKLQkJZWxzZQotCQkJdmFsdWVfbGVuID0gT0NGUzJfWEFUVFJfUk9PVF9TSVpFOwotCQlsZW4gPSBPQ0ZTMl9YQVRUUl9TSVpFKHhlLT54ZV9uYW1lX2xlbikgKyB2YWx1ZV9sZW47CisJCWxlbiA9IG5hbWV2YWx1ZV9zaXplX3hlKHhlKTsKIAogCQkvKgogCQkgKiBXZSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSBuYW1lL3ZhbHVlIHBhaXIKQEAgLTQwMDcsNyArNDYwNCw3IEBACiAJCQkJICAgIGludCBuZXdfYnVja2V0X2hlYWQpCiB7CiAJaW50IHJldCwgaTsKLQlpbnQgY291bnQsIHN0YXJ0LCBsZW4sIG5hbWVfdmFsdWVfbGVuID0gMCwgeGVfbGVuLCBuYW1lX29mZnNldCA9IDA7CisJaW50IGNvdW50LCBzdGFydCwgbGVuLCBuYW1lX3ZhbHVlX2xlbiA9IDAsIG5hbWVfb2Zmc2V0ID0gMDsKIAlzdHJ1Y3Qgb2NmczJfeGF0dHJfYnVja2V0ICpzX2J1Y2tldCA9IE5VTEwsICp0X2J1Y2tldCA9IE5VTEw7CiAJc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGg7CiAJc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZTsKQEAgLTQwOTgsMTMgKzQ2OTUsNyBAQAogCW5hbWVfdmFsdWVfbGVuID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgc3RhcnQ7IGkrKykgewogCQl4ZSA9ICZ4aC0+eGhfZW50cmllc1tpXTsKLQkJeGVfbGVuID0gT0NGUzJfWEFUVFJfU0laRSh4ZS0+eGVfbmFtZV9sZW4pOwotCQlpZiAob2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKQotCQkJeGVfbGVuICs9Ci0JCQkgICBPQ0ZTMl9YQVRUUl9TSVpFKGxlNjRfdG9fY3B1KHhlLT54ZV92YWx1ZV9zaXplKSk7Ci0JCWVsc2UKLQkJCXhlX2xlbiArPSBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7Ci0JCW5hbWVfdmFsdWVfbGVuICs9IHhlX2xlbjsKKwkJbmFtZV92YWx1ZV9sZW4gKz0gbmFtZXZhbHVlX3NpemVfeGUoeGUpOwogCQlpZiAobGUxNl90b19jcHUoeGUtPnhlX25hbWVfb2Zmc2V0KSA8IG5hbWVfb2Zmc2V0KQogCQkJbmFtZV9vZmZzZXQgPSBsZTE2X3RvX2NwdSh4ZS0+eGVfbmFtZV9vZmZzZXQpOwogCX0KQEAgLTQxMzQsMTIgKzQ3MjUsNiBAQAogCXhoLT54aF9mcmVlX3N0YXJ0ID0gY3B1X3RvX2xlMTYoT0NGUzJfWEFUVFJfQlVDS0VUX1NJWkUpOwogCWZvciAoaSA9IDA7IGkgPCBsZTE2X3RvX2NwdSh4aC0+eGhfY291bnQpOyBpKyspIHsKIAkJeGUgPSAmeGgtPnhoX2VudHJpZXNbaV07Ci0JCXhlX2xlbiA9IE9DRlMyX1hBVFRSX1NJWkUoeGUtPnhlX25hbWVfbGVuKTsKLQkJaWYgKG9jZnMyX3hhdHRyX2lzX2xvY2FsKHhlKSkKLQkJCXhlX2xlbiArPQotCQkJICAgT0NGUzJfWEFUVFJfU0laRShsZTY0X3RvX2NwdSh4ZS0+eGVfdmFsdWVfc2l6ZSkpOwotCQllbHNlCi0JCQl4ZV9sZW4gKz0gT0NGUzJfWEFUVFJfUk9PVF9TSVpFOwogCQlpZiAobGUxNl90b19jcHUoeGUtPnhlX25hbWVfb2Zmc2V0KSA8CiAJCSAgICBsZTE2X3RvX2NwdSh4aC0+eGhfZnJlZV9zdGFydCkpCiAJCQl4aC0+eGhfZnJlZV9zdGFydCA9IHhlLT54ZV9uYW1lX29mZnNldDsKQEAgLTQ3NTEsMTk1ICs1MzM2LDYgQEAKIH0KIAogLyoKLSAqIEhhbmRsZSB0aGUgbm9ybWFsIHhhdHRyIHNldCwgaW5jbHVkaW5nIHJlcGxhY2UsIGRlbGV0ZSBhbmQgbmV3LgotICoKLSAqIE5vdGU6ICJsb2NhbCIgaW5kaWNhdGVzIHRoZSByZWFsIGRhdGEncyBsb2NhbGl0eS4gU28gd2UgY2FuJ3QKLSAqIGp1c3QgaXRzIGJ1Y2tldCBsb2NhbGl0eSBieSBpdHMgbGVuZ3RoLgotICovCi1zdGF0aWMgdm9pZCBvY2ZzMl94YXR0cl9zZXRfZW50cnlfbm9ybWFsKHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCSBzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGksCi0JCQkJCSBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cywKLQkJCQkJIHUzMiBuYW1lX2hhc2gsCi0JCQkJCSBpbnQgbG9jYWwpCi17Ci0Jc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICpsYXN0LCAqeGU7Ci0JaW50IG5hbWVfbGVuID0gc3RybGVuKHhpLT5uYW1lKTsKLQlzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyICp4aCA9IHhzLT5oZWFkZXI7Ci0JdTE2IGNvdW50ID0gbGUxNl90b19jcHUoeGgtPnhoX2NvdW50KSwgc3RhcnQ7Ci0Jc2l6ZV90IGJsb2Nrc2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKLQljaGFyICp2YWw7Ci0Jc2l6ZV90IG9mZnMsIHNpemUsIG5ld19zaXplOwotCi0JbGFzdCA9ICZ4aC0+eGhfZW50cmllc1tjb3VudF07Ci0JaWYgKCF4cy0+bm90X2ZvdW5kKSB7Ci0JCXhlID0geHMtPmhlcmU7Ci0JCW9mZnMgPSBsZTE2X3RvX2NwdSh4ZS0+eGVfbmFtZV9vZmZzZXQpOwotCQlpZiAob2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKQotCQkJc2l6ZSA9IE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsKLQkJCU9DRlMyX1hBVFRSX1NJWkUobGU2NF90b19jcHUoeGUtPnhlX3ZhbHVlX3NpemUpKTsKLQkJZWxzZQotCQkJc2l6ZSA9IE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsKLQkJCU9DRlMyX1hBVFRSX1NJWkUoT0NGUzJfWEFUVFJfUk9PVF9TSVpFKTsKLQotCQkvKgotCQkgKiBJZiB0aGUgbmV3IHZhbHVlIHdpbGwgYmUgc3RvcmVkIG91dHNpZGUsIHhpLT52YWx1ZSBoYXMgYmVlbgotCQkgKiBpbml0YWxpemVkIGFzIGFuIGVtcHR5IG9jZnMyX3hhdHRyX3ZhbHVlX3Jvb3QsIGFuZCB0aGUgc2FtZQotCQkgKiBnb2VzIHdpdGggeGktPnZhbHVlX2xlbiwgc28gd2UgY2FuIHNldCBuZXdfc2l6ZSBzYWZlbHkgaGVyZS4KLQkJICogU2VlIG9jZnMyX3hhdHRyX3NldF9pbl9idWNrZXQuCi0JCSAqLwotCQluZXdfc2l6ZSA9IE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsKLQkJCSAgIE9DRlMyX1hBVFRSX1NJWkUoeGktPnZhbHVlX2xlbik7Ci0KLQkJbGUxNl9hZGRfY3B1KCZ4aC0+eGhfbmFtZV92YWx1ZV9sZW4sIC1zaXplKTsKLQkJaWYgKHhpLT52YWx1ZSkgewotCQkJaWYgKG5ld19zaXplID4gc2l6ZSkKLQkJCQlnb3RvIHNldF9uZXdfbmFtZV92YWx1ZTsKLQotCQkJLyogTm93IHJlcGxhY2UgdGhlIG9sZCB2YWx1ZSB3aXRoIG5ldyBvbmUuICovCi0JCQlpZiAobG9jYWwpCi0JCQkJeGUtPnhlX3ZhbHVlX3NpemUgPSBjcHVfdG9fbGU2NCh4aS0+dmFsdWVfbGVuKTsKLQkJCWVsc2UKLQkJCQl4ZS0+eGVfdmFsdWVfc2l6ZSA9IDA7Ci0KLQkJCXZhbCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9nZXRfdmFsKGlub2RlLAotCQkJCQkJCSB4cy0+YnVja2V0LCBvZmZzKTsKLQkJCW1lbXNldCh2YWwgKyBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSwgMCwKLQkJCSAgICAgICBzaXplIC0gT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikpOwotCQkJaWYgKE9DRlMyX1hBVFRSX1NJWkUoeGktPnZhbHVlX2xlbikgPiAwKQotCQkJCW1lbWNweSh2YWwgKyBPQ0ZTMl9YQVRUUl9TSVpFKG5hbWVfbGVuKSwKLQkJCQkgICAgICAgeGktPnZhbHVlLCB4aS0+dmFsdWVfbGVuKTsKLQotCQkJbGUxNl9hZGRfY3B1KCZ4aC0+eGhfbmFtZV92YWx1ZV9sZW4sIG5ld19zaXplKTsKLQkJCW9jZnMyX3hhdHRyX3NldF9sb2NhbCh4ZSwgbG9jYWwpOwotCQkJcmV0dXJuOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIFJlbW92ZSB0aGUgb2xkIGVudHJ5IGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUuCi0JCQkgKiBXZSBkb24ndCByZW1vdmUgdGhlIGxhc3QgZW50cnkgc28gdGhhdCB3ZSBjYW4KLQkJCSAqIHVzZSBpdCB0byBpbmRpY2F0ZSB0aGUgaGFzaCB2YWx1ZSBvZiB0aGUgZW1wdHkKLQkJCSAqIGJ1Y2tldC4KLQkJCSAqLwotCQkJbGFzdCAtPSAxOwotCQkJbGUxNl9hZGRfY3B1KCZ4aC0+eGhfY291bnQsIC0xKTsKLQkJCWlmICh4aC0+eGhfY291bnQpIHsKLQkJCQltZW1tb3ZlKHhlLCB4ZSArIDEsCi0JCQkJCSh2b2lkICopbGFzdCAtICh2b2lkICopeGUpOwotCQkJCW1lbXNldChsYXN0LCAwLAotCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSk7Ci0JCQl9IGVsc2UKLQkJCQl4aC0+eGhfZnJlZV9zdGFydCA9Ci0JCQkJCWNwdV90b19sZTE2KE9DRlMyX1hBVFRSX0JVQ0tFVF9TSVpFKTsKLQotCQkJcmV0dXJuOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogZmluZCBhIG5ldyBlbnRyeSBmb3IgaW5zZXJ0LiAqLwotCQlpbnQgbG93ID0gMCwgaGlnaCA9IGNvdW50IC0gMSwgdG1wOwotCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnRtcF94ZTsKLQotCQl3aGlsZSAobG93IDw9IGhpZ2ggJiYgY291bnQpIHsKLQkJCXRtcCA9IChsb3cgKyBoaWdoKSAvIDI7Ci0JCQl0bXBfeGUgPSAmeGgtPnhoX2VudHJpZXNbdG1wXTsKLQotCQkJaWYgKG5hbWVfaGFzaCA+IGxlMzJfdG9fY3B1KHRtcF94ZS0+eGVfbmFtZV9oYXNoKSkKLQkJCQlsb3cgPSB0bXAgKyAxOwotCQkJZWxzZSBpZiAobmFtZV9oYXNoIDwKLQkJCQkgbGUzMl90b19jcHUodG1wX3hlLT54ZV9uYW1lX2hhc2gpKQotCQkJCWhpZ2ggPSB0bXAgLSAxOwotCQkJZWxzZSB7Ci0JCQkJbG93ID0gdG1wOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQkJeGUgPSAmeGgtPnhoX2VudHJpZXNbbG93XTsKLQkJaWYgKGxvdyAhPSBjb3VudCkKLQkJCW1lbW1vdmUoeGUgKyAxLCB4ZSwgKHZvaWQgKilsYXN0IC0gKHZvaWQgKil4ZSk7Ci0KLQkJbGUxNl9hZGRfY3B1KCZ4aC0+eGhfY291bnQsIDEpOwotCQltZW1zZXQoeGUsIDAsIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpKTsKLQkJeGUtPnhlX25hbWVfaGFzaCA9IGNwdV90b19sZTMyKG5hbWVfaGFzaCk7Ci0JCXhlLT54ZV9uYW1lX2xlbiA9IG5hbWVfbGVuOwotCQlvY2ZzMl94YXR0cl9zZXRfdHlwZSh4ZSwgeGktPm5hbWVfaW5kZXgpOwotCX0KLQotc2V0X25ld19uYW1lX3ZhbHVlOgotCS8qIEluc2VydCB0aGUgbmV3IG5hbWUrdmFsdWUuICovCi0Jc2l6ZSA9IE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pICsgT0NGUzJfWEFUVFJfU0laRSh4aS0+dmFsdWVfbGVuKTsKLQotCS8qCi0JICogV2UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGUgbmFtZS92YWx1ZSBwYWlyCi0JICogZXhpc3RzIGluIHRoZSBzYW1lIGJsb2NrLgotCSAqLwotCW9mZnMgPSBsZTE2X3RvX2NwdSh4aC0+eGhfZnJlZV9zdGFydCk7Ci0Jc3RhcnQgPSBvZmZzIC0gc2l6ZTsKLQotCWlmIChzdGFydCA+PiBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0cyAhPQotCSAgICAob2ZmcyAtIDEpID4+IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSB7Ci0JCW9mZnMgPSBvZmZzIC0gb2ZmcyAlIGJsb2Nrc2l6ZTsKLQkJeGgtPnhoX2ZyZWVfc3RhcnQgPSBjcHVfdG9fbGUxNihvZmZzKTsKLQl9Ci0KLQl2YWwgPSBvY2ZzMl94YXR0cl9idWNrZXRfZ2V0X3ZhbChpbm9kZSwgeHMtPmJ1Y2tldCwgb2ZmcyAtIHNpemUpOwotCXhlLT54ZV9uYW1lX29mZnNldCA9IGNwdV90b19sZTE2KG9mZnMgLSBzaXplKTsKLQotCW1lbXNldCh2YWwsIDAsIHNpemUpOwotCW1lbWNweSh2YWwsIHhpLT5uYW1lLCBuYW1lX2xlbik7Ci0JbWVtY3B5KHZhbCArIE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pLCB4aS0+dmFsdWUsIHhpLT52YWx1ZV9sZW4pOwotCi0JeGUtPnhlX3ZhbHVlX3NpemUgPSBjcHVfdG9fbGU2NCh4aS0+dmFsdWVfbGVuKTsKLQlvY2ZzMl94YXR0cl9zZXRfbG9jYWwoeGUsIGxvY2FsKTsKLQl4cy0+aGVyZSA9IHhlOwotCWxlMTZfYWRkX2NwdSgmeGgtPnhoX2ZyZWVfc3RhcnQsIC1zaXplKTsKLQlsZTE2X2FkZF9jcHUoJnhoLT54aF9uYW1lX3ZhbHVlX2xlbiwgc2l6ZSk7Ci0KLQlyZXR1cm47Ci19Ci0KLS8qCi0gKiBTZXQgdGhlIHhhdHRyIGVudHJ5IGluIHRoZSBzcGVjaWZpZWQgYnVja2V0LgotICogVGhlIGJ1Y2tldCBpcyBpbmRpY2F0ZWQgYnkgeHMtPmJ1Y2tldCBhbmQgaXQgc2hvdWxkIGhhdmUgdGhlIGVub3VnaAotICogc3BhY2UgZm9yIHRoZSB4YXR0ciBpbnNlcnRpb24uCi0gKi8KLXN0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2V0X2VudHJ5X2luX2J1Y2tldChzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgICBoYW5kbGVfdCAqaGFuZGxlLAotCQkJCQkgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGksCi0JCQkJCSAgIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzLAotCQkJCQkgICB1MzIgbmFtZV9oYXNoLAotCQkJCQkgICBpbnQgbG9jYWwpCi17Ci0JaW50IHJldDsKLQl1NjQgYmxrbm87Ci0KLQltbG9nKDAsICJTZXQgeGF0dHIgZW50cnkgbGVuID0gJWx1IGluZGV4ID0gJWQgaW4gYnVja2V0ICVsbHVcbiIsCi0JICAgICAodW5zaWduZWQgbG9uZyl4aS0+dmFsdWVfbGVuLCB4aS0+bmFtZV9pbmRleCwKLQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYnVja2V0X2Jsa25vKHhzLT5idWNrZXQpKTsKLQotCWlmICgheHMtPmJ1Y2tldC0+YnVfYmhzWzFdKSB7Ci0JCWJsa25vID0gYnVja2V0X2Jsa25vKHhzLT5idWNrZXQpOwotCQlvY2ZzMl94YXR0cl9idWNrZXRfcmVsc2UoeHMtPmJ1Y2tldCk7Ci0JCXJldCA9IG9jZnMyX3JlYWRfeGF0dHJfYnVja2V0KHhzLT5idWNrZXQsIGJsa25vKTsKLQkJaWYgKHJldCkgewotCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfam91cm5hbF9hY2Nlc3MoaGFuZGxlLCB4cy0+YnVja2V0LAotCQkJCQkJT0NGUzJfSk9VUk5BTF9BQ0NFU1NfV1JJVEUpOwotCWlmIChyZXQgPCAwKSB7Ci0JCW1sb2dfZXJybm8ocmV0KTsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jb2NmczJfeGF0dHJfc2V0X2VudHJ5X25vcm1hbChpbm9kZSwgeGksIHhzLCBuYW1lX2hhc2gsIGxvY2FsKTsKLQlvY2ZzMl94YXR0cl9idWNrZXRfam91cm5hbF9kaXJ0eShoYW5kbGUsIHhzLT5idWNrZXQpOwotCi1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKICAqIFRydW5jYXRlIHRoZSBzcGVjaWZpZWQgeGVfb2ZmIGVudHJ5IGluIHhhdHRyIGJ1Y2tldC4KICAqIGJ1Y2tldCBpcyBpbmRpY2F0ZWQgYnkgaGVhZGVyX2JoIGFuZCBsZW4gaXMgdGhlIG5ldyBsZW5ndGguCiAgKiBCb3RoIHRoZSBvY2ZzMl94YXR0cl92YWx1ZV9yb290IGFuZCB0aGUgZW50cnkgd2lsbCBiZSB1cGRhdGVkIGhlcmUuCkBAIC01MDA5LDY2ICs1NDA1LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG9jZnMyX3hhdHRyX2J1Y2tldF92YWx1ZV90cnVuY2F0ZV94cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cywKLQkJCQkJaW50IGxlbiwKLQkJCQkJc3RydWN0IG9jZnMyX3hhdHRyX3NldF9jdHh0ICpjdHh0KQotewotCWludCByZXQsIG9mZnNldDsKLQlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlID0geHMtPmhlcmU7Ci0Jc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqeGggPSAoc3RydWN0IG9jZnMyX3hhdHRyX2hlYWRlciAqKXhzLT5iYXNlOwotCi0JQlVHX09OKCF4cy0+YnVja2V0LT5idV9iaHNbMF0gfHwgIXhlIHx8IG9jZnMyX3hhdHRyX2lzX2xvY2FsKHhlKSk7Ci0KLQlvZmZzZXQgPSB4ZSAtIHhoLT54aF9lbnRyaWVzOwotCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF92YWx1ZV90cnVuY2F0ZShpbm9kZSwgeHMtPmJ1Y2tldCwKLQkJCQkJCW9mZnNldCwgbGVuLCBjdHh0KTsKLQlpZiAocmV0KQotCQltbG9nX2Vycm5vKHJldCk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IG9jZnMyX3hhdHRyX2J1Y2tldF9zZXRfdmFsdWVfb3V0c2lkZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkJaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzLAotCQkJCQkJY2hhciAqdmFsLAotCQkJCQkJaW50IHZhbHVlX2xlbikKLXsKLQlpbnQgcmV0LCBvZmZzZXQsIGJsb2NrX29mZjsKLQlzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqeHY7Ci0Jc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5ICp4ZSA9IHhzLT5oZXJlOwotCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoID0gYnVja2V0X3hoKHhzLT5idWNrZXQpOwotCXZvaWQgKmJhc2U7Ci0Jc3RydWN0IG9jZnMyX3hhdHRyX3ZhbHVlX2J1ZiB2YiA9IHsKLQkJLnZiX2FjY2VzcyA9IG9jZnMyX2pvdXJuYWxfYWNjZXNzLAotCX07Ci0KLQlCVUdfT04oIXhzLT5iYXNlIHx8ICF4ZSB8fCBvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpOwotCi0JcmV0ID0gb2NmczJfeGF0dHJfYnVja2V0X2dldF9uYW1lX3ZhbHVlKGlub2RlLT5pX3NiLCB4aCwKLQkJCQkJCXhlIC0geGgtPnhoX2VudHJpZXMsCi0JCQkJCQkmYmxvY2tfb2ZmLAotCQkJCQkJJm9mZnNldCk7Ci0JaWYgKHJldCkgewotCQltbG9nX2Vycm5vKHJldCk7Ci0JCWdvdG8gb3V0OwotCX0KLQotCWJhc2UgPSBidWNrZXRfYmxvY2soeHMtPmJ1Y2tldCwgYmxvY2tfb2ZmKTsKLQl4diA9IChzdHJ1Y3Qgb2NmczJfeGF0dHJfdmFsdWVfcm9vdCAqKShiYXNlICsgb2Zmc2V0ICsKLQkJIE9DRlMyX1hBVFRSX1NJWkUoeGUtPnhlX25hbWVfbGVuKSk7Ci0KLQl2Yi52Yl94diA9IHh2OwotCXZiLnZiX2JoID0geHMtPmJ1Y2tldC0+YnVfYmhzW2Jsb2NrX29mZl07Ci0JcmV0ID0gX19vY2ZzMl94YXR0cl9zZXRfdmFsdWVfb3V0c2lkZShpbm9kZSwgaGFuZGxlLAotCQkJCQkgICAgICAmdmIsIHZhbCwgdmFsdWVfbGVuKTsKLQlpZiAocmV0KQotCQltbG9nX2Vycm5vKHJldCk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQogc3RhdGljIGludCBvY2ZzMl9ybV94YXR0cl9jbHVzdGVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJvb3RfYmgsCiAJCQkJICB1NjQgYmxrbm8sCkBAIC01MTY3LDEyOCArNTUwMyw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgb2NmczJfeGF0dHJfYnVja2V0X3JlbW92ZV94cyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgaGFuZGxlX3QgKmhhbmRsZSwKLQkJCQkJIHN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzKQotewotCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoID0gYnVja2V0X3hoKHhzLT5idWNrZXQpOwotCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqbGFzdCA9ICZ4aC0+eGhfZW50cmllc1sKLQkJCQkJCWxlMTZfdG9fY3B1KHhoLT54aF9jb3VudCkgLSAxXTsKLQlpbnQgcmV0ID0gMDsKLQotCXJldCA9IG9jZnMyX3hhdHRyX2J1Y2tldF9qb3VybmFsX2FjY2VzcyhoYW5kbGUsIHhzLT5idWNrZXQsCi0JCQkJCQlPQ0ZTMl9KT1VSTkFMX0FDQ0VTU19XUklURSk7Ci0JaWYgKHJldCkgewotCQltbG9nX2Vycm5vKHJldCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiBSZW1vdmUgdGhlIG9sZCBlbnRyeS4gKi8KLQltZW1tb3ZlKHhzLT5oZXJlLCB4cy0+aGVyZSArIDEsCi0JCSh2b2lkICopbGFzdCAtICh2b2lkICopeHMtPmhlcmUpOwotCW1lbXNldChsYXN0LCAwLCBzaXplb2Yoc3RydWN0IG9jZnMyX3hhdHRyX2VudHJ5KSk7Ci0JbGUxNl9hZGRfY3B1KCZ4aC0+eGhfY291bnQsIC0xKTsKLQotCW9jZnMyX3hhdHRyX2J1Y2tldF9qb3VybmFsX2RpcnR5KGhhbmRsZSwgeHMtPmJ1Y2tldCk7Ci19Ci0KLS8qCi0gKiBTZXQgdGhlIHhhdHRyIG5hbWUvdmFsdWUgaW4gdGhlIGJ1Y2tldCBzcGVjaWZpZWQgaW4geHMuCi0gKgotICogQXMgdGhlIG5ldyB2YWx1ZSBpbiB4aSBtYXkgYmUgc3RvcmVkIGluIHRoZSBidWNrZXQgb3IgaW4gYW4gb3V0c2lkZSBjbHVzdGVyLAotICogd2UgZGl2aWRlIHRoZSB3aG9sZSBwcm9jZXNzIGludG8gMyBzdGVwczoKLSAqIDEuIGluc2VydCBuYW1lL3ZhbHVlIGluIHRoZSBidWNrZXQob2NmczJfeGF0dHJfc2V0X2VudHJ5X2luX2J1Y2tldCkKLSAqIDIuIHRydW5jYXRlIG9mIHRoZSBvdXRzaWRlIGNsdXN0ZXIob2NmczJfeGF0dHJfYnVja2V0X3ZhbHVlX3RydW5jYXRlX3hzKQotICogMy4gU2V0IHRoZSB2YWx1ZSB0byB0aGUgb3V0c2lkZSBjbHVzdGVyKG9jZnMyX3hhdHRyX2J1Y2tldF9zZXRfdmFsdWVfb3V0c2lkZSkKLSAqIDQuIElmIHRoZSBjbHVzdGVycyBmb3IgdGhlIG5ldyBvdXRzaWRlIHZhbHVlIGNhbid0IGJlIGFsbG9jYXRlZCwgd2UgbmVlZAotICogICAgdG8gZnJlZSB0aGUgeGF0dHIgd2UgYWxsb2NhdGVkIGluIHNldC4KLSAqLwotc3RhdGljIGludCBvY2ZzMl94YXR0cl9zZXRfaW5fYnVja2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGksCi0JCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfc2VhcmNoICp4cywKLQkJCQkgICAgIHN0cnVjdCBvY2ZzMl94YXR0cl9zZXRfY3R4dCAqY3R4dCkKLXsKLQlpbnQgcmV0LCBsb2NhbCA9IDE7Ci0Jc2l6ZV90IHZhbHVlX2xlbjsKLQljaGFyICp2YWwgPSAoY2hhciAqKXhpLT52YWx1ZTsKLQlzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkgKnhlID0geHMtPmhlcmU7Ci0JdTMyIG5hbWVfaGFzaCA9IG9jZnMyX3hhdHRyX25hbWVfaGFzaChpbm9kZSwgeGktPm5hbWUsCi0JCQkJCSAgICAgIHN0cmxlbih4aS0+bmFtZSkpOwotCi0JaWYgKCF4cy0+bm90X2ZvdW5kICYmICFvY2ZzMl94YXR0cl9pc19sb2NhbCh4ZSkpIHsKLQkJLyoKLQkJICogV2UgbmVlZCB0byB0cnVuY2F0ZSB0aGUgeGF0dHIgc3RvcmFnZSBmaXJzdC4KLQkJICoKLQkJICogSWYgYm90aCB0aGUgb2xkIGFuZCBuZXcgdmFsdWUgYXJlIHN0b3JlZCB0bwotCQkgKiBvdXRzaWRlIGJsb2NrLCB3ZSBvbmx5IG5lZWQgdG8gdHJ1bmNhdGUKLQkJICogdGhlIHN0b3JhZ2UgYW5kIHRoZW4gc2V0IHRoZSB2YWx1ZSBvdXRzaWRlLgotCQkgKgotCQkgKiBJZiB0aGUgbmV3IHZhbHVlIHNob3VsZCBiZSBzdG9yZWQgd2l0aGluIGJsb2NrLAotCQkgKiB3ZSBzaG91bGQgZnJlZSBhbGwgdGhlIG91dHNpZGUgYmxvY2sgZmlyc3QgYW5kCi0JCSAqIHRoZSBtb2RpZmljYXRpb24gdG8gdGhlIHhhdHRyIGJsb2NrIHdpbGwgYmUgZG9uZQotCQkgKiBieSBmb2xsb3dpbmcgc3RlcHMuCi0JCSAqLwotCQlpZiAoeGktPnZhbHVlX2xlbiA+IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKQotCQkJdmFsdWVfbGVuID0geGktPnZhbHVlX2xlbjsKLQkJZWxzZQotCQkJdmFsdWVfbGVuID0gMDsKLQotCQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfdmFsdWVfdHJ1bmNhdGVfeHMoaW5vZGUsIHhzLAotCQkJCQkJCSAgIHZhbHVlX2xlbiwKLQkJCQkJCQkgICBjdHh0KTsKLQkJaWYgKHJldCkKLQkJCWdvdG8gb3V0OwotCi0JCWlmICh2YWx1ZV9sZW4pCi0JCQlnb3RvIHNldF92YWx1ZV9vdXRzaWRlOwotCX0KLQotCXZhbHVlX2xlbiA9IHhpLT52YWx1ZV9sZW47Ci0JLyogU28gd2UgaGF2ZSB0byBoYW5kbGUgdGhlIGluc2lkZSBibG9jayBjaGFuZ2Ugbm93LiAqLwotCWlmICh2YWx1ZV9sZW4gPiBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgewotCQkvKgotCQkgKiBJZiB0aGUgbmV3IHZhbHVlIHdpbGwgYmUgc3RvcmVkIG91dHNpZGUgb2YgYmxvY2ssCi0JCSAqIGluaXRhbGl6ZSBhIG5ldyBlbXB0eSB2YWx1ZSByb290IGFuZCBpbnNlcnQgaXQgZmlyc3QuCi0JCSAqLwotCQlsb2NhbCA9IDA7Ci0JCXhpLT52YWx1ZSA9ICZkZWZfeHY7Ci0JCXhpLT52YWx1ZV9sZW4gPSBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7Ci0JfQotCi0JcmV0ID0gb2NmczJfeGF0dHJfc2V0X2VudHJ5X2luX2J1Y2tldChpbm9kZSwgY3R4dC0+aGFuZGxlLCB4aSwgeHMsCi0JCQkJCSAgICAgIG5hbWVfaGFzaCwgbG9jYWwpOwotCWlmIChyZXQpIHsKLQkJbWxvZ19lcnJubyhyZXQpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAodmFsdWVfbGVuIDw9IE9DRlMyX1hBVFRSX0lOTElORV9TSVpFKQotCQlnb3RvIG91dDsKLQotCS8qIGFsbG9jYXRlIHRoZSBzcGFjZSBub3cgZm9yIHRoZSBvdXRzaWRlIGJsb2NrIHN0b3JhZ2UuICovCi0JcmV0ID0gb2NmczJfeGF0dHJfYnVja2V0X3ZhbHVlX3RydW5jYXRlX3hzKGlub2RlLCB4cywKLQkJCQkJCSAgIHZhbHVlX2xlbiwgY3R4dCk7Ci0JaWYgKHJldCkgewotCQltbG9nX2Vycm5vKHJldCk7Ci0KLQkJaWYgKHhzLT5ub3RfZm91bmQpIHsKLQkJCS8qCi0JCQkgKiBXZSBjYW4ndCBhbGxvY2F0ZSBlbm91Z2ggY2x1c3RlcnMgZm9yIG91dHNpZGUKLQkJCSAqIHN0b3JhZ2UgYW5kIHdlIGhhdmUgYWxsb2NhdGVkIHhhdHRyIGFscmVhZHksCi0JCQkgKiBzbyBuZWVkIHRvIHJlbW92ZSBpdC4KLQkJCSAqLwotCQkJb2NmczJfeGF0dHJfYnVja2V0X3JlbW92ZV94cyhpbm9kZSwgY3R4dC0+aGFuZGxlLCB4cyk7Ci0JCX0KLQkJZ290byBvdXQ7Ci0JfQotCi1zZXRfdmFsdWVfb3V0c2lkZToKLQlyZXQgPSBvY2ZzMl94YXR0cl9idWNrZXRfc2V0X3ZhbHVlX291dHNpZGUoaW5vZGUsIGN0eHQtPmhhbmRsZSwKLQkJCQkJCSAgIHhzLCB2YWwsIHZhbHVlX2xlbik7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQogLyoKICAqIGNoZWNrIHdoZXRoZXIgdGhlIHhhdHRyIGJ1Y2tldCBpcyBmaWxsZWQgdXAgd2l0aCB0aGUgc2FtZSBoYXNoIHZhbHVlLgogICogSWYgd2Ugd2FudCB0byBpbnNlcnQgdGhlIHhhdHRyIHdpdGggdGhlIHNhbWUgaGFzaCwgcmV0dXJuIC1FTk9TUEMuCkBAIC01MzE3LDE1NiArNTUzMSwxMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFRyeSB0byBzZXQgdGhlIGVudHJ5IGluIHRoZSBjdXJyZW50IGJ1Y2tldC4gIElmIHdlIGZhaWwsIHRoZSBjYWxsZXIKKyAqIHdpbGwgaGFuZGxlIGdldHRpbmcgdXMgYW5vdGhlciBidWNrZXQuCisgKi8KK3N0YXRpYyBpbnQgb2NmczJfeGF0dHJfc2V0X2VudHJ5X2J1Y2tldChzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGksCisJCQkJCXN0cnVjdCBvY2ZzMl94YXR0cl9zZWFyY2ggKnhzLAorCQkJCQlzdHJ1Y3Qgb2NmczJfeGF0dHJfc2V0X2N0eHQgKmN0eHQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgb2NmczJfeGFfbG9jIGxvYzsKKworCW1sb2dfZW50cnkoIlNldCB4YXR0ciAlcyBpbiB4YXR0ciBidWNrZXRcbiIsIHhpLT54aV9uYW1lKTsKKworCW9jZnMyX2luaXRfeGF0dHJfYnVja2V0X3hhX2xvYygmbG9jLCB4cy0+YnVja2V0LAorCQkJCSAgICAgICB4cy0+bm90X2ZvdW5kID8gTlVMTCA6IHhzLT5oZXJlKTsKKwlyZXQgPSBvY2ZzMl94YV9zZXQoJmxvYywgeGksIGN0eHQpOworCWlmICghcmV0KSB7CisJCXhzLT5oZXJlID0gbG9jLnhsX2VudHJ5OworCQlnb3RvIG91dDsKKwl9CisJaWYgKHJldCAhPSAtRU5PU1BDKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CisJfQorCisJLyogT2ssIHdlIG5lZWQgc3BhY2UuICBMZXQncyB0cnkgZGVmcmFnbWVudGluZyB0aGUgYnVja2V0LiAqLworCXJldCA9IG9jZnMyX2RlZnJhZ194YXR0cl9idWNrZXQoaW5vZGUsIGN0eHQtPmhhbmRsZSwKKwkJCQkJeHMtPmJ1Y2tldCk7CisJaWYgKHJldCkgeworCQltbG9nX2Vycm5vKHJldCk7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IG9jZnMyX3hhX3NldCgmbG9jLCB4aSwgY3R4dCk7CisJaWYgKCFyZXQpIHsKKwkJeHMtPmhlcmUgPSBsb2MueGxfZW50cnk7CisJCWdvdG8gb3V0OworCX0KKwlpZiAocmV0ICE9IC1FTk9TUEMpCisJCW1sb2dfZXJybm8ocmV0KTsKKworCitvdXQ6CisJbWxvZ19leGl0KHJldCk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBvY2ZzMl94YXR0cl9zZXRfZW50cnlfaW5kZXhfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJICAgICBzdHJ1Y3Qgb2NmczJfeGF0dHJfaW5mbyAqeGksCiAJCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NlYXJjaCAqeHMsCiAJCQkJCSAgICAgc3RydWN0IG9jZnMyX3hhdHRyX3NldF9jdHh0ICpjdHh0KQogewotCXN0cnVjdCBvY2ZzMl94YXR0cl9oZWFkZXIgKnhoOwotCXN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSAqeGU7Ci0JdTE2IGNvdW50LCBoZWFkZXJfc2l6ZSwgeGhfZnJlZV9zdGFydDsKLQlpbnQgZnJlZSwgbWF4X2ZyZWUsIG5lZWQsIG9sZDsKLQlzaXplX3QgdmFsdWVfc2l6ZSA9IDAsIG5hbWVfbGVuID0gc3RybGVuKHhpLT5uYW1lKTsKLQlzaXplX3QgYmxvY2tzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOwotCWludCByZXQsIGFsbG9jYXRpb24gPSAwOworCWludCByZXQ7CiAKLQltbG9nX2VudHJ5KCJTZXQgeGF0dHIgJXMgaW4geGF0dHIgaW5kZXggYmxvY2tcbiIsIHhpLT5uYW1lKTsKKwltbG9nX2VudHJ5KCJTZXQgeGF0dHIgJXMgaW4geGF0dHIgaW5kZXggYmxvY2tcbiIsIHhpLT54aV9uYW1lKTsKIAotdHJ5X2FnYWluOgotCXhoID0geHMtPmhlYWRlcjsKLQljb3VudCA9IGxlMTZfdG9fY3B1KHhoLT54aF9jb3VudCk7Ci0JeGhfZnJlZV9zdGFydCA9IGxlMTZfdG9fY3B1KHhoLT54aF9mcmVlX3N0YXJ0KTsKLQloZWFkZXJfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfaGVhZGVyKSArCi0JCQljb3VudCAqIHNpemVvZihzdHJ1Y3Qgb2NmczJfeGF0dHJfZW50cnkpOwotCW1heF9mcmVlID0gT0NGUzJfWEFUVFJfQlVDS0VUX1NJWkUgLSBoZWFkZXJfc2l6ZSAtCi0JCWxlMTZfdG9fY3B1KHhoLT54aF9uYW1lX3ZhbHVlX2xlbikgLSBPQ0ZTMl9YQVRUUl9IRUFERVJfR0FQOwotCi0JbWxvZ19idWdfb25fbXNnKGhlYWRlcl9zaXplID4gYmxvY2tzaXplLCAiYnVja2V0ICVsbHUgaGFzIGhlYWRlciBzaXplICIKLQkJCSJvZiAldSB3aGljaCBleGNlZWQgYmxvY2sgc2l6ZVxuIiwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYnVja2V0X2Jsa25vKHhzLT5idWNrZXQpLAotCQkJaGVhZGVyX3NpemUpOwotCi0JaWYgKHhpLT52YWx1ZSAmJiB4aS0+dmFsdWVfbGVuID4gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpCi0JCXZhbHVlX3NpemUgPSBPQ0ZTMl9YQVRUUl9ST09UX1NJWkU7Ci0JZWxzZSBpZiAoeGktPnZhbHVlKQotCQl2YWx1ZV9zaXplID0gT0NGUzJfWEFUVFJfU0laRSh4aS0+dmFsdWVfbGVuKTsKLQotCWlmICh4cy0+bm90X2ZvdW5kKQotCQluZWVkID0gc2l6ZW9mKHN0cnVjdCBvY2ZzMl94YXR0cl9lbnRyeSkgKwotCQkJT0NGUzJfWEFUVFJfU0laRShuYW1lX2xlbikgKyB2YWx1ZV9zaXplOwotCWVsc2UgewotCQluZWVkID0gdmFsdWVfc2l6ZSArIE9DRlMyX1hBVFRSX1NJWkUobmFtZV9sZW4pOwotCi0JCS8qCi0JCSAqIFdlIG9ubHkgcmVwbGFjZSB0aGUgb2xkIHZhbHVlIGlmIHRoZSBuZXcgbGVuZ3RoIGlzIHNtYWxsZXIKLQkJICogdGhhbiB0aGUgb2xkIG9uZS4gT3RoZXJ3aXNlIHdlIHdpbGwgYWxsb2NhdGUgbmV3IHNwYWNlIGluIHRoZQotCQkgKiBidWNrZXQgdG8gc3RvcmUgaXQuCi0JCSAqLwotCQl4ZSA9IHhzLT5oZXJlOwotCQlpZiAob2NmczJfeGF0dHJfaXNfbG9jYWwoeGUpKQotCQkJb2xkID0gT0NGUzJfWEFUVFJfU0laRShsZTY0X3RvX2NwdSh4ZS0+eGVfdmFsdWVfc2l6ZSkpOwotCQllbHNlCi0JCQlvbGQgPSBPQ0ZTMl9YQVRUUl9TSVpFKE9DRlMyX1hBVFRSX1JPT1RfU0laRSk7Ci0KLQkJaWYgKG9sZCA+PSB2YWx1ZV9zaXplKQotCQkJbmVlZCA9IDA7CisJcmV0ID0gb2NmczJfeGF0dHJfc2V0X2VudHJ5X2J1Y2tldChpbm9kZSwgeGksIHhzLCBjdHh0KTsKKwlpZiAoIXJldCkKKwkJZ290byBvdXQ7CisJaWYgKHJldCAhPSAtRU5PU1BDKSB7CisJCW1sb2dfZXJybm8ocmV0KTsKKwkJZ290byBvdXQ7CiAJfQogCi0JZnJlZSA9IHhoX2ZyZWVfc3RhcnQgLSBoZWFkZXJfc2l6ZSAtIE9DRlMyX1hBVFRSX0hFQURFUl9HQVA7CisJLyogQWNrLCBuZWVkIG1vcmUgc3BhY2UuICBMZXQncyB0cnkgdG8gZ2V0IGFub3RoZXIgYnVja2V0ISAqLworCiAJLyoKLQkgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbmV3IG5hbWUvdmFsdWUgcGFpcgotCSAqIGNhbiBleGlzdCBpbiB0aGUgc2FtZSBibG9jay4KKwkgKiBXZSBkbyBub3QgYWxsb3cgZm9yIG92ZXJsYXBwaW5nIHJhbmdlcyBiZXR3ZWVuIGJ1Y2tldHMuIEFuZAorCSAqIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb2xsaXNpb25zIHdlIHdpbGwgYWxsb3cgZm9yIHRoZW4gaXMKKwkgKiBvbmUgYnVja2V0J3Mgd29ydGgsIHNvIGNoZWNrIGl0IGhlcmUgd2hldGhlciB3ZSBuZWVkIHRvCisJICogYWRkIGEgbmV3IGJ1Y2tldCBmb3IgdGhlIGluc2VydC4KIAkgKi8KLQlpZiAoeGhfZnJlZV9zdGFydCAlIGJsb2Nrc2l6ZSA8IG5lZWQpCi0JCWZyZWUgLT0geGhfZnJlZV9zdGFydCAlIGJsb2Nrc2l6ZTsKLQotCW1sb2coMCwgInhzLT5ub3RfZm91bmQgPSAlZCwgaW4geGF0dHIgYnVja2V0ICVsbHU6IGZyZWUgPSAlZCwgIgotCSAgICAgIm5lZWQgPSAlZCwgbWF4X2ZyZWUgPSAlZCwgeGhfZnJlZV9zdGFydCA9ICV1LCB4aF9uYW1lX3ZhbHVlX2xlbiA9IgotCSAgICAgIiAldVxuIiwgeHMtPm5vdF9mb3VuZCwKLQkgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpYnVja2V0X2Jsa25vKHhzLT5idWNrZXQpLAotCSAgICAgZnJlZSwgbmVlZCwgbWF4X2ZyZWUsIGxlMTZfdG9fY3B1KHhoLT54aF9mcmVlX3N0YXJ0KSwKLQkgICAgIGxlMTZfdG9fY3B1KHhoLT54aF9uYW1lX3ZhbHVlX2xlbikpOwotCi0JaWYgKGZyZWUgPCBuZWVkIHx8Ci0JICAgICh4cy0+bm90X2ZvdW5kICYmCi0JICAgICBjb3VudCA9PSBvY2ZzMl94YXR0cl9tYXhfeGVfaW5fYnVja2V0KGlub2RlLT5pX3NiKSkpIHsKLQkJaWYgKG5lZWQgPD0gbWF4X2ZyZWUgJiYKLQkJICAgIGNvdW50IDwgb2NmczJfeGF0dHJfbWF4X3hlX2luX2J1Y2tldChpbm9kZS0+aV9zYikpIHsKLQkJCS8qCi0JCQkgKiBXZSBjYW4gY3JlYXRlIHRoZSBzcGFjZSBieSBkZWZyYWdtZW50LiBTaW5jZSBvbmx5IHRoZQotCQkJICogbmFtZS92YWx1ZSB3aWxsIGJlIG1vdmVkLCB0aGUgeGUgc2hvdWxkbid0IGJlIGNoYW5nZWQKLQkJCSAqIGluIHhzLgotCQkJICovCi0JCQlyZXQgPSBvY2ZzMl9kZWZyYWdfeGF0dHJfYnVja2V0KGlub2RlLCBjdHh0LT5oYW5kbGUsCi0JCQkJCQkJeHMtPmJ1Y2tldCk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCi0JCQl4aF9mcmVlX3N0YXJ0ID0gbGUxNl90b19jcHUoeGgtPnhoX2ZyZWVfc3RhcnQpOwotCQkJZnJlZSA9IHhoX2ZyZWVfc3RhcnQgLSBoZWFkZXJfc2l6ZQotCQkJCS0gT0NGUzJfWEFUVFJfSEVBREVSX0dBUDsKLQkJCWlmICh4aF9mcmVlX3N0YXJ0ICUgYmxvY2tzaXplIDwgbmVlZCkKLQkJCQlmcmVlIC09IHhoX2ZyZWVfc3RhcnQgJSBibG9ja3NpemU7Ci0KLQkJCWlmIChmcmVlID49IG5lZWQpCi0JCQkJZ290byB4YXR0cl9zZXQ7Ci0KLQkJCW1sb2coMCwgIkNhbid0IGdldCBlbm91Z2ggc3BhY2UgZm9yIHhhdHRyIGluc2VydCBieSAiCi0JCQkgICAgICJkZWZyYWdtZW50LiBOZWVkICV1IGJ5dGVzLCBidXQgd2UgaGF2ZSAlZCwgc28gIgotCQkJICAgICAiYWxsb2NhdGUgbmV3IGJ1Y2tldCBmb3IgaXQuXG4iLCBuZWVkLCBmcmVlKTsKLQkJfQotCi0JCS8qCi0JCSAqIFdlIGhhdmUgdG8gYWRkIG5ldyBidWNrZXRzIG9yIGNsdXN0ZXJzIGFuZCBvbmUKLQkJICogYWxsb2NhdGlvbiBzaG91bGQgbGVhdmUgdXMgZW5vdWdoIHNwYWNlIGZvciBpbnNlcnQuCi0JCSAqLwotCQlCVUdfT04oYWxsb2NhdGlvbik7Ci0KLQkJLyoKLQkJICogV2UgZG8gbm90IGFsbG93IGZvciBvdmVybGFwcGluZyByYW5nZXMgYmV0d2VlbiBidWNrZXRzLiBBbmQKLQkJICogdGhlIG1heGltdW0gbnVtYmVyIG9mIGNvbGxpc2lvbnMgd2Ugd2lsbCBhbGxvdyBmb3IgdGhlbiBpcwotCQkgKiBvbmUgYnVja2V0J3Mgd29ydGgsIHNvIGNoZWNrIGl0IGhlcmUgd2hldGhlciB3ZSBuZWVkIHRvCi0JCSAqIGFkZCBhIG5ldyBidWNrZXQgZm9yIHRoZSBpbnNlcnQuCi0JCSAqLwotCQlyZXQgPSBvY2ZzMl9jaGVja194YXR0cl9idWNrZXRfY29sbGlzaW9uKGlub2RlLAotCQkJCQkJCSB4cy0+YnVja2V0LAotCQkJCQkJCSB4aS0+bmFtZSk7Ci0JCWlmIChyZXQpIHsKLQkJCW1sb2dfZXJybm8ocmV0KTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0KLQkJcmV0ID0gb2NmczJfYWRkX25ld194YXR0cl9idWNrZXQoaW5vZGUsCi0JCQkJCQkgeHMtPnhhdHRyX2JoLAorCXJldCA9IG9jZnMyX2NoZWNrX3hhdHRyX2J1Y2tldF9jb2xsaXNpb24oaW5vZGUsCiAJCQkJCQkgeHMtPmJ1Y2tldCwKLQkJCQkJCSBjdHh0KTsKLQkJaWYgKHJldCkgewotCQkJbWxvZ19lcnJubyhyZXQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQkvKgotCQkgKiBvY2ZzMl9hZGRfbmV3X3hhdHRyX2J1Y2tldCgpIHdpbGwgaGF2ZSB1cGRhdGVkCi0JCSAqIHhzLT5idWNrZXQgaWYgaXQgbW92ZWQsIGJ1dCBpdCB3aWxsIG5vdCBoYXZlIHVwZGF0ZWQKLQkJICogYW55IG9mIHRoZSBvdGhlciBzZWFyY2ggZmllbGRzLiAgVGh1cywgd2UgZHJvcCBpdCBhbmQKLQkJICogcmUtc2VhcmNoLiAgRXZlcnl0aGluZyBzaG91bGQgYmUgY2FjaGVkLCBzbyBpdCdsbCBiZQotCQkgKiBxdWljay4KLQkJICovCi0JCW9jZnMyX3hhdHRyX2J1Y2tldF9yZWxzZSh4cy0+YnVja2V0KTsKLQkJcmV0ID0gb2NmczJfeGF0dHJfaW5kZXhfYmxvY2tfZmluZChpbm9kZSwgeHMtPnhhdHRyX2JoLAotCQkJCQkJICAgeGktPm5hbWVfaW5kZXgsCi0JCQkJCQkgICB4aS0+bmFtZSwgeHMpOwotCQlpZiAocmV0ICYmIHJldCAhPSAtRU5PREFUQSkKLQkJCWdvdG8gb3V0OwotCQl4cy0+bm90X2ZvdW5kID0gcmV0OwotCQlhbGxvY2F0aW9uID0gMTsKLQkJZ290byB0cnlfYWdhaW47CisJCQkJCQkgeGktPnhpX25hbWUpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKIAl9CiAKLXhhdHRyX3NldDoKLQlyZXQgPSBvY2ZzMl94YXR0cl9zZXRfaW5fYnVja2V0KGlub2RlLCB4aSwgeHMsIGN0eHQpOworCXJldCA9IG9jZnMyX2FkZF9uZXdfeGF0dHJfYnVja2V0KGlub2RlLAorCQkJCQkgeHMtPnhhdHRyX2JoLAorCQkJCQkgeHMtPmJ1Y2tldCwKKwkJCQkJIGN0eHQpOworCWlmIChyZXQpIHsKKwkJbWxvZ19lcnJubyhyZXQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIG9jZnMyX2FkZF9uZXdfeGF0dHJfYnVja2V0KCkgd2lsbCBoYXZlIHVwZGF0ZWQKKwkgKiB4cy0+YnVja2V0IGlmIGl0IG1vdmVkLCBidXQgaXQgd2lsbCBub3QgaGF2ZSB1cGRhdGVkCisJICogYW55IG9mIHRoZSBvdGhlciBzZWFyY2ggZmllbGRzLiAgVGh1cywgd2UgZHJvcCBpdCBhbmQKKwkgKiByZS1zZWFyY2guICBFdmVyeXRoaW5nIHNob3VsZCBiZSBjYWNoZWQsIHNvIGl0J2xsIGJlCisJICogcXVpY2suCisJICovCisJb2NmczJfeGF0dHJfYnVja2V0X3JlbHNlKHhzLT5idWNrZXQpOworCXJldCA9IG9jZnMyX3hhdHRyX2luZGV4X2Jsb2NrX2ZpbmQoaW5vZGUsIHhzLT54YXR0cl9iaCwKKwkJCQkJICAgeGktPnhpX25hbWVfaW5kZXgsCisJCQkJCSAgIHhpLT54aV9uYW1lLCB4cyk7CisJaWYgKHJldCAmJiByZXQgIT0gLUVOT0RBVEEpCisJCWdvdG8gb3V0OworCXhzLT5ub3RfZm91bmQgPSByZXQ7CisKKwkvKiBPaywgd2UgaGF2ZSBhIG5ldyBidWNrZXQsIGxldCdzIHRyeSBhZ2FpbiAqLworCXJldCA9IG9jZnMyX3hhdHRyX3NldF9lbnRyeV9idWNrZXQoaW5vZGUsIHhpLCB4cywgY3R4dCk7CisJaWYgKHJldCAmJiAocmV0ICE9IC1FTk9TUEMpKQorCQltbG9nX2Vycm5vKHJldCk7CisKIG91dDoKIAltbG9nX2V4aXQocmV0KTsKIAlyZXR1cm4gcmV0OwpAQCAtNTY3OCw3ICs1ODUyLDcgQEAKIAkgKiByZWZjb3VudCB0cmVlLCBhbmQgbWFrZSB0aGUgb3JpZ2luYWwgZXh0ZW50IGJlY29tZSAzLiBTbyB3ZSB3aWxsIG5lZWQKIAkgKiAyICogY2x1c3RlciBtb3JlIGV4dGVudCByZWNzIGF0IG1vc3QuCiAJICovCi0JaWYgKCF4aS0+dmFsdWUgfHwgeGktPnZhbHVlX2xlbiA8PSBPQ0ZTMl9YQVRUUl9JTkxJTkVfU0laRSkgeworCWlmICgheGktPnhpX3ZhbHVlIHx8IHhpLT54aV92YWx1ZV9sZW4gPD0gT0NGUzJfWEFUVFJfSU5MSU5FX1NJWkUpIHsKIAogCQlyZXQgPSBvY2ZzMl9yZWZjb3VudGVkX3hhdHRyX2RlbGV0ZV9uZWVkKGlub2RlLAogCQkJCQkJCSAmKCpyZWZfdHJlZSktPnJmX2NpLApAQCAtNjM1NCw5ICs2NTI4LDExIEBACiAJCQkJCSAgaW50IGluZGV4ZWQpCiB7CiAJaW50IHJldDsKLQloYW5kbGVfdCAqaGFuZGxlOwogCXN0cnVjdCBvY2ZzMl9hbGxvY19jb250ZXh0ICptZXRhX2FjOwogCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOworCXN0cnVjdCBvY2ZzMl94YXR0cl9zZXRfY3R4dCBjdHh0ID0geworCQkubWV0YV9hYyA9IG1ldGFfYWMsCisJfTsKIAogCXJldCA9IG9jZnMyX3Jlc2VydmVfbmV3X21ldGFkYXRhX2Jsb2Nrcyhvc2IsIDEsICZtZXRhX2FjKTsKIAlpZiAocmV0IDwgMCkgewpAQCAtNjM2NCwyMSArNjU0MCwyMSBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWhhbmRsZSA9IG9jZnMyX3N0YXJ0X3RyYW5zKG9zYiwgT0NGUzJfWEFUVFJfQkxPQ0tfQ1JFQVRFX0NSRURJVFMpOwotCWlmIChJU19FUlIoaGFuZGxlKSkgewotCQlyZXQgPSBQVFJfRVJSKGhhbmRsZSk7CisJY3R4dC5oYW5kbGUgPSBvY2ZzMl9zdGFydF90cmFucyhvc2IsIE9DRlMyX1hBVFRSX0JMT0NLX0NSRUFURV9DUkVESVRTKTsKKwlpZiAoSVNfRVJSKGN0eHQuaGFuZGxlKSkgeworCQlyZXQgPSBQVFJfRVJSKGN0eHQuaGFuZGxlKTsKIAkJbWxvZ19lcnJubyhyZXQpOwogCQlnb3RvIG91dDsKIAl9CiAKIAltbG9nKDAsICJjcmVhdGUgbmV3IHhhdHRyIGJsb2NrIGZvciBpbm9kZSAlbGx1LCBpbmRleCA9ICVkXG4iLAogCSAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylmZV9iaC0+Yl9ibG9ja25yLCBpbmRleGVkKTsKLQlyZXQgPSBvY2ZzMl9jcmVhdGVfeGF0dHJfYmxvY2soaGFuZGxlLCBpbm9kZSwgZmVfYmgsCi0JCQkJICAgICAgIG1ldGFfYWMsIHJldF9iaCwgaW5kZXhlZCk7CisJcmV0ID0gb2NmczJfY3JlYXRlX3hhdHRyX2Jsb2NrKGlub2RlLCBmZV9iaCwgJmN0eHQsIGluZGV4ZWQsCisJCQkJICAgICAgIHJldF9iaCk7CiAJaWYgKHJldCkKIAkJbWxvZ19lcnJubyhyZXQpOwogCi0Jb2NmczJfY29tbWl0X3RyYW5zKG9zYiwgaGFuZGxlKTsKKwlvY2ZzMl9jb21taXRfdHJhbnMob3NiLCBjdHh0LmhhbmRsZSk7CiBvdXQ6CiAJb2NmczJfZnJlZV9hbGxvY19jb250ZXh0KG1ldGFfYWMpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9mcy9vbWZzL2lub2RlLmMgYi9mcy9vbWZzL2lub2RlLmMKaW5kZXggZjNiN2MxNS4uNzVkOWI1YiAxMDA2NDQKLS0tIGEvZnMvb21mcy9pbm9kZS5jCisrKyBiL2ZzL29tZnMvaW5vZGUuYwpAQCAtMTEsNiArMTEsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYy1pdHUtdC5oPgogI2luY2x1ZGUgIm9tZnMuaCIKIApAQCAtODksNyArOTAsNyBAQAogCW9pLT5pX2hlYWQuaF9jaGVja194b3IgPSB4b3I7CiB9CiAKLXN0YXRpYyBpbnQgb21mc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCkKK3N0YXRpYyBpbnQgX19vbWZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB3YWl0KQogewogCXN0cnVjdCBvbWZzX2lub2RlICpvaTsKIAlzdHJ1Y3Qgb21mc19zYl9pbmZvICpzYmkgPSBPTUZTX1NCKGlub2RlLT5pX3NiKTsKQEAgLTE2Miw5ICsxNjMsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IG9tZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCit7CisJcmV0dXJuIF9fb21mc193cml0ZV9pbm9kZShpbm9kZSwgd2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpOworfQorCiBpbnQgb21mc19zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JcmV0dXJuIG9tZnNfd3JpdGVfaW5vZGUoaW5vZGUsIDEpOworCXJldHVybiBfX29tZnNfd3JpdGVfaW5vZGUoaW5vZGUsIDEpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jCmluZGV4IDA0MGNlZjcuLmUxN2Y1NDQgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYworKysgYi9mcy9vcGVuLmMKQEAgLTgsNyArOCw2IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZmR0YWJsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvZnNub3RpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CkBAIC0yNzEsMTcgKzI3MCwxNSBAQAogCSAqIE1ha2Ugc3VyZSB0aGF0IHRoZXJlIGFyZSBubyBsZWFzZXMuICBnZXRfd3JpdGVfYWNjZXNzKCkgcHJvdGVjdHMKIAkgKiBhZ2FpbnN0IHRoZSB0cnVuY2F0ZSByYWNpbmcgd2l0aCBhIGxlYXNlLWdyYW50aW5nIHNldGxlYXNlKCkuCiAJICovCi0JZXJyb3IgPSBicmVha19sZWFzZShpbm9kZSwgRk1PREVfV1JJVEUpOworCWVycm9yID0gYnJlYWtfbGVhc2UoaW5vZGUsIE9fV1JPTkxZKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gcHV0X3dyaXRlX2FuZF9vdXQ7CiAKIAllcnJvciA9IGxvY2tzX3ZlcmlmeV90cnVuY2F0ZShpbm9kZSwgTlVMTCwgbGVuZ3RoKTsKIAlpZiAoIWVycm9yKQogCQllcnJvciA9IHNlY3VyaXR5X3BhdGhfdHJ1bmNhdGUoJnBhdGgsIGxlbmd0aCwgMCk7Ci0JaWYgKCFlcnJvcikgewotCQl2ZnNfZHFfaW5pdChpbm9kZSk7CisJaWYgKCFlcnJvcikKIAkJZXJyb3IgPSBkb190cnVuY2F0ZShwYXRoLmRlbnRyeSwgbGVuZ3RoLCAwLCBOVUxMKTsKLQl9CiAKIHB1dF93cml0ZV9hbmRfb3V0OgogCXB1dF93cml0ZV9hY2Nlc3MoaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvcG5vZGUuYyBiL2ZzL3Bub2RlLmMKaW5kZXggOGQ1ZjM5Mi4uNWNjNTY0YSAxMDA2NDQKLS0tIGEvZnMvcG5vZGUuYworKysgYi9mcy9wbm9kZS5jCkBAIC04Niw3ICs4Niw3IEBACiAKIAkvKgogCSAqIHNsYXZlICdtbnQnIHRvIGEgcGVlciBtb3VudCB0aGF0IGhhcyB0aGUKLQkgKiBzYW1lIHJvb3QgZGVudHJ5LiBJZiBub25lIGlzIGF2YWlsYWJsZSB0aGFuCisJICogc2FtZSByb290IGRlbnRyeS4gSWYgbm9uZSBpcyBhdmFpbGFibGUgdGhlbgogCSAqIHNsYXZlIGl0IHRvIGFueXRoaW5nIHRoYXQgaXMgYXZhaWxhYmxlLgogCSAqLwogCXdoaWxlICgocGVlcl9tbnQgPSBuZXh0X3BlZXIocGVlcl9tbnQpKSAhPSBtbnQgJiYKQEAgLTE0Nyw2ICsxNDcsMTEgQEAKICAqIGdldCB0aGUgbmV4dCBtb3VudCBpbiB0aGUgcHJvcGFnYXRpb24gdHJlZS4KICAqIEBtOiB0aGUgbW91bnQgc2VlbiBsYXN0CiAgKiBAb3JpZ2luOiB0aGUgb3JpZ2luYWwgbW91bnQgZnJvbSB3aGVyZSB0aGUgdHJlZSB3YWxrIGluaXRpYXRlZAorICoKKyAqIE5vdGUgdGhhdCBwZWVyIGdyb3VwcyBmb3JtIGNvbnRpZ3VvdXMgc2VnbWVudHMgb2Ygc2xhdmUgbGlzdHMuCisgKiBXZSByZWx5IG9uIHRoYXQgaW4gZ2V0X3NvdXJjZSgpIHRvIGJlIGFibGUgdG8gZmluZCBvdXQgaWYKKyAqIHZmc21vdW50IGZvdW5kIHdoaWxlIGl0ZXJhdGluZyB3aXRoIHByb3BhZ2F0aW9uX25leHQoKSBpcworICogYSBwZWVyIG9mIG9uZSB3ZSdkIGZvdW5kIGVhcmxpZXIuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnByb3BhZ2F0aW9uX25leHQoc3RydWN0IHZmc21vdW50ICptLAogCQkJCQkgc3RydWN0IHZmc21vdW50ICpvcmlnaW4pCkBAIC0xODYsMTAgKzE5MSw2IEBACiB7CiAJc3RydWN0IHZmc21vdW50ICpwX2xhc3Rfc3JjID0gTlVMTDsKIAlzdHJ1Y3QgdmZzbW91bnQgKnBfbGFzdF9kZXN0ID0gTlVMTDsKLQkqdHlwZSA9IENMX1BST1BBR0FUSU9OOwotCi0JaWYgKElTX01OVF9TSEFSRUQoZGVzdCkpCi0JCSp0eXBlIHw9IENMX01BS0VfU0hBUkVEOwogCiAJd2hpbGUgKGxhc3RfZGVzdCAhPSBkZXN0LT5tbnRfbWFzdGVyKSB7CiAJCXBfbGFzdF9kZXN0ID0gbGFzdF9kZXN0OwpAQCAtMjAyLDEzICsyMDMsMTggQEAKIAkJZG8gewogCQkJcF9sYXN0X2Rlc3QgPSBuZXh0X3BlZXIocF9sYXN0X2Rlc3QpOwogCQl9IHdoaWxlIChJU19NTlRfTkVXKHBfbGFzdF9kZXN0KSk7CisJCS8qIGlzIHRoYXQgYSBwZWVyIG9mIHRoZSBlYXJsaWVyPyAqLworCQlpZiAoZGVzdCA9PSBwX2xhc3RfZGVzdCkgeworCQkJKnR5cGUgPSBDTF9NQUtFX1NIQVJFRDsKKwkJCXJldHVybiBwX2xhc3Rfc3JjOworCQl9CiAJfQotCi0JaWYgKGRlc3QgIT0gcF9sYXN0X2Rlc3QpIHsKLQkJKnR5cGUgfD0gQ0xfU0xBVkU7Ci0JCXJldHVybiBsYXN0X3NyYzsKLQl9IGVsc2UKLQkJcmV0dXJuIHBfbGFzdF9zcmM7CisJLyogc2xhdmUgb2YgdGhlIGVhcmxpZXIsIHRoZW4gKi8KKwkqdHlwZSA9IENMX1NMQVZFOworCS8qIGJlZ2lubmluZyBvZiBwZWVyIGdyb3VwIGFtb25nIHRoZSBzbGF2ZXM/ICovCisJaWYgKElTX01OVF9TSEFSRUQoZGVzdCkpCisJCSp0eXBlIHw9IENMX01BS0VfU0hBUkVEOworCXJldHVybiBsYXN0X3NyYzsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3Bub2RlLmggYi9mcy9wbm9kZS5oCmluZGV4IDk1ODY2NWQuLjFlYTRhZTEgMTAwNjQ0Ci0tLSBhL2ZzL3Bub2RlLmgKKysrIGIvZnMvcG5vZGUuaApAQCAtMjEsMTIgKzIxLDExIEBACiAjZGVmaW5lIENMX1NMQVZFICAgICAJCTB4MDIKICNkZWZpbmUgQ0xfQ09QWV9BTEwgCQkweDA0CiAjZGVmaW5lIENMX01BS0VfU0hBUkVEIAkJMHgwOAotI2RlZmluZSBDTF9QUk9QQUdBVElPTiAJCTB4MTAKLSNkZWZpbmUgQ0xfUFJJVkFURSAJCTB4MjAKKyNkZWZpbmUgQ0xfUFJJVkFURSAJCTB4MTAKIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9tbnRfc2hhcmVkKHN0cnVjdCB2ZnNtb3VudCAqbW50KQogewotCW1udC0+bW50X2ZsYWdzICY9IH5NTlRfUE5PREVfTUFTSzsKKwltbnQtPm1udF9mbGFncyAmPSB+TU5UX1NIQVJFRF9NQVNLOwogCW1udC0+bW50X2ZsYWdzIHw9IE1OVF9TSEFSRUQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYXJyYXkuYyBiL2ZzL3Byb2MvYXJyYXkuYwppbmRleCAxOGUyMGZlLi5hYTg2MzdiIDEwMDY0NAotLS0gYS9mcy9wcm9jL2FycmF5LmMKKysrIGIvZnMvcHJvYy9hcnJheS5jCkBAIC0yNzMsNyArMjczLDcgQEAKIAkJcmN1X3JlYWRfbG9jaygpOyAgLyogRklYTUU6IGlzIHRoaXMgY29ycmVjdD8gKi8KIAkJcXNpemUgPSBhdG9taWNfcmVhZCgmX190YXNrX2NyZWQocCktPnVzZXItPnNpZ3BlbmRpbmcpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJcWxpbSA9IHAtPnNpZ25hbC0+cmxpbVtSTElNSVRfU0lHUEVORElOR10ucmxpbV9jdXI7CisJCXFsaW0gPSB0YXNrX3JsaW1pdChwLCBSTElNSVRfU0lHUEVORElORyk7CiAJCXVubG9ja190YXNrX3NpZ2hhbmQocCwgJmZsYWdzKTsKIAl9CiAKQEAgLTQyMCw3ICs0MjAsNyBAQAogCQljdXRpbWUgPSBzaWctPmN1dGltZTsKIAkJY3N0aW1lID0gc2lnLT5jc3RpbWU7CiAJCWNndGltZSA9IHNpZy0+Y2d0aW1lOwotCQlyc3NsaW0gPSBzaWctPnJsaW1bUkxJTUlUX1JTU10ucmxpbV9jdXI7CisJCXJzc2xpbSA9IEFDQ0VTU19PTkNFKHNpZy0+cmxpbVtSTElNSVRfUlNTXS5ybGltX2N1cik7CiAKIAkJLyogYWRkIHVwIGxpdmUgdGhyZWFkIHN0YXRzIGF0IHRoZSBncm91cCBsZXZlbCAqLwogCQlpZiAod2hvbGUpIHsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYmFzZS5jIGIvZnMvcHJvYy9iYXNlLmMKaW5kZXggNjIzZTJmZi4uYTczMTA4NCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9iYXNlLmMKKysrIGIvZnMvcHJvYy9iYXNlLmMKQEAgLTY0NywxNyArNjQ3LDExIEBACiBzdGF0aWMgdW5zaWduZWQgbW91bnRzX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCiB7CiAJc3RydWN0IHByb2NfbW91bnRzICpwID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBtbnRfbmFtZXNwYWNlICpucyA9IHAtPm5zOwogCXVuc2lnbmVkIHJlcyA9IFBPTExJTiB8IFBPTExSRE5PUk07CiAKLQlwb2xsX3dhaXQoZmlsZSwgJm5zLT5wb2xsLCB3YWl0KTsKLQotCXNwaW5fbG9jaygmdmZzbW91bnRfbG9jayk7Ci0JaWYgKHAtPmV2ZW50ICE9IG5zLT5ldmVudCkgewotCQlwLT5ldmVudCA9IG5zLT5ldmVudDsKKwlwb2xsX3dhaXQoZmlsZSwgJnAtPm5zLT5wb2xsLCB3YWl0KTsKKwlpZiAobW50X2hhZF9ldmVudHMocCkpCiAJCXJlcyB8PSBQT0xMRVJSIHwgUE9MTFBSSTsKLQl9Ci0Jc3Bpbl91bmxvY2soJnZmc21vdW50X2xvY2spOwogCiAJcmV0dXJuIHJlczsKIH0KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvZ2VuZXJpYy5jIGIvZnMvcHJvYy9nZW5lcmljLmMKaW5kZXggNDgwY2IxMC4uMDhmNGQ3MSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9nZW5lcmljLmMKKysrIGIvZnMvcHJvYy9nZW5lcmljLmMKQEAgLTI5MSwxOSArMjkxLDE3IEBACiAgKiByZXR1cm5zIHRoZSBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgZm9yICIvcHJvYy90dHkvZHJpdmVyIiwgYW5kCiAgKiByZXR1cm5zICJzZXJpYWwiIGluIHJlc2lkdWFsLgogICovCi1zdGF0aWMgaW50IHhsYXRlX3Byb2NfbmFtZShjb25zdCBjaGFyICpuYW1lLAotCQkJICAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICoqcmV0LCBjb25zdCBjaGFyICoqcmVzaWR1YWwpCitzdGF0aWMgaW50IF9feGxhdGVfcHJvY19uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKnJldCwKKwkJCSAgICAgY29uc3QgY2hhciAqKnJlc2lkdWFsKQogewogCWNvbnN0IGNoYXIgICAgIAkJKmNwID0gbmFtZSwgKm5leHQ7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5CSpkZTsKIAlpbnQJCQlsZW47Ci0JaW50IAkJCXJ0biA9IDA7CiAKIAlkZSA9ICpyZXQ7CiAJaWYgKCFkZSkKIAkJZGUgPSAmcHJvY19yb290OwogCi0Jc3Bpbl9sb2NrKCZwcm9jX3N1YmRpcl9sb2NrKTsKIAl3aGlsZSAoMSkgewogCQluZXh0ID0gc3RyY2hyKGNwLCAnLycpOwogCQlpZiAoIW5leHQpCkBAIC0zMTUsMTYgKzMxMywyNSBAQAogCQkJCWJyZWFrOwogCQl9CiAJCWlmICghZGUpIHsKLQkJCXJ0biA9IC1FTk9FTlQ7Ci0JCQlnb3RvIG91dDsKKwkJCVdBUk4oMSwgIm5hbWUgJyVzJ1xuIiwgbmFtZSk7CisJCQlyZXR1cm4gLUVOT0VOVDsKIAkJfQogCQljcCArPSBsZW4gKyAxOwogCX0KIAkqcmVzaWR1YWwgPSBjcDsKIAkqcmV0ID0gZGU7Ci1vdXQ6CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgeGxhdGVfcHJvY19uYW1lKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqKnJldCwKKwkJCSAgIGNvbnN0IGNoYXIgKipyZXNpZHVhbCkKK3sKKwlpbnQgcnY7CisKKwlzcGluX2xvY2soJnByb2Nfc3ViZGlyX2xvY2spOworCXJ2ID0gX194bGF0ZV9wcm9jX25hbWUobmFtZSwgcmV0LCByZXNpZHVhbCk7CiAJc3Bpbl91bmxvY2soJnByb2Nfc3ViZGlyX2xvY2spOwotCXJldHVybiBydG47CisJcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgREVGSU5FX0lEQShwcm9jX2ludW1faWRhKTsKQEAgLTY2Miw2ICs2NjksNyBAQAogCX0KIAlyZXR1cm4gZW50OwogfQorRVhQT1JUX1NZTUJPTChwcm9jX3N5bWxpbmspOwogCiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfbWtkaXJfbW9kZShjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKIAkJc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwYXJlbnQpCkBAIC03MDAsNiArNzA4LDcgQEAKIHsKIAlyZXR1cm4gcHJvY19ta2Rpcl9tb2RlKG5hbWUsIFNfSVJVR08gfCBTX0lYVUdPLCBwYXJlbnQpOwogfQorRVhQT1JUX1NZTUJPTChwcm9jX21rZGlyKTsKIAogc3RydWN0IHByb2NfZGlyX2VudHJ5ICpjcmVhdGVfcHJvY19lbnRyeShjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKIAkJCQkJIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50KQpAQCAtNzI4LDYgKzczNyw3IEBACiAJfQogCXJldHVybiBlbnQ7CiB9CitFWFBPUlRfU1lNQk9MKGNyZWF0ZV9wcm9jX2VudHJ5KTsKIAogc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX2NyZWF0ZV9kYXRhKGNvbnN0IGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLAogCQkJCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudCwKQEAgLTc2Miw2ICs3NzIsNyBAQAogb3V0OgogCXJldHVybiBOVUxMOwogfQorRVhQT1JUX1NZTUJPTChwcm9jX2NyZWF0ZV9kYXRhKTsKIAogc3RhdGljIHZvaWQgZnJlZV9wcm9jX2VudHJ5KHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZGUpCiB7CkBAIC03OTMsMTEgKzgwNCwxMyBAQAogCWNvbnN0IGNoYXIgKmZuID0gbmFtZTsKIAlpbnQgbGVuOwogCi0JaWYgKHhsYXRlX3Byb2NfbmFtZShuYW1lLCAmcGFyZW50LCAmZm4pICE9IDApCisJc3Bpbl9sb2NrKCZwcm9jX3N1YmRpcl9sb2NrKTsKKwlpZiAoX194bGF0ZV9wcm9jX25hbWUobmFtZSwgJnBhcmVudCwgJmZuKSAhPSAwKSB7CisJCXNwaW5fdW5sb2NrKCZwcm9jX3N1YmRpcl9sb2NrKTsKIAkJcmV0dXJuOworCX0KIAlsZW4gPSBzdHJsZW4oZm4pOwogCi0Jc3Bpbl9sb2NrKCZwcm9jX3N1YmRpcl9sb2NrKTsKIAlmb3IgKHAgPSAmcGFyZW50LT5zdWJkaXI7ICpwOyBwPSYoKnApLT5uZXh0ICkgewogCQlpZiAocHJvY19tYXRjaChsZW4sIGZuLCAqcCkpIHsKIAkJCWRlID0gKnA7CkBAIC04MDcsOCArODIwLDEwIEBACiAJCX0KIAl9CiAJc3Bpbl91bmxvY2soJnByb2Nfc3ViZGlyX2xvY2spOwotCWlmICghZGUpCisJaWYgKCFkZSkgeworCQlXQVJOKDEsICJuYW1lICclcydcbiIsIG5hbWUpOwogCQlyZXR1cm47CisJfQogCiAJc3Bpbl9sb2NrKCZkZS0+cGRlX3VubG9hZF9sb2NrKTsKIAkvKgpAQCAtODUzLDMgKzg2OCw0IEBACiAJCQlkZS0+cGFyZW50LT5uYW1lLCBkZS0+bmFtZSwgZGUtPnN1YmRpci0+bmFtZSk7CiAJcGRlX3B1dChkZSk7CiB9CitFWFBPUlRfU1lNQk9MKHJlbW92ZV9wcm9jX2VudHJ5KTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2Mva21zZy5jIGIvZnMvcHJvYy9rbXNnLmMKaW5kZXggN2NhNzgzNC4uY2ZlOTBhNCAxMDA2NDQKLS0tIGEvZnMvcHJvYy9rbXNnLmMKKysrIGIvZnMvcHJvYy9rbXNnLmMKQEAgLTEyLDM3ICsxMiwzNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNsb2cuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIGV4dGVybiB3YWl0X3F1ZXVlX2hlYWRfdCBsb2dfd2FpdDsKIAotZXh0ZXJuIGludCBkb19zeXNsb2coaW50IHR5cGUsIGNoYXIgX191c2VyICpidWcsIGludCBjb3VudCk7Ci0KIHN0YXRpYyBpbnQga21zZ19vcGVuKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbGUpCiB7Ci0JcmV0dXJuIGRvX3N5c2xvZygxLE5VTEwsMCk7CisJcmV0dXJuIGRvX3N5c2xvZyhTWVNMT0dfQUNUSU9OX09QRU4sIE5VTEwsIDAsIFNZU0xPR19GUk9NX0ZJTEUpOwogfQogCiBzdGF0aWMgaW50IGttc2dfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxlKQogewotCSh2b2lkKSBkb19zeXNsb2coMCxOVUxMLDApOworCSh2b2lkKSBkb19zeXNsb2coU1lTTE9HX0FDVElPTl9DTE9TRSwgTlVMTCwgMCwgU1lTTE9HX0ZST01fRklMRSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGttc2dfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKIAkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKLQlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSAmJiAhZG9fc3lzbG9nKDksIE5VTEwsIDApKQorCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spICYmCisJICAgICFkb19zeXNsb2coU1lTTE9HX0FDVElPTl9TSVpFX1VOUkVBRCwgTlVMTCwgMCwgU1lTTE9HX0ZST01fRklMRSkpCiAJCXJldHVybiAtRUFHQUlOOwotCXJldHVybiBkb19zeXNsb2coMiwgYnVmLCBjb3VudCk7CisJcmV0dXJuIGRvX3N5c2xvZyhTWVNMT0dfQUNUSU9OX1JFQUQsIGJ1ZiwgY291bnQsIFNZU0xPR19GUk9NX0ZJTEUpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGttc2dfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAlwb2xsX3dhaXQoZmlsZSwgJmxvZ193YWl0LCB3YWl0KTsKLQlpZiAoZG9fc3lzbG9nKDksIE5VTEwsIDApKQorCWlmIChkb19zeXNsb2coU1lTTE9HX0FDVElPTl9TSVpFX1VOUkVBRCwgTlVMTCwgMCwgU1lTTE9HX0ZST01fRklMRSkpCiAJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9yb290LmMgYi9mcy9wcm9jL3Jvb3QuYwppbmRleCBiMDgwYjc5Li43NTdjMDY5IDEwMDY0NAotLS0gYS9mcy9wcm9jL3Jvb3QuYworKysgYi9mcy9wcm9jL3Jvb3QuYwpAQCAtMjIwLDkgKzIyMCwzIEBACiB7CiAJbW50cHV0KG5zLT5wcm9jX21udCk7CiB9Ci0KLUVYUE9SVF9TWU1CT0wocHJvY19zeW1saW5rKTsKLUVYUE9SVF9TWU1CT0wocHJvY19ta2Rpcik7Ci1FWFBPUlRfU1lNQk9MKGNyZWF0ZV9wcm9jX2VudHJ5KTsKLUVYUE9SVF9TWU1CT0wocHJvY19jcmVhdGVfZGF0YSk7Ci1FWFBPUlRfU1lNQk9MKHJlbW92ZV9wcm9jX2VudHJ5KTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCBmMjc3YzRhLi4xODNmOGZmIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKKysrIGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC0xNiw3ICsxNiw3IEBACiAKIHZvaWQgdGFza19tZW0oc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQl1bnNpZ25lZCBsb25nIGRhdGEsIHRleHQsIGxpYjsKKwl1bnNpZ25lZCBsb25nIGRhdGEsIHRleHQsIGxpYiwgc3dhcDsKIAl1bnNpZ25lZCBsb25nIGhpd2F0ZXJfdm0sIHRvdGFsX3ZtLCBoaXdhdGVyX3JzcywgdG90YWxfcnNzOwogCiAJLyoKQEAgLTM2LDYgKzM2LDcgQEAKIAlkYXRhID0gbW0tPnRvdGFsX3ZtIC0gbW0tPnNoYXJlZF92bSAtIG1tLT5zdGFja192bTsKIAl0ZXh0ID0gKFBBR0VfQUxJR04obW0tPmVuZF9jb2RlKSAtIChtbS0+c3RhcnRfY29kZSAmIFBBR0VfTUFTSykpID4+IDEwOwogCWxpYiA9IChtbS0+ZXhlY192bSA8PCAoUEFHRV9TSElGVC0xMCkpIC0gdGV4dDsKKwlzd2FwID0gZ2V0X21tX2NvdW50ZXIobW0sIE1NX1NXQVBFTlRTKTsKIAlzZXFfcHJpbnRmKG0sCiAJCSJWbVBlYWs6XHQlOGx1IGtCXG4iCiAJCSJWbVNpemU6XHQlOGx1IGtCXG4iCkBAIC00Niw3ICs0Nyw4IEBACiAJCSJWbVN0azpcdCU4bHUga0JcbiIKIAkJIlZtRXhlOlx0JThsdSBrQlxuIgogCQkiVm1MaWI6XHQlOGx1IGtCXG4iCi0JCSJWbVBURTpcdCU4bHUga0JcbiIsCisJCSJWbVBURTpcdCU4bHUga0JcbiIKKwkJIlZtU3dhcDpcdCU4bHUga0JcbiIsCiAJCWhpd2F0ZXJfdm0gPDwgKFBBR0VfU0hJRlQtMTApLAogCQkodG90YWxfdm0gLSBtbS0+cmVzZXJ2ZWRfdm0pIDw8IChQQUdFX1NISUZULTEwKSwKIAkJbW0tPmxvY2tlZF92bSA8PCAoUEFHRV9TSElGVC0xMCksCkBAIC01NCw3ICs1Niw4IEBACiAJCXRvdGFsX3JzcyA8PCAoUEFHRV9TSElGVC0xMCksCiAJCWRhdGEgPDwgKFBBR0VfU0hJRlQtMTApLAogCQltbS0+c3RhY2tfdm0gPDwgKFBBR0VfU0hJRlQtMTApLCB0ZXh0LCBsaWIsCi0JCShQVFJTX1BFUl9QVEUqc2l6ZW9mKHB0ZV90KSptbS0+bnJfcHRlcykgPj4gMTApOworCQkoUFRSU19QRVJfUFRFKnNpemVvZihwdGVfdCkqbW0tPm5yX3B0ZXMpID4+IDEwLAorCQlzd2FwIDw8IChQQUdFX1NISUZULTEwKSk7CiB9CiAKIHVuc2lnbmVkIGxvbmcgdGFza192c2l6ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKQEAgLTY1LDExICs2OCwxMSBAQAogaW50IHRhc2tfc3RhdG0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCAqc2hhcmVkLCBpbnQgKnRleHQsCiAJICAgICAgIGludCAqZGF0YSwgaW50ICpyZXNpZGVudCkKIHsKLQkqc2hhcmVkID0gZ2V0X21tX2NvdW50ZXIobW0sIGZpbGVfcnNzKTsKKwkqc2hhcmVkID0gZ2V0X21tX2NvdW50ZXIobW0sIE1NX0ZJTEVQQUdFUyk7CiAJKnRleHQgPSAoUEFHRV9BTElHTihtbS0+ZW5kX2NvZGUpIC0gKG1tLT5zdGFydF9jb2RlICYgUEFHRV9NQVNLKSkKIAkJCQkJCQkJPj4gUEFHRV9TSElGVDsKIAkqZGF0YSA9IG1tLT50b3RhbF92bSAtIG1tLT5zaGFyZWRfdm07Ci0JKnJlc2lkZW50ID0gKnNoYXJlZCArIGdldF9tbV9jb3VudGVyKG1tLCBhbm9uX3Jzcyk7CisJKnJlc2lkZW50ID0gKnNoYXJlZCArIGdldF9tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpOwogCXJldHVybiBtbS0+dG90YWxfdm07CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3FueDQvaW5vZGUuYyBiL2ZzL3FueDQvaW5vZGUuYwppbmRleCBlYmYzNDQwLi4yNzc1NzVkIDEwMDY0NAotLS0gYS9mcy9xbng0L2lub2RlLmMKKysrIGIvZnMvcW54NC9pbm9kZS5jCkBAIC0yMDEsNyArMjAxLDggQEAKIAkJCQlyb290ZGlyID0gKHN0cnVjdCBxbng0X2lub2RlX2VudHJ5ICopIChiaC0+Yl9kYXRhICsgaSAqIFFOWDRfRElSX0VOVFJZX1NJWkUpOwogCQkJCWlmIChyb290ZGlyLT5kaV9mbmFtZSAhPSBOVUxMKSB7CiAJCQkJCVFOWDRERUJVRygoS0VSTl9JTkZPICJyb290ZGlyIGVudHJ5IGZvdW5kIDogWyVzXVxuIiwgcm9vdGRpci0+ZGlfZm5hbWUpKTsKLQkJCQkJaWYgKCFzdHJuY21wKHJvb3RkaXItPmRpX2ZuYW1lLCBRTlg0X0JNTkFNRSwgc2l6ZW9mIFFOWDRfQk1OQU1FKSkgeworCQkJCQlpZiAoIXN0cmNtcChyb290ZGlyLT5kaV9mbmFtZSwKKwkJCQkJCSAgICBRTlg0X0JNTkFNRSkpIHsKIAkJCQkJCWZvdW5kID0gMTsKIAkJCQkJCXFueDRfc2Ioc2IpLT5CaXRNYXAgPSBrbWFsbG9jKCBzaXplb2YoIHN0cnVjdCBxbng0X2lub2RlX2VudHJ5ICksIEdGUF9LRVJORUwgKTsKIAkJCQkJCWlmICghcW54NF9zYihzYiktPkJpdE1hcCkgewpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvS2NvbmZpZyBiL2ZzL3F1b3RhL0tjb25maWcKaW5kZXggZWZjMDJlYi4uZGFkN2ZiMiAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvS2NvbmZpZworKysgYi9mcy9xdW90YS9LY29uZmlnCkBAIC01OSwzICs1OSw4IEBACiAJYm9vbAogCWRlcGVuZHMgb24gWEZTX1FVT1RBIHx8IFFVT1RBCiAJZGVmYXVsdCB5CisKK2NvbmZpZyBRVU9UQUNUTF9DT01QQVQKKwlib29sCisJZGVwZW5kcyBvbiBRVU9UQUNUTCAmJiBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlQKKwlkZWZhdWx0IHkKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL01ha2VmaWxlIGIvZnMvcXVvdGEvTWFrZWZpbGUKaW5kZXggNjhkNGY2ZC4uNWY5ZTllMiAxMDA2NDQKLS0tIGEvZnMvcXVvdGEvTWFrZWZpbGUKKysrIGIvZnMvcXVvdGEvTWFrZWZpbGUKQEAgLTMsMyArMyw1IEBACiBvYmotJChDT05GSUdfUUZNVF9WMikJCSs9IHF1b3RhX3YyLm8KIG9iai0kKENPTkZJR19RVU9UQV9UUkVFKQkrPSBxdW90YV90cmVlLm8KIG9iai0kKENPTkZJR19RVU9UQUNUTCkJCSs9IHF1b3RhLm8KK29iai0kKENPTkZJR19RVU9UQUNUTF9DT01QQVQpCSs9IGNvbXBhdC5vCitvYmotJChDT05GSUdfUVVPVEFfTkVUTElOS19JTlRFUkZBQ0UpCSs9IG5ldGxpbmsubwpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEvY29tcGF0LmMgYi9mcy9xdW90YS9jb21wYXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjE4OTJmCi0tLSAvZGV2L251bGwKKysrIGIvZnMvcXVvdGEvY29tcGF0LmMKQEAgLTAsMCArMSwxMTggQEAKKworI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CisjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KKworLyoKKyAqIFRoaXMgY29kZSB3b3JrcyBvbmx5IGZvciAzMiBiaXQgcXVvdGEgdG9vbHMgb3ZlciA2NCBiaXQgT1MgKHg4Nl82NCwgaWE2NCkKKyAqIGFuZCBpcyBuZWNlc3NhcnkgZHVlIHRvIGFsaWdubWVudCBwcm9ibGVtcy4KKyAqLworc3RydWN0IGNvbXBhdF9pZl9kcWJsayB7CisJY29tcGF0X3U2NCBkcWJfYmhhcmRsaW1pdDsKKwljb21wYXRfdTY0IGRxYl9ic29mdGxpbWl0OworCWNvbXBhdF91NjQgZHFiX2N1cnNwYWNlOworCWNvbXBhdF91NjQgZHFiX2loYXJkbGltaXQ7CisJY29tcGF0X3U2NCBkcWJfaXNvZnRsaW1pdDsKKwljb21wYXRfdTY0IGRxYl9jdXJpbm9kZXM7CisJY29tcGF0X3U2NCBkcWJfYnRpbWU7CisJY29tcGF0X3U2NCBkcWJfaXRpbWU7CisJY29tcGF0X3VpbnRfdCBkcWJfdmFsaWQ7Cit9OworCisvKiBYRlMgc3RydWN0dXJlcyAqLworc3RydWN0IGNvbXBhdF9mc19xZmlsZXN0YXQgeworCWNvbXBhdF91NjQgZHFiX2JoYXJkbGltaXQ7CisJY29tcGF0X3U2NCBxZnNfbmJsa3M7CisJY29tcGF0X3VpbnRfdCBxZnNfbmV4dGVudHM7Cit9OworCitzdHJ1Y3QgY29tcGF0X2ZzX3F1b3RhX3N0YXQgeworCV9fczgJCXFzX3ZlcnNpb247CisJX191MTYJCXFzX2ZsYWdzOworCV9fczgJCXFzX3BhZDsKKwlzdHJ1Y3QgY29tcGF0X2ZzX3FmaWxlc3RhdAlxc191cXVvdGE7CisJc3RydWN0IGNvbXBhdF9mc19xZmlsZXN0YXQJcXNfZ3F1b3RhOworCWNvbXBhdF91aW50X3QJcXNfaW5jb3JlZHFzOworCWNvbXBhdF9pbnRfdAlxc19idGltZWxpbWl0OworCWNvbXBhdF9pbnRfdAlxc19pdGltZWxpbWl0OworCWNvbXBhdF9pbnRfdAlxc19ydGJ0aW1lbGltaXQ7CisJX191MTYJCXFzX2J3YXJubGltaXQ7CisJX191MTYJCXFzX2l3YXJubGltaXQ7Cit9OworCithc21saW5rYWdlIGxvbmcgc3lzMzJfcXVvdGFjdGwodW5zaWduZWQgaW50IGNtZCwgY29uc3QgY2hhciBfX3VzZXIgKnNwZWNpYWwsCisJCQkJCQlxaWRfdCBpZCwgdm9pZCBfX3VzZXIgKmFkZHIpCit7CisJdW5zaWduZWQgaW50IGNtZHM7CisJc3RydWN0IGlmX2RxYmxrIF9fdXNlciAqZHFibGs7CisJc3RydWN0IGNvbXBhdF9pZl9kcWJsayBfX3VzZXIgKmNvbXBhdF9kcWJsazsKKwlzdHJ1Y3QgZnNfcXVvdGFfc3RhdCBfX3VzZXIgKmZzcXN0YXQ7CisJc3RydWN0IGNvbXBhdF9mc19xdW90YV9zdGF0IF9fdXNlciAqY29tcGF0X2ZzcXN0YXQ7CisJY29tcGF0X3VpbnRfdCBkYXRhOworCXUxNiB4ZGF0YTsKKwlsb25nIHJldDsKKworCWNtZHMgPSBjbWQgPj4gU1VCQ01EU0hJRlQ7CisKKwlzd2l0Y2ggKGNtZHMpIHsKKwljYXNlIFFfR0VUUVVPVEE6CisJCWRxYmxrID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKHN0cnVjdCBpZl9kcWJsaykpOworCQljb21wYXRfZHFibGsgPSBhZGRyOworCQlyZXQgPSBzeXNfcXVvdGFjdGwoY21kLCBzcGVjaWFsLCBpZCwgZHFibGspOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJCWlmIChjb3B5X2luX3VzZXIoY29tcGF0X2RxYmxrLCBkcWJsaywgc2l6ZW9mKCpjb21wYXRfZHFibGspKSB8fAorCQkJZ2V0X3VzZXIoZGF0YSwgJmRxYmxrLT5kcWJfdmFsaWQpIHx8CisJCQlwdXRfdXNlcihkYXRhLCAmY29tcGF0X2RxYmxrLT5kcWJfdmFsaWQpKQorCQkJcmV0ID0gLUVGQVVMVDsKKwkJYnJlYWs7CisJY2FzZSBRX1NFVFFVT1RBOgorCQlkcWJsayA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZihzdHJ1Y3QgaWZfZHFibGspKTsKKwkJY29tcGF0X2RxYmxrID0gYWRkcjsKKwkJcmV0ID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfaW5fdXNlcihkcWJsaywgY29tcGF0X2RxYmxrLCBzaXplb2YoKmNvbXBhdF9kcWJsaykpIHx8CisJCQlnZXRfdXNlcihkYXRhLCAmY29tcGF0X2RxYmxrLT5kcWJfdmFsaWQpIHx8CisJCQlwdXRfdXNlcihkYXRhLCAmZHFibGstPmRxYl92YWxpZCkpCisJCQlicmVhazsKKwkJcmV0ID0gc3lzX3F1b3RhY3RsKGNtZCwgc3BlY2lhbCwgaWQsIGRxYmxrKTsKKwkJYnJlYWs7CisJY2FzZSBRX1hHRVRRU1RBVDoKKwkJZnNxc3RhdCA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZihzdHJ1Y3QgZnNfcXVvdGFfc3RhdCkpOworCQljb21wYXRfZnNxc3RhdCA9IGFkZHI7CisJCXJldCA9IHN5c19xdW90YWN0bChjbWQsIHNwZWNpYWwsIGlkLCBmc3FzdGF0KTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCQlyZXQgPSAtRUZBVUxUOworCQkvKiBDb3B5aW5nIHFzX3ZlcnNpb24sIHFzX2ZsYWdzLCBxc19wYWQgKi8KKwkJaWYgKGNvcHlfaW5fdXNlcihjb21wYXRfZnNxc3RhdCwgZnNxc3RhdCwKKwkJCW9mZnNldG9mKHN0cnVjdCBjb21wYXRfZnNfcXVvdGFfc3RhdCwgcXNfdXF1b3RhKSkpCisJCQlicmVhazsKKwkJLyogQ29weWluZyBxc191cXVvdGEgKi8KKwkJaWYgKGNvcHlfaW5fdXNlcigmY29tcGF0X2ZzcXN0YXQtPnFzX3VxdW90YSwKKwkJCSZmc3FzdGF0LT5xc191cXVvdGEsCisJCQlzaXplb2YoY29tcGF0X2ZzcXN0YXQtPnFzX3VxdW90YSkpIHx8CisJCQlnZXRfdXNlcihkYXRhLCAmZnNxc3RhdC0+cXNfdXF1b3RhLnFmc19uZXh0ZW50cykgfHwKKwkJCXB1dF91c2VyKGRhdGEsICZjb21wYXRfZnNxc3RhdC0+cXNfdXF1b3RhLnFmc19uZXh0ZW50cykpCisJCQlicmVhazsKKwkJLyogQ29weWluZyBxc19ncXVvdGEgKi8KKwkJaWYgKGNvcHlfaW5fdXNlcigmY29tcGF0X2ZzcXN0YXQtPnFzX2dxdW90YSwKKwkJCSZmc3FzdGF0LT5xc19ncXVvdGEsCisJCQlzaXplb2YoY29tcGF0X2ZzcXN0YXQtPnFzX2dxdW90YSkpIHx8CisJCQlnZXRfdXNlcihkYXRhLCAmZnNxc3RhdC0+cXNfZ3F1b3RhLnFmc19uZXh0ZW50cykgfHwKKwkJCXB1dF91c2VyKGRhdGEsICZjb21wYXRfZnNxc3RhdC0+cXNfZ3F1b3RhLnFmc19uZXh0ZW50cykpCisJCQlicmVhazsKKwkJLyogQ29weWluZyB0aGUgcmVzdCAqLworCQlpZiAoY29weV9pbl91c2VyKCZjb21wYXRfZnNxc3RhdC0+cXNfaW5jb3JlZHFzLAorCQkJJmZzcXN0YXQtPnFzX2luY29yZWRxcywKKwkJCXNpemVvZihzdHJ1Y3QgY29tcGF0X2ZzX3F1b3RhX3N0YXQpIC0KKwkJCW9mZnNldG9mKHN0cnVjdCBjb21wYXRfZnNfcXVvdGFfc3RhdCwgcXNfaW5jb3JlZHFzKSkgfHwKKwkJCWdldF91c2VyKHhkYXRhLCAmZnNxc3RhdC0+cXNfaXdhcm5saW1pdCkgfHwKKwkJCXB1dF91c2VyKHhkYXRhLCAmY29tcGF0X2ZzcXN0YXQtPnFzX2l3YXJubGltaXQpKQorCQkJYnJlYWs7CisJCXJldCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IHN5c19xdW90YWN0bChjbWQsIHNwZWNpYWwsIGlkLCBhZGRyKTsKKwl9CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL2RxdW90LmMgYi9mcy9xdW90YS9kcXVvdC5jCmluZGV4IDNmYzYyYjAuLmUwYjg3MGYgMTAwNjQ0Ci0tLSBhL2ZzL3F1b3RhL2RxdW90LmMKKysrIGIvZnMvcXVvdGEvZHF1b3QuYwpAQCAtMTAwLDkgKzEwMCwxMyBAQAogICoKICAqIEFueSBvcGVyYXRpb24gd29ya2luZyBvbiBkcXVvdHMgdmlhIGlub2RlIHBvaW50ZXJzIG11c3QgaG9sZCBkcXB0cl9zZW0uICBJZgogICogb3BlcmF0aW9uIGlzIGp1c3QgcmVhZGluZyBwb2ludGVycyBmcm9tIGlub2RlIChvciBub3QgdXNpbmcgdGhlbSBhdCBhbGwpIHRoZQotICogcmVhZCBsb2NrIGlzIGVub3VnaC4gSWYgcG9pbnRlcnMgYXJlIGFsdGVyZWQgZnVuY3Rpb24gbXVzdCBob2xkIHdyaXRlIGxvY2sKLSAqICh0aGVzZSBsb2NraW5nIHJ1bGVzIGFsc28gYXBwbHkgZm9yIFNfTk9RVU9UQSBmbGFnIGluIHRoZSBpbm9kZSAtIG5vdGUgdGhhdAotICogZm9yIGFsdGVyaW5nIHRoZSBmbGFnIGlfbXV0ZXggaXMgYWxzbyBuZWVkZWQpLgorICogcmVhZCBsb2NrIGlzIGVub3VnaC4gSWYgcG9pbnRlcnMgYXJlIGFsdGVyZWQgZnVuY3Rpb24gbXVzdCBob2xkIHdyaXRlIGxvY2suCisgKiBTcGVjaWFsIGNhcmUgbmVlZHMgdG8gYmUgdGFrZW4gYWJvdXQgU19OT1FVT1RBIGlub2RlIGZsYWcgKG1hcmtpbmcgdGhhdAorICogaW5vZGUgaXMgYSBxdW90YSBmaWxlKS4gRnVuY3Rpb25zIGFkZGluZyBwb2ludGVycyBmcm9tIGlub2RlIHRvIGRxdW90cyBoYXZlCisgKiB0byBjaGVjayB0aGlzIGZsYWcgdW5kZXIgZHFwdHJfc2VtIGFuZCB0aGVuIChpZiBTX05PUVVPVEEgaXMgbm90IHNldCkgdGhleQorICogaGF2ZSB0byBkbyBhbGwgcG9pbnRlciBtb2RpZmljYXRpb25zIGJlZm9yZSBkcm9wcGluZyBkcXB0cl9zZW0uIFRoaXMgbWFrZXMKKyAqIHN1cmUgdGhleSBjYW5ub3QgcmFjZSB3aXRoIHF1b3Rhb24gd2hpY2ggZmlyc3Qgc2V0cyBTX05PUVVPVEEgZmxhZyBhbmQKKyAqIHRoZW4gZHJvcHMgYWxsIHBvaW50ZXJzIHRvIGRxdW90cyBmcm9tIGFuIGlub2RlLgogICoKICAqIEVhY2ggZHF1b3QgaGFzIGl0cyBkcV9sb2NrIG11dGV4LiBMb2NrZWQgZHF1b3RzIG1pZ2h0IG5vdCBiZSByZWZlcmVuY2VkCiAgKiBmcm9tIGlub2RlcyAoZHF1b3RfYWxsb2Nfc3BhY2UoKSBhbmQgc3VjaCBkb24ndCBjaGVjayB0aGUgZHFfbG9jaykuCkBAIC0yMjUsNiArMjI5LDkgQEAKIHN0cnVjdCBkcXN0YXRzIGRxc3RhdHM7CiBFWFBPUlRfU1lNQk9MKGRxc3RhdHMpOwogCitzdGF0aWMgcXNpemVfdCBpbm9kZV9nZXRfcnN2X3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOworc3RhdGljIHZvaWQgX19kcXVvdF9pbml0aWFsaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKTsKKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKIGhhc2hmbihjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgaWQsIGludCB0eXBlKQogewpAQCAtNTY0LDcgKzU3MSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRxdW90X3NjYW5fYWN0aXZlKTsKIAotaW50IHZmc19xdW90YV9zeW5jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQoraW50IHZmc19xdW90YV9zeW5jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgd2FpdCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpkaXJ0eTsKIAlzdHJ1Y3QgZHF1b3QgKmRxdW90OwpAQCAtNjA5LDYgKzYxNiwzMyBAQAogCXNwaW5fdW5sb2NrKCZkcV9saXN0X2xvY2spOwogCW11dGV4X3VubG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOwogCisJaWYgKCF3YWl0IHx8IChzYl9kcW9wdChzYiktPmZsYWdzICYgRFFVT1RfUVVPVEFfU1lTX0ZJTEUpKQorCQlyZXR1cm4gMDsKKworCS8qIFRoaXMgaXMgbm90IHZlcnkgY2xldmVyIChhbmQgZmFzdCkgYnV0IGN1cnJlbnRseSBJIGRvbid0IGtub3cgYWJvdXQKKwkgKiBhbnkgb3RoZXIgc2ltcGxlIHdheSBvZiBnZXR0aW5nIHF1b3RhIGRhdGEgdG8gZGlzayBhbmQgd2UgbXVzdCBnZXQKKwkgKiB0aGVtIHRoZXJlIGZvciB1c2Vyc3BhY2UgdG8gYmUgdmlzaWJsZS4uLiAqLworCWlmIChzYi0+c19vcC0+c3luY19mcykKKwkJc2ItPnNfb3AtPnN5bmNfZnMoc2IsIDEpOworCXN5bmNfYmxvY2tkZXYoc2ItPnNfYmRldik7CisKKwkvKgorCSAqIE5vdyB3aGVuIGV2ZXJ5dGhpbmcgaXMgd3JpdHRlbiB3ZSBjYW4gZGlzY2FyZCB0aGUgcGFnZWNhY2hlIHNvCisJICogdGhhdCB1c2Vyc3BhY2Ugc2VlcyB0aGUgY2hhbmdlcy4KKwkgKi8KKwltdXRleF9sb2NrKCZzYl9kcW9wdChzYiktPmRxb25vZmZfbXV0ZXgpOworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQlpZiAodHlwZSAhPSAtMSAmJiBjbnQgIT0gdHlwZSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIGNudCkpCisJCQljb250aW51ZTsKKwkJbXV0ZXhfbG9ja19uZXN0ZWQoJnNiX2Rxb3B0KHNiKS0+ZmlsZXNbY250XS0+aV9tdXRleCwKKwkJCQkgIElfTVVURVhfUVVPVEEpOworCQl0cnVuY2F0ZV9pbm9kZV9wYWdlcygmc2JfZHFvcHQoc2IpLT5maWxlc1tjbnRdLT5pX2RhdGEsIDApOworCQltdXRleF91bmxvY2soJnNiX2Rxb3B0KHNiKS0+ZmlsZXNbY250XS0+aV9tdXRleCk7CisJfQorCW11dGV4X3VubG9jaygmc2JfZHFvcHQoc2IpLT5kcW9ub2ZmX211dGV4KTsKKwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh2ZnNfcXVvdGFfc3luYyk7CkBAIC04NDAsMTEgKzg3NCwxNCBAQAogc3RhdGljIHZvaWQgYWRkX2RxdW90X3JlZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlLCAqb2xkX2lub2RlID0gTlVMTDsKKwlpbnQgcmVzZXJ2ZWQgPSAwOwogCiAJc3Bpbl9sb2NrKCZpbm9kZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCAmc2ItPnNfaW5vZGVzLCBpX3NiX2xpc3QpIHsKIAkJaWYgKGlub2RlLT5pX3N0YXRlICYgKElfRlJFRUlOR3xJX0NMRUFSfElfV0lMTF9GUkVFfElfTkVXKSkKIAkJCWNvbnRpbnVlOworCQlpZiAodW5saWtlbHkoaW5vZGVfZ2V0X3Jzdl9zcGFjZShpbm9kZSkgPiAwKSkKKwkJCXJlc2VydmVkID0gMTsKIAkJaWYgKCFhdG9taWNfcmVhZCgmaW5vZGUtPmlfd3JpdGVjb3VudCkpCiAJCQljb250aW51ZTsKIAkJaWYgKCFkcWluaXRfbmVlZGVkKGlub2RlLCB0eXBlKSkKQEAgLTg1NCw3ICs4OTEsNyBAQAogCQlzcGluX3VubG9jaygmaW5vZGVfbG9jayk7CiAKIAkJaXB1dChvbGRfaW5vZGUpOwotCQlzYi0+ZHFfb3AtPmluaXRpYWxpemUoaW5vZGUsIHR5cGUpOworCQlfX2RxdW90X2luaXRpYWxpemUoaW5vZGUsIHR5cGUpOwogCQkvKiBXZSBob2xkIGEgcmVmZXJlbmNlIHRvICdpbm9kZScgc28gaXQgY291bGRuJ3QgaGF2ZSBiZWVuCiAJCSAqIHJlbW92ZWQgZnJvbSBzX2lub2RlcyBsaXN0IHdoaWxlIHdlIGRyb3BwZWQgdGhlIGlub2RlX2xvY2suCiAJCSAqIFdlIGNhbm5vdCBpcHV0IHRoZSBpbm9kZSBub3cgYXMgd2UgY2FuIGJlIGhvbGRpbmcgdGhlIGxhc3QKQEAgLTg2NSw2ICs5MDIsMTIgQEAKIAl9CiAJc3Bpbl91bmxvY2soJmlub2RlX2xvY2spOwogCWlwdXQob2xkX2lub2RlKTsKKworCWlmIChyZXNlcnZlZCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJWRlMgKCVzKTogV3JpdGVzIGhhcHBlbmVkIGJlZm9yZSBxdW90YSIKKwkJCSIgd2FzIHR1cm5lZCBvbiB0aHVzIHF1b3RhIGluZm9ybWF0aW9uIGlzIHByb2JhYmx5ICIKKwkJCSJpbmNvbnNpc3RlbnQuIFBsZWFzZSBydW4gcXVvdGFjaGVjayg4KS5cbiIsIHNiLT5zX2lkKTsKKwl9CiB9CiAKIC8qCkBAIC05NzgsMTAgKzEwMjEsMTIgQEAKIC8qCiAgKiBDbGFpbSByZXNlcnZlZCBxdW90YSBzcGFjZQogICovCi1zdGF0aWMgdm9pZCBkcXVvdF9jbGFpbV9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgZHF1b3QgKmRxdW90LAotCQkJCQkJcXNpemVfdCBudW1iZXIpCitzdGF0aWMgdm9pZCBkcXVvdF9jbGFpbV9yZXNlcnZlZF9zcGFjZShzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IG51bWJlcikKIHsKLQlXQVJOX09OKGRxdW90LT5kcV9kcWIuZHFiX3JzdnNwYWNlIDwgbnVtYmVyKTsKKwlpZiAoZHF1b3QtPmRxX2RxYi5kcWJfcnN2c3BhY2UgPCBudW1iZXIpIHsKKwkJV0FSTl9PTl9PTkNFKDEpOworCQludW1iZXIgPSBkcXVvdC0+ZHFfZHFiLmRxYl9yc3ZzcGFjZTsKKwl9CiAJZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgKz0gbnVtYmVyOwogCWRxdW90LT5kcV9kcWIuZHFiX3JzdnNwYWNlIC09IG51bWJlcjsKIH0KQEAgLTk4OSw3ICsxMDM0LDEyIEBACiBzdGF0aWMgaW5saW5lCiB2b2lkIGRxdW90X2ZyZWVfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGRxdW90ICpkcXVvdCwgcXNpemVfdCBudW1iZXIpCiB7Ci0JZHF1b3QtPmRxX2RxYi5kcWJfcnN2c3BhY2UgLT0gbnVtYmVyOworCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9yc3ZzcGFjZSA+PSBudW1iZXIpCisJCWRxdW90LT5kcV9kcWIuZHFiX3JzdnNwYWNlIC09IG51bWJlcjsKKwllbHNlIHsKKwkJV0FSTl9PTl9PTkNFKDEpOworCQlkcXVvdC0+ZHFfZHFiLmRxYl9yc3ZzcGFjZSA9IDA7CisJfQogfQogCiBzdGF0aWMgdm9pZCBkcXVvdF9kZWNyX2lub2RlcyhzdHJ1Y3QgZHF1b3QgKmRxdW90LCBxc2l6ZV90IG51bWJlcikKQEAgLTExMzEsMTMgKzExODEsMTMgQEAKIAkqd2FybnR5cGUgPSBRVU9UQV9OTF9OT1dBUk47CiAJaWYgKCFzYl9oYXNfcXVvdGFfbGltaXRzX2VuYWJsZWQoZHF1b3QtPmRxX3NiLCBkcXVvdC0+ZHFfdHlwZSkgfHwKIAkgICAgdGVzdF9iaXQoRFFfRkFLRV9CLCAmZHF1b3QtPmRxX2ZsYWdzKSkKLQkJcmV0dXJuIFFVT1RBX09LOworCQlyZXR1cm4gMDsKIAogCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9paGFyZGxpbWl0ICYmCiAJICAgIG5ld2lub2RlcyA+IGRxdW90LT5kcV9kcWIuZHFiX2loYXJkbGltaXQgJiYKICAgICAgICAgICAgICFpZ25vcmVfaGFyZGxpbWl0KGRxdW90KSkgewogCQkqd2FybnR5cGUgPSBRVU9UQV9OTF9JSEFSRFdBUk47Ci0JCXJldHVybiBOT19RVU9UQTsKKwkJcmV0dXJuIC1FRFFVT1Q7CiAJfQogCiAJaWYgKGRxdW90LT5kcV9kcWIuZHFiX2lzb2Z0bGltaXQgJiYKQEAgLTExNDYsNyArMTE5Niw3IEBACiAJICAgIGdldF9zZWNvbmRzKCkgPj0gZHF1b3QtPmRxX2RxYi5kcWJfaXRpbWUgJiYKICAgICAgICAgICAgICFpZ25vcmVfaGFyZGxpbWl0KGRxdW90KSkgewogCQkqd2FybnR5cGUgPSBRVU9UQV9OTF9JU09GVExPTkdXQVJOOwotCQlyZXR1cm4gTk9fUVVPVEE7CisJCXJldHVybiAtRURRVU9UOwogCX0KIAogCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9pc29mdGxpbWl0ICYmCkBAIC0xMTU3LDcgKzEyMDcsNyBAQAogCQkgICAgc2JfZHFvcHQoZHF1b3QtPmRxX3NiKS0+aW5mb1tkcXVvdC0+ZHFfdHlwZV0uZHFpX2lncmFjZTsKIAl9CiAKLQlyZXR1cm4gUVVPVEFfT0s7CisJcmV0dXJuIDA7CiB9CiAKIC8qIG5lZWRzIGRxX2RhdGFfbG9jayAqLwpAQCAtMTE2OSw3ICsxMjE5LDcgQEAKIAkqd2FybnR5cGUgPSBRVU9UQV9OTF9OT1dBUk47CiAJaWYgKCFzYl9oYXNfcXVvdGFfbGltaXRzX2VuYWJsZWQoc2IsIGRxdW90LT5kcV90eXBlKSB8fAogCSAgICB0ZXN0X2JpdChEUV9GQUtFX0IsICZkcXVvdC0+ZHFfZmxhZ3MpKQotCQlyZXR1cm4gUVVPVEFfT0s7CisJCXJldHVybiAwOwogCiAJdHNwYWNlID0gZHF1b3QtPmRxX2RxYi5kcWJfY3Vyc3BhY2UgKyBkcXVvdC0+ZHFfZHFiLmRxYl9yc3ZzcGFjZQogCQkrIHNwYWNlOwpAQCAtMTE3OSw3ICsxMjI5LDcgQEAKICAgICAgICAgICAgICFpZ25vcmVfaGFyZGxpbWl0KGRxdW90KSkgewogCQlpZiAoIXByZWFsbG9jKQogCQkJKndhcm50eXBlID0gUVVPVEFfTkxfQkhBUkRXQVJOOwotCQlyZXR1cm4gTk9fUVVPVEE7CisJCXJldHVybiAtRURRVU9UOwogCX0KIAogCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9ic29mdGxpbWl0ICYmCkBAIC0xMTg5LDcgKzEyMzksNyBAQAogICAgICAgICAgICAgIWlnbm9yZV9oYXJkbGltaXQoZHF1b3QpKSB7CiAJCWlmICghcHJlYWxsb2MpCiAJCQkqd2FybnR5cGUgPSBRVU9UQV9OTF9CU09GVExPTkdXQVJOOwotCQlyZXR1cm4gTk9fUVVPVEE7CisJCXJldHVybiAtRURRVU9UOwogCX0KIAogCWlmIChkcXVvdC0+ZHFfZHFiLmRxYl9ic29mdGxpbWl0ICYmCkBAIC0xMjA1LDEwICsxMjU1LDEwIEBACiAJCQkgKiBXZSBkb24ndCBhbGxvdyBwcmVhbGxvY2F0aW9uIHRvIGV4Y2VlZCBzb2Z0bGltaXQgc28gZXhjZWVkaW5nIHdpbGwKIAkJCSAqIGJlIGFsd2F5cyBwcmludGVkCiAJCQkgKi8KLQkJCXJldHVybiBOT19RVU9UQTsKKwkJCXJldHVybiAtRURRVU9UOwogCX0KIAotCXJldHVybiBRVU9UQV9PSzsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBpbmZvX2lkcV9mcmVlKHN0cnVjdCBkcXVvdCAqZHF1b3QsIHFzaXplX3QgaW5vZGVzKQpAQCAtMTI0MiwyNSArMTI5MiwzMiBAQAogCQlyZXR1cm4gUVVPVEFfTkxfQkhBUkRCRUxPVzsKIAlyZXR1cm4gUVVPVEFfTkxfTk9XQVJOOwogfQorCiAvKgotICoJSW5pdGlhbGl6ZSBxdW90YSBwb2ludGVycyBpbiBpbm9kZQotICoJV2UgZG8gdGhpbmdzIGluIGEgYml0IGNvbXBsaWNhdGVkIHdheSBidXQgYnkgdGhhdCB3ZSBhdm9pZCBjYWxsaW5nCi0gKglkcWdldCgpIGFuZCB0aHVzIGZpbGVzeXN0ZW0gY2FsbGJhY2tzIHVuZGVyIGRxcHRyX3NlbS4KKyAqIEluaXRpYWxpemUgcXVvdGEgcG9pbnRlcnMgaW4gaW5vZGUKKyAqCisgKiBXZSBkbyB0aGluZ3MgaW4gYSBiaXQgY29tcGxpY2F0ZWQgd2F5IGJ1dCBieSB0aGF0IHdlIGF2b2lkIGNhbGxpbmcKKyAqIGRxZ2V0KCkgYW5kIHRodXMgZmlsZXN5c3RlbSBjYWxsYmFja3MgdW5kZXIgZHFwdHJfc2VtLgorICoKKyAqIEl0IGlzIGJldHRlciB0byBjYWxsIHRoaXMgZnVuY3Rpb24gb3V0c2lkZSBvZiBhbnkgdHJhbnNhY3Rpb24gYXMgaXQKKyAqIG1pZ2h0IG5lZWQgYSBsb3Qgb2Ygc3BhY2UgaW4gam91cm5hbCBmb3IgZHF1b3Qgc3RydWN0dXJlIGFsbG9jYXRpb24uCiAgKi8KLWludCBkcXVvdF9pbml0aWFsaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQorc3RhdGljIHZvaWQgX19kcXVvdF9pbml0aWFsaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQogewogCXVuc2lnbmVkIGludCBpZCA9IDA7Ci0JaW50IGNudCwgcmV0ID0gMDsKLQlzdHJ1Y3QgZHF1b3QgKmdvdFtNQVhRVU9UQVNdID0geyBOVUxMLCBOVUxMIH07CisJaW50IGNudDsKKwlzdHJ1Y3QgZHF1b3QgKmdvdFtNQVhRVU9UQVNdOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKKwlxc2l6ZV90IHJzdjsKIAogCS8qIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQogICAgICAgICAgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXggKi8KLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCi0JCXJldHVybiAwOworCWlmICghc2JfYW55X3F1b3RhX2FjdGl2ZShpbm9kZS0+aV9zYikgfHwgSVNfTk9RVU9UQShpbm9kZSkpCisJCXJldHVybjsKIAogCS8qIEZpcnN0IGdldCByZWZlcmVuY2VzIHRvIHN0cnVjdHVyZXMgd2UgbWlnaHQgbmVlZC4gKi8KIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKKwkJZ290W2NudF0gPSBOVUxMOwogCQlpZiAodHlwZSAhPSAtMSAmJiBjbnQgIT0gdHlwZSkKIAkJCWNvbnRpbnVlOwogCQlzd2l0Y2ggKGNudCkgewpAQCAtMTI3NSw3ICsxMzMyLDYgQEAKIAl9CiAKIAlkb3duX3dyaXRlKCZzYl9kcW9wdChzYiktPmRxcHRyX3NlbSk7Ci0JLyogSGF2aW5nIGRxcHRyX3NlbSB3ZSBrbm93IE5PUVVPVEEgZmxhZ3MgY2FuJ3QgYmUgYWx0ZXJlZC4uLiAqLwogCWlmIChJU19OT1FVT1RBKGlub2RlKSkKIAkJZ290byBvdXRfZXJyOwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewpAQCAtMTI4NywyMCArMTM0MywzMSBAQAogCQlpZiAoIWlub2RlLT5pX2RxdW90W2NudF0pIHsKIAkJCWlub2RlLT5pX2RxdW90W2NudF0gPSBnb3RbY250XTsKIAkJCWdvdFtjbnRdID0gTlVMTDsKKwkJCS8qCisJCQkgKiBNYWtlIHF1b3RhIHJlc2VydmF0aW9uIHN5c3RlbSBoYXBweSBpZiBzb21lb25lCisJCQkgKiBkaWQgYSB3cml0ZSBiZWZvcmUgcXVvdGEgd2FzIHR1cm5lZCBvbgorCQkJICovCisJCQlyc3YgPSBpbm9kZV9nZXRfcnN2X3NwYWNlKGlub2RlKTsKKwkJCWlmICh1bmxpa2VseShyc3YpKQorCQkJCWRxdW90X3Jlc3Zfc3BhY2UoaW5vZGUtPmlfZHF1b3RbY250XSwgcnN2KTsKIAkJfQogCX0KIG91dF9lcnI6CiAJdXBfd3JpdGUoJnNiX2Rxb3B0KHNiKS0+ZHFwdHJfc2VtKTsKIAkvKiBEcm9wIHVudXNlZCByZWZlcmVuY2VzICovCiAJZHFwdXRfYWxsKGdvdCk7Ci0JcmV0dXJuIHJldDsKK30KKwordm9pZCBkcXVvdF9pbml0aWFsaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJX19kcXVvdF9pbml0aWFsaXplKGlub2RlLCAtMSk7CiB9CiBFWFBPUlRfU1lNQk9MKGRxdW90X2luaXRpYWxpemUpOwogCiAvKgogICogCVJlbGVhc2UgYWxsIHF1b3RhcyByZWZlcmVuY2VkIGJ5IGlub2RlCiAgKi8KLWludCBkcXVvdF9kcm9wKHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgdm9pZCBfX2RxdW90X2Ryb3Aoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlpbnQgY250OwogCXN0cnVjdCBkcXVvdCAqcHV0W01BWFFVT1RBU107CkBAIC0xMzEyLDMzICsxMzc5LDMyIEBACiAJfQogCXVwX3dyaXRlKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CiAJZHFwdXRfYWxsKHB1dCk7Ci0JcmV0dXJuIDA7Cit9CisKK3ZvaWQgZHF1b3RfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWludCBjbnQ7CisKKwlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCisJCXJldHVybjsKKworCS8qCisJICogVGVzdCBiZWZvcmUgY2FsbGluZyB0byBydWxlIG91dCBjYWxscyBmcm9tIHByb2MgYW5kIHN1Y2gKKwkgKiB3aGVyZSB3ZSBhcmUgbm90IGFsbG93ZWQgdG8gYmxvY2suIE5vdGUgdGhhdCB0aGlzIGlzCisJICogYWN0dWFsbHkgcmVsaWFibGUgdGVzdCBldmVuIHdpdGhvdXQgdGhlIGxvY2sgLSB0aGUgY2FsbGVyCisJICogbXVzdCBhc3N1cmUgdGhhdCBub2JvZHkgY2FuIGNvbWUgYWZ0ZXIgdGhlIERRVU9UX0RST1AgYW5kCisJICogYWRkIHF1b3RhIHBvaW50ZXJzIGJhY2sgYW55d2F5LgorCSAqLworCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgeworCQlpZiAoaW5vZGUtPmlfZHF1b3RbY250XSkKKwkJCWJyZWFrOworCX0KKworCWlmIChjbnQgPCBNQVhRVU9UQVMpCisJCV9fZHF1b3RfZHJvcChpbm9kZSk7CiB9CiBFWFBPUlRfU1lNQk9MKGRxdW90X2Ryb3ApOwogCi0vKiBXcmFwcGVyIHRvIHJlbW92ZSByZWZlcmVuY2VzIHRvIHF1b3RhIHN0cnVjdHVyZXMgZnJvbSBpbm9kZSAqLwotdm9pZCB2ZnNfZHFfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCS8qIEhlcmUgd2UgY2FuIGdldCBhcmJpdHJhcnkgaW5vZGUgZnJvbSBjbGVhcl9pbm9kZSgpIHNvIHdlIGhhdmUKLQkgKiB0byBiZSBjYXJlZnVsLiBPVE9IIHdlIGRvbid0IG5lZWQgbG9ja2luZyBhcyBxdW90YSBvcGVyYXRpb25zCi0JICogYXJlIGFsbG93ZWQgdG8gY2hhbmdlIG9ubHkgYXQgbW91bnQgdGltZSAqLwotCWlmICghSVNfTk9RVU9UQShpbm9kZSkgJiYgaW5vZGUtPmlfc2IgJiYgaW5vZGUtPmlfc2ItPmRxX29wCi0JICAgICYmIGlub2RlLT5pX3NiLT5kcV9vcC0+ZHJvcCkgewotCQlpbnQgY250OwotCQkvKiBUZXN0IGJlZm9yZSBjYWxsaW5nIHRvIHJ1bGUgb3V0IGNhbGxzIGZyb20gcHJvYyBhbmQgc3VjaAotICAgICAgICAgICAgICAgICAqIHdoZXJlIHdlIGFyZSBub3QgYWxsb3dlZCB0byBibG9jay4gTm90ZSB0aGF0IHRoaXMgaXMKLQkJICogYWN0dWFsbHkgcmVsaWFibGUgdGVzdCBldmVuIHdpdGhvdXQgdGhlIGxvY2sgLSB0aGUgY2FsbGVyCi0JCSAqIG11c3QgYXNzdXJlIHRoYXQgbm9ib2R5IGNhbiBjb21lIGFmdGVyIHRoZSBEUVVPVF9EUk9QIGFuZAotCQkgKiBhZGQgcXVvdGEgcG9pbnRlcnMgYmFjayBhbnl3YXkgKi8KLQkJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKQotCQkJaWYgKGlub2RlLT5pX2RxdW90W2NudF0pCi0JCQkJYnJlYWs7Ci0JCWlmIChjbnQgPCBNQVhRVU9UQVMpCi0JCQlpbm9kZS0+aV9zYi0+ZHFfb3AtPmRyb3AoaW5vZGUpOwotCX0KLX0KLUVYUE9SVF9TWU1CT0wodmZzX2RxX2Ryb3ApOwotCiAvKgogICogaW5vZGVfcmVzZXJ2ZWRfc3BhY2UgaXMgbWFuYWdlZCBpbnRlcm5hbGx5IGJ5IHF1b3RhLCBhbmQgcHJvdGVjdGVkIGJ5CiAgKiBpX2xvY2sgc2ltaWxhciB0byBpX2Jsb2NrcytpX2J5dGVzLgpAQCAtMTM1MSwyOCArMTQxNywzMCBAQAogCXJldHVybiBpbm9kZS0+aV9zYi0+ZHFfb3AtPmdldF9yZXNlcnZlZF9zcGFjZShpbm9kZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGlub2RlX2FkZF9yc3Zfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCit2b2lkIGlub2RlX2FkZF9yc3Zfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCiB7CiAJc3Bpbl9sb2NrKCZpbm9kZS0+aV9sb2NrKTsKIAkqaW5vZGVfcmVzZXJ2ZWRfc3BhY2UoaW5vZGUpICs9IG51bWJlcjsKIAlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CiB9CitFWFBPUlRfU1lNQk9MKGlub2RlX2FkZF9yc3Zfc3BhY2UpOwogCi0KLXN0YXRpYyB2b2lkIGlub2RlX2NsYWltX3Jzdl9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcikKK3ZvaWQgaW5vZGVfY2xhaW1fcnN2X3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQogewogCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJKmlub2RlX3Jlc2VydmVkX3NwYWNlKGlub2RlKSAtPSBudW1iZXI7CiAJX19pbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG51bWJlcik7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogfQorRVhQT1JUX1NZTUJPTChpbm9kZV9jbGFpbV9yc3Zfc3BhY2UpOwogCi1zdGF0aWMgdm9pZCBpbm9kZV9zdWJfcnN2X3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQordm9pZCBpbm9kZV9zdWJfcnN2X3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQogewogCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CiAJKmlub2RlX3Jlc2VydmVkX3NwYWNlKGlub2RlKSAtPSBudW1iZXI7CiAJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOwogfQorRVhQT1JUX1NZTUJPTChpbm9kZV9zdWJfcnN2X3NwYWNlKTsKIAogc3RhdGljIHFzaXplX3QgaW5vZGVfZ2V0X3Jzdl9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpAQCAtMTQwNCwzOCArMTQ3MiwzNCBAQAogfQogCiAvKgotICogRm9sbG93aW5nIGZvdXIgZnVuY3Rpb25zIHVwZGF0ZSBpX2Jsb2NrcytpX2J5dGVzIGZpZWxkcyBhbmQKLSAqIHF1b3RhIGluZm9ybWF0aW9uICh0b2dldGhlciB3aXRoIGFwcHJvcHJpYXRlIGNoZWNrcykKLSAqIE5PVEU6IFdlIGFic29sdXRlbHkgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGNhbGxlciBkaXJ0aWVzCi0gKiB0aGUgaW5vZGUgKHVzdWFsbHkgbWFjcm9zIGluIHF1b3Rhb3BzLmggY2FyZSBhYm91dCB0aGlzKSBhbmQKLSAqIGhvbGRzIGEgaGFuZGxlIGZvciB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBzbyB0aGF0IGRxdW90IHdyaXRlIGFuZAotICogaW5vZGUgd3JpdGUgZ28gaW50byB0aGUgc2FtZSB0cmFuc2FjdGlvbi4KKyAqIFRoaXMgZnVuY3Rpb25zIHVwZGF0ZXMgaV9ibG9ja3MraV9ieXRlcyBmaWVsZHMgYW5kIHF1b3RhIGluZm9ybWF0aW9uCisgKiAodG9nZXRoZXIgd2l0aCBhcHByb3ByaWF0ZSBjaGVja3MpLgorICoKKyAqIE5PVEU6IFdlIGFic29sdXRlbHkgcmVseSBvbiB0aGUgZmFjdCB0aGF0IGNhbGxlciBkaXJ0aWVzIHRoZSBpbm9kZQorICogKHVzdWFsbHkgaGVscGVycyBpbiBxdW90YW9wcy5oIGNhcmUgYWJvdXQgdGhpcykgYW5kIGhvbGRzIGEgaGFuZGxlIGZvcgorICogdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gc28gdGhhdCBkcXVvdCB3cml0ZSBhbmQgaW5vZGUgd3JpdGUgZ28gaW50byB0aGUKKyAqIHNhbWUgdHJhbnNhY3Rpb24uCiAgKi8KIAogLyoKICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBibG9jaywgYnV0IG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyBpcyB1cGRhdGVkCiAgKi8KIGludCBfX2RxdW90X2FsbG9jX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyLAotCQkJaW50IHdhcm4sIGludCByZXNlcnZlKQorCQlpbnQgd2FybiwgaW50IHJlc2VydmUpCiB7Ci0JaW50IGNudCwgcmV0ID0gUVVPVEFfT0s7CisJaW50IGNudCwgcmV0ID0gMDsKIAljaGFyIHdhcm50eXBlW01BWFFVT1RBU107CiAKIAkvKgogCSAqIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQogCSAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleAogCSAqLwotCWlmIChJU19OT1FVT1RBKGlub2RlKSkgeworCWlmICghc2JfYW55X3F1b3RhX2FjdGl2ZShpbm9kZS0+aV9zYikgfHwgSVNfTk9RVU9UQShpbm9kZSkpIHsKIAkJaW5vZGVfaW5jcl9zcGFjZShpbm9kZSwgbnVtYmVyLCByZXNlcnZlKTsKIAkJZ290byBvdXQ7CiAJfQogCiAJZG93bl9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7Ci0JCWlub2RlX2luY3Jfc3BhY2UoaW5vZGUsIG51bWJlciwgcmVzZXJ2ZSk7Ci0JCWdvdG8gb3V0X3VubG9jazsKLQl9Ci0KIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCiAJCXdhcm50eXBlW2NudF0gPSBRVU9UQV9OTF9OT1dBUk47CiAKQEAgLTE0NDMsOSArMTUwNyw5IEBACiAJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7CiAJCWlmICghaW5vZGUtPmlfZHF1b3RbY250XSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoY2hlY2tfYmRxKGlub2RlLT5pX2RxdW90W2NudF0sIG51bWJlciwgd2Fybiwgd2FybnR5cGUrY250KQotCQkgICAgPT0gTk9fUVVPVEEpIHsKLQkJCXJldCA9IE5PX1FVT1RBOworCQlyZXQgPSBjaGVja19iZHEoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyLCAhd2FybiwKKwkJCQl3YXJudHlwZStjbnQpOworCQlpZiAocmV0KSB7CiAJCQlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKIAkJCWdvdG8gb3V0X2ZsdXNoX3dhcm47CiAJCX0KQEAgLTE0NjYsNjEgKzE1MzAsNDUgQEAKIAltYXJrX2FsbF9kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdCk7CiBvdXRfZmx1c2hfd2FybjoKIAlmbHVzaF93YXJuaW5ncyhpbm9kZS0+aV9kcXVvdCwgd2FybnR5cGUpOwotb3V0X3VubG9jazoKIAl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KLQotaW50IGRxdW90X2FsbG9jX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyLCBpbnQgd2FybikKLXsKLQlyZXR1cm4gX19kcXVvdF9hbGxvY19zcGFjZShpbm9kZSwgbnVtYmVyLCB3YXJuLCAwKTsKLX0KLUVYUE9SVF9TWU1CT0woZHF1b3RfYWxsb2Nfc3BhY2UpOwotCi1pbnQgZHF1b3RfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlciwgaW50IHdhcm4pCi17Ci0JcmV0dXJuIF9fZHF1b3RfYWxsb2Nfc3BhY2UoaW5vZGUsIG51bWJlciwgd2FybiwgMSk7Ci19Ci1FWFBPUlRfU1lNQk9MKGRxdW90X3Jlc2VydmVfc3BhY2UpOworRVhQT1JUX1NZTUJPTChfX2RxdW90X2FsbG9jX3NwYWNlKTsKIAogLyoKICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBibG9jaywgYnV0IG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyBpcyB1cGRhdGVkCiAgKi8KLWludCBkcXVvdF9hbGxvY19pbm9kZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcikKK2ludCBkcXVvdF9hbGxvY19pbm9kZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWludCBjbnQsIHJldCA9IE5PX1FVT1RBOworCWludCBjbnQsIHJldCA9IDA7CiAJY2hhciB3YXJudHlwZVtNQVhRVU9UQVNdOwogCiAJLyogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIG11dGV4IC0gc29sdmVzIGRlYWRsb2NrcyB3aGVuIHdlCiAgICAgICAgICAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleCAqLwotCWlmIChJU19OT1FVT1RBKGlub2RlKSkKLQkJcmV0dXJuIFFVT1RBX09LOworCWlmICghc2JfYW55X3F1b3RhX2FjdGl2ZShpbm9kZS0+aV9zYikgfHwgSVNfTk9RVU9UQShpbm9kZSkpCisJCXJldHVybiAwOwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykKIAkJd2FybnR5cGVbY250XSA9IFFVT1RBX05MX05PV0FSTjsKIAlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLQkJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCQlyZXR1cm4gUVVPVEFfT0s7Ci0JfQogCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKIAkJaWYgKCFpbm9kZS0+aV9kcXVvdFtjbnRdKQogCQkJY29udGludWU7Ci0JCWlmIChjaGVja19pZHEoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyLCB3YXJudHlwZStjbnQpCi0JCSAgICA9PSBOT19RVU9UQSkKKwkJcmV0ID0gY2hlY2tfaWRxKGlub2RlLT5pX2RxdW90W2NudF0sIDEsIHdhcm50eXBlICsgY250KTsKKwkJaWYgKHJldCkKIAkJCWdvdG8gd2Fybl9wdXRfYWxsOwogCX0KIAogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewogCQlpZiAoIWlub2RlLT5pX2RxdW90W2NudF0pCiAJCQljb250aW51ZTsKLQkJZHF1b3RfaW5jcl9pbm9kZXMoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKKwkJZHF1b3RfaW5jcl9pbm9kZXMoaW5vZGUtPmlfZHF1b3RbY250XSwgMSk7CiAJfQotCXJldCA9IFFVT1RBX09LOworCiB3YXJuX3B1dF9hbGw6CiAJc3Bpbl91bmxvY2soJmRxX2RhdGFfbG9jayk7Ci0JaWYgKHJldCA9PSBRVU9UQV9PSykKKwlpZiAocmV0ID09IDApCiAJCW1hcmtfYWxsX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90KTsKIAlmbHVzaF93YXJuaW5ncyhpbm9kZS0+aV9kcXVvdCwgd2FybnR5cGUpOwogCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKQEAgLTE1MjgsMjMgKzE1NzYsMTkgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHF1b3RfYWxsb2NfaW5vZGUpOwogCi1pbnQgZHF1b3RfY2xhaW1fc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCisvKgorICogQ29udmVydCBpbi1tZW1vcnkgcmVzZXJ2ZWQgcXVvdGFzIHRvIHJlYWwgY29uc3VtZWQgcXVvdGFzCisgKi8KK2ludCBkcXVvdF9jbGFpbV9zcGFjZV9ub2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQogewogCWludCBjbnQ7Ci0JaW50IHJldCA9IFFVT1RBX09LOwogCi0JaWYgKElTX05PUVVPVEEoaW5vZGUpKSB7CisJaWYgKCFzYl9hbnlfcXVvdGFfYWN0aXZlKGlub2RlLT5pX3NiKSB8fCBJU19OT1FVT1RBKGlub2RlKSkgewogCQlpbm9kZV9jbGFpbV9yc3Zfc3BhY2UoaW5vZGUsIG51bWJlcik7Ci0JCWdvdG8gb3V0OworCQlyZXR1cm4gMDsKIAl9CiAKIAlkb3duX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCXsKLQkJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCQlpbm9kZV9jbGFpbV9yc3Zfc3BhY2UoaW5vZGUsIG51bWJlcik7Ci0JCWdvdG8gb3V0OwotCX0KLQogCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKIAkvKiBDbGFpbSByZXNlcnZlZCBxdW90YXMgdG8gYWxsb2NhdGVkIHF1b3RhcyAqLwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewpAQCAtMTU1NywzMyArMTYwMSwyNiBAQAogCXNwaW5fdW5sb2NrKCZkcV9kYXRhX2xvY2spOwogCW1hcmtfYWxsX2RxdW90X2RpcnR5KGlub2RlLT5pX2RxdW90KTsKIAl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woZHF1b3RfY2xhaW1fc3BhY2UpOworRVhQT1JUX1NZTUJPTChkcXVvdF9jbGFpbV9zcGFjZV9ub2RpcnR5KTsKIAogLyoKICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBibG9jaywgYnV0IG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyBpcyB1cGRhdGVkCiAgKi8KLWludCBfX2RxdW90X2ZyZWVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCByZXNlcnZlKQordm9pZCBfX2RxdW90X2ZyZWVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCByZXNlcnZlKQogewogCXVuc2lnbmVkIGludCBjbnQ7CiAJY2hhciB3YXJudHlwZVtNQVhRVU9UQVNdOwogCiAJLyogRmlyc3QgdGVzdCBiZWZvcmUgYWNxdWlyaW5nIG11dGV4IC0gc29sdmVzIGRlYWRsb2NrcyB3aGVuIHdlCiAgICAgICAgICAqIHJlLWVudGVyIHRoZSBxdW90YSBjb2RlIGFuZCBhcmUgYWxyZWFkeSBob2xkaW5nIHRoZSBtdXRleCAqLwotCWlmIChJU19OT1FVT1RBKGlub2RlKSkgewotb3V0X3N1YjoKKwlpZiAoIXNiX2FueV9xdW90YV9hY3RpdmUoaW5vZGUtPmlfc2IpIHx8IElTX05PUVVPVEEoaW5vZGUpKSB7CiAJCWlub2RlX2RlY3Jfc3BhY2UoaW5vZGUsIG51bWJlciwgcmVzZXJ2ZSk7Ci0JCXJldHVybiBRVU9UQV9PSzsKKwkJcmV0dXJuOwogCX0KIAogCWRvd25fcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCS8qIE5vdyByZWNoZWNrIHJlbGlhYmx5IHdoZW4gaG9sZGluZyBkcXB0cl9zZW0gKi8KLQlpZiAoSVNfTk9RVU9UQShpbm9kZSkpIHsKLQkJdXBfcmVhZCgmc2JfZHFvcHQoaW5vZGUtPmlfc2IpLT5kcXB0cl9zZW0pOwotCQlnb3RvIG91dF9zdWI7Ci0JfQogCXNwaW5fbG9jaygmZHFfZGF0YV9sb2NrKTsKIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspIHsKIAkJaWYgKCFpbm9kZS0+aV9kcXVvdFtjbnRdKQpAQCAtMTYwMyw1NiArMTY0MCwzNCBAQAogb3V0X3VubG9jazoKIAlmbHVzaF93YXJuaW5ncyhpbm9kZS0+aV9kcXVvdCwgd2FybnR5cGUpOwogCXVwX3JlYWQoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKLQlyZXR1cm4gUVVPVEFfT0s7CiB9Ci0KLWludCBkcXVvdF9mcmVlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQotewotCXJldHVybiAgX19kcXVvdF9mcmVlX3NwYWNlKGlub2RlLCBudW1iZXIsIDApOwotfQotRVhQT1JUX1NZTUJPTChkcXVvdF9mcmVlX3NwYWNlKTsKLQotLyoKLSAqIFJlbGVhc2UgcmVzZXJ2ZWQgcXVvdGEgc3BhY2UKLSAqLwotdm9pZCBkcXVvdF9yZWxlYXNlX3Jlc2VydmVkX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQotewotCV9fZHF1b3RfZnJlZV9zcGFjZShpbm9kZSwgbnVtYmVyLCAxKTsKLQotfQotRVhQT1JUX1NZTUJPTChkcXVvdF9yZWxlYXNlX3Jlc2VydmVkX3NwYWNlKTsKK0VYUE9SVF9TWU1CT0woX19kcXVvdF9mcmVlX3NwYWNlKTsKIAogLyoKICAqIFRoaXMgb3BlcmF0aW9uIGNhbiBibG9jaywgYnV0IG9ubHkgYWZ0ZXIgZXZlcnl0aGluZyBpcyB1cGRhdGVkCiAgKi8KLWludCBkcXVvdF9mcmVlX2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKQordm9pZCBkcXVvdF9mcmVlX2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJdW5zaWduZWQgaW50IGNudDsKIAljaGFyIHdhcm50eXBlW01BWFFVT1RBU107CiAKIAkvKiBGaXJzdCB0ZXN0IGJlZm9yZSBhY3F1aXJpbmcgbXV0ZXggLSBzb2x2ZXMgZGVhZGxvY2tzIHdoZW4gd2UKICAgICAgICAgICogcmUtZW50ZXIgdGhlIHF1b3RhIGNvZGUgYW5kIGFyZSBhbHJlYWR5IGhvbGRpbmcgdGhlIG11dGV4ICovCi0JaWYgKElTX05PUVVPVEEoaW5vZGUpKQotCQlyZXR1cm4gUVVPVEFfT0s7CisJaWYgKCFzYl9hbnlfcXVvdGFfYWN0aXZlKGlub2RlLT5pX3NiKSB8fCBJU19OT1FVT1RBKGlub2RlKSkKKwkJcmV0dXJuOwogCiAJZG93bl9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JLyogTm93IHJlY2hlY2sgcmVsaWFibHkgd2hlbiBob2xkaW5nIGRxcHRyX3NlbSAqLwotCWlmIChJU19OT1FVT1RBKGlub2RlKSkgewotCQl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JCXJldHVybiBRVU9UQV9PSzsKLQl9CiAJc3Bpbl9sb2NrKCZkcV9kYXRhX2xvY2spOwogCWZvciAoY250ID0gMDsgY250IDwgTUFYUVVPVEFTOyBjbnQrKykgewogCQlpZiAoIWlub2RlLT5pX2RxdW90W2NudF0pCiAJCQljb250aW51ZTsKLQkJd2FybnR5cGVbY250XSA9IGluZm9faWRxX2ZyZWUoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKLQkJZHF1b3RfZGVjcl9pbm9kZXMoaW5vZGUtPmlfZHF1b3RbY250XSwgbnVtYmVyKTsKKwkJd2FybnR5cGVbY250XSA9IGluZm9faWRxX2ZyZWUoaW5vZGUtPmlfZHF1b3RbY250XSwgMSk7CisJCWRxdW90X2RlY3JfaW5vZGVzKGlub2RlLT5pX2RxdW90W2NudF0sIDEpOwogCX0KIAlzcGluX3VubG9jaygmZHFfZGF0YV9sb2NrKTsKIAltYXJrX2FsbF9kcXVvdF9kaXJ0eShpbm9kZS0+aV9kcXVvdCk7CiAJZmx1c2hfd2FybmluZ3MoaW5vZGUtPmlfZHF1b3QsIHdhcm50eXBlKTsKIAl1cF9yZWFkKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JcmV0dXJuIFFVT1RBX09LOwogfQogRVhQT1JUX1NZTUJPTChkcXVvdF9mcmVlX2lub2RlKTsKIApAQCAtMTY2MiwzNyArMTY3NywzMSBAQAogICogVGhpcyBvcGVyYXRpb24gY2FuIGJsb2NrLCBidXQgb25seSBhZnRlciBldmVyeXRoaW5nIGlzIHVwZGF0ZWQKICAqIEEgdHJhbnNhY3Rpb24gbXVzdCBiZSBzdGFydGVkIHdoZW4gZW50ZXJpbmcgdGhpcyBmdW5jdGlvbi4KICAqLwotaW50IGRxdW90X3RyYW5zZmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpYXR0ciAqaWF0dHIpCitzdGF0aWMgaW50IF9fZHF1b3RfdHJhbnNmZXIoc3RydWN0IGlub2RlICppbm9kZSwgcWlkX3QgKmNoaWQsIHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKIAlxc2l6ZV90IHNwYWNlLCBjdXJfc3BhY2U7CiAJcXNpemVfdCByc3Zfc3BhY2UgPSAwOwogCXN0cnVjdCBkcXVvdCAqdHJhbnNmZXJfZnJvbVtNQVhRVU9UQVNdOwogCXN0cnVjdCBkcXVvdCAqdHJhbnNmZXJfdG9bTUFYUVVPVEFTXTsKLQlpbnQgY250LCByZXQgPSBRVU9UQV9PSzsKLQlpbnQgY2h1aWQgPSBpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1VJRCAmJiBpbm9kZS0+aV91aWQgIT0gaWF0dHItPmlhX3VpZCwKLQkgICAgY2hnaWQgPSBpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0dJRCAmJiBpbm9kZS0+aV9naWQgIT0gaWF0dHItPmlhX2dpZDsKKwlpbnQgY250LCByZXQgPSAwOwogCWNoYXIgd2FybnR5cGVfdG9bTUFYUVVPVEFTXTsKIAljaGFyIHdhcm50eXBlX2Zyb21faW5vZGVzW01BWFFVT1RBU10sIHdhcm50eXBlX2Zyb21fc3BhY2VbTUFYUVVPVEFTXTsKIAogCS8qIEZpcnN0IHRlc3QgYmVmb3JlIGFjcXVpcmluZyBtdXRleCAtIHNvbHZlcyBkZWFkbG9ja3Mgd2hlbiB3ZQogICAgICAgICAgKiByZS1lbnRlciB0aGUgcXVvdGEgY29kZSBhbmQgYXJlIGFscmVhZHkgaG9sZGluZyB0aGUgbXV0ZXggKi8KIAlpZiAoSVNfTk9RVU9UQShpbm9kZSkpCi0JCXJldHVybiBRVU9UQV9PSzsKKwkJcmV0dXJuIDA7CiAJLyogSW5pdGlhbGl6ZSB0aGUgYXJyYXlzICovCiAJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7CiAJCXRyYW5zZmVyX2Zyb21bY250XSA9IE5VTEw7CiAJCXRyYW5zZmVyX3RvW2NudF0gPSBOVUxMOwogCQl3YXJudHlwZV90b1tjbnRdID0gUVVPVEFfTkxfTk9XQVJOOwogCX0KLQlpZiAoY2h1aWQpCi0JCXRyYW5zZmVyX3RvW1VTUlFVT1RBXSA9IGRxZ2V0KGlub2RlLT5pX3NiLCBpYXR0ci0+aWFfdWlkLAotCQkJCQkgICAgICBVU1JRVU9UQSk7Ci0JaWYgKGNoZ2lkKQotCQl0cmFuc2Zlcl90b1tHUlBRVU9UQV0gPSBkcWdldChpbm9kZS0+aV9zYiwgaWF0dHItPmlhX2dpZCwKLQkJCQkJICAgICAgR1JQUVVPVEEpOwotCisJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7CisJCWlmIChtYXNrICYgKDEgPDwgY250KSkKKwkJCXRyYW5zZmVyX3RvW2NudF0gPSBkcWdldChpbm9kZS0+aV9zYiwgY2hpZFtjbnRdLCBjbnQpOworCX0KIAlkb3duX3dyaXRlKCZzYl9kcW9wdChpbm9kZS0+aV9zYiktPmRxcHRyX3NlbSk7Ci0JLyogTm93IHJlY2hlY2sgcmVsaWFibHkgd2hlbiBob2xkaW5nIGRxcHRyX3NlbSAqLwogCWlmIChJU19OT1FVT1RBKGlub2RlKSkgewkvKiBGaWxlIHdpdGhvdXQgcXVvdGEgYWNjb3VudGluZz8gKi8KIAkJdXBfd3JpdGUoJnNiX2Rxb3B0KGlub2RlLT5pX3NiKS0+ZHFwdHJfc2VtKTsKIAkJZ290byBwdXRfYWxsOwpAQCAtMTcwNiw5ICsxNzE1LDExIEBACiAJCWlmICghdHJhbnNmZXJfdG9bY250XSkKIAkJCWNvbnRpbnVlOwogCQl0cmFuc2Zlcl9mcm9tW2NudF0gPSBpbm9kZS0+aV9kcXVvdFtjbnRdOwotCQlpZiAoY2hlY2tfaWRxKHRyYW5zZmVyX3RvW2NudF0sIDEsIHdhcm50eXBlX3RvICsgY250KSA9PQotCQkgICAgTk9fUVVPVEEgfHwgY2hlY2tfYmRxKHRyYW5zZmVyX3RvW2NudF0sIHNwYWNlLCAwLAotCQkgICAgd2FybnR5cGVfdG8gKyBjbnQpID09IE5PX1FVT1RBKQorCQlyZXQgPSBjaGVja19pZHEodHJhbnNmZXJfdG9bY250XSwgMSwgd2FybnR5cGVfdG8gKyBjbnQpOworCQlpZiAocmV0KQorCQkJZ290byBvdmVyX3F1b3RhOworCQlyZXQgPSBjaGVja19iZHEodHJhbnNmZXJfdG9bY250XSwgc3BhY2UsIDAsIHdhcm50eXBlX3RvICsgY250KTsKKwkJaWYgKHJldCkKIAkJCWdvdG8gb3Zlcl9xdW90YTsKIAl9CiAKQEAgLTE3NjIsMjIgKzE3NzMsMzIgQEAKIAkvKiBDbGVhciBkcXVvdCBwb2ludGVycyB3ZSBkb24ndCB3YW50IHRvIGRxcHV0KCkgKi8KIAlmb3IgKGNudCA9IDA7IGNudCA8IE1BWFFVT1RBUzsgY250KyspCiAJCXRyYW5zZmVyX2Zyb21bY250XSA9IE5VTEw7Ci0JcmV0ID0gTk9fUVVPVEE7CiAJZ290byB3YXJuX3B1dF9hbGw7CiB9Ci1FWFBPUlRfU1lNQk9MKGRxdW90X3RyYW5zZmVyKTsKIAotLyogV3JhcHBlciBmb3IgdHJhbnNmZXJyaW5nIG93bmVyc2hpcCBvZiBhbiBpbm9kZSAqLwotaW50IHZmc19kcV90cmFuc2ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKQorLyogV3JhcHBlciBmb3IgdHJhbnNmZXJyaW5nIG93bmVyc2hpcCBvZiBhbiBpbm9kZSBmb3IgdWlkL2dpZCBvbmx5CisgKiBDYWxsZWQgZnJvbSBGU1hYWF9zZXRhdHRyKCkKKyAqLworaW50IGRxdW90X3RyYW5zZmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpYXR0ciAqaWF0dHIpCiB7CisJcWlkX3QgY2hpZFtNQVhRVU9UQVNdOworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDA7CisKKwlpZiAoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9VSUQgJiYgaWF0dHItPmlhX3VpZCAhPSBpbm9kZS0+aV91aWQpIHsKKwkJbWFzayB8PSAxIDw8IFVTUlFVT1RBOworCQljaGlkW1VTUlFVT1RBXSA9IGlhdHRyLT5pYV91aWQ7CisJfQorCWlmIChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX0dJRCAmJiBpYXR0ci0+aWFfZ2lkICE9IGlub2RlLT5pX2dpZCkgeworCQltYXNrIHw9IDEgPDwgR1JQUVVPVEE7CisJCWNoaWRbR1JQUVVPVEFdID0gaWF0dHItPmlhX2dpZDsKKwl9CiAJaWYgKHNiX2FueV9xdW90YV9hY3RpdmUoaW5vZGUtPmlfc2IpICYmICFJU19OT1FVT1RBKGlub2RlKSkgewotCQl2ZnNfZHFfaW5pdChpbm9kZSk7Ci0JCWlmIChpbm9kZS0+aV9zYi0+ZHFfb3AtPnRyYW5zZmVyKGlub2RlLCBpYXR0cikgPT0gTk9fUVVPVEEpCi0JCQlyZXR1cm4gMTsKKwkJZHF1b3RfaW5pdGlhbGl6ZShpbm9kZSk7CisJCXJldHVybiBfX2RxdW90X3RyYW5zZmVyKGlub2RlLCBjaGlkLCBtYXNrKTsKIAl9CiAJcmV0dXJuIDA7CiB9Ci1FWFBPUlRfU1lNQk9MKHZmc19kcV90cmFuc2Zlcik7CitFWFBPUlRfU1lNQk9MKGRxdW90X3RyYW5zZmVyKTsKIAogLyoKICAqIFdyaXRlIGluZm8gb2YgcXVvdGEgZmlsZSB0byBkaXNrCkBAIC0xNzk4LDEzICsxODE5LDYgQEAKICAqIERlZmluaXRpb25zIG9mIGRpc2txdW90YSBvcGVyYXRpb25zLgogICovCiBjb25zdCBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyBkcXVvdF9vcGVyYXRpb25zID0gewotCS5pbml0aWFsaXplCT0gZHF1b3RfaW5pdGlhbGl6ZSwKLQkuZHJvcAkJPSBkcXVvdF9kcm9wLAotCS5hbGxvY19zcGFjZQk9IGRxdW90X2FsbG9jX3NwYWNlLAotCS5hbGxvY19pbm9kZQk9IGRxdW90X2FsbG9jX2lub2RlLAotCS5mcmVlX3NwYWNlCT0gZHF1b3RfZnJlZV9zcGFjZSwKLQkuZnJlZV9pbm9kZQk9IGRxdW90X2ZyZWVfaW5vZGUsCi0JLnRyYW5zZmVyCT0gZHF1b3RfdHJhbnNmZXIsCiAJLndyaXRlX2RxdW90CT0gZHF1b3RfY29tbWl0LAogCS5hY3F1aXJlX2RxdW90CT0gZHF1b3RfYWNxdWlyZSwKIAkucmVsZWFzZV9kcXVvdAk9IGRxdW90X3JlbGVhc2UsCkBAIC0xODE1LDYgKzE4MjksMjAgQEAKIH07CiAKIC8qCisgKiBHZW5lcmljIGhlbHBlciBmb3IgLT5vcGVuIG9uIGZpbGVzeXN0ZW1zIHN1cHBvcnRpbmcgZGlzayBxdW90YXMuCisgKi8KK2ludCBkcXVvdF9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJaW50IGVycm9yOworCisJZXJyb3IgPSBnZW5lcmljX2ZpbGVfb3Blbihpbm9kZSwgZmlsZSk7CisJaWYgKCFlcnJvciAmJiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKQorCQlkcXVvdF9pbml0aWFsaXplKGlub2RlKTsKKwlyZXR1cm4gZXJyb3I7Cit9CitFWFBPUlRfU1lNQk9MKGRxdW90X2ZpbGVfb3Blbik7CisKKy8qCiAgKiBUdXJuIHF1b3RhIG9mZiBvbiBhIGRldmljZS4gdHlwZSA9PSAtMSA9PT4gcXVvdGFvZmYgZm9yIGFsbCB0eXBlcyAodW1vdW50KQogICovCiBpbnQgdmZzX3F1b3RhX2Rpc2FibGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHVuc2lnbmVkIGludCBmbGFncykKQEAgLTE5OTMsMTEgKzIwMjEsMTMgQEAKIAl9CiAKIAlpZiAoIShkcW9wdC0+ZmxhZ3MgJiBEUVVPVF9RVU9UQV9TWVNfRklMRSkpIHsKLQkJLyogQXMgd2UgYnlwYXNzIHRoZSBwYWdlY2FjaGUgd2UgbXVzdCBub3cgZmx1c2ggdGhlIGlub2RlIHNvCi0JCSAqIHRoYXQgd2Ugc2VlIGFsbCB0aGUgY2hhbmdlcyBmcm9tIHVzZXJzcGFjZS4uLiAqLwotCQl3cml0ZV9pbm9kZV9ub3coaW5vZGUsIDEpOwotCQkvKiBBbmQgbm93IGZsdXNoIHRoZSBibG9jayBjYWNoZSBzbyB0aGF0IGtlcm5lbCBzZWVzIHRoZQotCQkgKiBjaGFuZ2VzICovCisJCS8qIEFzIHdlIGJ5cGFzcyB0aGUgcGFnZWNhY2hlIHdlIG11c3Qgbm93IGZsdXNoIGFsbCB0aGUKKwkJICogZGlydHkgZGF0YSBhbmQgaW52YWxpZGF0ZSBjYWNoZXMgc28gdGhhdCBrZXJuZWwgc2VlcworCQkgKiBjaGFuZ2VzIGZyb20gdXNlcnNwYWNlLiBJdCBpcyBub3QgZW5vdWdoIHRvIGp1c3QgZmx1c2gKKwkJICogdGhlIHF1b3RhIGZpbGUgc2luY2UgaWYgYmxvY2tzaXplIDwgcGFnZXNpemUsIGludmFsaWRhdGlvbgorCQkgKiBvZiB0aGUgY2FjaGUgY291bGQgZmFpbCBiZWNhdXNlIG9mIG90aGVyIHVucmVsYXRlZCBkaXJ0eQorCQkgKiBkYXRhICovCisJCXN5bmNfZmlsZXN5c3RlbShzYik7CiAJCWludmFsaWRhdGVfYmRldihzYi0+c19iZGV2KTsKIAl9CiAJbXV0ZXhfbG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOwpAQCAtMjAxMCwxNCArMjA0MCwxNiBAQAogCQkvKiBXZSBkb24ndCB3YW50IHF1b3RhIGFuZCBhdGltZSBvbiBxdW90YSBmaWxlcyAoZGVhZGxvY2tzCiAJCSAqIHBvc3NpYmxlKSBBbHNvIG5vYm9keSBzaG91bGQgd3JpdGUgdG8gdGhlIGZpbGUgLSB3ZSB1c2UKIAkJICogc3BlY2lhbCBJTyBvcGVyYXRpb25zIHdoaWNoIGlnbm9yZSB0aGUgaW1tdXRhYmxlIGJpdC4gKi8KLQkJZG93bl93cml0ZSgmZHFvcHQtPmRxcHRyX3NlbSk7CiAJCW11dGV4X2xvY2tfbmVzdGVkKCZpbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9RVU9UQSk7CiAJCW9sZGZsYWdzID0gaW5vZGUtPmlfZmxhZ3MgJiAoU19OT0FUSU1FIHwgU19JTU1VVEFCTEUgfAogCQkJCQkgICAgIFNfTk9RVU9UQSk7CiAJCWlub2RlLT5pX2ZsYWdzIHw9IFNfTk9RVU9UQSB8IFNfTk9BVElNRSB8IFNfSU1NVVRBQkxFOwogCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJdXBfd3JpdGUoJmRxb3B0LT5kcXB0cl9zZW0pOwotCQlzYi0+ZHFfb3AtPmRyb3AoaW5vZGUpOworCQkvKgorCQkgKiBXaGVuIFNfTk9RVU9UQSBpcyBzZXQsIHJlbW92ZSBkcXVvdCByZWZlcmVuY2VzIGFzIG5vIG1vcmUKKwkJICogcmVmZXJlbmNlcyBjYW4gYmUgYWRkZWQKKwkJICovCisJCV9fZHF1b3RfZHJvcChpbm9kZSk7CiAJfQogCiAJZXJyb3IgPSAtRUlPOwpAQCAtMjA1MywxNCArMjA4NSwxMiBAQAogCWlwdXQoaW5vZGUpOwogb3V0X2xvY2s6CiAJaWYgKG9sZGZsYWdzICE9IC0xKSB7Ci0JCWRvd25fd3JpdGUoJmRxb3B0LT5kcXB0cl9zZW0pOwogCQltdXRleF9sb2NrX25lc3RlZCgmaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfUVVPVEEpOwogCQkvKiBTZXQgdGhlIGZsYWdzIGJhY2sgKGluIHRoZSBjYXNlIG9mIGFjY2lkZW50YWwgcXVvdGFvbigpCiAJCSAqIG9uIGEgd3JvbmcgZmlsZSB3ZSBkb24ndCB3YW50IHRvIG1lc3MgdXAgdGhlIGZsYWdzKSAqLwogCQlpbm9kZS0+aV9mbGFncyAmPSB+KFNfTk9BVElNRSB8IFNfTk9RVU9UQSB8IFNfSU1NVVRBQkxFKTsKIAkJaW5vZGUtPmlfZmxhZ3MgfD0gb2xkZmxhZ3M7CiAJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQl1cF93cml0ZSgmZHFvcHQtPmRxcHRyX3NlbSk7CiAJfQogCW11dGV4X3VubG9jaygmZHFvcHQtPmRxb25vZmZfbXV0ZXgpOwogb3V0X2ZtdDoKZGlmZiAtLWdpdCBhL2ZzL3F1b3RhL25ldGxpbmsuYyBiL2ZzL3F1b3RhL25ldGxpbmsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjYzZWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvcXVvdGEvbmV0bGluay5jCkBAIC0wLDAgKzEsOTUgQEAKKworI2luY2x1ZGUgPGxpbnV4L2NyZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgorCisvKiBOZXRsaW5rIGZhbWlseSBzdHJ1Y3R1cmUgZm9yIHF1b3RhICovCitzdGF0aWMgc3RydWN0IGdlbmxfZmFtaWx5IHF1b3RhX2dlbmxfZmFtaWx5ID0geworCS5pZCA9IEdFTkxfSURfR0VORVJBVEUsCisJLmhkcnNpemUgPSAwLAorCS5uYW1lID0gIlZGU19EUVVPVCIsCisJLnZlcnNpb24gPSAxLAorCS5tYXhhdHRyID0gUVVPVEFfTkxfQV9NQVgsCit9OworCisvKioKKyAqIHF1b3RhX3NlbmRfd2FybmluZyAtIFNlbmQgd2FybmluZyB0byB1c2Vyc3BhY2UgYWJvdXQgZXhjZWVkZWQgcXVvdGEKKyAqIEB0eXBlOiBUaGUgcXVvdGEgdHlwZTogVVNSUVFVT1RBLCBHUlBRVU9UQSwuLi4KKyAqIEBpZDogVGhlIHVzZXIgb3IgZ3JvdXAgaWQgb2YgdGhlIHF1b3RhIHRoYXQgd2FzIGV4Y2VlZGVkCisgKiBAZGV2OiBUaGUgZGV2aWNlIG9uIHdoaWNoIHRoZSBmcyBpcyBtb3VudGVkIChzYi0+c19kZXYpCisgKiBAd2FybnR5cGU6IFRoZSB0eXBlIG9mIHRoZSB3YXJuaW5nOiBRVU9UQV9OTF8uLi4KKyAqCisgKiBUaGlzIGNhbiBiZSB1c2VkIGJ5IGZpbGVzeXN0ZW1zIChpbmNsdWRpbmcgdGhvc2Ugd2hpY2ggZG9uJ3QgdXNlCisgKiBkcXVvdCkgdG8gc2VuZCBhIG1lc3NhZ2UgdG8gdXNlcnNwYWNlIHJlbGF0aW5nIHRvIHF1b3RhIGxpbWl0cy4KKyAqCisgKi8KKwordm9pZCBxdW90YV9zZW5kX3dhcm5pbmcoc2hvcnQgdHlwZSwgdW5zaWduZWQgaW50IGlkLCBkZXZfdCBkZXYsCisJCQljb25zdCBjaGFyIHdhcm50eXBlKQoreworCXN0YXRpYyBhdG9taWNfdCBzZXE7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl2b2lkICptc2dfaGVhZDsKKwlpbnQgcmV0OworCWludCBtc2dfc2l6ZSA9IDQgKiBubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgKworCQkgICAgICAgMiAqIG5sYV90b3RhbF9zaXplKHNpemVvZih1NjQpKTsKKworCS8qIFdlIGhhdmUgdG8gYWxsb2NhdGUgdXNpbmcgR0ZQX05PRlMgYXMgd2UgYXJlIGNhbGxlZCBmcm9tIGEKKwkgKiBmaWxlc3lzdGVtIHBlcmZvcm1pbmcgd3JpdGUgYW5kIHRodXMgZnVydGhlciByZWN1cnNpb24gaW50bworCSAqIHRoZSBmcyB0byBmcmVlIHNvbWUgZGF0YSBjb3VsZCBjYXVzZSBkZWFkbG9ja3MuICovCisJc2tiID0gZ2VubG1zZ19uZXcobXNnX3NpemUsIEdGUF9OT0ZTKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAiVkZTOiBOb3QgZW5vdWdoIG1lbW9yeSB0byBzZW5kIHF1b3RhIHdhcm5pbmcuXG4iKTsKKwkJcmV0dXJuOworCX0KKwltc2dfaGVhZCA9IGdlbmxtc2dfcHV0KHNrYiwgMCwgYXRvbWljX2FkZF9yZXR1cm4oMSwgJnNlcSksCisJCQkmcXVvdGFfZ2VubF9mYW1pbHksIDAsIFFVT1RBX05MX0NfV0FSTklORyk7CisJaWYgKCFtc2dfaGVhZCkgeworCQlwcmludGsoS0VSTl9FUlIKKwkJICAiVkZTOiBDYW5ub3Qgc3RvcmUgbmV0bGluayBoZWFkZXIgaW4gcXVvdGEgd2FybmluZy5cbiIpOworCQlnb3RvIGVycl9vdXQ7CisJfQorCXJldCA9IG5sYV9wdXRfdTMyKHNrYiwgUVVPVEFfTkxfQV9RVFlQRSwgdHlwZSk7CisJaWYgKHJldCkKKwkJZ290byBhdHRyX2Vycl9vdXQ7CisJcmV0ID0gbmxhX3B1dF91NjQoc2tiLCBRVU9UQV9OTF9BX0VYQ0VTU19JRCwgaWQpOworCWlmIChyZXQpCisJCWdvdG8gYXR0cl9lcnJfb3V0OworCXJldCA9IG5sYV9wdXRfdTMyKHNrYiwgUVVPVEFfTkxfQV9XQVJOSU5HLCB3YXJudHlwZSk7CisJaWYgKHJldCkKKwkJZ290byBhdHRyX2Vycl9vdXQ7CisJcmV0ID0gbmxhX3B1dF91MzIoc2tiLCBRVU9UQV9OTF9BX0RFVl9NQUpPUiwgTUFKT1IoZGV2KSk7CisJaWYgKHJldCkKKwkJZ290byBhdHRyX2Vycl9vdXQ7CisJcmV0ID0gbmxhX3B1dF91MzIoc2tiLCBRVU9UQV9OTF9BX0RFVl9NSU5PUiwgTUlOT1IoZGV2KSk7CisJaWYgKHJldCkKKwkJZ290byBhdHRyX2Vycl9vdXQ7CisJcmV0ID0gbmxhX3B1dF91NjQoc2tiLCBRVU9UQV9OTF9BX0NBVVNFRF9JRCwgY3VycmVudF91aWQoKSk7CisJaWYgKHJldCkKKwkJZ290byBhdHRyX2Vycl9vdXQ7CisJZ2VubG1zZ19lbmQoc2tiLCBtc2dfaGVhZCk7CisKKwlnZW5sbXNnX211bHRpY2FzdChza2IsIDAsIHF1b3RhX2dlbmxfZmFtaWx5LmlkLCBHRlBfTk9GUyk7CisJcmV0dXJuOworYXR0cl9lcnJfb3V0OgorCXByaW50ayhLRVJOX0VSUiAiVkZTOiBOb3QgZW5vdWdoIHNwYWNlIHRvIGNvbXBvc2UgcXVvdGEgbWVzc2FnZSFcbiIpOworZXJyX291dDoKKwlrZnJlZV9za2Ioc2tiKTsKK30KK0VYUE9SVF9TWU1CT0wocXVvdGFfc2VuZF93YXJuaW5nKTsKKworc3RhdGljIGludCBfX2luaXQgcXVvdGFfaW5pdCh2b2lkKQoreworCWlmIChnZW5sX3JlZ2lzdGVyX2ZhbWlseSgmcXVvdGFfZ2VubF9mYW1pbHkpICE9IDApCisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIlZGUzogRmFpbGVkIHRvIGNyZWF0ZSBxdW90YSBuZXRsaW5rIGludGVyZmFjZS5cbiIpOworCXJldHVybiAwOworfTsKKworbW9kdWxlX2luaXQocXVvdGFfaW5pdCk7CmRpZmYgLS1naXQgYS9mcy9xdW90YS9xdW90YS5jIGIvZnMvcXVvdGEvcXVvdGEuYwppbmRleCBlZTkxZTI3Li45NTM4OGY5IDEwMDY0NAotLS0gYS9mcy9xdW90YS9xdW90YS5jCisrKyBiL2ZzL3F1b3RhL3F1b3RhLmMKQEAgLTEwLDcgKzEwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KQEAgLTE4LDIyMCArMTcsMjA1IEBACiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXQvbmV0bGluay5oPgotI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KIAotLyogQ2hlY2sgdmFsaWRpdHkgb2YgZ2VuZXJpYyBxdW90YWN0bCBjb21tYW5kcyAqLwotc3RhdGljIGludCBnZW5lcmljX3F1b3RhY3RsX3ZhbGlkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgY21kLAotCQkJCSAgcWlkX3QgaWQpCitzdGF0aWMgaW50IGNoZWNrX3F1b3RhY3RsX3Blcm1pc3Npb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBjbWQsCisJCQkJICAgICBxaWRfdCBpZCkKIHsKLQlpZiAodHlwZSA+PSBNQVhRVU9UQVMpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICghc2IgJiYgY21kICE9IFFfU1lOQykKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JLyogSXMgb3BlcmF0aW9uIHN1cHBvcnRlZD8gKi8KLQlpZiAoc2IgJiYgIXNiLT5zX3Fjb3ApCi0JCXJldHVybiAtRU5PU1lTOwotCiAJc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBRX0dFVEZNVDoKKwkvKiB0aGVzZSBjb21tYW5kcyBkbyBub3QgcmVxdWlyZSBhbnkgc3BlY2lhbCBwcml2aWxlZ3VlcyAqLworCWNhc2UgUV9HRVRGTVQ6CisJY2FzZSBRX1NZTkM6CisJY2FzZSBRX0dFVElORk86CisJY2FzZSBRX1hHRVRRU1RBVDoKKwljYXNlIFFfWFFVT1RBU1lOQzoKKwkJYnJlYWs7CisJLyogYWxsb3cgdG8gcXVlcnkgaW5mb3JtYXRpb24gZm9yIGRxdW90cyB3ZSAib3duIiAqLworCWNhc2UgUV9HRVRRVU9UQToKKwljYXNlIFFfWEdFVFFVT1RBOgorCQlpZiAoKHR5cGUgPT0gVVNSUVVPVEEgJiYgY3VycmVudF9ldWlkKCkgPT0gaWQpIHx8CisJCSAgICAodHlwZSA9PSBHUlBRVU9UQSAmJiBpbl9lZ3JvdXBfcChpZCkpKQogCQkJYnJlYWs7Ci0JCWNhc2UgUV9RVU9UQU9OOgotCQkJaWYgKCFzYi0+c19xY29wLT5xdW90YV9vbikKLQkJCQlyZXR1cm4gLUVOT1NZUzsKLQkJCWJyZWFrOwotCQljYXNlIFFfUVVPVEFPRkY6Ci0JCQlpZiAoIXNiLT5zX3Fjb3AtPnF1b3RhX29mZikKLQkJCQlyZXR1cm4gLUVOT1NZUzsKLQkJCWJyZWFrOwotCQljYXNlIFFfU0VUSU5GTzoKLQkJCWlmICghc2ItPnNfcWNvcC0+c2V0X2luZm8pCi0JCQkJcmV0dXJuIC1FTk9TWVM7Ci0JCQlicmVhazsKLQkJY2FzZSBRX0dFVElORk86Ci0JCQlpZiAoIXNiLT5zX3Fjb3AtPmdldF9pbmZvKQotCQkJCXJldHVybiAtRU5PU1lTOwotCQkJYnJlYWs7Ci0JCWNhc2UgUV9TRVRRVU9UQToKLQkJCWlmICghc2ItPnNfcWNvcC0+c2V0X2RxYmxrKQotCQkJCXJldHVybiAtRU5PU1lTOwotCQkJYnJlYWs7Ci0JCWNhc2UgUV9HRVRRVU9UQToKLQkJCWlmICghc2ItPnNfcWNvcC0+Z2V0X2RxYmxrKQotCQkJCXJldHVybiAtRU5PU1lTOwotCQkJYnJlYWs7Ci0JCWNhc2UgUV9TWU5DOgotCQkJaWYgKHNiICYmICFzYi0+c19xY29wLT5xdW90YV9zeW5jKQotCQkJCXJldHVybiAtRU5PU1lTOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQkvKiBJcyBxdW90YSB0dXJuZWQgb24gZm9yIGNvbW1hbmRzIHdoaWNoIG5lZWQgaXQ/ICovCi0Jc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBRX0dFVEZNVDoKLQkJY2FzZSBRX0dFVElORk86Ci0JCWNhc2UgUV9TRVRJTkZPOgotCQljYXNlIFFfU0VUUVVPVEE6Ci0JCWNhc2UgUV9HRVRRVU9UQToKLQkJCS8qIFRoaXMgaXMganVzdCBhbiBpbmZvcm1hdGl2ZSB0ZXN0IHNvIHdlIGFyZSBzYXRpc2ZpZWQKLQkJCSAqIHdpdGhvdXQgdGhlIGxvY2sgKi8KLQkJCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgdHlwZSkpCi0JCQkJcmV0dXJuIC1FU1JDSDsKLQl9Ci0KLQkvKiBDaGVjayBwcml2aWxlZ2VzICovCi0JaWYgKGNtZCA9PSBRX0dFVFFVT1RBKSB7Ci0JCWlmICgoKHR5cGUgPT0gVVNSUVVPVEEgJiYgY3VycmVudF9ldWlkKCkgIT0gaWQpIHx8Ci0JCSAgICAgKHR5cGUgPT0gR1JQUVVPVEEgJiYgIWluX2Vncm91cF9wKGlkKSkpICYmCi0JCSAgICAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0JfQotCWVsc2UgaWYgKGNtZCAhPSBRX0dFVEZNVCAmJiBjbWQgIT0gUV9TWU5DICYmIGNtZCAhPSBRX0dFVElORk8pCi0JCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogQ2hlY2sgdmFsaWRpdHkgb2YgWEZTIFF1b3RhIE1hbmFnZXIgY29tbWFuZHMgKi8KLXN0YXRpYyBpbnQgeHFtX3F1b3RhY3RsX3ZhbGlkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgY21kLAotCQkJICAgICAgcWlkX3QgaWQpCi17Ci0JaWYgKHR5cGUgPj0gWFFNX01BWFFVT1RBUykKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFzYikKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKCFzYi0+c19xY29wKQotCQlyZXR1cm4gLUVOT1NZUzsKLQotCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgUV9YUVVPVEFPTjoKLQkJY2FzZSBRX1hRVU9UQU9GRjoKLQkJY2FzZSBRX1hRVU9UQVJNOgotCQkJaWYgKCFzYi0+c19xY29wLT5zZXRfeHN0YXRlKQotCQkJCXJldHVybiAtRU5PU1lTOwotCQkJYnJlYWs7Ci0JCWNhc2UgUV9YR0VUUVNUQVQ6Ci0JCQlpZiAoIXNiLT5zX3Fjb3AtPmdldF94c3RhdGUpCi0JCQkJcmV0dXJuIC1FTk9TWVM7Ci0JCQlicmVhazsKLQkJY2FzZSBRX1hTRVRRTElNOgotCQkJaWYgKCFzYi0+c19xY29wLT5zZXRfeHF1b3RhKQotCQkJCXJldHVybiAtRU5PU1lTOwotCQkJYnJlYWs7Ci0JCWNhc2UgUV9YR0VUUVVPVEE6Ci0JCQlpZiAoIXNiLT5zX3Fjb3AtPmdldF94cXVvdGEpCi0JCQkJcmV0dXJuIC1FTk9TWVM7Ci0JCQlicmVhazsKLQkJY2FzZSBRX1hRVU9UQVNZTkM6Ci0JCQlpZiAoIXNiLT5zX3Fjb3AtPnF1b3RhX3N5bmMpCi0JCQkJcmV0dXJuIC1FTk9TWVM7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIENoZWNrIHByaXZpbGVnZXMgKi8KLQlpZiAoY21kID09IFFfWEdFVFFVT1RBKSB7Ci0JCWlmICgoKHR5cGUgPT0gWFFNX1VTUlFVT1RBICYmIGN1cnJlbnRfZXVpZCgpICE9IGlkKSB8fAotCQkgICAgICh0eXBlID09IFhRTV9HUlBRVU9UQSAmJiAhaW5fZWdyb3VwX3AoaWQpKSkgJiYKLQkJICAgICAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJCXJldHVybiAtRVBFUk07Ci0JfSBlbHNlIGlmIChjbWQgIT0gUV9YR0VUUVNUQVQgJiYgY21kICE9IFFfWFFVT1RBU1lOQykgeworCQkvKkZBTExUSFJPVUdIKi8KKwlkZWZhdWx0OgogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCQlyZXR1cm4gLUVQRVJNOwogCX0KIAotCXJldHVybiAwOworCXJldHVybiBzZWN1cml0eV9xdW90YWN0bChjbWQsIHR5cGUsIGlkLCBzYik7CiB9CiAKLXN0YXRpYyBpbnQgY2hlY2tfcXVvdGFjdGxfdmFsaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIGludCBjbWQsCi0JCQkJcWlkX3QgaWQpCi17Ci0JaW50IGVycm9yOwotCi0JaWYgKFhRTV9DT01NQU5EKGNtZCkpCi0JCWVycm9yID0geHFtX3F1b3RhY3RsX3ZhbGlkKHNiLCB0eXBlLCBjbWQsIGlkKTsKLQllbHNlCi0JCWVycm9yID0gZ2VuZXJpY19xdW90YWN0bF92YWxpZChzYiwgdHlwZSwgY21kLCBpZCk7Ci0JaWYgKCFlcnJvcikKLQkJZXJyb3IgPSBzZWN1cml0eV9xdW90YWN0bChjbWQsIHR5cGUsIGlkLCBzYik7Ci0JcmV0dXJuIGVycm9yOwotfQotCi0jaWZkZWYgQ09ORklHX1FVT1RBCi12b2lkIHN5bmNfcXVvdGFfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCi17Ci0JaW50IGNudDsKLQotCWlmICghc2ItPnNfcWNvcC0+cXVvdGFfc3luYykKLQkJcmV0dXJuOwotCi0Jc2ItPnNfcWNvcC0+cXVvdGFfc3luYyhzYiwgdHlwZSk7Ci0KLQlpZiAoc2JfZHFvcHQoc2IpLT5mbGFncyAmIERRVU9UX1FVT1RBX1NZU19GSUxFKQotCQlyZXR1cm47Ci0JLyogVGhpcyBpcyBub3QgdmVyeSBjbGV2ZXIgKGFuZCBmYXN0KSBidXQgY3VycmVudGx5IEkgZG9uJ3Qga25vdyBhYm91dAotCSAqIGFueSBvdGhlciBzaW1wbGUgd2F5IG9mIGdldHRpbmcgcXVvdGEgZGF0YSB0byBkaXNrIGFuZCB3ZSBtdXN0IGdldAotCSAqIHRoZW0gdGhlcmUgZm9yIHVzZXJzcGFjZSB0byBiZSB2aXNpYmxlLi4uICovCi0JaWYgKHNiLT5zX29wLT5zeW5jX2ZzKQotCQlzYi0+c19vcC0+c3luY19mcyhzYiwgMSk7Ci0Jc3luY19ibG9ja2RldihzYi0+c19iZGV2KTsKLQotCS8qCi0JICogTm93IHdoZW4gZXZlcnl0aGluZyBpcyB3cml0dGVuIHdlIGNhbiBkaXNjYXJkIHRoZSBwYWdlY2FjaGUgc28KLQkgKiB0aGF0IHVzZXJzcGFjZSBzZWVzIHRoZSBjaGFuZ2VzLgotCSAqLwotCW11dGV4X2xvY2soJnNiX2Rxb3B0KHNiKS0+ZHFvbm9mZl9tdXRleCk7Ci0JZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCWlmICh0eXBlICE9IC0xICYmIGNudCAhPSB0eXBlKQotCQkJY29udGludWU7Ci0JCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgY250KSkKLQkJCWNvbnRpbnVlOwotCQltdXRleF9sb2NrX25lc3RlZCgmc2JfZHFvcHQoc2IpLT5maWxlc1tjbnRdLT5pX211dGV4LAotCQkJCSAgSV9NVVRFWF9RVU9UQSk7Ci0JCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZzYl9kcW9wdChzYiktPmZpbGVzW2NudF0tPmlfZGF0YSwgMCk7Ci0JCW11dGV4X3VubG9jaygmc2JfZHFvcHQoc2IpLT5maWxlc1tjbnRdLT5pX211dGV4KTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZzYl9kcW9wdChzYiktPmRxb25vZmZfbXV0ZXgpOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkIHN5bmNfZHF1b3RzKGludCB0eXBlKQorc3RhdGljIGludCBxdW90YV9zeW5jX2FsbChpbnQgdHlwZSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwotCWludCBjbnQ7CisJaW50IHJldDsKKworCWlmICh0eXBlID49IE1BWFFVT1RBUykKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0ID0gc2VjdXJpdHlfcXVvdGFjdGwoUV9TWU5DLCB0eXBlLCAwLCBOVUxMKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJc3Bpbl9sb2NrKCZzYl9sb2NrKTsKIHJlc3RhcnQ6CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzYiwgJnN1cGVyX2Jsb2Nrcywgc19saXN0KSB7Ci0JCS8qIFRoaXMgdGVzdCBqdXN0IGltcHJvdmVzIHBlcmZvcm1hbmNlIHNvIGl0IG5lZWRuJ3QgYmUKLQkJICogcmVsaWFibGUuLi4gKi8KLQkJZm9yIChjbnQgPSAwOyBjbnQgPCBNQVhRVU9UQVM7IGNudCsrKSB7Ci0JCQlpZiAodHlwZSAhPSAtMSAmJiB0eXBlICE9IGNudCkKLQkJCQljb250aW51ZTsKLQkJCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgY250KSkKLQkJCQljb250aW51ZTsKLQkJCWlmICghaW5mb19kaXJ0eSgmc2JfZHFvcHQoc2IpLT5pbmZvW2NudF0pICYmCi0JCQkgICBsaXN0X2VtcHR5KCZzYl9kcW9wdChzYiktPmluZm9bY250XS5kcWlfZGlydHlfbGlzdCkpCi0JCQkJY29udGludWU7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoY250ID09IE1BWFFVT1RBUykKKwkJaWYgKCFzYi0+c19xY29wIHx8ICFzYi0+c19xY29wLT5xdW90YV9zeW5jKQogCQkJY29udGludWU7CisKIAkJc2ItPnNfY291bnQrKzsKIAkJc3Bpbl91bmxvY2soJnNiX2xvY2spOwogCQlkb3duX3JlYWQoJnNiLT5zX3Vtb3VudCk7CiAJCWlmIChzYi0+c19yb290KQotCQkJc3luY19xdW90YV9zYihzYiwgdHlwZSk7CisJCQlzYi0+c19xY29wLT5xdW90YV9zeW5jKHNiLCB0eXBlLCAxKTsKIAkJdXBfcmVhZCgmc2ItPnNfdW1vdW50KTsKIAkJc3Bpbl9sb2NrKCZzYl9sb2NrKTsKIAkJaWYgKF9fcHV0X3N1cGVyX2FuZF9uZWVkX3Jlc3RhcnQoc2IpKQogCQkJZ290byByZXN0YXJ0OwogCX0KIAlzcGluX3VubG9jaygmc2JfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxdW90YV9xdW90YW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgY21kLCBxaWRfdCBpZCwKKwkJICAgICAgICAgdm9pZCBfX3VzZXIgKmFkZHIpCit7CisJY2hhciAqcGF0aG5hbWU7CisJaW50IHJldCA9IC1FTk9TWVM7CisKKwlwYXRobmFtZSA9IGdldG5hbWUoYWRkcik7CisJaWYgKElTX0VSUihwYXRobmFtZSkpCisJCXJldHVybiBQVFJfRVJSKHBhdGhuYW1lKTsKKwlpZiAoc2ItPnNfcWNvcC0+cXVvdGFfb24pCisJCXJldCA9IHNiLT5zX3Fjb3AtPnF1b3RhX29uKHNiLCB0eXBlLCBpZCwgcGF0aG5hbWUsIDApOworCXB1dG5hbWUocGF0aG5hbWUpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcXVvdGFfZ2V0Zm10KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCB2b2lkIF9fdXNlciAqYWRkcikKK3sKKwlfX3UzMiBmbXQ7CisKKwlkb3duX3JlYWQoJnNiX2Rxb3B0KHNiKS0+ZHFwdHJfc2VtKTsKKwlpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIHR5cGUpKSB7CisJCXVwX3JlYWQoJnNiX2Rxb3B0KHNiKS0+ZHFwdHJfc2VtKTsKKwkJcmV0dXJuIC1FU1JDSDsKKwl9CisJZm10ID0gc2JfZHFvcHQoc2IpLT5pbmZvW3R5cGVdLmRxaV9mb3JtYXQtPnFmX2ZtdF9pZDsKKwl1cF9yZWFkKCZzYl9kcW9wdChzYiktPmRxcHRyX3NlbSk7CisJaWYgKGNvcHlfdG9fdXNlcihhZGRyLCAmZm10LCBzaXplb2YoZm10KSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHF1b3RhX2dldGluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHZvaWQgX191c2VyICphZGRyKQoreworCXN0cnVjdCBpZl9kcWluZm8gaW5mbzsKKwlpbnQgcmV0OworCisJaWYgKCFzYl9oYXNfcXVvdGFfYWN0aXZlKHNiLCB0eXBlKSkKKwkJcmV0dXJuIC1FU1JDSDsKKwlpZiAoIXNiLT5zX3Fjb3AtPmdldF9pbmZvKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlyZXQgPSBzYi0+c19xY29wLT5nZXRfaW5mbyhzYiwgdHlwZSwgJmluZm8pOworCWlmICghcmV0ICYmIGNvcHlfdG9fdXNlcihhZGRyLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBxdW90YV9zZXRpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCB2b2lkIF9fdXNlciAqYWRkcikKK3sKKwlzdHJ1Y3QgaWZfZHFpbmZvIGluZm87CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmluZm8sIGFkZHIsIHNpemVvZihpbmZvKSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmICghc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgdHlwZSkpCisJCXJldHVybiAtRVNSQ0g7CisJaWYgKCFzYi0+c19xY29wLT5zZXRfaW5mbykKKwkJcmV0dXJuIC1FTk9TWVM7CisJcmV0dXJuIHNiLT5zX3Fjb3AtPnNldF9pbmZvKHNiLCB0eXBlLCAmaW5mbyk7Cit9CisKK3N0YXRpYyBpbnQgcXVvdGFfZ2V0cXVvdGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHFpZF90IGlkLAorCQkJICB2b2lkIF9fdXNlciAqYWRkcikKK3sKKwlzdHJ1Y3QgaWZfZHFibGsgaWRxOworCWludCByZXQ7CisKKwlpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIHR5cGUpKQorCQlyZXR1cm4gLUVTUkNIOworCWlmICghc2ItPnNfcWNvcC0+Z2V0X2RxYmxrKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlyZXQgPSBzYi0+c19xY29wLT5nZXRfZHFibGsoc2IsIHR5cGUsIGlkLCAmaWRxKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCWlmIChjb3B5X3RvX3VzZXIoYWRkciwgJmlkcSwgc2l6ZW9mKGlkcSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxdW90YV9zZXRxdW90YShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgcWlkX3QgaWQsCisJCQkgIHZvaWQgX191c2VyICphZGRyKQoreworCXN0cnVjdCBpZl9kcWJsayBpZHE7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmlkcSwgYWRkciwgc2l6ZW9mKGlkcSkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIHR5cGUpKQorCQlyZXR1cm4gLUVTUkNIOworCWlmICghc2ItPnNfcWNvcC0+c2V0X2RxYmxrKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlyZXR1cm4gc2ItPnNfcWNvcC0+c2V0X2RxYmxrKHNiLCB0eXBlLCBpZCwgJmlkcSk7Cit9CisKK3N0YXRpYyBpbnQgcXVvdGFfc2V0eHN0YXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBjbWQsIHZvaWQgX191c2VyICphZGRyKQoreworCV9fdTMyIGZsYWdzOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZmbGFncywgYWRkciwgc2l6ZW9mKGZsYWdzKSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmICghc2ItPnNfcWNvcC0+c2V0X3hzdGF0ZSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJcmV0dXJuIHNiLT5zX3Fjb3AtPnNldF94c3RhdGUoc2IsIGZsYWdzLCBjbWQpOworfQorCitzdGF0aWMgaW50IHF1b3RhX2dldHhzdGF0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB2b2lkIF9fdXNlciAqYWRkcikKK3sKKwlzdHJ1Y3QgZnNfcXVvdGFfc3RhdCBmcXM7CisJaW50IHJldDsKKworCWlmICghc2ItPnNfcWNvcC0+Z2V0X3hzdGF0ZSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJcmV0ID0gc2ItPnNfcWNvcC0+Z2V0X3hzdGF0ZShzYiwgJmZxcyk7CisJaWYgKCFyZXQgJiYgY29weV90b191c2VyKGFkZHIsICZmcXMsIHNpemVvZihmcXMpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBxdW90YV9zZXR4cXVvdGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHFpZF90IGlkLAorCQkJICAgdm9pZCBfX3VzZXIgKmFkZHIpCit7CisJc3RydWN0IGZzX2Rpc2tfcXVvdGEgZmRxOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZmZHEsIGFkZHIsIHNpemVvZihmZHEpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKCFzYi0+c19xY29wLT5zZXRfeHF1b3RhKQorCQlyZXR1cm4gLUVOT1NZUzsKKwlyZXR1cm4gc2ItPnNfcWNvcC0+c2V0X3hxdW90YShzYiwgdHlwZSwgaWQsICZmZHEpOworfQorCitzdGF0aWMgaW50IHF1b3RhX2dldHhxdW90YShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgcWlkX3QgaWQsCisJCQkgICB2b2lkIF9fdXNlciAqYWRkcikKK3sKKwlzdHJ1Y3QgZnNfZGlza19xdW90YSBmZHE7CisJaW50IHJldDsKKworCWlmICghc2ItPnNfcWNvcC0+Z2V0X3hxdW90YSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJcmV0ID0gc2ItPnNfcWNvcC0+Z2V0X3hxdW90YShzYiwgdHlwZSwgaWQsICZmZHEpOworCWlmICghcmV0ICYmIGNvcHlfdG9fdXNlcihhZGRyLCAmZmRxLCBzaXplb2YoZmRxKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiByZXQ7CiB9CiAKIC8qIENvcHkgcGFyYW1ldGVycyBhbmQgY2FsbCBwcm9wZXIgZnVuY3Rpb24gKi8KQEAgLTI0MCwxMTcgKzIyNCw1NSBAQAogewogCWludCByZXQ7CiAKKwlpZiAodHlwZSA+PSAoWFFNX0NPTU1BTkQoY21kKSA/IFhRTV9NQVhRVU9UQVMgOiBNQVhRVU9UQVMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXNiLT5zX3Fjb3ApCisJCXJldHVybiAtRU5PU1lTOworCisJcmV0ID0gY2hlY2tfcXVvdGFjdGxfcGVybWlzc2lvbihzYiwgdHlwZSwgY21kLCBpZCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKIAlzd2l0Y2ggKGNtZCkgewotCQljYXNlIFFfUVVPVEFPTjogewotCQkJY2hhciAqcGF0aG5hbWU7Ci0KLQkJCXBhdGhuYW1lID0gZ2V0bmFtZShhZGRyKTsKLQkJCWlmIChJU19FUlIocGF0aG5hbWUpKQotCQkJCXJldHVybiBQVFJfRVJSKHBhdGhuYW1lKTsKLQkJCXJldCA9IHNiLT5zX3Fjb3AtPnF1b3RhX29uKHNiLCB0eXBlLCBpZCwgcGF0aG5hbWUsIDApOwotCQkJcHV0bmFtZShwYXRobmFtZSk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0JCWNhc2UgUV9RVU9UQU9GRjoKLQkJCXJldHVybiBzYi0+c19xY29wLT5xdW90YV9vZmYoc2IsIHR5cGUsIDApOwotCi0JCWNhc2UgUV9HRVRGTVQ6IHsKLQkJCV9fdTMyIGZtdDsKLQotCQkJZG93bl9yZWFkKCZzYl9kcW9wdChzYiktPmRxcHRyX3NlbSk7Ci0JCQlpZiAoIXNiX2hhc19xdW90YV9hY3RpdmUoc2IsIHR5cGUpKSB7Ci0JCQkJdXBfcmVhZCgmc2JfZHFvcHQoc2IpLT5kcXB0cl9zZW0pOwotCQkJCXJldHVybiAtRVNSQ0g7Ci0JCQl9Ci0JCQlmbXQgPSBzYl9kcW9wdChzYiktPmluZm9bdHlwZV0uZHFpX2Zvcm1hdC0+cWZfZm10X2lkOwotCQkJdXBfcmVhZCgmc2JfZHFvcHQoc2IpLT5kcXB0cl9zZW0pOwotCQkJaWYgKGNvcHlfdG9fdXNlcihhZGRyLCAmZm10LCBzaXplb2YoZm10KSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQljYXNlIFFfR0VUSU5GTzogewotCQkJc3RydWN0IGlmX2RxaW5mbyBpbmZvOwotCi0JCQlyZXQgPSBzYi0+c19xY29wLT5nZXRfaW5mbyhzYiwgdHlwZSwgJmluZm8pOwotCQkJaWYgKHJldCkKLQkJCQlyZXR1cm4gcmV0OwotCQkJaWYgKGNvcHlfdG9fdXNlcihhZGRyLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgUV9TRVRJTkZPOiB7Ci0JCQlzdHJ1Y3QgaWZfZHFpbmZvIGluZm87Ci0KLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmaW5mbywgYWRkciwgc2l6ZW9mKGluZm8pKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiBzYi0+c19xY29wLT5zZXRfaW5mbyhzYiwgdHlwZSwgJmluZm8pOwotCQl9Ci0JCWNhc2UgUV9HRVRRVU9UQTogewotCQkJc3RydWN0IGlmX2RxYmxrIGlkcTsKLQotCQkJcmV0ID0gc2ItPnNfcWNvcC0+Z2V0X2RxYmxrKHNiLCB0eXBlLCBpZCwgJmlkcSk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7Ci0JCQlpZiAoY29weV90b191c2VyKGFkZHIsICZpZHEsIHNpemVvZihpZHEpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgUV9TRVRRVU9UQTogewotCQkJc3RydWN0IGlmX2RxYmxrIGlkcTsKLQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZpZHEsIGFkZHIsIHNpemVvZihpZHEpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiBzYi0+c19xY29wLT5zZXRfZHFibGsoc2IsIHR5cGUsIGlkLCAmaWRxKTsKLQkJfQotCQljYXNlIFFfU1lOQzoKLQkJCWlmIChzYikKLQkJCQlzeW5jX3F1b3RhX3NiKHNiLCB0eXBlKTsKLQkJCWVsc2UKLQkJCQlzeW5jX2RxdW90cyh0eXBlKTsKLQkJCXJldHVybiAwOwotCi0JCWNhc2UgUV9YUVVPVEFPTjoKLQkJY2FzZSBRX1hRVU9UQU9GRjoKLQkJY2FzZSBRX1hRVU9UQVJNOiB7Ci0JCQlfX3UzMiBmbGFnczsKLQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZmbGFncywgYWRkciwgc2l6ZW9mKGZsYWdzKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlyZXR1cm4gc2ItPnNfcWNvcC0+c2V0X3hzdGF0ZShzYiwgZmxhZ3MsIGNtZCk7Ci0JCX0KLQkJY2FzZSBRX1hHRVRRU1RBVDogewotCQkJc3RydWN0IGZzX3F1b3RhX3N0YXQgZnFzOwotCQkKLQkJCWlmICgocmV0ID0gc2ItPnNfcWNvcC0+Z2V0X3hzdGF0ZShzYiwgJmZxcykpKQotCQkJCXJldHVybiByZXQ7Ci0JCQlpZiAoY29weV90b191c2VyKGFkZHIsICZmcXMsIHNpemVvZihmcXMpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgUV9YU0VUUUxJTTogewotCQkJc3RydWN0IGZzX2Rpc2tfcXVvdGEgZmRxOwotCi0JCQlpZiAoY29weV9mcm9tX3VzZXIoJmZkcSwgYWRkciwgc2l6ZW9mKGZkcSkpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkgICAgICAgcmV0dXJuIHNiLT5zX3Fjb3AtPnNldF94cXVvdGEoc2IsIHR5cGUsIGlkLCAmZmRxKTsKLQkJfQotCQljYXNlIFFfWEdFVFFVT1RBOiB7Ci0JCQlzdHJ1Y3QgZnNfZGlza19xdW90YSBmZHE7Ci0KLQkJCXJldCA9IHNiLT5zX3Fjb3AtPmdldF94cXVvdGEoc2IsIHR5cGUsIGlkLCAmZmRxKTsKLQkJCWlmIChyZXQpCi0JCQkJcmV0dXJuIHJldDsKLQkJCWlmIChjb3B5X3RvX3VzZXIoYWRkciwgJmZkcSwgc2l6ZW9mKGZkcSkpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBRX1hRVU9UQVNZTkM6Ci0JCQlyZXR1cm4gc2ItPnNfcWNvcC0+cXVvdGFfc3luYyhzYiwgdHlwZSk7Ci0JCS8qIFdlIG5ldmVyIHJlYWNoIGhlcmUgdW5sZXNzIHZhbGlkaXR5IGNoZWNrIGlzIGJyb2tlbiAqLwotCQlkZWZhdWx0OgotCQkJQlVHKCk7CisJY2FzZSBRX1FVT1RBT046CisJCXJldHVybiBxdW90YV9xdW90YW9uKHNiLCB0eXBlLCBjbWQsIGlkLCBhZGRyKTsKKwljYXNlIFFfUVVPVEFPRkY6CisJCWlmICghc2ItPnNfcWNvcC0+cXVvdGFfb2ZmKQorCQkJcmV0dXJuIC1FTk9TWVM7CisJCXJldHVybiBzYi0+c19xY29wLT5xdW90YV9vZmYoc2IsIHR5cGUsIDApOworCWNhc2UgUV9HRVRGTVQ6CisJCXJldHVybiBxdW90YV9nZXRmbXQoc2IsIHR5cGUsIGFkZHIpOworCWNhc2UgUV9HRVRJTkZPOgorCQlyZXR1cm4gcXVvdGFfZ2V0aW5mbyhzYiwgdHlwZSwgYWRkcik7CisJY2FzZSBRX1NFVElORk86CisJCXJldHVybiBxdW90YV9zZXRpbmZvKHNiLCB0eXBlLCBhZGRyKTsKKwljYXNlIFFfR0VUUVVPVEE6CisJCXJldHVybiBxdW90YV9nZXRxdW90YShzYiwgdHlwZSwgaWQsIGFkZHIpOworCWNhc2UgUV9TRVRRVU9UQToKKwkJcmV0dXJuIHF1b3RhX3NldHF1b3RhKHNiLCB0eXBlLCBpZCwgYWRkcik7CisJY2FzZSBRX1NZTkM6CisJCWlmICghc2ItPnNfcWNvcC0+cXVvdGFfc3luYykKKwkJCXJldHVybiAtRU5PU1lTOworCQlyZXR1cm4gc2ItPnNfcWNvcC0+cXVvdGFfc3luYyhzYiwgdHlwZSwgMSk7CisJY2FzZSBRX1hRVU9UQU9OOgorCWNhc2UgUV9YUVVPVEFPRkY6CisJY2FzZSBRX1hRVU9UQVJNOgorCQlyZXR1cm4gcXVvdGFfc2V0eHN0YXRlKHNiLCBjbWQsIGFkZHIpOworCWNhc2UgUV9YR0VUUVNUQVQ6CisJCXJldHVybiBxdW90YV9nZXR4c3RhdGUoc2IsIGFkZHIpOworCWNhc2UgUV9YU0VUUUxJTToKKwkJcmV0dXJuIHF1b3RhX3NldHhxdW90YShzYiwgdHlwZSwgaWQsIGFkZHIpOworCWNhc2UgUV9YR0VUUVVPVEE6CisJCXJldHVybiBxdW90YV9nZXR4cXVvdGEoc2IsIHR5cGUsIGlkLCBhZGRyKTsKKwljYXNlIFFfWFFVT1RBU1lOQzoKKwkJLyogY2FsbGVyIGFscmVhZHkgaG9sZHMgc191bW91bnQgKi8KKwkJaWYgKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKQorCQkJcmV0dXJuIC1FUk9GUzsKKwkJd3JpdGViYWNrX2lub2Rlc19zYihzYik7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTM5NywyMjQgKzMxOSwyMyBAQAogCWNtZHMgPSBjbWQgPj4gU1VCQ01EU0hJRlQ7CiAJdHlwZSA9IGNtZCAmIFNVQkNNRE1BU0s7CiAKLQlpZiAoY21kcyAhPSBRX1NZTkMgfHwgc3BlY2lhbCkgewotCQlzYiA9IHF1b3RhY3RsX2Jsb2NrKHNwZWNpYWwpOwotCQlpZiAoSVNfRVJSKHNiKSkKLQkJCXJldHVybiBQVFJfRVJSKHNiKTsKKwkvKgorCSAqIEFzIGEgc3BlY2lhbCBjYXNlIFFfU1lOQyBjYW4gYmUgY2FsbGVkIHdpdGhvdXQgYSBzcGVjaWZpYyBkZXZpY2UuCisJICogSXQgd2lsbCBpdGVyYXRlIGFsbCBzdXBlcmJsb2NrcyB0aGF0IGhhdmUgcXVvdGEgZW5hYmxlZCBhbmQgY2FsbAorCSAqIHRoZSBzeW5jIGFjdGlvbiBvbiBlYWNoIG9mIHRoZW0uCisJICovCisJaWYgKCFzcGVjaWFsKSB7CisJCWlmIChjbWRzID09IFFfU1lOQykKKwkJCXJldHVybiBxdW90YV9zeW5jX2FsbCh0eXBlKTsKKwkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JcmV0ID0gY2hlY2tfcXVvdGFjdGxfdmFsaWQoc2IsIHR5cGUsIGNtZHMsIGlkKTsKLQlpZiAocmV0ID49IDApCi0JCXJldCA9IGRvX3F1b3RhY3RsKHNiLCB0eXBlLCBjbWRzLCBpZCwgYWRkcik7Ci0JaWYgKHNiKQotCQlkcm9wX3N1cGVyKHNiKTsKKwlzYiA9IHF1b3RhY3RsX2Jsb2NrKHNwZWNpYWwpOworCWlmIChJU19FUlIoc2IpKQorCQlyZXR1cm4gUFRSX0VSUihzYik7CiAKKwlyZXQgPSBkb19xdW90YWN0bChzYiwgdHlwZSwgY21kcywgaWQsIGFkZHIpOworCisJZHJvcF9zdXBlcihzYik7CiAJcmV0dXJuIHJldDsKIH0KLQotI2lmIGRlZmluZWQoQ09ORklHX0NPTVBBVF9GT1JfVTY0X0FMSUdOTUVOVCkKLS8qCi0gKiBUaGlzIGNvZGUgd29ya3Mgb25seSBmb3IgMzIgYml0IHF1b3RhIHRvb2xzIG92ZXIgNjQgYml0IE9TICh4ODZfNjQsIGlhNjQpCi0gKiBhbmQgaXMgbmVjZXNzYXJ5IGR1ZSB0byBhbGlnbm1lbnQgcHJvYmxlbXMuCi0gKi8KLXN0cnVjdCBjb21wYXRfaWZfZHFibGsgewotCWNvbXBhdF91NjQgZHFiX2JoYXJkbGltaXQ7Ci0JY29tcGF0X3U2NCBkcWJfYnNvZnRsaW1pdDsKLQljb21wYXRfdTY0IGRxYl9jdXJzcGFjZTsKLQljb21wYXRfdTY0IGRxYl9paGFyZGxpbWl0OwotCWNvbXBhdF91NjQgZHFiX2lzb2Z0bGltaXQ7Ci0JY29tcGF0X3U2NCBkcWJfY3VyaW5vZGVzOwotCWNvbXBhdF91NjQgZHFiX2J0aW1lOwotCWNvbXBhdF91NjQgZHFiX2l0aW1lOwotCWNvbXBhdF91aW50X3QgZHFiX3ZhbGlkOwotfTsKLQotLyogWEZTIHN0cnVjdHVyZXMgKi8KLXN0cnVjdCBjb21wYXRfZnNfcWZpbGVzdGF0IHsKLQljb21wYXRfdTY0IGRxYl9iaGFyZGxpbWl0OwotCWNvbXBhdF91NjQgcWZzX25ibGtzOwotCWNvbXBhdF91aW50X3QgcWZzX25leHRlbnRzOwotfTsKLQotc3RydWN0IGNvbXBhdF9mc19xdW90YV9zdGF0IHsKLQlfX3M4CQlxc192ZXJzaW9uOwotCV9fdTE2CQlxc19mbGFnczsKLQlfX3M4CQlxc19wYWQ7Ci0Jc3RydWN0IGNvbXBhdF9mc19xZmlsZXN0YXQJcXNfdXF1b3RhOwotCXN0cnVjdCBjb21wYXRfZnNfcWZpbGVzdGF0CXFzX2dxdW90YTsKLQljb21wYXRfdWludF90CXFzX2luY29yZWRxczsKLQljb21wYXRfaW50X3QJcXNfYnRpbWVsaW1pdDsKLQljb21wYXRfaW50X3QJcXNfaXRpbWVsaW1pdDsKLQljb21wYXRfaW50X3QJcXNfcnRidGltZWxpbWl0OwotCV9fdTE2CQlxc19id2FybmxpbWl0OwotCV9fdTE2CQlxc19pd2FybmxpbWl0OwotfTsKLQotYXNtbGlua2FnZSBsb25nIHN5czMyX3F1b3RhY3RsKHVuc2lnbmVkIGludCBjbWQsIGNvbnN0IGNoYXIgX191c2VyICpzcGVjaWFsLAotCQkJCQkJcWlkX3QgaWQsIHZvaWQgX191c2VyICphZGRyKQotewotCXVuc2lnbmVkIGludCBjbWRzOwotCXN0cnVjdCBpZl9kcWJsayBfX3VzZXIgKmRxYmxrOwotCXN0cnVjdCBjb21wYXRfaWZfZHFibGsgX191c2VyICpjb21wYXRfZHFibGs7Ci0Jc3RydWN0IGZzX3F1b3RhX3N0YXQgX191c2VyICpmc3FzdGF0OwotCXN0cnVjdCBjb21wYXRfZnNfcXVvdGFfc3RhdCBfX3VzZXIgKmNvbXBhdF9mc3FzdGF0OwotCWNvbXBhdF91aW50X3QgZGF0YTsKLQl1MTYgeGRhdGE7Ci0JbG9uZyByZXQ7Ci0KLQljbWRzID0gY21kID4+IFNVQkNNRFNISUZUOwotCi0Jc3dpdGNoIChjbWRzKSB7Ci0JY2FzZSBRX0dFVFFVT1RBOgotCQlkcWJsayA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZihzdHJ1Y3QgaWZfZHFibGspKTsKLQkJY29tcGF0X2RxYmxrID0gYWRkcjsKLQkJcmV0ID0gc3lzX3F1b3RhY3RsKGNtZCwgc3BlY2lhbCwgaWQsIGRxYmxrKTsKLQkJaWYgKHJldCkKLQkJCWJyZWFrOwotCQlpZiAoY29weV9pbl91c2VyKGNvbXBhdF9kcWJsaywgZHFibGssIHNpemVvZigqY29tcGF0X2RxYmxrKSkgfHwKLQkJCWdldF91c2VyKGRhdGEsICZkcWJsay0+ZHFiX3ZhbGlkKSB8fAotCQkJcHV0X3VzZXIoZGF0YSwgJmNvbXBhdF9kcWJsay0+ZHFiX3ZhbGlkKSkKLQkJCXJldCA9IC1FRkFVTFQ7Ci0JCWJyZWFrOwotCWNhc2UgUV9TRVRRVU9UQToKLQkJZHFibGsgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2Yoc3RydWN0IGlmX2RxYmxrKSk7Ci0JCWNvbXBhdF9kcWJsayA9IGFkZHI7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JCWlmIChjb3B5X2luX3VzZXIoZHFibGssIGNvbXBhdF9kcWJsaywgc2l6ZW9mKCpjb21wYXRfZHFibGspKSB8fAotCQkJZ2V0X3VzZXIoZGF0YSwgJmNvbXBhdF9kcWJsay0+ZHFiX3ZhbGlkKSB8fAotCQkJcHV0X3VzZXIoZGF0YSwgJmRxYmxrLT5kcWJfdmFsaWQpKQotCQkJYnJlYWs7Ci0JCXJldCA9IHN5c19xdW90YWN0bChjbWQsIHNwZWNpYWwsIGlkLCBkcWJsayk7Ci0JCWJyZWFrOwotCWNhc2UgUV9YR0VUUVNUQVQ6Ci0JCWZzcXN0YXQgPSBjb21wYXRfYWxsb2NfdXNlcl9zcGFjZShzaXplb2Yoc3RydWN0IGZzX3F1b3RhX3N0YXQpKTsKLQkJY29tcGF0X2ZzcXN0YXQgPSBhZGRyOwotCQlyZXQgPSBzeXNfcXVvdGFjdGwoY21kLCBzcGVjaWFsLCBpZCwgZnNxc3RhdCk7Ci0JCWlmIChyZXQpCi0JCQlicmVhazsKLQkJcmV0ID0gLUVGQVVMVDsKLQkJLyogQ29weWluZyBxc192ZXJzaW9uLCBxc19mbGFncywgcXNfcGFkICovCi0JCWlmIChjb3B5X2luX3VzZXIoY29tcGF0X2ZzcXN0YXQsIGZzcXN0YXQsCi0JCQlvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2ZzX3F1b3RhX3N0YXQsIHFzX3VxdW90YSkpKQotCQkJYnJlYWs7Ci0JCS8qIENvcHlpbmcgcXNfdXF1b3RhICovCi0JCWlmIChjb3B5X2luX3VzZXIoJmNvbXBhdF9mc3FzdGF0LT5xc191cXVvdGEsCi0JCQkmZnNxc3RhdC0+cXNfdXF1b3RhLAotCQkJc2l6ZW9mKGNvbXBhdF9mc3FzdGF0LT5xc191cXVvdGEpKSB8fAotCQkJZ2V0X3VzZXIoZGF0YSwgJmZzcXN0YXQtPnFzX3VxdW90YS5xZnNfbmV4dGVudHMpIHx8Ci0JCQlwdXRfdXNlcihkYXRhLCAmY29tcGF0X2ZzcXN0YXQtPnFzX3VxdW90YS5xZnNfbmV4dGVudHMpKQotCQkJYnJlYWs7Ci0JCS8qIENvcHlpbmcgcXNfZ3F1b3RhICovCi0JCWlmIChjb3B5X2luX3VzZXIoJmNvbXBhdF9mc3FzdGF0LT5xc19ncXVvdGEsCi0JCQkmZnNxc3RhdC0+cXNfZ3F1b3RhLAotCQkJc2l6ZW9mKGNvbXBhdF9mc3FzdGF0LT5xc19ncXVvdGEpKSB8fAotCQkJZ2V0X3VzZXIoZGF0YSwgJmZzcXN0YXQtPnFzX2dxdW90YS5xZnNfbmV4dGVudHMpIHx8Ci0JCQlwdXRfdXNlcihkYXRhLCAmY29tcGF0X2ZzcXN0YXQtPnFzX2dxdW90YS5xZnNfbmV4dGVudHMpKQotCQkJYnJlYWs7Ci0JCS8qIENvcHlpbmcgdGhlIHJlc3QgKi8KLQkJaWYgKGNvcHlfaW5fdXNlcigmY29tcGF0X2ZzcXN0YXQtPnFzX2luY29yZWRxcywKLQkJCSZmc3FzdGF0LT5xc19pbmNvcmVkcXMsCi0JCQlzaXplb2Yoc3RydWN0IGNvbXBhdF9mc19xdW90YV9zdGF0KSAtCi0JCQlvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X2ZzX3F1b3RhX3N0YXQsIHFzX2luY29yZWRxcykpIHx8Ci0JCQlnZXRfdXNlcih4ZGF0YSwgJmZzcXN0YXQtPnFzX2l3YXJubGltaXQpIHx8Ci0JCQlwdXRfdXNlcih4ZGF0YSwgJmNvbXBhdF9mc3FzdGF0LT5xc19pd2FybmxpbWl0KSkKLQkJCWJyZWFrOwotCQlyZXQgPSAwOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXQgPSBzeXNfcXVvdGFjdGwoY21kLCBzcGVjaWFsLCBpZCwgYWRkcik7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0jZW5kaWYKLQotCi0jaWZkZWYgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFCi0KLS8qIE5ldGxpbmsgZmFtaWx5IHN0cnVjdHVyZSBmb3IgcXVvdGEgKi8KLXN0YXRpYyBzdHJ1Y3QgZ2VubF9mYW1pbHkgcXVvdGFfZ2VubF9mYW1pbHkgPSB7Ci0JLmlkID0gR0VOTF9JRF9HRU5FUkFURSwKLQkuaGRyc2l6ZSA9IDAsCi0JLm5hbWUgPSAiVkZTX0RRVU9UIiwKLQkudmVyc2lvbiA9IDEsCi0JLm1heGF0dHIgPSBRVU9UQV9OTF9BX01BWCwKLX07Ci0KLS8qKgotICogcXVvdGFfc2VuZF93YXJuaW5nIC0gU2VuZCB3YXJuaW5nIHRvIHVzZXJzcGFjZSBhYm91dCBleGNlZWRlZCBxdW90YQotICogQHR5cGU6IFRoZSBxdW90YSB0eXBlOiBVU1JRUVVPVEEsIEdSUFFVT1RBLC4uLgotICogQGlkOiBUaGUgdXNlciBvciBncm91cCBpZCBvZiB0aGUgcXVvdGEgdGhhdCB3YXMgZXhjZWVkZWQKLSAqIEBkZXY6IFRoZSBkZXZpY2Ugb24gd2hpY2ggdGhlIGZzIGlzIG1vdW50ZWQgKHNiLT5zX2RldikKLSAqIEB3YXJudHlwZTogVGhlIHR5cGUgb2YgdGhlIHdhcm5pbmc6IFFVT1RBX05MXy4uLgotICoKLSAqIFRoaXMgY2FuIGJlIHVzZWQgYnkgZmlsZXN5c3RlbXMgKGluY2x1ZGluZyB0aG9zZSB3aGljaCBkb24ndCB1c2UKLSAqIGRxdW90KSB0byBzZW5kIGEgbWVzc2FnZSB0byB1c2Vyc3BhY2UgcmVsYXRpbmcgdG8gcXVvdGEgbGltaXRzLgotICoKLSAqLwotCi12b2lkIHF1b3RhX3NlbmRfd2FybmluZyhzaG9ydCB0eXBlLCB1bnNpZ25lZCBpbnQgaWQsIGRldl90IGRldiwKLQkJCWNvbnN0IGNoYXIgd2FybnR5cGUpCi17Ci0Jc3RhdGljIGF0b21pY190IHNlcTsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXZvaWQgKm1zZ19oZWFkOwotCWludCByZXQ7Ci0JaW50IG1zZ19zaXplID0gNCAqIG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSArCi0JCSAgICAgICAyICogbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHU2NCkpOwotCi0JLyogV2UgaGF2ZSB0byBhbGxvY2F0ZSB1c2luZyBHRlBfTk9GUyBhcyB3ZSBhcmUgY2FsbGVkIGZyb20gYQotCSAqIGZpbGVzeXN0ZW0gcGVyZm9ybWluZyB3cml0ZSBhbmQgdGh1cyBmdXJ0aGVyIHJlY3Vyc2lvbiBpbnRvCi0JICogdGhlIGZzIHRvIGZyZWUgc29tZSBkYXRhIGNvdWxkIGNhdXNlIGRlYWRsb2Nrcy4gKi8KLQlza2IgPSBnZW5sbXNnX25ldyhtc2dfc2l6ZSwgR0ZQX05PRlMpOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICJWRlM6IE5vdCBlbm91Z2ggbWVtb3J5IHRvIHNlbmQgcXVvdGEgd2FybmluZy5cbiIpOwotCQlyZXR1cm47Ci0JfQotCW1zZ19oZWFkID0gZ2VubG1zZ19wdXQoc2tiLCAwLCBhdG9taWNfYWRkX3JldHVybigxLCAmc2VxKSwKLQkJCSZxdW90YV9nZW5sX2ZhbWlseSwgMCwgUVVPVEFfTkxfQ19XQVJOSU5HKTsKLQlpZiAoIW1zZ19oZWFkKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICJWRlM6IENhbm5vdCBzdG9yZSBuZXRsaW5rIGhlYWRlciBpbiBxdW90YSB3YXJuaW5nLlxuIik7Ci0JCWdvdG8gZXJyX291dDsKLQl9Ci0JcmV0ID0gbmxhX3B1dF91MzIoc2tiLCBRVU9UQV9OTF9BX1FUWVBFLCB0eXBlKTsKLQlpZiAocmV0KQotCQlnb3RvIGF0dHJfZXJyX291dDsKLQlyZXQgPSBubGFfcHV0X3U2NChza2IsIFFVT1RBX05MX0FfRVhDRVNTX0lELCBpZCk7Ci0JaWYgKHJldCkKLQkJZ290byBhdHRyX2Vycl9vdXQ7Ci0JcmV0ID0gbmxhX3B1dF91MzIoc2tiLCBRVU9UQV9OTF9BX1dBUk5JTkcsIHdhcm50eXBlKTsKLQlpZiAocmV0KQotCQlnb3RvIGF0dHJfZXJyX291dDsKLQlyZXQgPSBubGFfcHV0X3UzMihza2IsIFFVT1RBX05MX0FfREVWX01BSk9SLCBNQUpPUihkZXYpKTsKLQlpZiAocmV0KQotCQlnb3RvIGF0dHJfZXJyX291dDsKLQlyZXQgPSBubGFfcHV0X3UzMihza2IsIFFVT1RBX05MX0FfREVWX01JTk9SLCBNSU5PUihkZXYpKTsKLQlpZiAocmV0KQotCQlnb3RvIGF0dHJfZXJyX291dDsKLQlyZXQgPSBubGFfcHV0X3U2NChza2IsIFFVT1RBX05MX0FfQ0FVU0VEX0lELCBjdXJyZW50X3VpZCgpKTsKLQlpZiAocmV0KQotCQlnb3RvIGF0dHJfZXJyX291dDsKLQlnZW5sbXNnX2VuZChza2IsIG1zZ19oZWFkKTsKLQotCWdlbmxtc2dfbXVsdGljYXN0KHNrYiwgMCwgcXVvdGFfZ2VubF9mYW1pbHkuaWQsIEdGUF9OT0ZTKTsKLQlyZXR1cm47Ci1hdHRyX2Vycl9vdXQ6Ci0JcHJpbnRrKEtFUk5fRVJSICJWRlM6IE5vdCBlbm91Z2ggc3BhY2UgdG8gY29tcG9zZSBxdW90YSBtZXNzYWdlIVxuIik7Ci1lcnJfb3V0OgotCWtmcmVlX3NrYihza2IpOwotfQotRVhQT1JUX1NZTUJPTChxdW90YV9zZW5kX3dhcm5pbmcpOwotCi1zdGF0aWMgaW50IF9faW5pdCBxdW90YV9pbml0KHZvaWQpCi17Ci0JaWYgKGdlbmxfcmVnaXN0ZXJfZmFtaWx5KCZxdW90YV9nZW5sX2ZhbWlseSkgIT0gMCkKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiVkZTOiBGYWlsZWQgdG8gY3JlYXRlIHF1b3RhIG5ldGxpbmsgaW50ZXJmYWNlLlxuIik7Ci0JcmV0dXJuIDA7Ci19OwotCi1tb2R1bGVfaW5pdChxdW90YV9pbml0KTsKLSNlbmRpZgotCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9iaXRtYXAuYyBiL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCmluZGV4IDY1Yzg3MjcuLjQ4MzQ0MmUgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCisrKyBiL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCkBAIC0xNjksNyArMTY5LDcgQEAKIAkJCXJldHVybiAwOwkvLyBObyBmcmVlIGJsb2NrcyBpbiB0aGlzIGJpdG1hcAogCQl9CiAKLQkJLyogc2VhcmNoIGZvciBhIGZpcnN0IHplcm8gYml0IC0tIGJlZ2dpbmluZyBvZiBhIHdpbmRvdyAqLworCQkvKiBzZWFyY2ggZm9yIGEgZmlyc3QgemVybyBiaXQgLS0gYmVnaW5uaW5nIG9mIGEgd2luZG93ICovCiAJCSpiZWcgPSByZWlzZXJmc19maW5kX25leHRfemVyb19sZV9iaXQKIAkJICAgICgodW5zaWduZWQgbG9uZyAqKShiaC0+Yl9kYXRhKSwgYm91bmRhcnksICpiZWcpOwogCkBAIC00MjUsNyArNDI1LDcgQEAKIAogCWpvdXJuYWxfbWFya19kaXJ0eSh0aCwgcywgc2JoKTsKIAlpZiAoZm9yX3VuZm9ybWF0dGVkKQotCQl2ZnNfZHFfZnJlZV9ibG9ja19ub2RpcnR5KGlub2RlLCAxKTsKKwkJZHF1b3RfZnJlZV9ibG9ja19ub2RpcnR5KGlub2RlLCAxKTsKIH0KIAogdm9pZCByZWlzZXJmc19mcmVlX2Jsb2NrKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLApAQCAtMTA0OSw3ICsxMDQ5LDcgQEAKIAkJCSAgICAgICBhbW91bnRfbmVlZGVkLCBoaW50LT5pbm9kZS0+aV91aWQpOwogI2VuZGlmCiAJCXF1b3RhX3JldCA9Ci0JCSAgICB2ZnNfZHFfYWxsb2NfYmxvY2tfbm9kaXJ0eShoaW50LT5pbm9kZSwgYW1vdW50X25lZWRlZCk7CisJCSAgICBkcXVvdF9hbGxvY19ibG9ja19ub2RpcnR5KGhpbnQtPmlub2RlLCBhbW91bnRfbmVlZGVkKTsKIAkJaWYgKHF1b3RhX3JldCkJLyogUXVvdGEgZXhjZWVkZWQ/ICovCiAJCQlyZXR1cm4gUVVPVEFfRVhDRUVERUQ7CiAJCWlmIChoaW50LT5wcmVhbGxvY2F0ZSAmJiBoaW50LT5wcmVhbGxvY19zaXplKSB7CkBAIC0xMDU4LDcgKzEwNTgsNyBAQAogCQkJCSAgICAgICAicmVpc2VycXVvdGE6IGFsbG9jYXRpbmcgKHByZWFsbG9jKSAlZCBibG9ja3MgaWQ9JXUiLAogCQkJCSAgICAgICBoaW50LT5wcmVhbGxvY19zaXplLCBoaW50LT5pbm9kZS0+aV91aWQpOwogI2VuZGlmCi0JCQlxdW90YV9yZXQgPSB2ZnNfZHFfcHJlYWxsb2NfYmxvY2tfbm9kaXJ0eShoaW50LT5pbm9kZSwKKwkJCXF1b3RhX3JldCA9IGRxdW90X3ByZWFsbG9jX2Jsb2NrX25vZGlydHkoaGludC0+aW5vZGUsCiAJCQkJCQkJIGhpbnQtPnByZWFsbG9jX3NpemUpOwogCQkJaWYgKHF1b3RhX3JldCkKIAkJCQloaW50LT5wcmVhbGxvY2F0ZSA9IGhpbnQtPnByZWFsbG9jX3NpemUgPSAwOwpAQCAtMTA5Miw3ICsxMDkyLDcgQEAKIAkJCQkJICAgICAgIGhpbnQtPmlub2RlLT5pX3VpZCk7CiAjZW5kaWYKIAkJCQkvKiBGcmVlIG5vdCBhbGxvY2F0ZWQgYmxvY2tzICovCi0JCQkJdmZzX2RxX2ZyZWVfYmxvY2tfbm9kaXJ0eShoaW50LT5pbm9kZSwKKwkJCQlkcXVvdF9mcmVlX2Jsb2NrX25vZGlydHkoaGludC0+aW5vZGUsCiAJCQkJCWFtb3VudF9uZWVkZWQgKyBoaW50LT5wcmVhbGxvY19zaXplIC0KIAkJCQkJbnJfYWxsb2NhdGVkKTsKIAkJCX0KQEAgLTExMjUsNyArMTEyNSw3IEBACiAJCQkgICAgICAgUkVJU0VSRlNfSShoaW50LT5pbm9kZSktPmlfcHJlYWxsb2NfY291bnQsCiAJCQkgICAgICAgaGludC0+aW5vZGUtPmlfdWlkKTsKICNlbmRpZgotCQl2ZnNfZHFfZnJlZV9ibG9ja19ub2RpcnR5KGhpbnQtPmlub2RlLCBhbW91bnRfbmVlZGVkICsKKwkJZHF1b3RfZnJlZV9ibG9ja19ub2RpcnR5KGhpbnQtPmlub2RlLCBhbW91bnRfbmVlZGVkICsKIAkJCQkJIGhpbnQtPnByZWFsbG9jX3NpemUgLSBucl9hbGxvY2F0ZWQgLQogCQkJCQkgUkVJU0VSRlNfSShoaW50LT5pbm9kZSktPgogCQkJCQkgaV9wcmVhbGxvY19jb3VudCk7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9maWxlLmMgYi9mcy9yZWlzZXJmcy9maWxlLmMKaW5kZXggZGEyZGJhMC4uMWQ5YzEyNyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvZmlsZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2ZpbGUuYwpAQCAtMjg5LDcgKzI4OSw3IEBACiAJLmNvbXBhdF9pb2N0bCA9IHJlaXNlcmZzX2NvbXBhdF9pb2N0bCwKICNlbmRpZgogCS5tbWFwID0gcmVpc2VyZnNfZmlsZV9tbWFwLAotCS5vcGVuID0gZ2VuZXJpY19maWxlX29wZW4sCisJLm9wZW4gPSBkcXVvdF9maWxlX29wZW4sCiAJLnJlbGVhc2UgPSByZWlzZXJmc19maWxlX3JlbGVhc2UsCiAJLmZzeW5jID0gcmVpc2VyZnNfc3luY19maWxlLAogCS5haW9fcmVhZCA9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2lub2RlLmMgYi9mcy9yZWlzZXJmcy9pbm9kZS5jCmluZGV4IDJkZjBmNWMuLmQxZGE5NGIgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2lub2RlLmMKKysrIGIvZnMvcmVpc2VyZnMvaW5vZGUuYwpAQCAtMzQsNiArMzQsOSBAQAogCWludCBkZXB0aDsKIAlpbnQgZXJyOwogCisJaWYgKCFpc19iYWRfaW5vZGUoaW5vZGUpKQorCQlkcXVvdF9pbml0aWFsaXplKGlub2RlKTsKKwogCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKIAogCWRlcHRoID0gcmVpc2VyZnNfd3JpdGVfbG9ja19vbmNlKGlub2RlLT5pX3NiKTsKQEAgLTU0LDcgKzU3LDcgQEAKIAkJICogYWZ0ZXIgZGVsZXRlX29iamVjdCBzbyB0aGF0IHF1b3RhIHVwZGF0ZXMgZ28gaW50byB0aGUgc2FtZSB0cmFuc2FjdGlvbiBhcwogCQkgKiBzdGF0IGRhdGEgZGVsZXRpb24gKi8KIAkJaWYgKCFlcnIpIAotCQkJdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpOworCQkJZHF1b3RfZnJlZV9pbm9kZShpbm9kZSk7CiAKIAkJaWYgKGpvdXJuYWxfZW5kKCZ0aCwgaW5vZGUtPmlfc2IsIGpiZWdpbl9jb3VudCkpCiAJCQlnb3RvIG91dDsKQEAgLTE2MTUsNyArMTYxOCw3IEBACiAqKiB0byBwcm9wZXJseSBtYXJrIGlub2RlcyBmb3IgZGF0YXN5bmMgYW5kIHN1Y2gsIGJ1dCBvbmx5IGFjdHVhbGx5CiAqKiBkb2VzIHNvbWV0aGluZyB3aGVuIGNhbGxlZCBmb3IgYSBzeW5jaHJvbm91cyB1cGRhdGUuCiAqLwotaW50IHJlaXNlcmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBkb19zeW5jKQoraW50IHJlaXNlcmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQogewogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgdGg7CiAJaW50IGpiZWdpbl9jb3VudCA9IDE7CkBAIC0xNjI3LDcgKzE2MzAsNyBAQAogCSAqKiBpbm9kZSBuZWVkcyB0byByZWFjaCBkaXNrIGZvciBzYWZldHksIGFuZCB0aGV5IGNhbiBzYWZlbHkgYmUKIAkgKiogaWdub3JlZCBiZWNhdXNlIHRoZSBhbHRlcmVkIGlub2RlIGhhcyBhbHJlYWR5IGJlZW4gbG9nZ2VkLgogCSAqLwotCWlmIChkb19zeW5jICYmICEoY3VycmVudC0+ZmxhZ3MgJiBQRl9NRU1BTExPQykpIHsKKwlpZiAod2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwgJiYgIShjdXJyZW50LT5mbGFncyAmIFBGX01FTUFMTE9DKSkgewogCQlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKIAkJaWYgKCFqb3VybmFsX2JlZ2luKCZ0aCwgaW5vZGUtPmlfc2IsIGpiZWdpbl9jb3VudCkpIHsKIAkJCXJlaXNlcmZzX3VwZGF0ZV9zZCgmdGgsIGlub2RlKTsKQEAgLTE3NjUsMTAgKzE3NjgsMTAgQEAKIAogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCi0JaWYgKHZmc19kcV9hbGxvY19pbm9kZShpbm9kZSkpIHsKLQkJZXJyID0gLUVEUVVPVDsKKwlkcXVvdF9pbml0aWFsaXplKGlub2RlKTsKKwllcnIgPSBkcXVvdF9hbGxvY19pbm9kZShpbm9kZSk7CisJaWYgKGVycikKIAkJZ290byBvdXRfZW5kX3RyYW5zOwotCX0KIAlpZiAoIWRpci0+aV9ubGluaykgewogCQllcnIgPSAtRVBFUk07CiAJCWdvdG8gb3V0X2JhZF9pbm9kZTsKQEAgLTE5NTksMTIgKzE5NjIsMTIgQEAKIAlJTk9ERV9QS0VZKGlub2RlKS0+a19vYmplY3RpZCA9IDA7CiAKIAkvKiBRdW90YSBjaGFuZ2UgbXVzdCBiZSBpbnNpZGUgYSB0cmFuc2FjdGlvbiBmb3Igam91cm5hbGluZyAqLwotCXZmc19kcV9mcmVlX2lub2RlKGlub2RlKTsKKwlkcXVvdF9mcmVlX2lub2RlKGlub2RlKTsKIAogICAgICAgb3V0X2VuZF90cmFuczoKIAlqb3VybmFsX2VuZCh0aCwgdGgtPnRfc3VwZXIsIHRoLT50X2Jsb2Nrc19hbGxvY2F0ZWQpOwogCS8qIERyb3AgY2FuIGJlIG91dHNpZGUgYW5kIGl0IG5lZWRzIG1vcmUgY3JlZGl0cyBzbyBpdCdzIGJldHRlciB0byBoYXZlIGl0IG91dHNpZGUgKi8KLQl2ZnNfZHFfZHJvcChpbm9kZSk7CisJZHF1b3RfZHJvcChpbm9kZSk7CiAJaW5vZGUtPmlfZmxhZ3MgfD0gU19OT1FVT1RBOwogCW1ha2VfYmFkX2lub2RlKGlub2RlKTsKIApAQCAtMzA3Myw2ICszMDc2LDggQEAKIAogCWRlcHRoID0gcmVpc2VyZnNfd3JpdGVfbG9ja19vbmNlKGlub2RlLT5pX3NiKTsKIAlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpIHsKKwkJZHF1b3RfaW5pdGlhbGl6ZShpbm9kZSk7CisKIAkJLyogdmVyc2lvbiAyIGl0ZW1zIHdpbGwgYmUgY2F1Z2h0IGJ5IHRoZSBzX21heGJ5dGVzIGNoZWNrCiAJCSAqKiBkb25lIGZvciB1cyBpbiB2bXRydW5jYXRlCiAJCSAqLwpAQCAtMzEzNCw4ICszMTM5LDcgQEAKIAkJCQkJCSAgamJlZ2luX2NvdW50KTsKIAkJCQlpZiAoZXJyb3IpCiAJCQkJCWdvdG8gb3V0OwotCQkJCWVycm9yID0KLQkJCQkgICAgdmZzX2RxX3RyYW5zZmVyKGlub2RlLCBhdHRyKSA/IC1FRFFVT1QgOiAwOworCQkJCWVycm9yID0gZHF1b3RfdHJhbnNmZXIoaW5vZGUsIGF0dHIpOwogCQkJCWlmIChlcnJvcikgewogCQkJCQlqb3VybmFsX2VuZCgmdGgsIGlub2RlLT5pX3NiLAogCQkJCQkJICAgIGpiZWdpbl9jb3VudCk7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9uYW1laS5jIGIvZnMvcmVpc2VyZnMvbmFtZWkuYwppbmRleCA5ZDRkY2YwLi45NmU0Y2JiIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9uYW1laS5jCisrKyBiL2ZzL3JlaXNlcmZzL25hbWVpLmMKQEAgLTU0Niw3ICs1NDYsNyBAQAogKi8KIHN0YXRpYyBpbnQgZHJvcF9uZXdfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQl2ZnNfZHFfZHJvcChpbm9kZSk7CisJZHF1b3RfZHJvcChpbm9kZSk7CiAJbWFrZV9iYWRfaW5vZGUoaW5vZGUpOwogCWlub2RlLT5pX2ZsYWdzIHw9IFNfTk9RVU9UQTsKIAlpcHV0KGlub2RlKTsKQEAgLTU1NCw3ICs1NTQsNyBAQAogfQogCiAvKiB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgZG9lcyBzZXR1cCBmb3IgcmVpc2VyZnNfbmV3X2lub2RlLgotKiogdmZzX2RxX2luaXQgbmVlZHMgbG90cyBvZiBjcmVkaXRzIHNvIGl0J3MgYmV0dGVyIHRvIGhhdmUgaXQKKyoqIGRxdW90X2luaXRpYWxpemUgbmVlZHMgbG90cyBvZiBjcmVkaXRzIHNvIGl0J3MgYmV0dGVyIHRvIGhhdmUgaXQKICoqIG91dHNpZGUgb2YgYSB0cmFuc2FjdGlvbiwgc28gd2UgaGFkIHRvIHB1bGwgc29tZSBiaXRzIG9mCiAqKiByZWlzZXJmc19uZXdfaW5vZGUgb3V0IGludG8gdGhpcyBmdW5jLgogKi8KQEAgLTU3Nyw3ICs1NzcsNyBAQAogCX0gZWxzZSB7CiAJCWlub2RlLT5pX2dpZCA9IGN1cnJlbnRfZnNnaWQoKTsKIAl9Ci0JdmZzX2RxX2luaXQoaW5vZGUpOworCWRxdW90X2luaXRpYWxpemUoaW5vZGUpOwogCXJldHVybiAwOwogfQogCkBAIC01OTQsNiArNTk0LDggQEAKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOwogCXN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgc2VjdXJpdHk7CiAKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CisKIAlpZiAoIShpbm9kZSA9IG5ld19pbm9kZShkaXItPmlfc2IpKSkgewogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC02NjYsNiArNjY4LDggQEAKIAlpZiAoIW5ld192YWxpZF9kZXYocmRldikpCiAJCXJldHVybiAtRUlOVkFMOwogCisJZHF1b3RfaW5pdGlhbGl6ZShkaXIpOworCiAJaWYgKCEoaW5vZGUgPSBuZXdfaW5vZGUoZGlyLT5pX3NiKSkpIHsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtNzM5LDYgKzc0Myw4IEBACiAJICAgIDIgKiAoUkVJU0VSRlNfUVVPVEFfSU5JVF9CTE9DS1MoZGlyLT5pX3NiKSArCiAJCSBSRUlTRVJGU19RVU9UQV9UUkFOU19CTE9DS1MoZGlyLT5pX3NiKSk7CiAKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CisKICNpZmRlZiBESVNQTEFDRV9ORVdfUEFDS0lOR19MT0NBTElUSUVTCiAJLyogc2V0IGZsYWcgdGhhdCBuZXcgcGFja2luZyBsb2NhbGl0eSBjcmVhdGVkIGFuZCBuZXcgYmxvY2tzIGZvciB0aGUgY29udGVudCAgICAgKiBvZiB0aGF0IGRpcmVjdG9yeSBhcmUgbm90IGRpc3BsYWNlZCB5ZXQgKi8KIAlSRUlTRVJGU19JKGRpciktPm5ld19wYWNraW5nX2xvY2FsaXR5ID0gMTsKQEAgLTg0Miw2ICs4NDgsOCBAQAogCSAgICBKT1VSTkFMX1BFUl9CQUxBTkNFX0NOVCAqIDIgKyAyICsKIAkgICAgNCAqIFJFSVNFUkZTX1FVT1RBX1RSQU5TX0JMT0NLUyhkaXItPmlfc2IpOwogCisJZHF1b3RfaW5pdGlhbGl6ZShkaXIpOworCiAJcmVpc2VyZnNfd3JpdGVfbG9jayhkaXItPmlfc2IpOwogCXJldHZhbCA9IGpvdXJuYWxfYmVnaW4oJnRoLCBkaXItPmlfc2IsIGpiZWdpbl9jb3VudCk7CiAJaWYgKHJldHZhbCkKQEAgLTkyMyw2ICs5MzEsOCBAQAogCXVuc2lnbmVkIGxvbmcgc2F2ZWxpbms7CiAJaW50IGRlcHRoOwogCisJZHF1b3RfaW5pdGlhbGl6ZShkaXIpOworCiAJaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAKIAkvKiBpbiB0aGlzIHRyYW5zYWN0aW9uIHdlIGNhbiBiZSBkb2luZyBhdCBtYXggdHdvIGJhbGFuY2luZ3MgYW5kIHVwZGF0ZQpAQCAtMTAyNCw2ICsxMDM0LDggQEAKIAkgICAgMiAqIChSRUlTRVJGU19RVU9UQV9JTklUX0JMT0NLUyhwYXJlbnRfZGlyLT5pX3NiKSArCiAJCSBSRUlTRVJGU19RVU9UQV9UUkFOU19CTE9DS1MocGFyZW50X2Rpci0+aV9zYikpOwogCisJZHF1b3RfaW5pdGlhbGl6ZShwYXJlbnRfZGlyKTsKKwogCWlmICghKGlub2RlID0gbmV3X2lub2RlKHBhcmVudF9kaXItPmlfc2IpKSkgewogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0xMTExLDYgKzExMjMsOCBAQAogCSAgICBKT1VSTkFMX1BFUl9CQUxBTkNFX0NOVCAqIDMgKwogCSAgICAyICogUkVJU0VSRlNfUVVPVEFfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYik7CiAKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CisKIAlyZWlzZXJmc193cml0ZV9sb2NrKGRpci0+aV9zYik7CiAJaWYgKGlub2RlLT5pX25saW5rID49IFJFSVNFUkZTX0xJTktfTUFYKSB7CiAJCS8vRklYTUU6IHNkX25saW5rIGlzIDMyIGJpdCBmb3IgbmV3IGZpbGVzCkBAIC0xMjM1LDYgKzEyNDksOSBAQAogCSAgICBKT1VSTkFMX1BFUl9CQUxBTkNFX0NOVCAqIDMgKyA1ICsKIAkgICAgNCAqIFJFSVNFUkZTX1FVT1RBX1RSQU5TX0JMT0NLUyhvbGRfZGlyLT5pX3NiKTsKIAorCWRxdW90X2luaXRpYWxpemUob2xkX2Rpcik7CisJZHF1b3RfaW5pdGlhbGl6ZShuZXdfZGlyKTsKKwogCW9sZF9pbm9kZSA9IG9sZF9kZW50cnktPmRfaW5vZGU7CiAJbmV3X2RlbnRyeV9pbm9kZSA9IG5ld19kZW50cnktPmRfaW5vZGU7CiAKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3N0cmVlLmMgYi9mcy9yZWlzZXJmcy9zdHJlZS5jCmluZGV4IDVmYTcxMTguLjMxM2QzOWQgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N0cmVlLmMKKysrIGIvZnMvcmVpc2VyZnMvc3RyZWUuYwpAQCAtMTI5OSw3ICsxMjk5LDcgQEAKIAkJICAgICAgICJyZWlzZXJxdW90YSBkZWxldGVfaXRlbSgpOiBmcmVlaW5nICV1LCBpZD0ldSB0eXBlPSVjIiwKIAkJICAgICAgIHF1b3RhX2N1dF9ieXRlcywgaW5vZGUtPmlfdWlkLCBoZWFkMnR5cGUoJnNfaWgpKTsKICNlbmRpZgotCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsIHF1b3RhX2N1dF9ieXRlcyk7CisJZHF1b3RfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBxdW90YV9jdXRfYnl0ZXMpOwogCiAJLyogUmV0dXJuIGRlbGV0ZWQgYm9keSBsZW5ndGggKi8KIAlyZXR1cm4gcmV0X3ZhbHVlOwpAQCAtMTM4Myw3ICsxMzgzLDcgQEAKIAkJCQkJICAgICAgIHF1b3RhX2N1dF9ieXRlcywgaW5vZGUtPmlfdWlkLAogCQkJCQkgICAgICAga2V5MnR5cGUoa2V5KSk7CiAjZW5kaWYKLQkJCQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLAorCQkJCWRxdW90X2ZyZWVfc3BhY2Vfbm9kaXJ0eShpbm9kZSwKIAkJCQkJCQkgcXVvdGFfY3V0X2J5dGVzKTsKIAkJCX0KIAkJCWJyZWFrOwpAQCAtMTczMyw3ICsxNzMzLDcgQEAKIAkJICAgICAgICJyZWlzZXJxdW90YSBjdXRfZnJvbV9pdGVtKCk6IGZyZWVpbmcgJXUgaWQ9JXUgdHlwZT0lYyIsCiAJCSAgICAgICBxdW90YV9jdXRfYnl0ZXMsIGlub2RlLT5pX3VpZCwgJz8nKTsKICNlbmRpZgotCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsIHF1b3RhX2N1dF9ieXRlcyk7CisJZHF1b3RfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBxdW90YV9jdXRfYnl0ZXMpOwogCXJldHVybiByZXRfdmFsdWU7CiB9CiAKQEAgLTE5NjgsOSArMTk2OCwxMCBAQAogCQkgICAgICAga2V5MnR5cGUoJihrZXktPm9uX2Rpc2tfa2V5KSkpOwogI2VuZGlmCiAKLQlpZiAodmZzX2RxX2FsbG9jX3NwYWNlX25vZGlydHkoaW5vZGUsIHBhc3RlZF9zaXplKSkgeworCXJldHZhbCA9IGRxdW90X2FsbG9jX3NwYWNlX25vZGlydHkoaW5vZGUsIHBhc3RlZF9zaXplKTsKKwlpZiAocmV0dmFsKSB7CiAJCXBhdGhyZWxzZShzZWFyY2hfcGF0aCk7Ci0JCXJldHVybiAtRURRVU9UOworCQlyZXR1cm4gcmV0dmFsOwogCX0KIAlpbml0X3RiX3N0cnVjdCh0aCwgJnNfcGFzdGVfYmFsYW5jZSwgdGgtPnRfc3VwZXIsIHNlYXJjaF9wYXRoLAogCQkgICAgICAgcGFzdGVkX3NpemUpOwpAQCAtMjAyNCw3ICsyMDI1LDcgQEAKIAkJICAgICAgIHBhc3RlZF9zaXplLCBpbm9kZS0+aV91aWQsCiAJCSAgICAgICBrZXkydHlwZSgmKGtleS0+b25fZGlza19rZXkpKSk7CiAjZW5kaWYKLQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBwYXN0ZWRfc2l6ZSk7CisJZHF1b3RfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBwYXN0ZWRfc2l6ZSk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMjA2Miw5ICsyMDYzLDEwIEBACiAjZW5kaWYKIAkJLyogV2UgY2FuJ3QgZGlydHkgaW5vZGUgaGVyZS4gSXQgd291bGQgYmUgaW1tZWRpYXRlbHkgd3JpdHRlbiBidXQKIAkJICogYXBwcm9wcmlhdGUgc3RhdCBpdGVtIGlzbid0IGluc2VydGVkIHlldC4uLiAqLwotCQlpZiAodmZzX2RxX2FsbG9jX3NwYWNlX25vZGlydHkoaW5vZGUsIHF1b3RhX2J5dGVzKSkgeworCQlyZXR2YWwgPSBkcXVvdF9hbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLCBxdW90YV9ieXRlcyk7CisJCWlmIChyZXR2YWwpIHsKIAkJCXBhdGhyZWxzZShwYXRoKTsKLQkJCXJldHVybiAtRURRVU9UOworCQkJcmV0dXJuIHJldHZhbDsKIAkJfQogCX0KIAlpbml0X3RiX3N0cnVjdCh0aCwgJnNfaW5zX2JhbGFuY2UsIHRoLT50X3N1cGVyLCBwYXRoLApAQCAtMjExMyw2ICsyMTE1LDYgQEAKIAkJICAgICAgIHF1b3RhX2J5dGVzLCBpbm9kZS0+aV91aWQsIGhlYWQydHlwZShpaCkpOwogI2VuZGlmCiAJaWYgKGlub2RlKQotCQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBxdW90YV9ieXRlcyk7CisJCWRxdW90X2ZyZWVfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgcXVvdGFfYnl0ZXMpOwogCXJldHVybiByZXR2YWw7CiB9CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9zdXBlci5jIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwppbmRleCBiNGE3ZGQwLi4wNGJmNWQ3IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9zdXBlci5jCisrKyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCQkJcmV0dmFsID0gcmVtb3ZlX3NhdmVfbGlua19vbmx5KHMsICZzYXZlX2xpbmtfa2V5LCAwKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCXZmc19kcV9pbml0KGlub2RlKTsKKwkJZHF1b3RfaW5pdGlhbGl6ZShpbm9kZSk7CiAKIAkJaWYgKHRydW5jYXRlICYmIFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKIAkJCS8qIFdlIGdvdCBhIHRydW5jYXRlIHJlcXVlc3QgZm9yIGEgZGlyIHdoaWNoIGlzIGltcG9zc2libGUuCkBAIC01NzgsNiArNTc4LDExIEBACiAJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX29uY2UoaW5vZGUtPmlfc2IsIGxvY2tfZGVwdGgpOwogfQogCitzdGF0aWMgdm9pZCByZWlzZXJmc19jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWRxdW90X2Ryb3AoaW5vZGUpOworfQorCiAjaWZkZWYgQ09ORklHX1FVT1RBCiBzdGF0aWMgc3NpemVfdCByZWlzZXJmc19xdW90YV93cml0ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBjb25zdCBjaGFyICosCiAJCQkJICAgIHNpemVfdCwgbG9mZl90KTsKQEAgLTU5MCw2ICs1OTUsNyBAQAogCS5kZXN0cm95X2lub2RlID0gcmVpc2VyZnNfZGVzdHJveV9pbm9kZSwKIAkud3JpdGVfaW5vZGUgPSByZWlzZXJmc193cml0ZV9pbm9kZSwKIAkuZGlydHlfaW5vZGUgPSByZWlzZXJmc19kaXJ0eV9pbm9kZSwKKwkuY2xlYXJfaW5vZGUgPSByZWlzZXJmc19jbGVhcl9pbm9kZSwKIAkuZGVsZXRlX2lub2RlID0gcmVpc2VyZnNfZGVsZXRlX2lub2RlLAogCS5wdXRfc3VwZXIgPSByZWlzZXJmc19wdXRfc3VwZXIsCiAJLndyaXRlX3N1cGVyID0gcmVpc2VyZnNfd3JpdGVfc3VwZXIsCkBAIC02MTYsMTMgKzYyMiw2IEBACiBzdGF0aWMgaW50IHJlaXNlcmZzX3F1b3RhX29uKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIGludCwgY2hhciAqLCBpbnQpOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRxdW90X29wZXJhdGlvbnMgcmVpc2VyZnNfcXVvdGFfb3BlcmF0aW9ucyA9IHsKLQkuaW5pdGlhbGl6ZSA9IGRxdW90X2luaXRpYWxpemUsCi0JLmRyb3AgPSBkcXVvdF9kcm9wLAotCS5hbGxvY19zcGFjZSA9IGRxdW90X2FsbG9jX3NwYWNlLAotCS5hbGxvY19pbm9kZSA9IGRxdW90X2FsbG9jX2lub2RlLAotCS5mcmVlX3NwYWNlID0gZHF1b3RfZnJlZV9zcGFjZSwKLQkuZnJlZV9pbm9kZSA9IGRxdW90X2ZyZWVfaW5vZGUsCi0JLnRyYW5zZmVyID0gZHF1b3RfdHJhbnNmZXIsCiAJLndyaXRlX2RxdW90ID0gcmVpc2VyZnNfd3JpdGVfZHF1b3QsCiAJLmFjcXVpcmVfZHF1b3QgPSByZWlzZXJmc19hY3F1aXJlX2RxdW90LAogCS5yZWxlYXNlX2RxdW90ID0gcmVpc2VyZnNfcmVsZWFzZV9kcXVvdCwKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMgYi9mcy9yZWlzZXJmcy94YXR0ci5jCmluZGV4IDgxZjA5ZmEuLjM3ZDAzNGMgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHIuYwpAQCAtNjEsNyArNjEsNiBAQAogc3RhdGljIGludCB4YXR0cl9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCiB7CiAJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRpci0+aV9tdXRleCkpOwotCXZmc19kcV9pbml0KGRpcik7CiAJcmV0dXJuIGRpci0+aV9vcC0+Y3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlLCBOVUxMKTsKIH0KICNlbmRpZgpAQCAtNjksNyArNjgsNiBAQAogc3RhdGljIGludCB4YXR0cl9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKIHsKIAlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGlyLT5pX211dGV4KSk7Ci0JdmZzX2RxX2luaXQoZGlyKTsKIAlyZXR1cm4gZGlyLT5pX29wLT5ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7CiB9CiAKQEAgLTgxLDcgKzc5LDYgQEAKIHsKIAlpbnQgZXJyb3I7CiAJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRpci0+aV9tdXRleCkpOwotCXZmc19kcV9pbml0KGRpcik7CiAKIAlyZWlzZXJmc19tdXRleF9sb2NrX25lc3RlZF9zYWZlKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgsCiAJCQkJCUlfTVVURVhfQ0hJTEQsIGRpci0+aV9zYik7CkBAIC05Nyw3ICs5NCw2IEBACiB7CiAJaW50IGVycm9yOwogCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkaXItPmlfbXV0ZXgpKTsKLQl2ZnNfZHFfaW5pdChkaXIpOwogCiAJcmVpc2VyZnNfbXV0ZXhfbG9ja19uZXN0ZWRfc2FmZSgmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4LAogCQkJCQlJX01VVEVYX0NISUxELCBkaXItPmlfc2IpOwpkaWZmIC0tZ2l0IGEvZnMvc2VsZWN0LmMgYi9mcy9zZWxlY3QuYwppbmRleCBmZDM4Y2UyLi41MDBhNjY5IDEwMDY0NAotLS0gYS9mcy9zZWxlY3QuYworKysgYi9mcy9zZWxlY3QuYwpAQCAtNjkxLDYgKzY5MSwyMyBAQAogfQogI2VuZGlmIC8qIEhBVkVfU0VUX1JFU1RPUkVfU0lHTUFTSyAqLwogCisjaWZkZWYgX19BUkNIX1dBTlRfU1lTX09MRF9TRUxFQ1QKK3N0cnVjdCBzZWxfYXJnX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBuOworCWZkX3NldCBfX3VzZXIgKmlucCwgKm91dHAsICpleHA7CisJc3RydWN0IHRpbWV2YWwgX191c2VyICp0dnA7Cit9OworCitTWVNDQUxMX0RFRklORTEob2xkX3NlbGVjdCwgc3RydWN0IHNlbF9hcmdfc3RydWN0IF9fdXNlciAqLCBhcmcpCit7CisJc3RydWN0IHNlbF9hcmdfc3RydWN0IGE7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmEsIGFyZywgc2l6ZW9mKGEpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIHN5c19zZWxlY3QoYS5uLCBhLmlucCwgYS5vdXRwLCBhLmV4cCwgYS50dnApOworfQorI2VuZGlmCisKIHN0cnVjdCBwb2xsX2xpc3QgewogCXN0cnVjdCBwb2xsX2xpc3QgKm5leHQ7CiAJaW50IGxlbjsKQEAgLTgyMSw3ICs4MzgsNyBAQAogIAlzdHJ1Y3QgcG9sbF9saXN0ICp3YWxrID0gaGVhZDsKICAJdW5zaWduZWQgbG9uZyB0b2RvID0gbmZkczsKIAotCWlmIChuZmRzID4gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9OT0ZJTEVdLnJsaW1fY3VyKQorCWlmIChuZmRzID4gcmxpbWl0KFJMSU1JVF9OT0ZJTEUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWxlbiA9IG1pbl90KHVuc2lnbmVkIGludCwgbmZkcywgTl9TVEFDS19QUFMpOwpkaWZmIC0tZ2l0IGEvZnMvc2VxX2ZpbGUuYyBiL2ZzL3NlcV9maWxlLmMKaW5kZXggZWFlN2Q5ZC4uZTFmNDM3YiAxMDA2NDQKLS0tIGEvZnMvc2VxX2ZpbGUuYworKysgYi9mcy9zZXFfZmlsZS5jCkBAIC02NzQsNyArNjc0LDYgQEAKIAogCXJldHVybiBOVUxMOwogfQotCiBFWFBPUlRfU1lNQk9MKHNlcV9saXN0X3N0YXJ0KTsKIAogc3RydWN0IGxpc3RfaGVhZCAqc2VxX2xpc3Rfc3RhcnRfaGVhZChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCBsb2ZmX3QgcG9zKQpAQCAtNjg0LDcgKzY4Myw2IEBACiAKIAlyZXR1cm4gc2VxX2xpc3Rfc3RhcnQoaGVhZCwgcG9zIC0gMSk7CiB9Ci0KIEVYUE9SVF9TWU1CT0woc2VxX2xpc3Rfc3RhcnRfaGVhZCk7CiAKIHN0cnVjdCBsaXN0X2hlYWQgKnNlcV9saXN0X25leHQodm9pZCAqdiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgbG9mZl90ICpwcG9zKQpAQCAtNjk1LDUgKzY5MywxMzEgQEAKIAkrKypwcG9zOwogCXJldHVybiBsaCA9PSBoZWFkID8gTlVMTCA6IGxoOwogfQotCiBFWFBPUlRfU1lNQk9MKHNlcV9saXN0X25leHQpOworCisvKioKKyAqIHNlcV9obGlzdF9zdGFydCAtIHN0YXJ0IGFuIGl0ZXJhdGlvbiBvZiBhIGhsaXN0CisgKiBAaGVhZDogdGhlIGhlYWQgb2YgdGhlIGhsaXN0CisgKiBAcG9zOiAgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBzZXF1ZW5jZQorICoKKyAqIENhbGxlZCBhdCBzZXFfZmlsZS0+b3AtPnN0YXJ0KCkuCisgKi8KK3N0cnVjdCBobGlzdF9ub2RlICpzZXFfaGxpc3Rfc3RhcnQoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsIGxvZmZfdCBwb3MpCit7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisKKwlobGlzdF9mb3JfZWFjaChub2RlLCBoZWFkKQorCQlpZiAocG9zLS0gPT0gMCkKKwkJCXJldHVybiBub2RlOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChzZXFfaGxpc3Rfc3RhcnQpOworCisvKioKKyAqIHNlcV9obGlzdF9zdGFydF9oZWFkIC0gc3RhcnQgYW4gaXRlcmF0aW9uIG9mIGEgaGxpc3QKKyAqIEBoZWFkOiB0aGUgaGVhZCBvZiB0aGUgaGxpc3QKKyAqIEBwb3M6ICB0aGUgc3RhcnQgcG9zaXRpb24gb2YgdGhlIHNlcXVlbmNlCisgKgorICogQ2FsbGVkIGF0IHNlcV9maWxlLT5vcC0+c3RhcnQoKS4gQ2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHlvdSB3YW50IHRvCisgKiBwcmludCBhIGhlYWRlciBhdCB0aGUgdG9wIG9mIHRoZSBvdXRwdXQuCisgKi8KK3N0cnVjdCBobGlzdF9ub2RlICpzZXFfaGxpc3Rfc3RhcnRfaGVhZChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwgbG9mZl90IHBvcykKK3sKKwlpZiAoIXBvcykKKwkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKKworCXJldHVybiBzZXFfaGxpc3Rfc3RhcnQoaGVhZCwgcG9zIC0gMSk7Cit9CitFWFBPUlRfU1lNQk9MKHNlcV9obGlzdF9zdGFydF9oZWFkKTsKKworLyoqCisgKiBzZXFfaGxpc3RfbmV4dCAtIG1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24gb2YgdGhlIGhsaXN0CisgKiBAdjogICAgdGhlIGN1cnJlbnQgaXRlcmF0b3IKKyAqIEBoZWFkOiB0aGUgaGVhZCBvZiB0aGUgaGxpc3QKKyAqIEBwcG9zOiB0aGUgY3VycmVudCBwb3NpdGlvbgorICoKKyAqIENhbGxlZCBhdCBzZXFfZmlsZS0+b3AtPm5leHQoKS4KKyAqLworc3RydWN0IGhsaXN0X25vZGUgKnNlcV9obGlzdF9uZXh0KHZvaWQgKnYsIHN0cnVjdCBobGlzdF9oZWFkICpoZWFkLAorCQkJCSAgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlID0gdjsKKworCSsrKnBwb3M7CisJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQorCQlyZXR1cm4gaGVhZC0+Zmlyc3Q7CisJZWxzZQorCQlyZXR1cm4gbm9kZS0+bmV4dDsKK30KK0VYUE9SVF9TWU1CT0woc2VxX2hsaXN0X25leHQpOworCisvKioKKyAqIHNlcV9obGlzdF9zdGFydF9yY3UgLSBzdGFydCBhbiBpdGVyYXRpb24gb2YgYSBobGlzdCBwcm90ZWN0ZWQgYnkgUkNVCisgKiBAaGVhZDogdGhlIGhlYWQgb2YgdGhlIGhsaXN0CisgKiBAcG9zOiAgdGhlIHN0YXJ0IHBvc2l0aW9uIG9mIHRoZSBzZXF1ZW5jZQorICoKKyAqIENhbGxlZCBhdCBzZXFfZmlsZS0+b3AtPnN0YXJ0KCkuCisgKgorICogVGhpcyBsaXN0LXRyYXZlcnNhbCBwcmltaXRpdmUgbWF5IHNhZmVseSBydW4gY29uY3VycmVudGx5IHdpdGgKKyAqIHRoZSBfcmN1IGxpc3QtbXV0YXRpb24gcHJpbWl0aXZlcyBzdWNoIGFzIGhsaXN0X2FkZF9oZWFkX3JjdSgpCisgKiBhcyBsb25nIGFzIHRoZSB0cmF2ZXJzYWwgaXMgZ3VhcmRlZCBieSByY3VfcmVhZF9sb2NrKCkuCisgKi8KK3N0cnVjdCBobGlzdF9ub2RlICpzZXFfaGxpc3Rfc3RhcnRfcmN1KHN0cnVjdCBobGlzdF9oZWFkICpoZWFkLAorCQkJCSAgICAgICBsb2ZmX3QgcG9zKQoreworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCisJX19obGlzdF9mb3JfZWFjaF9yY3Uobm9kZSwgaGVhZCkKKwkJaWYgKHBvcy0tID09IDApCisJCQlyZXR1cm4gbm9kZTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woc2VxX2hsaXN0X3N0YXJ0X3JjdSk7CisKKy8qKgorICogc2VxX2hsaXN0X3N0YXJ0X2hlYWRfcmN1IC0gc3RhcnQgYW4gaXRlcmF0aW9uIG9mIGEgaGxpc3QgcHJvdGVjdGVkIGJ5IFJDVQorICogQGhlYWQ6IHRoZSBoZWFkIG9mIHRoZSBobGlzdAorICogQHBvczogIHRoZSBzdGFydCBwb3NpdGlvbiBvZiB0aGUgc2VxdWVuY2UKKyAqCisgKiBDYWxsZWQgYXQgc2VxX2ZpbGUtPm9wLT5zdGFydCgpLiBDYWxsIHRoaXMgZnVuY3Rpb24gaWYgeW91IHdhbnQgdG8KKyAqIHByaW50IGEgaGVhZGVyIGF0IHRoZSB0b3Agb2YgdGhlIG91dHB1dC4KKyAqCisgKiBUaGlzIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZSBtYXkgc2FmZWx5IHJ1biBjb25jdXJyZW50bHkgd2l0aAorICogdGhlIF9yY3UgbGlzdC1tdXRhdGlvbiBwcmltaXRpdmVzIHN1Y2ggYXMgaGxpc3RfYWRkX2hlYWRfcmN1KCkKKyAqIGFzIGxvbmcgYXMgdGhlIHRyYXZlcnNhbCBpcyBndWFyZGVkIGJ5IHJjdV9yZWFkX2xvY2soKS4KKyAqLworc3RydWN0IGhsaXN0X25vZGUgKnNlcV9obGlzdF9zdGFydF9oZWFkX3JjdShzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkJICAgIGxvZmZfdCBwb3MpCit7CisJaWYgKCFwb3MpCisJCXJldHVybiBTRVFfU1RBUlRfVE9LRU47CisKKwlyZXR1cm4gc2VxX2hsaXN0X3N0YXJ0X3JjdShoZWFkLCBwb3MgLSAxKTsKK30KK0VYUE9SVF9TWU1CT0woc2VxX2hsaXN0X3N0YXJ0X2hlYWRfcmN1KTsKKworLyoqCisgKiBzZXFfaGxpc3RfbmV4dF9yY3UgLSBtb3ZlIHRvIHRoZSBuZXh0IHBvc2l0aW9uIG9mIHRoZSBobGlzdCBwcm90ZWN0ZWQgYnkgUkNVCisgKiBAdjogICAgdGhlIGN1cnJlbnQgaXRlcmF0b3IKKyAqIEBoZWFkOiB0aGUgaGVhZCBvZiB0aGUgaGxpc3QKKyAqIEBwcG9zOiB0aGUgY3VycmVudCBwb3NpdGlvbgorICoKKyAqIENhbGxlZCBhdCBzZXFfZmlsZS0+b3AtPm5leHQoKS4KKyAqCisgKiBUaGlzIGxpc3QtdHJhdmVyc2FsIHByaW1pdGl2ZSBtYXkgc2FmZWx5IHJ1biBjb25jdXJyZW50bHkgd2l0aAorICogdGhlIF9yY3UgbGlzdC1tdXRhdGlvbiBwcmltaXRpdmVzIHN1Y2ggYXMgaGxpc3RfYWRkX2hlYWRfcmN1KCkKKyAqIGFzIGxvbmcgYXMgdGhlIHRyYXZlcnNhbCBpcyBndWFyZGVkIGJ5IHJjdV9yZWFkX2xvY2soKS4KKyAqLworc3RydWN0IGhsaXN0X25vZGUgKnNlcV9obGlzdF9uZXh0X3JjdSh2b2lkICp2LAorCQkJCSAgICAgIHN0cnVjdCBobGlzdF9oZWFkICpoZWFkLAorCQkJCSAgICAgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSA9IHY7CisKKwkrKypwcG9zOworCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKKwkJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZShoZWFkLT5maXJzdCk7CisJZWxzZQorCQlyZXR1cm4gcmN1X2RlcmVmZXJlbmNlKG5vZGUtPm5leHQpOworfQorRVhQT1JUX1NZTUJPTChzZXFfaGxpc3RfbmV4dF9yY3UpOwpkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvTWFrZWZpbGUgYi9mcy9zcXVhc2hmcy9NYWtlZmlsZQppbmRleCA3MGUzMjQ0Li5kZjhhMTllIDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy9NYWtlZmlsZQorKysgYi9mcy9zcXVhc2hmcy9NYWtlZmlsZQpAQCAtNCw0ICs0LDQgQEAKIAogb2JqLSQoQ09ORklHX1NRVUFTSEZTKSArPSBzcXVhc2hmcy5vCiBzcXVhc2hmcy15ICs9IGJsb2NrLm8gY2FjaGUubyBkaXIubyBleHBvcnQubyBmaWxlLm8gZnJhZ21lbnQubyBpZC5vIGlub2RlLm8KLXNxdWFzaGZzLXkgKz0gbmFtZWkubyBzdXBlci5vIHN5bWxpbmsubworc3F1YXNoZnMteSArPSBuYW1laS5vIHN1cGVyLm8gc3ltbGluay5vIHpsaWJfd3JhcHBlci5vIGRlY29tcHJlc3Nvci5vCmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9ibG9jay5jIGIvZnMvc3F1YXNoZnMvYmxvY2suYwppbmRleCAyYTc5NjAzLi4xY2IwZDgxIDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy9ibG9jay5jCisrKyBiL2ZzL3NxdWFzaGZzL2Jsb2NrLmMKQEAgLTI5LDE1ICsyOSwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdmZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KLSNpbmNsdWRlIDxsaW51eC96bGliLmg+CiAKICNpbmNsdWRlICJzcXVhc2hmc19mcy5oIgogI2luY2x1ZGUgInNxdWFzaGZzX2ZzX3NiLmgiCiAjaW5jbHVkZSAic3F1YXNoZnNfZnNfaS5oIgogI2luY2x1ZGUgInNxdWFzaGZzLmgiCisjaW5jbHVkZSAiZGVjb21wcmVzc29yLmgiCiAKIC8qCiAgKiBSZWFkIHRoZSBtZXRhZGF0YSBibG9jayBsZW5ndGgsIHRoaXMgaXMgc3RvcmVkIGluIHRoZSBmaXJzdCB0d28KQEAgLTE1Myw3MiArMTUyLDEwIEBACiAJfQogCiAJaWYgKGNvbXByZXNzZWQpIHsKLQkJaW50IHpsaWJfZXJyID0gMCwgemxpYl9pbml0ID0gMDsKLQotCQkvKgotCQkgKiBVbmNvbXByZXNzIGJsb2NrLgotCQkgKi8KLQotCQltdXRleF9sb2NrKCZtc2Jsay0+cmVhZF9kYXRhX211dGV4KTsKLQotCQltc2Jsay0+c3RyZWFtLmF2YWlsX291dCA9IDA7Ci0JCW1zYmxrLT5zdHJlYW0uYXZhaWxfaW4gPSAwOwotCi0JCWJ5dGVzID0gbGVuZ3RoOwotCQlkbyB7Ci0JCQlpZiAobXNibGstPnN0cmVhbS5hdmFpbF9pbiA9PSAwICYmIGsgPCBiKSB7Ci0JCQkJYXZhaWwgPSBtaW4oYnl0ZXMsIG1zYmxrLT5kZXZibGtzaXplIC0gb2Zmc2V0KTsKLQkJCQlieXRlcyAtPSBhdmFpbDsKLQkJCQl3YWl0X29uX2J1ZmZlcihiaFtrXSk7Ci0JCQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmhba10pKQotCQkJCQlnb3RvIHJlbGVhc2VfbXV0ZXg7Ci0KLQkJCQlpZiAoYXZhaWwgPT0gMCkgewotCQkJCQlvZmZzZXQgPSAwOwotCQkJCQlwdXRfYmgoYmhbaysrXSk7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQotCQkJCW1zYmxrLT5zdHJlYW0ubmV4dF9pbiA9IGJoW2tdLT5iX2RhdGEgKyBvZmZzZXQ7Ci0JCQkJbXNibGstPnN0cmVhbS5hdmFpbF9pbiA9IGF2YWlsOwotCQkJCW9mZnNldCA9IDA7Ci0JCQl9Ci0KLQkJCWlmIChtc2Jsay0+c3RyZWFtLmF2YWlsX291dCA9PSAwICYmIHBhZ2UgPCBwYWdlcykgewotCQkJCW1zYmxrLT5zdHJlYW0ubmV4dF9vdXQgPSBidWZmZXJbcGFnZSsrXTsKLQkJCQltc2Jsay0+c3RyZWFtLmF2YWlsX291dCA9IFBBR0VfQ0FDSEVfU0laRTsKLQkJCX0KLQotCQkJaWYgKCF6bGliX2luaXQpIHsKLQkJCQl6bGliX2VyciA9IHpsaWJfaW5mbGF0ZUluaXQoJm1zYmxrLT5zdHJlYW0pOwotCQkJCWlmICh6bGliX2VyciAhPSBaX09LKSB7Ci0JCQkJCUVSUk9SKCJ6bGliX2luZmxhdGVJbml0IHJldHVybmVkIgotCQkJCQkJIiB1bmV4cGVjdGVkIHJlc3VsdCAweCV4LCIKLQkJCQkJCSIgc3JjbGVuZ3RoICVkXG4iLCB6bGliX2VyciwKLQkJCQkJCXNyY2xlbmd0aCk7Ci0JCQkJCWdvdG8gcmVsZWFzZV9tdXRleDsKLQkJCQl9Ci0JCQkJemxpYl9pbml0ID0gMTsKLQkJCX0KLQotCQkJemxpYl9lcnIgPSB6bGliX2luZmxhdGUoJm1zYmxrLT5zdHJlYW0sIFpfU1lOQ19GTFVTSCk7Ci0KLQkJCWlmIChtc2Jsay0+c3RyZWFtLmF2YWlsX2luID09IDAgJiYgayA8IGIpCi0JCQkJcHV0X2JoKGJoW2srK10pOwotCQl9IHdoaWxlICh6bGliX2VyciA9PSBaX09LKTsKLQotCQlpZiAoemxpYl9lcnIgIT0gWl9TVFJFQU1fRU5EKSB7Ci0JCQlFUlJPUigiemxpYl9pbmZsYXRlIGVycm9yLCBkYXRhIHByb2JhYmx5IGNvcnJ1cHRcbiIpOwotCQkJZ290byByZWxlYXNlX211dGV4OwotCQl9Ci0KLQkJemxpYl9lcnIgPSB6bGliX2luZmxhdGVFbmQoJm1zYmxrLT5zdHJlYW0pOwotCQlpZiAoemxpYl9lcnIgIT0gWl9PSykgewotCQkJRVJST1IoInpsaWJfaW5mbGF0ZSBlcnJvciwgZGF0YSBwcm9iYWJseSBjb3JydXB0XG4iKTsKLQkJCWdvdG8gcmVsZWFzZV9tdXRleDsKLQkJfQotCQlsZW5ndGggPSBtc2Jsay0+c3RyZWFtLnRvdGFsX291dDsKLQkJbXV0ZXhfdW5sb2NrKCZtc2Jsay0+cmVhZF9kYXRhX211dGV4KTsKKwkJbGVuZ3RoID0gc3F1YXNoZnNfZGVjb21wcmVzcyhtc2JsaywgYnVmZmVyLCBiaCwgYiwgb2Zmc2V0LAorCQkJIGxlbmd0aCwgc3JjbGVuZ3RoLCBwYWdlcyk7CisJCWlmIChsZW5ndGggPCAwKQorCQkJZ290byByZWFkX2ZhaWx1cmU7CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogQmxvY2sgaXMgdW5jb21wcmVzc2VkLgpAQCAtMjU1LDkgKzE5Miw2IEBACiAJa2ZyZWUoYmgpOwogCXJldHVybiBsZW5ndGg7CiAKLXJlbGVhc2VfbXV0ZXg6Ci0JbXV0ZXhfdW5sb2NrKCZtc2Jsay0+cmVhZF9kYXRhX211dGV4KTsKLQogYmxvY2tfcmVsZWFzZToKIAlmb3IgKDsgayA8IGI7IGsrKykKIAkJcHV0X2JoKGJoW2tdKTsKZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL2NhY2hlLmMgYi9mcy9zcXVhc2hmcy9jYWNoZS5jCmluZGV4IDQwYzk4ZmEuLjU3MzE0YmUgMTAwNjQ0Ci0tLSBhL2ZzL3NxdWFzaGZzL2NhY2hlLmMKKysrIGIvZnMvc3F1YXNoZnMvY2FjaGUuYwpAQCAtNTEsNyArNTEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Ci0jaW5jbHVkZSA8bGludXgvemxpYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KIAogI2luY2x1ZGUgInNxdWFzaGZzX2ZzLmgiCmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9kZWNvbXByZXNzb3IuYyBiL2ZzL3NxdWFzaGZzL2RlY29tcHJlc3Nvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NzQ3OGQKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9zcXVhc2hmcy9kZWNvbXByZXNzb3IuYwpAQCAtMCwwICsxLDY4IEBACisvKgorICogU3F1YXNoZnMgLSBhIGNvbXByZXNzZWQgcmVhZCBvbmx5IGZpbGVzeXN0ZW0gZm9yIExpbnV4CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5CisgKiBQaGlsbGlwIExvdWdoZXIgPHBoaWxsaXBAbG91Z2hlci5kZW1vbi5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsCisgKiBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKiBkZWNvbXByZXNzb3IuYworICovCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKworI2luY2x1ZGUgInNxdWFzaGZzX2ZzLmgiCisjaW5jbHVkZSAic3F1YXNoZnNfZnNfc2IuaCIKKyNpbmNsdWRlICJzcXVhc2hmc19mc19pLmgiCisjaW5jbHVkZSAiZGVjb21wcmVzc29yLmgiCisjaW5jbHVkZSAic3F1YXNoZnMuaCIKKworLyoKKyAqIFRoaXMgZmlsZSAoYW5kIGRlY29tcHJlc3Nvci5oKSBpbXBsZW1lbnRzIGEgZGVjb21wcmVzc29yIGZyYW1ld29yayBmb3IKKyAqIFNxdWFzaGZzLCBhbGxvd2luZyBtdWx0aXBsZSBkZWNvbXByZXNzb3JzIHRvIGJlIGVhc2lseSBzdXBwb3J0ZWQKKyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNxdWFzaGZzX2RlY29tcHJlc3NvciBzcXVhc2hmc19sem1hX3Vuc3VwcG9ydGVkX2NvbXBfb3BzID0geworCU5VTEwsIE5VTEwsIE5VTEwsIExaTUFfQ09NUFJFU1NJT04sICJsem1hIiwgMAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzcXVhc2hmc19kZWNvbXByZXNzb3Igc3F1YXNoZnNfbHpvX3Vuc3VwcG9ydGVkX2NvbXBfb3BzID0geworCU5VTEwsIE5VTEwsIE5VTEwsIExaT19DT01QUkVTU0lPTiwgImx6byIsIDAKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3F1YXNoZnNfZGVjb21wcmVzc29yIHNxdWFzaGZzX3Vua25vd25fY29tcF9vcHMgPSB7CisJTlVMTCwgTlVMTCwgTlVMTCwgMCwgInVua25vd24iLCAwCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHNxdWFzaGZzX2RlY29tcHJlc3NvciAqZGVjb21wcmVzc29yW10gPSB7CisJJnNxdWFzaGZzX3psaWJfY29tcF9vcHMsCisJJnNxdWFzaGZzX2x6bWFfdW5zdXBwb3J0ZWRfY29tcF9vcHMsCisJJnNxdWFzaGZzX2x6b191bnN1cHBvcnRlZF9jb21wX29wcywKKwkmc3F1YXNoZnNfdW5rbm93bl9jb21wX29wcworfTsKKworCitjb25zdCBzdHJ1Y3Qgc3F1YXNoZnNfZGVjb21wcmVzc29yICpzcXVhc2hmc19sb29rdXBfZGVjb21wcmVzc29yKGludCBpZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGRlY29tcHJlc3NvcltpXS0+aWQ7IGkrKykKKwkJaWYgKGlkID09IGRlY29tcHJlc3NvcltpXS0+aWQpCisJCQlicmVhazsKKworCXJldHVybiBkZWNvbXByZXNzb3JbaV07Cit9CmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9kZWNvbXByZXNzb3IuaCBiL2ZzL3NxdWFzaGZzL2RlY29tcHJlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MjVmODAKLS0tIC9kZXYvbnVsbAorKysgYi9mcy9zcXVhc2hmcy9kZWNvbXByZXNzb3IuaApAQCAtMCwwICsxLDU1IEBACisjaWZuZGVmIERFQ09NUFJFU1NPUl9ICisjZGVmaW5lIERFQ09NUFJFU1NPUl9ICisvKgorICogU3F1YXNoZnMgLSBhIGNvbXByZXNzZWQgcmVhZCBvbmx5IGZpbGVzeXN0ZW0gZm9yIExpbnV4CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5CisgKiBQaGlsbGlwIExvdWdoZXIgPHBoaWxsaXBAbG91Z2hlci5kZW1vbi5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsCisgKiBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKiBkZWNvbXByZXNzb3IuaAorICovCisKK3N0cnVjdCBzcXVhc2hmc19kZWNvbXByZXNzb3IgeworCXZvaWQJKigqaW5pdCkoc3RydWN0IHNxdWFzaGZzX3NiX2luZm8gKik7CisJdm9pZAkoKmZyZWUpKHZvaWQgKik7CisJaW50CSgqZGVjb21wcmVzcykoc3RydWN0IHNxdWFzaGZzX3NiX2luZm8gKiwgdm9pZCAqKiwKKwkJc3RydWN0IGJ1ZmZlcl9oZWFkICoqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCk7CisJaW50CWlkOworCWNoYXIJKm5hbWU7CisJaW50CXN1cHBvcnRlZDsKK307CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqc3F1YXNoZnNfZGVjb21wcmVzc29yX2luaXQoc3RydWN0IHNxdWFzaGZzX3NiX2luZm8gKm1zYmxrKQoreworCXJldHVybiBtc2Jsay0+ZGVjb21wcmVzc29yLT5pbml0KG1zYmxrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNxdWFzaGZzX2RlY29tcHJlc3Nvcl9mcmVlKHN0cnVjdCBzcXVhc2hmc19zYl9pbmZvICptc2JsaywKKwl2b2lkICpzKQoreworCWlmIChtc2Jsay0+ZGVjb21wcmVzc29yKQorCQltc2Jsay0+ZGVjb21wcmVzc29yLT5mcmVlKHMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBzcXVhc2hmc19kZWNvbXByZXNzKHN0cnVjdCBzcXVhc2hmc19zYl9pbmZvICptc2JsaywKKwl2b2lkICoqYnVmZmVyLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaCwgaW50IGIsIGludCBvZmZzZXQsIGludCBsZW5ndGgsCisJaW50IHNyY2xlbmd0aCwgaW50IHBhZ2VzKQoreworCXJldHVybiBtc2Jsay0+ZGVjb21wcmVzc29yLT5kZWNvbXByZXNzKG1zYmxrLCBidWZmZXIsIGJoLCBiLCBvZmZzZXQsCisJCWxlbmd0aCwgc3JjbGVuZ3RoLCBwYWdlcyk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL2Rpci5jIGIvZnMvc3F1YXNoZnMvZGlyLmMKaW5kZXggNTY2YjBlYS4uMTJiOTMzYSAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMvZGlyLmMKKysrIGIvZnMvc3F1YXNoZnMvZGlyLmMKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Zmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC96bGliLmg+CiAKICNpbmNsdWRlICJzcXVhc2hmc19mcy5oIgogI2luY2x1ZGUgInNxdWFzaGZzX2ZzX3NiLmgiCmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9leHBvcnQuYyBiL2ZzL3NxdWFzaGZzL2V4cG9ydC5jCmluZGV4IDJiMWI4ZmUuLjdmOTNkNWEgMTAwNjQ0Ci0tLSBhL2ZzL3NxdWFzaGZzL2V4cG9ydC5jCisrKyBiL2ZzL3NxdWFzaGZzL2V4cG9ydC5jCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSA8bGludXgvdmZzLmg+CiAjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvZXhwb3J0ZnMuaD4KLSNpbmNsdWRlIDxsaW51eC96bGliLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiAjaW5jbHVkZSAic3F1YXNoZnNfZnMuaCIKZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL2ZpbGUuYyBiL2ZzL3NxdWFzaGZzL2ZpbGUuYwppbmRleCA3MTc3NjdkLi5hMjVjNTA2IDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy9maWxlLmMKKysrIGIvZnMvc3F1YXNoZnMvZmlsZS5jCkBAIC00Nyw3ICs0Nyw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0jaW5jbHVkZSA8bGludXgvemxpYi5oPgogCiAjaW5jbHVkZSAic3F1YXNoZnNfZnMuaCIKICNpbmNsdWRlICJzcXVhc2hmc19mc19zYi5oIgpkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvZnJhZ21lbnQuYyBiL2ZzL3NxdWFzaGZzL2ZyYWdtZW50LmMKaW5kZXggYjVhMmMxNS4uN2M5MGJiZCAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMvZnJhZ21lbnQuYworKysgYi9mcy9zcXVhc2hmcy9mcmFnbWVudC5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC92ZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvemxpYi5oPgogCiAjaW5jbHVkZSAic3F1YXNoZnNfZnMuaCIKICNpbmNsdWRlICJzcXVhc2hmc19mc19zYi5oIgpkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvaWQuYyBiL2ZzL3NxdWFzaGZzL2lkLmMKaW5kZXggMzc5NWI4My4uYjdmNjRiYyAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMvaWQuYworKysgYi9mcy9zcXVhc2hmcy9pZC5jCkBAIC0zNCw3ICszNCw2IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC92ZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvemxpYi5oPgogCiAjaW5jbHVkZSAic3F1YXNoZnNfZnMuaCIKICNpbmNsdWRlICJzcXVhc2hmc19mc19zYi5oIgpkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvaW5vZGUuYyBiL2ZzL3NxdWFzaGZzL2lub2RlLmMKaW5kZXggOTEwMWRiZC4uNDlkYWFmNiAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMvaW5vZGUuYworKysgYi9mcy9zcXVhc2hmcy9pbm9kZS5jCkBAIC00MCw3ICs0MCw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Zmcy5oPgotI2luY2x1ZGUgPGxpbnV4L3psaWIuaD4KIAogI2luY2x1ZGUgInNxdWFzaGZzX2ZzLmgiCiAjaW5jbHVkZSAic3F1YXNoZnNfZnNfc2IuaCIKZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL25hbWVpLmMgYi9mcy9zcXVhc2hmcy9uYW1laS5jCmluZGV4IDllMzk4NjUuLjUyNjZiZDggMTAwNjQ0Ci0tLSBhL2ZzL3NxdWFzaGZzL25hbWVpLmMKKysrIGIvZnMvc3F1YXNoZnMvbmFtZWkuYwpAQCAtNTcsNyArNTcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9kY2FjaGUuaD4KLSNpbmNsdWRlIDxsaW51eC96bGliLmg+CiAKICNpbmNsdWRlICJzcXVhc2hmc19mcy5oIgogI2luY2x1ZGUgInNxdWFzaGZzX2ZzX3NiLmgiCmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9zcXVhc2hmcy5oIGIvZnMvc3F1YXNoZnMvc3F1YXNoZnMuaAppbmRleCAwZTlmZWI2Li5mZTI1ODdhIDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy9zcXVhc2hmcy5oCisrKyBiL2ZzL3NxdWFzaGZzL3NxdWFzaGZzLmgKQEAgLTUxLDYgKzUxLDkgQEAKIAkJCQl1NjQsIGludCk7CiBleHRlcm4gaW50IHNxdWFzaGZzX3JlYWRfdGFibGUoc3RydWN0IHN1cGVyX2Jsb2NrICosIHZvaWQgKiwgdTY0LCBpbnQpOwogCisvKiBkZWNvbXByZXNzb3IuYyAqLworZXh0ZXJuIGNvbnN0IHN0cnVjdCBzcXVhc2hmc19kZWNvbXByZXNzb3IgKnNxdWFzaGZzX2xvb2t1cF9kZWNvbXByZXNzb3IoaW50KTsKKwogLyogZXhwb3J0LmMgKi8KIGV4dGVybiBfX2xlNjQgKnNxdWFzaGZzX3JlYWRfaW5vZGVfbG9va3VwX3RhYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCB1NjQsCiAJCQkJdW5zaWduZWQgaW50KTsKQEAgLTcxLDcgKzc0LDcgQEAKIGV4dGVybiBpbnQgc3F1YXNoZnNfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgbG9uZyBsb25nKTsKIAogLyoKLSAqIElub2RlcyBhbmQgZmlsZXMgb3BlcmF0aW9ucworICogSW5vZGVzLCBmaWxlcyBhbmQgZGVjb21wcmVzc29yIG9wZXJhdGlvbnMKICAqLwogCiAvKiBkaXIuYyAqLwpAQCAtODgsMyArOTEsNiBAQAogCiAvKiBzeW1saW5rLmMgKi8KIGV4dGVybiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHNxdWFzaGZzX3N5bWxpbmtfYW9wczsKKworLyogemxpYl93cmFwcGVyLmMgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3F1YXNoZnNfZGVjb21wcmVzc29yIHNxdWFzaGZzX3psaWJfY29tcF9vcHM7CmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9zcXVhc2hmc19mcy5oIGIvZnMvc3F1YXNoZnMvc3F1YXNoZnNfZnMuaAppbmRleCAyODNkYWFmLi43OTAyNDI0IDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy9zcXVhc2hmc19mcy5oCisrKyBiL2ZzL3NxdWFzaGZzL3NxdWFzaGZzX2ZzLmgKQEAgLTE4Myw4ICsxODMsNiBAQAogI2RlZmluZSBTUVVBU0hGU19NQVhfRklMRV9TSVpFCQkoMUxMIDw8IFwKIAkJCQkJKFNRVUFTSEZTX01BWF9GSUxFX1NJWkVfTE9HIC0gMikpCiAKLSNkZWZpbmUgU1FVQVNIRlNfTUFSS0VSX0JZVEUJCTB4ZmYKLQogLyogbWV0YSBpbmRleCBjYWNoZSAqLwogI2RlZmluZSBTUVVBU0hGU19NRVRBX0lOREVYRVMJKFNRVUFTSEZTX01FVEFEQVRBX1NJWkUgLyBzaXplb2YodW5zaWduZWQgaW50KSkKICNkZWZpbmUgU1FVQVNIRlNfTUVUQV9FTlRSSUVTCTEyNwpAQCAtMjExLDcgKzIwOSw5IEBACiAvKgogICogZGVmaW5pdGlvbnMgZm9yIHN0cnVjdHVyZXMgb24gZGlzawogICovCi0jZGVmaW5lIFpMSUJfQ09NUFJFU1NJT04JIDEKKyNkZWZpbmUgWkxJQl9DT01QUkVTU0lPTgkxCisjZGVmaW5lIExaTUFfQ09NUFJFU1NJT04JMgorI2RlZmluZSBMWk9fQ09NUFJFU1NJT04JCTMKIAogc3RydWN0IHNxdWFzaGZzX3N1cGVyX2Jsb2NrIHsKIAlfX2xlMzIJCQlzX21hZ2ljOwpkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvc3F1YXNoZnNfZnNfc2IuaCBiL2ZzL3NxdWFzaGZzL3NxdWFzaGZzX2ZzX3NiLmgKaW5kZXggYzhjNjU2MS4uMmU3N2RjNSAxMDA2NDQKLS0tIGEvZnMvc3F1YXNoZnMvc3F1YXNoZnNfZnNfc2IuaAorKysgYi9mcy9zcXVhc2hmcy9zcXVhc2hmc19mc19zYi5oCkBAIC01MiwyNSArNTIsMjUgQEAKIH07CiAKIHN0cnVjdCBzcXVhc2hmc19zYl9pbmZvIHsKLQlpbnQJCQlkZXZibGtzaXplOwotCWludAkJCWRldmJsa3NpemVfbG9nMjsKLQlzdHJ1Y3Qgc3F1YXNoZnNfY2FjaGUJKmJsb2NrX2NhY2hlOwotCXN0cnVjdCBzcXVhc2hmc19jYWNoZQkqZnJhZ21lbnRfY2FjaGU7Ci0Jc3RydWN0IHNxdWFzaGZzX2NhY2hlCSpyZWFkX3BhZ2U7Ci0JaW50CQkJbmV4dF9tZXRhX2luZGV4OwotCV9fbGU2NAkJCSppZF90YWJsZTsKLQlfX2xlNjQJCQkqZnJhZ21lbnRfaW5kZXg7Ci0JdW5zaWduZWQgaW50CQkqZnJhZ21lbnRfaW5kZXhfMjsKLQlzdHJ1Y3QgbXV0ZXgJCXJlYWRfZGF0YV9tdXRleDsKLQlzdHJ1Y3QgbXV0ZXgJCW1ldGFfaW5kZXhfbXV0ZXg7Ci0Jc3RydWN0IG1ldGFfaW5kZXgJKm1ldGFfaW5kZXg7Ci0Jel9zdHJlYW0JCXN0cmVhbTsKLQlfX2xlNjQJCQkqaW5vZGVfbG9va3VwX3RhYmxlOwotCXU2NAkJCWlub2RlX3RhYmxlOwotCXU2NAkJCWRpcmVjdG9yeV90YWJsZTsKLQl1bnNpZ25lZCBpbnQJCWJsb2NrX3NpemU7Ci0JdW5zaWduZWQgc2hvcnQJCWJsb2NrX2xvZzsKLQlsb25nIGxvbmcJCWJ5dGVzX3VzZWQ7Ci0JdW5zaWduZWQgaW50CQlpbm9kZXM7CisJY29uc3Qgc3RydWN0IHNxdWFzaGZzX2RlY29tcHJlc3NvcgkqZGVjb21wcmVzc29yOworCWludAkJCQkJZGV2Ymxrc2l6ZTsKKwlpbnQJCQkJCWRldmJsa3NpemVfbG9nMjsKKwlzdHJ1Y3Qgc3F1YXNoZnNfY2FjaGUJCQkqYmxvY2tfY2FjaGU7CisJc3RydWN0IHNxdWFzaGZzX2NhY2hlCQkJKmZyYWdtZW50X2NhY2hlOworCXN0cnVjdCBzcXVhc2hmc19jYWNoZQkJCSpyZWFkX3BhZ2U7CisJaW50CQkJCQluZXh0X21ldGFfaW5kZXg7CisJX19sZTY0CQkJCQkqaWRfdGFibGU7CisJX19sZTY0CQkJCQkqZnJhZ21lbnRfaW5kZXg7CisJc3RydWN0IG11dGV4CQkJCXJlYWRfZGF0YV9tdXRleDsKKwlzdHJ1Y3QgbXV0ZXgJCQkJbWV0YV9pbmRleF9tdXRleDsKKwlzdHJ1Y3QgbWV0YV9pbmRleAkJCSptZXRhX2luZGV4OworCXZvaWQJCQkJCSpzdHJlYW07CisJX19sZTY0CQkJCQkqaW5vZGVfbG9va3VwX3RhYmxlOworCXU2NAkJCQkJaW5vZGVfdGFibGU7CisJdTY0CQkJCQlkaXJlY3RvcnlfdGFibGU7CisJdW5zaWduZWQgaW50CQkJCWJsb2NrX3NpemU7CisJdW5zaWduZWQgc2hvcnQJCQkJYmxvY2tfbG9nOworCWxvbmcgbG9uZwkJCQlieXRlc191c2VkOworCXVuc2lnbmVkIGludAkJCQlpbm9kZXM7CiB9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9mcy9zcXVhc2hmcy9zdXBlci5jIGIvZnMvc3F1YXNoZnMvc3VwZXIuYwppbmRleCA2YzE5N2VmLi4zNTUwYWVjIDEwMDY0NAotLS0gYS9mcy9zcXVhc2hmcy9zdXBlci5jCisrKyBiL2ZzL3NxdWFzaGZzL3N1cGVyLmMKQEAgLTM1LDM0ICszNSw0MSBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvemxpYi5oPgogI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CiAKICNpbmNsdWRlICJzcXVhc2hmc19mcy5oIgogI2luY2x1ZGUgInNxdWFzaGZzX2ZzX3NiLmgiCiAjaW5jbHVkZSAic3F1YXNoZnNfZnNfaS5oIgogI2luY2x1ZGUgInNxdWFzaGZzLmgiCisjaW5jbHVkZSAiZGVjb21wcmVzc29yLmgiCiAKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBzcXVhc2hmc19mc190eXBlOwogc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHNxdWFzaGZzX3N1cGVyX29wczsKIAotc3RhdGljIGludCBzdXBwb3J0ZWRfc3F1YXNoZnNfZmlsZXN5c3RlbShzaG9ydCBtYWpvciwgc2hvcnQgbWlub3IsIHNob3J0IGNvbXApCitzdGF0aWMgY29uc3Qgc3RydWN0IHNxdWFzaGZzX2RlY29tcHJlc3NvciAqc3VwcG9ydGVkX3NxdWFzaGZzX2ZpbGVzeXN0ZW0oc2hvcnQKKwltYWpvciwgc2hvcnQgbWlub3IsIHNob3J0IGlkKQogeworCWNvbnN0IHN0cnVjdCBzcXVhc2hmc19kZWNvbXByZXNzb3IgKmRlY29tcHJlc3NvcjsKKwogCWlmIChtYWpvciA8IFNRVUFTSEZTX01BSk9SKSB7CiAJCUVSUk9SKCJNYWpvci9NaW5vciBtaXNtYXRjaCwgb2xkZXIgU3F1YXNoZnMgJWQuJWQgIgogCQkJImZpbGVzeXN0ZW1zIGFyZSB1bnN1cHBvcnRlZFxuIiwgbWFqb3IsIG1pbm9yKTsKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBOVUxMOwogCX0gZWxzZSBpZiAobWFqb3IgPiBTUVVBU0hGU19NQUpPUiB8fCBtaW5vciA+IFNRVUFTSEZTX01JTk9SKSB7CiAJCUVSUk9SKCJNYWpvci9NaW5vciBtaXNtYXRjaCwgdHJ5aW5nIHRvIG1vdW50IG5ld2VyICIKIAkJCSIlZC4lZCBmaWxlc3lzdGVtXG4iLCBtYWpvciwgbWlub3IpOwogCQlFUlJPUigiUGxlYXNlIHVwZGF0ZSB5b3VyIGtlcm5lbFxuIik7Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlpZiAoY29tcCAhPSBaTElCX0NPTVBSRVNTSU9OKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlkZWNvbXByZXNzb3IgPSBzcXVhc2hmc19sb29rdXBfZGVjb21wcmVzc29yKGlkKTsKKwlpZiAoIWRlY29tcHJlc3Nvci0+c3VwcG9ydGVkKSB7CisJCUVSUk9SKCJGaWxlc3lzdGVtIHVzZXMgXCIlc1wiIGNvbXByZXNzaW9uLiBUaGlzIGlzIG5vdCAiCisJCQkic3VwcG9ydGVkXG4iLCBkZWNvbXByZXNzb3ItPm5hbWUpOworCQlyZXR1cm4gTlVMTDsKKwl9CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZGVjb21wcmVzc29yOwogfQogCiAKQEAgLTg3LDEzICs5NCw2IEBACiAJfQogCW1zYmxrID0gc2ItPnNfZnNfaW5mbzsKIAotCW1zYmxrLT5zdHJlYW0ud29ya3NwYWNlID0ga21hbGxvYyh6bGliX2luZmxhdGVfd29ya3NwYWNlc2l6ZSgpLAotCQlHRlBfS0VSTkVMKTsKLQlpZiAobXNibGstPnN0cmVhbS53b3Jrc3BhY2UgPT0gTlVMTCkgewotCQlFUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIHpsaWIgd29ya3NwYWNlXG4iKTsKLQkJZ290byBmYWlsdXJlOwotCX0KLQogCXNibGsgPSBremFsbG9jKHNpemVvZigqc2JsayksIEdGUF9LRVJORUwpOwogCWlmIChzYmxrID09IE5VTEwpIHsKIAkJRVJST1IoIkZhaWxlZCB0byBhbGxvY2F0ZSBzcXVhc2hmc19zdXBlcl9ibG9ja1xuIik7CkBAIC0xMjAsMjUgKzEyMCwyNSBAQAogCQlnb3RvIGZhaWxlZF9tb3VudDsKIAl9CiAKKwllcnIgPSAtRUlOVkFMOworCiAJLyogQ2hlY2sgaXQgaXMgYSBTUVVBU0hGUyBzdXBlcmJsb2NrICovCiAJc2ItPnNfbWFnaWMgPSBsZTMyX3RvX2NwdShzYmxrLT5zX21hZ2ljKTsKIAlpZiAoc2ItPnNfbWFnaWMgIT0gU1FVQVNIRlNfTUFHSUMpIHsKIAkJaWYgKCFzaWxlbnQpCiAJCQlFUlJPUigiQ2FuJ3QgZmluZCBhIFNRVUFTSEZTIHN1cGVyYmxvY2sgb24gJXNcbiIsCiAJCQkJCQliZGV2bmFtZShzYi0+c19iZGV2LCBiKSk7Ci0JCWVyciA9IC1FSU5WQUw7CiAJCWdvdG8gZmFpbGVkX21vdW50OwogCX0KIAotCS8qIENoZWNrIHRoZSBNQUpPUiAmIE1JTk9SIHZlcnNpb25zIGFuZCBjb21wcmVzc2lvbiB0eXBlICovCi0JZXJyID0gc3VwcG9ydGVkX3NxdWFzaGZzX2ZpbGVzeXN0ZW0obGUxNl90b19jcHUoc2Jsay0+c19tYWpvciksCisJLyogQ2hlY2sgdGhlIE1BSk9SICYgTUlOT1IgdmVyc2lvbnMgYW5kIGxvb2t1cCBjb21wcmVzc2lvbiB0eXBlICovCisJbXNibGstPmRlY29tcHJlc3NvciA9IHN1cHBvcnRlZF9zcXVhc2hmc19maWxlc3lzdGVtKAorCQkJbGUxNl90b19jcHUoc2Jsay0+c19tYWpvciksCiAJCQlsZTE2X3RvX2NwdShzYmxrLT5zX21pbm9yKSwKIAkJCWxlMTZfdG9fY3B1KHNibGstPmNvbXByZXNzaW9uKSk7Ci0JaWYgKGVyciA8IDApCisJaWYgKG1zYmxrLT5kZWNvbXByZXNzb3IgPT0gTlVMTCkKIAkJZ290byBmYWlsZWRfbW91bnQ7CiAKLQllcnIgPSAtRUlOVkFMOwotCiAJLyoKIAkgKiBDaGVjayBpZiB0aGVyZSdzIHhhdHRycyBpbiB0aGUgZmlsZXN5c3RlbS4gIFRoZXNlIGFyZSBub3QKIAkgKiBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uLCBzbyB3YXJuIHRoYXQgdGhleSB3aWxsIGJlIGlnbm9yZWQuCkBAIC0yMDUsNiArMjA1LDEwIEBACiAKIAllcnIgPSAtRU5PTUVNOwogCisJbXNibGstPnN0cmVhbSA9IHNxdWFzaGZzX2RlY29tcHJlc3Nvcl9pbml0KG1zYmxrKTsKKwlpZiAobXNibGstPnN0cmVhbSA9PSBOVUxMKQorCQlnb3RvIGZhaWxlZF9tb3VudDsKKwogCW1zYmxrLT5ibG9ja19jYWNoZSA9IHNxdWFzaGZzX2NhY2hlX2luaXQoIm1ldGFkYXRhIiwKIAkJCVNRVUFTSEZTX0NBQ0hFRF9CTEtTLCBTUVVBU0hGU19NRVRBREFUQV9TSVpFKTsKIAlpZiAobXNibGstPmJsb2NrX2NhY2hlID09IE5VTEwpCkBAIC0yOTIsMTcgKzI5NiwxNiBAQAogCXNxdWFzaGZzX2NhY2hlX2RlbGV0ZShtc2Jsay0+YmxvY2tfY2FjaGUpOwogCXNxdWFzaGZzX2NhY2hlX2RlbGV0ZShtc2Jsay0+ZnJhZ21lbnRfY2FjaGUpOwogCXNxdWFzaGZzX2NhY2hlX2RlbGV0ZShtc2Jsay0+cmVhZF9wYWdlKTsKKwlzcXVhc2hmc19kZWNvbXByZXNzb3JfZnJlZShtc2JsaywgbXNibGstPnN0cmVhbSk7CiAJa2ZyZWUobXNibGstPmlub2RlX2xvb2t1cF90YWJsZSk7CiAJa2ZyZWUobXNibGstPmZyYWdtZW50X2luZGV4KTsKIAlrZnJlZShtc2Jsay0+aWRfdGFibGUpOwotCWtmcmVlKG1zYmxrLT5zdHJlYW0ud29ya3NwYWNlKTsKIAlrZnJlZShzYi0+c19mc19pbmZvKTsKIAlzYi0+c19mc19pbmZvID0gTlVMTDsKIAlrZnJlZShzYmxrKTsKIAlyZXR1cm4gZXJyOwogCiBmYWlsdXJlOgotCWtmcmVlKG1zYmxrLT5zdHJlYW0ud29ya3NwYWNlKTsKIAlrZnJlZShzYi0+c19mc19pbmZvKTsKIAlzYi0+c19mc19pbmZvID0gTlVMTDsKIAlyZXR1cm4gLUVOT01FTTsKQEAgLTM0NiwxMCArMzQ5LDEwIEBACiAJCXNxdWFzaGZzX2NhY2hlX2RlbGV0ZShzYmktPmJsb2NrX2NhY2hlKTsKIAkJc3F1YXNoZnNfY2FjaGVfZGVsZXRlKHNiaS0+ZnJhZ21lbnRfY2FjaGUpOwogCQlzcXVhc2hmc19jYWNoZV9kZWxldGUoc2JpLT5yZWFkX3BhZ2UpOworCQlzcXVhc2hmc19kZWNvbXByZXNzb3JfZnJlZShzYmksIHNiaS0+c3RyZWFtKTsKIAkJa2ZyZWUoc2JpLT5pZF90YWJsZSk7CiAJCWtmcmVlKHNiaS0+ZnJhZ21lbnRfaW5kZXgpOwogCQlrZnJlZShzYmktPm1ldGFfaW5kZXgpOwotCQlrZnJlZShzYmktPnN0cmVhbS53b3Jrc3BhY2UpOwogCQlrZnJlZShzYi0+c19mc19pbmZvKTsKIAkJc2ItPnNfZnNfaW5mbyA9IE5VTEw7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvc3F1YXNoZnMvc3ltbGluay5jIGIvZnMvc3F1YXNoZnMvc3ltbGluay5jCmluZGV4IDgzZDg3ODguLmU4MGJlMjAgMTAwNjQ0Ci0tLSBhL2ZzL3NxdWFzaGZzL3N5bWxpbmsuYworKysgYi9mcy9zcXVhc2hmcy9zeW1saW5rLmMKQEAgLTM2LDcgKzM2LDYgQEAKICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgotI2luY2x1ZGUgPGxpbnV4L3psaWIuaD4KIAogI2luY2x1ZGUgInNxdWFzaGZzX2ZzLmgiCiAjaW5jbHVkZSAic3F1YXNoZnNfZnNfc2IuaCIKZGlmZiAtLWdpdCBhL2ZzL3NxdWFzaGZzL3psaWJfd3JhcHBlci5jIGIvZnMvc3F1YXNoZnMvemxpYl93cmFwcGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRkNzBlMAotLS0gL2Rldi9udWxsCisrKyBiL2ZzL3NxdWFzaGZzL3psaWJfd3JhcHBlci5jCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogU3F1YXNoZnMgLSBhIGNvbXByZXNzZWQgcmVhZCBvbmx5IGZpbGVzeXN0ZW0gZm9yIExpbnV4CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5CisgKiBQaGlsbGlwIExvdWdoZXIgPHBoaWxsaXBAbG91Z2hlci5kZW1vbi5jby51az4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsCisgKiBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKiB6bGliX3dyYXBwZXIuYworICovCisKKworI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC96bGliLmg+CisKKyNpbmNsdWRlICJzcXVhc2hmc19mcy5oIgorI2luY2x1ZGUgInNxdWFzaGZzX2ZzX3NiLmgiCisjaW5jbHVkZSAic3F1YXNoZnNfZnNfaS5oIgorI2luY2x1ZGUgInNxdWFzaGZzLmgiCisjaW5jbHVkZSAiZGVjb21wcmVzc29yLmgiCisKK3N0YXRpYyB2b2lkICp6bGliX2luaXQoc3RydWN0IHNxdWFzaGZzX3NiX2luZm8gKmR1bW15KQoreworCXpfc3RyZWFtICpzdHJlYW0gPSBrbWFsbG9jKHNpemVvZih6X3N0cmVhbSksIEdGUF9LRVJORUwpOworCWlmIChzdHJlYW0gPT0gTlVMTCkKKwkJZ290byBmYWlsZWQ7CisJc3RyZWFtLT53b3Jrc3BhY2UgPSBrbWFsbG9jKHpsaWJfaW5mbGF0ZV93b3Jrc3BhY2VzaXplKCksCisJCUdGUF9LRVJORUwpOworCWlmIChzdHJlYW0tPndvcmtzcGFjZSA9PSBOVUxMKQorCQlnb3RvIGZhaWxlZDsKKworCXJldHVybiBzdHJlYW07CisKK2ZhaWxlZDoKKwlFUlJPUigiRmFpbGVkIHRvIGFsbG9jYXRlIHpsaWIgd29ya3NwYWNlXG4iKTsKKwlrZnJlZShzdHJlYW0pOworCXJldHVybiBOVUxMOworfQorCisKK3N0YXRpYyB2b2lkIHpsaWJfZnJlZSh2b2lkICpzdHJtKQoreworCXpfc3RyZWFtICpzdHJlYW0gPSBzdHJtOworCisJaWYgKHN0cmVhbSkKKwkJa2ZyZWUoc3RyZWFtLT53b3Jrc3BhY2UpOworCWtmcmVlKHN0cmVhbSk7Cit9CisKKworc3RhdGljIGludCB6bGliX3VuY29tcHJlc3Moc3RydWN0IHNxdWFzaGZzX3NiX2luZm8gKm1zYmxrLCB2b2lkICoqYnVmZmVyLAorCXN0cnVjdCBidWZmZXJfaGVhZCAqKmJoLCBpbnQgYiwgaW50IG9mZnNldCwgaW50IGxlbmd0aCwgaW50IHNyY2xlbmd0aCwKKwlpbnQgcGFnZXMpCit7CisJaW50IHpsaWJfZXJyID0gMCwgemxpYl9pbml0ID0gMDsKKwlpbnQgYXZhaWwsIGJ5dGVzLCBrID0gMCwgcGFnZSA9IDA7CisJel9zdHJlYW0gKnN0cmVhbSA9IG1zYmxrLT5zdHJlYW07CisKKwltdXRleF9sb2NrKCZtc2Jsay0+cmVhZF9kYXRhX211dGV4KTsKKworCXN0cmVhbS0+YXZhaWxfb3V0ID0gMDsKKwlzdHJlYW0tPmF2YWlsX2luID0gMDsKKworCWJ5dGVzID0gbGVuZ3RoOworCWRvIHsKKwkJaWYgKHN0cmVhbS0+YXZhaWxfaW4gPT0gMCAmJiBrIDwgYikgeworCQkJYXZhaWwgPSBtaW4oYnl0ZXMsIG1zYmxrLT5kZXZibGtzaXplIC0gb2Zmc2V0KTsKKwkJCWJ5dGVzIC09IGF2YWlsOworCQkJd2FpdF9vbl9idWZmZXIoYmhba10pOworCQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmhba10pKQorCQkJCWdvdG8gcmVsZWFzZV9tdXRleDsKKworCQkJaWYgKGF2YWlsID09IDApIHsKKwkJCQlvZmZzZXQgPSAwOworCQkJCXB1dF9iaChiaFtrKytdKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJc3RyZWFtLT5uZXh0X2luID0gYmhba10tPmJfZGF0YSArIG9mZnNldDsKKwkJCXN0cmVhbS0+YXZhaWxfaW4gPSBhdmFpbDsKKwkJCW9mZnNldCA9IDA7CisJCX0KKworCQlpZiAoc3RyZWFtLT5hdmFpbF9vdXQgPT0gMCAmJiBwYWdlIDwgcGFnZXMpIHsKKwkJCXN0cmVhbS0+bmV4dF9vdXQgPSBidWZmZXJbcGFnZSsrXTsKKwkJCXN0cmVhbS0+YXZhaWxfb3V0ID0gUEFHRV9DQUNIRV9TSVpFOworCQl9CisKKwkJaWYgKCF6bGliX2luaXQpIHsKKwkJCXpsaWJfZXJyID0gemxpYl9pbmZsYXRlSW5pdChzdHJlYW0pOworCQkJaWYgKHpsaWJfZXJyICE9IFpfT0spIHsKKwkJCQlFUlJPUigiemxpYl9pbmZsYXRlSW5pdCByZXR1cm5lZCB1bmV4cGVjdGVkICIKKwkJCQkJInJlc3VsdCAweCV4LCBzcmNsZW5ndGggJWRcbiIsCisJCQkJCXpsaWJfZXJyLCBzcmNsZW5ndGgpOworCQkJCWdvdG8gcmVsZWFzZV9tdXRleDsKKwkJCX0KKwkJCXpsaWJfaW5pdCA9IDE7CisJCX0KKworCQl6bGliX2VyciA9IHpsaWJfaW5mbGF0ZShzdHJlYW0sIFpfU1lOQ19GTFVTSCk7CisKKwkJaWYgKHN0cmVhbS0+YXZhaWxfaW4gPT0gMCAmJiBrIDwgYikKKwkJCXB1dF9iaChiaFtrKytdKTsKKwl9IHdoaWxlICh6bGliX2VyciA9PSBaX09LKTsKKworCWlmICh6bGliX2VyciAhPSBaX1NUUkVBTV9FTkQpIHsKKwkJRVJST1IoInpsaWJfaW5mbGF0ZSBlcnJvciwgZGF0YSBwcm9iYWJseSBjb3JydXB0XG4iKTsKKwkJZ290byByZWxlYXNlX211dGV4OworCX0KKworCXpsaWJfZXJyID0gemxpYl9pbmZsYXRlRW5kKHN0cmVhbSk7CisJaWYgKHpsaWJfZXJyICE9IFpfT0spIHsKKwkJRVJST1IoInpsaWJfaW5mbGF0ZSBlcnJvciwgZGF0YSBwcm9iYWJseSBjb3JydXB0XG4iKTsKKwkJZ290byByZWxlYXNlX211dGV4OworCX0KKworCW11dGV4X3VubG9jaygmbXNibGstPnJlYWRfZGF0YV9tdXRleCk7CisJcmV0dXJuIHN0cmVhbS0+dG90YWxfb3V0OworCityZWxlYXNlX211dGV4OgorCW11dGV4X3VubG9jaygmbXNibGstPnJlYWRfZGF0YV9tdXRleCk7CisKKwlmb3IgKDsgayA8IGI7IGsrKykKKwkJcHV0X2JoKGJoW2tdKTsKKworCXJldHVybiAtRUlPOworfQorCitjb25zdCBzdHJ1Y3Qgc3F1YXNoZnNfZGVjb21wcmVzc29yIHNxdWFzaGZzX3psaWJfY29tcF9vcHMgPSB7CisJLmluaXQgPSB6bGliX2luaXQsCisJLmZyZWUgPSB6bGliX2ZyZWUsCisJLmRlY29tcHJlc3MgPSB6bGliX3VuY29tcHJlc3MsCisJLmlkID0gWkxJQl9DT01QUkVTU0lPTiwKKwkubmFtZSA9ICJ6bGliIiwKKwkuc3VwcG9ydGVkID0gMQorfTsKKwpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggYWZmMDQ2Yi4uZjM1YWM2MCAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYworKysgYi9mcy9zdXBlci5jCkBAIC01NjgsNyArNTY4LDcgQEAKIGludCBkb19yZW1vdW50X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBmbGFncywgdm9pZCAqZGF0YSwgaW50IGZvcmNlKQogewogCWludCByZXR2YWw7Ci0JaW50IHJlbW91bnRfcnc7CisJaW50IHJlbW91bnRfcncsIHJlbW91bnRfcm87CiAKIAlpZiAoc2ItPnNfZnJvemVuICE9IFNCX1VORlJPWkVOKQogCQlyZXR1cm4gLUVCVVNZOwpAQCAtNTgzLDkgKzU4MywxMiBAQAogCXNocmlua19kY2FjaGVfc2Ioc2IpOwogCXN5bmNfZmlsZXN5c3RlbShzYik7CiAKKwlyZW1vdW50X3JvID0gKGZsYWdzICYgTVNfUkRPTkxZKSAmJiAhKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKTsKKwlyZW1vdW50X3J3ID0gIShmbGFncyAmIE1TX1JET05MWSkgJiYgKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKTsKKwogCS8qIElmIHdlIGFyZSByZW1vdW50aW5nIFJET05MWSBhbmQgY3VycmVudCBzYiBpcyByZWFkL3dyaXRlLAogCSAgIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gcncgZmlsZXMgb3BlbmVkICovCi0JaWYgKChmbGFncyAmIE1TX1JET05MWSkgJiYgIShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpIHsKKwlpZiAocmVtb3VudF9ybykgewogCQlpZiAoZm9yY2UpCiAJCQltYXJrX2ZpbGVzX3JvKHNiKTsKIAkJZWxzZSBpZiAoIWZzX21heV9yZW1vdW50X3JvKHNiKSkKQEAgLTU5NCw3ICs1OTcsNiBAQAogCQlpZiAocmV0dmFsIDwgMCAmJiByZXR2YWwgIT0gLUVOT1NZUykKIAkJCXJldHVybiAtRUJVU1k7CiAJfQotCXJlbW91bnRfcncgPSAhKGZsYWdzICYgTVNfUkRPTkxZKSAmJiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpOwogCiAJaWYgKHNiLT5zX29wLT5yZW1vdW50X2ZzKSB7CiAJCXJldHZhbCA9IHNiLT5zX29wLT5yZW1vdW50X2ZzKHNiLCAmZmxhZ3MsIGRhdGEpOwpAQCAtNjA0LDYgKzYwNiwxNiBAQAogCXNiLT5zX2ZsYWdzID0gKHNiLT5zX2ZsYWdzICYgfk1TX1JNVF9NQVNLKSB8IChmbGFncyAmIE1TX1JNVF9NQVNLKTsKIAlpZiAocmVtb3VudF9ydykKIAkJdmZzX2RxX3F1b3RhX29uX3JlbW91bnQoc2IpOworCS8qCisJICogU29tZSBmaWxlc3lzdGVtcyBtb2RpZnkgdGhlaXIgbWV0YWRhdGEgdmlhIHNvbWUgb3RoZXIgcGF0aCB0aGFuIHRoZQorCSAqIGJkZXYgYnVmZmVyIGNhY2hlIChlZy4gdXNlIGEgcHJpdmF0ZSBtYXBwaW5nLCBvciBkaXJlY3RvcmllcyBpbgorCSAqIHBhZ2VjYWNoZSwgZXRjKS4gQWxzbyBmaWxlIGRhdGEgbW9kaWZpY2F0aW9ucyBnbyB2aWEgdGhlaXIgb3duCisJICogbWFwcGluZ3MuIFNvIElmIHdlIHRyeSB0byBtb3VudCByZWFkb25seSB0aGVuIGNvcHkgdGhlIGZpbGVzeXN0ZW0KKwkgKiBmcm9tIGJkZXYsIHdlIGNvdWxkIGdldCBzdGFsZSBkYXRhLCBzbyBpbnZhbGlkYXRlIGl0IHRvIGdpdmUgYSBiZXN0CisJICogZWZmb3J0IGF0IGNvaGVyZW5jeS4KKwkgKi8KKwlpZiAocmVtb3VudF9ybyAmJiBzYi0+c19iZGV2KQorCQlpbnZhbGlkYXRlX2JkZXYoc2ItPnNfYmRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkyNSw2ICs5MzcsOSBAQAogCWlmICghbW50KQogCQlnb3RvIG91dDsKIAorCWlmIChmbGFncyAmIE1TX0tFUk5NT1VOVCkKKwkJbW50LT5tbnRfZmxhZ3MgPSBNTlRfSU5URVJOQUw7CisKIAlpZiAoZGF0YSAmJiAhKHR5cGUtPmZzX2ZsYWdzICYgRlNfQklOQVJZX01PVU5UREFUQSkpIHsKIAkJc2VjZGF0YSA9IGFsbG9jX3NlY2RhdGEoKTsKIAkJaWYgKCFzZWNkYXRhKQpkaWZmIC0tZ2l0IGEvZnMvc3luYy5jIGIvZnMvc3luYy5jCmluZGV4IDQxODcyN2EuLmY1NTdkNzEgMTAwNjQ0Ci0tLSBhL2ZzL3N5bmMuYworKysgYi9mcy9zeW5jLmMKQEAgLTM0LDE0ICszNCwxNCBAQAogCWlmICghc2ItPnNfYmRpKQogCQlyZXR1cm4gMDsKIAotCS8qIEF2b2lkIGRvaW5nIHR3aWNlIHN5bmNpbmcgYW5kIGNhY2hlIHBydW5pbmcgZm9yIHF1b3RhIHN5bmMgKi8KLQlpZiAoIXdhaXQpIHsKLQkJd3JpdGVvdXRfcXVvdGFfc2Ioc2IsIC0xKTsKLQkJd3JpdGViYWNrX2lub2Rlc19zYihzYik7Ci0JfSBlbHNlIHsKLQkJc3luY19xdW90YV9zYihzYiwgLTEpOworCWlmIChzYi0+c19xY29wICYmIHNiLT5zX3Fjb3AtPnF1b3RhX3N5bmMpCisJCXNiLT5zX3Fjb3AtPnF1b3RhX3N5bmMoc2IsIC0xLCB3YWl0KTsKKworCWlmICh3YWl0KQogCQlzeW5jX2lub2Rlc19zYihzYik7Ci0JfQorCWVsc2UKKwkJd3JpdGViYWNrX2lub2Rlc19zYihzYik7CisKIAlpZiAoc2ItPnNfb3AtPnN5bmNfZnMpCiAJCXNiLT5zX29wLT5zeW5jX2ZzKHNiLCB3YWl0KTsKIAlyZXR1cm4gX19zeW5jX2Jsb2NrZGV2KHNiLT5zX2JkZXYsIHdhaXQpOwpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvYmluLmMgYi9mcy9zeXNmcy9iaW4uYwppbmRleCBhMGE1MDBhLi5lOWQyOTM1IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9iaW4uYworKysgYi9mcy9zeXNmcy9iaW4uYwpAQCAtNTQsMTQgKzU0LDE0IEBACiAJaW50IHJjOwogCiAJLyogbmVlZCBhdHRyX3NkIGZvciBhdHRyLCBpdHMgcGFyZW50IGZvciBrb2JqICovCi0JaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmUoYXR0cl9zZCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJcmMgPSAtRUlPOwogCWlmIChhdHRyLT5yZWFkKQogCQlyYyA9IGF0dHItPnJlYWQoa29iaiwgYXR0ciwgYnVmZmVyLCBvZmYsIGNvdW50KTsKIAotCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXN5c2ZzX3B1dF9hY3RpdmUoYXR0cl9zZCk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0xMjUsMTQgKzEyNSwxNCBAQAogCWludCByYzsKIAogCS8qIG5lZWQgYXR0cl9zZCBmb3IgYXR0ciwgaXRzIHBhcmVudCBmb3Iga29iaiAqLwotCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlKGF0dHJfc2QpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXJjID0gLUVJTzsKIAlpZiAoYXR0ci0+d3JpdGUpCiAJCXJjID0gYXR0ci0+d3JpdGUoa29iaiwgYXR0ciwgYnVmZmVyLCBvZmZzZXQsIGNvdW50KTsKIAotCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXN5c2ZzX3B1dF9hY3RpdmUoYXR0cl9zZCk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0xODQsMTIgKzE4NCwxMiBAQAogCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+b3BlbikKIAkJcmV0dXJuOwogCi0JaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmUoYXR0cl9zZCkpCiAJCXJldHVybjsKIAogCWJiLT52bV9vcHMtPm9wZW4odm1hKTsKIAotCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXN5c2ZzX3B1dF9hY3RpdmUoYXR0cl9zZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGJpbl92bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCkBAIC0yMDEsMTIgKzIwMSwxMiBAQAogCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+Y2xvc2UpCiAJCXJldHVybjsKIAotCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlKGF0dHJfc2QpKQogCQlyZXR1cm47CiAKIAliYi0+dm1fb3BzLT5jbG9zZSh2bWEpOwogCi0Jc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJc3lzZnNfcHV0X2FjdGl2ZShhdHRyX3NkKTsKIH0KIAogc3RhdGljIGludCBiaW5fZmF1bHQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9mYXVsdCAqdm1mKQpAQCAtMjE5LDEyICsyMTksMTIgQEAKIAlpZiAoIWJiLT52bV9vcHMgfHwgIWJiLT52bV9vcHMtPmZhdWx0KQogCQlyZXR1cm4gVk1fRkFVTFRfU0lHQlVTOwogCi0JaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmUoYXR0cl9zZCkpCiAJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiAKIAlyZXQgPSBiYi0+dm1fb3BzLT5mYXVsdCh2bWEsIHZtZik7CiAKLQlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKKwlzeXNmc19wdXRfYWN0aXZlKGF0dHJfc2QpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI0MSwxMiArMjQxLDEyIEBACiAJaWYgKCFiYi0+dm1fb3BzLT5wYWdlX21rd3JpdGUpCiAJCXJldHVybiAwOwogCi0JaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmUoYXR0cl9zZCkpCiAJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CiAKIAlyZXQgPSBiYi0+dm1fb3BzLT5wYWdlX21rd3JpdGUodm1hLCB2bWYpOwogCi0Jc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJc3lzZnNfcHV0X2FjdGl2ZShhdHRyX3NkKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yNjEsMTIgKzI2MSwxMiBAQAogCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+YWNjZXNzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlKGF0dHJfc2QpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldCA9IGJiLT52bV9vcHMtPmFjY2Vzcyh2bWEsIGFkZHIsIGJ1ZiwgbGVuLCB3cml0ZSk7CiAKLQlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKKwlzeXNmc19wdXRfYWN0aXZlKGF0dHJfc2QpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI4MSwxMiArMjgxLDEyIEBACiAJaWYgKCFiYi0+dm1fb3BzIHx8ICFiYi0+dm1fb3BzLT5zZXRfcG9saWN5KQogCQlyZXR1cm4gMDsKIAotCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlKGF0dHJfc2QpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldCA9IGJiLT52bV9vcHMtPnNldF9wb2xpY3kodm1hLCBuZXcpOwogCi0Jc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJc3lzZnNfcHV0X2FjdGl2ZShhdHRyX3NkKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0zMDEsMTIgKzMwMSwxMiBAQAogCWlmICghYmItPnZtX29wcyB8fCAhYmItPnZtX29wcy0+Z2V0X3BvbGljeSkKIAkJcmV0dXJuIHZtYS0+dm1fcG9saWN5OwogCi0JaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmUoYXR0cl9zZCkpCiAJCXJldHVybiB2bWEtPnZtX3BvbGljeTsKIAogCXBvbCA9IGJiLT52bV9vcHMtPmdldF9wb2xpY3kodm1hLCBhZGRyKTsKIAotCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXN5c2ZzX3B1dF9hY3RpdmUoYXR0cl9zZCk7CiAJcmV0dXJuIHBvbDsKIH0KIApAQCAtMzIxLDEyICszMjEsMTIgQEAKIAlpZiAoIWJiLT52bV9vcHMgfHwgIWJiLT52bV9vcHMtPm1pZ3JhdGUpCiAJCXJldHVybiAwOwogCi0JaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmUoYXR0cl9zZCkpCiAJCXJldHVybiAwOwogCiAJcmV0ID0gYmItPnZtX29wcy0+bWlncmF0ZSh2bWEsIGZyb20sIHRvLCBmbGFncyk7CiAKLQlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKKwlzeXNmc19wdXRfYWN0aXZlKGF0dHJfc2QpOwogCXJldHVybiByZXQ7CiB9CiAjZW5kaWYKQEAgLTM1Niw3ICszNTYsNyBAQAogCiAJLyogbmVlZCBhdHRyX3NkIGZvciBhdHRyLCBpdHMgcGFyZW50IGZvciBrb2JqICovCiAJcmMgPSAtRU5PREVWOwotCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlKGF0dHJfc2QpKQogCQlnb3RvIG91dF91bmxvY2s7CiAKIAlyYyA9IC1FSU5WQUw7CkBAIC0zODQsNyArMzg0LDcgQEAKIAliYi0+dm1fb3BzID0gdm1hLT52bV9vcHM7CiAJdm1hLT52bV9vcHMgPSAmYmluX3ZtX29wczsKIG91dF9wdXQ6Ci0Jc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJc3lzZnNfcHV0X2FjdGl2ZShhdHRyX3NkKTsKIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZiYi0+bXV0ZXgpOwogCkBAIC0zOTksNyArMzk5LDcgQEAKIAlpbnQgZXJyb3I7CiAKIAkvKiBiaW5hcnkgZmlsZSBvcGVyYXRpb25zIHJlcXVpcmVzIGJvdGggQHNkIGFuZCBpdHMgcGFyZW50ICovCi0JaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmUoYXR0cl9zZCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJZXJyb3IgPSAtRUFDQ0VTOwpAQCAtNDI2LDExICs0MjYsMTEgQEAKIAltdXRleF91bmxvY2soJnN5c2ZzX2Jpbl9sb2NrKTsKIAogCS8qIG9wZW4gc3VjY2VlZGVkLCBwdXQgYWN0aXZlIHJlZmVyZW5jZXMgKi8KLQlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKKwlzeXNmc19wdXRfYWN0aXZlKGF0dHJfc2QpOwogCXJldHVybiAwOwogCiAgZXJyX291dDoKLQlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKKwlzeXNmc19wdXRfYWN0aXZlKGF0dHJfc2QpOwogCWtmcmVlKGJiKTsKIAlyZXR1cm4gZXJyb3I7CiB9CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9kaXIuYyBiL2ZzL3N5c2ZzL2Rpci5jCmluZGV4IDY5OWYzNzEuLjU5MDcxNzggMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL2Rpci5jCisrKyBiL2ZzL3N5c2ZzL2Rpci5jCkBAIC05Myw3ICs5Myw3IEBACiAgKglSRVRVUk5TOgogICoJUG9pbnRlciB0byBAc2Qgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgogICovCi1zdGF0aWMgc3RydWN0IHN5c2ZzX2RpcmVudCAqc3lzZnNfZ2V0X2FjdGl2ZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCkKK3N0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX2dldF9hY3RpdmUoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpCiB7CiAJaWYgKHVubGlrZWx5KCFzZCkpCiAJCXJldHVybiBOVUxMOwpAQCAtMTI0LDcgKzEyNCw3IEBACiAgKglQdXQgYW4gYWN0aXZlIHJlZmVyZW5jZSB0byBAc2QuICBUaGlzIGZ1bmN0aW9uIGlzIG5vb3AgaWYgQHNkCiAgKglpcyBOVUxMLgogICovCi1zdGF0aWMgdm9pZCBzeXNmc19wdXRfYWN0aXZlKHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKQordm9pZCBzeXNmc19wdXRfYWN0aXZlKHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKQogewogCXN0cnVjdCBjb21wbGV0aW9uICpjbXBsOwogCWludCB2OwpAQCAtMTQ1LDQ1ICsxNDUsNiBAQAogfQogCiAvKioKLSAqCXN5c2ZzX2dldF9hY3RpdmVfdHdvIC0gZ2V0IGFjdGl2ZSByZWZlcmVuY2VzIHRvIHN5c2ZzX2RpcmVudCBhbmQgcGFyZW50Ci0gKglAc2Q6IHN5c2ZzX2RpcmVudCBvZiBpbnRlcmVzdAotICoKLSAqCUdldCBhY3RpdmUgcmVmZXJlbmNlIHRvIEBzZCBhbmQgaXRzIHBhcmVudC4gIFBhcmVudCdzIGFjdGl2ZQotICoJcmVmZXJlbmNlIGlzIGdyYWJiZWQgZmlyc3QuICBUaGlzIGZ1bmN0aW9uIGlzIG5vb3AgaWYgQHNkIGlzCi0gKglOVUxMLgotICoKLSAqCVJFVFVSTlM6Ci0gKglQb2ludGVyIHRvIEBzZCBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUuCi0gKi8KLXN0cnVjdCBzeXNmc19kaXJlbnQgKnN5c2ZzX2dldF9hY3RpdmVfdHdvKHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKQotewotCWlmIChzZCkgewotCQlpZiAoc2QtPnNfcGFyZW50ICYmIHVubGlrZWx5KCFzeXNmc19nZXRfYWN0aXZlKHNkLT5zX3BhcmVudCkpKQotCQkJcmV0dXJuIE5VTEw7Ci0JCWlmICh1bmxpa2VseSghc3lzZnNfZ2V0X2FjdGl2ZShzZCkpKSB7Ci0JCQlzeXNmc19wdXRfYWN0aXZlKHNkLT5zX3BhcmVudCk7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCX0KLQlyZXR1cm4gc2Q7Ci19Ci0KLS8qKgotICoJc3lzZnNfcHV0X2FjdGl2ZV90d28gLSBwdXQgYWN0aXZlIHJlZmVyZW5jZXMgdG8gc3lzZnNfZGlyZW50IGFuZCBwYXJlbnQKLSAqCUBzZDogc3lzZnNfZGlyZW50IG9mIGludGVyZXN0Ci0gKgotICoJUHV0IGFjdGl2ZSByZWZlcmVuY2VzIHRvIEBzZCBhbmQgaXRzIHBhcmVudC4gIFRoaXMgZnVuY3Rpb24gaXMKLSAqCW5vb3AgaWYgQHNkIGlzIE5VTEwuCi0gKi8KLXZvaWQgc3lzZnNfcHV0X2FjdGl2ZV90d28oc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpCi17Ci0JaWYgKHNkKSB7Ci0JCXN5c2ZzX3B1dF9hY3RpdmUoc2QpOwotCQlzeXNmc19wdXRfYWN0aXZlKHNkLT5zX3BhcmVudCk7Ci0JfQotfQotCi0vKioKICAqCXN5c2ZzX2RlYWN0aXZhdGUgLSBkZWFjdGl2YXRlIHN5c2ZzX2RpcmVudAogICoJQHNkOiBzeXNmc19kaXJlbnQgdG8gZGVhY3RpdmF0ZQogICoKQEAgLTE5NSw2ICsxNTYsMTAgQEAKIAlpbnQgdjsKIAogCUJVR19PTihzZC0+c19zaWJsaW5nIHx8ICEoc2QtPnNfZmxhZ3MgJiBTWVNGU19GTEFHX1JFTU9WRUQpKTsKKworCWlmICghKHN5c2ZzX3R5cGUoc2QpICYgU1lTRlNfQUNUSVZFX1JFRikpCisJCXJldHVybjsKKwogCXNkLT5zX3NpYmxpbmcgPSAodm9pZCAqKSZ3YWl0OwogCiAJcndzZW1fYWNxdWlyZSgmc2QtPmRlcF9tYXAsIDAsIDAsIF9SRVRfSVBfKTsKQEAgLTM1NCw3ICszMTksNiBAQAogCiAJYXRvbWljX3NldCgmc2QtPnNfY291bnQsIDEpOwogCWF0b21pY19zZXQoJnNkLT5zX2FjdGl2ZSwgMCk7Ci0Jc3lzZnNfZGlyZW50X2luaXRfbG9ja2RlcChzZCk7CiAKIAlzZC0+c19uYW1lID0gbmFtZTsKIAlzZC0+c19tb2RlID0gbW9kZTsKQEAgLTY4MSw3ICs2NDUsNyBAQAogCX0KIAogCS8qIGF0dGFjaCBkZW50cnkgYW5kIGlub2RlICovCi0JaW5vZGUgPSBzeXNmc19nZXRfaW5vZGUoc2QpOworCWlub2RlID0gc3lzZnNfZ2V0X2lub2RlKGRpci0+aV9zYiwgc2QpOwogCWlmICghaW5vZGUpIHsKIAkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtODM3LDExICs4MDEsNDYgQEAKIAlyZXR1cm4gKHNkLT5zX21vZGUgPj4gMTIpICYgMTU7CiB9CiAKK3N0YXRpYyBpbnQgc3lzZnNfZGlyX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3lzZnNfcHV0KGZpbHAtPnByaXZhdGVfZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzeXNmc19kaXJfcG9zKHN0cnVjdCBzeXNmc19kaXJlbnQgKnBhcmVudF9zZCwKKwlpbm9fdCBpbm8sIHN0cnVjdCBzeXNmc19kaXJlbnQgKnBvcykKK3sKKwlpZiAocG9zKSB7CisJCWludCB2YWxpZCA9ICEocG9zLT5zX2ZsYWdzICYgU1lTRlNfRkxBR19SRU1PVkVEKSAmJgorCQkJcG9zLT5zX3BhcmVudCA9PSBwYXJlbnRfc2QgJiYKKwkJCWlubyA9PSBwb3MtPnNfaW5vOworCQlzeXNmc19wdXQocG9zKTsKKwkJaWYgKHZhbGlkKQorCQkJcmV0dXJuIHBvczsKKwl9CisJcG9zID0gTlVMTDsKKwlpZiAoKGlubyA+IDEpICYmIChpbm8gPCBJTlRfTUFYKSkgeworCQlwb3MgPSBwYXJlbnRfc2QtPnNfZGlyLmNoaWxkcmVuOworCQl3aGlsZSAocG9zICYmIChpbm8gPiBwb3MtPnNfaW5vKSkKKwkJCXBvcyA9IHBvcy0+c19zaWJsaW5nOworCX0KKwlyZXR1cm4gcG9zOworfQorCitzdGF0aWMgc3RydWN0IHN5c2ZzX2RpcmVudCAqc3lzZnNfZGlyX25leHRfcG9zKHN0cnVjdCBzeXNmc19kaXJlbnQgKnBhcmVudF9zZCwKKwlpbm9fdCBpbm8sIHN0cnVjdCBzeXNmc19kaXJlbnQgKnBvcykKK3sKKwlwb3MgPSBzeXNmc19kaXJfcG9zKHBhcmVudF9zZCwgaW5vLCBwb3MpOworCWlmIChwb3MpCisJCXBvcyA9IHBvcy0+c19zaWJsaW5nOworCXJldHVybiBwb3M7Cit9CisKIHN0YXRpYyBpbnQgc3lzZnNfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqIGZpbHAsIHZvaWQgKiBkaXJlbnQsIGZpbGxkaXJfdCBmaWxsZGlyKQogewogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZpbHAtPmZfcGF0aC5kZW50cnk7CiAJc3RydWN0IHN5c2ZzX2RpcmVudCAqIHBhcmVudF9zZCA9IGRlbnRyeS0+ZF9mc2RhdGE7Ci0Jc3RydWN0IHN5c2ZzX2RpcmVudCAqcG9zOworCXN0cnVjdCBzeXNmc19kaXJlbnQgKnBvcyA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlpbm9fdCBpbm87CiAKIAlpZiAoZmlscC0+Zl9wb3MgPT0gMCkgewpAQCAtODU3LDI5ICs4NTYsMzEgQEAKIAkJaWYgKGZpbGxkaXIoZGlyZW50LCAiLi4iLCAyLCBmaWxwLT5mX3BvcywgaW5vLCBEVF9ESVIpID09IDApCiAJCQlmaWxwLT5mX3BvcysrOwogCX0KLQlpZiAoKGZpbHAtPmZfcG9zID4gMSkgJiYgKGZpbHAtPmZfcG9zIDwgSU5UX01BWCkpIHsKLQkJbXV0ZXhfbG9jaygmc3lzZnNfbXV0ZXgpOworCW11dGV4X2xvY2soJnN5c2ZzX211dGV4KTsKKwlmb3IgKHBvcyA9IHN5c2ZzX2Rpcl9wb3MocGFyZW50X3NkLCBmaWxwLT5mX3BvcywgcG9zKTsKKwkgICAgIHBvczsKKwkgICAgIHBvcyA9IHN5c2ZzX2Rpcl9uZXh0X3BvcyhwYXJlbnRfc2QsIGZpbHAtPmZfcG9zLCBwb3MpKSB7CisJCWNvbnN0IGNoYXIgKiBuYW1lOworCQl1bnNpZ25lZCBpbnQgdHlwZTsKKwkJaW50IGxlbiwgcmV0OwogCi0JCS8qIFNraXAgdGhlIGRlbnRyaWVzIHdlIGhhdmUgYWxyZWFkeSByZXBvcnRlZCAqLwotCQlwb3MgPSBwYXJlbnRfc2QtPnNfZGlyLmNoaWxkcmVuOwotCQl3aGlsZSAocG9zICYmIChmaWxwLT5mX3BvcyA+IHBvcy0+c19pbm8pKQotCQkJcG9zID0gcG9zLT5zX3NpYmxpbmc7CisJCW5hbWUgPSBwb3MtPnNfbmFtZTsKKwkJbGVuID0gc3RybGVuKG5hbWUpOworCQlpbm8gPSBwb3MtPnNfaW5vOworCQl0eXBlID0gZHRfdHlwZShwb3MpOworCQlmaWxwLT5mX3BvcyA9IGlubzsKKwkJZmlscC0+cHJpdmF0ZV9kYXRhID0gc3lzZnNfZ2V0KHBvcyk7CiAKLQkJZm9yICggOyBwb3M7IHBvcyA9IHBvcy0+c19zaWJsaW5nKSB7Ci0JCQljb25zdCBjaGFyICogbmFtZTsKLQkJCWludCBsZW47Ci0KLQkJCW5hbWUgPSBwb3MtPnNfbmFtZTsKLQkJCWxlbiA9IHN0cmxlbihuYW1lKTsKLQkJCWZpbHAtPmZfcG9zID0gaW5vID0gcG9zLT5zX2lubzsKLQotCQkJaWYgKGZpbGxkaXIoZGlyZW50LCBuYW1lLCBsZW4sIGZpbHAtPmZfcG9zLCBpbm8sCi0JCQkJCSBkdF90eXBlKHBvcykpIDwgMCkKLQkJCQlicmVhazsKLQkJfQotCQlpZiAoIXBvcykKLQkJCWZpbHAtPmZfcG9zID0gSU5UX01BWDsKIAkJbXV0ZXhfdW5sb2NrKCZzeXNmc19tdXRleCk7CisJCXJldCA9IGZpbGxkaXIoZGlyZW50LCBuYW1lLCBsZW4sIGZpbHAtPmZfcG9zLCBpbm8sIHR5cGUpOworCQltdXRleF9sb2NrKCZzeXNmc19tdXRleCk7CisJCWlmIChyZXQgPCAwKQorCQkJYnJlYWs7CisJfQorCW11dGV4X3VubG9jaygmc3lzZnNfbXV0ZXgpOworCWlmICgoZmlscC0+Zl9wb3MgPiAxKSAmJiAhcG9zKSB7IC8qIEVPRiAqLworCQlmaWxwLT5mX3BvcyA9IElOVF9NQVg7CisJCWZpbHAtPnByaXZhdGVfZGF0YSA9IE5VTEw7CiAJfQogCXJldHVybiAwOwogfQpAQCAtODg4LDUgKzg4OSw2IEBACiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHN5c2ZzX2Rpcl9vcGVyYXRpb25zID0gewogCS5yZWFkCQk9IGdlbmVyaWNfcmVhZF9kaXIsCiAJLnJlYWRkaXIJPSBzeXNmc19yZWFkZGlyLAorCS5yZWxlYXNlCT0gc3lzZnNfZGlyX3JlbGVhc2UsCiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAogfTsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL2ZpbGUuYyBiL2ZzL3N5c2ZzL2ZpbGUuYwppbmRleCBkYzMwZDllLi5lMjIyYjI1IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9maWxlLmMKKysrIGIvZnMvc3lzZnMvZmlsZS5jCkBAIC01Myw3ICs1Myw3IEBACiAJc2l6ZV90CQkJY291bnQ7CiAJbG9mZl90CQkJcG9zOwogCWNoYXIJCQkqIHBhZ2U7Ci0Jc3RydWN0IHN5c2ZzX29wcwkqIG9wczsKKwljb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzCSogb3BzOwogCXN0cnVjdCBtdXRleAkJbXV0ZXg7CiAJaW50CQkJbmVlZHNfcmVhZF9maWxsOwogCWludAkJCWV2ZW50OwpAQCAtNzUsNyArNzUsNyBAQAogewogCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBkZW50cnktPmRfZnNkYXRhOwogCXN0cnVjdCBrb2JqZWN0ICprb2JqID0gYXR0cl9zZC0+c19wYXJlbnQtPnNfZGlyLmtvYmo7Ci0Jc3RydWN0IHN5c2ZzX29wcyAqIG9wcyA9IGJ1ZmZlci0+b3BzOworCWNvbnN0IHN0cnVjdCBzeXNmc19vcHMgKiBvcHMgPSBidWZmZXItPm9wczsKIAlpbnQgcmV0ID0gMDsKIAlzc2l6ZV90IGNvdW50OwogCkBAIC04NSwxMyArODUsMTMgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAkvKiBuZWVkIGF0dHJfc2QgZm9yIGF0dHIgYW5kIG9wcywgaXRzIHBhcmVudCBmb3Iga29iaiAqLwotCWlmICghc3lzZnNfZ2V0X2FjdGl2ZV90d28oYXR0cl9zZCkpCisJaWYgKCFzeXNmc19nZXRfYWN0aXZlKGF0dHJfc2QpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWJ1ZmZlci0+ZXZlbnQgPSBhdG9taWNfcmVhZCgmYXR0cl9zZC0+c19hdHRyLm9wZW4tPmV2ZW50KTsKIAljb3VudCA9IG9wcy0+c2hvdyhrb2JqLCBhdHRyX3NkLT5zX2F0dHIuYXR0ciwgYnVmZmVyLT5wYWdlKTsKIAotCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXN5c2ZzX3B1dF9hY3RpdmUoYXR0cl9zZCk7CiAKIAkvKgogCSAqIFRoZSBjb2RlIHdvcmtzIGZpbmUgd2l0aCBQQUdFX1NJWkUgcmV0dXJuIGJ1dCBpdCdzIGxpa2VseSB0bwpAQCAtMTk5LDE2ICsxOTksMTYgQEAKIHsKIAlzdHJ1Y3Qgc3lzZnNfZGlyZW50ICphdHRyX3NkID0gZGVudHJ5LT5kX2ZzZGF0YTsKIAlzdHJ1Y3Qga29iamVjdCAqa29iaiA9IGF0dHJfc2QtPnNfcGFyZW50LT5zX2Rpci5rb2JqOwotCXN0cnVjdCBzeXNmc19vcHMgKiBvcHMgPSBidWZmZXItPm9wczsKKwljb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzICogb3BzID0gYnVmZmVyLT5vcHM7CiAJaW50IHJjOwogCiAJLyogbmVlZCBhdHRyX3NkIGZvciBhdHRyIGFuZCBvcHMsIGl0cyBwYXJlbnQgZm9yIGtvYmogKi8KLQlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQorCWlmICghc3lzZnNfZ2V0X2FjdGl2ZShhdHRyX3NkKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyYyA9IG9wcy0+c3RvcmUoa29iaiwgYXR0cl9zZC0+c19hdHRyLmF0dHIsIGJ1ZmZlci0+cGFnZSwgY291bnQpOwogCi0Jc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJc3lzZnNfcHV0X2FjdGl2ZShhdHRyX3NkKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTMzNSw3ICszMzUsNyBAQAogCXN0cnVjdCBzeXNmc19kaXJlbnQgKmF0dHJfc2QgPSBmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2ZzZGF0YTsKIAlzdHJ1Y3Qga29iamVjdCAqa29iaiA9IGF0dHJfc2QtPnNfcGFyZW50LT5zX2Rpci5rb2JqOwogCXN0cnVjdCBzeXNmc19idWZmZXIgKmJ1ZmZlcjsKLQlzdHJ1Y3Qgc3lzZnNfb3BzICpvcHM7CisJY29uc3Qgc3RydWN0IHN5c2ZzX29wcyAqb3BzOwogCWludCBlcnJvciA9IC1FQUNDRVM7CiAJY2hhciAqcDsKIApAQCAtMzQ0LDcgKzM0NCw3IEBACiAJCW1lbW1vdmUobGFzdF9zeXNmc19maWxlLCBwLCBzdHJsZW4ocCkgKyAxKTsKIAogCS8qIG5lZWQgYXR0cl9zZCBmb3IgYXR0ciBhbmQgb3BzLCBpdHMgcGFyZW50IGZvciBrb2JqICovCi0JaWYgKCFzeXNmc19nZXRfYWN0aXZlX3R3byhhdHRyX3NkKSkKKwlpZiAoIXN5c2ZzX2dldF9hY3RpdmUoYXR0cl9zZCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJLyogZXZlcnkga29iamVjdCB3aXRoIGFuIGF0dHJpYnV0ZSBuZWVkcyBhIGt0eXBlIGFzc2lnbmVkICovCkBAIC0zOTMsMTMgKzM5MywxMyBAQAogCQlnb3RvIGVycl9mcmVlOwogCiAJLyogb3BlbiBzdWNjZWVkZWQsIHB1dCBhY3RpdmUgcmVmZXJlbmNlcyAqLwotCXN5c2ZzX3B1dF9hY3RpdmVfdHdvKGF0dHJfc2QpOworCXN5c2ZzX3B1dF9hY3RpdmUoYXR0cl9zZCk7CiAJcmV0dXJuIDA7CiAKICBlcnJfZnJlZToKIAlrZnJlZShidWZmZXIpOwogIGVycl9vdXQ6Ci0Jc3lzZnNfcHV0X2FjdGl2ZV90d28oYXR0cl9zZCk7CisJc3lzZnNfcHV0X2FjdGl2ZShhdHRyX3NkKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTQzNywxMiArNDM3LDEyIEBACiAJc3RydWN0IHN5c2ZzX29wZW5fZGlyZW50ICpvZCA9IGF0dHJfc2QtPnNfYXR0ci5vcGVuOwogCiAJLyogbmVlZCBwYXJlbnQgZm9yIHRoZSBrb2JqLCBncmFiIGJvdGggKi8KLQlpZiAoIXN5c2ZzX2dldF9hY3RpdmVfdHdvKGF0dHJfc2QpKQorCWlmICghc3lzZnNfZ2V0X2FjdGl2ZShhdHRyX3NkKSkKIAkJZ290byB0cmlnZ2VyOwogCiAJcG9sbF93YWl0KGZpbHAsICZvZC0+cG9sbCwgd2FpdCk7CiAKLQlzeXNmc19wdXRfYWN0aXZlX3R3byhhdHRyX3NkKTsKKwlzeXNmc19wdXRfYWN0aXZlKGF0dHJfc2QpOwogCiAJaWYgKGJ1ZmZlci0+ZXZlbnQgIT0gYXRvbWljX3JlYWQoJm9kLT5ldmVudCkpCiAJCWdvdG8gdHJpZ2dlcjsKQEAgLTUwOSw2ICs1MDksNyBAQAogCWlmICghc2QpCiAJCXJldHVybiAtRU5PTUVNOwogCXNkLT5zX2F0dHIuYXR0ciA9ICh2b2lkICopYXR0cjsKKwlzeXNmc19kaXJlbnRfaW5pdF9sb2NrZGVwKHNkKTsKIAogCXN5c2ZzX2FkZHJtX3N0YXJ0KCZhY3h0LCBkaXJfc2QpOwogCXJjID0gc3lzZnNfYWRkX29uZSgmYWN4dCwgc2QpOwpAQCAtNTQyLDYgKzU0MywxOCBAQAogCiB9CiAKK2ludCBzeXNmc19jcmVhdGVfZmlsZXMoc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKipwdHIpCit7CisJaW50IGVyciA9IDA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBwdHJbaV0gJiYgIWVycjsgaSsrKQorCQllcnIgPSBzeXNmc19jcmVhdGVfZmlsZShrb2JqLCBwdHJbaV0pOworCWlmIChlcnIpCisJCXdoaWxlICgtLWkgPj0gMCkKKwkJCXN5c2ZzX3JlbW92ZV9maWxlKGtvYmosIHB0cltpXSk7CisJcmV0dXJuIGVycjsKK30KIAogLyoqCiAgKiBzeXNmc19hZGRfZmlsZV90b19ncm91cCAtIGFkZCBhbiBhdHRyaWJ1dGUgZmlsZSB0byBhIHByZS1leGlzdGluZyBncm91cC4KQEAgLTYxNCw2ICs2MjcsMTIgQEAKIAlzeXNmc19oYXNoX2FuZF9yZW1vdmUoa29iai0+c2QsIGF0dHItPm5hbWUpOwogfQogCit2b2lkIHN5c2ZzX3JlbW92ZV9maWxlcyhzdHJ1Y3Qga29iamVjdCAqIGtvYmosIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKipwdHIpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgcHRyW2ldOyBpKyspCisJCXN5c2ZzX3JlbW92ZV9maWxlKGtvYmosIHB0cltpXSk7Cit9CiAKIC8qKgogICogc3lzZnNfcmVtb3ZlX2ZpbGVfZnJvbV9ncm91cCAtIHJlbW92ZSBhbiBhdHRyaWJ1dGUgZmlsZSBmcm9tIGEgZ3JvdXAuCkBAIC03MzIsMyArNzUxLDUgQEAKIAogRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfY3JlYXRlX2ZpbGUpOwogRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfcmVtb3ZlX2ZpbGUpOworRVhQT1JUX1NZTUJPTF9HUEwoc3lzZnNfcmVtb3ZlX2ZpbGVzKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHN5c2ZzX2NyZWF0ZV9maWxlcyk7CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9pbm9kZS5jIGIvZnMvc3lzZnMvaW5vZGUuYwppbmRleCA2YTA2YTFkLi4wODJkYWFlIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9pbm9kZS5jCisrKyBiL2ZzL3N5c2ZzL2lub2RlLmMKQEAgLTExMSwyMCArMTExLDIwIEBACiAJaWYgKCFzZCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwltdXRleF9sb2NrKCZzeXNmc19tdXRleCk7CiAJZXJyb3IgPSBpbm9kZV9jaGFuZ2Vfb2soaW5vZGUsIGlhdHRyKTsKIAlpZiAoZXJyb3IpCi0JCXJldHVybiBlcnJvcjsKKwkJZ290byBvdXQ7CiAKIAlpYXR0ci0+aWFfdmFsaWQgJj0gfkFUVFJfU0laRTsgLyogaWdub3JlIHNpemUgY2hhbmdlcyAqLwogCiAJZXJyb3IgPSBpbm9kZV9zZXRhdHRyKGlub2RlLCBpYXR0cik7CiAJaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7CisJCWdvdG8gb3V0OwogCi0JbXV0ZXhfbG9jaygmc3lzZnNfbXV0ZXgpOwogCWVycm9yID0gc3lzZnNfc2Rfc2V0YXR0cihzZCwgaWF0dHIpOworb3V0OgogCW11dGV4X3VubG9jaygmc3lzZnNfbXV0ZXgpOwotCiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0yODMsNiArMjgzLDcgQEAKIAogLyoqCiAgKglzeXNmc19nZXRfaW5vZGUgLSBnZXQgaW5vZGUgZm9yIHN5c2ZzX2RpcmVudAorICoJQHNiOiBzdXBlciBibG9jawogICoJQHNkOiBzeXNmc19kaXJlbnQgdG8gYWxsb2NhdGUgaW5vZGUgZm9yCiAgKgogICoJR2V0IGlub2RlIGZvciBAc2QuICBJZiBzdWNoIGlub2RlIGRvZXNuJ3QgZXhpc3QsIGEgbmV3IGlub2RlCkBAIC0yOTUsMTEgKzI5NiwxMSBAQAogICoJUkVUVVJOUzoKICAqCVBvaW50ZXIgdG8gYWxsb2NhdGVkIGlub2RlIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KICAqLwotc3RydWN0IGlub2RlICogc3lzZnNfZ2V0X2lub2RlKHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKQorc3RydWN0IGlub2RlICogc3lzZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKQogewogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKLQlpbm9kZSA9IGlnZXRfbG9ja2VkKHN5c2ZzX3NiLCBzZC0+c19pbm8pOworCWlub2RlID0gaWdldF9sb2NrZWQoc2IsIHNkLT5zX2lubyk7CiAJaWYgKGlub2RlICYmIChpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKSkKIAkJc3lzZnNfaW5pdF9pbm9kZShzZCwgaW5vZGUpOwogCmRpZmYgLS1naXQgYS9mcy9zeXNmcy9tb3VudC5jIGIvZnMvc3lzZnMvbW91bnQuYwppbmRleCA0OTc0OTk1Li4wY2IxMDg4IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9tb3VudC5jCisrKyBiL2ZzL3N5c2ZzL21vdW50LmMKQEAgLTIzLDcgKzIzLDYgQEAKIAogCiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpzeXNmc19tb3VudDsKLXN0cnVjdCBzdXBlcl9ibG9jayAqIHN5c2ZzX3NiID0gTlVMTDsKIHN0cnVjdCBrbWVtX2NhY2hlICpzeXNmc19kaXJfY2FjaGVwOwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMgc3lzZnNfb3BzID0gewpAQCAtNTAsMTEgKzQ5LDEwIEBACiAJc2ItPnNfbWFnaWMgPSBTWVNGU19NQUdJQzsKIAlzYi0+c19vcCA9ICZzeXNmc19vcHM7CiAJc2ItPnNfdGltZV9ncmFuID0gMTsKLQlzeXNmc19zYiA9IHNiOwogCiAJLyogZ2V0IHJvb3QgaW5vZGUsIGluaXRpYWxpemUgYW5kIHVubG9jayBpdCAqLwogCW11dGV4X2xvY2soJnN5c2ZzX211dGV4KTsKLQlpbm9kZSA9IHN5c2ZzX2dldF9pbm9kZSgmc3lzZnNfcm9vdCk7CisJaW5vZGUgPSBzeXNmc19nZXRfaW5vZGUoc2IsICZzeXNmc19yb290KTsKIAltdXRleF91bmxvY2soJnN5c2ZzX211dGV4KTsKIAlpZiAoIWlub2RlKSB7CiAJCXByX2RlYnVnKCJzeXNmczogY291bGQgbm90IGdldCByb290IGlub2RlXG4iKTsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL3N5bWxpbmsuYyBiL2ZzL3N5c2ZzL3N5bWxpbmsuYwppbmRleCBjNWVmZjQ5Li4xYjlhM2ExIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9zeW1saW5rLmMKKysrIGIvZnMvc3lzZnMvc3ltbGluay5jCkBAIC0xMjMsNiArMTIzLDQ0IEBACiAJc3lzZnNfaGFzaF9hbmRfcmVtb3ZlKHBhcmVudF9zZCwgbmFtZSk7CiB9CiAKKy8qKgorICoJc3lzZnNfcmVuYW1lX2xpbmsgLSByZW5hbWUgc3ltbGluayBpbiBvYmplY3QncyBkaXJlY3RvcnkuCisgKglAa29iajoJb2JqZWN0IHdlJ3JlIGFjdGluZyBmb3IuCisgKglAdGFyZzoJb2JqZWN0IHdlJ3JlIHBvaW50aW5nIHRvLgorICoJQG9sZDoJcHJldmlvdXMgbmFtZSBvZiB0aGUgc3ltbGluay4KKyAqCUBuZXc6CW5ldyBuYW1lIG9mIHRoZSBzeW1saW5rLgorICoKKyAqCUEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGUgY29tbW9uIHJlbmFtZSBzeW1saW5rIGlkaW9tLgorICovCitpbnQgc3lzZnNfcmVuYW1lX2xpbmsoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqZWN0ICp0YXJnLAorCQkJY29uc3QgY2hhciAqb2xkLCBjb25zdCBjaGFyICpuZXcpCit7CisJc3RydWN0IHN5c2ZzX2RpcmVudCAqcGFyZW50X3NkLCAqc2QgPSBOVUxMOworCWludCByZXN1bHQ7CisKKwlpZiAoIWtvYmopCisJCXBhcmVudF9zZCA9ICZzeXNmc19yb290OworCWVsc2UKKwkJcGFyZW50X3NkID0ga29iai0+c2Q7CisKKwlyZXN1bHQgPSAtRU5PRU5UOworCXNkID0gc3lzZnNfZ2V0X2RpcmVudChwYXJlbnRfc2QsIG9sZCk7CisJaWYgKCFzZCkKKwkJZ290byBvdXQ7CisKKwlyZXN1bHQgPSAtRUlOVkFMOworCWlmIChzeXNmc190eXBlKHNkKSAhPSBTWVNGU19LT0JKX0xJTkspCisJCWdvdG8gb3V0OworCWlmIChzZC0+c19zeW1saW5rLnRhcmdldF9zZC0+c19kaXIua29iaiAhPSB0YXJnKQorCQlnb3RvIG91dDsKKworCXJlc3VsdCA9IHN5c2ZzX3JlbmFtZShzZCwgcGFyZW50X3NkLCBuZXcpOworCitvdXQ6CisJc3lzZnNfcHV0KHNkKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCiBzdGF0aWMgaW50IHN5c2ZzX2dldF90YXJnZXRfcGF0aChzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpwYXJlbnRfc2QsCiAJCQkJIHN0cnVjdCBzeXNmc19kaXJlbnQgKnRhcmdldF9zZCwgY2hhciAqcGF0aCkKIHsKZGlmZiAtLWdpdCBhL2ZzL3N5c2ZzL3N5c2ZzLmggYi9mcy9zeXNmcy9zeXNmcy5oCmluZGV4IGNkZDkzNzcuLjMwZjVhNDQgMTAwNjQ0Ci0tLSBhL2ZzL3N5c2ZzL3N5c2ZzLmgKKysrIGIvZnMvc3lzZnMvc3lzZnMuaApAQCAtNjYsOCArNjYsOCBAQAogCX07CiAKIAl1bnNpZ25lZCBpbnQJCXNfZmxhZ3M7CisJdW5zaWduZWQgc2hvcnQJCXNfbW9kZTsKIAlpbm9fdAkJCXNfaW5vOwotCXVtb2RlX3QJCQlzX21vZGU7CiAJc3RydWN0IHN5c2ZzX2lub2RlX2F0dHJzICpzX2lhdHRyOwogfTsKIApAQCAtNzksNiArNzksNyBAQAogI2RlZmluZSBTWVNGU19LT0JKX0JJTl9BVFRSCQkweDAwMDQKICNkZWZpbmUgU1lTRlNfS09CSl9MSU5LCQkJMHgwMDA4CiAjZGVmaW5lIFNZU0ZTX0NPUFlfTkFNRQkJCShTWVNGU19ESVIgfCBTWVNGU19LT0JKX0xJTkspCisjZGVmaW5lIFNZU0ZTX0FDVElWRV9SRUYJCShTWVNGU19LT0JKX0FUVFIgfCBTWVNGU19LT0JKX0JJTl9BVFRSKQogCiAjZGVmaW5lIFNZU0ZTX0ZMQUdfTUFTSwkJCX5TWVNGU19UWVBFX01BU0sKICNkZWZpbmUgU1lTRlNfRkxBR19SRU1PVkVECQkweDAyMDAKQEAgLTkxLDkgKzkyLDEyIEBACiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKICNkZWZpbmUgc3lzZnNfZGlyZW50X2luaXRfbG9ja2RlcChzZCkJCQkJXAogZG8gewkJCQkJCQkJXAotCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7CQkJXAorCXN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIgPSBzZC0+c19hdHRyLmF0dHI7CQlcCisJc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkgPSBhdHRyLT5rZXk7CQkJXAorCWlmICgha2V5KQkJCQkJCVwKKwkJa2V5ID0gJmF0dHItPnNrZXk7CQkJCVwKIAkJCQkJCQkJXAotCWxvY2tkZXBfaW5pdF9tYXAoJnNkLT5kZXBfbWFwLCAic19hY3RpdmUiLCAmX19rZXksIDApOwlcCisJbG9ja2RlcF9pbml0X21hcCgmc2QtPmRlcF9tYXAsICJzX2FjdGl2ZSIsIGtleSwgMCk7CVwKIH0gd2hpbGUoMCkKICNlbHNlCiAjZGVmaW5lIHN5c2ZzX2RpcmVudF9pbml0X2xvY2tkZXAoc2QpIGRvIHt9IHdoaWxlKDApCkBAIC0xMTEsNyArMTE1LDYgQEAKICAqIG1vdW50LmMKICAqLwogZXh0ZXJuIHN0cnVjdCBzeXNmc19kaXJlbnQgc3lzZnNfcm9vdDsKLWV4dGVybiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnN5c2ZzX3NiOwogZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpzeXNmc19kaXJfY2FjaGVwOwogCiAvKgpAQCAtMTI0LDggKzEyNyw4IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc3lzZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CiAKIHN0cnVjdCBkZW50cnkgKnN5c2ZzX2dldF9kZW50cnkoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpOwotc3RydWN0IHN5c2ZzX2RpcmVudCAqc3lzZnNfZ2V0X2FjdGl2ZV90d28oc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QpOwotdm9pZCBzeXNmc19wdXRfYWN0aXZlX3R3byhzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCk7CitzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzeXNmc19nZXRfYWN0aXZlKHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKTsKK3ZvaWQgc3lzZnNfcHV0X2FjdGl2ZShzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCk7CiB2b2lkIHN5c2ZzX2FkZHJtX3N0YXJ0KHN0cnVjdCBzeXNmc19hZGRybV9jeHQgKmFjeHQsCiAJCSAgICAgICBzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpwYXJlbnRfc2QpOwogaW50IF9fc3lzZnNfYWRkX29uZShzdHJ1Y3Qgc3lzZnNfYWRkcm1fY3h0ICphY3h0LCBzdHJ1Y3Qgc3lzZnNfZGlyZW50ICpzZCk7CkBAIC0xNjgsNyArMTcxLDcgQEAKIC8qCiAgKiBpbm9kZS5jCiAgKi8KLXN0cnVjdCBpbm9kZSAqc3lzZnNfZ2V0X2lub2RlKHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKTsKK3N0cnVjdCBpbm9kZSAqc3lzZnNfZ2V0X2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBzeXNmc19kaXJlbnQgKnNkKTsKIHZvaWQgc3lzZnNfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW50IHN5c2ZzX3NkX3NldGF0dHIoc3RydWN0IHN5c2ZzX2RpcmVudCAqc2QsIHN0cnVjdCBpYXR0ciAqaWF0dHIpOwogaW50IHN5c2ZzX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spOwpkaWZmIC0tZ2l0IGEvZnMvc3lzdi9pbm9kZS5jIGIvZnMvc3lzdi9pbm9kZS5jCmluZGV4IDk4MjQ3NDMuLjQ1NzM3MzQgMTAwNjQ0Ci0tLSBhL2ZzL3N5c3YvaW5vZGUuYworKysgYi9mcy9zeXN2L2lub2RlLmMKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC92ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlICJzeXN2LmgiCkBAIC0yNDYsNyArMjQ3LDcgQEAKIAlyZXR1cm4gRVJSX1BUUigtRUlPKTsKIH0KIAotaW50IHN5c3Zfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IHdhaXQpCitzdGF0aWMgaW50IF9fc3lzdl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiA9IGlub2RlLT5pX3NiOwogCXN0cnVjdCBzeXN2X3NiX2luZm8gKiBzYmkgPSBTWVNWX1NCKHNiKTsKQEAgLTI5Niw5ICsyOTcsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IHN5c3Zfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCit7CisJcmV0dXJuIF9fc3lzdl93cml0ZV9pbm9kZShpbm9kZSwgd2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwpOworfQorCiBpbnQgc3lzdl9zeW5jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JcmV0dXJuIHN5c3Zfd3JpdGVfaW5vZGUoaW5vZGUsIDEpOworCXJldHVybiBfX3N5c3Zfd3JpdGVfaW5vZGUoaW5vZGUsIDEpOwogfQogCiBzdGF0aWMgdm9pZCBzeXN2X2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQpkaWZmIC0tZ2l0IGEvZnMvc3lzdi9zeXN2LmggYi9mcy9zeXN2L3N5c3YuaAppbmRleCA1Mzc4NmViLi45NGNiOWI0IDEwMDY0NAotLS0gYS9mcy9zeXN2L3N5c3YuaAorKysgYi9mcy9zeXN2L3N5c3YuaApAQCAtMTQyLDcgKzE0Miw3IEBACiAKIC8qIGlub2RlLmMgKi8KIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKnN5c3ZfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgaW50KTsKLWV4dGVybiBpbnQgc3lzdl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKK2V4dGVybiBpbnQgc3lzdl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwogZXh0ZXJuIGludCBzeXN2X3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIHZvaWQgc3lzdl9zZXRfaW5vZGUoc3RydWN0IGlub2RlICosIGRldl90KTsKIGV4dGVybiBpbnQgc3lzdl9nZXRhdHRyKHN0cnVjdCB2ZnNtb3VudCAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBrc3RhdCAqKTsKZGlmZiAtLWdpdCBhL2ZzL3ViaWZzL2Rpci5jIGIvZnMvdWJpZnMvZGlyLmMKaW5kZXggNTUyZmIwMS4uNDAxZTUwMyAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvZGlyLmMKKysrIGIvZnMvdWJpZnMvZGlyLmMKQEAgLTExMjAsNyArMTEyMCw3IEBACiAJaWYgKHJlbGVhc2UpCiAJCXViaWZzX3JlbGVhc2VfYnVkZ2V0KGMsICZpbm9fcmVxKTsKIAlpZiAoSVNfU1lOQyhvbGRfaW5vZGUpKQotCQllcnIgPSBvbGRfaW5vZGUtPmlfc2ItPnNfb3AtPndyaXRlX2lub2RlKG9sZF9pbm9kZSwgMSk7CisJCWVyciA9IG9sZF9pbm9kZS0+aV9zYi0+c19vcC0+d3JpdGVfaW5vZGUob2xkX2lub2RlLCBOVUxMKTsKIAlyZXR1cm4gZXJyOwogCiBvdXRfY2FuY2VsOgpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvZmlsZS5jIGIvZnMvdWJpZnMvZmlsZS5jCmluZGV4IDE2YTY0NDQuLmUyNmMwMmEgMTAwNjQ0Ci0tLSBhL2ZzL3ViaWZzL2ZpbGUuYworKysgYi9mcy91Ymlmcy9maWxlLmMKQEAgLTEwMTEsNyArMTAxMSw3IEBACiAJLyogSXMgdGhlIHBhZ2UgZnVsbHkgaW5zaWRlIEBpX3NpemU/ICovCiAJaWYgKHBhZ2UtPmluZGV4IDwgZW5kX2luZGV4KSB7CiAJCWlmIChwYWdlLT5pbmRleCA+PSBzeW5jZWRfaV9zaXplID4+IFBBR0VfQ0FDSEVfU0hJRlQpIHsKLQkJCWVyciA9IGlub2RlLT5pX3NiLT5zX29wLT53cml0ZV9pbm9kZShpbm9kZSwgMSk7CisJCQllcnIgPSBpbm9kZS0+aV9zYi0+c19vcC0+d3JpdGVfaW5vZGUoaW5vZGUsIE5VTEwpOwogCQkJaWYgKGVycikKIAkJCQlnb3RvIG91dF91bmxvY2s7CiAJCQkvKgpAQCAtMTAzOSw3ICsxMDM5LDcgQEAKIAlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CiAKIAlpZiAoaV9zaXplID4gc3luY2VkX2lfc2l6ZSkgewotCQllcnIgPSBpbm9kZS0+aV9zYi0+c19vcC0+d3JpdGVfaW5vZGUoaW5vZGUsIDEpOworCQllcnIgPSBpbm9kZS0+aV9zYi0+c19vcC0+d3JpdGVfaW5vZGUoaW5vZGUsIE5VTEwpOwogCQlpZiAoZXJyKQogCQkJZ290byBvdXRfdW5sb2NrOwogCX0KQEAgLTEyNDIsNyArMTI0Miw3IEBACiAJaWYgKHJlbGVhc2UpCiAJCXViaWZzX3JlbGVhc2VfYnVkZ2V0KGMsICZyZXEpOwogCWlmIChJU19TWU5DKGlub2RlKSkKLQkJZXJyID0gaW5vZGUtPmlfc2ItPnNfb3AtPndyaXRlX2lub2RlKGlub2RlLCAxKTsKKwkJZXJyID0gaW5vZGUtPmlfc2ItPnNfb3AtPndyaXRlX2lub2RlKGlub2RlLCBOVUxMKTsKIAlyZXR1cm4gZXJyOwogCiBvdXQ6CkBAIC0xMzE2LDcgKzEzMTYsNyBAQAogCSAqIHRoZSBpbm9kZSB1bmxlc3MgdGhpcyBpcyBhICdkYXRhc3luYygpJyBjYWxsLgogCSAqLwogCWlmICghZGF0YXN5bmMgfHwgKGlub2RlLT5pX3N0YXRlICYgSV9ESVJUWV9EQVRBU1lOQykpIHsKLQkJZXJyID0gaW5vZGUtPmlfc2ItPnNfb3AtPndyaXRlX2lub2RlKGlub2RlLCAxKTsKKwkJZXJyID0gaW5vZGUtPmlfc2ItPnNfb3AtPndyaXRlX2lub2RlKGlub2RlLCBOVUxMKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvdWJpZnMvc3VwZXIuYyBiL2ZzL3ViaWZzL3N1cGVyLmMKaW5kZXggNDNmOWQxOS4uNGQyZjIxNSAxMDA2NDQKLS0tIGEvZnMvdWJpZnMvc3VwZXIuYworKysgYi9mcy91Ymlmcy9zdXBlci5jCkBAIC0yODMsNyArMjgzLDcgQEAKIC8qCiAgKiBOb3RlLCBMaW51eCB3cml0ZS1iYWNrIGNvZGUgY2FsbHMgdGhpcyB3aXRob3V0ICdpX211dGV4Jy4KICAqLwotc3RhdGljIGludCB1Ymlmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgd2FpdCkKK3N0YXRpYyBpbnQgdWJpZnNfd3JpdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCiB7CiAJaW50IGVyciA9IDA7CiAJc3RydWN0IHViaWZzX2luZm8gKmMgPSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL2JhbGxvYy5jIGIvZnMvdWRmL2JhbGxvYy5jCmluZGV4IDgyMzcyZTMuLjE5NjI2ZTIgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9iYWxsb2MuYworKysgYi9mcy91ZGYvYmFsbG9jLmMKQEAgLTMxLDU1ICszMSw4IEBACiAjZGVmaW5lIHVkZl9jbGVhcl9iaXQobnIsIGFkZHIpIGV4dDJfY2xlYXJfYml0KG5yLCBhZGRyKQogI2RlZmluZSB1ZGZfc2V0X2JpdChuciwgYWRkcikgZXh0Ml9zZXRfYml0KG5yLCBhZGRyKQogI2RlZmluZSB1ZGZfdGVzdF9iaXQobnIsIGFkZHIpIGV4dDJfdGVzdF9iaXQobnIsIGFkZHIpCi0jZGVmaW5lIHVkZl9maW5kX2ZpcnN0X29uZV9iaXQoYWRkciwgc2l6ZSkgZmluZF9maXJzdF9vbmVfYml0KGFkZHIsIHNpemUpCiAjZGVmaW5lIHVkZl9maW5kX25leHRfb25lX2JpdChhZGRyLCBzaXplLCBvZmZzZXQpIFwKLQkJZmluZF9uZXh0X29uZV9iaXQoYWRkciwgc2l6ZSwgb2Zmc2V0KQotCi0jZGVmaW5lIGxlQlBMX3RvX2NwdXAoeCkgbGVOVU1fdG9fY3B1cChCSVRTX1BFUl9MT05HLCB4KQotI2RlZmluZSBsZU5VTV90b19jcHVwKHgsIHkpIHhsZU5VTV90b19jcHVwKHgsIHkpCi0jZGVmaW5lIHhsZU5VTV90b19jcHVwKHgsIHkpIChsZSAjIyB4ICMjIF90b19jcHVwKHkpKQotI2RlZmluZSB1aW50QlBMX3QgdWludChCSVRTX1BFUl9MT05HKQotI2RlZmluZSB1aW50KHgpIHh1aW50KHgpCi0jZGVmaW5lIHh1aW50KHgpIF9fbGUgIyMgeAotCi1zdGF0aWMgaW5saW5lIGludCBmaW5kX25leHRfb25lX2JpdCh2b2lkICphZGRyLCBpbnQgc2l6ZSwgaW50IG9mZnNldCkKLXsKLQl1aW50QlBMX3QgKnAgPSAoKHVpbnRCUExfdCAqKSBhZGRyKSArIChvZmZzZXQgLyBCSVRTX1BFUl9MT05HKTsKLQlpbnQgcmVzdWx0ID0gb2Zmc2V0ICYgfihCSVRTX1BFUl9MT05HIC0gMSk7Ci0JdW5zaWduZWQgbG9uZyB0bXA7Ci0KLQlpZiAob2Zmc2V0ID49IHNpemUpCi0JCXJldHVybiBzaXplOwotCXNpemUgLT0gcmVzdWx0OwotCW9mZnNldCAmPSAoQklUU19QRVJfTE9ORyAtIDEpOwotCWlmIChvZmZzZXQpIHsKLQkJdG1wID0gbGVCUExfdG9fY3B1cChwKyspOwotCQl0bXAgJj0gfjBVTCA8PCBvZmZzZXQ7Ci0JCWlmIChzaXplIDwgQklUU19QRVJfTE9ORykKLQkJCWdvdG8gZm91bmRfZmlyc3Q7Ci0JCWlmICh0bXApCi0JCQlnb3RvIGZvdW5kX21pZGRsZTsKLQkJc2l6ZSAtPSBCSVRTX1BFUl9MT05HOwotCQlyZXN1bHQgKz0gQklUU19QRVJfTE9ORzsKLQl9Ci0Jd2hpbGUgKHNpemUgJiB+KEJJVFNfUEVSX0xPTkcgLSAxKSkgewotCQl0bXAgPSBsZUJQTF90b19jcHVwKHArKyk7Ci0JCWlmICh0bXApCi0JCQlnb3RvIGZvdW5kX21pZGRsZTsKLQkJcmVzdWx0ICs9IEJJVFNfUEVSX0xPTkc7Ci0JCXNpemUgLT0gQklUU19QRVJfTE9ORzsKLQl9Ci0JaWYgKCFzaXplKQotCQlyZXR1cm4gcmVzdWx0OwotCXRtcCA9IGxlQlBMX3RvX2NwdXAocCk7Ci1mb3VuZF9maXJzdDoKLQl0bXAgJj0gfjBVTCA+PiAoQklUU19QRVJfTE9ORyAtIHNpemUpOwotZm91bmRfbWlkZGxlOgotCXJldHVybiByZXN1bHQgKyBmZnoofnRtcCk7Ci19Ci0KLSNkZWZpbmUgZmluZF9maXJzdF9vbmVfYml0KGFkZHIsIHNpemUpXAotCWZpbmRfbmV4dF9vbmVfYml0KChhZGRyKSwgKHNpemUpLCAwKQorCQlleHQyX2ZpbmRfbmV4dF9iaXQoYWRkciwgc2l6ZSwgb2Zmc2V0KQogCiBzdGF0aWMgaW50IHJlYWRfYmxvY2tfYml0bWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkgICAgIHN0cnVjdCB1ZGZfYml0bWFwICpiaXRtYXAsIHVuc2lnbmVkIGludCBibG9jaywKQEAgLTIwOCw3ICsxNjEsNyBAQAogCQkJCQkoKGNoYXIgKiliaC0+Yl9kYXRhKVsoYml0ICsgaSkgPj4gM10pOwogCQkJfSBlbHNlIHsKIAkJCQlpZiAoaW5vZGUpCi0JCQkJCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCAxKTsKKwkJCQkJZHF1b3RfZnJlZV9ibG9jayhpbm9kZSwgMSk7CiAJCQkJdWRmX2FkZF9mcmVlX3NwYWNlKHNiLCBzYmktPnNfcGFydGl0aW9uLCAxKTsKIAkJCX0KIAkJfQpAQCAtMjYwLDExICsyMTMsMTEgQEAKIAkJd2hpbGUgKGJpdCA8IChzYi0+c19ibG9ja3NpemUgPDwgMykgJiYgYmxvY2tfY291bnQgPiAwKSB7CiAJCQlpZiAoIXVkZl90ZXN0X2JpdChiaXQsIGJoLT5iX2RhdGEpKQogCQkJCWdvdG8gb3V0OwotCQkJZWxzZSBpZiAodmZzX2RxX3ByZWFsbG9jX2Jsb2NrKGlub2RlLCAxKSkKKwkJCWVsc2UgaWYgKGRxdW90X3ByZWFsbG9jX2Jsb2NrKGlub2RlLCAxKSkKIAkJCQlnb3RvIG91dDsKIAkJCWVsc2UgaWYgKCF1ZGZfY2xlYXJfYml0KGJpdCwgYmgtPmJfZGF0YSkpIHsKIAkJCQl1ZGZfZGVidWcoImJpdCBhbHJlYWR5IGNsZWFyZWQgZm9yIGJsb2NrICVkXG4iLCBiaXQpOwotCQkJCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCAxKTsKKwkJCQlkcXVvdF9mcmVlX2Jsb2NrKGlub2RlLCAxKTsKIAkJCQlnb3RvIG91dDsKIAkJCX0KIAkJCWJsb2NrX2NvdW50LS07CkBAIC0zOTAsMTAgKzM0MywxNCBAQAogCS8qCiAJICogQ2hlY2sgcXVvdGEgZm9yIGFsbG9jYXRpb24gb2YgdGhpcyBibG9jay4KIAkgKi8KLQlpZiAoaW5vZGUgJiYgdmZzX2RxX2FsbG9jX2Jsb2NrKGlub2RlLCAxKSkgewotCQltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7Ci0JCSplcnIgPSAtRURRVU9UOwotCQlyZXR1cm4gMDsKKwlpZiAoaW5vZGUpIHsKKwkJaW50IHJldCA9IGRxdW90X2FsbG9jX2Jsb2NrKGlub2RlLCAxKTsKKworCQlpZiAocmV0KSB7CisJCQltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7CisJCQkqZXJyID0gcmV0OworCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAluZXdibG9jayA9IGJpdCArIChibG9ja19ncm91cCA8PCAoc2ItPnNfYmxvY2tzaXplX2JpdHMgKyAzKSkgLQpAQCAtNDQ5LDcgKzQwNiw3IEBACiAJLyogV2UgZG8gdGhpcyB1cCBmcm9udCAtIFRoZXJlIGFyZSBzb21lIGVycm9yIGNvbmRpdGlvbnMgdGhhdAogCSAgIGNvdWxkIG9jY3VyZSwgYnV0Li4gb2ggd2VsbCAqLwogCWlmIChpbm9kZSkKLQkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIGNvdW50KTsKKwkJZHF1b3RfZnJlZV9ibG9jayhpbm9kZSwgY291bnQpOwogCXVkZl9hZGRfZnJlZV9zcGFjZShzYiwgc2JpLT5zX3BhcnRpdGlvbiwgY291bnQpOwogCiAJc3RhcnQgPSBibG9jLT5sb2dpY2FsQmxvY2tOdW0gKyBvZmZzZXQ7CkBAIC01NDcsNyArNTA0LDcgQEAKIAkJfQogCiAJCWlmIChlcG9zLm9mZnNldCArICgyICogYWRzaXplKSA+IHNiLT5zX2Jsb2Nrc2l6ZSkgewotCQkJY2hhciAqc3B0ciwgKmRwdHI7CisJCQl1bnNpZ25lZCBjaGFyICpzcHRyLCAqZHB0cjsKIAkJCWludCBsb2Zmc2V0OwogCiAJCQlicmVsc2Uob2Vwb3MuYmgpOwpAQCAtNjk0LDcgKzY1MSw3IEBACiAJCWVwb3Mub2Zmc2V0IC09IGFkc2l6ZTsKIAogCQlhbGxvY19jb3VudCA9IChlbGVuID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKTsKLQkJaWYgKGlub2RlICYmIHZmc19kcV9wcmVhbGxvY19ibG9jayhpbm9kZSwKKwkJaWYgKGlub2RlICYmIGRxdW90X3ByZWFsbG9jX2Jsb2NrKGlub2RlLAogCQkJYWxsb2NfY291bnQgPiBibG9ja19jb3VudCA/IGJsb2NrX2NvdW50IDogYWxsb2NfY291bnQpKQogCQkJYWxsb2NfY291bnQgPSAwOwogCQllbHNlIGlmIChhbGxvY19jb3VudCA+IGJsb2NrX2NvdW50KSB7CkBAIC03OTcsMTIgKzc1NCwxMyBAQAogCW5ld2Jsb2NrID0gZ29hbF9lbG9jLmxvZ2ljYWxCbG9ja051bTsKIAlnb2FsX2Vsb2MubG9naWNhbEJsb2NrTnVtKys7CiAJZ29hbF9lbGVuIC09IHNiLT5zX2Jsb2Nrc2l6ZTsKLQotCWlmIChpbm9kZSAmJiB2ZnNfZHFfYWxsb2NfYmxvY2soaW5vZGUsIDEpKSB7Ci0JCWJyZWxzZShnb2FsX2Vwb3MuYmgpOwotCQltdXRleF91bmxvY2soJnNiaS0+c19hbGxvY19tdXRleCk7Ci0JCSplcnIgPSAtRURRVU9UOwotCQlyZXR1cm4gMDsKKwlpZiAoaW5vZGUpIHsKKwkJKmVyciA9IGRxdW90X2FsbG9jX2Jsb2NrKGlub2RlLCAxKTsKKwkJaWYgKCplcnIpIHsKKwkJCWJyZWxzZShnb2FsX2Vwb3MuYmgpOworCQkJbXV0ZXhfdW5sb2NrKCZzYmktPnNfYWxsb2NfbXV0ZXgpOworCQkJcmV0dXJuIDA7CisJCX0KIAl9CiAKIAlpZiAoZ29hbF9lbGVuKQpkaWZmIC0tZ2l0IGEvZnMvdWRmL2Rpci5jIGIvZnMvdWRmL2Rpci5jCmluZGV4IDYxZDlhNzYuLmYwZjJhNDMgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9kaXIuYworKysgYi9mcy91ZGYvZGlyLmMKQEAgLTQ1LDggKzQ1LDggQEAKIAlpbnQgYmxvY2ssIGlibG9jazsKIAlsb2ZmX3QgbmZfcG9zID0gKGZpbHAtPmZfcG9zIC0gMSkgPDwgMjsKIAlpbnQgZmxlbjsKLQljaGFyICpmbmFtZSA9IE5VTEw7Ci0JY2hhciAqbmFtZXB0cjsKKwl1bnNpZ25lZCBjaGFyICpmbmFtZSA9IE5VTEw7CisJdW5zaWduZWQgY2hhciAqbmFtZXB0cjsKIAl1aW50MTZfdCBsaXU7CiAJdWludDhfdCBsZmk7CiAJbG9mZl90IHNpemUgPSB1ZGZfZXh0MF9vZmZzZXQoZGlyKSArIGRpci0+aV9zaXplOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL2ZpbGUuYyBiL2ZzL3VkZi9maWxlLmMKaW5kZXggZjMxMWQ1MC4uMWViMDY3NyAxMDA2NDQKLS0tIGEvZnMvdWRmL2ZpbGUuYworKysgYi9mcy91ZGYvZmlsZS5jCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvYWlvLmg+CiAKQEAgLTIwNyw3ICsyMDgsNyBAQAogCS5yZWFkCQkJPSBkb19zeW5jX3JlYWQsCiAJLmFpb19yZWFkCQk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKIAkuaW9jdGwJCQk9IHVkZl9pb2N0bCwKLQkub3BlbgkJCT0gZ2VuZXJpY19maWxlX29wZW4sCisJLm9wZW4JCQk9IGRxdW90X2ZpbGVfb3BlbiwKIAkubW1hcAkJCT0gZ2VuZXJpY19maWxlX21tYXAsCiAJLndyaXRlCQkJPSBkb19zeW5jX3dyaXRlLAogCS5haW9fd3JpdGUJCT0gdWRmX2ZpbGVfYWlvX3dyaXRlLApAQCAtMjE3LDYgKzIxOCwyOSBAQAogCS5sbHNlZWsJCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiB9OwogCitzdGF0aWMgaW50IHVkZl9zZXRhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cikKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCWludCBlcnJvcjsKKworCWVycm9yID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBpYXR0cik7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisKKwlpZiAoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9TSVpFKQorCQlkcXVvdF9pbml0aWFsaXplKGlub2RlKTsKKworCWlmICgoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9VSUQgJiYgaWF0dHItPmlhX3VpZCAhPSBpbm9kZS0+aV91aWQpIHx8CisgICAgICAgICAgICAoaWF0dHItPmlhX3ZhbGlkICYgQVRUUl9HSUQgJiYgaWF0dHItPmlhX2dpZCAhPSBpbm9kZS0+aV9naWQpKSB7CisJCWVycm9yID0gZHF1b3RfdHJhbnNmZXIoaW5vZGUsIGlhdHRyKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCX0KKworCXJldHVybiBpbm9kZV9zZXRhdHRyKGlub2RlLCBpYXR0cik7Cit9CisKIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHVkZl9maWxlX2lub2RlX29wZXJhdGlvbnMgPSB7Ci0JLnRydW5jYXRlID0gdWRmX3RydW5jYXRlLAorCS50cnVuY2F0ZQkJPSB1ZGZfdHJ1bmNhdGUsCisJLnNldGF0dHIJCT0gdWRmX3NldGF0dHIsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvdWRmL2lhbGxvYy5jIGIvZnMvdWRmL2lhbGxvYy5jCmluZGV4IGMxMGZhMzkuLmZiNjhjOWMgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9pYWxsb2MuYworKysgYi9mcy91ZGYvaWFsbG9jLmMKQEAgLTM2LDggKzM2LDggQEAKIAkgKiBOb3RlOiB3ZSBtdXN0IGZyZWUgYW55IHF1b3RhIGJlZm9yZSBsb2NraW5nIHRoZSBzdXBlcmJsb2NrLAogCSAqIGFzIHdyaXRpbmcgdGhlIHF1b3RhIHRvIGRpc2sgbWF5IG5lZWQgdGhlIGxvY2sgYXMgd2VsbC4KIAkgKi8KLQl2ZnNfZHFfZnJlZV9pbm9kZShpbm9kZSk7Ci0JdmZzX2RxX2Ryb3AoaW5vZGUpOworCWRxdW90X2ZyZWVfaW5vZGUoaW5vZGUpOworCWRxdW90X2Ryb3AoaW5vZGUpOwogCiAJY2xlYXJfaW5vZGUoaW5vZGUpOwogCkBAIC02MSw3ICs2MSw3IEBACiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci0+aV9zYjsKIAlzdHJ1Y3QgdWRmX3NiX2luZm8gKnNiaSA9IFVERl9TQihzYik7CiAJc3RydWN0IGlub2RlICppbm9kZTsKLQlpbnQgYmxvY2s7CisJaW50IGJsb2NrLCByZXQ7CiAJdWludDMyX3Qgc3RhcnQgPSBVREZfSShkaXIpLT5pX2xvY2F0aW9uLmxvZ2ljYWxCbG9ja051bTsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvOwogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqZGluZm8gPSBVREZfSShkaXIpOwpAQCAtMTUzLDEyICsxNTMsMTQgQEAKIAlpbnNlcnRfaW5vZGVfaGFzaChpbm9kZSk7CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAKLQlpZiAodmZzX2RxX2FsbG9jX2lub2RlKGlub2RlKSkgewotCQl2ZnNfZHFfZHJvcChpbm9kZSk7CisJZHF1b3RfaW5pdGlhbGl6ZShpbm9kZSk7CisJcmV0ID0gZHF1b3RfYWxsb2NfaW5vZGUoaW5vZGUpOworCWlmIChyZXQpIHsKKwkJZHF1b3RfZHJvcChpbm9kZSk7CiAJCWlub2RlLT5pX2ZsYWdzIHw9IFNfTk9RVU9UQTsKIAkJaW5vZGUtPmlfbmxpbmsgPSAwOwogCQlpcHV0KGlub2RlKTsKLQkJKmVyciA9IC1FRFFVT1Q7CisJCSplcnIgPSByZXQ7CiAJCXJldHVybiBOVUxMOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvdWRmL2lub2RlLmMgYi9mcy91ZGYvaW5vZGUuYwppbmRleCBmOTAyMzFlLi5iYjg2M2ZlIDEwMDY0NAotLS0gYS9mcy91ZGYvaW5vZGUuYworKysgYi9mcy91ZGYvaW5vZGUuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgorI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYy1pdHUtdC5oPgogCkBAIC03MCw2ICs3MSw5IEBACiAKIHZvaWQgdWRmX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogeworCWlmICghaXNfYmFkX2lub2RlKGlub2RlKSkKKwkJZHF1b3RfaW5pdGlhbGl6ZShpbm9kZSk7CisKIAl0cnVuY2F0ZV9pbm9kZV9wYWdlcygmaW5vZGUtPmlfZGF0YSwgMCk7CiAKIAlpZiAoaXNfYmFkX2lub2RlKGlub2RlKSkKQEAgLTEwMiwxMiArMTA2LDE0IEBACiAJaWYgKGlpbmZvLT5pX2FsbG9jX3R5cGUgIT0gSUNCVEFHX0ZMQUdfQURfSU5fSUNCICYmCiAJICAgIGlub2RlLT5pX3NpemUgIT0gaWluZm8tPmlfbGVuRXh0ZW50cykgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJVREYtZnMgKCVzKTogSW5vZGUgJWx1IChtb2RlICVvKSBoYXMgIgotCQkJImlub2RlIHNpemUgJWxsdSBkaWZmZXJlbnQgZnJvbSBleHRlbnQgbGVuZ2h0ICVsbHUuICIKKwkJCSJpbm9kZSBzaXplICVsbHUgZGlmZmVyZW50IGZyb20gZXh0ZW50IGxlbmd0aCAlbGx1LiAiCiAJCQkiRmlsZXN5c3RlbSBuZWVkIG5vdCBiZSBzdGFuZGFyZHMgY29tcGxpYW50LlxuIiwKIAkJCWlub2RlLT5pX3NiLT5zX2lkLCBpbm9kZS0+aV9pbm8sIGlub2RlLT5pX21vZGUsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKWlub2RlLT5pX3NpemUsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKWlpbmZvLT5pX2xlbkV4dGVudHMpOwogCX0KKworCWRxdW90X2Ryb3AoaW5vZGUpOwogCWtmcmVlKGlpbmZvLT5pX2V4dC5pX2RhdGEpOwogCWlpbmZvLT5pX2V4dC5pX2RhdGEgPSBOVUxMOwogfQpAQCAtMTM3MywxMiArMTM3OSwxMiBAQAogCXJldHVybiBtb2RlOwogfQogCi1pbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBzeW5jKQoraW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlpbnQgcmV0OwogCiAJbG9ja19rZXJuZWwoKTsKLQlyZXQgPSB1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCBzeW5jKTsKKwlyZXQgPSB1ZGZfdXBkYXRlX2lub2RlKGlub2RlLCB3YmMtPnN5bmNfbW9kZSA9PSBXQl9TWU5DX0FMTCk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIHJldDsKQEAgLTE0MDIsMjAgKzE0MDgsMTkgQEAKIAl1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplX2JpdHM7CiAJc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbyA9IFVERl9JKGlub2RlKTsKIAotCWJoID0gdWRmX3RyZWFkKGlub2RlLT5pX3NiLAotCQkJdWRmX2dldF9sYl9wYmxvY2soaW5vZGUtPmlfc2IsCi0JCQkJCSAgJmlpbmZvLT5pX2xvY2F0aW9uLCAwKSk7CisJYmggPSB1ZGZfdGdldGJsayhpbm9kZS0+aV9zYiwKKwkJCXVkZl9nZXRfbGJfcGJsb2NrKGlub2RlLT5pX3NiLCAmaWluZm8tPmlfbG9jYXRpb24sIDApKTsKIAlpZiAoIWJoKSB7Ci0JCXVkZl9kZWJ1ZygiYnJlYWQgZmFpbHVyZVxuIik7Ci0JCXJldHVybiAtRUlPOworCQl1ZGZfZGVidWcoImdldGJsayBmYWlsdXJlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JbWVtc2V0KGJoLT5iX2RhdGEsIDB4MDAsIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7Ci0KKwlsb2NrX2J1ZmZlcihiaCk7CisJbWVtc2V0KGJoLT5iX2RhdGEsIDAsIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7CiAJZmUgPSAoc3RydWN0IGZpbGVFbnRyeSAqKWJoLT5iX2RhdGE7CiAJZWZlID0gKHN0cnVjdCBleHRlbmRlZEZpbGVFbnRyeSAqKWJoLT5iX2RhdGE7CiAKLQlpZiAoZmUtPmRlc2NUYWcudGFnSWRlbnQgPT0gY3B1X3RvX2xlMTYoVEFHX0lERU5UX1VTRSkpIHsKKwlpZiAoaWluZm8tPmlfdXNlKSB7CiAJCXN0cnVjdCB1bmFsbG9jU3BhY2VFbnRyeSAqdXNlID0KIAkJCShzdHJ1Y3QgdW5hbGxvY1NwYWNlRW50cnkgKiliaC0+Yl9kYXRhOwogCkBAIC0xNDIzLDIwICsxNDI4LDE4IEBACiAJCW1lbWNweShiaC0+Yl9kYXRhICsgc2l6ZW9mKHN0cnVjdCB1bmFsbG9jU3BhY2VFbnRyeSksCiAJCSAgICAgICBpaW5mby0+aV9leHQuaV9kYXRhLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLQogCQkJCQlzaXplb2Yoc3RydWN0IHVuYWxsb2NTcGFjZUVudHJ5KSk7CisJCXVzZS0+ZGVzY1RhZy50YWdJZGVudCA9IGNwdV90b19sZTE2KFRBR19JREVOVF9VU0UpOworCQl1c2UtPmRlc2NUYWcudGFnTG9jYXRpb24gPQorCQkJCWNwdV90b19sZTMyKGlpbmZvLT5pX2xvY2F0aW9uLmxvZ2ljYWxCbG9ja051bSk7CiAJCWNyY2xlbiA9IHNpemVvZihzdHJ1Y3QgdW5hbGxvY1NwYWNlRW50cnkpICsKIAkJCQlpaW5mby0+aV9sZW5BbGxvYyAtIHNpemVvZihzdHJ1Y3QgdGFnKTsKLQkJdXNlLT5kZXNjVGFnLnRhZ0xvY2F0aW9uID0gY3B1X3RvX2xlMzIoCi0JCQkJCQlpaW5mby0+aV9sb2NhdGlvbi4KLQkJCQkJCQlsb2dpY2FsQmxvY2tOdW0pOwogCQl1c2UtPmRlc2NUYWcuZGVzY0NSQ0xlbmd0aCA9IGNwdV90b19sZTE2KGNyY2xlbik7CiAJCXVzZS0+ZGVzY1RhZy5kZXNjQ1JDID0gY3B1X3RvX2xlMTYoY3JjX2l0dV90KDAsIChjaGFyICopdXNlICsKIAkJCQkJCQkgICBzaXplb2Yoc3RydWN0IHRhZyksCiAJCQkJCQkJICAgY3JjbGVuKSk7CiAJCXVzZS0+ZGVzY1RhZy50YWdDaGVja3N1bSA9IHVkZl90YWdfY2hlY2tzdW0oJnVzZS0+ZGVzY1RhZyk7CiAKLQkJbWFya19idWZmZXJfZGlydHkoYmgpOwotCQlicmVsc2UoYmgpOwotCQlyZXR1cm4gZXJyOworCQlnb3RvIG91dDsKIAl9CiAKIAlpZiAoVURGX1FVRVJZX0ZMQUcoaW5vZGUtPmlfc2IsIFVERl9GTEFHX1VJRF9GT1JHRVQpKQpAQCAtMTU5MSwxOCArMTU5NCwyMSBAQAogCWZlLT5kZXNjVGFnLnRhZ1NlcmlhbE51bSA9IGNwdV90b19sZTE2KHNiaS0+c19zZXJpYWxfbnVtYmVyKTsKIAlmZS0+ZGVzY1RhZy50YWdMb2NhdGlvbiA9IGNwdV90b19sZTMyKAogCQkJCQlpaW5mby0+aV9sb2NhdGlvbi5sb2dpY2FsQmxvY2tOdW0pOwotCWNyY2xlbiArPSBpaW5mby0+aV9sZW5FQXR0ciArIGlpbmZvLT5pX2xlbkFsbG9jIC0KLQkJCQkJCQkJc2l6ZW9mKHN0cnVjdCB0YWcpOworCWNyY2xlbiArPSBpaW5mby0+aV9sZW5FQXR0ciArIGlpbmZvLT5pX2xlbkFsbG9jIC0gc2l6ZW9mKHN0cnVjdCB0YWcpOwogCWZlLT5kZXNjVGFnLmRlc2NDUkNMZW5ndGggPSBjcHVfdG9fbGUxNihjcmNsZW4pOwogCWZlLT5kZXNjVGFnLmRlc2NDUkMgPSBjcHVfdG9fbGUxNihjcmNfaXR1X3QoMCwgKGNoYXIgKilmZSArIHNpemVvZihzdHJ1Y3QgdGFnKSwKIAkJCQkJCSAgY3JjbGVuKSk7CiAJZmUtPmRlc2NUYWcudGFnQ2hlY2tzdW0gPSB1ZGZfdGFnX2NoZWNrc3VtKCZmZS0+ZGVzY1RhZyk7CiAKK291dDoKKwlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKKwl1bmxvY2tfYnVmZmVyKGJoKTsKKwogCS8qIHdyaXRlIHRoZSBkYXRhIGJsb2NrcyAqLwogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAlpZiAoZG9fc3luYykgewogCQlzeW5jX2RpcnR5X2J1ZmZlcihiaCk7Ci0JCWlmIChidWZmZXJfcmVxKGJoKSAmJiAhYnVmZmVyX3VwdG9kYXRlKGJoKSkgeworCQlpZiAoYnVmZmVyX3dyaXRlX2lvX2Vycm9yKGJoKSkgewogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiSU8gZXJyb3Igc3luY2luZyB1ZGYgaW5vZGUgIgogCQkJCSJbJXM6JTA4bHhdXG4iLCBpbm9kZS0+aV9zYi0+c19pZCwKIAkJCQlpbm9kZS0+aV9pbm8pOwpAQCAtMTY3Miw3ICsxNjc4LDcgQEAKIAkJcmV0dXJuIC0xOwogCiAJaWYgKGVwb3MtPm9mZnNldCArICgyICogYWRzaXplKSA+IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSkgewotCQljaGFyICpzcHRyLCAqZHB0cjsKKwkJdW5zaWduZWQgY2hhciAqc3B0ciwgKmRwdHI7CiAJCXN0cnVjdCBidWZmZXJfaGVhZCAqbmJoOwogCQlpbnQgZXJyLCBsb2Zmc2V0OwogCQlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgb2Jsb2MgPSBlcG9zLT5ibG9jazsKZGlmZiAtLWdpdCBhL2ZzL3VkZi9uYW1laS5jIGIvZnMvdWRmL25hbWVpLmMKaW5kZXggY2QyMTE1MC4uZGI0MjNhYiAxMDA2NDQKLS0tIGEvZnMvdWRmL25hbWVpLmMKKysrIGIvZnMvdWRmL25hbWVpLmMKQEAgLTM0LDggKzM0LDggQEAKICNpbmNsdWRlIDxsaW51eC9jcmMtaXR1LXQuaD4KICNpbmNsdWRlIDxsaW51eC9leHBvcnRmcy5oPgogCi1zdGF0aWMgaW5saW5lIGludCB1ZGZfbWF0Y2goaW50IGxlbjEsIGNvbnN0IGNoYXIgKm5hbWUxLCBpbnQgbGVuMiwKLQkJCSAgICBjb25zdCBjaGFyICpuYW1lMikKK3N0YXRpYyBpbmxpbmUgaW50IHVkZl9tYXRjaChpbnQgbGVuMSwgY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZTEsIGludCBsZW4yLAorCQkJICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUyKQogewogCWlmIChsZW4xICE9IGxlbjIpCiAJCXJldHVybiAwOwpAQCAtMTQyLDE1ICsxNDIsMTUgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBmaWxlSWRlbnREZXNjICp1ZGZfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwKLQkJCQkJICAgIHN0cnVjdCBxc3RyICpjaGlsZCwKKwkJCQkJICAgIGNvbnN0IHN0cnVjdCBxc3RyICpjaGlsZCwKIAkJCQkJICAgIHN0cnVjdCB1ZGZfZmlsZWlkZW50X2JoICpmaWJoLAogCQkJCQkgICAgc3RydWN0IGZpbGVJZGVudERlc2MgKmNmaSkKIHsKIAlzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqZmkgPSBOVUxMOwogCWxvZmZfdCBmX3BvczsKIAlpbnQgYmxvY2ssIGZsZW47Ci0JY2hhciAqZm5hbWUgPSBOVUxMOwotCWNoYXIgKm5hbWVwdHI7CisJdW5zaWduZWQgY2hhciAqZm5hbWUgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgKm5hbWVwdHI7CiAJdWludDhfdCBsZmk7CiAJdWludDE2X3QgbGl1OwogCWxvZmZfdCBzaXplOwpAQCAtMzA4LDcgKzMwOCw3IEBACiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci0+aV9zYjsKIAlzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqZmkgPSBOVUxMOwotCWNoYXIgKm5hbWUgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgKm5hbWUgPSBOVUxMOwogCWludCBuYW1lbGVuOwogCWxvZmZfdCBmX3BvczsKIAlsb2ZmX3Qgc2l6ZSA9IHVkZl9leHQwX29mZnNldChkaXIpICsgZGlyLT5pX3NpemU7CkBAIC01NjMsNiArNTYzLDggQEAKIAlpbnQgZXJyOwogCXN0cnVjdCB1ZGZfaW5vZGVfaW5mbyAqaWluZm87CiAKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CisKIAlsb2NrX2tlcm5lbCgpOwogCWlub2RlID0gdWRmX25ld19pbm9kZShkaXIsIG1vZGUsICZlcnIpOwogCWlmICghaW5vZGUpIHsKQEAgLTYxNiw2ICs2MTgsOCBAQAogCWlmICghb2xkX3ZhbGlkX2RldihyZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CisKIAlsb2NrX2tlcm5lbCgpOwogCWVyciA9IC1FSU87CiAJaW5vZGUgPSB1ZGZfbmV3X2lub2RlKGRpciwgbW9kZSwgJmVycik7CkBAIC02NjIsNiArNjY2LDggQEAKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmRpbmZvID0gVURGX0koZGlyKTsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvOwogCisJZHF1b3RfaW5pdGlhbGl6ZShkaXIpOworCiAJbG9ja19rZXJuZWwoKTsKIAllcnIgPSAtRU1MSU5LOwogCWlmIChkaXItPmlfbmxpbmsgPj0gKDI1NiA8PCBzaXplb2YoZGlyLT5pX25saW5rKSkgLSAxKQpAQCAtNzk5LDYgKzgwNSw4IEBACiAJc3RydWN0IGZpbGVJZGVudERlc2MgKmZpLCBjZmk7CiAJc3RydWN0IGtlcm5lbF9sYl9hZGRyIHRsb2M7CiAKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CisKIAlyZXR2YWwgPSAtRU5PRU5UOwogCWxvY2tfa2VybmVsKCk7CiAJZmkgPSB1ZGZfZmluZF9lbnRyeShkaXIsICZkZW50cnktPmRfbmFtZSwgJmZpYmgsICZjZmkpOwpAQCAtODQ1LDYgKzg1Myw4IEBACiAJc3RydWN0IGZpbGVJZGVudERlc2MgY2ZpOwogCXN0cnVjdCBrZXJuZWxfbGJfYWRkciB0bG9jOwogCisJZHF1b3RfaW5pdGlhbGl6ZShkaXIpOworCiAJcmV0dmFsID0gLUVOT0VOVDsKIAlsb2NrX2tlcm5lbCgpOwogCWZpID0gdWRmX2ZpbmRfZW50cnkoZGlyLCAmZGVudHJ5LT5kX25hbWUsICZmaWJoLCAmY2ZpKTsKQEAgLTg4NSwyMCArODk1LDIyIEBACiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgcGF0aENvbXBvbmVudCAqcGM7Ci0JY2hhciAqY29tcHN0YXJ0OworCWNvbnN0IGNoYXIgKmNvbXBzdGFydDsKIAlzdHJ1Y3QgdWRmX2ZpbGVpZGVudF9iaCBmaWJoOwogCXN0cnVjdCBleHRlbnRfcG9zaXRpb24gZXBvcyA9IHt9OwogCWludCBlb2Zmc2V0LCBlbGVuID0gMDsKIAlzdHJ1Y3QgZmlsZUlkZW50RGVzYyAqZmk7CiAJc3RydWN0IGZpbGVJZGVudERlc2MgY2ZpOwotCWNoYXIgKmVhOworCXVpbnQ4X3QgKmVhOwogCWludCBlcnI7CiAJaW50IGJsb2NrOwotCWNoYXIgKm5hbWUgPSBOVUxMOworCXVuc2lnbmVkIGNoYXIgKm5hbWUgPSBOVUxMOwogCWludCBuYW1lbGVuOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IHVkZl9pbm9kZV9pbmZvICppaW5mbzsKIAorCWRxdW90X2luaXRpYWxpemUoZGlyKTsKKwogCWxvY2tfa2VybmVsKCk7CiAJaW5vZGUgPSB1ZGZfbmV3X2lub2RlKGRpciwgU19JRkxOSywgJmVycik7CiAJaWYgKCFpbm9kZSkKQEAgLTk3MCw3ICs5ODIsNyBAQAogCiAJCXBjID0gKHN0cnVjdCBwYXRoQ29tcG9uZW50ICopKGVhICsgZWxlbik7CiAKLQkJY29tcHN0YXJ0ID0gKGNoYXIgKilzeW1uYW1lOworCQljb21wc3RhcnQgPSBzeW1uYW1lOwogCiAJCWRvIHsKIAkJCXN5bW5hbWUrKzsKQEAgLTEwNjksNiArMTA4MSw4IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCisJZHF1b3RfaW5pdGlhbGl6ZShkaXIpOworCiAJbG9ja19rZXJuZWwoKTsKIAlpZiAoaW5vZGUtPmlfbmxpbmsgPj0gKDI1NiA8PCBzaXplb2YoaW5vZGUtPmlfbmxpbmspKSAtIDEpIHsKIAkJdW5sb2NrX2tlcm5lbCgpOwpAQCAtMTEzMSw2ICsxMTQ1LDkgQEAKIAlzdHJ1Y3Qga2VybmVsX2xiX2FkZHIgdGxvYzsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKm9sZF9paW5mbyA9IFVERl9JKG9sZF9pbm9kZSk7CiAKKwlkcXVvdF9pbml0aWFsaXplKG9sZF9kaXIpOworCWRxdW90X2luaXRpYWxpemUobmV3X2Rpcik7CisKIAlsb2NrX2tlcm5lbCgpOwogCW9maSA9IHVkZl9maW5kX2VudHJ5KG9sZF9kaXIsICZvbGRfZGVudHJ5LT5kX25hbWUsICZvZmliaCwgJm9jZmkpOwogCWlmIChvZmkpIHsKZGlmZiAtLWdpdCBhL2ZzL3VkZi9zeW1saW5rLmMgYi9mcy91ZGYvc3ltbGluay5jCmluZGV4IGMzMjY1ZTEuLjg1MmU5MTggMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9zeW1saW5rLmMKKysrIGIvZnMvdWRmL3N5bWxpbmsuYwpAQCAtMzIsMTIgKzMyLDEyIEBACiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlICJ1ZGZfaS5oIgogCi1zdGF0aWMgdm9pZCB1ZGZfcGNfdG9fY2hhcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjaGFyICpmcm9tLCBpbnQgZnJvbWxlbiwKLQkJCSAgIGNoYXIgKnRvKQorc3RhdGljIHZvaWQgdWRmX3BjX3RvX2NoYXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgY2hhciAqZnJvbSwKKwkJCSAgIGludCBmcm9tbGVuLCB1bnNpZ25lZCBjaGFyICp0bykKIHsKIAlzdHJ1Y3QgcGF0aENvbXBvbmVudCAqcGM7CiAJaW50IGVsZW4gPSAwOwotCWNoYXIgKnAgPSB0bzsKKwl1bnNpZ25lZCBjaGFyICpwID0gdG87CiAKIAl3aGlsZSAoZWxlbiA8IGZyb21sZW4pIHsKIAkJcGMgPSAoc3RydWN0IHBhdGhDb21wb25lbnQgKikoZnJvbSArIGVsZW4pOwpAQCAtNzUsOSArNzUsOSBAQAogewogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwotCWNoYXIgKnN5bWxpbms7CisJdW5zaWduZWQgY2hhciAqc3ltbGluazsKIAlpbnQgZXJyID0gLUVJTzsKLQljaGFyICpwID0ga21hcChwYWdlKTsKKwl1bnNpZ25lZCBjaGFyICpwID0ga21hcChwYWdlKTsKIAlzdHJ1Y3QgdWRmX2lub2RlX2luZm8gKmlpbmZvOwogCiAJbG9ja19rZXJuZWwoKTsKZGlmZiAtLWdpdCBhL2ZzL3VkZi91ZGZkZWNsLmggYi9mcy91ZGYvdWRmZGVjbC5oCmluZGV4IDhkNDZmNDIuLjQyMjNhYzggMTAwNjQ0Ci0tLSBhL2ZzL3VkZi91ZGZkZWNsLmgKKysrIGIvZnMvdWRmL3VkZmRlY2wuaApAQCAtMTQyLDcgKzE0Miw3IEBACiBleHRlcm4gdm9pZCB1ZGZfcmVhZF9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gdm9pZCB1ZGZfZGVsZXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiB2b2lkIHVkZl9jbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7Ci1leHRlcm4gaW50IHVkZl93cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKK2V4dGVybiBpbnQgdWRmX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CiBleHRlcm4gbG9uZyB1ZGZfYmxvY2tfbWFwKHN0cnVjdCBpbm9kZSAqLCBzZWN0b3JfdCk7CiBleHRlcm4gaW50IHVkZl9leHRlbmRfZmlsZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGV4dGVudF9wb3NpdGlvbiAqLAogCQkJICAgc3RydWN0IGtlcm5lbF9sb25nX2FkICosIHNlY3Rvcl90KTsKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9iYWxsb2MuYyBiL2ZzL3Vmcy9iYWxsb2MuYwppbmRleCA1NGMxNmVjLi41Y2ZhNGQ4IDEwMDY0NAotLS0gYS9mcy91ZnMvYmFsbG9jLmMKKysrIGIvZnMvdWZzL2JhbGxvYy5jCkBAIC04NSw3ICs4NSw3IEBACiAJCQkJICAgImJpdCBhbHJlYWR5IGNsZWFyZWQgZm9yIGZyYWdtZW50ICV1IiwgaSk7CiAJfQogCQotCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCBjb3VudCk7CisJZHF1b3RfZnJlZV9ibG9jayhpbm9kZSwgY291bnQpOwogCiAJCiAJZnMzMl9hZGQoc2IsICZ1Y2ctPmNnX2NzLmNzX25mZnJlZSwgY291bnQpOwpAQCAtMTk1LDcgKzE5NSw3IEBACiAJCXViaF9zZXRibG9jayhVQ1BJX1VCSCh1Y3BpKSwgdWNwaS0+Y19mcmVlb2ZmLCBibGtubyk7CiAJCWlmICgoVUZTX1NCKHNiKS0+c19mbGFncyAmIFVGU19DR19NQVNLKSA9PSBVRlNfQ0dfNDRCU0QpCiAJCQl1ZnNfY2x1c3RlcmFjY3QgKHNiLCB1Y3BpLCBibGtubywgMSk7Ci0JCXZmc19kcV9mcmVlX2Jsb2NrKGlub2RlLCB1c3BpLT5zX2ZwYik7CisJCWRxdW90X2ZyZWVfYmxvY2soaW5vZGUsIHVzcGktPnNfZnBiKTsKIAogCQlmczMyX2FkZChzYiwgJnVjZy0+Y2dfY3MuY3NfbmJmcmVlLCAxKTsKIAkJdXNwaS0+Y3NfdG90YWwuY3NfbmJmcmVlKys7CkBAIC01MTEsNiArNTExLDcgQEAKIAlzdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbyAqIHVjcGk7CiAJc3RydWN0IHVmc19jeWxpbmRlcl9ncm91cCAqIHVjZzsKIAl1bnNpZ25lZCBjZ25vLCBmcmFnbm8sIGZyYWdvZmYsIGNvdW50LCBmcmFnc2l6ZSwgaTsKKwlpbnQgcmV0OwogCQogCVVGU0QoIkVOVEVSLCBmcmFnbWVudCAlbGx1LCBvbGRjb3VudCAldSwgbmV3Y291bnQgJXVcbiIsCiAJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWZyYWdtZW50LCBvbGRjb3VudCwgbmV3Y291bnQpOwpAQCAtNTU2LDggKzU1Nyw5IEBACiAJCWZzMzJfYWRkKHNiLCAmdWNnLT5jZ19mcnN1bVtmcmFnc2l6ZSAtIGNvdW50XSwgMSk7CiAJZm9yIChpID0gb2xkY291bnQ7IGkgPCBuZXdjb3VudDsgaSsrKQogCQl1YmhfY2xyYml0IChVQ1BJX1VCSCh1Y3BpKSwgdWNwaS0+Y19mcmVlb2ZmLCBmcmFnbm8gKyBpKTsKLQlpZiAodmZzX2RxX2FsbG9jX2Jsb2NrKGlub2RlLCBjb3VudCkpIHsKLQkJKmVyciA9IC1FRFFVT1Q7CisJcmV0ID0gZHF1b3RfYWxsb2NfYmxvY2soaW5vZGUsIGNvdW50KTsKKwlpZiAocmV0KSB7CisJCSplcnIgPSByZXQ7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNTk2LDYgKzU5OCw3IEBACiAJc3RydWN0IHVmc19jeWxpbmRlcl9ncm91cCAqIHVjZzsKIAl1bnNpZ25lZCBvbGRjZywgaSwgaiwgaywgYWxsb2NzaXplOwogCXU2NCByZXN1bHQ7CisJaW50IHJldDsKIAkKIAlVRlNEKCJFTlRFUiwgaW5vICVsdSwgY2dubyAldSwgZ29hbCAlbGx1LCBjb3VudCAldVxuIiwKIAkgICAgIGlub2RlLT5pX2lubywgY2dubywgKHVuc2lnbmVkIGxvbmcgbG9uZylnb2FsLCBjb3VudCk7CkBAIC02NjQsNyArNjY3LDcgQEAKIAkJZm9yIChpID0gY291bnQ7IGkgPCB1c3BpLT5zX2ZwYjsgaSsrKQogCQkJdWJoX3NldGJpdCAoVUNQSV9VQkgodWNwaSksIHVjcGktPmNfZnJlZW9mZiwgZ29hbCArIGkpOwogCQlpID0gdXNwaS0+c19mcGIgLSBjb3VudDsKLQkJdmZzX2RxX2ZyZWVfYmxvY2soaW5vZGUsIGkpOworCQlkcXVvdF9mcmVlX2Jsb2NrKGlub2RlLCBpKTsKIAogCQlmczMyX2FkZChzYiwgJnVjZy0+Y2dfY3MuY3NfbmZmcmVlLCBpKTsKIAkJdXNwaS0+Y3NfdG90YWwuY3NfbmZmcmVlICs9IGk7CkBAIC02NzYsOCArNjc5LDkgQEAKIAlyZXN1bHQgPSB1ZnNfYml0bWFwX3NlYXJjaCAoc2IsIHVjcGksIGdvYWwsIGFsbG9jc2l6ZSk7CiAJaWYgKHJlc3VsdCA9PSBJTlZCTE9DSykKIAkJcmV0dXJuIDA7Ci0JaWYgKHZmc19kcV9hbGxvY19ibG9jayhpbm9kZSwgY291bnQpKSB7Ci0JCSplcnIgPSAtRURRVU9UOworCXJldCA9IGRxdW90X2FsbG9jX2Jsb2NrKGlub2RlLCBjb3VudCk7CisJaWYgKHJldCkgeworCQkqZXJyID0gcmV0OwogCQlyZXR1cm4gMDsKIAl9CiAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCkBAIC03MTQsNiArNzE4LDcgQEAKIAlzdHJ1Y3QgdWZzX3N1cGVyX2Jsb2NrX2ZpcnN0ICogdXNiMTsKIAlzdHJ1Y3QgdWZzX2N5bGluZGVyX2dyb3VwICogdWNnOwogCXU2NCByZXN1bHQsIGJsa25vOworCWludCByZXQ7CiAKIAlVRlNEKCJFTlRFUiwgZ29hbCAlbGx1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWdvYWwpOwogCkBAIC03NDcsOCArNzUyLDkgQEAKIAl1YmhfY2xyYmxvY2sgKFVDUElfVUJIKHVjcGkpLCB1Y3BpLT5jX2ZyZWVvZmYsIGJsa25vKTsKIAlpZiAoKFVGU19TQihzYiktPnNfZmxhZ3MgJiBVRlNfQ0dfTUFTSykgPT0gVUZTX0NHXzQ0QlNEKQogCQl1ZnNfY2x1c3RlcmFjY3QgKHNiLCB1Y3BpLCBibGtubywgLTEpOwotCWlmICh2ZnNfZHFfYWxsb2NfYmxvY2soaW5vZGUsIHVzcGktPnNfZnBiKSkgewotCQkqZXJyID0gLUVEUVVPVDsKKwlyZXQgPSBkcXVvdF9hbGxvY19ibG9jayhpbm9kZSwgdXNwaS0+c19mcGIpOworCWlmIChyZXQpIHsKKwkJKmVyciA9IHJldDsKIAkJcmV0dXJuIElOVkJMT0NLOwogCX0KIApkaWZmIC0tZ2l0IGEvZnMvdWZzL2Rpci5jIGIvZnMvdWZzL2Rpci5jCmluZGV4IDIyYWY2OGYuLjMxN2EwZDQgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9kaXIuYworKysgYi9mcy91ZnMvZGlyLmMKQEAgLTMxLDcgKzMxLDcgQEAKICAqIGxlbiA8PSBVRlNfTUFYTkFNTEVOIGFuZCBkZSAhPSBOVUxMIGFyZSBndWFyYW50ZWVkIGJ5IGNhbGxlci4KICAqLwogc3RhdGljIGlubGluZSBpbnQgdWZzX21hdGNoKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBsZW4sCi0JCWNvbnN0IGNoYXIgKiBjb25zdCBuYW1lLCBzdHJ1Y3QgdWZzX2Rpcl9lbnRyeSAqIGRlKQorCQljb25zdCB1bnNpZ25lZCBjaGFyICpuYW1lLCBzdHJ1Y3QgdWZzX2Rpcl9lbnRyeSAqZGUpCiB7CiAJaWYgKGxlbiAhPSB1ZnNfZ2V0X2RlX25hbWxlbihzYiwgZGUpKQogCQlyZXR1cm4gMDsKQEAgLTcwLDcgKzcwLDcgQEAKIAlyZXR1cm4gKGlub2RlLT5pX3NpemUrUEFHRV9DQUNIRV9TSVpFLTEpPj5QQUdFX0NBQ0hFX1NISUZUOwogfQogCi1pbm9fdCB1ZnNfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHFzdHIgKnFzdHIpCitpbm9fdCB1ZnNfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgaW5vZGUgKmRpciwgY29uc3Qgc3RydWN0IHFzdHIgKnFzdHIpCiB7CiAJaW5vX3QgcmVzID0gMDsKIAlzdHJ1Y3QgdWZzX2Rpcl9lbnRyeSAqZGU7CkBAIC0yNDksMTEgKzI0OSwxMSBAQAogICogKGFzIGEgcGFyYW1ldGVyIC0gcmVzX2RpcikuIFBhZ2UgaXMgcmV0dXJuZWQgbWFwcGVkIGFuZCB1bmxvY2tlZC4KICAqIEVudHJ5IGlzIGd1YXJhbnRlZWQgdG8gYmUgdmFsaWQuCiAgKi8KLXN0cnVjdCB1ZnNfZGlyX2VudHJ5ICp1ZnNfZmluZF9lbnRyeShzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IHFzdHIgKnFzdHIsCitzdHJ1Y3QgdWZzX2Rpcl9lbnRyeSAqdWZzX2ZpbmRfZW50cnkoc3RydWN0IGlub2RlICpkaXIsIGNvbnN0IHN0cnVjdCBxc3RyICpxc3RyLAogCQkJCSAgICAgc3RydWN0IHBhZ2UgKipyZXNfcGFnZSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLT5pX3NiOwotCWNvbnN0IGNoYXIgKm5hbWUgPSBxc3RyLT5uYW1lOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUgPSBxc3RyLT5uYW1lOwogCWludCBuYW1lbGVuID0gcXN0ci0+bGVuOwogCXVuc2lnbmVkIHJlY2xlbiA9IFVGU19ESVJfUkVDX0xFTihuYW1lbGVuKTsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBuOwpAQCAtMzEzLDcgKzMxMyw3IEBACiBpbnQgdWZzX2FkZF9saW5rKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmRpciA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGU7Ci0JY29uc3QgY2hhciAqbmFtZSA9IGRlbnRyeS0+ZF9uYW1lLm5hbWU7CisJY29uc3QgdW5zaWduZWQgY2hhciAqbmFtZSA9IGRlbnRyeS0+ZF9uYW1lLm5hbWU7CiAJaW50IG5hbWVsZW4gPSBkZW50cnktPmRfbmFtZS5sZW47CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGRpci0+aV9zYjsKIAl1bnNpZ25lZCByZWNsZW4gPSBVRlNfRElSX1JFQ19MRU4obmFtZWxlbik7CmRpZmYgLS1naXQgYS9mcy91ZnMvZmlsZS5jIGIvZnMvdWZzL2ZpbGUuYwppbmRleCA3MzY1NWM2Li5hODk2MmNlIDEwMDY0NAotLS0gYS9mcy91ZnMvZmlsZS5jCisrKyBiL2ZzL3Vmcy9maWxlLmMKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgogCiAjaW5jbHVkZSAidWZzX2ZzLmgiCiAjaW5jbHVkZSAidWZzLmgiCkBAIC00MCw3ICs0MSw3IEBACiAJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCiAJLmFpb193cml0ZQk9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUsCiAJLm1tYXAJCT0gZ2VuZXJpY19maWxlX21tYXAsCi0JLm9wZW4gICAgICAgICAgID0gZ2VuZXJpY19maWxlX29wZW4sCisJLm9wZW4gICAgICAgICAgID0gZHF1b3RfZmlsZV9vcGVuLAogCS5mc3luYwkJPSBzaW1wbGVfZnN5bmMsCiAJLnNwbGljZV9yZWFkCT0gZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkLAogfTsKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9pYWxsb2MuYyBiL2ZzL3Vmcy9pYWxsb2MuYwppbmRleCAzNTI3YzAwLi4yMzBlY2Y2IDEwMDY0NAotLS0gYS9mcy91ZnMvaWFsbG9jLmMKKysrIGIvZnMvdWZzL2lhbGxvYy5jCkBAIC05NSw4ICs5NSw4IEBACiAKIAlpc19kaXJlY3RvcnkgPSBTX0lTRElSKGlub2RlLT5pX21vZGUpOwogCi0JdmZzX2RxX2ZyZWVfaW5vZGUoaW5vZGUpOwotCXZmc19kcV9kcm9wKGlub2RlKTsKKwlkcXVvdF9mcmVlX2lub2RlKGlub2RlKTsKKwlkcXVvdF9kcm9wKGlub2RlKTsKIAogCWNsZWFyX2lub2RlIChpbm9kZSk7CiAKQEAgLTM1NSw5ICszNTUsMTAgQEAKIAogCXVubG9ja19zdXBlciAoc2IpOwogCi0JaWYgKHZmc19kcV9hbGxvY19pbm9kZShpbm9kZSkpIHsKLQkJdmZzX2RxX2Ryb3AoaW5vZGUpOwotCQllcnIgPSAtRURRVU9UOworCWRxdW90X2luaXRpYWxpemUoaW5vZGUpOworCWVyciA9IGRxdW90X2FsbG9jX2lub2RlKGlub2RlKTsKKwlpZiAoZXJyKSB7CisJCWRxdW90X2Ryb3AoaW5vZGUpOwogCQlnb3RvIGZhaWxfd2l0aG91dF91bmxvY2s7CiAJfQogCmRpZmYgLS1naXQgYS9mcy91ZnMvaW5vZGUuYyBiL2ZzL3Vmcy9pbm9kZS5jCmluZGV4IDdjZjMzMzcuLjgwYjY4YzMgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9pbm9kZS5jCisrKyBiL2ZzL3Vmcy9pbm9kZS5jCkBAIC0zNiw2ICszNiw4IEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CisjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KIAogI2luY2x1ZGUgInVmc19mcy5oIgogI2luY2x1ZGUgInVmcy5oIgpAQCAtODkwLDExICs4OTIsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IHVmc193cml0ZV9pbm9kZSAoc3RydWN0IGlub2RlICogaW5vZGUsIGludCB3YWl0KQoraW50IHVmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlpbnQgcmV0OwogCWxvY2tfa2VybmVsKCk7Ci0JcmV0ID0gdWZzX3VwZGF0ZV9pbm9kZSAoaW5vZGUsIHdhaXQpOworCXJldCA9IHVmc191cGRhdGVfaW5vZGUoaW5vZGUsIHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTkwOCw2ICs5MTAsOSBAQAogewogCWxvZmZfdCBvbGRfaV9zaXplOwogCisJaWYgKCFpc19iYWRfaW5vZGUoaW5vZGUpKQorCQlkcXVvdF9pbml0aWFsaXplKGlub2RlKTsKKwogCXRydW5jYXRlX2lub2RlX3BhZ2VzKCZpbm9kZS0+aV9kYXRhLCAwKTsKIAlpZiAoaXNfYmFkX2lub2RlKGlub2RlKSkKIAkJZ290byBub19kZWxldGU7CmRpZmYgLS1naXQgYS9mcy91ZnMvbmFtZWkuYyBiL2ZzL3Vmcy9uYW1laS5jCmluZGV4IDRjMjZkOWUuLjExODU1NjIgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9uYW1laS5jCisrKyBiL2ZzL3Vmcy9uYW1laS5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgogCiAjaW5jbHVkZSAidWZzX2ZzLmgiCiAjaW5jbHVkZSAidWZzLmgiCkBAIC04NCw2ICs4NSw5IEBACiAJaW50IGVycjsKIAogCVVGU0QoIkJFR0lOXG4iKTsKKworCWRxdW90X2luaXRpYWxpemUoZGlyKTsKKwogCWlub2RlID0gdWZzX25ld19pbm9kZShkaXIsIG1vZGUpOwogCWVyciA9IFBUUl9FUlIoaW5vZGUpOwogCkBAIC0xMDcsNiArMTExLDkgQEAKIAogCWlmICghb2xkX3ZhbGlkX2RldihyZGV2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CisKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CisKIAlpbm9kZSA9IHVmc19uZXdfaW5vZGUoZGlyLCBtb2RlKTsKIAllcnIgPSBQVFJfRVJSKGlub2RlKTsKIAlpZiAoIUlTX0VSUihpbm9kZSkpIHsKQEAgLTEzMSw2ICsxMzgsOCBAQAogCWlmIChsID4gc2ItPnNfYmxvY2tzaXplKQogCQlnb3RvIG91dF9ub3Rsb2NrZWQ7CiAKKwlkcXVvdF9pbml0aWFsaXplKGRpcik7CisKIAlsb2NrX2tlcm5lbCgpOwogCWlub2RlID0gdWZzX25ld19pbm9kZShkaXIsIFNfSUZMTksgfCBTX0lSV1hVR08pOwogCWVyciA9IFBUUl9FUlIoaW5vZGUpOwpAQCAtMTc2LDYgKzE4NSw4IEBACiAJCXJldHVybiAtRU1MSU5LOwogCX0KIAorCWRxdW90X2luaXRpYWxpemUoZGlyKTsKKwogCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAlpbm9kZV9pbmNfbGlua19jb3VudChpbm9kZSk7CiAJYXRvbWljX2luYygmaW5vZGUtPmlfY291bnQpOwpAQCAtMTkzLDYgKzIwNCw4IEBACiAJaWYgKGRpci0+aV9ubGluayA+PSBVRlNfTElOS19NQVgpCiAJCWdvdG8gb3V0OwogCisJZHF1b3RfaW5pdGlhbGl6ZShkaXIpOworCiAJbG9ja19rZXJuZWwoKTsKIAlpbm9kZV9pbmNfbGlua19jb3VudChkaXIpOwogCkBAIC0yMzcsNiArMjUwLDggQEAKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlpbnQgZXJyID0gLUVOT0VOVDsKIAorCWRxdW90X2luaXRpYWxpemUoZGlyKTsKKwogCWRlID0gdWZzX2ZpbmRfZW50cnkoZGlyLCAmZGVudHJ5LT5kX25hbWUsICZwYWdlKTsKIAlpZiAoIWRlKQogCQlnb3RvIG91dDsKQEAgLTI4MSw2ICsyOTYsOSBAQAogCXN0cnVjdCB1ZnNfZGlyX2VudHJ5ICpvbGRfZGU7CiAJaW50IGVyciA9IC1FTk9FTlQ7CiAKKwlkcXVvdF9pbml0aWFsaXplKG9sZF9kaXIpOworCWRxdW90X2luaXRpYWxpemUobmV3X2Rpcik7CisKIAlvbGRfZGUgPSB1ZnNfZmluZF9lbnRyeShvbGRfZGlyLCAmb2xkX2RlbnRyeS0+ZF9uYW1lLCAmb2xkX3BhZ2UpOwogCWlmICghb2xkX2RlKQogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9zdXBlci5jIGIvZnMvdWZzL3N1cGVyLmMKaW5kZXggMTQzYzIwYi4uMTQ3NDNkOSAxMDA2NDQKLS0tIGEvZnMvdWZzL3N1cGVyLmMKKysrIGIvZnMvdWZzL3N1cGVyLmMKQEAgLTEwMTYsNiArMTAxNiw5IEBACiAJCWNhc2UgVUZTX0ZTU1RBQkxFOgogCQkJVUZTRCgiZnMgaXMgc3RhYmxlXG4iKTsKIAkJCWJyZWFrOworCQljYXNlIFVGU19GU0xPRzoKKwkJCVVGU0QoImZzIGlzIGxvZ2dpbmcgZnNcbiIpOworCQkJYnJlYWs7CiAJCWNhc2UgVUZTX0ZTT1NGMToKIAkJCVVGU0QoImZzIGlzIERFQyBPU0YvMVxuIik7CiAJCQlicmVhazsKQEAgLTE0MzIsNiArMTQzNSwxMSBAQAogCWttZW1fY2FjaGVfZGVzdHJveSh1ZnNfaW5vZGVfY2FjaGVwKTsKIH0KIAorc3RhdGljIHZvaWQgdWZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJZHF1b3RfZHJvcChpbm9kZSk7Cit9CisKICNpZmRlZiBDT05GSUdfUVVPVEEKIHN0YXRpYyBzc2l6ZV90IHVmc19xdW90YV9yZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIGNoYXIgKixzaXplX3QsIGxvZmZfdCk7CiBzdGF0aWMgc3NpemVfdCB1ZnNfcXVvdGFfd3JpdGUoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgY29uc3QgY2hhciAqLCBzaXplX3QsIGxvZmZfdCk7CkBAIC0xNDQyLDYgKzE0NTAsNyBAQAogCS5kZXN0cm95X2lub2RlCT0gdWZzX2Rlc3Ryb3lfaW5vZGUsCiAJLndyaXRlX2lub2RlCT0gdWZzX3dyaXRlX2lub2RlLAogCS5kZWxldGVfaW5vZGUJPSB1ZnNfZGVsZXRlX2lub2RlLAorCS5jbGVhcl9pbm9kZQk9IHVmc19jbGVhcl9pbm9kZSwKIAkucHV0X3N1cGVyCT0gdWZzX3B1dF9zdXBlciwKIAkud3JpdGVfc3VwZXIJPSB1ZnNfd3JpdGVfc3VwZXIsCiAJLnN5bmNfZnMJPSB1ZnNfc3luY19mcywKZGlmZiAtLWdpdCBhL2ZzL3Vmcy90cnVuY2F0ZS5jIGIvZnMvdWZzL3RydW5jYXRlLmMKaW5kZXggNDFkZDQzMS4uZDNiNjI3MCAxMDA2NDQKLS0tIGEvZnMvdWZzL3RydW5jYXRlLmMKKysrIGIvZnMvdWZzL3RydW5jYXRlLmMKQEAgLTQ0LDYgKzQ0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KIAogI2luY2x1ZGUgInVmc19mcy5oIgogI2luY2x1ZGUgInVmcy5oIgpAQCAtNTE3LDkgKzUxOCwxOCBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCisJaWYgKChpYV92YWxpZCAmIEFUVFJfVUlEICYmIGF0dHItPmlhX3VpZCAhPSBpbm9kZS0+aV91aWQpIHx8CisJICAgIChpYV92YWxpZCAmIEFUVFJfR0lEICYmIGF0dHItPmlhX2dpZCAhPSBpbm9kZS0+aV9naWQpKSB7CisJCWVycm9yID0gZHF1b3RfdHJhbnNmZXIoaW5vZGUsIGF0dHIpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisJfQogCWlmIChpYV92YWxpZCAmIEFUVFJfU0laRSAmJgogCSAgICBhdHRyLT5pYV9zaXplICE9IGlfc2l6ZV9yZWFkKGlub2RlKSkgewogCQlsb2ZmX3Qgb2xkX2lfc2l6ZSA9IGlub2RlLT5pX3NpemU7CisKKwkJZHF1b3RfaW5pdGlhbGl6ZShpbm9kZSk7CisKIAkJZXJyb3IgPSB2bXRydW5jYXRlKGlub2RlLCBhdHRyLT5pYV9zaXplKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwpkaWZmIC0tZ2l0IGEvZnMvdWZzL3Vmcy5oIGIvZnMvdWZzL3Vmcy5oCmluZGV4IDBiNGMzOWIuLjQzZjlmNWQgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy91ZnMuaAorKysgYi9mcy91ZnMvdWZzLmgKQEAgLTg2LDkgKzg2LDkgQEAKIC8qIGRpci5jICovCiBleHRlcm4gY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogZXh0ZXJuIGludCB1ZnNfYWRkX2xpbmsgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGlub2RlICopOwotZXh0ZXJuIGlub190IHVmc19pbm9kZV9ieV9uYW1lKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcXN0ciAqKTsKK2V4dGVybiBpbm9fdCB1ZnNfaW5vZGVfYnlfbmFtZShzdHJ1Y3QgaW5vZGUgKiwgY29uc3Qgc3RydWN0IHFzdHIgKik7CiBleHRlcm4gaW50IHVmc19tYWtlX2VtcHR5KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKik7Ci1leHRlcm4gc3RydWN0IHVmc19kaXJfZW50cnkgKnVmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcXN0ciAqLCBzdHJ1Y3QgcGFnZSAqKik7CitleHRlcm4gc3RydWN0IHVmc19kaXJfZW50cnkgKnVmc19maW5kX2VudHJ5KHN0cnVjdCBpbm9kZSAqLCBjb25zdCBzdHJ1Y3QgcXN0ciAqLCBzdHJ1Y3QgcGFnZSAqKik7CiBleHRlcm4gaW50IHVmc19kZWxldGVfZW50cnkoc3RydWN0IGlub2RlICosIHN0cnVjdCB1ZnNfZGlyX2VudHJ5ICosIHN0cnVjdCBwYWdlICopOwogZXh0ZXJuIGludCB1ZnNfZW1wdHlfZGlyIChzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gc3RydWN0IHVmc19kaXJfZW50cnkgKnVmc19kb3Rkb3Qoc3RydWN0IGlub2RlICosIHN0cnVjdCBwYWdlICoqKTsKQEAgLTEwNiw3ICsxMDYsNyBAQAogCiAvKiBpbm9kZS5jICovCiBleHRlcm4gc3RydWN0IGlub2RlICp1ZnNfaWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gaW50IHVmc193cml0ZV9pbm9kZSAoc3RydWN0IGlub2RlICosIGludCk7CitleHRlcm4gaW50IHVmc193cml0ZV9pbm9kZSAoc3RydWN0IGlub2RlICosIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqKTsKIGV4dGVybiBpbnQgdWZzX3N5bmNfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiB2b2lkIHVmc19kZWxldGVfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiB1ZnNfYnJlYWQgKHN0cnVjdCBpbm9kZSAqLCB1bnNpZ25lZCwgaW50LCBpbnQgKik7CmRpZmYgLS1naXQgYS9mcy91ZnMvdWZzX2ZzLmggYi9mcy91ZnMvdWZzX2ZzLmgKaW5kZXggNTRiZGUxOC4uNjk0M2VjNiAxMDA2NDQKLS0tIGEvZnMvdWZzL3Vmc19mcy5oCisrKyBiL2ZzL3Vmcy91ZnNfZnMuaApAQCAtMTM4LDYgKzEzOCw3IEBACiAKICNkZWZpbmUgVUZTX1VTRUVGVCAgKChfX3UxNik2NTUzNSkKIAorLyogZnNfY2xlYW4gdmFsdWVzICovCiAjZGVmaW5lIFVGU19GU09LICAgICAgMHg3YzI2OWQzOAogI2RlZmluZSBVRlNfRlNBQ1RJVkUgICgoX19zOCkweDAwKQogI2RlZmluZSBVRlNfRlNDTEVBTiAgICgoX19zOCkweDAxKQpAQCAtMTQ1LDYgKzE0NiwxMSBAQAogI2RlZmluZSBVRlNfRlNPU0YxICAgICgoX19zOCkweDAzKQkvKiBpcyB0aGlzIGNvcnJlY3QgZm9yIERFQyBPU0YvMT8gKi8KICNkZWZpbmUgVUZTX0ZTQkFEICAgICAoKF9fczgpMHhmZikKIAorLyogU29sYXJpcy1zcGVjaWZpYyBmc19jbGVhbiB2YWx1ZXMgKi8KKyNkZWZpbmUgVUZTX0ZTU1VTUEVORCAoKF9fczgpMHhmZSkJLyogdGVtcG9yYXJpbHkgc3VzcGVuZGVkICovCisjZGVmaW5lIFVGU19GU0xPRyAgICAgKChfX3M4KTB4ZmQpCS8qIGxvZ2dpbmcgZnMgKi8KKyNkZWZpbmUgVUZTX0ZTRklYICAgICAoKF9fczgpMHhmYykJLyogYmVpbmcgcmVwYWlyZWQgd2hpbGUgbW91bnRlZCAqLworCiAvKiBGcm9tIGhlcmUgdG8gbmV4dCBibGFuayBsaW5lLCBzX2ZsYWdzIGZvciB1ZnNfc2JfaW5mbyAqLwogLyogZGlyZWN0b3J5IGVudHJ5IGVuY29kaW5nICovCiAjZGVmaW5lIFVGU19ERV9NQVNLCQkweDAwMDAwMDEwCS8qIG1hc2sgZm9yIHRoZSBmb2xsb3dpbmcgKi8KQEAgLTIyNywxMSArMjMzLDE2IEBACiAgKi8KICNkZWZpbmUgdWZzX2NidG9jeWxubyhibm8pIFwKIAkoKGJubykgKiB1c3BpLT5zX25zcGYgLyB1c3BpLT5zX3NwYykKLSNkZWZpbmUgdWZzX2NidG9ycG9zKGJubykgXAorI2RlZmluZSB1ZnNfY2J0b3Jwb3MoYm5vKQkJCQkgICAgICBcCisJKChVRlNfU0Ioc2IpLT5zX2ZsYWdzICYgVUZTX0NHX1NVTikgPwkJICAgICAgXAorCSAoKCgoKGJubykgKiB1c3BpLT5zX25zcGYgJSB1c3BpLT5zX3NwYykgJQkgICAgICBcCisJICAgIHVzcGktPnNfbnNlY3QpICoJCQkJICAgICAgXAorCSAgIHVzcGktPnNfbnJwb3MpIC8gdXNwaS0+c19uc2VjdCkJCSAgICAgIFwKKwkgOgkJCQkJCSAgICAgIFwKIAkoKCgoYm5vKSAqIHVzcGktPnNfbnNwZiAlIHVzcGktPnNfc3BjIC8gdXNwaS0+c19uc2VjdCBcCiAJKiB1c3BpLT5zX3RyYWNrc2tldyArIChibm8pICogdXNwaS0+c19uc3BmICUgdXNwaS0+c19zcGMgXAogCSUgdXNwaS0+c19uc2VjdCAqIHVzcGktPnNfaW50ZXJsZWF2ZSkgJSB1c3BpLT5zX25zZWN0IFwKLQkqIHVzcGktPnNfbnJwb3MpIC8gdXNwaS0+c19ucHNlY3QpCisJICAqIHVzcGktPnNfbnJwb3MpIC8gdXNwaS0+c19ucHNlY3QpKQogCiAvKgogICogVGhlIGZvbGxvd2luZyBtYWNyb3Mgb3B0aW1pemUgY2VydGFpbiBmcmVxdWVudGx5IGNhbGN1bGF0ZWQKZGlmZiAtLWdpdCBhL2ZzL3hmcy9NYWtlZmlsZSBiL2ZzL3hmcy9NYWtlZmlsZQppbmRleCA1YzVhMzY2Li5iNDc2OWU0IDEwMDY0NAotLS0gYS9mcy94ZnMvTWFrZWZpbGUKKysrIGIvZnMveGZzL01ha2VmaWxlCkBAIC0xMDUsNyArMTA1LDYgQEAKIAkJCQkgICB4ZnNfZ2xvYmFscy5vIFwKIAkJCQkgICB4ZnNfaW9jdGwubyBcCiAJCQkJICAgeGZzX2lvcHMubyBcCi0JCQkJICAgeGZzX2xydy5vIFwKIAkJCQkgICB4ZnNfc3VwZXIubyBcCiAJCQkJICAgeGZzX3N5bmMubyBcCiAJCQkJICAgeGZzX3hhdHRyLm8pCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKaW5kZXggNjZhYmUzNi4uOTA4MzM1NyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYwpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgInhmc19pb21hcC5oIgogI2luY2x1ZGUgInhmc192bm9kZW9wcy5oIgogI2luY2x1ZGUgInhmc190cmFjZS5oIgorI2luY2x1ZGUgInhmc19ibWFwLmgiCiAjaW5jbHVkZSA8bGludXgvbXBhZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CkBAIC0xNjMsMTQgKzE2NCwxNyBAQAogfQogCiAvKgotICogVXBkYXRlIG9uLWRpc2sgZmlsZSBzaXplIG5vdyB0aGF0IGRhdGEgaGFzIGJlZW4gd3JpdHRlbiB0byBkaXNrLgotICogVGhlIGN1cnJlbnQgaW4tbWVtb3J5IGZpbGUgc2l6ZSBpcyBpX3NpemUuICBJZiBhIHdyaXRlIGlzIGJleW9uZAotICogZW9mIGlfbmV3X3NpemUgd2lsbCBiZSB0aGUgaW50ZW5kZWQgZmlsZSBzaXplIHVudGlsIGlfc2l6ZSBpcwotICogdXBkYXRlZC4gIElmIHRoaXMgd3JpdGUgZG9lcyBub3QgZXh0ZW5kIGFsbCB0aGUgd2F5IHRvIHRoZSB2YWxpZAotICogZmlsZSBzaXplIHRoZW4gcmVzdHJpY3QgdGhpcyB1cGRhdGUgdG8gdGhlIGVuZCBvZiB0aGUgd3JpdGUuCisgKiBVcGRhdGUgb24tZGlzayBmaWxlIHNpemUgbm93IHRoYXQgZGF0YSBoYXMgYmVlbiB3cml0dGVuIHRvIGRpc2suICBUaGUKKyAqIGN1cnJlbnQgaW4tbWVtb3J5IGZpbGUgc2l6ZSBpcyBpX3NpemUuICBJZiBhIHdyaXRlIGlzIGJleW9uZCBlb2YgaV9uZXdfc2l6ZQorICogd2lsbCBiZSB0aGUgaW50ZW5kZWQgZmlsZSBzaXplIHVudGlsIGlfc2l6ZSBpcyB1cGRhdGVkLiAgSWYgdGhpcyB3cml0ZSBkb2VzCisgKiBub3QgZXh0ZW5kIGFsbCB0aGUgd2F5IHRvIHRoZSB2YWxpZCBmaWxlIHNpemUgdGhlbiByZXN0cmljdCB0aGlzIHVwZGF0ZSB0bworICogdGhlIGVuZCBvZiB0aGUgd3JpdGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBibG9jayBhcyBibG9ja2luZyBvbiB0aGUgaW5vZGUgbG9jayBpbiBJTyBjb21wbGV0aW9uCisgKiBjYW4gbGVhZCB0byBJTyBjb21wbGV0aW9uIG9yZGVyIGRlcGVuZGVuY3kgZGVhZGxvY2tzLi4gSWYgaXQgY2FuJ3QgZ2V0IHRoZQorICogaW5vZGUgaWxvY2sgaXQgd2lsbCByZXR1cm4gRUFHQUlOLiBDYWxsZXJzIG11c3QgaGFuZGxlIHRoaXMuCiAgKi8KLQotU1RBVElDIHZvaWQKK1NUQVRJQyBpbnQKIHhmc19zZXRmaWxlc2l6ZSgKIAl4ZnNfaW9lbmRfdAkJKmlvZW5kKQogewpAQCAtMTgxLDUwICsxODUsMTkgQEAKIAlBU1NFUlQoaW9lbmQtPmlvX3R5cGUgIT0gSU9NQVBfUkVBRCk7CiAKIAlpZiAodW5saWtlbHkoaW9lbmQtPmlvX2Vycm9yKSkKLQkJcmV0dXJuOworCQlyZXR1cm4gMDsKIAotCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCWlmICgheGZzX2lsb2NrX25vd2FpdChpcCwgWEZTX0lMT0NLX0VYQ0wpKQorCQlyZXR1cm4gRUFHQUlOOworCiAJaXNpemUgPSB4ZnNfaW9lbmRfbmV3X2VvZihpb2VuZCk7CiAJaWYgKGlzaXplKSB7CiAJCWlwLT5pX2QuZGlfc2l6ZSA9IGlzaXplOwotCQl4ZnNfbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlwKTsKKwkJeGZzX21hcmtfaW5vZGVfZGlydHkoaXApOwogCX0KIAogCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci19Ci0KLS8qCi0gKiBJTyB3cml0ZSBjb21wbGV0aW9uLgotICovCi1TVEFUSUMgdm9pZAoteGZzX2VuZF9pbygKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3QJKndvcmspCi17Ci0JeGZzX2lvZW5kX3QJCSppb2VuZCA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCB4ZnNfaW9lbmRfdCwgaW9fd29yayk7Ci0Jc3RydWN0IHhmc19pbm9kZQkqaXAgPSBYRlNfSShpb2VuZC0+aW9faW5vZGUpOwotCi0JLyoKLQkgKiBGb3IgdW53cml0dGVuIGV4dGVudHMgd2UgbmVlZCB0byBpc3N1ZSB0cmFuc2FjdGlvbnMgdG8gY29udmVydCBhCi0JICogcmFuZ2UgdG8gbm9ybWFsIHdyaXR0ZW4gZXh0ZW5zIGFmdGVyIHRoZSBkYXRhIEkvTyBoYXMgZmluaXNoZWQuCi0JICovCi0JaWYgKGlvZW5kLT5pb190eXBlID09IElPTUFQX1VOV1JJVFRFTiAmJgotCSAgICBsaWtlbHkoIWlvZW5kLT5pb19lcnJvciAmJiAhWEZTX0ZPUkNFRF9TSFVURE9XTihpcC0+aV9tb3VudCkpKSB7Ci0JCWludCBlcnJvcjsKLQotCQllcnJvciA9IHhmc19pb21hcF93cml0ZV91bndyaXR0ZW4oaXAsIGlvZW5kLT5pb19vZmZzZXQsCi0JCQkJCQkgaW9lbmQtPmlvX3NpemUpOwotCQlpZiAoZXJyb3IpCi0JCQlpb2VuZC0+aW9fZXJyb3IgPSBlcnJvcjsKLQl9Ci0KLQkvKgotCSAqIFdlIG1pZ2h0IGhhdmUgdG8gdXBkYXRlIHRoZSBvbi1kaXNrIGZpbGUgc2l6ZSBhZnRlciBleHRlbmRpbmcKLQkgKiB3cml0ZXMuCi0JICovCi0JaWYgKGlvZW5kLT5pb190eXBlICE9IElPTUFQX1JFQUQpCi0JCXhmc19zZXRmaWxlc2l6ZShpb2VuZCk7Ci0JeGZzX2Rlc3Ryb3lfaW9lbmQoaW9lbmQpOworCXJldHVybiAwOwogfQogCiAvKgpAQCAtMjQ5LDYgKzIyMiw1MyBAQAogfQogCiAvKgorICogSU8gd3JpdGUgY29tcGxldGlvbi4KKyAqLworU1RBVElDIHZvaWQKK3hmc19lbmRfaW8oCisJc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXhmc19pb2VuZF90CSppb2VuZCA9IGNvbnRhaW5lcl9vZih3b3JrLCB4ZnNfaW9lbmRfdCwgaW9fd29yayk7CisJc3RydWN0IHhmc19pbm9kZSAqaXAgPSBYRlNfSShpb2VuZC0+aW9faW5vZGUpOworCWludAkJZXJyb3IgPSAwOworCisJLyoKKwkgKiBGb3IgdW53cml0dGVuIGV4dGVudHMgd2UgbmVlZCB0byBpc3N1ZSB0cmFuc2FjdGlvbnMgdG8gY29udmVydCBhCisJICogcmFuZ2UgdG8gbm9ybWFsIHdyaXR0ZW4gZXh0ZW5zIGFmdGVyIHRoZSBkYXRhIEkvTyBoYXMgZmluaXNoZWQuCisJICovCisJaWYgKGlvZW5kLT5pb190eXBlID09IElPTUFQX1VOV1JJVFRFTiAmJgorCSAgICBsaWtlbHkoIWlvZW5kLT5pb19lcnJvciAmJiAhWEZTX0ZPUkNFRF9TSFVURE9XTihpcC0+aV9tb3VudCkpKSB7CisKKwkJZXJyb3IgPSB4ZnNfaW9tYXBfd3JpdGVfdW53cml0dGVuKGlwLCBpb2VuZC0+aW9fb2Zmc2V0LAorCQkJCQkJIGlvZW5kLT5pb19zaXplKTsKKwkJaWYgKGVycm9yKQorCQkJaW9lbmQtPmlvX2Vycm9yID0gZXJyb3I7CisJfQorCisJLyoKKwkgKiBXZSBtaWdodCBoYXZlIHRvIHVwZGF0ZSB0aGUgb24tZGlzayBmaWxlIHNpemUgYWZ0ZXIgZXh0ZW5kaW5nCisJICogd3JpdGVzLgorCSAqLworCWlmIChpb2VuZC0+aW9fdHlwZSAhPSBJT01BUF9SRUFEKSB7CisJCWVycm9yID0geGZzX3NldGZpbGVzaXplKGlvZW5kKTsKKwkJQVNTRVJUKCFlcnJvciB8fCBlcnJvciA9PSBFQUdBSU4pOworCX0KKworCS8qCisJICogSWYgd2UgZGlkbid0IGNvbXBsZXRlIHByb2Nlc3Npbmcgb2YgdGhlIGlvZW5kLCByZXF1ZXVlIGl0IHRvIHRoZQorCSAqIHRhaWwgb2YgdGhlIHdvcmtxdWV1ZSBmb3IgYW5vdGhlciBhdHRlbXB0IGxhdGVyLiBPdGhlcndpc2UgZGVzdHJveQorCSAqIGl0LgorCSAqLworCWlmIChlcnJvciA9PSBFQUdBSU4pIHsKKwkJYXRvbWljX2luYygmaW9lbmQtPmlvX3JlbWFpbmluZyk7CisJCXhmc19maW5pc2hfaW9lbmQoaW9lbmQsIDApOworCQkvKiBlbnN1cmUgd2UgZG9uJ3Qgc3BpbiBvbiBibG9ja2VkIGlvZW5kcyAqLworCQlkZWxheSgxKTsKKwl9IGVsc2UKKwkJeGZzX2Rlc3Ryb3lfaW9lbmQoaW9lbmQpOworfQorCisvKgogICogQWxsb2NhdGUgYW5kIGluaXRpYWxpc2UgYW4gSU8gY29tcGxldGlvbiBzdHJ1Y3R1cmUuCiAgKiBXZSBuZWVkIHRvIHRyYWNrIHVud3JpdHRlbiBleHRlbnQgd3JpdGUgY29tcGxldGlvbiBoZXJlIGluaXRpYWxseS4KICAqIFdlJ2xsIG5lZWQgdG8gZXh0ZW5kIHRoaXMgZm9yIHVwZGF0aW5nIHRoZSBvbmRpc2sgaW5vZGUgc2l6ZSBsYXRlcgpAQCAtMzQxLDcgKzM2MSw3IEBACiAJICogYnV0IGRvbid0IHVwZGF0ZSB0aGUgaW5vZGUgc2l6ZSB1bnRpbCBJL08gY29tcGxldGlvbi4KIAkgKi8KIAlpZiAoeGZzX2lvZW5kX25ld19lb2YoaW9lbmQpKQotCQl4ZnNfbWFya19pbm9kZV9kaXJ0eV9zeW5jKFhGU19JKGlvZW5kLT5pb19pbm9kZSkpOworCQl4ZnNfbWFya19pbm9kZV9kaXJ0eShYRlNfSShpb2VuZC0+aW9faW5vZGUpKTsKIAogCXN1Ym1pdF9iaW8od2JjLT5zeW5jX21vZGUgPT0gV0JfU1lOQ19BTEwgPwogCQkgICBXUklURV9TWU5DX1BMVUcgOiBXUklURSwgYmlvKTsKQEAgLTg3NCw2ICs4OTQsMTE4IEBACiAJfQogfQogCitTVEFUSUMgdm9pZAoreGZzX3ZtX2ludmFsaWRhdGVwYWdlKAorCXN0cnVjdCBwYWdlCQkqcGFnZSwKKwl1bnNpZ25lZCBsb25nCQlvZmZzZXQpCit7CisJdHJhY2VfeGZzX2ludmFsaWRhdGVwYWdlKHBhZ2UtPm1hcHBpbmctPmhvc3QsIHBhZ2UsIG9mZnNldCk7CisJYmxvY2tfaW52YWxpZGF0ZXBhZ2UocGFnZSwgb2Zmc2V0KTsKK30KKworLyoKKyAqIElmIHRoZSBwYWdlIGhhcyBkZWxhbGxvYyBidWZmZXJzIG9uIGl0LCB3ZSBuZWVkIHRvIHB1bmNoIHRoZW0gb3V0IGJlZm9yZSB3ZQorICogaW52YWxpZGF0ZSB0aGUgcGFnZS4gSWYgd2UgZG9uJ3QsIHdlIGxlYXZlIGEgc3RhbGUgZGVsYWxsb2MgbWFwcGluZyBvbiB0aGUKKyAqIGlub2RlIHRoYXQgY2FuIHRyaXAgYSBCVUcoKSBpbiB4ZnNfZ2V0X2Jsb2NrcygpIGxhdGVyIG9uIGlmIGEgZGlyZWN0IElPIHJlYWQKKyAqIGlzIGRvbmUgb24gdGhhdCBzYW1lIHJlZ2lvbiAtIHRoZSBkZWxhbGxvYyBleHRlbnQgaXMgcmV0dXJuZWQgd2hlbiBub25lIGlzCisgKiBzdXBwb3NlZCB0byBiZSB0aGVyZS4KKyAqCisgKiBXZSBwcmV2ZW50IHRoaXMgYnkgdHJ1bmNhdGluZyBhd2F5IHRoZSBkZWxhbGxvYyByZWdpb25zIG9uIHRoZSBwYWdlIGJlZm9yZQorICogaW52YWxpZGF0aW5nIGl0LiBCZWNhdXNlIHRoZXkgYXJlIGRlbGFsbG9jLCB3ZSBjYW4gZG8gdGhpcyB3aXRob3V0IG5lZWRpbmcgYQorICogdHJhbnNhY3Rpb24uIEluZGVlZCAtIGlmIHdlIGdldCBFTk9TUEMgZXJyb3JzLCB3ZSBoYXZlIHRvIGJlIGFibGUgdG8gZG8gdGhpcworICogdHJ1bmNhdGlvbiB3aXRob3V0IGEgdHJhbnNhY3Rpb24gYXMgdGhlcmUgaXMgbm8gc3BhY2UgbGVmdCBmb3IgYmxvY2sKKyAqIHJlc2VydmF0aW9uICh0eXBpY2FsbHkgd2h5IHdlIHNlZSBhIEVOT1NQQyBpbiB3cml0ZWJhY2spLgorICoKKyAqIFRoaXMgaXMgbm90IGEgcGVyZm9ybWFuY2UgY3JpdGljYWwgcGF0aCwgc28gZm9yIG5vdyBqdXN0IGRvIHRoZSBwdW5jaGluZyBhCisgKiBidWZmZXIgaGVhZCBhdCBhIHRpbWUuCisgKi8KK1NUQVRJQyB2b2lkCit4ZnNfYW9wc19kaXNjYXJkX3BhZ2UoCisJc3RydWN0IHBhZ2UJCSpwYWdlKQoreworCXN0cnVjdCBpbm9kZQkJKmlub2RlID0gcGFnZS0+bWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQJKmJoLCAqaGVhZDsKKwlsb2ZmX3QJCQlvZmZzZXQgPSBwYWdlX29mZnNldChwYWdlKTsKKwlzc2l6ZV90CQkJbGVuID0gMSA8PCBpbm9kZS0+aV9ibGtiaXRzOworCisJaWYgKCF4ZnNfaXNfZGVsYXllZF9wYWdlKHBhZ2UsIElPTUFQX0RFTEFZKSkKKwkJZ290byBvdXRfaW52YWxpZGF0ZTsKKworCXhmc19mc19jbW5fZXJyKENFX0FMRVJULCBpcC0+aV9tb3VudCwKKwkJInBhZ2UgZGlzY2FyZCBvbiBwYWdlICVwLCBpbm9kZSAweCVsbHgsIG9mZnNldCAlbGx1LiIsCisJCQlwYWdlLCBpcC0+aV9pbm8sIG9mZnNldCk7CisKKwl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKwliaCA9IGhlYWQgPSBwYWdlX2J1ZmZlcnMocGFnZSk7CisJZG8geworCQlpbnQJCWRvbmU7CisJCXhmc19maWxlb2ZmX3QJb2Zmc2V0X2ZzYjsKKwkJeGZzX2JtYnRfaXJlY190CWltYXA7CisJCWludAkJbmltYXBzID0gMTsKKwkJaW50CQllcnJvcjsKKwkJeGZzX2ZzYmxvY2tfdAlmaXJzdGJsb2NrOworCQl4ZnNfYm1hcF9mcmVlX3QgZmxpc3Q7CisKKwkJaWYgKCFidWZmZXJfZGVsYXkoYmgpKQorCQkJZ290byBuZXh0X2J1ZmZlcjsKKworCQlvZmZzZXRfZnNiID0gWEZTX0JfVE9fRlNCVChpcC0+aV9tb3VudCwgb2Zmc2V0KTsKKworCQkvKgorCQkgKiBNYXAgdGhlIHJhbmdlIGZpcnN0IGFuZCBjaGVjayB0aGF0IGl0IGlzIGEgZGVsYWxsb2MgZXh0ZW50CisJCSAqIGJlZm9yZSB0cnlpbmcgdG8gdW5tYXAgdGhlIHJhbmdlLiBPdGhlcndpc2Ugd2Ugd2lsbCBiZQorCQkgKiB0cnlpbmcgdG8gcmVtb3ZlIGEgcmVhbCBleHRlbnQgKHdoaWNoIHJlcXVpcmVzIGEKKwkJICogdHJhbnNhY3Rpb24pIG9yIGEgaG9sZSwgd2hpY2ggaXMgcHJvYmFibHkgYSBiYWQgaWRlYS4uLgorCQkgKi8KKwkJZXJyb3IgPSB4ZnNfYm1hcGkoTlVMTCwgaXAsIG9mZnNldF9mc2IsIDEsCisJCQkJWEZTX0JNQVBJX0VOVElSRSwgIE5VTEwsIDAsICZpbWFwLAorCQkJCSZuaW1hcHMsIE5VTEwsIE5VTEwpOworCisJCWlmIChlcnJvcikgeworCQkJLyogc29tZXRoaW5nIHNjcmV3ZWQsIGp1c3QgYmFpbCAqLworCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIGlwLT5pX21vdW50LAorCQkJInBhZ2UgZGlzY2FyZCBmYWlsZWQgZGVsYWxsb2MgbWFwcGluZyBsb29rdXAuIik7CisJCQlicmVhazsKKwkJfQorCQlpZiAoIW5pbWFwcykgeworCQkJLyogbm90aGluZyB0aGVyZSAqLworCQkJZ290byBuZXh0X2J1ZmZlcjsKKwkJfQorCQlpZiAoaW1hcC5icl9zdGFydGJsb2NrICE9IERFTEFZU1RBUlRCTE9DSykgeworCQkJLyogYmVlbiBjb252ZXJ0ZWQsIGlnbm9yZSAqLworCQkJZ290byBuZXh0X2J1ZmZlcjsKKwkJfQorCQlXQVJOX09OKGltYXAuYnJfYmxvY2tjb3VudCA9PSAwKTsKKworCQkvKgorCQkgKiBOb3RlOiB3aGlsZSB3ZSBpbml0aWFsaXNlIHRoZSBmaXJzdGJsb2NrL2ZsaXN0IHBhaXIsIHRoZXkKKwkJICogc2hvdWxkIG5ldmVyIGJlIHVzZWQgYmVjYXVzZSBibG9ja3Mgc2hvdWxkIG5ldmVyIGJlCisJCSAqIGFsbG9jYXRlZCBvciBmcmVlZCBmb3IgYSBkZWxhbGxvYyBleHRlbnQgYW5kIGhlbmNlIHdlIG5lZWQKKwkJICogZG9uJ3QgY2FuY2VsIG9yIGZpbmlzaCB0aGVtIGFmdGVyIHRoZSB4ZnNfYnVubWFwaSgpIGNhbGwuCisJCSAqLworCQl4ZnNfYm1hcF9pbml0KCZmbGlzdCwgJmZpcnN0YmxvY2spOworCQllcnJvciA9IHhmc19idW5tYXBpKE5VTEwsIGlwLCBvZmZzZXRfZnNiLCAxLCAwLCAxLCAmZmlyc3RibG9jaywKKwkJCQkJJmZsaXN0LCBOVUxMLCAmZG9uZSk7CisKKwkJQVNTRVJUKCFmbGlzdC54YmZfY291bnQgJiYgIWZsaXN0LnhiZl9maXJzdCk7CisJCWlmIChlcnJvcikgeworCQkJLyogc29tZXRoaW5nIHNjcmV3ZWQsIGp1c3QgYmFpbCAqLworCQkJeGZzX2ZzX2Ntbl9lcnIoQ0VfQUxFUlQsIGlwLT5pX21vdW50LAorCQkJInBhZ2UgZGlzY2FyZCB1bmFibGUgdG8gcmVtb3ZlIGRlbGFsbG9jIG1hcHBpbmcuIik7CisJCQlicmVhazsKKwkJfQorbmV4dF9idWZmZXI6CisJCW9mZnNldCArPSBsZW47CisKKwl9IHdoaWxlICgoYmggPSBiaC0+Yl90aGlzX3BhZ2UpICE9IGhlYWQpOworCisJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKK291dF9pbnZhbGlkYXRlOgorCXhmc192bV9pbnZhbGlkYXRlcGFnZShwYWdlLCAwKTsKKwlyZXR1cm47Cit9CisKIC8qCiAgKiBDYWxsaW5nIHRoaXMgd2l0aG91dCBzdGFydGlvIHNldCBtZWFucyB3ZSBhcmUgYmVpbmcgYXNrZWQgdG8gbWFrZSBhIGRpcnR5CiAgKiBwYWdlIHJlYWR5IGZvciBmcmVlaW5nIGl0J3MgYnVmZmVycy4gIFdoZW4gY2FsbGVkIHdpdGggc3RhcnRpbyBzZXQgdGhlbgpAQCAtMTEyNSw3ICsxMjU3LDcgQEAKIAkgKi8KIAlpZiAoZXJyICE9IC1FQUdBSU4pIHsKIAkJaWYgKCF1bm1hcHBlZCkKLQkJCWJsb2NrX2ludmFsaWRhdGVwYWdlKHBhZ2UsIDApOworCQkJeGZzX2FvcHNfZGlzY2FyZF9wYWdlKHBhZ2UpOwogCQlDbGVhclBhZ2VVcHRvZGF0ZShwYWdlKTsKIAl9CiAJcmV0dXJuIGVycjsKQEAgLTE1MzUsMTUgKzE2NjcsNiBAQAogCXJldHVybiBtcGFnZV9yZWFkcGFnZXMobWFwcGluZywgcGFnZXMsIG5yX3BhZ2VzLCB4ZnNfZ2V0X2Jsb2Nrcyk7CiB9CiAKLVNUQVRJQyB2b2lkCi14ZnNfdm1faW52YWxpZGF0ZXBhZ2UoCi0Jc3RydWN0IHBhZ2UJCSpwYWdlLAotCXVuc2lnbmVkIGxvbmcJCW9mZnNldCkKLXsKLQl0cmFjZV94ZnNfaW52YWxpZGF0ZXBhZ2UocGFnZS0+bWFwcGluZy0+aG9zdCwgcGFnZSwgb2Zmc2V0KTsKLQlibG9ja19pbnZhbGlkYXRlcGFnZShwYWdlLCBvZmZzZXQpOwotfQotCiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHhmc19hZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgPSB7CiAJLnJlYWRwYWdlCQk9IHhmc192bV9yZWFkcGFnZSwKIAkucmVhZHBhZ2VzCQk9IHhmc192bV9yZWFkcGFnZXMsCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19leHBvcnQuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2V4cG9ydC5jCmluZGV4IDg3YjhjYmQuLjg0NmI3NWEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2V4cG9ydC5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2V4cG9ydC5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAieGZzX3Zub2Rlb3BzLmgiCiAjaW5jbHVkZSAieGZzX2JtYXBfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfaW5vZGUuaCIKKyNpbmNsdWRlICJ4ZnNfaW5vZGVfaXRlbS5oIgogCiAvKgogICogTm90ZSB0aGF0IHdlIG9ubHkgYWNjZXB0IGZpbGVpZHMgd2hpY2ggYXJlIGxvbmcgZW5vdWdoIHJhdGhlciB0aGFuIGFsbG93CkBAIC0yMTUsOSArMjE2LDI4IEBACiAJcmV0dXJuIGRfb2J0YWluX2FsaWFzKFZGU19JKGNpcCkpOwogfQogCitTVEFUSUMgaW50Cit4ZnNfZnNfbmZzX2NvbW1pdF9tZXRhZGF0YSgKKwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSkKK3sKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLT5pX21vdW50OworCWludAkJCWVycm9yID0gMDsKKworCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CisJaWYgKHhmc19pcGluY291bnQoaXApKSB7CisJCWVycm9yID0gX3hmc19sb2dfZm9yY2VfbHNuKG1wLCBpcC0+aV9pdGVtcC0+aWxpX2xhc3RfbHNuLAorCQkJCVhGU19MT0dfU1lOQywgTlVMTCk7CisJfQorCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKKworCXJldHVybiBlcnJvcjsKK30KKwogY29uc3Qgc3RydWN0IGV4cG9ydF9vcGVyYXRpb25zIHhmc19leHBvcnRfb3BlcmF0aW9ucyA9IHsKIAkuZW5jb2RlX2ZoCQk9IHhmc19mc19lbmNvZGVfZmgsCiAJLmZoX3RvX2RlbnRyeQkJPSB4ZnNfZnNfZmhfdG9fZGVudHJ5LAogCS5maF90b19wYXJlbnQJCT0geGZzX2ZzX2ZoX3RvX3BhcmVudCwKIAkuZ2V0X3BhcmVudAkJPSB4ZnNfZnNfZ2V0X3BhcmVudCwKKwkuY29tbWl0X21ldGFkYXRhCT0geGZzX2ZzX25mc19jb21taXRfbWV0YWRhdGEsCiB9OwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCmluZGV4IGU0Y2FlYjIuLjQyZGQzYmMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKQEAgLTE2LDYgKzE2LDcgQEAKICAqIEluYy4sICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQogICovCiAjaW5jbHVkZSAieGZzLmgiCisjaW5jbHVkZSAieGZzX2ZzLmgiCiAjaW5jbHVkZSAieGZzX2JpdC5oIgogI2luY2x1ZGUgInhmc19sb2cuaCIKICNpbmNsdWRlICJ4ZnNfaW51bS5oIgpAQCAtMzQsNTIgKzM1LDI3OSBAQAogI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCiAjaW5jbHVkZSAieGZzX2Rpbm9kZS5oIgogI2luY2x1ZGUgInhmc19pbm9kZS5oIgorI2luY2x1ZGUgInhmc19pbm9kZV9pdGVtLmgiCisjaW5jbHVkZSAieGZzX2JtYXAuaCIKICNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKICNpbmNsdWRlICJ4ZnNfcncuaCIKICNpbmNsdWRlICJ4ZnNfdm5vZGVvcHMuaCIKICNpbmNsdWRlICJ4ZnNfZGFfYnRyZWUuaCIKICNpbmNsdWRlICJ4ZnNfaW9jdGwuaCIKKyNpbmNsdWRlICJ4ZnNfdHJhY2UuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2RjYWNoZS5oPgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHhmc19maWxlX3ZtX29wczsKIAotU1RBVElDIHNzaXplX3QKLXhmc19maWxlX2Fpb19yZWFkKAotCXN0cnVjdCBraW9jYgkJKmlvY2IsCi0JY29uc3Qgc3RydWN0IGlvdmVjCSppb3YsCi0JdW5zaWduZWQgbG9uZwkJbnJfc2VncywKLQlsb2ZmX3QJCQlwb3MpCisvKgorICoJeGZzX2lvemVybworICoKKyAqCXhmc19pb3plcm8gY2xlYXJzIHRoZSBzcGVjaWZpZWQgcmFuZ2Ugb2YgYnVmZmVyIHN1cHBsaWVkLAorICoJYW5kIG1hcmtzIGFsbCB0aGUgYWZmZWN0ZWQgYmxvY2tzIGFzIHZhbGlkIGFuZCBtb2RpZmllZC4gIElmCisgKglhbiBhZmZlY3RlZCBibG9jayBpcyBub3QgYWxsb2NhdGVkLCBpdCB3aWxsIGJlIGFsbG9jYXRlZC4gIElmCisgKglhbiBhZmZlY3RlZCBibG9jayBpcyBub3QgY29tcGxldGVseSBvdmVyd3JpdHRlbiwgYW5kIGlzIG5vdAorICoJdmFsaWQgYmVmb3JlIHRoZSBvcGVyYXRpb24sIGl0IHdpbGwgYmUgcmVhZCBmcm9tIGRpc2sgYmVmb3JlCisgKgliZWluZyBwYXJ0aWFsbHkgemVyb2VkLgorICovCitTVEFUSUMgaW50Cit4ZnNfaW96ZXJvKAorCXN0cnVjdCB4ZnNfaW5vZGUJKmlwLAkvKiBpbm9kZQkJCSovCisJbG9mZl90CQkJcG9zLAkvKiBvZmZzZXQgaW4gZmlsZQkJKi8KKwlzaXplX3QJCQljb3VudCkJLyogc2l6ZSBvZiBkYXRhIHRvIHplcm8JCSovCiB7Ci0Jc3RydWN0IGZpbGUJCSpmaWxlID0gaW9jYi0+a2lfZmlscDsKLQlpbnQJCQlpb2ZsYWdzID0gMDsKKwlzdHJ1Y3QgcGFnZQkJKnBhZ2U7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UJKm1hcHBpbmc7CisJaW50CQkJc3RhdHVzOwogCi0JQlVHX09OKGlvY2ItPmtpX3BvcyAhPSBwb3MpOwotCWlmICh1bmxpa2VseShmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpKQotCQlpb2ZsYWdzIHw9IElPX0lTRElSRUNUOwotCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9OT0NNVElNRSkKLQkJaW9mbGFncyB8PSBJT19JTlZJUzsKLQlyZXR1cm4geGZzX3JlYWQoWEZTX0koZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSksIGlvY2IsIGlvdiwKLQkJCQlucl9zZWdzLCAmaW9jYi0+a2lfcG9zLCBpb2ZsYWdzKTsKKwltYXBwaW5nID0gVkZTX0koaXApLT5pX21hcHBpbmc7CisJZG8geworCQl1bnNpZ25lZCBvZmZzZXQsIGJ5dGVzOworCQl2b2lkICpmc2RhdGE7CisKKwkJb2Zmc2V0ID0gKHBvcyAmIChQQUdFX0NBQ0hFX1NJWkUgLTEpKTsgLyogV2l0aGluIHBhZ2UgKi8KKwkJYnl0ZXMgPSBQQUdFX0NBQ0hFX1NJWkUgLSBvZmZzZXQ7CisJCWlmIChieXRlcyA+IGNvdW50KQorCQkJYnl0ZXMgPSBjb3VudDsKKworCQlzdGF0dXMgPSBwYWdlY2FjaGVfd3JpdGVfYmVnaW4oTlVMTCwgbWFwcGluZywgcG9zLCBieXRlcywKKwkJCQkJQU9QX0ZMQUdfVU5JTlRFUlJVUFRJQkxFLAorCQkJCQkmcGFnZSwgJmZzZGF0YSk7CisJCWlmIChzdGF0dXMpCisJCQlicmVhazsKKworCQl6ZXJvX3VzZXIocGFnZSwgb2Zmc2V0LCBieXRlcyk7CisKKwkJc3RhdHVzID0gcGFnZWNhY2hlX3dyaXRlX2VuZChOVUxMLCBtYXBwaW5nLCBwb3MsIGJ5dGVzLCBieXRlcywKKwkJCQkJcGFnZSwgZnNkYXRhKTsKKwkJV0FSTl9PTihzdGF0dXMgPD0gMCk7IC8qIGNhbid0IHJldHVybiBsZXNzIHRoYW4gemVybyEgKi8KKwkJcG9zICs9IGJ5dGVzOworCQljb3VudCAtPSBieXRlczsKKwkJc3RhdHVzID0gMDsKKwl9IHdoaWxlIChjb3VudCk7CisKKwlyZXR1cm4gKC1zdGF0dXMpOworfQorCitTVEFUSUMgaW50Cit4ZnNfZmlsZV9mc3luYygKKwlzdHJ1Y3QgZmlsZQkJKmZpbGUsCisJc3RydWN0IGRlbnRyeQkJKmRlbnRyeSwKKwlpbnQJCQlkYXRhc3luYykKK3sKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGRlbnRyeS0+ZF9pbm9kZSk7CisJc3RydWN0IHhmc190cmFucwkqdHA7CisJaW50CQkJZXJyb3IgPSAwOworCWludAkJCWxvZ19mbHVzaGVkID0gMDsKKworCXhmc19pdHJhY2VfZW50cnkoaXApOworCisJaWYgKFhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKQorCQlyZXR1cm4gLVhGU19FUlJPUihFSU8pOworCisJeGZzX2lmbGFnc19jbGVhcihpcCwgWEZTX0lUUlVOQ0FURUQpOworCisJLyoKKwkgKiBXZSBhbHdheXMgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgcmVxdWlyZWQgaW5vZGUgc3RhdGUgaXMgc2FmZSBvbgorCSAqIGRpc2suICBUaGUgaW5vZGUgbWlnaHQgYmUgY2xlYW4gYnV0IHdlIHN0aWxsIG1pZ2h0IG5lZWQgdG8gZm9yY2UgdGhlCisJICogbG9nIGJlY2F1c2Ugb2YgY29tbWl0dGVkIHRyYW5zYWN0aW9ucyB0aGF0IGhhdmVuJ3QgaGl0IHRoZSBkaXNrIHlldC4KKwkgKiBMaWtld2lzZSwgdGhlcmUgY291bGQgYmUgdW5mbHVzaGVkIG5vbi10cmFuc2FjdGlvbmFsIGNoYW5nZXMgdG8gdGhlCisJICogaW5vZGUgY29yZSB0aGF0IGhhdmUgdG8gZ28gdG8gZGlzayBhbmQgdGhpcyByZXF1aXJlcyB1cyB0byBpc3N1ZQorCSAqIGEgc3luY2hyb25vdXMgdHJhbnNhY3Rpb24gdG8gY2FwdHVyZSB0aGVzZSBjaGFuZ2VzIGNvcnJlY3RseS4KKwkgKgorCSAqIFRoaXMgY29kZSByZWxpZXMgb24gdGhlIGFzc3VtcHRpb24gdGhhdCBpZiB0aGUgaV91cGRhdGVfY29yZSBmaWVsZAorCSAqIG9mIHRoZSBpbm9kZSBpcyBjbGVhciBhbmQgdGhlIGlub2RlIGlzIHVucGlubmVkIHRoZW4gaXQgaXMgY2xlYW4KKwkgKiBhbmQgbm8gYWN0aW9uIGlzIHJlcXVpcmVkLgorCSAqLworCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7CisKKwkvKgorCSAqIEZpcnN0IGNoZWNrIGlmIHRoZSBWRlMgaW5vZGUgaXMgbWFya2VkIGRpcnR5LiAgQWxsIHRoZSBkaXJ0eWluZworCSAqIG9mIG5vbi10cmFuc2FjdGlvbmFsIHVwZGF0ZXMgbm8gZ29lcyB0aHJvdWdoIG1hcmtfaW5vZGVfZGlydHkqLAorCSAqIHdoaWNoIGFsbG93cyB1cyB0byBkaXN0aW5ndWlzaCBiZXRlZWVuIHB1cmUgdGltZXN0YW1wIHVwZGF0ZXMKKwkgKiBhbmQgaV9zaXplIHVwZGF0ZXMgd2hpY2ggbmVlZCB0byBiZSBjYXVnaHQgZm9yIGZkYXRhc3luYy4KKwkgKiBBZnRlciB0aGF0IGFsc28gdGhlY2sgZm9yIHRoZSBkaXJ0eSBzdGF0ZSBpbiB0aGUgWEZTIGlub2RlLCB3aGljaAorCSAqIG1pZ2h0IGdldHMgY2xlYXJlZCB3aGVuIHRoZSBpbm9kZSBnZXRzIHdyaXR0ZW4gb3V0IHZpYSB0aGUgQUlMCisJICogb3IgeGZzX2lmbHVzaF9jbHVzdGVyLgorCSAqLworCWlmICgoKGRlbnRyeS0+ZF9pbm9kZS0+aV9zdGF0ZSAmIElfRElSVFlfREFUQVNZTkMpIHx8CisJICAgICgoZGVudHJ5LT5kX2lub2RlLT5pX3N0YXRlICYgSV9ESVJUWV9TWU5DKSAmJiAhZGF0YXN5bmMpKSAmJgorCSAgICBpcC0+aV91cGRhdGVfY29yZSkgeworCQkvKgorCQkgKiBLaWNrIG9mZiBhIHRyYW5zYWN0aW9uIHRvIGxvZyB0aGUgaW5vZGUgY29yZSB0byBnZXQgdGhlCisJCSAqIHVwZGF0ZXMuICBUaGUgc3luYyB0cmFuc2FjdGlvbiB3aWxsIGFsc28gZm9yY2UgdGhlIGxvZy4KKwkJICovCisJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKKwkJdHAgPSB4ZnNfdHJhbnNfYWxsb2MoaXAtPmlfbW91bnQsIFhGU19UUkFOU19GU1lOQ19UUyk7CisJCWVycm9yID0geGZzX3RyYW5zX3Jlc2VydmUodHAsIDAsCisJCQkJWEZTX0ZTWU5DX1RTX0xPR19SRVMoaXAtPmlfbW91bnQpLCAwLCAwLCAwKTsKKwkJaWYgKGVycm9yKSB7CisJCQl4ZnNfdHJhbnNfY2FuY2VsKHRwLCAwKTsKKwkJCXJldHVybiAtZXJyb3I7CisJCX0KKwkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisKKwkJLyoKKwkJICogTm90ZSAtIGl0J3MgcG9zc2libGUgdGhhdCB3ZSBtaWdodCBoYXZlIHB1c2hlZCBvdXJzZWx2ZXMgb3V0CisJCSAqIG9mIHRoZSB3YXkgZHVyaW5nIHRyYW5zX3Jlc2VydmUgd2hpY2ggd291bGQgZmx1c2ggdGhlIGlub2RlLgorCQkgKiBCdXQgdGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCB0aGUgaW5vZGUgYnVmZmVyIGhhcyBhY3R1YWxseQorCQkgKiBnb25lIG91dCB5ZXQgKGl0J3MgZGVsd3JpKS4JUGx1cyB0aGUgYnVmZmVyIGNvdWxkIGJlIHBpbm5lZAorCQkgKiBhbnl3YXkgaWYgaXQncyBwYXJ0IG9mIGFuIGlub2RlIGluIGFub3RoZXIgcmVjZW50CisJCSAqIHRyYW5zYWN0aW9uLgkgU28gd2UgcGxheSBpdCBzYWZlIGFuZCBmaXJlIG9mZiB0aGUKKwkJICogdHJhbnNhY3Rpb24gYW55d2F5LgorCQkgKi8KKwkJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpOworCQl4ZnNfdHJhbnNfaWhvbGQodHAsIGlwKTsKKwkJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpOworCQl4ZnNfdHJhbnNfc2V0X3N5bmModHApOworCQllcnJvciA9IF94ZnNfdHJhbnNfY29tbWl0KHRwLCAwLCAmbG9nX2ZsdXNoZWQpOworCisJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGltZXN0YW1wcy9zaXplIGhhdmVuJ3QgY2hhbmdlZCBzaW5jZSBsYXN0IGlub2RlIGZsdXNoIG9yCisJCSAqIGlub2RlIHRyYW5zYWN0aW9uIGNvbW1pdC4gIFRoYXQgbWVhbnMgZWl0aGVyIG5vdGhpbmcgZ290CisJCSAqIHdyaXR0ZW4gb3IgYSB0cmFuc2FjdGlvbiBjb21taXR0ZWQgd2hpY2ggY2F1Z2h0IHRoZSB1cGRhdGVzLgorCQkgKiBJZiB0aGUgbGF0dGVyIGhhcHBlbmVkIGFuZCB0aGUgdHJhbnNhY3Rpb24gaGFzbid0IGhpdCB0aGUKKwkJICogZGlzayB5ZXQsIHRoZSBpbm9kZSB3aWxsIGJlIHN0aWxsIGJlIHBpbm5lZC4gIElmIGl0IGlzLAorCQkgKiBmb3JjZSB0aGUgbG9nLgorCQkgKi8KKwkJaWYgKHhmc19pcGluY291bnQoaXApKSB7CisJCQllcnJvciA9IF94ZnNfbG9nX2ZvcmNlX2xzbihpcC0+aV9tb3VudCwKKwkJCQkJaXAtPmlfaXRlbXAtPmlsaV9sYXN0X2xzbiwKKwkJCQkJWEZTX0xPR19TWU5DLCAmbG9nX2ZsdXNoZWQpOworCQl9CisJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKKwl9CisKKwlpZiAoaXAtPmlfbW91bnQtPm1fZmxhZ3MgJiBYRlNfTU9VTlRfQkFSUklFUikgeworCQkvKgorCQkgKiBJZiB0aGUgbG9nIHdyaXRlIGRpZG4ndCBpc3N1ZSBhbiBvcmRlcmVkIHRhZyB3ZSBuZWVkCisJCSAqIHRvIGZsdXNoIHRoZSBkaXNrIGNhY2hlIGZvciB0aGUgZGF0YSBkZXZpY2Ugbm93LgorCQkgKi8KKwkJaWYgKCFsb2dfZmx1c2hlZCkKKwkJCXhmc19ibGtkZXZfaXNzdWVfZmx1c2goaXAtPmlfbW91bnQtPm1fZGRldl90YXJncCk7CisKKwkJLyoKKwkJICogSWYgdGhpcyBpbm9kZSBpcyBvbiB0aGUgUlQgZGV2IHdlIG5lZWQgdG8gZmx1c2ggdGhhdAorCQkgKiBjYWNoZSBhcyB3ZWxsLgorCQkgKi8KKwkJaWYgKFhGU19JU19SRUFMVElNRV9JTk9ERShpcCkpCisJCQl4ZnNfYmxrZGV2X2lzc3VlX2ZsdXNoKGlwLT5pX21vdW50LT5tX3J0ZGV2X3RhcmdwKTsKKwl9CisKKwlyZXR1cm4gLWVycm9yOwogfQogCiBTVEFUSUMgc3NpemVfdAoteGZzX2ZpbGVfYWlvX3dyaXRlKAoreGZzX2ZpbGVfYWlvX3JlYWQoCiAJc3RydWN0IGtpb2NiCQkqaW9jYiwKLQljb25zdCBzdHJ1Y3QgaW92ZWMJKmlvdiwKKwljb25zdCBzdHJ1Y3QgaW92ZWMJKmlvdnAsCiAJdW5zaWduZWQgbG9uZwkJbnJfc2VncywKIAlsb2ZmX3QJCQlwb3MpCiB7CiAJc3RydWN0IGZpbGUJCSpmaWxlID0gaW9jYi0+a2lfZmlscDsKKwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IGZpbGUtPmZfbWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLT5pX21vdW50OworCXNpemVfdAkJCXNpemUgPSAwOworCXNzaXplX3QJCQlyZXQgPSAwOwogCWludAkJCWlvZmxhZ3MgPSAwOworCXhmc19mc2l6ZV90CQluOworCXVuc2lnbmVkIGxvbmcJCXNlZzsKKworCVhGU19TVEFUU19JTkMoeHNfcmVhZF9jYWxscyk7CiAKIAlCVUdfT04oaW9jYi0+a2lfcG9zICE9IHBvcyk7CisKIAlpZiAodW5saWtlbHkoZmlsZS0+Zl9mbGFncyAmIE9fRElSRUNUKSkKIAkJaW9mbGFncyB8PSBJT19JU0RJUkVDVDsKIAlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfTk9DTVRJTUUpCiAJCWlvZmxhZ3MgfD0gSU9fSU5WSVM7Ci0JcmV0dXJuIHhmc193cml0ZShYRlNfSShmaWxlLT5mX21hcHBpbmctPmhvc3QpLCBpb2NiLCBpb3YsIG5yX3NlZ3MsCi0JCQkJJmlvY2ItPmtpX3BvcywgaW9mbGFncyk7CisKKwkvKiBTVEFSVCBjb3B5ICYgd2FzdGUgZnJvbSBmaWxlbWFwLmMgKi8KKwlmb3IgKHNlZyA9IDA7IHNlZyA8IG5yX3NlZ3M7IHNlZysrKSB7CisJCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaXYgPSAmaW92cFtzZWddOworCisJCS8qCisJCSAqIElmIGFueSBzZWdtZW50IGhhcyBhIG5lZ2F0aXZlIGxlbmd0aCwgb3IgdGhlIGN1bXVsYXRpdmUKKwkJICogbGVuZ3RoIGV2ZXIgd3JhcHMgbmVnYXRpdmUgdGhlbiByZXR1cm4gLUVJTlZBTC4KKwkJICovCisJCXNpemUgKz0gaXYtPmlvdl9sZW47CisJCWlmICh1bmxpa2VseSgoc3NpemVfdCkoc2l6ZXxpdi0+aW92X2xlbikgPCAwKSkKKwkJCXJldHVybiBYRlNfRVJST1IoLUVJTlZBTCk7CisJfQorCS8qIEVORCBjb3B5ICYgd2FzdGUgZnJvbSBmaWxlbWFwLmMgKi8KKworCWlmICh1bmxpa2VseShpb2ZsYWdzICYgSU9fSVNESVJFQ1QpKSB7CisJCXhmc19idWZ0YXJnX3QJKnRhcmdldCA9CisJCQlYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApID8KKwkJCQltcC0+bV9ydGRldl90YXJncCA6IG1wLT5tX2RkZXZfdGFyZ3A7CisJCWlmICgoaW9jYi0+a2lfcG9zICYgdGFyZ2V0LT5idF9zbWFzaykgfHwKKwkJICAgIChzaXplICYgdGFyZ2V0LT5idF9zbWFzaykpIHsKKwkJCWlmIChpb2NiLT5raV9wb3MgPT0gaXAtPmlfc2l6ZSkKKwkJCQlyZXR1cm4gMDsKKwkJCXJldHVybiAtWEZTX0VSUk9SKEVJTlZBTCk7CisJCX0KKwl9CisKKwluID0gWEZTX01BWElPRkZTRVQobXApIC0gaW9jYi0+a2lfcG9zOworCWlmIChuIDw9IDAgfHwgc2l6ZSA9PSAwKQorCQlyZXR1cm4gMDsKKworCWlmIChuIDwgc2l6ZSkKKwkJc2l6ZSA9IG47CisKKwlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihtcCkpCisJCXJldHVybiAtRUlPOworCisJaWYgKHVubGlrZWx5KGlvZmxhZ3MgJiBJT19JU0RJUkVDVCkpCisJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwl4ZnNfaWxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKKworCWlmIChETV9FVkVOVF9FTkFCTEVEKGlwLCBETV9FVkVOVF9SRUFEKSAmJiAhKGlvZmxhZ3MgJiBJT19JTlZJUykpIHsKKwkJaW50IGRtZmxhZ3MgPSBGSUxQX0RFTEFZX0ZMQUcoZmlsZSkgfCBETV9TRU1fRkxBR19SRChpb2ZsYWdzKTsKKwkJaW50IGlvbG9jayA9IFhGU19JT0xPQ0tfU0hBUkVEOworCisJCXJldCA9IC1YRlNfU0VORF9EQVRBKG1wLCBETV9FVkVOVF9SRUFELCBpcCwgaW9jYi0+a2lfcG9zLCBzaXplLAorCQkJCQlkbWZsYWdzLCAmaW9sb2NrKTsKKwkJaWYgKHJldCkgeworCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKKwkJCWlmICh1bmxpa2VseShpb2ZsYWdzICYgSU9fSVNESVJFQ1QpKQorCQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCX0KKworCWlmICh1bmxpa2VseShpb2ZsYWdzICYgSU9fSVNESVJFQ1QpKSB7CisJCWlmIChpbm9kZS0+aV9tYXBwaW5nLT5ucnBhZ2VzKSB7CisJCQlyZXQgPSAteGZzX2ZsdXNoaW52YWxfcGFnZXMoaXAsCisJCQkJCShpb2NiLT5raV9wb3MgJiBQQUdFX0NBQ0hFX01BU0spLAorCQkJCQktMSwgRklfUkVNQVBGX0xPQ0tFRCk7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJCWlmIChyZXQpIHsKKwkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7CisJCQlyZXR1cm4gcmV0OworCQl9CisJfQorCisJdHJhY2VfeGZzX2ZpbGVfcmVhZChpcCwgc2l6ZSwgaW9jYi0+a2lfcG9zLCBpb2ZsYWdzKTsKKworCXJldCA9IGdlbmVyaWNfZmlsZV9haW9fcmVhZChpb2NiLCBpb3ZwLCBucl9zZWdzLCBpb2NiLT5raV9wb3MpOworCWlmIChyZXQgPiAwKQorCQlYRlNfU1RBVFNfQUREKHhzX3JlYWRfYnl0ZXMsIHJldCk7CisKKwl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOworCXJldHVybiByZXQ7CiB9CiAKIFNUQVRJQyBzc2l6ZV90CkBAIC04NywxNiArMzE1LDQ0IEBACiAJc3RydWN0IGZpbGUJCSppbmZpbHAsCiAJbG9mZl90CQkJKnBwb3MsCiAJc3RydWN0IHBpcGVfaW5vZGVfaW5mbwkqcGlwZSwKLQlzaXplX3QJCQlsZW4sCisJc2l6ZV90CQkJY291bnQsCiAJdW5zaWduZWQgaW50CQlmbGFncykKIHsKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGluZmlscC0+Zl9tYXBwaW5nLT5ob3N0KTsKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLT5pX21vdW50OwogCWludAkJCWlvZmxhZ3MgPSAwOworCXNzaXplX3QJCQlyZXQ7CisKKwlYRlNfU1RBVFNfSU5DKHhzX3JlYWRfY2FsbHMpOwogCiAJaWYgKGluZmlscC0+Zl9tb2RlICYgRk1PREVfTk9DTVRJTUUpCiAJCWlvZmxhZ3MgfD0gSU9fSU5WSVM7CiAKLQlyZXR1cm4geGZzX3NwbGljZV9yZWFkKFhGU19JKGluZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSksCi0JCQkJICAgaW5maWxwLCBwcG9zLCBwaXBlLCBsZW4sIGZsYWdzLCBpb2ZsYWdzKTsKKwlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihpcC0+aV9tb3VudCkpCisJCXJldHVybiAtRUlPOworCisJeGZzX2lsb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7CisKKwlpZiAoRE1fRVZFTlRfRU5BQkxFRChpcCwgRE1fRVZFTlRfUkVBRCkgJiYgIShpb2ZsYWdzICYgSU9fSU5WSVMpKSB7CisJCWludCBpb2xvY2sgPSBYRlNfSU9MT0NLX1NIQVJFRDsKKwkJaW50IGVycm9yOworCisJCWVycm9yID0gWEZTX1NFTkRfREFUQShtcCwgRE1fRVZFTlRfUkVBRCwgaXAsICpwcG9zLCBjb3VudCwKKwkJCQkJRklMUF9ERUxBWV9GTEFHKGluZmlscCksICZpb2xvY2spOworCQlpZiAoZXJyb3IpIHsKKwkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX1NIQVJFRCk7CisJCQlyZXR1cm4gLWVycm9yOworCQl9CisJfQorCisJdHJhY2VfeGZzX2ZpbGVfc3BsaWNlX3JlYWQoaXAsIGNvdW50LCAqcHBvcywgaW9mbGFncyk7CisKKwlyZXQgPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3JlYWQoaW5maWxwLCBwcG9zLCBwaXBlLCBjb3VudCwgZmxhZ3MpOworCWlmIChyZXQgPiAwKQorCQlYRlNfU1RBVFNfQUREKHhzX3JlYWRfYnl0ZXMsIHJldCk7CisKKwl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOworCXJldHVybiByZXQ7CiB9CiAKIFNUQVRJQyBzc2l6ZV90CkBAIC0xMDQsMTYgKzM2MCw1MzggQEAKIAlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvCSpwaXBlLAogCXN0cnVjdCBmaWxlCQkqb3V0ZmlscCwKIAlsb2ZmX3QJCQkqcHBvcywKLQlzaXplX3QJCQlsZW4sCisJc2l6ZV90CQkJY291bnQsCiAJdW5zaWduZWQgaW50CQlmbGFncykKIHsKKwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IG91dGZpbHAtPmZfbWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLT5pX21vdW50OworCXhmc19mc2l6ZV90CQlpc2l6ZSwgbmV3X3NpemU7CiAJaW50CQkJaW9mbGFncyA9IDA7CisJc3NpemVfdAkJCXJldDsKKworCVhGU19TVEFUU19JTkMoeHNfd3JpdGVfY2FsbHMpOwogCiAJaWYgKG91dGZpbHAtPmZfbW9kZSAmIEZNT0RFX05PQ01USU1FKQogCQlpb2ZsYWdzIHw9IElPX0lOVklTOwogCi0JcmV0dXJuIHhmc19zcGxpY2Vfd3JpdGUoWEZTX0kob3V0ZmlscC0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSksCi0JCQkJICAgIHBpcGUsIG91dGZpbHAsIHBwb3MsIGxlbiwgZmxhZ3MsIGlvZmxhZ3MpOworCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKGlwLT5pX21vdW50KSkKKwkJcmV0dXJuIC1FSU87CisKKwl4ZnNfaWxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCk7CisKKwlpZiAoRE1fRVZFTlRfRU5BQkxFRChpcCwgRE1fRVZFTlRfV1JJVEUpICYmICEoaW9mbGFncyAmIElPX0lOVklTKSkgeworCQlpbnQgaW9sb2NrID0gWEZTX0lPTE9DS19FWENMOworCQlpbnQgZXJyb3I7CisKKwkJZXJyb3IgPSBYRlNfU0VORF9EQVRBKG1wLCBETV9FVkVOVF9XUklURSwgaXAsICpwcG9zLCBjb3VudCwKKwkJCQkJRklMUF9ERUxBWV9GTEFHKG91dGZpbHApLCAmaW9sb2NrKTsKKwkJaWYgKGVycm9yKSB7CisJCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19FWENMKTsKKwkJCXJldHVybiAtZXJyb3I7CisJCX0KKwl9CisKKwluZXdfc2l6ZSA9ICpwcG9zICsgY291bnQ7CisKKwl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKwlpZiAobmV3X3NpemUgPiBpcC0+aV9zaXplKQorCQlpcC0+aV9uZXdfc2l6ZSA9IG5ld19zaXplOworCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisKKwl0cmFjZV94ZnNfZmlsZV9zcGxpY2Vfd3JpdGUoaXAsIGNvdW50LCAqcHBvcywgaW9mbGFncyk7CisKKwlyZXQgPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlKHBpcGUsIG91dGZpbHAsIHBwb3MsIGNvdW50LCBmbGFncyk7CisJaWYgKHJldCA+IDApCisJCVhGU19TVEFUU19BREQoeHNfd3JpdGVfYnl0ZXMsIHJldCk7CisKKwlpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwlpZiAodW5saWtlbHkocmV0IDwgMCAmJiByZXQgIT0gLUVGQVVMVCAmJiAqcHBvcyA+IGlzaXplKSkKKwkJKnBwb3MgPSBpc2l6ZTsKKworCWlmICgqcHBvcyA+IGlwLT5pX3NpemUpIHsKKwkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJCWlmICgqcHBvcyA+IGlwLT5pX3NpemUpCisJCQlpcC0+aV9zaXplID0gKnBwb3M7CisJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJfQorCisJaWYgKGlwLT5pX25ld19zaXplKSB7CisJCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCQlpcC0+aV9uZXdfc2l6ZSA9IDA7CisJCWlmIChpcC0+aV9kLmRpX3NpemUgPiBpcC0+aV9zaXplKQorCQkJaXAtPmlfZC5kaV9zaXplID0gaXAtPmlfc2l6ZTsKKwkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKwl9CisJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfRVhDTCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gaGFuZGxlIHplcm9pbmcgYW55IHNwYWNlIGluIHRoZSBsYXN0CisgKiBibG9jayBvZiB0aGUgZmlsZSB0aGF0IGlzIGJleW9uZCB0aGUgRU9GLiAgV2UgZG8gdGhpcyBzaW5jZSB0aGUKKyAqIHNpemUgaXMgYmVpbmcgaW5jcmVhc2VkIHdpdGhvdXQgd3JpdGluZyBhbnl0aGluZyB0byB0aGF0IGJsb2NrCisgKiBhbmQgd2UgZG9uJ3Qgd2FudCBhbnlvbmUgdG8gcmVhZCB0aGUgZ2FyYmFnZSBvbiB0aGUgZGlzay4KKyAqLworU1RBVElDIGludAkJCQkvKiBlcnJvciAocG9zaXRpdmUpICovCit4ZnNfemVyb19sYXN0X2Jsb2NrKAorCXhmc19pbm9kZV90CSppcCwKKwl4ZnNfZnNpemVfdAlvZmZzZXQsCisJeGZzX2ZzaXplX3QJaXNpemUpCit7CisJeGZzX2ZpbGVvZmZfdAlsYXN0X2ZzYjsKKwl4ZnNfbW91bnRfdAkqbXAgPSBpcC0+aV9tb3VudDsKKwlpbnQJCW5pbWFwczsKKwlpbnQJCXplcm9fb2Zmc2V0OworCWludAkJemVyb19sZW47CisJaW50CQllcnJvciA9IDA7CisJeGZzX2JtYnRfaXJlY190CWltYXA7CisKKwlBU1NFUlQoeGZzX2lzaWxvY2tlZChpcCwgWEZTX0lMT0NLX0VYQ0wpKTsKKworCXplcm9fb2Zmc2V0ID0gWEZTX0JfRlNCX09GRlNFVChtcCwgaXNpemUpOworCWlmICh6ZXJvX29mZnNldCA9PSAwKSB7CisJCS8qCisJCSAqIFRoZXJlIGFyZSBubyBleHRyYSBieXRlcyBpbiB0aGUgbGFzdCBibG9jayBvbiBkaXNrIHRvCisJCSAqIHplcm8sIHNvIHJldHVybi4KKwkJICovCisJCXJldHVybiAwOworCX0KKworCWxhc3RfZnNiID0gWEZTX0JfVE9fRlNCVChtcCwgaXNpemUpOworCW5pbWFwcyA9IDE7CisJZXJyb3IgPSB4ZnNfYm1hcGkoTlVMTCwgaXAsIGxhc3RfZnNiLCAxLCAwLCBOVUxMLCAwLCAmaW1hcCwKKwkJCSAgJm5pbWFwcywgTlVMTCwgTlVMTCk7CisJaWYgKGVycm9yKSB7CisJCXJldHVybiBlcnJvcjsKKwl9CisJQVNTRVJUKG5pbWFwcyA+IDApOworCS8qCisJICogSWYgdGhlIGJsb2NrIHVuZGVybHlpbmcgaXNpemUgaXMganVzdCBhIGhvbGUsIHRoZW4gdGhlcmUKKwkgKiBpcyBub3RoaW5nIHRvIHplcm8uCisJICovCisJaWYgKGltYXAuYnJfc3RhcnRibG9jayA9PSBIT0xFU1RBUlRCTE9DSykgeworCQlyZXR1cm4gMDsKKwl9CisJLyoKKwkgKiBaZXJvIHRoZSBwYXJ0IG9mIHRoZSBsYXN0IGJsb2NrIGJleW9uZCB0aGUgRU9GLCBhbmQgd3JpdGUgaXQKKwkgKiBvdXQgc3luYy4gIFdlIG5lZWQgdG8gZHJvcCB0aGUgaWxvY2sgd2hpbGUgd2UgZG8gdGhpcyBzbyB3ZQorCSAqIGRvbid0IGRlYWRsb2NrIHdoZW4gdGhlIGJ1ZmZlciBjYWNoZSBjYWxscyBiYWNrIHRvIHVzLgorCSAqLworCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisKKwl6ZXJvX2xlbiA9IG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZSAtIHplcm9fb2Zmc2V0OworCWlmIChpc2l6ZSArIHplcm9fbGVuID4gb2Zmc2V0KQorCQl6ZXJvX2xlbiA9IG9mZnNldCAtIGlzaXplOworCWVycm9yID0geGZzX2lvemVybyhpcCwgaXNpemUsIHplcm9fbGVuKTsKKworCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCUFTU0VSVChlcnJvciA+PSAwKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiBaZXJvIGFueSBvbiBkaXNrIHNwYWNlIGJldHdlZW4gdGhlIGN1cnJlbnQgRU9GIGFuZCB0aGUgbmV3LAorICogbGFyZ2VyIEVPRi4gIFRoaXMgaGFuZGxlcyB0aGUgbm9ybWFsIGNhc2Ugb2YgemVyb2luZyB0aGUgcmVtYWluZGVyCisgKiBvZiB0aGUgbGFzdCBibG9jayBpbiB0aGUgZmlsZSBhbmQgdGhlIHVudXN1YWwgY2FzZSBvZiB6ZXJvaW5nIGJsb2NrcworICogb3V0IGJleW9uZCB0aGUgc2l6ZSBvZiB0aGUgZmlsZS4gIFRoaXMgc2Vjb25kIGNhc2Ugb25seSBoYXBwZW5zCisgKiB3aXRoIGZpeGVkIHNpemUgZXh0ZW50cyBhbmQgd2hlbiB0aGUgc3lzdGVtIGNyYXNoZXMgYmVmb3JlIHRoZSBpbm9kZQorICogc2l6ZSB3YXMgdXBkYXRlZCBidXQgYWZ0ZXIgYmxvY2tzIHdlcmUgYWxsb2NhdGVkLiAgSWYgZmlsbCBpcyBzZXQsCisgKiB0aGVuIGFueSBob2xlcyBpbiB0aGUgcmFuZ2UgYXJlIGZpbGxlZCBhbmQgemVyb2VkLiAgSWYgbm90LCB0aGUgaG9sZXMKKyAqIGFyZSBsZWZ0IGFsb25lIGFzIGhvbGVzLgorICovCisKK2ludAkJCQkJLyogZXJyb3IgKHBvc2l0aXZlKSAqLworeGZzX3plcm9fZW9mKAorCXhmc19pbm9kZV90CSppcCwKKwl4ZnNfb2ZmX3QJb2Zmc2V0LAkJLyogc3RhcnRpbmcgSS9PIG9mZnNldCAqLworCXhmc19mc2l6ZV90CWlzaXplKQkJLyogY3VycmVudCBpbm9kZSBzaXplICovCit7CisJeGZzX21vdW50X3QJKm1wID0gaXAtPmlfbW91bnQ7CisJeGZzX2ZpbGVvZmZfdAlzdGFydF96ZXJvX2ZzYjsKKwl4ZnNfZmlsZW9mZl90CWVuZF96ZXJvX2ZzYjsKKwl4ZnNfZmlsZW9mZl90CXplcm9fY291bnRfZnNiOworCXhmc19maWxlb2ZmX3QJbGFzdF9mc2I7CisJeGZzX2ZpbGVvZmZfdAl6ZXJvX29mZjsKKwl4ZnNfZnNpemVfdAl6ZXJvX2xlbjsKKwlpbnQJCW5pbWFwczsKKwlpbnQJCWVycm9yID0gMDsKKwl4ZnNfYm1idF9pcmVjX3QJaW1hcDsKKworCUFTU0VSVCh4ZnNfaXNpbG9ja2VkKGlwLCBYRlNfSUxPQ0tfRVhDTHxYRlNfSU9MT0NLX0VYQ0wpKTsKKwlBU1NFUlQob2Zmc2V0ID4gaXNpemUpOworCisJLyoKKwkgKiBGaXJzdCBoYW5kbGUgemVyb2luZyB0aGUgYmxvY2sgb24gd2hpY2ggaXNpemUgcmVzaWRlcy4KKwkgKiBXZSBvbmx5IHplcm8gYSBwYXJ0IG9mIHRoYXQgYmxvY2sgc28gaXQgaXMgaGFuZGxlZCBzcGVjaWFsbHkuCisJICovCisJZXJyb3IgPSB4ZnNfemVyb19sYXN0X2Jsb2NrKGlwLCBvZmZzZXQsIGlzaXplKTsKKwlpZiAoZXJyb3IpIHsKKwkJQVNTRVJUKHhmc19pc2lsb2NrZWQoaXAsIFhGU19JTE9DS19FWENMfFhGU19JT0xPQ0tfRVhDTCkpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJLyoKKwkgKiBDYWxjdWxhdGUgdGhlIHJhbmdlIGJldHdlZW4gdGhlIG5ldyBzaXplIGFuZCB0aGUgb2xkCisJICogd2hlcmUgYmxvY2tzIG5lZWRpbmcgdG8gYmUgemVyb2VkIG1heSBleGlzdC4gIFRvIGdldCB0aGUKKwkgKiBibG9jayB3aGVyZSB0aGUgbGFzdCBieXRlIGluIHRoZSBmaWxlIGN1cnJlbnRseSByZXNpZGVzLAorCSAqIHdlIG5lZWQgdG8gc3VidHJhY3Qgb25lIGZyb20gdGhlIHNpemUgYW5kIHRydW5jYXRlIGJhY2sKKwkgKiB0byBhIGJsb2NrIGJvdW5kYXJ5LiAgV2Ugc3VidHJhY3QgMSBpbiBjYXNlIHRoZSBzaXplIGlzCisJICogZXhhY3RseSBvbiBhIGJsb2NrIGJvdW5kYXJ5LgorCSAqLworCWxhc3RfZnNiID0gaXNpemUgPyBYRlNfQl9UT19GU0JUKG1wLCBpc2l6ZSAtIDEpIDogKHhmc19maWxlb2ZmX3QpLTE7CisJc3RhcnRfemVyb19mc2IgPSBYRlNfQl9UT19GU0IobXAsICh4ZnNfdWZzaXplX3QpaXNpemUpOworCWVuZF96ZXJvX2ZzYiA9IFhGU19CX1RPX0ZTQlQobXAsIG9mZnNldCAtIDEpOworCUFTU0VSVCgoeGZzX3NmaWxvZmZfdClsYXN0X2ZzYiA8ICh4ZnNfc2ZpbG9mZl90KXN0YXJ0X3plcm9fZnNiKTsKKwlpZiAobGFzdF9mc2IgPT0gZW5kX3plcm9fZnNiKSB7CisJCS8qCisJCSAqIFRoZSBzaXplIHdhcyBvbmx5IGluY3JlbWVudGVkIG9uIGl0cyBsYXN0IGJsb2NrLgorCQkgKiBXZSB0b29rIGNhcmUgb2YgdGhhdCBhYm92ZSwgc28ganVzdCByZXR1cm4uCisJCSAqLworCQlyZXR1cm4gMDsKKwl9CisKKwlBU1NFUlQoc3RhcnRfemVyb19mc2IgPD0gZW5kX3plcm9fZnNiKTsKKwl3aGlsZSAoc3RhcnRfemVyb19mc2IgPD0gZW5kX3plcm9fZnNiKSB7CisJCW5pbWFwcyA9IDE7CisJCXplcm9fY291bnRfZnNiID0gZW5kX3plcm9fZnNiIC0gc3RhcnRfemVyb19mc2IgKyAxOworCQllcnJvciA9IHhmc19ibWFwaShOVUxMLCBpcCwgc3RhcnRfemVyb19mc2IsIHplcm9fY291bnRfZnNiLAorCQkJCSAgMCwgTlVMTCwgMCwgJmltYXAsICZuaW1hcHMsIE5VTEwsIE5VTEwpOworCQlpZiAoZXJyb3IpIHsKKwkJCUFTU0VSVCh4ZnNfaXNpbG9ja2VkKGlwLCBYRlNfSUxPQ0tfRVhDTHxYRlNfSU9MT0NLX0VYQ0wpKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCQlBU1NFUlQobmltYXBzID4gMCk7CisKKwkJaWYgKGltYXAuYnJfc3RhdGUgPT0gWEZTX0VYVF9VTldSSVRURU4gfHwKKwkJICAgIGltYXAuYnJfc3RhcnRibG9jayA9PSBIT0xFU1RBUlRCTE9DSykgeworCQkJLyoKKwkJCSAqIFRoaXMgbG9vcCBoYW5kbGVzIGluaXRpYWxpemluZyBwYWdlcyB0aGF0IHdlcmUKKwkJCSAqIHBhcnRpYWxseSBpbml0aWFsaXplZCBieSB0aGUgY29kZSBiZWxvdyB0aGlzCisJCQkgKiBsb29wLiBJdCBiYXNpY2FsbHkgemVyb2VzIHRoZSBwYXJ0IG9mIHRoZSBwYWdlCisJCQkgKiB0aGF0IHNpdHMgb24gYSBob2xlIGFuZCBzZXRzIHRoZSBwYWdlIGFzIFBfSE9MRQorCQkJICogYW5kIGNhbGxzIHJlbWFwZiBpZiBpdCBpcyBhIG1hcHBlZCBmaWxlLgorCQkJICovCisJCQlzdGFydF96ZXJvX2ZzYiA9IGltYXAuYnJfc3RhcnRvZmYgKyBpbWFwLmJyX2Jsb2NrY291bnQ7CisJCQlBU1NFUlQoc3RhcnRfemVyb19mc2IgPD0gKGVuZF96ZXJvX2ZzYiArIDEpKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogVGhlcmUgYXJlIGJsb2NrcyB3ZSBuZWVkIHRvIHplcm8uCisJCSAqIERyb3AgdGhlIGlub2RlIGxvY2sgd2hpbGUgd2UncmUgZG9pbmcgdGhlIEkvTy4KKwkJICogV2UnbGwgc3RpbGwgaGF2ZSB0aGUgaW9sb2NrIHRvIHByb3RlY3QgdXMuCisJCSAqLworCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCisJCXplcm9fb2ZmID0gWEZTX0ZTQl9UT19CKG1wLCBzdGFydF96ZXJvX2ZzYik7CisJCXplcm9fbGVuID0gWEZTX0ZTQl9UT19CKG1wLCBpbWFwLmJyX2Jsb2NrY291bnQpOworCisJCWlmICgoemVyb19vZmYgKyB6ZXJvX2xlbikgPiBvZmZzZXQpCisJCQl6ZXJvX2xlbiA9IG9mZnNldCAtIHplcm9fb2ZmOworCisJCWVycm9yID0geGZzX2lvemVybyhpcCwgemVyb19vZmYsIHplcm9fbGVuKTsKKwkJaWYgKGVycm9yKSB7CisJCQlnb3RvIG91dF9sb2NrOworCQl9CisKKwkJc3RhcnRfemVyb19mc2IgPSBpbWFwLmJyX3N0YXJ0b2ZmICsgaW1hcC5icl9ibG9ja2NvdW50OworCQlBU1NFUlQoc3RhcnRfemVyb19mc2IgPD0gKGVuZF96ZXJvX2ZzYiArIDEpKTsKKworCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0X2xvY2s6CisJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJQVNTRVJUKGVycm9yID49IDApOworCXJldHVybiBlcnJvcjsKK30KKworU1RBVElDIHNzaXplX3QKK3hmc19maWxlX2Fpb193cml0ZSgKKwlzdHJ1Y3Qga2lvY2IJCSppb2NiLAorCWNvbnN0IHN0cnVjdCBpb3ZlYwkqaW92cCwKKwl1bnNpZ25lZCBsb25nCQlucl9zZWdzLAorCWxvZmZfdAkJCXBvcykKK3sKKwlzdHJ1Y3QgZmlsZQkJKmZpbGUgPSBpb2NiLT5raV9maWxwOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlCSptYXBwaW5nID0gZmlsZS0+Zl9tYXBwaW5nOworCXN0cnVjdCBpbm9kZQkJKmlub2RlID0gbWFwcGluZy0+aG9zdDsKKwlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKKwlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLT5pX21vdW50OworCXNzaXplX3QJCQlyZXQgPSAwLCBlcnJvciA9IDA7CisJaW50CQkJaW9mbGFncyA9IDA7CisJeGZzX2ZzaXplX3QJCWlzaXplLCBuZXdfc2l6ZTsKKwlpbnQJCQlpb2xvY2s7CisJaW50CQkJZXZlbnRzZW50ID0gMDsKKwlzaXplX3QJCQlvY291bnQgPSAwLCBjb3VudDsKKwlpbnQJCQluZWVkX2lfbXV0ZXg7CisKKwlYRlNfU1RBVFNfSU5DKHhzX3dyaXRlX2NhbGxzKTsKKworCUJVR19PTihpb2NiLT5raV9wb3MgIT0gcG9zKTsKKworCWlmICh1bmxpa2VseShmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpKQorCQlpb2ZsYWdzIHw9IElPX0lTRElSRUNUOworCWlmIChmaWxlLT5mX21vZGUgJiBGTU9ERV9OT0NNVElNRSkKKwkJaW9mbGFncyB8PSBJT19JTlZJUzsKKworCWVycm9yID0gZ2VuZXJpY19zZWdtZW50X2NoZWNrcyhpb3ZwLCAmbnJfc2VncywgJm9jb3VudCwgVkVSSUZZX1JFQUQpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCisJY291bnQgPSBvY291bnQ7CisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJeGZzX3dhaXRfZm9yX2ZyZWV6ZShtcCwgU0JfRlJFRVpFX1dSSVRFKTsKKworCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKKwkJcmV0dXJuIC1FSU87CisKK3JlbG9jazoKKwlpZiAoaW9mbGFncyAmIElPX0lTRElSRUNUKSB7CisJCWlvbG9jayA9IFhGU19JT0xPQ0tfU0hBUkVEOworCQluZWVkX2lfbXV0ZXggPSAwOworCX0gZWxzZSB7CisJCWlvbG9jayA9IFhGU19JT0xPQ0tfRVhDTDsKKwkJbmVlZF9pX211dGV4ID0gMTsKKwkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCX0KKworCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0x8aW9sb2NrKTsKKworc3RhcnQ6CisJZXJyb3IgPSAtZ2VuZXJpY193cml0ZV9jaGVja3MoZmlsZSwgJnBvcywgJmNvdW50LAorCQkJCQlTX0lTQkxLKGlub2RlLT5pX21vZGUpKTsKKwlpZiAoZXJyb3IpIHsKKwkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMfGlvbG9jayk7CisJCWdvdG8gb3V0X3VubG9ja19tdXRleDsKKwl9CisKKwlpZiAoKERNX0VWRU5UX0VOQUJMRUQoaXAsIERNX0VWRU5UX1dSSVRFKSAmJgorCSAgICAhKGlvZmxhZ3MgJiBJT19JTlZJUykgJiYgIWV2ZW50c2VudCkpIHsKKwkJaW50CQlkbWZsYWdzID0gRklMUF9ERUxBWV9GTEFHKGZpbGUpOworCisJCWlmIChuZWVkX2lfbXV0ZXgpCisJCQlkbWZsYWdzIHw9IERNX0ZMQUdTX0lNVVg7CisKKwkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKwkJZXJyb3IgPSBYRlNfU0VORF9EQVRBKGlwLT5pX21vdW50LCBETV9FVkVOVF9XUklURSwgaXAsCisJCQkJICAgICAgcG9zLCBjb3VudCwgZG1mbGFncywgJmlvbG9jayk7CisJCWlmIChlcnJvcikgeworCQkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOworCQl9CisJCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCQlldmVudHNlbnQgPSAxOworCisJCS8qCisJCSAqIFRoZSBpb2xvY2sgd2FzIGRyb3BwZWQgYW5kIHJlYWNxdWlyZWQgaW4gWEZTX1NFTkRfREFUQQorCQkgKiBzbyB3ZSBoYXZlIHRvIHJlY2hlY2sgdGhlIHNpemUgd2hlbiBhcHBlbmRpbmcuCisJCSAqIFdlIHdpbGwgb25seSAiZ290byBzdGFydDsiIG9uY2UsIHNpbmNlIGhhdmluZyBzZW50IHRoZQorCQkgKiBldmVudCBwcmV2ZW50cyBhbm90aGVyIGNhbGwgdG8gWEZTX1NFTkRfREFUQSwgd2hpY2ggaXMKKwkJICogd2hhdCBhbGxvd3MgdGhlIHNpemUgdG8gY2hhbmdlIGluIHRoZSBmaXJzdCBwbGFjZS4KKwkJICovCisJCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSAmJiBwb3MgIT0gaXAtPmlfc2l6ZSkKKwkJCWdvdG8gc3RhcnQ7CisJfQorCisJaWYgKGlvZmxhZ3MgJiBJT19JU0RJUkVDVCkgeworCQl4ZnNfYnVmdGFyZ190CSp0YXJnZXQgPQorCQkJWEZTX0lTX1JFQUxUSU1FX0lOT0RFKGlwKSA/CisJCQkJbXAtPm1fcnRkZXZfdGFyZ3AgOiBtcC0+bV9kZGV2X3RhcmdwOworCisJCWlmICgocG9zICYgdGFyZ2V0LT5idF9zbWFzaykgfHwgKGNvdW50ICYgdGFyZ2V0LT5idF9zbWFzaykpIHsKKwkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTHxpb2xvY2spOworCQkJcmV0dXJuIFhGU19FUlJPUigtRUlOVkFMKTsKKwkJfQorCisJCWlmICghbmVlZF9pX211dGV4ICYmIChtYXBwaW5nLT5ucnBhZ2VzIHx8IHBvcyA+IGlwLT5pX3NpemUpKSB7CisJCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0x8aW9sb2NrKTsKKwkJCWlvbG9jayA9IFhGU19JT0xPQ0tfRVhDTDsKKwkJCW5lZWRfaV9tdXRleCA9IDE7CisJCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMfGlvbG9jayk7CisJCQlnb3RvIHN0YXJ0OworCQl9CisJfQorCisJbmV3X3NpemUgPSBwb3MgKyBjb3VudDsKKwlpZiAobmV3X3NpemUgPiBpcC0+aV9zaXplKQorCQlpcC0+aV9uZXdfc2l6ZSA9IG5ld19zaXplOworCisJaWYgKGxpa2VseSghKGlvZmxhZ3MgJiBJT19JTlZJUykpKQorCQlmaWxlX3VwZGF0ZV90aW1lKGZpbGUpOworCisJLyoKKwkgKiBJZiB0aGUgb2Zmc2V0IGlzIGJleW9uZCB0aGUgc2l6ZSBvZiB0aGUgZmlsZSwgd2UgaGF2ZSBhIGNvdXBsZQorCSAqIG9mIHRoaW5ncyB0byBkby4gRmlyc3QsIGlmIHRoZXJlIGlzIGFscmVhZHkgc3BhY2UgYWxsb2NhdGVkCisJICogd2UgbmVlZCB0byBlaXRoZXIgY3JlYXRlIGhvbGVzIG9yIHplcm8gdGhlIGRpc2sgb3IgLi4uCisJICoKKwkgKiBJZiB0aGVyZSBpcyBhIHBhZ2Ugd2hlcmUgdGhlIHByZXZpb3VzIHNpemUgbGFuZHMsIHdlIG5lZWQKKwkgKiB0byB6ZXJvIGl0IG91dCB1cCB0byB0aGUgbmV3IHNpemUuCisJICovCisKKwlpZiAocG9zID4gaXAtPmlfc2l6ZSkgeworCQllcnJvciA9IHhmc196ZXJvX2VvZihpcCwgcG9zLCBpcC0+aV9zaXplKTsKKwkJaWYgKGVycm9yKSB7CisJCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCQkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOworCQl9CisJfQorCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisKKwkvKgorCSAqIElmIHdlJ3JlIHdyaXRpbmcgdGhlIGZpbGUgdGhlbiBtYWtlIHN1cmUgdG8gY2xlYXIgdGhlCisJICogc2V0dWlkIGFuZCBzZXRnaWQgYml0cyBpZiB0aGUgcHJvY2VzcyBpcyBub3QgYmVpbmcgcnVuCisJICogYnkgcm9vdC4gIFRoaXMga2VlcHMgcGVvcGxlIGZyb20gbW9kaWZ5aW5nIHNldHVpZCBhbmQKKwkgKiBzZXRnaWQgYmluYXJpZXMuCisJICovCisJZXJyb3IgPSAtZmlsZV9yZW1vdmVfc3VpZChmaWxlKTsKKwlpZiAodW5saWtlbHkoZXJyb3IpKQorCQlnb3RvIG91dF91bmxvY2tfaW50ZXJuYWw7CisKKwkvKiBXZSBjYW4gd3JpdGUgYmFjayB0aGlzIHF1ZXVlIGluIHBhZ2UgcmVjbGFpbSAqLworCWN1cnJlbnQtPmJhY2tpbmdfZGV2X2luZm8gPSBtYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvOworCisJaWYgKChpb2ZsYWdzICYgSU9fSVNESVJFQ1QpKSB7CisJCWlmIChtYXBwaW5nLT5ucnBhZ2VzKSB7CisJCQlXQVJOX09OKG5lZWRfaV9tdXRleCA9PSAwKTsKKwkJCWVycm9yID0geGZzX2ZsdXNoaW52YWxfcGFnZXMoaXAsCisJCQkJCShwb3MgJiBQQUdFX0NBQ0hFX01BU0spLAorCQkJCQktMSwgRklfUkVNQVBGX0xPQ0tFRCk7CisJCQlpZiAoZXJyb3IpCisJCQkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOworCQl9CisKKwkJaWYgKG5lZWRfaV9tdXRleCkgeworCQkJLyogZGVtb3RlIHRoZSBsb2NrIG5vdyB0aGUgY2FjaGVkIHBhZ2VzIGFyZSBnb25lICovCisJCQl4ZnNfaWxvY2tfZGVtb3RlKGlwLCBYRlNfSU9MT0NLX0VYQ0wpOworCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisKKwkJCWlvbG9jayA9IFhGU19JT0xPQ0tfU0hBUkVEOworCQkJbmVlZF9pX211dGV4ID0gMDsKKwkJfQorCisJCXRyYWNlX3hmc19maWxlX2RpcmVjdF93cml0ZShpcCwgY291bnQsIGlvY2ItPmtpX3BvcywgaW9mbGFncyk7CisJCXJldCA9IGdlbmVyaWNfZmlsZV9kaXJlY3Rfd3JpdGUoaW9jYiwgaW92cCwKKwkJCQkmbnJfc2VncywgcG9zLCAmaW9jYi0+a2lfcG9zLCBjb3VudCwgb2NvdW50KTsKKworCQkvKgorCQkgKiBkaXJlY3QtaW8gd3JpdGUgdG8gYSBob2xlOiBmYWxsIHRocm91Z2ggdG8gYnVmZmVyZWQgSS9PCisJCSAqIGZvciBjb21wbGV0aW5nIHRoZSByZXN0IG9mIHRoZSByZXF1ZXN0LgorCQkgKi8KKwkJaWYgKHJldCA+PSAwICYmIHJldCAhPSBjb3VudCkgeworCQkJWEZTX1NUQVRTX0FERCh4c193cml0ZV9ieXRlcywgcmV0KTsKKworCQkJcG9zICs9IHJldDsKKwkJCWNvdW50IC09IHJldDsKKworCQkJaW9mbGFncyAmPSB+SU9fSVNESVJFQ1Q7CisJCQl4ZnNfaXVubG9jayhpcCwgaW9sb2NrKTsKKwkJCWdvdG8gcmVsb2NrOworCQl9CisJfSBlbHNlIHsKKwkJaW50IGVub3NwYyA9IDA7CisJCXNzaXplX3QgcmV0MiA9IDA7CisKK3dyaXRlX3JldHJ5OgorCQl0cmFjZV94ZnNfZmlsZV9idWZmZXJlZF93cml0ZShpcCwgY291bnQsIGlvY2ItPmtpX3BvcywgaW9mbGFncyk7CisJCXJldDIgPSBnZW5lcmljX2ZpbGVfYnVmZmVyZWRfd3JpdGUoaW9jYiwgaW92cCwgbnJfc2VncywKKwkJCQlwb3MsICZpb2NiLT5raV9wb3MsIGNvdW50LCByZXQpOworCQkvKgorCQkgKiBpZiB3ZSBqdXN0IGdvdCBhbiBFTk9TUEMsIGZsdXNoIHRoZSBpbm9kZSBub3cgd2UKKwkJICogYXJlbid0IGhvbGRpbmcgYW55IHBhZ2UgbG9ja3MgYW5kIHJldHJ5ICpvbmNlKgorCQkgKi8KKwkJaWYgKHJldDIgPT0gLUVOT1NQQyAmJiAhZW5vc3BjKSB7CisJCQllcnJvciA9IHhmc19mbHVzaF9wYWdlcyhpcCwgMCwgLTEsIDAsIEZJX05PTkUpOworCQkJaWYgKGVycm9yKQorCQkJCWdvdG8gb3V0X3VubG9ja19pbnRlcm5hbDsKKwkJCWVub3NwYyA9IDE7CisJCQlnb3RvIHdyaXRlX3JldHJ5OworCQl9CisJCXJldCA9IHJldDI7CisJfQorCisJY3VycmVudC0+YmFja2luZ19kZXZfaW5mbyA9IE5VTEw7CisKKwlpc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwlpZiAodW5saWtlbHkocmV0IDwgMCAmJiByZXQgIT0gLUVGQVVMVCAmJiBpb2NiLT5raV9wb3MgPiBpc2l6ZSkpCisJCWlvY2ItPmtpX3BvcyA9IGlzaXplOworCisJaWYgKGlvY2ItPmtpX3BvcyA+IGlwLT5pX3NpemUpIHsKKwkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJCWlmIChpb2NiLT5raV9wb3MgPiBpcC0+aV9zaXplKQorCQkJaXAtPmlfc2l6ZSA9IGlvY2ItPmtpX3BvczsKKwkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKKwl9CisKKwlpZiAocmV0ID09IC1FTk9TUEMgJiYKKwkgICAgRE1fRVZFTlRfRU5BQkxFRChpcCwgRE1fRVZFTlRfTk9TUEFDRSkgJiYgIShpb2ZsYWdzICYgSU9fSU5WSVMpKSB7CisJCXhmc19pdW5sb2NrKGlwLCBpb2xvY2spOworCQlpZiAobmVlZF9pX211dGV4KQorCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJCWVycm9yID0gWEZTX1NFTkRfTkFNRVNQKGlwLT5pX21vdW50LCBETV9FVkVOVF9OT1NQQUNFLCBpcCwKKwkJCQlETV9SSUdIVF9OVUxMLCBpcCwgRE1fUklHSFRfTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkwLCAwLCAwKTsgLyogRGVsYXkgZmxhZyBpbnRlbnRpb25hbGx5ICB1bnVzZWQgKi8KKwkJaWYgKG5lZWRfaV9tdXRleCkKKwkJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKKwkJeGZzX2lsb2NrKGlwLCBpb2xvY2spOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIG91dF91bmxvY2tfaW50ZXJuYWw7CisJCWdvdG8gc3RhcnQ7CisJfQorCisJZXJyb3IgPSAtcmV0OworCWlmIChyZXQgPD0gMCkKKwkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOworCisJWEZTX1NUQVRTX0FERCh4c193cml0ZV9ieXRlcywgcmV0KTsKKworCS8qIEhhbmRsZSB2YXJpb3VzIFNZTkMtdHlwZSB3cml0ZXMgKi8KKwlpZiAoKGZpbGUtPmZfZmxhZ3MgJiBPX0RTWU5DKSB8fCBJU19TWU5DKGlub2RlKSkgeworCQlsb2ZmX3QgZW5kID0gcG9zICsgcmV0IC0gMTsKKwkJaW50IGVycm9yMjsKKworCQl4ZnNfaXVubG9jayhpcCwgaW9sb2NrKTsKKwkJaWYgKG5lZWRfaV9tdXRleCkKKwkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCisJCWVycm9yMiA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UobWFwcGluZywgcG9zLCBlbmQpOworCQlpZiAoIWVycm9yKQorCQkJZXJyb3IgPSBlcnJvcjI7CisJCWlmIChuZWVkX2lfbXV0ZXgpCisJCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7CisJCXhmc19pbG9jayhpcCwgaW9sb2NrKTsKKworCQllcnJvcjIgPSAteGZzX2ZpbGVfZnN5bmMoZmlsZSwgZmlsZS0+Zl9wYXRoLmRlbnRyeSwKKwkJCQkJIChmaWxlLT5mX2ZsYWdzICYgX19PX1NZTkMpID8gMCA6IDEpOworCQlpZiAoIWVycm9yKQorCQkJZXJyb3IgPSBlcnJvcjI7CisJfQorCisgb3V0X3VubG9ja19pbnRlcm5hbDoKKwlpZiAoaXAtPmlfbmV3X3NpemUpIHsKKwkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7CisJCWlwLT5pX25ld19zaXplID0gMDsKKwkJLyoKKwkJICogSWYgdGhpcyB3YXMgYSBkaXJlY3Qgb3Igc3luY2hyb25vdXMgSS9PIHRoYXQgZmFpbGVkIChzdWNoCisJCSAqIGFzIEVOT1NQQykgdGhlbiBwYXJ0IG9mIHRoZSBJL08gbWF5IGhhdmUgYmVlbiB3cml0dGVuIHRvCisJCSAqIGRpc2sgYmVmb3JlIHRoZSBlcnJvciBvY2N1cmVkLiAgSW4gdGhpcyBjYXNlIHRoZSBvbi1kaXNrCisJCSAqIGZpbGUgc2l6ZSBtYXkgaGF2ZSBiZWVuIGFkanVzdGVkIGJleW9uZCB0aGUgaW4tbWVtb3J5IGZpbGUKKwkJICogc2l6ZSBhbmQgbm93IG5lZWRzIHRvIGJlIHRydW5jYXRlZCBiYWNrLgorCQkgKi8KKwkJaWYgKGlwLT5pX2QuZGlfc2l6ZSA+IGlwLT5pX3NpemUpCisJCQlpcC0+aV9kLmRpX3NpemUgPSBpcC0+aV9zaXplOworCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOworCX0KKwl4ZnNfaXVubG9jayhpcCwgaW9sb2NrKTsKKyBvdXRfdW5sb2NrX211dGV4OgorCWlmIChuZWVkX2lfbXV0ZXgpCisJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCXJldHVybiAtZXJyb3I7CiB9CiAKIFNUQVRJQyBpbnQKQEAgLTE2MCwyOCArOTM4LDYgQEAKIAlyZXR1cm4gLXhmc19yZWxlYXNlKFhGU19JKGlub2RlKSk7CiB9CiAKLS8qCi0gKiBXZSBpZ25vcmUgdGhlIGRhdGFzeW5jIGZsYWcgaGVyZSBiZWNhdXNlIGEgZGF0YXN5bmMgaXMgZWZmZWN0aXZlbHkKLSAqIGlkZW50aWNhbCB0byBhbiBmc3luYy4gVGhhdCBpcywgZGF0YXN5bmMgaW1wbGllcyB0aGF0IHdlIG5lZWQgdG8gd3JpdGUKLSAqIG9ubHkgdGhlIG1ldGFkYXRhIG5lZWRlZCB0byBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgZGF0YSB0aGF0IGlzIHdyaXR0ZW4KLSAqIGlmIHdlIGNyYXNoIGFmdGVyIHRoZSBjYWxsIGNvbXBsZXRlcy4gSGVuY2UgaWYgd2UgYXJlIHdyaXRpbmcgYmV5b25kCi0gKiBFT0Ygd2UgaGF2ZSB0byBsb2cgdGhlIGlub2RlIHNpemUgY2hhbmdlIGFzIHdlbGwsIHdoaWNoIG1ha2VzIGl0IGEKLSAqIGZ1bGwgZnN5bmMuIElmIHdlIGRvbid0IHdyaXRlIGJleW9uZCBFT0YsIHRoZSBpbm9kZSBjb3JlIHdpbGwgYmUKLSAqIGNsZWFuIGluIG1lbW9yeSBhbmQgc28gd2UgZG9uJ3QgbmVlZCB0byBsb2cgdGhlIGlub2RlLCBqdXN0IGxpa2UKLSAqIGZzeW5jLgotICovCi1TVEFUSUMgaW50Ci14ZnNfZmlsZV9mc3luYygKLQlzdHJ1Y3QgZmlsZQkJKmZpbGUsCi0Jc3RydWN0IGRlbnRyeQkJKmRlbnRyeSwKLQlpbnQJCQlkYXRhc3luYykKLXsKLQlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGRlbnRyeS0+ZF9pbm9kZSk7Ci0KLQl4ZnNfaWZsYWdzX2NsZWFyKGlwLCBYRlNfSVRSVU5DQVRFRCk7Ci0JcmV0dXJuIC14ZnNfZnN5bmMoaXApOwotfQotCiBTVEFUSUMgaW50CiB4ZnNfZmlsZV9yZWFkZGlyKAogCXN0cnVjdCBmaWxlCSpmaWxwLApAQCAtMjAzLDkgKzk1OSw5IEBACiAJICoKIAkgKiBUcnkgdG8gZ2l2ZSBpdCBhbiBlc3RpbWF0ZSB0aGF0J3MgZ29vZCBlbm91Z2gsIG1heWJlIGF0IHNvbWUKIAkgKiBwb2ludCB3ZSBjYW4gY2hhbmdlIHRoZSAtPnJlYWRkaXIgcHJvdG90eXBlIHRvIGluY2x1ZGUgdGhlCi0JICogYnVmZmVyIHNpemUuCisJICogYnVmZmVyIHNpemUuICBGb3Igbm93IHdlIHVzZSB0aGUgY3VycmVudCBnbGliYyBidWZmZXIgc2l6ZS4KIAkgKi8KLQlidWZzaXplID0gKHNpemVfdCltaW5fdChsb2ZmX3QsIFBBR0VfU0laRSwgaXAtPmlfZC5kaV9zaXplKTsKKwlidWZzaXplID0gKHNpemVfdCltaW5fdChsb2ZmX3QsIDMyNzY4LCBpcC0+aV9kLmRpX3NpemUpOwogCiAJZXJyb3IgPSB4ZnNfcmVhZGRpcihpcCwgZGlyZW50LCBidWZzaXplLAogCQkJCSh4ZnNfb2ZmX3QgKikmZmlscC0+Zl9wb3MsIGZpbGxkaXIpOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCmluZGV4IGU4NTY2YmIuLjYxYTk5NjAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKQEAgLTkxLDYgKzkxLDE2IEBACiAJCW1hcmtfaW5vZGVfZGlydHlfc3luYyhpbm9kZSk7CiB9CiAKK3ZvaWQKK3hmc19tYXJrX2lub2RlX2RpcnR5KAorCXhmc19pbm9kZV90CSppcCkKK3sKKwlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gVkZTX0koaXApOworCisJaWYgKCEoaW5vZGUtPmlfc3RhdGUgJiAoSV9XSUxMX0ZSRUV8SV9GUkVFSU5HfElfQ0xFQVIpKSkKKwkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Cit9CisKIC8qCiAgKiBDaGFuZ2UgdGhlIHJlcXVlc3RlZCB0aW1lc3RhbXAgaW4gdGhlIGdpdmVuIGlub2RlLgogICogV2UgZG9uJ3QgbG9jayBhY3Jvc3MgdGltZXN0YW1wIHVwZGF0ZXMsIGFuZCB3ZSBkb24ndCBsb2cgdGhlbSBidXQKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmggYi9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCmluZGV4IDVhZjBjODFjLi5mYWNmYjMyIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmgKQEAgLTg4LDcgKzg4LDYgQEAKICNpbmNsdWRlIDx4ZnNfc3VwZXIuaD4KICNpbmNsdWRlIDx4ZnNfZ2xvYmFscy5oPgogI2luY2x1ZGUgPHhmc19mc19zdWJyLmg+Ci0jaW5jbHVkZSA8eGZzX2xydy5oPgogI2luY2x1ZGUgPHhmc19idWYuaD4KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVhYzZmODAuLjAwMDAwMDAKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKKysrIC9kZXYvbnVsbApAQCAtMSw3OTYgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAzLDIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd291bGQgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiBJbmMuLCAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotI2luY2x1ZGUgInhmcy5oIgotI2luY2x1ZGUgInhmc19mcy5oIgotI2luY2x1ZGUgInhmc19iaXQuaCIKLSNpbmNsdWRlICJ4ZnNfbG9nLmgiCi0jaW5jbHVkZSAieGZzX2ludW0uaCIKLSNpbmNsdWRlICJ4ZnNfdHJhbnMuaCIKLSNpbmNsdWRlICJ4ZnNfc2IuaCIKLSNpbmNsdWRlICJ4ZnNfYWcuaCIKLSNpbmNsdWRlICJ4ZnNfZGlyMi5oIgotI2luY2x1ZGUgInhmc19hbGxvYy5oIgotI2luY2x1ZGUgInhmc19kbWFwaS5oIgotI2luY2x1ZGUgInhmc19xdW90YS5oIgotI2luY2x1ZGUgInhmc19tb3VudC5oIgotI2luY2x1ZGUgInhmc19ibWFwX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2FsbG9jX2J0cmVlLmgiCi0jaW5jbHVkZSAieGZzX2lhbGxvY19idHJlZS5oIgotI2luY2x1ZGUgInhmc19kaXIyX3NmLmgiCi0jaW5jbHVkZSAieGZzX2F0dHJfc2YuaCIKLSNpbmNsdWRlICJ4ZnNfZGlub2RlLmgiCi0jaW5jbHVkZSAieGZzX2lub2RlLmgiCi0jaW5jbHVkZSAieGZzX2JtYXAuaCIKLSNpbmNsdWRlICJ4ZnNfYnRyZWUuaCIKLSNpbmNsdWRlICJ4ZnNfaWFsbG9jLmgiCi0jaW5jbHVkZSAieGZzX3J0YWxsb2MuaCIKLSNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKLSNpbmNsdWRlICJ4ZnNfaXRhYmxlLmgiCi0jaW5jbHVkZSAieGZzX3J3LmgiCi0jaW5jbHVkZSAieGZzX2F0dHIuaCIKLSNpbmNsdWRlICJ4ZnNfaW5vZGVfaXRlbS5oIgotI2luY2x1ZGUgInhmc19idWZfaXRlbS5oIgotI2luY2x1ZGUgInhmc191dGlscy5oIgotI2luY2x1ZGUgInhmc19pb21hcC5oIgotI2luY2x1ZGUgInhmc192bm9kZW9wcy5oIgotI2luY2x1ZGUgInhmc190cmFjZS5oIgotCi0jaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgotCi0KLS8qCi0gKgl4ZnNfaW96ZXJvCi0gKgotICoJeGZzX2lvemVybyBjbGVhcnMgdGhlIHNwZWNpZmllZCByYW5nZSBvZiBidWZmZXIgc3VwcGxpZWQsCi0gKglhbmQgbWFya3MgYWxsIHRoZSBhZmZlY3RlZCBibG9ja3MgYXMgdmFsaWQgYW5kIG1vZGlmaWVkLiAgSWYKLSAqCWFuIGFmZmVjdGVkIGJsb2NrIGlzIG5vdCBhbGxvY2F0ZWQsIGl0IHdpbGwgYmUgYWxsb2NhdGVkLiAgSWYKLSAqCWFuIGFmZmVjdGVkIGJsb2NrIGlzIG5vdCBjb21wbGV0ZWx5IG92ZXJ3cml0dGVuLCBhbmQgaXMgbm90Ci0gKgl2YWxpZCBiZWZvcmUgdGhlIG9wZXJhdGlvbiwgaXQgd2lsbCBiZSByZWFkIGZyb20gZGlzayBiZWZvcmUKLSAqCWJlaW5nIHBhcnRpYWxseSB6ZXJvZWQuCi0gKi8KLVNUQVRJQyBpbnQKLXhmc19pb3plcm8oCi0Jc3RydWN0IHhmc19pbm9kZQkqaXAsCS8qIGlub2RlCQkJKi8KLQlsb2ZmX3QJCQlwb3MsCS8qIG9mZnNldCBpbiBmaWxlCQkqLwotCXNpemVfdAkJCWNvdW50KQkvKiBzaXplIG9mIGRhdGEgdG8gemVybwkJKi8KLXsKLQlzdHJ1Y3QgcGFnZQkJKnBhZ2U7Ci0Jc3RydWN0IGFkZHJlc3Nfc3BhY2UJKm1hcHBpbmc7Ci0JaW50CQkJc3RhdHVzOwotCi0JbWFwcGluZyA9IFZGU19JKGlwKS0+aV9tYXBwaW5nOwotCWRvIHsKLQkJdW5zaWduZWQgb2Zmc2V0LCBieXRlczsKLQkJdm9pZCAqZnNkYXRhOwotCi0JCW9mZnNldCA9IChwb3MgJiAoUEFHRV9DQUNIRV9TSVpFIC0xKSk7IC8qIFdpdGhpbiBwYWdlICovCi0JCWJ5dGVzID0gUEFHRV9DQUNIRV9TSVpFIC0gb2Zmc2V0OwotCQlpZiAoYnl0ZXMgPiBjb3VudCkKLQkJCWJ5dGVzID0gY291bnQ7Ci0KLQkJc3RhdHVzID0gcGFnZWNhY2hlX3dyaXRlX2JlZ2luKE5VTEwsIG1hcHBpbmcsIHBvcywgYnl0ZXMsCi0JCQkJCUFPUF9GTEFHX1VOSU5URVJSVVBUSUJMRSwKLQkJCQkJJnBhZ2UsICZmc2RhdGEpOwotCQlpZiAoc3RhdHVzKQotCQkJYnJlYWs7Ci0KLQkJemVyb191c2VyKHBhZ2UsIG9mZnNldCwgYnl0ZXMpOwotCi0JCXN0YXR1cyA9IHBhZ2VjYWNoZV93cml0ZV9lbmQoTlVMTCwgbWFwcGluZywgcG9zLCBieXRlcywgYnl0ZXMsCi0JCQkJCXBhZ2UsIGZzZGF0YSk7Ci0JCVdBUk5fT04oc3RhdHVzIDw9IDApOyAvKiBjYW4ndCByZXR1cm4gbGVzcyB0aGFuIHplcm8hICovCi0JCXBvcyArPSBieXRlczsKLQkJY291bnQgLT0gYnl0ZXM7Ci0JCXN0YXR1cyA9IDA7Ci0JfSB3aGlsZSAoY291bnQpOwotCi0JcmV0dXJuICgtc3RhdHVzKTsKLX0KLQotc3NpemVfdAkJCS8qIGJ5dGVzIHJlYWQsIG9yICgtKSAgZXJyb3IgKi8KLXhmc19yZWFkKAotCXhmc19pbm9kZV90CQkqaXAsCi0Jc3RydWN0IGtpb2NiCQkqaW9jYiwKLQljb25zdCBzdHJ1Y3QgaW92ZWMJKmlvdnAsCi0JdW5zaWduZWQgaW50CQlzZWdzLAotCWxvZmZfdAkJCSpvZmZzZXQsCi0JaW50CQkJaW9mbGFncykKLXsKLQlzdHJ1Y3QgZmlsZQkJKmZpbGUgPSBpb2NiLT5raV9maWxwOwotCXN0cnVjdCBpbm9kZQkJKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OwotCXhmc19tb3VudF90CQkqbXAgPSBpcC0+aV9tb3VudDsKLQlzaXplX3QJCQlzaXplID0gMDsKLQlzc2l6ZV90CQkJcmV0ID0gMDsKLQl4ZnNfZnNpemVfdAkJbjsKLQl1bnNpZ25lZCBsb25nCQlzZWc7Ci0KLQotCVhGU19TVEFUU19JTkMoeHNfcmVhZF9jYWxscyk7Ci0KLQkvKiBTVEFSVCBjb3B5ICYgd2FzdGUgZnJvbSBmaWxlbWFwLmMgKi8KLQlmb3IgKHNlZyA9IDA7IHNlZyA8IHNlZ3M7IHNlZysrKSB7Ci0JCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaXYgPSAmaW92cFtzZWddOwotCi0JCS8qCi0JCSAqIElmIGFueSBzZWdtZW50IGhhcyBhIG5lZ2F0aXZlIGxlbmd0aCwgb3IgdGhlIGN1bXVsYXRpdmUKLQkJICogbGVuZ3RoIGV2ZXIgd3JhcHMgbmVnYXRpdmUgdGhlbiByZXR1cm4gLUVJTlZBTC4KLQkJICovCi0JCXNpemUgKz0gaXYtPmlvdl9sZW47Ci0JCWlmICh1bmxpa2VseSgoc3NpemVfdCkoc2l6ZXxpdi0+aW92X2xlbikgPCAwKSkKLQkJCXJldHVybiBYRlNfRVJST1IoLUVJTlZBTCk7Ci0JfQotCS8qIEVORCBjb3B5ICYgd2FzdGUgZnJvbSBmaWxlbWFwLmMgKi8KLQotCWlmICh1bmxpa2VseShpb2ZsYWdzICYgSU9fSVNESVJFQ1QpKSB7Ci0JCXhmc19idWZ0YXJnX3QJKnRhcmdldCA9Ci0JCQlYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApID8KLQkJCQltcC0+bV9ydGRldl90YXJncCA6IG1wLT5tX2RkZXZfdGFyZ3A7Ci0JCWlmICgoKm9mZnNldCAmIHRhcmdldC0+YnRfc21hc2spIHx8Ci0JCSAgICAoc2l6ZSAmIHRhcmdldC0+YnRfc21hc2spKSB7Ci0JCQlpZiAoKm9mZnNldCA9PSBpcC0+aV9zaXplKSB7Ci0JCQkJcmV0dXJuICgwKTsKLQkJCX0KLQkJCXJldHVybiAtWEZTX0VSUk9SKEVJTlZBTCk7Ci0JCX0KLQl9Ci0KLQluID0gWEZTX01BWElPRkZTRVQobXApIC0gKm9mZnNldDsKLQlpZiAoKG4gPD0gMCkgfHwgKHNpemUgPT0gMCkpCi0JCXJldHVybiAwOwotCi0JaWYgKG4gPCBzaXplKQotCQlzaXplID0gbjsKLQotCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAodW5saWtlbHkoaW9mbGFncyAmIElPX0lTRElSRUNUKSkKLQkJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCXhmc19pbG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOwotCi0JaWYgKERNX0VWRU5UX0VOQUJMRUQoaXAsIERNX0VWRU5UX1JFQUQpICYmICEoaW9mbGFncyAmIElPX0lOVklTKSkgewotCQlpbnQgZG1mbGFncyA9IEZJTFBfREVMQVlfRkxBRyhmaWxlKSB8IERNX1NFTV9GTEFHX1JEKGlvZmxhZ3MpOwotCQlpbnQgaW9sb2NrID0gWEZTX0lPTE9DS19TSEFSRUQ7Ci0KLQkJcmV0ID0gLVhGU19TRU5EX0RBVEEobXAsIERNX0VWRU5UX1JFQUQsIGlwLCAqb2Zmc2V0LCBzaXplLAotCQkJCQlkbWZsYWdzLCAmaW9sb2NrKTsKLQkJaWYgKHJldCkgewotCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKLQkJCWlmICh1bmxpa2VseShpb2ZsYWdzICYgSU9fSVNESVJFQ1QpKQotCQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQotCWlmICh1bmxpa2VseShpb2ZsYWdzICYgSU9fSVNESVJFQ1QpKSB7Ci0JCWlmIChpbm9kZS0+aV9tYXBwaW5nLT5ucnBhZ2VzKQotCQkJcmV0ID0gLXhmc19mbHVzaGludmFsX3BhZ2VzKGlwLCAoKm9mZnNldCAmIFBBR0VfQ0FDSEVfTUFTSyksCi0JCQkJCQkgICAgLTEsIEZJX1JFTUFQRl9MT0NLRUQpOwotCQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQkJaWYgKHJldCkgewotCQkJeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKLQkJCXJldHVybiByZXQ7Ci0JCX0KLQl9Ci0KLQl0cmFjZV94ZnNfZmlsZV9yZWFkKGlwLCBzaXplLCAqb2Zmc2V0LCBpb2ZsYWdzKTsKLQotCWlvY2ItPmtpX3BvcyA9ICpvZmZzZXQ7Ci0JcmV0ID0gZ2VuZXJpY19maWxlX2Fpb19yZWFkKGlvY2IsIGlvdnAsIHNlZ3MsICpvZmZzZXQpOwotCWlmIChyZXQgPiAwKQotCQlYRlNfU1RBVFNfQUREKHhzX3JlYWRfYnl0ZXMsIHJldCk7Ci0KLQl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOwotCXJldHVybiByZXQ7Ci19Ci0KLXNzaXplX3QKLXhmc19zcGxpY2VfcmVhZCgKLQl4ZnNfaW5vZGVfdAkJKmlwLAotCXN0cnVjdCBmaWxlCQkqaW5maWxwLAotCWxvZmZfdAkJCSpwcG9zLAotCXN0cnVjdCBwaXBlX2lub2RlX2luZm8JKnBpcGUsCi0Jc2l6ZV90CQkJY291bnQsCi0JaW50CQkJZmxhZ3MsCi0JaW50CQkJaW9mbGFncykKLXsKLQl4ZnNfbW91bnRfdAkJKm1wID0gaXAtPmlfbW91bnQ7Ci0Jc3NpemVfdAkJCXJldDsKLQotCVhGU19TVEFUU19JTkMoeHNfcmVhZF9jYWxscyk7Ci0JaWYgKFhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKQotCQlyZXR1cm4gLUVJTzsKLQotCXhmc19pbG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOwotCi0JaWYgKERNX0VWRU5UX0VOQUJMRUQoaXAsIERNX0VWRU5UX1JFQUQpICYmICEoaW9mbGFncyAmIElPX0lOVklTKSkgewotCQlpbnQgaW9sb2NrID0gWEZTX0lPTE9DS19TSEFSRUQ7Ci0JCWludCBlcnJvcjsKLQotCQllcnJvciA9IFhGU19TRU5EX0RBVEEobXAsIERNX0VWRU5UX1JFQUQsIGlwLCAqcHBvcywgY291bnQsCi0JCQkJCUZJTFBfREVMQVlfRkxBRyhpbmZpbHApLCAmaW9sb2NrKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19TSEFSRUQpOwotCQkJcmV0dXJuIC1lcnJvcjsKLQkJfQotCX0KLQotCXRyYWNlX3hmc19maWxlX3NwbGljZV9yZWFkKGlwLCBjb3VudCwgKnBwb3MsIGlvZmxhZ3MpOwotCi0JcmV0ID0gZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkKGluZmlscCwgcHBvcywgcGlwZSwgY291bnQsIGZsYWdzKTsKLQlpZiAocmV0ID4gMCkKLQkJWEZTX1NUQVRTX0FERCh4c19yZWFkX2J5dGVzLCByZXQpOwotCi0JeGZzX2l1bmxvY2soaXAsIFhGU19JT0xPQ0tfU0hBUkVEKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zc2l6ZV90Ci14ZnNfc3BsaWNlX3dyaXRlKAotCXhmc19pbm9kZV90CQkqaXAsCi0Jc3RydWN0IHBpcGVfaW5vZGVfaW5mbwkqcGlwZSwKLQlzdHJ1Y3QgZmlsZQkJKm91dGZpbHAsCi0JbG9mZl90CQkJKnBwb3MsCi0Jc2l6ZV90CQkJY291bnQsCi0JaW50CQkJZmxhZ3MsCi0JaW50CQkJaW9mbGFncykKLXsKLQl4ZnNfbW91bnRfdAkJKm1wID0gaXAtPmlfbW91bnQ7Ci0Jc3NpemVfdAkJCXJldDsKLQlzdHJ1Y3QgaW5vZGUJCSppbm9kZSA9IG91dGZpbHAtPmZfbWFwcGluZy0+aG9zdDsKLQl4ZnNfZnNpemVfdAkJaXNpemUsIG5ld19zaXplOwotCi0JWEZTX1NUQVRTX0lOQyh4c193cml0ZV9jYWxscyk7Ci0JaWYgKFhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKQotCQlyZXR1cm4gLUVJTzsKLQotCXhmc19pbG9jayhpcCwgWEZTX0lPTE9DS19FWENMKTsKLQotCWlmIChETV9FVkVOVF9FTkFCTEVEKGlwLCBETV9FVkVOVF9XUklURSkgJiYgIShpb2ZsYWdzICYgSU9fSU5WSVMpKSB7Ci0JCWludCBpb2xvY2sgPSBYRlNfSU9MT0NLX0VYQ0w7Ci0JCWludCBlcnJvcjsKLQotCQllcnJvciA9IFhGU19TRU5EX0RBVEEobXAsIERNX0VWRU5UX1dSSVRFLCBpcCwgKnBwb3MsIGNvdW50LAotCQkJCQlGSUxQX0RFTEFZX0ZMQUcob3V0ZmlscCksICZpb2xvY2spOwotCQlpZiAoZXJyb3IpIHsKLQkJCXhmc19pdW5sb2NrKGlwLCBYRlNfSU9MT0NLX0VYQ0wpOwotCQkJcmV0dXJuIC1lcnJvcjsKLQkJfQotCX0KLQotCW5ld19zaXplID0gKnBwb3MgKyBjb3VudDsKLQotCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCWlmIChuZXdfc2l6ZSA+IGlwLT5pX3NpemUpCi0JCWlwLT5pX25ld19zaXplID0gbmV3X3NpemU7Ci0JeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQotCXRyYWNlX3hmc19maWxlX3NwbGljZV93cml0ZShpcCwgY291bnQsICpwcG9zLCBpb2ZsYWdzKTsKLQotCXJldCA9IGdlbmVyaWNfZmlsZV9zcGxpY2Vfd3JpdGUocGlwZSwgb3V0ZmlscCwgcHBvcywgY291bnQsIGZsYWdzKTsKLQlpZiAocmV0ID4gMCkKLQkJWEZTX1NUQVRTX0FERCh4c193cml0ZV9ieXRlcywgcmV0KTsKLQotCWlzaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwotCWlmICh1bmxpa2VseShyZXQgPCAwICYmIHJldCAhPSAtRUZBVUxUICYmICpwcG9zID4gaXNpemUpKQotCQkqcHBvcyA9IGlzaXplOwotCi0JaWYgKCpwcG9zID4gaXAtPmlfc2l6ZSkgewotCQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQkJaWYgKCpwcG9zID4gaXAtPmlfc2l6ZSkKLQkJCWlwLT5pX3NpemUgPSAqcHBvczsKLQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQl9Ci0KLQlpZiAoaXAtPmlfbmV3X3NpemUpIHsKLQkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JCWlwLT5pX25ld19zaXplID0gMDsKLQkJaWYgKGlwLT5pX2QuZGlfc2l6ZSA+IGlwLT5pX3NpemUpCi0JCQlpcC0+aV9kLmRpX3NpemUgPSBpcC0+aV9zaXplOwotCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCX0KLQl4ZnNfaXVubG9jayhpcCwgWEZTX0lPTE9DS19FWENMKTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKgotICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBoYW5kbGUgemVyb2luZyBhbnkgc3BhY2UgaW4gdGhlIGxhc3QKLSAqIGJsb2NrIG9mIHRoZSBmaWxlIHRoYXQgaXMgYmV5b25kIHRoZSBFT0YuICBXZSBkbyB0aGlzIHNpbmNlIHRoZQotICogc2l6ZSBpcyBiZWluZyBpbmNyZWFzZWQgd2l0aG91dCB3cml0aW5nIGFueXRoaW5nIHRvIHRoYXQgYmxvY2sKLSAqIGFuZCB3ZSBkb24ndCB3YW50IGFueW9uZSB0byByZWFkIHRoZSBnYXJiYWdlIG9uIHRoZSBkaXNrLgotICovCi1TVEFUSUMgaW50CQkJCS8qIGVycm9yIChwb3NpdGl2ZSkgKi8KLXhmc196ZXJvX2xhc3RfYmxvY2soCi0JeGZzX2lub2RlX3QJKmlwLAotCXhmc19mc2l6ZV90CW9mZnNldCwKLQl4ZnNfZnNpemVfdAlpc2l6ZSkKLXsKLQl4ZnNfZmlsZW9mZl90CWxhc3RfZnNiOwotCXhmc19tb3VudF90CSptcCA9IGlwLT5pX21vdW50OwotCWludAkJbmltYXBzOwotCWludAkJemVyb19vZmZzZXQ7Ci0JaW50CQl6ZXJvX2xlbjsKLQlpbnQJCWVycm9yID0gMDsKLQl4ZnNfYm1idF9pcmVjX3QJaW1hcDsKLQotCUFTU0VSVCh4ZnNfaXNpbG9ja2VkKGlwLCBYRlNfSUxPQ0tfRVhDTCkpOwotCi0JemVyb19vZmZzZXQgPSBYRlNfQl9GU0JfT0ZGU0VUKG1wLCBpc2l6ZSk7Ci0JaWYgKHplcm9fb2Zmc2V0ID09IDApIHsKLQkJLyoKLQkJICogVGhlcmUgYXJlIG5vIGV4dHJhIGJ5dGVzIGluIHRoZSBsYXN0IGJsb2NrIG9uIGRpc2sgdG8KLQkJICogemVybywgc28gcmV0dXJuLgotCQkgKi8KLQkJcmV0dXJuIDA7Ci0JfQotCi0JbGFzdF9mc2IgPSBYRlNfQl9UT19GU0JUKG1wLCBpc2l6ZSk7Ci0JbmltYXBzID0gMTsKLQllcnJvciA9IHhmc19ibWFwaShOVUxMLCBpcCwgbGFzdF9mc2IsIDEsIDAsIE5VTEwsIDAsICZpbWFwLAotCQkJICAmbmltYXBzLCBOVUxMLCBOVUxMKTsKLQlpZiAoZXJyb3IpIHsKLQkJcmV0dXJuIGVycm9yOwotCX0KLQlBU1NFUlQobmltYXBzID4gMCk7Ci0JLyoKLQkgKiBJZiB0aGUgYmxvY2sgdW5kZXJseWluZyBpc2l6ZSBpcyBqdXN0IGEgaG9sZSwgdGhlbiB0aGVyZQotCSAqIGlzIG5vdGhpbmcgdG8gemVyby4KLQkgKi8KLQlpZiAoaW1hcC5icl9zdGFydGJsb2NrID09IEhPTEVTVEFSVEJMT0NLKSB7Ci0JCXJldHVybiAwOwotCX0KLQkvKgotCSAqIFplcm8gdGhlIHBhcnQgb2YgdGhlIGxhc3QgYmxvY2sgYmV5b25kIHRoZSBFT0YsIGFuZCB3cml0ZSBpdAotCSAqIG91dCBzeW5jLiAgV2UgbmVlZCB0byBkcm9wIHRoZSBpbG9jayB3aGlsZSB3ZSBkbyB0aGlzIHNvIHdlCi0JICogZG9uJ3QgZGVhZGxvY2sgd2hlbiB0aGUgYnVmZmVyIGNhY2hlIGNhbGxzIGJhY2sgdG8gdXMuCi0JICovCi0JeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQotCXplcm9fbGVuID0gbXAtPm1fc2Iuc2JfYmxvY2tzaXplIC0gemVyb19vZmZzZXQ7Ci0JaWYgKGlzaXplICsgemVyb19sZW4gPiBvZmZzZXQpCi0JCXplcm9fbGVuID0gb2Zmc2V0IC0gaXNpemU7Ci0JZXJyb3IgPSB4ZnNfaW96ZXJvKGlwLCBpc2l6ZSwgemVyb19sZW4pOwotCi0JeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JQVNTRVJUKGVycm9yID49IDApOwotCXJldHVybiBlcnJvcjsKLX0KLQotLyoKLSAqIFplcm8gYW55IG9uIGRpc2sgc3BhY2UgYmV0d2VlbiB0aGUgY3VycmVudCBFT0YgYW5kIHRoZSBuZXcsCi0gKiBsYXJnZXIgRU9GLiAgVGhpcyBoYW5kbGVzIHRoZSBub3JtYWwgY2FzZSBvZiB6ZXJvaW5nIHRoZSByZW1haW5kZXIKLSAqIG9mIHRoZSBsYXN0IGJsb2NrIGluIHRoZSBmaWxlIGFuZCB0aGUgdW51c3VhbCBjYXNlIG9mIHplcm9pbmcgYmxvY2tzCi0gKiBvdXQgYmV5b25kIHRoZSBzaXplIG9mIHRoZSBmaWxlLiAgVGhpcyBzZWNvbmQgY2FzZSBvbmx5IGhhcHBlbnMKLSAqIHdpdGggZml4ZWQgc2l6ZSBleHRlbnRzIGFuZCB3aGVuIHRoZSBzeXN0ZW0gY3Jhc2hlcyBiZWZvcmUgdGhlIGlub2RlCi0gKiBzaXplIHdhcyB1cGRhdGVkIGJ1dCBhZnRlciBibG9ja3Mgd2VyZSBhbGxvY2F0ZWQuICBJZiBmaWxsIGlzIHNldCwKLSAqIHRoZW4gYW55IGhvbGVzIGluIHRoZSByYW5nZSBhcmUgZmlsbGVkIGFuZCB6ZXJvZWQuICBJZiBub3QsIHRoZSBob2xlcwotICogYXJlIGxlZnQgYWxvbmUgYXMgaG9sZXMuCi0gKi8KLQotaW50CQkJCQkvKiBlcnJvciAocG9zaXRpdmUpICovCi14ZnNfemVyb19lb2YoCi0JeGZzX2lub2RlX3QJKmlwLAotCXhmc19vZmZfdAlvZmZzZXQsCQkvKiBzdGFydGluZyBJL08gb2Zmc2V0ICovCi0JeGZzX2ZzaXplX3QJaXNpemUpCQkvKiBjdXJyZW50IGlub2RlIHNpemUgKi8KLXsKLQl4ZnNfbW91bnRfdAkqbXAgPSBpcC0+aV9tb3VudDsKLQl4ZnNfZmlsZW9mZl90CXN0YXJ0X3plcm9fZnNiOwotCXhmc19maWxlb2ZmX3QJZW5kX3plcm9fZnNiOwotCXhmc19maWxlb2ZmX3QJemVyb19jb3VudF9mc2I7Ci0JeGZzX2ZpbGVvZmZfdAlsYXN0X2ZzYjsKLQl4ZnNfZmlsZW9mZl90CXplcm9fb2ZmOwotCXhmc19mc2l6ZV90CXplcm9fbGVuOwotCWludAkJbmltYXBzOwotCWludAkJZXJyb3IgPSAwOwotCXhmc19ibWJ0X2lyZWNfdAlpbWFwOwotCi0JQVNTRVJUKHhmc19pc2lsb2NrZWQoaXAsIFhGU19JTE9DS19FWENMfFhGU19JT0xPQ0tfRVhDTCkpOwotCUFTU0VSVChvZmZzZXQgPiBpc2l6ZSk7Ci0KLQkvKgotCSAqIEZpcnN0IGhhbmRsZSB6ZXJvaW5nIHRoZSBibG9jayBvbiB3aGljaCBpc2l6ZSByZXNpZGVzLgotCSAqIFdlIG9ubHkgemVybyBhIHBhcnQgb2YgdGhhdCBibG9jayBzbyBpdCBpcyBoYW5kbGVkIHNwZWNpYWxseS4KLQkgKi8KLQllcnJvciA9IHhmc196ZXJvX2xhc3RfYmxvY2soaXAsIG9mZnNldCwgaXNpemUpOwotCWlmIChlcnJvcikgewotCQlBU1NFUlQoeGZzX2lzaWxvY2tlZChpcCwgWEZTX0lMT0NLX0VYQ0x8WEZTX0lPTE9DS19FWENMKSk7Ci0JCXJldHVybiBlcnJvcjsKLQl9Ci0KLQkvKgotCSAqIENhbGN1bGF0ZSB0aGUgcmFuZ2UgYmV0d2VlbiB0aGUgbmV3IHNpemUgYW5kIHRoZSBvbGQKLQkgKiB3aGVyZSBibG9ja3MgbmVlZGluZyB0byBiZSB6ZXJvZWQgbWF5IGV4aXN0LiAgVG8gZ2V0IHRoZQotCSAqIGJsb2NrIHdoZXJlIHRoZSBsYXN0IGJ5dGUgaW4gdGhlIGZpbGUgY3VycmVudGx5IHJlc2lkZXMsCi0JICogd2UgbmVlZCB0byBzdWJ0cmFjdCBvbmUgZnJvbSB0aGUgc2l6ZSBhbmQgdHJ1bmNhdGUgYmFjawotCSAqIHRvIGEgYmxvY2sgYm91bmRhcnkuICBXZSBzdWJ0cmFjdCAxIGluIGNhc2UgdGhlIHNpemUgaXMKLQkgKiBleGFjdGx5IG9uIGEgYmxvY2sgYm91bmRhcnkuCi0JICovCi0JbGFzdF9mc2IgPSBpc2l6ZSA/IFhGU19CX1RPX0ZTQlQobXAsIGlzaXplIC0gMSkgOiAoeGZzX2ZpbGVvZmZfdCktMTsKLQlzdGFydF96ZXJvX2ZzYiA9IFhGU19CX1RPX0ZTQihtcCwgKHhmc191ZnNpemVfdClpc2l6ZSk7Ci0JZW5kX3plcm9fZnNiID0gWEZTX0JfVE9fRlNCVChtcCwgb2Zmc2V0IC0gMSk7Ci0JQVNTRVJUKCh4ZnNfc2ZpbG9mZl90KWxhc3RfZnNiIDwgKHhmc19zZmlsb2ZmX3Qpc3RhcnRfemVyb19mc2IpOwotCWlmIChsYXN0X2ZzYiA9PSBlbmRfemVyb19mc2IpIHsKLQkJLyoKLQkJICogVGhlIHNpemUgd2FzIG9ubHkgaW5jcmVtZW50ZWQgb24gaXRzIGxhc3QgYmxvY2suCi0JCSAqIFdlIHRvb2sgY2FyZSBvZiB0aGF0IGFib3ZlLCBzbyBqdXN0IHJldHVybi4KLQkJICovCi0JCXJldHVybiAwOwotCX0KLQotCUFTU0VSVChzdGFydF96ZXJvX2ZzYiA8PSBlbmRfemVyb19mc2IpOwotCXdoaWxlIChzdGFydF96ZXJvX2ZzYiA8PSBlbmRfemVyb19mc2IpIHsKLQkJbmltYXBzID0gMTsKLQkJemVyb19jb3VudF9mc2IgPSBlbmRfemVyb19mc2IgLSBzdGFydF96ZXJvX2ZzYiArIDE7Ci0JCWVycm9yID0geGZzX2JtYXBpKE5VTEwsIGlwLCBzdGFydF96ZXJvX2ZzYiwgemVyb19jb3VudF9mc2IsCi0JCQkJICAwLCBOVUxMLCAwLCAmaW1hcCwgJm5pbWFwcywgTlVMTCwgTlVMTCk7Ci0JCWlmIChlcnJvcikgewotCQkJQVNTRVJUKHhmc19pc2lsb2NrZWQoaXAsIFhGU19JTE9DS19FWENMfFhGU19JT0xPQ0tfRVhDTCkpOwotCQkJcmV0dXJuIGVycm9yOwotCQl9Ci0JCUFTU0VSVChuaW1hcHMgPiAwKTsKLQotCQlpZiAoaW1hcC5icl9zdGF0ZSA9PSBYRlNfRVhUX1VOV1JJVFRFTiB8fAotCQkgICAgaW1hcC5icl9zdGFydGJsb2NrID09IEhPTEVTVEFSVEJMT0NLKSB7Ci0JCQkvKgotCQkJICogVGhpcyBsb29wIGhhbmRsZXMgaW5pdGlhbGl6aW5nIHBhZ2VzIHRoYXQgd2VyZQotCQkJICogcGFydGlhbGx5IGluaXRpYWxpemVkIGJ5IHRoZSBjb2RlIGJlbG93IHRoaXMKLQkJCSAqIGxvb3AuIEl0IGJhc2ljYWxseSB6ZXJvZXMgdGhlIHBhcnQgb2YgdGhlIHBhZ2UKLQkJCSAqIHRoYXQgc2l0cyBvbiBhIGhvbGUgYW5kIHNldHMgdGhlIHBhZ2UgYXMgUF9IT0xFCi0JCQkgKiBhbmQgY2FsbHMgcmVtYXBmIGlmIGl0IGlzIGEgbWFwcGVkIGZpbGUuCi0JCQkgKi8KLQkJCXN0YXJ0X3plcm9fZnNiID0gaW1hcC5icl9zdGFydG9mZiArIGltYXAuYnJfYmxvY2tjb3VudDsKLQkJCUFTU0VSVChzdGFydF96ZXJvX2ZzYiA8PSAoZW5kX3plcm9fZnNiICsgMSkpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKgotCQkgKiBUaGVyZSBhcmUgYmxvY2tzIHdlIG5lZWQgdG8gemVyby4KLQkJICogRHJvcCB0aGUgaW5vZGUgbG9jayB3aGlsZSB3ZSdyZSBkb2luZyB0aGUgSS9PLgotCQkgKiBXZSdsbCBzdGlsbCBoYXZlIHRoZSBpb2xvY2sgdG8gcHJvdGVjdCB1cy4KLQkJICovCi0JCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0KLQkJemVyb19vZmYgPSBYRlNfRlNCX1RPX0IobXAsIHN0YXJ0X3plcm9fZnNiKTsKLQkJemVyb19sZW4gPSBYRlNfRlNCX1RPX0IobXAsIGltYXAuYnJfYmxvY2tjb3VudCk7Ci0KLQkJaWYgKCh6ZXJvX29mZiArIHplcm9fbGVuKSA+IG9mZnNldCkKLQkJCXplcm9fbGVuID0gb2Zmc2V0IC0gemVyb19vZmY7Ci0KLQkJZXJyb3IgPSB4ZnNfaW96ZXJvKGlwLCB6ZXJvX29mZiwgemVyb19sZW4pOwotCQlpZiAoZXJyb3IpIHsKLQkJCWdvdG8gb3V0X2xvY2s7Ci0JCX0KLQotCQlzdGFydF96ZXJvX2ZzYiA9IGltYXAuYnJfc3RhcnRvZmYgKyBpbWFwLmJyX2Jsb2NrY291bnQ7Ci0JCUFTU0VSVChzdGFydF96ZXJvX2ZzYiA8PSAoZW5kX3plcm9fZnNiICsgMSkpOwotCi0JCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCX0KLQotCXJldHVybiAwOwotCi1vdXRfbG9jazoKLQl4ZnNfaWxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLQlBU1NFUlQoZXJyb3IgPj0gMCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCi1zc2l6ZV90CQkJCS8qIGJ5dGVzIHdyaXR0ZW4sIG9yICgtKSBlcnJvciAqLwoteGZzX3dyaXRlKAotCXN0cnVjdCB4ZnNfaW5vZGUJKnhpcCwKLQlzdHJ1Y3Qga2lvY2IJCSppb2NiLAotCWNvbnN0IHN0cnVjdCBpb3ZlYwkqaW92cCwKLQl1bnNpZ25lZCBpbnQJCW5zZWdzLAotCWxvZmZfdAkJCSpvZmZzZXQsCi0JaW50CQkJaW9mbGFncykKLXsKLQlzdHJ1Y3QgZmlsZQkJKmZpbGUgPSBpb2NiLT5raV9maWxwOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlCSptYXBwaW5nID0gZmlsZS0+Zl9tYXBwaW5nOwotCXN0cnVjdCBpbm9kZQkJKmlub2RlID0gbWFwcGluZy0+aG9zdDsKLQl1bnNpZ25lZCBsb25nCQlzZWdzID0gbnNlZ3M7Ci0JeGZzX21vdW50X3QJCSptcDsKLQlzc2l6ZV90CQkJcmV0ID0gMCwgZXJyb3IgPSAwOwotCXhmc19mc2l6ZV90CQlpc2l6ZSwgbmV3X3NpemU7Ci0JaW50CQkJaW9sb2NrOwotCWludAkJCWV2ZW50c2VudCA9IDA7Ci0Jc2l6ZV90CQkJb2NvdW50ID0gMCwgY291bnQ7Ci0JbG9mZl90CQkJcG9zOwotCWludAkJCW5lZWRfaV9tdXRleDsKLQotCVhGU19TVEFUU19JTkMoeHNfd3JpdGVfY2FsbHMpOwotCi0JZXJyb3IgPSBnZW5lcmljX3NlZ21lbnRfY2hlY2tzKGlvdnAsICZzZWdzLCAmb2NvdW50LCBWRVJJRllfUkVBRCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQljb3VudCA9IG9jb3VudDsKLQlwb3MgPSAqb2Zmc2V0OwotCi0JaWYgKGNvdW50ID09IDApCi0JCXJldHVybiAwOwotCi0JbXAgPSB4aXAtPmlfbW91bnQ7Ci0KLQl4ZnNfd2FpdF9mb3JfZnJlZXplKG1wLCBTQl9GUkVFWkVfV1JJVEUpOwotCi0JaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQotCQlyZXR1cm4gLUVJTzsKLQotcmVsb2NrOgotCWlmIChpb2ZsYWdzICYgSU9fSVNESVJFQ1QpIHsKLQkJaW9sb2NrID0gWEZTX0lPTE9DS19TSEFSRUQ7Ci0JCW5lZWRfaV9tdXRleCA9IDA7Ci0JfSBlbHNlIHsKLQkJaW9sb2NrID0gWEZTX0lPTE9DS19FWENMOwotCQluZWVkX2lfbXV0ZXggPSAxOwotCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JfQotCi0JeGZzX2lsb2NrKHhpcCwgWEZTX0lMT0NLX0VYQ0x8aW9sb2NrKTsKLQotc3RhcnQ6Ci0JZXJyb3IgPSAtZ2VuZXJpY193cml0ZV9jaGVja3MoZmlsZSwgJnBvcywgJmNvdW50LAotCQkJCQlTX0lTQkxLKGlub2RlLT5pX21vZGUpKTsKLQlpZiAoZXJyb3IpIHsKLQkJeGZzX2l1bmxvY2soeGlwLCBYRlNfSUxPQ0tfRVhDTHxpb2xvY2spOwotCQlnb3RvIG91dF91bmxvY2tfbXV0ZXg7Ci0JfQotCi0JaWYgKChETV9FVkVOVF9FTkFCTEVEKHhpcCwgRE1fRVZFTlRfV1JJVEUpICYmCi0JICAgICEoaW9mbGFncyAmIElPX0lOVklTKSAmJiAhZXZlbnRzZW50KSkgewotCQlpbnQJCWRtZmxhZ3MgPSBGSUxQX0RFTEFZX0ZMQUcoZmlsZSk7Ci0KLQkJaWYgKG5lZWRfaV9tdXRleCkKLQkJCWRtZmxhZ3MgfD0gRE1fRkxBR1NfSU1VWDsKLQotCQl4ZnNfaXVubG9jayh4aXAsIFhGU19JTE9DS19FWENMKTsKLQkJZXJyb3IgPSBYRlNfU0VORF9EQVRBKHhpcC0+aV9tb3VudCwgRE1fRVZFTlRfV1JJVEUsIHhpcCwKLQkJCQkgICAgICBwb3MsIGNvdW50LCBkbWZsYWdzLCAmaW9sb2NrKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlnb3RvIG91dF91bmxvY2tfaW50ZXJuYWw7Ci0JCX0KLQkJeGZzX2lsb2NrKHhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCQlldmVudHNlbnQgPSAxOwotCi0JCS8qCi0JCSAqIFRoZSBpb2xvY2sgd2FzIGRyb3BwZWQgYW5kIHJlYWNxdWlyZWQgaW4gWEZTX1NFTkRfREFUQQotCQkgKiBzbyB3ZSBoYXZlIHRvIHJlY2hlY2sgdGhlIHNpemUgd2hlbiBhcHBlbmRpbmcuCi0JCSAqIFdlIHdpbGwgb25seSAiZ290byBzdGFydDsiIG9uY2UsIHNpbmNlIGhhdmluZyBzZW50IHRoZQotCQkgKiBldmVudCBwcmV2ZW50cyBhbm90aGVyIGNhbGwgdG8gWEZTX1NFTkRfREFUQSwgd2hpY2ggaXMKLQkJICogd2hhdCBhbGxvd3MgdGhlIHNpemUgdG8gY2hhbmdlIGluIHRoZSBmaXJzdCBwbGFjZS4KLQkJICovCi0JCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fQVBQRU5EKSAmJiBwb3MgIT0geGlwLT5pX3NpemUpCi0JCQlnb3RvIHN0YXJ0OwotCX0KLQotCWlmIChpb2ZsYWdzICYgSU9fSVNESVJFQ1QpIHsKLQkJeGZzX2J1ZnRhcmdfdAkqdGFyZ2V0ID0KLQkJCVhGU19JU19SRUFMVElNRV9JTk9ERSh4aXApID8KLQkJCQltcC0+bV9ydGRldl90YXJncCA6IG1wLT5tX2RkZXZfdGFyZ3A7Ci0KLQkJaWYgKChwb3MgJiB0YXJnZXQtPmJ0X3NtYXNrKSB8fCAoY291bnQgJiB0YXJnZXQtPmJ0X3NtYXNrKSkgewotCQkJeGZzX2l1bmxvY2soeGlwLCBYRlNfSUxPQ0tfRVhDTHxpb2xvY2spOwotCQkJcmV0dXJuIFhGU19FUlJPUigtRUlOVkFMKTsKLQkJfQotCi0JCWlmICghbmVlZF9pX211dGV4ICYmIChtYXBwaW5nLT5ucnBhZ2VzIHx8IHBvcyA+IHhpcC0+aV9zaXplKSkgewotCQkJeGZzX2l1bmxvY2soeGlwLCBYRlNfSUxPQ0tfRVhDTHxpb2xvY2spOwotCQkJaW9sb2NrID0gWEZTX0lPTE9DS19FWENMOwotCQkJbmVlZF9pX211dGV4ID0gMTsKLQkJCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQkJCXhmc19pbG9jayh4aXAsIFhGU19JTE9DS19FWENMfGlvbG9jayk7Ci0JCQlnb3RvIHN0YXJ0OwotCQl9Ci0JfQotCi0JbmV3X3NpemUgPSBwb3MgKyBjb3VudDsKLQlpZiAobmV3X3NpemUgPiB4aXAtPmlfc2l6ZSkKLQkJeGlwLT5pX25ld19zaXplID0gbmV3X3NpemU7Ci0KLQlpZiAobGlrZWx5KCEoaW9mbGFncyAmIElPX0lOVklTKSkpCi0JCWZpbGVfdXBkYXRlX3RpbWUoZmlsZSk7Ci0KLQkvKgotCSAqIElmIHRoZSBvZmZzZXQgaXMgYmV5b25kIHRoZSBzaXplIG9mIHRoZSBmaWxlLCB3ZSBoYXZlIGEgY291cGxlCi0JICogb2YgdGhpbmdzIHRvIGRvLiBGaXJzdCwgaWYgdGhlcmUgaXMgYWxyZWFkeSBzcGFjZSBhbGxvY2F0ZWQKLQkgKiB3ZSBuZWVkIHRvIGVpdGhlciBjcmVhdGUgaG9sZXMgb3IgemVybyB0aGUgZGlzayBvciAuLi4KLQkgKgotCSAqIElmIHRoZXJlIGlzIGEgcGFnZSB3aGVyZSB0aGUgcHJldmlvdXMgc2l6ZSBsYW5kcywgd2UgbmVlZAotCSAqIHRvIHplcm8gaXQgb3V0IHVwIHRvIHRoZSBuZXcgc2l6ZS4KLQkgKi8KLQotCWlmIChwb3MgPiB4aXAtPmlfc2l6ZSkgewotCQllcnJvciA9IHhmc196ZXJvX2VvZih4aXAsIHBvcywgeGlwLT5pX3NpemUpOwotCQlpZiAoZXJyb3IpIHsKLQkJCXhmc19pdW5sb2NrKHhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCQkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOwotCQl9Ci0JfQotCXhmc19pdW5sb2NrKHhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCi0JLyoKLQkgKiBJZiB3ZSdyZSB3cml0aW5nIHRoZSBmaWxlIHRoZW4gbWFrZSBzdXJlIHRvIGNsZWFyIHRoZQotCSAqIHNldHVpZCBhbmQgc2V0Z2lkIGJpdHMgaWYgdGhlIHByb2Nlc3MgaXMgbm90IGJlaW5nIHJ1bgotCSAqIGJ5IHJvb3QuICBUaGlzIGtlZXBzIHBlb3BsZSBmcm9tIG1vZGlmeWluZyBzZXR1aWQgYW5kCi0JICogc2V0Z2lkIGJpbmFyaWVzLgotCSAqLwotCWVycm9yID0gLWZpbGVfcmVtb3ZlX3N1aWQoZmlsZSk7Ci0JaWYgKHVubGlrZWx5KGVycm9yKSkKLQkJZ290byBvdXRfdW5sb2NrX2ludGVybmFsOwotCi0JLyogV2UgY2FuIHdyaXRlIGJhY2sgdGhpcyBxdWV1ZSBpbiBwYWdlIHJlY2xhaW0gKi8KLQljdXJyZW50LT5iYWNraW5nX2Rldl9pbmZvID0gbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbzsKLQotCWlmICgoaW9mbGFncyAmIElPX0lTRElSRUNUKSkgewotCQlpZiAobWFwcGluZy0+bnJwYWdlcykgewotCQkJV0FSTl9PTihuZWVkX2lfbXV0ZXggPT0gMCk7Ci0JCQllcnJvciA9IHhmc19mbHVzaGludmFsX3BhZ2VzKHhpcCwKLQkJCQkJKHBvcyAmIFBBR0VfQ0FDSEVfTUFTSyksCi0JCQkJCS0xLCBGSV9SRU1BUEZfTE9DS0VEKTsKLQkJCWlmIChlcnJvcikKLQkJCQlnb3RvIG91dF91bmxvY2tfaW50ZXJuYWw7Ci0JCX0KLQotCQlpZiAobmVlZF9pX211dGV4KSB7Ci0JCQkvKiBkZW1vdGUgdGhlIGxvY2sgbm93IHRoZSBjYWNoZWQgcGFnZXMgYXJlIGdvbmUgKi8KLQkJCXhmc19pbG9ja19kZW1vdGUoeGlwLCBYRlNfSU9MT0NLX0VYQ0wpOwotCQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0KLQkJCWlvbG9jayA9IFhGU19JT0xPQ0tfU0hBUkVEOwotCQkJbmVlZF9pX211dGV4ID0gMDsKLQkJfQotCi0JCXRyYWNlX3hmc19maWxlX2RpcmVjdF93cml0ZSh4aXAsIGNvdW50LCAqb2Zmc2V0LCBpb2ZsYWdzKTsKLQkJcmV0ID0gZ2VuZXJpY19maWxlX2RpcmVjdF93cml0ZShpb2NiLCBpb3ZwLAotCQkJCSZzZWdzLCBwb3MsIG9mZnNldCwgY291bnQsIG9jb3VudCk7Ci0KLQkJLyoKLQkJICogZGlyZWN0LWlvIHdyaXRlIHRvIGEgaG9sZTogZmFsbCB0aHJvdWdoIHRvIGJ1ZmZlcmVkIEkvTwotCQkgKiBmb3IgY29tcGxldGluZyB0aGUgcmVzdCBvZiB0aGUgcmVxdWVzdC4KLQkJICovCi0JCWlmIChyZXQgPj0gMCAmJiByZXQgIT0gY291bnQpIHsKLQkJCVhGU19TVEFUU19BREQoeHNfd3JpdGVfYnl0ZXMsIHJldCk7Ci0KLQkJCXBvcyArPSByZXQ7Ci0JCQljb3VudCAtPSByZXQ7Ci0KLQkJCWlvZmxhZ3MgJj0gfklPX0lTRElSRUNUOwotCQkJeGZzX2l1bmxvY2soeGlwLCBpb2xvY2spOwotCQkJZ290byByZWxvY2s7Ci0JCX0KLQl9IGVsc2UgewotCQlpbnQgZW5vc3BjID0gMDsKLQkJc3NpemVfdCByZXQyID0gMDsKLQotd3JpdGVfcmV0cnk6Ci0JCXRyYWNlX3hmc19maWxlX2J1ZmZlcmVkX3dyaXRlKHhpcCwgY291bnQsICpvZmZzZXQsIGlvZmxhZ3MpOwotCQlyZXQyID0gZ2VuZXJpY19maWxlX2J1ZmZlcmVkX3dyaXRlKGlvY2IsIGlvdnAsIHNlZ3MsCi0JCQkJcG9zLCBvZmZzZXQsIGNvdW50LCByZXQpOwotCQkvKgotCQkgKiBpZiB3ZSBqdXN0IGdvdCBhbiBFTk9TUEMsIGZsdXNoIHRoZSBpbm9kZSBub3cgd2UKLQkJICogYXJlbid0IGhvbGRpbmcgYW55IHBhZ2UgbG9ja3MgYW5kIHJldHJ5ICpvbmNlKgotCQkgKi8KLQkJaWYgKHJldDIgPT0gLUVOT1NQQyAmJiAhZW5vc3BjKSB7Ci0JCQllcnJvciA9IHhmc19mbHVzaF9wYWdlcyh4aXAsIDAsIC0xLCAwLCBGSV9OT05FKTsKLQkJCWlmIChlcnJvcikKLQkJCQlnb3RvIG91dF91bmxvY2tfaW50ZXJuYWw7Ci0JCQllbm9zcGMgPSAxOwotCQkJZ290byB3cml0ZV9yZXRyeTsKLQkJfQotCQlyZXQgPSByZXQyOwotCX0KLQotCWN1cnJlbnQtPmJhY2tpbmdfZGV2X2luZm8gPSBOVUxMOwotCi0JaXNpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7Ci0JaWYgKHVubGlrZWx5KHJldCA8IDAgJiYgcmV0ICE9IC1FRkFVTFQgJiYgKm9mZnNldCA+IGlzaXplKSkKLQkJKm9mZnNldCA9IGlzaXplOwotCi0JaWYgKCpvZmZzZXQgPiB4aXAtPmlfc2l6ZSkgewotCQl4ZnNfaWxvY2soeGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JCWlmICgqb2Zmc2V0ID4geGlwLT5pX3NpemUpCi0JCQl4aXAtPmlfc2l6ZSA9ICpvZmZzZXQ7Ci0JCXhmc19pdW5sb2NrKHhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCX0KLQotCWlmIChyZXQgPT0gLUVOT1NQQyAmJgotCSAgICBETV9FVkVOVF9FTkFCTEVEKHhpcCwgRE1fRVZFTlRfTk9TUEFDRSkgJiYgIShpb2ZsYWdzICYgSU9fSU5WSVMpKSB7Ci0JCXhmc19pdW5sb2NrKHhpcCwgaW9sb2NrKTsKLQkJaWYgKG5lZWRfaV9tdXRleCkKLQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQllcnJvciA9IFhGU19TRU5EX05BTUVTUCh4aXAtPmlfbW91bnQsIERNX0VWRU5UX05PU1BBQ0UsIHhpcCwKLQkJCQlETV9SSUdIVF9OVUxMLCB4aXAsIERNX1JJR0hUX05VTEwsIE5VTEwsIE5VTEwsCi0JCQkJMCwgMCwgMCk7IC8qIERlbGF5IGZsYWcgaW50ZW50aW9uYWxseSAgdW51c2VkICovCi0JCWlmIChuZWVkX2lfbXV0ZXgpCi0JCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JCXhmc19pbG9jayh4aXAsIGlvbG9jayk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0X3VubG9ja19pbnRlcm5hbDsKLQkJZ290byBzdGFydDsKLQl9Ci0KLQllcnJvciA9IC1yZXQ7Ci0JaWYgKHJldCA8PSAwKQotCQlnb3RvIG91dF91bmxvY2tfaW50ZXJuYWw7Ci0KLQlYRlNfU1RBVFNfQUREKHhzX3dyaXRlX2J5dGVzLCByZXQpOwotCi0JLyogSGFuZGxlIHZhcmlvdXMgU1lOQy10eXBlIHdyaXRlcyAqLwotCWlmICgoZmlsZS0+Zl9mbGFncyAmIE9fRFNZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSB7Ci0JCWxvZmZfdCBlbmQgPSBwb3MgKyByZXQgLSAxOwotCQlpbnQgZXJyb3IyOwotCi0JCXhmc19pdW5sb2NrKHhpcCwgaW9sb2NrKTsKLQkJaWYgKG5lZWRfaV9tdXRleCkKLQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCi0JCWVycm9yMiA9IGZpbGVtYXBfd3JpdGVfYW5kX3dhaXRfcmFuZ2UobWFwcGluZywgcG9zLCBlbmQpOwotCQlpZiAoIWVycm9yKQotCQkJZXJyb3IgPSBlcnJvcjI7Ci0JCWlmIChuZWVkX2lfbXV0ZXgpCi0JCQltdXRleF9sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JCXhmc19pbG9jayh4aXAsIGlvbG9jayk7Ci0KLQkJZXJyb3IyID0geGZzX2ZzeW5jKHhpcCk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGVycm9yMjsKLQl9Ci0KLSBvdXRfdW5sb2NrX2ludGVybmFsOgotCWlmICh4aXAtPmlfbmV3X3NpemUpIHsKLQkJeGZzX2lsb2NrKHhpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCQl4aXAtPmlfbmV3X3NpemUgPSAwOwotCQkvKgotCQkgKiBJZiB0aGlzIHdhcyBhIGRpcmVjdCBvciBzeW5jaHJvbm91cyBJL08gdGhhdCBmYWlsZWQgKHN1Y2gKLQkJICogYXMgRU5PU1BDKSB0aGVuIHBhcnQgb2YgdGhlIEkvTyBtYXkgaGF2ZSBiZWVuIHdyaXR0ZW4gdG8KLQkJICogZGlzayBiZWZvcmUgdGhlIGVycm9yIG9jY3VyZWQuICBJbiB0aGlzIGNhc2UgdGhlIG9uLWRpc2sKLQkJICogZmlsZSBzaXplIG1heSBoYXZlIGJlZW4gYWRqdXN0ZWQgYmV5b25kIHRoZSBpbi1tZW1vcnkgZmlsZQotCQkgKiBzaXplIGFuZCBub3cgbmVlZHMgdG8gYmUgdHJ1bmNhdGVkIGJhY2suCi0JCSAqLwotCQlpZiAoeGlwLT5pX2QuZGlfc2l6ZSA+IHhpcC0+aV9zaXplKQotCQkJeGlwLT5pX2QuZGlfc2l6ZSA9IHhpcC0+aV9zaXplOwotCQl4ZnNfaXVubG9jayh4aXAsIFhGU19JTE9DS19FWENMKTsKLQl9Ci0JeGZzX2l1bmxvY2soeGlwLCBpb2xvY2spOwotIG91dF91bmxvY2tfbXV0ZXg6Ci0JaWYgKG5lZWRfaV9tdXRleCkKLQkJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci0JcmV0dXJuIC1lcnJvcjsKLX0KLQotLyoKLSAqIElmIHRoZSB1bmRlcmx5aW5nIChkYXRhL2xvZy9ydCkgZGV2aWNlIGlzIHJlYWRvbmx5LCB0aGVyZSBhcmUgc29tZQotICogb3BlcmF0aW9ucyB0aGF0IGNhbm5vdCBwcm9jZWVkLgotICovCi1pbnQKLXhmc19kZXZfaXNfcmVhZF9vbmx5KAotCXhmc19tb3VudF90CQkqbXAsCi0JY2hhcgkJCSptZXNzYWdlKQotewotCWlmICh4ZnNfcmVhZG9ubHlfYnVmdGFyZyhtcC0+bV9kZGV2X3RhcmdwKSB8fAotCSAgICB4ZnNfcmVhZG9ubHlfYnVmdGFyZyhtcC0+bV9sb2dkZXZfdGFyZ3ApIHx8Ci0JICAgIChtcC0+bV9ydGRldl90YXJncCAmJiB4ZnNfcmVhZG9ubHlfYnVmdGFyZyhtcC0+bV9ydGRldl90YXJncCkpKSB7Ci0JCWNtbl9lcnIoQ0VfTk9URSwKLQkJCSJYRlM6ICVzIHJlcXVpcmVkIG9uIHJlYWQtb25seSBkZXZpY2UuIiwgbWVzc2FnZSk7Ci0JCWNtbl9lcnIoQ0VfTk9URSwKLQkJCSJYRlM6IHdyaXRlIGFjY2VzcyB1bmF2YWlsYWJsZSwgY2Fubm90IHByb2NlZWQuIik7Ci0JCXJldHVybiBFUk9GUzsKLQl9Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19scncuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNDJhZThjLi4wMDAwMDAwCi0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAzLDIwMDUgU2lsaWNvbiBHcmFwaGljcywgSW5jLgotICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd291bGQgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCi0gKiBJbmMuLCAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotI2lmbmRlZiBfX1hGU19MUldfSF9fCi0jZGVmaW5lIF9fWEZTX0xSV19IX18KLQotc3RydWN0IHhmc19tb3VudDsKLXN0cnVjdCB4ZnNfaW5vZGU7Ci1zdHJ1Y3QgeGZzX2J1ZjsKLQotZXh0ZXJuIGludCB4ZnNfZGV2X2lzX3JlYWRfb25seShzdHJ1Y3QgeGZzX21vdW50ICosIGNoYXIgKik7Ci0KLWV4dGVybiBpbnQgeGZzX3plcm9fZW9mKHN0cnVjdCB4ZnNfaW5vZGUgKiwgeGZzX29mZl90LCB4ZnNfZnNpemVfdCk7Ci0KLSNlbmRpZgkvKiBfX1hGU19MUldfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfcXVvdGFvcHMuYwppbmRleCAzZDRhMGM4Li4xOTQ3NTE0IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19xdW90YW9wcy5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3F1b3Rhb3BzLmMKQEAgLTQ0LDIwICs0NCw2IEBACiB9CiAKIFNUQVRJQyBpbnQKLXhmc19mc19xdW90YV9zeW5jKAotCXN0cnVjdCBzdXBlcl9ibG9jawkqc2IsCi0JaW50CQkJdHlwZSkKLXsKLQlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IFhGU19NKHNiKTsKLQotCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKLQkJcmV0dXJuIC1FUk9GUzsKLQlpZiAoIVhGU19JU19RVU9UQV9SVU5OSU5HKG1wKSkKLQkJcmV0dXJuIC1FTk9TWVM7Ci0JcmV0dXJuIC14ZnNfc3luY19kYXRhKG1wLCAwKTsKLX0KLQotU1RBVElDIGludAogeGZzX2ZzX2dldF94c3RhdGUoCiAJc3RydWN0IHN1cGVyX2Jsb2NrCSpzYiwKIAlzdHJ1Y3QgZnNfcXVvdGFfc3RhdAkqZnFzKQpAQCAtODIsOCArNjgsNiBAQAogCQlyZXR1cm4gLUVST0ZTOwogCWlmIChvcCAhPSBRX1hRVU9UQVJNICYmICFYRlNfSVNfUVVPVEFfUlVOTklORyhtcCkpCiAJCXJldHVybiAtRU5PU1lTOwotCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKLQkJcmV0dXJuIC1FUEVSTTsKIAogCWlmICh1ZmxhZ3MgJiBYRlNfUVVPVEFfVURRX0FDQ1QpCiAJCWZsYWdzIHw9IFhGU19VUVVPVEFfQUNDVDsKQEAgLTE0NCwxNCArMTI4LDExIEBACiAJCXJldHVybiAtRU5PU1lTOwogCWlmICghWEZTX0lTX1FVT1RBX09OKG1wKSkKIAkJcmV0dXJuIC1FU1JDSDsKLQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCi0JCXJldHVybiAtRVBFUk07CiAKIAlyZXR1cm4gLXhmc19xbV9zY2FsbF9zZXRxbGltKG1wLCBpZCwgeGZzX3F1b3RhX3R5cGUodHlwZSksIGZkcSk7CiB9CiAKIGNvbnN0IHN0cnVjdCBxdW90YWN0bF9vcHMgeGZzX3F1b3RhY3RsX29wZXJhdGlvbnMgPSB7Ci0JLnF1b3RhX3N5bmMJCT0geGZzX2ZzX3F1b3RhX3N5bmMsCiAJLmdldF94c3RhdGUJCT0geGZzX2ZzX2dldF94c3RhdGUsCiAJLnNldF94c3RhdGUJCT0geGZzX2ZzX3NldF94c3RhdGUsCiAJLmdldF94cXVvdGEJCT0geGZzX2ZzX2dldF94cXVvdGEsCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwppbmRleCAyNWVhMjQwLi43MTM0NWEzIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKQEAgLTEwNjMsNyArMTA2Myw3IEBACiBTVEFUSUMgaW50CiB4ZnNfZnNfd3JpdGVfaW5vZGUoCiAJc3RydWN0IGlub2RlCQkqaW5vZGUsCi0JaW50CQkJc3luYykKKwlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlzdHJ1Y3QgeGZzX2lub2RlCSppcCA9IFhGU19JKGlub2RlKTsKIAlzdHJ1Y3QgeGZzX21vdW50CSptcCA9IGlwLT5pX21vdW50OwpAQCAtMTA3NCwxMSArMTA3NCw3IEBACiAJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAKLQlpZiAoc3luYykgewotCQllcnJvciA9IHhmc193YWl0X29uX3BhZ2VzKGlwLCAwLCAtMSk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0OwotCisJaWYgKHdiYy0+c3luY19tb2RlID09IFdCX1NZTkNfQUxMKSB7CiAJCS8qCiAJCSAqIE1ha2Ugc3VyZSB0aGUgaW5vZGUgaGFzIGhpdCBzdGFibGUgc3RvcmFnZS4gIEJ5IHVzaW5nIHRoZQogCQkgKiBsb2cgYW5kIHRoZSBmc3luYyB0cmFuc2FjdGlvbnMgd2UgcmVkdWNlIHRoZSBJT3Mgd2UgaGF2ZQpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3luYy5jCmluZGV4IGE5ZjZkMjAuLjA1Y2Q4NTMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N5bmMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19zeW5jLmMKQEAgLTYwNyw3ICs2MDcsOCBAQAogCXNldF9mcmVlemFibGUoKTsKIAl0aW1lbGVmdCA9IHhmc19zeW5jZF9jZW50aXNlY3MgKiBtc2Vjc190b19qaWZmaWVzKDEwKTsKIAlmb3IgKDs7KSB7Ci0JCXRpbWVsZWZ0ID0gc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKHRpbWVsZWZ0KTsKKwkJaWYgKGxpc3RfZW1wdHkoJm1wLT5tX3N5bmNfbGlzdCkpCisJCQl0aW1lbGVmdCA9IHNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSh0aW1lbGVmdCk7CiAJCS8qIHN3c3VzcCAqLwogCQl0cnlfdG9fZnJlZXplKCk7CiAJCWlmIChrdGhyZWFkX3Nob3VsZF9zdG9wKCkgJiYgbGlzdF9lbXB0eSgmbXAtPm1fc3luY19saXN0KSkKQEAgLTYyNyw4ICs2MjgsNyBAQAogCQkJbGlzdF9hZGRfdGFpbCgmbXAtPm1fc3luY193b3JrLndfbGlzdCwKIAkJCQkJJm1wLT5tX3N5bmNfbGlzdCk7CiAJCX0KLQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdvcmssIG4sICZtcC0+bV9zeW5jX2xpc3QsIHdfbGlzdCkKLQkJCWxpc3RfbW92ZSgmd29yay0+d19saXN0LCAmdG1wKTsKKwkJbGlzdF9zcGxpY2VfaW5pdCgmbXAtPm1fc3luY19saXN0LCAmdG1wKTsKIAkJc3Bpbl91bmxvY2soJm1wLT5tX3N5bmNfbG9jayk7CiAKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHdvcmssIG4sICZ0bXAsIHdfbGlzdCkgewpAQCAtNjg4LDEyICs2ODgsMTIgQEAKIAlzdHJ1Y3QgeGZzX3BlcmFnICpwYWc7CiAKIAlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBYRlNfSU5PX1RPX0FHTk8obXAsIGlwLT5pX2lubykpOwotCXJlYWRfbG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOworCXdyaXRlX2xvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKIAlzcGluX2xvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwogCV9feGZzX2lub2RlX3NldF9yZWNsYWltX3RhZyhwYWcsIGlwKTsKIAlfX3hmc19pZmxhZ3Nfc2V0KGlwLCBYRlNfSVJFQ0xBSU1BQkxFKTsKIAlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7Ci0JcmVhZF91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKKwl3cml0ZV91bmxvY2soJnBhZy0+cGFnX2ljaV9sb2NrKTsKIAl4ZnNfcGVyYWdfcHV0KHBhZyk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc190cmFjZS5jCmluZGV4IDg1NmViM2MuLjVhMTA3NjAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuYwpAQCAtNTIsMjIgKzUyLDYgQEAKICNpbmNsdWRlICJxdW90YS94ZnNfZHF1b3QuaCIKIAogLyoKLSAqIEZvcm1hdCBmc2Jsb2NrIG51bWJlciBpbnRvIGEgc3RhdGljIGJ1ZmZlciAmIHJldHVybiBpdC4KLSAqLwotU1RBVElDIGNoYXIgKnhmc19mbXRmc2Jsb2NrKHhmc19mc2Jsb2NrX3QgYm5vKQotewotCXN0YXRpYyBjaGFyIHJ2YWxbNTBdOwotCi0JaWYgKGJubyA9PSBOVUxMRlNCTE9DSykKLQkJc3ByaW50ZihydmFsLCAiTlVMTEZTQkxPQ0siKTsKLQllbHNlIGlmIChpc251bGxzdGFydGJsb2NrKGJubykpCi0JCXNwcmludGYocnZhbCwgIk5VTExTVEFSVEJMT0NLKCVsbGQpIiwgc3RhcnRibG9ja3ZhbChibm8pKTsKLQllbHNlCi0JCXNwcmludGYocnZhbCwgIiVsbGQiLCAoeGZzX2Rmc2Jub190KWJubyk7Ci0JcmV0dXJuIHJ2YWw7Ci19Ci0KLS8qCiAgKiBXZSBpbmNsdWRlIHRoaXMgbGFzdCB0byBoYXZlIHRoZSBoZWxwZXJzIGFib3ZlIGF2YWlsYWJsZSBmb3IgdGhlIHRyYWNlCiAgKiBldmVudCBpbXBsZW1lbnRhdGlvbnMuCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmggYi9mcy94ZnMvbGludXgtMi42L3hmc190cmFjZS5oCmluZGV4IGE0NTc0ZGMuLmZjYWE2MmYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3RyYWNlLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdHJhY2UuaApAQCAtMTk3LDEzICsxOTcsMTMgQEAKIAkJX19lbnRyeS0+Y2FsbGVyX2lwID0gY2FsbGVyX2lwOwogCSksCiAJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgaW5vIDB4JWxseCBzdGF0ZSAlcyBpZHggJWxkICIKLQkJICAib2Zmc2V0ICVsbGQgYmxvY2sgJXMgY291bnQgJWxsZCBmbGFnICVkIGNhbGxlciAlcGYiLAorCQkgICJvZmZzZXQgJWxsZCBibG9jayAlbGxkIGNvdW50ICVsbGQgZmxhZyAlZCBjYWxsZXIgJXBmIiwKIAkJICBNQUpPUihfX2VudHJ5LT5kZXYpLCBNSU5PUihfX2VudHJ5LT5kZXYpLAogCQkgIF9fZW50cnktPmlubywKIAkJICBfX3ByaW50X2ZsYWdzKF9fZW50cnktPmJtYXBfc3RhdGUsICJ8IiwgWEZTX0JNQVBfRVhUX0ZMQUdTKSwKIAkJICAobG9uZylfX2VudHJ5LT5pZHgsCiAJCSAgX19lbnRyeS0+c3RhcnRvZmYsCi0JCSAgeGZzX2ZtdGZzYmxvY2soX19lbnRyeS0+c3RhcnRibG9jayksCisJCSAgKF9faW50NjRfdClfX2VudHJ5LT5zdGFydGJsb2NrLAogCQkgIF9fZW50cnktPmJsb2NrY291bnQsCiAJCSAgX19lbnRyeS0+c3RhdGUsCiAJCSAgKGNoYXIgKilfX2VudHJ5LT5jYWxsZXJfaXApCkBAIC0yNDEsMTMgKzI0MSwxMyBAQAogCQlfX2VudHJ5LT5jYWxsZXJfaXAgPSBjYWxsZXJfaXA7CiAJKSwKIAlUUF9wcmludGsoImRldiAlZDolZCBpbm8gMHglbGx4IHN0YXRlICVzIGlkeCAlbGQgIgotCQkgICJvZmZzZXQgJWxsZCBibG9jayAlcyBjb3VudCAlbGxkIGZsYWcgJWQgY2FsbGVyICVwZiIsCisJCSAgIm9mZnNldCAlbGxkIGJsb2NrICVsbGQgY291bnQgJWxsZCBmbGFnICVkIGNhbGxlciAlcGYiLAogCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksCiAJCSAgX19lbnRyeS0+aW5vLAogCQkgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+Ym1hcF9zdGF0ZSwgInwiLCBYRlNfQk1BUF9FWFRfRkxBR1MpLAogCQkgIChsb25nKV9fZW50cnktPmlkeCwKIAkJICBfX2VudHJ5LT5zdGFydG9mZiwKLQkJICB4ZnNfZm10ZnNibG9jayhfX2VudHJ5LT5zdGFydGJsb2NrKSwKKwkJICAoX19pbnQ2NF90KV9fZW50cnktPnN0YXJ0YmxvY2ssCiAJCSAgX19lbnRyeS0+YmxvY2tjb3VudCwKIAkJICBfX2VudHJ5LT5zdGF0ZSwKIAkJICAoY2hhciAqKV9fZW50cnktPmNhbGxlcl9pcCkKQEAgLTU5Myw3ICs1OTMsNyBAQAogCVRQX0FSR1MoZHFwKSwKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlfX2ZpZWxkKGRldl90LCBkZXYpCi0JCV9fZmllbGQoX19iZTMyLCBpZCkKKwkJX19maWVsZCh1MzIsIGlkKQogCQlfX2ZpZWxkKHVuc2lnbmVkLCBmbGFncykKIAkJX19maWVsZCh1bnNpZ25lZCwgbnJlZnMpCiAJCV9fZmllbGQodW5zaWduZWQgbG9uZyBsb25nLCByZXNfYmNvdW50KQpAQCAtNjA2LDcgKzYwNiw3IEBACiAJKSwgXAogCVRQX2Zhc3RfYXNzaWduKAogCQlfX2VudHJ5LT5kZXYgPSBkcXAtPnFfbW91bnQtPm1fc3VwZXItPnNfZGV2OwotCQlfX2VudHJ5LT5pZCA9IGRxcC0+cV9jb3JlLmRfaWQ7CisJCV9fZW50cnktPmlkID0gYmUzMl90b19jcHUoZHFwLT5xX2NvcmUuZF9pZCk7CiAJCV9fZW50cnktPmZsYWdzID0gZHFwLT5kcV9mbGFnczsKIAkJX19lbnRyeS0+bnJlZnMgPSBkcXAtPnFfbnJlZnM7CiAJCV9fZW50cnktPnJlc19iY291bnQgPSBkcXAtPnFfcmVzX2Jjb3VudDsKQEAgLTYyMiwxMCArNjIyLDEwIEBACiAJCQliZTY0X3RvX2NwdShkcXAtPnFfY29yZS5kX2lub19zb2Z0bGltaXQpOwogCSksCiAJVFBfcHJpbnRrKCJkZXYgJWQ6JWQgaWQgMHgleCBmbGFncyAlcyBucmVmcyAldSByZXNfYmMgMHglbGx4ICIKLQkJICAiYmNudCAweCVsbHggW2hhcmQgMHglbGx4IHwgc29mdCAweCVsbHhdICIKLQkJICAiaWNudCAweCVsbHggW2hhcmQgMHglbGx4IHwgc29mdCAweCVsbHhdIiwKKwkJICAiYmNudCAweCVsbHggYmhhcmRsaW1pdCAweCVsbHggYnNvZnRsaW1pdCAweCVsbHggIgorCQkgICJpY250IDB4JWxseCBpaGFyZGxpbWl0IDB4JWxseCBpc29mdGxpbWl0IDB4JWxseF0iLAogCQkgIE1BSk9SKF9fZW50cnktPmRldiksIE1JTk9SKF9fZW50cnktPmRldiksCi0JCSAgYmUzMl90b19jcHUoX19lbnRyeS0+aWQpLAorCQkgIF9fZW50cnktPmlkLAogCQkgIF9fcHJpbnRfZmxhZ3MoX19lbnRyeS0+ZmxhZ3MsICJ8IiwgWEZTX0RRX0ZMQUdTKSwKIAkJICBfX2VudHJ5LT5ucmVmcywKIAkJICBfX2VudHJ5LT5yZXNfYmNvdW50LApAQCAtODgxLDcgKzg4MSw3IEBACiAJKSwgXAogCVRQX3ByaW50aygiZGV2ICVkOiVkIGlubyAweCVsbHggc2l6ZSAweCVsbHggbmV3X3NpemUgMHglbGx4ICIgXAogCQkgICJvZmZzZXQgMHglbGx4IGNvdW50ICV6ZCBmbGFncyAlcyAiIFwKLQkJICAic3RhcnRvZmYgMHglbGx4IHN0YXJ0YmxvY2sgJXMgYmxvY2tjb3VudCAweCVsbHgiLCBcCisJCSAgInN0YXJ0b2ZmIDB4JWxseCBzdGFydGJsb2NrICVsbGQgYmxvY2tjb3VudCAweCVsbHgiLCBcCiAJCSAgTUFKT1IoX19lbnRyeS0+ZGV2KSwgTUlOT1IoX19lbnRyeS0+ZGV2KSwgXAogCQkgIF9fZW50cnktPmlubywgXAogCQkgIF9fZW50cnktPnNpemUsIFwKQEAgLTg5MCw3ICs4OTAsNyBAQAogCQkgIF9fZW50cnktPmNvdW50LCBcCiAJCSAgX19wcmludF9mbGFncyhfX2VudHJ5LT5mbGFncywgInwiLCBCTUFQSV9GTEFHUyksIFwKIAkJICBfX2VudHJ5LT5zdGFydG9mZiwgXAotCQkgIHhmc19mbXRmc2Jsb2NrKF9fZW50cnktPnN0YXJ0YmxvY2spLCBcCisJCSAgKF9faW50NjRfdClfX2VudHJ5LT5zdGFydGJsb2NrLCBcCiAJCSAgX19lbnRyeS0+YmxvY2tjb3VudCkgXAogKQogREVGSU5FX0lPTUFQX0VWRU5UKHhmc19pb21hcF9lbnRlcik7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXAuYyBiL2ZzL3hmcy94ZnNfYm1hcC5jCmluZGV4IDE4NjlmYjkuLjVjMTFlNGQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcC5jCisrKyBiL2ZzL3hmcy94ZnNfYm1hcC5jCkBAIC0yNTUwLDIyICsyNTUwLDEzNCBAQAogfQogCiBTVEFUSUMgaW50Cit4ZnNfYm1hcF9idGFsbG9jX251bGxmYigKKwlzdHJ1Y3QgeGZzX2JtYWxsb2NhCSphcCwKKwlzdHJ1Y3QgeGZzX2FsbG9jX2FyZwkqYXJncywKKwl4ZnNfZXh0bGVuX3QJCSpibGVuKQoreworCXN0cnVjdCB4ZnNfbW91bnQJKm1wID0gYXAtPmlwLT5pX21vdW50OworCXN0cnVjdCB4ZnNfcGVyYWcJKnBhZzsKKwl4ZnNfYWdudW1iZXJfdAkJYWcsIHN0YXJ0YWc7CisJaW50CQkJbm90aW5pdCA9IDA7CisJaW50CQkJZXJyb3I7CisKKwlpZiAoYXAtPnVzZXJkYXRhICYmIHhmc19pbm9kZV9pc19maWxlc3RyZWFtKGFwLT5pcCkpCisJCWFyZ3MtPnR5cGUgPSBYRlNfQUxMT0NUWVBFX05FQVJfQk5POworCWVsc2UKKwkJYXJncy0+dHlwZSA9IFhGU19BTExPQ1RZUEVfU1RBUlRfQk5POworCWFyZ3MtPnRvdGFsID0gYXAtPnRvdGFsOworCisJLyoKKwkgKiBTZWFyY2ggZm9yIGFuIGFsbG9jYXRpb24gZ3JvdXAgd2l0aCBhIHNpbmdsZSBleHRlbnQgbGFyZ2UgZW5vdWdoCisJICogZm9yIHRoZSByZXF1ZXN0LiAgSWYgb25lIGlzbid0IGZvdW5kLCB0aGVuIGFkanVzdCB0aGUgbWluaW11bQorCSAqIGFsbG9jYXRpb24gc2l6ZSB0byB0aGUgbGFyZ2VzdCBzcGFjZSBmb3VuZC4KKwkgKi8KKwlzdGFydGFnID0gYWcgPSBYRlNfRlNCX1RPX0FHTk8obXAsIGFyZ3MtPmZzYm5vKTsKKwlpZiAoc3RhcnRhZyA9PSBOVUxMQUdOVU1CRVIpCisJCXN0YXJ0YWcgPSBhZyA9IDA7CisKKwlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZyk7CisJd2hpbGUgKCpibGVuIDwgYXAtPmFsZW4pIHsKKwkJaWYgKCFwYWctPnBhZ2ZfaW5pdCkgeworCQkJZXJyb3IgPSB4ZnNfYWxsb2NfcGFnZl9pbml0KG1wLCBhcmdzLT50cCwgYWcsCisJCQkJCQkgICAgWEZTX0FMTE9DX0ZMQUdfVFJZTE9DSyk7CisJCQlpZiAoZXJyb3IpIHsKKwkJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7CisJCQkJcmV0dXJuIGVycm9yOworCQkJfQorCQl9CisKKwkJLyoKKwkJICogU2VlIHhmc19hbGxvY19maXhfZnJlZWxpc3QuLi4KKwkJICovCisJCWlmIChwYWctPnBhZ2ZfaW5pdCkgeworCQkJeGZzX2V4dGxlbl90CWxvbmdlc3Q7CisJCQlsb25nZXN0ID0geGZzX2FsbG9jX2xvbmdlc3RfZnJlZV9leHRlbnQobXAsIHBhZyk7CisJCQlpZiAoKmJsZW4gPCBsb25nZXN0KQorCQkJCSpibGVuID0gbG9uZ2VzdDsKKwkJfSBlbHNlCisJCQlub3Rpbml0ID0gMTsKKworCQlpZiAoeGZzX2lub2RlX2lzX2ZpbGVzdHJlYW0oYXAtPmlwKSkgeworCQkJaWYgKCpibGVuID49IGFwLT5hbGVuKQorCQkJCWJyZWFrOworCisJCQlpZiAoYXAtPnVzZXJkYXRhKSB7CisJCQkJLyoKKwkJCQkgKiBJZiBzdGFydGFnIGlzIGFuIGludmFsaWQgQUcsIHdlJ3ZlCisJCQkJICogY29tZSBoZXJlIG9uY2UgYmVmb3JlIGFuZAorCQkJCSAqIHhmc19maWxlc3RyZWFtX25ld19hZyBwaWNrZWQgdGhlCisJCQkJICogYmVzdCBjdXJyZW50bHkgYXZhaWxhYmxlLgorCQkJCSAqCisJCQkJICogRG9uJ3QgY29udGludWUgbG9vcGluZywgc2luY2Ugd2UKKwkJCQkgKiBjb3VsZCBsb29wIGZvcmV2ZXIuCisJCQkJICovCisJCQkJaWYgKHN0YXJ0YWcgPT0gTlVMTEFHTlVNQkVSKQorCQkJCQlicmVhazsKKworCQkJCWVycm9yID0geGZzX2ZpbGVzdHJlYW1fbmV3X2FnKGFwLCAmYWcpOworCQkJCXhmc19wZXJhZ19wdXQocGFnKTsKKwkJCQlpZiAoZXJyb3IpCisJCQkJCXJldHVybiBlcnJvcjsKKworCQkJCS8qIGxvb3AgYWdhaW4gdG8gc2V0ICdibGVuJyovCisJCQkJc3RhcnRhZyA9IE5VTExBR05VTUJFUjsKKwkJCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZyk7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJaWYgKCsrYWcgPT0gbXAtPm1fc2Iuc2JfYWdjb3VudCkKKwkJCWFnID0gMDsKKwkJaWYgKGFnID09IHN0YXJ0YWcpCisJCQlicmVhazsKKwkJeGZzX3BlcmFnX3B1dChwYWcpOworCQlwYWcgPSB4ZnNfcGVyYWdfZ2V0KG1wLCBhZyk7CisJfQorCXhmc19wZXJhZ19wdXQocGFnKTsKKworCS8qCisJICogU2luY2UgdGhlIGFib3ZlIGxvb3AgZGlkIGEgQlVGX1RSWUxPQ0ssIGl0IGlzCisJICogcG9zc2libGUgdGhhdCB0aGVyZSBpcyBzcGFjZSBmb3IgdGhpcyByZXF1ZXN0LgorCSAqLworCWlmIChub3Rpbml0IHx8ICpibGVuIDwgYXAtPm1pbmxlbikKKwkJYXJncy0+bWlubGVuID0gYXAtPm1pbmxlbjsKKwkvKgorCSAqIElmIHRoZSBiZXN0IHNlZW4gbGVuZ3RoIGlzIGxlc3MgdGhhbiB0aGUgcmVxdWVzdAorCSAqIGxlbmd0aCwgdXNlIHRoZSBiZXN0IGFzIHRoZSBtaW5pbXVtLgorCSAqLworCWVsc2UgaWYgKCpibGVuIDwgYXAtPmFsZW4pCisJCWFyZ3MtPm1pbmxlbiA9ICpibGVuOworCS8qCisJICogT3RoZXJ3aXNlIHdlJ3ZlIHNlZW4gYW4gZXh0ZW50IGFzIGJpZyBhcyBhbGVuLAorCSAqIHVzZSB0aGF0IGFzIHRoZSBtaW5pbXVtLgorCSAqLworCWVsc2UKKwkJYXJncy0+bWlubGVuID0gYXAtPmFsZW47CisKKwkvKgorCSAqIHNldCB0aGUgZmFpbHVyZSBmYWxsYmFjayBjYXNlIHRvIGxvb2sgaW4gdGhlIHNlbGVjdGVkCisJICogQUcgYXMgdGhlIHN0cmVhbSBtYXkgaGF2ZSBtb3ZlZC4KKwkgKi8KKwlpZiAoeGZzX2lub2RlX2lzX2ZpbGVzdHJlYW0oYXAtPmlwKSkKKwkJYXAtPnJ2YWwgPSBhcmdzLT5mc2JubyA9IFhGU19BR0JfVE9fRlNCKG1wLCBhZywgMCk7CisKKwlyZXR1cm4gMDsKK30KKworU1RBVElDIGludAogeGZzX2JtYXBfYnRhbGxvYygKIAl4ZnNfYm1hbGxvY2FfdAkqYXApCQkvKiBibWFwIGFsbG9jIGFyZ3VtZW50IHN0cnVjdCAqLwogewogCXhmc19tb3VudF90CSptcDsJCS8qIG1vdW50IHBvaW50IHN0cnVjdHVyZSAqLwogCXhmc19hbGxvY3R5cGVfdAlhdHlwZSA9IDA7CS8qIHR5cGUgZm9yIGFsbG9jYXRpb24gcm91dGluZXMgKi8KIAl4ZnNfZXh0bGVuX3QJYWxpZ247CQkvKiBtaW5pbXVtIGFsbG9jYXRpb24gYWxpZ25tZW50ICovCi0JeGZzX2FnbnVtYmVyX3QJYWc7CiAJeGZzX2FnbnVtYmVyX3QJZmJfYWdubzsJLyogYWcgbnVtYmVyIG9mIGFwLT5maXJzdGJsb2NrICovCi0JeGZzX2FnbnVtYmVyX3QJc3RhcnRhZzsKKwl4ZnNfYWdudW1iZXJfdAlhZzsKIAl4ZnNfYWxsb2NfYXJnX3QJYXJnczsKIAl4ZnNfZXh0bGVuX3QJYmxlbjsKIAl4ZnNfZXh0bGVuX3QJbmV4dG1pbmxlbiA9IDA7Ci0JeGZzX3BlcmFnX3QJKnBhZzsKIAlpbnQJCW51bGxmYjsJCS8qIHRydWUgaWYgYXAtPmZpcnN0YmxvY2sgaXNuJ3Qgc2V0ICovCiAJaW50CQlpc2FsaWduZWQ7Ci0JaW50CQlub3Rpbml0OwogCWludAkJdHJ5YWdhaW47CiAJaW50CQllcnJvcjsKIApAQCAtMjYxMiwxMDMgKzI3MjQsOSBAQAogCWFyZ3MuZmlyc3RibG9jayA9IGFwLT5maXJzdGJsb2NrOwogCWJsZW4gPSAwOwogCWlmIChudWxsZmIpIHsKLQkJaWYgKGFwLT51c2VyZGF0YSAmJiB4ZnNfaW5vZGVfaXNfZmlsZXN0cmVhbShhcC0+aXApKQotCQkJYXJncy50eXBlID0gWEZTX0FMTE9DVFlQRV9ORUFSX0JOTzsKLQkJZWxzZQotCQkJYXJncy50eXBlID0gWEZTX0FMTE9DVFlQRV9TVEFSVF9CTk87Ci0JCWFyZ3MudG90YWwgPSBhcC0+dG90YWw7Ci0KLQkJLyoKLQkJICogU2VhcmNoIGZvciBhbiBhbGxvY2F0aW9uIGdyb3VwIHdpdGggYSBzaW5nbGUgZXh0ZW50Ci0JCSAqIGxhcmdlIGVub3VnaCBmb3IgdGhlIHJlcXVlc3QuCi0JCSAqCi0JCSAqIElmIG9uZSBpc24ndCBmb3VuZCwgdGhlbiBhZGp1c3QgdGhlIG1pbmltdW0gYWxsb2NhdGlvbgotCQkgKiBzaXplIHRvIHRoZSBsYXJnZXN0IHNwYWNlIGZvdW5kLgotCQkgKi8KLQkJc3RhcnRhZyA9IGFnID0gWEZTX0ZTQl9UT19BR05PKG1wLCBhcmdzLmZzYm5vKTsKLQkJaWYgKHN0YXJ0YWcgPT0gTlVMTEFHTlVNQkVSKQotCQkJc3RhcnRhZyA9IGFnID0gMDsKLQkJbm90aW5pdCA9IDA7Ci0JCXBhZyA9IHhmc19wZXJhZ19nZXQobXAsIGFnKTsKLQkJd2hpbGUgKGJsZW4gPCBhcC0+YWxlbikgewotCQkJaWYgKCFwYWctPnBhZ2ZfaW5pdCAmJgotCQkJICAgIChlcnJvciA9IHhmc19hbGxvY19wYWdmX2luaXQobXAsIGFyZ3MudHAsCi0JCQkJICAgIGFnLCBYRlNfQUxMT0NfRkxBR19UUllMT0NLKSkpIHsKLQkJCQl4ZnNfcGVyYWdfcHV0KHBhZyk7Ci0JCQkJcmV0dXJuIGVycm9yOwotCQkJfQotCQkJLyoKLQkJCSAqIFNlZSB4ZnNfYWxsb2NfZml4X2ZyZWVsaXN0Li4uCi0JCQkgKi8KLQkJCWlmIChwYWctPnBhZ2ZfaW5pdCkgewotCQkJCXhmc19leHRsZW5fdAlsb25nZXN0OwotCQkJCWxvbmdlc3QgPSB4ZnNfYWxsb2NfbG9uZ2VzdF9mcmVlX2V4dGVudChtcCwgcGFnKTsKLQkJCQlpZiAoYmxlbiA8IGxvbmdlc3QpCi0JCQkJCWJsZW4gPSBsb25nZXN0OwotCQkJfSBlbHNlCi0JCQkJbm90aW5pdCA9IDE7Ci0KLQkJCWlmICh4ZnNfaW5vZGVfaXNfZmlsZXN0cmVhbShhcC0+aXApKSB7Ci0JCQkJaWYgKGJsZW4gPj0gYXAtPmFsZW4pCi0JCQkJCWJyZWFrOwotCi0JCQkJaWYgKGFwLT51c2VyZGF0YSkgewotCQkJCQkvKgotCQkJCQkgKiBJZiBzdGFydGFnIGlzIGFuIGludmFsaWQgQUcsIHdlJ3ZlCi0JCQkJCSAqIGNvbWUgaGVyZSBvbmNlIGJlZm9yZSBhbmQKLQkJCQkJICogeGZzX2ZpbGVzdHJlYW1fbmV3X2FnIHBpY2tlZCB0aGUKLQkJCQkJICogYmVzdCBjdXJyZW50bHkgYXZhaWxhYmxlLgotCQkJCQkgKgotCQkJCQkgKiBEb24ndCBjb250aW51ZSBsb29waW5nLCBzaW5jZSB3ZQotCQkJCQkgKiBjb3VsZCBsb29wIGZvcmV2ZXIuCi0JCQkJCSAqLwotCQkJCQlpZiAoc3RhcnRhZyA9PSBOVUxMQUdOVU1CRVIpCi0JCQkJCQlicmVhazsKLQotCQkJCQllcnJvciA9IHhmc19maWxlc3RyZWFtX25ld19hZyhhcCwgJmFnKTsKLQkJCQkJeGZzX3BlcmFnX3B1dChwYWcpOwotCQkJCQlpZiAoZXJyb3IpCi0JCQkJCQlyZXR1cm4gZXJyb3I7Ci0KLQkJCQkJLyogbG9vcCBhZ2FpbiB0byBzZXQgJ2JsZW4nKi8KLQkJCQkJc3RhcnRhZyA9IE5VTExBR05VTUJFUjsKLQkJCQkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWcpOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoKythZyA9PSBtcC0+bV9zYi5zYl9hZ2NvdW50KQotCQkJCWFnID0gMDsKLQkJCWlmIChhZyA9PSBzdGFydGFnKQotCQkJCWJyZWFrOwotCQkJeGZzX3BlcmFnX3B1dChwYWcpOwotCQkJcGFnID0geGZzX3BlcmFnX2dldChtcCwgYWcpOwotCQl9Ci0JCXhmc19wZXJhZ19wdXQocGFnKTsKLQkJLyoKLQkJICogU2luY2UgdGhlIGFib3ZlIGxvb3AgZGlkIGEgQlVGX1RSWUxPQ0ssIGl0IGlzCi0JCSAqIHBvc3NpYmxlIHRoYXQgdGhlcmUgaXMgc3BhY2UgZm9yIHRoaXMgcmVxdWVzdC4KLQkJICovCi0JCWlmIChub3Rpbml0IHx8IGJsZW4gPCBhcC0+bWlubGVuKQotCQkJYXJncy5taW5sZW4gPSBhcC0+bWlubGVuOwotCQkvKgotCQkgKiBJZiB0aGUgYmVzdCBzZWVuIGxlbmd0aCBpcyBsZXNzIHRoYW4gdGhlIHJlcXVlc3QKLQkJICogbGVuZ3RoLCB1c2UgdGhlIGJlc3QgYXMgdGhlIG1pbmltdW0uCi0JCSAqLwotCQllbHNlIGlmIChibGVuIDwgYXAtPmFsZW4pCi0JCQlhcmdzLm1pbmxlbiA9IGJsZW47Ci0JCS8qCi0JCSAqIE90aGVyd2lzZSB3ZSd2ZSBzZWVuIGFuIGV4dGVudCBhcyBiaWcgYXMgYWxlbiwKLQkJICogdXNlIHRoYXQgYXMgdGhlIG1pbmltdW0uCi0JCSAqLwotCQllbHNlCi0JCQlhcmdzLm1pbmxlbiA9IGFwLT5hbGVuOwotCi0JCS8qCi0JCSAqIHNldCB0aGUgZmFpbHVyZSBmYWxsYmFjayBjYXNlIHRvIGxvb2sgaW4gdGhlIHNlbGVjdGVkCi0JCSAqIEFHIGFzIHRoZSBzdHJlYW0gbWF5IGhhdmUgbW92ZWQuCi0JCSAqLwotCQlpZiAoeGZzX2lub2RlX2lzX2ZpbGVzdHJlYW0oYXAtPmlwKSkKLQkJCWFwLT5ydmFsID0gYXJncy5mc2JubyA9IFhGU19BR0JfVE9fRlNCKG1wLCBhZywgMCk7CisJCWVycm9yID0geGZzX2JtYXBfYnRhbGxvY19udWxsZmIoYXAsICZhcmdzLCAmYmxlbik7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKIAl9IGVsc2UgaWYgKGFwLT5sb3cpIHsKIAkJaWYgKHhmc19pbm9kZV9pc19maWxlc3RyZWFtKGFwLT5pcCkpCiAJCQlhcmdzLnR5cGUgPSBYRlNfQUxMT0NUWVBFX0ZJUlNUX0FHOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19mcy5oIGIvZnMveGZzL3hmc19mcy5oCmluZGV4IGY1MmFjMjcuLjdjZjcyMjAgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZnMuaAorKysgYi9mcy94ZnMveGZzX2ZzLmgKQEAgLTI5Miw3ICsyOTIsOCBAQAogCV9fczMyCQlic19leHRlbnRzOwkvKiBudW1iZXIgb2YgZXh0ZW50cwkJKi8KIAlfX3UzMgkJYnNfZ2VuOwkJLyogZ2VuZXJhdGlvbiBjb3VudAkJKi8KIAlfX3UxNgkJYnNfcHJvamlkOwkvKiBwcm9qZWN0IGlkCQkJKi8KLQl1bnNpZ25lZCBjaGFyCWJzX3BhZFsxNF07CS8qIHBhZCBzcGFjZSwgdW51c2VkCQkqLworCV9fdTE2CQlic19mb3Jrb2ZmOwkvKiBpbm9kZSBmb3JrIG9mZnNldCBpbiBieXRlcwkqLworCXVuc2lnbmVkIGNoYXIJYnNfcGFkWzEyXTsJLyogcGFkIHNwYWNlLCB1bnVzZWQJCSovCiAJX191MzIJCWJzX2RtZXZtYXNrOwkvKiBETUlHIGV2ZW50IG1hc2sJCSovCiAJX191MTYJCWJzX2Rtc3RhdGU7CS8qIERNSUcgc3RhdGUgaW5mbwkJKi8KIAlfX3UxNgkJYnNfYWV4dGVudHM7CS8qIGF0dHJpYnV0ZSBudW1iZXIgb2YgZXh0ZW50cwkqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pZ2V0LmMgYi9mcy94ZnMveGZzX2lnZXQuYwppbmRleCBlMjgxZWI0Li42ODQ1ZGI5IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lnZXQuYworKysgYi9mcy94ZnMveGZzX2lnZXQuYwpAQCAtMTkwLDEzICsxOTAsMTIgQEAKIAkJdHJhY2VfeGZzX2lnZXRfcmVjbGFpbShpcCk7CiAKIAkJLyoKLQkJICogV2UgbmVlZCB0byBzZXQgWEZTX0lORVcgYXRvbWljYWxseSB3aXRoIGNsZWFyaW5nIHRoZQotCQkgKiByZWNsYWltYWJsZSB0YWcgc28gdGhhdCB3ZSBkbyBoYXZlIGFuIGluZGljYXRvciBvZiB0aGUKLQkJICogaW5vZGUgc3RpbGwgYmVpbmcgaW5pdGlhbGl6ZWQuCisJCSAqIFdlIG5lZWQgdG8gc2V0IFhGU19JUkVDTEFJTSB0byBwcmV2ZW50IHhmc19yZWNsYWltX2lub2RlCisJCSAqIGZyb20gc3RvbXBpbmcgb3ZlciB1cyB3aGlsZSB3ZSByZWN5Y2xlIHRoZSBpbm9kZS4gIFdlIGNhbid0CisJCSAqIGNsZWFyIHRoZSByYWRpeCB0cmVlIHJlY2xhaW1hYmxlIHRhZyB5ZXQgYXMgaXQgcmVxdWlyZXMKKwkJICogcGFnX2ljaV9sb2NrIHRvIGJlIGhlbGQgZXhjbHVzaXZlLgogCQkgKi8KLQkJaXAtPmlfZmxhZ3MgfD0gWEZTX0lORVc7Ci0JCWlwLT5pX2ZsYWdzICY9IH5YRlNfSVJFQ0xBSU1BQkxFOwotCQlfX3hmc19pbm9kZV9jbGVhcl9yZWNsYWltX3RhZyhtcCwgcGFnLCBpcCk7CisJCWlwLT5pX2ZsYWdzIHw9IFhGU19JUkVDTEFJTTsKIAogCQlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7CiAJCXJlYWRfdW5sb2NrKCZwYWctPnBhZ19pY2lfbG9jayk7CkBAIC0yMTYsNyArMjE1LDE1IEBACiAJCQl0cmFjZV94ZnNfaWdldF9yZWNsYWltKGlwKTsKIAkJCWdvdG8gb3V0X2Vycm9yOwogCQl9CisKKwkJd3JpdGVfbG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOworCQlzcGluX2xvY2soJmlwLT5pX2ZsYWdzX2xvY2spOworCQlpcC0+aV9mbGFncyAmPSB+KFhGU19JUkVDTEFJTUFCTEUgfCBYRlNfSVJFQ0xBSU0pOworCQlpcC0+aV9mbGFncyB8PSBYRlNfSU5FVzsKKwkJX194ZnNfaW5vZGVfY2xlYXJfcmVjbGFpbV90YWcobXAsIHBhZywgaXApOwogCQlpbm9kZS0+aV9zdGF0ZSA9IElfTkVXOworCQlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7CisJCXdyaXRlX3VubG9jaygmcGFnLT5wYWdfaWNpX2xvY2spOwogCX0gZWxzZSB7CiAJCS8qIElmIHRoZSBWRlMgaW5vZGUgaXMgYmVpbmcgdG9ybiBkb3duLCBwYXVzZSBhbmQgdHJ5IGFnYWluLiAqLwogCQlpZiAoIWlncmFiKGlub2RlKSkgewpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZS5jIGIvZnMveGZzL3hmc19pbm9kZS5jCmluZGV4IGZhMzEzNjAuLjBmZmQ1NjQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGUuYworKysgYi9mcy94ZnMveGZzX2lub2RlLmMKQEAgLTI0MzksNzUgKzI0MzksMzEgQEAKIH0KIAogLyoKLSAqIEluY3JlbWVudCB0aGUgcGluIGNvdW50IG9mIHRoZSBnaXZlbiBidWZmZXIuCi0gKiBUaGlzIHZhbHVlIGlzIHByb3RlY3RlZCBieSBpcGlubG9jayBzcGlubG9jayBpbiB0aGUgbW91bnQgc3RydWN0dXJlLgorICogVGhpcyBpcyBjYWxsZWQgdG8gdW5waW4gYW4gaW5vZGUuICBUaGUgY2FsbGVyIG11c3QgaGF2ZSB0aGUgaW5vZGUgbG9ja2VkCisgKiBpbiBhdCBsZWFzdCBzaGFyZWQgbW9kZSBzbyB0aGF0IHRoZSBidWZmZXIgY2Fubm90IGJlIHN1YnNlcXVlbnRseSBwaW5uZWQKKyAqIG9uY2Ugc29tZW9uZSBpcyB3YWl0aW5nIGZvciBpdCB0byBiZSB1bnBpbm5lZC4KICAqLwotdm9pZAoteGZzX2lwaW4oCi0JeGZzX2lub2RlX3QJKmlwKQorc3RhdGljIHZvaWQKK3hmc19pdW5waW5fbm93YWl0KAorCXN0cnVjdCB4ZnNfaW5vZGUJKmlwKQogewotCUFTU0VSVCh4ZnNfaXNpbG9ja2VkKGlwLCBYRlNfSUxPQ0tfRVhDTCkpOwotCi0JYXRvbWljX2luYygmaXAtPmlfcGluY291bnQpOwotfQotCi0vKgotICogRGVjcmVtZW50IHRoZSBwaW4gY291bnQgb2YgdGhlIGdpdmVuIGlub2RlLCBhbmQgd2FrZSB1cAotICogYW55b25lIGluIHhmc19pd2FpdF91bnBpbigpIGlmIHRoZSBjb3VudCBnb2VzIHRvIDAuICBUaGUKLSAqIGlub2RlIG11c3QgaGF2ZSBiZWVuIHByZXZpb3VzbHkgcGlubmVkIHdpdGggYSBjYWxsIHRvIHhmc19pcGluKCkuCi0gKi8KLXZvaWQKLXhmc19pdW5waW4oCi0JeGZzX2lub2RlX3QJKmlwKQotewotCUFTU0VSVChhdG9taWNfcmVhZCgmaXAtPmlfcGluY291bnQpID4gMCk7Ci0KLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaXAtPmlfcGluY291bnQpKQotCQl3YWtlX3VwKCZpcC0+aV9pcGluX3dhaXQpOwotfQotCi0vKgotICogVGhpcyBpcyBjYWxsZWQgdG8gdW5waW4gYW4gaW5vZGUuIEl0IGNhbiBiZSBkaXJlY3RlZCB0byB3YWl0IG9yIHRvIHJldHVybgotICogaW1tZWRpYXRlbHkgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgaW5vZGUgdG8gYmUgdW5waW5uZWQuICBUaGUgY2FsbGVyIG11c3QKLSAqIGhhdmUgdGhlIGlub2RlIGxvY2tlZCBpbiBhdCBsZWFzdCBzaGFyZWQgbW9kZSBzbyB0aGF0IHRoZSBidWZmZXIgY2Fubm90IGJlCi0gKiBzdWJzZXF1ZW50bHkgcGlubmVkIG9uY2Ugc29tZW9uZSBpcyB3YWl0aW5nIGZvciBpdCB0byBiZSB1bnBpbm5lZC4KLSAqLwotU1RBVElDIHZvaWQKLV9feGZzX2l1bnBpbl93YWl0KAotCXhmc19pbm9kZV90CSppcCwKLQlpbnQJCXdhaXQpCi17Ci0JeGZzX2lub2RlX2xvZ19pdGVtX3QJKmlpcCA9IGlwLT5pX2l0ZW1wOwotCiAJQVNTRVJUKHhmc19pc2lsb2NrZWQoaXAsIFhGU19JTE9DS19FWENMfFhGU19JTE9DS19TSEFSRUQpKTsKLQlpZiAoYXRvbWljX3JlYWQoJmlwLT5pX3BpbmNvdW50KSA9PSAwKQotCQlyZXR1cm47CiAKIAkvKiBHaXZlIHRoZSBsb2cgYSBwdXNoIHRvIHN0YXJ0IHRoZSB1bnBpbm5pbmcgSS9PICovCi0JaWYgKGlpcCAmJiBpaXAtPmlsaV9sYXN0X2xzbikKLQkJeGZzX2xvZ19mb3JjZV9sc24oaXAtPmlfbW91bnQsIGlpcC0+aWxpX2xhc3RfbHNuLCAwKTsKLQllbHNlCi0JCXhmc19sb2dfZm9yY2UoaXAtPmlfbW91bnQsIDApOworCXhmc19sb2dfZm9yY2VfbHNuKGlwLT5pX21vdW50LCBpcC0+aV9pdGVtcC0+aWxpX2xhc3RfbHNuLCAwKTsKIAotCWlmICh3YWl0KQotCQl3YWl0X2V2ZW50KGlwLT5pX2lwaW5fd2FpdCwgKGF0b21pY19yZWFkKCZpcC0+aV9waW5jb3VudCkgPT0gMCkpOwogfQogCiB2b2lkCiB4ZnNfaXVucGluX3dhaXQoCi0JeGZzX2lub2RlX3QJKmlwKQorCXN0cnVjdCB4ZnNfaW5vZGUJKmlwKQogewotCV9feGZzX2l1bnBpbl93YWl0KGlwLCAxKTsKKwlpZiAoeGZzX2lwaW5jb3VudChpcCkpIHsKKwkJeGZzX2l1bnBpbl9ub3dhaXQoaXApOworCQl3YWl0X2V2ZW50KGlwLT5pX2lwaW5fd2FpdCwgKHhmc19pcGluY291bnQoaXApID09IDApKTsKKwl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAoteGZzX2l1bnBpbl9ub3dhaXQoCi0JeGZzX2lub2RlX3QJKmlwKQotewotCV9feGZzX2l1bnBpbl93YWl0KGlwLCAwKTsKLX0KLQotCiAvKgogICogeGZzX2lleHRlbnRzX2NvcHkoKQogICoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuaCBiL2ZzL3hmcy94ZnNfaW5vZGUuaAppbmRleCA2YzkxMmIwLi45OTY1ZTQwYSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuaApAQCAtNDcxLDggKzQ3MSw2IEBACiBpbnQJCXhmc19pdW5saW5rKHN0cnVjdCB4ZnNfdHJhbnMgKiwgeGZzX2lub2RlX3QgKik7CiAKIHZvaWQJCXhmc19pZXh0X3JlYWxsb2MoeGZzX2lub2RlX3QgKiwgaW50LCBpbnQpOwotdm9pZAkJeGZzX2lwaW4oeGZzX2lub2RlX3QgKik7Ci12b2lkCQl4ZnNfaXVucGluKHhmc19pbm9kZV90ICopOwogdm9pZAkJeGZzX2l1bnBpbl93YWl0KHhmc19pbm9kZV90ICopOwogaW50CQl4ZnNfaWZsdXNoKHhmc19pbm9kZV90ICosIHVpbnQpOwogdm9pZAkJeGZzX2ljaGd0aW1lKHhmc19pbm9kZV90ICosIGludCk7CkBAIC00ODAsNiArNDc4LDcgQEAKIHZvaWQJCXhmc19sb2NrX3R3b19pbm9kZXMoeGZzX2lub2RlX3QgKiwgeGZzX2lub2RlX3QgKiwgdWludCk7CiAKIHZvaWQJCXhmc19zeW5jaHJvbml6ZV90aW1lcyh4ZnNfaW5vZGVfdCAqKTsKK3ZvaWQJCXhmc19tYXJrX2lub2RlX2RpcnR5KHhmc19pbm9kZV90ICopOwogdm9pZAkJeGZzX21hcmtfaW5vZGVfZGlydHlfc3luYyh4ZnNfaW5vZGVfdCAqKTsKIAogI2RlZmluZSBJSE9MRChpcCkgXApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZV9pdGVtLmMgYi9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYwppbmRleCBkNGRjMDYzLi43YmZlYTg1IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYworKysgYi9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYwpAQCAtNTM1LDIzICs1MzUsMjMgQEAKIAogLyoKICAqIFRoaXMgaXMgY2FsbGVkIHRvIHBpbiB0aGUgaW5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbm9kZSBsb2cKLSAqIGl0ZW0gaW4gbWVtb3J5IHNvIGl0IGNhbm5vdCBiZSB3cml0dGVuIG91dC4gIERvIHRoaXMgYnkgY2FsbGluZwotICogeGZzX2lwaW4oKSB0byBidW1wIHRoZSBwaW4gY291bnQgaW4gdGhlIGlub2RlIHdoaWxlIGhvbGRpbmcgdGhlCi0gKiBpbm9kZSBwaW4gbG9jay4KKyAqIGl0ZW0gaW4gbWVtb3J5IHNvIGl0IGNhbm5vdCBiZSB3cml0dGVuIG91dC4KICAqLwogU1RBVElDIHZvaWQKIHhmc19pbm9kZV9pdGVtX3BpbigKIAl4ZnNfaW5vZGVfbG9nX2l0ZW1fdAkqaWlwKQogewogCUFTU0VSVCh4ZnNfaXNpbG9ja2VkKGlpcC0+aWxpX2lub2RlLCBYRlNfSUxPQ0tfRVhDTCkpOwotCXhmc19pcGluKGlpcC0+aWxpX2lub2RlKTsKKworCWF0b21pY19pbmMoJmlpcC0+aWxpX2lub2RlLT5pX3BpbmNvdW50KTsKIH0KIAogCiAvKgogICogVGhpcyBpcyBjYWxsZWQgdG8gdW5waW4gdGhlIGlub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5vZGUgbG9nCiAgKiBpdGVtIHdoaWNoIHdhcyBwcmV2aW91c2x5IHBpbm5lZCB3aXRoIGEgY2FsbCB0byB4ZnNfaW5vZGVfaXRlbV9waW4oKS4KLSAqIEp1c3QgY2FsbCB4ZnNfaXVucGluKCkgb24gdGhlIGlub2RlIHRvIGRvIHRoaXMuCisgKgorICogQWxzbyB3YWtlIHVwIGFueW9uZSBpbiB4ZnNfaXVucGluX3dhaXQoKSBpZiB0aGUgY291bnQgZ29lcyB0byAwLgogICovCiAvKiBBUkdTVVNFRCAqLwogU1RBVElDIHZvaWQKQEAgLTU1OSw3ICs1NTksMTEgQEAKIAl4ZnNfaW5vZGVfbG9nX2l0ZW1fdAkqaWlwLAogCWludAkJCXN0YWxlKQogewotCXhmc19pdW5waW4oaWlwLT5pbGlfaW5vZGUpOworCXN0cnVjdCB4ZnNfaW5vZGUJKmlwID0gaWlwLT5pbGlfaW5vZGU7CisKKwlBU1NFUlQoYXRvbWljX3JlYWQoJmlwLT5pX3BpbmNvdW50KSA+IDApOworCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZpcC0+aV9waW5jb3VudCkpCisJCXdha2VfdXAoJmlwLT5pX2lwaW5fd2FpdCk7CiB9CiAKIC8qIEFSR1NVU0VEICovCkBAIC01NjgsNyArNTcyLDcgQEAKIAl4ZnNfaW5vZGVfbG9nX2l0ZW1fdAkqaWlwLAogCXhmc190cmFuc190CQkqdHApCiB7Ci0JeGZzX2l1bnBpbihpaXAtPmlsaV9pbm9kZSk7CisJeGZzX2lub2RlX2l0ZW1fdW5waW4oaWlwLCAwKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMgYi9mcy94ZnMveGZzX2l0YWJsZS5jCmluZGV4IDNhZjAyMzEuLmIxYjgwMWUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMKKysrIGIvZnMveGZzL3hmc19pdGFibGUuYwpAQCAtMTA2LDYgKzEwNiw3IEBACiAJYnVmLT5ic19kbWV2bWFzayA9IGRpYy0+ZGlfZG1ldm1hc2s7CiAJYnVmLT5ic19kbXN0YXRlID0gZGljLT5kaV9kbXN0YXRlOwogCWJ1Zi0+YnNfYWV4dGVudHMgPSBkaWMtPmRpX2FuZXh0ZW50czsKKwlidWYtPmJzX2ZvcmtvZmYgPSBYRlNfSUZPUktfQk9GRihpcCk7CiAKIAlzd2l0Y2ggKGRpYy0+ZGlfZm9ybWF0KSB7CiAJY2FzZSBYRlNfRElOT0RFX0ZNVF9ERVY6CkBAIC0xNzYsNiArMTc3LDcgQEAKIAlidWYtPmJzX2RtZXZtYXNrID0gYmUzMl90b19jcHUoZGljLT5kaV9kbWV2bWFzayk7CiAJYnVmLT5ic19kbXN0YXRlID0gYmUxNl90b19jcHUoZGljLT5kaV9kbXN0YXRlKTsKIAlidWYtPmJzX2FleHRlbnRzID0gYmUxNl90b19jcHUoZGljLT5kaV9hbmV4dGVudHMpOworCWJ1Zi0+YnNfZm9ya29mZiA9IFhGU19ERk9SS19CT0ZGKGRpYyk7CiAKIAlzd2l0Y2ggKGRpYy0+ZGlfZm9ybWF0KSB7CiAJY2FzZSBYRlNfRElOT0RFX0ZNVF9ERVY6CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZy5jIGIvZnMveGZzL3hmc19sb2cuYwppbmRleCA0ZjE2YmU0Li5lOGZiYTkyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZy5jCisrKyBiL2ZzL3hmcy94ZnNfbG9nLmMKQEAgLTYwLDcgKzYwLDcgQEAKIFNUQVRJQyBpbnQJIHhsb2dfc3luYyh4bG9nX3QgKmxvZywgeGxvZ19pbl9jb3JlX3QgKmljbG9nKTsKIFNUQVRJQyB2b2lkCSB4bG9nX2RlYWxsb2NfbG9nKHhsb2dfdCAqbG9nKTsKIFNUQVRJQyBpbnQJIHhsb2dfd3JpdGUoeGZzX21vdW50X3QgKm1wLCB4ZnNfbG9nX2lvdmVjX3QgcmVnaW9uW10sCi0JCQkgICAgaW50IG5lbnRyaWVzLCB4ZnNfbG9nX3RpY2tldF90IHRpYywKKwkJCSAgICBpbnQgbmVudHJpZXMsIHN0cnVjdCB4bG9nX3RpY2tldCAqdGljLAogCQkJICAgIHhmc19sc25fdCAqc3RhcnRfbHNuLAogCQkJICAgIHhsb2dfaW5fY29yZV90ICoqY29tbWl0X2ljbG9nLAogCQkJICAgIHVpbnQgZmxhZ3MpOwpAQCAtMjQzLDE0ICsyNDMsMTQgQEAKICAqIG91dCB3aGVuIHRoZSBuZXh0IHdyaXRlIG9jY3Vycy4KICAqLwogeGZzX2xzbl90Ci14ZnNfbG9nX2RvbmUoeGZzX21vdW50X3QJKm1wLAotCSAgICAgeGZzX2xvZ190aWNrZXRfdAl4dGljLAotCSAgICAgdm9pZAkJKippY2xvZywKLQkgICAgIHVpbnQJCWZsYWdzKQoreGZzX2xvZ19kb25lKAorCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAorCXN0cnVjdCB4bG9nX3RpY2tldAkqdGlja2V0LAorCXN0cnVjdCB4bG9nX2luX2NvcmUJKippY2xvZywKKwl1aW50CQkJZmxhZ3MpCiB7Ci0JeGxvZ190CQkqbG9nICAgID0gbXAtPm1fbG9nOwotCXhsb2dfdGlja2V0X3QJKnRpY2tldCA9ICh4ZnNfbG9nX3RpY2tldF90KSB4dGljOwotCXhmc19sc25fdAlsc24JPSAwOworCXN0cnVjdCBsb2cJCSpsb2cgPSBtcC0+bV9sb2c7CisJeGZzX2xzbl90CQlsc24gPSAwOwogCiAJaWYgKFhMT0dfRk9SQ0VEX1NIVVRET1dOKGxvZykgfHwKIAkgICAgLyoKQEAgLTI1OCw4ICsyNTgsNyBAQAogCSAgICAgKiBJZiB3ZSBnZXQgYW4gZXJyb3IsIGp1c3QgY29udGludWUgYW5kIGdpdmUgYmFjayB0aGUgbG9nIHRpY2tldC4KIAkgICAgICovCiAJICAgICgoKHRpY2tldC0+dF9mbGFncyAmIFhMT0dfVElDX0lOSVRFRCkgPT0gMCkgJiYKLQkgICAgICh4bG9nX2NvbW1pdF9yZWNvcmQobXAsIHRpY2tldCwKLQkJCQkgKHhsb2dfaW5fY29yZV90ICoqKWljbG9nLCAmbHNuKSkpKSB7CisJICAgICAoeGxvZ19jb21taXRfcmVjb3JkKG1wLCB0aWNrZXQsIGljbG9nLCAmbHNuKSkpKSB7CiAJCWxzbiA9ICh4ZnNfbHNuX3QpIC0xOwogCQlpZiAodGlja2V0LT50X2ZsYWdzICYgWExPR19USUNfUEVSTV9SRVNFUlYpIHsKIAkJCWZsYWdzIHw9IFhGU19MT0dfUkVMX1BFUk1fUkVTRVJWOwpAQCAtMjg5LDcgKzI4OCw3IEBACiAJfQogCiAJcmV0dXJuIGxzbjsKLX0JLyogeGZzX2xvZ19kb25lICovCit9CiAKIC8qCiAgKiBBdHRhY2hlcyBhIG5ldyBpY2xvZyBJL08gY29tcGxldGlvbiBjYWxsYmFjayByb3V0aW5lIGR1cmluZwpAQCAtMjk4LDExICsyOTcsMTEgQEAKICAqIGV4ZWN1dGluZyB0aGUgY2FsbGJhY2sgYXQgYW4gYXBwcm9wcmlhdGUgdGltZS4KICAqLwogaW50Ci14ZnNfbG9nX25vdGlmeSh4ZnNfbW91bnRfdAkgICptcCwJCS8qIG1vdW50IG9mIHBhcnRpdGlvbiAqLwotCSAgICAgICB2b2lkCQkgICppY2xvZ19obmRsLAkvKiBpY2xvZyB0byBoYW5nIGNhbGxiYWNrIG9mZiAqLwotCSAgICAgICB4ZnNfbG9nX2NhbGxiYWNrX3QgKmNiKQoreGZzX2xvZ19ub3RpZnkoCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJc3RydWN0IHhsb2dfaW5fY29yZQkqaWNsb2csCisJeGZzX2xvZ19jYWxsYmFja190CSpjYikKIHsKLQl4bG9nX2luX2NvcmVfdAkgICppY2xvZyA9ICh4bG9nX2luX2NvcmVfdCAqKWljbG9nX2huZGw7CiAJaW50CWFib3J0ZmxnOwogCiAJc3Bpbl9sb2NrKCZpY2xvZy0+aWNfY2FsbGJhY2tfbG9jayk7CkBAIC0zMTYsMTYgKzMxNSwxNCBAQAogCX0KIAlzcGluX3VubG9jaygmaWNsb2ctPmljX2NhbGxiYWNrX2xvY2spOwogCXJldHVybiBhYm9ydGZsZzsKLX0JLyogeGZzX2xvZ19ub3RpZnkgKi8KK30KIAogaW50Ci14ZnNfbG9nX3JlbGVhc2VfaWNsb2coeGZzX21vdW50X3QgKm1wLAotCQkgICAgICB2b2lkCSAgKmljbG9nX2huZGwpCit4ZnNfbG9nX3JlbGVhc2VfaWNsb2coCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJc3RydWN0IHhsb2dfaW5fY29yZQkqaWNsb2cpCiB7Ci0JeGxvZ190ICpsb2cgPSBtcC0+bV9sb2c7Ci0JeGxvZ19pbl9jb3JlX3QJICAqaWNsb2cgPSAoeGxvZ19pbl9jb3JlX3QgKilpY2xvZ19obmRsOwotCi0JaWYgKHhsb2dfc3RhdGVfcmVsZWFzZV9pY2xvZyhsb2csIGljbG9nKSkgeworCWlmICh4bG9nX3N0YXRlX3JlbGVhc2VfaWNsb2cobXAtPm1fbG9nLCBpY2xvZykpIHsKIAkJeGZzX2ZvcmNlX3NodXRkb3duKG1wLCBTSFVURE9XTl9MT0dfSU9fRVJST1IpOwogCQlyZXR1cm4gRUlPOwogCX0KQEAgLTM0NCwxNyArMzQxLDE4IEBACiAgKiByZXNlcnZhdGlvbiwgd2UgcHJldmVudCBvdmVyIGFsbG9jYXRpb24gcHJvYmxlbXMuCiAgKi8KIGludAoteGZzX2xvZ19yZXNlcnZlKHhmc19tb3VudF90CSAqbXAsCi0JCWludAkJIHVuaXRfYnl0ZXMsCi0JCWludAkJIGNudCwKLQkJeGZzX2xvZ190aWNrZXRfdCAqdGlja2V0LAotCQlfX3VpbnQ4X3QJIGNsaWVudCwKLQkJdWludAkJIGZsYWdzLAotCQl1aW50CQkgdF90eXBlKQoreGZzX2xvZ19yZXNlcnZlKAorCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAorCWludAkJIAl1bml0X2J5dGVzLAorCWludAkJIAljbnQsCisJc3RydWN0IHhsb2dfdGlja2V0CSoqdGlja2V0LAorCV9fdWludDhfdAkgCWNsaWVudCwKKwl1aW50CQkgCWZsYWdzLAorCXVpbnQJCSAJdF90eXBlKQogewotCXhsb2dfdAkJKmxvZyA9IG1wLT5tX2xvZzsKLQl4bG9nX3RpY2tldF90CSppbnRlcm5hbF90aWNrZXQ7Ci0JaW50CQlyZXR2YWwgPSAwOworCXN0cnVjdCBsb2cJCSpsb2cgPSBtcC0+bV9sb2c7CisJc3RydWN0IHhsb2dfdGlja2V0CSppbnRlcm5hbF90aWNrZXQ7CisJaW50CQkJcmV0dmFsID0gMDsKIAogCUFTU0VSVChjbGllbnQgPT0gWEZTX1RSQU5TQUNUSU9OIHx8IGNsaWVudCA9PSBYRlNfTE9HKTsKIAlBU1NFUlQoKGZsYWdzICYgWEZTX0xPR19OT1NMRUVQKSA9PSAwKTsKQEAgLTM2Nyw3ICszNjUsNyBAQAogCiAJaWYgKCp0aWNrZXQgIT0gTlVMTCkgewogCQlBU1NFUlQoZmxhZ3MgJiBYRlNfTE9HX1BFUk1fUkVTRVJWKTsKLQkJaW50ZXJuYWxfdGlja2V0ID0gKHhsb2dfdGlja2V0X3QgKikqdGlja2V0OworCQlpbnRlcm5hbF90aWNrZXQgPSAqdGlja2V0OwogCiAJCXRyYWNlX3hmc19sb2dfcmVzZXJ2ZShsb2csIGludGVybmFsX3RpY2tldCk7CiAKQEAgLTUxOSw3ICs1MTcsNyBAQAogCXhsb2dfaW5fY29yZV90CSAqZmlyc3RfaWNsb2c7CiAjZW5kaWYKIAl4ZnNfbG9nX2lvdmVjX3QgIHJlZ1sxXTsKLQl4ZnNfbG9nX3RpY2tldF90IHRpYyA9IE5VTEw7CisJeGxvZ190aWNrZXRfdAkqdGljID0gTlVMTDsKIAl4ZnNfbHNuX3QJIGxzbjsKIAlpbnQJCSBlcnJvcjsKIApAQCAtNjU2LDI0ICs2NTQsMjQgQEAKICAqIHRyYW5zYWN0aW9uIG9jY3VyIHdpdGggb25lIGNhbGwgdG8geGZzX2xvZ193cml0ZSgpLgogICovCiBpbnQKLXhmc19sb2dfd3JpdGUoeGZzX21vdW50X3QgKgltcCwKLQkgICAgICB4ZnNfbG9nX2lvdmVjX3QJcmVnW10sCi0JICAgICAgaW50CQluZW50cmllcywKLQkgICAgICB4ZnNfbG9nX3RpY2tldF90CXRpYywKLQkgICAgICB4ZnNfbHNuX3QJCSpzdGFydF9sc24pCit4ZnNfbG9nX3dyaXRlKAorCXN0cnVjdCB4ZnNfbW91bnQJKm1wLAorCXN0cnVjdCB4ZnNfbG9nX2lvdmVjCXJlZ1tdLAorCWludAkJCW5lbnRyaWVzLAorCXN0cnVjdCB4bG9nX3RpY2tldAkqdGljLAorCXhmc19sc25fdAkJKnN0YXJ0X2xzbikKIHsKLQlpbnQJZXJyb3I7Ci0JeGxvZ190ICpsb2cgPSBtcC0+bV9sb2c7CisJc3RydWN0IGxvZwkJKmxvZyA9IG1wLT5tX2xvZzsKKwlpbnQJCQllcnJvcjsKIAogCWlmIChYTE9HX0ZPUkNFRF9TSFVURE9XTihsb2cpKQogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAKLQlpZiAoKGVycm9yID0geGxvZ193cml0ZShtcCwgcmVnLCBuZW50cmllcywgdGljLCBzdGFydF9sc24sIE5VTEwsIDApKSkgeworCWVycm9yID0geGxvZ193cml0ZShtcCwgcmVnLCBuZW50cmllcywgdGljLCBzdGFydF9sc24sIE5VTEwsIDApOworCWlmIChlcnJvcikKIAkJeGZzX2ZvcmNlX3NodXRkb3duKG1wLCBTSFVURE9XTl9MT0dfSU9fRVJST1IpOwotCX0KIAlyZXR1cm4gZXJyb3I7Ci19CS8qIHhmc19sb2dfd3JpdGUgKi8KLQorfQogCiB2b2lkCiB4ZnNfbG9nX21vdmVfdGFpbCh4ZnNfbW91bnRfdAkqbXAsCkBAIC0xNjQyLDE2ICsxNjQwLDE2IEBACiAgKglieXRlcyBoYXZlIGJlZW4gd3JpdHRlbiBvdXQuCiAgKi8KIFNUQVRJQyBpbnQKLXhsb2dfd3JpdGUoeGZzX21vdW50X3QgKgltcCwKLQkgICB4ZnNfbG9nX2lvdmVjX3QJcmVnW10sCi0JICAgaW50CQkJbmVudHJpZXMsCi0JICAgeGZzX2xvZ190aWNrZXRfdAl0aWMsCi0JICAgeGZzX2xzbl90CQkqc3RhcnRfbHNuLAotCSAgIHhsb2dfaW5fY29yZV90CSoqY29tbWl0X2ljbG9nLAotCSAgIHVpbnQJCQlmbGFncykKK3hsb2dfd3JpdGUoCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJc3RydWN0IHhmc19sb2dfaW92ZWMJcmVnW10sCisJaW50CQkJbmVudHJpZXMsCisJc3RydWN0IHhsb2dfdGlja2V0CSp0aWNrZXQsCisJeGZzX2xzbl90CQkqc3RhcnRfbHNuLAorCXN0cnVjdCB4bG9nX2luX2NvcmUJKipjb21taXRfaWNsb2csCisJdWludAkJCWZsYWdzKQogewogICAgIHhsb2dfdAkgICAgICpsb2cgPSBtcC0+bV9sb2c7Ci0gICAgeGxvZ190aWNrZXRfdCAgICAqdGlja2V0ID0gKHhsb2dfdGlja2V0X3QgKil0aWM7CiAgICAgeGxvZ19pbl9jb3JlX3QgICAqaWNsb2cgPSBOVUxMOyAgLyogcHRyIHRvIGN1cnJlbnQgaW4tY29yZSBsb2cgKi8KICAgICB4bG9nX29wX2hlYWRlcl90ICpsb2dvcF9oZWFkOyAgICAvKiBwdHIgdG8gbG9nIG9wZXJhdGlvbiBoZWFkZXIgKi8KICAgICBfX3BzaW50X3QJICAgICBwdHI7CSAgICAgLyogY29weSBhZGRyZXNzIGludG8gZGF0YSByZWdpb24gKi8KQEAgLTE3NjUsNyArMTc2Myw3IEBACiAJICAgIGRlZmF1bHQ6CiAJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIG1wLAogCQkgICAgIkJhZCBYRlMgdHJhbnNhY3Rpb24gY2xpZW50aWQgMHgleCBpbiB0aWNrZXQgMHglcCIsCi0JCSAgICBsb2dvcF9oZWFkLT5vaF9jbGllbnRpZCwgdGljKTsKKwkJICAgIGxvZ29wX2hlYWQtPm9oX2NsaWVudGlkLCB0aWNrZXQpOwogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7CiAJICAgIH0KIApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2cuaCBiL2ZzL3hmcy94ZnNfbG9nLmgKaW5kZXggNzA3NGJlOS4uOTdhMjRjNyAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19sb2cuaAorKysgYi9mcy94ZnMveGZzX2xvZy5oCkBAIC0xMTAsOCArMTEwLDYgQEAKIAl1aW50CQlpX3R5cGU7CQkvKiB0eXBlIG9mIHJlZ2lvbiAqLwogfSB4ZnNfbG9nX2lvdmVjX3Q7CiAKLXR5cGVkZWYgdm9pZCogeGZzX2xvZ190aWNrZXRfdDsKLQogLyoKICAqIFN0cnVjdHVyZSB1c2VkIHRvIHBhc3MgY2FsbGJhY2sgZnVuY3Rpb24gYW5kIHRoZSBmdW5jdGlvbidzIGFyZ3VtZW50CiAgKiB0byB0aGUgbG9nIG1hbmFnZXIuCkBAIC0xMjYsMTAgKzEyNCwxMiBAQAogI2lmZGVmIF9fS0VSTkVMX18KIC8qIExvZyBtYW5hZ2VyIGludGVyZmFjZXMgKi8KIHN0cnVjdCB4ZnNfbW91bnQ7CitzdHJ1Y3QgeGxvZ19pbl9jb3JlOwogc3RydWN0IHhsb2dfdGlja2V0OworCiB4ZnNfbHNuX3QgeGZzX2xvZ19kb25lKHN0cnVjdCB4ZnNfbW91bnQgKm1wLAotCQkgICAgICAgeGZzX2xvZ190aWNrZXRfdCB0aWNrZXQsCi0JCSAgICAgICB2b2lkCQkqKmljbG9nLAorCQkgICAgICAgc3RydWN0IHhsb2dfdGlja2V0ICp0aWNrZXQsCisJCSAgICAgICBzdHJ1Y3QgeGxvZ19pbl9jb3JlICoqaWNsb2csCiAJCSAgICAgICB1aW50CQlmbGFncyk7CiBpbnQJICBfeGZzX2xvZ19mb3JjZShzdHJ1Y3QgeGZzX21vdW50ICptcCwKIAkJCSB1aW50CQlmbGFncywKQEAgLTE1MSwyMSArMTUxLDIxIEBACiB2b2lkCSAgeGZzX2xvZ19tb3ZlX3RhaWwoc3RydWN0IHhmc19tb3VudAkqbXAsCiAJCQkgICAgeGZzX2xzbl90CQl0YWlsX2xzbik7CiBpbnQJICB4ZnNfbG9nX25vdGlmeShzdHJ1Y3QgeGZzX21vdW50CSptcCwKLQkJCSB2b2lkCQkJKmljbG9nLAorCQkJIHN0cnVjdCB4bG9nX2luX2NvcmUJKmljbG9nLAogCQkJIHhmc19sb2dfY2FsbGJhY2tfdAkqY2FsbGJhY2tfZW50cnkpOwogaW50CSAgeGZzX2xvZ19yZWxlYXNlX2ljbG9nKHN0cnVjdCB4ZnNfbW91bnQgKm1wLAotCQkJIHZvaWQJCQkgKmljbG9nX2huZGwpOworCQkJIHN0cnVjdCB4bG9nX2luX2NvcmUJICppY2xvZyk7CiBpbnQJICB4ZnNfbG9nX3Jlc2VydmUoc3RydWN0IHhmc19tb3VudCAqbXAsCiAJCQkgIGludAkJICAgbGVuZ3RoLAogCQkJICBpbnQJCSAgIGNvdW50LAotCQkJICB4ZnNfbG9nX3RpY2tldF90ICp0aWNrZXQsCisJCQkgIHN0cnVjdCB4bG9nX3RpY2tldCAqKnRpY2tldCwKIAkJCSAgX191aW50OF90CSAgIGNsaWVudGlkLAogCQkJICB1aW50CQkgICBmbGFncywKIAkJCSAgdWludAkJICAgdF90eXBlKTsKIGludAkgIHhmc19sb2dfd3JpdGUoc3RydWN0IHhmc19tb3VudCAqbXAsCiAJCQl4ZnNfbG9nX2lvdmVjX3QgIHJlZ2lvbltdLAogCQkJaW50CQkgbmVudHJpZXMsCi0JCQl4ZnNfbG9nX3RpY2tldF90IHRpY2tldCwKKwkJCXN0cnVjdCB4bG9nX3RpY2tldCAqdGlja2V0LAogCQkJeGZzX2xzbl90CSAqc3RhcnRfbHNuKTsKIGludAkgIHhmc19sb2dfdW5tb3VudF93cml0ZShzdHJ1Y3QgeGZzX21vdW50ICptcCk7CiB2b2lkICAgICAgeGZzX2xvZ191bm1vdW50KHN0cnVjdCB4ZnNfbW91bnQgKm1wKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbW91bnQuYyBiL2ZzL3hmcy94ZnNfbW91bnQuYwppbmRleCA2YWZhYWViLi5lNzliNTZiIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21vdW50LmMKKysrIGIvZnMveGZzL3hmc19tb3VudC5jCkBAIC0xMDk3LDEzICsxMDk3LDE1IEBACiAJX191aW50NjRfdCByZXNibGtzOwogCiAJLyoKLQkgKiBXZSBkZWZhdWx0IHRvIDUlIG9yIDEwMjQgZnNicyBvZiBzcGFjZSByZXNlcnZlZCwgd2hpY2hldmVyIGlzIHNtYWxsZXIuCi0JICogVGhpcyBtYXkgZHJpdmUgdXMgc3RyYWlnaHQgdG8gRU5PU1BDIG9uIG1vdW50LCBidXQgdGhhdCBpbXBsaWVzCi0JICogd2Ugd2VyZSBhbHJlYWR5IHRoZXJlIG9uIHRoZSBsYXN0IHVubW91bnQuIFdhcm4gaWYgdGhpcyBvY2N1cnMuCisJICogV2UgZGVmYXVsdCB0byA1JSBvciA4MTkyIGZzYnMgb2Ygc3BhY2UgcmVzZXJ2ZWQsIHdoaWNoZXZlciBpcworCSAqIHNtYWxsZXIuICBUaGlzIGlzIGludGVuZGVkIHRvIGNvdmVyIGNvbmN1cnJlbnQgYWxsb2NhdGlvbgorCSAqIHRyYW5zYWN0aW9ucyB3aGVuIHdlIGluaXRpYWxseSBoaXQgZW5vc3BjLiBUaGVzZSBlYWNoIHJlcXVpcmUgYSA0CisJICogYmxvY2sgcmVzZXJ2YXRpb24uIEhlbmNlIGJ5IGRlZmF1bHQgd2UgY292ZXIgcm91Z2hseSAyMDAwIGNvbmN1cnJlbnQKKwkgKiBhbGxvY2F0aW9uIHJlc2VydmF0aW9ucy4KIAkgKi8KIAlyZXNibGtzID0gbXAtPm1fc2Iuc2JfZGJsb2NrczsKIAlkb19kaXYocmVzYmxrcywgMjApOwotCXJlc2Jsa3MgPSBtaW5fdChfX3VpbnQ2NF90LCByZXNibGtzLCAxMDI0KTsKKwlyZXNibGtzID0gbWluX3QoX191aW50NjRfdCwgcmVzYmxrcywgODE5Mik7CiAJcmV0dXJuIHJlc2Jsa3M7CiB9CiAKQEAgLTE0MTcsNiArMTQxOSw5IEBACiAJICogd2hlbiBhdCBFTk9TUEMuIFRoaXMgaXMgbmVlZGVkIGZvciBvcGVyYXRpb25zIGxpa2UgY3JlYXRlIHdpdGgKIAkgKiBhdHRyLCB1bndyaXR0ZW4gZXh0ZW50IGNvbnZlcnNpb24gYXQgRU5PU1BDLCBldGMuIERhdGEgYWxsb2NhdGlvbnMKIAkgKiBhcmUgbm90IGFsbG93ZWQgdG8gdXNlIHRoaXMgcmVzZXJ2ZWQgc3BhY2UuCisJICoKKwkgKiBUaGlzIG1heSBkcml2ZSB1cyBzdHJhaWdodCB0byBFTk9TUEMgb24gbW91bnQsIGJ1dCB0aGF0IGltcGxpZXMKKwkgKiB3ZSB3ZXJlIGFscmVhZHkgdGhlcmUgb24gdGhlIGxhc3QgdW5tb3VudC4gV2FybiBpZiB0aGlzIG9jY3Vycy4KIAkgKi8KIAlpZiAoIShtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9SRE9OTFkpKSB7CiAJCXJlc2Jsa3MgPSB4ZnNfZGVmYXVsdF9yZXNibGtzKG1wKTsKQEAgLTE3MjUsMjYgKzE3MzAsMzAgQEAKIAkJCQlsY291bnRlciArPSByZW07CiAJCQl9CiAJCX0gZWxzZSB7CQkJCS8qIFRha2luZyBibG9ja3MgYXdheSAqLwotCiAJCQlsY291bnRlciArPSBkZWx0YTsKLQotCQkvKgotCQkgKiBJZiB3ZXJlIG91dCBvZiBibG9ja3MsIHVzZSBhbnkgYXZhaWxhYmxlIHJlc2VydmVkIGJsb2NrcyBpZgotCQkgKiB3ZXJlIGFsbG93ZWQgdG8uCi0JCSAqLwotCi0JCQlpZiAobGNvdW50ZXIgPCAwKSB7Ci0JCQkJaWYgKHJzdmQpIHsKLQkJCQkJbGNvdW50ZXIgPSAobG9uZyBsb25nKW1wLT5tX3Jlc2Jsa3NfYXZhaWwgKyBkZWx0YTsKLQkJCQkJaWYgKGxjb3VudGVyIDwgMCkgewotCQkJCQkJcmV0dXJuIFhGU19FUlJPUihFTk9TUEMpOwotCQkJCQl9Ci0JCQkJCW1wLT5tX3Jlc2Jsa3NfYXZhaWwgPSBsY291bnRlcjsKLQkJCQkJcmV0dXJuIDA7Ci0JCQkJfSBlbHNlIHsJLyogbm90IHJlc2VydmVkICovCi0JCQkJCXJldHVybiBYRlNfRVJST1IoRU5PU1BDKTsKLQkJCQl9CisJCQlpZiAobGNvdW50ZXIgPj0gMCkgeworCQkJCW1wLT5tX3NiLnNiX2ZkYmxvY2tzID0gbGNvdW50ZXIgKworCQkJCQkJCVhGU19BTExPQ19TRVRfQVNJREUobXApOworCQkJCXJldHVybiAwOwogCQkJfQorCisJCQkvKgorCQkJICogV2UgYXJlIG91dCBvZiBibG9ja3MsIHVzZSBhbnkgYXZhaWxhYmxlIHJlc2VydmVkCisJCQkgKiBibG9ja3MgaWYgd2VyZSBhbGxvd2VkIHRvLgorCQkJICovCisJCQlpZiAoIXJzdmQpCisJCQkJcmV0dXJuIFhGU19FUlJPUihFTk9TUEMpOworCisJCQlsY291bnRlciA9IChsb25nIGxvbmcpbXAtPm1fcmVzYmxrc19hdmFpbCArIGRlbHRhOworCQkJaWYgKGxjb3VudGVyID49IDApIHsKKwkJCQltcC0+bV9yZXNibGtzX2F2YWlsID0gbGNvdW50ZXI7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlwcmludGtfb25jZShLRVJOX1dBUk5JTkcKKwkJCQkiRmlsZXN5c3RlbSBcIiVzXCI6IHJlc2VydmUgYmxvY2tzIGRlcGxldGVkISAiCisJCQkJIkNvbnNpZGVyIGluY3JlYXNpbmcgcmVzZXJ2ZSBwb29sIHNpemUuIiwKKwkJCQltcC0+bV9mc25hbWUpOworCQkJcmV0dXJuIFhGU19FUlJPUihFTk9TUEMpOwogCQl9CiAKIAkJbXAtPm1fc2Iuc2JfZmRibG9ja3MgPSBsY291bnRlciArIFhGU19BTExPQ19TRVRfQVNJREUobXApOwpAQCAtMjA1Miw2ICsyMDYxLDI2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCisvKgorICogSWYgdGhlIHVuZGVybHlpbmcgKGRhdGEvbG9nL3J0KSBkZXZpY2UgaXMgcmVhZG9ubHksIHRoZXJlIGFyZSBzb21lCisgKiBvcGVyYXRpb25zIHRoYXQgY2Fubm90IHByb2NlZWQuCisgKi8KK2ludAoreGZzX2Rldl9pc19yZWFkX29ubHkoCisJc3RydWN0IHhmc19tb3VudAkqbXAsCisJY2hhcgkJCSptZXNzYWdlKQoreworCWlmICh4ZnNfcmVhZG9ubHlfYnVmdGFyZyhtcC0+bV9kZGV2X3RhcmdwKSB8fAorCSAgICB4ZnNfcmVhZG9ubHlfYnVmdGFyZyhtcC0+bV9sb2dkZXZfdGFyZ3ApIHx8CisJICAgIChtcC0+bV9ydGRldl90YXJncCAmJiB4ZnNfcmVhZG9ubHlfYnVmdGFyZyhtcC0+bV9ydGRldl90YXJncCkpKSB7CisJCWNtbl9lcnIoQ0VfTk9URSwKKwkJCSJYRlM6ICVzIHJlcXVpcmVkIG9uIHJlYWQtb25seSBkZXZpY2UuIiwgbWVzc2FnZSk7CisJCWNtbl9lcnIoQ0VfTk9URSwKKwkJCSJYRlM6IHdyaXRlIGFjY2VzcyB1bmF2YWlsYWJsZSwgY2Fubm90IHByb2NlZWQuIik7CisJCXJldHVybiBFUk9GUzsKKwl9CisJcmV0dXJuIDA7Cit9CiAKICNpZmRlZiBIQVZFX1BFUkNQVV9TQgogLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbW91bnQuaCBiL2ZzL3hmcy94ZnNfbW91bnQuaAppbmRleCA3MDUwNGZjLi40ZmEwYmM3IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX21vdW50LmgKKysrIGIvZnMveGZzL3hmc19tb3VudC5oCkBAIC0yNDUsNyArMjQ1LDcgQEAKIAlzdHJ1Y3QgeGZzX3Ftb3BzCSptX3FtX29wczsJLyogdmVjdG9yIG9mIFhRTSBvcHMgKi8KIAlhdG9taWNfdAkJbV9hY3RpdmVfdHJhbnM7CS8qIG51bWJlciB0cmFucyBmcm96ZW4gKi8KICNpZmRlZiBIQVZFX1BFUkNQVV9TQgotCXhmc19pY3NiX2NudHNfdAkJKm1fc2JfY250czsJLyogcGVyLWNwdSBzdXBlcmJsb2NrIGNvdW50ZXJzICovCisJeGZzX2ljc2JfY250c190IF9fcGVyY3B1ICptX3NiX2NudHM7CS8qIHBlci1jcHUgc3VwZXJibG9jayBjb3VudGVycyAqLwogCXVuc2lnbmVkIGxvbmcJCW1faWNzYl9jb3VudGVyczsgLyogZGlzYWJsZWQgcGVyLWNwdSBjb3VudGVycyAqLwogCXN0cnVjdCBub3RpZmllcl9ibG9jawltX2ljc2Jfbm90aWZpZXI7IC8qIGhvdHBsdWcgY3B1IG5vdGlmaWVyICovCiAJc3RydWN0IG11dGV4CQltX2ljc2JfbXV0ZXg7CS8qIGJhbGFuY2VyIHN5bmMgbG9jayAqLwpAQCAtNDM2LDYgKzQzNiw4IEBACiBleHRlcm4gaW50CXhmc19mc193cml0YWJsZSh4ZnNfbW91bnRfdCAqKTsKIGV4dGVybiBpbnQJeGZzX3NiX3ZhbGlkYXRlX2ZzYl9jb3VudChzdHJ1Y3QgeGZzX3NiICosIF9fdWludDY0X3QpOwogCitleHRlcm4gaW50CXhmc19kZXZfaXNfcmVhZF9vbmx5KHN0cnVjdCB4ZnNfbW91bnQgKiwgY2hhciAqKTsKKwogZXh0ZXJuIGludAl4ZnNfZG1vcHNfZ2V0KHN0cnVjdCB4ZnNfbW91bnQgKik7CiBleHRlcm4gdm9pZAl4ZnNfZG1vcHNfcHV0KHN0cnVjdCB4ZnNfbW91bnQgKik7CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfdHJhbnMuYyBiL2ZzL3hmcy94ZnNfdHJhbnMuYwppbmRleCBiZTk0MmQ0Li5mNzNlMzU4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zLmMKKysrIGIvZnMveGZzL3hmc190cmFucy5jCkBAIC03OTYsNyArNzk2LDcgQEAKIAlpbnQJCQlzeW5jOwogI2RlZmluZQlYRlNfVFJBTlNfTE9HVkVDX0NPVU5UCTE2CiAJeGZzX2xvZ19pb3ZlY190CQlsb2dfdmVjdG9yX2Zhc3RbWEZTX1RSQU5TX0xPR1ZFQ19DT1VOVF07Ci0Jdm9pZAkJCSpjb21taXRfaWNsb2c7CisJc3RydWN0IHhsb2dfaW5fY29yZQkqY29tbWl0X2ljbG9nOwogCWludAkJCXNodXRkb3duOwogCiAJY29tbWl0X2xzbiA9IC0xOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFucy5oIGIvZnMveGZzL3hmc190cmFucy5oCmluZGV4IGM5M2UzYTEuLjc5YzhiYWIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnMuaAorKysgYi9mcy94ZnMveGZzX3RyYW5zLmgKQEAgLTkxMCw3ICs5MTAsNyBAQAogCXVuc2lnbmVkIGludAkJdF9ibGtfcmVzX3VzZWQ7CS8qICMgb2YgcmVzdmQgYmxvY2tzIHVzZWQgKi8KIAl1bnNpZ25lZCBpbnQJCXRfcnR4X3JlczsJLyogIyBvZiBydCBleHRlbnRzIHJlc3ZkICovCiAJdW5zaWduZWQgaW50CQl0X3J0eF9yZXNfdXNlZDsJLyogIyBvZiByZXN2ZCBydCBleHRlbnRzIHVzZWQgKi8KLQl4ZnNfbG9nX3RpY2tldF90CXRfdGlja2V0OwkvKiBsb2cgbWdyIHRpY2tldCAqLworCXN0cnVjdCB4bG9nX3RpY2tldAkqdF90aWNrZXQ7CS8qIGxvZyBtZ3IgdGlja2V0ICovCiAJeGZzX2xzbl90CQl0X2xzbjsJCS8qIGxvZyBzZXEgbnVtIG9mIHN0YXJ0IG9mCiAJCQkJCQkgKiB0cmFuc2FjdGlvbi4gKi8KIAl4ZnNfbHNuX3QJCXRfY29tbWl0X2xzbjsJLyogbG9nIHNlcSBudW0gb2YgZW5kIG9mCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jIGIvZnMveGZzL3hmc190cmFuc19idWYuYwppbmRleCA1ZmZkNTQ0Li5mYjU4NjM2MCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc190cmFuc19idWYuYworKysgYi9mcy94ZnMveGZzX3RyYW5zX2J1Zi5jCkBAIC00Niw2ICs0Niw2NSBAQAogU1RBVElDIHhmc19idWZfdCAqeGZzX3RyYW5zX2J1Zl9pdGVtX21hdGNoX2FsbCh4ZnNfdHJhbnNfdCAqLCB4ZnNfYnVmdGFyZ190ICosCiAJCXhmc19kYWRkcl90LCBpbnQpOwogCisvKgorICogQWRkIHRoZSBsb2NrZWQgYnVmZmVyIHRvIHRoZSB0cmFuc2FjdGlvbi4KKyAqCisgKiBUaGUgYnVmZmVyIG11c3QgYmUgbG9ja2VkLCBhbmQgaXQgY2Fubm90IGJlIGFzc29jaWF0ZWQgd2l0aCBhbnkKKyAqIHRyYW5zYWN0aW9uLgorICoKKyAqIElmIHRoZSBidWZmZXIgZG9lcyBub3QgeWV0IGhhdmUgYSBidWYgbG9nIGl0ZW0gYXNzb2NpYXRlZCB3aXRoIGl0LAorICogdGhlbiBhbGxvY2F0ZSBvbmUgZm9yIGl0LiAgVGhlbiBhZGQgdGhlIGJ1ZiBpdGVtIHRvIHRoZSB0cmFuc2FjdGlvbi4KKyAqLworU1RBVElDIHZvaWQKK194ZnNfdHJhbnNfYmpvaW4oCisJc3RydWN0IHhmc190cmFucwkqdHAsCisJc3RydWN0IHhmc19idWYJCSpicCwKKwlpbnQJCQlyZXNldF9yZWN1cikKK3sKKwlzdHJ1Y3QgeGZzX2J1Zl9sb2dfaXRlbQkqYmlwOworCisJQVNTRVJUKFhGU19CVUZfSVNCVVNZKGJwKSk7CisJQVNTRVJUKFhGU19CVUZfRlNQUklWQVRFMihicCwgdm9pZCAqKSA9PSBOVUxMKTsKKworCS8qCisJICogVGhlIHhmc19idWZfbG9nX2l0ZW0gcG9pbnRlciBpcyBzdG9yZWQgaW4gYl9mc3ByaXZhdGUuICBJZgorCSAqIGl0IGRvZXNuJ3QgaGF2ZSBvbmUgeWV0LCB0aGVuIGFsbG9jYXRlIG9uZSBhbmQgaW5pdGlhbGl6ZSBpdC4KKwkgKiBUaGUgY2hlY2tzIHRvIHNlZSBpZiBvbmUgaXMgdGhlcmUgYXJlIGluIHhmc19idWZfaXRlbV9pbml0KCkuCisJICovCisJeGZzX2J1Zl9pdGVtX2luaXQoYnAsIHRwLT50X21vdW50cCk7CisJYmlwID0gWEZTX0JVRl9GU1BSSVZBVEUoYnAsIHhmc19idWZfbG9nX2l0ZW1fdCAqKTsKKwlBU1NFUlQoIShiaXAtPmJsaV9mbGFncyAmIFhGU19CTElfU1RBTEUpKTsKKwlBU1NFUlQoIShiaXAtPmJsaV9mb3JtYXQuYmxmX2ZsYWdzICYgWEZTX0JMSV9DQU5DRUwpKTsKKwlBU1NFUlQoIShiaXAtPmJsaV9mbGFncyAmIFhGU19CTElfTE9HR0VEKSk7CisJaWYgKHJlc2V0X3JlY3VyKQorCQliaXAtPmJsaV9yZWN1ciA9IDA7CisKKwkvKgorCSAqIFRha2UgYSByZWZlcmVuY2UgZm9yIHRoaXMgdHJhbnNhY3Rpb24gb24gdGhlIGJ1ZiBpdGVtLgorCSAqLworCWF0b21pY19pbmMoJmJpcC0+YmxpX3JlZmNvdW50KTsKKworCS8qCisJICogR2V0IGEgbG9nX2l0ZW1fZGVzYyB0byBwb2ludCBhdCB0aGUgbmV3IGl0ZW0uCisJICovCisJKHZvaWQpIHhmc190cmFuc19hZGRfaXRlbSh0cCwgKHhmc19sb2dfaXRlbV90ICopYmlwKTsKKworCS8qCisJICogSW5pdGlhbGl6ZSBiX2ZzcHJpdmF0ZTIgc28gd2UgY2FuIGZpbmQgaXQgd2l0aCBpbmNvcmVfbWF0Y2goKQorCSAqIGluIHhmc190cmFuc19nZXRfYnVmKCkgYW5kIGZyaWVuZHMgYWJvdmUuCisJICovCisJWEZTX0JVRl9TRVRfRlNQUklWQVRFMihicCwgdHApOworCit9CisKK3ZvaWQKK3hmc190cmFuc19iam9pbigKKwlzdHJ1Y3QgeGZzX3RyYW5zCSp0cCwKKwlzdHJ1Y3QgeGZzX2J1ZgkJKmJwKQoreworCV94ZnNfdHJhbnNfYmpvaW4odHAsIGJwLCAwKTsKKwl0cmFjZV94ZnNfdHJhbnNfYmpvaW4oYnAtPmJfZnNwcml2KTsKK30KIAogLyoKICAqIEdldCBhbmQgbG9jayB0aGUgYnVmZmVyIGZvciB0aGUgY2FsbGVyIGlmIGl0IGlzIG5vdCBhbHJlYWR5CkBAIC0xMzIsNDAgKzE5MSw4IEBACiAKIAlBU1NFUlQoIVhGU19CVUZfR0VURVJST1IoYnApKTsKIAotCS8qCi0JICogVGhlIHhmc19idWZfbG9nX2l0ZW0gcG9pbnRlciBpcyBzdG9yZWQgaW4gYl9mc3ByaXZhdGUuICBJZgotCSAqIGl0IGRvZXNuJ3QgaGF2ZSBvbmUgeWV0LCB0aGVuIGFsbG9jYXRlIG9uZSBhbmQgaW5pdGlhbGl6ZSBpdC4KLQkgKiBUaGUgY2hlY2tzIHRvIHNlZSBpZiBvbmUgaXMgdGhlcmUgYXJlIGluIHhmc19idWZfaXRlbV9pbml0KCkuCi0JICovCi0JeGZzX2J1Zl9pdGVtX2luaXQoYnAsIHRwLT50X21vdW50cCk7Ci0KLQkvKgotCSAqIFNldCB0aGUgcmVjdXJzaW9uIGNvdW50IGZvciB0aGUgYnVmZmVyIHdpdGhpbiB0aGlzIHRyYW5zYWN0aW9uCi0JICogdG8gMC4KLQkgKi8KLQliaXAgPSBYRlNfQlVGX0ZTUFJJVkFURShicCwgeGZzX2J1Zl9sb2dfaXRlbV90Kik7Ci0JQVNTRVJUKCEoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX1NUQUxFKSk7Ci0JQVNTRVJUKCEoYmlwLT5ibGlfZm9ybWF0LmJsZl9mbGFncyAmIFhGU19CTElfQ0FOQ0VMKSk7Ci0JQVNTRVJUKCEoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX0xPR0dFRCkpOwotCWJpcC0+YmxpX3JlY3VyID0gMDsKLQotCS8qCi0JICogVGFrZSBhIHJlZmVyZW5jZSBmb3IgdGhpcyB0cmFuc2FjdGlvbiBvbiB0aGUgYnVmIGl0ZW0uCi0JICovCi0JYXRvbWljX2luYygmYmlwLT5ibGlfcmVmY291bnQpOwotCi0JLyoKLQkgKiBHZXQgYSBsb2dfaXRlbV9kZXNjIHRvIHBvaW50IGF0IHRoZSBuZXcgaXRlbS4KLQkgKi8KLQkodm9pZCkgeGZzX3RyYW5zX2FkZF9pdGVtKHRwLCAoeGZzX2xvZ19pdGVtX3QqKWJpcCk7Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgYl9mc3ByaXZhdGUyIHNvIHdlIGNhbiBmaW5kIGl0IHdpdGggaW5jb3JlX21hdGNoKCkKLQkgKiBhYm92ZS4KLQkgKi8KLQlYRlNfQlVGX1NFVF9GU1BSSVZBVEUyKGJwLCB0cCk7Ci0KLQl0cmFjZV94ZnNfdHJhbnNfZ2V0X2J1ZihiaXApOworCV94ZnNfdHJhbnNfYmpvaW4odHAsIGJwLCAxKTsKKwl0cmFjZV94ZnNfdHJhbnNfZ2V0X2J1ZihicC0+Yl9mc3ByaXYpOwogCXJldHVybiAoYnApOwogfQogCkBAIC0yMTAsNDQgKzIzNywxMSBAQAogCX0KIAogCWJwID0geGZzX2dldHNiKG1wLCBmbGFncyk7Ci0JaWYgKGJwID09IE5VTEwpIHsKKwlpZiAoYnAgPT0gTlVMTCkKIAkJcmV0dXJuIE5VTEw7Ci0JfQogCi0JLyoKLQkgKiBUaGUgeGZzX2J1Zl9sb2dfaXRlbSBwb2ludGVyIGlzIHN0b3JlZCBpbiBiX2ZzcHJpdmF0ZS4gIElmCi0JICogaXQgZG9lc24ndCBoYXZlIG9uZSB5ZXQsIHRoZW4gYWxsb2NhdGUgb25lIGFuZCBpbml0aWFsaXplIGl0LgotCSAqIFRoZSBjaGVja3MgdG8gc2VlIGlmIG9uZSBpcyB0aGVyZSBhcmUgaW4geGZzX2J1Zl9pdGVtX2luaXQoKS4KLQkgKi8KLQl4ZnNfYnVmX2l0ZW1faW5pdChicCwgbXApOwotCi0JLyoKLQkgKiBTZXQgdGhlIHJlY3Vyc2lvbiBjb3VudCBmb3IgdGhlIGJ1ZmZlciB3aXRoaW4gdGhpcyB0cmFuc2FjdGlvbgotCSAqIHRvIDAuCi0JICovCi0JYmlwID0gWEZTX0JVRl9GU1BSSVZBVEUoYnAsIHhmc19idWZfbG9nX2l0ZW1fdCopOwotCUFTU0VSVCghKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9TVEFMRSkpOwotCUFTU0VSVCghKGJpcC0+YmxpX2Zvcm1hdC5ibGZfZmxhZ3MgJiBYRlNfQkxJX0NBTkNFTCkpOwotCUFTU0VSVCghKGJpcC0+YmxpX2ZsYWdzICYgWEZTX0JMSV9MT0dHRUQpKTsKLQliaXAtPmJsaV9yZWN1ciA9IDA7Ci0KLQkvKgotCSAqIFRha2UgYSByZWZlcmVuY2UgZm9yIHRoaXMgdHJhbnNhY3Rpb24gb24gdGhlIGJ1ZiBpdGVtLgotCSAqLwotCWF0b21pY19pbmMoJmJpcC0+YmxpX3JlZmNvdW50KTsKLQotCS8qCi0JICogR2V0IGEgbG9nX2l0ZW1fZGVzYyB0byBwb2ludCBhdCB0aGUgbmV3IGl0ZW0uCi0JICovCi0JKHZvaWQpIHhmc190cmFuc19hZGRfaXRlbSh0cCwgKHhmc19sb2dfaXRlbV90KiliaXApOwotCi0JLyoKLQkgKiBJbml0aWFsaXplIGJfZnNwcml2YXRlMiBzbyB3ZSBjYW4gZmluZCBpdCB3aXRoIGluY29yZV9tYXRjaCgpCi0JICogYWJvdmUuCi0JICovCi0JWEZTX0JVRl9TRVRfRlNQUklWQVRFMihicCwgdHApOwotCi0JdHJhY2VfeGZzX3RyYW5zX2dldHNiKGJpcCk7CisJX3hmc190cmFuc19iam9pbih0cCwgYnAsIDEpOworCXRyYWNlX3hmc190cmFuc19nZXRzYihicC0+Yl9mc3ByaXYpOwogCXJldHVybiAoYnApOwogfQogCkBAIC00MjUsNDAgKzQxOSw5IEBACiAJaWYgKFhGU19GT1JDRURfU0hVVERPV04obXApKQogCQlnb3RvIHNodXRkb3duX2Fib3J0OwogCi0JLyoKLQkgKiBUaGUgeGZzX2J1Zl9sb2dfaXRlbSBwb2ludGVyIGlzIHN0b3JlZCBpbiBiX2ZzcHJpdmF0ZS4gIElmCi0JICogaXQgZG9lc24ndCBoYXZlIG9uZSB5ZXQsIHRoZW4gYWxsb2NhdGUgb25lIGFuZCBpbml0aWFsaXplIGl0LgotCSAqIFRoZSBjaGVja3MgdG8gc2VlIGlmIG9uZSBpcyB0aGVyZSBhcmUgaW4geGZzX2J1Zl9pdGVtX2luaXQoKS4KLQkgKi8KLQl4ZnNfYnVmX2l0ZW1faW5pdChicCwgdHAtPnRfbW91bnRwKTsKKwlfeGZzX3RyYW5zX2Jqb2luKHRwLCBicCwgMSk7CisJdHJhY2VfeGZzX3RyYW5zX3JlYWRfYnVmKGJwLT5iX2ZzcHJpdik7CiAKLQkvKgotCSAqIFNldCB0aGUgcmVjdXJzaW9uIGNvdW50IGZvciB0aGUgYnVmZmVyIHdpdGhpbiB0aGlzIHRyYW5zYWN0aW9uCi0JICogdG8gMC4KLQkgKi8KLQliaXAgPSBYRlNfQlVGX0ZTUFJJVkFURShicCwgeGZzX2J1Zl9sb2dfaXRlbV90Kik7Ci0JQVNTRVJUKCEoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX1NUQUxFKSk7Ci0JQVNTRVJUKCEoYmlwLT5ibGlfZm9ybWF0LmJsZl9mbGFncyAmIFhGU19CTElfQ0FOQ0VMKSk7Ci0JQVNTRVJUKCEoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX0xPR0dFRCkpOwotCWJpcC0+YmxpX3JlY3VyID0gMDsKLQotCS8qCi0JICogVGFrZSBhIHJlZmVyZW5jZSBmb3IgdGhpcyB0cmFuc2FjdGlvbiBvbiB0aGUgYnVmIGl0ZW0uCi0JICovCi0JYXRvbWljX2luYygmYmlwLT5ibGlfcmVmY291bnQpOwotCi0JLyoKLQkgKiBHZXQgYSBsb2dfaXRlbV9kZXNjIHRvIHBvaW50IGF0IHRoZSBuZXcgaXRlbS4KLQkgKi8KLQkodm9pZCkgeGZzX3RyYW5zX2FkZF9pdGVtKHRwLCAoeGZzX2xvZ19pdGVtX3QqKWJpcCk7Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgYl9mc3ByaXZhdGUyIHNvIHdlIGNhbiBmaW5kIGl0IHdpdGggaW5jb3JlX21hdGNoKCkKLQkgKiBhYm92ZS4KLQkgKi8KLQlYRlNfQlVGX1NFVF9GU1BSSVZBVEUyKGJwLCB0cCk7Ci0KLQl0cmFjZV94ZnNfdHJhbnNfcmVhZF9idWYoYmlwKTsKIAkqYnBwID0gYnA7CiAJcmV0dXJuIDA7CiAKQEAgLTYyMyw1MyArNTg2LDYgQEAKIH0KIAogLyoKLSAqIEFkZCB0aGUgbG9ja2VkIGJ1ZmZlciB0byB0aGUgdHJhbnNhY3Rpb24uCi0gKiBUaGUgYnVmZmVyIG11c3QgYmUgbG9ja2VkLCBhbmQgaXQgY2Fubm90IGJlIGFzc29jaWF0ZWQgd2l0aCBhbnkKLSAqIHRyYW5zYWN0aW9uLgotICoKLSAqIElmIHRoZSBidWZmZXIgZG9lcyBub3QgeWV0IGhhdmUgYSBidWYgbG9nIGl0ZW0gYXNzb2NpYXRlZCB3aXRoIGl0LAotICogdGhlbiBhbGxvY2F0ZSBvbmUgZm9yIGl0LiAgVGhlbiBhZGQgdGhlIGJ1ZiBpdGVtIHRvIHRoZSB0cmFuc2FjdGlvbi4KLSAqLwotdm9pZAoteGZzX3RyYW5zX2Jqb2luKHhmc190cmFuc190CSp0cCwKLQkJeGZzX2J1Zl90CSpicCkKLXsKLQl4ZnNfYnVmX2xvZ19pdGVtX3QJKmJpcDsKLQotCUFTU0VSVChYRlNfQlVGX0lTQlVTWShicCkpOwotCUFTU0VSVChYRlNfQlVGX0ZTUFJJVkFURTIoYnAsIHZvaWQgKikgPT0gTlVMTCk7Ci0KLQkvKgotCSAqIFRoZSB4ZnNfYnVmX2xvZ19pdGVtIHBvaW50ZXIgaXMgc3RvcmVkIGluIGJfZnNwcml2YXRlLiAgSWYKLQkgKiBpdCBkb2Vzbid0IGhhdmUgb25lIHlldCwgdGhlbiBhbGxvY2F0ZSBvbmUgYW5kIGluaXRpYWxpemUgaXQuCi0JICogVGhlIGNoZWNrcyB0byBzZWUgaWYgb25lIGlzIHRoZXJlIGFyZSBpbiB4ZnNfYnVmX2l0ZW1faW5pdCgpLgotCSAqLwotCXhmc19idWZfaXRlbV9pbml0KGJwLCB0cC0+dF9tb3VudHApOwotCWJpcCA9IFhGU19CVUZfRlNQUklWQVRFKGJwLCB4ZnNfYnVmX2xvZ19pdGVtX3QgKik7Ci0JQVNTRVJUKCEoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX1NUQUxFKSk7Ci0JQVNTRVJUKCEoYmlwLT5ibGlfZm9ybWF0LmJsZl9mbGFncyAmIFhGU19CTElfQ0FOQ0VMKSk7Ci0JQVNTRVJUKCEoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX0xPR0dFRCkpOwotCi0JLyoKLQkgKiBUYWtlIGEgcmVmZXJlbmNlIGZvciB0aGlzIHRyYW5zYWN0aW9uIG9uIHRoZSBidWYgaXRlbS4KLQkgKi8KLQlhdG9taWNfaW5jKCZiaXAtPmJsaV9yZWZjb3VudCk7Ci0KLQkvKgotCSAqIEdldCBhIGxvZ19pdGVtX2Rlc2MgdG8gcG9pbnQgYXQgdGhlIG5ldyBpdGVtLgotCSAqLwotCSh2b2lkKSB4ZnNfdHJhbnNfYWRkX2l0ZW0odHAsICh4ZnNfbG9nX2l0ZW1fdCAqKWJpcCk7Ci0KLQkvKgotCSAqIEluaXRpYWxpemUgYl9mc3ByaXZhdGUyIHNvIHdlIGNhbiBmaW5kIGl0IHdpdGggaW5jb3JlX21hdGNoKCkKLQkgKiBpbiB4ZnNfdHJhbnNfZ2V0X2J1ZigpIGFuZCBmcmllbmRzIGFib3ZlLgotCSAqLwotCVhGU19CVUZfU0VUX0ZTUFJJVkFURTIoYnAsIHRwKTsKLQotCXRyYWNlX3hmc190cmFuc19iam9pbihiaXApOwotfQotCi0vKgogICogTWFyayB0aGUgYnVmZmVyIGFzIG5vdCBuZWVkaW5nIHRvIGJlIHVubG9ja2VkIHdoZW4gdGhlIGJ1ZiBpdGVtJ3MKICAqIElPUF9VTkxPQ0soKSByb3V0aW5lIGlzIGNhbGxlZC4gIFRoZSBidWZmZXIgbXVzdCBhbHJlYWR5IGJlIGxvY2tlZAogICogYW5kIGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb24uCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKaW5kZXggZGRkMmM1ZC4uOWQzNzZiZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc192bm9kZW9wcy5jCisrKyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwpAQCAtNTg0LDExMyArNTg0LDYgQEAKIH0KIAogLyoKLSAqIHhmc19mc3luYwotICoKLSAqIFRoaXMgaXMgY2FsbGVkIHRvIHN5bmMgdGhlIGlub2RlIGFuZCBpdHMgZGF0YSBvdXQgdG8gZGlzay4gIFdlIG5lZWQgdG8gaG9sZAotICogdGhlIEkvTyBsb2NrIHdoaWxlIGZsdXNoaW5nIHRoZSBkYXRhLCBhbmQgdGhlIGlub2RlIGxvY2sgd2hpbGUgZmx1c2hpbmcgdGhlCi0gKiBpbm9kZS4gIFRoZSBpbm9kZSBsb2NrIENBTk5PVCBiZSBoZWxkIHdoaWxlIGZsdXNoaW5nIHRoZSBkYXRhLCBzbyBhY3F1aXJlCi0gKiBhZnRlciB3ZSdyZSBkb25lIHdpdGggdGhhdC4KLSAqLwotaW50Ci14ZnNfZnN5bmMoCi0JeGZzX2lub2RlX3QJKmlwKQotewotCXhmc190cmFuc190CSp0cDsKLQlpbnQJCWVycm9yID0gMDsKLQlpbnQJCWxvZ19mbHVzaGVkID0gMDsKLQotCXhmc19pdHJhY2VfZW50cnkoaXApOwotCi0JaWYgKFhGU19GT1JDRURfU0hVVERPV04oaXAtPmlfbW91bnQpKQotCQlyZXR1cm4gWEZTX0VSUk9SKEVJTyk7Ci0KLQkvKgotCSAqIFdlIGFsd2F5cyBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSByZXF1aXJlZCBpbm9kZSBzdGF0ZSBpcyBzYWZlIG9uCi0JICogZGlzay4gIFRoZSBpbm9kZSBtaWdodCBiZSBjbGVhbiBidXQgd2Ugc3RpbGwgbWlnaHQgbmVlZCB0byBmb3JjZSB0aGUKLQkgKiBsb2cgYmVjYXVzZSBvZiBjb21taXR0ZWQgdHJhbnNhY3Rpb25zIHRoYXQgaGF2ZW4ndCBoaXQgdGhlIGRpc2sgeWV0LgotCSAqIExpa2V3aXNlLCB0aGVyZSBjb3VsZCBiZSB1bmZsdXNoZWQgbm9uLXRyYW5zYWN0aW9uYWwgY2hhbmdlcyB0byB0aGUKLQkgKiBpbm9kZSBjb3JlIHRoYXQgaGF2ZSB0byBnbyB0byBkaXNrIGFuZCB0aGlzIHJlcXVpcmVzIHVzIHRvIGlzc3VlCi0JICogYSBzeW5jaHJvbm91cyB0cmFuc2FjdGlvbiB0byBjYXB0dXJlIHRoZXNlIGNoYW5nZXMgY29ycmVjdGx5LgotCSAqCi0JICogVGhpcyBjb2RlIHJlbGllcyBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IGlmIHRoZSB1cGRhdGVfKiBmaWVsZHMKLQkgKiBvZiB0aGUgaW5vZGUgYXJlIGNsZWFyIGFuZCB0aGUgaW5vZGUgaXMgdW5waW5uZWQgdGhlbiBpdCBpcyBjbGVhbgotCSAqIGFuZCBubyBhY3Rpb24gaXMgcmVxdWlyZWQuCi0JICovCi0JeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKLQotCWlmICghaXAtPmlfdXBkYXRlX2NvcmUpIHsKLQkJLyoKLQkJICogVGltZXN0YW1wcy9zaXplIGhhdmVuJ3QgY2hhbmdlZCBzaW5jZSBsYXN0IGlub2RlIGZsdXNoIG9yCi0JCSAqIGlub2RlIHRyYW5zYWN0aW9uIGNvbW1pdC4gIFRoYXQgbWVhbnMgZWl0aGVyIG5vdGhpbmcgZ290Ci0JCSAqIHdyaXR0ZW4gb3IgYSB0cmFuc2FjdGlvbiBjb21taXR0ZWQgd2hpY2ggY2F1Z2h0IHRoZSB1cGRhdGVzLgotCQkgKiBJZiB0aGUgbGF0dGVyIGhhcHBlbmVkIGFuZCB0aGUgdHJhbnNhY3Rpb24gaGFzbid0IGhpdCB0aGUKLQkJICogZGlzayB5ZXQsIHRoZSBpbm9kZSB3aWxsIGJlIHN0aWxsIGJlIHBpbm5lZC4gIElmIGl0IGlzLAotCQkgKiBmb3JjZSB0aGUgbG9nLgotCQkgKi8KLQkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19TSEFSRUQpOwotCQlpZiAoeGZzX2lwaW5jb3VudChpcCkpIHsKLQkJCWlmIChpcC0+aV9pdGVtcC0+aWxpX2xhc3RfbHNuKSB7Ci0JCQkJZXJyb3IgPSBfeGZzX2xvZ19mb3JjZV9sc24oaXAtPmlfbW91bnQsCi0JCQkJCQlpcC0+aV9pdGVtcC0+aWxpX2xhc3RfbHNuLAotCQkJCQkJWEZTX0xPR19TWU5DLCAmbG9nX2ZsdXNoZWQpOwotCQkJfSBlbHNlIHsKLQkJCQllcnJvciA9IF94ZnNfbG9nX2ZvcmNlKGlwLT5pX21vdW50LAotCQkJCQkJWEZTX0xPR19TWU5DLCAmbG9nX2ZsdXNoZWQpOwotCQkJfQotCQl9Ci0JfSBlbHNlCXsKLQkJLyoKLQkJICogS2ljayBvZmYgYSB0cmFuc2FjdGlvbiB0byBsb2cgdGhlIGlub2RlIGNvcmUgdG8gZ2V0IHRoZQotCQkgKiB1cGRhdGVzLiAgVGhlIHN5bmMgdHJhbnNhY3Rpb24gd2lsbCBhbHNvIGZvcmNlIHRoZSBsb2cuCi0JCSAqLwotCQl4ZnNfaXVubG9jayhpcCwgWEZTX0lMT0NLX1NIQVJFRCk7Ci0JCXRwID0geGZzX3RyYW5zX2FsbG9jKGlwLT5pX21vdW50LCBYRlNfVFJBTlNfRlNZTkNfVFMpOwotCQllcnJvciA9IHhmc190cmFuc19yZXNlcnZlKHRwLCAwLAotCQkJCVhGU19GU1lOQ19UU19MT0dfUkVTKGlwLT5pX21vdW50KSwgMCwgMCwgMCk7Ci0JCWlmIChlcnJvcikgewotCQkJeGZzX3RyYW5zX2NhbmNlbCh0cCwgMCk7Ci0JCQlyZXR1cm4gZXJyb3I7Ci0JCX0KLQkJeGZzX2lsb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0KLQkJLyoKLQkJICogTm90ZSAtIGl0J3MgcG9zc2libGUgdGhhdCB3ZSBtaWdodCBoYXZlIHB1c2hlZCBvdXJzZWx2ZXMgb3V0Ci0JCSAqIG9mIHRoZSB3YXkgZHVyaW5nIHRyYW5zX3Jlc2VydmUgd2hpY2ggd291bGQgZmx1c2ggdGhlIGlub2RlLgotCQkgKiBCdXQgdGhlcmUncyBubyBndWFyYW50ZWUgdGhhdCB0aGUgaW5vZGUgYnVmZmVyIGhhcyBhY3R1YWxseQotCQkgKiBnb25lIG91dCB5ZXQgKGl0J3MgZGVsd3JpKS4JUGx1cyB0aGUgYnVmZmVyIGNvdWxkIGJlIHBpbm5lZAotCQkgKiBhbnl3YXkgaWYgaXQncyBwYXJ0IG9mIGFuIGlub2RlIGluIGFub3RoZXIgcmVjZW50Ci0JCSAqIHRyYW5zYWN0aW9uLgkgU28gd2UgcGxheSBpdCBzYWZlIGFuZCBmaXJlIG9mZiB0aGUKLQkJICogdHJhbnNhY3Rpb24gYW55d2F5LgotCQkgKi8KLQkJeGZzX3RyYW5zX2lqb2luKHRwLCBpcCwgWEZTX0lMT0NLX0VYQ0wpOwotCQl4ZnNfdHJhbnNfaWhvbGQodHAsIGlwKTsKLQkJeGZzX3RyYW5zX2xvZ19pbm9kZSh0cCwgaXAsIFhGU19JTE9HX0NPUkUpOwotCQl4ZnNfdHJhbnNfc2V0X3N5bmModHApOwotCQllcnJvciA9IF94ZnNfdHJhbnNfY29tbWl0KHRwLCAwLCAmbG9nX2ZsdXNoZWQpOwotCi0JCXhmc19pdW5sb2NrKGlwLCBYRlNfSUxPQ0tfRVhDTCk7Ci0JfQotCi0JaWYgKGlwLT5pX21vdW50LT5tX2ZsYWdzICYgWEZTX01PVU5UX0JBUlJJRVIpIHsKLQkJLyoKLQkJICogSWYgdGhlIGxvZyB3cml0ZSBkaWRuJ3QgaXNzdWUgYW4gb3JkZXJlZCB0YWcgd2UgbmVlZAotCQkgKiB0byBmbHVzaCB0aGUgZGlzayBjYWNoZSBmb3IgdGhlIGRhdGEgZGV2aWNlIG5vdy4KLQkJICovCi0JCWlmICghbG9nX2ZsdXNoZWQpCi0JCQl4ZnNfYmxrZGV2X2lzc3VlX2ZsdXNoKGlwLT5pX21vdW50LT5tX2RkZXZfdGFyZ3ApOwotCi0JCS8qCi0JCSAqIElmIHRoaXMgaW5vZGUgaXMgb24gdGhlIFJUIGRldiB3ZSBuZWVkIHRvIGZsdXNoIHRoYXQKLQkJICogY2FjaGUgYXMgd2VsbC4KLQkJICovCi0JCWlmIChYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApKQotCQkJeGZzX2Jsa2Rldl9pc3N1ZV9mbHVzaChpcC0+aV9tb3VudC0+bV9ydGRldl90YXJncCk7Ci0JfQotCi0JcmV0dXJuIGVycm9yOwotfQotCi0vKgogICogRmxhZ3MgZm9yIHhmc19mcmVlX2VvZmJsb2NrcwogICovCiAjZGVmaW5lIFhGU19GUkVFX0VPRl9UUllMT0NLCSgxPDwwKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc192bm9kZW9wcy5oIGIvZnMveGZzL3hmc192bm9kZW9wcy5oCmluZGV4IDc3NGY0MDcuLmQ4ZGZhOGQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdm5vZGVvcHMuaAorKysgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmgKQEAgLTIxLDcgKzIxLDYgQEAKICNkZWZpbmUgWEZTX0FUVFJfTk9BQ0wJCTB4MDgJLyogRG9uJ3QgY2FsbCB4ZnNfYWNsX2NobW9kICovCiAKIGludCB4ZnNfcmVhZGxpbmsoc3RydWN0IHhmc19pbm9kZSAqaXAsIGNoYXIgKmxpbmspOwotaW50IHhmc19mc3luYyhzdHJ1Y3QgeGZzX2lub2RlICppcCk7CiBpbnQgeGZzX3JlbGVhc2Uoc3RydWN0IHhmc19pbm9kZSAqaXApOwogaW50IHhmc19pbmFjdGl2ZShzdHJ1Y3QgeGZzX2lub2RlICppcCk7CiBpbnQgeGZzX2xvb2t1cChzdHJ1Y3QgeGZzX2lub2RlICpkcCwgc3RydWN0IHhmc19uYW1lICpuYW1lLApAQCAtNTAsMTggKzQ5LDYgQEAKIGludCB4ZnNfYXR0cl9yZW1vdmUoc3RydWN0IHhmc19pbm9kZSAqZHAsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUsIGludCBmbGFncyk7CiBpbnQgeGZzX2F0dHJfbGlzdChzdHJ1Y3QgeGZzX2lub2RlICpkcCwgY2hhciAqYnVmZmVyLCBpbnQgYnVmc2l6ZSwKIAkJaW50IGZsYWdzLCBzdHJ1Y3QgYXR0cmxpc3RfY3Vyc29yX2tlcm4gKmN1cnNvcik7Ci1zc2l6ZV90IHhmc19yZWFkKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCi0JCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92cCwgdW5zaWduZWQgaW50IHNlZ3MsCi0JCWxvZmZfdCAqb2Zmc2V0LCBpbnQgaW9mbGFncyk7Ci1zc2l6ZV90IHhmc19zcGxpY2VfcmVhZChzdHJ1Y3QgeGZzX2lub2RlICppcCwgc3RydWN0IGZpbGUgKmluZmlscCwKLQkJbG9mZl90ICpwcG9zLCBzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzaXplX3QgY291bnQsCi0JCWludCBmbGFncywgaW50IGlvZmxhZ3MpOwotc3NpemVfdCB4ZnNfc3BsaWNlX3dyaXRlKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLAotCQlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlLCBzdHJ1Y3QgZmlsZSAqb3V0ZmlscCwKLQkJbG9mZl90ICpwcG9zLCBzaXplX3QgY291bnQsIGludCBmbGFncywgaW50IGlvZmxhZ3MpOwotc3NpemVfdCB4ZnNfd3JpdGUoc3RydWN0IHhmc19pbm9kZSAqeGlwLCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCi0JCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92cCwgdW5zaWduZWQgaW50IG5zZWdzLAotCQlsb2ZmX3QgKm9mZnNldCwgaW50IGlvZmxhZ3MpOwogaW50IHhmc19ibWFwKHN0cnVjdCB4ZnNfaW5vZGUgKmlwLCB4ZnNfb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGNvdW50LAogCQlpbnQgZmxhZ3MsIHN0cnVjdCB4ZnNfaW9tYXAgKmlvbWFwcCwgaW50ICpuaW9tYXBzKTsKIHZvaWQgeGZzX3Rvc3NwYWdlcyhzdHJ1Y3QgeGZzX2lub2RlICppbm9kZSwgeGZzX29mZl90IGZpcnN0LApAQCAtNzIsNCArNTksNiBAQAogCQl4ZnNfb2ZmX3QgbGFzdCwgdWludDY0X3QgZmxhZ3MsIGludCBmaW9wdCk7CiBpbnQgeGZzX3dhaXRfb25fcGFnZXMoc3RydWN0IHhmc19pbm9kZSAqaXAsIHhmc19vZmZfdCBmaXJzdCwgeGZzX29mZl90IGxhc3QpOwogCitpbnQgeGZzX3plcm9fZW9mKHN0cnVjdCB4ZnNfaW5vZGUgKiwgeGZzX29mZl90LCB4ZnNfZnNpemVfdCk7CisKICNlbmRpZiAvKiBfWEZTX1ZOT0RFT1BTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYWNwaS9wcm9jZXNzb3IuaAppbmRleCAyOTgzMTc2Li4xMTcyYzI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FjcGkvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hY3BpL3Byb2Nlc3Nvci5oCkBAIC0yMzgsNyArMjM4LDcgQEAKIAogZXh0ZXJuIGludCBhY3BpX3Byb2Nlc3Nvcl9wcmVyZWdpc3Rlcl9wZXJmb3JtYW5jZShzdHJ1Y3QKIAkJCQkJCSAgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UKLQkJCQkJCSAgKnBlcmZvcm1hbmNlKTsKKwkJCQkJCSAgX19wZXJjcHUgKnBlcmZvcm1hbmNlKTsKIAogZXh0ZXJuIGludCBhY3BpX3Byb2Nlc3Nvcl9yZWdpc3Rlcl9wZXJmb3JtYW5jZShzdHJ1Y3QgYWNwaV9wcm9jZXNzb3JfcGVyZm9ybWFuY2UKIAkJCQkJICAgICAgICpwZXJmb3JtYW5jZSwgdW5zaWduZWQgaW50IGNwdSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL2dwaW8uaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCmluZGV4IDQ4NWVlYjYuLjk3OWM2YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvZ3Bpby5oCkBAIC0xMzYsNiArMTM2LDMyIEBACiAKIGV4dGVybiBpbnQgX19ncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKTsKIAorI2RlZmluZSBHUElPRl9ESVJfT1VUCSgwIDw8IDApCisjZGVmaW5lIEdQSU9GX0RJUl9JTgkoMSA8PCAwKQorCisjZGVmaW5lIEdQSU9GX0lOSVRfTE9XCSgwIDw8IDEpCisjZGVmaW5lIEdQSU9GX0lOSVRfSElHSAkoMSA8PCAxKQorCisjZGVmaW5lIEdQSU9GX0lOCQkoR1BJT0ZfRElSX0lOKQorI2RlZmluZSBHUElPRl9PVVRfSU5JVF9MT1cJKEdQSU9GX0RJUl9PVVQgfCBHUElPRl9JTklUX0xPVykKKyNkZWZpbmUgR1BJT0ZfT1VUX0lOSVRfSElHSAkoR1BJT0ZfRElSX09VVCB8IEdQSU9GX0lOSVRfSElHSCkKKworLyoqCisgKiBzdHJ1Y3QgZ3BpbyAtIGEgc3RydWN0dXJlIGRlc2NyaWJpbmcgYSBHUElPIHdpdGggY29uZmlndXJhdGlvbgorICogQGdwaW86CXRoZSBHUElPIG51bWJlcgorICogQGZsYWdzOglHUElPIGNvbmZpZ3VyYXRpb24gYXMgc3BlY2lmaWVkIGJ5IEdQSU9GXyoKKyAqIEBsYWJlbDoJYSBsaXRlcmFsIGRlc2NyaXB0aW9uIHN0cmluZyBvZiB0aGlzIEdQSU8KKyAqLworc3RydWN0IGdwaW8geworCXVuc2lnbmVkCWdwaW87CisJdW5zaWduZWQgbG9uZwlmbGFnczsKKwljb25zdCBjaGFyCSpsYWJlbDsKK307CisKK2V4dGVybiBpbnQgZ3Bpb19yZXF1ZXN0X29uZSh1bnNpZ25lZCBncGlvLCB1bnNpZ25lZCBsb25nIGZsYWdzLCBjb25zdCBjaGFyICpsYWJlbCk7CitleHRlcm4gaW50IGdwaW9fcmVxdWVzdF9hcnJheShzdHJ1Y3QgZ3BpbyAqYXJyYXksIHNpemVfdCBudW0pOworZXh0ZXJuIHZvaWQgZ3Bpb19mcmVlX2FycmF5KHN0cnVjdCBncGlvICphcnJheSwgc2l6ZV90IG51bSk7CisKICNpZmRlZiBDT05GSUdfR1BJT19TWVNGUwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9sb2NhbC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9sb2NhbC5oCmluZGV4IGZjMjE4NDQuLmM4YTVkNjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvbG9jYWwuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL2xvY2FsLmgKQEAgLTUyLDIzICs1Miw0IEBACiAjZGVmaW5lIF9fbG9jYWxfYWRkKGksbCkJbG9jYWxfc2V0KChsKSwgbG9jYWxfcmVhZChsKSArIChpKSkKICNkZWZpbmUgX19sb2NhbF9zdWIoaSxsKQlsb2NhbF9zZXQoKGwpLCBsb2NhbF9yZWFkKGwpIC0gKGkpKQogCi0vKiBVc2UgdGhlc2UgZm9yIHBlci1jcHUgbG9jYWxfdCB2YXJpYWJsZXM6IG9uIHNvbWUgYXJjaHMgdGhleSBhcmUKLSAqIG11Y2ggbW9yZSBlZmZpY2llbnQgdGhhbiB0aGVzZSBuYWl2ZSBpbXBsZW1lbnRhdGlvbnMuICBOb3RlIHRoZXkgdGFrZQotICogYSB2YXJpYWJsZSAoZWcuIG15c3RydWN0LmZvbyksIG5vdCBhbiBhZGRyZXNzLgotICovCi0jZGVmaW5lIGNwdV9sb2NhbF9yZWFkKGwpCWxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIobCkpCi0jZGVmaW5lIGNwdV9sb2NhbF9zZXQobCwgaSkJbG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKGwpLCAoaSkpCi0jZGVmaW5lIGNwdV9sb2NhbF9pbmMobCkJbG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKGwpKQotI2RlZmluZSBjcHVfbG9jYWxfZGVjKGwpCWxvY2FsX2RlYygmX19nZXRfY3B1X3ZhcihsKSkKLSNkZWZpbmUgY3B1X2xvY2FsX2FkZChpLCBsKQlsb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkKLSNkZWZpbmUgY3B1X2xvY2FsX3N1YihpLCBsKQlsb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3ZhcihsKSkKLQotLyogTm9uLWF0b21pYyBpbmNyZW1lbnRzLCBpZS4gcHJlZW1wdGlvbiBkaXNhYmxlZCBhbmQgd29uJ3QgYmUgdG91Y2hlZAotICogaW4gaW50ZXJydXB0LCBldGMuICBTb21lIGFyY2hzIGNhbiBvcHRpbWl6ZSB0aGlzIGNhc2Ugd2VsbC4KLSAqLwotI2RlZmluZSBfX2NwdV9sb2NhbF9pbmMobCkJX19sb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIobCkpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX2RlYyhsKQlfX2xvY2FsX2RlYygmX19nZXRfY3B1X3ZhcihsKSkKLSNkZWZpbmUgX19jcHVfbG9jYWxfYWRkKGksIGwpCV9fbG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIobCkpCi0jZGVmaW5lIF9fY3B1X2xvY2FsX3N1YihpLCBsKQlfX2xvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKGwpKQotCiAjZW5kaWYgLyogX0FTTV9HRU5FUklDX0xPQ0FMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGNpLWRtYS1jb21wYXQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGNpLWRtYS1jb21wYXQuaAppbmRleCAzN2IzNzA2Li4xNDM3YjdkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BjaS1kbWEtY29tcGF0LmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wY2ktZG1hLWNvbXBhdC5oCkBAIC02LDkgKzYsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KIAotLyogbm90ZSBwY2lfc2V0X2RtYV9tYXNrIGlzbid0IGhlcmUsIHNpbmNlIGl0J3MgYSBwdWJsaWMgZnVuY3Rpb24KLSAqIGV4cG9ydGVkIGZyb20gZHJpdmVycy9wY2ksIHVzZSBkbWFfc3VwcG9ydGVkIGluc3RlYWQgKi8KLQogc3RhdGljIGlubGluZSBpbnQKIHBjaV9kbWFfc3VwcG9ydGVkKHN0cnVjdCBwY2lfZGV2ICpod2RldiwgdTY0IG1hc2spCiB7CkBAIC0xMDQsNCArMTAxLDE2IEBACiAJcmV0dXJuIGRtYV9tYXBwaW5nX2Vycm9yKCZwZGV2LT5kZXYsIGRtYV9hZGRyKTsKIH0KIAorI2lmZGVmIENPTkZJR19QQ0kKK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9zZXRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IG1hc2spCit7CisJcmV0dXJuIGRtYV9zZXRfbWFzaygmZGV2LT5kZXYsIG1hc2spOworfQorCitzdGF0aWMgaW5saW5lIGludCBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IG1hc2spCit7CisJcmV0dXJuIGRtYV9zZXRfY29oZXJlbnRfbWFzaygmZGV2LT5kZXYsIG1hc2spOworfQorI2VuZGlmCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZXJjcHUuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGVyY3B1LmgKaW5kZXggODA4N2I5MC4uMDRmOTFjMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZXJjcHUuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BlcmNwdS5oCkBAIC00MSw3ICs0MSwxMSBAQAogICogT25seSBTMzkwIHByb3ZpZGVzIGl0cyBvd24gbWVhbnMgb2YgbW92aW5nIHRoZSBwb2ludGVyLgogICovCiAjaWZuZGVmIFNISUZUX1BFUkNQVV9QVFIKLSNkZWZpbmUgU0hJRlRfUEVSQ1BVX1BUUihfX3AsIF9fb2Zmc2V0KQlSRUxPQ19ISURFKChfX3ApLCAoX19vZmZzZXQpKQorLyogV2VpcmQgY2FzdCBrZWVwcyBib3RoIEdDQyBhbmQgc3BhcnNlIGhhcHB5LiAqLworI2RlZmluZSBTSElGVF9QRVJDUFVfUFRSKF9fcCwgX19vZmZzZXQpCSh7CQkJCVwKKwlfX3ZlcmlmeV9wY3B1X3B0cigoX19wKSk7CQkJCQlcCisJUkVMT0NfSElERSgodHlwZW9mKCooX19wKSkgX19rZXJuZWwgX19mb3JjZSAqKShfX3ApLCAoX19vZmZzZXQpKTsgXAorfSkKICNlbmRpZgogCiAvKgpAQCAtNTAsMTEgKzU0LDExIEBACiAgKiBvZmZzZXQuCiAgKi8KICNkZWZpbmUgcGVyX2NwdSh2YXIsIGNwdSkgXAotCSgqU0hJRlRfUEVSQ1BVX1BUUigmcGVyX2NwdV92YXIodmFyKSwgcGVyX2NwdV9vZmZzZXQoY3B1KSkpCisJKCpTSElGVF9QRVJDUFVfUFRSKCYodmFyKSwgcGVyX2NwdV9vZmZzZXQoY3B1KSkpCiAjZGVmaW5lIF9fZ2V0X2NwdV92YXIodmFyKSBcCi0JKCpTSElGVF9QRVJDUFVfUFRSKCZwZXJfY3B1X3Zhcih2YXIpLCBteV9jcHVfb2Zmc2V0KSkKKwkoKlNISUZUX1BFUkNQVV9QVFIoJih2YXIpLCBteV9jcHVfb2Zmc2V0KSkKICNkZWZpbmUgX19yYXdfZ2V0X2NwdV92YXIodmFyKSBcCi0JKCpTSElGVF9QRVJDUFVfUFRSKCZwZXJfY3B1X3Zhcih2YXIpLCBfX215X2NwdV9vZmZzZXQpKQorCSgqU0hJRlRfUEVSQ1BVX1BUUigmKHZhciksIF9fbXlfY3B1X29mZnNldCkpCiAKICNkZWZpbmUgdGhpc19jcHVfcHRyKHB0cikgU0hJRlRfUEVSQ1BVX1BUUihwdHIsIG15X2NwdV9vZmZzZXQpCiAjZGVmaW5lIF9fdGhpc19jcHVfcHRyKHB0cikgU0hJRlRfUEVSQ1BVX1BUUihwdHIsIF9fbXlfY3B1X29mZnNldCkKQEAgLTY2LDkgKzcwLDkgQEAKIAogI2Vsc2UgLyogISBTTVAgKi8KIAotI2RlZmluZSBwZXJfY3B1KHZhciwgY3B1KQkJCSgqKCh2b2lkKShjcHUpLCAmcGVyX2NwdV92YXIodmFyKSkpCi0jZGVmaW5lIF9fZ2V0X2NwdV92YXIodmFyKQkJCXBlcl9jcHVfdmFyKHZhcikKLSNkZWZpbmUgX19yYXdfZ2V0X2NwdV92YXIodmFyKQkJCXBlcl9jcHVfdmFyKHZhcikKKyNkZWZpbmUgcGVyX2NwdSh2YXIsIGNwdSkJCQkoKigodm9pZCkoY3B1KSwgJih2YXIpKSkKKyNkZWZpbmUgX19nZXRfY3B1X3Zhcih2YXIpCQkJKHZhcikKKyNkZWZpbmUgX19yYXdfZ2V0X2NwdV92YXIodmFyKQkJCSh2YXIpCiAjZGVmaW5lIHRoaXNfY3B1X3B0cihwdHIpIHBlcl9jcHVfcHRyKHB0ciwgMCkKICNkZWZpbmUgX190aGlzX2NwdV9wdHIocHRyKSB0aGlzX2NwdV9wdHIocHRyKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1QLmggYi9pbmNsdWRlL2RybS9kcm1QLmgKaW5kZXggZmZhYzE1Ny4uNGEzYzRlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtUC5oCisrKyBiL2luY2x1ZGUvZHJtL2RybVAuaApAQCAtODAxLDYgKzgwMSw3IEBACiAJICovCiAJaW50ICgqZ2VtX2luaXRfb2JqZWN0KSAoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopOwogCXZvaWQgKCpnZW1fZnJlZV9vYmplY3QpIChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaik7CisJdm9pZCAoKmdlbV9mcmVlX29iamVjdF91bmxvY2tlZCkgKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKTsKIAogCS8qIHZnYSBhcmIgaXJxIGhhbmRsZXIgKi8KIAl2b2lkICgqdmdhYXJiX2lycSkoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgYm9vbCBzdGF0ZSk7CkBAIC0xNDI3LDYgKzE0MjgsNyBAQAogaW50IGRybV9nZW1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKIHZvaWQgZHJtX2dlbV9kZXN0cm95KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogdm9pZCBkcm1fZ2VtX29iamVjdF9mcmVlKHN0cnVjdCBrcmVmICprcmVmKTsKK3ZvaWQgZHJtX2dlbV9vYmplY3RfZnJlZV91bmxvY2tlZChzdHJ1Y3Qga3JlZiAqa3JlZik7CiBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmRybV9nZW1fb2JqZWN0X2FsbG9jKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCSAgICBzaXplX3Qgc2l6ZSk7CiB2b2lkIGRybV9nZW1fb2JqZWN0X2hhbmRsZV9mcmVlKHN0cnVjdCBrcmVmICprcmVmKTsKQEAgLTE0NDMsMTAgKzE0NDUsMTUgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCiB7Ci0JaWYgKG9iaiA9PSBOVUxMKQotCQlyZXR1cm47CisJaWYgKG9iaiAhPSBOVUxMKQorCQlrcmVmX3B1dCgmb2JqLT5yZWZjb3VudCwgZHJtX2dlbV9vYmplY3RfZnJlZSk7Cit9CiAKLQlrcmVmX3B1dCgmb2JqLT5yZWZjb3VudCwgZHJtX2dlbV9vYmplY3RfZnJlZSk7CitzdGF0aWMgaW5saW5lIHZvaWQKK2RybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqb2JqKQoreworCWlmIChvYmogIT0gTlVMTCkKKwkJa3JlZl9wdXQoJm9iai0+cmVmY291bnQsIGRybV9nZW1fb2JqZWN0X2ZyZWVfdW5sb2NrZWQpOwogfQogCiBpbnQgZHJtX2dlbV9oYW5kbGVfY3JlYXRlKHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2LApAQCAtMTQ3NSw2ICsxNDgyLDIxIEBACiAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2Uob2JqKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkCitkcm1fZ2VtX29iamVjdF9oYW5kbGVfdW5yZWZlcmVuY2VfdW5sb2NrZWQoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpvYmopCit7CisJaWYgKG9iaiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKgorCSogTXVzdCBidW1wIGhhbmRsZSBjb3VudCBmaXJzdCBhcyB0aGlzIG1heSBiZSB0aGUgbGFzdAorCSogcmVmLCBpbiB3aGljaCBjYXNlIHRoZSBvYmplY3Qgd291bGQgZGlzYXBwZWFyIGJlZm9yZSB3ZQorCSogY2hlY2tlZCBmb3IgYSBuYW1lCisJKi8KKwlrcmVmX3B1dCgmb2JqLT5oYW5kbGVjb3VudCwgZHJtX2dlbV9vYmplY3RfaGFuZGxlX2ZyZWUpOworCWRybV9nZW1fb2JqZWN0X3VucmVmZXJlbmNlX3VubG9ja2VkKG9iaik7Cit9CisKIHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZHJtX2dlbV9vYmplY3RfbG9va3VwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxwLAogCQkJCQkgICAgIHUzMiBoYW5kbGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2J1ZmZlci5oIGIvaW5jbHVkZS9kcm0vZHJtX2J1ZmZlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyMmRiZmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2RybS9kcm1fYnVmZmVyLmgKQEAgLTAsMCArMSwxNDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAyMDEwIFBhdWxpIE5pZW1pbmVuLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBNdWx0aXBhcnQgYnVmZmVyIGZvciBjb3BpbmcgZGF0YSB3aGljaCBpcyBsYXJnZXIgdGhhbiB0aGUgcGFnZSBzaXplLgorICoKKyAqIEF1dGhvcnM6CisgKiBQYXVsaSBOaWVtaW5lbiA8c3Vva2tvcy1hdC1nbWFpbC1kb3QtY29tPgorICovCisKKyNpZm5kZWYgX0RSTV9CVUZGRVJfSF8KKyNkZWZpbmUgX0RSTV9CVUZGRVJfSF8KKworI2luY2x1ZGUgImRybVAuaCIKKworc3RydWN0IGRybV9idWZmZXIgeworCWludCBpdGVyYXRvcjsKKwlpbnQgc2l6ZTsKKwljaGFyICpkYXRhW107Cit9OworCisKKy8qKgorICogUmV0dXJuIHRoZSBpbmRleCBvZiBwYWdlIHRoYXQgYnVmZmVyIGlzIGN1cnJlbnRseSBwb2ludGluZyBhdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZHJtX2J1ZmZlcl9wYWdlKHN0cnVjdCBkcm1fYnVmZmVyICpidWYpCit7CisJcmV0dXJuIGJ1Zi0+aXRlcmF0b3IgLyBQQUdFX1NJWkU7Cit9CisvKioKKyAqIFJldHVybiB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgYnl0ZSBpbiB0aGUgcGFnZQorICovCitzdGF0aWMgaW5saW5lIGludCBkcm1fYnVmZmVyX2luZGV4KHN0cnVjdCBkcm1fYnVmZmVyICpidWYpCit7CisJcmV0dXJuIGJ1Zi0+aXRlcmF0b3IgJiAoUEFHRV9TSVpFIC0gMSk7Cit9CisvKioKKyAqIFJldHVybiBudW1iZXIgb2YgYnl0ZXMgdGhhdCBpcyBsZWZ0IHRvIHByb2Nlc3MKKyAqLworc3RhdGljIGlubGluZSBpbnQgZHJtX2J1ZmZlcl91bnByb2Nlc3NlZChzdHJ1Y3QgZHJtX2J1ZmZlciAqYnVmKQoreworCXJldHVybiBidWYtPnNpemUgLSBidWYtPml0ZXJhdG9yOworfQorCisvKioKKyAqIEFkdmFuY2UgdGhlIGJ1ZmZlciBpdGVyYXRvciBudW1iZXIgb2YgYnl0ZXMgdGhhdCBpcyBnaXZlbi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIGRybV9idWZmZXJfYWR2YW5jZShzdHJ1Y3QgZHJtX2J1ZmZlciAqYnVmLCBpbnQgYnl0ZXMpCit7CisJYnVmLT5pdGVyYXRvciArPSBieXRlczsKK30KKworLyoqCisgKiBBbGxvY2F0ZSB0aGUgZHJtIGJ1ZmZlciBvYmplY3QuCisgKgorICogICBidWY6IEEgcG9pbnRlciB0byBhIHBvaW50ZXIgd2hlcmUgdGhlIG9iamVjdCBpcyBzdG9yZWQuCisgKiAgIHNpemU6IFRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gYWxsb2NhdGUuCisgKi8KK2V4dGVybiBpbnQgZHJtX2J1ZmZlcl9hbGxvYyhzdHJ1Y3QgZHJtX2J1ZmZlciAqKmJ1ZiwgaW50IHNpemUpOworCisvKioKKyAqIENvcHkgdGhlIHVzZXIgZGF0YSB0byB0aGUgYmVnaW4gb2YgdGhlIGJ1ZmZlciBhbmQgcmVzZXQgdGhlIHByb2Nlc3NpbmcKKyAqIGl0ZXJhdG9yLgorICoKKyAqICAgdXNlcl9kYXRhOiBBIHBvaW50ZXIgdGhlIGRhdGEgdGhhdCBpcyBjb3BpZWQgdG8gdGhlIGJ1ZmZlci4KKyAqICAgc2l6ZTogVGhlIE51bWJlciBvZiBieXRlcyB0byBjb3B5LgorICovCitleHRlcm4gaW50IGRybV9idWZmZXJfY29weV9mcm9tX3VzZXIoc3RydWN0IGRybV9idWZmZXIgKmJ1ZiwKKwkJdm9pZCBfX3VzZXIgKnVzZXJfZGF0YSwgaW50IHNpemUpOworCisvKioKKyAqIEZyZWUgdGhlIGRybSBidWZmZXIgb2JqZWN0CisgKi8KK2V4dGVybiB2b2lkIGRybV9idWZmZXJfZnJlZShzdHJ1Y3QgZHJtX2J1ZmZlciAqYnVmKTsKKworLyoqCisgKiBSZWFkIGFuIG9iamVjdCBmcm9tIGJ1ZmZlciB0aGF0IG1heSBiZSBzcGxpdCB0byBtdWx0aXBsZSBwYXJ0cy4gSWYgb2JqZWN0CisgKiBpcyBub3Qgc3BsaXQgZnVuY3Rpb24ganVzdCByZXR1cm5zIHRoZSBwb2ludGVyIHRvIG9iamVjdCBpbiBidWZmZXIuIEJ1dCBpbgorICogY2FzZSBvZiBzcGxpdCBvYmplY3QgZGF0YSBpcyBjb3BpZWQgdG8gZ2l2ZW4gc3RhY2sgb2JqZWN0IHRoYXQgaXMgc3VwbGllZAorICogYnkgY2FsbGVyLgorICoKKyAqIFRoZSBwcm9jZXNzaW5nIGxvY2F0aW9uIG9mIHRoZSBidWZmZXIgaXMgYWxzbyBhZHZhbmNlZCB0byB0aGUgbmV4dCBieXRlCisgKiBhZnRlciB0aGUgb2JqZWN0LgorICoKKyAqICAgb2Jqc2l6ZTogVGhlIHNpemUgb2YgdGhlIG9iamV0IGluIGJ5dGVzLgorICogICBzdGFja19vYmo6IEEgcG9pbnRlciB0byBhIG1lbW9yeSBsb2NhdGlvbiB3aGVyZSBvYmplY3QgY2FuIGJlIGNvcGllZC4KKyAqLworZXh0ZXJuIHZvaWQgKmRybV9idWZmZXJfcmVhZF9vYmplY3Qoc3RydWN0IGRybV9idWZmZXIgKmJ1ZiwKKwkJaW50IG9ianNpemUsIHZvaWQgKnN0YWNrX29iaik7CisKKy8qKgorICogUmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgZHdvcmQgd2hpY2ggaXMgb2Zmc2V0IG51bWJlciBvZiBlbGVtZW50cyBmcm9tIHRoZQorICogY3VycmVudCBwcm9jZXNzaW5nIGxvY2F0aW9uLgorICoKKyAqIENhbGxlciBtdXN0IG1ha2Ugc3VyZSB0aGF0IGR3b3JkIGlzIG5vdCBzcGxpdCBpbiB0aGUgYnVmZmVyLiBUaGlzCisgKiByZXF1aXJlbWVudCBpcyBlYXNpbHkgbWV0IGlmIGFsbCB0aGUgc2l6ZXMgb2Ygb2JqZWN0cyBpbiBidWZmZXIgYXJlCisgKiBtdWx0aXBsZXMgb2YgZHdvcmQgYW5kIFBBR0VfU0laRSBpcyBtdWx0aXBsZSBkd29yZC4KKyAqCisgKiBDYWxsIHRvIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBjaGFuZ2UgdGhlIHByb2Nlc3NpbmcgbG9jYXRpb24uCisgKgorICogICBvZmZzZXQ6IFRoZSBpbmRleCBvZiB0aGUgZHdvcmQgcmVsYXRpdmUgdG8gdGhlIGludGVybmF0IGl0ZXJhdG9yLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgKmRybV9idWZmZXJfcG9pbnRlcl90b19kd29yZChzdHJ1Y3QgZHJtX2J1ZmZlciAqYnVmZmVyLAorCQlpbnQgb2Zmc2V0KQoreworCWludCBpdGVyID0gYnVmZmVyLT5pdGVyYXRvciArIG9mZnNldCAqIDQ7CisJcmV0dXJuICZidWZmZXItPmRhdGFbaXRlciAvIFBBR0VfU0laRV1baXRlciAmIChQQUdFX1NJWkUgLSAxKV07Cit9CisvKioKKyAqIFJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIGR3b3JkIHdoaWNoIGlzIG9mZnNldCBudW1iZXIgb2YgZWxlbWVudHMgZnJvbQorICogdGhlIGN1cnJlbnQgcHJvY2Vzc2luZyBsb2NhdGlvbi4KKyAqCisgKiBDYWxsIHRvIHRoaXMgZnVuY3Rpb24gZG9lc24ndCBjaGFuZ2UgdGhlIHByb2Nlc3NpbmcgbG9jYXRpb24uCisgKgorICogICBvZmZzZXQ6IFRoZSBpbmRleCBvZiB0aGUgYnl0ZSByZWxhdGl2ZSB0byB0aGUgaW50ZXJuYXQgaXRlcmF0b3IuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCAqZHJtX2J1ZmZlcl9wb2ludGVyX3RvX2J5dGUoc3RydWN0IGRybV9idWZmZXIgKmJ1ZmZlciwKKwkJaW50IG9mZnNldCkKK3sKKwlpbnQgaXRlciA9IGJ1ZmZlci0+aXRlcmF0b3IgKyBvZmZzZXQ7CisJcmV0dXJuICZidWZmZXItPmRhdGFbaXRlciAvIFBBR0VfU0laRV1baXRlciAmIChQQUdFX1NJWkUgLSAxKV07Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKaW5kZXggZmRmNDNhYi4uMTM0NzUyNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCkBAIC04MDEsNCArODAxLDYgQEAKIAkJCQlib29sIGludGVybGFjZWQsIGludCBtYXJnaW5zKTsKIGV4dGVybiBpbnQgZHJtX2FkZF9tb2Rlc19ub2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQlpbnQgaGRpc3BsYXksIGludCB2ZGlzcGxheSk7CisKK2V4dGVybiBib29sIGRybV9lZGlkX2lzX3ZhbGlkKHN0cnVjdCBlZGlkICplZGlkKTsKICNlbmRpZiAvKiBfX0RSTV9DUlRDX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2VkaWQuaCBiL2luY2x1ZGUvZHJtL2RybV9lZGlkLmgKaW5kZXggZDMzYzNlMC4uYjQyMDk4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2VkaWQuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fZWRpZC5oCkBAIC0yMDEsNCArMjAxLDcgQEAKIAogI2RlZmluZSBFRElEX1BST0RVQ1RfSUQoZSkgKChlKS0+cHJvZF9jb2RlWzBdIHwgKChlKS0+cHJvZF9jb2RlWzFdIDw8IDgpKQogCisvKiBkZWZpbmUgdGhlIG51bWJlciBvZiBFeHRlbnNpb24gRURJRCBibG9jayAqLworI2RlZmluZSBEUk1fTUFYX0VESURfRVhUX05VTSA0CisKICNlbmRpZiAvKiBfX0RSTV9FRElEX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCmluZGV4IGU2ZjNiMTIuLjY3NjEwNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKQEAgLTE0MSw2ICsxNDEsNDEgQEAKIAl7MHgxMDAyLCAweDVlNGMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg1ZTRkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NWU0ZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4ODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ1lQUkVTU3xSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2ODg4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2ODg5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2ODhBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2ODk4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2ODk5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2ODljLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0hFTUxPQ0t8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2ODlkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0hFTUxPQ0t8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2ODllLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NZUFJFU1N8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2OGEwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0pVTklQRVJ8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjhhMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9KVU5JUEVSfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4YTgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfSlVOSVBFUnxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4YTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfSlVOSVBFUnxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4YjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfSlVOSVBFUnxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2OGI4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0pVTklQRVJ8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2OGI5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0pVTklQRVJ8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2OGJlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0pVTklQRVJ8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2OGMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JFRFdPT0R8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjhjMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SRURXT09EfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4YzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4YzksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4ZDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4ZDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4ZGEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4ZGUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUkVEV09PRHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4ZTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0VEQVJ8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjhlMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DRURBUnxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2OGU0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NFREFSfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4ZTUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0VEQVJ8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjhlOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DRURBUnxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4ZTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0VEQVJ8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2OGYxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NFREFSfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NjhmOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9DRURBUnxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDY4ZjksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfQ0VEQVJ8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg2OGZlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX0NFREFSfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NzEwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNTIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAogCXsweDEwMDIsIDB4NzEwMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNTIwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKIAl7MHgxMDAyLCAweDcxMDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjUyMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCkBAIC01NTgsNCArNTkzLDUgQEAKIAl7MHg4MDg2LCAweDM1ZTgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCAweGZmZmYwMCwgMH0sIFwKIAl7MHg4MDg2LCAweDAwNDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCAweGZmZmYwMCwgMH0sIFwKIAl7MHg4MDg2LCAweDAwNDYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCAweGZmZmYwMCwgMH0sIFwKKwl7MHg4MDg2LCAweDAxMDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSA8PCA4LCAweGZmZmYwMCwgMH0sIFwKIAl7MCwgMCwgMH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL25vdXZlYXVfZHJtLmggYi9pbmNsdWRlL2RybS9ub3V2ZWF1X2RybS5oCmluZGV4IGY3NDU5NDguLmE2YTlmNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL25vdXZlYXVfZHJtLmgKKysrIGIvaW5jbHVkZS9kcm0vbm91dmVhdV9kcm0uaApAQCAtMjUsMTMgKzI1LDE0IEBACiAjaWZuZGVmIF9fTk9VVkVBVV9EUk1fSF9fCiAjZGVmaW5lIF9fTk9VVkVBVV9EUk1fSF9fCiAKLSNkZWZpbmUgTk9VVkVBVV9EUk1fSEVBREVSX1BBVENITEVWRUwgMTUKKyNkZWZpbmUgTk9VVkVBVV9EUk1fSEVBREVSX1BBVENITEVWRUwgMTYKIAogc3RydWN0IGRybV9ub3V2ZWF1X2NoYW5uZWxfYWxsb2MgewogCXVpbnQzMl90ICAgICBmYl9jdHhkbWFfaGFuZGxlOwogCXVpbnQzMl90ICAgICB0dF9jdHhkbWFfaGFuZGxlOwogCiAJaW50ICAgICAgICAgIGNoYW5uZWw7CisJdWludDMyX3QgICAgIHB1c2hidWZfZG9tYWluczsKIAogCS8qIE5vdGlmaWVyIG1lbW9yeSAqLwogCXVpbnQzMl90ICAgICBub3RpZmllcl9oYW5kbGU7CkBAIC0xMDksNjggKzExMCw1OCBAQAogCXVpbnQzMl90IGFsaWduOwogfTsKIAorI2RlZmluZSBOT1VWRUFVX0dFTV9NQVhfQlVGRkVSUyAxMDI0CitzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWZfYm9fcHJlc3VtZWQgeworCXVpbnQzMl90IHZhbGlkOworCXVpbnQzMl90IGRvbWFpbjsKKwl1aW50NjRfdCBvZmZzZXQ7Cit9OworCiBzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWZfYm8gewogCXVpbnQ2NF90IHVzZXJfcHJpdjsKIAl1aW50MzJfdCBoYW5kbGU7CiAJdWludDMyX3QgcmVhZF9kb21haW5zOwogCXVpbnQzMl90IHdyaXRlX2RvbWFpbnM7CiAJdWludDMyX3QgdmFsaWRfZG9tYWluczsKLQl1aW50MzJfdCBwcmVzdW1lZF9vazsKLQl1aW50MzJfdCBwcmVzdW1lZF9kb21haW47Ci0JdWludDY0X3QgcHJlc3VtZWRfb2Zmc2V0OworCXN0cnVjdCBkcm1fbm91dmVhdV9nZW1fcHVzaGJ1Zl9ib19wcmVzdW1lZCBwcmVzdW1lZDsKIH07CiAKICNkZWZpbmUgTk9VVkVBVV9HRU1fUkVMT0NfTE9XICAoMSA8PCAwKQogI2RlZmluZSBOT1VWRUFVX0dFTV9SRUxPQ19ISUdIICgxIDw8IDEpCiAjZGVmaW5lIE5PVVZFQVVfR0VNX1JFTE9DX09SICAgKDEgPDwgMikKKyNkZWZpbmUgTk9VVkVBVV9HRU1fTUFYX1JFTE9DUyAxMDI0CiBzdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWZfcmVsb2MgeworCXVpbnQzMl90IHJlbG9jX2JvX2luZGV4OworCXVpbnQzMl90IHJlbG9jX2JvX29mZnNldDsKIAl1aW50MzJfdCBib19pbmRleDsKLQl1aW50MzJfdCByZWxvY19pbmRleDsKIAl1aW50MzJfdCBmbGFnczsKIAl1aW50MzJfdCBkYXRhOwogCXVpbnQzMl90IHZvcjsKIAl1aW50MzJfdCB0b3I7CiB9OwogCi0jZGVmaW5lIE5PVVZFQVVfR0VNX01BWF9CVUZGRVJTIDEwMjQKLSNkZWZpbmUgTk9VVkVBVV9HRU1fTUFYX1JFTE9DUyAxMDI0CisjZGVmaW5lIE5PVVZFQVVfR0VNX01BWF9QVVNIIDUxMgorc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9wdXNoYnVmX3B1c2ggeworCXVpbnQzMl90IGJvX2luZGV4OworCXVpbnQzMl90IHBhZDsKKwl1aW50NjRfdCBvZmZzZXQ7CisJdWludDY0X3QgbGVuZ3RoOworfTsKIAogc3RydWN0IGRybV9ub3V2ZWF1X2dlbV9wdXNoYnVmIHsKIAl1aW50MzJfdCBjaGFubmVsOwotCXVpbnQzMl90IG5yX2R3b3JkczsKIAl1aW50MzJfdCBucl9idWZmZXJzOwotCXVpbnQzMl90IG5yX3JlbG9jczsKLQl1aW50NjRfdCBkd29yZHM7CiAJdWludDY0X3QgYnVmZmVyczsKLQl1aW50NjRfdCByZWxvY3M7Ci19OwotCi1zdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3B1c2hidWZfY2FsbCB7Ci0JdWludDMyX3QgY2hhbm5lbDsKLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCXVpbnQzMl90IG5yX2J1ZmZlcnM7CiAJdWludDMyX3QgbnJfcmVsb2NzOwotCXVpbnQzMl90IG5yX2R3b3JkczsKLQl1aW50NjRfdCBidWZmZXJzOworCXVpbnQzMl90IG5yX3B1c2g7CiAJdWludDY0X3QgcmVsb2NzOworCXVpbnQ2NF90IHB1c2g7CiAJdWludDMyX3Qgc3VmZml4MDsKIAl1aW50MzJfdCBzdWZmaXgxOwotCS8qIGJlbG93IG9ubHkgYWNjZXNzZWQgZm9yIENBTEwyICovCiAJdWludDY0X3QgdnJhbV9hdmFpbGFibGU7CiAJdWludDY0X3QgZ2FydF9hdmFpbGFibGU7CiB9OwogCi1zdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3BpbiB7Ci0JdWludDMyX3QgaGFuZGxlOwotCXVpbnQzMl90IGRvbWFpbjsKLQl1aW50NjRfdCBvZmZzZXQ7Ci19OwotCi1zdHJ1Y3QgZHJtX25vdXZlYXVfZ2VtX3VucGluIHsKLQl1aW50MzJfdCBoYW5kbGU7Ci19OwotCiAjZGVmaW5lIE5PVVZFQVVfR0VNX0NQVV9QUkVQX05PV0FJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCiAjZGVmaW5lIE5PVVZFQVVfR0VNX0NQVV9QUkVQX05PQkxPQ0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCiAjZGVmaW5lIE5PVVZFQVVfR0VNX0NQVV9QUkVQX1dSSVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0CkBAIC0xODMsMTQgKzE3NCw2IEBACiAJdWludDMyX3QgaGFuZGxlOwogfTsKIAotc3RydWN0IGRybV9ub3V2ZWF1X2dlbV90aWxlIHsKLQl1aW50MzJfdCBoYW5kbGU7Ci0JdWludDMyX3Qgb2Zmc2V0OwotCXVpbnQzMl90IHNpemU7Ci0JdWludDMyX3QgdGlsZV9tb2RlOwotCXVpbnQzMl90IHRpbGVfZmxhZ3M7Ci19OwotCiBlbnVtIG5vdXZlYXVfYnVzX3R5cGUgewogCU5WX0FHUCAgICAgPSAwLAogCU5WX1BDSSAgICAgPSAxLApAQCAtMjAwLDIyICsxODMsMTcgQEAKIHN0cnVjdCBkcm1fbm91dmVhdV9zYXJlYSB7CiB9OwogCi0jZGVmaW5lIERSTV9OT1VWRUFVX0NBUkRfSU5JVCAgICAgICAgICAweDAwCi0jZGVmaW5lIERSTV9OT1VWRUFVX0dFVFBBUkFNICAgICAgICAgICAweDAxCi0jZGVmaW5lIERSTV9OT1VWRUFVX1NFVFBBUkFNICAgICAgICAgICAweDAyCi0jZGVmaW5lIERSTV9OT1VWRUFVX0NIQU5ORUxfQUxMT0MgICAgICAweDAzCi0jZGVmaW5lIERSTV9OT1VWRUFVX0NIQU5ORUxfRlJFRSAgICAgICAweDA0Ci0jZGVmaW5lIERSTV9OT1VWRUFVX0dST0JKX0FMTE9DICAgICAgICAweDA1Ci0jZGVmaW5lIERSTV9OT1VWRUFVX05PVElGSUVST0JKX0FMTE9DICAweDA2Ci0jZGVmaW5lIERSTV9OT1VWRUFVX0dQVU9CSl9GUkVFICAgICAgICAweDA3CisjZGVmaW5lIERSTV9OT1VWRUFVX0dFVFBBUkFNICAgICAgICAgICAweDAwCisjZGVmaW5lIERSTV9OT1VWRUFVX1NFVFBBUkFNICAgICAgICAgICAweDAxCisjZGVmaW5lIERSTV9OT1VWRUFVX0NIQU5ORUxfQUxMT0MgICAgICAweDAyCisjZGVmaW5lIERSTV9OT1VWRUFVX0NIQU5ORUxfRlJFRSAgICAgICAweDAzCisjZGVmaW5lIERSTV9OT1VWRUFVX0dST0JKX0FMTE9DICAgICAgICAweDA0CisjZGVmaW5lIERSTV9OT1VWRUFVX05PVElGSUVST0JKX0FMTE9DICAweDA1CisjZGVmaW5lIERSTV9OT1VWRUFVX0dQVU9CSl9GUkVFICAgICAgICAweDA2CiAjZGVmaW5lIERSTV9OT1VWRUFVX0dFTV9ORVcgICAgICAgICAgICAweDQwCiAjZGVmaW5lIERSTV9OT1VWRUFVX0dFTV9QVVNIQlVGICAgICAgICAweDQxCi0jZGVmaW5lIERSTV9OT1VWRUFVX0dFTV9QVVNIQlVGX0NBTEwgICAweDQyCi0jZGVmaW5lIERSTV9OT1VWRUFVX0dFTV9QSU4gICAgICAgICAgICAweDQzIC8qICFLTVMgb25seSAqLwotI2RlZmluZSBEUk1fTk9VVkVBVV9HRU1fVU5QSU4gICAgICAgICAgMHg0NCAvKiAhS01TIG9ubHkgKi8KLSNkZWZpbmUgRFJNX05PVVZFQVVfR0VNX0NQVV9QUkVQICAgICAgIDB4NDUKLSNkZWZpbmUgRFJNX05PVVZFQVVfR0VNX0NQVV9GSU5JICAgICAgIDB4NDYKLSNkZWZpbmUgRFJNX05PVVZFQVVfR0VNX0lORk8gICAgICAgICAgIDB4NDcKLSNkZWZpbmUgRFJNX05PVVZFQVVfR0VNX1BVU0hCVUZfQ0FMTDIgIDB4NDgKKyNkZWZpbmUgRFJNX05PVVZFQVVfR0VNX0NQVV9QUkVQICAgICAgIDB4NDIKKyNkZWZpbmUgRFJNX05PVVZFQVVfR0VNX0NQVV9GSU5JICAgICAgIDB4NDMKKyNkZWZpbmUgRFJNX05PVVZFQVVfR0VNX0lORk8gICAgICAgICAgIDB4NDQKIAogI2VuZGlmIC8qIF9fTk9VVkVBVV9EUk1fSF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmggYi9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKaW5kZXggMzk1MzdmMy4uODFlNjE0YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCisrKyBiL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaApAQCAtODA4LDYgKzgwOCw3IEBACiAjZGVmaW5lIFJBREVPTl9USUxJTkdfU1dBUF8zMkJJVCAgMHg4CiAjZGVmaW5lIFJBREVPTl9USUxJTkdfU1VSRkFDRSAgICAgMHgxMCAvKiB0aGlzIG9iamVjdCByZXF1aXJlcyBhIHN1cmZhY2UKIAkJCQkJKiB3aGVuIG1hcHBlZCAtIGkuZS4gZnJvbnQgYnVmZmVyICovCisjZGVmaW5lIFJBREVPTl9USUxJTkdfTUlDUk9fU1FVQVJFIDB4MjAKIAogc3RydWN0IGRybV9yYWRlb25fZ2VtX3NldF90aWxpbmcgewogCXVpbnQzMl90CWhhbmRsZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fZHJpdmVyLmggYi9pbmNsdWRlL2RybS90dG0vdHRtX2JvX2RyaXZlci5oCmluZGV4IDRjNGUwZjguLmUzZjFiNGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL3R0bS90dG1fYm9fZHJpdmVyLmgKKysrIGIvaW5jbHVkZS9kcm0vdHRtL3R0bV9ib19kcml2ZXIuaApAQCAtOTA4LDcgKzkwOCw3IEBACiAgKiBVdGlsaXR5IGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgcGdwcm90X3QgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IKICAqIHNldHRpbmcgdXAgYSBQVEUgd2l0aCB0aGUgY2FjaGluZyBtb2RlbCBpbmRpY2F0ZWQgYnkgQGNfc3RhdGUuCiAgKi8KLWV4dGVybiBwZ3Byb3RfdCB0dG1faW9fcHJvdChlbnVtIHR0bV9jYWNoaW5nX3N0YXRlIGNfc3RhdGUsIHBncHJvdF90IHRtcCk7CitleHRlcm4gcGdwcm90X3QgdHRtX2lvX3Byb3QodWludDMyX3QgY2FjaGluZ19mbGFncywgcGdwcm90X3QgdG1wKTsKIAogI2lmIChkZWZpbmVkKENPTkZJR19BR1ApIHx8IChkZWZpbmVkKENPTkZJR19BR1BfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpKQogI2RlZmluZSBUVE1fSEFTX0FHUApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L0tidWlsZAppbmRleCA5MWJlMGQ4Li5lMmVhMGIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L0tidWlsZAorKysgYi9pbmNsdWRlL2xpbnV4L0tidWlsZApAQCAtMTI2LDYgKzEyNiw3IEBACiBoZWFkZXIteSArPSBuZnM0X21vdW50LmgKIGhlYWRlci15ICs9IG5mc19tb3VudC5oCiBoZWFkZXIteSArPSBubDgwMjExLmgKK2hlYWRlci15ICs9IG9tYXBmYi5oCiBoZWFkZXIteSArPSBwYXJhbS5oCiBoZWFkZXIteSArPSBwY2lfcmVncy5oCiBoZWFkZXIteSArPSBwZXJmX2V2ZW50LmgKQEAgLTM2Myw2ICszNjQsNyBAQAogdW5pZmRlZi15ICs9IHVuaXN0ZC5oCiB1bmlmZGVmLXkgKz0gdXNiZGV2aWNlX2ZzLmgKIHVuaWZkZWYteSArPSB1dHNuYW1lLmgKK3VuaWZkZWYteSArPSB2aG9zdC5oCiB1bmlmZGVmLXkgKz0gdmlkZW9kZXYyLmgKIHVuaWZkZWYteSArPSB2aWRlb2Rldi5oCiB1bmlmZGVmLXkgKz0gdmlydGlvX2NvbmZpZy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2FjY3QuaCBiL2luY2x1ZGUvbGludXgvYWNjdC5oCmluZGV4IDg4MmRjNzIuLjNlNDczN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYWNjdC5oCisrKyBiL2luY2x1ZGUvbGludXgvYWNjdC5oCkBAIC0xMjEsMTYgKzEyMSwxNSBAQAogc3RydWN0IHN1cGVyX2Jsb2NrOwogc3RydWN0IHBhY2N0X3N0cnVjdDsKIHN0cnVjdCBwaWRfbmFtZXNwYWNlOworZXh0ZXJuIGludCBhY2N0X3Bhcm1bXTsgLyogZm9yIHN5c2N0bCAqLwogZXh0ZXJuIHZvaWQgYWNjdF9hdXRvX2Nsb3NlX21udChzdHJ1Y3QgdmZzbW91bnQgKm0pOwogZXh0ZXJuIHZvaWQgYWNjdF9hdXRvX2Nsb3NlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwotZXh0ZXJuIHZvaWQgYWNjdF9pbml0X3BhY2N0KHN0cnVjdCBwYWNjdF9zdHJ1Y3QgKnBhY2N0KTsKIGV4dGVybiB2b2lkIGFjY3RfY29sbGVjdChsb25nIGV4aXRjb2RlLCBpbnQgZ3JvdXBfZGVhZCk7CiBleHRlcm4gdm9pZCBhY2N0X3Byb2Nlc3Modm9pZCk7CiBleHRlcm4gdm9pZCBhY2N0X2V4aXRfbnMoc3RydWN0IHBpZF9uYW1lc3BhY2UgKik7CiAjZWxzZQogI2RlZmluZSBhY2N0X2F1dG9fY2xvc2VfbW50KHgpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYWNjdF9hdXRvX2Nsb3NlKHgpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgYWNjdF9pbml0X3BhY2N0KHgpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYWNjdF9jb2xsZWN0KHgseSkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBhY2N0X3Byb2Nlc3MoKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBhY2N0X2V4aXRfbnMobnMpCWRvIHsgfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYXVkaXQuaCBiL2luY2x1ZGUvbGludXgvYXVkaXQuaAppbmRleCAzYzdhMzU4Li5mMzkxZDQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCkBAIC00MjQsNyArNDI0LDcgQEAKIGV4dGVybiB2b2lkIF9fYXVkaXRfZ2V0bmFtZShjb25zdCBjaGFyICpuYW1lKTsKIGV4dGVybiB2b2lkIGF1ZGl0X3B1dG5hbWUoY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gdm9pZCBfX2F1ZGl0X2lub2RlKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci1leHRlcm4gdm9pZCBfX2F1ZGl0X2lub2RlX2NoaWxkKGNvbnN0IGNoYXIgKmRuYW1lLCBjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCitleHRlcm4gdm9pZCBfX2F1ZGl0X2lub2RlX2NoaWxkKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCQljb25zdCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCk7CiBleHRlcm4gdm9pZCBfX2F1ZGl0X3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQpOwogCkBAIC00NDIsMTEgKzQ0MiwxMCBAQAogCWlmICh1bmxpa2VseSghYXVkaXRfZHVtbXlfY29udGV4dCgpKSkKIAkJX19hdWRpdF9pbm9kZShuYW1lLCBkZW50cnkpOwogfQotc3RhdGljIGlubGluZSB2b2lkIGF1ZGl0X2lub2RlX2NoaWxkKGNvbnN0IGNoYXIgKmRuYW1lLCAKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdWRpdF9pbm9kZV9jaGlsZChjb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCkgewogCWlmICh1bmxpa2VseSghYXVkaXRfZHVtbXlfY29udGV4dCgpKSkKLQkJX19hdWRpdF9pbm9kZV9jaGlsZChkbmFtZSwgZGVudHJ5LCBwYXJlbnQpOworCQlfX2F1ZGl0X2lub2RlX2NoaWxkKGRlbnRyeSwgcGFyZW50KTsKIH0KIHZvaWQgYXVkaXRfY29yZV9kdW1wcyhsb25nIHNpZ25yKTsKIApAQCAtNTQ0LDkgKzU0Myw5IEBACiAjZGVmaW5lIGF1ZGl0X2dldG5hbWUobikgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGF1ZGl0X3B1dG5hbWUobikgZG8geyA7IH0gd2hpbGUgKDApCiAjZGVmaW5lIF9fYXVkaXRfaW5vZGUobixkKSBkbyB7IDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgX19hdWRpdF9pbm9kZV9jaGlsZChkLGkscCkgZG8geyA7IH0gd2hpbGUgKDApCisjZGVmaW5lIF9fYXVkaXRfaW5vZGVfY2hpbGQoaSxwKSBkbyB7IDsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYXVkaXRfaW5vZGUobixkKSBkbyB7IDsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgYXVkaXRfaW5vZGVfY2hpbGQoZCxpLHApIGRvIHsgOyB9IHdoaWxlICgwKQorI2RlZmluZSBhdWRpdF9pbm9kZV9jaGlsZChpLHApIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdF9jb3JlX2R1bXBzKGkpIGRvIHsgOyB9IHdoaWxlICgwKQogI2RlZmluZSBhdWRpdHNjX2dldF9zdGFtcChjLHQscykgKDApCiAjZGVmaW5lIGF1ZGl0X2dldF9sb2dpbnVpZCh0KSAoLTEpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaCBiL2luY2x1ZGUvbGludXgvYmluZm10cy5oCmluZGV4IDg5YzYyNDkuLmM4MDllMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oCisrKyBiL2luY2x1ZGUvbGludXgvYmluZm10cy5oCkBAIC03NCw2ICs3NCw3IEBACiAJc3RydWN0IHB0X3JlZ3MgKnJlZ3M7CiAJc3RydWN0IGZpbGUgKmZpbGU7CiAJdW5zaWduZWQgbG9uZyBsaW1pdDsKKwl1bnNpZ25lZCBsb25nIG1tX2ZsYWdzOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYml0b3BzLmggYi9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oCmluZGV4IDI1YjhiMmYuLmI3OTM4OTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYml0b3BzLmgKKysrIGIvaW5jbHVkZS9saW51eC9iaXRvcHMuaApAQCAtMTYsMTEgKzE2LDEzIEBACiAgKi8KICNpbmNsdWRlIDxhc20vYml0b3BzLmg+CiAKLSNkZWZpbmUgZm9yX2VhY2hfYml0KGJpdCwgYWRkciwgc2l6ZSkgXAorI2RlZmluZSBmb3JfZWFjaF9zZXRfYml0KGJpdCwgYWRkciwgc2l6ZSkgXAogCWZvciAoKGJpdCkgPSBmaW5kX2ZpcnN0X2JpdCgoYWRkciksIChzaXplKSk7IFwKIAkgICAgIChiaXQpIDwgKHNpemUpOyBcCiAJICAgICAoYml0KSA9IGZpbmRfbmV4dF9iaXQoKGFkZHIpLCAoc2l6ZSksIChiaXQpICsgMSkpCiAKKy8qIFRlbXBvcmFyeSAqLworI2RlZmluZSBmb3JfZWFjaF9iaXQoYml0LCBhZGRyLCBzaXplKSBmb3JfZWFjaF9zZXRfYml0KGJpdCwgYWRkciwgc2l6ZSkKIAogc3RhdGljIF9faW5saW5lX18gaW50IGdldF9iaXRtYXNrX29yZGVyKHVuc2lnbmVkIGludCBjb3VudCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmggYi9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCmluZGV4IDNiNzNiOTkuLjQxNmJmNjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKKysrIGIvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaApAQCAtMTUwLDggKzE1MCw4IEBACiBzdHJ1Y3QgYmxrX3RyYWNlIHsKIAlpbnQgdHJhY2Vfc3RhdGU7CiAJc3RydWN0IHJjaGFuICpyY2hhbjsKLQl1bnNpZ25lZCBsb25nICpzZXF1ZW5jZTsKLQl1bnNpZ25lZCBjaGFyICptc2dfZGF0YTsKKwl1bnNpZ25lZCBsb25nIF9fcGVyY3B1ICpzZXF1ZW5jZTsKKwl1bnNpZ25lZCBjaGFyIF9fcGVyY3B1ICptc2dfZGF0YTsKIAl1MTYgYWN0X21hc2s7CiAJdTY0IHN0YXJ0X2xiYTsKIAl1NjQgZW5kX2xiYTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYm9vdG1lbS5oIGIvaW5jbHVkZS9saW51eC9ib290bWVtLmgKaW5kZXggYjEwZWM0OS4uMjY2YWI5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ib290bWVtLmgKKysrIGIvaW5jbHVkZS9saW51eC9ib290bWVtLmgKQEAgLTIzLDYgKzIzLDcgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNhdmVkX21heF9wZm47CiAjZW5kaWYKIAorI2lmbmRlZiBDT05GSUdfTk9fQk9PVE1FTQogLyoKICAqIG5vZGVfYm9vdG1lbV9tYXAgaXMgYSBtYXAgcG9pbnRlciAtIHRoZSBiaXRzIHJlcHJlc2VudCBhbGwgcGh5c2ljYWwgCiAgKiBtZW1vcnkgcGFnZXMgKGluY2x1ZGluZyBob2xlcykgb24gdGhlIG5vZGUuCkBAIC0zNyw2ICszOCw3IEBACiB9IGJvb3RtZW1fZGF0YV90OwogCiBleHRlcm4gYm9vdG1lbV9kYXRhX3QgYm9vdG1lbV9ub2RlX2RhdGFbXTsKKyNlbmRpZgogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBib290bWVtX2Jvb3RtYXBfcGFnZXModW5zaWduZWQgbG9uZyk7CiAKQEAgLTQ2LDYgKzQ4LDcgQEAKIAkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmRwZm4pOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdF9ib290bWVtKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBtZW1lbmQpOwogCit1bnNpZ25lZCBsb25nIGZyZWVfYWxsX21lbW9yeV9jb3JlX2Vhcmx5KGludCBub2RlaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZnJlZV9hbGxfYm9vdG1lbV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZnJlZV9hbGxfYm9vdG1lbSh2b2lkKTsKIApAQCAtODQsNiArODcsMTAgQEAKIAkJCQkgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCQkgIHVuc2lnbmVkIGxvbmcgYWxpZ24sCiAJCQkJICB1bnNpZ25lZCBsb25nIGdvYWwpOwordm9pZCAqX19hbGxvY19ib290bWVtX25vZGVfaGlnaChwZ19kYXRhX3QgKnBnZGF0LAorCQkJCSAgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSAgdW5zaWduZWQgbG9uZyBhbGlnbiwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgZ29hbCk7CiBleHRlcm4gdm9pZCAqX19hbGxvY19ib290bWVtX25vZGVfbm9wYW5pYyhwZ19kYXRhX3QgKnBnZGF0LAogCQkJCSAgdW5zaWduZWQgbG9uZyBzaXplLAogCQkJCSAgdW5zaWduZWQgbG9uZyBhbGlnbiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnJjbXBoeS5oIGIvaW5jbHVkZS9saW51eC9icmNtcGh5LmgKaW5kZXggMmIzMWI5MS4uN2Y0MzdjYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9icmNtcGh5LmgKKysrIGIvaW5jbHVkZS9saW51eC9icmNtcGh5LmgKQEAgLTEsMyArMSwxNCBAQAorI2RlZmluZSBQSFlfSURfQkNNNTA2MTAJCQkweDAxNDNiZDYwCisjZGVmaW5lIFBIWV9JRF9CQ001MDYxME0JCTB4MDE0M2JkNzAKKyNkZWZpbmUgUEhZX0lEX0JDTUFDMTMxCQkJMHgwMTQzYmM3MAorI2RlZmluZSBQSFlfSURfQkNNNTc3ODAJCQkweDAzNjI1ZDkwCisKKyNkZWZpbmUgUEhZX0JDTV9PVUlfTUFTSwkJMHhmZmZmZmMwMAorI2RlZmluZSBQSFlfQkNNX09VSV8xCQkJMHgwMDIwNjAwMAorI2RlZmluZSBQSFlfQkNNX09VSV8yCQkJMHgwMTQzYmMwMAorI2RlZmluZSBQSFlfQkNNX09VSV8zCQkJMHgwMzYyNWMwMAorCisKICNkZWZpbmUgUEhZX0JDTV9GTEFHU19NT0RFX0NPUFBFUgkweDAwMDAwMDAxCiAjZGVmaW5lIFBIWV9CQ01fRkxBR1NfTU9ERV8xMDAwQlgJMHgwMDAwMDAwMgogI2RlZmluZSBQSFlfQkNNX0ZMQUdTX0lOVEZfU0dNSUkJMHgwMDAwMDAxMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idHJlZS0xMjguaCBiL2luY2x1ZGUvbGludXgvYnRyZWUtMTI4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIzNDE0YwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYnRyZWUtMTI4LmgKQEAgLTAsMCArMSwxMDkgQEAKK2V4dGVybiBzdHJ1Y3QgYnRyZWVfZ2VvIGJ0cmVlX2dlbzEyODsKKworc3RydWN0IGJ0cmVlX2hlYWQxMjggeyBzdHJ1Y3QgYnRyZWVfaGVhZCBoOyB9OworCitzdGF0aWMgaW5saW5lIHZvaWQgYnRyZWVfaW5pdF9tZW1wb29sMTI4KHN0cnVjdCBidHJlZV9oZWFkMTI4ICpoZWFkLAorCQkJCQkgbWVtcG9vbF90ICptZW1wb29sKQoreworCWJ0cmVlX2luaXRfbWVtcG9vbCgmaGVhZC0+aCwgbWVtcG9vbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJ0cmVlX2luaXQxMjgoc3RydWN0IGJ0cmVlX2hlYWQxMjggKmhlYWQpCit7CisJcmV0dXJuIGJ0cmVlX2luaXQoJmhlYWQtPmgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYnRyZWVfZGVzdHJveTEyOChzdHJ1Y3QgYnRyZWVfaGVhZDEyOCAqaGVhZCkKK3sKKwlidHJlZV9kZXN0cm95KCZoZWFkLT5oKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkICpidHJlZV9sb29rdXAxMjgoc3RydWN0IGJ0cmVlX2hlYWQxMjggKmhlYWQsIHU2NCBrMSwgdTY0IGsyKQoreworCXU2NCBrZXlbMl0gPSB7azEsIGsyfTsKKwlyZXR1cm4gYnRyZWVfbG9va3VwKCZoZWFkLT5oLCAmYnRyZWVfZ2VvMTI4LCAodW5zaWduZWQgbG9uZyAqKSZrZXkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmJ0cmVlX2dldF9wcmV2MTI4KHN0cnVjdCBidHJlZV9oZWFkMTI4ICpoZWFkLAorCQkJCSAgICAgIHU2NCAqazEsIHU2NCAqazIpCit7CisJdTY0IGtleVsyXSA9IHsqazEsICprMn07CisJdm9pZCAqdmFsOworCisJdmFsID0gYnRyZWVfZ2V0X3ByZXYoJmhlYWQtPmgsICZidHJlZV9nZW8xMjgsCisJCQkgICAgICh1bnNpZ25lZCBsb25nICopJmtleSk7CisJKmsxID0ga2V5WzBdOworCSprMiA9IGtleVsxXTsKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIGludCBidHJlZV9pbnNlcnQxMjgoc3RydWN0IGJ0cmVlX2hlYWQxMjggKmhlYWQsIHU2NCBrMSwgdTY0IGsyLAorCQkJCSAgdm9pZCAqdmFsLCBnZnBfdCBnZnApCit7CisJdTY0IGtleVsyXSA9IHtrMSwgazJ9OworCXJldHVybiBidHJlZV9pbnNlcnQoJmhlYWQtPmgsICZidHJlZV9nZW8xMjgsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgKikma2V5LCB2YWwsIGdmcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGJ0cmVlX3VwZGF0ZTEyOChzdHJ1Y3QgYnRyZWVfaGVhZDEyOCAqaGVhZCwgdTY0IGsxLCB1NjQgazIsCisJCQkJICB2b2lkICp2YWwpCit7CisJdTY0IGtleVsyXSA9IHtrMSwgazJ9OworCXJldHVybiBidHJlZV91cGRhdGUoJmhlYWQtPmgsICZidHJlZV9nZW8xMjgsCisJCQkgICAgKHVuc2lnbmVkIGxvbmcgKikma2V5LCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKmJ0cmVlX3JlbW92ZTEyOChzdHJ1Y3QgYnRyZWVfaGVhZDEyOCAqaGVhZCwgdTY0IGsxLCB1NjQgazIpCit7CisJdTY0IGtleVsyXSA9IHtrMSwgazJ9OworCXJldHVybiBidHJlZV9yZW1vdmUoJmhlYWQtPmgsICZidHJlZV9nZW8xMjgsICh1bnNpZ25lZCBsb25nICopJmtleSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqYnRyZWVfbGFzdDEyOChzdHJ1Y3QgYnRyZWVfaGVhZDEyOCAqaGVhZCwgdTY0ICprMSwgdTY0ICprMikKK3sKKwl1NjQga2V5WzJdOworCXZvaWQgKnZhbDsKKworCXZhbCA9IGJ0cmVlX2xhc3QoJmhlYWQtPmgsICZidHJlZV9nZW8xMjgsICh1bnNpZ25lZCBsb25nICopJmtleVswXSk7CisJaWYgKHZhbCkgeworCQkqazEgPSBrZXlbMF07CisJCSprMiA9IGtleVsxXTsKKwl9CisKKwlyZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIGludCBidHJlZV9tZXJnZTEyOChzdHJ1Y3QgYnRyZWVfaGVhZDEyOCAqdGFyZ2V0LAorCQkJCSBzdHJ1Y3QgYnRyZWVfaGVhZDEyOCAqdmljdGltLAorCQkJCSBnZnBfdCBnZnApCit7CisJcmV0dXJuIGJ0cmVlX21lcmdlKCZ0YXJnZXQtPmgsICZ2aWN0aW0tPmgsICZidHJlZV9nZW8xMjgsIGdmcCk7Cit9CisKK3ZvaWQgdmlzaXRvcjEyOCh2b2lkICplbGVtLCB1bnNpZ25lZCBsb25nIG9wYXF1ZSwgdW5zaWduZWQgbG9uZyAqX19rZXksCisJCXNpemVfdCBpbmRleCwgdm9pZCAqX19mdW5jKTsKKwordHlwZWRlZiB2b2lkICgqdmlzaXRvcjEyOF90KSh2b2lkICplbGVtLCB1bnNpZ25lZCBsb25nIG9wYXF1ZSwKKwkJCSAgICAgdTY0IGtleTEsIHU2NCBrZXkyLCBzaXplX3QgaW5kZXgpOworCitzdGF0aWMgaW5saW5lIHNpemVfdCBidHJlZV92aXNpdG9yMTI4KHN0cnVjdCBidHJlZV9oZWFkMTI4ICpoZWFkLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgb3BhcXVlLAorCQkJCSAgICAgIHZpc2l0b3IxMjhfdCBmdW5jMikKK3sKKwlyZXR1cm4gYnRyZWVfdmlzaXRvcigmaGVhZC0+aCwgJmJ0cmVlX2dlbzEyOCwgb3BhcXVlLAorCQkJICAgICB2aXNpdG9yMTI4LCBmdW5jMik7Cit9CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGJ0cmVlX2dyaW1fdmlzaXRvcjEyOChzdHJ1Y3QgYnRyZWVfaGVhZDEyOCAqaGVhZCwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBvcGFxdWUsCisJCQkJCSAgIHZpc2l0b3IxMjhfdCBmdW5jMikKK3sKKwlyZXR1cm4gYnRyZWVfZ3JpbV92aXNpdG9yKCZoZWFkLT5oLCAmYnRyZWVfZ2VvMTI4LCBvcGFxdWUsCisJCQkJICB2aXNpdG9yMTI4LCBmdW5jMik7Cit9CisKKyNkZWZpbmUgYnRyZWVfZm9yX2VhY2hfc2FmZTEyOChoZWFkLCBrMSwgazIsIHZhbCkJXAorCWZvciAodmFsID0gYnRyZWVfbGFzdDEyOChoZWFkLCAmazEsICZrMik7CVwKKwkgICAgIHZhbDsJCQkJCVwKKwkgICAgIHZhbCA9IGJ0cmVlX2dldF9wcmV2MTI4KGhlYWQsICZrMSwgJmsyKSkKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9idHJlZS10eXBlLmggYi9pbmNsdWRlL2xpbnV4L2J0cmVlLXR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTExNDdlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9idHJlZS10eXBlLmgKQEAgLTAsMCArMSwxNDcgQEAKKyNkZWZpbmUgX19CVFJFRV9UUChwZngsIHR5cGUsIHNmeCkJcGZ4ICMjIHR5cGUgIyMgc2Z4CisjZGVmaW5lIF9CVFJFRV9UUChwZngsIHR5cGUsIHNmeCkJX19CVFJFRV9UUChwZngsIHR5cGUsIHNmeCkKKyNkZWZpbmUgQlRSRUVfVFAocGZ4KQkJCV9CVFJFRV9UUChwZngsIEJUUkVFX1RZUEVfU1VGRklYLCkKKyNkZWZpbmUgQlRSRUVfRk4obmFtZSkJCQlCVFJFRV9UUChidHJlZV8gIyMgbmFtZSkKKyNkZWZpbmUgQlRSRUVfVFlQRV9IRUFECQkJQlRSRUVfVFAoc3RydWN0IGJ0cmVlX2hlYWQpCisjZGVmaW5lIFZJU0lUT1JfRk4JCQlCVFJFRV9UUCh2aXNpdG9yKQorI2RlZmluZSBWSVNJVE9SX0ZOX1QJCQlfQlRSRUVfVFAodmlzaXRvciwgQlRSRUVfVFlQRV9TVUZGSVgsIF90KQorCitCVFJFRV9UWVBFX0hFQUQgeworCXN0cnVjdCBidHJlZV9oZWFkIGg7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgQlRSRUVfRk4oaW5pdF9tZW1wb29sKShCVFJFRV9UWVBFX0hFQUQgKmhlYWQsCisJCQkJCSAgbWVtcG9vbF90ICptZW1wb29sKQoreworCWJ0cmVlX2luaXRfbWVtcG9vbCgmaGVhZC0+aCwgbWVtcG9vbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IEJUUkVFX0ZOKGluaXQpKEJUUkVFX1RZUEVfSEVBRCAqaGVhZCkKK3sKKwlyZXR1cm4gYnRyZWVfaW5pdCgmaGVhZC0+aCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBCVFJFRV9GTihkZXN0cm95KShCVFJFRV9UWVBFX0hFQUQgKmhlYWQpCit7CisJYnRyZWVfZGVzdHJveSgmaGVhZC0+aCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IEJUUkVFX0ZOKG1lcmdlKShCVFJFRV9UWVBFX0hFQUQgKnRhcmdldCwKKwkJCQkgIEJUUkVFX1RZUEVfSEVBRCAqdmljdGltLAorCQkJCSAgZ2ZwX3QgZ2ZwKQoreworCXJldHVybiBidHJlZV9tZXJnZSgmdGFyZ2V0LT5oLCAmdmljdGltLT5oLCBCVFJFRV9UWVBFX0dFTywgZ2ZwKTsKK30KKworI2lmIChCSVRTX1BFUl9MT05HID4gQlRSRUVfVFlQRV9CSVRTKQorc3RhdGljIGlubGluZSB2b2lkICpCVFJFRV9GTihsb29rdXApKEJUUkVFX1RZUEVfSEVBRCAqaGVhZCwgQlRSRUVfS0VZVFlQRSBrZXkpCit7CisJdW5zaWduZWQgbG9uZyBfa2V5ID0ga2V5OworCXJldHVybiBidHJlZV9sb29rdXAoJmhlYWQtPmgsIEJUUkVFX1RZUEVfR0VPLCAmX2tleSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IEJUUkVFX0ZOKGluc2VydCkoQlRSRUVfVFlQRV9IRUFEICpoZWFkLCBCVFJFRV9LRVlUWVBFIGtleSwKKwkJCQkgICB2b2lkICp2YWwsIGdmcF90IGdmcCkKK3sKKwl1bnNpZ25lZCBsb25nIF9rZXkgPSBrZXk7CisJcmV0dXJuIGJ0cmVlX2luc2VydCgmaGVhZC0+aCwgQlRSRUVfVFlQRV9HRU8sICZfa2V5LCB2YWwsIGdmcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IEJUUkVFX0ZOKHVwZGF0ZSkoQlRSRUVfVFlQRV9IRUFEICpoZWFkLCBCVFJFRV9LRVlUWVBFIGtleSwKKwkJdm9pZCAqdmFsKQoreworCXVuc2lnbmVkIGxvbmcgX2tleSA9IGtleTsKKwlyZXR1cm4gYnRyZWVfdXBkYXRlKCZoZWFkLT5oLCBCVFJFRV9UWVBFX0dFTywgJl9rZXksIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqQlRSRUVfRk4ocmVtb3ZlKShCVFJFRV9UWVBFX0hFQUQgKmhlYWQsIEJUUkVFX0tFWVRZUEUga2V5KQoreworCXVuc2lnbmVkIGxvbmcgX2tleSA9IGtleTsKKwlyZXR1cm4gYnRyZWVfcmVtb3ZlKCZoZWFkLT5oLCBCVFJFRV9UWVBFX0dFTywgJl9rZXkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKkJUUkVFX0ZOKGxhc3QpKEJUUkVFX1RZUEVfSEVBRCAqaGVhZCwgQlRSRUVfS0VZVFlQRSAqa2V5KQoreworCXVuc2lnbmVkIGxvbmcgX2tleTsKKwl2b2lkICp2YWwgPSBidHJlZV9sYXN0KCZoZWFkLT5oLCBCVFJFRV9UWVBFX0dFTywgJl9rZXkpOworCWlmICh2YWwpCisJCSprZXkgPSBfa2V5OworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqQlRSRUVfRk4oZ2V0X3ByZXYpKEJUUkVFX1RZUEVfSEVBRCAqaGVhZCwgQlRSRUVfS0VZVFlQRSAqa2V5KQoreworCXVuc2lnbmVkIGxvbmcgX2tleSA9ICprZXk7CisJdm9pZCAqdmFsID0gYnRyZWVfZ2V0X3ByZXYoJmhlYWQtPmgsIEJUUkVFX1RZUEVfR0VPLCAmX2tleSk7CisJaWYgKHZhbCkKKwkJKmtleSA9IF9rZXk7CisJcmV0dXJuIHZhbDsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgKkJUUkVFX0ZOKGxvb2t1cCkoQlRSRUVfVFlQRV9IRUFEICpoZWFkLCBCVFJFRV9LRVlUWVBFIGtleSkKK3sKKwlyZXR1cm4gYnRyZWVfbG9va3VwKCZoZWFkLT5oLCBCVFJFRV9UWVBFX0dFTywgKHVuc2lnbmVkIGxvbmcgKikma2V5KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgQlRSRUVfRk4oaW5zZXJ0KShCVFJFRV9UWVBFX0hFQUQgKmhlYWQsIEJUUkVFX0tFWVRZUEUga2V5LAorCQkJICAgdm9pZCAqdmFsLCBnZnBfdCBnZnApCit7CisJcmV0dXJuIGJ0cmVlX2luc2VydCgmaGVhZC0+aCwgQlRSRUVfVFlQRV9HRU8sICh1bnNpZ25lZCBsb25nICopJmtleSwKKwkJCSAgICB2YWwsIGdmcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IEJUUkVFX0ZOKHVwZGF0ZSkoQlRSRUVfVFlQRV9IRUFEICpoZWFkLCBCVFJFRV9LRVlUWVBFIGtleSwKKwkJdm9pZCAqdmFsKQoreworCXJldHVybiBidHJlZV91cGRhdGUoJmhlYWQtPmgsIEJUUkVFX1RZUEVfR0VPLCAodW5zaWduZWQgbG9uZyAqKSZrZXksIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqQlRSRUVfRk4ocmVtb3ZlKShCVFJFRV9UWVBFX0hFQUQgKmhlYWQsIEJUUkVFX0tFWVRZUEUga2V5KQoreworCXJldHVybiBidHJlZV9yZW1vdmUoJmhlYWQtPmgsIEJUUkVFX1RZUEVfR0VPLCAodW5zaWduZWQgbG9uZyAqKSZrZXkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKkJUUkVFX0ZOKGxhc3QpKEJUUkVFX1RZUEVfSEVBRCAqaGVhZCwgQlRSRUVfS0VZVFlQRSAqa2V5KQoreworCXJldHVybiBidHJlZV9sYXN0KCZoZWFkLT5oLCBCVFJFRV9UWVBFX0dFTywgKHVuc2lnbmVkIGxvbmcgKilrZXkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgKkJUUkVFX0ZOKGdldF9wcmV2KShCVFJFRV9UWVBFX0hFQUQgKmhlYWQsIEJUUkVFX0tFWVRZUEUgKmtleSkKK3sKKwlyZXR1cm4gYnRyZWVfZ2V0X3ByZXYoJmhlYWQtPmgsIEJUUkVFX1RZUEVfR0VPLCAodW5zaWduZWQgbG9uZyAqKWtleSk7Cit9CisjZW5kaWYKKwordm9pZCBWSVNJVE9SX0ZOKHZvaWQgKmVsZW0sIHVuc2lnbmVkIGxvbmcgb3BhcXVlLCB1bnNpZ25lZCBsb25nICprZXksCisJCXNpemVfdCBpbmRleCwgdm9pZCAqX19mdW5jKTsKKwordHlwZWRlZiB2b2lkICgqVklTSVRPUl9GTl9UKSh2b2lkICplbGVtLCB1bnNpZ25lZCBsb25nIG9wYXF1ZSwKKwkJCSAgICAgQlRSRUVfS0VZVFlQRSBrZXksIHNpemVfdCBpbmRleCk7CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IEJUUkVFX0ZOKHZpc2l0b3IpKEJUUkVFX1RZUEVfSEVBRCAqaGVhZCwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvcGFxdWUsCisJCQkJICAgICAgIFZJU0lUT1JfRk5fVCBmdW5jMikKK3sKKwlyZXR1cm4gYnRyZWVfdmlzaXRvcigmaGVhZC0+aCwgQlRSRUVfVFlQRV9HRU8sIG9wYXF1ZSwKKwkJCSAgICAgdmlzaXRvcmwsIGZ1bmMyKTsKK30KKworc3RhdGljIGlubGluZSBzaXplX3QgQlRSRUVfRk4oZ3JpbV92aXNpdG9yKShCVFJFRV9UWVBFX0hFQUQgKmhlYWQsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIG9wYXF1ZSwKKwkJCQkJICAgIFZJU0lUT1JfRk5fVCBmdW5jMikKK3sKKwlyZXR1cm4gYnRyZWVfZ3JpbV92aXNpdG9yKCZoZWFkLT5oLCBCVFJFRV9UWVBFX0dFTywgb3BhcXVlLAorCQkJCSAgdmlzaXRvcmwsIGZ1bmMyKTsKK30KKworI3VuZGVmIFZJU0lUT1JfRk4KKyN1bmRlZiBWSVNJVE9SX0ZOX1QKKyN1bmRlZiBfX0JUUkVFX1RQCisjdW5kZWYgX0JUUkVFX1RQCisjdW5kZWYgQlRSRUVfVFAKKyN1bmRlZiBCVFJFRV9GTgorI3VuZGVmIEJUUkVFX1RZUEVfSEVBRAorI3VuZGVmIEJUUkVFX1RZUEVfU1VGRklYCisjdW5kZWYgQlRSRUVfVFlQRV9HRU8KKyN1bmRlZiBCVFJFRV9LRVlUWVBFCisjdW5kZWYgQlRSRUVfVFlQRV9CSVRTCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2J0cmVlLmggYi9pbmNsdWRlL2xpbnV4L2J0cmVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjViNWJiMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvYnRyZWUuaApAQCAtMCwwICsxLDI0MyBAQAorI2lmbmRlZiBCVFJFRV9ICisjZGVmaW5lIEJUUkVFX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21lbXBvb2wuaD4KKworLyoqCisgKiBET0M6IEIrVHJlZSBiYXNpY3MKKyAqCisgKiBBIEIrVHJlZSBpcyBhIGRhdGEgc3RydWN0dXJlIGZvciBsb29raW5nIHVwIGFyYml0cmFyeSAoY3VycmVudGx5IGFsbG93aW5nCisgKiB1bnNpZ25lZCBsb25nLCB1MzIsIHU2NCBhbmQgMiAqIHU2NCkga2V5cyBpbnRvIHBvaW50ZXJzLiBUaGUgZGF0YSBzdHJ1Y3R1cmUKKyAqIGlzIGRlc2NyaWJlZCBhdCBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0ItdHJlZSwgd2UgY3VycmVudGx5IGRvIG5vdAorICogdXNlIGJpbmFyeSBzZWFyY2ggdG8gZmluZCB0aGUga2V5IG9uIGxvb2t1cHMuCisgKgorICogRWFjaCBCK1RyZWUgY29uc2lzdHMgb2YgYSBoZWFkLCB0aGF0IGNvbnRhaW5zIGJvb2trZWVwaW5nIGluZm9ybWF0aW9uIGFuZAorICogYSB2YXJpYWJsZSBudW1iZXIgKHN0YXJ0aW5nIHdpdGggemVybykgbm9kZXMuIEVhY2ggbm9kZSBjb250YWlucyB0aGUga2V5cworICogYW5kIHBvaW50ZXJzIHRvIHN1Yi1ub2Rlcywgb3IsIGZvciBsZWFmIG5vZGVzLCB0aGUga2V5cyBhbmQgdmFsdWVzIGZvciB0aGUKKyAqIHRyZWUgZW50cmllcy4KKyAqCisgKiBFYWNoIG5vZGUgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiBoYXMgdGhlIGZvbGxvd2luZyBsYXlvdXQ6CisgKiBba2V5MSwga2V5MiwgLi4uLCBrZXlOXSBbdmFsMSwgdmFsMiwgLi4uLCB2YWxOXQorICoKKyAqIEVhY2gga2V5IGhlcmUgaXMgYW4gYXJyYXkgb2YgdW5zaWduZWQgbG9uZ3MsIGdlby0+bm9fbG9uZ3MgaW4gdG90YWwuIFRoZQorICogbnVtYmVyIG9mIGtleXMgYW5kIHZhbHVlcyAoTikgaXMgZ2VvLT5ub19wYWlycy4KKyAqLworCisvKioKKyAqIHN0cnVjdCBidHJlZV9oZWFkIC0gYnRyZWUgaGVhZAorICoKKyAqIEBub2RlOiB0aGUgZmlyc3Qgbm9kZSBpbiB0aGUgdHJlZQorICogQG1lbXBvb2w6IG1lbXBvb2wgdXNlZCBmb3Igbm9kZSBhbGxvY2F0aW9ucworICogQGhlaWdodDogY3VycmVudCBvZiB0aGUgdHJlZQorICovCitzdHJ1Y3QgYnRyZWVfaGVhZCB7CisJdW5zaWduZWQgbG9uZyAqbm9kZTsKKwltZW1wb29sX3QgKm1lbXBvb2w7CisJaW50IGhlaWdodDsKK307CisKKy8qIGJ0cmVlIGdlb21ldHJ5ICovCitzdHJ1Y3QgYnRyZWVfZ2VvOworCisvKioKKyAqIGJ0cmVlX2FsbG9jIC0gYWxsb2NhdGUgZnVuY3Rpb24gZm9yIHRoZSBtZW1wb29sCisgKiBAZ2ZwX21hc2s6IGdmcCBtYXNrIGZvciB0aGUgYWxsb2NhdGlvbgorICogQHBvb2xfZGF0YTogdW51c2VkCisgKi8KK3ZvaWQgKmJ0cmVlX2FsbG9jKGdmcF90IGdmcF9tYXNrLCB2b2lkICpwb29sX2RhdGEpOworCisvKioKKyAqIGJ0cmVlX2ZyZWUgLSBmcmVlIGZ1bmN0aW9uIGZvciB0aGUgbWVtcG9vbAorICogQGVsZW1lbnQ6IHRoZSBlbGVtZW50IHRvIGZyZWUKKyAqIEBwb29sX2RhdGE6IHVudXNlZAorICovCit2b2lkIGJ0cmVlX2ZyZWUodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKTsKKworLyoqCisgKiBidHJlZV9pbml0X21lbXBvb2wgLSBpbml0aWFsaXNlIGEgYnRyZWUgd2l0aCBnaXZlbiBtZW1wb29sCisgKgorICogQGhlYWQ6IHRoZSBidHJlZSBoZWFkIHRvIGluaXRpYWxpc2UKKyAqIEBtZW1wb29sOiB0aGUgbWVtcG9vbCB0byB1c2UKKyAqCisgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCwgdGhlcmUgaXMgbm8gbmVlZCB0byBkZXN0cm95CisgKiB0aGUgbWVtcG9vbC4KKyAqLwordm9pZCBidHJlZV9pbml0X21lbXBvb2woc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIG1lbXBvb2xfdCAqbWVtcG9vbCk7CisKKy8qKgorICogYnRyZWVfaW5pdCAtIGluaXRpYWxpc2UgYSBidHJlZQorICoKKyAqIEBoZWFkOiB0aGUgYnRyZWUgaGVhZCB0byBpbml0aWFsaXNlCisgKgorICogVGhpcyBmdW5jdGlvbiBhbGxvY2F0ZXMgdGhlIG1lbW9yeSBwb29sIHRoYXQgdGhlCisgKiBidHJlZSBuZWVkcy4gUmV0dXJucyB6ZXJvIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZQorICogKC0lRU5PTUVNKSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLgorICoKKyAqLworaW50IF9fbXVzdF9jaGVjayBidHJlZV9pbml0KHN0cnVjdCBidHJlZV9oZWFkICpoZWFkKTsKKworLyoqCisgKiBidHJlZV9kZXN0cm95IC0gZGVzdHJveSBtZW1wb29sCisgKgorICogQGhlYWQ6IHRoZSBidHJlZSBoZWFkIHRvIGRlc3Ryb3kKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRlc3Ryb3lzIHRoZSBpbnRlcm5hbCBtZW1vcnkgcG9vbCwgdXNlIG9ubHkKKyAqIHdoZW4gdXNpbmcgYnRyZWVfaW5pdCgpLCBub3Qgd2l0aCBidHJlZV9pbml0X21lbXBvb2woKS4KKyAqLwordm9pZCBidHJlZV9kZXN0cm95KHN0cnVjdCBidHJlZV9oZWFkICpoZWFkKTsKKworLyoqCisgKiBidHJlZV9sb29rdXAgLSBsb29rIHVwIGEga2V5IGluIHRoZSBidHJlZQorICoKKyAqIEBoZWFkOiB0aGUgYnRyZWUgdG8gbG9vayBpbgorICogQGdlbzogdGhlIGJ0cmVlIGdlb21ldHJ5CisgKiBAa2V5OiB0aGUga2V5IHRvIGxvb2sgdXAKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHZhbHVlIGZvciB0aGUgZ2l2ZW4ga2V5LCBvciAlTlVMTC4KKyAqLwordm9pZCAqYnRyZWVfbG9va3VwKHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sCisJCSAgIHVuc2lnbmVkIGxvbmcgKmtleSk7CisKKy8qKgorICogYnRyZWVfaW5zZXJ0IC0gaW5zZXJ0IGFuIGVudHJ5IGludG8gdGhlIGJ0cmVlCisgKgorICogQGhlYWQ6IHRoZSBidHJlZSB0byBhZGQgdG8KKyAqIEBnZW86IHRoZSBidHJlZSBnZW9tZXRyeQorICogQGtleTogdGhlIGtleSB0byBhZGQgKG11c3Qgbm90IGFscmVhZHkgYmUgcHJlc2VudCkKKyAqIEB2YWw6IHRoZSB2YWx1ZSB0byBhZGQgKG11c3Qgbm90IGJlICVOVUxMKQorICogQGdmcDogYWxsb2NhdGlvbiBmbGFncyBmb3Igbm9kZSBhbGxvY2F0aW9ucworICoKKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIGlmIHRoZSBpdGVtIGNvdWxkIGJlIGFkZGVkLCBvciBhbgorICogZXJyb3IgY29kZSBpZiBpdCBmYWlsZWQgKG1heSBmYWlsIGR1ZSB0byBtZW1vcnkgcHJlc3N1cmUpLgorICovCitpbnQgX19tdXN0X2NoZWNrIGJ0cmVlX2luc2VydChzdHJ1Y3QgYnRyZWVfaGVhZCAqaGVhZCwgc3RydWN0IGJ0cmVlX2dlbyAqZ2VvLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyAqa2V5LCB2b2lkICp2YWwsIGdmcF90IGdmcCk7CisvKioKKyAqIGJ0cmVlX3VwZGF0ZSAtIHVwZGF0ZSBhbiBlbnRyeSBpbiB0aGUgYnRyZWUKKyAqCisgKiBAaGVhZDogdGhlIGJ0cmVlIHRvIHVwZGF0ZQorICogQGdlbzogdGhlIGJ0cmVlIGdlb21ldHJ5CisgKiBAa2V5OiB0aGUga2V5IHRvIHVwZGF0ZQorICogQHZhbDogdGhlIHZhbHVlIHRvIGNoYW5nZSBpdCB0byAobXVzdCBub3QgYmUgJU5VTEwpCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgaWYgdGhlIHVwZGF0ZSB3YXMgc3VjY2Vzc2Z1bCwgb3IKKyAqIC0lRU5PRU5UIGlmIHRoZSBrZXkgY291bGQgbm90IGJlIGZvdW5kLgorICovCitpbnQgYnRyZWVfdXBkYXRlKHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sCisJCSB1bnNpZ25lZCBsb25nICprZXksIHZvaWQgKnZhbCk7CisvKioKKyAqIGJ0cmVlX3JlbW92ZSAtIHJlbW92ZSBhbiBlbnRyeSBmcm9tIHRoZSBidHJlZQorICoKKyAqIEBoZWFkOiB0aGUgYnRyZWUgdG8gdXBkYXRlCisgKiBAZ2VvOiB0aGUgYnRyZWUgZ2VvbWV0cnkKKyAqIEBrZXk6IHRoZSBrZXkgdG8gcmVtb3ZlCisgKgorICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZW1vdmVkIGVudHJ5LCBvciAlTlVMTCBpZiB0aGUga2V5CisgKiBjb3VsZCBub3QgYmUgZm91bmQuCisgKi8KK3ZvaWQgKmJ0cmVlX3JlbW92ZShzdHJ1Y3QgYnRyZWVfaGVhZCAqaGVhZCwgc3RydWN0IGJ0cmVlX2dlbyAqZ2VvLAorCQkgICB1bnNpZ25lZCBsb25nICprZXkpOworCisvKioKKyAqIGJ0cmVlX21lcmdlIC0gbWVyZ2UgdHdvIGJ0cmVlcworICoKKyAqIEB0YXJnZXQ6IHRoZSB0cmVlIHRoYXQgZ2V0cyBhbGwgdGhlIGVudHJpZXMKKyAqIEB2aWN0aW06IHRoZSB0cmVlIHRoYXQgZ2V0cyBtZXJnZWQgaW50byBAdGFyZ2V0CisgKiBAZ2VvOiB0aGUgYnRyZWUgZ2VvbWV0cnkKKyAqIEBnZnA6IGFsbG9jYXRpb24gZmxhZ3MKKyAqCisgKiBUaGUgdHdvIHRyZWVzIEB0YXJnZXQgYW5kIEB2aWN0aW0gbWF5IG5vdCBjb250YWluIHRoZSBzYW1lIGtleXMsCisgKiB0aGF0IGlzIGEgYnVnIGFuZCB0cmlnZ2VycyBhIEJVRygpLiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgemVybworICogaWYgdGhlIHRyZWVzIHdlcmUgbWVyZ2VkIHN1Y2Nlc3NmdWxseSwgYW5kIG1heSByZXR1cm4gYSBmYWlsdXJlCisgKiB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLCBpbiB3aGljaCBjYXNlIGJvdGggdHJlZXMgbWlnaHQgaGF2ZQorICogYmVlbiBwYXJ0aWFsbHkgbWVyZ2VkLCBpLmUuIHNvbWUgZW50cmllcyBoYXZlIGJlZW4gbW92ZWQgZnJvbQorICogQHZpY3RpbSB0byBAdGFyZ2V0LgorICovCitpbnQgYnRyZWVfbWVyZ2Uoc3RydWN0IGJ0cmVlX2hlYWQgKnRhcmdldCwgc3RydWN0IGJ0cmVlX2hlYWQgKnZpY3RpbSwKKwkJc3RydWN0IGJ0cmVlX2dlbyAqZ2VvLCBnZnBfdCBnZnApOworCisvKioKKyAqIGJ0cmVlX2xhc3QgLSBnZXQgbGFzdCBlbnRyeSBpbiBidHJlZQorICoKKyAqIEBoZWFkOiBidHJlZSBoZWFkCisgKiBAZ2VvOiBidHJlZSBnZW9tZXRyeQorICogQGtleTogbGFzdCBrZXkKKyAqCisgKiBSZXR1cm5zIHRoZSBsYXN0IGVudHJ5IGluIHRoZSBidHJlZSwgYW5kIHNldHMgQGtleSB0byB0aGUga2V5CisgKiBvZiB0aGF0IGVudHJ5OyByZXR1cm5zIE5VTEwgaWYgdGhlIHRyZWUgaXMgZW1wdHksIGluIHRoYXQgY2FzZQorICoga2V5IGlzIG5vdCBjaGFuZ2VkLgorICovCit2b2lkICpidHJlZV9sYXN0KHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sCisJCSB1bnNpZ25lZCBsb25nICprZXkpOworCisvKioKKyAqIGJ0cmVlX2dldF9wcmV2IC0gZ2V0IHByZXZpb3VzIGVudHJ5CisgKgorICogQGhlYWQ6IGJ0cmVlIGhlYWQKKyAqIEBnZW86IGJ0cmVlIGdlb21ldHJ5CisgKiBAa2V5OiBwb2ludGVyIHRvIGtleQorICoKKyAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBuZXh0IGl0ZW0gcmlnaHQgYmVmb3JlIHRoZSB2YWx1ZSBwb2ludGVkIHRvIGJ5CisgKiBAa2V5LCBhbmQgdXBkYXRlcyBAa2V5IHdpdGggaXRzIGtleSwgb3IgcmV0dXJucyAlTlVMTCB3aGVuIHRoZXJlIGlzIG5vCisgKiBlbnRyeSB3aXRoIGEga2V5IHNtYWxsZXIgdGhhbiB0aGUgZ2l2ZW4ga2V5LgorICovCit2b2lkICpidHJlZV9nZXRfcHJldihzdHJ1Y3QgYnRyZWVfaGVhZCAqaGVhZCwgc3RydWN0IGJ0cmVlX2dlbyAqZ2VvLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgKmtleSk7CisKKworLyogaW50ZXJuYWwgdXNlLCB1c2UgYnRyZWVfdmlzaXRvcntsLDMyLDY0LDEyOH0gKi8KK3NpemVfdCBidHJlZV92aXNpdG9yKHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sCisJCSAgICAgdW5zaWduZWQgbG9uZyBvcGFxdWUsCisJCSAgICAgdm9pZCAoKmZ1bmMpKHZvaWQgKmVsZW0sIHVuc2lnbmVkIGxvbmcgb3BhcXVlLAorCQkJCSAgdW5zaWduZWQgbG9uZyAqa2V5LCBzaXplX3QgaW5kZXgsCisJCQkJICB2b2lkICpmdW5jMiksCisJCSAgICAgdm9pZCAqZnVuYzIpOworCisvKiBpbnRlcm5hbCB1c2UsIHVzZSBidHJlZV9ncmltX3Zpc2l0b3J7bCwzMiw2NCwxMjh9ICovCitzaXplX3QgYnRyZWVfZ3JpbV92aXNpdG9yKHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sCisJCQkgIHVuc2lnbmVkIGxvbmcgb3BhcXVlLAorCQkJICB2b2lkICgqZnVuYykodm9pZCAqZWxlbSwgdW5zaWduZWQgbG9uZyBvcGFxdWUsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgKmtleSwKKwkJCQkgICAgICAgc2l6ZV90IGluZGV4LCB2b2lkICpmdW5jMiksCisJCQkgIHZvaWQgKmZ1bmMyKTsKKworCisjaW5jbHVkZSA8bGludXgvYnRyZWUtMTI4Lmg+CisKK2V4dGVybiBzdHJ1Y3QgYnRyZWVfZ2VvIGJ0cmVlX2dlbzMyOworI2RlZmluZSBCVFJFRV9UWVBFX1NVRkZJWCBsCisjZGVmaW5lIEJUUkVFX1RZUEVfQklUUyBCSVRTX1BFUl9MT05HCisjZGVmaW5lIEJUUkVFX1RZUEVfR0VPICZidHJlZV9nZW8zMgorI2RlZmluZSBCVFJFRV9LRVlUWVBFIHVuc2lnbmVkIGxvbmcKKyNpbmNsdWRlIDxsaW51eC9idHJlZS10eXBlLmg+CisKKyNkZWZpbmUgYnRyZWVfZm9yX2VhY2hfc2FmZWwoaGVhZCwga2V5LCB2YWwpCVwKKwlmb3IgKHZhbCA9IGJ0cmVlX2xhc3RsKGhlYWQsICZrZXkpOwlcCisJICAgICB2YWw7CQkJCVwKKwkgICAgIHZhbCA9IGJ0cmVlX2dldF9wcmV2bChoZWFkLCAma2V5KSkKKworI2RlZmluZSBCVFJFRV9UWVBFX1NVRkZJWCAzMgorI2RlZmluZSBCVFJFRV9UWVBFX0JJVFMgMzIKKyNkZWZpbmUgQlRSRUVfVFlQRV9HRU8gJmJ0cmVlX2dlbzMyCisjZGVmaW5lIEJUUkVFX0tFWVRZUEUgdTMyCisjaW5jbHVkZSA8bGludXgvYnRyZWUtdHlwZS5oPgorCisjZGVmaW5lIGJ0cmVlX2Zvcl9lYWNoX3NhZmUzMihoZWFkLCBrZXksIHZhbCkJXAorCWZvciAodmFsID0gYnRyZWVfbGFzdDMyKGhlYWQsICZrZXkpOwlcCisJICAgICB2YWw7CQkJCVwKKwkgICAgIHZhbCA9IGJ0cmVlX2dldF9wcmV2MzIoaGVhZCwgJmtleSkpCisKK2V4dGVybiBzdHJ1Y3QgYnRyZWVfZ2VvIGJ0cmVlX2dlbzY0OworI2RlZmluZSBCVFJFRV9UWVBFX1NVRkZJWCA2NAorI2RlZmluZSBCVFJFRV9UWVBFX0JJVFMgNjQKKyNkZWZpbmUgQlRSRUVfVFlQRV9HRU8gJmJ0cmVlX2dlbzY0CisjZGVmaW5lIEJUUkVFX0tFWVRZUEUgdTY0CisjaW5jbHVkZSA8bGludXgvYnRyZWUtdHlwZS5oPgorCisjZGVmaW5lIGJ0cmVlX2Zvcl9lYWNoX3NhZmU2NChoZWFkLCBrZXksIHZhbCkJXAorCWZvciAodmFsID0gYnRyZWVfbGFzdDY0KGhlYWQsICZrZXkpOwlcCisJICAgICB2YWw7CQkJCVwKKwkgICAgIHZhbCA9IGJ0cmVlX2dldF9wcmV2NjQoaGVhZCwgJmtleSkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jYW4vZGV2LmggYi9pbmNsdWRlL2xpbnV4L2Nhbi9kZXYuaAppbmRleCAzZGI3NzY3Li42ZTVhN2YwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nhbi9kZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nhbi9kZXYuaApAQCAtMzgsNiArMzgsNyBAQAogCiAJZW51bSBjYW5fc3RhdGUgc3RhdGU7CiAJdTMyIGN0cmxtb2RlOworCXUzMiBjdHJsbW9kZV9zdXBwb3J0ZWQ7CiAKIAlpbnQgcmVzdGFydF9tczsKIAlzdHJ1Y3QgdGltZXJfbGlzdCByZXN0YXJ0X3RpbWVyOwpAQCAtNDYsNiArNDcsOCBAQAogCWludCAoKmRvX3NldF9tb2RlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBlbnVtIGNhbl9tb2RlIG1vZGUpOwogCWludCAoKmRvX2dldF9zdGF0ZSkoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICBlbnVtIGNhbl9zdGF0ZSAqc3RhdGUpOworCWludCAoKmRvX2dldF9iZXJyX2NvdW50ZXIpKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IGNhbl9iZXJyX2NvdW50ZXIgKmJlYyk7CiAKIAl1bnNpZ25lZCBpbnQgZWNob19za2JfbWF4OwogCXN0cnVjdCBza19idWZmICoqZWNob19za2I7CkBAIC02MCw2ICs2MywyMSBAQAogICovCiAjZGVmaW5lIGdldF9jYW5fZGxjKGkpCShtaW5fdChfX3U4LCAoaSksIDgpKQogCisvKiBEcm9wIGEgZ2l2ZW4gc29ja2V0YnVmZmVyIGlmIGl0IGRvZXMgbm90IGNvbnRhaW4gYSB2YWxpZCBDQU4gZnJhbWUuICovCitzdGF0aWMgaW5saW5lIGludCBjYW5fZHJvcHBlZF9pbnZhbGlkX3NrYihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJY29uc3Qgc3RydWN0IGNhbl9mcmFtZSAqY2YgPSAoc3RydWN0IGNhbl9mcmFtZSAqKXNrYi0+ZGF0YTsKKworCWlmICh1bmxpa2VseShza2ItPmxlbiAhPSBzaXplb2YoKmNmKSB8fCBjZi0+Y2FuX2RsYyA+IDgpKSB7CisJCWtmcmVlX3NrYihza2IpOworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19jYW5kZXYoaW50IHNpemVvZl9wcml2LCB1bnNpZ25lZCBpbnQgZWNob19za2JfbWF4KTsKIHZvaWQgZnJlZV9jYW5kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2FuL25ldGxpbmsuaCBiL2luY2x1ZGUvbGludXgvY2FuL25ldGxpbmsuaAppbmRleCA5ZWNiYjc4Li4zMjUwZGU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Nhbi9uZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9jYW4vbmV0bGluay5oCkBAIC03MCw2ICs3MCwxNCBAQAogfTsKIAogLyoKKyAqIENBTiBidXMgZXJyb3IgY291bnRlcnMKKyAqLworc3RydWN0IGNhbl9iZXJyX2NvdW50ZXIgeworCV9fdTE2IHR4ZXJyOworCV9fdTE2IHJ4ZXJyOworfTsKKworLyoKICAqIENBTiBjb250cm9sbGVyIG1vZGUKICAqLwogc3RydWN0IGNhbl9jdHJsbW9kZSB7CkBAIC03Nyw5ICs4NSwxMSBAQAogCV9fdTMyIGZsYWdzOwogfTsKIAotI2RlZmluZSBDQU5fQ1RSTE1PREVfTE9PUEJBQ0sJMHgxCS8qIExvb3BiYWNrIG1vZGUgKi8KLSNkZWZpbmUgQ0FOX0NUUkxNT0RFX0xJU1RFTk9OTFkJMHgyIAkvKiBMaXN0ZW4tb25seSBtb2RlICovCi0jZGVmaW5lIENBTl9DVFJMTU9ERV8zX1NBTVBMRVMJMHg0CS8qIFRyaXBsZSBzYW1wbGluZyBtb2RlICovCisjZGVmaW5lIENBTl9DVFJMTU9ERV9MT09QQkFDSwkJMHgwMQkvKiBMb29wYmFjayBtb2RlICovCisjZGVmaW5lIENBTl9DVFJMTU9ERV9MSVNURU5PTkxZCQkweDAyIAkvKiBMaXN0ZW4tb25seSBtb2RlICovCisjZGVmaW5lIENBTl9DVFJMTU9ERV8zX1NBTVBMRVMJCTB4MDQJLyogVHJpcGxlIHNhbXBsaW5nIG1vZGUgKi8KKyNkZWZpbmUgQ0FOX0NUUkxNT0RFX09ORV9TSE9UCQkweDA4CS8qIE9uZS1TaG90IG1vZGUgKi8KKyNkZWZpbmUgQ0FOX0NUUkxNT0RFX0JFUlJfUkVQT1JUSU5HCTB4MTAJLyogQnVzLWVycm9yIHJlcG9ydGluZyAqLwogCiAvKgogICogQ0FOIGRldmljZSBzdGF0aXN0aWNzCkBAIC0xMDUsNiArMTE1LDcgQEAKIAlJRkxBX0NBTl9DVFJMTU9ERSwKIAlJRkxBX0NBTl9SRVNUQVJUX01TLAogCUlGTEFfQ0FOX1JFU1RBUlQsCisJSUZMQV9DQU5fQkVSUl9DT1VOVEVSLAogCV9fSUZMQV9DQU5fTUFYCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nhbi9wbGF0Zm9ybS90aV9oZWNjLmggYi9pbmNsdWRlL2xpbnV4L2Nhbi9wbGF0Zm9ybS90aV9oZWNjLmgKaW5kZXggNDY4OGM3Yi4uYWYxN2NiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jYW4vcGxhdGZvcm0vdGlfaGVjYy5oCisrKyBiL2luY2x1ZGUvbGludXgvY2FuL3BsYXRmb3JtL3RpX2hlY2MuaApAQCAtMSwzICsxLDYgQEAKKyNpZm5kZWYgX19DQU5fUExBVEZPUk1fVElfSEVDQ19IX18KKyNkZWZpbmUgX19DQU5fUExBVEZPUk1fVElfSEVDQ19IX18KKwogLyoKICAqIFRJIEhFQ0MgKEhpZ2ggRW5kIENBTiBDb250cm9sbGVyKSBkcml2ZXIgcGxhdGZvcm0gaGVhZGVyCiAgKgpAQCAtMjMsNiArMjYsNyBAQAogICogQG1ieF9vZmZzZXQ6CQlNYWlsYm94IFJBTSBvZmZzZXQKICAqIEBpbnRfbGluZToJCUludGVycnVwdCBsaW5lIHRvIHVzZSAtIDAgb3IgMQogICogQHZlcnNpb246CQl2ZXJzaW9uIGZvciBmdXR1cmUgdXNlCisgKiBAdHJhbnNjZWl2ZXJfc3dpdGNoOglwbGF0Zm9ybSBzcGVjaWZpYyBjYWxsYmFjayBmbiBmb3IgdHJhbnNjZWl2ZXIgY29udHJvbAogICoKICAqIFBsYXRmb3JtIGRhdGEgc3RydWN0dXJlIHRvIGdldCBhbGwgcGxhdGZvcm0gc3BlY2lmaWMgc2V0dGluZ3MuCiAgKiB0aGlzIHN0cnVjdHVyZSBhbHNvIGFjY291bnRzIHRoZSBmYWN0IHRoYXQgdGhlIElQIG1heSBoYXZlIGRpZmZlcmVudApAQCAtMzUsNiArMzksNiBAQAogCXUzMiBtYnhfb2Zmc2V0OwogCXUzMiBpbnRfbGluZTsKIAl1MzIgdmVyc2lvbjsKKwl2b2lkICgqdHJhbnNjZWl2ZXJfc3dpdGNoKSAoaW50KTsKIH07Ci0KLQorI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Nncm91cC5oIGIvaW5jbHVkZS9saW51eC9jZ3JvdXAuaAppbmRleCBjOWJiY2IyLi5iOGFkMWVhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZ3JvdXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Nncm91cC5oCkBAIC0zNywxNiArMzcsMjQgQEAKIGV4dGVybiB2b2lkIGNncm91cF9leGl0KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHJ1bl9jYWxsYmFja3MpOwogZXh0ZXJuIGludCBjZ3JvdXBzdGF0c19idWlsZChzdHJ1Y3QgY2dyb3Vwc3RhdHMgKnN0YXRzLAogCQkJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CitleHRlcm4gaW50IGNncm91cF9sb2FkX3N1YnN5cyhzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MpOworZXh0ZXJuIHZvaWQgY2dyb3VwX3VubG9hZF9zdWJzeXMoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzKTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19jZ3JvdXBfb3BlcmF0aW9uczsKIAotLyogRGVmaW5lIHRoZSBlbnVtZXJhdGlvbiBvZiBhbGwgY2dyb3VwIHN1YnN5c3RlbXMgKi8KKy8qIERlZmluZSB0aGUgZW51bWVyYXRpb24gb2YgYWxsIGJ1aWx0aW4gY2dyb3VwIHN1YnN5c3RlbXMgKi8KICNkZWZpbmUgU1VCU1lTKF94KSBfeCAjIyBfc3Vic3lzX2lkLAogZW51bSBjZ3JvdXBfc3Vic3lzX2lkIHsKICNpbmNsdWRlIDxsaW51eC9jZ3JvdXBfc3Vic3lzLmg+Ci0JQ0dST1VQX1NVQlNZU19DT1VOVAorCUNHUk9VUF9CVUlMVElOX1NVQlNZU19DT1VOVAogfTsKICN1bmRlZiBTVUJTWVMKKy8qCisgKiBUaGlzIGRlZmluZSBpbmRpY2F0ZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHN1YnN5c3RlbXMgdGhhdCBjYW4gYmUgbG9hZGVkCisgKiBhdCBvbmNlLiBXZSBsaW1pdCB0byB0aGlzIG1hbnkgc2luY2UgY2dyb3VwZnNfcm9vdCBoYXMgc3Vic3lzX2JpdHMgdG8ga2VlcAorICogdHJhY2sgb2YgYWxsIG9mIHRoZW0uCisgKi8KKyNkZWZpbmUgQ0dST1VQX1NVQlNZU19DT1VOVCAoQklUU19QRVJfQllURSpzaXplb2YodW5zaWduZWQgbG9uZykpCiAKIC8qIFBlci1zdWJzeXN0ZW0vcGVyLWNncm91cCBzdGF0ZSBtYWludGFpbmVkIGJ5IHRoZSBzeXN0ZW0uICovCiBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSB7CkBAIC03Niw2ICs4NCwxMiBAQAogCUNTU19SRU1PVkVELCAvKiBUaGlzIENTUyBpcyBkZWFkICovCiB9OwogCisvKiBDYWxsZXIgbXVzdCB2ZXJpZnkgdGhhdCB0aGUgY3NzIGlzIG5vdCBmb3Igcm9vdCBjZ3JvdXAgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2Nzc19nZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNvdW50KQoreworCWF0b21pY19hZGQoY291bnQsICZjc3MtPnJlZmNudCk7Cit9CisKIC8qCiAgKiBDYWxsIGNzc19nZXQoKSB0byBob2xkIGEgcmVmZXJlbmNlIG9uIHRoZSBjc3M7IGl0IGNhbiBiZSB1c2VkCiAgKiBmb3IgYSByZWZlcmVuY2Ugb2J0YWluZWQgdmlhOgpAQCAtODcsNyArMTAxLDcgQEAKIHsKIAkvKiBXZSBkb24ndCBuZWVkIHRvIHJlZmVyZW5jZSBjb3VudCB0aGUgcm9vdCBzdGF0ZSAqLwogCWlmICghdGVzdF9iaXQoQ1NTX1JPT1QsICZjc3MtPmZsYWdzKSkKLQkJYXRvbWljX2luYygmY3NzLT5yZWZjbnQpOworCQlfX2Nzc19nZXQoY3NzLCAxKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGNzc19pc19yZW1vdmVkKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCkBAIC0xMTgsMTEgKzEzMiwxMSBAQAogICogY3NzX2dldCgpIG9yIGNzc190cnlnZXQoKQogICovCiAKLWV4dGVybiB2b2lkIF9fY3NzX3B1dChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzKTsKK2V4dGVybiB2b2lkIF9fY3NzX3B1dChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY291bnQpOwogc3RhdGljIGlubGluZSB2b2lkIGNzc19wdXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIHsKIAlpZiAoIXRlc3RfYml0KENTU19ST09ULCAmY3NzLT5mbGFncykpCi0JCV9fY3NzX3B1dChjc3MpOworCQlfX2Nzc19wdXQoY3NzLCAxKTsKIH0KIAogLyogYml0cyBpbiBzdHJ1Y3QgY2dyb3VwIGZsYWdzIGZpZWxkICovCkBAIC0yMjEsNiArMjM1LDEwIEBACiAKIAkvKiBGb3IgUkNVLXByb3RlY3RlZCBkZWxldGlvbiAqLwogCXN0cnVjdCByY3VfaGVhZCByY3VfaGVhZDsKKworCS8qIExpc3Qgb2YgZXZlbnRzIHdoaWNoIHVzZXJzcGFjZSB3YW50IHRvIHJlY2lldmUgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGV2ZW50X2xpc3Q7CisJc3BpbmxvY2tfdCBldmVudF9saXN0X2xvY2s7CiB9OwogCiAvKgpAQCAtMjU4LDcgKzI3Niw4IEBACiAJLyoKIAkgKiBTZXQgb2Ygc3Vic3lzdGVtIHN0YXRlcywgb25lIGZvciBlYWNoIHN1YnN5c3RlbS4gVGhpcyBhcnJheQogCSAqIGlzIGltbXV0YWJsZSBhZnRlciBjcmVhdGlvbiBhcGFydCBmcm9tIHRoZSBpbml0X2Nzc19zZXQKLQkgKiBkdXJpbmcgc3Vic3lzdGVtIHJlZ2lzdHJhdGlvbiAoYXQgYm9vdCB0aW1lKS4KKwkgKiBkdXJpbmcgc3Vic3lzdGVtIHJlZ2lzdHJhdGlvbiAoYXQgYm9vdCB0aW1lKSBhbmQgbW9kdWxhciBzdWJzeXN0ZW0KKwkgKiBsb2FkaW5nL3VubG9hZGluZy4KIAkgKi8KIAlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqc3Vic3lzW0NHUk9VUF9TVUJTWVNfQ09VTlRdOwogCkBAIC0zNjMsNiArMzgyLDIzIEBACiAJaW50ICgqdHJpZ2dlcikoc3RydWN0IGNncm91cCAqY2dycCwgdW5zaWduZWQgaW50IGV2ZW50KTsKIAogCWludCAoKnJlbGVhc2UpKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKKworCS8qCisJICogcmVnaXN0ZXJfZXZlbnQoKSBjYWxsYmFjayB3aWxsIGJlIHVzZWQgdG8gYWRkIG5ldyB1c2Vyc3BhY2UKKwkgKiB3YWl0ZXIgZm9yIGNoYW5nZXMgcmVsYXRlZCB0byB0aGUgY2Z0eXBlLiBJbXBsZW1lbnQgaXQgaWYKKwkgKiB5b3Ugd2FudCB0byBwcm92aWRlIHRoaXMgZnVuY3Rpb25hbGl0eS4gVXNlIGV2ZW50ZmRfc2lnbmFsKCkKKwkgKiBvbiBldmVudGZkIHRvIHNlbmQgbm90aWZpY2F0aW9uIHRvIHVzZXJzcGFjZS4KKwkgKi8KKwlpbnQgKCpyZWdpc3Rlcl9ldmVudCkoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGNmdHlwZSAqY2Z0LAorCQkJc3RydWN0IGV2ZW50ZmRfY3R4ICpldmVudGZkLCBjb25zdCBjaGFyICphcmdzKTsKKwkvKgorCSAqIHVucmVnaXN0ZXJfZXZlbnQoKSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCB3aGVuIHVzZXJzcGFjZQorCSAqIGNsb3NlcyB0aGUgZXZlbnRmZCBvciBvbiBjZ3JvdXAgcmVtb3ZpbmcuCisJICogVGhpcyBjYWxsYmFjayBtdXN0IGJlIGltcGxlbWVudGVkLCBpZiB5b3Ugd2FudCBwcm92aWRlCisJICogbm90aWZpY2F0aW9uIGZ1bmN0aW9uYWxpdHkuCisJICovCisJaW50ICgqdW5yZWdpc3Rlcl9ldmVudCkoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGNmdHlwZSAqY2Z0LAorCQkJc3RydWN0IGV2ZW50ZmRfY3R4ICpldmVudGZkKTsKIH07CiAKIHN0cnVjdCBjZ3JvdXBfc2Nhbm5lciB7CkBAIC00MjgsNiArNDY0LDggQEAKIAl2b2lkICgqZGVzdHJveSkoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwKTsKIAlpbnQgKCpjYW5fYXR0YWNoKShzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsIHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBib29sIHRocmVhZGdyb3VwKTsKKwl2b2lkICgqY2FuY2VsX2F0dGFjaCkoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLAorCQkJICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgYm9vbCB0aHJlYWRncm91cCk7CiAJdm9pZCAoKmF0dGFjaCkoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLCBzdHJ1Y3QgY2dyb3VwICpjZ3JwLAogCQkJc3RydWN0IGNncm91cCAqb2xkX2NncnAsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLAogCQkJYm9vbCB0aHJlYWRncm91cCk7CkBAIC00NzIsNiArNTEwLDkgQEAKIAkvKiB1c2VkIHdoZW4gdXNlX2lkID09IHRydWUgKi8KIAlzdHJ1Y3QgaWRyIGlkcjsKIAlzcGlubG9ja190IGlkX2xvY2s7CisKKwkvKiBzaG91bGQgYmUgZGVmaW5lZCBvbmx5IGJ5IG1vZHVsYXIgc3Vic3lzdGVtcyAqLworCXN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKIH07CiAKICNkZWZpbmUgU1VCU1lTKF94KSBleHRlcm4gc3RydWN0IGNncm91cF9zdWJzeXMgX3ggIyMgX3N1YnN5czsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGF0LmggYi9pbmNsdWRlL2xpbnV4L2NvbXBhdC5oCmluZGV4IGVmNjgxMTkuLjcxN2M2OTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY29tcGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21wYXQuaApAQCAtMjMsNiArMjMsNyBAQAogdHlwZWRlZiBfX2NvbXBhdF91aWQzMl90CWNvbXBhdF91aWRfdDsKIHR5cGVkZWYgX19jb21wYXRfZ2lkMzJfdAljb21wYXRfZ2lkX3Q7CiAKK3N0cnVjdCBjb21wYXRfc2VsX2FyZ19zdHJ1Y3Q7CiBzdHJ1Y3QgcnVzYWdlOwogCiBzdHJ1Y3QgY29tcGF0X2l0aW1lcnNwZWMgeyAKQEAgLTI0OSw2ICsyNTAsOCBAQAogCQljb21wYXRfdWxvbmdfdCBfX3VzZXIgKm91dHAsIGNvbXBhdF91bG9uZ190IF9fdXNlciAqZXhwLAogCQlzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgX191c2VyICp0dnApOwogCithc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c19vbGRfc2VsZWN0KHN0cnVjdCBjb21wYXRfc2VsX2FyZ19zdHJ1Y3QgX191c2VyICphcmcpOworCiBhc21saW5rYWdlIGxvbmcgY29tcGF0X3N5c193YWl0NChjb21wYXRfcGlkX3QgcGlkLAogCQkJCSBjb21wYXRfdWludF90IF9fdXNlciAqc3RhdF9hZGRyLCBpbnQgb3B0aW9ucywKIAkJCQkgc3RydWN0IGNvbXBhdF9ydXNhZ2UgX191c2VyICpydSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmggYi9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKaW5kZXggMTg4ZmNhZS4uYTVhNDcyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jb21waWxlci5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaApAQCAtNSw3ICs1LDcgQEAKIAogI2lmZGVmIF9fQ0hFQ0tFUl9fCiAjIGRlZmluZSBfX3VzZXIJCV9fYXR0cmlidXRlX18oKG5vZGVyZWYsIGFkZHJlc3Nfc3BhY2UoMSkpKQotIyBkZWZpbmUgX19rZXJuZWwJLyogZGVmYXVsdCBhZGRyZXNzIHNwYWNlICovCisjIGRlZmluZSBfX2tlcm5lbAlfX2F0dHJpYnV0ZV9fKChhZGRyZXNzX3NwYWNlKDApKSkKICMgZGVmaW5lIF9fc2FmZQkJX19hdHRyaWJ1dGVfXygoc2FmZSkpCiAjIGRlZmluZSBfX2ZvcmNlCV9fYXR0cmlidXRlX18oKGZvcmNlKSkKICMgZGVmaW5lIF9fbm9jYXN0CV9fYXR0cmlidXRlX18oKG5vY2FzdCkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmggYi9pbmNsdWRlL2xpbnV4L2NvcmVkdW1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJhNjZhOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvY29yZWR1bXAuaApAQCAtMCwwICsxLDQ1IEBACisjaWZuZGVmIF9MSU5VWF9DT1JFRFVNUF9ICisjZGVmaW5lIF9MSU5VWF9DT1JFRFVNUF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKworLyoKKyAqIFRoZXNlIGFyZSB0aGUgb25seSB0aGluZ3MgeW91IHNob3VsZCBkbyBvbiBhIGNvcmUtZmlsZTogdXNlIG9ubHkgdGhlc2UKKyAqIGZ1bmN0aW9ucyB0byB3cml0ZSBvdXQgYWxsIHRoZSBuZWNlc3NhcnkgaW5mby4KKyAqLworc3RhdGljIGlubGluZSBpbnQgZHVtcF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgdm9pZCAqYWRkciwgaW50IG5yKQoreworCXJldHVybiBmaWxlLT5mX29wLT53cml0ZShmaWxlLCBhZGRyLCBuciwgJmZpbGUtPmZfcG9zKSA9PSBucjsKK30KKworc3RhdGljIGlubGluZSBpbnQgZHVtcF9zZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2ZmKQoreworCWludCByZXQgPSAxOworCisJaWYgKGZpbGUtPmZfb3AtPmxsc2VlayAmJiBmaWxlLT5mX29wLT5sbHNlZWsgIT0gbm9fbGxzZWVrKSB7CisJCWlmIChmaWxlLT5mX29wLT5sbHNlZWsoZmlsZSwgb2ZmLCBTRUVLX0NVUikgPCAwKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlIHsKKwkJY2hhciAqYnVmID0gKGNoYXIgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisKKwkJaWYgKCFidWYpCisJCQlyZXR1cm4gMDsKKwkJd2hpbGUgKG9mZiA+IDApIHsKKwkJCXVuc2lnbmVkIGxvbmcgbiA9IG9mZjsKKworCQkJaWYgKG4gPiBQQUdFX1NJWkUpCisJCQkJbiA9IFBBR0VfU0laRTsKKwkJCWlmICghZHVtcF93cml0ZShmaWxlLCBidWYsIG4pKSB7CisJCQkJcmV0ID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW9mZiAtPSBuOworCQl9CisJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylidWYpOworCX0KKwlyZXR1cm4gcmV0OworfQorCisjZW5kaWYgLyogX0xJTlVYX0NPUkVEVU1QX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3B1bWFzay5oIGIvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKaW5kZXggZGJjZWU3Ni4uYmFlNmZlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcHVtYXNrLmgKQEAgLTkwLDEwICs5MCwxMCBAQAogI2RlZmluZSBjcHVfcHJlc2VudChjcHUpCWNwdW1hc2tfdGVzdF9jcHUoKGNwdSksIGNwdV9wcmVzZW50X21hc2spCiAjZGVmaW5lIGNwdV9hY3RpdmUoY3B1KQkJY3B1bWFza190ZXN0X2NwdSgoY3B1KSwgY3B1X2FjdGl2ZV9tYXNrKQogI2Vsc2UKLSNkZWZpbmUgbnVtX29ubGluZV9jcHVzKCkJMQotI2RlZmluZSBudW1fcG9zc2libGVfY3B1cygpCTEKLSNkZWZpbmUgbnVtX3ByZXNlbnRfY3B1cygpCTEKLSNkZWZpbmUgbnVtX2FjdGl2ZV9jcHVzKCkJMQorI2RlZmluZSBudW1fb25saW5lX2NwdXMoKQkxVQorI2RlZmluZSBudW1fcG9zc2libGVfY3B1cygpCTFVCisjZGVmaW5lIG51bV9wcmVzZW50X2NwdXMoKQkxVQorI2RlZmluZSBudW1fYWN0aXZlX2NwdXMoKQkxVQogI2RlZmluZSBjcHVfb25saW5lKGNwdSkJCSgoY3B1KSA9PSAwKQogI2RlZmluZSBjcHVfcG9zc2libGUoY3B1KQkoKGNwdSkgPT0gMCkKICNkZWZpbmUgY3B1X3ByZXNlbnQoY3B1KQkoKGNwdSkgPT0gMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGVjb21wcmVzcy9tbS5oIGIvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL21tLmgKaW5kZXggNTAzMmI5YS4uYWQ1ZWMxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZWNvbXByZXNzL21tLmgKQEAgLTE0LDExICsxNCwyMSBAQAogCiAvKiBDb2RlIGFjdGl2ZSB3aGVuIGluY2x1ZGVkIGZyb20gcHJlLWJvb3QgZW52aXJvbm1lbnQ6ICovCiAKKy8qCisgKiBTb21lIGFyY2hpdGVjdHVyZXMgd2FudCB0byBlbnN1cmUgdGhlcmUgaXMgbm8gbG9jYWwgZGF0YSBpbiB0aGVpcgorICogcHJlLWJvb3QgZW52aXJvbm1lbnQsIHNvIHRoYXQgZGF0YSBjYW4gYXJiaXRhcmlseSByZWxvY2F0ZWQgKHZpYQorICogR09UIHJlZmVyZW5jZXMpLiAgVGhpcyBpcyBhY2hpZXZlZCBieSBkZWZpbmluZyBTVEFUSUNfUldfREFUQSB0bworICogYmUgbnVsbC4KKyAqLworI2lmbmRlZiBTVEFUSUNfUldfREFUQQorI2RlZmluZSBTVEFUSUNfUldfREFUQSBzdGF0aWMKKyNlbmRpZgorCiAvKiBBIHRyaXZpYWwgbWFsbG9jIGltcGxlbWVudGF0aW9uLCBhZGFwdGVkIGZyb20KICAqICBtYWxsb2MgYnkgSGFubnUgU2F2b2xhaW5lbiAxOTkzIGFuZCBNYXR0aGlhcyBVcmxpY2hzIDE5OTQKICAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgbWFsbG9jX3B0cjsKLXN0YXRpYyBpbnQgbWFsbG9jX2NvdW50OworU1RBVElDX1JXX0RBVEEgdW5zaWduZWQgbG9uZyBtYWxsb2NfcHRyOworU1RBVElDX1JXX0RBVEEgaW50IG1hbGxvY19jb3VudDsKIAogc3RhdGljIHZvaWQgKm1hbGxvYyhpbnQgc2l6ZSkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZGV2aWNlLW1hcHBlci5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UtbWFwcGVyLmgKaW5kZXggZDRjOWMwYi4uMTM4MWNkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kZXZpY2UtbWFwcGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9kZXZpY2UtbWFwcGVyLmgKQEAgLTExOCwxMCArMTE4LDkgQEAKIC8qCiAgKiBDb25zdHJ1Y3RvcnMgc2hvdWxkIGNhbGwgdGhlc2UgZnVuY3Rpb25zIHRvIGVuc3VyZSBkZXN0aW5hdGlvbiBkZXZpY2VzCiAgKiBhcmUgb3BlbmVkL2Nsb3NlZCBjb3JyZWN0bHkuCi0gKiBGSVhNRTogdG9vIG1hbnkgYXJndW1lbnRzLgogICovCi1pbnQgZG1fZ2V0X2RldmljZShzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgY29uc3QgY2hhciAqcGF0aCwgc2VjdG9yX3Qgc3RhcnQsCi0JCSAgc2VjdG9yX3QgbGVuLCBmbW9kZV90IG1vZGUsIHN0cnVjdCBkbV9kZXYgKipyZXN1bHQpOworaW50IGRtX2dldF9kZXZpY2Uoc3RydWN0IGRtX3RhcmdldCAqdGksIGNvbnN0IGNoYXIgKnBhdGgsIGZtb2RlX3QgbW9kZSwKKwkJCQkJCSBzdHJ1Y3QgZG1fZGV2ICoqcmVzdWx0KTsKIHZvaWQgZG1fcHV0X2RldmljZShzdHJ1Y3QgZG1fdGFyZ2V0ICp0aSwgc3RydWN0IGRtX2RldiAqZCk7CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oIGIvaW5jbHVkZS9saW51eC9kZXZpY2UuaAppbmRleCBiMzA1MjdkLi4xODIxOTI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZGV2aWNlLmgKQEAgLTEwNiw3ICsxMDYsNyBAQAogCiAvKiBBbGwgNCBub3RpZmVycyBiZWxvdyBnZXQgY2FsbGVkIHdpdGggdGhlIHRhcmdldCBzdHJ1Y3QgZGV2aWNlICoKICAqIGFzIGFuIGFyZ3VtZW50LiBOb3RlIHRoYXQgdGhvc2UgZnVuY3Rpb25zIGFyZSBsaWtlbHkgdG8gYmUgY2FsbGVkCi0gKiB3aXRoIHRoZSBkZXZpY2Ugc2VtYXBob3JlIGhlbGQgaW4gdGhlIGNvcmUsIHNvIGJlIGNhcmVmdWwuCisgKiB3aXRoIHRoZSBkZXZpY2UgbG9jayBoZWxkIGluIHRoZSBjb3JlLCBzbyBiZSBjYXJlZnVsLgogICovCiAjZGVmaW5lIEJVU19OT1RJRllfQUREX0RFVklDRQkJMHgwMDAwMDAwMSAvKiBkZXZpY2UgYWRkZWQgKi8KICNkZWZpbmUgQlVTX05PVElGWV9ERUxfREVWSUNFCQkweDAwMDAwMDAyIC8qIGRldmljZSByZW1vdmVkICovCkBAIC0yNTEsOCArMjUxLDEwIEBACiAKIHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgewogCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKLQlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGNsYXNzICpjbGFzcywgY2hhciAqYnVmKTsKLQlzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBjbGFzcyAqY2xhc3MsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KTsKKwlzc2l6ZV90ICgqc2hvdykoc3RydWN0IGNsYXNzICpjbGFzcywgc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNoYXIgKmJ1Zik7CisJc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgY2xhc3MgKmNsYXNzLCBzdHJ1Y3QgY2xhc3NfYXR0cmlidXRlICphdHRyLAorCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwogfTsKIAogI2RlZmluZSBDTEFTU19BVFRSKF9uYW1lLCBfbW9kZSwgX3Nob3csIF9zdG9yZSkJCQlcCkBAIC0yNjMsNiArMjY1LDIzIEBACiBleHRlcm4gdm9pZCBjbGFzc19yZW1vdmVfZmlsZShzdHJ1Y3QgY2xhc3MgKmNsYXNzLAogCQkJICAgICAgY29uc3Qgc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSAqYXR0cik7CiAKKy8qIFNpbXBsZSBjbGFzcyBhdHRyaWJ1dGUgdGhhdCBpcyBqdXN0IGEgc3RhdGljIHN0cmluZyAqLworCitzdHJ1Y3QgY2xhc3NfYXR0cmlidXRlX3N0cmluZyB7CisJc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSBhdHRyOworCWNoYXIgKnN0cjsKK307CisKKy8qIEN1cnJlbnRseSByZWFkLW9ubHkgb25seSAqLworI2RlZmluZSBfQ0xBU1NfQVRUUl9TVFJJTkcoX25hbWUsIF9tb2RlLCBfc3RyKSBcCisJeyBfX0FUVFIoX25hbWUsIF9tb2RlLCBzaG93X2NsYXNzX2F0dHJfc3RyaW5nLCBOVUxMKSwgX3N0ciB9CisjZGVmaW5lIENMQVNTX0FUVFJfU1RSSU5HKF9uYW1lLCBfbW9kZSwgX3N0cikgXAorCXN0cnVjdCBjbGFzc19hdHRyaWJ1dGVfc3RyaW5nIGNsYXNzX2F0dHJfIyNfbmFtZSA9IFwKKwkJX0NMQVNTX0FUVFJfU1RSSU5HKF9uYW1lLCBfbW9kZSwgX3N0cikKKworZXh0ZXJuIHNzaXplX3Qgc2hvd19jbGFzc19hdHRyX3N0cmluZyhzdHJ1Y3QgY2xhc3MgKmNsYXNzLCBzdHJ1Y3QgY2xhc3NfYXR0cmlidXRlICphdHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmKTsKKwogc3RydWN0IGNsYXNzX2ludGVyZmFjZSB7CiAJc3RydWN0IGxpc3RfaGVhZAlub2RlOwogCXN0cnVjdCBjbGFzcwkJKmNsYXNzOwpAQCAtNDg5LDYgKzUwOCwyMSBAQAogCXJldHVybiAhIWRldi0+cG93ZXIuYXN5bmNfc3VzcGVuZDsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9sb2NrKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlkb3duKCZkZXYtPnNlbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRldmljZV90cnlsb2NrKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gZG93bl90cnlsb2NrKCZkZXYtPnNlbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZXZpY2VfdW5sb2NrKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwl1cCgmZGV2LT5zZW0pOworfQorCiB2b2lkIGRyaXZlcl9pbml0KHZvaWQpOwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbS1pby5oIGIvaW5jbHVkZS9saW51eC9kbS1pby5oCmluZGV4IGI2YmYxN2UuLjVjOTE4NmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG0taW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtLWlvLmgKQEAgLTM3LDE0ICszNywxNCBAQAogc3RydWN0IGRtX2lvX21lbW9yeSB7CiAJZW51bSBkbV9pb19tZW1fdHlwZSB0eXBlOwogCisJdW5zaWduZWQgb2Zmc2V0OworCiAJdW5pb24gewogCQlzdHJ1Y3QgcGFnZV9saXN0ICpwbDsKIAkJc3RydWN0IGJpb192ZWMgKmJ2ZWM7CiAJCXZvaWQgKnZtYTsKIAkJdm9pZCAqYWRkcjsKIAl9IHB0cjsKLQotCXVuc2lnbmVkIG9mZnNldDsKIH07CiAKIHN0cnVjdCBkbV9pb19ub3RpZnkgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oIGIvaW5jbHVkZS9saW51eC9kbS1pb2N0bC5oCmluZGV4IGFhOTU1MDguLjJjNDQ1ZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG0taW9jdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtLWlvY3RsLmgKQEAgLTI2Niw5ICsyNjYsOSBAQAogI2RlZmluZSBETV9ERVZfU0VUX0dFT01FVFJZCV9JT1dSKERNX0lPQ1RMLCBETV9ERVZfU0VUX0dFT01FVFJZX0NNRCwgc3RydWN0IGRtX2lvY3RsKQogCiAjZGVmaW5lIERNX1ZFUlNJT05fTUFKT1IJNAotI2RlZmluZSBETV9WRVJTSU9OX01JTk9SCTE2CisjZGVmaW5lIERNX1ZFUlNJT05fTUlOT1IJMTcKICNkZWZpbmUgRE1fVkVSU0lPTl9QQVRDSExFVkVMCTAKLSNkZWZpbmUgRE1fVkVSU0lPTl9FWFRSQQkiLWlvY3RsICgyMDA5LTExLTA1KSIKKyNkZWZpbmUgRE1fVkVSU0lPTl9FWFRSQQkiLWlvY3RsICgyMDEwLTAzLTA1KSIKIAogLyogU3RhdHVzIGJpdHMgKi8KICNkZWZpbmUgRE1fUkVBRE9OTFlfRkxBRwkoMSA8PCAwKSAvKiBJbi9PdXQgKi8KQEAgLTMxNiw0ICszMTYsOSBAQAogICovCiAjZGVmaW5lIERNX1FVRVJZX0lOQUNUSVZFX1RBQkxFX0ZMQUcJKDEgPDwgMTIpIC8qIEluICovCiAKKy8qCisgKiBJZiBzZXQsIGEgdWV2ZW50IHdhcyBnZW5lcmF0ZWQgZm9yIHdoaWNoIHRoZSBjYWxsZXIgbWF5IG5lZWQgdG8gd2FpdC4KKyAqLworI2RlZmluZSBETV9VRVZFTlRfR0VORVJBVEVEX0ZMQUcJKDEgPDwgMTMpIC8qIE91dCAqLworCiAjZW5kaWYJCQkJLyogX0xJTlVYX0RNX0lPQ1RMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG05MDAwLmggYi9pbmNsdWRlL2xpbnV4L2RtOTAwMC5oCmluZGV4IGMzMDg3OWMuLjk2ZTg3NjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG05MDAwLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbTkwMDAuaApAQCAtMjMsNyArMjMsNyBAQAogI2RlZmluZSBETTkwMDBfUExBVEZfTk9fRUVQUk9NCSgweDAwMTApCiAjZGVmaW5lIERNOTAwMF9QTEFURl9TSU1QTEVfUEhZICgweDAwMjApICAvKiBVc2UgTlNSIHRvIGZpbmQgTGlua1N0YXR1cyAqLwogCi0vKiBwbGF0ZnJvbSBkYXRhIGZvciBwbGF0ZnJvbSBkZXZpY2Ugc3RydWN0dXJlJ3MgcGxhdGZyb21fZGF0YSBmaWVsZCAqLworLyogcGxhdGZvcm0gZGF0YSBmb3IgcGxhdGZvcm0gZGV2aWNlIHN0cnVjdHVyZSdzIHBsYXRmb3JtX2RhdGEgZmllbGQgKi8KIAogc3RydWN0IGRtOTAwMF9wbGF0X2RhdGEgewogCXVuc2lnbmVkIGludAlmbGFnczsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaAppbmRleCA5MWI3NjE4Li5jYTMyZWQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oCkBAIC0xMjcsNiArMTI3LDE0IEBACiAJcmV0dXJuIERNQV9CSVRfTUFTSygzMik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9zZXRfY29oZXJlbnRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQoreworCWlmICghZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spKQorCQlyZXR1cm4gLUVJTzsKKwlkZXYtPmNvaGVyZW50X2RtYV9tYXNrID0gbWFzazsKKwlyZXR1cm4gMDsKK30KKwogZXh0ZXJuIHU2NCBkbWFfZ2V0X3JlcXVpcmVkX21hc2soc3RydWN0IGRldmljZSAqZGV2KTsKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZG1hX2dldF9tYXhfc2VnX3NpemUoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMjMyLDQgKzI0MCwyMCBAQAogCiAjZW5kaWYgLyogQ09ORklHX0hBVkVfRE1BX0FUVFJTICovCiAKKyNpZmRlZiBDT05GSUdfTkVFRF9ETUFfTUFQX1NUQVRFCisjZGVmaW5lIERFRklORV9ETUFfVU5NQVBfQUREUihBRERSX05BTUUpICAgICAgICBkbWFfYWRkcl90IEFERFJfTkFNRQorI2RlZmluZSBERUZJTkVfRE1BX1VOTUFQX0xFTihMRU5fTkFNRSkgICAgICAgICAgX191MzIgTEVOX05BTUUKKyNkZWZpbmUgZG1hX3VubWFwX2FkZHIoUFRSLCBBRERSX05BTUUpICAgICAgICAgICAoKFBUUiktPkFERFJfTkFNRSkKKyNkZWZpbmUgZG1hX3VubWFwX2FkZHJfc2V0KFBUUiwgQUREUl9OQU1FLCBWQUwpICAoKChQVFIpLT5BRERSX05BTUUpID0gKFZBTCkpCisjZGVmaW5lIGRtYV91bm1hcF9sZW4oUFRSLCBMRU5fTkFNRSkgICAgICAgICAgICAgKChQVFIpLT5MRU5fTkFNRSkKKyNkZWZpbmUgZG1hX3VubWFwX2xlbl9zZXQoUFRSLCBMRU5fTkFNRSwgVkFMKSAgICAoKChQVFIpLT5MRU5fTkFNRSkgPSAoVkFMKSkKKyNlbHNlCisjZGVmaW5lIERFRklORV9ETUFfVU5NQVBfQUREUihBRERSX05BTUUpCisjZGVmaW5lIERFRklORV9ETUFfVU5NQVBfTEVOKExFTl9OQU1FKQorI2RlZmluZSBkbWFfdW5tYXBfYWRkcihQVFIsIEFERFJfTkFNRSkgICAgICAgICAgICgwKQorI2RlZmluZSBkbWFfdW5tYXBfYWRkcl9zZXQoUFRSLCBBRERSX05BTUUsIFZBTCkgIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZG1hX3VubWFwX2xlbihQVFIsIExFTl9OQU1FKSAgICAgICAgICAgICAoMCkKKyNkZWZpbmUgZG1hX3VubWFwX2xlbl9zZXQoUFRSLCBMRU5fTkFNRSwgVkFMKSAgICBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5oIGIvaW5jbHVkZS9saW51eC9kbWFlbmdpbmUuaAppbmRleCA3ODc4NDk4Li4yMGVhMTJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYWVuZ2luZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZG1hZW5naW5lLmgKQEAgLTMxLDYgKzMxLDggQEAKICAqIGlmIGRtYV9jb29raWVfdCBpcyA+MCBpdCdzIGEgRE1BIHJlcXVlc3QgY29va2llLCA8MCBpdCdzIGFuIGVycm9yIGNvZGUKICAqLwogdHlwZWRlZiBzMzIgZG1hX2Nvb2tpZV90OworI2RlZmluZSBETUFfTUlOX0NPT0tJRQkxCisjZGVmaW5lIERNQV9NQVhfQ09PS0lFCUlOVF9NQVgKIAogI2RlZmluZSBkbWFfc3VibWl0X2Vycm9yKGNvb2tpZSkgKChjb29raWUpIDwgMCA/IDEgOiAwKQogCkBAIC0xNjIsNyArMTY0LDcgQEAKIAlzdHJ1Y3QgZG1hX2NoYW5fZGV2ICpkZXY7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRldmljZV9ub2RlOwotCXN0cnVjdCBkbWFfY2hhbl9wZXJjcHUgKmxvY2FsOworCXN0cnVjdCBkbWFfY2hhbl9wZXJjcHUgX19wZXJjcHUgKmxvY2FsOwogCWludCBjbGllbnRfY291bnQ7CiAJaW50IHRhYmxlX2NvdW50OwogCXZvaWQgKnByaXZhdGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Vhcmx5X3Jlcy5oIGIvaW5jbHVkZS9saW51eC9lYXJseV9yZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWMwOWY1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9lYXJseV9yZXMuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIF9MSU5VWF9FQVJMWV9SRVNfSAorI2RlZmluZSBfTElOVVhfRUFSTFlfUkVTX0gKKyNpZmRlZiBfX0tFUk5FTF9fCisKK2V4dGVybiB2b2lkIHJlc2VydmVfZWFybHkodTY0IHN0YXJ0LCB1NjQgZW5kLCBjaGFyICpuYW1lKTsKK2V4dGVybiB2b2lkIHJlc2VydmVfZWFybHlfb3ZlcmxhcF9vayh1NjQgc3RhcnQsIHU2NCBlbmQsIGNoYXIgKm5hbWUpOworZXh0ZXJuIHZvaWQgZnJlZV9lYXJseSh1NjQgc3RhcnQsIHU2NCBlbmQpOwordm9pZCBmcmVlX2Vhcmx5X3BhcnRpYWwodTY0IHN0YXJ0LCB1NjQgZW5kKTsKK2V4dGVybiB2b2lkIGVhcmx5X3Jlc190b19ib290bWVtKHU2NCBzdGFydCwgdTY0IGVuZCk7CisKK3ZvaWQgcmVzZXJ2ZV9lYXJseV93aXRob3V0X2NoZWNrKHU2NCBzdGFydCwgdTY0IGVuZCwgY2hhciAqbmFtZSk7Cit1NjQgZmluZF9lYXJseV9hcmVhKHU2NCBlaV9zdGFydCwgdTY0IGVpX2xhc3QsIHU2NCBzdGFydCwgdTY0IGVuZCwKKwkJCSB1NjQgc2l6ZSwgdTY0IGFsaWduKTsKK3U2NCBmaW5kX2Vhcmx5X2FyZWFfc2l6ZSh1NjQgZWlfc3RhcnQsIHU2NCBlaV9sYXN0LCB1NjQgc3RhcnQsCisJCQkgdTY0ICpzaXplcCwgdTY0IGFsaWduKTsKK3U2NCBmaW5kX2Z3X21lbW1hcF9hcmVhKHU2NCBzdGFydCwgdTY0IGVuZCwgdTY0IHNpemUsIHU2NCBhbGlnbik7Cit1NjQgZ2V0X21heF9tYXBwZWQodm9pZCk7CisjaW5jbHVkZSA8bGludXgvcmFuZ2UuaD4KK2ludCBnZXRfZnJlZV9hbGxfbWVtb3J5X3JhbmdlKHN0cnVjdCByYW5nZSAqKnJhbmdlcCwgaW50IG5vZGVpZCk7CisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKKyNlbmRpZiAvKiBfTElOVVhfRUFSTFlfUkVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWxmLmggYi9pbmNsdWRlL2xpbnV4L2VsZi5oCmluZGV4IGFkOTkwYzUuLjU5Nzg1ODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWxmLmgKKysrIGIvaW5jbHVkZS9saW51eC9lbGYuaApAQCAtNTAsNiArNTAsMjggQEAKIAogI2RlZmluZSBQVF9HTlVfU1RBQ0sJKFBUX0xPT1MgKyAweDQ3NGU1NTEpCiAKKy8qCisgKiBFeHRlbmRlZCBOdW1iZXJpbmcKKyAqCisgKiBJZiB0aGUgcmVhbCBudW1iZXIgb2YgcHJvZ3JhbSBoZWFkZXIgdGFibGUgZW50cmllcyBpcyBsYXJnZXIgdGhhbgorICogb3IgZXF1YWwgdG8gUE5fWE5VTSgweGZmZmYpLCBpdCBpcyBzZXQgdG8gc2hfaW5mbyBmaWVsZCBvZiB0aGUKKyAqIHNlY3Rpb24gaGVhZGVyIGF0IGluZGV4IDAsIGFuZCBQTl9YTlVNIGlzIHNldCB0byBlX3BobnVtCisgKiBmaWVsZC4gT3RoZXJ3aXNlLCB0aGUgc2VjdGlvbiBoZWFkZXIgYXQgaW5kZXggMCBpcyB6ZXJvCisgKiBpbml0aWFsaXplZCwgaWYgaXQgZXhpc3RzLgorICoKKyAqIFNwZWNpZmljYXRpb25zIGFyZSBhdmFpbGFibGUgaW46CisgKgorICogLSBTdW4gbWljcm9zeXN0ZW1zOiBMaW5rZXIgYW5kIExpYnJhcmllcy4KKyAqICAgUGFydCBObzogODE3LTE5ODQtMTcsIFNlcHRlbWJlciAyMDA4LgorICogICBVUkw6IGh0dHA6Ly9kb2NzLnN1bi5jb20vYXBwL2RvY3MvZG9jLzgxNy0xOTg0CisgKgorICogLSBTeXN0ZW0gViBBQkkgQU1ENjQgQXJjaGl0ZWN0dXJlIFByb2Nlc3NvciBTdXBwbGVtZW50CisgKiAgIERyYWZ0IFZlcnNpb24gMC45OS4sCisgKiAgIE1heSAxMSwgMjAwOS4KKyAqICAgVVJMOiBodHRwOi8vd3d3Lng4Ni02NC5vcmcvCisgKi8KKyNkZWZpbmUgUE5fWE5VTSAweGZmZmYKKwogLyogVGhlc2UgY29uc3RhbnRzIGRlZmluZSB0aGUgZGlmZmVyZW50IGVsZiBmaWxlIHR5cGVzICovCiAjZGVmaW5lIEVUX05PTkUgICAwCiAjZGVmaW5lIEVUX1JFTCAgICAxCkBAIC0yODYsNyArMzA4LDcgQEAKICNkZWZpbmUgU0hOX0NPTU1PTgkweGZmZjIKICNkZWZpbmUgU0hOX0hJUkVTRVJWRQkweGZmZmYKICAKLXR5cGVkZWYgc3RydWN0IHsKK3R5cGVkZWYgc3RydWN0IGVsZjMyX3NoZHIgewogICBFbGYzMl9Xb3JkCXNoX25hbWU7CiAgIEVsZjMyX1dvcmQJc2hfdHlwZTsKICAgRWxmMzJfV29yZAlzaF9mbGFnczsKQEAgLTM5NCwxNiArNDE2LDIwIEBACiBleHRlcm4gRWxmMzJfRHluIF9EWU5BTUlDIFtdOwogI2RlZmluZSBlbGZoZHIJCWVsZjMyX2hkcgogI2RlZmluZSBlbGZfcGhkcgllbGYzMl9waGRyCisjZGVmaW5lIGVsZl9zaGRyCWVsZjMyX3NoZHIKICNkZWZpbmUgZWxmX25vdGUJZWxmMzJfbm90ZQogI2RlZmluZSBlbGZfYWRkcl90CUVsZjMyX09mZgorI2RlZmluZSBFbGZfSGFsZglFbGYzMl9IYWxmCiAKICNlbHNlCiAKIGV4dGVybiBFbGY2NF9EeW4gX0RZTkFNSUMgW107CiAjZGVmaW5lIGVsZmhkcgkJZWxmNjRfaGRyCiAjZGVmaW5lIGVsZl9waGRyCWVsZjY0X3BoZHIKKyNkZWZpbmUgZWxmX3NoZHIJZWxmNjRfc2hkcgogI2RlZmluZSBlbGZfbm90ZQllbGY2NF9ub3RlCiAjZGVmaW5lIGVsZl9hZGRyX3QJRWxmNjRfT2ZmCisjZGVmaW5lIEVsZl9IYWxmCUVsZjY0X0hhbGYKIAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZWxmY29yZS5oIGIvaW5jbHVkZS9saW51eC9lbGZjb3JlLmgKaW5kZXggMDBkNmE2OC4uZTY4N2JjMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9lbGZjb3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9lbGZjb3JlLmgKQEAgLTgsNiArOCw4IEBACiAjaW5jbHVkZSA8bGludXgvdXNlci5oPgogI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvZWxmLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KIAogc3RydWN0IGVsZl9zaWdpbmZvCiB7CkBAIC0xNTAsNSArMTUyLDIwIEBACiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKKy8qCisgKiBUaGVzZSBmdW5jdGlvbnMgcGFyYW1ldGVyaXplIGVsZl9jb3JlX2R1bXAgaW4gZnMvYmluZm10X2VsZi5jIHRvIHdyaXRlIG91dAorICogZXh0cmEgc2VnbWVudHMgY29udGFpbmluZyB0aGUgZ2F0ZSBEU08gY29udGVudHMuICBEdW1waW5nIGl0cworICogY29udGVudHMgbWFrZXMgcG9zdC1tb3J0ZW0gZnVsbHkgaW50ZXJwcmV0YWJsZSBsYXRlciB3aXRob3V0IG1hdGNoaW5nIHVwCisgKiB0aGUgc2FtZSBrZXJuZWwgYW5kIGhhcmR3YXJlIGNvbmZpZyB0byBzZWUgd2hhdCBQQyB2YWx1ZXMgbWVhbnQuCisgKiBEdW1waW5nIGl0cyBleHRyYSBFTEYgcHJvZ3JhbSBoZWFkZXJzIGluY2x1ZGVzIGFsbCB0aGUgb3RoZXIgaW5mb3JtYXRpb24KKyAqIGEgZGVidWdnZXIgbmVlZHMgdG8gZWFzaWx5IGZpbmQgaG93IHRoZSBnYXRlIERTTyB3YXMgYmVpbmcgdXNlZC4KKyAqLworZXh0ZXJuIEVsZl9IYWxmIGVsZl9jb3JlX2V4dHJhX3BoZHJzKHZvaWQpOworZXh0ZXJuIGludAorZWxmX2NvcmVfd3JpdGVfZXh0cmFfcGhkcnMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCAqc2l6ZSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgbGltaXQpOworZXh0ZXJuIGludAorZWxmX2NvcmVfd3JpdGVfZXh0cmFfZGF0YShzdHJ1Y3QgZmlsZSAqZmlsZSwgc2l6ZV90ICpzaXplLCB1bnNpZ25lZCBsb25nIGxpbWl0KTsKK2V4dGVybiBzaXplX3QgZWxmX2NvcmVfZXh0cmFfZGF0YV9zaXplKHZvaWQpOwogCiAjZW5kaWYgLyogX0xJTlVYX0VMRkNPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmggYi9pbmNsdWRlL2xpbnV4L2V0aHRvb2wuaAppbmRleCBlZjRhMmQ4Li5jY2ExYzNkZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKKysrIGIvaW5jbHVkZS9saW51eC9ldGh0b29sLmgKQEAgLTI0Miw2ICsyNDIsNyBAQAogCUVUSF9TU19URVNUCQk9IDAsCiAJRVRIX1NTX1NUQVRTLAogCUVUSF9TU19QUklWX0ZMQUdTLAorCUVUSF9TU19OVFVQTEVfRklMVEVSUywKIH07CiAKIC8qIGZvciBwYXNzaW5nIHN0cmluZyBzZXRzIGZvciBkYXRhIHRhZ2dpbmcgKi8KQEAgLTI5MCw2ICsyOTEsNyBAQAogICovCiBlbnVtIGV0aHRvb2xfZmxhZ3MgewogCUVUSF9GTEFHX0xSTwkJPSAoMSA8PCAxNSksCS8qIExSTyBpcyBlbmFibGVkICovCisJRVRIX0ZMQUdfTlRVUExFCQk9ICgxIDw8IDI3KSwJLyogTi10dXBsZSBmaWx0ZXJzIGVuYWJsZWQgKi8KIH07CiAKIC8qIFRoZSBmb2xsb3dpbmcgc3RydWN0dXJlcyBhcmUgZm9yIHN1cHBvcnRpbmcgUlggbmV0d29yayBmbG93CkBAIC0zNjMsNiArMzY1LDM1IEBACiAJX191MzIJCQkJcnVsZV9sb2NzWzBdOwogfTsKIAorc3RydWN0IGV0aHRvb2xfcnhfbnR1cGxlX2Zsb3dfc3BlYyB7CisJX191MzIJCSBmbG93X3R5cGU7CisJdW5pb24geworCQlzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYwkJdGNwX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYwkJdWRwX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF90Y3BpcDRfc3BlYwkJc2N0cF9pcDRfc3BlYzsKKwkJc3RydWN0IGV0aHRvb2xfYWhfZXNwaXA0X3NwZWMJCWFoX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF9haF9lc3BpcDRfc3BlYwkJZXNwX2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF9yYXdpcDRfc3BlYwkJcmF3X2lwNF9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF9ldGhlcl9zcGVjCQlldGhlcl9zcGVjOworCQlzdHJ1Y3QgZXRodG9vbF91c3JpcDRfc3BlYwkJdXNyX2lwNF9zcGVjOworCQlfX3U4CQkJCQloZGF0YVs2NF07CisJfSBoX3UsIG1fdTsgLyogZW50cnksIG1hc2sgKi8KKworCV9fdTE2CSAgICAgICAgdmxhbl90YWc7CisJX191MTYJICAgICAgICB2bGFuX3RhZ19tYXNrOworCV9fdTY0CQlkYXRhOyAgICAgIC8qIHVzZXItZGVmaW5lZCBmbG93IHNwZWMgZGF0YSAqLworCV9fdTY0CQlkYXRhX21hc2s7IC8qIHVzZXItZGVmaW5lZCBmbG93IHNwZWMgbWFzayAqLworCisJLyogc2lnbmVkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gcXVldWUgYW5kIGFjdGlvbnMgKERST1ApICovCisJX19zMzIJCWFjdGlvbjsKKyNkZWZpbmUgRVRIVE9PTF9SWE5UVVBMRV9BQ1RJT05fRFJPUCAtMQorfTsKKworc3RydWN0IGV0aHRvb2xfcnhfbnR1cGxlIHsKKwlfX3UzMgkJCQkJY21kOworCXN0cnVjdCBldGh0b29sX3J4X250dXBsZV9mbG93X3NwZWMJZnM7Cit9OworCiAjZGVmaW5lIEVUSFRPT0xfRkxBU0hfTUFYX0ZJTEVOQU1FCTEyOAogZW51bSBldGh0b29sX2ZsYXNoX29wX3R5cGUgewogCUVUSFRPT0xfRkxBU0hfQUxMX1JFR0lPTlMJPSAwLApAQCAtMzc3LDYgKzQwOCwyMCBAQAogCiAjaWZkZWYgX19LRVJORUxfXwogCisjaW5jbHVkZSA8bGludXgvcmN1bGlzdC5oPgorCitzdHJ1Y3QgZXRodG9vbF9yeF9udHVwbGVfZmxvd19zcGVjX2NvbnRhaW5lciB7CisJc3RydWN0IGV0aHRvb2xfcnhfbnR1cGxlX2Zsb3dfc3BlYyBmczsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCitzdHJ1Y3QgZXRodG9vbF9yeF9udHVwbGVfbGlzdCB7CisjZGVmaW5lIEVUSFRPT0xfTUFYX05UVVBMRV9MSVNUX0VOVFJZIDEwMjQKKyNkZWZpbmUgRVRIVE9PTF9NQVhfTlRVUExFX1NUUklOR19QRVJfRU5UUlkgMTQKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJdW5zaWduZWQgaW50CQljb3VudDsKK307CisKIHN0cnVjdCBuZXRfZGV2aWNlOwogCiAvKiBTb21lIGdlbmVyaWMgbWV0aG9kcyBkcml2ZXJzIG1heSB1c2UgaW4gdGhlaXIgZXRodG9vbF9vcHMgKi8KQEAgLTM5NCw2ICs0MzksNyBAQAogaW50IGV0aHRvb2xfb3Bfc2V0X3VmbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZGF0YSk7CiB1MzIgZXRodG9vbF9vcF9nZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgZXRodG9vbF9vcF9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpOwordm9pZCBldGh0b29sX250dXBsZV9mbHVzaChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogLyoqCiAgKiAmZXRodG9vbF9vcHMgLSBBbHRlciBhbmQgcmVwb3J0IG5ldHdvcmsgZGV2aWNlIHNldHRpbmdzCkBAIC01MDAsNiArNTQ2LDggQEAKIAlpbnQJKCpzZXRfcnhuZmMpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX3J4bmZjICopOwogCWludCAgICAgKCpmbGFzaF9kZXZpY2UpKHN0cnVjdCBuZXRfZGV2aWNlICosIHN0cnVjdCBldGh0b29sX2ZsYXNoICopOwogCWludAkoKnJlc2V0KShzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MzIgKik7CisJaW50CSgqc2V0X3J4X250dXBsZSkoc3RydWN0IG5ldF9kZXZpY2UgKiwgc3RydWN0IGV0aHRvb2xfcnhfbnR1cGxlICopOworCWludAkoKmdldF9yeF9udHVwbGUpKHN0cnVjdCBuZXRfZGV2aWNlICosIHUzMiBzdHJpbmdzZXQsIHZvaWQgKik7CiB9OwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KIApAQCAtNTU5LDYgKzYwNyw5IEBACiAjZGVmaW5lCUVUSFRPT0xfRkxBU0hERVYJMHgwMDAwMDAzMyAvKiBGbGFzaCBmaXJtd2FyZSB0byBkZXZpY2UgKi8KICNkZWZpbmUJRVRIVE9PTF9SRVNFVAkJMHgwMDAwMDAzNCAvKiBSZXNldCBoYXJkd2FyZSAqLwogCisjZGVmaW5lIEVUSFRPT0xfU1JYTlRVUExFCTB4MDAwMDAwMzUgLyogQWRkIGFuIG4tdHVwbGUgZmlsdGVyIHRvIGRldmljZSAqLworI2RlZmluZSBFVEhUT09MX0dSWE5UVVBMRQkweDAwMDAwMDM2IC8qIEdldCBuLXR1cGxlIGZpbHRlcnMgZnJvbSBkZXZpY2UgKi8KKwogLyogY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIGNvZGUgKi8KICNkZWZpbmUgU1BBUkNfRVRIX0dTRVQJCUVUSFRPT0xfR1NFVAogI2RlZmluZSBTUEFSQ19FVEhfU1NFVAkJRVRIVE9PTF9TU0VUCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4cG9ydGZzLmggYi9pbmNsdWRlL2xpbnV4L2V4cG9ydGZzLmgKaW5kZXggZGMxMmY0MS4uYTljZDUwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHBvcnRmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZXhwb3J0ZnMuaApAQCAtOTYsNiArOTYsNyBAQAogICogQGZoX3RvX3BhcmVudDogICBmaW5kIHRoZSBpbXBsaWVkIG9iamVjdCdzIHBhcmVudCBhbmQgZ2V0IGEgZGVudHJ5IGZvciBpdAogICogQGdldF9uYW1lOiAgICAgICBmaW5kIHRoZSBuYW1lIGZvciBhIGdpdmVuIGlub2RlIGluIGEgZ2l2ZW4gZGlyZWN0b3J5CiAgKiBAZ2V0X3BhcmVudDogICAgIGZpbmQgdGhlIHBhcmVudCBvZiBhIGdpdmVuIGRpcmVjdG9yeQorICogQGNvbW1pdF9tZXRhZGF0YTogY29tbWl0IG1ldGFkYXRhIGNoYW5nZXMgdG8gc3RhYmxlIHN0b3JhZ2UKICAqCiAgKiBTZWUgRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9uZnMvRXhwb3J0aW5nIGZvciBkZXRhaWxzIG9uIGhvdyB0byB1c2UKICAqIHRoaXMgaW50ZXJmYWNlIGNvcnJlY3RseS4KQEAgLTEzNyw2ICsxMzgsOSBAQAogICogICAgaXMgYWxzbyBhIGRpcmVjdG9yeS4gIEluIHRoZSBldmVudCB0aGF0IGl0IGNhbm5vdCBiZSBmb3VuZCwgb3Igc3RvcmFnZQogICogICAgc3BhY2UgY2Fubm90IGJlIGFsbG9jYXRlZCwgYSAlRVJSX1BUUiBzaG91bGQgYmUgcmV0dXJuZWQuCiAgKgorICogY29tbWl0X21ldGFkYXRhOgorICogICAgQGNvbW1pdF9tZXRhZGF0YSBzaG91bGQgY29tbWl0IG1ldGFkYXRhIGNoYW5nZXMgdG8gc3RhYmxlIHN0b3JhZ2UuCisgKgogICogTG9ja2luZyBydWxlczoKICAqICAgIGdldF9wYXJlbnQgaXMgY2FsbGVkIHdpdGggY2hpbGQtPmRfaW5vZGUtPmlfbXV0ZXggZG93bgogICogICAgZ2V0X25hbWUgaXMgbm90ICh3aGljaCBpcyBwb3NzaWJseSBpbmNvbnNpc3RlbnQpCkBAIC0xNTIsNiArMTU2LDcgQEAKIAlpbnQgKCpnZXRfbmFtZSkoc3RydWN0IGRlbnRyeSAqcGFyZW50LCBjaGFyICpuYW1lLAogCQkJc3RydWN0IGRlbnRyeSAqY2hpbGQpOwogCXN0cnVjdCBkZW50cnkgKiAoKmdldF9wYXJlbnQpKHN0cnVjdCBkZW50cnkgKmNoaWxkKTsKKwlpbnQgKCpjb21taXRfbWV0YWRhdGEpKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogfTsKIAogZXh0ZXJuIGludCBleHBvcnRmc19lbmNvZGVfZmgoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgZmlkICpmaWQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDNfZnMuaCBiL2luY2x1ZGUvbGludXgvZXh0M19mcy5oCmluZGV4IDZiMDQ5MDMuLmNhYzg0YjAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXh0M19mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZXh0M19mcy5oCkBAIC0yMDIsMTQgKzIwMiw2IEBACiAJCXJldHVybiBmbGFncyAmIEVYVDNfT1RIRVJfRkxNQVNLOwogfQogCi0vKgotICogSW5vZGUgZHluYW1pYyBzdGF0ZSBmbGFncwotICovCi0jZGVmaW5lIEVYVDNfU1RBVEVfSkRBVEEJCTB4MDAwMDAwMDEgLyogam91cm5hbGVkIGRhdGEgZXhpc3RzICovCi0jZGVmaW5lIEVYVDNfU1RBVEVfTkVXCQkJMHgwMDAwMDAwMiAvKiBpbm9kZSBpcyBuZXdseSBjcmVhdGVkICovCi0jZGVmaW5lIEVYVDNfU1RBVEVfWEFUVFIJCTB4MDAwMDAwMDQgLyogaGFzIGluLWlub2RlIHhhdHRycyAqLwotI2RlZmluZSBFWFQzX1NUQVRFX0ZMVVNIX09OX0NMT1NFCTB4MDAwMDAwMDgKLQogLyogVXNlZCB0byBwYXNzIGdyb3VwIGRlc2NyaXB0b3IgZGF0YSB3aGVuIG9ubGluZSByZXNpemUgaXMgZG9uZSAqLwogc3RydWN0IGV4dDNfbmV3X2dyb3VwX2lucHV0IHsKIAlfX3UzMiBncm91cDsgICAgICAgICAgICAvKiBHcm91cCBudW1iZXIgZm9yIHRoaXMgZGF0YSAqLwpAQCAtNTYwLDYgKzU1MiwzMSBAQAogCQkoaW5vID49IEVYVDNfRklSU1RfSU5PKHNiKSAmJgogCQkgaW5vIDw9IGxlMzJfdG9fY3B1KEVYVDNfU0Ioc2IpLT5zX2VzLT5zX2lub2Rlc19jb3VudCkpOwogfQorCisvKgorICogSW5vZGUgZHluYW1pYyBzdGF0ZSBmbGFncworICovCitlbnVtIHsKKwlFWFQzX1NUQVRFX0pEQVRBLAkJLyogam91cm5hbGVkIGRhdGEgZXhpc3RzICovCisJRVhUM19TVEFURV9ORVcsCQkJLyogaW5vZGUgaXMgbmV3bHkgY3JlYXRlZCAqLworCUVYVDNfU1RBVEVfWEFUVFIsCQkvKiBoYXMgaW4taW5vZGUgeGF0dHJzICovCisJRVhUM19TVEFURV9GTFVTSF9PTl9DTE9TRSwJLyogZmx1c2ggZGlydHkgcGFnZXMgb24gY2xvc2UgKi8KK307CisKK3N0YXRpYyBpbmxpbmUgaW50IGV4dDNfdGVzdF9pbm9kZV9zdGF0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgYml0KQoreworCXJldHVybiB0ZXN0X2JpdChiaXQsICZFWFQzX0koaW5vZGUpLT5pX3N0YXRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGV4dDNfc2V0X2lub2RlX3N0YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBiaXQpCit7CisJc2V0X2JpdChiaXQsICZFWFQzX0koaW5vZGUpLT5pX3N0YXRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGV4dDNfY2xlYXJfaW5vZGVfc3RhdGUoc3RydWN0IGlub2RlICppbm9kZSwgaW50IGJpdCkKK3sKKwljbGVhcl9iaXQoYml0LCAmRVhUM19JKGlub2RlKS0+aV9zdGF0ZSk7Cit9CiAjZWxzZQogLyogQXNzdW1lIHRoYXQgdXNlciBtb2RlIHByb2dyYW1zIGFyZSBwYXNzaW5nIGluIGFuIGV4dDNmcyBzdXBlcmJsb2NrLCBub3QKICAqIGEga2VybmVsIHN0cnVjdCBzdXBlcl9ibG9jay4gIFRoaXMgd2lsbCBhbGxvdyB1cyB0byBjYWxsIHRoZSBmZWF0dXJlLXRlc3QKQEAgLTg3Nyw3ICs4OTQsNyBAQAogCWludCBjcmVhdGUpOwogCiBleHRlcm4gc3RydWN0IGlub2RlICpleHQzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkIGxvbmcpOwotZXh0ZXJuIGludCAgZXh0M193cml0ZV9pbm9kZSAoc3RydWN0IGlub2RlICosIGludCk7CitleHRlcm4gaW50ICBleHQzX3dyaXRlX2lub2RlIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICopOwogZXh0ZXJuIGludCAgZXh0M19zZXRhdHRyIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKIGV4dGVybiB2b2lkIGV4dDNfZGVsZXRlX2lub2RlIChzdHJ1Y3QgaW5vZGUgKik7CiBleHRlcm4gaW50ICBleHQzX3N5bmNfaW5vZGUgKGhhbmRsZV90ICosIHN0cnVjdCBpbm9kZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0M19mc19pLmggYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oCmluZGV4IDkzZTc0MjguLjc2NzlhY2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXh0M19mc19pLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaApAQCAtODcsNyArODcsNyBAQAogCSAqIG5lYXIgdG8gdGhlaXIgcGFyZW50IGRpcmVjdG9yeSdzIGlub2RlLgogCSAqLwogCV9fdTMyCWlfYmxvY2tfZ3JvdXA7Ci0JX191MzIJaV9zdGF0ZTsJCS8qIER5bmFtaWMgc3RhdGUgZmxhZ3MgZm9yIGV4dDMgKi8KKwl1bnNpZ25lZCBsb25nCWlfc3RhdGU7CS8qIER5bmFtaWMgc3RhdGUgZmxhZ3MgZm9yIGV4dDMgKi8KIAogCS8qIGJsb2NrIHJlc2VydmF0aW9uIGluZm8gKi8KIAlzdHJ1Y3QgZXh0M19ibG9ja19hbGxvY19pbmZvICppX2Jsb2NrX2FsbG9jX2luZm87CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZhdWx0LWluamVjdC5oIGIvaW5jbHVkZS9saW51eC9mYXVsdC1pbmplY3QuaAppbmRleCAwNmNhOWIyLi43YjY0YWQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZhdWx0LWluamVjdC5oCisrKyBiL2luY2x1ZGUvbGludXgvZmF1bHQtaW5qZWN0LmgKQEAgLTgyLDkgKzgyLDEwIEBACiAjZW5kaWYgLyogQ09ORklHX0ZBVUxUX0lOSkVDVElPTiAqLwogCiAjaWZkZWYgQ09ORklHX0ZBSUxTTEFCCi1leHRlcm4gYm9vbCBzaG91bGRfZmFpbHNsYWIoc2l6ZV90IHNpemUsIGdmcF90IGdmcGZsYWdzKTsKK2V4dGVybiBib29sIHNob3VsZF9mYWlsc2xhYihzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwZmxhZ3MsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfZmFpbHNsYWIoc2l6ZV90IHNpemUsIGdmcF90IGdmcGZsYWdzKQorc3RhdGljIGlubGluZSBib29sIHNob3VsZF9mYWlsc2xhYihzaXplX3Qgc2l6ZSwgZ2ZwX3QgZ2ZwZmxhZ3MsCisJCQkJdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlyZXR1cm4gZmFsc2U7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZiLmggYi9pbmNsdWRlL2xpbnV4L2ZiLmgKaW5kZXggMzY5NzY3Yi4uYzEwMTYzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mYi5oCisrKyBiL2luY2x1ZGUvbGludXgvZmIuaApAQCAtNTQzLDYgKzU0Myw4IEBACiAjZGVmaW5lIEZCX0VWRU5UX0dFVF9SRVEgICAgICAgICAgICAgICAgMHgwRAogLyogICAgICBVbmJpbmQgZnJvbSB0aGUgY29uc29sZSBpZiBwb3NzaWJsZSAqLwogI2RlZmluZSBGQl9FVkVOVF9GQl9VTkJJTkQgICAgICAgICAgICAgIDB4MEUKKy8qICAgICAgQ09OU09MRS1TUEVDSUZJQzogcmVtYXAgYWxsIGNvbnNvbGVzIHRvIG5ldyBmYiAtIGZvciB2Z2Egc3dpdGNoZXJvbyAqLworI2RlZmluZSBGQl9FVkVOVF9SRU1BUF9BTExfQ09OU09MRSAgICAgIDB4MEYKIAogc3RydWN0IGZiX2V2ZW50IHsKIAlzdHJ1Y3QgZmJfaW5mbyAqaW5mbzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlyZXdpcmUtY2Rldi5oIGIvaW5jbHVkZS9saW51eC9maXJld2lyZS1jZGV2LmgKaW5kZXggNTIwZWNmOC4uNDBiMTEwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maXJld2lyZS1jZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9maXJld2lyZS1jZGV2LmgKQEAgLTI0OCwxMyArMjQ4LDIwIEBACiAjZGVmaW5lIEZXX0NERVZfSU9DX1NFTkRfQlJPQURDQVNUX1JFUVVFU1QgICAgICAgX0lPVygnIycsIDB4MTIsIHN0cnVjdCBmd19jZGV2X3NlbmRfcmVxdWVzdCkKICNkZWZpbmUgRldfQ0RFVl9JT0NfU0VORF9TVFJFQU1fUEFDS0VUICAgICAgICAgICBfSU9XKCcjJywgMHgxMywgc3RydWN0IGZ3X2NkZXZfc2VuZF9zdHJlYW1fcGFja2V0KQogCisvKiBhdmFpbGFibGUgc2luY2Uga2VybmVsIHZlcnNpb24gMi42LjM0ICovCisjZGVmaW5lIEZXX0NERVZfSU9DX0dFVF9DWUNMRV9USU1FUjIgICBfSU9XUignIycsIDB4MTQsIHN0cnVjdCBmd19jZGV2X2dldF9jeWNsZV90aW1lcjIpCisKIC8qCiAgKiBGV19DREVWX1ZFUlNJT04gSGlzdG9yeQogICogIDEgICgyLjYuMjIpICAtIGluaXRpYWwgdmVyc2lvbgogICogIDIgICgyLjYuMzApICAtIGNoYW5nZWQgJmZ3X2NkZXZfZXZlbnRfaXNvX2ludGVycnVwdC5oZWFkZXIgaWYKICAqICAgICAgICAgICAgICAgICAmZndfY2Rldl9jcmVhdGVfaXNvX2NvbnRleHQuaGVhZGVyX3NpemUgaXMgOCBvciBtb3JlCisgKiAgICAgKDIuNi4zMikgIC0gYWRkZWQgdGltZSBzdGFtcCB0byB4bWl0ICZmd19jZGV2X2V2ZW50X2lzb19pbnRlcnJ1cHQKKyAqICAgICAoMi42LjMzKSAgLSBJUiBoYXMgYWx3YXlzIHBhY2tldC1wZXItYnVmZmVyIHNlbWFudGljcyBub3csIG5vdCBvbmUgb2YKKyAqICAgICAgICAgICAgICAgICBkdWFsLWJ1ZmZlciBvciBwYWNrZXQtcGVyLWJ1ZmZlciBkZXBlbmRpbmcgb24gaGFyZHdhcmUKKyAqICAzICAoMi42LjM0KSAgLSBtYWRlICZmd19jZGV2X2dldF9jeWNsZV90aW1lciByZWxpYWJsZQogICovCi0jZGVmaW5lIEZXX0NERVZfVkVSU0lPTiAyCisjZGVmaW5lIEZXX0NERVZfVkVSU0lPTiAzCiAKIC8qKgogICogc3RydWN0IGZ3X2NkZXZfZ2V0X2luZm8gLSBHZW5lcmFsIHB1cnBvc2UgaW5mb3JtYXRpb24gaW9jdGwKQEAgLTU0NCwxNCArNTUxLDE4IEBACiAvKioKICAqIHN0cnVjdCBmd19jZGV2X2dldF9jeWNsZV90aW1lciAtIHJlYWQgY3ljbGUgdGltZXIgcmVnaXN0ZXIKICAqIEBsb2NhbF90aW1lOiAgIHN5c3RlbSB0aW1lLCBpbiBtaWNyb3NlY29uZHMgc2luY2UgdGhlIEVwb2NoCi0gKiBAY3ljbGVfdGltZXI6ICBpc29jaHJvbm91cyBjeWNsZSB0aW1lciwgYXMgcGVyIE9IQ0kgMS4xIGNsYXVzZSA1LjEzCisgKiBAY3ljbGVfdGltZXI6ICBDeWNsZSBUaW1lIHJlZ2lzdGVyIGNvbnRlbnRzCiAgKgogICogVGhlICVGV19DREVWX0lPQ19HRVRfQ1lDTEVfVElNRVIgaW9jdGwgcmVhZHMgdGhlIGlzb2Nocm9ub3VzIGN5Y2xlIHRpbWVyCi0gKiBhbmQgYWxzbyB0aGUgc3lzdGVtIGNsb2NrLiAgVGhpcyBhbGxvd3MgdG8gZXhwcmVzcyB0aGUgcmVjZWl2ZSB0aW1lIG9mIGFuCi0gKiBpc29jaHJvbm91cyBwYWNrZXQgYXMgYSBzeXN0ZW0gdGltZSB3aXRoIG1pY3Jvc2Vjb25kIGFjY3VyYWN5LgorICogYW5kIGFsc28gdGhlIHN5c3RlbSBjbG9jayAoJUNMT0NLX1JFQUxUSU1FKS4gIFRoaXMgYWxsb3dzIHRvIGV4cHJlc3MgdGhlCisgKiByZWNlaXZlIHRpbWUgb2YgYW4gaXNvY2hyb25vdXMgcGFja2V0IGFzIGEgc3lzdGVtIHRpbWUuCiAgKgogICogQGN5Y2xlX3RpbWVyIGNvbnNpc3RzIG9mIDcgYml0cyBjeWNsZVNlY29uZHMsIDEzIGJpdHMgY3ljbGVDb3VudCwgYW5kCi0gKiAxMiBiaXRzIGN5Y2xlT2Zmc2V0LCBpbiBob3N0IGJ5dGUgb3JkZXIuCisgKiAxMiBiaXRzIGN5Y2xlT2Zmc2V0LCBpbiBob3N0IGJ5dGUgb3JkZXIuICBDZi4gdGhlIEN5Y2xlIFRpbWUgcmVnaXN0ZXIKKyAqIHBlciBJRUVFIDEzOTQgb3IgSXNvY2hyb25vdXMgQ3ljbGUgVGltZXIgcmVnaXN0ZXIgcGVyIE9IQ0ktMTM5NC4KKyAqCisgKiBJbiB2ZXJzaW9uIDEgYW5kIDIgb2YgdGhlIEFCSSwgdGhpcyBpb2N0bCByZXR1cm5lZCB1bnJlbGlhYmxlIChub24tCisgKiBtb25vdG9uaWMpIEBjeWNsZV90aW1lciB2YWx1ZXMgb24gY2VydGFpbiBjb250cm9sbGVycy4KICAqLwogc3RydWN0IGZ3X2NkZXZfZ2V0X2N5Y2xlX3RpbWVyIHsKIAlfX3U2NCBsb2NhbF90aW1lOwpAQCAtNTU5LDYgKzU3MCwyNSBAQAogfTsKIAogLyoqCisgKiBzdHJ1Y3QgZndfY2Rldl9nZXRfY3ljbGVfdGltZXIyIC0gcmVhZCBjeWNsZSB0aW1lciByZWdpc3RlcgorICogQHR2X3NlYzogICAgICAgc3lzdGVtIHRpbWUsIHNlY29uZHMKKyAqIEB0dl9uc2VjOiAgICAgIHN5c3RlbSB0aW1lLCBzdWItc2Vjb25kcyBwYXJ0IGluIG5hbm9zZWNvbmRzCisgKiBAY2xrX2lkOiAgICAgICBpbnB1dCBwYXJhbWV0ZXIsIGNsb2NrIGZyb20gd2hpY2ggdG8gZ2V0IHRoZSBzeXN0ZW0gdGltZQorICogQGN5Y2xlX3RpbWVyOiAgQ3ljbGUgVGltZSByZWdpc3RlciBjb250ZW50cworICoKKyAqIFRoZSAlRldfQ0RFVl9JT0NfR0VUX0NZQ0xFX1RJTUVSMiB3b3JrcyBsaWtlCisgKiAlRldfQ0RFVl9JT0NfR0VUX0NZQ0xFX1RJTUVSIGJ1dCBsZXRzIHlvdSBjaG9vc2UgYSBjbG9jayBsaWtlIHdpdGggUE9TSVgnCisgKiBjbG9ja19nZXR0aW1lIGZ1bmN0aW9uLiAgU3VwcG9ydGVkIEBjbGtfaWQgdmFsdWVzIGFyZSBQT1NJWCcgJUNMT0NLX1JFQUxUSU1FCisgKiBhbmQgJUNMT0NLX01PTk9UT05JQyBhbmQgTGludXgnICVDTE9DS19NT05PVE9OSUNfUkFXLgorICovCitzdHJ1Y3QgZndfY2Rldl9nZXRfY3ljbGVfdGltZXIyIHsKKwlfX3M2NCB0dl9zZWM7CisJX19zMzIgdHZfbnNlYzsKKwlfX3MzMiBjbGtfaWQ7CisJX191MzIgY3ljbGVfdGltZXI7Cit9OworCisvKioKICAqIHN0cnVjdCBmd19jZGV2X2FsbG9jYXRlX2lzb19yZXNvdXJjZSAtIChEZSlhbGxvY2F0ZSBhIGNoYW5uZWwgb3IgYmFuZHdpZHRoCiAgKiBAY2xvc3VyZToJUGFzc2VkIGJhY2sgdG8gdXNlcnNwYWNlIGluIGNvcnJlcG9uZGluZyBpc28gcmVzb3VyY2UgZXZlbnRzCiAgKiBAY2hhbm5lbHM6CUlzb2Nocm9ub3VzIGNoYW5uZWxzIG9mIHdoaWNoIG9uZSBpcyB0byBiZSAoZGUpYWxsb2NhdGVkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLmggYi9pbmNsdWRlL2xpbnV4L2ZpcmV3aXJlLmgKaW5kZXggYTBlNjcxNS4uNGJkOTRiZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maXJld2lyZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZmlyZXdpcmUuaApAQCAtNjUsMTIgKzY1LDEzIEBACiAjZGVmaW5lIENTUl9ESVJFQ1RPUllfSUQJMHgyMAogCiBzdHJ1Y3QgZndfY3NyX2l0ZXJhdG9yIHsKLQl1MzIgKnA7Ci0JdTMyICplbmQ7CisJY29uc3QgdTMyICpwOworCWNvbnN0IHUzMiAqZW5kOwogfTsKIAotdm9pZCBmd19jc3JfaXRlcmF0b3JfaW5pdChzdHJ1Y3QgZndfY3NyX2l0ZXJhdG9yICpjaSwgdTMyICpwKTsKK3ZvaWQgZndfY3NyX2l0ZXJhdG9yX2luaXQoc3RydWN0IGZ3X2Nzcl9pdGVyYXRvciAqY2ksIGNvbnN0IHUzMiAqcCk7CiBpbnQgZndfY3NyX2l0ZXJhdG9yX25leHQoc3RydWN0IGZ3X2Nzcl9pdGVyYXRvciAqY2ksIGludCAqa2V5LCBpbnQgKnZhbHVlKTsKK2ludCBmd19jc3Jfc3RyaW5nKGNvbnN0IHUzMiAqZGlyZWN0b3J5LCBpbnQga2V5LCBjaGFyICpidWYsIHNpemVfdCBzaXplKTsKIAogZXh0ZXJuIHN0cnVjdCBidXNfdHlwZSBmd19idXNfdHlwZTsKIApAQCAtMTYyLDcgKzE2Myw3IEBACiAJc3RydWN0IG11dGV4IGNsaWVudF9saXN0X211dGV4OwogCXN0cnVjdCBsaXN0X2hlYWQgY2xpZW50X2xpc3Q7CiAKLQl1MzIgKmNvbmZpZ19yb207CisJY29uc3QgdTMyICpjb25maWdfcm9tOwogCXNpemVfdCBjb25maWdfcm9tX2xlbmd0aDsKIAlpbnQgY29uZmlnX3JvbV9yZXRyaWVzOwogCXVuc2lnbmVkIGlzX2xvY2FsOjE7CkBAIC0yMDQsNyArMjA1LDcgQEAKICAqLwogc3RydWN0IGZ3X3VuaXQgewogCXN0cnVjdCBkZXZpY2UgZGV2aWNlOwotCXUzMiAqZGlyZWN0b3J5OworCWNvbnN0IHUzMiAqZGlyZWN0b3J5OwogCXN0cnVjdCBmd19hdHRyaWJ1dGVfZ3JvdXAgYXR0cmlidXRlX2dyb3VwOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9maXJtd2FyZS1tYXAuaCBiL2luY2x1ZGUvbGludXgvZmlybXdhcmUtbWFwLmgKaW5kZXggODc1NDUxZi4uYzZkY2MxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maXJtd2FyZS1tYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Zpcm13YXJlLW1hcC5oCkBAIC0yNCwxNyArMjQsMTcgQEAKICAqLwogI2lmZGVmIENPTkZJR19GSVJNV0FSRV9NRU1NQVAKIAotaW50IGZpcm13YXJlX21hcF9hZGQodTY0IHN0YXJ0LCB1NjQgZW5kLCBjb25zdCBjaGFyICp0eXBlKTsKIGludCBmaXJtd2FyZV9tYXBfYWRkX2Vhcmx5KHU2NCBzdGFydCwgdTY0IGVuZCwgY29uc3QgY2hhciAqdHlwZSk7CitpbnQgZmlybXdhcmVfbWFwX2FkZF9ob3RwbHVnKHU2NCBzdGFydCwgdTY0IGVuZCwgY29uc3QgY2hhciAqdHlwZSk7CiAKICNlbHNlIC8qIENPTkZJR19GSVJNV0FSRV9NRU1NQVAgKi8KIAotc3RhdGljIGlubGluZSBpbnQgZmlybXdhcmVfbWFwX2FkZCh1NjQgc3RhcnQsIHU2NCBlbmQsIGNvbnN0IGNoYXIgKnR5cGUpCitzdGF0aWMgaW5saW5lIGludCBmaXJtd2FyZV9tYXBfYWRkX2Vhcmx5KHU2NCBzdGFydCwgdTY0IGVuZCwgY29uc3QgY2hhciAqdHlwZSkKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZmlybXdhcmVfbWFwX2FkZF9lYXJseSh1NjQgc3RhcnQsIHU2NCBlbmQsIGNvbnN0IGNoYXIgKnR5cGUpCitzdGF0aWMgaW5saW5lIGludCBmaXJtd2FyZV9tYXBfYWRkX2hvdHBsdWcodTY0IHN0YXJ0LCB1NjQgZW5kLCBjb25zdCBjaGFyICp0eXBlKQogewogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IGViYjFjZDUuLjEwYjhkZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTYwLDI0ICs2MCwyNCBAQAogICovCiAKIC8qIGZpbGUgaXMgb3BlbiBmb3IgcmVhZGluZyAqLwotI2RlZmluZSBGTU9ERV9SRUFECQkoKF9fZm9yY2UgZm1vZGVfdCkxKQorI2RlZmluZSBGTU9ERV9SRUFECQkoKF9fZm9yY2UgZm1vZGVfdCkweDEpCiAvKiBmaWxlIGlzIG9wZW4gZm9yIHdyaXRpbmcgKi8KLSNkZWZpbmUgRk1PREVfV1JJVEUJCSgoX19mb3JjZSBmbW9kZV90KTIpCisjZGVmaW5lIEZNT0RFX1dSSVRFCQkoKF9fZm9yY2UgZm1vZGVfdCkweDIpCiAvKiBmaWxlIGlzIHNlZWthYmxlICovCi0jZGVmaW5lIEZNT0RFX0xTRUVLCQkoKF9fZm9yY2UgZm1vZGVfdCk0KQorI2RlZmluZSBGTU9ERV9MU0VFSwkJKChfX2ZvcmNlIGZtb2RlX3QpMHg0KQogLyogZmlsZSBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgcHJlYWQgKi8KLSNkZWZpbmUgRk1PREVfUFJFQUQJCSgoX19mb3JjZSBmbW9kZV90KTgpCisjZGVmaW5lIEZNT0RFX1BSRUFECQkoKF9fZm9yY2UgZm1vZGVfdCkweDgpCiAvKiBmaWxlIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyBwd3JpdGUgKi8KLSNkZWZpbmUgRk1PREVfUFdSSVRFCQkoKF9fZm9yY2UgZm1vZGVfdCkxNikKKyNkZWZpbmUgRk1PREVfUFdSSVRFCQkoKF9fZm9yY2UgZm1vZGVfdCkweDEwKQogLyogRmlsZSBpcyBvcGVuZWQgZm9yIGV4ZWN1dGlvbiB3aXRoIHN5c19leGVjdmUgLyBzeXNfdXNlbGliICovCi0jZGVmaW5lIEZNT0RFX0VYRUMJCSgoX19mb3JjZSBmbW9kZV90KTMyKQorI2RlZmluZSBGTU9ERV9FWEVDCQkoKF9fZm9yY2UgZm1vZGVfdCkweDIwKQogLyogRmlsZSBpcyBvcGVuZWQgd2l0aCBPX05ERUxBWSAob25seSBzZXQgZm9yIGJsb2NrIGRldmljZXMpICovCi0jZGVmaW5lIEZNT0RFX05ERUxBWQkJKChfX2ZvcmNlIGZtb2RlX3QpNjQpCisjZGVmaW5lIEZNT0RFX05ERUxBWQkJKChfX2ZvcmNlIGZtb2RlX3QpMHg0MCkKIC8qIEZpbGUgaXMgb3BlbmVkIHdpdGggT19FWENMIChvbmx5IHNldCBmb3IgYmxvY2sgZGV2aWNlcykgKi8KLSNkZWZpbmUgRk1PREVfRVhDTAkJKChfX2ZvcmNlIGZtb2RlX3QpMTI4KQorI2RlZmluZSBGTU9ERV9FWENMCQkoKF9fZm9yY2UgZm1vZGVfdCkweDgwKQogLyogRmlsZSBpcyBvcGVuZWQgdXNpbmcgb3BlbiguLiwgMywgLi4pIGFuZCBpcyB3cml0ZWFibGUgb25seSBmb3IgaW9jdGxzCiAgICAoc3BlY2lhbHkgaGFjayBmb3IgZmxvcHB5LmMpICovCi0jZGVmaW5lIEZNT0RFX1dSSVRFX0lPQ1RMCSgoX19mb3JjZSBmbW9kZV90KTI1NikKKyNkZWZpbmUgRk1PREVfV1JJVEVfSU9DVEwJKChfX2ZvcmNlIGZtb2RlX3QpMHgxMDApCiAKIC8qCiAgKiBEb24ndCB1cGRhdGUgY3RpbWUgYW5kIG10aW1lLgpAQCAtODUsNyArODUsMTAgQEAKICAqIEN1cnJlbnRseSBhIHNwZWNpYWwgaGFjayBmb3IgdGhlIFhGUyBvcGVuX2J5X2hhbmRsZSBpb2N0bCwgYnV0IHdlJ2xsCiAgKiBob3BlZnVsbHkgZ3JhZHVhdGUgaXQgdG8gYSBwcm9wZXIgT19DTVRJTUUgZmxhZyBzdXBwb3J0ZWQgYnkgb3BlbigyKSBzb29uLgogICovCi0jZGVmaW5lIEZNT0RFX05PQ01USU1FCQkoKF9fZm9yY2UgZm1vZGVfdCkyMDQ4KQorI2RlZmluZSBGTU9ERV9OT0NNVElNRQkJKChfX2ZvcmNlIGZtb2RlX3QpMHg4MDApCisKKy8qIEV4cGVjdCByYW5kb20gYWNjZXNzIHBhdHRlcm4gKi8KKyNkZWZpbmUgRk1PREVfUkFORE9NCQkoKF9fZm9yY2UgZm1vZGVfdCkweDEwMDApCiAKIC8qCiAgKiBUaGUgYmVsb3cgYXJlIHRoZSB2YXJpb3VzIHJlYWQgYW5kIHdyaXRlIHR5cGVzIHRoYXQgd2Ugc3VwcG9ydC4gU29tZSBvZgpAQCAtMTMwNSw2ICsxMzA4LDggQEAKICNkZWZpbmUgTU5UX0ZPUkNFCTB4MDAwMDAwMDEJLyogQXR0ZW1wdCB0byBmb3JjaWJpbHkgdW1vdW50ICovCiAjZGVmaW5lIE1OVF9ERVRBQ0gJMHgwMDAwMDAwMgkvKiBKdXN0IGRldGFjaCBmcm9tIHRoZSB0cmVlICovCiAjZGVmaW5lIE1OVF9FWFBJUkUJMHgwMDAwMDAwNAkvKiBNYXJrIGZvciBleHBpcnkgKi8KKyNkZWZpbmUgVU1PVU5UX05PRk9MTE9XCTB4MDAwMDAwMDgJLyogRG9uJ3QgZm9sbG93IHN5bWxpbmsgb24gdW1vdW50ICovCisjZGVmaW5lIFVNT1VOVF9VTlVTRUQJMHg4MDAwMDAwMAkvKiBGbGFnIGd1YXJhbnRlZWQgdG8gYmUgdW51c2VkICovCiAKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHN1cGVyX2Jsb2NrczsKIGV4dGVybiBzcGlubG9ja190IHNiX2xvY2s7CkBAIC0xMzE0LDkgKzEzMTksOSBAQAogc3RydWN0IHN1cGVyX2Jsb2NrIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkCXNfbGlzdDsJCS8qIEtlZXAgdGhpcyBmaXJzdCAqLwogCWRldl90CQkJc19kZXY7CQkvKiBzZWFyY2ggaW5kZXg7IF9ub3RfIGtkZXZfdCAqLwotCXVuc2lnbmVkIGxvbmcJCXNfYmxvY2tzaXplOwotCXVuc2lnbmVkIGNoYXIJCXNfYmxvY2tzaXplX2JpdHM7CiAJdW5zaWduZWQgY2hhcgkJc19kaXJ0OworCXVuc2lnbmVkIGNoYXIJCXNfYmxvY2tzaXplX2JpdHM7CisJdW5zaWduZWQgbG9uZwkJc19ibG9ja3NpemU7CiAJbG9mZl90CQkJc19tYXhieXRlczsJLyogTWF4IGZpbGUgc2l6ZSAqLwogCXN0cnVjdCBmaWxlX3N5c3RlbV90eXBlCSpzX3R5cGU7CiAJY29uc3Qgc3RydWN0IHN1cGVyX29wZXJhdGlvbnMJKnNfb3A7CkBAIC0xMzU3LDE2ICsxMzYyLDE2IEBACiAJdm9pZCAJCQkqc19mc19pbmZvOwkvKiBGaWxlc3lzdGVtIHByaXZhdGUgaW5mbyAqLwogCWZtb2RlX3QJCQlzX21vZGU7CiAKKwkvKiBHcmFudWxhcml0eSBvZiBjL20vYXRpbWUgaW4gbnMuCisJICAgQ2Fubm90IGJlIHdvcnNlIHRoYW4gYSBzZWNvbmQgKi8KKwl1MzIJCSAgIHNfdGltZV9ncmFuOworCiAJLyoKIAkgKiBUaGUgbmV4dCBmaWVsZCBpcyBmb3IgVkZTICpvbmx5Ki4gTm8gZmlsZXN5c3RlbXMgaGF2ZSBhbnkgYnVzaW5lc3MKIAkgKiBldmVuIGxvb2tpbmcgYXQgaXQuIFlvdSBoYWQgYmVlbiB3YXJuZWQuCiAJICovCiAJc3RydWN0IG11dGV4IHNfdmZzX3JlbmFtZV9tdXRleDsJLyogS2x1ZGdlICovCiAKLQkvKiBHcmFudWxhcml0eSBvZiBjL20vYXRpbWUgaW4gbnMuCi0JICAgQ2Fubm90IGJlIHdvcnNlIHRoYW4gYSBzZWNvbmQgKi8KLQl1MzIJCSAgIHNfdGltZV9ncmFuOwotCiAJLyoKIAkgKiBGaWxlc3lzdGVtIHN1YnR5cGUuICBJZiBub24tZW1wdHkgdGhlIGZpbGVzeXN0ZW0gdHlwZSBmaWVsZAogCSAqIGluIC9wcm9jL21vdW50cyB3aWxsIGJlICJ0eXBlLnN1YnR5cGUiCkBAIC0xNTU1LDcgKzE1NjAsNyBAQAogCXZvaWQgKCpkZXN0cm95X2lub2RlKShzdHJ1Y3QgaW5vZGUgKik7CiAKICAgIAl2b2lkICgqZGlydHlfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7Ci0JaW50ICgqd3JpdGVfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKKwlpbnQgKCp3cml0ZV9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyk7CiAJdm9pZCAoKmRyb3BfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7CiAJdm9pZCAoKmRlbGV0ZV9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKIAl2b2lkICgqcHV0X3N1cGVyKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOwpAQCAtMTc5NCw3ICsxNzk5LDggQEAKIGV4dGVybiBsb25nIGRvX21vdW50KGNoYXIgKiwgY2hhciAqLCBjaGFyICosIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7CiBleHRlcm4gc3RydWN0IHZmc21vdW50ICpjb2xsZWN0X21vdW50cyhzdHJ1Y3QgcGF0aCAqKTsKIGV4dGVybiB2b2lkIGRyb3BfY29sbGVjdGVkX21vdW50cyhzdHJ1Y3QgdmZzbW91bnQgKik7Ci0KK2V4dGVybiBpbnQgaXRlcmF0ZV9tb3VudHMoaW50ICgqKShzdHJ1Y3QgdmZzbW91bnQgKiwgdm9pZCAqKSwgdm9pZCAqLAorCQkJICBzdHJ1Y3QgdmZzbW91bnQgKik7CiBleHRlcm4gaW50IHZmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3Qga3N0YXRmcyAqKTsKIAogZXh0ZXJuIGludCBjdXJyZW50X3VtYXNrKHZvaWQpOwpAQCAtMjA1OCwxMiArMjA2NCw2IEBACiB1bnNpZ25lZCBsb25nIGludmFsaWRhdGVfbWFwcGluZ19wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQkJcGdvZmZfdCBzdGFydCwgcGdvZmZfdCBlbmQpOwogCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgX19kZXByZWNhdGVkCi1pbnZhbGlkYXRlX2lub2RlX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKQotewotCXJldHVybiBpbnZhbGlkYXRlX21hcHBpbmdfcGFnZXMobWFwcGluZywgMCwgfjBVTCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlX3JlbW90ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpIHx8IFNfSVNESVIoaW5vZGUtPmlfbW9kZSkgfHwKQEAgLTIxMzIsNiArMjEzMiw3IEBACiAgCiAvKiBmcy9kY2FjaGUuYyAtLSBnZW5lcmljIGZzIHN1cHBvcnQgZnVuY3Rpb25zICovCiBleHRlcm4gaW50IGlzX3N1YmRpcihzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBkZW50cnkgKik7CitleHRlcm4gaW50IHBhdGhfaXNfdW5kZXIoc3RydWN0IHBhdGggKiwgc3RydWN0IHBhdGggKik7CiBleHRlcm4gaW5vX3QgZmluZF9pbm9kZV9udW1iZXIoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqKTsKIAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgpAQCAtMjM0MCw4ICsyMzQxLDYgQEAKIGV4dGVybiBpbnQgc2ltcGxlX3N5bmNfZmlsZShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CiBleHRlcm4gaW50IHNpbXBsZV9lbXB0eShzdHJ1Y3QgZGVudHJ5ICopOwogZXh0ZXJuIGludCBzaW1wbGVfcmVhZHBhZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlKTsKLWV4dGVybiBpbnQgc2ltcGxlX3ByZXBhcmVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlLAotCQkJdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCB0byk7CiBleHRlcm4gaW50IHNpbXBsZV93cml0ZV9iZWdpbihzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQlsb2ZmX3QgcG9zLCB1bnNpZ25lZCBsZW4sIHVuc2lnbmVkIGZsYWdzLAogCQkJc3RydWN0IHBhZ2UgKipwYWdlcCwgdm9pZCAqKmZzZGF0YSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmggYi9pbmNsdWRlL2xpbnV4L2Zzbm90aWZ5LmgKaW5kZXggOTM2ZjlhYS4uZGY4ZmQ5YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mc25vdGlmeS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnNub3RpZnkuaApAQCAtNjUsNyArNjUsNyBAQAogICogZnNub3RpZnlfbW92ZSAtIGZpbGUgb2xkX25hbWUgYXQgb2xkX2RpciB3YXMgbW92ZWQgdG8gbmV3X25hbWUgYXQgbmV3X2RpcgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZnNub3RpZnlfbW92ZShzdHJ1Y3QgaW5vZGUgKm9sZF9kaXIsIHN0cnVjdCBpbm9kZSAqbmV3X2RpciwKLQkJCQkgY29uc3QgY2hhciAqb2xkX25hbWUsIGNvbnN0IGNoYXIgKm5ld19uYW1lLAorCQkJCSBjb25zdCBjaGFyICpvbGRfbmFtZSwKIAkJCQkgaW50IGlzZGlyLCBzdHJ1Y3QgaW5vZGUgKnRhcmdldCwgc3RydWN0IGRlbnRyeSAqbW92ZWQpCiB7CiAJc3RydWN0IGlub2RlICpzb3VyY2UgPSBtb3ZlZC0+ZF9pbm9kZTsKQEAgLTczLDYgKzczLDcgQEAKIAl1MzIgZnNfY29va2llID0gZnNub3RpZnlfZ2V0X2Nvb2tpZSgpOwogCV9fdTMyIG9sZF9kaXJfbWFzayA9IChGU19FVkVOVF9PTl9DSElMRCB8IEZTX01PVkVEX0ZST00pOwogCV9fdTMyIG5ld19kaXJfbWFzayA9IChGU19FVkVOVF9PTl9DSElMRCB8IEZTX01PVkVEX1RPKTsKKwljb25zdCBjaGFyICpuZXdfbmFtZSA9IG1vdmVkLT5kX25hbWUubmFtZTsKIAogCWlmIChvbGRfZGlyID09IG5ld19kaXIpCiAJCW9sZF9kaXJfbWFzayB8PSBGU19ETl9SRU5BTUU7CkBAIC0xMDMsNyArMTA0LDcgQEAKIAkJaW5vdGlmeV9pbm9kZV9xdWV1ZV9ldmVudChzb3VyY2UsIElOX01PVkVfU0VMRiwgMCwgTlVMTCwgTlVMTCk7CiAJCWZzbm90aWZ5KHNvdXJjZSwgRlNfTU9WRV9TRUxGLCBtb3ZlZC0+ZF9pbm9kZSwgRlNOT1RJRllfRVZFTlRfSU5PREUsIE5VTEwsIDApOwogCX0KLQlhdWRpdF9pbm9kZV9jaGlsZChuZXdfbmFtZSwgbW92ZWQsIG5ld19kaXIpOworCWF1ZGl0X2lub2RlX2NoaWxkKG1vdmVkLCBuZXdfZGlyKTsKIH0KIAogLyoKQEAgLTE0Niw3ICsxNDcsNyBAQAogewogCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoaW5vZGUsIElOX0NSRUFURSwgMCwgZGVudHJ5LT5kX25hbWUubmFtZSwKIAkJCQkgIGRlbnRyeS0+ZF9pbm9kZSk7Ci0JYXVkaXRfaW5vZGVfY2hpbGQoZGVudHJ5LT5kX25hbWUubmFtZSwgZGVudHJ5LCBpbm9kZSk7CisJYXVkaXRfaW5vZGVfY2hpbGQoZGVudHJ5LCBpbm9kZSk7CiAKIAlmc25vdGlmeShpbm9kZSwgRlNfQ1JFQVRFLCBkZW50cnktPmRfaW5vZGUsIEZTTk9USUZZX0VWRU5UX0lOT0RFLCBkZW50cnktPmRfbmFtZS5uYW1lLCAwKTsKIH0KQEAgLTE2MSw3ICsxNjIsNyBAQAogCWlub3RpZnlfaW5vZGVfcXVldWVfZXZlbnQoZGlyLCBJTl9DUkVBVEUsIDAsIG5ld19kZW50cnktPmRfbmFtZS5uYW1lLAogCQkJCSAgaW5vZGUpOwogCWZzbm90aWZ5X2xpbmtfY291bnQoaW5vZGUpOwotCWF1ZGl0X2lub2RlX2NoaWxkKG5ld19kZW50cnktPmRfbmFtZS5uYW1lLCBuZXdfZGVudHJ5LCBkaXIpOworCWF1ZGl0X2lub2RlX2NoaWxkKG5ld19kZW50cnksIGRpcik7CiAKIAlmc25vdGlmeShkaXIsIEZTX0NSRUFURSwgaW5vZGUsIEZTTk9USUZZX0VWRU5UX0lOT0RFLCBuZXdfZGVudHJ5LT5kX25hbWUubmFtZSwgMCk7CiB9CkBAIC0xNzUsNyArMTc2LDcgQEAKIAlzdHJ1Y3QgaW5vZGUgKmRfaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAKIAlpbm90aWZ5X2lub2RlX3F1ZXVlX2V2ZW50KGlub2RlLCBtYXNrLCAwLCBkZW50cnktPmRfbmFtZS5uYW1lLCBkX2lub2RlKTsKLQlhdWRpdF9pbm9kZV9jaGlsZChkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnksIGlub2RlKTsKKwlhdWRpdF9pbm9kZV9jaGlsZChkZW50cnksIGlub2RlKTsKIAogCWZzbm90aWZ5KGlub2RlLCBtYXNrLCBkX2lub2RlLCBGU05PVElGWV9FVkVOVF9JTk9ERSwgZGVudHJ5LT5kX25hbWUubmFtZSwgMCk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmggYi9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKaW5kZXggOTcxNzA4MS4uNTZiNTA1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZW5oZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaApAQCAtMTAxLDcgKzEwMSw3IEBACiAJdW5zaWduZWQgbG9uZyBzdGFtcDsKIAlpbnQgaW5fZmxpZ2h0WzJdOwogI2lmZGVmCUNPTkZJR19TTVAKLQlzdHJ1Y3QgZGlza19zdGF0cyAqZGtzdGF0czsKKwlzdHJ1Y3QgZGlza19zdGF0cyBfX3BlcmNwdSAqZGtzdGF0czsKICNlbHNlCiAJc3RydWN0IGRpc2tfc3RhdHMgZGtzdGF0czsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKaW5kZXggNTU3YmRhZC4uNGM2ZDQxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dmcC5oCkBAIC0zMCw3ICszMCw4IEBACiAgKiBfbWlnaHRfIGZhaWwuICBUaGlzIGRlcGVuZHMgdXBvbiB0aGUgcGFydGljdWxhciBWTSBpbXBsZW1lbnRhdGlvbi4KICAqCiAgKiBfX0dGUF9OT0ZBSUw6IFRoZSBWTSBpbXBsZW1lbnRhdGlvbiBfbXVzdF8gcmV0cnkgaW5maW5pdGVseTogdGhlIGNhbGxlcgotICogY2Fubm90IGhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmVzLgorICogY2Fubm90IGhhbmRsZSBhbGxvY2F0aW9uIGZhaWx1cmVzLiAgVGhpcyBtb2RpZmllciBpcyBkZXByZWNhdGVkIGFuZCBubyBuZXcKKyAqIHVzZXJzIHNob3VsZCBiZSBhZGRlZC4KICAqCiAgKiBfX0dGUF9OT1JFVFJZOiBUaGUgVk0gaW1wbGVtZW50YXRpb24gbXVzdCBub3QgcmV0cnkgaW5kZWZpbml0ZWx5LgogICoKQEAgLTgzLDYgKzg0LDcgQEAKICNkZWZpbmUgR0ZQX0hJR0hVU0VSX01PVkFCTEUJKF9fR0ZQX1dBSVQgfCBfX0dGUF9JTyB8IF9fR0ZQX0ZTIHwgXAogCQkJCSBfX0dGUF9IQVJEV0FMTCB8IF9fR0ZQX0hJR0hNRU0gfCBcCiAJCQkJIF9fR0ZQX01PVkFCTEUpCisjZGVmaW5lIEdGUF9JT0ZTCShfX0dGUF9JTyB8IF9fR0ZQX0ZTKQogCiAjaWZkZWYgQ09ORklHX05VTUEKICNkZWZpbmUgR0ZQX1RISVNOT0RFCShfX0dGUF9USElTTk9ERSB8IF9fR0ZQX05PV0FSTiB8IF9fR0ZQX05PUkVUUlkpCkBAIC0zMjUsNyArMzI3LDcgQEAKIAogZXh0ZXJuIHZvaWQgX19mcmVlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpOwogZXh0ZXJuIHZvaWQgZnJlZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBvcmRlcik7Ci1leHRlcm4gdm9pZCBmcmVlX2hvdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKTsKK2V4dGVybiB2b2lkIGZyZWVfaG90X2NvbGRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IGNvbGQpOwogCiAjZGVmaW5lIF9fZnJlZV9wYWdlKHBhZ2UpIF9fZnJlZV9wYWdlcygocGFnZSksIDApCiAjZGVmaW5lIGZyZWVfcGFnZShhZGRyKSBmcmVlX3BhZ2VzKChhZGRyKSwwKQpAQCAtMzM3LDkgKzMzOSw3IEBACiAKIGV4dGVybiBnZnBfdCBnZnBfYWxsb3dlZF9tYXNrOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2dmcF9hbGxvd2VkX21hc2soZ2ZwX3QgbWFzaykKLXsKLQlnZnBfYWxsb3dlZF9tYXNrID0gbWFzazsKLX0KK2V4dGVybiB2b2lkIHNldF9nZnBfYWxsb3dlZF9tYXNrKGdmcF90IG1hc2spOworZXh0ZXJuIGdmcF90IGNsZWFyX2dmcF9hbGxvd2VkX21hc2soZ2ZwX3QgbWFzayk7CiAKICNlbmRpZiAvKiBfX0xJTlVYX0dGUF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dmczJfb25kaXNrLmggYi9pbmNsdWRlL2xpbnV4L2dmczJfb25kaXNrLmgKaW5kZXggODFmOTBhNS4uNGY0NDYyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnMyX29uZGlzay5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2ZzMl9vbmRpc2suaApAQCAtMTgwLDMzICsxODAsNiBAQAogfTsKIAogLyoKLSAqIHF1b3RhIGxpbmtlZCBsaXN0OiB1c2VyIHF1b3RhcyBhbmQgZ3JvdXAgcXVvdGFzIGZvcm0gdHdvIHNlcGFyYXRlIAotICogc2luZ2x5IGxpbmtlZCBsaXN0cy4gbGxfbmV4dCBzdG9yZXMgdWlkcyBvciBnaWRzIG9mIG5leHQgcXVvdGFzIGluIHRoZSAKLSAqIGxpbmtlZCBsaXN0LgotCi1HaXZlbiB0aGUgdWlkL2dpZCwgaG93IHRvIGNhbGN1bGF0ZSB0aGUgcXVvdGEgZmlsZSBvZmZzZXRzIGZvciB0aGUgY29ycmVzcG9uZGluZwotZ2ZzMl9xdW90YSBzdHJ1Y3R1cmVzIG9uIGRpc2s6Ci0KLWZvciB1c2VyIHF1b3RhcywgZ2l2ZW4gdWlkLAotb2Zmc2V0ID0gdWlkICogc2l6ZW9mKHN0cnVjdCBnZnMyX3F1b3RhKTsKLQotZm9yIGdyb3VwIHF1b3RhcywgZ2l2ZW4gZ2lkLAotb2Zmc2V0ID0gKGdpZCAqIHNpemVvZihzdHJ1Y3QgZ2ZzMl9xdW90YSkpICsgc2l6ZW9mKHN0cnVjdCBnZnMyX3F1b3RhKTsKLQotCi0gIHVpZDowICAgZ2lkOjAgICAgICAgdWlkOjEyICAgZ2lkOjEyICAgICAgdWlkOjE3ICAgZ2lkOjE3ICAgICB1aWQ6NTE0MiBnaWQ6NTE0MgotKy0tLS0tLS0rLS0tLS0tLSsgICAgKy0tLS0tLS0rLS0tLS0tLSsgICAgKy0tLS0tLS0rLSAtIC0gLSsgICAgKy0gLSAtIC0rLS0tLS0tLSsKLXwgdmFsaWQgfCB2YWxpZCB8IDo6IHwgdmFsaWQgfCB2YWxpZCB8IDo6IHwgdmFsaWQgfCBpbnZhbCB8IDo6IHwgaW52YWwgfCB2YWxpZCB8Ci0rLS0tLS0tLSstLS0tLS0tKyAgICArLS0tLS0tLSstLS0tLS0tKyAgICArLS0tLS0tLSstIC0gLSAtKyAgICArLSAtIC0gLSstLS0tLS0tKwotbmV4dDoxMiAgIG5leHQ6MTIgICAgbmV4dDoxNyBuZXh0OjUxNDIgICAgbmV4dDpOVUxMICAgICAgICAgICAgICAgICAgICBuZXh0Ok5VTEwKLSAgICB8ICAgICAgIHwgICAgICAgICAgICB8ICAgICAgIHwgICAgICAgICAgICB8PC0tIHVzZXIgcXVvdGEgbGlzdCAgICAgICAgIHwKLSAgICAgXF9fX19fX3xfX19fX19fX19fXy8gXF9fX19fX3xfX19fX19fX19fXy8gICAgICAgICBncm91cCBxdW90YSBsaXN0IC0tPnwKLSAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAgICAgICAgICAgICBcX19fX19fX19fX19fX19fX19fLyBcX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLwotCi0qLwotCi0vKgogICogcXVvdGEgc3RydWN0dXJlCiAgKi8KIApAQCAtMjE0LDggKzE4Nyw3IEBACiAJX19iZTY0IHF1X2xpbWl0OwogCV9fYmU2NCBxdV93YXJuOwogCV9fYmU2NCBxdV92YWx1ZTsKLQlfX2JlMzIgcXVfbGxfbmV4dDsgLyogbG9jYXRpb24gb2YgbmV4dCBxdW90YSBpbiBsaXN0ICovCi0JX191OCBxdV9yZXNlcnZlZFs2MF07CisJX191OCBxdV9yZXNlcnZlZFs2NF07CiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oaWwuaCBiL2luY2x1ZGUvbGludXgvaGlsLmgKaW5kZXggMTMzNTJkNy4uNTIzNzg1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oaWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hpbC5oCkBAIC0xNjgsMTQgKzE2OCwxNCBAQAogCUhJTF9DTURfUFI2CT0gMHg0NSwJLyogUHJvbXB0NiAqLwogCUhJTF9DTURfUFI3CT0gMHg0NiwJLyogUHJvbXB0NyAqLwogCUhJTF9DTURfUFJNCT0gMHg0NywJLyogUHJvbXB0IChHZW5lcmFsIFB1cnBvc2UpICovCi0JSElMX0NNRF9BSzEJPSAweDQ4LAkvKiBBY2tub3dsZWdlMSAqLyAgCi0JSElMX0NNRF9BSzIJPSAweDQ5LAkvKiBBY2tub3dsZWdlMiAqLwotCUhJTF9DTURfQUszCT0gMHg0YSwJLyogQWNrbm93bGVnZTMgKi8KLQlISUxfQ01EX0FLNAk9IDB4NGIsCS8qIEFja25vd2xlZ2U0ICovCi0JSElMX0NNRF9BSzUJPSAweDRjLAkvKiBBY2tub3dsZWdlNSAqLwotCUhJTF9DTURfQUs2CT0gMHg0ZCwJLyogQWNrbm93bGVnZTYgKi8KLQlISUxfQ01EX0FLNwk9IDB4NGUsCS8qIEFja25vd2xlZ2U3ICovCi0JSElMX0NNRF9BQ0sJPSAweDRmLAkvKiBBY2tub3dsZWdlIChHZW5lcmFsIFB1cnBvc2UpICovCisJSElMX0NNRF9BSzEJPSAweDQ4LAkvKiBBY2tub3dsZWRnZTEgKi8gIAorCUhJTF9DTURfQUsyCT0gMHg0OSwJLyogQWNrbm93bGVkZ2UyICovCisJSElMX0NNRF9BSzMJPSAweDRhLAkvKiBBY2tub3dsZWRnZTMgKi8KKwlISUxfQ01EX0FLNAk9IDB4NGIsCS8qIEFja25vd2xlZGdlNCAqLworCUhJTF9DTURfQUs1CT0gMHg0YywJLyogQWNrbm93bGVkZ2U1ICovCisJSElMX0NNRF9BSzYJPSAweDRkLAkvKiBBY2tub3dsZWRnZTYgKi8KKwlISUxfQ01EX0FLNwk9IDB4NGUsCS8qIEFja25vd2xlZGdlNyAqLworCUhJTF9DTURfQUNLCT0gMHg0ZiwJLyogQWNrbm93bGVkZ2UgKEdlbmVyYWwgUHVycG9zZSkgKi8KIAogCS8qIDB4NTAgdG8gMHg3OCByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAgKi8KIAkvKiAweDgwIHRvIDB4RUYgZGV2aWNlLXNwZWNpZmljIGNvbW1hbmRzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h0Y3BsZC5oIGIvaW5jbHVkZS9saW51eC9odGNwbGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjNmNmNiNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaHRjcGxkLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBfX0xJTlVYX0hUQ1BMRF9ICisjZGVmaW5lIF9fTElOVVhfSFRDUExEX0gKKworc3RydWN0IGh0Y3BsZF9jaGlwX3BsYXRmb3JtX2RhdGEgeworCXVuc2lnbmVkIGludCBhZGRyOworCXVuc2lnbmVkIGludCByZXNldDsKKwl1bnNpZ25lZCBpbnQgbnVtX2dwaW9zOworCXVuc2lnbmVkIGludCBncGlvX291dF9iYXNlOworCXVuc2lnbmVkIGludCBncGlvX2luX2Jhc2U7CisJdW5zaWduZWQgaW50IGlycV9iYXNlOworCXVuc2lnbmVkIGludCBudW1faXJxczsKK307CisKK3N0cnVjdCBodGNwbGRfY29yZV9wbGF0Zm9ybV9kYXRhIHsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICAgaW50X3Jlc2V0X2dwaW9faGk7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICAgIGludF9yZXNldF9ncGlvX2xvOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgICBpMmNfYWRhcHRlcl9pZDsKKworCXN0cnVjdCBodGNwbGRfY2hpcF9wbGF0Zm9ybV9kYXRhICAqY2hpcDsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgICAgbnVtX2NoaXA7Cit9OworCisjZW5kaWYgLyogX19MSU5VWF9IVENQTERfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1zbWJ1cy5oIGIvaW5jbHVkZS9saW51eC9pMmMtc21idXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2Y1N2E4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9pMmMtc21idXMuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogaTJjLXNtYnVzLmggLSBTTUJ1cyBleHRlbnNpb25zIHRvIHRoZSBJMkMgcHJvdG9jb2wKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfTElOVVhfSTJDX1NNQlVTX0gKKyNkZWZpbmUgX0xJTlVYX0kyQ19TTUJVU19ICisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworCisvKioKKyAqIGkyY19zbWJ1c19hbGVydF9zZXR1cCAtIHBsYXRmb3JtIGRhdGEgZm9yIHRoZSBzbWJ1c19hbGVydCBpMmMgY2xpZW50CisgKiBAYWxlcnRfZWRnZV90cmlnZ2VyZWQ6IHdoZXRoZXIgdGhlIGFsZXJ0IGludGVycnVwdCBpcyBlZGdlICgxKSBvciBsZXZlbCAoMCkKKyAqCQl0cmlnZ2VyZWQKKyAqIEBpcnE6IElSUSBudW1iZXIsIGlmIHRoZSBzbWJ1c19hbGVydCBkcml2ZXIgc2hvdWxkIHRha2UgY2FyZSBvZiBpbnRlcnJ1cHQKKyAqCQloYW5kbGluZworICoKKyAqIElmIGlycSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgc21idXNfYWxlcnQgZHJpdmVyIGRvZXNuJ3QgdGFrZSBjYXJlIG9mCisgKiBpbnRlcnJ1cHQgaGFuZGxpbmcuIEluIHRoYXQgY2FzZSBpdCBpcyB1cCB0byB0aGUgSTJDIGJ1cyBkcml2ZXIgdG8gZWl0aGVyCisgKiBoYW5kbGUgdGhlIGludGVycnVwdHMgb3IgdG8gcG9sbCBmb3IgYWxlcnRzLgorICoKKyAqIElmIGlycSBpcyBzcGVjaWZpZWQgdGhlbiBpdCBpdCBjcnVjaWFsIHRoYXQgYWxlcnRfZWRnZV90cmlnZ2VyZWQgaXMKKyAqIHByb3Blcmx5IHNldC4KKyAqLworc3RydWN0IGkyY19zbWJ1c19hbGVydF9zZXR1cCB7CisJdW5zaWduZWQgaW50CQlhbGVydF9lZGdlX3RyaWdnZXJlZDoxOworCWludAkJCWlycTsKK307CisKK3N0cnVjdCBpMmNfY2xpZW50ICppMmNfc2V0dXBfc21idXNfYWxlcnQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJCQkgc3RydWN0IGkyY19zbWJ1c19hbGVydF9zZXR1cCAqc2V0dXApOworaW50IGkyY19oYW5kbGVfc21idXNfYWxlcnQoc3RydWN0IGkyY19jbGllbnQgKmFyYSk7CisKKyNlbmRpZiAvKiBfTElOVVhfSTJDX1NNQlVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLmggYi9pbmNsdWRlL2xpbnV4L2kyYy5oCmluZGV4IDAyZmM2MTcuLjBhNWRhNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMuaApAQCAtNTMsNiArNTMsNyBAQAogICogb24gYSBidXMgKG9yIHJlYWQgZnJvbSB0aGVtKS4gQXBhcnQgZnJvbSB0d28gYmFzaWMgdHJhbnNmZXIgZnVuY3Rpb25zIHRvCiAgKiB0cmFuc21pdCBvbmUgbWVzc2FnZSBhdCBhIHRpbWUsIGEgbW9yZSBjb21wbGV4IHZlcnNpb24gY2FuIGJlIHVzZWQgdG8KICAqIHRyYW5zbWl0IGFuIGFyYml0cmFyeSBudW1iZXIgb2YgbWVzc2FnZXMgd2l0aG91dCBpbnRlcnJ1cHRpb24uCisgKiBAY291bnQgbXVzdCBiZSBiZSBsZXNzIHRoYW4gNjRrIHNpbmNlIG1zZy5sZW4gaXMgdTE2LgogICovCiBleHRlcm4gaW50IGkyY19tYXN0ZXJfc2VuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBjaGFyICpidWYsCiAJCQkgICBpbnQgY291bnQpOwpAQCAtMTUyLDYgKzE1MywxMyBAQAogCWludCAoKnN1c3BlbmQpKHN0cnVjdCBpMmNfY2xpZW50ICosIHBtX21lc3NhZ2VfdCBtZXNnKTsKIAlpbnQgKCpyZXN1bWUpKHN0cnVjdCBpMmNfY2xpZW50ICopOwogCisJLyogQWxlcnQgY2FsbGJhY2ssIGZvciBleGFtcGxlIGZvciB0aGUgU01CdXMgYWxlcnQgcHJvdG9jb2wuCisJICogVGhlIGZvcm1hdCBhbmQgbWVhbmluZyBvZiB0aGUgZGF0YSB2YWx1ZSBkZXBlbmRzIG9uIHRoZSBwcm90b2NvbC4KKwkgKiBGb3IgdGhlIFNNQnVzIGFsZXJ0IHByb3RvY29sLCB0aGVyZSBpcyBhIHNpbmdsZSBiaXQgb2YgZGF0YSBwYXNzZWQKKwkgKiBhcyB0aGUgYWxlcnQgcmVzcG9uc2UncyBsb3cgYml0ICgiZXZlbnQgZmxhZyIpLgorCSAqLworCXZvaWQgKCphbGVydCkoc3RydWN0IGkyY19jbGllbnQgKiwgdW5zaWduZWQgaW50IGRhdGEpOworCiAJLyogYSBpb2N0bCBsaWtlIGNvbW1hbmQgdGhhdCBjYW4gYmUgdXNlZCB0byBwZXJmb3JtIHNwZWNpZmljIGZ1bmN0aW9ucwogCSAqIHdpdGggdGhlIGRldmljZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjL3BjYTk1M3guaCBiL2luY2x1ZGUvbGludXgvaTJjL3BjYTk1M3guaAppbmRleCA4MTczNmQ2Li5kNWM1YTYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy9wY2E5NTN4LmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMvcGNhOTUzeC5oCkBAIC0xLDMgKzEsOSBAQAorI2lmbmRlZiBfTElOVVhfUENBOTUzWF9ICisjZGVmaW5lIF9MSU5VWF9QQ0E5NTNYX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKIC8qIHBsYXRmb3JtIGRhdGEgZm9yIHRoZSBQQ0E5NTM5IDE2LWJpdCBJL08gZXhwYW5kZXIgZHJpdmVyICovCiAKIHN0cnVjdCBwY2E5NTN4X3BsYXRmb3JtX2RhdGEgewpAQCAtNyw2ICsxMyw5IEBACiAJLyogaW5pdGlhbCBwb2xhcml0eSBpbnZlcnNpb24gc2V0dGluZyAqLwogCXVpbnQxNl90CWludmVydDsKIAorCS8qIGludGVycnVwdCBiYXNlICovCisJaW50CQlpcnFfYmFzZTsKKwogCXZvaWQJCSpjb250ZXh0OwkvKiBwYXJhbSB0byBzZXR1cC90ZWFyZG93biAqLwogCiAJaW50CQkoKnNldHVwKShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LApAQCAtMTcsMyArMjYsNSBAQAogCQkJCXZvaWQgKmNvbnRleHQpOwogCWNoYXIJCSoqbmFtZXM7CiB9OworCisjZW5kaWYgLyogX0xJTlVYX1BDQTk1M1hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pMmMvdHdsLmggYi9pbmNsdWRlL2xpbnV4L2kyYy90d2wuaAppbmRleCA3ODk3ZjMwLi5mYjY3ODRlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy90d2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy90d2wuaApAQCAtODAsNiArODAsMTEgQEAKICNkZWZpbmUgVFdMX01PRFVMRV9QTV9NQVNURVIJVFdMNDAzMF9NT0RVTEVfUE1fTUFTVEVSCiAjZGVmaW5lIFRXTF9NT0RVTEVfUE1fUkVDRUlWRVIJVFdMNDAzMF9NT0RVTEVfUE1fUkVDRUlWRVIKICNkZWZpbmUgVFdMX01PRFVMRV9SVEMJCVRXTDQwMzBfTU9EVUxFX1JUQworI2RlZmluZSBUV0xfTU9EVUxFX1BXTQkJVFdMNDAzMF9NT0RVTEVfUFdNMAorCisjZGVmaW5lIFRXTDYwMzBfTU9EVUxFX0lEMAkweDBECisjZGVmaW5lIFRXTDYwMzBfTU9EVUxFX0lEMQkweDBFCisjZGVmaW5lIFRXTDYwMzBfTU9EVUxFX0lEMgkweDBGCiAKICNkZWZpbmUgR1BJT19JTlRSX09GRlNFVAkwCiAjZGVmaW5lIEtFWVBBRF9JTlRSX09GRlNFVAkxCkBAIC0yMzksNiArMjQ0LDIxIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKKy8qSW50ZXJmYWNlIEJpdCBSZWdpc3RlciAoSU5UQlIpIG9mZnNldHMKKyAqKFVzZSBUV0xfNDAzMF9NT0RVTEVfSU5UQlIpCisgKi8KKworI2RlZmluZSBSRUdfR1BQVVBEQ1RSMQkJCTB4MEYKKworLypJMkMxIGFuZCBJMkM0KFNSKSBTREEvU0NMIHB1bGwtdXAgY29udHJvbCBiaXRzICovCisKKyNkZWZpbmUgSTJDX1NDTF9DVFJMX1BVCQkJQklUKDApCisjZGVmaW5lIEkyQ19TREFfQ1RSTF9QVQkJCUJJVCgyKQorI2RlZmluZSBTUl9JMkNfU0NMX0NUUkxfUFUJCUJJVCg0KQorI2RlZmluZSBTUl9JMkNfU0RBX0NUUkxfUFUJCUJJVCg2KQorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKgogICogS2V5cGFkIHJlZ2lzdGVyIG9mZnNldHMgKHVzZSBUV0w0MDMwX01PRFVMRV9LRVlQQUQpCiAgKiAuLi4gU0lIL2ludGVycnVwdCBvbmx5CkBAIC01MzAsNiArNTUwLDcgQEAKIH07CiAKIGV4dGVybiB2b2lkIHR3bDQwMzBfcG93ZXJfaW5pdChzdHJ1Y3QgdHdsNDAzMF9wb3dlcl9kYXRhICp0cml0b24yX3NjcmlwdHMpOworZXh0ZXJuIGludCB0d2w0MDMwX3JlbW92ZV9zY3JpcHQodTggZmxhZ3MpOwogCiBzdHJ1Y3QgdHdsNDAzMF9jb2RlY19hdWRpb19kYXRhIHsKIAl1bnNpZ25lZCBpbnQJYXVkaW9fbWNsazsKQEAgLTYwNSwxMiArNjI2LDcgQEAKICNkZWZpbmUgVFdMNDAzMF9WQVVYM19ERVZfR1JQCQkweDFGCiAjZGVmaW5lIFRXTDQwMzBfVkFVWDNfREVESUNBVEVECQkweDIyCiAKLSNpZiBkZWZpbmVkKENPTkZJR19UV0w0MDMwX0JDSV9CQVRURVJZKSB8fCBcCi0JZGVmaW5lZChDT05GSUdfVFdMNDAzMF9CQ0lfQkFUVEVSWV9NT0RVTEUpCi0JZXh0ZXJuIGludCB0d2w0MDMwY2hhcmdlcl91c2JfZW4oaW50IGVuYWJsZSk7Ci0jZWxzZQotCXN0YXRpYyBpbmxpbmUgaW50IHR3bDQwMzBjaGFyZ2VyX3VzYl9lbihpbnQgZW5hYmxlKSB7IHJldHVybiAwOyB9Ci0jZW5kaWYKK3N0YXRpYyBpbmxpbmUgaW50IHR3bDQwMzBjaGFyZ2VyX3VzYl9lbihpbnQgZW5hYmxlKSB7IHJldHVybiAwOyB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWNtcHY2LmggYi9pbmNsdWRlL2xpbnV4L2ljbXB2Ni5oCmluZGV4IGMwZDgzNTcuLjRjNGM3NGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWNtcHY2LmgKKysrIGIvaW5jbHVkZS9saW51eC9pY21wdjYuaApAQCAtMTc0LDggKzE3NCw3IEBACiAKIGV4dGVybiB2b2lkCQkJCWljbXB2Nl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJCQkgICAgdTggdHlwZSwgdTggY29kZSwKLQkJCQkJCSAgICBfX3UzMiBpbmZvLCAKLQkJCQkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwkJCQkJCSAgICBfX3UzMiBpbmZvKTsKIAogZXh0ZXJuIGludAkJCQlpY21wdjZfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQJCQkJaWNtcHY2X2Vycl9jb252ZXJ0KHU4IHR5cGUsIHU4IGNvZGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lkZS5oIGIvaW5jbHVkZS9saW51eC9pZGUuaAppbmRleCAwZWM2MTI5Li45N2U2YWI0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lkZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWRlLmgKQEAgLTUxNSw2ICs1MTUsOCBAQAogICAgICAgICB1OAlpbml0X3NwZWVkOwkvKiB0cmFuc2ZlciByYXRlIHNldCBhdCBib290ICovCiAgICAgICAgIHU4CWN1cnJlbnRfc3BlZWQ7CS8qIGN1cnJlbnQgdHJhbnNmZXIgcmF0ZSBzZXQgKi8KIAl1OAlkZXNpcmVkX3NwZWVkOwkvKiBkZXNpcmVkIHRyYW5zZmVyIHJhdGUgc2V0ICovCisJdTgJcGlvX21vZGU7CS8qIGZvciAtPnNldF9waW9fbW9kZSBfb25seV8gKi8KKwl1OAlkbWFfbW9kZTsJLyogZm9yIC0+ZG1hX3Bpb19tb2RlIF9vbmx5XyAqLwogICAgICAgICB1OAlkbjsJCS8qIG5vdyB3aWRlIHNwcmVhZCB1c2UgKi8KIAl1OAlhY291c3RpYzsJLyogYWNvdXN0aWMgbWFuYWdlbWVudCAqLwogCXU4CW1lZGlhOwkJLyogZGlzaywgY2Ryb20sIHRhcGUsIGZsb3BweSwgLi4uICovCkBAIC02MjIsOCArNjI0LDggQEAKICAqLwogc3RydWN0IGlkZV9wb3J0X29wcyB7CiAJdm9pZAkoKmluaXRfZGV2KShpZGVfZHJpdmVfdCAqKTsKLQl2b2lkCSgqc2V0X3Bpb19tb2RlKShpZGVfZHJpdmVfdCAqLCBjb25zdCB1OCk7Ci0Jdm9pZAkoKnNldF9kbWFfbW9kZSkoaWRlX2RyaXZlX3QgKiwgY29uc3QgdTgpOworCXZvaWQJKCpzZXRfcGlvX21vZGUpKHN0cnVjdCBod2lmX3MgKiwgaWRlX2RyaXZlX3QgKik7CisJdm9pZAkoKnNldF9kbWFfbW9kZSkoc3RydWN0IGh3aWZfcyAqLCBpZGVfZHJpdmVfdCAqKTsKIAlpbnQJKCpyZXNldF9wb2xsKShpZGVfZHJpdmVfdCAqKTsKIAl2b2lkCSgqcHJlX3Jlc2V0KShpZGVfZHJpdmVfdCAqKTsKIAl2b2lkCSgqcmVzZXRwcm9jKShpZGVfZHJpdmVfdCAqKTsKQEAgLTE0OTQsNyArMTQ5Niw2IEBACiAjaWZkZWYgQ09ORklHX0lERV9YRkVSX01PREUKIGludCBpZGVfc2Nhbl9waW9fYmxhY2tsaXN0KGNoYXIgKik7CiBjb25zdCBjaGFyICppZGVfeGZlcl92ZXJib3NlKHU4KTsKLXU4IGlkZV9nZXRfYmVzdF9waW9fbW9kZShpZGVfZHJpdmVfdCAqLCB1OCwgdTgpOwogaW50IGlkZV9waW9fbmVlZF9pb3JkeShpZGVfZHJpdmVfdCAqLCBjb25zdCB1OCk7CiBpbnQgaWRlX3NldF9waW9fbW9kZShpZGVfZHJpdmVfdCAqLCB1OCk7CiBpbnQgaWRlX3NldF9kbWFfbW9kZShpZGVfZHJpdmVfdCAqLCB1OCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oIGIvaW5jbHVkZS9saW51eC9pZWVlODAyMTEuaAppbmRleCAxNjNjODQwLi4xOTk4NDk1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2llZWU4MDIxMS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWVlZTgwMjExLmgKQEAgLTEyMCw2ICsxMjAsMjYgQEAKICNkZWZpbmUgSUVFRTgwMjExX1FPU19DVExfVElEX01BU0sJMHgwMDBGCiAjZGVmaW5lIElFRUU4MDIxMV9RT1NfQ1RMX1RBRzFEX01BU0sJMHgwMDA3CiAKKy8qIFUtQVBTRCBxdWV1ZSBmb3IgV01NIElFcyBzZW50IGJ5IEFQICovCisjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfQVBfUU9TSU5GT19VQVBTRAkoMTw8NykKKworLyogVS1BUFNEIHF1ZXVlcyBmb3IgV01NIElFcyBzZW50IGJ5IFNUQSAqLworI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX1ZPCSgxPDwwKQorI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX1ZJCSgxPDwxKQorI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX0JLCSgxPDwyKQorI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX0JFCSgxPDwzKQorI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX0FDX01BU0sJMHgwZgorCisvKiBVLUFQU0QgbWF4IFNQIGxlbmd0aCBmb3IgV01NIElFcyBzZW50IGJ5IFNUQSAqLworI2RlZmluZSBJRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX1NQX0FMTAkweDAwCisjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fU1BfMgkweDAxCisjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fU1BfNAkweDAyCisjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fU1BfNgkweDAzCisjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fU1BfTUFTSwkweDAzCisjZGVmaW5lIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fU1BfU0hJRlQJNQorCisjZGVmaW5lIElFRUU4MDIxMV9IVF9DVExfTEVOCQk0CisKIHN0cnVjdCBpZWVlODAyMTFfaGRyIHsKIAlfX2xlMTYgZnJhbWVfY29udHJvbDsKIAlfX2xlMTYgZHVyYXRpb25faWQ7CkBAIC0xMzAsNiArMTUwLDI1IEBACiAJdTggYWRkcjRbNl07CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgeworCV9fbGUxNiBmcmFtZV9jb250cm9sOworCV9fbGUxNiBkdXJhdGlvbl9pZDsKKwl1OCBhZGRyMVs2XTsKKwl1OCBhZGRyMls2XTsKKwl1OCBhZGRyM1s2XTsKKwlfX2xlMTYgc2VxX2N0cmw7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGllZWU4MDIxMV9xb3NfaGRyIHsKKwlfX2xlMTYgZnJhbWVfY29udHJvbDsKKwlfX2xlMTYgZHVyYXRpb25faWQ7CisJdTggYWRkcjFbNl07CisJdTggYWRkcjJbNl07CisJdTggYWRkcjNbNl07CisJX19sZTE2IHNlcV9jdHJsOworCV9fbGUxNiBxb3NfY3RybDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAvKioKICAqIGllZWU4MDIxMV9oYXNfdG9kcyAtIGNoZWNrIGlmIElFRUU4MDIxMV9GQ1RMX1RPRFMgaXMgc2V0CiAgKiBAZmM6IGZyYW1lIGNvbnRyb2wgYnl0ZXMgaW4gbGl0dGxlLWVuZGlhbiBieXRlb3JkZXIKQEAgLTcwNyw2ICs3NDYsMTAgQEAKIAkJCQkJdTggYWN0aW9uOwogCQkJCQl1OCB0cmFuc19pZFtXTEFOX1NBX1FVRVJZX1RSX0lEX0xFTl07CiAJCQkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgc2FfcXVlcnk7CisJCQkJc3RydWN0IHsKKwkJCQkJdTggYWN0aW9uOworCQkJCQl1OCBzbXBzX2NvbnRyb2w7CisJCQkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgaHRfc21wczsKIAkJCX0gdTsKIAkJfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYWN0aW9uOwogCX0gdTsKQEAgLTc3MSw3ICs4MTQsMTAgQEAKIC8qKgogICogc3RydWN0IGllZWU4MDIxMV9tY3NfaW5mbyAtIE1DUyBpbmZvcm1hdGlvbgogICogQHJ4X21hc2s6IFJYIG1hc2sKLSAqIEByeF9oaWdoZXN0OiBoaWdoZXN0IHN1cHBvcnRlZCBSWCByYXRlCisgKiBAcnhfaGlnaGVzdDogaGlnaGVzdCBzdXBwb3J0ZWQgUlggcmF0ZS4gSWYgc2V0IHJlcHJlc2VudHMKKyAqCXRoZSBoaWdoZXN0IHN1cHBvcnRlZCBSWCBkYXRhIHJhdGUgaW4gdW5pdHMgb2YgMSBNYnBzLgorICoJSWYgdGhpcyBmaWVsZCBpcyAwIHRoaXMgdmFsdWUgc2hvdWxkIG5vdCBiZSB1c2VkIHRvCisgKgljb25zaWRlciB0aGUgaGlnaGVzdCBSWCBkYXRhIHJhdGUgc3VwcG9ydGVkLgogICogQHR4X3BhcmFtczogVFggcGFyYW1ldGVycwogICovCiBzdHJ1Y3QgaWVlZTgwMjExX21jc19pbmZvIHsKQEAgLTgyNCw2ICs4NzAsNyBAQAogI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX0xEUENfQ09ESU5HCQkweDAwMDEKICNkZWZpbmUgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDAJMHgwMDAyCiAjZGVmaW5lIElFRUU4MDIxMV9IVF9DQVBfU01fUFMJCQkweDAwMEMKKyNkZWZpbmUJCUlFRUU4MDIxMV9IVF9DQVBfU01fUFNfU0hJRlQJMgogI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX0dSTl9GTEQJCTB4MDAxMAogI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX1NHSV8yMAkJCTB4MDAyMAogI2RlZmluZSBJRUVFODAyMTFfSFRfQ0FQX1NHSV80MAkJCTB4MDA0MApAQCAtODM5LDYgKzg4Niw3IEBACiAvKiA4MDIuMTFuIEhUIGNhcGFiaWxpdHkgQU1QRFUgc2V0dGluZ3MgKGZvciBhbXBkdV9wYXJhbXNfaW5mbykgKi8KICNkZWZpbmUgSUVFRTgwMjExX0hUX0FNUERVX1BBUk1fRkFDVE9SCQkweDAzCiAjZGVmaW5lIElFRUU4MDIxMV9IVF9BTVBEVV9QQVJNX0RFTlNJVFkJCTB4MUMKKyNkZWZpbmUJCUlFRUU4MDIxMV9IVF9BTVBEVV9QQVJNX0RFTlNJVFlfU0hJRlQJMgogCiAvKgogICogTWF4aW11bSBsZW5ndGggb2YgQU1QRFUgdGhhdCB0aGUgU1RBIGNhbiByZWNlaXZlLgpAQCAtOTIyLDEyICs5NzAsMTcgQEAKICNkZWZpbmUgSUVFRTgwMjExX01BWF9BTVBEVV9CVUYgMHg0MAogCiAKLS8qIFNwYXRpYWwgTXVsdGlwbGV4aW5nIFBvd2VyIFNhdmUgTW9kZXMgKi8KKy8qIFNwYXRpYWwgTXVsdGlwbGV4aW5nIFBvd2VyIFNhdmUgTW9kZXMgKGZvciBjYXBhYmlsaXR5KSAqLwogI2RlZmluZSBXTEFOX0hUX0NBUF9TTV9QU19TVEFUSUMJMAogI2RlZmluZSBXTEFOX0hUX0NBUF9TTV9QU19EWU5BTUlDCTEKICNkZWZpbmUgV0xBTl9IVF9DQVBfU01fUFNfSU5WQUxJRAkyCiAjZGVmaW5lIFdMQU5fSFRfQ0FQX1NNX1BTX0RJU0FCTEVECTMKIAorLyogZm9yIFNNIHBvd2VyIGNvbnRyb2wgZmllbGQgbG93ZXIgdHdvIGJpdHMgKi8KKyNkZWZpbmUgV0xBTl9IVF9TTVBTX0NPTlRST0xfRElTQUJMRUQJMAorI2RlZmluZSBXTEFOX0hUX1NNUFNfQ09OVFJPTF9TVEFUSUMJMQorI2RlZmluZSBXTEFOX0hUX1NNUFNfQ09OVFJPTF9EWU5BTUlDCTMKKwogLyogQXV0aGVudGljYXRpb24gYWxnb3JpdGhtcyAqLwogI2RlZmluZSBXTEFOX0FVVEhfT1BFTiAwCiAjZGVmaW5lIFdMQU5fQVVUSF9TSEFSRURfS0VZIDEKQEAgLTEwNzEsMTIgKzExMjQsMTIgQEAKIAlXTEFOX0VJRF9USU0gPSA1LAogCVdMQU5fRUlEX0lCU1NfUEFSQU1TID0gNiwKIAlXTEFOX0VJRF9DSEFMTEVOR0UgPSAxNiwKLQkvKiA4MDIuMTFkICovCisKIAlXTEFOX0VJRF9DT1VOVFJZID0gNywKIAlXTEFOX0VJRF9IUF9QQVJBTVMgPSA4LAogCVdMQU5fRUlEX0hQX1RBQkxFID0gOSwKIAlXTEFOX0VJRF9SRVFVRVNUID0gMTAsCi0JLyogODAyLjExZSAqLworCiAJV0xBTl9FSURfUUJTU19MT0FEID0gMTEsCiAJV0xBTl9FSURfRURDQV9QQVJBTV9TRVQgPSAxMiwKIAlXTEFOX0VJRF9UU1BFQyA9IDEzLApAQCAtMTA5OSw3ICsxMTUyLDcgQEAKIAlXTEFOX0VJRF9QUkVQID0gNjksCiAJV0xBTl9FSURfUEVSUiA9IDcwLAogCVdMQU5fRUlEX1JBTk4gPSA0OSwJLyogY29tcGF0aWJsZSB3aXRoIEZyZWVCU0QgKi8KLQkvKiA4MDIuMTFoICovCisKIAlXTEFOX0VJRF9QV1JfQ09OU1RSQUlOVCA9IDMyLAogCVdMQU5fRUlEX1BXUl9DQVBBQklMSVRZID0gMzMsCiAJV0xBTl9FSURfVFBDX1JFUVVFU1QgPSAzNCwKQEAgLTExMTAsMjAgKzExNjMsNDEgQEAKIAlXTEFOX0VJRF9NRUFTVVJFX1JFUE9SVCA9IDM5LAogCVdMQU5fRUlEX1FVSUVUID0gNDAsCiAJV0xBTl9FSURfSUJTU19ERlMgPSA0MSwKLQkvKiA4MDIuMTFnICovCisKIAlXTEFOX0VJRF9FUlBfSU5GTyA9IDQyLAogCVdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTID0gNTAsCi0JLyogODAyLjExbiAqLworCiAJV0xBTl9FSURfSFRfQ0FQQUJJTElUWSA9IDQ1LAogCVdMQU5fRUlEX0hUX0lORk9STUFUSU9OID0gNjEsCi0JLyogODAyLjExaSAqLworCiAJV0xBTl9FSURfUlNOID0gNDgsCi0JV0xBTl9FSURfVElNRU9VVF9JTlRFUlZBTCA9IDU2LAotCVdMQU5fRUlEX01NSUUgPSA3NiAvKiA4MDIuMTF3ICovLAorCVdMQU5fRUlEX01NSUUgPSA3NiwKIAlXTEFOX0VJRF9XUEEgPSAyMjEsCiAJV0xBTl9FSURfR0VORVJJQyA9IDIyMSwKIAlXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUMgPSAyMjEsCi0JV0xBTl9FSURfUU9TX1BBUkFNRVRFUiA9IDIyMgorCVdMQU5fRUlEX1FPU19QQVJBTUVURVIgPSAyMjIsCisKKwlXTEFOX0VJRF9BUF9DSEFOX1JFUE9SVCA9IDUxLAorCVdMQU5fRUlEX05FSUdIQk9SX1JFUE9SVCA9IDUyLAorCVdMQU5fRUlEX1JDUEkgPSA1MywKKwlXTEFOX0VJRF9CU1NfQVZHX0FDQ0VTU19ERUxBWSA9IDYzLAorCVdMQU5fRUlEX0FOVEVOTkFfSU5GTyA9IDY0LAorCVdMQU5fRUlEX1JTTkkgPSA2NSwKKwlXTEFOX0VJRF9NRUFTVVJFTUVOVF9QSUxPVF9UWF9JTkZPID0gNjYsCisJV0xBTl9FSURfQlNTX0FWQUlMQUJMRV9DQVBBQ0lUWSA9IDY3LAorCVdMQU5fRUlEX0JTU19BQ19BQ0NFU1NfREVMQVkgPSA2OCwKKwlXTEFOX0VJRF9SUk1fRU5BQkxFRF9DQVBBQklMSVRJRVMgPSA3MCwKKwlXTEFOX0VJRF9NVUxUSVBMRV9CU1NJRCA9IDcxLAorCisJV0xBTl9FSURfTU9CSUxJVFlfRE9NQUlOID0gNTQsCisJV0xBTl9FSURfRkFTVF9CU1NfVFJBTlNJVElPTiA9IDU1LAorCVdMQU5fRUlEX1RJTUVPVVRfSU5URVJWQUwgPSA1NiwKKwlXTEFOX0VJRF9SSUNfREFUQSA9IDU3LAorCVdMQU5fRUlEX1JJQ19ERVNDUklQVE9SID0gNzUsCisKKwlXTEFOX0VJRF9EU0VfUkVHSVNURVJFRF9MT0NBVElPTiA9IDU4LAorCVdMQU5fRUlEX1NVUFBPUlRFRF9SRUdVTEFUT1JZX0NMQVNTRVMgPSA1OSwKKwlXTEFOX0VJRF9FWFRfQ0hBTlNXSVRDSF9BTk4gPSA2MCwKIH07CiAKIC8qIEFjdGlvbiBjYXRlZ29yeSBjb2RlICovCkBAIC0xMTUwLDYgKzEyMjQsMTggQEAKIAlXTEFOX0FDVElPTl9TUENUX0NITF9TV0lUQ0ggPSA0LAogfTsKIAorLyogSFQgYWN0aW9uIGNvZGVzICovCitlbnVtIGllZWU4MDIxMV9odF9hY3Rpb25jb2RlIHsKKwlXTEFOX0hUX0FDVElPTl9OT1RJRllfQ0hBTldJRFRIID0gMCwKKwlXTEFOX0hUX0FDVElPTl9TTVBTID0gMSwKKwlXTEFOX0hUX0FDVElPTl9QU01QID0gMiwKKwlXTEFOX0hUX0FDVElPTl9QQ09fUEhBU0UgPSAzLAorCVdMQU5fSFRfQUNUSU9OX0NTSSA9IDQsCisJV0xBTl9IVF9BQ1RJT05fTk9OQ09NUFJFU1NFRF9CRiA9IDUsCisJV0xBTl9IVF9BQ1RJT05fQ09NUFJFU1NFRF9CRiA9IDYsCisJV0xBTl9IVF9BQ1RJT05fQVNFTF9JRFhfRkVFREJBQ0sgPSA3LAorfTsKKwogLyogU2VjdXJpdHkga2V5IGxlbmd0aCAqLwogZW51bSBpZWVlODAyMTFfa2V5X2xlbiB7CiAJV0xBTl9LRVlfTEVOX1dFUDQwID0gNSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfbGluay5oIGIvaW5jbHVkZS9saW51eC9pZl9saW5rLmgKaW5kZXggNjY3NDc5MS4uYzliZjkyYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9saW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl9saW5rLmgKQEAgLTc4LDYgKzc4LDExIEBACiAjZGVmaW5lIElGTEFfTElOS0lORk8gSUZMQV9MSU5LSU5GTwogCUlGTEFfTkVUX05TX1BJRCwKIAlJRkxBX0lGQUxJQVMsCisJSUZMQV9OVU1fVkYsCQkvKiBOdW1iZXIgb2YgVkZzIGlmIGRldmljZSBpcyBTUi1JT1YgUEYgKi8KKwlJRkxBX1ZGX01BQywJCS8qIEhhcmR3YXJlIHF1ZXVlIHNwZWNpZmljIGF0dHJpYnV0ZXMgKi8KKwlJRkxBX1ZGX1ZMQU4sCisJSUZMQV9WRl9UWF9SQVRFLAkvKiBUWCBCYW5kd2lkdGggQWxsb2NhdGlvbiAqLworCUlGTEFfVkZJTkZPLAogCV9fSUZMQV9NQVgKIH07CiAKQEAgLTE5Niw0ICsyMDEsMjkgQEAKIAlNQUNWTEFOX01PREVfQlJJREdFICA9IDQsIC8qIHRhbGsgdG8gYnJpZGdlIHBvcnRzIGRpcmVjdGx5ICovCiB9OwogCisvKiBTUi1JT1YgdmlydHVhbCBmdW5jdGlvbiBtYW5hZ21lbnQgc2VjdGlvbiAqLworCitzdHJ1Y3QgaWZsYV92Zl9tYWMgeworCV9fdTMyIHZmOworCV9fdTggbWFjWzMyXTsgLyogTUFYX0FERFJfTEVOICovCit9OworCitzdHJ1Y3QgaWZsYV92Zl92bGFuIHsKKwlfX3UzMiB2ZjsKKwlfX3UzMiB2bGFuOyAvKiAwIC0gNDA5NSwgMCBkaXNhYmxlcyBWTEFOIGZpbHRlciAqLworCV9fdTMyIHFvczsKK307CisKK3N0cnVjdCBpZmxhX3ZmX3R4X3JhdGUgeworCV9fdTMyIHZmOworCV9fdTMyIHJhdGU7IC8qIE1heCBUWCBiYW5kd2lkdGggaW4gTWJwcywgMCBkaXNhYmxlcyB0aHJvdHRsaW5nICovCit9OworCitzdHJ1Y3QgaWZsYV92Zl9pbmZvIHsKKwlfX3UzMiB2ZjsKKwlfX3U4IG1hY1szMl07CisJX191MzIgdmxhbjsKKwlfX3UzMiBxb3M7CisJX191MzIgdHhfcmF0ZTsKK307CiAjZW5kaWYgLyogX0xJTlVYX0lGX0xJTktfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9tYWN2bGFuLmggYi9pbmNsdWRlL2xpbnV4L2lmX21hY3ZsYW4uaAppbmRleCA1ZjIwMGJhLi5iNzhhNzEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX21hY3ZsYW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX21hY3ZsYW4uaApAQCAtMSw2ICsxLDkwIEBACiAjaWZuZGVmIF9MSU5VWF9JRl9NQUNWTEFOX0gKICNkZWZpbmUgX0xJTlVYX0lGX01BQ1ZMQU5fSAogCisjaW5jbHVkZSA8bGludXgvaWZfbGluay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L25ldGxpbmsuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX01BQ1ZUQVApIHx8IGRlZmluZWQoQ09ORklHX01BQ1ZUQVBfTU9EVUxFKQorc3RydWN0IHNvY2tldCAqbWFjdnRhcF9nZXRfc29ja2V0KHN0cnVjdCBmaWxlICopOworI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorc3RydWN0IGZpbGU7CitzdHJ1Y3Qgc29ja2V0Oworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29ja2V0ICptYWN2dGFwX2dldF9zb2NrZXQoc3RydWN0IGZpbGUgKmYpCit7CisJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cit9CisjZW5kaWYgLyogQ09ORklHX01BQ1ZUQVAgKi8KKworc3RydWN0IG1hY3ZsYW5fcG9ydDsKK3N0cnVjdCBtYWN2dGFwX3F1ZXVlOworCisvKioKKyAqCXN0cnVjdCBtYWN2bGFuX3J4X3N0YXRzIC0gTUFDVkxBTiBwZXJjcHUgcnggc3RhdHMKKyAqCUByeF9wYWNrZXRzOiBudW1iZXIgb2YgcmVjZWl2ZWQgcGFja2V0cworICoJQHJ4X2J5dGVzOiBudW1iZXIgb2YgcmVjZWl2ZWQgYnl0ZXMKKyAqCUBtdWx0aWNhc3Q6IG51bWJlciBvZiByZWNlaXZlZCBtdWx0aWNhc3QgcGFja2V0cworICoJQHJ4X2Vycm9yczogbnVtYmVyIG9mIGVycm9ycworICovCitzdHJ1Y3QgbWFjdmxhbl9yeF9zdGF0cyB7CisJdW5zaWduZWQgbG9uZyByeF9wYWNrZXRzOworCXVuc2lnbmVkIGxvbmcgcnhfYnl0ZXM7CisJdW5zaWduZWQgbG9uZyBtdWx0aWNhc3Q7CisJdW5zaWduZWQgbG9uZyByeF9lcnJvcnM7Cit9OworCitzdHJ1Y3QgbWFjdmxhbl9kZXYgeworCXN0cnVjdCBuZXRfZGV2aWNlCSpkZXY7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCXN0cnVjdCBobGlzdF9ub2RlCWhsaXN0OworCXN0cnVjdCBtYWN2bGFuX3BvcnQJKnBvcnQ7CisJc3RydWN0IG5ldF9kZXZpY2UJKmxvd2VyZGV2OworCXN0cnVjdCBtYWN2bGFuX3J4X3N0YXRzIF9fcGVyY3B1ICpyeF9zdGF0czsKKwllbnVtIG1hY3ZsYW5fbW9kZQltb2RlOworCWludCAoKnJlY2VpdmUpKHN0cnVjdCBza19idWZmICpza2IpOworCWludCAoKmZvcndhcmQpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOworCXN0cnVjdCBtYWN2dGFwX3F1ZXVlCSp0YXA7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgbWFjdmxhbl9jb3VudF9yeChjb25zdCBzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4sCisJCQkJICAgIHVuc2lnbmVkIGludCBsZW4sIGJvb2wgc3VjY2VzcywKKwkJCQkgICAgYm9vbCBtdWx0aWNhc3QpCit7CisJc3RydWN0IG1hY3ZsYW5fcnhfc3RhdHMgKnJ4X3N0YXRzOworCisJcnhfc3RhdHMgPSBwZXJfY3B1X3B0cih2bGFuLT5yeF9zdGF0cywgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlpZiAobGlrZWx5KHN1Y2Nlc3MpKSB7CisJCXJ4X3N0YXRzLT5yeF9wYWNrZXRzKys7OworCQlyeF9zdGF0cy0+cnhfYnl0ZXMgKz0gbGVuOworCQlpZiAobXVsdGljYXN0KQorCQkJcnhfc3RhdHMtPm11bHRpY2FzdCsrOworCX0gZWxzZSB7CisJCXJ4X3N0YXRzLT5yeF9lcnJvcnMrKzsKKwl9Cit9CisKK2V4dGVybiBpbnQgbWFjdmxhbl9jb21tb25fbmV3bGluayhzdHJ1Y3QgbmV0ICpzcmNfbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgc3RydWN0IG5sYXR0ciAqdGJbXSwgc3RydWN0IG5sYXR0ciAqZGF0YVtdLAorCQkJCSAgaW50ICgqcmVjZWl2ZSkoc3RydWN0IHNrX2J1ZmYgKnNrYiksCisJCQkJICBpbnQgKCpmb3J3YXJkKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJIHN0cnVjdCBza19idWZmICpza2IpKTsKKworZXh0ZXJuIHZvaWQgbWFjdmxhbl9jb3VudF9yeChjb25zdCBzdHJ1Y3QgbWFjdmxhbl9kZXYgKnZsYW4sCisJCQkgICAgIHVuc2lnbmVkIGludCBsZW4sIGJvb2wgc3VjY2VzcywKKwkJCSAgICAgYm9vbCBtdWx0aWNhc3QpOworCitleHRlcm4gdm9pZCBtYWN2bGFuX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCk7CisKK2V4dGVybiBpbnQgbWFjdmxhbl9saW5rX3JlZ2lzdGVyKHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMpOworCitleHRlcm4gbmV0ZGV2X3R4X3QgbWFjdmxhbl9zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisKKwogZXh0ZXJuIHN0cnVjdCBza19idWZmICooKm1hY3ZsYW5faGFuZGxlX2ZyYW1lX2hvb2spKHN0cnVjdCBza19idWZmICopOwogCiAjZW5kaWYgLyogX0xJTlVYX0lGX01BQ1ZMQU5fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaCBiL2luY2x1ZGUvbGludXgvaWZfcGFja2V0LmgKaW5kZXggNDAyMWQ0Ny4uYWE1N2E1ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX3BhY2tldC5oCkBAIC00Niw2ICs0Niw3IEBACiAjZGVmaW5lIFBBQ0tFVF9SRVNFUlZFCQkJMTIKICNkZWZpbmUgUEFDS0VUX1RYX1JJTkcJCQkxMwogI2RlZmluZSBQQUNLRVRfTE9TUwkJCTE0CisjZGVmaW5lIFBBQ0tFVF9WTkVUX0hEUgkJCTE1CiAKIHN0cnVjdCB0cGFja2V0X3N0YXRzIHsKIAl1bnNpZ25lZCBpbnQJdHBfcGFja2V0czsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfdHVuLmggYi9pbmNsdWRlL2xpbnV4L2lmX3R1bi5oCmluZGV4IDNmNWZkNTIuLjEzNTBhMjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaWZfdHVuLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZl90dW4uaApAQCAtMTgsNiArMTgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L2ZpbHRlci5oPgogCiAvKiBSZWFkIHF1ZXVlIHNpemUgKi8KICNkZWZpbmUgVFVOX1JFQURRX1NJWkUJNTAwCkBAIC00OCw2ICs0OSw4IEBACiAjZGVmaW5lIFRVTkdFVElGRiAgICAgIF9JT1IoJ1QnLCAyMTAsIHVuc2lnbmVkIGludCkKICNkZWZpbmUgVFVOR0VUU05EQlVGICAgX0lPUignVCcsIDIxMSwgaW50KQogI2RlZmluZSBUVU5TRVRTTkRCVUYgICBfSU9XKCdUJywgMjEyLCBpbnQpCisjZGVmaW5lIFRVTkFUVEFDSEZJTFRFUiBfSU9XKCdUJywgMjEzLCBzdHJ1Y3Qgc29ja19mcHJvZykKKyNkZWZpbmUgVFVOREVUQUNIRklMVEVSIF9JT1coJ1QnLCAyMTQsIHN0cnVjdCBzb2NrX2Zwcm9nKQogCiAvKiBUVU5TRVRJRkYgaWZyIGZsYWdzICovCiAjZGVmaW5lIElGRl9UVU4JCTB4MDAwMQpAQCAtODYsNCArODksMTggQEAKIAlfX3U4ICAgYWRkclswXVtFVEhfQUxFTl07CiB9OwogCisjaWZkZWYgX19LRVJORUxfXworI2lmIGRlZmluZWQoQ09ORklHX1RVTikgfHwgZGVmaW5lZChDT05GSUdfVFVOX01PRFVMRSkKK3N0cnVjdCBzb2NrZXQgKnR1bl9nZXRfc29ja2V0KHN0cnVjdCBmaWxlICopOworI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorc3RydWN0IGZpbGU7CitzdHJ1Y3Qgc29ja2V0Oworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29ja2V0ICp0dW5fZ2V0X3NvY2tldChzdHJ1Y3QgZmlsZSAqZikKK3sKKwlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKK30KKyNlbmRpZiAvKiBDT05GSUdfVFVOICovCisjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fSUZfVFVOX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWdtcC5oIGIvaW5jbHVkZS9saW51eC9pZ21wLmgKaW5kZXggNzI0YzI3ZS4uOTNmYzI0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZ21wLmgKKysrIGIvaW5jbHVkZS9saW51eC9pZ21wLmgKQEAgLTE1Myw2ICsxNTMsNyBAQAogc3RydWN0IGlwX3NmX3NvY2tsaXN0IHsKIAl1bnNpZ25lZCBpbnQJCXNsX21heDsKIAl1bnNpZ25lZCBpbnQJCXNsX2NvdW50OworCXN0cnVjdCByY3VfaGVhZAkJcmN1OwogCV9fYmUzMgkJCXNsX2FkZHJbMF07CiB9OwogCkBAIC0xNzAsNiArMTcxLDcgQEAKIAlzdHJ1Y3QgaXBfbXJlcW4JCW11bHRpOwogCXVuc2lnbmVkIGludAkJc2Ztb2RlOwkJLyogTUNBU1Rfe0lOQ0xVREUsRVhDTFVERX0gKi8KIAlzdHJ1Y3QgaXBfc2Zfc29ja2xpc3QJKnNmbGlzdDsKKwlzdHJ1Y3QgcmN1X2hlYWQJCXJjdTsKIH07CiAKIHN0cnVjdCBpcF9zZl9saXN0IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW4uaCBiL2luY2x1ZGUvbGludXgvaW4uaAppbmRleCBiNjE1NjQ5Li41ODNjNzZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbi5oCkBAIC04NCw2ICs4NCw4IEBACiAjZGVmaW5lIElQX09SSUdEU1RBRERSICAgICAgIDIwCiAjZGVmaW5lIElQX1JFQ1ZPUklHRFNUQUREUiAgIElQX09SSUdEU1RBRERSCiAKKyNkZWZpbmUgSVBfTUlOVFRMICAgICAgIDIxCisKIC8qIElQX01UVV9ESVNDT1ZFUiB2YWx1ZXMgKi8KICNkZWZpbmUgSVBfUE1UVURJU0NfRE9OVAkJMAkvKiBOZXZlciBzZW5kIERGIGZyYW1lcyAqLwogI2RlZmluZSBJUF9QTVRVRElTQ19XQU5UCQkxCS8qIFVzZSBwZXIgcm91dGUgaGludHMJKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW5ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgKaW5kZXggYjIzMDQ5Mi4uMmJlMWExYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmgKQEAgLTEwLDEwICsxMCw0MCBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiAKK2VudW0KK3sKKwlJUFY0X0RFVkNPTkZfRk9SV0FSRElORz0xLAorCUlQVjRfREVWQ09ORl9NQ19GT1JXQVJESU5HLAorCUlQVjRfREVWQ09ORl9QUk9YWV9BUlAsCisJSVBWNF9ERVZDT05GX0FDQ0VQVF9SRURJUkVDVFMsCisJSVBWNF9ERVZDT05GX1NFQ1VSRV9SRURJUkVDVFMsCisJSVBWNF9ERVZDT05GX1NFTkRfUkVESVJFQ1RTLAorCUlQVjRfREVWQ09ORl9TSEFSRURfTUVESUEsCisJSVBWNF9ERVZDT05GX1JQX0ZJTFRFUiwKKwlJUFY0X0RFVkNPTkZfQUNDRVBUX1NPVVJDRV9ST1VURSwKKwlJUFY0X0RFVkNPTkZfQk9PVFBfUkVMQVksCisJSVBWNF9ERVZDT05GX0xPR19NQVJUSUFOUywKKwlJUFY0X0RFVkNPTkZfVEFHLAorCUlQVjRfREVWQ09ORl9BUlBGSUxURVIsCisJSVBWNF9ERVZDT05GX01FRElVTV9JRCwKKwlJUFY0X0RFVkNPTkZfTk9YRlJNLAorCUlQVjRfREVWQ09ORl9OT1BPTElDWSwKKwlJUFY0X0RFVkNPTkZfRk9SQ0VfSUdNUF9WRVJTSU9OLAorCUlQVjRfREVWQ09ORl9BUlBfQU5OT1VOQ0UsCisJSVBWNF9ERVZDT05GX0FSUF9JR05PUkUsCisJSVBWNF9ERVZDT05GX1BST01PVEVfU0VDT05EQVJJRVMsCisJSVBWNF9ERVZDT05GX0FSUF9BQ0NFUFQsCisJSVBWNF9ERVZDT05GX0FSUF9OT1RJRlksCisJSVBWNF9ERVZDT05GX0FDQ0VQVF9MT0NBTCwKKwlJUFY0X0RFVkNPTkZfU1JDX1ZNQVJLLAorCUlQVjRfREVWQ09ORl9QUk9YWV9BUlBfUFZMQU4sCisJX19JUFY0X0RFVkNPTkZfTUFYCit9OworCiBzdHJ1Y3QgaXB2NF9kZXZjb25mIHsKIAl2b2lkCSpzeXNjdGw7Ci0JaW50CWRhdGFbX19ORVRfSVBWNF9DT05GX01BWCAtIDFdOwotCURFQ0xBUkVfQklUTUFQKHN0YXRlLCBfX05FVF9JUFY0X0NPTkZfTUFYIC0gMSk7CisJaW50CWRhdGFbX19JUFY0X0RFVkNPTkZfTUFYIC0gMV07CisJREVDTEFSRV9CSVRNQVAoc3RhdGUsIF9fSVBWNF9ERVZDT05GX01BWCAtIDEpOwogfTsKIAogc3RydWN0IGluX2RldmljZSB7CkBAIC00MCw3ICs3MCw3IEBACiAJc3RydWN0IHJjdV9oZWFkCQlyY3VfaGVhZDsKIH07CiAKLSNkZWZpbmUgSVBWNF9ERVZDT05GKGNuZiwgYXR0cikgKChjbmYpLmRhdGFbTkVUX0lQVjRfQ09ORl8gIyMgYXR0ciAtIDFdKQorI2RlZmluZSBJUFY0X0RFVkNPTkYoY25mLCBhdHRyKSAoKGNuZikuZGF0YVtJUFY0X0RFVkNPTkZfICMjIGF0dHIgLSAxXSkKICNkZWZpbmUgSVBWNF9ERVZDT05GX0FMTChuZXQsIGF0dHIpIFwKIAlJUFY0X0RFVkNPTkYoKCoobmV0KS0+aXB2NC5kZXZjb25mX2FsbCksIGF0dHIpCiAKQEAgLTYwLDEzICs5MCwxMyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgaXB2NF9kZXZjb25mX3NldGFsbChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpCiB7Ci0JYml0bWFwX2ZpbGwoaW5fZGV2LT5jbmYuc3RhdGUsIF9fTkVUX0lQVjRfQ09ORl9NQVggLSAxKTsKKwliaXRtYXBfZmlsbChpbl9kZXYtPmNuZi5zdGF0ZSwgX19JUFY0X0RFVkNPTkZfTUFYIC0gMSk7CiB9CiAKICNkZWZpbmUgSU5fREVWX0NPTkZfR0VUKGluX2RldiwgYXR0cikgXAotCWlwdjRfZGV2Y29uZl9nZXQoKGluX2RldiksIE5FVF9JUFY0X0NPTkZfICMjIGF0dHIpCisJaXB2NF9kZXZjb25mX2dldCgoaW5fZGV2KSwgSVBWNF9ERVZDT05GXyAjIyBhdHRyKQogI2RlZmluZSBJTl9ERVZfQ09ORl9TRVQoaW5fZGV2LCBhdHRyLCB2YWwpIFwKLQlpcHY0X2RldmNvbmZfc2V0KChpbl9kZXYpLCBORVRfSVBWNF9DT05GXyAjIyBhdHRyLCAodmFsKSkKKwlpcHY0X2RldmNvbmZfc2V0KChpbl9kZXYpLCBJUFY0X0RFVkNPTkZfICMjIGF0dHIsICh2YWwpKQogCiAjZGVmaW5lIElOX0RFVl9BTkRDT05GKGluX2RldiwgYXR0cikgXAogCShJUFY0X0RFVkNPTkZfQUxMKGRldl9uZXQoaW5fZGV2LT5kZXYpLCBhdHRyKSAmJiBcCkBAIC04OSw2ICsxMTksNyBAQAogCiAjZGVmaW5lIElOX0RFVl9MT0dfTUFSVElBTlMoaW5fZGV2KQlJTl9ERVZfT1JDT05GKChpbl9kZXYpLCBMT0dfTUFSVElBTlMpCiAjZGVmaW5lIElOX0RFVl9QUk9YWV9BUlAoaW5fZGV2KQlJTl9ERVZfT1JDT05GKChpbl9kZXYpLCBQUk9YWV9BUlApCisjZGVmaW5lIElOX0RFVl9QUk9YWV9BUlBfUFZMQU4oaW5fZGV2KQlJTl9ERVZfQ09ORl9HRVQoaW5fZGV2LCBQUk9YWV9BUlBfUFZMQU4pCiAjZGVmaW5lIElOX0RFVl9TSEFSRURfTUVESUEoaW5fZGV2KQlJTl9ERVZfT1JDT05GKChpbl9kZXYpLCBTSEFSRURfTUVESUEpCiAjZGVmaW5lIElOX0RFVl9UWF9SRURJUkVDVFMoaW5fZGV2KQlJTl9ERVZfT1JDT05GKChpbl9kZXYpLCBTRU5EX1JFRElSRUNUUykKICNkZWZpbmUgSU5fREVWX1NFQ19SRURJUkVDVFMoaW5fZGV2KQlJTl9ERVZfT1JDT05GKChpbl9kZXYpLCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oIGIvaW5jbHVkZS9saW51eC9pbml0X3Rhc2suaAppbmRleCBhYmVjNjliLi5iMWVkMWNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luaXRfdGFzay5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdF90YXNrLmgKQEAgLTMyLDE0ICszMiw2IEBACiB9CiAKIGV4dGVybiBzdHJ1Y3QgbnNwcm94eSBpbml0X25zcHJveHk7Ci0jZGVmaW5lIElOSVRfTlNQUk9YWShuc3Byb3h5KSB7CQkJCQkJXAotCS5waWRfbnMJCT0gJmluaXRfcGlkX25zLAkJCQkJXAotCS5jb3VudAkJPSBBVE9NSUNfSU5JVCgxKSwJCQkJXAotCS51dHNfbnMJCT0gJmluaXRfdXRzX25zLAkJCQkJXAotCS5tbnRfbnMJCT0gTlVMTCwJCQkJCQlcCi0JSU5JVF9ORVRfTlMobmV0X25zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlJTklUX0lQQ19OUyhpcGNfbnMpCQkJCQkJXAotfQogCiAjZGVmaW5lIElOSVRfU0lHSEFORChzaWdoYW5kKSB7CQkJCQkJXAogCS5jb3VudAkJPSBBVE9NSUNfSU5JVCgxKSwgCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW9jb250ZXh0LmggYi9pbmNsdWRlL2xpbnV4L2lvY29udGV4dC5oCmluZGV4IDExOTVhODAuLmEwYmIzMDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9saW51eC9pb2NvbnRleHQuaApAQCAtNDIsNyArNDIsNyBAQAogCXVuc2lnbmVkIHNob3J0IGlvcHJpbzsKIAl1bnNpZ25lZCBzaG9ydCBpb3ByaW9fY2hhbmdlZDsKIAotI2lmZGVmIENPTkZJR19CTEtfQ0dST1VQCisjaWYgZGVmaW5lZChDT05GSUdfQkxLX0NHUk9VUCkgfHwgZGVmaW5lZChDT05GSUdfQkxLX0NHUk9VUF9NT0RVTEUpCiAJdW5zaWduZWQgc2hvcnQgY2dyb3VwX2NoYW5nZWQ7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcGNfbmFtZXNwYWNlLmggYi9pbmNsdWRlL2xpbnV4L2lwY19uYW1lc3BhY2UuaAppbmRleCAwN2JhYTM4Li41MTk1Mjk4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lwY19uYW1lc3BhY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwY19uYW1lc3BhY2UuaApAQCAtNjIsMTEgKzYyLDYgQEAKIGV4dGVybiBhdG9taWNfdCBucl9pcGNfbnM7CiAKIGV4dGVybiBzcGlubG9ja190IG1xX2xvY2s7Ci0jaWYgZGVmaW5lZChDT05GSUdfUE9TSVhfTVFVRVVFKSB8fCBkZWZpbmVkKENPTkZJR19TWVNWSVBDKQotI2RlZmluZSBJTklUX0lQQ19OUyhucykJCS5ucwkJPSAmaW5pdF9pcGNfbnMsCi0jZWxzZQotI2RlZmluZSBJTklUX0lQQ19OUyhucykKLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NZU1ZJUEMKIGV4dGVybiBpbnQgcmVnaXN0ZXJfaXBjbnNfbm90aWZpZXIoc3RydWN0IGlwY19uYW1lc3BhY2UgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lwbWlfc21pLmggYi9pbmNsdWRlL2xpbnV4L2lwbWlfc21pLmgKaW5kZXggZjdjOWM3NS4uNGI0ODMxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcG1pX3NtaS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXBtaV9zbWkuaApAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2lwbWlfc21pLmg+CiAKIC8qIFRoaXMgZmlsZXMgZGVzY3JpYmVzIHRoZSBpbnRlcmZhY2UgZm9yIElQTUkgc3lzdGVtIG1hbmFnZW1lbnQgaW50ZXJmYWNlCiAgICBkcml2ZXJzIHRvIGJpbmQgaW50byB0aGUgSVBNSSBtZXNzYWdlIGhhbmRsZXIuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaAppbmRleCBkMTM0OTJkLi43MDdhYjEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTQwMCw3ICs0MDAsOSBAQAogCiAvKiBEeW5hbWljIGlycSBoZWxwZXIgZnVuY3Rpb25zICovCiBleHRlcm4gdm9pZCBkeW5hbWljX2lycV9pbml0KHVuc2lnbmVkIGludCBpcnEpOwordm9pZCBkeW5hbWljX2lycV9pbml0X2tlZXBfY2hpcF9kYXRhKHVuc2lnbmVkIGludCBpcnEpOwogZXh0ZXJuIHZvaWQgZHluYW1pY19pcnFfY2xlYW51cCh1bnNpZ25lZCBpbnQgaXJxKTsKK3ZvaWQgZHluYW1pY19pcnFfY2xlYW51cF9rZWVwX2NoaXBfZGF0YSh1bnNpZ25lZCBpbnQgaXJxKTsKIAogLyogU2V0L2dldCBjaGlwL2RhdGEgZm9yIGFuIElSUTogKi8KIGV4dGVybiBpbnQgc2V0X2lycV9jaGlwKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfY2hpcCAqY2hpcCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lzZG4vY2FwaWxsaS5oIGIvaW5jbHVkZS9saW51eC9pc2RuL2NhcGlsbGkuaAppbmRleCA3YWNiODdhLi4xMWI1N2M0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lzZG4vY2FwaWxsaS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXNkbi9jYXBpbGxpLmgKQEAgLTUwLDggKzUwLDcgQEAKIAl1MTYgICgqc2VuZF9tZXNzYWdlKShzdHJ1Y3QgY2FwaV9jdHIgKiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJCiAJY2hhciAqKCpwcm9jaW5mbykoc3RydWN0IGNhcGlfY3RyICopOwotCWludCAoKmN0cl9yZWFkX3Byb2MpKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJICAgICBpbnQgY291bnQsIGludCAqZW9mLCBzdHJ1Y3QgY2FwaV9jdHIgKmNhcmQpOworCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKnByb2NfZm9wczsKIAogCS8qIGZpbGxlZCBpbiBiZWZvcmUgY2FsbGluZyByZWFkeSBjYWxsYmFjayAqLwogCXU4IG1hbnVbQ0FQSV9NQU5VRkFDVFVSRVJfTEVOXTsJCS8qIENBUElfR0VUX01BTlVGQUNUVVJFUiAqLwpAQCAtNjcsOSArNjYsMTAgQEAKIAl1bnNpZ25lZCBsb25nIG5zZW50ZGF0YXBrdDsKIAogCWludCBjbnI7CQkJCS8qIGNvbnRyb2xsZXIgbnVtYmVyICovCi0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgY2FyZHN0YXRlOwkvKiBjb250cm9sbGVyIHN0YXRlICovCi0Jdm9sYXRpbGUgaW50IGJsb2NrZWQ7CQkJLyogb3V0cHV0IGJsb2NrZWQgKi8KKwl1bnNpZ25lZCBzaG9ydCBzdGF0ZTsJCQkvKiBjb250cm9sbGVyIHN0YXRlICovCisJaW50IGJsb2NrZWQ7CQkJCS8qIG91dHB1dCBibG9ja2VkICovCiAJaW50IHRyYWNlZmxhZzsJCQkJLyogY2FwaSB0cmFjZSAqLworCXdhaXRfcXVldWVfaGVhZF90IHN0YXRlX3dhaXRfcXVldWU7CiAKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NlbnQ7CiAgICAgICAgIGNoYXIgcHJvY2ZuWzEyOF07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2piZC5oIGIvaW5jbHVkZS9saW51eC9qYmQuaAppbmRleCAzMzE1MzBjLi5mM2FhNTljIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2piZC5oCisrKyBiL2luY2x1ZGUvbGludXgvamJkLmgKQEAgLTI0NiwxOSArMjQ2LDggQEAKIAogI2RlZmluZSBKX0FTU0VSVChhc3NlcnQpCUJVR19PTighKGFzc2VydCkpCiAKLSNpZiBkZWZpbmVkKENPTkZJR19CVUZGRVJfREVCVUcpCi12b2lkIGJ1ZmZlcl9hc3NlcnRpb25fZmFpbHVyZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsKLSNkZWZpbmUgSl9BU1NFUlRfQkgoYmgsIGV4cHIpCQkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJaWYgKCEoZXhwcikpCQkJCQkJXAotCQkJYnVmZmVyX2Fzc2VydGlvbl9mYWlsdXJlKGJoKTsJCQlcCi0JCUpfQVNTRVJUKGV4cHIpOwkJCQkJCVwKLQl9IHdoaWxlICgwKQotI2RlZmluZSBKX0FTU0VSVF9KSChqaCwgZXhwcikJSl9BU1NFUlRfQkgoamgyYmgoamgpLCBleHByKQotI2Vsc2UKICNkZWZpbmUgSl9BU1NFUlRfQkgoYmgsIGV4cHIpCUpfQVNTRVJUKGV4cHIpCiAjZGVmaW5lIEpfQVNTRVJUX0pIKGpoLCBleHByKQlKX0FTU0VSVChleHByKQotI2VuZGlmCiAKICNpZiBkZWZpbmVkKEpCRF9QQVJBTk9JRF9JT0ZBSUwpCiAjZGVmaW5lIEpfRVhQRUNUKGV4cHIsIHdoeS4uLikJCUpfQVNTRVJUKGV4cHIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2piZDIuaCBiL2luY2x1ZGUvbGludXgvamJkMi5oCmluZGV4IDYzOGNlNDUuLjFlYzg3NjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvamJkMi5oCisrKyBiL2luY2x1ZGUvbGludXgvamJkMi5oCkBAIC02OSwxNSArNjksOCBAQAogI2RlZmluZSBqYmRfZGVidWcoZiwgYS4uLikJLyoqLwogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqamJkMl9hbGxvYyhzaXplX3Qgc2l6ZSwgZ2ZwX3QgZmxhZ3MpCi17Ci0JcmV0dXJuICh2b2lkICopX19nZXRfZnJlZV9wYWdlcyhmbGFncywgZ2V0X29yZGVyKHNpemUpKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGpiZDJfZnJlZSh2b2lkICpwdHIsIHNpemVfdCBzaXplKQotewotCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpcHRyLCBnZXRfb3JkZXIoc2l6ZSkpOwotfTsKK2V4dGVybiB2b2lkICpqYmQyX2FsbG9jKHNpemVfdCBzaXplLCBnZnBfdCBmbGFncyk7CitleHRlcm4gdm9pZCBqYmQyX2ZyZWUodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CiAKICNkZWZpbmUgSkJEMl9NSU5fSk9VUk5BTF9CTE9DS1MgMTAyNAogCkBAIC0yODQsMTkgKzI3Nyw4IEBACiAKICNkZWZpbmUgSl9BU1NFUlQoYXNzZXJ0KQlCVUdfT04oIShhc3NlcnQpKQogCi0jaWYgZGVmaW5lZChDT05GSUdfQlVGRkVSX0RFQlVHKQotdm9pZCBidWZmZXJfYXNzZXJ0aW9uX2ZhaWx1cmUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCk7Ci0jZGVmaW5lIEpfQVNTRVJUX0JIKGJoLCBleHByKQkJCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCWlmICghKGV4cHIpKQkJCQkJCVwKLQkJCWJ1ZmZlcl9hc3NlcnRpb25fZmFpbHVyZShiaCk7CQkJXAotCQlKX0FTU0VSVChleHByKTsJCQkJCQlcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgSl9BU1NFUlRfSkgoamgsIGV4cHIpCUpfQVNTRVJUX0JIKGpoMmJoKGpoKSwgZXhwcikKLSNlbHNlCiAjZGVmaW5lIEpfQVNTRVJUX0JIKGJoLCBleHByKQlKX0FTU0VSVChleHByKQogI2RlZmluZSBKX0FTU0VSVF9KSChqaCwgZXhwcikJSl9BU1NFUlQoZXhwcikKLSNlbmRpZgogCiAjaWYgZGVmaW5lZChKQkQyX1BBUkFOT0lEX0lPRkFJTCkKICNkZWZpbmUgSl9FWFBFQ1QoZXhwciwgd2h5Li4uKQkJSl9BU1NFUlQoZXhwcikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDEyMjFkMjMuLjdmMDcwNzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsLmgKKysrIGIvaW5jbHVkZS9saW51eC9rZXJuZWwuaApAQCAtNDQsNiArNDQsMTYgQEAKIAogI2RlZmluZSBBUlJBWV9TSVpFKGFycikgKHNpemVvZihhcnIpIC8gc2l6ZW9mKChhcnIpWzBdKSArIF9fbXVzdF9iZV9hcnJheShhcnIpKQogCisvKgorICogVGhpcyBsb29rcyBtb3JlIGNvbXBsZXggdGhhbiBpdCBzaG91bGQgYmUuIEJ1dCB3ZSBuZWVkIHRvCisgKiBnZXQgdGhlIHR5cGUgZm9yIHRoZSB+IHJpZ2h0IGluIHJvdW5kX2Rvd24gKGl0IG5lZWRzIHRvIGJlCisgKiBhcyB3aWRlIGFzIHRoZSByZXN1bHQhKSwgYW5kIHdlIHdhbnQgdG8gZXZhbHVhdGUgdGhlIG1hY3JvCisgKiBhcmd1bWVudHMganVzdCBvbmNlIGVhY2guCisgKi8KKyNkZWZpbmUgX19yb3VuZF9tYXNrKHgsIHkpICgoX190eXBlb2ZfXyh4KSkoKHkpLTEpKQorI2RlZmluZSByb3VuZF91cCh4LCB5KSAoKCgoeCktMSkgfCBfX3JvdW5kX21hc2soeCwgeSkpKzEpCisjZGVmaW5lIHJvdW5kX2Rvd24oeCwgeSkgKCh4KSAmIH5fX3JvdW5kX21hc2soeCwgeSkpCisKICNkZWZpbmUgRklFTERfU0laRU9GKHQsIGYpIChzaXplb2YoKCh0KikwKS0+ZikpCiAjZGVmaW5lIERJVl9ST1VORF9VUChuLGQpICgoKG4pICsgKGQpIC0gMSkgLyAoZCkpCiAjZGVmaW5lIHJvdW5kdXAoeCwgeSkgKCgoKHgpICsgKCh5KSAtIDEpKSAvICh5KSkgKiAoeSkpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tlcm5lbGNhcGkuaCBiL2luY2x1ZGUvbGludXgva2VybmVsY2FwaS5oCmluZGV4IGE1M2U5MzIuLjljMjY4MzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva2VybmVsY2FwaS5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsY2FwaS5oCkBAIC00OCw5ICs0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgotCi0jZGVmaW5lCUtDSV9DT05UUlVQCTAJLyogYXJnOiBzdHJ1Y3QgY2FwaV9wcm9maWxlICovCi0jZGVmaW5lCUtDSV9DT05UUkRPV04JMQkvKiBhcmc6IE5VTEwgKi8KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogCiBzdHJ1Y3QgY2FwaTIwX2FwcGwgewogCXUxNiBhcHBsaWQ7CkBAIC02NywxMSArNjUsNiBAQAogCXN0cnVjdCBza19idWZmX2hlYWQgcmVjdl9xdWV1ZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVjdl93b3JrOwogCWludCByZWxlYXNlX2luX3Byb2dyZXNzOwotCi0JLyogdWdseSBoYWNrIHRvIGFsbG93IGZvciBub3RpZmljYXRpb24gb2YgYWRkZWQvcmVtb3ZlZAotCSAqIGNvbnRyb2xsZXJzLiBUaGUgUmlnaHQgV2F5ICh0bSkgaXMga25vd24uIFhYWAotCSAqLwotCXZvaWQgKCpjYWxsYmFjaykgKHVuc2lnbmVkIGludCBjbWQsIF9fdTMyIGNvbnRyLCB2b2lkICpkYXRhKTsKIH07CiAKIHUxNiBjYXBpMjBfaXNpbnN0YWxsZWQodm9pZCk7CkBAIC04NCwxMSArNzcsMTEgQEAKIHUxNiBjYXBpMjBfZ2V0X3Byb2ZpbGUodTMyIGNvbnRyLCBzdHJ1Y3QgY2FwaV9wcm9maWxlICpwcm9mcCk7CiBpbnQgY2FwaTIwX21hbnVmYWN0dXJlcih1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqZGF0YSk7CiAKLS8qIHRlbXBvcmFyeSBoYWNrIFhYWCAqLwotdm9pZCBjYXBpMjBfc2V0X2NhbGxiYWNrKHN0cnVjdCBjYXBpMjBfYXBwbCAqYXAsIAotCQkJIHZvaWQgKCpjYWxsYmFjaykgKHVuc2lnbmVkIGludCBjbWQsIF9fdTMyIGNvbnRyLCB2b2lkICpkYXRhKSk7CisjZGVmaW5lIENBUElDVFJfVVAJCQkwCisjZGVmaW5lIENBUElDVFJfRE9XTgkJCTEKIAotCitpbnQgcmVnaXN0ZXJfY2FwaWN0cl9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKK2ludCB1bnJlZ2lzdGVyX2NhcGljdHJfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYik7CiAKICNkZWZpbmUgQ0FQSV9OT0VSUk9SICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2tleGVjLmggYi9pbmNsdWRlL2xpbnV4L2tleGVjLmgKaW5kZXggYzM1NmI2OS4uMDNlOGU4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rZXhlYy5oCisrKyBiL2luY2x1ZGUvbGludXgva2V4ZWMuaApAQCAtMTk5LDcgKzE5OSw3IEBACiAgKi8KIGV4dGVybiBzdHJ1Y3QgcmVzb3VyY2UgY3Jhc2hrX3JlczsKIHR5cGVkZWYgdTMyIG5vdGVfYnVmX3RbS0VYRUNfTk9URV9CWVRFUy80XTsKLWV4dGVybiBub3RlX2J1Zl90ICpjcmFzaF9ub3RlczsKK2V4dGVybiBub3RlX2J1Zl90IF9fcGVyY3B1ICpjcmFzaF9ub3RlczsKIGV4dGVybiB1MzIgdm1jb3JlaW5mb19ub3RlW1ZNQ09SRUlORk9fTk9URV9TSVpFLzRdOwogZXh0ZXJuIHNpemVfdCB2bWNvcmVpbmZvX3NpemU7CiBleHRlcm4gc2l6ZV90IHZtY29yZWluZm9fbWF4X3NpemU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ttb2QuaCBiL2luY2x1ZGUvbGludXgva21vZC5oCmluZGV4IDM4NGNhOGIuLmZhY2IyN2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva21vZC5oCisrKyBiL2luY2x1ZGUvbGludXgva21vZC5oCkBAIC0yNyw2ICsyNyw3IEBACiAjZGVmaW5lIEtNT0RfUEFUSF9MRU4gMjU2CiAKICNpZmRlZiBDT05GSUdfTU9EVUxFUworZXh0ZXJuIGNoYXIgbW9kcHJvYmVfcGF0aFtdOyAvKiBmb3Igc3lzY3RsICovCiAvKiBtb2Rwcm9iZSBleGl0IHN0YXR1cyBvbiBzdWNjZXNzLCAtdmUgb24gZXJyb3IuICBSZXR1cm4gdmFsdWUKICAqIHVzdWFsbHkgdXNlbGVzcyB0aG91Z2guICovCiBleHRlcm4gaW50IF9fcmVxdWVzdF9tb2R1bGUoYm9vbCB3YWl0LCBjb25zdCBjaGFyICpuYW1lLCAuLi4pIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva29iamVjdC5oIGIvaW5jbHVkZS9saW51eC9rb2JqZWN0LmgKaW5kZXggNThhZThlMDAuLjM5NTBkM2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva29iamVjdC5oCisrKyBiL2luY2x1ZGUvbGludXgva29iamVjdC5oCkBAIC0xMDYsNyArMTA2LDcgQEAKIAogc3RydWN0IGtvYmpfdHlwZSB7CiAJdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBrb2JqZWN0ICprb2JqKTsKLQlzdHJ1Y3Qgc3lzZnNfb3BzICpzeXNmc19vcHM7CisJY29uc3Qgc3RydWN0IHN5c2ZzX29wcyAqc3lzZnNfb3BzOwogCXN0cnVjdCBhdHRyaWJ1dGUgKipkZWZhdWx0X2F0dHJzOwogfTsKIApAQCAtMTE4LDkgKzExOCw5IEBACiB9OwogCiBzdHJ1Y3Qga3NldF91ZXZlbnRfb3BzIHsKLQlpbnQgKCpmaWx0ZXIpKHN0cnVjdCBrc2V0ICprc2V0LCBzdHJ1Y3Qga29iamVjdCAqa29iaik7Ci0JY29uc3QgY2hhciAqKCpuYW1lKShzdHJ1Y3Qga3NldCAqa3NldCwgc3RydWN0IGtvYmplY3QgKmtvYmopOwotCWludCAoKnVldmVudCkoc3RydWN0IGtzZXQgKmtzZXQsIHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCWludCAoKiBjb25zdCBmaWx0ZXIpKHN0cnVjdCBrc2V0ICprc2V0LCBzdHJ1Y3Qga29iamVjdCAqa29iaik7CisJY29uc3QgY2hhciAqKCogY29uc3QgbmFtZSkoc3RydWN0IGtzZXQgKmtzZXQsIHN0cnVjdCBrb2JqZWN0ICprb2JqKTsKKwlpbnQgKCogY29uc3QgdWV2ZW50KShzdHJ1Y3Qga3NldCAqa3NldCwgc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCSAgICAgIHN0cnVjdCBrb2JqX3VldmVudF9lbnYgKmVudik7CiB9OwogCkBAIC0xMzIsNyArMTMyLDcgQEAKIAkJCSBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCk7CiB9OwogCi1leHRlcm4gc3RydWN0IHN5c2ZzX29wcyBrb2JqX3N5c2ZzX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIGtvYmpfc3lzZnNfb3BzOwogCiAvKioKICAqIHN0cnVjdCBrc2V0IC0gYSBzZXQgb2Yga29iamVjdHMgb2YgYSBzcGVjaWZpYyB0eXBlLCBiZWxvbmdpbmcgdG8gYSBzcGVjaWZpYyBzdWJzeXN0ZW0uCkBAIC0xNTUsMTQgKzE1NSwxNCBAQAogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKIAlzcGlubG9ja190IGxpc3RfbG9jazsKIAlzdHJ1Y3Qga29iamVjdCBrb2JqOwotCXN0cnVjdCBrc2V0X3VldmVudF9vcHMgKnVldmVudF9vcHM7CisJY29uc3Qgc3RydWN0IGtzZXRfdWV2ZW50X29wcyAqdWV2ZW50X29wczsKIH07CiAKIGV4dGVybiB2b2lkIGtzZXRfaW5pdChzdHJ1Y3Qga3NldCAqa3NldCk7CiBleHRlcm4gaW50IF9fbXVzdF9jaGVjayBrc2V0X3JlZ2lzdGVyKHN0cnVjdCBrc2V0ICprc2V0KTsKIGV4dGVybiB2b2lkIGtzZXRfdW5yZWdpc3RlcihzdHJ1Y3Qga3NldCAqa3NldCk7CiBleHRlcm4gc3RydWN0IGtzZXQgKiBfX211c3RfY2hlY2sga3NldF9jcmVhdGVfYW5kX2FkZChjb25zdCBjaGFyICpuYW1lLAotCQkJCQkJc3RydWN0IGtzZXRfdWV2ZW50X29wcyAqdSwKKwkJCQkJCWNvbnN0IHN0cnVjdCBrc2V0X3VldmVudF9vcHMgKnUsCiAJCQkJCQlzdHJ1Y3Qga29iamVjdCAqcGFyZW50X2tvYmopOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBrc2V0ICp0b19rc2V0KHN0cnVjdCBrb2JqZWN0ICprb2JqKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rcHJvYmVzLmggYi9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaAppbmRleCAxYjY3MmY3Li5lN2QxYjJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2twcm9iZXMuaApAQCAtMTIyLDYgKzEyMiwxMSBAQAogLyogS3Byb2JlIHN0YXR1cyBmbGFncyAqLwogI2RlZmluZSBLUFJPQkVfRkxBR19HT05FCTEgLyogYnJlYWtwb2ludCBoYXMgYWxyZWFkeSBnb25lICovCiAjZGVmaW5lIEtQUk9CRV9GTEFHX0RJU0FCTEVECTIgLyogcHJvYmUgaXMgdGVtcG9yYXJpbHkgZGlzYWJsZWQgKi8KKyNkZWZpbmUgS1BST0JFX0ZMQUdfT1BUSU1JWkVECTQgLyoKKwkJCQkgICAqIHByb2JlIGlzIHJlYWxseSBvcHRpbWl6ZWQuCisJCQkJICAgKiBOT1RFOgorCQkJCSAgICogdGhpcyBmbGFnIGlzIG9ubHkgZm9yIG9wdGltaXplZF9rcHJvYmUuCisJCQkJICAgKi8KIAogLyogSGFzIHRoaXMga3Byb2JlIGdvbmUgPyAqLwogc3RhdGljIGlubGluZSBpbnQga3Byb2JlX2dvbmUoc3RydWN0IGtwcm9iZSAqcCkKQEAgLTEzNCw2ICsxMzksMTIgQEAKIHsKIAlyZXR1cm4gcC0+ZmxhZ3MgJiAoS1BST0JFX0ZMQUdfRElTQUJMRUQgfCBLUFJPQkVfRkxBR19HT05FKTsKIH0KKworLyogSXMgdGhpcyBrcHJvYmUgcmVhbGx5IHJ1bm5pbmcgb3B0aW1pemVkIHBhdGggPyAqLworc3RhdGljIGlubGluZSBpbnQga3Byb2JlX29wdGltaXplZChzdHJ1Y3Qga3Byb2JlICpwKQoreworCXJldHVybiBwLT5mbGFncyAmIEtQUk9CRV9GTEFHX09QVElNSVpFRDsKK30KIC8qCiAgKiBTcGVjaWFsIHByb2JlIHR5cGUgdGhhdCB1c2VzIHNldGptcC1sb25nam1wIHR5cGUgdHJpY2tzIHRvIHJlc3VtZQogICogZXhlY3V0aW9uIGF0IGEgc3BlY2lmaWVkIGVudHJ5IHdpdGggYSBtYXRjaGluZyBwcm90b3R5cGUgY29ycmVzcG9uZGluZwpAQCAtMjQ5LDYgKzI2MCwzOSBAQAogZXh0ZXJuIHZvaWQgZnJlZV9pbnNuX3Nsb3Qoa3Byb2JlX29wY29kZV90ICpzbG90LCBpbnQgZGlydHkpOwogZXh0ZXJuIHZvaWQga3Byb2Jlc19pbmNfbm1pc3NlZF9jb3VudChzdHJ1Y3Qga3Byb2JlICpwKTsKIAorI2lmZGVmIENPTkZJR19PUFRQUk9CRVMKKy8qCisgKiBJbnRlcm5hbCBzdHJ1Y3R1cmUgZm9yIGRpcmVjdCBqdW1wIG9wdGltaXplZCBwcm9iZQorICovCitzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSB7CisJc3RydWN0IGtwcm9iZSBrcDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CS8qIGxpc3QgZm9yIG9wdGltaXppbmcgcXVldWUgKi8KKwlzdHJ1Y3QgYXJjaF9vcHRpbWl6ZWRfaW5zbiBvcHRpbnNuOworfTsKKworLyogQXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBmdW5jdGlvbnMgZm9yIGRpcmVjdCBqdW1wIG9wdGltaXphdGlvbiAqLworZXh0ZXJuIGludCBhcmNoX3ByZXBhcmVkX29wdGluc24oc3RydWN0IGFyY2hfb3B0aW1pemVkX2luc24gKm9wdGluc24pOworZXh0ZXJuIGludCBhcmNoX2NoZWNrX29wdGltaXplZF9rcHJvYmUoc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wKTsKK2V4dGVybiBpbnQgYXJjaF9wcmVwYXJlX29wdGltaXplZF9rcHJvYmUoc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wKTsKK2V4dGVybiB2b2lkIGFyY2hfcmVtb3ZlX29wdGltaXplZF9rcHJvYmUoc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wKTsKK2V4dGVybiBpbnQgIGFyY2hfb3B0aW1pemVfa3Byb2JlKHN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlICpvcCk7CitleHRlcm4gdm9pZCBhcmNoX3Vub3B0aW1pemVfa3Byb2JlKHN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlICpvcCk7CitleHRlcm4ga3Byb2JlX29wY29kZV90ICpnZXRfb3B0aW5zbl9zbG90KHZvaWQpOworZXh0ZXJuIHZvaWQgZnJlZV9vcHRpbnNuX3Nsb3Qoa3Byb2JlX29wY29kZV90ICpzbG90LCBpbnQgZGlydHkpOworZXh0ZXJuIGludCBhcmNoX3dpdGhpbl9vcHRpbWl6ZWRfa3Byb2JlKHN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlICpvcCwKKwkJCQkJdW5zaWduZWQgbG9uZyBhZGRyKTsKKworZXh0ZXJuIHZvaWQgb3B0X3ByZV9oYW5kbGVyKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKKworI2lmZGVmIENPTkZJR19TWVNDVEwKK2V4dGVybiBpbnQgc3lzY3RsX2twcm9iZXNfb3B0aW1pemF0aW9uOworZXh0ZXJuIGludCBwcm9jX2twcm9iZXNfb3B0aW1pemF0aW9uX2hhbmRsZXIoc3RydWN0IGN0bF90YWJsZSAqdGFibGUsCisJCQkJCSAgICAgaW50IHdyaXRlLCB2b2lkIF9fdXNlciAqYnVmZmVyLAorCQkJCQkgICAgIHNpemVfdCAqbGVuZ3RoLCBsb2ZmX3QgKnBwb3MpOworI2VuZGlmCisKKyNlbmRpZiAvKiBDT05GSUdfT1BUUFJPQkVTICovCisKIC8qIEdldCB0aGUga3Byb2JlIGF0IHRoaXMgYWRkciAoaWYgYW55KSAtIGNhbGxlZCB3aXRoIHByZWVtcHRpb24gZGlzYWJsZWQgKi8KIHN0cnVjdCBrcHJvYmUgKmdldF9rcHJvYmUodm9pZCAqYWRkcik7CiB2b2lkIGtyZXRwcm9iZV9oYXNoX2xvY2soc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS9saW51eC9rdm0uaAppbmRleCBhMjRkZTBiLi42MGRmOWM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2t2bS5oCisrKyBiL2luY2x1ZGUvbGludXgva3ZtLmgKQEAgLTEwMyw3ICsxMDMsNyBAQAogCiAvKiBmb3Iga3ZtX21lbW9yeV9yZWdpb246OmZsYWdzICovCiAjZGVmaW5lIEtWTV9NRU1fTE9HX0RJUlRZX1BBR0VTICAxVUwKLQorI2RlZmluZSBLVk1fTUVNU0xPVF9JTlZBTElEICAgICAgKDFVTCA8PCAxKQogCiAvKiBmb3IgS1ZNX0lSUV9MSU5FICovCiBzdHJ1Y3Qga3ZtX2lycV9sZXZlbCB7CkBAIC00OTcsNiArNDk3LDExIEBACiAjZW5kaWYKICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1BTVyA0MgogI2RlZmluZSBLVk1fQ0FQX1BQQ19TRUdTVEFURSA0MworI2RlZmluZSBLVk1fQ0FQX0hZUEVSViA0NAorI2RlZmluZSBLVk1fQ0FQX0hZUEVSVl9WQVBJQyA0NQorI2RlZmluZSBLVk1fQ0FQX0hZUEVSVl9TUElOIDQ2CisjZGVmaW5lIEtWTV9DQVBfUENJX1NFR01FTlQgNDcKKyNkZWZpbmUgS1ZNX0NBUF9YODZfUk9CVVNUX1NJTkdMRVNURVAgNTEKIAogI2lmZGVmIEtWTV9DQVBfSVJRX1JPVVRJTkcKIApAQCAtNjkxLDggKzY5Niw5IEBACiAJX191MzIgYnVzbnI7CiAJX191MzIgZGV2Zm47CiAJX191MzIgZmxhZ3M7CisJX191MzIgc2VnbnI7CiAJdW5pb24gewotCQlfX3UzMiByZXNlcnZlZFsxMl07CisJCV9fdTMyIHJlc2VydmVkWzExXTsKIAl9OwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oCmluZGV4IGJkNWE2MTYuLmEzZmQwZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgva3ZtX2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKQEAgLTM4LDYgKzM4LDcgQEAKICNkZWZpbmUgS1ZNX1JFUV9NTVVfU1lOQyAgICAgICAgICAgNwogI2RlZmluZSBLVk1fUkVRX0tWTUNMT0NLX1VQREFURSAgICA4CiAjZGVmaW5lIEtWTV9SRVFfS0lDSyAgICAgICAgICAgICAgIDkKKyNkZWZpbmUgS1ZNX1JFUV9ERUFDVElWQVRFX0ZQVSAgICAxMAogCiAjZGVmaW5lIEtWTV9VU0VSU1BBQ0VfSVJRX1NPVVJDRV9JRAkwCiAKQEAgLTU3LDIwICs1OCwyMCBAQAogCXN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXZzW05SX0lPQlVTX0RFVlNdOwogfTsKIAotdm9pZCBrdm1faW9fYnVzX2luaXQoc3RydWN0IGt2bV9pb19idXMgKmJ1cyk7Ci12b2lkIGt2bV9pb19idXNfZGVzdHJveShzdHJ1Y3Qga3ZtX2lvX2J1cyAqYnVzKTsKLWludCBrdm1faW9fYnVzX3dyaXRlKHN0cnVjdCBrdm1faW9fYnVzICpidXMsIGdwYV90IGFkZHIsIGludCBsZW4sCi0JCSAgICAgY29uc3Qgdm9pZCAqdmFsKTsKLWludCBrdm1faW9fYnVzX3JlYWQoc3RydWN0IGt2bV9pb19idXMgKmJ1cywgZ3BhX3QgYWRkciwgaW50IGxlbiwKK2VudW0ga3ZtX2J1cyB7CisJS1ZNX01NSU9fQlVTLAorCUtWTV9QSU9fQlVTLAorCUtWTV9OUl9CVVNFUworfTsKKworaW50IGt2bV9pb19idXNfd3JpdGUoc3RydWN0IGt2bSAqa3ZtLCBlbnVtIGt2bV9idXMgYnVzX2lkeCwgZ3BhX3QgYWRkciwKKwkJICAgICBpbnQgbGVuLCBjb25zdCB2b2lkICp2YWwpOworaW50IGt2bV9pb19idXNfcmVhZChzdHJ1Y3Qga3ZtICprdm0sIGVudW0ga3ZtX2J1cyBidXNfaWR4LCBncGFfdCBhZGRyLCBpbnQgbGVuLAogCQkgICAgdm9pZCAqdmFsKTsKLWludCBfX2t2bV9pb19idXNfcmVnaXN0ZXJfZGV2KHN0cnVjdCBrdm1faW9fYnVzICpidXMsCi0JCQkgICAgICAgc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldik7Ci1pbnQga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lvX2J1cyAqYnVzLAoraW50IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KHN0cnVjdCBrdm0gKmt2bSwgZW51bSBrdm1fYnVzIGJ1c19pZHgsCiAJCQkgICAgc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldik7Ci12b2lkIF9fa3ZtX2lvX2J1c191bnJlZ2lzdGVyX2RldihzdHJ1Y3Qga3ZtX2lvX2J1cyAqYnVzLAotCQkJCSBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2KTsKLXZvaWQga3ZtX2lvX2J1c191bnJlZ2lzdGVyX2RldihzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1faW9fYnVzICpidXMsCi0JCQkgICAgICAgc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldik7CitpbnQga3ZtX2lvX2J1c191bnJlZ2lzdGVyX2RldihzdHJ1Y3Qga3ZtICprdm0sIGVudW0ga3ZtX2J1cyBidXNfaWR4LAorCQkJICAgICAgc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldik7CiAKIHN0cnVjdCBrdm1fdmNwdSB7CiAJc3RydWN0IGt2bSAqa3ZtOwpAQCAtODMsNiArODQsOCBAQAogCXN0cnVjdCBrdm1fcnVuICpydW47CiAJdW5zaWduZWQgbG9uZyByZXF1ZXN0czsKIAl1bnNpZ25lZCBsb25nIGd1ZXN0X2RlYnVnOworCWludCBzcmN1X2lkeDsKKwogCWludCBmcHVfYWN0aXZlOwogCWludCBndWVzdF9mcHVfbG9hZGVkOwogCXdhaXRfcXVldWVfaGVhZF90IHdxOwpAQCAtMTUwLDE0ICsxNTMsMTkgQEAKIAogI2VuZGlmCiAKLXN0cnVjdCBrdm0gewotCXNwaW5sb2NrX3QgbW11X2xvY2s7Ci0Jc3BpbmxvY2tfdCByZXF1ZXN0c19sb2NrOwotCXN0cnVjdCByd19zZW1hcGhvcmUgc2xvdHNfbG9jazsKLQlzdHJ1Y3QgbW1fc3RydWN0ICptbTsgLyogdXNlcnNwYWNlIHRpZWQgdG8gdGhpcyB2bSAqLworc3RydWN0IGt2bV9tZW1zbG90cyB7CiAJaW50IG5tZW1zbG90czsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90IG1lbXNsb3RzW0tWTV9NRU1PUllfU0xPVFMgKwogCQkJCQlLVk1fUFJJVkFURV9NRU1fU0xPVFNdOworfTsKKworc3RydWN0IGt2bSB7CisJc3BpbmxvY2tfdCBtbXVfbG9jazsKKwlyYXdfc3BpbmxvY2tfdCByZXF1ZXN0c19sb2NrOworCXN0cnVjdCBtdXRleCBzbG90c19sb2NrOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOyAvKiB1c2Vyc3BhY2UgdGllZCB0byB0aGlzIHZtICovCisJc3RydWN0IGt2bV9tZW1zbG90cyAqbWVtc2xvdHM7CisJc3RydWN0IHNyY3Vfc3RydWN0IHNyY3U7CiAjaWZkZWYgQ09ORklHX0tWTV9BUElDX0FSQ0hJVEVDVFVSRQogCXUzMiBic3BfdmNwdV9pZDsKIAlzdHJ1Y3Qga3ZtX3ZjcHUgKmJzcF92Y3B1OwpAQCAtMTY2LDggKzE3NCw3IEBACiAJYXRvbWljX3Qgb25saW5lX3ZjcHVzOwogCXN0cnVjdCBsaXN0X2hlYWQgdm1fbGlzdDsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKLQlzdHJ1Y3Qga3ZtX2lvX2J1cyBtbWlvX2J1czsKLQlzdHJ1Y3Qga3ZtX2lvX2J1cyBwaW9fYnVzOworCXN0cnVjdCBrdm1faW9fYnVzICpidXNlc1tLVk1fTlJfQlVTRVNdOwogI2lmZGVmIENPTkZJR19IQVZFX0tWTV9FVkVOVEZECiAJc3RydWN0IHsKIAkJc3BpbmxvY2tfdCAgICAgICAgbG9jazsKQEAgLTI0OSwxMyArMjU2LDIwIEBACiBpbnQgX19rdm1fc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLAogCQkJICAgIHN0cnVjdCBrdm1fdXNlcnNwYWNlX21lbW9yeV9yZWdpb24gKm1lbSwKIAkJCSAgICBpbnQgdXNlcl9hbGxvYyk7Ci1pbnQga3ZtX2FyY2hfc2V0X21lbW9yeV9yZWdpb24oc3RydWN0IGt2bSAqa3ZtLAoraW50IGt2bV9hcmNoX3ByZXBhcmVfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCisJCQkJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCwKKwkJCQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90IG9sZCwKKwkJCQlzdHJ1Y3Qga3ZtX3VzZXJzcGFjZV9tZW1vcnlfcmVnaW9uICptZW0sCisJCQkJaW50IHVzZXJfYWxsb2MpOwordm9pZCBrdm1fYXJjaF9jb21taXRfbWVtb3J5X3JlZ2lvbihzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbiAqbWVtLAogCQkJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3Qgb2xkLAogCQkJCWludCB1c2VyX2FsbG9jKTsKIHZvaWQga3ZtX2Rpc2FibGVfbGFyZ2VwYWdlcyh2b2lkKTsKIHZvaWQga3ZtX2FyY2hfZmx1c2hfc2hhZG93KHN0cnVjdCBrdm0gKmt2bSk7CiBnZm5fdCB1bmFsaWFzX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7CitnZm5fdCB1bmFsaWFzX2dmbl9pbnN0YW50aWF0aW9uKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTsKKwogc3RydWN0IHBhZ2UgKmdmbl90b19wYWdlKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKTsKIHVuc2lnbmVkIGxvbmcgZ2ZuX3RvX2h2YShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7CiB2b2lkIGt2bV9yZWxlYXNlX3BhZ2VfY2xlYW4oc3RydWN0IHBhZ2UgKnBhZ2UpOwpAQCAtMjY0LDYgKzI3OCw5IEBACiB2b2lkIGt2bV9zZXRfcGFnZV9hY2Nlc3NlZChzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKIHBmbl90IGdmbl90b19wZm4oc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pOworcGZuX3QgZ2ZuX3RvX3Bmbl9tZW1zbG90KHN0cnVjdCBrdm0gKmt2bSwKKwkJCSBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90LCBnZm5fdCBnZm4pOworaW50IG1lbXNsb3RfaWQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pOwogdm9pZCBrdm1fcmVsZWFzZV9wZm5fZGlydHkocGZuX3QpOwogdm9pZCBrdm1fcmVsZWFzZV9wZm5fY2xlYW4ocGZuX3QgcGZuKTsKIHZvaWQga3ZtX3NldF9wZm5fZGlydHkocGZuX3QgcGZuKTsKQEAgLTI4Myw2ICszMDAsNyBAQAogaW50IGt2bV9jbGVhcl9ndWVzdChzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgdW5zaWduZWQgbG9uZyBsZW4pOwogc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqZ2ZuX3RvX21lbXNsb3Qoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pOwogaW50IGt2bV9pc192aXNpYmxlX2dmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7Cit1bnNpZ25lZCBsb25nIGt2bV9ob3N0X3BhZ2Vfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7CiB2b2lkIG1hcmtfcGFnZV9kaXJ0eShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbik7CiAKIHZvaWQga3ZtX3ZjcHVfYmxvY2soc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTsKQEAgLTM4Myw2ICs0MDEsNyBAQAogCXN0cnVjdCB3b3JrX3N0cnVjdCBpbnRlcnJ1cHRfd29yazsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJaW50IGFzc2lnbmVkX2Rldl9pZDsKKwlpbnQgaG9zdF9zZWducjsKIAlpbnQgaG9zdF9idXNucjsKIAlpbnQgaG9zdF9kZXZmbjsKIAl1bnNpZ25lZCBpbnQgZW50cmllc19ucjsKQEAgLTQyOSw4ICs0NDgsNyBAQAogI2RlZmluZSBLVk1fSU9NTVVfQ0FDSEVfQ09IRVJFTkNZCTB4MQogCiAjaWZkZWYgQ09ORklHX0lPTU1VX0FQSQotaW50IGt2bV9pb21tdV9tYXBfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBiYXNlX2dmbiwKLQkJCXVuc2lnbmVkIGxvbmcgbnBhZ2VzKTsKK2ludCBrdm1faW9tbXVfbWFwX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCk7CiBpbnQga3ZtX2lvbW11X21hcF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pOwogaW50IGt2bV9pb21tdV91bm1hcF9ndWVzdChzdHJ1Y3Qga3ZtICprdm0pOwogaW50IGt2bV9hc3NpZ25fZGV2aWNlKHN0cnVjdCBrdm0gKmt2bSwKQEAgLTQ4MCwxMSArNDk4LDYgQEAKIAljdXJyZW50LT5mbGFncyAmPSB+UEZfVkNQVTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgbWVtc2xvdF9pZChzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QpCi17Ci0JcmV0dXJuIHNsb3QgLSBrdm0tPm1lbXNsb3RzOwotfQotCiBzdGF0aWMgaW5saW5lIGdwYV90IGdmbl90b19ncGEoZ2ZuX3QgZ2ZuKQogewogCXJldHVybiAoZ3BhX3QpZ2ZuIDw8IFBBR0VfU0hJRlQ7CkBAIC01MzIsNiArNTQ1LDEwIEBACiB9CiAjZW5kaWYKIAorI2lmbmRlZiBLVk1fQVJDSF9IQVNfVU5BTElBU19JTlNUQU5USUFUSU9OCisjZGVmaW5lIHVuYWxpYXNfZ2ZuX2luc3RhbnRpYXRpb24gdW5hbGlhc19nZm4KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0hBVkVfS1ZNX0lSUUNISVAKIAogI2RlZmluZSBLVk1fTUFYX0lSUV9ST1VURVMgMTAyNApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9saXN0LmggYi9pbmNsdWRlL2xpbnV4L2xpc3QuaAppbmRleCA1ZDljNjU1Li44MzkyODg0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xpc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xpc3QuaApAQCAtNDk4LDcgKzQ5OCw3IEBACiAJICAgICBwb3MgPSBuLCBuID0gbGlzdF9lbnRyeShuLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpuKSwgbWVtYmVyKSkKIAogLyoqCi0gKiBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfY29udGludWUKKyAqIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9jb250aW51ZSAtIGNvbnRpbnVlIGxpc3QgaXRlcmF0aW9uIHNhZmUgYWdhaW5zdCByZW1vdmFsCiAgKiBAcG9zOgl0aGUgdHlwZSAqIHRvIHVzZSBhcyBhIGxvb3AgY3Vyc29yLgogICogQG46CQlhbm90aGVyIHR5cGUgKiB0byB1c2UgYXMgdGVtcG9yYXJ5IHN0b3JhZ2UKICAqIEBoZWFkOgl0aGUgaGVhZCBmb3IgeW91ciBsaXN0LgpAQCAtNTE0LDcgKzUxNCw3IEBACiAJICAgICBwb3MgPSBuLCBuID0gbGlzdF9lbnRyeShuLT5tZW1iZXIubmV4dCwgdHlwZW9mKCpuKSwgbWVtYmVyKSkKIAogLyoqCi0gKiBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfZnJvbQorICogbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX2Zyb20gLSBpdGVyYXRlIG92ZXIgbGlzdCBmcm9tIGN1cnJlbnQgcG9pbnQgc2FmZSBhZ2FpbnN0IHJlbW92YWwKICAqIEBwb3M6CXRoZSB0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCiAgKiBAbjoJCWFub3RoZXIgdHlwZSAqIHRvIHVzZSBhcyB0ZW1wb3Jhcnkgc3RvcmFnZQogICogQGhlYWQ6CXRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCkBAIC01MjksNyArNTI5LDcgQEAKIAkgICAgIHBvcyA9IG4sIG4gPSBsaXN0X2VudHJ5KG4tPm1lbWJlci5uZXh0LCB0eXBlb2YoKm4pLCBtZW1iZXIpKQogCiAvKioKLSAqIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlCisgKiBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZSAtIGl0ZXJhdGUgYmFja3dhcmRzIG92ZXIgbGlzdCBzYWZlIGFnYWluc3QgcmVtb3ZhbAogICogQHBvczoJdGhlIHR5cGUgKiB0byB1c2UgYXMgYSBsb29wIGN1cnNvci4KICAqIEBuOgkJYW5vdGhlciB0eXBlICogdG8gdXNlIGFzIHRlbXBvcmFyeSBzdG9yYWdlCiAgKiBAaGVhZDoJdGhlIGhlYWQgZm9yIHlvdXIgbGlzdC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGxjLmggYi9pbmNsdWRlL2xpbnV4L2xsYy5oCmluZGV4IDc3MzM1ODU2Li5hZDcwNzRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xsYy5oCisrKyBiL2luY2x1ZGUvbGludXgvbGxjLmgKQEAgLTM2LDYgKzM2LDcgQEAKIAlMTENfT1BUX0JVU1lfVE1SX0VYUCwJLyogYnVzeSBzdGF0ZSBleHBpcmUgdGltZSAoc2VjcykuICovCiAJTExDX09QVF9UWF9XSU4sCQkvKiB0eCB3aW5kb3cgc2l6ZS4gKi8KIAlMTENfT1BUX1JYX1dJTiwJCS8qIHJ4IHdpbmRvdyBzaXplLiAqLworCUxMQ19PUFRfUEtUSU5GTywJLyogYW5jaWxsYXJ5IHBhY2tldCBpbmZvcm1hdGlvbi4gKi8KIAlMTENfT1BUX01BWAogfTsKIApAQCAtNzAsNiArNzEsMTIgQEAKICNkZWZpbmUgTExDX1NBUF9STQkweEQ0CQkvKiBSZXNvdXJjZSBNYW5hZ2VtZW50IAkJKi8KICNkZWZpbmUgTExDX1NBUF9HTE9CQUwJMHhGRgkJLyogR2xvYmFsIFNBUC4gCQkJKi8KIAorc3RydWN0IGxsY19wa3RpbmZvIHsKKwlpbnQgbHBpX2lmaW5kZXg7CisJdW5zaWduZWQgY2hhciBscGlfc2FwOworCXVuc2lnbmVkIGNoYXIgbHBpX21hY1tJRkhXQUREUkxFTl07Cit9OworCiAjaWZkZWYgX19LRVJORUxfXwogI2RlZmluZSBMTENfU0FQX0RZTl9TVEFSVAkweEMwCiAjZGVmaW5lIExMQ19TQVBfRFlOX1NUT1AJMHhERQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaAppbmRleCAxMDIwNmE4Li5hMDM5NzdhOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKKysrIGIvaW5jbHVkZS9saW51eC9sb2NrZGVwLmgKQEAgLTEyLDYgKzEyLDEwIEBACiBzdHJ1Y3QgdGFza19zdHJ1Y3Q7CiBzdHJ1Y3QgbG9ja2RlcF9tYXA7CiAKKy8qIGZvciBzeXNjdGwgKi8KK2V4dGVybiBpbnQgcHJvdmVfbG9ja2luZzsKK2V4dGVybiBpbnQgbG9ja19zdGF0OworCiAjaWZkZWYgQ09ORklHX0xPQ0tERVAKIAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbHJ1X2NhY2hlLmggYi9pbmNsdWRlL2xpbnV4L2xydV9jYWNoZS5oCmluZGV4IDNhMmIyZDkuLmRlNDhkMTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbHJ1X2NhY2hlLmgKKysrIGIvaW5jbHVkZS9saW51eC9scnVfY2FjaGUuaApAQCAtNjQsNyArNjQsNyBAQAogICB1c3VhbGx5IHRoZSBjb25kaXRpb24gaXMgc29mdGVuZWQgdG8gcmVnaW9ucyB0aGF0IF9tYXlfIGhhdmUgYmVlbiB0YXJnZXQgb2YKICAgaW4tZmxpZ2h0IFdSSVRFIElPLCBlLmcuIGJ5IG9ubHkgbGF6aWx5IGNsZWFyaW5nIHRoZSBvbi1kaXNrIHdyaXRlLWludGVudAogICBiaXRtYXAsIHRyYWRpbmcgZnJlcXVlbmN5IG9mIG1ldGEgZGF0YSB0cmFuc2FjdGlvbnMgYWdhaW5zdCBhbW91bnQgb2YKLSAgKHBvc3NpYmx5IHVubmVjY2Vzc2FyeSkgcmVzeW5jIHRyYWZmaWMuCisgIChwb3NzaWJseSB1bm5lY2Vzc2FyeSkgcmVzeW5jIHRyYWZmaWMuCiAKICAgSWYgd2Ugc2V0IGEgaGFyZCBsaW1pdCBvbiB0aGUgYXJlYSB0aGF0IG1heSBiZSAiaG90IiBhdCBhbnkgZ2l2ZW4gdGltZSwgd2UKICAgbGltaXQgdGhlIGFtb3VudCBvZiByZXN5bmMgdHJhZmZpYyBuZWVkZWQgZm9yIGNyYXNoIHJlY292ZXJ5LgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tYWdpYy5oIGIvaW5jbHVkZS9saW51eC9tYWdpYy5oCmluZGV4IDc2Mjg1ZTAuLmViOTgwMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWFnaWMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21hZ2ljLmgKQEAgLTUyLDcgKzUyLDYgQEAKICNkZWZpbmUgQ0dST1VQX1NVUEVSX01BR0lDCTB4MjdlMGViCiAKICNkZWZpbmUgRlVURVhGU19TVVBFUl9NQUdJQwkweEJBRDFERUEKLSNkZWZpbmUgSU5PVElGWUZTX1NVUEVSX01BR0lDCTB4MkJBRDFERUEKIAogI2RlZmluZSBTVEFDS19FTkRfTUFHSUMJCTB4NTdBQzZFOUQKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmggYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAppbmRleCAxZjliMTE5Li40NDMwMWM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaApAQCAtMTI0LDcgKzEyNCw2IEBACiAJcmV0dXJuIGZhbHNlOwogfQogCi1leHRlcm4gYm9vbCBtZW1fY2dyb3VwX29vbV9jYWxsZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKTsKIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfZmlsZV9tYXBwZWQoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB2YWwpOwogdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX3NvZnRfbGltaXRfcmVjbGFpbShzdHJ1Y3Qgem9uZSAqem9uZSwgaW50IG9yZGVyLAogCQkJCQkJZ2ZwX3QgZ2ZwX21hc2ssIGludCBuaWQsCkBAIC0yNTgsMTEgKzI1Nyw2IEBACiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBtZW1fY2dyb3VwX29vbV9jYWxsZWQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQotewotCXJldHVybiBmYWxzZTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQKIG1lbV9jZ3JvdXBfaW5hY3RpdmVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvODhwbTg2MDcuaCBiL2luY2x1ZGUvbGludXgvbWZkLzg4cG04NjA3LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY0MWI0MjguLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvODhwbTg2MDcuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxNyArMCwwIEBACi0vKgotICogTWFydmVsbCA4OFBNODYwNyBJbnRlcmZhY2UKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4KLSAqIAlIYW9qaWFuIFpodWFuZyA8aGFvamlhbi56aHVhbmdAbWFydmVsbC5jb20+Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9fTElOVVhfTUZEXzg4UE04NjA3X0gKLSNkZWZpbmUgX19MSU5VWF9NRkRfODhQTTg2MDdfSAotCi1lbnVtIHsKLQlQTTg2MDdfSURfQlVDSzEgPSAwLAotCVBNODYwN19JRF9CVUNLMiwKLQlQTTg2MDdfSURfQlVDSzMsCi0KLQlQTTg2MDdfSURfTERPMSwKLQlQTTg2MDdfSURfTERPMiwKLQlQTTg2MDdfSURfTERPMywKLQlQTTg2MDdfSURfTERPNCwKLQlQTTg2MDdfSURfTERPNSwKLQlQTTg2MDdfSURfTERPNiwKLQlQTTg2MDdfSURfTERPNywKLQlQTTg2MDdfSURfTERPOCwKLQlQTTg2MDdfSURfTERPOSwKLQlQTTg2MDdfSURfTERPMTAsCi0JUE04NjA3X0lEX0xETzEyLAotCVBNODYwN19JRF9MRE8xNCwKLQotCVBNODYwN19JRF9SR19NQVgsCi19OwotCi0jZGVmaW5lIENISVBfSUQJCQkJKDB4NDApCi0jZGVmaW5lIENISVBfSURfTUFTSwkJCSgweEY4KQotCi0vKiBJbnRlcnJ1cHQgUmVnaXN0ZXJzICovCi0jZGVmaW5lIFBNODYwN19TVEFUVVNfMQkJCSgweDAxKQotI2RlZmluZSBQTTg2MDdfU1RBVFVTXzIJCQkoMHgwMikKLSNkZWZpbmUgUE04NjA3X0lOVF9TVEFUVVMxCQkoMHgwMykKLSNkZWZpbmUgUE04NjA3X0lOVF9TVEFUVVMyCQkoMHgwNCkKLSNkZWZpbmUgUE04NjA3X0lOVF9TVEFUVVMzCQkoMHgwNSkKLSNkZWZpbmUgUE04NjA3X0lOVF9NQVNLXzEJCSgweDA2KQotI2RlZmluZSBQTTg2MDdfSU5UX01BU0tfMgkJKDB4MDcpCi0jZGVmaW5lIFBNODYwN19JTlRfTUFTS18zCQkoMHgwOCkKLQotLyogUmVndWxhdG9yIENvbnRyb2wgUmVnaXN0ZXJzICovCi0jZGVmaW5lIFBNODYwN19MRE8xCQkJKDB4MTApCi0jZGVmaW5lIFBNODYwN19MRE8yCQkJKDB4MTEpCi0jZGVmaW5lIFBNODYwN19MRE8zCQkJKDB4MTIpCi0jZGVmaW5lIFBNODYwN19MRE80CQkJKDB4MTMpCi0jZGVmaW5lIFBNODYwN19MRE81CQkJKDB4MTQpCi0jZGVmaW5lIFBNODYwN19MRE82CQkJKDB4MTUpCi0jZGVmaW5lIFBNODYwN19MRE83CQkJKDB4MTYpCi0jZGVmaW5lIFBNODYwN19MRE84CQkJKDB4MTcpCi0jZGVmaW5lIFBNODYwN19MRE85CQkJKDB4MTgpCi0jZGVmaW5lIFBNODYwN19MRE8xMAkJCSgweDE5KQotI2RlZmluZSBQTTg2MDdfTERPMTIJCQkoMHgxQSkKLSNkZWZpbmUgUE04NjA3X0xETzE0CQkJKDB4MUIpCi0jZGVmaW5lIFBNODYwN19TTEVFUF9NT0RFMQkJKDB4MUMpCi0jZGVmaW5lIFBNODYwN19TTEVFUF9NT0RFMgkJKDB4MUQpCi0jZGVmaW5lIFBNODYwN19TTEVFUF9NT0RFMwkJKDB4MUUpCi0jZGVmaW5lIFBNODYwN19TTEVFUF9NT0RFNAkJKDB4MUYpCi0jZGVmaW5lIFBNODYwN19HTwkJCSgweDIwKQotI2RlZmluZSBQTTg2MDdfU0xFRVBfQlVDSzEJCSgweDIxKQotI2RlZmluZSBQTTg2MDdfU0xFRVBfQlVDSzIJCSgweDIyKQotI2RlZmluZSBQTTg2MDdfU0xFRVBfQlVDSzMJCSgweDIzKQotI2RlZmluZSBQTTg2MDdfQlVDSzEJCQkoMHgyNCkKLSNkZWZpbmUgUE04NjA3X0JVQ0syCQkJKDB4MjUpCi0jZGVmaW5lIFBNODYwN19CVUNLMwkJCSgweDI2KQotI2RlZmluZSBQTTg2MDdfQlVDS19DT05UUk9MUwkJKDB4MjcpCi0jZGVmaW5lIFBNODYwN19TVVBQTElFU19FTjExCQkoMHgyQikKLSNkZWZpbmUgUE04NjA3X1NVUFBMSUVTX0VOMTIJCSgweDJDKQotI2RlZmluZSBQTTg2MDdfR1JPVVAxCQkJKDB4MkQpCi0jZGVmaW5lIFBNODYwN19HUk9VUDIJCQkoMHgyRSkKLSNkZWZpbmUgUE04NjA3X0dST1VQMwkJCSgweDJGKQotI2RlZmluZSBQTTg2MDdfR1JPVVA0CQkJKDB4MzApCi0jZGVmaW5lIFBNODYwN19HUk9VUDUJCQkoMHgzMSkKLSNkZWZpbmUgUE04NjA3X0dST1VQNgkJCSgweDMyKQotI2RlZmluZSBQTTg2MDdfU1VQUExJRVNfRU4yMQkJKDB4MzMpCi0jZGVmaW5lIFBNODYwN19TVVBQTElFU19FTjIyCQkoMHgzNCkKLQotLyogUlRDIENvbnRyb2wgUmVnaXN0ZXJzICovCi0jZGVmaW5lIFBNODYwN19SVEMxCQkJKDB4QTApCi0jZGVmaW5lIFBNODYwN19SVENfQ09VTlRFUjEJCSgweEExKQotI2RlZmluZSBQTTg2MDdfUlRDX0NPVU5URVIyCQkoMHhBMikKLSNkZWZpbmUgUE04NjA3X1JUQ19DT1VOVEVSMwkJKDB4QTMpCi0jZGVmaW5lIFBNODYwN19SVENfQ09VTlRFUjQJCSgweEE0KQotI2RlZmluZSBQTTg2MDdfUlRDX0VYUElSRTEJCSgweEE1KQotI2RlZmluZSBQTTg2MDdfUlRDX0VYUElSRTIJCSgweEE2KQotI2RlZmluZSBQTTg2MDdfUlRDX0VYUElSRTMJCSgweEE3KQotI2RlZmluZSBQTTg2MDdfUlRDX0VYUElSRTQJCSgweEE4KQotI2RlZmluZSBQTTg2MDdfUlRDX1RSSU0xCQkoMHhBOSkKLSNkZWZpbmUgUE04NjA3X1JUQ19UUklNMgkJKDB4QUEpCi0jZGVmaW5lIFBNODYwN19SVENfVFJJTTMJCSgweEFCKQotI2RlZmluZSBQTTg2MDdfUlRDX1RSSU00CQkoMHhBQykKLSNkZWZpbmUgUE04NjA3X1JUQ19NSVNDMQkJKDB4QUQpCi0jZGVmaW5lIFBNODYwN19SVENfTUlTQzIJCSgweEFFKQotI2RlZmluZSBQTTg2MDdfUlRDX01JU0MzCQkoMHhBRikKLQotLyogTWlzYyBSZWdpc3RlcnMgKi8KLSNkZWZpbmUgUE04NjA3X0NISVBfSUQJCQkoMHgwMCkKLSNkZWZpbmUgUE04NjA3X0xETzEJCQkoMHgxMCkKLSNkZWZpbmUgUE04NjA3X0RWQzMJCQkoMHgyNikKLSNkZWZpbmUgUE04NjA3X01JU0MxCQkJKDB4NDApCi0KLS8qIGJpdCBkZWZpbml0aW9ucyBmb3IgUE04NjA3IGV2ZW50cyAqLwotI2RlZmluZSBQTTg2MDdfRVZFTlRfT05LRVkJCSgxIDw8IDApCi0jZGVmaW5lIFBNODYwN19FVkVOVF9FWFRPTgkJKDEgPDwgMSkKLSNkZWZpbmUgUE04NjA3X0VWRU5UX0NIRwkJKDEgPDwgMikKLSNkZWZpbmUgUE04NjA3X0VWRU5UX0JBVAkJKDEgPDwgMykKLSNkZWZpbmUgUE04NjA3X0VWRU5UX1JUQwkJKDEgPDwgNCkKLSNkZWZpbmUgUE04NjA3X0VWRU5UX0NDCQkJKDEgPDwgNSkKLSNkZWZpbmUgUE04NjA3X0VWRU5UX1ZCQVQJCSgxIDw8IDgpCi0jZGVmaW5lIFBNODYwN19FVkVOVF9WQ0hHCQkoMSA8PCA5KQotI2RlZmluZSBQTTg2MDdfRVZFTlRfVlNZUwkJKDEgPDwgMTApCi0jZGVmaW5lIFBNODYwN19FVkVOVF9USU5UCQkoMSA8PCAxMSkKLSNkZWZpbmUgUE04NjA3X0VWRU5UX0dQQURDMAkJKDEgPDwgMTIpCi0jZGVmaW5lIFBNODYwN19FVkVOVF9HUEFEQzEJCSgxIDw8IDEzKQotI2RlZmluZSBQTTg2MDdfRVZFTlRfR1BBREMyCQkoMSA8PCAxNCkKLSNkZWZpbmUgUE04NjA3X0VWRU5UX0dQQURDMwkJKDEgPDwgMTUpCi0jZGVmaW5lIFBNODYwN19FVkVOVF9BVURJT19TSE9SVAkoMSA8PCAxNikKLSNkZWZpbmUgUE04NjA3X0VWRU5UX1BFTgkJKDEgPDwgMTcpCi0jZGVmaW5lIFBNODYwN19FVkVOVF9IRUFEU0VUCQkoMSA8PCAxOCkKLSNkZWZpbmUgUE04NjA3X0VWRU5UX0hPT0sJCSgxIDw8IDE5KQotI2RlZmluZSBQTTg2MDdfRVZFTlRfTUlDSU4JCSgxIDw8IDIwKQotI2RlZmluZSBQTTg2MDdfRVZFTlRfQ0hHX1RJTUVPVVQJKDEgPDwgMjEpCi0jZGVmaW5lIFBNODYwN19FVkVOVF9DSEdfRE9ORQkJKDEgPDwgMjIpCi0jZGVmaW5lIFBNODYwN19FVkVOVF9DSEdfRkFVTFQJCSgxIDw8IDIzKQotCi0vKiBiaXQgZGVmaW5pdGlvbnMgb2YgU3RhdHVzIFF1ZXJ5IEludGVyZmFjZSAqLwotI2RlZmluZSBQTTg2MDdfU1RBVFVTX0NDCQkoMSA8PCAzKQotI2RlZmluZSBQTTg2MDdfU1RBVFVTX1BFTgkJKDEgPDwgNCkKLSNkZWZpbmUgUE04NjA3X1NUQVRVU19IRUFEU0VUCQkoMSA8PCA1KQotI2RlZmluZSBQTTg2MDdfU1RBVFVTX0hPT0sJCSgxIDw8IDYpCi0jZGVmaW5lIFBNODYwN19TVEFUVVNfTUlDSU4JCSgxIDw8IDcpCi0jZGVmaW5lIFBNODYwN19TVEFUVVNfT05LRVkJCSgxIDw8IDgpCi0jZGVmaW5lIFBNODYwN19TVEFUVVNfRVhUT04JCSgxIDw8IDkpCi0jZGVmaW5lIFBNODYwN19TVEFUVVNfQ0hHCQkoMSA8PCAxMCkKLSNkZWZpbmUgUE04NjA3X1NUQVRVU19CQVQJCSgxIDw8IDExKQotI2RlZmluZSBQTTg2MDdfU1RBVFVTX1ZCVVMJCSgxIDw8IDEyKQotI2RlZmluZSBQTTg2MDdfU1RBVFVTX09WCQkoMSA8PCAxMykKLQotLyogYml0IGRlZmluaXRpb25zIG9mIEJVQ0szICovCi0jZGVmaW5lIFBNODYwN19CVUNLM19ET1VCTEUJCSgxIDw8IDYpCi0KLS8qIGJpdCBkZWZpbml0aW9ucyBvZiBNaXNjMSAqLwotI2RlZmluZSBQTTg2MDdfTUlTQzFfUEkyQwkJKDEgPDwgMCkKLQotLyogSW50ZXJydXB0IE51bWJlciBpbiA4OFBNODYwNyAqLwotZW51bSB7Ci0JUE04NjA3X0lSUV9PTktFWSA9IDAsCi0JUE04NjA3X0lSUV9FWFRPTiwKLQlQTTg2MDdfSVJRX0NIRywKLQlQTTg2MDdfSVJRX0JBVCwKLQlQTTg2MDdfSVJRX1JUQywKLQlQTTg2MDdfSVJRX1ZCQVQgPSA4LAotCVBNODYwN19JUlFfVkNIRywKLQlQTTg2MDdfSVJRX1ZTWVMsCi0JUE04NjA3X0lSUV9USU5ULAotCVBNODYwN19JUlFfR1BBREMwLAotCVBNODYwN19JUlFfR1BBREMxLAotCVBNODYwN19JUlFfR1BBREMyLAotCVBNODYwN19JUlFfR1BBREMzLAotCVBNODYwN19JUlFfQVVESU9fU0hPUlQgPSAxNiwKLQlQTTg2MDdfSVJRX1BFTiwKLQlQTTg2MDdfSVJRX0hFQURTRVQsCi0JUE04NjA3X0lSUV9IT09LLAotCVBNODYwN19JUlFfTUlDSU4sCi0JUE04NjA3X0lSUV9DSEdfRkFJTCwKLQlQTTg2MDdfSVJRX0NIR19ET05FLAotCVBNODYwN19JUlFfQ0hHX0ZBVUxULAotfTsKLQotZW51bSB7Ci0JUE04NjA3X0NISVBfQTAgPSAweDQwLAotCVBNODYwN19DSElQX0ExID0gMHg0MSwKLQlQTTg2MDdfQ0hJUF9CMCA9IDB4NDgsCi19OwotCi0KLXN0cnVjdCBwbTg2MDdfY2hpcCB7Ci0Jc3RydWN0IGRldmljZQkJKmRldjsKLQlzdHJ1Y3QgbXV0ZXgJCWlvX2xvY2s7Ci0Jc3RydWN0IGkyY19jbGllbnQJKmNsaWVudDsKLQotCWludCAoKnJlYWQpKHN0cnVjdCBwbTg2MDdfY2hpcCAqY2hpcCwgaW50IHJlZywgaW50IGJ5dGVzLCB2b2lkICpkZXN0KTsKLQlpbnQgKCp3cml0ZSkoc3RydWN0IHBtODYwN19jaGlwICpjaGlwLCBpbnQgcmVnLCBpbnQgYnl0ZXMsIHZvaWQgKnNyYyk7Ci0KLQlpbnQJCQlidWNrM19kb3VibGU7CS8qIERWQyByYW1wIHNsb3BlIGRvdWJsZSAqLwotCXVuc2lnbmVkIGNoYXIJCWNoaXBfaWQ7Ci0KLX07Ci0KLSNkZWZpbmUgUE04NjA3X01BWF9SRUdVTEFUT1IJMTUJLyogMyBCdWNrcywgMTIgTERPcyAqLwotCi1lbnVtIHsKLQlHSTJDX1BPUlQgPSAwLAotCVBJMkNfUE9SVCwKLX07Ci0KLXN0cnVjdCBwbTg2MDdfcGxhdGZvcm1fZGF0YSB7Ci0JaW50CWkyY19wb3J0OwkvKiBDb250cm9sbGVkIGJ5IEdJMkMgb3IgUEkyQyAqLwotCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICpyZWd1bGF0b3JbUE04NjA3X01BWF9SRUdVTEFUT1JdOwotfTsKLQotZXh0ZXJuIGludCBwbTg2MDdfcmVnX3JlYWQoc3RydWN0IHBtODYwN19jaGlwICosIGludCk7Ci1leHRlcm4gaW50IHBtODYwN19yZWdfd3JpdGUoc3RydWN0IHBtODYwN19jaGlwICosIGludCwgdW5zaWduZWQgY2hhcik7Ci1leHRlcm4gaW50IHBtODYwN19idWxrX3JlYWQoc3RydWN0IHBtODYwN19jaGlwICosIGludCwgaW50LAotCQkJICAgIHVuc2lnbmVkIGNoYXIgKik7Ci1leHRlcm4gaW50IHBtODYwN19idWxrX3dyaXRlKHN0cnVjdCBwbTg2MDdfY2hpcCAqLCBpbnQsIGludCwKLQkJCSAgICAgdW5zaWduZWQgY2hhciAqKTsKLWV4dGVybiBpbnQgcG04NjA3X3NldF9iaXRzKHN0cnVjdCBwbTg2MDdfY2hpcCAqLCBpbnQsIHVuc2lnbmVkIGNoYXIsCi0JCQkgICB1bnNpZ25lZCBjaGFyKTsKLSNlbmRpZiAvKiBfX0xJTlVYX01GRF84OFBNODYwN19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC84OHBtODYweC5oIGIvaW5jbHVkZS9saW51eC9tZmQvODhwbTg2MHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2Y5MmM1ZgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbWZkLzg4cG04NjB4LmgKQEAgLTAsMCArMSwzNzUgQEAKKy8qCisgKiBNYXJ2ZWxsIDg4UE04NjB4IEludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICogCUhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9NRkRfODhQTTg2MFhfSAorI2RlZmluZSBfX0xJTlVYX01GRF84OFBNODYwWF9ICisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2RlZmluZSBNRkRfTkFNRV9TSVpFCQkoNDApCisKK2VudW0geworCUNISVBfSU5WQUxJRCA9IDAsCisJQ0hJUF9QTTg2MDYsCisJQ0hJUF9QTTg2MDcsCisJQ0hJUF9NQVgsCit9OworCitlbnVtIHsKKwlQTTg2MDZfSURfSU5WQUxJRCwKKwlQTTg2MDZfSURfQkFDS0xJR0hULAorCVBNODYwNl9JRF9MRUQsCisJUE04NjA2X0lEX1ZJQlJBVE9SLAorCVBNODYwNl9JRF9UT1VDSCwKKwlQTTg2MDZfSURfU09VTkQsCisJUE04NjA2X0lEX0NIQVJHRVIsCisJUE04NjA2X0lEX01BWCwKK307CisKK2VudW0geworCVBNODYwNl9CQUNLTElHSFQxID0gMCwKKwlQTTg2MDZfQkFDS0xJR0hUMiwKKwlQTTg2MDZfQkFDS0xJR0hUMywKK307CisKK2VudW0geworCVBNODYwNl9MRUQxX1JFRCA9IDAsCisJUE04NjA2X0xFRDFfR1JFRU4sCisJUE04NjA2X0xFRDFfQkxVRSwKKwlQTTg2MDZfTEVEMl9SRUQsCisJUE04NjA2X0xFRDJfR1JFRU4sCisJUE04NjA2X0xFRDJfQkxVRSwKKwlQTTg2MDdfTEVEX1ZJQlJBVE9SLAorfTsKKworCisvKiA4NjA2IFJlZ2lzdGVycyAqLworI2RlZmluZSBQTTg2MDZfRENNX0JPT1NUCQkoMHgwMCkKKyNkZWZpbmUgUE04NjA2X1BXTQkJCSgweDAxKQorCisvKiBCYWNrbGlnaHQgUmVnaXN0ZXJzICovCisjZGVmaW5lIFBNODYwNl9XTEVEMUEJCQkoMHgwMikKKyNkZWZpbmUgUE04NjA2X1dMRUQxQgkJCSgweDAzKQorI2RlZmluZSBQTTg2MDZfV0xFRDJBCQkJKDB4MDQpCisjZGVmaW5lIFBNODYwNl9XTEVEMkIJCQkoMHgwNSkKKyNkZWZpbmUgUE04NjA2X1dMRUQzQQkJCSgweDA2KQorI2RlZmluZSBQTTg2MDZfV0xFRDNCCQkJKDB4MDcpCisKKy8qIExFRCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE04NjA2X1JHQjJBCQkJKDB4MDgpCisjZGVmaW5lIFBNODYwNl9SR0IyQgkJCSgweDA5KQorI2RlZmluZSBQTTg2MDZfUkdCMkMJCQkoMHgwQSkKKyNkZWZpbmUgUE04NjA2X1JHQjJECQkJKDB4MEIpCisjZGVmaW5lIFBNODYwNl9SR0IxQQkJCSgweDBDKQorI2RlZmluZSBQTTg2MDZfUkdCMUIJCQkoMHgwRCkKKyNkZWZpbmUgUE04NjA2X1JHQjFDCQkJKDB4MEUpCisjZGVmaW5lIFBNODYwNl9SR0IxRAkJCSgweDBGKQorCisjZGVmaW5lIFBNODYwNl9QUkVSRUdVTEFUT1JBCQkoMHgxMCkKKyNkZWZpbmUgUE04NjA2X1BSRVJFR1VMQVRPUkIJCSgweDExKQorI2RlZmluZSBQTTg2MDZfVklCUkFUT1JBCQkoMHgxMikKKyNkZWZpbmUgUE04NjA2X1ZJQlJBVE9SQgkJKDB4MTMpCisjZGVmaW5lIFBNODYwNl9WQ0hHCQkJKDB4MTQpCisjZGVmaW5lIFBNODYwNl9WU1lTCQkJKDB4MTUpCisjZGVmaW5lIFBNODYwNl9NSVNDCQkJKDB4MTYpCisjZGVmaW5lIFBNODYwNl9DSElQX0lECQkJKDB4MTcpCisjZGVmaW5lIFBNODYwNl9TVEFUVVMJCQkoMHgxOCkKKyNkZWZpbmUgUE04NjA2X0ZMQUdTCQkJKDB4MTkpCisjZGVmaW5lIFBNODYwNl9QUk9URUNUQQkJCSgweDFBKQorI2RlZmluZSBQTTg2MDZfUFJPVEVDVEIJCQkoMHgxQikKKyNkZWZpbmUgUE04NjA2X1BST1RFQ1RDCQkJKDB4MUMpCisKKy8qIEJpdCBkZWZpbml0aW9ucyBvZiBQTTg2MDYgcmVnaXN0ZXJzICovCisjZGVmaW5lIFBNODYwNl9EQ01fNTAwTUEJCSgweDApCS8qIGN1cnJlbnQgbGltaXQgKi8KKyNkZWZpbmUgUE04NjA2X0RDTV83NTBNQQkJKDB4MSkKKyNkZWZpbmUgUE04NjA2X0RDTV8xMDAwTUEJCSgweDIpCisjZGVmaW5lIFBNODYwNl9EQ01fMTI1ME1BCQkoMHgzKQorI2RlZmluZSBQTTg2MDZfRENNXzI1ME1WCQkoMHgwIDw8IDIpCisjZGVmaW5lIFBNODYwNl9EQ01fMzAwTVYJCSgweDEgPDwgMikKKyNkZWZpbmUgUE04NjA2X0RDTV8zNTBNVgkJKDB4MiA8PCAyKQorI2RlZmluZSBQTTg2MDZfRENNXzQwME1WCQkoMHgzIDw8IDIpCisKKyNkZWZpbmUgUE04NjA2X1BXTV8zMTIwMEhaCQkoMHgwKQorI2RlZmluZSBQTTg2MDZfUFdNXzE1NjAwSFoJCSgweDEpCisjZGVmaW5lIFBNODYwNl9QV01fNzgwMEhaCQkoMHgyKQorI2RlZmluZSBQTTg2MDZfUFdNXzM5MDBIWgkJKDB4MykKKyNkZWZpbmUgUE04NjA2X1BXTV8xOTUwSFoJCSgweDQpCisjZGVmaW5lIFBNODYwNl9QV01fOTc2SFoJCSgweDUpCisjZGVmaW5lIFBNODYwNl9QV01fNDg4SFoJCSgweDYpCisjZGVmaW5lIFBNODYwNl9QV01fMjQ0SFoJCSgweDcpCisjZGVmaW5lIFBNODYwNl9QV01fRlJFUV9NQVNLCQkoMHg3KQorCisjZGVmaW5lIFBNODYwNl9XTEVEX09OCQkJKDEgPDwgMCkKKyNkZWZpbmUgUE04NjA2X1dMRURfQ1VSUkVOVCh4KQkJKCh4ICYgMHgxRikgPDwgMSkKKworI2RlZmluZSBQTTg2MDZfTEVEX0NVUlJFTlQoeCkJCSgoKHggPj4gMikgJiAweDA3KSA8PCA1KQorCisjZGVmaW5lIFBNODYwNl9WU1lTX0VOCQkJKDEgPDwgMSkKKworI2RlZmluZSBQTTg2MDZfTUlTQ19PU0NfRU4JCSgxIDw8IDQpCisKK2VudW0geworCVBNODYwN19JRF9CVUNLMSA9IDAsCisJUE04NjA3X0lEX0JVQ0syLAorCVBNODYwN19JRF9CVUNLMywKKworCVBNODYwN19JRF9MRE8xLAorCVBNODYwN19JRF9MRE8yLAorCVBNODYwN19JRF9MRE8zLAorCVBNODYwN19JRF9MRE80LAorCVBNODYwN19JRF9MRE81LAorCVBNODYwN19JRF9MRE82LAorCVBNODYwN19JRF9MRE83LAorCVBNODYwN19JRF9MRE84LAorCVBNODYwN19JRF9MRE85LAorCVBNODYwN19JRF9MRE8xMCwKKwlQTTg2MDdfSURfTERPMTIsCisJUE04NjA3X0lEX0xETzE0LAorCisJUE04NjA3X0lEX1JHX01BWCwKK307CisKKyNkZWZpbmUgUE04NjA3X1ZFUlNJT04JCQkoMHg0MCkJLyogODYwNyBjaGlwIElEICovCisjZGVmaW5lIFBNODYwN19WRVJTSU9OX01BU0sJCSgweEYwKQkvKiA4NjA3IGNoaXAgSUQgbWFzayAqLworCisvKiBJbnRlcnJ1cHQgUmVnaXN0ZXJzICovCisjZGVmaW5lIFBNODYwN19TVEFUVVNfMQkJCSgweDAxKQorI2RlZmluZSBQTTg2MDdfU1RBVFVTXzIJCQkoMHgwMikKKyNkZWZpbmUgUE04NjA3X0lOVF9TVEFUVVMxCQkoMHgwMykKKyNkZWZpbmUgUE04NjA3X0lOVF9TVEFUVVMyCQkoMHgwNCkKKyNkZWZpbmUgUE04NjA3X0lOVF9TVEFUVVMzCQkoMHgwNSkKKyNkZWZpbmUgUE04NjA3X0lOVF9NQVNLXzEJCSgweDA2KQorI2RlZmluZSBQTTg2MDdfSU5UX01BU0tfMgkJKDB4MDcpCisjZGVmaW5lIFBNODYwN19JTlRfTUFTS18zCQkoMHgwOCkKKworLyogUmVndWxhdG9yIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIFBNODYwN19MRE8xCQkJKDB4MTApCisjZGVmaW5lIFBNODYwN19MRE8yCQkJKDB4MTEpCisjZGVmaW5lIFBNODYwN19MRE8zCQkJKDB4MTIpCisjZGVmaW5lIFBNODYwN19MRE80CQkJKDB4MTMpCisjZGVmaW5lIFBNODYwN19MRE81CQkJKDB4MTQpCisjZGVmaW5lIFBNODYwN19MRE82CQkJKDB4MTUpCisjZGVmaW5lIFBNODYwN19MRE83CQkJKDB4MTYpCisjZGVmaW5lIFBNODYwN19MRE84CQkJKDB4MTcpCisjZGVmaW5lIFBNODYwN19MRE85CQkJKDB4MTgpCisjZGVmaW5lIFBNODYwN19MRE8xMAkJCSgweDE5KQorI2RlZmluZSBQTTg2MDdfTERPMTIJCQkoMHgxQSkKKyNkZWZpbmUgUE04NjA3X0xETzE0CQkJKDB4MUIpCisjZGVmaW5lIFBNODYwN19TTEVFUF9NT0RFMQkJKDB4MUMpCisjZGVmaW5lIFBNODYwN19TTEVFUF9NT0RFMgkJKDB4MUQpCisjZGVmaW5lIFBNODYwN19TTEVFUF9NT0RFMwkJKDB4MUUpCisjZGVmaW5lIFBNODYwN19TTEVFUF9NT0RFNAkJKDB4MUYpCisjZGVmaW5lIFBNODYwN19HTwkJCSgweDIwKQorI2RlZmluZSBQTTg2MDdfU0xFRVBfQlVDSzEJCSgweDIxKQorI2RlZmluZSBQTTg2MDdfU0xFRVBfQlVDSzIJCSgweDIyKQorI2RlZmluZSBQTTg2MDdfU0xFRVBfQlVDSzMJCSgweDIzKQorI2RlZmluZSBQTTg2MDdfQlVDSzEJCQkoMHgyNCkKKyNkZWZpbmUgUE04NjA3X0JVQ0syCQkJKDB4MjUpCisjZGVmaW5lIFBNODYwN19CVUNLMwkJCSgweDI2KQorI2RlZmluZSBQTTg2MDdfQlVDS19DT05UUk9MUwkJKDB4MjcpCisjZGVmaW5lIFBNODYwN19TVVBQTElFU19FTjExCQkoMHgyQikKKyNkZWZpbmUgUE04NjA3X1NVUFBMSUVTX0VOMTIJCSgweDJDKQorI2RlZmluZSBQTTg2MDdfR1JPVVAxCQkJKDB4MkQpCisjZGVmaW5lIFBNODYwN19HUk9VUDIJCQkoMHgyRSkKKyNkZWZpbmUgUE04NjA3X0dST1VQMwkJCSgweDJGKQorI2RlZmluZSBQTTg2MDdfR1JPVVA0CQkJKDB4MzApCisjZGVmaW5lIFBNODYwN19HUk9VUDUJCQkoMHgzMSkKKyNkZWZpbmUgUE04NjA3X0dST1VQNgkJCSgweDMyKQorI2RlZmluZSBQTTg2MDdfU1VQUExJRVNfRU4yMQkJKDB4MzMpCisjZGVmaW5lIFBNODYwN19TVVBQTElFU19FTjIyCQkoMHgzNCkKKworLyogVmlicmF0b3IgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE04NjA3X1ZJQlJBVE9SX1NFVAkJKDB4MjgpCisjZGVmaW5lIFBNODYwN19WSUJSQVRPUl9QV00JCSgweDI5KQorCisvKiBHUEFEQyBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE04NjA3X0dQX0JJQVMxCQkJKDB4NEYpCisjZGVmaW5lIFBNODYwN19NRUFTX0VOMQkJCSgweDUwKQorI2RlZmluZSBQTTg2MDdfTUVBU19FTjIJCQkoMHg1MSkKKyNkZWZpbmUgUE04NjA3X01FQVNfRU4zCQkJKDB4NTIpCisjZGVmaW5lIFBNODYwN19NRUFTX09GRl9USU1FMQkJKDB4NTMpCisjZGVmaW5lIFBNODYwN19NRUFTX09GRl9USU1FMgkJKDB4NTQpCisjZGVmaW5lIFBNODYwN19UU0lfUFJFQklBUwkJKDB4NTUpCS8qIHByZWJpYXMgdGltZSAqLworI2RlZmluZSBQTTg2MDdfUERfUFJFQklBUwkJKDB4NTYpCS8qIHByZWJpYXMgdGltZSAqLworI2RlZmluZSBQTTg2MDdfR1BBRENfTUlTQzEJCSgweDU3KQorCisvKiBSVEMgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgUE04NjA3X1JUQzEJCQkoMHhBMCkKKyNkZWZpbmUgUE04NjA3X1JUQ19DT1VOVEVSMQkJKDB4QTEpCisjZGVmaW5lIFBNODYwN19SVENfQ09VTlRFUjIJCSgweEEyKQorI2RlZmluZSBQTTg2MDdfUlRDX0NPVU5URVIzCQkoMHhBMykKKyNkZWZpbmUgUE04NjA3X1JUQ19DT1VOVEVSNAkJKDB4QTQpCisjZGVmaW5lIFBNODYwN19SVENfRVhQSVJFMQkJKDB4QTUpCisjZGVmaW5lIFBNODYwN19SVENfRVhQSVJFMgkJKDB4QTYpCisjZGVmaW5lIFBNODYwN19SVENfRVhQSVJFMwkJKDB4QTcpCisjZGVmaW5lIFBNODYwN19SVENfRVhQSVJFNAkJKDB4QTgpCisjZGVmaW5lIFBNODYwN19SVENfVFJJTTEJCSgweEE5KQorI2RlZmluZSBQTTg2MDdfUlRDX1RSSU0yCQkoMHhBQSkKKyNkZWZpbmUgUE04NjA3X1JUQ19UUklNMwkJKDB4QUIpCisjZGVmaW5lIFBNODYwN19SVENfVFJJTTQJCSgweEFDKQorI2RlZmluZSBQTTg2MDdfUlRDX01JU0MxCQkoMHhBRCkKKyNkZWZpbmUgUE04NjA3X1JUQ19NSVNDMgkJKDB4QUUpCisjZGVmaW5lIFBNODYwN19SVENfTUlTQzMJCSgweEFGKQorCisvKiBNaXNjIFJlZ2lzdGVycyAqLworI2RlZmluZSBQTTg2MDdfQ0hJUF9JRAkJCSgweDAwKQorI2RlZmluZSBQTTg2MDdfQjBfTUlTQzEJCQkoMHgwQykKKyNkZWZpbmUgUE04NjA3X0xETzEJCQkoMHgxMCkKKyNkZWZpbmUgUE04NjA3X0RWQzMJCQkoMHgyNikKKyNkZWZpbmUgUE04NjA3X0ExX01JU0MxCQkJKDB4NDApCisKKy8qIGJpdCBkZWZpbml0aW9ucyBvZiBTdGF0dXMgUXVlcnkgSW50ZXJmYWNlICovCisjZGVmaW5lIFBNODYwN19TVEFUVVNfQ0MJCSgxIDw8IDMpCisjZGVmaW5lIFBNODYwN19TVEFUVVNfUEVOCQkoMSA8PCA0KQorI2RlZmluZSBQTTg2MDdfU1RBVFVTX0hFQURTRVQJCSgxIDw8IDUpCisjZGVmaW5lIFBNODYwN19TVEFUVVNfSE9PSwkJKDEgPDwgNikKKyNkZWZpbmUgUE04NjA3X1NUQVRVU19NSUNJTgkJKDEgPDwgNykKKyNkZWZpbmUgUE04NjA3X1NUQVRVU19PTktFWQkJKDEgPDwgOCkKKyNkZWZpbmUgUE04NjA3X1NUQVRVU19FWFRPTgkJKDEgPDwgOSkKKyNkZWZpbmUgUE04NjA3X1NUQVRVU19DSEcJCSgxIDw8IDEwKQorI2RlZmluZSBQTTg2MDdfU1RBVFVTX0JBVAkJKDEgPDwgMTEpCisjZGVmaW5lIFBNODYwN19TVEFUVVNfVkJVUwkJKDEgPDwgMTIpCisjZGVmaW5lIFBNODYwN19TVEFUVVNfT1YJCSgxIDw8IDEzKQorCisvKiBiaXQgZGVmaW5pdGlvbnMgb2YgQlVDSzMgKi8KKyNkZWZpbmUgUE04NjA3X0JVQ0szX0RPVUJMRQkJKDEgPDwgNikKKworLyogYml0IGRlZmluaXRpb25zIG9mIE1pc2MxICovCisjZGVmaW5lIFBNODYwN19BMV9NSVNDMV9QSTJDCQkoMSA8PCAwKQorI2RlZmluZSBQTTg2MDdfQjBfTUlTQzFfSU5WX0lOVAkJKDEgPDwgMCkKKyNkZWZpbmUgUE04NjA3X0IwX01JU0MxX0lOVF9DTEVBUgkoMSA8PCAxKQorI2RlZmluZSBQTTg2MDdfQjBfTUlTQzFfSU5UX01BU0sJKDEgPDwgMikKKyNkZWZpbmUgUE04NjA3X0IwX01JU0MxX1BJMkMJCSgxIDw8IDMpCisjZGVmaW5lIFBNODYwN19CMF9NSVNDMV9SRVNFVAkJKDEgPDwgNikKKworLyogYml0cyBkZWZpbml0aW9ucyBvZiBHUEFEQyAqLworI2RlZmluZSBQTTg2MDdfR1BBRENfRU4JCQkoMSA8PCAwKQorI2RlZmluZSBQTTg2MDdfR1BBRENfUFJFQklBU19NQVNLCSgzIDw8IDEpCisjZGVmaW5lIFBNODYwN19HUEFEQ19TTE9UX0NZQ0xFX01BU0sJKDMgPDwgMykJLyogc2xvdyBtb2RlICovCisjZGVmaW5lIFBNODYwN19HUEFEQ19PRkZfU0NBTEVfTUFTSwkoMyA8PCA1KQkvKiBHUCBzbGVlcCBtb2RlICovCisjZGVmaW5lIFBNODYwN19HUEFEQ19TV19DQUxfTUFTSwkoMSA8PCA3KQorCisjZGVmaW5lIFBNODYwN19QRF9QUkVCSUFTX01BU0sJCSgweDFGIDw8IDApCisjZGVmaW5lIFBNODYwN19QRF9QUkVDSEdfTUFTSwkJKDcgPDwgNSkKKworLyogSW50ZXJydXB0IE51bWJlciBpbiA4OFBNODYwNyAqLworZW51bSB7CisJUE04NjA3X0lSUV9PTktFWSwKKwlQTTg2MDdfSVJRX0VYVE9OLAorCVBNODYwN19JUlFfQ0hHLAorCVBNODYwN19JUlFfQkFULAorCVBNODYwN19JUlFfUlRDLAorCVBNODYwN19JUlFfQ0MsCisJUE04NjA3X0lSUV9WQkFULAorCVBNODYwN19JUlFfVkNIRywKKwlQTTg2MDdfSVJRX1ZTWVMsCisJUE04NjA3X0lSUV9USU5ULAorCVBNODYwN19JUlFfR1BBREMwLAorCVBNODYwN19JUlFfR1BBREMxLAorCVBNODYwN19JUlFfR1BBREMyLAorCVBNODYwN19JUlFfR1BBREMzLAorCVBNODYwN19JUlFfQVVESU9fU0hPUlQsCisJUE04NjA3X0lSUV9QRU4sCisJUE04NjA3X0lSUV9IRUFEU0VULAorCVBNODYwN19JUlFfSE9PSywKKwlQTTg2MDdfSVJRX01JQ0lOLAorCVBNODYwN19JUlFfQ0hHX0ZBSUwsCisJUE04NjA3X0lSUV9DSEdfRE9ORSwKKwlQTTg2MDdfSVJRX0NIR19GQVVMVCwKK307CisKK2VudW0geworCVBNODYwN19DSElQX0EwID0gMHg0MCwKKwlQTTg2MDdfQ0hJUF9BMSA9IDB4NDEsCisJUE04NjA3X0NISVBfQjAgPSAweDQ4LAorfTsKKworc3RydWN0IHBtODYweF9jaGlwIHsKKwlzdHJ1Y3QgZGV2aWNlCQkqZGV2OworCXN0cnVjdCBtdXRleAkJaW9fbG9jazsKKwlzdHJ1Y3QgbXV0ZXgJCWlycV9sb2NrOworCXN0cnVjdCBpMmNfY2xpZW50CSpjbGllbnQ7CisJc3RydWN0IGkyY19jbGllbnQJKmNvbXBhbmlvbjsJLyogY29tcGFuaW9uIGNoaXAgY2xpZW50ICovCisKKwlpbnQJCQlidWNrM19kb3VibGU7CS8qIERWQyByYW1wIHNsb3BlIGRvdWJsZSAqLworCXVuc2lnbmVkIHNob3J0CQljb21wYW5pb25fYWRkcjsKKwlpbnQJCQlpZDsKKwlpbnQJCQlpcnFfbW9kZTsKKwlpbnQJCQlpcnFfYmFzZTsKKwlpbnQJCQljb3JlX2lycTsKKwl1bnNpZ25lZCBjaGFyCQljaGlwX3ZlcnNpb247CisKK307CisKKyNkZWZpbmUgUE04NjA3X01BWF9SRUdVTEFUT1IJMTUJLyogMyBCdWNrcywgMTIgTERPcyAqLworCitlbnVtIHsKKwlHSTJDX1BPUlQgPSAwLAorCVBJMkNfUE9SVCwKK307CisKK3N0cnVjdCBwbTg2MHhfYmFja2xpZ2h0X3BkYXRhIHsKKwlpbnQJCWlkOworCWludAkJcHdtOworCWludAkJaXNldDsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworfTsKKworc3RydWN0IHBtODYweF9sZWRfcGRhdGEgeworCWludAkJaWQ7CisJaW50CQlpc2V0OworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Cit9OworCitzdHJ1Y3QgcG04NjB4X3RvdWNoX3BkYXRhIHsKKwlpbnQJCWdwYWRjX3ByZWJpYXM7CisJaW50CQlzbG90X2N5Y2xlOworCWludAkJb2ZmX3NjYWxlOworCWludAkJc3dfY2FsOworCWludAkJdHNpX3ByZWJpYXM7CS8qIHRpbWUsIHNsb3QgKi8KKwlpbnQJCXBlbl9wcmViaWFzOwkvKiB0aW1lLCBzbG90ICovCisJaW50CQlwZW5fcHJlY2hnOwkvKiB0aW1lLCBzbG90ICovCisJaW50CQlyZXNfeDsJCS8qIHJlc2lzdG9yIG9mIFhwbGF0ZSAqLworCXVuc2lnbmVkIGxvbmcJZmxhZ3M7Cit9OworCitzdHJ1Y3QgcG04NjB4X3Bvd2VyX3BkYXRhIHsKKwl1bnNpZ25lZAlmYXN0X2NoYXJnZTsJLyogY2hhcmdlIGN1cnJlbnQgKi8KK307CisKK3N0cnVjdCBwbTg2MHhfcGxhdGZvcm1fZGF0YSB7CisJc3RydWN0IHBtODYweF9iYWNrbGlnaHRfcGRhdGEJKmJhY2tsaWdodDsKKwlzdHJ1Y3QgcG04NjB4X2xlZF9wZGF0YQkJKmxlZDsKKwlzdHJ1Y3QgcG04NjB4X3RvdWNoX3BkYXRhCSp0b3VjaDsKKwlzdHJ1Y3QgcG04NjB4X3Bvd2VyX3BkYXRhCSpwb3dlcjsKKworCXVuc2lnbmVkIHNob3J0CWNvbXBhbmlvbl9hZGRyOwkvKiBJMkMgYWRkcmVzcyBvZiBjb21wYW5pb24gY2hpcCAqLworCWludAkJaTJjX3BvcnQ7CS8qIENvbnRyb2xsZWQgYnkgR0kyQyBvciBQSTJDICovCisJaW50CQlpcnFfbW9kZTsJLyogQ2xlYXIgaW50ZXJydXB0IGJ5IHJlYWQvd3JpdGUoMC8xKSAqLworCWludAkJaXJxX2Jhc2U7CS8qIElSUSBiYXNlIG51bWJlciBvZiA4OHBtODYweCAqLworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICpyZWd1bGF0b3JbUE04NjA3X01BWF9SRUdVTEFUT1JdOworfTsKKworZXh0ZXJuIGNoYXIgcG04NjB4X2JhY2tsaWdodF9uYW1lW11bTUZEX05BTUVfU0laRV07CitleHRlcm4gY2hhciBwbTg2MHhfbGVkX25hbWVbXVtNRkRfTkFNRV9TSVpFXTsKKworZXh0ZXJuIGludCBwbTg2MHhfcmVnX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKiwgaW50KTsKK2V4dGVybiBpbnQgcG04NjB4X3JlZ193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqLCBpbnQsIHVuc2lnbmVkIGNoYXIpOworZXh0ZXJuIGludCBwbTg2MHhfYnVsa19yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICosIGludCwgaW50LCB1bnNpZ25lZCBjaGFyICopOworZXh0ZXJuIGludCBwbTg2MHhfYnVsa193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqLCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqKTsKK2V4dGVybiBpbnQgcG04NjB4X3NldF9iaXRzKHN0cnVjdCBpMmNfY2xpZW50ICosIGludCwgdW5zaWduZWQgY2hhciwKKwkJCSAgIHVuc2lnbmVkIGNoYXIpOworCitleHRlcm4gaW50IHBtODYweF9kZXZpY2VfaW5pdChzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXAsCisJCQkgICAgICBzdHJ1Y3QgcG04NjB4X3BsYXRmb3JtX2RhdGEgKnBkYXRhKTsKK2V4dGVybiB2b2lkIHBtODYweF9kZXZpY2VfZXhpdChzdHJ1Y3QgcG04NjB4X2NoaXAgKmNoaXApOworCisjZW5kaWYgLyogX19MSU5VWF9NRkRfODhQTTg2MFhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvYWIzMTAwLmggYi9pbmNsdWRlL2xpbnV4L21mZC9hYjMxMDAuaAppbmRleCBlOWFhNGM5Li45YTg4MWMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9hYjMxMDAuaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC9hYjMxMDAuaApAQCAtNiw3ICs2LDYgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KIAogI2lmbmRlZiBNRkRfQUIzMTAwX0gKQEAgLTc0LDcgKzczLDYgQEAKICAqIEB0ZXN0cmVnX2NsaWVudDogc2Vjb25kYXJ5IGNsaWVudCBmb3IgdGVzdCByZWdpc3RlcnMKICAqIEBjaGlwX25hbWU6IG5hbWUgb2YgdGhpcyBjaGlwIHZhcmlhbnQKICAqIEBjaGlwX2lkOiA4IGJpdCBjaGlwIElEIGZvciB0aGlzIGNoaXAgdmFyaWFudAotICogQHdvcms6IGFuIGV2ZW50IGhhbmRsaW5nIHdvcmtlcgogICogQGV2ZW50X3N1YnNjcmliZXJzOiBldmVudCBzdWJzY3JpYmVycyBhcmUgbGlzdGVkIGhlcmUKICAqIEBzdGFydHVwX2V2ZW50czogYSBjb3B5IG9mIHRoZSBmaXJzdCByZWFkaW5nIG9mIHRoZSBldmVudCByZWdpc3RlcnMKICAqIEBzdGFydHVwX2V2ZW50c19yZWFkOiB3aGV0aGVyIHRoZSBmaXJzdCBldmVudHMgaGF2ZSBiZWVuIHJlYWQKQEAgLTkwLDcgKzg4LDYgQEAKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqdGVzdHJlZ19jbGllbnQ7CiAJY2hhciBjaGlwX25hbWVbMzJdOwogCXU4IGNoaXBfaWQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiAJc3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQgZXZlbnRfc3Vic2NyaWJlcnM7CiAJdTMyIHN0YXJ0dXBfZXZlbnRzOwogCWJvb2wgc3RhcnR1cF9ldmVudHNfcmVhZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL21heDg5MjUuaCBiL2luY2x1ZGUvbGludXgvbWZkL21heDg5MjUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjU5ZGZlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvbWF4ODkyNS5oCkBAIC0wLDAgKzEsMjUzIEBACisvKgorICogTWF4aW04OTI1IEludGVyZmFjZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorICoJSGFvamlhbiBaaHVhbmcgPGhhb2ppYW4uemh1YW5nQG1hcnZlbGwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX01GRF9NQVg4OTI1X0gKKyNkZWZpbmUgX19MSU5VWF9NRkRfTUFYODkyNV9ICisKKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisvKiBVbmlmaWVkIHN1YiBkZXZpY2UgSURzIGZvciBNQVg4OTI1ICovCitlbnVtIHsKKwlNQVg4OTI1X0lEX1NEMSwKKwlNQVg4OTI1X0lEX1NEMiwKKwlNQVg4OTI1X0lEX1NEMywKKwlNQVg4OTI1X0lEX0xETzEsCisJTUFYODkyNV9JRF9MRE8yLAorCU1BWDg5MjVfSURfTERPMywKKwlNQVg4OTI1X0lEX0xETzQsCisJTUFYODkyNV9JRF9MRE81LAorCU1BWDg5MjVfSURfTERPNiwKKwlNQVg4OTI1X0lEX0xETzcsCisJTUFYODkyNV9JRF9MRE84LAorCU1BWDg5MjVfSURfTERPOSwKKwlNQVg4OTI1X0lEX0xETzEwLAorCU1BWDg5MjVfSURfTERPMTEsCisJTUFYODkyNV9JRF9MRE8xMiwKKwlNQVg4OTI1X0lEX0xETzEzLAorCU1BWDg5MjVfSURfTERPMTQsCisJTUFYODkyNV9JRF9MRE8xNSwKKwlNQVg4OTI1X0lEX0xETzE2LAorCU1BWDg5MjVfSURfTERPMTcsCisJTUFYODkyNV9JRF9MRE8xOCwKKwlNQVg4OTI1X0lEX0xETzE5LAorCU1BWDg5MjVfSURfTERPMjAsCisJTUFYODkyNV9JRF9NQVgsCit9OworCitlbnVtIHsKKwkvKgorCSAqIENoYXJnaW5nIGN1cnJlbnQgdGhyZXNob2xkIHRyaWdnZXIgZ29pbmcgZnJvbSBmYXN0IGNoYXJnZQorCSAqIHRvIFRPUE9GRiBjaGFyZ2UuIEZyb20gNSUgdG8gMjAlIG9mIGZhc3RpbmcgY2hhcmdpbmcgY3VycmVudC4KKwkgKi8KKwlNQVg4OTI1X1RPUE9GRl9USFJfNVBFUiwKKwlNQVg4OTI1X1RPUE9GRl9USFJfMTBQRVIsCisJTUFYODkyNV9UT1BPRkZfVEhSXzE1UEVSLAorCU1BWDg5MjVfVE9QT0ZGX1RIUl8yMFBFUiwKK307CisKK2VudW0geworCS8qIEZhc3QgY2hhcmdpbmcgY3VycmVudCAqLworCU1BWDg5MjVfRkNIR184NU1BLAorCU1BWDg5MjVfRkNIR18zMDBNQSwKKwlNQVg4OTI1X0ZDSEdfNDYwTUEsCisJTUFYODkyNV9GQ0hHXzYwME1BLAorCU1BWDg5MjVfRkNIR183MDBNQSwKKwlNQVg4OTI1X0ZDSEdfODAwTUEsCisJTUFYODkyNV9GQ0hHXzkwME1BLAorCU1BWDg5MjVfRkNIR18xMDAwTUEsCit9OworCisvKiBDaGFyZ2VyIHJlZ2lzdGVycyAqLworI2RlZmluZSBNQVg4OTI1X0NIR19JUlExCQkoMHg3ZSkKKyNkZWZpbmUgTUFYODkyNV9DSEdfSVJRMgkJKDB4N2YpCisjZGVmaW5lIE1BWDg5MjVfQ0hHX0lSUTFfTUFTSwkJKDB4ODApCisjZGVmaW5lIE1BWDg5MjVfQ0hHX0lSUTJfTUFTSwkJKDB4ODEpCisjZGVmaW5lIE1BWDg5MjVfQ0hHX1NUQVRVUwkJKDB4ODIpCisKKy8qIEdQTSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgTUFYODkyNV9TWVNFTlNFTAkJKDB4MDApCisjZGVmaW5lIE1BWDg5MjVfT05fT0ZGX0lSUTEJCSgweDAxKQorI2RlZmluZSBNQVg4OTI1X09OX09GRl9JUlExX01BU0sJKDB4MDIpCisjZGVmaW5lIE1BWDg5MjVfT05fT0ZGX1NUQVRVUwkJKDB4MDMpCisjZGVmaW5lIE1BWDg5MjVfT05fT0ZGX0lSUTIJCSgweDBkKQorI2RlZmluZSBNQVg4OTI1X09OX09GRl9JUlEyX01BU0sJKDB4MGUpCisjZGVmaW5lIE1BWDg5MjVfUkVTRVRfQ05GRwkJKDB4MGYpCisKKy8qIFRvdWNoIHJlZ2lzdGVycyAqLworI2RlZmluZSBNQVg4OTI1X1RTQ19JUlEJCQkoMHgwMCkKKyNkZWZpbmUgTUFYODkyNV9UU0NfSVJRX01BU0sJCSgweDAxKQorI2RlZmluZSBNQVg4OTI1X1RTQ19DTkZHMQkJKDB4MDIpCisjZGVmaW5lIE1BWDg5MjVfQURDX1NDSEVECQkoMHgxMCkKKyNkZWZpbmUgTUFYODkyNV9BRENfUkVTX0VORAkJKDB4NmYpCisKKyNkZWZpbmUgTUFYODkyNV9OUkVGX09LCQkJKDEgPDwgNCkKKworLyogUlRDIHJlZ2lzdGVycyAqLworI2RlZmluZSBNQVg4OTI1X0FMQVJNMF9DTlRMCQkoMHgxOCkKKyNkZWZpbmUgTUFYODkyNV9BTEFSTTFfQ05UTAkJKDB4MTkpCisjZGVmaW5lIE1BWDg5MjVfUlRDX0lSUQkJCSgweDFjKQorI2RlZmluZSBNQVg4OTI1X1JUQ19JUlFfTUFTSwkJKDB4MWQpCisjZGVmaW5lIE1BWDg5MjVfTVBMX0NOVEwJCSgweDFlKQorCisvKiBXTEVEIHJlZ2lzdGVycyAqLworI2RlZmluZSBNQVg4OTI1X1dMRURfTU9ERV9DTlRMCQkoMHg4NCkKKyNkZWZpbmUgTUFYODkyNV9XTEVEX0NOVEwJCSgweDg1KQorCisvKiBNQVg4OTI1IFJlZ2lzdGVycyAqLworI2RlZmluZSBNQVg4OTI1X1NEQ1RMMQkJCSgweDA0KQorI2RlZmluZSBNQVg4OTI1X1NEQ1RMMgkJCSgweDA3KQorI2RlZmluZSBNQVg4OTI1X1NEQ1RMMwkJCSgweDBBKQorI2RlZmluZSBNQVg4OTI1X1NEVjEJCQkoMHgwNikKKyNkZWZpbmUgTUFYODkyNV9TRFYyCQkJKDB4MDkpCisjZGVmaW5lIE1BWDg5MjVfU0RWMwkJCSgweDBDKQorI2RlZmluZSBNQVg4OTI1X0xET0NUTDEJCQkoMHgxOCkKKyNkZWZpbmUgTUFYODkyNV9MRE9DVEwyCQkJKDB4MUMpCisjZGVmaW5lIE1BWDg5MjVfTERPQ1RMMwkJCSgweDIwKQorI2RlZmluZSBNQVg4OTI1X0xET0NUTDQJCQkoMHgyNCkKKyNkZWZpbmUgTUFYODkyNV9MRE9DVEw1CQkJKDB4MjgpCisjZGVmaW5lIE1BWDg5MjVfTERPQ1RMNgkJCSgweDJDKQorI2RlZmluZSBNQVg4OTI1X0xET0NUTDcJCQkoMHgzMCkKKyNkZWZpbmUgTUFYODkyNV9MRE9DVEw4CQkJKDB4MzQpCisjZGVmaW5lIE1BWDg5MjVfTERPQ1RMOQkJCSgweDM4KQorI2RlZmluZSBNQVg4OTI1X0xET0NUTDEwCQkoMHgzQykKKyNkZWZpbmUgTUFYODkyNV9MRE9DVEwxMQkJKDB4NDApCisjZGVmaW5lIE1BWDg5MjVfTERPQ1RMMTIJCSgweDQ0KQorI2RlZmluZSBNQVg4OTI1X0xET0NUTDEzCQkoMHg0OCkKKyNkZWZpbmUgTUFYODkyNV9MRE9DVEwxNAkJKDB4NEMpCisjZGVmaW5lIE1BWDg5MjVfTERPQ1RMMTUJCSgweDUwKQorI2RlZmluZSBNQVg4OTI1X0xET0NUTDE2CQkoMHgxMCkKKyNkZWZpbmUgTUFYODkyNV9MRE9DVEwxNwkJKDB4MTQpCisjZGVmaW5lIE1BWDg5MjVfTERPQ1RMMTgJCSgweDcyKQorI2RlZmluZSBNQVg4OTI1X0xET0NUTDE5CQkoMHg1QykKKyNkZWZpbmUgTUFYODkyNV9MRE9DVEwyMAkJKDB4OUMpCisjZGVmaW5lIE1BWDg5MjVfTERPVk9VVDEJCSgweDFBKQorI2RlZmluZSBNQVg4OTI1X0xET1ZPVVQyCQkoMHgxRSkKKyNkZWZpbmUgTUFYODkyNV9MRE9WT1VUMwkJKDB4MjIpCisjZGVmaW5lIE1BWDg5MjVfTERPVk9VVDQJCSgweDI2KQorI2RlZmluZSBNQVg4OTI1X0xET1ZPVVQ1CQkoMHgyQSkKKyNkZWZpbmUgTUFYODkyNV9MRE9WT1VUNgkJKDB4MkUpCisjZGVmaW5lIE1BWDg5MjVfTERPVk9VVDcJCSgweDMyKQorI2RlZmluZSBNQVg4OTI1X0xET1ZPVVQ4CQkoMHgzNikKKyNkZWZpbmUgTUFYODkyNV9MRE9WT1VUOQkJKDB4M0EpCisjZGVmaW5lIE1BWDg5MjVfTERPVk9VVDEwCQkoMHgzRSkKKyNkZWZpbmUgTUFYODkyNV9MRE9WT1VUMTEJCSgweDQyKQorI2RlZmluZSBNQVg4OTI1X0xET1ZPVVQxMgkJKDB4NDYpCisjZGVmaW5lIE1BWDg5MjVfTERPVk9VVDEzCQkoMHg0QSkKKyNkZWZpbmUgTUFYODkyNV9MRE9WT1VUMTQJCSgweDRFKQorI2RlZmluZSBNQVg4OTI1X0xET1ZPVVQxNQkJKDB4NTIpCisjZGVmaW5lIE1BWDg5MjVfTERPVk9VVDE2CQkoMHgxMikKKyNkZWZpbmUgTUFYODkyNV9MRE9WT1VUMTcJCSgweDE2KQorI2RlZmluZSBNQVg4OTI1X0xET1ZPVVQxOAkJKDB4NzQpCisjZGVmaW5lIE1BWDg5MjVfTERPVk9VVDE5CQkoMHg1RSkKKyNkZWZpbmUgTUFYODkyNV9MRE9WT1VUMjAJCSgweDlFKQorCisvKiBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ0hHX0lSUTFfTUFTSwkJCSgweDA3KQorI2RlZmluZSBDSEdfSVJRMl9NQVNLCQkJKDB4ZmYpCisjZGVmaW5lIE9OX09GRl9JUlExX01BU0sJCSgweGZmKQorI2RlZmluZSBPTl9PRkZfSVJRMl9NQVNLCQkoMHgwMykKKyNkZWZpbmUgVFNDX0lSUV9NQVNLCQkJKDB4MDMpCisjZGVmaW5lIFJUQ19JUlFfTUFTSwkJCSgweDBjKQorCisjZGVmaW5lIE1BWDg5MjVfTUFYX1JFR1VMQVRPUgkJKDIzKQorCisjZGVmaW5lIE1BWDg5MjVfTkFNRV9TSVpFCQkoMzIpCisKKy8qIElSUSBkZWZpbml0aW9ucyAqLworZW51bSB7CisJTUFYODkyNV9JUlFfVkNIR19EQ19PVlAsCisJTUFYODkyNV9JUlFfVkNIR19EQ19GLAorCU1BWDg5MjVfSVJRX1ZDSEdfRENfUiwKKwlNQVg4OTI1X0lSUV9WQ0hHX1VTQl9PVlAsCisJTUFYODkyNV9JUlFfVkNIR19VU0JfRiwKKwlNQVg4OTI1X0lSUV9WQ0hHX1VTQl9SLAorCU1BWDg5MjVfSVJRX1ZDSEdfVEhNX09LX1IsCisJTUFYODkyNV9JUlFfVkNIR19USE1fT0tfRiwKKwlNQVg4OTI1X0lSUV9WQ0hHX1NZU0xPV19GLAorCU1BWDg5MjVfSVJRX1ZDSEdfU1lTTE9XX1IsCisJTUFYODkyNV9JUlFfVkNIR19SU1QsCisJTUFYODkyNV9JUlFfVkNIR19ET05FLAorCU1BWDg5MjVfSVJRX1ZDSEdfVE9QT0ZGLAorCU1BWDg5MjVfSVJRX1ZDSEdfVE1SX0ZBVUxULAorCU1BWDg5MjVfSVJRX0dQTV9SU1RJTiwKKwlNQVg4OTI1X0lSUV9HUE1fTVBMLAorCU1BWDg5MjVfSVJRX0dQTV9TV18zU0VDLAorCU1BWDg5MjVfSVJRX0dQTV9FWFRPTl9GLAorCU1BWDg5MjVfSVJRX0dQTV9FWFRPTl9SLAorCU1BWDg5MjVfSVJRX0dQTV9TV18xU0VDLAorCU1BWDg5MjVfSVJRX0dQTV9TV19GLAorCU1BWDg5MjVfSVJRX0dQTV9TV19SLAorCU1BWDg5MjVfSVJRX0dQTV9TWVNDS0VOX0YsCisJTUFYODkyNV9JUlFfR1BNX1NZU0NLRU5fUiwKKwlNQVg4OTI1X0lSUV9SVENfQUxBUk0xLAorCU1BWDg5MjVfSVJRX1JUQ19BTEFSTTAsCisJTUFYODkyNV9JUlFfVFNDX1NUSUNLLAorCU1BWDg5MjVfSVJRX1RTQ19OU1RJQ0ssCisJTUFYODkyNV9OUl9JUlFTLAorfTsKKworc3RydWN0IG1heDg5MjVfY2hpcCB7CisJc3RydWN0IGRldmljZQkJKmRldjsKKwlzdHJ1Y3QgaTJjX2NsaWVudAkqaTJjOworCXN0cnVjdCBpMmNfY2xpZW50CSphZGM7CisJc3RydWN0IGkyY19jbGllbnQJKnJ0YzsKKwlzdHJ1Y3QgbXV0ZXgJCWlvX2xvY2s7CisJc3RydWN0IG11dGV4CQlpcnFfbG9jazsKKworCWludAkJCWlycV9iYXNlOworCWludAkJCWNvcmVfaXJxOworCWludAkJCXRzY19pcnE7Cit9OworCitzdHJ1Y3QgbWF4ODkyNV9iYWNrbGlnaHRfcGRhdGEgeworCWludAlseHdfc2NsOwkvKiAwLzEgLS0gMC44T2htLzAuNE9obSAqLworCWludAlseHdfZnJlcTsJLyogNzAwS0h6IH4gMTQwMEtIeiAqLworCWludAlkdWFsX3N0cmluZzsJLyogMC8xIC0tIHNpbmdsZS9kdWFsIHN0cmluZyAqLworfTsKKworc3RydWN0IG1heDg5MjVfdG91Y2hfcGRhdGEgeworCXVuc2lnbmVkIGludAkJZmxhZ3M7Cit9OworCitzdHJ1Y3QgbWF4ODkyNV9wb3dlcl9wZGF0YSB7CisJaW50CQkoKnNldF9jaGFyZ2VyKShpbnQpOworCXVuc2lnbmVkCWJhdHRfZGV0ZWN0OjE7CisJdW5zaWduZWQJdG9wb2ZmX3RocmVzaG9sZDoyOworCXVuc2lnbmVkCWZhc3RfY2hhcmdlOjM7CS8qIGNoYXJnZSBjdXJyZW50ICovCit9OworCisvKgorICogaXJxX2Jhc2U6IHN0b3JlcyBJUlEgYmFzZSBudW1iZXIgb2YgTUFYODkyNSBpbiBwbGF0Zm9ybQorICogdHNjX2lycTogc3RvcmVzIElSUSBudW1iZXIgb2YgTUFYODkyNSBUU0MKKyAqLworc3RydWN0IG1heDg5MjVfcGxhdGZvcm1fZGF0YSB7CisJc3RydWN0IG1heDg5MjVfYmFja2xpZ2h0X3BkYXRhCSpiYWNrbGlnaHQ7CisJc3RydWN0IG1heDg5MjVfdG91Y2hfcGRhdGEJKnRvdWNoOworCXN0cnVjdCBtYXg4OTI1X3Bvd2VyX3BkYXRhCSpwb3dlcjsKKwlzdHJ1Y3QgcmVndWxhdG9yX2luaXRfZGF0YQkqcmVndWxhdG9yW01BWDg5MjVfTUFYX1JFR1VMQVRPUl07CisKKwlpbnQJCWlycV9iYXNlOworCWludAkJdHNjX2lycTsKK307CisKK2V4dGVybiBpbnQgbWF4ODkyNV9yZWdfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqLCBpbnQpOworZXh0ZXJuIGludCBtYXg4OTI1X3JlZ193cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqLCBpbnQsIHVuc2lnbmVkIGNoYXIpOworZXh0ZXJuIGludCBtYXg4OTI1X2J1bGtfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqLCBpbnQsIGludCwgdW5zaWduZWQgY2hhciAqKTsKK2V4dGVybiBpbnQgbWF4ODkyNV9idWxrX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICosIGludCwgaW50LCB1bnNpZ25lZCBjaGFyICopOworZXh0ZXJuIGludCBtYXg4OTI1X3NldF9iaXRzKHN0cnVjdCBpMmNfY2xpZW50ICosIGludCwgdW5zaWduZWQgY2hhciwKKwkJCXVuc2lnbmVkIGNoYXIpOworCitleHRlcm4gaW50IG1heDg5MjVfZGV2aWNlX2luaXQoc3RydWN0IG1heDg5MjVfY2hpcCAqLAorCQkJCXN0cnVjdCBtYXg4OTI1X3BsYXRmb3JtX2RhdGEgKik7CitleHRlcm4gdm9pZCBtYXg4OTI1X2RldmljZV9leGl0KHN0cnVjdCBtYXg4OTI1X2NoaXAgKik7CisjZW5kaWYgLyogX19MSU5VWF9NRkRfTUFYODkyNV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL21jMTM3ODMuaCBiL2luY2x1ZGUvbGludXgvbWZkL21jMTM3ODMuaAppbmRleCAzNTY4MDQwLi44ODk1ZDlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC9tYzEzNzgzLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvbWMxMzc4My5oCkBAIC0yNiwxMCArMjYsMzAgQEAKIGludCBtYzEzNzgzX2lycV9yZXF1ZXN0X25vdW5tYXNrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxLAogCQlpcnFfaGFuZGxlcl90IGhhbmRsZXIsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRldik7CiBpbnQgbWMxMzc4M19pcnFfZnJlZShzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSwgdm9pZCAqZGV2KTsKLWludCBtYzEzNzgzX2Fja2lycShzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSk7CiAKLWludCBtYzEzNzgzX21hc2soc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIGludCBpcnEpOwotaW50IG1jMTM3ODNfdW5tYXNrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxKTsKK2ludCBtYzEzNzgzX2lycV9tYXNrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxKTsKK2ludCBtYzEzNzgzX2lycV91bm1hc2soc3RydWN0IG1jMTM3ODMgKm1jMTM3ODMsIGludCBpcnEpOworaW50IG1jMTM3ODNfaXJxX3N0YXR1cyhzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSwKKwkJaW50ICplbmFibGVkLCBpbnQgKnBlbmRpbmcpOworaW50IG1jMTM3ODNfaXJxX2FjayhzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IG1jMTM3ODNfbWFzayhzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSkgX19kZXByZWNhdGVkOworc3RhdGljIGlubGluZSBpbnQgbWMxMzc4M19tYXNrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxKQoreworCXJldHVybiBtYzEzNzgzX2lycV9tYXNrKG1jMTM3ODMsIGlycSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1jMTM3ODNfdW5tYXNrKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxKSBfX2RlcHJlY2F0ZWQ7CitzdGF0aWMgaW5saW5lIGludCBtYzEzNzgzX3VubWFzayhzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSkKK3sKKwlyZXR1cm4gbWMxMzc4M19pcnFfdW5tYXNrKG1jMTM3ODMsIGlycSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IG1jMTM3ODNfYWNraXJxKHN0cnVjdCBtYzEzNzgzICptYzEzNzgzLCBpbnQgaXJxKSBfX2RlcHJlY2F0ZWQ7CitzdGF0aWMgaW5saW5lIGludCBtYzEzNzgzX2Fja2lycShzdHJ1Y3QgbWMxMzc4MyAqbWMxMzc4MywgaW50IGlycSkKK3sKKwlyZXR1cm4gbWMxMzc4M19pcnFfYWNrKG1jMTM3ODMsIGlycSk7Cit9CiAKICNkZWZpbmUgTUMxMzc4M19BREMwCQk0MwogI2RlZmluZSBNQzEzNzgzX0FEQzBfQURSRUZFTgkJKDEgPDwgMTApCkBAIC0xMDgsNiArMTI4LDggQEAKICNkZWZpbmUJTUMxMzc4M19SRUdVX1YyCQkyOAogI2RlZmluZQlNQzEzNzgzX1JFR1VfVjMJCTI5CiAjZGVmaW5lCU1DMTM3ODNfUkVHVV9WNAkJMzAKKyNkZWZpbmUJTUMxMzc4M19SRUdVX1BXR1QxU1BJCTMxCisjZGVmaW5lCU1DMTM3ODNfUkVHVV9QV0dUMlNQSQkzMgogCiAjZGVmaW5lIE1DMTM3ODNfSVJRX0FEQ0RPTkUJMAogI2RlZmluZSBNQzEzNzgzX0lSUV9BRENCSVNET05FCTEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3RtaW8uaCBiL2luY2x1ZGUvbGludXgvbWZkL3RtaW8uaAppbmRleCA5Y2IxODM0Li5jM2Y3ZGZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC90bWlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvdG1pby5oCkBAIC01OSw3ICs1OSw4IEBACiAgKiBkYXRhIGZvciB0aGUgTU1DIGNvbnRyb2xsZXIKICAqLwogc3RydWN0IHRtaW9fbW1jX2RhdGEgewotCWNvbnN0IHVuc2lnbmVkIGludAkJaGNsazsKKwl1bnNpZ25lZCBpbnQJCQloY2xrOworCXVuc2lnbmVkIGxvbmcJCQljYXBhYmlsaXRpZXM7CiAJdm9pZCAoKnNldF9wd3IpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmhvc3QsIGludCBzdGF0ZSk7CiAJdm9pZCAoKnNldF9jbGtfZGl2KShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpob3N0LCBpbnQgc3RhdGUpOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3VjYjF4MDAuaCBiL2luY2x1ZGUvbGludXgvbWZkL3VjYjF4MDAuaAppbmRleCBhYTljMzc4Li40MzIxZjA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC91Y2IxeDAwLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvdWNiMXgwMC5oCkBAIC0xMiw2ICsxMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tZmQvbWNwLmg+CiAjaW5jbHVkZSA8bGludXgvZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbWFwaG9yZS5oPgogCiAjZGVmaW5lIFVDQl9JT19EQVRBCTB4MDAKICNkZWZpbmUgVUNCX0lPX0RJUgkweDAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvY29yZS5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L2NvcmUuaAppbmRleCA1MTg0Yjc5Li41OTE1ZjZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9jb3JlLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNpZm5kZWYgX19NRkRfV004MzFYX0NPUkVfSF9fCiAjZGVmaW5lIF9fTUZEX1dNODMxWF9DT1JFX0hfXwogCisjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAvKgpAQCAtMjU0LDkgKzI1NSwxNCBAQAogCWludCBpcnFfbWFza3NfY3VyW1dNODMxWF9OVU1fSVJRX1JFR1NdOyAgIC8qIEN1cnJlbnRseSBhY3RpdmUgdmFsdWUgKi8KIAlpbnQgaXJxX21hc2tzX2NhY2hlW1dNODMxWF9OVU1fSVJRX1JFR1NdOyAvKiBDYWNoZWQgaGFyZHdhcmUgdmFsdWUgKi8KIAorCS8qIENoaXAgcmV2aXNpb24gYmFzZWQgZmxhZ3MgKi8KKwl1bnNpZ25lZCBoYXNfZ3Bpb19lbmE6MTsgIC8qIEhhcyBHUElPIGVuYWJsZSBiaXQgKi8KKwl1bnNpZ25lZCBoYXNfY3Nfc3RzOjE7ICAgIC8qIEhhcyBjdXJyZW50IHNpbmsgc3RhdHVzIGJpdCAqLworCiAJaW50IG51bV9ncGlvOwogCiAJc3RydWN0IG11dGV4IGF1eGFkY19sb2NrOworCXN0cnVjdCBjb21wbGV0aW9uIGF1eGFkY19kb25lOwogCiAJLyogVGhlIFdNODMxeCBoYXMgYSBzZWN1cml0eSBrZXkgYmxvY2tpbmcgYWNjZXNzIHRvIGNlcnRhaW4KIAkgKiByZWdpc3RlcnMuICBUaGUgbXV0ZXggaXMgdGFrZW4gYnkgdGhlIGFjY2Vzc29ycyBmb3IgbG9ja2luZwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L2dwaW8uaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODMxeC9ncGlvLmgKaW5kZXggMjgzNTYxNC4uOWIxNjNjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204MzF4L2dwaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzMXgvZ3Bpby5oCkBAIC00MSw2ICs0MSwxMCBAQAogI2RlZmluZSBXTTgzMVhfR1BOX09EX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUE5fT0QgKi8KICNkZWZpbmUgV004MzFYX0dQTl9PRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOSAgLyogR1BOX09EICovCiAjZGVmaW5lIFdNODMxWF9HUE5fT0RfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQTl9PRCAqLworI2RlZmluZSBXTTgzMVhfR1BOX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBHUE5fRU5BICovCisjZGVmaW5lIFdNODMxWF9HUE5fRU5BX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQTl9FTkEgKi8KKyNkZWZpbmUgV004MzFYX0dQTl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogR1BOX0VOQSAqLworI2RlZmluZSBXTTgzMVhfR1BOX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUE5fRU5BICovCiAjZGVmaW5lIFdNODMxWF9HUE5fVFJJICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEdQTl9UUkkgKi8KICNkZWZpbmUgV004MzFYX0dQTl9UUklfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1BOX1RSSSAqLwogI2RlZmluZSBXTTgzMVhfR1BOX1RSSV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBHUE5fVFJJICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvY29yZS5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2NvcmUuaAppbmRleCA0Mzg2ODg5Li45OGZjYzk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvY29yZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9jb3JlLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KIAogI2luY2x1ZGUgPGxpbnV4L21mZC93bTgzNTAvYXVkaW8uaD4KICNpbmNsdWRlIDxsaW51eC9tZmQvd204MzUwL2dwaW8uaD4KQEAgLTU3OSw2ICs1ODAsOCBAQAogCiAjZGVmaW5lIFdNODM1MF9OVU1fSVJRCQkJCTYzCiAKKyNkZWZpbmUgV004MzUwX05VTV9JUlFfUkVHUyA3CisKIHN0cnVjdCB3bTgzNTBfcmVnX2FjY2VzcyB7CiAJdTE2IHJlYWRhYmxlOwkJLyogTWFzayBvZiByZWFkYWJsZSBiaXRzICovCiAJdTE2IHdyaXRhYmxlOwkJLyogTWFzayBvZiB3cml0YWJsZSBiaXRzICovCkBAIC02MDAsMTEgKzYwMyw2IEBACiAKIHN0cnVjdCB3bTgzNTA7CiAKLXN0cnVjdCB3bTgzNTBfaXJxIHsKLQlpcnFfaGFuZGxlcl90IGhhbmRsZXI7Ci0Jdm9pZCAqZGF0YTsKLX07Ci0KIHN0cnVjdCB3bTgzNTBfaHdtb24gewogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7CiAJc3RydWN0IGRldmljZSAqY2xhc3NkZXY7CkBAIC02MjQsMTEgKzYyMiwxMyBAQAogCXUxNiAqcmVnX2NhY2hlOwogCiAJc3RydWN0IG11dGV4IGF1eGFkY19tdXRleDsKKwlzdHJ1Y3QgY29tcGxldGlvbiBhdXhhZGNfZG9uZTsKIAogCS8qIEludGVycnVwdCBoYW5kbGluZyAqLwotCXN0cnVjdCBtdXRleCBpcnFfbXV0ZXg7IC8qIElSUSB0YWJsZSBtdXRleCAqLwotCXN0cnVjdCB3bTgzNTBfaXJxIGlycVtXTTgzNTBfTlVNX0lSUV07CisJc3RydWN0IG11dGV4IGlycV9sb2NrOwogCWludCBjaGlwX2lycTsKKwlpbnQgaXJxX2Jhc2U7CisJdTE2IGlycV9tYXNrc1tXTTgzNTBfTlVNX0lSUV9SRUdTXTsKIAogCS8qIENsaWVudCBkZXZpY2VzICovCiAJc3RydWN0IHdtODM1MF9jb2RlYyBjb2RlYzsKQEAgLTY0NywxMSArNjQ3LDEzIEBACiAgKiAgICAgICAgdXNlZCBieSB0aGUgcGxhdGZvcm0gdG8gY29uZmlndXJlIEdQSU8gZnVuY3Rpb25zIGFuZCBzaW1pbGFyLgogICogQGlycV9oaWdoOiBTZXQgaWYgV004MzUwIElSUSBpcyBhY3RpdmUgaGlnaC4KICAqIEBpcnFfYmFzZTogQmFzZSBJUlEgZm9yIGdlbmlycSAobm90IGN1cnJlbnRseSB1c2VkKS4KKyAqIEBncGlvX2Jhc2U6IEJhc2UgZm9yIGdwaW9saWIuCiAgKi8KIHN0cnVjdCB3bTgzNTBfcGxhdGZvcm1fZGF0YSB7CiAJaW50ICgqaW5pdCkoc3RydWN0IHdtODM1MCAqd204MzUwKTsKIAlpbnQgaXJxX2hpZ2g7CiAJaW50IGlycV9iYXNlOworCWludCBncGlvX2Jhc2U7CiB9OwogCiAKQEAgLTY3NywxMiArNjc5LDMzIEBACiAvKgogICogV004MzUwIGludGVybmFsIGludGVycnVwdHMKICAqLwotaW50IHdtODM1MF9yZWdpc3Rlcl9pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxLAotCQkJaXJxX2hhbmRsZXJfdCBoYW5kbGVyLCB1bnNpZ25lZCBsb25nIGZsYWdzLAotCQkJY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqZGF0YSk7Ci1pbnQgd204MzUwX2ZyZWVfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSk7Ci1pbnQgd204MzUwX21hc2tfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSk7Ci1pbnQgd204MzUwX3VubWFza19pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxKTsKK3N0YXRpYyBpbmxpbmUgaW50IHdtODM1MF9yZWdpc3Rlcl9pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxLAorCQkJCSAgICAgIGlycV9oYW5kbGVyX3QgaGFuZGxlciwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLAorCQkJCSAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEpCit7CisJaWYgKCF3bTgzNTAtPmlycV9iYXNlKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCXJldHVybiByZXF1ZXN0X3RocmVhZGVkX2lycShpcnEgKyB3bTgzNTAtPmlycV9iYXNlLCBOVUxMLAorCQkJCSAgICBoYW5kbGVyLCBmbGFncywgbmFtZSwgZGF0YSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB3bTgzNTBfZnJlZV9pcnEoc3RydWN0IHdtODM1MCAqd204MzUwLCBpbnQgaXJxLCB2b2lkICpkYXRhKQoreworCWZyZWVfaXJxKGlycSArIHdtODM1MC0+aXJxX2Jhc2UsIGRhdGEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgd204MzUwX21hc2tfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSkKK3sKKwlkaXNhYmxlX2lycShpcnEgKyB3bTgzNTAtPmlycV9iYXNlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHdtODM1MF91bm1hc2tfaXJxKHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSkKK3sKKwllbmFibGVfaXJxKGlycSArIHdtODM1MC0+aXJxX2Jhc2UpOworfQorCiBpbnQgd204MzUwX2lycV9pbml0KHN0cnVjdCB3bTgzNTAgKndtODM1MCwgaW50IGlycSwKIAkJICAgIHN0cnVjdCB3bTgzNTBfcGxhdGZvcm1fZGF0YSAqcGRhdGEpOwogaW50IHdtODM1MF9pcnFfZXhpdChzdHJ1Y3Qgd204MzUwICp3bTgzNTApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2dwaW8uaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9ncGlvLmgKaW5kZXggNzFhZjNkNi4uZDY1N2JjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL2dwaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvZ3Bpby5oCkBAIC0yOSw2ICsyOSw3IEBACiAjZGVmaW5lIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8yICAgICAgICAgICAweDhECiAjZGVmaW5lIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF8zICAgICAgICAgICAweDhFCiAjZGVmaW5lIFdNODM1MF9HUElPX0ZVTkNUSU9OX1NFTEVDVF80ICAgICAgICAgICAweDhGCisjZGVmaW5lIFdNODM1MF9HUElPX0xFVkVMCQkJMHhFNgogCiAvKgogICogR1BJTyBGdW5jdGlvbnMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9ydGMuaCBiL2luY2x1ZGUvbGludXgvbWZkL3dtODM1MC9ydGMuaAppbmRleCAyNGFkZDJiLi5lYmQ3MmZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21mZC93bTgzNTAvcnRjLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204MzUwL3J0Yy5oCkBAIC0yNjMsNiArMjYzLDcgQEAKIAlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwogCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CiAJaW50IGFsYXJtX2VuYWJsZWQ7ICAgICAgLyogdXNlZCBvdmVyIHN1c3BlbmQvcmVzdW1lICovCisJaW50IHVwZGF0ZV9lbmFibGVkOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTg5OTQvY29yZS5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L2NvcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDZmZjI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L2NvcmUuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogaW5jbHVkZS9saW51eC9tZmQvd204OTk0L2NvcmUuaCAtLSBDb3JlIGludGVyZmFjZSBmb3IgV004OTk0CisgKgorICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fTUZEX1dNODk5NF9DT1JFX0hfXworI2RlZmluZSBfX01GRF9XTTg5OTRfQ09SRV9IX18KKworc3RydWN0IHJlZ3VsYXRvcl9kZXY7CitzdHJ1Y3QgcmVndWxhdG9yX2J1bGtfZGF0YTsKKworI2RlZmluZSBXTTg5OTRfTlVNX0dQSU9fUkVHUyAxMQorI2RlZmluZSBXTTg5OTRfTlVNX0xET19SRUdTIDIKKworc3RydWN0IHdtODk5NCB7CisJc3RydWN0IG11dGV4IGlvX2xvY2s7CisKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJaW50ICgqcmVhZF9kZXYpKHN0cnVjdCB3bTg5OTQgKndtODk5NCwgdW5zaWduZWQgc2hvcnQgcmVnLAorCQkJaW50IGJ5dGVzLCB2b2lkICpkZXN0KTsKKwlpbnQgKCp3cml0ZV9kZXYpKHN0cnVjdCB3bTg5OTQgKndtODk5NCwgdW5zaWduZWQgc2hvcnQgcmVnLAorCQkJIGludCBieXRlcywgdm9pZCAqc3JjKTsKKworCXZvaWQgKmNvbnRyb2xfZGF0YTsKKworCWludCBncGlvX2Jhc2U7CisKKwkvKiBVc2VkIG92ZXIgc3VzcGVuZC9yZXN1bWUgKi8KKwl1MTYgbGRvX3JlZ3NbV004OTk0X05VTV9MRE9fUkVHU107CisJdTE2IGdwaW9fcmVnc1tXTTg5OTRfTlVNX0dQSU9fUkVHU107CisKKwlzdHJ1Y3QgcmVndWxhdG9yX2RldiAqZGJ2ZGQ7CisJc3RydWN0IHJlZ3VsYXRvcl9idWxrX2RhdGEgKnN1cHBsaWVzOworfTsKKworLyogRGV2aWNlIEkvTyBBUEkgKi8KK2ludCB3bTg5OTRfcmVnX3JlYWQoc3RydWN0IHdtODk5NCAqd204OTk0LCB1bnNpZ25lZCBzaG9ydCByZWcpOworaW50IHdtODk5NF9yZWdfd3JpdGUoc3RydWN0IHdtODk5NCAqd204OTk0LCB1bnNpZ25lZCBzaG9ydCByZWcsCisJCSB1bnNpZ25lZCBzaG9ydCB2YWwpOworaW50IHdtODk5NF9zZXRfYml0cyhzdHJ1Y3Qgd204OTk0ICp3bTg5OTQsIHVuc2lnbmVkIHNob3J0IHJlZywKKwkJICAgIHVuc2lnbmVkIHNob3J0IG1hc2ssIHVuc2lnbmVkIHNob3J0IHZhbCk7CitpbnQgd204OTk0X2J1bGtfcmVhZChzdHJ1Y3Qgd204OTk0ICp3bTg5OTQsIHVuc2lnbmVkIHNob3J0IHJlZywKKwkJICAgICBpbnQgY291bnQsIHUxNiAqYnVmKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21mZC93bTg5OTQvZ3Bpby5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L2dwaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGQ0YzIyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L2dwaW8uaApAQCAtMCwwICsxLDcyIEBACisvKgorICogaW5jbHVkZS9saW51eC9tZmQvd204OTk0L2dwaW8uaCAtIEdQSU8gY29uZmlndXJhdGlvbiBmb3IgV004OTk0CisgKgorICogQ29weXJpZ2h0IDIwMDkgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFBMQy4KKyAqCisgKiBBdXRob3I6IE1hcmsgQnJvd24gPGJyb29uaWVAb3BlbnNvdXJjZS53b2xmc29ubWljcm8uY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaWZuZGVmIF9fTUZEX1dNODk5NF9HUElPX0hfXworI2RlZmluZSBfX01GRF9XTTg5OTRfR1BJT19IX18KKworI2RlZmluZSBXTTg5OTRfR1BJT19NQVggMTEKKworI2RlZmluZSBXTTg5OTRfR1BfRk5fUElOX1NQRUNJRklDICAgIDAKKyNkZWZpbmUgV004OTk0X0dQX0ZOX0dQSU8gICAgICAgICAgICAxCisjZGVmaW5lIFdNODk5NF9HUF9GTl9TRE9VVCAgICAgICAgICAgMgorI2RlZmluZSBXTTg5OTRfR1BfRk5fSVJRICAgICAgICAgICAgIDMKKyNkZWZpbmUgV004OTk0X0dQX0ZOX1RFTVBFUkFUVVJFICAgICA0CisjZGVmaW5lIFdNODk5NF9HUF9GTl9NSUNCSUFTMV9ERVQgICAgNQorI2RlZmluZSBXTTg5OTRfR1BfRk5fTUlDQklBUzFfU0hPUlQgIDYKKyNkZWZpbmUgV004OTk0X0dQX0ZOX01JQ0JJQVMyX0RFVCAgICA3CisjZGVmaW5lIFdNODk5NF9HUF9GTl9NSUNCSUFTMl9TSE9SVCAgOAorI2RlZmluZSBXTTg5OTRfR1BfRk5fRkxMMV9MT0NLICAgICAgIDkKKyNkZWZpbmUgV004OTk0X0dQX0ZOX0ZMTDJfTE9DSyAgICAgIDEwCisjZGVmaW5lIFdNODk5NF9HUF9GTl9TUkMxX0xPQ0sgICAgICAxMQorI2RlZmluZSBXTTg5OTRfR1BfRk5fU1JDMl9MT0NLICAgICAgMTIKKyNkZWZpbmUgV004OTk0X0dQX0ZOX0RSQzFfQUNUICAgICAgIDEzCisjZGVmaW5lIFdNODk5NF9HUF9GTl9EUkMyX0FDVCAgICAgICAxNAorI2RlZmluZSBXTTg5OTRfR1BfRk5fRFJDM19BQ1QgICAgICAgMTUKKyNkZWZpbmUgV004OTk0X0dQX0ZOX1dTRVFfU1RBVFVTICAgIDE2CisjZGVmaW5lIFdNODk5NF9HUF9GTl9GSUZPX0VSUk9SICAgICAxNworI2RlZmluZSBXTTg5OTRfR1BfRk5fT1BDTEsgICAgICAgICAgMTgKKworI2RlZmluZSBXTTg5OTRfR1BOX0RJUiAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBHUE5fRElSICovCisjZGVmaW5lIFdNODk5NF9HUE5fRElSX01BU0sgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEdQTl9ESVIgKi8KKyNkZWZpbmUgV004OTk0X0dQTl9ESVJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAxNSAgLyogR1BOX0RJUiAqLworI2RlZmluZSBXTTg5OTRfR1BOX0RJUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUE5fRElSICovCisjZGVmaW5lIFdNODk5NF9HUE5fUFUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEdQTl9QVSAqLworI2RlZmluZSBXTTg5OTRfR1BOX1BVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBHUE5fUFUgKi8KKyNkZWZpbmUgV004OTk0X0dQTl9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAxNCAgLyogR1BOX1BVICovCisjZGVmaW5lIFdNODk5NF9HUE5fUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQTl9QVSAqLworI2RlZmluZSBXTTg5OTRfR1BOX1BEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBHUE5fUEQgKi8KKyNkZWZpbmUgV004OTk0X0dQTl9QRF9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogR1BOX1BEICovCisjZGVmaW5lIFdNODk5NF9HUE5fUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMTMgIC8qIEdQTl9QRCAqLworI2RlZmluZSBXTTg5OTRfR1BOX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUE5fUEQgKi8KKyNkZWZpbmUgV004OTk0X0dQTl9QT0wgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogR1BOX1BPTCAqLworI2RlZmluZSBXTTg5OTRfR1BOX1BPTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBHUE5fUE9MICovCisjZGVmaW5lIFdNODk5NF9HUE5fUE9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIEdQTl9QT0wgKi8KKyNkZWZpbmUgV004OTk0X0dQTl9QT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1BOX1BPTCAqLworI2RlZmluZSBXTTg5OTRfR1BOX09QX0NGRyAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUE5fT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5NF9HUE5fT1BfQ0ZHX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIEdQTl9PUF9DRkcgKi8KKyNkZWZpbmUgV004OTk0X0dQTl9PUF9DRkdfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOSAgLyogR1BOX09QX0NGRyAqLworI2RlZmluZSBXTTg5OTRfR1BOX09QX0NGR19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUE5fT1BfQ0ZHICovCisjZGVmaW5lIFdNODk5NF9HUE5fREIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEdQTl9EQiAqLworI2RlZmluZSBXTTg5OTRfR1BOX0RCX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBHUE5fREIgKi8KKyNkZWZpbmUgV004OTk0X0dQTl9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogR1BOX0RCICovCisjZGVmaW5lIFdNODk5NF9HUE5fREJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQTl9EQiAqLworI2RlZmluZSBXTTg5OTRfR1BOX0xWTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBHUE5fTFZMICovCisjZGVmaW5lIFdNODk5NF9HUE5fTFZMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEdQTl9MVkwgKi8KKyNkZWZpbmUgV004OTk0X0dQTl9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogR1BOX0xWTCAqLworI2RlZmluZSBXTTg5OTRfR1BOX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUE5fTFZMICovCisjZGVmaW5lIFdNODk5NF9HUE5fRk5fTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMUYgIC8qIEdQTl9GTiAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NF9HUE5fRk5fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEdQTl9GTiAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NF9HUE5fRk5fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEdQTl9GTiAtIFs0OjBdICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L3BkYXRhLmggYi9pbmNsdWRlL2xpbnV4L21mZC93bTg5OTQvcGRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGQ2YTg2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L3BkYXRhLmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIGluY2x1ZGUvbGludXgvbWZkL3dtODk5NC9wZGF0YS5oIC0tIFBsYXRmb3JtIGRhdGEgZm9yIFdNODk5NAorICoKKyAqIENvcHlyaWdodCAyMDA5IFdvbGZzb24gTWljcm9lbGVjdHJvbmljcyBQTEMuCisgKgorICogQXV0aG9yOiBNYXJrIEJyb3duIDxicm9vbmllQG9wZW5zb3VyY2Uud29sZnNvbm1pY3JvLmNvbT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2lmbmRlZiBfX01GRF9XTTg5OTRfUERBVEFfSF9fCisjZGVmaW5lIF9fTUZEX1dNODk5NF9QREFUQV9IX18KKworI2RlZmluZSBXTTg5OTRfTlVNX0xETyAgIDIKKyNkZWZpbmUgV004OTk0X05VTV9HUElPIDExCisKK3N0cnVjdCB3bTg5OTRfbGRvX3BkYXRhIHsKKwkvKiogR1BJT3MgdG8gZW5hYmxlIHJlZ3VsYXRvciwgMCBvciBsZXNzIGlmIG5vdCBhdmFpbGFibGUgKi8KKwlpbnQgZW5hYmxlOworCisJY29uc3QgY2hhciAqc3VwcGx5OworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICppbml0X2RhdGE7Cit9OworCisjZGVmaW5lIFdNODk5NF9DT05GSUdVUkVfR1BJTyAweDgwMDAKKworI2RlZmluZSBXTTg5OTRfRFJDX1JFR1MgNQorI2RlZmluZSBXTTg5OTRfRVFfUkVHUyAgMTkKKworLyoqCisgKiBEUkMgY29uZmlndXJhdGlvbnMgYXJlIHNwZWNpZmllZCB3aXRoIGEgbGFiZWwgYW5kIGEgc2V0IG9mIHJlZ2lzdGVyCisgKiB2YWx1ZXMgdG8gd3JpdGUgKHRoZSBlbmFibGUgYml0cyB3aWxsIGJlIGlnbm9yZWQpLiAgQXQgcnVudGltZSBhbgorICogZW51bWVyYXRlZCBjb250cm9sIHdpbGwgYmUgcHJlc2VudGVkIGZvciBlYWNoIERSQyBibG9jayBhbGxvd2luZworICogdGhlIHVzZXIgdG8gY2hvb3NlIHRoZSBjb25maWdyYXRpb24gdG8gdXNlLgorICoKKyAqIENvbmZpZ3VyYXRpb25zIG1heSBiZSBnZW5lcmF0ZWQgYnkgaGFuZCBvciBieSB1c2luZyB0aGUgRFJDIGNvbnRyb2wKKyAqIHBhbmVsIHByb3ZpZGVkIGJ5IHRoZSBXSVNDRSAtIHNlZSAgaHR0cDovL3d3dy53b2xmc29ubWljcm8uY29tL3dpc2NlLworICogZm9yIGRldGFpbHMuCisgKi8KK3N0cnVjdCB3bTg5OTRfZHJjX2NmZyB7CisgICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgICAgIHUxNiByZWdzW1dNODk5NF9EUkNfUkVHU107Cit9OworCisvKioKKyAqIFJlVHVuZSBNb2JpbGUgY29uZmlndXJhdGlvbnMgYXJlIHNwZWNpZmllZCB3aXRoIGEgbGFiZWwsIHNhbXBsZQorICogcmF0ZSBhbmQgc2V0IG9mIHZhbHVlcyB0byB3cml0ZSAodGhlIGVuYWJsZSBiaXRzIHdpbGwgYmUgaWdub3JlZCkuCisgKgorICogQ29uZmlndXJhdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGJlIGdlbmVyYXRlZCB1c2luZyB0aGUgUmVUdW5lIE1vYmlsZQorICogY29udHJvbCBwYW5lbCBpbiBXSVNDRSAtIHNlZSBodHRwOi8vd3d3LndvbGZzb25taWNyby5jb20vd2lzY2UvCisgKi8KK3N0cnVjdCB3bTg5OTRfcmV0dW5lX21vYmlsZV9jZmcgeworICAgICAgICBjb25zdCBjaGFyICpuYW1lOworICAgICAgICB1bnNpZ25lZCBpbnQgcmF0ZTsKKyAgICAgICAgdTE2IHJlZ3NbV004OTk0X0VRX1JFR1NdOworfTsKKworc3RydWN0IHdtODk5NF9wZGF0YSB7CisJaW50IGdwaW9fYmFzZTsKKworCS8qKgorCSAqIERlZmF1bHQgdmFsdWVzIGZvciBHUElPcyBpZiBub24temVybywgV004OTk0X0NPTkZJR1VSRV9HUElPCisJICogY2FuIGJlIHVzZWQgZm9yIGFsbCB6ZXJvIHZhbHVlcy4KKwkgKi8KKwlpbnQgZ3Bpb19kZWZhdWx0c1tXTTg5OTRfTlVNX0dQSU9dOworCisJc3RydWN0IHdtODk5NF9sZG9fcGRhdGEgbGRvW1dNODk5NF9OVU1fTERPXTsKKworCisgICAgICAgIGludCBudW1fZHJjX2NmZ3M7CisgICAgICAgIHN0cnVjdCB3bTg5OTRfZHJjX2NmZyAqZHJjX2NmZ3M7CisKKyAgICAgICAgaW50IG51bV9yZXR1bmVfbW9iaWxlX2NmZ3M7CisgICAgICAgIHN0cnVjdCB3bTg5OTRfcmV0dW5lX21vYmlsZV9jZmcgKnJldHVuZV9tb2JpbGVfY2ZnczsKKworICAgICAgICAvKiBMSU5FT1VUIGNhbiBiZSBkaWZmZXJlbnRpYWwgb3Igc2luZ2xlIGVuZGVkICovCisgICAgICAgIHVuc2lnbmVkIGludCBsaW5lb3V0MV9kaWZmOjE7CisgICAgICAgIHVuc2lnbmVkIGludCBsaW5lb3V0Ml9kaWZmOjE7CisKKyAgICAgICAgLyogQ29tbW9uIG1vZGUgZmVlZGJhY2sgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IGxpbmVvdXQxZmI6MTsKKyAgICAgICAgdW5zaWduZWQgaW50IGxpbmVvdXQyZmI6MTsKKworICAgICAgICAvKiBNaWNyb3Bob25lIGJpYXNlczogMD0wLjkqQVZERDEgMT0wLjY1KkFWVkQxICovCisgICAgICAgIHVuc2lnbmVkIGludCBtaWNiaWFzMV9sdmw6MTsKKyAgICAgICAgdW5zaWduZWQgaW50IG1pY2JpYXMyX2x2bDoxOworCisgICAgICAgIC8qIEphY2sgZGV0ZWN0IHRocmVhc2hvbGQgbGV2ZWxzLCBzZWUgZGF0YXNoZWV0IGZvciB2YWx1ZXMgKi8KKyAgICAgICAgdW5zaWduZWQgaW50IGpkX3NjdGhyOjI7CisgICAgICAgIHVuc2lnbmVkIGludCBqZF90aHI6MjsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L3JlZ2lzdGVycy5oIGIvaW5jbHVkZS9saW51eC9tZmQvd204OTk0L3JlZ2lzdGVycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2N2Y2MmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21mZC93bTg5OTQvcmVnaXN0ZXJzLmgKQEAgLTAsMCArMSw0MjkyIEBACisvKgorICogaW5jbHVkZS9saW51eC9tZmQvd204OTk0L3JlZ2lzdGVycy5oIC0tIFJlZ2lzdGVyIGRlZmluaXRpb25zIGZvciBXTTg5OTQKKyAqCisgKiBDb3B5cmlnaHQgMjAwOSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgUExDLgorICoKKyAqIEF1dGhvcjogTWFyayBCcm93biA8YnJvb25pZUBvcGVuc291cmNlLndvbGZzb25taWNyby5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICovCisKKyNpZm5kZWYgX19NRkRfV004OTk0X1JFR0lTVEVSU19IX18KKyNkZWZpbmUgX19NRkRfV004OTk0X1JFR0lTVEVSU19IX18KKworLyoKKyAqIFJlZ2lzdGVyIHZhbHVlcy4KKyAqLworI2RlZmluZSBXTTg5OTRfU09GVFdBUkVfUkVTRVQgICAgICAgICAgICAgICAgICAgMHgwMAorI2RlZmluZSBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF8xICAgICAgICAgICAgICAgMHgwMQorI2RlZmluZSBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF8yICAgICAgICAgICAgICAgMHgwMgorI2RlZmluZSBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF8zICAgICAgICAgICAgICAgMHgwMworI2RlZmluZSBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF80ICAgICAgICAgICAgICAgMHgwNAorI2RlZmluZSBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF81ICAgICAgICAgICAgICAgMHgwNQorI2RlZmluZSBXTTg5OTRfUE9XRVJfTUFOQUdFTUVOVF82ICAgICAgICAgICAgICAgMHgwNgorI2RlZmluZSBXTTg5OTRfSU5QVVRfTUlYRVJfMSAgICAgICAgICAgICAgICAgICAgMHgxNQorI2RlZmluZSBXTTg5OTRfTEVGVF9MSU5FX0lOUFVUXzFfMl9WT0xVTUUgICAgICAgMHgxOAorI2RlZmluZSBXTTg5OTRfTEVGVF9MSU5FX0lOUFVUXzNfNF9WT0xVTUUgICAgICAgMHgxOQorI2RlZmluZSBXTTg5OTRfUklHSFRfTElORV9JTlBVVF8xXzJfVk9MVU1FICAgICAgMHgxQQorI2RlZmluZSBXTTg5OTRfUklHSFRfTElORV9JTlBVVF8zXzRfVk9MVU1FICAgICAgMHgxQgorI2RlZmluZSBXTTg5OTRfTEVGVF9PVVRQVVRfVk9MVU1FICAgICAgICAgICAgICAgMHgxQworI2RlZmluZSBXTTg5OTRfUklHSFRfT1VUUFVUX1ZPTFVNRSAgICAgICAgICAgICAgMHgxRAorI2RlZmluZSBXTTg5OTRfTElORV9PVVRQVVRTX1ZPTFVNRSAgICAgICAgICAgICAgMHgxRQorI2RlZmluZSBXTTg5OTRfSFBPVVQyX1ZPTFVNRSAgICAgICAgICAgICAgICAgICAgMHgxRgorI2RlZmluZSBXTTg5OTRfTEVGVF9PUEdBX1ZPTFVNRSAgICAgICAgICAgICAgICAgMHgyMAorI2RlZmluZSBXTTg5OTRfUklHSFRfT1BHQV9WT0xVTUUgICAgICAgICAgICAgICAgMHgyMQorI2RlZmluZSBXTTg5OTRfU1BLTUlYTF9BVFRFTlVBVElPTiAgICAgICAgICAgICAgMHgyMgorI2RlZmluZSBXTTg5OTRfU1BLTUlYUl9BVFRFTlVBVElPTiAgICAgICAgICAgICAgMHgyMworI2RlZmluZSBXTTg5OTRfU1BLT1VUX01JWEVSUyAgICAgICAgICAgICAgICAgICAgMHgyNAorI2RlZmluZSBXTTg5OTRfQ0xBU1NEICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNQorI2RlZmluZSBXTTg5OTRfU1BFQUtFUl9WT0xVTUVfTEVGVCAgICAgICAgICAgICAgMHgyNgorI2RlZmluZSBXTTg5OTRfU1BFQUtFUl9WT0xVTUVfUklHSFQgICAgICAgICAgICAgMHgyNworI2RlZmluZSBXTTg5OTRfSU5QVVRfTUlYRVJfMiAgICAgICAgICAgICAgICAgICAgMHgyOAorI2RlZmluZSBXTTg5OTRfSU5QVVRfTUlYRVJfMyAgICAgICAgICAgICAgICAgICAgMHgyOQorI2RlZmluZSBXTTg5OTRfSU5QVVRfTUlYRVJfNCAgICAgICAgICAgICAgICAgICAgMHgyQQorI2RlZmluZSBXTTg5OTRfSU5QVVRfTUlYRVJfNSAgICAgICAgICAgICAgICAgICAgMHgyQgorI2RlZmluZSBXTTg5OTRfSU5QVVRfTUlYRVJfNiAgICAgICAgICAgICAgICAgICAgMHgyQworI2RlZmluZSBXTTg5OTRfT1VUUFVUX01JWEVSXzEgICAgICAgICAgICAgICAgICAgMHgyRAorI2RlZmluZSBXTTg5OTRfT1VUUFVUX01JWEVSXzIgICAgICAgICAgICAgICAgICAgMHgyRQorI2RlZmluZSBXTTg5OTRfT1VUUFVUX01JWEVSXzMgICAgICAgICAgICAgICAgICAgMHgyRgorI2RlZmluZSBXTTg5OTRfT1VUUFVUX01JWEVSXzQgICAgICAgICAgICAgICAgICAgMHgzMAorI2RlZmluZSBXTTg5OTRfT1VUUFVUX01JWEVSXzUgICAgICAgICAgICAgICAgICAgMHgzMQorI2RlZmluZSBXTTg5OTRfT1VUUFVUX01JWEVSXzYgICAgICAgICAgICAgICAgICAgMHgzMgorI2RlZmluZSBXTTg5OTRfSFBPVVQyX01JWEVSICAgICAgICAgICAgICAgICAgICAgMHgzMworI2RlZmluZSBXTTg5OTRfTElORV9NSVhFUl8xICAgICAgICAgICAgICAgICAgICAgMHgzNAorI2RlZmluZSBXTTg5OTRfTElORV9NSVhFUl8yICAgICAgICAgICAgICAgICAgICAgMHgzNQorI2RlZmluZSBXTTg5OTRfU1BFQUtFUl9NSVhFUiAgICAgICAgICAgICAgICAgICAgMHgzNgorI2RlZmluZSBXTTg5OTRfQURESVRJT05BTF9DT05UUk9MICAgICAgICAgICAgICAgMHgzNworI2RlZmluZSBXTTg5OTRfQU5USVBPUF8xICAgICAgICAgICAgICAgICAgICAgICAgMHgzOAorI2RlZmluZSBXTTg5OTRfQU5USVBPUF8yICAgICAgICAgICAgICAgICAgICAgICAgMHgzOQorI2RlZmluZSBXTTg5OTRfTUlDQklBUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzQQorI2RlZmluZSBXTTg5OTRfTERPXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzQgorI2RlZmluZSBXTTg5OTRfTERPXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzQworI2RlZmluZSBXTTg5OTRfQ0hBUkdFX1BVTVBfMSAgICAgICAgICAgICAgICAgICAgMHg0QworI2RlZmluZSBXTTg5OTRfQ0xBU1NfV18xICAgICAgICAgICAgICAgICAgICAgICAgMHg1MQorI2RlZmluZSBXTTg5OTRfRENfU0VSVk9fMSAgICAgICAgICAgICAgICAgICAgICAgMHg1NAorI2RlZmluZSBXTTg5OTRfRENfU0VSVk9fMiAgICAgICAgICAgICAgICAgICAgICAgMHg1NQorI2RlZmluZSBXTTg5OTRfRENfU0VSVk9fNCAgICAgICAgICAgICAgICAgICAgICAgMHg1NworI2RlZmluZSBXTTg5OTRfRENfU0VSVk9fUkVBREJBQ0sgICAgICAgICAgICAgICAgMHg1OAorI2RlZmluZSBXTTg5OTRfQU5BTE9HVUVfSFBfMSAgICAgICAgICAgICAgICAgICAgMHg2MAorI2RlZmluZSBXTTg5OTRfQ0hJUF9SRVZJU0lPTiAgICAgICAgICAgICAgICAgICAgMHgxMDAKKyNkZWZpbmUgV004OTk0X0NPTlRST0xfSU5URVJGQUNFICAgICAgICAgICAgICAgIDB4MTAxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfQ1RSTF8xICAgICAgICAgICAweDExMAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSX0NUUkxfMiAgICAgICAgICAgMHgxMTEKKyNkZWZpbmUgV004OTk0X0FJRjFfQ0xPQ0tJTkdfMSAgICAgICAgICAgICAgICAgIDB4MjAwCisjZGVmaW5lIFdNODk5NF9BSUYxX0NMT0NLSU5HXzIgICAgICAgICAgICAgICAgICAweDIwMQorI2RlZmluZSBXTTg5OTRfQUlGMl9DTE9DS0lOR18xICAgICAgICAgICAgICAgICAgMHgyMDQKKyNkZWZpbmUgV004OTk0X0FJRjJfQ0xPQ0tJTkdfMiAgICAgICAgICAgICAgICAgIDB4MjA1CisjZGVmaW5lIFdNODk5NF9DTE9DS0lOR18xICAgICAgICAgICAgICAgICAgICAgICAweDIwOAorI2RlZmluZSBXTTg5OTRfQ0xPQ0tJTkdfMiAgICAgICAgICAgICAgICAgICAgICAgMHgyMDkKKyNkZWZpbmUgV004OTk0X0FJRjFfUkFURSAgICAgICAgICAgICAgICAgICAgICAgIDB4MjEwCisjZGVmaW5lIFdNODk5NF9BSUYyX1JBVEUgICAgICAgICAgICAgICAgICAgICAgICAweDIxMQorI2RlZmluZSBXTTg5OTRfUkFURV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgMHgyMTIKKyNkZWZpbmUgV004OTk0X0ZMTDFfQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgIDB4MjIwCisjZGVmaW5lIFdNODk5NF9GTEwxX0NPTlRST0xfMiAgICAgICAgICAgICAgICAgICAweDIyMQorI2RlZmluZSBXTTg5OTRfRkxMMV9DT05UUk9MXzMgICAgICAgICAgICAgICAgICAgMHgyMjIKKyNkZWZpbmUgV004OTk0X0ZMTDFfQ09OVFJPTF80ICAgICAgICAgICAgICAgICAgIDB4MjIzCisjZGVmaW5lIFdNODk5NF9GTEwxX0NPTlRST0xfNSAgICAgICAgICAgICAgICAgICAweDIyNAorI2RlZmluZSBXTTg5OTRfRkxMMl9DT05UUk9MXzEgICAgICAgICAgICAgICAgICAgMHgyNDAKKyNkZWZpbmUgV004OTk0X0ZMTDJfQ09OVFJPTF8yICAgICAgICAgICAgICAgICAgIDB4MjQxCisjZGVmaW5lIFdNODk5NF9GTEwyX0NPTlRST0xfMyAgICAgICAgICAgICAgICAgICAweDI0MgorI2RlZmluZSBXTTg5OTRfRkxMMl9DT05UUk9MXzQgICAgICAgICAgICAgICAgICAgMHgyNDMKKyNkZWZpbmUgV004OTk0X0ZMTDJfQ09OVFJPTF81ICAgICAgICAgICAgICAgICAgIDB4MjQ0CisjZGVmaW5lIFdNODk5NF9BSUYxX0NPTlRST0xfMSAgICAgICAgICAgICAgICAgICAweDMwMAorI2RlZmluZSBXTTg5OTRfQUlGMV9DT05UUk9MXzIgICAgICAgICAgICAgICAgICAgMHgzMDEKKyNkZWZpbmUgV004OTk0X0FJRjFfTUFTVEVSX1NMQVZFICAgICAgICAgICAgICAgIDB4MzAyCisjZGVmaW5lIFdNODk5NF9BSUYxX0JDTEsgICAgICAgICAgICAgICAgICAgICAgICAweDMwMworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ19MUkNMSyAgICAgICAgICAgICAgICAgICAgMHgzMDQKKyNkZWZpbmUgV004OTk0X0FJRjFEQUNfTFJDTEsgICAgICAgICAgICAgICAgICAgIDB4MzA1CisjZGVmaW5lIFdNODk5NF9BSUYxREFDX0RBVEEgICAgICAgICAgICAgICAgICAgICAweDMwNgorI2RlZmluZSBXTTg5OTRfQUlGMUFEQ19EQVRBICAgICAgICAgICAgICAgICAgICAgMHgzMDcKKyNkZWZpbmUgV004OTk0X0FJRjJfQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgIDB4MzEwCisjZGVmaW5lIFdNODk5NF9BSUYyX0NPTlRST0xfMiAgICAgICAgICAgICAgICAgICAweDMxMQorI2RlZmluZSBXTTg5OTRfQUlGMl9NQVNURVJfU0xBVkUgICAgICAgICAgICAgICAgMHgzMTIKKyNkZWZpbmUgV004OTk0X0FJRjJfQkNMSyAgICAgICAgICAgICAgICAgICAgICAgIDB4MzEzCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX0xSQ0xLICAgICAgICAgICAgICAgICAgICAweDMxNAorI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19MUkNMSyAgICAgICAgICAgICAgICAgICAgMHgzMTUKKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfREFUQSAgICAgICAgICAgICAgICAgICAgIDB4MzE2CisjZGVmaW5lIFdNODk5NF9BSUYyQURDX0RBVEEgICAgICAgICAgICAgICAgICAgICAweDMxNworI2RlZmluZSBXTTg5OTRfQUlGMV9BREMxX0xFRlRfVk9MVU1FICAgICAgICAgICAgMHg0MDAKKyNkZWZpbmUgV004OTk0X0FJRjFfQURDMV9SSUdIVF9WT0xVTUUgICAgICAgICAgIDB4NDAxCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzFfTEVGVF9WT0xVTUUgICAgICAgICAgICAweDQwMgorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMxX1JJR0hUX1ZPTFVNRSAgICAgICAgICAgMHg0MDMKKyNkZWZpbmUgV004OTk0X0FJRjFfQURDMl9MRUZUX1ZPTFVNRSAgICAgICAgICAgIDB4NDA0CisjZGVmaW5lIFdNODk5NF9BSUYxX0FEQzJfUklHSFRfVk9MVU1FICAgICAgICAgICAweDQwNQorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMyX0xFRlRfVk9MVU1FICAgICAgICAgICAgMHg0MDYKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMl9SSUdIVF9WT0xVTUUgICAgICAgICAgIDB4NDA3CisjZGVmaW5lIFdNODk5NF9BSUYxX0FEQzFfRklMVEVSUyAgICAgICAgICAgICAgICAweDQxMAorI2RlZmluZSBXTTg5OTRfQUlGMV9BREMyX0ZJTFRFUlMgICAgICAgICAgICAgICAgMHg0MTEKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMV9GSUxURVJTXzEgICAgICAgICAgICAgIDB4NDIwCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzFfRklMVEVSU18yICAgICAgICAgICAgICAweDQyMQorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMyX0ZJTFRFUlNfMSAgICAgICAgICAgICAgMHg0MjIKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMl9GSUxURVJTXzIgICAgICAgICAgICAgIDB4NDIzCisjZGVmaW5lIFdNODk5NF9BSUYxX0RSQzFfMSAgICAgICAgICAgICAgICAgICAgICAweDQ0MAorI2RlZmluZSBXTTg5OTRfQUlGMV9EUkMxXzIgICAgICAgICAgICAgICAgICAgICAgMHg0NDEKKyNkZWZpbmUgV004OTk0X0FJRjFfRFJDMV8zICAgICAgICAgICAgICAgICAgICAgIDB4NDQyCisjZGVmaW5lIFdNODk5NF9BSUYxX0RSQzFfNCAgICAgICAgICAgICAgICAgICAgICAweDQ0MworI2RlZmluZSBXTTg5OTRfQUlGMV9EUkMxXzUgICAgICAgICAgICAgICAgICAgICAgMHg0NDQKKyNkZWZpbmUgV004OTk0X0FJRjFfRFJDMl8xICAgICAgICAgICAgICAgICAgICAgIDB4NDUwCisjZGVmaW5lIFdNODk5NF9BSUYxX0RSQzJfMiAgICAgICAgICAgICAgICAgICAgICAweDQ1MQorI2RlZmluZSBXTTg5OTRfQUlGMV9EUkMyXzMgICAgICAgICAgICAgICAgICAgICAgMHg0NTIKKyNkZWZpbmUgV004OTk0X0FJRjFfRFJDMl80ICAgICAgICAgICAgICAgICAgICAgIDB4NDUzCisjZGVmaW5lIFdNODk5NF9BSUYxX0RSQzJfNSAgICAgICAgICAgICAgICAgICAgICAweDQ1NAorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMxX0VRX0dBSU5TXzEgICAgICAgICAgICAgMHg0ODAKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMV9FUV9HQUlOU18yICAgICAgICAgICAgIDB4NDgxCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzFfRVFfQkFORF8xX0EgICAgICAgICAgICAweDQ4MgorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMxX0VRX0JBTkRfMV9CICAgICAgICAgICAgMHg0ODMKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMV9FUV9CQU5EXzFfUEcgICAgICAgICAgIDB4NDg0CisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzFfRVFfQkFORF8yX0EgICAgICAgICAgICAweDQ4NQorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMxX0VRX0JBTkRfMl9CICAgICAgICAgICAgMHg0ODYKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMV9FUV9CQU5EXzJfQyAgICAgICAgICAgIDB4NDg3CisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzFfRVFfQkFORF8yX1BHICAgICAgICAgICAweDQ4OAorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMxX0VRX0JBTkRfM19BICAgICAgICAgICAgMHg0ODkKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMV9FUV9CQU5EXzNfQiAgICAgICAgICAgIDB4NDhBCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzFfRVFfQkFORF8zX0MgICAgICAgICAgICAweDQ4QgorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMxX0VRX0JBTkRfM19QRyAgICAgICAgICAgMHg0OEMKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMV9FUV9CQU5EXzRfQSAgICAgICAgICAgIDB4NDhECisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzFfRVFfQkFORF80X0IgICAgICAgICAgICAweDQ4RQorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMxX0VRX0JBTkRfNF9DICAgICAgICAgICAgMHg0OEYKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMV9FUV9CQU5EXzRfUEcgICAgICAgICAgIDB4NDkwCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzFfRVFfQkFORF81X0EgICAgICAgICAgICAweDQ5MQorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMxX0VRX0JBTkRfNV9CICAgICAgICAgICAgMHg0OTIKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMV9FUV9CQU5EXzVfUEcgICAgICAgICAgIDB4NDkzCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzJfRVFfR0FJTlNfMSAgICAgICAgICAgICAweDRBMAorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMyX0VRX0dBSU5TXzIgICAgICAgICAgICAgMHg0QTEKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMl9FUV9CQU5EXzFfQSAgICAgICAgICAgIDB4NEEyCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzJfRVFfQkFORF8xX0IgICAgICAgICAgICAweDRBMworI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMyX0VRX0JBTkRfMV9QRyAgICAgICAgICAgMHg0QTQKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMl9FUV9CQU5EXzJfQSAgICAgICAgICAgIDB4NEE1CisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzJfRVFfQkFORF8yX0IgICAgICAgICAgICAweDRBNgorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMyX0VRX0JBTkRfMl9DICAgICAgICAgICAgMHg0QTcKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMl9FUV9CQU5EXzJfUEcgICAgICAgICAgIDB4NEE4CisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzJfRVFfQkFORF8zX0EgICAgICAgICAgICAweDRBOQorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMyX0VRX0JBTkRfM19CICAgICAgICAgICAgMHg0QUEKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMl9FUV9CQU5EXzNfQyAgICAgICAgICAgIDB4NEFCCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzJfRVFfQkFORF8zX1BHICAgICAgICAgICAweDRBQworI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMyX0VRX0JBTkRfNF9BICAgICAgICAgICAgMHg0QUQKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMl9FUV9CQU5EXzRfQiAgICAgICAgICAgIDB4NEFFCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzJfRVFfQkFORF80X0MgICAgICAgICAgICAweDRBRgorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMyX0VRX0JBTkRfNF9QRyAgICAgICAgICAgMHg0QjAKKyNkZWZpbmUgV004OTk0X0FJRjFfREFDMl9FUV9CQU5EXzVfQSAgICAgICAgICAgIDB4NEIxCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQzJfRVFfQkFORF81X0IgICAgICAgICAgICAweDRCMgorI2RlZmluZSBXTTg5OTRfQUlGMV9EQUMyX0VRX0JBTkRfNV9QRyAgICAgICAgICAgMHg0QjMKKyNkZWZpbmUgV004OTk0X0FJRjJfQURDX0xFRlRfVk9MVU1FICAgICAgICAgICAgIDB4NTAwCisjZGVmaW5lIFdNODk5NF9BSUYyX0FEQ19SSUdIVF9WT0xVTUUgICAgICAgICAgICAweDUwMQorI2RlZmluZSBXTTg5OTRfQUlGMl9EQUNfTEVGVF9WT0xVTUUgICAgICAgICAgICAgMHg1MDIKKyNkZWZpbmUgV004OTk0X0FJRjJfREFDX1JJR0hUX1ZPTFVNRSAgICAgICAgICAgIDB4NTAzCisjZGVmaW5lIFdNODk5NF9BSUYyX0FEQ19GSUxURVJTICAgICAgICAgICAgICAgICAweDUxMAorI2RlZmluZSBXTTg5OTRfQUlGMl9EQUNfRklMVEVSU18xICAgICAgICAgICAgICAgMHg1MjAKKyNkZWZpbmUgV004OTk0X0FJRjJfREFDX0ZJTFRFUlNfMiAgICAgICAgICAgICAgIDB4NTIxCisjZGVmaW5lIFdNODk5NF9BSUYyX0RSQ18xICAgICAgICAgICAgICAgICAgICAgICAweDU0MAorI2RlZmluZSBXTTg5OTRfQUlGMl9EUkNfMiAgICAgICAgICAgICAgICAgICAgICAgMHg1NDEKKyNkZWZpbmUgV004OTk0X0FJRjJfRFJDXzMgICAgICAgICAgICAgICAgICAgICAgIDB4NTQyCisjZGVmaW5lIFdNODk5NF9BSUYyX0RSQ180ICAgICAgICAgICAgICAgICAgICAgICAweDU0MworI2RlZmluZSBXTTg5OTRfQUlGMl9EUkNfNSAgICAgICAgICAgICAgICAgICAgICAgMHg1NDQKKyNkZWZpbmUgV004OTk0X0FJRjJfRVFfR0FJTlNfMSAgICAgICAgICAgICAgICAgIDB4NTgwCisjZGVmaW5lIFdNODk5NF9BSUYyX0VRX0dBSU5TXzIgICAgICAgICAgICAgICAgICAweDU4MQorI2RlZmluZSBXTTg5OTRfQUlGMl9FUV9CQU5EXzFfQSAgICAgICAgICAgICAgICAgMHg1ODIKKyNkZWZpbmUgV004OTk0X0FJRjJfRVFfQkFORF8xX0IgICAgICAgICAgICAgICAgIDB4NTgzCisjZGVmaW5lIFdNODk5NF9BSUYyX0VRX0JBTkRfMV9QRyAgICAgICAgICAgICAgICAweDU4NAorI2RlZmluZSBXTTg5OTRfQUlGMl9FUV9CQU5EXzJfQSAgICAgICAgICAgICAgICAgMHg1ODUKKyNkZWZpbmUgV004OTk0X0FJRjJfRVFfQkFORF8yX0IgICAgICAgICAgICAgICAgIDB4NTg2CisjZGVmaW5lIFdNODk5NF9BSUYyX0VRX0JBTkRfMl9DICAgICAgICAgICAgICAgICAweDU4NworI2RlZmluZSBXTTg5OTRfQUlGMl9FUV9CQU5EXzJfUEcgICAgICAgICAgICAgICAgMHg1ODgKKyNkZWZpbmUgV004OTk0X0FJRjJfRVFfQkFORF8zX0EgICAgICAgICAgICAgICAgIDB4NTg5CisjZGVmaW5lIFdNODk5NF9BSUYyX0VRX0JBTkRfM19CICAgICAgICAgICAgICAgICAweDU4QQorI2RlZmluZSBXTTg5OTRfQUlGMl9FUV9CQU5EXzNfQyAgICAgICAgICAgICAgICAgMHg1OEIKKyNkZWZpbmUgV004OTk0X0FJRjJfRVFfQkFORF8zX1BHICAgICAgICAgICAgICAgIDB4NThDCisjZGVmaW5lIFdNODk5NF9BSUYyX0VRX0JBTkRfNF9BICAgICAgICAgICAgICAgICAweDU4RAorI2RlZmluZSBXTTg5OTRfQUlGMl9FUV9CQU5EXzRfQiAgICAgICAgICAgICAgICAgMHg1OEUKKyNkZWZpbmUgV004OTk0X0FJRjJfRVFfQkFORF80X0MgICAgICAgICAgICAgICAgIDB4NThGCisjZGVmaW5lIFdNODk5NF9BSUYyX0VRX0JBTkRfNF9QRyAgICAgICAgICAgICAgICAweDU5MAorI2RlZmluZSBXTTg5OTRfQUlGMl9FUV9CQU5EXzVfQSAgICAgICAgICAgICAgICAgMHg1OTEKKyNkZWZpbmUgV004OTk0X0FJRjJfRVFfQkFORF81X0IgICAgICAgICAgICAgICAgIDB4NTkyCisjZGVmaW5lIFdNODk5NF9BSUYyX0VRX0JBTkRfNV9QRyAgICAgICAgICAgICAgICAweDU5MworI2RlZmluZSBXTTg5OTRfREFDMV9NSVhFUl9WT0xVTUVTICAgICAgICAgICAgICAgMHg2MDAKKyNkZWZpbmUgV004OTk0X0RBQzFfTEVGVF9NSVhFUl9ST1VUSU5HICAgICAgICAgIDB4NjAxCisjZGVmaW5lIFdNODk5NF9EQUMxX1JJR0hUX01JWEVSX1JPVVRJTkcgICAgICAgICAweDYwMgorI2RlZmluZSBXTTg5OTRfREFDMl9NSVhFUl9WT0xVTUVTICAgICAgICAgICAgICAgMHg2MDMKKyNkZWZpbmUgV004OTk0X0RBQzJfTEVGVF9NSVhFUl9ST1VUSU5HICAgICAgICAgIDB4NjA0CisjZGVmaW5lIFdNODk5NF9EQUMyX1JJR0hUX01JWEVSX1JPVVRJTkcgICAgICAgICAweDYwNQorI2RlZmluZSBXTTg5OTRfQUlGMV9BREMxX0xFRlRfTUlYRVJfUk9VVElORyAgICAgMHg2MDYKKyNkZWZpbmUgV004OTk0X0FJRjFfQURDMV9SSUdIVF9NSVhFUl9ST1VUSU5HICAgIDB4NjA3CisjZGVmaW5lIFdNODk5NF9BSUYxX0FEQzJfTEVGVF9NSVhFUl9ST1VUSU5HICAgICAweDYwOAorI2RlZmluZSBXTTg5OTRfQUlGMV9BREMyX1JJR0hUX01JWEVSX1JPVVRJTkcgICAgMHg2MDkKKyNkZWZpbmUgV004OTk0X0RBQzFfTEVGVF9WT0xVTUUgICAgICAgICAgICAgICAgIDB4NjEwCisjZGVmaW5lIFdNODk5NF9EQUMxX1JJR0hUX1ZPTFVNRSAgICAgICAgICAgICAgICAweDYxMQorI2RlZmluZSBXTTg5OTRfREFDMl9MRUZUX1ZPTFVNRSAgICAgICAgICAgICAgICAgMHg2MTIKKyNkZWZpbmUgV004OTk0X0RBQzJfUklHSFRfVk9MVU1FICAgICAgICAgICAgICAgIDB4NjEzCisjZGVmaW5lIFdNODk5NF9EQUNfU09GVE1VVEUgICAgICAgICAgICAgICAgICAgICAweDYxNAorI2RlZmluZSBXTTg5OTRfT1ZFUlNBTVBMSU5HICAgICAgICAgICAgICAgICAgICAgMHg2MjAKKyNkZWZpbmUgV004OTk0X1NJREVUT05FICAgICAgICAgICAgICAgICAgICAgICAgIDB4NjIxCisjZGVmaW5lIFdNODk5NF9HUElPXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwMAorI2RlZmluZSBXTTg5OTRfR1BJT18yICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MDEKKyNkZWZpbmUgV004OTk0X0dQSU9fMyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzAyCisjZGVmaW5lIFdNODk5NF9HUElPXzQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwMworI2RlZmluZSBXTTg5OTRfR1BJT181ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MDQKKyNkZWZpbmUgV004OTk0X0dQSU9fNiAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzA1CisjZGVmaW5lIFdNODk5NF9HUElPXzcgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwNgorI2RlZmluZSBXTTg5OTRfR1BJT184ICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MDcKKyNkZWZpbmUgV004OTk0X0dQSU9fOSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzA4CisjZGVmaW5lIFdNODk5NF9HUElPXzEwICAgICAgICAgICAgICAgICAgICAgICAgICAweDcwOQorI2RlZmluZSBXTTg5OTRfR1BJT18xMSAgICAgICAgICAgICAgICAgICAgICAgICAgMHg3MEEKKyNkZWZpbmUgV004OTk0X1BVTExfQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgIDB4NzIwCisjZGVmaW5lIFdNODk5NF9QVUxMX0NPTlRST0xfMiAgICAgICAgICAgICAgICAgICAweDcyMQorI2RlZmluZSBXTTg5OTRfSU5URVJSVVBUX1NUQVRVU18xICAgICAgICAgICAgICAgMHg3MzAKKyNkZWZpbmUgV004OTk0X0lOVEVSUlVQVF9TVEFUVVNfMiAgICAgICAgICAgICAgIDB4NzMxCisjZGVmaW5lIFdNODk5NF9JTlRFUlJVUFRfUkFXX1NUQVRVU18yICAgICAgICAgICAweDczMgorI2RlZmluZSBXTTg5OTRfSU5URVJSVVBUX1NUQVRVU18xX01BU0sgICAgICAgICAgMHg3MzgKKyNkZWZpbmUgV004OTk0X0lOVEVSUlVQVF9TVEFUVVNfMl9NQVNLICAgICAgICAgIDB4NzM5CisjZGVmaW5lIFdNODk5NF9JTlRFUlJVUFRfQ09OVFJPTCAgICAgICAgICAgICAgICAweDc0MAorI2RlZmluZSBXTTg5OTRfSVJRX0RFQk9VTkNFICAgICAgICAgICAgICAgICAgICAgMHg3NDgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8wICAgICAgICAgICAgICAgIDB4MzAwMAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEgICAgICAgICAgICAgICAgMHgzMDAxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMiAgICAgICAgICAgICAgICAweDMwMDIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zICAgICAgICAgICAgICAgIDB4MzAwMworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQgICAgICAgICAgICAgICAgMHgzMDA0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNSAgICAgICAgICAgICAgICAweDMwMDUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl82ICAgICAgICAgICAgICAgIDB4MzAwNgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzcgICAgICAgICAgICAgICAgMHgzMDA3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfOCAgICAgICAgICAgICAgICAweDMwMDgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl85ICAgICAgICAgICAgICAgIDB4MzAwOQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEwICAgICAgICAgICAgICAgMHgzMDBBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTEgICAgICAgICAgICAgICAweDMwMEIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMiAgICAgICAgICAgICAgIDB4MzAwQworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEzICAgICAgICAgICAgICAgMHgzMDBECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTQgICAgICAgICAgICAgICAweDMwMEUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNSAgICAgICAgICAgICAgIDB4MzAwRgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE2ICAgICAgICAgICAgICAgMHgzMDEwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTcgICAgICAgICAgICAgICAweDMwMTEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xOCAgICAgICAgICAgICAgIDB4MzAxMgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE5ICAgICAgICAgICAgICAgMHgzMDEzCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjAgICAgICAgICAgICAgICAweDMwMTQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMSAgICAgICAgICAgICAgIDB4MzAxNQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIyICAgICAgICAgICAgICAgMHgzMDE2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjMgICAgICAgICAgICAgICAweDMwMTcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNCAgICAgICAgICAgICAgIDB4MzAxOAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI1ICAgICAgICAgICAgICAgMHgzMDE5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjYgICAgICAgICAgICAgICAweDMwMUEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNyAgICAgICAgICAgICAgIDB4MzAxQgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI4ICAgICAgICAgICAgICAgMHgzMDFDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjkgICAgICAgICAgICAgICAweDMwMUQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMCAgICAgICAgICAgICAgIDB4MzAxRQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMxICAgICAgICAgICAgICAgMHgzMDFGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzIgICAgICAgICAgICAgICAweDMwMjAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMyAgICAgICAgICAgICAgIDB4MzAyMQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM0ICAgICAgICAgICAgICAgMHgzMDIyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzUgICAgICAgICAgICAgICAweDMwMjMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNiAgICAgICAgICAgICAgIDB4MzAyNAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM3ICAgICAgICAgICAgICAgMHgzMDI1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzggICAgICAgICAgICAgICAweDMwMjYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zOSAgICAgICAgICAgICAgIDB4MzAyNworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQwICAgICAgICAgICAgICAgMHgzMDI4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDEgICAgICAgICAgICAgICAweDMwMjkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MiAgICAgICAgICAgICAgIDB4MzAyQQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQzICAgICAgICAgICAgICAgMHgzMDJCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDQgICAgICAgICAgICAgICAweDMwMkMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NSAgICAgICAgICAgICAgIDB4MzAyRAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ2ICAgICAgICAgICAgICAgMHgzMDJFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDcgICAgICAgICAgICAgICAweDMwMkYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80OCAgICAgICAgICAgICAgIDB4MzAzMAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ5ICAgICAgICAgICAgICAgMHgzMDMxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNTAgICAgICAgICAgICAgICAweDMwMzIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl81MSAgICAgICAgICAgICAgIDB4MzAzMworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzUyICAgICAgICAgICAgICAgMHgzMDM0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNTMgICAgICAgICAgICAgICAweDMwMzUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl81NCAgICAgICAgICAgICAgIDB4MzAzNgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzU1ICAgICAgICAgICAgICAgMHgzMDM3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNTYgICAgICAgICAgICAgICAweDMwMzgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl81NyAgICAgICAgICAgICAgIDB4MzAzOQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzU4ICAgICAgICAgICAgICAgMHgzMDNBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNTkgICAgICAgICAgICAgICAweDMwM0IKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl82MCAgICAgICAgICAgICAgIDB4MzAzQworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzYxICAgICAgICAgICAgICAgMHgzMDNECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNjIgICAgICAgICAgICAgICAweDMwM0UKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl82MyAgICAgICAgICAgICAgIDB4MzAzRgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzY0ICAgICAgICAgICAgICAgMHgzMDQwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNjUgICAgICAgICAgICAgICAweDMwNDEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl82NiAgICAgICAgICAgICAgIDB4MzA0MgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzY3ICAgICAgICAgICAgICAgMHgzMDQzCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNjggICAgICAgICAgICAgICAweDMwNDQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl82OSAgICAgICAgICAgICAgIDB4MzA0NQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzcwICAgICAgICAgICAgICAgMHgzMDQ2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNzEgICAgICAgICAgICAgICAweDMwNDcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl83MiAgICAgICAgICAgICAgIDB4MzA0OAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzczICAgICAgICAgICAgICAgMHgzMDQ5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNzQgICAgICAgICAgICAgICAweDMwNEEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl83NSAgICAgICAgICAgICAgIDB4MzA0QgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzc2ICAgICAgICAgICAgICAgMHgzMDRDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNzcgICAgICAgICAgICAgICAweDMwNEQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl83OCAgICAgICAgICAgICAgIDB4MzA0RQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzc5ICAgICAgICAgICAgICAgMHgzMDRGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfODAgICAgICAgICAgICAgICAweDMwNTAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl84MSAgICAgICAgICAgICAgIDB4MzA1MQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzgyICAgICAgICAgICAgICAgMHgzMDUyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfODMgICAgICAgICAgICAgICAweDMwNTMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl84NCAgICAgICAgICAgICAgIDB4MzA1NAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzg1ICAgICAgICAgICAgICAgMHgzMDU1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfODYgICAgICAgICAgICAgICAweDMwNTYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl84NyAgICAgICAgICAgICAgIDB4MzA1NworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzg4ICAgICAgICAgICAgICAgMHgzMDU4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfODkgICAgICAgICAgICAgICAweDMwNTkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl85MCAgICAgICAgICAgICAgIDB4MzA1QQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzkxICAgICAgICAgICAgICAgMHgzMDVCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfOTIgICAgICAgICAgICAgICAweDMwNUMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl85MyAgICAgICAgICAgICAgIDB4MzA1RAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzk0ICAgICAgICAgICAgICAgMHgzMDVFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfOTUgICAgICAgICAgICAgICAweDMwNUYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl85NiAgICAgICAgICAgICAgIDB4MzA2MAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzk3ICAgICAgICAgICAgICAgMHgzMDYxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfOTggICAgICAgICAgICAgICAweDMwNjIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl85OSAgICAgICAgICAgICAgIDB4MzA2MworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEwMCAgICAgICAgICAgICAgMHgzMDY0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTAxICAgICAgICAgICAgICAweDMwNjUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMDIgICAgICAgICAgICAgIDB4MzA2NgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEwMyAgICAgICAgICAgICAgMHgzMDY3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTA0ICAgICAgICAgICAgICAweDMwNjgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMDUgICAgICAgICAgICAgIDB4MzA2OQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEwNiAgICAgICAgICAgICAgMHgzMDZBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTA3ICAgICAgICAgICAgICAweDMwNkIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMDggICAgICAgICAgICAgIDB4MzA2QworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEwOSAgICAgICAgICAgICAgMHgzMDZECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTEwICAgICAgICAgICAgICAweDMwNkUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMTEgICAgICAgICAgICAgIDB4MzA2RgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzExMiAgICAgICAgICAgICAgMHgzMDcwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTEzICAgICAgICAgICAgICAweDMwNzEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMTQgICAgICAgICAgICAgIDB4MzA3MgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzExNSAgICAgICAgICAgICAgMHgzMDczCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTE2ICAgICAgICAgICAgICAweDMwNzQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMTcgICAgICAgICAgICAgIDB4MzA3NQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzExOCAgICAgICAgICAgICAgMHgzMDc2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTE5ICAgICAgICAgICAgICAweDMwNzcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMjAgICAgICAgICAgICAgIDB4MzA3OAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEyMSAgICAgICAgICAgICAgMHgzMDc5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTIyICAgICAgICAgICAgICAweDMwN0EKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMjMgICAgICAgICAgICAgIDB4MzA3QgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEyNCAgICAgICAgICAgICAgMHgzMDdDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTI1ICAgICAgICAgICAgICAweDMwN0QKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMjYgICAgICAgICAgICAgIDB4MzA3RQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEyNyAgICAgICAgICAgICAgMHgzMDdGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTI4ICAgICAgICAgICAgICAweDMwODAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMjkgICAgICAgICAgICAgIDB4MzA4MQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEzMCAgICAgICAgICAgICAgMHgzMDgyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTMxICAgICAgICAgICAgICAweDMwODMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMzIgICAgICAgICAgICAgIDB4MzA4NAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEzMyAgICAgICAgICAgICAgMHgzMDg1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTM0ICAgICAgICAgICAgICAweDMwODYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMzUgICAgICAgICAgICAgIDB4MzA4NworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEzNiAgICAgICAgICAgICAgMHgzMDg4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTM3ICAgICAgICAgICAgICAweDMwODkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xMzggICAgICAgICAgICAgIDB4MzA4QQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzEzOSAgICAgICAgICAgICAgMHgzMDhCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTQwICAgICAgICAgICAgICAweDMwOEMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNDEgICAgICAgICAgICAgIDB4MzA4RAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE0MiAgICAgICAgICAgICAgMHgzMDhFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTQzICAgICAgICAgICAgICAweDMwOEYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNDQgICAgICAgICAgICAgIDB4MzA5MAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE0NSAgICAgICAgICAgICAgMHgzMDkxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTQ2ICAgICAgICAgICAgICAweDMwOTIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNDcgICAgICAgICAgICAgIDB4MzA5MworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE0OCAgICAgICAgICAgICAgMHgzMDk0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTQ5ICAgICAgICAgICAgICAweDMwOTUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNTAgICAgICAgICAgICAgIDB4MzA5NgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE1MSAgICAgICAgICAgICAgMHgzMDk3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTUyICAgICAgICAgICAgICAweDMwOTgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNTMgICAgICAgICAgICAgIDB4MzA5OQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE1NCAgICAgICAgICAgICAgMHgzMDlBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTU1ICAgICAgICAgICAgICAweDMwOUIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNTYgICAgICAgICAgICAgIDB4MzA5QworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE1NyAgICAgICAgICAgICAgMHgzMDlECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTU4ICAgICAgICAgICAgICAweDMwOUUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNTkgICAgICAgICAgICAgIDB4MzA5RgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE2MCAgICAgICAgICAgICAgMHgzMEEwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTYxICAgICAgICAgICAgICAweDMwQTEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNjIgICAgICAgICAgICAgIDB4MzBBMgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE2MyAgICAgICAgICAgICAgMHgzMEEzCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTY0ICAgICAgICAgICAgICAweDMwQTQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNjUgICAgICAgICAgICAgIDB4MzBBNQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE2NiAgICAgICAgICAgICAgMHgzMEE2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTY3ICAgICAgICAgICAgICAweDMwQTcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNjggICAgICAgICAgICAgIDB4MzBBOAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE2OSAgICAgICAgICAgICAgMHgzMEE5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTcwICAgICAgICAgICAgICAweDMwQUEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNzEgICAgICAgICAgICAgIDB4MzBBQgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE3MiAgICAgICAgICAgICAgMHgzMEFDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTczICAgICAgICAgICAgICAweDMwQUQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNzQgICAgICAgICAgICAgIDB4MzBBRQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE3NSAgICAgICAgICAgICAgMHgzMEFGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTc2ICAgICAgICAgICAgICAweDMwQjAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xNzcgICAgICAgICAgICAgIDB4MzBCMQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE3OCAgICAgICAgICAgICAgMHgzMEIyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTc5ICAgICAgICAgICAgICAweDMwQjMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xODAgICAgICAgICAgICAgIDB4MzBCNAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE4MSAgICAgICAgICAgICAgMHgzMEI1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTgyICAgICAgICAgICAgICAweDMwQjYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xODMgICAgICAgICAgICAgIDB4MzBCNworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE4NCAgICAgICAgICAgICAgMHgzMEI4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTg1ICAgICAgICAgICAgICAweDMwQjkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xODYgICAgICAgICAgICAgIDB4MzBCQQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE4NyAgICAgICAgICAgICAgMHgzMEJCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTg4ICAgICAgICAgICAgICAweDMwQkMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xODkgICAgICAgICAgICAgIDB4MzBCRAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE5MCAgICAgICAgICAgICAgMHgzMEJFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTkxICAgICAgICAgICAgICAweDMwQkYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xOTIgICAgICAgICAgICAgIDB4MzBDMAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE5MyAgICAgICAgICAgICAgMHgzMEMxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTk0ICAgICAgICAgICAgICAweDMwQzIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xOTUgICAgICAgICAgICAgIDB4MzBDMworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE5NiAgICAgICAgICAgICAgMHgzMEM0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMTk3ICAgICAgICAgICAgICAweDMwQzUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8xOTggICAgICAgICAgICAgIDB4MzBDNgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzE5OSAgICAgICAgICAgICAgMHgzMEM3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjAwICAgICAgICAgICAgICAweDMwQzgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMDEgICAgICAgICAgICAgIDB4MzBDOQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIwMiAgICAgICAgICAgICAgMHgzMENBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjAzICAgICAgICAgICAgICAweDMwQ0IKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMDQgICAgICAgICAgICAgIDB4MzBDQworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIwNSAgICAgICAgICAgICAgMHgzMENECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjA2ICAgICAgICAgICAgICAweDMwQ0UKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMDcgICAgICAgICAgICAgIDB4MzBDRgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIwOCAgICAgICAgICAgICAgMHgzMEQwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjA5ICAgICAgICAgICAgICAweDMwRDEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMTAgICAgICAgICAgICAgIDB4MzBEMgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIxMSAgICAgICAgICAgICAgMHgzMEQzCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjEyICAgICAgICAgICAgICAweDMwRDQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMTMgICAgICAgICAgICAgIDB4MzBENQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIxNCAgICAgICAgICAgICAgMHgzMEQ2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjE1ICAgICAgICAgICAgICAweDMwRDcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMTYgICAgICAgICAgICAgIDB4MzBEOAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIxNyAgICAgICAgICAgICAgMHgzMEQ5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjE4ICAgICAgICAgICAgICAweDMwREEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMTkgICAgICAgICAgICAgIDB4MzBEQgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIyMCAgICAgICAgICAgICAgMHgzMERDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjIxICAgICAgICAgICAgICAweDMwREQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMjIgICAgICAgICAgICAgIDB4MzBERQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIyMyAgICAgICAgICAgICAgMHgzMERGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjI0ICAgICAgICAgICAgICAweDMwRTAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMjUgICAgICAgICAgICAgIDB4MzBFMQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIyNiAgICAgICAgICAgICAgMHgzMEUyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjI3ICAgICAgICAgICAgICAweDMwRTMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMjggICAgICAgICAgICAgIDB4MzBFNAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIyOSAgICAgICAgICAgICAgMHgzMEU1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjMwICAgICAgICAgICAgICAweDMwRTYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMzEgICAgICAgICAgICAgIDB4MzBFNworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIzMiAgICAgICAgICAgICAgMHgzMEU4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjMzICAgICAgICAgICAgICAweDMwRTkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMzQgICAgICAgICAgICAgIDB4MzBFQQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIzNSAgICAgICAgICAgICAgMHgzMEVCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjM2ICAgICAgICAgICAgICAweDMwRUMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yMzcgICAgICAgICAgICAgIDB4MzBFRAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzIzOCAgICAgICAgICAgICAgMHgzMEVFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjM5ICAgICAgICAgICAgICAweDMwRUYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNDAgICAgICAgICAgICAgIDB4MzBGMAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI0MSAgICAgICAgICAgICAgMHgzMEYxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjQyICAgICAgICAgICAgICAweDMwRjIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNDMgICAgICAgICAgICAgIDB4MzBGMworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI0NCAgICAgICAgICAgICAgMHgzMEY0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjQ1ICAgICAgICAgICAgICAweDMwRjUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNDYgICAgICAgICAgICAgIDB4MzBGNgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI0NyAgICAgICAgICAgICAgMHgzMEY3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjQ4ICAgICAgICAgICAgICAweDMwRjgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNDkgICAgICAgICAgICAgIDB4MzBGOQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI1MCAgICAgICAgICAgICAgMHgzMEZBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjUxICAgICAgICAgICAgICAweDMwRkIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNTIgICAgICAgICAgICAgIDB4MzBGQworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI1MyAgICAgICAgICAgICAgMHgzMEZECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjU0ICAgICAgICAgICAgICAweDMwRkUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNTUgICAgICAgICAgICAgIDB4MzBGRgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI1NiAgICAgICAgICAgICAgMHgzMTAwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjU3ICAgICAgICAgICAgICAweDMxMDEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNTggICAgICAgICAgICAgIDB4MzEwMgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI1OSAgICAgICAgICAgICAgMHgzMTAzCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjYwICAgICAgICAgICAgICAweDMxMDQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNjEgICAgICAgICAgICAgIDB4MzEwNQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI2MiAgICAgICAgICAgICAgMHgzMTA2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjYzICAgICAgICAgICAgICAweDMxMDcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNjQgICAgICAgICAgICAgIDB4MzEwOAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI2NSAgICAgICAgICAgICAgMHgzMTA5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjY2ICAgICAgICAgICAgICAweDMxMEEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNjcgICAgICAgICAgICAgIDB4MzEwQgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI2OCAgICAgICAgICAgICAgMHgzMTBDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjY5ICAgICAgICAgICAgICAweDMxMEQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNzAgICAgICAgICAgICAgIDB4MzEwRQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI3MSAgICAgICAgICAgICAgMHgzMTBGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjcyICAgICAgICAgICAgICAweDMxMTAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNzMgICAgICAgICAgICAgIDB4MzExMQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI3NCAgICAgICAgICAgICAgMHgzMTEyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjc1ICAgICAgICAgICAgICAweDMxMTMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNzYgICAgICAgICAgICAgIDB4MzExNAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI3NyAgICAgICAgICAgICAgMHgzMTE1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjc4ICAgICAgICAgICAgICAweDMxMTYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yNzkgICAgICAgICAgICAgIDB4MzExNworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI4MCAgICAgICAgICAgICAgMHgzMTE4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjgxICAgICAgICAgICAgICAweDMxMTkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yODIgICAgICAgICAgICAgIDB4MzExQQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI4MyAgICAgICAgICAgICAgMHgzMTFCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjg0ICAgICAgICAgICAgICAweDMxMUMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yODUgICAgICAgICAgICAgIDB4MzExRAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI4NiAgICAgICAgICAgICAgMHgzMTFFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjg3ICAgICAgICAgICAgICAweDMxMUYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yODggICAgICAgICAgICAgIDB4MzEyMAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI4OSAgICAgICAgICAgICAgMHgzMTIxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjkwICAgICAgICAgICAgICAweDMxMjIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yOTEgICAgICAgICAgICAgIDB4MzEyMworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI5MiAgICAgICAgICAgICAgMHgzMTI0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjkzICAgICAgICAgICAgICAweDMxMjUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yOTQgICAgICAgICAgICAgIDB4MzEyNgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI5NSAgICAgICAgICAgICAgMHgzMTI3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjk2ICAgICAgICAgICAgICAweDMxMjgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8yOTcgICAgICAgICAgICAgIDB4MzEyOQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzI5OCAgICAgICAgICAgICAgMHgzMTJBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMjk5ICAgICAgICAgICAgICAweDMxMkIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMDAgICAgICAgICAgICAgIDB4MzEyQworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMwMSAgICAgICAgICAgICAgMHgzMTJECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzAyICAgICAgICAgICAgICAweDMxMkUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMDMgICAgICAgICAgICAgIDB4MzEyRgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMwNCAgICAgICAgICAgICAgMHgzMTMwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzA1ICAgICAgICAgICAgICAweDMxMzEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMDYgICAgICAgICAgICAgIDB4MzEzMgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMwNyAgICAgICAgICAgICAgMHgzMTMzCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzA4ICAgICAgICAgICAgICAweDMxMzQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMDkgICAgICAgICAgICAgIDB4MzEzNQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMxMCAgICAgICAgICAgICAgMHgzMTM2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzExICAgICAgICAgICAgICAweDMxMzcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMTIgICAgICAgICAgICAgIDB4MzEzOAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMxMyAgICAgICAgICAgICAgMHgzMTM5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzE0ICAgICAgICAgICAgICAweDMxM0EKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMTUgICAgICAgICAgICAgIDB4MzEzQgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMxNiAgICAgICAgICAgICAgMHgzMTNDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzE3ICAgICAgICAgICAgICAweDMxM0QKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMTggICAgICAgICAgICAgIDB4MzEzRQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMxOSAgICAgICAgICAgICAgMHgzMTNGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzIwICAgICAgICAgICAgICAweDMxNDAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMjEgICAgICAgICAgICAgIDB4MzE0MQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMyMiAgICAgICAgICAgICAgMHgzMTQyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzIzICAgICAgICAgICAgICAweDMxNDMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMjQgICAgICAgICAgICAgIDB4MzE0NAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMyNSAgICAgICAgICAgICAgMHgzMTQ1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzI2ICAgICAgICAgICAgICAweDMxNDYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMjcgICAgICAgICAgICAgIDB4MzE0NworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMyOCAgICAgICAgICAgICAgMHgzMTQ4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzI5ICAgICAgICAgICAgICAweDMxNDkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMzAgICAgICAgICAgICAgIDB4MzE0QQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMzMSAgICAgICAgICAgICAgMHgzMTRCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzMyICAgICAgICAgICAgICAweDMxNEMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMzMgICAgICAgICAgICAgIDB4MzE0RAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMzNCAgICAgICAgICAgICAgMHgzMTRFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzM1ICAgICAgICAgICAgICAweDMxNEYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMzYgICAgICAgICAgICAgIDB4MzE1MAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzMzNyAgICAgICAgICAgICAgMHgzMTUxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzM4ICAgICAgICAgICAgICAweDMxNTIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zMzkgICAgICAgICAgICAgIDB4MzE1MworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM0MCAgICAgICAgICAgICAgMHgzMTU0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzQxICAgICAgICAgICAgICAweDMxNTUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNDIgICAgICAgICAgICAgIDB4MzE1NgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM0MyAgICAgICAgICAgICAgMHgzMTU3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzQ0ICAgICAgICAgICAgICAweDMxNTgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNDUgICAgICAgICAgICAgIDB4MzE1OQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM0NiAgICAgICAgICAgICAgMHgzMTVBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzQ3ICAgICAgICAgICAgICAweDMxNUIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNDggICAgICAgICAgICAgIDB4MzE1QworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM0OSAgICAgICAgICAgICAgMHgzMTVECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzUwICAgICAgICAgICAgICAweDMxNUUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNTEgICAgICAgICAgICAgIDB4MzE1RgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM1MiAgICAgICAgICAgICAgMHgzMTYwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzUzICAgICAgICAgICAgICAweDMxNjEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNTQgICAgICAgICAgICAgIDB4MzE2MgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM1NSAgICAgICAgICAgICAgMHgzMTYzCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzU2ICAgICAgICAgICAgICAweDMxNjQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNTcgICAgICAgICAgICAgIDB4MzE2NQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM1OCAgICAgICAgICAgICAgMHgzMTY2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzU5ICAgICAgICAgICAgICAweDMxNjcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNjAgICAgICAgICAgICAgIDB4MzE2OAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM2MSAgICAgICAgICAgICAgMHgzMTY5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzYyICAgICAgICAgICAgICAweDMxNkEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNjMgICAgICAgICAgICAgIDB4MzE2QgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM2NCAgICAgICAgICAgICAgMHgzMTZDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzY1ICAgICAgICAgICAgICAweDMxNkQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNjYgICAgICAgICAgICAgIDB4MzE2RQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM2NyAgICAgICAgICAgICAgMHgzMTZGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzY4ICAgICAgICAgICAgICAweDMxNzAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNjkgICAgICAgICAgICAgIDB4MzE3MQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM3MCAgICAgICAgICAgICAgMHgzMTcyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzcxICAgICAgICAgICAgICAweDMxNzMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNzIgICAgICAgICAgICAgIDB4MzE3NAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM3MyAgICAgICAgICAgICAgMHgzMTc1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzc0ICAgICAgICAgICAgICAweDMxNzYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNzUgICAgICAgICAgICAgIDB4MzE3NworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM3NiAgICAgICAgICAgICAgMHgzMTc4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzc3ICAgICAgICAgICAgICAweDMxNzkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zNzggICAgICAgICAgICAgIDB4MzE3QQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM3OSAgICAgICAgICAgICAgMHgzMTdCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzgwICAgICAgICAgICAgICAweDMxN0MKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zODEgICAgICAgICAgICAgIDB4MzE3RAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM4MiAgICAgICAgICAgICAgMHgzMTdFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzgzICAgICAgICAgICAgICAweDMxN0YKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zODQgICAgICAgICAgICAgIDB4MzE4MAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM4NSAgICAgICAgICAgICAgMHgzMTgxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzg2ICAgICAgICAgICAgICAweDMxODIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zODcgICAgICAgICAgICAgIDB4MzE4MworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM4OCAgICAgICAgICAgICAgMHgzMTg0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzg5ICAgICAgICAgICAgICAweDMxODUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zOTAgICAgICAgICAgICAgIDB4MzE4NgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM5MSAgICAgICAgICAgICAgMHgzMTg3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzkyICAgICAgICAgICAgICAweDMxODgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zOTMgICAgICAgICAgICAgIDB4MzE4OQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM5NCAgICAgICAgICAgICAgMHgzMThBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzk1ICAgICAgICAgICAgICAweDMxOEIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zOTYgICAgICAgICAgICAgIDB4MzE4QworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzM5NyAgICAgICAgICAgICAgMHgzMThECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfMzk4ICAgICAgICAgICAgICAweDMxOEUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl8zOTkgICAgICAgICAgICAgIDB4MzE4RgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQwMCAgICAgICAgICAgICAgMHgzMTkwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDAxICAgICAgICAgICAgICAweDMxOTEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MDIgICAgICAgICAgICAgIDB4MzE5MgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQwMyAgICAgICAgICAgICAgMHgzMTkzCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDA0ICAgICAgICAgICAgICAweDMxOTQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MDUgICAgICAgICAgICAgIDB4MzE5NQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQwNiAgICAgICAgICAgICAgMHgzMTk2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDA3ICAgICAgICAgICAgICAweDMxOTcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MDggICAgICAgICAgICAgIDB4MzE5OAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQwOSAgICAgICAgICAgICAgMHgzMTk5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDEwICAgICAgICAgICAgICAweDMxOUEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MTEgICAgICAgICAgICAgIDB4MzE5QgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQxMiAgICAgICAgICAgICAgMHgzMTlDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDEzICAgICAgICAgICAgICAweDMxOUQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MTQgICAgICAgICAgICAgIDB4MzE5RQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQxNSAgICAgICAgICAgICAgMHgzMTlGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDE2ICAgICAgICAgICAgICAweDMxQTAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MTcgICAgICAgICAgICAgIDB4MzFBMQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQxOCAgICAgICAgICAgICAgMHgzMUEyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDE5ICAgICAgICAgICAgICAweDMxQTMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MjAgICAgICAgICAgICAgIDB4MzFBNAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQyMSAgICAgICAgICAgICAgMHgzMUE1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDIyICAgICAgICAgICAgICAweDMxQTYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MjMgICAgICAgICAgICAgIDB4MzFBNworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQyNCAgICAgICAgICAgICAgMHgzMUE4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDI1ICAgICAgICAgICAgICAweDMxQTkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MjYgICAgICAgICAgICAgIDB4MzFBQQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQyNyAgICAgICAgICAgICAgMHgzMUFCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDI4ICAgICAgICAgICAgICAweDMxQUMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MjkgICAgICAgICAgICAgIDB4MzFBRAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQzMCAgICAgICAgICAgICAgMHgzMUFFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDMxICAgICAgICAgICAgICAweDMxQUYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MzIgICAgICAgICAgICAgIDB4MzFCMAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQzMyAgICAgICAgICAgICAgMHgzMUIxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDM0ICAgICAgICAgICAgICAweDMxQjIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MzUgICAgICAgICAgICAgIDB4MzFCMworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQzNiAgICAgICAgICAgICAgMHgzMUI0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDM3ICAgICAgICAgICAgICAweDMxQjUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80MzggICAgICAgICAgICAgIDB4MzFCNgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQzOSAgICAgICAgICAgICAgMHgzMUI3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDQwICAgICAgICAgICAgICAweDMxQjgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NDEgICAgICAgICAgICAgIDB4MzFCOQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ0MiAgICAgICAgICAgICAgMHgzMUJBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDQzICAgICAgICAgICAgICAweDMxQkIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NDQgICAgICAgICAgICAgIDB4MzFCQworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ0NSAgICAgICAgICAgICAgMHgzMUJECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDQ2ICAgICAgICAgICAgICAweDMxQkUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NDcgICAgICAgICAgICAgIDB4MzFCRgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ0OCAgICAgICAgICAgICAgMHgzMUMwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDQ5ICAgICAgICAgICAgICAweDMxQzEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NTAgICAgICAgICAgICAgIDB4MzFDMgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ1MSAgICAgICAgICAgICAgMHgzMUMzCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDUyICAgICAgICAgICAgICAweDMxQzQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NTMgICAgICAgICAgICAgIDB4MzFDNQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ1NCAgICAgICAgICAgICAgMHgzMUM2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDU1ICAgICAgICAgICAgICAweDMxQzcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NTYgICAgICAgICAgICAgIDB4MzFDOAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ1NyAgICAgICAgICAgICAgMHgzMUM5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDU4ICAgICAgICAgICAgICAweDMxQ0EKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NTkgICAgICAgICAgICAgIDB4MzFDQgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ2MCAgICAgICAgICAgICAgMHgzMUNDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDYxICAgICAgICAgICAgICAweDMxQ0QKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NjIgICAgICAgICAgICAgIDB4MzFDRQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ2MyAgICAgICAgICAgICAgMHgzMUNGCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDY0ICAgICAgICAgICAgICAweDMxRDAKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NjUgICAgICAgICAgICAgIDB4MzFEMQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ2NiAgICAgICAgICAgICAgMHgzMUQyCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDY3ICAgICAgICAgICAgICAweDMxRDMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NjggICAgICAgICAgICAgIDB4MzFENAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ2OSAgICAgICAgICAgICAgMHgzMUQ1CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDcwICAgICAgICAgICAgICAweDMxRDYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NzEgICAgICAgICAgICAgIDB4MzFENworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ3MiAgICAgICAgICAgICAgMHgzMUQ4CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDczICAgICAgICAgICAgICAweDMxRDkKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NzQgICAgICAgICAgICAgIDB4MzFEQQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ3NSAgICAgICAgICAgICAgMHgzMURCCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDc2ICAgICAgICAgICAgICAweDMxREMKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80NzcgICAgICAgICAgICAgIDB4MzFERAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ3OCAgICAgICAgICAgICAgMHgzMURFCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDc5ICAgICAgICAgICAgICAweDMxREYKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80ODAgICAgICAgICAgICAgIDB4MzFFMAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ4MSAgICAgICAgICAgICAgMHgzMUUxCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDgyICAgICAgICAgICAgICAweDMxRTIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80ODMgICAgICAgICAgICAgIDB4MzFFMworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ4NCAgICAgICAgICAgICAgMHgzMUU0CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDg1ICAgICAgICAgICAgICAweDMxRTUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80ODYgICAgICAgICAgICAgIDB4MzFFNgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ4NyAgICAgICAgICAgICAgMHgzMUU3CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDg4ICAgICAgICAgICAgICAweDMxRTgKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80ODkgICAgICAgICAgICAgIDB4MzFFOQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ5MCAgICAgICAgICAgICAgMHgzMUVBCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDkxICAgICAgICAgICAgICAweDMxRUIKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80OTIgICAgICAgICAgICAgIDB4MzFFQworI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ5MyAgICAgICAgICAgICAgMHgzMUVECisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDk0ICAgICAgICAgICAgICAweDMxRUUKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80OTUgICAgICAgICAgICAgIDB4MzFFRgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ5NiAgICAgICAgICAgICAgMHgzMUYwCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNDk3ICAgICAgICAgICAgICAweDMxRjEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl80OTggICAgICAgICAgICAgIDB4MzFGMgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzQ5OSAgICAgICAgICAgICAgMHgzMUYzCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNTAwICAgICAgICAgICAgICAweDMxRjQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl81MDEgICAgICAgICAgICAgIDB4MzFGNQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzUwMiAgICAgICAgICAgICAgMHgzMUY2CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNTAzICAgICAgICAgICAgICAweDMxRjcKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl81MDQgICAgICAgICAgICAgIDB4MzFGOAorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzUwNSAgICAgICAgICAgICAgMHgzMUY5CisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNTA2ICAgICAgICAgICAgICAweDMxRkEKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl81MDcgICAgICAgICAgICAgIDB4MzFGQgorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzUwOCAgICAgICAgICAgICAgMHgzMUZDCisjZGVmaW5lIFdNODk5NF9XUklURV9TRVFVRU5DRVJfNTA5ICAgICAgICAgICAgICAweDMxRkQKKyNkZWZpbmUgV004OTk0X1dSSVRFX1NFUVVFTkNFUl81MTAgICAgICAgICAgICAgIDB4MzFGRQorI2RlZmluZSBXTTg5OTRfV1JJVEVfU0VRVUVOQ0VSXzUxMSAgICAgICAgICAgICAgMHgzMUZGCisKKyNkZWZpbmUgV004OTk0X1JFR0lTVEVSX0NPVU5UICAgICAgICAgICAgICAgICAgIDczNgorI2RlZmluZSBXTTg5OTRfTUFYX1JFR0lTVEVSICAgICAgICAgICAgICAgICAgICAgMHgzMUZGCisjZGVmaW5lIFdNODk5NF9NQVhfQ0FDSEVEX1JFR0lTVEVSICAgICAgICAgICAgICAweDc0OQorCisvKgorICogRmllbGQgRGVmaW5pdGlvbnMuCisgKi8KKworLyoKKyAqIFIwICgweDAwKSAtIFNvZnR3YXJlIFJlc2V0CisgKi8KKyNkZWZpbmUgV004OTk0X1NXX1JFU0VUX01BU0sgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogU1dfUkVTRVQgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X1NXX1JFU0VUX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogU1dfUkVTRVQgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X1NXX1JFU0VUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogU1dfUkVTRVQgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxICgweDAxKSAtIFBvd2VyIE1hbmFnZW1lbnQgKDEpCisgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVFJfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogU1BLT1VUUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVFJfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogU1BLT1VUUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVFJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAxMyAgLyogU1BLT1VUUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVFJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLT1VUUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVExfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogU1BLT1VUTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVExfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogU1BLT1VUTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVExfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAxMiAgLyogU1BLT1VUTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVExfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLT1VUTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMl9FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogSFBPVVQyX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQyX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBIUE9VVDJfRU5BICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIEhQT1VUMl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQyX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxTF9FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBIUE9VVDFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBIUE9VVDFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICA5ICAvKiBIUE9VVDFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9FTkEgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBIUE9VVDFSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBIUE9VVDFSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4ICAvKiBIUE9VVDFSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTUlDQjJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBNSUNCMl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JQ0IyX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTUlDQjJfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSUNCMl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIE1JQ0IyX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTUlDQjJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNCMl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JQ0IxX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTUlDQjFfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSUNCMV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIE1JQ0IxX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTUlDQjFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBNSUNCMV9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JQ0IxX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQjFfRU5BICovCisjZGVmaW5lIFdNODk5NF9WTUlEX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDYgIC8qIFZNSURfU0VMIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk0X1ZNSURfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVk1JRF9TRUwgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5OTRfVk1JRF9TRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBWTUlEX1NFTCAtIFsyOjFdICovCisjZGVmaW5lIFdNODk5NF9CSUFTX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEJJQVNfRU5BICovCisjZGVmaW5lIFdNODk5NF9CSUFTX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEJJQVNfRU5BICovCisjZGVmaW5lIFdNODk5NF9CSUFTX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEJJQVNfRU5BICovCisjZGVmaW5lIFdNODk5NF9CSUFTX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJJQVNfRU5BICovCisKKy8qCisgKiBSMiAoMHgwMikgLSBQb3dlciBNYW5hZ2VtZW50ICgyKQorICovCisjZGVmaW5lIFdNODk5NF9UU0hVVF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIFRTSFVUX0VOQSAqLworI2RlZmluZSBXTTg5OTRfVFNIVVRfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBUU0hVVF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1RTSFVUX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxNCAgLyogVFNIVVRfRU5BICovCisjZGVmaW5lIFdNODk5NF9UU0hVVF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFRTSFVUX0VOQSAqLworI2RlZmluZSBXTTg5OTRfVFNIVVRfT1BESVMgICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBUU0hVVF9PUERJUyAqLworI2RlZmluZSBXTTg5OTRfVFNIVVRfT1BESVNfTUFTSyAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBUU0hVVF9PUERJUyAqLworI2RlZmluZSBXTTg5OTRfVFNIVVRfT1BESVNfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEzICAvKiBUU0hVVF9PUERJUyAqLworI2RlZmluZSBXTTg5OTRfVFNIVVRfT1BESVNfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBUU0hVVF9PUERJUyAqLworI2RlZmluZSBXTTg5OTRfT1BDTEtfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBPUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk0X09QQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogT1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9PUENMS19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTEgIC8qIE9QQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTRfT1BDTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBPUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWElOTF9FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogTUlYSU5MX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5MX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBNSVhJTkxfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIE1JWElOTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWElOTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlYSU5MX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5SX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBNSVhJTlJfRU5BICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE1JWElOUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWElOUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOCAgLyogTUlYSU5SX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5SX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSVhJTlJfRU5BICovCisjZGVmaW5lIFdNODk5NF9JTjJMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIElOMkxfRU5BICovCisjZGVmaW5lIFdNODk5NF9JTjJMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIElOMkxfRU5BICovCisjZGVmaW5lIFdNODk5NF9JTjJMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIElOMkxfRU5BICovCisjZGVmaW5lIFdNODk5NF9JTjJMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMkxfRU5BICovCisjZGVmaW5lIFdNODk5NF9JTjFMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIElOMUxfRU5BICovCisjZGVmaW5lIFdNODk5NF9JTjFMX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIElOMUxfRU5BICovCisjZGVmaW5lIFdNODk5NF9JTjFMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIElOMUxfRU5BICovCisjZGVmaW5lIFdNODk5NF9JTjFMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMUxfRU5BICovCisjZGVmaW5lIFdNODk5NF9JTjJSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIElOMlJfRU5BICovCisjZGVmaW5lIFdNODk5NF9JTjJSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIElOMlJfRU5BICovCisjZGVmaW5lIFdNODk5NF9JTjJSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIElOMlJfRU5BICovCisjZGVmaW5lIFdNODk5NF9JTjJSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMlJfRU5BICovCisjZGVmaW5lIFdNODk5NF9JTjFSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElOMVJfRU5BICovCisjZGVmaW5lIFdNODk5NF9JTjFSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElOMVJfRU5BICovCisjZGVmaW5lIFdNODk5NF9JTjFSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIElOMVJfRU5BICovCisjZGVmaW5lIFdNODk5NF9JTjFSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMVJfRU5BICovCisKKy8qCisgKiBSMyAoMHgwMykgLSBQb3dlciBNYW5hZ2VtZW50ICgzKQorICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMU5fRU5BICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIExJTkVPVVQxTl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQxTl9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MjAwMCAgLyogTElORU9VVDFOX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFOX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDEzICAvKiBMSU5FT1VUMU5fRU5BICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMU5fRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVQxTl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQxUF9FTkEgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogTElORU9VVDFQX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFQX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgxMDAwICAvKiBMSU5FT1VUMVBfRU5BICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMVBfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgMTIgIC8qIExJTkVPVVQxUF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQxUF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVDFQX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJOX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBMSU5FT1VUMk5fRU5BICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMk5fRU5BX01BU0sgICAgICAgICAgICAgICAweDA4MDAgIC8qIExJTkVPVVQyTl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyTl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAxMSAgLyogTElORU9VVDJOX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJOX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMk5fRU5BICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMlBfRU5BICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIExJTkVPVVQyUF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyUF9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MDQwMCAgLyogTElORU9VVDJQX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJQX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDEwICAvKiBMSU5FT1VUMlBfRU5BICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMlBfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVQyUF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NQS1JWT0xfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogU1BLUlZPTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NQS1JWT0xfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogU1BLUlZPTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NQS1JWT0xfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgOSAgLyogU1BLUlZPTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NQS1JWT0xfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLUlZPTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NQS0xWT0xfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogU1BLTFZPTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NQS0xWT0xfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogU1BLTFZPTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NQS0xWT0xfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogU1BLTFZPTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NQS0xWT0xfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLTFZPTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExWT0xfRU5BICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUlYT1VUTFZPTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExWT0xfRU5BX01BU0sgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUlYT1VUTFZPTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExWT0xfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgNyAgLyogTUlYT1VUTFZPTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExWT0xfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogTUlYT1VUTFZPTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJWT0xfRU5BICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUlYT1VUUlZPTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJWT0xfRU5BX01BU0sgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUlYT1VUUlZPTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJWT0xfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgNiAgLyogTUlYT1VUUlZPTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJWT0xfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogTUlYT1VUUlZPTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTUlYT1VUTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTUlYT1VUTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogTUlYT1VUTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlYT1VUTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfRU5BICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTUlYT1VUUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfRU5BX01BU0sgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTUlYT1VUUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgNCAgLyogTUlYT1VUUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlYT1VUUl9FTkEgKi8KKworLyoKKyAqIFI0ICgweDA0KSAtIFBvd2VyIE1hbmFnZW1lbnQgKDQpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENMX0VOQSAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUlGMkFEQ0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRjJBRENMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ0xfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDEzICAvKiBBSUYyQURDTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkFEQ0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDUl9FTkEgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEFJRjJBRENSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ1JfRU5BX01BU0sgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUYyQURDUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAxMiAgLyogQUlGMkFEQ1JfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJBRENSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJMX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBBSUYxQURDMkxfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMkxfRU5BX01BU0sgICAgICAgICAgICAgICAweDA4MDAgIC8qIEFJRjFBREMyTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAxMSAgLyogQUlGMUFEQzJMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxQURDMkxfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMlJfRU5BICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEFJRjFBREMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyUl9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MDQwMCAgLyogQUlGMUFEQzJSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDEwICAvKiBBSUYxQURDMlJfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMlJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBREMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxTF9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlGMUFEQzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFMX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMjAwICAvKiBBSUYxQURDMUxfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMUxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDkgIC8qIEFJRjFBREMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFSX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxQURDMVJfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMVJfRU5BX01BU0sgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFBREMxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMUFEQzFSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxQURDMVJfRU5BICovCisjZGVmaW5lIFdNODk5NF9ETUlDMkxfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERNSUMyTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RNSUMyTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRE1JQzJMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfRE1JQzJMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBETUlDMkxfRU5BICovCisjZGVmaW5lIFdNODk5NF9ETUlDMkxfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERNSUMyTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RNSUMyUl9FTkEgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogRE1JQzJSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfRE1JQzJSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBETUlDMlJfRU5BICovCisjZGVmaW5lIFdNODk5NF9ETUlDMlJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERNSUMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RNSUMyUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogRE1JQzJSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfRE1JQzFMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBETUlDMUxfRU5BICovCisjZGVmaW5lIFdNODk5NF9ETUlDMUxfRU5BX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERNSUMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RNSUMxTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMyAgLyogRE1JQzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfRE1JQzFMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBETUlDMUxfRU5BICovCisjZGVmaW5lIFdNODk5NF9ETUlDMVJfRU5BICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERNSUMxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RNSUMxUl9FTkFfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRE1JQzFSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfRE1JQzFSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBETUlDMVJfRU5BICovCisjZGVmaW5lIFdNODk5NF9ETUlDMVJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERNSUMxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FEQ0xfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FEQ0xfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FEQ0xfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FEQ0xfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FEQ1JfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQURDUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FEQ1JfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQURDUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FEQ1JfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQURDUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FEQ1JfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDUl9FTkEgKi8KKworLyoKKyAqIFI1ICgweDA1KSAtIFBvd2VyIE1hbmFnZW1lbnQgKDUpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNMX0VOQSAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUlGMkRBQ0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRjJEQUNMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDEzICAvKiBBSUYyREFDTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkRBQ0xfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDUl9FTkEgICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEFJRjJEQUNSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfRU5BX01BU0sgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUYyREFDUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAxMiAgLyogQUlGMkRBQ1JfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJMX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBBSUYxREFDMkxfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMkxfRU5BX01BU0sgICAgICAgICAgICAgICAweDA4MDAgIC8qIEFJRjFEQUMyTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyTF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAxMSAgLyogQUlGMURBQzJMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxREFDMkxfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMlJfRU5BICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEFJRjFEQUMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyUl9FTkFfTUFTSyAgICAgICAgICAgICAgIDB4MDQwMCAgLyogQUlGMURBQzJSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgIDEwICAvKiBBSUYxREFDMlJfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMlJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxTF9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlGMURBQzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFMX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMjAwICAvKiBBSUYxREFDMUxfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMUxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDkgIC8qIEFJRjFEQUMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFSX0VOQSAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxREFDMVJfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMVJfRU5BX01BU0sgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFEQUMxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMURBQzFSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFSX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxREFDMVJfRU5BICovCisjZGVmaW5lIFdNODk5NF9EQUMyTF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIERBQzJMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfREFDMkxfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUMyTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJMX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogREFDMkxfRU5BICovCisjZGVmaW5lIFdNODk5NF9EQUMyTF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzJMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfREFDMlJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQUMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJSX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogREFDMlJfRU5BICovCisjZGVmaW5lIFdNODk5NF9EQUMyUl9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIERBQzJSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfREFDMlJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMyUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX0VOQSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogREFDMUxfRU5BICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQzFMX0VOQSAqLworI2RlZmluZSBXTTg5OTRfREFDMUxfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMxTF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMUxfRU5BICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQzFSX0VOQSAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUMxUl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFSX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDMVJfRU5BICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzFSX0VOQSAqLworCisvKgorICogUjYgKDB4MDYpIC0gUG93ZXIgTWFuYWdlbWVudCAoNikKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGM19UUkkgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBSUYzX1RSSSAqLworI2RlZmluZSBXTTg5OTRfQUlGM19UUklfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBSUYzX1RSSSAqLworI2RlZmluZSBXTTg5OTRfQUlGM19UUklfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBBSUYzX1RSSSAqLworI2RlZmluZSBXTTg5OTRfQUlGM19UUklfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYzX1RSSSAqLworI2RlZmluZSBXTTg5OTRfQUlGM19BRENEQVRfU1JDX01BU0sgICAgICAgICAgICAgMHgwMDE4ICAvKiBBSUYzX0FEQ0RBVF9TUkMgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGM19BRENEQVRfU1JDX1NISUZUICAgICAgICAgICAgICAgICAzICAvKiBBSUYzX0FEQ0RBVF9TUkMgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGM19BRENEQVRfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAyICAvKiBBSUYzX0FEQ0RBVF9TUkMgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9BRENEQVRfU1JDICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYyX0FEQ0RBVF9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfQURDREFUX1NSQ19NQVNLICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMl9BRENEQVRfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0FEQ0RBVF9TUkNfU0hJRlQgICAgICAgICAgICAgICAgIDIgIC8qIEFJRjJfQURDREFUX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9BRENEQVRfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBBSUYyX0FEQ0RBVF9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfREFDREFUX1NSQyAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMl9EQUNEQVRfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0RBQ0RBVF9TUkNfTUFTSyAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjJfREFDREFUX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9EQUNEQVRfU1JDX1NISUZUICAgICAgICAgICAgICAgICAxICAvKiBBSUYyX0RBQ0RBVF9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfREFDREFUX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogQUlGMl9EQUNEQVRfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQ0RBVF9TUkMgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFfREFDREFUX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9EQUNEQVRfU1JDX01BU0sgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxX0RBQ0RBVF9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfREFDREFUX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMV9EQUNEQVRfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0RBQ0RBVF9TUkNfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFfREFDREFUX1NSQyAqLworCisvKgorICogUjIxICgweDE1KSAtIElucHV0IE1peGVyICgxKQorICovCisjZGVmaW5lIFdNODk5NF9JTjFSUF9NSVhJTlJfQk9PU1QgICAgICAgICAgICAgICAweDAxMDAgIC8qIElOMVJQX01JWElOUl9CT09TVCAqLworI2RlZmluZSBXTTg5OTRfSU4xUlBfTUlYSU5SX0JPT1NUX01BU0sgICAgICAgICAgMHgwMTAwICAvKiBJTjFSUF9NSVhJTlJfQk9PU1QgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJQX01JWElOUl9CT09TVF9TSElGVCAgICAgICAgICAgICAgOCAgLyogSU4xUlBfTUlYSU5SX0JPT1NUICovCisjZGVmaW5lIFdNODk5NF9JTjFSUF9NSVhJTlJfQk9PU1RfV0lEVEggICAgICAgICAgICAgIDEgIC8qIElOMVJQX01JWElOUl9CT09TVCAqLworI2RlZmluZSBXTTg5OTRfSU4xTFBfTUlYSU5MX0JPT1NUICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjFMUF9NSVhJTkxfQk9PU1QgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxQX01JWElOTF9CT09TVF9NQVNLICAgICAgICAgIDB4MDA4MCAgLyogSU4xTFBfTUlYSU5MX0JPT1NUICovCisjZGVmaW5lIFdNODk5NF9JTjFMUF9NSVhJTkxfQk9PU1RfU0hJRlQgICAgICAgICAgICAgIDcgIC8qIElOMUxQX01JWElOTF9CT09TVCAqLworI2RlZmluZSBXTTg5OTRfSU4xTFBfTUlYSU5MX0JPT1NUX1dJRFRIICAgICAgICAgICAgICAxICAvKiBJTjFMUF9NSVhJTkxfQk9PU1QgKi8KKyNkZWZpbmUgV004OTk0X0lOUFVUU19DTEFNUCAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU5QVVRTX0NMQU1QICovCisjZGVmaW5lIFdNODk5NF9JTlBVVFNfQ0xBTVBfTUFTSyAgICAgICAgICAgICAgICAweDAwNDAgIC8qIElOUFVUU19DTEFNUCAqLworI2RlZmluZSBXTTg5OTRfSU5QVVRTX0NMQU1QX1NISUZUICAgICAgICAgICAgICAgICAgICA2ICAvKiBJTlBVVFNfQ0xBTVAgKi8KKyNkZWZpbmUgV004OTk0X0lOUFVUU19DTEFNUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSU5QVVRTX0NMQU1QICovCisKKy8qCisgKiBSMjQgKDB4MTgpIC0gTGVmdCBMaW5lIElucHV0IDEmMiBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTRfSU4xX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTjFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0lOMV9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSU4xX1ZVICovCisjZGVmaW5lIFdNODk5NF9JTjFfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIElOMV9WVSAqLworI2RlZmluZSBXTTg5OTRfSU4xX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfTVVURSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4xTF9NVVRFICovCisjZGVmaW5lIFdNODk5NF9JTjFMX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIElOMUxfTVVURSAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBJTjFMX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU4xTF9NVVRFICovCisjZGVmaW5lIFdNODk5NF9JTjFMX1pDICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIElOMUxfWkMgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfWkNfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU4xTF9aQyAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBJTjFMX1pDICovCisjZGVmaW5lIFdNODk5NF9JTjFMX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMUxfWkMgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxRiAgLyogSU4xTF9WT0wgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBJTjFMX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NF9JTjFMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIElOMUxfVk9MIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIyNSAoMHgxOSkgLSBMZWZ0IExpbmUgSW5wdXQgMyY0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NF9JTjJfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElOMl9WVSAqLworI2RlZmluZSBXTTg5OTRfSU4yX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTjJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0lOMl9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogSU4yX1ZVICovCisjZGVmaW5lIFdNODk5NF9JTjJfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMl9WVSAqLworI2RlZmluZSBXTTg5OTRfSU4yTF9NVVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjJMX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4yTF9NVVRFICovCisjZGVmaW5lIFdNODk5NF9JTjJMX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIElOMkxfTVVURSAqLworI2RlZmluZSBXTTg5OTRfSU4yTF9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjJMX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxfWkMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU4yTF9aQyAqLworI2RlZmluZSBXTTg5OTRfSU4yTF9aQ19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTjJMX1pDICovCisjZGVmaW5lIFdNODk5NF9JTjJMX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIElOMkxfWkMgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU4yTF9aQyAqLworI2RlZmluZSBXTTg5OTRfSU4yTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBJTjJMX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NF9JTjJMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIElOMkxfVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk0X0lOMkxfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogSU4yTF9WT0wgLSBbNDowXSAqLworCisvKgorICogUjI2ICgweDFBKSAtIFJpZ2h0IExpbmUgSW5wdXQgMSYyIFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NF9JTjFfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElOMV9WVSAqLworI2RlZmluZSBXTTg5OTRfSU4xX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTjFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0lOMV9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogSU4xX1ZVICovCisjZGVmaW5lIFdNODk5NF9JTjFfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMV9WVSAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9NVVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjFSX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4xUl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9JTjFSX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIElOMVJfTVVURSAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjFSX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfWkMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU4xUl9aQyAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9aQ19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTjFSX1pDICovCisjZGVmaW5lIFdNODk5NF9JTjFSX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIElOMVJfWkMgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU4xUl9aQyAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBJTjFSX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NF9JTjFSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIElOMVJfVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogSU4xUl9WT0wgLSBbNDowXSAqLworCisvKgorICogUjI3ICgweDFCKSAtIFJpZ2h0IExpbmUgSW5wdXQgMyY0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NF9JTjJfVlUgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElOMl9WVSAqLworI2RlZmluZSBXTTg5OTRfSU4yX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTjJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0lOMl9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogSU4yX1ZVICovCisjZGVmaW5lIFdNODk5NF9JTjJfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMl9WVSAqLworI2RlZmluZSBXTTg5OTRfSU4yUl9NVVRFICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjJSX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJfTVVURV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4yUl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9JTjJSX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIElOMlJfTVVURSAqLworI2RlZmluZSBXTTg5OTRfSU4yUl9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTjJSX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJfWkMgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSU4yUl9aQyAqLworI2RlZmluZSBXTTg5OTRfSU4yUl9aQ19NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTjJSX1pDICovCisjZGVmaW5lIFdNODk5NF9JTjJSX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIElOMlJfWkMgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU4yUl9aQyAqLworI2RlZmluZSBXTTg5OTRfSU4yUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDFGICAvKiBJTjJSX1ZPTCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NF9JTjJSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIElOMlJfVk9MIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk0X0lOMlJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogSU4yUl9WT0wgLSBbNDowXSAqLworCisvKgorICogUjI4ICgweDFDKSAtIExlZnQgT3V0cHV0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFfVlUgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEhQT1VUMV9WVSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBIUE9VVDFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMV9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogSFBPVVQxX1ZVICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMV9WVSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxTF9aQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVDFMX1pDICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFMX1pDX01BU0sgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMUxfWkMgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMUxfWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogSFBPVVQxTF9aQyAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxTF9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFMX1pDICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFMX01VVEVfTiAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMUxfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFMX01VVEVfTl9NQVNLICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMUxfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFMX01VVEVfTl9TSElGVCAgICAgICAgICAgICAgICAgIDYgIC8qIEhQT1VUMUxfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFMX01VVEVfTl9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMUxfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwM0YgIC8qIEhQT1VUMUxfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMUxfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFBPVVQxTF9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA2ICAvKiBIUE9VVDFMX1ZPTCAtIFs1OjBdICovCisKKy8qCisgKiBSMjkgKDB4MUQpIC0gUmlnaHQgT3V0cHV0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFfVlUgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEhQT1VUMV9WVSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBIUE9VVDFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMV9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogSFBPVVQxX1ZVICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMV9WVSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9aQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBIUE9VVDFSX1pDICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFSX1pDX01BU0sgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIEhQT1VUMVJfWkMgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMVJfWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogSFBPVVQxUl9aQyAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFSX1pDICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFSX01VVEVfTiAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMVJfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFSX01VVEVfTl9NQVNLICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMVJfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFSX01VVEVfTl9TSElGVCAgICAgICAgICAgICAgICAgIDYgIC8qIEhQT1VUMVJfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFSX01VVEVfTl9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMVJfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwM0YgIC8qIEhQT1VUMVJfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMVJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogSFBPVVQxUl9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA2ICAvKiBIUE9VVDFSX1ZPTCAtIFs1OjBdICovCisKKy8qCisgKiBSMzAgKDB4MUUpIC0gTGluZSBPdXRwdXRzIFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMU5fTVVURSAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIExJTkVPVVQxTl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMU5fTVVURV9NQVNLICAgICAgICAgICAgICAweDAwNDAgIC8qIExJTkVPVVQxTl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMU5fTVVURV9TSElGVCAgICAgICAgICAgICAgICAgIDYgIC8qIExJTkVPVVQxTl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMU5fTVVURV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVQxTl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMVBfTVVURSAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIExJTkVPVVQxUF9NVVRFICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMVBfTVVURV9NQVNLICAgICAgICAgICAgICAweDAwMjAgIC8qIExJTkVPVVQxUF9NVVRFICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMVBfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgIDUgIC8qIExJTkVPVVQxUF9NVVRFICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMVBfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVQxUF9NVVRFICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMV9WT0wgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExJTkVPVVQxX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFfVk9MX01BU0sgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMSU5FT1VUMV9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQxX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgNCAgLyogTElORU9VVDFfVk9MICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMV9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIExJTkVPVVQxX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJOX01VVEUgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBMSU5FT1VUMk5fTVVURSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJOX01VVEVfTUFTSyAgICAgICAgICAgICAgMHgwMDA0ICAvKiBMSU5FT1VUMk5fTVVURSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJOX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAyICAvKiBMSU5FT1VUMk5fTVVURSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJOX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMk5fTVVURSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJQX01VVEUgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBMSU5FT1VUMlBfTVVURSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJQX01VVEVfTUFTSyAgICAgICAgICAgICAgMHgwMDAyICAvKiBMSU5FT1VUMlBfTVVURSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJQX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMlBfTVVURSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJQX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMlBfTVVURSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJfVk9MICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMSU5FT1VUMl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyX1ZPTF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTElORU9VVDJfVk9MICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAgIC8qIExJTkVPVVQyX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMl9WT0wgKi8KKworLyoKKyAqIFIzMSAoMHgxRikgLSBIUE9VVDIgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMl9NVVRFICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSFBPVVQyX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMl9NVVRFX01BU0sgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSFBPVVQyX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMl9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAgNSAgLyogSFBPVVQyX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMl9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQyX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMl9WT0wgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSFBPVVQyX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQyX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBIUE9VVDJfVk9MICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEhQT1VUMl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQyX1ZPTCAqLworCisvKgorICogUjMyICgweDIwKSAtIExlZnQgT1BHQSBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUX1ZVICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBNSVhPVVRfVlUgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVF9WVV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTUlYT1VUX1ZVICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIE1JWE9VVF9WVSAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSVhPVVRfVlUgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfWkMgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUlYT1VUTF9aQyAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9aQ19NQVNLICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBNSVhPVVRMX1pDICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX1pDX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIE1JWE9VVExfWkMgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfWkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlYT1VUTF9aQyAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9NVVRFX04gICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBNSVhPVVRMX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9NVVRFX05fTUFTSyAgICAgICAgICAgICAgMHgwMDQwICAvKiBNSVhPVVRMX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9NVVRFX05fU0hJRlQgICAgICAgICAgICAgICAgICA2ICAvKiBNSVhPVVRMX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9NVVRFX05fV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBNSVhPVVRMX01VVEVfTiAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDNGICAvKiBNSVhPVVRMX1ZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIE1JWE9VVExfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgNiAgLyogTUlYT1VUTF9WT0wgLSBbNTowXSAqLworCisvKgorICogUjMzICgweDIxKSAtIFJpZ2h0IE9QR0EgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVF9WVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTUlYT1VUX1ZVICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIE1JWE9VVF9WVSAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBNSVhPVVRfVlUgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlYT1VUX1ZVICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX1pDICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1JWE9VVFJfWkMgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfWkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUlYT1VUUl9aQyAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUUl9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBNSVhPVVRSX1pDICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JWE9VVFJfWkMgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfTVVURV9OICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUlYT1VUUl9NVVRFX04gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfTVVURV9OX01BU0sgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUlYT1VUUl9NVVRFX04gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfTVVURV9OX1NISUZUICAgICAgICAgICAgICAgICAgNiAgLyogTUlYT1VUUl9NVVRFX04gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfTVVURV9OX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogTUlYT1VUUl9NVVRFX04gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfVk9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDAzRiAgLyogTUlYT1VUUl9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBNSVhPVVRSX1ZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDYgIC8qIE1JWE9VVFJfVk9MIC0gWzU6MF0gKi8KKworLyoKKyAqIFIzNCAoMHgyMikgLSBTUEtNSVhMIEF0dGVudWF0aW9uCisgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJMX1NQS01JWExfVk9MICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogREFDMkxfU1BLTUlYTF9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJMX1NQS01JWExfVk9MX01BU0sgICAgICAgICAgIDB4MDA0MCAgLyogREFDMkxfU1BLTUlYTF9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJMX1NQS01JWExfVk9MX1NISUZUICAgICAgICAgICAgICAgNiAgLyogREFDMkxfU1BLTUlYTF9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJMX1NQS01JWExfVk9MX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogREFDMkxfU1BLTUlYTF9WT0wgKi8KKyNkZWZpbmUgV004OTk0X01JWElOTF9TUEtNSVhMX1ZPTCAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTUlYSU5MX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfU1BLTUlYTF9WT0xfTUFTSyAgICAgICAgICAweDAwMjAgIC8qIE1JWElOTF9TUEtNSVhMX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5MX1NQS01JWExfVk9MX1NISUZUICAgICAgICAgICAgICA1ICAvKiBNSVhJTkxfU1BLTUlYTF9WT0wgKi8KKyNkZWZpbmUgV004OTk0X01JWElOTF9TUEtNSVhMX1ZPTF9XSURUSCAgICAgICAgICAgICAgMSAgLyogTUlYSU5MX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5NF9JTjFMUF9TUEtNSVhMX1ZPTCAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElOMUxQX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5NF9JTjFMUF9TUEtNSVhMX1ZPTF9NQVNLICAgICAgICAgICAweDAwMTAgIC8qIElOMUxQX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5NF9JTjFMUF9TUEtNSVhMX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDQgIC8qIElOMUxQX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5NF9JTjFMUF9TUEtNSVhMX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIElOMUxQX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX1NQS01JWExfVk9MICAgICAgICAgICAgICAweDAwMDggIC8qIE1JWE9VVExfU1BLTUlYTF9WT0wgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfU1BLTUlYTF9WT0xfTUFTSyAgICAgICAgIDB4MDAwOCAgLyogTUlYT1VUTF9TUEtNSVhMX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9TUEtNSVhMX1ZPTF9TSElGVCAgICAgICAgICAgICAzICAvKiBNSVhPVVRMX1NQS01JWExfVk9MICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX1NQS01JWExfVk9MX1dJRFRIICAgICAgICAgICAgIDEgIC8qIE1JWE9VVExfU1BLTUlYTF9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX1NQS01JWExfVk9MICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogREFDMUxfU1BLTUlYTF9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX1NQS01JWExfVk9MX01BU0sgICAgICAgICAgIDB4MDAwNCAgLyogREFDMUxfU1BLTUlYTF9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX1NQS01JWExfVk9MX1NISUZUICAgICAgICAgICAgICAgMiAgLyogREFDMUxfU1BLTUlYTF9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX1NQS01JWExfVk9MX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogREFDMUxfU1BLTUlYTF9WT0wgKi8KKyNkZWZpbmUgV004OTk0X1NQS01JWExfVk9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogU1BLTUlYTF9WT0wgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTRfU1BLTUlYTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBTUEtNSVhMX1ZPTCAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5NF9TUEtNSVhMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFNQS01JWExfVk9MIC0gWzE6MF0gKi8KKworLyoKKyAqIFIzNSAoMHgyMykgLSBTUEtNSVhSIEF0dGVudWF0aW9uCisgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVF9DTEFTU0FCICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogU1BLT1VUX0NMQVNTQUIgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVF9DTEFTU0FCX01BU0sgICAgICAgICAgICAgIDB4MDEwMCAgLyogU1BLT1VUX0NMQVNTQUIgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVF9DTEFTU0FCX1NISUZUICAgICAgICAgICAgICAgICAgOCAgLyogU1BLT1VUX0NMQVNTQUIgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVF9DTEFTU0FCX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogU1BLT1VUX0NMQVNTQUIgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJSX1NQS01JWFJfVk9MICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogREFDMlJfU1BLTUlYUl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJSX1NQS01JWFJfVk9MX01BU0sgICAgICAgICAgIDB4MDA0MCAgLyogREFDMlJfU1BLTUlYUl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJSX1NQS01JWFJfVk9MX1NISUZUICAgICAgICAgICAgICAgNiAgLyogREFDMlJfU1BLTUlYUl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJSX1NQS01JWFJfVk9MX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogREFDMlJfU1BLTUlYUl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X01JWElOUl9TUEtNSVhSX1ZPTCAgICAgICAgICAgICAgIDB4MDAyMCAgLyogTUlYSU5SX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfU1BLTUlYUl9WT0xfTUFTSyAgICAgICAgICAweDAwMjAgIC8qIE1JWElOUl9TUEtNSVhSX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfTUlYSU5SX1NQS01JWFJfVk9MX1NISUZUICAgICAgICAgICAgICA1ICAvKiBNSVhJTlJfU1BLTUlYUl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X01JWElOUl9TUEtNSVhSX1ZPTF9XSURUSCAgICAgICAgICAgICAgMSAgLyogTUlYSU5SX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5NF9JTjFSUF9TUEtNSVhSX1ZPTCAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElOMVJQX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5NF9JTjFSUF9TUEtNSVhSX1ZPTF9NQVNLICAgICAgICAgICAweDAwMTAgIC8qIElOMVJQX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5NF9JTjFSUF9TUEtNSVhSX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDQgIC8qIElOMVJQX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5NF9JTjFSUF9TUEtNSVhSX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIElOMVJQX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX1NQS01JWFJfVk9MICAgICAgICAgICAgICAweDAwMDggIC8qIE1JWE9VVFJfU1BLTUlYUl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfU1BLTUlYUl9WT0xfTUFTSyAgICAgICAgIDB4MDAwOCAgLyogTUlYT1VUUl9TUEtNSVhSX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUUl9TUEtNSVhSX1ZPTF9TSElGVCAgICAgICAgICAgICAzICAvKiBNSVhPVVRSX1NQS01JWFJfVk9MICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX1NQS01JWFJfVk9MX1dJRFRIICAgICAgICAgICAgIDEgIC8qIE1JWE9VVFJfU1BLTUlYUl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFSX1NQS01JWFJfVk9MICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogREFDMVJfU1BLTUlYUl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFSX1NQS01JWFJfVk9MX01BU0sgICAgICAgICAgIDB4MDAwNCAgLyogREFDMVJfU1BLTUlYUl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFSX1NQS01JWFJfVk9MX1NISUZUICAgICAgICAgICAgICAgMiAgLyogREFDMVJfU1BLTUlYUl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFSX1NQS01JWFJfVk9MX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogREFDMVJfU1BLTUlYUl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X1NQS01JWFJfVk9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMyAgLyogU1BLTUlYUl9WT0wgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTRfU1BLTUlYUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBTUEtNSVhSX1ZPTCAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5NF9TUEtNSVhSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIFNQS01JWFJfVk9MIC0gWzE6MF0gKi8KKworLyoKKyAqIFIzNiAoMHgyNCkgLSBTUEtPVVQgTWl4ZXJzCisgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxSUF9UT19TUEtPVVRMICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU4yTFJQX1RPX1NQS09VVEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxSUF9UT19TUEtPVVRMX01BU0sgICAgICAgICAgIDB4MDAyMCAgLyogSU4yTFJQX1RPX1NQS09VVEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxSUF9UT19TUEtPVVRMX1NISUZUICAgICAgICAgICAgICAgNSAgLyogSU4yTFJQX1RPX1NQS09VVEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxSUF9UT19TUEtPVVRMX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSU4yTFJQX1RPX1NQS09VVEwgKi8KKyNkZWZpbmUgV004OTk0X1NQS01JWExfVE9fU1BLT1VUTCAgICAgICAgICAgICAgIDB4MDAxMCAgLyogU1BLTUlYTF9UT19TUEtPVVRMICovCisjZGVmaW5lIFdNODk5NF9TUEtNSVhMX1RPX1NQS09VVExfTUFTSyAgICAgICAgICAweDAwMTAgIC8qIFNQS01JWExfVE9fU1BLT1VUTCAqLworI2RlZmluZSBXTTg5OTRfU1BLTUlYTF9UT19TUEtPVVRMX1NISUZUICAgICAgICAgICAgICA0ICAvKiBTUEtNSVhMX1RPX1NQS09VVEwgKi8KKyNkZWZpbmUgV004OTk0X1NQS01JWExfVE9fU1BLT1VUTF9XSURUSCAgICAgICAgICAgICAgMSAgLyogU1BLTUlYTF9UT19TUEtPVVRMICovCisjZGVmaW5lIFdNODk5NF9TUEtNSVhSX1RPX1NQS09VVEwgICAgICAgICAgICAgICAweDAwMDggIC8qIFNQS01JWFJfVE9fU1BLT1VUTCAqLworI2RlZmluZSBXTTg5OTRfU1BLTUlYUl9UT19TUEtPVVRMX01BU0sgICAgICAgICAgMHgwMDA4ICAvKiBTUEtNSVhSX1RPX1NQS09VVEwgKi8KKyNkZWZpbmUgV004OTk0X1NQS01JWFJfVE9fU1BLT1VUTF9TSElGVCAgICAgICAgICAgICAgMyAgLyogU1BLTUlYUl9UT19TUEtPVVRMICovCisjZGVmaW5lIFdNODk5NF9TUEtNSVhSX1RPX1NQS09VVExfV0lEVEggICAgICAgICAgICAgIDEgIC8qIFNQS01JWFJfVE9fU1BLT1VUTCAqLworI2RlZmluZSBXTTg5OTRfSU4yTFJQX1RPX1NQS09VVFIgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBJTjJMUlBfVE9fU1BLT1VUUiAqLworI2RlZmluZSBXTTg5OTRfSU4yTFJQX1RPX1NQS09VVFJfTUFTSyAgICAgICAgICAgMHgwMDA0ICAvKiBJTjJMUlBfVE9fU1BLT1VUUiAqLworI2RlZmluZSBXTTg5OTRfSU4yTFJQX1RPX1NQS09VVFJfU0hJRlQgICAgICAgICAgICAgICAyICAvKiBJTjJMUlBfVE9fU1BLT1VUUiAqLworI2RlZmluZSBXTTg5OTRfSU4yTFJQX1RPX1NQS09VVFJfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTjJMUlBfVE9fU1BLT1VUUiAqLworI2RlZmluZSBXTTg5OTRfU1BLTUlYTF9UT19TUEtPVVRSICAgICAgICAgICAgICAgMHgwMDAyICAvKiBTUEtNSVhMX1RPX1NQS09VVFIgKi8KKyNkZWZpbmUgV004OTk0X1NQS01JWExfVE9fU1BLT1VUUl9NQVNLICAgICAgICAgIDB4MDAwMiAgLyogU1BLTUlYTF9UT19TUEtPVVRSICovCisjZGVmaW5lIFdNODk5NF9TUEtNSVhMX1RPX1NQS09VVFJfU0hJRlQgICAgICAgICAgICAgIDEgIC8qIFNQS01JWExfVE9fU1BLT1VUUiAqLworI2RlZmluZSBXTTg5OTRfU1BLTUlYTF9UT19TUEtPVVRSX1dJRFRIICAgICAgICAgICAgICAxICAvKiBTUEtNSVhMX1RPX1NQS09VVFIgKi8KKyNkZWZpbmUgV004OTk0X1NQS01JWFJfVE9fU1BLT1VUUiAgICAgICAgICAgICAgIDB4MDAwMSAgLyogU1BLTUlYUl9UT19TUEtPVVRSICovCisjZGVmaW5lIFdNODk5NF9TUEtNSVhSX1RPX1NQS09VVFJfTUFTSyAgICAgICAgICAweDAwMDEgIC8qIFNQS01JWFJfVE9fU1BLT1VUUiAqLworI2RlZmluZSBXTTg5OTRfU1BLTUlYUl9UT19TUEtPVVRSX1NISUZUICAgICAgICAgICAgICAwICAvKiBTUEtNSVhSX1RPX1NQS09VVFIgKi8KKyNkZWZpbmUgV004OTk0X1NQS01JWFJfVE9fU1BLT1VUUl9XSURUSCAgICAgICAgICAgICAgMSAgLyogU1BLTUlYUl9UT19TUEtPVVRSICovCisKKy8qCisgKiBSMzcgKDB4MjUpIC0gQ2xhc3NECisgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVExfQk9PU1RfTUFTSyAgICAgICAgICAgICAgIDB4MDAzOCAgLyogU1BLT1VUTF9CT09TVCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRMX0JPT1NUX1NISUZUICAgICAgICAgICAgICAgICAgIDMgIC8qIFNQS09VVExfQk9PU1QgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUTF9CT09TVF9XSURUSCAgICAgICAgICAgICAgICAgICAzICAvKiBTUEtPVVRMX0JPT1NUIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVFJfQk9PU1RfTUFTSyAgICAgICAgICAgICAgIDB4MDAwNyAgLyogU1BLT1VUUl9CT09TVCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRSX0JPT1NUX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIFNQS09VVFJfQk9PU1QgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUUl9CT09TVF9XSURUSCAgICAgICAgICAgICAgICAgICAzICAvKiBTUEtPVVRSX0JPT1NUIC0gWzI6MF0gKi8KKworLyoKKyAqIFIzOCAoMHgyNikgLSBTcGVha2VyIFZvbHVtZSBMZWZ0CisgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVF9WVSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogU1BLT1VUX1ZVICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFNQS09VVF9WVSAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBTUEtPVVRfVlUgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVF9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLT1VUX1ZVICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRMX1pDICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFNQS09VVExfWkMgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVExfWkNfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogU1BLT1VUTF9aQyAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUTF9aQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICA3ICAvKiBTUEtPVVRMX1pDICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRMX1pDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS09VVExfWkMgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVExfTVVURV9OICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogU1BLT1VUTF9NVVRFX04gKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVExfTVVURV9OX01BU0sgICAgICAgICAgICAgIDB4MDA0MCAgLyogU1BLT1VUTF9NVVRFX04gKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVExfTVVURV9OX1NISUZUICAgICAgICAgICAgICAgICAgNiAgLyogU1BLT1VUTF9NVVRFX04gKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVExfTVVURV9OX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogU1BLT1VUTF9NVVRFX04gKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVExfVk9MX01BU0sgICAgICAgICAgICAgICAgIDB4MDAzRiAgLyogU1BLT1VUTF9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBTUEtPVVRMX1ZPTCAtIFs1OjBdICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFNQS09VVExfVk9MIC0gWzU6MF0gKi8KKworLyoKKyAqIFIzOSAoMHgyNykgLSBTcGVha2VyIFZvbHVtZSBSaWdodAorICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRfVlUgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFNQS09VVF9WVSAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUX1ZVX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBTUEtPVVRfVlUgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVF9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogU1BLT1VUX1ZVICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS09VVF9WVSAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUUl9aQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBTUEtPVVRSX1pDICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRSX1pDX01BU0sgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIFNQS09VVFJfWkMgKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVFJfWkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogU1BLT1VUUl9aQyAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUUl9aQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTUEtPVVRSX1pDICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRSX01VVEVfTiAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFNQS09VVFJfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRSX01VVEVfTl9NQVNLICAgICAgICAgICAgICAweDAwNDAgIC8qIFNQS09VVFJfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRSX01VVEVfTl9TSElGVCAgICAgICAgICAgICAgICAgIDYgIC8qIFNQS09VVFJfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRSX01VVEVfTl9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS09VVFJfTVVURV9OICovCisjZGVmaW5lIFdNODk5NF9TUEtPVVRSX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAweDAwM0YgIC8qIFNQS09VVFJfVk9MIC0gWzU6MF0gKi8KKyNkZWZpbmUgV004OTk0X1NQS09VVFJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogU1BLT1VUUl9WT0wgLSBbNTowXSAqLworI2RlZmluZSBXTTg5OTRfU1BLT1VUUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgICA2ICAvKiBTUEtPVVRSX1ZPTCAtIFs1OjBdICovCisKKy8qCisgKiBSNDAgKDB4MjgpIC0gSW5wdXQgTWl4ZXIgKDIpCisgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxQX1RPX0lOMkwgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4yTFBfVE9fSU4yTCAqLworI2RlZmluZSBXTTg5OTRfSU4yTFBfVE9fSU4yTF9NQVNLICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjJMUF9UT19JTjJMICovCisjZGVmaW5lIFdNODk5NF9JTjJMUF9UT19JTjJMX1NISUZUICAgICAgICAgICAgICAgICAgIDcgIC8qIElOMkxQX1RPX0lOMkwgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxQX1RPX0lOMkxfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogSU4yTFBfVE9fSU4yTCAqLworI2RlZmluZSBXTTg5OTRfSU4yTE5fVE9fSU4yTCAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTjJMTl9UT19JTjJMICovCisjZGVmaW5lIFdNODk5NF9JTjJMTl9UT19JTjJMX01BU0sgICAgICAgICAgICAgICAweDAwNDAgIC8qIElOMkxOX1RPX0lOMkwgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxOX1RPX0lOMkxfU0hJRlQgICAgICAgICAgICAgICAgICAgNiAgLyogSU4yTE5fVE9fSU4yTCAqLworI2RlZmluZSBXTTg5OTRfSU4yTE5fVE9fSU4yTF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBJTjJMTl9UT19JTjJMICovCisjZGVmaW5lIFdNODk5NF9JTjFMUF9UT19JTjFMICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIElOMUxQX1RPX0lOMUwgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxQX1RPX0lOMUxfTUFTSyAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU4xTFBfVE9fSU4xTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTFBfVE9fSU4xTF9TSElGVCAgICAgICAgICAgICAgICAgICA1ICAvKiBJTjFMUF9UT19JTjFMICovCisjZGVmaW5lIFdNODk5NF9JTjFMUF9UT19JTjFMX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMUxQX1RPX0lOMUwgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxOX1RPX0lOMUwgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogSU4xTE5fVE9fSU4xTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTE5fVE9fSU4xTF9NQVNLICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTjFMTl9UT19JTjFMICovCisjZGVmaW5lIFdNODk5NF9JTjFMTl9UT19JTjFMX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIElOMUxOX1RPX0lOMUwgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxOX1RPX0lOMUxfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogSU4xTE5fVE9fSU4xTCAqLworI2RlZmluZSBXTTg5OTRfSU4yUlBfVE9fSU4yUiAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBJTjJSUF9UT19JTjJSICovCisjZGVmaW5lIFdNODk5NF9JTjJSUF9UT19JTjJSX01BU0sgICAgICAgICAgICAgICAweDAwMDggIC8qIElOMlJQX1RPX0lOMlIgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJQX1RPX0lOMlJfU0hJRlQgICAgICAgICAgICAgICAgICAgMyAgLyogSU4yUlBfVE9fSU4yUiAqLworI2RlZmluZSBXTTg5OTRfSU4yUlBfVE9fSU4yUl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBJTjJSUF9UT19JTjJSICovCisjZGVmaW5lIFdNODk5NF9JTjJSTl9UT19JTjJSICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIElOMlJOX1RPX0lOMlIgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJOX1RPX0lOMlJfTUFTSyAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSU4yUk5fVE9fSU4yUiAqLworI2RlZmluZSBXTTg5OTRfSU4yUk5fVE9fSU4yUl9TSElGVCAgICAgICAgICAgICAgICAgICAyICAvKiBJTjJSTl9UT19JTjJSICovCisjZGVmaW5lIFdNODk5NF9JTjJSTl9UT19JTjJSX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMlJOX1RPX0lOMlIgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJQX1RPX0lOMVIgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSU4xUlBfVE9fSU4xUiAqLworI2RlZmluZSBXTTg5OTRfSU4xUlBfVE9fSU4xUl9NQVNLICAgICAgICAgICAgICAgMHgwMDAyICAvKiBJTjFSUF9UT19JTjFSICovCisjZGVmaW5lIFdNODk5NF9JTjFSUF9UT19JTjFSX1NISUZUICAgICAgICAgICAgICAgICAgIDEgIC8qIElOMVJQX1RPX0lOMVIgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJQX1RPX0lOMVJfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogSU4xUlBfVE9fSU4xUiAqLworI2RlZmluZSBXTTg5OTRfSU4xUk5fVE9fSU4xUiAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBJTjFSTl9UT19JTjFSICovCisjZGVmaW5lIFdNODk5NF9JTjFSTl9UT19JTjFSX01BU0sgICAgICAgICAgICAgICAweDAwMDEgIC8qIElOMVJOX1RPX0lOMVIgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJOX1RPX0lOMVJfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogSU4xUk5fVE9fSU4xUiAqLworI2RlZmluZSBXTTg5OTRfSU4xUk5fVE9fSU4xUl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBJTjFSTl9UT19JTjFSICovCisKKy8qCisgKiBSNDEgKDB4MjkpIC0gSW5wdXQgTWl4ZXIgKDMpCisgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxfVE9fTUlYSU5MICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogSU4yTF9UT19NSVhJTkwgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxfVE9fTUlYSU5MX01BU0sgICAgICAgICAgICAgIDB4MDEwMCAgLyogSU4yTF9UT19NSVhJTkwgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxfVE9fTUlYSU5MX1NISUZUICAgICAgICAgICAgICAgICAgOCAgLyogSU4yTF9UT19NSVhJTkwgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxfVE9fTUlYSU5MX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogSU4yTF9UT19NSVhJTkwgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxfTUlYSU5MX1ZPTCAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSU4yTF9NSVhJTkxfVk9MICovCisjZGVmaW5lIFdNODk5NF9JTjJMX01JWElOTF9WT0xfTUFTSyAgICAgICAgICAgICAweDAwODAgIC8qIElOMkxfTUlYSU5MX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSU4yTF9NSVhJTkxfVk9MX1NISUZUICAgICAgICAgICAgICAgICA3ICAvKiBJTjJMX01JWElOTF9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxfTUlYSU5MX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogSU4yTF9NSVhJTkxfVk9MICovCisjZGVmaW5lIFdNODk5NF9JTjFMX1RPX01JWElOTCAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIElOMUxfVE9fTUlYSU5MICovCisjZGVmaW5lIFdNODk5NF9JTjFMX1RPX01JWElOTF9NQVNLICAgICAgICAgICAgICAweDAwMjAgIC8qIElOMUxfVE9fTUlYSU5MICovCisjZGVmaW5lIFdNODk5NF9JTjFMX1RPX01JWElOTF9TSElGVCAgICAgICAgICAgICAgICAgIDUgIC8qIElOMUxfVE9fTUlYSU5MICovCisjZGVmaW5lIFdNODk5NF9JTjFMX1RPX01JWElOTF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIElOMUxfVE9fTUlYSU5MICovCisjZGVmaW5lIFdNODk5NF9JTjFMX01JWElOTF9WT0wgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElOMUxfTUlYSU5MX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9NSVhJTkxfVk9MX01BU0sgICAgICAgICAgICAgMHgwMDEwICAvKiBJTjFMX01JWElOTF9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfTUlYSU5MX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgNCAgLyogSU4xTF9NSVhJTkxfVk9MICovCisjZGVmaW5lIFdNODk5NF9JTjFMX01JWElOTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIElOMUxfTUlYSU5MX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9NSVhJTkxfVk9MX01BU0sgICAgICAgICAgMHgwMDA3ICAvKiBNSVhPVVRMX01JWElOTF9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9NSVhJTkxfVk9MX1NISUZUICAgICAgICAgICAgICAwICAvKiBNSVhPVVRMX01JWElOTF9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9NSVhJTkxfVk9MX1dJRFRIICAgICAgICAgICAgICAzICAvKiBNSVhPVVRMX01JWElOTF9WT0wgLSBbMjowXSAqLworCisvKgorICogUjQyICgweDJBKSAtIElucHV0IE1peGVyICg0KQorICovCisjZGVmaW5lIFdNODk5NF9JTjJSX1RPX01JWElOUiAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElOMlJfVE9fTUlYSU5SICovCisjZGVmaW5lIFdNODk5NF9JTjJSX1RPX01JWElOUl9NQVNLICAgICAgICAgICAgICAweDAxMDAgIC8qIElOMlJfVE9fTUlYSU5SICovCisjZGVmaW5lIFdNODk5NF9JTjJSX1RPX01JWElOUl9TSElGVCAgICAgICAgICAgICAgICAgIDggIC8qIElOMlJfVE9fTUlYSU5SICovCisjZGVmaW5lIFdNODk5NF9JTjJSX1RPX01JWElOUl9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIElOMlJfVE9fTUlYSU5SICovCisjZGVmaW5lIFdNODk5NF9JTjJSX01JWElOUl9WT0wgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIElOMlJfTUlYSU5SX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSU4yUl9NSVhJTlJfVk9MX01BU0sgICAgICAgICAgICAgMHgwMDgwICAvKiBJTjJSX01JWElOUl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJfTUlYSU5SX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgNyAgLyogSU4yUl9NSVhJTlJfVk9MICovCisjZGVmaW5lIFdNODk5NF9JTjJSX01JWElOUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIElOMlJfTUlYSU5SX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9UT19NSVhJTlIgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTjFSX1RPX01JWElOUiAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9UT19NSVhJTlJfTUFTSyAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTjFSX1RPX01JWElOUiAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9UT19NSVhJTlJfU0hJRlQgICAgICAgICAgICAgICAgICA1ICAvKiBJTjFSX1RPX01JWElOUiAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9UT19NSVhJTlJfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBJTjFSX1RPX01JWElOUiAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9NSVhJTlJfVk9MICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTjFSX01JWElOUl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfTUlYSU5SX1ZPTF9NQVNLICAgICAgICAgICAgIDB4MDAxMCAgLyogSU4xUl9NSVhJTlJfVk9MICovCisjZGVmaW5lIFdNODk5NF9JTjFSX01JWElOUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgIDQgIC8qIElOMVJfTUlYSU5SX1ZPTCAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9NSVhJTlJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBJTjFSX01JWElOUl9WT0wgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfTUlYSU5SX1ZPTF9NQVNLICAgICAgICAgIDB4MDAwNyAgLyogTUlYT1VUUl9NSVhJTlJfVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfTUlYSU5SX1ZPTF9TSElGVCAgICAgICAgICAgICAgMCAgLyogTUlYT1VUUl9NSVhJTlJfVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfTUlYSU5SX1ZPTF9XSURUSCAgICAgICAgICAgICAgMyAgLyogTUlYT1VUUl9NSVhJTlJfVk9MIC0gWzI6MF0gKi8KKworLyoKKyAqIFI0MyAoMHgyQikgLSBJbnB1dCBNaXhlciAoNSkKKyAqLworI2RlZmluZSBXTTg5OTRfSU4xTFBfTUlYSU5MX1ZPTF9NQVNLICAgICAgICAgICAgMHgwMUMwICAvKiBJTjFMUF9NSVhJTkxfVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0lOMUxQX01JWElOTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgNiAgLyogSU4xTFBfTUlYSU5MX1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5NF9JTjFMUF9NSVhJTkxfVk9MX1dJRFRIICAgICAgICAgICAgICAgIDMgIC8qIElOMUxQX01JWElOTF9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTRfSU4yTFJQX01JWElOTF9WT0xfTUFTSyAgICAgICAgICAgMHgwMDA3ICAvKiBJTjJMUlBfTUlYSU5MX1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9JTjJMUlBfTUlYSU5MX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDAgIC8qIElOMkxSUF9NSVhJTkxfVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X0lOMkxSUF9NSVhJTkxfVk9MX1dJRFRIICAgICAgICAgICAgICAgMyAgLyogSU4yTFJQX01JWElOTF9WT0wgLSBbMjowXSAqLworCisvKgorICogUjQ0ICgweDJDKSAtIElucHV0IE1peGVyICg2KQorICovCisjZGVmaW5lIFdNODk5NF9JTjFSUF9NSVhJTlJfVk9MX01BU0sgICAgICAgICAgICAweDAxQzAgIC8qIElOMVJQX01JWElOUl9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTRfSU4xUlBfTUlYSU5SX1ZPTF9TSElGVCAgICAgICAgICAgICAgICA2ICAvKiBJTjFSUF9NSVhJTlJfVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0lOMVJQX01JWElOUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgMyAgLyogSU4xUlBfTUlYSU5SX1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5NF9JTjJMUlBfTUlYSU5SX1ZPTF9NQVNLICAgICAgICAgICAweDAwMDcgIC8qIElOMkxSUF9NSVhJTlJfVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X0lOMkxSUF9NSVhJTlJfVk9MX1NISUZUICAgICAgICAgICAgICAgMCAgLyogSU4yTFJQX01JWElOUl9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfSU4yTFJQX01JWElOUl9WT0xfV0lEVEggICAgICAgICAgICAgICAzICAvKiBJTjJMUlBfTUlYSU5SX1ZPTCAtIFsyOjBdICovCisKKy8qCisgKiBSNDUgKDB4MkQpIC0gT3V0cHV0IE1peGVyICgxKQorICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9UT19IUE9VVDFMICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzFMX1RPX0hQT1VUMUwgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX1RPX0hQT1VUMUxfTUFTSyAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMUxfVE9fSFBPVVQxTCAqLworI2RlZmluZSBXTTg5OTRfREFDMUxfVE9fSFBPVVQxTF9TSElGVCAgICAgICAgICAgICAgICA4ICAvKiBEQUMxTF9UT19IUE9VVDFMICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9UT19IUE9VVDFMX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERBQzFMX1RPX0hQT1VUMUwgKi8KKyNkZWZpbmUgV004OTk0X01JWElOUl9UT19NSVhPVVRMICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUlYSU5SX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X01JWElOUl9UT19NSVhPVVRMX01BU0sgICAgICAgICAgIDB4MDA4MCAgLyogTUlYSU5SX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X01JWElOUl9UT19NSVhPVVRMX1NISUZUICAgICAgICAgICAgICAgNyAgLyogTUlYSU5SX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X01JWElOUl9UT19NSVhPVVRMX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogTUlYSU5SX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X01JWElOTF9UT19NSVhPVVRMICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUlYSU5MX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X01JWElOTF9UT19NSVhPVVRMX01BU0sgICAgICAgICAgIDB4MDA0MCAgLyogTUlYSU5MX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X01JWElOTF9UT19NSVhPVVRMX1NISUZUICAgICAgICAgICAgICAgNiAgLyogTUlYSU5MX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X01JWElOTF9UT19NSVhPVVRMX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogTUlYSU5MX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJOX1RPX01JWE9VVEwgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU4yUk5fVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTRfSU4yUk5fVE9fTUlYT1VUTF9NQVNLICAgICAgICAgICAgMHgwMDIwICAvKiBJTjJSTl9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9JTjJSTl9UT19NSVhPVVRMX1NISUZUICAgICAgICAgICAgICAgIDUgIC8qIElOMlJOX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJOX1RPX01JWE9VVExfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogSU4yUk5fVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTRfSU4yTE5fVE9fTUlYT1VUTCAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTjJMTl9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9JTjJMTl9UT19NSVhPVVRMX01BU0sgICAgICAgICAgICAweDAwMTAgIC8qIElOMkxOX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxOX1RPX01JWE9VVExfU0hJRlQgICAgICAgICAgICAgICAgNCAgLyogSU4yTE5fVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTRfSU4yTE5fVE9fTUlYT1VUTF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBJTjJMTl9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9JTjFSX1RPX01JWE9VVEwgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIElOMVJfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9UT19NSVhPVVRMX01BU0sgICAgICAgICAgICAgMHgwMDA4ICAvKiBJTjFSX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfVE9fTUlYT1VUTF9TSElGVCAgICAgICAgICAgICAgICAgMyAgLyogSU4xUl9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9JTjFSX1RPX01JWE9VVExfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIElOMVJfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9UT19NSVhPVVRMICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBJTjFMX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfVE9fTUlYT1VUTF9NQVNLICAgICAgICAgICAgIDB4MDAwNCAgLyogSU4xTF9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9JTjFMX1RPX01JWE9VVExfU0hJRlQgICAgICAgICAgICAgICAgIDIgIC8qIElOMUxfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9UT19NSVhPVVRMX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBJTjFMX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxQX1RPX01JWE9VVEwgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSU4yTFBfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTRfSU4yTFBfVE9fTUlYT1VUTF9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBJTjJMUF9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9JTjJMUF9UT19NSVhPVVRMX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIElOMkxQX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxQX1RPX01JWE9VVExfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogSU4yTFBfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTRfREFDMUxfVE9fTUlYT1VUTCAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUMxTF9UT19NSVhPVVRMICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9UT19NSVhPVVRMX01BU0sgICAgICAgICAgICAweDAwMDEgIC8qIERBQzFMX1RPX01JWE9VVEwgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX1RPX01JWE9VVExfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogREFDMUxfVE9fTUlYT1VUTCAqLworI2RlZmluZSBXTTg5OTRfREFDMUxfVE9fTUlYT1VUTF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEQUMxTF9UT19NSVhPVVRMICovCisKKy8qCisgKiBSNDYgKDB4MkUpIC0gT3V0cHV0IE1peGVyICgyKQorICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9UT19IUE9VVDFSICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzFSX1RPX0hQT1VUMVIgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFSX1RPX0hQT1VUMVJfTUFTSyAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMVJfVE9fSFBPVVQxUiAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfVE9fSFBPVVQxUl9TSElGVCAgICAgICAgICAgICAgICA4ICAvKiBEQUMxUl9UT19IUE9VVDFSICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9UT19IUE9VVDFSX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERBQzFSX1RPX0hQT1VUMVIgKi8KKyNkZWZpbmUgV004OTk0X01JWElOTF9UT19NSVhPVVRSICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUlYSU5MX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X01JWElOTF9UT19NSVhPVVRSX01BU0sgICAgICAgICAgIDB4MDA4MCAgLyogTUlYSU5MX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X01JWElOTF9UT19NSVhPVVRSX1NISUZUICAgICAgICAgICAgICAgNyAgLyogTUlYSU5MX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X01JWElOTF9UT19NSVhPVVRSX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogTUlYSU5MX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X01JWElOUl9UT19NSVhPVVRSICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUlYSU5SX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X01JWElOUl9UT19NSVhPVVRSX01BU0sgICAgICAgICAgIDB4MDA0MCAgLyogTUlYSU5SX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X01JWElOUl9UT19NSVhPVVRSX1NISUZUICAgICAgICAgICAgICAgNiAgLyogTUlYSU5SX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X01JWElOUl9UT19NSVhPVVRSX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogTUlYSU5SX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxOX1RPX01JWE9VVFIgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU4yTE5fVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTRfSU4yTE5fVE9fTUlYT1VUUl9NQVNLICAgICAgICAgICAgMHgwMDIwICAvKiBJTjJMTl9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9JTjJMTl9UT19NSVhPVVRSX1NISUZUICAgICAgICAgICAgICAgIDUgIC8qIElOMkxOX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxOX1RPX01JWE9VVFJfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogSU4yTE5fVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTRfSU4yUk5fVE9fTUlYT1VUUiAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTjJSTl9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9JTjJSTl9UT19NSVhPVVRSX01BU0sgICAgICAgICAgICAweDAwMTAgIC8qIElOMlJOX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJOX1RPX01JWE9VVFJfU0hJRlQgICAgICAgICAgICAgICAgNCAgLyogSU4yUk5fVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTRfSU4yUk5fVE9fTUlYT1VUUl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBJTjJSTl9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9JTjFMX1RPX01JWE9VVFIgICAgICAgICAgICAgICAgICAweDAwMDggIC8qIElOMUxfVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9UT19NSVhPVVRSX01BU0sgICAgICAgICAgICAgMHgwMDA4ICAvKiBJTjFMX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfVE9fTUlYT1VUUl9TSElGVCAgICAgICAgICAgICAgICAgMyAgLyogSU4xTF9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9JTjFMX1RPX01JWE9VVFJfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIElOMUxfVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9UT19NSVhPVVRSICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBJTjFSX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfVE9fTUlYT1VUUl9NQVNLICAgICAgICAgICAgIDB4MDAwNCAgLyogSU4xUl9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9JTjFSX1RPX01JWE9VVFJfU0hJRlQgICAgICAgICAgICAgICAgIDIgIC8qIElOMVJfVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9UT19NSVhPVVRSX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBJTjFSX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJQX1RPX01JWE9VVFIgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSU4yUlBfVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTRfSU4yUlBfVE9fTUlYT1VUUl9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBJTjJSUF9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9JTjJSUF9UT19NSVhPVVRSX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIElOMlJQX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMlJQX1RPX01JWE9VVFJfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogSU4yUlBfVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfVE9fTUlYT1VUUiAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUMxUl9UT19NSVhPVVRSICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9UT19NSVhPVVRSX01BU0sgICAgICAgICAgICAweDAwMDEgIC8qIERBQzFSX1RPX01JWE9VVFIgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFSX1RPX01JWE9VVFJfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogREFDMVJfVE9fTUlYT1VUUiAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfVE9fTUlYT1VUUl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEQUMxUl9UT19NSVhPVVRSICovCisKKy8qCisgKiBSNDcgKDB4MkYpIC0gT3V0cHV0IE1peGVyICgzKQorICovCisjZGVmaW5lIFdNODk5NF9JTjJMUF9NSVhPVVRMX1ZPTF9NQVNLICAgICAgICAgICAweDBFMDAgIC8qIElOMkxQX01JWE9VVExfVk9MIC0gWzExOjldICovCisjZGVmaW5lIFdNODk5NF9JTjJMUF9NSVhPVVRMX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDkgIC8qIElOMkxQX01JWE9VVExfVk9MIC0gWzExOjldICovCisjZGVmaW5lIFdNODk5NF9JTjJMUF9NSVhPVVRMX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDMgIC8qIElOMkxQX01JWE9VVExfVk9MIC0gWzExOjldICovCisjZGVmaW5lIFdNODk5NF9JTjJMTl9NSVhPVVRMX1ZPTF9NQVNLICAgICAgICAgICAweDAxQzAgIC8qIElOMkxOX01JWE9VVExfVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0lOMkxOX01JWE9VVExfVk9MX1NISUZUICAgICAgICAgICAgICAgNiAgLyogSU4yTE5fTUlYT1VUTF9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTRfSU4yTE5fTUlYT1VUTF9WT0xfV0lEVEggICAgICAgICAgICAgICAzICAvKiBJTjJMTl9NSVhPVVRMX1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5NF9JTjFSX01JWE9VVExfVk9MX01BU0sgICAgICAgICAgICAweDAwMzggIC8qIElOMVJfTUlYT1VUTF9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9NSVhPVVRMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAzICAvKiBJTjFSX01JWE9VVExfVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfTUlYT1VUTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgMyAgLyogSU4xUl9NSVhPVVRMX1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9JTjFMX01JWE9VVExfVk9MX01BU0sgICAgICAgICAgICAweDAwMDcgIC8qIElOMUxfTUlYT1VUTF9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9NSVhPVVRMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBJTjFMX01JWE9VVExfVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfTUlYT1VUTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgMyAgLyogSU4xTF9NSVhPVVRMX1ZPTCAtIFsyOjBdICovCisKKy8qCisgKiBSNDggKDB4MzApIC0gT3V0cHV0IE1peGVyICg0KQorICovCisjZGVmaW5lIFdNODk5NF9JTjJSUF9NSVhPVVRSX1ZPTF9NQVNLICAgICAgICAgICAweDBFMDAgIC8qIElOMlJQX01JWE9VVFJfVk9MIC0gWzExOjldICovCisjZGVmaW5lIFdNODk5NF9JTjJSUF9NSVhPVVRSX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDkgIC8qIElOMlJQX01JWE9VVFJfVk9MIC0gWzExOjldICovCisjZGVmaW5lIFdNODk5NF9JTjJSUF9NSVhPVVRSX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDMgIC8qIElOMlJQX01JWE9VVFJfVk9MIC0gWzExOjldICovCisjZGVmaW5lIFdNODk5NF9JTjJSTl9NSVhPVVRSX1ZPTF9NQVNLICAgICAgICAgICAweDAxQzAgIC8qIElOMlJOX01JWE9VVFJfVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0lOMlJOX01JWE9VVFJfVk9MX1NISUZUICAgICAgICAgICAgICAgNiAgLyogSU4yUk5fTUlYT1VUUl9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTRfSU4yUk5fTUlYT1VUUl9WT0xfV0lEVEggICAgICAgICAgICAgICAzICAvKiBJTjJSTl9NSVhPVVRSX1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5NF9JTjFMX01JWE9VVFJfVk9MX01BU0sgICAgICAgICAgICAweDAwMzggIC8qIElOMUxfTUlYT1VUUl9WT0wgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9NSVhPVVRSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAzICAvKiBJTjFMX01JWE9VVFJfVk9MIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk0X0lOMUxfTUlYT1VUUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgMyAgLyogSU4xTF9NSVhPVVRSX1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9JTjFSX01JWE9VVFJfVk9MX01BU0sgICAgICAgICAgICAweDAwMDcgIC8qIElOMVJfTUlYT1VUUl9WT0wgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9NSVhPVVRSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBJTjFSX01JWE9VVFJfVk9MIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X0lOMVJfTUlYT1VUUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgMyAgLyogSU4xUl9NSVhPVVRSX1ZPTCAtIFsyOjBdICovCisKKy8qCisgKiBSNDkgKDB4MzEpIC0gT3V0cHV0IE1peGVyICg1KQorICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9NSVhPVVRMX1ZPTF9NQVNLICAgICAgICAgICAweDBFMDAgIC8qIERBQzFMX01JWE9VVExfVk9MIC0gWzExOjldICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9NSVhPVVRMX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDkgIC8qIERBQzFMX01JWE9VVExfVk9MIC0gWzExOjldICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9NSVhPVVRMX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDMgIC8qIERBQzFMX01JWE9VVExfVk9MIC0gWzExOjldICovCisjZGVmaW5lIFdNODk5NF9JTjJSTl9NSVhPVVRMX1ZPTF9NQVNLICAgICAgICAgICAweDAxQzAgIC8qIElOMlJOX01JWE9VVExfVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0lOMlJOX01JWE9VVExfVk9MX1NISUZUICAgICAgICAgICAgICAgNiAgLyogSU4yUk5fTUlYT1VUTF9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTRfSU4yUk5fTUlYT1VUTF9WT0xfV0lEVEggICAgICAgICAgICAgICAzICAvKiBJTjJSTl9NSVhPVVRMX1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfTUlYT1VUTF9WT0xfTUFTSyAgICAgICAgICAweDAwMzggIC8qIE1JWElOUl9NSVhPVVRMX1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfTUlYT1VUTF9WT0xfU0hJRlQgICAgICAgICAgICAgIDMgIC8qIE1JWElOUl9NSVhPVVRMX1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfTUlYT1VUTF9WT0xfV0lEVEggICAgICAgICAgICAgIDMgIC8qIE1JWElOUl9NSVhPVVRMX1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfTUlYT1VUTF9WT0xfTUFTSyAgICAgICAgICAweDAwMDcgIC8qIE1JWElOTF9NSVhPVVRMX1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfTUlYT1VUTF9WT0xfU0hJRlQgICAgICAgICAgICAgIDAgIC8qIE1JWElOTF9NSVhPVVRMX1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfTUlYT1VUTF9WT0xfV0lEVEggICAgICAgICAgICAgIDMgIC8qIE1JWElOTF9NSVhPVVRMX1ZPTCAtIFsyOjBdICovCisKKy8qCisgKiBSNTAgKDB4MzIpIC0gT3V0cHV0IE1peGVyICg2KQorICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9NSVhPVVRSX1ZPTF9NQVNLICAgICAgICAgICAweDBFMDAgIC8qIERBQzFSX01JWE9VVFJfVk9MIC0gWzExOjldICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9NSVhPVVRSX1ZPTF9TSElGVCAgICAgICAgICAgICAgIDkgIC8qIERBQzFSX01JWE9VVFJfVk9MIC0gWzExOjldICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9NSVhPVVRSX1ZPTF9XSURUSCAgICAgICAgICAgICAgIDMgIC8qIERBQzFSX01JWE9VVFJfVk9MIC0gWzExOjldICovCisjZGVmaW5lIFdNODk5NF9JTjJMTl9NSVhPVVRSX1ZPTF9NQVNLICAgICAgICAgICAweDAxQzAgIC8qIElOMkxOX01JWE9VVFJfVk9MIC0gWzg6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0lOMkxOX01JWE9VVFJfVk9MX1NISUZUICAgICAgICAgICAgICAgNiAgLyogSU4yTE5fTUlYT1VUUl9WT0wgLSBbODo2XSAqLworI2RlZmluZSBXTTg5OTRfSU4yTE5fTUlYT1VUUl9WT0xfV0lEVEggICAgICAgICAgICAgICAzICAvKiBJTjJMTl9NSVhPVVRSX1ZPTCAtIFs4OjZdICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfTUlYT1VUUl9WT0xfTUFTSyAgICAgICAgICAweDAwMzggIC8qIE1JWElOTF9NSVhPVVRSX1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfTUlYT1VUUl9WT0xfU0hJRlQgICAgICAgICAgICAgIDMgIC8qIE1JWElOTF9NSVhPVVRSX1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9NSVhJTkxfTUlYT1VUUl9WT0xfV0lEVEggICAgICAgICAgICAgIDMgIC8qIE1JWElOTF9NSVhPVVRSX1ZPTCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfTUlYT1VUUl9WT0xfTUFTSyAgICAgICAgICAweDAwMDcgIC8qIE1JWElOUl9NSVhPVVRSX1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfTUlYT1VUUl9WT0xfU0hJRlQgICAgICAgICAgICAgIDAgIC8qIE1JWElOUl9NSVhPVVRSX1ZPTCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9NSVhJTlJfTUlYT1VUUl9WT0xfV0lEVEggICAgICAgICAgICAgIDMgIC8qIE1JWElOUl9NSVhPVVRSX1ZPTCAtIFsyOjBdICovCisKKy8qCisgKiBSNTEgKDB4MzMpIC0gSFBPVVQyIE1peGVyCisgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxSUF9UT19IUE9VVDIgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU4yTFJQX1RPX0hQT1VUMiAqLworI2RlZmluZSBXTTg5OTRfSU4yTFJQX1RPX0hQT1VUMl9NQVNLICAgICAgICAgICAgMHgwMDIwICAvKiBJTjJMUlBfVE9fSFBPVVQyICovCisjZGVmaW5lIFdNODk5NF9JTjJMUlBfVE9fSFBPVVQyX1NISUZUICAgICAgICAgICAgICAgIDUgIC8qIElOMkxSUF9UT19IUE9VVDIgKi8KKyNkZWZpbmUgV004OTk0X0lOMkxSUF9UT19IUE9VVDJfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogSU4yTFJQX1RPX0hQT1VUMiAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTFZPTF9UT19IUE9VVDIgICAgICAgICAgICAgMHgwMDEwICAvKiBNSVhPVVRMVk9MX1RPX0hQT1VUMiAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTFZPTF9UT19IUE9VVDJfTUFTSyAgICAgICAgMHgwMDEwICAvKiBNSVhPVVRMVk9MX1RPX0hQT1VUMiAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTFZPTF9UT19IUE9VVDJfU0hJRlQgICAgICAgICAgICA0ICAvKiBNSVhPVVRMVk9MX1RPX0hQT1VUMiAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTFZPTF9UT19IUE9VVDJfV0lEVEggICAgICAgICAgICAxICAvKiBNSVhPVVRMVk9MX1RPX0hQT1VUMiAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUUlZPTF9UT19IUE9VVDIgICAgICAgICAgICAgMHgwMDA4ICAvKiBNSVhPVVRSVk9MX1RPX0hQT1VUMiAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUUlZPTF9UT19IUE9VVDJfTUFTSyAgICAgICAgMHgwMDA4ICAvKiBNSVhPVVRSVk9MX1RPX0hQT1VUMiAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUUlZPTF9UT19IUE9VVDJfU0hJRlQgICAgICAgICAgICAzICAvKiBNSVhPVVRSVk9MX1RPX0hQT1VUMiAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUUlZPTF9UT19IUE9VVDJfV0lEVEggICAgICAgICAgICAxICAvKiBNSVhPVVRSVk9MX1RPX0hQT1VUMiAqLworCisvKgorICogUjUyICgweDM0KSAtIExpbmUgTWl4ZXIgKDEpCisgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfVE9fTElORU9VVDFOICAgICAgICAgICAgIDB4MDA0MCAgLyogTUlYT1VUTF9UT19MSU5FT1VUMU4gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfVE9fTElORU9VVDFOX01BU0sgICAgICAgIDB4MDA0MCAgLyogTUlYT1VUTF9UT19MSU5FT1VUMU4gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfVE9fTElORU9VVDFOX1NISUZUICAgICAgICAgICAgNiAgLyogTUlYT1VUTF9UT19MSU5FT1VUMU4gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfVE9fTElORU9VVDFOX1dJRFRIICAgICAgICAgICAgMSAgLyogTUlYT1VUTF9UT19MSU5FT1VUMU4gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfVE9fTElORU9VVDFOICAgICAgICAgICAgIDB4MDAyMCAgLyogTUlYT1VUUl9UT19MSU5FT1VUMU4gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfVE9fTElORU9VVDFOX01BU0sgICAgICAgIDB4MDAyMCAgLyogTUlYT1VUUl9UT19MSU5FT1VUMU4gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfVE9fTElORU9VVDFOX1NISUZUICAgICAgICAgICAgNSAgLyogTUlYT1VUUl9UT19MSU5FT1VUMU4gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfVE9fTElORU9VVDFOX1dJRFRIICAgICAgICAgICAgMSAgLyogTUlYT1VUUl9UT19MSU5FT1VUMU4gKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQxX01PREUgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTElORU9VVDFfTU9ERSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFfTU9ERV9NQVNLICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMSU5FT1VUMV9NT0RFICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMV9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIExJTkVPVVQxX01PREUgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQxX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVDFfTU9ERSAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9UT19MSU5FT1VUMVAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBJTjFSX1RPX0xJTkVPVVQxUCAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9UT19MSU5FT1VUMVBfTUFTSyAgICAgICAgICAgMHgwMDA0ICAvKiBJTjFSX1RPX0xJTkVPVVQxUCAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9UT19MSU5FT1VUMVBfU0hJRlQgICAgICAgICAgICAgICAyICAvKiBJTjFSX1RPX0xJTkVPVVQxUCAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9UT19MSU5FT1VUMVBfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTjFSX1RPX0xJTkVPVVQxUCAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9UT19MSU5FT1VUMVAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBJTjFMX1RPX0xJTkVPVVQxUCAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9UT19MSU5FT1VUMVBfTUFTSyAgICAgICAgICAgMHgwMDAyICAvKiBJTjFMX1RPX0xJTkVPVVQxUCAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9UT19MSU5FT1VUMVBfU0hJRlQgICAgICAgICAgICAgICAxICAvKiBJTjFMX1RPX0xJTkVPVVQxUCAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9UT19MSU5FT1VUMVBfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTjFMX1RPX0xJTkVPVVQxUCAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9UT19MSU5FT1VUMVAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSVhPVVRMX1RPX0xJTkVPVVQxUCAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9UT19MSU5FT1VUMVBfTUFTSyAgICAgICAgMHgwMDAxICAvKiBNSVhPVVRMX1RPX0xJTkVPVVQxUCAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9UT19MSU5FT1VUMVBfU0hJRlQgICAgICAgICAgICAwICAvKiBNSVhPVVRMX1RPX0xJTkVPVVQxUCAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9UT19MSU5FT1VUMVBfV0lEVEggICAgICAgICAgICAxICAvKiBNSVhPVVRMX1RPX0xJTkVPVVQxUCAqLworCisvKgorICogUjUzICgweDM1KSAtIExpbmUgTWl4ZXIgKDIpCisgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfVE9fTElORU9VVDJOICAgICAgICAgICAgIDB4MDA0MCAgLyogTUlYT1VUUl9UT19MSU5FT1VUMk4gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfVE9fTElORU9VVDJOX01BU0sgICAgICAgIDB4MDA0MCAgLyogTUlYT1VUUl9UT19MSU5FT1VUMk4gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfVE9fTElORU9VVDJOX1NISUZUICAgICAgICAgICAgNiAgLyogTUlYT1VUUl9UT19MSU5FT1VUMk4gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfVE9fTElORU9VVDJOX1dJRFRIICAgICAgICAgICAgMSAgLyogTUlYT1VUUl9UT19MSU5FT1VUMk4gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfVE9fTElORU9VVDJOICAgICAgICAgICAgIDB4MDAyMCAgLyogTUlYT1VUTF9UT19MSU5FT1VUMk4gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfVE9fTElORU9VVDJOX01BU0sgICAgICAgIDB4MDAyMCAgLyogTUlYT1VUTF9UT19MSU5FT1VUMk4gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfVE9fTElORU9VVDJOX1NISUZUICAgICAgICAgICAgNSAgLyogTUlYT1VUTF9UT19MSU5FT1VUMk4gKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfVE9fTElORU9VVDJOX1dJRFRIICAgICAgICAgICAgMSAgLyogTUlYT1VUTF9UT19MSU5FT1VUMk4gKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyX01PREUgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTElORU9VVDJfTU9ERSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJfTU9ERV9NQVNLICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMSU5FT1VUMl9NT0RFICovCisjZGVmaW5lIFdNODk5NF9MSU5FT1VUMl9NT0RFX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIExJTkVPVVQyX01PREUgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyX01PREVfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVDJfTU9ERSAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9UT19MSU5FT1VUMlAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBJTjFMX1RPX0xJTkVPVVQyUCAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9UT19MSU5FT1VUMlBfTUFTSyAgICAgICAgICAgMHgwMDA0ICAvKiBJTjFMX1RPX0xJTkVPVVQyUCAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9UT19MSU5FT1VUMlBfU0hJRlQgICAgICAgICAgICAgICAyICAvKiBJTjFMX1RPX0xJTkVPVVQyUCAqLworI2RlZmluZSBXTTg5OTRfSU4xTF9UT19MSU5FT1VUMlBfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTjFMX1RPX0xJTkVPVVQyUCAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9UT19MSU5FT1VUMlAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBJTjFSX1RPX0xJTkVPVVQyUCAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9UT19MSU5FT1VUMlBfTUFTSyAgICAgICAgICAgMHgwMDAyICAvKiBJTjFSX1RPX0xJTkVPVVQyUCAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9UT19MSU5FT1VUMlBfU0hJRlQgICAgICAgICAgICAgICAxICAvKiBJTjFSX1RPX0xJTkVPVVQyUCAqLworI2RlZmluZSBXTTg5OTRfSU4xUl9UT19MSU5FT1VUMlBfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTjFSX1RPX0xJTkVPVVQyUCAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUUl9UT19MSU5FT1VUMlAgICAgICAgICAgICAgMHgwMDAxICAvKiBNSVhPVVRSX1RPX0xJTkVPVVQyUCAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUUl9UT19MSU5FT1VUMlBfTUFTSyAgICAgICAgMHgwMDAxICAvKiBNSVhPVVRSX1RPX0xJTkVPVVQyUCAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUUl9UT19MSU5FT1VUMlBfU0hJRlQgICAgICAgICAgICAwICAvKiBNSVhPVVRSX1RPX0xJTkVPVVQyUCAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUUl9UT19MSU5FT1VUMlBfV0lEVEggICAgICAgICAgICAxICAvKiBNSVhPVVRSX1RPX0xJTkVPVVQyUCAqLworCisvKgorICogUjU0ICgweDM2KSAtIFNwZWFrZXIgTWl4ZXIKKyAqLworI2RlZmluZSBXTTg5OTRfREFDMkxfVE9fU1BLTUlYTCAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUMyTF9UT19TUEtNSVhMICovCisjZGVmaW5lIFdNODk5NF9EQUMyTF9UT19TUEtNSVhMX01BU0sgICAgICAgICAgICAweDAyMDAgIC8qIERBQzJMX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJMX1RPX1NQS01JWExfU0hJRlQgICAgICAgICAgICAgICAgOSAgLyogREFDMkxfVE9fU1BLTUlYTCAqLworI2RlZmluZSBXTTg5OTRfREFDMkxfVE9fU1BLTUlYTF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEQUMyTF9UT19TUEtNSVhMICovCisjZGVmaW5lIFdNODk5NF9EQUMyUl9UT19TUEtNSVhSICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzJSX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJSX1RPX1NQS01JWFJfTUFTSyAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMlJfVE9fU1BLTUlYUiAqLworI2RlZmluZSBXTTg5OTRfREFDMlJfVE9fU1BLTUlYUl9TSElGVCAgICAgICAgICAgICAgICA4ICAvKiBEQUMyUl9UT19TUEtNSVhSICovCisjZGVmaW5lIFdNODk5NF9EQUMyUl9UT19TUEtNSVhSX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERBQzJSX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTk0X01JWElOTF9UT19TUEtNSVhMICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUlYSU5MX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTk0X01JWElOTF9UT19TUEtNSVhMX01BU0sgICAgICAgICAgIDB4MDA4MCAgLyogTUlYSU5MX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTk0X01JWElOTF9UT19TUEtNSVhMX1NISUZUICAgICAgICAgICAgICAgNyAgLyogTUlYSU5MX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTk0X01JWElOTF9UT19TUEtNSVhMX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogTUlYSU5MX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTk0X01JWElOUl9UT19TUEtNSVhSICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTUlYSU5SX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTk0X01JWElOUl9UT19TUEtNSVhSX01BU0sgICAgICAgICAgIDB4MDA0MCAgLyogTUlYSU5SX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTk0X01JWElOUl9UT19TUEtNSVhSX1NISUZUICAgICAgICAgICAgICAgNiAgLyogTUlYSU5SX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTk0X01JWElOUl9UT19TUEtNSVhSX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogTUlYSU5SX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxQX1RPX1NQS01JWEwgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogSU4xTFBfVE9fU1BLTUlYTCAqLworI2RlZmluZSBXTTg5OTRfSU4xTFBfVE9fU1BLTUlYTF9NQVNLICAgICAgICAgICAgMHgwMDIwICAvKiBJTjFMUF9UT19TUEtNSVhMICovCisjZGVmaW5lIFdNODk5NF9JTjFMUF9UT19TUEtNSVhMX1NISUZUICAgICAgICAgICAgICAgIDUgIC8qIElOMUxQX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTk0X0lOMUxQX1RPX1NQS01JWExfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogSU4xTFBfVE9fU1BLTUlYTCAqLworI2RlZmluZSBXTTg5OTRfSU4xUlBfVE9fU1BLTUlYUiAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTjFSUF9UT19TUEtNSVhSICovCisjZGVmaW5lIFdNODk5NF9JTjFSUF9UT19TUEtNSVhSX01BU0sgICAgICAgICAgICAweDAwMTAgIC8qIElOMVJQX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTk0X0lOMVJQX1RPX1NQS01JWFJfU0hJRlQgICAgICAgICAgICAgICAgNCAgLyogSU4xUlBfVE9fU1BLTUlYUiAqLworI2RlZmluZSBXTTg5OTRfSU4xUlBfVE9fU1BLTUlYUl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBJTjFSUF9UT19TUEtNSVhSICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX1RPX1NQS01JWEwgICAgICAgICAgICAgICAweDAwMDggIC8qIE1JWE9VVExfVE9fU1BLTUlYTCAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUTF9UT19TUEtNSVhMX01BU0sgICAgICAgICAgMHgwMDA4ICAvKiBNSVhPVVRMX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVExfVE9fU1BLTUlYTF9TSElGVCAgICAgICAgICAgICAgMyAgLyogTUlYT1VUTF9UT19TUEtNSVhMICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRMX1RPX1NQS01JWExfV0lEVEggICAgICAgICAgICAgIDEgIC8qIE1JWE9VVExfVE9fU1BLTUlYTCAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUUl9UT19TUEtNSVhSICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBNSVhPVVRSX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTk0X01JWE9VVFJfVE9fU1BLTUlYUl9NQVNLICAgICAgICAgIDB4MDAwNCAgLyogTUlYT1VUUl9UT19TUEtNSVhSICovCisjZGVmaW5lIFdNODk5NF9NSVhPVVRSX1RPX1NQS01JWFJfU0hJRlQgICAgICAgICAgICAgIDIgIC8qIE1JWE9VVFJfVE9fU1BLTUlYUiAqLworI2RlZmluZSBXTTg5OTRfTUlYT1VUUl9UT19TUEtNSVhSX1dJRFRIICAgICAgICAgICAgICAxICAvKiBNSVhPVVRSX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX1RPX1NQS01JWEwgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogREFDMUxfVE9fU1BLTUlYTCAqLworI2RlZmluZSBXTTg5OTRfREFDMUxfVE9fU1BLTUlYTF9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBEQUMxTF9UT19TUEtNSVhMICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9UT19TUEtNSVhMX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIERBQzFMX1RPX1NQS01JWEwgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX1RPX1NQS01JWExfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogREFDMUxfVE9fU1BLTUlYTCAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfVE9fU1BLTUlYUiAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUMxUl9UT19TUEtNSVhSICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9UT19TUEtNSVhSX01BU0sgICAgICAgICAgICAweDAwMDEgIC8qIERBQzFSX1RPX1NQS01JWFIgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFSX1RPX1NQS01JWFJfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogREFDMVJfVE9fU1BLTUlYUiAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfVE9fU1BLTUlYUl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBEQUMxUl9UT19TUEtNSVhSICovCisKKy8qCisgKiBSNTUgKDB4MzcpIC0gQWRkaXRpb25hbCBDb250cm9sCisgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQxX0ZCICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTElORU9VVDFfRkIgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQxX0ZCX01BU0sgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTElORU9VVDFfRkIgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQxX0ZCX1NISUZUICAgICAgICAgICAgICAgICAgICAgNyAgLyogTElORU9VVDFfRkIgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQxX0ZCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVDFfRkIgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyX0ZCICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTElORU9VVDJfRkIgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyX0ZCX01BU0sgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTElORU9VVDJfRkIgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyX0ZCX1NISUZUICAgICAgICAgICAgICAgICAgICAgNiAgLyogTElORU9VVDJfRkIgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVQyX0ZCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogTElORU9VVDJfRkIgKi8KKyNkZWZpbmUgV004OTk0X1ZST0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVlJPSSAqLworI2RlZmluZSBXTTg5OTRfVlJPSV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBWUk9JICovCisjZGVmaW5lIFdNODk5NF9WUk9JX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFZST0kgKi8KKyNkZWZpbmUgV004OTk0X1ZST0lfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogVlJPSSAqLworCisvKgorICogUjU2ICgweDM4KSAtIEFudGlQT1AgKDEpCisgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVRfVk1JRF9CVUZfRU5BICAgICAgICAgICAgIDB4MDA4MCAgLyogTElORU9VVF9WTUlEX0JVRl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVRfVk1JRF9CVUZfRU5BX01BU0sgICAgICAgIDB4MDA4MCAgLyogTElORU9VVF9WTUlEX0JVRl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVRfVk1JRF9CVUZfRU5BX1NISUZUICAgICAgICAgICAgNyAgLyogTElORU9VVF9WTUlEX0JVRl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0xJTkVPVVRfVk1JRF9CVUZfRU5BX1dJRFRIICAgICAgICAgICAgMSAgLyogTElORU9VVF9WTUlEX0JVRl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMl9JTl9FTkEgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSFBPVVQyX0lOX0VOQSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQyX0lOX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMDQwICAvKiBIUE9VVDJfSU5fRU5BICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDJfSU5fRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDYgIC8qIEhQT1VUMl9JTl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMl9JTl9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQyX0lOX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFfRElTQ0ggICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBMSU5FT1VUMV9ESVNDSCAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFfRElTQ0hfTUFTSyAgICAgICAgICAgICAgMHgwMDIwICAvKiBMSU5FT1VUMV9ESVNDSCAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFfRElTQ0hfU0hJRlQgICAgICAgICAgICAgICAgICA1ICAvKiBMSU5FT1VUMV9ESVNDSCAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDFfRElTQ0hfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMV9ESVNDSCAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJfRElTQ0ggICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMSU5FT1VUMl9ESVNDSCAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJfRElTQ0hfTUFTSyAgICAgICAgICAgICAgMHgwMDEwICAvKiBMSU5FT1VUMl9ESVNDSCAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJfRElTQ0hfU0hJRlQgICAgICAgICAgICAgICAgICA0ICAvKiBMSU5FT1VUMl9ESVNDSCAqLworI2RlZmluZSBXTTg5OTRfTElORU9VVDJfRElTQ0hfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBMSU5FT1VUMl9ESVNDSCAqLworCisvKgorICogUjU3ICgweDM5KSAtIEFudGlQT1AgKDIpCisgKi8KKyNkZWZpbmUgV004OTk0X01JQ0IyX0RJU0NIICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTUlDQjJfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X01JQ0IyX0RJU0NIX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogTUlDQjJfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X01JQ0IyX0RJU0NIX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogTUlDQjJfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X01JQ0IyX0RJU0NIX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQjJfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X01JQ0IxX0RJU0NIICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUlDQjFfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X01JQ0IxX0RJU0NIX01BU0sgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogTUlDQjFfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X01JQ0IxX0RJU0NIX1NISUZUICAgICAgICAgICAgICAgICAgICAgNyAgLyogTUlDQjFfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X01JQ0IxX0RJU0NIX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQjFfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X1ZNSURfUkFNUF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDA2MCAgLyogVk1JRF9SQU1QIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004OTk0X1ZNSURfUkFNUF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogVk1JRF9SQU1QIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004OTk0X1ZNSURfUkFNUF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogVk1JRF9SQU1QIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004OTk0X1ZNSURfQlVGX0VOQSAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogVk1JRF9CVUZfRU5BICovCisjZGVmaW5lIFdNODk5NF9WTUlEX0JVRl9FTkFfTUFTSyAgICAgICAgICAgICAgICAweDAwMDggIC8qIFZNSURfQlVGX0VOQSAqLworI2RlZmluZSBXTTg5OTRfVk1JRF9CVUZfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAzICAvKiBWTUlEX0JVRl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X1ZNSURfQlVGX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogVk1JRF9CVUZfRU5BICovCisjZGVmaW5lIFdNODk5NF9TVEFSVFVQX0JJQVNfRU5BICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIFNUQVJUVVBfQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NUQVJUVVBfQklBU19FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwNCAgLyogU1RBUlRVUF9CSUFTX0VOQSAqLworI2RlZmluZSBXTTg5OTRfU1RBUlRVUF9CSUFTX0VOQV9TSElGVCAgICAgICAgICAgICAgICAyICAvKiBTVEFSVFVQX0JJQVNfRU5BICovCisjZGVmaW5lIFdNODk5NF9TVEFSVFVQX0JJQVNfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIFNUQVJUVVBfQklBU19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0JJQVNfU1JDICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQklBU19TUkMgKi8KKyNkZWZpbmUgV004OTk0X0JJQVNfU1JDX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQklBU19TUkMgKi8KKyNkZWZpbmUgV004OTk0X0JJQVNfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQklBU19TUkMgKi8KKyNkZWZpbmUgV004OTk0X0JJQVNfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQklBU19TUkMgKi8KKyNkZWZpbmUgV004OTk0X1ZNSURfRElTQ0ggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVk1JRF9ESVNDSCAqLworI2RlZmluZSBXTTg5OTRfVk1JRF9ESVNDSF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBWTUlEX0RJU0NIICovCisjZGVmaW5lIFdNODk5NF9WTUlEX0RJU0NIX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIFZNSURfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X1ZNSURfRElTQ0hfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogVk1JRF9ESVNDSCAqLworCisvKgorICogUjU4ICgweDNBKSAtIE1JQ0JJQVMKKyAqLworI2RlZmluZSBXTTg5OTRfTUlDRF9TQ1RIUl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMEMwICAvKiBNSUNEX1NDVEhSIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTk0X01JQ0RfU0NUSFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNiAgLyogTUlDRF9TQ1RIUiAtIFs3OjZdICovCisjZGVmaW5lIFdNODk5NF9NSUNEX1NDVEhSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIE1JQ0RfU0NUSFIgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5OTRfTUlDRF9USFJfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDM4ICAvKiBNSUNEX1RIUiAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9NSUNEX1RIUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIE1JQ0RfVEhSIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk0X01JQ0RfVEhSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogTUlDRF9USFIgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfTUlDRF9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBNSUNEX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTUlDRF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBNSUNEX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTUlDRF9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBNSUNEX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTUlDRF9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNEX0VOQSAqLworI2RlZmluZSBXTTg5OTRfTUlDQjJfTFZMICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUNCMl9MVkwgKi8KKyNkZWZpbmUgV004OTk0X01JQ0IyX0xWTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDQjJfTFZMICovCisjZGVmaW5lIFdNODk5NF9NSUNCMl9MVkxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQ0IyX0xWTCAqLworI2RlZmluZSBXTTg5OTRfTUlDQjJfTFZMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUNCMl9MVkwgKi8KKyNkZWZpbmUgV004OTk0X01JQ0IxX0xWTCAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogTUlDQjFfTFZMICovCisjZGVmaW5lIFdNODk5NF9NSUNCMV9MVkxfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIE1JQ0IxX0xWTCAqLworI2RlZmluZSBXTTg5OTRfTUlDQjFfTFZMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBNSUNCMV9MVkwgKi8KKyNkZWZpbmUgV004OTk0X01JQ0IxX0xWTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDQjFfTFZMICovCisKKy8qCisgKiBSNTkgKDB4M0IpIC0gTERPIDEKKyAqLworI2RlZmluZSBXTTg5OTRfTERPMV9WU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDBFICAvKiBMRE8xX1ZTRUwgLSBbMzoxXSAqLworI2RlZmluZSBXTTg5OTRfTERPMV9WU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8xX1ZTRUwgLSBbMzoxXSAqLworI2RlZmluZSBXTTg5OTRfTERPMV9WU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBMRE8xX1ZTRUwgLSBbMzoxXSAqLworI2RlZmluZSBXTTg5OTRfTERPMV9ESVNDSCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMRE8xX0RJU0NIICovCisjZGVmaW5lIFdNODk5NF9MRE8xX0RJU0NIX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExETzFfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X0xETzFfRElTQ0hfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTERPMV9ESVNDSCAqLworI2RlZmluZSBXTTg5OTRfTERPMV9ESVNDSF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8xX0RJU0NIICovCisKKy8qCisgKiBSNjAgKDB4M0MpIC0gTERPIDIKKyAqLworI2RlZmluZSBXTTg5OTRfTERPMl9WU0VMX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA2ICAvKiBMRE8yX1ZTRUwgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5OTRfTERPMl9WU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8yX1ZTRUwgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5OTRfTERPMl9WU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBMRE8yX1ZTRUwgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5OTRfTERPMl9ESVNDSCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBMRE8yX0RJU0NIICovCisjZGVmaW5lIFdNODk5NF9MRE8yX0RJU0NIX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIExETzJfRElTQ0ggKi8KKyNkZWZpbmUgV004OTk0X0xETzJfRElTQ0hfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogTERPMl9ESVNDSCAqLworI2RlZmluZSBXTTg5OTRfTERPMl9ESVNDSF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8yX0RJU0NIICovCisKKy8qCisgKiBSNzYgKDB4NEMpIC0gQ2hhcmdlIFB1bXAgKDEpCisgKi8KKyNkZWZpbmUgV004OTk0X0NQX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQ1BfRU5BICovCisjZGVmaW5lIFdNODk5NF9DUF9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIENQX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQ1BfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBDUF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0NQX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQ1BfRU5BICovCisKKy8qCisgKiBSODEgKDB4NTEpIC0gQ2xhc3MgVyAoMSkKKyAqLworI2RlZmluZSBXTTg5OTRfQ1BfRFlOX1NSQ19TRUxfTUFTSyAgICAgICAgICAgICAgMHgwMzAwICAvKiBDUF9EWU5fU1JDX1NFTCAtIFs5OjhdICovCisjZGVmaW5lIFdNODk5NF9DUF9EWU5fU1JDX1NFTF9TSElGVCAgICAgICAgICAgICAgICAgIDggIC8qIENQX0RZTl9TUkNfU0VMIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTk0X0NQX0RZTl9TUkNfU0VMX1dJRFRIICAgICAgICAgICAgICAgICAgMiAgLyogQ1BfRFlOX1NSQ19TRUwgLSBbOTo4XSAqLworI2RlZmluZSBXTTg5OTRfQ1BfRFlOX1BXUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBDUF9EWU5fUFdSICovCisjZGVmaW5lIFdNODk5NF9DUF9EWU5fUFdSX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIENQX0RZTl9QV1IgKi8KKyNkZWZpbmUgV004OTk0X0NQX0RZTl9QV1JfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQ1BfRFlOX1BXUiAqLworI2RlZmluZSBXTTg5OTRfQ1BfRFlOX1BXUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBDUF9EWU5fUFdSICovCisKKy8qCisgKiBSODQgKDB4NTQpIC0gREMgU2Vydm8gKDEpCisgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NJTkdMRV8xICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzEgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NJTkdMRV8xX01BU0sgICAgICAgICAgIDB4MjAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzEgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NJTkdMRV8xX1NISUZUICAgICAgICAgICAgICAxMyAgLyogRENTX1RSSUdfU0lOR0xFXzEgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NJTkdMRV8xX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0lOR0xFXzEgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NJTkdMRV8wICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzAgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NJTkdMRV8wX01BU0sgICAgICAgICAgIDB4MTAwMCAgLyogRENTX1RSSUdfU0lOR0xFXzAgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NJTkdMRV8wX1NISUZUICAgICAgICAgICAgICAxMiAgLyogRENTX1RSSUdfU0lOR0xFXzAgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NJTkdMRV8wX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0lOR0xFXzAgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NFUklFU18xICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogRENTX1RSSUdfU0VSSUVTXzEgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NFUklFU18xX01BU0sgICAgICAgICAgIDB4MDIwMCAgLyogRENTX1RSSUdfU0VSSUVTXzEgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NFUklFU18xX1NISUZUICAgICAgICAgICAgICAgOSAgLyogRENTX1RSSUdfU0VSSUVTXzEgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NFUklFU18xX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0VSSUVTXzEgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NFUklFU18wICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogRENTX1RSSUdfU0VSSUVTXzAgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NFUklFU18wX01BU0sgICAgICAgICAgIDB4MDEwMCAgLyogRENTX1RSSUdfU0VSSUVTXzAgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NFUklFU18wX1NISUZUICAgICAgICAgICAgICAgOCAgLyogRENTX1RSSUdfU0VSSUVTXzAgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NFUklFU18wX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU0VSSUVTXzAgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NUQVJUVVBfMSAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRENTX1RSSUdfU1RBUlRVUF8xICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TVEFSVFVQXzFfTUFTSyAgICAgICAgICAweDAwMjAgIC8qIERDU19UUklHX1NUQVJUVVBfMSAqLworI2RlZmluZSBXTTg5OTRfRENTX1RSSUdfU1RBUlRVUF8xX1NISUZUICAgICAgICAgICAgICA1ICAvKiBEQ1NfVFJJR19TVEFSVFVQXzEgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NUQVJUVVBfMV9XSURUSCAgICAgICAgICAgICAgMSAgLyogRENTX1RSSUdfU1RBUlRVUF8xICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TVEFSVFVQXzAgICAgICAgICAgICAgICAweDAwMTAgIC8qIERDU19UUklHX1NUQVJUVVBfMCAqLworI2RlZmluZSBXTTg5OTRfRENTX1RSSUdfU1RBUlRVUF8wX01BU0sgICAgICAgICAgMHgwMDEwICAvKiBEQ1NfVFJJR19TVEFSVFVQXzAgKi8KKyNkZWZpbmUgV004OTk0X0RDU19UUklHX1NUQVJUVVBfMF9TSElGVCAgICAgICAgICAgICAgNCAgLyogRENTX1RSSUdfU1RBUlRVUF8wICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVFJJR19TVEFSVFVQXzBfV0lEVEggICAgICAgICAgICAgIDEgIC8qIERDU19UUklHX1NUQVJUVVBfMCAqLworI2RlZmluZSBXTTg5OTRfRENTX1RSSUdfREFDX1dSXzEgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLworI2RlZmluZSBXTTg5OTRfRENTX1RSSUdfREFDX1dSXzFfTUFTSyAgICAgICAgICAgMHgwMDA4ICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLworI2RlZmluZSBXTTg5OTRfRENTX1RSSUdfREFDX1dSXzFfU0hJRlQgICAgICAgICAgICAgICAzICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLworI2RlZmluZSBXTTg5OTRfRENTX1RSSUdfREFDX1dSXzFfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMSAqLworI2RlZmluZSBXTTg5OTRfRENTX1RSSUdfREFDX1dSXzAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLworI2RlZmluZSBXTTg5OTRfRENTX1RSSUdfREFDX1dSXzBfTUFTSyAgICAgICAgICAgMHgwMDA0ICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLworI2RlZmluZSBXTTg5OTRfRENTX1RSSUdfREFDX1dSXzBfU0hJRlQgICAgICAgICAgICAgICAyICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLworI2RlZmluZSBXTTg5OTRfRENTX1RSSUdfREFDX1dSXzBfV0lEVEggICAgICAgICAgICAgICAxICAvKiBEQ1NfVFJJR19EQUNfV1JfMCAqLworI2RlZmluZSBXTTg5OTRfRENTX0VOQV9DSEFOXzEgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5OTRfRENTX0VOQV9DSEFOXzFfTUFTSyAgICAgICAgICAgICAgMHgwMDAyICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5OTRfRENTX0VOQV9DSEFOXzFfU0hJRlQgICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5OTRfRENTX0VOQV9DSEFOXzFfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMSAqLworI2RlZmluZSBXTTg5OTRfRENTX0VOQV9DSEFOXzAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworI2RlZmluZSBXTTg5OTRfRENTX0VOQV9DSEFOXzBfTUFTSyAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworI2RlZmluZSBXTTg5OTRfRENTX0VOQV9DSEFOXzBfU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworI2RlZmluZSBXTTg5OTRfRENTX0VOQV9DSEFOXzBfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRU5BX0NIQU5fMCAqLworCisvKgorICogUjg1ICgweDU1KSAtIERDIFNlcnZvICgyKQorICovCisjZGVmaW5lIFdNODk5NF9EQ1NfU0VSSUVTX05PXzAxX01BU0sgICAgICAgICAgICAweDBGRTAgIC8qIERDU19TRVJJRVNfTk9fMDEgLSBbMTE6NV0gKi8KKyNkZWZpbmUgV004OTk0X0RDU19TRVJJRVNfTk9fMDFfU0hJRlQgICAgICAgICAgICAgICAgNSAgLyogRENTX1NFUklFU19OT18wMSAtIFsxMTo1XSAqLworI2RlZmluZSBXTTg5OTRfRENTX1NFUklFU19OT18wMV9XSURUSCAgICAgICAgICAgICAgICA3ICAvKiBEQ1NfU0VSSUVTX05PXzAxIC0gWzExOjVdICovCisjZGVmaW5lIFdNODk5NF9EQ1NfVElNRVJfUEVSSU9EXzAxX01BU0sgICAgICAgICAweDAwMEYgIC8qIERDU19USU1FUl9QRVJJT0RfMDEgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTRfRENTX1RJTUVSX1BFUklPRF8wMV9TSElGVCAgICAgICAgICAgICAwICAvKiBEQ1NfVElNRVJfUEVSSU9EXzAxIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk0X0RDU19USU1FUl9QRVJJT0RfMDFfV0lEVEggICAgICAgICAgICAgNCAgLyogRENTX1RJTUVSX1BFUklPRF8wMSAtIFszOjBdICovCisKKy8qCisgKiBSODcgKDB4NTcpIC0gREMgU2Vydm8gKDQpCisgKi8KKyNkZWZpbmUgV004OTk0X0RDU19EQUNfV1JfVkFMXzFfTUFTSyAgICAgICAgICAgIDB4RkYwMCAgLyogRENTX0RBQ19XUl9WQUxfMSAtIFsxNTo4XSAqLworI2RlZmluZSBXTTg5OTRfRENTX0RBQ19XUl9WQUxfMV9TSElGVCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfREFDX1dSX1ZBTF8xIC0gWzE1OjhdICovCisjZGVmaW5lIFdNODk5NF9EQ1NfREFDX1dSX1ZBTF8xX1dJRFRIICAgICAgICAgICAgICAgIDggIC8qIERDU19EQUNfV1JfVkFMXzEgLSBbMTU6OF0gKi8KKyNkZWZpbmUgV004OTk0X0RDU19EQUNfV1JfVkFMXzBfTUFTSyAgICAgICAgICAgIDB4MDBGRiAgLyogRENTX0RBQ19XUl9WQUxfMCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9EQ1NfREFDX1dSX1ZBTF8wX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIERDU19EQUNfV1JfVkFMXzAgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfRENTX0RBQ19XUl9WQUxfMF9XSURUSCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfREFDX1dSX1ZBTF8wIC0gWzc6MF0gKi8KKworLyoKKyAqIFI4OCAoMHg1OCkgLSBEQyBTZXJ2byBSZWFkYmFjaworICovCisjZGVmaW5lIFdNODk5NF9EQ1NfQ0FMX0NPTVBMRVRFX01BU0sgICAgICAgICAgICAweDAzMDAgIC8qIERDU19DQUxfQ09NUExFVEUgLSBbOTo4XSAqLworI2RlZmluZSBXTTg5OTRfRENTX0NBTF9DT01QTEVURV9TSElGVCAgICAgICAgICAgICAgICA4ICAvKiBEQ1NfQ0FMX0NPTVBMRVRFIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTk0X0RDU19DQUxfQ09NUExFVEVfV0lEVEggICAgICAgICAgICAgICAgMiAgLyogRENTX0NBTF9DT01QTEVURSAtIFs5OjhdICovCisjZGVmaW5lIFdNODk5NF9EQ1NfREFDX1dSX0NPTVBMRVRFX01BU0sgICAgICAgICAweDAwMzAgIC8qIERDU19EQUNfV1JfQ09NUExFVEUgLSBbNTo0XSAqLworI2RlZmluZSBXTTg5OTRfRENTX0RBQ19XUl9DT01QTEVURV9TSElGVCAgICAgICAgICAgICA0ICAvKiBEQ1NfREFDX1dSX0NPTVBMRVRFIC0gWzU6NF0gKi8KKyNkZWZpbmUgV004OTk0X0RDU19EQUNfV1JfQ09NUExFVEVfV0lEVEggICAgICAgICAgICAgMiAgLyogRENTX0RBQ19XUl9DT01QTEVURSAtIFs1OjRdICovCisjZGVmaW5lIFdNODk5NF9EQ1NfU1RBUlRVUF9DT01QTEVURV9NQVNLICAgICAgICAweDAwMDMgIC8qIERDU19TVEFSVFVQX0NPTVBMRVRFIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk0X0RDU19TVEFSVFVQX0NPTVBMRVRFX1NISUZUICAgICAgICAgICAgMCAgLyogRENTX1NUQVJUVVBfQ09NUExFVEUgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTRfRENTX1NUQVJUVVBfQ09NUExFVEVfV0lEVEggICAgICAgICAgICAyICAvKiBEQ1NfU1RBUlRVUF9DT01QTEVURSAtIFsxOjBdICovCisKKy8qCisgKiBSOTYgKDB4NjApIC0gQW5hbG9ndWUgSFAgKDEpCisgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMUxfUk1WX1NIT1JUICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQxTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMUxfUk1WX1NIT1JUX01BU0sgICAgICAgICAgIDB4MDA4MCAgLyogSFBPVVQxTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMUxfUk1WX1NIT1JUX1NISUZUICAgICAgICAgICAgICAgNyAgLyogSFBPVVQxTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMUxfUk1WX1NIT1JUX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxTF9STVZfU0hPUlQgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMUxfT1VUUCAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogSFBPVVQxTF9PVVRQICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFMX09VVFBfTUFTSyAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEhQT1VUMUxfT1VUUCAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxTF9PVVRQX1NISUZUICAgICAgICAgICAgICAgICAgICA2ICAvKiBIUE9VVDFMX09VVFAgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMUxfT1VUUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSFBPVVQxTF9PVVRQICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFMX0RMWSAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEhQT1VUMUxfRExZICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFMX0RMWV9NQVNLICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEhQT1VUMUxfRExZICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFMX0RMWV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEhQT1VUMUxfRExZICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFMX0RMWV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMUxfRExZICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFSX1JNVl9TSE9SVCAgICAgICAgICAgICAgICAweDAwMDggIC8qIEhQT1VUMVJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFSX1JNVl9TSE9SVF9NQVNLICAgICAgICAgICAweDAwMDggIC8qIEhQT1VUMVJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFSX1JNVl9TSE9SVF9TSElGVCAgICAgICAgICAgICAgIDMgIC8qIEhQT1VUMVJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFSX1JNVl9TSE9SVF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMVJfUk1WX1NIT1JUICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFSX09VVFAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEhQT1VUMVJfT1VUUCAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9PVVRQX01BU0sgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBIUE9VVDFSX09VVFAgKi8KKyNkZWZpbmUgV004OTk0X0hQT1VUMVJfT1VUUF9TSElGVCAgICAgICAgICAgICAgICAgICAgMiAgLyogSFBPVVQxUl9PVVRQICovCisjZGVmaW5lIFdNODk5NF9IUE9VVDFSX09VVFBfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEhQT1VUMVJfT1VUUCAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9ETFkgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUE9VVDFSX0RMWSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9ETFlfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBIUE9VVDFSX0RMWSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9ETFlfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFSX0RMWSAqLworI2RlZmluZSBXTTg5OTRfSFBPVVQxUl9ETFlfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBIUE9VVDFSX0RMWSAqLworCisvKgorICogUjI1NiAoMHgxMDApIC0gQ2hpcCBSZXZpc2lvbgorICovCisjZGVmaW5lIFdNODk5NF9DSElQX1JFVl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIENISVBfUkVWIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk0X0NISVBfUkVWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogQ0hJUF9SRVYgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTRfQ0hJUF9SRVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBDSElQX1JFViAtIFszOjBdICovCisKKy8qCisgKiBSMjU3ICgweDEwMSkgLSBDb250cm9sIEludGVyZmFjZQorICovCisjZGVmaW5lIFdNODk5NF9TUElfQ09OVFJEICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIFNQSV9DT05UUkQgKi8KKyNkZWZpbmUgV004OTk0X1NQSV9DT05UUkRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogU1BJX0NPTlRSRCAqLworI2RlZmluZSBXTTg5OTRfU1BJX0NPTlRSRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA2ICAvKiBTUElfQ09OVFJEICovCisjZGVmaW5lIFdNODk5NF9TUElfQ09OVFJEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQSV9DT05UUkQgKi8KKyNkZWZpbmUgV004OTk0X1NQSV80V0lSRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogU1BJXzRXSVJFICovCisjZGVmaW5lIFdNODk5NF9TUElfNFdJUkVfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFNQSV80V0lSRSAqLworI2RlZmluZSBXTTg5OTRfU1BJXzRXSVJFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBTUElfNFdJUkUgKi8KKyNkZWZpbmUgV004OTk0X1NQSV80V0lSRV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BJXzRXSVJFICovCisjZGVmaW5lIFdNODk5NF9TUElfQ0ZHICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIFNQSV9DRkcgKi8KKyNkZWZpbmUgV004OTk0X1NQSV9DRkdfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogU1BJX0NGRyAqLworI2RlZmluZSBXTTg5OTRfU1BJX0NGR19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBTUElfQ0ZHICovCisjZGVmaW5lIFdNODk5NF9TUElfQ0ZHX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQSV9DRkcgKi8KKyNkZWZpbmUgV004OTk0X0FVVE9fSU5DICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQVVUT19JTkMgKi8KKyNkZWZpbmUgV004OTk0X0FVVE9fSU5DX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQVVUT19JTkMgKi8KKyNkZWZpbmUgV004OTk0X0FVVE9fSU5DX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQVVUT19JTkMgKi8KKyNkZWZpbmUgV004OTk0X0FVVE9fSU5DX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogQVVUT19JTkMgKi8KKworLyoKKyAqIFIyNzIgKDB4MTEwKSAtIFdyaXRlIFNlcXVlbmNlciBDdHJsICgxKQorICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIFdTRVFfRU5BICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIFdTRVFfRU5BICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIFdTRVFfRU5BICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfRU5BICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0FCT1JUICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIFdTRVFfQUJPUlQgKi8KKyNkZWZpbmUgV004OTk0X1dTRVFfQUJPUlRfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogV1NFUV9BQk9SVCAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9BQk9SVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBXU0VRX0FCT1JUICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0FCT1JUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfQUJPUlQgKi8KKyNkZWZpbmUgV004OTk0X1dTRVFfU1RBUlQgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9TVEFSVCAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9TVEFSVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBXU0VRX1NUQVJUICovCisjZGVmaW5lIFdNODk5NF9XU0VRX1NUQVJUX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIFdTRVFfU1RBUlQgKi8KKyNkZWZpbmUgV004OTk0X1dTRVFfU1RBUlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9TVEFSVCAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9TVEFSVF9JTkRFWF9NQVNLICAgICAgICAgICAgMHgwMDdGICAvKiBXU0VRX1NUQVJUX0lOREVYIC0gWzY6MF0gKi8KKyNkZWZpbmUgV004OTk0X1dTRVFfU1RBUlRfSU5ERVhfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogV1NFUV9TVEFSVF9JTkRFWCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk5NF9XU0VRX1NUQVJUX0lOREVYX1dJRFRIICAgICAgICAgICAgICAgIDcgIC8qIFdTRVFfU1RBUlRfSU5ERVggLSBbNjowXSAqLworCisvKgorICogUjI3MyAoMHgxMTEpIC0gV3JpdGUgU2VxdWVuY2VyIEN0cmwgKDIpCisgKi8KKyNkZWZpbmUgV004OTk0X1dTRVFfQlVTWSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogV1NFUV9CVVNZICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0JVU1lfTUFTSyAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFdTRVFfQlVTWSAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9CVVNZX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBXU0VRX0JVU1kgKi8KKyNkZWZpbmUgV004OTk0X1dTRVFfQlVTWV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogV1NFUV9CVVNZICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0NVUlJFTlRfSU5ERVhfTUFTSyAgICAgICAgICAweDAwN0YgIC8qIFdTRVFfQ1VSUkVOVF9JTkRFWCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0NVUlJFTlRfSU5ERVhfU0hJRlQgICAgICAgICAgICAgIDAgIC8qIFdTRVFfQ1VSUkVOVF9JTkRFWCAtIFs2OjBdICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0NVUlJFTlRfSU5ERVhfV0lEVEggICAgICAgICAgICAgIDcgIC8qIFdTRVFfQ1VSUkVOVF9JTkRFWCAtIFs2OjBdICovCisKKy8qCisgKiBSNTEyICgweDIwMCkgLSBBSUYxIENsb2NraW5nICgxKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxQ0xLX1NSQ19NQVNLICAgICAgICAgICAgICAgICAweDAwMTggIC8qIEFJRjFDTEtfU1JDIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFDTEtfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgMyAgLyogQUlGMUNMS19TUkMgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUNMS19TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUYxQ0xLX1NSQyAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5NF9BSUYxQ0xLX0lOViAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjFDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjFDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxQ0xLX0RJViAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFDTEtfRElWICovCisjZGVmaW5lIFdNODk5NF9BSUYxQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFDTEtfRElWICovCisjZGVmaW5lIFdNODk5NF9BSUYxQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFDTEtfRElWICovCisjZGVmaW5lIFdNODk5NF9BSUYxQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFDTEtfRElWICovCisjZGVmaW5lIFdNODk5NF9BSUYxQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxQ0xLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFDTEtfRU5BICovCisKKy8qCisgKiBSNTEzICgweDIwMSkgLSBBSUYxIENsb2NraW5nICgyKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDX0RJVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMzggIC8qIEFJRjFEQUNfRElWIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgMyAgLyogQUlGMURBQ19ESVYgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAzICAvKiBBSUYxREFDX0RJViAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDX0RJVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIEFJRjFBRENfRElWIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMUFEQ19ESVYgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAzICAvKiBBSUYxQURDX0RJViAtIFsyOjBdICovCisKKy8qCisgKiBSNTE2ICgweDIwNCkgLSBBSUYyIENsb2NraW5nICgxKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYyQ0xLX1NSQ19NQVNLICAgICAgICAgICAgICAgICAweDAwMTggIC8qIEFJRjJDTEtfU1JDIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJDTEtfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgICAgMyAgLyogQUlGMkNMS19TUkMgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkNMS19TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUYyQ0xLX1NSQyAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5NF9BSUYyQ0xLX0lOViAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjJDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYyQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjJDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYyQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFJRjJDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYyQ0xLX0lOVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYyQ0xLX0RJViAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjJDTEtfRElWICovCisjZGVmaW5lIFdNODk5NF9BSUYyQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjJDTEtfRElWICovCisjZGVmaW5lIFdNODk5NF9BSUYyQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJDTEtfRElWICovCisjZGVmaW5lIFdNODk5NF9BSUYyQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJDTEtfRElWICovCisjZGVmaW5lIFdNODk5NF9BSUYyQ0xLX0VOQSAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyQ0xLX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyQ0xLX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJDTEtfRU5BICovCisKKy8qCisgKiBSNTE3ICgweDIwNSkgLSBBSUYyIENsb2NraW5nICgyKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0RJVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMzggIC8qIEFJRjJEQUNfRElWIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgMyAgLyogQUlGMkRBQ19ESVYgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAzICAvKiBBSUYyREFDX0RJViAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX0RJVl9NQVNLICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIEFJRjJBRENfRElWIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMkFEQ19ESVYgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAzICAvKiBBSUYyQURDX0RJViAtIFsyOjBdICovCisKKy8qCisgKiBSNTIwICgweDIwOCkgLSBDbG9ja2luZyAoMSkKKyAqLworI2RlZmluZSBXTTg5OTRfVE9DTEtfRU5BICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBUT0NMS19FTkEgKi8KKyNkZWZpbmUgV004OTk0X1RPQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogVE9DTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9UT0NMS19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIFRPQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTRfVE9DTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBUT0NMS19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEU1BDTEtfRU5BICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogQUlGMURTUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEU1BDTEtfRU5BX01BU0sgICAgICAgICAgICAgIDB4MDAwOCAgLyogQUlGMURTUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEU1BDTEtfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgMyAgLyogQUlGMURTUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEU1BDTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURTUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEU1BDTEtfRU5BICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMkRTUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEU1BDTEtfRU5BX01BU0sgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMkRTUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEU1BDTEtfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgMiAgLyogQUlGMkRTUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEU1BDTEtfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkRTUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NZU0RTUENMS19FTkEgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogU1lTRFNQQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTRfU1lTRFNQQ0xLX0VOQV9NQVNLICAgICAgICAgICAgICAgMHgwMDAyICAvKiBTWVNEU1BDTEtfRU5BICovCisjZGVmaW5lIFdNODk5NF9TWVNEU1BDTEtfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgIDEgIC8qIFNZU0RTUENMS19FTkEgKi8KKyNkZWZpbmUgV004OTk0X1NZU0RTUENMS19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogU1lTRFNQQ0xLX0VOQSAqLworI2RlZmluZSBXTTg5OTRfU1lTQ0xLX1NSQyAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBTWVNDTEtfU1JDICovCisjZGVmaW5lIFdNODk5NF9TWVNDTEtfU1JDX01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFNZU0NMS19TUkMgKi8KKyNkZWZpbmUgV004OTk0X1NZU0NMS19TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogU1lTQ0xLX1NSQyAqLworI2RlZmluZSBXTTg5OTRfU1lTQ0xLX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTWVNDTEtfU1JDICovCisKKy8qCisgKiBSNTIxICgweDIwOSkgLSBDbG9ja2luZyAoMikKKyAqLworI2RlZmluZSBXTTg5OTRfVE9DTEtfRElWX01BU0sgICAgICAgICAgICAgICAgICAgMHgwNzAwICAvKiBUT0NMS19ESVYgLSBbMTA6OF0gKi8KKyNkZWZpbmUgV004OTk0X1RPQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogVE9DTEtfRElWIC0gWzEwOjhdICovCisjZGVmaW5lIFdNODk5NF9UT0NMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFRPQ0xLX0RJViAtIFsxMDo4XSAqLworI2RlZmluZSBXTTg5OTRfREJDTEtfRElWX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDcwICAvKiBEQkNMS19ESVYgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5OTRfREJDTEtfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBEQkNMS19ESVYgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5OTRfREJDTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBEQkNMS19ESVYgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5OTRfT1BDTEtfRElWX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBPUENMS19ESVYgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfT1BDTEtfRElWX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBPUENMS19ESVYgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfT1BDTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBPUENMS19ESVYgLSBbMjowXSAqLworCisvKgorICogUjUyOCAoMHgyMTApIC0gQUlGMSBSYXRlCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfU1JfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDBGMCAgLyogQUlGMV9TUiAtIFs3OjRdICovCisjZGVmaW5lIFdNODk5NF9BSUYxX1NSX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEFJRjFfU1IgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9TUl9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBBSUYxX1NSIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFDTEtfUkFURV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwRiAgLyogQUlGMUNMS19SQVRFIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFDTEtfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMUNMS19SQVRFIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFDTEtfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgNCAgLyogQUlGMUNMS19SQVRFIC0gWzM6MF0gKi8KKworLyoKKyAqIFI1MjkgKDB4MjExKSAtIEFJRjIgUmF0ZQorICovCisjZGVmaW5lIFdNODk5NF9BSUYyX1NSX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwRjAgIC8qIEFJRjJfU1IgLSBbNzo0XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9TUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBBSUYyX1NSIC0gWzc6NF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfU1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogQUlGMl9TUiAtIFs3OjRdICovCisjZGVmaW5lIFdNODk5NF9BSUYyQ0xLX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAweDAwMEYgIC8qIEFJRjJDTEtfUkFURSAtIFszOjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyQ0xLX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJDTEtfUkFURSAtIFszOjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyQ0xLX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgIDQgIC8qIEFJRjJDTEtfUkFURSAtIFszOjBdICovCisKKy8qCisgKiBSNTMwICgweDIxMikgLSBSYXRlIFN0YXR1cworICovCisjZGVmaW5lIFdNODk5NF9TUl9FUlJPUl9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMEYgIC8qIFNSX0VSUk9SIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk0X1NSX0VSUk9SX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogU1JfRVJST1IgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTRfU1JfRVJST1JfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICA0ICAvKiBTUl9FUlJPUiAtIFszOjBdICovCisKKy8qCisgKiBSNTQ0ICgweDIyMCkgLSBGTEwxIENvbnRyb2wgKDEpCisgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfRlJBQyAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogRkxMMV9GUkFDICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0ZSQUNfTUFTSyAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEZMTDFfRlJBQyAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9GUkFDX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBGTEwxX0ZSQUMgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfRlJBQ19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMMV9GUkFDICovCisjZGVmaW5lIFdNODk5NF9GTEwxX09TQ19FTkEgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEZMTDFfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9PU0NfRU5BX01BU0sgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBGTEwxX09TQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfT1NDX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMMV9PU0NfRU5BICovCisjZGVmaW5lIFdNODk5NF9GTEwxX09TQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTDFfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBGTEwxX0VOQSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9FTkFfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBGTEwxX0VOQSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTEwxX0VOQSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9FTkFfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBGTEwxX0VOQSAqLworCisvKgorICogUjU0NSAoMHgyMjEpIC0gRkxMMSBDb250cm9sICgyKQorICovCisjZGVmaW5lIFdNODk5NF9GTEwxX09VVERJVl9NQVNLICAgICAgICAgICAgICAgICAweDNGMDAgIC8qIEZMTDFfT1VURElWIC0gWzEzOjhdICovCisjZGVmaW5lIFdNODk5NF9GTEwxX09VVERJVl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIEZMTDFfT1VURElWIC0gWzEzOjhdICovCisjZGVmaW5lIFdNODk5NF9GTEwxX09VVERJVl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDYgIC8qIEZMTDFfT1VURElWIC0gWzEzOjhdICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0NUUkxfUkFURV9NQVNLICAgICAgICAgICAgICAweDAwNzAgIC8qIEZMTDFfQ1RSTF9SQVRFIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfQ1RSTF9SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgNCAgLyogRkxMMV9DVFJMX1JBVEUgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9DVFJMX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAzICAvKiBGTEwxX0NUUkxfUkFURSAtIFs2OjRdICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0ZSQVRJT19NQVNLICAgICAgICAgICAgICAgICAweDAwMDcgIC8qIEZMTDFfRlJBVElPIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfRlJBVElPX1NISUZUICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMMV9GUkFUSU8gLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9GUkFUSU9fV0lEVEggICAgICAgICAgICAgICAgICAgICAzICAvKiBGTEwxX0ZSQVRJTyAtIFsyOjBdICovCisKKy8qCisgKiBSNTQ2ICgweDIyMikgLSBGTEwxIENvbnRyb2wgKDMpCisgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfS19NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4RkZGRiAgLyogRkxMMV9LIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0tfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTDFfSyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9LX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDE2ICAvKiBGTEwxX0sgLSBbMTU6MF0gKi8KKworLyoKKyAqIFI1NDcgKDB4MjIzKSAtIEZMTDEgQ29udHJvbCAoNCkKKyAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9OX01BU0sgICAgICAgICAgICAgICAgICAgICAgMHg3RkUwICAvKiBGTEwxX04gLSBbMTQ6NV0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfTl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogRkxMMV9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODk5NF9GTEwxX05fV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMTAgIC8qIEZMTDFfTiAtIFsxNDo1XSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9MT09QX0dBSU5fTUFTSyAgICAgICAgICAgICAgMHgwMDBGICAvKiBGTEwxX0xPT1BfR0FJTiAtIFszOjBdICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0xPT1BfR0FJTl9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTDFfTE9PUF9HQUlOIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfTE9PUF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgICAgNCAgLyogRkxMMV9MT09QX0dBSU4gLSBbMzowXSAqLworCisvKgorICogUjU0OCAoMHgyMjQpIC0gRkxMMSBDb250cm9sICg1KQorICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0ZSQ19OQ09fVkFMX01BU0sgICAgICAgICAgICAweDFGODAgIC8qIEZMTDFfRlJDX05DT19WQUwgLSBbMTI6N10gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfRlJDX05DT19WQUxfU0hJRlQgICAgICAgICAgICAgICAgNyAgLyogRkxMMV9GUkNfTkNPX1ZBTCAtIFsxMjo3XSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9GUkNfTkNPX1ZBTF9XSURUSCAgICAgICAgICAgICAgICA2ICAvKiBGTEwxX0ZSQ19OQ09fVkFMIC0gWzEyOjddICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0ZSQ19OQ08gICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEZMTDFfRlJDX05DTyAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9GUkNfTkNPX01BU0sgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBGTEwxX0ZSQ19OQ08gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfRlJDX05DT19TSElGVCAgICAgICAgICAgICAgICAgICAgNiAgLyogRkxMMV9GUkNfTkNPICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0ZSQ19OQ09fV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTDFfRlJDX05DTyAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9SRUZDTEtfRElWX01BU0sgICAgICAgICAgICAgMHgwMDE4ICAvKiBGTEwxX1JFRkNMS19ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9SRUZDTEtfRElWX1NISUZUICAgICAgICAgICAgICAgICAzICAvKiBGTEwxX1JFRkNMS19ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9SRUZDTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAyICAvKiBGTEwxX1JFRkNMS19ESVYgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9SRUZDTEtfU1JDX01BU0sgICAgICAgICAgICAgMHgwMDAzICAvKiBGTEwxX1JFRkNMS19TUkMgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9SRUZDTEtfU1JDX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBGTEwxX1JFRkNMS19TUkMgLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9SRUZDTEtfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAyICAvKiBGTEwxX1JFRkNMS19TUkMgLSBbMTowXSAqLworCisvKgorICogUjU3NiAoMHgyNDApIC0gRkxMMiBDb250cm9sICgxKQorICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0ZSQUMgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEZMTDJfRlJBQyAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9GUkFDX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBGTEwyX0ZSQUMgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfRlJBQ19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogRkxMMl9GUkFDICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0ZSQUNfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTDJfRlJBQyAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9PU0NfRU5BICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBGTEwyX09TQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfT1NDX0VOQV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogRkxMMl9PU0NfRU5BICovCisjZGVmaW5lIFdNODk5NF9GTEwyX09TQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTDJfT1NDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9PU0NfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBGTEwyX09TQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfRU5BICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRkxMMl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfRU5BX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogRkxMMl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogRkxMMl9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogRkxMMl9FTkEgKi8KKworLyoKKyAqIFI1NzcgKDB4MjQxKSAtIEZMTDIgQ29udHJvbCAoMikKKyAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9PVVRESVZfTUFTSyAgICAgICAgICAgICAgICAgMHgzRjAwICAvKiBGTEwyX09VVERJViAtIFsxMzo4XSAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9PVVRESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4ICAvKiBGTEwyX09VVERJViAtIFsxMzo4XSAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9PVVRESVZfV0lEVEggICAgICAgICAgICAgICAgICAgICA2ICAvKiBGTEwyX09VVERJViAtIFsxMzo4XSAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9DVFJMX1JBVEVfTUFTSyAgICAgICAgICAgICAgMHgwMDcwICAvKiBGTEwyX0NUUkxfUkFURSAtIFs2OjRdICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0NUUkxfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgIDQgIC8qIEZMTDJfQ1RSTF9SQVRFIC0gWzY6NF0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfQ1RSTF9SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgMyAgLyogRkxMMl9DVFJMX1JBVEUgLSBbNjo0XSAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9GUkFUSU9fTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA3ICAvKiBGTEwyX0ZSQVRJTyAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0ZSQVRJT19TSElGVCAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEZMTDJfRlJBVElPIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfRlJBVElPX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMyAgLyogRkxMMl9GUkFUSU8gLSBbMjowXSAqLworCisvKgorICogUjU3OCAoMHgyNDIpIC0gRkxMMiBDb250cm9sICgzKQorICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0tfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweEZGRkYgIC8qIEZMTDJfSyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9LX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBGTEwyX0sgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfS19XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxNiAgLyogRkxMMl9LIC0gWzE1OjBdICovCisKKy8qCisgKiBSNTc5ICgweDI0MykgLSBGTEwyIENvbnRyb2wgKDQpCisgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfTl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4N0ZFMCAgLyogRkxMMl9OIC0gWzE0OjVdICovCisjZGVmaW5lIFdNODk5NF9GTEwyX05fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEZMTDJfTiAtIFsxNDo1XSAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9OX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEwICAvKiBGTEwyX04gLSBbMTQ6NV0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfTE9PUF9HQUlOX01BU0sgICAgICAgICAgICAgIDB4MDAwRiAgLyogRkxMMl9MT09QX0dBSU4gLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9MT09QX0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgICAwICAvKiBGTEwyX0xPT1BfR0FJTiAtIFszOjBdICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0xPT1BfR0FJTl9XSURUSCAgICAgICAgICAgICAgICAgIDQgIC8qIEZMTDJfTE9PUF9HQUlOIC0gWzM6MF0gKi8KKworLyoKKyAqIFI1ODAgKDB4MjQ0KSAtIEZMTDIgQ29udHJvbCAoNSkKKyAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9GUkNfTkNPX1ZBTF9NQVNLICAgICAgICAgICAgMHgxRjgwICAvKiBGTEwyX0ZSQ19OQ09fVkFMIC0gWzEyOjddICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0ZSQ19OQ09fVkFMX1NISUZUICAgICAgICAgICAgICAgIDcgIC8qIEZMTDJfRlJDX05DT19WQUwgLSBbMTI6N10gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfRlJDX05DT19WQUxfV0lEVEggICAgICAgICAgICAgICAgNiAgLyogRkxMMl9GUkNfTkNPX1ZBTCAtIFsxMjo3XSAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9GUkNfTkNPICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBGTEwyX0ZSQ19OQ08gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfRlJDX05DT19NQVNLICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogRkxMMl9GUkNfTkNPICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0ZSQ19OQ09fU0hJRlQgICAgICAgICAgICAgICAgICAgIDYgIC8qIEZMTDJfRlJDX05DTyAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9GUkNfTkNPX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBGTEwyX0ZSQ19OQ08gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfUkVGQ0xLX0RJVl9NQVNLICAgICAgICAgICAgIDB4MDAxOCAgLyogRkxMMl9SRUZDTEtfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfUkVGQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgMyAgLyogRkxMMl9SRUZDTEtfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfUkVGQ0xLX0RJVl9XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogRkxMMl9SRUZDTEtfRElWIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfUkVGQ0xLX1NSQ19NQVNLICAgICAgICAgICAgIDB4MDAwMyAgLyogRkxMMl9SRUZDTEtfU1JDIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfUkVGQ0xLX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogRkxMMl9SRUZDTEtfU1JDIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfUkVGQ0xLX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogRkxMMl9SRUZDTEtfU1JDIC0gWzE6MF0gKi8KKworLyoKKyAqIFI3NjggKDB4MzAwKSAtIEFJRjEgQ29udHJvbCAoMSkKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ0xfU1JDICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYxQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENMX1NSQ19NQVNLICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMUFEQ0xfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDTF9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgMTUgIC8qIEFJRjFBRENMX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ0xfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENSX1NSQyAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQUlGMUFEQ1JfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDUl9TUkNfTUFTSyAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEFJRjFBRENSX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ1JfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgIDE0ICAvKiBBSUYxQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENSX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQ1JfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDX1RETSAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRjFBRENfVERNICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDX1RETV9NQVNLICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRjFBRENfVERNICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDX1RETV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTMgIC8qIEFJRjFBRENfVERNICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDX1RETV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBRENfVERNICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0JDTEtfSU5WICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfQkNMS19JTlZfTUFTSyAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMV9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9CQ0xLX0lOVl9TSElGVCAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0JDTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfTFJDTEtfSU5WICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGMV9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfTFJDTEtfSU5WX01BU0sgICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGMV9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfTFJDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgICAgNyAgLyogQUlGMV9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfTFJDTEtfSU5WX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMV9MUkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfV0xfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDA2MCAgLyogQUlGMV9XTCAtIFs2OjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYxX1dMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEFJRjFfV0wgLSBbNjo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9XTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUYxX1dMIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfRk1UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxOCAgLyogQUlGMV9GTVQgLSBbNDozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9GTVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAzICAvKiBBSUYxX0ZNVCAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0ZNVF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFfRk1UIC0gWzQ6M10gKi8KKworLyoKKyAqIFI3NjkgKDB4MzAxKSAtIEFJRjEgQ29udHJvbCAoMikKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ0xfU1JDICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYxREFDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNMX1NSQ19NQVNLICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMURBQ0xfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDTF9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgMTUgIC8qIEFJRjFEQUNMX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ0xfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxREFDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNSX1NSQyAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQUlGMURBQ1JfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDUl9TUkNfTUFTSyAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEFJRjFEQUNSX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ1JfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgIDE0ICAvKiBBSUYxREFDUl9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNSX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQ1JfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDX0JPT1NUX01BU0sgICAgICAgICAgICAgICAweDBDMDAgIC8qIEFJRjFEQUNfQk9PU1QgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDX0JPT1NUX1NISUZUICAgICAgICAgICAgICAgICAgMTAgIC8qIEFJRjFEQUNfQk9PU1QgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDX0JPT1NUX1dJRFRIICAgICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFEQUNfQk9PU1QgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxX01PTk8gICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFfTU9OTyAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9NT05PX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxX01PTk8gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfTU9OT19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMV9NT05PICovCisjZGVmaW5lIFdNODk5NF9BSUYxX01PTk9fV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFfTU9OTyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ19DT01QICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBSUYxREFDX0NPTVAgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNfQ09NUF9NQVNLICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQUlGMURBQ19DT01QICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDX0NPTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgIDQgIC8qIEFJRjFEQUNfQ09NUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ19DT01QX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxREFDX0NPTVAgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNfQ09NUE1PREUgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogQUlGMURBQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ19DT01QTU9ERV9NQVNLICAgICAgICAgICAgMHgwMDA4ICAvKiBBSUYxREFDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDX0NPTVBNT0RFX1NISUZUICAgICAgICAgICAgICAgIDMgIC8qIEFJRjFEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNfQ09NUE1PREVfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ19DT01QICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYxQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENfQ09NUF9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMUFEQ19DT01QICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDX0NPTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFBRENfQ09NUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ19DT01QX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENfQ09NUE1PREUgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMUFEQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ19DT01QTU9ERV9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDX0NPTVBNT0RFX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBRENfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENfQ09NUE1PREVfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9MT09QQkFDSyAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxX0xPT1BCQUNLICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0xPT1BCQUNLX01BU0sgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFfTE9PUEJBQ0sgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfTE9PUEJBQ0tfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMV9MT09QQkFDSyAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9MT09QQkFDS19XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxX0xPT1BCQUNLICovCisKKy8qCisgKiBSNzcwICgweDMwMikgLSBBSUYxIE1hc3Rlci9TbGF2ZQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxX1RSSSAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjFfVFJJICovCisjZGVmaW5lIFdNODk5NF9BSUYxX1RSSV9NQVNLICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjFfVFJJICovCisjZGVmaW5lIFdNODk5NF9BSUYxX1RSSV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMTUgIC8qIEFJRjFfVFJJICovCisjZGVmaW5lIFdNODk5NF9BSUYxX1RSSV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFfVFJJICovCisjZGVmaW5lIFdNODk5NF9BSUYxX01TVFIgICAgICAgICAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEFJRjFfTVNUUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9NU1RSX01BU0sgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBBSUYxX01TVFIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfTVNUUl9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxNCAgLyogQUlGMV9NU1RSICovCisjZGVmaW5lIFdNODk5NF9BSUYxX01TVFJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFfTVNUUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9DTEtfRlJDICAgICAgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBBSUYxX0NMS19GUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfQ0xLX0ZSQ19NQVNLICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUlGMV9DTEtfRlJDICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0NMS19GUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgMTMgIC8qIEFJRjFfQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9DTEtfRlJDX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxX0NMS19GUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfTFJDTEtfRlJDICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogQUlGMV9MUkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfTFJDTEtfRlJDX01BU0sgICAgICAgICAgICAgIDB4MTAwMCAgLyogQUlGMV9MUkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfTFJDTEtfRlJDX1NISUZUICAgICAgICAgICAgICAgICAxMiAgLyogQUlGMV9MUkNMS19GUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfTFJDTEtfRlJDX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMV9MUkNMS19GUkMgKi8KKworLyoKKyAqIFI3NzEgKDB4MzAzKSAtIEFJRjEgQkNMSworICovCisjZGVmaW5lIFdNODk5NF9BSUYxX0JDTEtfRElWX01BU0sgICAgICAgICAgICAgICAweDAxRjAgIC8qIEFJRjFfQkNMS19ESVYgLSBbODo0XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMV9CQ0xLX0RJVl9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBBSUYxX0JDTEtfRElWIC0gWzg6NF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFfQkNMS19ESVZfV0lEVEggICAgICAgICAgICAgICAgICAgNSAgLyogQUlGMV9CQ0xLX0RJViAtIFs4OjRdICovCisKKy8qCisgKiBSNzcyICgweDMwNCkgLSBBSUYxQURDIExSQ0xLCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENfTFJDTEtfRElSICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQUlGMUFEQ19MUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENfTFJDTEtfRElSX01BU0sgICAgICAgICAgIDB4MDgwMCAgLyogQUlGMUFEQ19MUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENfTFJDTEtfRElSX1NISUZUICAgICAgICAgICAgICAxMSAgLyogQUlGMUFEQ19MUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENfTFJDTEtfRElSX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQ19MUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENfUkFURV9NQVNLICAgICAgICAgICAgICAgIDB4MDdGRiAgLyogQUlGMUFEQ19SQVRFIC0gWzEwOjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFBRENfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ19SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgIDExICAvKiBBSUYxQURDX1JBVEUgLSBbMTA6MF0gKi8KKworLyoKKyAqIFI3NzMgKDB4MzA1KSAtIEFJRjFEQUMgTFJDTEsKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ19MUkNMS19ESVIgICAgICAgICAgICAgICAgMHgwODAwICAvKiBBSUYxREFDX0xSQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ19MUkNMS19ESVJfTUFTSyAgICAgICAgICAgMHgwODAwICAvKiBBSUYxREFDX0xSQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ19MUkNMS19ESVJfU0hJRlQgICAgICAgICAgICAgIDExICAvKiBBSUYxREFDX0xSQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ19MUkNMS19ESVJfV0lEVEggICAgICAgICAgICAgICAxICAvKiBBSUYxREFDX0xSQ0xLX0RJUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ19SQVRFX01BU0sgICAgICAgICAgICAgICAgMHgwN0ZGICAvKiBBSUYxREFDX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNfUkFURV9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQ19SQVRFIC0gWzEwOjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDX1JBVEVfV0lEVEggICAgICAgICAgICAgICAgICAgMTEgIC8qIEFJRjFEQUNfUkFURSAtIFsxMDowXSAqLworCisvKgorICogUjc3NCAoMHgzMDYpIC0gQUlGMURBQyBEYXRhCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNMX0RBVF9JTlYgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMURBQ0xfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ0xfREFUX0lOVl9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxREFDTF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDTF9EQVRfSU5WX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUNMX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNMX0RBVF9JTlZfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQ0xfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ1JfREFUX0lOViAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxREFDUl9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDUl9EQVRfSU5WX01BU0sgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFEQUNSX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUNSX0RBVF9JTlZfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQ1JfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQ1JfREFUX0lOVl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxREFDUl9EQVRfSU5WICovCisKKy8qCisgKiBSNzc1ICgweDMwNykgLSBBSUYxQURDIERhdGEKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ0xfREFUX0lOViAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxQURDTF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDTF9EQVRfSU5WX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFBRENMX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENMX0RBVF9JTlZfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQ0xfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ0xfREFUX0lOVl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYxQURDTF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDUl9EQVRfSU5WICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFBRENSX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBRENSX0RBVF9JTlZfTUFTSyAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMUFEQ1JfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQ1JfREFUX0lOVl9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxQURDUl9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDUl9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBRENSX0RBVF9JTlYgKi8KKworLyoKKyAqIFI3ODQgKDB4MzEwKSAtIEFJRjIgQ29udHJvbCAoMSkKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ0xfU1JDICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYyQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENMX1NSQ19NQVNLICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogQUlGMkFEQ0xfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDTF9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgMTUgIC8qIEFJRjJBRENMX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ0xfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyQURDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENSX1NSQyAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQUlGMkFEQ1JfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDUl9TUkNfTUFTSyAgICAgICAgICAgICAgICAweDQwMDAgIC8qIEFJRjJBRENSX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ1JfU1JDX1NISUZUICAgICAgICAgICAgICAgICAgIDE0ICAvKiBBSUYyQURDUl9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENSX1NSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkFEQ1JfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX1RETSAgICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRjJBRENfVERNICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX1RETV9NQVNLICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRjJBRENfVERNICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX1RETV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTMgIC8qIEFJRjJBRENfVERNICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX1RETV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJBRENfVERNICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX1RETV9DSEFOICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEFJRjJBRENfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfVERNX0NIQU5fTUFTSyAgICAgICAgICAgIDB4MTAwMCAgLyogQUlGMkFEQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19URE1fQ0hBTl9TSElGVCAgICAgICAgICAgICAgIDEyICAvKiBBSUYyQURDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX1RETV9DSEFOX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJBRENfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfQkNMS19JTlYgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMl9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9CQ0xLX0lOVl9NQVNLICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYyX0JDTEtfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0JDTEtfSU5WX1NISUZUICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjJfQkNMS19JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfQkNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMl9CQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9MUkNMS19JTlYgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBBSUYyX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9MUkNMS19JTlZfTUFTSyAgICAgICAgICAgICAgMHgwMDgwICAvKiBBSUYyX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9MUkNMS19JTlZfU0hJRlQgICAgICAgICAgICAgICAgICA3ICAvKiBBSUYyX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9MUkNMS19JTlZfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBBSUYyX0xSQ0xLX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9XTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDYwICAvKiBBSUYyX1dMIC0gWzY6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfV0xfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogQUlGMl9XTCAtIFs2OjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYyX1dMX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDIgIC8qIEFJRjJfV0wgLSBbNjo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9GTVRfTUFTSyAgICAgICAgICAgICAgICAgICAgMHgwMDE4ICAvKiBBSUYyX0ZNVCAtIFs0OjNdICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0ZNVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIEFJRjJfRk1UIC0gWzQ6M10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfRk1UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogQUlGMl9GTVQgLSBbNDozXSAqLworCisvKgorICogUjc4NSAoMHgzMTEpIC0gQUlGMiBDb250cm9sICgyKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9TUkMgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjJEQUNMX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfU1JDX01BU0sgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYyREFDTF9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNMX1NSQ19TSElGVCAgICAgICAgICAgICAgICAgICAxNSAgLyogQUlGMkRBQ0xfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9TUkNfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNMX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfU1JDICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBBSUYyREFDUl9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX1NSQ19NQVNLICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQUlGMkRBQ1JfU1JDICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDUl9TUkNfU0hJRlQgICAgICAgICAgICAgICAgICAgMTQgIC8qIEFJRjJEQUNSX1NSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfU1JDX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyREFDUl9TUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfVERNICAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUlGMkRBQ19URE0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfVERNX01BU0sgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUlGMkRBQ19URE0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfVERNX1NISUZUICAgICAgICAgICAgICAgICAgICAxMyAgLyogQUlGMkRBQ19URE0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfVERNX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkRBQ19URE0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfVERNX0NIQU4gICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogQUlGMkRBQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19URE1fQ0hBTl9NQVNLICAgICAgICAgICAgMHgxMDAwICAvKiBBSUYyREFDX1RETV9DSEFOICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX1RETV9DSEFOX1NISUZUICAgICAgICAgICAgICAgMTIgIC8qIEFJRjJEQUNfVERNX0NIQU4gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfVERNX0NIQU5fV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMkRBQ19URE1fQ0hBTiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19CT09TVF9NQVNLICAgICAgICAgICAgICAgMHgwQzAwICAvKiBBSUYyREFDX0JPT1NUIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19CT09TVF9TSElGVCAgICAgICAgICAgICAgICAgIDEwICAvKiBBSUYyREFDX0JPT1NUIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19CT09TVF9XSURUSCAgICAgICAgICAgICAgICAgICAyICAvKiBBSUYyREFDX0JPT1NUIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9NT05PICAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYyX01PTk8gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfTU9OT19NQVNLICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMl9NT05PICovCisjZGVmaW5lIFdNODk5NF9BSUYyX01PTk9fU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjJfTU9OTyAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9NT05PX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyX01PTk8gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfQ09NUCAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQUlGMkRBQ19DT01QICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0NPTVBfTUFTSyAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFJRjJEQUNfQ09NUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19DT01QX1NISUZUICAgICAgICAgICAgICAgICAgICA0ICAvKiBBSUYyREFDX0NPTVAgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkRBQ19DT01QICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0NPTVBNT0RFICAgICAgICAgICAgICAgICAweDAwMDggIC8qIEFJRjJEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfQ09NUE1PREVfTUFTSyAgICAgICAgICAgIDB4MDAwOCAgLyogQUlGMkRBQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19DT01QTU9ERV9TSElGVCAgICAgICAgICAgICAgICAzICAvKiBBSUYyREFDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0NPTVBNT0RFX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfQ09NUCAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMkFEQ19DT01QICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX0NPTVBfTUFTSyAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjJBRENfQ09NUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19DT01QX1NISUZUICAgICAgICAgICAgICAgICAgICAyICAvKiBBSUYyQURDX0NPTVAgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkFEQ19DT01QICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX0NPTVBNT0RFICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjJBRENfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfQ09NUE1PREVfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMkFEQ19DT01QTU9ERSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19DT01QTU9ERV9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBBSUYyQURDX0NPTVBNT0RFICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX0NPTVBNT0RFX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJBRENfQ09NUE1PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfTE9PUEJBQ0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMl9MT09QQkFDSyAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9MT09QQkFDS19NQVNLICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYyX0xPT1BCQUNLICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0xPT1BCQUNLX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJfTE9PUEJBQ0sgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfTE9PUEJBQ0tfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMl9MT09QQkFDSyAqLworCisvKgorICogUjc4NiAoMHgzMTIpIC0gQUlGMiBNYXN0ZXIvU2xhdmUKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9UUkkgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYyX1RSSSAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9UUklfTUFTSyAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYyX1RSSSAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9UUklfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBBSUYyX1RSSSAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9UUklfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyX1RSSSAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9NU1RSICAgICAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBBSUYyX01TVFIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfTVNUUl9NQVNLICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogQUlGMl9NU1RSICovCisjZGVmaW5lIFdNODk5NF9BSUYyX01TVFJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMTQgIC8qIEFJRjJfTVNUUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9NU1RSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyX01TVFIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfQ0xLX0ZSQyAgICAgICAgICAgICAgICAgICAgIDB4MjAwMCAgLyogQUlGMl9DTEtfRlJDICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0NMS19GUkNfTUFTSyAgICAgICAgICAgICAgICAweDIwMDAgIC8qIEFJRjJfQ0xLX0ZSQyAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9DTEtfRlJDX1NISUZUICAgICAgICAgICAgICAgICAgIDEzICAvKiBBSUYyX0NMS19GUkMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfQ0xLX0ZSQ19XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMl9DTEtfRlJDICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0xSQ0xLX0ZSQyAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEFJRjJfTFJDTEtfRlJDICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0xSQ0xLX0ZSQ19NQVNLICAgICAgICAgICAgICAweDEwMDAgIC8qIEFJRjJfTFJDTEtfRlJDICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0xSQ0xLX0ZSQ19TSElGVCAgICAgICAgICAgICAgICAgMTIgIC8qIEFJRjJfTFJDTEtfRlJDICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0xSQ0xLX0ZSQ19XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJfTFJDTEtfRlJDICovCisKKy8qCisgKiBSNzg3ICgweDMxMykgLSBBSUYyIEJDTEsKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMl9CQ0xLX0RJVl9NQVNLICAgICAgICAgICAgICAgMHgwMUYwICAvKiBBSUYyX0JDTEtfRElWIC0gWzg6NF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJfQkNMS19ESVZfU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogQUlGMl9CQ0xLX0RJViAtIFs4OjRdICovCisjZGVmaW5lIFdNODk5NF9BSUYyX0JDTEtfRElWX1dJRFRIICAgICAgICAgICAgICAgICAgIDUgIC8qIEFJRjJfQkNMS19ESVYgLSBbODo0XSAqLworCisvKgorICogUjc4OCAoMHgzMTQpIC0gQUlGMkFEQyBMUkNMSworICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX0xSQ0xLX0RJUiAgICAgICAgICAgICAgICAweDA4MDAgIC8qIEFJRjJBRENfTFJDTEtfRElSICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX0xSQ0xLX0RJUl9NQVNLICAgICAgICAgICAweDA4MDAgIC8qIEFJRjJBRENfTFJDTEtfRElSICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX0xSQ0xLX0RJUl9TSElGVCAgICAgICAgICAgICAgMTEgIC8qIEFJRjJBRENfTFJDTEtfRElSICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX0xSQ0xLX0RJUl9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjJBRENfTFJDTEtfRElSICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX1JBVEVfTUFTSyAgICAgICAgICAgICAgICAweDA3RkYgIC8qIEFJRjJBRENfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19SQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYyQURDX1JBVEUgLSBbMTA6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAxMSAgLyogQUlGMkFEQ19SQVRFIC0gWzEwOjBdICovCisKKy8qCisgKiBSNzg5ICgweDMxNSkgLSBBSUYyREFDIExSQ0xLCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfTFJDTEtfRElSICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQUlGMkRBQ19MUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfTFJDTEtfRElSX01BU0sgICAgICAgICAgIDB4MDgwMCAgLyogQUlGMkRBQ19MUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfTFJDTEtfRElSX1NISUZUICAgICAgICAgICAgICAxMSAgLyogQUlGMkRBQ19MUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfTFJDTEtfRElSX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQUlGMkRBQ19MUkNMS19ESVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfUkFURV9NQVNLICAgICAgICAgICAgICAgIDB4MDdGRiAgLyogQUlGMkRBQ19SQVRFIC0gWzEwOjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX1JBVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJEQUNfUkFURSAtIFsxMDowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19SQVRFX1dJRFRIICAgICAgICAgICAgICAgICAgIDExICAvKiBBSUYyREFDX1JBVEUgLSBbMTA6MF0gKi8KKworLyoKKyAqIFI3OTAgKDB4MzE2KSAtIEFJRjJEQUMgRGF0YQorICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9EQVRfSU5WICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjJEQUNMX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNMX0RBVF9JTlZfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMkRBQ0xfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfREFUX0lOVl9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBBSUYyREFDTF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9EQVRfSU5WX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNMX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX0RBVF9JTlYgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMkRBQ1JfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfREFUX0lOVl9NQVNLICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYyREFDUl9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDUl9EQVRfSU5WX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJEQUNSX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX0RBVF9JTlZfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMkRBQ1JfREFUX0lOViAqLworCisvKgorICogUjc5MSAoMHgzMTcpIC0gQUlGMkFEQyBEYXRhCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENMX0RBVF9JTlYgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMkFEQ0xfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ0xfREFUX0lOVl9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYyQURDTF9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDTF9EQVRfSU5WX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJBRENMX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENMX0RBVF9JTlZfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMkFEQ0xfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ1JfREFUX0lOViAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYyQURDUl9EQVRfSU5WICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDUl9EQVRfSU5WX01BU0sgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJBRENSX0RBVF9JTlYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENSX0RBVF9JTlZfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMkFEQ1JfREFUX0lOViAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ1JfREFUX0lOVl9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYyQURDUl9EQVRfSU5WICovCisKKy8qCisgKiBSMTAyNCAoMHg0MDApIC0gQUlGMSBBREMxIExlZnQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxX1ZVICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMUFEQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxX1ZVX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMUFEQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMUFEQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxTF9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDBGRiAgLyogQUlGMUFEQzFMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMUxfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFBREMxTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxQURDMUxfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMDI1ICgweDQwMSkgLSBBSUYxIEFEQzEgUmlnaHQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxX1ZVICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMUFEQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxX1ZVX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMUFEQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMUFEQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxUl9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDBGRiAgLyogQUlGMUFEQzFSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMVJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFBREMxUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxQURDMVJfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMDI2ICgweDQwMikgLSBBSUYxIERBQzEgTGVmdCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfVlUgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfVlVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFMX1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwMEZGICAvKiBBSUYxREFDMUxfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMUxfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFEQUMxTF9WT0wgLSBbNzowXSAqLworCisvKgorICogUjEwMjcgKDB4NDAzKSAtIEFJRjEgREFDMSBSaWdodCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfVlUgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfVlVfTUFTSyAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFSX1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwMEZGICAvKiBBSUYxREFDMVJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMVJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFEQUMxUl9WT0wgLSBbNzowXSAqLworCisvKgorICogUjEwMjggKDB4NDA0KSAtIEFJRjEgQURDMiBMZWZ0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMl9WVSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFBREMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMl9WVV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFBREMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMl9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFBREMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMl9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBREMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMkxfVk9MX01BU0sgICAgICAgICAgICAgICAweDAwRkYgIC8qIEFJRjFBREMyTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYxQURDMkxfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMUFEQzJMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTAyOSAoMHg0MDUpIC0gQUlGMSBBREMyIFJpZ2h0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMl9WVSAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFBREMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMl9WVV9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFBREMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMl9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFBREMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMl9WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBREMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMlJfVk9MX01BU0sgICAgICAgICAgICAgICAweDAwRkYgIC8qIEFJRjFBREMyUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJSX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYxQURDMlJfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMUFEQzJSX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTAzMCAoMHg0MDYpIC0gQUlGMSBEQUMyIExlZnQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX1ZVICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMURBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX1ZVX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMURBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMURBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyTF9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDBGRiAgLyogQUlGMURBQzJMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMkxfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMyTF9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxREFDMkxfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMDMxICgweDQwNykgLSBBSUYxIERBQzIgUmlnaHQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX1ZVICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMURBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX1ZVX01BU0sgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMURBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMURBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyUl9WT0xfTUFTSyAgICAgICAgICAgICAgIDB4MDBGRiAgLyogQUlGMURBQzJSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMlJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMyUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJSX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxREFDMlJfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMDQwICgweDQxMCkgLSBBSUYxIEFEQzEgRmlsdGVycworICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDXzRGUyAgICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjFBRENfNEZTICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDXzRGU19NQVNLICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIEFJRjFBRENfNEZTICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDXzRGU19TSElGVCAgICAgICAgICAgICAgICAgICAgMTUgIC8qIEFJRjFBRENfNEZTICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDXzRGU19XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBRENfNEZTICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMV9IUEZfQ1VUX01BU0sgICAgICAgICAgICAweDYwMDAgIC8qIEFJRjFBREMxX0hQRl9DVVQgLSBbMTQ6MTNdICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMV9IUEZfQ1VUX1NISUZUICAgICAgICAgICAgICAgMTMgIC8qIEFJRjFBREMxX0hQRl9DVVQgLSBbMTQ6MTNdICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMV9IUEZfQ1VUX1dJRFRIICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFBREMxX0hQRl9DVVQgLSBbMTQ6MTNdICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMUxfSFBGICAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEFJRjFBREMxTF9IUEYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxTF9IUEZfTUFTSyAgICAgICAgICAgICAgIDB4MTAwMCAgLyogQUlGMUFEQzFMX0hQRiAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFMX0hQRl9TSElGVCAgICAgICAgICAgICAgICAgIDEyICAvKiBBSUYxQURDMUxfSFBGICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMUxfSFBGX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFBREMxTF9IUEYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxUl9IUEYgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQUlGMUFEQzFSX0hQRiAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFSX0hQRl9NQVNLICAgICAgICAgICAgICAgMHgwODAwICAvKiBBSUYxQURDMVJfSFBGICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMVJfSFBGX1NISUZUICAgICAgICAgICAgICAgICAgMTEgIC8qIEFJRjFBREMxUl9IUEYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMxUl9IUEZfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQzFSX0hQRiAqLworCisvKgorICogUjEwNDEgKDB4NDExKSAtIEFJRjEgQURDMiBGaWx0ZXJzCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyX0hQRl9DVVRfTUFTSyAgICAgICAgICAgIDB4NjAwMCAgLyogQUlGMUFEQzJfSFBGX0NVVCAtIFsxNDoxM10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyX0hQRl9DVVRfU0hJRlQgICAgICAgICAgICAgICAxMyAgLyogQUlGMUFEQzJfSFBGX0NVVCAtIFsxNDoxM10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyX0hQRl9DVVRfV0lEVEggICAgICAgICAgICAgICAgMiAgLyogQUlGMUFEQzJfSFBGX0NVVCAtIFsxNDoxM10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyTF9IUEYgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogQUlGMUFEQzJMX0hQRiAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJMX0hQRl9NQVNLICAgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUYxQURDMkxfSFBGICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMkxfSFBGX1NISUZUICAgICAgICAgICAgICAgICAgMTIgIC8qIEFJRjFBREMyTF9IUEYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyTF9IUEZfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQzJMX0hQRiAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJSX0hQRiAgICAgICAgICAgICAgICAgICAgMHgwODAwICAvKiBBSUYxQURDMlJfSFBGICovCisjZGVmaW5lIFdNODk5NF9BSUYxQURDMlJfSFBGX01BU0sgICAgICAgICAgICAgICAweDA4MDAgIC8qIEFJRjFBREMyUl9IUEYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyUl9IUEZfU0hJRlQgICAgICAgICAgICAgICAgICAxMSAgLyogQUlGMUFEQzJSX0hQRiAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzJSX0hQRl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxQURDMlJfSFBGICovCisKKy8qCisgKiBSMTA1NiAoMHg0MjApIC0gQUlGMSBEQUMxIEZpbHRlcnMgKDEpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX01VVEUgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlGMURBQzFfTVVURSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfTVVURV9NQVNLICAgICAgICAgICAgICAgMHgwMjAwICAvKiBBSUYxREFDMV9NVVRFICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgIDkgIC8qIEFJRjFEQUMxX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzFfTVVURSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfTU9OTyAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBBSUYxREFDMV9NT05PICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9NT05PX01BU0sgICAgICAgICAgICAgICAweDAwODAgIC8qIEFJRjFEQUMxX01PTk8gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX01PTk9fU0hJRlQgICAgICAgICAgICAgICAgICAgNyAgLyogQUlGMURBQzFfTU9OTyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfTU9OT19XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxREFDMV9NT05PICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9NVVRFUkFURSAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFJRjFEQUMxX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9NVVRFUkFURV9NQVNLICAgICAgICAgICAweDAwMjAgIC8qIEFJRjFEQUMxX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9NVVRFUkFURV9TSElGVCAgICAgICAgICAgICAgIDUgIC8qIEFJRjFEQUMxX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9NVVRFUkFURV9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMxX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9VTk1VVEVfUkFNUCAgICAgICAgICAgICAweDAwMTAgIC8qIEFJRjFEQUMxX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9VTk1VVEVfUkFNUF9NQVNLICAgICAgICAweDAwMTAgIC8qIEFJRjFEQUMxX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9VTk1VVEVfUkFNUF9TSElGVCAgICAgICAgICAgIDQgIC8qIEFJRjFEQUMxX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9VTk1VVEVfUkFNUF9XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMxX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9ERUVNUF9NQVNLICAgICAgICAgICAgICAweDAwMDYgIC8qIEFJRjFEQUMxX0RFRU1QIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0RFRU1QX1NISUZUICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzFfREVFTVAgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfREVFTVBfV0lEVEggICAgICAgICAgICAgICAgICAyICAvKiBBSUYxREFDMV9ERUVNUCAtIFsyOjFdICovCisKKy8qCisgKiBSMTA1NyAoMHg0MjEpIC0gQUlGMSBEQUMxIEZpbHRlcnMgKDIpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxXzNEX0dBSU5fTUFTSyAgICAgICAgICAgIDB4M0UwMCAgLyogQUlGMURBQzFfM0RfR0FJTiAtIFsxMzo5XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfM0RfR0FJTl9TSElGVCAgICAgICAgICAgICAgICA5ICAvKiBBSUYxREFDMV8zRF9HQUlOIC0gWzEzOjldICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV8zRF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgIDUgIC8qIEFJRjFEQUMxXzNEX0dBSU4gLSBbMTM6OV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxXzNEX0VOQSAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMURBQzFfM0RfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV8zRF9FTkFfTUFTSyAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFEQUMxXzNEX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfM0RfRU5BX1NISUZUICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxREFDMV8zRF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxXzNEX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzFfM0RfRU5BICovCisKKy8qCisgKiBSMTA1OCAoMHg0MjIpIC0gQUlGMSBEQUMyIEZpbHRlcnMgKDEpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX01VVEUgICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlGMURBQzJfTVVURSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfTVVURV9NQVNLICAgICAgICAgICAgICAgMHgwMjAwICAvKiBBSUYxREFDMl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9NVVRFX1NISUZUICAgICAgICAgICAgICAgICAgIDkgIC8qIEFJRjFEQUMyX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX01VVEVfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzJfTVVURSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfTU9OTyAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBBSUYxREFDMl9NT05PICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9NT05PX01BU0sgICAgICAgICAgICAgICAweDAwODAgIC8qIEFJRjFEQUMyX01PTk8gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX01PTk9fU0hJRlQgICAgICAgICAgICAgICAgICAgNyAgLyogQUlGMURBQzJfTU9OTyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfTU9OT19XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYxREFDMl9NT05PICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9NVVRFUkFURSAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFJRjFEQUMyX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9NVVRFUkFURV9NQVNLICAgICAgICAgICAweDAwMjAgIC8qIEFJRjFEQUMyX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9NVVRFUkFURV9TSElGVCAgICAgICAgICAgICAgIDUgIC8qIEFJRjFEQUMyX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9NVVRFUkFURV9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMyX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9VTk1VVEVfUkFNUCAgICAgICAgICAgICAweDAwMTAgIC8qIEFJRjFEQUMyX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9VTk1VVEVfUkFNUF9NQVNLICAgICAgICAweDAwMTAgIC8qIEFJRjFEQUMyX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9VTk1VVEVfUkFNUF9TSElGVCAgICAgICAgICAgIDQgIC8qIEFJRjFEQUMyX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9VTk1VVEVfUkFNUF9XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMyX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9ERUVNUF9NQVNLICAgICAgICAgICAgICAweDAwMDYgIC8qIEFJRjFEQUMyX0RFRU1QIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0RFRU1QX1NISUZUICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzJfREVFTVAgLSBbMjoxXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfREVFTVBfV0lEVEggICAgICAgICAgICAgICAgICAyICAvKiBBSUYxREFDMl9ERUVNUCAtIFsyOjFdICovCisKKy8qCisgKiBSMTA1OSAoMHg0MjMpIC0gQUlGMSBEQUMyIEZpbHRlcnMgKDIpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyXzNEX0dBSU5fTUFTSyAgICAgICAgICAgIDB4M0UwMCAgLyogQUlGMURBQzJfM0RfR0FJTiAtIFsxMzo5XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfM0RfR0FJTl9TSElGVCAgICAgICAgICAgICAgICA5ICAvKiBBSUYxREFDMl8zRF9HQUlOIC0gWzEzOjldICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl8zRF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgIDUgIC8qIEFJRjFEQUMyXzNEX0dBSU4gLSBbMTM6OV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyXzNEX0VOQSAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMURBQzJfM0RfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl8zRF9FTkFfTUFTSyAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFEQUMyXzNEX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfM0RfRU5BX1NISUZUICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxREFDMl8zRF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyXzNEX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzJfM0RfRU5BICovCisKKy8qCisgKiBSMTA4OCAoMHg0NDApIC0gQUlGMSBEUkMxICgxKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9TSUdfREVUX1JNU19NQVNLICAgICAgICAweEY4MDAgIC8qIEFJRjFEUkMxX1NJR19ERVRfUk1TIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfU0lHX0RFVF9STVNfU0hJRlQgICAgICAgICAgIDExICAvKiBBSUYxRFJDMV9TSUdfREVUX1JNUyAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1NJR19ERVRfUk1TX1dJRFRIICAgICAgICAgICAgNSAgLyogQUlGMURSQzFfU0lHX0RFVF9STVMgLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9TSUdfREVUX1BLX01BU0sgICAgICAgICAweDA2MDAgIC8qIEFJRjFEUkMxX1NJR19ERVRfUEsgLSBbMTA6OV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1NJR19ERVRfUEtfU0hJRlQgICAgICAgICAgICAgOSAgLyogQUlGMURSQzFfU0lHX0RFVF9QSyAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfU0lHX0RFVF9QS19XSURUSCAgICAgICAgICAgICAyICAvKiBBSUYxRFJDMV9TSUdfREVUX1BLIC0gWzEwOjldICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9OR19FTkEgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjFEUkMxX05HX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfTkdfRU5BX01BU0sgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxRFJDMV9OR19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX05HX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgOCAgLyogQUlGMURSQzFfTkdfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9OR19FTkFfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEUkMxX05HX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfU0lHX0RFVF9NT0RFICAgICAgICAgICAgMHgwMDgwICAvKiBBSUYxRFJDMV9TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1NJR19ERVRfTU9ERV9NQVNLICAgICAgIDB4MDA4MCAgLyogQUlGMURSQzFfU0lHX0RFVF9NT0RFICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9TSUdfREVUX01PREVfU0hJRlQgICAgICAgICAgIDcgIC8qIEFJRjFEUkMxX1NJR19ERVRfTU9ERSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfU0lHX0RFVF9NT0RFX1dJRFRIICAgICAgICAgICAxICAvKiBBSUYxRFJDMV9TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1NJR19ERVQgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogQUlGMURSQzFfU0lHX0RFVCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfU0lHX0RFVF9NQVNLICAgICAgICAgICAgMHgwMDQwICAvKiBBSUYxRFJDMV9TSUdfREVUICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9TSUdfREVUX1NISUZUICAgICAgICAgICAgICAgIDYgIC8qIEFJRjFEUkMxX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1NJR19ERVRfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMURSQzFfU0lHX0RFVCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfS05FRTJfT1BfRU5BICAgICAgICAgICAgMHgwMDIwICAvKiBBSUYxRFJDMV9LTkVFMl9PUF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0tORUUyX09QX0VOQV9NQVNLICAgICAgIDB4MDAyMCAgLyogQUlGMURSQzFfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9LTkVFMl9PUF9FTkFfU0hJRlQgICAgICAgICAgIDUgIC8qIEFJRjFEUkMxX0tORUUyX09QX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfS05FRTJfT1BfRU5BX1dJRFRIICAgICAgICAgICAxICAvKiBBSUYxRFJDMV9LTkVFMl9PUF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1FSICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQUlGMURSQzFfUVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1FSX01BU0sgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQUlGMURSQzFfUVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1FSX1NISUZUICAgICAgICAgICAgICAgICAgICAgNCAgLyogQUlGMURSQzFfUVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1FSX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURSQzFfUVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0FOVElDTElQICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogQUlGMURSQzFfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0FOVElDTElQX01BU0sgICAgICAgICAgIDB4MDAwOCAgLyogQUlGMURSQzFfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0FOVElDTElQX1NISUZUICAgICAgICAgICAgICAgMyAgLyogQUlGMURSQzFfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0FOVElDTElQX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQUlGMURSQzFfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0RSQ19FTkEgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMURBQzFfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRFJDX0VOQV9NQVNLICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYxREFDMV9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFEQUMxX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0RSQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzFfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFMX0RSQ19FTkEgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxQURDMUxfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFMX0RSQ19FTkFfTUFTSyAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxQURDMUxfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFMX0RSQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAxICAvKiBBSUYxQURDMUxfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFMX0RSQ19FTkFfV0lEVEggICAgICAgICAgICAgICAxICAvKiBBSUYxQURDMUxfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFSX0RSQ19FTkEgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxQURDMVJfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFSX0RSQ19FTkFfTUFTSyAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxQURDMVJfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFSX0RSQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBBSUYxQURDMVJfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMUFEQzFSX0RSQ19FTkFfV0lEVEggICAgICAgICAgICAgICAxICAvKiBBSUYxQURDMVJfRFJDX0VOQSAqLworCisvKgorICogUjEwODkgKDB4NDQxKSAtIEFJRjEgRFJDMSAoMikKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfQVRLX01BU0sgICAgICAgICAgICAgICAgMHgxRTAwICAvKiBBSUYxRFJDMV9BVEsgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0FUS19TSElGVCAgICAgICAgICAgICAgICAgICAgOSAgLyogQUlGMURSQzFfQVRLIC0gWzEyOjldICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9BVEtfV0lEVEggICAgICAgICAgICAgICAgICAgIDQgIC8qIEFJRjFEUkMxX0FUSyAtIFsxMjo5XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfRENZX01BU0sgICAgICAgICAgICAgICAgMHgwMUUwICAvKiBBSUYxRFJDMV9EQ1kgLSBbODo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfRENZX1NISUZUICAgICAgICAgICAgICAgICAgICA1ICAvKiBBSUYxRFJDMV9EQ1kgLSBbODo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfRENZX1dJRFRIICAgICAgICAgICAgICAgICAgICA0ICAvKiBBSUYxRFJDMV9EQ1kgLSBbODo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfTUlOR0FJTl9NQVNLICAgICAgICAgICAgMHgwMDFDICAvKiBBSUYxRFJDMV9NSU5HQUlOIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX01JTkdBSU5fU0hJRlQgICAgICAgICAgICAgICAgMiAgLyogQUlGMURSQzFfTUlOR0FJTiAtIFs0OjJdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9NSU5HQUlOX1dJRFRIICAgICAgICAgICAgICAgIDMgIC8qIEFJRjFEUkMxX01JTkdBSU4gLSBbNDoyXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfTUFYR0FJTl9NQVNLICAgICAgICAgICAgMHgwMDAzICAvKiBBSUYxRFJDMV9NQVhHQUlOIC0gWzE6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX01BWEdBSU5fU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURSQzFfTUFYR0FJTiAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9NQVhHQUlOX1dJRFRIICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFEUkMxX01BWEdBSU4gLSBbMTowXSAqLworCisvKgorICogUjEwOTAgKDB4NDQyKSAtIEFJRjEgRFJDMSAoMykKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfTkdfTUlOR0FJTl9NQVNLICAgICAgICAgMHhGMDAwICAvKiBBSUYxRFJDMV9OR19NSU5HQUlOIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfTkdfTUlOR0FJTl9TSElGVCAgICAgICAgICAgIDEyICAvKiBBSUYxRFJDMV9OR19NSU5HQUlOIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfTkdfTUlOR0FJTl9XSURUSCAgICAgICAgICAgICA0ICAvKiBBSUYxRFJDMV9OR19NSU5HQUlOIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfTkdfRVhQX01BU0sgICAgICAgICAgICAgMHgwQzAwICAvKiBBSUYxRFJDMV9OR19FWFAgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9OR19FWFBfU0hJRlQgICAgICAgICAgICAgICAgMTAgIC8qIEFJRjFEUkMxX05HX0VYUCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX05HX0VYUF9XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogQUlGMURSQzFfTkdfRVhQIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfUVJfVEhSX01BU0sgICAgICAgICAgICAgMHgwMzAwICAvKiBBSUYxRFJDMV9RUl9USFIgLSBbOTo4XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfUVJfVEhSX1NISUZUICAgICAgICAgICAgICAgICA4ICAvKiBBSUYxRFJDMV9RUl9USFIgLSBbOTo4XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfUVJfVEhSX1dJRFRIICAgICAgICAgICAgICAgICAyICAvKiBBSUYxRFJDMV9RUl9USFIgLSBbOTo4XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfUVJfRENZX01BU0sgICAgICAgICAgICAgMHgwMEMwICAvKiBBSUYxRFJDMV9RUl9EQ1kgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfUVJfRENZX1NISUZUICAgICAgICAgICAgICAgICA2ICAvKiBBSUYxRFJDMV9RUl9EQ1kgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfUVJfRENZX1dJRFRIICAgICAgICAgICAgICAgICAyICAvKiBBSUYxRFJDMV9RUl9EQ1kgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfSElfQ09NUF9NQVNLICAgICAgICAgICAgMHgwMDM4ICAvKiBBSUYxRFJDMV9ISV9DT01QIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0hJX0NPTVBfU0hJRlQgICAgICAgICAgICAgICAgMyAgLyogQUlGMURSQzFfSElfQ09NUCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9ISV9DT01QX1dJRFRIICAgICAgICAgICAgICAgIDMgIC8qIEFJRjFEUkMxX0hJX0NPTVAgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfTE9fQ09NUF9NQVNLICAgICAgICAgICAgMHgwMDA3ICAvKiBBSUYxRFJDMV9MT19DT01QIC0gWzI6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0xPX0NPTVBfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURSQzFfTE9fQ09NUCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9MT19DT01QX1dJRFRIICAgICAgICAgICAgICAgIDMgIC8qIEFJRjFEUkMxX0xPX0NPTVAgLSBbMjowXSAqLworCisvKgorICogUjEwOTEgKDB4NDQzKSAtIEFJRjEgRFJDMSAoNCkKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfS05FRV9JUF9NQVNLICAgICAgICAgICAgMHgwN0UwICAvKiBBSUYxRFJDMV9LTkVFX0lQIC0gWzEwOjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9LTkVFX0lQX1NISUZUICAgICAgICAgICAgICAgIDUgIC8qIEFJRjFEUkMxX0tORUVfSVAgLSBbMTA6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0tORUVfSVBfV0lEVEggICAgICAgICAgICAgICAgNiAgLyogQUlGMURSQzFfS05FRV9JUCAtIFsxMDo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfS05FRV9PUF9NQVNLICAgICAgICAgICAgMHgwMDFGICAvKiBBSUYxRFJDMV9LTkVFX09QIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0tORUVfT1BfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURSQzFfS05FRV9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9LTkVFX09QX1dJRFRIICAgICAgICAgICAgICAgIDUgIC8qIEFJRjFEUkMxX0tORUVfT1AgLSBbNDowXSAqLworCisvKgorICogUjEwOTIgKDB4NDQ0KSAtIEFJRjEgRFJDMSAoNSkKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfS05FRTJfSVBfTUFTSyAgICAgICAgICAgMHgwM0UwICAvKiBBSUYxRFJDMV9LTkVFMl9JUCAtIFs5OjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9LTkVFMl9JUF9TSElGVCAgICAgICAgICAgICAgIDUgIC8qIEFJRjFEUkMxX0tORUUyX0lQIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0tORUUyX0lQX1dJRFRIICAgICAgICAgICAgICAgNSAgLyogQUlGMURSQzFfS05FRTJfSVAgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfS05FRTJfT1BfTUFTSyAgICAgICAgICAgMHgwMDFGICAvKiBBSUYxRFJDMV9LTkVFMl9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9LTkVFMl9PUF9TSElGVCAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEUkMxX0tORUUyX09QIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX0tORUUyX09QX1dJRFRIICAgICAgICAgICAgICAgNSAgLyogQUlGMURSQzFfS05FRTJfT1AgLSBbNDowXSAqLworCisvKgorICogUjExMDQgKDB4NDUwKSAtIEFJRjEgRFJDMiAoMSkKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfU0lHX0RFVF9STVNfTUFTSyAgICAgICAgMHhGODAwICAvKiBBSUYxRFJDMl9TSUdfREVUX1JNUyAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX1NJR19ERVRfUk1TX1NISUZUICAgICAgICAgICAxMSAgLyogQUlGMURSQzJfU0lHX0RFVF9STVMgLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9TSUdfREVUX1JNU19XSURUSCAgICAgICAgICAgIDUgIC8qIEFJRjFEUkMyX1NJR19ERVRfUk1TIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfU0lHX0RFVF9QS19NQVNLICAgICAgICAgMHgwNjAwICAvKiBBSUYxRFJDMl9TSUdfREVUX1BLIC0gWzEwOjldICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9TSUdfREVUX1BLX1NISUZUICAgICAgICAgICAgIDkgIC8qIEFJRjFEUkMyX1NJR19ERVRfUEsgLSBbMTA6OV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX1NJR19ERVRfUEtfV0lEVEggICAgICAgICAgICAgMiAgLyogQUlGMURSQzJfU0lHX0RFVF9QSyAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfTkdfRU5BICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYxRFJDMl9OR19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX05HX0VOQV9NQVNLICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMURSQzJfTkdfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9OR19FTkFfU0hJRlQgICAgICAgICAgICAgICAgIDggIC8qIEFJRjFEUkMyX05HX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfTkdfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBBSUYxRFJDMl9OR19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX1NJR19ERVRfTU9ERSAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGMURSQzJfU0lHX0RFVF9NT0RFICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9TSUdfREVUX01PREVfTUFTSyAgICAgICAweDAwODAgIC8qIEFJRjFEUkMyX1NJR19ERVRfTU9ERSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfU0lHX0RFVF9NT0RFX1NISUZUICAgICAgICAgICA3ICAvKiBBSUYxRFJDMl9TSUdfREVUX01PREUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX1NJR19ERVRfTU9ERV9XSURUSCAgICAgICAgICAgMSAgLyogQUlGMURSQzJfU0lHX0RFVF9NT0RFICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9TSUdfREVUICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIEFJRjFEUkMyX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX1NJR19ERVRfTUFTSyAgICAgICAgICAgIDB4MDA0MCAgLyogQUlGMURSQzJfU0lHX0RFVCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfU0lHX0RFVF9TSElGVCAgICAgICAgICAgICAgICA2ICAvKiBBSUYxRFJDMl9TSUdfREVUICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9TSUdfREVUX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEUkMyX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0tORUUyX09QX0VOQSAgICAgICAgICAgIDB4MDAyMCAgLyogQUlGMURSQzJfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9LTkVFMl9PUF9FTkFfTUFTSyAgICAgICAweDAwMjAgIC8qIEFJRjFEUkMyX0tORUUyX09QX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfS05FRTJfT1BfRU5BX1NISUZUICAgICAgICAgICA1ICAvKiBBSUYxRFJDMl9LTkVFMl9PUF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0tORUUyX09QX0VOQV9XSURUSCAgICAgICAgICAgMSAgLyogQUlGMURSQzJfS05FRTJfT1BfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9RUiAgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFJRjFEUkMyX1FSICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9RUl9NQVNLICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFJRjFEUkMyX1FSICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9RUl9TSElGVCAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEFJRjFEUkMyX1FSICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9RUl9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEUkMyX1FSICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9BTlRJQ0xJUCAgICAgICAgICAgICAgICAweDAwMDggIC8qIEFJRjFEUkMyX0FOVElDTElQICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9BTlRJQ0xJUF9NQVNLICAgICAgICAgICAweDAwMDggIC8qIEFJRjFEUkMyX0FOVElDTElQICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9BTlRJQ0xJUF9TSElGVCAgICAgICAgICAgICAgIDMgIC8qIEFJRjFEUkMyX0FOVElDTElQICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9BTlRJQ0xJUF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEUkMyX0FOVElDTElQICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9EUkNfRU5BICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjFEQUMyX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0RSQ19FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMURBQzJfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRFJDX0VOQV9TSElGVCAgICAgICAgICAgICAgICAyICAvKiBBSUYxREFDMl9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9EUkNfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMyX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyTF9EUkNfRU5BICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMUFEQzJMX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyTF9EUkNfRU5BX01BU0sgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMUFEQzJMX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyTF9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQzJMX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyTF9EUkNfRU5BX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQzJMX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyUl9EUkNfRU5BICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMUFEQzJSX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyUl9EUkNfRU5BX01BU0sgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMUFEQzJSX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyUl9EUkNfRU5BX1NISUZUICAgICAgICAgICAgICAgMCAgLyogQUlGMUFEQzJSX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFBREMyUl9EUkNfRU5BX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQUlGMUFEQzJSX0RSQ19FTkEgKi8KKworLyoKKyAqIFIxMTA1ICgweDQ1MSkgLSBBSUYxIERSQzIgKDIpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0FUS19NQVNLICAgICAgICAgICAgICAgIDB4MUUwMCAgLyogQUlGMURSQzJfQVRLIC0gWzEyOjldICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9BVEtfU0hJRlQgICAgICAgICAgICAgICAgICAgIDkgIC8qIEFJRjFEUkMyX0FUSyAtIFsxMjo5XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfQVRLX1dJRFRIICAgICAgICAgICAgICAgICAgICA0ICAvKiBBSUYxRFJDMl9BVEsgLSBbMTI6OV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0RDWV9NQVNLICAgICAgICAgICAgICAgIDB4MDFFMCAgLyogQUlGMURSQzJfRENZIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0RDWV9TSElGVCAgICAgICAgICAgICAgICAgICAgNSAgLyogQUlGMURSQzJfRENZIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0RDWV9XSURUSCAgICAgICAgICAgICAgICAgICAgNCAgLyogQUlGMURSQzJfRENZIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX01JTkdBSU5fTUFTSyAgICAgICAgICAgIDB4MDAxQyAgLyogQUlGMURSQzJfTUlOR0FJTiAtIFs0OjJdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9NSU5HQUlOX1NISUZUICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFEUkMyX01JTkdBSU4gLSBbNDoyXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfTUlOR0FJTl9XSURUSCAgICAgICAgICAgICAgICAzICAvKiBBSUYxRFJDMl9NSU5HQUlOIC0gWzQ6Ml0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX01BWEdBSU5fTUFTSyAgICAgICAgICAgIDB4MDAwMyAgLyogQUlGMURSQzJfTUFYR0FJTiAtIFsxOjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9NQVhHQUlOX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEUkMyX01BWEdBSU4gLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfTUFYR0FJTl9XSURUSCAgICAgICAgICAgICAgICAyICAvKiBBSUYxRFJDMl9NQVhHQUlOIC0gWzE6MF0gKi8KKworLyoKKyAqIFIxMTA2ICgweDQ1MikgLSBBSUYxIERSQzIgKDMpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX05HX01JTkdBSU5fTUFTSyAgICAgICAgIDB4RjAwMCAgLyogQUlGMURSQzJfTkdfTUlOR0FJTiAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX05HX01JTkdBSU5fU0hJRlQgICAgICAgICAgICAxMiAgLyogQUlGMURSQzJfTkdfTUlOR0FJTiAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX05HX01JTkdBSU5fV0lEVEggICAgICAgICAgICAgNCAgLyogQUlGMURSQzJfTkdfTUlOR0FJTiAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX05HX0VYUF9NQVNLICAgICAgICAgICAgIDB4MEMwMCAgLyogQUlGMURSQzJfTkdfRVhQIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfTkdfRVhQX1NISUZUICAgICAgICAgICAgICAgIDEwICAvKiBBSUYxRFJDMl9OR19FWFAgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9OR19FWFBfV0lEVEggICAgICAgICAgICAgICAgIDIgIC8qIEFJRjFEUkMyX05HX0VYUCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX1FSX1RIUl9NQVNLICAgICAgICAgICAgIDB4MDMwMCAgLyogQUlGMURSQzJfUVJfVEhSIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX1FSX1RIUl9TSElGVCAgICAgICAgICAgICAgICAgOCAgLyogQUlGMURSQzJfUVJfVEhSIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX1FSX1RIUl9XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogQUlGMURSQzJfUVJfVEhSIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX1FSX0RDWV9NQVNLICAgICAgICAgICAgIDB4MDBDMCAgLyogQUlGMURSQzJfUVJfRENZIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX1FSX0RDWV9TSElGVCAgICAgICAgICAgICAgICAgNiAgLyogQUlGMURSQzJfUVJfRENZIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX1FSX0RDWV9XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogQUlGMURSQzJfUVJfRENZIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0hJX0NPTVBfTUFTSyAgICAgICAgICAgIDB4MDAzOCAgLyogQUlGMURSQzJfSElfQ09NUCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9ISV9DT01QX1NISUZUICAgICAgICAgICAgICAgIDMgIC8qIEFJRjFEUkMyX0hJX0NPTVAgLSBbNTozXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfSElfQ09NUF9XSURUSCAgICAgICAgICAgICAgICAzICAvKiBBSUYxRFJDMl9ISV9DT01QIC0gWzU6M10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0xPX0NPTVBfTUFTSyAgICAgICAgICAgIDB4MDAwNyAgLyogQUlGMURSQzJfTE9fQ09NUCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9MT19DT01QX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEUkMyX0xPX0NPTVAgLSBbMjowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfTE9fQ09NUF9XSURUSCAgICAgICAgICAgICAgICAzICAvKiBBSUYxRFJDMl9MT19DT01QIC0gWzI6MF0gKi8KKworLyoKKyAqIFIxMTA3ICgweDQ1MykgLSBBSUYxIERSQzIgKDQpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0tORUVfSVBfTUFTSyAgICAgICAgICAgIDB4MDdFMCAgLyogQUlGMURSQzJfS05FRV9JUCAtIFsxMDo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfS05FRV9JUF9TSElGVCAgICAgICAgICAgICAgICA1ICAvKiBBSUYxRFJDMl9LTkVFX0lQIC0gWzEwOjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9LTkVFX0lQX1dJRFRIICAgICAgICAgICAgICAgIDYgIC8qIEFJRjFEUkMyX0tORUVfSVAgLSBbMTA6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0tORUVfT1BfTUFTSyAgICAgICAgICAgIDB4MDAxRiAgLyogQUlGMURSQzJfS05FRV9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9LTkVFX09QX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEUkMyX0tORUVfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfS05FRV9PUF9XSURUSCAgICAgICAgICAgICAgICA1ICAvKiBBSUYxRFJDMl9LTkVFX09QIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxMTA4ICgweDQ1NCkgLSBBSUYxIERSQzIgKDUpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0tORUUyX0lQX01BU0sgICAgICAgICAgIDB4MDNFMCAgLyogQUlGMURSQzJfS05FRTJfSVAgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfS05FRTJfSVBfU0hJRlQgICAgICAgICAgICAgICA1ICAvKiBBSUYxRFJDMl9LTkVFMl9JUCAtIFs5OjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9LTkVFMl9JUF9XSURUSCAgICAgICAgICAgICAgIDUgIC8qIEFJRjFEUkMyX0tORUUyX0lQIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX0tORUUyX09QX01BU0sgICAgICAgICAgIDB4MDAxRiAgLyogQUlGMURSQzJfS05FRTJfT1AgLSBbNDowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfS05FRTJfT1BfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBBSUYxRFJDMl9LTkVFMl9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9LTkVFMl9PUF9XSURUSCAgICAgICAgICAgICAgIDUgIC8qIEFJRjFEUkMyX0tORUUyX09QIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxMTUyICgweDQ4MCkgLSBBSUYxIERBQzEgRVEgR2FpbnMgKDEpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IxX0dBSU5fTUFTSyAgICAgICAgIDB4RjgwMCAgLyogQUlGMURBQzFfRVFfQjFfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IxX0dBSU5fU0hJRlQgICAgICAgICAgICAxMSAgLyogQUlGMURBQzFfRVFfQjFfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IxX0dBSU5fV0lEVEggICAgICAgICAgICAgNSAgLyogQUlGMURBQzFfRVFfQjFfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IyX0dBSU5fTUFTSyAgICAgICAgIDB4MDdDMCAgLyogQUlGMURBQzFfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjJfR0FJTl9TSElGVCAgICAgICAgICAgICA2ICAvKiBBSUYxREFDMV9FUV9CMl9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CMl9HQUlOX1dJRFRIICAgICAgICAgICAgIDUgIC8qIEFJRjFEQUMxX0VRX0IyX0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IzX0dBSU5fTUFTSyAgICAgICAgIDB4MDAzRSAgLyogQUlGMURBQzFfRVFfQjNfR0FJTiAtIFs1OjFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CM19HQUlOX1NISUZUICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMxX0VRX0IzX0dBSU4gLSBbNToxXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjNfR0FJTl9XSURUSCAgICAgICAgICAgICA1ICAvKiBBSUYxREFDMV9FUV9CM19HQUlOIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0VOQSAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMURBQzFfRVFfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9FTkFfTUFTSyAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFEQUMxX0VRX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMV9FUV9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzFfRVFfRU5BICovCisKKy8qCisgKiBSMTE1MyAoMHg0ODEpIC0gQUlGMSBEQUMxIEVRIEdhaW5zICgyKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CNF9HQUlOX01BU0sgICAgICAgICAweEY4MDAgIC8qIEFJRjFEQUMxX0VRX0I0X0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CNF9HQUlOX1NISUZUICAgICAgICAgICAgMTEgIC8qIEFJRjFEQUMxX0VRX0I0X0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CNF9HQUlOX1dJRFRIICAgICAgICAgICAgIDUgIC8qIEFJRjFEQUMxX0VRX0I0X0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CNV9HQUlOX01BU0sgICAgICAgICAweDA3QzAgIC8qIEFJRjFEQUMxX0VRX0I1X0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0I1X0dBSU5fU0hJRlQgICAgICAgICAgICAgNiAgLyogQUlGMURBQzFfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjVfR0FJTl9XSURUSCAgICAgICAgICAgICA1ICAvKiBBSUYxREFDMV9FUV9CNV9HQUlOIC0gWzEwOjZdICovCisKKy8qCisgKiBSMTE1NCAoMHg0ODIpIC0gQUlGMSBEQUMxIEVRIEJhbmQgMSBBCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IxX0FfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzFfRVFfQjFfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjFfQV9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMV9FUV9CMV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CMV9BX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMxX0VRX0IxX0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTU1ICgweDQ4MykgLSBBSUYxIERBQzEgRVEgQmFuZCAxIEIKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjFfQl9NQVNLICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMV9FUV9CMV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CMV9CX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMxX0VRX0IxX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IxX0JfV0lEVEggICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzFfRVFfQjFfQiAtIFsxNTowXSAqLworCisvKgorICogUjExNTYgKDB4NDg0KSAtIEFJRjEgREFDMSBFUSBCYW5kIDEgUEcKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjFfUEdfTUFTSyAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMV9FUV9CMV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjFfUEdfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMV9FUV9CMV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjFfUEdfV0lEVEggICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMV9FUV9CMV9QRyAtIFsxNTowXSAqLworCisvKgorICogUjExNTcgKDB4NDg1KSAtIEFJRjEgREFDMSBFUSBCYW5kIDIgQQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CMl9BX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMxX0VRX0IyX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IyX0FfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFfRVFfQjJfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjJfQV9XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMV9FUV9CMl9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE1OCAoMHg0ODYpIC0gQUlGMSBEQUMxIEVRIEJhbmQgMiBCCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IyX0JfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzFfRVFfQjJfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjJfQl9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMV9FUV9CMl9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CMl9CX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMxX0VRX0IyX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTU5ICgweDQ4NykgLSBBSUYxIERBQzEgRVEgQmFuZCAyIEMKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjJfQ19NQVNLICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMV9FUV9CMl9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CMl9DX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMxX0VRX0IyX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IyX0NfV0lEVEggICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzFfRVFfQjJfQyAtIFsxNTowXSAqLworCisvKgorICogUjExNjAgKDB4NDg4KSAtIEFJRjEgREFDMSBFUSBCYW5kIDIgUEcKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjJfUEdfTUFTSyAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMV9FUV9CMl9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjJfUEdfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMV9FUV9CMl9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjJfUEdfV0lEVEggICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMV9FUV9CMl9QRyAtIFsxNTowXSAqLworCisvKgorICogUjExNjEgKDB4NDg5KSAtIEFJRjEgREFDMSBFUSBCYW5kIDMgQQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CM19BX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMxX0VRX0IzX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IzX0FfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFfRVFfQjNfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjNfQV9XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMV9FUV9CM19BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE2MiAoMHg0OEEpIC0gQUlGMSBEQUMxIEVRIEJhbmQgMyBCCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IzX0JfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzFfRVFfQjNfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjNfQl9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMV9FUV9CM19CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CM19CX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMxX0VRX0IzX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTYzICgweDQ4QikgLSBBSUYxIERBQzEgRVEgQmFuZCAzIEMKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjNfQ19NQVNLICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMV9FUV9CM19DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CM19DX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMxX0VRX0IzX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0IzX0NfV0lEVEggICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzFfRVFfQjNfQyAtIFsxNTowXSAqLworCisvKgorICogUjExNjQgKDB4NDhDKSAtIEFJRjEgREFDMSBFUSBCYW5kIDMgUEcKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjNfUEdfTUFTSyAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMV9FUV9CM19QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjNfUEdfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMV9FUV9CM19QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjNfUEdfV0lEVEggICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMV9FUV9CM19QRyAtIFsxNTowXSAqLworCisvKgorICogUjExNjUgKDB4NDhEKSAtIEFJRjEgREFDMSBFUSBCYW5kIDQgQQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CNF9BX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMxX0VRX0I0X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0I0X0FfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFfRVFfQjRfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjRfQV9XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMV9FUV9CNF9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE2NiAoMHg0OEUpIC0gQUlGMSBEQUMxIEVRIEJhbmQgNCBCCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0I0X0JfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzFfRVFfQjRfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjRfQl9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMV9FUV9CNF9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CNF9CX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMxX0VRX0I0X0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTY3ICgweDQ4RikgLSBBSUYxIERBQzEgRVEgQmFuZCA0IEMKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjRfQ19NQVNLICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMV9FUV9CNF9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CNF9DX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMxX0VRX0I0X0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0I0X0NfV0lEVEggICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzFfRVFfQjRfQyAtIFsxNTowXSAqLworCisvKgorICogUjExNjggKDB4NDkwKSAtIEFJRjEgREFDMSBFUSBCYW5kIDQgUEcKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjRfUEdfTUFTSyAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMV9FUV9CNF9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjRfUEdfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMV9FUV9CNF9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjRfUEdfV0lEVEggICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMV9FUV9CNF9QRyAtIFsxNTowXSAqLworCisvKgorICogUjExNjkgKDB4NDkxKSAtIEFJRjEgREFDMSBFUSBCYW5kIDUgQQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CNV9BX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMxX0VRX0I1X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0I1X0FfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFfRVFfQjVfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjVfQV9XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMV9FUV9CNV9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE3MCAoMHg0OTIpIC0gQUlGMSBEQUMxIEVRIEJhbmQgNSBCCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0I1X0JfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzFfRVFfQjVfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFfRVFfQjVfQl9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMV9FUV9CNV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMV9FUV9CNV9CX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMxX0VRX0I1X0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTcxICgweDQ5MykgLSBBSUYxIERBQzEgRVEgQmFuZCA1IFBHCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0I1X1BHX01BU0sgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzFfRVFfQjVfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0I1X1BHX1NISUZUICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFfRVFfQjVfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxX0VRX0I1X1BHX1dJRFRIICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzFfRVFfQjVfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTg0ICgweDRBMCkgLSBBSUYxIERBQzIgRVEgR2FpbnMgKDEpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IxX0dBSU5fTUFTSyAgICAgICAgIDB4RjgwMCAgLyogQUlGMURBQzJfRVFfQjFfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IxX0dBSU5fU0hJRlQgICAgICAgICAgICAxMSAgLyogQUlGMURBQzJfRVFfQjFfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IxX0dBSU5fV0lEVEggICAgICAgICAgICAgNSAgLyogQUlGMURBQzJfRVFfQjFfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IyX0dBSU5fTUFTSyAgICAgICAgIDB4MDdDMCAgLyogQUlGMURBQzJfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjJfR0FJTl9TSElGVCAgICAgICAgICAgICA2ICAvKiBBSUYxREFDMl9FUV9CMl9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CMl9HQUlOX1dJRFRIICAgICAgICAgICAgIDUgIC8qIEFJRjFEQUMyX0VRX0IyX0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IzX0dBSU5fTUFTSyAgICAgICAgIDB4MDAzRSAgLyogQUlGMURBQzJfRVFfQjNfR0FJTiAtIFs1OjFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CM19HQUlOX1NISUZUICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMyX0VRX0IzX0dBSU4gLSBbNToxXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjNfR0FJTl9XSURUSCAgICAgICAgICAgICA1ICAvKiBBSUYxREFDMl9FUV9CM19HQUlOIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0VOQSAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMURBQzJfRVFfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9FTkFfTUFTSyAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFEQUMyX0VRX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMl9FUV9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0VOQV9XSURUSCAgICAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzJfRVFfRU5BICovCisKKy8qCisgKiBSMTE4NSAoMHg0QTEpIC0gQUlGMSBEQUMyIEVRIEdhaW5zICgyKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CNF9HQUlOX01BU0sgICAgICAgICAweEY4MDAgIC8qIEFJRjFEQUMyX0VRX0I0X0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CNF9HQUlOX1NISUZUICAgICAgICAgICAgMTEgIC8qIEFJRjFEQUMyX0VRX0I0X0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CNF9HQUlOX1dJRFRIICAgICAgICAgICAgIDUgIC8qIEFJRjFEQUMyX0VRX0I0X0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CNV9HQUlOX01BU0sgICAgICAgICAweDA3QzAgIC8qIEFJRjFEQUMyX0VRX0I1X0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0I1X0dBSU5fU0hJRlQgICAgICAgICAgICAgNiAgLyogQUlGMURBQzJfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjVfR0FJTl9XSURUSCAgICAgICAgICAgICA1ICAvKiBBSUYxREFDMl9FUV9CNV9HQUlOIC0gWzEwOjZdICovCisKKy8qCisgKiBSMTE4NiAoMHg0QTIpIC0gQUlGMSBEQUMyIEVRIEJhbmQgMSBBCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IxX0FfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzJfRVFfQjFfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjFfQV9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMl9FUV9CMV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CMV9BX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMyX0VRX0IxX0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTg3ICgweDRBMykgLSBBSUYxIERBQzIgRVEgQmFuZCAxIEIKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjFfQl9NQVNLICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMl9FUV9CMV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CMV9CX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMyX0VRX0IxX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IxX0JfV0lEVEggICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzJfRVFfQjFfQiAtIFsxNTowXSAqLworCisvKgorICogUjExODggKDB4NEE0KSAtIEFJRjEgREFDMiBFUSBCYW5kIDEgUEcKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjFfUEdfTUFTSyAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMl9FUV9CMV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjFfUEdfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMl9FUV9CMV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjFfUEdfV0lEVEggICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMl9FUV9CMV9QRyAtIFsxNTowXSAqLworCisvKgorICogUjExODkgKDB4NEE1KSAtIEFJRjEgREFDMiBFUSBCYW5kIDIgQQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CMl9BX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMyX0VRX0IyX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IyX0FfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzJfRVFfQjJfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjJfQV9XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMl9FUV9CMl9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE5MCAoMHg0QTYpIC0gQUlGMSBEQUMyIEVRIEJhbmQgMiBCCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IyX0JfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzJfRVFfQjJfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjJfQl9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMl9FUV9CMl9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CMl9CX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMyX0VRX0IyX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTkxICgweDRBNykgLSBBSUYxIERBQzIgRVEgQmFuZCAyIEMKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjJfQ19NQVNLICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMl9FUV9CMl9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CMl9DX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMyX0VRX0IyX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IyX0NfV0lEVEggICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzJfRVFfQjJfQyAtIFsxNTowXSAqLworCisvKgorICogUjExOTIgKDB4NEE4KSAtIEFJRjEgREFDMiBFUSBCYW5kIDIgUEcKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjJfUEdfTUFTSyAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMl9FUV9CMl9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjJfUEdfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMl9FUV9CMl9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjJfUEdfV0lEVEggICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMl9FUV9CMl9QRyAtIFsxNTowXSAqLworCisvKgorICogUjExOTMgKDB4NEE5KSAtIEFJRjEgREFDMiBFUSBCYW5kIDMgQQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CM19BX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMyX0VRX0IzX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IzX0FfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzJfRVFfQjNfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjNfQV9XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMl9FUV9CM19BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE5NCAoMHg0QUEpIC0gQUlGMSBEQUMyIEVRIEJhbmQgMyBCCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IzX0JfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzJfRVFfQjNfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjNfQl9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMl9FUV9CM19CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CM19CX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMyX0VRX0IzX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTk1ICgweDRBQikgLSBBSUYxIERBQzIgRVEgQmFuZCAzIEMKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjNfQ19NQVNLICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMl9FUV9CM19DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CM19DX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMyX0VRX0IzX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0IzX0NfV0lEVEggICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzJfRVFfQjNfQyAtIFsxNTowXSAqLworCisvKgorICogUjExOTYgKDB4NEFDKSAtIEFJRjEgREFDMiBFUSBCYW5kIDMgUEcKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjNfUEdfTUFTSyAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMl9FUV9CM19QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjNfUEdfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMl9FUV9CM19QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjNfUEdfV0lEVEggICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMl9FUV9CM19QRyAtIFsxNTowXSAqLworCisvKgorICogUjExOTcgKDB4NEFEKSAtIEFJRjEgREFDMiBFUSBCYW5kIDQgQQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CNF9BX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMyX0VRX0I0X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0I0X0FfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzJfRVFfQjRfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjRfQV9XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMl9FUV9CNF9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTE5OCAoMHg0QUUpIC0gQUlGMSBEQUMyIEVRIEJhbmQgNCBCCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0I0X0JfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzJfRVFfQjRfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjRfQl9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMl9FUV9CNF9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CNF9CX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMyX0VRX0I0X0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMTk5ICgweDRBRikgLSBBSUYxIERBQzIgRVEgQmFuZCA0IEMKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjRfQ19NQVNLICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMl9FUV9CNF9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CNF9DX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMyX0VRX0I0X0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0I0X0NfV0lEVEggICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzJfRVFfQjRfQyAtIFsxNTowXSAqLworCisvKgorICogUjEyMDAgKDB4NEIwKSAtIEFJRjEgREFDMiBFUSBCYW5kIDQgUEcKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjRfUEdfTUFTSyAgICAgICAgICAgMHhGRkZGICAvKiBBSUYxREFDMl9FUV9CNF9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjRfUEdfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMl9FUV9CNF9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjRfUEdfV0lEVEggICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMl9FUV9CNF9QRyAtIFsxNTowXSAqLworCisvKgorICogUjEyMDEgKDB4NEIxKSAtIEFJRjEgREFDMiBFUSBCYW5kIDUgQQorICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CNV9BX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjFEQUMyX0VRX0I1X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0I1X0FfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzJfRVFfQjVfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjVfQV9XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYxREFDMl9FUV9CNV9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTIwMiAoMHg0QjIpIC0gQUlGMSBEQUMyIEVRIEJhbmQgNSBCCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0I1X0JfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzJfRVFfQjVfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJfRVFfQjVfQl9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMl9FUV9CNV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMl9FUV9CNV9CX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjFEQUMyX0VRX0I1X0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMjAzICgweDRCMykgLSBBSUYxIERBQzIgRVEgQmFuZCA1IFBHCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0I1X1BHX01BU0sgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMURBQzJfRVFfQjVfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0I1X1BHX1NISUZUICAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzJfRVFfQjVfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyX0VRX0I1X1BHX1dJRFRIICAgICAgICAgICAgICAxNiAgLyogQUlGMURBQzJfRVFfQjVfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxMjgwICgweDUwMCkgLSBBSUYyIEFEQyBMZWZ0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX1ZVICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjJBRENfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfVlVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMkFEQ19WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYyQURDX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJBRENfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENMX1ZPTF9NQVNLICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogQUlGMkFEQ0xfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMkFEQ0xfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMkFEQ0xfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxMjgxICgweDUwMSkgLSBBSUYyIEFEQyBSaWdodCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19WVSAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYyQURDX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX1ZVX01BU0sgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjJBRENfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMkFEQ19WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyQURDX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDUl9WT0xfTUFTSyAgICAgICAgICAgICAgICAweDAwRkYgIC8qIEFJRjJBRENSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDUl9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJBRENSX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDUl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjJBRENSX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTI4MiAoMHg1MDIpIC0gQUlGMiBEQUMgTGVmdCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19WVSAgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYyREFDX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX1ZVX01BU0sgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIEFJRjJEQUNfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfVlVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMkRBQ19WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19WVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyREFDX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9WT0xfTUFTSyAgICAgICAgICAgICAgICAweDAwRkYgIC8qIEFJRjJEQUNMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJEQUNMX1ZPTCAtIFs3OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjJEQUNMX1ZPTCAtIFs3OjBdICovCisKKy8qCisgKiBSMTI4MyAoMHg1MDMpIC0gQUlGMiBEQUMgUmlnaHQgVm9sdW1lCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfVlUgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMkRBQ19WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19WVV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYyREFDX1ZVICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDggIC8qIEFJRjJEQUNfVlUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkRBQ19WVSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfVk9MX01BU0sgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBBSUYyREFDUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBBSUYyREFDUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYyREFDUl9WT0wgLSBbNzowXSAqLworCisvKgorICogUjEyOTYgKDB4NTEwKSAtIEFJRjIgQURDIEZpbHRlcnMKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ180RlMgICAgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYyQURDXzRGUyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ180RlNfTUFTSyAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBBSUYyQURDXzRGUyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ180RlNfU0hJRlQgICAgICAgICAgICAgICAgICAgIDE1ICAvKiBBSUYyQURDXzRGUyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ180RlNfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyQURDXzRGUyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ19IUEZfQ1VUX01BU0sgICAgICAgICAgICAgMHg2MDAwICAvKiBBSUYyQURDX0hQRl9DVVQgLSBbMTQ6MTNdICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDX0hQRl9DVVRfU0hJRlQgICAgICAgICAgICAgICAgMTMgIC8qIEFJRjJBRENfSFBGX0NVVCAtIFsxNDoxM10gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENfSFBGX0NVVF9XSURUSCAgICAgICAgICAgICAgICAgMiAgLyogQUlGMkFEQ19IUEZfQ1VUIC0gWzE0OjEzXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ0xfSFBGICAgICAgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBBSUYyQURDTF9IUEYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENMX0hQRl9NQVNLICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogQUlGMkFEQ0xfSFBGICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDTF9IUEZfU0hJRlQgICAgICAgICAgICAgICAgICAgMTIgIC8qIEFJRjJBRENMX0hQRiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ0xfSFBGX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyQURDTF9IUEYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENSX0hQRiAgICAgICAgICAgICAgICAgICAgIDB4MDgwMCAgLyogQUlGMkFEQ1JfSFBGICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDUl9IUEZfTUFTSyAgICAgICAgICAgICAgICAweDA4MDAgIC8qIEFJRjJBRENSX0hQRiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ1JfSFBGX1NISUZUICAgICAgICAgICAgICAgICAgIDExICAvKiBBSUYyQURDUl9IUEYgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENSX0hQRl9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkFEQ1JfSFBGICovCisKKy8qCisgKiBSMTMxMiAoMHg1MjApIC0gQUlGMiBEQUMgRmlsdGVycyAoMSkKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19NVVRFICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBBSUYyREFDX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfTVVURV9NQVNLICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogQUlGMkRBQ19NVVRFICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgIDkgIC8qIEFJRjJEQUNfTVVURSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBBSUYyREFDX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfTU9OTyAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogQUlGMkRBQ19NT05PICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX01PTk9fTUFTSyAgICAgICAgICAgICAgICAweDAwODAgIC8qIEFJRjJEQUNfTU9OTyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19NT05PX1NISUZUICAgICAgICAgICAgICAgICAgICA3ICAvKiBBSUYyREFDX01PTk8gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfTU9OT19XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkRBQ19NT05PICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX01VVEVSQVRFICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFJRjJEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfTVVURVJBVEVfTUFTSyAgICAgICAgICAgIDB4MDAyMCAgLyogQUlGMkRBQ19NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19NVVRFUkFURV9TSElGVCAgICAgICAgICAgICAgICA1ICAvKiBBSUYyREFDX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX01VVEVSQVRFX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfVU5NVVRFX1JBTVAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQUlGMkRBQ19VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19VTk1VVEVfUkFNUF9NQVNLICAgICAgICAgMHgwMDEwICAvKiBBSUYyREFDX1VOTVVURV9SQU1QICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX1VOTVVURV9SQU1QX1NISUZUICAgICAgICAgICAgIDQgIC8qIEFJRjJEQUNfVU5NVVRFX1JBTVAgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfVU5NVVRFX1JBTVBfV0lEVEggICAgICAgICAgICAgMSAgLyogQUlGMkRBQ19VTk1VVEVfUkFNUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19ERUVNUF9NQVNLICAgICAgICAgICAgICAgMHgwMDA2ICAvKiBBSUYyREFDX0RFRU1QIC0gWzI6MV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfREVFTVBfU0hJRlQgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkRBQ19ERUVNUCAtIFsyOjFdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0RFRU1QX1dJRFRIICAgICAgICAgICAgICAgICAgIDIgIC8qIEFJRjJEQUNfREVFTVAgLSBbMjoxXSAqLworCisvKgorICogUjEzMTMgKDB4NTIxKSAtIEFJRjIgREFDIEZpbHRlcnMgKDIpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfM0RfR0FJTl9NQVNLICAgICAgICAgICAgIDB4M0UwMCAgLyogQUlGMkRBQ18zRF9HQUlOIC0gWzEzOjldICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDXzNEX0dBSU5fU0hJRlQgICAgICAgICAgICAgICAgIDkgIC8qIEFJRjJEQUNfM0RfR0FJTiAtIFsxMzo5XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ18zRF9HQUlOX1dJRFRIICAgICAgICAgICAgICAgICA1ICAvKiBBSUYyREFDXzNEX0dBSU4gLSBbMTM6OV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfM0RfRU5BICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMkRBQ18zRF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfM0RfRU5BX01BU0sgICAgICAgICAgICAgIDB4MDEwMCAgLyogQUlGMkRBQ18zRF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfM0RfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMkRBQ18zRF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfM0RfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkRBQ18zRF9FTkEgKi8KKworLyoKKyAqIFIxMzQ0ICgweDU0MCkgLSBBSUYyIERSQyAoMSkKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19TSUdfREVUX1JNU19NQVNLICAgICAgICAgMHhGODAwICAvKiBBSUYyRFJDX1NJR19ERVRfUk1TIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19TSUdfREVUX1JNU19TSElGVCAgICAgICAgICAgIDExICAvKiBBSUYyRFJDX1NJR19ERVRfUk1TIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19TSUdfREVUX1JNU19XSURUSCAgICAgICAgICAgICA1ICAvKiBBSUYyRFJDX1NJR19ERVRfUk1TIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19TSUdfREVUX1BLX01BU0sgICAgICAgICAgMHgwNjAwICAvKiBBSUYyRFJDX1NJR19ERVRfUEsgLSBbMTA6OV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfU0lHX0RFVF9QS19TSElGVCAgICAgICAgICAgICAgOSAgLyogQUlGMkRSQ19TSUdfREVUX1BLIC0gWzEwOjldICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX1NJR19ERVRfUEtfV0lEVEggICAgICAgICAgICAgIDIgIC8qIEFJRjJEUkNfU0lHX0RFVF9QSyAtIFsxMDo5XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19OR19FTkEgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYyRFJDX05HX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19OR19FTkFfTUFTSyAgICAgICAgICAgICAgMHgwMTAwICAvKiBBSUYyRFJDX05HX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19OR19FTkFfU0hJRlQgICAgICAgICAgICAgICAgICA4ICAvKiBBSUYyRFJDX05HX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19OR19FTkFfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBBSUYyRFJDX05HX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19TSUdfREVUX01PREUgICAgICAgICAgICAgMHgwMDgwICAvKiBBSUYyRFJDX1NJR19ERVRfTU9ERSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19TSUdfREVUX01PREVfTUFTSyAgICAgICAgMHgwMDgwICAvKiBBSUYyRFJDX1NJR19ERVRfTU9ERSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19TSUdfREVUX01PREVfU0hJRlQgICAgICAgICAgICA3ICAvKiBBSUYyRFJDX1NJR19ERVRfTU9ERSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19TSUdfREVUX01PREVfV0lEVEggICAgICAgICAgICAxICAvKiBBSUYyRFJDX1NJR19ERVRfTU9ERSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19TSUdfREVUICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBBSUYyRFJDX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfU0lHX0RFVF9NQVNLICAgICAgICAgICAgIDB4MDA0MCAgLyogQUlGMkRSQ19TSUdfREVUICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX1NJR19ERVRfU0hJRlQgICAgICAgICAgICAgICAgIDYgIC8qIEFJRjJEUkNfU0lHX0RFVCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19TSUdfREVUX1dJRFRIICAgICAgICAgICAgICAgICAxICAvKiBBSUYyRFJDX1NJR19ERVQgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfS05FRTJfT1BfRU5BICAgICAgICAgICAgIDB4MDAyMCAgLyogQUlGMkRSQ19LTkVFMl9PUF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfS05FRTJfT1BfRU5BX01BU0sgICAgICAgIDB4MDAyMCAgLyogQUlGMkRSQ19LTkVFMl9PUF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfS05FRTJfT1BfRU5BX1NISUZUICAgICAgICAgICAgNSAgLyogQUlGMkRSQ19LTkVFMl9PUF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfS05FRTJfT1BfRU5BX1dJRFRIICAgICAgICAgICAgMSAgLyogQUlGMkRSQ19LTkVFMl9PUF9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfUVIgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQUlGMkRSQ19RUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19RUl9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBSUYyRFJDX1FSICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX1FSX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIEFJRjJEUkNfUVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfUVJfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkRSQ19RUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19BTlRJQ0xJUCAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBBSUYyRFJDX0FOVElDTElQICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0FOVElDTElQX01BU0sgICAgICAgICAgICAweDAwMDggIC8qIEFJRjJEUkNfQU5USUNMSVAgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfQU5USUNMSVBfU0hJRlQgICAgICAgICAgICAgICAgMyAgLyogQUlGMkRSQ19BTlRJQ0xJUCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19BTlRJQ0xJUF9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYyRFJDX0FOVElDTElQICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0RSQ19FTkEgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjJEQUNfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19EUkNfRU5BX01BU0sgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYyREFDX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRFJDX0VOQV9TSElGVCAgICAgICAgICAgICAgICAgMiAgLyogQUlGMkRBQ19EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0RSQ19FTkFfV0lEVEggICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ0xfRFJDX0VOQSAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYyQURDTF9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDTF9EUkNfRU5BX01BU0sgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjJBRENMX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENMX0RSQ19FTkFfU0hJRlQgICAgICAgICAgICAgICAgMSAgLyogQUlGMkFEQ0xfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ0xfRFJDX0VOQV9XSURUSCAgICAgICAgICAgICAgICAxICAvKiBBSUYyQURDTF9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDUl9EUkNfRU5BICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJBRENSX0RSQ19FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJBRENSX0RSQ19FTkFfTUFTSyAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMkFEQ1JfRFJDX0VOQSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkFEQ1JfRFJDX0VOQV9TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYyQURDUl9EUkNfRU5BICovCisjZGVmaW5lIFdNODk5NF9BSUYyQURDUl9EUkNfRU5BX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIEFJRjJBRENSX0RSQ19FTkEgKi8KKworLyoKKyAqIFIxMzQ1ICgweDU0MSkgLSBBSUYyIERSQyAoMikKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19BVEtfTUFTSyAgICAgICAgICAgICAgICAgMHgxRTAwICAvKiBBSUYyRFJDX0FUSyAtIFsxMjo5XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19BVEtfU0hJRlQgICAgICAgICAgICAgICAgICAgICA5ICAvKiBBSUYyRFJDX0FUSyAtIFsxMjo5XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19BVEtfV0lEVEggICAgICAgICAgICAgICAgICAgICA0ICAvKiBBSUYyRFJDX0FUSyAtIFsxMjo5XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19EQ1lfTUFTSyAgICAgICAgICAgICAgICAgMHgwMUUwICAvKiBBSUYyRFJDX0RDWSAtIFs4OjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0RDWV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDUgIC8qIEFJRjJEUkNfRENZIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfRENZX1dJRFRIICAgICAgICAgICAgICAgICAgICAgNCAgLyogQUlGMkRSQ19EQ1kgLSBbODo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19NSU5HQUlOX01BU0sgICAgICAgICAgICAgMHgwMDFDICAvKiBBSUYyRFJDX01JTkdBSU4gLSBbNDoyXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19NSU5HQUlOX1NISUZUICAgICAgICAgICAgICAgICAyICAvKiBBSUYyRFJDX01JTkdBSU4gLSBbNDoyXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19NSU5HQUlOX1dJRFRIICAgICAgICAgICAgICAgICAzICAvKiBBSUYyRFJDX01JTkdBSU4gLSBbNDoyXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19NQVhHQUlOX01BU0sgICAgICAgICAgICAgMHgwMDAzICAvKiBBSUYyRFJDX01BWEdBSU4gLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19NQVhHQUlOX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBBSUYyRFJDX01BWEdBSU4gLSBbMTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19NQVhHQUlOX1dJRFRIICAgICAgICAgICAgICAgICAyICAvKiBBSUYyRFJDX01BWEdBSU4gLSBbMTowXSAqLworCisvKgorICogUjEzNDYgKDB4NTQyKSAtIEFJRjIgRFJDICgzKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX05HX01JTkdBSU5fTUFTSyAgICAgICAgICAweEYwMDAgIC8qIEFJRjJEUkNfTkdfTUlOR0FJTiAtIFsxNToxMl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfTkdfTUlOR0FJTl9TSElGVCAgICAgICAgICAgICAxMiAgLyogQUlGMkRSQ19OR19NSU5HQUlOIC0gWzE1OjEyXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19OR19NSU5HQUlOX1dJRFRIICAgICAgICAgICAgICA0ICAvKiBBSUYyRFJDX05HX01JTkdBSU4gLSBbMTU6MTJdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX05HX0VYUF9NQVNLICAgICAgICAgICAgICAweDBDMDAgIC8qIEFJRjJEUkNfTkdfRVhQIC0gWzExOjEwXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19OR19FWFBfU0hJRlQgICAgICAgICAgICAgICAgIDEwICAvKiBBSUYyRFJDX05HX0VYUCAtIFsxMToxMF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfTkdfRVhQX1dJRFRIICAgICAgICAgICAgICAgICAgMiAgLyogQUlGMkRSQ19OR19FWFAgLSBbMTE6MTBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX1FSX1RIUl9NQVNLICAgICAgICAgICAgICAweDAzMDAgIC8qIEFJRjJEUkNfUVJfVEhSIC0gWzk6OF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfUVJfVEhSX1NISUZUICAgICAgICAgICAgICAgICAgOCAgLyogQUlGMkRSQ19RUl9USFIgLSBbOTo4XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19RUl9USFJfV0lEVEggICAgICAgICAgICAgICAgICAyICAvKiBBSUYyRFJDX1FSX1RIUiAtIFs5OjhdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX1FSX0RDWV9NQVNLICAgICAgICAgICAgICAweDAwQzAgIC8qIEFJRjJEUkNfUVJfRENZIC0gWzc6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfUVJfRENZX1NISUZUICAgICAgICAgICAgICAgICAgNiAgLyogQUlGMkRSQ19RUl9EQ1kgLSBbNzo2XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19RUl9EQ1lfV0lEVEggICAgICAgICAgICAgICAgICAyICAvKiBBSUYyRFJDX1FSX0RDWSAtIFs3OjZdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0hJX0NPTVBfTUFTSyAgICAgICAgICAgICAweDAwMzggIC8qIEFJRjJEUkNfSElfQ09NUCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0hJX0NPTVBfU0hJRlQgICAgICAgICAgICAgICAgIDMgIC8qIEFJRjJEUkNfSElfQ09NUCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0hJX0NPTVBfV0lEVEggICAgICAgICAgICAgICAgIDMgIC8qIEFJRjJEUkNfSElfQ09NUCAtIFs1OjNdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0xPX0NPTVBfTUFTSyAgICAgICAgICAgICAweDAwMDcgIC8qIEFJRjJEUkNfTE9fQ09NUCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0xPX0NPTVBfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJEUkNfTE9fQ09NUCAtIFsyOjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0xPX0NPTVBfV0lEVEggICAgICAgICAgICAgICAgIDMgIC8qIEFJRjJEUkNfTE9fQ09NUCAtIFsyOjBdICovCisKKy8qCisgKiBSMTM0NyAoMHg1NDMpIC0gQUlGMiBEUkMgKDQpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfS05FRV9JUF9NQVNLICAgICAgICAgICAgIDB4MDdFMCAgLyogQUlGMkRSQ19LTkVFX0lQIC0gWzEwOjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0tORUVfSVBfU0hJRlQgICAgICAgICAgICAgICAgIDUgIC8qIEFJRjJEUkNfS05FRV9JUCAtIFsxMDo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19LTkVFX0lQX1dJRFRIICAgICAgICAgICAgICAgICA2ICAvKiBBSUYyRFJDX0tORUVfSVAgLSBbMTA6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfS05FRV9PUF9NQVNLICAgICAgICAgICAgIDB4MDAxRiAgLyogQUlGMkRSQ19LTkVFX09QIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfS05FRV9PUF9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMkRSQ19LTkVFX09QIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfS05FRV9PUF9XSURUSCAgICAgICAgICAgICAgICAgNSAgLyogQUlGMkRSQ19LTkVFX09QIC0gWzQ6MF0gKi8KKworLyoKKyAqIFIxMzQ4ICgweDU0NCkgLSBBSUYyIERSQyAoNSkKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19LTkVFMl9JUF9NQVNLICAgICAgICAgICAgMHgwM0UwICAvKiBBSUYyRFJDX0tORUUyX0lQIC0gWzk6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfS05FRTJfSVBfU0hJRlQgICAgICAgICAgICAgICAgNSAgLyogQUlGMkRSQ19LTkVFMl9JUCAtIFs5OjVdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0tORUUyX0lQX1dJRFRIICAgICAgICAgICAgICAgIDUgIC8qIEFJRjJEUkNfS05FRTJfSVAgLSBbOTo1XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19LTkVFMl9PUF9NQVNLICAgICAgICAgICAgMHgwMDFGICAvKiBBSUYyRFJDX0tORUUyX09QIC0gWzQ6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfS05FRTJfT1BfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMkRSQ19LTkVFMl9PUCAtIFs0OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX0tORUUyX09QX1dJRFRIICAgICAgICAgICAgICAgIDUgIC8qIEFJRjJEUkNfS05FRTJfT1AgLSBbNDowXSAqLworCisvKgorICogUjE0MDggKDB4NTgwKSAtIEFJRjIgRVEgR2FpbnMgKDEpCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjFfR0FJTl9NQVNLICAgICAgICAgIDB4RjgwMCAgLyogQUlGMkRBQ19FUV9CMV9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CMV9HQUlOX1NISUZUICAgICAgICAgICAgIDExICAvKiBBSUYyREFDX0VRX0IxX0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IxX0dBSU5fV0lEVEggICAgICAgICAgICAgIDUgIC8qIEFJRjJEQUNfRVFfQjFfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjJfR0FJTl9NQVNLICAgICAgICAgIDB4MDdDMCAgLyogQUlGMkRBQ19FUV9CMl9HQUlOIC0gWzEwOjZdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IyX0dBSU5fU0hJRlQgICAgICAgICAgICAgIDYgIC8qIEFJRjJEQUNfRVFfQjJfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CMl9HQUlOX1dJRFRIICAgICAgICAgICAgICA1ICAvKiBBSUYyREFDX0VRX0IyX0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjNfR0FJTl9NQVNLICAgICAgICAgIDB4MDAzRSAgLyogQUlGMkRBQ19FUV9CM19HQUlOIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjNfR0FJTl9TSElGVCAgICAgICAgICAgICAgMSAgLyogQUlGMkRBQ19FUV9CM19HQUlOIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjNfR0FJTl9XSURUSCAgICAgICAgICAgICAgNSAgLyogQUlGMkRBQ19FUV9CM19HQUlOIC0gWzU6MV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfRU5BICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMkRBQ19FUV9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfRU5BX01BU0sgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMkRBQ19FUV9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfRU5BX1NISUZUICAgICAgICAgICAgICAgICAgMCAgLyogQUlGMkRBQ19FUV9FTkEgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfRU5BX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogQUlGMkRBQ19FUV9FTkEgKi8KKworLyoKKyAqIFIxNDA5ICgweDU4MSkgLSBBSUYyIEVRIEdhaW5zICgyKQorICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0I0X0dBSU5fTUFTSyAgICAgICAgICAweEY4MDAgIC8qIEFJRjJEQUNfRVFfQjRfR0FJTiAtIFsxNToxMV0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjRfR0FJTl9TSElGVCAgICAgICAgICAgICAxMSAgLyogQUlGMkRBQ19FUV9CNF9HQUlOIC0gWzE1OjExXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CNF9HQUlOX1dJRFRIICAgICAgICAgICAgICA1ICAvKiBBSUYyREFDX0VRX0I0X0dBSU4gLSBbMTU6MTFdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0I1X0dBSU5fTUFTSyAgICAgICAgICAweDA3QzAgIC8qIEFJRjJEQUNfRVFfQjVfR0FJTiAtIFsxMDo2XSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CNV9HQUlOX1NISUZUICAgICAgICAgICAgICA2ICAvKiBBSUYyREFDX0VRX0I1X0dBSU4gLSBbMTA6Nl0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjVfR0FJTl9XSURUSCAgICAgICAgICAgICAgNSAgLyogQUlGMkRBQ19FUV9CNV9HQUlOIC0gWzEwOjZdICovCisKKy8qCisgKiBSMTQxMCAoMHg1ODIpIC0gQUlGMiBFUSBCYW5kIDEgQQorICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IxX0FfTUFTSyAgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjJEQUNfRVFfQjFfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CMV9BX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBBSUYyREFDX0VRX0IxX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjFfQV9XSURUSCAgICAgICAgICAgICAgICAxNiAgLyogQUlGMkRBQ19FUV9CMV9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQxMSAoMHg1ODMpIC0gQUlGMiBFUSBCYW5kIDEgQgorICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IxX0JfTUFTSyAgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjJEQUNfRVFfQjFfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CMV9CX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBBSUYyREFDX0VRX0IxX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjFfQl9XSURUSCAgICAgICAgICAgICAgICAxNiAgLyogQUlGMkRBQ19FUV9CMV9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQxMiAoMHg1ODQpIC0gQUlGMiBFUSBCYW5kIDEgUEcKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CMV9QR19NQVNLICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYyREFDX0VRX0IxX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IxX1BHX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJEQUNfRVFfQjFfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjFfUEdfV0lEVEggICAgICAgICAgICAgICAxNiAgLyogQUlGMkRBQ19FUV9CMV9QRyAtIFsxNTowXSAqLworCisvKgorICogUjE0MTMgKDB4NTg1KSAtIEFJRjIgRVEgQmFuZCAyIEEKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CMl9BX01BU0sgICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYyREFDX0VRX0IyX0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjJfQV9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMkRBQ19FUV9CMl9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IyX0FfV0lEVEggICAgICAgICAgICAgICAgMTYgIC8qIEFJRjJEQUNfRVFfQjJfQSAtIFsxNTowXSAqLworCisvKgorICogUjE0MTQgKDB4NTg2KSAtIEFJRjIgRVEgQmFuZCAyIEIKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CMl9CX01BU0sgICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYyREFDX0VRX0IyX0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjJfQl9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMkRBQ19FUV9CMl9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IyX0JfV0lEVEggICAgICAgICAgICAgICAgMTYgIC8qIEFJRjJEQUNfRVFfQjJfQiAtIFsxNTowXSAqLworCisvKgorICogUjE0MTUgKDB4NTg3KSAtIEFJRjIgRVEgQmFuZCAyIEMKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CMl9DX01BU0sgICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYyREFDX0VRX0IyX0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjJfQ19TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMkRBQ19FUV9CMl9DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IyX0NfV0lEVEggICAgICAgICAgICAgICAgMTYgIC8qIEFJRjJEQUNfRVFfQjJfQyAtIFsxNTowXSAqLworCisvKgorICogUjE0MTYgKDB4NTg4KSAtIEFJRjIgRVEgQmFuZCAyIFBHCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjJfUEdfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMkRBQ19FUV9CMl9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CMl9QR19TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYyREFDX0VRX0IyX1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IyX1BHX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjJEQUNfRVFfQjJfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDE3ICgweDU4OSkgLSBBSUYyIEVRIEJhbmQgMyBBCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjNfQV9NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMkRBQ19FUV9CM19BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IzX0FfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJEQUNfRVFfQjNfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CM19BX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBBSUYyREFDX0VRX0IzX0EgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDE4ICgweDU4QSkgLSBBSUYyIEVRIEJhbmQgMyBCCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjNfQl9NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMkRBQ19FUV9CM19CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IzX0JfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJEQUNfRVFfQjNfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CM19CX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBBSUYyREFDX0VRX0IzX0IgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDE5ICgweDU4QikgLSBBSUYyIEVRIEJhbmQgMyBDCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjNfQ19NQVNLICAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMkRBQ19FUV9CM19DIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IzX0NfU0hJRlQgICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJEQUNfRVFfQjNfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CM19DX1dJRFRIICAgICAgICAgICAgICAgIDE2ICAvKiBBSUYyREFDX0VRX0IzX0MgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNDIwICgweDU4QykgLSBBSUYyIEVRIEJhbmQgMyBQRworICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0IzX1BHX01BU0sgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjJEQUNfRVFfQjNfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjNfUEdfU0hJRlQgICAgICAgICAgICAgICAgMCAgLyogQUlGMkRBQ19FUV9CM19QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CM19QR19XSURUSCAgICAgICAgICAgICAgIDE2ICAvKiBBSUYyREFDX0VRX0IzX1BHIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQyMSAoMHg1OEQpIC0gQUlGMiBFUSBCYW5kIDQgQQorICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0I0X0FfTUFTSyAgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjJEQUNfRVFfQjRfQSAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CNF9BX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBBSUYyREFDX0VRX0I0X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjRfQV9XSURUSCAgICAgICAgICAgICAgICAxNiAgLyogQUlGMkRBQ19FUV9CNF9BIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQyMiAoMHg1OEUpIC0gQUlGMiBFUSBCYW5kIDQgQgorICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0I0X0JfTUFTSyAgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjJEQUNfRVFfQjRfQiAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CNF9CX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBBSUYyREFDX0VRX0I0X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjRfQl9XSURUSCAgICAgICAgICAgICAgICAxNiAgLyogQUlGMkRBQ19FUV9CNF9CIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQyMyAoMHg1OEYpIC0gQUlGMiBFUSBCYW5kIDQgQworICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0I0X0NfTUFTSyAgICAgICAgICAgICAweEZGRkYgIC8qIEFJRjJEQUNfRVFfQjRfQyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CNF9DX1NISUZUICAgICAgICAgICAgICAgICAwICAvKiBBSUYyREFDX0VRX0I0X0MgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjRfQ19XSURUSCAgICAgICAgICAgICAgICAxNiAgLyogQUlGMkRBQ19FUV9CNF9DIC0gWzE1OjBdICovCisKKy8qCisgKiBSMTQyNCAoMHg1OTApIC0gQUlGMiBFUSBCYW5kIDQgUEcKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CNF9QR19NQVNLICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYyREFDX0VRX0I0X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0I0X1BHX1NISUZUICAgICAgICAgICAgICAgIDAgIC8qIEFJRjJEQUNfRVFfQjRfUEcgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjRfUEdfV0lEVEggICAgICAgICAgICAgICAxNiAgLyogQUlGMkRBQ19FUV9CNF9QRyAtIFsxNTowXSAqLworCisvKgorICogUjE0MjUgKDB4NTkxKSAtIEFJRjIgRVEgQmFuZCA1IEEKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CNV9BX01BU0sgICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYyREFDX0VRX0I1X0EgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjVfQV9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMkRBQ19FUV9CNV9BIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0I1X0FfV0lEVEggICAgICAgICAgICAgICAgMTYgIC8qIEFJRjJEQUNfRVFfQjVfQSAtIFsxNTowXSAqLworCisvKgorICogUjE0MjYgKDB4NTkyKSAtIEFJRjIgRVEgQmFuZCA1IEIKKyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CNV9CX01BU0sgICAgICAgICAgICAgMHhGRkZGICAvKiBBSUYyREFDX0VRX0I1X0IgLSBbMTU6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjVfQl9TSElGVCAgICAgICAgICAgICAgICAgMCAgLyogQUlGMkRBQ19FUV9CNV9CIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0I1X0JfV0lEVEggICAgICAgICAgICAgICAgMTYgIC8qIEFJRjJEQUNfRVFfQjVfQiAtIFsxNTowXSAqLworCisvKgorICogUjE0MjcgKDB4NTkzKSAtIEFJRjIgRVEgQmFuZCA1IFBHCisgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNfRVFfQjVfUEdfTUFTSyAgICAgICAgICAgIDB4RkZGRiAgLyogQUlGMkRBQ19FUV9CNV9QRyAtIFsxNTowXSAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ19FUV9CNV9QR19TSElGVCAgICAgICAgICAgICAgICAwICAvKiBBSUYyREFDX0VRX0I1X1BHIC0gWzE1OjBdICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDX0VRX0I1X1BHX1dJRFRIICAgICAgICAgICAgICAgMTYgIC8qIEFJRjJEQUNfRVFfQjVfUEcgLSBbMTU6MF0gKi8KKworLyoKKyAqIFIxNTM2ICgweDYwMCkgLSBEQUMxIE1peGVyIFZvbHVtZXMKKyAqLworI2RlZmluZSBXTTg5OTRfQURDUl9EQUMxX1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwMUUwICAvKiBBRENSX0RBQzFfVk9MIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FEQ1JfREFDMV9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgNSAgLyogQURDUl9EQUMxX1ZPTCAtIFs4OjVdICovCisjZGVmaW5lIFdNODk5NF9BRENSX0RBQzFfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ1JfREFDMV9WT0wgLSBbODo1XSAqLworI2RlZmluZSBXTTg5OTRfQURDTF9EQUMxX1ZPTF9NQVNLICAgICAgICAgICAgICAgMHgwMDBGICAvKiBBRENMX0RBQzFfVk9MIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FEQ0xfREFDMV9WT0xfU0hJRlQgICAgICAgICAgICAgICAgICAgMCAgLyogQURDTF9EQUMxX1ZPTCAtIFszOjBdICovCisjZGVmaW5lIFdNODk5NF9BRENMX0RBQzFfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ0xfREFDMV9WT0wgLSBbMzowXSAqLworCisvKgorICogUjE1MzcgKDB4NjAxKSAtIERBQzEgTGVmdCBNaXhlciBSb3V0aW5nCisgKi8KKyNkZWZpbmUgV004OTk0X0FEQ1JfVE9fREFDMUwgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQURDUl9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTRfQURDUl9UT19EQUMxTF9NQVNLICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBRENSX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5NF9BRENSX1RPX0RBQzFMX1NISUZUICAgICAgICAgICAgICAgICAgIDUgIC8qIEFEQ1JfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk0X0FEQ1JfVE9fREFDMUxfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQURDUl9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTRfQURDTF9UT19EQUMxTCAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBRENMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5NF9BRENMX1RPX0RBQzFMX01BU0sgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFEQ0xfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk0X0FEQ0xfVE9fREFDMUxfU0hJRlQgICAgICAgICAgICAgICAgICAgNCAgLyogQURDTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTRfQURDTF9UT19EQUMxTF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBRENMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9UT19EQUMxTCAgICAgICAgICAgICAgICAweDAwMDQgIC8qIEFJRjJEQUNMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9UT19EQUMxTF9NQVNLICAgICAgICAgICAweDAwMDQgIC8qIEFJRjJEQUNMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9UT19EQUMxTF9TSElGVCAgICAgICAgICAgICAgIDIgIC8qIEFJRjJEQUNMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9UT19EQUMxTF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIEFJRjJEQUNMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMkxfVE9fREFDMUwgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFJRjFEQUMyTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJMX1RPX0RBQzFMX01BU0sgICAgICAgICAgMHgwMDAyICAvKiBBSUYxREFDMkxfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyTF9UT19EQUMxTF9TSElGVCAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzJMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMkxfVE9fREFDMUxfV0lEVEggICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMyTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFMX1RPX0RBQzFMICAgICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYxREFDMUxfVE9fREFDMUwgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxTF9UT19EQUMxTF9NQVNLICAgICAgICAgIDB4MDAwMSAgLyogQUlGMURBQzFMX1RPX0RBQzFMICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMUxfVE9fREFDMUxfU0hJRlQgICAgICAgICAgICAgIDAgIC8qIEFJRjFEQUMxTF9UT19EQUMxTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFMX1RPX0RBQzFMX1dJRFRIICAgICAgICAgICAgICAxICAvKiBBSUYxREFDMUxfVE9fREFDMUwgKi8KKworLyoKKyAqIFIxNTM4ICgweDYwMikgLSBEQUMxIFJpZ2h0IE1peGVyIFJvdXRpbmcKKyAqLworI2RlZmluZSBXTTg5OTRfQURDUl9UT19EQUMxUiAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBRENSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5NF9BRENSX1RPX0RBQzFSX01BU0sgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFEQ1JfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk0X0FEQ1JfVE9fREFDMVJfU0hJRlQgICAgICAgICAgICAgICAgICAgNSAgLyogQURDUl9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5OTRfQURDUl9UT19EQUMxUl9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBRENSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5NF9BRENMX1RPX0RBQzFSICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFEQ0xfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk0X0FEQ0xfVE9fREFDMVJfTUFTSyAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQURDTF9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5OTRfQURDTF9UT19EQUMxUl9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBBRENMX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5NF9BRENMX1RPX0RBQzFSX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0xfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX1RPX0RBQzFSICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMkRBQ1JfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX1RPX0RBQzFSX01BU0sgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMkRBQ1JfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX1RPX0RBQzFSX1NISUZUICAgICAgICAgICAgICAgMiAgLyogQUlGMkRBQ1JfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX1RPX0RBQzFSX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQUlGMkRBQ1JfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyUl9UT19EQUMxUiAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMURBQzJSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMlJfVE9fREFDMVJfTUFTSyAgICAgICAgICAweDAwMDIgIC8qIEFJRjFEQUMyUl9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJSX1RPX0RBQzFSX1NISUZUICAgICAgICAgICAgICAxICAvKiBBSUYxREFDMlJfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyUl9UT19EQUMxUl9XSURUSCAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzJSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMVJfVE9fREFDMVIgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFEQUMxUl9UT19EQUMxUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFSX1RPX0RBQzFSX01BU0sgICAgICAgICAgMHgwMDAxICAvKiBBSUYxREFDMVJfVE9fREFDMVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxUl9UT19EQUMxUl9TSElGVCAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFSX1RPX0RBQzFSICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMVJfVE9fREFDMVJfV0lEVEggICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMxUl9UT19EQUMxUiAqLworCisvKgorICogUjE1MzkgKDB4NjAzKSAtIERBQzIgTWl4ZXIgVm9sdW1lcworICovCisjZGVmaW5lIFdNODk5NF9BRENSX0RBQzJfVk9MX01BU0sgICAgICAgICAgICAgICAweDAxRTAgIC8qIEFEQ1JfREFDMl9WT0wgLSBbODo1XSAqLworI2RlZmluZSBXTTg5OTRfQURDUl9EQUMyX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENSX0RBQzJfVk9MIC0gWzg6NV0gKi8KKyNkZWZpbmUgV004OTk0X0FEQ1JfREFDMl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgNCAgLyogQURDUl9EQUMyX1ZPTCAtIFs4OjVdICovCisjZGVmaW5lIFdNODk5NF9BRENMX0RBQzJfVk9MX01BU0sgICAgICAgICAgICAgICAweDAwMEYgIC8qIEFEQ0xfREFDMl9WT0wgLSBbMzowXSAqLworI2RlZmluZSBXTTg5OTRfQURDTF9EQUMyX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAwICAvKiBBRENMX0RBQzJfVk9MIC0gWzM6MF0gKi8KKyNkZWZpbmUgV004OTk0X0FEQ0xfREFDMl9WT0xfV0lEVEggICAgICAgICAgICAgICAgICAgNCAgLyogQURDTF9EQUMyX1ZPTCAtIFszOjBdICovCisKKy8qCisgKiBSMTU0MCAoMHg2MDQpIC0gREFDMiBMZWZ0IE1peGVyIFJvdXRpbmcKKyAqLworI2RlZmluZSBXTTg5OTRfQURDUl9UT19EQUMyTCAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBBRENSX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NF9BRENSX1RPX0RBQzJMX01BU0sgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFEQ1JfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk0X0FEQ1JfVE9fREFDMkxfU0hJRlQgICAgICAgICAgICAgICAgICAgNSAgLyogQURDUl9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5OTRfQURDUl9UT19EQUMyTF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBBRENSX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NF9BRENMX1RPX0RBQzJMICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIEFEQ0xfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk0X0FEQ0xfVE9fREFDMkxfTUFTSyAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQURDTF9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5OTRfQURDTF9UT19EQUMyTF9TSElGVCAgICAgICAgICAgICAgICAgICA0ICAvKiBBRENMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NF9BRENMX1RPX0RBQzJMX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ0xfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNMX1RPX0RBQzJMICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMkRBQ0xfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNMX1RPX0RBQzJMX01BU0sgICAgICAgICAgIDB4MDAwNCAgLyogQUlGMkRBQ0xfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNMX1RPX0RBQzJMX1NISUZUICAgICAgICAgICAgICAgMiAgLyogQUlGMkRBQ0xfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNMX1RPX0RBQzJMX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogQUlGMkRBQ0xfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyTF9UT19EQUMyTCAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQUlGMURBQzJMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMkxfVE9fREFDMkxfTUFTSyAgICAgICAgICAweDAwMDIgIC8qIEFJRjFEQUMyTF9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJMX1RPX0RBQzJMX1NISUZUICAgICAgICAgICAgICAxICAvKiBBSUYxREFDMkxfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyTF9UT19EQUMyTF9XSURUSCAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzJMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMUxfVE9fREFDMkwgICAgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjFEQUMxTF9UT19EQUMyTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFMX1RPX0RBQzJMX01BU0sgICAgICAgICAgMHgwMDAxICAvKiBBSUYxREFDMUxfVE9fREFDMkwgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxTF9UT19EQUMyTF9TSElGVCAgICAgICAgICAgICAgMCAgLyogQUlGMURBQzFMX1RPX0RBQzJMICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMUxfVE9fREFDMkxfV0lEVEggICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMxTF9UT19EQUMyTCAqLworCisvKgorICogUjE1NDEgKDB4NjA1KSAtIERBQzIgUmlnaHQgTWl4ZXIgUm91dGluZworICovCisjZGVmaW5lIFdNODk5NF9BRENSX1RPX0RBQzJSICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEFEQ1JfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk0X0FEQ1JfVE9fREFDMlJfTUFTSyAgICAgICAgICAgICAgIDB4MDAyMCAgLyogQURDUl9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTRfQURDUl9UT19EQUMyUl9TSElGVCAgICAgICAgICAgICAgICAgICA1ICAvKiBBRENSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NF9BRENSX1RPX0RBQzJSX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ1JfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk0X0FEQ0xfVE9fREFDMlIgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogQURDTF9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTRfQURDTF9UT19EQUMyUl9NQVNLICAgICAgICAgICAgICAgMHgwMDEwICAvKiBBRENMX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NF9BRENMX1RPX0RBQzJSX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIEFEQ0xfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk0X0FEQ0xfVE9fREFDMlJfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogQURDTF9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfVE9fREFDMlIgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYyREFDUl9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfVE9fREFDMlJfTUFTSyAgICAgICAgICAgMHgwMDA0ICAvKiBBSUYyREFDUl9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfVE9fREFDMlJfU0hJRlQgICAgICAgICAgICAgICAyICAvKiBBSUYyREFDUl9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfVE9fREFDMlJfV0lEVEggICAgICAgICAgICAgICAxICAvKiBBSUYyREFDUl9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJSX1RPX0RBQzJSICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBSUYxREFDMlJfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMyUl9UT19EQUMyUl9NQVNLICAgICAgICAgIDB4MDAwMiAgLyogQUlGMURBQzJSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMlJfVE9fREFDMlJfU0hJRlQgICAgICAgICAgICAgIDEgIC8qIEFJRjFEQUMyUl9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzJSX1RPX0RBQzJSX1dJRFRIICAgICAgICAgICAgICAxICAvKiBBSUYxREFDMlJfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxUl9UT19EQUMyUiAgICAgICAgICAgICAgIDB4MDAwMSAgLyogQUlGMURBQzFSX1RPX0RBQzJSICovCisjZGVmaW5lIFdNODk5NF9BSUYxREFDMVJfVE9fREFDMlJfTUFTSyAgICAgICAgICAweDAwMDEgIC8qIEFJRjFEQUMxUl9UT19EQUMyUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMURBQzFSX1RPX0RBQzJSX1NISUZUICAgICAgICAgICAgICAwICAvKiBBSUYxREFDMVJfVE9fREFDMlIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEQUMxUl9UT19EQUMyUl9XSURUSCAgICAgICAgICAgICAgMSAgLyogQUlGMURBQzFSX1RPX0RBQzJSICovCisKKy8qCisgKiBSMTU0MiAoMHg2MDYpIC0gQUlGMSBBREMxIExlZnQgTWl4ZXIgUm91dGluZworICovCisjZGVmaW5lIFdNODk5NF9BREMxTF9UT19BSUYxQURDMUwgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQzFMX1RPX0FJRjFBREMxTCAqLworI2RlZmluZSBXTTg5OTRfQURDMUxfVE9fQUlGMUFEQzFMX01BU0sgICAgICAgICAgMHgwMDAyICAvKiBBREMxTF9UT19BSUYxQURDMUwgKi8KKyNkZWZpbmUgV004OTk0X0FEQzFMX1RPX0FJRjFBREMxTF9TSElGVCAgICAgICAgICAgICAgMSAgLyogQURDMUxfVE9fQUlGMUFEQzFMICovCisjZGVmaW5lIFdNODk5NF9BREMxTF9UT19BSUYxQURDMUxfV0lEVEggICAgICAgICAgICAgIDEgIC8qIEFEQzFMX1RPX0FJRjFBREMxTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfVE9fQUlGMUFEQzFMICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYyREFDTF9UT19BSUYxQURDMUwgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNMX1RPX0FJRjFBREMxTF9NQVNLICAgICAgIDB4MDAwMSAgLyogQUlGMkRBQ0xfVE9fQUlGMUFEQzFMICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9UT19BSUYxQURDMUxfU0hJRlQgICAgICAgICAgIDAgIC8qIEFJRjJEQUNMX1RPX0FJRjFBREMxTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfVE9fQUlGMUFEQzFMX1dJRFRIICAgICAgICAgICAxICAvKiBBSUYyREFDTF9UT19BSUYxQURDMUwgKi8KKworLyoKKyAqIFIxNTQzICgweDYwNykgLSBBSUYxIEFEQzEgUmlnaHQgTWl4ZXIgUm91dGluZworICovCisjZGVmaW5lIFdNODk5NF9BREMxUl9UT19BSUYxQURDMVIgICAgICAgICAgICAgICAweDAwMDIgIC8qIEFEQzFSX1RPX0FJRjFBREMxUiAqLworI2RlZmluZSBXTTg5OTRfQURDMVJfVE9fQUlGMUFEQzFSX01BU0sgICAgICAgICAgMHgwMDAyICAvKiBBREMxUl9UT19BSUYxQURDMVIgKi8KKyNkZWZpbmUgV004OTk0X0FEQzFSX1RPX0FJRjFBREMxUl9TSElGVCAgICAgICAgICAgICAgMSAgLyogQURDMVJfVE9fQUlGMUFEQzFSICovCisjZGVmaW5lIFdNODk5NF9BREMxUl9UT19BSUYxQURDMVJfV0lEVEggICAgICAgICAgICAgIDEgIC8qIEFEQzFSX1RPX0FJRjFBREMxUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfVE9fQUlGMUFEQzFSICAgICAgICAgICAgMHgwMDAxICAvKiBBSUYyREFDUl9UT19BSUYxQURDMVIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX1RPX0FJRjFBREMxUl9NQVNLICAgICAgIDB4MDAwMSAgLyogQUlGMkRBQ1JfVE9fQUlGMUFEQzFSICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDUl9UT19BSUYxQURDMVJfU0hJRlQgICAgICAgICAgIDAgIC8qIEFJRjJEQUNSX1RPX0FJRjFBREMxUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfVE9fQUlGMUFEQzFSX1dJRFRIICAgICAgICAgICAxICAvKiBBSUYyREFDUl9UT19BSUYxQURDMVIgKi8KKworLyoKKyAqIFIxNTQ0ICgweDYwOCkgLSBBSUYxIEFEQzIgTGVmdCBNaXhlciBSb3V0aW5nCisgKi8KKyNkZWZpbmUgV004OTk0X0FEQzJMX1RPX0FJRjFBREMyTCAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDMkxfVE9fQUlGMUFEQzJMICovCisjZGVmaW5lIFdNODk5NF9BREMyTF9UT19BSUYxQURDMkxfTUFTSyAgICAgICAgICAweDAwMDIgIC8qIEFEQzJMX1RPX0FJRjFBREMyTCAqLworI2RlZmluZSBXTTg5OTRfQURDMkxfVE9fQUlGMUFEQzJMX1NISUZUICAgICAgICAgICAgICAxICAvKiBBREMyTF9UT19BSUYxQURDMkwgKi8KKyNkZWZpbmUgV004OTk0X0FEQzJMX1RPX0FJRjFBREMyTF9XSURUSCAgICAgICAgICAgICAgMSAgLyogQURDMkxfVE9fQUlGMUFEQzJMICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9UT19BSUYxQURDMkwgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJEQUNMX1RPX0FJRjFBREMyTCAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ0xfVE9fQUlGMUFEQzJMX01BU0sgICAgICAgMHgwMDAxICAvKiBBSUYyREFDTF9UT19BSUYxQURDMkwgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNMX1RPX0FJRjFBREMyTF9TSElGVCAgICAgICAgICAgMCAgLyogQUlGMkRBQ0xfVE9fQUlGMUFEQzJMICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDTF9UT19BSUYxQURDMkxfV0lEVEggICAgICAgICAgIDEgIC8qIEFJRjJEQUNMX1RPX0FJRjFBREMyTCAqLworCisvKgorICogUjE1NDUgKDB4NjA5KSAtIEFJRjEgQURDMiBSaWdodCBtaXhlciBSb3V0aW5nCisgKi8KKyNkZWZpbmUgV004OTk0X0FEQzJSX1RPX0FJRjFBREMyUiAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDMlJfVE9fQUlGMUFEQzJSICovCisjZGVmaW5lIFdNODk5NF9BREMyUl9UT19BSUYxQURDMlJfTUFTSyAgICAgICAgICAweDAwMDIgIC8qIEFEQzJSX1RPX0FJRjFBREMyUiAqLworI2RlZmluZSBXTTg5OTRfQURDMlJfVE9fQUlGMUFEQzJSX1NISUZUICAgICAgICAgICAgICAxICAvKiBBREMyUl9UT19BSUYxQURDMlIgKi8KKyNkZWZpbmUgV004OTk0X0FEQzJSX1RPX0FJRjFBREMyUl9XSURUSCAgICAgICAgICAgICAgMSAgLyogQURDMlJfVE9fQUlGMUFEQzJSICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDUl9UT19BSUYxQURDMlIgICAgICAgICAgICAweDAwMDEgIC8qIEFJRjJEQUNSX1RPX0FJRjFBREMyUiAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRBQ1JfVE9fQUlGMUFEQzJSX01BU0sgICAgICAgMHgwMDAxICAvKiBBSUYyREFDUl9UT19BSUYxQURDMlIgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEQUNSX1RPX0FJRjFBREMyUl9TSElGVCAgICAgICAgICAgMCAgLyogQUlGMkRBQ1JfVE9fQUlGMUFEQzJSICovCisjZGVmaW5lIFdNODk5NF9BSUYyREFDUl9UT19BSUYxQURDMlJfV0lEVEggICAgICAgICAgIDEgIC8qIEFJRjJEQUNSX1RPX0FJRjFBREMyUiAqLworCisvKgorICogUjE1NTIgKDB4NjEwKSAtIERBQzEgTGVmdCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTRfREFDMUxfTVVURSAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUMxTF9NVVRFICovCisjZGVmaW5lIFdNODk5NF9EQUMxTF9NVVRFX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERBQzFMX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOSAgLyogREFDMUxfTVVURSAqLworI2RlZmluZSBXTTg5OTRfREFDMUxfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMxTF9NVVRFICovCisjZGVmaW5lIFdNODk5NF9EQUMxX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTRfREFDMV9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODk5NF9EQUMxX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogREFDMUxfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDMUxfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0RBQzFMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMUxfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxNTUzICgweDYxMSkgLSBEQUMxIFJpZ2h0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9NVVRFICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERBQzFSX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFSX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogREFDMVJfTVVURSAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBEQUMxUl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9EQUMxUl9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzFSX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFfVlUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTRfREFDMV9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMxX1ZVICovCisjZGVmaW5lIFdNODk5NF9EQUMxX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQzFfVlUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzFfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMV9WVSAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBEQUMxUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBEQUMxUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfREFDMVJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUMxUl9WT0wgLSBbNzowXSAqLworCisvKgorICogUjE1NTQgKDB4NjEyKSAtIERBQzIgTGVmdCBWb2x1bWUKKyAqLworI2RlZmluZSBXTTg5OTRfREFDMkxfTVVURSAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBEQUMyTF9NVVRFICovCisjZGVmaW5lIFdNODk5NF9EQUMyTF9NVVRFX01BU0sgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERBQzJMX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJMX01VVEVfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgOSAgLyogREFDMkxfTVVURSAqLworI2RlZmluZSBXTTg5OTRfREFDMkxfTVVURV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUMyTF9NVVRFICovCisjZGVmaW5lIFdNODk5NF9EQUMyX1ZVICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJfVlVfTUFTSyAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMl9WVSAqLworI2RlZmluZSBXTTg5OTRfREFDMl9WVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9EQUMyX1ZVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJMX1ZPTF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDBGRiAgLyogREFDMkxfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0RBQzJMX1ZPTF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDMkxfVk9MIC0gWzc6MF0gKi8KKyNkZWZpbmUgV004OTk0X0RBQzJMX1ZPTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogREFDMkxfVk9MIC0gWzc6MF0gKi8KKworLyoKKyAqIFIxNTU1ICgweDYxMykgLSBEQUMyIFJpZ2h0IFZvbHVtZQorICovCisjZGVmaW5lIFdNODk5NF9EQUMyUl9NVVRFICAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERBQzJSX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJSX01VVEVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogREFDMlJfTVVURSAqLworI2RlZmluZSBXTTg5OTRfREFDMlJfTVVURV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA5ICAvKiBEQUMyUl9NVVRFICovCisjZGVmaW5lIFdNODk5NF9EQUMyUl9NVVRFX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQzJSX01VVEUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJfVlUgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogREFDMl9WVSAqLworI2RlZmluZSBXTTg5OTRfREFDMl9WVV9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBEQUMyX1ZVICovCisjZGVmaW5lIFdNODk5NF9EQUMyX1ZVX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDggIC8qIERBQzJfVlUgKi8KKyNkZWZpbmUgV004OTk0X0RBQzJfVlVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDMl9WVSAqLworI2RlZmluZSBXTTg5OTRfREFDMlJfVk9MX01BU0sgICAgICAgICAgICAgICAgICAgMHgwMEZGICAvKiBEQUMyUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfREFDMlJfVk9MX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBEQUMyUl9WT0wgLSBbNzowXSAqLworI2RlZmluZSBXTTg5OTRfREFDMlJfVk9MX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBEQUMyUl9WT0wgLSBbNzowXSAqLworCisvKgorICogUjE1NTYgKDB4NjE0KSAtIERBQyBTb2Z0bXV0ZQorICovCisjZGVmaW5lIFdNODk5NF9EQUNfU09GVE1VVEVNT0RFICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIERBQ19TT0ZUTVVURU1PREUgKi8KKyNkZWZpbmUgV004OTk0X0RBQ19TT0ZUTVVURU1PREVfTUFTSyAgICAgICAgICAgIDB4MDAwMiAgLyogREFDX1NPRlRNVVRFTU9ERSAqLworI2RlZmluZSBXTTg5OTRfREFDX1NPRlRNVVRFTU9ERV9TSElGVCAgICAgICAgICAgICAgICAxICAvKiBEQUNfU09GVE1VVEVNT0RFICovCisjZGVmaW5lIFdNODk5NF9EQUNfU09GVE1VVEVNT0RFX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIERBQ19TT0ZUTVVURU1PREUgKi8KKyNkZWZpbmUgV004OTk0X0RBQ19NVVRFUkFURSAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogREFDX01VVEVSQVRFICovCisjZGVmaW5lIFdNODk5NF9EQUNfTVVURVJBVEVfTUFTSyAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ19NVVRFUkFURSAqLworI2RlZmluZSBXTTg5OTRfREFDX01VVEVSQVRFX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBEQUNfTVVURVJBVEUgKi8KKyNkZWZpbmUgV004OTk0X0RBQ19NVVRFUkFURV9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDX01VVEVSQVRFICovCisKKy8qCisgKiBSMTU2OCAoMHg2MjApIC0gT3ZlcnNhbXBsaW5nCisgKi8KKyNkZWZpbmUgV004OTk0X0FEQ19PU1IxMjggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogQURDX09TUjEyOCAqLworI2RlZmluZSBXTTg5OTRfQURDX09TUjEyOF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBBRENfT1NSMTI4ICovCisjZGVmaW5lIFdNODk5NF9BRENfT1NSMTI4X1NISUZUICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEFEQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTk0X0FEQ19PU1IxMjhfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogQURDX09TUjEyOCAqLworI2RlZmluZSBXTTg5OTRfREFDX09TUjEyOCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBEQUNfT1NSMTI4ICovCisjZGVmaW5lIFdNODk5NF9EQUNfT1NSMTI4X01BU0sgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIERBQ19PU1IxMjggKi8KKyNkZWZpbmUgV004OTk0X0RBQ19PU1IxMjhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgMCAgLyogREFDX09TUjEyOCAqLworI2RlZmluZSBXTTg5OTRfREFDX09TUjEyOF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNfT1NSMTI4ICovCisKKy8qCisgKiBSMTU2OSAoMHg2MjEpIC0gU2lkZXRvbmUKKyAqLworI2RlZmluZSBXTTg5OTRfU1RfSFBGX0NVVF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMzgwICAvKiBTVF9IUEZfQ1VUIC0gWzk6N10gKi8KKyNkZWZpbmUgV004OTk0X1NUX0hQRl9DVVRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNyAgLyogU1RfSFBGX0NVVCAtIFs5OjddICovCisjZGVmaW5lIFdNODk5NF9TVF9IUEZfQ1VUX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDMgIC8qIFNUX0hQRl9DVVQgLSBbOTo3XSAqLworI2RlZmluZSBXTTg5OTRfU1RfSFBGICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBTVF9IUEYgKi8KKyNkZWZpbmUgV004OTk0X1NUX0hQRl9NQVNLICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogU1RfSFBGICovCisjZGVmaW5lIFdNODk5NF9TVF9IUEZfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIFNUX0hQRiAqLworI2RlZmluZSBXTTg5OTRfU1RfSFBGX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTVF9IUEYgKi8KKyNkZWZpbmUgV004OTk0X1NUUl9TRUwgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogU1RSX1NFTCAqLworI2RlZmluZSBXTTg5OTRfU1RSX1NFTF9NQVNLICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBTVFJfU0VMICovCisjZGVmaW5lIFdNODk5NF9TVFJfU0VMX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNUUl9TRUwgKi8KKyNkZWZpbmUgV004OTk0X1NUUl9TRUxfV0lEVEggICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1RSX1NFTCAqLworI2RlZmluZSBXTTg5OTRfU1RMX1NFTCAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBTVExfU0VMICovCisjZGVmaW5lIFdNODk5NF9TVExfU0VMX01BU0sgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFNUTF9TRUwgKi8KKyNkZWZpbmUgV004OTk0X1NUTF9TRUxfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogU1RMX1NFTCAqLworI2RlZmluZSBXTTg5OTRfU1RMX1NFTF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBTVExfU0VMICovCisKKy8qCisgKiBSMTgyNCAoMHg3MjApIC0gUHVsbCBDb250cm9sICgxKQorICovCisjZGVmaW5lIFdNODk5NF9ETUlDREFUMl9QVSAgICAgICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERNSUNEQVQyX1BVICovCisjZGVmaW5lIFdNODk5NF9ETUlDREFUMl9QVV9NQVNLICAgICAgICAgICAgICAgICAweDA4MDAgIC8qIERNSUNEQVQyX1BVICovCisjZGVmaW5lIFdNODk5NF9ETUlDREFUMl9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgMTEgIC8qIERNSUNEQVQyX1BVICovCisjZGVmaW5lIFdNODk5NF9ETUlDREFUMl9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERNSUNEQVQyX1BVICovCisjZGVmaW5lIFdNODk5NF9ETUlDREFUMl9QRCAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIERNSUNEQVQyX1BEICovCisjZGVmaW5lIFdNODk5NF9ETUlDREFUMl9QRF9NQVNLICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIERNSUNEQVQyX1BEICovCisjZGVmaW5lIFdNODk5NF9ETUlDREFUMl9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgMTAgIC8qIERNSUNEQVQyX1BEICovCisjZGVmaW5lIFdNODk5NF9ETUlDREFUMl9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERNSUNEQVQyX1BEICovCisjZGVmaW5lIFdNODk5NF9ETUlDREFUMV9QVSAgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERNSUNEQVQxX1BVICovCisjZGVmaW5lIFdNODk5NF9ETUlDREFUMV9QVV9NQVNLICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIERNSUNEQVQxX1BVICovCisjZGVmaW5lIFdNODk5NF9ETUlDREFUMV9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgIDkgIC8qIERNSUNEQVQxX1BVICovCisjZGVmaW5lIFdNODk5NF9ETUlDREFUMV9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERNSUNEQVQxX1BVICovCisjZGVmaW5lIFdNODk5NF9ETUlDREFUMV9QRCAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERNSUNEQVQxX1BEICovCisjZGVmaW5lIFdNODk5NF9ETUlDREFUMV9QRF9NQVNLICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIERNSUNEQVQxX1BEICovCisjZGVmaW5lIFdNODk5NF9ETUlDREFUMV9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgIDggIC8qIERNSUNEQVQxX1BEICovCisjZGVmaW5lIFdNODk5NF9ETUlDREFUMV9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERNSUNEQVQxX1BEICovCisjZGVmaW5lIFdNODk5NF9NQ0xLMV9QVSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1DTEsxX1BVICovCisjZGVmaW5lIFdNODk5NF9NQ0xLMV9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwODAgIC8qIE1DTEsxX1BVICovCisjZGVmaW5lIFdNODk5NF9NQ0xLMV9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDcgIC8qIE1DTEsxX1BVICovCisjZGVmaW5lIFdNODk5NF9NQ0xLMV9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1DTEsxX1BVICovCisjZGVmaW5lIFdNODk5NF9NQ0xLMV9QRCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIE1DTEsxX1BEICovCisjZGVmaW5lIFdNODk5NF9NQ0xLMV9QRF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwNDAgIC8qIE1DTEsxX1BEICovCisjZGVmaW5lIFdNODk5NF9NQ0xLMV9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIE1DTEsxX1BEICovCisjZGVmaW5lIFdNODk5NF9NQ0xLMV9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1DTEsxX1BEICovCisjZGVmaW5lIFdNODk5NF9EQUNEQVQxX1BVICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIERBQ0RBVDFfUFUgKi8KKyNkZWZpbmUgV004OTk0X0RBQ0RBVDFfUFVfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogREFDREFUMV9QVSAqLworI2RlZmluZSBXTTg5OTRfREFDREFUMV9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICA1ICAvKiBEQUNEQVQxX1BVICovCisjZGVmaW5lIFdNODk5NF9EQUNEQVQxX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIERBQ0RBVDFfUFUgKi8KKyNkZWZpbmUgV004OTk0X0RBQ0RBVDFfUEQgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogREFDREFUMV9QRCAqLworI2RlZmluZSBXTTg5OTRfREFDREFUMV9QRF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBEQUNEQVQxX1BEICovCisjZGVmaW5lIFdNODk5NF9EQUNEQVQxX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDQgIC8qIERBQ0RBVDFfUEQgKi8KKyNkZWZpbmUgV004OTk0X0RBQ0RBVDFfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDREFUMV9QRCAqLworI2RlZmluZSBXTTg5OTRfREFDTFJDTEsxX1BVICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBEQUNMUkNMSzFfUFUgKi8KKyNkZWZpbmUgV004OTk0X0RBQ0xSQ0xLMV9QVV9NQVNLICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogREFDTFJDTEsxX1BVICovCisjZGVmaW5lIFdNODk5NF9EQUNMUkNMSzFfUFVfU0hJRlQgICAgICAgICAgICAgICAgICAgIDMgIC8qIERBQ0xSQ0xLMV9QVSAqLworI2RlZmluZSBXTTg5OTRfREFDTFJDTEsxX1BVX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBEQUNMUkNMSzFfUFUgKi8KKyNkZWZpbmUgV004OTk0X0RBQ0xSQ0xLMV9QRCAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogREFDTFJDTEsxX1BEICovCisjZGVmaW5lIFdNODk5NF9EQUNMUkNMSzFfUERfTUFTSyAgICAgICAgICAgICAgICAweDAwMDQgIC8qIERBQ0xSQ0xLMV9QRCAqLworI2RlZmluZSBXTTg5OTRfREFDTFJDTEsxX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAyICAvKiBEQUNMUkNMSzFfUEQgKi8KKyNkZWZpbmUgV004OTk0X0RBQ0xSQ0xLMV9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogREFDTFJDTEsxX1BEICovCisjZGVmaW5lIFdNODk5NF9CQ0xLMV9QVSAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEJDTEsxX1BVICovCisjZGVmaW5lIFdNODk5NF9CQ0xLMV9QVV9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDIgIC8qIEJDTEsxX1BVICovCisjZGVmaW5lIFdNODk5NF9CQ0xLMV9QVV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEsxX1BVICovCisjZGVmaW5lIFdNODk5NF9CQ0xLMV9QVV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEsxX1BVICovCisjZGVmaW5lIFdNODk5NF9CQ0xLMV9QRCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEJDTEsxX1BEICovCisjZGVmaW5lIFdNODk5NF9CQ0xLMV9QRF9NQVNLICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIEJDTEsxX1BEICovCisjZGVmaW5lIFdNODk5NF9CQ0xLMV9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgIDAgIC8qIEJDTEsxX1BEICovCisjZGVmaW5lIFdNODk5NF9CQ0xLMV9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEJDTEsxX1BEICovCisKKy8qCisgKiBSMTgyNSAoMHg3MjEpIC0gUHVsbCBDb250cm9sICgyKQorICovCisjZGVmaW5lIFdNODk5NF9DU05BRERSX1BEICAgICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIENTTkFERFJfUEQgKi8KKyNkZWZpbmUgV004OTk0X0NTTkFERFJfUERfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogQ1NOQUREUl9QRCAqLworI2RlZmluZSBXTTg5OTRfQ1NOQUREUl9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICA4ICAvKiBDU05BRERSX1BEICovCisjZGVmaW5lIFdNODk5NF9DU05BRERSX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENTTkFERFJfUEQgKi8KKyNkZWZpbmUgV004OTk0X0xETzJFTkFfUEQgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogTERPMkVOQV9QRCAqLworI2RlZmluZSBXTTg5OTRfTERPMkVOQV9QRF9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBMRE8yRU5BX1BEICovCisjZGVmaW5lIFdNODk5NF9MRE8yRU5BX1BEX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDYgIC8qIExETzJFTkFfUEQgKi8KKyNkZWZpbmUgV004OTk0X0xETzJFTkFfUERfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogTERPMkVOQV9QRCAqLworI2RlZmluZSBXTTg5OTRfTERPMUVOQV9QRCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBMRE8xRU5BX1BEICovCisjZGVmaW5lIFdNODk5NF9MRE8xRU5BX1BEX01BU0sgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIExETzFFTkFfUEQgKi8KKyNkZWZpbmUgV004OTk0X0xETzFFTkFfUERfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgNCAgLyogTERPMUVOQV9QRCAqLworI2RlZmluZSBXTTg5OTRfTERPMUVOQV9QRF9XSURUSCAgICAgICAgICAgICAgICAgICAgICAxICAvKiBMRE8xRU5BX1BEICovCisjZGVmaW5lIFdNODk5NF9DSUZNT0RFX1BEICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQgIC8qIENJRk1PREVfUEQgKi8KKyNkZWZpbmUgV004OTk0X0NJRk1PREVfUERfTUFTSyAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogQ0lGTU9ERV9QRCAqLworI2RlZmluZSBXTTg5OTRfQ0lGTU9ERV9QRF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAyICAvKiBDSUZNT0RFX1BEICovCisjZGVmaW5lIFdNODk5NF9DSUZNT0RFX1BEX1dJRFRIICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIENJRk1PREVfUEQgKi8KKyNkZWZpbmUgV004OTk0X1NQS01PREVfUFUgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogU1BLTU9ERV9QVSAqLworI2RlZmluZSBXTTg5OTRfU1BLTU9ERV9QVV9NQVNLICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBTUEtNT0RFX1BVICovCisjZGVmaW5lIFdNODk5NF9TUEtNT0RFX1BVX1NISUZUICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIFNQS01PREVfUFUgKi8KKyNkZWZpbmUgV004OTk0X1NQS01PREVfUFVfV0lEVEggICAgICAgICAgICAgICAgICAgICAgMSAgLyogU1BLTU9ERV9QVSAqLworCisvKgorICogUjE4NDAgKDB4NzMwKSAtIEludGVycnVwdCBTdGF0dXMgMQorICovCisjZGVmaW5lIFdNODk5NF9HUDExX0VJTlQgICAgICAgICAgICAgICAgICAgICAgICAweDA0MDAgIC8qIEdQMTFfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfR1AxMV9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgMHgwNDAwICAvKiBHUDExX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQMTFfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgICAxMCAgLyogR1AxMV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDExX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAgIDEgIC8qIEdQMTFfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfR1AxMF9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBHUDEwX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQMTBfRUlOVF9NQVNLICAgICAgICAgICAgICAgICAgIDB4MDIwMCAgLyogR1AxMF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9HUDEwX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgIDkgIC8qIEdQMTBfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfR1AxMF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAxICAvKiBHUDEwX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQOV9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogR1A5X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQOV9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogR1A5X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQOV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgOCAgLyogR1A5X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQOV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A5X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQOF9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1A4X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQOF9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogR1A4X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQOF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNyAgLyogR1A4X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQOF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A4X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQN19FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1A3X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQN19FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogR1A3X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQN19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNiAgLyogR1A3X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQN19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A3X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQNl9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1A2X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQNl9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogR1A2X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQNl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNSAgLyogR1A2X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQNl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A2X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQNV9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1A1X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQNV9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogR1A1X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQNV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgNCAgLyogR1A1X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQNV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A1X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQNF9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQNF9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQNF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMyAgLyogR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQNF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1A0X0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQM19FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogR1AzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQM19FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogR1AzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQM19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMiAgLyogR1AzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQM19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AzX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQMl9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogR1AyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQMl9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogR1AyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQMl9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQMl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AyX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQMV9FSU5UICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogR1AxX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQMV9FSU5UX01BU0sgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogR1AxX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQMV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgMCAgLyogR1AxX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0dQMV9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogR1AxX0VJTlQgKi8KKworLyoKKyAqIFIxODQxICgweDczMSkgLSBJbnRlcnJ1cHQgU3RhdHVzIDIKKyAqLworI2RlZmluZSBXTTg5OTRfVEVNUF9XQVJOX0VJTlQgICAgICAgICAgICAgICAgICAgMHg4MDAwICAvKiBURU1QX1dBUk5fRUlOVCAqLworI2RlZmluZSBXTTg5OTRfVEVNUF9XQVJOX0VJTlRfTUFTSyAgICAgICAgICAgICAgMHg4MDAwICAvKiBURU1QX1dBUk5fRUlOVCAqLworI2RlZmluZSBXTTg5OTRfVEVNUF9XQVJOX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgIDE1ICAvKiBURU1QX1dBUk5fRUlOVCAqLworI2RlZmluZSBXTTg5OTRfVEVNUF9XQVJOX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBURU1QX1dBUk5fRUlOVCAqLworI2RlZmluZSBXTTg5OTRfRENTX0RPTkVfRUlOVCAgICAgICAgICAgICAgICAgICAgMHg0MDAwICAvKiBEQ1NfRE9ORV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9EQ1NfRE9ORV9FSU5UX01BU0sgICAgICAgICAgICAgICAweDQwMDAgIC8qIERDU19ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0RDU19ET05FX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAxNCAgLyogRENTX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfRENTX0RPTkVfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBEQ1NfRE9ORV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0RPTkVfRUlOVCAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIFdTRVFfRE9ORV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0RPTkVfRUlOVF9NQVNLICAgICAgICAgICAgICAweDIwMDAgIC8qIFdTRVFfRE9ORV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0RPTkVfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgMTMgIC8qIFdTRVFfRE9ORV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0RPTkVfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfRE9ORV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9GSUZPU19FUlJfRUlOVCAgICAgICAgICAgICAgICAgICAweDEwMDAgIC8qIEZJRk9TX0VSUl9FSU5UICovCisjZGVmaW5lIFdNODk5NF9GSUZPU19FUlJfRUlOVF9NQVNLICAgICAgICAgICAgICAweDEwMDAgIC8qIEZJRk9TX0VSUl9FSU5UICovCisjZGVmaW5lIFdNODk5NF9GSUZPU19FUlJfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgMTIgIC8qIEZJRk9TX0VSUl9FSU5UICovCisjZGVmaW5lIFdNODk5NF9GSUZPU19FUlJfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIEZJRk9TX0VSUl9FSU5UICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX1NJR19ERVRfRUlOVCAgICAgICAgICAgICAweDA4MDAgIC8qIEFJRjJEUkNfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX1NJR19ERVRfRUlOVF9NQVNLICAgICAgICAweDA4MDAgIC8qIEFJRjJEUkNfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX1NJR19ERVRfRUlOVF9TSElGVCAgICAgICAgICAgMTEgIC8qIEFJRjJEUkNfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX1NJR19ERVRfRUlOVF9XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjJEUkNfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9TSUdfREVUX0VJTlQgICAgICAgICAgICAweDA0MDAgIC8qIEFJRjFEUkMyX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzJfU0lHX0RFVF9FSU5UX01BU0sgICAgICAgMHgwNDAwICAvKiBBSUYxRFJDMl9TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMyX1NJR19ERVRfRUlOVF9TSElGVCAgICAgICAgICAxMCAgLyogQUlGMURSQzJfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9TSUdfREVUX0VJTlRfV0lEVEggICAgICAgICAgIDEgIC8qIEFJRjFEUkMyX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfU0lHX0RFVF9FSU5UICAgICAgICAgICAgMHgwMjAwICAvKiBBSUYxRFJDMV9TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0FJRjFEUkMxX1NJR19ERVRfRUlOVF9NQVNLICAgICAgIDB4MDIwMCAgLyogQUlGMURSQzFfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9TSUdfREVUX0VJTlRfU0hJRlQgICAgICAgICAgIDkgIC8qIEFJRjFEUkMxX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfQUlGMURSQzFfU0lHX0RFVF9FSU5UX1dJRFRIICAgICAgICAgICAxICAvKiBBSUYxRFJDMV9TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X1NSQzJfTE9DS19FSU5UICAgICAgICAgICAgICAgICAgIDB4MDEwMCAgLyogU1JDMl9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X1NSQzJfTE9DS19FSU5UX01BU0sgICAgICAgICAgICAgIDB4MDEwMCAgLyogU1JDMl9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X1NSQzJfTE9DS19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgOCAgLyogU1JDMl9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X1NSQzJfTE9DS19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogU1JDMl9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X1NSQzFfTE9DS19FSU5UICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogU1JDMV9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X1NSQzFfTE9DS19FSU5UX01BU0sgICAgICAgICAgICAgIDB4MDA4MCAgLyogU1JDMV9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X1NSQzFfTE9DS19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgNyAgLyogU1JDMV9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X1NSQzFfTE9DS19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogU1JDMV9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfTE9DS19FSU5UICAgICAgICAgICAgICAgICAgIDB4MDA0MCAgLyogRkxMMl9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfTE9DS19FSU5UX01BU0sgICAgICAgICAgICAgIDB4MDA0MCAgLyogRkxMMl9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfTE9DS19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgNiAgLyogRkxMMl9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfTE9DS19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogRkxMMl9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfTE9DS19FSU5UICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRkxMMV9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfTE9DS19FSU5UX01BU0sgICAgICAgICAgICAgIDB4MDAyMCAgLyogRkxMMV9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfTE9DS19FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgNSAgLyogRkxMMV9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfTE9DS19FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogRkxMMV9MT0NLX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X01JQzJfU0hSVF9FSU5UICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTUlDMl9TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X01JQzJfU0hSVF9FSU5UX01BU0sgICAgICAgICAgICAgIDB4MDAxMCAgLyogTUlDMl9TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X01JQzJfU0hSVF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgNCAgLyogTUlDMl9TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X01JQzJfU0hSVF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgICAgMSAgLyogTUlDMl9TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X01JQzJfREVUX0VJTlQgICAgICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogTUlDMl9ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfTUlDMl9ERVRfRUlOVF9NQVNLICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBNSUMyX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9NSUMyX0RFVF9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgIDMgIC8qIE1JQzJfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X01JQzJfREVUX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTUlDMl9ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfTUlDMV9TSFJUX0VJTlQgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBNSUMxX1NIUlRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfTUlDMV9TSFJUX0VJTlRfTUFTSyAgICAgICAgICAgICAgMHgwMDA0ICAvKiBNSUMxX1NIUlRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfTUlDMV9TSFJUX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAyICAvKiBNSUMxX1NIUlRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfTUlDMV9TSFJUX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAxICAvKiBNSUMxX1NIUlRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfTUlDMV9ERVRfRUlOVCAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUMxX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9NSUMxX0RFVF9FSU5UX01BU0sgICAgICAgICAgICAgICAweDAwMDIgIC8qIE1JQzFfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfREVUX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDMV9ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfTUlDMV9ERVRfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBNSUMxX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9URU1QX1NIVVRfRUlOVCAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFRFTVBfU0hVVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9URU1QX1NIVVRfRUlOVF9NQVNLICAgICAgICAgICAgICAweDAwMDEgIC8qIFRFTVBfU0hVVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9URU1QX1NIVVRfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgIDAgIC8qIFRFTVBfU0hVVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9URU1QX1NIVVRfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgIDEgIC8qIFRFTVBfU0hVVF9FSU5UICovCisKKy8qCisgKiBSMTg0MiAoMHg3MzIpIC0gSW50ZXJydXB0IFJhdyBTdGF0dXMgMgorICovCisjZGVmaW5lIFdNODk5NF9URU1QX1dBUk5fU1RTICAgICAgICAgICAgICAgICAgICAweDgwMDAgIC8qIFRFTVBfV0FSTl9TVFMgKi8KKyNkZWZpbmUgV004OTk0X1RFTVBfV0FSTl9TVFNfTUFTSyAgICAgICAgICAgICAgIDB4ODAwMCAgLyogVEVNUF9XQVJOX1NUUyAqLworI2RlZmluZSBXTTg5OTRfVEVNUF9XQVJOX1NUU19TSElGVCAgICAgICAgICAgICAgICAgIDE1ICAvKiBURU1QX1dBUk5fU1RTICovCisjZGVmaW5lIFdNODk5NF9URU1QX1dBUk5fU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIFRFTVBfV0FSTl9TVFMgKi8KKyNkZWZpbmUgV004OTk0X0RDU19ET05FX1NUUyAgICAgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogRENTX0RPTkVfU1RTICovCisjZGVmaW5lIFdNODk5NF9EQ1NfRE9ORV9TVFNfTUFTSyAgICAgICAgICAgICAgICAweDQwMDAgIC8qIERDU19ET05FX1NUUyAqLworI2RlZmluZSBXTTg5OTRfRENTX0RPTkVfU1RTX1NISUZUICAgICAgICAgICAgICAgICAgIDE0ICAvKiBEQ1NfRE9ORV9TVFMgKi8KKyNkZWZpbmUgV004OTk0X0RDU19ET05FX1NUU19XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogRENTX0RPTkVfU1RTICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0RPTkVfU1RTICAgICAgICAgICAgICAgICAgICAweDIwMDAgIC8qIFdTRVFfRE9ORV9TVFMgKi8KKyNkZWZpbmUgV004OTk0X1dTRVFfRE9ORV9TVFNfTUFTSyAgICAgICAgICAgICAgIDB4MjAwMCAgLyogV1NFUV9ET05FX1NUUyAqLworI2RlZmluZSBXTTg5OTRfV1NFUV9ET05FX1NUU19TSElGVCAgICAgICAgICAgICAgICAgIDEzICAvKiBXU0VRX0RPTkVfU1RTICovCisjZGVmaW5lIFdNODk5NF9XU0VRX0RPTkVfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIFdTRVFfRE9ORV9TVFMgKi8KKyNkZWZpbmUgV004OTk0X0ZJRk9TX0VSUl9TVFMgICAgICAgICAgICAgICAgICAgIDB4MTAwMCAgLyogRklGT1NfRVJSX1NUUyAqLworI2RlZmluZSBXTTg5OTRfRklGT1NfRVJSX1NUU19NQVNLICAgICAgICAgICAgICAgMHgxMDAwICAvKiBGSUZPU19FUlJfU1RTICovCisjZGVmaW5lIFdNODk5NF9GSUZPU19FUlJfU1RTX1NISUZUICAgICAgICAgICAgICAgICAgMTIgIC8qIEZJRk9TX0VSUl9TVFMgKi8KKyNkZWZpbmUgV004OTk0X0ZJRk9TX0VSUl9TVFNfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogRklGT1NfRVJSX1NUUyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19TSUdfREVUX1NUUyAgICAgICAgICAgICAgMHgwODAwICAvKiBBSUYyRFJDX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NF9BSUYyRFJDX1NJR19ERVRfU1RTX01BU0sgICAgICAgICAweDA4MDAgIC8qIEFJRjJEUkNfU0lHX0RFVF9TVFMgKi8KKyNkZWZpbmUgV004OTk0X0FJRjJEUkNfU0lHX0RFVF9TVFNfU0hJRlQgICAgICAgICAgICAxMSAgLyogQUlGMkRSQ19TSUdfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfQUlGMkRSQ19TSUdfREVUX1NUU19XSURUSCAgICAgICAgICAgICAxICAvKiBBSUYyRFJDX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9TSUdfREVUX1NUUyAgICAgICAgICAgICAweDA0MDAgIC8qIEFJRjFEUkMyX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9TSUdfREVUX1NUU19NQVNLICAgICAgICAweDA0MDAgIC8qIEFJRjFEUkMyX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9TSUdfREVUX1NUU19TSElGVCAgICAgICAgICAgMTAgIC8qIEFJRjFEUkMyX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMl9TSUdfREVUX1NUU19XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjFEUkMyX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9TSUdfREVUX1NUUyAgICAgICAgICAgICAweDAyMDAgIC8qIEFJRjFEUkMxX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9TSUdfREVUX1NUU19NQVNLICAgICAgICAweDAyMDAgIC8qIEFJRjFEUkMxX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9TSUdfREVUX1NUU19TSElGVCAgICAgICAgICAgIDkgIC8qIEFJRjFEUkMxX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NF9BSUYxRFJDMV9TSUdfREVUX1NUU19XSURUSCAgICAgICAgICAgIDEgIC8qIEFJRjFEUkMxX1NJR19ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NF9TUkMyX0xPQ0tfU1RTICAgICAgICAgICAgICAgICAgICAweDAxMDAgIC8qIFNSQzJfTE9DS19TVFMgKi8KKyNkZWZpbmUgV004OTk0X1NSQzJfTE9DS19TVFNfTUFTSyAgICAgICAgICAgICAgIDB4MDEwMCAgLyogU1JDMl9MT0NLX1NUUyAqLworI2RlZmluZSBXTTg5OTRfU1JDMl9MT0NLX1NUU19TSElGVCAgICAgICAgICAgICAgICAgICA4ICAvKiBTUkMyX0xPQ0tfU1RTICovCisjZGVmaW5lIFdNODk5NF9TUkMyX0xPQ0tfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIFNSQzJfTE9DS19TVFMgKi8KKyNkZWZpbmUgV004OTk0X1NSQzFfTE9DS19TVFMgICAgICAgICAgICAgICAgICAgIDB4MDA4MCAgLyogU1JDMV9MT0NLX1NUUyAqLworI2RlZmluZSBXTTg5OTRfU1JDMV9MT0NLX1NUU19NQVNLICAgICAgICAgICAgICAgMHgwMDgwICAvKiBTUkMxX0xPQ0tfU1RTICovCisjZGVmaW5lIFdNODk5NF9TUkMxX0xPQ0tfU1RTX1NISUZUICAgICAgICAgICAgICAgICAgIDcgIC8qIFNSQzFfTE9DS19TVFMgKi8KKyNkZWZpbmUgV004OTk0X1NSQzFfTE9DS19TVFNfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogU1JDMV9MT0NLX1NUUyAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9MT0NLX1NUUyAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBGTEwyX0xPQ0tfU1RTICovCisjZGVmaW5lIFdNODk5NF9GTEwyX0xPQ0tfU1RTX01BU0sgICAgICAgICAgICAgICAweDAwNDAgIC8qIEZMTDJfTE9DS19TVFMgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDJfTE9DS19TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgNiAgLyogRkxMMl9MT0NLX1NUUyAqLworI2RlZmluZSBXTTg5OTRfRkxMMl9MT0NLX1NUU19XSURUSCAgICAgICAgICAgICAgICAgICAxICAvKiBGTEwyX0xPQ0tfU1RTICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0xPQ0tfU1RTICAgICAgICAgICAgICAgICAgICAweDAwMjAgIC8qIEZMTDFfTE9DS19TVFMgKi8KKyNkZWZpbmUgV004OTk0X0ZMTDFfTE9DS19TVFNfTUFTSyAgICAgICAgICAgICAgIDB4MDAyMCAgLyogRkxMMV9MT0NLX1NUUyAqLworI2RlZmluZSBXTTg5OTRfRkxMMV9MT0NLX1NUU19TSElGVCAgICAgICAgICAgICAgICAgICA1ICAvKiBGTEwxX0xPQ0tfU1RTICovCisjZGVmaW5lIFdNODk5NF9GTEwxX0xPQ0tfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgIDEgIC8qIEZMTDFfTE9DS19TVFMgKi8KKyNkZWZpbmUgV004OTk0X01JQzJfU0hSVF9TVFMgICAgICAgICAgICAgICAgICAgIDB4MDAxMCAgLyogTUlDMl9TSFJUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfTUlDMl9TSFJUX1NUU19NQVNLICAgICAgICAgICAgICAgMHgwMDEwICAvKiBNSUMyX1NIUlRfU1RTICovCisjZGVmaW5lIFdNODk5NF9NSUMyX1NIUlRfU1RTX1NISUZUICAgICAgICAgICAgICAgICAgIDQgIC8qIE1JQzJfU0hSVF9TVFMgKi8KKyNkZWZpbmUgV004OTk0X01JQzJfU0hSVF9TVFNfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTUlDMl9TSFJUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfTUlDMl9ERVRfU1RTICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBNSUMyX0RFVF9TVFMgKi8KKyNkZWZpbmUgV004OTk0X01JQzJfREVUX1NUU19NQVNLICAgICAgICAgICAgICAgIDB4MDAwOCAgLyogTUlDMl9ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NF9NSUMyX0RFVF9TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgIDMgIC8qIE1JQzJfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfTUlDMl9ERVRfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUMyX0RFVF9TVFMgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfU0hSVF9TVFMgICAgICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTUlDMV9TSFJUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfTUlDMV9TSFJUX1NUU19NQVNLICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBNSUMxX1NIUlRfU1RTICovCisjZGVmaW5lIFdNODk5NF9NSUMxX1NIUlRfU1RTX1NISUZUICAgICAgICAgICAgICAgICAgIDIgIC8qIE1JQzFfU0hSVF9TVFMgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfU0hSVF9TVFNfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogTUlDMV9TSFJUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfTUlDMV9ERVRfU1RTICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBNSUMxX0RFVF9TVFMgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfREVUX1NUU19NQVNLICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDMV9ERVRfU1RTICovCisjZGVmaW5lIFdNODk5NF9NSUMxX0RFVF9TVFNfU0hJRlQgICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQzFfREVUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfTUlDMV9ERVRfU1RTX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUMxX0RFVF9TVFMgKi8KKyNkZWZpbmUgV004OTk0X1RFTVBfU0hVVF9TVFMgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVEVNUF9TSFVUX1NUUyAqLworI2RlZmluZSBXTTg5OTRfVEVNUF9TSFVUX1NUU19NQVNLICAgICAgICAgICAgICAgMHgwMDAxICAvKiBURU1QX1NIVVRfU1RTICovCisjZGVmaW5lIFdNODk5NF9URU1QX1NIVVRfU1RTX1NISUZUICAgICAgICAgICAgICAgICAgIDAgIC8qIFRFTVBfU0hVVF9TVFMgKi8KKyNkZWZpbmUgV004OTk0X1RFTVBfU0hVVF9TVFNfV0lEVEggICAgICAgICAgICAgICAgICAgMSAgLyogVEVNUF9TSFVUX1NUUyAqLworCisvKgorICogUjE4NDggKDB4NzM4KSAtIEludGVycnVwdCBTdGF0dXMgMSBNYXNrCisgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQMTFfRUlOVCAgICAgICAgICAgICAgICAgICAgIDB4MDQwMCAgLyogSU1fR1AxMV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9HUDExX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAweDA0MDAgIC8qIElNX0dQMTFfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1AxMV9FSU5UX1NISUZUICAgICAgICAgICAgICAgICAgIDEwICAvKiBJTV9HUDExX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQMTFfRUlOVF9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fR1AxMV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9HUDEwX0VJTlQgICAgICAgICAgICAgICAgICAgICAweDAyMDAgIC8qIElNX0dQMTBfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1AxMF9FSU5UX01BU0sgICAgICAgICAgICAgICAgMHgwMjAwICAvKiBJTV9HUDEwX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0dQMTBfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAgICAgOSAgLyogSU1fR1AxMF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9HUDEwX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIElNX0dQMTBfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A5X0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTV9HUDlfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A5X0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMTAwICAvKiBJTV9HUDlfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A5X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICA4ICAvKiBJTV9HUDlfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A5X0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9HUDlfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A4X0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTV9HUDhfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A4X0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDgwICAvKiBJTV9HUDhfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A4X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICA3ICAvKiBJTV9HUDhfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A4X0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9HUDhfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A3X0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTV9HUDdfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A3X0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDQwICAvKiBJTV9HUDdfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A3X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICA2ICAvKiBJTV9HUDdfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A3X0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9HUDdfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A2X0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTV9HUDZfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A2X0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDIwICAvKiBJTV9HUDZfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A2X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICA1ICAvKiBJTV9HUDZfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A2X0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9HUDZfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A1X0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTV9HUDVfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A1X0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBJTV9HUDVfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A1X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICA0ICAvKiBJTV9HUDVfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A1X0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9HUDVfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A0X0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBJTV9HUDRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A0X0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBJTV9HUDRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A0X0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAzICAvKiBJTV9HUDRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1A0X0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9HUDRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1AzX0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBJTV9HUDNfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1AzX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBJTV9HUDNfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1AzX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAyICAvKiBJTV9HUDNfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1AzX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9HUDNfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1AyX0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBJTV9HUDJfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1AyX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAyICAvKiBJTV9HUDJfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1AyX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9HUDJfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1AyX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9HUDJfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1AxX0VJTlQgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBJTV9HUDFfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1AxX0VJTlRfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBJTV9HUDFfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1AxX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAgICAgICAwICAvKiBJTV9HUDFfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fR1AxX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBJTV9HUDFfRUlOVCAqLworCisvKgorICogUjE4NDkgKDB4NzM5KSAtIEludGVycnVwdCBTdGF0dXMgMiBNYXNrCisgKi8KKyNkZWZpbmUgV004OTk0X0lNX1RFTVBfV0FSTl9FSU5UICAgICAgICAgICAgICAgIDB4ODAwMCAgLyogSU1fVEVNUF9XQVJOX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX1RFTVBfV0FSTl9FSU5UX01BU0sgICAgICAgICAgIDB4ODAwMCAgLyogSU1fVEVNUF9XQVJOX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX1RFTVBfV0FSTl9FSU5UX1NISUZUICAgICAgICAgICAgICAxNSAgLyogSU1fVEVNUF9XQVJOX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX1RFTVBfV0FSTl9FSU5UX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSU1fVEVNUF9XQVJOX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0RDU19ET05FX0VJTlQgICAgICAgICAgICAgICAgIDB4NDAwMCAgLyogSU1fRENTX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fRENTX0RPTkVfRUlOVF9NQVNLICAgICAgICAgICAgMHg0MDAwICAvKiBJTV9EQ1NfRE9ORV9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9EQ1NfRE9ORV9FSU5UX1NISUZUICAgICAgICAgICAgICAgMTQgIC8qIElNX0RDU19ET05FX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0RDU19ET05FX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogSU1fRENTX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fV1NFUV9ET05FX0VJTlQgICAgICAgICAgICAgICAgMHgyMDAwICAvKiBJTV9XU0VRX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fV1NFUV9ET05FX0VJTlRfTUFTSyAgICAgICAgICAgMHgyMDAwICAvKiBJTV9XU0VRX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fV1NFUV9ET05FX0VJTlRfU0hJRlQgICAgICAgICAgICAgIDEzICAvKiBJTV9XU0VRX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fV1NFUV9ET05FX0VJTlRfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTV9XU0VRX0RPTkVfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fRklGT1NfRVJSX0VJTlQgICAgICAgICAgICAgICAgMHgxMDAwICAvKiBJTV9GSUZPU19FUlJfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fRklGT1NfRVJSX0VJTlRfTUFTSyAgICAgICAgICAgMHgxMDAwICAvKiBJTV9GSUZPU19FUlJfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fRklGT1NfRVJSX0VJTlRfU0hJRlQgICAgICAgICAgICAgIDEyICAvKiBJTV9GSUZPU19FUlJfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fRklGT1NfRVJSX0VJTlRfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTV9GSUZPU19FUlJfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fQUlGMkRSQ19TSUdfREVUX0VJTlQgICAgICAgICAgMHgwODAwICAvKiBJTV9BSUYyRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fQUlGMkRSQ19TSUdfREVUX0VJTlRfTUFTSyAgICAgMHgwODAwICAvKiBJTV9BSUYyRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fQUlGMkRSQ19TSUdfREVUX0VJTlRfU0hJRlQgICAgICAgIDExICAvKiBJTV9BSUYyRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fQUlGMkRSQ19TSUdfREVUX0VJTlRfV0lEVEggICAgICAgICAxICAvKiBJTV9BSUYyRFJDX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fQUlGMURSQzJfU0lHX0RFVF9FSU5UICAgICAgICAgMHgwNDAwICAvKiBJTV9BSUYxRFJDMl9TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0FJRjFEUkMyX1NJR19ERVRfRUlOVF9NQVNLICAgIDB4MDQwMCAgLyogSU1fQUlGMURSQzJfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9BSUYxRFJDMl9TSUdfREVUX0VJTlRfU0hJRlQgICAgICAgMTAgIC8qIElNX0FJRjFEUkMyX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fQUlGMURSQzJfU0lHX0RFVF9FSU5UX1dJRFRIICAgICAgICAxICAvKiBJTV9BSUYxRFJDMl9TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0FJRjFEUkMxX1NJR19ERVRfRUlOVCAgICAgICAgIDB4MDIwMCAgLyogSU1fQUlGMURSQzFfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9BSUYxRFJDMV9TSUdfREVUX0VJTlRfTUFTSyAgICAweDAyMDAgIC8qIElNX0FJRjFEUkMxX1NJR19ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fQUlGMURSQzFfU0lHX0RFVF9FSU5UX1NISUZUICAgICAgICA5ICAvKiBJTV9BSUYxRFJDMV9TSUdfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX0FJRjFEUkMxX1NJR19ERVRfRUlOVF9XSURUSCAgICAgICAgMSAgLyogSU1fQUlGMURSQzFfU0lHX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9TUkMyX0xPQ0tfRUlOVCAgICAgICAgICAgICAgICAweDAxMDAgIC8qIElNX1NSQzJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9TUkMyX0xPQ0tfRUlOVF9NQVNLICAgICAgICAgICAweDAxMDAgIC8qIElNX1NSQzJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9TUkMyX0xPQ0tfRUlOVF9TSElGVCAgICAgICAgICAgICAgIDggIC8qIElNX1NSQzJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9TUkMyX0xPQ0tfRUlOVF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIElNX1NSQzJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9TUkMxX0xPQ0tfRUlOVCAgICAgICAgICAgICAgICAweDAwODAgIC8qIElNX1NSQzFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9TUkMxX0xPQ0tfRUlOVF9NQVNLICAgICAgICAgICAweDAwODAgIC8qIElNX1NSQzFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9TUkMxX0xPQ0tfRUlOVF9TSElGVCAgICAgICAgICAgICAgIDcgIC8qIElNX1NSQzFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9TUkMxX0xPQ0tfRUlOVF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIElNX1NSQzFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9GTEwyX0xPQ0tfRUlOVCAgICAgICAgICAgICAgICAweDAwNDAgIC8qIElNX0ZMTDJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9GTEwyX0xPQ0tfRUlOVF9NQVNLICAgICAgICAgICAweDAwNDAgIC8qIElNX0ZMTDJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9GTEwyX0xPQ0tfRUlOVF9TSElGVCAgICAgICAgICAgICAgIDYgIC8qIElNX0ZMTDJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9GTEwyX0xPQ0tfRUlOVF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIElNX0ZMTDJfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9GTEwxX0xPQ0tfRUlOVCAgICAgICAgICAgICAgICAweDAwMjAgIC8qIElNX0ZMTDFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9GTEwxX0xPQ0tfRUlOVF9NQVNLICAgICAgICAgICAweDAwMjAgIC8qIElNX0ZMTDFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9GTEwxX0xPQ0tfRUlOVF9TSElGVCAgICAgICAgICAgICAgIDUgIC8qIElNX0ZMTDFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9GTEwxX0xPQ0tfRUlOVF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIElNX0ZMTDFfTE9DS19FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9NSUMyX1NIUlRfRUlOVCAgICAgICAgICAgICAgICAweDAwMTAgIC8qIElNX01JQzJfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9NSUMyX1NIUlRfRUlOVF9NQVNLICAgICAgICAgICAweDAwMTAgIC8qIElNX01JQzJfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9NSUMyX1NIUlRfRUlOVF9TSElGVCAgICAgICAgICAgICAgIDQgIC8qIElNX01JQzJfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9NSUMyX1NIUlRfRUlOVF9XSURUSCAgICAgICAgICAgICAgIDEgIC8qIElNX01JQzJfU0hSVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9NSUMyX0RFVF9FSU5UICAgICAgICAgICAgICAgICAweDAwMDggIC8qIElNX01JQzJfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX01JQzJfREVUX0VJTlRfTUFTSyAgICAgICAgICAgIDB4MDAwOCAgLyogSU1fTUlDMl9ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fTUlDMl9ERVRfRUlOVF9TSElGVCAgICAgICAgICAgICAgICAzICAvKiBJTV9NSUMyX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9NSUMyX0RFVF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgIDEgIC8qIElNX01JQzJfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX01JQzFfU0hSVF9FSU5UICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogSU1fTUlDMV9TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX01JQzFfU0hSVF9FSU5UX01BU0sgICAgICAgICAgIDB4MDAwNCAgLyogSU1fTUlDMV9TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX01JQzFfU0hSVF9FSU5UX1NISUZUICAgICAgICAgICAgICAgMiAgLyogSU1fTUlDMV9TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX01JQzFfU0hSVF9FSU5UX1dJRFRIICAgICAgICAgICAgICAgMSAgLyogSU1fTUlDMV9TSFJUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX01JQzFfREVUX0VJTlQgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogSU1fTUlDMV9ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fTUlDMV9ERVRfRUlOVF9NQVNLICAgICAgICAgICAgMHgwMDAyICAvKiBJTV9NSUMxX0RFVF9FSU5UICovCisjZGVmaW5lIFdNODk5NF9JTV9NSUMxX0RFVF9FSU5UX1NISUZUICAgICAgICAgICAgICAgIDEgIC8qIElNX01JQzFfREVUX0VJTlQgKi8KKyNkZWZpbmUgV004OTk0X0lNX01JQzFfREVUX0VJTlRfV0lEVEggICAgICAgICAgICAgICAgMSAgLyogSU1fTUlDMV9ERVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fVEVNUF9TSFVUX0VJTlQgICAgICAgICAgICAgICAgMHgwMDAxICAvKiBJTV9URU1QX1NIVVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fVEVNUF9TSFVUX0VJTlRfTUFTSyAgICAgICAgICAgMHgwMDAxICAvKiBJTV9URU1QX1NIVVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fVEVNUF9TSFVUX0VJTlRfU0hJRlQgICAgICAgICAgICAgICAwICAvKiBJTV9URU1QX1NIVVRfRUlOVCAqLworI2RlZmluZSBXTTg5OTRfSU1fVEVNUF9TSFVUX0VJTlRfV0lEVEggICAgICAgICAgICAgICAxICAvKiBJTV9URU1QX1NIVVRfRUlOVCAqLworCisvKgorICogUjE4NTYgKDB4NzQwKSAtIEludGVycnVwdCBDb250cm9sCisgKi8KKyNkZWZpbmUgV004OTk0X0lNX0lSUSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogSU1fSVJRICovCisjZGVmaW5lIFdNODk5NF9JTV9JUlFfTUFTSyAgICAgICAgICAgICAgICAgICAgICAweDAwMDEgIC8qIElNX0lSUSAqLworI2RlZmluZSBXTTg5OTRfSU1fSVJRX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAwICAvKiBJTV9JUlEgKi8KKyNkZWZpbmUgV004OTk0X0lNX0lSUV9XSURUSCAgICAgICAgICAgICAgICAgICAgICAgICAgMSAgLyogSU1fSVJRICovCisKKy8qCisgKiBSMTg2NCAoMHg3NDgpIC0gSVJRIERlYm91bmNlCisgKi8KKyNkZWZpbmUgV004OTk0X1RFTVBfV0FSTl9EQiAgICAgICAgICAgICAgICAgICAgIDB4MDAyMCAgLyogVEVNUF9XQVJOX0RCICovCisjZGVmaW5lIFdNODk5NF9URU1QX1dBUk5fREJfTUFTSyAgICAgICAgICAgICAgICAweDAwMjAgIC8qIFRFTVBfV0FSTl9EQiAqLworI2RlZmluZSBXTTg5OTRfVEVNUF9XQVJOX0RCX1NISUZUICAgICAgICAgICAgICAgICAgICA1ICAvKiBURU1QX1dBUk5fREIgKi8KKyNkZWZpbmUgV004OTk0X1RFTVBfV0FSTl9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogVEVNUF9XQVJOX0RCICovCisjZGVmaW5lIFdNODk5NF9NSUMyX1NIUlRfREIgICAgICAgICAgICAgICAgICAgICAweDAwMTAgIC8qIE1JQzJfU0hSVF9EQiAqLworI2RlZmluZSBXTTg5OTRfTUlDMl9TSFJUX0RCX01BU0sgICAgICAgICAgICAgICAgMHgwMDEwICAvKiBNSUMyX1NIUlRfREIgKi8KKyNkZWZpbmUgV004OTk0X01JQzJfU0hSVF9EQl9TSElGVCAgICAgICAgICAgICAgICAgICAgNCAgLyogTUlDMl9TSFJUX0RCICovCisjZGVmaW5lIFdNODk5NF9NSUMyX1NIUlRfREJfV0lEVEggICAgICAgICAgICAgICAgICAgIDEgIC8qIE1JQzJfU0hSVF9EQiAqLworI2RlZmluZSBXTTg5OTRfTUlDMl9ERVRfREIgICAgICAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBNSUMyX0RFVF9EQiAqLworI2RlZmluZSBXTTg5OTRfTUlDMl9ERVRfREJfTUFTSyAgICAgICAgICAgICAgICAgMHgwMDA4ICAvKiBNSUMyX0RFVF9EQiAqLworI2RlZmluZSBXTTg5OTRfTUlDMl9ERVRfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgICAzICAvKiBNSUMyX0RFVF9EQiAqLworI2RlZmluZSBXTTg5OTRfTUlDMl9ERVRfREJfV0lEVEggICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUMyX0RFVF9EQiAqLworI2RlZmluZSBXTTg5OTRfTUlDMV9TSFJUX0RCICAgICAgICAgICAgICAgICAgICAgMHgwMDA0ICAvKiBNSUMxX1NIUlRfREIgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfU0hSVF9EQl9NQVNLICAgICAgICAgICAgICAgIDB4MDAwNCAgLyogTUlDMV9TSFJUX0RCICovCisjZGVmaW5lIFdNODk5NF9NSUMxX1NIUlRfREJfU0hJRlQgICAgICAgICAgICAgICAgICAgIDIgIC8qIE1JQzFfU0hSVF9EQiAqLworI2RlZmluZSBXTTg5OTRfTUlDMV9TSFJUX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAxICAvKiBNSUMxX1NIUlRfREIgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfREVUX0RCICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDMV9ERVRfREIgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfREVUX0RCX01BU0sgICAgICAgICAgICAgICAgIDB4MDAwMiAgLyogTUlDMV9ERVRfREIgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfREVUX0RCX1NISUZUICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDMV9ERVRfREIgKi8KKyNkZWZpbmUgV004OTk0X01JQzFfREVUX0RCX1dJRFRIICAgICAgICAgICAgICAgICAgICAgMSAgLyogTUlDMV9ERVRfREIgKi8KKyNkZWZpbmUgV004OTk0X1RFTVBfU0hVVF9EQiAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSAgLyogVEVNUF9TSFVUX0RCICovCisjZGVmaW5lIFdNODk5NF9URU1QX1NIVVRfREJfTUFTSyAgICAgICAgICAgICAgICAweDAwMDEgIC8qIFRFTVBfU0hVVF9EQiAqLworI2RlZmluZSBXTTg5OTRfVEVNUF9TSFVUX0RCX1NISUZUICAgICAgICAgICAgICAgICAgICAwICAvKiBURU1QX1NIVVRfREIgKi8KKyNkZWZpbmUgV004OTk0X1RFTVBfU0hVVF9EQl9XSURUSCAgICAgICAgICAgICAgICAgICAgMSAgLyogVEVNUF9TSFVUX0RCICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9taXNjZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaAppbmRleCBhZGFmM2MxLi44YjVmN2NjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L21pc2NkZXZpY2UuaApAQCAtMzAsNiArMzAsNyBAQAogI2RlZmluZSBIUEVUX01JTk9SCQkyMjgKICNkZWZpbmUgRlVTRV9NSU5PUgkJMjI5CiAjZGVmaW5lIEtWTV9NSU5PUgkJMjMyCisjZGVmaW5lIFZIT1NUX05FVF9NSU5PUgkJMjMzCiAjZGVmaW5lIE1JU0NfRFlOQU1JQ19NSU5PUgkyNTUKIAogc3RydWN0IGRldmljZTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCA4YjJmYTg1Li5lNzBmMjFiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvcHJpb190cmVlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdfbG9ja3MuaD4KICNpbmNsdWRlIDxsaW51eC9tbV90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmdlLmg+CiAKIHN0cnVjdCBtZW1wb2xpY3k7CiBzdHJ1Y3QgYW5vbl92bWE7CkBAIC04NjksNiArODcwLDExNCBAQAogICovCiBpbnQgX19nZXRfdXNlcl9wYWdlc19mYXN0KHVuc2lnbmVkIGxvbmcgc3RhcnQsIGludCBucl9wYWdlcywgaW50IHdyaXRlLAogCQkJICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKTsKKy8qCisgKiBwZXItcHJvY2VzcyhwZXItbW1fc3RydWN0KSBzdGF0aXN0aWNzLgorICovCisjaWYgZGVmaW5lZChTUExJVF9SU1NfQ09VTlRJTkcpCisvKgorICogVGhlIG1tIGNvdW50ZXJzIGFyZSBub3QgcHJvdGVjdGVkIGJ5IGl0cyBwYWdlX3RhYmxlX2xvY2ssCisgKiBzbyBtdXN0IGJlIGluY3JlbWVudGVkIGF0b21pY2FsbHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbW1fY291bnRlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IG1lbWJlciwgbG9uZyB2YWx1ZSkKK3sKKwlhdG9taWNfbG9uZ19zZXQoJm1tLT5yc3Nfc3RhdC5jb3VudFttZW1iZXJdLCB2YWx1ZSk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgZ2V0X21tX2NvdW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBtZW1iZXIpOworCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkX21tX2NvdW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBtZW1iZXIsIGxvbmcgdmFsdWUpCit7CisJYXRvbWljX2xvbmdfYWRkKHZhbHVlLCAmbW0tPnJzc19zdGF0LmNvdW50W21lbWJlcl0pOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5jX21tX2NvdW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBtZW1iZXIpCit7CisJYXRvbWljX2xvbmdfaW5jKCZtbS0+cnNzX3N0YXQuY291bnRbbWVtYmVyXSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWNfbW1fY291bnRlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IG1lbWJlcikKK3sKKwlhdG9taWNfbG9uZ19kZWMoJm1tLT5yc3Nfc3RhdC5jb3VudFttZW1iZXJdKTsKK30KKworI2Vsc2UgIC8qICFVU0VfU1BMSVRfUFRMT0NLUyAqLworLyoKKyAqIFRoZSBtbSBjb3VudGVycyBhcmUgcHJvdGVjdGVkIGJ5IGl0cyBwYWdlX3RhYmxlX2xvY2ssCisgKiBzbyBjYW4gYmUgaW5jcmVtZW50ZWQgZGlyZWN0bHkuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfbW1fY291bnRlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IG1lbWJlciwgbG9uZyB2YWx1ZSkKK3sKKwltbS0+cnNzX3N0YXQuY291bnRbbWVtYmVyXSA9IHZhbHVlOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X21tX2NvdW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBtZW1iZXIpCit7CisJcmV0dXJuIG1tLT5yc3Nfc3RhdC5jb3VudFttZW1iZXJdOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkX21tX2NvdW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBtZW1iZXIsIGxvbmcgdmFsdWUpCit7CisJbW0tPnJzc19zdGF0LmNvdW50W21lbWJlcl0gKz0gdmFsdWU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmNfbW1fY291bnRlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IG1lbWJlcikKK3sKKwltbS0+cnNzX3N0YXQuY291bnRbbWVtYmVyXSsrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVjX21tX2NvdW50ZXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBtZW1iZXIpCit7CisJbW0tPnJzc19zdGF0LmNvdW50W21lbWJlcl0tLTsKK30KKworI2VuZGlmIC8qICFVU0VfU1BMSVRfUFRMT0NLUyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X21tX3JzcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4gZ2V0X21tX2NvdW50ZXIobW0sIE1NX0ZJTEVQQUdFUykgKworCQlnZXRfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9tbV9oaXdhdGVyX3JzcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlyZXR1cm4gbWF4KG1tLT5oaXdhdGVyX3JzcywgZ2V0X21tX3JzcyhtbSkpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X21tX2hpd2F0ZXJfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcmV0dXJuIG1heChtbS0+aGl3YXRlcl92bSwgbW0tPnRvdGFsX3ZtKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9oaXdhdGVyX3JzcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwl1bnNpZ25lZCBsb25nIF9yc3MgPSBnZXRfbW1fcnNzKG1tKTsKKworCWlmICgobW0pLT5oaXdhdGVyX3JzcyA8IF9yc3MpCisJCShtbSktPmhpd2F0ZXJfcnNzID0gX3JzczsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9oaXdhdGVyX3ZtKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWlmIChtbS0+aGl3YXRlcl92bSA8IG1tLT50b3RhbF92bSkKKwkJbW0tPmhpd2F0ZXJfdm0gPSBtbS0+dG90YWxfdm07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRtYXhfbW1faGl3YXRlcl9yc3ModW5zaWduZWQgbG9uZyAqbWF4cnNzLAorCQkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJdW5zaWduZWQgbG9uZyBoaXdhdGVyX3JzcyA9IGdldF9tbV9oaXdhdGVyX3JzcyhtbSk7CisKKwlpZiAoKm1heHJzcyA8IGhpd2F0ZXJfcnNzKQorCQkqbWF4cnNzID0gaGl3YXRlcl9yc3M7Cit9CisKKyNpZiBkZWZpbmVkKFNQTElUX1JTU19DT1VOVElORykKK3ZvaWQgc3luY19tbV9yc3Moc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHN5bmNfbW1fcnNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7Cit9CisjZW5kaWYKIAogLyoKICAqIEEgY2FsbGJhY2sgeW91IGNhbiByZWdpc3RlciB0byBhcHBseSBwcmVzc3VyZSB0byBhZ2VhYmxlIGNhY2hlcy4KQEAgLTEwNDksNiArMTE1OCwxMCBAQAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZmluZF9taW5fcGZuX3dpdGhfYWN0aXZlX3JlZ2lvbnModm9pZCk7CiBleHRlcm4gdm9pZCBmcmVlX2Jvb3RtZW1fd2l0aF9hY3RpdmVfcmVnaW9ucyhpbnQgbmlkLAogCQkJCQkJdW5zaWduZWQgbG9uZyBtYXhfbG93X3Bmbik7CitpbnQgYWRkX2Zyb21fZWFybHlfbm9kZV9tYXAoc3RydWN0IHJhbmdlICpyYW5nZSwgaW50IGF6LAorCQkJCSAgIGludCBucl9yYW5nZSwgaW50IG5pZCk7Cit2b2lkICpfX2FsbG9jX21lbW9yeV9jb3JlX2Vhcmx5KGludCBub2RlaWQsIHU2NCBzaXplLCB1NjQgYWxpZ24sCisJCQkJIHU2NCBnb2FsLCB1NjQgbGltaXQpOwogdHlwZWRlZiBpbnQgKCp3b3JrX2ZuX3QpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7CiBleHRlcm4gdm9pZCB3b3JrX3dpdGhfYWN0aXZlX3JlZ2lvbnMoaW50IG5pZCwgd29ya19mbl90IHdvcmtfZm4sIHZvaWQgKmRhdGEpOwogZXh0ZXJuIHZvaWQgc3BhcnNlX21lbW9yeV9wcmVzZW50X3dpdGhfYWN0aXZlX3JlZ2lvbnMoaW50IG5pZCk7CkBAIC0xMDgxLDExICsxMTk0LDcgQEAKIGV4dGVybiB2b2lkIHNpX21lbWluZm9fbm9kZShzdHJ1Y3Qgc3lzaW5mbyAqdmFsLCBpbnQgbmlkKTsKIGV4dGVybiBpbnQgYWZ0ZXJfYm9vdG1lbTsKIAotI2lmZGVmIENPTkZJR19OVU1BCiBleHRlcm4gdm9pZCBzZXR1cF9wZXJfY3B1X3BhZ2VzZXQodm9pZCk7Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3Blcl9jcHVfcGFnZXNldCh2b2lkKSB7fQotI2VuZGlmCiAKIGV4dGVybiB2b2lkIHpvbmVfcGNwX3VwZGF0ZShzdHJ1Y3Qgem9uZSAqem9uZSk7CiAKQEAgLTExMTMsNyArMTIyMiw3IEBACiAKIC8qIG1tYXAuYyAqLwogZXh0ZXJuIGludCBfX3ZtX2Vub3VnaF9tZW1vcnkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGxvbmcgcGFnZXMsIGludCBjYXBfc3lzX2FkbWluKTsKLWV4dGVybiB2b2lkIHZtYV9hZGp1c3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCitleHRlcm4gaW50IHZtYV9hZGp1c3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJdW5zaWduZWQgbG9uZyBlbmQsIHBnb2ZmX3QgcGdvZmYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqaW5zZXJ0KTsKIGV4dGVybiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9tZXJnZShzdHJ1Y3QgbW1fc3RydWN0ICosCiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2LCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLApAQCAtMTMyMSwxMiArMTQzMCwxOSBAQAogY29uc3QgY2hhciAqIGFyY2hfdm1hX25hbWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwogdm9pZCBwcmludF92bWFfYWRkcihjaGFyICpwcmVmaXgsIHVuc2lnbmVkIGxvbmcgcmlwKTsKIAordm9pZCBzcGFyc2VfbWVtX21hcHNfcG9wdWxhdGVfbm9kZShzdHJ1Y3QgcGFnZSAqKm1hcF9tYXAsCisJCQkJICAgdW5zaWduZWQgbG9uZyBwbnVtX2JlZ2luLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgcG51bV9lbmQsCisJCQkJICAgdW5zaWduZWQgbG9uZyBtYXBfY291bnQsCisJCQkJICAgaW50IG5vZGVpZCk7CisKIHN0cnVjdCBwYWdlICpzcGFyc2VfbWVtX21hcF9wb3B1bGF0ZSh1bnNpZ25lZCBsb25nIHBudW0sIGludCBuaWQpOwogcGdkX3QgKnZtZW1tYXBfcGdkX3BvcHVsYXRlKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUpOwogcHVkX3QgKnZtZW1tYXBfcHVkX3BvcHVsYXRlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUpOwogcG1kX3QgKnZtZW1tYXBfcG1kX3BvcHVsYXRlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUpOwogcHRlX3QgKnZtZW1tYXBfcHRlX3BvcHVsYXRlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG5vZGUpOwogdm9pZCAqdm1lbW1hcF9hbGxvY19ibG9jayh1bnNpZ25lZCBsb25nIHNpemUsIGludCBub2RlKTsKK3ZvaWQgKnZtZW1tYXBfYWxsb2NfYmxvY2tfYnVmKHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IG5vZGUpOwogdm9pZCB2bWVtbWFwX3ZlcmlmeShwdGVfdCAqLCBpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogaW50IHZtZW1tYXBfcG9wdWxhdGVfYmFzZXBhZ2VzKHN0cnVjdCBwYWdlICpzdGFydF9wYWdlLAogCQkJCQkJdW5zaWduZWQgbG9uZyBwYWdlcywgaW50IG5vZGUpOwpAQCAtMTM0OSw1ICsxNDY1LDcgQEAKIGV4dGVybiBhdG9taWNfbG9uZ190IG1jZV9iYWRfcGFnZXM7CiBleHRlcm4gaW50IHNvZnRfb2ZmbGluZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgZmxhZ3MpOwogCitleHRlcm4gdm9pZCBkdW1wX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpOworCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9MSU5VWF9NTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKaW5kZXggMzZmOTYyNy4uYjhiYjlhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1fdHlwZXMuaApAQCAtMjQsMTIgKzI0LDYgQEAKIAogI2RlZmluZSBVU0VfU1BMSVRfUFRMT0NLUwkoTlJfQ1BVUyA+PSBDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVMpCiAKLSNpZiBVU0VfU1BMSVRfUFRMT0NLUwotdHlwZWRlZiBhdG9taWNfbG9uZ190IG1tX2NvdW50ZXJfdDsKLSNlbHNlICAvKiAhVVNFX1NQTElUX1BUTE9DS1MgKi8KLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBtbV9jb3VudGVyX3Q7Ci0jZW5kaWYgLyogIVVTRV9TUExJVF9QVExPQ0tTICovCi0KIC8qCiAgKiBFYWNoIHBoeXNpY2FsIHBhZ2UgaW4gdGhlIHN5c3RlbSBoYXMgYSBzdHJ1Y3QgcGFnZSBhc3NvY2lhdGVkIHdpdGgKICAqIGl0IHRvIGtlZXAgdHJhY2sgb2Ygd2hhdGV2ZXIgaXQgaXMgd2UgYXJlIHVzaW5nIHRoZSBwYWdlIGZvciBhdCB0aGUKQEAgLTE2OSw3ICsxNjMsOCBAQAogCSAqIGNhbiBvbmx5IGJlIGluIHRoZSBpX21tYXAgdHJlZS4gIEFuIGFub255bW91cyBNQVBfUFJJVkFURSwgc3RhY2sKIAkgKiBvciBicmsgdm1hICh3aXRoIE5VTEwgZmlsZSkgY2FuIG9ubHkgYmUgaW4gYW4gYW5vbl92bWEgbGlzdC4KIAkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGFub25fdm1hX25vZGU7CS8qIFNlcmlhbGl6ZWQgYnkgYW5vbl92bWEtPmxvY2sgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGFub25fdm1hX2NoYWluOyAvKiBTZXJpYWxpemVkIGJ5IG1tYXBfc2VtICYKKwkJCQkJICAqIHBhZ2VfdGFibGVfbG9jayAqLwogCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWE7CS8qIFNlcmlhbGl6ZWQgYnkgcGFnZV90YWJsZV9sb2NrICovCiAKIAkvKiBGdW5jdGlvbiBwb2ludGVycyB0byBkZWFsIHdpdGggdGhpcyBzdHJ1Y3QuICovCkBAIC0yMDEsNiArMTk2LDI5IEBACiAJc3RydWN0IGNvbXBsZXRpb24gc3RhcnR1cDsKIH07CiAKK2VudW0geworCU1NX0ZJTEVQQUdFUywKKwlNTV9BTk9OUEFHRVMsCisJTU1fU1dBUEVOVFMsCisJTlJfTU1fQ09VTlRFUlMKK307CisKKyNpZiBVU0VfU1BMSVRfUFRMT0NLUyAmJiBkZWZpbmVkKENPTkZJR19NTVUpCisjZGVmaW5lIFNQTElUX1JTU19DT1VOVElORworc3RydWN0IG1tX3Jzc19zdGF0IHsKKwlhdG9taWNfbG9uZ190IGNvdW50W05SX01NX0NPVU5URVJTXTsKK307CisvKiBwZXItdGhyZWFkIGNhY2hlZCBpbmZvcm1hdGlvbiwgKi8KK3N0cnVjdCB0YXNrX3Jzc19zdGF0IHsKKwlpbnQgZXZlbnRzOwkvKiBmb3Igc3luY2hyb25pemF0aW9uIHRocmVzaG9sZCAqLworCWludCBjb3VudFtOUl9NTV9DT1VOVEVSU107Cit9OworI2Vsc2UgIC8qICFVU0VfU1BMSVRfUFRMT0NLUyAqLworc3RydWN0IG1tX3Jzc19zdGF0IHsKKwl1bnNpZ25lZCBsb25nIGNvdW50W05SX01NX0NPVU5URVJTXTsKK307CisjZW5kaWYgLyogIVVTRV9TUExJVF9QVExPQ0tTICovCisKIHN0cnVjdCBtbV9zdHJ1Y3QgewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIG1tYXA7CQkvKiBsaXN0IG9mIFZNQXMgKi8KIAlzdHJ1Y3QgcmJfcm9vdCBtbV9yYjsKQEAgLTIyNywxMSArMjQ1LDYgQEAKIAkJCQkJCSAqIGJ5IG1tbGlzdF9sb2NrCiAJCQkJCQkgKi8KIAotCS8qIFNwZWNpYWwgY291bnRlcnMsIGluIHNvbWUgY29uZmlndXJhdGlvbnMgcHJvdGVjdGVkIGJ5IHRoZQotCSAqIHBhZ2VfdGFibGVfbG9jaywgaW4gb3RoZXIgY29uZmlndXJhdGlvbnMgYnkgYmVpbmcgYXRvbWljLgotCSAqLwotCW1tX2NvdW50ZXJfdCBfZmlsZV9yc3M7Ci0JbW1fY291bnRlcl90IF9hbm9uX3JzczsKIAogCXVuc2lnbmVkIGxvbmcgaGl3YXRlcl9yc3M7CS8qIEhpZ2gtd2F0ZXJtYXJrIG9mIFJTUyB1c2FnZSAqLwogCXVuc2lnbmVkIGxvbmcgaGl3YXRlcl92bTsJLyogSGlnaC13YXRlciB2aXJ0dWFsIG1lbW9yeSB1c2FnZSAqLwpAQCAtMjQ0LDYgKzI1NywxMiBAQAogCiAJdW5zaWduZWQgbG9uZyBzYXZlZF9hdXh2W0FUX1ZFQ1RPUl9TSVpFXTsgLyogZm9yIC9wcm9jL1BJRC9hdXh2ICovCiAKKwkvKgorCSAqIFNwZWNpYWwgY291bnRlcnMsIGluIHNvbWUgY29uZmlndXJhdGlvbnMgcHJvdGVjdGVkIGJ5IHRoZQorCSAqIHBhZ2VfdGFibGVfbG9jaywgaW4gb3RoZXIgY29uZmlndXJhdGlvbnMgYnkgYmVpbmcgYXRvbWljLgorCSAqLworCXN0cnVjdCBtbV9yc3Nfc3RhdCByc3Nfc3RhdDsKKwogCXN0cnVjdCBsaW51eF9iaW5mbXQgKmJpbmZtdDsKIAogCWNwdW1hc2tfdCBjcHVfdm1fbWFzazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL2NhcmQuaCBiL2luY2x1ZGUvbGludXgvbW1jL2NhcmQuaAppbmRleCAyZWUyMmU4Li5kMDJkMmM2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tYy9jYXJkLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvY2FyZC5oCkBAIC05OSw2ICs5OSw4IEBACiAjZGVmaW5lIE1NQ19TVEFURV9CTE9DS0FERFIJKDE8PDMpCQkvKiBjYXJkIHVzZXMgYmxvY2stYWRkcmVzc2luZyAqLwogCXVuc2lnbmVkIGludAkJcXVpcmtzOyAJLyogY2FyZCBxdWlya3MgKi8KICNkZWZpbmUgTU1DX1FVSVJLX0xFTklFTlRfRk4wCSgxPDwwKQkJLyogYWxsb3cgU0RJTyBGTjAgd3JpdGVzIG91dHNpZGUgb2YgdGhlIFZTIENDQ1IgcmFuZ2UgKi8KKyNkZWZpbmUgTU1DX1FVSVJLX0JMS1NaX0ZPUl9CWVRFX01PREUgKDE8PDEpCS8qIHVzZSBmdW5jLT5jdXJfYmxrc2l6ZSAqLworCQkJCQkJLyogZm9yIGJ5dGUgbW9kZSAqLwogCiAJdTMyCQkJcmF3X2NpZFs0XTsJLyogcmF3IGNhcmQgQ0lEICovCiAJdTMyCQkJcmF3X2NzZFs0XTsJLyogcmF3IGNhcmQgQ1NEICovCkBAIC0xMzksNiArMTQxLDExIEBACiAJcmV0dXJuIGMtPnF1aXJrcyAmIE1NQ19RVUlSS19MRU5JRU5UX0ZOMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgbW1jX2Jsa3N6X2Zvcl9ieXRlX21vZGUoY29uc3Qgc3RydWN0IG1tY19jYXJkICpjKQoreworCXJldHVybiBjLT5xdWlya3MgJiBNTUNfUVVJUktfQkxLU1pfRk9SX0JZVEVfTU9ERTsKK30KKwogI2RlZmluZSBtbWNfY2FyZF9uYW1lKGMpCSgoYyktPmNpZC5wcm9kX25hbWUpCiAjZGVmaW5lIG1tY19jYXJkX2lkKGMpCQkoZGV2X25hbWUoJihjKS0+ZGV2KSkKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oIGIvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCmluZGV4IGVhZjM2MzYuLjQzZWFmNWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogCiAjaW5jbHVkZSA8bGludXgvbW1jL2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvcG0uaD4KIAogc3RydWN0IG1tY19pb3MgewogCXVuc2lnbmVkIGludAljbG9jazsJCQkvKiBjbG9jayByYXRlICovCkBAIC0xNTIsNiArMTUzLDggQEAKICNkZWZpbmUgTU1DX0NBUF9OT05SRU1PVkFCTEUJKDEgPDwgOCkJLyogTm9ucmVtb3ZhYmxlIGUuZy4gZU1NQyAqLwogI2RlZmluZSBNTUNfQ0FQX1dBSVRfV0hJTEVfQlVTWQkoMSA8PCA5KQkvKiBXYWl0cyB3aGlsZSBjYXJkIGlzIGJ1c3kgKi8KIAorCW1tY19wbV9mbGFnX3QJCXBtX2NhcHM7CS8qIHN1cHBvcnRlZCBwbSBmZWF0dXJlcyAqLworCiAJLyogaG9zdCBzcGVjaWZpYyBibG9jayBkYXRhICovCiAJdW5zaWduZWQgaW50CQltYXhfc2VnX3NpemU7CS8qIHNlZSBibGtfcXVldWVfbWF4X3NlZ21lbnRfc2l6ZSAqLwogCXVuc2lnbmVkIHNob3J0CQltYXhfaHdfc2VnczsJLyogc2VlIGJsa19xdWV1ZV9tYXhfaHdfc2VnbWVudHMgKi8KQEAgLTE5Nyw2ICsyMDAsOCBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdAkqc2Rpb19pcnFfdGhyZWFkOwogCWF0b21pY190CQlzZGlvX2lycV90aHJlYWRfYWJvcnQ7CiAKKwltbWNfcG1fZmxhZ190CQlwbV9mbGFnczsJLyogcmVxdWVzdGVkIHBtIGZlYXR1cmVzICovCisKICNpZmRlZiBDT05GSUdfTEVEU19UUklHR0VSUwogCXN0cnVjdCBsZWRfdHJpZ2dlcgkqbGVkOwkJLyogYWN0aXZpdHkgbGVkICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL3BtLmggYi9pbmNsdWRlL2xpbnV4L21tYy9wbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzN2FhYzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9wbS5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBsaW51eC9pbmNsdWRlL2xpbnV4L21tYy9wbS5oCisgKgorICogQXV0aG9yOglOaWNvbGFzIFBpdHJlCisgKiBDb3B5cmlnaHQ6CShDKSAyMDA5IE1hcnZlbGwgVGVjaG5vbG9neSBHcm91cCBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIExJTlVYX01NQ19QTV9ICisjZGVmaW5lIExJTlVYX01NQ19QTV9ICisKKy8qCisgKiBUaGVzZSBmbGFncyBhcmUgdXNlZCB0byBkZXNjcmliZSBwb3dlciBtYW5hZ2VtZW50IGZlYXR1cmVzIHRoYXQKKyAqIHNvbWUgY2FyZHMgKHR5cGljYWxseSBTRElPIGNhcmRzKSBtaWdodCB3aXNoIHRvIGJlbmVmaXQgZnJvbSB3aGVuCisgKiB0aGUgaG9zdCBzeXN0ZW0gaXMgYmVpbmcgc3VzcGVuZGVkLiAgVGhlcmUgYXJlIHNldmVyYWwgbGF5ZXJzIG9mCisgKiBhYnN0cmFjdGlvbnMgaW52b2x2ZWQsIGZyb20gdGhlIGhvc3QgY29udHJvbGxlciBkcml2ZXIsIHRvIHRoZSBNTUMgY29yZQorICogY29kZSwgdG8gdGhlIFNESU8gY29yZSBjb2RlLCB0byBmaW5hbGx5IGdldCB0byB0aGUgYWN0dWFsIFNESU8gZnVuY3Rpb24KKyAqIGRyaXZlci4gIFRoaXMgZmlsZSBpcyB0aGVyZWZvcmUgdXNlZCBmb3IgY29tbW9uIGRlZmluaXRpb25zIHNoYXJlZCBhY3Jvc3MKKyAqIGFsbCB0aG9zZSBsYXllcnMuCisgKi8KKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgbW1jX3BtX2ZsYWdfdDsKKworI2RlZmluZSBNTUNfUE1fS0VFUF9QT1dFUgkoMSA8PCAwKQkvKiBwcmVzZXJ2ZSBjYXJkIHBvd2VyIGR1cmluZyBzdXNwZW5kICovCisjZGVmaW5lIE1NQ19QTV9XQUtFX1NESU9fSVJRCSgxIDw8IDEpCS8qIHdha2UgdXAgaG9zdCBzeXN0ZW0gb24gU0RJTyBJUlEgYXNzZXJ0aW9uICovCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvc2Rpby5oIGIvaW5jbHVkZS9saW51eC9tbWMvc2Rpby5oCmluZGV4IDQ3YmE0NjQuLjBlYmFlZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL3NkaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9zZGlvLmgKQEAgLTk1LDYgKzk1LDggQEAKICNkZWZpbmUgIFNESU9fQlVTX1dJRFRIXzFCSVQJMHgwMAogI2RlZmluZSAgU0RJT19CVVNfV0lEVEhfNEJJVAkweDAyCiAKKyNkZWZpbmUgIFNESU9fQlVTX0FTWU5DX0lOVAkweDIwCisKICNkZWZpbmUgIFNESU9fQlVTX0NEX0RJU0FCTEUgICAgIDB4ODAJLyogZGlzYWJsZSBwdWxsLXVwIG9uIERBVDMgKHBpbiAxKSAqLwogCiAjZGVmaW5lIFNESU9fQ0NDUl9DQVBTCQkweDA4CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2Z1bmMuaCBiL2luY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oCmluZGV4IGFjM2FiNjguLmM2YzBjY2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oCisrKyBiL2luY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oCkBAIC0xNSw2ICsxNSw4IEBACiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CiAKKyNpbmNsdWRlIDxsaW51eC9tbWMvcG0uaD4KKwogc3RydWN0IG1tY19jYXJkOwogc3RydWN0IHNkaW9fZnVuYzsKIApAQCAtMTUzLDUgKzE1NSw4IEBACiBleHRlcm4gdm9pZCBzZGlvX2YwX3dyaXRlYihzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLCB1bnNpZ25lZCBjaGFyIGIsCiAJdW5zaWduZWQgaW50IGFkZHIsIGludCAqZXJyX3JldCk7CiAKK2V4dGVybiBtbWNfcG1fZmxhZ190IHNkaW9fZ2V0X2hvc3RfcG1fY2FwcyhzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jKTsKK2V4dGVybiBpbnQgc2Rpb19zZXRfaG9zdF9wbV9mbGFncyhzdHJ1Y3Qgc2Rpb19mdW5jICpmdW5jLCBtbWNfcG1fZmxhZ190IGZsYWdzKTsKKwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDMwZmU2NjguLmNmOWU0NTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtMTg0LDEzICsxODQsNyBAQAogCXM4IHN0YXRfdGhyZXNob2xkOwogCXM4IHZtX3N0YXRfZGlmZltOUl9WTV9aT05FX1NUQVRfSVRFTVNdOwogI2VuZGlmCi19IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7Ci0KLSNpZmRlZiBDT05GSUdfTlVNQQotI2RlZmluZSB6b25lX3BjcChfX3osIF9fY3B1KSAoKF9feiktPnBhZ2VzZXRbKF9fY3B1KV0pCi0jZWxzZQotI2RlZmluZSB6b25lX3BjcChfX3osIF9fY3B1KSAoJihfX3opLT5wYWdlc2V0WyhfX2NwdSldKQotI2VuZGlmCit9OwogCiAjZW5kaWYgLyogIV9fR0VORVJBVElOR19CT1VORFMuSCAqLwogCkBAIC0zMDYsMTQgKzMwMCwxMyBAQAogCSAqLwogCXVuc2lnbmVkIGxvbmcJCW1pbl91bm1hcHBlZF9wYWdlczsKIAl1bnNpZ25lZCBsb25nCQltaW5fc2xhYl9wYWdlczsKLQlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0CSpwYWdlc2V0W05SX0NQVVNdOwotI2Vsc2UKLQlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0CXBhZ2VzZXRbTlJfQ1BVU107CiAjZW5kaWYKKwlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0IF9fcGVyY3B1ICpwYWdlc2V0OwogCS8qCiAJICogZnJlZSBhcmVhcyBvZiBkaWZmZXJlbnQgc2l6ZXMKIAkgKi8KIAlzcGlubG9ja190CQlsb2NrOworCWludCAgICAgICAgICAgICAgICAgICAgIGFsbF91bnJlY2xhaW1hYmxlOyAvKiBBbGwgcGFnZXMgcGlubmVkICovCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCiAJLyogc2VlIHNwYW5uZWQvcHJlc2VudF9wYWdlcyBmb3IgbW9yZSBkZXNjcmlwdGlvbiAqLwogCXNlcWxvY2tfdAkJc3Bhbl9zZXFsb2NrOwpAQCAtMzQ5LDcgKzM0Miw3IEBACiAJICogcHJldl9wcmlvcml0eSBob2xkcyB0aGUgc2Nhbm5pbmcgcHJpb3JpdHkgZm9yIHRoaXMgem9uZS4gIEl0IGlzCiAJICogZGVmaW5lZCBhcyB0aGUgc2Nhbm5pbmcgcHJpb3JpdHkgYXQgd2hpY2ggd2UgYWNoaWV2ZWQgb3VyIHJlY2xhaW0KIAkgKiB0YXJnZXQgYXQgdGhlIHByZXZpb3VzIHRyeV90b19mcmVlX3BhZ2VzKCkgb3IgYmFsYW5jZV9wZ2RhdCgpCi0JICogaW52b2thdGlvbi4KKwkgKiBpbnZvY2F0aW9uLgogCSAqCiAJICogV2UgdXNlIHByZXZfcHJpb3JpdHkgYXMgYSBtZWFzdXJlIG9mIGhvdyBtdWNoIHN0cmVzcyBwYWdlIHJlY2xhaW0gaXMKIAkgKiB1bmRlciAtIGl0IGRyaXZlcyB0aGUgc3dhcHBpbmVzcyBkZWNpc2lvbjogd2hldGhlciB0byB1bm1hcCBtYXBwZWQKQEAgLTQyNSw3ICs0MTgsNiBAQAogfSBfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wOwogCiB0eXBlZGVmIGVudW0gewotCVpPTkVfQUxMX1VOUkVDTEFJTUFCTEUsCQkvKiBhbGwgcGFnZXMgcGlubmVkICovCiAJWk9ORV9SRUNMQUlNX0xPQ0tFRCwJCS8qIHByZXZlbnRzIGNvbmN1cnJlbnQgcmVjbGFpbSAqLwogCVpPTkVfT09NX0xPQ0tFRCwJCS8qIHpvbmUgaXMgaW4gT09NIGtpbGxlciB6b25lbGlzdCAqLwogfSB6b25lX2ZsYWdzX3Q7CkBAIC00NDUsMTEgKzQzNyw2IEBACiAJY2xlYXJfYml0KGZsYWcsICZ6b25lLT5mbGFncyk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpCi17Ci0JcmV0dXJuIHRlc3RfYml0KFpPTkVfQUxMX1VOUkVDTEFJTUFCTEUsICZ6b25lLT5mbGFncyk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHpvbmVfaXNfcmVjbGFpbV9sb2NrZWQoY29uc3Qgc3RydWN0IHpvbmUgKnpvbmUpCiB7CiAJcmV0dXJuIHRlc3RfYml0KFpPTkVfUkVDTEFJTV9MT0NLRUQsICZ6b25lLT5mbGFncyk7CkBAIC02MjAsNyArNjA3LDkgQEAKIAlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKm5vZGVfcGFnZV9jZ3JvdXA7CiAjZW5kaWYKICNlbmRpZgorI2lmbmRlZiBDT05GSUdfTk9fQk9PVE1FTQogCXN0cnVjdCBib290bWVtX2RhdGEgKmJkYXRhOworI2VuZGlmCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCiAJLyoKIAkgKiBNdXN0IGJlIGhlbGQgYW55IHRpbWUgeW91IGV4cGVjdCBub2RlX3N0YXJ0X3Bmbiwgbm9kZV9wcmVzZW50X3BhZ2VzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21udF9uYW1lc3BhY2UuaCBiL2luY2x1ZGUvbGludXgvbW50X25hbWVzcGFjZS5oCmluZGV4IGQ3NDc4NWMuLjBiODllZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW50X25hbWVzcGFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW50X25hbWVzcGFjZS5oCkBAIC0zNSw2ICszNSw3IEBACiBleHRlcm4gY29uc3Qgc3RydWN0IHNlcV9vcGVyYXRpb25zIG1vdW50c19vcDsKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbW91bnRpbmZvX29wOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBtb3VudHN0YXRzX29wOworZXh0ZXJuIGludCBtbnRfaGFkX2V2ZW50cyhzdHJ1Y3QgcHJvY19tb3VudHMgKik7CiAKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaAppbmRleCA2Y2IxYTNjLi41ZTg2OWZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgogI2luY2x1ZGUgPGxpbnV4L3RyYWNlcG9pbnQuaD4KIAotI2luY2x1ZGUgPGFzbS9sb2NhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGFzbS9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9tb2R1bGUuaD4KQEAgLTE3NSw2ICsxNzUsNyBAQAogCiAjaWZkZWYgQ09ORklHX01PRFVMRVMKIAorZXh0ZXJuIGludCBtb2R1bGVzX2Rpc2FibGVkOyAvKiBmb3Igc3lzY3RsICovCiAvKiBHZXQvcHV0IGEga2VybmVsIHN5bWJvbCAoY2FsbHMgbXVzdCBiZSBzeW1tZXRyaWMpICovCiB2b2lkICpfX3N5bWJvbF9nZXQoY29uc3QgY2hhciAqc3ltYm9sKTsKIHZvaWQgKl9fc3ltYm9sX2dldF9ncGwoY29uc3QgY2hhciAqc3ltYm9sKTsKQEAgLTM2MywxMSArMzY0LDkgQEAKIAkvKiBEZXN0cnVjdGlvbiBmdW5jdGlvbi4gKi8KIAl2b2lkICgqZXhpdCkodm9pZCk7CiAKLSNpZmRlZiBDT05GSUdfU01QCi0JY2hhciAqcmVmcHRyOwotI2Vsc2UKLQlsb2NhbF90IHJlZjsKLSNlbmRpZgorCXN0cnVjdCBtb2R1bGVfcmVmIHsKKwkJaW50IGNvdW50OworCX0gX19wZXJjcHUgKnJlZnB0cjsKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0NPTlNUUlVDVE9SUwpAQCAtNDU0LDI1ICs0NTMsMTYgQEAKICNkZWZpbmUgc3ltYm9sX3B1dCh4KSBfX3N5bWJvbF9wdXQoTU9EVUxFX1NZTUJPTF9QUkVGSVggI3gpCiB2b2lkIHN5bWJvbF9wdXRfYWRkcih2b2lkICphZGRyKTsKIAotc3RhdGljIGlubGluZSBsb2NhbF90ICpfX21vZHVsZV9yZWZfYWRkcihzdHJ1Y3QgbW9kdWxlICptb2QsIGludCBjcHUpCi17Ci0jaWZkZWYgQ09ORklHX1NNUAotCXJldHVybiAobG9jYWxfdCAqKSAobW9kLT5yZWZwdHIgKyBwZXJfY3B1X29mZnNldChjcHUpKTsKLSNlbHNlCi0JcmV0dXJuICZtb2QtPnJlZjsKLSNlbmRpZgotfQotCiAvKiBTb21ldGltZXMgd2Uga25vdyB3ZSBhbHJlYWR5IGhhdmUgYSByZWZjb3VudCwgYW5kIGl0J3MgZWFzaWVyIG5vdAogICAgdG8gaGFuZGxlIHRoZSBlcnJvciBjYXNlICh3aGljaCBvbmx5IGhhcHBlbnMgd2l0aCBybW1vZCAtLXdhaXQpLiAqLwogc3RhdGljIGlubGluZSB2b2lkIF9fbW9kdWxlX2dldChzdHJ1Y3QgbW9kdWxlICptb2R1bGUpCiB7CiAJaWYgKG1vZHVsZSkgewotCQl1bnNpZ25lZCBpbnQgY3B1ID0gZ2V0X2NwdSgpOwotCQlsb2NhbF9pbmMoX19tb2R1bGVfcmVmX2FkZHIobW9kdWxlLCBjcHUpKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CisJCV9fdGhpc19jcHVfaW5jKG1vZHVsZS0+cmVmcHRyLT5jb3VudCk7CiAJCXRyYWNlX21vZHVsZV9nZXQobW9kdWxlLCBfVEhJU19JUF8sCi0JCQkJIGxvY2FsX3JlYWQoX19tb2R1bGVfcmVmX2FkZHIobW9kdWxlLCBjcHUpKSk7Ci0JCXB1dF9jcHUoKTsKKwkJCQkgX190aGlzX2NwdV9yZWFkKG1vZHVsZS0+cmVmcHRyLT5jb3VudCkpOworCQlwcmVlbXB0X2VuYWJsZSgpOwogCX0KIH0KIApAQCAtNDgxLDE1ICs0NzEsMTcgQEAKIAlpbnQgcmV0ID0gMTsKIAogCWlmIChtb2R1bGUpIHsKLQkJdW5zaWduZWQgaW50IGNwdSA9IGdldF9jcHUoKTsKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CisKIAkJaWYgKGxpa2VseShtb2R1bGVfaXNfbGl2ZShtb2R1bGUpKSkgewotCQkJbG9jYWxfaW5jKF9fbW9kdWxlX3JlZl9hZGRyKG1vZHVsZSwgY3B1KSk7CisJCQlfX3RoaXNfY3B1X2luYyhtb2R1bGUtPnJlZnB0ci0+Y291bnQpOwogCQkJdHJhY2VfbW9kdWxlX2dldChtb2R1bGUsIF9USElTX0lQXywKLQkJCQlsb2NhbF9yZWFkKF9fbW9kdWxlX3JlZl9hZGRyKG1vZHVsZSwgY3B1KSkpOworCQkJCV9fdGhpc19jcHVfcmVhZChtb2R1bGUtPnJlZnB0ci0+Y291bnQpKTsKIAkJfQogCQllbHNlCiAJCQlyZXQgPSAwOwotCQlwdXRfY3B1KCk7CisKKwkJcHJlZW1wdF9lbmFibGUoKTsKIAl9CiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW91bnQuaCBiL2luY2x1ZGUvbGludXgvbW91bnQuaAppbmRleCA1ZDUyNzUzLi40YmQwNTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21vdW50LmgKKysrIGIvaW5jbHVkZS9saW51eC9tb3VudC5oCkBAIC0zNCw3ICszNCwxOCBAQAogCiAjZGVmaW5lIE1OVF9TSEFSRUQJMHgxMDAwCS8qIGlmIHRoZSB2ZnNtb3VudCBpcyBhIHNoYXJlZCBtb3VudCAqLwogI2RlZmluZSBNTlRfVU5CSU5EQUJMRQkweDIwMDAJLyogaWYgdGhlIHZmc21vdW50IGlzIGEgdW5iaW5kYWJsZSBtb3VudCAqLwotI2RlZmluZSBNTlRfUE5PREVfTUFTSwkweDMwMDAJLyogcHJvcGFnYXRpb24gZmxhZyBtYXNrICovCisvKgorICogTU5UX1NIQVJFRF9NQVNLIGlzIHRoZSBzZXQgb2YgZmxhZ3MgdGhhdCBzaG91bGQgYmUgY2xlYXJlZCB3aGVuIGEKKyAqIG1vdW50IGJlY29tZXMgc2hhcmVkLiAgQ3VycmVudGx5LCB0aGlzIGlzIG9ubHkgdGhlIGZsYWcgdGhhdCBzYXlzIGEKKyAqIG1vdW50IGNhbm5vdCBiZSBiaW5kIG1vdW50ZWQsIHNpbmNlIHRoaXMgaXMgaG93IHdlIGNyZWF0ZSBhIG1vdW50CisgKiB0aGF0IHNoYXJlcyBldmVudHMgd2l0aCBhbm90aGVyIG1vdW50LiAgSWYgeW91IGFkZCBhIG5ldyBNTlRfKgorICogZmxhZywgY29uc2lkZXIgaG93IGl0IGludGVyYWN0cyB3aXRoIHNoYXJlZCBtb3VudHMuCisgKi8KKyNkZWZpbmUgTU5UX1NIQVJFRF9NQVNLCShNTlRfVU5CSU5EQUJMRSkKKyNkZWZpbmUgTU5UX1BST1BBR0FUSU9OX01BU0sJKE1OVF9TSEFSRUQgfCBNTlRfVU5CSU5EQUJMRSkKKworCisjZGVmaW5lIE1OVF9JTlRFUk5BTAkweDQwMDAKIAogc3RydWN0IHZmc21vdW50IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIG1udF9oYXNoOwpAQCAtNjYsNyArNzcsNyBAQAogCWludCBtbnRfcGlubmVkOwogCWludCBtbnRfZ2hvc3RzOwogI2lmZGVmIENPTkZJR19TTVAKLQlpbnQgKm1udF93cml0ZXJzOworCWludCBfX3BlcmNwdSAqbW50X3dyaXRlcnM7CiAjZWxzZQogCWludCBtbnRfd3JpdGVyczsKICNlbmRpZgpAQCAtMTIzLDcgKzEzNCw2IEBACiAKIGV4dGVybiB2b2lkIG1hcmtfbW91bnRzX2Zvcl9leHBpcnkoc3RydWN0IGxpc3RfaGVhZCAqbW91bnRzKTsKIAotZXh0ZXJuIHNwaW5sb2NrX3QgdmZzbW91bnRfbG9jazsKIGV4dGVybiBkZXZfdCBuYW1lX3RvX2Rldl90KGNoYXIgKm5hbWUpOwogCiAjZW5kaWYgLyogX0xJTlVYX01PVU5UX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0LmggYi9pbmNsdWRlL2xpbnV4L25ldC5oCmluZGV4IDVlODA4M2MuLjQxNTdiNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0LmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXQuaApAQCAtMTc0LDE4ICsxNzQsMjIgQEAKIAkJCQkgICAgICBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpOwogCWludAkJKCppb2N0bCkgICAgIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKKyNpZmRlZiBDT05GSUdfQ09NUEFUCiAJaW50CSAJKCpjb21wYXRfaW9jdGwpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKKyNlbmRpZgogCWludAkJKCpsaXN0ZW4pICAgIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGVuKTsKIAlpbnQJCSgqc2h1dGRvd24pICAoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGZsYWdzKTsKIAlpbnQJCSgqc2V0c29ja29wdCkoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLAogCQkJCSAgICAgIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCB1bnNpZ25lZCBpbnQgb3B0bGVuKTsKIAlpbnQJCSgqZ2V0c29ja29wdCkoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLAogCQkJCSAgICAgIGludCBvcHRuYW1lLCBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pOworI2lmZGVmIENPTkZJR19DT01QQVQKIAlpbnQJCSgqY29tcGF0X3NldHNvY2tvcHQpKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwKIAkJCQkgICAgICBpbnQgb3B0bmFtZSwgY2hhciBfX3VzZXIgKm9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbik7CiAJaW50CQkoKmNvbXBhdF9nZXRzb2Nrb3B0KShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsCiAJCQkJICAgICAgaW50IG9wdG5hbWUsIGNoYXIgX191c2VyICpvcHR2YWwsIGludCBfX3VzZXIgKm9wdGxlbik7CisjZW5kaWYKIAlpbnQJCSgqc2VuZG1zZykgICAoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQkJCSAgICAgIHN0cnVjdCBtc2doZHIgKm0sIHNpemVfdCB0b3RhbF9sZW4pOwogCWludAkJKCpyZWN2bXNnKSAgIChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCBhM2ZjY2M4Li5jNzlhODhiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZi5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfcGFja2V0Lmg+CisjaW5jbHVkZSA8bGludXgvaWZfbGluay5oPgogCiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CkBAIC0xMzYsNyArMTM3LDcgQEAKICAqCXVzZWQuCiAgKi8KIAotI2lmIGRlZmluZWQoQ09ORklHX1dMQU5fODAyMTEpIHx8IGRlZmluZWQoQ09ORklHX0FYMjUpIHx8IGRlZmluZWQoQ09ORklHX0FYMjVfTU9EVUxFKQorI2lmIGRlZmluZWQoQ09ORklHX1dMQU4pIHx8IGRlZmluZWQoQ09ORklHX0FYMjUpIHx8IGRlZmluZWQoQ09ORklHX0FYMjVfTU9EVUxFKQogIyBpZiBkZWZpbmVkKENPTkZJR19NQUM4MDIxMV9NRVNIKQogIyAgZGVmaW5lIExMX01BWF9IRUFERVIgMTI4CiAjIGVsc2UKQEAgLTI2Myw2ICsyNjQsMTcgQEAKIAlpbnQJCQljb3VudDsKIH07CiAKKyNkZWZpbmUgbmV0ZGV2X3VjX2NvdW50KGRldikgKChkZXYpLT51Yy5jb3VudCkKKyNkZWZpbmUgbmV0ZGV2X3VjX2VtcHR5KGRldikgKChkZXYpLT51Yy5jb3VudCA9PSAwKQorI2RlZmluZSBuZXRkZXZfZm9yX2VhY2hfdWNfYWRkcihoYSwgZGV2KSBcCisJbGlzdF9mb3JfZWFjaF9lbnRyeShoYSwgJmRldi0+dWMubGlzdCwgbGlzdCkKKworI2RlZmluZSBuZXRkZXZfbWNfY291bnQoZGV2KSAoKGRldiktPm1jX2NvdW50KQorI2RlZmluZSBuZXRkZXZfbWNfZW1wdHkoZGV2KSAobmV0ZGV2X21jX2NvdW50KGRldikgPT0gMCkKKworI2RlZmluZSBuZXRkZXZfZm9yX2VhY2hfbWNfYWRkcihtY2xpc3QsIGRldikgXAorCWZvciAobWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3Q7IG1jbGlzdCA9IG1jbGlzdC0+bmV4dCkKKwogc3RydWN0IGhoX2NhY2hlIHsKIAlzdHJ1Y3QgaGhfY2FjaGUgKmhoX25leHQ7CS8qIE5leHQgZW50cnkJCQkgICAgICovCiAJYXRvbWljX3QJaGhfcmVmY250OwkvKiBudW1iZXIgb2YgdXNlcnMgICAgICAgICAgICAgICAgICAgKi8KQEAgLTYxMCw2ICs2MjIsMTMgQEAKICAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gYSBWTEFOIGlkIGlzIHVucmVnaXN0ZXJlZC4KICAqCiAgKiB2b2lkICgqbmRvX3BvbGxfY29udHJvbGxlcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisgKgorICoJU1ItSU9WIG1hbmFnZW1lbnQgZnVuY3Rpb25zLgorICogaW50ICgqbmRvX3NldF92Zl9tYWMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB2ZiwgdTgqIG1hYyk7CisgKiBpbnQgKCpuZG9fc2V0X3ZmX3ZsYW4pKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB2ZiwgdTE2IHZsYW4sIHU4IHFvcyk7CisgKiBpbnQgKCpuZG9fc2V0X3ZmX3R4X3JhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCB2ZiwgaW50IHJhdGUpOworICogaW50ICgqbmRvX2dldF92Zl9jb25maWcpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisgKgkJCSAgICBpbnQgdmYsIHN0cnVjdCBpZmxhX3ZmX2luZm8gKml2Zik7CiAgKi8KICNkZWZpbmUgSEFWRV9ORVRfREVWSUNFX09QUwogc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHsKQEAgLTYyMSwzMCArNjQwLDIxIEBACiAJCQkJCQkgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAl1MTYJCQkoKm5kb19zZWxlY3RfcXVldWUpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci0jZGVmaW5lIEhBVkVfQ0hBTkdFX1JYX0ZMQUdTCiAJdm9pZAkJCSgqbmRvX2NoYW5nZV9yeF9mbGFncykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJCSAgICAgICBpbnQgZmxhZ3MpOwotI2RlZmluZSBIQVZFX1NFVF9SWF9NT0RFCiAJdm9pZAkJCSgqbmRvX3NldF9yeF9tb2RlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLSNkZWZpbmUgSEFWRV9NVUxUSUNBU1QKIAl2b2lkCQkJKCpuZG9fc2V0X211bHRpY2FzdF9saXN0KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLSNkZWZpbmUgSEFWRV9TRVRfTUFDX0FERFIKIAlpbnQJCQkoKm5kb19zZXRfbWFjX2FkZHJlc3MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkgICAgICAgdm9pZCAqYWRkcik7Ci0jZGVmaW5lIEhBVkVfVkFMSURBVEVfQUREUgogCWludAkJCSgqbmRvX3ZhbGlkYXRlX2FkZHIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotI2RlZmluZSBIQVZFX1BSSVZBVEVfSU9DVEwKIAlpbnQJCQkoKm5kb19kb19pb2N0bCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJICAgICAgICBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCk7Ci0jZGVmaW5lIEhBVkVfU0VUX0NPTkZJRwogCWludAkJCSgqbmRvX3NldF9jb25maWcpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCSAgICAgICAgICBzdHJ1Y3QgaWZtYXAgKm1hcCk7Ci0jZGVmaW5lIEhBVkVfQ0hBTkdFX01UVQogCWludAkJCSgqbmRvX2NoYW5nZV9tdHUpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJCQkgIGludCBuZXdfbXR1KTsKIAlpbnQJCQkoKm5kb19uZWlnaF9zZXR1cCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkJCSAgIHN0cnVjdCBuZWlnaF9wYXJtcyAqKTsKLSNkZWZpbmUgSEFWRV9UWF9USU1FT1VUCiAJdm9pZAkJCSgqbmRvX3R4X3RpbWVvdXQpIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiAoKm5kb19nZXRfc3RhdHMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtNjU2LDkgKzY2NiwxNyBAQAogCXZvaWQJCQkoKm5kb192bGFuX3J4X2tpbGxfdmlkKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCQkJICAgICAgICB1bnNpZ25lZCBzaG9ydCB2aWQpOwogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCi0jZGVmaW5lIEhBVkVfTkVUREVWX1BPTEwKIAl2b2lkICAgICAgICAgICAgICAgICAgICAoKm5kb19wb2xsX2NvbnRyb2xsZXIpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogI2VuZGlmCisJaW50CQkJKCpuZG9fc2V0X3ZmX21hYykoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCSAgaW50IHF1ZXVlLCB1OCAqbWFjKTsKKwlpbnQJCQkoKm5kb19zZXRfdmZfdmxhbikoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJCSAgIGludCBxdWV1ZSwgdTE2IHZsYW4sIHU4IHFvcyk7CisJaW50CQkJKCpuZG9fc2V0X3ZmX3R4X3JhdGUpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkgICAgICBpbnQgdmYsIGludCByYXRlKTsKKwlpbnQJCQkoKm5kb19nZXRfdmZfY29uZmlnKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkJICAgICBpbnQgdmYsCisJCQkJCQkgICAgIHN0cnVjdCBpZmxhX3ZmX2luZm8gKml2Zik7CiAjaWYgZGVmaW5lZChDT05GSUdfRkNPRSkgfHwgZGVmaW5lZChDT05GSUdfRkNPRV9NT0RVTEUpCiAJaW50CQkJKCpuZG9fZmNvZV9lbmFibGUpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCWludAkJCSgqbmRvX2Zjb2VfZGlzYWJsZSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CkBAIC03NDUsNiArNzYzLDcgQEAKICNkZWZpbmUgTkVUSUZfRl9GQ09FX0NSQwkoMSA8PCAyNCkgLyogRkNvRSBDUkMzMiAqLwogI2RlZmluZSBORVRJRl9GX1NDVFBfQ1NVTQkoMSA8PCAyNSkgLyogU0NUUCBjaGVja3N1bSBvZmZsb2FkICovCiAjZGVmaW5lIE5FVElGX0ZfRkNPRV9NVFUJKDEgPDwgMjYpIC8qIFN1cHBvcnRzIG1heCBGQ29FIE1UVSwgMjE1OCBieXRlcyovCisjZGVmaW5lIE5FVElGX0ZfTlRVUExFCQkoMSA8PCAyNykgLyogTi10dXBsZSBmaWx0ZXJzIHN1cHBvcnRlZCAqLwogCiAJLyogU2VnbWVudGF0aW9uIG9mZmxvYWQgZmVhdHVyZXMgKi8KICNkZWZpbmUgTkVUSUZfRl9HU09fU0hJRlQJMTYKQEAgLTkwNSw3ICs5MjQsMTIgQEAKIAkgICAgICAgTkVUUkVHX1VOUkVHSVNURVJFRCwJLyogY29tcGxldGVkIHVucmVnaXN0ZXIgdG9kbyAqLwogCSAgICAgICBORVRSRUdfUkVMRUFTRUQsCQkvKiBjYWxsZWQgZnJlZV9uZXRkZXYgKi8KIAkgICAgICAgTkVUUkVHX0RVTU1ZLAkJLyogZHVtbXkgZGV2aWNlIGZvciBOQVBJIHBvbGwgKi8KLQl9IHJlZ19zdGF0ZTsKKwl9IHJlZ19zdGF0ZToxNjsKKworCWVudW0geworCQlSVE5MX0xJTktfSU5JVElBTElaRUQsCisJCVJUTkxfTElOS19JTklUSUFMSVpJTkcsCisJfSBydG5sX2xpbmtfc3RhdGU6MTY7CiAKIAkvKiBDYWxsZWQgZnJvbSB1bnJlZ2lzdGVyLCBjYW4gYmUgdXNlZCB0byBjYWxsIGZyZWVfbmV0ZGV2ICovCiAJdm9pZCAoKmRlc3RydWN0b3IpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpAQCAtOTUzLDYgKzk3Nyw4IEBACiAJLyogbWF4IGV4Y2hhbmdlIGlkIGZvciBGQ29FIExSTyBieSBkZHAgKi8KIAl1bnNpZ25lZCBpbnQJCWZjb2VfZGRwX3hpZDsKICNlbmRpZgorCS8qIG4tdHVwbGUgZmlsdGVyIGxpc3QgYXR0YWNoZWQgdG8gdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgZXRodG9vbF9yeF9udHVwbGVfbGlzdCBldGh0b29sX250dXBsZV9saXN0OwogfTsKICNkZWZpbmUgdG9fbmV0X2RldihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IG5ldF9kZXZpY2UsIGRldikKIApAQCAtMTAwOSw2ICsxMDM1LDE1IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZm5kZWYgQ09ORklHX05FVF9OUworc3RhdGljIGlubGluZSB2b2lkIHNrYl9zZXRfZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc2tiLT5kZXYgPSBkZXY7Cit9CisjZWxzZSAvKiBDT05GSUdfTkVUX05TICovCit2b2lkIHNrYl9zZXRfZGV2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworI2VuZGlmCisKIHN0YXRpYyBpbmxpbmUgYm9vbCBuZXRkZXZfdXNlc190cmFpbGVyX3RhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKICNpZmRlZiBDT05GSUdfTkVUX0RTQV9UQUdfVFJBSUxFUgpAQCAtMTUyNyw3ICsxNTYyLDYgQEAKIGV4dGVybiBpbnQJCW5ldGlmX3J4X25pKHN0cnVjdCBza19idWZmICpza2IpOwogI2RlZmluZSBIQVZFX05FVElGX1JFQ0VJVkVfU0tCIDEKIGV4dGVybiBpbnQJCW5ldGlmX3JlY2VpdmVfc2tiKHN0cnVjdCBza19idWZmICpza2IpOwotZXh0ZXJuIHZvaWQJCW5hcGlfZ3JvX2ZsdXNoKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSk7CiBleHRlcm4gZ3JvX3Jlc3VsdF90CWRldl9ncm9fcmVjZWl2ZShzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksCiAJCQkJCXN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGdyb19yZXN1bHRfdAluYXBpX3NrYl9maW5pc2goZ3JvX3Jlc3VsdF90IHJldCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC0xNTUzLDcgKzE1ODcsOSBAQAogZXh0ZXJuIGludAkJZGV2X2lvY3RsKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKik7CiBleHRlcm4gaW50CQlkZXZfZXRodG9vbChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpZnJlcSAqKTsKIGV4dGVybiB1bnNpZ25lZAkJZGV2X2dldF9mbGFncyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqKTsKK2V4dGVybiBpbnQJCV9fZGV2X2NoYW5nZV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwogZXh0ZXJuIGludAkJZGV2X2NoYW5nZV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqLCB1bnNpZ25lZCk7CitleHRlcm4gdm9pZAkJX19kZXZfbm90aWZ5X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICosIHVuc2lnbmVkIGludCBvbGRfZmxhZ3MpOwogZXh0ZXJuIGludAkJZGV2X2NoYW5nZV9uYW1lKHN0cnVjdCBuZXRfZGV2aWNlICosIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gaW50CQlkZXZfc2V0X2FsaWFzKHN0cnVjdCBuZXRfZGV2aWNlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKIGV4dGVybiBpbnQJCWRldl9jaGFuZ2VfbmV0X25hbWVzcGFjZShzdHJ1Y3QgbmV0X2RldmljZSAqLApAQCAtMjA4Myw2ICsyMTE5LDEzMCBAQAogCQlyZXR1cm4gMDsKIAlyZXR1cm4gZGV2LT5ldGh0b29sX29wcy0+Z2V0X2ZsYWdzKGRldik7CiB9CisKKy8qIExvZ2dpbmcsIGRlYnVnZ2luZyBhbmQgdHJvdWJsZXNob290aW5nL2RpYWdub3N0aWMgaGVscGVycy4gKi8KKworLyogbmV0ZGV2X3ByaW50ayBoZWxwZXJzLCBzaW1pbGFyIHRvIGRldl9wcmludGsgKi8KKworc3RhdGljIGlubGluZSBjb25zdCBjaGFyICpuZXRkZXZfbmFtZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWlmIChkZXYtPnJlZ19zdGF0ZSAhPSBORVRSRUdfUkVHSVNURVJFRCkKKwkJcmV0dXJuICIodW5yZWdpc3RlcmVkIG5ldF9kZXZpY2UpIjsKKwlyZXR1cm4gZGV2LT5uYW1lOworfQorCisjZGVmaW5lIG5ldGRldl9wcmludGsobGV2ZWwsIG5ldGRldiwgZm9ybWF0LCBhcmdzLi4uKQkJXAorCWRldl9wcmludGsobGV2ZWwsIChuZXRkZXYpLT5kZXYucGFyZW50LAkJCVwKKwkJICAgIiVzOiAiIGZvcm1hdCwJCQkJXAorCQkgICBuZXRkZXZfbmFtZShuZXRkZXYpLCAjI2FyZ3MpCisKKyNkZWZpbmUgbmV0ZGV2X2VtZXJnKGRldiwgZm9ybWF0LCBhcmdzLi4uKQkJCVwKKwluZXRkZXZfcHJpbnRrKEtFUk5fRU1FUkcsIGRldiwgZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIG5ldGRldl9hbGVydChkZXYsIGZvcm1hdCwgYXJncy4uLikJCQlcCisJbmV0ZGV2X3ByaW50ayhLRVJOX0FMRVJULCBkZXYsIGZvcm1hdCwgIyNhcmdzKQorI2RlZmluZSBuZXRkZXZfY3JpdChkZXYsIGZvcm1hdCwgYXJncy4uLikJCQlcCisJbmV0ZGV2X3ByaW50ayhLRVJOX0NSSVQsIGRldiwgZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIG5ldGRldl9lcnIoZGV2LCBmb3JtYXQsIGFyZ3MuLi4pCQkJXAorCW5ldGRldl9wcmludGsoS0VSTl9FUlIsIGRldiwgZm9ybWF0LCAjI2FyZ3MpCisjZGVmaW5lIG5ldGRldl93YXJuKGRldiwgZm9ybWF0LCBhcmdzLi4uKQkJCVwKKwluZXRkZXZfcHJpbnRrKEtFUk5fV0FSTklORywgZGV2LCBmb3JtYXQsICMjYXJncykKKyNkZWZpbmUgbmV0ZGV2X25vdGljZShkZXYsIGZvcm1hdCwgYXJncy4uLikJCQlcCisJbmV0ZGV2X3ByaW50ayhLRVJOX05PVElDRSwgZGV2LCBmb3JtYXQsICMjYXJncykKKyNkZWZpbmUgbmV0ZGV2X2luZm8oZGV2LCBmb3JtYXQsIGFyZ3MuLi4pCQkJXAorCW5ldGRldl9wcmludGsoS0VSTl9JTkZPLCBkZXYsIGZvcm1hdCwgIyNhcmdzKQorCisjaWYgZGVmaW5lZChERUJVRykKKyNkZWZpbmUgbmV0ZGV2X2RiZyhfX2RldiwgZm9ybWF0LCBhcmdzLi4uKQkJCVwKKwluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIF9fZGV2LCBmb3JtYXQsICMjYXJncykKKyNlbGlmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfREVCVUcpCisjZGVmaW5lIG5ldGRldl9kYmcoX19kZXYsIGZvcm1hdCwgYXJncy4uLikJCQlcCitkbyB7CQkJCQkJCQlcCisJZHluYW1pY19kZXZfZGJnKChfX2RldiktPmRldi5wYXJlbnQsICIlczogIiBmb3JtYXQsCVwKKwkJCW5ldGRldl9uYW1lKF9fZGV2KSwgIyNhcmdzKTsJCVwKK30gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBuZXRkZXZfZGJnKF9fZGV2LCBmb3JtYXQsIGFyZ3MuLi4pCQkJXAorKHsJCQkJCQkJCVwKKwlpZiAoMCkJCQkJCQkJXAorCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIF9fZGV2LCBmb3JtYXQsICMjYXJncyk7IFwKKwkwOwkJCQkJCQlcCit9KQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFZFUkJPU0VfREVCVUcpCisjZGVmaW5lIG5ldGRldl92ZGJnCW5ldGRldl9kYmcKKyNlbHNlCisKKyNkZWZpbmUgbmV0ZGV2X3ZkYmcoZGV2LCBmb3JtYXQsIGFyZ3MuLi4pCQkJXAorKHsJCQkJCQkJCVwKKwlpZiAoMCkJCQkJCQkJXAorCQluZXRkZXZfcHJpbnRrKEtFUk5fREVCVUcsIGRldiwgZm9ybWF0LCAjI2FyZ3MpOwlcCisJMDsJCQkJCQkJXAorfSkKKyNlbmRpZgorCisvKgorICogbmV0ZGV2X1dBUk4oKSBhY3RzIGxpa2UgZGV2X3ByaW50aygpLCBidXQgd2l0aCB0aGUga2V5IGRpZmZlcmVuY2UKKyAqIG9mIHVzaW5nIGEgV0FSTi9XQVJOX09OIHRvIGdldCB0aGUgbWVzc2FnZSBvdXQsIGluY2x1ZGluZyB0aGUKKyAqIGZpbGUvbGluZSBpbmZvcm1hdGlvbiBhbmQgYSBiYWNrdHJhY2UuCisgKi8KKyNkZWZpbmUgbmV0ZGV2X1dBUk4oZGV2LCBmb3JtYXQsIGFyZ3MuLi4pCQkJXAorCVdBUk4oMSwgIm5ldGRldmljZTogJXNcbiIgZm9ybWF0LCBuZXRkZXZfbmFtZShkZXYpLCAjI2FyZ3MpOworCisvKiBuZXRpZiBwcmludGsgaGVscGVycywgc2ltaWxhciB0byBuZXRkZXZfcHJpbnRrICovCisKKyNkZWZpbmUgbmV0aWZfcHJpbnRrKHByaXYsIHR5cGUsIGxldmVsLCBkZXYsIGZtdCwgYXJncy4uLikJXAorZG8gewkJCQkJICAJCQlcCisJaWYgKG5ldGlmX21zZ18jI3R5cGUocHJpdikpCQkJCVwKKwkJbmV0ZGV2X3ByaW50ayhsZXZlbCwgKGRldiksIGZtdCwgIyNhcmdzKTsJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBuZXRpZl9lbWVyZyhwcml2LCB0eXBlLCBkZXYsIGZtdCwgYXJncy4uLikJCVwKKwluZXRpZl9wcmludGsocHJpdiwgdHlwZSwgS0VSTl9FTUVSRywgZGV2LCBmbXQsICMjYXJncykKKyNkZWZpbmUgbmV0aWZfYWxlcnQocHJpdiwgdHlwZSwgZGV2LCBmbXQsIGFyZ3MuLi4pCQlcCisJbmV0aWZfcHJpbnRrKHByaXYsIHR5cGUsIEtFUk5fQUxFUlQsIGRldiwgZm10LCAjI2FyZ3MpCisjZGVmaW5lIG5ldGlmX2NyaXQocHJpdiwgdHlwZSwgZGV2LCBmbXQsIGFyZ3MuLi4pCQlcCisJbmV0aWZfcHJpbnRrKHByaXYsIHR5cGUsIEtFUk5fQ1JJVCwgZGV2LCBmbXQsICMjYXJncykKKyNkZWZpbmUgbmV0aWZfZXJyKHByaXYsIHR5cGUsIGRldiwgZm10LCBhcmdzLi4uKQkJXAorCW5ldGlmX3ByaW50ayhwcml2LCB0eXBlLCBLRVJOX0VSUiwgZGV2LCBmbXQsICMjYXJncykKKyNkZWZpbmUgbmV0aWZfd2Fybihwcml2LCB0eXBlLCBkZXYsIGZtdCwgYXJncy4uLikJCVwKKwluZXRpZl9wcmludGsocHJpdiwgdHlwZSwgS0VSTl9XQVJOSU5HLCBkZXYsIGZtdCwgIyNhcmdzKQorI2RlZmluZSBuZXRpZl9ub3RpY2UocHJpdiwgdHlwZSwgZGV2LCBmbXQsIGFyZ3MuLi4pCQlcCisJbmV0aWZfcHJpbnRrKHByaXYsIHR5cGUsIEtFUk5fTk9USUNFLCBkZXYsIGZtdCwgIyNhcmdzKQorI2RlZmluZSBuZXRpZl9pbmZvKHByaXYsIHR5cGUsIGRldiwgZm10LCBhcmdzLi4uKQkJXAorCW5ldGlmX3ByaW50ayhwcml2LCB0eXBlLCBLRVJOX0lORk8sIChkZXYpLCBmbXQsICMjYXJncykKKworI2lmIGRlZmluZWQoREVCVUcpCisjZGVmaW5lIG5ldGlmX2RiZyhwcml2LCB0eXBlLCBkZXYsIGZvcm1hdCwgYXJncy4uLikJCVwKKwluZXRpZl9wcmludGsocHJpdiwgdHlwZSwgS0VSTl9ERUJVRywgZGV2LCBmb3JtYXQsICMjYXJncykKKyNlbGlmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfREVCVUcpCisjZGVmaW5lIG5ldGlmX2RiZyhwcml2LCB0eXBlLCBuZXRkZXYsIGZvcm1hdCwgYXJncy4uLikJCVwKK2RvIHsJCQkJCQkJCVwKKwlpZiAobmV0aWZfbXNnXyMjdHlwZShwcml2KSkJCQkJXAorCQlkeW5hbWljX2Rldl9kYmcoKG5ldGRldiktPmRldi5wYXJlbnQsCQlcCisJCQkJIiVzOiAiIGZvcm1hdCwJCQlcCisJCQkJbmV0ZGV2X25hbWUobmV0ZGV2KSwgIyNhcmdzKTsJXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIG5ldGlmX2RiZyhwcml2LCB0eXBlLCBkZXYsIGZvcm1hdCwgYXJncy4uLikJCQlcCisoewkJCQkJCQkJCVwKKwlpZiAoMCkJCQkJCQkJCVwKKwkJbmV0aWZfcHJpbnRrKHByaXYsIHR5cGUsIEtFUk5fREVCVUcsIGRldiwgZm9ybWF0LCAjI2FyZ3MpOyBcCisJMDsJCQkJCQkJCVwKK30pCisjZW5kaWYKKworI2lmIGRlZmluZWQoVkVSQk9TRV9ERUJVRykKKyNkZWZpbmUgbmV0aWZfdmRiZwluZXRkZXZfZGJnCisjZWxzZQorI2RlZmluZSBuZXRpZl92ZGJnKHByaXYsIHR5cGUsIGRldiwgZm9ybWF0LCBhcmdzLi4uKQkJXAorKHsJCQkJCQkJCVwKKwlpZiAoMCkJCQkJCQkJXAorCQluZXRpZl9wcmludGsoS0VSTl9ERUJVRywgZGV2LCBmb3JtYXQsICMjYXJncyk7CVwKKwkwOwkJCQkJCQlcCit9KQorI2VuZGlmCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZgkvKiBfTElOVVhfTkVUREVWSUNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci5oCmluZGV4IDQ4YzU0OTYuLjg5MzQxYzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIuaApAQCAtMTE0LDE1ICsxMTQsMTcgQEAKIAlpbnQgc2V0X29wdG1pbjsKIAlpbnQgc2V0X29wdG1heDsKIAlpbnQgKCpzZXQpKHN0cnVjdCBzb2NrICpzaywgaW50IG9wdHZhbCwgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4pOworI2lmZGVmIENPTkZJR19DT01QQVQKIAlpbnQgKCpjb21wYXRfc2V0KShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHR2YWwsCiAJCQl2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbik7Ci0KKyNlbmRpZgogCWludCBnZXRfb3B0bWluOwogCWludCBnZXRfb3B0bWF4OwogCWludCAoKmdldCkoc3RydWN0IHNvY2sgKnNrLCBpbnQgb3B0dmFsLCB2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pOworI2lmZGVmIENPTkZJR19DT01QQVQKIAlpbnQgKCpjb21wYXRfZ2V0KShzdHJ1Y3Qgc29jayAqc2ssIGludCBvcHR2YWwsCiAJCQl2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pOwotCisjZW5kaWYKIAkvKiBVc2UgdGhlIG1vZHVsZSBzdHJ1Y3QgdG8gbG9jayBzZXQvZ2V0IGNvZGUgaW4gcGxhY2UgKi8KIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIH07CkBAIC0xNjEsMTEgKzE2Myw4IEBACiAJCQkJIHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICppbmRldiwKIAkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKm91dGRldiwKLQkJCQkgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKiksIGludCB0aHJlc2gsCi0JCQkJIGludCBjb25kKQorCQkJCSBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSwgaW50IHRocmVzaCkKIHsKLQlpZiAoIWNvbmQpCi0JCXJldHVybiAxOwogI2lmbmRlZiBDT05GSUdfTkVURklMVEVSX0RFQlVHCiAJaWYgKGxpc3RfZW1wdHkoJm5mX2hvb2tzW3BmXVtob29rXSkpCiAJCXJldHVybiAxOwpAQCAtMTc3LDcgKzE3Niw3IEBACiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICppbmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKm91dGRldiwKIAkJCSAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7Ci0JcmV0dXJuIG5mX2hvb2tfdGhyZXNoKHBmLCBob29rLCBza2IsIGluZGV2LCBvdXRkZXYsIG9rZm4sIElOVF9NSU4sIDEpOworCXJldHVybiBuZl9ob29rX3RocmVzaChwZiwgaG9vaywgc2tiLCBpbmRldiwgb3V0ZGV2LCBva2ZuLCBJTlRfTUlOKTsKIH0KICAgICAgICAgICAgICAgICAgICAKIC8qIEFjdGl2YXRlIGhvb2s7IGVpdGhlciBva2ZuIG9yIGtmcmVlX3NrYiBjYWxsZWQsIHVubGVzcyBhIGhvb2sKQEAgLTE5NywzNiArMTk2LDQ5IEBACiAgICBjb2RlcnMgOikKICovCiAKLS8qIFRoaXMgaXMgZ3Jvc3MsIGJ1dCBpbmxpbmUgZG9lc24ndCBjdXQgaXQgZm9yIGF2b2lkaW5nIHRoZSBmdW5jdGlvbgotICAgY2FsbCBpbiBmYXN0IHBhdGg6IGdjYyBkb2Vzbid0IGlubGluZSAobmVlZHMgdmFsdWUgdHJhY2tpbmc/KS4gLS1SUiAqLworc3RhdGljIGlubGluZSBpbnQKK05GX0hPT0tfVEhSRVNIKHVpbnQ4X3QgcGYsIHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJICAgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopLCBpbnQgdGhyZXNoKQoreworCWludCByZXQgPSBuZl9ob29rX3RocmVzaChwZiwgaG9vaywgc2tiLCBpbiwgb3V0LCBva2ZuLCB0aHJlc2gpOworCWlmIChyZXQgPT0gMSkKKwkJcmV0ID0gb2tmbihza2IpOworCXJldHVybiByZXQ7Cit9CiAKLS8qIEhYOiBJdCdzIHNsaWdodGx5IGxlc3MgZ3Jvc3Mgbm93LiAqLworc3RhdGljIGlubGluZSBpbnQKK05GX0hPT0tfQ09ORCh1aW50OF90IHBmLCB1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkgICAgIHN0cnVjdCBuZXRfZGV2aWNlICppbiwgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopLCBib29sIGNvbmQpCit7CisJaW50IHJldDsKIAotI2RlZmluZSBORl9IT09LX1RIUkVTSChwZiwgaG9vaywgc2tiLCBpbmRldiwgb3V0ZGV2LCBva2ZuLCB0aHJlc2gpCSAgICAgICBcCi0oe2ludCBfX3JldDsJCQkJCQkJCSAgICAgICBcCi1pZiAoKF9fcmV0PW5mX2hvb2tfdGhyZXNoKHBmLCBob29rLCAoc2tiKSwgaW5kZXYsIG91dGRldiwgb2tmbiwgdGhyZXNoLCAxKSkgPT0gMSlcCi0JX19yZXQgPSAob2tmbikoc2tiKTsJCQkJCQkgICAgICAgXAotX19yZXQ7fSkKKwlpZiAoIWNvbmQgfHwKKwkgICAgKHJldCA9IG5mX2hvb2tfdGhyZXNoKHBmLCBob29rLCBza2IsIGluLCBvdXQsIG9rZm4sIElOVF9NSU4pID09IDEpKQorCQlyZXQgPSBva2ZuKHNrYik7CisJcmV0dXJuIHJldDsKK30KIAotI2RlZmluZSBORl9IT09LX0NPTkQocGYsIGhvb2ssIHNrYiwgaW5kZXYsIG91dGRldiwgb2tmbiwgY29uZCkJCSAgICAgICBcCi0oe2ludCBfX3JldDsJCQkJCQkJCSAgICAgICBcCi1pZiAoKF9fcmV0PW5mX2hvb2tfdGhyZXNoKHBmLCBob29rLCAoc2tiKSwgaW5kZXYsIG91dGRldiwgb2tmbiwgSU5UX01JTiwgY29uZCkpID09IDEpXAotCV9fcmV0ID0gKG9rZm4pKHNrYik7CQkJCQkJICAgICAgIFwKLV9fcmV0O30pCi0KLSNkZWZpbmUgTkZfSE9PSyhwZiwgaG9vaywgc2tiLCBpbmRldiwgb3V0ZGV2LCBva2ZuKSBcCi0JTkZfSE9PS19USFJFU0gocGYsIGhvb2ssIHNrYiwgaW5kZXYsIG91dGRldiwgb2tmbiwgSU5UX01JTikKK3N0YXRpYyBpbmxpbmUgaW50CitORl9IT09LKHVpbnQ4X3QgcGYsIHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCXN0cnVjdCBuZXRfZGV2aWNlICppbiwgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwlpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK3sKKwlyZXR1cm4gTkZfSE9PS19USFJFU0gocGYsIGhvb2ssIHNrYiwgaW4sIG91dCwgb2tmbiwgSU5UX01JTik7Cit9CiAKIC8qIENhbGwgc2V0c29ja29wdCgpICovCiBpbnQgbmZfc2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIHVfaW50OF90IHBmLCBpbnQgb3B0dmFsLCBjaGFyIF9fdXNlciAqb3B0LAogCQkgIHVuc2lnbmVkIGludCBsZW4pOwogaW50IG5mX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCB1X2ludDhfdCBwZiwgaW50IG9wdHZhbCwgY2hhciBfX3VzZXIgKm9wdCwKIAkJICBpbnQgKmxlbik7Ci0KKyNpZmRlZiBDT05GSUdfQ09NUEFUCiBpbnQgY29tcGF0X25mX3NldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCB1X2ludDhfdCBwZiwgaW50IG9wdHZhbCwKIAkJY2hhciBfX3VzZXIgKm9wdCwgdW5zaWduZWQgaW50IGxlbik7CiBpbnQgY29tcGF0X25mX2dldHNvY2tvcHQoc3RydWN0IHNvY2sgKnNrLCB1X2ludDhfdCBwZiwgaW50IG9wdHZhbCwKIAkJY2hhciBfX3VzZXIgKm9wdCwgaW50ICpsZW4pOworI2VuZGlmCiAKIC8qIENhbGwgdGhpcyBiZWZvcmUgbW9kaWZ5aW5nIGFuIGV4aXN0aW5nIHBhY2tldDogZW5zdXJlcyBpdCBpcwogICAgbW9kaWZpYWJsZSBhbmQgbGluZWFyIHRvIHRoZSBwb2ludCB5b3UgY2FyZSBhYm91dCAod3JpdGFibGVfbGVuKS4KQEAgLTMyNSw4ICszMzcsNyBAQAogCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqaW5kZXYsCiAJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpvdXRkZXYsCi0JCQkJIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopLCBpbnQgdGhyZXNoLAotCQkJCSBpbnQgY29uZCkKKwkJCQkgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKiksIGludCB0aHJlc2gpCiB7CiAJcmV0dXJuIG9rZm4oc2tiKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL0tidWlsZCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL0tidWlsZAppbmRleCAyYWVhNTAzLi5hNWE2M2U0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9LYnVpbGQKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvS2J1aWxkCkBAIC02LDYgKzYsNyBAQAogaGVhZGVyLXkgKz0geHRfQ0xBU1NJRlkuaAogaGVhZGVyLXkgKz0geHRfQ09OTk1BUksuaAogaGVhZGVyLXkgKz0geHRfQ09OTlNFQ01BUksuaAoraGVhZGVyLXkgKz0geHRfQ1QuaAogaGVhZGVyLXkgKz0geHRfRFNDUC5oCiBoZWFkZXIteSArPSB4dF9MRUQuaAogaGVhZGVyLXkgKz0geHRfTUFSSy5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmgKaW5kZXggYTM3NDc4Ny4uYzYwODY3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb21tb24uaApAQCAtNzIsNiArNzIsMjggQEAKIAkvKiBDb25uZWN0aW9uIGhhcyBmaXhlZCB0aW1lb3V0LiAqLwogCUlQU19GSVhFRF9USU1FT1VUX0JJVCA9IDEwLAogCUlQU19GSVhFRF9USU1FT1VUID0gKDEgPDwgSVBTX0ZJWEVEX1RJTUVPVVRfQklUKSwKKworCS8qIENvbm50cmFjayBpcyBhIHRlbXBsYXRlICovCisJSVBTX1RFTVBMQVRFX0JJVCA9IDExLAorCUlQU19URU1QTEFURSA9ICgxIDw8IElQU19URU1QTEFURV9CSVQpLAorfTsKKworLyogQ29ubmVjdGlvbiB0cmFja2luZyBldmVudCB0eXBlcyAqLworZW51bSBpcF9jb25udHJhY2tfZXZlbnRzIHsKKwlJUENUX05FVywJCS8qIG5ldyBjb25udHJhY2sgKi8KKwlJUENUX1JFTEFURUQsCQkvKiByZWxhdGVkIGNvbm50cmFjayAqLworCUlQQ1RfREVTVFJPWSwJCS8qIGRlc3Ryb3llZCBjb25udHJhY2sgKi8KKwlJUENUX1JFUExZLAkJLyogY29ubmVjdGlvbiBoYXMgc2VlbiB0d28td2F5IHRyYWZmaWMgKi8KKwlJUENUX0FTU1VSRUQsCQkvKiBjb25uZWN0aW9uIHN0YXR1cyBoYXMgY2hhbmdlZCB0byBhc3N1cmVkICovCisJSVBDVF9QUk9UT0lORk8sCQkvKiBwcm90b2NvbCBpbmZvcm1hdGlvbiBoYXMgY2hhbmdlZCAqLworCUlQQ1RfSEVMUEVSLAkJLyogbmV3IGhlbHBlciBoYXMgYmVlbiBzZXQgKi8KKwlJUENUX01BUkssCQkvKiBuZXcgbWFyayBoYXMgYmVlbiBzZXQgKi8KKwlJUENUX05BVFNFUUFESiwJCS8qIE5BVCBpcyBkb2luZyBzZXF1ZW5jZSBhZGp1c3RtZW50ICovCisJSVBDVF9TRUNNQVJLLAkJLyogbmV3IHNlY3VyaXR5IG1hcmsgaGFzIGJlZW4gc2V0ICovCit9OworCitlbnVtIGlwX2Nvbm50cmFja19leHBlY3RfZXZlbnRzIHsKKwlJUEVYUF9ORVcsCQkvKiBuZXcgZXhwZWN0YXRpb24gKi8KIH07CiAKICNpZmRlZiBfX0tFUk5FTF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2lwLmgKaW5kZXggMjNhYTJlYy4uZmY4Y2ZiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaApAQCAtMTQsNiArMTQsNyBAQAogCVNJUF9FWFBFQ1RfU0lHTkFMTElORywKIAlTSVBfRVhQRUNUX0FVRElPLAogCVNJUF9FWFBFQ1RfVklERU8sCisJU0lQX0VYUEVDVF9JTUFHRSwKIAlfX1NJUF9FWFBFQ1RfTUFYCiB9OwogI2RlZmluZSBTSVBfRVhQRUNUX01BWAkoX19TSVBfRVhQRUNUX01BWCAtIDEpCkBAIC0zNCwxMCArMzUsMTAgQEAKIHN0cnVjdCBzaXBfaGFuZGxlciB7CiAJY29uc3QgY2hhcgkqbWV0aG9kOwogCXVuc2lnbmVkIGludAlsZW47Ci0JaW50CQkoKnJlcXVlc3QpKHN0cnVjdCBza19idWZmICpza2IsCisJaW50CQkoKnJlcXVlc3QpKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkJCSAgIGNvbnN0IGNoYXIgKipkcHRyLCB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCiAJCQkJICAgdW5zaWduZWQgaW50IGNzZXEpOwotCWludAkJKCpyZXNwb25zZSkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwlpbnQJCSgqcmVzcG9uc2UpKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkJCSAgICBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAogCQkJCSAgICB1bnNpZ25lZCBpbnQgY3NlcSwgdW5zaWduZWQgaW50IGNvZGUpOwogfTsKQEAgLTg0LDcgKzg1LDggQEAKIAlTSVBfSERSX0ZST00sCiAJU0lQX0hEUl9UTywKIAlTSVBfSERSX0NPTlRBQ1QsCi0JU0lQX0hEUl9WSUEsCisJU0lQX0hEUl9WSUFfVURQLAorCVNJUF9IRFJfVklBX1RDUCwKIAlTSVBfSERSX0VYUElSRVMsCiAJU0lQX0hEUl9DT05URU5UX0xFTkdUSCwKIH07CkBAIC0xMDAsMzMgKzEwMiw0MCBAQAogfTsKIAogZXh0ZXJuIHVuc2lnbmVkIGludCAoKm5mX25hdF9zaXBfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkJICAgICAgIGNvbnN0IGNoYXIgKipkcHRyLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGFsZW4pOworZXh0ZXJuIHZvaWQgKCpuZl9uYXRfc2lwX3NlcV9hZGp1c3RfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgczE2IG9mZik7CiBleHRlcm4gdW5zaWduZWQgaW50ICgqbmZfbmF0X3NpcF9leHBlY3RfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkJCSAgICAgIGNvbnN0IGNoYXIgKipkcHRyLAogCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCiAJCQkJCSAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsCiAJCQkJCSAgICAgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwKIAkJCQkJICAgICAgdW5zaWduZWQgaW50IG1hdGNobGVuKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgKCpuZl9uYXRfc2RwX2FkZHJfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJICAgIGNvbnN0IGNoYXIgKipkcHRyLAogCQkJCQkgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCisJCQkJCSAgICBjb25zdCBjaGFyICoqZHB0ciwKIAkJCQkJICAgIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKKwkJCQkJICAgIHVuc2lnbmVkIGludCBzZHBvZmYsCiAJCQkJCSAgICBlbnVtIHNkcF9oZWFkZXJfdHlwZXMgdHlwZSwKIAkJCQkJICAgIGVudW0gc2RwX2hlYWRlcl90eXBlcyB0ZXJtLAogCQkJCQkgICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgKCpuZl9uYXRfc2RwX3BvcnRfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkJCQkgICAgY29uc3QgY2hhciAqKmRwdHIsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sCiAJCQkJCSAgICB1X2ludDE2X3QgcG9ydCk7CiBleHRlcm4gdW5zaWduZWQgaW50ICgqbmZfbmF0X3NkcF9zZXNzaW9uX2hvb2spKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgICAgICBjb25zdCBjaGFyICoqZHB0ciwKIAkJCQkJICAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkJCQkgICAgICAgY29uc3QgY2hhciAqKmRwdHIsCiAJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgc2Rwb2ZmLAogCQkJCQkgICAgICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgKCpuZl9uYXRfc2RwX21lZGlhX2hvb2spKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJCSAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkJCSAgICAgY29uc3QgY2hhciAqKmRwdHIsCiAJCQkJCSAgICAgdW5zaWduZWQgaW50ICpkYXRhbGVuLAogCQkJCQkgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpydHBfZXhwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaAppbmRleCA0OWQzMjFmLi41MzkyMzg2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaApAQCAtNzMsMTEgKzczLDExIEBACiBleHRlcm4gaW50IG5mbmV0bGlua19zdWJzeXNfcmVnaXN0ZXIoY29uc3Qgc3RydWN0IG5mbmV0bGlua19zdWJzeXN0ZW0gKm4pOwogZXh0ZXJuIGludCBuZm5ldGxpbmtfc3Vic3lzX3VucmVnaXN0ZXIoY29uc3Qgc3RydWN0IG5mbmV0bGlua19zdWJzeXN0ZW0gKm4pOwogCi1leHRlcm4gaW50IG5mbmV0bGlua19oYXNfbGlzdGVuZXJzKHVuc2lnbmVkIGludCBncm91cCk7Ci1leHRlcm4gaW50IG5mbmV0bGlua19zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHVuc2lnbmVkIGdyb3VwLCAKK2V4dGVybiBpbnQgbmZuZXRsaW5rX2hhc19saXN0ZW5lcnMoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBpbnQgZ3JvdXApOworZXh0ZXJuIGludCBuZm5ldGxpbmtfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBwaWQsIHVuc2lnbmVkIGdyb3VwLAogCQkJICBpbnQgZWNobywgZ2ZwX3QgZmxhZ3MpOwotZXh0ZXJuIHZvaWQgbmZuZXRsaW5rX3NldF9lcnIodTMyIHBpZCwgdTMyIGdyb3VwLCBpbnQgZXJyb3IpOwotZXh0ZXJuIGludCBuZm5ldGxpbmtfdW5pY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1X2ludDMyX3QgcGlkLCBpbnQgZmxhZ3MpOworZXh0ZXJuIHZvaWQgbmZuZXRsaW5rX3NldF9lcnIoc3RydWN0IG5ldCAqbmV0LCB1MzIgcGlkLCB1MzIgZ3JvdXAsIGludCBlcnJvcik7CitleHRlcm4gaW50IG5mbmV0bGlua191bmljYXN0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgdV9pbnQzMl90IHBpZCwgaW50IGZsYWdzKTsKIAogZXh0ZXJuIHZvaWQgbmZubF9sb2NrKHZvaWQpOwogZXh0ZXJuIHZvaWQgbmZubF91bmxvY2sodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmtfY29ubnRyYWNrLmgKaW5kZXggZWQ0ZWY4ZC4uOWVkNTM0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaApAQCAtNDAsNiArNDAsNyBAQAogCUNUQV9OQVRfU0VRX0FESl9PUklHLAogCUNUQV9OQVRfU0VRX0FESl9SRVBMWSwKIAlDVEFfU0VDTUFSSywKKwlDVEFfWk9ORSwKIAlfX0NUQV9NQVgKIH07CiAjZGVmaW5lIENUQV9NQVggKF9fQ1RBX01BWCAtIDEpCkBAIC0xNTksNiArMTYwLDcgQEAKIAlDVEFfRVhQRUNUX1RJTUVPVVQsCiAJQ1RBX0VYUEVDVF9JRCwKIAlDVEFfRVhQRUNUX0hFTFBfTkFNRSwKKwlDVEFfRVhQRUNUX1pPTkUsCiAJX19DVEFfRVhQRUNUX01BWAogfTsKICNkZWZpbmUgQ1RBX0VYUEVDVF9NQVggKF9fQ1RBX0VYUEVDVF9NQVggLSAxKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKaW5kZXggMzc4ZjI3YS4uODRjN2M5MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oCkBAIC05Myw4ICs5Myw3IEBACiAJX191NjQgdTY0OwogfTsKIAotI2RlZmluZSBYVF9BTElHTihzKSAoKChzKSArIChfX2FsaWdub2ZfXyhzdHJ1Y3QgX3h0X2FsaWduKS0xKSkgCVwKLQkJCSYgfihfX2FsaWdub2ZfXyhzdHJ1Y3QgX3h0X2FsaWduKS0xKSkKKyNkZWZpbmUgWFRfQUxJR04ocykgQUxJR04oKHMpLCBfX2FsaWdub2ZfXyhzdHJ1Y3QgX3h0X2FsaWduKSkKIAogLyogU3RhbmRhcmQgcmV0dXJuIHZlcmRpY3QsIG9yIGRvIGp1bXAuICovCiAjZGVmaW5lIFhUX1NUQU5EQVJEX1RBUkdFVCAiIgpAQCAtMTIxLDYgKzEyMCw3IEBACiAKICNkZWZpbmUgWFRfSU5WX1BST1RPCQkweDQwCS8qIEludmVydCB0aGUgc2Vuc2Ugb2YgUFJPVE8uICovCiAKKyNpZm5kZWYgX19LRVJORUxfXwogLyogZm4gcmV0dXJucyAwIHRvIGNvbnRpbnVlIGl0ZXJhdGlvbiAqLwogI2RlZmluZSBYVF9NQVRDSF9JVEVSQVRFKHR5cGUsIGUsIGZuLCBhcmdzLi4uKQkJCVwKICh7CQkJCQkJCQlcCkBAIC0xNjQsNiArMTY0LDIyIEBACiAjZGVmaW5lIFhUX0VOVFJZX0lURVJBVEUodHlwZSwgZW50cmllcywgc2l6ZSwgZm4sIGFyZ3MuLi4pIFwKIAlYVF9FTlRSWV9JVEVSQVRFX0NPTlRJTlVFKHR5cGUsIGVudHJpZXMsIHNpemUsIDAsIGZuLCBhcmdzKQogCisjZW5kaWYgLyogIV9fS0VSTkVMX18gKi8KKworLyogcG9zIGlzIG5vcm1hbGx5IGEgc3RydWN0IGlwdF9lbnRyeS9pcDZ0X2VudHJ5L2V0Yy4gKi8KKyNkZWZpbmUgeHRfZW50cnlfZm9yZWFjaChwb3MsIGVoZWFkLCBlc2l6ZSkgXAorCWZvciAoKHBvcykgPSAodHlwZW9mKHBvcykpKGVoZWFkKTsgXAorCSAgICAgKHBvcykgPCAodHlwZW9mKHBvcykpKChjaGFyICopKGVoZWFkKSArIChlc2l6ZSkpOyBcCisJICAgICAocG9zKSA9ICh0eXBlb2YocG9zKSkoKGNoYXIgKikocG9zKSArIChwb3MpLT5uZXh0X29mZnNldCkpCisKKy8qIGNhbiBvbmx5IGJlIHh0X2VudHJ5X21hdGNoLCBzbyBubyB1c2Ugb2YgdHlwZW9mIGhlcmUgKi8KKyNkZWZpbmUgeHRfZW1hdGNoX2ZvcmVhY2gocG9zLCBlbnRyeSkgXAorCWZvciAoKHBvcykgPSAoc3RydWN0IHh0X2VudHJ5X21hdGNoICopZW50cnktPmVsZW1zOyBcCisJICAgICAocG9zKSA8IChzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKikoKGNoYXIgKikoZW50cnkpICsgXAorCSAgICAgICAgICAgICAoZW50cnkpLT50YXJnZXRfb2Zmc2V0KTsgXAorCSAgICAgKHBvcykgPSAoc3RydWN0IHh0X2VudHJ5X21hdGNoICopKChjaGFyICopKHBvcykgKyBcCisJICAgICAgICAgICAgIChwb3MpLT51Lm1hdGNoX3NpemUpKQorCiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CkBAIC0yMDUsNiArMjIxLDcgQEAKICAqIEBob29rX21hc2s6CXZpYSB3aGljaCBob29rcyB0aGUgbmV3IHJ1bGUgaXMgcmVhY2hhYmxlCiAgKi8KIHN0cnVjdCB4dF9tdGNoa19wYXJhbSB7CisJc3RydWN0IG5ldCAqbmV0OwogCWNvbnN0IGNoYXIgKnRhYmxlOwogCWNvbnN0IHZvaWQgKmVudHJ5aW5mbzsKIAljb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoOwpAQCAtMjE1LDYgKzIzMiw3IEBACiAKIC8qIE1hdGNoIGRlc3RydWN0b3IgcGFyYW1ldGVycyAqLwogc3RydWN0IHh0X210ZHRvcl9wYXJhbSB7CisJc3RydWN0IG5ldCAqbmV0OwogCWNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2g7CiAJdm9pZCAqbWF0Y2hpbmZvOwogCXVfaW50OF90IGZhbWlseTsKQEAgLTI0Nyw2ICsyNjUsNyBAQAogICogT3RoZXIgZmllbGRzIHNlZSBhYm92ZS4KICAqLwogc3RydWN0IHh0X3RnY2hrX3BhcmFtIHsKKwlzdHJ1Y3QgbmV0ICpuZXQ7CiAJY29uc3QgY2hhciAqdGFibGU7CiAJY29uc3Qgdm9pZCAqZW50cnlpbmZvOwogCWNvbnN0IHN0cnVjdCB4dF90YXJnZXQgKnRhcmdldDsKQEAgLTI1Nyw2ICsyNzYsNyBAQAogCiAvKiBUYXJnZXQgZGVzdHJ1Y3RvciBwYXJhbWV0ZXJzICovCiBzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtIHsKKwlzdHJ1Y3QgbmV0ICpuZXQ7CiAJY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0OwogCXZvaWQgKnRhcmdpbmZvOwogCXVfaW50OF90IGZhbWlseTsKQEAgLTI4MSwxMSArMzAxLDExIEBACiAKIAkvKiBDYWxsZWQgd2hlbiBlbnRyeSBvZiB0aGlzIHR5cGUgZGVsZXRlZC4gKi8KIAl2b2lkICgqZGVzdHJveSkoY29uc3Qgc3RydWN0IHh0X210ZHRvcl9wYXJhbSAqKTsKLQorI2lmZGVmIENPTkZJR19DT01QQVQKIAkvKiBDYWxsZWQgd2hlbiB1c2Vyc3BhY2UgYWxpZ24gZGlmZmVycyBmcm9tIGtlcm5lbCBzcGFjZSBvbmUgKi8KLQl2b2lkICgqY29tcGF0X2Zyb21fdXNlcikodm9pZCAqZHN0LCB2b2lkICpzcmMpOwotCWludCAoKmNvbXBhdF90b191c2VyKSh2b2lkIF9fdXNlciAqZHN0LCB2b2lkICpzcmMpOwotCisJdm9pZCAoKmNvbXBhdF9mcm9tX3VzZXIpKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKTsKKwlpbnQgKCpjb21wYXRfdG9fdXNlcikodm9pZCBfX3VzZXIgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKTsKKyNlbmRpZgogCS8qIFNldCB0aGlzIHRvIFRISVNfTU9EVUxFIGlmIHlvdSBhcmUgYSBtb2R1bGUsIG90aGVyd2lzZSBOVUxMICovCiAJc3RydWN0IG1vZHVsZSAqbWU7CiAKQEAgLTI5NCw3ICszMTQsOSBAQAogCiAJY29uc3QgY2hhciAqdGFibGU7CiAJdW5zaWduZWQgaW50IG1hdGNoc2l6ZTsKKyNpZmRlZiBDT05GSUdfQ09NUEFUCiAJdW5zaWduZWQgaW50IGNvbXBhdHNpemU7CisjZW5kaWYKIAl1bnNpZ25lZCBpbnQgaG9va3M7CiAJdW5zaWduZWQgc2hvcnQgcHJvdG87CiAKQEAgLTMyMSwxNyArMzQzLDE5IEBACiAKIAkvKiBDYWxsZWQgd2hlbiBlbnRyeSBvZiB0aGlzIHR5cGUgZGVsZXRlZC4gKi8KIAl2b2lkICgqZGVzdHJveSkoY29uc3Qgc3RydWN0IHh0X3RnZHRvcl9wYXJhbSAqKTsKLQorI2lmZGVmIENPTkZJR19DT01QQVQKIAkvKiBDYWxsZWQgd2hlbiB1c2Vyc3BhY2UgYWxpZ24gZGlmZmVycyBmcm9tIGtlcm5lbCBzcGFjZSBvbmUgKi8KLQl2b2lkICgqY29tcGF0X2Zyb21fdXNlcikodm9pZCAqZHN0LCB2b2lkICpzcmMpOwotCWludCAoKmNvbXBhdF90b191c2VyKSh2b2lkIF9fdXNlciAqZHN0LCB2b2lkICpzcmMpOwotCisJdm9pZCAoKmNvbXBhdF9mcm9tX3VzZXIpKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKTsKKwlpbnQgKCpjb21wYXRfdG9fdXNlcikodm9pZCBfX3VzZXIgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKTsKKyNlbmRpZgogCS8qIFNldCB0aGlzIHRvIFRISVNfTU9EVUxFIGlmIHlvdSBhcmUgYSBtb2R1bGUsIG90aGVyd2lzZSBOVUxMICovCiAJc3RydWN0IG1vZHVsZSAqbWU7CiAKIAljb25zdCBjaGFyICp0YWJsZTsKIAl1bnNpZ25lZCBpbnQgdGFyZ2V0c2l6ZTsKKyNpZmRlZiBDT05GSUdfQ09NUEFUCiAJdW5zaWduZWQgaW50IGNvbXBhdHNpemU7CisjZW5kaWYKIAl1bnNpZ25lZCBpbnQgaG9va3M7CiAJdW5zaWduZWQgc2hvcnQgcHJvdG87CiAKQEAgLTM1Myw2ICszNzcsNyBAQAogCXN0cnVjdCBtb2R1bGUgKm1lOwogCiAJdV9pbnQ4X3QgYWY7CQkvKiBhZGRyZXNzL3Byb3RvY29sIGZhbWlseSAqLworCWludCBwcmlvcml0eTsJCS8qIGhvb2sgb3JkZXIgKi8KIAogCS8qIEEgdW5pcXVlIG5hbWUuLi4gKi8KIAljb25zdCBjaGFyIG5hbWVbWFRfVEFCTEVfTUFYTkFNRUxFTl07CkBAIC01MTQsNiArNTM5LDkgQEAKIAlyZXR1cm4gcmV0OwogfQogCitleHRlcm4gc3RydWN0IG5mX2hvb2tfb3BzICp4dF9ob29rX2xpbmsoY29uc3Qgc3RydWN0IHh0X3RhYmxlICosIG5mX2hvb2tmbiAqKTsKK2V4dGVybiB2b2lkIHh0X2hvb2tfdW5saW5rKGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqLCBzdHJ1Y3QgbmZfaG9va19vcHMgKik7CisKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAjaW5jbHVkZSA8bmV0L2NvbXBhdC5oPgogCkBAIC01NTQsMTEgKzU4Miw3IEBACiAgKiBjdXJyZW50IHRhc2sgYWxpZ25tZW50ICovCiAKIHN0cnVjdCBjb21wYXRfeHRfY291bnRlcnMgewotI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfSUE2NCkKLQl1X2ludDMyX3QgY250WzRdOwotI2Vsc2UKLQl1X2ludDY0X3QgY250WzJdOwotI2VuZGlmCisJY29tcGF0X3U2NCBwY250LCBiY250OwkJCS8qIFBhY2tldCBhbmQgYnl0ZSBjb3VudGVycyAqLwogfTsKIAogc3RydWN0IGNvbXBhdF94dF9jb3VudGVyc19pbmZvIHsKQEAgLTU2NywyNiArNTkxLDMyIEBACiAJc3RydWN0IGNvbXBhdF94dF9jb3VudGVycyBjb3VudGVyc1swXTsKIH07CiAKLSNkZWZpbmUgQ09NUEFUX1hUX0FMSUdOKHMpICgoKHMpICsgKF9fYWxpZ25vZl9fKHN0cnVjdCBjb21wYXRfeHRfY291bnRlcnMpLTEpKSBcCi0JCSYgfihfX2FsaWdub2ZfXyhzdHJ1Y3QgY29tcGF0X3h0X2NvdW50ZXJzKS0xKSkKK3N0cnVjdCBfY29tcGF0X3h0X2FsaWduIHsKKwlfX3U4IHU4OworCV9fdTE2IHUxNjsKKwlfX3UzMiB1MzI7CisJY29tcGF0X3U2NCB1NjQ7Cit9OworCisjZGVmaW5lIENPTVBBVF9YVF9BTElHTihzKSBBTElHTigocyksIF9fYWxpZ25vZl9fKHN0cnVjdCBfY29tcGF0X3h0X2FsaWduKSkKIAogZXh0ZXJuIHZvaWQgeHRfY29tcGF0X2xvY2sodV9pbnQ4X3QgYWYpOwogZXh0ZXJuIHZvaWQgeHRfY29tcGF0X3VubG9jayh1X2ludDhfdCBhZik7CiAKIGV4dGVybiBpbnQgeHRfY29tcGF0X2FkZF9vZmZzZXQodV9pbnQ4X3QgYWYsIHVuc2lnbmVkIGludCBvZmZzZXQsIHNob3J0IGRlbHRhKTsKIGV4dGVybiB2b2lkIHh0X2NvbXBhdF9mbHVzaF9vZmZzZXRzKHVfaW50OF90IGFmKTsKLWV4dGVybiBzaG9ydCB4dF9jb21wYXRfY2FsY19qdW1wKHVfaW50OF90IGFmLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KTsKK2V4dGVybiBpbnQgeHRfY29tcGF0X2NhbGNfanVtcCh1X2ludDhfdCBhZiwgdW5zaWduZWQgaW50IG9mZnNldCk7CiAKIGV4dGVybiBpbnQgeHRfY29tcGF0X21hdGNoX29mZnNldChjb25zdCBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoKTsKIGV4dGVybiBpbnQgeHRfY29tcGF0X21hdGNoX2Zyb21fdXNlcihzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKm0sCiAJCQkJICAgICB2b2lkICoqZHN0cHRyLCB1bnNpZ25lZCBpbnQgKnNpemUpOwotZXh0ZXJuIGludCB4dF9jb21wYXRfbWF0Y2hfdG9fdXNlcihzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKm0sCitleHRlcm4gaW50IHh0X2NvbXBhdF9tYXRjaF90b191c2VyKGNvbnN0IHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqbSwKIAkJCQkgICB2b2lkIF9fdXNlciAqKmRzdHB0ciwgdW5zaWduZWQgaW50ICpzaXplKTsKIAogZXh0ZXJuIGludCB4dF9jb21wYXRfdGFyZ2V0X29mZnNldChjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQpOwogZXh0ZXJuIHZvaWQgeHRfY29tcGF0X3RhcmdldF9mcm9tX3VzZXIoc3RydWN0IHh0X2VudHJ5X3RhcmdldCAqdCwKIAkJCQkgICAgICAgdm9pZCAqKmRzdHB0ciwgdW5zaWduZWQgaW50ICpzaXplKTsKLWV4dGVybiBpbnQgeHRfY29tcGF0X3RhcmdldF90b191c2VyKHN0cnVjdCB4dF9lbnRyeV90YXJnZXQgKnQsCitleHRlcm4gaW50IHh0X2NvbXBhdF90YXJnZXRfdG9fdXNlcihjb25zdCBzdHJ1Y3QgeHRfZW50cnlfdGFyZ2V0ICp0LAogCQkJCSAgICB2b2lkIF9fdXNlciAqKmRzdHB0ciwgdW5zaWduZWQgaW50ICpzaXplKTsKIAogI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyL3h0X0NULmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DVC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNTY0MTAKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlci94dF9DVC5oCkBAIC0wLDAgKzEsMTcgQEAKKyNpZm5kZWYgX1hUX0NUX0gKKyNkZWZpbmUgX1hUX0NUX0gKKworI2RlZmluZSBYVF9DVF9OT1RSQUNLCTB4MQorCitzdHJ1Y3QgeHRfY3RfdGFyZ2V0X2luZm8geworCXVfaW50MTZfdAlmbGFnczsKKwl1X2ludDE2X3QJem9uZTsKKwl1X2ludDMyX3QJY3RfZXZlbnRzOworCXVfaW50MzJfdAlleHBfZXZlbnRzOworCWNoYXIJCWhlbHBlclsxNl07CisKKwkvKiBVc2VkIGludGVybmFsbHkgYnkgdGhlIGtlcm5lbCAqLworCXN0cnVjdCBuZl9jb25uCSpjdCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSk7Cit9OworCisjZW5kaWYgLyogX1hUX0NUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oCmluZGV4IGYyMzM2NTIuLmU5OTQ4YzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaApAQCAtMjExLDkgKzIxMSwxMSBAQAogCXJldHVybiAodm9pZCAqKWUgKyBlLT50YXJnZXRfb2Zmc2V0OwogfQogCisjaWZuZGVmIF9fS0VSTkVMX18KIC8qIGZuIHJldHVybnMgMCB0byBjb250aW51ZSBpdGVyYXRpb24gKi8KICNkZWZpbmUgQVJQVF9FTlRSWV9JVEVSQVRFKGVudHJpZXMsIHNpemUsIGZuLCBhcmdzLi4uKSBcCiAJWFRfRU5UUllfSVRFUkFURShzdHJ1Y3QgYXJwdF9lbnRyeSwgZW50cmllcywgc2l6ZSwgZm4sICMjIGFyZ3MpCisjZW5kaWYKIAogLyoKICAqCU1haW4gZmlyZXdhbGwgY2hhaW5zIGRlZmluaXRpb25zIGFuZCBnbG9iYWwgdmFyJ3MgZGVmaW5pdGlvbnMuCkBAIC0yNTgsNiArMjYwLDcgQEAKIAkudGFyZ2V0LmVycm9ybmFtZSA9ICJFUlJPUiIsCQkJCQkgICAgICAgXAogfQogCitleHRlcm4gdm9pZCAqYXJwdF9hbGxvY19pbml0aWFsX3RhYmxlKGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqKTsKIGV4dGVybiBzdHJ1Y3QgeHRfdGFibGUgKmFycHRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICAgY29uc3Qgc3RydWN0IHh0X3RhYmxlICp0YWJsZSwKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCBhcnB0X3JlcGxhY2UgKnJlcGwpOwpAQCAtMjkwLDE0ICsyOTMsNiBAQAogCiAjZGVmaW5lIENPTVBBVF9BUlBUX0FMSUdOKHMpCUNPTVBBVF9YVF9BTElHTihzKQogCi0vKiBmbiByZXR1cm5zIDAgdG8gY29udGludWUgaXRlcmF0aW9uICovCi0jZGVmaW5lIENPTVBBVF9BUlBUX0VOVFJZX0lURVJBVEUoZW50cmllcywgc2l6ZSwgZm4sIGFyZ3MuLi4pIFwKLQlYVF9FTlRSWV9JVEVSQVRFKHN0cnVjdCBjb21wYXRfYXJwdF9lbnRyeSwgZW50cmllcywgc2l6ZSwgZm4sICMjIGFyZ3MpCi0KLSNkZWZpbmUgQ09NUEFUX0FSUFRfRU5UUllfSVRFUkFURV9DT05USU5VRShlbnRyaWVzLCBzaXplLCBuLCBmbiwgYXJncy4uLikgXAotCVhUX0VOVFJZX0lURVJBVEVfQ09OVElOVUUoc3RydWN0IGNvbXBhdF9hcnB0X2VudHJ5LCBlbnRyaWVzLCBzaXplLCBuLCBcCi0JCQkJICBmbiwgIyMgYXJncykKLQogI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KICNlbmRpZiAvKl9fS0VSTkVMX18qLwogI2VuZGlmIC8qIF9BUlBUQUJMRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYnJpZGdlL2VidGFibGVzLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0YWJsZXMuaAppbmRleCAzY2M0MGMxLi4xYzZmMGM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UvZWJ0YWJsZXMuaApAQCAtMjg5LDcgKzI4OSw3IEBACiAJCSAgICAgfihfX2FsaWdub2ZfXyhzdHJ1Y3QgZWJ0X3JlcGxhY2UpLTEpKQogZXh0ZXJuIHN0cnVjdCBlYnRfdGFibGUgKmVidF9yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCSAgICBjb25zdCBzdHJ1Y3QgZWJ0X3RhYmxlICp0YWJsZSk7Ci1leHRlcm4gdm9pZCBlYnRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgZWJ0X3RhYmxlICp0YWJsZSk7CitleHRlcm4gdm9pZCBlYnRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBlYnRfdGFibGUgKnRhYmxlKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZWJ0X2RvX3RhYmxlKHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogICAgc3RydWN0IGVidF90YWJsZSAqdGFibGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmgKaW5kZXggMjdiM2Y1OC4uNzA0YTdiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oCkBAIC0yMjMsNiArMjIzLDcgQEAKIAlyZXR1cm4gKHZvaWQgKillICsgZS0+dGFyZ2V0X29mZnNldDsKIH0KIAorI2lmbmRlZiBfX0tFUk5FTF9fCiAvKiBmbiByZXR1cm5zIDAgdG8gY29udGludWUgaXRlcmF0aW9uICovCiAjZGVmaW5lIElQVF9NQVRDSF9JVEVSQVRFKGUsIGZuLCBhcmdzLi4uKSBcCiAJWFRfTUFUQ0hfSVRFUkFURShzdHJ1Y3QgaXB0X2VudHJ5LCBlLCBmbiwgIyMgYXJncykKQEAgLTIzMCw2ICsyMzEsNyBAQAogLyogZm4gcmV0dXJucyAwIHRvIGNvbnRpbnVlIGl0ZXJhdGlvbiAqLwogI2RlZmluZSBJUFRfRU5UUllfSVRFUkFURShlbnRyaWVzLCBzaXplLCBmbiwgYXJncy4uLikgXAogCVhUX0VOVFJZX0lURVJBVEUoc3RydWN0IGlwdF9lbnRyeSwgZW50cmllcywgc2l6ZSwgZm4sICMjIGFyZ3MpCisjZW5kaWYKIAogLyoKICAqCU1haW4gZmlyZXdhbGwgY2hhaW5zIGRlZmluaXRpb25zIGFuZCBnbG9iYWwgdmFyJ3MgZGVmaW5pdGlvbnMuCkBAIC0yNDIsNyArMjQ0LDcgQEAKIGV4dGVybiBzdHJ1Y3QgeHRfdGFibGUgKmlwdF9yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAJCQkJCSAgIGNvbnN0IHN0cnVjdCBpcHRfcmVwbGFjZSAqcmVwbCk7Ci1leHRlcm4gdm9pZCBpcHRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKTsKK2V4dGVybiB2b2lkIGlwdF91bnJlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHh0X3RhYmxlICp0YWJsZSk7CiAKIC8qIFN0YW5kYXJkIGVudHJ5LiAqLwogc3RydWN0IGlwdF9zdGFuZGFyZCB7CkBAIC0yODIsNiArMjg0LDcgQEAKIAkudGFyZ2V0LmVycm9ybmFtZSA9ICJFUlJPUiIsCQkJCQkgICAgICAgXAogfQogCitleHRlcm4gdm9pZCAqaXB0X2FsbG9jX2luaXRpYWxfdGFibGUoY29uc3Qgc3RydWN0IHh0X3RhYmxlICopOwogZXh0ZXJuIHVuc2lnbmVkIGludCBpcHRfZG9fdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgdW5zaWduZWQgaW50IGhvb2ssCiAJCQkJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKQEAgLTMxMiwxOSArMzE1LDYgQEAKIAogI2RlZmluZSBDT01QQVRfSVBUX0FMSUdOKHMpIAlDT01QQVRfWFRfQUxJR04ocykKIAotLyogZm4gcmV0dXJucyAwIHRvIGNvbnRpbnVlIGl0ZXJhdGlvbiAqLwotI2RlZmluZSBDT01QQVRfSVBUX01BVENIX0lURVJBVEUoZSwgZm4sIGFyZ3MuLi4pIFwKLQlYVF9NQVRDSF9JVEVSQVRFKHN0cnVjdCBjb21wYXRfaXB0X2VudHJ5LCBlLCBmbiwgIyMgYXJncykKLQotLyogZm4gcmV0dXJucyAwIHRvIGNvbnRpbnVlIGl0ZXJhdGlvbiAqLwotI2RlZmluZSBDT01QQVRfSVBUX0VOVFJZX0lURVJBVEUoZW50cmllcywgc2l6ZSwgZm4sIGFyZ3MuLi4pIFwKLQlYVF9FTlRSWV9JVEVSQVRFKHN0cnVjdCBjb21wYXRfaXB0X2VudHJ5LCBlbnRyaWVzLCBzaXplLCBmbiwgIyMgYXJncykKLQotLyogZm4gcmV0dXJucyAwIHRvIGNvbnRpbnVlIGl0ZXJhdGlvbiAqLwotI2RlZmluZSBDT01QQVRfSVBUX0VOVFJZX0lURVJBVEVfQ09OVElOVUUoZW50cmllcywgc2l6ZSwgbiwgZm4sIGFyZ3MuLi4pIFwKLQlYVF9FTlRSWV9JVEVSQVRFX0NPTlRJTlVFKHN0cnVjdCBjb21wYXRfaXB0X2VudHJ5LCBlbnRyaWVzLCBzaXplLCBuLCBcCi0JCQkJICBmbiwgIyMgYXJncykKLQogI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KICNlbmRpZiAvKl9fS0VSTkVMX18qLwogI2VuZGlmIC8qIF9JUFRBQkxFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oCmluZGV4IGIzMTA1MGQuLmU1YmEwM2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oCkBAIC0yODAsNiArMjgwLDcgQEAKIAlyZXR1cm4gKHZvaWQgKillICsgZS0+dGFyZ2V0X29mZnNldDsKIH0KIAorI2lmbmRlZiBfX0tFUk5FTF9fCiAvKiBmbiByZXR1cm5zIDAgdG8gY29udGludWUgaXRlcmF0aW9uICovCiAjZGVmaW5lIElQNlRfTUFUQ0hfSVRFUkFURShlLCBmbiwgYXJncy4uLikgXAogCVhUX01BVENIX0lURVJBVEUoc3RydWN0IGlwNnRfZW50cnksIGUsIGZuLCAjIyBhcmdzKQpAQCAtMjg3LDYgKzI4OCw3IEBACiAvKiBmbiByZXR1cm5zIDAgdG8gY29udGludWUgaXRlcmF0aW9uICovCiAjZGVmaW5lIElQNlRfRU5UUllfSVRFUkFURShlbnRyaWVzLCBzaXplLCBmbiwgYXJncy4uLikgXAogCVhUX0VOVFJZX0lURVJBVEUoc3RydWN0IGlwNnRfZW50cnksIGVudHJpZXMsIHNpemUsIGZuLCAjIyBhcmdzKQorI2VuZGlmCiAKIC8qCiAgKglNYWluIGZpcmV3YWxsIGNoYWlucyBkZWZpbml0aW9ucyBhbmQgZ2xvYmFsIHZhcidzIGRlZmluaXRpb25zLgpAQCAtMjk3LDEwICsyOTksMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiBleHRlcm4gdm9pZCBpcDZ0X2luaXQodm9pZCkgX19pbml0OwogCitleHRlcm4gdm9pZCAqaXA2dF9hbGxvY19pbml0aWFsX3RhYmxlKGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqKTsKIGV4dGVybiBzdHJ1Y3QgeHRfdGFibGUgKmlwNnRfcmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LAogCQkJCQkgICAgY29uc3Qgc3RydWN0IHh0X3RhYmxlICp0YWJsZSwKIAkJCQkJICAgIGNvbnN0IHN0cnVjdCBpcDZ0X3JlcGxhY2UgKnJlcGwpOwotZXh0ZXJuIHZvaWQgaXA2dF91bnJlZ2lzdGVyX3RhYmxlKHN0cnVjdCB4dF90YWJsZSAqdGFibGUpOworZXh0ZXJuIHZvaWQgaXA2dF91bnJlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHh0X3RhYmxlICp0YWJsZSk7CiBleHRlcm4gdW5zaWduZWQgaW50IGlwNnRfZG9fdGFibGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgIHVuc2lnbmVkIGludCBob29rLAogCQkJCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLApAQCAtMzQwLDE4ICszNDMsNiBAQAogCiAjZGVmaW5lIENPTVBBVF9JUDZUX0FMSUdOKHMpCUNPTVBBVF9YVF9BTElHTihzKQogCi0vKiBmbiByZXR1cm5zIDAgdG8gY29udGludWUgaXRlcmF0aW9uICovCi0jZGVmaW5lIENPTVBBVF9JUDZUX01BVENIX0lURVJBVEUoZSwgZm4sIGFyZ3MuLi4pIFwKLQlYVF9NQVRDSF9JVEVSQVRFKHN0cnVjdCBjb21wYXRfaXA2dF9lbnRyeSwgZSwgZm4sICMjIGFyZ3MpCi0KLS8qIGZuIHJldHVybnMgMCB0byBjb250aW51ZSBpdGVyYXRpb24gKi8KLSNkZWZpbmUgQ09NUEFUX0lQNlRfRU5UUllfSVRFUkFURShlbnRyaWVzLCBzaXplLCBmbiwgYXJncy4uLikgXAotCVhUX0VOVFJZX0lURVJBVEUoc3RydWN0IGNvbXBhdF9pcDZ0X2VudHJ5LCBlbnRyaWVzLCBzaXplLCBmbiwgIyMgYXJncykKLQotI2RlZmluZSBDT01QQVRfSVA2VF9FTlRSWV9JVEVSQVRFX0NPTlRJTlVFKGVudHJpZXMsIHNpemUsIG4sIGZuLCBhcmdzLi4uKSBcCi0JWFRfRU5UUllfSVRFUkFURV9DT05USU5VRShzdHJ1Y3QgY29tcGF0X2lwNnRfZW50cnksIGVudHJpZXMsIHNpemUsIG4sIFwKLQkJCQkgIGZuLCAjIyBhcmdzKQotCiAjZW5kaWYgLyogQ09ORklHX0NPTVBBVCAqLwogI2VuZGlmIC8qX19LRVJORUxfXyovCiAjZW5kaWYgLyogX0lQNl9UQUJMRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRwb2xsLmggYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAppbmRleCAyNTI0MjY3Li5hNzY1ZWE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldHBvbGwuaApAQCAtMjEsMTUgKzIxLDIwIEBACiAJX19iZTMyIGxvY2FsX2lwLCByZW1vdGVfaXA7CiAJdTE2IGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0OwogCXU4IHJlbW90ZV9tYWNbRVRIX0FMRU5dOworCisJc3RydWN0IGxpc3RfaGVhZCByeDsgLyogcnhfbnAgbGlzdCBlbGVtZW50ICovCiB9OwogCiBzdHJ1Y3QgbmV0cG9sbF9pbmZvIHsKIAlhdG9taWNfdCByZWZjbnQ7CisKIAlpbnQgcnhfZmxhZ3M7CiAJc3BpbmxvY2tfdCByeF9sb2NrOwotCXN0cnVjdCBuZXRwb2xsICpyeF9ucDsgLyogbmV0cG9sbCB0aGF0IHJlZ2lzdGVyZWQgYW4gcnhfaG9vayAqLworCXN0cnVjdCBsaXN0X2hlYWQgcnhfbnA7IC8qIG5ldHBvbGxzIHRoYXQgcmVnaXN0ZXJlZCBhbiByeF9ob29rICovCisKIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGFycF90eDsgLyogbGlzdCBvZiBhcnAgcmVxdWVzdHMgdG8gcmVwbHkgdG8gKi8KIAlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4cTsKKwogCXN0cnVjdCBkZWxheWVkX3dvcmsgdHhfd29yazsKIH07CiAKQEAgLTUxLDcgKzU2LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXQgPSAwOwogCi0JaWYgKCFucGluZm8gfHwgKCFucGluZm8tPnJ4X25wICYmICFucGluZm8tPnJ4X2ZsYWdzKSkKKwlpZiAoIW5waW5mbyB8fCAobGlzdF9lbXB0eSgmbnBpbmZvLT5yeF9ucCkgJiYgIW5waW5mby0+cnhfZmxhZ3MpKQogCQlyZXR1cm4gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZucGluZm8tPnJ4X2xvY2ssIGZsYWdzKTsKQEAgLTY3LDcgKzcyLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0cG9sbF9pbmZvICpucGluZm8gPSBza2ItPmRldi0+bnBpbmZvOwogCi0JcmV0dXJuIG5waW5mbyAmJiAobnBpbmZvLT5yeF9ucCB8fCBucGluZm8tPnJ4X2ZsYWdzKTsKKwlyZXR1cm4gbnBpbmZvICYmICghbGlzdF9lbXB0eSgmbnBpbmZvLT5yeF9ucCkgfHwgbnBpbmZvLT5yeF9mbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IG5ldHBvbGxfcmVjZWl2ZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCmluZGV4IGQwOWRiMWIuLjFhMGI4NWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnMuaApAQCAtMzMsOSArMzMsNiBAQAogI2RlZmluZSBGTFVTSF9TVEFCTEUJCTQJLyogY29tbWl0IHRvIHN0YWJsZSBzdG9yYWdlICovCiAjZGVmaW5lIEZMVVNIX0xPV1BSSQkJOAkvKiBsb3cgcHJpb3JpdHkgYmFja2dyb3VuZCBmbHVzaCAqLwogI2RlZmluZSBGTFVTSF9ISUdIUFJJCQkxNgkvKiBoaWdoIHByaW9yaXR5IG1lbW9yeSByZWNsYWltIGZsdXNoICovCi0jZGVmaW5lIEZMVVNIX05PQ09NTUlUCQkzMgkvKiBEb24ndCBzZW5kIHRoZSBORlN2My92NCBDT01NSVQgKi8KLSNkZWZpbmUgRkxVU0hfSU5WQUxJREFURQk2NAkvKiBJbnZhbGlkYXRlIHRoZSBwYWdlIGNhY2hlICovCi0jZGVmaW5lIEZMVVNIX05PV1JJVEVQQUdFCTEyOAkvKiBEb24ndCBjYWxsIHdyaXRlcGFnZSgpICovCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKQEAgLTE2Niw2ICsxNjMsNyBAQAogCXN0cnVjdCByYWRpeF90cmVlX3Jvb3QJbmZzX3BhZ2VfdHJlZTsKIAogCXVuc2lnbmVkIGxvbmcJCW5wYWdlczsKKwl1bnNpZ25lZCBsb25nCQluY29tbWl0OwogCiAJLyogT3BlbiBjb250ZXh0cyBmb3Igc2hhcmVkIG1tYXAgd3JpdGVzICovCiAJc3RydWN0IGxpc3RfaGVhZAlvcGVuX2ZpbGVzOwpAQCAtMzQ5LDcgKzM0Nyw2IEBACiBleHRlcm4gaW50IG5mc19yZXZhbGlkYXRlX2lub2RlKHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogZXh0ZXJuIGludCBfX25mc19yZXZhbGlkYXRlX2lub2RlKHN0cnVjdCBuZnNfc2VydmVyICosIHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBpbnQgbmZzX3JldmFsaWRhdGVfbWFwcGluZyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyk7Ci1leHRlcm4gaW50IG5mc19yZXZhbGlkYXRlX21hcHBpbmdfbm9sb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nKTsKIGV4dGVybiBpbnQgbmZzX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7CiBleHRlcm4gdm9pZCBuZnNfc2V0YXR0cl91cGRhdGVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICphdHRyKTsKIGV4dGVybiBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqZ2V0X25mc19vcGVuX2NvbnRleHQoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCk7CkBAIC00NzcsMjEgKzQ3NCwxMiBAQAogICogVHJ5IHRvIHdyaXRlIGJhY2sgZXZlcnl0aGluZyBzeW5jaHJvbm91c2x5IChidXQgY2hlY2sgdGhlCiAgKiByZXR1cm4gdmFsdWUhKQogICovCi1leHRlcm4gbG9uZyBuZnNfc3luY19tYXBwaW5nX3dhaXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICosIGludCk7CiBleHRlcm4gaW50IG5mc193Yl9hbGwoc3RydWN0IGlub2RlICppbm9kZSk7Ci1leHRlcm4gaW50IG5mc193Yl9ub2NvbW1pdChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIGV4dGVybiBpbnQgbmZzX3diX3BhZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UqIHBhZ2UpOwogZXh0ZXJuIGludCBuZnNfd2JfcGFnZV9jYW5jZWwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UqIHBhZ2UpOwogI2lmIGRlZmluZWQoQ09ORklHX05GU19WMykgfHwgZGVmaW5lZChDT05GSUdfTkZTX1Y0KQotZXh0ZXJuIGludCAgbmZzX2NvbW1pdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKIGV4dGVybiBzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKm5mc19jb21taXRkYXRhX2FsbG9jKHZvaWQpOwogZXh0ZXJuIHZvaWQgbmZzX2NvbW1pdF9mcmVlKHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqd2RhdGEpOwotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgaW50Ci1uZnNfY29tbWl0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBob3cpCi17Ci0JcmV0dXJuIDA7Ci19CiAjZW5kaWYKIAogc3RhdGljIGlubGluZSBpbnQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmggYi9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5oCmluZGV4IDM0ZmM2YmUuLjcxN2E1ZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmZzX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNfZnNfc2IuaApAQCAtMTA1LDcgKzEwNSw3IEBACiAJc3RydWN0IHJwY19jbG50ICoJY2xpZW50OwkJLyogUlBDIGNsaWVudCBoYW5kbGUgKi8KIAlzdHJ1Y3QgcnBjX2NsbnQgKgljbGllbnRfYWNsOwkvKiBBQ0wgUlBDIGNsaWVudCBoYW5kbGUgKi8KIAlzdHJ1Y3QgbmxtX2hvc3QJCSpubG1faG9zdDsJLyogTkxNIGNsaWVudCBoYW5kbGUgKi8KLQlzdHJ1Y3QgbmZzX2lvc3RhdHMgKglpb19zdGF0czsJLyogSS9PIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QgbmZzX2lvc3RhdHMgX19wZXJjcHUgKmlvX3N0YXRzOwkvKiBJL08gc3RhdGlzdGljcyAqLwogCXN0cnVjdCBiYWNraW5nX2Rldl9pbmZvCWJhY2tpbmdfZGV2X2luZm87CiAJYXRvbWljX2xvbmdfdAkJd3JpdGViYWNrOwkvKiBudW1iZXIgb2Ygd3JpdGViYWNrIHBhZ2VzICovCiAJaW50CQkJZmxhZ3M7CQkvKiB2YXJpb3VzIGZsYWdzICovCkBAIC0xOTMsNiArMTkzLDggQEAKIAlpbnQJCW1heF9zbG90czsJCS8qICMgc2xvdHMgaW4gdGFibGUgKi8KIAlpbnQJCWhpZ2hlc3RfdXNlZF9zbG90aWQ7CS8qIHNlbnQgdG8gc2VydmVyIG9uIGVhY2ggU0VRLgogCQkJCQkJICogb3AgZm9yIGR5bmFtaWMgcmVzaXppbmcgKi8KKwlpbnQJCXRhcmdldF9tYXhfc2xvdHM7CS8qIFNldCBieSBDQl9SRUNBTExfU0xPVCBhcworCQkJCQkJICogdGhlIG5ldyBtYXhfc2xvdHMgKi8KIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNsb3RfaWR4KHN0cnVjdCBuZnM0X3Nsb3RfdGFibGUgKnRibCwgc3RydWN0IG5mczRfc2xvdCAqc3ApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25pbGZzMl9mcy5oIGIvaW5jbHVkZS9saW51eC9uaWxmczJfZnMuaAppbmRleCAzZmUwMmNmLi42NDA3MDJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25pbGZzMl9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmlsZnMyX2ZzLmgKQEAgLTE1Myw2ICsxNTMsNyBAQAogCQkJCQkJICAgc2VtYW50aWNzIGFsc28gZm9yIGRhdGEgKi8KICNkZWZpbmUgTklMRlNfTU9VTlRfTk9SRUNPVkVSWQkJMHg0MDAwICAvKiBEaXNhYmxlIHdyaXRlIGFjY2VzcyBkdXJpbmcKIAkJCQkJCSAgIG1vdW50LXRpbWUgcmVjb3ZlcnkgKi8KKyNkZWZpbmUgTklMRlNfTU9VTlRfRElTQ0FSRAkJMHg4MDAwICAvKiBJc3N1ZSBESVNDQVJEIHJlcXVlc3RzICovCiAKIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25sODAyMTEuaCBiL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oCmluZGV4IGRhOGVhMmUuLjI4YmEyMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmw4MDIxMS5oCkBAIC0zLDcgKzMsNyBAQAogLyoKICAqIDgwMi4xMSBuZXRsaW5rIGludGVyZmFjZSBwdWJsaWMgaGVhZGVyCiAgKgotICogQ29weXJpZ2h0IDIwMDYsIDIwMDcsIDIwMDggSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA2LTIwMTAgSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KICAqIENvcHlyaWdodCAyMDA4IE1pY2hhZWwgV3UgPGZsYW1pbmdpY2VAc291cm1pbGsubmV0PgogICogQ29weXJpZ2h0IDIwMDggTHVpcyBDYXJsb3MgQ29ibyA8bHVpc2NhQGNvenliaXQuY29tPgogICogQ29weXJpZ2h0IDIwMDggTWljaGFlbCBCdWVzY2ggPG1iQGJ1M3NjaC5kZT4KQEAgLTI3MCw2ICsyNzAsNjAgQEAKICAqIEBOTDgwMjExX0NNRF9TRVRfV0lQSFlfTkVUTlM6IFNldCBhIHdpcGh5J3MgbmV0bnMuIE5vdGUgdGhhdCBhbGwgZGV2aWNlcwogICoJYXNzb2NpYXRlZCB3aXRoIHRoaXMgd2lwaHkgbXVzdCBiZSBkb3duIGFuZCB3aWxsIGZvbGxvdy4KICAqCisgKiBATkw4MDIxMV9DTURfUkVNQUlOX09OX0NIQU5ORUw6IFJlcXVlc3QgdG8gcmVtYWluIGF3YWtlIG9uIHRoZSBzcGVjaWZpZWQKKyAqCWNoYW5uZWwgZm9yIHRoZSBzcGVjaWZpZWQgYW1vdW50IG9mIHRpbWUuIFRoaXMgY2FuIGJlIHVzZWQgdG8gZG8KKyAqCW9mZi1jaGFubmVsIG9wZXJhdGlvbnMgbGlrZSB0cmFuc21pdCBhIFB1YmxpYyBBY3Rpb24gZnJhbWUgYW5kIHdhaXQgZm9yCisgKglhIHJlc3BvbnNlIHdoaWxlIGJlaW5nIGFzc29jaWF0ZWQgdG8gYW4gQVAgb24gYW5vdGhlciBjaGFubmVsLgorICoJJU5MODAyMTFfQVRUUl9XSVBIWSBvciAlTkw4MDIxMV9BVFRSX0lGSU5ERVggaXMgdXNlZCB0byBzcGVjaWZ5IHdoaWNoCisgKglyYWRpbyBpcyB1c2VkLiAlTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZQorICoJZnJlcXVlbmN5IGZvciB0aGUgb3BlcmF0aW9uIGFuZCAlTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRSBtYXkgYmUKKyAqCW9wdGlvbmFsbHkgdXNlZCB0byBzcGVjaWZ5IGFkZGl0aW9uYWwgY2hhbm5lbCBwYXJhbWV0ZXJzLgorICoJJU5MODAyMTFfQVRUUl9EVVJBVElPTiBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIGR1cmF0aW9uIGluIG1pbGxpc2Vjb25kcworICoJdG8gcmVtYWluIG9uIHRoZSBjaGFubmVsLiBUaGlzIGNvbW1hbmQgaXMgYWxzbyB1c2VkIGFzIGFuIGV2ZW50IHRvCisgKglub3RpZnkgd2hlbiB0aGUgcmVxdWVzdGVkIGR1cmF0aW9uIHN0YXJ0cyAoaXQgbWF5IHRha2UgYSB3aGlsZSBmb3IgdGhlCisgKglkcml2ZXIgdG8gc2NoZWR1bGUgdGhpcyB0aW1lIGR1ZSB0byBvdGhlciBjb25jdXJyZW50IG5lZWRzIGZvciB0aGUKKyAqCXJhZGlvKS4KKyAqCVdoZW4gY2FsbGVkLCB0aGlzIG9wZXJhdGlvbiByZXR1cm5zIGEgY29va2llICglTkw4MDIxMV9BVFRSX0NPT0tJRSkKKyAqCXRoYXQgd2lsbCBiZSBpbmNsdWRlZCB3aXRoIGFueSBldmVudHMgcGVydGFpbmluZyB0byB0aGlzIHJlcXVlc3Q7CisgKgl0aGUgY29va2llIGlzIGFsc28gdXNlZCB0byBjYW5jZWwgdGhlIHJlcXVlc3QuCisgKiBATkw4MDIxMV9DTURfQ0FOQ0VMX1JFTUFJTl9PTl9DSEFOTkVMOiBUaGlzIGNvbW1hbmQgY2FuIGJlIHVzZWQgdG8gY2FuY2VsIGEKKyAqCXBlbmRpbmcgcmVtYWluLW9uLWNoYW5uZWwgZHVyYXRpb24gaWYgdGhlIGRlc2lyZWQgb3BlcmF0aW9uIGhhcyBiZWVuCisgKgljb21wbGV0ZWQgcHJpb3IgdG8gZXhwaXJhdGlvbiBvZiB0aGUgb3JpZ2luYWxseSByZXF1ZXN0ZWQgZHVyYXRpb24uCisgKgklTkw4MDIxMV9BVFRSX1dJUEhZIG9yICVOTDgwMjExX0FUVFJfSUZJTkRFWCBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlCisgKglyYWRpby4gVGhlICVOTDgwMjExX0FUVFJfQ09PS0lFIGF0dHJpYnV0ZSBtdXN0IGJlIGdpdmVuIGFzIHdlbGwgdG8KKyAqCXVuaXF1ZWx5IGlkZW50aWZ5IHRoZSByZXF1ZXN0LgorICoJVGhpcyBjb21tYW5kIGlzIGFsc28gdXNlZCBhcyBhbiBldmVudCB0byBub3RpZnkgd2hlbiBhIHJlcXVlc3RlZAorICoJcmVtYWluLW9uLWNoYW5uZWwgZHVyYXRpb24gaGFzIGV4cGlyZWQuCisgKgorICogQE5MODAyMTFfQ01EX1NFVF9UWF9CSVRSQVRFX01BU0s6IFNldCB0aGUgbWFzayBvZiByYXRlcyB0byBiZSB1c2VkIGluIFRYCisgKglyYXRlIHNlbGVjdGlvbi4gJU5MODAyMTFfQVRUUl9JRklOREVYIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgaW50ZXJmYWNlCisgKglhbmQgQE5MODAyMTFfQVRUUl9UWF9SQVRFUyB0aGUgc2V0IG9mIGFsbG93ZWQgcmF0ZXMuCisgKgorICogQE5MODAyMTFfQ01EX1JFR0lTVEVSX0FDVElPTjogUmVnaXN0ZXIgZm9yIHJlY2VpdmluZyBjZXJ0YWluIGFjdGlvbiBmcmFtZXMKKyAqCSh2aWEgQE5MODAyMTFfQ01EX0FDVElPTikgZm9yIHByb2Nlc3NpbmcgaW4gdXNlcnNwYWNlLiBUaGlzIGNvbW1hbmQKKyAqCXJlcXVpcmVzIGFuIGludGVyZmFjZSBpbmRleCBhbmQgYSBtYXRjaCBhdHRyaWJ1dGUgY29udGFpbmluZyB0aGUgZmlyc3QKKyAqCWZldyBieXRlcyBvZiB0aGUgZnJhbWUgdGhhdCBzaG91bGQgbWF0Y2gsIGUuZy4gYSBzaW5nbGUgYnl0ZSBmb3Igb25seQorICoJYSBjYXRlZ29yeSBtYXRjaCBvciBmb3VyIGJ5dGVzIGZvciB2ZW5kb3IgZnJhbWVzIGluY2x1ZGluZyB0aGUgT1VJLgorICoJVGhlIHJlZ2lzdHJhdGlvbiBjYW5ub3QgYmUgZHJvcHBlZCwgYnV0IGlzIHJlbW92ZWQgYXV0b21hdGljYWxseQorICoJd2hlbiB0aGUgbmV0bGluayBzb2NrZXQgaXMgY2xvc2VkLiBNdWx0aXBsZSByZWdpc3RyYXRpb25zIGNhbiBiZSBtYWRlLgorICogQE5MODAyMTFfQ01EX0FDVElPTjogQWN0aW9uIGZyYW1lIFRYIHJlcXVlc3QgYW5kIFJYIG5vdGlmaWNhdGlvbi4gVGhpcworICoJY29tbWFuZCBpcyB1c2VkIGJvdGggYXMgYSByZXF1ZXN0IHRvIHRyYW5zbWl0IGFuIEFjdGlvbiBmcmFtZSBhbmQgYXMgYW4KKyAqCWV2ZW50IGluZGljYXRpbmcgcmVjZXB0aW9uIG9mIGFuIEFjdGlvbiBmcmFtZSB0aGF0IHdhcyBub3QgcHJvY2Vzc2VkIGluCisgKglrZXJuZWwgY29kZSwgYnV0IGlzIGZvciB1cyAoaS5lLiwgd2hpY2ggbWF5IG5lZWQgdG8gYmUgcHJvY2Vzc2VkIGluIGEKKyAqCXVzZXIgc3BhY2UgYXBwbGljYXRpb24pLiAlTkw4MDIxMV9BVFRSX0ZSQU1FIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUKKyAqCWZyYW1lIGNvbnRlbnRzIChpbmNsdWRpbmcgaGVhZGVyKS4gJU5MODAyMTFfQVRUUl9XSVBIWV9GUkVRIChhbmQKKyAqCW9wdGlvbmFsbHkgJU5MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEUpIGlzIHVzZWQgdG8gaW5kaWNhdGUgb24KKyAqCXdoaWNoIGNoYW5uZWwgdGhlIGZyYW1lIGlzIHRvIGJlIHRyYW5zbWl0dGVkIG9yIHdhcyByZWNlaXZlZC4gVGhpcworICoJY2hhbm5lbCBoYXMgdG8gYmUgdGhlIGN1cnJlbnQgY2hhbm5lbCAocmVtYWluLW9uLWNoYW5uZWwgb3IgdGhlCisgKglvcGVyYXRpb25hbCBjaGFubmVsKS4gV2hlbiBjYWxsZWQsIHRoaXMgb3BlcmF0aW9uIHJldHVybnMgYSBjb29raWUKKyAqCSglTkw4MDIxMV9BVFRSX0NPT0tJRSkgdGhhdCB3aWxsIGJlIGluY2x1ZGVkIHdpdGggdGhlIFRYIHN0YXR1cyBldmVudAorICoJcGVydGFpbmluZyB0byB0aGUgVFggcmVxdWVzdC4KKyAqIEBOTDgwMjExX0NNRF9BQ1RJT05fVFhfU1RBVFVTOiBSZXBvcnQgVFggc3RhdHVzIG9mIGFuIEFjdGlvbiBmcmFtZQorICoJdHJhbnNtaXR0ZWQgd2l0aCAlTkw4MDIxMV9DTURfQUNUSU9OLiAlTkw4MDIxMV9BVFRSX0NPT0tJRSBpZGVudGlmaWVzCisgKgl0aGUgVFggY29tbWFuZCBhbmQgJU5MODAyMTFfQVRUUl9GUkFNRSBpbmNsdWRlcyB0aGUgY29udGVudHMgb2YgdGhlCisgKglmcmFtZS4gJU5MODAyMTFfQVRUUl9BQ0sgZmxhZyBpcyBpbmNsdWRlZCBpZiB0aGUgcmVjaXBpZW50IGFja25vd2xlZGdlZAorICoJdGhlIGZyYW1lLgorICoKICAqIEBOTDgwMjExX0NNRF9NQVg6IGhpZ2hlc3QgdXNlZCBjb21tYW5kIG51bWJlcgogICogQF9fTkw4MDIxMV9DTURfQUZURVJfTEFTVDogaW50ZXJuYWwgdXNlCiAgKi8KQEAgLTM1Myw2ICs0MDcsMTggQEAKIAlOTDgwMjExX0NNRF9ERUxfUE1LU0EsCiAJTkw4MDIxMV9DTURfRkxVU0hfUE1LU0EsCiAKKwlOTDgwMjExX0NNRF9SRU1BSU5fT05fQ0hBTk5FTCwKKwlOTDgwMjExX0NNRF9DQU5DRUxfUkVNQUlOX09OX0NIQU5ORUwsCisKKwlOTDgwMjExX0NNRF9TRVRfVFhfQklUUkFURV9NQVNLLAorCisJTkw4MDIxMV9DTURfUkVHSVNURVJfQUNUSU9OLAorCU5MODAyMTFfQ01EX0FDVElPTiwKKwlOTDgwMjExX0NNRF9BQ1RJT05fVFhfU1RBVFVTLAorCisJTkw4MDIxMV9DTURfU0VUX1BPV0VSX1NBVkUsCisJTkw4MDIxMV9DTURfR0VUX1BPV0VSX1NBVkUsCisKIAkvKiBhZGQgbmV3IGNvbW1hbmRzIGFib3ZlIGhlcmUgKi8KIAogCS8qIHVzZWQgdG8gZGVmaW5lIE5MODAyMTFfQ01EX01BWCBiZWxvdyAqLwpAQCAtNDAyLDYgKzQ2OCw4IEBACiAgKiBATkw4MDIxMV9BVFRSX1dJUEhZX1JUU19USFJFU0hPTEQ6IFJUUyB0aHJlc2hvbGQgKFRYIGZyYW1lcyB3aXRoIGxlbmd0aAogICoJbGFyZ2VyIHRoYW4gb3IgZXF1YWwgdG8gdGhpcyB1c2UgUlRTL0NUUyBoYW5kc2hha2UpOyBhbGxvd2VkIHJhbmdlOgogICoJMC4uNjU1MzYsIGRpc2FibGUgd2l0aCAodTMyKS0xOyBkb3QxMVJUU1RocmVzaG9sZDsgdTMyCisgKiBATkw4MDIxMV9BVFRSX1dJUEhZX0NPVkVSQUdFX0NMQVNTOiBDb3ZlcmFnZSBDbGFzcyBhcyBkZWZpbmVkIGJ5IElFRUUgODAyLjExCisgKglzZWN0aW9uIDcuMy4yLjk7IGRvdDExQ292ZXJhZ2VDbGFzczsgdTgKICAqCiAgKiBATkw4MDIxMV9BVFRSX0lGSU5ERVg6IG5ldHdvcmsgaW50ZXJmYWNlIGluZGV4IG9mIHRoZSBkZXZpY2UgdG8gb3BlcmF0ZSBvbgogICogQE5MODAyMTFfQVRUUl9JRk5BTUU6IG5ldHdvcmsgaW50ZXJmYWNlIG5hbWUKQEAgLTYwNiw2ICs2NzQsMjMgQEAKICAqIEBOTDgwMjExX0FUVFJfTUFYX05VTV9QTUtJRFM6IG1heGltdW0gbnVtYmVyIG9mIFBNS0lEcyBhIGZpcm13YXJlIGNhbgogICoJY2FjaGUsIGEgd2lwaHkgYXR0cmlidXRlLgogICoKKyAqIEBOTDgwMjExX0FUVFJfRFVSQVRJT046IER1cmF0aW9uIG9mIGFuIG9wZXJhdGlvbiBpbiBtaWxsaXNlY29uZHMsIHUzMi4KKyAqCisgKiBATkw4MDIxMV9BVFRSX0NPT0tJRTogR2VuZXJpYyA2NC1iaXQgY29va2llIHRvIGlkZW50aWZ5IG9iamVjdHMuCisgKgorICogQE5MODAyMTFfQVRUUl9UWF9SQVRFUzogTmVzdGVkIHNldCBvZiBhdHRyaWJ1dGVzCisgKgkoZW51bSBubDgwMjExX3R4X3JhdGVfYXR0cmlidXRlcykgZGVzY3JpYmluZyBUWCByYXRlcyBwZXIgYmFuZC4gVGhlCisgKgllbnVtIG5sODAyMTFfYmFuZCB2YWx1ZSBpcyB1c2VkIGFzIHRoZSBpbmRleCAobmxhX3R5cGUoKSBvZiB0aGUgbmVzdGVkCisgKglkYXRhLiBJZiBhIGJhbmQgaXMgbm90IGluY2x1ZGVkLCBpdCB3aWxsIGJlIGNvbmZpZ3VyZWQgdG8gYWxsb3cgYWxsCisgKglyYXRlcyBiYXNlZCBvbiBuZWdvdGlhdGVkIHN1cHBvcnRlZCByYXRlcyBpbmZvcm1hdGlvbi4gVGhpcyBhdHRyaWJ1dGUKKyAqCWlzIHVzZWQgd2l0aCAlTkw4MDIxMV9DTURfU0VUX1RYX0JJVFJBVEVfTUFTSy4KKyAqCisgKiBATkw4MDIxMV9BVFRSX0ZSQU1FX01BVENIOiBBIGJpbmFyeSBhdHRyaWJ1dGUgd2hpY2ggdHlwaWNhbGx5IG11c3QgY29udGFpbgorICoJYXQgbGVhc3Qgb25lIGJ5dGUsIGN1cnJlbnRseSB1c2VkIHdpdGggQE5MODAyMTFfQ01EX1JFR0lTVEVSX0FDVElPTi4KKyAqCisgKiBATkw4MDIxMV9BVFRSX0FDSzogRmxhZyBhdHRyaWJ1dGUgaW5kaWNhdGluZyB0aGF0IHRoZSBmcmFtZSB3YXMKKyAqCWFja25vd2xlZGdlZCBieSB0aGUgcmVjaXBpZW50LgorICoKICAqIEBOTDgwMjExX0FUVFJfTUFYOiBoaWdoZXN0IGF0dHJpYnV0ZSBudW1iZXIgY3VycmVudGx5IGRlZmluZWQKICAqIEBfX05MODAyMTFfQVRUUl9BRlRFUl9MQVNUOiBpbnRlcm5hbCB1c2UKICAqLwpAQCAtNzQzLDYgKzgyOCwyMCBAQAogCU5MODAyMTFfQVRUUl9QTUtJRCwKIAlOTDgwMjExX0FUVFJfTUFYX05VTV9QTUtJRFMsCiAKKwlOTDgwMjExX0FUVFJfRFVSQVRJT04sCisKKwlOTDgwMjExX0FUVFJfQ09PS0lFLAorCisJTkw4MDIxMV9BVFRSX1dJUEhZX0NPVkVSQUdFX0NMQVNTLAorCisJTkw4MDIxMV9BVFRSX1RYX1JBVEVTLAorCisJTkw4MDIxMV9BVFRSX0ZSQU1FX01BVENILAorCisJTkw4MDIxMV9BVFRSX0FDSywKKworCU5MODAyMTFfQVRUUl9QU19TVEFURSwKKwogCS8qIGFkZCBhdHRyaWJ1dGVzIGhlcmUsIHVwZGF0ZSB0aGUgcG9saWN5IGluIG5sODAyMTEuYyAqLwogCiAJX19OTDgwMjExX0FUVFJfQUZURVJfTEFTVCwKQEAgLTEzMjMsMTMgKzE0MjIsMjAgQEAKICAqIEBOTDgwMjExX0JTU19CRUFDT05fSU5URVJWQUw6IGJlYWNvbiBpbnRlcnZhbCBvZiB0aGUgKEkpQlNTICh1MTYpCiAgKiBATkw4MDIxMV9CU1NfQ0FQQUJJTElUWTogY2FwYWJpbGl0eSBmaWVsZCAoQ1BVIG9yZGVyLCB1MTYpCiAgKiBATkw4MDIxMV9CU1NfSU5GT1JNQVRJT05fRUxFTUVOVFM6IGJpbmFyeSBhdHRyaWJ1dGUgY29udGFpbmluZyB0aGUKLSAqCXJhdyBpbmZvcm1hdGlvbiBlbGVtZW50cyBmcm9tIHRoZSBwcm9iZSByZXNwb25zZS9iZWFjb24gKGJpbikKKyAqCXJhdyBpbmZvcm1hdGlvbiBlbGVtZW50cyBmcm9tIHRoZSBwcm9iZSByZXNwb25zZS9iZWFjb24gKGJpbik7CisgKglpZiB0aGUgJU5MODAyMTFfQlNTX0JFQUNPTl9JRVMgYXR0cmlidXRlIGlzIHByZXNlbnQsIHRoZSBJRXMgaGVyZSBhcmUKKyAqCWZyb20gYSBQcm9iZSBSZXNwb25zZSBmcmFtZTsgb3RoZXJ3aXNlIHRoZXkgYXJlIGZyb20gYSBCZWFjb24gZnJhbWUuCisgKglIb3dldmVyLCBpZiB0aGUgZHJpdmVyIGRvZXMgbm90IGluZGljYXRlIHRoZSBzb3VyY2Ugb2YgdGhlIElFcywgdGhlc2UKKyAqCUlFcyBtYXkgYmUgZnJvbSBlaXRoZXIgZnJhbWUgc3VidHlwZS4KICAqIEBOTDgwMjExX0JTU19TSUdOQUxfTUJNOiBzaWduYWwgc3RyZW5ndGggb2YgcHJvYmUgcmVzcG9uc2UvYmVhY29uCiAgKglpbiBtQm0gKDEwMCAqIGRCbSkgKHMzMikKICAqIEBOTDgwMjExX0JTU19TSUdOQUxfVU5TUEVDOiBzaWduYWwgc3RyZW5ndGggb2YgdGhlIHByb2JlIHJlc3BvbnNlL2JlYWNvbgogICoJaW4gdW5zcGVjaWZpZWQgdW5pdHMsIHNjYWxlZCB0byAwLi4xMDAgKHU4KQogICogQE5MODAyMTFfQlNTX1NUQVRVUzogc3RhdHVzLCBpZiB0aGlzIEJTUyBpcyAidXNlZCIKICAqIEBOTDgwMjExX0JTU19TRUVOX01TX0FHTzogYWdlIG9mIHRoaXMgQlNTIGVudHJ5IGluIG1zCisgKiBATkw4MDIxMV9CU1NfQkVBQ09OX0lFUzogYmluYXJ5IGF0dHJpYnV0ZSBjb250YWluaW5nIHRoZSByYXcgaW5mb3JtYXRpb24KKyAqCWVsZW1lbnRzIGZyb20gYSBCZWFjb24gZnJhbWUgKGJpbik7IG5vdCBwcmVzZW50IGlmIG5vIEJlYWNvbiBmcmFtZSBoYXMKKyAqCXlldCBiZWVuIHJlY2VpdmVkCiAgKiBAX19OTDgwMjExX0JTU19BRlRFUl9MQVNUOiBpbnRlcm5hbAogICogQE5MODAyMTFfQlNTX01BWDogaGlnaGVzdCBCU1MgYXR0cmlidXRlCiAgKi8KQEAgLTEzNDUsNiArMTQ1MSw3IEBACiAJTkw4MDIxMV9CU1NfU0lHTkFMX1VOU1BFQywKIAlOTDgwMjExX0JTU19TVEFUVVMsCiAJTkw4MDIxMV9CU1NfU0VFTl9NU19BR08sCisJTkw4MDIxMV9CU1NfQkVBQ09OX0lFUywKIAogCS8qIGtlZXAgbGFzdCAqLwogCV9fTkw4MDIxMV9CU1NfQUZURVJfTEFTVCwKQEAgLTE0NDIsNCArMTU0OSwzOCBAQAogCU5MODAyMTFfS0VZX01BWCA9IF9fTkw4MDIxMV9LRVlfQUZURVJfTEFTVCAtIDEKIH07CiAKKy8qKgorICogZW51bSBubDgwMjExX3R4X3JhdGVfYXR0cmlidXRlcyAtIFRYIHJhdGUgc2V0IGF0dHJpYnV0ZXMKKyAqIEBfX05MODAyMTFfVFhSQVRFX0lOVkFMSUQ6IGludmFsaWQKKyAqIEBOTDgwMjExX1RYUkFURV9MRUdBQ1k6IExlZ2FjeSAobm9uLU1DUykgcmF0ZXMgYWxsb3dlZCBmb3IgVFggcmF0ZSBzZWxlY3Rpb24KKyAqCWluIGFuIGFycmF5IG9mIHJhdGVzIGFzIGRlZmluZWQgaW4gSUVFRSA4MDIuMTEgNy4zLjIuMiAodTggdmFsdWVzIHdpdGgKKyAqCTEgPSA1MDAga2JwcykgYnV0IHdpdGhvdXQgdGhlIElFIGxlbmd0aCByZXN0cmljdGlvbiAoYXQgbW9zdAorICoJJU5MODAyMTFfTUFYX1NVUFBfUkFURVMgaW4gYSBzaW5nbGUgYXJyYXkpLgorICogQF9fTkw4MDIxMV9UWFJBVEVfQUZURVJfTEFTVDogaW50ZXJuYWwKKyAqIEBOTDgwMjExX1RYUkFURV9NQVg6IGhpZ2hlc3QgVFggcmF0ZSBhdHRyaWJ1dGUKKyAqLworZW51bSBubDgwMjExX3R4X3JhdGVfYXR0cmlidXRlcyB7CisJX19OTDgwMjExX1RYUkFURV9JTlZBTElELAorCU5MODAyMTFfVFhSQVRFX0xFR0FDWSwKKworCS8qIGtlZXAgbGFzdCAqLworCV9fTkw4MDIxMV9UWFJBVEVfQUZURVJfTEFTVCwKKwlOTDgwMjExX1RYUkFURV9NQVggPSBfX05MODAyMTFfVFhSQVRFX0FGVEVSX0xBU1QgLSAxCit9OworCisvKioKKyAqIGVudW0gbmw4MDIxMV9iYW5kIC0gRnJlcXVlbmN5IGJhbmQKKyAqIEBOTDgwMjExX0JBTkRfMkdIWiAtIDIuNCBHSHogSVNNIGJhbmQKKyAqIEBOTDgwMjExX0JBTkRfNUdIWiAtIGFyb3VuZCA1IEdIeiBiYW5kICg0LjkgLSA1LjcgR0h6KQorICovCitlbnVtIG5sODAyMTFfYmFuZCB7CisJTkw4MDIxMV9CQU5EXzJHSFosCisJTkw4MDIxMV9CQU5EXzVHSFosCit9OworCitlbnVtIG5sODAyMTFfcHNfc3RhdGUgeworCU5MODAyMTFfUFNfRElTQUJMRUQsCisJTkw4MDIxMV9QU19FTkFCTEVELAorfTsKKwogI2VuZGlmIC8qIF9fTElOVVhfTkw4MDIxMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmggYi9pbmNsdWRlL2xpbnV4L25vZGVtYXNrLmgKaW5kZXggNDU0OTk3Yy4uZGJhMzVlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ub2RlbWFzay5oCisrKyBiL2luY2x1ZGUvbGludXgvbm9kZW1hc2suaApAQCAtNjksOCArNjksNiBAQAogICogaW50IG5vZGVfb25saW5lKG5vZGUpCQlJcyBzb21lIG5vZGUgb25saW5lPwogICogaW50IG5vZGVfcG9zc2libGUobm9kZSkJCUlzIHNvbWUgbm9kZSBwb3NzaWJsZT8KICAqCi0gKiBpbnQgYW55X29ubGluZV9ub2RlKG1hc2spCQlGaXJzdCBvbmxpbmUgbm9kZSBpbiBtYXNrCi0gKgogICogbm9kZV9zZXRfb25saW5lKG5vZGUpCQlzZXQgYml0ICdub2RlJyBpbiBub2RlX29ubGluZV9tYXAKICAqIG5vZGVfc2V0X29mZmxpbmUobm9kZSkJCWNsZWFyIGJpdCAnbm9kZScgaW4gbm9kZV9vbmxpbmVfbWFwCiAgKgpAQCAtNDY3LDE1ICs0NjUsNiBAQAogI2RlZmluZSBub2RlX29ubGluZV9tYXAgCW5vZGVfc3RhdGVzW05fT05MSU5FXQogI2RlZmluZSBub2RlX3Bvc3NpYmxlX21hcCAJbm9kZV9zdGF0ZXNbTl9QT1NTSUJMRV0KIAotI2RlZmluZSBhbnlfb25saW5lX25vZGUobWFzaykJCQlcCi0oewkJCQkJCVwKLQlpbnQgbm9kZTsJCQkJXAotCWZvcl9lYWNoX25vZGVfbWFzayhub2RlLCAobWFzaykpCVwKLQkJaWYgKG5vZGVfb25saW5lKG5vZGUpKQkJXAotCQkJYnJlYWs7CQkJXAotCW5vZGU7CQkJCQlcCi19KQotCiAjZGVmaW5lIG51bV9vbmxpbmVfbm9kZXMoKQludW1fbm9kZV9zdGF0ZShOX09OTElORSkKICNkZWZpbmUgbnVtX3Bvc3NpYmxlX25vZGVzKCkJbnVtX25vZGVfc3RhdGUoTl9QT1NTSUJMRSkKICNkZWZpbmUgbm9kZV9vbmxpbmUobm9kZSkJbm9kZV9zdGF0ZSgobm9kZSksIE5fT05MSU5FKQpAQCAtNDk0LDcgKzQ4Myw3IEBACiAJCQl0eXBlICpuYW1lID0ga21hbGxvYyhzaXplb2YoKm5hbWUpLCBnZnBfZmxhZ3MpCiAjZGVmaW5lIE5PREVNQVNLX0ZSRUUobSkJCQlrZnJlZShtKQogI2Vsc2UKLSNkZWZpbmUgTk9ERU1BU0tfQUxMT0ModHlwZSwgbmFtZSwgZ2ZwX2ZsYWdzKQl0eXBlIF9uYW1lLCAqbmFtZSA9ICZfbmFtZQorI2RlZmluZSBOT0RFTUFTS19BTExPQyh0eXBlLCBuYW1lLCBnZnBfZmxhZ3MpCXR5cGUgXyMjbmFtZSwgKm5hbWUgPSAmXyMjbmFtZQogI2RlZmluZSBOT0RFTUFTS19GUkVFKG0pCQkJZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9vbWFwZmIuaCBiL2luY2x1ZGUvbGludXgvb21hcGZiLmgKaW5kZXggZjQ2YzQwYS4uOWJkZDkxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9vbWFwZmIuaAorKysgYi9pbmNsdWRlL2xpbnV4L29tYXBmYi5oCkBAIC01Nyw2ICs1Nyw3IEBACiAjZGVmaW5lIE9NQVBGQl9XQUlURk9SR08JT01BUF9JTyg2MCkKICNkZWZpbmUgT01BUEZCX0dFVF9WUkFNX0lORk8JT01BUF9JT1IoNjEsIHN0cnVjdCBvbWFwZmJfdnJhbV9pbmZvKQogI2RlZmluZSBPTUFQRkJfU0VUX1RFQVJTWU5DCU9NQVBfSU9XKDYyLCBzdHJ1Y3Qgb21hcGZiX3RlYXJzeW5jX2luZm8pCisjZGVmaW5lIE9NQVBGQl9HRVRfRElTUExBWV9JTkZPCU9NQVBfSU9SKDYzLCBzdHJ1Y3Qgb21hcGZiX2Rpc3BsYXlfaW5mbykKIAogI2RlZmluZSBPTUFQRkJfQ0FQU19HRU5FUklDX01BU0sJMHgwMDAwMGZmZgogI2RlZmluZSBPTUFQRkJfQ0FQU19MQ0RDX01BU0sJCTB4MDBmZmYwMDAKQEAgLTIwNiw2ICsyMDcsMTQgQEAKIAlfX3UxNiByZXNlcnZlZDI7CiB9OwogCitzdHJ1Y3Qgb21hcGZiX2Rpc3BsYXlfaW5mbyB7CisJX191MTYgeHJlczsKKwlfX3UxNiB5cmVzOworCV9fdTMyIHdpZHRoOwkvKiBwaHlzIHdpZHRoIG9mIHRoZSBkaXNwbGF5IGluIG1pY3JvbWV0ZXJzICovCisJX191MzIgaGVpZ2h0OwkvKiBwaHlzIGhlaWdodCBvZiB0aGUgZGlzcGxheSBpbiBtaWNyb21ldGVycyAqLworCV9fdTMyIHJlc2VydmVkWzVdOworfTsKKwogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPHBsYXQvYm9hcmQuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZV9jZ3JvdXAuaCBiL2luY2x1ZGUvbGludXgvcGFnZV9jZ3JvdXAuaAppbmRleCBiMGU0ZWIxLi4zMGIwODEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2VfY2dyb3VwLmgKKysrIGIvaW5jbHVkZS9saW51eC9wYWdlX2Nncm91cC5oCkBAIC0xMTgsNiArMTE4LDggQEAKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAKICNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUl9TV0FQCitleHRlcm4gdW5zaWduZWQgc2hvcnQgc3dhcF9jZ3JvdXBfY21weGNoZyhzd3BfZW50cnlfdCBlbnQsCisJCQkJCXVuc2lnbmVkIHNob3J0IG9sZCwgdW5zaWduZWQgc2hvcnQgbmV3KTsKIGV4dGVybiB1bnNpZ25lZCBzaG9ydCBzd2FwX2Nncm91cF9yZWNvcmQoc3dwX2VudHJ5X3QgZW50LCB1bnNpZ25lZCBzaG9ydCBpZCk7CiBleHRlcm4gdW5zaWduZWQgc2hvcnQgbG9va3VwX3N3YXBfY2dyb3VwKHN3cF9lbnRyeV90IGVudCk7CiBleHRlcm4gaW50IHN3YXBfY2dyb3VwX3N3YXBvbihpbnQgdHlwZSwgdW5zaWduZWQgbG9uZyBtYXhfcGFnZXMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2ktZG1hLmggYi9pbmNsdWRlL2xpbnV4L3BjaS1kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDlhMDQxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9wY2ktZG1hLmgKQEAgLTAsMCArMSwxMSBAQAorI2lmbmRlZiBfTElOVVhfUENJX0RNQV9ICisjZGVmaW5lIF9MSU5VWF9QQ0lfRE1BX0gKKworI2RlZmluZSBERUNMQVJFX1BDSV9VTk1BUF9BRERSKEFERFJfTkFNRSkgREVGSU5FX0RNQV9VTk1BUF9BRERSKEFERFJfTkFNRSk7CisjZGVmaW5lIERFQ0xBUkVfUENJX1VOTUFQX0xFTihMRU5fTkFNRSkgICBERUZJTkVfRE1BX1VOTUFQX0xFTihMRU5fTkFNRSk7CisjZGVmaW5lIHBjaV91bm1hcF9hZGRyICAgICAgICAgICAgIGRtYV91bm1hcF9hZGRyCisjZGVmaW5lIHBjaV91bm1hcF9hZGRyX3NldCAgICAgICAgIGRtYV91bm1hcF9hZGRyX3NldAorI2RlZmluZSBwY2lfdW5tYXBfbGVuICAgICAgICAgICAgICBkbWFfdW5tYXBfbGVuCisjZGVmaW5lIHBjaV91bm1hcF9sZW5fc2V0ICAgICAgICAgIGRtYV91bm1hcF9sZW5fc2V0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggMjU4MTM3My4uYTc4OGZhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC02NjIsNiArNjYyLDkgQEAKIGV4dGVybiB2b2lkIHBjaV9zdG9wX2J1c19kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7CiB2b2lkIHBjaV9zZXR1cF9jYXJkYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpOwogZXh0ZXJuIHZvaWQgcGNpX3NvcnRfYnJlYWR0aGZpcnN0KHZvaWQpOworI2RlZmluZSBkZXZfaXNfcGNpKGQpICgoZCktPmJ1cyA9PSAmcGNpX2J1c190eXBlKQorI2RlZmluZSBkZXZfaXNfcGYoZCkgKChkZXZfaXNfcGNpKGQpID8gdG9fcGNpX2RldihkKS0+aXNfcGh5c2ZuIDogZmFsc2UpKQorI2RlZmluZSBkZXZfbnVtX3ZmKGQpICgoZGV2X2lzX3BjaShkKSA/IHBjaV9udW1fdmYodG9fcGNpX2RldihkKSkgOiAwKSkKIAogLyogR2VuZXJpYyBQQ0kgZnVuY3Rpb25zIGV4cG9ydGVkIHRvIGNhcmQgZHJpdmVycyAqLwogCkBAIC02NzUsNiArNjc4LDggQEAKIGludCBwY2lfZmluZF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjYXApOwogaW50IHBjaV9maW5kX25leHRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBwb3MsIGludCBjYXApOwogaW50IHBjaV9maW5kX2V4dF9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBjYXApOworaW50IHBjaV9idXNfZmluZF9leHRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkJaW50IGNhcCk7CiBpbnQgcGNpX2ZpbmRfaHRfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaHRfY2FwKTsKIGludCBwY2lfZmluZF9uZXh0X2h0X2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHBvcywgaW50IGh0X2NhcCk7CiBzdHJ1Y3QgcGNpX2J1cyAqcGNpX2ZpbmRfbmV4dF9idXMoY29uc3Qgc3RydWN0IHBjaV9idXMgKmZyb20pOwpAQCAtNzY0LDggKzc2OSw2IEBACiB2b2lkIHBjaV9jbGVhcl9td2koc3RydWN0IHBjaV9kZXYgKmRldik7CiB2b2lkIHBjaV9pbnR4KHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBlbmFibGUpOwogdm9pZCBwY2lfbXNpX29mZihzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKLWludCBwY2lfc2V0X2RtYV9tYXNrKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU2NCBtYXNrKTsKLWludCBwY2lfc2V0X2NvbnNpc3RlbnRfZG1hX21hc2soc3RydWN0IHBjaV9kZXYgKmRldiwgdTY0IG1hc2spOwogaW50IHBjaV9zZXRfZG1hX21heF9zZWdfc2l6ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgc2l6ZSk7CiBpbnQgcGNpX3NldF9kbWFfc2VnX2JvdW5kYXJ5KHN0cnVjdCBwY2lfZGV2ICpkZXYsIHVuc2lnbmVkIGxvbmcgbWFzayk7CiBpbnQgcGNpeF9nZXRfbWF4X21tcmJjKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwpAQCAtODk5LDYgKzkwMiw3IEBACiAJCSAgICAgIHVuc2lnbmVkIGludCBjb21tYW5kX2JpdHMsIGJvb2wgY2hhbmdlX2JyaWRnZSk7CiAvKiBrbWVtX2NhY2hlIHN0eWxlIHdyYXBwZXIgYXJvdW5kIHBjaV9hbGxvY19jb25zaXN0ZW50KCkgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3BjaS1kbWEuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFwb29sLmg+CiAKICNkZWZpbmUJcGNpX3Bvb2wgZG1hX3Bvb2wKQEAgLTExOTUsNiArMTE5OSw5IEBACiAJCQkJCQl1bnNpZ25lZCBpbnQgZGV2Zm4pCiB7IHJldHVybiBOVUxMOyB9CiAKKyNkZWZpbmUgZGV2X2lzX3BjaShkKSAoZmFsc2UpCisjZGVmaW5lIGRldl9pc19wZihkKSAoZmFsc2UpCisjZGVmaW5lIGRldl9udW1fdmYoZCkgKDApCiAjZW5kaWYgLyogQ09ORklHX1BDSSAqLwogCiAvKiBJbmNsdWRlIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgc2V0dGluZ3MgYW5kIGZ1bmN0aW9ucyAqLwpAQCAtMTM1Niw2ICsxMzYzLDcgQEAKIGV4dGVybiBpbnQgcGNpX2VuYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnJfdmlydGZuKTsKIGV4dGVybiB2b2lkIHBjaV9kaXNhYmxlX3NyaW92KHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogZXh0ZXJuIGlycXJldHVybl90IHBjaV9zcmlvdl9taWdyYXRpb24oc3RydWN0IHBjaV9kZXYgKmRldik7CitleHRlcm4gaW50IHBjaV9udW1fdmYoc3RydWN0IHBjaV9kZXYgKmRldik7CiAjZWxzZQogc3RhdGljIGlubGluZSBpbnQgcGNpX2VuYWJsZV9zcmlvdihzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgbnJfdmlydGZuKQogewpAQCAtMTM2OCw2ICsxMzc2LDEwIEBACiB7CiAJcmV0dXJuIElSUV9OT05FOwogfQorc3RhdGljIGlubGluZSBpbnQgcGNpX251bV92ZihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiAwOworfQogI2VuZGlmCiAKICNpZiBkZWZpbmVkKENPTkZJR19IT1RQTFVHX1BDSSkgfHwgZGVmaW5lZChDT05GSUdfSE9UUExVR19QQ0lfTU9EVUxFKQpAQCAtMTQwNCw1ICsxNDE2LDkzIEBACiAKIHZvaWQgcGNpX3JlcXVlc3RfYWNzKHZvaWQpOwogCisKKyNkZWZpbmUgUENJX1ZQRF9MUkRUCQkJMHg4MAkvKiBMYXJnZSBSZXNvdXJjZSBEYXRhIFR5cGUgKi8KKyNkZWZpbmUgUENJX1ZQRF9MUkRUX0lEKHgpCQkoeCB8IFBDSV9WUERfTFJEVCkKKworLyogTGFyZ2UgUmVzb3VyY2UgRGF0YSBUeXBlIFRhZyBJdGVtIE5hbWVzICovCisjZGVmaW5lIFBDSV9WUERfTFRJTl9JRF9TVFJJTkcJCTB4MDIJLyogSWRlbnRpZmllciBTdHJpbmcgKi8KKyNkZWZpbmUgUENJX1ZQRF9MVElOX1JPX0RBVEEJCTB4MTAJLyogUmVhZC1Pbmx5IERhdGEgKi8KKyNkZWZpbmUgUENJX1ZQRF9MVElOX1JXX0RBVEEJCTB4MTEJLyogUmVhZC1Xcml0ZSBEYXRhICovCisKKyNkZWZpbmUgUENJX1ZQRF9MUkRUX0lEX1NUUklORwkJUENJX1ZQRF9MUkRUX0lEKFBDSV9WUERfTFRJTl9JRF9TVFJJTkcpCisjZGVmaW5lIFBDSV9WUERfTFJEVF9ST19EQVRBCQlQQ0lfVlBEX0xSRFRfSUQoUENJX1ZQRF9MVElOX1JPX0RBVEEpCisjZGVmaW5lIFBDSV9WUERfTFJEVF9SV19EQVRBCQlQQ0lfVlBEX0xSRFRfSUQoUENJX1ZQRF9MVElOX1JXX0RBVEEpCisKKy8qIFNtYWxsIFJlc291cmNlIERhdGEgVHlwZSBUYWcgSXRlbSBOYW1lcyAqLworI2RlZmluZSBQQ0lfVlBEX1NUSU5fRU5ECQkweDc4CS8qIEVuZCAqLworCisjZGVmaW5lIFBDSV9WUERfU1JEVF9FTkQJCVBDSV9WUERfU1RJTl9FTkQKKworI2RlZmluZSBQQ0lfVlBEX1NSRFRfVElOX01BU0sJCTB4NzgKKyNkZWZpbmUgUENJX1ZQRF9TUkRUX0xFTl9NQVNLCQkweDA3CisKKyNkZWZpbmUgUENJX1ZQRF9MUkRUX1RBR19TSVpFCQkzCisjZGVmaW5lIFBDSV9WUERfU1JEVF9UQUdfU0laRQkJMQorCisjZGVmaW5lIFBDSV9WUERfSU5GT19GTERfSERSX1NJWkUJMworCisjZGVmaW5lIFBDSV9WUERfUk9fS0VZV09SRF9QQVJUTk8JIlBOIgorI2RlZmluZSBQQ0lfVlBEX1JPX0tFWVdPUkRfTUZSX0lECSJNTiIKKyNkZWZpbmUgUENJX1ZQRF9ST19LRVlXT1JEX1ZFTkRPUjAJIlYwIgorCisvKioKKyAqIHBjaV92cGRfbHJkdF9zaXplIC0gRXh0cmFjdHMgdGhlIExhcmdlIFJlc291cmNlIERhdGEgVHlwZSBsZW5ndGgKKyAqIEBscmR0OiBQb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIExhcmdlIFJlc291cmNlIERhdGEgVHlwZSB0YWcKKyAqCisgKiBSZXR1cm5zIHRoZSBleHRyYWN0ZWQgTGFyZ2UgUmVzb3VyY2UgRGF0YSBUeXBlIGxlbmd0aC4KKyAqLworc3RhdGljIGlubGluZSB1MTYgcGNpX3ZwZF9scmR0X3NpemUoY29uc3QgdTggKmxyZHQpCit7CisJcmV0dXJuICh1MTYpbHJkdFsxXSArICgodTE2KWxyZHRbMl0gPDwgOCk7Cit9CisKKy8qKgorICogcGNpX3ZwZF9zcmR0X3NpemUgLSBFeHRyYWN0cyB0aGUgU21hbGwgUmVzb3VyY2UgRGF0YSBUeXBlIGxlbmd0aAorICogQGxyZHQ6IFBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgU21hbGwgUmVzb3VyY2UgRGF0YSBUeXBlIHRhZworICoKKyAqIFJldHVybnMgdGhlIGV4dHJhY3RlZCBTbWFsbCBSZXNvdXJjZSBEYXRhIFR5cGUgbGVuZ3RoLgorICovCitzdGF0aWMgaW5saW5lIHU4IHBjaV92cGRfc3JkdF9zaXplKGNvbnN0IHU4ICpzcmR0KQoreworCXJldHVybiAoKnNyZHQpICYgUENJX1ZQRF9TUkRUX0xFTl9NQVNLOworfQorCisvKioKKyAqIHBjaV92cGRfaW5mb19maWVsZF9zaXplIC0gRXh0cmFjdHMgdGhlIGluZm9ybWF0aW9uIGZpZWxkIGxlbmd0aAorICogQGxyZHQ6IFBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiBhbiBpbmZvcm1hdGlvbiBmaWVsZCBoZWFkZXIKKyAqCisgKiBSZXR1cm5zIHRoZSBleHRyYWN0ZWQgaW5mb3JtYXRpb24gZmllbGQgbGVuZ3RoLgorICovCitzdGF0aWMgaW5saW5lIHU4IHBjaV92cGRfaW5mb19maWVsZF9zaXplKGNvbnN0IHU4ICppbmZvX2ZpZWxkKQoreworCXJldHVybiBpbmZvX2ZpZWxkWzJdOworfQorCisvKioKKyAqIHBjaV92cGRfZmluZF90YWcgLSBMb2NhdGVzIHRoZSBSZXNvdXJjZSBEYXRhIFR5cGUgdGFnIHByb3ZpZGVkCisgKiBAYnVmOiBQb2ludGVyIHRvIGJ1ZmZlcmVkIHZwZCBkYXRhCisgKiBAb2ZmOiBUaGUgb2Zmc2V0IGludG8gdGhlIGJ1ZmZlciBhdCB3aGljaCB0byBiZWdpbiB0aGUgc2VhcmNoCisgKiBAbGVuOiBUaGUgbGVuZ3RoIG9mIHRoZSB2cGQgYnVmZmVyCisgKiBAcmR0OiBUaGUgUmVzb3VyY2UgRGF0YSBUeXBlIHRvIHNlYXJjaCBmb3IKKyAqCisgKiBSZXR1cm5zIHRoZSBpbmRleCB3aGVyZSB0aGUgUmVzb3VyY2UgRGF0YSBUeXBlIHdhcyBmb3VuZCBvcgorICogLUVOT0VOVCBvdGhlcndpc2UuCisgKi8KK2ludCBwY2lfdnBkX2ZpbmRfdGFnKGNvbnN0IHU4ICpidWYsIHVuc2lnbmVkIGludCBvZmYsIHVuc2lnbmVkIGludCBsZW4sIHU4IHJkdCk7CisKKy8qKgorICogcGNpX3ZwZF9maW5kX2luZm9fa2V5d29yZCAtIExvY2F0ZXMgYW4gaW5mb3JtYXRpb24gZmllbGQga2V5d29yZCBpbiB0aGUgVlBECisgKiBAYnVmOiBQb2ludGVyIHRvIGJ1ZmZlcmVkIHZwZCBkYXRhCisgKiBAb2ZmOiBUaGUgb2Zmc2V0IGludG8gdGhlIGJ1ZmZlciBhdCB3aGljaCB0byBiZWdpbiB0aGUgc2VhcmNoCisgKiBAbGVuOiBUaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIgYXJlYSwgcmVsYXRpdmUgdG8gb2ZmLCBpbiB3aGljaCB0byBzZWFyY2gKKyAqIEBrdzogVGhlIGtleXdvcmQgdG8gc2VhcmNoIGZvcgorICoKKyAqIFJldHVybnMgdGhlIGluZGV4IHdoZXJlIHRoZSBpbmZvcm1hdGlvbiBmaWVsZCBrZXl3b3JkIHdhcyBmb3VuZCBvcgorICogLUVOT0VOVCBvdGhlcndpc2UuCisgKi8KK2ludCBwY2lfdnBkX2ZpbmRfaW5mb19rZXl3b3JkKGNvbnN0IHU4ICpidWYsIHVuc2lnbmVkIGludCBvZmYsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgbGVuLCBjb25zdCBjaGFyICprdyk7CisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogTElOVVhfUENJX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKaW5kZXggMGJlODI0My4uOWY2ODhkMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfaWRzLmgKQEAgLTc3MCw3ICs3NzAsNiBAQAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RJCQkweDEwNGMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV9UVlA0MDIwCTB4M2QwNwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzQ0NTAJCTB4ODAxMQotI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1RTQjQzQUIyMgkweDgwMjMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USV9YWDIxX1hYMTEJMHg4MDMxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWFgyMV9YWDExX0ZNCTB4ODAzMwogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1hYMjFfWFgxMV9TRAkweDgwMzQKQEAgLTIzMzMsNiArMjMzMiw4IEBACiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfS09SRU5JWAkJMHgxOTgyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfS09SRU5JWF9KRVRDQVJERjAJMHgxNjAwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfS09SRU5JWF9KRVRDQVJERjEJMHgxNmZmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfS09SRU5JWF9KRVRDQVJERjIJMHgxNzAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfS09SRU5JWF9KRVRDQVJERjMJMHgxN2ZmCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9RTUkJCTB4MWEzMgogCkBAIC0yNjk3LDYgKzI2OTgsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FVE1PU185ODM1CTB4OTgzNQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FVE1PU185ODQ1CTB4OTg0NQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FVE1PU185ODU1CTB4OTg1NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FVE1PU185ODY1CTB4OTg2NQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FVE1PU185OTAxCTB4OTkwMQogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfM0NPTV8yCQkweGE3MjcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGNpX3JlZ3MuaCBiL2luY2x1ZGUvbGludXgvcGNpX3JlZ3MuaAppbmRleCA5ZjJhZDBhLi5jOGYzMDI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9yZWdzLmgKKysrIGIvaW5jbHVkZS9saW51eC9wY2lfcmVncy5oCkBAIC01MDcsNiArNTA3LDcgQEAKICNkZWZpbmUgUENJX0VYVF9DQVBfSURfVkMJMgogI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9EU04JMwogI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9QV1IJNAorI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9WTkRSCTExCiAjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEX0FDUwkxMwogI2RlZmluZSBQQ0lfRVhUX0NBUF9JRF9BUkkJMTQKICNkZWZpbmUgUENJX0VYVF9DQVBfSURfQVRTCTE1CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BlcmNwdS1kZWZzLmggYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS1kZWZzLmgKaW5kZXggNWE1ZDZjZS4uNjg1NjdjMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wZXJjcHUtZGVmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyY3B1LWRlZnMuaApAQCAtMiwxMiArMiw2IEBACiAjZGVmaW5lIF9MSU5VWF9QRVJDUFVfREVGU19ICiAKIC8qCi0gKiBEZXRlcm1pbmUgdGhlIHJlYWwgdmFyaWFibGUgbmFtZSBmcm9tIHRoZSBuYW1lIHZpc2libGUgaW4gdGhlCi0gKiBrZXJuZWwgc291cmNlcy4KLSAqLwotI2RlZmluZSBwZXJfY3B1X3Zhcih2YXIpIHBlcl9jcHVfXyMjdmFyCi0KLS8qCiAgKiBCYXNlIGltcGxlbWVudGF0aW9ucyBvZiBwZXItQ1BVIHZhcmlhYmxlIGRlY2xhcmF0aW9ucyBhbmQgZGVmaW5pdGlvbnMsIHdoZXJlCiAgKiB0aGUgc2VjdGlvbiBpbiB3aGljaCB0aGUgdmFyaWFibGUgaXMgdG8gYmUgcGxhY2VkIGlzIHByb3ZpZGVkIGJ5IHRoZQogICogJ3NlYycgYXJndW1lbnQuICBUaGlzIG1heSBiZSB1c2VkIHRvIGFmZmVjdCB0aGUgcGFyYW1ldGVycyBnb3Zlcm5pbmcgdGhlCkBAIC0xOCwxMyArMTIsMjMgQEAKICAqIHRoYXQgc2VjdGlvbi4KICAqLwogI2RlZmluZSBfX1BDUFVfQVRUUlMoc2VjKQkJCQkJCVwKLQlfX2F0dHJpYnV0ZV9fKChzZWN0aW9uKFBFUl9DUFVfQkFTRV9TRUNUSU9OIHNlYykpKQkJXAorCV9fcGVyY3B1IF9fYXR0cmlidXRlX18oKHNlY3Rpb24oUEVSX0NQVV9CQVNFX1NFQ1RJT04gc2VjKSkpCVwKIAlQRVJfQ1BVX0FUVFJJQlVURVMKIAogI2RlZmluZSBfX1BDUFVfRFVNTVlfQVRUUlMJCQkJCQlcCiAJX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLmRpc2NhcmQiKSwgdW51c2VkKSkKIAogLyoKKyAqIE1hY3JvIHdoaWNoIHZlcmlmaWVzIEBwdHIgaXMgYSBwZXJjcHUgcG9pbnRlciB3aXRob3V0IGV2YWx1YXRpbmcKKyAqIEBwdHIuICBUaGlzIGlzIHRvIGJlIHVzZWQgaW4gcGVyY3B1IGFjY2Vzc29ycyB0byB2ZXJpZnkgdGhhdCB0aGUKKyAqIGlucHV0IHBhcmFtZXRlciBpcyBhIHBlcmNwdSBwb2ludGVyLgorICovCisjZGVmaW5lIF9fdmVyaWZ5X3BjcHVfcHRyKHB0cikJZG8gewkJCQkJXAorCWNvbnN0IHZvaWQgX19wZXJjcHUgKl9fdnBwX3ZlcmlmeSA9ICh0eXBlb2YocHRyKSlOVUxMOwkJXAorCSh2b2lkKV9fdnBwX3ZlcmlmeTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgogICogczM5MCBhbmQgYWxwaGEgbW9kdWxlcyByZXF1aXJlIHBlcmNwdSB2YXJpYWJsZXMgdG8gYmUgZGVmaW5lZCBhcwogICogd2VhayB0byBmb3JjZSB0aGUgY29tcGlsZXIgdG8gZ2VuZXJhdGUgR09UIGJhc2VkIGV4dGVybmFsCiAgKiByZWZlcmVuY2VzIGZvciB0aGVtLiAgVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBwZXJjcHUgc2VjdGlvbnMKQEAgLTU2LDI0ICs2MCwyNCBAQAogICovCiAjZGVmaW5lIERFQ0xBUkVfUEVSX0NQVV9TRUNUSU9OKHR5cGUsIG5hbWUsIHNlYykJCQlcCiAJZXh0ZXJuIF9fUENQVV9EVU1NWV9BVFRSUyBjaGFyIF9fcGNwdV9zY29wZV8jI25hbWU7CQlcCi0JZXh0ZXJuIF9fUENQVV9BVFRSUyhzZWMpIF9fdHlwZW9mX18odHlwZSkgcGVyX2NwdV9fIyNuYW1lCisJZXh0ZXJuIF9fUENQVV9BVFRSUyhzZWMpIF9fdHlwZW9mX18odHlwZSkgbmFtZQogCiAjZGVmaW5lIERFRklORV9QRVJfQ1BVX1NFQ1RJT04odHlwZSwgbmFtZSwgc2VjKQkJCQlcCiAJX19QQ1BVX0RVTU1ZX0FUVFJTIGNoYXIgX19wY3B1X3Njb3BlXyMjbmFtZTsJCQlcCiAJZXh0ZXJuIF9fUENQVV9EVU1NWV9BVFRSUyBjaGFyIF9fcGNwdV91bmlxdWVfIyNuYW1lOwkJXAogCV9fUENQVV9EVU1NWV9BVFRSUyBjaGFyIF9fcGNwdV91bmlxdWVfIyNuYW1lOwkJCVwKIAlfX1BDUFVfQVRUUlMoc2VjKSBQRVJfQ1BVX0RFRl9BVFRSSUJVVEVTIF9fd2VhawkJCVwKLQlfX3R5cGVvZl9fKHR5cGUpIHBlcl9jcHVfXyMjbmFtZQorCV9fdHlwZW9mX18odHlwZSkgbmFtZQogI2Vsc2UKIC8qCiAgKiBOb3JtYWwgZGVjbGFyYXRpb24gYW5kIGRlZmluaXRpb24gbWFjcm9zLgogICovCiAjZGVmaW5lIERFQ0xBUkVfUEVSX0NQVV9TRUNUSU9OKHR5cGUsIG5hbWUsIHNlYykJCQlcCi0JZXh0ZXJuIF9fUENQVV9BVFRSUyhzZWMpIF9fdHlwZW9mX18odHlwZSkgcGVyX2NwdV9fIyNuYW1lCisJZXh0ZXJuIF9fUENQVV9BVFRSUyhzZWMpIF9fdHlwZW9mX18odHlwZSkgbmFtZQogCiAjZGVmaW5lIERFRklORV9QRVJfQ1BVX1NFQ1RJT04odHlwZSwgbmFtZSwgc2VjKQkJCQlcCiAJX19QQ1BVX0FUVFJTKHNlYykgUEVSX0NQVV9ERUZfQVRUUklCVVRFUwkJCVwKLQlfX3R5cGVvZl9fKHR5cGUpIHBlcl9jcHVfXyMjbmFtZQorCV9fdHlwZW9mX18odHlwZSkgbmFtZQogI2VuZGlmCiAKIC8qCkBAIC0xMzUsMTAgKzEzOSwxNiBAQAogCV9fYWxpZ25lZChQQUdFX1NJWkUpCiAKIC8qCi0gKiBJbnRlcm1vZHVsZSBleHBvcnRzIGZvciBwZXItQ1BVIHZhcmlhYmxlcy4KKyAqIEludGVybW9kdWxlIGV4cG9ydHMgZm9yIHBlci1DUFUgdmFyaWFibGVzLiAgc3BhcnNlIGZvcmdldHMgYWJvdXQKKyAqIGFkZHJlc3Mgc3BhY2UgYWNyb3NzIEVYUE9SVF9TWU1CT0woKSwgY2hhbmdlIEVYUE9SVF9TWU1CT0woKSB0bworICogbm9vcCBpZiBfX0NIRUNLRVJfXy4KICAqLwotI2RlZmluZSBFWFBPUlRfUEVSX0NQVV9TWU1CT0wodmFyKSBFWFBPUlRfU1lNQk9MKHBlcl9jcHVfXyMjdmFyKQotI2RlZmluZSBFWFBPUlRfUEVSX0NQVV9TWU1CT0xfR1BMKHZhcikgRVhQT1JUX1NZTUJPTF9HUEwocGVyX2NwdV9fIyN2YXIpCi0KKyNpZm5kZWYgX19DSEVDS0VSX18KKyNkZWZpbmUgRVhQT1JUX1BFUl9DUFVfU1lNQk9MKHZhcikgRVhQT1JUX1NZTUJPTCh2YXIpCisjZGVmaW5lIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTF9HUEwodmFyKSBFWFBPUlRfU1lNQk9MX0dQTCh2YXIpCisjZWxzZQorI2RlZmluZSBFWFBPUlRfUEVSX0NQVV9TWU1CT0wodmFyKQorI2RlZmluZSBFWFBPUlRfUEVSX0NQVV9TWU1CT0xfR1BMKHZhcikKKyNlbmRpZgogCiAjZW5kaWYgLyogX0xJTlVYX1BFUkNQVV9ERUZTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmggYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCmluZGV4IGNmNWVmYmMuLmE5M2U1YmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJjcHUuaApAQCAtMjcsMTAgKzI3LDE3IEBACiAgKiB3ZSBmb3JjZSBhIHN5bnRheCBlcnJvciBoZXJlIGlmIGl0IGlzbid0LgogICovCiAjZGVmaW5lIGdldF9jcHVfdmFyKHZhcikgKCooewkJCQlcCi0JZXh0ZXJuIGludCBzaW1wbGVfaWRlbnRpZmllcl8jI3Zhcih2b2lkKTsJXAogCXByZWVtcHRfZGlzYWJsZSgpOwkJCQlcCiAJJl9fZ2V0X2NwdV92YXIodmFyKTsgfSkpCi0jZGVmaW5lIHB1dF9jcHVfdmFyKHZhcikgcHJlZW1wdF9lbmFibGUoKQorCisvKgorICogVGhlIHdlaXJkICYgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugc3BhcnNlIGNvbnNpZGVycyAodm9pZCkodmFyKSB0byBiZQorICogYSBkaXJlY3QgZGVyZWZlcmVuY2Ugb2YgcGVyY3B1IHZhcmlhYmxlICh2YXIpLgorICovCisjZGVmaW5lIHB1dF9jcHVfdmFyKHZhcikgZG8gewkJCQlcCisJKHZvaWQpJih2YXIpOwkJCQkJXAorCXByZWVtcHRfZW5hYmxlKCk7CQkJCVwKK30gd2hpbGUgKDApCiAKICNpZmRlZiBDT05GSUdfU01QCiAKQEAgLTEyNyw5ICsxMzQsOSBAQAogICovCiAjZGVmaW5lIHBlcl9jcHVfcHRyKHB0ciwgY3B1KQlTSElGVF9QRVJDUFVfUFRSKChwdHIpLCBwZXJfY3B1X29mZnNldCgoY3B1KSkpCiAKLWV4dGVybiB2b2lkICpfX2FsbG9jX3Jlc2VydmVkX3BlcmNwdShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKTsKLWV4dGVybiB2b2lkICpfX2FsbG9jX3BlcmNwdShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKTsKLWV4dGVybiB2b2lkIGZyZWVfcGVyY3B1KHZvaWQgKl9fcGRhdGEpOworZXh0ZXJuIHZvaWQgX19wZXJjcHUgKl9fYWxsb2NfcmVzZXJ2ZWRfcGVyY3B1KHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pOworZXh0ZXJuIHZvaWQgX19wZXJjcHUgKl9fYWxsb2NfcGVyY3B1KHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pOworZXh0ZXJuIHZvaWQgZnJlZV9wZXJjcHUodm9pZCBfX3BlcmNwdSAqX19wZGF0YSk7CiBleHRlcm4gcGh5c19hZGRyX3QgcGVyX2NwdV9wdHJfdG9fcGh5cyh2b2lkICphZGRyKTsKIAogI2lmbmRlZiBDT05GSUdfSEFWRV9TRVRVUF9QRVJfQ1BVX0FSRUEKQEAgLTE0MCw3ICsxNDcsNyBAQAogCiAjZGVmaW5lIHBlcl9jcHVfcHRyKHB0ciwgY3B1KSAoeyAodm9pZCkoY3B1KTsgKHB0cik7IH0pCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCAqX19hbGxvY19wZXJjcHUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BlcmNwdSAqX19hbGxvY19wZXJjcHUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbikKIHsKIAkvKgogCSAqIENhbid0IGVhc2lseSBtYWtlIGxhcmdlciBhbGlnbm1lbnQgd29yayB3aXRoIGttYWxsb2MuICBXQVJOCkBAIC0xNTEsNyArMTU4LDcgQEAKIAlyZXR1cm4ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZyZWVfcGVyY3B1KHZvaWQgKnApCitzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9wZXJjcHUodm9pZCBfX3BlcmNwdSAqcCkKIHsKIAlrZnJlZShwKTsKIH0KQEAgLTE3MSw3ICsxNzgsNyBAQAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KIAogI2RlZmluZSBhbGxvY19wZXJjcHUodHlwZSkJXAotCSh0eXBlb2YodHlwZSkgKilfX2FsbG9jX3BlcmNwdShzaXplb2YodHlwZSksIF9fYWxpZ25vZl9fKHR5cGUpKQorCSh0eXBlb2YodHlwZSkgX19wZXJjcHUgKilfX2FsbG9jX3BlcmNwdShzaXplb2YodHlwZSksIF9fYWxpZ25vZl9fKHR5cGUpKQogCiAvKgogICogT3B0aW9uYWwgbWV0aG9kcyBmb3Igb3B0aW1pemVkIG5vbi1sdmFsdWUgcGVyLWNwdSB2YXJpYWJsZSBhY2Nlc3MuCkBAIC0xODgsMTcgKzE5NSwxOSBAQAogI2lmbmRlZiBwZXJjcHVfcmVhZAogIyBkZWZpbmUgcGVyY3B1X3JlYWQodmFyKQkJCQkJCVwKICAgKHsJCQkJCQkJCQlcCi0JdHlwZW9mKHBlcl9jcHVfdmFyKHZhcikpIF9fdG1wX3Zhcl9fOwkJCQlcCi0JX190bXBfdmFyX18gPSBnZXRfY3B1X3Zhcih2YXIpOwkJCQkJXAotCXB1dF9jcHVfdmFyKHZhcik7CQkJCQkJXAotCV9fdG1wX3Zhcl9fOwkJCQkJCQlcCisJdHlwZW9mKHZhcikgKnByX3B0cl9fID0gJih2YXIpOwkJCQkJXAorCXR5cGVvZih2YXIpIHByX3JldF9fOwkJCQkJCVwKKwlwcl9yZXRfXyA9IGdldF9jcHVfdmFyKCpwcl9wdHJfXyk7CQkJCVwKKwlwdXRfY3B1X3ZhcigqcHJfcHRyX18pOwkJCQkJCVwKKwlwcl9yZXRfXzsJCQkJCQkJXAogICB9KQogI2VuZGlmCiAKICNkZWZpbmUgX19wZXJjcHVfZ2VuZXJpY190b19vcCh2YXIsIHZhbCwgb3ApCQkJCVwKIGRvIHsJCQkJCQkJCQlcCi0JZ2V0X2NwdV92YXIodmFyKSBvcCB2YWw7CQkJCQlcCi0JcHV0X2NwdV92YXIodmFyKTsJCQkJCQlcCisJdHlwZW9mKHZhcikgKnBndG9fcHRyX18gPSAmKHZhcik7CQkJCVwKKwlnZXRfY3B1X3ZhcigqcGd0b19wdHJfXykgb3AgdmFsOwkJCQlcCisJcHV0X2NwdV92YXIoKnBndG9fcHRyX18pOwkJCQkJXAogfSB3aGlsZSAoMCkKIAogI2lmbmRlZiBwZXJjcHVfd3JpdGUKQEAgLTIzNCw2ICsyNDMsNyBAQAogCiAjZGVmaW5lIF9fcGNwdV9zaXplX2NhbGxfcmV0dXJuKHN0ZW0sIHZhcmlhYmxlKQkJCQlcCiAoewl0eXBlb2YodmFyaWFibGUpIHBzY3JfcmV0X187CQkJCQlcCisJX192ZXJpZnlfcGNwdV9wdHIoJih2YXJpYWJsZSkpOwkJCQkJXAogCXN3aXRjaChzaXplb2YodmFyaWFibGUpKSB7CQkJCQlcCiAJY2FzZSAxOiBwc2NyX3JldF9fID0gc3RlbSMjMSh2YXJpYWJsZSk7YnJlYWs7CQkJXAogCWNhc2UgMjogcHNjcl9yZXRfXyA9IHN0ZW0jIzIodmFyaWFibGUpO2JyZWFrOwkJCVwKQEAgLTI0Nyw2ICsyNTcsNyBAQAogCiAjZGVmaW5lIF9fcGNwdV9zaXplX2NhbGwoc3RlbSwgdmFyaWFibGUsIC4uLikJCQkJXAogZG8gewkJCQkJCQkJCVwKKwlfX3ZlcmlmeV9wY3B1X3B0cigmKHZhcmlhYmxlKSk7CQkJCQlcCiAJc3dpdGNoKHNpemVvZih2YXJpYWJsZSkpIHsJCQkJCVwKIAkJY2FzZSAxOiBzdGVtIyMxKHZhcmlhYmxlLCBfX1ZBX0FSR1NfXyk7YnJlYWs7CQlcCiAJCWNhc2UgMjogc3RlbSMjMih2YXJpYWJsZSwgX19WQV9BUkdTX18pO2JyZWFrOwkJXApAQCAtMjU5LDggKzI3MCw3IEBACiAKIC8qCiAgKiBPcHRpbWl6ZWQgbWFuaXB1bGF0aW9uIGZvciBtZW1vcnkgYWxsb2NhdGVkIHRocm91Z2ggdGhlIHBlciBjcHUKLSAqIGFsbG9jYXRvciBvciBmb3IgYWRkcmVzc2VzIG9mIHBlciBjcHUgdmFyaWFibGVzIChjYW4gYmUgZGV0ZXJtaW5lZAotICogdXNpbmcgcGVyX2NwdV92YXIoeHgpLgorICogYWxsb2NhdG9yIG9yIGZvciBhZGRyZXNzZXMgb2YgcGVyIGNwdSB2YXJpYWJsZXMuCiAgKgogICogVGhlc2Ugb3BlcmF0aW9uIGd1YXJhbnRlZSBleGNsdXNpdml0eSBvZiBhY2Nlc3MgZm9yIG90aGVyIG9wZXJhdGlvbnMKICAqIG9uIHRoZSAqc2FtZSogcHJvY2Vzc29yLiBUaGUgYXNzdW1wdGlvbiBpcyB0aGF0IHBlciBjcHUgZGF0YSBpcyBvbmx5CkBAIC0zMTEsNyArMzIxLDcgQEAKICNkZWZpbmUgX3RoaXNfY3B1X2dlbmVyaWNfdG9fb3AocGNwLCB2YWwsIG9wKQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCXByZWVtcHRfZGlzYWJsZSgpOwkJCQkJCVwKLQkqX190aGlzX2NwdV9wdHIoJnBjcCkgb3AgdmFsOwkJCQkJXAorCSpfX3RoaXNfY3B1X3B0cigmKHBjcCkpIG9wIHZhbDsJCQkJCVwKIAlwcmVlbXB0X2VuYWJsZSgpOwkJCQkJCVwKIH0gd2hpbGUgKDApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyY3B1X2NvdW50ZXIuaCBiL2luY2x1ZGUvbGludXgvcGVyY3B1X2NvdW50ZXIuaAppbmRleCA3OTQ2NjJiLi5jODhkNjdiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BlcmNwdV9jb3VudGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJjcHVfY291bnRlci5oCkBAIC0yMSw3ICsyMSw3IEBACiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkvKiBBbGwgcGVyY3B1X2NvdW50ZXJzIGFyZSBvbiBhIGxpc3QgKi8KICNlbmRpZgotCXMzMiAqY291bnRlcnM7CisJczMyIF9fcGVyY3B1ICpjb3VudGVyczsKIH07CiAKIGV4dGVybiBpbnQgcGVyY3B1X2NvdW50ZXJfYmF0Y2g7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeS5oIGIvaW5jbHVkZS9saW51eC9waHkuaAppbmRleCA2YTdlYjQwLi4xNGQ3ZmRmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BoeS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGh5LmgKQEAgLTQ1Miw2ICs0NTIsNyBAQAogCQl1MzIgZmxhZ3MsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpOwogc3RydWN0IHBoeV9kZXZpY2UgKiBwaHlfYXR0YWNoKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCWNvbnN0IGNoYXIgKmJ1c19pZCwgdTMyIGZsYWdzLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKTsKK3N0cnVjdCBwaHlfZGV2aWNlICpwaHlfZmluZF9maXJzdChzdHJ1Y3QgbWlpX2J1cyAqYnVzKTsKIGludCBwaHlfY29ubmVjdF9kaXJlY3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKIAkJdm9pZCAoKmhhbmRsZXIpKHN0cnVjdCBuZXRfZGV2aWNlICopLCB1MzIgZmxhZ3MsCiAJCXBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKaW5kZXggNzFmZjg4Ny4uMjEyZGExNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BsYXRmb3JtX2RldmljZS5oCkBAIC0yMSw3ICsyMSw3IEBACiAJdTMyCQludW1fcmVzb3VyY2VzOwogCXN0cnVjdCByZXNvdXJjZQkqIHJlc291cmNlOwogCi0Jc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZAkqaWRfZW50cnk7CisJY29uc3Qgc3RydWN0IHBsYXRmb3JtX2RldmljZV9pZAkqaWRfZW50cnk7CiAKIAkvKiBhcmNoIHNwZWNpZmljIGFkZGl0aW9ucyAqLwogCXN0cnVjdCBwZGV2X2FyY2hkYXRhCWFyY2hkYXRhOwpAQCAtNjIsNyArNjIsNyBAQAogCWludCAoKnN1c3BlbmQpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKIAlpbnQgKCpyZXN1bWUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOwotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgKmlkX3RhYmxlOworCWNvbnN0IHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2VfaWQgKmlkX3RhYmxlOwogfTsKIAogZXh0ZXJuIGludCBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoc3RydWN0IHBsYXRmb3JtX2RyaXZlciAqKTsKQEAgLTc3LDYgKzc3LDExIEBACiAjZGVmaW5lIHBsYXRmb3JtX2dldF9kcnZkYXRhKF9kZXYpCWRldl9nZXRfZHJ2ZGF0YSgmKF9kZXYpLT5kZXYpCiAjZGVmaW5lIHBsYXRmb3JtX3NldF9kcnZkYXRhKF9kZXYsZGF0YSkJZGV2X3NldF9kcnZkYXRhKCYoX2RldiktPmRldiwgKGRhdGEpKQogCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGxhdGZvcm1fY3JlYXRlX2J1bmRsZShzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyICpkcml2ZXIsCisJCQkJCWludCAoKnByb2JlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopLAorCQkJCQlzdHJ1Y3QgcmVzb3VyY2UgKnJlcywgdW5zaWduZWQgaW50IG5fcmVzLAorCQkJCQljb25zdCB2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSk7CisKIC8qIGVhcmx5IHBsYXRmb3JtIGRyaXZlciBpbnRlcmZhY2UgKi8KIHN0cnVjdCBlYXJseV9wbGF0Zm9ybV9kcml2ZXIgewogCWNvbnN0IGNoYXIgKmNsYXNzX3N0cjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcG0uaCBiL2luY2x1ZGUvbGludXgvcG0uaAppbmRleCBlODBkZjA2Li44ZTI1OGM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtLmgKKysrIGIvaW5jbHVkZS9saW51eC9wbS5oCkBAIC0yMTUsMjAgKzIxNSw1OSBAQAogCWludCAoKnJ1bnRpbWVfaWRsZSkoc3RydWN0IGRldmljZSAqZGV2KTsKIH07CiAKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKKyNkZWZpbmUgU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMoc3VzcGVuZF9mbiwgcmVzdW1lX2ZuKSBcCisJLnN1c3BlbmQgPSBzdXNwZW5kX2ZuLCBcCisJLnJlc3VtZSA9IHJlc3VtZV9mbiwgXAorCS5mcmVlemUgPSBzdXNwZW5kX2ZuLCBcCisJLnRoYXcgPSByZXN1bWVfZm4sIFwKKwkucG93ZXJvZmYgPSBzdXNwZW5kX2ZuLCBcCisJLnJlc3RvcmUgPSByZXN1bWVfZm4sCisjZWxzZQorI2RlZmluZSBTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhzdXNwZW5kX2ZuLCByZXN1bWVfZm4pCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19QTV9SVU5USU1FCisjZGVmaW5lIFNFVF9SVU5USU1FX1BNX09QUyhzdXNwZW5kX2ZuLCByZXN1bWVfZm4sIGlkbGVfZm4pIFwKKwkucnVudGltZV9zdXNwZW5kID0gc3VzcGVuZF9mbiwgXAorCS5ydW50aW1lX3Jlc3VtZSA9IHJlc3VtZV9mbiwgXAorCS5ydW50aW1lX2lkbGUgPSBpZGxlX2ZuLAorI2Vsc2UKKyNkZWZpbmUgU0VUX1JVTlRJTUVfUE1fT1BTKHN1c3BlbmRfZm4sIHJlc3VtZV9mbiwgaWRsZV9mbikKKyNlbmRpZgorCiAvKgogICogVXNlIHRoaXMgaWYgeW91IHdhbnQgdG8gdXNlIHRoZSBzYW1lIHN1c3BlbmQgYW5kIHJlc3VtZSBjYWxsYmFja3MgZm9yIHN1c3BlbmQKICAqIHRvIFJBTSBhbmQgaGliZXJuYXRpb24uCiAgKi8KICNkZWZpbmUgU0lNUExFX0RFVl9QTV9PUFMobmFtZSwgc3VzcGVuZF9mbiwgcmVzdW1lX2ZuKSBcCiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBuYW1lID0geyBcCi0JLnN1c3BlbmQgPSBzdXNwZW5kX2ZuLCBcCi0JLnJlc3VtZSA9IHJlc3VtZV9mbiwgXAotCS5mcmVlemUgPSBzdXNwZW5kX2ZuLCBcCi0JLnRoYXcgPSByZXN1bWVfZm4sIFwKLQkucG93ZXJvZmYgPSBzdXNwZW5kX2ZuLCBcCi0JLnJlc3RvcmUgPSByZXN1bWVfZm4sIFwKKwlTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyhzdXNwZW5kX2ZuLCByZXN1bWVfZm4pIFwKIH0KIAorLyoKKyAqIFVzZSB0aGlzIGZvciBkZWZpbmluZyBhIHNldCBvZiBQTSBvcGVyYXRpb25zIHRvIGJlIHVzZWQgaW4gYWxsIHNpdHVhdGlvbnMKKyAqIChzdXN0ZW0gc3VzcGVuZCwgaGliZXJuYXRpb24gb3IgcnVudGltZSBQTSkuCisgKi8KKyNkZWZpbmUgVU5JVkVSU0FMX0RFVl9QTV9PUFMobmFtZSwgc3VzcGVuZF9mbiwgcmVzdW1lX2ZuLCBpZGxlX2ZuKSBcCitjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBuYW1lID0geyBcCisJU0VUX1NZU1RFTV9TTEVFUF9QTV9PUFMoc3VzcGVuZF9mbiwgcmVzdW1lX2ZuKSBcCisJU0VUX1JVTlRJTUVfUE1fT1BTKHN1c3BlbmRfZm4sIHJlc3VtZV9mbiwgaWRsZV9mbikgXAorfQorCisvKgorICogVXNlIHRoaXMgZm9yIHN1YnN5c3RlbXMgKGJ1cyB0eXBlcywgZGV2aWNlIHR5cGVzLCBkZXZpY2UgY2xhc3NlcykgdGhhdCBkb24ndAorICogbmVlZCBhbnkgc3BlY2lhbCBzdXNwZW5kL3Jlc3VtZSBoYW5kbGluZyBpbiBhZGRpdGlvbiB0byBpbnZva2luZyB0aGUgUE0KKyAqIGNhbGxiYWNrcyBwcm92aWRlZCBieSBkZXZpY2UgZHJpdmVycyBzdXBwb3J0aW5nIGJvdGggdGhlIHN5c3RlbSBzbGVlcCBQTSBhbmQKKyAqIHJ1bnRpbWUgUE0sIG1ha2UgdGhlIHBtIG1lbWJlciBwb2ludCB0byBnZW5lcmljX3N1YnN5c19wbV9vcHMuCisgKi8KKyNpZmRlZiBDT05GSUdfUE1fT1BTCitleHRlcm4gc3RydWN0IGRldl9wbV9vcHMgZ2VuZXJpY19zdWJzeXNfcG1fb3BzOworI2RlZmluZSBHRU5FUklDX1NVQlNZU19QTV9PUFMJKCZnZW5lcmljX3N1YnN5c19wbV9vcHMpCisjZWxzZQorI2RlZmluZSBHRU5FUklDX1NVQlNZU19QTV9PUFMJTlVMTAorI2VuZGlmCisKIC8qKgogICogUE1fRVZFTlRfIG1lc3NhZ2VzCiAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wbV9ydW50aW1lLmggYi9pbmNsdWRlL2xpbnV4L3BtX3J1bnRpbWUuaAppbmRleCA3ZDc3M2FhLi5iNzc2ZGI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BtX3J1bnRpbWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BtX3J1bnRpbWUuaApAQCAtNjIsNiArNjIsMTEgQEAKIAlkZXYtPnBvd2VyLnJ1bl93YWtlID0gZW5hYmxlOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgcG1fcnVudGltZV9zdXNwZW5kZWQoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPnBvd2VyLnJ1bnRpbWVfc3RhdHVzID09IFJQTV9TVVNQRU5ERUQ7Cit9CisKICNlbHNlIC8qICFDT05GSUdfUE1fUlVOVElNRSAqLwogCiBzdGF0aWMgaW5saW5lIGludCBwbV9ydW50aW1lX2lkbGUoc3RydWN0IGRldmljZSAqZGV2KSB7IHJldHVybiAtRU5PU1lTOyB9CkBAIC04OSw2ICs5NCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcG1fcnVudGltZV9wdXRfbm9pZGxlKHN0cnVjdCBkZXZpY2UgKmRldikge30KIHN0YXRpYyBpbmxpbmUgYm9vbCBkZXZpY2VfcnVuX3dha2Uoc3RydWN0IGRldmljZSAqZGV2KSB7IHJldHVybiBmYWxzZTsgfQogc3RhdGljIGlubGluZSB2b2lkIGRldmljZV9zZXRfcnVuX3dha2Uoc3RydWN0IGRldmljZSAqZGV2LCBib29sIGVuYWJsZSkge30KK3N0YXRpYyBpbmxpbmUgYm9vbCBwbV9ydW50aW1lX3N1c3BlbmRlZChzdHJ1Y3QgZGV2aWNlICpkZXYpIHsgcmV0dXJuIGZhbHNlOyB9CiAKICNlbmRpZiAvKiAhQ09ORklHX1BNX1JVTlRJTUUgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wb2xsLmggYi9pbmNsdWRlL2xpbnV4L3BvbGwuaAppbmRleCA2NjczNzQzLi42MDBjYzFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BvbGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BvbGwuaApAQCAtMTAsOCArMTAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjdGwuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCitleHRlcm4gc3RydWN0IGN0bF90YWJsZSBlcG9sbF90YWJsZVtdOyAvKiBmb3Igc3lzY3RsICovCiAvKiB+ODMyIGJ5dGVzIG9mIHN0YWNrIHNwYWNlIHVzZWQgbWF4IGluIHN5c19zZWxlY3Qvc3lzX3BvbGwgYmVmb3JlIGFsbG9jYXRpbmcKICAgIGFkZGl0aW9uYWwgbWVtb3J5LiAqLwogI2RlZmluZSBNQVhfU1RBQ0tfQUxMT0MgODMyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9wdHJhY2UuaAppbmRleCBjNWVhYjg5Li5lMWZiNjA3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKQEAgLTI2NCw2ICsyNjQsOSBAQAogc3RhdGljIGlubGluZSB2b2lkIHVzZXJfZGlzYWJsZV9zaW5nbGVfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiB9CisjZWxzZQorZXh0ZXJuIHZvaWQgdXNlcl9lbmFibGVfc2luZ2xlX3N0ZXAoc3RydWN0IHRhc2tfc3RydWN0ICopOworZXh0ZXJuIHZvaWQgdXNlcl9kaXNhYmxlX3NpbmdsZV9zdGVwKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKICNlbmRpZgkvKiBhcmNoX2hhc19zaW5nbGVfc3RlcCAqLwogCiAjaWZuZGVmIGFyY2hfaGFzX2Jsb2NrX3N0ZXAKQEAgLTI5MSw2ICsyOTQsOCBAQAogewogCUJVRygpOwkJCS8qIFRoaXMgY2FuIG5ldmVyIGJlIGNhbGxlZC4gICovCiB9CisjZWxzZQorZXh0ZXJuIHZvaWQgdXNlcl9lbmFibGVfYmxvY2tfc3RlcChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CiAjZW5kaWYJLyogYXJjaF9oYXNfYmxvY2tfc3RlcCAqLwogCiAjaWZkZWYgQVJDSF9IQVNfVVNFUl9TSU5HTEVfU1RFUF9JTkZPCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3F1b3RhLmggYi9pbmNsdWRlL2xpbnV4L3F1b3RhLmgKaW5kZXggYTY4NjFmMS4uYjQ2MjkxNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9xdW90YS5oCisrKyBiL2luY2x1ZGUvbGludXgvcXVvdGEuaApAQCAtMjc5LDkgKzI3OSw2IEBACiAJc3RydWN0IG1lbV9kcWJsayBkcV9kcWI7CS8qIERpc2txdW90YSB1c2FnZSAqLwogfTsKIAotI2RlZmluZSBRVU9UQV9PSyAgICAgICAgICAwCi0jZGVmaW5lIE5PX1FVT1RBICAgICAgICAgIDEKLQogLyogT3BlcmF0aW9ucyB3aGljaCBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggcXVvdGEgZm9ybWF0ICovCiBzdHJ1Y3QgcXVvdGFfZm9ybWF0X29wcyB7CiAJaW50ICgqY2hlY2tfcXVvdGFfZmlsZSkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpOwkvKiBEZXRlY3Qgd2hldGhlciBmaWxlIGlzIGluIG91ciBmb3JtYXQgKi8KQEAgLTI5NSwxMyArMjkyLDYgQEAKIAogLyogT3BlcmF0aW9ucyB3b3JraW5nIHdpdGggZHF1b3RzICovCiBzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyB7Ci0JaW50ICgqaW5pdGlhbGl6ZSkgKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwotCWludCAoKmRyb3ApIChzdHJ1Y3QgaW5vZGUgKik7Ci0JaW50ICgqYWxsb2Nfc3BhY2UpIChzdHJ1Y3QgaW5vZGUgKiwgcXNpemVfdCwgaW50KTsKLQlpbnQgKCphbGxvY19pbm9kZSkgKGNvbnN0IHN0cnVjdCBpbm9kZSAqLCBxc2l6ZV90KTsKLQlpbnQgKCpmcmVlX3NwYWNlKSAoc3RydWN0IGlub2RlICosIHFzaXplX3QpOwotCWludCAoKmZyZWVfaW5vZGUpIChjb25zdCBzdHJ1Y3QgaW5vZGUgKiwgcXNpemVfdCk7Ci0JaW50ICgqdHJhbnNmZXIpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlhdHRyICopOwogCWludCAoKndyaXRlX2RxdW90KSAoc3RydWN0IGRxdW90ICopOwkJLyogT3JkaW5hcnkgZHF1b3Qgd3JpdGUgKi8KIAlzdHJ1Y3QgZHF1b3QgKigqYWxsb2NfZHF1b3QpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQpOwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIG5ldyBkcXVvdCAqLwogCXZvaWQgKCpkZXN0cm95X2RxdW90KShzdHJ1Y3QgZHF1b3QgKik7CQkvKiBGcmVlIG1lbW9yeSBmb3IgZHF1b3QgKi8KQEAgLTMwOSwxMiArMjk5LDYgQEAKIAlpbnQgKCpyZWxlYXNlX2RxdW90KSAoc3RydWN0IGRxdW90ICopOwkJLyogUXVvdGEgaXMgZ29pbmcgdG8gYmUgZGVsZXRlZCBmcm9tIGRpc2sgKi8KIAlpbnQgKCptYXJrX2RpcnR5KSAoc3RydWN0IGRxdW90ICopOwkJLyogRHF1b3QgaXMgbWFya2VkIGRpcnR5ICovCiAJaW50ICgqd3JpdGVfaW5mbykgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQpOwkvKiBXcml0ZSBvZiBxdW90YSAic3VwZXJibG9jayIgKi8KLQkvKiByZXNlcnZlIHF1b3RhIGZvciBkZWxheWVkIGJsb2NrIGFsbG9jYXRpb24gKi8KLQlpbnQgKCpyZXNlcnZlX3NwYWNlKSAoc3RydWN0IGlub2RlICosIHFzaXplX3QsIGludCk7Ci0JLyogY2xhaW0gcmVzZXJ2ZWQgcXVvdGEgZm9yIGRlbGF5ZWQgYWxsb2MgKi8KLQlpbnQgKCpjbGFpbV9zcGFjZSkgKHN0cnVjdCBpbm9kZSAqLCBxc2l6ZV90KTsKLQkvKiByZWxlYXNlIHJzdmVkIHF1b3RhIGZvciBkZWxheWVkIGFsbG9jICovCi0Jdm9pZCAoKnJlbGVhc2VfcnN2KSAoc3RydWN0IGlub2RlICosIHFzaXplX3QpOwogCS8qIGdldCByZXNlcnZlZCBxdW90YSBmb3IgZGVsYXllZCBhbGxvYywgdmFsdWUgcmV0dXJuZWQgaXMgbWFuYWdlZCBieQogCSAqIHF1b3RhIGNvZGUgb25seSAqLwogCXFzaXplX3QgKigqZ2V0X3Jlc2VydmVkX3NwYWNlKSAoc3RydWN0IGlub2RlICopOwpAQCAtMzI0LDcgKzMwOCw3IEBACiBzdHJ1Y3QgcXVvdGFjdGxfb3BzIHsKIAlpbnQgKCpxdW90YV9vbikoc3RydWN0IHN1cGVyX2Jsb2NrICosIGludCwgaW50LCBjaGFyICosIGludCk7CiAJaW50ICgqcXVvdGFfb2ZmKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBpbnQpOwotCWludCAoKnF1b3RhX3N5bmMpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQpOworCWludCAoKnF1b3RhX3N5bmMpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIGludCk7CiAJaW50ICgqZ2V0X2luZm8pKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIHN0cnVjdCBpZl9kcWluZm8gKik7CiAJaW50ICgqc2V0X2luZm8pKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIHN0cnVjdCBpZl9kcWluZm8gKik7CiAJaW50ICgqZ2V0X2RxYmxrKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBxaWRfdCwgc3RydWN0IGlmX2RxYmxrICopOwpAQCAtMzU3LDI2ICszNDEsMjUgQEAKICNkZWZpbmUgRFFVT1RfU1RBVEVfRkxBR1MJKERRVU9UX1VTQUdFX0VOQUJMRUQgfCBEUVVPVF9MSU1JVFNfRU5BQkxFRCB8IFwKIAkJCQkgRFFVT1RfU1VTUEVOREVEKQogLyogT3RoZXIgcXVvdGEgZmxhZ3MgKi8KLSNkZWZpbmUgRFFVT1RfUVVPVEFfU1lTX0ZJTEUJKDEgPDwgNikJLyogUXVvdGEgZmlsZSBpcyBhIHNwZWNpYWwKKyNkZWZpbmUgRFFVT1RfU1RBVEVfTEFTVAkoX0RRVU9UX1NUQVRFX0ZMQUdTICogTUFYUVVPVEFTKQorI2RlZmluZSBEUVVPVF9RVU9UQV9TWVNfRklMRQkoMSA8PCBEUVVPVF9TVEFURV9MQVNUKQorCQkJCQkJLyogUXVvdGEgZmlsZSBpcyBhIHNwZWNpYWwKIAkJCQkJCSAqIHN5c3RlbSBmaWxlIGFuZCB1c2VyIGNhbm5vdAogCQkJCQkJICogdG91Y2ggaXQuIEZpbGVzeXN0ZW0gaXMKIAkJCQkJCSAqIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nCiAJCQkJCQkgKiBTX05PUVVPVEEsIFNfTk9BVElNRSBmbGFncwogCQkJCQkJICovCi0jZGVmaW5lIERRVU9UX05FR0FUSVZFX1VTQUdFCSgxIDw8IDcpCS8qIEFsbG93IG5lZ2F0aXZlIHF1b3RhIHVzYWdlICovCisjZGVmaW5lIERRVU9UX05FR0FUSVZFX1VTQUdFCSgxIDw8IChEUVVPVF9TVEFURV9MQVNUICsgMSkpCisJCQkJCSAgICAgICAvKiBBbGxvdyBuZWdhdGl2ZSBxdW90YSB1c2FnZSAqLwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkcXVvdF9zdGF0ZV9mbGFnKHVuc2lnbmVkIGludCBmbGFncywgaW50IHR5cGUpCiB7Ci0JaWYgKHR5cGUgPT0gVVNSUVVPVEEpCi0JCXJldHVybiBmbGFnczsKLQlyZXR1cm4gZmxhZ3MgPDwgX0RRVU9UX1NUQVRFX0ZMQUdTOworCXJldHVybiBmbGFncyA8PCBfRFFVT1RfU1RBVEVfRkxBR1MgKiB0eXBlOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBkcXVvdF9nZW5lcmljX2ZsYWcodW5zaWduZWQgaW50IGZsYWdzLCBpbnQgdHlwZSkKIHsKLQlpZiAodHlwZSA9PSBVU1JRVU9UQSkKLQkJcmV0dXJuIGZsYWdzOwotCXJldHVybiBmbGFncyA+PiBfRFFVT1RfU1RBVEVfRkxBR1M7CisJcmV0dXJuIChmbGFncyA+PiBfRFFVT1RfU1RBVEVfRkxBR1MgKiB0eXBlKSAmIERRVU9UX1NUQVRFX0ZMQUdTOwogfQogCiAjaWZkZWYgQ09ORklHX1FVT1RBX05FVExJTktfSU5URVJGQUNFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmggYi9pbmNsdWRlL2xpbnV4L3F1b3Rhb3BzLmgKaW5kZXggM2ViYjIzMS4uZTZmYTdhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9xdW90YW9wcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcXVvdGFvcHMuaApAQCAtMTksMTUgKzE5LDEyIEBACiAvKgogICogZGVjbGFyYXRpb24gb2YgcXVvdGFfZnVuY3Rpb24gY2FsbHMgaW4ga2VybmVsLgogICovCi12b2lkIHN5bmNfcXVvdGFfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpOwotc3RhdGljIGlubGluZSB2b2lkIHdyaXRlb3V0X3F1b3RhX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQotewotCWlmIChzYi0+c19xY29wLT5xdW90YV9zeW5jKQotCQlzYi0+c19xY29wLT5xdW90YV9zeW5jKHNiLCB0eXBlKTsKLX0KK3ZvaWQgaW5vZGVfYWRkX3Jzdl9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcik7Cit2b2lkIGlub2RlX2NsYWltX3Jzdl9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcik7Cit2b2lkIGlub2RlX3N1Yl9yc3Zfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpOwogCi1pbnQgZHF1b3RfaW5pdGlhbGl6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSk7Ci1pbnQgZHF1b3RfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK3ZvaWQgZHF1b3RfaW5pdGlhbGl6ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK3ZvaWQgZHF1b3RfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIHN0cnVjdCBkcXVvdCAqZHFnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IGlkLCBpbnQgdHlwZSk7CiB2b2lkIGRxcHV0KHN0cnVjdCBkcXVvdCAqZHF1b3QpOwogaW50IGRxdW90X3NjYW5fYWN0aXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCkBAIC0zNiwyNCArMzMsMjMgQEAKIHN0cnVjdCBkcXVvdCAqZHF1b3RfYWxsb2Moc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpOwogdm9pZCBkcXVvdF9kZXN0cm95KHN0cnVjdCBkcXVvdCAqZHF1b3QpOwogCi1pbnQgZHF1b3RfYWxsb2Nfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsIGludCBwcmVhbGxvYyk7Ci1pbnQgZHF1b3RfYWxsb2NfaW5vZGUoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpOworaW50IF9fZHF1b3RfYWxsb2Nfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsCisJCWludCB3YXJuLCBpbnQgcmVzZXJ2ZSk7Cit2b2lkIF9fZHF1b3RfZnJlZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlciwgaW50IHJlc2VydmUpOwogCi1pbnQgZHF1b3RfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlciwgaW50IHByZWFsbG9jKTsKLWludCBkcXVvdF9jbGFpbV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlcik7Ci12b2lkIGRxdW90X3JlbGVhc2VfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpOwotcXNpemVfdCBkcXVvdF9nZXRfcmVzZXJ2ZWRfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSk7CitpbnQgZHF1b3RfYWxsb2NfaW5vZGUoY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSk7CiAKLWludCBkcXVvdF9mcmVlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKTsKLWludCBkcXVvdF9mcmVlX2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKTsKK2ludCBkcXVvdF9jbGFpbV9zcGFjZV9ub2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnVtYmVyKTsKK3ZvaWQgZHF1b3RfZnJlZV9pbm9kZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAotaW50IGRxdW90X3RyYW5zZmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpYXR0ciAqaWF0dHIpOwogaW50IGRxdW90X2NvbW1pdChzdHJ1Y3QgZHF1b3QgKmRxdW90KTsKIGludCBkcXVvdF9hY3F1aXJlKHN0cnVjdCBkcXVvdCAqZHF1b3QpOwogaW50IGRxdW90X3JlbGVhc2Uoc3RydWN0IGRxdW90ICpkcXVvdCk7CiBpbnQgZHF1b3RfY29tbWl0X2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpOwogaW50IGRxdW90X21hcmtfZHF1b3RfZGlydHkoc3RydWN0IGRxdW90ICpkcXVvdCk7CiAKK2ludCBkcXVvdF9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpOworCiBpbnQgdmZzX3F1b3RhX29uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBpbnQgZm9ybWF0X2lkLAogIAljaGFyICpwYXRoLCBpbnQgcmVtb3VudCk7CiBpbnQgdmZzX3F1b3RhX2VuYWJsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwgaW50IGZvcm1hdF9pZCwKQEAgLTY0LDE0ICs2MCwxMyBAQAogIAlpbnQgZm9ybWF0X2lkLCBpbnQgdHlwZSk7CiBpbnQgdmZzX3F1b3RhX29mZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IHJlbW91bnQpOwogaW50IHZmc19xdW90YV9kaXNhYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOwotaW50IHZmc19xdW90YV9zeW5jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKTsKK2ludCB2ZnNfcXVvdGFfc3luYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgaW50IHdhaXQpOwogaW50IHZmc19nZXRfZHFpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBzdHJ1Y3QgaWZfZHFpbmZvICppaSk7CiBpbnQgdmZzX3NldF9kcWluZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUsIHN0cnVjdCBpZl9kcWluZm8gKmlpKTsKIGludCB2ZnNfZ2V0X2RxYmxrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlLCBxaWRfdCBpZCwgc3RydWN0IGlmX2RxYmxrICpkaSk7CiBpbnQgdmZzX3NldF9kcWJsayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSwgcWlkX3QgaWQsIHN0cnVjdCBpZl9kcWJsayAqZGkpOwogCi12b2lkIHZmc19kcV9kcm9wKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwotaW50IHZmc19kcV90cmFuc2ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKTsKK2ludCBkcXVvdF90cmFuc2ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKTsKIGludCB2ZnNfZHFfcXVvdGFfb25fcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2RxaW5mbyAqc2JfZHFpbmZvKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQpAQCAtODMsNTMgKzc4LDU2IEBACiAgKiBGdW5jdGlvbnMgZm9yIGNoZWNraW5nIHN0YXR1cyBvZiBxdW90YQogICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IHNiX2hhc19xdW90YV91c2FnZV9lbmFibGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQorc3RhdGljIGlubGluZSBib29sIHNiX2hhc19xdW90YV91c2FnZV9lbmFibGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQogewogCXJldHVybiBzYl9kcW9wdChzYiktPmZsYWdzICYKIAkJCQlkcXVvdF9zdGF0ZV9mbGFnKERRVU9UX1VTQUdFX0VOQUJMRUQsIHR5cGUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzYl9oYXNfcXVvdGFfbGltaXRzX2VuYWJsZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2JfaGFzX3F1b3RhX2xpbWl0c19lbmFibGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQogewogCXJldHVybiBzYl9kcW9wdChzYiktPmZsYWdzICYKIAkJCQlkcXVvdF9zdGF0ZV9mbGFnKERRVU9UX0xJTUlUU19FTkFCTEVELCB0eXBlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2JfaGFzX3F1b3RhX3N1c3BlbmRlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzYl9oYXNfcXVvdGFfc3VzcGVuZGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQogewogCXJldHVybiBzYl9kcW9wdChzYiktPmZsYWdzICYKIAkJCQlkcXVvdF9zdGF0ZV9mbGFnKERRVU9UX1NVU1BFTkRFRCwgdHlwZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNiX2FueV9xdW90YV9zdXNwZW5kZWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2JfYW55X3F1b3RhX3N1c3BlbmRlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXJldHVybiBzYl9oYXNfcXVvdGFfc3VzcGVuZGVkKHNiLCBVU1JRVU9UQSkgfHwKLQkJc2JfaGFzX3F1b3RhX3N1c3BlbmRlZChzYiwgR1JQUVVPVEEpOworCXVuc2lnbmVkIHR5cGUsIHRtc2sgPSAwOworCWZvciAodHlwZSA9IDA7IHR5cGUgPCBNQVhRVU9UQVM7IHR5cGUrKykKKwkJdG1zayB8PSBzYl9oYXNfcXVvdGFfc3VzcGVuZGVkKHNiLCB0eXBlKSA8PCB0eXBlOworCXJldHVybiB0bXNrOwogfQogCiAvKiBEb2VzIGtlcm5lbCBrbm93IGFib3V0IGFueSBxdW90YSBpbmZvcm1hdGlvbiBmb3IgZ2l2ZW4gc2IgKyB0eXBlPyAqLwotc3RhdGljIGlubGluZSBpbnQgc2JfaGFzX3F1b3RhX2xvYWRlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzYl9oYXNfcXVvdGFfbG9hZGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCB0eXBlKQogewogCS8qIEN1cnJlbnRseSBpZiBhbnl0aGluZyBpcyBvbiwgdGhlbiBxdW90YSB1c2FnZSBpcyBvbiBhcyB3ZWxsICovCiAJcmV0dXJuIHNiX2hhc19xdW90YV91c2FnZV9lbmFibGVkKHNiLCB0eXBlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2JfYW55X3F1b3RhX2xvYWRlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBzYl9hbnlfcXVvdGFfbG9hZGVkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0JcmV0dXJuIHNiX2hhc19xdW90YV9sb2FkZWQoc2IsIFVTUlFVT1RBKSB8fAotCQlzYl9oYXNfcXVvdGFfbG9hZGVkKHNiLCBHUlBRVU9UQSk7CisJdW5zaWduZWQgdHlwZSwgdG1zayA9IDA7CisJZm9yICh0eXBlID0gMDsgdHlwZSA8IE1BWFFVT1RBUzsgdHlwZSsrKQorCQl0bXNrIHw9IHNiX2hhc19xdW90YV9sb2FkZWQoc2IsIHR5cGUpIDw8IHR5cGU7CisJcmV0dXJuCXRtc2s7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHNiX2hhc19xdW90YV9hY3RpdmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCitzdGF0aWMgaW5saW5lIGJvb2wgc2JfaGFzX3F1b3RhX2FjdGl2ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKIHsKIAlyZXR1cm4gc2JfaGFzX3F1b3RhX2xvYWRlZChzYiwgdHlwZSkgJiYKIAkgICAgICAgIXNiX2hhc19xdW90YV9zdXNwZW5kZWQoc2IsIHR5cGUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzYl9hbnlfcXVvdGFfYWN0aXZlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNiX2FueV9xdW90YV9hY3RpdmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlyZXR1cm4gc2JfaGFzX3F1b3RhX2FjdGl2ZShzYiwgVVNSUVVPVEEpIHx8Ci0JICAgICAgIHNiX2hhc19xdW90YV9hY3RpdmUoc2IsIEdSUFFVT1RBKTsKKwlyZXR1cm4gc2JfYW55X3F1b3RhX2xvYWRlZChzYikgJiB+c2JfYW55X3F1b3RhX3N1c3BlbmRlZChzYik7CiB9CiAKIC8qCkBAIC0xNDEsMTIyICsxMzksNiBAQAogI2RlZmluZSBzYl9kcXVvdF9vcHMgKCZkcXVvdF9vcGVyYXRpb25zKQogI2RlZmluZSBzYl9xdW90YWN0bF9vcHMgKCZ2ZnNfcXVvdGFjdGxfb3BzKQogCi0vKiBJdCBpcyBiZXR0ZXIgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIG91dHNpZGUgb2YgYW55IHRyYW5zYWN0aW9uIGFzIGl0IG1pZ2h0Ci0gKiBuZWVkIGEgbG90IG9mIHNwYWNlIGluIGpvdXJuYWwgZm9yIGRxdW90IHN0cnVjdHVyZSBhbGxvY2F0aW9uLiAqLwotc3RhdGljIGlubGluZSB2b2lkIHZmc19kcV9pbml0KHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JQlVHX09OKCFpbm9kZS0+aV9zYik7Ci0JaWYgKHNiX2FueV9xdW90YV9hY3RpdmUoaW5vZGUtPmlfc2IpICYmICFJU19OT1FVT1RBKGlub2RlKSkKLQkJaW5vZGUtPmlfc2ItPmRxX29wLT5pbml0aWFsaXplKGlub2RlLCAtMSk7Ci19Ci0KLS8qIFRoZSBmb2xsb3dpbmcgYWxsb2NhdGlvbi9mcmVlaW5nL3RyYW5zZmVyIGZ1bmN0aW9ucyAqbXVzdCogYmUgY2FsbGVkIGluc2lkZQotICogYSB0cmFuc2FjdGlvbiAoZGVhZGxvY2tzIHBvc3NpYmxlIG90aGVyd2lzZSkgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHZmc19kcV9wcmVhbGxvY19zcGFjZV9ub2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCi17Ci0JaWYgKHNiX2FueV9xdW90YV9hY3RpdmUoaW5vZGUtPmlfc2IpKSB7Ci0JCS8qIFVzZWQgc3BhY2UgaXMgdXBkYXRlZCBpbiBhbGxvY19zcGFjZSgpICovCi0JCWlmIChpbm9kZS0+aV9zYi0+ZHFfb3AtPmFsbG9jX3NwYWNlKGlub2RlLCBuciwgMSkgPT0gTk9fUVVPVEEpCi0JCQlyZXR1cm4gMTsKLQl9Ci0JZWxzZQotCQlpbm9kZV9hZGRfYnl0ZXMoaW5vZGUsIG5yKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdmZzX2RxX3ByZWFsbG9jX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCi17Ci0JaW50IHJldDsKLSAgICAgICAgaWYgKCEocmV0ID0gIHZmc19kcV9wcmVhbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLCBucikpKQotCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgaW5saW5lIGludCB2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQotewotCWlmIChzYl9hbnlfcXVvdGFfYWN0aXZlKGlub2RlLT5pX3NiKSkgewotCQkvKiBVc2VkIHNwYWNlIGlzIHVwZGF0ZWQgaW4gYWxsb2Nfc3BhY2UoKSAqLwotCQlpZiAoaW5vZGUtPmlfc2ItPmRxX29wLT5hbGxvY19zcGFjZShpbm9kZSwgbnIsIDApID09IE5PX1FVT1RBKQotCQkJcmV0dXJuIDE7Ci0JfQotCWVsc2UKLQkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBucik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHZmc19kcV9hbGxvY19zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQotewotCWludCByZXQ7Ci0JaWYgKCEocmV0ID0gdmZzX2RxX2FsbG9jX3NwYWNlX25vZGlydHkoaW5vZGUsIG5yKSkpCi0JCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHZmc19kcV9yZXNlcnZlX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCi17Ci0JaWYgKHNiX2FueV9xdW90YV9hY3RpdmUoaW5vZGUtPmlfc2IpKSB7Ci0JCS8qIFVzZWQgc3BhY2UgaXMgdXBkYXRlZCBpbiBhbGxvY19zcGFjZSgpICovCi0JCWlmIChpbm9kZS0+aV9zYi0+ZHFfb3AtPnJlc2VydmVfc3BhY2UoaW5vZGUsIG5yLCAwKSA9PSBOT19RVU9UQSkKLQkJCXJldHVybiAxOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdmZzX2RxX2FsbG9jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JaWYgKHNiX2FueV9xdW90YV9hY3RpdmUoaW5vZGUtPmlfc2IpKSB7Ci0JCXZmc19kcV9pbml0KGlub2RlKTsKLQkJaWYgKGlub2RlLT5pX3NiLT5kcV9vcC0+YWxsb2NfaW5vZGUoaW5vZGUsIDEpID09IE5PX1FVT1RBKQotCQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICogQ29udmVydCBpbi1tZW1vcnkgcmVzZXJ2ZWQgcXVvdGFzIHRvIHJlYWwgY29uc3VtZWQgcXVvdGFzCi0gKi8KLXN0YXRpYyBpbmxpbmUgaW50IHZmc19kcV9jbGFpbV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQotewotCWlmIChzYl9hbnlfcXVvdGFfYWN0aXZlKGlub2RlLT5pX3NiKSkgewotCQlpZiAoaW5vZGUtPmlfc2ItPmRxX29wLT5jbGFpbV9zcGFjZShpbm9kZSwgbnIpID09IE5PX1FVT1RBKQotCQkJcmV0dXJuIDE7Ci0JfSBlbHNlCi0JCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnIpOwotCi0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBSZWxlYXNlIHJlc2VydmVkIChpbi1tZW1vcnkpIHF1b3RhcwotICovCi1zdGF0aWMgaW5saW5lCi12b2lkIHZmc19kcV9yZWxlYXNlX3Jlc2VydmF0aW9uX3NwYWNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCi17Ci0JaWYgKHNiX2FueV9xdW90YV9hY3RpdmUoaW5vZGUtPmlfc2IpKQotCQlpbm9kZS0+aV9zYi0+ZHFfb3AtPnJlbGVhc2VfcnN2KGlub2RlLCBucik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCi17Ci0JaWYgKHNiX2FueV9xdW90YV9hY3RpdmUoaW5vZGUtPmlfc2IpKQotCQlpbm9kZS0+aV9zYi0+ZHFfb3AtPmZyZWVfc3BhY2UoaW5vZGUsIG5yKTsKLQllbHNlCi0JCWlub2RlX3N1Yl9ieXRlcyhpbm9kZSwgbnIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdmZzX2RxX2ZyZWVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKLXsKLQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBucik7Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB2ZnNfZHFfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWlmIChzYl9hbnlfcXVvdGFfYWN0aXZlKGlub2RlLT5pX3NiKSkKLQkJaW5vZGUtPmlfc2ItPmRxX29wLT5mcmVlX2lub2RlKGlub2RlLCAxKTsKLX0KLQogLyogQ2Fubm90IGJlIGNhbGxlZCBpbnNpZGUgYSB0cmFuc2FjdGlvbiAqLwogc3RhdGljIGlubGluZSBpbnQgdmZzX2RxX29mZihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgcmVtb3VudCkKIHsKQEAgLTMxNiwyOCArMTk4LDIwIEBACiAjZGVmaW5lIHNiX2RxdW90X29wcwkJCQkoTlVMTCkKICNkZWZpbmUgc2JfcXVvdGFjdGxfb3BzCQkJCShOVUxMKQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdmZzX2RxX2luaXQoc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcXVvdF9pbml0aWFsaXplKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB2ZnNfZHFfZHJvcChzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIGlubGluZSB2b2lkIGRxdW90X2Ryb3Aoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdmZzX2RxX2FsbG9jX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCitzdGF0aWMgaW5saW5lIGludCBkcXVvdF9hbGxvY19pbm9kZShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdmZzX2RxX2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKLXsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHN5bmNfcXVvdGFfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHR5cGUpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCB3cml0ZW91dF9xdW90YV9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgdHlwZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcXVvdF9mcmVlX2lub2RlKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiB9CiAKQEAgLTM1MSwxMTAgKzIyNSwxMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdmZzX2RxX3RyYW5zZmVyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpYXR0ciAqaWF0dHIpCitzdGF0aWMgaW5saW5lIGludCBkcXVvdF90cmFuc2ZlcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKQogewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB2ZnNfZHFfcHJlYWxsb2Nfc3BhY2Vfbm9kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQorc3RhdGljIGlubGluZSBpbnQgX19kcXVvdF9hbGxvY19zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG51bWJlciwKKwkJaW50IHdhcm4sIGludCByZXNlcnZlKQogewotCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnIpOworCWlmICghcmVzZXJ2ZSkKKwkJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB2ZnNfZHFfcHJlYWxsb2Nfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2RxdW90X2ZyZWVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIsCisJCWludCByZXNlcnZlKQogewotCXZmc19kcV9wcmVhbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLCBucik7Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CisJaWYgKCFyZXNlcnZlKQorCQlpbm9kZV9zdWJfYnl0ZXMoaW5vZGUsIG51bWJlcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGRxdW90X2NsYWltX3NwYWNlX25vZGlydHkoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBudW1iZXIpCit7CisJaW5vZGVfYWRkX2J5dGVzKGlub2RlLCBudW1iZXIpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQotewotCWlub2RlX2FkZF9ieXRlcyhpbm9kZSwgbnIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB2ZnNfZHFfYWxsb2Nfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKLXsKLQl2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgbnIpOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB2ZnNfZHFfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB2ZnNfZHFfY2xhaW1fc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKLXsKLQlyZXR1cm4gdmZzX2RxX2FsbG9jX3NwYWNlKGlub2RlLCBucik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUKLWludCB2ZnNfZHFfcmVsZWFzZV9yZXNlcnZhdGlvbl9zcGFjZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQotewotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQotewotCWlub2RlX3N1Yl9ieXRlcyhpbm9kZSwgbnIpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdmZzX2RxX2ZyZWVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKLXsKLQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBucik7Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci19CQorI2RlZmluZSBkcXVvdF9maWxlX29wZW4JCWdlbmVyaWNfZmlsZV9vcGVuCiAKICNlbmRpZiAvKiBDT05GSUdfUVVPVEEgKi8KIAotc3RhdGljIGlubGluZSBpbnQgdmZzX2RxX3ByZWFsbG9jX2Jsb2NrX25vZGlydHkoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKK3N0YXRpYyBpbmxpbmUgaW50IGRxdW90X2FsbG9jX3NwYWNlX25vZGlydHkoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKIHsKLQlyZXR1cm4gdmZzX2RxX3ByZWFsbG9jX3NwYWNlX25vZGlydHkoaW5vZGUsIG5yIDw8IGlub2RlLT5pX2Jsa2JpdHMpOworCXJldHVybiBfX2RxdW90X2FsbG9jX3NwYWNlKGlub2RlLCBuciwgMSwgMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHZmc19kcV9wcmVhbGxvY19ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQorc3RhdGljIGlubGluZSBpbnQgZHF1b3RfYWxsb2Nfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKIHsKLQlyZXR1cm4gdmZzX2RxX3ByZWFsbG9jX3NwYWNlKGlub2RlLCBuciA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHF1b3RfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgbnIpOworCWlmICghcmV0KQorCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIGludCB2ZnNfZHFfYWxsb2NfYmxvY2tfbm9kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQorc3RhdGljIGlubGluZSBpbnQgZHF1b3RfYWxsb2NfYmxvY2tfbm9kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQogewotCXJldHVybiB2ZnNfZHFfYWxsb2Nfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfYmxrYml0cyk7CisJcmV0dXJuIGRxdW90X2FsbG9jX3NwYWNlX25vZGlydHkoaW5vZGUsIG5yIDw8IGlub2RlLT5pX2Jsa2JpdHMpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCB2ZnNfZHFfYWxsb2NfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKK3N0YXRpYyBpbmxpbmUgaW50IGRxdW90X2FsbG9jX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCiB7Ci0JcmV0dXJuIHZmc19kcV9hbGxvY19zcGFjZShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfYmxrYml0cyk7CisJcmV0dXJuIGRxdW90X2FsbG9jX3NwYWNlKGlub2RlLCBuciA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdmZzX2RxX3Jlc2VydmVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKK3N0YXRpYyBpbmxpbmUgaW50IGRxdW90X3ByZWFsbG9jX2Jsb2NrX25vZGlydHkoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKIHsKLQlyZXR1cm4gdmZzX2RxX3Jlc2VydmVfc3BhY2UoaW5vZGUsIG5yIDw8IGlub2RlLT5pX2Jsa2JpdHMpOworCXJldHVybiBfX2RxdW90X2FsbG9jX3NwYWNlKGlub2RlLCBuciA8PCBpbm9kZS0+aV9ibGtiaXRzLCAwLCAwKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdmZzX2RxX2NsYWltX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCitzdGF0aWMgaW5saW5lIGludCBkcXVvdF9wcmVhbGxvY19ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQogewotCXJldHVybiB2ZnNfZHFfY2xhaW1fc3BhY2UoaW5vZGUsIG5yIDw8IGlub2RlLT5pX2Jsa2JpdHMpOworCWludCByZXQ7CisKKwlyZXQgPSBkcXVvdF9wcmVhbGxvY19ibG9ja19ub2RpcnR5KGlub2RlLCBucik7CisJaWYgKCFyZXQpCisJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUKLXZvaWQgdmZzX2RxX3JlbGVhc2VfcmVzZXJ2YXRpb25fYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKK3N0YXRpYyBpbmxpbmUgaW50IGRxdW90X3Jlc2VydmVfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKIHsKLQl2ZnNfZHFfcmVsZWFzZV9yZXNlcnZhdGlvbl9zcGFjZShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfYmxrYml0cyk7CisJcmV0dXJuIF9fZHF1b3RfYWxsb2Nfc3BhY2UoaW5vZGUsIG5yIDw8IGlub2RlLT5pX2Jsa2JpdHMsIDEsIDEpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdmZzX2RxX2ZyZWVfYmxvY2tfbm9kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQorc3RhdGljIGlubGluZSBpbnQgZHF1b3RfY2xhaW1fYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKIHsKLQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBuciA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKKwlpbnQgcmV0OworCisJcmV0ID0gZHF1b3RfY2xhaW1fc3BhY2Vfbm9kaXJ0eShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfYmxrYml0cyk7CisJaWYgKCFyZXQpCisJCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB2ZnNfZHFfZnJlZV9ibG9jayhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQorc3RhdGljIGlubGluZSB2b2lkIGRxdW90X2ZyZWVfc3BhY2Vfbm9kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQogewotCXZmc19kcV9mcmVlX3NwYWNlKGlub2RlLCBuciA8PCBpbm9kZS0+aV9ibGtiaXRzKTsKKwlfX2RxdW90X2ZyZWVfc3BhY2UoaW5vZGUsIG5yLCAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRxdW90X2ZyZWVfc3BhY2Uoc3RydWN0IGlub2RlICppbm9kZSwgcXNpemVfdCBucikKK3sKKwlkcXVvdF9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsIG5yKTsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRxdW90X2ZyZWVfYmxvY2tfbm9kaXJ0eShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBxc2l6ZV90IG5yKQoreworCWRxdW90X2ZyZWVfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfYmxrYml0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcXVvdF9mcmVlX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHFzaXplX3QgbnIpCit7CisJZHF1b3RfZnJlZV9zcGFjZShpbm9kZSwgbnIgPDwgaW5vZGUtPmlfYmxrYml0cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcXVvdF9yZWxlYXNlX3Jlc2VydmF0aW9uX2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCXFzaXplX3QgbnIpCit7CisJX19kcXVvdF9mcmVlX3NwYWNlKGlub2RlLCBuciA8PCBpbm9kZS0+aV9ibGtiaXRzLCAxKTsKIH0KIAogI2VuZGlmIC8qIF9MSU5VWF9RVU9UQU9QU18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmFuZ2UuaCBiL2luY2x1ZGUvbGludXgvcmFuZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDE4NGE1Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yYW5nZS5oCkBAIC0wLDAgKzEsMzAgQEAKKyNpZm5kZWYgX0xJTlVYX1JBTkdFX0gKKyNkZWZpbmUgX0xJTlVYX1JBTkdFX0gKKworc3RydWN0IHJhbmdlIHsKKwl1NjQgICBzdGFydDsKKwl1NjQgICBlbmQ7Cit9OworCitpbnQgYWRkX3JhbmdlKHN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCBheiwgaW50IG5yX3JhbmdlLAorCQl1NjQgc3RhcnQsIHU2NCBlbmQpOworCisKK2ludCBhZGRfcmFuZ2Vfd2l0aF9tZXJnZShzdHJ1Y3QgcmFuZ2UgKnJhbmdlLCBpbnQgYXosIGludCBucl9yYW5nZSwKKwkJCQl1NjQgc3RhcnQsIHU2NCBlbmQpOworCit2b2lkIHN1YnRyYWN0X3JhbmdlKHN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCBheiwgdTY0IHN0YXJ0LCB1NjQgZW5kKTsKKworaW50IGNsZWFuX3NvcnRfcmFuZ2Uoc3RydWN0IHJhbmdlICpyYW5nZSwgaW50IGF6KTsKKwordm9pZCBzb3J0X3JhbmdlKHN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSk7CisKKyNkZWZpbmUgTUFYX1JFU09VUkNFICgocmVzb3VyY2Vfc2l6ZV90KX4wKQorc3RhdGljIGlubGluZSByZXNvdXJjZV9zaXplX3QgY2FwX3Jlc291cmNlKHU2NCB2YWwpCit7CisJaWYgKHZhbCA+IE1BWF9SRVNPVVJDRSkKKwkJcmV0dXJuIE1BWF9SRVNPVVJDRTsKKworCXJldHVybiB2YWw7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmJ0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3JidHJlZS5oCmluZGV4IDljMjk1NDEuLjUyMTBhNWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmJ0cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYnRyZWUuaApAQCAtMjUsMTAgKzI1LDEwIEBACiAKICAgU29tZSBleGFtcGxlIG9mIGluc2VydCBhbmQgc2VhcmNoIGZvbGxvd3MgaGVyZS4gVGhlIHNlYXJjaCBpcyBhIHBsYWluCiAgIG5vcm1hbCBzZWFyY2ggb3ZlciBhbiBvcmRlcmVkIHRyZWUuIFRoZSBpbnNlcnQgaW5zdGVhZCBtdXN0IGJlIGltcGxlbWVudGVkCi0gIGludCB0d28gc3RlcHM6IGFzIGZpcnN0IHRoaW5nIHRoZSBjb2RlIG11c3QgaW5zZXJ0IHRoZSBlbGVtZW50IGluCi0gIG9yZGVyIGFzIGEgcmVkIGxlYWYgaW4gdGhlIHRyZWUsIHRoZW4gdGhlIHN1cHBvcnQgbGlicmFyeSBmdW5jdGlvbgotICByYl9pbnNlcnRfY29sb3IoKSBtdXN0IGJlIGNhbGxlZC4gU3VjaCBmdW5jdGlvbiB3aWxsIGRvIHRoZQotICBub3QgdHJpdmlhbCB3b3JrIHRvIHJlYmFsYW5jZSB0aGUgcmJ0cmVlIGlmIG5lY2Vzc2FyeS4KKyAgaW4gdHdvIHN0ZXBzOiBGaXJzdCwgdGhlIGNvZGUgbXVzdCBpbnNlcnQgdGhlIGVsZW1lbnQgaW4gb3JkZXIgYXMgYSByZWQgbGVhZgorICBpbiB0aGUgdHJlZSwgYW5kIHRoZW4gdGhlIHN1cHBvcnQgbGlicmFyeSBmdW5jdGlvbiByYl9pbnNlcnRfY29sb3IoKSBtdXN0CisgIGJlIGNhbGxlZC4gU3VjaCBmdW5jdGlvbiB3aWxsIGRvIHRoZSBub3QgdHJpdmlhbCB3b3JrIHRvIHJlYmFsYW5jZSB0aGUKKyAgcmJ0cmVlLCBpZiBuZWNlc3NhcnkuCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICogcmJfc2VhcmNoX3BhZ2VfY2FjaGUoc3RydWN0IGlub2RlICogaW5vZGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdWxpc3QuaCBiL2luY2x1ZGUvbGludXgvcmN1bGlzdC5oCmluZGV4IDc3OWQ3MDcuLjJjOWI0NmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmN1bGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1bGlzdC5oCkBAIC00MDYsNiArNDA2LDExIEBACiAJCW4tPm5leHQtPnBwcmV2ID0gJm4tPm5leHQ7CiB9CiAKKyNkZWZpbmUgX19obGlzdF9mb3JfZWFjaF9yY3UocG9zLCBoZWFkKQkJCVwKKwlmb3IgKHBvcyA9IHJjdV9kZXJlZmVyZW5jZSgoaGVhZCktPmZpcnN0KTsJXAorCSAgICAgcG9zICYmICh7IHByZWZldGNoKHBvcy0+bmV4dCk7IDE7IH0pOwlcCisJICAgICBwb3MgPSByY3VfZGVyZWZlcmVuY2UocG9zLT5uZXh0KSkKKwogLyoqCiAgKiBobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UgLSBpdGVyYXRlIG92ZXIgcmN1IGxpc3Qgb2YgZ2l2ZW4gdHlwZQogICogQHRwb3M6CXRoZSB0eXBlICogdG8gdXNlIGFzIGEgbG9vcCBjdXJzb3IuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmggYi9pbmNsdWRlL2xpbnV4L3JjdXBkYXRlLmgKaW5kZXggYzg0MzczNi4uYTAwNWNhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yY3VwZGF0ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmN1cGRhdGUuaApAQCAtNDEsNiArNDEsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogCisjaWZkZWYgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QKK2V4dGVybiBpbnQgcmN1dG9ydHVyZV9ydW5uYWJsZTsgLyogZm9yIHN5c2N0bCAqLworI2VuZGlmIC8qICNpZmRlZiBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCAqLworCiAvKioKICAqIHN0cnVjdCByY3VfaGVhZCAtIGNhbGxiYWNrIHN0cnVjdHVyZSBmb3IgdXNlIHdpdGggUkNVCiAgKiBAbmV4dDogbmV4dCB1cGRhdGUgcmVxdWVzdHMgaW4gYSBsaXN0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlYm9vdC5oIGIvaW5jbHVkZS9saW51eC9yZWJvb3QuaAppbmRleCA5ODhlNTVmLi4zMDA1ZDVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlYm9vdC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVib290LmgKQEAgLTY0LDYgKzY0LDcgQEAKIGV4dGVybiB2b2lkIGtlcm5lbF9oYWx0KHZvaWQpOwogZXh0ZXJuIHZvaWQga2VybmVsX3Bvd2VyX29mZih2b2lkKTsKIAorZXh0ZXJuIGludCBDX0FfRDsgLyogZm9yIHN5c2N0bCAqLwogdm9pZCBjdHJsX2FsdF9kZWwodm9pZCk7CiAKICNkZWZpbmUgUE9XRVJPRkZfQ01EX1BBVEhfTEVOCTI1NgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaCBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2NvbnN1bWVyLmgKaW5kZXggMDMwZDkyMi4uMjhjOWZkMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvY29uc3VtZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9jb25zdW1lci5oCkBAIC04OSw4ICs4OSw5IEBACiAgKiBSRUdVTEFUSU9OX09VVCBSZWd1bGF0b3Igb3V0cHV0IGlzIG91dCBvZiByZWd1bGF0aW9uLgogICogRkFJTCAgICAgICAgICAgUmVndWxhdG9yIG91dHB1dCBoYXMgZmFpbGVkLgogICogT1ZFUl9URU1QICAgICAgUmVndWxhdG9yIG92ZXIgdGVtcC4KLSAqIEZPUkNFX0RJU0FCTEUgIFJlZ3VsYXRvciBzaHV0IGRvd24gYnkgc29mdHdhcmUuCisgKiBGT1JDRV9ESVNBQkxFICBSZWd1bGF0b3IgZm9yY2libHkgc2h1dCBkb3duIGJ5IHNvZnR3YXJlLgogICogVk9MVEFHRV9DSEFOR0UgUmVndWxhdG9yIHZvbHRhZ2UgY2hhbmdlZC4KKyAqIERJU0FCTEUgICAgICAgIFJlZ3VsYXRvciB3YXMgZGlzYWJsZWQuCiAgKgogICogTk9URTogVGhlc2UgZXZlbnRzIGNhbiBiZSBPUidlZCB0b2dldGhlciB3aGVuIHBhc3NlZCBpbnRvIGhhbmRsZXIuCiAgKi8KQEAgLTEwMiw2ICsxMDMsNyBAQAogI2RlZmluZSBSRUdVTEFUT1JfRVZFTlRfT1ZFUl9URU1QCQkweDEwCiAjZGVmaW5lIFJFR1VMQVRPUl9FVkVOVF9GT1JDRV9ESVNBQkxFCQkweDIwCiAjZGVmaW5lIFJFR1VMQVRPUl9FVkVOVF9WT0xUQUdFX0NIQU5HRQkJMHg0MAorI2RlZmluZSBSRUdVTEFUT1JfRVZFTlRfRElTQUJMRSAJCTB4ODAKIAogc3RydWN0IHJlZ3VsYXRvcjsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZHJpdmVyLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaAppbmRleCAzMWYyMDU1Li41OTJjZDdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9kcml2ZXIuaApAQCAtNTgsNiArNTgsOSBAQAogICogQGdldF9vcHRpbXVtX21vZGU6IEdldCB0aGUgbW9zdCBlZmZpY2llbnQgb3BlcmF0aW5nIG1vZGUgZm9yIHRoZSByZWd1bGF0b3IKICAqICAgICAgICAgICAgICAgICAgICB3aGVuIHJ1bm5pbmcgd2l0aCB0aGUgc3BlY2lmaWVkIHBhcmFtZXRlcnMuCiAgKgorICogQGVuYWJsZV90aW1lOiBUaW1lIHRha2VuIGZvciB0aGUgcmVndWxhdG9yIHZvbHRhZ2Ugb3V0cHV0IHZvbHRhZ2UgdG8KKyAqICAgICAgICAgICAgICAgc3RhYmFsaXNlIGFmdGVyIGJlaW5nIGVuYWJsZWQsIGluIG1pY3Jvc2Vjb25kcy4KKyAqCiAgKiBAc2V0X3N1c3BlbmRfdm9sdGFnZTogU2V0IHRoZSB2b2x0YWdlIGZvciB0aGUgcmVndWxhdG9yIHdoZW4gdGhlIHN5c3RlbQogICogICAgICAgICAgICAgICAgICAgICAgIGlzIHN1c3BlbmRlZC4KICAqIEBzZXRfc3VzcGVuZF9lbmFibGU6IE1hcmsgdGhlIHJlZ3VsYXRvciBhcyBlbmFibGVkIHdoZW4gdGhlIHN5c3RlbSBpcwpAQCAtOTMsNiArOTYsOSBAQAogCWludCAoKnNldF9tb2RlKSAoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKiwgdW5zaWduZWQgaW50IG1vZGUpOwogCXVuc2lnbmVkIGludCAoKmdldF9tb2RlKSAoc3RydWN0IHJlZ3VsYXRvcl9kZXYgKik7CiAKKwkvKiBUaW1lIHRha2VuIHRvIGVuYWJsZSB0aGUgcmVndWxhdG9yICovCisJaW50ICgqZW5hYmxlX3RpbWUpIChzdHJ1Y3QgcmVndWxhdG9yX2RldiAqKTsKKwogCS8qIHJlcG9ydCByZWd1bGF0b3Igc3RhdHVzIC4uLiBtb3N0IG90aGVyIGFjY2Vzc29ycyByZXBvcnQKIAkgKiBjb250cm9sIGlucHV0cywgdGhpcyByZXBvcnRzIHJlc3VsdHMgb2YgY29tYmluaW5nIGlucHV0cwogCSAqIGZyb20gTGludXggKGFuZCBvdGhlciBzb3VyY2VzKSB3aXRoIHRoZSBhY3R1YWwgbG9hZC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2ZpeGVkLmggYi9pbmNsdWRlL2xpbnV4L3JlZ3VsYXRvci9maXhlZC5oCmluZGV4IGU5NGE0YTEuLmZmZDdkNTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL2ZpeGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvZml4ZWQuaApAQCAtMjUsNiArMjUsNyBAQAogICogQG1pY3Jvdm9sdHM6CQlPdXRwdXQgdm9sdGFnZSBvZiByZWd1bGF0b3IKICAqIEBncGlvOgkJR1BJTyB0byB1c2UgZm9yIGVuYWJsZSBjb250cm9sCiAgKiAJCQlzZXQgdG8gLUVJTlZBTCBpZiBub3QgdXNlZAorICogQHN0YXJ0dXBfZGVsYXk6CVN0YXJ0LXVwIHRpbWUgaW4gbWljcm9zZWNvbmRzCiAgKiBAZW5hYmxlX2hpZ2g6CVBvbGFyaXR5IG9mIGVuYWJsZSBHUElPCiAgKgkJCTEgPSBBY3RpdmUgaGlnaCwgMCA9IEFjdGl2ZSBsb3cKICAqIEBlbmFibGVkX2F0X2Jvb3Q6CVdoZXRoZXIgcmVndWxhdG9yIGhhcyBiZWVuIGVuYWJsZWQgYXQKQEAgLTQxLDYgKzQyLDcgQEAKIAljb25zdCBjaGFyICpzdXBwbHlfbmFtZTsKIAlpbnQgbWljcm92b2x0czsKIAlpbnQgZ3BpbzsKKwl1bnNpZ25lZCBzdGFydHVwX2RlbGF5OwogCXVuc2lnbmVkIGVuYWJsZV9oaWdoOjE7CiAJdW5zaWduZWQgZW5hYmxlZF9hdF9ib290OjE7CiAJc3RydWN0IHJlZ3VsYXRvcl9pbml0X2RhdGEgKmluaXRfZGF0YTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL21heDg2NDkuaCBiL2luY2x1ZGUvbGludXgvcmVndWxhdG9yL21heDg2NDkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTdkMTRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9yZWd1bGF0b3IvbWF4ODY0OS5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBJbnRlcmZhY2Ugb2YgTWF4aW0gbWF4ODY0OQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuCisgKiAgICAgIEhhb2ppYW4gWmh1YW5nIDxoYW9qaWFuLnpodWFuZ0BtYXJ2ZWxsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19MSU5VWF9SRUdVTEFUT1JfTUFYODY0OV9ICisjZGVmaW5lCV9fTElOVVhfUkVHVUxBVE9SX01BWDg2NDlfSAorCisjaW5jbHVkZSA8bGludXgvcmVndWxhdG9yL21hY2hpbmUuaD4KKworZW51bSB7CisJTUFYODY0OV9FWFRDTEtfMjZNSFogPSAwLAorCU1BWDg2NDlfRVhUQ0xLXzEzTUhaLAorCU1BWDg2NDlfRVhUQ0xLXzE5TUhaLAkvKiAxOS4yTUh6ICovCit9OworCitlbnVtIHsKKwlNQVg4NjQ5X1JBTVBfMzJNViA9IDAsCisJTUFYODY0OV9SQU1QXzE2TVYsCisJTUFYODY0OV9SQU1QXzhNViwKKwlNQVg4NjQ5X1JBTVBfNE1WLAorCU1BWDg2NDlfUkFNUF8yTVYsCisJTUFYODY0OV9SQU1QXzFNViwKKwlNQVg4NjQ5X1JBTVBfMF81TVYsCisJTUFYODY0OV9SQU1QXzBfMjVNViwKK307CisKK3N0cnVjdCBtYXg4NjQ5X3BsYXRmb3JtX2RhdGEgeworCXN0cnVjdCByZWd1bGF0b3JfaW5pdF9kYXRhICpyZWd1bGF0b3I7CisKKwl1bnNpZ25lZAltb2RlOjI7CQkvKiBiaXRbMTowXSA9IFZJRDEsVklEMCAqLworCXVuc2lnbmVkCWV4dGNsa19mcmVxOjI7CisJdW5zaWduZWQJZXh0Y2xrOjE7CisJdW5zaWduZWQJcmFtcF90aW1pbmc6MzsKKwl1bnNpZ25lZAlyYW1wX2Rvd246MTsKK307CisKKyNlbmRpZgkvKiBfX0xJTlVYX1JFR1VMQVRPUl9NQVg4NjQ5X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAppbmRleCAxYmEzY2Y2Li4zYjYwM2Y0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCkBAIC0yMDM0LDcgKzIwMzQsNyBAQAogaW50IHJlaXNlcmZzX2ZpbmRfYWN0b3Ioc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqcCk7CiBpbnQgcmVpc2VyZnNfaW5pdF9sb2NrZWRfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSwgdm9pZCAqcCk7CiB2b2lkIHJlaXNlcmZzX2RlbGV0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLWludCByZWlzZXJmc193cml0ZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQpOworaW50IHJlaXNlcmZzX3dyaXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKIGludCByZWlzZXJmc19nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssCiAJCSAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSk7CiBzdHJ1Y3QgZGVudHJ5ICpyZWlzZXJmc19maF90b19kZW50cnkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZpZCAqZmlkLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ybWFwLmggYi9pbmNsdWRlL2xpbnV4L3JtYXAuaAppbmRleCBiMDE5YWU2Li5kMjViZDIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JtYXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JtYXAuaApAQCAtMzcsNyArMzcsMjcgQEAKIAkgKiBpcyBzZXJpYWxpemVkIGJ5IGEgc3lzdGVtIHdpZGUgbG9jayBvbmx5IHZpc2libGUgdG8KIAkgKiBtbV90YWtlX2FsbF9sb2NrcygpIChtbV9hbGxfbG9ja3NfbXV0ZXgpLgogCSAqLwotCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsJLyogTGlzdCBvZiBwcml2YXRlICJyZWxhdGVkIiB2bWFzICovCisJc3RydWN0IGxpc3RfaGVhZCBoZWFkOwkvKiBDaGFpbiBvZiBwcml2YXRlICJyZWxhdGVkIiB2bWFzICovCit9OworCisvKgorICogVGhlIGNvcHktb24td3JpdGUgc2VtYW50aWNzIG9mIGZvcmsgbWVhbiB0aGF0IGFuIGFub25fdm1hCisgKiBjYW4gYmVjb21lIGFzc29jaWF0ZWQgd2l0aCBtdWx0aXBsZSBwcm9jZXNzZXMuIEZ1cnRoZXJtb3JlLAorICogZWFjaCBjaGlsZCBwcm9jZXNzIHdpbGwgaGF2ZSBpdHMgb3duIGFub25fdm1hLCB3aGVyZSBuZXcKKyAqIHBhZ2VzIGZvciB0aGF0IHByb2Nlc3MgYXJlIGluc3RhbnRpYXRlZC4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBhbGxvd3MgdXMgdG8gZmluZCB0aGUgYW5vbl92bWFzIGFzc29jaWF0ZWQKKyAqIHdpdGggYSBWTUEsIG9yIHRoZSBWTUFzIGFzc29jaWF0ZWQgd2l0aCBhbiBhbm9uX3ZtYS4KKyAqIFRoZSAic2FtZV92bWEiIGxpc3QgY29udGFpbnMgdGhlIGFub25fdm1hX2NoYWlucyBsaW5raW5nCisgKiBhbGwgdGhlIGFub25fdm1hcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBWTUEuCisgKiBUaGUgInNhbWVfYW5vbl92bWEiIGxpc3QgY29udGFpbnMgdGhlIGFub25fdm1hX2NoYWlucworICogd2hpY2ggbGluayBhbGwgdGhlIFZNQXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYW5vbl92bWEuCisgKi8KK3N0cnVjdCBhbm9uX3ZtYV9jaGFpbiB7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNhbWVfdm1hOyAgIC8qIGxvY2tlZCBieSBtbWFwX3NlbSAmIHBhZ2VfdGFibGVfbG9jayAqLworCXN0cnVjdCBsaXN0X2hlYWQgc2FtZV9hbm9uX3ZtYTsJLyogbG9ja2VkIGJ5IGFub25fdm1hLT5sb2NrICovCiB9OwogCiAjaWZkZWYgQ09ORklHX01NVQpAQCAtODksMTUgKzEwOSwyMyBAQAogICovCiB2b2lkIGFub25fdm1hX2luaXQodm9pZCk7CS8qIGNyZWF0ZSBhbm9uX3ZtYV9jYWNoZXAgKi8KIGludCAgYW5vbl92bWFfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7Ci12b2lkIF9fYW5vbl92bWFfbWVyZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKLXZvaWQgYW5vbl92bWFfdW5saW5rKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKLXZvaWQgYW5vbl92bWFfbGluayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7Cit2b2lkIHVubGlua19hbm9uX3ZtYXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOworaW50IGFub25fdm1hX2Nsb25lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CitpbnQgYW5vbl92bWFfZm9yayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwogdm9pZCBfX2Fub25fdm1hX2xpbmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwogdm9pZCBhbm9uX3ZtYV9mcmVlKHN0cnVjdCBhbm9uX3ZtYSAqKTsKIAorc3RhdGljIGlubGluZSB2b2lkIGFub25fdm1hX21lcmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCSAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpuZXh0KQoreworCVZNX0JVR19PTih2bWEtPmFub25fdm1hICE9IG5leHQtPmFub25fdm1hKTsKKwl1bmxpbmtfYW5vbl92bWFzKG5leHQpOworfQorCiAvKgogICogcm1hcCBpbnRlcmZhY2VzIGNhbGxlZCB3aGVuIGFkZGluZyBvciByZW1vdmluZyBwdGUgb2YgcGFnZQogICovCit2b2lkIHBhZ2VfbW92ZV9hbm9uX3JtYXAoc3RydWN0IHBhZ2UgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpOwogdm9pZCBwYWdlX2FkZF9hbm9uX3JtYXAoc3RydWN0IHBhZ2UgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcpOwogdm9pZCBwYWdlX2FkZF9uZXdfYW5vbl9ybWFwKHN0cnVjdCBwYWdlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nKTsKIHZvaWQgcGFnZV9hZGRfZmlsZV9ybWFwKHN0cnVjdCBwYWdlICopOwpAQCAtMTgxLDcgKzIwOSw3IEBACiAJCQkJICB1bnNpZ25lZCBsb25nICp2bV9mbGFncykKIHsKIAkqdm1fZmxhZ3MgPSAwOwotCXJldHVybiBUZXN0Q2xlYXJQYWdlUmVmZXJlbmNlZChwYWdlKTsKKwlyZXR1cm4gMDsKIH0KIAogI2RlZmluZSB0cnlfdG9fdW5tYXAocGFnZSwgcmVmcykgU1dBUF9GQUlMCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0Yy5oIGIvaW5jbHVkZS9saW51eC9ydGMuaAppbmRleCA2MGY4OGE3Li4xNGRiYzgzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRjLmgKQEAgLTIzOCw2ICsyMzgsMTIgQEAKIAlyZXR1cm4gKCEoeWVhciAlIDQpICYmICh5ZWFyICUgMTAwKSkgfHwgISh5ZWFyICUgNDAwKTsKIH0KIAorI2lmZGVmIENPTkZJR19SVENfSENUT1NZUworZXh0ZXJuIGludCBydGNfaGN0b3N5c19yZXQ7CisjZWxzZQorI2RlZmluZSBydGNfaGN0b3N5c19yZXQgLUVOT0RFVgorI2VuZGlmCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKICNlbmRpZiAvKiBfTElOVVhfUlRDX0hfICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0bXV0ZXguaCBiL2luY2x1ZGUvbGludXgvcnRtdXRleC5oCmluZGV4IDI4MWQ4ZmQuLjhkNTIyZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRtdXRleC5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRtdXRleC5oCkBAIC0xNiw2ICsxNiw4IEBACiAjaW5jbHVkZSA8bGludXgvcGxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgogCitleHRlcm4gaW50IG1heF9sb2NrX2RlcHRoOyAvKiBmb3Igc3lzY3RsICovCisKIC8qKgogICogVGhlIHJ0X211dGV4IHN0cnVjdHVyZQogICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCmluZGV4IDVjNTJmYTQuLmQxYzdjOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaApAQCAtMzYyLDYgKzM2Miw4IEBACiAjZGVmaW5lIFJUQVhfRkVBVFVSRVMgUlRBWF9GRUFUVVJFUwogCVJUQVhfUlRPX01JTiwKICNkZWZpbmUgUlRBWF9SVE9fTUlOIFJUQVhfUlRPX01JTgorCVJUQVhfSU5JVFJXTkQsCisjZGVmaW5lIFJUQVhfSU5JVFJXTkQgUlRBWF9JTklUUldORAogCV9fUlRBWF9NQVgKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCA0YjE3NTNmLi44ZDcwZmY4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0zOTYsNjAgKzM5Niw2IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9waWNrX21tYXBfbGF5b3V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKSB7fQogI2VuZGlmCiAKLSNpZiBVU0VfU1BMSVRfUFRMT0NLUwotLyoKLSAqIFRoZSBtbSBjb3VudGVycyBhcmUgbm90IHByb3RlY3RlZCBieSBpdHMgcGFnZV90YWJsZV9sb2NrLAotICogc28gbXVzdCBiZSBpbmNyZW1lbnRlZCBhdG9taWNhbGx5LgotICovCi0jZGVmaW5lIHNldF9tbV9jb3VudGVyKG1tLCBtZW1iZXIsIHZhbHVlKSBhdG9taWNfbG9uZ19zZXQoJihtbSktPl8jI21lbWJlciwgdmFsdWUpCi0jZGVmaW5lIGdldF9tbV9jb3VudGVyKG1tLCBtZW1iZXIpICgodW5zaWduZWQgbG9uZylhdG9taWNfbG9uZ19yZWFkKCYobW0pLT5fIyNtZW1iZXIpKQotI2RlZmluZSBhZGRfbW1fY291bnRlcihtbSwgbWVtYmVyLCB2YWx1ZSkgYXRvbWljX2xvbmdfYWRkKHZhbHVlLCAmKG1tKS0+XyMjbWVtYmVyKQotI2RlZmluZSBpbmNfbW1fY291bnRlcihtbSwgbWVtYmVyKSBhdG9taWNfbG9uZ19pbmMoJihtbSktPl8jI21lbWJlcikKLSNkZWZpbmUgZGVjX21tX2NvdW50ZXIobW0sIG1lbWJlcikgYXRvbWljX2xvbmdfZGVjKCYobW0pLT5fIyNtZW1iZXIpCi0KLSNlbHNlICAvKiAhVVNFX1NQTElUX1BUTE9DS1MgKi8KLS8qCi0gKiBUaGUgbW0gY291bnRlcnMgYXJlIHByb3RlY3RlZCBieSBpdHMgcGFnZV90YWJsZV9sb2NrLAotICogc28gY2FuIGJlIGluY3JlbWVudGVkIGRpcmVjdGx5LgotICovCi0jZGVmaW5lIHNldF9tbV9jb3VudGVyKG1tLCBtZW1iZXIsIHZhbHVlKSAobW0pLT5fIyNtZW1iZXIgPSAodmFsdWUpCi0jZGVmaW5lIGdldF9tbV9jb3VudGVyKG1tLCBtZW1iZXIpICgobW0pLT5fIyNtZW1iZXIpCi0jZGVmaW5lIGFkZF9tbV9jb3VudGVyKG1tLCBtZW1iZXIsIHZhbHVlKSAobW0pLT5fIyNtZW1iZXIgKz0gKHZhbHVlKQotI2RlZmluZSBpbmNfbW1fY291bnRlcihtbSwgbWVtYmVyKSAobW0pLT5fIyNtZW1iZXIrKwotI2RlZmluZSBkZWNfbW1fY291bnRlcihtbSwgbWVtYmVyKSAobW0pLT5fIyNtZW1iZXItLQotCi0jZW5kaWYgLyogIVVTRV9TUExJVF9QVExPQ0tTICovCi0KLSNkZWZpbmUgZ2V0X21tX3JzcyhtbSkJCQkJCVwKLQkoZ2V0X21tX2NvdW50ZXIobW0sIGZpbGVfcnNzKSArIGdldF9tbV9jb3VudGVyKG1tLCBhbm9uX3JzcykpCi0jZGVmaW5lIHVwZGF0ZV9oaXdhdGVyX3JzcyhtbSkJZG8gewkJCVwKLQl1bnNpZ25lZCBsb25nIF9yc3MgPSBnZXRfbW1fcnNzKG1tKTsJCVwKLQlpZiAoKG1tKS0+aGl3YXRlcl9yc3MgPCBfcnNzKQkJCVwKLQkJKG1tKS0+aGl3YXRlcl9yc3MgPSBfcnNzOwkJXAotfSB3aGlsZSAoMCkKLSNkZWZpbmUgdXBkYXRlX2hpd2F0ZXJfdm0obW0pCWRvIHsJCQlcCi0JaWYgKChtbSktPmhpd2F0ZXJfdm0gPCAobW0pLT50b3RhbF92bSkJCVwKLQkJKG1tKS0+aGl3YXRlcl92bSA9IChtbSktPnRvdGFsX3ZtOwlcCi19IHdoaWxlICgwKQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X21tX2hpd2F0ZXJfcnNzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCXJldHVybiBtYXgobW0tPmhpd2F0ZXJfcnNzLCBnZXRfbW1fcnNzKG1tKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRtYXhfbW1faGl3YXRlcl9yc3ModW5zaWduZWQgbG9uZyAqbWF4cnNzLAotCQkJCQkgc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JdW5zaWduZWQgbG9uZyBoaXdhdGVyX3JzcyA9IGdldF9tbV9oaXdhdGVyX3JzcyhtbSk7Ci0KLQlpZiAoKm1heHJzcyA8IGhpd2F0ZXJfcnNzKQotCQkqbWF4cnNzID0gaGl3YXRlcl9yc3M7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfbW1faGl3YXRlcl92bShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKLXsKLQlyZXR1cm4gbWF4KG1tLT5oaXdhdGVyX3ZtLCBtbS0+dG90YWxfdm0pOwotfQogCiBleHRlcm4gdm9pZCBzZXRfZHVtcGFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCB2YWx1ZSk7CiBleHRlcm4gaW50IGdldF9kdW1wYWJsZShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7CkBAIC0xMjc0LDcgKzEyMjAsOSBAQAogCXN0cnVjdCBwbGlzdF9ub2RlIHB1c2hhYmxlX3Rhc2tzOwogCiAJc3RydWN0IG1tX3N0cnVjdCAqbW0sICphY3RpdmVfbW07Ci0KKyNpZiBkZWZpbmVkKFNQTElUX1JTU19DT1VOVElORykKKwlzdHJ1Y3QgdGFza19yc3Nfc3RhdAlyc3Nfc3RhdDsKKyNlbmRpZgogLyogdGFzayBzdGF0ZSAqLwogCWludCBleGl0X3N0YXRlOwogCWludCBleGl0X2NvZGUsIGV4aXRfc2lnbmFsOwpAQCAtMTUyNSw3ICsxNDczLDcgQEAKIAogCXN0cnVjdCBsaXN0X2hlYWQJKnNjbV93b3JrX2xpc3Q7CiAjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgotCS8qIEluZGV4IG9mIGN1cnJlbnQgc3RvcmVkIGFkcmVzcyBpbiByZXRfc3RhY2sgKi8KKwkvKiBJbmRleCBvZiBjdXJyZW50IHN0b3JlZCBhZGRyZXNzIGluIHJldF9zdGFjayAqLwogCWludCBjdXJyX3JldF9zdGFjazsKIAkvKiBTdGFjayBvZiByZXR1cm4gYWRkcmVzc2VzIGZvciByZXR1cm4gZnVuY3Rpb24gdHJhY2luZyAqLwogCXN0cnVjdCBmdHJhY2VfcmV0X3N0YWNrCSpyZXRfc3RhY2s7CkBAIC0yNDQzLDkgKzIzOTEsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGhyZWFkX2dyb3VwX2NwdXRpbWVfaW5pdChzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKQogewotCXNpZy0+Y3B1dGltZXIuY3B1dGltZSA9IElOSVRfQ1BVVElNRTsKIAlzcGluX2xvY2tfaW5pdCgmc2lnLT5jcHV0aW1lci5sb2NrKTsKLQlzaWctPmNwdXRpbWVyLnJ1bm5pbmcgPSAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdGhyZWFkX2dyb3VwX2NwdXRpbWVfZnJlZShzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCmluZGV4IDJjNjI3ZDMuLjIzM2QyMGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKQEAgLTc2LDcgKzc2LDcgQEAKIGV4dGVybiBpbnQgY2FwX3Rhc2tfc2V0c2NoZWR1bGVyKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IHBvbGljeSwgc3RydWN0IHNjaGVkX3BhcmFtICpscCk7CiBleHRlcm4gaW50IGNhcF90YXNrX3NldGlvcHJpbyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBpb3ByaW8pOwogZXh0ZXJuIGludCBjYXBfdGFza19zZXRuaWNlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5pY2UpOwotZXh0ZXJuIGludCBjYXBfc3lzbG9nKGludCB0eXBlKTsKK2V4dGVybiBpbnQgY2FwX3N5c2xvZyhpbnQgdHlwZSwgYm9vbCBmcm9tX2ZpbGUpOwogZXh0ZXJuIGludCBjYXBfdm1fZW5vdWdoX21lbW9yeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgbG9uZyBwYWdlcyk7CiAKIHN0cnVjdCBtc2doZHI7CkBAIC05NSw2ICs5NSw4IEBACiBleHRlcm4gaW50IGNhcF9uZXRsaW5rX3NlbmQoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgY2FwX25ldGxpbmtfcmVjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgY2FwKTsKIAordm9pZCByZXNldF9zZWN1cml0eV9vcHModm9pZCk7CisKICNpZmRlZiBDT05GSUdfTU1VCiBleHRlcm4gdW5zaWduZWQgbG9uZyBtbWFwX21pbl9hZGRyOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZGFjX21tYXBfbWluX2FkZHI7CkBAIC05ODUsNiArOTg3LDcgQEAKICAqCUNoZWNrIHBlcm1pc3Npb25zIG9uIGluY29taW5nIG5ldHdvcmsgcGFja2V0cy4gIFRoaXMgaG9vayBpcyBkaXN0aW5jdAogICoJZnJvbSBOZXRmaWx0ZXIncyBJUCBpbnB1dCBob29rcyBzaW5jZSBpdCBpcyB0aGUgZmlyc3QgdGltZSB0aGF0IHRoZQogICoJaW5jb21pbmcgc2tfYnVmZiBAc2tiIGhhcyBiZWVuIGFzc29jaWF0ZWQgd2l0aCBhIHBhcnRpY3VsYXIgc29ja2V0LCBAc2suCisgKglNdXN0IG5vdCBzbGVlcCBpbnNpZGUgdGhpcyBob29rIGJlY2F1c2Ugc29tZSBjYWxsZXJzIGhvbGQgc3BpbmxvY2tzLgogICoJQHNrIGNvbnRhaW5zIHRoZSBzb2NrIChub3Qgc29ja2V0KSBhc3NvY2lhdGVkIHdpdGggdGhlIGluY29taW5nIHNrX2J1ZmYuCiAgKglAc2tiIGNvbnRhaW5zIHRoZSBpbmNvbWluZyBuZXR3b3JrIGRhdGEuCiAgKiBAc29ja2V0X2dldHBlZXJzZWNfc3RyZWFtOgpAQCAtMTM0OCw2ICsxMzUxLDcgQEAKICAqCWxvZ2dpbmcgdG8gdGhlIGNvbnNvbGUuCiAgKglTZWUgdGhlIHN5c2xvZygyKSBtYW51YWwgcGFnZSBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhlIEB0eXBlIHZhbHVlcy4KICAqCUB0eXBlIGNvbnRhaW5zIHRoZSB0eXBlIG9mIGFjdGlvbi4KKyAqCUBmcm9tX2ZpbGUgaW5kaWNhdGVzIHRoZSBjb250ZXh0IG9mIGFjdGlvbiAoaWYgaXQgY2FtZSBmcm9tIC9wcm9jKS4KICAqCVJldHVybiAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZC4KICAqIEBzZXR0aW1lOgogICoJQ2hlY2sgcGVybWlzc2lvbiB0byBjaGFuZ2UgdGhlIHN5c3RlbSB0aW1lLgpAQCAtMTQ2Miw3ICsxNDY2LDcgQEAKIAlpbnQgKCpzeXNjdGwpIChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IG9wKTsKIAlpbnQgKCpxdW90YWN0bCkgKGludCBjbWRzLCBpbnQgdHlwZSwgaW50IGlkLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIAlpbnQgKCpxdW90YV9vbikgKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Ci0JaW50ICgqc3lzbG9nKSAoaW50IHR5cGUpOworCWludCAoKnN5c2xvZykgKGludCB0eXBlLCBib29sIGZyb21fZmlsZSk7CiAJaW50ICgqc2V0dGltZSkgKHN0cnVjdCB0aW1lc3BlYyAqdHMsIHN0cnVjdCB0aW1lem9uZSAqdHopOwogCWludCAoKnZtX2Vub3VnaF9tZW1vcnkpIChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgbG9uZyBwYWdlcyk7CiAKQEAgLTE3NjEsNyArMTc2NSw3IEBACiBpbnQgc2VjdXJpdHlfc3lzY3RsKHN0cnVjdCBjdGxfdGFibGUgKnRhYmxlLCBpbnQgb3ApOwogaW50IHNlY3VyaXR5X3F1b3RhY3RsKGludCBjbWRzLCBpbnQgdHlwZSwgaW50IGlkLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIGludCBzZWN1cml0eV9xdW90YV9vbihzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpOwotaW50IHNlY3VyaXR5X3N5c2xvZyhpbnQgdHlwZSk7CitpbnQgc2VjdXJpdHlfc3lzbG9nKGludCB0eXBlLCBib29sIGZyb21fZmlsZSk7CiBpbnQgc2VjdXJpdHlfc2V0dGltZShzdHJ1Y3QgdGltZXNwZWMgKnRzLCBzdHJ1Y3QgdGltZXpvbmUgKnR6KTsKIGludCBzZWN1cml0eV92bV9lbm91Z2hfbWVtb3J5KGxvbmcgcGFnZXMpOwogaW50IHNlY3VyaXR5X3ZtX2Vub3VnaF9tZW1vcnlfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGxvbmcgcGFnZXMpOwpAQCAtMjAwNyw5ICsyMDExLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc3lzbG9nKGludCB0eXBlKQorc3RhdGljIGlubGluZSBpbnQgc2VjdXJpdHlfc3lzbG9nKGludCB0eXBlLCBib29sIGZyb21fZmlsZSkKIHsKLQlyZXR1cm4gY2FwX3N5c2xvZyh0eXBlKTsKKwlyZXR1cm4gY2FwX3N5c2xvZyh0eXBlLCBmcm9tX2ZpbGUpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9zZXR0aW1lKHN0cnVjdCB0aW1lc3BlYyAqdHMsIHN0cnVjdCB0aW1lem9uZSAqdHopCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcV9maWxlLmggYi9pbmNsdWRlL2xpbnV4L3NlcV9maWxlLmgKaW5kZXggODM2NmQ4Zi4uMDNjMDIzMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zZXFfZmlsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvc2VxX2ZpbGUuaApAQCAtMTM1LDQgKzEzNSwyMiBAQAogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgKnNlcV9saXN0X25leHQodm9pZCAqdiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwKIAkJbG9mZl90ICpwcG9zKTsKIAorLyoKKyAqIEhlbHBlcnMgZm9yIGl0ZXJhdGlvbiBvdmVyIGhsaXN0X2hlYWQtcyBpbiBzZXFfZmlsZXMKKyAqLworCitleHRlcm4gc3RydWN0IGhsaXN0X25vZGUgKnNlcV9obGlzdF9zdGFydChzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkJICBsb2ZmX3QgcG9zKTsKK2V4dGVybiBzdHJ1Y3QgaGxpc3Rfbm9kZSAqc2VxX2hsaXN0X3N0YXJ0X2hlYWQoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsCisJCQkJCSAgICAgICBsb2ZmX3QgcG9zKTsKK2V4dGVybiBzdHJ1Y3QgaGxpc3Rfbm9kZSAqc2VxX2hsaXN0X25leHQodm9pZCAqdiwgc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsCisJCQkJCSBsb2ZmX3QgKnBwb3MpOworCitleHRlcm4gc3RydWN0IGhsaXN0X25vZGUgKnNlcV9obGlzdF9zdGFydF9yY3Uoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsCisJCQkJCSAgICAgIGxvZmZfdCBwb3MpOworZXh0ZXJuIHN0cnVjdCBobGlzdF9ub2RlICpzZXFfaGxpc3Rfc3RhcnRfaGVhZF9yY3Uoc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQsCisJCQkJCQkgICBsb2ZmX3QgcG9zKTsKK2V4dGVybiBzdHJ1Y3QgaGxpc3Rfbm9kZSAqc2VxX2hsaXN0X25leHRfcmN1KHZvaWQgKnYsCisJCQkJCQkgICBzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCwKKwkJCQkJCSAgIGxvZmZfdCAqcHBvcyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvc2VyaWFsX2NvcmUuaAppbmRleCA4YzNkZDM2Li43OGRkMWU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9jb3JlLmgKKysrIGIvaW5jbHVkZS9saW51eC9zZXJpYWxfY29yZS5oCkBAIC00OTEsOSArNDkxLDEzIEBACiB7CiAJc3RydWN0IHVhcnRfc3RhdGUgKnN0YXRlID0gdXBvcnQtPnN0YXRlOwogCXN0cnVjdCB0dHlfcG9ydCAqcG9ydCA9ICZzdGF0ZS0+cG9ydDsKKwlzdHJ1Y3QgdHR5X2xkaXNjICpsZCA9IHR0eV9sZGlzY19yZWYocG9ydC0+dHR5KTsKKwlzdHJ1Y3QgdGltZXNwZWMgdHM7CisKKwlpZiAobGQgJiYgbGQtPm9wcy0+ZGNkX2NoYW5nZSkKKwkJZ2V0bnN0aW1lb2ZkYXkoJnRzKTsKIAogCXVwb3J0LT5pY291bnQuZGNkKys7Ci0KICNpZmRlZiBDT05GSUdfSEFSRF9QUFMKIAlpZiAoKHVwb3J0LT5mbGFncyAmIFVQRl9IQVJEUFBTX0NEKSAmJiBzdGF0dXMpCiAJCWhhcmRwcHMoKTsKQEAgLTUwNSw2ICs1MDksMTEgQEAKIAkJZWxzZSBpZiAocG9ydC0+dHR5KQogCQkJdHR5X2hhbmd1cChwb3J0LT50dHkpOwogCX0KKworCWlmIChsZCAmJiBsZC0+b3BzLT5kY2RfY2hhbmdlKQorCQlsZC0+b3BzLT5kY2RfY2hhbmdlKHBvcnQtPnR0eSwgc3RhdHVzLCAmdHMpOworCWlmIChsZCkKKwkJdHR5X2xkaXNjX2RlcmVmKGxkKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9zY2kuaCBiL2luY2x1ZGUvbGludXgvc2VyaWFsX3NjaS5oCmluZGV4IDFjMjk3ZGQuLjFiMTc3ZDI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlcmlhbF9zY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NlcmlhbF9zY2kuaApAQCAtMiw2ICsyLDcgQEAKICNkZWZpbmUgX19MSU5VWF9TRVJJQUxfU0NJX0gKIAogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8YXNtL2RtYWVuZ2luZS5oPgogCiAvKgogICogR2VuZXJpYyBoZWFkZXIgZm9yIFN1cGVySCBTQ0koRikgKHVzZWQgYnkgc2gvc2g2NC9oODMwMCBhbmQgcmVsYXRlZCBwYXJ0cykKQEAgLTE2LDYgKzE3LDggQEAKIAlTQ0l4X05SX0lSUVMsCiB9OwogCitzdHJ1Y3QgZGV2aWNlOworCiAvKgogICogUGxhdGZvcm0gZGV2aWNlIHNwZWNpZmljIHBsYXRmb3JtX2RhdGEgc3RydWN0CiAgKi8KQEAgLTI2LDYgKzI5LDkgQEAKIAl1bnNpZ25lZCBpbnQJdHlwZTsJCQkvKiBTQ0kgLyBTQ0lGIC8gSVJEQSAqLwogCXVwZl90CQlmbGFnczsJCQkvKiBVUEZfKiBmbGFncyAqLwogCWNoYXIJCSpjbGs7CQkJLyogY2xvY2sgc3RyaW5nICovCisJc3RydWN0IGRldmljZQkqZG1hX2RldjsKKwllbnVtIHNoX2RtYWVfc2xhdmVfY2hhbl9pZCBkbWFfc2xhdmVfdHg7CisJZW51bSBzaF9kbWFlX3NsYXZlX2NoYW5faWQgZG1hX3NsYXZlX3J4OwogfTsKIAogI2VuZGlmIC8qIF9fTElOVVhfU0VSSUFMX1NDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oIGIvaW5jbHVkZS9saW51eC9zaWduYWwuaAppbmRleCBhYjkyNzJjLi5mY2QyYjE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NpZ25hbC5oCisrKyBiL2luY2x1ZGUvbGludXgvc2lnbmFsLmgKQEAgLTcsNiArNyw4IEBACiAjaWZkZWYgX19LRVJORUxfXwogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAorLyogZm9yIHN5c2N0bCAqLworZXh0ZXJuIGludCBwcmludF9mYXRhbF9zaWduYWxzOwogLyoKICAqIFJlYWwgVGltZSBzaWduYWxzIG1heSBiZSBxdWV1ZWQuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2tidWZmLmggYi9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oCmluZGV4IGFlODM2ZmQuLjAzZjgxNmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2tidWZmLmgKKysrIGIvaW5jbHVkZS9saW51eC9za2J1ZmYuaApAQCAtMzE1LDIyICszMTUsMjMgQEAKIAlzdHJ1Y3Qgc2tfYnVmZgkJKm5leHQ7CiAJc3RydWN0IHNrX2J1ZmYJCSpwcmV2OwogCi0Jc3RydWN0IHNvY2sJCSpzazsKIAlrdGltZV90CQkJdHN0YW1wOworCisJc3RydWN0IHNvY2sJCSpzazsKIAlzdHJ1Y3QgbmV0X2RldmljZQkqZGV2OwogCi0JdW5zaWduZWQgbG9uZwkJX3NrYl9kc3Q7Ci0jaWZkZWYgQ09ORklHX1hGUk0KLQlzdHJ1Y3QJc2VjX3BhdGgJKnNwOwotI2VuZGlmCiAJLyoKIAkgKiBUaGlzIGlzIHRoZSBjb250cm9sIGJ1ZmZlci4gSXQgaXMgZnJlZSB0byB1c2UgZm9yIGV2ZXJ5CiAJICogbGF5ZXIuIFBsZWFzZSBwdXQgeW91ciBwcml2YXRlIHZhcmlhYmxlcyB0aGVyZS4gSWYgeW91CiAJICogd2FudCB0byBrZWVwIHRoZW0gYWNyb3NzIGxheWVycyB5b3UgaGF2ZSB0byBkbyBhIHNrYl9jbG9uZSgpCiAJICogZmlyc3QuIFRoaXMgaXMgb3duZWQgYnkgd2hvZXZlciBoYXMgdGhlIHNrYiBxdWV1ZWQgQVRNLgogCSAqLwotCWNoYXIJCQljYls0OF07CisJY2hhcgkJCWNiWzQ4XSBfX2FsaWduZWQoOCk7CiAKKwl1bnNpZ25lZCBsb25nCQlfc2tiX2RzdDsKKyNpZmRlZiBDT05GSUdfWEZSTQorCXN0cnVjdAlzZWNfcGF0aAkqc3A7CisjZW5kaWYKIAl1bnNpZ25lZCBpbnQJCWxlbiwKIAkJCQlkYXRhX2xlbjsKIAlfX3UxNgkJCW1hY19sZW4sCkBAIC0zNTQsOCArMzU1LDggQEAKIAkJCQlpcHZzX3Byb3BlcnR5OjEsCiAJCQkJcGVla2VkOjEsCiAJCQkJbmZfdHJhY2U6MTsKLQlfX2JlMTYJCQlwcm90b2NvbDoxNjsKIAlrbWVtY2hlY2tfYml0ZmllbGRfZW5kKGZsYWdzMSk7CisJX19iZTE2CQkJcHJvdG9jb2w7CiAKIAl2b2lkCQkJKCpkZXN0cnVjdG9yKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCkBAIC03MzgsNyArNzM5LDcgQEAKIH0KIAogLyoqCi0gKglza2JfcGVlaworICoJc2tiX3BlZWsgLSBwZWVrIGF0IHRoZSBoZWFkIG9mIGFuICZza19idWZmX2hlYWQKICAqCUBsaXN0XzogbGlzdCB0byBwZWVrIGF0CiAgKgogICoJUGVlayBhbiAmc2tfYnVmZi4gVW5saWtlIG1vc3Qgb3RoZXIgb3BlcmF0aW9ucyB5b3UgX01VU1RfCkBAIC03NTksNyArNzYwLDcgQEAKIH0KIAogLyoqCi0gKglza2JfcGVla190YWlsCisgKglza2JfcGVla190YWlsIC0gcGVlayBhdCB0aGUgdGFpbCBvZiBhbiAmc2tfYnVmZl9oZWFkCiAgKglAbGlzdF86IGxpc3QgdG8gcGVlayBhdAogICoKICAqCVBlZWsgYW4gJnNrX2J1ZmYuIFVubGlrZSBtb3N0IG90aGVyIG9wZXJhdGlvbnMgeW91IF9NVVNUXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbGFiLmggYi9pbmNsdWRlL2xpbnV4L3NsYWIuaAppbmRleCAyZGE4MzcyLi40ODg0NDYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NsYWIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NsYWIuaApAQCAtNzAsNiArNzAsMTEgQEAKICNlbHNlCiAjIGRlZmluZSBTTEFCX05PVFJBQ0sJCTB4MDAwMDAwMDBVTAogI2VuZGlmCisjaWZkZWYgQ09ORklHX0ZBSUxTTEFCCisjIGRlZmluZSBTTEFCX0ZBSUxTTEFCCQkweDAyMDAwMDAwVUwJLyogRmF1bHQgaW5qZWN0aW9uIG1hcmsgKi8KKyNlbHNlCisjIGRlZmluZSBTTEFCX0ZBSUxTTEFCCQkweDAwMDAwMDAwVUwKKyNlbmRpZgogCiAvKiBUaGUgZm9sbG93aW5nIGZsYWdzIGFmZmVjdCB0aGUgcGFnZSBhbGxvY2F0b3IgZ3JvdXBpbmcgcGFnZXMgYnkgbW9iaWxpdHkgKi8KICNkZWZpbmUgU0xBQl9SRUNMQUlNX0FDQ09VTlQJMHgwMDAyMDAwMFVMCQkvKiBPYmplY3RzIGFyZSByZWNsYWltYWJsZSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oIGIvaW5jbHVkZS9saW51eC9zbHViX2RlZi5oCmluZGV4IDFlMTRiZWIuLjAyNDlkNDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2x1Yl9kZWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NsdWJfZGVmLmgKQEAgLTM4LDggKzM4LDYgQEAKIAl2b2lkICoqZnJlZWxpc3Q7CS8qIFBvaW50ZXIgdG8gZmlyc3QgZnJlZSBwZXIgY3B1IG9iamVjdCAqLwogCXN0cnVjdCBwYWdlICpwYWdlOwkvKiBUaGUgc2xhYiBmcm9tIHdoaWNoIHdlIGFyZSBhbGxvY2F0aW5nICovCiAJaW50IG5vZGU7CQkvKiBUaGUgbm9kZSBvZiB0aGUgcGFnZSAob3IgLTEgZm9yIGRlYnVnKSAqLwotCXVuc2lnbmVkIGludCBvZmZzZXQ7CS8qIEZyZWVwb2ludGVyIG9mZnNldCAoaW4gd29yZCB1bml0cykgKi8KLQl1bnNpZ25lZCBpbnQgb2Jqc2l6ZTsJLyogU2l6ZSBvZiBhbiBvYmplY3QgKGZyb20ga21lbV9jYWNoZSkgKi8KICNpZmRlZiBDT05GSUdfU0xVQl9TVEFUUwogCXVuc2lnbmVkIHN0YXRbTlJfU0xVQl9TVEFUX0lURU1TXTsKICNlbmRpZgpAQCAtNjksNiArNjcsNyBAQAogICogU2xhYiBjYWNoZSBtYW5hZ2VtZW50LgogICovCiBzdHJ1Y3Qga21lbV9jYWNoZSB7CisJc3RydWN0IGttZW1fY2FjaGVfY3B1ICpjcHVfc2xhYjsKIAkvKiBVc2VkIGZvciByZXRyaXZpbmcgcGFydGlhbCBzbGFicyBldGMgKi8KIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBzaXplOwkJLyogVGhlIHNpemUgb2YgYW4gb2JqZWN0IGluY2x1ZGluZyBtZXRhIGRhdGEgKi8KQEAgLTEwNCwxMSArMTAzLDYgQEAKIAlpbnQgcmVtb3RlX25vZGVfZGVmcmFnX3JhdGlvOwogCXN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm5vZGVbTUFYX05VTU5PREVTXTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19TTVAKLQlzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgKmNwdV9zbGFiW05SX0NQVVNdOwotI2Vsc2UKLQlzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgY3B1X3NsYWI7Ci0jZW5kaWYKIH07CiAKIC8qCkBAIC0xMzUsMTEgKzEyOSwyMSBAQAogCiAjZGVmaW5lIFNMVUJfUEFHRV9TSElGVCAoUEFHRV9TSElGVCArIDIpCiAKKyNpZmRlZiBDT05GSUdfWk9ORV9ETUEKKyNkZWZpbmUgU0xVQl9ETUEgX19HRlBfRE1BCisvKiBSZXNlcnZlIGV4dHJhIGNhY2hlcyBmb3IgcG90ZW50aWFsIERNQSB1c2UgKi8KKyNkZWZpbmUgS01BTExPQ19DQUNIRVMgKDIgKiBTTFVCX1BBR0VfU0hJRlQgLSA2KQorI2Vsc2UKKy8qIERpc2FibGUgRE1BIGZ1bmN0aW9uYWxpdHkgKi8KKyNkZWZpbmUgU0xVQl9ETUEgKF9fZm9yY2UgZ2ZwX3QpMAorI2RlZmluZSBLTUFMTE9DX0NBQ0hFUyBTTFVCX1BBR0VfU0hJRlQKKyNlbmRpZgorCiAvKgogICogV2Uga2VlcCB0aGUgZ2VuZXJhbCBjYWNoZXMgaW4gYW4gYXJyYXkgb2Ygc2xhYiBjYWNoZXMgdGhhdCBhcmUgdXNlZCBmb3IKICAqIDJeeCBieXRlcyBvZiBhbGxvY2F0aW9ucy4KICAqLwotZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlIGttYWxsb2NfY2FjaGVzW1NMVUJfUEFHRV9TSElGVF07CitleHRlcm4gc3RydWN0IGttZW1fY2FjaGUga21hbGxvY19jYWNoZXNbS01BTExPQ19DQUNIRVNdOwogCiAvKgogICogU29ycnkgdGhhdCB0aGUgZm9sbG93aW5nIGhhcyB0byBiZSB0aGF0IHVnbHkgYnV0IHNvbWUgdmVyc2lvbnMgb2YgR0NDCkBAIC0yMDcsMTMgKzIxMSw2IEBACiAJcmV0dXJuICZrbWFsbG9jX2NhY2hlc1tpbmRleF07CiB9CiAKLSNpZmRlZiBDT05GSUdfWk9ORV9ETUEKLSNkZWZpbmUgU0xVQl9ETUEgX19HRlBfRE1BCi0jZWxzZQotLyogRGlzYWJsZSBETUEgZnVuY3Rpb25hbGl0eSAqLwotI2RlZmluZSBTTFVCX0RNQSAoX19mb3JjZSBnZnBfdCkwCi0jZW5kaWYKLQogdm9pZCAqa21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqLCBnZnBfdCk7CiB2b2lkICpfX2ttYWxsb2Moc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbXAuaCBiL2luY2x1ZGUvbGludXgvc21wLmgKaW5kZXggN2EwNTcwZS4uY2ZhMmQyMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zbXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NtcC5oCkBAIC0xNTQsNyArMTU0LDcgQEAKIC8qCiAgKiBzbXBfcHJvY2Vzc29yX2lkKCk6IGdldCB0aGUgY3VycmVudCBDUFUgSUQuCiAgKgotICogaWYgREVCVUdfUFJFRU1QVCBpcyBlbmFibGVkIHRoZSB3ZSBjaGVjayB3aGV0aGVyIGl0IGlzCisgKiBpZiBERUJVR19QUkVFTVBUIGlzIGVuYWJsZWQgdGhlbiB3ZSBjaGVjayB3aGV0aGVyIGl0IGlzCiAgKiB1c2VkIGluIGEgcHJlZW1wdGlvbi1zYWZlIHdheS4gKHNtcF9wcm9jZXNzb3JfaWQoKSBpcyBzYWZlCiAgKiBpZiBpdCdzIHVzZWQgaW4gYSBwcmVlbXB0aW9uLW9mZiBjcml0aWNhbCBzZWN0aW9uLCBvciBpbgogICogYSB0aHJlYWQgdGhhdCBpcyBib3VuZCB0byB0aGUgY3VycmVudCBDUFUuKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zbm1wLmggYi9pbmNsdWRlL2xpbnV4L3NubXAuaAppbmRleCAwZjk1M2ZlLi5lMjhmNWEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NubXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NubXAuaApAQCAtMjU3LDYgKzI1Nyw3IEBACiAJTElOVVhfTUlCX1hGUk1PVVRQT0xCTE9DSywJCS8qIFhmcm1PdXRQb2xCbG9jayAqLwogCUxJTlVYX01JQl9YRlJNT1VUUE9MREVBRCwJCS8qIFhmcm1PdXRQb2xEZWFkICovCiAJTElOVVhfTUlCX1hGUk1PVVRQT0xFUlJPUiwJCS8qIFhmcm1PdXRQb2xFcnJvciAqLworCUxJTlVYX01JQl9YRlJNRldESERSRVJST1IsCQkvKiBYZnJtRndkSGRyRXJyb3IqLwogCV9fTElOVVhfTUlCX1hGUk1NQVgKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpL21heDczMDEuaCBiL2luY2x1ZGUvbGludXgvc3BpL21heDczMDEuaAppbmRleCA2ZGZkODNmLi4zNGFmMGEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NwaS9tYXg3MzAxLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGkvbWF4NzMwMS5oCkBAIC0xLDkgKzEsMjcgQEAKICNpZm5kZWYgTElOVVhfU1BJX01BWDczMDFfSAogI2RlZmluZSBMSU5VWF9TUElfTUFYNzMwMV9ICiAKKyNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CisKKy8qCisgKiBTb21lIHJlZ2lzdGVycyBtdXN0IGJlIHJlYWQgYmFjayB0byBtb2RpZnkuCisgKiBUbyBzYXZlIHRpbWUgd2UgY2FjaGUgdGhlbSBoZXJlIGluIG1lbW9yeQorICovCitzdHJ1Y3QgbWF4NzMwMSB7CisJc3RydWN0IG11dGV4CWxvY2s7CisJdTgJCXBvcnRfY29uZmlnWzhdOwkvKiBmaWVsZCAwIGlzIHVudXNlZCAqLworCXUzMgkJb3V0X2xldmVsOwkvKiBjYWNoZWQgb3V0cHV0IGxldmVscyAqLworCXN0cnVjdCBncGlvX2NoaXAgY2hpcDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJaW50ICgqd3JpdGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlZywgdW5zaWduZWQgaW50IHZhbCk7CisJaW50ICgqcmVhZCkoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVnKTsKK307CisKIHN0cnVjdCBtYXg3MzAxX3BsYXRmb3JtX2RhdGEgewogCS8qIG51bWJlciBhc3NpZ25lZCB0byB0aGUgZmlyc3QgR1BJTyAqLwogCXVuc2lnbmVkCWJhc2U7CiB9OwogCitleHRlcm4gaW50IF9fbWF4NzMweF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KTsKK2V4dGVybiBpbnQgX19tYXg3MzB4X3Byb2JlKHN0cnVjdCBtYXg3MzAxICp0cyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3JjdS5oIGIvaW5jbHVkZS9saW51eC9zcmN1LmgKaW5kZXggMzA4NGY4MC4uNGQ1ZWNiMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcmN1LmgKKysrIGIvaW5jbHVkZS9saW51eC9zcmN1LmgKQEAgLTMzLDcgKzMzLDcgQEAKIAogc3RydWN0IHNyY3Vfc3RydWN0IHsKIAlpbnQgY29tcGxldGVkOwotCXN0cnVjdCBzcmN1X3N0cnVjdF9hcnJheSAqcGVyX2NwdV9yZWY7CisJc3RydWN0IHNyY3Vfc3RydWN0X2FycmF5IF9fcGVyY3B1ICpwZXJfY3B1X3JlZjsKIAlzdHJ1Y3QgbXV0ZXggbXV0ZXg7CiAjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKIAlzdHJ1Y3QgbG9ja2RlcF9tYXAgZGVwX21hcDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RtbWFjLmggYi9pbmNsdWRlL2xpbnV4L3N0bW1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyYmZkMWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3N0bW1hYy5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSGVhZGVyIGZpbGUgZm9yIHN0bW1hYyBwbGF0Zm9ybSBkYXRhCisKKyAgQ29weXJpZ2h0IChDKSAyMDA5ICBTVE1pY3JvZWxlY3Ryb25pY3MgTHRkCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQXV0aG9yOiBHaXVzZXBwZSBDYXZhbGxhcm8gPHBlcHBlLmNhdmFsbGFyb0BzdC5jb20+CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9fU1RNTUFDX1BMQVRGT1JNX0RBVEEKKyNkZWZpbmUgX19TVE1NQUNfUExBVEZPUk1fREFUQQorCisvKiBwbGF0ZnJvbSBkYXRhIGZvciBwbGF0ZnJvbSBkZXZpY2Ugc3RydWN0dXJlJ3MgcGxhdGZyb21fZGF0YSBmaWVsZCAqLworCisvKiBQcml2YXRlIGRhdGEgZm9yIHRoZSBTVE0gb24tYm9hcmQgZXRoZXJuZXQgZHJpdmVyICovCitzdHJ1Y3QgcGxhdF9zdG1tYWNlbmV0X2RhdGEgeworCWludCBidXNfaWQ7CisJaW50IHBibDsKKwlpbnQgaGFzX2dtYWM7CisJdm9pZCAoKmZpeF9tYWNfc3BlZWQpKHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBzcGVlZCk7CisJdm9pZCAoKmJ1c19zZXR1cCkodW5zaWduZWQgbG9uZyBpb2FkZHIpOworI2lmZGVmIENPTkZJR19TVE1fRFJJVkVSUworCXN0cnVjdCBzdG1fcGFkX2NvbmZpZyAqcGFkX2NvbmZpZzsKKyNlbmRpZgorCXZvaWQgKmJzcF9wcml2OworfTsKKworc3RydWN0IHBsYXRfc3RtbWFjcGh5X2RhdGEgeworCWludCBidXNfaWQ7CisJaW50IHBoeV9hZGRyOworCXVuc2lnbmVkIGludCBwaHlfbWFzazsKKwlpbnQgaW50ZXJmYWNlOworCWludCAoKnBoeV9yZXNldCkodm9pZCAqcHJpdik7CisJdm9pZCAqcHJpdjsKK307CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvYmNfeHBydC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvYmNfeHBydC5oCmluZGV4IDY1MDhmMGQuLmQ3MTUyYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL2JjX3hwcnQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9iY194cHJ0LmgKQEAgLTM4LDEyICszOCwyNyBAQAogdm9pZCB4cHJ0X2Rlc3Ryb3lfYmFja2NoYW5uZWwoc3RydWN0IHJwY194cHJ0ICosIGludCBtYXhfcmVxcyk7CiB2b2lkIGJjX3JlbGVhc2VfcmVxdWVzdChzdHJ1Y3QgcnBjX3Rhc2sgKik7CiBpbnQgYmNfc2VuZChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSk7CisKKy8qCisgKiBEZXRlcm1pbmUgaWYgYSBzaGFyZWQgYmFja2NoYW5uZWwgaXMgaW4gdXNlCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHN2Y19pc19iYWNrY2hhbm5lbChjb25zdCBzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQoreworCWlmIChycXN0cC0+cnFfc2VydmVyLT5iY194cHJ0KQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KICNlbHNlIC8qIENPTkZJR19ORlNfVjRfMSAqLwogc3RhdGljIGlubGluZSBpbnQgeHBydF9zZXR1cF9iYWNrY2hhbm5lbChzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsCiAJCQkJCSB1bnNpZ25lZCBpbnQgbWluX3JlcXMpCiB7CiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbmxpbmUgaW50IHN2Y19pc19iYWNrY2hhbm5lbChjb25zdCBzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKQoreworCXJldHVybiAwOworfQogI2VuZGlmIC8qIENPTkZJR19ORlNfVjRfMSAqLwogI2VuZGlmIC8qIF9MSU5VWF9TVU5SUENfQkNfWFBSVF9IICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggYTI2MDJhOC4uMWY1OWQ5MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTM1NSw2ICszNTUsNyBAQAogI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSCiBleHRlcm4gdm9pZAogbWVtX2Nncm91cF91bmNoYXJnZV9zd2FwY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHN3cF9lbnRyeV90IGVudCwgYm9vbCBzd2Fwb3V0KTsKK2V4dGVybiBpbnQgbWVtX2Nncm91cF9jb3VudF9zd2FwX3VzZXIoc3dwX2VudHJ5X3QgZW50LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VwKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQKIG1lbV9jZ3JvdXBfdW5jaGFyZ2Vfc3dhcGNhY2hlKHN0cnVjdCBwYWdlICpwYWdlLCBzd3BfZW50cnlfdCBlbnQsIGJvb2wgc3dhcG91dCkKQEAgLTQ4NSw2ICs0ODYsMTQgQEAKIHsKIH0KIAorI2lmZGVmIENPTkZJR19DR1JPVVBfTUVNX1JFU19DVExSCitzdGF0aWMgaW5saW5lIGludAorbWVtX2Nncm91cF9jb3VudF9zd2FwX3VzZXIoc3dwX2VudHJ5X3QgZW50LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VwKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKICNlbmRpZiAvKiBDT05GSUdfU1dBUCAqLwogI2VuZGlmIC8qIF9fS0VSTkVMX18qLwogI2VuZGlmIC8qIF9MSU5VWF9TV0FQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaCBiL2luY2x1ZGUvbGludXgvc3lzY2FsbHMuaAppbmRleCA4MTI2ZjIzLi40NGYyYWQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCkBAIC0yMyw2ICsyMyw3IEBACiBzdHJ1Y3QgbGludXhfZGlyZW50Owogc3RydWN0IGxpbnV4X2RpcmVudDY0Owogc3RydWN0IGxpc3RfaGVhZDsKK3N0cnVjdCBtbWFwX2FyZ19zdHJ1Y3Q7CiBzdHJ1Y3QgbXNnYnVmOwogc3RydWN0IG1zZ2hkcjsKIHN0cnVjdCBtbXNnaGRyOwpAQCAtMzAsMTAgKzMxLDEzIEBACiBzdHJ1Y3QgbmV3X3V0c25hbWU7CiBzdHJ1Y3QgbmZzY3RsX2FyZzsKIHN0cnVjdCBfX29sZF9rZXJuZWxfc3RhdDsKK3N0cnVjdCBvbGRvbGRfdXRzbmFtZTsKK3N0cnVjdCBvbGRfdXRzbmFtZTsKIHN0cnVjdCBwb2xsZmQ7CiBzdHJ1Y3QgcmxpbWl0Owogc3RydWN0IHJ1c2FnZTsKIHN0cnVjdCBzY2hlZF9wYXJhbTsKK3N0cnVjdCBzZWxfYXJnX3N0cnVjdDsKIHN0cnVjdCBzZW1hcGhvcmU7CiBzdHJ1Y3Qgc2VtYnVmOwogc3RydWN0IHNobWlkX2RzOwpAQCAtNjM4LDYgKzY0Miw3IEBACiAJCQkJbG9uZyB0aW1lb3V0KTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2VsZWN0KGludCBuLCBmZF9zZXQgX191c2VyICppbnAsIGZkX3NldCBfX3VzZXIgKm91dHAsCiAJCQlmZF9zZXQgX191c2VyICpleHAsIHN0cnVjdCB0aW1ldmFsIF9fdXNlciAqdHZwKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfb2xkX3NlbGVjdChzdHJ1Y3Qgc2VsX2FyZ19zdHJ1Y3QgX191c2VyICphcmcpOwogYXNtbGlua2FnZSBsb25nIHN5c19lcG9sbF9jcmVhdGUoaW50IHNpemUpOwogYXNtbGlua2FnZSBsb25nIHN5c19lcG9sbF9jcmVhdGUxKGludCBmbGFncyk7CiBhc21saW5rYWdlIGxvbmcgc3lzX2Vwb2xsX2N0bChpbnQgZXBmZCwgaW50IG9wLCBpbnQgZmQsCkBAIC02NTIsNiArNjU3LDggQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2V0aG9zdG5hbWUoY2hhciBfX3VzZXIgKm5hbWUsIGludCBsZW4pOwogYXNtbGlua2FnZSBsb25nIHN5c19zZXRkb21haW5uYW1lKGNoYXIgX191c2VyICpuYW1lLCBpbnQgbGVuKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfbmV3dW5hbWUoc3RydWN0IG5ld191dHNuYW1lIF9fdXNlciAqbmFtZSk7Cithc21saW5rYWdlIGxvbmcgc3lzX3VuYW1lKHN0cnVjdCBvbGRfdXRzbmFtZSBfX3VzZXIgKik7Cithc21saW5rYWdlIGxvbmcgc3lzX29sZHVuYW1lKHN0cnVjdCBvbGRvbGRfdXRzbmFtZSBfX3VzZXIgKik7CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0cmxpbWl0KHVuc2lnbmVkIGludCByZXNvdXJjZSwKIAkJCQlzdHJ1Y3QgcmxpbWl0IF9fdXNlciAqcmxpbSk7CkBAIC02ODEsNiArNjg4LDggQEAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2htZ2V0KGtleV90IGtleSwgc2l6ZV90IHNpemUsIGludCBmbGFnKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc2htZHQoY2hhciBfX3VzZXIgKnNobWFkZHIpOwogYXNtbGlua2FnZSBsb25nIHN5c19zaG1jdGwoaW50IHNobWlkLCBpbnQgY21kLCBzdHJ1Y3Qgc2htaWRfZHMgX191c2VyICpidWYpOworYXNtbGlua2FnZSBsb25nIHN5c19pcGModW5zaWduZWQgaW50IGNhbGwsIGludCBmaXJzdCwgaW50IHNlY29uZCwKKwkJdW5zaWduZWQgbG9uZyB0aGlyZCwgdm9pZCBfX3VzZXIgKnB0ciwgbG9uZyBmaWZ0aCk7CiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfbXFfb3Blbihjb25zdCBjaGFyIF9fdXNlciAqbmFtZSwgaW50IG9mbGFnLCBtb2RlX3QgbW9kZSwgc3RydWN0IG1xX2F0dHIgX191c2VyICphdHRyKTsKIGFzbWxpbmthZ2UgbG9uZyBzeXNfbXFfdW5saW5rKGNvbnN0IGNoYXIgX191c2VyICpuYW1lKTsKQEAgLTgzNiw0ICs4NDUsNiBAQAogYXNtbGlua2FnZSBsb25nIHN5c19tbWFwX3Bnb2ZmKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sCiAJCQl1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCiAJCQl1bnNpZ25lZCBsb25nIGZkLCB1bnNpZ25lZCBsb25nIHBnb2ZmKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfb2xkX21tYXAoc3RydWN0IG1tYXBfYXJnX3N0cnVjdCBfX3VzZXIgKmFyZyk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjdGwuaCBiL2luY2x1ZGUvbGludXgvc3lzY3RsLmgKaW5kZXggYmQyN2ZiYy4uZjY2MDE0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNjdGwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2N0bC5oCkBAIC00ODEsOSArNDgxLDYgQEAKIAlORVRfSVBWNF9DT05GX1BST01PVEVfU0VDT05EQVJJRVM9MjAsCiAJTkVUX0lQVjRfQ09ORl9BUlBfQUNDRVBUPTIxLAogCU5FVF9JUFY0X0NPTkZfQVJQX05PVElGWT0yMiwKLQlORVRfSVBWNF9DT05GX0FDQ0VQVF9MT0NBTD0yMywKLQlORVRfSVBWNF9DT05GX1NSQ19WTUFSSz0yNCwKLQlfX05FVF9JUFY0X0NPTkZfTUFYCiB9OwogCiAvKiAvcHJvYy9zeXMvbmV0L2lwdjQvbmV0ZmlsdGVyICovCkBAIC01OTksNyArNTk2LDYgQEAKIAlORVRfTkVJR0hfR0NfVEhSRVNIMz0xNiwKIAlORVRfTkVJR0hfUkVUUkFOU19USU1FX01TPTE3LAogCU5FVF9ORUlHSF9SRUFDSEFCTEVfVElNRV9NUz0xOCwKLQlfX05FVF9ORUlHSF9NQVgKIH07CiAKIC8qIC9wcm9jL3N5cy9uZXQvZGNjcCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNkZXYuaCBiL2luY2x1ZGUvbGludXgvc3lzZGV2LmgKaW5kZXggZjM5NWJiMy4uMTE1NGMyOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c2Rldi5oCkBAIC0yNywxMCArMjcsMTIgQEAKIAogCiBzdHJ1Y3Qgc3lzX2RldmljZTsKK3N0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlOwogCiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHsKIAljb25zdCBjaGFyICpuYW1lOwogCXN0cnVjdCBsaXN0X2hlYWQJZHJpdmVyczsKKwlzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqKmF0dHJzOwogCiAJLyogRGVmYXVsdCBvcGVyYXRpb25zIGZvciB0aGVzZSB0eXBlcyBvZiBkZXZpY2VzICovCiAJaW50CSgqc2h1dGRvd24pKHN0cnVjdCBzeXNfZGV2aWNlICopOwpAQCAtNDEsOCArNDMsMTAgQEAKIAogc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgewogCXN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKLQlzc2l6ZV90ICgqc2hvdykoc3RydWN0IHN5c2Rldl9jbGFzcyAqLCBjaGFyICopOwotCXNzaXplX3QgKCpzdG9yZSkoc3RydWN0IHN5c2Rldl9jbGFzcyAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CisJc3NpemVfdCAoKnNob3cpKHN0cnVjdCBzeXNkZXZfY2xhc3MgKiwgc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKiwKKwkJCWNoYXIgKik7CisJc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3Qgc3lzZGV2X2NsYXNzICosIHN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICosCisJCQkgY29uc3QgY2hhciAqLCBzaXplX3QpOwogfTsKIAogI2RlZmluZSBfU1lTREVWX0NMQVNTX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKSAJCVwKQEAgLTExOSw2ICsxMjMsMTkgQEAKIGV4dGVybiBpbnQgc3lzZGV2X2NyZWF0ZV9maWxlKHN0cnVjdCBzeXNfZGV2aWNlICosIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICopOwogZXh0ZXJuIHZvaWQgc3lzZGV2X3JlbW92ZV9maWxlKHN0cnVjdCBzeXNfZGV2aWNlICosIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICopOwogCisvKiBDcmVhdGUvcmVtb3ZlIE5VTEwgdGVybWluYXRlZCBhdHRyaWJ1dGUgbGlzdCAqLworc3RhdGljIGlubGluZSBpbnQKK3N5c2Rldl9jcmVhdGVfZmlsZXMoc3RydWN0IHN5c19kZXZpY2UgKmQsIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICoqYSkKK3sKKwlyZXR1cm4gc3lzZnNfY3JlYXRlX2ZpbGVzKCZkLT5rb2JqLCAoY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqKilhKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitzeXNkZXZfcmVtb3ZlX2ZpbGVzKHN0cnVjdCBzeXNfZGV2aWNlICpkLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqKmEpCit7CisJcmV0dXJuIHN5c2ZzX3JlbW92ZV9maWxlcygmZC0+a29iaiwgKGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKiopYSk7Cit9CisKIHN0cnVjdCBzeXNkZXZfZXh0X2F0dHJpYnV0ZSB7CiAJc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgYXR0cjsKIAl2b2lkICp2YXI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N5c2ZzLmggYi9pbmNsdWRlL2xpbnV4L3N5c2ZzLmgKaW5kZXggY2ZhODMwOC4uZjA0OTZiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zeXNmcy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3lzZnMuaApAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogc3RydWN0IGtvYmplY3Q7CkBAIC0yOSw4ICszMCwzMyBAQAogCWNvbnN0IGNoYXIJCSpuYW1lOwogCXN0cnVjdCBtb2R1bGUJCSpvd25lcjsKIAltb2RlX3QJCQltb2RlOworI2lmZGVmIENPTkZJR19ERUJVR19MT0NLX0FMTE9DCisJc3RydWN0IGxvY2tfY2xhc3Nfa2V5CSprZXk7CisJc3RydWN0IGxvY2tfY2xhc3Nfa2V5CXNrZXk7CisjZW5kaWYKIH07CiAKKy8qKgorICoJc3lzZnNfYXR0cl9pbml0IC0gaW5pdGlhbGl6ZSBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBzeXNmcyBhdHRyaWJ1dGUKKyAqCUBhdHRyOiBzdHJ1Y3QgYXR0cmlidXRlIHRvIGluaXRpYWxpemUKKyAqCisgKglJbml0aWFsaXplIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cnVjdCBhdHRyaWJ1dGUgc28gd2UgY2FuCisgKgltYWtlIGxvY2tkZXAgaGFwcHkuICBUaGlzIGlzIGEgbmV3IHJlcXVpcmVtZW50IGZvciBhdHRyaWJ1dGVzCisgKglhbmQgaW5pdGlhbGx5IHRoaXMgaXMgb25seSBuZWVkZWQgd2hlbiBsb2NrZGVwIGlzIGVuYWJsZWQuCisgKglMb2NrZGVwIGdpdmVzIGEgbmljZSBlcnJvciB3aGVuIHlvdXIgYXR0cmlidXRlIGlzIGFkZGVkIHRvCisgKglzeXNmcyBpZiB5b3UgZG9uJ3QgaGF2ZSB0aGlzLgorICovCisjaWZkZWYgQ09ORklHX0RFQlVHX0xPQ0tfQUxMT0MKKyNkZWZpbmUgc3lzZnNfYXR0cl9pbml0KGF0dHIpCQkJCVwKK2RvIHsJCQkJCQkJXAorCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7CQlcCisJCQkJCQkJXAorCShhdHRyKS0+a2V5ID0gJl9fa2V5OwkJCQlcCit9IHdoaWxlKDApCisjZWxzZQorI2RlZmluZSBzeXNmc19hdHRyX2luaXQoYXR0cikgZG8ge30gd2hpbGUoMCkKKyNlbmRpZgorCiBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHsKIAljb25zdCBjaGFyCQkqbmFtZTsKIAltb2RlX3QJCQkoKmlzX3Zpc2libGUpKHN0cnVjdCBrb2JqZWN0ICosCkBAIC03NCw2ICsxMDAsMTggQEAKIAkJICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIH07CiAKKy8qKgorICoJc3lzZnNfYmluX2F0dHJfaW5pdCAtIGluaXRpYWxpemUgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYmluX2F0dHJpYnV0ZQorICoJQGF0dHI6IHN0cnVjdCBiaW5fYXR0cmlidXRlIHRvIGluaXRpYWxpemUKKyAqCisgKglJbml0aWFsaXplIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHN0cnVjdCBiaW5fYXR0cmlidXRlIHNvIHdlCisgKgljYW4gbWFrZSBsb2NrZGVwIGhhcHB5LiAgVGhpcyBpcyBhIG5ldyByZXF1aXJlbWVudCBmb3IKKyAqCWF0dHJpYnV0ZXMgYW5kIGluaXRpYWxseSB0aGlzIGlzIG9ubHkgbmVlZGVkIHdoZW4gbG9ja2RlcCBpcworICoJZW5hYmxlZC4gIExvY2tkZXAgZ2l2ZXMgYSBuaWNlIGVycm9yIHdoZW4geW91ciBhdHRyaWJ1dGUgaXMKKyAqCWFkZGVkIHRvIHN5c2ZzIGlmIHlvdSBkb24ndCBoYXZlIHRoaXMuCisgKi8KKyNkZWZpbmUgc3lzZnNfYmluX2F0dHJfaW5pdChiaW5fYXR0cikgc3lzZnNfYXR0cl9pbml0KCYoYmluX2F0dHIpLT5hdHRyKQorCiBzdHJ1Y3Qgc3lzZnNfb3BzIHsKIAlzc2l6ZV90CSgqc2hvdykoc3RydWN0IGtvYmplY3QgKiwgc3RydWN0IGF0dHJpYnV0ZSAqLGNoYXIgKik7CiAJc3NpemVfdAkoKnN0b3JlKShzdHJ1Y3Qga29iamVjdCAqLHN0cnVjdCBhdHRyaWJ1dGUgKixjb25zdCBjaGFyICosIHNpemVfdCk7CkBAIC05NCw5ICsxMzIsMTIgQEAKIAogaW50IF9fbXVzdF9jaGVjayBzeXNmc19jcmVhdGVfZmlsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICphdHRyKTsKK2ludCBfX211c3RfY2hlY2sgc3lzZnNfY3JlYXRlX2ZpbGVzKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKiphdHRyKTsKIGludCBfX211c3RfY2hlY2sgc3lzZnNfY2htb2RfZmlsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKIAkJCQkgIG1vZGVfdCBtb2RlKTsKIHZvaWQgc3lzZnNfcmVtb3ZlX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIpOwordm9pZCBzeXNmc19yZW1vdmVfZmlsZXMoc3RydWN0IGtvYmplY3QgKmtvYmosIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKiphdHRyKTsKIAogaW50IF9fbXVzdF9jaGVjayBzeXNmc19jcmVhdGVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKTsKQEAgLTExMCw2ICsxNTEsOSBAQAogCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWUpOwogdm9pZCBzeXNmc19yZW1vdmVfbGluayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgY29uc3QgY2hhciAqbmFtZSk7CiAKK2ludCBzeXNmc19yZW5hbWVfbGluayhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmplY3QgKnRhcmdldCwKKwkJCWNvbnN0IGNoYXIgKm9sZF9uYW1lLCBjb25zdCBjaGFyICpuZXdfbmFtZSk7CisKIGludCBfX211c3RfY2hlY2sgc3lzZnNfY3JlYXRlX2dyb3VwKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJCSAgICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwICpncnApOwogaW50IHN5c2ZzX3VwZGF0ZV9ncm91cChzdHJ1Y3Qga29iamVjdCAqa29iaiwKQEAgLTE2NCw2ICsyMDgsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgc3lzZnNfY3JlYXRlX2ZpbGVzKHN0cnVjdCBrb2JqZWN0ICprb2JqLAorCQkJCSAgICBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlICoqYXR0cikKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgc3lzZnNfY2htb2RfZmlsZShzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCQkgICBzdHJ1Y3QgYXR0cmlidXRlICphdHRyLCBtb2RlX3QgbW9kZSkKIHsKQEAgLTE3NSw2ICsyMjUsMTEgQEAKIHsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHN5c2ZzX3JlbW92ZV9maWxlcyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKKwkJCQkgICAgIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGUgKiphdHRyKQoreworfQorCiBzdGF0aWMgaW5saW5lIGludCBzeXNmc19jcmVhdGVfYmluX2ZpbGUoc3RydWN0IGtvYmplY3QgKmtvYmosCiAJCQkJCWNvbnN0IHN0cnVjdCBiaW5fYXR0cmlidXRlICphdHRyKQogewpAQCAtMjAzLDYgKzI1OCwxMiBAQAogewogfQogCitzdGF0aWMgaW5saW5lIGludCBzeXNmc19yZW5hbWVfbGluayhzdHJ1Y3Qga29iamVjdCAqaywgc3RydWN0IGtvYmplY3QgKnQsCisJCQkJICAgIGNvbnN0IGNoYXIgKm9sZF9uYW1lLCBjb25zdCBjaGFyICpuZXdfbmFtZSkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgc3lzZnNfY3JlYXRlX2dyb3VwKHN0cnVjdCBrb2JqZWN0ICprb2JqLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCAqZ3JwKQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNsb2cuaCBiL2luY2x1ZGUvbGludXgvc3lzbG9nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg5MTEzOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvc3lzbG9nLmgKQEAgLTAsMCArMSw1MiBAQAorLyogIFN5c2xvZyBpbnRlcm5hbHMKKyAqCisgKiAgQ29weXJpZ2h0IDIwMTAgQ2Fub25pY2FsLCBMdGQuCisgKiAgQXV0aG9yOiBLZWVzIENvb2sgPGtlZXMuY29va0BjYW5vbmljYWwuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9MSU5VWF9TWVNMT0dfSAorI2RlZmluZSBfTElOVVhfU1lTTE9HX0gKKworLyogQ2xvc2UgdGhlIGxvZy4gIEN1cnJlbnRseSBhIE5PUC4gKi8KKyNkZWZpbmUgU1lTTE9HX0FDVElPTl9DTE9TRSAgICAgICAgICAwCisvKiBPcGVuIHRoZSBsb2cuIEN1cnJlbnRseSBhIE5PUC4gKi8KKyNkZWZpbmUgU1lTTE9HX0FDVElPTl9PUEVOICAgICAgICAgICAxCisvKiBSZWFkIGZyb20gdGhlIGxvZy4gKi8KKyNkZWZpbmUgU1lTTE9HX0FDVElPTl9SRUFEICAgICAgICAgICAyCisvKiBSZWFkIGFsbCBtZXNzYWdlcyByZW1haW5pbmcgaW4gdGhlIHJpbmcgYnVmZmVyLiAqLworI2RlZmluZSBTWVNMT0dfQUNUSU9OX1JFQURfQUxMICAgICAgIDMKKy8qIFJlYWQgYW5kIGNsZWFyIGFsbCBtZXNzYWdlcyByZW1haW5pbmcgaW4gdGhlIHJpbmcgYnVmZmVyICovCisjZGVmaW5lIFNZU0xPR19BQ1RJT05fUkVBRF9DTEVBUiAgICAgNAorLyogQ2xlYXIgcmluZyBidWZmZXIuICovCisjZGVmaW5lIFNZU0xPR19BQ1RJT05fQ0xFQVIgICAgICAgICAgNQorLyogRGlzYWJsZSBwcmludGsncyB0byBjb25zb2xlICovCisjZGVmaW5lIFNZU0xPR19BQ1RJT05fQ09OU09MRV9PRkYgICAgNgorLyogRW5hYmxlIHByaW50aydzIHRvIGNvbnNvbGUgKi8KKyNkZWZpbmUgU1lTTE9HX0FDVElPTl9DT05TT0xFX09OICAgICA3CisvKiBTZXQgbGV2ZWwgb2YgbWVzc2FnZXMgcHJpbnRlZCB0byBjb25zb2xlICovCisjZGVmaW5lIFNZU0xPR19BQ1RJT05fQ09OU09MRV9MRVZFTCAgOAorLyogUmV0dXJuIG51bWJlciBvZiB1bnJlYWQgY2hhcmFjdGVycyBpbiB0aGUgbG9nIGJ1ZmZlciAqLworI2RlZmluZSBTWVNMT0dfQUNUSU9OX1NJWkVfVU5SRUFEICAgIDkKKy8qIFJldHVybiBzaXplIG9mIHRoZSBsb2cgYnVmZmVyICovCisjZGVmaW5lIFNZU0xPR19BQ1RJT05fU0laRV9CVUZGRVIgICAxMAorCisjZGVmaW5lIFNZU0xPR19GUk9NX0NBTEwgMAorI2RlZmluZSBTWVNMT0dfRlJPTV9GSUxFIDEKKworaW50IGRvX3N5c2xvZyhpbnQgdHlwZSwgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGNvdW50LCBib29sIGZyb21fZmlsZSk7CisKKyNlbmRpZiAvKiBfTElOVVhfU1lTTE9HX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGFza3N0YXRzX2tlcm4uaCBiL2luY2x1ZGUvbGludXgvdGFza3N0YXRzX2tlcm4uaAppbmRleCAzMzk4ZjQ1Li5iNjUyM2MxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Rhc2tzdGF0c19rZXJuLmgKKysrIGIvaW5jbHVkZS9saW51eC90YXNrc3RhdHNfa2Vybi5oCkBAIC0xNCwxMSArMTQsNiBAQAogZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICp0YXNrc3RhdHNfY2FjaGU7CiBleHRlcm4gc3RydWN0IG11dGV4IHRhc2tzdGF0c19leGl0X211dGV4OwogCi1zdGF0aWMgaW5saW5lIHZvaWQgdGFza3N0YXRzX3RnaWRfaW5pdChzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKQotewotCXNpZy0+c3RhdHMgPSBOVUxMOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgdGFza3N0YXRzX3RnaWRfZnJlZShzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKQogewogCWlmIChzaWctPnN0YXRzKQpAQCAtMzAsOCArMjUsNiBAQAogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrc3RhdHNfZXhpdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgaW50IGdyb3VwX2RlYWQpCiB7fQotc3RhdGljIGlubGluZSB2b2lkIHRhc2tzdGF0c190Z2lkX2luaXQoc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZykKLXt9CiBzdGF0aWMgaW5saW5lIHZvaWQgdGFza3N0YXRzX3RnaWRfZnJlZShzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKQoge30KIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrc3RhdHNfaW5pdF9lYXJseSh2b2lkKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90Y3AuaCBiL2luY2x1ZGUvbGludXgvdGNwLmgKaW5kZXggN2ZlZThhNC4uYTc3OGVlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90Y3AuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RjcC5oCkBAIC0xMDMsNiArMTAzLDggQEAKICNkZWZpbmUgVENQX0NPTkdFU1RJT04JCTEzCS8qIENvbmdlc3Rpb24gY29udHJvbCBhbGdvcml0aG0gKi8KICNkZWZpbmUgVENQX01ENVNJRwkJMTQJLyogVENQIE1ENSBTaWduYXR1cmUgKFJGQzIzODUpICovCiAjZGVmaW5lIFRDUF9DT09LSUVfVFJBTlNBQ1RJT05TCTE1CS8qIFRDUCBDb29raWUgVHJhbnNhY3Rpb25zICovCisjZGVmaW5lIFRDUF9USElOX0xJTkVBUl9USU1FT1VUUyAxNiAgICAgIC8qIFVzZSBsaW5lYXIgdGltZW91dHMgZm9yIHRoaW4gc3RyZWFtcyovCisjZGVmaW5lIFRDUF9USElOX0RVUEFDSyAgICAgICAgIDE3ICAgICAgLyogRmFzdCByZXRyYW5zLiBhZnRlciAxIGR1cGFjayAqLwogCiAvKiBmb3IgVENQX0lORk8gc29ja2V0IG9wdGlvbiAqLwogI2RlZmluZSBUQ1BJX09QVF9USU1FU1RBTVBTCTEKQEAgLTM0MCw3ICszNDIsMTAgQEAKIAl1MzIJZnJ0b19oaWdobWFyazsJLyogc25kX254dCB3aGVuIFJUTyBvY2N1cnJlZCAqLwogCXUxNglhZHZtc3M7CQkvKiBBZHZlcnRpc2VkIE1TUwkJCSovCiAJdTgJZnJ0b19jb3VudGVyOwkvKiBOdW1iZXIgb2YgbmV3IGFja3MgYWZ0ZXIgUlRPICovCi0JdTgJbm9uYWdsZTsJLyogRGlzYWJsZSBOYWdsZSBhbGdvcml0aG0/ICAgICAgICAgICAgICovCisJdTgJbm9uYWdsZSAgICAgOiA0LC8qIERpc2FibGUgTmFnbGUgYWxnb3JpdGhtPyAgICAgICAgICAgICAqLworCQl0aGluX2x0byAgICA6IDEsLyogVXNlIGxpbmVhciB0aW1lb3V0cyBmb3IgdGhpbiBzdHJlYW1zICovCisJCXRoaW5fZHVwYWNrIDogMSwvKiBGYXN0IHJldHJhbnNtaXQgb24gZmlyc3QgZHVwYWNrICAgICAgKi8KKwkJdW51c2VkICAgICAgOiAyOwogCiAvKiBSVFQgbWVhc3VyZW1lbnQgKi8KIAl1MzIJc3J0dDsJCS8qIHNtb290aGVkIHJvdW5kIHRyaXAgdGltZSA8PCAzCSovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R0eS5oIGIvaW5jbHVkZS9saW51eC90dHkuaAppbmRleCA2YWJmY2Y1Li41NjgzNjlhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3R0eS5oCisrKyBiL2luY2x1ZGUvbGludXgvdHR5LmgKQEAgLTY4LDYgKzY4LDE2IEBACiAJdW5zaWduZWQgbG9uZyBkYXRhWzBdOwogfTsKIAorLyoKKyAqIFdlIGRlZmF1bHQgdG8gZGljaW5nIHR0eSBidWZmZXIgYWxsb2NhdGlvbnMgdG8gdGhpcyBtYW55IGNoYXJhY3RlcnMKKyAqIGluIG9yZGVyIHRvIGF2b2lkIG11bHRpcGxlIHBhZ2UgYWxsb2NhdGlvbnMuIFdlIGFzc3VtZSB0dHlfYnVmZmVyIGl0c2VsZgorICogaXMgdW5kZXIgMjU2IGJ5dGVzLiBTZWUgdHR5X2J1ZmZlcl9maW5kIGZvciB0aGUgYWxsb2NhdGlvbiBsb2dpYyB0aGlzCisgKiBtdXN0IG1hdGNoCisgKi8KKworI2RlZmluZSBUVFlfQlVGRkVSX1BBR0UJCSgoUEFHRV9TSVpFICAtIDI1NikgLyAyKQorCisKIHN0cnVjdCB0dHlfYnVmaGVhZCB7CiAJc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwogCXNwaW5sb2NrX3QgbG9jazsKQEAgLTUwNCw2ICs1MTQsNyBAQAogCiAvKiBuX3R0eS5jICovCiBleHRlcm4gc3RydWN0IHR0eV9sZGlzY19vcHMgdHR5X2xkaXNjX05fVFRZOworZXh0ZXJuIHZvaWQgbl90dHlfaW5oZXJpdF9vcHMoc3RydWN0IHR0eV9sZGlzY19vcHMgKm9wcyk7CiAKIC8qIHR0eV9hdWRpdC5jICovCiAjaWZkZWYgQ09ORklHX0FVRElUCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R0eV9mbGlwLmggYi9pbmNsdWRlL2xpbnV4L3R0eV9mbGlwLmgKaW5kZXggZWI2NzdjZi4uOTIzOWQwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfZmxpcC5oCisrKyBiL2luY2x1ZGUvbGludXgvdHR5X2ZsaXAuaApAQCAtMiw4ICsyLDggQEAKICNkZWZpbmUgX0xJTlVYX1RUWV9GTElQX0gKIAogZXh0ZXJuIGludCB0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzaXplX3Qgc2l6ZSk7Ci1leHRlcm4gaW50IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmcoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY2hhcnMsIHNpemVfdCBzaXplKTsKIGV4dGVybiBpbnQgdHR5X2luc2VydF9mbGlwX3N0cmluZ19mbGFncyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1bnNpZ25lZCBjaGFyICpjaGFycywgY29uc3QgY2hhciAqZmxhZ3MsIHNpemVfdCBzaXplKTsKK2V4dGVybiBpbnQgdHR5X2luc2VydF9mbGlwX3N0cmluZ19maXhlZF9mbGFnKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNoYXJzLCBjaGFyIGZsYWcsIHNpemVfdCBzaXplKTsKIGV4dGVybiBpbnQgdHR5X3ByZXBhcmVfZmxpcF9zdHJpbmcoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgdW5zaWduZWQgY2hhciAqKmNoYXJzLCBzaXplX3Qgc2l6ZSk7CiBleHRlcm4gaW50IHR0eV9wcmVwYXJlX2ZsaXBfc3RyaW5nX2ZsYWdzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVkIGNoYXIgKipjaGFycywgY2hhciAqKmZsYWdzLCBzaXplX3Qgc2l6ZSk7CiB2b2lkIHR0eV9zY2hlZHVsZV9mbGlwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwpAQCAtMjAsNCArMjAsOSBAQAogCXJldHVybiB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZsYWdzKHR0eSwgJmNoLCAmZmxhZywgMSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHR0eV9pbnNlcnRfZmxpcF9zdHJpbmcoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY29uc3QgdW5zaWduZWQgY2hhciAqY2hhcnMsIHNpemVfdCBzaXplKQoreworCXJldHVybiB0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nX2ZpeGVkX2ZsYWcodHR5LCBjaGFycywgVFRZX05PUk1BTCwgc2l6ZSk7Cit9CisKICNlbmRpZiAvKiBfTElOVVhfVFRZX0ZMSVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaCBiL2luY2x1ZGUvbGludXgvdHR5X2xkaXNjLmgKaW5kZXggMGM0ZWU5Yi4uNTI2ZDY2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90dHlfbGRpc2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oCkBAIC05OSw2ICs5OSwxMiBAQAogICoJY2Vhc2UgSS9PIHRvIHRoZSB0dHkgZHJpdmVyLiBDYW4gc2xlZXAuIFRoZSBkcml2ZXIgc2hvdWxkCiAgKglzZWVrIHRvIHBlcmZvcm0gdGhpcyBhY3Rpb24gcXVpY2tseSBidXQgc2hvdWxkIHdhaXQgdW50aWwKICAqCWFueSBwZW5kaW5nIGRyaXZlciBJL08gaXMgY29tcGxldGVkLgorICoKKyAqIHZvaWQgKCpkY2RfY2hhbmdlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBpbnQgc3RhdHVzLAorICogCQkJc3RydWN0IHRpbWVzcGVjICp0cykKKyAqCisgKglUZWxscyB0aGUgZGlzY2lwbGluZSB0aGF0IHRoZSBEQ0QgcGluIGhhcyBjaGFuZ2VkIGl0cyBzdGF0dXMgYW5kCisgKgl0aGUgcmVsYXRpdmUgdGltZXN0YW1wLiBQb2ludGVyIHRzIGNhbiBiZSBOVUxMLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtMTM2LDYgKzE0Miw4IEBACiAJdm9pZAkoKnJlY2VpdmVfYnVmKShzdHJ1Y3QgdHR5X3N0cnVjdCAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICpjcCwKIAkJCSAgICAgICBjaGFyICpmcCwgaW50IGNvdW50KTsKIAl2b2lkCSgqd3JpdGVfd2FrZXVwKShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKKwl2b2lkCSgqZGNkX2NoYW5nZSkoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgdW5zaWduZWQgaW50LAorCQkJCXN0cnVjdCB0aW1lc3BlYyAqKTsKIAogCXN0cnVjdCAgbW9kdWxlICpvd25lcjsKIAkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi5oCmluZGV4IDMzMmVhZWEuLjhjOWYwNTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiLmgKKysrIGIvaW5jbHVkZS9saW51eC91c2IuaApAQCAtMTIyLDcgKzEyMiw2IEBACiAgKgludW1iZXIgZnJvbSB0aGUgVVNCIGNvcmUgYnkgY2FsbGluZyB1c2JfcmVnaXN0ZXJfZGV2KCkuCiAgKiBAY29uZGl0aW9uOiBiaW5kaW5nIHN0YXRlIG9mIHRoZSBpbnRlcmZhY2U6IG5vdCBib3VuZCwgYmluZGluZwogICoJKGluIHByb2JlKCkpLCBib3VuZCB0byBhIGRyaXZlciwgb3IgdW5iaW5kaW5nIChpbiBkaXNjb25uZWN0KCkpCi0gKiBAaXNfYWN0aXZlOiBmbGFnIHNldCB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgYm91bmQgYW5kIG5vdCBzdXNwZW5kZWQuCiAgKiBAc3lzZnNfZmlsZXNfY3JlYXRlZDogc3lzZnMgYXR0cmlidXRlcyBleGlzdAogICogQGVwX2RldnNfY3JlYXRlZDogZW5kcG9pbnQgY2hpbGQgcHNldWRvLWRldmljZXMgZXhpc3QKICAqIEB1bnJlZ2lzdGVyaW5nOiBmbGFnIHNldCB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgYmVpbmcgdW5yZWdpc3RlcmVkCkBAIC0xMzUsOCArMTM0LDcgQEAKICAqIEBkZXY6IGRyaXZlciBtb2RlbCdzIHZpZXcgb2YgdGhpcyBkZXZpY2UKICAqIEB1c2JfZGV2OiBpZiBhbiBpbnRlcmZhY2UgaXMgYm91bmQgdG8gdGhlIFVTQiBtYWpvciwgdGhpcyB3aWxsIHBvaW50CiAgKgl0byB0aGUgc3lzZnMgcmVwcmVzZW50YXRpb24gZm9yIHRoYXQgZGV2aWNlLgotICogQHBtX3VzYWdlX2NudDogUE0gdXNhZ2UgY291bnRlciBmb3IgdGhpcyBpbnRlcmZhY2U7IGF1dG9zdXNwZW5kIGlzIG5vdAotICoJYWxsb3dlZCB1bmxlc3MgdGhlIGNvdW50ZXIgaXMgMC4KKyAqIEBwbV91c2FnZV9jbnQ6IFBNIHVzYWdlIGNvdW50ZXIgZm9yIHRoaXMgaW50ZXJmYWNlCiAgKiBAcmVzZXRfd3M6IFVzZWQgZm9yIHNjaGVkdWxpbmcgcmVzZXRzIGZyb20gYXRvbWljIGNvbnRleHQuCiAgKiBAcmVzZXRfcnVubmluZzogc2V0IHRvIDEgaWYgdGhlIGludGVyZmFjZSBpcyBjdXJyZW50bHkgcnVubmluZyBhCiAgKiAgICAgIHF1ZXVlZCByZXNldCBzbyB0aGF0IHVzYl9jYW5jZWxfcXVldWVkX3Jlc2V0KCkgZG9lc24ndCB0cnkgdG8KQEAgLTE4NCw3ICsxODIsNiBAQAogCWludCBtaW5vcjsJCQkvKiBtaW5vciBudW1iZXIgdGhpcyBpbnRlcmZhY2UgaXMKIAkJCQkJICogYm91bmQgdG8gKi8KIAllbnVtIHVzYl9pbnRlcmZhY2VfY29uZGl0aW9uIGNvbmRpdGlvbjsJCS8qIHN0YXRlIG9mIGJpbmRpbmcgKi8KLQl1bnNpZ25lZCBpc19hY3RpdmU6MTsJCS8qIHRoZSBpbnRlcmZhY2UgaXMgbm90IHN1c3BlbmRlZCAqLwogCXVuc2lnbmVkIHN5c2ZzX2ZpbGVzX2NyZWF0ZWQ6MTsJLyogdGhlIHN5c2ZzIGF0dHJpYnV0ZXMgZXhpc3QgKi8KIAl1bnNpZ25lZCBlcF9kZXZzX2NyZWF0ZWQ6MTsJLyogZW5kcG9pbnQgImRldmljZXMiIGV4aXN0ICovCiAJdW5zaWduZWQgdW5yZWdpc3RlcmluZzoxOwkvKiB1bnJlZ2lzdHJhdGlvbiBpcyBpbiBwcm9ncmVzcyAqLwpAQCAtNDAxLDcgKzM5OCw2IEBACiAgKiBAcG9ydG51bTogcGFyZW50IHBvcnQgbnVtYmVyIChvcmlnaW4gMSkKICAqIEBsZXZlbDogbnVtYmVyIG9mIFVTQiBodWIgYW5jZXN0b3JzCiAgKiBAY2FuX3N1Ym1pdDogVVJCcyBtYXkgYmUgc3VibWl0dGVkCi0gKiBAZGlzY29uX3N1c3BlbmRlZDogZGlzY29ubmVjdGVkIHdoaWxlIHN1c3BlbmRlZAogICogQHBlcnNpc3RfZW5hYmxlZDogIFVTQl9QRVJTSVNUIGVuYWJsZWQgZm9yIHRoaXMgZGV2aWNlCiAgKiBAaGF2ZV9sYW5naWQ6IHdoZXRoZXIgc3RyaW5nX2xhbmdpZCBpcyB2YWxpZAogICogQGF1dGhvcml6ZWQ6IHBvbGljeSBoYXMgc2FpZCB3ZSBjYW4gdXNlIGl0OwpAQCAtNDIxLDIwICs0MTcsMTUgQEAKICAqIEB1c2Jmc19kZW50cnk6IHVzYmZzIGRlbnRyeSBlbnRyeSBmb3IgdGhlIGRldmljZQogICogQG1heGNoaWxkOiBudW1iZXIgb2YgcG9ydHMgaWYgaHViCiAgKiBAY2hpbGRyZW46IGNoaWxkIGRldmljZXMgLSBVU0IgZGV2aWNlcyB0aGF0IGFyZSBhdHRhY2hlZCB0byB0aGlzIGh1YgotICogQHBtX3VzYWdlX2NudDogdXNhZ2UgY291bnRlciBmb3IgYXV0b3N1c3BlbmQKICAqIEBxdWlya3M6IHF1aXJrcyBvZiB0aGUgd2hvbGUgZGV2aWNlCiAgKiBAdXJibnVtOiBudW1iZXIgb2YgVVJCcyBzdWJtaXR0ZWQgZm9yIHRoZSB3aG9sZSBkZXZpY2UKICAqIEBhY3RpdmVfZHVyYXRpb246IHRvdGFsIHRpbWUgZGV2aWNlIGlzIG5vdCBzdXNwZW5kZWQKLSAqIEBhdXRvc3VzcGVuZDogZm9yIGRlbGF5ZWQgYXV0b3N1c3BlbmRzCi0gKiBAYXV0b3Jlc3VtZTogZm9yIGF1dG9yZXN1bWVzIHJlcXVlc3RlZCB3aGlsZSBpbl9pbnRlcnJ1cHQKLSAqIEBwbV9tdXRleDogcHJvdGVjdHMgUE0gb3BlcmF0aW9ucwogICogQGxhc3RfYnVzeTogdGltZSBvZiBsYXN0IHVzZQogICogQGF1dG9zdXNwZW5kX2RlbGF5OiBpbiBqaWZmaWVzCiAgKiBAY29ubmVjdF90aW1lOiB0aW1lIGRldmljZSB3YXMgZmlyc3QgY29ubmVjdGVkCiAgKiBAZG9fcmVtb3RlX3dha2V1cDogIHJlbW90ZSB3YWtldXAgc2hvdWxkIGJlIGVuYWJsZWQKICAqIEByZXNldF9yZXN1bWU6IG5lZWRzIHJlc2V0IGluc3RlYWQgb2YgcmVzdW1lCiAgKiBAYXV0b3N1c3BlbmRfZGlzYWJsZWQ6IGF1dG9zdXNwZW5kIGRpc2FibGVkIGJ5IHRoZSB1c2VyCi0gKiBAc2tpcF9zeXNfcmVzdW1lOiBza2lwIHRoZSBuZXh0IHN5c3RlbSByZXN1bWUKICAqIEB3dXNiX2RldjogaWYgdGhpcyBpcyBhIFdpcmVsZXNzIFVTQiBkZXZpY2UsIGxpbmsgdG8gdGhlIFdVU0IKICAqCXNwZWNpZmljIGRhdGEgZm9yIHRoZSBkZXZpY2UuCiAgKiBAc2xvdF9pZDogU2xvdCBJRCBhc3NpZ25lZCBieSB4SENJCkBAIC00NzUsNyArNDY2LDYgQEAKIAl1OCBsZXZlbDsKIAogCXVuc2lnbmVkIGNhbl9zdWJtaXQ6MTsKLQl1bnNpZ25lZCBkaXNjb25fc3VzcGVuZGVkOjE7CiAJdW5zaWduZWQgcGVyc2lzdF9lbmFibGVkOjE7CiAJdW5zaWduZWQgaGF2ZV9sYW5naWQ6MTsKIAl1bnNpZ25lZCBhdXRob3JpemVkOjE7CkBAIC00OTksMTcgKzQ4OSwxMiBAQAogCWludCBtYXhjaGlsZDsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqY2hpbGRyZW5bVVNCX01BWENISUxEUkVOXTsKIAotCWludCBwbV91c2FnZV9jbnQ7CiAJdTMyIHF1aXJrczsKIAlhdG9taWNfdCB1cmJudW07CiAKIAl1bnNpZ25lZCBsb25nIGFjdGl2ZV9kdXJhdGlvbjsKIAogI2lmZGVmIENPTkZJR19QTQotCXN0cnVjdCBkZWxheWVkX3dvcmsgYXV0b3N1c3BlbmQ7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IGF1dG9yZXN1bWU7Ci0Jc3RydWN0IG11dGV4IHBtX211dGV4OwotCiAJdW5zaWduZWQgbG9uZyBsYXN0X2J1c3k7CiAJaW50IGF1dG9zdXNwZW5kX2RlbGF5OwogCXVuc2lnbmVkIGxvbmcgY29ubmVjdF90aW1lOwpAQCAtNTE3LDcgKzUwMiw2IEBACiAJdW5zaWduZWQgZG9fcmVtb3RlX3dha2V1cDoxOwogCXVuc2lnbmVkIHJlc2V0X3Jlc3VtZToxOwogCXVuc2lnbmVkIGF1dG9zdXNwZW5kX2Rpc2FibGVkOjE7Ci0JdW5zaWduZWQgc2tpcF9zeXNfcmVzdW1lOjE7CiAjZW5kaWYKIAlzdHJ1Y3Qgd3VzYl9kZXYgKnd1c2JfZGV2OwogCWludCBzbG90X2lkOwpAQCAtNTI4LDkgKzUxMiw5IEBACiBleHRlcm4gdm9pZCB1c2JfcHV0X2RldihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKIAogLyogVVNCIGRldmljZSBsb2NraW5nICovCi0jZGVmaW5lIHVzYl9sb2NrX2RldmljZSh1ZGV2KQkJZG93bigmKHVkZXYpLT5kZXYuc2VtKQotI2RlZmluZSB1c2JfdW5sb2NrX2RldmljZSh1ZGV2KQkJdXAoJih1ZGV2KS0+ZGV2LnNlbSkKLSNkZWZpbmUgdXNiX3RyeWxvY2tfZGV2aWNlKHVkZXYpCWRvd25fdHJ5bG9jaygmKHVkZXYpLT5kZXYuc2VtKQorI2RlZmluZSB1c2JfbG9ja19kZXZpY2UodWRldikJCWRldmljZV9sb2NrKCYodWRldiktPmRldikKKyNkZWZpbmUgdXNiX3VubG9ja19kZXZpY2UodWRldikJCWRldmljZV91bmxvY2soJih1ZGV2KS0+ZGV2KQorI2RlZmluZSB1c2JfdHJ5bG9ja19kZXZpY2UodWRldikJZGV2aWNlX3RyeWxvY2soJih1ZGV2KS0+ZGV2KQogZXh0ZXJuIGludCB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAogCQkJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKTsKIApAQCAtNTQyLDIxICs1MjYsMTUgQEAKIAogLyogVVNCIGF1dG9zdXNwZW5kIGFuZCBhdXRvcmVzdW1lICovCiAjaWZkZWYgQ09ORklHX1VTQl9TVVNQRU5ECitleHRlcm4gaW50IHVzYl9lbmFibGVfYXV0b3N1c3BlbmQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOworZXh0ZXJuIGludCB1c2JfZGlzYWJsZV9hdXRvc3VzcGVuZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CisKIGV4dGVybiBpbnQgdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKIGV4dGVybiB2b2lkIHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CiBleHRlcm4gaW50IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZV9hc3luYyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CiBleHRlcm4gdm9pZCB1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2VfYXN5bmMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlX25vX3Jlc3VtZSgKLQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0JYXRvbWljX2luYygmaW50Zi0+cG1fdXNhZ2VfY250KTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCB1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Vfbm9fc3VzcGVuZCgKLQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCi17Ci0JYXRvbWljX2RlYygmaW50Zi0+cG1fdXNhZ2VfY250KTsKLX0KK2V4dGVybiB2b2lkIHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZV9ub19yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworZXh0ZXJuIHZvaWQgdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlX25vX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgdXNiX21hcmtfbGFzdF9idXN5KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewpAQCAtNTY1LDYgKzU0MywxMSBAQAogCiAjZWxzZQogCitzdGF0aWMgaW5saW5lIGludCB1c2JfZW5hYmxlX2F1dG9zdXNwZW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgdXNiX2Rpc2FibGVfYXV0b3N1c3BlbmQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7IHJldHVybiAwOyB9CisKIHN0YXRpYyBpbmxpbmUgaW50IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZV9hc3luYyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKQEAgLTE1ODMsMTQgKzE1NjYsMTggQEAKIGV4dGVybiB2b2lkIHVzYl91bnJlZ2lzdGVyX25vdGlmeShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKTsKIAogI2lmZGVmIERFQlVHCi0jZGVmaW5lIGRiZyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZvcm1hdCAiXG4iICwgXAotCV9fRklMRV9fICwgIyMgYXJnKQorI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pCQkJCQkJXAorCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQgIlxuIiwgX19GSUxFX18sICMjYXJnKQogI2Vsc2UKLSNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKQkJCQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKDApCQkJCQkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmb3JtYXQgIlxuIiwgX19GSUxFX18sICMjYXJnKTsgXAorfSB3aGlsZSAoMCkKICNlbmRpZgogCi0jZGVmaW5lIGVycihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FICI6ICIgXAotCWZvcm1hdCAiXG4iICwgIyMgYXJnKQorI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pCQkJCQlcCisJcHJpbnRrKEtFUk5fRVJSIEtCVUlMRF9NT0ROQU1FICI6ICIgZm9ybWF0ICJcbiIsICMjYXJnKQogCiAvKiBkZWJ1Z2ZzIHN0dWZmICovCiBleHRlcm4gc3RydWN0IGRlbnRyeSAqdXNiX2RlYnVnX3Jvb3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9LYnVpbGQgYi9pbmNsdWRlL2xpbnV4L3VzYi9LYnVpbGQKaW5kZXggNTRjNDQ2My4uMjlmZDczYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL0tidWlsZApAQCAtNSw0ICs1LDMgQEAKIGhlYWRlci15ICs9IG1pZGkuaAogaGVhZGVyLXkgKz0gZ19wcmludGVyLmgKIGhlYWRlci15ICs9IHRtYy5oCi1oZWFkZXIteSArPSB2c3R1c2IuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvYXRtZWxfdXNiYV91ZGMuaCBiL2luY2x1ZGUvbGludXgvdXNiL2F0bWVsX3VzYmFfdWRjLmgKaW5kZXggNjMxMWZhMi4uYmFmNDFjOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvYXRtZWxfdXNiYV91ZGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9hdG1lbF91c2JhX3VkYy5oCkBAIC0xNSw2ICsxNSw3IEBACiAKIHN0cnVjdCB1c2JhX3BsYXRmb3JtX2RhdGEgewogCWludAkJCXZidXNfcGluOworCWludAkJIAl2YnVzX3Bpbl9pbnZlcnRlZDsKIAlpbnQJCQludW1fZXA7CiAJc3RydWN0IHVzYmFfZXBfZGF0YQllcFswXTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9hdWRpby5oIGIvaW5jbHVkZS9saW51eC91c2IvYXVkaW8uaAppbmRleCA2YmIyOTM2Li40ZDNlNDUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9hdWRpby5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL2F1ZGlvLmgKQEAgLTI2OSw4ICsyNjksOCBAQAogCV9fdTggYkxlbmd0aDsKIAlfX3U4IGJEZXNjcmlwdG9yVHlwZTsKIAlfX3U4IGJEZXNjcmlwdG9yU3VidHlwZTsKLQlfX3U4IGJTdWJzbG90U2l6ZTsKIAlfX3U4IGJGb3JtYXRUeXBlOworCV9fdTggYlN1YnNsb3RTaXplOwogCV9fdTggYkJpdFJlc29sdXRpb247CiAJX191OCBiSGVhZGVyTGVuZ3RoOwogCV9fdTggYkNvbnRyb2xTaXplOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvY2g5LmggYi9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaAppbmRleCA5NDAxMmU2Li5lNTgzNjlmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9jaDkuaApAQCAtNzc1LDcgKzc3NSw3IEBACiAJVVNCX1NQRUVEX1VOS05PV04gPSAwLAkJCS8qIGVudW1lcmF0aW5nICovCiAJVVNCX1NQRUVEX0xPVywgVVNCX1NQRUVEX0ZVTEwsCQkvKiB1c2IgMS4xICovCiAJVVNCX1NQRUVEX0hJR0gsCQkJCS8qIHVzYiAyLjAgKi8KLQlVU0JfU1BFRURfVkFSSUFCTEUsCQkJLyogd2lyZWxlc3MgKHVzYiAyLjUpICovCisJVVNCX1NQRUVEX1dJUkVMRVNTLAkJCS8qIHdpcmVsZXNzICh1c2IgMi41KSAqLwogCVVTQl9TUEVFRF9TVVBFUiwJCQkvKiB1c2IgMy4wICovCiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9tdXNiLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9tdXNiLmgKaW5kZXggZDQzNzU1Ni4uN2FjZWYwMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvbXVzYi5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL211c2IuaApAQCAtMzAsMjYgKzMwLDI2IEBACiBzdHJ1Y3QgbXVzYl9oZHJjX2NvbmZpZyB7CiAJLyogTVVTQiBjb25maWd1cmF0aW9uLXNwZWNpZmljIGRldGFpbHMgKi8KIAl1bnNpZ25lZAltdWx0aXBvaW50OjE7CS8qIG11bHRpcG9pbnQgZGV2aWNlICovCi0JdW5zaWduZWQJZHluX2ZpZm86MTsJLyogc3VwcG9ydHMgZHluYW1pYyBmaWZvIHNpemluZyAqLwotCXVuc2lnbmVkCXNvZnRfY29uOjE7CS8qIHNvZnQgY29ubmVjdCByZXF1aXJlZCAqLwotCXVuc2lnbmVkCXV0bV8xNjoxOwkvKiB1dG0gZGF0YSB3aXRkaCBpcyAxNiBiaXRzICovCisJdW5zaWduZWQJZHluX2ZpZm86MSBfX2RlcHJlY2F0ZWQ7IC8qIHN1cHBvcnRzIGR5bmFtaWMgZmlmbyBzaXppbmcgKi8KKwl1bnNpZ25lZAlzb2Z0X2NvbjoxIF9fZGVwcmVjYXRlZDsgLyogc29mdCBjb25uZWN0IHJlcXVpcmVkICovCisJdW5zaWduZWQJdXRtXzE2OjEgX19kZXByZWNhdGVkOyAvKiB1dG0gZGF0YSB3aXRkaCBpcyAxNiBiaXRzICovCiAJdW5zaWduZWQJYmlnX2VuZGlhbjoxOwkvKiB0cnVlIGlmIENQVSB1c2VzIGJpZy1lbmRpYW4gKi8KIAl1bnNpZ25lZAltdWx0X2J1bGtfdHg6MTsJLyogVHggZXAgcmVxdWlyZWQgZm9yIG11bHRidWxrIHBrdHMgKi8KIAl1bnNpZ25lZAltdWx0X2J1bGtfcng6MTsJLyogUnggZXAgcmVxdWlyZWQgZm9yIG11bHRidWxrIHBrdHMgKi8KIAl1bnNpZ25lZAloaWdoX2lzb190eDoxOwkvKiBUeCBlcCByZXF1aXJlZCBmb3IgSEIgaXNvICovCiAJdW5zaWduZWQJaGlnaF9pc29fcng6MTsJLyogUnggZXAgcmVxdWlyZWQgZm9yIEhEIGlzbyAqLwotCXVuc2lnbmVkCWRtYToxOwkJLyogc3VwcG9ydHMgRE1BICovCi0JdW5zaWduZWQJdmVuZG9yX3JlcToxOwkvKiB2ZW5kb3IgcmVnaXN0ZXJzIHJlcXVpcmVkICovCisJdW5zaWduZWQJZG1hOjEgX19kZXByZWNhdGVkOyAvKiBzdXBwb3J0cyBETUEgKi8KKwl1bnNpZ25lZAl2ZW5kb3JfcmVxOjEgX19kZXByZWNhdGVkOyAvKiB2ZW5kb3IgcmVnaXN0ZXJzIHJlcXVpcmVkICovCiAKIAl1OAkJbnVtX2VwczsJLyogbnVtYmVyIG9mIGVuZHBvaW50cyBfd2l0aF8gZXAwICovCi0JdTgJCWRtYV9jaGFubmVsczsJLyogbnVtYmVyIG9mIGRtYSBjaGFubmVscyAqLworCXU4CQlkbWFfY2hhbm5lbHMgX19kZXByZWNhdGVkOyAvKiBudW1iZXIgb2YgZG1hIGNoYW5uZWxzICovCiAJdTgJCWR5bl9maWZvX3NpemU7CS8qIGR5bmFtaWMgc2l6ZSBpbiBieXRlcyAqLwotCXU4CQl2ZW5kb3JfY3RybDsJLyogdmVuZG9yIGNvbnRyb2wgcmVnIHdpZHRoICovCi0JdTgJCXZlbmRvcl9zdGF0OwkvKiB2ZW5kb3Igc3RhdHVzIHJlZyB3aXRkaCAqLwotCXU4CQlkbWFfcmVxX2NoYW47CS8qIGJpdG1hc2sgZm9yIHJlcXVpcmVkIGRtYSBjaGFubmVscyAqLworCXU4CQl2ZW5kb3JfY3RybCBfX2RlcHJlY2F0ZWQ7IC8qIHZlbmRvciBjb250cm9sIHJlZyB3aWR0aCAqLworCXU4CQl2ZW5kb3Jfc3RhdCBfX2RlcHJlY2F0ZWQ7IC8qIHZlbmRvciBzdGF0dXMgcmVnIHdpdGRoICovCisJdTgJCWRtYV9yZXFfY2hhbiBfX2RlcHJlY2F0ZWQ7IC8qIGJpdG1hc2sgZm9yIHJlcXVpcmVkIGRtYSBjaGFubmVscyAqLwogCXU4CQlyYW1fYml0czsJLyogcmFtIGFkZHJlc3Mgc2l6ZSAqLwogCi0Jc3RydWN0IG11c2JfaGRyY19lcHNfYml0cyAqZXBzX2JpdHM7CisJc3RydWN0IG11c2JfaGRyY19lcHNfYml0cyAqZXBzX2JpdHMgX19kZXByZWNhdGVkOwogI2lmZGVmIENPTkZJR19CTEFDS0ZJTgogICAgICAgICAvKiBBIEdQSU8gY29udHJvbGxpbmcgVlJTRUwgaW4gQmxhY2tmaW4gKi8KICAgICAgICAgdW5zaWduZWQgaW50ICAgIGdwaW9fdnJzZWw7CkBAIC03Niw2ICs3Niw5IEBACiAJLyogKEhPU1Qgb3IgT1RHKSBtc2VjLzIgYWZ0ZXIgVkJVUyBvbiB0aWxsIHBvd2VyIGdvb2QgKi8KIAl1OAkJcG90cGd0OwogCisJLyogKEhPU1Qgb3IgT1RHKSBwcm9ncmFtIFBIWSBmb3IgZXh0ZXJuYWwgVmJ1cyAqLworCXVuc2lnbmVkCWV4dHZidXM6MTsKKwogCS8qIFBvd2VyIHRoZSBkZXZpY2Ugb24gb3Igb2ZmICovCiAJaW50CQkoKnNldF9wb3dlcikoaW50IHN0YXRlKTsKIApAQCAtODQsNiArODcsOSBAQAogCiAJLyogTVVTQiBjb25maWd1cmF0aW9uLXNwZWNpZmljIGRldGFpbHMgKi8KIAlzdHJ1Y3QgbXVzYl9oZHJjX2NvbmZpZwkqY29uZmlnOworCisJLyogQXJjaGl0ZWN0dXJlIHNwZWNpZmljIGJvYXJkIGRhdGEJKi8KKwl2b2lkCQkqYm9hcmRfZGF0YTsKIH07CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2Ivb3RnLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9vdGcuaAppbmRleCA1MmJiOTE3Li5mODMwMmQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9vdGcuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9vdGcuaApAQCAtOSw2ICs5LDggQEAKICNpZm5kZWYgX19MSU5VWF9VU0JfT1RHX0gKICNkZWZpbmUgX19MSU5VWF9VU0JfT1RHX0gKIAorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisKIC8qIE9URyBkZWZpbmVzIGxvdHMgb2YgZW51bWVyYXRpb24gc3RhdGVzIGJlZm9yZSBkZXZpY2UgcmVzZXQgKi8KIGVudW0gdXNiX290Z19zdGF0ZSB7CiAJT1RHX1NUQVRFX1VOREVGSU5FRCA9IDAsCkBAIC0zMyw2ICszNSwxNCBAQAogCU9UR19TVEFURV9BX1ZCVVNfRVJSLAogfTsKIAorZW51bSB1c2JfeGNlaXZfZXZlbnRzIHsKKwlVU0JfRVZFTlRfTk9ORSwgICAgICAgICAvKiBubyBldmVudHMgb3IgY2FibGUgZGlzY29ubmVjdGVkICovCisJVVNCX0VWRU5UX1ZCVVMsICAgICAgICAgLyogdmJ1cyB2YWxpZCBldmVudCAqLworCVVTQl9FVkVOVF9JRCwgICAgICAgICAgIC8qIGlkIHdhcyBncm91bmRlZCAqLworCVVTQl9FVkVOVF9DSEFSR0VSLCAgICAgIC8qIHVzYiBkZWRpY2F0ZWQgY2hhcmdlciAqLworCVVTQl9FVkVOVF9FTlVNRVJBVEVELCAgIC8qIGdhZGdldCBkcml2ZXIgZW51bWVyYXRlZCAqLworfTsKKwogI2RlZmluZSBVU0JfT1RHX1BVTExVUF9JRAkJKDEgPDwgMCkKICNkZWZpbmUgVVNCX09UR19QVUxMRE9XTl9EUAkJKDEgPDwgMSkKICNkZWZpbmUgVVNCX09UR19QVUxMRE9XTl9ETQkJKDEgPDwgMikKQEAgLTcwLDYgKzgwLDkgQEAKIAlzdHJ1Y3Qgb3RnX2lvX2FjY2Vzc19vcHMJKmlvX29wczsKIAl2b2lkIF9faW9tZW0JCQkqaW9fcHJpdjsKIAorCS8qIGZvciBub3RpZmljYXRpb24gb2YgdXNiX3hjZWl2X2V2ZW50cyAqLworCXN0cnVjdCBibG9ja2luZ19ub3RpZmllcl9oZWFkCW5vdGlmaWVyOworCiAJLyogdG8gcGFzcyBleHRyYSBwb3J0IHN0YXR1cyB0byB0aGUgcm9vdCBodWIgKi8KIAl1MTYJCQlwb3J0X3N0YXR1czsKIAl1MTYJCQlwb3J0X2NoYW5nZTsKQEAgLTExMCw5ICsxMjMsMTkgQEAKIC8qIGZvciBib2FyZC1zcGVjaWZpYyBpbml0IGxvZ2ljICovCiBleHRlcm4gaW50IG90Z19zZXRfdHJhbnNjZWl2ZXIoc3RydWN0IG90Z190cmFuc2NlaXZlciAqKTsKIAorI2lmIGRlZmluZWQoQ09ORklHX05PUF9VU0JfWENFSVYpIHx8IGRlZmluZWQoQ09ORklHX05PUF9VU0JfWENFSVZfTU9EVUxFKQogLyogc29tZXRpbWVzIHRyYW5zY2VpdmVycyBhcmUgYWNjZXNzZWQgb25seSB0aHJvdWdoIGUuZy4gVUxQSSAqLwogZXh0ZXJuIHZvaWQgdXNiX25vcF94Y2Vpdl9yZWdpc3Rlcih2b2lkKTsKIGV4dGVybiB2b2lkIHVzYl9ub3BfeGNlaXZfdW5yZWdpc3Rlcih2b2lkKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgdXNiX25vcF94Y2Vpdl9yZWdpc3Rlcih2b2lkKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXNiX25vcF94Y2Vpdl91bnJlZ2lzdGVyKHZvaWQpCit7Cit9CisjZW5kaWYKIAogLyogaGVscGVycyBmb3IgZGlyZWN0IGFjY2VzcyB0aHJ1IGxvdy1sZXZlbCBpbyBpbnRlcmZhY2UgKi8KIHN0YXRpYyBpbmxpbmUgaW50IG90Z19pb19yZWFkKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90ZywgdTMyIHJlZykKQEAgLTIwMyw2ICsyMjYsMTggQEAKIAlyZXR1cm4gb3RnLT5zdGFydF9zcnAob3RnKTsKIH0KIAorLyogbm90aWZpZXJzICovCitzdGF0aWMgaW5saW5lIGludAorb3RnX3JlZ2lzdGVyX25vdGlmaWVyKHN0cnVjdCBvdGdfdHJhbnNjZWl2ZXIgKm90Zywgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYikKK3sKKwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJm90Zy0+bm90aWZpZXIsIG5iKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitvdGdfdW5yZWdpc3Rlcl9ub3RpZmllcihzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsIHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpCit7CisJYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fdW5yZWdpc3Rlcigmb3RnLT5ub3RpZmllciwgbmIpOworfQogCiAvKiBmb3IgT1RHIGNvbnRyb2xsZXIgZHJpdmVycyAoYW5kIG1heWJlIG90aGVyIHN0dWZmKSAqLwogZXh0ZXJuIGludCB1c2JfYnVzX3N0YXJ0X2VudW0oc3RydWN0IHVzYl9idXMgKmJ1cywgdW5zaWduZWQgcG9ydF9udW0pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvcXVpcmtzLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9xdWlya3MuaAppbmRleCAyNTI2ZjNiLi4wYTU1NWRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi9xdWlya3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9xdWlya3MuaApAQCAtMTksNCArMTksNyBAQAogLyogZGV2aWNlIGNhbid0IGhhbmRsZSBpdHMgQ29uZmlndXJhdGlvbiBvciBJbnRlcmZhY2Ugc3RyaW5ncyAqLwogI2RlZmluZSBVU0JfUVVJUktfQ09ORklHX0lOVEZfU1RSSU5HUwkweDAwMDAwMDA4CiAKKy8qZGV2aWNlIHdpbGwgbW9ycGggaWYgcmVzZXQsIGRvbid0IHVzZSByZXNldCBmb3IgaGFuZGxpbmcgZXJyb3JzICovCisjZGVmaW5lIFVTQl9RVUlSS19SRVNFVF9NT1JQSFMJCTB4MDAwMDAwMTAKKwogI2VuZGlmIC8qIF9fTElOVVhfVVNCX1FVSVJLU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9zZXJpYWwuaCBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCmluZGV4IDE4MTkzOTYuLjBhNDU4YjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL3NlcmlhbC5oCkBAIC0zNTEsMTQgKzM1MSwxMSBAQAogCiAvKiBVc2Ugb3VyIG93biBkYmcgbWFjcm8gKi8KICN1bmRlZiBkYmcKLSNkZWZpbmUgZGJnKGZvcm1hdCwgYXJnLi4uKSBcCi0JZG8geyBcCi0JCWlmIChkZWJ1ZykgXAotCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZvcm1hdCAiXG4iICwgX19GSUxFX18gLCBcCi0JCQkJIyMgYXJnKTsgXAotCX0gd2hpbGUgKDApCi0KLQorI2RlZmluZSBkYmcoZm9ybWF0LCBhcmcuLi4pCQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlpZiAoZGVidWcpCQkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZvcm1hdCAiXG4iLCBfX0ZJTEVfXywgIyNhcmcpOwlcCit9IHdoaWxlICgwKQogCiAjZW5kaWYgLyogX19MSU5VWF9VU0JfU0VSSUFMX0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvdXNibmV0LmggYi9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaAppbmRleCA4Y2U2MTM1Li5kZjFlODNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi91c2JuZXQuaApAQCAtMjE0LDI1ICsyMTQsNCBAQAogZXh0ZXJuIHZvaWQgdXNibmV0X2dldF9kcnZpbmZvIChzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICopOwogZXh0ZXJuIGludCB1c2JuZXRfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KTsKIAotLyogbWVzc2FnaW5nIHN1cHBvcnQgaW5jbHVkZXMgdGhlIGludGVyZmFjZSBuYW1lLCBzbyBpdCBtdXN0IG5vdCBiZQotICogdXNlZCBiZWZvcmUgaXQgaGFzIG9uZSAuLi4gbm90YWJseSwgaW4gbWluaWRyaXZlciBiaW5kKCkgY2FsbHMuCi0gKi8KLSNpZmRlZiBERUJVRwotI2RlZmluZSBkZXZkYmcodXNibmV0LCBmbXQsIGFyZy4uLikgXAotCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmbXQgIlxuIiAsICh1c2JuZXQpLT5uZXQtPm5hbWUgLCAjIyBhcmcpCi0jZWxzZQotI2RlZmluZSBkZXZkYmcodXNibmV0LCBmbXQsIGFyZy4uLikgXAotCSh7IGlmICgwKSBwcmludGsoS0VSTl9ERUJVRyAiJXM6ICIgZm10ICJcbiIgLCAodXNibmV0KS0+bmV0LT5uYW1lICwgXAotCQkjIyBhcmcpOyAwOyB9KQotI2VuZGlmCi0KLSNkZWZpbmUgZGV2ZXJyKHVzYm5ldCwgZm10LCBhcmcuLi4pIFwKLQlwcmludGsoS0VSTl9FUlIgIiVzOiAiIGZtdCAiXG4iICwgKHVzYm5ldCktPm5ldC0+bmFtZSAsICMjIGFyZykKLSNkZWZpbmUgZGV2d2Fybih1c2JuZXQsIGZtdCwgYXJnLi4uKSBcCi0JcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIgZm10ICJcbiIgLCAodXNibmV0KS0+bmV0LT5uYW1lICwgIyMgYXJnKQotCi0jZGVmaW5lIGRldmluZm8odXNibmV0LCBmbXQsIGFyZy4uLikgXAotCXByaW50ayhLRVJOX0lORk8gIiVzOiAiIGZtdCAiXG4iICwgKHVzYm5ldCktPm5ldC0+bmFtZSAsICMjIGFyZyk7IFwKLQotCiAjZW5kaWYgLyogX19MSU5VWF9VU0JfVVNCTkVUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiL3ZzdHVzYi5oIGIvaW5jbHVkZS9saW51eC91c2IvdnN0dXNiLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjZmFjNjcuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9saW51eC91c2IvdnN0dXNiLmgKKysrIC9kZXYvbnVsbApAQCAtMSw3MSArMCwwIEBACi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBGaWxlOiBkcml2ZXJzL3VzYi9taXNjL3ZzdHVzYi5oCi0gKgotICogIFB1cnBvc2U6IFN1cHBvcnQgZm9yIHRoZSBidWxrIFVTQiBWZXJuaWVyIFNwZWN0cm9waG90b21ldGVycwotICoKLSAqICBBdXRob3I6ICAgICBFUXdhcmUgRW5naW5lZXJpbmcsIEluYy4KLSAqICAgICAgICAgICAgICBPcmVnb24gQ2l0eSwgT1IsIFVTQSA5NzA0NQotICoKLSAqICBDb3B5cmlnaHQ6ICAyMDA3LCAyMDA4Ci0gKiAgICAgICAgICAgICAgVmVybmllciBTb2Z0d2FyZSAmIFRlY2hub2xvZ3kKLSAqICAgICAgICAgICAgICBCZWF2ZXJ0b24sIE9SLCBVU0EgOTcwMDUKLSAqCi0gKiAgV2ViOiAgICAgICAgd3d3LnZlcm5pZXIuY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgVGhlIHZzdHVzYiBtb2R1bGUgaXMgYSBzdGFuZGFyZCB1c2IgJ2NsaWVudCcgZHJpdmVyIHJ1bm5pbmcgb24gdG9wIG9mIHRoZQotICogIHN0YW5kYXJkIHVzYiBob3N0IGNvbnRyb2xsZXIgc3RhY2suCi0gKgotICogIEluIGdlbmVyYWwsIHZzdHVzYiBzdXBwb3J0cyBzdGFuZGFyZCBidWxrIHVzYiBwaXBlcy4gIEl0IHN1cHBvcnRzIG11bHRpcGxlCi0gKiAgZGV2aWNlcyBhbmQgbXVsdGlwbGUgcGlwZXMgcGVyIGRldmljZS4KLSAqCi0gKiAgVGhlIHZzdHVzYiBkcml2ZXIgc3VwcG9ydHMgdHdvIGludGVyZmFjZXM6Ci0gKiAgMSAtIGlvY3RsIFNFTkRfUElQRS9SRUNWX1BJUEUgLSBhIGdlbmVyYWwgYnVsayB3cml0ZS9yZWFkIG1zZwotICogIAlpbnRlcmZhY2UgdG8gYW55IHBpcGUgd2l0aCB0aW1lb3V0IHN1cHBvcnQ7Ci0gKiAgMiAtIHN0YW5kYXJkIHJlYWQvd3JpdGUgd2l0aCBpb2N0bCBjb25maWcgLSBvZmZlcnMgc3RhbmRhcmQgcmVhZC93cml0ZQotICogIAlpbnRlcmZhY2Ugd2l0aCBpb2N0bCBjb25maWd1cmVkIHBpcGVzIGFuZCB0aW1lb3V0cy4KLSAqCi0gKiAgQm90aCBpbnRlcmZhY2VzIGNhbiBiZSBzaWduYWwgZnJvbSBvdGhlciBwcm9jZXNzIGFuZCB3aWxsIGFib3J0IGl0cyBpL28KLSAqICBvcGVyYXRpb24uCi0gKgotICogIEEgdGltZW91dCBvZiAwIG1lYW5zIE5PIHRpbWVvdXQuICBUaGUgdXNlciBjYW4gc3RpbGwgdGVybWluYXRlIHRoZSByZWFkIHZpYQotICogIHNpZ25hbC4KLSAqCi0gKiAgSWYgdXNpbmcgbXVsdGlwbGUgdGhyZWFkcyB3aXRoIHRoaXMgZHJpdmVyLCB0aGUgdXNlciBzaG91bGQgZW5zdXJlIHRoYXQKLSAqICBhbnkgcmVhZHMsIHdyaXRlcywgb3IgaW9jdGxzIGFyZSBjb21wbGV0ZSBiZWZvcmUgY2xvc2luZyB0aGUgZGV2aWNlLgotICogIENoYW5naW5nIHJlYWQvd3JpdGUgdGltZW91dHMgb3IgcGlwZXMgdGFrZXMgZWZmZWN0IG9uIG5leHQgcmVhZC93cml0ZS4KLSAqCi0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLXN0cnVjdCB2c3R1c2JfYXJncyB7Ci0JdW5pb24gewotCQkvKiB0aGlzIHN0cnVjdCBpcyB1c2VkIGZvciBJT0NUTF9WU1RVU0JfU0VORF9QSVBFLAkqCi0JCSAqIElPQ1RMX1ZTVFVTQl9SRUNWX1BJUEUsIGFuZCByZWFkKCkvd3JpdGUoKSBmb3BzCSovCi0JCXN0cnVjdCB7Ci0JCQl2b2lkIF9fdXNlcgkqYnVmZmVyOwotCQkJc2l6ZV90ICAgICAgICAgIGNvdW50OwotCQkJdW5zaWduZWQgaW50ICAgIHRpbWVvdXRfbXM7Ci0JCQlpbnQgICAgICAgICAgICAgcGlwZTsKLQkJfTsKLQotCQkvKiB0aGlzIG9uZSBpcyB1c2VkIGZvciBJT0NUTF9WU1RVU0JfQ09ORklHX1JXICAJKi8KLQkJc3RydWN0IHsKLQkJCWludCByZF9waXBlOwotCQkJaW50IHJkX3RpbWVvdXRfbXM7Ci0JCQlpbnQgd3JfcGlwZTsKLQkJCWludCB3cl90aW1lb3V0X21zOwotCQl9OwotCX07Ci19OwotCi0jZGVmaW5lIFZTVF9JT0NfTUFHSUMgJ0wnCi0jZGVmaW5lIFZTVF9JT0NfRklSU1QgMHgyMAotI2RlZmluZSBJT0NUTF9WU1RVU0JfU0VORF9QSVBFCV9JTyhWU1RfSU9DX01BR0lDLCBWU1RfSU9DX0ZJUlNUKQotI2RlZmluZSBJT0NUTF9WU1RVU0JfUkVDVl9QSVBFCV9JTyhWU1RfSU9DX01BR0lDLCBWU1RfSU9DX0ZJUlNUICsgMSkKLSNkZWZpbmUgSU9DVExfVlNUVVNCX0NPTkZJR19SVwlfSU8oVlNUX0lPQ19NQUdJQywgVlNUX0lPQ19GSVJTVCArIDIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZnYV9zd2l0Y2hlcm9vLmggYi9pbmNsdWRlL2xpbnV4L3ZnYV9zd2l0Y2hlcm9vLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU5YWIxMwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdmdhX3N3aXRjaGVyb28uaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFJlZCBIYXQgSW5jLgorICogQXV0aG9yIDogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4KKyAqCisgKiBMaWNlbnNlZCB1bmRlciBHUEx2MgorICoKKyAqIHZnYV9zd2l0Y2hlcm9vLmggLSBTdXBwb3J0IGZvciBsYXB0b3Agd2l0aCBkdWFsIEdQVSB1c2luZyBvbmUgc2V0IG9mIG91dHB1dHMKKyAqLworCisjaW5jbHVkZSA8bGludXgvZmIuaD4KKworZW51bSB2Z2Ffc3dpdGNoZXJvb19zdGF0ZSB7CisJVkdBX1NXSVRDSEVST09fT0ZGLAorCVZHQV9TV0lUQ0hFUk9PX09OLAorfTsKKworZW51bSB2Z2Ffc3dpdGNoZXJvb19jbGllbnRfaWQgeworCVZHQV9TV0lUQ0hFUk9PX0lHRCwKKwlWR0FfU1dJVENIRVJPT19ESVMsCisJVkdBX1NXSVRDSEVST09fTUFYX0NMSUVOVFMsCit9OworCitzdHJ1Y3QgdmdhX3N3aXRjaGVyb29faGFuZGxlciB7CisJaW50ICgqc3dpdGNodG8pKGVudW0gdmdhX3N3aXRjaGVyb29fY2xpZW50X2lkIGlkKTsKKwlpbnQgKCpwb3dlcl9zdGF0ZSkoZW51bSB2Z2Ffc3dpdGNoZXJvb19jbGllbnRfaWQgaWQsCisJCQkgICBlbnVtIHZnYV9zd2l0Y2hlcm9vX3N0YXRlIHN0YXRlKTsKKwlpbnQgKCppbml0KSh2b2lkKTsKKwlpbnQgKCpnZXRfY2xpZW50X2lkKShzdHJ1Y3QgcGNpX2RldiAqcGRldik7Cit9OworCisKKyNpZiBkZWZpbmVkKENPTkZJR19WR0FfU1dJVENIRVJPTykKK3ZvaWQgdmdhX3N3aXRjaGVyb29fdW5yZWdpc3Rlcl9jbGllbnQoc3RydWN0IHBjaV9kZXYgKmRldik7CitpbnQgdmdhX3N3aXRjaGVyb29fcmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJICAgdm9pZCAoKnNldF9ncHVfc3RhdGUpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGVudW0gdmdhX3N3aXRjaGVyb29fc3RhdGUpLAorCQkJCSAgIGJvb2wgKCpjYW5fc3dpdGNoKShzdHJ1Y3QgcGNpX2RldiAqZGV2KSk7CisKK3ZvaWQgdmdhX3N3aXRjaGVyb29fY2xpZW50X2ZiX3NldChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCQkJCSAgc3RydWN0IGZiX2luZm8gKmluZm8pOworCitpbnQgdmdhX3N3aXRjaGVyb29fcmVnaXN0ZXJfaGFuZGxlcihzdHJ1Y3QgdmdhX3N3aXRjaGVyb29faGFuZGxlciAqaGFuZGxlcik7Cit2b2lkIHZnYV9zd2l0Y2hlcm9vX3VucmVnaXN0ZXJfaGFuZGxlcih2b2lkKTsKKworaW50IHZnYV9zd2l0Y2hlcm9vX3Byb2Nlc3NfZGVsYXllZF9zd2l0Y2godm9pZCk7CisKKyNlbHNlCisKK3N0YXRpYyBpbmxpbmUgdm9pZCB2Z2Ffc3dpdGNoZXJvb191bnJlZ2lzdGVyX2NsaWVudChzdHJ1Y3QgcGNpX2RldiAqZGV2KSB7fQorc3RhdGljIGlubGluZSBpbnQgdmdhX3N3aXRjaGVyb29fcmVnaXN0ZXJfY2xpZW50KHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCSAgdm9pZCAoKnNldF9ncHVfc3RhdGUpKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGVudW0gdmdhX3N3aXRjaGVyb29fc3RhdGUpLAorCQkJCQkgIGJvb2wgKCpjYW5fc3dpdGNoKShzdHJ1Y3QgcGNpX2RldiAqZGV2KSkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIHZnYV9zd2l0Y2hlcm9vX2NsaWVudF9mYl9zZXQoc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IGZiX2luZm8gKmluZm8pIHt9CitzdGF0aWMgaW5saW5lIGludCB2Z2Ffc3dpdGNoZXJvb19yZWdpc3Rlcl9oYW5kbGVyKHN0cnVjdCB2Z2Ffc3dpdGNoZXJvb19oYW5kbGVyICpoYW5kbGVyKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdmdhX3N3aXRjaGVyb29fdW5yZWdpc3Rlcl9oYW5kbGVyKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIGludCB2Z2Ffc3dpdGNoZXJvb19wcm9jZXNzX2RlbGF5ZWRfc3dpdGNoKHZvaWQpIHsgcmV0dXJuIDA7IH0KKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Zob3N0LmggYi9pbmNsdWRlL2xpbnV4L3Zob3N0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg0N2YxZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvdmhvc3QuaApAQCAtMCwwICsxLDEzMCBAQAorI2lmbmRlZiBfTElOVVhfVkhPU1RfSAorI2RlZmluZSBfTElOVVhfVkhPU1RfSAorLyogVXNlcnNwYWNlIGludGVyZmFjZSBmb3IgaW4ta2VybmVsIHZpcnRpbyBhY2NlbGVyYXRvcnMuICovCisKKy8qIHZob3N0IGlzIHVzZWQgdG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc3lzdGVtIGNhbGxzIGludm9sdmVkIGluIHZpcnRpby4KKyAqCisgKiBFeGlzdGluZyB2aXJ0aW8gbmV0IGNvZGUgaXMgdXNlZCBpbiB0aGUgZ3Vlc3Qgd2l0aG91dCBtb2RpZmljYXRpb24uCisgKgorICogVGhpcyBoZWFkZXIgaW5jbHVkZXMgaW50ZXJmYWNlIHVzZWQgYnkgdXNlcnNwYWNlIGh5cGVydmlzb3IgZm9yCisgKiBkZXZpY2UgY29uZmlndXJhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19yaW5nLmg+CisKK3N0cnVjdCB2aG9zdF92cmluZ19zdGF0ZSB7CisJdW5zaWduZWQgaW50IGluZGV4OworCXVuc2lnbmVkIGludCBudW07Cit9OworCitzdHJ1Y3Qgdmhvc3RfdnJpbmdfZmlsZSB7CisJdW5zaWduZWQgaW50IGluZGV4OworCWludCBmZDsgLyogUGFzcyAtMSB0byB1bmJpbmQgZnJvbSBmaWxlLiAqLworCit9OworCitzdHJ1Y3Qgdmhvc3RfdnJpbmdfYWRkciB7CisJdW5zaWduZWQgaW50IGluZGV4OworCS8qIE9wdGlvbiBmbGFncy4gKi8KKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJLyogRmxhZyB2YWx1ZXM6ICovCisJLyogV2hldGhlciBsb2cgYWRkcmVzcyBpcyB2YWxpZC4gSWYgc2V0IGVuYWJsZXMgbG9nZ2luZy4gKi8KKyNkZWZpbmUgVkhPU1RfVlJJTkdfRl9MT0cgMAorCisJLyogU3RhcnQgb2YgYXJyYXkgb2YgZGVzY3JpcHRvcnMgKHZpcnR1YWxseSBjb250aWd1b3VzKSAqLworCV9fdTY0IGRlc2NfdXNlcl9hZGRyOworCS8qIFVzZWQgc3RydWN0dXJlIGFkZHJlc3MuIE11c3QgYmUgMzIgYml0IGFsaWduZWQgKi8KKwlfX3U2NCB1c2VkX3VzZXJfYWRkcjsKKwkvKiBBdmFpbGFibGUgc3RydWN0dXJlIGFkZHJlc3MuIE11c3QgYmUgMTYgYml0IGFsaWduZWQgKi8KKwlfX3U2NCBhdmFpbF91c2VyX2FkZHI7CisJLyogTG9nZ2luZyBzdXBwb3J0LiAqLworCS8qIExvZyB3cml0ZXMgdG8gdXNlZCBzdHJ1Y3R1cmUsIGF0IG9mZnNldCBjYWxjdWxhdGVkIGZyb20gc3BlY2lmaWVkCisJICogYWRkcmVzcy4gQWRkcmVzcyBtdXN0IGJlIDMyIGJpdCBhbGlnbmVkLiAqLworCV9fdTY0IGxvZ19ndWVzdF9hZGRyOworfTsKKworc3RydWN0IHZob3N0X21lbW9yeV9yZWdpb24geworCV9fdTY0IGd1ZXN0X3BoeXNfYWRkcjsKKwlfX3U2NCBtZW1vcnlfc2l6ZTsgLyogYnl0ZXMgKi8KKwlfX3U2NCB1c2Vyc3BhY2VfYWRkcjsKKwlfX3U2NCBmbGFnc19wYWRkaW5nOyAvKiBObyBmbGFncyBhcmUgY3VycmVudGx5IHNwZWNpZmllZC4gKi8KK307CisKKy8qIEFsbCByZWdpb24gYWRkcmVzc2VzIGFuZCBzaXplcyBtdXN0IGJlIDRLIGFsaWduZWQuICovCisjZGVmaW5lIFZIT1NUX1BBR0VfU0laRSAweDEwMDAKKworc3RydWN0IHZob3N0X21lbW9yeSB7CisJX191MzIgbnJlZ2lvbnM7CisJX191MzIgcGFkZGluZzsKKwlzdHJ1Y3Qgdmhvc3RfbWVtb3J5X3JlZ2lvbiByZWdpb25zWzBdOworfTsKKworLyogaW9jdGxzICovCisKKyNkZWZpbmUgVkhPU1RfVklSVElPIDB4QUYKKworLyogRmVhdHVyZXMgYml0bWFzayBmb3IgZm9yd2FyZCBjb21wYXRpYmlsaXR5LiAgVHJhbnNwb3J0IGJpdHMgYXJlIHVzZWQgZm9yCisgKiB2aG9zdCBzcGVjaWZpYyBmZWF0dXJlcy4gKi8KKyNkZWZpbmUgVkhPU1RfR0VUX0ZFQVRVUkVTCV9JT1IoVkhPU1RfVklSVElPLCAweDAwLCBfX3U2NCkKKyNkZWZpbmUgVkhPU1RfU0VUX0ZFQVRVUkVTCV9JT1coVkhPU1RfVklSVElPLCAweDAwLCBfX3U2NCkKKworLyogU2V0IGN1cnJlbnQgcHJvY2VzcyBhcyB0aGUgKGV4Y2x1c2l2ZSkgb3duZXIgb2YgdGhpcyBmaWxlIGRlc2NyaXB0b3IuICBUaGlzCisgKiBtdXN0IGJlIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIHZob3N0IGNvbW1hbmQuICBGdXJ0aGVyIGNhbGxzIHRvCisgKiBWSE9TVF9PV05FUl9TRVQgZmFpbCB1bnRpbCBWSE9TVF9PV05FUl9SRVNFVCBpcyBjYWxsZWQuICovCisjZGVmaW5lIFZIT1NUX1NFVF9PV05FUiBfSU8oVkhPU1RfVklSVElPLCAweDAxKQorLyogR2l2ZSB1cCBvd25lcnNoaXAsIGFuZCByZXNldCB0aGUgZGV2aWNlIHRvIGRlZmF1bHQgdmFsdWVzLgorICogQWxsb3dzIHN1YnNlcXVlbnQgY2FsbCB0byBWSE9TVF9PV05FUl9TRVQgdG8gc3VjY2VlZC4gKi8KKyNkZWZpbmUgVkhPU1RfUkVTRVRfT1dORVIgX0lPKFZIT1NUX1ZJUlRJTywgMHgwMikKKworLyogU2V0IHVwL21vZGlmeSBtZW1vcnkgbGF5b3V0ICovCisjZGVmaW5lIFZIT1NUX1NFVF9NRU1fVEFCTEUJX0lPVyhWSE9TVF9WSVJUSU8sIDB4MDMsIHN0cnVjdCB2aG9zdF9tZW1vcnkpCisKKy8qIFdyaXRlIGxvZ2dpbmcgc2V0dXAuICovCisvKiBNZW1vcnkgd3JpdGVzIGNhbiBvcHRpb25hbGx5IGJlIGxvZ2dlZCBieSBzZXR0aW5nIGJpdCBhdCBhbiBvZmZzZXQKKyAqIChjYWxjdWxhdGVkIGZyb20gdGhlIHBoeXNpY2FsIGFkZHJlc3MpIGZyb20gc3BlY2lmaWVkIGxvZyBiYXNlLgorICogVGhlIGJpdCBpcyBzZXQgdXNpbmcgYW4gYXRvbWljIDMyIGJpdCBvcGVyYXRpb24uICovCisvKiBTZXQgYmFzZSBhZGRyZXNzIGZvciBsb2dnaW5nLiAqLworI2RlZmluZSBWSE9TVF9TRVRfTE9HX0JBU0UgX0lPVyhWSE9TVF9WSVJUSU8sIDB4MDQsIF9fdTY0KQorLyogU3BlY2lmeSBhbiBldmVudGZkIGZpbGUgZGVzY3JpcHRvciB0byBzaWduYWwgb24gbG9nIHdyaXRlLiAqLworI2RlZmluZSBWSE9TVF9TRVRfTE9HX0ZEIF9JT1coVkhPU1RfVklSVElPLCAweDA3LCBpbnQpCisKKy8qIFJpbmcgc2V0dXAuICovCisvKiBTZXQgbnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcuIFRoaXMgcGFyYW1ldGVyIGNhbiBub3QKKyAqIGJlIG1vZGlmaWVkIHdoaWxlIHJpbmcgaXMgcnVubmluZyAoYm91bmQgdG8gYSBkZXZpY2UpLiAqLworI2RlZmluZSBWSE9TVF9TRVRfVlJJTkdfTlVNIF9JT1coVkhPU1RfVklSVElPLCAweDEwLCBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUpCisvKiBTZXQgYWRkcmVzc2VzIGZvciB0aGUgcmluZy4gKi8KKyNkZWZpbmUgVkhPU1RfU0VUX1ZSSU5HX0FERFIgX0lPVyhWSE9TVF9WSVJUSU8sIDB4MTEsIHN0cnVjdCB2aG9zdF92cmluZ19hZGRyKQorLyogQmFzZSB2YWx1ZSB3aGVyZSBxdWV1ZSBsb29rcyBmb3IgYXZhaWxhYmxlIGRlc2NyaXB0b3JzICovCisjZGVmaW5lIFZIT1NUX1NFVF9WUklOR19CQVNFIF9JT1coVkhPU1RfVklSVElPLCAweDEyLCBzdHJ1Y3Qgdmhvc3RfdnJpbmdfc3RhdGUpCisvKiBHZXQgYWNjZXNzb3I6IHJlYWRzIGluZGV4LCB3cml0ZXMgdmFsdWUgaW4gbnVtICovCisjZGVmaW5lIFZIT1NUX0dFVF9WUklOR19CQVNFIF9JT1dSKFZIT1NUX1ZJUlRJTywgMHgxMiwgc3RydWN0IHZob3N0X3ZyaW5nX3N0YXRlKQorCisvKiBUaGUgZm9sbG93aW5nIGlvY3RscyB1c2UgZXZlbnRmZCBmaWxlIGRlc2NyaXB0b3JzIHRvIHNpZ25hbCBhbmQgcG9sbAorICogZm9yIGV2ZW50cy4gKi8KKworLyogU2V0IGV2ZW50ZmQgdG8gcG9sbCBmb3IgYWRkZWQgYnVmZmVycyAqLworI2RlZmluZSBWSE9TVF9TRVRfVlJJTkdfS0lDSyBfSU9XKFZIT1NUX1ZJUlRJTywgMHgyMCwgc3RydWN0IHZob3N0X3ZyaW5nX2ZpbGUpCisvKiBTZXQgZXZlbnRmZCB0byBzaWduYWwgd2hlbiBidWZmZXJzIGhhdmUgYmVlZCB1c2VkICovCisjZGVmaW5lIFZIT1NUX1NFVF9WUklOR19DQUxMIF9JT1coVkhPU1RfVklSVElPLCAweDIxLCBzdHJ1Y3Qgdmhvc3RfdnJpbmdfZmlsZSkKKy8qIFNldCBldmVudGZkIHRvIHNpZ25hbCBhbiBlcnJvciAqLworI2RlZmluZSBWSE9TVF9TRVRfVlJJTkdfRVJSIF9JT1coVkhPU1RfVklSVElPLCAweDIyLCBzdHJ1Y3Qgdmhvc3RfdnJpbmdfZmlsZSkKKworLyogVkhPU1RfTkVUIHNwZWNpZmljIGRlZmluZXMgKi8KKworLyogQXR0YWNoIHZpcnRpbyBuZXQgcmluZyB0byBhIHJhdyBzb2NrZXQsIG9yIHRhcCBkZXZpY2UuCisgKiBUaGUgc29ja2V0IG11c3QgYmUgYWxyZWFkeSBib3VuZCB0byBhbiBldGhlcm5ldCBkZXZpY2UsIHRoaXMgZGV2aWNlIHdpbGwgYmUKKyAqIHVzZWQgZm9yIHRyYW5zbWl0LiAgUGFzcyBmZCAtMSB0byB1bmJpbmQgZnJvbSB0aGUgc29ja2V0IGFuZCB0aGUgdHJhbnNtaXQKKyAqIGRldmljZS4gIFRoaXMgY2FuIGJlIHVzZWQgdG8gc3RvcCB0aGUgcmluZyAoZS5nLiBmb3IgbWlncmF0aW9uKS4gKi8KKyNkZWZpbmUgVkhPU1RfTkVUX1NFVF9CQUNLRU5EIF9JT1coVkhPU1RfVklSVElPLCAweDMwLCBzdHJ1Y3Qgdmhvc3RfdnJpbmdfZmlsZSkKKworLyogRmVhdHVyZSBiaXRzICovCisvKiBMb2cgYWxsIHdyaXRlIGRlc2NyaXB0b3JzLiBDYW4gYmUgY2hhbmdlZCB3aGlsZSBkZXZpY2UgaXMgYWN0aXZlLiAqLworI2RlZmluZSBWSE9TVF9GX0xPR19BTEwgMjYKKy8qIHZob3N0LW5ldCBzaG91bGQgYWRkIHZpcnRpb19uZXRfaGRyIGZvciBSWCwgYW5kIHN0cmlwIGZvciBUWCBwYWNrZXRzLiAqLworI2RlZmluZSBWSE9TVF9ORVRfRl9WSVJUSU9fTkVUX0hEUiAyNworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmggYi9pbmNsdWRlL2xpbnV4L3ZpcnRpb185cC5oCmluZGV4IDA5NWUxMGQuLjMzMjI3NTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdmlydGlvXzlwLmgKKysrIGIvaW5jbHVkZS9saW51eC92aXJ0aW9fOXAuaApAQCAtNSw3ICs1LDQgQEAKICNpbmNsdWRlIDxsaW51eC92aXJ0aW9faWRzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlydGlvX2NvbmZpZy5oPgogCi0vKiBNYXhpbXVtIG51bWJlciBvZiB2aXJ0aW8gY2hhbm5lbHMgcGVyIHBhcnRpdGlvbiAoMSBmb3Igbm93KSAqLwotI2RlZmluZSBNQVhfOVBfQ0hBTgkxCi0KICNlbmRpZiAvKiBfTElOVVhfVklSVElPXzlQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmggYi9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCmluZGV4IGVlMDNiYmEuLjExN2YwZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKKysrIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaApAQCAtNzgsMjIgKzc4LDIyIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2NvdW50X3ZtX2V2ZW50KGVudW0gdm1fZXZlbnRfaXRlbSBpdGVtKQogewotCV9fdGhpc19jcHVfaW5jKHBlcl9jcHVfdmFyKHZtX2V2ZW50X3N0YXRlcykuZXZlbnRbaXRlbV0pOworCV9fdGhpc19jcHVfaW5jKHZtX2V2ZW50X3N0YXRlcy5ldmVudFtpdGVtXSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF92bV9ldmVudChlbnVtIHZtX2V2ZW50X2l0ZW0gaXRlbSkKIHsKLQl0aGlzX2NwdV9pbmMocGVyX2NwdV92YXIodm1fZXZlbnRfc3RhdGVzKS5ldmVudFtpdGVtXSk7CisJdGhpc19jcHVfaW5jKHZtX2V2ZW50X3N0YXRlcy5ldmVudFtpdGVtXSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2NvdW50X3ZtX2V2ZW50cyhlbnVtIHZtX2V2ZW50X2l0ZW0gaXRlbSwgbG9uZyBkZWx0YSkKIHsKLQlfX3RoaXNfY3B1X2FkZChwZXJfY3B1X3Zhcih2bV9ldmVudF9zdGF0ZXMpLmV2ZW50W2l0ZW1dLCBkZWx0YSk7CisJX190aGlzX2NwdV9hZGQodm1fZXZlbnRfc3RhdGVzLmV2ZW50W2l0ZW1dLCBkZWx0YSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjb3VudF92bV9ldmVudHMoZW51bSB2bV9ldmVudF9pdGVtIGl0ZW0sIGxvbmcgZGVsdGEpCiB7Ci0JdGhpc19jcHVfYWRkKHBlcl9jcHVfdmFyKHZtX2V2ZW50X3N0YXRlcykuZXZlbnRbaXRlbV0sIGRlbHRhKTsKKwl0aGlzX2NwdV9hZGQodm1fZXZlbnRfc3RhdGVzLmV2ZW50W2l0ZW1dLCBkZWx0YSk7CiB9CiAKIGV4dGVybiB2b2lkIGFsbF92bV9ldmVudHModW5zaWduZWQgbG9uZyAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdnQuaCBiL2luY2x1ZGUvbGludXgvdnQuaAppbmRleCBkNWRkMGJjLi43NzhiN2IyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Z0LmgKKysrIGIvaW5jbHVkZS9saW51eC92dC5oCkBAIC0yNyw3ICsyNyw3IEBACiAjZGVmaW5lIFZUX1NFVE1PREUJMHg1NjAyCS8qIHNldCBtb2RlIG9mIGFjdGl2ZSB2dCAqLwogI2RlZmluZQkJVlRfQVVUTwkJMHgwMAkvKiBhdXRvIHZ0IHN3aXRjaGluZyAqLwogI2RlZmluZQkJVlRfUFJPQ0VTUwkweDAxCS8qIHByb2Nlc3MgY29udHJvbHMgc3dpdGNoaW5nICovCi0jZGVmaW5lCQlWVF9BQ0tBQ1EJMHgwMgkvKiBhY2tub3dsZWRnZSBzd2l0Y2ggKi8KKyNkZWZpbmUJCVZUX1BST0NFU1NfQVVUTyAweDAyCS8qIHByb2Nlc3MgaXMgbm90aWZpZWQgb2Ygc3dpdGNoaW5nICovCiAKIHN0cnVjdCB2dF9zdGF0IHsKIAl1bnNpZ25lZCBzaG9ydCB2X2FjdGl2ZTsJLyogYWN0aXZlIHZ0ICovCkBAIC0zOCw2ICszOCw3IEBACiAjZGVmaW5lIFZUX1NFTkRTSUcJMHg1NjA0CS8qIHNpZ25hbCB0byBzZW5kIHRvIGJpdG1hc2sgb2YgdnRzICovCiAKICNkZWZpbmUgVlRfUkVMRElTUAkweDU2MDUJLyogcmVsZWFzZSBkaXNwbGF5ICovCisjZGVmaW5lCQlWVF9BQ0tBQ1EJMHgwMgkvKiBhY2tub3dsZWRnZSBzd2l0Y2ggKi8KIAogI2RlZmluZSBWVF9BQ1RJVkFURQkweDU2MDYJLyogbWFrZSB2dCBhY3RpdmUgKi8KICNkZWZpbmUgVlRfV0FJVEFDVElWRQkweDU2MDcJLyogd2FpdCBmb3IgdnQgYWN0aXZlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3hmcm0uaCBiL2luY2x1ZGUvbGludXgveGZybS5oCmluZGV4IDI5ZTA0YmUuLmI5NzFlMzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgveGZybS5oCisrKyBiL2luY2x1ZGUvbGludXgveGZybS5oCkBAIC0yNjcsOCArMjY3LDggQEAKIAlYRlJNQV9BTEdfQ09NUCwJCS8qIHN0cnVjdCB4ZnJtX2FsZ28gKi8KIAlYRlJNQV9FTkNBUCwJCS8qIHN0cnVjdCB4ZnJtX2FsZ28gKyBzdHJ1Y3QgeGZybV9lbmNhcF90bXBsICovCiAJWEZSTUFfVE1QTCwJCS8qIDEgb3IgbW9yZSBzdHJ1Y3QgeGZybV91c2VyX3RtcGwgKi8KLQlYRlJNQV9TQSwKLQlYRlJNQV9QT0xJQ1ksCisJWEZSTUFfU0EsCQkvKiBzdHJ1Y3QgeGZybV91c2Vyc2FfaW5mbyAgKi8KKwlYRlJNQV9QT0xJQ1ksCQkvKnN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfaW5mbyAqLwogCVhGUk1BX1NFQ19DVFgsCQkvKiBzdHJ1Y3QgeGZybV9zZWNfY3R4ICovCiAJWEZSTUFfTFRJTUVfVkFMLAogCVhGUk1BX1JFUExBWV9WQUwsCkBAIC0yNzYsMTcgKzI3NiwyMyBAQAogCVhGUk1BX0VUSU1FUl9USFJFU0gsCiAJWEZSTUFfU1JDQUREUiwJCS8qIHhmcm1fYWRkcmVzc190ICovCiAJWEZSTUFfQ09BRERSLAkJLyogeGZybV9hZGRyZXNzX3QgKi8KLQlYRlJNQV9MQVNUVVNFRCwKKwlYRlJNQV9MQVNUVVNFRCwJCS8qIHVuc2lnbmVkIGxvbmcgICovCiAJWEZSTUFfUE9MSUNZX1RZUEUsCS8qIHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfdHlwZSAqLwogCVhGUk1BX01JR1JBVEUsCiAJWEZSTUFfQUxHX0FFQUQsCQkvKiBzdHJ1Y3QgeGZybV9hbGdvX2FlYWQgKi8KIAlYRlJNQV9LTUFERFJFU1MsICAgICAgICAvKiBzdHJ1Y3QgeGZybV91c2VyX2ttYWRkcmVzcyAqLwogCVhGUk1BX0FMR19BVVRIX1RSVU5DLAkvKiBzdHJ1Y3QgeGZybV9hbGdvX2F1dGggKi8KKwlYRlJNQV9NQVJLLAkJLyogc3RydWN0IHhmcm1fbWFyayAqLwogCV9fWEZSTUFfTUFYCiAKICNkZWZpbmUgWEZSTUFfTUFYIChfX1hGUk1BX01BWCAtIDEpCiB9OwogCitzdHJ1Y3QgeGZybV9tYXJrIHsKKwlfX3UzMiAgICAgICAgICAgdjsgLyogdmFsdWUgKi8KKwlfX3UzMiAgICAgICAgICAgbTsgLyogbWFzayAqLworfTsKKwogZW51bSB4ZnJtX3NhZGF0dHJfdHlwZV90IHsKIAlYRlJNQV9TQURfVU5TUEVDLAogCVhGUk1BX1NBRF9DTlQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL21hdGgtZW11L29wLWNvbW1vbi5oIGIvaW5jbHVkZS9tYXRoLWVtdS9vcC1jb21tb24uaAppbmRleCBmNDU2NTM0Li5mZDg4MjI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL21hdGgtZW11L29wLWNvbW1vbi5oCisrKyBiL2luY2x1ZGUvbWF0aC1lbXUvb3AtY29tbW9uLmgKQEAgLTI5LDcgKzI5LDcgQEAKICAgX0ZQX0ZSQUNfREVDTF8jI3djKFgpCiAKIC8qCi0gKiBGaW5pc2ggdHJ1ZWx5IHVucGFja2luZyBhIG5hdGl2ZSBmcCB2YWx1ZSBieSBjbGFzc2lmeWluZyB0aGUga2luZAorICogRmluaXNoIHRydWx5IHVucGFja2luZyBhIG5hdGl2ZSBmcCB2YWx1ZSBieSBjbGFzc2lmeWluZyB0aGUga2luZAogICogb2YgZnAgdmFsdWUgYW5kIG5vcm1hbGl6aW5nIGJvdGggdGhlIGV4cG9uZW50IGFuZCB0aGUgZnJhY3Rpb24uCiAgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3ZwZmVfY2FwdHVyZS5oIGIvaW5jbHVkZS9tZWRpYS9kYXZpbmNpL3ZwZmVfY2FwdHVyZS5oCmluZGV4IGQ4NjNlNWUuLjQzMTRhNWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvZGF2aW5jaS92cGZlX2NhcHR1cmUuaAorKysgYi9pbmNsdWRlL21lZGlhL2RhdmluY2kvdnBmZV9jYXB0dXJlLmgKQEAgLTE2NSw3ICsxNjUsNyBAQAogCXU4IHN0YXJ0ZWQ7CiAJLyoKIAkgKiBvZmZzZXQgd2hlcmUgc2Vjb25kIGZpZWxkIHN0YXJ0cyBmcm9tIHRoZSBzdGFydGluZyBvZiB0aGUKLQkgKiBidWZmZXIgZm9yIGZpZWxkIHNlcGVyYXRlZCBZQ2JDciBmb3JtYXRzCisJICogYnVmZmVyIGZvciBmaWVsZCBzZXBhcmF0ZWQgWUNiQ3IgZm9ybWF0cwogCSAqLwogCXUzMiBmaWVsZF9vZmY7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvOXAvY2xpZW50LmggYi9pbmNsdWRlL25ldC85cC9jbGllbnQuaAppbmRleCBmYjAwYjMyLi41MmUxZmZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC85cC9jbGllbnQuaAorKysgYi9pbmNsdWRlL25ldC85cC9jbGllbnQuaApAQCAtMjksNiArMjksMTkgQEAKIC8qIE51bWJlciBvZiByZXF1ZXN0cyBwZXIgcm93ICovCiAjZGVmaW5lIFA5X1JPV19NQVhUQUcgMjU1CiAKKy8qKiBlbnVtIHA5X3Byb3RvX3ZlcnNpb25zIC0gOVAgcHJvdG9jb2wgdmVyc2lvbnMKKyAqIEBwOV9wcm90b19sZWdhY3k6IDlQIExlZ2FjeSBtb2RlLCBwcmUtOVAyMDAwLnUKKyAqIEBwOV9wcm90b18yMDAwdTogOVAyMDAwLnUgZXh0ZW5zaW9uCisgKiBAcDlfcHJvdG9fMjAxMEw6IDlQMjAxMC5MIGV4dGVuc2lvbgorICovCisKK2VudW0gcDlfcHJvdG9fdmVyc2lvbnN7CisJcDlfcHJvdG9fbGVnYWN5ID0gMCwKKwlwOV9wcm90b18yMDAwdSA9IDEsCisJcDlfcHJvdG9fMjAxMEwgPSAyLAorfTsKKworCiAvKioKICAqIGVudW0gcDlfdHJhbnNfc3RhdHVzIC0gZGlmZmVyZW50IHN0YXRlcyBvZiB1bmRlcmx5aW5nIHRyYW5zcG9ydHMKICAqIEBDb25uZWN0ZWQ6IHRyYW5zcG9ydCBpcyBjb25uZWN0ZWQgYW5kIGhlYWx0aHkKQEAgLTExMSw2ICsxMjQsNyBAQAogICogQGxvY2s6IHByb3RlY3QgQGZpZGxpc3QKICAqIEBtc2l6ZTogbWF4aW11bSBkYXRhIHNpemUgbmVnb3RpYXRlZCBieSBwcm90b2NvbAogICogQGRvdHU6IGV4dGVuc2lvbiBmbGFncyBuZWdvdGlhdGVkIGJ5IHByb3RvY29sCisgKiBAcHJvdG9fdmVyc2lvbjogOVAgcHJvdG9jb2wgdmVyc2lvbiB0byB1c2UKICAqIEB0cmFuc19tb2Q6IG1vZHVsZSBBUEkgaW5zdGFudGlhdGVkIHdpdGggdGhpcyBjbGllbnQKICAqIEB0cmFuczogdHJhbnBvcnQgaW5zdGFuY2Ugc3RhdGUgYW5kIEFQSQogICogQGNvbm46IGNvbm5lY3Rpb24gc3RhdGUgaW5mb3JtYXRpb24gdXNlZCBieSB0cmFuc19mZApAQCAtMTM3LDcgKzE1MSw3IEBACiBzdHJ1Y3QgcDlfY2xpZW50IHsKIAlzcGlubG9ja190IGxvY2s7IC8qIHByb3RlY3QgY2xpZW50IHN0cnVjdHVyZSAqLwogCWludCBtc2l6ZTsKLQl1bnNpZ25lZCBjaGFyIGRvdHU7CisJdW5zaWduZWQgY2hhciBwcm90b192ZXJzaW9uOwogCXN0cnVjdCBwOV90cmFuc19tb2R1bGUgKnRyYW5zX21vZDsKIAllbnVtIHA5X3RyYW5zX3N0YXR1cyBzdGF0dXM7CiAJdm9pZCAqdHJhbnM7CkBAIC0yMDksNSArMjIzLDcgQEAKIGludCBwOXN0YXRfcmVhZChjaGFyICosIGludCwgc3RydWN0IHA5X3dzdGF0ICosIGludCk7CiB2b2lkIHA5c3RhdF9mcmVlKHN0cnVjdCBwOV93c3RhdCAqKTsKIAoraW50IHA5X2lzX3Byb3RvX2RvdHUoc3RydWN0IHA5X2NsaWVudCAqY2xudCk7CitpbnQgcDlfaXNfcHJvdG9fZG90bChzdHJ1Y3QgcDlfY2xpZW50ICpjbG50KTsKIAogI2VuZGlmIC8qIE5FVF85UF9DTElFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCmluZGV4IGVkM2FlYTEuLmZjMGM1MDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKQEAgLTQzLDcgKzQzLDcgQEAKICNkZWZpbmUgSENJX05PVElGWV9DT05OX0RFTAkJMgogI2RlZmluZSBIQ0lfTk9USUZZX1ZPSUNFX1NFVFRJTkcJMwogCi0vKiBIQ0kgZGV2aWNlIHR5cGVzICovCisvKiBIQ0kgYnVzIHR5cGVzICovCiAjZGVmaW5lIEhDSV9WSVJUVUFMCTAKICNkZWZpbmUgSENJX1VTQgkJMQogI2RlZmluZSBIQ0lfUENDQVJECTIKQEAgLTUyLDYgKzUyLDEwIEBACiAjZGVmaW5lIEhDSV9QQ0kJCTUKICNkZWZpbmUgSENJX1NESU8JNgogCisvKiBIQ0kgY29udHJvbGxlciB0eXBlcyAqLworI2RlZmluZSBIQ0lfQlJFRFIJMHgwMAorI2RlZmluZSBIQ0lfODAyMTEJMHgwMQorCiAvKiBIQ0kgZGV2aWNlIHF1aXJrcyAqLwogZW51bSB7CiAJSENJX1FVSVJLX05PX1JFU0VULApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmggYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaAppbmRleCA3Yjg2MDk0YS4uY2UzYzk5ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKKysrIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmgKQEAgLTcwLDcgKzcwLDggQEAKIAljaGFyCQluYW1lWzhdOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAJX191MTYJCWlkOwotCV9fdTgJCXR5cGU7CisJX191OAkJYnVzOworCV9fdTgJCWRldl90eXBlOwogCWJkYWRkcl90CWJkYWRkcjsKIAlfX3U4CQlkZXZfbmFtZVsyNDhdOwogCV9fdTgJCWRldl9jbGFzc1szXTsKQEAgLTEzNCw2ICsxMzUsOCBAQAogCiAJYXRvbWljX3QgCQlwcm9taXNjOwogCisJc3RydWN0IGRlbnRyeQkJKmRlYnVnZnM7CisKIAlzdHJ1Y3QgZGV2aWNlCQkqcGFyZW50OwogCXN0cnVjdCBkZXZpY2UJCWRldjsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCBiL2luY2x1ZGUvbmV0L2NmZzgwMjExLmgKaW5kZXggMDg4NGI5YS4uM2QxMzRhMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvY2ZnODAyMTEuaAorKysgYi9pbmNsdWRlL25ldC9jZmc4MDIxMS5oCkBAIC0zLDcgKzMsNyBAQAogLyoKICAqIDgwMi4xMSBkZXZpY2UgYW5kIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlCiAgKgotICogQ29weXJpZ2h0IDIwMDYtMjAwOQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDYtMjAxMAlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMzksOCArMzksOCBAQAogICogQElFRUU4MDIxMV9CQU5EXzVHSFo6IGFyb3VuZCA1R0h6IGJhbmQgKDQuOS01LjcpCiAgKi8KIGVudW0gaWVlZTgwMjExX2JhbmQgewotCUlFRUU4MDIxMV9CQU5EXzJHSFosCi0JSUVFRTgwMjExX0JBTkRfNUdIWiwKKwlJRUVFODAyMTFfQkFORF8yR0haID0gTkw4MDIxMV9CQU5EXzJHSFosCisJSUVFRTgwMjExX0JBTkRfNUdIWiA9IE5MODAyMTFfQkFORF81R0haLAogCiAJLyoga2VlcCBsYXN0ICovCiAJSUVFRTgwMjExX05VTV9CQU5EUwpAQCAtNjI2LDggKzYyNiwxNCBAQAogICogQGJlYWNvbl9pbnRlcnZhbDogdGhlIGJlYWNvbiBpbnRlcnZhbCBhcyBmcm9tIHRoZSBmcmFtZQogICogQGNhcGFiaWxpdHk6IHRoZSBjYXBhYmlsaXR5IGZpZWxkIGluIGhvc3QgYnl0ZSBvcmRlcgogICogQGluZm9ybWF0aW9uX2VsZW1lbnRzOiB0aGUgaW5mb3JtYXRpb24gZWxlbWVudHMgKE5vdGUgdGhhdCB0aGVyZQotICoJaXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlc2UgYXJlIHdlbGwtZm9ybWVkISkKKyAqCWlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZXNlIGFyZSB3ZWxsLWZvcm1lZCEpOyB0aGlzIGlzIGEgcG9pbnRlciB0bworICoJZWl0aGVyIHRoZSBiZWFjb25faWVzIG9yIHByb2JlcmVzcF9pZXMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgUHJvYmUKKyAqCVJlc3BvbnNlIGZyYW1lIGhhcyBiZWVuIHJlY2VpdmVkCiAgKiBAbGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzOiB0b3RhbCBsZW5ndGggb2YgdGhlIGluZm9ybWF0aW9uIGVsZW1lbnRzCisgKiBAYmVhY29uX2llczogdGhlIGluZm9ybWF0aW9uIGVsZW1lbnRzIGZyb20gdGhlIGxhc3QgQmVhY29uIGZyYW1lCisgKiBAbGVuX2JlYWNvbl9pZXM6IHRvdGFsIGxlbmd0aCBvZiB0aGUgYmVhY29uX2llcworICogQHByb2JlcmVzcF9pZXM6IHRoZSBpbmZvcm1hdGlvbiBlbGVtZW50cyBmcm9tIHRoZSBsYXN0IFByb2JlIFJlc3BvbnNlIGZyYW1lCisgKiBAbGVuX3Byb2JlcmVzcF9pZXM6IHRvdGFsIGxlbmd0aCBvZiB0aGUgcHJvYmVyZXNwX2llcwogICogQHNpZ25hbDogc2lnbmFsIHN0cmVuZ3RoIHZhbHVlICh0eXBlIGRlcGVuZHMgb24gdGhlIHdpcGh5J3Mgc2lnbmFsX3R5cGUpCiAgKiBAZnJlZV9wcml2OiBmdW5jdGlvbiBwb2ludGVyIHRvIGZyZWUgcHJpdmF0ZSBkYXRhCiAgKiBAcHJpdjogcHJpdmF0ZSBhcmVhIGZvciBkcml2ZXIgdXNlLCBoYXMgYXQgbGVhc3Qgd2lwaHktPmJzc19wcml2X3NpemUgYnl0ZXMKQEAgLTY0MSw2ICs2NDcsMTAgQEAKIAl1MTYgY2FwYWJpbGl0eTsKIAl1OCAqaW5mb3JtYXRpb25fZWxlbWVudHM7CiAJc2l6ZV90IGxlbl9pbmZvcm1hdGlvbl9lbGVtZW50czsKKwl1OCAqYmVhY29uX2llczsKKwlzaXplX3QgbGVuX2JlYWNvbl9pZXM7CisJdTggKnByb2JlcmVzcF9pZXM7CisJc2l6ZV90IGxlbl9wcm9iZXJlc3BfaWVzOwogCiAJczMyIHNpZ25hbDsKIApAQCAtODM3LDYgKzg0Nyw3IEBACiAJV0lQSFlfUEFSQU1fUkVUUllfTE9ORwkJPSAxIDw8IDEsCiAJV0lQSFlfUEFSQU1fRlJBR19USFJFU0hPTEQJPSAxIDw8IDIsCiAJV0lQSFlfUEFSQU1fUlRTX1RIUkVTSE9MRAk9IDEgPDwgMywKKwlXSVBIWV9QQVJBTV9DT1ZFUkFHRV9DTEFTUwk9IDEgPDwgNCwKIH07CiAKIC8qKgpAQCAtODU2LDIwICs4NjcsMTEgQEAKICAqIGNmZzgwMjExX2JpdHJhdGVfbWFzayAtIG1hc2tzIGZvciBiaXRyYXRlIGNvbnRyb2wKICAqLwogc3RydWN0IGNmZzgwMjExX2JpdHJhdGVfbWFzayB7Ci0vKgotICogQXMgZGlzY3Vzc2VkIGluIEJlcmxpbiwgdGhpcyBzdHJ1Y3QgcmVhbGx5Ci0gKiBzaG91bGQgbG9vayBsaWtlIHRoaXM6Ci0KIAlzdHJ1Y3QgewogCQl1MzIgbGVnYWN5OwotCQl1OCBtY3NbSUVFRTgwMjExX0hUX01DU19NQVNLX0xFTl07CisJCS8qIFRPRE86IGFkZCBzdXBwb3J0IGZvciBtYXNraW5nIE1DUyByYXRlczsgZS5nLjogKi8KKwkJLyogdTggbWNzW0lFRUU4MDIxMV9IVF9NQ1NfTUFTS19MRU5dOyAqLwogCX0gY29udHJvbFtJRUVFODAyMTFfTlVNX0JBTkRTXTsKLQotICogU2luY2Ugd2UgY2FuIGFsd2F5cyBmaXggaW4ta2VybmVsIHVzZXJzLCBsZXQncyBrZWVwCi0gKiBpdCBzaW1wbGVyIGZvciBub3c6Ci0gKi8KLQl1MzIgZml4ZWQ7ICAgLyogZml4ZWQgYml0cmF0ZSwgMCA9PSBub3QgZml4ZWQgKi8KLQl1MzIgbWF4cmF0ZTsgLyogaW4ga2JwcywgMCA9PSBubyBsaW1pdCAqLwogfTsKIC8qKgogICogc3RydWN0IGNmZzgwMjExX3Bta3NhIC0gUE1LIFNlY3VyaXR5IEFzc29jaWF0aW9uCkBAIC05ODgsNiArOTkwLDE2IEBACiAgKgogICogQGR1bXBfc3VydmV5OiBnZXQgc2l0ZSBzdXJ2ZXkgaW5mb3JtYXRpb24uCiAgKgorICogQHJlbWFpbl9vbl9jaGFubmVsOiBSZXF1ZXN0IHRoZSBkcml2ZXIgdG8gcmVtYWluIGF3YWtlIG9uIHRoZSBzcGVjaWZpZWQKKyAqCWNoYW5uZWwgZm9yIHRoZSBzcGVjaWZpZWQgZHVyYXRpb24gdG8gY29tcGxldGUgYW4gb2ZmLWNoYW5uZWwKKyAqCW9wZXJhdGlvbiAoZS5nLiwgcHVibGljIGFjdGlvbiBmcmFtZSBleGNoYW5nZSkuIFdoZW4gdGhlIGRyaXZlciBpcworICoJcmVhZHkgb24gdGhlIHJlcXVlc3RlZCBjaGFubmVsLCBpdCBtdXN0IGluZGljYXRlIHRoaXMgd2l0aCBhbiBldmVudAorICoJbm90aWZpY2F0aW9uIGJ5IGNhbGxpbmcgY2ZnODAyMTFfcmVhZHlfb25fY2hhbm5lbCgpLgorICogQGNhbmNlbF9yZW1haW5fb25fY2hhbm5lbDogQ2FuY2VsIGFuIG9uLWdvaW5nIHJlbWFpbi1vbi1jaGFubmVsIG9wZXJhdGlvbi4KKyAqCVRoaXMgYWxsb3dzIHRoZSBvcGVyYXRpb24gdG8gYmUgdGVybWluYXRlZCBwcmlvciB0byB0aW1lb3V0IGJhc2VkIG9uCisgKgl0aGUgZHVyYXRpb24gdmFsdWUuCisgKiBAYWN0aW9uOiBUcmFuc21pdCBhbiBhY3Rpb24gZnJhbWUKKyAqCiAgKiBAdGVzdG1vZGVfY21kOiBydW4gYSB0ZXN0IG1vZGUgY29tbWFuZAogICoKICAqIEBzZXRfcG1rc2E6IENhY2hlIGEgUE1LSUQgZm9yIGEgQlNTSUQuIFRoaXMgaXMgbW9zdGx5IHVzZWZ1bCBmb3IgZnVsbG1hYwpAQCAtMTEyMyw3ICsxMTM1LDIxIEBACiAJCQkgICAgIHN0cnVjdCBjZmc4MDIxMV9wbWtzYSAqcG1rc2EpOwogCWludAkoKmZsdXNoX3Bta3NhKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTsKIAotCS8qIHNvbWUgdGVtcG9yYXJ5IHN0dWZmIHRvIGZpbmlzaCB3ZXh0ICovCisJaW50CSgqcmVtYWluX29uX2NoYW5uZWwpKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJCSAgICAgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUsCisJCQkJICAgICB1bnNpZ25lZCBpbnQgZHVyYXRpb24sCisJCQkJICAgICB1NjQgKmNvb2tpZSk7CisJaW50CSgqY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LAorCQkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgIHU2NCBjb29raWUpOworCisJaW50CSgqYWN0aW9uKShzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLCB1NjQgKmNvb2tpZSk7CisKIAlpbnQJKCpzZXRfcG93ZXJfbWdtdCkoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgIGJvb2wgZW5hYmxlZCwgaW50IHRpbWVvdXQpOwogfTsKQEAgLTExNzQsNiArMTIwMCwxMCBAQAogCVdJUEhZX0ZMQUdfNEFERFJfU1RBVElPTgk9IEJJVCg2KSwKIH07CiAKK3N0cnVjdCBtYWNfYWRkcmVzcyB7CisJdTggYWRkcltFVEhfQUxFTl07Cit9OworCiAvKioKICAqIHN0cnVjdCB3aXBoeSAtIHdpcmVsZXNzIGhhcmR3YXJlIGRlc2NyaXB0aW9uCiAgKiBAaWR4OiB0aGUgd2lwaHkgaW5kZXggYXNzaWduZWQgdG8gdGhpcyBpdGVtCkBAIC0xMTkyLDEyICsxMjIyLDI4IEBACiAgKgktMSA9IGZyYWdtZW50YXRpb24gZGlzYWJsZWQsIG9ubHkgb2RkIHZhbHVlcyA+PSAyNTYgdXNlZAogICogQHJ0c190aHJlc2hvbGQ6IFJUUyB0aHJlc2hvbGQgKGRvdDExUlRTVGhyZXNob2xkKTsgLTEgPSBSVFMvQ1RTIGRpc2FibGVkCiAgKiBAbmV0OiB0aGUgbmV0d29yayBuYW1lc3BhY2UgdGhpcyB3aXBoeSBjdXJyZW50bHkgbGl2ZXMgaW4KKyAqIEBwZXJtX2FkZHI6IHBlcm1hbmVudCBNQUMgYWRkcmVzcyBvZiB0aGlzIGRldmljZQorICogQGFkZHJfbWFzazogSWYgdGhlIGRldmljZSBzdXBwb3J0cyBtdWx0aXBsZSBNQUMgYWRkcmVzc2VzIGJ5IG1hc2tpbmcsCisgKglzZXQgdGhpcyB0byBhIG1hc2sgd2l0aCB2YXJpYWJsZSBiaXRzIHNldCB0byAxLCBlLmcuIGlmIHRoZSBsYXN0CisgKglmb3VyIGJpdHMgYXJlIHZhcmlhYmxlIHRoZW4gc2V0IGl0IHRvIDAwOi4uLjowMDowZi4gVGhlIGFjdHVhbAorICoJdmFyaWFibGUgYml0cyBzaGFsbCBiZSBkZXRlcm1pbmVkIGJ5IHRoZSBpbnRlcmZhY2VzIGFkZGVkLCB3aXRoCisgKglpbnRlcmZhY2VzIG5vdCBtYXRjaGluZyB0aGUgbWFzayBiZWluZyByZWplY3RlZCB0byBiZSBicm91Z2h0IHVwLgorICogQG5fYWRkcmVzc2VzOiBudW1iZXIgb2YgYWRkcmVzc2VzIGluIEBhZGRyZXNzZXMuCisgKiBAYWRkcmVzc2VzOiBJZiB0aGUgZGV2aWNlIGhhcyBtb3JlIHRoYW4gb25lIGFkZHJlc3MsIHNldCB0aGlzIHBvaW50ZXIKKyAqCXRvIGEgbGlzdCBvZiBhZGRyZXNzZXMgKDYgYnl0ZXMgZWFjaCkuIFRoZSBmaXJzdCBvbmUgd2lsbCBiZSB1c2VkCisgKglieSBkZWZhdWx0IGZvciBwZXJtX2FkZHIuIEluIHRoaXMgY2FzZSwgdGhlIG1hc2sgc2hvdWxkIGJlIHNldCB0bworICoJYWxsLXplcm9lcy4gSW4gdGhpcyBjYXNlIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZGV2aWNlIGNhbiBoYW5kbGUKKyAqCXRoZSBzYW1lIG51bWJlciBvZiBhcmJpdHJhcnkgTUFDIGFkZHJlc3Nlcy4KICAqLwogc3RydWN0IHdpcGh5IHsKIAkvKiBhc3NpZ24gdGhlc2UgZmllbGRzIGJlZm9yZSB5b3UgcmVnaXN0ZXIgdGhlIHdpcGh5ICovCiAKLQkvKiBwZXJtYW5lbnQgTUFDIGFkZHJlc3MgKi8KKwkvKiBwZXJtYW5lbnQgTUFDIGFkZHJlc3MoZXMpICovCiAJdTggcGVybV9hZGRyW0VUSF9BTEVOXTsKKwl1OCBhZGRyX21hc2tbRVRIX0FMRU5dOworCisJdTE2IG5fYWRkcmVzc2VzOworCXN0cnVjdCBtYWNfYWRkcmVzcyAqYWRkcmVzc2VzOwogCiAJLyogU3VwcG9ydGVkIGludGVyZmFjZSBtb2RlcywgT1IgdG9nZXRoZXIgQklUKE5MODAyMTFfSUZUWVBFXy4uLikgKi8KIAl1MTYgaW50ZXJmYWNlX21vZGVzOwpAQCAtMTIxNyw2ICsxMjYzLDcgQEAKIAl1OCByZXRyeV9sb25nOwogCXUzMiBmcmFnX3RocmVzaG9sZDsKIAl1MzIgcnRzX3RocmVzaG9sZDsKKwl1OCBjb3ZlcmFnZV9jbGFzczsKIAogCWNoYXIgZndfdmVyc2lvbltFVEhUT09MX0JVU0lORk9fTEVOXTsKIAl1MzIgaHdfdmVyc2lvbjsKQEAgLTE0MDMsNiArMTQ1MCw4IEBACiAgKglzZXQgYnkgZHJpdmVyIChpZiBzdXBwb3J0ZWQpIG9uIGFkZF9pbnRlcmZhY2UgQkVGT1JFIHJlZ2lzdGVyaW5nIHRoZQogICoJbmV0ZGV2IGFuZCBtYXkgb3RoZXJ3aXNlIGJlIHVzZWQgYnkgZHJpdmVyIHJlYWQtb25seSwgd2lsbCBiZSB1cGRhdGUKICAqCWJ5IGNmZzgwMjExIG9uIGNoYW5nZV9pbnRlcmZhY2UKKyAqIEBhY3Rpb25fcmVnaXN0cmF0aW9uczogbGlzdCBvZiByZWdpc3RyYXRpb25zIGZvciBhY3Rpb24gZnJhbWVzCisgKiBAYWN0aW9uX3JlZ2lzdHJhdGlvbnNfbG9jazogbG9jayBmb3IgdGhlIGxpc3QKICAqLwogc3RydWN0IHdpcmVsZXNzX2RldiB7CiAJc3RydWN0IHdpcGh5ICp3aXBoeTsKQEAgLTE0MTIsNiArMTQ2MSw5IEBACiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAKKwlzdHJ1Y3QgbGlzdF9oZWFkIGFjdGlvbl9yZWdpc3RyYXRpb25zOworCXNwaW5sb2NrX3QgYWN0aW9uX3JlZ2lzdHJhdGlvbnNfbG9jazsKKwogCXN0cnVjdCBtdXRleCBtdHg7CiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgY2xlYW51cF93b3JrOwpAQCAtMTQzNiw2ICsxNDg4LDkgQEAKIAlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICphdXRoX2Jzc2VzW01BWF9BVVRIX0JTU0VTXTsKIAlzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpjdXJyZW50X2JzczsgLyogYXNzb2NpYXRlZCAvIGpvaW5lZCAqLwogCisJYm9vbCBwczsKKwlpbnQgcHNfdGltZW91dDsKKwogI2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUCiAJLyogd2V4dCBkYXRhICovCiAJc3RydWN0IHsKQEAgLTE0NDcsOCArMTUwMiw3IEBACiAJCXU4IGJzc2lkW0VUSF9BTEVOXSwgcHJldl9ic3NpZFtFVEhfQUxFTl07CiAJCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07CiAJCXM4IGRlZmF1bHRfa2V5LCBkZWZhdWx0X21nbXRfa2V5OwotCQlib29sIHBzLCBwcmV2X2Jzc2lkX3ZhbGlkOwotCQlpbnQgcHNfdGltZW91dDsKKwkJYm9vbCBwcmV2X2Jzc2lkX3ZhbGlkOwogCX0gd2V4dDsKICNlbmRpZgogfTsKQEAgLTE1MTksMzcgKzE1NzMsODIgQEAKICAqIERvY3VtZW50YXRpb24gaW4gRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL3JhZGlvdGFwLWhlYWRlcnMudHh0CiAgKi8KIAorc3RydWN0IHJhZGlvdGFwX2FsaWduX3NpemUgeworCXVpbnQ4X3QgYWxpZ246NCwgc2l6ZTo0OworfTsKKworc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9uYW1lc3BhY2UgeworCWNvbnN0IHN0cnVjdCByYWRpb3RhcF9hbGlnbl9zaXplICphbGlnbl9zaXplOworCWludCBuX2JpdHM7CisJdWludDMyX3Qgb3VpOworCXVpbnQ4X3Qgc3VibnM7Cit9OworCitzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX3ZlbmRvcl9uYW1lc3BhY2VzIHsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX25hbWVzcGFjZSAqbnM7CisJaW50IG5fbnM7Cit9OworCiAvKioKICAqIHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgLSB0cmFja3Mgd2FsayB0aHJ1IHByZXNlbnQgcmFkaW90YXAgYXJncwotICogQHJ0aGVhZGVyOiBwb2ludGVyIHRvIHRoZSByYWRpb3RhcCBoZWFkZXIgd2UgYXJlIHdhbGtpbmcgdGhyb3VnaAotICogQG1heF9sZW5ndGg6IGxlbmd0aCBvZiByYWRpb3RhcCBoZWFkZXIgaW4gY3B1IGJ5dGUgb3JkZXJpbmcKLSAqIEB0aGlzX2FyZ19pbmRleDogSUVFRTgwMjExX1JBRElPVEFQXy4uLiBpbmRleCBvZiBjdXJyZW50IGFyZwotICogQHRoaXNfYXJnOiBwb2ludGVyIHRvIGN1cnJlbnQgcmFkaW90YXAgYXJnCi0gKiBAYXJnX2luZGV4OiBpbnRlcm5hbCBuZXh0IGFyZ3VtZW50IGluZGV4Ci0gKiBAYXJnOiBpbnRlcm5hbCBuZXh0IGFyZ3VtZW50IHBvaW50ZXIKLSAqIEBuZXh0X2JpdG1hcDogaW50ZXJuYWwgcG9pbnRlciB0byBuZXh0IHByZXNlbnQgdTMyCi0gKiBAYml0bWFwX3NoaWZ0ZXI6IGludGVybmFsIHNoaWZ0ZXIgZm9yIGN1cnIgdTMyIGJpdG1hcCwgYjAgc2V0ID09IGFyZyBwcmVzZW50CisgKiBAdGhpc19hcmdfaW5kZXg6IGluZGV4IG9mIGN1cnJlbnQgYXJnLCB2YWxpZCBhZnRlciBlYWNoIHN1Y2Nlc3NmdWwgY2FsbAorICoJdG8gaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX25leHQoKQorICogQHRoaXNfYXJnOiBwb2ludGVyIHRvIGN1cnJlbnQgcmFkaW90YXAgYXJnOyBpdCBpcyB2YWxpZCBhZnRlciBlYWNoCisgKgljYWxsIHRvIGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9uZXh0KCkgYnV0IGFsc28gYWZ0ZXIKKyAqCWllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9pbml0KCkgd2hlcmUgaXQgd2lsbCBwb2ludCB0bworICoJdGhlIGJlZ2lubmluZyBvZiB0aGUgYWN0dWFsIGRhdGEgcG9ydGlvbgorICogQHRoaXNfYXJnX3NpemU6IGxlbmd0aCBvZiB0aGUgY3VycmVudCBhcmcsIGZvciBjb252ZW5pZW5jZQorICogQGN1cnJlbnRfbmFtZXNwYWNlOiBwb2ludGVyIHRvIHRoZSBjdXJyZW50IG5hbWVzcGFjZSBkZWZpbml0aW9uCisgKgkob3IgaW50ZXJuYWxseSAlTlVMTCBpZiB0aGUgY3VycmVudCBuYW1lc3BhY2UgaXMgdW5rbm93bikKKyAqIEBpc19yYWRpb3RhcF9uczogaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGN1cnJlbnQgbmFtZXNwYWNlIGlzIHRoZSBkZWZhdWx0CisgKglyYWRpb3RhcCBuYW1lc3BhY2Ugb3Igbm90CisgKgorICogQG92ZXJyaWRlczogb3ZlcnJpZGUgc3RhbmRhcmQgcmFkaW90YXAgZmllbGRzCisgKiBAbl9vdmVycmlkZXM6IG51bWJlciBvZiBvdmVycmlkZXMKKyAqCisgKiBAX3J0aGVhZGVyOiBwb2ludGVyIHRvIHRoZSByYWRpb3RhcCBoZWFkZXIgd2UgYXJlIHdhbGtpbmcgdGhyb3VnaAorICogQF9tYXhfbGVuZ3RoOiBsZW5ndGggb2YgcmFkaW90YXAgaGVhZGVyIGluIGNwdSBieXRlIG9yZGVyaW5nCisgKiBAX2FyZ19pbmRleDogbmV4dCBhcmd1bWVudCBpbmRleAorICogQF9hcmc6IG5leHQgYXJndW1lbnQgcG9pbnRlcgorICogQF9uZXh0X2JpdG1hcDogaW50ZXJuYWwgcG9pbnRlciB0byBuZXh0IHByZXNlbnQgdTMyCisgKiBAX2JpdG1hcF9zaGlmdGVyOiBpbnRlcm5hbCBzaGlmdGVyIGZvciBjdXJyIHUzMiBiaXRtYXAsIGIwIHNldCA9PSBhcmcgcHJlc2VudAorICogQF92bnM6IHZlbmRvciBuYW1lc3BhY2UgZGVmaW5pdGlvbnMKKyAqIEBfbmV4dF9uc19kYXRhOiBiZWdpbm5pbmcgb2YgdGhlIG5leHQgbmFtZXNwYWNlJ3MgZGF0YQorICogQF9yZXNldF9vbl9leHQ6IGludGVybmFsOyByZXNldCB0aGUgYXJnIGluZGV4IHRvIDAgd2hlbiBnb2luZyB0byB0aGUKKyAqCW5leHQgYml0bWFwIHdvcmQKKyAqCisgKiBEZXNjcmliZXMgdGhlIHJhZGlvdGFwIHBhcnNlciBzdGF0ZS4gRmllbGRzIHByZWZpeGVkIHdpdGggYW4gdW5kZXJzY29yZQorICogbXVzdCBub3QgYmUgdXNlZCBieSB1c2VycyBvZiB0aGUgcGFyc2VyLCBvbmx5IGJ5IHRoZSBwYXJzZXIgaW50ZXJuYWxseS4KICAqLwogCiBzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcnRoZWFkZXI7Ci0JaW50IG1heF9sZW5ndGg7Ci0JaW50IHRoaXNfYXJnX2luZGV4OwotCXU4ICp0aGlzX2FyZzsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqX3J0aGVhZGVyOworCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfdmVuZG9yX25hbWVzcGFjZXMgKl92bnM7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9uYW1lc3BhY2UgKmN1cnJlbnRfbmFtZXNwYWNlOwogCi0JaW50IGFyZ19pbmRleDsKLQl1OCAqYXJnOwotCV9fbGUzMiAqbmV4dF9iaXRtYXA7Ci0JdTMyIGJpdG1hcF9zaGlmdGVyOworCXVuc2lnbmVkIGNoYXIgKl9hcmcsICpfbmV4dF9uc19kYXRhOworCXVpbnQzMl90ICpfbmV4dF9iaXRtYXA7CisKKwl1bnNpZ25lZCBjaGFyICp0aGlzX2FyZzsKKwlpbnQgdGhpc19hcmdfaW5kZXg7CisJaW50IHRoaXNfYXJnX3NpemU7CisKKwlpbnQgaXNfcmFkaW90YXBfbnM7CisKKwlpbnQgX21heF9sZW5ndGg7CisJaW50IF9hcmdfaW5kZXg7CisJdWludDMyX3QgX2JpdG1hcF9zaGlmdGVyOworCWludCBfcmVzZXRfb25fZXh0OwogfTsKIAogZXh0ZXJuIGludCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3JfaW5pdCgKLSAgIHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgKml0ZXJhdG9yLAotICAgc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKnJhZGlvdGFwX2hlYWRlciwKLSAgIGludCBtYXhfbGVuZ3RoKTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yICppdGVyYXRvciwKKwlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmFkaW90YXBfaGVhZGVyLAorCWludCBtYXhfbGVuZ3RoLCBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX3ZlbmRvcl9uYW1lc3BhY2VzICp2bnMpOwogCiBleHRlcm4gaW50IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9uZXh0KAotICAgc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvciAqaXRlcmF0b3IpOworCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgKml0ZXJhdG9yKTsKKwogCiBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciByZmMxMDQyX2hlYWRlcls2XTsKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyIGJyaWRnZV90dW5uZWxfaGVhZGVyWzZdOwpAQCAtMTU3OCw3ICsxNjc3LDcgQEAKICAqIEBhZGRyOiB0aGUgZGV2aWNlIE1BQyBhZGRyZXNzCiAgKiBAaWZ0eXBlOiB0aGUgdmlydHVhbCBpbnRlcmZhY2UgdHlwZQogICovCi1pbnQgaWVlZTgwMjExX2RhdGFfdG9fODAyMyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqYWRkciwKK2ludCBpZWVlODAyMTFfZGF0YV90b184MDIzKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU4ICphZGRyLAogCQkJICAgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUpOwogCiAvKioKQEAgLTE1ODksMTUgKzE2ODgsNDkgQEAKICAqIEBic3NpZDogdGhlIG5ldHdvcmsgYnNzaWQgKHVzZWQgb25seSBmb3IgaWZ0eXBlIFNUQVRJT04gYW5kIEFESE9DKQogICogQHFvczogYnVpbGQgODAyLjExIFFvUyBkYXRhIGZyYW1lCiAgKi8KLWludCBpZWVlODAyMTFfZGF0YV9mcm9tXzgwMjMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKmFkZHIsCitpbnQgaWVlZTgwMjExX2RhdGFfZnJvbV84MDIzKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU4ICphZGRyLAogCQkJICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSwgdTggKmJzc2lkLCBib29sIHFvcyk7CiAKIC8qKgorICogaWVlZTgwMjExX2Ftc2R1X3RvXzgwMjNzIC0gZGVjb2RlIGFuIElFRUUgODAyLjExbiBBLU1TRFUgZnJhbWUKKyAqCisgKiBEZWNvZGUgYW4gSUVFRSA4MDIuMTFuIEEtTVNEVSBmcmFtZSBhbmQgY29udmVydCBpdCB0byBhIGxpc3Qgb2YKKyAqIDgwMi4zIGZyYW1lcy4gVGhlIEBsaXN0IHdpbGwgYmUgZW1wdHkgaWYgdGhlIGRlY29kZSBmYWlscy4gVGhlCisgKiBAc2tiIGlzIGNvbnN1bWVkIGFmdGVyIHRoZSBmdW5jdGlvbiByZXR1cm5zLgorICoKKyAqIEBza2I6IFRoZSBpbnB1dCBJRUVFIDgwMi4xMW4gQS1NU0RVIGZyYW1lLgorICogQGxpc3Q6IFRoZSBvdXRwdXQgbGlzdCBvZiA4MDIuMyBmcmFtZXMuIEl0IG11c3QgYmUgYWxsb2NhdGVkIGFuZAorICoJaW5pdGlhbGl6ZWQgYnkgYnkgdGhlIGNhbGxlci4KKyAqIEBhZGRyOiBUaGUgZGV2aWNlIE1BQyBhZGRyZXNzLgorICogQGlmdHlwZTogVGhlIGRldmljZSBpbnRlcmZhY2UgdHlwZS4KKyAqIEBleHRyYV9oZWFkcm9vbTogVGhlIGhhcmR3YXJlIGV4dHJhIGhlYWRyb29tIGZvciBTS0JzIGluIHRoZSBAbGlzdC4KKyAqLwordm9pZCBpZWVlODAyMTFfYW1zZHVfdG9fODAyM3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwKKwkJCSAgICAgIGNvbnN0IHU4ICphZGRyLCBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSwKKwkJCSAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBleHRyYV9oZWFkcm9vbSk7CisKKy8qKgogICogY2ZnODAyMTFfY2xhc3NpZnk4MDIxZCAtIGRldGVybWluZSB0aGUgODAyLjFwLzFkIHRhZyBmb3IgYSBkYXRhIGZyYW1lCiAgKiBAc2tiOiB0aGUgZGF0YSBmcmFtZQogICovCiB1bnNpZ25lZCBpbnQgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAorLyoqCisgKiBjZmc4MDIxMV9maW5kX2llIC0gZmluZCBpbmZvcm1hdGlvbiBlbGVtZW50IGluIGRhdGEKKyAqCisgKiBAZWlkOiBlbGVtZW50IElECisgKiBAaWVzOiBkYXRhIGNvbnNpc3Rpbmcgb2YgSUVzCisgKiBAbGVuOiBsZW5ndGggb2YgZGF0YQorICoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCByZXR1cm4gJU5VTEwgaWYgdGhlIGVsZW1lbnQgSUQgY291bGQKKyAqIG5vdCBiZSBmb3VuZCBvciBpZiB0aGUgZWxlbWVudCBpcyBpbnZhbGlkIChjbGFpbXMgdG8gYmUKKyAqIGxvbmdlciB0aGFuIHRoZSBnaXZlbiBkYXRhKSwgb3IgYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBieXRlCisgKiBvZiB0aGUgcmVxdWVzdGVkIGVsZW1lbnQsIHRoYXQgaXMgdGhlIGJ5dGUgY29udGFpbmluZyB0aGUKKyAqIGVsZW1lbnQgSUQuIFRoZXJlIGFyZSBubyBjaGVja3Mgb24gdGhlIGVsZW1lbnQgbGVuZ3RoCisgKiBvdGhlciB0aGFuIGhhdmluZyB0byBmaXQgaW50byB0aGUgZ2l2ZW4gZGF0YS4KKyAqLworY29uc3QgdTggKmNmZzgwMjExX2ZpbmRfaWUodTggZWlkLCBjb25zdCB1OCAqaWVzLCBpbnQgbGVuKTsKKwogLyoKICAqIFJlZ3VsYXRvcnkgaGVscGVyIGZ1bmN0aW9ucyBmb3Igd2lwaHlzCiAgKi8KQEAgLTIxMjksNSArMjI2Miw3OSBAQAogdm9pZCBjZmc4MDIxMV9kaXNjb25uZWN0ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHJlYXNvbiwKIAkJCSAgIHU4ICppZSwgc2l6ZV90IGllX2xlbiwgZ2ZwX3QgZ2ZwKTsKIAorLyoqCisgKiBjZmc4MDIxMV9yZWFkeV9vbl9jaGFubmVsIC0gbm90aWZpY2F0aW9uIG9mIHJlbWFpbl9vbl9jaGFubmVsIHN0YXJ0CisgKiBAZGV2OiBuZXR3b3JrIGRldmljZQorICogQGNvb2tpZTogdGhlIHJlcXVlc3QgY29va2llCisgKiBAY2hhbjogVGhlIGN1cnJlbnQgY2hhbm5lbCAoZnJvbSByZW1haW5fb25fY2hhbm5lbCByZXF1ZXN0KQorICogQGNoYW5uZWxfdHlwZTogQ2hhbm5lbCB0eXBlCisgKiBAZHVyYXRpb246IER1cmF0aW9uIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSBkcml2ZXIgaW50ZW50cyB0byByZW1haW4gb24gdGhlCisgKgljaGFubmVsCisgKiBAZ2ZwOiBhbGxvY2F0aW9uIGZsYWdzCisgKi8KK3ZvaWQgY2ZnODAyMTFfcmVhZHlfb25fY2hhbm5lbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1NjQgY29va2llLAorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCSAgICAgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZHVyYXRpb24sIGdmcF90IGdmcCk7CisKKy8qKgorICogY2ZnODAyMTFfcmVtYWluX29uX2NoYW5uZWxfZXhwaXJlZCAtIHJlbWFpbl9vbl9jaGFubmVsIGR1cmF0aW9uIGV4cGlyZWQKKyAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKiBAY29va2llOiB0aGUgcmVxdWVzdCBjb29raWUKKyAqIEBjaGFuOiBUaGUgY3VycmVudCBjaGFubmVsIChmcm9tIHJlbWFpbl9vbl9jaGFubmVsIHJlcXVlc3QpCisgKiBAY2hhbm5lbF90eXBlOiBDaGFubmVsIHR5cGUKKyAqIEBnZnA6IGFsbG9jYXRpb24gZmxhZ3MKKyAqLwordm9pZCBjZmc4MDIxMV9yZW1haW5fb25fY2hhbm5lbF9leHBpcmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCXU2NCBjb29raWUsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCQkJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUsCisJCQkJCWdmcF90IGdmcCk7CisKKworLyoqCisgKiBjZmc4MDIxMV9uZXdfc3RhIC0gbm90aWZ5IHVzZXJzcGFjZSBhYm91dCBzdGF0aW9uCisgKgorICogQGRldjogdGhlIG5ldGRldgorICogQG1hY19hZGRyOiB0aGUgc3RhdGlvbidzIGFkZHJlc3MKKyAqIEBzaW5mbzogdGhlIHN0YXRpb24gaW5mb3JtYXRpb24KKyAqIEBnZnA6IGFsbG9jYXRpb24gZmxhZ3MKKyAqLwordm9pZCBjZmc4MDIxMV9uZXdfc3RhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICptYWNfYWRkciwKKwkJICAgICAgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sIGdmcF90IGdmcCk7CisKKy8qKgorICogY2ZnODAyMTFfcnhfYWN0aW9uIC0gbm90aWZpY2F0aW9uIG9mIHJlY2VpdmVkLCB1bnByb2Nlc3NlZCBBY3Rpb24gZnJhbWUKKyAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKiBAZnJlcTogRnJlcXVlbmN5IG9uIHdoaWNoIHRoZSBmcmFtZSB3YXMgcmVjZWl2ZWQgaW4gTUh6CisgKiBAYnVmOiBBY3Rpb24gZnJhbWUgKGhlYWRlciArIGJvZHkpCisgKiBAbGVuOiBsZW5ndGggb2YgdGhlIGZyYW1lIGRhdGEKKyAqIEBnZnA6IGNvbnRleHQgZmxhZ3MKKyAqIFJldHVybnMgJXRydWUgaWYgYSB1c2VyIHNwYWNlIGFwcGxpY2F0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciByZWplY3RpbmcgdGhlCisgKgl1bnJlY29nbml6ZWQgQWN0aW9uIGZyYW1lOyAlZmFsc2UgaWYgbm8gc3VjaCBhcHBsaWNhdGlvbiBpcyByZWdpc3RlcmVkCisgKgkoaS5lLiwgdGhlIGRyaXZlciBpcyByZXNwb25zaWJsZSBmb3IgcmVqZWN0aW5nIHRoZSB1bnJlY29nbml6ZWQgQWN0aW9uCisgKglmcmFtZSkKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhbiBBY3Rpb24gZnJhbWUgaXMgcmVjZWl2ZWQgZm9yIGEgc3RhdGlvbgorICogbW9kZSBpbnRlcmZhY2UsIGJ1dCBpcyBub3QgcHJvY2Vzc2VkIGluIGtlcm5lbC4KKyAqLworYm9vbCBjZmc4MDIxMV9yeF9hY3Rpb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZyZXEsIGNvbnN0IHU4ICpidWYsCisJCQlzaXplX3QgbGVuLCBnZnBfdCBnZnApOworCisvKioKKyAqIGNmZzgwMjExX2FjdGlvbl90eF9zdGF0dXMgLSBub3RpZmljYXRpb24gb2YgVFggc3RhdHVzIGZvciBBY3Rpb24gZnJhbWUKKyAqIEBkZXY6IG5ldHdvcmsgZGV2aWNlCisgKiBAY29va2llOiBDb29raWUgcmV0dXJuZWQgYnkgY2ZnODAyMTFfb3BzOjphY3Rpb24oKQorICogQGJ1ZjogQWN0aW9uIGZyYW1lIChoZWFkZXIgKyBib2R5KQorICogQGxlbjogbGVuZ3RoIG9mIHRoZSBmcmFtZSBkYXRhCisgKiBAYWNrOiBXaGV0aGVyIGZyYW1lIHdhcyBhY2tub3dsZWRnZWQKKyAqIEBnZnA6IGNvbnRleHQgZmxhZ3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciBhbiBBY3Rpb24gZnJhbWUgd2FzIHJlcXVlc3RlZCB0byBiZQorICogdHJhbnNtaXR0ZWQgd2l0aCBjZmc4MDIxMV9vcHM6OmFjdGlvbigpIHRvIHJlcG9ydCB0aGUgVFggc3RhdHVzIG9mIHRoZQorICogdHJhbnNtaXNzaW9uIGF0dGVtcHQuCisgKi8KK3ZvaWQgY2ZnODAyMTFfYWN0aW9uX3R4X3N0YXR1cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1NjQgY29va2llLAorCQkJICAgICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sIGJvb2wgYWNrLCBnZnBfdCBnZnApOwogCiAjZW5kaWYgLyogX19ORVRfQ0ZHODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHN0LmggYi9pbmNsdWRlL25ldC9kc3QuaAppbmRleCAzOWM0YTU5Li5jZTA3OGNkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZHN0LmgKKysrIGIvaW5jbHVkZS9uZXQvZHN0LmgKQEAgLTgzLDggKzgzLDYgQEAKIAkgKiAoTDFfQ0FDSEVfU0laRSB3b3VsZCBiZSB0b28gbXVjaCkKIAkgKi8KICNpZmRlZiBDT05GSUdfNjRCSVQKLQlsb25nCQkJX19wYWRfdG9fYWxpZ25fcmVmY250WzJdOwotI2Vsc2UKIAlsb25nCQkJX19wYWRfdG9fYWxpZ25fcmVmY250WzFdOwogI2VuZGlmCiAJLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2ljbXAuaCBiL2luY2x1ZGUvbmV0L2ljbXAuaAppbmRleCBkZmE3MmQ0Li4xNWIzZGZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pY21wLmgKKysrIGIvaW5jbHVkZS9uZXQvaWNtcC5oCkBAIC0yOCw3ICsyOCw3IEBACiAgIHVuc2lnbmVkCWZhdGFsOjE7CiB9OwogCi1leHRlcm4gc3RydWN0IGljbXBfZXJyIGljbXBfZXJyX2NvbnZlcnRbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaWNtcF9lcnIgaWNtcF9lcnJfY29udmVydFtdOwogI2RlZmluZSBJQ01QX0lOQ19TVEFUUyhuZXQsIGZpZWxkKQlTTk1QX0lOQ19TVEFUUygobmV0KS0+bWliLmljbXBfc3RhdGlzdGljcywgZmllbGQpCiAjZGVmaW5lIElDTVBfSU5DX1NUQVRTX0JIKG5ldCwgZmllbGQpCVNOTVBfSU5DX1NUQVRTX0JIKChuZXQpLT5taWIuaWNtcF9zdGF0aXN0aWNzLCBmaWVsZCkKICNkZWZpbmUgSUNNUE1TR09VVF9JTkNfU1RBVFMobmV0LCBmaWVsZCkJU05NUF9JTkNfU1RBVFMoKG5ldCktPm1pYi5pY21wbXNnX3N0YXRpc3RpY3MsIGZpZWxkKzI1NikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExX3JhZGlvdGFwLmgKaW5kZXggOWQzZDg2YS4uYWY0OWY4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWVlZTgwMjExX3JhZGlvdGFwLmgKKysrIGIvaW5jbHVkZS9uZXQvaWVlZTgwMjExX3JhZGlvdGFwLmgKQEAgLTE5OCw2ICsxOTgsMTAgQEAKIAlJRUVFODAyMTFfUkFESU9UQVBfVFhfRkxBR1MgPSAxNSwKIAlJRUVFODAyMTFfUkFESU9UQVBfUlRTX1JFVFJJRVMgPSAxNiwKIAlJRUVFODAyMTFfUkFESU9UQVBfREFUQV9SRVRSSUVTID0gMTcsCisKKwkvKiB2YWxpZCBpbiBldmVyeSBpdF9wcmVzZW50IGJpdG1hcCwgZXZlbiB2ZW5kb3IgbmFtZXNwYWNlcyAqLworCUlFRUU4MDIxMV9SQURJT1RBUF9SQURJT1RBUF9OQU1FU1BBQ0UgPSAyOSwKKwlJRUVFODAyMTFfUkFESU9UQVBfVkVORE9SX05BTUVTUEFDRSA9IDMwLAogCUlFRUU4MDIxMV9SQURJT1RBUF9FWFQgPSAzMQogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaCBiL2luY2x1ZGUvbmV0L2lmX2luZXQ2LmgKaW5kZXggZTlkNjlkMS4uNTQ1ZDhiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaWZfaW5ldDYuaAorKysgYi9pbmNsdWRlL25ldC9pZl9pbmV0Ni5oCkBAIC0xNTcsNyArMTU3LDcgQEAKIAogCXN0cnVjdCBpZm1jYWRkcjYJKm1jX2xpc3Q7CiAJc3RydWN0IGlmbWNhZGRyNgkqbWNfdG9tYjsKLQlyd2xvY2tfdAkJbWNfbG9jazsKKwlzcGlubG9ja190CQltY19sb2NrOwogCXVuc2lnbmVkIGNoYXIJCW1jX3FydjsKIAl1bnNpZ25lZCBjaGFyCQltY19ncV9ydW5uaW5nOwogCXVuc2lnbmVkIGNoYXIJCW1jX2lmY19jb3VudDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKaW5kZXggYmQ0YzUzZi4uODNmZDM0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKQEAgLTEyMiwxMCArMTIyLDEyIEBACiAJX19iZTMyCQkJaW5ldF9zYWRkcjsKIAlfX3MxNgkJCXVjX3R0bDsKIAlfX3UxNgkJCWNtc2dfZmxhZ3M7Ci0Jc3RydWN0IGlwX29wdGlvbnMJKm9wdDsKIAlfX2JlMTYJCQlpbmV0X3Nwb3J0OwogCV9fdTE2CQkJaW5ldF9pZDsKKworCXN0cnVjdCBpcF9vcHRpb25zCSpvcHQ7CiAJX191OAkJCXRvczsKKwlfX3U4CQkJbWluX3R0bDsKIAlfX3U4CQkJbWNfdHRsOwogCV9fdTgJCQlwbXR1ZGlzYzsKIAlfX3U4CQkJcmVjdmVycjoxLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXAuaCBiL2luY2x1ZGUvbmV0L2lwLmgKaW5kZXggZmI2MzM3MS4uNTAzOTk0YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXAuaAorKysgYi9pbmNsdWRlL25ldC9pcC5oCkBAIC0xNzQsOSArMTc0LDkgQEAKICNkZWZpbmUgTkVUX0FERF9TVEFUU19CSChuZXQsIGZpZWxkLCBhZG5kKSBTTk1QX0FERF9TVEFUU19CSCgobmV0KS0+bWliLm5ldF9zdGF0aXN0aWNzLCBmaWVsZCwgYWRuZCkKICNkZWZpbmUgTkVUX0FERF9TVEFUU19VU0VSKG5ldCwgZmllbGQsIGFkbmQpIFNOTVBfQUREX1NUQVRTX1VTRVIoKG5ldCktPm1pYi5uZXRfc3RhdGlzdGljcywgZmllbGQsIGFkbmQpCiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIHNubXBfZm9sZF9maWVsZCh2b2lkICptaWJbXSwgaW50IG9mZnQpOwotZXh0ZXJuIGludCBzbm1wX21pYl9pbml0KHZvaWQgKnB0clsyXSwgc2l6ZV90IG1pYnNpemUpOwotZXh0ZXJuIHZvaWQgc25tcF9taWJfZnJlZSh2b2lkICpwdHJbMl0pOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc25tcF9mb2xkX2ZpZWxkKHZvaWQgX19wZXJjcHUgKm1pYltdLCBpbnQgb2ZmdCk7CitleHRlcm4gaW50IHNubXBfbWliX2luaXQodm9pZCBfX3BlcmNwdSAqcHRyWzJdLCBzaXplX3QgbWlic2l6ZSk7CitleHRlcm4gdm9pZCBzbm1wX21pYl9mcmVlKHZvaWQgX19wZXJjcHUgKnB0clsyXSk7CiAKIGV4dGVybiBzdHJ1Y3QgbG9jYWxfcG9ydHMgewogCXNlcWxvY2tfdAlsb2NrOwpAQCAtMzUyLDggKzM1MiwxMSBAQAogCUlQX0RFRlJBR19MT0NBTF9ERUxJVkVSLAogCUlQX0RFRlJBR19DQUxMX1JBX0NIQUlOLAogCUlQX0RFRlJBR19DT05OVFJBQ0tfSU4sCisJX19JUF9ERUZSQUdfQ09OTlRSQUNLX0lOX0VORAk9IElQX0RFRlJBR19DT05OVFJBQ0tfSU4gKyBVU0hPUlRfTUFYLAogCUlQX0RFRlJBR19DT05OVFJBQ0tfT1VULAorCV9fSVBfREVGUkFHX0NPTk5UUkFDS19PVVRfRU5ECT0gSVBfREVGUkFHX0NPTk5UUkFDS19PVVQgKyBVU0hPUlRfTUFYLAogCUlQX0RFRlJBR19DT05OVFJBQ0tfQlJJREdFX0lOLAorCV9fSVBfREVGUkFHX0NPTk5UUkFDS19CUklER0VfSU4gPSBJUF9ERUZSQUdfQ09OTlRSQUNLX0JSSURHRV9JTiArIFVTSE9SVF9NQVgsCiAJSVBfREVGUkFHX1ZTX0lOLAogCUlQX0RFRlJBR19WU19PVVQsCiAJSVBfREVGUkFHX1ZTX0ZXRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXA2X2ZpYi5oCmluZGV4IDI1NzgwODEuLjg2ZjQ2YzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwNl9maWIuaAorKysgYi9pbmNsdWRlL25ldC9pcDZfZmliLmgKQEAgLTEyNCwxMSArMTI0LDEzIEBACiB9CiAKIHN0cnVjdCBmaWI2X3dhbGtlcl90IHsKLQlzdHJ1Y3QgZmliNl93YWxrZXJfdCAqcHJldiwgKm5leHQ7CisJc3RydWN0IGxpc3RfaGVhZCBsaDsKIAlzdHJ1Y3QgZmliNl9ub2RlICpyb290LCAqbm9kZTsKIAlzdHJ1Y3QgcnQ2X2luZm8gKmxlYWY7CiAJdW5zaWduZWQgY2hhciBzdGF0ZTsKIAl1bnNpZ25lZCBjaGFyIHBydW5lOworCXVuc2lnbmVkIGludCBza2lwOworCXVuc2lnbmVkIGludCBjb3VudDsKIAlpbnQgKCpmdW5jKShzdHJ1Y3QgZmliNl93YWxrZXJfdCAqKTsKIAl2b2lkICphcmdzOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oCmluZGV4IDhkYzMyOTYuLmZlODJiMWUxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF92cy5oCisrKyBiL2luY2x1ZGUvbmV0L2lwX3ZzLmgKQEAgLTI2LDYgKzI2LDExIEBACiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgkJCS8qIGZvciBzdHJ1Y3QgaXB2NmhkciAqLwogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CQkJLyogZm9yIGlwdjZfYWRkcl9jb3B5ICovCiAKKworLyogQ29ubmVjdGlvbnMnIHNpemUgdmFsdWUgbmVlZGVkIGJ5IGlwX3ZzX2N0bC5jICovCitleHRlcm4gaW50IGlwX3ZzX2Nvbm5fdGFiX3NpemU7CisKKwogc3RydWN0IGlwX3ZzX2lwaGRyIHsKIAlpbnQgbGVuOwogCV9fdTggcHJvdG9jb2w7CkBAIC0yMjAsNiArMjI1LDI2IEBACiB9OwogCiAvKgorICoJU0NUUCBTdGF0ZSBWYWx1ZXMKKyAqLworZW51bSBpcF92c19zY3RwX3N0YXRlcyB7CisJSVBfVlNfU0NUUF9TX05PTkUsCisJSVBfVlNfU0NUUF9TX0lOSVRfQ0xJLAorCUlQX1ZTX1NDVFBfU19JTklUX1NFUiwKKwlJUF9WU19TQ1RQX1NfSU5JVF9BQ0tfQ0xJLAorCUlQX1ZTX1NDVFBfU19JTklUX0FDS19TRVIsCisJSVBfVlNfU0NUUF9TX0VDSE9fQ0xJLAorCUlQX1ZTX1NDVFBfU19FQ0hPX1NFUiwKKwlJUF9WU19TQ1RQX1NfRVNUQUJMSVNIRUQsCisJSVBfVlNfU0NUUF9TX1NIVVRfQ0xJLAorCUlQX1ZTX1NDVFBfU19TSFVUX1NFUiwKKwlJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfQ0xJLAorCUlQX1ZTX1NDVFBfU19TSFVUX0FDS19TRVIsCisJSVBfVlNfU0NUUF9TX0NMT1NFRCwKKwlJUF9WU19TQ1RQX1NfTEFTVAorfTsKKworLyoKICAqCURlbHRhIHNlcXVlbmNlIGluZm8gc3RydWN0dXJlCiAgKglFYWNoIGlwX3ZzX2Nvbm4gaGFzIDIgKG91dHB1dCBBTkQgaW5wdXQgc2VxLiBjaGFuZ2VzKS4KICAqICAgICAgT25seSB1c2VkIGluIHRoZSBWUy9OQVQuCkBAIC01OTIsMTcgKzYxNyw2IEBACiAgKiAgICAgKGZyb20gaXBfdnNfY29ubi5jKQogICovCiAKLS8qCi0gKiAgICAgSVBWUyBjb25uZWN0aW9uIGVudHJ5IGhhc2ggdGFibGUKLSAqLwotI2lmbmRlZiBDT05GSUdfSVBfVlNfVEFCX0JJVFMKLSNkZWZpbmUgQ09ORklHX0lQX1ZTX1RBQl9CSVRTICAgMTIKLSNlbmRpZgotCi0jZGVmaW5lIElQX1ZTX0NPTk5fVEFCX0JJVFMJQ09ORklHX0lQX1ZTX1RBQl9CSVRTCi0jZGVmaW5lIElQX1ZTX0NPTk5fVEFCX1NJWkUgICAgICgxIDw8IElQX1ZTX0NPTk5fVEFCX0JJVFMpCi0jZGVmaW5lIElQX1ZTX0NPTk5fVEFCX01BU0sgICAgIChJUF9WU19DT05OX1RBQl9TSVpFIC0gMSkKLQogZW51bSB7CiAJSVBfVlNfRElSX0lOUFVUID0gMCwKIAlJUF9WU19ESVJfT1VUUFVULApAQCAtNzQ3LDcgKzc2MSw3IEBACiBleHRlcm4gc3RydWN0IGlwX3ZzX3Byb3RvY29sIGlwX3ZzX3Byb3RvY29sX2ljbXA7CiBleHRlcm4gc3RydWN0IGlwX3ZzX3Byb3RvY29sIGlwX3ZzX3Byb3RvY29sX2VzcDsKIGV4dGVybiBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgaXBfdnNfcHJvdG9jb2xfYWg7Ci0KK2V4dGVybiBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgaXBfdnNfcHJvdG9jb2xfc2N0cDsKIAogLyoKICAqICAgICAgUmVnaXN0ZXJpbmcvdW5yZWdpc3RlcmluZyBzY2hlZHVsZXIgZnVuY3Rpb25zCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcGNvbXAuaCBiL2luY2x1ZGUvbmV0L2lwY29tcC5oCmluZGV4IDJhMTA5MmEuLmNjNGYzMGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwY29tcC5oCisrKyBiL2luY2x1ZGUvbmV0L2lwY29tcC5oCkBAIC05LDcgKzksNyBAQAogCiBzdHJ1Y3QgaXBjb21wX2RhdGEgewogCXUxNiB0aHJlc2hvbGQ7Ci0Jc3RydWN0IGNyeXB0b19jb21wICoqdGZtczsKKwlzdHJ1Y3QgY3J5cHRvX2NvbXAgKiBfX3BlcmNwdSAqdGZtczsKIH07CiAKIHN0cnVjdCBpcF9jb21wX2hkcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwdjYuaCBiL2luY2x1ZGUvbmV0L2lwdjYuaAppbmRleCBjY2FiNTk0Li5lNzJmYjEwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcHY2LmgKKysrIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCkBAIC03Myw3ICs3Myw2IEBACiAjZGVmaW5lIElQVjZfQUREUl9TQ09QRV9NQVNLCTB4MDBmMFUKIAogI2RlZmluZSBJUFY2X0FERFJfTUFQUEVECTB4MTAwMFUKLSNkZWZpbmUgSVBWNl9BRERSX1JFU0VSVkVECTB4MjAwMFUJLyogcmVzZXJ2ZWQgYWRkcmVzcyBzcGFjZSAqLwogCiAvKgogICoJQWRkciBzY29wZXMKQEAgLTI0Niw3ICsyNDUsOSBAQAogaW50IGlwNl9mcmFnX25xdWV1ZXMoc3RydWN0IG5ldCAqbmV0KTsKIGludCBpcDZfZnJhZ19tZW0oc3RydWN0IG5ldCAqbmV0KTsKIAotI2RlZmluZSBJUFY2X0ZSQUdfVElNRU9VVAkoNjAqSFopCQkvKiA2MCBzZWNvbmRzICovCisjZGVmaW5lIElQVjZfRlJBR19ISUdIX1RIUkVTSAkoMjU2ICogMTAyNCkJLyogMjYyMTQ0ICovCisjZGVmaW5lIElQVjZfRlJBR19MT1dfVEhSRVNICSgxOTIgKiAxMDI0KQkvKiAxOTY2MDggKi8KKyNkZWZpbmUgSVBWNl9GUkFHX1RJTUVPVVQJKDYwICogSFopCS8qIDYwIHNlY29uZHMgKi8KIAogZXh0ZXJuIGludCBfX2lwdjZfYWRkcl90eXBlKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcik7CiBzdGF0aWMgaW5saW5lIGludCBpcHY2X2FkZHJfdHlwZShjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHIpCkBAIC0zNTMsOCArMzU0LDExIEBACiBlbnVtIGlwNl9kZWZyYWdfdXNlcnMgewogCUlQNl9ERUZSQUdfTE9DQUxfREVMSVZFUiwKIAlJUDZfREVGUkFHX0NPTk5UUkFDS19JTiwKKwlfX0lQNl9ERUZSQUdfQ09OTlRSQUNLX0lOCT0gSVA2X0RFRlJBR19DT05OVFJBQ0tfSU4gKyBVU0hPUlRfTUFYLAogCUlQNl9ERUZSQUdfQ09OTlRSQUNLX09VVCwKKwlfX0lQNl9ERUZSQUdfQ09OTlRSQUNLX09VVAk9IElQNl9ERUZSQUdfQ09OTlRSQUNLX09VVCArIFVTSE9SVF9NQVgsCiAJSVA2X0RFRlJBR19DT05OVFJBQ0tfQlJJREdFX0lOLAorCV9fSVA2X0RFRlJBR19DT05OVFJBQ0tfQlJJREdFX0lOID0gSVA2X0RFRlJBR19DT05OVFJBQ0tfQlJJREdFX0lOICsgVVNIT1JUX01BWCwKIH07CiAKIHN0cnVjdCBpcDZfY3JlYXRlX2FyZyB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pcmRhL2lydHRwLmggYi9pbmNsdWRlL25ldC9pcmRhL2lydHRwLmgKaW5kZXggMDc4OGMyMy4uMTFhZWU3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXJkYS9pcnR0cC5oCisrKyBiL2luY2x1ZGUvbmV0L2lyZGEvaXJ0dHAuaApAQCAtOTcsNyArOTcsNyBAQAogI2RlZmluZSBUVFBfTUFYX1NEVV9TSVpFIDB4MDEKIAogLyoKLSAqICBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBhbGwgZGF0YSBhc3Nvc2lhdGVkIHdpdGggb25lIGluc3RhbmNlIG9mIGEgVFRQIAorICogIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGFsbCBkYXRhIGFzc29jaWF0ZWQgd2l0aCBvbmUgaW5zdGFuY2Ugb2YgYSBUVFAgCiAgKiAgY29ubmVjdGlvbi4KICAqLwogc3RydWN0IHRzYXBfY2IgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbGxjLmggYi9pbmNsdWRlL25ldC9sbGMuaAppbmRleCA3OTQwZGExLi41NTAzYjc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9sbGMuaAorKysgYi9pbmNsdWRlL25ldC9sbGMuaApAQCAtMTYsNiArMTYsOSBAQAogI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcmN1bGlzdF9udWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgogCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCkBAIC0zMSw2ICszNCwxMiBAQAogI2RlZmluZSBMTENfU0FQX1NUQVRFX0lOQUNUSVZFCTEKICNkZWZpbmUgTExDX1NBUF9TVEFURV9BQ1RJVkUJMgogCisjZGVmaW5lIExMQ19TS19ERVZfSEFTSF9CSVRTIDYKKyNkZWZpbmUgTExDX1NLX0RFVl9IQVNIX0VOVFJJRVMgKDE8PExMQ19TS19ERVZfSEFTSF9CSVRTKQorCisjZGVmaW5lIExMQ19TS19MQUREUl9IQVNIX0JJVFMgNgorI2RlZmluZSBMTENfU0tfTEFERFJfSEFTSF9FTlRSSUVTICgxPDxMTENfU0tfTEFERFJfSEFTSF9CSVRTKQorCiAvKioKICAqIHN0cnVjdCBsbGNfc2FwIC0gRGVmaW5lcyB0aGUgU0FQIGNvbXBvbmVudAogICoKQEAgLTUzLDE4ICs2MiwzOCBAQAogCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KTsKIAlzdHJ1Y3QgbGxjX2FkZHIJIGxhZGRyOwogCXN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKLQlzdHJ1Y3QgewotCQlyd2xvY2tfdAkgIGxvY2s7Ci0JCXN0cnVjdCBobGlzdF9oZWFkIGxpc3Q7Ci0JfSBza19saXN0OworCXNwaW5sb2NrX3Qgc2tfbG9jazsKKwlpbnQgc2tfY291bnQ7CisJc3RydWN0IGhsaXN0X251bGxzX2hlYWQgc2tfbGFkZHJfaGFzaFtMTENfU0tfTEFERFJfSEFTSF9FTlRSSUVTXTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCBza19kZXZfaGFzaFtMTENfU0tfREVWX0hBU0hfRU5UUklFU107CiB9OwogCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgaGxpc3RfaGVhZCAqbGxjX3NrX2Rldl9oYXNoKHN0cnVjdCBsbGNfc2FwICpzYXAsIGludCBpZmluZGV4KQoreworCXJldHVybiAmc2FwLT5za19kZXZfaGFzaFtpZmluZGV4ICUgTExDX1NLX0RFVl9IQVNIX0VOVFJJRVNdOworfQorCitzdGF0aWMgaW5saW5lCit1MzIgbGxjX3NrX2xhZGRyX2hhc2hmbihzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBjb25zdCBzdHJ1Y3QgbGxjX2FkZHIgKmxhZGRyKQoreworCXJldHVybiBoYXNoXzMyKGpoYXNoKGxhZGRyLT5tYWMsIHNpemVvZihsYWRkci0+bWFjKSwgMCksCisJCSAgICAgICBMTENfU0tfTEFERFJfSEFTSF9CSVRTKTsKK30KKworc3RhdGljIGlubGluZQorc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmxsY19za19sYWRkcl9oYXNoKHN0cnVjdCBsbGNfc2FwICpzYXAsCisJCQkJCSAgIGNvbnN0IHN0cnVjdCBsbGNfYWRkciAqbGFkZHIpCit7CisJcmV0dXJuICZzYXAtPnNrX2xhZGRyX2hhc2hbbGxjX3NrX2xhZGRyX2hhc2hmbihzYXAsIGxhZGRyKV07Cit9CisKICNkZWZpbmUgTExDX0RFU1RfSU5WQUxJRCAgICAgICAgIDAgICAgICAvKiBJbnZhbGlkIExMQyBQRFUgdHlwZSAqLwogI2RlZmluZSBMTENfREVTVF9TQVAgICAgICAgICAgICAgMSAgICAgIC8qIFR5cGUgMSBnb2VzIGhlcmUgKi8KICNkZWZpbmUgTExDX0RFU1RfQ09OTiAgICAgICAgICAgIDIgICAgICAvKiBUeXBlIDIgZ29lcyBoZXJlICovCiAKIGV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGxsY19zYXBfbGlzdDsKLWV4dGVybiByd2xvY2tfdCBsbGNfc2FwX2xpc3RfbG9jazsKK2V4dGVybiBzcGlubG9ja190IGxsY19zYXBfbGlzdF9sb2NrOwogCiBleHRlcm4gaW50IGxsY19yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmggYi9pbmNsdWRlL25ldC9sbGNfY29ubi5oCmluZGV4IGUyMzc0ZTMuLjJmOTdkOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2xsY19jb25uLmgKKysrIGIvaW5jbHVkZS9uZXQvbGxjX2Nvbm4uaApAQCAtNzYsNiArNzYsOCBAQAogCXUzMgkJICAgIHJ4X3BkdV9oZHI7CSAgIC8qIHVzZWQgZm9yIHNhdmluZyBoZWFkZXIgb2YgbGFzdCBwZHUKIAkJCQkJICAgICAgcmVjZWl2ZWQgYW5kIGNhdXNlZCBzZW5kaW5nIEZSTVIuCiAJCQkJCSAgICAgIFVzZWQgZm9yIHJlc2VuZGluZyBGUk1SICovCisJdTMyCQkgICAgY21zZ19mbGFnczsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAgIGRldl9oYXNoX25vZGU7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBsbGNfc29jayAqbGxjX3NrKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmggYi9pbmNsdWRlL25ldC9tYWM4MDIxMS5oCmluZGV4IDBiZjM2OTcuLjgwZWI3Y2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L21hYzgwMjExLmgKKysrIGIvaW5jbHVkZS9uZXQvbWFjODAyMTEuaApAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgogICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+Ci0gKiBDb3B5cmlnaHQgMjAwNy0yMDA4CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNy0yMDEwCUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0xMDcsMjUgKzEwNywxNCBAQAogICoJMl5uLTEgaW4gdGhlIHJhbmdlIDEuLjMyNzY3XQogICogQGN3X21heDogbWF4aW11bSBjb250ZW50aW9uIHdpbmRvdyBbbGlrZSBAY3dfbWluXQogICogQHR4b3A6IG1heGltdW0gYnVyc3QgdGltZSBpbiB1bml0cyBvZiAzMiB1c2VjcywgMCBtZWFuaW5nIGRpc2FibGVkCisgKiBAdWFwc2Q6IGlzIFUtQVBTRCBtb2RlIGVuYWJsZWQgZm9yIHRoZSBxdWV1ZQogICovCiBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyB7CiAJdTE2IHR4b3A7CiAJdTE2IGN3X21pbjsKIAl1MTYgY3dfbWF4OwogCXU4IGFpZnM7Ci19OwotCi0vKioKLSAqIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgLSB0cmFuc21pdCBxdWV1ZSBzdGF0aXN0aWNzCi0gKgotICogQGxlbjogbnVtYmVyIG9mIHBhY2tldHMgaW4gcXVldWUKLSAqIEBsaW1pdDogcXVldWUgbGVuZ3RoIGxpbWl0Ci0gKiBAY291bnQ6IG51bWJlciBvZiBmcmFtZXMgc2VudAotICovCi1zdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzIHsKLQl1bnNpZ25lZCBpbnQgbGVuOwotCXVuc2lnbmVkIGludCBsaW1pdDsKLQl1bnNpZ25lZCBpbnQgY291bnQ7CisJYm9vbCB1YXBzZDsKIH07CiAKIHN0cnVjdCBpZWVlODAyMTFfbG93X2xldmVsX3N0YXRzIHsKQEAgLTE4NCw3ICsxNzMsOCBAQAogICogQHVzZV9zaG9ydF9zbG90OiB1c2Ugc2hvcnQgc2xvdCB0aW1lIChvbmx5IHJlbGV2YW50IGZvciBFUlApOwogICoJaWYgdGhlIGhhcmR3YXJlIGNhbm5vdCBoYW5kbGUgdGhpcyBpdCBtdXN0IHNldCB0aGUKICAqCUlFRUU4MDIxMV9IV18yR0haX1NIT1JUX1NMT1RfSU5DQVBBQkxFIGhhcmR3YXJlIGZsYWcKLSAqIEBkdGltX3BlcmlvZDogbnVtIG9mIGJlYWNvbnMgYmVmb3JlIHRoZSBuZXh0IERUSU0sIGZvciBQU00KKyAqIEBkdGltX3BlcmlvZDogbnVtIG9mIGJlYWNvbnMgYmVmb3JlIHRoZSBuZXh0IERUSU0sIGZvciBiZWFjb25pbmcsCisgKglub3QgdmFsaWQgaW4gc3RhdGlvbiBtb2RlIChjZi4gaHcgY29uZiBwc19kdGltX3BlcmlvZCkKICAqIEB0aW1lc3RhbXA6IGJlYWNvbiB0aW1lc3RhbXAKICAqIEBiZWFjb25faW50OiBiZWFjb24gaW50ZXJ2YWwKICAqIEBhc3NvY19jYXBhYmlsaXR5OiBjYXBhYmlsaXRpZXMgdGFrZW4gZnJvbSBhc3NvYyByZXNwCkBAIC0yNTUsOSArMjQ1LDYgQEAKICAqIEBJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRTogaW50ZXJuYWwgdG8gbWFjODAyMTEsIGNhbiBiZQogICoJc2V0IGJ5IHJhdGUgY29udHJvbCBhbGdvcml0aG1zIHRvIGluZGljYXRlIHByb2JlIHJhdGUsIHdpbGwKICAqCWJlIGNsZWFyZWQgZm9yIGZyYWdtZW50ZWQgZnJhbWVzIChleGNlcHQgb24gdGhlIGxhc3QgZnJhZ21lbnQpCi0gKiBASUVFRTgwMjExX1RYX0lOVEZMX1JDQUxHTzogbWFjODAyMTEgaW50ZXJuYWwgZmxhZywgZG8gbm90IHRlc3Qgb3IKLSAqCXNldCB0aGlzIGZsYWcgaW4gdGhlIGRyaXZlcjsgaW5kaWNhdGVzIHRoYXQgdGhlIHJhdGUgY29udHJvbAotICoJYWxnb3JpdGhtIHdhcyB1c2VkIGFuZCBzaG91bGQgYmUgbm90aWZpZWQgb2YgVFggc3RhdHVzCiAgKiBASUVFRTgwMjExX1RYX0lOVEZMX05FRURfVFhQUk9DRVNTSU5HOiBjb21wbGV0ZWx5IGludGVybmFsIHRvIG1hYzgwMjExLAogICoJdXNlZCB0byBpbmRpY2F0ZSB0aGF0IGEgcGVuZGluZyBmcmFtZSByZXF1aXJlcyBUWCBwcm9jZXNzaW5nIGJlZm9yZQogICoJaXQgY2FuIGJlIHNlbnQgb3V0LgpAQCAtMjcyLDYgKzI1OSwxNCBAQAogICoJdHJhbnNtaXQgZnVuY3Rpb24gYWZ0ZXIgdGhlIGN1cnJlbnQgZnJhbWUsIHRoaXMgY2FuIGJlIHVzZWQKICAqCWJ5IGRyaXZlcnMgdG8ga2ljayB0aGUgRE1BIHF1ZXVlIG9ubHkgaWYgdW5zZXQgb3Igd2hlbiB0aGUKICAqCXF1ZXVlIGdldHMgZnVsbC4KKyAqIEBJRUVFODAyMTFfVFhfSU5URkxfUkVUUkFOU01JU1NJT046IFRoaXMgZnJhbWUgaXMgYmVpbmcgcmV0cmFuc21pdHRlZAorICoJYWZ0ZXIgVFggc3RhdHVzIGJlY2F1c2UgdGhlIGRlc3RpbmF0aW9uIHdhcyBhc2xlZXAsIGl0IG11c3Qgbm90CisgKgliZSBtb2RpZmllZCBhZ2FpbiAobm8gc2Vxbm8gYXNzaWdubWVudCwgY3J5cHRvLCBldGMuKQorICogQElFRUU4MDIxMV9UWF9JTlRGTF9IQVNfUkFESU9UQVA6IFRoaXMgZnJhbWUgd2FzIGluamVjdGVkIGFuZCBzdGlsbAorICoJaGFzIGEgcmFkaW90YXAgaGVhZGVyIGF0IHNrYi0+ZGF0YS4KKyAqIEBJRUVFODAyMTFfVFhfSU5URkxfTkw4MDIxMV9GUkFNRV9UWDogRnJhbWUgd2FzIHJlcXVlc3RlZCB0aHJvdWdoIG5sODAyMTEKKyAqCU1MTUUgY29tbWFuZCAoaW50ZXJuYWwgdG8gbWFjODAyMTEgdG8gZmlndXJlIG91dCB3aGV0aGVyIHRvIHNlbmQgVFgKKyAqCXN0YXR1cyB0byB1c2VyIHNwYWNlKQogICovCiBlbnVtIG1hYzgwMjExX3R4X2NvbnRyb2xfZmxhZ3MgewogCUlFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUwkJPSBCSVQoMCksCkBAIC0yODcsMTIgKzI4MiwxNCBAQAogCUlFRUU4MDIxMV9UWF9TVEFUX0FNUERVCQkJPSBCSVQoMTApLAogCUlFRUU4MDIxMV9UWF9TVEFUX0FNUERVX05PX0JBQ0sJCT0gQklUKDExKSwKIAlJRUVFODAyMTFfVFhfQ1RMX1JBVEVfQ1RSTF9QUk9CRQk9IEJJVCgxMiksCi0JSUVFRTgwMjExX1RYX0lOVEZMX1JDQUxHTwkJPSBCSVQoMTMpLAogCUlFRUU4MDIxMV9UWF9JTlRGTF9ORUVEX1RYUFJPQ0VTU0lORwk9IEJJVCgxNCksCiAJSUVFRTgwMjExX1RYX0lOVEZMX1JFVFJJRUQJCT0gQklUKDE1KSwKIAlJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUCQk9IEJJVCgxNiksCiAJSUVFRTgwMjExX1RYX0NUTF9QU1BPTExfUkVTUE9OU0UJPSBCSVQoMTcpLAogCUlFRUU4MDIxMV9UWF9DVExfTU9SRV9GUkFNRVMJCT0gQklUKDE4KSwKKwlJRUVFODAyMTFfVFhfSU5URkxfUkVUUkFOU01JU1NJT04JPSBCSVQoMTkpLAorCUlFRUU4MDIxMV9UWF9JTlRGTF9IQVNfUkFESU9UQVAJCT0gQklUKDIwKSwKKwlJRUVFODAyMTFfVFhfSU5URkxfTkw4MDIxMV9GUkFNRV9UWAk9IEJJVCgyMSksCiB9OwogCiAvKioKQEAgLTU3MSw3ICs1NjgsMTMgQEAKICAqIEBJRUVFODAyMTFfQ09ORl9NT05JVE9SOiB0aGVyZSdzIGEgbW9uaXRvciBpbnRlcmZhY2UgcHJlc2VudCAtLSB1c2UgdGhpcwogICoJdG8gZGV0ZXJtaW5lIGZvciBleGFtcGxlIHdoZXRoZXIgdG8gY2FsY3VsYXRlIHRpbWVzdGFtcHMgZm9yIHBhY2tldHMKICAqCW9yIG5vdCwgZG8gbm90IHVzZSBpbnN0ZWFkIG9mIGZpbHRlciBmbGFncyEKLSAqIEBJRUVFODAyMTFfQ09ORl9QUzogRW5hYmxlIDgwMi4xMSBwb3dlciBzYXZlIG1vZGUgKG1hbmFnZWQgbW9kZSBvbmx5KQorICogQElFRUU4MDIxMV9DT05GX1BTOiBFbmFibGUgODAyLjExIHBvd2VyIHNhdmUgbW9kZSAobWFuYWdlZCBtb2RlIG9ubHkpLgorICoJVGhpcyBpcyB0aGUgcG93ZXIgc2F2ZSBtb2RlIGRlZmluZWQgYnkgSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDExLjIsCisgKgltZWFuaW5nIHRoYXQgdGhlIGhhcmR3YXJlIHN0aWxsIHdha2VzIHVwIGZvciBiZWFjb25zLCBpcyBhYmxlIHRvCisgKgl0cmFuc21pdCBmcmFtZXMgYW5kIHJlY2VpdmUgdGhlIHBvc3NpYmxlIGFja25vd2xlZGdtZW50IGZyYW1lcy4KKyAqCU5vdCB0byBiZSBjb25mdXNlZCB3aXRoIGhhcmR3YXJlIHNwZWNpZmljIHdha2V1cC9zbGVlcCBzdGF0ZXMsCisgKglkcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIHRoYXQuIFNlZSB0aGUgc2VjdGlvbiAiUG93ZXJzYXZlIHN1cHBvcnQiCisgKglmb3IgbW9yZS4KICAqIEBJRUVFODAyMTFfQ09ORl9JRExFOiBUaGUgZGV2aWNlIGlzIHJ1bm5pbmcsIGJ1dCBpZGxlOyBpZiB0aGUgZmxhZyBpcyBzZXQKICAqCXRoZSBkcml2ZXIgc2hvdWxkIGJlIHByZXBhcmVkIHRvIGhhbmRsZSBjb25maWd1cmF0aW9uIHJlcXVlc3RzIGJ1dAogICoJbWF5IHR1cm4gdGhlIGRldmljZSBvZmYgYXMgbXVjaCBhcyBwb3NzaWJsZS4gVHlwaWNhbGx5LCB0aGlzIGZsYWcgd2lsbApAQCAtNTk1LDggKzU5OCwxMCBAQAogICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9DSEFOTkVMOiB0aGUgY2hhbm5lbC9jaGFubmVsX3R5cGUgY2hhbmdlZAogICogQElFRUU4MDIxMV9DT05GX0NIQU5HRV9SRVRSWV9MSU1JVFM6IHJldHJ5IGxpbWl0cyBjaGFuZ2VkCiAgKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX0lETEU6IElkbGUgZmxhZyBjaGFuZ2VkCisgKiBASUVFRTgwMjExX0NPTkZfQ0hBTkdFX1NNUFM6IFNwYXRpYWwgbXVsdGlwbGV4aW5nIHBvd2Vyc2F2ZSBtb2RlIGNoYW5nZWQKICAqLwogZW51bSBpZWVlODAyMTFfY29uZl9jaGFuZ2VkIHsKKwlJRUVFODAyMTFfQ09ORl9DSEFOR0VfU01QUwkJPSBCSVQoMSksCiAJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0xJU1RFTl9JTlRFUlZBTAk9IEJJVCgyKSwKIAlJRUVFODAyMTFfQ09ORl9DSEFOR0VfTU9OSVRPUgkJPSBCSVQoMyksCiAJSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTCQk9IEJJVCg0KSwKQEAgLTYwNyw2ICs2MTIsMjUgQEAKIH07CiAKIC8qKgorICogZW51bSBpZWVlODAyMTFfc21wc19tb2RlIC0gc3BhdGlhbCBtdWx0aXBsZXhpbmcgcG93ZXIgc2F2ZSBtb2RlCisgKgorICogQElFRUU4MDIxMV9TTVBTX0FVVE9NQVRJQzogYXV0b21hdGljCisgKiBASUVFRTgwMjExX1NNUFNfT0ZGOiBvZmYKKyAqIEBJRUVFODAyMTFfU01QU19TVEFUSUM6IHN0YXRpYworICogQElFRUU4MDIxMV9TTVBTX0RZTkFNSUM6IGR5bmFtaWMKKyAqIEBJRUVFODAyMTFfU01QU19OVU1fTU9ERVM6IGludGVybmFsLCBkb24ndCB1c2UKKyAqLworZW51bSBpZWVlODAyMTFfc21wc19tb2RlIHsKKwlJRUVFODAyMTFfU01QU19BVVRPTUFUSUMsCisJSUVFRTgwMjExX1NNUFNfT0ZGLAorCUlFRUU4MDIxMV9TTVBTX1NUQVRJQywKKwlJRUVFODAyMTFfU01QU19EWU5BTUlDLAorCisJLyoga2VlcCBsYXN0ICovCisJSUVFRTgwMjExX1NNUFNfTlVNX01PREVTLAorfTsKKworLyoqCiAgKiBzdHJ1Y3QgaWVlZTgwMjExX2NvbmYgLSBjb25maWd1cmF0aW9uIG9mIHRoZSBkZXZpY2UKICAqCiAgKiBUaGlzIHN0cnVjdCBpbmRpY2F0ZXMgaG93IHRoZSBkcml2ZXIgc2hhbGwgY29uZmlndXJlIHRoZSBoYXJkd2FyZS4KQEAgLTYxOSw2ICs2NDMsOSBAQAogICoJdmFsdWUgd2lsbCBiZSBvbmx5IGFjaGlldmFibGUgYmV0d2VlbiBEVElNIGZyYW1lcywgdGhlIGhhcmR3YXJlCiAgKgluZWVkcyB0byBjaGVjayBmb3IgdGhlIG11bHRpY2FzdCB0cmFmZmljIGJpdCBpbiBEVElNIGJlYWNvbnMuCiAgKglUaGlzIHZhcmlhYmxlIGlzIHZhbGlkIG9ubHkgd2hlbiB0aGUgQ09ORl9QUyBmbGFnIGlzIHNldC4KKyAqIEBwc19kdGltX3BlcmlvZDogVGhlIERUSU0gcGVyaW9kIG9mIHRoZSBBUCB3ZSdyZSBjb25uZWN0ZWQgdG8sIGZvciB1c2UKKyAqCWluIHBvd2VyIHNhdmluZy4gUG93ZXIgc2F2aW5nIHdpbGwgbm90IGJlIGVuYWJsZWQgdW50aWwgYSBiZWFjb24KKyAqCWhhcyBiZWVuIHJlY2VpdmVkIGFuZCB0aGUgRFRJTSBwZXJpb2QgaXMga25vd24uCiAgKiBAZHluYW1pY19wc190aW1lb3V0OiBUaGUgZHluYW1pYyBwb3dlcnNhdmUgdGltZW91dCAoaW4gbXMpLCBzZWUgdGhlCiAgKglwb3dlcnNhdmUgZG9jdW1lbnRhdGlvbiBiZWxvdy4gVGhpcyB2YXJpYWJsZSBpcyB2YWxpZCBvbmx5IHdoZW4KICAqCXRoZSBDT05GX1BTIGZsYWcgaXMgc2V0LgpAQCAtNjM0LDYgKzY2MSwxMCBAQAogICogQHNob3J0X2ZyYW1lX21heF90eF9jb3VudDogTWF4aW11bSBudW1iZXIgb2YgdHJhbnNtaXNzaW9ucyBmb3IgYSAic2hvcnQiCiAgKiAgICBmcmFtZSwgY2FsbGVkICJkb3QxMVNob3J0UmV0cnlMaW1pdCIgaW4gODAyLjExLCBidXQgYWN0dWFsbHkgbWVhbnMgdGhlCiAgKiAgICBudW1iZXIgb2YgdHJhbnNtaXNzaW9ucyBub3QgdGhlIG51bWJlciBvZiByZXRyaWVzCisgKgorICogQHNtcHNfbW9kZTogc3BhdGlhbCBtdWx0aXBsZXhpbmcgcG93ZXJzYXZlIG1vZGU7IG5vdGUgdGhhdAorICoJJUlFRUU4MDIxMV9TTVBTX1NUQVRJQyBpcyB1c2VkIHdoZW4gdGhlIGRldmljZSBpcyBub3QKKyAqCWNvbmZpZ3VyZWQgZm9yIGFuIEhUIGNoYW5uZWwKICAqLwogc3RydWN0IGllZWU4MDIxMV9jb25mIHsKIAl1MzIgZmxhZ3M7CkBAIC02NDEsMTEgKzY3MiwxMyBAQAogCWludCBtYXhfc2xlZXBfcGVyaW9kOwogCiAJdTE2IGxpc3Rlbl9pbnRlcnZhbDsKKwl1OCBwc19kdGltX3BlcmlvZDsKIAogCXU4IGxvbmdfZnJhbWVfbWF4X3R4X2NvdW50LCBzaG9ydF9mcmFtZV9tYXhfdHhfY291bnQ7CiAKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CiAJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGU7CisJZW51bSBpZWVlODAyMTFfc21wc19tb2RlIHNtcHNfbW9kZTsKIH07CiAKIC8qKgpAQCAtNjU3LDEyICs2OTAsMTQgQEAKICAqIEB0eXBlOiB0eXBlIG9mIHRoaXMgdmlydHVhbCBpbnRlcmZhY2UKICAqIEBic3NfY29uZjogQlNTIGNvbmZpZ3VyYXRpb24gZm9yIHRoaXMgaW50ZXJmYWNlLCBlaXRoZXIgb3VyIG93bgogICoJb3IgdGhlIEJTUyB3ZSdyZSBhc3NvY2lhdGVkIHRvCisgKiBAYWRkcjogYWRkcmVzcyBvZiB0aGlzIGludGVyZmFjZQogICogQGRydl9wcml2OiBkYXRhIGFyZWEgZm9yIGRyaXZlciB1c2UsIHdpbGwgYWx3YXlzIGJlIGFsaWduZWQgdG8KICAqCXNpemVvZih2b2lkICopLgogICovCiBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiB7CiAJZW51bSBubDgwMjExX2lmdHlwZSB0eXBlOwogCXN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgYnNzX2NvbmY7CisJdTggYWRkcltFVEhfQUxFTl07CiAJLyogbXVzdCBiZSBsYXN0ICovCiAJdTggZHJ2X3ByaXZbMF0gX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oc2l6ZW9mKHZvaWQgKikpKSk7CiB9OwpAQCAtNjc2LDMzICs3MTEsNiBAQAogfQogCiAvKioKLSAqIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mIC0gaW5pdGlhbCBjb25maWd1cmF0aW9uIG9mIGFuIGludGVyZmFjZQotICoKLSAqIEB2aWY6IHBvaW50ZXIgdG8gYSBkcml2ZXItdXNlIHBlci1pbnRlcmZhY2Ugc3RydWN0dXJlLiBUaGUgcG9pbnRlcgotICoJaXRzZWxmIGlzIGFsc28gdXNlZCBmb3IgdmFyaW91cyBmdW5jdGlvbnMgaW5jbHVkaW5nCi0gKglpZWVlODAyMTFfYmVhY29uX2dldCgpIGFuZCBpZWVlODAyMTFfZ2V0X2J1ZmZlcmVkX2JjKCkuCi0gKiBAdHlwZTogb25lIG9mICZlbnVtIG5sODAyMTFfaWZ0eXBlIGNvbnN0YW50cy4gRGV0ZXJtaW5lcyB0aGUgdHlwZSBvZgotICoJYWRkZWQvcmVtb3ZlZCBpbnRlcmZhY2UuCi0gKiBAbWFjX2FkZHI6IHBvaW50ZXIgdG8gTUFDIGFkZHJlc3Mgb2YgdGhlIGludGVyZmFjZS4gVGhpcyBwb2ludGVyIGlzIHZhbGlkCi0gKgl1bnRpbCB0aGUgaW50ZXJmYWNlIGlzIHJlbW92ZWQgKGkuZS4gaXQgY2Fubm90IGJlIHVzZWQgYWZ0ZXIKLSAqCXJlbW92ZV9pbnRlcmZhY2UoKSBjYWxsYmFjayB3YXMgY2FsbGVkIGZvciB0aGlzIGludGVyZmFjZSkuCi0gKgotICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCBpbiBhZGRfaW50ZXJmYWNlKCkgYW5kIHJlbW92ZV9pbnRlcmZhY2UoKQotICogY2FsbGJhY2tzIG9mICZzdHJ1Y3QgaWVlZTgwMjExX2h3LgotICoKLSAqIFdoZW4geW91IGFsbG93IG11bHRpcGxlIGludGVyZmFjZXMgdG8gYmUgYWRkZWQgdG8geW91ciBQSFksIHRha2UgY2FyZQotICogdGhhdCB0aGUgaGFyZHdhcmUgY2FuIGFjdHVhbGx5IGhhbmRsZSBtdWx0aXBsZSBNQUMgYWRkcmVzc2VzLiBIb3dldmVyLAotICogYWxzbyB0YWtlIGNhcmUgdGhhdCB3aGVuIHRoZXJlJ3Mgbm8gaW50ZXJmYWNlIGxlZnQgd2l0aCBtYWNfYWRkciAhPSAlTlVMTAotICogeW91IHJlbW92ZSB0aGUgTUFDIGFkZHJlc3MgZnJvbSB0aGUgZGV2aWNlIHRvIGF2b2lkIGFja25vd2xlZGdpbmcgcGFja2V0cwotICogaW4gcHVyZSBtb25pdG9yIG1vZGUuCi0gKi8KLXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mIHsKLQllbnVtIG5sODAyMTFfaWZ0eXBlIHR5cGU7Ci0Jc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZjsKLQl2b2lkICptYWNfYWRkcjsKLX07Ci0KLS8qKgogICogZW51bSBpZWVlODAyMTFfa2V5X2FsZyAtIGtleSBhbGdvcml0aG0KICAqIEBBTEdfV0VQOiBXRVA0MCBvciBXRVAxMDQKICAqIEBBTEdfVEtJUDogVEtJUApAQCAtNzk3LDcgKzgwNSw3IEBACiAgKiBtYWM4MDIxMSwgYW55IGllZWU4MDIxMV9zdGEgcG9pbnRlciB5b3UgZ2V0IGFjY2VzcyB0byBtdXN0CiAgKiBlaXRoZXIgYmUgcHJvdGVjdGVkIGJ5IHJjdV9yZWFkX2xvY2soKSBleHBsaWNpdGx5IG9yIGltcGxpY2l0bHksCiAgKiBvciB5b3UgbXVzdCB0YWtlIGdvb2QgY2FyZSB0byBub3QgdXNlIHN1Y2ggYSBwb2ludGVyIGFmdGVyIGEKLSAqIGNhbGwgdG8geW91ciBzdGFfbm90aWZ5IGNhbGxiYWNrIHRoYXQgcmVtb3ZlZCBpdC4KKyAqIGNhbGwgdG8geW91ciBzdGFfcmVtb3ZlIGNhbGxiYWNrIHRoYXQgcmVtb3ZlZCBpdC4KICAqCiAgKiBAYWRkcjogTUFDIGFkZHJlc3MKICAqIEBhaWQ6IEFJRCB3ZSBhc3NpZ25lZCB0byB0aGUgc3RhdGlvbiBpZiB3ZSdyZSBhbiBBUApAQCAtODIzLDggKzgzMSw4IEBACiAgKiBpbmRpY2F0ZXMgYWRkaXRpb24gYW5kIHJlbW92YWwgb2YgYSBzdGF0aW9uIHRvIHN0YXRpb24gdGFibGUsCiAgKiBvciBpZiBhIGFzc29jaWF0ZWQgc3RhdGlvbiBtYWRlIGEgcG93ZXIgc3RhdGUgdHJhbnNpdGlvbi4KICAqCi0gKiBAU1RBX05PVElGWV9BREQ6IGEgc3RhdGlvbiB3YXMgYWRkZWQgdG8gdGhlIHN0YXRpb24gdGFibGUKLSAqIEBTVEFfTk9USUZZX1JFTU9WRTogYSBzdGF0aW9uIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgc3RhdGlvbiB0YWJsZQorICogQFNUQV9OT1RJRllfQUREOiAoREVQUkVDQVRFRCkgYSBzdGF0aW9uIHdhcyBhZGRlZCB0byB0aGUgc3RhdGlvbiB0YWJsZQorICogQFNUQV9OT1RJRllfUkVNT1ZFOiAoREVQUkVDQVRFRCkgYSBzdGF0aW9uIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgc3RhdGlvbiB0YWJsZQogICogQFNUQV9OT1RJRllfU0xFRVA6IGEgc3RhdGlvbiBpcyBub3cgc2xlZXBpbmcKICAqIEBTVEFfTk9USUZZX0FXQUtFOiBhIHNsZWVwaW5nIHN0YXRpb24gd29rZSB1cAogICovCkBAIC05MjYsNiArOTM0LDI2IEBACiAgKiBASUVFRTgwMjExX0hXX0JFQUNPTl9GSUxURVI6CiAgKglIYXJkd2FyZSBzdXBwb3J0cyBkcm9wcGluZyBvZiBpcnJlbGV2YW50IGJlYWNvbiBmcmFtZXMgdG8KICAqCWF2b2lkIHdha2luZyB1cCBjcHUuCisgKgorICogQElFRUU4MDIxMV9IV19TVVBQT1JUU19TVEFUSUNfU01QUzoKKyAqCUhhcmR3YXJlIHN1cHBvcnRzIHN0YXRpYyBzcGF0aWFsIG11bHRpcGxleGluZyBwb3dlcnNhdmUsCisgKglpZS4gY2FuIHR1cm4gb2ZmIGFsbCBidXQgb25lIGNoYWluIGV2ZW4gb24gSFQgY29ubmVjdGlvbnMKKyAqCXRoYXQgc2hvdWxkIGJlIHVzaW5nIG1vcmUgY2hhaW5zLgorICoKKyAqIEBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19TTVBTOgorICoJSGFyZHdhcmUgc3VwcG9ydHMgZHluYW1pYyBzcGF0aWFsIG11bHRpcGxleGluZyBwb3dlcnNhdmUsCisgKglpZS4gY2FuIHR1cm4gb2ZmIGFsbCBidXQgb25lIGNoYWluIGFuZCB0aGVuIHdha2UgdGhlIHJlc3QKKyAqCXVwIGFzIHJlcXVpcmVkIGFmdGVyLCBmb3IgZXhhbXBsZSwgcnRzL2N0cyBoYW5kc2hha2UuCisgKgorICogQElFRUU4MDIxMV9IV19TVVBQT1JUU19VQVBTRDoKKyAqCUhhcmR3YXJlIHN1cHBvcnRzIFVuc2NoZWR1bGVkIEF1dG9tYXRpYyBQb3dlciBTYXZlIERlbGl2ZXJ5CisgKgkoVS1BUFNEKSBpbiBtYW5hZ2VkIG1vZGUuIFRoZSBtb2RlIGlzIGNvbmZpZ3VyZWQgd2l0aAorICoJY29uZl90eCgpIG9wZXJhdGlvbi4KKyAqCisgKiBASUVFRTgwMjExX0hXX1JFUE9SVFNfVFhfQUNLX1NUQVRVUzoKKyAqCUhhcmR3YXJlIGNhbiBwcm92aWRlIGFjayBzdGF0dXMgcmVwb3J0cyBvZiBUeCBmcmFtZXMgdG8KKyAqCXRoZSBzdGFjay4KKyAqCiAgKi8KIGVudW0gaWVlZTgwMjExX2h3X2ZsYWdzIHsKIAlJRUVFODAyMTFfSFdfSEFTX1JBVEVfQ09OVFJPTAkJCT0gMTw8MCwKQEAgLTk0Myw2ICs5NzEsMTAgQEAKIAlJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUwkJPSAxPDwxMiwKIAlJRUVFODAyMTFfSFdfTUZQX0NBUEFCTEUJCQk9IDE8PDEzLAogCUlFRUU4MDIxMV9IV19CRUFDT05fRklMVEVSCQkJPSAxPDwxNCwKKwlJRUVFODAyMTFfSFdfU1VQUE9SVFNfU1RBVElDX1NNUFMJCT0gMTw8MTUsCisJSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfU01QUwkJPSAxPDwxNiwKKwlJRUVFODAyMTFfSFdfU1VQUE9SVFNfVUFQU0QJCQk9IDE8PDE3LAorCUlFRUU4MDIxMV9IV19SRVBPUlRTX1RYX0FDS19TVEFUVVMJCT0gMTw8MTgsCiB9OwogCiAvKioKQEAgLTExMjEsMTggKzExNTMsMjQgQEAKICAqCiAgKiBtYWM4MDIxMSBoYXMgc3VwcG9ydCBmb3IgdmFyaW91cyBwb3dlcnNhdmUgaW1wbGVtZW50YXRpb25zLgogICoKLSAqIEZpcnN0LCBpdCBjYW4gc3VwcG9ydCBoYXJkd2FyZSB0aGF0IGhhbmRsZXMgYWxsIHBvd2Vyc2F2aW5nIGJ5Ci0gKiBpdHNlbGYsIHN1Y2ggaGFyZHdhcmUgc2hvdWxkIHNpbXBseSBzZXQgdGhlICVJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMKLSAqIGhhcmR3YXJlIGZsYWcuIEluIHRoYXQgY2FzZSwgaXQgd2lsbCBiZSB0b2xkIGFib3V0IHRoZSBkZXNpcmVkCi0gKiBwb3dlcnNhdmUgbW9kZSBkZXBlbmRpbmcgb24gdGhlIGFzc29jaWF0aW9uIHN0YXR1cywgYW5kIHRoZSBkcml2ZXIKLSAqIG11c3QgdGFrZSBjYXJlIG9mIHNlbmRpbmcgbnVsbGZ1bmMgZnJhbWVzIHdoZW4gbmVjZXNzYXJ5LCBpLmUuIHdoZW4KLSAqIGVudGVyaW5nIGFuZCBsZWF2aW5nIHBvd2Vyc2F2ZSBtb2RlLiBUaGUgZHJpdmVyIGlzIHJlcXVpcmVkIHRvIGxvb2sgYXQKLSAqIHRoZSBBSUQgaW4gYmVhY29ucyBhbmQgc2lnbmFsIHRvIHRoZSBBUCB0aGF0IGl0IHdva2UgdXAgd2hlbiBpdCBmaW5kcwotICogdHJhZmZpYyBkaXJlY3RlZCB0byBpdC4gVGhpcyBtb2RlIHN1cHBvcnRzIGR5bmFtaWMgUFMgYnkgc2ltcGx5Ci0gKiBlbmFibGluZy9kaXNhYmxpbmcgUFMuCisgKiBGaXJzdCwgaXQgY2FuIHN1cHBvcnQgaGFyZHdhcmUgdGhhdCBoYW5kbGVzIGFsbCBwb3dlcnNhdmluZyBieSBpdHNlbGYsCisgKiBzdWNoIGhhcmR3YXJlIHNob3VsZCBzaW1wbHkgc2V0IHRoZSAlSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTIGhhcmR3YXJlCisgKiBmbGFnLiBJbiB0aGF0IGNhc2UsIGl0IHdpbGwgYmUgdG9sZCBhYm91dCB0aGUgZGVzaXJlZCBwb3dlcnNhdmUgbW9kZQorICogd2l0aCB0aGUgJUlFRUU4MDIxMV9DT05GX1BTIGZsYWcgZGVwZW5kaW5nIG9uIHRoZSBhc3NvY2lhdGlvbiBzdGF0dXMuCisgKiBUaGUgaGFyZHdhcmUgbXVzdCB0YWtlIGNhcmUgb2Ygc2VuZGluZyBudWxsZnVuYyBmcmFtZXMgd2hlbiBuZWNlc3NhcnksCisgKiBpLmUuIHdoZW4gZW50ZXJpbmcgYW5kIGxlYXZpbmcgcG93ZXJzYXZlIG1vZGUuIFRoZSBoYXJkd2FyZSBpcyByZXF1aXJlZAorICogdG8gbG9vayBhdCB0aGUgQUlEIGluIGJlYWNvbnMgYW5kIHNpZ25hbCB0byB0aGUgQVAgdGhhdCBpdCB3b2tlIHVwIHdoZW4KKyAqIGl0IGZpbmRzIHRyYWZmaWMgZGlyZWN0ZWQgdG8gaXQuCiAgKgotICogQWRkaXRpb25hbGx5LCBzdWNoIGhhcmR3YXJlIG1heSBzZXQgdGhlICVJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUwotICogZmxhZyB0byBpbmRpY2F0ZSB0aGF0IGl0IGNhbiBzdXBwb3J0IGR5bmFtaWMgUFMgbW9kZSBpdHNlbGYgKHNlZSBiZWxvdykuCisgKiAlSUVFRTgwMjExX0NPTkZfUFMgZmxhZyBlbmFibGVkIG1lYW5zIHRoYXQgdGhlIHBvd2Vyc2F2ZSBtb2RlIGRlZmluZWQgaW4KKyAqIElFRUUgODAyLjExLTIwMDcgc2VjdGlvbiAxMS4yIGlzIGVuYWJsZWQuIFRoaXMgaXMgbm90IHRvIGJlIGNvbmZ1c2VkCisgKiB3aXRoIGhhcmR3YXJlIHdha2V1cCBhbmQgc2xlZXAgc3RhdGVzLiBEcml2ZXIgaXMgcmVzcG9uc2libGUgZm9yIHdha2luZworICogdXAgdGhlIGhhcmR3YXJlIGJlZm9yZSBpc3N1ZWluZyBjb21tYW5kcyB0byB0aGUgaGFyZHdhcmUgYW5kIHB1dHRpbmcgaXQKKyAqIGJhY2sgdG8gc2xlZXAgYXQgYXBwcm9yaWF0ZSB0aW1lcy4KKyAqCisgKiBXaGVuIFBTIGlzIGVuYWJsZWQsIGhhcmR3YXJlIG5lZWRzIHRvIHdha2V1cCBmb3IgYmVhY29ucyBhbmQgcmVjZWl2ZSB0aGUKKyAqIGJ1ZmZlcmVkIG11bHRpY2FzdC9icm9hZGNhc3QgZnJhbWVzIGFmdGVyIHRoZSBiZWFjb24uIEFsc28gaXQgbXVzdCBiZQorICogcG9zc2libGUgdG8gc2VuZCBmcmFtZXMgYW5kIHJlY2VpdmUgdGhlIGFja25vd2xlZG1lbnQgZnJhbWUuCiAgKgogICogT3RoZXIgaGFyZHdhcmUgZGVzaWducyBjYW5ub3Qgc2VuZCBudWxsZnVuYyBmcmFtZXMgYnkgdGhlbXNlbHZlcyBhbmQgYWxzbwogICogbmVlZCBzb2Z0d2FyZSBzdXBwb3J0IGZvciBwYXJzaW5nIHRoZSBUSU0gYml0bWFwLiBUaGlzIGlzIGFsc28gc3VwcG9ydGVkCkBAIC0xMTQwLDE0ICsxMTc4LDM1IEBACiAgKiAlSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIGZsYWdzLiBUaGUgaGFyZHdhcmUgaXMgb2YgY291cnNlIHN0aWxsCiAgKiByZXF1aXJlZCB0byBwYXNzIHVwIGJlYWNvbnMuIFRoZSBoYXJkd2FyZSBpcyBzdGlsbCByZXF1aXJlZCB0byBoYW5kbGUKICAqIHdha2luZyB1cCBmb3IgbXVsdGljYXN0IHRyYWZmaWM7IGlmIGl0IGNhbm5vdCB0aGUgZHJpdmVyIG11c3QgaGFuZGxlIHRoYXQKLSAqIGFzIGJlc3QgYXMgaXQgY2FuLCBtYWM4MDIxMSBpcyB0b28gc2xvdy4KKyAqIGFzIGJlc3QgYXMgaXQgY2FuLCBtYWM4MDIxMSBpcyB0b28gc2xvdyB0byBkbyB0aGF0LgogICoKLSAqIER5bmFtaWMgcG93ZXJzYXZlIG1vZGUgaXMgYW4gZXh0ZW5zaW9uIHRvIG5vcm1hbCBwb3dlcnNhdmUgbW9kZSBpbiB3aGljaAotICogdGhlIGhhcmR3YXJlIHN0YXlzIGF3YWtlIGZvciBhIHVzZXItc3BlY2lmaWVkIHBlcmlvZCBvZiB0aW1lIGFmdGVyIHNlbmRpbmcKLSAqIGEgZnJhbWUgc28gdGhhdCByZXBseSBmcmFtZXMgbmVlZCBub3QgYmUgYnVmZmVyZWQgYW5kIHRoZXJlZm9yZSBkZWxheWVkCi0gKiB0byB0aGUgbmV4dCB3YWtldXAuIFRoaXMgY2FuIGVpdGhlciBiZSBzdXBwb3J0ZWQgYnkgaGFyZHdhcmUsIGluIHdoaWNoIGNhc2UKLSAqIHRoZSBkcml2ZXIgbmVlZHMgdG8gbG9vayBhdCB0aGUgQGR5bmFtaWNfcHNfdGltZW91dCBoYXJkd2FyZSBjb25maWd1cmF0aW9uCi0gKiB2YWx1ZSwgb3IgYnkgdGhlIHN0YWNrIGlmIGFsbCBudWxsZnVuYyBoYW5kbGluZyBpcyBpbiB0aGUgc3RhY2suCisgKiBEeW5hbWljIHBvd2Vyc2F2ZSBpcyBhbiBleHRlbnNpb24gdG8gbm9ybWFsIHBvd2Vyc2F2ZSBpbiB3aGljaCB0aGUKKyAqIGhhcmR3YXJlIHN0YXlzIGF3YWtlIGZvciBhIHVzZXItc3BlY2lmaWVkIHBlcmlvZCBvZiB0aW1lIGFmdGVyIHNlbmRpbmcgYQorICogZnJhbWUgc28gdGhhdCByZXBseSBmcmFtZXMgbmVlZCBub3QgYmUgYnVmZmVyZWQgYW5kIHRoZXJlZm9yZSBkZWxheWVkIHRvCisgKiB0aGUgbmV4dCB3YWtldXAuIEl0J3MgY29tcHJvbWlzZSBvZiBnZXR0aW5nIGdvb2QgZW5vdWdoIGxhdGVuY3kgd2hlbgorICogdGhlcmUncyBkYXRhIHRyYWZmaWMgYW5kIHN0aWxsIHNhdmluZyBzaWduaWZpY2FudGx5IHBvd2VyIGluIGlkbGUKKyAqIHBlcmlvZHMuCisgKgorICogRHluYW1pYyBwb3dlcnNhdmUgaXMgc3VwcG9ydGVkIGJ5IHNpbXBseSBtYWM4MDIxMSBlbmFibGluZyBhbmQgZGlzYWJsaW5nCisgKiBQUyBiYXNlZCBvbiB0cmFmZmljLiBEcml2ZXIgbmVlZHMgdG8gb25seSBzZXQgJUlFRUU4MDIxMV9IV19TVVBQT1JUU19QUworICogZmxhZyBhbmQgbWFjODAyMTEgd2lsbCBoYW5kbGUgZXZlcnl0aGluZyBhdXRvbWF0aWNhbGx5LiBBZGRpdGlvbmFsbHksCisgKiBoYXJkd2FyZSBoYXZpbmcgc3VwcG9ydCBmb3IgdGhlIGR5bmFtaWMgUFMgZmVhdHVyZSBtYXkgc2V0IHRoZQorICogJUlFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTIGZsYWcgdG8gaW5kaWNhdGUgdGhhdCBpdCBjYW4gc3VwcG9ydAorICogZHluYW1pYyBQUyBtb2RlIGl0c2VsZi4gVGhlIGRyaXZlciBuZWVkcyB0byBsb29rIGF0IHRoZQorICogQGR5bmFtaWNfcHNfdGltZW91dCBoYXJkd2FyZSBjb25maWd1cmF0aW9uIHZhbHVlIGFuZCB1c2UgaXQgdGhhdCB2YWx1ZQorICogd2hlbmV2ZXIgJUlFRUU4MDIxMV9DT05GX1BTIGlzIHNldC4gSW4gdGhpcyBjYXNlIG1hYzgwMjExIHdpbGwgZGlzYWJsZQorICogZHluYW1pYyBQUyBmZWF0dXJlIGluIHN0YWNrIGFuZCB3aWxsIGp1c3Qga2VlcCAlSUVFRTgwMjExX0NPTkZfUFMKKyAqIGVuYWJsZWQgd2hlbmV2ZXIgdXNlciBoYXMgZW5hYmxlZCBwb3dlcnNhdmUuCisgKgorICogRHJpdmVyIGluZm9ybXMgVS1BUFNEIGNsaWVudCBzdXBwb3J0IGJ5IGVuYWJsaW5nCisgKiAlSUVFRTgwMjExX0hXX1NVUFBPUlRTX1VBUFNEIGZsYWcuIFRoZSBtb2RlIGlzIGNvbmZpZ3VyZWQgdGhyb3VnaCB0aGUKKyAqIHVhcHNkIHBhcmFtYXRlciBpbiBjb25mX3R4KCkgb3BlcmF0aW9uLiBIYXJkd2FyZSBuZWVkcyB0byBzZW5kIHRoZSBRb1MKKyAqIE51bGxmdW5jIGZyYW1lcyBhbmQgc3RheSBhd2FrZSB1bnRpbCB0aGUgc2VydmljZSBwZXJpb2QgaGFzIGVuZGVkLiBUbworICogdXRpbGl6ZSBVLUFQU0QsIGR5bmFtaWMgcG93ZXJzYXZlIGlzIGRpc2FibGVkIGZvciB2b2lwIEFDIGFuZCBhbGwgZnJhbWVzCisgKiBmcm9tIHRoYXQgQUMgYXJlIHRyYW5zbWl0dGVkIHdpdGggcG93ZXJzYXZlIGVuYWJsZWQuCisgKgorICogTm90ZTogVS1BUFNEIGNsaWVudCBtb2RlIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGgKKyAqICVJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0suCiAgKi8KIAogLyoqCkBAIC0xMjExLDYgKzEyNzAsMzEgQEAKICAqLwogCiAvKioKKyAqIERPQzogU3BhdGlhbCBtdWx0aXBsZXhpbmcgcG93ZXIgc2F2ZQorICoKKyAqIFNNUFMgKFNwYXRpYWwgbXVsdGlwbGV4aW5nIHBvd2VyIHNhdmUpIGlzIGEgbWVjaGFuaXNtIHRvIGNvbnNlcnZlCisgKiBwb3dlciBpbiBhbiA4MDIuMTFuIGltcGxlbWVudGF0aW9uLiBGb3IgZGV0YWlscyBvbiB0aGUgbWVjaGFuaXNtCisgKiBhbmQgcmF0aW9uYWxlLCBwbGVhc2UgcmVmZXIgdG8gODAyLjExIChhcyBhbWVuZGVkIGJ5IDgwMi4xMW4tMjAwOSkKKyAqICIxMS4yLjMgU00gcG93ZXIgc2F2ZSIuCisgKgorICogVGhlIG1hYzgwMjExIGltcGxlbWVudGF0aW9uIGlzIGNhcGFibGUgb2Ygc2VuZGluZyBhY3Rpb24gZnJhbWVzCisgKiB0byB1cGRhdGUgdGhlIEFQIGFib3V0IHRoZSBzdGF0aW9uJ3MgU01QUyBtb2RlLCBhbmQgd2lsbCBpbnN0cnVjdAorICogdGhlIGRyaXZlciB0byBlbnRlciB0aGUgc3BlY2lmaWMgbW9kZS4gSXQgd2lsbCBhbHNvIGFubm91bmNlIHRoZQorICogcmVxdWVzdGVkIFNNUFMgbW9kZSBkdXJpbmcgdGhlIGFzc29jaWF0aW9uIGhhbmRzaGFrZS4gSGFyZHdhcmUKKyAqIHN1cHBvcnQgZm9yIHRoaXMgZmVhdHVyZSBpcyByZXF1aXJlZCwgYW5kIGNhbiBiZSBpbmRpY2F0ZWQgYnkKKyAqIGhhcmR3YXJlIGZsYWdzLgorICoKKyAqIFRoZSBkZWZhdWx0IG1vZGUgd2lsbCBiZSAiYXV0b21hdGljIiwgd2hpY2ggbmw4MDIxMS9jZmc4MDIxMQorICogZGVmaW5lcyB0byBiZSBkeW5hbWljIFNNUFMgaW4gKHJlZ3VsYXIpIHBvd2Vyc2F2ZSwgYW5kIFNNUFMKKyAqIHR1cm5lZCBvZmYgb3RoZXJ3aXNlLgorICoKKyAqIFRvIHN1cHBvcnQgdGhpcyBmZWF0dXJlLCB0aGUgZHJpdmVyIG11c3Qgc2V0IHRoZSBhcHByb3ByaWF0ZQorICogaGFyZHdhcmUgc3VwcG9ydCBmbGFncywgYW5kIGhhbmRsZSB0aGUgU01QUyBmbGFnIHRvIHRoZSBjb25maWcoKQorICogb3BlcmF0aW9uLiBJdCB3aWxsIHRoZW4gd2l0aCB0aGlzIG1lY2hhbmlzbSBiZSBpbnN0cnVjdGVkIHRvCisgKiBlbnRlciB0aGUgcmVxdWVzdGVkIFNNUFMgbW9kZSB3aGlsZSBhc3NvY2lhdGVkIHRvIGFuIEhUIEFQLgorICovCisKKy8qKgogICogRE9DOiBGcmFtZSBmaWx0ZXJpbmcKICAqCiAgKiBtYWM4MDIxMSByZXF1aXJlcyB0byBzZWUgbWFueSBtYW5hZ2VtZW50IGZyYW1lcyBmb3IgcHJvcGVyCkBAIC0xMzQ3LDcgKzE0MzEsNyBAQAogICoJV2hlbiB0aGUgZGV2aWNlIGlzIHN0YXJ0ZWQgaXQgc2hvdWxkIG5vdCBoYXZlIGEgTUFDIGFkZHJlc3MKICAqCXRvIGF2b2lkIGFja25vd2xlZGdpbmcgZnJhbWVzIGJlZm9yZSBhIG5vbi1tb25pdG9yIGRldmljZQogICoJaXMgYWRkZWQuCi0gKglNdXN0IGJlIGltcGxlbWVudGVkLgorICoJTXVzdCBiZSBpbXBsZW1lbnRlZCBhbmQgY2FuIHNsZWVwLgogICoKICAqIEBzdG9wOiBDYWxsZWQgYWZ0ZXIgbGFzdCBuZXRkZXZpY2UgYXR0YWNoZWQgdG8gdGhlIGhhcmR3YXJlCiAgKglpcyBkaXNhYmxlZC4gVGhpcyBzaG91bGQgdHVybiBvZmYgdGhlIGhhcmR3YXJlIChhdCBsZWFzdApAQCAtMTM1NSw3ICsxNDM5LDcgQEAKICAqCU1heSBiZSBjYWxsZWQgcmlnaHQgYWZ0ZXIgYWRkX2ludGVyZmFjZSBpZiB0aGF0IHJlamVjdHMKICAqCWFuIGludGVyZmFjZS4gSWYgeW91IGFkZGVkIGFueSB3b3JrIG9udG8gdGhlIG1hYzgwMjExIHdvcmtxdWV1ZQogICoJeW91IHNob3VsZCBlbnN1cmUgdG8gY2FuY2VsIGl0IG9uIHRoaXMgY2FsbGJhY2suCi0gKglNdXN0IGJlIGltcGxlbWVudGVkLgorICoJTXVzdCBiZSBpbXBsZW1lbnRlZCBhbmQgY2FuIHNsZWVwLgogICoKICAqIEBhZGRfaW50ZXJmYWNlOiBDYWxsZWQgd2hlbiBhIG5ldGRldmljZSBhdHRhY2hlZCB0byB0aGUgaGFyZHdhcmUgaXMKICAqCWVuYWJsZWQuIEJlY2F1c2UgaXQgaXMgbm90IGNhbGxlZCBmb3IgbW9uaXRvciBtb2RlIGRldmljZXMsIEBzdGFydApAQCAtMTM2NSw3ICsxNDQ5LDcgQEAKICAqCWludGVyZmFjZSBpcyBnaXZlbiBpbiB0aGUgY29uZiBwYXJhbWV0ZXIuCiAgKglUaGUgY2FsbGJhY2sgbWF5IHJlZnVzZSB0byBhZGQgYW4gaW50ZXJmYWNlIGJ5IHJldHVybmluZyBhCiAgKgluZWdhdGl2ZSBlcnJvciBjb2RlICh3aGljaCB3aWxsIGJlIHNlZW4gaW4gdXNlcnNwYWNlLikKLSAqCU11c3QgYmUgaW1wbGVtZW50ZWQuCisgKglNdXN0IGJlIGltcGxlbWVudGVkIGFuZCBjYW4gc2xlZXAuCiAgKgogICogQHJlbW92ZV9pbnRlcmZhY2U6IE5vdGlmaWVzIGEgZHJpdmVyIHRoYXQgYW4gaW50ZXJmYWNlIGlzIGdvaW5nIGRvd24uCiAgKglUaGUgQHN0b3AgY2FsbGJhY2sgaXMgY2FsbGVkIGFmdGVyIHRoaXMgaWYgaXQgaXMgdGhlIGxhc3QgaW50ZXJmYWNlCkBAIC0xMzc0LDE5ICsxNDU4LDIwIEBACiAgKgltdXN0IGJlIGNsZWFyZWQgc28gdGhlIGRldmljZSBubyBsb25nZXIgYWNrbm93bGVkZ2VzIHBhY2tldHMsCiAgKgl0aGUgbWFjX2FkZHIgbWVtYmVyIG9mIHRoZSBjb25mIHN0cnVjdHVyZSBpcywgaG93ZXZlciwgc2V0IHRvIHRoZQogICoJTUFDIGFkZHJlc3Mgb2YgdGhlIGRldmljZSBnb2luZyBhd2F5LgotICoJSGVuY2UsIHRoaXMgY2FsbGJhY2sgbXVzdCBiZSBpbXBsZW1lbnRlZC4KKyAqCUhlbmNlLCB0aGlzIGNhbGxiYWNrIG11c3QgYmUgaW1wbGVtZW50ZWQuIEl0IGNhbiBzbGVlcC4KICAqCiAgKiBAY29uZmlnOiBIYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIHJlcXVlc3RzLiBJRUVFIDgwMi4xMSBjb2RlIGNhbGxzIHRoaXMKICAqCWZ1bmN0aW9uIHRvIGNoYW5nZSBoYXJkd2FyZSBjb25maWd1cmF0aW9uLCBlLmcuLCBjaGFubmVsLgogICoJVGhpcyBmdW5jdGlvbiBzaG91bGQgbmV2ZXIgZmFpbCBidXQgcmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKLSAqCWlmIGl0IGRvZXMuCisgKglpZiBpdCBkb2VzLiBUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgogICoKICAqIEBic3NfaW5mb19jaGFuZ2VkOiBIYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIHJlcXVlc3RzIHJlbGF0ZWQgdG8gQlNTCiAgKglwYXJhbWV0ZXJzIHRoYXQgbWF5IHZhcnkgZHVyaW5nIEJTUydzIGxpZmVzcGFuLCBhbmQgbWF5IGFmZmVjdCBsb3cKICAqCWxldmVsIGRyaXZlciAoZS5nLiBhc3NvYy9kaXNhc3NvYyBzdGF0dXMsIGVycCBwYXJhbWV0ZXJzKS4KICAqCVRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSB1c2VkIGlmIG5vIEJTUyBoYXMgYmVlbiBzZXQsIHVubGVzcwogICoJZm9yIGFzc29jaWF0aW9uIGluZGljYXRpb24uIFRoZSBAY2hhbmdlZCBwYXJhbWV0ZXIgaW5kaWNhdGVzIHdoaWNoCi0gKglvZiB0aGUgYnNzIHBhcmFtZXRlcnMgaGFzIGNoYW5nZWQgd2hlbiBhIGNhbGwgaXMgbWFkZS4KKyAqCW9mIHRoZSBic3MgcGFyYW1ldGVycyBoYXMgY2hhbmdlZCB3aGVuIGEgY2FsbCBpcyBtYWRlLiBUaGUgY2FsbGJhY2sKKyAqCWNhbiBzbGVlcC4KICAqCiAgKiBAcHJlcGFyZV9tdWx0aWNhc3Q6IFByZXBhcmUgZm9yIG11bHRpY2FzdCBmaWx0ZXIgY29uZmlndXJhdGlvbi4KICAqCVRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwsIGFuZCBpdHMgcmV0dXJuIHZhbHVlIGlzIHBhc3NlZApAQCAtMTM5NCwyMCArMTQ3OSwyMiBAQAogICoKICAqIEBjb25maWd1cmVfZmlsdGVyOiBDb25maWd1cmUgdGhlIGRldmljZSdzIFJYIGZpbHRlci4KICAqCVNlZSB0aGUgc2VjdGlvbiAiRnJhbWUgZmlsdGVyaW5nIiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAqCVRoaXMgY2FsbGJhY2sgbXVzdCBiZSBpbXBsZW1lbnRlZC4KKyAqCVRoaXMgY2FsbGJhY2sgbXVzdCBiZSBpbXBsZW1lbnRlZCBhbmQgY2FuIHNsZWVwLgogICoKICAqIEBzZXRfdGltOiBTZXQgVElNIGJpdC4gbWFjODAyMTEgY2FsbHMgdGhpcyBmdW5jdGlvbiB3aGVuIGEgVElNIGJpdAogICogCW11c3QgYmUgc2V0IG9yIGNsZWFyZWQgZm9yIGEgZ2l2ZW4gU1RBLiBNdXN0IGJlIGF0b21pYy4KICAqCiAgKiBAc2V0X2tleTogU2VlIHRoZSBzZWN0aW9uICJIYXJkd2FyZSBjcnlwdG8gYWNjZWxlcmF0aW9uIgotICoJVGhpcyBjYWxsYmFjayBjYW4gc2xlZXAsIGFuZCBpcyBvbmx5IGNhbGxlZCBiZXR3ZWVuIGFkZF9pbnRlcmZhY2UKLSAqCWFuZCByZW1vdmVfaW50ZXJmYWNlIGNhbGxzLCBpLmUuIHdoaWxlIHRoZSBnaXZlbiB2aXJ0dWFsIGludGVyZmFjZQorICoJVGhpcyBjYWxsYmFjayBpcyBvbmx5IGNhbGxlZCBiZXR3ZWVuIGFkZF9pbnRlcmZhY2UgYW5kCisgKglyZW1vdmVfaW50ZXJmYWNlIGNhbGxzLCBpLmUuIHdoaWxlIHRoZSBnaXZlbiB2aXJ0dWFsIGludGVyZmFjZQogICoJaXMgZW5hYmxlZC4KICAqCVJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIHRoZSBrZXkgY2FuJ3QgYmUgYWRkZWQuCisgKglUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgogICoKICAqIEB1cGRhdGVfdGtpcF9rZXk6IFNlZSB0aGUgc2VjdGlvbiAiSGFyZHdhcmUgY3J5cHRvIGFjY2VsZXJhdGlvbiIKICAqIAlUaGlzIGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIFJ4LiBDYWxsZWQgZm9yIGRyaXZlcnMKICAqIAl3aGljaCBzZXQgSUVFRTgwMjExX0tFWV9GTEFHX1RLSVBfUkVRX1JYX1AxX0tFWS4KKyAqCVRoZSBjYWxsYmFjayBtdXN0IGJlIGF0b21pYy4KICAqCiAgKiBAaHdfc2NhbjogQXNrIHRoZSBoYXJkd2FyZSB0byBzZXJ2aWNlIHRoZSBzY2FuIHJlcXVlc3QsIG5vIG5lZWQgdG8gc3RhcnQKICAqCXRoZSBzY2FuIHN0YXRlIG1hY2hpbmUgaW4gc3RhY2suIFRoZSBzY2FuIG11c3QgaG9ub3VyIHRoZSBjaGFubmVsCkBAIC0xNDIxLDUzICsxNTA4LDY0IEBACiAgKglXaGVuIHRoZSBzY2FuIGZpbmlzaGVzLCBpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoKSBtdXN0IGJlIGNhbGxlZDsKICAqCW5vdGUgdGhhdCBpdCBhbHNvIG11c3QgYmUgY2FsbGVkIHdoZW4gdGhlIHNjYW4gY2Fubm90IGZpbmlzaCBkdWUgdG8KICAqCWFueSBlcnJvciB1bmxlc3MgdGhpcyBjYWxsYmFjayByZXR1cm5lZCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisgKglUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgogICoKICAqIEBzd19zY2FuX3N0YXJ0OiBOb3RpZmllciBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBqdXN0IGJlZm9yZSBhIHNvZnR3YXJlIHNjYW4KICAqCWlzIHN0YXJ0ZWQuIENhbiBiZSBOVUxMLCBpZiB0aGUgZHJpdmVyIGRvZXNuJ3QgbmVlZCB0aGlzIG5vdGlmaWNhdGlvbi4KKyAqCVRoZSBjYWxsYmFjayBjYW4gc2xlZXAuCiAgKgotICogQHN3X3NjYW5fY29tcGxldGU6IE5vdGlmaWVyIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIgYSBzb2Z0d2FyZSBzY2FuCi0gKglmaW5pc2hlZC4gQ2FuIGJlIE5VTEwsIGlmIHRoZSBkcml2ZXIgZG9lc24ndCBuZWVkIHRoaXMgbm90aWZpY2F0aW9uLgorICogQHN3X3NjYW5fY29tcGxldGU6IE5vdGlmaWVyIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGp1c3QgYWZ0ZXIgYQorICoJc29mdHdhcmUgc2NhbiBmaW5pc2hlZC4gQ2FuIGJlIE5VTEwsIGlmIHRoZSBkcml2ZXIgZG9lc24ndCBuZWVkCisgKgl0aGlzIG5vdGlmaWNhdGlvbi4KKyAqCVRoZSBjYWxsYmFjayBjYW4gc2xlZXAuCiAgKgogICogQGdldF9zdGF0czogUmV0dXJuIGxvdy1sZXZlbCBzdGF0aXN0aWNzLgogICogCVJldHVybnMgemVybyBpZiBzdGF0aXN0aWNzIGFyZSBhdmFpbGFibGUuCisgKglUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgogICoKICAqIEBnZXRfdGtpcF9zZXE6IElmIHlvdXIgZGV2aWNlIGltcGxlbWVudHMgVEtJUCBlbmNyeXB0aW9uIGluIGhhcmR3YXJlIHRoaXMKICAqCWNhbGxiYWNrIHNob3VsZCBiZSBwcm92aWRlZCB0byByZWFkIHRoZSBUS0lQIHRyYW5zbWl0IElWcyAoYm90aCBJVjMyCiAgKglhbmQgSVYxNikgZm9yIHRoZSBnaXZlbiBrZXkgZnJvbSBoYXJkd2FyZS4KKyAqCVRoZSBjYWxsYmFjayBtdXN0IGJlIGF0b21pYy4KICAqCiAgKiBAc2V0X3J0c190aHJlc2hvbGQ6IENvbmZpZ3VyYXRpb24gb2YgUlRTIHRocmVzaG9sZCAoaWYgZGV2aWNlIG5lZWRzIGl0KQorICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KICAqCi0gKiBAc3RhX25vdGlmeTogTm90aWZpZXMgbG93IGxldmVsIGRyaXZlciBhYm91dCBhZGRpdGlvbiwgcmVtb3ZhbCBvciBwb3dlcgotICoJc3RhdGUgdHJhbnNpdGlvbiBvZiBhbiBhc3NvY2lhdGVkIHN0YXRpb24sIEFQLCAgSUJTUy9XRFMvbWVzaCBwZWVyIGV0Yy4KLSAqCU11c3QgYmUgYXRvbWljLgorICogQHN0YV9hZGQ6IE5vdGlmaWVzIGxvdyBsZXZlbCBkcml2ZXIgYWJvdXQgYWRkaXRpb24gb2YgYW4gYXNzb2NpYXRlZCBzdGF0aW9uLAorICoJQVAsIElCU1MvV0RTL21lc2ggcGVlciBldGMuIFRoaXMgY2FsbGJhY2sgY2FuIHNsZWVwLgorICoKKyAqIEBzdGFfcmVtb3ZlOiBOb3RpZmllcyBsb3cgbGV2ZWwgZHJpdmVyIGFib3V0IHJlbW92YWwgb2YgYW4gYXNzb2NpYXRlZAorICoJc3RhdGlvbiwgQVAsIElCU1MvV0RTL21lc2ggcGVlciBldGMuIFRoaXMgY2FsbGJhY2sgY2FuIHNsZWVwLgorICoKKyAqIEBzdGFfbm90aWZ5OiBOb3RpZmllcyBsb3cgbGV2ZWwgZHJpdmVyIGFib3V0IHBvd2VyIHN0YXRlIHRyYW5zaXRpb24gb2YgYW4KKyAqCWFzc29jaWF0ZWQgc3RhdGlvbiwgQVAsICBJQlNTL1dEUy9tZXNoIHBlZXIgZXRjLiBNdXN0IGJlIGF0b21pYy4KICAqCiAgKiBAY29uZl90eDogQ29uZmlndXJlIFRYIHF1ZXVlIHBhcmFtZXRlcnMgKEVEQ0YgKGFpZnMsIGN3X21pbiwgY3dfbWF4KSwKICAqCWJ1cnN0aW5nKSBmb3IgYSBoYXJkd2FyZSBUWCBxdWV1ZS4KICAqCVJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCi0gKgotICogQGdldF90eF9zdGF0czogR2V0IHN0YXRpc3RpY3Mgb2YgdGhlIGN1cnJlbnQgVFggcXVldWUgc3RhdHVzLiBUaGlzIGlzIHVzZWQKLSAqCXRvIGdldCBudW1iZXIgb2YgY3VycmVudGx5IHF1ZXVlZCBwYWNrZXRzIChxdWV1ZSBsZW5ndGgpLCBtYXhpbXVtIHF1ZXVlCi0gKglzaXplIChsaW1pdCksIGFuZCB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyBzZW50IHVzaW5nIGVhY2ggVFggcXVldWUKLSAqCShjb3VudCkuIFRoZSAnc3RhdHMnIHBvaW50ZXIgcG9pbnRzIHRvIGFuIGFycmF5IHRoYXQgaGFzIGh3LT5xdWV1ZXMKLSAqCWl0ZW1zLgorICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KICAqCiAgKiBAZ2V0X3RzZjogR2V0IHRoZSBjdXJyZW50IFRTRiB0aW1lciB2YWx1ZSBmcm9tIGZpcm13YXJlL2hhcmR3YXJlLiBDdXJyZW50bHksCiAgKgl0aGlzIGlzIG9ubHkgdXNlZCBmb3IgSUJTUyBtb2RlIEJTU0lEIG1lcmdpbmcgYW5kIGRlYnVnZ2luZy4gSXMgbm90IGEKICAqCXJlcXVpcmVkIGZ1bmN0aW9uLgorICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KICAqCiAgKiBAc2V0X3RzZjogU2V0IHRoZSBUU0YgdGltZXIgdG8gdGhlIHNwZWNpZmllZCB2YWx1ZSBpbiB0aGUgZmlybXdhcmUvaGFyZHdhcmUuCiAgKiAgICAgIEN1cnJlbnRseSwgdGhpcyBpcyBvbmx5IHVzZWQgZm9yIElCU1MgbW9kZSBkZWJ1Z2dpbmcuIElzIG5vdCBhCiAgKglyZXF1aXJlZCBmdW5jdGlvbi4KKyAqCVRoZSBjYWxsYmFjayBjYW4gc2xlZXAuCiAgKgogICogQHJlc2V0X3RzZjogUmVzZXQgdGhlIFRTRiB0aW1lciBhbmQgYWxsb3cgZmlybXdhcmUvaGFyZHdhcmUgdG8gc3luY2hyb25pemUKICAqCXdpdGggb3RoZXIgU1RBcyBpbiB0aGUgSUJTUy4gVGhpcyBpcyBvbmx5IHVzZWQgaW4gSUJTUyBtb2RlLiBUaGlzCiAgKglmdW5jdGlvbiBpcyBvcHRpb25hbCBpZiB0aGUgZmlybXdhcmUvaGFyZHdhcmUgdGFrZXMgZnVsbCBjYXJlIG9mCiAgKglUU0Ygc3luY2hyb25pemF0aW9uLgorICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KICAqCiAgKiBAdHhfbGFzdF9iZWFjb246IERldGVybWluZSB3aGV0aGVyIHRoZSBsYXN0IElCU1MgYmVhY29uIHdhcyBzZW50IGJ5IHVzLgogICoJVGhpcyBpcyBuZWVkZWQgb25seSBmb3IgSUJTUyBtb2RlIGFuZCB0aGUgcmVzdWx0IG9mIHRoaXMgZnVuY3Rpb24gaXMKICAqCXVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gcmVwbHkgdG8gUHJvYmUgUmVxdWVzdHMuCiAgKglSZXR1cm5zIG5vbi16ZXJvIGlmIHRoaXMgZGV2aWNlIHNlbnQgdGhlIGxhc3QgYmVhY29uLgorICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KICAqCiAgKiBAYW1wZHVfYWN0aW9uOiBQZXJmb3JtIGEgY2VydGFpbiBBLU1QRFUgYWN0aW9uCiAgKiAJVGhlIFJBL1RJRCBjb21iaW5hdGlvbiBkZXRlcm1pbmVzIHRoZSBkZXN0aW5hdGlvbiBhbmQgVElEIHdlIHdhbnQKQEAgLTE0NzYsMjEgKzE1NzQsMzIgQEAKICAqIAlpcyB0aGUgZmlyc3QgZnJhbWUgd2UgZXhwZWN0IHRvIHBlcmZvcm0gdGhlIGFjdGlvbiBvbi4gTm90aWNlCiAgKiAJdGhhdCBUWC9SWF9TVE9QIGNhbiBwYXNzIE5VTEwgZm9yIHRoaXMgcGFyYW1ldGVyLgogICoJUmV0dXJucyBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqCVRoZSBjYWxsYmFjayBtdXN0IGJlIGF0b21pYy4KICAqCiAgKiBAcmZraWxsX3BvbGw6IFBvbGwgcmZraWxsIGhhcmR3YXJlIHN0YXRlLiBJZiB5b3UgbmVlZCB0aGlzLCB5b3UgYWxzbwogICoJbmVlZCB0byBzZXQgd2lwaHktPnJma2lsbF9wb2xsIHRvICV0cnVlIGJlZm9yZSByZWdpc3RyYXRpb24sCiAgKglhbmQgbmVlZCB0byBjYWxsIHdpcGh5X3Jma2lsbF9zZXRfaHdfc3RhdGUoKSBpbiB0aGUgY2FsbGJhY2suCisgKglUaGUgY2FsbGJhY2sgY2FuIHNsZWVwLgorICoKKyAqIEBzZXRfY292ZXJhZ2VfY2xhc3M6IFNldCBzbG90IHRpbWUgZm9yIGdpdmVuIGNvdmVyYWdlIGNsYXNzIGFzIHNwZWNpZmllZAorICoJaW4gSUVFRSA4MDIuMTEtMjAwNyBzZWN0aW9uIDE3LjMuOC42IGFuZCBtb2RpZnkgQUNLIHRpbWVvdXQKKyAqCWFjY29yZGluZ2x5LiBUaGlzIGNhbGxiYWNrIGlzIG5vdCByZXF1aXJlZCBhbmQgbWF5IHNsZWVwLgogICoKICAqIEB0ZXN0bW9kZV9jbWQ6IEltcGxlbWVudCBhIGNmZzgwMjExIHRlc3QgbW9kZSBjb21tYW5kLgorICoJVGhlIGNhbGxiYWNrIGNhbiBzbGVlcC4KKyAqCisgKiBAZmx1c2g6IEZsdXNoIGFsbCBwZW5kaW5nIGZyYW1lcyBmcm9tIHRoZSBoYXJkd2FyZSBxdWV1ZSwgbWFraW5nIHN1cmUKKyAqCXRoYXQgdGhlIGhhcmR3YXJlIHF1ZXVlcyBhcmUgZW1wdHkuIElmIHRoZSBwYXJhbWV0ZXIgQGRyb3AgaXMgc2V0CisgKgl0byAldHJ1ZSwgcGVuZGluZyBmcmFtZXMgbWF5IGJlIGRyb3BwZWQuIFRoZSBjYWxsYmFjayBjYW4gc2xlZXAuCiAgKi8KIHN0cnVjdCBpZWVlODAyMTFfb3BzIHsKIAlpbnQgKCp0eCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBza19idWZmICpza2IpOwogCWludCAoKnN0YXJ0KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CiAJdm9pZCAoKnN0b3ApKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKIAlpbnQgKCphZGRfaW50ZXJmYWNlKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgKmNvbmYpOworCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKIAl2b2lkICgqcmVtb3ZlX2ludGVyZmFjZSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQkJIHN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mICpjb25mKTsKKwkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CiAJaW50ICgqY29uZmlnKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIGNoYW5nZWQpOwogCXZvaWQgKCpic3NfaW5mb19jaGFuZ2VkKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKQEAgLTE1MDgsOCArMTYxNywxMCBAQAogCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwKIAkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmtleSk7CiAJdm9pZCAoKnVwZGF0ZV90a2lwX2tleSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCi0JCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpjb25mLCBjb25zdCB1OCAqYWRkcmVzcywKLQkJCXUzMiBpdjMyLCB1MTYgKnBoYXNlMWtleSk7CisJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCQlzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpjb25mLAorCQkJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsCisJCQkJdTMyIGl2MzIsIHUxNiAqcGhhc2Uxa2V5KTsKIAlpbnQgKCpod19zY2FuKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJICAgICAgIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcSk7CiAJdm9pZCAoKnN3X3NjYW5fc3RhcnQpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3KTsKQEAgLTE1MTksMTIgKzE2MzAsMTQgQEAKIAl2b2lkICgqZ2V0X3RraXBfc2VxKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTggaHdfa2V5X2lkeCwKIAkJCSAgICAgdTMyICppdjMyLCB1MTYgKml2MTYpOwogCWludCAoKnNldF9ydHNfdGhyZXNob2xkKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKTsKKwlpbnQgKCpzdGFfYWRkKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpOworCWludCAoKnN0YV9yZW1vdmUpKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsKIAl2b2lkICgqc3RhX25vdGlmeSkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCiAJCQllbnVtIHN0YV9ub3RpZnlfY21kLCBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsKIAlpbnQgKCpjb25mX3R4KShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTE2IHF1ZXVlLAogCQkgICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcyk7Ci0JaW50ICgqZ2V0X3R4X3N0YXRzKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKLQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3N0YXRzICpzdGF0cyk7CiAJdTY0ICgqZ2V0X3RzZikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwogCXZvaWQgKCpzZXRfdHNmKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgdTY0IHRzZik7CiAJdm9pZCAoKnJlc2V0X3RzZikoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwpAQCAtMTUzNSw5ICsxNjQ4LDExIEBACiAJCQkgICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCwgdTE2ICpzc24pOwogCiAJdm9pZCAoKnJma2lsbF9wb2xsKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CisJdm9pZCAoKnNldF9jb3ZlcmFnZV9jbGFzcykoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHU4IGNvdmVyYWdlX2NsYXNzKTsKICNpZmRlZiBDT05GSUdfTkw4MDIxMV9URVNUTU9ERQogCWludCAoKnRlc3Rtb2RlX2NtZCkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHZvaWQgKmRhdGEsIGludCBsZW4pOwogI2VuZGlmCisJdm9pZCAoKmZsdXNoKShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgYm9vbCBkcm9wKTsKIH07CiAKIC8qKgpAQCAtMTc3Nyw3ICsxODkyLDcgQEAKIC8qKgogICogaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltIC0gYmVhY29uIGdlbmVyYXRpb24gZnVuY3Rpb24KICAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLgotICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSAmc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYuCisgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrLgogICogQHRpbV9vZmZzZXQ6IHBvaW50ZXIgdG8gdmFyaWFibGUgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIFRJTSBJRSBvZmZzZXQuCiAgKglTZXQgdG8gMCBpZiBpbnZhbGlkIChpbiBub24tQVAgbW9kZXMpLgogICogQHRpbV9sZW5ndGg6IHBvaW50ZXIgdG8gdmFyaWFibGUgdGhhdCB3aWxsIHJlY2VpdmUgdGhlIFRJTSBJRSBsZW5ndGgsCkBAIC0xODA1LDcgKzE5MjAsNyBAQAogLyoqCiAgKiBpZWVlODAyMTFfYmVhY29uX2dldCAtIGJlYWNvbiBnZW5lcmF0aW9uIGZ1bmN0aW9uCiAgKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS4KLSAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gJnN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mLgorICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSB0aGUgYWRkX2ludGVyZmFjZSBjYWxsYmFjay4KICAqCiAgKiBTZWUgaWVlZTgwMjExX2JlYWNvbl9nZXRfdGltKCkuCiAgKi8KQEAgLTE4MTYsOSArMTkzMSw1NiBAQAogfQogCiAvKioKKyAqIGllZWU4MDIxMV9wc3BvbGxfZ2V0IC0gcmV0cmlldmUgYSBQUyBQb2xsIHRlbXBsYXRlCisgKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS4KKyAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gdGhlIGFkZF9pbnRlcmZhY2UgY2FsbGJhY2suCisgKgorICogQ3JlYXRlcyBhIFBTIFBvbGwgYSB0ZW1wbGF0ZSB3aGljaCBjYW4sIGZvciBleGFtcGxlLCB1cGxvYWRlZCB0bworICogaGFyZHdhcmUuIFRoZSB0ZW1wbGF0ZSBtdXN0IGJlIHVwZGF0ZWQgYWZ0ZXIgYXNzb2NpYXRpb24gc28gdGhhdCBjb3JyZWN0CisgKiBBSUQsIEJTU0lEIGFuZCBNQUMgYWRkcmVzcyBpcyB1c2VkLgorICoKKyAqIE5vdGU6IENhbGxlciAob3IgaGFyZHdhcmUpIGlzIHJlc3BvbnNpYmxlIGZvciBzZXR0aW5nIHRoZQorICogJklFRUU4MDIxMV9GQ1RMX1BNIGJpdC4KKyAqLworc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9wc3BvbGxfZ2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7CisKKy8qKgorICogaWVlZTgwMjExX251bGxmdW5jX2dldCAtIHJldHJpZXZlIGEgbnVsbGZ1bmMgdGVtcGxhdGUKKyAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLgorICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSB0aGUgYWRkX2ludGVyZmFjZSBjYWxsYmFjay4KKyAqCisgKiBDcmVhdGVzIGEgTnVsbGZ1bmMgdGVtcGxhdGUgd2hpY2ggY2FuLCBmb3IgZXhhbXBsZSwgdXBsb2FkZWQgdG8KKyAqIGhhcmR3YXJlLiBUaGUgdGVtcGxhdGUgbXVzdCBiZSB1cGRhdGVkIGFmdGVyIGFzc29jaWF0aW9uIHNvIHRoYXQgY29ycmVjdAorICogQlNTSUQgYW5kIGFkZHJlc3MgaXMgdXNlZC4KKyAqCisgKiBOb3RlOiBDYWxsZXIgKG9yIGhhcmR3YXJlKSBpcyByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB0aGUKKyAqICZJRUVFODAyMTFfRkNUTF9QTSBiaXQgYXMgd2VsbCBhcyBEdXJhdGlvbiBhbmQgU2VxdWVuY2UgQ29udHJvbCBmaWVsZHMuCisgKi8KK3N0cnVjdCBza19idWZmICppZWVlODAyMTFfbnVsbGZ1bmNfZ2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKKworLyoqCisgKiBpZWVlODAyMTFfcHJvYmVyZXFfZ2V0IC0gcmV0cmlldmUgYSBQcm9iZSBSZXF1ZXN0IHRlbXBsYXRlCisgKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS4KKyAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gdGhlIGFkZF9pbnRlcmZhY2UgY2FsbGJhY2suCisgKiBAc3NpZDogU1NJRCBidWZmZXIKKyAqIEBzc2lkX2xlbjogbGVuZ3RoIG9mIFNTSUQKKyAqIEBpZTogYnVmZmVyIGNvbnRhaW5pbmcgYWxsIElFcyBleGNlcHQgU1NJRCBmb3IgdGhlIHRlbXBsYXRlCisgKiBAaWVfbGVuOiBsZW5ndGggb2YgdGhlIElFIGJ1ZmZlcgorICoKKyAqIENyZWF0ZXMgYSBQcm9iZSBSZXF1ZXN0IHRlbXBsYXRlIHdoaWNoIGNhbiwgZm9yIGV4YW1wbGUsIGJlIHVwbG9hZGVkIHRvCisgKiBoYXJkd2FyZS4KKyAqLworc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9wcm9iZXJlcV9nZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICAgICAgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCQkJICAgICAgIGNvbnN0IHU4ICppZSwgc2l6ZV90IGllX2xlbik7CisKKy8qKgogICogaWVlZTgwMjExX3J0c19nZXQgLSBSVFMgZnJhbWUgZ2VuZXJhdGlvbiBmdW5jdGlvbgogICogQGh3OiBwb2ludGVyIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuCi0gKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tICZzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZi4KKyAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gdGhlIGFkZF9pbnRlcmZhY2UgY2FsbGJhY2suCiAgKiBAZnJhbWU6IHBvaW50ZXIgdG8gdGhlIGZyYW1lIHRoYXQgaXMgZ29pbmcgdG8gYmUgcHJvdGVjdGVkIGJ5IHRoZSBSVFMuCiAgKiBAZnJhbWVfbGVuOiB0aGUgZnJhbWUgbGVuZ3RoIChpbiBvY3RldHMpLgogICogQGZyYW1lX3R4Y3RsOiAmc3RydWN0IGllZWU4MDIxMV90eF9pbmZvIG9mIHRoZSBmcmFtZS4KQEAgLTE4MzcsNyArMTk5OSw3IEBACiAvKioKICAqIGllZWU4MDIxMV9ydHNfZHVyYXRpb24gLSBHZXQgdGhlIGR1cmF0aW9uIGZpZWxkIGZvciBhbiBSVFMgZnJhbWUKICAqIEBodzogcG9pbnRlciBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLgotICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSAmc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYuCisgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrLgogICogQGZyYW1lX2xlbjogdGhlIGxlbmd0aCBvZiB0aGUgZnJhbWUgdGhhdCBpcyBnb2luZyB0byBiZSBwcm90ZWN0ZWQgYnkgdGhlIFJUUy4KICAqIEBmcmFtZV90eGN0bDogJnN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyBvZiB0aGUgZnJhbWUuCiAgKgpAQCAtMTg1Miw3ICsyMDE0LDcgQEAKIC8qKgogICogaWVlZTgwMjExX2N0c3Rvc2VsZl9nZXQgLSBDVFMtdG8tc2VsZiBmcmFtZSBnZW5lcmF0aW9uIGZ1bmN0aW9uCiAgKiBAaHc6IHBvaW50ZXIgb2J0YWluZWQgZnJvbSBpZWVlODAyMTFfYWxsb2NfaHcoKS4KLSAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gJnN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mLgorICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSB0aGUgYWRkX2ludGVyZmFjZSBjYWxsYmFjay4KICAqIEBmcmFtZTogcG9pbnRlciB0byB0aGUgZnJhbWUgdGhhdCBpcyBnb2luZyB0byBiZSBwcm90ZWN0ZWQgYnkgdGhlIENUUy10by1zZWxmLgogICogQGZyYW1lX2xlbjogdGhlIGZyYW1lIGxlbmd0aCAoaW4gb2N0ZXRzKS4KICAqIEBmcmFtZV90eGN0bDogJnN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyBvZiB0aGUgZnJhbWUuCkBAIC0xODcyLDcgKzIwMzQsNyBAQAogLyoqCiAgKiBpZWVlODAyMTFfY3RzdG9zZWxmX2R1cmF0aW9uIC0gR2V0IHRoZSBkdXJhdGlvbiBmaWVsZCBmb3IgYSBDVFMtdG8tc2VsZiBmcmFtZQogICogQGh3OiBwb2ludGVyIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuCi0gKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tICZzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZi4KKyAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gdGhlIGFkZF9pbnRlcmZhY2UgY2FsbGJhY2suCiAgKiBAZnJhbWVfbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBmcmFtZSB0aGF0IGlzIGdvaW5nIHRvIGJlIHByb3RlY3RlZCBieSB0aGUgQ1RTLXRvLXNlbGYuCiAgKiBAZnJhbWVfdHhjdGw6ICZzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gb2YgdGhlIGZyYW1lLgogICoKQEAgLTE4ODgsNyArMjA1MCw3IEBACiAvKioKICAqIGllZWU4MDIxMV9nZW5lcmljX2ZyYW1lX2R1cmF0aW9uIC0gQ2FsY3VsYXRlIHRoZSBkdXJhdGlvbiBmaWVsZCBmb3IgYSBmcmFtZQogICogQGh3OiBwb2ludGVyIG9idGFpbmVkIGZyb20gaWVlZTgwMjExX2FsbG9jX2h3KCkuCi0gKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tICZzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZi4KKyAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gdGhlIGFkZF9pbnRlcmZhY2UgY2FsbGJhY2suCiAgKiBAZnJhbWVfbGVuOiB0aGUgbGVuZ3RoIG9mIHRoZSBmcmFtZS4KICAqIEByYXRlOiB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgZnJhbWUgaXMgZ29pbmcgdG8gYmUgdHJhbnNtaXR0ZWQuCiAgKgpAQCAtMTkwMyw3ICsyMDY1LDcgQEAKIC8qKgogICogaWVlZTgwMjExX2dldF9idWZmZXJlZF9iYyAtIGFjY2Vzc2luZyBidWZmZXJlZCBicm9hZGNhc3QgYW5kIG11bHRpY2FzdCBmcmFtZXMKICAqIEBodzogcG9pbnRlciBhcyBvYnRhaW5lZCBmcm9tIGllZWU4MDIxMV9hbGxvY19odygpLgotICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSAmc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYuCisgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrLgogICoKICAqIEZ1bmN0aW9uIGZvciBhY2Nlc3NpbmcgYnVmZmVyZWQgYnJvYWRjYXN0IGFuZCBtdWx0aWNhc3QgZnJhbWVzLiBJZgogICogaGFyZHdhcmUvZmlybXdhcmUgZG9lcyBub3QgaW1wbGVtZW50IGJ1ZmZlcmluZyBvZiBicm9hZGNhc3QvbXVsdGljYXN0CkBAIC0yMDcxLDcgKzIyMzMsNyBAQAogCiAvKioKICAqIGllZWU4MDIxMV9zdGFydF90eF9iYV9jYiAtIGxvdyBsZXZlbCBkcml2ZXIgcmVhZHkgdG8gYWdncmVnYXRlLgotICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSAmc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYKKyAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gdGhlIGFkZF9pbnRlcmZhY2UgY2FsbGJhY2sKICAqIEByYTogcmVjZWl2ZXIgYWRkcmVzcyBvZiB0aGUgQkEgc2Vzc2lvbiByZWNpcGllbnQuCiAgKiBAdGlkOiB0aGUgVElEIHRvIEJBIG9uLgogICoKQEAgLTIwODIsNyArMjI0NCw3IEBACiAKIC8qKgogICogaWVlZTgwMjExX3N0YXJ0X3R4X2JhX2NiX2lycXNhZmUgLSBsb3cgbGV2ZWwgZHJpdmVyIHJlYWR5IHRvIGFnZ3JlZ2F0ZS4KLSAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gJnN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mCisgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrCiAgKiBAcmE6IHJlY2VpdmVyIGFkZHJlc3Mgb2YgdGhlIEJBIHNlc3Npb24gcmVjaXBpZW50LgogICogQHRpZDogdGhlIFRJRCB0byBCQSBvbi4KICAqCkBAIC0yMTEwLDcgKzIyNzIsNyBAQAogCiAvKioKICAqIGllZWU4MDIxMV9zdG9wX3R4X2JhX2NiIC0gbG93IGxldmVsIGRyaXZlciByZWFkeSB0byBzdG9wIGFnZ3JlZ2F0ZS4KLSAqIEB2aWY6ICZzdHJ1Y3QgaWVlZTgwMjExX3ZpZiBwb2ludGVyIGZyb20gJnN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mCisgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrCiAgKiBAcmE6IHJlY2VpdmVyIGFkZHJlc3Mgb2YgdGhlIEJBIHNlc3Npb24gcmVjaXBpZW50LgogICogQHRpZDogdGhlIGRlc2lyZWQgVElEIHRvIEJBIG9uLgogICoKQEAgLTIxMjEsNyArMjI4Myw3IEBACiAKIC8qKgogICogaWVlZTgwMjExX3N0b3BfdHhfYmFfY2JfaXJxc2FmZSAtIGxvdyBsZXZlbCBkcml2ZXIgcmVhZHkgdG8gc3RvcCBhZ2dyZWdhdGUuCi0gKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tICZzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZgorICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSB0aGUgYWRkX2ludGVyZmFjZSBjYWxsYmFjawogICogQHJhOiByZWNlaXZlciBhZGRyZXNzIG9mIHRoZSBCQSBzZXNzaW9uIHJlY2lwaWVudC4KICAqIEB0aWQ6IHRoZSBkZXNpcmVkIFRJRCB0byBCQSBvbi4KICAqCkBAIC0yMjAwLDcgKzIzNjIsNyBAQAogLyoqCiAgKiBpZWVlODAyMTFfYmVhY29uX2xvc3MgLSBpbmZvcm0gaGFyZHdhcmUgZG9lcyBub3QgcmVjZWl2ZSBiZWFjb25zCiAgKgotICogQHZpZjogJnN0cnVjdCBpZWVlODAyMTFfdmlmIHBvaW50ZXIgZnJvbSAmc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYuCisgKiBAdmlmOiAmc3RydWN0IGllZWU4MDIxMV92aWYgcG9pbnRlciBmcm9tIHRoZSBhZGRfaW50ZXJmYWNlIGNhbGxiYWNrLgogICoKICAqIFdoZW4gYmVhY29uIGZpbHRlcmluZyBpcyBlbmFibGVkIHdpdGggSUVFRTgwMjExX0hXX0JFQUNPTl9GSUxURVJJTkcgYW5kCiAgKiBJRUVFODAyMTFfQ09ORl9QUyBpcyBzZXQsIHRoZSBkcml2ZXIgbmVlZHMgdG8gaW5mb3JtIHdoZW5ldmVyIHRoZQpAQCAtMjIzNCw4ICsyMzk2LDEyIEBACiAgKiBAc2hvcnRfcHJlYW1ibGU6IHdoZXRoZXIgbWFjODAyMTEgd2lsbCByZXF1ZXN0IHNob3J0LXByZWFtYmxlIHRyYW5zbWlzc2lvbgogICoJaWYgdGhlIHNlbGVjdGVkIHJhdGUgc3VwcG9ydHMgaXQKICAqIEBtYXhfcmF0ZV9pZHg6IHVzZXItcmVxdWVzdGVkIG1heGltdW0gcmF0ZSAobm90IE1DUyBmb3Igbm93KQorICoJKGRlcHJlY2F0ZWQ7IHRoaXMgd2lsbCBiZSByZW1vdmVkIG9uY2UgZHJpdmVycyBnZXQgdXBkYXRlZCB0byB1c2UKKyAqCXJhdGVfaWR4X21hc2spCisgKiBAcmF0ZV9pZHhfbWFzazogdXNlci1yZXF1ZXN0ZWQgcmF0ZSBtYXNrIChub3QgTUNTIGZvciBub3cpCiAgKiBAc2tiOiB0aGUgc2tiIHRoYXQgd2lsbCBiZSB0cmFuc21pdHRlZCwgdGhlIGNvbnRyb2wgaW5mb3JtYXRpb24gaW4gaXQgbmVlZHMKICAqCXRvIGJlIGZpbGxlZCBpbgorICogQGFwOiB3aGV0aGVyIHRoaXMgZnJhbWUgaXMgc2VudCBvdXQgaW4gQVAgbW9kZQogICovCiBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGVfY29udHJvbCB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHc7CkBAIC0yMjQ1LDYgKzI0MTEsOCBAQAogCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZSByZXBvcnRlZF9yYXRlOwogCWJvb2wgcnRzLCBzaG9ydF9wcmVhbWJsZTsKIAl1OCBtYXhfcmF0ZV9pZHg7CisJdTMyIHJhdGVfaWR4X21hc2s7CisJYm9vbCBhcDsKIH07CiAKIHN0cnVjdCByYXRlX2NvbnRyb2xfb3BzIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25laWdoYm91ci5oIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKaW5kZXggYjAxNzMyMC4uZGExZDU4YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKKysrIGIvaW5jbHVkZS9uZXQvbmVpZ2hib3VyLmgKQEAgLTE2NCw3ICsxNjQsNyBAQAogCXJ3bG9ja190CQlsb2NrOwogCXVuc2lnbmVkIGxvbmcJCWxhc3RfcmFuZDsKIAlzdHJ1Y3Qga21lbV9jYWNoZQkJKmttZW1fY2FjaGVwOwotCXN0cnVjdCBuZWlnaF9zdGF0aXN0aWNzCSpzdGF0czsKKwlzdHJ1Y3QgbmVpZ2hfc3RhdGlzdGljcwlfX3BlcmNwdSAqc3RhdHM7CiAJc3RydWN0IG5laWdoYm91cgkqKmhhc2hfYnVja2V0czsKIAl1bnNpZ25lZCBpbnQJCWhhc2hfbWFzazsKIAlfX3UzMgkJCWhhc2hfcm5kOwpAQCAtMjUxLDcgKzI1MSw2IEBACiAKIGV4dGVybiBpbnQJCQluZWlnaF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgCiAJCQkJCQkgICAgICBzdHJ1Y3QgbmVpZ2hfcGFybXMgKnAsCi0JCQkJCQkgICAgICBpbnQgcF9pZCwgaW50IHBkZXZfaWQsCiAJCQkJCQkgICAgICBjaGFyICpwX25hbWUsCiAJCQkJCQkgICAgICBwcm9jX2hhbmRsZXIgKnByb2NfaGFuZGxlcik7CiBleHRlcm4gdm9pZAkJCW5laWdoX3N5c2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBuZWlnaF9wYXJtcyAqcCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmggYi9pbmNsdWRlL25ldC9uZXRfbmFtZXNwYWNlLmgKaW5kZXggZjMwN2UxMy4uYmQxMGE3OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0X25hbWVzcGFjZS5oCisrKyBiL2luY2x1ZGUvbmV0L25ldF9uYW1lc3BhY2UuaApAQCAtODEsNiArODEsOCBAQAogI2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLX01PRFVMRSkKIAlzdHJ1Y3QgbmV0bnNfY3QJCWN0OwogI2VuZGlmCisJc3RydWN0IHNvY2sJCSpuZm5sOworCXN0cnVjdCBzb2NrCQkqbmZubF9zdGFzaDsKICNlbmRpZgogI2lmZGVmIENPTkZJR19YRlJNCiAJc3RydWN0IG5ldG5zX3hmcm0JeGZybTsKQEAgLTk4LDE0ICsxMDAsOSBAQAogZXh0ZXJuIHN0cnVjdCBuZXQgaW5pdF9uZXQ7CiAKICNpZmRlZiBDT05GSUdfTkVUCi0jZGVmaW5lIElOSVRfTkVUX05TKG5ldF9ucykgLm5ldF9ucyA9ICZpbml0X25ldCwKLQogZXh0ZXJuIHN0cnVjdCBuZXQgKmNvcHlfbmV0X25zKHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHN0cnVjdCBuZXQgKm5ldF9ucyk7CiAKICNlbHNlIC8qIENPTkZJR19ORVQgKi8KLQotI2RlZmluZSBJTklUX05FVF9OUyhuZXRfbnMpCi0KIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldCAqY29weV9uZXRfbnModW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IG5ldCAqbmV0X25zKQogewogCS8qIFRoZXJlIGlzIG5vdGhpbmcgdG8gY29weSBzbyB0aGlzIGlzIGEgbm9vcCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oCmluZGV4IGEwOTA0YWQuLmJkZTA5NWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmgKQEAgLTcwLDcgKzcwLDcgQEAKIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyOwogCiAvKiBNdXN0IGJlIGtlcHQgaW4gc3luYyB3aXRoIHRoZSBjbGFzc2VzIGRlZmluZWQgYnkgaGVscGVycyAqLwotI2RlZmluZSBORl9DVF9NQVhfRVhQRUNUX0NMQVNTRVMJMworI2RlZmluZSBORl9DVF9NQVhfRVhQRUNUX0NMQVNTRVMJNAogCiAvKiBuZl9jb25uIGZlYXR1cmUgZm9yIGNvbm5lY3Rpb25zIHRoYXQgaGF2ZSBhIGhlbHBlciAqLwogc3RydWN0IG5mX2Nvbm5faGVscCB7CkBAIC0xOTgsNyArMTk4LDggQEAKIGV4dGVybiB2b2lkIG5mX2N0X2ZyZWVfaGFzaHRhYmxlKHZvaWQgKmhhc2gsIGludCB2bWFsbG9jZWQsIHVuc2lnbmVkIGludCBzaXplKTsKIAogZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqCi1fX25mX2Nvbm50cmFja19maW5kKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOworX19uZl9jb25udHJhY2tfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIHUxNiB6b25lLAorCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOwogCiBleHRlcm4gdm9pZCBuZl9jb25udHJhY2tfaGFzaF9pbnNlcnQoc3RydWN0IG5mX2Nvbm4gKmN0KTsKIGV4dGVybiB2b2lkIG5mX2N0X2RlbGV0ZV9mcm9tX2xpc3RzKHN0cnVjdCBuZl9jb25uICpjdCk7CkBAIC0yNjcsMTEgKzI2OCwxNiBAQAogbmZfY3RfaXRlcmF0ZV9jbGVhbnVwKHN0cnVjdCBuZXQgKm5ldCwgaW50ICgqaXRlcikoc3RydWN0IG5mX2Nvbm4gKmksIHZvaWQgKmRhdGEpLCB2b2lkICpkYXRhKTsKIGV4dGVybiB2b2lkIG5mX2Nvbm50cmFja19mcmVlKHN0cnVjdCBuZl9jb25uICpjdCk7CiBleHRlcm4gc3RydWN0IG5mX2Nvbm4gKgotbmZfY29ubnRyYWNrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwKK25mX2Nvbm50cmFja19hbGxvYyhzdHJ1Y3QgbmV0ICpuZXQsIHUxNiB6b25lLAogCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnLAogCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpyZXBsLAogCQkgICBnZnBfdCBnZnApOwogCitzdGF0aWMgaW5saW5lIGludCBuZl9jdF9pc190ZW1wbGF0ZShjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisJcmV0dXJuIHRlc3RfYml0KElQU19URU1QTEFURV9CSVQsICZjdC0+c3RhdHVzKTsKK30KKwogLyogSXQncyBjb25maXJtZWQgaWYgaXQgaXMsIG9yIGhhcyBiZWVuIGluIHRoZSBoYXNoIHRhYmxlLiAqLwogc3RhdGljIGlubGluZSBpbnQgbmZfY3RfaXNfY29uZmlybWVkKHN0cnVjdCBuZl9jb25uICpjdCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmgKaW5kZXggNWE0NDliNC4uZGZmZGU4ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmgKQEAgLTQ5LDcgKzQ5LDggQEAKIAogLyogRmluZCBhIGNvbm5lY3Rpb24gY29ycmVzcG9uZGluZyB0byBhIHR1cGxlLiAqLwogZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqCi1uZl9jb25udHJhY2tfZmluZF9nZXQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSk7CituZl9jb25udHJhY2tfZmluZF9nZXQoc3RydWN0IG5ldCAqbmV0LCB1MTYgem9uZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOwogCiBleHRlcm4gaW50IF9fbmZfY29ubnRyYWNrX2NvbmZpcm0oc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oCmluZGV4IDQ3NWZhY2MuLjk2YmE1ZjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaApAQCAtMTIsMjcgKzEyLDEyIEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZV9jb21tb24uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuaD4KIAotLyogQ29ubmVjdGlvbiB0cmFja2luZyBldmVudCB0eXBlcyAqLwotZW51bSBpcF9jb25udHJhY2tfZXZlbnRzIHsKLQlJUENUX05FVwkJPSAwLAkvKiBuZXcgY29ubnRyYWNrICovCi0JSVBDVF9SRUxBVEVECQk9IDEsCS8qIHJlbGF0ZWQgY29ubnRyYWNrICovCi0JSVBDVF9ERVNUUk9ZCQk9IDIsCS8qIGRlc3Ryb3llZCBjb25udHJhY2sgKi8KLQlJUENUX1NUQVRVUwkJPSAzLAkvKiBzdGF0dXMgaGFzIGNoYW5nZWQgKi8KLQlJUENUX1BST1RPSU5GTwkJPSA0LAkvKiBwcm90b2NvbCBpbmZvcm1hdGlvbiBoYXMgY2hhbmdlZCAqLwotCUlQQ1RfSEVMUEVSCQk9IDUsCS8qIG5ldyBoZWxwZXIgaGFzIGJlZW4gc2V0ICovCi0JSVBDVF9NQVJLCQk9IDYsCS8qIG5ldyBtYXJrIGhhcyBiZWVuIHNldCAqLwotCUlQQ1RfTkFUU0VRQURKCQk9IDcsCS8qIE5BVCBpcyBkb2luZyBzZXF1ZW5jZSBhZGp1c3RtZW50ICovCi0JSVBDVF9TRUNNQVJLCQk9IDgsCS8qIG5ldyBzZWN1cml0eSBtYXJrIGhhcyBiZWVuIHNldCAqLwotfTsKLQotZW51bSBpcF9jb25udHJhY2tfZXhwZWN0X2V2ZW50cyB7Ci0JSVBFWFBfTkVXCQk9IDAsCS8qIG5ldyBleHBlY3RhdGlvbiAqLwotfTsKLQogc3RydWN0IG5mX2Nvbm50cmFja19lY2FjaGUgewotCXVuc2lnbmVkIGxvbmcgY2FjaGU7CQkvKiBiaXRvcHMgd2FudCBsb25nICovCi0JdW5zaWduZWQgbG9uZyBtaXNzZWQ7CQkvKiBtaXNzZWQgZXZlbnRzICovCi0JdTMyIHBpZDsJCQkvKiBuZXRsaW5rIHBpZCBvZiBkZXN0cm95ZXIgKi8KKwl1bnNpZ25lZCBsb25nIGNhY2hlOwkvKiBiaXRvcHMgd2FudCBsb25nICovCisJdW5zaWduZWQgbG9uZyBtaXNzZWQ7CS8qIG1pc3NlZCBldmVudHMgKi8KKwl1MTYgY3RtYXNrOwkJLyogYml0bWFzayBvZiBjdCBldmVudHMgdG8gYmUgZGVsaXZlcmVkICovCisJdTE2IGV4cG1hc2s7CQkvKiBiaXRtYXNrIG9mIGV4cGVjdCBldmVudHMgdG8gYmUgZGVsaXZlcmVkICovCisJdTMyIHBpZDsJCS8qIG5ldGxpbmsgcGlkIG9mIGRlc3Ryb3llciAqLwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZfY29ubnRyYWNrX2VjYWNoZSAqCkBAIC00MiwxNCArMjcsMjQgQEAKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZfY29ubnRyYWNrX2VjYWNoZSAqCi1uZl9jdF9lY2FjaGVfZXh0X2FkZChzdHJ1Y3QgbmZfY29ubiAqY3QsIGdmcF90IGdmcCkKK25mX2N0X2VjYWNoZV9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCwgdTE2IGN0bWFzaywgdTE2IGV4cG1hc2ssIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBuZl9jdF9uZXQoY3QpOworCXN0cnVjdCBuZl9jb25udHJhY2tfZWNhY2hlICplOwogCi0JaWYgKCFuZXQtPmN0LnN5c2N0bF9ldmVudHMpCisJaWYgKCFjdG1hc2sgJiYgIWV4cG1hc2sgJiYgbmV0LT5jdC5zeXNjdGxfZXZlbnRzKSB7CisJCWN0bWFzayA9IH4wOworCQlleHBtYXNrID0gfjA7CisJfQorCWlmICghY3RtYXNrICYmICFleHBtYXNrKQogCQlyZXR1cm4gTlVMTDsKIAotCXJldHVybiBuZl9jdF9leHRfYWRkKGN0LCBORl9DVF9FWFRfRUNBQ0hFLCBnZnApOworCWUgPSBuZl9jdF9leHRfYWRkKGN0LCBORl9DVF9FWFRfRUNBQ0hFLCBnZnApOworCWlmIChlKSB7CisJCWUtPmN0bWFzayAgPSBjdG1hc2s7CisJCWUtPmV4cG1hc2sgPSBleHBtYXNrOworCX0KKwlyZXR1cm4gZTsKIH07CiAKICNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX0VWRU5UUwpAQCAtODIsNiArNzcsOSBAQAogCWlmIChlID09IE5VTEwpCiAJCXJldHVybjsKIAorCWlmICghKGUtPmN0bWFzayAmICgxIDw8IGV2ZW50KSkpCisJCXJldHVybjsKKwogCXNldF9iaXQoZXZlbnQsICZlLT5jYWNoZSk7CiB9CiAKQEAgLTkyLDcgKzkwLDYgQEAKIAkJCSAgICAgIGludCByZXBvcnQpCiB7CiAJaW50IHJldCA9IDA7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gbmZfY3RfbmV0KGN0KTsKIAlzdHJ1Y3QgbmZfY3RfZXZlbnRfbm90aWZpZXIgKm5vdGlmeTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2VjYWNoZSAqZTsKIApAQCAtMTAxLDkgKzk4LDYgQEAKIAlpZiAobm90aWZ5ID09IE5VTEwpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCWlmICghbmV0LT5jdC5zeXNjdGxfZXZlbnRzKQotCQlnb3RvIG91dF91bmxvY2s7Ci0KIAllID0gbmZfY3RfZWNhY2hlX2ZpbmQoY3QpOwogCWlmIChlID09IE5VTEwpCiAJCWdvdG8gb3V0X3VubG9jazsKQEAgLTExNyw2ICsxMTEsOSBAQAogCQkvKiBUaGlzIGlzIGEgcmVzZW50IG9mIGEgZGVzdHJveSBldmVudD8gSWYgc28sIHNraXAgbWlzc2VkICovCiAJCXVuc2lnbmVkIGxvbmcgbWlzc2VkID0gZS0+cGlkID8gMCA6IGUtPm1pc3NlZDsKIAorCQlpZiAoISgoZXZlbnRtYXNrIHwgbWlzc2VkKSAmIGUtPmN0bWFzaykpCisJCQlnb3RvIG91dF91bmxvY2s7CisKIAkJcmV0ID0gbm90aWZ5LT5mY24oZXZlbnRtYXNrIHwgbWlzc2VkLCAmaXRlbSk7CiAJCWlmICh1bmxpa2VseShyZXQgPCAwIHx8IG1pc3NlZCkpIHsKIAkJCXNwaW5fbG9ja19iaCgmY3QtPmxvY2spOwpAQCAtMTcyLDE4ICsxNjksMTkgQEAKIAkJCSAgdTMyIHBpZCwKIAkJCSAgaW50IHJlcG9ydCkKIHsKLQlzdHJ1Y3QgbmV0ICpuZXQgPSBuZl9jdF9leHBfbmV0KGV4cCk7CiAJc3RydWN0IG5mX2V4cF9ldmVudF9ub3RpZmllciAqbm90aWZ5OworCXN0cnVjdCBuZl9jb25udHJhY2tfZWNhY2hlICplOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCW5vdGlmeSA9IHJjdV9kZXJlZmVyZW5jZShuZl9leHBlY3RfZXZlbnRfY2IpOwogCWlmIChub3RpZnkgPT0gTlVMTCkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JaWYgKCFuZXQtPmN0LnN5c2N0bF9ldmVudHMpCisJZSA9IG5mX2N0X2VjYWNoZV9maW5kKGV4cC0+bWFzdGVyKTsKKwlpZiAoZSA9PSBOVUxMKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQl7CisJaWYgKGUtPmV4cG1hc2sgJiAoMSA8PCBldmVudCkpIHsKIAkJc3RydWN0IG5mX2V4cF9ldmVudCBpdGVtID0gewogCQkJLmV4cAk9IGV4cCwKIAkJCS5waWQJPSBwaWQsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaAppbmRleCA5YTJiOWNiLi4xMWU4MTUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oCisrKyBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmgKQEAgLTU2LDE2ICs1NiwxMyBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXQgKm5mX2N0X2V4cF9uZXQoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCkKIHsKLSNpZmRlZiBDT05GSUdfTkVUX05TCi0JcmV0dXJuIGV4cC0+bWFzdGVyLT5jdF9uZXQ7CS8qIGJ5IGRlZmluaXRpb24gKi8KLSNlbHNlCi0JcmV0dXJuICZpbml0X25ldDsKLSNlbmRpZgorCXJldHVybiBuZl9jdF9uZXQoZXhwLT5tYXN0ZXIpOwogfQogCiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdF9wb2xpY3kgewogCXVuc2lnbmVkIGludAltYXhfZXhwZWN0ZWQ7CiAJdW5zaWduZWQgaW50CXRpbWVvdXQ7CisJY29uc3QgY2hhcgkqbmFtZTsKIH07CiAKICNkZWZpbmUgTkZfQ1RfRVhQRUNUX0NMQVNTX0RFRkFVTFQJMApAQCAtNzcsMTMgKzc0LDE2IEBACiB2b2lkIG5mX2Nvbm50cmFja19leHBlY3RfZmluaShzdHJ1Y3QgbmV0ICpuZXQpOwogCiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqCi1fX25mX2N0X2V4cGVjdF9maW5kKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOworX19uZl9jdF9leHBlY3RfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIHUxNiB6b25lLAorCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOwogCiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqCi1uZl9jdF9leHBlY3RfZmluZF9nZXQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSk7CituZl9jdF9leHBlY3RfZmluZF9nZXQoc3RydWN0IG5ldCAqbmV0LCB1MTYgem9uZSwKKwkJICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOwogCiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqCi1uZl9jdF9maW5kX2V4cGVjdGF0aW9uKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOworbmZfY3RfZmluZF9leHBlY3RhdGlvbihzdHJ1Y3QgbmV0ICpuZXQsIHUxNiB6b25lLAorCQkgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpOwogCiB2b2lkIG5mX2N0X3VubGlua19leHBlY3Qoc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cCk7CiB2b2lkIG5mX2N0X3JlbW92ZV9leHBlY3RhdGlvbnMoc3RydWN0IG5mX2Nvbm4gKmN0KTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5oCmluZGV4IGUxOTJkYzEuLjJkMmExZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuaApAQCAtOCw2ICs4LDcgQEAKIAlORl9DVF9FWFRfTkFULAogCU5GX0NUX0VYVF9BQ0NULAogCU5GX0NUX0VYVF9FQ0FDSEUsCisJTkZfQ1RfRVhUX1pPTkUsCiAJTkZfQ1RfRVhUX05VTSwKIH07CiAKQEAgLTE1LDYgKzE2LDcgQEAKICNkZWZpbmUgTkZfQ1RfRVhUX05BVF9UWVBFIHN0cnVjdCBuZl9jb25uX25hdAogI2RlZmluZSBORl9DVF9FWFRfQUNDVF9UWVBFIHN0cnVjdCBuZl9jb25uX2NvdW50ZXIKICNkZWZpbmUgTkZfQ1RfRVhUX0VDQUNIRV9UWVBFIHN0cnVjdCBuZl9jb25udHJhY2tfZWNhY2hlCisjZGVmaW5lIE5GX0NUX0VYVF9aT05FX1RZUEUgc3RydWN0IG5mX2Nvbm50cmFja196b25lCiAKIC8qIEV4dGVuc2lvbnM6IG9wdGlvbmFsIHN0dWZmIHdoaWNoIGlzbid0IHBlcm1hbmVudGx5IGluIHN0cnVjdC4gKi8KIHN0cnVjdCBuZl9jdF9leHQgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmgKaW5kZXggZDAxNWRlOS4uMzJjMzA1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaAorKysgYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oCkBAIC00MCwxNCArNDAsMTggQEAKIH07CiAKIGV4dGVybiBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqCi1fX25mX2Nvbm50cmFja19oZWxwZXJfZmluZF9ieW5hbWUoY29uc3QgY2hhciAqbmFtZSk7CitfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChjb25zdCBjaGFyICpuYW1lLCB1MTYgbDNudW0sIHU4IHByb3RvbnVtKTsKKworZXh0ZXJuIHN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICoKK25mX2Nvbm50cmFja19oZWxwZXJfdHJ5X21vZHVsZV9nZXQoY29uc3QgY2hhciAqbmFtZSwgdTE2IGwzbnVtLCB1OCBwcm90b251bSk7CiAKIGV4dGVybiBpbnQgbmZfY29ubnRyYWNrX2hlbHBlcl9yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqKTsKIGV4dGVybiB2b2lkIG5mX2Nvbm50cmFja19oZWxwZXJfdW5yZWdpc3RlcihzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqKTsKIAogZXh0ZXJuIHN0cnVjdCBuZl9jb25uX2hlbHAgKm5mX2N0X2hlbHBlcl9leHRfYWRkKHN0cnVjdCBuZl9jb25uICpjdCwgZ2ZwX3QgZ2ZwKTsKIAotZXh0ZXJuIGludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgZ2ZwX3QgZmxhZ3MpOworZXh0ZXJuIGludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsCisJCQkJICAgICBnZnBfdCBmbGFncyk7CiAKIGV4dGVybiB2b2lkIG5mX2N0X2hlbHBlcl9kZXN0cm95KHN0cnVjdCBuZl9jb25uICpjdCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgKaW5kZXggY2E2ZGNmMy4uZTNkM2VlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmgKQEAgLTQ5LDggKzQ5LDggQEAKIAkvKiBDYWxsZWQgd2hlbiBhIGNvbm50cmFjayBlbnRyeSBpcyBkZXN0cm95ZWQgKi8KIAl2b2lkICgqZGVzdHJveSkoc3RydWN0IG5mX2Nvbm4gKmN0KTsKIAotCWludCAoKmVycm9yKShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAotCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gKmN0aW5mbywKKwlpbnQgKCplcnJvcikoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLAogCQkgICAgIHVfaW50OF90IHBmLCB1bnNpZ25lZCBpbnQgaG9va251bSk7CiAKIAkvKiBQcmludCBvdXQgdGhlIHBlci1wcm90b2NvbCBwYXJ0IG9mIHRoZSB0dXBsZS4gUmV0dXJuIGxpa2Ugc2VxXyogKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaCBiL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzRlZmU4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja196b25lcy5oCkBAIC0wLDAgKzEsMjUgQEAKKyNpZm5kZWYgX05GX0NPTk5UUkFDS19aT05FU19ICisjZGVmaW5lIF9ORl9DT05OVFJBQ0tfWk9ORVNfSAorCisjZGVmaW5lIE5GX0NUX0RFRkFVTFRfWk9ORQkwCisKKyNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmg+CisKK3N0cnVjdCBuZl9jb25udHJhY2tfem9uZSB7CisJdTE2CWlkOworfTsKKworc3RhdGljIGlubGluZSB1MTYgbmZfY3Rfem9uZShjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QpCit7CisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19aT05FUworCXN0cnVjdCBuZl9jb25udHJhY2tfem9uZSAqbmZfY3Rfem9uZTsKKwluZl9jdF96b25lID0gbmZfY3RfZXh0X2ZpbmQoY3QsIE5GX0NUX0VYVF9aT05FKTsKKwlpZiAobmZfY3Rfem9uZSkKKwkJcmV0dXJuIG5mX2N0X3pvbmUtPmlkOworI2VuZGlmCisJcmV0dXJuIE5GX0NUX0RFRkFVTFRfWk9ORTsKK30KKworI2VuZGlmIC8qIENPTkZJR19ORl9DT05OVFJBQ0sgfHwgQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUgKi8KKyNlbmRpZiAvKiBfTkZfQ09OTlRSQUNLX1pPTkVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmggYi9pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5oCmluZGV4IDQyMjIyMjAuLjAyYmI2YzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuaApAQCAtNywxMyArNywyNyBAQAogc3RydWN0IHNrX2J1ZmY7CiAKIC8qIFRoZXNlIHJldHVybiB0cnVlIG9yIGZhbHNlLiAqLwotZXh0ZXJuIGludCBuZl9uYXRfbWFuZ2xlX3RjcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkJCSAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKLQkJCQkgICAgdW5zaWduZWQgaW50IG1hdGNoX29mZnNldCwKLQkJCQkgICAgdW5zaWduZWQgaW50IG1hdGNoX2xlbiwKLQkJCQkgICAgY29uc3QgY2hhciAqcmVwX2J1ZmZlciwKLQkJCQkgICAgdW5zaWduZWQgaW50IHJlcF9sZW4pOworZXh0ZXJuIGludCBfX25mX25hdF9tYW5nbGVfdGNwX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCQkgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hfb2Zmc2V0LAorCQkJCSAgICAgIHVuc2lnbmVkIGludCBtYXRjaF9sZW4sCisJCQkJICAgICAgY29uc3QgY2hhciAqcmVwX2J1ZmZlciwKKwkJCQkgICAgICB1bnNpZ25lZCBpbnQgcmVwX2xlbiwgYm9vbCBhZGp1c3QpOworCitzdGF0aWMgaW5saW5lIGludCBuZl9uYXRfbWFuZ2xlX3RjcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgc3RydWN0IG5mX2Nvbm4gKmN0LAorCQkJCQkgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCQkJICAgdW5zaWduZWQgaW50IG1hdGNoX29mZnNldCwKKwkJCQkJICAgdW5zaWduZWQgaW50IG1hdGNoX2xlbiwKKwkJCQkJICAgY29uc3QgY2hhciAqcmVwX2J1ZmZlciwKKwkJCQkJICAgdW5zaWduZWQgaW50IHJlcF9sZW4pCit7CisJcmV0dXJuIF9fbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0KHNrYiwgY3QsIGN0aW5mbywKKwkJCQkJICBtYXRjaF9vZmZzZXQsIG1hdGNoX2xlbiwKKwkJCQkJICByZXBfYnVmZmVyLCByZXBfbGVuLCB0cnVlKTsKK30KKwogZXh0ZXJuIGludCBuZl9uYXRfbWFuZ2xlX3VkcF9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQkgICAgc3RydWN0IG5mX2Nvbm4gKmN0LAogCQkJCSAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKQEAgLTIxLDYgKzM1LDEwIEBACiAJCQkJICAgIHVuc2lnbmVkIGludCBtYXRjaF9sZW4sCiAJCQkJICAgIGNvbnN0IGNoYXIgKnJlcF9idWZmZXIsCiAJCQkJICAgIHVuc2lnbmVkIGludCByZXBfbGVuKTsKKworZXh0ZXJuIHZvaWQgbmZfbmF0X3NldF9zZXFfYWRqdXN0KHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCQkgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvLAorCQkJCSAgX19iZTMyIHNlcSwgczE2IG9mZik7CiBleHRlcm4gaW50IG5mX25hdF9zZXFfYWRqdXN0KHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgICAgIHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCSAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bGluay5oIGIvaW5jbHVkZS9uZXQvbmV0bGluay5oCmluZGV4IGE2M2IyMTkuLmY4MmU0NjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGxpbmsuaAorKysgYi9pbmNsdWRlL25ldC9uZXRsaW5rLmgKQEAgLTE5Niw3ICsxOTYsNyBAQAogICogICAgQWxsIG90aGVyICAgICAgICAgICAgRXhhY3QgbGVuZ3RoIG9mIGF0dHJpYnV0ZSBwYXlsb2FkCiAgKgogICogRXhhbXBsZToKLSAqIHN0YXRpYyBzdHJ1Y3QgbmxhX3BvbGljeSBteV9wb2xpY3lbQVRUUl9NQVgrMV0gX19yZWFkX21vc3RseSA9IHsKKyAqIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBteV9wb2xpY3lbQVRUUl9NQVgrMV0gPSB7CiAgKiAJW0FUVFJfRk9PXSA9IHsgLnR5cGUgPSBOTEFfVTE2IH0sCiAgKglbQVRUUl9CQVJdID0geyAudHlwZSA9IE5MQV9TVFJJTkcsIC5sZW4gPSBCQVJTSVogfSwKICAqCVtBVFRSX0JBWl0gPSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IG15c3RydWN0KSB9LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bnMvY29ubnRyYWNrLmggYi9pbmNsdWRlL25ldC9uZXRucy9jb25udHJhY2suaAppbmRleCA2M2Q0NDk4Li5kNDk1OGQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9uZXRucy9jb25udHJhY2suaAorKysgYi9pbmNsdWRlL25ldC9uZXRucy9jb25udHJhY2suaApAQCAtMTcsNyArMTcsNyBAQAogCXN0cnVjdCBobGlzdF9oZWFkCSpleHBlY3RfaGFzaDsKIAlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZAl1bmNvbmZpcm1lZDsKIAlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZAlkeWluZzsKLQlzdHJ1Y3QgaXBfY29ubnRyYWNrX3N0YXQgKnN0YXQ7CisJc3RydWN0IGlwX2Nvbm50cmFja19zdGF0IF9fcGVyY3B1ICpzdGF0OwogCWludAkJCXN5c2N0bF9ldmVudHM7CiAJdW5zaWduZWQgaW50CQlzeXNjdGxfZXZlbnRzX3JldHJ5X3RpbWVvdXQ7CiAJaW50CQkJc3lzY3RsX2FjY3Q7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9jb3JlLmggYi9pbmNsdWRlL25ldC9uZXRucy9jb3JlLmgKaW5kZXggMjRkNGJlNy4uNzhlYjFmZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvY29yZS5oCisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL2NvcmUuaApAQCAtMTAsNyArMTAsNyBAQAogCiAJaW50CXN5c2N0bF9zb21heGNvbm47CiAKLQlzdHJ1Y3QgcHJvdF9pbnVzZQkqaW51c2U7CisJc3RydWN0IHByb3RfaW51c2UgX19wZXJjcHUgKmludXNlOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmggYi9pbmNsdWRlL25ldC9uZXRucy9pcHY0LmgKaW5kZXggOWE0YjhiNy4uMjc2NDk5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvaXB2NC5oCisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL2lwdjQuaApAQCAtMzcsNyArMzcsOSBAQAogCXN0cnVjdCB4dF90YWJsZQkJKmlwdGFibGVfbWFuZ2xlOwogCXN0cnVjdCB4dF90YWJsZQkJKmlwdGFibGVfcmF3OwogCXN0cnVjdCB4dF90YWJsZQkJKmFycHRhYmxlX2ZpbHRlcjsKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFkKIAlzdHJ1Y3QgeHRfdGFibGUJCSppcHRhYmxlX3NlY3VyaXR5OworI2VuZGlmCiAJc3RydWN0IHh0X3RhYmxlCQkqbmF0X3RhYmxlOwogCXN0cnVjdCBobGlzdF9oZWFkCSpuYXRfYnlzb3VyY2U7CiAJdW5zaWduZWQgaW50CQluYXRfaHRhYmxlX3NpemU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9uZXRucy9pcHY2LmggYi9pbmNsdWRlL25ldC9uZXRucy9pcHY2LmgKaW5kZXggZGZlYjJkNy4uMWYxMWViYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvaXB2Ni5oCisrKyBiL2luY2x1ZGUvbmV0L25ldG5zL2lwdjYuaApAQCAtMzYsOCArMzYsMTAgQEAKIAlzdHJ1Y3QgeHRfdGFibGUJCSppcDZ0YWJsZV9maWx0ZXI7CiAJc3RydWN0IHh0X3RhYmxlCQkqaXA2dGFibGVfbWFuZ2xlOwogCXN0cnVjdCB4dF90YWJsZQkJKmlwNnRhYmxlX3JhdzsKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFkKIAlzdHJ1Y3QgeHRfdGFibGUJCSppcDZ0YWJsZV9zZWN1cml0eTsKICNlbmRpZgorI2VuZGlmCiAJc3RydWN0IHJ0Nl9pbmZvICAgICAgICAgKmlwNl9udWxsX2VudHJ5OwogCXN0cnVjdCBydDZfc3RhdGlzdGljcyAgICpydDZfc3RhdHM7CiAJc3RydWN0IHRpbWVyX2xpc3QgICAgICAgaXA2X2ZpYl90aW1lcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldG5zL3BhY2tldC5oIGIvaW5jbHVkZS9uZXQvbmV0bnMvcGFja2V0LmgKaW5kZXggNjM3ZGFmNi4uY2I0ZTg5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvbmV0bnMvcGFja2V0LmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bnMvcGFja2V0LmgKQEAgLTQsMTEgKzQsMTEgQEAKICNpZm5kZWYgX19ORVROU19QQUNLRVRfSF9fCiAjZGVmaW5lIF9fTkVUTlNfUEFDS0VUX0hfXwogCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogCiBzdHJ1Y3QgbmV0bnNfcGFja2V0IHsKLQlyd2xvY2tfdAkJc2tsaXN0X2xvY2s7CisJc3BpbmxvY2tfdAkJc2tsaXN0X2xvY2s7CiAJc3RydWN0IGhsaXN0X2hlYWQJc2tsaXN0OwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGhvbmV0L3BlcC5oIGIvaW5jbHVkZS9uZXQvcGhvbmV0L3BlcC5oCmluZGV4IDRjNjFjZGMuLjM1NjcyYjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3Bob25ldC9wZXAuaAorKysgYi9pbmNsdWRlL25ldC9waG9uZXQvcGVwLmgKQEAgLTQ0LDYgKzQ0LDcgQEAKIAl1OAkJCXJ4X2ZjOwkvKiBSWCBmbG93IGNvbnRyb2wgKi8KIAl1OAkJCXR4X2ZjOwkvKiBUWCBmbG93IGNvbnRyb2wgKi8KIAl1OAkJCWluaXRfZW5hYmxlOwkvKiBhdXRvLWVuYWJsZSBhdCBjcmVhdGlvbiAqLworCXU4CQkJYWxpZ25lZDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBlcF9zb2NrICpwZXBfc2soc3RydWN0IHNvY2sgKnNrKQpAQCAtNzcsNiArNzgsNyBAQAogCiBlbnVtIHsKIAlQTlNfUElQRV9EQVRBID0gMHgyMCwKKwlQTlNfUElQRV9BTElHTkVEX0RBVEEsCiAKIAlQTlNfUEVQX0NPTk5FQ1RfUkVRID0gMHg0MCwKIAlQTlNfUEVQX0NPTk5FQ1RfUkVTUCwKQEAgLTEzOCw2ICsxNDAsNyBAQAogCVBOX1BJUEVfU0JfTkVHT1RJQVRFRF9GQywKIAlQTl9QSVBFX1NCX1JFUVVJUkVEX0ZDX1RYLAogCVBOX1BJUEVfU0JfUFJFRkVSUkVEX0ZDX1JYLAorCVBOX1BJUEVfU0JfQUxJR05FRF9EQVRBLAogfTsKIAogLyogUGhvbmV0IHBpcGUgZmxvdyBjb250cm9sIG1vZGVscyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGt0X3NjaGVkLmggYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaAppbmRleCAyZDU2NzI2Li5iNmNkYzMzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaAorKysgYi9pbmNsdWRlL25ldC9wa3Rfc2NoZWQuaApAQCAtNzEsNiArNzEsNyBAQAogCiBleHRlcm4gc3RydWN0IFFkaXNjX29wcyBwZmlmb19xZGlzY19vcHM7CiBleHRlcm4gc3RydWN0IFFkaXNjX29wcyBiZmlmb19xZGlzY19vcHM7CitleHRlcm4gc3RydWN0IFFkaXNjX29wcyBwZmlmb19oZWFkX2Ryb3BfcWRpc2Nfb3BzOwogCiBleHRlcm4gaW50IGZpZm9fc2V0X2xpbWl0KHN0cnVjdCBRZGlzYyAqcSwgdW5zaWduZWQgaW50IGxpbWl0KTsKIGV4dGVybiBzdHJ1Y3QgUWRpc2MgKmZpZm9fY3JlYXRlX2RmbHQoc3RydWN0IFFkaXNjICpzY2gsIHN0cnVjdCBRZGlzY19vcHMgKm9wcywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3JlZ3VsYXRvcnkuaCBiL2luY2x1ZGUvbmV0L3JlZ3VsYXRvcnkuaAppbmRleCA0Nzk5NWI4Li5mODczZWUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yZWd1bGF0b3J5LmgKKysrIGIvaW5jbHVkZS9uZXQvcmVndWxhdG9yeS5oCkBAIC0zOSw2ICszOSw3IEBACiAgKiAJMDAgLSBXb3JsZCByZWd1bGF0b3J5IGRvbWFpbgogICogCTk5IC0gYnVpbHQgYnkgZHJpdmVyIGJ1dCBhIHNwZWNpZmljIGFscGhhMiBjYW5ub3QgYmUgZGV0ZXJtaW5lZAogICogCTk4IC0gcmVzdWx0IG9mIGFuIGludGVyc2VjdGlvbiBiZXR3ZWVuIHR3byByZWd1bGF0b3J5IGRvbWFpbnMKKyAqCTk3IC0gcmVndWxhdG9yeSBkb21haW4gaGFzIG5vdCB5ZXQgYmVlbiBjb25maWd1cmVkCiAgKiBAaW50ZXJzZWN0OiBpbmRpY2F0ZXMgd2hldGhlciB0aGUgd2lyZWxlc3MgY29yZSBzaG91bGQgaW50ZXJzZWN0CiAgKiAJdGhlIHJlcXVlc3RlZCByZWd1bGF0b3J5IGRvbWFpbiB3aXRoIHRoZSBwcmVzZW50bHkgc2V0IHJlZ3VsYXRvcnkKICAqIAlkb21haW4uCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9yZXF1ZXN0X3NvY2suaCBiL2luY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oCmluZGV4IGM5YjUwZWIuLjk5ZTZlMTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oCisrKyBiL2luY2x1ZGUvbmV0L3JlcXVlc3Rfc29jay5oCkBAIC00NSw2ICs0NSw4IEBACiAJdm9pZAkJKCpzZW5kX3Jlc2V0KShzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJdm9pZAkJKCpkZXN0cnVjdG9yKShzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEpOworCXZvaWQJCSgqc3luX2Fja190aW1lb3V0KShzdHJ1Y3Qgc29jayAqc2ssCisJCQkJCSAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7CiB9OwogCiAvKiBzdHJ1Y3QgcmVxdWVzdF9zb2NrIC0gbWluaSBzb2NrIHRvIHJlcHJlc2VudCBhIGNvbm5lY3Rpb24gcmVxdWVzdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcm91dGUuaCBiL2luY2x1ZGUvbmV0L3JvdXRlLmgKaW5kZXggYmNlNmRkNi4uMmM5ZmJhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvcm91dGUuaAorKysgYi9pbmNsdWRlL25ldC9yb3V0ZS5oCkBAIC0xMDEsNyArMTAxLDcgQEAKICAgICAgICAgdW5zaWduZWQgaW50IG91dF9obGlzdF9zZWFyY2g7CiB9OwogCi1leHRlcm4gc3RydWN0IGlwX3J0X2FjY3QgKmlwX3J0X2FjY3Q7CitleHRlcm4gc3RydWN0IGlwX3J0X2FjY3QgX19wZXJjcHUgKmlwX3J0X2FjY3Q7CiAKIHN0cnVjdCBpbl9kZXZpY2U7CiBleHRlcm4gaW50CQlpcF9ydF9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcnRuZXRsaW5rLmggYi9pbmNsdWRlL25ldC9ydG5ldGxpbmsuaAppbmRleCA0OGQzZWZjLi5hZjYwZmQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9ydG5ldGxpbmsuaAorKysgYi9pbmNsdWRlL25ldC9ydG5ldGxpbmsuaApAQCAtODcsNiArODcsOCBAQAogZXh0ZXJuIHN0cnVjdCBuZXQgKnJ0bmxfbGlua19nZXRfbmV0KHN0cnVjdCBuZXQgKnNyY19uZXQsIHN0cnVjdCBubGF0dHIgKnRiW10pOwogZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpydG5sX2NyZWF0ZV9saW5rKHN0cnVjdCBuZXQgKnNyY19uZXQsIHN0cnVjdCBuZXQgKm5ldCwKIAljaGFyICppZm5hbWUsIGNvbnN0IHN0cnVjdCBydG5sX2xpbmtfb3BzICpvcHMsIHN0cnVjdCBubGF0dHIgKnRiW10pOworZXh0ZXJuIGludCBydG5sX2NvbmZpZ3VyZV9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGlmaW5mb21zZyAqaWZtKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBpZmxhX3BvbGljeVtJRkxBX01BWCsxXTsKIAogI2RlZmluZSBNT0RVTEVfQUxJQVNfUlROTF9MSU5LKGtpbmQpIE1PRFVMRV9BTElBUygicnRubC1saW5rLSIga2luZCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmggYi9pbmNsdWRlL25ldC9zY2hfZ2VuZXJpYy5oCmluZGV4IGRhZDU1OGIuLjY3ZGMwOGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3NjaF9nZW5lcmljLmgKKysrIGIvaW5jbHVkZS9uZXQvc2NoX2dlbmVyaWMuaApAQCAtNDI3LDYgKzQyNywyNSBAQAogCXJldHVybiBfX3FkaXNjX2RlcXVldWVfaGVhZChzY2gsICZzY2gtPnEpOwogfQogCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX3FkaXNjX3F1ZXVlX2Ryb3BfaGVhZChzdHJ1Y3QgUWRpc2MgKnNjaCwKKwkJCQkJICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gX19xZGlzY19kZXF1ZXVlX2hlYWQoc2NoLCBsaXN0KTsKKworCWlmIChsaWtlbHkoc2tiICE9IE5VTEwpKSB7CisJCXVuc2lnbmVkIGludCBsZW4gPSBxZGlzY19wa3RfbGVuKHNrYik7CisJCWtmcmVlX3NrYihza2IpOworCQlyZXR1cm4gbGVuOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBxZGlzY19xdWV1ZV9kcm9wX2hlYWQoc3RydWN0IFFkaXNjICpzY2gpCit7CisJcmV0dXJuIF9fcWRpc2NfcXVldWVfZHJvcF9oZWFkKHNjaCwgJnNjaC0+cSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKl9fcWRpc2NfZGVxdWV1ZV90YWlsKHN0cnVjdCBRZGlzYyAqc2NoLAogCQkJCQkJICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NubXAuaCBiL2luY2x1ZGUvbmV0L3NubXAuaAppbmRleCBmMGQ3NTZmLi42OTJlZTAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zbm1wLmgKKysrIGIvaW5jbHVkZS9uZXQvc25tcC5oCkBAIC0zMiw3ICszMiw3IEBACiAgKiAgLSBuYW1lIG9mIGVudHJpZXMuCiAgKi8KIHN0cnVjdCBzbm1wX21pYiB7Ci0JY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICpuYW1lOwogCWludCBlbnRyeTsKIH07CiAKQEAgLTEyOSw5ICsxMjksOSBAQAogICogbm9ubG9ja2VkX2F0b21pY19pbmMoKSBwcmltaXRpdmVzIC1BSwogICovIAogI2RlZmluZSBERUZJTkVfU05NUF9TVEFUKHR5cGUsIG5hbWUpCVwKLQlfX3R5cGVvZl9fKHR5cGUpICpuYW1lWzJdCisJX190eXBlb2ZfXyh0eXBlKSBfX3BlcmNwdSAqbmFtZVsyXQogI2RlZmluZSBERUNMQVJFX1NOTVBfU1RBVCh0eXBlLCBuYW1lKQlcCi0JZXh0ZXJuIF9fdHlwZW9mX18odHlwZSkgKm5hbWVbMl0KKwlleHRlcm4gX190eXBlb2ZfXyh0eXBlKSBfX3BlcmNwdSAqbmFtZVsyXQogCiAjZGVmaW5lIFNOTVBfU1RBVF9CSFBUUihuYW1lKQkobmFtZVswXSkKICNkZWZpbmUgU05NUF9TVEFUX1VTUlBUUihuYW1lKQkobmFtZVsxXSkKQEAgLTE0OCw5ICsxNDgsMTMgQEAKIAkJCV9fdGhpc19jcHVfYWRkKG1pYlswXS0+bWlic1tmaWVsZF0sIGFkZGVuZCkKICNkZWZpbmUgU05NUF9BRERfU1RBVFNfVVNFUihtaWIsIGZpZWxkLCBhZGRlbmQpCVwKIAkJCXRoaXNfY3B1X2FkZChtaWJbMV0tPm1pYnNbZmllbGRdLCBhZGRlbmQpCisvKgorICogVXNlICJfX3R5cGVvZl9fKCptaWJbMF0pICpwdHIiIGluc3RlYWQgb2YgIl9fdHlwZW9mX18obWliWzBdKSBwdHIiCisgKiB0byBtYWtlIEBwdHIgYSBub24tcGVyY3B1IHBvaW50ZXIuCisgKi8KICNkZWZpbmUgU05NUF9VUERfUE9fU1RBVFMobWliLCBiYXNlZmllbGQsIGFkZGVuZCkJXAogCWRvIHsgXAotCQlfX3R5cGVvZl9fKG1pYlswXSkgcHRyOyBcCisJCV9fdHlwZW9mX18oKm1pYlswXSkgKnB0cjsgXAogCQlwcmVlbXB0X2Rpc2FibGUoKTsgXAogCQlwdHIgPSB0aGlzX2NwdV9wdHIoKG1pYilbIWluX3NvZnRpcnEoKV0pOyBcCiAJCXB0ci0+bWlic1tiYXNlZmllbGQjI1BLVFNdKys7IFwKQEAgLTE1OSw3ICsxNjMsNyBAQAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIFNOTVBfVVBEX1BPX1NUQVRTX0JIKG1pYiwgYmFzZWZpZWxkLCBhZGRlbmQpCVwKIAlkbyB7IFwKLQkJX190eXBlb2ZfXyhtaWJbMF0pIHB0ciA9IFwKKwkJX190eXBlb2ZfXygqbWliWzBdKSAqcHRyID0gXAogCQkJX190aGlzX2NwdV9wdHIoKG1pYilbIWluX3NvZnRpcnEoKV0pOyBcCiAJCXB0ci0+bWlic1tiYXNlZmllbGQjI1BLVFNdKys7IFwKIAkJcHRyLT5taWJzW2Jhc2VmaWVsZCMjT0NURVRTXSArPSBhZGRlbmQ7XApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvc29jay5oIGIvaW5jbHVkZS9uZXQvc29jay5oCmluZGV4IDNmMWE0ODA0Li42Y2IxNjc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC0zMTcsNiArMzE3LDExIEBACiAvKgogICogSGFzaGVkIGxpc3RzIGhlbHBlciByb3V0aW5lcwogICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrICpza19lbnRyeShjb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSkKK3sKKwlyZXR1cm4gaGxpc3RfZW50cnkobm9kZSwgc3RydWN0IHNvY2ssIHNrX25vZGUpOworfQorCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrICpfX3NrX2hlYWQoY29uc3Qgc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQpCiB7CiAJcmV0dXJuIGhsaXN0X2VudHJ5KGhlYWQtPmZpcnN0LCBzdHJ1Y3Qgc29jaywgc2tfbm9kZSk7CkBAIC0zNzYsNiArMzgxLDcgQEAKIAlfX2hsaXN0X2RlbCgmc2stPnNrX25vZGUpOwogfQogCisvKiBOQjogZXF1aXZhbGVudCB0byBobGlzdF9kZWxfaW5pdF9yY3UgKi8KIHN0YXRpYyBfX2lubGluZV9fIGludCBfX3NrX2RlbF9ub2RlX2luaXQoc3RydWN0IHNvY2sgKnNrKQogewogCWlmIChza19oYXNoZWQoc2spKSB7CkBAIC00MTYsNiArNDIyLDcgQEAKIAl9CiAJcmV0dXJuIHJjOwogfQorI2RlZmluZSBza19kZWxfbm9kZV9pbml0X3JjdShzaykJc2tfZGVsX25vZGVfaW5pdChzaykKIAogc3RhdGljIF9faW5saW5lX18gaW50IF9fc2tfbnVsbHNfZGVsX25vZGVfaW5pdF9yY3Uoc3RydWN0IHNvY2sgKnNrKQogewpAQCAtNDQ5LDYgKzQ1NiwxMiBAQAogCV9fc2tfYWRkX25vZGUoc2ssIGxpc3QpOwogfQogCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNrX2FkZF9ub2RlX3JjdShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBobGlzdF9oZWFkICpsaXN0KQoreworCXNvY2tfaG9sZChzayk7CisJaGxpc3RfYWRkX2hlYWRfcmN1KCZzay0+c2tfbm9kZSwgbGlzdCk7Cit9CisKIHN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19za19udWxsc19hZGRfbm9kZV9yY3Uoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqbGlzdCkKIHsKIAlobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoJnNrLT5za19udWxsc19ub2RlLCBsaXN0KTsKQEAgLTQ3Myw2ICs0ODYsOCBAQAogCiAjZGVmaW5lIHNrX2Zvcl9lYWNoKF9fc2ssIG5vZGUsIGxpc3QpIFwKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShfX3NrLCBub2RlLCBsaXN0LCBza19ub2RlKQorI2RlZmluZSBza19mb3JfZWFjaF9yY3UoX19zaywgbm9kZSwgbGlzdCkgXAorCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShfX3NrLCBub2RlLCBsaXN0LCBza19ub2RlKQogI2RlZmluZSBza19udWxsc19mb3JfZWFjaChfX3NrLCBub2RlLCBsaXN0KSBcCiAJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkoX19zaywgbm9kZSwgbGlzdCwgc2tfbnVsbHNfbm9kZSkKICNkZWZpbmUgc2tfbnVsbHNfZm9yX2VhY2hfcmN1KF9fc2ssIG5vZGUsIGxpc3QpIFwKQEAgLTEwNDQsNyArMTA1OSw3IEBACiBleHRlcm4gdm9pZCBzb2NrX2luaXRfZGF0YShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29jayAqc2spOwogCiAvKioKLSAqCXNrX2ZpbHRlcl9yZWxlYXNlOiBSZWxlYXNlIGEgc29ja2V0IGZpbHRlcgorICoJc2tfZmlsdGVyX3JlbGVhc2UgLSByZWxlYXNlIGEgc29ja2V0IGZpbHRlcgogICoJQGZwOiBmaWx0ZXIgdG8gcmVtb3ZlCiAgKgogICoJUmVtb3ZlIGEgZmlsdGVyIGZyb20gYSBzb2NrZXQgYW5kIHJlbGVhc2UgaXRzIHJlc291cmNlcy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3RjcC5oIGIvaW5jbHVkZS9uZXQvdGNwLmgKaW5kZXggMzRmNWNjMi4uNTZmMGFlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvdGNwLmgKKysrIGIvaW5jbHVkZS9uZXQvdGNwLmgKQEAgLTE5Niw2ICsxOTYsOSBAQAogI2RlZmluZSBUQ1BfTkFHTEVfQ09SSwkJMgkvKiBTb2NrZXQgaXMgY29ya2VkCSAgICAqLwogI2RlZmluZSBUQ1BfTkFHTEVfUFVTSAkJNAkvKiBDb3JrIGlzIG92ZXJyaWRkZW4gZm9yIGFscmVhZHkgcXVldWVkIGRhdGEgKi8KIAorLyogVENQIHRoaW4tc3RyZWFtIGxpbWl0cyAqLworI2RlZmluZSBUQ1BfVEhJTl9MSU5FQVJfUkVUUklFUyA2ICAgICAgIC8qIEFmdGVyIDYgbGluZWFyIHJldHJpZXMsIGRvIGV4cC4gYmFja29mZiAqLworCiBleHRlcm4gc3RydWN0IGluZXRfdGltZXdhaXRfZGVhdGhfcm93IHRjcF9kZWF0aF9yb3c7CiAKIC8qIHN5c2N0bCB2YXJpYWJsZXMgZm9yIHRjcCAqLwpAQCAtMjQxLDYgKzI0NCw4IEBACiBleHRlcm4gaW50IHN5c2N0bF90Y3Bfc2xvd19zdGFydF9hZnRlcl9pZGxlOwogZXh0ZXJuIGludCBzeXNjdGxfdGNwX21heF9zc3RocmVzaDsKIGV4dGVybiBpbnQgc3lzY3RsX3RjcF9jb29raWVfc2l6ZTsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF90aGluX2xpbmVhcl90aW1lb3V0czsKK2V4dGVybiBpbnQgc3lzY3RsX3RjcF90aGluX2R1cGFjazsKIAogZXh0ZXJuIGF0b21pY190IHRjcF9tZW1vcnlfYWxsb2NhdGVkOwogZXh0ZXJuIHN0cnVjdCBwZXJjcHVfY291bnRlciB0Y3Bfc29ja2V0c19hbGxvY2F0ZWQ7CkBAIC00MDAsNiArNDA1LDggQEAKIAkJCQkJaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCQkJY2hhciBfX3VzZXIgKm9wdHZhbCwgdW5zaWduZWQgaW50IG9wdGxlbik7CiBleHRlcm4gdm9pZAkJCXRjcF9zZXRfa2VlcGFsaXZlKHN0cnVjdCBzb2NrICpzaywgaW50IHZhbCk7CitleHRlcm4gdm9pZAkJCXRjcF9zeW5fYWNrX3RpbWVvdXQoc3RydWN0IHNvY2sgKnNrLAorCQkJCQkJICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSk7CiBleHRlcm4gaW50CQkJdGNwX3JlY3Ztc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29jayAqc2ssCiAJCQkJCSAgICBzdHJ1Y3QgbXNnaGRyICptc2csCiAJCQkJCSAgICBzaXplX3QgbGVuLCBpbnQgbm9uYmxvY2ssIApAQCAtODU2LDEzICs4NjMsNiBAQAogCQkJCQkgIGljc2stPmljc2tfcnRvLCBUQ1BfUlRPX01BWCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2spCi17Ci0Jc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7Ci0KLQlfX3RjcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHNrLCB0Y3BfY3VycmVudF9tc3Moc2spLCB0cC0+bm9uYWdsZSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCB0Y3BfaW5pdF93bChzdHJ1Y3QgdGNwX3NvY2sgKnRwLCB1MzIgc2VxKQogewogCXRwLT5zbmRfd2wxID0gc2VxOwpAQCAtOTcyLDcgKzk3Miw4IEBACiAvKiBEZXRlcm1pbmUgYSB3aW5kb3cgc2NhbGluZyBhbmQgaW5pdGlhbCB3aW5kb3cgdG8gb2ZmZXIuICovCiBleHRlcm4gdm9pZCB0Y3Bfc2VsZWN0X2luaXRpYWxfd2luZG93KGludCBfX3NwYWNlLCBfX3UzMiBtc3MsCiAJCQkJICAgICAgX191MzIgKnJjdl93bmQsIF9fdTMyICp3aW5kb3dfY2xhbXAsCi0JCQkJICAgICAgaW50IHdzY2FsZV9vaywgX191OCAqcmN2X3dzY2FsZSk7CisJCQkJICAgICAgaW50IHdzY2FsZV9vaywgX191OCAqcmN2X3dzY2FsZSwKKwkJCQkgICAgICBfX3UzMiBpbml0X3Jjdl93bmQpOwogCiBzdGF0aWMgaW5saW5lIGludCB0Y3Bfd2luX2Zyb21fc3BhY2UoaW50IHNwYWNlKQogewpAQCAtMTE5Myw3ICsxMTk0LDcgQEAKICNkZWZpbmUgdGNwX3R3c2tfbWQ1X2tleSh0d3NrKQlOVUxMCiAjZW5kaWYKIAotZXh0ZXJuIHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wJKip0Y3BfYWxsb2NfbWQ1c2lnX3Bvb2woc3RydWN0IHNvY2sgKik7CitleHRlcm4gc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqIF9fcGVyY3B1ICp0Y3BfYWxsb2NfbWQ1c2lnX3Bvb2woc3RydWN0IHNvY2sgKik7CiBleHRlcm4gdm9pZAkJCXRjcF9mcmVlX21kNXNpZ19wb29sKHZvaWQpOwogCiBleHRlcm4gc3RydWN0IHRjcF9tZDVzaWdfcG9vbAkqX190Y3BfZ2V0X21kNXNpZ19wb29sKGludCBjcHUpOwpAQCAtMTM0Miw2ICsxMzQzLDE1IEBACiAJcmV0dXJuIHNrYl9xdWV1ZV9lbXB0eSgmc2stPnNrX3dyaXRlX3F1ZXVlKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHRjcF9wdXNoX3BlbmRpbmdfZnJhbWVzKHN0cnVjdCBzb2NrICpzaykKK3sKKwlpZiAodGNwX3NlbmRfaGVhZChzaykpIHsKKwkJc3RydWN0IHRjcF9zb2NrICp0cCA9IHRjcF9zayhzayk7CisKKwkJX190Y3BfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgdGNwX2N1cnJlbnRfbXNzKHNrKSwgdHAtPm5vbmFnbGUpOworCX0KK30KKwogLyogU3RhcnQgc2VxdWVuY2Ugb2YgdGhlIGhpZ2hlc3Qgc2tiIHdpdGggU0FDS2VkIGJpdCwgdmFsaWQgb25seSBpZgogICogc2Fja2VkID4gMCBvciB3aGVuIHRoZSBjYWxsZXIgaGFzIGVuc3VyZWQgdmFsaWRpdHkgYnkgaXRzZWxmLgogICovCkBAIC0xMzgxLDYgKzEzOTEsMTQgQEAKIAkJdGNwX3NrKHNrKS0+aGlnaGVzdF9zYWNrID0gbmV3OwogfQogCisvKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhpcyBpcyBhIHRoaW4gc3RyZWFtICh3aGljaCBtYXkgc3VmZmVyIGZyb20KKyAqIGluY3JlYXNlZCBsYXRlbmN5KS4gVXNlZCB0byB0cmlnZ2VyIGxhdGVuY3ktcmVkdWNpbmcgbWVjaGFuaXNtcy4KKyAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgdGNwX3N0cmVhbV9pc190aGluKHN0cnVjdCB0Y3Bfc29jayAqdHApCit7CisJcmV0dXJuIHRwLT5wYWNrZXRzX291dCA8IDQgJiYgIXRjcF9pbl9pbml0aWFsX3Nsb3dzdGFydCh0cCk7Cit9CisKIC8qIC9wcm9jICovCiBlbnVtIHRjcF9zZXFfc3RhdGVzIHsKIAlUQ1BfU0VRX1NUQVRFX0xJU1RFTklORywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3hmcm0uaCBiL2luY2x1ZGUvbmV0L3hmcm0uaAppbmRleCA2MGMyNzcwLi5hN2RmMzI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC94ZnJtLmgKKysrIGIvaW5jbHVkZS9uZXQveGZybS5oCkBAIC0xNDAsNiArMTQwLDcgQEAKIAogCXN0cnVjdCB4ZnJtX2lkCQlpZDsKIAlzdHJ1Y3QgeGZybV9zZWxlY3RvcglzZWw7CisJc3RydWN0IHhmcm1fbWFyawltYXJrOwogCiAJdTMyCQkJZ2VuaWQ7CiAKQEAgLTMxNyw4ICszMTgsOCBAQAogc3RydWN0IHhmcm1fdHlwZSB7CiAJY2hhcgkJCSpkZXNjcmlwdGlvbjsKIAlzdHJ1Y3QgbW9kdWxlCQkqb3duZXI7Ci0JX191OAkJCXByb3RvOwotCV9fdTgJCQlmbGFnczsKKwl1OAkJCXByb3RvOworCXU4CQkJZmxhZ3M7CiAjZGVmaW5lIFhGUk1fVFlQRV9OT05fRlJBR01FTlQJMQogI2RlZmluZSBYRlJNX1RZUEVfUkVQTEFZX1BST1QJMgogI2RlZmluZSBYRlJNX1RZUEVfTE9DQUxfQ09BRERSCTQKQEAgLTQzNCwyNCArNDM1LDI0IEBACiAKIAl1bnNpZ25lZCBzaG9ydAkJZW5jYXBfZmFtaWx5OwogCi0JX191MzIJCQlyZXFpZDsKKwl1MzIJCQlyZXFpZDsKIAogLyogTW9kZTogdHJhbnNwb3J0LCB0dW5uZWwgZXRjLiAqLwotCV9fdTgJCQltb2RlOworCXU4CQkJbW9kZTsKIAogLyogU2hhcmluZyBtb2RlOiB1bmlxdWUsIHRoaXMgc2Vzc2lvbiBvbmx5LCB0aGlzIHVzZXIgb25seSBldGMuICovCi0JX191OAkJCXNoYXJlOworCXU4CQkJc2hhcmU7CiAKIC8qIE1heSBza2lwIHRoaXMgdHJhbnNmb21yYXRpb24gaWYgbm8gU0EgaXMgZm91bmQgKi8KLQlfX3U4CQkJb3B0aW9uYWw7CisJdTgJCQlvcHRpb25hbDsKIAogLyogU2tpcCBhYWxnb3MvZWFsZ29zL2NhbGdvcyBjaGVja3MuICovCi0JX191OAkJCWFsbGFsZ3M7CisJdTgJCQlhbGxhbGdzOwogCiAvKiBCaXQgbWFzayBvZiBhbGdvcyBhbGxvd2VkIGZvciBhY3F1aXNpdGlvbiAqLwotCV9fdTMyCQkJYWFsZ29zOwotCV9fdTMyCQkJZWFsZ29zOwotCV9fdTMyCQkJY2FsZ29zOworCXUzMgkJCWFhbGdvczsKKwl1MzIJCQllYWxnb3M7CisJdTMyCQkJY2FsZ29zOwogfTsKIAogI2RlZmluZSBYRlJNX01BWF9ERVBUSAkJNgpAQCAtNDgxLDYgKzQ4Miw3IEBACiAKIAl1MzIJCQlwcmlvcml0eTsKIAl1MzIJCQlpbmRleDsKKwlzdHJ1Y3QgeGZybV9tYXJrCW1hcms7CiAJc3RydWN0IHhmcm1fc2VsZWN0b3IJc2VsZWN0b3I7CiAJc3RydWN0IHhmcm1fbGlmZXRpbWVfY2ZnIGxmdDsKIAlzdHJ1Y3QgeGZybV9saWZldGltZV9jdXIgY3VybGZ0OwpAQCAtNzcwLDcgKzc3Miw3IEBACiAJaW50IHBkdzsKIAlpbnQgcGJpOwogCi0JcGR3ID0gcHJlZml4bGVuID4+IDU7CSAgLyogbnVtIG9mIHdob2xlIF9fdTMyIGluIHByZWZpeCAqLworCXBkdyA9IHByZWZpeGxlbiA+PiA1OwkgIC8qIG51bSBvZiB3aG9sZSB1MzIgaW4gcHJlZml4ICovCiAJcGJpID0gcHJlZml4bGVuICYgIDB4MWY7ICAvKiBudW0gb2YgYml0cyBpbiBpbmNvbXBsZXRlIHUzMiBpbiBwcmVmaXggKi8KIAogCWlmIChwZHcpCkBAIC0xMjU5LDcgKzEyNjEsNyBAQAogLyogWEZSTSB0dW5uZWwgaGFuZGxlcnMuICAqLwogc3RydWN0IHhmcm1fdHVubmVsIHsKIAlpbnQgKCpoYW5kbGVyKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKLQlpbnQgKCplcnJfaGFuZGxlcikoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MzIgaW5mbyk7CisJaW50ICgqZXJyX2hhbmRsZXIpKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvKTsKIAogCXN0cnVjdCB4ZnJtX3R1bm5lbCAqbmV4dDsKIAlpbnQgcHJpb3JpdHk7CkBAIC0xMzE3LDcgKzEzMTksNyBAQAogCQkJCQkgIHN0cnVjdCBmbG93aSAqZmwsIHN0cnVjdCB4ZnJtX3RtcGwgKnRtcGwsCiAJCQkJCSAgc3RydWN0IHhmcm1fcG9saWN5ICpwb2wsIGludCAqZXJyLAogCQkJCQkgIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7Ci1leHRlcm4gc3RydWN0IHhmcm1fc3RhdGUgKiB4ZnJtX3N0YXRlb25seV9maW5kKHN0cnVjdCBuZXQgKm5ldCwKK2V4dGVybiBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZW9ubHlfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLAogCQkJCQkgICAgICAgeGZybV9hZGRyZXNzX3QgKmRhZGRyLAogCQkJCQkgICAgICAgeGZybV9hZGRyZXNzX3QgKnNhZGRyLAogCQkJCQkgICAgICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5LApAQCAtMTMyNiw4ICsxMzI4LDE0IEBACiBleHRlcm4gdm9pZCB4ZnJtX3N0YXRlX2luc2VydChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7CiBleHRlcm4gaW50IHhmcm1fc3RhdGVfYWRkKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKIGV4dGVybiBpbnQgeGZybV9zdGF0ZV91cGRhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngpOwotZXh0ZXJuIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHhmcm1fYWRkcmVzc190ICpkYWRkciwgX19iZTMyIHNwaSwgdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7Ci1leHRlcm4gc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHhmcm1fYWRkcmVzc190ICpkYWRkciwgeGZybV9hZGRyZXNzX3QgKnNhZGRyLCB1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKK2V4dGVybiBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywKKwkJCQkJICAgIHhmcm1fYWRkcmVzc190ICpkYWRkciwgX19iZTMyIHNwaSwKKwkJCQkJICAgIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOworZXh0ZXJuIHN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywKKwkJCQkJCSAgIHhmcm1fYWRkcmVzc190ICpkYWRkciwKKwkJCQkJCSAgIHhmcm1fYWRkcmVzc190ICpzYWRkciwKKwkJCQkJCSAgIHU4IHByb3RvLAorCQkJCQkJICAgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKICNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZCiBleHRlcm4gaW50IHhmcm1fdG1wbF9zb3J0KHN0cnVjdCB4ZnJtX3RtcGwgKipkc3QsIHN0cnVjdCB4ZnJtX3RtcGwgKipzcmMsCiAJCQkgIGludCBuLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwpAQCAtMTM2NCw3ICsxMzcyLDggQEAKIAl1MzIgc3BkaG1jbnQ7CiB9OwogCi1leHRlcm4gc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fZmluZF9hY3FfYnlzZXEoc3RydWN0IG5ldCAqbmV0LCB1MzIgc2VxKTsKK2V4dGVybiBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9maW5kX2FjcV9ieXNlcShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLAorCQkJCQkgICAgICB1MzIgc2VxKTsKIGV4dGVybiBpbnQgeGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpOwogZXh0ZXJuIGludCB4ZnJtX3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgdTggcHJvdG8sIHN0cnVjdCB4ZnJtX2F1ZGl0ICphdWRpdF9pbmZvKTsKIGV4dGVybiB2b2lkIHhmcm1fc2FkX2dldGluZm8oc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybWtfc2FkaW5mbyAqc2kpOwpAQCAtMTQwOCw5ICsxNDE3LDkgQEAKIAkJCSAgICB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsIHU4IHByb3RvKTsKIGV4dGVybiBpbnQgeGZybTZfdHVubmVsX3JlZ2lzdGVyKHN0cnVjdCB4ZnJtNl90dW5uZWwgKmhhbmRsZXIsIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7CiBleHRlcm4gaW50IHhmcm02X3R1bm5lbF9kZXJlZ2lzdGVyKHN0cnVjdCB4ZnJtNl90dW5uZWwgKmhhbmRsZXIsIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7Ci1leHRlcm4gX19iZTMyIHhmcm02X3R1bm5lbF9hbGxvY19zcGkoeGZybV9hZGRyZXNzX3QgKnNhZGRyKTsKLWV4dGVybiB2b2lkIHhmcm02X3R1bm5lbF9mcmVlX3NwaSh4ZnJtX2FkZHJlc3NfdCAqc2FkZHIpOwotZXh0ZXJuIF9fYmUzMiB4ZnJtNl90dW5uZWxfc3BpX2xvb2t1cCh4ZnJtX2FkZHJlc3NfdCAqc2FkZHIpOworZXh0ZXJuIF9fYmUzMiB4ZnJtNl90dW5uZWxfYWxsb2Nfc3BpKHN0cnVjdCBuZXQgKm5ldCwgeGZybV9hZGRyZXNzX3QgKnNhZGRyKTsKK2V4dGVybiB2b2lkIHhmcm02X3R1bm5lbF9mcmVlX3NwaShzdHJ1Y3QgbmV0ICpuZXQsIHhmcm1fYWRkcmVzc190ICpzYWRkcik7CitleHRlcm4gX19iZTMyIHhmcm02X3R1bm5lbF9zcGlfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgeGZybV9hZGRyZXNzX3QgKnNhZGRyKTsKIGV4dGVybiBpbnQgeGZybTZfZXh0cmFjdF9vdXRwdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCB4ZnJtNl9wcmVwYXJlX291dHB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IHhmcm02X291dHB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKQEAgLTE0NDEsMTcgKzE0NTAsMjAgQEAKIAlpbnQgKCpmdW5jKShzdHJ1Y3QgeGZybV9wb2xpY3kgKiwgaW50LCBpbnQsIHZvaWQqKSwgdm9pZCAqKTsKIGV4dGVybiB2b2lkIHhmcm1fcG9saWN5X3dhbGtfZG9uZShzdHJ1Y3QgeGZybV9wb2xpY3lfd2FsayAqd2Fsayk7CiBpbnQgeGZybV9wb2xpY3lfaW5zZXJ0KGludCBkaXIsIHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9saWN5LCBpbnQgZXhjbCk7Ci1zdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2J5c2VsX2N0eChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsIGludCBkaXIsCitzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2J5c2VsX2N0eChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLAorCQkJCQkgIHU4IHR5cGUsIGludCBkaXIsCiAJCQkJCSAgc3RydWN0IHhmcm1fc2VsZWN0b3IgKnNlbCwKIAkJCQkJICBzdHJ1Y3QgeGZybV9zZWNfY3R4ICpjdHgsIGludCBkZWxldGUsCiAJCQkJCSAgaW50ICplcnIpOwotc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9ieWlkKHN0cnVjdCBuZXQgKm5ldCwgdTgsIGludCBkaXIsIHUzMiBpZCwgaW50IGRlbGV0ZSwgaW50ICplcnIpOworc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9ieWlkKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssIHU4LCBpbnQgZGlyLCB1MzIgaWQsIGludCBkZWxldGUsIGludCAqZXJyKTsKIGludCB4ZnJtX3BvbGljeV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsIHN0cnVjdCB4ZnJtX2F1ZGl0ICphdWRpdF9pbmZvKTsKIHUzMiB4ZnJtX2dldF9hY3FzZXEodm9pZCk7CiBleHRlcm4gaW50IHhmcm1fYWxsb2Nfc3BpKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgbWluc3BpLCB1MzIgbWF4c3BpKTsKLXN0cnVjdCB4ZnJtX3N0YXRlICogeGZybV9maW5kX2FjcShzdHJ1Y3QgbmV0ICpuZXQsIHU4IG1vZGUsIHUzMiByZXFpZCwgdTggcHJvdG8sCi0JCQkJICB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIHhmcm1fYWRkcmVzc190ICpzYWRkciwKLQkJCQkgIGludCBjcmVhdGUsIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7CitzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9maW5kX2FjcShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJtX21hcmsgKm1hcmssCisJCQkJIHU4IG1vZGUsIHUzMiByZXFpZCwgdTggcHJvdG8sCisJCQkJIHhmcm1fYWRkcmVzc190ICpkYWRkciwKKwkJCQkgeGZybV9hZGRyZXNzX3QgKnNhZGRyLCBpbnQgY3JlYXRlLAorCQkJCSB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpOwogZXh0ZXJuIGludCB4ZnJtX3NrX3BvbGljeV9pbnNlcnQoc3RydWN0IHNvY2sgKnNrLCBpbnQgZGlyLCBzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCk7CiBleHRlcm4gaW50IHhmcm1fYnVuZGxlX29rKHN0cnVjdCB4ZnJtX3BvbGljeSAqcG9sLCBzdHJ1Y3QgeGZybV9kc3QgKnhkc3QsCiAJCQkgIHN0cnVjdCBmbG93aSAqZmwsIGludCBmYW1pbHksIGludCBzdHJpY3QpOwpAQCAtMTUwMCw3ICsxNTEyLDcgQEAKIAlzd2l0Y2ggKGZhbWlseSkgewogCWRlZmF1bHQ6CiAJY2FzZSBBRl9JTkVUOgotCQlyZXR1cm4gKF9fZm9yY2UgX191MzIpYS0+YTQgLSAoX19mb3JjZSBfX3UzMiliLT5hNDsKKwkJcmV0dXJuIChfX2ZvcmNlIHUzMilhLT5hNCAtIChfX2ZvcmNlIHUzMiliLT5hNDsKIAljYXNlIEFGX0lORVQ2OgogCQlyZXR1cm4gaXB2Nl9hZGRyX2NtcCgoc3RydWN0IGluNl9hZGRyICopYSwKIAkJCQkgICAgIChzdHJ1Y3QgaW42X2FkZHIgKiliKTsKQEAgLTE1NzAsNCArMTU4MiwyNCBAQAogfQogI2VuZGlmCiAKK3N0YXRpYyBpbmxpbmUgaW50IHhmcm1fbWFya19nZXQoc3RydWN0IG5sYXR0ciAqKmF0dHJzLCBzdHJ1Y3QgeGZybV9tYXJrICptKQoreworCWlmIChhdHRyc1tYRlJNQV9NQVJLXSkKKwkJbWVtY3B5KG0sIG5sYV9kYXRhKGF0dHJzW1hGUk1BX01BUktdKSwgc2l6ZW9mKG0pKTsKKwllbHNlCisJCW0tPnYgPSBtLT5tID0gMDsKKworCXJldHVybiBtLT52ICYgbS0+bTsKK30KKworc3RhdGljIGlubGluZSBpbnQgeGZybV9tYXJrX3B1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9tYXJrICptKQoreworCWlmIChtLT5tIHwgbS0+dikKKwkJTkxBX1BVVChza2IsIFhGUk1BX01BUkssIHNpemVvZihzdHJ1Y3QgeGZybV9tYXJrKSwgbSk7CisJcmV0dXJuIDA7CisKK25sYV9wdXRfZmFpbHVyZToKKwlyZXR1cm4gLTE7Cit9CisKICNlbmRpZgkvKiBfTkVUX1hGUk1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9wY21jaWEvZGV2aWNlX2lkLmggYi9pbmNsdWRlL3BjbWNpYS9kZXZpY2VfaWQuaAppbmRleCBjMzNlYTA4Li42M2U1YjhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3BjbWNpYS9kZXZpY2VfaWQuaAorKysgYi9pbmNsdWRlL3BjbWNpYS9kZXZpY2VfaWQuaApAQCAtMzQsNiArMzQsMTEgQEAKIAkucHJvZF9pZCA9IHsgTlVMTCwgKHYyKSwgTlVMTCwgTlVMTCB9LCAgXAogCS5wcm9kX2lkX2hhc2ggPSB7IDAsICh2aDIpLCAwLCAwIH0sIH0KIAorI2RlZmluZSBQQ01DSUFfREVWSUNFX1BST0RfSUQzKHYzLCB2aDMpIHsgXAorCS5tYXRjaF9mbGFncyA9IFBDTUNJQV9ERVZfSURfTUFUQ0hfUFJPRF9JRDMsIFwKKwkucHJvZF9pZCA9IHsgTlVMTCwgTlVMTCwgKHYzKSwgTlVMTCB9LCAgXAorCS5wcm9kX2lkX2hhc2ggPSB7IDAsIDAsICh2aDMpLCAwIH0sIH0KKwogI2RlZmluZSBQQ01DSUFfREVWSUNFX1BST0RfSUQxMih2MSwgdjIsIHZoMSwgdmgyKSB7IFwKIAkubWF0Y2hfZmxhZ3MgPSBQQ01DSUFfREVWX0lEX01BVENIX1BST0RfSUQxfCBcCiAJCQlQQ01DSUFfREVWX0lEX01BVENIX1BST0RfSUQyLCBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JkbWEvaWJfcGFjay5oIGIvaW5jbHVkZS9yZG1hL2liX3BhY2suaAppbmRleCBkN2ZjNDVjLi5jYmI1MGY0IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JkbWEvaWJfcGFjay5oCisrKyBiL2luY2x1ZGUvcmRtYS9pYl9wYWNrLmgKQEAgLTIzMiw2ICsyMzIsNyBAQAogCiB2b2lkIGliX3VkX2hlYWRlcl9pbml0KGludCAgICAgCQkgICBwYXlsb2FkX2J5dGVzLAogCQkgICAgICAgaW50ICAgIAkJICAgZ3JoX3ByZXNlbnQsCisJCSAgICAgICBpbnQJCSAgIGltbWVkaWF0ZV9wcmVzZW50LAogCQkgICAgICAgc3RydWN0IGliX3VkX2hlYWRlciAqaGVhZGVyKTsKIAogaW50IGliX3VkX2hlYWRlcl9wYWNrKHN0cnVjdCBpYl91ZF9oZWFkZXIgKmhlYWRlciwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9pYl92ZXJicy5oIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKaW5kZXggMDk1MDllZC4uYTU4NWUwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKKysrIGIvaW5jbHVkZS9yZG1hL2liX3ZlcmJzLmgKQEAgLTk4NCw5ICs5ODQsOSBAQAogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgIGV2ZW50X2hhbmRsZXJfbGlzdDsKIAlzcGlubG9ja190ICAgICAgICAgICAgICAgICAgICBldmVudF9oYW5kbGVyX2xvY2s7CiAKKwlzcGlubG9ja190ICAgICAgICAgICAgICAgICAgICBjbGllbnRfZGF0YV9sb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgICAgIGNvcmVfbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICAgICBjbGllbnRfZGF0YV9saXN0OwotCXNwaW5sb2NrX3QgICAgICAgICAgICAgICAgICAgIGNsaWVudF9kYXRhX2xvY2s7CiAKIAlzdHJ1Y3QgaWJfY2FjaGUgICAgICAgICAgICAgICBjYWNoZTsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICpwa2V5X3RibF9sZW47CkBAIC0xMTQ0LDggKzExNDQsOCBAQAogCQlJQl9ERVZfVU5SRUdJU1RFUkVECiAJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfc3RhdGU7CiAKLQl1NjQJCQkgICAgIHV2ZXJic19jbWRfbWFzazsKIAlpbnQJCQkgICAgIHV2ZXJic19hYmlfdmVyOworCXU2NAkJCSAgICAgdXZlcmJzX2NtZF9tYXNrOwogCiAJY2hhcgkJCSAgICAgbm9kZV9kZXNjWzY0XTsKIAlfX2JlNjQJCQkgICAgIG5vZGVfZ3VpZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmRtYS9yZG1hX2NtLmggYi9pbmNsdWRlL3JkbWEvcmRtYV9jbS5oCmluZGV4IGM2YjI5NjIuLjRmYWU5MDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmRtYS9yZG1hX2NtLmgKKysrIGIvaW5jbHVkZS9yZG1hL3JkbWFfY20uaApAQCAtNjcsNyArNjcsNiBAQAogCVJETUFfUFNfSVBPSUIgPSAweDAwMDIsCiAJUkRNQV9QU19UQ1AgICA9IDB4MDEwNiwKIAlSRE1BX1BTX1VEUCAgID0gMHgwMTExLAotCVJETUFfUFNfU0NUUCAgPSAweDAxODMKIH07CiAKIHN0cnVjdCByZG1hX2FkZHIgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zY3NpL3NnLmggYi9pbmNsdWRlL3Njc2kvc2cuaAppbmRleCA5MzRhZTM4Li5hOWYzYzZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2cuaAorKysgYi9pbmNsdWRlL3Njc2kvc2cuaApAQCAtNzAsNiArNzAsOSBAQAogIChmb3IgdGhlIGxrIDIuMiBzZXJpZXMpLgogKi8KIAorI2lmZGVmIF9fS0VSTkVMX18KK2V4dGVybiBpbnQgc2dfYmlnX2J1ZmY7IC8qIGZvciBzeXNjdGwgKi8KKyNlbmRpZgogCiAvKiBOZXcgaW50ZXJmYWNlIGludHJvZHVjZWQgaW4gdGhlIDMueCBTRyBkcml2ZXJzIGZvbGxvd3MgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC9hc291bmQuaCBiL2luY2x1ZGUvc291bmQvYXNvdW5kLmgKaW5kZXggMWY1N2JiOS4uMDk4NTk1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9zb3VuZC9hc291bmQuaAorKysgYi9pbmNsdWRlL3NvdW5kL2Fzb3VuZC5oCkBAIC01NDQsNyArNTQ0LDcgQEAKICAqICBUaW1lciBzZWN0aW9uIC0gL2Rldi9zbmQvdGltZXIKICAqLwogCi0jZGVmaW5lIFNORFJWX1RJTUVSX1ZFUlNJT04JCVNORFJWX1BST1RPQ09MX1ZFUlNJT04oMiwgMCwgNSkKKyNkZWZpbmUgU05EUlZfVElNRVJfVkVSU0lPTgkJU05EUlZfUFJPVE9DT0xfVkVSU0lPTigyLCAwLCA2KQogCiBlbnVtIHsKIAlTTkRSVl9USU1FUl9DTEFTU19OT05FID0gLTEsCmRpZmYgLS1naXQgYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgKaW5kZXggZDBiNmNkMy4uMmFhNmFhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oCisrKyBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaApAQCAtODc0LDYgKzg3NCwxMDcgQEAKIAkJICBfX2VudHJ5LT5tb2RlLCBfX2VudHJ5LT5pc19tZXRhZGF0YSwgX19lbnRyeS0+YmxvY2spCiApOwogCitUUkFDRV9FVkVOVChleHQ0X2RhX3VwZGF0ZV9yZXNlcnZlX3NwYWNlLAorCVRQX1BST1RPKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB1c2VkX2Jsb2NrcyksCisKKwlUUF9BUkdTKGlub2RlLCB1c2VkX2Jsb2NrcyksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlkZXZfdCwJZGV2CQkJKQorCQlfX2ZpZWxkKAlpbm9fdCwJaW5vCQkJKQorCQlfX2ZpZWxkKAl1bW9kZV90LCBtb2RlCQkJKQorCQlfX2ZpZWxkKAlfX3U2NCwJaV9ibG9ja3MJCSkKKwkJX19maWVsZCgJaW50LAl1c2VkX2Jsb2NrcwkJKQorCQlfX2ZpZWxkKAlpbnQsCXJlc2VydmVkX2RhdGFfYmxvY2tzCSkKKwkJX19maWVsZCgJaW50LAlyZXNlcnZlZF9tZXRhX2Jsb2NrcwkpCisJCV9fZmllbGQoCWludCwJYWxsb2NhdGVkX21ldGFfYmxvY2tzCSkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCV9fZW50cnktPmRldgk9IGlub2RlLT5pX3NiLT5zX2RldjsKKwkJX19lbnRyeS0+aW5vCT0gaW5vZGUtPmlfaW5vOworCQlfX2VudHJ5LT5tb2RlCT0gaW5vZGUtPmlfbW9kZTsKKwkJX19lbnRyeS0+aV9ibG9ja3MgPSBpbm9kZS0+aV9ibG9ja3M7CisJCV9fZW50cnktPnVzZWRfYmxvY2tzID0gdXNlZF9ibG9ja3M7CisJCV9fZW50cnktPnJlc2VydmVkX2RhdGFfYmxvY2tzID0gRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9kYXRhX2Jsb2NrczsKKwkJX19lbnRyeS0+cmVzZXJ2ZWRfbWV0YV9ibG9ja3MgPSBFWFQ0X0koaW5vZGUpLT5pX3Jlc2VydmVkX21ldGFfYmxvY2tzOworCQlfX2VudHJ5LT5hbGxvY2F0ZWRfbWV0YV9ibG9ja3MgPSBFWFQ0X0koaW5vZGUpLT5pX2FsbG9jYXRlZF9tZXRhX2Jsb2NrczsKKwkpLAorCisJVFBfcHJpbnRrKCJkZXYgJXMgaW5vICVsdSBtb2RlIDAlbyBpX2Jsb2NrcyAlbGx1IHVzZWRfYmxvY2tzICVkIHJlc2VydmVkX2RhdGFfYmxvY2tzICVkIHJlc2VydmVkX21ldGFfYmxvY2tzICVkIGFsbG9jYXRlZF9tZXRhX2Jsb2NrcyAlZCIsCisJCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLCAodW5zaWduZWQgbG9uZykgX19lbnRyeS0+aW5vLAorCQkgIF9fZW50cnktPm1vZGUsICAodW5zaWduZWQgbG9uZyBsb25nKSBfX2VudHJ5LT5pX2Jsb2NrcywKKwkJICBfX2VudHJ5LT51c2VkX2Jsb2NrcywgX19lbnRyeS0+cmVzZXJ2ZWRfZGF0YV9ibG9ja3MsCisJCSAgX19lbnRyeS0+cmVzZXJ2ZWRfbWV0YV9ibG9ja3MsIF9fZW50cnktPmFsbG9jYXRlZF9tZXRhX2Jsb2NrcykKKyk7CisKK1RSQUNFX0VWRU5UKGV4dDRfZGFfcmVzZXJ2ZV9zcGFjZSwKKwlUUF9QUk9UTyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWRfbmVlZGVkKSwKKworCVRQX0FSR1MoaW5vZGUsIG1kX25lZWRlZCksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAlkZXZfdCwJZGV2CQkJKQorCQlfX2ZpZWxkKAlpbm9fdCwJaW5vCQkJKQorCQlfX2ZpZWxkKAl1bW9kZV90LCBtb2RlCQkJKQorCQlfX2ZpZWxkKAlfX3U2NCwJaV9ibG9ja3MJCSkKKwkJX19maWVsZCgJaW50LAltZF9uZWVkZWQJCSkKKwkJX19maWVsZCgJaW50LAlyZXNlcnZlZF9kYXRhX2Jsb2NrcwkpCisJCV9fZmllbGQoCWludCwJcmVzZXJ2ZWRfbWV0YV9ibG9ja3MJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CT0gaW5vZGUtPmlfc2ItPnNfZGV2OworCQlfX2VudHJ5LT5pbm8JPSBpbm9kZS0+aV9pbm87CisJCV9fZW50cnktPm1vZGUJPSBpbm9kZS0+aV9tb2RlOworCQlfX2VudHJ5LT5pX2Jsb2NrcyA9IGlub2RlLT5pX2Jsb2NrczsKKwkJX19lbnRyeS0+bWRfbmVlZGVkID0gbWRfbmVlZGVkOworCQlfX2VudHJ5LT5yZXNlcnZlZF9kYXRhX2Jsb2NrcyA9IEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3M7CisJCV9fZW50cnktPnJlc2VydmVkX21ldGFfYmxvY2tzID0gRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrczsKKwkpLAorCisJVFBfcHJpbnRrKCJkZXYgJXMgaW5vICVsdSBtb2RlIDAlbyBpX2Jsb2NrcyAlbGx1IG1kX25lZWRlZCAlZCByZXNlcnZlZF9kYXRhX2Jsb2NrcyAlZCByZXNlcnZlZF9tZXRhX2Jsb2NrcyAlZCIsCisJCSAgamJkMl9kZXZfdG9fbmFtZShfX2VudHJ5LT5kZXYpLCAodW5zaWduZWQgbG9uZykgX19lbnRyeS0+aW5vLAorCQkgIF9fZW50cnktPm1vZGUsICh1bnNpZ25lZCBsb25nIGxvbmcpIF9fZW50cnktPmlfYmxvY2tzLAorCQkgIF9fZW50cnktPm1kX25lZWRlZCwgX19lbnRyeS0+cmVzZXJ2ZWRfZGF0YV9ibG9ja3MsCisJCSAgX19lbnRyeS0+cmVzZXJ2ZWRfbWV0YV9ibG9ja3MpCispOworCitUUkFDRV9FVkVOVChleHQ0X2RhX3JlbGVhc2Vfc3BhY2UsCisJVFBfUFJPVE8oc3RydWN0IGlub2RlICppbm9kZSwgaW50IGZyZWVkX2Jsb2NrcyksCisKKwlUUF9BUkdTKGlub2RlLCBmcmVlZF9ibG9ja3MpLAorCisJVFBfU1RSVUNUX19lbnRyeSgKKwkJX19maWVsZCgJZGV2X3QsCWRldgkJCSkKKwkJX19maWVsZCgJaW5vX3QsCWlubwkJCSkKKwkJX19maWVsZCgJdW1vZGVfdCwgbW9kZQkJCSkKKwkJX19maWVsZCgJX191NjQsCWlfYmxvY2tzCQkpCisJCV9fZmllbGQoCWludCwJZnJlZWRfYmxvY2tzCQkpCisJCV9fZmllbGQoCWludCwJcmVzZXJ2ZWRfZGF0YV9ibG9ja3MJKQorCQlfX2ZpZWxkKAlpbnQsCXJlc2VydmVkX21ldGFfYmxvY2tzCSkKKwkJX19maWVsZCgJaW50LAlhbGxvY2F0ZWRfbWV0YV9ibG9ja3MJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CT0gaW5vZGUtPmlfc2ItPnNfZGV2OworCQlfX2VudHJ5LT5pbm8JPSBpbm9kZS0+aV9pbm87CisJCV9fZW50cnktPm1vZGUJPSBpbm9kZS0+aV9tb2RlOworCQlfX2VudHJ5LT5pX2Jsb2NrcyA9IGlub2RlLT5pX2Jsb2NrczsKKwkJX19lbnRyeS0+ZnJlZWRfYmxvY2tzID0gZnJlZWRfYmxvY2tzOworCQlfX2VudHJ5LT5yZXNlcnZlZF9kYXRhX2Jsb2NrcyA9IEVYVDRfSShpbm9kZSktPmlfcmVzZXJ2ZWRfZGF0YV9ibG9ja3M7CisJCV9fZW50cnktPnJlc2VydmVkX21ldGFfYmxvY2tzID0gRVhUNF9JKGlub2RlKS0+aV9yZXNlcnZlZF9tZXRhX2Jsb2NrczsKKwkJX19lbnRyeS0+YWxsb2NhdGVkX21ldGFfYmxvY2tzID0gRVhUNF9JKGlub2RlKS0+aV9hbGxvY2F0ZWRfbWV0YV9ibG9ja3M7CisJKSwKKworCVRQX3ByaW50aygiZGV2ICVzIGlubyAlbHUgbW9kZSAwJW8gaV9ibG9ja3MgJWxsdSBmcmVlZF9ibG9ja3MgJWQgcmVzZXJ2ZWRfZGF0YV9ibG9ja3MgJWQgcmVzZXJ2ZWRfbWV0YV9ibG9ja3MgJWQgYWxsb2NhdGVkX21ldGFfYmxvY2tzICVkIiwKKwkJICBqYmQyX2Rldl90b19uYW1lKF9fZW50cnktPmRldiksICh1bnNpZ25lZCBsb25nKSBfX2VudHJ5LT5pbm8sCisJCSAgX19lbnRyeS0+bW9kZSwgKHVuc2lnbmVkIGxvbmcgbG9uZykgX19lbnRyeS0+aV9ibG9ja3MsCisJCSAgX19lbnRyeS0+ZnJlZWRfYmxvY2tzLCBfX2VudHJ5LT5yZXNlcnZlZF9kYXRhX2Jsb2NrcywKKwkJICBfX2VudHJ5LT5yZXNlcnZlZF9tZXRhX2Jsb2NrcywgX19lbnRyeS0+YWxsb2NhdGVkX21ldGFfYmxvY2tzKQorKTsKKworCiAjZW5kaWYgLyogX1RSQUNFX0VYVDRfSCAqLwogCiAvKiBUaGlzIHBhcnQgbXVzdCBiZSBvdXRzaWRlIHByb3RlY3Rpb24gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2piZDIuaCBiL2luY2x1ZGUvdHJhY2UvZXZlbnRzL2piZDIuaAppbmRleCA5NmIzNzBhLi5iZjE2NTQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9qYmQyLmgKKysrIGIvaW5jbHVkZS90cmFjZS9ldmVudHMvamJkMi5oCkBAIC0xOTksNiArMTk5LDM0IEBACiAJCSAgX19lbnRyeS0+Zm9yY2VkX3RvX2Nsb3NlLCBfX2VudHJ5LT53cml0dGVuLCBfX2VudHJ5LT5kcm9wcGVkKQogKTsKIAorVFJBQ0VfRVZFTlQoamJkMl9jbGVhbnVwX2pvdXJuYWxfdGFpbCwKKworCVRQX1BST1RPKGpvdXJuYWxfdCAqam91cm5hbCwgdGlkX3QgZmlyc3RfdGlkLAorCQkgdW5zaWduZWQgbG9uZyBibG9ja19uciwgdW5zaWduZWQgbG9uZyBmcmVlZCksCisKKwlUUF9BUkdTKGpvdXJuYWwsIGZpcnN0X3RpZCwgYmxvY2tfbnIsIGZyZWVkKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCWRldl90LAlkZXYJCQkpCisJCV9fZmllbGQoCXRpZF90LAl0YWlsX3NlcXVlbmNlCQkpCisJCV9fZmllbGQoCXRpZF90LAlmaXJzdF90aWQJCSkKKwkJX19maWVsZCh1bnNpZ25lZCBsb25nLAlibG9ja19ucgkJKQorCQlfX2ZpZWxkKHVuc2lnbmVkIGxvbmcsCWZyZWVkCQkJKQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJX19lbnRyeS0+ZGV2CQk9IGpvdXJuYWwtPmpfZnNfZGV2LT5iZF9kZXY7CisJCV9fZW50cnktPnRhaWxfc2VxdWVuY2UJPSBqb3VybmFsLT5qX3RhaWxfc2VxdWVuY2U7CisJCV9fZW50cnktPmZpcnN0X3RpZAk9IGZpcnN0X3RpZDsKKwkJX19lbnRyeS0+YmxvY2tfbnIJPSBibG9ja19ucjsKKwkJX19lbnRyeS0+ZnJlZWQJCT0gZnJlZWQ7CisJKSwKKworCVRQX3ByaW50aygiZGV2ICVzIGZyb20gJXUgdG8gJXUgb2Zmc2V0ICVsdSBmcmVlZCAlbHUiLAorCQkgIGpiZDJfZGV2X3RvX25hbWUoX19lbnRyeS0+ZGV2KSwgX19lbnRyeS0+dGFpbF9zZXF1ZW5jZSwKKwkJICBfX2VudHJ5LT5maXJzdF90aWQsIF9fZW50cnktPmJsb2NrX25yLCBfX2VudHJ5LT5mcmVlZCkKKyk7CisKICNlbmRpZiAvKiBfVFJBQ0VfSkJEMl9IICovCiAKIC8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS90cmFjZS9ldmVudHMva3ZtLmggYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm0uaAppbmRleCBkYmUxMDg0Li5iMTdkNDlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm0uaAorKysgYi9pbmNsdWRlL3RyYWNlL2V2ZW50cy9rdm0uaApAQCAtMTQ1LDYgKzE0NSw0NyBAQAogCQkgIF9fZW50cnktPmxlbiwgX19lbnRyeS0+Z3BhLCBfX2VudHJ5LT52YWwpCiApOwogCisjZGVmaW5lIGt2bV9mcHVfbG9hZF9zeW1ib2wJXAorCXswLCAidW5sb2FkIn0sCQlcCisJezEsICJsb2FkIn0KKworVFJBQ0VfRVZFTlQoa3ZtX2ZwdSwKKwlUUF9QUk9UTyhpbnQgbG9hZCksCisJVFBfQVJHUyhsb2FkKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCV9fZmllbGQoCXUzMiwJICAgICAgICBsb2FkCQkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5sb2FkCQk9IGxvYWQ7CisJKSwKKworCVRQX3ByaW50aygiJXMiLCBfX3ByaW50X3N5bWJvbGljKF9fZW50cnktPmxvYWQsIGt2bV9mcHVfbG9hZF9zeW1ib2wpKQorKTsKKworVFJBQ0VfRVZFTlQoa3ZtX2FnZV9wYWdlLAorCVRQX1BST1RPKHVsb25nIGh2YSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgaW50IHJlZiksCisJVFBfQVJHUyhodmEsIHNsb3QsIHJlZiksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlfX2ZpZWxkKAl1NjQsCWh2YQkJKQorCQlfX2ZpZWxkKAl1NjQsCWdmbgkJKQorCQlfX2ZpZWxkKAl1OCwJcmVmZXJlbmNlZAkpCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlfX2VudHJ5LT5odmEJCT0gaHZhOworCQlfX2VudHJ5LT5nZm4JCT0KKwkJICBzbG90LT5iYXNlX2dmbiArICgoaHZhIC0gc2xvdC0+dXNlcnNwYWNlX2FkZHIpID4+IFBBR0VfU0hJRlQpOworCQlfX2VudHJ5LT5yZWZlcmVuY2VkCT0gcmVmOworCSksCisKKwlUUF9wcmludGsoImh2YSAlbGx4IGdmbiAlbGx4ICVzIiwKKwkJICBfX2VudHJ5LT5odmEsIF9fZW50cnktPmdmbiwKKwkJICBfX2VudHJ5LT5yZWZlcmVuY2VkID8gIllPVU5HIiA6ICJPTEQiKQorKTsKKwogI2VuZGlmIC8qIF9UUkFDRV9LVk1fTUFJTl9IICovCiAKIC8qIFRoaXMgcGFydCBtdXN0IGJlIG91dHNpZGUgcHJvdGVjdGlvbiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS92aWRlby9icm9hZHNoZWV0ZmIuaCBiL2luY2x1ZGUvdmlkZW8vYnJvYWRzaGVldGZiLmgKaW5kZXggYTc1ODUzNC4uNTQ4ZDI4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS92aWRlby9icm9hZHNoZWV0ZmIuaAorKysgYi9pbmNsdWRlL3ZpZGVvL2Jyb2Fkc2hlZXRmYi5oCkBAIC0yOSwxMSArMjksMTkgQEAKICNkZWZpbmUgQlNfQ01EX1VQRF9GVUxMCQkweDMzCiAjZGVmaW5lIEJTX0NNRF9VUERfR0RSVl9DTFIJMHgzNwogCisvKiBCcm9hZHNoZWV0IHJlZ2lzdGVyIGludGVyZmFjZSBkZWZpbmVzICovCisjZGVmaW5lIEJTX1JFR19SRVYJCTB4MDAKKyNkZWZpbmUgQlNfUkVHX1BSQwkJMHgwMgorCiAvKiBCcm9hZHNoZWV0IHBpbiBpbnRlcmZhY2Ugc3BlY2lmaWMgZGVmaW5lcyAqLwogI2RlZmluZSBCU19DUwkweDAxCiAjZGVmaW5lIEJTX0RDIAkweDAyCiAjZGVmaW5lIEJTX1dSIAkweDAzCiAKKy8qIEJyb2Fkc2hlZXQgSU8gaW50ZXJmYWNlIHNwZWNpZmljIGRlZmluZXMgKi8KKyNkZWZpbmUgQlNfTU1JT19DTUQJMHgwMQorI2RlZmluZSBCU19NTUlPX0RBVEEJMHgwMgorCiAvKiBzdHJ1Y3QgdXNlZCBieSBicm9hZHNoZWV0LiBib2FyZCBzcGVjaWZpYyBzdHVmZiBjb21lcyBmcm9tICpib2FyZCAqLwogc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgewogCXN0cnVjdCBmYl9pbmZvICppbmZvOwpAQCAtNDEsNiArNDksOCBAQAogCXZvaWQgKCp3cml0ZV9yZWcpKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICosIHUxNiByZWcsIHUxNiB2YWwpOwogCXUxNiAoKnJlYWRfcmVnKShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqLCB1MTYgcmVnKTsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0cTsKKwlpbnQgcGFuZWxfaW5kZXg7CisJc3RydWN0IG11dGV4IGlvX2xvY2s7CiB9OwogCiAvKiBib2FyZCBzcGVjaWZpYyByb3V0aW5lcyAqLwpAQCAtNDgsMTIgKzU4LDE3IEBACiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJaW50ICgqaW5pdCkoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKik7CiAJaW50ICgqd2FpdF9mb3JfcmR5KShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqKTsKLQl2b2lkICgqc2V0X2N0bCkoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKiwgdW5zaWduZWQgY2hhciwgdTgpOwotCXZvaWQgKCpzZXRfaGRiKShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqLCB1MTYpOwotCXUxNiAoKmdldF9oZGIpKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICopOwogCXZvaWQgKCpjbGVhbnVwKShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqKTsKIAlpbnQgKCpnZXRfcGFuZWxfdHlwZSkodm9pZCk7CiAJaW50ICgqc2V0dXBfaXJxKShzdHJ1Y3QgZmJfaW5mbyAqKTsKLX07CiAKKwkvKiBGdW5jdGlvbnMgZm9yIGJvYXJkcyB0aGF0IHVzZSBHUElPICovCisJdm9pZCAoKnNldF9jdGwpKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICosIHVuc2lnbmVkIGNoYXIsIHU4KTsKKwl2b2lkICgqc2V0X2hkYikoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKiwgdTE2KTsKKwl1MTYgKCpnZXRfaGRiKShzdHJ1Y3QgYnJvYWRzaGVldGZiX3BhciAqKTsKKworCS8qIEZ1bmN0aW9ucyBmb3IgYm9hcmRzIHRoYXQgaGF2ZSBzcGVjaWFsaXplZCBNTUlPICovCisJdm9pZCAoKm1taW9fd3JpdGUpKHN0cnVjdCBicm9hZHNoZWV0ZmJfcGFyICosIGludCB0eXBlLCB1MTYpOworCXUxNiAoKm1taW9fcmVhZCkoc3RydWN0IGJyb2Fkc2hlZXRmYl9wYXIgKik7Cit9OwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggMDg5YTIzMC4uZWI3N2U4YyAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtNDYzLDYgKzQ2Myw3IEBACiAKIG1lbnVjb25maWcgQ0dST1VQUwogCWJvb2xlYW4gIkNvbnRyb2wgR3JvdXAgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIEVWRU5URkQKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBhZGRzIHN1cHBvcnQgZm9yIGdyb3VwaW5nIHNldHMgb2YgcHJvY2Vzc2VzIHRvZ2V0aGVyLCBmb3IKIAkgIHVzZSB3aXRoIHByb2Nlc3MgY29udHJvbCBzdWJzeXN0ZW1zIHN1Y2ggYXMgQ3B1c2V0cywgQ0ZTLCBtZW1vcnkKZGlmZiAtLWdpdCBhL2luaXQvZG9fbW91bnRzX2luaXRyZC5jIGIvaW5pdC9kb19tb3VudHNfaW5pdHJkLmMKaW5kZXggNjE0MjQxYi4uMmIxMDg1MyAxMDA2NDQKLS0tIGEvaW5pdC9kb19tb3VudHNfaW5pdHJkLmMKKysrIGIvaW5pdC9kb19tb3VudHNfaW5pdHJkLmMKQEAgLTMwLDExICszMCw3IEBACiAJZXh0ZXJuIGNoYXIgKiBlbnZwX2luaXRbXTsKIAogCXN5c19jbG9zZShvbGRfZmQpO3N5c19jbG9zZShyb290X2ZkKTsKLQlzeXNfY2xvc2UoMCk7c3lzX2Nsb3NlKDEpO3N5c19jbG9zZSgyKTsKIAlzeXNfc2V0c2lkKCk7Ci0JKHZvaWQpIHN5c19vcGVuKCIvZGV2L2NvbnNvbGUiLE9fUkRXUiwwKTsKLQkodm9pZCkgc3lzX2R1cCgwKTsKLQkodm9pZCkgc3lzX2R1cCgwKTsKIAlyZXR1cm4ga2VybmVsX2V4ZWN2ZShzaGVsbCwgYXJndiwgZW52cF9pbml0KTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5pdC9pbml0cmFtZnMuYyBiL2luaXQvaW5pdHJhbWZzLmMKaW5kZXggYjM3ZDM0Yi4uMzdkMzg1OSAxMDA2NDQKLS0tIGEvaW5pdC9pbml0cmFtZnMuYworKysgYi9pbml0L2luaXRyYW1mcy5jCkBAIC01MjUsNyArNTI1LDcgQEAKIAlpbnQgZmQ7CiAJdm9pZCAqYnVmOwogCXN0cnVjdCBsaW51eF9kaXJlbnQ2NCAqZGlycDsKLQlpbnQgY291bnQ7CisJaW50IG51bTsKIAogCWZkID0gc3lzX29wZW4oIi8iLCBPX1JET05MWSwgMCk7CiAJV0FSTl9PTihmZCA8IDApOwpAQCAtNTM5LDkgKzUzOSw5IEBACiAJfQogCiAJZGlycCA9IGJ1ZjsKLQljb3VudCA9IHN5c19nZXRkZW50czY0KGZkLCBkaXJwLCBCVUZfU0laRSk7Ci0Jd2hpbGUgKGNvdW50ID4gMCkgewotCQl3aGlsZSAoY291bnQgPiAwKSB7CisJbnVtID0gc3lzX2dldGRlbnRzNjQoZmQsIGRpcnAsIEJVRl9TSVpFKTsKKwl3aGlsZSAobnVtID4gMCkgeworCQl3aGlsZSAobnVtID4gMCkgewogCQkJc3RydWN0IHN0YXQgc3Q7CiAJCQlpbnQgcmV0OwogCkBAIC01NTQsMTIgKzU1NCwxMiBAQAogCQkJCQlzeXNfdW5saW5rKGRpcnAtPmRfbmFtZSk7CiAJCQl9CiAKLQkJCWNvdW50IC09IGRpcnAtPmRfcmVjbGVuOworCQkJbnVtIC09IGRpcnAtPmRfcmVjbGVuOwogCQkJZGlycCA9ICh2b2lkICopZGlycCArIGRpcnAtPmRfcmVjbGVuOwogCQl9CiAJCWRpcnAgPSBidWY7CiAJCW1lbXNldChidWYsIDAsIEJVRl9TSVpFKTsKLQkJY291bnQgPSBzeXNfZ2V0ZGVudHM2NChmZCwgZGlycCwgQlVGX1NJWkUpOworCQludW0gPSBzeXNfZ2V0ZGVudHM2NChmZCwgZGlycCwgQlVGX1NJWkUpOwogCX0KIAogCXN5c19jbG9zZShmZCk7CmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IGM3NWRjZDYuLmExYWI3OGMgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC0xNDksNiArMTQ5LDIwIEBACiAKIGVhcmx5X3BhcmFtKCJub3NtcCIsIG5vc21wKTsKIAorLyogdGhpcyBpcyBoYXJkIGxpbWl0ICovCitzdGF0aWMgaW50IF9faW5pdCBucmNwdXMoY2hhciAqc3RyKQoreworCWludCBucl9jcHVzOworCisJZ2V0X29wdGlvbigmc3RyLCAmbnJfY3B1cyk7CisJaWYgKG5yX2NwdXMgPiAwICYmIG5yX2NwdXMgPCBucl9jcHVfaWRzKQorCQlucl9jcHVfaWRzID0gbnJfY3B1czsKKworCXJldHVybiAwOworfQorCitlYXJseV9wYXJhbSgibnJfY3B1cyIsIG5yY3B1cyk7CisKIHN0YXRpYyBpbnQgX19pbml0IG1heGNwdXMoY2hhciAqc3RyKQogewogCWdldF9vcHRpb24oJnN0ciwgJnNldHVwX21heF9jcHVzKTsKQEAgLTE2MCw3ICsxNzQsNyBAQAogCiBlYXJseV9wYXJhbSgibWF4Y3B1cyIsIG1heGNwdXMpOwogI2Vsc2UKLWNvbnN0IHVuc2lnbmVkIGludCBzZXR1cF9tYXhfY3B1cyA9IE5SX0NQVVM7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHNldHVwX21heF9jcHVzID0gTlJfQ1BVUzsKICNlbmRpZgogCiAvKgpAQCAtNTg2LDYgKzYwMCw3IEBACiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJfQogCXJjdV9pbml0KCk7CisJcmFkaXhfdHJlZV9pbml0KCk7CiAJLyogaW5pdCBzb21lIGxpbmtzIGJlZm9yZSBpbml0X0lTQV9pcnFzKCkgKi8KIAllYXJseV9pcnFfaW5pdCgpOwogCWluaXRfSVJRKCk7CkBAIC02MDMsNyArNjE4LDcgQEAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CiAKIAkvKiBJbnRlcnJ1cHRzIGFyZSBlbmFibGVkIG5vdyBzbyBhbGwgR0ZQIGFsbG9jYXRpb25zIGFyZSBzYWZlLiAqLwotCXNldF9nZnBfYWxsb3dlZF9tYXNrKF9fR0ZQX0JJVFNfTUFTSyk7CisJZ2ZwX2FsbG93ZWRfbWFzayA9IF9fR0ZQX0JJVFNfTUFTSzsKIAogCWttZW1fY2FjaGVfaW5pdF9sYXRlKCk7CiAKQEAgLTY1OSw3ICs2NzQsNiBAQAogCXByb2NfY2FjaGVzX2luaXQoKTsKIAlidWZmZXJfaW5pdCgpOwogCWtleV9pbml0KCk7Ci0JcmFkaXhfdHJlZV9pbml0KCk7CiAJc2VjdXJpdHlfaW5pdCgpOwogCXZmc19jYWNoZXNfaW5pdCh0b3RhbHJhbV9wYWdlcyk7CiAJc2lnbmFsc19pbml0KCk7CkBAIC04MDgsMTEgKzgyMiw2IEBACiAJc3lzdGVtX3N0YXRlID0gU1lTVEVNX1JVTk5JTkc7CiAJbnVtYV9kZWZhdWx0X3BvbGljeSgpOwogCi0JaWYgKHN5c19vcGVuKChjb25zdCBjaGFyIF9fdXNlciAqKSAiL2Rldi9jb25zb2xlIiwgT19SRFdSLCAwKSA8IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldhcm5pbmc6IHVuYWJsZSB0byBvcGVuIGFuIGluaXRpYWwgY29uc29sZS5cbiIpOwotCi0JKHZvaWQpIHN5c19kdXAoMCk7Ci0JKHZvaWQpIHN5c19kdXAoMCk7CiAKIAljdXJyZW50LT5zaWduYWwtPmZsYWdzIHw9IFNJR05BTF9VTktJTExBQkxFOwogCkBAIC04MzgsNyArODQ3LDggQEAKIAlydW5faW5pdF9wcm9jZXNzKCIvYmluL2luaXQiKTsKIAlydW5faW5pdF9wcm9jZXNzKCIvYmluL3NoIik7CiAKLQlwYW5pYygiTm8gaW5pdCBmb3VuZC4gIFRyeSBwYXNzaW5nIGluaXQ9IG9wdGlvbiB0byBrZXJuZWwuIik7CisJcGFuaWMoIk5vIGluaXQgZm91bmQuICBUcnkgcGFzc2luZyBpbml0PSBvcHRpb24gdG8ga2VybmVsLiAiCisJICAgICAgIlNlZSBMaW51eCBEb2N1bWVudGF0aW9uL2luaXQudHh0IGZvciBndWlkYW5jZS4iKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQga2VybmVsX2luaXQodm9pZCAqIHVudXNlZCkKQEAgLTg3NSw2ICs4ODUsMTIgQEAKIAogCWRvX2Jhc2ljX3NldHVwKCk7CiAKKwkvKiBPcGVuIHRoZSAvZGV2L2NvbnNvbGUgb24gdGhlIHJvb3RmcywgdGhpcyBzaG91bGQgbmV2ZXIgZmFpbCAqLworCWlmIChzeXNfb3BlbigoY29uc3QgY2hhciBfX3VzZXIgKikgIi9kZXYvY29uc29sZSIsIE9fUkRXUiwgMCkgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nOiB1bmFibGUgdG8gb3BlbiBhbiBpbml0aWFsIGNvbnNvbGUuXG4iKTsKKworCSh2b2lkKSBzeXNfZHVwKDApOworCSh2b2lkKSBzeXNfZHVwKDApOwogCS8qCiAJICogY2hlY2sgaWYgdGhlcmUgaXMgYW4gZWFybHkgdXNlcnNwYWNlIGluaXQuICBJZiB5ZXMsIGxldCBpdCBkbyBhbGwKIAkgKiB0aGUgd29yawpkaWZmIC0tZ2l0IGEvaXBjL01ha2VmaWxlIGIvaXBjL01ha2VmaWxlCmluZGV4IDRlMTk1NWUuLjkwNzVlMTcgMTAwNjQ0Ci0tLSBhL2lwYy9NYWtlZmlsZQorKysgYi9pcGMvTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjCiAKIG9iai0kKENPTkZJR19TWVNWSVBDX0NPTVBBVCkgKz0gY29tcGF0Lm8KLW9iai0kKENPTkZJR19TWVNWSVBDKSArPSB1dGlsLm8gbXNndXRpbC5vIG1zZy5vIHNlbS5vIHNobS5vIGlwY25zX25vdGlmaWVyLm8KK29iai0kKENPTkZJR19TWVNWSVBDKSArPSB1dGlsLm8gbXNndXRpbC5vIG1zZy5vIHNlbS5vIHNobS5vIGlwY25zX25vdGlmaWVyLm8gc3lzY2FsbC5vCiBvYmotJChDT05GSUdfU1lTVklQQ19TWVNDVEwpICs9IGlwY19zeXNjdGwubwogb2JqX21xLSQoQ09ORklHX0NPTVBBVCkgKz0gY29tcGF0X21xLm8KIG9iai0kKENPTkZJR19QT1NJWF9NUVVFVUUpICs9IG1xdWV1ZS5vIG1zZ3V0aWwubyAkKG9ial9tcS15KQpkaWZmIC0tZ2l0IGEvaXBjL21xdWV1ZS5jIGIvaXBjL21xdWV1ZS5jCmluZGV4IGM3OWJkNTcuLmU0ZTNmMDQgMTAwNjQ0Ci0tLSBhL2lwYy9tcXVldWUuYworKysgYi9pcGMvbXF1ZXVlLmMKQEAgLTEzNCw3ICsxMzQsNiBAQAogCQkJaW5pdF93YWl0cXVldWVfaGVhZCgmaW5mby0+d2FpdF9xKTsKIAkJCUlOSVRfTElTVF9IRUFEKCZpbmZvLT5lX3dhaXRfcVswXS5saXN0KTsKIAkJCUlOSVRfTElTVF9IRUFEKCZpbmZvLT5lX3dhaXRfcVsxXS5saXN0KTsKLQkJCWluZm8tPm1lc3NhZ2VzID0gTlVMTDsKIAkJCWluZm8tPm5vdGlmeV9vd25lciA9IE5VTEw7CiAJCQlpbmZvLT5xc2l6ZSA9IDA7CiAJCQlpbmZvLT51c2VyID0gTlVMTDsJLyogc2V0IHdoZW4gYWxsIGlzIG9rICovCkBAIC0xNDYsMjYgKzE0NSwyNCBAQAogCQkJCWluZm8tPmF0dHIubXFfbXNnc2l6ZSA9IGF0dHItPm1xX21zZ3NpemU7CiAJCQl9CiAJCQltcV9tc2dfdGJsc3ogPSBpbmZvLT5hdHRyLm1xX21heG1zZyAqIHNpemVvZihzdHJ1Y3QgbXNnX21zZyAqKTsKKwkJCWluZm8tPm1lc3NhZ2VzID0ga21hbGxvYyhtcV9tc2dfdGJsc3osIEdGUF9LRVJORUwpOworCQkJaWYgKCFpbmZvLT5tZXNzYWdlcykKKwkJCQlnb3RvIG91dF9pbm9kZTsKKwogCQkJbXFfYnl0ZXMgPSAobXFfbXNnX3RibHN6ICsKIAkJCQkoaW5mby0+YXR0ci5tcV9tYXhtc2cgKiBpbmZvLT5hdHRyLm1xX21zZ3NpemUpKTsKIAogCQkJc3Bpbl9sb2NrKCZtcV9sb2NrKTsKIAkJCWlmICh1LT5tcV9ieXRlcyArIG1xX2J5dGVzIDwgdS0+bXFfYnl0ZXMgfHwKIAkJIAkgICAgdS0+bXFfYnl0ZXMgKyBtcV9ieXRlcyA+Ci0JCQkgICAgcC0+c2lnbmFsLT5ybGltW1JMSU1JVF9NU0dRVUVVRV0ucmxpbV9jdXIpIHsKKwkJCSAgICB0YXNrX3JsaW1pdChwLCBSTElNSVRfTVNHUVVFVUUpKSB7CiAJCQkJc3Bpbl91bmxvY2soJm1xX2xvY2spOworCQkJCWtmcmVlKGluZm8tPm1lc3NhZ2VzKTsKIAkJCQlnb3RvIG91dF9pbm9kZTsKIAkJCX0KIAkJCXUtPm1xX2J5dGVzICs9IG1xX2J5dGVzOwogCQkJc3Bpbl91bmxvY2soJm1xX2xvY2spOwogCi0JCQlpbmZvLT5tZXNzYWdlcyA9IGttYWxsb2MobXFfbXNnX3RibHN6LCBHRlBfS0VSTkVMKTsKLQkJCWlmICghaW5mby0+bWVzc2FnZXMpIHsKLQkJCQlzcGluX2xvY2soJm1xX2xvY2spOwotCQkJCXUtPm1xX2J5dGVzIC09IG1xX2J5dGVzOwotCQkJCXNwaW5fdW5sb2NrKCZtcV9sb2NrKTsKLQkJCQlnb3RvIG91dF9pbm9kZTsKLQkJCX0KIAkJCS8qIGFsbCBpcyBvayAqLwogCQkJaW5mby0+dXNlciA9IGdldF91aWQodSk7CiAJCX0gZWxzZSBpZiAoU19JU0RJUihtb2RlKSkgewpAQCAtMTg3LDcgKzE4NCw3IEBACiB7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgaXBjX25hbWVzcGFjZSAqbnMgPSBkYXRhOwotCWludCBlcnJvciA9IDA7CisJaW50IGVycm9yOwogCiAJc2ItPnNfYmxvY2tzaXplID0gUEFHRV9DQUNIRV9TSVpFOwogCXNiLT5zX2Jsb2Nrc2l6ZV9iaXRzID0gUEFHRV9DQUNIRV9TSElGVDsKQEAgLTIwNSw3ICsyMDIsOSBAQAogCWlmICghc2ItPnNfcm9vdCkgewogCQlpcHV0KGlub2RlKTsKIAkJZXJyb3IgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKIAl9CisJZXJyb3IgPSAwOwogCiBvdXQ6CiAJcmV0dXJuIGVycm9yOwpAQCAtMjY0LDggKzI2Myw5IEBACiAKIAljbGVhcl9pbm9kZShpbm9kZSk7CiAKLQltcV9ieXRlcyA9IChpbmZvLT5hdHRyLm1xX21heG1zZyAqIHNpemVvZihzdHJ1Y3QgbXNnX21zZyAqKSArCi0JCSAgIChpbmZvLT5hdHRyLm1xX21heG1zZyAqIGluZm8tPmF0dHIubXFfbXNnc2l6ZSkpOworCS8qIFRvdGFsIGFtb3VudCBvZiBieXRlcyBhY2NvdW50ZWQgZm9yIHRoZSBtcXVldWUgKi8KKwltcV9ieXRlcyA9IGluZm8tPmF0dHIubXFfbWF4bXNnICogKHNpemVvZihzdHJ1Y3QgbXNnX21zZyAqKQorCSAgICArIGluZm8tPmF0dHIubXFfbXNnc2l6ZSk7CiAJdXNlciA9IGluZm8tPnVzZXI7CiAJaWYgKHVzZXIpIHsKIAkJc3Bpbl9sb2NrKCZtcV9sb2NrKTsKQEAgLTYwNCw4ICs2MDQsOCBAQAogCS8qIGNoZWNrIGZvciBvdmVyZmxvdyAqLwogCWlmIChhdHRyLT5tcV9tc2dzaXplID4gVUxPTkdfTUFYL2F0dHItPm1xX21heG1zZykKIAkJcmV0dXJuIDA7Ci0JaWYgKCh1bnNpZ25lZCBsb25nKShhdHRyLT5tcV9tYXhtc2cgKiBhdHRyLT5tcV9tc2dzaXplKSArCi0JICAgIChhdHRyLT5tcV9tYXhtc2cgKiBzaXplb2YgKHN0cnVjdCBtc2dfbXNnICopKSA8CisJaWYgKCh1bnNpZ25lZCBsb25nKShhdHRyLT5tcV9tYXhtc2cgKiAoYXR0ci0+bXFfbXNnc2l6ZQorCSAgICArIHNpemVvZiAoc3RydWN0IG1zZ19tc2cgKikpKSA8CiAJICAgICh1bnNpZ25lZCBsb25nKShhdHRyLT5tcV9tYXhtc2cgKiBhdHRyLT5tcV9tc2dzaXplKSkKIAkJcmV0dXJuIDA7CiAJcmV0dXJuIDE7CkBAIC02MjMsOSArNjIzLDEwIEBACiAJaW50IHJldDsKIAogCWlmIChhdHRyKSB7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWlmICghbXFfYXR0cl9vayhpcGNfbnMsIGF0dHIpKQorCQlpZiAoIW1xX2F0dHJfb2soaXBjX25zLCBhdHRyKSkgeworCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OworCQl9CiAJCS8qIHN0b3JlIGZvciB1c2UgZHVyaW5nIGNyZWF0ZSAqLwogCQlkZW50cnktPmRfZnNkYXRhID0gYXR0cjsKIAl9CkBAIC02NTksMjQgKzY2MCwyOCBAQAogc3RhdGljIHN0cnVjdCBmaWxlICpkb19vcGVuKHN0cnVjdCBpcGNfbmFtZXNwYWNlICppcGNfbnMsCiAJCQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgb2ZsYWcpCiB7CisJaW50IHJldDsKIAljb25zdCBzdHJ1Y3QgY3JlZCAqY3JlZCA9IGN1cnJlbnRfY3JlZCgpOwogCiAJc3RhdGljIGNvbnN0IGludCBvZmxhZzJhY2NbT19BQ0NNT0RFXSA9IHsgTUFZX1JFQUQsIE1BWV9XUklURSwKIAkJCQkJCSAgTUFZX1JFQUQgfCBNQVlfV1JJVEUgfTsKIAogCWlmICgob2ZsYWcgJiBPX0FDQ01PREUpID09IChPX1JEV1IgfCBPX1dST05MWSkpIHsKLQkJZHB1dChkZW50cnkpOwotCQltbnRwdXQoaXBjX25zLT5tcV9tbnQpOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBlcnI7CiAJfQogCiAJaWYgKGlub2RlX3Blcm1pc3Npb24oZGVudHJ5LT5kX2lub2RlLCBvZmxhZzJhY2Nbb2ZsYWcgJiBPX0FDQ01PREVdKSkgewotCQlkcHV0KGRlbnRyeSk7Ci0JCW1udHB1dChpcGNfbnMtPm1xX21udCk7Ci0JCXJldHVybiBFUlJfUFRSKC1FQUNDRVMpOworCQlyZXQgPSAtRUFDQ0VTOworCQlnb3RvIGVycjsKIAl9CiAKIAlyZXR1cm4gZGVudHJ5X29wZW4oZGVudHJ5LCBpcGNfbnMtPm1xX21udCwgb2ZsYWcsIGNyZWQpOworCitlcnI6CisJZHB1dChkZW50cnkpOworCW1udHB1dChpcGNfbnMtPm1xX21udCk7CisJcmV0dXJuIEVSUl9QVFIocmV0KTsKIH0KIAogU1lTQ0FMTF9ERUZJTkU0KG1xX29wZW4sIGNvbnN0IGNoYXIgX191c2VyICosIHVfbmFtZSwgaW50LCBvZmxhZywgbW9kZV90LCBtb2RlLApAQCAtNzA1LDE2ICs3MTAsMTcgQEAKIAlkZW50cnkgPSBsb29rdXBfb25lX2xlbihuYW1lLCBpcGNfbnMtPm1xX21udC0+bW50X3Jvb3QsIHN0cmxlbihuYW1lKSk7CiAJaWYgKElTX0VSUihkZW50cnkpKSB7CiAJCWVycm9yID0gUFRSX0VSUihkZW50cnkpOwotCQlnb3RvIG91dF9lcnI7CisJCWdvdG8gb3V0X3B1dGZkOwogCX0KIAltbnRnZXQoaXBjX25zLT5tcV9tbnQpOwogCiAJaWYgKG9mbGFnICYgT19DUkVBVCkgewogCQlpZiAoZGVudHJ5LT5kX2lub2RlKSB7CS8qIGVudHJ5IGFscmVhZHkgZXhpc3RzICovCiAJCQlhdWRpdF9pbm9kZShuYW1lLCBkZW50cnkpOwotCQkJZXJyb3IgPSAtRUVYSVNUOwotCQkJaWYgKG9mbGFnICYgT19FWENMKQorCQkJaWYgKG9mbGFnICYgT19FWENMKSB7CisJCQkJZXJyb3IgPSAtRUVYSVNUOwogCQkJCWdvdG8gb3V0OworCQkJfQogCQkJZmlscCA9IGRvX29wZW4oaXBjX25zLCBkZW50cnksIG9mbGFnKTsKIAkJfSBlbHNlIHsKIAkJCWZpbHAgPSBkb19jcmVhdGUoaXBjX25zLCBpcGNfbnMtPm1xX21udC0+bW50X3Jvb3QsCkBAIC03MjIsOSArNzI4LDEwIEBACiAJCQkJCQl1X2F0dHIgPyAmYXR0ciA6IE5VTEwpOwogCQl9CiAJfSBlbHNlIHsKLQkJZXJyb3IgPSAtRU5PRU5UOwotCQlpZiAoIWRlbnRyeS0+ZF9pbm9kZSkKKwkJaWYgKCFkZW50cnktPmRfaW5vZGUpIHsKKwkJCWVycm9yID0gLUVOT0VOVDsKIAkJCWdvdG8gb3V0OworCQl9CiAJCWF1ZGl0X2lub2RlKG5hbWUsIGRlbnRyeSk7CiAJCWZpbHAgPSBkb19vcGVuKGlwY19ucywgZGVudHJ5LCBvZmxhZyk7CiAJfQpAQCAtNzQyLDcgKzc0OSw2IEBACiAJbW50cHV0KGlwY19ucy0+bXFfbW50KTsKIG91dF9wdXRmZDoKIAlwdXRfdW51c2VkX2ZkKGZkKTsKLW91dF9lcnI6CiAJZmQgPSBlcnJvcjsKIG91dF91cHNlbToKIAltdXRleF91bmxvY2soJmlwY19ucy0+bXFfbW50LT5tbnRfcm9vdC0+ZF9pbm9kZS0+aV9tdXRleCk7CkBAIC04NzIsMTkgKzg3OCwyNCBAQAogCWF1ZGl0X21xX3NlbmRyZWN2KG1xZGVzLCBtc2dfbGVuLCBtc2dfcHJpbywgcCk7CiAJdGltZW91dCA9IHByZXBhcmVfdGltZW91dChwKTsKIAotCXJldCA9IC1FQkFERjsKIAlmaWxwID0gZmdldChtcWRlcyk7Ci0JaWYgKHVubGlrZWx5KCFmaWxwKSkKKwlpZiAodW5saWtlbHkoIWZpbHApKSB7CisJCXJldCA9IC1FQkFERjsKIAkJZ290byBvdXQ7CisJfQogCiAJaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCWlmICh1bmxpa2VseShmaWxwLT5mX29wICE9ICZtcXVldWVfZmlsZV9vcGVyYXRpb25zKSkKKwlpZiAodW5saWtlbHkoZmlscC0+Zl9vcCAhPSAmbXF1ZXVlX2ZpbGVfb3BlcmF0aW9ucykpIHsKKwkJcmV0ID0gLUVCQURGOwogCQlnb3RvIG91dF9mcHV0OworCX0KIAlpbmZvID0gTVFVRVVFX0koaW5vZGUpOwogCWF1ZGl0X2lub2RlKE5VTEwsIGZpbHAtPmZfcGF0aC5kZW50cnkpOwogCi0JaWYgKHVubGlrZWx5KCEoZmlscC0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKSkKKwlpZiAodW5saWtlbHkoIShmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkpKSB7CisJCXJldCA9IC1FQkFERjsKIAkJZ290byBvdXRfZnB1dDsKKwl9CiAKIAlpZiAodW5saWtlbHkobXNnX2xlbiA+IGluZm8tPmF0dHIubXFfbXNnc2l6ZSkpIHsKIAkJcmV0ID0gLUVNU0dTSVpFOwpAQCAtOTYxLDE5ICs5NzIsMjQgQEAKIAlhdWRpdF9tcV9zZW5kcmVjdihtcWRlcywgbXNnX2xlbiwgMCwgcCk7CiAJdGltZW91dCA9IHByZXBhcmVfdGltZW91dChwKTsKIAotCXJldCA9IC1FQkFERjsKIAlmaWxwID0gZmdldChtcWRlcyk7Ci0JaWYgKHVubGlrZWx5KCFmaWxwKSkKKwlpZiAodW5saWtlbHkoIWZpbHApKSB7CisJCXJldCA9IC1FQkFERjsKIAkJZ290byBvdXQ7CisJfQogCiAJaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCWlmICh1bmxpa2VseShmaWxwLT5mX29wICE9ICZtcXVldWVfZmlsZV9vcGVyYXRpb25zKSkKKwlpZiAodW5saWtlbHkoZmlscC0+Zl9vcCAhPSAmbXF1ZXVlX2ZpbGVfb3BlcmF0aW9ucykpIHsKKwkJcmV0ID0gLUVCQURGOwogCQlnb3RvIG91dF9mcHV0OworCX0KIAlpbmZvID0gTVFVRVVFX0koaW5vZGUpOwogCWF1ZGl0X2lub2RlKE5VTEwsIGZpbHAtPmZfcGF0aC5kZW50cnkpOwogCi0JaWYgKHVubGlrZWx5KCEoZmlscC0+Zl9tb2RlICYgRk1PREVfUkVBRCkpKQorCWlmICh1bmxpa2VseSghKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKSkgeworCQlyZXQgPSAtRUJBREY7CiAJCWdvdG8gb3V0X2ZwdXQ7CisJfQogCiAJLyogY2hlY2tzIGlmIGJ1ZmZlciBpcyBiaWcgZW5vdWdoICovCiAJaWYgKHVubGlrZWx5KG1zZ19sZW4gPCBpbmZvLT5hdHRyLm1xX21zZ3NpemUpKSB7CkBAIC0xMDYzLDEzICsxMDc5LDE0IEBACiAKIAkJCS8qIGNyZWF0ZSB0aGUgbm90aWZ5IHNrYiAqLwogCQkJbmMgPSBhbGxvY19za2IoTk9USUZZX0NPT0tJRV9MRU4sIEdGUF9LRVJORUwpOwotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWlmICghbmMpCisJCQlpZiAoIW5jKSB7CisJCQkJcmV0ID0gLUVOT01FTTsKIAkJCQlnb3RvIG91dDsKLQkJCXJldCA9IC1FRkFVTFQ7CisJCQl9CiAJCQlpZiAoY29weV9mcm9tX3VzZXIobmMtPmRhdGEsCiAJCQkJCW5vdGlmaWNhdGlvbi5zaWdldl92YWx1ZS5zaXZhbF9wdHIsCiAJCQkJCU5PVElGWV9DT09LSUVfTEVOKSkgeworCQkJCXJldCA9IC1FRkFVTFQ7CiAJCQkJZ290byBvdXQ7CiAJCQl9CiAKQEAgLTEwNzgsOSArMTA5NSwxMCBAQAogCQkJLyogYW5kIGF0dGFjaCBpdCB0byB0aGUgc29ja2V0ICovCiByZXRyeToKIAkJCWZpbHAgPSBmZ2V0KG5vdGlmaWNhdGlvbi5zaWdldl9zaWdubyk7Ci0JCQlyZXQgPSAtRUJBREY7Ci0JCQlpZiAoIWZpbHApCisJCQlpZiAoIWZpbHApIHsKKwkJCQlyZXQgPSAtRUJBREY7CiAJCQkJZ290byBvdXQ7CisJCQl9CiAJCQlzb2NrID0gbmV0bGlua19nZXRzb2NrYnlmaWxwKGZpbHApOwogCQkJZnB1dChmaWxwKTsKIAkJCWlmIChJU19FUlIoc29jaykpIHsKQEAgLTEwOTIsNyArMTExMCw3IEBACiAJCQl0aW1lbyA9IE1BWF9TQ0hFRFVMRV9USU1FT1VUOwogCQkJcmV0ID0gbmV0bGlua19hdHRhY2hza2Ioc29jaywgbmMsICZ0aW1lbywgTlVMTCk7CiAJCQlpZiAocmV0ID09IDEpCi0JCSAgICAgICAJCWdvdG8gcmV0cnk7CisJCQkJZ290byByZXRyeTsKIAkJCWlmIChyZXQpIHsKIAkJCQlzb2NrID0gTlVMTDsKIAkJCQluYyA9IE5VTEw7CkBAIC0xMTAxLDE0ICsxMTE5LDE3IEBACiAJCX0KIAl9CiAKLQlyZXQgPSAtRUJBREY7CiAJZmlscCA9IGZnZXQobXFkZXMpOwotCWlmICghZmlscCkKKwlpZiAoIWZpbHApIHsKKwkJcmV0ID0gLUVCQURGOwogCQlnb3RvIG91dDsKKwl9CiAKIAlpbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0JaWYgKHVubGlrZWx5KGZpbHAtPmZfb3AgIT0gJm1xdWV1ZV9maWxlX29wZXJhdGlvbnMpKQorCWlmICh1bmxpa2VseShmaWxwLT5mX29wICE9ICZtcXVldWVfZmlsZV9vcGVyYXRpb25zKSkgeworCQlyZXQgPSAtRUJBREY7CiAJCWdvdG8gb3V0X2ZwdXQ7CisJfQogCWluZm8gPSBNUVVFVUVfSShpbm9kZSk7CiAKIAlyZXQgPSAwOwpAQCAtMTE3MSwxNCArMTE5MiwxNyBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmV0ID0gLUVCQURGOwogCWZpbHAgPSBmZ2V0KG1xZGVzKTsKLQlpZiAoIWZpbHApCisJaWYgKCFmaWxwKSB7CisJCXJldCA9IC1FQkFERjsKIAkJZ290byBvdXQ7CisJfQogCiAJaW5vZGUgPSBmaWxwLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlOwotCWlmICh1bmxpa2VseShmaWxwLT5mX29wICE9ICZtcXVldWVfZmlsZV9vcGVyYXRpb25zKSkKKwlpZiAodW5saWtlbHkoZmlscC0+Zl9vcCAhPSAmbXF1ZXVlX2ZpbGVfb3BlcmF0aW9ucykpIHsKKwkJcmV0ID0gLUVCQURGOwogCQlnb3RvIG91dF9mcHV0OworCX0KIAlpbmZvID0gTVFVRVVFX0koaW5vZGUpOwogCiAJc3Bpbl9sb2NrKCZpbmZvLT5sb2NrKTsKQEAgLTEyNzIsNyArMTI5Niw3IEBACiAJaWYgKG1xdWV1ZV9pbm9kZV9jYWNoZXAgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQkvKiBpZ25vcmUgZmFpbHVlcyAtIHRoZXkgYXJlIG5vdCBmYXRhbCAqLworCS8qIGlnbm9yZSBmYWlsdXJlcyAtIHRoZXkgYXJlIG5vdCBmYXRhbCAqLwogCW1xX3N5c2N0bF90YWJsZSA9IG1xX3JlZ2lzdGVyX3N5c2N0bF90YWJsZSgpOwogCiAJZXJyb3IgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZtcXVldWVfZnNfdHlwZSk7CmRpZmYgLS1naXQgYS9pcGMvc2htLmMgYi9pcGMvc2htLmMKaW5kZXggMjMyNTZiOC4uMWEzMTRjOCAxMDA2NDQKLS0tIGEvaXBjL3NobS5jCisrKyBiL2lwYy9zaG0uYwpAQCAtNzY0LDggKzc2NCw3IEBACiAJCQlpZiAoZXVpZCAhPSBzaHAtPnNobV9wZXJtLnVpZCAmJgogCQkJICAgIGV1aWQgIT0gc2hwLT5zaG1fcGVybS5jdWlkKQogCQkJCWdvdG8gb3V0X3VubG9jazsKLQkJCWlmIChjbWQgPT0gU0hNX0xPQ0sgJiYKLQkJCSAgICAhY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1cikKKwkJCWlmIChjbWQgPT0gU0hNX0xPQ0sgJiYgIXJsaW1pdChSTElNSVRfTUVNTE9DSykpCiAJCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAKZGlmZiAtLWdpdCBhL2lwYy9zeXNjYWxsLmMgYi9pcGMvc3lzY2FsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NWEzZGEKLS0tIC9kZXYvbnVsbAorKysgYi9pcGMvc3lzY2FsbC5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBzeXNfaXBjKCkgaXMgdGhlIG9sZCBkZS1tdWx0aXBsZXhlciBmb3IgdGhlIFN5c1YgSVBDIGNhbGxzLgorICoKKyAqIFRoaXMgaXMgcmVhbGx5IGhvcnJpYmx5IHVnbHksIGFuZCBuZXcgYXJjaGl0ZWN0dXJlcyBzaG91bGQganVzdCB3aXJlIHVwCisgKiB0aGUgaW5kaXZpZHVhbCBzeXNjYWxscyBpbnN0ZWFkLgorICovCisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+CisKKyNpZmRlZiBfX0FSQ0hfV0FOVF9TWVNfSVBDCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pcGMuaD4KKyNpbmNsdWRlIDxsaW51eC9zaG0uaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKworU1lTQ0FMTF9ERUZJTkU2KGlwYywgdW5zaWduZWQgaW50LCBjYWxsLCBpbnQsIGZpcnN0LCBpbnQsIHNlY29uZCwKKwkJdW5zaWduZWQgbG9uZywgdGhpcmQsIHZvaWQgX191c2VyICosIHB0ciwgbG9uZywgZmlmdGgpCit7CisJaW50IHZlcnNpb24sIHJldDsKKworCXZlcnNpb24gPSBjYWxsID4+IDE2OyAvKiBoYWNrIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisJY2FsbCAmPSAweGZmZmY7CisKKwlzd2l0Y2ggKGNhbGwpIHsKKwljYXNlIFNFTU9QOgorCQlyZXR1cm4gc3lzX3NlbXRpbWVkb3AoZmlyc3QsIChzdHJ1Y3Qgc2VtYnVmIF9fdXNlciAqKXB0ciwKKwkJCQkgICAgICBzZWNvbmQsIE5VTEwpOworCWNhc2UgU0VNVElNRURPUDoKKwkJcmV0dXJuIHN5c19zZW10aW1lZG9wKGZpcnN0LCAoc3RydWN0IHNlbWJ1ZiBfX3VzZXIgKilwdHIsCisJCQkJICAgICAgc2Vjb25kLAorCQkJCSAgICAgIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopZmlmdGgpOworCisJY2FzZSBTRU1HRVQ6CisJCXJldHVybiBzeXNfc2VtZ2V0KGZpcnN0LCBzZWNvbmQsIHRoaXJkKTsKKwljYXNlIFNFTUNUTDogeworCQl1bmlvbiBzZW11biBmb3VydGg7CisJCWlmICghcHRyKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChnZXRfdXNlcihmb3VydGguX19wYWQsICh2b2lkIF9fdXNlciAqIF9fdXNlciAqKSBwdHIpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiBzeXNfc2VtY3RsKGZpcnN0LCBzZWNvbmQsIHRoaXJkLCBmb3VydGgpOworCX0KKworCWNhc2UgTVNHU05EOgorCQlyZXR1cm4gc3lzX21zZ3NuZChmaXJzdCwgKHN0cnVjdCBtc2didWYgX191c2VyICopIHB0ciwKKwkJCQkgIHNlY29uZCwgdGhpcmQpOworCWNhc2UgTVNHUkNWOgorCQlzd2l0Y2ggKHZlcnNpb24pIHsKKwkJY2FzZSAwOiB7CisJCQlzdHJ1Y3QgaXBjX2tsdWRnZSB0bXA7CisJCQlpZiAoIXB0cikKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsCisJCQkJCSAgIChzdHJ1Y3QgaXBjX2tsdWRnZSBfX3VzZXIgKikgcHRyLAorCQkJCQkgICBzaXplb2YodG1wKSkpCisJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQlyZXR1cm4gc3lzX21zZ3JjdihmaXJzdCwgdG1wLm1zZ3AsIHNlY29uZCwKKwkJCQkJICAgdG1wLm1zZ3R5cCwgdGhpcmQpOworCQl9CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gc3lzX21zZ3JjdihmaXJzdCwKKwkJCQkJICAgKHN0cnVjdCBtc2didWYgX191c2VyICopIHB0ciwKKwkJCQkJICAgc2Vjb25kLCBmaWZ0aCwgdGhpcmQpOworCQl9CisJY2FzZSBNU0dHRVQ6CisJCXJldHVybiBzeXNfbXNnZ2V0KChrZXlfdCkgZmlyc3QsIHNlY29uZCk7CisJY2FzZSBNU0dDVEw6CisJCXJldHVybiBzeXNfbXNnY3RsKGZpcnN0LCBzZWNvbmQsIChzdHJ1Y3QgbXNxaWRfZHMgX191c2VyICopcHRyKTsKKworCWNhc2UgU0hNQVQ6CisJCXN3aXRjaCAodmVyc2lvbikgeworCQlkZWZhdWx0OiB7CisJCQl1bnNpZ25lZCBsb25nIHJhZGRyOworCQkJcmV0ID0gZG9fc2htYXQoZmlyc3QsIChjaGFyIF9fdXNlciAqKXB0ciwKKwkJCQkgICAgICAgc2Vjb25kLCAmcmFkZHIpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OworCQkJcmV0dXJuIHB1dF91c2VyKHJhZGRyLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKikgdGhpcmQpOworCQl9CisJCWNhc2UgMToKKwkJCS8qCisJCQkgKiBUaGlzIHdhcyB0aGUgZW50cnkgcG9pbnQgZm9yIGtlcm5lbC1vcmlnaW5hdGluZyBjYWxscworCQkJICogZnJvbSBpQkNTMiBpbiAyLjIgZGF5cy4KKwkJCSAqLworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwljYXNlIFNITURUOgorCQlyZXR1cm4gc3lzX3NobWR0KChjaGFyIF9fdXNlciAqKXB0cik7CisJY2FzZSBTSE1HRVQ6CisJCXJldHVybiBzeXNfc2htZ2V0KGZpcnN0LCBzZWNvbmQsIHRoaXJkKTsKKwljYXNlIFNITUNUTDoKKwkJcmV0dXJuIHN5c19zaG1jdGwoZmlyc3QsIHNlY29uZCwKKwkJCQkgICAoc3RydWN0IHNobWlkX2RzIF9fdXNlciAqKSBwdHIpOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PU1lTOworCX0KK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEva2VybmVsL01ha2VmaWxlIGIva2VybmVsL01ha2VmaWxlCmluZGV4IDZhZWJkZWIuLmE5ODdhYTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9NYWtlZmlsZQorKysgYi9rZXJuZWwvTWFrZWZpbGUKQEAgLTEwLDcgKzEwLDggQEAKIAkgICAga3RocmVhZC5vIHdhaXQubyBrZmlmby5vIHN5c19uaS5vIHBvc2l4LWNwdS10aW1lcnMubyBtdXRleC5vIFwKIAkgICAgaHJ0aW1lci5vIHJ3c2VtLm8gbnNwcm94eS5vIHNyY3UubyBzZW1hcGhvcmUubyBcCiAJICAgIG5vdGlmaWVyLm8ga3N5c2ZzLm8gcG1fcW9zX3BhcmFtcy5vIHNjaGVkX2Nsb2NrLm8gY3JlZC5vIFwKLQkgICAgYXN5bmMubworCSAgICBhc3luYy5vIHJhbmdlLm8KK29iai0kKENPTkZJR19IQVZFX0VBUkxZX1JFUykgKz0gZWFybHlfcmVzLm8KIG9iai15ICs9IGdyb3Vwcy5vCiAKIGlmZGVmIENPTkZJR19GVU5DVElPTl9UUkFDRVIKQEAgLTkwLDYgKzkxLDkgQEAKIG9iai0kKENPTkZJR19UQVNLU1RBVFMpICs9IHRhc2tzdGF0cy5vIHRzYWNjdC5vCiBvYmotJChDT05GSUdfVFJBQ0VQT0lOVFMpICs9IHRyYWNlcG9pbnQubwogb2JqLSQoQ09ORklHX0xBVEVOQ1lUT1ApICs9IGxhdGVuY3l0b3Aubworb2JqLSQoQ09ORklHX0JJTkZNVF9FTEYpICs9IGVsZmNvcmUubworb2JqLSQoQ09ORklHX0NPTVBBVF9CSU5GTVRfRUxGKSArPSBlbGZjb3JlLm8KK29iai0kKENPTkZJR19CSU5GTVRfRUxGX0ZEUElDKSArPSBlbGZjb3JlLm8KIG9iai0kKENPTkZJR19GVU5DVElPTl9UUkFDRVIpICs9IHRyYWNlLwogb2JqLSQoQ09ORklHX1RSQUNJTkcpICs9IHRyYWNlLwogb2JqLSQoQ09ORklHX1g4Nl9EUykgKz0gdHJhY2UvCmRpZmYgLS1naXQgYS9rZXJuZWwvYWNjdC5jIGIva2VybmVsL2FjY3QuYwppbmRleCBhNjYwNWNhLi4yNGY4YzgxIDEwMDY0NAotLS0gYS9rZXJuZWwvYWNjdC5jCisrKyBiL2tlcm5lbC9hY2N0LmMKQEAgLTU4OCwxNiArNTg4LDYgQEAKIH0KIAogLyoqCi0gKiBhY2N0X2luaXRfcGFjY3QgLSBpbml0aWFsaXplIGEgbmV3IHBhY2N0X3N0cnVjdAotICogQHBhY2N0OiBwZXItcHJvY2VzcyBhY2NvdW50aW5nIGluZm8gc3RydWN0IHRvIGluaXRpYWxpemUKLSAqLwotdm9pZCBhY2N0X2luaXRfcGFjY3Qoc3RydWN0IHBhY2N0X3N0cnVjdCAqcGFjY3QpCi17Ci0JbWVtc2V0KHBhY2N0LCAwLCBzaXplb2Yoc3RydWN0IHBhY2N0X3N0cnVjdCkpOwotCXBhY2N0LT5hY191dGltZSA9IHBhY2N0LT5hY19zdGltZSA9IGNwdXRpbWVfemVybzsKLX0KLQotLyoqCiAgKiBhY2N0X2NvbGxlY3QgLSBjb2xsZWN0IGFjY291bnRpbmcgaW5mb3JtYXRpb24gaW50byBwYWNjdF9zdHJ1Y3QKICAqIEBleGl0Y29kZTogdGFzayBleGl0IGNvZGUKICAqIEBncm91cF9kZWFkOiBub3QgMCwgaWYgdGhpcyB0aHJlYWQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSBwcm9jZXNzLgpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0LmMgYi9rZXJuZWwvYXVkaXQuYwppbmRleCA1ZmVlZDIzLi43OGY3Zjg2IDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXQuYworKysgYi9rZXJuZWwvYXVkaXQuYwpAQCAtMzk4LDcgKzM5OCw3IEBACiAJc2tiX2dldChza2IpOwogCWVyciA9IG5ldGxpbmtfdW5pY2FzdChhdWRpdF9zb2NrLCBza2IsIGF1ZGl0X25sa19waWQsIDApOwogCWlmIChlcnIgPCAwKSB7Ci0JCUJVR19PTihlcnIgIT0gLUVDT05OUkVGVVNFRCk7IC8qIFNob3Vkbid0IGhhcHBlbiAqLworCQlCVUdfT04oZXJyICE9IC1FQ09OTlJFRlVTRUQpOyAvKiBTaG91bGRuJ3QgaGFwcGVuICovCiAJCXByaW50ayhLRVJOX0VSUiAiYXVkaXQ6ICpOTyogZGFlbW9uIGF0IGF1ZGl0X3BpZD0lZFxuIiwgYXVkaXRfcGlkKTsKIAkJYXVkaXRfbG9nX2xvc3QoImF1ZGl0ZCBkaXNzYXBlYXJlZFxuIik7CiAJCWF1ZGl0X3BpZCA9IDA7CmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXRfdHJlZS5jIGIva2VybmVsL2F1ZGl0X3RyZWUuYwppbmRleCA0YjA1YmQ5Li4wMjhlODU2IDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRfdHJlZS5jCisrKyBiL2tlcm5lbC9hdWRpdF90cmVlLmMKQEAgLTU0OCw2ICs1NDgsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjb21wYXJlX3Jvb3Qoc3RydWN0IHZmc21vdW50ICptbnQsIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gbW50LT5tbnRfcm9vdC0+ZF9pbm9kZSA9PSBhcmc7Cit9CisKIHZvaWQgYXVkaXRfdHJpbV90cmVlcyh2b2lkKQogewogCXN0cnVjdCBsaXN0X2hlYWQgY3Vyc29yOwpAQCAtNTU5LDcgKzU2NCw2IEBACiAJCXN0cnVjdCBwYXRoIHBhdGg7CiAJCXN0cnVjdCB2ZnNtb3VudCAqcm9vdF9tbnQ7CiAJCXN0cnVjdCBub2RlICpub2RlOwotCQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJCWludCBlcnI7CiAKIAkJdHJlZSA9IGNvbnRhaW5lcl9vZihjdXJzb3IubmV4dCwgc3RydWN0IGF1ZGl0X3RyZWUsIGxpc3QpOwpAQCAtNTc3LDI0ICs1ODEsMTYgQEAKIAkJaWYgKCFyb290X21udCkKIAkJCWdvdG8gc2tpcF9pdDsKIAotCQlsaXN0X2FkZF90YWlsKCZsaXN0LCAmcm9vdF9tbnQtPm1udF9saXN0KTsKIAkJc3Bpbl9sb2NrKCZoYXNoX2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5vZGUsICZ0cmVlLT5jaHVua3MsIGxpc3QpIHsKLQkJCXN0cnVjdCBhdWRpdF9jaHVuayAqY2h1bmsgPSBmaW5kX2NodW5rKG5vZGUpOwotCQkJc3RydWN0IGlub2RlICppbm9kZSA9IGNodW5rLT53YXRjaC5pbm9kZTsKLQkJCXN0cnVjdCB2ZnNtb3VudCAqbW50OworCQkJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbmRfY2h1bmsobm9kZSktPndhdGNoLmlub2RlOwogCQkJbm9kZS0+aW5kZXggfD0gMVU8PDMxOwotCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShtbnQsICZsaXN0LCBtbnRfbGlzdCkgewotCQkJCWlmIChtbnQtPm1udF9yb290LT5kX2lub2RlID09IGlub2RlKSB7Ci0JCQkJCW5vZGUtPmluZGV4ICY9IH4oMVU8PDMxKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQorCQkJaWYgKGl0ZXJhdGVfbW91bnRzKGNvbXBhcmVfcm9vdCwgaW5vZGUsIHJvb3RfbW50KSkKKwkJCQlub2RlLT5pbmRleCAmPSB+KDFVPDwzMSk7CiAJCX0KIAkJc3Bpbl91bmxvY2soJmhhc2hfbG9jayk7CiAJCXRyaW1fbWFya2VkKHRyZWUpOwogCQlwdXRfdHJlZSh0cmVlKTsKLQkJbGlzdF9kZWxfaW5pdCgmbGlzdCk7CiAJCWRyb3BfY29sbGVjdGVkX21vdW50cyhyb290X21udCk7CiBza2lwX2l0OgogCQltdXRleF9sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOwpAQCAtNjAzLDIyICs1OTksNiBAQAogCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKIH0KIAotc3RhdGljIGludCBpc191bmRlcihzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAotCQkgICAgc3RydWN0IHBhdGggKnBhdGgpCi17Ci0JaWYgKG1udCAhPSBwYXRoLT5tbnQpIHsKLQkJZm9yICg7OykgewotCQkJaWYgKG1udC0+bW50X3BhcmVudCA9PSBtbnQpCi0JCQkJcmV0dXJuIDA7Ci0JCQlpZiAobW50LT5tbnRfcGFyZW50ID09IHBhdGgtPm1udCkKLQkJCQkJYnJlYWs7Ci0JCQltbnQgPSBtbnQtPm1udF9wYXJlbnQ7Ci0JCX0KLQkJZGVudHJ5ID0gbW50LT5tbnRfbW91bnRwb2ludDsKLQl9Ci0JcmV0dXJuIGlzX3N1YmRpcihkZW50cnksIHBhdGgtPmRlbnRyeSk7Ci19Ci0KIGludCBhdWRpdF9tYWtlX3RyZWUoc3RydWN0IGF1ZGl0X2tydWxlICpydWxlLCBjaGFyICpwYXRobmFtZSwgdTMyIG9wKQogewogCkBAIC02MzgsMTMgKzYxOCwxNyBAQAogCXB1dF90cmVlKHRyZWUpOwogfQogCitzdGF0aWMgaW50IHRhZ19tb3VudChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgdm9pZCAqYXJnKQoreworCXJldHVybiB0YWdfY2h1bmsobW50LT5tbnRfcm9vdC0+ZF9pbm9kZSwgYXJnKTsKK30KKwogLyogY2FsbGVkIHdpdGggYXVkaXRfZmlsdGVyX211dGV4ICovCiBpbnQgYXVkaXRfYWRkX3RyZWVfcnVsZShzdHJ1Y3QgYXVkaXRfa3J1bGUgKnJ1bGUpCiB7CiAJc3RydWN0IGF1ZGl0X3RyZWUgKnNlZWQgPSBydWxlLT50cmVlLCAqdHJlZTsKIAlzdHJ1Y3QgcGF0aCBwYXRoOwotCXN0cnVjdCB2ZnNtb3VudCAqbW50LCAqcDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IHZmc21vdW50ICptbnQ7CiAJaW50IGVycjsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkodHJlZSwgJnRyZWVfbGlzdCwgbGlzdCkgewpAQCAtNjcwLDE2ICs2NTQsOSBAQAogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIEVycjsKIAl9Ci0JbGlzdF9hZGRfdGFpbCgmbGlzdCwgJm1udC0+bW50X2xpc3QpOwogCiAJZ2V0X3RyZWUodHJlZSk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwLCAmbGlzdCwgbW50X2xpc3QpIHsKLQkJZXJyID0gdGFnX2NodW5rKHAtPm1udF9yb290LT5kX2lub2RlLCB0cmVlKTsKLQkJaWYgKGVycikKLQkJCWJyZWFrOwotCX0KLQotCWxpc3RfZGVsKCZsaXN0KTsKKwllcnIgPSBpdGVyYXRlX21vdW50cyh0YWdfbW91bnQsIHRyZWUsIG1udCk7CiAJZHJvcF9jb2xsZWN0ZWRfbW91bnRzKG1udCk7CiAKIAlpZiAoIWVycikgewpAQCAtNzE0LDMxICs2OTEsMjMgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGN1cnNvciwgYmFycmllcjsKIAlpbnQgZmFpbGVkID0gMDsKLQlzdHJ1Y3QgcGF0aCBwYXRoOworCXN0cnVjdCBwYXRoIHBhdGgxLCBwYXRoMjsKIAlzdHJ1Y3QgdmZzbW91bnQgKnRhZ2dlZDsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IHZmc21vdW50ICptbnQ7Ci0Jc3RydWN0IGRlbnRyeSAqZGVudHJ5OwogCWludCBlcnI7CiAKLQllcnIgPSBrZXJuX3BhdGgobmV3LCAwLCAmcGF0aCk7CisJZXJyID0ga2Vybl9wYXRoKG5ldywgMCwgJnBhdGgyKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwotCXRhZ2dlZCA9IGNvbGxlY3RfbW91bnRzKCZwYXRoKTsKLQlwYXRoX3B1dCgmcGF0aCk7CisJdGFnZ2VkID0gY29sbGVjdF9tb3VudHMoJnBhdGgyKTsKKwlwYXRoX3B1dCgmcGF0aDIpOwogCWlmICghdGFnZ2VkKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWVyciA9IGtlcm5fcGF0aChvbGQsIDAsICZwYXRoKTsKKwllcnIgPSBrZXJuX3BhdGgob2xkLCAwLCAmcGF0aDEpOwogCWlmIChlcnIpIHsKIAkJZHJvcF9jb2xsZWN0ZWRfbW91bnRzKHRhZ2dlZCk7CiAJCXJldHVybiBlcnI7CiAJfQotCW1udCA9IG1udGdldChwYXRoLm1udCk7Ci0JZGVudHJ5ID0gZGdldChwYXRoLmRlbnRyeSk7Ci0JcGF0aF9wdXQoJnBhdGgpOwotCi0JbGlzdF9hZGRfdGFpbCgmbGlzdCwgJnRhZ2dlZC0+bW50X2xpc3QpOwogCiAJbXV0ZXhfbG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKIAlsaXN0X2FkZCgmYmFycmllciwgJnRyZWVfbGlzdCk7CkBAIC03NDYsNyArNzE1LDcgQEAKIAogCXdoaWxlIChjdXJzb3IubmV4dCAhPSAmdHJlZV9saXN0KSB7CiAJCXN0cnVjdCBhdWRpdF90cmVlICp0cmVlOwotCQlzdHJ1Y3QgdmZzbW91bnQgKnA7CisJCWludCBnb29kX29uZSA9IDA7CiAKIAkJdHJlZSA9IGNvbnRhaW5lcl9vZihjdXJzb3IubmV4dCwgc3RydWN0IGF1ZGl0X3RyZWUsIGxpc3QpOwogCQlnZXRfdHJlZSh0cmVlKTsKQEAgLTc1NCwzMCArNzIzLDE5IEBACiAJCWxpc3RfYWRkKCZjdXJzb3IsICZ0cmVlLT5saXN0KTsKIAkJbXV0ZXhfdW5sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOwogCi0JCWVyciA9IGtlcm5fcGF0aCh0cmVlLT5wYXRobmFtZSwgMCwgJnBhdGgpOwotCQlpZiAoZXJyKSB7CisJCWVyciA9IGtlcm5fcGF0aCh0cmVlLT5wYXRobmFtZSwgMCwgJnBhdGgyKTsKKwkJaWYgKCFlcnIpIHsKKwkJCWdvb2Rfb25lID0gcGF0aF9pc191bmRlcigmcGF0aDEsICZwYXRoMik7CisJCQlwYXRoX3B1dCgmcGF0aDIpOworCQl9CisKKwkJaWYgKCFnb29kX29uZSkgewogCQkJcHV0X3RyZWUodHJlZSk7CiAJCQltdXRleF9sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOwogCQkJY29udGludWU7CiAJCX0KIAotCQlzcGluX2xvY2soJnZmc21vdW50X2xvY2spOwotCQlpZiAoIWlzX3VuZGVyKG1udCwgZGVudHJ5LCAmcGF0aCkpIHsKLQkJCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKLQkJCXBhdGhfcHV0KCZwYXRoKTsKLQkJCXB1dF90cmVlKHRyZWUpOwotCQkJbXV0ZXhfbG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXNwaW5fdW5sb2NrKCZ2ZnNtb3VudF9sb2NrKTsKLQkJcGF0aF9wdXQoJnBhdGgpOwotCi0JCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmxpc3QsIG1udF9saXN0KSB7Ci0JCQlmYWlsZWQgPSB0YWdfY2h1bmsocC0+bW50X3Jvb3QtPmRfaW5vZGUsIHRyZWUpOwotCQkJaWYgKGZhaWxlZCkKLQkJCQlicmVhazsKLQkJfQotCisJCWZhaWxlZCA9IGl0ZXJhdGVfbW91bnRzKHRhZ19tb3VudCwgdHJlZSwgdGFnZ2VkKTsKIAkJaWYgKGZhaWxlZCkgewogCQkJcHV0X3RyZWUodHJlZSk7CiAJCQltdXRleF9sb2NrKCZhdWRpdF9maWx0ZXJfbXV0ZXgpOwpAQCAtODE4LDEwICs3NzYsOCBAQAogCX0KIAlsaXN0X2RlbCgmYmFycmllcik7CiAJbGlzdF9kZWwoJmN1cnNvcik7Ci0JbGlzdF9kZWwoJmxpc3QpOwogCW11dGV4X3VubG9jaygmYXVkaXRfZmlsdGVyX211dGV4KTsKLQlkcHV0KGRlbnRyeSk7Ci0JbW50cHV0KG1udCk7CisJcGF0aF9wdXQoJnBhdGgxKTsKIAlkcm9wX2NvbGxlY3RlZF9tb3VudHModGFnZ2VkKTsKIAlyZXR1cm4gZmFpbGVkOwogfQpkaWZmIC0tZ2l0IGEva2VybmVsL2F1ZGl0c2MuYyBiL2tlcm5lbC9hdWRpdHNjLmMKaW5kZXggZmMwZjkyOC4uZjNhNDYxYyAxMDA2NDQKLS0tIGEva2VybmVsL2F1ZGl0c2MuYworKysgYi9rZXJuZWwvYXVkaXRzYy5jCkBAIC0xOTg4LDcgKzE5ODgsNiBAQAogCiAvKioKICAqIGF1ZGl0X2lub2RlX2NoaWxkIC0gY29sbGVjdCBpbm9kZSBpbmZvIGZvciBjcmVhdGVkL3JlbW92ZWQgb2JqZWN0cwotICogQGRuYW1lOiBpbm9kZSdzIGRlbnRyeSBuYW1lCiAgKiBAZGVudHJ5OiBkZW50cnkgYmVpbmcgYXVkaXRlZAogICogQHBhcmVudDogaW5vZGUgb2YgZGVudHJ5IHBhcmVudAogICoKQEAgLTIwMDAsMTMgKzE5OTksMTQgQEAKICAqIG11c3QgYmUgaG9va2VkIHByaW9yLCBpbiBvcmRlciB0byBjYXB0dXJlIHRoZSB0YXJnZXQgaW5vZGUgZHVyaW5nCiAgKiB1bnN1Y2Nlc3NmdWwgYXR0ZW1wdHMuCiAgKi8KLXZvaWQgX19hdWRpdF9pbm9kZV9jaGlsZChjb25zdCBjaGFyICpkbmFtZSwgY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAordm9pZCBfX2F1ZGl0X2lub2RlX2NoaWxkKGNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSBjb25zdCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCkKIHsKIAlpbnQgaWR4OwogCXN0cnVjdCBhdWRpdF9jb250ZXh0ICpjb250ZXh0ID0gY3VycmVudC0+YXVkaXRfY29udGV4dDsKIAljb25zdCBjaGFyICpmb3VuZF9wYXJlbnQgPSBOVUxMLCAqZm91bmRfY2hpbGQgPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJY29uc3QgY2hhciAqZG5hbWUgPSBkZW50cnktPmRfbmFtZS5uYW1lOwogCWludCBkaXJsZW4gPSAwOwogCiAJaWYgKCFjb250ZXh0LT5pbl9zeXNjYWxsKQpAQCAtMjAxNCw5ICsyMDE0LDYgQEAKIAogCWlmIChpbm9kZSkKIAkJaGFuZGxlX29uZShpbm9kZSk7Ci0JLyogZGV0ZXJtaW5lIG1hdGNoaW5nIHBhcmVudCAqLwotCWlmICghZG5hbWUpCi0JCWdvdG8gYWRkX25hbWVzOwogCiAJLyogcGFyZW50IGlzIG1vcmUgbGlrZWx5LCBsb29rIGZvciBpdCBmaXJzdCAqLwogCWZvciAoaWR4ID0gMDsgaWR4IDwgY29udGV4dC0+bmFtZV9jb3VudDsgaWR4KyspIHsKZGlmZiAtLWdpdCBhL2tlcm5lbC9jYXBhYmlsaXR5LmMgYi9rZXJuZWwvY2FwYWJpbGl0eS5jCmluZGV4IDdmODc2ZTYuLjllNDY5N2UgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jYXBhYmlsaXR5LmMKKysrIGIva2VybmVsL2NhcGFiaWxpdHkuYwpAQCAtMTM1LDcgKzEzNSw3IEBACiAJaWYgKHBpZCAmJiAocGlkICE9IHRhc2tfcGlkX3ZucihjdXJyZW50KSkpIHsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICp0YXJnZXQ7CiAKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJcmN1X3JlYWRfbG9jaygpOwogCiAJCXRhcmdldCA9IGZpbmRfdGFza19ieV92cGlkKHBpZCk7CiAJCWlmICghdGFyZ2V0KQpAQCAtMTQzLDcgKzE0Myw3IEBACiAJCWVsc2UKIAkJCXJldCA9IHNlY3VyaXR5X2NhcGdldCh0YXJnZXQsIHBFcCwgcElwLCBwUHApOwogCi0JCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfSBlbHNlCiAJCXJldCA9IHNlY3VyaXR5X2NhcGdldChjdXJyZW50LCBwRXAsIHBJcCwgcFBwKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL2Nncm91cC5jIGIva2VybmVsL2Nncm91cC5jCmluZGV4IDRmZDkwZTEuLmVmOTA5YTMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jZ3JvdXAuYworKysgYi9rZXJuZWwvY2dyb3VwLmMKQEAgLTQsNiArNCwxMCBAQAogICogIEJhc2VkIG9yaWdpbmFsbHkgb24gdGhlIGNwdXNldCBzeXN0ZW0sIGV4dHJhY3RlZCBieSBQYXVsIE1lbmFnZQogICogIENvcHlyaWdodCAoQykgMjAwNiBHb29nbGUsIEluYwogICoKKyAqICBOb3RpZmljYXRpb25zIHN1cHBvcnQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDkgTm9raWEgQ29ycG9yYXRpb24KKyAqICBBdXRob3I6IEtpcmlsbCBBLiBTaHV0ZW1vdgorICoKICAqICBDb3B5cmlnaHQgbm90aWNlcyBmcm9tIHRoZSBvcmlnaW5hbCBjcHVzZXQgY29kZToKICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogIENvcHlyaWdodCAoQykgMjAwMyBCVUxMIFNBLgpAQCAtNDQsNiArNDgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXlhY2N0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2dyb3Vwc3RhdHMuaD4KICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CkBAIC01MiwxNSArNTcsMjEgQEAKICNpbmNsdWRlIDxsaW51eC9waWRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaWRyLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPiAvKiBUT0RPOiByZXBsYWNlIHdpdGggbW9yZSBzb3BoaXN0aWNhdGVkIGFycmF5ICovCisjaW5jbHVkZSA8bGludXgvZXZlbnRmZC5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAogc3RhdGljIERFRklORV9NVVRFWChjZ3JvdXBfbXV0ZXgpOwogCi0vKiBHZW5lcmF0ZSBhbiBhcnJheSBvZiBjZ3JvdXAgc3Vic3lzdGVtIHBvaW50ZXJzICovCisvKgorICogR2VuZXJhdGUgYW4gYXJyYXkgb2YgY2dyb3VwIHN1YnN5c3RlbSBwb2ludGVycy4gQXQgYm9vdCB0aW1lLCB0aGlzIGlzCisgKiBwb3B1bGF0ZWQgdXAgdG8gQ0dST1VQX0JVSUxUSU5fU1VCU1lTX0NPVU5ULCBhbmQgbW9kdWxhciBzdWJzeXN0ZW1zIGFyZQorICogcmVnaXN0ZXJlZCBhZnRlciB0aGF0LiBUaGUgbXV0YWJsZSBzZWN0aW9uIG9mIHRoaXMgYXJyYXkgaXMgcHJvdGVjdGVkIGJ5CisgKiBjZ3JvdXBfbXV0ZXguCisgKi8KICNkZWZpbmUgU1VCU1lTKF94KSAmX3ggIyMgX3N1YnN5cywKLQotc3RhdGljIHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzdWJzeXNbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3Vic3lzW0NHUk9VUF9TVUJTWVNfQ09VTlRdID0gewogI2luY2x1ZGUgPGxpbnV4L2Nncm91cF9zdWJzeXMuaD4KIH07CiAKQEAgLTE0Nyw2ICsxNTgsMzUgQEAKIAl1bnNpZ25lZCBzaG9ydCBzdGFja1swXTsgLyogQXJyYXkgb2YgTGVuZ3RoIChkZXB0aCsxKSAqLwogfTsKIAorLyoKKyAqIGNncm91cF9ldmVudCByZXByZXNlbnRzIGV2ZW50cyB3aGljaCB1c2Vyc3BhY2Ugd2FudCB0byByZWNpZXZlLgorICovCitzdHJ1Y3QgY2dyb3VwX2V2ZW50IHsKKwkvKgorCSAqIENncm91cCB3aGljaCB0aGUgZXZlbnQgYmVsb25ncyB0by4KKwkgKi8KKwlzdHJ1Y3QgY2dyb3VwICpjZ3JwOworCS8qCisJICogQ29udHJvbCBmaWxlIHdoaWNoIHRoZSBldmVudCBhc3NvY2lhdGVkLgorCSAqLworCXN0cnVjdCBjZnR5cGUgKmNmdDsKKwkvKgorCSAqIGV2ZW50ZmQgdG8gc2lnbmFsIHVzZXJzcGFjZSBhYm91dCB0aGUgZXZlbnQuCisJICovCisJc3RydWN0IGV2ZW50ZmRfY3R4ICpldmVudGZkOworCS8qCisJICogRWFjaCBvZiB0aGVzZSBzdG9yZWQgaW4gYSBsaXN0IGJ5IHRoZSBjZ3JvdXAuCisJICovCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCS8qCisJICogQWxsIGZpZWxkcyBiZWxvdyBuZWVkZWQgdG8gdW5yZWdpc3RlciBldmVudCB3aGVuCisJICogdXNlcnNwYWNlIGNsb3NlcyBldmVudGZkLgorCSAqLworCXBvbGxfdGFibGUgcHQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QgKndxaDsKKwl3YWl0X3F1ZXVlX3Qgd2FpdDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVtb3ZlOworfTsKIAogLyogVGhlIGxpc3Qgb2YgaGllcmFyY2h5IHJvb3RzICovCiAKQEAgLTI1MCw3ICsyOTAsOCBAQAogc3RhdGljIHN0cnVjdCBjc3Nfc2V0IGluaXRfY3NzX3NldDsKIHN0YXRpYyBzdHJ1Y3QgY2dfY2dyb3VwX2xpbmsgaW5pdF9jc3Nfc2V0X2xpbms7CiAKLXN0YXRpYyBpbnQgY2dyb3VwX3N1YnN5c19pbml0X2lkcihzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MpOworc3RhdGljIGludCBjZ3JvdXBfaW5pdF9pZHIoc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAorCQkJICAgc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcyk7CiAKIC8qIGNzc19zZXRfbG9jayBwcm90ZWN0cyB0aGUgbGlzdCBvZiBjc3Nfc2V0IG9iamVjdHMsIGFuZCB0aGUKICAqIGNoYWluIG9mIHRhc2tzIG9mZiBlYWNoIGNzc19zZXQuICBOZXN0cyBvdXRzaWRlIHRhc2stPmFsbG9jX2xvY2sKQEAgLTQ0OCw4ICs0ODksMTEgQEAKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3QgY3NzX3NldCAqY2c7CiAKLQkvKiBCdWlsdCB0aGUgc2V0IG9mIHN1YnN5c3RlbSBzdGF0ZSBvYmplY3RzIHRoYXQgd2Ugd2FudCB0bwotCSAqIHNlZSBpbiB0aGUgbmV3IGNzc19zZXQgKi8KKwkvKgorCSAqIEJ1aWxkIHRoZSBzZXQgb2Ygc3Vic3lzdGVtIHN0YXRlIG9iamVjdHMgdGhhdCB3ZSB3YW50IHRvIHNlZSBpbiB0aGUKKwkgKiBuZXcgY3NzX3NldC4gd2hpbGUgc3Vic3lzdGVtcyBjYW4gY2hhbmdlIGdsb2JhbGx5LCB0aGUgZW50cmllcyBoZXJlCisJICogd29uJ3QgY2hhbmdlLCBzbyBubyBuZWVkIGZvciBsb2NraW5nLgorCSAqLwogCWZvciAoaSA9IDA7IGkgPCBDR1JPVVBfU1VCU1lTX0NPVU5UOyBpKyspIHsKIAkJaWYgKHJvb3QtPnN1YnN5c19iaXRzICYgKDFVTCA8PCBpKSkgewogCQkJLyogU3Vic3lzdGVtIGlzIGluIHRoaXMgaGllcmFyY2h5LiBTbyB3ZSB3YW50CkBAIC02OTYsNiArNzQwLDcgQEAKIHsKIAltdXRleF9sb2NrKCZjZ3JvdXBfbXV0ZXgpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoY2dyb3VwX2xvY2spOwogCiAvKioKICAqIGNncm91cF91bmxvY2sgLSByZWxlYXNlIGxvY2sgb24gY2dyb3VwIGNoYW5nZXMKQEAgLTcwNiw2ICs3NTEsNyBAQAogewogCW11dGV4X3VubG9jaygmY2dyb3VwX211dGV4KTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGNncm91cF91bmxvY2spOwogCiAvKgogICogQSBjb3VwbGUgb2YgZm9yd2FyZCBkZWNsYXJhdGlvbnMgcmVxdWlyZWQsIGR1ZSB0byBjeWNsaWMgcmVmZXJlbmNlIGxvb3A6CkBAIC03NTcsNiArODAzLDcgQEAKIAkJCWlmIChyZXQpCiAJCQkJYnJlYWs7CiAJCX0KKwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTg4NCw3ICs5MzEsMTEgQEAKIAljc3NfcHV0KGNzcyk7CiB9CiAKLQorLyoKKyAqIENhbGwgd2l0aCBjZ3JvdXBfbXV0ZXggaGVsZC4gRHJvcHMgcmVmZXJlbmNlIGNvdW50cyBvbiBtb2R1bGVzLCBpbmNsdWRpbmcKKyAqIGFueSBkdXBsaWNhdGUgb25lcyB0aGF0IHBhcnNlX2Nncm91cGZzX29wdGlvbnMgdG9vay4gSWYgdGhpcyBmdW5jdGlvbgorICogcmV0dXJucyBhbiBlcnJvciwgbm8gcmVmZXJlbmNlIGNvdW50cyBhcmUgdG91Y2hlZC4KKyAqLwogc3RhdGljIGludCByZWJpbmRfc3Vic3lzdGVtcyhzdHJ1Y3QgY2dyb3VwZnNfcm9vdCAqcm9vdCwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZmluYWxfYml0cykKIHsKQEAgLTg5Miw2ICs5NDMsOCBAQAogCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSAmcm9vdC0+dG9wX2Nncm91cDsKIAlpbnQgaTsKIAorCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZjZ3JvdXBfbXV0ZXgpKTsKKwogCXJlbW92ZWRfYml0cyA9IHJvb3QtPmFjdHVhbF9zdWJzeXNfYml0cyAmIH5maW5hbF9iaXRzOwogCWFkZGVkX2JpdHMgPSBmaW5hbF9iaXRzICYgfnJvb3QtPmFjdHVhbF9zdWJzeXNfYml0czsKIAkvKiBDaGVjayB0aGF0IGFueSBhZGRlZCBzdWJzeXN0ZW1zIGFyZSBjdXJyZW50bHkgZnJlZSAqLwpAQCAtOTAwLDYgKzk1MywxMiBAQAogCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MgPSBzdWJzeXNbaV07CiAJCWlmICghKGJpdCAmIGFkZGVkX2JpdHMpKQogCQkJY29udGludWU7CisJCS8qCisJCSAqIE5vYm9keSBzaG91bGQgdGVsbCB1cyB0byBkbyBhIHN1YnN5cyB0aGF0IGRvZXNuJ3QgZXhpc3Q6CisJCSAqIHBhcnNlX2Nncm91cGZzX29wdGlvbnMgc2hvdWxkIGNhdGNoIHRoYXQgY2FzZSBhbmQgcmVmY291bnRzCisJCSAqIGVuc3VyZSB0aGF0IHN1YnN5c3RlbXMgd29uJ3QgZGlzYXBwZWFyIG9uY2Ugc2VsZWN0ZWQuCisJCSAqLworCQlCVUdfT04oc3MgPT0gTlVMTCk7CiAJCWlmIChzcy0+cm9vdCAhPSAmcm9vdG5vZGUpIHsKIAkJCS8qIFN1YnN5c3RlbSBpc24ndCBmcmVlICovCiAJCQlyZXR1cm4gLUVCVVNZOwpAQCAtOTE5LDYgKzk3OCw3IEBACiAJCXVuc2lnbmVkIGxvbmcgYml0ID0gMVVMIDw8IGk7CiAJCWlmIChiaXQgJiBhZGRlZF9iaXRzKSB7CiAJCQkvKiBXZSdyZSBiaW5kaW5nIHRoaXMgc3Vic3lzdGVtIHRvIHRoaXMgaGllcmFyY2h5ICovCisJCQlCVUdfT04oc3MgPT0gTlVMTCk7CiAJCQlCVUdfT04oY2dycC0+c3Vic3lzW2ldKTsKIAkJCUJVR19PTighZHVtbXl0b3AtPnN1YnN5c1tpXSk7CiAJCQlCVUdfT04oZHVtbXl0b3AtPnN1YnN5c1tpXS0+Y2dyb3VwICE9IGR1bW15dG9wKTsKQEAgLTkzMCw4ICs5OTAsMTAgQEAKIAkJCWlmIChzcy0+YmluZCkKIAkJCQlzcy0+YmluZChzcywgY2dycCk7CiAJCQltdXRleF91bmxvY2soJnNzLT5oaWVyYXJjaHlfbXV0ZXgpOworCQkJLyogcmVmY291bnQgd2FzIGFscmVhZHkgdGFrZW4sIGFuZCB3ZSdyZSBrZWVwaW5nIGl0ICovCiAJCX0gZWxzZSBpZiAoYml0ICYgcmVtb3ZlZF9iaXRzKSB7CiAJCQkvKiBXZSdyZSByZW1vdmluZyB0aGlzIHN1YnN5c3RlbSAqLworCQkJQlVHX09OKHNzID09IE5VTEwpOwogCQkJQlVHX09OKGNncnAtPnN1YnN5c1tpXSAhPSBkdW1teXRvcC0+c3Vic3lzW2ldKTsKIAkJCUJVR19PTihjZ3JwLT5zdWJzeXNbaV0tPmNncm91cCAhPSBjZ3JwKTsKIAkJCW11dGV4X2xvY2soJnNzLT5oaWVyYXJjaHlfbXV0ZXgpOwpAQCAtOTQyLDkgKzEwMDQsMjAgQEAKIAkJCXN1YnN5c1tpXS0+cm9vdCA9ICZyb290bm9kZTsKIAkJCWxpc3RfbW92ZSgmc3MtPnNpYmxpbmcsICZyb290bm9kZS5zdWJzeXNfbGlzdCk7CiAJCQltdXRleF91bmxvY2soJnNzLT5oaWVyYXJjaHlfbXV0ZXgpOworCQkJLyogc3Vic3lzdGVtIGlzIG5vdyBmcmVlIC0gZHJvcCByZWZlcmVuY2Ugb24gbW9kdWxlICovCisJCQltb2R1bGVfcHV0KHNzLT5tb2R1bGUpOwogCQl9IGVsc2UgaWYgKGJpdCAmIGZpbmFsX2JpdHMpIHsKIAkJCS8qIFN1YnN5c3RlbSBzdGF0ZSBzaG91bGQgYWxyZWFkeSBleGlzdCAqLworCQkJQlVHX09OKHNzID09IE5VTEwpOwogCQkJQlVHX09OKCFjZ3JwLT5zdWJzeXNbaV0pOworCQkJLyoKKwkJCSAqIGEgcmVmY291bnQgd2FzIHRha2VuLCBidXQgd2UgYWxyZWFkeSBoYWQgb25lLCBzbworCQkJICogZHJvcCB0aGUgZXh0cmEgcmVmZXJlbmNlLgorCQkJICovCisJCQltb2R1bGVfcHV0KHNzLT5tb2R1bGUpOworI2lmZGVmIENPTkZJR19NT0RVTEVfVU5MT0FECisJCQlCVUdfT04oc3MtPm1vZHVsZSAmJiAhbW9kdWxlX3JlZmNvdW50KHNzLT5tb2R1bGUpKTsKKyNlbmRpZgogCQl9IGVsc2UgewogCQkJLyogU3Vic3lzdGVtIHN0YXRlIHNob3VsZG4ndCBleGlzdCAqLwogCQkJQlVHX09OKGNncnAtPnN1YnN5c1tpXSk7CkBAIC05ODYsMTMgKzEwNTksMjAgQEAKIAogfTsKIAotLyogQ29udmVydCBhIGhpZXJhcmNoeSBzcGVjaWZpZXIgaW50byBhIGJpdG1hc2sgb2Ygc3Vic3lzdGVtcyBhbmQKLSAqIGZsYWdzLiAqLwotc3RhdGljIGludCBwYXJzZV9jZ3JvdXBmc19vcHRpb25zKGNoYXIgKmRhdGEsCi0JCQkJICAgICBzdHJ1Y3QgY2dyb3VwX3NiX29wdHMgKm9wdHMpCisvKgorICogQ29udmVydCBhIGhpZXJhcmNoeSBzcGVjaWZpZXIgaW50byBhIGJpdG1hc2sgb2Ygc3Vic3lzdGVtcyBhbmQgZmxhZ3MuIENhbGwKKyAqIHdpdGggY2dyb3VwX211dGV4IGhlbGQgdG8gcHJvdGVjdCB0aGUgc3Vic3lzW10gYXJyYXkuIFRoaXMgZnVuY3Rpb24gdGFrZXMKKyAqIHJlZmNvdW50cyBvbiBzdWJzeXN0ZW1zIHRvIGJlIHVzZWQsIHVubGVzcyBpdCByZXR1cm5zIGVycm9yLCBpbiB3aGljaCBjYXNlCisgKiBubyByZWZjb3VudHMgYXJlIHRha2VuLgorICovCitzdGF0aWMgaW50IHBhcnNlX2Nncm91cGZzX29wdGlvbnMoY2hhciAqZGF0YSwgc3RydWN0IGNncm91cF9zYl9vcHRzICpvcHRzKQogewogCWNoYXIgKnRva2VuLCAqbyA9IGRhdGEgPzogImFsbCI7CiAJdW5zaWduZWQgbG9uZyBtYXNrID0gKHVuc2lnbmVkIGxvbmcpLTE7CisJaW50IGk7CisJYm9vbCBtb2R1bGVfcGluX2ZhaWxlZCA9IGZhbHNlOworCisJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmNncm91cF9tdXRleCkpOwogCiAjaWZkZWYgQ09ORklHX0NQVVNFVFMKIAltYXNrID0gfigxVUwgPDwgY3B1c2V0X3N1YnN5c19pZCk7CkBAIC0xMDA1LDEwICsxMDg1LDExIEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKCFzdHJjbXAodG9rZW4sICJhbGwiKSkgewogCQkJLyogQWRkIGFsbCBub24tZGlzYWJsZWQgc3Vic3lzdGVtcyAqLwotCQkJaW50IGk7CiAJCQlvcHRzLT5zdWJzeXNfYml0cyA9IDA7CiAJCQlmb3IgKGkgPSAwOyBpIDwgQ0dST1VQX1NVQlNZU19DT1VOVDsgaSsrKSB7CiAJCQkJc3RydWN0IGNncm91cF9zdWJzeXMgKnNzID0gc3Vic3lzW2ldOworCQkJCWlmIChzcyA9PSBOVUxMKQorCQkJCQljb250aW51ZTsKIAkJCQlpZiAoIXNzLT5kaXNhYmxlZCkKIAkJCQkJb3B0cy0+c3Vic3lzX2JpdHMgfD0gMXVsIDw8IGk7CiAJCQl9CkBAIC0xMDI2LDcgKzExMDcsNiBAQAogCQkJaWYgKCFvcHRzLT5yZWxlYXNlX2FnZW50KQogCQkJCXJldHVybiAtRU5PTUVNOwogCQl9IGVsc2UgaWYgKCFzdHJuY21wKHRva2VuLCAibmFtZT0iLCA1KSkgewotCQkJaW50IGk7CiAJCQljb25zdCBjaGFyICpuYW1lID0gdG9rZW4gKyA1OwogCQkJLyogQ2FuJ3Qgc3BlY2lmeSBhbiBlbXB0eSBuYW1lICovCiAJCQlpZiAoIXN0cmxlbihuYW1lKSkKQEAgLTEwNTAsOSArMTEzMCwxMCBAQAogCQkJCXJldHVybiAtRU5PTUVNOwogCQl9IGVsc2UgewogCQkJc3RydWN0IGNncm91cF9zdWJzeXMgKnNzOwotCQkJaW50IGk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgQ0dST1VQX1NVQlNZU19DT1VOVDsgaSsrKSB7CiAJCQkJc3MgPSBzdWJzeXNbaV07CisJCQkJaWYgKHNzID09IE5VTEwpCisJCQkJCWNvbnRpbnVlOwogCQkJCWlmICghc3RyY21wKHRva2VuLCBzcy0+bmFtZSkpIHsKIAkJCQkJaWYgKCFzcy0+ZGlzYWJsZWQpCiAJCQkJCQlzZXRfYml0KGksICZvcHRzLT5zdWJzeXNfYml0cyk7CkBAIC0xMDg3LDkgKzExNjgsNTQgQEAKIAlpZiAoIW9wdHMtPnN1YnN5c19iaXRzICYmICFvcHRzLT5uYW1lKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCS8qCisJICogR3JhYiByZWZlcmVuY2VzIG9uIGFsbCB0aGUgbW9kdWxlcyB3ZSdsbCBuZWVkLCBzbyB0aGUgc3Vic3lzdGVtcworCSAqIGRvbid0IGRhbmNlIGFyb3VuZCBiZWZvcmUgcmViaW5kX3N1YnN5c3RlbXMgYXR0YWNoZXMgdGhlbS4gVGhpcyBtYXkKKwkgKiB0YWtlIGR1cGxpY2F0ZSByZWZlcmVuY2UgY291bnRzIG9uIGEgc3Vic3lzdGVtIHRoYXQncyBhbHJlYWR5IHVzZWQsCisJICogYnV0IHJlYmluZF9zdWJzeXN0ZW1zIGhhbmRsZXMgdGhpcyBjYXNlLgorCSAqLworCWZvciAoaSA9IENHUk9VUF9CVUlMVElOX1NVQlNZU19DT1VOVDsgaSA8IENHUk9VUF9TVUJTWVNfQ09VTlQ7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIGJpdCA9IDFVTCA8PCBpOworCisJCWlmICghKGJpdCAmIG9wdHMtPnN1YnN5c19iaXRzKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoIXRyeV9tb2R1bGVfZ2V0KHN1YnN5c1tpXS0+bW9kdWxlKSkgeworCQkJbW9kdWxlX3Bpbl9mYWlsZWQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKG1vZHVsZV9waW5fZmFpbGVkKSB7CisJCS8qCisJCSAqIG9vcHMsIG9uZSBvZiB0aGUgbW9kdWxlcyB3YXMgZ29pbmcgYXdheS4gdGhpcyBtZWFucyB0aGF0IHdlCisJCSAqIHJhY2VkIHdpdGggYSBtb2R1bGVfZGVsZXRlIGNhbGwsIGFuZCB0byB0aGUgdXNlciB0aGlzIGlzCisJCSAqIGVzc2VudGlhbGx5IGEgInN1YnN5c3RlbSBkb2Vzbid0IGV4aXN0IiBjYXNlLgorCQkgKi8KKwkJZm9yIChpLS07IGkgPj0gQ0dST1VQX0JVSUxUSU5fU1VCU1lTX0NPVU5UOyBpLS0pIHsKKwkJCS8qIGRyb3AgcmVmY291bnRzIG9ubHkgb24gdGhlIG9uZXMgd2UgdG9vayAqLworCQkJdW5zaWduZWQgbG9uZyBiaXQgPSAxVUwgPDwgaTsKKworCQkJaWYgKCEoYml0ICYgb3B0cy0+c3Vic3lzX2JpdHMpKQorCQkJCWNvbnRpbnVlOworCQkJbW9kdWxlX3B1dChzdWJzeXNbaV0tPm1vZHVsZSk7CisJCX0KKwkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIGRyb3BfcGFyc2VkX21vZHVsZV9yZWZjb3VudHModW5zaWduZWQgbG9uZyBzdWJzeXNfYml0cykKK3sKKwlpbnQgaTsKKwlmb3IgKGkgPSBDR1JPVVBfQlVJTFRJTl9TVUJTWVNfQ09VTlQ7IGkgPCBDR1JPVVBfU1VCU1lTX0NPVU5UOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBiaXQgPSAxVUwgPDwgaTsKKworCQlpZiAoIShiaXQgJiBzdWJzeXNfYml0cykpCisJCQljb250aW51ZTsKKwkJbW9kdWxlX3B1dChzdWJzeXNbaV0tPm1vZHVsZSk7CisJfQorfQorCiBzdGF0aWMgaW50IGNncm91cF9yZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKmRhdGEpCiB7CiAJaW50IHJldCA9IDA7CkBAIC0xMTA2LDIxICsxMjMyLDE5IEBACiAJaWYgKHJldCkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JLyogRG9uJ3QgYWxsb3cgZmxhZ3MgdG8gY2hhbmdlIGF0IHJlbW91bnQgKi8KLQlpZiAob3B0cy5mbGFncyAhPSByb290LT5mbGFncykgeworCS8qIERvbid0IGFsbG93IGZsYWdzIG9yIG5hbWUgdG8gY2hhbmdlIGF0IHJlbW91bnQgKi8KKwlpZiAob3B0cy5mbGFncyAhPSByb290LT5mbGFncyB8fAorCSAgICAob3B0cy5uYW1lICYmIHN0cmNtcChvcHRzLm5hbWUsIHJvb3QtPm5hbWUpKSkgewogCQlyZXQgPSAtRUlOVkFMOwotCQlnb3RvIG91dF91bmxvY2s7Ci0JfQotCi0JLyogRG9uJ3QgYWxsb3cgbmFtZSB0byBjaGFuZ2UgYXQgcmVtb3VudCAqLwotCWlmIChvcHRzLm5hbWUgJiYgc3RyY21wKG9wdHMubmFtZSwgcm9vdC0+bmFtZSkpIHsKLQkJcmV0ID0gLUVJTlZBTDsKKwkJZHJvcF9wYXJzZWRfbW9kdWxlX3JlZmNvdW50cyhvcHRzLnN1YnN5c19iaXRzKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIAogCXJldCA9IHJlYmluZF9zdWJzeXN0ZW1zKHJvb3QsIG9wdHMuc3Vic3lzX2JpdHMpOwotCWlmIChyZXQpCisJaWYgKHJldCkgeworCQlkcm9wX3BhcnNlZF9tb2R1bGVfcmVmY291bnRzKG9wdHMuc3Vic3lzX2JpdHMpOwogCQlnb3RvIG91dF91bmxvY2s7CisJfQogCiAJLyogKHJlKXBvcHVsYXRlIHN1YnN5c3RlbSBmaWxlcyAqLwogCWNncm91cF9wb3B1bGF0ZV9kaXIoY2dycCk7CkBAIC0xMTUxLDYgKzEyNzUsOCBAQAogCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5yZWxlYXNlX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZjZ3JwLT5waWRsaXN0cyk7CiAJbXV0ZXhfaW5pdCgmY2dycC0+cGlkbGlzdF9tdXRleCk7CisJSU5JVF9MSVNUX0hFQUQoJmNncnAtPmV2ZW50X2xpc3QpOworCXNwaW5fbG9ja19pbml0KCZjZ3JwLT5ldmVudF9saXN0X2xvY2spOwogfQogCiBzdGF0aWMgdm9pZCBpbml0X2Nncm91cF9yb290KHN0cnVjdCBjZ3JvdXBmc19yb290ICpyb290KQpAQCAtMTMwNiw3ICsxNDMyLDkgQEAKIAlzdHJ1Y3QgY2dyb3VwZnNfcm9vdCAqbmV3X3Jvb3Q7CiAKIAkvKiBGaXJzdCBmaW5kIHRoZSBkZXNpcmVkIHNldCBvZiBzdWJzeXN0ZW1zICovCisJbXV0ZXhfbG9jaygmY2dyb3VwX211dGV4KTsKIAlyZXQgPSBwYXJzZV9jZ3JvdXBmc19vcHRpb25zKGRhdGEsICZvcHRzKTsKKwltdXRleF91bmxvY2soJmNncm91cF9tdXRleCk7CiAJaWYgKHJldCkKIAkJZ290byBvdXRfZXJyOwogCkBAIC0xMzE3LDcgKzE0NDUsNyBAQAogCW5ld19yb290ID0gY2dyb3VwX3Jvb3RfZnJvbV9vcHRzKCZvcHRzKTsKIAlpZiAoSVNfRVJSKG5ld19yb290KSkgewogCQlyZXQgPSBQVFJfRVJSKG5ld19yb290KTsKLQkJZ290byBvdXRfZXJyOworCQlnb3RvIGRyb3BfbW9kdWxlczsKIAl9CiAJb3B0cy5uZXdfcm9vdCA9IG5ld19yb290OwogCkBAIC0xMzI2LDcgKzE0NTQsNyBAQAogCWlmIChJU19FUlIoc2IpKSB7CiAJCXJldCA9IFBUUl9FUlIoc2IpOwogCQljZ3JvdXBfZHJvcF9yb290KG9wdHMubmV3X3Jvb3QpOwotCQlnb3RvIG91dF9lcnI7CisJCWdvdG8gZHJvcF9tb2R1bGVzOwogCX0KIAogCXJvb3QgPSBzYi0+c19mc19pbmZvOwpAQCAtMTM4Miw2ICsxNTEwLDExIEBACiAJCQlmcmVlX2NnX2xpbmtzKCZ0bXBfY2dfbGlua3MpOwogCQkJZ290byBkcm9wX25ld19zdXBlcjsKIAkJfQorCQkvKgorCQkgKiBUaGVyZSBtdXN0IGJlIG5vIGZhaWx1cmUgY2FzZSBhZnRlciBoZXJlLCBzaW5jZSByZWJpbmRpbmcKKwkJICogdGFrZXMgY2FyZSBvZiBzdWJzeXN0ZW1zJyByZWZjb3VudHMsIHdoaWNoIGFyZSBleHBsaWNpdGx5CisJCSAqIGRyb3BwZWQgaW4gdGhlIGZhaWx1cmUgZXhpdCBwYXRoLgorCQkgKi8KIAogCQkvKiBFQlVTWSBzaG91bGQgYmUgdGhlIG9ubHkgZXJyb3IgaGVyZSAqLwogCQlCVUdfT04ocmV0KTsKQEAgLTE0MjAsNiArMTU1Myw4IEBACiAJCSAqIGFueSkgaXMgbm90IG5lZWRlZAogCQkgKi8KIAkJY2dyb3VwX2Ryb3Bfcm9vdChvcHRzLm5ld19yb290KTsKKwkJLyogbm8gc3Vic3lzIHJlYmluZGluZywgc28gcmVmY291bnRzIGRvbid0IGNoYW5nZSAqLworCQlkcm9wX3BhcnNlZF9tb2R1bGVfcmVmY291bnRzKG9wdHMuc3Vic3lzX2JpdHMpOwogCX0KIAogCXNpbXBsZV9zZXRfbW50KG1udCwgc2IpOwpAQCAtMTQyOSw2ICsxNTY0LDggQEAKIAogIGRyb3BfbmV3X3N1cGVyOgogCWRlYWN0aXZhdGVfbG9ja2VkX3N1cGVyKHNiKTsKKyBkcm9wX21vZHVsZXM6CisJZHJvcF9wYXJzZWRfbW9kdWxlX3JlZmNvdW50cyhvcHRzLnN1YnN5c19iaXRzKTsKICBvdXRfZXJyOgogCWtmcmVlKG9wdHMucmVsZWFzZV9hZ2VudCk7CiAJa2ZyZWUob3B0cy5uYW1lKTsKQEAgLTE1NDIsNiArMTY3OSw3IEBACiAJbWVtbW92ZShidWYsIHN0YXJ0LCBidWYgKyBidWZsZW4gLSBzdGFydCk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjZ3JvdXBfcGF0aCk7CiAKIC8qKgogICogY2dyb3VwX2F0dGFjaF90YXNrIC0gYXR0YWNoIHRhc2sgJ3RzaycgdG8gY2dyb3VwICdjZ3JwJwpAQCAtMTU1NCw3ICsxNjkyLDcgQEAKIGludCBjZ3JvdXBfYXR0YWNoX3Rhc2soc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJaW50IHJldHZhbCA9IDA7Ci0Jc3RydWN0IGNncm91cF9zdWJzeXMgKnNzOworCXN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywgKmZhaWxlZF9zcyA9IE5VTEw7CiAJc3RydWN0IGNncm91cCAqb2xkY2dycDsKIAlzdHJ1Y3QgY3NzX3NldCAqY2c7CiAJc3RydWN0IGNzc19zZXQgKm5ld2NnOwpAQCAtMTU2OCw4ICsxNzA2LDE2IEBACiAJZm9yX2VhY2hfc3Vic3lzKHJvb3QsIHNzKSB7CiAJCWlmIChzcy0+Y2FuX2F0dGFjaCkgewogCQkJcmV0dmFsID0gc3MtPmNhbl9hdHRhY2goc3MsIGNncnAsIHRzaywgZmFsc2UpOwotCQkJaWYgKHJldHZhbCkKLQkJCQlyZXR1cm4gcmV0dmFsOworCQkJaWYgKHJldHZhbCkgeworCQkJCS8qCisJCQkJICogUmVtZW1iZXIgb24gd2hpY2ggc3Vic3lzdGVtIHRoZSBjYW5fYXR0YWNoKCkKKwkJCQkgKiBmYWlsZWQsIHNvIHRoYXQgd2Ugb25seSBjYWxsIGNhbmNlbF9hdHRhY2goKQorCQkJCSAqIGFnYWluc3QgdGhlIHN1YnN5c3RlbXMgd2hvc2UgY2FuX2F0dGFjaCgpCisJCQkJICogc3VjY2VlZGVkLiAoU2VlIGJlbG93KQorCQkJCSAqLworCQkJCWZhaWxlZF9zcyA9IHNzOworCQkJCWdvdG8gb3V0OworCQkJfQogCQl9CiAJfQogCkBAIC0xNTgzLDE0ICsxNzI5LDE3IEBACiAJICovCiAJbmV3Y2cgPSBmaW5kX2Nzc19zZXQoY2csIGNncnApOwogCXB1dF9jc3Nfc2V0KGNnKTsKLQlpZiAoIW5ld2NnKQotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoIW5ld2NnKSB7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KIAogCXRhc2tfbG9jayh0c2spOwogCWlmICh0c2stPmZsYWdzICYgUEZfRVhJVElORykgewogCQl0YXNrX3VubG9jayh0c2spOwogCQlwdXRfY3NzX3NldChuZXdjZyk7Ci0JCXJldHVybiAtRVNSQ0g7CisJCXJldHZhbCA9IC1FU1JDSDsKKwkJZ290byBvdXQ7CiAJfQogCXJjdV9hc3NpZ25fcG9pbnRlcih0c2stPmNncm91cHMsIG5ld2NnKTsKIAl0YXNrX3VubG9jayh0c2spOwpAQCAtMTYxNiw3ICsxNzY1LDIyIEBACiAJICogaXMgbm8gbG9uZ2VyIGVtcHR5LgogCSAqLwogCWNncm91cF93YWtldXBfcm1kaXJfd2FpdGVyKGNncnApOwotCXJldHVybiAwOworb3V0OgorCWlmIChyZXR2YWwpIHsKKwkJZm9yX2VhY2hfc3Vic3lzKHJvb3QsIHNzKSB7CisJCQlpZiAoc3MgPT0gZmFpbGVkX3NzKQorCQkJCS8qCisJCQkJICogVGhpcyBzdWJzeXN0ZW0gd2FzIHRoZSBvbmUgdGhhdCBmYWlsZWQgdGhlCisJCQkJICogY2FuX2F0dGFjaCgpIGNoZWNrIGVhcmxpZXIsIHNvIHdlIGRvbid0IG5lZWQKKwkJCQkgKiB0byBjYWxsIGNhbmNlbF9hdHRhY2goKSBhZ2FpbnN0IGl0IG9yIGFueQorCQkJCSAqIHJlbWFpbmluZyBzdWJzeXN0ZW1zLgorCQkJCSAqLworCQkJCWJyZWFrOworCQkJaWYgKHNzLT5jYW5jZWxfYXR0YWNoKQorCQkJCXNzLT5jYW5jZWxfYXR0YWNoKHNzLCBjZ3JwLCB0c2ssIGZhbHNlKTsKKwkJfQorCX0KKwlyZXR1cm4gcmV0dmFsOwogfQogCiAvKgpAQCAtMTY4Miw2ICsxODQ2LDcgQEAKIAl9CiAJcmV0dXJuIHRydWU7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjZ3JvdXBfbG9ja19saXZlX2dyb3VwKTsKIAogc3RhdGljIGludCBjZ3JvdXBfcmVsZWFzZV9hZ2VudF93cml0ZShzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgY2Z0eXBlICpjZnQsCiAJCQkJICAgICAgY29uc3QgY2hhciAqYnVmZmVyKQpAQCAtMTk1MCw2ICsyMTE1LDE2IEBACiAJLnJlbmFtZSA9IGNncm91cF9yZW5hbWUsCiB9OwogCisvKgorICogQ2hlY2sgaWYgYSBmaWxlIGlzIGEgY29udHJvbCBmaWxlCisgKi8KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGNmdHlwZSAqX19maWxlX2NmdChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZiAoZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfZm9wICE9ICZjZ3JvdXBfZmlsZV9vcGVyYXRpb25zKQorCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKKwlyZXR1cm4gX19kX2NmdChmaWxlLT5mX2RlbnRyeSk7Cit9CisKIHN0YXRpYyBpbnQgY2dyb3VwX2NyZWF0ZV9maWxlKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgbW9kZV90IG1vZGUsCiAJCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKQEAgLTIwNjksNiArMjI0NCw3IEBACiAJCWVycm9yID0gUFRSX0VSUihkZW50cnkpOwogCXJldHVybiBlcnJvcjsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGNncm91cF9hZGRfZmlsZSk7CiAKIGludCBjZ3JvdXBfYWRkX2ZpbGVzKHN0cnVjdCBjZ3JvdXAgKmNncnAsCiAJCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3Vic3lzLApAQCAtMjA4Myw2ICsyMjU5LDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjZ3JvdXBfYWRkX2ZpbGVzKTsKIAogLyoqCiAgKiBjZ3JvdXBfdGFza19jb3VudCAtIGNvdW50IHRoZSBudW1iZXIgb2YgdGFza3MgaW4gYSBjZ3JvdXAuCkBAIC0yNDY4LDcgKzI2NDUsOCBAQAogewogCXN0cnVjdCBjZ3JvdXBfcGlkbGlzdCAqbDsKIAkvKiBkb24ndCBuZWVkIHRhc2tfbnNwcm94eSgpIGlmIHdlJ3JlIGxvb2tpbmcgYXQgb3Vyc2VsZiAqLwotCXN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyA9IGdldF9waWRfbnMoY3VycmVudC0+bnNwcm94eS0+cGlkX25zKTsKKwlzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMgPSBjdXJyZW50LT5uc3Byb3h5LT5waWRfbnM7CisKIAkvKgogCSAqIFdlIGNhbid0IGRyb3AgdGhlIHBpZGxpc3RfbXV0ZXggYmVmb3JlIHRha2luZyB0aGUgbC0+bXV0ZXggaW4gY2FzZQogCSAqIHRoZSBsYXN0IHJlZi1ob2xkZXIgaXMgdHJ5aW5nIHRvIHJlbW92ZSBsIGZyb20gdGhlIGxpc3QgYXQgdGhlIHNhbWUKQEAgLTI0NzgsOCArMjY1Niw2IEBACiAJbXV0ZXhfbG9jaygmY2dycC0+cGlkbGlzdF9tdXRleCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShsLCAmY2dycC0+cGlkbGlzdHMsIGxpbmtzKSB7CiAJCWlmIChsLT5rZXkudHlwZSA9PSB0eXBlICYmIGwtPmtleS5ucyA9PSBucykgewotCQkJLyogZm91bmQgYSBtYXRjaGluZyBsaXN0IC0gZHJvcCB0aGUgZXh0cmEgcmVmY291bnQgKi8KLQkJCXB1dF9waWRfbnMobnMpOwogCQkJLyogbWFrZSBzdXJlIGwgZG9lc24ndCB2YW5pc2ggb3V0IGZyb20gdW5kZXIgdXMgKi8KIAkJCWRvd25fd3JpdGUoJmwtPm11dGV4KTsKIAkJCW11dGV4X3VubG9jaygmY2dycC0+cGlkbGlzdF9tdXRleCk7CkBAIC0yNDkwLDEzICsyNjY2LDEyIEBACiAJbCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjZ3JvdXBfcGlkbGlzdCksIEdGUF9LRVJORUwpOwogCWlmICghbCkgewogCQltdXRleF91bmxvY2soJmNncnAtPnBpZGxpc3RfbXV0ZXgpOwotCQlwdXRfcGlkX25zKG5zKTsKIAkJcmV0dXJuIGw7CiAJfQogCWluaXRfcndzZW0oJmwtPm11dGV4KTsKIAlkb3duX3dyaXRlKCZsLT5tdXRleCk7CiAJbC0+a2V5LnR5cGUgPSB0eXBlOwotCWwtPmtleS5ucyA9IG5zOworCWwtPmtleS5ucyA9IGdldF9waWRfbnMobnMpOwogCWwtPnVzZV9jb3VudCA9IDA7IC8qIGRvbid0IGluY3JlbWVudCBoZXJlICovCiAJbC0+bGlzdCA9IE5VTEw7CiAJbC0+b3duZXIgPSBjZ3JwOwpAQCAtMjgwNCw2ICsyOTc5LDE3NCBAQAogfQogCiAvKgorICogVW5yZWdpc3RlciBldmVudCBhbmQgZnJlZSByZXNvdXJjZXMuCisgKgorICogR2V0cyBjYWxsZWQgZnJvbSB3b3JrcXVldWUuCisgKi8KK3N0YXRpYyB2b2lkIGNncm91cF9ldmVudF9yZW1vdmUoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBjZ3JvdXBfZXZlbnQgKmV2ZW50ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBjZ3JvdXBfZXZlbnQsCisJCQlyZW1vdmUpOworCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBldmVudC0+Y2dycDsKKworCS8qIFRPRE86IGNoZWNrIHJldHVybiBjb2RlICovCisJZXZlbnQtPmNmdC0+dW5yZWdpc3Rlcl9ldmVudChjZ3JwLCBldmVudC0+Y2Z0LCBldmVudC0+ZXZlbnRmZCk7CisKKwlldmVudGZkX2N0eF9wdXQoZXZlbnQtPmV2ZW50ZmQpOworCWtmcmVlKGV2ZW50KTsKKwlkcHV0KGNncnAtPmRlbnRyeSk7Cit9CisKKy8qCisgKiBHZXRzIGNhbGxlZCBvbiBQT0xMSFVQIG9uIGV2ZW50ZmQgd2hlbiB1c2VyIGNsb3NlcyBpdC4KKyAqCisgKiBDYWxsZWQgd2l0aCB3cWgtPmxvY2sgaGVsZCBhbmQgaW50ZXJydXB0cyBkaXNhYmxlZC4KKyAqLworc3RhdGljIGludCBjZ3JvdXBfZXZlbnRfd2FrZSh3YWl0X3F1ZXVlX3QgKndhaXQsIHVuc2lnbmVkIG1vZGUsCisJCWludCBzeW5jLCB2b2lkICprZXkpCit7CisJc3RydWN0IGNncm91cF9ldmVudCAqZXZlbnQgPSBjb250YWluZXJfb2Yod2FpdCwKKwkJCXN0cnVjdCBjZ3JvdXBfZXZlbnQsIHdhaXQpOworCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBldmVudC0+Y2dycDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gKHVuc2lnbmVkIGxvbmcpa2V5OworCisJaWYgKGZsYWdzICYgUE9MTEhVUCkgeworCQlyZW1vdmVfd2FpdF9xdWV1ZV9sb2NrZWQoZXZlbnQtPndxaCwgJmV2ZW50LT53YWl0KTsKKwkJc3Bpbl9sb2NrKCZjZ3JwLT5ldmVudF9saXN0X2xvY2spOworCQlsaXN0X2RlbCgmZXZlbnQtPmxpc3QpOworCQlzcGluX3VubG9jaygmY2dycC0+ZXZlbnRfbGlzdF9sb2NrKTsKKwkJLyoKKwkJICogV2UgYXJlIGluIGF0b21pYyBjb250ZXh0LCBidXQgY2dyb3VwX2V2ZW50X3JlbW92ZSgpIG1heQorCQkgKiBzbGVlcCwgc28gd2UgaGF2ZSB0byBjYWxsIGl0IGluIHdvcmtxdWV1ZS4KKwkJICovCisJCXNjaGVkdWxlX3dvcmsoJmV2ZW50LT5yZW1vdmUpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBjZ3JvdXBfZXZlbnRfcHRhYmxlX3F1ZXVlX3Byb2Moc3RydWN0IGZpbGUgKmZpbGUsCisJCXdhaXRfcXVldWVfaGVhZF90ICp3cWgsIHBvbGxfdGFibGUgKnB0KQoreworCXN0cnVjdCBjZ3JvdXBfZXZlbnQgKmV2ZW50ID0gY29udGFpbmVyX29mKHB0LAorCQkJc3RydWN0IGNncm91cF9ldmVudCwgcHQpOworCisJZXZlbnQtPndxaCA9IHdxaDsKKwlhZGRfd2FpdF9xdWV1ZSh3cWgsICZldmVudC0+d2FpdCk7Cit9CisKKy8qCisgKiBQYXJzZSBpbnB1dCBhbmQgcmVnaXN0ZXIgbmV3IGNncm91cCBldmVudCBoYW5kbGVyLgorICoKKyAqIElucHV0IG11c3QgYmUgaW4gZm9ybWF0ICc8ZXZlbnRfZmQ+IDxjb250cm9sX2ZkPiA8YXJncz4nLgorICogSW50ZXJwcmV0YXRpb24gb2YgYXJncyBpcyBkZWZpbmVkIGJ5IGNvbnRyb2wgZmlsZSBpbXBsZW1lbnRhdGlvbi4KKyAqLworc3RhdGljIGludCBjZ3JvdXBfd3JpdGVfZXZlbnRfY29udHJvbChzdHJ1Y3QgY2dyb3VwICpjZ3JwLCBzdHJ1Y3QgY2Z0eXBlICpjZnQsCisJCQkJICAgICAgY29uc3QgY2hhciAqYnVmZmVyKQoreworCXN0cnVjdCBjZ3JvdXBfZXZlbnQgKmV2ZW50ID0gTlVMTDsKKwl1bnNpZ25lZCBpbnQgZWZkLCBjZmQ7CisJc3RydWN0IGZpbGUgKmVmaWxlID0gTlVMTDsKKwlzdHJ1Y3QgZmlsZSAqY2ZpbGUgPSBOVUxMOworCWNoYXIgKmVuZHA7CisJaW50IHJldDsKKworCWVmZCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZmZlciwgJmVuZHAsIDEwKTsKKwlpZiAoKmVuZHAgIT0gJyAnKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlidWZmZXIgPSBlbmRwICsgMTsKKworCWNmZCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZmZlciwgJmVuZHAsIDEwKTsKKwlpZiAoKCplbmRwICE9ICcgJykgJiYgKCplbmRwICE9ICdcMCcpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlidWZmZXIgPSBlbmRwICsgMTsKKworCWV2ZW50ID0ga3phbGxvYyhzaXplb2YoKmV2ZW50KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFldmVudCkKKwkJcmV0dXJuIC1FTk9NRU07CisJZXZlbnQtPmNncnAgPSBjZ3JwOworCUlOSVRfTElTVF9IRUFEKCZldmVudC0+bGlzdCk7CisJaW5pdF9wb2xsX2Z1bmNwdHIoJmV2ZW50LT5wdCwgY2dyb3VwX2V2ZW50X3B0YWJsZV9xdWV1ZV9wcm9jKTsKKwlpbml0X3dhaXRxdWV1ZV9mdW5jX2VudHJ5KCZldmVudC0+d2FpdCwgY2dyb3VwX2V2ZW50X3dha2UpOworCUlOSVRfV09SSygmZXZlbnQtPnJlbW92ZSwgY2dyb3VwX2V2ZW50X3JlbW92ZSk7CisKKwllZmlsZSA9IGV2ZW50ZmRfZmdldChlZmQpOworCWlmIChJU19FUlIoZWZpbGUpKSB7CisJCXJldCA9IFBUUl9FUlIoZWZpbGUpOworCQlnb3RvIGZhaWw7CisJfQorCisJZXZlbnQtPmV2ZW50ZmQgPSBldmVudGZkX2N0eF9maWxlZ2V0KGVmaWxlKTsKKwlpZiAoSVNfRVJSKGV2ZW50LT5ldmVudGZkKSkgeworCQlyZXQgPSBQVFJfRVJSKGV2ZW50LT5ldmVudGZkKTsKKwkJZ290byBmYWlsOworCX0KKworCWNmaWxlID0gZmdldChjZmQpOworCWlmICghY2ZpbGUpIHsKKwkJcmV0ID0gLUVCQURGOworCQlnb3RvIGZhaWw7CisJfQorCisJLyogdGhlIHByb2Nlc3MgbmVlZCByZWFkIHBlcm1pc3Npb24gb24gY29udHJvbCBmaWxlICovCisJcmV0ID0gZmlsZV9wZXJtaXNzaW9uKGNmaWxlLCBNQVlfUkVBRCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZmFpbDsKKworCWV2ZW50LT5jZnQgPSBfX2ZpbGVfY2Z0KGNmaWxlKTsKKwlpZiAoSVNfRVJSKGV2ZW50LT5jZnQpKSB7CisJCXJldCA9IFBUUl9FUlIoZXZlbnQtPmNmdCk7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlpZiAoIWV2ZW50LT5jZnQtPnJlZ2lzdGVyX2V2ZW50IHx8ICFldmVudC0+Y2Z0LT51bnJlZ2lzdGVyX2V2ZW50KSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlyZXQgPSBldmVudC0+Y2Z0LT5yZWdpc3Rlcl9ldmVudChjZ3JwLCBldmVudC0+Y2Z0LAorCQkJZXZlbnQtPmV2ZW50ZmQsIGJ1ZmZlcik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJaWYgKGVmaWxlLT5mX29wLT5wb2xsKGVmaWxlLCAmZXZlbnQtPnB0KSAmIFBPTExIVVApIHsKKwkJZXZlbnQtPmNmdC0+dW5yZWdpc3Rlcl9ldmVudChjZ3JwLCBldmVudC0+Y2Z0LCBldmVudC0+ZXZlbnRmZCk7CisJCXJldCA9IDA7CisJCWdvdG8gZmFpbDsKKwl9CisKKwkvKgorCSAqIEV2ZW50cyBzaG91bGQgYmUgcmVtb3ZlZCBhZnRlciBybWRpciBvZiBjZ3JvdXAgZGlyZWN0b3J5LCBidXQgYmVmb3JlCisJICogZGVzdHJveWluZyBzdWJzeXN0ZW0gc3RhdGUgb2JqZWN0cy4gTGV0J3MgdGFrZSByZWZlcmVuY2UgdG8gY2dyb3VwCisJICogZGlyZWN0b3J5IGRlbnRyeSB0byBkbyB0aGF0LgorCSAqLworCWRnZXQoY2dycC0+ZGVudHJ5KTsKKworCXNwaW5fbG9jaygmY2dycC0+ZXZlbnRfbGlzdF9sb2NrKTsKKwlsaXN0X2FkZCgmZXZlbnQtPmxpc3QsICZjZ3JwLT5ldmVudF9saXN0KTsKKwlzcGluX3VubG9jaygmY2dycC0+ZXZlbnRfbGlzdF9sb2NrKTsKKworCWZwdXQoY2ZpbGUpOworCWZwdXQoZWZpbGUpOworCisJcmV0dXJuIDA7CisKK2ZhaWw6CisJaWYgKGNmaWxlKQorCQlmcHV0KGNmaWxlKTsKKworCWlmIChldmVudCAmJiBldmVudC0+ZXZlbnRmZCAmJiAhSVNfRVJSKGV2ZW50LT5ldmVudGZkKSkKKwkJZXZlbnRmZF9jdHhfcHV0KGV2ZW50LT5ldmVudGZkKTsKKworCWlmICghSVNfRVJSX09SX05VTEwoZWZpbGUpKQorCQlmcHV0KGVmaWxlKTsKKworCWtmcmVlKGV2ZW50KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qCiAgKiBmb3IgdGhlIGNvbW1vbiBmdW5jdGlvbnMsICdwcml2YXRlJyBnaXZlcyB0aGUgdHlwZSBvZiBmaWxlCiAgKi8KIC8qIGZvciBoeXN0ZXJpY2FsIHJhaXNpbnMsIHdlIGNhbid0IHB1dCB0aGlzIG9uIHRoZSBvbGRlciBmaWxlcyAqLwpAQCAtMjgyOCw2ICszMTcxLDExIEBACiAJCS5yZWFkX3U2NCA9IGNncm91cF9yZWFkX25vdGlmeV9vbl9yZWxlYXNlLAogCQkud3JpdGVfdTY0ID0gY2dyb3VwX3dyaXRlX25vdGlmeV9vbl9yZWxlYXNlLAogCX0sCisJeworCQkubmFtZSA9IENHUk9VUF9GSUxFX0dFTkVSSUNfUFJFRklYICJldmVudF9jb250cm9sIiwKKwkJLndyaXRlX3N0cmluZyA9IGNncm91cF93cml0ZV9ldmVudF9jb250cm9sLAorCQkubW9kZSA9IFNfSVdVR08sCisJfSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGNmdF9yZWxlYXNlX2FnZW50ID0gewpAQCAtMjg5Miw4ICszMjQwLDE0IEBACiAJLyogV2UgbmVlZCB0byB0YWtlIGVhY2ggaGllcmFyY2h5X211dGV4IGluIGEgY29uc2lzdGVudCBvcmRlciAqLwogCWludCBpOwogCisJLyoKKwkgKiBObyB3b3JyeSBhYm91dCBhIHJhY2Ugd2l0aCByZWJpbmRfc3Vic3lzdGVtcyB0aGF0IG1pZ2h0IG1lc3MgdXAgdGhlCisJICogbG9ja2luZyBvcmRlciwgc2luY2UgYm90aCBwYXJ0aWVzIGFyZSB1bmRlciBjZ3JvdXBfbXV0ZXguCisJICovCiAJZm9yIChpID0gMDsgaSA8IENHUk9VUF9TVUJTWVNfQ09VTlQ7IGkrKykgewogCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MgPSBzdWJzeXNbaV07CisJCWlmIChzcyA9PSBOVUxMKQorCQkJY29udGludWU7CiAJCWlmIChzcy0+cm9vdCA9PSByb290KQogCQkJbXV0ZXhfbG9jaygmc3MtPmhpZXJhcmNoeV9tdXRleCk7CiAJfQpAQCAtMjkwNSw2ICszMjU5LDggQEAKIAogCWZvciAoaSA9IDA7IGkgPCBDR1JPVVBfU1VCU1lTX0NPVU5UOyBpKyspIHsKIAkJc3RydWN0IGNncm91cF9zdWJzeXMgKnNzID0gc3Vic3lzW2ldOworCQlpZiAoc3MgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOwogCQlpZiAoc3MtPnJvb3QgPT0gcm9vdCkKIAkJCW11dGV4X3VubG9jaygmc3MtPmhpZXJhcmNoeV9tdXRleCk7CiAJfQpAQCAtMzAyOCwxMSArMzM4NCwxNiBAQAogCSAqIHN5bmNocm9uaXphdGlvbiBvdGhlciB0aGFuIFJDVSwgYW5kIHRoZSBzdWJzeXN0ZW0gbGlua2VkCiAJICogbGlzdCBpc24ndCBSQ1Utc2FmZSAqLwogCWludCBpOworCS8qCisJICogV2Ugd29uJ3QgbmVlZCB0byBsb2NrIHRoZSBzdWJzeXMgYXJyYXksIGJlY2F1c2UgdGhlIHN1YnN5c3RlbXMKKwkgKiB3ZSdyZSBjb25jZXJuZWQgYWJvdXQgYXJlbid0IGdvaW5nIGFueXdoZXJlIHNpbmNlIG91ciBjZ3JvdXAgcm9vdAorCSAqIGhhcyBhIHJlZmVyZW5jZSBvbiB0aGVtLgorCSAqLwogCWZvciAoaSA9IDA7IGkgPCBDR1JPVVBfU1VCU1lTX0NPVU5UOyBpKyspIHsKIAkJc3RydWN0IGNncm91cF9zdWJzeXMgKnNzID0gc3Vic3lzW2ldOwogCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzOwotCQkvKiBTa2lwIHN1YnN5c3RlbXMgbm90IGluIHRoaXMgaGllcmFyY2h5ICovCi0JCWlmIChzcy0+cm9vdCAhPSBjZ3JwLT5yb290KQorCQkvKiBTa2lwIHN1YnN5c3RlbXMgbm90IHByZXNlbnQgb3Igbm90IGluIHRoaXMgaGllcmFyY2h5ICovCisJCWlmIChzcyA9PSBOVUxMIHx8IHNzLT5yb290ICE9IGNncnAtPnJvb3QpCiAJCQljb250aW51ZTsKIAkJY3NzID0gY2dycC0+c3Vic3lzW3NzLT5zdWJzeXNfaWRdOwogCQkvKiBXaGVuIGNhbGxlZCBmcm9tIGNoZWNrX2Zvcl9yZWxlYXNlKCkgaXQncyBwb3NzaWJsZQpAQCAtMzEwNiw2ICszNDY3LDcgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkOwogCXN0cnVjdCBjZ3JvdXAgKnBhcmVudDsKIAlERUZJTkVfV0FJVCh3YWl0KTsKKwlzdHJ1Y3QgY2dyb3VwX2V2ZW50ICpldmVudCwgKnRtcDsKIAlpbnQgcmV0OwogCiAJLyogdGhlIHZmcyBob2xkcyBib3RoIGlub2RlLT5pX211dGV4IGFscmVhZHkgKi8KQEAgLTMxODksNiArMzU1MSwyMCBAQAogCXNldF9iaXQoQ0dSUF9SRUxFQVNBQkxFLCAmcGFyZW50LT5mbGFncyk7CiAJY2hlY2tfZm9yX3JlbGVhc2UocGFyZW50KTsKIAorCS8qCisJICogVW5yZWdpc3RlciBldmVudHMgYW5kIG5vdGlmeSB1c2Vyc3BhY2UuCisJICogTm90aWZ5IHVzZXJzcGFjZSBhYm91dCBjZ3JvdXAgcmVtb3Zpbmcgb25seSBhZnRlciBybWRpciBvZiBjZ3JvdXAKKwkgKiBkaXJlY3RvcnkgdG8gYXZvaWQgcmFjZSBiZXR3ZWVuIHVzZXJzcGFjZSBhbmQga2VybmVsc3BhY2UKKwkgKi8KKwlzcGluX2xvY2soJmNncnAtPmV2ZW50X2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV2ZW50LCB0bXAsICZjZ3JwLT5ldmVudF9saXN0LCBsaXN0KSB7CisJCWxpc3RfZGVsKCZldmVudC0+bGlzdCk7CisJCXJlbW92ZV93YWl0X3F1ZXVlKGV2ZW50LT53cWgsICZldmVudC0+d2FpdCk7CisJCWV2ZW50ZmRfc2lnbmFsKGV2ZW50LT5ldmVudGZkLCAxKTsKKwkJc2NoZWR1bGVfd29yaygmZXZlbnQtPnJlbW92ZSk7CisJfQorCXNwaW5fdW5sb2NrKCZjZ3JwLT5ldmVudF9saXN0X2xvY2spOworCiAJbXV0ZXhfdW5sb2NrKCZjZ3JvdXBfbXV0ZXgpOwogCXJldHVybiAwOwogfQpAQCAtMzIyMyw5ICszNTk5LDE5OCBAQAogCW11dGV4X2luaXQoJnNzLT5oaWVyYXJjaHlfbXV0ZXgpOwogCWxvY2tkZXBfc2V0X2NsYXNzKCZzcy0+aGllcmFyY2h5X211dGV4LCAmc3MtPnN1YnN5c19rZXkpOwogCXNzLT5hY3RpdmUgPSAxOworCisJLyogdGhpcyBmdW5jdGlvbiBzaG91bGRuJ3QgYmUgdXNlZCB3aXRoIG1vZHVsYXIgc3Vic3lzdGVtcywgc2luY2UgdGhleQorCSAqIG5lZWQgdG8gcmVnaXN0ZXIgYSBzdWJzeXNfaWQsIGFtb25nIG90aGVyIHRoaW5ncyAqLworCUJVR19PTihzcy0+bW9kdWxlKTsKIH0KIAogLyoqCisgKiBjZ3JvdXBfbG9hZF9zdWJzeXM6IGxvYWQgYW5kIHJlZ2lzdGVyIGEgbW9kdWxhciBzdWJzeXN0ZW0gYXQgcnVudGltZQorICogQHNzOiB0aGUgc3Vic3lzdGVtIHRvIGxvYWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgaW4gYSBtb2R1bGFyIHN1YnN5c3RlbSdzIGluaXRjYWxsLiBJZiB0aGUKKyAqIHN1YnN5dGVtIGlzIGJ1aWx0IGFzIGEgbW9kdWxlLCBpdCB3aWxsIGJlIGFzc2lnbmVkIGEgbmV3IHN1YnN5c19pZCBhbmQgc2V0CisgKiB1cCBmb3IgdXNlLiBJZiB0aGUgc3Vic3lzdGVtIGlzIGJ1aWx0LWluIGFueXdheSwgd29yayBpcyBkZWxlZ2F0ZWQgdG8gdGhlCisgKiBzaW1wbGVyIGNncm91cF9pbml0X3N1YnN5cy4KKyAqLworaW50IF9faW5pdF9vcl9tb2R1bGUgY2dyb3VwX2xvYWRfc3Vic3lzKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzOworCisJLyogY2hlY2sgbmFtZSBhbmQgZnVuY3Rpb24gdmFsaWRpdHkgKi8KKwlpZiAoc3MtPm5hbWUgPT0gTlVMTCB8fCBzdHJsZW4oc3MtPm5hbWUpID4gTUFYX0NHUk9VUF9UWVBFX05BTUVMRU4gfHwKKwkgICAgc3MtPmNyZWF0ZSA9PSBOVUxMIHx8IHNzLT5kZXN0cm95ID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiB3ZSBkb24ndCBzdXBwb3J0IGNhbGxiYWNrcyBpbiBtb2R1bGFyIHN1YnN5c3RlbXMuIHRoaXMgY2hlY2sgaXMKKwkgKiBiZWZvcmUgdGhlIHNzLT5tb2R1bGUgY2hlY2sgZm9yIGNvbnNpc3RlbmN5OyBhIHN1YnN5c3RlbSB0aGF0IGNvdWxkCisJICogYmUgYSBtb2R1bGUgc2hvdWxkIHN0aWxsIGhhdmUgbm8gY2FsbGJhY2tzIGV2ZW4gaWYgdGhlIHVzZXIgaXNuJ3QKKwkgKiBjb21waWxpbmcgaXQgYXMgb25lLgorCSAqLworCWlmIChzcy0+Zm9yayB8fCBzcy0+ZXhpdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKgorCSAqIGFuIG9wdGlvbmFsbHkgbW9kdWxhciBzdWJzeXN0ZW0gaXMgYnVpbHQtaW46IHdlIHdhbnQgdG8gZG8gbm90aGluZywKKwkgKiBzaW5jZSBjZ3JvdXBfaW5pdF9zdWJzeXMgd2lsbCBoYXZlIGFscmVhZHkgdGFrZW4gY2FyZSBvZiBpdC4KKwkgKi8KKwlpZiAoc3MtPm1vZHVsZSA9PSBOVUxMKSB7CisJCS8qIGEgZmV3IHNhbml0eSBjaGVja3MgKi8KKwkJQlVHX09OKHNzLT5zdWJzeXNfaWQgPj0gQ0dST1VQX0JVSUxUSU5fU1VCU1lTX0NPVU5UKTsKKwkJQlVHX09OKHN1YnN5c1tzcy0+c3Vic3lzX2lkXSAhPSBzcyk7CisJCXJldHVybiAwOworCX0KKworCS8qCisJICogbmVlZCB0byByZWdpc3RlciBhIHN1YnN5cyBpZCBiZWZvcmUgYW55dGhpbmcgZWxzZSAtIGZvciBleGFtcGxlLAorCSAqIGluaXRfY2dyb3VwX2NzcyBuZWVkcyBpdC4KKwkgKi8KKwltdXRleF9sb2NrKCZjZ3JvdXBfbXV0ZXgpOworCS8qIGZpbmQgdGhlIGZpcnN0IGVtcHR5IHNsb3QgaW4gdGhlIGFycmF5ICovCisJZm9yIChpID0gQ0dST1VQX0JVSUxUSU5fU1VCU1lTX0NPVU5UOyBpIDwgQ0dST1VQX1NVQlNZU19DT1VOVDsgaSsrKSB7CisJCWlmIChzdWJzeXNbaV0gPT0gTlVMTCkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSBDR1JPVVBfU1VCU1lTX0NPVU5UKSB7CisJCS8qIG1heGltdW0gbnVtYmVyIG9mIHN1YnN5c3RlbXMgYWxyZWFkeSByZWdpc3RlcmVkISAqLworCQltdXRleF91bmxvY2soJmNncm91cF9tdXRleCk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCS8qIGFzc2lnbiBvdXJzZWx2ZXMgdGhlIHN1YnN5c19pZCAqLworCXNzLT5zdWJzeXNfaWQgPSBpOworCXN1YnN5c1tpXSA9IHNzOworCisJLyoKKwkgKiBubyBzcy0+Y3JlYXRlIHNlZW1zIHRvIG5lZWQgYW55dGhpbmcgaW1wb3J0YW50IGluIHRoZSBzcyBzdHJ1Y3QsIHNvCisJICogdGhpcyBjYW4gaGFwcGVuIGZpcnN0IChpLmUuIGJlZm9yZSB0aGUgcm9vdG5vZGUgYXR0YWNobWVudCkuCisJICovCisJY3NzID0gc3MtPmNyZWF0ZShzcywgZHVtbXl0b3ApOworCWlmIChJU19FUlIoY3NzKSkgeworCQkvKiBmYWlsdXJlIGNhc2UgLSBuZWVkIHRvIGRlYXNzaWduIHRoZSBzdWJzeXNbXSBzbG90LiAqLworCQlzdWJzeXNbaV0gPSBOVUxMOworCQltdXRleF91bmxvY2soJmNncm91cF9tdXRleCk7CisJCXJldHVybiBQVFJfRVJSKGNzcyk7CisJfQorCisJbGlzdF9hZGQoJnNzLT5zaWJsaW5nLCAmcm9vdG5vZGUuc3Vic3lzX2xpc3QpOworCXNzLT5yb290ID0gJnJvb3Rub2RlOworCisJLyogb3VyIG5ldyBzdWJzeXN0ZW0gd2lsbCBiZSBhdHRhY2hlZCB0byB0aGUgZHVtbXkgaGllcmFyY2h5LiAqLworCWluaXRfY2dyb3VwX2Nzcyhjc3MsIHNzLCBkdW1teXRvcCk7CisJLyogaW5pdF9pZHIgbXVzdCBiZSBhZnRlciBpbml0X2Nncm91cF9jc3MgYmVjYXVzZSBpdCBzZXRzIGNzcy0+aWQuICovCisJaWYgKHNzLT51c2VfaWQpIHsKKwkJaW50IHJldCA9IGNncm91cF9pbml0X2lkcihzcywgY3NzKTsKKwkJaWYgKHJldCkgeworCQkJZHVtbXl0b3AtPnN1YnN5c1tzcy0+c3Vic3lzX2lkXSA9IE5VTEw7CisJCQlzcy0+ZGVzdHJveShzcywgZHVtbXl0b3ApOworCQkJc3Vic3lzW2ldID0gTlVMTDsKKwkJCW11dGV4X3VubG9jaygmY2dyb3VwX211dGV4KTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwkvKgorCSAqIE5vdyB3ZSBuZWVkIHRvIGVudGFuZ2xlIHRoZSBjc3MgaW50byB0aGUgZXhpc3RpbmcgY3NzX3NldHMuIHVubGlrZQorCSAqIGluIGNncm91cF9pbml0X3N1YnN5cywgdGhlcmUgYXJlIG5vdyBtdWx0aXBsZSBjc3Nfc2V0cywgc28gZWFjaCBvbmUKKwkgKiB3aWxsIG5lZWQgYSBuZXcgcG9pbnRlciB0byBpdDsgZG9uZSBieSBpdGVyYXRpbmcgdGhlIGNzc19zZXRfdGFibGUuCisJICogZnVydGhlcm1vcmUsIG1vZGlmeWluZyB0aGUgZXhpc3RpbmcgY3NzX3NldHMgd2lsbCBjb3JydXB0IHRoZSBoYXNoCisJICogdGFibGUgc3RhdGUsIHNvIGVhY2ggY2hhbmdlZCBjc3Nfc2V0IHdpbGwgbmVlZCBpdHMgaGFzaCByZWNvbXB1dGVkLgorCSAqIHRoaXMgaXMgYWxsIGRvbmUgdW5kZXIgdGhlIGNzc19zZXRfbG9jay4KKwkgKi8KKwl3cml0ZV9sb2NrKCZjc3Nfc2V0X2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBDU1NfU0VUX1RBQkxFX1NJWkU7IGkrKykgeworCQlzdHJ1Y3QgY3NzX3NldCAqY2c7CisJCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqdG1wOworCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqYnVja2V0ID0gJmNzc19zZXRfdGFibGVbaV0sICpuZXdfYnVja2V0OworCisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY2csIG5vZGUsIHRtcCwgYnVja2V0LCBobGlzdCkgeworCQkJLyogc2tpcCBlbnRyaWVzIHRoYXQgd2UgYWxyZWFkeSByZWhhc2hlZCAqLworCQkJaWYgKGNnLT5zdWJzeXNbc3MtPnN1YnN5c19pZF0pCisJCQkJY29udGludWU7CisJCQkvKiByZW1vdmUgZXhpc3RpbmcgZW50cnkgKi8KKwkJCWhsaXN0X2RlbCgmY2ctPmhsaXN0KTsKKwkJCS8qIHNldCBuZXcgdmFsdWUgKi8KKwkJCWNnLT5zdWJzeXNbc3MtPnN1YnN5c19pZF0gPSBjc3M7CisJCQkvKiByZWNvbXB1dGUgaGFzaCBhbmQgcmVzdG9yZSBlbnRyeSAqLworCQkJbmV3X2J1Y2tldCA9IGNzc19zZXRfaGFzaChjZy0+c3Vic3lzKTsKKwkJCWhsaXN0X2FkZF9oZWFkKCZjZy0+aGxpc3QsIG5ld19idWNrZXQpOworCQl9CisJfQorCXdyaXRlX3VubG9jaygmY3NzX3NldF9sb2NrKTsKKworCW11dGV4X2luaXQoJnNzLT5oaWVyYXJjaHlfbXV0ZXgpOworCWxvY2tkZXBfc2V0X2NsYXNzKCZzcy0+aGllcmFyY2h5X211dGV4LCAmc3MtPnN1YnN5c19rZXkpOworCXNzLT5hY3RpdmUgPSAxOworCisJLyogc3VjY2VzcyEgKi8KKwltdXRleF91bmxvY2soJmNncm91cF9tdXRleCk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChjZ3JvdXBfbG9hZF9zdWJzeXMpOworCisvKioKKyAqIGNncm91cF91bmxvYWRfc3Vic3lzOiB1bmxvYWQgYSBtb2R1bGFyIHN1YnN5c3RlbQorICogQHNzOiB0aGUgc3Vic3lzdGVtIHRvIHVubG9hZAorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBpbiBhIG1vZHVsYXIgc3Vic3lzdGVtJ3MgZXhpdGNhbGwuIFdoZW4gdGhpcworICogZnVuY3Rpb24gaXMgaW52b2tlZCwgdGhlIHJlZmNvdW50IG9uIHRoZSBzdWJzeXN0ZW0ncyBtb2R1bGUgd2lsbCBiZSAwLCBzbworICogdGhlIHN1YnN5c3RlbSB3aWxsIG5vdCBiZSBhdHRhY2hlZCB0byBhbnkgaGllcmFyY2h5LgorICovCit2b2lkIGNncm91cF91bmxvYWRfc3Vic3lzKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcykKK3sKKwlzdHJ1Y3QgY2dfY2dyb3VwX2xpbmsgKmxpbms7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhoZWFkOworCisJQlVHX09OKHNzLT5tb2R1bGUgPT0gTlVMTCk7CisKKwkvKgorCSAqIHdlIHNob3VsZG4ndCBiZSBjYWxsZWQgaWYgdGhlIHN1YnN5c3RlbSBpcyBpbiB1c2UsIGFuZCB0aGUgdXNlIG9mCisJICogdHJ5X21vZHVsZV9nZXQgaW4gcGFyc2VfY2dyb3VwZnNfb3B0aW9ucyBzaG91bGQgZW5zdXJlIHRoYXQgaXQKKwkgKiBkb2Vzbid0IHN0YXJ0IGJlaW5nIHVzZWQgd2hpbGUgd2UncmUga2lsbGluZyBpdCBvZmYuCisJICovCisJQlVHX09OKHNzLT5yb290ICE9ICZyb290bm9kZSk7CisKKwltdXRleF9sb2NrKCZjZ3JvdXBfbXV0ZXgpOworCS8qIGRlYXNzaWduIHRoZSBzdWJzeXNfaWQgKi8KKwlCVUdfT04oc3MtPnN1YnN5c19pZCA8IENHUk9VUF9CVUlMVElOX1NVQlNZU19DT1VOVCk7CisJc3Vic3lzW3NzLT5zdWJzeXNfaWRdID0gTlVMTDsKKworCS8qIHJlbW92ZSBzdWJzeXN0ZW0gZnJvbSByb290bm9kZSdzIGxpc3Qgb2Ygc3Vic3lzdGVtcyAqLworCWxpc3RfZGVsKCZzcy0+c2libGluZyk7CisKKwkvKgorCSAqIGRpc2VudGFuZ2xlIHRoZSBjc3MgZnJvbSBhbGwgY3NzX3NldHMgYXR0YWNoZWQgdG8gdGhlIGR1bW15dG9wLiBhcworCSAqIGluIGxvYWRpbmcsIHdlIG5lZWQgdG8gcGF5IG91ciByZXNwZWN0cyB0byB0aGUgaGFzaHRhYmxlIGdvZHMuCisJICovCisJd3JpdGVfbG9jaygmY3NzX3NldF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGxpbmssICZkdW1teXRvcC0+Y3NzX3NldHMsIGNncnBfbGlua19saXN0KSB7CisJCXN0cnVjdCBjc3Nfc2V0ICpjZyA9IGxpbmstPmNnOworCisJCWhsaXN0X2RlbCgmY2ctPmhsaXN0KTsKKwkJQlVHX09OKCFjZy0+c3Vic3lzW3NzLT5zdWJzeXNfaWRdKTsKKwkJY2ctPnN1YnN5c1tzcy0+c3Vic3lzX2lkXSA9IE5VTEw7CisJCWhoZWFkID0gY3NzX3NldF9oYXNoKGNnLT5zdWJzeXMpOworCQlobGlzdF9hZGRfaGVhZCgmY2ctPmhsaXN0LCBoaGVhZCk7CisJfQorCXdyaXRlX3VubG9jaygmY3NzX3NldF9sb2NrKTsKKworCS8qCisJICogcmVtb3ZlIHN1YnN5c3RlbSdzIGNzcyBmcm9tIHRoZSBkdW1teXRvcCBhbmQgZnJlZSBpdCAtIG5lZWQgdG8gZnJlZQorCSAqIGJlZm9yZSBtYXJraW5nIGFzIG51bGwgYmVjYXVzZSBzcy0+ZGVzdHJveSBuZWVkcyB0aGUgY2dycC0+c3Vic3lzCisJICogcG9pbnRlciB0byBmaW5kIHRoZWlyIHN0YXRlLiBub3RlIHRoYXQgdGhpcyBhbHNvIHRha2VzIGNhcmUgb2YKKwkgKiBmcmVlaW5nIHRoZSBjc3NfaWQuCisJICovCisJc3MtPmRlc3Ryb3koc3MsIGR1bW15dG9wKTsKKwlkdW1teXRvcC0+c3Vic3lzW3NzLT5zdWJzeXNfaWRdID0gTlVMTDsKKworCW11dGV4X3VubG9jaygmY2dyb3VwX211dGV4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGNncm91cF91bmxvYWRfc3Vic3lzKTsKKworLyoqCiAgKiBjZ3JvdXBfaW5pdF9lYXJseSAtIGNncm91cCBpbml0aWFsaXphdGlvbiBhdCBzeXN0ZW0gYm9vdAogICoKICAqIEluaXRpYWxpemUgY2dyb3VwcyBhdCBzeXN0ZW0gYm9vdCwgYW5kIGluaXRpYWxpemUgYW55CkBAIC0zMjUzLDcgKzM4MTgsOCBAQAogCWZvciAoaSA9IDA7IGkgPCBDU1NfU0VUX1RBQkxFX1NJWkU7IGkrKykKIAkJSU5JVF9ITElTVF9IRUFEKCZjc3Nfc2V0X3RhYmxlW2ldKTsKIAotCWZvciAoaSA9IDA7IGkgPCBDR1JPVVBfU1VCU1lTX0NPVU5UOyBpKyspIHsKKwkvKiBhdCBib290dXAgdGltZSwgd2UgZG9uJ3Qgd29ycnkgYWJvdXQgbW9kdWxhciBzdWJzeXN0ZW1zICovCisJZm9yIChpID0gMDsgaSA8IENHUk9VUF9CVUlMVElOX1NVQlNZU19DT1VOVDsgaSsrKSB7CiAJCXN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcyA9IHN1YnN5c1tpXTsKIAogCQlCVUdfT04oIXNzLT5uYW1lKTsKQEAgLTMyODgsMTIgKzM4NTQsMTMgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JZm9yIChpID0gMDsgaSA8IENHUk9VUF9TVUJTWVNfQ09VTlQ7IGkrKykgeworCS8qIGF0IGJvb3R1cCB0aW1lLCB3ZSBkb24ndCB3b3JyeSBhYm91dCBtb2R1bGFyIHN1YnN5c3RlbXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQ0dST1VQX0JVSUxUSU5fU1VCU1lTX0NPVU5UOyBpKyspIHsKIAkJc3RydWN0IGNncm91cF9zdWJzeXMgKnNzID0gc3Vic3lzW2ldOwogCQlpZiAoIXNzLT5lYXJseV9pbml0KQogCQkJY2dyb3VwX2luaXRfc3Vic3lzKHNzKTsKIAkJaWYgKHNzLT51c2VfaWQpCi0JCQljZ3JvdXBfc3Vic3lzX2luaXRfaWRyKHNzKTsKKwkJCWNncm91cF9pbml0X2lkcihzcywgaW5pdF9jc3Nfc2V0LnN1YnN5c1tzcy0+c3Vic3lzX2lkXSk7CiAJfQogCiAJLyogQWRkIGluaXRfY3NzX3NldCB0byB0aGUgaGFzaCB0YWJsZSAqLwpAQCAtMzM5Nyw5ICszOTY0LDE2IEBACiAJaW50IGk7CiAKIAlzZXFfcHV0cyhtLCAiI3N1YnN5c19uYW1lXHRoaWVyYXJjaHlcdG51bV9jZ3JvdXBzXHRlbmFibGVkXG4iKTsKKwkvKgorCSAqIGlkZWFsbHkgd2UgZG9uJ3Qgd2FudCBzdWJzeXN0ZW1zIG1vdmluZyBhcm91bmQgd2hpbGUgd2UgZG8gdGhpcy4KKwkgKiBjZ3JvdXBfbXV0ZXggaXMgYWxzbyBuZWNlc3NhcnkgdG8gZ3VhcmFudGVlIGFuIGF0b21pYyBzbmFwc2hvdCBvZgorCSAqIHN1YnN5cy9oaWVyYXJjaHkgc3RhdGUuCisJICovCiAJbXV0ZXhfbG9jaygmY2dyb3VwX211dGV4KTsKIAlmb3IgKGkgPSAwOyBpIDwgQ0dST1VQX1NVQlNZU19DT1VOVDsgaSsrKSB7CiAJCXN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcyA9IHN1YnN5c1tpXTsKKwkJaWYgKHNzID09IE5VTEwpCisJCQljb250aW51ZTsKIAkJc2VxX3ByaW50ZihtLCAiJXNcdCVkXHQlZFx0JWRcbiIsCiAJCQkgICBzcy0+bmFtZSwgc3MtPnJvb3QtPmhpZXJhcmNoeV9pZCwKIAkJCSAgIHNzLT5yb290LT5udW1iZXJfb2ZfY2dyb3VwcywgIXNzLT5kaXNhYmxlZCk7CkBAIC0zNDU3LDcgKzQwMzEsMTIgQEAKIHsKIAlpZiAobmVlZF9mb3JrZXhpdF9jYWxsYmFjaykgewogCQlpbnQgaTsKLQkJZm9yIChpID0gMDsgaSA8IENHUk9VUF9TVUJTWVNfQ09VTlQ7IGkrKykgeworCQkvKgorCQkgKiBmb3JrZXhpdCBjYWxsYmFja3MgYXJlIG9ubHkgc3VwcG9ydGVkIGZvciBidWlsdGluCisJCSAqIHN1YnN5c3RlbXMsIGFuZCB0aGUgYnVpbHRpbiBzZWN0aW9uIG9mIHRoZSBzdWJzeXMgYXJyYXkgaXMKKwkJICogaW1tdXRhYmxlLCBzbyB3ZSBkb24ndCBuZWVkIHRvIGxvY2sgdGhlIHN1YnN5cyBhcnJheSBoZXJlLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IENHUk9VUF9CVUlMVElOX1NVQlNZU19DT1VOVDsgaSsrKSB7CiAJCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MgPSBzdWJzeXNbaV07CiAJCQlpZiAoc3MtPmZvcmspCiAJCQkJc3MtPmZvcmsoc3MsIGNoaWxkKTsKQEAgLTM1MjYsNyArNDEwNSwxMSBAQAogCXN0cnVjdCBjc3Nfc2V0ICpjZzsKIAogCWlmIChydW5fY2FsbGJhY2tzICYmIG5lZWRfZm9ya2V4aXRfY2FsbGJhY2spIHsKLQkJZm9yIChpID0gMDsgaSA8IENHUk9VUF9TVUJTWVNfQ09VTlQ7IGkrKykgeworCQkvKgorCQkgKiBtb2R1bGFyIHN1YnN5c3RlbXMgY2FuJ3QgdXNlIGNhbGxiYWNrcywgc28gbm8gbmVlZCB0byBsb2NrCisJCSAqIHRoZSBzdWJzeXMgYXJyYXkKKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBDR1JPVVBfQlVJTFRJTl9TVUJTWVNfQ09VTlQ7IGkrKykgewogCQkJc3RydWN0IGNncm91cF9zdWJzeXMgKnNzID0gc3Vic3lzW2ldOwogCQkJaWYgKHNzLT5leGl0KQogCQkJCXNzLT5leGl0KHNzLCB0c2spOwpAQCAtMzcyMCwxMiArNDMwMywxMyBAQAogCX0KIH0KIAotdm9pZCBfX2Nzc19wdXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKKy8qIENhbGxlciBtdXN0IHZlcmlmeSB0aGF0IHRoZSBjc3MgaXMgbm90IGZvciByb290IGNncm91cCAqLwordm9pZCBfX2Nzc19wdXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNvdW50KQogewogCXN0cnVjdCBjZ3JvdXAgKmNncnAgPSBjc3MtPmNncm91cDsKIAlpbnQgdmFsOwogCXJjdV9yZWFkX2xvY2soKTsKLQl2YWwgPSBhdG9taWNfZGVjX3JldHVybigmY3NzLT5yZWZjbnQpOworCXZhbCA9IGF0b21pY19zdWJfcmV0dXJuKGNvdW50LCAmY3NzLT5yZWZjbnQpOwogCWlmICh2YWwgPT0gMSkgewogCQlpZiAobm90aWZ5X29uX3JlbGVhc2UoY2dycCkpIHsKIAkJCXNldF9iaXQoQ0dSUF9SRUxFQVNBQkxFLCAmY2dycC0+ZmxhZ3MpOwpAQCAtMzczNiw2ICs0MzIwLDcgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAlXQVJOX09OX09OQ0UodmFsIDwgMSk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChfX2Nzc19wdXQpOwogCiAvKgogICogTm90aWZ5IHVzZXJzcGFjZSB3aGVuIGEgY2dyb3VwIGlzIHJlbGVhc2VkLCBieSBydW5uaW5nIHRoZQpAQCAtMzgxNyw4ICs0NDAyLDExIEBACiAJd2hpbGUgKCh0b2tlbiA9IHN0cnNlcCgmc3RyLCAiLCIpKSAhPSBOVUxMKSB7CiAJCWlmICghKnRva2VuKQogCQkJY29udGludWU7Ci0KLQkJZm9yIChpID0gMDsgaSA8IENHUk9VUF9TVUJTWVNfQ09VTlQ7IGkrKykgeworCQkvKgorCQkgKiBjZ3JvdXBfZGlzYWJsZSwgYmVpbmcgYXQgYm9vdCB0aW1lLCBjYW4ndCBrbm93IGFib3V0IG1vZHVsZQorCQkgKiBzdWJzeXN0ZW1zLCBzbyB3ZSBkb24ndCB3b3JyeSBhYm91dCB0aGVtLgorCQkgKi8KKwkJZm9yIChpID0gMDsgaSA8IENHUk9VUF9CVUlMVElOX1NVQlNZU19DT1VOVDsgaSsrKSB7CiAJCQlzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MgPSBzdWJzeXNbaV07CiAKIAkJCWlmICghc3RyY21wKHRva2VuLCBzcy0+bmFtZSkpIHsKQEAgLTM4NDgsNiArNDQzNiw3IEBACiAJCXJldHVybiBjc3NpZC0+aWQ7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjc3NfaWQpOwogCiB1bnNpZ25lZCBzaG9ydCBjc3NfZGVwdGgoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIHsKQEAgLTM4NTcsNiArNDQ0Niw3IEBACiAJCXJldHVybiBjc3NpZC0+ZGVwdGg7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChjc3NfZGVwdGgpOwogCiBib29sIGNzc19pc19hbmNlc3RvcihzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY2hpbGQsCiAJCSAgICBjb25zdCBzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcm9vdCkKQEAgLTM4OTMsNiArNDQ4Myw3IEBACiAJc3Bpbl91bmxvY2soJnNzLT5pZF9sb2NrKTsKIAljYWxsX3JjdSgmaWQtPnJjdV9oZWFkLCBfX2ZyZWVfY3NzX2lkX2NiKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGZyZWVfY3NzX2lkKTsKIAogLyoKICAqIFRoaXMgaXMgY2FsbGVkIGJ5IGluaXQgb3IgY3JlYXRlKCkuIFRoZW4sIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24gYXJlCkBAIC0zOTQyLDE1ICs0NTMzLDE0IEBACiAKIH0KIAotc3RhdGljIGludCBfX2luaXQgY2dyb3VwX3N1YnN5c19pbml0X2lkcihzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MpCitzdGF0aWMgaW50IF9faW5pdF9vcl9tb2R1bGUgY2dyb3VwX2luaXRfaWRyKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywKKwkJCQkJICAgIHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpyb290Y3NzKQogewogCXN0cnVjdCBjc3NfaWQgKm5ld2lkOwotCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpyb290Y3NzOwogCiAJc3Bpbl9sb2NrX2luaXQoJnNzLT5pZF9sb2NrKTsKIAlpZHJfaW5pdCgmc3MtPmlkcik7CiAKLQlyb290Y3NzID0gaW5pdF9jc3Nfc2V0LnN1YnN5c1tzcy0+c3Vic3lzX2lkXTsKIAluZXdpZCA9IGdldF9uZXdfY3NzaWQoc3MsIDApOwogCWlmIChJU19FUlIobmV3aWQpKQogCQlyZXR1cm4gUFRSX0VSUihuZXdpZCk7CkBAIC00MDEwLDYgKzQ2MDAsNyBAQAogCiAJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZShjc3NpZC0+Y3NzKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKGNzc19sb29rdXApOwogCiAvKioKICAqIGNzc19nZXRfbmV4dCAtIGxvb2t1cCBuZXh0IGNncm91cCB1bmRlciBzcGVjaWZpZWQgaGllcmFyY2h5LgpkaWZmIC0tZ2l0IGEva2VybmVsL2NwdS5jIGIva2VybmVsL2NwdS5jCmluZGV4IDY3N2YyNTMuLmY4Y2NlZDIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9jcHUuYworKysgYi9rZXJuZWwvY3B1LmMKQEAgLTMzOCw3ICszMzgsNyBAQAogCWlmICghY3B1X3Bvc3NpYmxlKGNwdSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBvbmxpbmUgY3B1ICVkIGJlY2F1c2UgaXQgaXMgbm90ICIKIAkJCSJjb25maWd1cmVkIGFzIG1heS1ob3RhZGQgYXQgYm9vdCB0aW1lXG4iLCBjcHUpOwotI2lmIGRlZmluZWQoQ09ORklHX0lBNjQpIHx8IGRlZmluZWQoQ09ORklHX1g4Nl82NCkKKyNpZiBkZWZpbmVkKENPTkZJR19JQTY0KQogCQlwcmludGsoS0VSTl9FUlIgInBsZWFzZSBjaGVjayBhZGRpdGlvbmFsX2NwdXM9IGJvb3QgIgogCQkJCSJwYXJhbWV0ZXJcbiIpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9rZXJuZWwvZWFybHlfcmVzLmMgYi9rZXJuZWwvZWFybHlfcmVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2NiMmM2NgotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC9lYXJseV9yZXMuYwpAQCAtMCwwICsxLDU3OCBAQAorLyoKKyAqIGVhcmx5X3JlcywgY291bGQgYmUgdXNlZCB0byByZXBsYWNlIGJvb3RtZW0KKyAqLworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vhcmx5X3Jlcy5oPgorCisvKgorICogRWFybHkgcmVzZXJ2ZWQgbWVtb3J5IGFyZWFzLgorICovCisvKgorICogbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBvbmUgaXMgYmlnZ2VyIGVub3VnaCBiZWZvcmUKKyAqIGZpbmRfZndfbWVtbWFwX2FyZWEgY291bGQgYmUgdXNlZAorICovCisjZGVmaW5lIE1BWF9FQVJMWV9SRVNfWCAzMgorCitzdHJ1Y3QgZWFybHlfcmVzIHsKKwl1NjQgc3RhcnQsIGVuZDsKKwljaGFyIG5hbWVbMTVdOworCWNoYXIgb3ZlcmxhcF9vazsKK307CitzdGF0aWMgc3RydWN0IGVhcmx5X3JlcyBlYXJseV9yZXNfeFtNQVhfRUFSTFlfUkVTX1hdIF9faW5pdGRhdGE7CisKK3N0YXRpYyBpbnQgbWF4X2Vhcmx5X3JlcyBfX2luaXRkYXRhID0gTUFYX0VBUkxZX1JFU19YOworc3RhdGljIHN0cnVjdCBlYXJseV9yZXMgKmVhcmx5X3JlcyBfX2luaXRkYXRhID0gJmVhcmx5X3Jlc194WzBdOworc3RhdGljIGludCBlYXJseV9yZXNfY291bnQgX19pbml0ZGF0YTsKKworc3RhdGljIGludCBfX2luaXQgZmluZF9vdmVybGFwcGVkX2Vhcmx5KHU2NCBzdGFydCwgdTY0IGVuZCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgZWFybHlfcmVzICpyOworCisJZm9yIChpID0gMDsgaSA8IG1heF9lYXJseV9yZXMgJiYgZWFybHlfcmVzW2ldLmVuZDsgaSsrKSB7CisJCXIgPSAmZWFybHlfcmVzW2ldOworCQlpZiAoZW5kID4gci0+c3RhcnQgJiYgc3RhcnQgPCByLT5lbmQpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gaTsKK30KKworLyoKKyAqIERyb3AgdGhlIGktdGggcmFuZ2UgZnJvbSB0aGUgZWFybHkgcmVzZXJ2YXRpb24gbWFwLAorICogYnkgY29weWluZyBhbnkgaGlnaGVyIHJhbmdlcyBkb3duIG9uZSBvdmVyIGl0LCBhbmQKKyAqIGNsZWFyaW5nIHdoYXQgaGFkIGJlZW4gdGhlIGxhc3Qgc2xvdC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IGRyb3BfcmFuZ2UoaW50IGkpCit7CisJaW50IGo7CisKKwlmb3IgKGogPSBpICsgMTsgaiA8IG1heF9lYXJseV9yZXMgJiYgZWFybHlfcmVzW2pdLmVuZDsgaisrKQorCQk7CisKKwltZW1tb3ZlKCZlYXJseV9yZXNbaV0sICZlYXJseV9yZXNbaSArIDFdLAorCSAgICAgICAoaiAtIDEgLSBpKSAqIHNpemVvZihzdHJ1Y3QgZWFybHlfcmVzKSk7CisKKwllYXJseV9yZXNbaiAtIDFdLmVuZCA9IDA7CisJZWFybHlfcmVzX2NvdW50LS07Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBkcm9wX3JhbmdlX3BhcnRpYWwoaW50IGksIHU2NCBzdGFydCwgdTY0IGVuZCkKK3sKKwl1NjQgY29tbW9uX3N0YXJ0LCBjb21tb25fZW5kOworCXU2NCBvbGRfc3RhcnQsIG9sZF9lbmQ7CisKKwlvbGRfc3RhcnQgPSBlYXJseV9yZXNbaV0uc3RhcnQ7CisJb2xkX2VuZCA9IGVhcmx5X3Jlc1tpXS5lbmQ7CisJY29tbW9uX3N0YXJ0ID0gbWF4KG9sZF9zdGFydCwgc3RhcnQpOworCWNvbW1vbl9lbmQgPSBtaW4ob2xkX2VuZCwgZW5kKTsKKworCS8qIG5vIG92ZXJsYXAgPyAqLworCWlmIChjb21tb25fc3RhcnQgPj0gY29tbW9uX2VuZCkKKwkJcmV0dXJuOworCisJaWYgKG9sZF9zdGFydCA8IGNvbW1vbl9zdGFydCkgeworCQkvKiBtYWtlIGhlYWQgc2VnbWVudCAqLworCQllYXJseV9yZXNbaV0uZW5kID0gY29tbW9uX3N0YXJ0OworCQlpZiAob2xkX2VuZCA+IGNvbW1vbl9lbmQpIHsKKwkJCWNoYXIgbmFtZVsxNV07CisKKwkJCS8qCisJCQkgKiBTYXZlIGEgbG9jYWwgY29weSBvZiB0aGUgbmFtZSwgc2luY2UgdGhlCisJCQkgKiBlYXJseV9yZXMgYXJyYXkgY291bGQgZ2V0IHJlc2l6ZWQgaW5zaWRlCisJCQkgKiByZXNlcnZlX2Vhcmx5X3dpdGhvdXRfY2hlY2soKSAtPgorCQkJICogX19jaGVja19hbmRfZG91YmxlX2Vhcmx5X3JlcygpLCB3aGljaCB3b3VsZAorCQkJICogbWFrZSB0aGUgY3VycmVudCBuYW1lIHBvaW50ZXIgaW52YWxpZC4KKwkJCSAqLworCQkJc3RybmNweShuYW1lLCBlYXJseV9yZXNbaV0ubmFtZSwKKwkJCQkJIHNpemVvZihlYXJseV9yZXNbaV0ubmFtZSkgLSAxKTsKKwkJCS8qIGFkZCBhbm90aGVyIGZvciBsZWZ0IG92ZXIgb24gdGFpbCAqLworCQkJcmVzZXJ2ZV9lYXJseV93aXRob3V0X2NoZWNrKGNvbW1vbl9lbmQsIG9sZF9lbmQsIG5hbWUpOworCQl9CisJCXJldHVybjsKKwl9IGVsc2UgeworCQlpZiAob2xkX2VuZCA+IGNvbW1vbl9lbmQpIHsKKwkJCS8qIHJldXNlIHRoZSBlbnRyeSBmb3IgdGFpbCBsZWZ0ICovCisJCQllYXJseV9yZXNbaV0uc3RhcnQgPSBjb21tb25fZW5kOworCQkJcmV0dXJuOworCQl9CisJCS8qIGFsbCBjb3ZlcmVkICovCisJCWRyb3BfcmFuZ2UoaSk7CisJfQorfQorCisvKgorICogU3BsaXQgYW55IGV4aXN0aW5nIHJhbmdlcyB0aGF0OgorICogIDEpIGFyZSBtYXJrZWQgJ292ZXJsYXBfb2snLCBhbmQKKyAqICAyKSBvdmVybGFwIHdpdGggdGhlIHN0YXRlZCByYW5nZSBbc3RhcnQsIGVuZCkKKyAqIGludG8gd2hhdGV2ZXIgcG9ydGlvbiAoaWYgYW55KSBvZiB0aGUgZXhpc3RpbmcgcmFuZ2UgaXMgZW50aXJlbHkKKyAqIGJlbG93IG9yIGVudGlyZWx5IGFib3ZlIHRoZSBzdGF0ZWQgcmFuZ2UuICBEcm9wIHRoZSBwb3J0aW9uCisgKiBvZiB0aGUgZXhpc3RpbmcgcmFuZ2UgdGhhdCBvdmVybGFwcyB3aXRoIHRoZSBzdGF0ZWQgcmFuZ2UsCisgKiB3aGljaCB3aWxsIGFsbG93IHRoZSBjYWxsZXIgb2YgdGhpcyByb3V0aW5lIHRvIHRoZW4gYWRkIHRoYXQKKyAqIHN0YXRlZCByYW5nZSB3aXRob3V0IGNvbmZsaWN0aW5nIHdpdGggYW55IGV4aXN0aW5nIHJhbmdlLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgZHJvcF9vdmVybGFwc190aGF0X2FyZV9vayh1NjQgc3RhcnQsIHU2NCBlbmQpCit7CisJaW50IGk7CisJc3RydWN0IGVhcmx5X3JlcyAqcjsKKwl1NjQgbG93ZXJfc3RhcnQsIGxvd2VyX2VuZDsKKwl1NjQgdXBwZXJfc3RhcnQsIHVwcGVyX2VuZDsKKwljaGFyIG5hbWVbMTVdOworCisJZm9yIChpID0gMDsgaSA8IG1heF9lYXJseV9yZXMgJiYgZWFybHlfcmVzW2ldLmVuZDsgaSsrKSB7CisJCXIgPSAmZWFybHlfcmVzW2ldOworCisJCS8qIENvbnRpbnVlIHBhc3Qgbm9uLW92ZXJsYXBwaW5nIHJhbmdlcyAqLworCQlpZiAoZW5kIDw9IHItPnN0YXJ0IHx8IHN0YXJ0ID49IHItPmVuZCkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIExlYXZlIG5vbi1vayBvdmVybGFwcyBhcyBpczsgbGV0IGNhbGxlcgorCQkgKiBwYW5pYyAiT3ZlcmxhcHBpbmcgZWFybHkgcmVzZXJ2YXRpb25zIgorCQkgKiB3aGVuIGl0IGhpdHMgdGhpcyBvdmVybGFwLgorCQkgKi8KKwkJaWYgKCFyLT5vdmVybGFwX29rKQorCQkJcmV0dXJuOworCisJCS8qCisJCSAqIFdlIGhhdmUgYW4gb2sgb3ZlcmxhcC4gIFdlIHdpbGwgZHJvcCBpdCBmcm9tIHRoZSBlYXJseQorCQkgKiByZXNlcnZhdGlvbiBtYXAsIGFuZCBhZGQgYmFjayBpbiBhbnkgbm9uLW92ZXJsYXBwaW5nCisJCSAqIHBvcnRpb25zIChsb3dlciBvciB1cHBlcikgYXMgc2VwYXJhdGUsIG92ZXJsYXBfb2ssCisJCSAqIG5vbi1vdmVybGFwcGluZyByYW5nZXMuCisJCSAqLworCisJCS8qIDEuIE5vdGUgYW55IG5vbi1vdmVybGFwcGluZyAobG93ZXIgb3IgdXBwZXIpIHJhbmdlcy4gKi8KKwkJc3RybmNweShuYW1lLCByLT5uYW1lLCBzaXplb2YobmFtZSkgLSAxKTsKKworCQlsb3dlcl9zdGFydCA9IGxvd2VyX2VuZCA9IDA7CisJCXVwcGVyX3N0YXJ0ID0gdXBwZXJfZW5kID0gMDsKKwkJaWYgKHItPnN0YXJ0IDwgc3RhcnQpIHsKKwkJCWxvd2VyX3N0YXJ0ID0gci0+c3RhcnQ7CisJCQlsb3dlcl9lbmQgPSBzdGFydDsKKwkJfQorCQlpZiAoci0+ZW5kID4gZW5kKSB7CisJCQl1cHBlcl9zdGFydCA9IGVuZDsKKwkJCXVwcGVyX2VuZCA9IHItPmVuZDsKKwkJfQorCisJCS8qIDIuIERyb3AgdGhlIG9yaWdpbmFsIG9rIG92ZXJsYXBwaW5nIHJhbmdlICovCisJCWRyb3BfcmFuZ2UoaSk7CisKKwkJaS0tOwkJLyogcmVzdW1lIGZvci1sb29wIG9uIGNvcGllZCBkb3duIGVudHJ5ICovCisKKwkJLyogMy4gQWRkIGJhY2sgaW4gYW55IG5vbi1vdmVybGFwcGluZyByYW5nZXMuICovCisJCWlmIChsb3dlcl9lbmQpCisJCQlyZXNlcnZlX2Vhcmx5X292ZXJsYXBfb2sobG93ZXJfc3RhcnQsIGxvd2VyX2VuZCwgbmFtZSk7CisJCWlmICh1cHBlcl9lbmQpCisJCQlyZXNlcnZlX2Vhcmx5X292ZXJsYXBfb2sodXBwZXJfc3RhcnQsIHVwcGVyX2VuZCwgbmFtZSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgX19yZXNlcnZlX2Vhcmx5KHU2NCBzdGFydCwgdTY0IGVuZCwgY2hhciAqbmFtZSwKKwkJCQkJCWludCBvdmVybGFwX29rKQoreworCWludCBpOworCXN0cnVjdCBlYXJseV9yZXMgKnI7CisKKwlpID0gZmluZF9vdmVybGFwcGVkX2Vhcmx5KHN0YXJ0LCBlbmQpOworCWlmIChpID49IG1heF9lYXJseV9yZXMpCisJCXBhbmljKCJUb28gbWFueSBlYXJseSByZXNlcnZhdGlvbnMiKTsKKwlyID0gJmVhcmx5X3Jlc1tpXTsKKwlpZiAoci0+ZW5kKQorCQlwYW5pYygiT3ZlcmxhcHBpbmcgZWFybHkgcmVzZXJ2YXRpb25zICIKKwkJICAgICAgIiVsbHgtJWxseCAlcyB0byAlbGx4LSVsbHggJXNcbiIsCisJCSAgICAgIHN0YXJ0LCBlbmQgLSAxLCBuYW1lID8gbmFtZSA6ICIiLCByLT5zdGFydCwKKwkJICAgICAgci0+ZW5kIC0gMSwgci0+bmFtZSk7CisJci0+c3RhcnQgPSBzdGFydDsKKwlyLT5lbmQgPSBlbmQ7CisJci0+b3ZlcmxhcF9vayA9IG92ZXJsYXBfb2s7CisJaWYgKG5hbWUpCisJCXN0cm5jcHkoci0+bmFtZSwgbmFtZSwgc2l6ZW9mKHItPm5hbWUpIC0gMSk7CisJZWFybHlfcmVzX2NvdW50Kys7Cit9CisKKy8qCisgKiBBIGZldyBlYXJseSByZXNlcnZ0YXRpb25zIGNvbWUgaGVyZS4KKyAqCisgKiBUaGUgJ292ZXJsYXBfb2snIGluIHRoZSBuYW1lIG9mIHRoaXMgcm91dGluZSBkb2VzIC1ub3QtIG1lYW4gaXQKKyAqIGlzIG9rIGZvciB0aGVzZSByZXNlcnZhdGlvbnMgdG8gb3ZlcmxhcCBhbiBlYXJsaWVyIHJlc2VydmF0aW9uLgorICogUmF0aGVyIGl0IG1lYW5zIHRoYXQgaXQgaXMgb2sgZm9yIHN1YnNlcXVlbnQgcmVzZXJ2YXRpb25zIHRvCisgKiBvdmVybGFwIHRoaXMgb25lLgorICoKKyAqIFVzZSB0aGlzIGVudHJ5IHBvaW50IHRvIHJlc2VydmUgZWFybHkgcmFuZ2VzIHdoZW4geW91IGFyZSBkb2luZworICogc28gb3V0IG9mICJQYXJhbm9pYSIsIHJlc2VydmluZyBwZXJoYXBzIG1vcmUgbWVtb3J5IHRoYW4geW91IG5lZWQsCisgKiBqdXN0IGluIGNhc2UsIGFuZCBkb24ndCBtaW5kIGEgc3Vic2VxdWVudCBvdmVybGFwcGluZyByZXNlcnZhdGlvbgorICogdGhhdCBpcyBrbm93biB0byBiZSBuZWVkZWQuCisgKgorICogVGhlIGRyb3Bfb3ZlcmxhcHNfdGhhdF9hcmVfb2soKSBjYWxsIGhlcmUgaXNuJ3QgcmVhbGx5IG5lZWRlZC4KKyAqIEl0IHdvdWxkIGJlIG5lZWRlZCBpZiB3ZSBoYWQgdHdvIGNvbGxpZGluZyAnb3ZlcmxhcF9vaycKKyAqIHJlc2VydmF0aW9ucywgc28gdGhhdCB0aGUgc2Vjb25kIHN1Y2ggd291bGQgbm90IHBhbmljIG9uIHRoZQorICogb3ZlcmxhcCB3aXRoIHRoZSBmaXJzdC4gIFdlIGRvbid0IGhhdmUgYW55IHN1Y2ggYXMgb2YgdGhpcworICogd3JpdGluZywgYnV0IG1pZ2h0IGFzIHdlbGwgdG9sZXJhdGUgc3VjaCBpZiBpdCBoYXBwZW5zIGluCisgKiB0aGUgZnV0dXJlLgorICovCit2b2lkIF9faW5pdCByZXNlcnZlX2Vhcmx5X292ZXJsYXBfb2sodTY0IHN0YXJ0LCB1NjQgZW5kLCBjaGFyICpuYW1lKQoreworCWRyb3Bfb3ZlcmxhcHNfdGhhdF9hcmVfb2soc3RhcnQsIGVuZCk7CisJX19yZXNlcnZlX2Vhcmx5KHN0YXJ0LCBlbmQsIG5hbWUsIDEpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgX19jaGVja19hbmRfZG91YmxlX2Vhcmx5X3Jlcyh1NjQgZXhfc3RhcnQsIHU2NCBleF9lbmQpCit7CisJdTY0IHN0YXJ0LCBlbmQsIHNpemUsIG1lbTsKKwlzdHJ1Y3QgZWFybHlfcmVzICpuZXc7CisKKwkvKiBkbyB3ZSBoYXZlIGVub3VnaCBzbG90cyBsZWZ0ID8gKi8KKwlpZiAoKG1heF9lYXJseV9yZXMgLSBlYXJseV9yZXNfY291bnQpID4gbWF4KG1heF9lYXJseV9yZXMvOCwgMikpCisJCXJldHVybjsKKworCS8qIGRvdWJsZSBpdCAqLworCW1lbSA9IC0xVUxMOworCXNpemUgPSBzaXplb2Yoc3RydWN0IGVhcmx5X3JlcykgKiBtYXhfZWFybHlfcmVzICogMjsKKwlpZiAoZWFybHlfcmVzID09IGVhcmx5X3Jlc194KQorCQlzdGFydCA9IDA7CisJZWxzZQorCQlzdGFydCA9IGVhcmx5X3Jlc1swXS5lbmQ7CisJZW5kID0gZXhfc3RhcnQ7CisJaWYgKHN0YXJ0ICsgc2l6ZSA8IGVuZCkKKwkJbWVtID0gZmluZF9md19tZW1tYXBfYXJlYShzdGFydCwgZW5kLCBzaXplLAorCQkJCQkgc2l6ZW9mKHN0cnVjdCBlYXJseV9yZXMpKTsKKwlpZiAobWVtID09IC0xVUxMKSB7CisJCXN0YXJ0ID0gZXhfZW5kOworCQllbmQgPSBnZXRfbWF4X21hcHBlZCgpOworCQlpZiAoc3RhcnQgKyBzaXplIDwgZW5kKQorCQkJbWVtID0gZmluZF9md19tZW1tYXBfYXJlYShzdGFydCwgZW5kLCBzaXplLAorCQkJCQkJIHNpemVvZihzdHJ1Y3QgZWFybHlfcmVzKSk7CisJfQorCWlmIChtZW0gPT0gLTFVTEwpCisJCXBhbmljKCJjYW4gbm90IGZpbmQgbW9yZSBzcGFjZSBmb3IgZWFybHlfcmVzIGFycmF5Iik7CisKKwluZXcgPSBfX3ZhKG1lbSk7CisJLyogc2F2ZSB0aGUgZmlyc3Qgb25lIGZvciBvd24gKi8KKwluZXdbMF0uc3RhcnQgPSBtZW07CisJbmV3WzBdLmVuZCA9IG1lbSArIHNpemU7CisJbmV3WzBdLm92ZXJsYXBfb2sgPSAwOworCS8qIGNvcHkgb2xkIHRvIG5ldyAqLworCWlmIChlYXJseV9yZXMgPT0gZWFybHlfcmVzX3gpIHsKKwkJbWVtY3B5KCZuZXdbMV0sICZlYXJseV9yZXNbMF0sCisJCQkgc2l6ZW9mKHN0cnVjdCBlYXJseV9yZXMpICogbWF4X2Vhcmx5X3Jlcyk7CisJCW1lbXNldCgmbmV3W21heF9lYXJseV9yZXMrMV0sIDAsCisJCQkgc2l6ZW9mKHN0cnVjdCBlYXJseV9yZXMpICogKG1heF9lYXJseV9yZXMgLSAxKSk7CisJCWVhcmx5X3Jlc19jb3VudCsrOworCX0gZWxzZSB7CisJCW1lbWNweSgmbmV3WzFdLCAmZWFybHlfcmVzWzFdLAorCQkJIHNpemVvZihzdHJ1Y3QgZWFybHlfcmVzKSAqIChtYXhfZWFybHlfcmVzIC0gMSkpOworCQltZW1zZXQoJm5ld1ttYXhfZWFybHlfcmVzXSwgMCwKKwkJCSBzaXplb2Yoc3RydWN0IGVhcmx5X3JlcykgKiBtYXhfZWFybHlfcmVzKTsKKwl9CisJbWVtc2V0KCZlYXJseV9yZXNbMF0sIDAsIHNpemVvZihzdHJ1Y3QgZWFybHlfcmVzKSAqIG1heF9lYXJseV9yZXMpOworCWVhcmx5X3JlcyA9IG5ldzsKKwltYXhfZWFybHlfcmVzICo9IDI7CisJcHJpbnRrKEtFUk5fREVCVUcgImVhcmx5X3JlcyBhcnJheSBpcyBkb3VibGVkIHRvICVkIGF0IFslbGx4IC0gJWxseF1cbiIsCisJCW1heF9lYXJseV9yZXMsIG1lbSwgbWVtICsgc2l6ZSAtIDEpOworfQorCisvKgorICogTW9zdCBlYXJseSByZXNlcnZhdGlvbnMgY29tZSBoZXJlLgorICoKKyAqIFdlIGZpcnN0IGhhdmUgZHJvcF9vdmVybGFwc190aGF0X2FyZV9vaygpIGRyb3AgYW55IHByZS1leGlzdGluZworICogJ292ZXJsYXBfb2snIHJhbmdlcywgc28gdGhhdCB3ZSBjYW4gdGhlbiByZXNlcnZlIHRoaXMgbWVtb3J5CisgKiByYW5nZSB3aXRob3V0IHJpc2sgb2YgcGFuaWMnaW5nIG9uIGFuIG92ZXJsYXBwaW5nIG92ZXJsYXBfb2sKKyAqIGVhcmx5IHJlc2VydmF0aW9uLgorICovCit2b2lkIF9faW5pdCByZXNlcnZlX2Vhcmx5KHU2NCBzdGFydCwgdTY0IGVuZCwgY2hhciAqbmFtZSkKK3sKKwlpZiAoc3RhcnQgPj0gZW5kKQorCQlyZXR1cm47CisKKwlfX2NoZWNrX2FuZF9kb3VibGVfZWFybHlfcmVzKHN0YXJ0LCBlbmQpOworCisJZHJvcF9vdmVybGFwc190aGF0X2FyZV9vayhzdGFydCwgZW5kKTsKKwlfX3Jlc2VydmVfZWFybHkoc3RhcnQsIGVuZCwgbmFtZSwgMCk7Cit9CisKK3ZvaWQgX19pbml0IHJlc2VydmVfZWFybHlfd2l0aG91dF9jaGVjayh1NjQgc3RhcnQsIHU2NCBlbmQsIGNoYXIgKm5hbWUpCit7CisJc3RydWN0IGVhcmx5X3JlcyAqcjsKKworCWlmIChzdGFydCA+PSBlbmQpCisJCXJldHVybjsKKworCV9fY2hlY2tfYW5kX2RvdWJsZV9lYXJseV9yZXMoc3RhcnQsIGVuZCk7CisKKwlyID0gJmVhcmx5X3Jlc1tlYXJseV9yZXNfY291bnRdOworCisJci0+c3RhcnQgPSBzdGFydDsKKwlyLT5lbmQgPSBlbmQ7CisJci0+b3ZlcmxhcF9vayA9IDA7CisJaWYgKG5hbWUpCisJCXN0cm5jcHkoci0+bmFtZSwgbmFtZSwgc2l6ZW9mKHItPm5hbWUpIC0gMSk7CisJZWFybHlfcmVzX2NvdW50Kys7Cit9CisKK3ZvaWQgX19pbml0IGZyZWVfZWFybHkodTY0IHN0YXJ0LCB1NjQgZW5kKQoreworCXN0cnVjdCBlYXJseV9yZXMgKnI7CisJaW50IGk7CisKKwlpID0gZmluZF9vdmVybGFwcGVkX2Vhcmx5KHN0YXJ0LCBlbmQpOworCXIgPSAmZWFybHlfcmVzW2ldOworCWlmIChpID49IG1heF9lYXJseV9yZXMgfHwgci0+ZW5kICE9IGVuZCB8fCByLT5zdGFydCAhPSBzdGFydCkKKwkJcGFuaWMoImZyZWVfZWFybHkgb24gbm90IHJlc2VydmVkIGFyZWE6ICVsbHgtJWxseCEiLAorCQkJIHN0YXJ0LCBlbmQgLSAxKTsKKworCWRyb3BfcmFuZ2UoaSk7Cit9CisKK3ZvaWQgX19pbml0IGZyZWVfZWFybHlfcGFydGlhbCh1NjQgc3RhcnQsIHU2NCBlbmQpCit7CisJc3RydWN0IGVhcmx5X3JlcyAqcjsKKwlpbnQgaTsKKwordHJ5X25leHQ6CisJaSA9IGZpbmRfb3ZlcmxhcHBlZF9lYXJseShzdGFydCwgZW5kKTsKKwlpZiAoaSA+PSBtYXhfZWFybHlfcmVzKQorCQlyZXR1cm47CisKKwlyID0gJmVhcmx5X3Jlc1tpXTsKKwkvKiBob2xlID8gKi8KKwlpZiAoci0+ZW5kID49IGVuZCAmJiByLT5zdGFydCA8PSBzdGFydCkgeworCQlkcm9wX3JhbmdlX3BhcnRpYWwoaSwgc3RhcnQsIGVuZCk7CisJCXJldHVybjsKKwl9CisKKwlkcm9wX3JhbmdlX3BhcnRpYWwoaSwgc3RhcnQsIGVuZCk7CisJZ290byB0cnlfbmV4dDsKK30KKworI2lmZGVmIENPTkZJR19OT19CT09UTUVNCitzdGF0aWMgdm9pZCBfX2luaXQgc3VidHJhY3RfZWFybHlfcmVzKHN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCBheikKK3sKKwlpbnQgaSwgY291bnQ7CisJdTY0IGZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQ7CisJaW50IGlkeCA9IDA7CisKKwljb3VudCAgPSAwOworCWZvciAoaSA9IDA7IGkgPCBtYXhfZWFybHlfcmVzICYmIGVhcmx5X3Jlc1tpXS5lbmQ7IGkrKykKKwkJY291bnQrKzsKKworCS8qIG5lZWQgdG8gc2tpcCBmaXJzdCBvbmUgPyovCisJaWYgKGVhcmx5X3JlcyAhPSBlYXJseV9yZXNfeCkKKwkJaWR4ID0gMTsKKworI2RlZmluZSBERUJVR19QUklOVF9FQVJMWV9SRVMgMQorCisjaWYgREVCVUdfUFJJTlRfRUFSTFlfUkVTCisJcHJpbnRrKEtFUk5fSU5GTyAiU3VidHJhY3QgKCVkIGVhcmx5IHJlc2VydmF0aW9ucylcbiIsIGNvdW50KTsKKyNlbmRpZgorCWZvciAoaSA9IGlkeDsgaSA8IGNvdW50OyBpKyspIHsKKwkJc3RydWN0IGVhcmx5X3JlcyAqciA9ICZlYXJseV9yZXNbaV07CisjaWYgREVCVUdfUFJJTlRfRUFSTFlfUkVTCisJCXByaW50ayhLRVJOX0lORk8gIiAgIyVkIFslMDEwbGx4IC0gJTAxMGxseF0gJTE1c1xuIiwgaSwKKwkJCXItPnN0YXJ0LCByLT5lbmQsIHItPm5hbWUpOworI2VuZGlmCisJCWZpbmFsX3N0YXJ0ID0gUEZOX0RPV04oci0+c3RhcnQpOworCQlmaW5hbF9lbmQgPSBQRk5fVVAoci0+ZW5kKTsKKwkJaWYgKGZpbmFsX3N0YXJ0ID49IGZpbmFsX2VuZCkKKwkJCWNvbnRpbnVlOworCQlzdWJ0cmFjdF9yYW5nZShyYW5nZSwgYXosIGZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQpOworCX0KKworfQorCitpbnQgX19pbml0IGdldF9mcmVlX2FsbF9tZW1vcnlfcmFuZ2Uoc3RydWN0IHJhbmdlICoqcmFuZ2VwLCBpbnQgbm9kZWlkKQoreworCWludCBpLCBjb3VudDsKKwl1NjQgc3RhcnQgPSAwLCBlbmQ7CisJdTY0IHNpemU7CisJdTY0IG1lbTsKKwlzdHJ1Y3QgcmFuZ2UgKnJhbmdlOworCWludCBucl9yYW5nZTsKKworCWNvdW50ICA9IDA7CisJZm9yIChpID0gMDsgaSA8IG1heF9lYXJseV9yZXMgJiYgZWFybHlfcmVzW2ldLmVuZDsgaSsrKQorCQljb3VudCsrOworCisJY291bnQgKj0gMjsKKworCXNpemUgPSBzaXplb2Yoc3RydWN0IHJhbmdlKSAqIGNvdW50OworCWVuZCA9IGdldF9tYXhfbWFwcGVkKCk7CisjaWZkZWYgTUFYX0RNQTMyX1BGTgorCWlmIChlbmQgPiAoTUFYX0RNQTMyX1BGTiA8PCBQQUdFX1NISUZUKSkKKwkJc3RhcnQgPSBNQVhfRE1BMzJfUEZOIDw8IFBBR0VfU0hJRlQ7CisjZW5kaWYKKwltZW0gPSBmaW5kX2Z3X21lbW1hcF9hcmVhKHN0YXJ0LCBlbmQsIHNpemUsIHNpemVvZihzdHJ1Y3QgcmFuZ2UpKTsKKwlpZiAobWVtID09IC0xVUxMKQorCQlwYW5pYygiY2FuIG5vdCBmaW5kIG1vcmUgc3BhY2UgZm9yIHJhbmdlIGZyZWUiKTsKKworCXJhbmdlID0gX192YShtZW0pOworCS8qIHVzZSBlYXJseV9ub2RlX21hcFtdIGFuZCBlYXJseV9yZXMgdG8gZ2V0IHJhbmdlIGFycmF5IGF0IGZpcnN0ICovCisJbWVtc2V0KHJhbmdlLCAwLCBzaXplKTsKKwlucl9yYW5nZSA9IDA7CisKKwkvKiBuZWVkIHRvIGdvIG92ZXIgZWFybHlfbm9kZV9tYXAgdG8gZmluZCBvdXQgZ29vZCByYW5nZSBmb3Igbm9kZSAqLworCW5yX3JhbmdlID0gYWRkX2Zyb21fZWFybHlfbm9kZV9tYXAocmFuZ2UsIGNvdW50LCBucl9yYW5nZSwgbm9kZWlkKTsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJc3VidHJhY3RfcmFuZ2UocmFuZ2UsIGNvdW50LCBtYXhfbG93X3BmbiwgLTFVTEwpOworI2VuZGlmCisJc3VidHJhY3RfZWFybHlfcmVzKHJhbmdlLCBjb3VudCk7CisJbnJfcmFuZ2UgPSBjbGVhbl9zb3J0X3JhbmdlKHJhbmdlLCBjb3VudCk7CisKKwkvKiBuZWVkIHRvIGNsZWFyIGl0ID8gKi8KKwlpZiAobm9kZWlkID09IE1BWF9OVU1OT0RFUykgeworCQltZW1zZXQoJmVhcmx5X3Jlc1swXSwgMCwKKwkJCSBzaXplb2Yoc3RydWN0IGVhcmx5X3JlcykgKiBtYXhfZWFybHlfcmVzKTsKKwkJZWFybHlfcmVzID0gTlVMTDsKKwkJbWF4X2Vhcmx5X3JlcyA9IDA7CisJfQorCisJKnJhbmdlcCA9IHJhbmdlOworCXJldHVybiBucl9yYW5nZTsKK30KKyNlbHNlCit2b2lkIF9faW5pdCBlYXJseV9yZXNfdG9fYm9vdG1lbSh1NjQgc3RhcnQsIHU2NCBlbmQpCit7CisJaW50IGksIGNvdW50OworCXU2NCBmaW5hbF9zdGFydCwgZmluYWxfZW5kOworCWludCBpZHggPSAwOworCisJY291bnQgID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbWF4X2Vhcmx5X3JlcyAmJiBlYXJseV9yZXNbaV0uZW5kOyBpKyspCisJCWNvdW50Kys7CisKKwkvKiBuZWVkIHRvIHNraXAgZmlyc3Qgb25lID8qLworCWlmIChlYXJseV9yZXMgIT0gZWFybHlfcmVzX3gpCisJCWlkeCA9IDE7CisKKwlwcmludGsoS0VSTl9JTkZPICIoJWQvJWQgZWFybHkgcmVzZXJ2YXRpb25zKSA9PT4gYm9vdG1lbSBbJTAxMGxseCAtICUwMTBsbHhdXG4iLAorCQkJIGNvdW50IC0gaWR4LCBtYXhfZWFybHlfcmVzLCBzdGFydCwgZW5kKTsKKwlmb3IgKGkgPSBpZHg7IGkgPCBjb3VudDsgaSsrKSB7CisJCXN0cnVjdCBlYXJseV9yZXMgKnIgPSAmZWFybHlfcmVzW2ldOworCQlwcmludGsoS0VSTl9JTkZPICIgICMlZCBbJTAxMGxseCAtICUwMTBsbHhdICUxNnMiLCBpLAorCQkJci0+c3RhcnQsIHItPmVuZCwgci0+bmFtZSk7CisJCWZpbmFsX3N0YXJ0ID0gbWF4KHN0YXJ0LCByLT5zdGFydCk7CisJCWZpbmFsX2VuZCA9IG1pbihlbmQsIHItPmVuZCk7CisJCWlmIChmaW5hbF9zdGFydCA+PSBmaW5hbF9lbmQpIHsKKwkJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisJCQljb250aW51ZTsKKwkJfQorCQlwcmludGsoS0VSTl9DT05UICIgPT0+IFslMDEwbGx4IC0gJTAxMGxseF1cbiIsCisJCQlmaW5hbF9zdGFydCwgZmluYWxfZW5kKTsKKwkJcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWMoZmluYWxfc3RhcnQsIGZpbmFsX2VuZCAtIGZpbmFsX3N0YXJ0LAorCQkJCUJPT1RNRU1fREVGQVVMVCk7CisJfQorCS8qIGNsZWFyIHRoZW0gKi8KKwltZW1zZXQoJmVhcmx5X3Jlc1swXSwgMCwgc2l6ZW9mKHN0cnVjdCBlYXJseV9yZXMpICogbWF4X2Vhcmx5X3Jlcyk7CisJZWFybHlfcmVzID0gTlVMTDsKKwltYXhfZWFybHlfcmVzID0gMDsKKwllYXJseV9yZXNfY291bnQgPSAwOworfQorI2VuZGlmCisKKy8qIENoZWNrIGZvciBhbHJlYWR5IHJlc2VydmVkIGFyZWFzICovCitzdGF0aWMgaW5saW5lIGludCBfX2luaXQgYmFkX2FkZHIodTY0ICphZGRycCwgdTY0IHNpemUsIHU2NCBhbGlnbikKK3sKKwlpbnQgaTsKKwl1NjQgYWRkciA9ICphZGRycDsKKwlpbnQgY2hhbmdlZCA9IDA7CisJc3RydWN0IGVhcmx5X3JlcyAqcjsKK2FnYWluOgorCWkgPSBmaW5kX292ZXJsYXBwZWRfZWFybHkoYWRkciwgYWRkciArIHNpemUpOworCXIgPSAmZWFybHlfcmVzW2ldOworCWlmIChpIDwgbWF4X2Vhcmx5X3JlcyAmJiByLT5lbmQpIHsKKwkJKmFkZHJwID0gYWRkciA9IHJvdW5kX3VwKHItPmVuZCwgYWxpZ24pOworCQljaGFuZ2VkID0gMTsKKwkJZ290byBhZ2FpbjsKKwl9CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKKy8qIENoZWNrIGZvciBhbHJlYWR5IHJlc2VydmVkIGFyZWFzICovCitzdGF0aWMgaW5saW5lIGludCBfX2luaXQgYmFkX2FkZHJfc2l6ZSh1NjQgKmFkZHJwLCB1NjQgKnNpemVwLCB1NjQgYWxpZ24pCit7CisJaW50IGk7CisJdTY0IGFkZHIgPSAqYWRkcnAsIGxhc3Q7CisJdTY0IHNpemUgPSAqc2l6ZXA7CisJaW50IGNoYW5nZWQgPSAwOworYWdhaW46CisJbGFzdCA9IGFkZHIgKyBzaXplOworCWZvciAoaSA9IDA7IGkgPCBtYXhfZWFybHlfcmVzICYmIGVhcmx5X3Jlc1tpXS5lbmQ7IGkrKykgeworCQlzdHJ1Y3QgZWFybHlfcmVzICpyID0gJmVhcmx5X3Jlc1tpXTsKKwkJaWYgKGxhc3QgPiByLT5zdGFydCAmJiBhZGRyIDwgci0+c3RhcnQpIHsKKwkJCXNpemUgPSByLT5zdGFydCAtIGFkZHI7CisJCQljaGFuZ2VkID0gMTsKKwkJCWdvdG8gYWdhaW47CisJCX0KKwkJaWYgKGxhc3QgPiByLT5lbmQgJiYgYWRkciA8IHItPmVuZCkgeworCQkJYWRkciA9IHJvdW5kX3VwKHItPmVuZCwgYWxpZ24pOworCQkJc2l6ZSA9IGxhc3QgLSBhZGRyOworCQkJY2hhbmdlZCA9IDE7CisJCQlnb3RvIGFnYWluOworCQl9CisJCWlmIChsYXN0IDw9IHItPmVuZCAmJiBhZGRyID49IHItPnN0YXJ0KSB7CisJCQkoKnNpemVwKSsrOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJaWYgKGNoYW5nZWQpIHsKKwkJKmFkZHJwID0gYWRkcjsKKwkJKnNpemVwID0gc2l6ZTsKKwl9CisJcmV0dXJuIGNoYW5nZWQ7Cit9CisKKy8qCisgKiBGaW5kIGEgZnJlZSBhcmVhIHdpdGggc3BlY2lmaWVkIGFsaWdubWVudCBpbiBhIHNwZWNpZmljIHJhbmdlLgorICogb25seSB3aXRoIHRoZSBhcmVhLmJldHdlZW4gc3RhcnQgdG8gZW5kIGlzIGFjdGl2ZSByYW5nZSBmcm9tIGVhcmx5X25vZGVfbWFwCisgKiBzbyB0aGV5IGFyZSBnb29kIGFzIFJBTQorICovCit1NjQgX19pbml0IGZpbmRfZWFybHlfYXJlYSh1NjQgZWlfc3RhcnQsIHU2NCBlaV9sYXN0LCB1NjQgc3RhcnQsIHU2NCBlbmQsCisJCQkgdTY0IHNpemUsIHU2NCBhbGlnbikKK3sKKwl1NjQgYWRkciwgbGFzdDsKKworCWFkZHIgPSByb3VuZF91cChlaV9zdGFydCwgYWxpZ24pOworCWlmIChhZGRyIDwgc3RhcnQpCisJCWFkZHIgPSByb3VuZF91cChzdGFydCwgYWxpZ24pOworCWlmIChhZGRyID49IGVpX2xhc3QpCisJCWdvdG8gb3V0OworCXdoaWxlIChiYWRfYWRkcigmYWRkciwgc2l6ZSwgYWxpZ24pICYmIGFkZHIrc2l6ZSA8PSBlaV9sYXN0KQorCQk7CisJbGFzdCA9IGFkZHIgKyBzaXplOworCWlmIChsYXN0ID4gZWlfbGFzdCkKKwkJZ290byBvdXQ7CisJaWYgKGxhc3QgPiBlbmQpCisJCWdvdG8gb3V0OworCisJcmV0dXJuIGFkZHI7CisKK291dDoKKwlyZXR1cm4gLTFVTEw7Cit9CisKK3U2NCBfX2luaXQgZmluZF9lYXJseV9hcmVhX3NpemUodTY0IGVpX3N0YXJ0LCB1NjQgZWlfbGFzdCwgdTY0IHN0YXJ0LAorCQkJIHU2NCAqc2l6ZXAsIHU2NCBhbGlnbikKK3sKKwl1NjQgYWRkciwgbGFzdDsKKworCWFkZHIgPSByb3VuZF91cChlaV9zdGFydCwgYWxpZ24pOworCWlmIChhZGRyIDwgc3RhcnQpCisJCWFkZHIgPSByb3VuZF91cChzdGFydCwgYWxpZ24pOworCWlmIChhZGRyID49IGVpX2xhc3QpCisJCWdvdG8gb3V0OworCSpzaXplcCA9IGVpX2xhc3QgLSBhZGRyOworCXdoaWxlIChiYWRfYWRkcl9zaXplKCZhZGRyLCBzaXplcCwgYWxpZ24pICYmIGFkZHIgKyAqc2l6ZXAgPD0gZWlfbGFzdCkKKwkJOworCWxhc3QgPSBhZGRyICsgKnNpemVwOworCWlmIChsYXN0ID4gZWlfbGFzdCkKKwkJZ290byBvdXQ7CisKKwlyZXR1cm4gYWRkcjsKKworb3V0OgorCXJldHVybiAtMVVMTDsKK30KZGlmZiAtLWdpdCBhL2tlcm5lbC9lbGZjb3JlLmMgYi9rZXJuZWwvZWxmY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmOTE1ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvZWxmY29yZS5jCkBAIC0wLDAgKzEsMjggQEAKKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisKKyNpbmNsdWRlIDxhc20vZWxmLmg+CisKKworRWxmX0hhbGYgX193ZWFrIGVsZl9jb3JlX2V4dHJhX3BoZHJzKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCBfX3dlYWsgZWxmX2NvcmVfd3JpdGVfZXh0cmFfcGhkcnMoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIHNpemVfdCAqc2l6ZSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGxpbWl0KQoreworCXJldHVybiAxOworfQorCitpbnQgX193ZWFrIGVsZl9jb3JlX3dyaXRlX2V4dHJhX2RhdGEoc3RydWN0IGZpbGUgKmZpbGUsIHNpemVfdCAqc2l6ZSwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgbGltaXQpCit7CisJcmV0dXJuIDE7Cit9CisKK3NpemVfdCBfX3dlYWsgZWxmX2NvcmVfZXh0cmFfZGF0YV9zaXplKHZvaWQpCit7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvZXhpdC5jIGIva2VybmVsL2V4aXQuYwppbmRleCA0NWVkMDQzLi5jZTFlNDhjIDEwMDY0NAotLS0gYS9rZXJuZWwvZXhpdC5jCisrKyBiL2tlcm5lbC9leGl0LmMKQEAgLTk1Miw3ICs5NTIsOCBAQAogCQkJCXByZWVtcHRfY291bnQoKSk7CiAKIAlhY2N0X3VwZGF0ZV9pbnRlZ3JhbHModHNrKTsKLQorCS8qIHN5bmMgbW0ncyBSU1MgaW5mbyBiZWZvcmUgc3RhdGlzdGljcyBnYXRoZXJpbmcgKi8KKwlzeW5jX21tX3Jzcyh0c2ssIHRzay0+bW0pOwogCWdyb3VwX2RlYWQgPSBhdG9taWNfZGVjX2FuZF90ZXN0KCZ0c2stPnNpZ25hbC0+bGl2ZSk7CiAJaWYgKGdyb3VwX2RlYWQpIHsKIAkJaHJ0aW1lcl9jYW5jZWwoJnRzay0+c2lnbmFsLT5yZWFsX3RpbWVyKTsKQEAgLTExODgsNyArMTE4OSw3IEBACiAKIAlpZiAodW5saWtlbHkod28tPndvX2ZsYWdzICYgV05PV0FJVCkpIHsKIAkJaW50IGV4aXRfY29kZSA9IHAtPmV4aXRfY29kZTsKLQkJaW50IHdoeSwgc3RhdHVzOworCQlpbnQgd2h5OwogCiAJCWdldF90YXNrX3N0cnVjdChwKTsKIAkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmMKaW5kZXggMTdiYmYwOS4uMWJlYjZjMyAxMDA2NDQKLS0tIGEva2VybmVsL2ZvcmsuYworKysgYi9rZXJuZWwvZm9yay5jCkBAIC0zMjksMTUgKzMyOSwxNyBAQAogCQlpZiAoIXRtcCkKIAkJCWdvdG8gZmFpbF9ub21lbTsKIAkJKnRtcCA9ICptcG50OworCQlJTklUX0xJU1RfSEVBRCgmdG1wLT5hbm9uX3ZtYV9jaGFpbik7CiAJCXBvbCA9IG1wb2xfZHVwKHZtYV9wb2xpY3kobXBudCkpOwogCQlyZXR2YWwgPSBQVFJfRVJSKHBvbCk7CiAJCWlmIChJU19FUlIocG9sKSkKIAkJCWdvdG8gZmFpbF9ub21lbV9wb2xpY3k7CiAJCXZtYV9zZXRfcG9saWN5KHRtcCwgcG9sKTsKKwkJaWYgKGFub25fdm1hX2ZvcmsodG1wLCBtcG50KSkKKwkJCWdvdG8gZmFpbF9ub21lbV9hbm9uX3ZtYV9mb3JrOwogCQl0bXAtPnZtX2ZsYWdzICY9IH5WTV9MT0NLRUQ7CiAJCXRtcC0+dm1fbW0gPSBtbTsKIAkJdG1wLT52bV9uZXh0ID0gTlVMTDsKLQkJYW5vbl92bWFfbGluayh0bXApOwogCQlmaWxlID0gdG1wLT52bV9maWxlOwogCQlpZiAoZmlsZSkgewogCQkJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CkBAIC0zOTIsNiArMzk0LDggQEAKIAlmbHVzaF90bGJfbW0ob2xkbW0pOwogCXVwX3dyaXRlKCZvbGRtbS0+bW1hcF9zZW0pOwogCXJldHVybiByZXR2YWw7CitmYWlsX25vbWVtX2Fub25fdm1hX2Zvcms6CisJbXBvbF9wdXQocG9sKTsKIGZhaWxfbm9tZW1fcG9saWN5OgogCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hlcCwgdG1wKTsKIGZhaWxfbm9tZW06CkBAIC00NTUsOCArNDU5LDcgQEAKIAkJKGN1cnJlbnQtPm1tLT5mbGFncyAmIE1NRl9JTklUX01BU0spIDogZGVmYXVsdF9kdW1wX2ZpbHRlcjsKIAltbS0+Y29yZV9zdGF0ZSA9IE5VTEw7CiAJbW0tPm5yX3B0ZXMgPSAwOwotCXNldF9tbV9jb3VudGVyKG1tLCBmaWxlX3JzcywgMCk7Ci0Jc2V0X21tX2NvdW50ZXIobW0sIGFub25fcnNzLCAwKTsKKwltZW1zZXQoJm1tLT5yc3Nfc3RhdCwgMCwgc2l6ZW9mKG1tLT5yc3Nfc3RhdCkpOwogCXNwaW5fbG9ja19pbml0KCZtbS0+cGFnZV90YWJsZV9sb2NrKTsKIAltbS0+ZnJlZV9hcmVhX2NhY2hlID0gVEFTS19VTk1BUFBFRF9CQVNFOwogCW1tLT5jYWNoZWRfaG9sZV9zaXplID0gfjBVTDsKQEAgLTgyNSwyMyArODI4LDE0IEBACiAgKi8KIHN0YXRpYyB2b2lkIHBvc2l4X2NwdV90aW1lcnNfaW5pdF9ncm91cChzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnKQogeworCXVuc2lnbmVkIGxvbmcgY3B1X2xpbWl0OworCiAJLyogVGhyZWFkIGdyb3VwIGNvdW50ZXJzLiAqLwogCXRocmVhZF9ncm91cF9jcHV0aW1lX2luaXQoc2lnKTsKIAotCS8qIEV4cGlyYXRpb24gdGltZXMgYW5kIGluY3JlbWVudHMuICovCi0Jc2lnLT5pdFtDUFVDTE9DS19QUk9GXS5leHBpcmVzID0gY3B1dGltZV96ZXJvOwotCXNpZy0+aXRbQ1BVQ0xPQ0tfUFJPRl0uaW5jciA9IGNwdXRpbWVfemVybzsKLQlzaWctPml0W0NQVUNMT0NLX1ZJUlRdLmV4cGlyZXMgPSBjcHV0aW1lX3plcm87Ci0Jc2lnLT5pdFtDUFVDTE9DS19WSVJUXS5pbmNyID0gY3B1dGltZV96ZXJvOwotCi0JLyogQ2FjaGVkIGV4cGlyYXRpb24gdGltZXMuICovCi0Jc2lnLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAgPSBjcHV0aW1lX3plcm87Ci0Jc2lnLT5jcHV0aW1lX2V4cGlyZXMudmlydF9leHAgPSBjcHV0aW1lX3plcm87Ci0Jc2lnLT5jcHV0aW1lX2V4cGlyZXMuc2NoZWRfZXhwID0gMDsKLQotCWlmIChzaWctPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXIgIT0gUkxJTV9JTkZJTklUWSkgewotCQlzaWctPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCA9Ci0JCQlzZWNzX3RvX2NwdXRpbWUoc2lnLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyKTsKKwljcHVfbGltaXQgPSBBQ0NFU1NfT05DRShzaWctPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXIpOworCWlmIChjcHVfbGltaXQgIT0gUkxJTV9JTkZJTklUWSkgeworCQlzaWctPmNwdXRpbWVfZXhwaXJlcy5wcm9mX2V4cCA9IHNlY3NfdG9fY3B1dGltZShjcHVfbGltaXQpOwogCQlzaWctPmNwdXRpbWVyLnJ1bm5pbmcgPSAxOwogCX0KIApAQCAtODU4LDcgKzg1Miw3IEBACiAJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfVEhSRUFEKQogCQlyZXR1cm4gMDsKIAotCXNpZyA9IGttZW1fY2FjaGVfYWxsb2Moc2lnbmFsX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CisJc2lnID0ga21lbV9jYWNoZV96YWxsb2Moc2lnbmFsX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CiAJdHNrLT5zaWduYWwgPSBzaWc7CiAJaWYgKCFzaWcpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtODY2LDQ2ICs4NjAsMjEgQEAKIAlhdG9taWNfc2V0KCZzaWctPmNvdW50LCAxKTsKIAlhdG9taWNfc2V0KCZzaWctPmxpdmUsIDEpOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnNpZy0+d2FpdF9jaGxkZXhpdCk7Ci0Jc2lnLT5mbGFncyA9IDA7CiAJaWYgKGNsb25lX2ZsYWdzICYgQ0xPTkVfTkVXUElEKQogCQlzaWctPmZsYWdzIHw9IFNJR05BTF9VTktJTExBQkxFOwotCXNpZy0+Z3JvdXBfZXhpdF9jb2RlID0gMDsKLQlzaWctPmdyb3VwX2V4aXRfdGFzayA9IE5VTEw7Ci0Jc2lnLT5ncm91cF9zdG9wX2NvdW50ID0gMDsKIAlzaWctPmN1cnJfdGFyZ2V0ID0gdHNrOwogCWluaXRfc2lncGVuZGluZygmc2lnLT5zaGFyZWRfcGVuZGluZyk7CiAJSU5JVF9MSVNUX0hFQUQoJnNpZy0+cG9zaXhfdGltZXJzKTsKIAogCWhydGltZXJfaW5pdCgmc2lnLT5yZWFsX3RpbWVyLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpOwotCXNpZy0+aXRfcmVhbF9pbmNyLnR2NjQgPSAwOwogCXNpZy0+cmVhbF90aW1lci5mdW5jdGlvbiA9IGl0X3JlYWxfZm47CiAKLQlzaWctPmxlYWRlciA9IDA7CS8qIHNlc3Npb24gbGVhZGVyc2hpcCBkb2Vzbid0IGluaGVyaXQgKi8KLQlzaWctPnR0eV9vbGRfcGdycCA9IE5VTEw7Ci0Jc2lnLT50dHkgPSBOVUxMOwotCi0Jc2lnLT51dGltZSA9IHNpZy0+c3RpbWUgPSBzaWctPmN1dGltZSA9IHNpZy0+Y3N0aW1lID0gY3B1dGltZV96ZXJvOwotCXNpZy0+Z3RpbWUgPSBjcHV0aW1lX3plcm87Ci0Jc2lnLT5jZ3RpbWUgPSBjcHV0aW1lX3plcm87Ci0jaWZuZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCi0Jc2lnLT5wcmV2X3V0aW1lID0gc2lnLT5wcmV2X3N0aW1lID0gY3B1dGltZV96ZXJvOwotI2VuZGlmCi0Jc2lnLT5udmNzdyA9IHNpZy0+bml2Y3N3ID0gc2lnLT5jbnZjc3cgPSBzaWctPmNuaXZjc3cgPSAwOwotCXNpZy0+bWluX2ZsdCA9IHNpZy0+bWFqX2ZsdCA9IHNpZy0+Y21pbl9mbHQgPSBzaWctPmNtYWpfZmx0ID0gMDsKLQlzaWctPmluYmxvY2sgPSBzaWctPm91YmxvY2sgPSBzaWctPmNpbmJsb2NrID0gc2lnLT5jb3VibG9jayA9IDA7Ci0Jc2lnLT5tYXhyc3MgPSBzaWctPmNtYXhyc3MgPSAwOwotCXRhc2tfaW9fYWNjb3VudGluZ19pbml0KCZzaWctPmlvYWMpOwotCXNpZy0+c3VtX3NjaGVkX3J1bnRpbWUgPSAwOwotCXRhc2tzdGF0c190Z2lkX2luaXQoc2lnKTsKLQogCXRhc2tfbG9jayhjdXJyZW50LT5ncm91cF9sZWFkZXIpOwogCW1lbWNweShzaWctPnJsaW0sIGN1cnJlbnQtPnNpZ25hbC0+cmxpbSwgc2l6ZW9mIHNpZy0+cmxpbSk7CiAJdGFza191bmxvY2soY3VycmVudC0+Z3JvdXBfbGVhZGVyKTsKIAogCXBvc2l4X2NwdV90aW1lcnNfaW5pdF9ncm91cChzaWcpOwogCi0JYWNjdF9pbml0X3BhY2N0KCZzaWctPnBhY2N0KTsKLQogCXR0eV9hdWRpdF9mb3JrKHNpZyk7CiAKIAlzaWctPm9vbV9hZGogPSBjdXJyZW50LT5zaWduYWwtPm9vbV9hZGo7CkBAIC0xMDM0LDcgKzEwMDMsNyBAQAogI2VuZGlmCiAJcmV0dmFsID0gLUVBR0FJTjsKIAlpZiAoYXRvbWljX3JlYWQoJnAtPnJlYWxfY3JlZC0+dXNlci0+cHJvY2Vzc2VzKSA+PQotCQkJcC0+c2lnbmFsLT5ybGltW1JMSU1JVF9OUFJPQ10ucmxpbV9jdXIpIHsKKwkJCXRhc2tfcmxpbWl0KHAsIFJMSU1JVF9OUFJPQykpIHsKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pICYmICFjYXBhYmxlKENBUF9TWVNfUkVTT1VSQ0UpICYmCiAJCSAgICBwLT5yZWFsX2NyZWQtPnVzZXIgIT0gSU5JVF9VU0VSKQogCQkJZ290byBiYWRfZm9ya19mcmVlOwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9jaGlwLmMgYi9rZXJuZWwvaXJxL2NoaXAuYwppbmRleCBlY2MzZmEyLi40MmVjMTFiIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2NoaXAuYworKysgYi9rZXJuZWwvaXJxL2NoaXAuYwpAQCAtMTgsMTEgKzE4LDcgQEAKIAogI2luY2x1ZGUgImludGVybmFscy5oIgogCi0vKioKLSAqCWR5bmFtaWNfaXJxX2luaXQgLSBpbml0aWFsaXplIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGlycQotICoJQGlycToJaXJxIG51bWJlciB0byBpbml0aWFsaXplCi0gKi8KLXZvaWQgZHluYW1pY19pcnFfaW5pdCh1bnNpZ25lZCBpbnQgaXJxKQorc3RhdGljIHZvaWQgZHluYW1pY19pcnFfaW5pdF94KHVuc2lnbmVkIGludCBpcnEsIGJvb2wga2VlcF9jaGlwX2RhdGEpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC00MSw3ICszNyw4IEBACiAJZGVzYy0+ZGVwdGggPSAxOwogCWRlc2MtPm1zaV9kZXNjID0gTlVMTDsKIAlkZXNjLT5oYW5kbGVyX2RhdGEgPSBOVUxMOwotCWRlc2MtPmNoaXBfZGF0YSA9IE5VTEw7CisJaWYgKCFrZWVwX2NoaXBfZGF0YSkKKwkJZGVzYy0+Y2hpcF9kYXRhID0gTlVMTDsKIAlkZXNjLT5hY3Rpb24gPSBOVUxMOwogCWRlc2MtPmlycV9jb3VudCA9IDA7CiAJZGVzYy0+aXJxc191bmhhbmRsZWQgPSAwOwpAQCAtNTUsMTAgKzUyLDI2IEBACiB9CiAKIC8qKgotICoJZHluYW1pY19pcnFfY2xlYW51cCAtIGNsZWFudXAgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgaXJxCisgKglkeW5hbWljX2lycV9pbml0IC0gaW5pdGlhbGl6ZSBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBpcnEKICAqCUBpcnE6CWlycSBudW1iZXIgdG8gaW5pdGlhbGl6ZQogICovCi12b2lkIGR5bmFtaWNfaXJxX2NsZWFudXAodW5zaWduZWQgaW50IGlycSkKK3ZvaWQgZHluYW1pY19pcnFfaW5pdCh1bnNpZ25lZCBpbnQgaXJxKQoreworCWR5bmFtaWNfaXJxX2luaXRfeChpcnEsIGZhbHNlKTsKK30KKworLyoqCisgKglkeW5hbWljX2lycV9pbml0X2tlZXBfY2hpcF9kYXRhIC0gaW5pdGlhbGl6ZSBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBpcnEKKyAqCUBpcnE6CWlycSBudW1iZXIgdG8gaW5pdGlhbGl6ZQorICoKKyAqCWRvZXMgbm90IHNldCBpcnFfdG9fZGVzYyhpcnEpLT5jaGlwX2RhdGEgdG8gTlVMTAorICovCit2b2lkIGR5bmFtaWNfaXJxX2luaXRfa2VlcF9jaGlwX2RhdGEodW5zaWduZWQgaW50IGlycSkKK3sKKwlkeW5hbWljX2lycV9pbml0X3goaXJxLCB0cnVlKTsKK30KKworc3RhdGljIHZvaWQgZHluYW1pY19pcnFfY2xlYW51cF94KHVuc2lnbmVkIGludCBpcnEsIGJvb2wga2VlcF9jaGlwX2RhdGEpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNzcsNyArOTAsOCBAQAogCX0KIAlkZXNjLT5tc2lfZGVzYyA9IE5VTEw7CiAJZGVzYy0+aGFuZGxlcl9kYXRhID0gTlVMTDsKLQlkZXNjLT5jaGlwX2RhdGEgPSBOVUxMOworCWlmICgha2VlcF9jaGlwX2RhdGEpCisJCWRlc2MtPmNoaXBfZGF0YSA9IE5VTEw7CiAJZGVzYy0+aGFuZGxlX2lycSA9IGhhbmRsZV9iYWRfaXJxOwogCWRlc2MtPmNoaXAgPSAmbm9faXJxX2NoaXA7CiAJZGVzYy0+bmFtZSA9IE5VTEw7CkBAIC04NSw2ICs5OSwyNiBAQAogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiB9CiAKKy8qKgorICoJZHluYW1pY19pcnFfY2xlYW51cCAtIGNsZWFudXAgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgaXJxCisgKglAaXJxOglpcnEgbnVtYmVyIHRvIGluaXRpYWxpemUKKyAqLwordm9pZCBkeW5hbWljX2lycV9jbGVhbnVwKHVuc2lnbmVkIGludCBpcnEpCit7CisJZHluYW1pY19pcnFfY2xlYW51cF94KGlycSwgZmFsc2UpOworfQorCisvKioKKyAqCWR5bmFtaWNfaXJxX2NsZWFudXBfa2VlcF9jaGlwX2RhdGEgLSBjbGVhbnVwIGEgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGlycQorICoJQGlycToJaXJxIG51bWJlciB0byBpbml0aWFsaXplCisgKgorICoJZG9lcyBub3Qgc2V0IGlycV90b19kZXNjKGlycSktPmNoaXBfZGF0YSB0byBOVUxMCisgKi8KK3ZvaWQgZHluYW1pY19pcnFfY2xlYW51cF9rZWVwX2NoaXBfZGF0YSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWR5bmFtaWNfaXJxX2NsZWFudXBfeChpcnEsIHRydWUpOworfQorCiAKIC8qKgogICoJc2V0X2lycV9jaGlwIC0gc2V0IHRoZSBpcnEgY2hpcCBmb3IgYW4gaXJxCkBAIC01MjAsNyArNTU0LDcgQEAKICAqCXNpZ25hbC4gVGhlIG9jY3VyZW5jZSBpcyBsYXRjaGVkIGludG8gdGhlIGlycSBjb250cm9sbGVyIGhhcmR3YXJlCiAgKglhbmQgbXVzdCBiZSBhY2tlZCBpbiBvcmRlciB0byBiZSByZWVuYWJsZWQuIEFmdGVyIHRoZSBhY2sgYW5vdGhlcgogICoJaW50ZXJydXB0IGNhbiBoYXBwZW4gb24gdGhlIHNhbWUgc291cmNlIGV2ZW4gYmVmb3JlIHRoZSBmaXJzdCBvbmUKLSAqCWlzIGhhbmRsZWQgYnkgdGhlIGFzc29zaWFjdGVkIGV2ZW50IGhhbmRsZXIuIElmIHRoaXMgaGFwcGVucyBpdAorICoJaXMgaGFuZGxlZCBieSB0aGUgYXNzb2NpYXRlZCBldmVudCBoYW5kbGVyLiBJZiB0aGlzIGhhcHBlbnMgaXQKICAqCW1pZ2h0IGJlIG5lY2Vzc2FyeSB0byBkaXNhYmxlIChtYXNrKSB0aGUgaW50ZXJydXB0IGRlcGVuZGluZyBvbiB0aGUKICAqCWNvbnRyb2xsZXIgaGFyZHdhcmUuIFRoaXMgcmVxdWlyZXMgdG8gcmVlbmFibGUgdGhlIGludGVycnVwdCBpbnNpZGUKICAqCW9mIHRoZSBsb29wIHdoaWNoIGhhbmRsZXMgdGhlIGludGVycnVwdHMgd2hpY2ggaGF2ZSBhcnJpdmVkIHdoaWxlCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2RldnJlcy5jIGIva2VybmVsL2lycS9kZXZyZXMuYwppbmRleCBkMDZkZjljLi4xZWY0ZmZjIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2RldnJlcy5jCisrKyBiL2tlcm5lbC9pcnEvZGV2cmVzLmMKQEAgLTQyLDcgKzQyLDcgQEAKICAqCWF1dG9tYXRpY2FsbHkgZnJlZWQgb24gZHJpdmVyIGRldGFjaC4KICAqCiAgKglJZiBhbiBJUlEgYWxsb2NhdGVkIHdpdGggdGhpcyBmdW5jdGlvbiBuZWVkcyB0byBiZSBmcmVlZAotICoJc2VwYXJhdGVseSwgZGV2X2ZyZWVfaXJxKCkgbXVzdCBiZSB1c2VkLgorICoJc2VwYXJhdGVseSwgZGV2bV9mcmVlX2lycSgpIG11c3QgYmUgdXNlZC4KICAqLwogaW50IGRldm1fcmVxdWVzdF90aHJlYWRlZF9pcnEoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaXJxLAogCQkJICAgICAgaXJxX2hhbmRsZXJfdCBoYW5kbGVyLCBpcnFfaGFuZGxlcl90IHRocmVhZF9mbiwKQEAgLTgxLDcgKzgxLDcgQEAKICAqCUV4Y2VwdCBmb3IgdGhlIGV4dHJhIEBkZXYgYXJndW1lbnQsIHRoaXMgZnVuY3Rpb24gdGFrZXMgdGhlCiAgKglzYW1lIGFyZ3VtZW50cyBhbmQgcGVyZm9ybXMgdGhlIHNhbWUgZnVuY3Rpb24gYXMgZnJlZV9pcnEoKS4KICAqCVRoaXMgZnVuY3Rpb24gaW5zdGVhZCBvZiBmcmVlX2lycSgpIHNob3VsZCBiZSB1c2VkIHRvIG1hbnVhbGx5Ci0gKglmcmVlIElSUXMgYWxsb2NhdGVkIHdpdGggZGV2X3JlcXVlc3RfaXJxKCkuCisgKglmcmVlIElSUXMgYWxsb2NhdGVkIHdpdGggZGV2bV9yZXF1ZXN0X2lycSgpLgogICovCiB2b2lkIGRldm1fZnJlZV9pcnEoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL2hhbmRsZS5jIGIva2VybmVsL2lycS9oYW5kbGUuYwppbmRleCA4MTQ5NDBlLi43NmQ1YTY3IDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL2hhbmRsZS5jCisrKyBiL2tlcm5lbC9pcnEvaGFuZGxlLmMKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdWxpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9oYXNoLmg+Ci0jaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhZGl4LXRyZWUuaD4KICNpbmNsdWRlIDx0cmFjZS9ldmVudHMvaXJxLmg+CiAKICNpbmNsdWRlICJpbnRlcm5hbHMuaCIKQEAgLTg3LDEyICs4Nyw4IEBACiB7CiAJdm9pZCAqcHRyOwogCi0JaWYgKHNsYWJfaXNfYXZhaWxhYmxlKCkpCi0JCXB0ciA9IGt6YWxsb2Nfbm9kZShuciAqIHNpemVvZigqZGVzYy0+a3N0YXRfaXJxcyksCi0JCQkJICAgR0ZQX0FUT01JQywgbm9kZSk7Ci0JZWxzZQotCQlwdHIgPSBhbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKG5vZGUpLAotCQkJCW5yICogc2l6ZW9mKCpkZXNjLT5rc3RhdF9pcnFzKSk7CisJcHRyID0ga3phbGxvY19ub2RlKG5yICogc2l6ZW9mKCpkZXNjLT5rc3RhdF9pcnFzKSwKKwkJCSAgIEdGUF9BVE9NSUMsIG5vZGUpOwogCiAJLyoKIAkgKiBkb24ndCBvdmVyd2l0ZSBpZiBjYW4gbm90IGdldCBuZXcgb25lCkBAIC0xMzIsNyArMTI4LDI2IEBACiAgKi8KIERFRklORV9SQVdfU1BJTkxPQ0soc3BhcnNlX2lycV9sb2NrKTsKIAotc3RydWN0IGlycV9kZXNjICoqaXJxX2Rlc2NfcHRycyBfX3JlYWRfbW9zdGx5Oworc3RhdGljIFJBRElYX1RSRUUoaXJxX2Rlc2NfdHJlZSwgR0ZQX0FUT01JQyk7CisKK3N0YXRpYyB2b2lkIHNldF9pcnFfZGVzYyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJcmFkaXhfdHJlZV9pbnNlcnQoJmlycV9kZXNjX3RyZWUsIGlycSwgZGVzYyk7Cit9CisKK3N0cnVjdCBpcnFfZGVzYyAqaXJxX3RvX2Rlc2ModW5zaWduZWQgaW50IGlycSkKK3sKKwlyZXR1cm4gcmFkaXhfdHJlZV9sb29rdXAoJmlycV9kZXNjX3RyZWUsIGlycSk7Cit9CisKK3ZvaWQgcmVwbGFjZV9pcnFfZGVzYyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJdm9pZCAqKnB0cjsKKworCXB0ciA9IHJhZGl4X3RyZWVfbG9va3VwX3Nsb3QoJmlycV9kZXNjX3RyZWUsIGlycSk7CisJaWYgKHB0cikKKwkJcmFkaXhfdHJlZV9yZXBsYWNlX3Nsb3QocHRyLCBkZXNjKTsKK30KIAogc3RhdGljIHN0cnVjdCBpcnFfZGVzYyBpcnFfZGVzY19sZWdhY3lbTlJfSVJRU19MRUdBQ1ldIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wID0gewogCVswIC4uLiBOUl9JUlFTX0xFR0FDWS0xXSA9IHsKQEAgLTE2NCw5ICsxNzksNiBAQAogCWxlZ2FjeV9jb3VudCA9IEFSUkFZX1NJWkUoaXJxX2Rlc2NfbGVnYWN5KTsKIAlub2RlID0gZmlyc3Rfb25saW5lX25vZGU7CiAKLQkvKiBhbGxvY2F0ZSBpcnFfZGVzY19wdHJzIGFycmF5IGJhc2VkIG9uIG5yX2lycXMgKi8KLQlpcnFfZGVzY19wdHJzID0ga2NhbGxvYyhucl9pcnFzLCBzaXplb2Yodm9pZCAqKSwgR0ZQX05PV0FJVCk7Ci0KIAkvKiBhbGxvY2F0ZSBiYXNlZCBvbiBucl9jcHVfaWRzICovCiAJa3N0YXRfaXJxc19sZWdhY3kgPSBremFsbG9jX25vZGUoTlJfSVJRU19MRUdBQ1kgKiBucl9jcHVfaWRzICoKIAkJCQkJICBzaXplb2YoaW50KSwgR0ZQX05PV0FJVCwgbm9kZSk7CkBAIC0xODAsMjMgKzE5MiwxMiBAQAogCQlsb2NrZGVwX3NldF9jbGFzcygmZGVzY1tpXS5sb2NrLCAmaXJxX2Rlc2NfbG9ja19jbGFzcyk7CiAJCWFsbG9jX2Rlc2NfbWFza3MoJmRlc2NbaV0sIG5vZGUsIHRydWUpOwogCQlpbml0X2Rlc2NfbWFza3MoJmRlc2NbaV0pOwotCQlpcnFfZGVzY19wdHJzW2ldID0gZGVzYyArIGk7CisJCXNldF9pcnFfZGVzYyhpLCAmZGVzY1tpXSk7CiAJfQogCi0JZm9yIChpID0gbGVnYWN5X2NvdW50OyBpIDwgbnJfaXJxczsgaSsrKQotCQlpcnFfZGVzY19wdHJzW2ldID0gTlVMTDsKLQogCXJldHVybiBhcmNoX2Vhcmx5X2lycV9pbml0KCk7CiB9CiAKLXN0cnVjdCBpcnFfZGVzYyAqaXJxX3RvX2Rlc2ModW5zaWduZWQgaW50IGlycSkKLXsKLQlpZiAoaXJxX2Rlc2NfcHRycyAmJiBpcnEgPCBucl9pcnFzKQotCQlyZXR1cm4gaXJxX2Rlc2NfcHRyc1tpcnFdOwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KIHN0cnVjdCBpcnFfZGVzYyAqIF9fcmVmIGlycV90b19kZXNjX2FsbG9jX25vZGUodW5zaWduZWQgaW50IGlycSwgaW50IG5vZGUpCiB7CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwpAQCAtMjA4LDIxICsyMDksMTggQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JZGVzYyA9IGlycV9kZXNjX3B0cnNbaXJxXTsKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlpZiAoZGVzYykKIAkJcmV0dXJuIGRlc2M7CiAKIAlyYXdfc3Bpbl9sb2NrX2lycXNhdmUoJnNwYXJzZV9pcnFfbG9jaywgZmxhZ3MpOwogCiAJLyogV2UgaGF2ZSB0byBjaGVjayBpdCB0byBhdm9pZCByYWNlcyB3aXRoIGFub3RoZXIgQ1BVICovCi0JZGVzYyA9IGlycV9kZXNjX3B0cnNbaXJxXTsKKwlkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlpZiAoZGVzYykKIAkJZ290byBvdXRfdW5sb2NrOwogCi0JaWYgKHNsYWJfaXNfYXZhaWxhYmxlKCkpCi0JCWRlc2MgPSBremFsbG9jX25vZGUoc2l6ZW9mKCpkZXNjKSwgR0ZQX0FUT01JQywgbm9kZSk7Ci0JZWxzZQotCQlkZXNjID0gYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlKSwgc2l6ZW9mKCpkZXNjKSk7CisJZGVzYyA9IGt6YWxsb2Nfbm9kZShzaXplb2YoKmRlc2MpLCBHRlBfQVRPTUlDLCBub2RlKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIgIGFsbG9jIGlycV9kZXNjIGZvciAlZCBvbiBub2RlICVkXG4iLCBpcnEsIG5vZGUpOwogCWlmICghZGVzYykgewpAQCAtMjMxLDcgKzIyOSw3IEBACiAJfQogCWluaXRfb25lX2lycV9kZXNjKGlycSwgZGVzYywgbm9kZSk7CiAKLQlpcnFfZGVzY19wdHJzW2lycV0gPSBkZXNjOworCXNldF9pcnFfZGVzYyhpcnEsIGRlc2MpOwogCiBvdXRfdW5sb2NrOgogCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZzcGFyc2VfaXJxX2xvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmggYi9rZXJuZWwvaXJxL2ludGVybmFscy5oCmluZGV4IGIyODIxZjAuLmM2M2YzYmMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKKysrIGIva2VybmVsL2lycS9pbnRlcm5hbHMuaApAQCAtMjEsMTEgKzIxLDcgQEAKIGV4dGVybiByYXdfc3BpbmxvY2tfdCBzcGFyc2VfaXJxX2xvY2s7CiAKICNpZmRlZiBDT05GSUdfU1BBUlNFX0lSUQotLyogaXJxX2Rlc2NfcHRycyBhbGxvY2F0ZWQgYXQgYm9vdCB0aW1lICovCi1leHRlcm4gc3RydWN0IGlycV9kZXNjICoqaXJxX2Rlc2NfcHRyczsKLSNlbHNlCi0vKiBpcnFfZGVzY19wdHJzIGlzIGEgZml4ZWQgc2l6ZSBhcnJheSAqLwotZXh0ZXJuIHN0cnVjdCBpcnFfZGVzYyAqaXJxX2Rlc2NfcHRyc1tOUl9JUlFTXTsKK3ZvaWQgcmVwbGFjZV9pcnFfZGVzYyh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwpkaWZmIC0tZ2l0IGEva2VybmVsL2lycS9udW1hX21pZ3JhdGUuYyBiL2tlcm5lbC9pcnEvbnVtYV9taWdyYXRlLmMKaW5kZXggMjZiYWM5ZC4uOTYzNTU5ZCAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9udW1hX21pZ3JhdGUuYworKysgYi9rZXJuZWwvaXJxL251bWFfbWlncmF0ZS5jCkBAIC03MCw3ICs3MCw3IEBACiAJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZzcGFyc2VfaXJxX2xvY2ssIGZsYWdzKTsKIAogCS8qIFdlIGhhdmUgdG8gY2hlY2sgaXQgdG8gYXZvaWQgcmFjZXMgd2l0aCBhbm90aGVyIENQVSAqLwotCWRlc2MgPSBpcnFfZGVzY19wdHJzW2lycV07CisJZGVzYyA9IGlycV90b19kZXNjKGlycSk7CiAKIAlpZiAoZGVzYyAmJiBvbGRfZGVzYyAhPSBkZXNjKQogCQlnb3RvIG91dF91bmxvY2s7CkBAIC05MCw3ICs5MCw3IEBACiAJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKLQlpcnFfZGVzY19wdHJzW2lycV0gPSBkZXNjOworCXJlcGxhY2VfaXJxX2Rlc2MoaXJxLCBkZXNjKTsKIAlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3BhcnNlX2lycV9sb2NrLCBmbGFncyk7CiAKIAkvKiBmcmVlIHRoZSBvbGQgb25lICovCmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWMuYyBiL2tlcm5lbC9rZXhlYy5jCmluZGV4IGVmMDc3ZmIuLjg3ZWJlOGEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlYy5jCisrKyBiL2tlcm5lbC9rZXhlYy5jCkBAIC00MSw3ICs0MSw3IEBACiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAKIC8qIFBlciBjcHUgbWVtb3J5IGZvciBzdG9yaW5nIGNwdSBzdGF0ZXMgaW4gY2FzZSBvZiBzeXN0ZW0gY3Jhc2guICovCi1ub3RlX2J1Zl90KiBjcmFzaF9ub3RlczsKK25vdGVfYnVmX3QgX19wZXJjcHUgKmNyYXNoX25vdGVzOwogCiAvKiB2bWNvcmVpbmZvIHN0dWZmICovCiBzdGF0aWMgdW5zaWduZWQgY2hhciB2bWNvcmVpbmZvX2RhdGFbVk1DT1JFSU5GT19CWVRFU107CmRpZmYgLS1naXQgYS9rZXJuZWwva3Byb2Jlcy5jIGIva2VybmVsL2twcm9iZXMuYwppbmRleCBjY2VjNzc0Li5mYTAzNGQyIDEwMDY0NAotLS0gYS9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2tlcm5lbC9rcHJvYmVzLmMKQEAgLTQyLDkgKzQyLDExIEBACiAjaW5jbHVkZSA8bGludXgvZnJlZXplci5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZWJ1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2VjdGlvbnMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgpAQCAtMTA1LDU3ICsxMDcsNzQgQEAKICAqIHN0ZXBwaW5nIG9uIHRoZSBpbnN0cnVjdGlvbiBvbiBhIHZtYWxsb2NlZC9rbWFsbG9jZWQvZGF0YSBwYWdlCiAgKiBpcyBhIHJlY2lwZSBmb3IgZGlzYXN0ZXIKICAqLwotI2RlZmluZSBJTlNOU19QRVJfUEFHRQkoUEFHRV9TSVpFLyhNQVhfSU5TTl9TSVpFICogc2l6ZW9mKGtwcm9iZV9vcGNvZGVfdCkpKQotCiBzdHJ1Y3Qga3Byb2JlX2luc25fcGFnZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCWtwcm9iZV9vcGNvZGVfdCAqaW5zbnM7CQkvKiBQYWdlIG9mIGluc3RydWN0aW9uIHNsb3RzICovCi0JY2hhciBzbG90X3VzZWRbSU5TTlNfUEVSX1BBR0VdOwogCWludCBudXNlZDsKIAlpbnQgbmdhcmJhZ2U7CisJY2hhciBzbG90X3VzZWRbXTsKIH07CiAKKyNkZWZpbmUgS1BST0JFX0lOU05fUEFHRV9TSVpFKHNsb3RzKQkJCVwKKwkob2Zmc2V0b2Yoc3RydWN0IGtwcm9iZV9pbnNuX3BhZ2UsIHNsb3RfdXNlZCkgKwlcCisJIChzaXplb2YoY2hhcikgKiAoc2xvdHMpKSkKKworc3RydWN0IGtwcm9iZV9pbnNuX2NhY2hlIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHBhZ2VzOwkvKiBsaXN0IG9mIGtwcm9iZV9pbnNuX3BhZ2UgKi8KKwlzaXplX3QgaW5zbl9zaXplOwkvKiBzaXplIG9mIGluc3RydWN0aW9uIHNsb3QgKi8KKwlpbnQgbnJfZ2FyYmFnZTsKK307CisKK3N0YXRpYyBpbnQgc2xvdHNfcGVyX3BhZ2Uoc3RydWN0IGtwcm9iZV9pbnNuX2NhY2hlICpjKQoreworCXJldHVybiBQQUdFX1NJWkUvKGMtPmluc25fc2l6ZSAqIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKTsKK30KKwogZW51bSBrcHJvYmVfc2xvdF9zdGF0ZSB7CiAJU0xPVF9DTEVBTiA9IDAsCiAJU0xPVF9ESVJUWSA9IDEsCiAJU0xPVF9VU0VEID0gMiwKIH07CiAKLXN0YXRpYyBERUZJTkVfTVVURVgoa3Byb2JlX2luc25fbXV0ZXgpOwkvKiBQcm90ZWN0cyBrcHJvYmVfaW5zbl9wYWdlcyAqLwotc3RhdGljIExJU1RfSEVBRChrcHJvYmVfaW5zbl9wYWdlcyk7Ci1zdGF0aWMgaW50IGtwcm9iZV9nYXJiYWdlX3Nsb3RzOwotc3RhdGljIGludCBjb2xsZWN0X2dhcmJhZ2Vfc2xvdHModm9pZCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGtwcm9iZV9pbnNuX211dGV4KTsJLyogUHJvdGVjdHMga3Byb2JlX2luc25fc2xvdHMgKi8KK3N0YXRpYyBzdHJ1Y3Qga3Byb2JlX2luc25fY2FjaGUga3Byb2JlX2luc25fc2xvdHMgPSB7CisJLnBhZ2VzID0gTElTVF9IRUFEX0lOSVQoa3Byb2JlX2luc25fc2xvdHMucGFnZXMpLAorCS5pbnNuX3NpemUgPSBNQVhfSU5TTl9TSVpFLAorCS5ucl9nYXJiYWdlID0gMCwKK307CitzdGF0aWMgaW50IF9fa3Byb2JlcyBjb2xsZWN0X2dhcmJhZ2Vfc2xvdHMoc3RydWN0IGtwcm9iZV9pbnNuX2NhY2hlICpjKTsKIAogLyoqCiAgKiBfX2dldF9pbnNuX3Nsb3QoKSAtIEZpbmQgYSBzbG90IG9uIGFuIGV4ZWN1dGFibGUgcGFnZSBmb3IgYW4gaW5zdHJ1Y3Rpb24uCiAgKiBXZSBhbGxvY2F0ZSBhbiBleGVjdXRhYmxlIHBhZ2UgaWYgdGhlcmUncyBubyByb29tIG9uIGV4aXN0aW5nIG9uZXMuCiAgKi8KLXN0YXRpYyBrcHJvYmVfb3Bjb2RlX3QgX19rcHJvYmVzICpfX2dldF9pbnNuX3Nsb3Qodm9pZCkKK3N0YXRpYyBrcHJvYmVfb3Bjb2RlX3QgX19rcHJvYmVzICpfX2dldF9pbnNuX3Nsb3Qoc3RydWN0IGtwcm9iZV9pbnNuX2NhY2hlICpjKQogewogCXN0cnVjdCBrcHJvYmVfaW5zbl9wYWdlICpraXA7CiAKICByZXRyeToKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGtpcCwgJmtwcm9iZV9pbnNuX3BhZ2VzLCBsaXN0KSB7Ci0JCWlmIChraXAtPm51c2VkIDwgSU5TTlNfUEVSX1BBR0UpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGtpcCwgJmMtPnBhZ2VzLCBsaXN0KSB7CisJCWlmIChraXAtPm51c2VkIDwgc2xvdHNfcGVyX3BhZ2UoYykpIHsKIAkJCWludCBpOwotCQkJZm9yIChpID0gMDsgaSA8IElOU05TX1BFUl9QQUdFOyBpKyspIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBzbG90c19wZXJfcGFnZShjKTsgaSsrKSB7CiAJCQkJaWYgKGtpcC0+c2xvdF91c2VkW2ldID09IFNMT1RfQ0xFQU4pIHsKIAkJCQkJa2lwLT5zbG90X3VzZWRbaV0gPSBTTE9UX1VTRUQ7CiAJCQkJCWtpcC0+bnVzZWQrKzsKLQkJCQkJcmV0dXJuIGtpcC0+aW5zbnMgKyAoaSAqIE1BWF9JTlNOX1NJWkUpOworCQkJCQlyZXR1cm4ga2lwLT5pbnNucyArIChpICogYy0+aW5zbl9zaXplKTsKIAkJCQl9CiAJCQl9Ci0JCQkvKiBTdXJwcmlzZSEgIE5vIHVudXNlZCBzbG90cy4gIEZpeCBraXAtPm51c2VkLiAqLwotCQkJa2lwLT5udXNlZCA9IElOU05TX1BFUl9QQUdFOworCQkJLyoga2lwLT5udXNlZCBpcyBicm9rZW4uIEZpeCBpdC4gKi8KKwkJCWtpcC0+bnVzZWQgPSBzbG90c19wZXJfcGFnZShjKTsKKwkJCVdBUk5fT04oMSk7CiAJCX0KIAl9CiAKIAkvKiBJZiB0aGVyZSBhcmUgYW55IGdhcmJhZ2Ugc2xvdHMsIGNvbGxlY3QgaXQgYW5kIHRyeSBhZ2Fpbi4gKi8KLQlpZiAoa3Byb2JlX2dhcmJhZ2Vfc2xvdHMgJiYgY29sbGVjdF9nYXJiYWdlX3Nsb3RzKCkgPT0gMCkgeworCWlmIChjLT5ucl9nYXJiYWdlICYmIGNvbGxlY3RfZ2FyYmFnZV9zbG90cyhjKSA9PSAwKQogCQlnb3RvIHJldHJ5OwotCX0KLQkvKiBBbGwgb3V0IG9mIHNwYWNlLiAgTmVlZCB0byBhbGxvY2F0ZSBhIG5ldyBwYWdlLiBVc2Ugc2xvdCAwLiAqLwotCWtpcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBrcHJvYmVfaW5zbl9wYWdlKSwgR0ZQX0tFUk5FTCk7CisKKwkvKiBBbGwgb3V0IG9mIHNwYWNlLiAgTmVlZCB0byBhbGxvY2F0ZSBhIG5ldyBwYWdlLiAqLworCWtpcCA9IGttYWxsb2MoS1BST0JFX0lOU05fUEFHRV9TSVpFKHNsb3RzX3Blcl9wYWdlKGMpKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFraXApCiAJCXJldHVybiBOVUxMOwogCkBAIC0xNzAsMjAgKzE4OSwyMyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAJSU5JVF9MSVNUX0hFQUQoJmtpcC0+bGlzdCk7Ci0JbGlzdF9hZGQoJmtpcC0+bGlzdCwgJmtwcm9iZV9pbnNuX3BhZ2VzKTsKLQltZW1zZXQoa2lwLT5zbG90X3VzZWQsIFNMT1RfQ0xFQU4sIElOU05TX1BFUl9QQUdFKTsKKwltZW1zZXQoa2lwLT5zbG90X3VzZWQsIFNMT1RfQ0xFQU4sIHNsb3RzX3Blcl9wYWdlKGMpKTsKIAlraXAtPnNsb3RfdXNlZFswXSA9IFNMT1RfVVNFRDsKIAlraXAtPm51c2VkID0gMTsKIAlraXAtPm5nYXJiYWdlID0gMDsKKwlsaXN0X2FkZCgma2lwLT5saXN0LCAmYy0+cGFnZXMpOwogCXJldHVybiBraXAtPmluc25zOwogfQogCisKIGtwcm9iZV9vcGNvZGVfdCBfX2twcm9iZXMgKmdldF9pbnNuX3Nsb3Qodm9pZCkKIHsKLQlrcHJvYmVfb3Bjb2RlX3QgKnJldDsKKwlrcHJvYmVfb3Bjb2RlX3QgKnJldCA9IE5VTEw7CisKIAltdXRleF9sb2NrKCZrcHJvYmVfaW5zbl9tdXRleCk7Ci0JcmV0ID0gX19nZXRfaW5zbl9zbG90KCk7CisJcmV0ID0gX19nZXRfaW5zbl9zbG90KCZrcHJvYmVfaW5zbl9zbG90cyk7CiAJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfaW5zbl9tdXRleCk7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xOTksNyArMjIxLDcgQEAKIAkJICogc28gYXMgbm90IHRvIGhhdmUgdG8gc2V0IGl0IHVwIGFnYWluIHRoZQogCQkgKiBuZXh0IHRpbWUgc29tZWJvZHkgaW5zZXJ0cyBhIHByb2JlLgogCQkgKi8KLQkJaWYgKCFsaXN0X2lzX3Npbmd1bGFyKCZrcHJvYmVfaW5zbl9wYWdlcykpIHsKKwkJaWYgKCFsaXN0X2lzX3Npbmd1bGFyKCZraXAtPmxpc3QpKSB7CiAJCQlsaXN0X2RlbCgma2lwLT5saXN0KTsKIAkJCW1vZHVsZV9mcmVlKE5VTEwsIGtpcC0+aW5zbnMpOwogCQkJa2ZyZWUoa2lwKTsKQEAgLTIwOSw1MSArMjMxLDg0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgX19rcHJvYmVzIGNvbGxlY3RfZ2FyYmFnZV9zbG90cyh2b2lkKQorc3RhdGljIGludCBfX2twcm9iZXMgY29sbGVjdF9nYXJiYWdlX3Nsb3RzKHN0cnVjdCBrcHJvYmVfaW5zbl9jYWNoZSAqYykKIHsKIAlzdHJ1Y3Qga3Byb2JlX2luc25fcGFnZSAqa2lwLCAqbmV4dDsKIAogCS8qIEVuc3VyZSBuby1vbmUgaXMgaW50ZXJydXB0ZWQgb24gdGhlIGdhcmJhZ2VzICovCiAJc3luY2hyb25pemVfc2NoZWQoKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShraXAsIG5leHQsICZrcHJvYmVfaW5zbl9wYWdlcywgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShraXAsIG5leHQsICZjLT5wYWdlcywgbGlzdCkgewogCQlpbnQgaTsKIAkJaWYgKGtpcC0+bmdhcmJhZ2UgPT0gMCkKIAkJCWNvbnRpbnVlOwogCQlraXAtPm5nYXJiYWdlID0gMDsJLyogd2Ugd2lsbCBjb2xsZWN0IGFsbCBnYXJiYWdlcyAqLwotCQlmb3IgKGkgPSAwOyBpIDwgSU5TTlNfUEVSX1BBR0U7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgc2xvdHNfcGVyX3BhZ2UoYyk7IGkrKykgewogCQkJaWYgKGtpcC0+c2xvdF91c2VkW2ldID09IFNMT1RfRElSVFkgJiYKIAkJCSAgICBjb2xsZWN0X29uZV9zbG90KGtpcCwgaSkpCiAJCQkJYnJlYWs7CiAJCX0KIAl9Ci0Ja3Byb2JlX2dhcmJhZ2Vfc2xvdHMgPSAwOworCWMtPm5yX2dhcmJhZ2UgPSAwOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgX19mcmVlX2luc25fc2xvdChzdHJ1Y3Qga3Byb2JlX2luc25fY2FjaGUgKmMsCisJCQkJICAgICAgIGtwcm9iZV9vcGNvZGVfdCAqc2xvdCwgaW50IGRpcnR5KQoreworCXN0cnVjdCBrcHJvYmVfaW5zbl9wYWdlICpraXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGtpcCwgJmMtPnBhZ2VzLCBsaXN0KSB7CisJCWxvbmcgaWR4ID0gKChsb25nKXNsb3QgLSAobG9uZylraXAtPmluc25zKSAvIGMtPmluc25fc2l6ZTsKKwkJaWYgKGlkeCA+PSAwICYmIGlkeCA8IHNsb3RzX3Blcl9wYWdlKGMpKSB7CisJCQlXQVJOX09OKGtpcC0+c2xvdF91c2VkW2lkeF0gIT0gU0xPVF9VU0VEKTsKKwkJCWlmIChkaXJ0eSkgeworCQkJCWtpcC0+c2xvdF91c2VkW2lkeF0gPSBTTE9UX0RJUlRZOworCQkJCWtpcC0+bmdhcmJhZ2UrKzsKKwkJCQlpZiAoKytjLT5ucl9nYXJiYWdlID4gc2xvdHNfcGVyX3BhZ2UoYykpCisJCQkJCWNvbGxlY3RfZ2FyYmFnZV9zbG90cyhjKTsKKwkJCX0gZWxzZQorCQkJCWNvbGxlY3Rfb25lX3Nsb3Qoa2lwLCBpZHgpOworCQkJcmV0dXJuOworCQl9CisJfQorCS8qIENvdWxkIG5vdCBmcmVlIHRoaXMgc2xvdC4gKi8KKwlXQVJOX09OKDEpOworfQorCiB2b2lkIF9fa3Byb2JlcyBmcmVlX2luc25fc2xvdChrcHJvYmVfb3Bjb2RlX3QgKiBzbG90LCBpbnQgZGlydHkpCiB7Ci0Jc3RydWN0IGtwcm9iZV9pbnNuX3BhZ2UgKmtpcDsKLQogCW11dGV4X2xvY2soJmtwcm9iZV9pbnNuX211dGV4KTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGtpcCwgJmtwcm9iZV9pbnNuX3BhZ2VzLCBsaXN0KSB7Ci0JCWlmIChraXAtPmluc25zIDw9IHNsb3QgJiYKLQkJICAgIHNsb3QgPCBraXAtPmluc25zICsgKElOU05TX1BFUl9QQUdFICogTUFYX0lOU05fU0laRSkpIHsKLQkJCWludCBpID0gKHNsb3QgLSBraXAtPmluc25zKSAvIE1BWF9JTlNOX1NJWkU7Ci0JCQlpZiAoZGlydHkpIHsKLQkJCQlraXAtPnNsb3RfdXNlZFtpXSA9IFNMT1RfRElSVFk7Ci0JCQkJa2lwLT5uZ2FyYmFnZSsrOwotCQkJfSBlbHNlCi0JCQkJY29sbGVjdF9vbmVfc2xvdChraXAsIGkpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoZGlydHkgJiYgKytrcHJvYmVfZ2FyYmFnZV9zbG90cyA+IElOU05TX1BFUl9QQUdFKQotCQljb2xsZWN0X2dhcmJhZ2Vfc2xvdHMoKTsKLQorCV9fZnJlZV9pbnNuX3Nsb3QoJmtwcm9iZV9pbnNuX3Nsb3RzLCBzbG90LCBkaXJ0eSk7CiAJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfaW5zbl9tdXRleCk7CiB9CisjaWZkZWYgQ09ORklHX09QVFBST0JFUworLyogRm9yIG9wdGltaXplZF9rcHJvYmUgYnVmZmVyICovCitzdGF0aWMgREVGSU5FX01VVEVYKGtwcm9iZV9vcHRpbnNuX211dGV4KTsgLyogUHJvdGVjdHMga3Byb2JlX29wdGluc25fc2xvdHMgKi8KK3N0YXRpYyBzdHJ1Y3Qga3Byb2JlX2luc25fY2FjaGUga3Byb2JlX29wdGluc25fc2xvdHMgPSB7CisJLnBhZ2VzID0gTElTVF9IRUFEX0lOSVQoa3Byb2JlX29wdGluc25fc2xvdHMucGFnZXMpLAorCS8qIC5pbnNuX3NpemUgaXMgaW5pdGlhbGl6ZWQgbGF0ZXIgKi8KKwkubnJfZ2FyYmFnZSA9IDAsCit9OworLyogR2V0IGEgc2xvdCBmb3Igb3B0aW1pemVkX2twcm9iZSBidWZmZXIgKi8KK2twcm9iZV9vcGNvZGVfdCBfX2twcm9iZXMgKmdldF9vcHRpbnNuX3Nsb3Qodm9pZCkKK3sKKwlrcHJvYmVfb3Bjb2RlX3QgKnJldCA9IE5VTEw7CisKKwltdXRleF9sb2NrKCZrcHJvYmVfb3B0aW5zbl9tdXRleCk7CisJcmV0ID0gX19nZXRfaW5zbl9zbG90KCZrcHJvYmVfb3B0aW5zbl9zbG90cyk7CisJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfb3B0aW5zbl9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIF9fa3Byb2JlcyBmcmVlX29wdGluc25fc2xvdChrcHJvYmVfb3Bjb2RlX3QgKiBzbG90LCBpbnQgZGlydHkpCit7CisJbXV0ZXhfbG9jaygma3Byb2JlX29wdGluc25fbXV0ZXgpOworCV9fZnJlZV9pbnNuX3Nsb3QoJmtwcm9iZV9vcHRpbnNuX3Nsb3RzLCBzbG90LCBkaXJ0eSk7CisJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfb3B0aW5zbl9tdXRleCk7Cit9CisjZW5kaWYKICNlbmRpZgogCiAvKiBXZSBoYXZlIHByZWVtcHRpb24gZGlzYWJsZWQuLiBzbyBpdCBpcyBzYWZlIHRvIHVzZSBfXyB2ZXJzaW9ucyAqLwpAQCAtMjg0LDIzICszMzksNDAxIEBACiAJCWlmIChwLT5hZGRyID09IGFkZHIpCiAJCQlyZXR1cm4gcDsKIAl9CisKIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGludCBfX2twcm9iZXMgYWdncl9wcmVfaGFuZGxlcihzdHJ1Y3Qga3Byb2JlICpwLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CisKKy8qIFJldHVybiB0cnVlIGlmIHRoZSBrcHJvYmUgaXMgYW4gYWdncmVnYXRvciAqLworc3RhdGljIGlubGluZSBpbnQga3Byb2JlX2FnZ3Jwcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQoreworCXJldHVybiBwLT5wcmVfaGFuZGxlciA9PSBhZ2dyX3ByZV9oYW5kbGVyOworfQorCisvKgorICogS2VlcCBhbGwgZmllbGRzIGluIHRoZSBrcHJvYmUgY29uc2lzdGVudAorICovCitzdGF0aWMgaW5saW5lIHZvaWQgY29weV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqb2xkX3AsIHN0cnVjdCBrcHJvYmUgKnApCit7CisJbWVtY3B5KCZwLT5vcGNvZGUsICZvbGRfcC0+b3Bjb2RlLCBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7CisJbWVtY3B5KCZwLT5haW5zbiwgJm9sZF9wLT5haW5zbiwgc2l6ZW9mKHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24pKTsKK30KKworI2lmZGVmIENPTkZJR19PUFRQUk9CRVMKKy8qIE5PVEU6IGNoYW5nZSB0aGlzIHZhbHVlIG9ubHkgd2l0aCBrcHJvYmVfbXV0ZXggaGVsZCAqLworc3RhdGljIGJvb2wga3Byb2Jlc19hbGxvd19vcHRpbWl6YXRpb247CisKKy8qCisgKiBDYWxsIGFsbCBwcmVfaGFuZGxlciBvbiB0aGUgbGlzdCwgYnV0IGlnbm9yZXMgaXRzIHJldHVybiB2YWx1ZS4KKyAqIFRoaXMgbXVzdCBiZSBjYWxsZWQgZnJvbSBhcmNoLWRlcCBvcHRpbWl6ZWQgY2FsbGVyLgorICovCit2b2lkIF9fa3Byb2JlcyBvcHRfcHJlX2hhbmRsZXIoc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGtwcm9iZSAqa3A7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShrcCwgJnAtPmxpc3QsIGxpc3QpIHsKKwkJaWYgKGtwLT5wcmVfaGFuZGxlciAmJiBsaWtlbHkoIWtwcm9iZV9kaXNhYmxlZChrcCkpKSB7CisJCQlzZXRfa3Byb2JlX2luc3RhbmNlKGtwKTsKKwkJCWtwLT5wcmVfaGFuZGxlcihrcCwgcmVncyk7CisJCX0KKwkJcmVzZXRfa3Byb2JlX2luc3RhbmNlKCk7CisJfQorfQorCisvKiBSZXR1cm4gdHJ1ZSghMCkgaWYgdGhlIGtwcm9iZSBpcyByZWFkeSBmb3Igb3B0aW1pemF0aW9uLiAqLworc3RhdGljIGlubGluZSBpbnQga3Byb2JlX29wdHJlYWR5KHN0cnVjdCBrcHJvYmUgKnApCit7CisJc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wOworCisJaWYgKGtwcm9iZV9hZ2dycHJvYmUocCkpIHsKKwkJb3AgPSBjb250YWluZXJfb2YocCwgc3RydWN0IG9wdGltaXplZF9rcHJvYmUsIGtwKTsKKwkJcmV0dXJuIGFyY2hfcHJlcGFyZWRfb3B0aW5zbigmb3AtPm9wdGluc24pOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogUmV0dXJuIGFuIG9wdGltaXplZCBrcHJvYmUgd2hvc2Ugb3B0aW1pemluZyBjb2RlIHJlcGxhY2VzCisgKiBpbnN0cnVjdGlvbnMgaW5jbHVkaW5nIGFkZHIgKGV4Y2x1ZGUgYnJlYWtwb2ludCkuCisgKi8KK3N0cnVjdCBrcHJvYmUgKl9fa3Byb2JlcyBnZXRfb3B0aW1pemVkX2twcm9iZSh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJaW50IGk7CisJc3RydWN0IGtwcm9iZSAqcCA9IE5VTEw7CisJc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wOworCisJLyogRG9uJ3QgY2hlY2sgaSA9PSAwLCBzaW5jZSB0aGF0IGlzIGEgYnJlYWtwb2ludCBjYXNlLiAqLworCWZvciAoaSA9IDE7ICFwICYmIGkgPCBNQVhfT1BUSU1JWkVEX0xFTkdUSDsgaSsrKQorCQlwID0gZ2V0X2twcm9iZSgodm9pZCAqKShhZGRyIC0gaSkpOworCisJaWYgKHAgJiYga3Byb2JlX29wdHJlYWR5KHApKSB7CisJCW9wID0gY29udGFpbmVyX29mKHAsIHN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlLCBrcCk7CisJCWlmIChhcmNoX3dpdGhpbl9vcHRpbWl6ZWRfa3Byb2JlKG9wLCBhZGRyKSkKKwkJCXJldHVybiBwOworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKiBPcHRpbWl6YXRpb24gc3RhZ2luZyBsaXN0LCBwcm90ZWN0ZWQgYnkga3Byb2JlX211dGV4ICovCitzdGF0aWMgTElTVF9IRUFEKG9wdGltaXppbmdfbGlzdCk7CisKK3N0YXRpYyB2b2lkIGtwcm9iZV9vcHRpbWl6ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKTsKK3N0YXRpYyBERUNMQVJFX0RFTEFZRURfV09SSyhvcHRpbWl6aW5nX3dvcmssIGtwcm9iZV9vcHRpbWl6ZXIpOworI2RlZmluZSBPUFRJTUlaRV9ERUxBWSA1CisKKy8qIEtwcm9iZSBqdW1wIG9wdGltaXplciAqLworc3RhdGljIF9fa3Byb2JlcyB2b2lkIGtwcm9iZV9vcHRpbWl6ZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlICpvcCwgKnRtcDsKKworCS8qIExvY2sgbW9kdWxlcyB3aGlsZSBvcHRpbWl6aW5nIGtwcm9iZXMgKi8KKwltdXRleF9sb2NrKCZtb2R1bGVfbXV0ZXgpOworCW11dGV4X2xvY2soJmtwcm9iZV9tdXRleCk7CisJaWYgKGtwcm9iZXNfYWxsX2Rpc2FybWVkIHx8ICFrcHJvYmVzX2FsbG93X29wdGltaXphdGlvbikKKwkJZ290byBlbmQ7CisKKwkvKgorCSAqIFdhaXQgZm9yIHF1aWVzZW5jZSBwZXJpb2QgdG8gZW5zdXJlIGFsbCBydW5uaW5nIGludGVycnVwdHMKKwkgKiBhcmUgZG9uZS4gQmVjYXVzZSBvcHRwcm9iZSBtYXkgbW9kaWZ5IG11bHRpcGxlIGluc3RydWN0aW9ucworCSAqIHRoZXJlIGlzIGEgY2hhbmNlIHRoYXQgTnRoIGluc3RydWN0aW9uIGlzIGludGVycnVwdGVkLiBJbiB0aGF0CisJICogY2FzZSwgcnVubmluZyBpbnRlcnJ1cHQgY2FuIHJldHVybiB0byAybmQtTnRoIGJ5dGUgb2YganVtcAorCSAqIGluc3RydWN0aW9uLiBUaGlzIHdhaXQgaXMgZm9yIGF2b2lkaW5nIGl0LgorCSAqLworCXN5bmNocm9uaXplX3NjaGVkKCk7CisKKwkvKgorCSAqIFRoZSBvcHRpbWl6YXRpb24vdW5vcHRpbWl6YXRpb24gcmVmZXJzIG9ubGluZV9jcHVzIHZpYQorCSAqIHN0b3BfbWFjaGluZSgpIGFuZCBjcHUtaG90cGx1ZyBtb2RpZmllcyBvbmxpbmVfY3B1cy4KKwkgKiBBbmQgc2FtZSB0aW1lLCB0ZXh0X211dGV4IHdpbGwgYmUgaGVsZCBpbiBjcHUtaG90cGx1ZyBhbmQgaGVyZS4KKwkgKiBUaGlzIGNvbWJpbmF0aW9uIGNhbiBjYXVzZSBhIGRlYWRsb2NrIChjcHUtaG90cGx1ZyB0cnkgdG8gbG9jaworCSAqIHRleHRfbXV0ZXggYnV0IHN0b3BfbWFjaGluZSBjYW4gbm90IGJlIGRvbmUgYmVjYXVzZSBvbmxpbmVfY3B1cworCSAqIGhhcyBiZWVuIGNoYW5nZWQpCisJICogVG8gYXZvaWQgdGhpcyBkZWFkbG9jaywgd2UgbmVlZCB0byBjYWxsIGdldF9vbmxpbmVfY3B1cygpCisJICogZm9yIHByZXZlbnRpbmcgY3B1LWhvdHBsdWcgb3V0c2lkZSBvZiB0ZXh0X211dGV4IGxvY2tpbmcuCisJICovCisJZ2V0X29ubGluZV9jcHVzKCk7CisJbXV0ZXhfbG9jaygmdGV4dF9tdXRleCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG9wLCB0bXAsICZvcHRpbWl6aW5nX2xpc3QsIGxpc3QpIHsKKwkJV0FSTl9PTihrcHJvYmVfZGlzYWJsZWQoJm9wLT5rcCkpOworCQlpZiAoYXJjaF9vcHRpbWl6ZV9rcHJvYmUob3ApIDwgMCkKKwkJCW9wLT5rcC5mbGFncyAmPSB+S1BST0JFX0ZMQUdfT1BUSU1JWkVEOworCQlsaXN0X2RlbF9pbml0KCZvcC0+bGlzdCk7CisJfQorCW11dGV4X3VubG9jaygmdGV4dF9tdXRleCk7CisJcHV0X29ubGluZV9jcHVzKCk7CitlbmQ6CisJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOworCW11dGV4X3VubG9jaygmbW9kdWxlX211dGV4KTsKK30KKworLyogT3B0aW1pemUga3Byb2JlIGlmIHAgaXMgcmVhZHkgdG8gYmUgb3B0aW1pemVkICovCitzdGF0aWMgX19rcHJvYmVzIHZvaWQgb3B0aW1pemVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wOworCisJLyogQ2hlY2sgaWYgdGhlIGtwcm9iZSBpcyBkaXNhYmxlZCBvciBub3QgcmVhZHkgZm9yIG9wdGltaXphdGlvbi4gKi8KKwlpZiAoIWtwcm9iZV9vcHRyZWFkeShwKSB8fCAha3Byb2Jlc19hbGxvd19vcHRpbWl6YXRpb24gfHwKKwkgICAgKGtwcm9iZV9kaXNhYmxlZChwKSB8fCBrcHJvYmVzX2FsbF9kaXNhcm1lZCkpCisJCXJldHVybjsKKworCS8qIEJvdGggb2YgYnJlYWtfaGFuZGxlciBhbmQgcG9zdF9oYW5kbGVyIGFyZSBub3Qgc3VwcG9ydGVkLiAqLworCWlmIChwLT5icmVha19oYW5kbGVyIHx8IHAtPnBvc3RfaGFuZGxlcikKKwkJcmV0dXJuOworCisJb3AgPSBjb250YWluZXJfb2YocCwgc3RydWN0IG9wdGltaXplZF9rcHJvYmUsIGtwKTsKKworCS8qIENoZWNrIHRoZXJlIGlzIG5vIG90aGVyIGtwcm9iZXMgYXQgdGhlIG9wdGltaXplZCBpbnN0cnVjdGlvbnMgKi8KKwlpZiAoYXJjaF9jaGVja19vcHRpbWl6ZWRfa3Byb2JlKG9wKSA8IDApCisJCXJldHVybjsKKworCS8qIENoZWNrIGlmIGl0IGlzIGFscmVhZHkgb3B0aW1pemVkLiAqLworCWlmIChvcC0+a3AuZmxhZ3MgJiBLUFJPQkVfRkxBR19PUFRJTUlaRUQpCisJCXJldHVybjsKKworCW9wLT5rcC5mbGFncyB8PSBLUFJPQkVfRkxBR19PUFRJTUlaRUQ7CisJbGlzdF9hZGQoJm9wLT5saXN0LCAmb3B0aW1pemluZ19saXN0KTsKKwlpZiAoIWRlbGF5ZWRfd29ya19wZW5kaW5nKCZvcHRpbWl6aW5nX3dvcmspKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJm9wdGltaXppbmdfd29yaywgT1BUSU1JWkVfREVMQVkpOworfQorCisvKiBVbm9wdGltaXplIGEga3Byb2JlIGlmIHAgaXMgb3B0aW1pemVkICovCitzdGF0aWMgX19rcHJvYmVzIHZvaWQgdW5vcHRpbWl6ZV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwlzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3A7CisKKwlpZiAoKHAtPmZsYWdzICYgS1BST0JFX0ZMQUdfT1BUSU1JWkVEKSAmJiBrcHJvYmVfYWdncnByb2JlKHApKSB7CisJCW9wID0gY29udGFpbmVyX29mKHAsIHN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlLCBrcCk7CisJCWlmICghbGlzdF9lbXB0eSgmb3AtPmxpc3QpKQorCQkJLyogRGVxdWV1ZSBmcm9tIHRoZSBvcHRpbWl6YXRpb24gcXVldWUgKi8KKwkJCWxpc3RfZGVsX2luaXQoJm9wLT5saXN0KTsKKwkJZWxzZQorCQkJLyogUmVwbGFjZSBqdW1wIHdpdGggYnJlYWsgKi8KKwkJCWFyY2hfdW5vcHRpbWl6ZV9rcHJvYmUob3ApOworCQlvcC0+a3AuZmxhZ3MgJj0gfktQUk9CRV9GTEFHX09QVElNSVpFRDsKKwl9Cit9CisKKy8qIFJlbW92ZSBvcHRpbWl6ZWQgaW5zdHJ1Y3Rpb25zICovCitzdGF0aWMgdm9pZCBfX2twcm9iZXMga2lsbF9vcHRpbWl6ZWRfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wOworCisJb3AgPSBjb250YWluZXJfb2YocCwgc3RydWN0IG9wdGltaXplZF9rcHJvYmUsIGtwKTsKKwlpZiAoIWxpc3RfZW1wdHkoJm9wLT5saXN0KSkgeworCQkvKiBEZXF1ZXVlIGZyb20gdGhlIG9wdGltaXphdGlvbiBxdWV1ZSAqLworCQlsaXN0X2RlbF9pbml0KCZvcC0+bGlzdCk7CisJCW9wLT5rcC5mbGFncyAmPSB+S1BST0JFX0ZMQUdfT1BUSU1JWkVEOworCX0KKwkvKiBEb24ndCB1bm9wdGltaXplLCBiZWNhdXNlIHRoZSB0YXJnZXQgY29kZSB3aWxsIGJlIGZyZWVkLiAqLworCWFyY2hfcmVtb3ZlX29wdGltaXplZF9rcHJvYmUob3ApOworfQorCisvKiBUcnkgdG8gcHJlcGFyZSBvcHRpbWl6ZWQgaW5zdHJ1Y3Rpb25zICovCitzdGF0aWMgX19rcHJvYmVzIHZvaWQgcHJlcGFyZV9vcHRpbWl6ZWRfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wOworCisJb3AgPSBjb250YWluZXJfb2YocCwgc3RydWN0IG9wdGltaXplZF9rcHJvYmUsIGtwKTsKKwlhcmNoX3ByZXBhcmVfb3B0aW1pemVkX2twcm9iZShvcCk7Cit9CisKKy8qIEZyZWUgb3B0aW1pemVkIGluc3RydWN0aW9ucyBhbmQgb3B0aW1pemVkX2twcm9iZSAqLworc3RhdGljIF9fa3Byb2JlcyB2b2lkIGZyZWVfYWdncl9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwlzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3A7CisKKwlvcCA9IGNvbnRhaW5lcl9vZihwLCBzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSwga3ApOworCWFyY2hfcmVtb3ZlX29wdGltaXplZF9rcHJvYmUob3ApOworCWtmcmVlKG9wKTsKK30KKworLyogQWxsb2NhdGUgbmV3IG9wdGltaXplZF9rcHJvYmUgYW5kIHRyeSB0byBwcmVwYXJlIG9wdGltaXplZCBpbnN0cnVjdGlvbnMgKi8KK3N0YXRpYyBfX2twcm9iZXMgc3RydWN0IGtwcm9iZSAqYWxsb2NfYWdncl9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwlzdHJ1Y3Qgb3B0aW1pemVkX2twcm9iZSAqb3A7CisKKwlvcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvcHRpbWl6ZWRfa3Byb2JlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFvcCkKKwkJcmV0dXJuIE5VTEw7CisKKwlJTklUX0xJU1RfSEVBRCgmb3AtPmxpc3QpOworCW9wLT5rcC5hZGRyID0gcC0+YWRkcjsKKwlhcmNoX3ByZXBhcmVfb3B0aW1pemVkX2twcm9iZShvcCk7CisKKwlyZXR1cm4gJm9wLT5rcDsKK30KKworc3RhdGljIHZvaWQgX19rcHJvYmVzIGluaXRfYWdncl9rcHJvYmUoc3RydWN0IGtwcm9iZSAqYXAsIHN0cnVjdCBrcHJvYmUgKnApOworCisvKgorICogUHJlcGFyZSBhbiBvcHRpbWl6ZWRfa3Byb2JlIGFuZCBvcHRpbWl6ZSBpdAorICogTk9URTogcCBtdXN0IGJlIGEgbm9ybWFsIHJlZ2lzdGVyZWQga3Byb2JlCisgKi8KK3N0YXRpYyBfX2twcm9iZXMgdm9pZCB0cnlfdG9fb3B0aW1pemVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJc3RydWN0IGtwcm9iZSAqYXA7CisJc3RydWN0IG9wdGltaXplZF9rcHJvYmUgKm9wOworCisJYXAgPSBhbGxvY19hZ2dyX2twcm9iZShwKTsKKwlpZiAoIWFwKQorCQlyZXR1cm47CisKKwlvcCA9IGNvbnRhaW5lcl9vZihhcCwgc3RydWN0IG9wdGltaXplZF9rcHJvYmUsIGtwKTsKKwlpZiAoIWFyY2hfcHJlcGFyZWRfb3B0aW5zbigmb3AtPm9wdGluc24pKSB7CisJCS8qIElmIGZhaWxlZCB0byBzZXR1cCBvcHRpbWl6aW5nLCBmYWxsYmFjayB0byBrcHJvYmUgKi8KKwkJZnJlZV9hZ2dyX2twcm9iZShhcCk7CisJCXJldHVybjsKKwl9CisKKwlpbml0X2FnZ3Jfa3Byb2JlKGFwLCBwKTsKKwlvcHRpbWl6ZV9rcHJvYmUoYXApOworfQorCisjaWZkZWYgQ09ORklHX1NZU0NUTAorc3RhdGljIHZvaWQgX19rcHJvYmVzIG9wdGltaXplX2FsbF9rcHJvYmVzKHZvaWQpCit7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJc3RydWN0IGtwcm9iZSAqcDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIElmIG9wdGltaXphdGlvbiBpcyBhbHJlYWR5IGFsbG93ZWQsIGp1c3QgcmV0dXJuICovCisJaWYgKGtwcm9iZXNfYWxsb3dfb3B0aW1pemF0aW9uKQorCQlyZXR1cm47CisKKwlrcHJvYmVzX2FsbG93X29wdGltaXphdGlvbiA9IHRydWU7CisJbXV0ZXhfbG9jaygmdGV4dF9tdXRleCk7CisJZm9yIChpID0gMDsgaSA8IEtQUk9CRV9UQUJMRV9TSVpFOyBpKyspIHsKKwkJaGVhZCA9ICZrcHJvYmVfdGFibGVbaV07CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCBub2RlLCBoZWFkLCBobGlzdCkKKwkJCWlmICgha3Byb2JlX2Rpc2FibGVkKHApKQorCQkJCW9wdGltaXplX2twcm9iZShwKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ0ZXh0X211dGV4KTsKKwlwcmludGsoS0VSTl9JTkZPICJLcHJvYmVzIGdsb2JhbGx5IG9wdGltaXplZFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIF9fa3Byb2JlcyB1bm9wdGltaXplX2FsbF9rcHJvYmVzKHZvaWQpCit7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJc3RydWN0IGtwcm9iZSAqcDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCS8qIElmIG9wdGltaXphdGlvbiBpcyBhbHJlYWR5IHByb2hpYml0ZWQsIGp1c3QgcmV0dXJuICovCisJaWYgKCFrcHJvYmVzX2FsbG93X29wdGltaXphdGlvbikKKwkJcmV0dXJuOworCisJa3Byb2Jlc19hbGxvd19vcHRpbWl6YXRpb24gPSBmYWxzZTsKKwlwcmludGsoS0VSTl9JTkZPICJLcHJvYmVzIGdsb2JhbGx5IHVub3B0aW1pemVkXG4iKTsKKwlnZXRfb25saW5lX2NwdXMoKTsJLyogRm9yIGF2b2lkaW5nIHRleHRfbXV0ZXggZGVhZGxvY2sgKi8KKwltdXRleF9sb2NrKCZ0ZXh0X211dGV4KTsKKwlmb3IgKGkgPSAwOyBpIDwgS1BST0JFX1RBQkxFX1NJWkU7IGkrKykgeworCQloZWFkID0gJmtwcm9iZV90YWJsZVtpXTsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIG5vZGUsIGhlYWQsIGhsaXN0KSB7CisJCQlpZiAoIWtwcm9iZV9kaXNhYmxlZChwKSkKKwkJCQl1bm9wdGltaXplX2twcm9iZShwKTsKKwkJfQorCX0KKworCW11dGV4X3VubG9jaygmdGV4dF9tdXRleCk7CisJcHV0X29ubGluZV9jcHVzKCk7CisJLyogQWxsb3cgYWxsIGN1cnJlbnRseSBydW5uaW5nIGtwcm9iZXMgdG8gY29tcGxldGUgKi8KKwlzeW5jaHJvbml6ZV9zY2hlZCgpOworfQorCitpbnQgc3lzY3RsX2twcm9iZXNfb3B0aW1pemF0aW9uOworaW50IHByb2Nfa3Byb2Jlc19vcHRpbWl6YXRpb25faGFuZGxlcihzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAorCQkJCSAgICAgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVuZ3RoLAorCQkJCSAgICAgIGxvZmZfdCAqcHBvcykKK3sKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygma3Byb2JlX211dGV4KTsKKwlzeXNjdGxfa3Byb2Jlc19vcHRpbWl6YXRpb24gPSBrcHJvYmVzX2FsbG93X29wdGltaXphdGlvbiA/IDEgOiAwOworCXJldCA9IHByb2NfZG9pbnR2ZWNfbWlubWF4KHRhYmxlLCB3cml0ZSwgYnVmZmVyLCBsZW5ndGgsIHBwb3MpOworCisJaWYgKHN5c2N0bF9rcHJvYmVzX29wdGltaXphdGlvbikKKwkJb3B0aW1pemVfYWxsX2twcm9iZXMoKTsKKwllbHNlCisJCXVub3B0aW1pemVfYWxsX2twcm9iZXMoKTsKKwltdXRleF91bmxvY2soJmtwcm9iZV9tdXRleCk7CisKKwlyZXR1cm4gcmV0OworfQorI2VuZGlmIC8qIENPTkZJR19TWVNDVEwgKi8KKworc3RhdGljIHZvaWQgX19rcHJvYmVzIF9fYXJtX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQoreworCXN0cnVjdCBrcHJvYmUgKm9sZF9wOworCisJLyogQ2hlY2sgY29sbGlzaW9uIHdpdGggb3RoZXIgb3B0aW1pemVkIGtwcm9iZXMgKi8KKwlvbGRfcCA9IGdldF9vcHRpbWl6ZWRfa3Byb2JlKCh1bnNpZ25lZCBsb25nKXAtPmFkZHIpOworCWlmICh1bmxpa2VseShvbGRfcCkpCisJCXVub3B0aW1pemVfa3Byb2JlKG9sZF9wKTsgLyogRmFsbGJhY2sgdG8gdW5vcHRpbWl6ZWQga3Byb2JlICovCisKKwlhcmNoX2FybV9rcHJvYmUocCk7CisJb3B0aW1pemVfa3Byb2JlKHApOwkvKiBUcnkgdG8gb3B0aW1pemUgKGFkZCBrcHJvYmUgdG8gYSBsaXN0KSAqLworfQorCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgX19kaXNhcm1fa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJc3RydWN0IGtwcm9iZSAqb2xkX3A7CisKKwl1bm9wdGltaXplX2twcm9iZShwKTsJLyogVHJ5IHRvIHVub3B0aW1pemUgKi8KKwlhcmNoX2Rpc2FybV9rcHJvYmUocCk7CisKKwkvKiBJZiBhbm90aGVyIGtwcm9iZSB3YXMgYmxvY2tlZCwgb3B0aW1pemUgaXQuICovCisJb2xkX3AgPSBnZXRfb3B0aW1pemVkX2twcm9iZSgodW5zaWduZWQgbG9uZylwLT5hZGRyKTsKKwlpZiAodW5saWtlbHkob2xkX3ApKQorCQlvcHRpbWl6ZV9rcHJvYmUob2xkX3ApOworfQorCisjZWxzZSAvKiAhQ09ORklHX09QVFBST0JFUyAqLworCisjZGVmaW5lIG9wdGltaXplX2twcm9iZShwKQkJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSB1bm9wdGltaXplX2twcm9iZShwKQkJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBraWxsX29wdGltaXplZF9rcHJvYmUocCkJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBwcmVwYXJlX29wdGltaXplZF9rcHJvYmUocCkJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSB0cnlfdG9fb3B0aW1pemVfa3Byb2JlKHApCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgX19hcm1fa3Byb2JlKHApCQkJCWFyY2hfYXJtX2twcm9iZShwKQorI2RlZmluZSBfX2Rpc2FybV9rcHJvYmUocCkJCQlhcmNoX2Rpc2FybV9rcHJvYmUocCkKKworc3RhdGljIF9fa3Byb2JlcyB2b2lkIGZyZWVfYWdncl9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKK3sKKwlrZnJlZShwKTsKK30KKworc3RhdGljIF9fa3Byb2JlcyBzdHJ1Y3Qga3Byb2JlICphbGxvY19hZ2dyX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKQoreworCXJldHVybiBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3Byb2JlKSwgR0ZQX0tFUk5FTCk7Cit9CisjZW5kaWYgLyogQ09ORklHX09QVFBST0JFUyAqLworCiAvKiBBcm0gYSBrcHJvYmUgd2l0aCB0ZXh0X211dGV4ICovCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgYXJtX2twcm9iZShzdHJ1Y3Qga3Byb2JlICprcCkKIHsKKwkvKgorCSAqIEhlcmUsIHNpbmNlIF9fYXJtX2twcm9iZSgpIGRvZXNuJ3QgdXNlIHN0b3BfbWFjaGluZSgpLAorCSAqIHRoaXMgZG9lc24ndCBjYXVzZSBkZWFkbG9jayBvbiB0ZXh0X211dGV4LiBTbywgd2UgZG9uJ3QKKwkgKiBuZWVkIGdldF9vbmxpbmVfY3B1cygpLgorCSAqLwogCW11dGV4X2xvY2soJnRleHRfbXV0ZXgpOwotCWFyY2hfYXJtX2twcm9iZShrcCk7CisJX19hcm1fa3Byb2JlKGtwKTsKIAltdXRleF91bmxvY2soJnRleHRfbXV0ZXgpOwogfQogCiAvKiBEaXNhcm0gYSBrcHJvYmUgd2l0aCB0ZXh0X211dGV4ICovCiBzdGF0aWMgdm9pZCBfX2twcm9iZXMgZGlzYXJtX2twcm9iZShzdHJ1Y3Qga3Byb2JlICprcCkKIHsKKwlnZXRfb25saW5lX2NwdXMoKTsJLyogRm9yIGF2b2lkaW5nIHRleHRfbXV0ZXggZGVhZGxvY2sgKi8KIAltdXRleF9sb2NrKCZ0ZXh0X211dGV4KTsKLQlhcmNoX2Rpc2FybV9rcHJvYmUoa3ApOworCV9fZGlzYXJtX2twcm9iZShrcCk7CiAJbXV0ZXhfdW5sb2NrKCZ0ZXh0X211dGV4KTsKKwlwdXRfb25saW5lX2NwdXMoKTsKIH0KIAogLyoKQEAgLTM2OSw3ICs4MDIsNyBAQAogdm9pZCBfX2twcm9iZXMga3Byb2Jlc19pbmNfbm1pc3NlZF9jb3VudChzdHJ1Y3Qga3Byb2JlICpwKQogewogCXN0cnVjdCBrcHJvYmUgKmtwOwotCWlmIChwLT5wcmVfaGFuZGxlciAhPSBhZ2dyX3ByZV9oYW5kbGVyKSB7CisJaWYgKCFrcHJvYmVfYWdncnByb2JlKHApKSB7CiAJCXAtPm5taXNzZWQrKzsKIAl9IGVsc2UgewogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShrcCwgJnAtPmxpc3QsIGxpc3QpCkBAIC00OTMsMjEgKzkyNiwxNiBAQAogfQogCiAvKgotICogS2VlcCBhbGwgZmllbGRzIGluIHRoZSBrcHJvYmUgY29uc2lzdGVudAotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgY29weV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqb2xkX3AsIHN0cnVjdCBrcHJvYmUgKnApCi17Ci0JbWVtY3B5KCZwLT5vcGNvZGUsICZvbGRfcC0+b3Bjb2RlLCBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7Ci0JbWVtY3B5KCZwLT5haW5zbiwgJm9sZF9wLT5haW5zbiwgc2l6ZW9mKHN0cnVjdCBhcmNoX3NwZWNpZmljX2luc24pKTsKLX0KLQotLyoKICogQWRkIHRoZSBuZXcgcHJvYmUgdG8gYXAtPmxpc3QuIEZhaWwgaWYgdGhpcyBpcyB0aGUKICogc2Vjb25kIGpwcm9iZSBhdCB0aGUgYWRkcmVzcyAtIHR3byBqcHJvYmVzIGNhbid0IGNvZXhpc3QKICovCiBzdGF0aWMgaW50IF9fa3Byb2JlcyBhZGRfbmV3X2twcm9iZShzdHJ1Y3Qga3Byb2JlICphcCwgc3RydWN0IGtwcm9iZSAqcCkKIHsKIAlCVUdfT04oa3Byb2JlX2dvbmUoYXApIHx8IGtwcm9iZV9nb25lKHApKTsKKworCWlmIChwLT5icmVha19oYW5kbGVyIHx8IHAtPnBvc3RfaGFuZGxlcikKKwkJdW5vcHRpbWl6ZV9rcHJvYmUoYXApOwkvKiBGYWxsIGJhY2sgdG8gbm9ybWFsIGtwcm9iZSAqLworCiAJaWYgKHAtPmJyZWFrX2hhbmRsZXIpIHsKIAkJaWYgKGFwLT5icmVha19oYW5kbGVyKQogCQkJcmV0dXJuIC1FRVhJU1Q7CkBAIC01MjIsNyArOTUwLDcgQEAKIAkJYXAtPmZsYWdzICY9IH5LUFJPQkVfRkxBR19ESVNBQkxFRDsKIAkJaWYgKCFrcHJvYmVzX2FsbF9kaXNhcm1lZCkKIAkJCS8qIEFybSB0aGUgYnJlYWtwb2ludCBhZ2Fpbi4gKi8KLQkJCWFybV9rcHJvYmUoYXApOworCQkJX19hcm1fa3Byb2JlKGFwKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC01MzEsMTIgKzk1OSwxMyBAQAogICogRmlsbCBpbiB0aGUgcmVxdWlyZWQgZmllbGRzIG9mIHRoZSAibWFuYWdlciBrcHJvYmUiLiBSZXBsYWNlIHRoZQogICogZWFybGllciBrcHJvYmUgaW4gdGhlIGhsaXN0IHdpdGggdGhlIG1hbmFnZXIga3Byb2JlCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRfYWdncl9rcHJvYmUoc3RydWN0IGtwcm9iZSAqYXAsIHN0cnVjdCBrcHJvYmUgKnApCitzdGF0aWMgdm9pZCBfX2twcm9iZXMgaW5pdF9hZ2dyX2twcm9iZShzdHJ1Y3Qga3Byb2JlICphcCwgc3RydWN0IGtwcm9iZSAqcCkKIHsKKwkvKiBDb3B5IHAncyBpbnNuIHNsb3QgdG8gYXAgKi8KIAljb3B5X2twcm9iZShwLCBhcCk7CiAJZmx1c2hfaW5zbl9zbG90KGFwKTsKIAlhcC0+YWRkciA9IHAtPmFkZHI7Ci0JYXAtPmZsYWdzID0gcC0+ZmxhZ3M7CisJYXAtPmZsYWdzID0gcC0+ZmxhZ3MgJiB+S1BST0JFX0ZMQUdfT1BUSU1JWkVEOwogCWFwLT5wcmVfaGFuZGxlciA9IGFnZ3JfcHJlX2hhbmRsZXI7CiAJYXAtPmZhdWx0X2hhbmRsZXIgPSBhZ2dyX2ZhdWx0X2hhbmRsZXI7CiAJLyogV2UgZG9uJ3QgY2FyZSB0aGUga3Byb2JlIHdoaWNoIGhhcyBnb25lLiAqLwpAQCAtNTQ2LDggKzk3NSw5IEBACiAJCWFwLT5icmVha19oYW5kbGVyID0gYWdncl9icmVha19oYW5kbGVyOwogCiAJSU5JVF9MSVNUX0hFQUQoJmFwLT5saXN0KTsKLQlsaXN0X2FkZF9yY3UoJnAtPmxpc3QsICZhcC0+bGlzdCk7CisJSU5JVF9ITElTVF9OT0RFKCZhcC0+aGxpc3QpOwogCisJbGlzdF9hZGRfcmN1KCZwLT5saXN0LCAmYXAtPmxpc3QpOwogCWhsaXN0X3JlcGxhY2VfcmN1KCZwLT5obGlzdCwgJmFwLT5obGlzdCk7CiB9CiAKQEAgLTU2MSwxMiArOTkxLDEyIEBACiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGtwcm9iZSAqYXAgPSBvbGRfcDsKIAotCWlmIChvbGRfcC0+cHJlX2hhbmRsZXIgIT0gYWdncl9wcmVfaGFuZGxlcikgewotCQkvKiBJZiBvbGRfcCBpcyBub3QgYW4gYWdncl9wcm9iZSwgY3JlYXRlIG5ldyBhZ2dyX2twcm9iZS4gKi8KLQkJYXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3Byb2JlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFrcHJvYmVfYWdncnByb2JlKG9sZF9wKSkgeworCQkvKiBJZiBvbGRfcCBpcyBub3QgYW4gYWdncl9rcHJvYmUsIGNyZWF0ZSBuZXcgYWdncl9rcHJvYmUuICovCisJCWFwID0gYWxsb2NfYWdncl9rcHJvYmUob2xkX3ApOwogCQlpZiAoIWFwKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCWFkZF9hZ2dyX2twcm9iZShhcCwgb2xkX3ApOworCQlpbml0X2FnZ3Jfa3Byb2JlKGFwLCBvbGRfcCk7CiAJfQogCiAJaWYgKGtwcm9iZV9nb25lKGFwKSkgewpAQCAtNTg1LDYgKzEwMTUsOSBAQAogCQkJICovCiAJCQlyZXR1cm4gcmV0OwogCisJCS8qIFByZXBhcmUgb3B0aW1pemVkIGluc3RydWN0aW9ucyBpZiBwb3NzaWJsZS4gKi8KKwkJcHJlcGFyZV9vcHRpbWl6ZWRfa3Byb2JlKGFwKTsKKwogCQkvKgogCQkgKiBDbGVhciBnb25lIGZsYWcgdG8gcHJldmVudCBhbGxvY2F0aW5nIG5ldyBzbG90IGFnYWluLCBhbmQKIAkJICogc2V0IGRpc2FibGVkIGZsYWcgYmVjYXVzZSBpdCBpcyBub3QgYXJtZWQgeWV0LgpAQCAtNTkzLDYgKzEwMjYsNyBAQAogCQkJICAgIHwgS1BST0JFX0ZMQUdfRElTQUJMRUQ7CiAJfQogCisJLyogQ29weSBhcCdzIGluc24gc2xvdCB0byBwICovCiAJY29weV9rcHJvYmUoYXAsIHApOwogCXJldHVybiBhZGRfbmV3X2twcm9iZShhcCwgcCk7CiB9CkBAIC03NDMsMjcgKzExNzcsMzQgQEAKIAlwLT5ubWlzc2VkID0gMDsKIAlJTklUX0xJU1RfSEVBRCgmcC0+bGlzdCk7CiAJbXV0ZXhfbG9jaygma3Byb2JlX211dGV4KTsKKworCWdldF9vbmxpbmVfY3B1cygpOwkvKiBGb3IgYXZvaWRpbmcgdGV4dF9tdXRleCBkZWFkbG9jay4gKi8KKwltdXRleF9sb2NrKCZ0ZXh0X211dGV4KTsKKwogCW9sZF9wID0gZ2V0X2twcm9iZShwLT5hZGRyKTsKIAlpZiAob2xkX3ApIHsKKwkJLyogU2luY2UgdGhpcyBtYXkgdW5vcHRpbWl6ZSBvbGRfcCwgbG9ja2luZyB0ZXh0X211dGV4LiAqLwogCQlyZXQgPSByZWdpc3Rlcl9hZ2dyX2twcm9iZShvbGRfcCwgcCk7CiAJCWdvdG8gb3V0OwogCX0KIAotCW11dGV4X2xvY2soJnRleHRfbXV0ZXgpOwogCXJldCA9IGFyY2hfcHJlcGFyZV9rcHJvYmUocCk7CiAJaWYgKHJldCkKLQkJZ290byBvdXRfdW5sb2NrX3RleHQ7CisJCWdvdG8gb3V0OwogCiAJSU5JVF9ITElTVF9OT0RFKCZwLT5obGlzdCk7CiAJaGxpc3RfYWRkX2hlYWRfcmN1KCZwLT5obGlzdCwKIAkJICAgICAgICZrcHJvYmVfdGFibGVbaGFzaF9wdHIocC0+YWRkciwgS1BST0JFX0hBU0hfQklUUyldKTsKIAogCWlmICgha3Byb2Jlc19hbGxfZGlzYXJtZWQgJiYgIWtwcm9iZV9kaXNhYmxlZChwKSkKLQkJYXJjaF9hcm1fa3Byb2JlKHApOworCQlfX2FybV9rcHJvYmUocCk7CiAKLW91dF91bmxvY2tfdGV4dDoKLQltdXRleF91bmxvY2soJnRleHRfbXV0ZXgpOworCS8qIFRyeSB0byBvcHRpbWl6ZSBrcHJvYmUgKi8KKwl0cnlfdG9fb3B0aW1pemVfa3Byb2JlKHApOworCiBvdXQ6CisJbXV0ZXhfdW5sb2NrKCZ0ZXh0X211dGV4KTsKKwlwdXRfb25saW5lX2NwdXMoKTsKIAltdXRleF91bmxvY2soJmtwcm9iZV9tdXRleCk7CiAKIAlpZiAocHJvYmVkX21vZCkKQEAgLTc4NSw3ICsxMjI2LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAob2xkX3AgPT0gcCB8fAotCSAgICAob2xkX3AtPnByZV9oYW5kbGVyID09IGFnZ3JfcHJlX2hhbmRsZXIgJiYKKwkgICAgKGtwcm9iZV9hZ2dycHJvYmUob2xkX3ApICYmCiAJICAgICBsaXN0X2lzX3Npbmd1bGFyKCZvbGRfcC0+bGlzdCkpKSB7CiAJCS8qCiAJCSAqIE9ubHkgcHJvYmUgb24gdGhlIGhhc2ggbGlzdC4gRGlzYXJtIG9ubHkgaWYga3Byb2JlcyBhcmUKQEAgLTc5Myw3ICsxMjM0LDcgQEAKIAkJICogYWxyZWFkeSBoYXZlIGJlZW4gcmVtb3ZlZC4gV2Ugc2F2ZSBvbiBmbHVzaGluZyBpY2FjaGUuCiAJCSAqLwogCQlpZiAoIWtwcm9iZXNfYWxsX2Rpc2FybWVkICYmICFrcHJvYmVfZGlzYWJsZWQob2xkX3ApKQotCQkJZGlzYXJtX2twcm9iZShwKTsKKwkJCWRpc2FybV9rcHJvYmUob2xkX3ApOwogCQlobGlzdF9kZWxfcmN1KCZvbGRfcC0+aGxpc3QpOwogCX0gZWxzZSB7CiAJCWlmIChwLT5icmVha19oYW5kbGVyICYmICFrcHJvYmVfZ29uZShwKSkKQEAgLTgwOSw4ICsxMjUwLDEzIEBACiAJCWxpc3RfZGVsX3JjdSgmcC0+bGlzdCk7CiAJCWlmICgha3Byb2JlX2Rpc2FibGVkKG9sZF9wKSkgewogCQkJdHJ5X3RvX2Rpc2FibGVfYWdncl9rcHJvYmUob2xkX3ApOwotCQkJaWYgKCFrcHJvYmVzX2FsbF9kaXNhcm1lZCAmJiBrcHJvYmVfZGlzYWJsZWQob2xkX3ApKQotCQkJCWRpc2FybV9rcHJvYmUob2xkX3ApOworCQkJaWYgKCFrcHJvYmVzX2FsbF9kaXNhcm1lZCkgeworCQkJCWlmIChrcHJvYmVfZGlzYWJsZWQob2xkX3ApKQorCQkJCQlkaXNhcm1fa3Byb2JlKG9sZF9wKTsKKwkJCQllbHNlCisJCQkJCS8qIFRyeSB0byBvcHRpbWl6ZSB0aGlzIHByb2JlIGFnYWluICovCisJCQkJCW9wdGltaXplX2twcm9iZShvbGRfcCk7CisJCQl9CiAJCX0KIAl9CiAJcmV0dXJuIDA7CkBAIC04MjcsNyArMTI3Myw3IEBACiAJCW9sZF9wID0gbGlzdF9lbnRyeShwLT5saXN0Lm5leHQsIHN0cnVjdCBrcHJvYmUsIGxpc3QpOwogCQlsaXN0X2RlbCgmcC0+bGlzdCk7CiAJCWFyY2hfcmVtb3ZlX2twcm9iZShvbGRfcCk7Ci0JCWtmcmVlKG9sZF9wKTsKKwkJZnJlZV9hZ2dyX2twcm9iZShvbGRfcCk7CiAJfQogfQogCkBAIC0xMTIzLDcgKzE1NjksNyBAQAogCXN0cnVjdCBrcHJvYmUgKmtwOwogCiAJcC0+ZmxhZ3MgfD0gS1BST0JFX0ZMQUdfR09ORTsKLQlpZiAocC0+cHJlX2hhbmRsZXIgPT0gYWdncl9wcmVfaGFuZGxlcikgeworCWlmIChrcHJvYmVfYWdncnByb2JlKHApKSB7CiAJCS8qCiAJCSAqIElmIHRoaXMgaXMgYW4gYWdncl9rcHJvYmUsIHdlIGhhdmUgdG8gbGlzdCBhbGwgdGhlCiAJCSAqIGNoYWluZWQgcHJvYmVzIGFuZCBtYXJrIHRoZW0gR09ORS4KQEAgLTExMzIsNiArMTU3OCw3IEBACiAJCQlrcC0+ZmxhZ3MgfD0gS1BST0JFX0ZMQUdfR09ORTsKIAkJcC0+cG9zdF9oYW5kbGVyID0gTlVMTDsKIAkJcC0+YnJlYWtfaGFuZGxlciA9IE5VTEw7CisJCWtpbGxfb3B0aW1pemVkX2twcm9iZShwKTsKIAl9CiAJLyoKIAkgKiBIZXJlLCB3ZSBjYW4gcmVtb3ZlIGluc25fc2xvdCBzYWZlbHksIGJlY2F1c2Ugbm8gdGhyZWFkIGNhbGxzCkBAIC0xMjQxLDYgKzE2ODgsMTUgQEAKIAkJfQogCX0KIAorI2lmIGRlZmluZWQoQ09ORklHX09QVFBST0JFUykKKyNpZiBkZWZpbmVkKF9fQVJDSF9XQU5UX0tQUk9CRVNfSU5TTl9TTE9UKQorCS8qIEluaXQga3Byb2JlX29wdGluc25fc2xvdHMgKi8KKwlrcHJvYmVfb3B0aW5zbl9zbG90cy5pbnNuX3NpemUgPSBNQVhfT1BUSU5TTl9TSVpFOworI2VuZGlmCisJLyogQnkgZGVmYXVsdCwga3Byb2JlcyBjYW4gYmUgb3B0aW1pemVkICovCisJa3Byb2Jlc19hbGxvd19vcHRpbWl6YXRpb24gPSB0cnVlOworI2VuZGlmCisKIAkvKiBCeSBkZWZhdWx0LCBrcHJvYmVzIGFyZSBhcm1lZCAqLwogCWtwcm9iZXNfYWxsX2Rpc2FybWVkID0gZmFsc2U7CiAKQEAgLTEyNTksNyArMTcxNSw3IEBACiAKICNpZmRlZiBDT05GSUdfREVCVUdfRlMKIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyByZXBvcnRfcHJvYmUoc3RydWN0IHNlcV9maWxlICpwaSwgc3RydWN0IGtwcm9iZSAqcCwKLQkJY29uc3QgY2hhciAqc3ltLCBpbnQgb2Zmc2V0LGNoYXIgKm1vZG5hbWUpCisJCWNvbnN0IGNoYXIgKnN5bSwgaW50IG9mZnNldCwgY2hhciAqbW9kbmFtZSwgc3RydWN0IGtwcm9iZSAqcHApCiB7CiAJY2hhciAqa3Byb2JlX3R5cGU7CiAKQEAgLTEyNjksMTkgKzE3MjUsMjEgQEAKIAkJa3Byb2JlX3R5cGUgPSAiaiI7CiAJZWxzZQogCQlrcHJvYmVfdHlwZSA9ICJrIjsKKwogCWlmIChzeW0pCi0JCXNlcV9wcmludGYocGksICIlcCAgJXMgICVzKzB4JXggICVzICVzJXNcbiIsCisJCXNlcV9wcmludGYocGksICIlcCAgJXMgICVzKzB4JXggICVzICIsCiAJCQlwLT5hZGRyLCBrcHJvYmVfdHlwZSwgc3ltLCBvZmZzZXQsCi0JCQkobW9kbmFtZSA/IG1vZG5hbWUgOiAiICIpLAotCQkJKGtwcm9iZV9nb25lKHApID8gIltHT05FXSIgOiAiIiksCi0JCQkoKGtwcm9iZV9kaXNhYmxlZChwKSAmJiAha3Byb2JlX2dvbmUocCkpID8KLQkJCSAiW0RJU0FCTEVEXSIgOiAiIikpOworCQkJKG1vZG5hbWUgPyBtb2RuYW1lIDogIiAiKSk7CiAJZWxzZQotCQlzZXFfcHJpbnRmKHBpLCAiJXAgICVzICAlcCAlcyVzXG4iLAotCQkJcC0+YWRkciwga3Byb2JlX3R5cGUsIHAtPmFkZHIsCi0JCQkoa3Byb2JlX2dvbmUocCkgPyAiW0dPTkVdIiA6ICIiKSwKLQkJCSgoa3Byb2JlX2Rpc2FibGVkKHApICYmICFrcHJvYmVfZ29uZShwKSkgPwotCQkJICJbRElTQUJMRURdIiA6ICIiKSk7CisJCXNlcV9wcmludGYocGksICIlcCAgJXMgICVwICIsCisJCQlwLT5hZGRyLCBrcHJvYmVfdHlwZSwgcC0+YWRkcik7CisKKwlpZiAoIXBwKQorCQlwcCA9IHA7CisJc2VxX3ByaW50ZihwaSwgIiVzJXMlc1xuIiwKKwkJKGtwcm9iZV9nb25lKHApID8gIltHT05FXSIgOiAiIiksCisJCSgoa3Byb2JlX2Rpc2FibGVkKHApICYmICFrcHJvYmVfZ29uZShwKSkgPyAgIltESVNBQkxFRF0iIDogIiIpLAorCQkoa3Byb2JlX29wdGltaXplZChwcCkgPyAiW09QVElNSVpFRF0iIDogIiIpKTsKIH0KIAogc3RhdGljIHZvaWQgX19rcHJvYmVzICprcHJvYmVfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqZiwgbG9mZl90ICpwb3MpCkBAIC0xMzE3LDExICsxNzc1LDExIEBACiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIG5vZGUsIGhlYWQsIGhsaXN0KSB7CiAJCXN5bSA9IGthbGxzeW1zX2xvb2t1cCgodW5zaWduZWQgbG9uZylwLT5hZGRyLCBOVUxMLAogCQkJCQkmb2Zmc2V0LCAmbW9kbmFtZSwgbmFtZWJ1Zik7Ci0JCWlmIChwLT5wcmVfaGFuZGxlciA9PSBhZ2dyX3ByZV9oYW5kbGVyKSB7CisJCWlmIChrcHJvYmVfYWdncnByb2JlKHApKSB7CiAJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShrcCwgJnAtPmxpc3QsIGxpc3QpCi0JCQkJcmVwb3J0X3Byb2JlKHBpLCBrcCwgc3ltLCBvZmZzZXQsIG1vZG5hbWUpOworCQkJCXJlcG9ydF9wcm9iZShwaSwga3AsIHN5bSwgb2Zmc2V0LCBtb2RuYW1lLCBwKTsKIAkJfSBlbHNlCi0JCQlyZXBvcnRfcHJvYmUocGksIHAsIHN5bSwgb2Zmc2V0LCBtb2RuYW1lKTsKKwkJCXJlcG9ydF9wcm9iZShwaSwgcCwgc3ltLCBvZmZzZXQsIG1vZG5hbWUsIE5VTEwpOwogCX0KIAlwcmVlbXB0X2VuYWJsZSgpOwogCXJldHVybiAwOwpAQCAtMTM5OSwxMiArMTg1NywxMyBAQAogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoIWtwcm9iZXNfYWxsX2Rpc2FybWVkICYmIGtwcm9iZV9kaXNhYmxlZChwKSkKLQkJYXJtX2twcm9iZShwKTsKLQotCXAtPmZsYWdzICY9IH5LUFJPQkVfRkxBR19ESVNBQkxFRDsKIAlpZiAocCAhPSBrcCkKIAkJa3AtPmZsYWdzICY9IH5LUFJPQkVfRkxBR19ESVNBQkxFRDsKKworCWlmICgha3Byb2Jlc19hbGxfZGlzYXJtZWQgJiYga3Byb2JlX2Rpc2FibGVkKHApKSB7CisJCXAtPmZsYWdzICY9IH5LUFJPQkVfRkxBR19ESVNBQkxFRDsKKwkJYXJtX2twcm9iZShwKTsKKwl9CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZrcHJvYmVfbXV0ZXgpOwogCXJldHVybiByZXQ7CkBAIC0xNDI0LDEyICsxODgzLDEzIEBACiAJaWYgKCFrcHJvYmVzX2FsbF9kaXNhcm1lZCkKIAkJZ290byBhbHJlYWR5X2VuYWJsZWQ7CiAKKwkvKiBBcm1pbmcga3Byb2JlcyBkb2Vzbid0IG9wdGltaXplIGtwcm9iZSBpdHNlbGYgKi8KIAltdXRleF9sb2NrKCZ0ZXh0X211dGV4KTsKIAlmb3IgKGkgPSAwOyBpIDwgS1BST0JFX1RBQkxFX1NJWkU7IGkrKykgewogCQloZWFkID0gJmtwcm9iZV90YWJsZVtpXTsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHAsIG5vZGUsIGhlYWQsIGhsaXN0KQogCQkJaWYgKCFrcHJvYmVfZGlzYWJsZWQocCkpCi0JCQkJYXJjaF9hcm1fa3Byb2JlKHApOworCQkJCV9fYXJtX2twcm9iZShwKTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZ0ZXh0X211dGV4KTsKIApAQCAtMTQ1NiwxNiArMTkxNiwyMyBAQAogCiAJa3Byb2Jlc19hbGxfZGlzYXJtZWQgPSB0cnVlOwogCXByaW50ayhLRVJOX0lORk8gIktwcm9iZXMgZ2xvYmFsbHkgZGlzYWJsZWRcbiIpOworCisJLyoKKwkgKiBIZXJlIHdlIGNhbGwgZ2V0X29ubGluZV9jcHVzKCkgZm9yIGF2b2lkaW5nIHRleHRfbXV0ZXggZGVhZGxvY2ssCisJICogYmVjYXVzZSBkaXNhcm1pbmcgbWF5IGFsc28gdW5vcHRpbWl6ZSBrcHJvYmVzLgorCSAqLworCWdldF9vbmxpbmVfY3B1cygpOwogCW11dGV4X2xvY2soJnRleHRfbXV0ZXgpOwogCWZvciAoaSA9IDA7IGkgPCBLUFJPQkVfVEFCTEVfU0laRTsgaSsrKSB7CiAJCWhlYWQgPSAma3Byb2JlX3RhYmxlW2ldOwogCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocCwgbm9kZSwgaGVhZCwgaGxpc3QpIHsKIAkJCWlmICghYXJjaF90cmFtcG9saW5lX2twcm9iZShwKSAmJiAha3Byb2JlX2Rpc2FibGVkKHApKQotCQkJCWFyY2hfZGlzYXJtX2twcm9iZShwKTsKKwkJCQlfX2Rpc2FybV9rcHJvYmUocCk7CiAJCX0KIAl9CiAKIAltdXRleF91bmxvY2soJnRleHRfbXV0ZXgpOworCXB1dF9vbmxpbmVfY3B1cygpOwogCW11dGV4X3VubG9jaygma3Byb2JlX211dGV4KTsKIAkvKiBBbGxvdyBhbGwgY3VycmVudGx5IHJ1bm5pbmcga3Byb2JlcyB0byBjb21wbGV0ZSAqLwogCXN5bmNocm9uaXplX3NjaGVkKCk7CmRpZmYgLS1naXQgYS9rZXJuZWwva3N5c2ZzLmMgYi9rZXJuZWwva3N5c2ZzLmMKaW5kZXggNmIxY2NjMy4uMjFmZTNjNCAxMDA2NDQKLS0tIGEva2VybmVsL2tzeXNmcy5jCisrKyBiL2tlcm5lbC9rc3lzZnMuYwpAQCAtMzMsNyArMzMsNyBAQAogfQogS0VSTkVMX0FUVFJfUk8odWV2ZW50X3NlcW51bSk7CiAKLS8qIHVldmVudCBoZWxwZXIgcHJvZ3JhbSwgdXNlZCBkdXJpbmcgZWFybHkgYm9vICovCisvKiB1ZXZlbnQgaGVscGVyIHByb2dyYW0sIHVzZWQgZHVyaW5nIGVhcmx5IGJvb3QgKi8KIHN0YXRpYyBzc2l6ZV90IHVldmVudF9oZWxwZXJfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwKIAkJCQkgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS5jIGIva2VybmVsL21vZHVsZS5jCmluZGV4IGY4MjM4NmIuLmM5NjhkMzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUuYworKysgYi9rZXJuZWwvbW9kdWxlLmMKQEAgLTQ3NCw5ICs0NzQsMTAgQEAKIAogCUlOSVRfTElTVF9IRUFEKCZtb2QtPm1vZHVsZXNfd2hpY2hfdXNlX21lKTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQotCQlsb2NhbF9zZXQoX19tb2R1bGVfcmVmX2FkZHIobW9kLCBjcHUpLCAwKTsKKwkJcGVyX2NwdV9wdHIobW9kLT5yZWZwdHIsIGNwdSktPmNvdW50ID0gMDsKKwogCS8qIEhvbGQgcmVmZXJlbmNlIGNvdW50IGR1cmluZyBpbml0aWFsaXphdGlvbi4gKi8KLQlsb2NhbF9zZXQoX19tb2R1bGVfcmVmX2FkZHIobW9kLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSwgMSk7CisJX190aGlzX2NwdV93cml0ZShtb2QtPnJlZnB0ci0+Y291bnQsIDEpOwogCS8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IG1hY3JvcyBwdXQgcmVmY291bnQgZHVyaW5nIGluaXQuICovCiAJbW9kLT53YWl0ZXIgPSBjdXJyZW50OwogfQpAQCAtNjE5LDcgKzYyMCw3IEBACiAJaW50IGNwdTsKIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpCi0JCXRvdGFsICs9IGxvY2FsX3JlYWQoX19tb2R1bGVfcmVmX2FkZHIobW9kLCBjcHUpKTsKKwkJdG90YWwgKz0gcGVyX2NwdV9wdHIobW9kLT5yZWZwdHIsIGNwdSktPmNvdW50OwogCXJldHVybiB0b3RhbDsKIH0KIEVYUE9SVF9TWU1CT0wobW9kdWxlX3JlZmNvdW50KTsKQEAgLTc5NiwxNCArNzk3LDE1IEBACiB2b2lkIG1vZHVsZV9wdXQoc3RydWN0IG1vZHVsZSAqbW9kdWxlKQogewogCWlmIChtb2R1bGUpIHsKLQkJdW5zaWduZWQgaW50IGNwdSA9IGdldF9jcHUoKTsKLQkJbG9jYWxfZGVjKF9fbW9kdWxlX3JlZl9hZGRyKG1vZHVsZSwgY3B1KSk7CisJCXByZWVtcHRfZGlzYWJsZSgpOworCQlfX3RoaXNfY3B1X2RlYyhtb2R1bGUtPnJlZnB0ci0+Y291bnQpOworCiAJCXRyYWNlX21vZHVsZV9wdXQobW9kdWxlLCBfUkVUX0lQXywKLQkJCQkgbG9jYWxfcmVhZChfX21vZHVsZV9yZWZfYWRkcihtb2R1bGUsIGNwdSkpKTsKKwkJCQkgX190aGlzX2NwdV9yZWFkKG1vZHVsZS0+cmVmcHRyLT5jb3VudCkpOwogCQkvKiBNYXliZSB0aGV5J3JlIHdhaXRpbmcgZm9yIHVzIHRvIGRyb3AgcmVmZXJlbmNlPyAqLwogCQlpZiAodW5saWtlbHkoIW1vZHVsZV9pc19saXZlKG1vZHVsZSkpKQogCQkJd2FrZV91cF9wcm9jZXNzKG1vZHVsZS0+d2FpdGVyKTsKLQkJcHV0X2NwdSgpOworCQlwcmVlbXB0X2VuYWJsZSgpOwogCX0KIH0KIEVYUE9SVF9TWU1CT0wobW9kdWxlX3B1dCk7CkBAIC0xMDgzLDYgKzEwODUsNyBAQAogCQlpZiAoc2F0dHItPm5hbWUgPT0gTlVMTCkKIAkJCWdvdG8gb3V0OwogCQlzZWN0X2F0dHJzLT5uc2VjdGlvbnMrKzsKKwkJc3lzZnNfYXR0cl9pbml0KCZzYXR0ci0+bWF0dHIuYXR0cik7CiAJCXNhdHRyLT5tYXR0ci5zaG93ID0gbW9kdWxlX3NlY3Rfc2hvdzsKIAkJc2F0dHItPm1hdHRyLnN0b3JlID0gTlVMTDsKIAkJc2F0dHItPm1hdHRyLmF0dHIubmFtZSA9IHNhdHRyLT5uYW1lOwpAQCAtMTE3OCw2ICsxMTgxLDcgQEAKIAkJaWYgKHNlY3RfZW1wdHkoJnNlY2hkcnNbaV0pKQogCQkJY29udGludWU7CiAJCWlmIChzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX05PVEUpIHsKKwkJCXN5c2ZzX2Jpbl9hdHRyX2luaXQobmF0dHIpOwogCQkJbmF0dHItPmF0dHIubmFtZSA9IG1vZC0+c2VjdF9hdHRycy0+YXR0cnNbbG9hZGVkXS5uYW1lOwogCQkJbmF0dHItPmF0dHIubW9kZSA9IFNfSVJVR087CiAJCQluYXR0ci0+c2l6ZSA9IHNlY2hkcnNbaV0uc2hfc2l6ZTsKQEAgLTEyNTAsNiArMTI1NCw3IEBACiAJCWlmICghYXR0ci0+dGVzdCB8fAogCQkgICAgKGF0dHItPnRlc3QgJiYgYXR0ci0+dGVzdChtb2QpKSkgewogCQkJbWVtY3B5KHRlbXBfYXR0ciwgYXR0ciwgc2l6ZW9mKCp0ZW1wX2F0dHIpKTsKKwkJCXN5c2ZzX2F0dHJfaW5pdCgmdGVtcF9hdHRyLT5hdHRyKTsKIAkJCWVycm9yID0gc3lzZnNfY3JlYXRlX2ZpbGUoJm1vZC0+bWtvYmoua29iaiwmdGVtcF9hdHRyLT5hdHRyKTsKIAkJCSsrdGVtcF9hdHRyOwogCQl9CkBAIC0xMzk3LDkgKzE0MDIsOSBAQAogCWtmcmVlKG1vZC0+YXJncyk7CiAJaWYgKG1vZC0+cGVyY3B1KQogCQlwZXJjcHVfbW9kZnJlZShtb2QtPnBlcmNwdSk7Ci0jaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFX1VOTE9BRCkgJiYgZGVmaW5lZChDT05GSUdfU01QKQorI2lmIGRlZmluZWQoQ09ORklHX01PRFVMRV9VTkxPQUQpCiAJaWYgKG1vZC0+cmVmcHRyKQotCQlwZXJjcHVfbW9kZnJlZShtb2QtPnJlZnB0cik7CisJCWZyZWVfcGVyY3B1KG1vZC0+cmVmcHRyKTsKICNlbmRpZgogCS8qIEZyZWUgbG9jay1jbGFzc2VzOiAqLwogCWxvY2tkZXBfZnJlZV9rZXlfcmFuZ2UobW9kLT5tb2R1bGVfY29yZSwgbW9kLT5jb3JlX3NpemUpOwpAQCAtMjE2Miw5ICsyMTY3LDggQEAKIAltb2QgPSAodm9pZCAqKXNlY2hkcnNbbW9kaW5kZXhdLnNoX2FkZHI7CiAJa21lbWxlYWtfbG9hZF9tb2R1bGUobW9kLCBoZHIsIHNlY2hkcnMsIHNlY3N0cmluZ3MpOwogCi0jaWYgZGVmaW5lZChDT05GSUdfTU9EVUxFX1VOTE9BRCkgJiYgZGVmaW5lZChDT05GSUdfU01QKQotCW1vZC0+cmVmcHRyID0gcGVyY3B1X21vZGFsbG9jKHNpemVvZihsb2NhbF90KSwgX19hbGlnbm9mX18obG9jYWxfdCksCi0JCQkJICAgICAgbW9kLT5uYW1lKTsKKyNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVfVU5MT0FEKQorCW1vZC0+cmVmcHRyID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBtb2R1bGVfcmVmKTsKIAlpZiAoIW1vZC0+cmVmcHRyKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZnJlZV9pbml0OwpAQCAtMjM5Niw4ICsyNDAwLDggQEAKIAlrb2JqZWN0X3B1dCgmbW9kLT5ta29iai5rb2JqKTsKICBmcmVlX3VubG9hZDoKIAltb2R1bGVfdW5sb2FkX2ZyZWUobW9kKTsKLSNpZiBkZWZpbmVkKENPTkZJR19NT0RVTEVfVU5MT0FEKSAmJiBkZWZpbmVkKENPTkZJR19TTVApCi0JcGVyY3B1X21vZGZyZWUobW9kLT5yZWZwdHIpOworI2lmIGRlZmluZWQoQ09ORklHX01PRFVMRV9VTkxPQUQpCisJZnJlZV9wZXJjcHUobW9kLT5yZWZwdHIpOwogIGZyZWVfaW5pdDoKICNlbmRpZgogCW1vZHVsZV9mcmVlKG1vZCwgbW9kLT5tb2R1bGVfaW5pdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvbnNwcm94eS5jIGIva2VybmVsL25zcHJveHkuYwppbmRleCAwOWI0ZmY5Li4yYWI2NzIzIDEwMDY0NAotLS0gYS9rZXJuZWwvbnNwcm94eS5jCisrKyBiL2tlcm5lbC9uc3Byb3h5LmMKQEAgLTI0LDcgKzI0LDE4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqbnNwcm94eV9jYWNoZXA7CiAKLXN0cnVjdCBuc3Byb3h5IGluaXRfbnNwcm94eSA9IElOSVRfTlNQUk9YWShpbml0X25zcHJveHkpOworc3RydWN0IG5zcHJveHkgaW5pdF9uc3Byb3h5ID0geworCS5jb3VudAk9IEFUT01JQ19JTklUKDEpLAorCS51dHNfbnMJPSAmaW5pdF91dHNfbnMsCisjaWYgZGVmaW5lZChDT05GSUdfUE9TSVhfTVFVRVVFKSB8fCBkZWZpbmVkKENPTkZJR19TWVNWSVBDKQorCS5pcGNfbnMJPSAmaW5pdF9pcGNfbnMsCisjZW5kaWYKKwkubW50X25zCT0gTlVMTCwKKwkucGlkX25zCT0gJmluaXRfcGlkX25zLAorI2lmZGVmIENPTkZJR19ORVQKKwkubmV0X25zCT0gJmluaXRfbmV0LAorI2VuZGlmCit9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuc3Byb3h5ICpjcmVhdGVfbnNwcm94eSh2b2lkKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL3BhZGF0YS5jIGIva2VybmVsL3BhZGF0YS5jCmluZGV4IDZmOWJjYjguLjkzY2FmNjUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYWRhdGEuYworKysgYi9rZXJuZWwvcGFkYXRhLmMKQEAgLTY0Miw2ICs2NDIsOSBAQAogCWlmICghcGQpCiAJCWdvdG8gZXJyX2ZyZWVfaW5zdDsKIAorCWlmICghYWxsb2NfY3B1bWFza192YXIoJnBpbnN0LT5jcHVtYXNrLCBHRlBfS0VSTkVMKSkKKwkJZ290byBlcnJfZnJlZV9wZDsKKwogCXJjdV9hc3NpZ25fcG9pbnRlcihwaW5zdC0+cGQsIHBkKTsKIAogCXBpbnN0LT53cSA9IHdxOwpAQCAtNjU0LDEyICs2NTcsMTQgQEAKIAlwaW5zdC0+Y3B1X25vdGlmaWVyLnByaW9yaXR5ID0gMDsKIAllcnIgPSByZWdpc3Rlcl9ob3RjcHVfbm90aWZpZXIoJnBpbnN0LT5jcHVfbm90aWZpZXIpOwogCWlmIChlcnIpCi0JCWdvdG8gZXJyX2ZyZWVfcGQ7CisJCWdvdG8gZXJyX2ZyZWVfY3B1bWFzazsKIAogCW11dGV4X2luaXQoJnBpbnN0LT5sb2NrKTsKIAogCXJldHVybiBwaW5zdDsKIAorZXJyX2ZyZWVfY3B1bWFzazoKKwlmcmVlX2NwdW1hc2tfdmFyKHBpbnN0LT5jcHVtYXNrKTsKIGVycl9mcmVlX3BkOgogCXBhZGF0YV9mcmVlX3BkKHBkKTsKIGVycl9mcmVlX2luc3Q6CkBAIC02ODUsNiArNjkwLDcgQEAKIAogCXVucmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZwaW5zdC0+Y3B1X25vdGlmaWVyKTsKIAlwYWRhdGFfZnJlZV9wZChwaW5zdC0+cGQpOworCWZyZWVfY3B1bWFza192YXIocGluc3QtPmNwdW1hc2spOwogCWtmcmVlKHBpbnN0KTsKIH0KIEVYUE9SVF9TWU1CT0wocGFkYXRhX2ZyZWUpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3BhbmljLmMgYi9rZXJuZWwvcGFuaWMuYwppbmRleCBjNzg3MzMzLi4xM2Q5NjZiIDEwMDY0NAotLS0gYS9rZXJuZWwvcGFuaWMuYworKysgYi9rZXJuZWwvcGFuaWMuYwpAQCAtMzYsMTUgKzM2LDM2IEBACiAKIEVYUE9SVF9TWU1CT0wocGFuaWNfbm90aWZpZXJfbGlzdCk7CiAKLXN0YXRpYyBsb25nIG5vX2JsaW5rKGxvbmcgdGltZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQogLyogUmV0dXJucyBob3cgbG9uZyBpdCB3YWl0ZWQgaW4gbXMgKi8KIGxvbmcgKCpwYW5pY19ibGluaykobG9uZyB0aW1lKTsKIEVYUE9SVF9TWU1CT0wocGFuaWNfYmxpbmspOwogCitzdGF0aWMgdm9pZCBwYW5pY19ibGlua19vbmVfc2Vjb25kKHZvaWQpCit7CisJc3RhdGljIGxvbmcgaSA9IDAsIGVuZDsKKworCWlmIChwYW5pY19ibGluaykgeworCQllbmQgPSBpICsgTVNFQ19QRVJfU0VDOworCisJCXdoaWxlIChpIDwgZW5kKSB7CisJCQlpICs9IHBhbmljX2JsaW5rKGkpOworCQkJbWRlbGF5KDEpOworCQkJaSsrOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogV2hlbiBydW5uaW5nIHVuZGVyIGEgaHlwZXJ2aXNvciBhIHNtYWxsIG1kZWxheSBtYXkgZ2V0CisJCSAqIHJvdW5kZWQgdXAgdG8gdGhlIGh5cGVydmlzb3IgdGltZXNsaWNlLiBGb3IgZXhhbXBsZSwgd2l0aAorCQkgKiBhIDFtcyBpbiAxMG1zIGh5cGVydmlzb3IgdGltZXNsaWNlIHdlIG1pZ2h0IGluZmxhdGUgYQorCQkgKiBtZGVsYXkoMSkgbG9vcCBieSAxMHguCisJCSAqCisJCSAqIElmIHdlIGhhdmUgbm90aGluZyB0byBibGluaywgc3BpbiBvbiAxIHNlY29uZCBjYWxscyB0bworCQkgKiBtZGVsYXkgdG8gYXZvaWQgdGhpcy4KKwkJICovCisJCW1kZWxheShNU0VDX1BFUl9TRUMpOworCX0KK30KKwogLyoqCiAgKglwYW5pYyAtIGhhbHQgdGhlIHN5c3RlbQogICoJQGZtdDogVGhlIHRleHQgc3RyaW5nIHRvIHByaW50CkBAIC05NSw5ICsxMTYsNiBAQAogCiAJYnVzdF9zcGlubG9ja3MoMCk7CiAKLQlpZiAoIXBhbmljX2JsaW5rKQotCQlwYW5pY19ibGluayA9IG5vX2JsaW5rOwotCiAJaWYgKHBhbmljX3RpbWVvdXQgPiAwKSB7CiAJCS8qCiAJCSAqIERlbGF5IHRpbWVvdXQgc2Vjb25kcyBiZWZvcmUgcmVib290aW5nIHRoZSBtYWNoaW5lLgpAQCAtMTA1LDExICsxMjMsOSBAQAogCQkgKi8KIAkJcHJpbnRrKEtFUk5fRU1FUkcgIlJlYm9vdGluZyBpbiAlZCBzZWNvbmRzLi4iLCBwYW5pY190aW1lb3V0KTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgcGFuaWNfdGltZW91dCoxMDAwOyApIHsKKwkJZm9yIChpID0gMDsgaSA8IHBhbmljX3RpbWVvdXQ7IGkrKykgewogCQkJdG91Y2hfbm1pX3dhdGNoZG9nKCk7Ci0JCQlpICs9IHBhbmljX2JsaW5rKGkpOwotCQkJbWRlbGF5KDEpOwotCQkJaSsrOworCQkJcGFuaWNfYmxpbmtfb25lX3NlY29uZCgpOwogCQl9CiAJCS8qCiAJCSAqIFRoaXMgd2lsbCBub3QgYmUgYSBjbGVhbiByZWJvb3QsIHdpdGggZXZlcnl0aGluZwpAQCAtMTM1LDExICsxNTEsOSBAQAogCX0KICNlbmRpZgogCWxvY2FsX2lycV9lbmFibGUoKTsKLQlmb3IgKGkgPSAwOyA7ICkgeworCXdoaWxlICgxKSB7CiAJCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKLQkJaSArPSBwYW5pY19ibGluayhpKTsKLQkJbWRlbGF5KDEpOwotCQlpKys7CisJCXBhbmljX2JsaW5rX29uZV9zZWNvbmQoKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wYXJhbXMuYyBiL2tlcm5lbC9wYXJhbXMuYwppbmRleCBjZjFiNjkxLi4wYjMwZWNkIDEwMDY0NAotLS0gYS9rZXJuZWwvcGFyYW1zLmMKKysrIGIva2VybmVsL3BhcmFtcy5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAKICNpZiAwCiAjZGVmaW5lIERFQlVHUCBwcmludGsKQEAgLTQwMiw4ICs0MDEsOCBAQAogfQogCiAvKiBzeXNmcyBvdXRwdXQgaW4gL3N5cy9tb2R1bGVzL1hZWi9wYXJhbWV0ZXJzLyAqLwotI2RlZmluZSB0b19tb2R1bGVfYXR0cihuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUsIGF0dHIpOwotI2RlZmluZSB0b19tb2R1bGVfa29iamVjdChuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IG1vZHVsZV9rb2JqZWN0LCBrb2JqKTsKKyNkZWZpbmUgdG9fbW9kdWxlX2F0dHIobikgY29udGFpbmVyX29mKG4sIHN0cnVjdCBtb2R1bGVfYXR0cmlidXRlLCBhdHRyKQorI2RlZmluZSB0b19tb2R1bGVfa29iamVjdChuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IG1vZHVsZV9rb2JqZWN0LCBrb2JqKQogCiBleHRlcm4gc3RydWN0IGtlcm5lbF9wYXJhbSBfX3N0YXJ0X19fcGFyYW1bXSwgX19zdG9wX19fcGFyYW1bXTsKIApAQCAtNDIxLDcgKzQyMCw3IEBACiB9OwogCiAjaWZkZWYgQ09ORklHX1NZU0ZTCi0jZGVmaW5lIHRvX3BhcmFtX2F0dHIobikgY29udGFpbmVyX29mKG4sIHN0cnVjdCBwYXJhbV9hdHRyaWJ1dGUsIG1hdHRyKTsKKyNkZWZpbmUgdG9fcGFyYW1fYXR0cihuKSBjb250YWluZXJfb2Yobiwgc3RydWN0IHBhcmFtX2F0dHJpYnV0ZSwgbWF0dHIpCiAKIHN0YXRpYyBzc2l6ZV90IHBhcmFtX2F0dHJfc2hvdyhzdHJ1Y3QgbW9kdWxlX2F0dHJpYnV0ZSAqbWF0dHIsCiAJCQkgICAgICAgc3RydWN0IG1vZHVsZSAqbW9kLCBjaGFyICpidWYpCkBAIC01MTcsNiArNTE2LDcgQEAKIAluZXctPmdycC5hdHRycyA9IGF0dHJzOwogCiAJLyogVGFjayBuZXcgb25lIG9uIHRoZSBlbmQuICovCisJc3lzZnNfYXR0cl9pbml0KCZuZXctPmF0dHJzW251bV0ubWF0dHIuYXR0cik7CiAJbmV3LT5hdHRyc1tudW1dLnBhcmFtID0ga3A7CiAJbmV3LT5hdHRyc1tudW1dLm1hdHRyLnNob3cgPSBwYXJhbV9hdHRyX3Nob3c7CiAJbmV3LT5hdHRyc1tudW1dLm1hdHRyLnN0b3JlID0gcGFyYW1fYXR0cl9zdG9yZTsKQEAgLTcyMyw3ICs3MjMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIG1vZHVsZV9zeXNmc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBtb2R1bGVfc3lzZnNfb3BzID0gewogCS5zaG93ID0gbW9kdWxlX2F0dHJfc2hvdywKIAkuc3RvcmUgPSBtb2R1bGVfYXR0cl9zdG9yZSwKIH07CkBAIC03MzcsNyArNzM3LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBrc2V0X3VldmVudF9vcHMgbW9kdWxlX3VldmVudF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGtzZXRfdWV2ZW50X29wcyBtb2R1bGVfdWV2ZW50X29wcyA9IHsKIAkuZmlsdGVyID0gdWV2ZW50X2ZpbHRlciwKIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wZXJmX2V2ZW50LmMgYi9rZXJuZWwvcGVyZl9ldmVudC5jCmluZGV4IGE2NjFlNzkuLmY0MDU2MGIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wZXJmX2V2ZW50LmMKKysrIGIva2VybmVsL3BlcmZfZXZlbnQuYwpAQCAtMjYxMCw3ICsyNjEwLDcgQEAKIAlpZiAodXNlcl9sb2NrZWQgPiB1c2VyX2xvY2tfbGltaXQpCiAJCWV4dHJhID0gdXNlcl9sb2NrZWQgLSB1c2VyX2xvY2tfbGltaXQ7CiAKLQlsb2NrX2xpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1cjsKKwlsb2NrX2xpbWl0ID0gcmxpbWl0KFJMSU1JVF9NRU1MT0NLKTsKIAlsb2NrX2xpbWl0ID4+PSBQQUdFX1NISUZUOwogCWxvY2tlZCA9IHZtYS0+dm1fbW0tPmxvY2tlZF92bSArIGV4dHJhOwogCkBAIC01NDgxLDEzICs1NDgxLDE2IEBACiAJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZwZXJmX2NwdV9uYik7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHBlcmZfc2hvd19yZXNlcnZlX3BlcmNwdShzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbGFzcywgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgcGVyZl9zaG93X3Jlc2VydmVfcGVyY3B1KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLAorCQkJCQlzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY2hhciAqYnVmKQogewogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwZXJmX3Jlc2VydmVkX3BlcmNwdSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90CiBwZXJmX3NldF9yZXNlcnZlX3BlcmNwdShzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbGFzcywKKwkJCXN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICphdHRyLAogCQkJY29uc3QgY2hhciAqYnVmLAogCQkJc2l6ZV90IGNvdW50KQogewpAQCAtNTUxNiwxMyArNTUxOSwxNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHNzaXplX3QgcGVyZl9zaG93X292ZXJjb21taXQoc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHBlcmZfc2hvd19vdmVyY29tbWl0KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLAorCQkJCSAgICBzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgY2hhciAqYnVmKQogewogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwZXJmX292ZXJjb21taXQpOwogfQogCiBzdGF0aWMgc3NpemVfdAotcGVyZl9zZXRfb3ZlcmNvbW1pdChzdHJ1Y3Qgc3lzZGV2X2NsYXNzICpjbGFzcywgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCitwZXJmX3NldF9vdmVyY29tbWl0KHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLAorCQkgICAgc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAl1bnNpZ25lZCBsb25nIHZhbDsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEva2VybmVsL3BpZC5jIGIva2VybmVsL3BpZC5jCmluZGV4IGIwOGU2OTcuLjg2YjI5NjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9waWQuYworKysgYi9rZXJuZWwvcGlkLmMKQEAgLTM3Niw3ICszNzYsNyBAQAogRVhQT1JUX1NZTUJPTChwaWRfdGFzayk7CiAKIC8qCi0gKiBNdXN0IGJlIGNhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCkgb3Igd2l0aCB0YXNrbGlzdF9sb2NrIHJlYWQtaGVsZC4KKyAqIE11c3QgYmUgY2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKS4KICAqLwogc3RydWN0IHRhc2tfc3RydWN0ICpmaW5kX3Rhc2tfYnlfcGlkX25zKHBpZF90IG5yLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGlkX25hbWVzcGFjZS5jIGIva2VybmVsL3BpZF9uYW1lc3BhY2UuYwppbmRleCA4NmIzNzk2Li43OWFhYzkzIDEwMDY0NAotLS0gYS9rZXJuZWwvcGlkX25hbWVzcGFjZS5jCisrKyBiL2tlcm5lbC9waWRfbmFtZXNwYWNlLmMKQEAgLTE2MSwxMyArMTYxLDEyIEBACiAJCXJjdV9yZWFkX2xvY2soKTsKIAogCQkvKgotCQkgKiBVc2UgZm9yY2Vfc2lnKCkgc2luY2UgaXQgY2xlYXJzIFNJR05BTF9VTktJTExBQkxFIGVuc3VyaW5nCi0JCSAqIGFueSBuZXN0ZWQtY29udGFpbmVyJ3MgaW5pdCBwcm9jZXNzZXMgZG9uJ3QgaWdub3JlIHRoZQotCQkgKiBzaWduYWwKKwkJICogQW55IG5lc3RlZC1jb250YWluZXIncyBpbml0IHByb2Nlc3NlcyB3b24ndCBpZ25vcmUgdGhlCisJCSAqIFNFTkRfU0lHX05PSU5GTyBzaWduYWwsIHNlZSBzZW5kX3NpZ25hbCgpLT5zaV9mcm9tdXNlcigpLgogCQkgKi8KIAkJdGFzayA9IHBpZF90YXNrKGZpbmRfdnBpZChuciksIFBJRFRZUEVfUElEKTsKIAkJaWYgKHRhc2spCi0JCQlmb3JjZV9zaWcoU0lHS0lMTCwgdGFzayk7CisJCQlzZW5kX3NpZ19pbmZvKFNJR0tJTEwsIFNFTkRfU0lHX05PSU5GTywgdGFzayk7CiAKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMgYi9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCmluZGV4IDQzOGZmNDUuLjFhMjJkZmQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKKysrIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwpAQCAtOTgyLDYgKzk4Miw3IEBACiAJaW50IG1heGZpcmU7CiAJc3RydWN0IGxpc3RfaGVhZCAqdGltZXJzID0gdHNrLT5jcHVfdGltZXJzOwogCXN0cnVjdCBzaWduYWxfc3RydWN0ICpjb25zdCBzaWcgPSB0c2stPnNpZ25hbDsKKwl1bnNpZ25lZCBsb25nIHNvZnQ7CiAKIAltYXhmaXJlID0gMjA7CiAJdHNrLT5jcHV0aW1lX2V4cGlyZXMucHJvZl9leHAgPSBjcHV0aW1lX3plcm87CkBAIC0xMDMwLDkgKzEwMzEsMTAgQEAKIAkvKgogCSAqIENoZWNrIGZvciB0aGUgc3BlY2lhbCBjYXNlIHRocmVhZCB0aW1lcnMuCiAJICovCi0JaWYgKHNpZy0+cmxpbVtSTElNSVRfUlRUSU1FXS5ybGltX2N1ciAhPSBSTElNX0lORklOSVRZKSB7Ci0JCXVuc2lnbmVkIGxvbmcgaGFyZCA9IHNpZy0+cmxpbVtSTElNSVRfUlRUSU1FXS5ybGltX21heDsKLQkJdW5zaWduZWQgbG9uZyAqc29mdCA9ICZzaWctPnJsaW1bUkxJTUlUX1JUVElNRV0ucmxpbV9jdXI7CisJc29mdCA9IEFDQ0VTU19PTkNFKHNpZy0+cmxpbVtSTElNSVRfUlRUSU1FXS5ybGltX2N1cik7CisJaWYgKHNvZnQgIT0gUkxJTV9JTkZJTklUWSkgeworCQl1bnNpZ25lZCBsb25nIGhhcmQgPQorCQkJQUNDRVNTX09OQ0Uoc2lnLT5ybGltW1JMSU1JVF9SVFRJTUVdLnJsaW1fbWF4KTsKIAogCQlpZiAoaGFyZCAhPSBSTElNX0lORklOSVRZICYmCiAJCSAgICB0c2stPnJ0LnRpbWVvdXQgPiBESVZfUk9VTkRfVVAoaGFyZCwgVVNFQ19QRVJfU0VDL0haKSkgewpAQCAtMTA0MywxNCArMTA0NSwxMyBAQAogCQkJX19ncm91cF9zZW5kX3NpZ19pbmZvKFNJR0tJTEwsIFNFTkRfU0lHX1BSSVYsIHRzayk7CiAJCQlyZXR1cm47CiAJCX0KLQkJaWYgKHRzay0+cnQudGltZW91dCA+IERJVl9ST1VORF9VUCgqc29mdCwgVVNFQ19QRVJfU0VDL0haKSkgeworCQlpZiAodHNrLT5ydC50aW1lb3V0ID4gRElWX1JPVU5EX1VQKHNvZnQsIFVTRUNfUEVSX1NFQy9IWikpIHsKIAkJCS8qCiAJCQkgKiBBdCB0aGUgc29mdCBsaW1pdCwgc2VuZCBhIFNJR1hDUFUgZXZlcnkgc2Vjb25kLgogCQkJICovCi0JCQlpZiAoc2lnLT5ybGltW1JMSU1JVF9SVFRJTUVdLnJsaW1fY3VyCi0JCQkgICAgPCBzaWctPnJsaW1bUkxJTUlUX1JUVElNRV0ucmxpbV9tYXgpIHsKLQkJCQlzaWctPnJsaW1bUkxJTUlUX1JUVElNRV0ucmxpbV9jdXIgKz0KLQkJCQkJCQkJVVNFQ19QRVJfU0VDOworCQkJaWYgKHNvZnQgPCBoYXJkKSB7CisJCQkJc29mdCArPSBVU0VDX1BFUl9TRUM7CisJCQkJc2lnLT5ybGltW1JMSU1JVF9SVFRJTUVdLnJsaW1fY3VyID0gc29mdDsKIAkJCX0KIAkJCXByaW50ayhLRVJOX0lORk8KIAkJCQkiUlQgV2F0Y2hkb2cgVGltZW91dDogJXNbJWRdXG4iLApAQCAtMTEyMSw2ICsxMTIyLDcgQEAKIAl1bnNpZ25lZCBsb25nIGxvbmcgc3VtX3NjaGVkX3J1bnRpbWUsIHNjaGVkX2V4cGlyZXM7CiAJc3RydWN0IGxpc3RfaGVhZCAqdGltZXJzID0gc2lnLT5jcHVfdGltZXJzOwogCXN0cnVjdCB0YXNrX2NwdXRpbWUgY3B1dGltZTsKKwl1bnNpZ25lZCBsb25nIHNvZnQ7CiAKIAkvKgogCSAqIERvbid0IHNhbXBsZSB0aGUgY3VycmVudCBwcm9jZXNzIENQVSBjbG9ja3MgaWYgdGhlcmUgYXJlIG5vIHRpbWVycy4KQEAgLTExOTMsMTEgKzExOTUsMTMgQEAKIAkJCSBTSUdQUk9GKTsKIAljaGVja19jcHVfaXRpbWVyKHRzaywgJnNpZy0+aXRbQ1BVQ0xPQ0tfVklSVF0sICZ2aXJ0X2V4cGlyZXMsIHV0aW1lLAogCQkJIFNJR1ZUQUxSTSk7Ci0KLQlpZiAoc2lnLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyICE9IFJMSU1fSU5GSU5JVFkpIHsKKwlzb2Z0ID0gQUNDRVNTX09OQ0Uoc2lnLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fY3VyKTsKKwlpZiAoc29mdCAhPSBSTElNX0lORklOSVRZKSB7CiAJCXVuc2lnbmVkIGxvbmcgcHNlY3MgPSBjcHV0aW1lX3RvX3NlY3MocHRpbWUpOworCQl1bnNpZ25lZCBsb25nIGhhcmQgPQorCQkJQUNDRVNTX09OQ0Uoc2lnLT5ybGltW1JMSU1JVF9DUFVdLnJsaW1fbWF4KTsKIAkJY3B1dGltZV90IHg7Ci0JCWlmIChwc2VjcyA+PSBzaWctPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9tYXgpIHsKKwkJaWYgKHBzZWNzID49IGhhcmQpIHsKIAkJCS8qCiAJCQkgKiBBdCB0aGUgaGFyZCBsaW1pdCwgd2UganVzdCBkaWUuCiAJCQkgKiBObyBuZWVkIHRvIGNhbGN1bGF0ZSBhbnl0aGluZyBlbHNlIG5vdy4KQEAgLTEyMDUsMTcgKzEyMDksMTcgQEAKIAkJCV9fZ3JvdXBfc2VuZF9zaWdfaW5mbyhTSUdLSUxMLCBTRU5EX1NJR19QUklWLCB0c2spOwogCQkJcmV0dXJuOwogCQl9Ci0JCWlmIChwc2VjcyA+PSBzaWctPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXIpIHsKKwkJaWYgKHBzZWNzID49IHNvZnQpIHsKIAkJCS8qCiAJCQkgKiBBdCB0aGUgc29mdCBsaW1pdCwgc2VuZCBhIFNJR1hDUFUgZXZlcnkgc2Vjb25kLgogCQkJICovCiAJCQlfX2dyb3VwX3NlbmRfc2lnX2luZm8oU0lHWENQVSwgU0VORF9TSUdfUFJJViwgdHNrKTsKLQkJCWlmIChzaWctPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXIKLQkJCSAgICA8IHNpZy0+cmxpbVtSTElNSVRfQ1BVXS5ybGltX21heCkgewotCQkJCXNpZy0+cmxpbVtSTElNSVRfQ1BVXS5ybGltX2N1cisrOworCQkJaWYgKHNvZnQgPCBoYXJkKSB7CisJCQkJc29mdCsrOworCQkJCXNpZy0+cmxpbVtSTElNSVRfQ1BVXS5ybGltX2N1ciA9IHNvZnQ7CiAJCQl9CiAJCX0KLQkJeCA9IHNlY3NfdG9fY3B1dGltZShzaWctPnJsaW1bUkxJTUlUX0NQVV0ucmxpbV9jdXIpOworCQl4ID0gc2Vjc190b19jcHV0aW1lKHNvZnQpOwogCQlpZiAoY3B1dGltZV9lcShwcm9mX2V4cGlyZXMsIGNwdXRpbWVfemVybykgfHwKIAkJICAgIGNwdXRpbWVfbHQoeCwgcHJvZl9leHBpcmVzKSkgewogCQkJcHJvZl9leHBpcmVzID0geDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYyBiL2tlcm5lbC9wb3dlci9oaWJlcm5hdGUuYwppbmRleCBiYmZlNDcyLi5kYTUyODhlIDEwMDY0NAotLS0gYS9rZXJuZWwvcG93ZXIvaGliZXJuYXRlLmMKKysrIGIva2VybmVsL3Bvd2VyL2hpYmVybmF0ZS5jCkBAIC0zMjMsNiArMzIzLDcgQEAKIGludCBoaWJlcm5hdGlvbl9zbmFwc2hvdChpbnQgcGxhdGZvcm1fbW9kZSkKIHsKIAlpbnQgZXJyb3I7CisJZ2ZwX3Qgc2F2ZWRfbWFzazsKIAogCWVycm9yID0gcGxhdGZvcm1fYmVnaW4ocGxhdGZvcm1fbW9kZSk7CiAJaWYgKGVycm9yKQpAQCAtMzM0LDYgKzMzNSw3IEBACiAJCWdvdG8gQ2xvc2U7CiAKIAlzdXNwZW5kX2NvbnNvbGUoKTsKKwlzYXZlZF9tYXNrID0gY2xlYXJfZ2ZwX2FsbG93ZWRfbWFzayhHRlBfSU9GUyk7CiAJZXJyb3IgPSBkcG1fc3VzcGVuZF9zdGFydChQTVNHX0ZSRUVaRSk7CiAJaWYgKGVycm9yKQogCQlnb3RvIFJlY292ZXJfcGxhdGZvcm07CkBAIC0zNTEsNiArMzUzLDcgQEAKIAogCWRwbV9yZXN1bWVfZW5kKGluX3N1c3BlbmQgPwogCQkoZXJyb3IgPyBQTVNHX1JFQ09WRVIgOiBQTVNHX1RIQVcpIDogUE1TR19SRVNUT1JFKTsKKwlzZXRfZ2ZwX2FsbG93ZWRfbWFzayhzYXZlZF9tYXNrKTsKIAlyZXN1bWVfY29uc29sZSgpOwogIENsb3NlOgogCXBsYXRmb3JtX2VuZChwbGF0Zm9ybV9tb2RlKTsKQEAgLTQ0NSwxNCArNDQ4LDE3IEBACiBpbnQgaGliZXJuYXRpb25fcmVzdG9yZShpbnQgcGxhdGZvcm1fbW9kZSkKIHsKIAlpbnQgZXJyb3I7CisJZ2ZwX3Qgc2F2ZWRfbWFzazsKIAogCXBtX3ByZXBhcmVfY29uc29sZSgpOwogCXN1c3BlbmRfY29uc29sZSgpOworCXNhdmVkX21hc2sgPSBjbGVhcl9nZnBfYWxsb3dlZF9tYXNrKEdGUF9JT0ZTKTsKIAllcnJvciA9IGRwbV9zdXNwZW5kX3N0YXJ0KFBNU0dfUVVJRVNDRSk7CiAJaWYgKCFlcnJvcikgewogCQllcnJvciA9IHJlc3VtZV90YXJnZXRfa2VybmVsKHBsYXRmb3JtX21vZGUpOwogCQlkcG1fcmVzdW1lX2VuZChQTVNHX1JFQ09WRVIpOwogCX0KKwlzZXRfZ2ZwX2FsbG93ZWRfbWFzayhzYXZlZF9tYXNrKTsKIAlyZXN1bWVfY29uc29sZSgpOwogCXBtX3Jlc3RvcmVfY29uc29sZSgpOwogCXJldHVybiBlcnJvcjsKQEAgLTQ2Niw2ICs0NzIsNyBAQAogaW50IGhpYmVybmF0aW9uX3BsYXRmb3JtX2VudGVyKHZvaWQpCiB7CiAJaW50IGVycm9yOworCWdmcF90IHNhdmVkX21hc2s7CiAKIAlpZiAoIWhpYmVybmF0aW9uX29wcykKIAkJcmV0dXJuIC1FTk9TWVM7CkBAIC00ODEsNiArNDg4LDcgQEAKIAogCWVudGVyaW5nX3BsYXRmb3JtX2hpYmVybmF0aW9uID0gdHJ1ZTsKIAlzdXNwZW5kX2NvbnNvbGUoKTsKKwlzYXZlZF9tYXNrID0gY2xlYXJfZ2ZwX2FsbG93ZWRfbWFzayhHRlBfSU9GUyk7CiAJZXJyb3IgPSBkcG1fc3VzcGVuZF9zdGFydChQTVNHX0hJQkVSTkFURSk7CiAJaWYgKGVycm9yKSB7CiAJCWlmIChoaWJlcm5hdGlvbl9vcHMtPnJlY292ZXIpCkBAIC01MTgsNiArNTI2LDcgQEAKICBSZXN1bWVfZGV2aWNlczoKIAllbnRlcmluZ19wbGF0Zm9ybV9oaWJlcm5hdGlvbiA9IGZhbHNlOwogCWRwbV9yZXN1bWVfZW5kKFBNU0dfUkVTVE9SRSk7CisJc2V0X2dmcF9hbGxvd2VkX21hc2soc2F2ZWRfbWFzayk7CiAJcmVzdW1lX2NvbnNvbGUoKTsKIAogIENsb3NlOgpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL3N1c3BlbmQuYyBiL2tlcm5lbC9wb3dlci9zdXNwZW5kLmMKaW5kZXggNmYxMGRmYy4uNDRjY2UxMCAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL3N1c3BlbmQuYworKysgYi9rZXJuZWwvcG93ZXIvc3VzcGVuZC5jCkBAIC0xODksNiArMTg5LDcgQEAKIGludCBzdXNwZW5kX2RldmljZXNfYW5kX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKIHsKIAlpbnQgZXJyb3I7CisJZ2ZwX3Qgc2F2ZWRfbWFzazsKIAogCWlmICghc3VzcGVuZF9vcHMpCiAJCXJldHVybiAtRU5PU1lTOwpAQCAtMTk5LDYgKzIwMCw3IEBACiAJCQlnb3RvIENsb3NlOwogCX0KIAlzdXNwZW5kX2NvbnNvbGUoKTsKKwlzYXZlZF9tYXNrID0gY2xlYXJfZ2ZwX2FsbG93ZWRfbWFzayhHRlBfSU9GUyk7CiAJc3VzcGVuZF90ZXN0X3N0YXJ0KCk7CiAJZXJyb3IgPSBkcG1fc3VzcGVuZF9zdGFydChQTVNHX1NVU1BFTkQpOwogCWlmIChlcnJvcikgewpAQCAtMjE1LDYgKzIxNyw3IEBACiAJc3VzcGVuZF90ZXN0X3N0YXJ0KCk7CiAJZHBtX3Jlc3VtZV9lbmQoUE1TR19SRVNVTUUpOwogCXN1c3BlbmRfdGVzdF9maW5pc2goInJlc3VtZSBkZXZpY2VzIik7CisJc2V0X2dmcF9hbGxvd2VkX21hc2soc2F2ZWRfbWFzayk7CiAJcmVzdW1lX2NvbnNvbGUoKTsKICBDbG9zZToKIAlpZiAoc3VzcGVuZF9vcHMtPmVuZCkKZGlmZiAtLWdpdCBhL2tlcm5lbC9wcmludGsuYyBiL2tlcm5lbC9wcmludGsuYwppbmRleCAxNzUxYzQ1Ni4uNzUwNzdhZCAxMDA2NDQKLS0tIGEva2VybmVsL3ByaW50ay5jCisrKyBiL2tlcm5lbC9wcmludGsuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+CiAjaW5jbHVkZSA8bGludXgva21zZ19kdW1wLmg+CisjaW5jbHVkZSA8bGludXgvc3lzbG9nLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC02OSw4ICs3MCw2IEBACiAJREVGQVVMVF9DT05TT0xFX0xPR0xFVkVMLAkvKiBkZWZhdWx0X2NvbnNvbGVfbG9nbGV2ZWwgKi8KIH07CiAKLXN0YXRpYyBpbnQgc2F2ZWRfY29uc29sZV9sb2dsZXZlbCA9IC0xOwotCiAvKgogICogTG93IGxldmVsIGRyaXZlcnMgbWF5IG5lZWQgdGhhdCB0byBrbm93IGlmIHRoZXkgY2FuIHNjaGVkdWxlIGluCiAgKiB0aGVpciB1bmJsYW5rKCkgY2FsbGJhY2sgb3Igbm90LiBTbyBsZXQncyBleHBvcnQgaXQuCkBAIC0xNDUsNiArMTQ0LDcgQEAKIHN0YXRpYyBjaGFyICpsb2dfYnVmID0gX19sb2dfYnVmOwogc3RhdGljIGludCBsb2dfYnVmX2xlbiA9IF9fTE9HX0JVRl9MRU47CiBzdGF0aWMgdW5zaWduZWQgbG9nZ2VkX2NoYXJzOyAvKiBOdW1iZXIgb2YgY2hhcnMgcHJvZHVjZWQgc2luY2UgbGFzdCByZWFkK2NsZWFyIG9wZXJhdGlvbiAqLworc3RhdGljIGludCBzYXZlZF9jb25zb2xlX2xvZ2xldmVsID0gLTE7CiAKICNpZmRlZiBDT05GSUdfS0VYRUMKIC8qCkBAIC0yNTgsMzggKzI1OCwyMyBAQAogfQogI2VuZGlmCiAKLS8qCi0gKiBDb21tYW5kcyB0byBkb19zeXNsb2c6Ci0gKgotICogCTAgLS0gQ2xvc2UgdGhlIGxvZy4gIEN1cnJlbnRseSBhIE5PUC4KLSAqIAkxIC0tIE9wZW4gdGhlIGxvZy4gQ3VycmVudGx5IGEgTk9QLgotICogCTIgLS0gUmVhZCBmcm9tIHRoZSBsb2cuCi0gKiAJMyAtLSBSZWFkIGFsbCBtZXNzYWdlcyByZW1haW5pbmcgaW4gdGhlIHJpbmcgYnVmZmVyLgotICogCTQgLS0gUmVhZCBhbmQgY2xlYXIgYWxsIG1lc3NhZ2VzIHJlbWFpbmluZyBpbiB0aGUgcmluZyBidWZmZXIKLSAqIAk1IC0tIENsZWFyIHJpbmcgYnVmZmVyLgotICogCTYgLS0gRGlzYWJsZSBwcmludGsncyB0byBjb25zb2xlCi0gKiAJNyAtLSBFbmFibGUgcHJpbnRrJ3MgdG8gY29uc29sZQotICoJOCAtLSBTZXQgbGV2ZWwgb2YgbWVzc2FnZXMgcHJpbnRlZCB0byBjb25zb2xlCi0gKgk5IC0tIFJldHVybiBudW1iZXIgb2YgdW5yZWFkIGNoYXJhY3RlcnMgaW4gdGhlIGxvZyBidWZmZXIKLSAqICAgICAxMCAtLSBSZXR1cm4gc2l6ZSBvZiB0aGUgbG9nIGJ1ZmZlcgotICovCi1pbnQgZG9fc3lzbG9nKGludCB0eXBlLCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgbGVuKQoraW50IGRvX3N5c2xvZyhpbnQgdHlwZSwgY2hhciBfX3VzZXIgKmJ1ZiwgaW50IGxlbiwgYm9vbCBmcm9tX2ZpbGUpCiB7CiAJdW5zaWduZWQgaSwgaiwgbGltaXQsIGNvdW50OwogCWludCBkb19jbGVhciA9IDA7CiAJY2hhciBjOwogCWludCBlcnJvciA9IDA7CiAKLQllcnJvciA9IHNlY3VyaXR5X3N5c2xvZyh0eXBlKTsKKwllcnJvciA9IHNlY3VyaXR5X3N5c2xvZyh0eXBlLCBmcm9tX2ZpbGUpOwogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCiAJc3dpdGNoICh0eXBlKSB7Ci0JY2FzZSAwOgkJLyogQ2xvc2UgbG9nICovCisJY2FzZSBTWVNMT0dfQUNUSU9OX0NMT1NFOgkvKiBDbG9zZSBsb2cgKi8KIAkJYnJlYWs7Ci0JY2FzZSAxOgkJLyogT3BlbiBsb2cgKi8KKwljYXNlIFNZU0xPR19BQ1RJT05fT1BFTjoJLyogT3BlbiBsb2cgKi8KIAkJYnJlYWs7Ci0JY2FzZSAyOgkJLyogUmVhZCBmcm9tIGxvZyAqLworCWNhc2UgU1lTTE9HX0FDVElPTl9SRUFEOgkvKiBSZWFkIGZyb20gbG9nICovCiAJCWVycm9yID0gLUVJTlZBTDsKIAkJaWYgKCFidWYgfHwgbGVuIDwgMCkKIAkJCWdvdG8gb3V0OwpAQCAtMzIwLDEwICszMDUsMTIgQEAKIAkJaWYgKCFlcnJvcikKIAkJCWVycm9yID0gaTsKIAkJYnJlYWs7Ci0JY2FzZSA0OgkJLyogUmVhZC9jbGVhciBsYXN0IGtlcm5lbCBtZXNzYWdlcyAqLworCS8qIFJlYWQvY2xlYXIgbGFzdCBrZXJuZWwgbWVzc2FnZXMgKi8KKwljYXNlIFNZU0xPR19BQ1RJT05fUkVBRF9DTEVBUjoKIAkJZG9fY2xlYXIgPSAxOwogCQkvKiBGQUxMIFRIUlUgKi8KLQljYXNlIDM6CQkvKiBSZWFkIGxhc3Qga2VybmVsIG1lc3NhZ2VzICovCisJLyogUmVhZCBsYXN0IGtlcm5lbCBtZXNzYWdlcyAqLworCWNhc2UgU1lTTE9HX0FDVElPTl9SRUFEX0FMTDoKIAkJZXJyb3IgPSAtRUlOVkFMOwogCQlpZiAoIWJ1ZiB8fCBsZW4gPCAwKQogCQkJZ290byBvdXQ7CkBAIC0zNzYsMjEgKzM2MywyNSBAQAogCQkJfQogCQl9CiAJCWJyZWFrOwotCWNhc2UgNToJCS8qIENsZWFyIHJpbmcgYnVmZmVyICovCisJLyogQ2xlYXIgcmluZyBidWZmZXIgKi8KKwljYXNlIFNZU0xPR19BQ1RJT05fQ0xFQVI6CiAJCWxvZ2dlZF9jaGFycyA9IDA7CiAJCWJyZWFrOwotCWNhc2UgNjoJCS8qIERpc2FibGUgbG9nZ2luZyB0byBjb25zb2xlICovCisJLyogRGlzYWJsZSBsb2dnaW5nIHRvIGNvbnNvbGUgKi8KKwljYXNlIFNZU0xPR19BQ1RJT05fQ09OU09MRV9PRkY6CiAJCWlmIChzYXZlZF9jb25zb2xlX2xvZ2xldmVsID09IC0xKQogCQkJc2F2ZWRfY29uc29sZV9sb2dsZXZlbCA9IGNvbnNvbGVfbG9nbGV2ZWw7CiAJCWNvbnNvbGVfbG9nbGV2ZWwgPSBtaW5pbXVtX2NvbnNvbGVfbG9nbGV2ZWw7CiAJCWJyZWFrOwotCWNhc2UgNzoJCS8qIEVuYWJsZSBsb2dnaW5nIHRvIGNvbnNvbGUgKi8KKwkvKiBFbmFibGUgbG9nZ2luZyB0byBjb25zb2xlICovCisJY2FzZSBTWVNMT0dfQUNUSU9OX0NPTlNPTEVfT046CiAJCWlmIChzYXZlZF9jb25zb2xlX2xvZ2xldmVsICE9IC0xKSB7CiAJCQljb25zb2xlX2xvZ2xldmVsID0gc2F2ZWRfY29uc29sZV9sb2dsZXZlbDsKIAkJCXNhdmVkX2NvbnNvbGVfbG9nbGV2ZWwgPSAtMTsKIAkJfQogCQlicmVhazsKLQljYXNlIDg6CQkvKiBTZXQgbGV2ZWwgb2YgbWVzc2FnZXMgcHJpbnRlZCB0byBjb25zb2xlICovCisJLyogU2V0IGxldmVsIG9mIG1lc3NhZ2VzIHByaW50ZWQgdG8gY29uc29sZSAqLworCWNhc2UgU1lTTE9HX0FDVElPTl9DT05TT0xFX0xFVkVMOgogCQllcnJvciA9IC1FSU5WQUw7CiAJCWlmIChsZW4gPCAxIHx8IGxlbiA+IDgpCiAJCQlnb3RvIG91dDsKQEAgLTQwMSwxMCArMzkyLDEyIEBACiAJCXNhdmVkX2NvbnNvbGVfbG9nbGV2ZWwgPSAtMTsKIAkJZXJyb3IgPSAwOwogCQlicmVhazsKLQljYXNlIDk6CQkvKiBOdW1iZXIgb2YgY2hhcnMgaW4gdGhlIGxvZyBidWZmZXIgKi8KKwkvKiBOdW1iZXIgb2YgY2hhcnMgaW4gdGhlIGxvZyBidWZmZXIgKi8KKwljYXNlIFNZU0xPR19BQ1RJT05fU0laRV9VTlJFQUQ6CiAJCWVycm9yID0gbG9nX2VuZCAtIGxvZ19zdGFydDsKIAkJYnJlYWs7Ci0JY2FzZSAxMDoJLyogU2l6ZSBvZiB0aGUgbG9nIGJ1ZmZlciAqLworCS8qIFNpemUgb2YgdGhlIGxvZyBidWZmZXIgKi8KKwljYXNlIFNZU0xPR19BQ1RJT05fU0laRV9CVUZGRVI6CiAJCWVycm9yID0gbG9nX2J1Zl9sZW47CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC00MTcsNyArNDEwLDcgQEAKIAogU1lTQ0FMTF9ERUZJTkUzKHN5c2xvZywgaW50LCB0eXBlLCBjaGFyIF9fdXNlciAqLCBidWYsIGludCwgbGVuKQogewotCXJldHVybiBkb19zeXNsb2codHlwZSwgYnVmLCBsZW4pOworCXJldHVybiBkb19zeXNsb2codHlwZSwgYnVmLCBsZW4sIFNZU0xPR19GUk9NX0NBTEwpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEva2VybmVsL3JhbmdlLmMgYi9rZXJuZWwvcmFuZ2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGUyZTYxCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3JhbmdlLmMKQEAgLTAsMCArMSwxNjMgQEAKKy8qCisgKiBSYW5nZSBhZGQgYW5kIHN1YnRyYWN0CisgKi8KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc29ydC5oPgorCisjaW5jbHVkZSA8bGludXgvcmFuZ2UuaD4KKworI2lmbmRlZiBBUlJBWV9TSVpFCisjZGVmaW5lIEFSUkFZX1NJWkUoeCkgKHNpemVvZih4KSAvIHNpemVvZigoeClbMF0pKQorI2VuZGlmCisKK2ludCBhZGRfcmFuZ2Uoc3RydWN0IHJhbmdlICpyYW5nZSwgaW50IGF6LCBpbnQgbnJfcmFuZ2UsIHU2NCBzdGFydCwgdTY0IGVuZCkKK3sKKwlpZiAoc3RhcnQgPj0gZW5kKQorCQlyZXR1cm4gbnJfcmFuZ2U7CisKKwkvKiBPdXQgb2Ygc2xvdHM6ICovCisJaWYgKG5yX3JhbmdlID49IGF6KQorCQlyZXR1cm4gbnJfcmFuZ2U7CisKKwlyYW5nZVtucl9yYW5nZV0uc3RhcnQgPSBzdGFydDsKKwlyYW5nZVtucl9yYW5nZV0uZW5kID0gZW5kOworCisJbnJfcmFuZ2UrKzsKKworCXJldHVybiBucl9yYW5nZTsKK30KKworaW50IGFkZF9yYW5nZV93aXRoX21lcmdlKHN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCBheiwgaW50IG5yX3JhbmdlLAorCQkgICAgIHU2NCBzdGFydCwgdTY0IGVuZCkKK3sKKwlpbnQgaTsKKworCWlmIChzdGFydCA+PSBlbmQpCisJCXJldHVybiBucl9yYW5nZTsKKworCS8qIFRyeSB0byBtZXJnZSBpdCB3aXRoIG9sZCBvbmU6ICovCisJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspIHsKKwkJdTY0IGZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQ7CisJCXU2NCBjb21tb25fc3RhcnQsIGNvbW1vbl9lbmQ7CisKKwkJaWYgKCFyYW5nZVtpXS5lbmQpCisJCQljb250aW51ZTsKKworCQljb21tb25fc3RhcnQgPSBtYXgocmFuZ2VbaV0uc3RhcnQsIHN0YXJ0KTsKKwkJY29tbW9uX2VuZCA9IG1pbihyYW5nZVtpXS5lbmQsIGVuZCk7CisJCWlmIChjb21tb25fc3RhcnQgPiBjb21tb25fZW5kKQorCQkJY29udGludWU7CisKKwkJZmluYWxfc3RhcnQgPSBtaW4ocmFuZ2VbaV0uc3RhcnQsIHN0YXJ0KTsKKwkJZmluYWxfZW5kID0gbWF4KHJhbmdlW2ldLmVuZCwgZW5kKTsKKworCQlyYW5nZVtpXS5zdGFydCA9IGZpbmFsX3N0YXJ0OworCQlyYW5nZVtpXS5lbmQgPSAgZmluYWxfZW5kOworCQlyZXR1cm4gbnJfcmFuZ2U7CisJfQorCisJLyogTmVlZCB0byBhZGQgaXQ6ICovCisJcmV0dXJuIGFkZF9yYW5nZShyYW5nZSwgYXosIG5yX3JhbmdlLCBzdGFydCwgZW5kKTsKK30KKwordm9pZCBzdWJ0cmFjdF9yYW5nZShzdHJ1Y3QgcmFuZ2UgKnJhbmdlLCBpbnQgYXosIHU2NCBzdGFydCwgdTY0IGVuZCkKK3sKKwlpbnQgaSwgajsKKworCWlmIChzdGFydCA+PSBlbmQpCisJCXJldHVybjsKKworCWZvciAoaiA9IDA7IGogPCBhejsgaisrKSB7CisJCWlmICghcmFuZ2Vbal0uZW5kKQorCQkJY29udGludWU7CisKKwkJaWYgKHN0YXJ0IDw9IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA+PSByYW5nZVtqXS5lbmQpIHsKKwkJCXJhbmdlW2pdLnN0YXJ0ID0gMDsKKwkJCXJhbmdlW2pdLmVuZCA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChzdGFydCA8PSByYW5nZVtqXS5zdGFydCAmJiBlbmQgPCByYW5nZVtqXS5lbmQgJiYKKwkJICAgIHJhbmdlW2pdLnN0YXJ0IDwgZW5kKSB7CisJCQlyYW5nZVtqXS5zdGFydCA9IGVuZDsKKwkJCWNvbnRpbnVlOworCQl9CisKKworCQlpZiAoc3RhcnQgPiByYW5nZVtqXS5zdGFydCAmJiBlbmQgPj0gcmFuZ2Vbal0uZW5kICYmCisJCSAgICByYW5nZVtqXS5lbmQgPiBzdGFydCkgeworCQkJcmFuZ2Vbal0uZW5kID0gc3RhcnQ7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChzdGFydCA+IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA8IHJhbmdlW2pdLmVuZCkgeworCQkJLyogRmluZCB0aGUgbmV3IHNwYXJlOiAqLworCQkJZm9yIChpID0gMDsgaSA8IGF6OyBpKyspIHsKKwkJCQlpZiAocmFuZ2VbaV0uZW5kID09IDApCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGkgPCBheikgeworCQkJCXJhbmdlW2ldLmVuZCA9IHJhbmdlW2pdLmVuZDsKKwkJCQlyYW5nZVtpXS5zdGFydCA9IGVuZDsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJydW4gb2Ygc2xvdCBpbiByYW5nZXNcbiIpOworCQkJfQorCQkJcmFuZ2Vbal0uZW5kID0gc3RhcnQ7CisJCQljb250aW51ZTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBjbXBfcmFuZ2UoY29uc3Qgdm9pZCAqeDEsIGNvbnN0IHZvaWQgKngyKQoreworCWNvbnN0IHN0cnVjdCByYW5nZSAqcjEgPSB4MTsKKwljb25zdCBzdHJ1Y3QgcmFuZ2UgKnIyID0geDI7CisJczY0IHN0YXJ0MSwgc3RhcnQyOworCisJc3RhcnQxID0gcjEtPnN0YXJ0OworCXN0YXJ0MiA9IHIyLT5zdGFydDsKKworCXJldHVybiBzdGFydDEgLSBzdGFydDI7Cit9CisKK2ludCBjbGVhbl9zb3J0X3JhbmdlKHN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCBheikKK3sKKwlpbnQgaSwgaiwgayA9IGF6IC0gMSwgbnJfcmFuZ2UgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGs7IGkrKykgeworCQlpZiAocmFuZ2VbaV0uZW5kKQorCQkJY29udGludWU7CisJCWZvciAoaiA9IGs7IGogPiBpOyBqLS0pIHsKKwkJCWlmIChyYW5nZVtqXS5lbmQpIHsKKwkJCQlrID0gajsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoaiA9PSBpKQorCQkJYnJlYWs7CisJCXJhbmdlW2ldLnN0YXJ0ID0gcmFuZ2Vba10uc3RhcnQ7CisJCXJhbmdlW2ldLmVuZCAgID0gcmFuZ2Vba10uZW5kOworCQlyYW5nZVtrXS5zdGFydCA9IDA7CisJCXJhbmdlW2tdLmVuZCAgID0gMDsKKwkJay0tOworCX0KKwkvKiBjb3VudCBpdCAqLworCWZvciAoaSA9IDA7IGkgPCBhejsgaSsrKSB7CisJCWlmICghcmFuZ2VbaV0uZW5kKSB7CisJCQlucl9yYW5nZSA9IGk7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIHNvcnQgdGhlbSAqLworCXNvcnQocmFuZ2UsIG5yX3JhbmdlLCBzaXplb2Yoc3RydWN0IHJhbmdlKSwgY21wX3JhbmdlLCBOVUxMKTsKKworCXJldHVybiBucl9yYW5nZTsKK30KKwordm9pZCBzb3J0X3JhbmdlKHN0cnVjdCByYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSkKK3sKKwkvKiBzb3J0IHRoZW0gKi8KKwlzb3J0KHJhbmdlLCBucl9yYW5nZSwgc2l6ZW9mKHN0cnVjdCByYW5nZSksIGNtcF9yYW5nZSwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvcmN1dG9ydHVyZS5jIGIva2VybmVsL3JjdXRvcnR1cmUuYwppbmRleCAyNThjZGYwLi41OGRmNTViIDEwMDY0NAotLS0gYS9rZXJuZWwvcmN1dG9ydHVyZS5jCisrKyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKQEAgLTgxOCwxMyArODE4LDEzIEBACiAJCS8qIFNob3VsZCBub3QgaGFwcGVuLCBidXQuLi4gKi8KIAkJcGlwZV9jb3VudCA9IFJDVV9UT1JUVVJFX1BJUEVfTEVOOwogCX0KLQlfX3RoaXNfY3B1X2luYyhwZXJfY3B1X3ZhcihyY3VfdG9ydHVyZV9jb3VudClbcGlwZV9jb3VudF0pOworCV9fdGhpc19jcHVfaW5jKHJjdV90b3J0dXJlX2NvdW50W3BpcGVfY291bnRdKTsKIAljb21wbGV0ZWQgPSBjdXJfb3BzLT5jb21wbGV0ZWQoKSAtIGNvbXBsZXRlZDsKIAlpZiAoY29tcGxldGVkID4gUkNVX1RPUlRVUkVfUElQRV9MRU4pIHsKIAkJLyogU2hvdWxkIG5vdCBoYXBwZW4sIGJ1dC4uLiAqLwogCQljb21wbGV0ZWQgPSBSQ1VfVE9SVFVSRV9QSVBFX0xFTjsKIAl9Ci0JX190aGlzX2NwdV9pbmMocGVyX2NwdV92YXIocmN1X3RvcnR1cmVfYmF0Y2gpW2NvbXBsZXRlZF0pOworCV9fdGhpc19jcHVfaW5jKHJjdV90b3J0dXJlX2JhdGNoW2NvbXBsZXRlZF0pOwogCXByZWVtcHRfZW5hYmxlKCk7CiAJY3VyX29wcy0+cmVhZHVubG9jayhpZHgpOwogfQpAQCAtODc3LDEzICs4NzcsMTMgQEAKIAkJCS8qIFNob3VsZCBub3QgaGFwcGVuLCBidXQuLi4gKi8KIAkJCXBpcGVfY291bnQgPSBSQ1VfVE9SVFVSRV9QSVBFX0xFTjsKIAkJfQotCQlfX3RoaXNfY3B1X2luYyhwZXJfY3B1X3ZhcihyY3VfdG9ydHVyZV9jb3VudClbcGlwZV9jb3VudF0pOworCQlfX3RoaXNfY3B1X2luYyhyY3VfdG9ydHVyZV9jb3VudFtwaXBlX2NvdW50XSk7CiAJCWNvbXBsZXRlZCA9IGN1cl9vcHMtPmNvbXBsZXRlZCgpIC0gY29tcGxldGVkOwogCQlpZiAoY29tcGxldGVkID4gUkNVX1RPUlRVUkVfUElQRV9MRU4pIHsKIAkJCS8qIFNob3VsZCBub3QgaGFwcGVuLCBidXQuLi4gKi8KIAkJCWNvbXBsZXRlZCA9IFJDVV9UT1JUVVJFX1BJUEVfTEVOOwogCQl9Ci0JCV9fdGhpc19jcHVfaW5jKHBlcl9jcHVfdmFyKHJjdV90b3J0dXJlX2JhdGNoKVtjb21wbGV0ZWRdKTsKKwkJX190aGlzX2NwdV9pbmMocmN1X3RvcnR1cmVfYmF0Y2hbY29tcGxldGVkXSk7CiAJCXByZWVtcHRfZW5hYmxlKCk7CiAJCWN1cl9vcHMtPnJlYWR1bmxvY2soaWR4KTsKIAkJc2NoZWR1bGUoKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9yZWxheS5jIGIva2VybmVsL3JlbGF5LmMKaW5kZXggYzcwNWE0MS4uM2Q5N2YyOCAxMDA2NDQKLS0tIGEva2VybmVsL3JlbGF5LmMKKysrIGIva2VybmVsL3JlbGF5LmMKQEAgLTEyMTUsMTQgKzEyMTUsMTQgQEAKIC8qCiAgKglzdWJidWZfc3BsaWNlX2FjdG9yIC0gc3BsaWNlIHVwIHRvIG9uZSBzdWJidWYncyB3b3J0aCBvZiBkYXRhCiAgKi8KLXN0YXRpYyBpbnQgc3ViYnVmX3NwbGljZV9hY3RvcihzdHJ1Y3QgZmlsZSAqaW4sCitzdGF0aWMgc3NpemVfdCBzdWJidWZfc3BsaWNlX2FjdG9yKHN0cnVjdCBmaWxlICppbiwKIAkJCSAgICAgICBsb2ZmX3QgKnBwb3MsCiAJCQkgICAgICAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqcGlwZSwKIAkJCSAgICAgICBzaXplX3QgbGVuLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBmbGFncywKIAkJCSAgICAgICBpbnQgKm5vbnBhZF9yZXQpCiB7Ci0JdW5zaWduZWQgaW50IHBpZHgsIHBvZmYsIHRvdGFsX2xlbiwgc3ViYnVmX3BhZ2VzLCBucl9wYWdlcywgcmV0OworCXVuc2lnbmVkIGludCBwaWR4LCBwb2ZmLCB0b3RhbF9sZW4sIHN1YmJ1Zl9wYWdlcywgbnJfcGFnZXM7CiAJc3RydWN0IHJjaGFuX2J1ZiAqcmJ1ZiA9IGluLT5wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgaW50IHN1YmJ1Zl9zaXplID0gcmJ1Zi0+Y2hhbi0+c3ViYnVmX3NpemU7CiAJdWludDY0X3QgcG9zID0gKHVpbnQ2NF90KSAqcHBvczsKQEAgLTEyNDEsNiArMTI0MSw3IEBACiAJCS5vcHMgPSAmcmVsYXlfcGlwZV9idWZfb3BzLAogCQkuc3BkX3JlbGVhc2UgPSByZWxheV9wYWdlX3JlbGVhc2UsCiAJfTsKKwlzc2l6ZV90IHJldDsKIAogCWlmIChyYnVmLT5zdWJidWZzX3Byb2R1Y2VkID09IHJidWYtPnN1YmJ1ZnNfY29uc3VtZWQpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEva2VybmVsL3Jlc291cmNlLmMgYi9rZXJuZWwvcmVzb3VyY2UuYwppbmRleCA0ZTlkODdmLi4yZDViZTVkIDEwMDY0NAotLS0gYS9rZXJuZWwvcmVzb3VyY2UuYworKysgYi9rZXJuZWwvcmVzb3VyY2UuYwpAQCAtMzA0LDcgKzMwNCw3IEBACiAJCXZvaWQgKmFyZywgaW50ICgqZnVuYykodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdm9pZCAqKSkKIHsKIAlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwotCXVuc2lnbmVkIGxvbmcgcGZuLCBsZW47CisJdW5zaWduZWQgbG9uZyBwZm4sIGVuZF9wZm47CiAJdTY0IG9yaWdfZW5kOwogCWludCByZXQgPSAtMTsKIApAQCAtMzE0LDkgKzMxNCwxMCBAQAogCW9yaWdfZW5kID0gcmVzLmVuZDsKIAl3aGlsZSAoKHJlcy5zdGFydCA8IHJlcy5lbmQpICYmCiAJCShmaW5kX25leHRfc3lzdGVtX3JhbSgmcmVzLCAiU3lzdGVtIFJBTSIpID49IDApKSB7Ci0JCXBmbiA9ICh1bnNpZ25lZCBsb25nKShyZXMuc3RhcnQgPj4gUEFHRV9TSElGVCk7Ci0JCWxlbiA9ICh1bnNpZ25lZCBsb25nKSgocmVzLmVuZCArIDEgLSByZXMuc3RhcnQpID4+IFBBR0VfU0hJRlQpOwotCQlyZXQgPSAoKmZ1bmMpKHBmbiwgbGVuLCBhcmcpOworCQlwZm4gPSAocmVzLnN0YXJ0ICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKKwkJZW5kX3BmbiA9IChyZXMuZW5kICsgMSkgPj4gUEFHRV9TSElGVDsKKwkJaWYgKGVuZF9wZm4gPiBwZm4pCisJCQlyZXQgPSAoKmZ1bmMpKHBmbiwgZW5kX3BmbiAtIHBmbiwgYXJnKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwogCQlyZXMuc3RhcnQgPSByZXMuZW5kICsgMTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggNmEyMTJjOS4uMTUwYjY5OCAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTE1MjEsNyArMTUyMSw3IEBACiAKICNpZmRlZiBDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRAogCi1zdGF0aWMgX19yZWFkX21vc3RseSB1bnNpZ25lZCBsb25nICp1cGRhdGVfc2hhcmVzX2RhdGE7CitzdGF0aWMgX19yZWFkX21vc3RseSB1bnNpZ25lZCBsb25nIF9fcGVyY3B1ICp1cGRhdGVfc2hhcmVzX2RhdGE7CiAKIHN0YXRpYyB2b2lkIF9fc2V0X3NlX3NoYXJlcyhzdHJ1Y3Qgc2NoZWRfZW50aXR5ICpzZSwgdW5zaWduZWQgbG9uZyBzaGFyZXMpOwogCkBAIC00MzUzLDcgKzQzNTMsNyBAQAogCS8qIGNvbnZlcnQgbmljZSB2YWx1ZSBbMTksLTIwXSB0byBybGltaXQgc3R5bGUgdmFsdWUgWzEsNDBdICovCiAJaW50IG5pY2VfcmxpbSA9IDIwIC0gbmljZTsKIAotCXJldHVybiAobmljZV9ybGltIDw9IHAtPnNpZ25hbC0+cmxpbVtSTElNSVRfTklDRV0ucmxpbV9jdXIgfHwKKwlyZXR1cm4gKG5pY2VfcmxpbSA8PSB0YXNrX3JsaW1pdChwLCBSTElNSVRfTklDRSkgfHwKIAkJY2FwYWJsZShDQVBfU1lTX05JQ0UpKTsKIH0KIApAQCAtNDUzMCw3ICs0NTMwLDcgQEAKIAogCQkJaWYgKCFsb2NrX3Rhc2tfc2lnaGFuZChwLCAmZmxhZ3MpKQogCQkJCXJldHVybiAtRVNSQ0g7Ci0JCQlybGltX3J0cHJpbyA9IHAtPnNpZ25hbC0+cmxpbVtSTElNSVRfUlRQUklPXS5ybGltX2N1cjsKKwkJCXJsaW1fcnRwcmlvID0gdGFza19ybGltaXQocCwgUkxJTUlUX1JUUFJJTyk7CiAJCQl1bmxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncyk7CiAKIAkJCS8qIGNhbid0IHNldC9jaGFuZ2UgdGhlIHJ0IHBvbGljeSAqLwpAQCAtNzQwNiwxMSArNzQwNiwxMyBAQAogCiAjaWZkZWYgQ09ORklHX1NDSEVEX01DCiBzdGF0aWMgc3NpemVfdCBzY2hlZF9tY19wb3dlcl9zYXZpbmdzX3Nob3coc3RydWN0IHN5c2Rldl9jbGFzcyAqY2xhc3MsCisJCQkJCSAgIHN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICphdHRyLAogCQkJCQkgICBjaGFyICpwYWdlKQogewogCXJldHVybiBzcHJpbnRmKHBhZ2UsICIldVxuIiwgc2NoZWRfbWNfcG93ZXJfc2F2aW5ncyk7CiB9CiBzdGF0aWMgc3NpemVfdCBzY2hlZF9tY19wb3dlcl9zYXZpbmdzX3N0b3JlKHN0cnVjdCBzeXNkZXZfY2xhc3MgKmNsYXNzLAorCQkJCQkgICAgc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCSAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlyZXR1cm4gc2NoZWRfcG93ZXJfc2F2aW5nc19zdG9yZShidWYsIGNvdW50LCAwKTsKQEAgLTc0MjIsMTEgKzc0MjQsMTMgQEAKIAogI2lmZGVmIENPTkZJR19TQ0hFRF9TTVQKIHN0YXRpYyBzc2l6ZV90IHNjaGVkX3NtdF9wb3dlcl9zYXZpbmdzX3Nob3coc3RydWN0IHN5c2Rldl9jbGFzcyAqZGV2LAorCQkJCQkgICAgc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgKmF0dHIsCiAJCQkJCSAgICBjaGFyICpwYWdlKQogewogCXJldHVybiBzcHJpbnRmKHBhZ2UsICIldVxuIiwgc2NoZWRfc210X3Bvd2VyX3NhdmluZ3MpOwogfQogc3RhdGljIHNzaXplX3Qgc2NoZWRfc210X3Bvd2VyX3NhdmluZ3Nfc3RvcmUoc3RydWN0IHN5c2Rldl9jbGFzcyAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBzeXNkZXZfY2xhc3NfYXR0cmlidXRlICphdHRyLAogCQkJCQkgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQogewogCXJldHVybiBzY2hlZF9wb3dlcl9zYXZpbmdzX3N0b3JlKGJ1ZiwgY291bnQsIDEpOwpAQCAtODgxMyw3ICs4ODE3LDcgQEAKIHN0cnVjdCBjcHVhY2N0IHsKIAlzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSBjc3M7CiAJLyogY3B1dXNhZ2UgaG9sZHMgcG9pbnRlciB0byBhIHU2NC10eXBlIG9iamVjdCBvbiBldmVyeSBjcHUgKi8KLQl1NjQgKmNwdXVzYWdlOworCXU2NCBfX3BlcmNwdSAqY3B1dXNhZ2U7CiAJc3RydWN0IHBlcmNwdV9jb3VudGVyIGNwdXN0YXRbQ1BVQUNDVF9TVEFUX05TVEFUU107CiAJc3RydWN0IGNwdWFjY3QgKnBhcmVudDsKIH07CmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWRfY3B1cHJpLmMgYi9rZXJuZWwvc2NoZWRfY3B1cHJpLmMKaW5kZXggZWViMzUwNi4uZmNjZjlmYiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX2NwdXByaS5jCisrKyBiL2tlcm5lbC9zY2hlZF9jcHVwcmkuYwpAQCAtNDcsNyArNDcsNyBAQAogfQogCiAjZGVmaW5lIGZvcl9lYWNoX2NwdXByaV9hY3RpdmUoYXJyYXksIGlkeCkgICAgICAgICAgICAgICAgICAgIFwKLQlmb3JfZWFjaF9iaXQoaWR4LCBhcnJheSwgQ1BVUFJJX05SX1BSSU9SSVRJRVMpCisJZm9yX2VhY2hfc2V0X2JpdChpZHgsIGFycmF5LCBDUFVQUklfTlJfUFJJT1JJVElFUykKIAogLyoqCiAgKiBjcHVwcmlfZmluZCAtIGZpbmQgdGhlIGJlc3QgKGxvd2VzdC1wcmkpIENQVSBpbiB0aGUgc3lzdGVtCkBAIC01Niw3ICs1Niw3IEBACiAgKiBAbG93ZXN0X21hc2s6IEEgbWFzayB0byBmaWxsIGluIHdpdGggc2VsZWN0ZWQgQ1BVcyAob3IgTlVMTCkKICAqCiAgKiBOb3RlOiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlY29tbWVuZGVkIENQVXMgYXMgY2FsY3VsYXRlZCBkdXJpbmcgdGhlCi0gKiBjdXJyZW50IGludm9rYXRpb24uICBCeSB0aGUgdGltZSB0aGUgY2FsbCByZXR1cm5zLCB0aGUgQ1BVcyBtYXkgaGF2ZSBpbgorICogY3VycmVudCBpbnZvY2F0aW9uLiAgQnkgdGhlIHRpbWUgdGhlIGNhbGwgcmV0dXJucywgdGhlIENQVXMgbWF5IGhhdmUgaW4KICAqIGZhY3QgY2hhbmdlZCBwcmlvcml0aWVzIGFueSBudW1iZXIgb2YgdGltZXMuICBXaGlsZSBub3QgaWRlYWwsIGl0IGlzIG5vdAogICogYW4gaXNzdWUgb2YgY29ycmVjdG5lc3Mgc2luY2UgdGhlIG5vcm1hbCByZWJhbGFuY2VyIGxvZ2ljIHdpbGwgY29ycmVjdAogICogYW55IGRpc2NyZXBhbmNpZXMgY3JlYXRlZCBieSByYWNpbmcgYWdhaW5zdCB0aGUgdW5jZXJ0YWludHkgb2YgdGhlIGN1cnJlbnQKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZF9ydC5jIGIva2VybmVsL3NjaGVkX3J0LmMKaW5kZXggYmYzZTM4Zi4uNWE2ZWQxZiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkX3J0LmMKKysrIGIva2VybmVsL3NjaGVkX3J0LmMKQEAgLTE2NjIsOCArMTY2Miw5IEBACiAJaWYgKCFwLT5zaWduYWwpCiAJCXJldHVybjsKIAotCXNvZnQgPSBwLT5zaWduYWwtPnJsaW1bUkxJTUlUX1JUVElNRV0ucmxpbV9jdXI7Ci0JaGFyZCA9IHAtPnNpZ25hbC0+cmxpbVtSTElNSVRfUlRUSU1FXS5ybGltX21heDsKKwkvKiBtYXggbWF5IGNoYW5nZSBhZnRlciBjdXIgd2FzIHJlYWQsIHRoaXMgd2lsbCBiZSBmaXhlZCBuZXh0IHRpY2sgKi8KKwlzb2Z0ID0gdGFza19ybGltaXQocCwgUkxJTUlUX1JUVElNRSk7CisJaGFyZCA9IHRhc2tfcmxpbWl0X21heChwLCBSTElNSVRfUlRUSU1FKTsKIAogCWlmIChzb2Z0ICE9IFJMSU1fSU5GSU5JVFkpIHsKIAkJdW5zaWduZWQgbG9uZyBuZXh0OwpkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IDkzNGFlNWUuLmRiZDdmZTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zaWduYWwuYworKysgYi9rZXJuZWwvc2lnbmFsLmMKQEAgLTE1OSw2ICsxNTksMTAgQEAKIAogLyogR2l2ZW4gdGhlIG1hc2ssIGZpbmQgdGhlIGZpcnN0IGF2YWlsYWJsZSBzaWduYWwgdGhhdCBzaG91bGQgYmUgc2VydmljZWQuICovCiAKKyNkZWZpbmUgU1lOQ0hST05PVVNfTUFTSyBcCisJKHNpZ21hc2soU0lHU0VHVikgfCBzaWdtYXNrKFNJR0JVUykgfCBzaWdtYXNrKFNJR0lMTCkgfCBcCisJIHNpZ21hc2soU0lHVFJBUCkgfCBzaWdtYXNrKFNJR0ZQRSkpCisKIGludCBuZXh0X3NpZ25hbChzdHJ1Y3Qgc2lncGVuZGluZyAqcGVuZGluZywgc2lnc2V0X3QgKm1hc2spCiB7CiAJdW5zaWduZWQgbG9uZyBpLCAqcywgKm0sIHg7CkBAIC0xNjYsMjYgKzE3MCwzOSBAQAogCiAJcyA9IHBlbmRpbmctPnNpZ25hbC5zaWc7CiAJbSA9IG1hc2stPnNpZzsKKworCS8qCisJICogSGFuZGxlIHRoZSBmaXJzdCB3b3JkIHNwZWNpYWxseTogaXQgY29udGFpbnMgdGhlCisJICogc3luY2hyb25vdXMgc2lnbmFscyB0aGF0IG5lZWQgdG8gYmUgZGVxdWV1ZWQgZmlyc3QuCisJICovCisJeCA9ICpzICZ+ICptOworCWlmICh4KSB7CisJCWlmICh4ICYgU1lOQ0hST05PVVNfTUFTSykKKwkJCXggJj0gU1lOQ0hST05PVVNfTUFTSzsKKwkJc2lnID0gZmZ6KH54KSArIDE7CisJCXJldHVybiBzaWc7CisJfQorCiAJc3dpdGNoIChfTlNJR19XT1JEUykgewogCWRlZmF1bHQ6Ci0JCWZvciAoaSA9IDA7IGkgPCBfTlNJR19XT1JEUzsgKytpLCArK3MsICsrbSkKLQkJCWlmICgoeCA9ICpzICZ+ICptKSAhPSAwKSB7Ci0JCQkJc2lnID0gZmZ6KH54KSArIGkqX05TSUdfQlBXICsgMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJYnJlYWs7Ci0KLQljYXNlIDI6IGlmICgoeCA9IHNbMF0gJn4gbVswXSkgIT0gMCkKLQkJCXNpZyA9IDE7Ci0JCWVsc2UgaWYgKCh4ID0gc1sxXSAmfiBtWzFdKSAhPSAwKQotCQkJc2lnID0gX05TSUdfQlBXICsgMTsKLQkJZWxzZQorCQlmb3IgKGkgPSAxOyBpIDwgX05TSUdfV09SRFM7ICsraSkgeworCQkJeCA9ICorK3MgJn4gKisrbTsKKwkJCWlmICgheCkKKwkJCQljb250aW51ZTsKKwkJCXNpZyA9IGZmeih+eCkgKyBpKl9OU0lHX0JQVyArIDE7CiAJCQlicmVhazsKLQkJc2lnICs9IGZmeih+eCk7CisJCX0KIAkJYnJlYWs7CiAKLQljYXNlIDE6IGlmICgoeCA9ICpzICZ+ICptKSAhPSAwKQotCQkJc2lnID0gZmZ6KH54KSArIDE7CisJY2FzZSAyOgorCQl4ID0gc1sxXSAmfiBtWzFdOworCQlpZiAoIXgpCisJCQlicmVhazsKKwkJc2lnID0gZmZ6KH54KSArIF9OU0lHX0JQVyArIDE7CisJCWJyZWFrOworCisJY2FzZSAxOgorCQkvKiBOb3RoaW5nIHRvIGRvICovCiAJCWJyZWFrOwogCX0KIApAQCAtMjI4LDcgKzI0NSw3IEBACiAKIAlpZiAob3ZlcnJpZGVfcmxpbWl0IHx8CiAJICAgIGF0b21pY19yZWFkKCZ1c2VyLT5zaWdwZW5kaW5nKSA8PQotCQkJdC0+c2lnbmFsLT5ybGltW1JMSU1JVF9TSUdQRU5ESU5HXS5ybGltX2N1cikgeworCQkJdGFza19ybGltaXQodCwgUkxJTUlUX1NJR1BFTkRJTkcpKSB7CiAJCXEgPSBrbWVtX2NhY2hlX2FsbG9jKHNpZ3F1ZXVlX2NhY2hlcCwgZmxhZ3MpOwogCX0gZWxzZSB7CiAJCXByaW50X2Ryb3BwZWRfc2lnbmFsKHNpZyk7CmRpZmYgLS1naXQgYS9rZXJuZWwvc3RvcF9tYWNoaW5lLmMgYi9rZXJuZWwvc3RvcF9tYWNoaW5lLmMKaW5kZXggOTEyODIzZS4uOWJiOWZiMSAxMDA2NDQKLS0tIGEva2VybmVsL3N0b3BfbWFjaGluZS5jCisrKyBiL2tlcm5lbC9zdG9wX21hY2hpbmUuYwpAQCAtNDUsNyArNDUsNyBAQAogc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpzdG9wX21hY2hpbmVfd3E7CiBzdGF0aWMgc3RydWN0IHN0b3BfbWFjaGluZV9kYXRhIGFjdGl2ZSwgaWRsZTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqYWN0aXZlX2NwdXM7Ci1zdGF0aWMgdm9pZCAqc3RvcF9tYWNoaW5lX3dvcms7CitzdGF0aWMgdm9pZCBfX3BlcmNwdSAqc3RvcF9tYWNoaW5lX3dvcms7CiAKIHN0YXRpYyB2b2lkIHNldF9zdGF0ZShlbnVtIHN0b3BtYWNoaW5lX3N0YXRlIG5ld3N0YXRlKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IDg3N2ZlNGYuLjgyOTg4NzhmIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlY2NvbXAuaD4KICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogCkBAIC01NzEsOCArNTcyLDcgQEAKIAlpZiAoIW5ld191c2VyKQogCQlyZXR1cm4gLUVBR0FJTjsKIAotCWlmIChhdG9taWNfcmVhZCgmbmV3X3VzZXItPnByb2Nlc3NlcykgPj0KLQkJCQljdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX05QUk9DXS5ybGltX2N1ciAmJgorCWlmIChhdG9taWNfcmVhZCgmbmV3X3VzZXItPnByb2Nlc3NlcykgPj0gcmxpbWl0KFJMSU1JVF9OUFJPQykgJiYKIAkJCW5ld191c2VyICE9IElOSVRfVVNFUikgewogCQlmcmVlX3VpZChuZXdfdXNlcik7CiAJCXJldHVybiAtRUFHQUlOOwpAQCAtMTExNSw2ICsxMTE1LDE1IEBACiAKIERFQ0xBUkVfUldTRU0odXRzX3NlbSk7CiAKKyNpZmRlZiBDT01QQVRfVVRTX01BQ0hJTkUKKyNkZWZpbmUgb3ZlcnJpZGVfYXJjaGl0ZWN0dXJlKG5hbWUpIFwKKwkoY3VycmVudC0+cGVyc29uYWxpdHkgPT0gUEVSX0xJTlVYMzIgJiYgXAorCSBjb3B5X3RvX3VzZXIobmFtZS0+bWFjaGluZSwgQ09NUEFUX1VUU19NQUNISU5FLCBcCisJCSAgICAgIHNpemVvZihDT01QQVRfVVRTX01BQ0hJTkUpKSkKKyNlbHNlCisjZGVmaW5lIG92ZXJyaWRlX2FyY2hpdGVjdHVyZShuYW1lKQkwCisjZW5kaWYKKwogU1lTQ0FMTF9ERUZJTkUxKG5ld3VuYW1lLCBzdHJ1Y3QgbmV3X3V0c25hbWUgX191c2VyICosIG5hbWUpCiB7CiAJaW50IGVycm5vID0gMDsKQEAgLTExMjMsOSArMTEzMiw2NiBAQAogCWlmIChjb3B5X3RvX3VzZXIobmFtZSwgdXRzbmFtZSgpLCBzaXplb2YgKm5hbWUpKQogCQllcnJubyA9IC1FRkFVTFQ7CiAJdXBfcmVhZCgmdXRzX3NlbSk7CisKKwlpZiAoIWVycm5vICYmIG92ZXJyaWRlX2FyY2hpdGVjdHVyZShuYW1lKSkKKwkJZXJybm8gPSAtRUZBVUxUOwogCXJldHVybiBlcnJubzsKIH0KIAorI2lmZGVmIF9fQVJDSF9XQU5UX1NZU19PTERfVU5BTUUKKy8qCisgKiBPbGQgY3J1ZnQKKyAqLworU1lTQ0FMTF9ERUZJTkUxKHVuYW1lLCBzdHJ1Y3Qgb2xkX3V0c25hbWUgX191c2VyICosIG5hbWUpCit7CisJaW50IGVycm9yID0gMDsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlkb3duX3JlYWQoJnV0c19zZW0pOworCWlmIChjb3B5X3RvX3VzZXIobmFtZSwgdXRzbmFtZSgpLCBzaXplb2YoKm5hbWUpKSkKKwkJZXJyb3IgPSAtRUZBVUxUOworCXVwX3JlYWQoJnV0c19zZW0pOworCisJaWYgKCFlcnJvciAmJiBvdmVycmlkZV9hcmNoaXRlY3R1cmUobmFtZSkpCisJCWVycm9yID0gLUVGQVVMVDsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK1NZU0NBTExfREVGSU5FMShvbGR1bmFtZSwgc3RydWN0IG9sZG9sZF91dHNuYW1lIF9fdXNlciAqLCBuYW1lKQoreworCWludCBlcnJvcjsKKworCWlmICghbmFtZSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBuYW1lLCBzaXplb2Yoc3RydWN0IG9sZG9sZF91dHNuYW1lKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJZG93bl9yZWFkKCZ1dHNfc2VtKTsKKwllcnJvciA9IF9fY29weV90b191c2VyKCZuYW1lLT5zeXNuYW1lLCAmdXRzbmFtZSgpLT5zeXNuYW1lLAorCQkJICAgICAgIF9fT0xEX1VUU19MRU4pOworCWVycm9yIHw9IF9fcHV0X3VzZXIoMCwgbmFtZS0+c3lzbmFtZSArIF9fT0xEX1VUU19MRU4pOworCWVycm9yIHw9IF9fY29weV90b191c2VyKCZuYW1lLT5ub2RlbmFtZSwgJnV0c25hbWUoKS0+bm9kZW5hbWUsCisJCQkJX19PTERfVVRTX0xFTik7CisJZXJyb3IgfD0gX19wdXRfdXNlcigwLCBuYW1lLT5ub2RlbmFtZSArIF9fT0xEX1VUU19MRU4pOworCWVycm9yIHw9IF9fY29weV90b191c2VyKCZuYW1lLT5yZWxlYXNlLCAmdXRzbmFtZSgpLT5yZWxlYXNlLAorCQkJCV9fT0xEX1VUU19MRU4pOworCWVycm9yIHw9IF9fcHV0X3VzZXIoMCwgbmFtZS0+cmVsZWFzZSArIF9fT0xEX1VUU19MRU4pOworCWVycm9yIHw9IF9fY29weV90b191c2VyKCZuYW1lLT52ZXJzaW9uLCAmdXRzbmFtZSgpLT52ZXJzaW9uLAorCQkJCV9fT0xEX1VUU19MRU4pOworCWVycm9yIHw9IF9fcHV0X3VzZXIoMCwgbmFtZS0+dmVyc2lvbiArIF9fT0xEX1VUU19MRU4pOworCWVycm9yIHw9IF9fY29weV90b191c2VyKCZuYW1lLT5tYWNoaW5lLCAmdXRzbmFtZSgpLT5tYWNoaW5lLAorCQkJCV9fT0xEX1VUU19MRU4pOworCWVycm9yIHw9IF9fcHV0X3VzZXIoMCwgbmFtZS0+bWFjaGluZSArIF9fT0xEX1VUU19MRU4pOworCXVwX3JlYWQoJnV0c19zZW0pOworCisJaWYgKCFlcnJvciAmJiBvdmVycmlkZV9hcmNoaXRlY3R1cmUobmFtZSkpCisJCWVycm9yID0gLUVGQVVMVDsKKwlyZXR1cm4gZXJyb3IgPyAtRUZBVUxUIDogMDsKK30KKyNlbmRpZgorCiBTWVNDQUxMX0RFRklORTIoc2V0aG9zdG5hbWUsIGNoYXIgX191c2VyICosIG5hbWUsIGludCwgbGVuKQogewogCWludCBlcnJubzsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNfbmkuYyBiL2tlcm5lbC9zeXNfbmkuYwppbmRleCA2OTUzODRmLi43MGYyZWE3IDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzX25pLmMKKysrIGIva2VybmVsL3N5c19uaS5jCkBAIC0xMjYsNiArMTI2LDcgQEAKIGNvbmRfc3lzY2FsbChzeXNfc2V0dWlkMTYpOwogY29uZF9zeXNjYWxsKHN5c192bTg2b2xkKTsKIGNvbmRfc3lzY2FsbChzeXNfdm04Nik7Citjb25kX3N5c2NhbGwoc3lzX2lwYyk7CiBjb25kX3N5c2NhbGwoY29tcGF0X3N5c19pcGMpOwogY29uZF9zeXNjYWxsKGNvbXBhdF9zeXNfc3lzY3RsKTsKIGNvbmRfc3lzY2FsbChzeXNfZmxvY2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IDhhNjhiMjQuLjg2ODZiMGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTIzLDYgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CkBAIC01MCw2ICs1MSw3IEBACiAjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvc2xvdy13b3JrLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyZl9ldmVudC5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpAQCAtNTksMTMgKzYxLDIzIEBACiAjaW5jbHVkZSA8YXNtL3N0YWNrdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNlbmRpZgorI2lmZGVmIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUCisjaW5jbHVkZSA8bGludXgvYWNjdC5oPgorI2VuZGlmCisjaWZkZWYgQ09ORklHX1JUX01VVEVYRVMKKyNpbmNsdWRlIDxsaW51eC9ydG11dGV4Lmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19QUk9WRV9MT0NLSU5HKSB8fCBkZWZpbmVkKENPTkZJR19MT0NLX1NUQVQpCisjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgorI2VuZGlmCisjaWZkZWYgQ09ORklHX0NIUl9ERVZfU0cKKyNpbmNsdWRlIDxzY3NpL3NnLmg+CisjZW5kaWYKIAogCiAjaWYgZGVmaW5lZChDT05GSUdfU1lTQ1RMKQogCiAvKiBFeHRlcm5hbCB2YXJpYWJsZXMgbm90IGluIGEgaGVhZGVyIGZpbGUuICovCi1leHRlcm4gaW50IENfQV9EOwotZXh0ZXJuIGludCBwcmludF9mYXRhbF9zaWduYWxzOwogZXh0ZXJuIGludCBzeXNjdGxfb3ZlcmNvbW1pdF9tZW1vcnk7CiBleHRlcm4gaW50IHN5c2N0bF9vdmVyY29tbWl0X3JhdGlvOwogZXh0ZXJuIGludCBzeXNjdGxfcGFuaWNfb25fb29tOwpAQCAtODcsOSArOTksNiBAQAogI2lmbmRlZiBDT05GSUdfTU1VCiBleHRlcm4gaW50IHN5c2N0bF9ucl90cmltX3BhZ2VzOwogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QKLWV4dGVybiBpbnQgcmN1dG9ydHVyZV9ydW5uYWJsZTsKLSNlbmRpZiAvKiAjaWZkZWYgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgKi8KICNpZmRlZiBDT05GSUdfQkxPQ0sKIGV4dGVybiBpbnQgYmxrX2lvcG9sbF9lbmFibGVkOwogI2VuZGlmCkBAIC0xMTksMTQgKzEyOCw2IEBACiAKIHN0YXRpYyBpbnQgbmdyb3Vwc19tYXggPSBOR1JPVVBTX01BWDsKIAotI2lmZGVmIENPTkZJR19NT0RVTEVTCi1leHRlcm4gY2hhciBtb2Rwcm9iZV9wYXRoW107Ci1leHRlcm4gaW50IG1vZHVsZXNfZGlzYWJsZWQ7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfQ0hSX0RFVl9TRwotZXh0ZXJuIGludCBzZ19iaWdfYnVmZjsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1NQQVJDCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2VuZGlmCkBAIC0xNDgsMTAgKzE0OSw2IEBACiBleHRlcm4gaW50IHNwaW5fcmV0cnk7CiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUCi1leHRlcm4gaW50IGFjY3RfcGFybVtdOwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfSUE2NAogZXh0ZXJuIGludCBub191bmFsaWduZWRfd2FybmluZzsKIGV4dGVybiBpbnQgdW5hbGlnbmVkX2R1bXBfc3RhY2s7CkBAIC0xNTksMTAgKzE1Niw2IEBACiAKIGV4dGVybiBzdHJ1Y3QgcmF0ZWxpbWl0X3N0YXRlIHByaW50a19yYXRlbGltaXRfc3RhdGU7CiAKLSNpZmRlZiBDT05GSUdfUlRfTVVURVhFUwotZXh0ZXJuIGludCBtYXhfbG9ja19kZXB0aDsKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1BST0NfU1lTQ1RMCiBzdGF0aWMgaW50IHByb2NfZG9fY2FkX3BpZChzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAogCQkgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTsKQEAgLTIwMSw5ICsxOTQsNiBAQAogaW50IHN5c2N0bF9sZWdhY3lfdmFfbGF5b3V0OwogI2VuZGlmCiAKLWV4dGVybiBpbnQgcHJvdmVfbG9ja2luZzsKLWV4dGVybiBpbnQgbG9ja19zdGF0OwotCiAvKiBUaGUgZGVmYXVsdCBzeXNjdGwgdGFibGVzOiAqLwogCiBzdGF0aWMgc3RydWN0IGN0bF90YWJsZSByb290X3RhYmxlW10gPSB7CkBAIC0xNDQxLDcgKzE0MzEsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjdGxfdGFibGUgZGVidWdfdGFibGVbXSA9IHsKLSNpZiBkZWZpbmVkKENPTkZJR19YODYpIHx8IGRlZmluZWQoQ09ORklHX1BQQykKKyNpZiBkZWZpbmVkKENPTkZJR19YODYpIHx8IGRlZmluZWQoQ09ORklHX1BQQykgfHwgZGVmaW5lZChDT05GSUdfU1BBUkMpCiAJewogCQkucHJvY25hbWUJPSAiZXhjZXB0aW9uLXRyYWNlIiwKIAkJLmRhdGEJCT0gJnNob3dfdW5oYW5kbGVkX3NpZ25hbHMsCkBAIC0xNDUwLDYgKzE0NDAsMTcgQEAKIAkJLnByb2NfaGFuZGxlcgk9IHByb2NfZG9pbnR2ZWMKIAl9LAogI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfT1BUUFJPQkVTKQorCXsKKwkJLnByb2NuYW1lCT0gImtwcm9iZXMtb3B0aW1pemF0aW9uIiwKKwkJLmRhdGEJCT0gJnN5c2N0bF9rcHJvYmVzX29wdGltaXphdGlvbiwKKwkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKKwkJLm1vZGUJCT0gMDY0NCwKKwkJLnByb2NfaGFuZGxlcgk9IHByb2Nfa3Byb2Jlc19vcHRpbWl6YXRpb25faGFuZGxlciwKKwkJLmV4dHJhMQkJPSAmemVybywKKwkJLmV4dHJhMgkJPSAmb25lLAorCX0sCisjZW5kaWYKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNjdGxfYmluYXJ5LmMgYi9rZXJuZWwvc3lzY3RsX2JpbmFyeS5jCmluZGV4IDhmNWQxNmUuLjhjZDUwZDggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGxfYmluYXJ5LmMKKysrIGIva2VybmVsL3N5c2N0bF9iaW5hcnkuYwpAQCAtMTMzMSw3ICsxMzMxLDcgQEAKIAlzc2l6ZV90IHJlc3VsdDsKIAljaGFyICpwYXRobmFtZTsKIAlpbnQgZmxhZ3M7Ci0JaW50IGFjY19tb2RlLCBmbW9kZTsKKwlpbnQgYWNjX21vZGU7CiAKIAlwYXRobmFtZSA9IHN5c2N0bF9nZXRuYW1lKG5hbWUsIG5sZW4sICZ0YWJsZSk7CiAJcmVzdWx0ID0gUFRSX0VSUihwYXRobmFtZSk7CkBAIC0xMzQyLDE1ICsxMzQyLDEyIEBACiAJaWYgKG9sZHZhbCAmJiBvbGRsZW4gJiYgbmV3dmFsICYmIG5ld2xlbikgewogCQlmbGFncyA9IE9fUkRXUjsKIAkJYWNjX21vZGUgPSBNQVlfUkVBRCB8IE1BWV9XUklURTsKLQkJZm1vZGUgPSBGTU9ERV9SRUFEIHwgRk1PREVfV1JJVEU7CiAJfSBlbHNlIGlmIChuZXd2YWwgJiYgbmV3bGVuKSB7CiAJCWZsYWdzID0gT19XUk9OTFk7CiAJCWFjY19tb2RlID0gTUFZX1dSSVRFOwotCQlmbW9kZSA9IEZNT0RFX1dSSVRFOwogCX0gZWxzZSBpZiAob2xkdmFsICYmIG9sZGxlbikgewogCQlmbGFncyA9IE9fUkRPTkxZOwogCQlhY2NfbW9kZSA9IE1BWV9SRUFEOwotCQlmbW9kZSA9IEZNT0RFX1JFQUQ7CiAJfSBlbHNlIHsKIAkJcmVzdWx0ID0gMDsKIAkJZ290byBvdXRfcHV0bmFtZTsKQEAgLTEzNjEsNyArMTM1OCw3IEBACiAJaWYgKHJlc3VsdCkKIAkJZ290byBvdXRfcHV0bmFtZTsKIAotCXJlc3VsdCA9IG1heV9vcGVuKCZuZC5wYXRoLCBhY2NfbW9kZSwgZm1vZGUpOworCXJlc3VsdCA9IG1heV9vcGVuKCZuZC5wYXRoLCBhY2NfbW9kZSwgZmxhZ3MpOwogCWlmIChyZXN1bHQpCiAJCWdvdG8gb3V0X3B1dHBhdGg7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90YXNrc3RhdHMuYyBiL2tlcm5lbC90YXNrc3RhdHMuYwppbmRleCBlYTgzODRkLi44OTljYTUxIDEwMDY0NAotLS0gYS9rZXJuZWwvdGFza3N0YXRzLmMKKysrIGIva2VybmVsL3Rhc2tzdGF0cy5jCkBAIC00NiwxNSArNDYsMTMgQEAKIAkubWF4YXR0cgk9IFRBU0tTVEFUU19DTURfQVRUUl9NQVgsCiB9OwogCi1zdGF0aWMgc3RydWN0IG5sYV9wb2xpY3kgdGFza3N0YXRzX2NtZF9nZXRfcG9saWN5W1RBU0tTVEFUU19DTURfQVRUUl9NQVgrMV0KLV9fcmVhZF9tb3N0bHkgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgdGFza3N0YXRzX2NtZF9nZXRfcG9saWN5W1RBU0tTVEFUU19DTURfQVRUUl9NQVgrMV0gPSB7CiAJW1RBU0tTVEFUU19DTURfQVRUUl9QSURdICA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiAJW1RBU0tTVEFUU19DTURfQVRUUl9UR0lEXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiAJW1RBU0tTVEFUU19DTURfQVRUUl9SRUdJU1RFUl9DUFVNQVNLXSA9IHsgLnR5cGUgPSBOTEFfU1RSSU5HIH0sCiAJW1RBU0tTVEFUU19DTURfQVRUUl9ERVJFR0lTVEVSX0NQVU1BU0tdID0geyAudHlwZSA9IE5MQV9TVFJJTkcgfSx9OwogCi1zdGF0aWMgc3RydWN0IG5sYV9wb2xpY3kKLWNncm91cHN0YXRzX2NtZF9nZXRfcG9saWN5W0NHUk9VUFNUQVRTX0NNRF9BVFRSX01BWCsxXSBfX3JlYWRfbW9zdGx5ID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGNncm91cHN0YXRzX2NtZF9nZXRfcG9saWN5W0NHUk9VUFNUQVRTX0NNRF9BVFRSX01BWCsxXSA9IHsKIAlbQ0dST1VQU1RBVFNfQ01EX0FUVFJfRkRdID0geyAudHlwZSA9IE5MQV9VMzIgfSwKIH07CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKaW5kZXggOGMxYjJkMi4uYTJmMGZlOSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKKysrIGIva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jcHUuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogCisjaW5jbHVkZSA8YXNtL2xvY2FsLmg+CiAjaW5jbHVkZSAidHJhY2UuaCIKIAogLyoKQEAgLTI1NDEsNyArMjU0Miw3IEBACiAgKiBAYnVmZmVyOiBUaGUgcmluZyBidWZmZXIgdG8gZW5hYmxlIHdyaXRlcwogICoKICAqIE5vdGUsIG11bHRpcGxlIGRpc2FibGVzIHdpbGwgbmVlZCB0aGUgc2FtZSBudW1iZXIgb2YgZW5hYmxlcwotICogdG8gdHJ1ZWx5IGVuYWJsZSB0aGUgd3JpdGluZyAobXVjaCBsaWtlIHByZWVtcHRfZGlzYWJsZSkuCisgKiB0byB0cnVseSBlbmFibGUgdGhlIHdyaXRpbmcgKG11Y2ggbGlrZSBwcmVlbXB0X2Rpc2FibGUpLgogICovCiB2b2lkIHJpbmdfYnVmZmVyX3JlY29yZF9lbmFibGUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIpCiB7CkBAIC0yNTc3LDcgKzI1NzgsNyBAQAogICogQGNwdTogVGhlIENQVSB0byBlbmFibGUuCiAgKgogICogTm90ZSwgbXVsdGlwbGUgZGlzYWJsZXMgd2lsbCBuZWVkIHRoZSBzYW1lIG51bWJlciBvZiBlbmFibGVzCi0gKiB0byB0cnVlbHkgZW5hYmxlIHRoZSB3cml0aW5nIChtdWNoIGxpa2UgcHJlZW1wdF9kaXNhYmxlKS4KKyAqIHRvIHRydWx5IGVuYWJsZSB0aGUgd3JpdGluZyAobXVjaCBsaWtlIHByZWVtcHRfZGlzYWJsZSkuCiAgKi8KIHZvaWQgcmluZ19idWZmZXJfcmVjb3JkX2VuYWJsZV9jcHUoc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIsIGludCBjcHUpCiB7CmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXJfYmVuY2htYXJrLmMgYi9rZXJuZWwvdHJhY2UvcmluZ19idWZmZXJfYmVuY2htYXJrLmMKaW5kZXggYjI0NzdjYS4uZGY3NGM3OSAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyX2JlbmNobWFyay5jCisrKyBiL2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlcl9iZW5jaG1hcmsuYwpAQCAtOCw2ICs4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9sb2NhbC5oPgogCiBzdHJ1Y3QgcmJfcGFnZSB7CiAJdTY0CQl0czsKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZS5jIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKaW5kZXggMDMyYzU3Yy4uZWQwMWZkYiAxMDA2NDQKLS0tIGEva2VybmVsL3RyYWNlL3RyYWNlLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlLmMKQEAgLTkyLDEyICs5MiwxMiBAQAogc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9kaXNhYmxlX2NwdSh2b2lkKQogewogCXByZWVtcHRfZGlzYWJsZSgpOwotCV9fdGhpc19jcHVfaW5jKHBlcl9jcHVfdmFyKGZ0cmFjZV9jcHVfZGlzYWJsZWQpKTsKKwlfX3RoaXNfY3B1X2luYyhmdHJhY2VfY3B1X2Rpc2FibGVkKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZ0cmFjZV9lbmFibGVfY3B1KHZvaWQpCiB7Ci0JX190aGlzX2NwdV9kZWMocGVyX2NwdV92YXIoZnRyYWNlX2NwdV9kaXNhYmxlZCkpOworCV9fdGhpc19jcHVfZGVjKGZ0cmFjZV9jcHVfZGlzYWJsZWQpOwogCXByZWVtcHRfZW5hYmxlKCk7CiB9CiAKQEAgLTExNjYsNyArMTE2Niw3IEBACiAJc3RydWN0IGZ0cmFjZV9lbnRyeSAqZW50cnk7CiAKIAkvKiBJZiB3ZSBhcmUgcmVhZGluZyB0aGUgcmluZyBidWZmZXIsIGRvbid0IHRyYWNlICovCi0JaWYgKHVubGlrZWx5KF9fdGhpc19jcHVfcmVhZChwZXJfY3B1X3ZhcihmdHJhY2VfY3B1X2Rpc2FibGVkKSkpKQorCWlmICh1bmxpa2VseShfX3RoaXNfY3B1X3JlYWQoZnRyYWNlX2NwdV9kaXNhYmxlZCkpKQogCQlyZXR1cm47CiAKIAlldmVudCA9IHRyYWNlX2J1ZmZlcl9sb2NrX3Jlc2VydmUoYnVmZmVyLCBUUkFDRV9GTiwgc2l6ZW9mKCplbnRyeSksCmRpZmYgLS1naXQgYS9rZXJuZWwvdHJhY2UvdHJhY2UuaCBiL2tlcm5lbC90cmFjZS90cmFjZS5oCmluZGV4IGZkMDViY2EuLjA5YjM5MTEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZS5oCisrKyBiL2tlcm5lbC90cmFjZS90cmFjZS5oCkBAIC01NTAsNyArNTUwLDcgQEAKICAqIHN0cnVjdCB0cmFjZV9wYXJzZXIgLSBzZXJ2ZXJzIGZvciByZWFkaW5nIHRoZSB1c2VyIGlucHV0IHNlcGFyYXRlZCBieSBzcGFjZXMKICAqIEBjb250OiBzZXQgaWYgdGhlIGlucHV0IGlzIG5vdCBjb21wbGV0ZSAtIG5vIGZpbmFsIHNwYWNlIGNoYXIgd2FzIGZvdW5kCiAgKiBAYnVmZmVyOiBob2xkcyB0aGUgcGFyc2VkIHVzZXIgaW5wdXQKLSAqIEBpZHg6IHVzZXIgaW5wdXQgbGVuZ2h0CisgKiBAaWR4OiB1c2VyIGlucHV0IGxlbmd0aAogICogQHNpemU6IGJ1ZmZlciBzaXplCiAgKi8KIHN0cnVjdCB0cmFjZV9wYXJzZXIgewpkaWZmIC0tZ2l0IGEva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCmluZGV4IGU5OThhODIuLjNmYzJhNTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYworKysgYi9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKQEAgLTE4OCw3ICsxODgsNyBAQAogCXN0cnVjdCByaW5nX2J1ZmZlciAqYnVmZmVyID0gdHItPmJ1ZmZlcjsKIAlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudF9lbnRyeSAqZW50cnk7CiAKLQlpZiAodW5saWtlbHkoX190aGlzX2NwdV9yZWFkKHBlcl9jcHVfdmFyKGZ0cmFjZV9jcHVfZGlzYWJsZWQpKSkpCisJaWYgKHVubGlrZWx5KF9fdGhpc19jcHVfcmVhZChmdHJhY2VfY3B1X2Rpc2FibGVkKSkpCiAJCXJldHVybiAwOwogCiAJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfR1JBUEhfRU5ULApAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJc3RydWN0IHJpbmdfYnVmZmVyICpidWZmZXIgPSB0ci0+YnVmZmVyOwogCXN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0X2VudHJ5ICplbnRyeTsKIAotCWlmICh1bmxpa2VseShfX3RoaXNfY3B1X3JlYWQocGVyX2NwdV92YXIoZnRyYWNlX2NwdV9kaXNhYmxlZCkpKSkKKwlpZiAodW5saWtlbHkoX190aGlzX2NwdV9yZWFkKGZ0cmFjZV9jcHVfZGlzYWJsZWQpKSkKIAkJcmV0dXJuOwogCiAJZXZlbnQgPSB0cmFjZV9idWZmZXJfbG9ja19yZXNlcnZlKGJ1ZmZlciwgVFJBQ0VfR1JBUEhfUkVULApkaWZmIC0tZ2l0IGEva2VybmVsL3RzYWNjdC5jIGIva2VybmVsL3RzYWNjdC5jCmluZGV4IDAwZDU5ZDAuLjBhNjdlMDQxIDEwMDY0NAotLS0gYS9rZXJuZWwvdHNhY2N0LmMKKysrIGIva2VybmVsL3RzYWNjdC5jCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSA8bGludXgvdHNhY2N0X2tlcm4uaD4KICNpbmNsdWRlIDxsaW51eC9hY2N0Lmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKIC8qCiAgKiBmaWxsIGluIGJhc2ljIGFjY291bnRpbmcgZmllbGRzCmRpZmYgLS1naXQgYS9saWIvS2NvbmZpZyBiL2xpYi9LY29uZmlnCmluZGV4IDk3YjEzNmYuLjE3MGQ4Y2EgMTAwNjQ0Ci0tLSBhL2xpYi9LY29uZmlnCisrKyBiL2xpYi9LY29uZmlnCkBAIC0xNjAsNiArMTYwLDkgQEAKIGNvbmZpZyBURVhUU0VBUkNIX0ZTTQogCXRyaXN0YXRlCiAKK2NvbmZpZyBCVFJFRQorCWJvb2xlYW4KKwogY29uZmlnIEhBU19JT01FTQogCWJvb2xlYW4KIAlkZXBlbmRzIG9uICFOT19JT01FTQpkaWZmIC0tZ2l0IGEvbGliL0tjb25maWcuZGVidWcgYi9saWIvS2NvbmZpZy5kZWJ1ZwppbmRleCA1ZTM0MDdkLi5iNTIwZWMxIDEwMDY0NAotLS0gYS9saWIvS2NvbmZpZy5kZWJ1ZworKysgYi9saWIvS2NvbmZpZy5kZWJ1ZwpAQCAtODY0LDggKzg2NCw3IEBACiAKIGNvbmZpZyBMS0RUTQogCXRyaXN0YXRlICJMaW51eCBLZXJuZWwgRHVtcCBUZXN0IFRvb2wgTW9kdWxlIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCi0JZGVwZW5kcyBvbiBLUFJPQkVTCisJZGVwZW5kcyBvbiBERUJVR19GUwogCWRlcGVuZHMgb24gQkxPQ0sKIAlkZWZhdWx0IG4KIAloZWxwCkBAIC04NzYsNyArODc1LDcgQEAKIAljYWxsZWQgbGtkdG0uCiAKIAlEb2N1bWVudGF0aW9uIG9uIGhvdyB0byB1c2UgdGhlIG1vZHVsZSBjYW4gYmUgZm91bmQgaW4KLQlkcml2ZXJzL21pc2MvbGtkdG0uYworCURvY3VtZW50YXRpb24vZmF1bHQtaW5qZWN0aW9uL3Byb3Zva2UtY3Jhc2hlcy50eHQKIAogY29uZmlnIEZBVUxUX0lOSkVDVElPTgogCWJvb2wgIkZhdWx0LWluamVjdGlvbiBmcmFtZXdvcmsiCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGUKaW5kZXggM2IwYjRhNi4uMmUxNTJhZSAxMDA2NDQKLS0tIGEvbGliL01ha2VmaWxlCisrKyBiL2xpYi9NYWtlZmlsZQpAQCAtNDEsNiArNDEsNyBAQAogb2JqLSQoQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVCkgKz0gZmluZF9sYXN0X2JpdC5vCiBvYmotJChDT05GSUdfR0VORVJJQ19IV0VJR0hUKSArPSBod2VpZ2h0Lm8KIG9iai0kKENPTkZJR19MT0NLX0tFUk5FTCkgKz0ga2VybmVsX2xvY2subworb2JqLSQoQ09ORklHX0JUUkVFKSArPSBidHJlZS5vCiBvYmotJChDT05GSUdfREVCVUdfUFJFRU1QVCkgKz0gc21wX3Byb2Nlc3Nvcl9pZC5vCiBvYmotJChDT05GSUdfREVCVUdfTElTVCkgKz0gbGlzdF9kZWJ1Zy5vCiBvYmotJChDT05GSUdfREVCVUdfT0JKRUNUUykgKz0gZGVidWdvYmplY3RzLm8KZGlmZiAtLWdpdCBhL2xpYi9iaXRtYXAuYyBiL2xpYi9iaXRtYXAuYwppbmRleCAxMWJmNDk3Li5mZmI3OGM5IDEwMDY0NAotLS0gYS9saWIvYml0bWFwLmMKKysrIGIvbGliL2JpdG1hcC5jCkBAIC00ODcsNyArNDg3LDcgQEAKIEVYUE9SVF9TWU1CT0woX19iaXRtYXBfcGFyc2UpOwogCiAvKioKLSAqIGJpdG1hcF9wYXJzZV91c2VyKCkKKyAqIGJpdG1hcF9wYXJzZV91c2VyIC0gY29udmVydCBhbiBBU0NJSSBoZXggc3RyaW5nIGluIGEgdXNlciBidWZmZXIgaW50byBhIGJpdG1hcAogICoKICAqIEB1YnVmOiBwb2ludGVyIHRvIHVzZXIgYnVmZmVyIGNvbnRhaW5pbmcgc3RyaW5nLgogICogQHVsZW46IGJ1ZmZlciBzaXplIGluIGJ5dGVzLiAgSWYgc3RyaW5nIGlzIHNtYWxsZXIgdGhhbiB0aGlzCkBAIC02MTksNyArNjE5LDcgQEAKIEVYUE9SVF9TWU1CT0woYml0bWFwX3BhcnNlbGlzdCk7CiAKIC8qKgotICogYml0bWFwX3Bvc190b19vcmQoYnVmLCBwb3MsIGJpdHMpCisgKiBiaXRtYXBfcG9zX3RvX29yZCAtIGZpbmQgb3JkaW5hbCBvZiBzZXQgYml0IGF0IGdpdmVuIHBvc2l0aW9uIGluIGJpdG1hcAogICoJQGJ1ZjogcG9pbnRlciB0byBhIGJpdG1hcAogICoJQHBvczogYSBiaXQgcG9zaXRpb24gaW4gQGJ1ZiAoMCA8PSBAcG9zIDwgQGJpdHMpCiAgKglAYml0czogbnVtYmVyIG9mIHZhbGlkIGJpdCBwb3NpdGlvbnMgaW4gQGJ1ZgpAQCAtNjU1LDcgKzY1NSw3IEBACiB9CiAKIC8qKgotICogYml0bWFwX29yZF90b19wb3MoYnVmLCBvcmQsIGJpdHMpCisgKiBiaXRtYXBfb3JkX3RvX3BvcyAtIGZpbmQgcG9zaXRpb24gb2Ygbi10aCBzZXQgYml0IGluIGJpdG1hcAogICoJQGJ1ZjogcG9pbnRlciB0byBiaXRtYXAKICAqCUBvcmQ6IG9yZGluYWwgYml0IHBvc2l0aW9uIChuLXRoIHNldCBiaXQsIG4gPj0gMCkKICAqCUBiaXRzOiBudW1iZXIgb2YgdmFsaWQgYml0IHBvc2l0aW9ucyBpbiBAYnVmCkBAIC03MzMsMTAgKzczMyw5IEBACiAJYml0bWFwX3plcm8oZHN0LCBiaXRzKTsKIAogCXcgPSBiaXRtYXBfd2VpZ2h0KG5ldywgYml0cyk7Ci0JZm9yIChvbGRiaXQgPSBmaW5kX2ZpcnN0X2JpdChzcmMsIGJpdHMpOwotCSAgICAgb2xkYml0IDwgYml0czsKLQkgICAgIG9sZGJpdCA9IGZpbmRfbmV4dF9iaXQoc3JjLCBiaXRzLCBvbGRiaXQgKyAxKSkgeworCWZvcl9lYWNoX3NldF9iaXQob2xkYml0LCBzcmMsIGJpdHMpIHsKIAkgICAgIAlpbnQgbiA9IGJpdG1hcF9wb3NfdG9fb3JkKG9sZCwgb2xkYml0LCBiaXRzKTsKKwogCQlpZiAobiA8IDAgfHwgdyA9PSAwKQogCQkJc2V0X2JpdChvbGRiaXQsIGRzdCk7CS8qIGlkZW50aXR5IG1hcCAqLwogCQllbHNlCkBAIC05MDMsOSArOTAyLDcgQEAKIAkgKi8KIAogCW0gPSAwOwotCWZvciAobiA9IGZpbmRfZmlyc3RfYml0KHJlbG1hcCwgYml0cyk7Ci0JICAgICBuIDwgYml0czsKLQkgICAgIG4gPSBmaW5kX25leHRfYml0KHJlbG1hcCwgYml0cywgbiArIDEpKSB7CisJZm9yX2VhY2hfc2V0X2JpdChuLCByZWxtYXAsIGJpdHMpIHsKIAkJLyogbSA9PSBiaXRtYXBfcG9zX3RvX29yZChyZWxtYXAsIG4sIGJpdHMpICovCiAJCWlmICh0ZXN0X2JpdChtLCBvcmlnKSkKIAkJCXNldF9iaXQobiwgZHN0KTsKQEAgLTkzNCw5ICs5MzEsNyBAQAogCQlyZXR1cm47CiAJYml0bWFwX3plcm8oZHN0LCBiaXRzKTsKIAotCWZvciAob2xkYml0ID0gZmluZF9maXJzdF9iaXQob3JpZywgYml0cyk7Ci0JICAgICBvbGRiaXQgPCBiaXRzOwotCSAgICAgb2xkYml0ID0gZmluZF9uZXh0X2JpdChvcmlnLCBiaXRzLCBvbGRiaXQgKyAxKSkKKwlmb3JfZWFjaF9zZXRfYml0KG9sZGJpdCwgb3JpZywgYml0cykKIAkJc2V0X2JpdChvbGRiaXQgJSBzeiwgZHN0KTsKIH0KIEVYUE9SVF9TWU1CT0woYml0bWFwX2ZvbGQpOwpkaWZmIC0tZ2l0IGEvbGliL2J0cmVlLmMgYi9saWIvYnRyZWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTg1OWE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliL2J0cmVlLmMKQEAgLTAsMCArMSw3OTcgQEAKKy8qCisgKiBsaWIvYnRyZWUuYwktIFNpbXBsZSBJbi1tZW1vcnkgQitUcmVlCisgKgorICogQXMgc2hvdWxkIGJlIG9idmlvdXMgZm9yIExpbnV4IGtlcm5lbCBjb2RlLCBsaWNlbnNlIGlzIEdQTHYyCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA3LTIwMDggSm9lcm4gRW5nZWwgPGpvZXJuQGxvZ2ZzLm9yZz4KKyAqIEJpdHMgYW5kIHBpZWNlcyBzdG9sZW4gZnJvbSBQZXRlciBaaWpsc3RyYSdzIGNvZGUsIHdoaWNoIGlzCisgKiBDb3B5cmlnaHQgMjAwNywgUmVkIEhhdCBJbmMuIFBldGVyIFppamxzdHJhIDxwemlqbHN0ckByZWRoYXQuY29tPgorICogR1BMdjIKKyAqCisgKiBzZWUgaHR0cDovL3Byb2dyYW1taW5nLmtpY2tzLWFzcy5uZXQva2VybmVsLXBhdGNoZXMvdm1hX2xvb2t1cC9idHJlZS5wYXRjaAorICoKKyAqIEEgcmVsYXRpdmVseSBzaW1wbGUgQitUcmVlIGltcGxlbWVudGF0aW9uLiAgSSBoYXZlIHdyaXR0ZW4gaXQgYXMgYSBsZWFybmluZworICogZXhjZXJjaXNlIHRvIHVuZGVyc3RhbmQgaG93IEIrVHJlZXMgd29yay4gIFR1cm5lZCBvdXQgdG8gYmUgdXNlZnVsIGFzIHdlbGwuCisgKgorICogQitUcmVlcyBjYW4gYmUgdXNlZCBzaW1pbGFyIHRvIExpbnV4IHJhZGl4IHRyZWVzICh3aGljaCBkb24ndCBoYXZlIGFueXRoaW5nCisgKiBpbiBjb21tb24gd2l0aCB0ZXh0Ym9vayByYWRpeCB0cmVlcywgYmV3YXJlKS4gIFByZXJlcXVpc2l0ZSBmb3IgdGhlbSB3b3JraW5nCisgKiB3ZWxsIGlzIHRoYXQgYWNjZXNzIHRvIGEgcmFuZG9tIHRyZWUgbm9kZSBpcyBtdWNoIGZhc3RlciB0aGFuIGEgbGFyZ2UgbnVtYmVyCisgKiBvZiBvcGVyYXRpb25zIHdpdGhpbiBlYWNoIG5vZGUuCisgKgorICogRGlza3MgaGF2ZSBmdWxmaWxsZWQgdGhlIHByZXJlcXVpc2l0ZSBmb3IgYSBsb25nIHRpbWUuICBNb3JlIHJlY2VudGx5IERSQU0KKyAqIGhhcyBnYWluZWQgc2ltaWxhciBwcm9wZXJ0aWVzLCBhcyBtZW1vcnkgYWNjZXNzIHRpbWVzLCB3aGVuIG1lYXN1cmVkIGluIGNwdQorICogY3ljbGVzLCBoYXZlIGluY3JlYXNlZC4gIENhY2hlbGluZSBzaXplcyBoYXZlIGluY3JlYXNlZCBhcyB3ZWxsLCB3aGljaCBhbHNvCisgKiBoZWxwcyBCK1RyZWVzLgorICoKKyAqIENvbXBhcmVkIHRvIHJhZGl4IHRyZWVzLCBCK1RyZWVzIGFyZSBtb3JlIGVmZmljaWVudCB3aGVuIGRlYWxpbmcgd2l0aCBhCisgKiBzcGFyc2VseSBwb3B1bGF0ZWQgYWRkcmVzcyBzcGFjZS4gIEJldHdlZW4gMjUlIGFuZCA1MCUgb2YgdGhlIG1lbW9yeSBpcworICogb2NjdXBpZWQgd2l0aCB2YWxpZCBwb2ludGVycy4gIFdoZW4gZGVuc2VseSBwb3B1bGF0ZWQsIHJhZGl4IHRyZWVzIGNvbnRhaW4KKyAqIH45OCUgcG9pbnRlcnMgLSBoYXJkIHRvIGJlYXQuICBWZXJ5IHNwYXJzZSByYWRpeCB0cmVlcyBjb250YWluIG9ubHkgfjIlCisgKiBwb2ludGVycy4KKyAqCisgKiBUaGlzIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24gc3RvcmVzIHBvaW50ZXJzIGlkZW50aWZpZWQgYnkgYSBsb25nIHZhbHVlLgorICogU3RvcmluZyBOVUxMIHBvaW50ZXJzIGlzIGlsbGVnYWwsIGxvb2t1cCB3aWxsIHJldHVybiBOVUxMIHdoZW4gbm8gZW50cnkKKyAqIHdhcyBmb3VuZC4KKyAqCisgKiBBIHRyaWNrcyB3YXMgdXNlZCB0aGF0IGlzIG5vdCBjb21tb25seSBmb3VuZCBpbiB0ZXh0Ym9va3MuICBUaGUgbG93ZXN0CisgKiB2YWx1ZXMgYXJlIHRvIHRoZSByaWdodCwgbm90IHRvIHRoZSBsZWZ0LiAgQWxsIHVzZWQgc2xvdHMgd2l0aGluIGEgbm9kZQorICogYXJlIG9uIHRoZSBsZWZ0LCBhbGwgdW51c2VkIHNsb3RzIGNvbnRhaW4gTlVMIHZhbHVlcy4gIE1vc3Qgb3BlcmF0aW9ucworICogc2ltcGx5IGxvb3Agb25jZSBvdmVyIGFsbCBzbG90cyBhbmQgdGVybWluYXRlIG9uIHRoZSBmaXJzdCBOVUwuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2J0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNkZWZpbmUgTUFYKGEsIGIpICgoYSkgPiAoYikgPyAoYSkgOiAoYikpCisjZGVmaW5lIE5PREVTSVpFIE1BWChMMV9DQUNIRV9CWVRFUywgMTI4KQorCitzdHJ1Y3QgYnRyZWVfZ2VvIHsKKwlpbnQga2V5bGVuOworCWludCBub19wYWlyczsKKwlpbnQgbm9fbG9uZ3M7Cit9OworCitzdHJ1Y3QgYnRyZWVfZ2VvIGJ0cmVlX2dlbzMyID0geworCS5rZXlsZW4gPSAxLAorCS5ub19wYWlycyA9IE5PREVTSVpFIC8gc2l6ZW9mKGxvbmcpIC8gMiwKKwkubm9fbG9uZ3MgPSBOT0RFU0laRSAvIHNpemVvZihsb25nKSAvIDIsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoYnRyZWVfZ2VvMzIpOworCisjZGVmaW5lIExPTkdfUEVSX1U2NCAoNjQgLyBCSVRTX1BFUl9MT05HKQorc3RydWN0IGJ0cmVlX2dlbyBidHJlZV9nZW82NCA9IHsKKwkua2V5bGVuID0gTE9OR19QRVJfVTY0LAorCS5ub19wYWlycyA9IE5PREVTSVpFIC8gc2l6ZW9mKGxvbmcpIC8gKDEgKyBMT05HX1BFUl9VNjQpLAorCS5ub19sb25ncyA9IExPTkdfUEVSX1U2NCAqIChOT0RFU0laRSAvIHNpemVvZihsb25nKSAvICgxICsgTE9OR19QRVJfVTY0KSksCit9OworRVhQT1JUX1NZTUJPTF9HUEwoYnRyZWVfZ2VvNjQpOworCitzdHJ1Y3QgYnRyZWVfZ2VvIGJ0cmVlX2dlbzEyOCA9IHsKKwkua2V5bGVuID0gMiAqIExPTkdfUEVSX1U2NCwKKwkubm9fcGFpcnMgPSBOT0RFU0laRSAvIHNpemVvZihsb25nKSAvICgxICsgMiAqIExPTkdfUEVSX1U2NCksCisJLm5vX2xvbmdzID0gMiAqIExPTkdfUEVSX1U2NCAqIChOT0RFU0laRSAvIHNpemVvZihsb25nKSAvICgxICsgMiAqIExPTkdfUEVSX1U2NCkpLAorfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGJ0cmVlX2dlbzEyOCk7CisKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYnRyZWVfY2FjaGVwOworCit2b2lkICpidHJlZV9hbGxvYyhnZnBfdCBnZnBfbWFzaywgdm9pZCAqcG9vbF9kYXRhKQoreworCXJldHVybiBrbWVtX2NhY2hlX2FsbG9jKGJ0cmVlX2NhY2hlcCwgZ2ZwX21hc2spOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYnRyZWVfYWxsb2MpOworCit2b2lkIGJ0cmVlX2ZyZWUodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKQoreworCWttZW1fY2FjaGVfZnJlZShidHJlZV9jYWNoZXAsIGVsZW1lbnQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYnRyZWVfZnJlZSk7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nICpidHJlZV9ub2RlX2FsbG9jKHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBnZnBfdCBnZnApCit7CisJdW5zaWduZWQgbG9uZyAqbm9kZTsKKworCW5vZGUgPSBtZW1wb29sX2FsbG9jKGhlYWQtPm1lbXBvb2wsIGdmcCk7CisJbWVtc2V0KG5vZGUsIDAsIE5PREVTSVpFKTsKKwlyZXR1cm4gbm9kZTsKK30KKworc3RhdGljIGludCBsb25nY21wKGNvbnN0IHVuc2lnbmVkIGxvbmcgKmwxLCBjb25zdCB1bnNpZ25lZCBsb25nICpsMiwgc2l6ZV90IG4pCit7CisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlmIChsMVtpXSA8IGwyW2ldKQorCQkJcmV0dXJuIC0xOworCQlpZiAobDFbaV0gPiBsMltpXSkKKwkJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgKmxvbmdjcHkodW5zaWduZWQgbG9uZyAqZGVzdCwgY29uc3QgdW5zaWduZWQgbG9uZyAqc3JjLAorCQlzaXplX3QgbikKK3sKKwlzaXplX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspCisJCWRlc3RbaV0gPSBzcmNbaV07CisJcmV0dXJuIGRlc3Q7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nICpsb25nc2V0KHVuc2lnbmVkIGxvbmcgKnMsIHVuc2lnbmVkIGxvbmcgYywgc2l6ZV90IG4pCit7CisJc2l6ZV90IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQorCQlzW2ldID0gYzsKKwlyZXR1cm4gczsKK30KKworc3RhdGljIHZvaWQgZGVjX2tleShzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sIHVuc2lnbmVkIGxvbmcgKmtleSkKK3sKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgaTsKKworCWZvciAoaSA9IGdlby0+a2V5bGVuIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJdmFsID0ga2V5W2ldOworCQlrZXlbaV0gPSB2YWwgLSAxOworCQlpZiAodmFsKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyAqYmtleShzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sIHVuc2lnbmVkIGxvbmcgKm5vZGUsIGludCBuKQoreworCXJldHVybiAmbm9kZVtuICogZ2VvLT5rZXlsZW5dOworfQorCitzdGF0aWMgdm9pZCAqYnZhbChzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sIHVuc2lnbmVkIGxvbmcgKm5vZGUsIGludCBuKQoreworCXJldHVybiAodm9pZCAqKW5vZGVbZ2VvLT5ub19sb25ncyArIG5dOworfQorCitzdGF0aWMgdm9pZCBzZXRrZXkoc3RydWN0IGJ0cmVlX2dlbyAqZ2VvLCB1bnNpZ25lZCBsb25nICpub2RlLCBpbnQgbiwKKwkJICAgdW5zaWduZWQgbG9uZyAqa2V5KQoreworCWxvbmdjcHkoYmtleShnZW8sIG5vZGUsIG4pLCBrZXksIGdlby0+a2V5bGVuKTsKK30KKworc3RhdGljIHZvaWQgc2V0dmFsKHN0cnVjdCBidHJlZV9nZW8gKmdlbywgdW5zaWduZWQgbG9uZyAqbm9kZSwgaW50IG4sCisJCSAgIHZvaWQgKnZhbCkKK3sKKwlub2RlW2dlby0+bm9fbG9uZ3MgKyBuXSA9ICh1bnNpZ25lZCBsb25nKSB2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGNsZWFycGFpcihzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sIHVuc2lnbmVkIGxvbmcgKm5vZGUsIGludCBuKQoreworCWxvbmdzZXQoYmtleShnZW8sIG5vZGUsIG4pLCAwLCBnZW8tPmtleWxlbik7CisJbm9kZVtnZW8tPm5vX2xvbmdzICsgbl0gPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgX19idHJlZV9pbml0KHN0cnVjdCBidHJlZV9oZWFkICpoZWFkKQoreworCWhlYWQtPm5vZGUgPSBOVUxMOworCWhlYWQtPmhlaWdodCA9IDA7Cit9CisKK3ZvaWQgYnRyZWVfaW5pdF9tZW1wb29sKHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBtZW1wb29sX3QgKm1lbXBvb2wpCit7CisJX19idHJlZV9pbml0KGhlYWQpOworCWhlYWQtPm1lbXBvb2wgPSBtZW1wb29sOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYnRyZWVfaW5pdF9tZW1wb29sKTsKKworaW50IGJ0cmVlX2luaXQoc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQpCit7CisJX19idHJlZV9pbml0KGhlYWQpOworCWhlYWQtPm1lbXBvb2wgPSBtZW1wb29sX2NyZWF0ZSgwLCBidHJlZV9hbGxvYywgYnRyZWVfZnJlZSwgTlVMTCk7CisJaWYgKCFoZWFkLT5tZW1wb29sKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJ0cmVlX2luaXQpOworCit2b2lkIGJ0cmVlX2Rlc3Ryb3koc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQpCit7CisJbWVtcG9vbF9kZXN0cm95KGhlYWQtPm1lbXBvb2wpOworCWhlYWQtPm1lbXBvb2wgPSBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYnRyZWVfZGVzdHJveSk7CisKK3ZvaWQgKmJ0cmVlX2xhc3Qoc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIHN0cnVjdCBidHJlZV9nZW8gKmdlbywKKwkJIHVuc2lnbmVkIGxvbmcgKmtleSkKK3sKKwlpbnQgaGVpZ2h0ID0gaGVhZC0+aGVpZ2h0OworCXVuc2lnbmVkIGxvbmcgKm5vZGUgPSBoZWFkLT5ub2RlOworCisJaWYgKGhlaWdodCA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoIDsgaGVpZ2h0ID4gMTsgaGVpZ2h0LS0pCisJCW5vZGUgPSBidmFsKGdlbywgbm9kZSwgMCk7CisKKwlsb25nY3B5KGtleSwgYmtleShnZW8sIG5vZGUsIDApLCBnZW8tPmtleWxlbik7CisJcmV0dXJuIGJ2YWwoZ2VvLCBub2RlLCAwKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJ0cmVlX2xhc3QpOworCitzdGF0aWMgaW50IGtleWNtcChzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sIHVuc2lnbmVkIGxvbmcgKm5vZGUsIGludCBwb3MsCisJCSAgdW5zaWduZWQgbG9uZyAqa2V5KQoreworCXJldHVybiBsb25nY21wKGJrZXkoZ2VvLCBub2RlLCBwb3MpLCBrZXksIGdlby0+a2V5bGVuKTsKK30KKworc3RhdGljIGludCBrZXl6ZXJvKHN0cnVjdCBidHJlZV9nZW8gKmdlbywgdW5zaWduZWQgbG9uZyAqa2V5KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGdlby0+a2V5bGVuOyBpKyspCisJCWlmIChrZXlbaV0pCisJCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCit2b2lkICpidHJlZV9sb29rdXAoc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIHN0cnVjdCBidHJlZV9nZW8gKmdlbywKKwkJdW5zaWduZWQgbG9uZyAqa2V5KQoreworCWludCBpLCBoZWlnaHQgPSBoZWFkLT5oZWlnaHQ7CisJdW5zaWduZWQgbG9uZyAqbm9kZSA9IGhlYWQtPm5vZGU7CisKKwlpZiAoaGVpZ2h0ID09IDApCisJCXJldHVybiBOVUxMOworCisJZm9yICggOyBoZWlnaHQgPiAxOyBoZWlnaHQtLSkgeworCQlmb3IgKGkgPSAwOyBpIDwgZ2VvLT5ub19wYWlyczsgaSsrKQorCQkJaWYgKGtleWNtcChnZW8sIG5vZGUsIGksIGtleSkgPD0gMCkKKwkJCQlicmVhazsKKwkJaWYgKGkgPT0gZ2VvLT5ub19wYWlycykKKwkJCXJldHVybiBOVUxMOworCQlub2RlID0gYnZhbChnZW8sIG5vZGUsIGkpOworCQlpZiAoIW5vZGUpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoIW5vZGUpCisJCXJldHVybiBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IGdlby0+bm9fcGFpcnM7IGkrKykKKwkJaWYgKGtleWNtcChnZW8sIG5vZGUsIGksIGtleSkgPT0gMCkKKwkJCXJldHVybiBidmFsKGdlbywgbm9kZSwgaSk7CisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChidHJlZV9sb29rdXApOworCitpbnQgYnRyZWVfdXBkYXRlKHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sCisJCSB1bnNpZ25lZCBsb25nICprZXksIHZvaWQgKnZhbCkKK3sKKwlpbnQgaSwgaGVpZ2h0ID0gaGVhZC0+aGVpZ2h0OworCXVuc2lnbmVkIGxvbmcgKm5vZGUgPSBoZWFkLT5ub2RlOworCisJaWYgKGhlaWdodCA9PSAwKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWZvciAoIDsgaGVpZ2h0ID4gMTsgaGVpZ2h0LS0pIHsKKwkJZm9yIChpID0gMDsgaSA8IGdlby0+bm9fcGFpcnM7IGkrKykKKwkJCWlmIChrZXljbXAoZ2VvLCBub2RlLCBpLCBrZXkpIDw9IDApCisJCQkJYnJlYWs7CisJCWlmIChpID09IGdlby0+bm9fcGFpcnMpCisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJbm9kZSA9IGJ2YWwoZ2VvLCBub2RlLCBpKTsKKwkJaWYgKCFub2RlKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisJfQorCisJaWYgKCFub2RlKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWZvciAoaSA9IDA7IGkgPCBnZW8tPm5vX3BhaXJzOyBpKyspCisJCWlmIChrZXljbXAoZ2VvLCBub2RlLCBpLCBrZXkpID09IDApIHsKKwkJCXNldHZhbChnZW8sIG5vZGUsIGksIHZhbCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCXJldHVybiAtRU5PRU5UOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYnRyZWVfdXBkYXRlKTsKKworLyoKKyAqIFVzdWFsbHkgdGhpcyBmdW5jdGlvbiBpcyBxdWl0ZSBzaW1pbGFyIHRvIG5vcm1hbCBsb29rdXAuICBCdXQgdGhlIGtleSBvZgorICogYSBwYXJlbnQgbm9kZSBtYXkgYmUgc21hbGxlciB0aGFuIHRoZSBzbWFsbGVzdCBrZXkgb2YgYWxsIGl0cyBzaWJsaW5ncy4KKyAqIEluIHN1Y2ggYSBjYXNlIHdlIGNhbm5vdCBqdXN0IHJldHVybiBOVUxMLCBhcyB3ZSBoYXZlIG9ubHkgcHJvdmVuIHRoYXQgbm8KKyAqIGtleSBzbWFsbGVyIHRoYW4gX19rZXksIGJ1dCBsYXJnZXIgdGhhbiB0aGlzIHBhcmVudCBrZXkgZXhpc3RzLgorICogU28gd2Ugc2V0IF9fa2V5IHRvIHRoZSBwYXJlbnQga2V5IGFuZCByZXRyeS4gIFdlIGhhdmUgdG8gdXNlIHRoZSBzbWFsbGVzdAorICogc3VjaCBwYXJlbnQga2V5LCB3aGljaCBpcyB0aGUgbGFzdCBwYXJlbnQga2V5IHdlIGVuY291bnRlcmVkLgorICovCit2b2lkICpidHJlZV9nZXRfcHJldihzdHJ1Y3QgYnRyZWVfaGVhZCAqaGVhZCwgc3RydWN0IGJ0cmVlX2dlbyAqZ2VvLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgKl9fa2V5KQoreworCWludCBpLCBoZWlnaHQ7CisJdW5zaWduZWQgbG9uZyAqbm9kZSwgKm9sZG5vZGU7CisJdW5zaWduZWQgbG9uZyAqcmV0cnlfa2V5ID0gTlVMTCwga2V5W2dlby0+a2V5bGVuXTsKKworCWlmIChrZXl6ZXJvKGdlbywgX19rZXkpKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChoZWFkLT5oZWlnaHQgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CityZXRyeToKKwlsb25nY3B5KGtleSwgX19rZXksIGdlby0+a2V5bGVuKTsKKwlkZWNfa2V5KGdlbywga2V5KTsKKworCW5vZGUgPSBoZWFkLT5ub2RlOworCWZvciAoaGVpZ2h0ID0gaGVhZC0+aGVpZ2h0IDsgaGVpZ2h0ID4gMTsgaGVpZ2h0LS0pIHsKKwkJZm9yIChpID0gMDsgaSA8IGdlby0+bm9fcGFpcnM7IGkrKykKKwkJCWlmIChrZXljbXAoZ2VvLCBub2RlLCBpLCBrZXkpIDw9IDApCisJCQkJYnJlYWs7CisJCWlmIChpID09IGdlby0+bm9fcGFpcnMpCisJCQlnb3RvIG1pc3M7CisJCW9sZG5vZGUgPSBub2RlOworCQlub2RlID0gYnZhbChnZW8sIG5vZGUsIGkpOworCQlpZiAoIW5vZGUpCisJCQlnb3RvIG1pc3M7CisJCXJldHJ5X2tleSA9IGJrZXkoZ2VvLCBvbGRub2RlLCBpKTsKKwl9CisKKwlpZiAoIW5vZGUpCisJCWdvdG8gbWlzczsKKworCWZvciAoaSA9IDA7IGkgPCBnZW8tPm5vX3BhaXJzOyBpKyspIHsKKwkJaWYgKGtleWNtcChnZW8sIG5vZGUsIGksIGtleSkgPD0gMCkgeworCQkJaWYgKGJ2YWwoZ2VvLCBub2RlLCBpKSkgeworCQkJCWxvbmdjcHkoX19rZXksIGJrZXkoZ2VvLCBub2RlLCBpKSwgZ2VvLT5rZXlsZW4pOworCQkJCXJldHVybiBidmFsKGdlbywgbm9kZSwgaSk7CisJCQl9IGVsc2UKKwkJCQlnb3RvIG1pc3M7CisJCX0KKwl9CittaXNzOgorCWlmIChyZXRyeV9rZXkpIHsKKwkJX19rZXkgPSByZXRyeV9rZXk7CisJCXJldHJ5X2tleSA9IE5VTEw7CisJCWdvdG8gcmV0cnk7CisJfQorCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgaW50IGdldHBvcyhzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sIHVuc2lnbmVkIGxvbmcgKm5vZGUsCisJCXVuc2lnbmVkIGxvbmcgKmtleSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBnZW8tPm5vX3BhaXJzOyBpKyspIHsKKwkJaWYgKGtleWNtcChnZW8sIG5vZGUsIGksIGtleSkgPD0gMCkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gaTsKK30KKworc3RhdGljIGludCBnZXRmaWxsKHN0cnVjdCBidHJlZV9nZW8gKmdlbywgdW5zaWduZWQgbG9uZyAqbm9kZSwgaW50IHN0YXJ0KQoreworCWludCBpOworCisJZm9yIChpID0gc3RhcnQ7IGkgPCBnZW8tPm5vX3BhaXJzOyBpKyspCisJCWlmICghYnZhbChnZW8sIG5vZGUsIGkpKQorCQkJYnJlYWs7CisJcmV0dXJuIGk7Cit9CisKKy8qCisgKiBsb2NhdGUgdGhlIGNvcnJlY3QgbGVhZiBub2RlIGluIHRoZSBidHJlZQorICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyAqZmluZF9sZXZlbChzdHJ1Y3QgYnRyZWVfaGVhZCAqaGVhZCwgc3RydWN0IGJ0cmVlX2dlbyAqZ2VvLAorCQl1bnNpZ25lZCBsb25nICprZXksIGludCBsZXZlbCkKK3sKKwl1bnNpZ25lZCBsb25nICpub2RlID0gaGVhZC0+bm9kZTsKKwlpbnQgaSwgaGVpZ2h0OworCisJZm9yIChoZWlnaHQgPSBoZWFkLT5oZWlnaHQ7IGhlaWdodCA+IGxldmVsOyBoZWlnaHQtLSkgeworCQlmb3IgKGkgPSAwOyBpIDwgZ2VvLT5ub19wYWlyczsgaSsrKQorCQkJaWYgKGtleWNtcChnZW8sIG5vZGUsIGksIGtleSkgPD0gMCkKKwkJCQlicmVhazsKKworCQlpZiAoKGkgPT0gZ2VvLT5ub19wYWlycykgfHwgIWJ2YWwoZ2VvLCBub2RlLCBpKSkgeworCQkJLyogcmlnaHQtbW9zdCBrZXkgaXMgdG9vIGxhcmdlLCB1cGRhdGUgaXQgKi8KKwkJCS8qIEZJWE1FOiBJZiB0aGUgcmlnaHQtbW9zdCBrZXkgb24gaGlnaGVyIGxldmVscyBpcworCQkJICogYWx3YXlzIHplcm8sIHRoaXMgd291bGRuJ3QgYmUgbmVjZXNzYXJ5LiAqLworCQkJaS0tOworCQkJc2V0a2V5KGdlbywgbm9kZSwgaSwga2V5KTsKKwkJfQorCQlCVUdfT04oaSA8IDApOworCQlub2RlID0gYnZhbChnZW8sIG5vZGUsIGkpOworCX0KKwlCVUdfT04oIW5vZGUpOworCXJldHVybiBub2RlOworfQorCitzdGF0aWMgaW50IGJ0cmVlX2dyb3coc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIHN0cnVjdCBidHJlZV9nZW8gKmdlbywKKwkJICAgICAgZ2ZwX3QgZ2ZwKQoreworCXVuc2lnbmVkIGxvbmcgKm5vZGU7CisJaW50IGZpbGw7CisKKwlub2RlID0gYnRyZWVfbm9kZV9hbGxvYyhoZWFkLCBnZnApOworCWlmICghbm9kZSkKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKGhlYWQtPm5vZGUpIHsKKwkJZmlsbCA9IGdldGZpbGwoZ2VvLCBoZWFkLT5ub2RlLCAwKTsKKwkJc2V0a2V5KGdlbywgbm9kZSwgMCwgYmtleShnZW8sIGhlYWQtPm5vZGUsIGZpbGwgLSAxKSk7CisJCXNldHZhbChnZW8sIG5vZGUsIDAsIGhlYWQtPm5vZGUpOworCX0KKwloZWFkLT5ub2RlID0gbm9kZTsKKwloZWFkLT5oZWlnaHQrKzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYnRyZWVfc2hyaW5rKHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8pCit7CisJdW5zaWduZWQgbG9uZyAqbm9kZTsKKwlpbnQgZmlsbDsKKworCWlmIChoZWFkLT5oZWlnaHQgPD0gMSkKKwkJcmV0dXJuOworCisJbm9kZSA9IGhlYWQtPm5vZGU7CisJZmlsbCA9IGdldGZpbGwoZ2VvLCBub2RlLCAwKTsKKwlCVUdfT04oZmlsbCA+IDEpOworCWhlYWQtPm5vZGUgPSBidmFsKGdlbywgbm9kZSwgMCk7CisJaGVhZC0+aGVpZ2h0LS07CisJbWVtcG9vbF9mcmVlKG5vZGUsIGhlYWQtPm1lbXBvb2wpOworfQorCitzdGF0aWMgaW50IGJ0cmVlX2luc2VydF9sZXZlbChzdHJ1Y3QgYnRyZWVfaGVhZCAqaGVhZCwgc3RydWN0IGJ0cmVlX2dlbyAqZ2VvLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyAqa2V5LCB2b2lkICp2YWwsIGludCBsZXZlbCwKKwkJCSAgICAgIGdmcF90IGdmcCkKK3sKKwl1bnNpZ25lZCBsb25nICpub2RlOworCWludCBpLCBwb3MsIGZpbGwsIGVycjsKKworCUJVR19PTighdmFsKTsKKwlpZiAoaGVhZC0+aGVpZ2h0IDwgbGV2ZWwpIHsKKwkJZXJyID0gYnRyZWVfZ3JvdyhoZWFkLCBnZW8sIGdmcCk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKworcmV0cnk6CisJbm9kZSA9IGZpbmRfbGV2ZWwoaGVhZCwgZ2VvLCBrZXksIGxldmVsKTsKKwlwb3MgPSBnZXRwb3MoZ2VvLCBub2RlLCBrZXkpOworCWZpbGwgPSBnZXRmaWxsKGdlbywgbm9kZSwgcG9zKTsKKwkvKiB0d28gaWRlbnRpY2FsIGtleXMgYXJlIG5vdCBhbGxvd2VkICovCisJQlVHX09OKHBvcyA8IGZpbGwgJiYga2V5Y21wKGdlbywgbm9kZSwgcG9zLCBrZXkpID09IDApOworCisJaWYgKGZpbGwgPT0gZ2VvLT5ub19wYWlycykgeworCQkvKiBuZWVkIHRvIHNwbGl0IG5vZGUgKi8KKwkJdW5zaWduZWQgbG9uZyAqbmV3OworCisJCW5ldyA9IGJ0cmVlX25vZGVfYWxsb2MoaGVhZCwgZ2ZwKTsKKwkJaWYgKCFuZXcpCisJCQlyZXR1cm4gLUVOT01FTTsKKwkJZXJyID0gYnRyZWVfaW5zZXJ0X2xldmVsKGhlYWQsIGdlbywKKwkJCQlia2V5KGdlbywgbm9kZSwgZmlsbCAvIDIgLSAxKSwKKwkJCQluZXcsIGxldmVsICsgMSwgZ2ZwKTsKKwkJaWYgKGVycikgeworCQkJbWVtcG9vbF9mcmVlKG5ldywgaGVhZC0+bWVtcG9vbCk7CisJCQlyZXR1cm4gZXJyOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBmaWxsIC8gMjsgaSsrKSB7CisJCQlzZXRrZXkoZ2VvLCBuZXcsIGksIGJrZXkoZ2VvLCBub2RlLCBpKSk7CisJCQlzZXR2YWwoZ2VvLCBuZXcsIGksIGJ2YWwoZ2VvLCBub2RlLCBpKSk7CisJCQlzZXRrZXkoZ2VvLCBub2RlLCBpLCBia2V5KGdlbywgbm9kZSwgaSArIGZpbGwgLyAyKSk7CisJCQlzZXR2YWwoZ2VvLCBub2RlLCBpLCBidmFsKGdlbywgbm9kZSwgaSArIGZpbGwgLyAyKSk7CisJCQljbGVhcnBhaXIoZ2VvLCBub2RlLCBpICsgZmlsbCAvIDIpOworCQl9CisJCWlmIChmaWxsICYgMSkgeworCQkJc2V0a2V5KGdlbywgbm9kZSwgaSwgYmtleShnZW8sIG5vZGUsIGZpbGwgLSAxKSk7CisJCQlzZXR2YWwoZ2VvLCBub2RlLCBpLCBidmFsKGdlbywgbm9kZSwgZmlsbCAtIDEpKTsKKwkJCWNsZWFycGFpcihnZW8sIG5vZGUsIGZpbGwgLSAxKTsKKwkJfQorCQlnb3RvIHJldHJ5OworCX0KKwlCVUdfT04oZmlsbCA+PSBnZW8tPm5vX3BhaXJzKTsKKworCS8qIHNoaWZ0IGFuZCBpbnNlcnQgKi8KKwlmb3IgKGkgPSBmaWxsOyBpID4gcG9zOyBpLS0pIHsKKwkJc2V0a2V5KGdlbywgbm9kZSwgaSwgYmtleShnZW8sIG5vZGUsIGkgLSAxKSk7CisJCXNldHZhbChnZW8sIG5vZGUsIGksIGJ2YWwoZ2VvLCBub2RlLCBpIC0gMSkpOworCX0KKwlzZXRrZXkoZ2VvLCBub2RlLCBwb3MsIGtleSk7CisJc2V0dmFsKGdlbywgbm9kZSwgcG9zLCB2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBidHJlZV9pbnNlcnQoc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIHN0cnVjdCBidHJlZV9nZW8gKmdlbywKKwkJdW5zaWduZWQgbG9uZyAqa2V5LCB2b2lkICp2YWwsIGdmcF90IGdmcCkKK3sKKwlyZXR1cm4gYnRyZWVfaW5zZXJ0X2xldmVsKGhlYWQsIGdlbywga2V5LCB2YWwsIDEsIGdmcCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChidHJlZV9pbnNlcnQpOworCitzdGF0aWMgdm9pZCAqYnRyZWVfcmVtb3ZlX2xldmVsKHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sCisJCXVuc2lnbmVkIGxvbmcgKmtleSwgaW50IGxldmVsKTsKK3N0YXRpYyB2b2lkIG1lcmdlKHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sIGludCBsZXZlbCwKKwkJdW5zaWduZWQgbG9uZyAqbGVmdCwgaW50IGxmaWxsLAorCQl1bnNpZ25lZCBsb25nICpyaWdodCwgaW50IHJmaWxsLAorCQl1bnNpZ25lZCBsb25nICpwYXJlbnQsIGludCBscG9zKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IHJmaWxsOyBpKyspIHsKKwkJLyogTW92ZSBhbGwga2V5cyB0byB0aGUgbGVmdCAqLworCQlzZXRrZXkoZ2VvLCBsZWZ0LCBsZmlsbCArIGksIGJrZXkoZ2VvLCByaWdodCwgaSkpOworCQlzZXR2YWwoZ2VvLCBsZWZ0LCBsZmlsbCArIGksIGJ2YWwoZ2VvLCByaWdodCwgaSkpOworCX0KKwkvKiBFeGNoYW5nZSBsZWZ0IGFuZCByaWdodCBjaGlsZCBpbiBwYXJlbnQgKi8KKwlzZXR2YWwoZ2VvLCBwYXJlbnQsIGxwb3MsIHJpZ2h0KTsKKwlzZXR2YWwoZ2VvLCBwYXJlbnQsIGxwb3MgKyAxLCBsZWZ0KTsKKwkvKiBSZW1vdmUgbGVmdCAoZm9ybWVybHkgcmlnaHQpIGNoaWxkIGZyb20gcGFyZW50ICovCisJYnRyZWVfcmVtb3ZlX2xldmVsKGhlYWQsIGdlbywgYmtleShnZW8sIHBhcmVudCwgbHBvcyksIGxldmVsICsgMSk7CisJbWVtcG9vbF9mcmVlKHJpZ2h0LCBoZWFkLT5tZW1wb29sKTsKK30KKworc3RhdGljIHZvaWQgcmViYWxhbmNlKHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sCisJCXVuc2lnbmVkIGxvbmcgKmtleSwgaW50IGxldmVsLCB1bnNpZ25lZCBsb25nICpjaGlsZCwgaW50IGZpbGwpCit7CisJdW5zaWduZWQgbG9uZyAqcGFyZW50LCAqbGVmdCA9IE5VTEwsICpyaWdodCA9IE5VTEw7CisJaW50IGksIG5vX2xlZnQsIG5vX3JpZ2h0OworCisJaWYgKGZpbGwgPT0gMCkgeworCQkvKiBCZWNhdXNlIHdlIGRvbid0IHN0ZWFsIGVudHJpZXMgZnJvbSBhIG5laWdib3VyLCB0aGlzIGNhc2UKKwkJICogY2FuIGhhcHBlbi4gIFBhcmVudCBub2RlIGNvbnRhaW5zIGEgc2luZ2xlIGNoaWxkLCB0aGlzCisJCSAqIG5vZGUsIHNvIG1lcmdpbmcgd2l0aCBhIHNpYmxpbmcgbmV2ZXIgaGFwcGVucy4KKwkJICovCisJCWJ0cmVlX3JlbW92ZV9sZXZlbChoZWFkLCBnZW8sIGtleSwgbGV2ZWwgKyAxKTsKKwkJbWVtcG9vbF9mcmVlKGNoaWxkLCBoZWFkLT5tZW1wb29sKTsKKwkJcmV0dXJuOworCX0KKworCXBhcmVudCA9IGZpbmRfbGV2ZWwoaGVhZCwgZ2VvLCBrZXksIGxldmVsICsgMSk7CisJaSA9IGdldHBvcyhnZW8sIHBhcmVudCwga2V5KTsKKwlCVUdfT04oYnZhbChnZW8sIHBhcmVudCwgaSkgIT0gY2hpbGQpOworCisJaWYgKGkgPiAwKSB7CisJCWxlZnQgPSBidmFsKGdlbywgcGFyZW50LCBpIC0gMSk7CisJCW5vX2xlZnQgPSBnZXRmaWxsKGdlbywgbGVmdCwgMCk7CisJCWlmIChmaWxsICsgbm9fbGVmdCA8PSBnZW8tPm5vX3BhaXJzKSB7CisJCQltZXJnZShoZWFkLCBnZW8sIGxldmVsLAorCQkJCQlsZWZ0LCBub19sZWZ0LAorCQkJCQljaGlsZCwgZmlsbCwKKwkJCQkJcGFyZW50LCBpIC0gMSk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJaWYgKGkgKyAxIDwgZ2V0ZmlsbChnZW8sIHBhcmVudCwgaSkpIHsKKwkJcmlnaHQgPSBidmFsKGdlbywgcGFyZW50LCBpICsgMSk7CisJCW5vX3JpZ2h0ID0gZ2V0ZmlsbChnZW8sIHJpZ2h0LCAwKTsKKwkJaWYgKGZpbGwgKyBub19yaWdodCA8PSBnZW8tPm5vX3BhaXJzKSB7CisJCQltZXJnZShoZWFkLCBnZW8sIGxldmVsLAorCQkJCQljaGlsZCwgZmlsbCwKKwkJCQkJcmlnaHQsIG5vX3JpZ2h0LAorCQkJCQlwYXJlbnQsIGkpOworCQkJcmV0dXJuOworCQl9CisJfQorCS8qCisJICogV2UgY291bGQgYWxzbyB0cnkgdG8gc3RlYWwgb25lIGVudHJ5IGZyb20gdGhlIGxlZnQgb3IgcmlnaHQKKwkgKiBuZWlnaGJvci4gIEJ5IG5vdCBkb2luZyBzbyB3ZSBjaGFuZ2VkIHRoZSBpbnZhcmlhbnQgZnJvbQorCSAqICJhbGwgbm9kZXMgYXJlIGF0IGxlYXN0IGhhbGYgZnVsbCIgdG8gIm5vIHR3byBuZWlnaGJvcmluZworCSAqIG5vZGVzIGNhbiBiZSBtZXJnZWQiLiAgV2hpY2ggbWVhbnMgdGhhdCB0aGUgYXZlcmFnZSBmaWxsIG9mCisJICogYWxsIG5vZGVzIGlzIHN0aWxsIGhhbGYgb3IgYmV0dGVyLgorCSAqLworfQorCitzdGF0aWMgdm9pZCAqYnRyZWVfcmVtb3ZlX2xldmVsKHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sCisJCXVuc2lnbmVkIGxvbmcgKmtleSwgaW50IGxldmVsKQoreworCXVuc2lnbmVkIGxvbmcgKm5vZGU7CisJaW50IGksIHBvcywgZmlsbDsKKwl2b2lkICpyZXQ7CisKKwlpZiAobGV2ZWwgPiBoZWFkLT5oZWlnaHQpIHsKKwkJLyogd2UgcmVjdXJzZWQgYWxsIHRoZSB3YXkgdXAgKi8KKwkJaGVhZC0+aGVpZ2h0ID0gMDsKKwkJaGVhZC0+bm9kZSA9IE5VTEw7CisJCXJldHVybiBOVUxMOworCX0KKworCW5vZGUgPSBmaW5kX2xldmVsKGhlYWQsIGdlbywga2V5LCBsZXZlbCk7CisJcG9zID0gZ2V0cG9zKGdlbywgbm9kZSwga2V5KTsKKwlmaWxsID0gZ2V0ZmlsbChnZW8sIG5vZGUsIHBvcyk7CisJaWYgKChsZXZlbCA9PSAxKSAmJiAoa2V5Y21wKGdlbywgbm9kZSwgcG9zLCBrZXkpICE9IDApKQorCQlyZXR1cm4gTlVMTDsKKwlyZXQgPSBidmFsKGdlbywgbm9kZSwgcG9zKTsKKworCS8qIHJlbW92ZSBhbmQgc2hpZnQgKi8KKwlmb3IgKGkgPSBwb3M7IGkgPCBmaWxsIC0gMTsgaSsrKSB7CisJCXNldGtleShnZW8sIG5vZGUsIGksIGJrZXkoZ2VvLCBub2RlLCBpICsgMSkpOworCQlzZXR2YWwoZ2VvLCBub2RlLCBpLCBidmFsKGdlbywgbm9kZSwgaSArIDEpKTsKKwl9CisJY2xlYXJwYWlyKGdlbywgbm9kZSwgZmlsbCAtIDEpOworCisJaWYgKGZpbGwgLSAxIDwgZ2VvLT5ub19wYWlycyAvIDIpIHsKKwkJaWYgKGxldmVsIDwgaGVhZC0+aGVpZ2h0KQorCQkJcmViYWxhbmNlKGhlYWQsIGdlbywga2V5LCBsZXZlbCwgbm9kZSwgZmlsbCAtIDEpOworCQllbHNlIGlmIChmaWxsIC0gMSA9PSAxKQorCQkJYnRyZWVfc2hyaW5rKGhlYWQsIGdlbyk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwordm9pZCAqYnRyZWVfcmVtb3ZlKHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sCisJCXVuc2lnbmVkIGxvbmcgKmtleSkKK3sKKwlpZiAoaGVhZC0+aGVpZ2h0ID09IDApCisJCXJldHVybiBOVUxMOworCisJcmV0dXJuIGJ0cmVlX3JlbW92ZV9sZXZlbChoZWFkLCBnZW8sIGtleSwgMSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChidHJlZV9yZW1vdmUpOworCitpbnQgYnRyZWVfbWVyZ2Uoc3RydWN0IGJ0cmVlX2hlYWQgKnRhcmdldCwgc3RydWN0IGJ0cmVlX2hlYWQgKnZpY3RpbSwKKwkJc3RydWN0IGJ0cmVlX2dlbyAqZ2VvLCBnZnBfdCBnZnApCit7CisJdW5zaWduZWQgbG9uZyBrZXlbZ2VvLT5rZXlsZW5dOworCXVuc2lnbmVkIGxvbmcgZHVwW2dlby0+a2V5bGVuXTsKKwl2b2lkICp2YWw7CisJaW50IGVycjsKKworCUJVR19PTih0YXJnZXQgPT0gdmljdGltKTsKKworCWlmICghKHRhcmdldC0+bm9kZSkpIHsKKwkJLyogdGFyZ2V0IGlzIGVtcHR5LCBqdXN0IGNvcHkgZmllbGRzIG92ZXIgKi8KKwkJdGFyZ2V0LT5ub2RlID0gdmljdGltLT5ub2RlOworCQl0YXJnZXQtPmhlaWdodCA9IHZpY3RpbS0+aGVpZ2h0OworCQlfX2J0cmVlX2luaXQodmljdGltKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogVE9ETzogVGhpcyBuZWVkcyBzb21lIG9wdGltaXphdGlvbnMuICBDdXJyZW50bHkgd2UgZG8gdGhyZWUgdHJlZQorCSAqIHdhbGtzIHRvIHJlbW92ZSBhIHNpbmdsZSBvYmplY3QgZnJvbSB0aGUgdmljdGltLgorCSAqLworCWZvciAoOzspIHsKKwkJaWYgKCFidHJlZV9sYXN0KHZpY3RpbSwgZ2VvLCBrZXkpKQorCQkJYnJlYWs7CisJCXZhbCA9IGJ0cmVlX2xvb2t1cCh2aWN0aW0sIGdlbywga2V5KTsKKwkJZXJyID0gYnRyZWVfaW5zZXJ0KHRhcmdldCwgZ2VvLCBrZXksIHZhbCwgZ2ZwKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJCS8qIFdlIG11c3QgbWFrZSBhIGNvcHkgb2YgdGhlIGtleSwgYXMgdGhlIG9yaWdpbmFsIHdpbGwgZ2V0CisJCSAqIG1hbmdsZWQgaW5zaWRlIGJ0cmVlX3JlbW92ZS4gKi8KKwkJbG9uZ2NweShkdXAsIGtleSwgZ2VvLT5rZXlsZW4pOworCQlidHJlZV9yZW1vdmUodmljdGltLCBnZW8sIGR1cCk7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoYnRyZWVfbWVyZ2UpOworCitzdGF0aWMgc2l6ZV90IF9fYnRyZWVfZm9yX2VhY2goc3RydWN0IGJ0cmVlX2hlYWQgKmhlYWQsIHN0cnVjdCBidHJlZV9nZW8gKmdlbywKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nICpub2RlLCB1bnNpZ25lZCBsb25nIG9wYXF1ZSwKKwkJCSAgICAgICB2b2lkICgqZnVuYykodm9pZCAqZWxlbSwgdW5zaWduZWQgbG9uZyBvcGFxdWUsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nICprZXksIHNpemVfdCBpbmRleCwKKwkJCQkJICAgIHZvaWQgKmZ1bmMyKSwKKwkJCSAgICAgICB2b2lkICpmdW5jMiwgaW50IHJlYXAsIGludCBoZWlnaHQsIHNpemVfdCBjb3VudCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nICpjaGlsZDsKKworCWZvciAoaSA9IDA7IGkgPCBnZW8tPm5vX3BhaXJzOyBpKyspIHsKKwkJY2hpbGQgPSBidmFsKGdlbywgbm9kZSwgaSk7CisJCWlmICghY2hpbGQpCisJCQlicmVhazsKKwkJaWYgKGhlaWdodCA+IDEpCisJCQljb3VudCA9IF9fYnRyZWVfZm9yX2VhY2goaGVhZCwgZ2VvLCBjaGlsZCwgb3BhcXVlLAorCQkJCQlmdW5jLCBmdW5jMiwgcmVhcCwgaGVpZ2h0IC0gMSwgY291bnQpOworCQllbHNlCisJCQlmdW5jKGNoaWxkLCBvcGFxdWUsIGJrZXkoZ2VvLCBub2RlLCBpKSwgY291bnQrKywKKwkJCQkJZnVuYzIpOworCX0KKwlpZiAocmVhcCkKKwkJbWVtcG9vbF9mcmVlKG5vZGUsIGhlYWQtPm1lbXBvb2wpOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHZvaWQgZW1wdHkodm9pZCAqZWxlbSwgdW5zaWduZWQgbG9uZyBvcGFxdWUsIHVuc2lnbmVkIGxvbmcgKmtleSwKKwkJICBzaXplX3QgaW5kZXgsIHZvaWQgKmZ1bmMyKQoreworfQorCit2b2lkIHZpc2l0b3JsKHZvaWQgKmVsZW0sIHVuc2lnbmVkIGxvbmcgb3BhcXVlLCB1bnNpZ25lZCBsb25nICprZXksCisJICAgICAgc2l6ZV90IGluZGV4LCB2b2lkICpfX2Z1bmMpCit7CisJdmlzaXRvcmxfdCBmdW5jID0gX19mdW5jOworCisJZnVuYyhlbGVtLCBvcGFxdWUsICprZXksIGluZGV4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZpc2l0b3JsKTsKKwordm9pZCB2aXNpdG9yMzIodm9pZCAqZWxlbSwgdW5zaWduZWQgbG9uZyBvcGFxdWUsIHVuc2lnbmVkIGxvbmcgKl9fa2V5LAorCSAgICAgICBzaXplX3QgaW5kZXgsIHZvaWQgKl9fZnVuYykKK3sKKwl2aXNpdG9yMzJfdCBmdW5jID0gX19mdW5jOworCXUzMiAqa2V5ID0gKHZvaWQgKilfX2tleTsKKworCWZ1bmMoZWxlbSwgb3BhcXVlLCAqa2V5LCBpbmRleCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh2aXNpdG9yMzIpOworCit2b2lkIHZpc2l0b3I2NCh2b2lkICplbGVtLCB1bnNpZ25lZCBsb25nIG9wYXF1ZSwgdW5zaWduZWQgbG9uZyAqX19rZXksCisJICAgICAgIHNpemVfdCBpbmRleCwgdm9pZCAqX19mdW5jKQoreworCXZpc2l0b3I2NF90IGZ1bmMgPSBfX2Z1bmM7CisJdTY0ICprZXkgPSAodm9pZCAqKV9fa2V5OworCisJZnVuYyhlbGVtLCBvcGFxdWUsICprZXksIGluZGV4KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHZpc2l0b3I2NCk7CisKK3ZvaWQgdmlzaXRvcjEyOCh2b2lkICplbGVtLCB1bnNpZ25lZCBsb25nIG9wYXF1ZSwgdW5zaWduZWQgbG9uZyAqX19rZXksCisJCXNpemVfdCBpbmRleCwgdm9pZCAqX19mdW5jKQoreworCXZpc2l0b3IxMjhfdCBmdW5jID0gX19mdW5jOworCXU2NCAqa2V5ID0gKHZvaWQgKilfX2tleTsKKworCWZ1bmMoZWxlbSwgb3BhcXVlLCBrZXlbMF0sIGtleVsxXSwgaW5kZXgpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodmlzaXRvcjEyOCk7CisKK3NpemVfdCBidHJlZV92aXNpdG9yKHN0cnVjdCBidHJlZV9oZWFkICpoZWFkLCBzdHJ1Y3QgYnRyZWVfZ2VvICpnZW8sCisJCSAgICAgdW5zaWduZWQgbG9uZyBvcGFxdWUsCisJCSAgICAgdm9pZCAoKmZ1bmMpKHZvaWQgKmVsZW0sIHVuc2lnbmVkIGxvbmcgb3BhcXVlLAorCQkgICAgIAkJICB1bnNpZ25lZCBsb25nICprZXksCisJCSAgICAgCQkgIHNpemVfdCBpbmRleCwgdm9pZCAqZnVuYzIpLAorCQkgICAgIHZvaWQgKmZ1bmMyKQoreworCXNpemVfdCBjb3VudCA9IDA7CisKKwlpZiAoIWZ1bmMyKQorCQlmdW5jID0gZW1wdHk7CisJaWYgKGhlYWQtPm5vZGUpCisJCWNvdW50ID0gX19idHJlZV9mb3JfZWFjaChoZWFkLCBnZW8sIGhlYWQtPm5vZGUsIG9wYXF1ZSwgZnVuYywKKwkJCQlmdW5jMiwgMCwgaGVhZC0+aGVpZ2h0LCAwKTsKKwlyZXR1cm4gY291bnQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChidHJlZV92aXNpdG9yKTsKKworc2l6ZV90IGJ0cmVlX2dyaW1fdmlzaXRvcihzdHJ1Y3QgYnRyZWVfaGVhZCAqaGVhZCwgc3RydWN0IGJ0cmVlX2dlbyAqZ2VvLAorCQkJICB1bnNpZ25lZCBsb25nIG9wYXF1ZSwKKwkJCSAgdm9pZCAoKmZ1bmMpKHZvaWQgKmVsZW0sIHVuc2lnbmVkIGxvbmcgb3BhcXVlLAorCQkJCSAgICAgICB1bnNpZ25lZCBsb25nICprZXksCisJCQkJICAgICAgIHNpemVfdCBpbmRleCwgdm9pZCAqZnVuYzIpLAorCQkJICB2b2lkICpmdW5jMikKK3sKKwlzaXplX3QgY291bnQgPSAwOworCisJaWYgKCFmdW5jMikKKwkJZnVuYyA9IGVtcHR5OworCWlmIChoZWFkLT5ub2RlKQorCQljb3VudCA9IF9fYnRyZWVfZm9yX2VhY2goaGVhZCwgZ2VvLCBoZWFkLT5ub2RlLCBvcGFxdWUsIGZ1bmMsCisJCQkJZnVuYzIsIDEsIGhlYWQtPmhlaWdodCwgMCk7CisJX19idHJlZV9pbml0KGhlYWQpOworCXJldHVybiBjb3VudDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGJ0cmVlX2dyaW1fdmlzaXRvcik7CisKK3N0YXRpYyBpbnQgX19pbml0IGJ0cmVlX21vZHVsZV9pbml0KHZvaWQpCit7CisJYnRyZWVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoImJ0cmVlX25vZGUiLCBOT0RFU0laRSwgMCwKKwkJCVNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBidHJlZV9tb2R1bGVfZXhpdCh2b2lkKQoreworCWttZW1fY2FjaGVfZGVzdHJveShidHJlZV9jYWNoZXApOworfQorCisvKiBJZiBjb3JlIGNvZGUgc3RhcnRzIHVzaW5nIGJ0cmVlLCBpbml0aWFsaXphdGlvbiBzaG91bGQgaGFwcGVuIGV2ZW4gZWFybGllciAqLworbW9kdWxlX2luaXQoYnRyZWVfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoYnRyZWVfbW9kdWxlX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJKb2VybiBFbmdlbCA8am9lcm5AbG9nZnMub3JnPiIpOworTU9EVUxFX0FVVEhPUigiSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2xpYi9jcmMzMi5jIGIvbGliL2NyYzMyLmMKaW5kZXggMDJlM2IzMS4uMGY0NWZiZiAxMDA2NDQKLS0tIGEvbGliL2NyYzMyLmMKKysrIGIvbGliL2NyYzMyLmMKQEAgLTMwLDExICszMCwxNSBAQAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlICJjcmMzMmRlZnMuaCIKICNpZiBDUkNfTEVfQklUUyA9PSA4Ci0jZGVmaW5lIHRvbGUoeCkgX19jb25zdGFudF9jcHVfdG9fbGUzMih4KQotI2RlZmluZSB0b2JlKHgpIF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoeCkKKyMgZGVmaW5lIHRvbGUoeCkgX19jb25zdGFudF9jcHVfdG9fbGUzMih4KQogI2Vsc2UKLSNkZWZpbmUgdG9sZSh4KSAoeCkKLSNkZWZpbmUgdG9iZSh4KSAoeCkKKyMgZGVmaW5lIHRvbGUoeCkgKHgpCisjZW5kaWYKKworI2lmIENSQ19CRV9CSVRTID09IDgKKyMgZGVmaW5lIHRvYmUoeCkgX19jb25zdGFudF9jcHVfdG9fYmUzMih4KQorI2Vsc2UKKyMgZGVmaW5lIHRvYmUoeCkgKHgpCiAjZW5kaWYKICNpbmNsdWRlICJjcmMzMnRhYmxlLmgiCiAKQEAgLTUyLDIwICs1NiwxOSBAQAogIyBlbHNlCiAjICBkZWZpbmUgRE9fQ1JDKHgpIGNyYyA9IHRhYlsoKGNyYyA+PiAyNCkgXiAoeCkpICYgMjU1XSBeIChjcmMgPDwgOCkKICMgZW5kaWYKLQljb25zdCB1MzIgKmIgPSAoY29uc3QgdTMyICopYnVmOworCWNvbnN0IHUzMiAqYjsKIAlzaXplX3QgICAgcmVtX2xlbjsKIAogCS8qIEFsaWduIGl0ICovCi0JaWYgKHVubGlrZWx5KChsb25nKWIgJiAzICYmIGxlbikpIHsKLQkJdTggKnAgPSAodTggKiliOworCWlmICh1bmxpa2VseSgobG9uZylidWYgJiAzICYmIGxlbikpIHsKIAkJZG8gewotCQkJRE9fQ1JDKCpwKyspOwotCQl9IHdoaWxlICgoLS1sZW4pICYmICgobG9uZylwKSYzKTsKLQkJYiA9ICh1MzIgKilwOworCQkJRE9fQ1JDKCpidWYrKyk7CisJCX0gd2hpbGUgKCgtLWxlbikgJiYgKChsb25nKWJ1ZikmMyk7CiAJfQogCXJlbV9sZW4gPSBsZW4gJiAzOwogCS8qIGxvYWQgZGF0YSAzMiBiaXRzIHdpZGUsIHhvciBkYXRhIDMyIGJpdHMgd2lkZS4gKi8KIAlsZW4gPSBsZW4gPj4gMjsKKwliID0gKGNvbnN0IHUzMiAqKWJ1ZjsKIAlmb3IgKC0tYjsgbGVuOyAtLWxlbikgewogCQljcmMgXj0gKisrYjsgLyogdXNlIHByZSBpbmNyZW1lbnQgZm9yIHNwZWVkICovCiAJCURPX0NSQygwKTsKQEAgLTgyLDYgKzg1LDcgQEAKIAkJfSB3aGlsZSAoLS1sZW4pOwogCX0KIAlyZXR1cm4gY3JjOworI3VuZGVmIERPX0NSQwogfQogI2VuZGlmCiAvKioKQEAgLTExOSw5ICsxMjMsNiBAQAogCWNyYyA9IF9fY3B1X3RvX2xlMzIoY3JjKTsKIAljcmMgPSBjcmMzMl9ib2R5KGNyYywgcCwgbGVuLCB0YWIpOwogCXJldHVybiBfX2xlMzJfdG9fY3B1KGNyYyk7Ci0jdW5kZWYgRU5ESUFOX1NISUZUCi0jdW5kZWYgRE9fQ1JDCi0KICMgZWxpZiBDUkNfTEVfQklUUyA9PSA0CiAJd2hpbGUgKGxlbi0tKSB7CiAJCWNyYyBePSAqcCsrOwpAQCAtMTc5LDkgKzE4MCw2IEBACiAJY3JjID0gX19jcHVfdG9fYmUzMihjcmMpOwogCWNyYyA9IGNyYzMyX2JvZHkoY3JjLCBwLCBsZW4sIHRhYik7CiAJcmV0dXJuIF9fYmUzMl90b19jcHUoY3JjKTsKLSN1bmRlZiBFTkRJQU5fU0hJRlQKLSN1bmRlZiBET19DUkMKLQogIyBlbGlmIENSQ19CRV9CSVRTID09IDQKIAl3aGlsZSAobGVuLS0pIHsKIAkJY3JjIF49ICpwKysgPDwgMjQ7CmRpZmYgLS1naXQgYS9saWIva29iamVjdC5jIGIvbGliL2tvYmplY3QuYwppbmRleCBiNTEyYjc0Li44MTE1ZWIxIDEwMDY0NAotLS0gYS9saWIva29iamVjdC5jCisrKyBiL2xpYi9rb2JqZWN0LmMKQEAgLTcwMCw3ICs3MDAsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0cnVjdCBzeXNmc19vcHMga29ial9zeXNmc19vcHMgPSB7Citjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIGtvYmpfc3lzZnNfb3BzID0gewogCS5zaG93CT0ga29ial9hdHRyX3Nob3csCiAJLnN0b3JlCT0ga29ial9hdHRyX3N0b3JlLAogfTsKQEAgLTc4OSw3ICs3ODksNyBAQAogICogSWYgdGhlIGtzZXQgd2FzIG5vdCBhYmxlIHRvIGJlIGNyZWF0ZWQsIE5VTEwgd2lsbCBiZSByZXR1cm5lZC4KICAqLwogc3RhdGljIHN0cnVjdCBrc2V0ICprc2V0X2NyZWF0ZShjb25zdCBjaGFyICpuYW1lLAotCQkJCXN0cnVjdCBrc2V0X3VldmVudF9vcHMgKnVldmVudF9vcHMsCisJCQkJY29uc3Qgc3RydWN0IGtzZXRfdWV2ZW50X29wcyAqdWV2ZW50X29wcywKIAkJCQlzdHJ1Y3Qga29iamVjdCAqcGFyZW50X2tvYmopCiB7CiAJc3RydWN0IGtzZXQgKmtzZXQ7CkBAIC04MzIsNyArODMyLDcgQEAKICAqIElmIHRoZSBrc2V0IHdhcyBub3QgYWJsZSB0byBiZSBjcmVhdGVkLCBOVUxMIHdpbGwgYmUgcmV0dXJuZWQuCiAgKi8KIHN0cnVjdCBrc2V0ICprc2V0X2NyZWF0ZV9hbmRfYWRkKGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJIHN0cnVjdCBrc2V0X3VldmVudF9vcHMgKnVldmVudF9vcHMsCisJCQkJIGNvbnN0IHN0cnVjdCBrc2V0X3VldmVudF9vcHMgKnVldmVudF9vcHMsCiAJCQkJIHN0cnVjdCBrb2JqZWN0ICpwYXJlbnRfa29iaikKIHsKIAlzdHJ1Y3Qga3NldCAqa3NldDsKZGlmZiAtLWdpdCBhL2xpYi9rb2JqZWN0X3VldmVudC5jIGIvbGliL2tvYmplY3RfdWV2ZW50LmMKaW5kZXggOTIwYTNjYS4uYzlkM2EzZSAxMDA2NDQKLS0tIGEvbGliL2tvYmplY3RfdWV2ZW50LmMKKysrIGIvbGliL2tvYmplY3RfdWV2ZW50LmMKQEAgLTk1LDcgKzk1LDcgQEAKIAljb25zdCBjaGFyICpzdWJzeXN0ZW07CiAJc3RydWN0IGtvYmplY3QgKnRvcF9rb2JqOwogCXN0cnVjdCBrc2V0ICprc2V0OwotCXN0cnVjdCBrc2V0X3VldmVudF9vcHMgKnVldmVudF9vcHM7CisJY29uc3Qgc3RydWN0IGtzZXRfdWV2ZW50X29wcyAqdWV2ZW50X29wczsKIAl1NjQgc2VxOwogCWludCBpID0gMDsKIAlpbnQgcmV0dmFsID0gMDsKZGlmZiAtLWdpdCBhL2xpYi9saXN0X3NvcnQuYyBiL2xpYi9saXN0X3NvcnQuYwppbmRleCAxOWQxMWUwLi40YjVjYjc5IDEwMDY0NAotLS0gYS9saWIvbGlzdF9zb3J0LmMKKysrIGIvbGliL2xpc3Rfc29ydC5jCkBAIC00LDk5ICs0LDIxNCBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAKKyNkZWZpbmUgTUFYX0xJU1RfTEVOR1RIX0JJVFMgMjAKKworLyoKKyAqIFJldHVybnMgYSBsaXN0IG9yZ2FuaXplZCBpbiBhbiBpbnRlcm1lZGlhdGUgZm9ybWF0IHN1aXRlZAorICogdG8gY2hhaW5pbmcgb2YgbWVyZ2UoKSBjYWxsczogbnVsbC10ZXJtaW5hdGVkLCBubyByZXNlcnZlZCBvcgorICogc2VudGluZWwgaGVhZCBub2RlLCAicHJldiIgbGlua3Mgbm90IG1haW50YWluZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkICptZXJnZSh2b2lkICpwcml2LAorCQkJCWludCAoKmNtcCkodm9pZCAqcHJpdiwgc3RydWN0IGxpc3RfaGVhZCAqYSwKKwkJCQkJc3RydWN0IGxpc3RfaGVhZCAqYiksCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqYSwgc3RydWN0IGxpc3RfaGVhZCAqYikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQsICp0YWlsID0gJmhlYWQ7CisKKwl3aGlsZSAoYSAmJiBiKSB7CisJCS8qIGlmIGVxdWFsLCB0YWtlICdhJyAtLSBpbXBvcnRhbnQgZm9yIHNvcnQgc3RhYmlsaXR5ICovCisJCWlmICgoKmNtcCkocHJpdiwgYSwgYikgPD0gMCkgeworCQkJdGFpbC0+bmV4dCA9IGE7CisJCQlhID0gYS0+bmV4dDsKKwkJfSBlbHNlIHsKKwkJCXRhaWwtPm5leHQgPSBiOworCQkJYiA9IGItPm5leHQ7CisJCX0KKwkJdGFpbCA9IHRhaWwtPm5leHQ7CisJfQorCXRhaWwtPm5leHQgPSBhPzpiOworCXJldHVybiBoZWFkLm5leHQ7Cit9CisKKy8qCisgKiBDb21iaW5lIGZpbmFsIGxpc3QgbWVyZ2Ugd2l0aCByZXN0b3JhdGlvbiBvZiBzdGFuZGFyZCBkb3VibHktbGlua2VkCisgKiBsaXN0IHN0cnVjdHVyZS4gIFRoaXMgYXBwcm9hY2ggZHVwbGljYXRlcyBjb2RlIGZyb20gbWVyZ2UoKSwgYnV0CisgKiBydW5zIGZhc3RlciB0aGFuIHRoZSB0aWRpZXIgYWx0ZXJuYXRpdmVzIG9mIGVpdGhlciBhIHNlcGFyYXRlIGZpbmFsCisgKiBwcmV2LWxpbmsgcmVzdG9yYXRpb24gcGFzcywgb3IgbWFpbnRhaW5pbmcgdGhlIHByZXYgbGlua3MKKyAqIHRocm91Z2hvdXQuCisgKi8KK3N0YXRpYyB2b2lkIG1lcmdlX2FuZF9yZXN0b3JlX2JhY2tfbGlua3Modm9pZCAqcHJpdiwKKwkJCQlpbnQgKCpjbXApKHZvaWQgKnByaXYsIHN0cnVjdCBsaXN0X2hlYWQgKmEsCisJCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmIpLAorCQkJCXN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkJc3RydWN0IGxpc3RfaGVhZCAqYSwgc3RydWN0IGxpc3RfaGVhZCAqYikKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICp0YWlsID0gaGVhZDsKKworCXdoaWxlIChhICYmIGIpIHsKKwkJLyogaWYgZXF1YWwsIHRha2UgJ2EnIC0tIGltcG9ydGFudCBmb3Igc29ydCBzdGFiaWxpdHkgKi8KKwkJaWYgKCgqY21wKShwcml2LCBhLCBiKSA8PSAwKSB7CisJCQl0YWlsLT5uZXh0ID0gYTsKKwkJCWEtPnByZXYgPSB0YWlsOworCQkJYSA9IGEtPm5leHQ7CisJCX0gZWxzZSB7CisJCQl0YWlsLT5uZXh0ID0gYjsKKwkJCWItPnByZXYgPSB0YWlsOworCQkJYiA9IGItPm5leHQ7CisJCX0KKwkJdGFpbCA9IHRhaWwtPm5leHQ7CisJfQorCXRhaWwtPm5leHQgPSBhID8gOiBiOworCisJZG8geworCQkvKgorCQkgKiBJbiB3b3JzdCBjYXNlcyB0aGlzIGxvb3AgbWF5IHJ1biBtYW55IGl0ZXJhdGlvbnMuCisJCSAqIENvbnRpbnVlIGNhbGxiYWNrcyB0byB0aGUgY2xpZW50IGV2ZW4gdGhvdWdoIG5vCisJCSAqIGVsZW1lbnQgY29tcGFyaXNvbiBpcyBuZWVkZWQsIHNvIHRoZSBjbGllbnQncyBjbXAoKQorCQkgKiByb3V0aW5lIGNhbiBpbnZva2UgY29uZF9yZXNjaGVkKCkgcGVyaW9kaWNhbGx5LgorCQkgKi8KKwkJKCpjbXApKHByaXYsIHRhaWwsIHRhaWwpOworCisJCXRhaWwtPm5leHQtPnByZXYgPSB0YWlsOworCQl0YWlsID0gdGFpbC0+bmV4dDsKKwl9IHdoaWxlICh0YWlsLT5uZXh0KTsKKworCXRhaWwtPm5leHQgPSBoZWFkOworCWhlYWQtPnByZXYgPSB0YWlsOworfQorCiAvKioKLSAqIGxpc3Rfc29ydCAtIHNvcnQgYSBsaXN0LgotICogQHByaXY6IHByaXZhdGUgZGF0YSwgcGFzc2VkIHRvIEBjbXAKKyAqIGxpc3Rfc29ydCAtIHNvcnQgYSBsaXN0CisgKiBAcHJpdjogcHJpdmF0ZSBkYXRhLCBvcGFxdWUgdG8gbGlzdF9zb3J0KCksIHBhc3NlZCB0byBAY21wCiAgKiBAaGVhZDogdGhlIGxpc3QgdG8gc29ydAogICogQGNtcDogdGhlIGVsZW1lbnRzIGNvbXBhcmlzb24gZnVuY3Rpb24KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGltcGxlbWVudGVkIGJ5IE1hcmsgSiBSb2JlcnRzIDxtanJAem5leC5vcmc+LiBJdAotICogaW1wbGVtZW50cyAibWVyZ2Ugc29ydCIgd2hpY2ggaGFzIE8obmxvZyhuKSkgY29tcGxleGl0eS4gVGhlIGxpc3QgaXMgc29ydGVkCi0gKiBpbiBhc2NlbmRpbmcgb3JkZXIuCisgKiBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgIm1lcmdlIHNvcnQiLCB3aGljaCBoYXMgTyhubG9nKG4pKQorICogY29tcGxleGl0eS4KICAqCi0gKiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBAY21wIGlzIHN1cHBvc2VkIHRvIHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlIGlmIEBhIGlzCi0gKiBsZXNzIHRoYW4gQGIsIGFuZCBhIHBvc2l0aXZlIHZhbHVlIGlmIEBhIGlzIGdyZWF0ZXIgdGhhbiBAYi4gSWYgQGEgYW5kIEBiCi0gKiBhcmUgZXF1aXZhbGVudCwgdGhlbiBpdCBkb2VzIG5vdCBtYXR0ZXIgd2hhdCB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCisgKiBUaGUgY29tcGFyaXNvbiBmdW5jdGlvbiBAY21wIG11c3QgcmV0dXJuIGEgbmVnYXRpdmUgdmFsdWUgaWYgQGEKKyAqIHNob3VsZCBzb3J0IGJlZm9yZSBAYiwgYW5kIGEgcG9zaXRpdmUgdmFsdWUgaWYgQGEgc2hvdWxkIHNvcnQgYWZ0ZXIKKyAqIEBiLiBJZiBAYSBhbmQgQGIgYXJlIGVxdWl2YWxlbnQsIGFuZCB0aGVpciBvcmlnaW5hbCByZWxhdGl2ZQorICogb3JkZXJpbmcgaXMgdG8gYmUgcHJlc2VydmVkLCBAY21wIG11c3QgcmV0dXJuIDAuCiAgKi8KIHZvaWQgbGlzdF9zb3J0KHZvaWQgKnByaXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCi0JICAgICAgIGludCAoKmNtcCkodm9pZCAqcHJpdiwgc3RydWN0IGxpc3RfaGVhZCAqYSwKLQkJCSAgc3RydWN0IGxpc3RfaGVhZCAqYikpCisJCWludCAoKmNtcCkodm9pZCAqcHJpdiwgc3RydWN0IGxpc3RfaGVhZCAqYSwKKwkJCXN0cnVjdCBsaXN0X2hlYWQgKmIpKQogewotCXN0cnVjdCBsaXN0X2hlYWQgKnAsICpxLCAqZSwgKmxpc3QsICp0YWlsLCAqb2xkaGVhZDsKLQlpbnQgaW5zaXplLCBubWVyZ2VzLCBwc2l6ZSwgcXNpemUsIGk7CisJc3RydWN0IGxpc3RfaGVhZCAqcGFydFtNQVhfTElTVF9MRU5HVEhfQklUUysxXTsgLyogc29ydGVkIHBhcnRpYWwgbGlzdHMKKwkJCQkJCS0tIGxhc3Qgc2xvdCBpcyBhIHNlbnRpbmVsICovCisJaW50IGxldjsgIC8qIGluZGV4IGludG8gcGFydFtdICovCisJaW50IG1heF9sZXYgPSAwOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CiAKIAlpZiAobGlzdF9lbXB0eShoZWFkKSkKIAkJcmV0dXJuOwogCisJbWVtc2V0KHBhcnQsIDAsIHNpemVvZihwYXJ0KSk7CisKKwloZWFkLT5wcmV2LT5uZXh0ID0gTlVMTDsKIAlsaXN0ID0gaGVhZC0+bmV4dDsKLQlsaXN0X2RlbChoZWFkKTsKLQlpbnNpemUgPSAxOwotCWZvciAoOzspIHsKLQkJcCA9IG9sZGhlYWQgPSBsaXN0OwotCQlsaXN0ID0gdGFpbCA9IE5VTEw7Ci0JCW5tZXJnZXMgPSAwOwogCi0JCXdoaWxlIChwKSB7Ci0JCQlubWVyZ2VzKys7Ci0JCQlxID0gcDsKLQkJCXBzaXplID0gMDsKLQkJCWZvciAoaSA9IDA7IGkgPCBpbnNpemU7IGkrKykgewotCQkJCXBzaXplKys7Ci0JCQkJcSA9IHEtPm5leHQgPT0gb2xkaGVhZCA/IE5VTEwgOiBxLT5uZXh0OwotCQkJCWlmICghcSkKLQkJCQkJYnJlYWs7Ci0JCQl9CisJd2hpbGUgKGxpc3QpIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqY3VyID0gbGlzdDsKKwkJbGlzdCA9IGxpc3QtPm5leHQ7CisJCWN1ci0+bmV4dCA9IE5VTEw7CiAKLQkJCXFzaXplID0gaW5zaXplOwotCQkJd2hpbGUgKHBzaXplID4gMCB8fCAocXNpemUgPiAwICYmIHEpKSB7Ci0JCQkJaWYgKCFwc2l6ZSkgewotCQkJCQllID0gcTsKLQkJCQkJcSA9IHEtPm5leHQ7Ci0JCQkJCXFzaXplLS07Ci0JCQkJCWlmIChxID09IG9sZGhlYWQpCi0JCQkJCQlxID0gTlVMTDsKLQkJCQl9IGVsc2UgaWYgKCFxc2l6ZSB8fCAhcSkgewotCQkJCQllID0gcDsKLQkJCQkJcCA9IHAtPm5leHQ7Ci0JCQkJCXBzaXplLS07Ci0JCQkJCWlmIChwID09IG9sZGhlYWQpCi0JCQkJCQlwID0gTlVMTDsKLQkJCQl9IGVsc2UgaWYgKGNtcChwcml2LCBwLCBxKSA8PSAwKSB7Ci0JCQkJCWUgPSBwOwotCQkJCQlwID0gcC0+bmV4dDsKLQkJCQkJcHNpemUtLTsKLQkJCQkJaWYgKHAgPT0gb2xkaGVhZCkKLQkJCQkJCXAgPSBOVUxMOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWUgPSBxOwotCQkJCQlxID0gcS0+bmV4dDsKLQkJCQkJcXNpemUtLTsKLQkJCQkJaWYgKHEgPT0gb2xkaGVhZCkKLQkJCQkJCXEgPSBOVUxMOwotCQkJCX0KLQkJCQlpZiAodGFpbCkKLQkJCQkJdGFpbC0+bmV4dCA9IGU7Ci0JCQkJZWxzZQotCQkJCQlsaXN0ID0gZTsKLQkJCQllLT5wcmV2ID0gdGFpbDsKLQkJCQl0YWlsID0gZTsKLQkJCX0KLQkJCXAgPSBxOworCQlmb3IgKGxldiA9IDA7IHBhcnRbbGV2XTsgbGV2KyspIHsKKwkJCWN1ciA9IG1lcmdlKHByaXYsIGNtcCwgcGFydFtsZXZdLCBjdXIpOworCQkJcGFydFtsZXZdID0gTlVMTDsKIAkJfQotCi0JCXRhaWwtPm5leHQgPSBsaXN0OwotCQlsaXN0LT5wcmV2ID0gdGFpbDsKLQotCQlpZiAobm1lcmdlcyA8PSAxKQotCQkJYnJlYWs7Ci0KLQkJaW5zaXplICo9IDI7CisJCWlmIChsZXYgPiBtYXhfbGV2KSB7CisJCQlpZiAodW5saWtlbHkobGV2ID49IEFSUkFZX1NJWkUocGFydCktMSkpIHsKKwkJCQlwcmludGtfb25jZShLRVJOX0RFQlVHICJsaXN0IHBhc3NlZCB0byIKKwkJCQkJIiBsaXN0X3NvcnQoKSB0b28gbG9uZyBmb3IiCisJCQkJCSIgZWZmaWNpZW5jeVxuIik7CisJCQkJbGV2LS07CisJCQl9CisJCQltYXhfbGV2ID0gbGV2OworCQl9CisJCXBhcnRbbGV2XSA9IGN1cjsKIAl9CiAKLQloZWFkLT5uZXh0ID0gbGlzdDsKLQloZWFkLT5wcmV2ID0gbGlzdC0+cHJldjsKLQlsaXN0LT5wcmV2LT5uZXh0ID0gaGVhZDsKLQlsaXN0LT5wcmV2ID0gaGVhZDsKKwlmb3IgKGxldiA9IDA7IGxldiA8IG1heF9sZXY7IGxldisrKQorCQlpZiAocGFydFtsZXZdKQorCQkJbGlzdCA9IG1lcmdlKHByaXYsIGNtcCwgcGFydFtsZXZdLCBsaXN0KTsKKworCW1lcmdlX2FuZF9yZXN0b3JlX2JhY2tfbGlua3MocHJpdiwgY21wLCBoZWFkLCBwYXJ0W21heF9sZXZdLCBsaXN0KTsKK30KK0VYUE9SVF9TWU1CT0wobGlzdF9zb3J0KTsKKworI2lmZGVmIERFQlVHX0xJU1RfU09SVAorc3RydWN0IGRlYnVnX2VsIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxfaDsKKwlpbnQgdmFsdWU7CisJdW5zaWduZWQgc2VyaWFsOworfTsKKworc3RhdGljIGludCBjbXAodm9pZCAqcHJpdiwgc3RydWN0IGxpc3RfaGVhZCAqYSwgc3RydWN0IGxpc3RfaGVhZCAqYikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGEsIHN0cnVjdCBkZWJ1Z19lbCwgbF9oKS0+dmFsdWUKKwkgICAgIC0gY29udGFpbmVyX29mKGIsIHN0cnVjdCBkZWJ1Z19lbCwgbF9oKS0+dmFsdWU7CiB9CiAKLUVYUE9SVF9TWU1CT0wobGlzdF9zb3J0KTsKKy8qCisgKiBUaGUgcGF0dGVybiBvZiBzZXQgYml0cyBpbiB0aGUgbGlzdCBsZW5ndGggZGV0ZXJtaW5lcyB3aGljaCBjYXNlcworICogYXJlIGhpdCBpbiBsaXN0X3NvcnQoKS4KKyAqLworI2RlZmluZSBMSVNUX1NPUlRfVEVTVF9MRU5HVEggKDUxMisxMjgrMikgLyogbm90IGluY2x1ZGluZyBoZWFkICovCisKK3N0YXRpYyBpbnQgX19pbml0IGxpc3Rfc29ydF90ZXN0KHZvaWQpCit7CisJaW50IGksIHIgPSAxLCBjb3VudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0ga21hbGxvYyhzaXplb2YoKmhlYWQpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpjdXI7CisKKwlwcmludGsoS0VSTl9XQVJOSU5HICJ0ZXN0aW5nIGxpc3Rfc29ydCgpXG4iKTsKKworCWN1ciA9IGhlYWQ7CisJZm9yIChpID0gMDsgaSA8IExJU1RfU09SVF9URVNUX0xFTkdUSDsgaSsrKSB7CisJCXN0cnVjdCBkZWJ1Z19lbCAqZWwgPSBrbWFsbG9jKHNpemVvZigqZWwpLCBHRlBfS0VSTkVMKTsKKwkJQlVHX09OKCFlbCk7CisJCSAvKiBmb3JjZSBzb21lIGVxdWl2YWxlbmNpZXMgKi8KKwkJZWwtPnZhbHVlID0gKHIgPSAociAqIDcyNTg2MSkgJSA2NTk5KSAlIChMSVNUX1NPUlRfVEVTVF9MRU5HVEgvMyk7CisJCWVsLT5zZXJpYWwgPSBpOworCisJCWVsLT5sX2gucHJldiA9IGN1cjsKKwkJY3VyLT5uZXh0ID0gJmVsLT5sX2g7CisJCWN1ciA9IGN1ci0+bmV4dDsKKwl9CisJaGVhZC0+cHJldiA9IGN1cjsKKworCWxpc3Rfc29ydChOVUxMLCBoZWFkLCBjbXApOworCisJY291bnQgPSAxOworCWZvciAoY3VyID0gaGVhZC0+bmV4dDsgY3VyLT5uZXh0ICE9IGhlYWQ7IGN1ciA9IGN1ci0+bmV4dCkgeworCQlzdHJ1Y3QgZGVidWdfZWwgKmVsID0gY29udGFpbmVyX29mKGN1ciwgc3RydWN0IGRlYnVnX2VsLCBsX2gpOworCQlpbnQgY21wX3Jlc3VsdCA9IGNtcChOVUxMLCBjdXIsIGN1ci0+bmV4dCk7CisJCWlmIChjdXItPm5leHQtPnByZXYgIT0gY3VyKSB7CisJCQlwcmludGsoS0VSTl9FTUVSRyAibGlzdF9zb3J0KCkgcmV0dXJuZWQgIgorCQkJCQkJImEgY29ycnVwdGVkIGxpc3QhXG4iKTsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgaWYgKGNtcF9yZXN1bHQgPiAwKSB7CisJCQlwcmludGsoS0VSTl9FTUVSRyAibGlzdF9zb3J0KCkgZmFpbGVkIHRvIHNvcnQhXG4iKTsKKwkJCXJldHVybiAxOworCQl9IGVsc2UgaWYgKGNtcF9yZXN1bHQgPT0gMCAmJgorCQkJCWVsLT5zZXJpYWwgPj0gY29udGFpbmVyX29mKGN1ci0+bmV4dCwKKwkJCQkJc3RydWN0IGRlYnVnX2VsLCBsX2gpLT5zZXJpYWwpIHsKKwkJCXByaW50ayhLRVJOX0VNRVJHICJsaXN0X3NvcnQoKSBmYWlsZWQgdG8gcHJlc2VydmUgb3JkZXIiCisJCQkJCQkgIiBvZiBlcXVpdmFsZW50IGVsZW1lbnRzIVxuIik7CisJCQlyZXR1cm4gMTsKKwkJfQorCQlrZnJlZShjdXItPnByZXYpOworCQljb3VudCsrOworCX0KKwlrZnJlZShjdXIpOworCWlmIChjb3VudCAhPSBMSVNUX1NPUlRfVEVTVF9MRU5HVEgpIHsKKwkJcHJpbnRrKEtFUk5fRU1FUkcgImxpc3Rfc29ydCgpIHJldHVybmVkIGxpc3Qgb2YiCisJCQkJCQkiZGlmZmVyZW50IGxlbmd0aCFcbiIpOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChsaXN0X3NvcnRfdGVzdCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9zaG93X21lbS5jIGIvbGliL3Nob3dfbWVtLmMKaW5kZXggMjM4ZTcyYS4uZmRjNzdjOCAxMDA2NDQKLS0tIGEvbGliL3Nob3dfbWVtLmMKKysrIGIvbGliL3Nob3dfbWVtLmMKQEAgLTE1LDcgKzE1LDcgQEAKIAl1bnNpZ25lZCBsb25nIHRvdGFsID0gMCwgcmVzZXJ2ZWQgPSAwLCBzaGFyZWQgPSAwLAogCQlub25zaGFyZWQgPSAwLCBoaWdobWVtID0gMDsKIAotCXByaW50ayhLRVJOX0lORk8gIk1lbS1JbmZvOlxuIik7CisJcHJpbnRrKCJNZW0tSW5mbzpcbiIpOwogCXNob3dfZnJlZV9hcmVhcygpOwogCiAJZm9yX2VhY2hfb25saW5lX3BnZGF0KHBnZGF0KSB7CkBAIC00OSwxNSArNDksMTUgQEAKIAkJcGdkYXRfcmVzaXplX3VubG9jayhwZ2RhdCwgJmZsYWdzKTsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICIlbHUgcGFnZXMgUkFNXG4iLCB0b3RhbCk7CisJcHJpbnRrKCIlbHUgcGFnZXMgUkFNXG4iLCB0b3RhbCk7CiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KLQlwcmludGsoS0VSTl9JTkZPICIlbHUgcGFnZXMgSGlnaE1lbVxuIiwgaGlnaG1lbSk7CisJcHJpbnRrKCIlbHUgcGFnZXMgSGlnaE1lbVxuIiwgaGlnaG1lbSk7CiAjZW5kaWYKLQlwcmludGsoS0VSTl9JTkZPICIlbHUgcGFnZXMgcmVzZXJ2ZWRcbiIsIHJlc2VydmVkKTsKLQlwcmludGsoS0VSTl9JTkZPICIlbHUgcGFnZXMgc2hhcmVkXG4iLCBzaGFyZWQpOwotCXByaW50ayhLRVJOX0lORk8gIiVsdSBwYWdlcyBub24tc2hhcmVkXG4iLCBub25zaGFyZWQpOworCXByaW50aygiJWx1IHBhZ2VzIHJlc2VydmVkXG4iLCByZXNlcnZlZCk7CisJcHJpbnRrKCIlbHUgcGFnZXMgc2hhcmVkXG4iLCBzaGFyZWQpOworCXByaW50aygiJWx1IHBhZ2VzIG5vbi1zaGFyZWRcbiIsIG5vbnNoYXJlZCk7CiAjaWZkZWYgQ09ORklHX1FVSUNLTElTVAotCXByaW50ayhLRVJOX0lORk8gIiVsdSBwYWdlcyBpbiBwYWdldGFibGUgY2FjaGVcbiIsCisJcHJpbnRrKCIlbHUgcGFnZXMgaW4gcGFnZXRhYmxlIGNhY2hlXG4iLAogCQlxdWlja2xpc3RfdG90YWxfc2l6ZSgpKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvbGliL3N0cmluZy5jIGIvbGliL3N0cmluZy5jCmluZGV4IGExY2RjZmNjLi5mNzFiZWFkIDEwMDY0NAotLS0gYS9saWIvc3RyaW5nLmMKKysrIGIvbGliL3N0cmluZy5jCkBAIC0zNiwyNSArMzYsMjEgQEAKIAkvKiBZZXMsIFZpcmdpbmlhLCBpdCBoYWQgYmV0dGVyIGJlIHVuc2lnbmVkICovCiAJdW5zaWduZWQgY2hhciBjMSwgYzI7CiAKLQljMSA9IGMyID0gMDsKLQlpZiAobGVuKSB7Ci0JCWRvIHsKLQkJCWMxID0gKnMxOwotCQkJYzIgPSAqczI7Ci0JCQlzMSsrOwotCQkJczIrKzsKLQkJCWlmICghYzEpCi0JCQkJYnJlYWs7Ci0JCQlpZiAoIWMyKQotCQkJCWJyZWFrOwotCQkJaWYgKGMxID09IGMyKQotCQkJCWNvbnRpbnVlOwotCQkJYzEgPSB0b2xvd2VyKGMxKTsKLQkJCWMyID0gdG9sb3dlcihjMik7Ci0JCQlpZiAoYzEgIT0gYzIpCi0JCQkJYnJlYWs7Ci0JCX0gd2hpbGUgKC0tbGVuKTsKLQl9CisJaWYgKCFsZW4pCisJCXJldHVybiAwOworCisJZG8geworCQljMSA9ICpzMSsrOworCQljMiA9ICpzMisrOworCQlpZiAoIWMxIHx8ICFjMikKKwkJCWJyZWFrOworCQlpZiAoYzEgPT0gYzIpCisJCQljb250aW51ZTsKKwkJYzEgPSB0b2xvd2VyKGMxKTsKKwkJYzIgPSB0b2xvd2VyKGMyKTsKKwkJaWYgKGMxICE9IGMyKQorCQkJYnJlYWs7CisJfSB3aGlsZSAoLS1sZW4pOwogCXJldHVybiAoaW50KWMxIC0gKGludCljMjsKIH0KIEVYUE9SVF9TWU1CT0woc3RybmljbXApOwpAQCAtNjkzLDEzICs2ODksMTMgQEAKICAqLwogY2hhciAqc3RybnN0cihjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBsZW4pCiB7Ci0Jc2l6ZV90IGwxID0gbGVuLCBsMjsKKwlzaXplX3QgbDI7CiAKIAlsMiA9IHN0cmxlbihzMik7CiAJaWYgKCFsMikKIAkJcmV0dXJuIChjaGFyICopczE7Ci0Jd2hpbGUgKGwxID49IGwyKSB7Ci0JCWwxLS07CisJd2hpbGUgKGxlbiA+PSBsMikgeworCQlsZW4tLTsKIAkJaWYgKCFtZW1jbXAoczEsIHMyLCBsMikpCiAJCQlyZXR1cm4gKGNoYXIgKilzMTsKIAkJczErKzsKZGlmZiAtLWdpdCBhL2xpYi92c3ByaW50Zi5jIGIvbGliL3ZzcHJpbnRmLmMKaW5kZXggM2I4YWVlYy4uMGQ0NjFjNyAxMDA2NDQKLS0tIGEvbGliL3ZzcHJpbnRmLmMKKysrIGIvbGliL3ZzcHJpbnRmLmMKQEAgLTM4MSw4ICszODEsOCBAQAogI2RlZmluZSBQTFVTCTQJCS8qIHNob3cgcGx1cyAqLwogI2RlZmluZSBTUEFDRQk4CQkvKiBzcGFjZSBpZiBwbHVzICovCiAjZGVmaW5lIExFRlQJMTYJCS8qIGxlZnQganVzdGlmaWVkICovCi0jZGVmaW5lIFNNQUxMCTMyCQkvKiBNdXN0IGJlIDMyID09IDB4MjAgKi8KLSNkZWZpbmUgU1BFQ0lBTAk2NAkJLyogMHggKi8KKyNkZWZpbmUgU01BTEwJMzIJCS8qIHVzZSBsb3dlcmNhc2UgaW4gaGV4IChtdXN0IGJlIDMyID09IDB4MjApICovCisjZGVmaW5lIFNQRUNJQUwJNjQJCS8qIHByZWZpeCBoZXggd2l0aCAiMHgiLCBvY3RhbCB3aXRoICIwIiAqLwogCiBlbnVtIGZvcm1hdF90eXBlIHsKIAlGT1JNQVRfVFlQRV9OT05FLCAvKiBKdXN0IGEgc3RyaW5nIHBhcnQgKi8KQEAgLTQwOCwxMiArNDA4LDEyIEBACiB9OwogCiBzdHJ1Y3QgcHJpbnRmX3NwZWMgewotCWVudW0gZm9ybWF0X3R5cGUJdHlwZTsKLQlpbnQJCQlmbGFnczsJCS8qIGZsYWdzIHRvIG51bWJlcigpICovCi0JaW50CQkJZmllbGRfd2lkdGg7CS8qIHdpZHRoIG9mIG91dHB1dCBmaWVsZCAqLwotCWludAkJCWJhc2U7Ci0JaW50CQkJcHJlY2lzaW9uOwkvKiAjIG9mIGRpZ2l0cy9jaGFycyAqLwotCWludAkJCXF1YWxpZmllcjsKKwl1MTYJdHlwZTsKKwlzMTYJZmllbGRfd2lkdGg7CS8qIHdpZHRoIG9mIG91dHB1dCBmaWVsZCAqLworCXU4CWZsYWdzOwkJLyogZmxhZ3MgdG8gbnVtYmVyKCkgKi8KKwl1OAliYXNlOworCXM4CXByZWNpc2lvbjsJLyogIyBvZiBkaWdpdHMvY2hhcnMgKi8KKwl1OAlxdWFsaWZpZXI7CiB9OwogCiBzdGF0aWMgY2hhciAqbnVtYmVyKGNoYXIgKmJ1ZiwgY2hhciAqZW5kLCB1bnNpZ25lZCBsb25nIGxvbmcgbnVtLApAQCAtNTk3LDIyICs1OTcsMjkgQEAKICNpZm5kZWYgTUVNX1JTUkNfUFJJTlRLX1NJWkUKICNkZWZpbmUgTUVNX1JTUkNfUFJJTlRLX1NJWkUJMTAKICNlbmRpZgotCXN0cnVjdCBwcmludGZfc3BlYyBoZXhfc3BlYyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHByaW50Zl9zcGVjIGlvX3NwZWMgPSB7CiAJCS5iYXNlID0gMTYsCisJCS5maWVsZF93aWR0aCA9IElPX1JTUkNfUFJJTlRLX1NJWkUsCiAJCS5wcmVjaXNpb24gPSAtMSwKIAkJLmZsYWdzID0gU1BFQ0lBTCB8IFNNQUxMIHwgWkVST1BBRCwKIAl9OwotCXN0cnVjdCBwcmludGZfc3BlYyBkZWNfc3BlYyA9IHsKKwlzdGF0aWMgY29uc3Qgc3RydWN0IHByaW50Zl9zcGVjIG1lbV9zcGVjID0geworCQkuYmFzZSA9IDE2LAorCQkuZmllbGRfd2lkdGggPSBNRU1fUlNSQ19QUklOVEtfU0laRSwKKwkJLnByZWNpc2lvbiA9IC0xLAorCQkuZmxhZ3MgPSBTUEVDSUFMIHwgU01BTEwgfCBaRVJPUEFELAorCX07CisJc3RhdGljIGNvbnN0IHN0cnVjdCBwcmludGZfc3BlYyBkZWNfc3BlYyA9IHsKIAkJLmJhc2UgPSAxMCwKIAkJLnByZWNpc2lvbiA9IC0xLAogCQkuZmxhZ3MgPSAwLAogCX07Ci0Jc3RydWN0IHByaW50Zl9zcGVjIHN0cl9zcGVjID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJpbnRmX3NwZWMgc3RyX3NwZWMgPSB7CiAJCS5maWVsZF93aWR0aCA9IC0xLAogCQkucHJlY2lzaW9uID0gMTAsCiAJCS5mbGFncyA9IExFRlQsCiAJfTsKLQlzdHJ1Y3QgcHJpbnRmX3NwZWMgZmxhZ19zcGVjID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJpbnRmX3NwZWMgZmxhZ19zcGVjID0gewogCQkuYmFzZSA9IDE2LAogCQkucHJlY2lzaW9uID0gLTEsCiAJCS5mbGFncyA9IFNQRUNJQUwgfCBTTUFMTCwKQEAgLTYyOCwzNSArNjM1LDMxIEBACiAJCSAgICAgMipSU1JDX0JVRl9TSVpFICsgRkxBR19CVUZfU0laRSArIFJBV19CVUZfU0laRSldOwogCiAJY2hhciAqcCA9IHN5bSwgKnBlbmQgPSBzeW0gKyBzaXplb2Yoc3ltKTsKLQlpbnQgc2l6ZSA9IC0xLCBhZGRyID0gMDsKIAlpbnQgZGVjb2RlID0gKGZtdFswXSA9PSAnUicpID8gMSA6IDA7Ci0KLQlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKLQkJc2l6ZSA9IElPX1JTUkNfUFJJTlRLX1NJWkU7Ci0JCWFkZHIgPSAxOwotCX0gZWxzZSBpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKSB7Ci0JCXNpemUgPSBNRU1fUlNSQ19QUklOVEtfU0laRTsKLQkJYWRkciA9IDE7Ci0JfQorCWNvbnN0IHN0cnVjdCBwcmludGZfc3BlYyAqc3BlY3A7CiAKIAkqcCsrID0gJ1snOwotCWlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTykKKwlpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pIHsKIAkJcCA9IHN0cmluZyhwLCBwZW5kLCAiaW8gICIsIHN0cl9zcGVjKTsKLQllbHNlIGlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pCisJCXNwZWNwID0gJmlvX3NwZWM7CisJfSBlbHNlIGlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pIHsKIAkJcCA9IHN0cmluZyhwLCBwZW5kLCAibWVtICIsIHN0cl9zcGVjKTsKLQllbHNlIGlmIChyZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JUlEpCisJCXNwZWNwID0gJm1lbV9zcGVjOworCX0gZWxzZSBpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfSVJRKSB7CiAJCXAgPSBzdHJpbmcocCwgcGVuZCwgImlycSAiLCBzdHJfc3BlYyk7Ci0JZWxzZSBpZiAocmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfRE1BKQorCQlzcGVjcCA9ICZkZWNfc3BlYzsKKwl9IGVsc2UgaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX0RNQSkgewogCQlwID0gc3RyaW5nKHAsIHBlbmQsICJkbWEgIiwgc3RyX3NwZWMpOwotCWVsc2UgeworCQlzcGVjcCA9ICZkZWNfc3BlYzsKKwl9IGVsc2UgewogCQlwID0gc3RyaW5nKHAsIHBlbmQsICI/Pz8gIiwgc3RyX3NwZWMpOworCQlzcGVjcCA9ICZtZW1fc3BlYzsKIAkJZGVjb2RlID0gMDsKIAl9Ci0JaGV4X3NwZWMuZmllbGRfd2lkdGggPSBzaXplOwotCXAgPSBudW1iZXIocCwgcGVuZCwgcmVzLT5zdGFydCwgYWRkciA/IGhleF9zcGVjIDogZGVjX3NwZWMpOworCXAgPSBudW1iZXIocCwgcGVuZCwgcmVzLT5zdGFydCwgKnNwZWNwKTsKIAlpZiAocmVzLT5zdGFydCAhPSByZXMtPmVuZCkgewogCQkqcCsrID0gJy0nOwotCQlwID0gbnVtYmVyKHAsIHBlbmQsIHJlcy0+ZW5kLCBhZGRyID8gaGV4X3NwZWMgOiBkZWNfc3BlYyk7CisJCXAgPSBudW1iZXIocCwgcGVuZCwgcmVzLT5lbmQsICpzcGVjcCk7CiAJfQogCWlmIChkZWNvZGUpIHsKIAkJaWYgKHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTV82NCkKQEAgLTY4MSwyNCArNjg0LDU1IEBACiAJY2hhciBtYWNfYWRkcltzaXplb2YoInh4Onh4Onh4Onh4Onh4Onh4IildOwogCWNoYXIgKnAgPSBtYWNfYWRkcjsKIAlpbnQgaTsKKwljaGFyIHNlcGFyYXRvcjsKKworCWlmIChmbXRbMV0gPT0gJ0YnKSB7CQkvKiBGRERJIGNhbm9uaWNhbCBmb3JtYXQgKi8KKwkJc2VwYXJhdG9yID0gJy0nOworCX0gZWxzZSB7CisJCXNlcGFyYXRvciA9ICc6JzsKKwl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CiAJCXAgPSBwYWNrX2hleF9ieXRlKHAsIGFkZHJbaV0pOwogCQlpZiAoZm10WzBdID09ICdNJyAmJiBpICE9IDUpCi0JCQkqcCsrID0gJzonOworCQkJKnArKyA9IHNlcGFyYXRvcjsKIAl9CiAJKnAgPSAnXDAnOwogCiAJcmV0dXJuIHN0cmluZyhidWYsIGVuZCwgbWFjX2FkZHIsIHNwZWMpOwogfQogCi1zdGF0aWMgY2hhciAqaXA0X3N0cmluZyhjaGFyICpwLCBjb25zdCB1OCAqYWRkciwgYm9vbCBsZWFkaW5nX3plcm9zKQorc3RhdGljIGNoYXIgKmlwNF9zdHJpbmcoY2hhciAqcCwgY29uc3QgdTggKmFkZHIsIGNvbnN0IGNoYXIgKmZtdCkKIHsKIAlpbnQgaTsKKwlib29sIGxlYWRpbmdfemVyb3MgPSAoZm10WzBdID09ICdpJyk7CisJaW50IGluZGV4OworCWludCBzdGVwOwogCisJc3dpdGNoIChmbXRbMl0pIHsKKwljYXNlICdoJzoKKyNpZmRlZiBfX0JJR19FTkRJQU4KKwkJaW5kZXggPSAwOworCQlzdGVwID0gMTsKKyNlbHNlCisJCWluZGV4ID0gMzsKKwkJc3RlcCA9IC0xOworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgJ2wnOgorCQlpbmRleCA9IDM7CisJCXN0ZXAgPSAtMTsKKwkJYnJlYWs7CisJY2FzZSAnbic6CisJY2FzZSAnYic6CisJZGVmYXVsdDoKKwkJaW5kZXggPSAwOworCQlzdGVwID0gMTsKKwkJYnJlYWs7CisJfQogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJY2hhciB0ZW1wWzNdOwkvKiBob2xkIGVhY2ggSVAgcXVhZCBpbiByZXZlcnNlIG9yZGVyICovCi0JCWludCBkaWdpdHMgPSBwdXRfZGVjX3RydW5jKHRlbXAsIGFkZHJbaV0pIC0gdGVtcDsKKwkJaW50IGRpZ2l0cyA9IHB1dF9kZWNfdHJ1bmModGVtcCwgYWRkcltpbmRleF0pIC0gdGVtcDsKIAkJaWYgKGxlYWRpbmdfemVyb3MpIHsKIAkJCWlmIChkaWdpdHMgPCAzKQogCQkJCSpwKysgPSAnMCc7CkBAIC03MTAsNiArNzQ0LDcgQEAKIAkJCSpwKysgPSB0ZW1wW2RpZ2l0c107CiAJCWlmIChpIDwgMykKIAkJCSpwKysgPSAnLic7CisJCWluZGV4ICs9IHN0ZXA7CiAJfQogCSpwID0gJ1wwJzsKIApAQCAtNzg5LDcgKzgyNCw3IEBACiAJaWYgKHVzZUlQdjQpIHsKIAkJaWYgKG5lZWRjb2xvbikKIAkJCSpwKysgPSAnOic7Ci0JCXAgPSBpcDRfc3RyaW5nKHAsICZpbjYuczZfYWRkclsxMl0sIGZhbHNlKTsKKwkJcCA9IGlwNF9zdHJpbmcocCwgJmluNi5zNl9hZGRyWzEyXSwgIkk0Iik7CiAJfQogCSpwID0gJ1wwJzsKIApAQCAtODI5LDcgKzg2NCw3IEBACiB7CiAJY2hhciBpcDRfYWRkcltzaXplb2YoIjI1NS4yNTUuMjU1LjI1NSIpXTsKIAotCWlwNF9zdHJpbmcoaXA0X2FkZHIsIGFkZHIsIGZtdFswXSA9PSAnaScpOworCWlwNF9zdHJpbmcoaXA0X2FkZHIsIGFkZHIsIGZtdCk7CiAKIAlyZXR1cm4gc3RyaW5nKGJ1ZiwgZW5kLCBpcDRfYWRkciwgc3BlYyk7CiB9CkBAIC04OTYsMTIgKzkzMSwxNSBAQAogICogLSAnTScgRm9yIGEgNi1ieXRlIE1BQyBhZGRyZXNzLCBpdCBwcmludHMgdGhlIGFkZHJlc3MgaW4gdGhlCiAgKiAgICAgICB1c3VhbCBjb2xvbi1zZXBhcmF0ZWQgaGV4IG5vdGF0aW9uCiAgKiAtICdtJyBGb3IgYSA2LWJ5dGUgTUFDIGFkZHJlc3MsIGl0IHByaW50cyB0aGUgaGV4IGFkZHJlc3Mgd2l0aG91dCBjb2xvbnMKKyAqIC0gJ01GJyBGb3IgYSA2LWJ5dGUgTUFDIEZEREkgYWRkcmVzcywgaXQgcHJpbnRzIHRoZSBhZGRyZXNzCisgKiAgICAgICB3aXRoIGEgZGFzaC1zZXBhcmF0ZWQgaGV4IG5vdGF0aW9uCiAgKiAtICdJJyBbNDZdIGZvciBJUHY0L0lQdjYgYWRkcmVzc2VzIHByaW50ZWQgaW4gdGhlIHVzdWFsIHdheQogICogICAgICAgSVB2NCB1c2VzIGRvdC1zZXBhcmF0ZWQgZGVjaW1hbCB3aXRob3V0IGxlYWRpbmcgMCdzICgxLjIuMy40KQogICogICAgICAgSVB2NiB1c2VzIGNvbG9uIHNlcGFyYXRlZCBuZXR3b3JrLW9yZGVyIDE2IGJpdCBoZXggd2l0aCBsZWFkaW5nIDAncwogICogLSAnaScgWzQ2XSBmb3IgJ3JhdycgSVB2NC9JUHY2IGFkZHJlc3NlcwogICogICAgICAgSVB2NiBvbWl0cyB0aGUgY29sb25zICgwMTAyMDMwNC4uLjBmKQogICogICAgICAgSVB2NCB1c2VzIGRvdC1zZXBhcmF0ZWQgZGVjaW1hbCB3aXRoIGxlYWRpbmcgMCdzICgwMTAuMTIzLjA0NS4wMDYpCisgKiAtICdbSWldNFtobmJsXScgSVB2NCBhZGRyZXNzZXMgaW4gaG9zdCwgbmV0d29yaywgYmlnIG9yIGxpdHRsZSBlbmRpYW4gb3JkZXIKICAqIC0gJ0k2YycgZm9yIElQdjYgYWRkcmVzc2VzIHByaW50ZWQgYXMgc3BlY2lmaWVkIGJ5CiAgKiAgICAgICBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLTZtYW4tdGV4dC1hZGRyLXJlcHJlc2VudGF0aW9uLTAwCiAgKiAtICdVJyBGb3IgYSAxNiBieXRlIFVVSUQvR1VJRCwgaXQgcHJpbnRzIHRoZSBVVUlEL0dVSUQgaW4gdGhlIGZvcm0KQEAgLTkzOSw2ICs5NzcsNyBAQAogCQlyZXR1cm4gcmVzb3VyY2Vfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIHNwZWMsIGZtdCk7CiAJY2FzZSAnTSc6CQkJLyogQ29sb24gc2VwYXJhdGVkOiAwMDowMTowMjowMzowNDowNSAqLwogCWNhc2UgJ20nOgkJCS8qIENvbnRpZ3VvdXM6IDAwMDEwMjAzMDQwNSAqLworCQkJCQkvKiBbbU1dRiAoRkRESSwgYml0IHJldmVyc2VkKSAqLwogCQlyZXR1cm4gbWFjX2FkZHJlc3Nfc3RyaW5nKGJ1ZiwgZW5kLCBwdHIsIHNwZWMsIGZtdCk7CiAJY2FzZSAnSSc6CQkJLyogRm9ybWF0dGVkIElQIHN1cHBvcnRlZAogCQkJCQkgKiA0OgkxLjIuMy40CkBAIC0xMjk3LDcgKzEzMzYsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBGT1JNQVRfVFlQRV9OUkNIQVJTOiB7Ci0JCQlpbnQgcXVhbGlmaWVyID0gc3BlYy5xdWFsaWZpZXI7CisJCQl1OCBxdWFsaWZpZXIgPSBzcGVjLnF1YWxpZmllcjsKIAogCQkJaWYgKHF1YWxpZmllciA9PSAnbCcpIHsKIAkJCQlsb25nICppcCA9IHZhX2FyZyhhcmdzLCBsb25nICopOwpAQCAtMTU4Myw3ICsxNjIyLDcgQEAKIAogCQljYXNlIEZPUk1BVF9UWVBFX05SQ0hBUlM6IHsKIAkJCS8qIHNraXAgJW4gJ3MgYXJndW1lbnQgKi8KLQkJCWludCBxdWFsaWZpZXIgPSBzcGVjLnF1YWxpZmllcjsKKwkJCXU4IHF1YWxpZmllciA9IHNwZWMucXVhbGlmaWVyOwogCQkJdm9pZCAqc2tpcF9hcmc7CiAJCQlpZiAocXVhbGlmaWVyID09ICdsJykKIAkJCQlza2lwX2FyZyA9IHZhX2FyZyhhcmdzLCBsb25nICopOwpAQCAtMTg0OSw3ICsxODg4LDkgQEAKIAljaGFyICpuZXh0OwogCWNoYXIgZGlnaXQ7CiAJaW50IG51bSA9IDA7Ci0JaW50IHF1YWxpZmllciwgYmFzZSwgZmllbGRfd2lkdGg7CisJdTggcXVhbGlmaWVyOworCXU4IGJhc2U7CisJczE2IGZpZWxkX3dpZHRoOwogCWJvb2wgaXNfc2lnbjsKIAogCXdoaWxlICgqZm10ICYmICpzdHIpIHsKQEAgLTE5MjcsNyArMTk2OCw3IEBACiAJCXsKIAkJCWNoYXIgKnMgPSAoY2hhciAqKXZhX2FyZyhhcmdzLCBjaGFyICopOwogCQkJaWYgKGZpZWxkX3dpZHRoID09IC0xKQotCQkJCWZpZWxkX3dpZHRoID0gSU5UX01BWDsKKwkJCQlmaWVsZF93aWR0aCA9IFNIT1JUX01BWDsKIAkJCS8qIGZpcnN0LCBza2lwIGxlYWRpbmcgd2hpdGUgc3BhY2UgaW4gYnVmZmVyICovCiAJCQlzdHIgPSBza2lwX3NwYWNlcyhzdHIpOwogCmRpZmYgLS1naXQgYS9saWIvemxpYl9pbmZsYXRlL2luZmZhc3QuYyBiL2xpYi96bGliX2luZmxhdGUvaW5mZmFzdC5jCmluZGV4IDIxNTQ0N2MuLjJjMTNlY2MgMTAwNjQ0Ci0tLSBhL2xpYi96bGliX2luZmxhdGUvaW5mZmFzdC5jCisrKyBiL2xpYi96bGliX2luZmxhdGUvaW5mZmFzdC5jCkBAIC04LDIxICs4LDYgQEAKICNpbmNsdWRlICJpbmZsYXRlLmgiCiAjaW5jbHVkZSAiaW5mZmFzdC5oIgogCi0vKiBPbmx5IGRvIHRoZSB1bmFsaWduZWQgIkZhc3RlciIgdmFyaWFudCB3aGVuCi0gKiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyBpcyBzZXQKLSAqCi0gKiBPbiBwb3dlcnBjLCBpdCB3b24ndCBiZSBhcyB3ZSBkb24ndCBpbmNsdWRlIGF1dG9jb25mLmgKLSAqIGF1dG9tYXRpY2FsbHkgZm9yIHRoZSBib290IHdyYXBwZXIsIHdoaWNoIGlzIGludGVuZGVkIGFzCi0gKiB3ZSBydW4gaW4gYW4gZW52aXJvbm1lbnQgd2hlcmUgd2UgbWF5IG5vdCBiZSBhYmxlIHRvIGRlYWwKLSAqIHdpdGggKGV2ZW4gcmFyZSkgYWxpZ25tZW50IGZhdWx0cy4gSW4gYWRkaXRpb24sIHdlIGRvIG5vdAotICogZGVmaW5lIF9fS0VSTkVMX18gZm9yIGFyY2gvcG93ZXJwYy9ib290IHVubGlrZSB4ODYKLSAqLwotCi0jaWZkZWYgQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MKLSNpbmNsdWRlIDxhc20vdW5hbGlnbmVkLmg+Ci0jaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotI2VuZGlmCi0KICNpZm5kZWYgQVNNSU5GCiAKIC8qIEFsbG93IG1hY2hpbmUgZGVwZW5kZW50IG9wdGltaXphdGlvbiBmb3IgcG9zdC1pbmNyZW1lbnQgb3IgcHJlLWluY3JlbWVudC4KQEAgLTM2LDE0ICsyMSwzMSBAQAogICAgLSBQZW50aXVtIElJSSAoQW5kZXJzb24pCiAgICAtIE02ODA2MCAoTmlrbCkKICAqLwordW5pb24gdXUgeworCXVuc2lnbmVkIHNob3J0IHVzOworCXVuc2lnbmVkIGNoYXIgYlsyXTsKK307CisKKy8qIEVuZGlhbiBpbmRlcGVuZGVkIHZlcnNpb24gKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgc2hvcnQKK2dldF91bmFsaWduZWQxNihjb25zdCB1bnNpZ25lZCBzaG9ydCAqcCkKK3sKKwl1bmlvbiB1dSAgbW07CisJdW5zaWduZWQgY2hhciAqYiA9ICh1bnNpZ25lZCBjaGFyICopcDsKKworCW1tLmJbMF0gPSBiWzBdOworCW1tLmJbMV0gPSBiWzFdOworCXJldHVybiBtbS51czsKK30KKwogI2lmZGVmIFBPU1RJTkMKICMgIGRlZmluZSBPRkYgMAogIyAgZGVmaW5lIFBVUChhKSAqKGEpKysKLSMgIGRlZmluZSBVUF9VTkFMSUdORUQoYSkgZ2V0X3VuYWxpZ25lZCgoYSkrKykKKyMgIGRlZmluZSBVUF9VTkFMSUdORUQoYSkgZ2V0X3VuYWxpZ25lZDE2KChhKSsrKQogI2Vsc2UKICMgIGRlZmluZSBPRkYgMQogIyAgZGVmaW5lIFBVUChhKSAqKysoYSkKLSMgIGRlZmluZSBVUF9VTkFMSUdORUQoYSkgZ2V0X3VuYWxpZ25lZCgrKyhhKSkKKyMgIGRlZmluZSBVUF9VTkFMSUdORUQoYSkgZ2V0X3VuYWxpZ25lZDE2KCsrKGEpKQogI2VuZGlmCiAKIC8qCkBAIC0yNTYsNyArMjU4LDYgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlIHsKLSNpZmRlZiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUwogCQkgICAgdW5zaWduZWQgc2hvcnQgKnNvdXQ7CiAJCSAgICB1bnNpZ25lZCBsb25nIGxvb3BzOwogCkBAIC0yNzQsMjIgKzI3NSwyNSBAQAogCQkJc2Zyb20gPSAodW5zaWduZWQgc2hvcnQgKikoZnJvbSAtIE9GRik7CiAJCQlsb29wcyA9IGxlbiA+PiAxOwogCQkJZG8KKyNpZmRlZiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUworCQkJICAgIFBVUChzb3V0KSA9IFBVUChzZnJvbSk7CisjZWxzZQogCQkJICAgIFBVUChzb3V0KSA9IFVQX1VOQUxJR05FRChzZnJvbSk7CisjZW5kaWYKIAkJCXdoaWxlICgtLWxvb3BzKTsKIAkJCW91dCA9ICh1bnNpZ25lZCBjaGFyICopc291dCArIE9GRjsKIAkJCWZyb20gPSAodW5zaWduZWQgY2hhciAqKXNmcm9tICsgT0ZGOwogCQkgICAgfSBlbHNlIHsgLyogZGlzdCA9PSAxIG9yIGRpc3QgPT0gMiAqLwogCQkJdW5zaWduZWQgc2hvcnQgcGF0MTY7CiAKLQkJCXBhdDE2ID0gKihzb3V0LTIrMipPRkYpOwotCQkJaWYgKGRpc3QgPT0gMSkKLSNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQkJCSAgICBwYXQxNiA9IChwYXQxNiAmIDB4ZmYpIHwgKChwYXQxNiAmIDB4ZmYpIDw8IDgpOwotI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU4pCi0JCQkgICAgcGF0MTYgPSAocGF0MTYgJiAweGZmMDApIHwgKChwYXQxNiAmIDB4ZmYwMCkgPj4gOCk7Ci0jZWxzZQotI2Vycm9yIF9fQklHX0VORElBTiBub3IgX19MSVRUTEVfRU5ESUFOIGlzIGRlZmluZWQKLSNlbmRpZgorCQkJcGF0MTYgPSAqKHNvdXQtMStPRkYpOworCQkJaWYgKGRpc3QgPT0gMSkgeworCQkJCXVuaW9uIHV1IG1tOworCQkJCS8qIGNvcHkgb25lIGNoYXIgcGF0dGVybiB0byBib3RoIGJ5dGVzICovCisJCQkJbW0udXMgPSBwYXQxNjsKKwkJCQltbS5iWzBdID0gbW0uYlsxXTsKKwkJCQlwYXQxNiA9IG1tLnVzOworCQkJfQogCQkJbG9vcHMgPSBsZW4gPj4gMTsKIAkJCWRvCiAJCQkgICAgUFVQKHNvdXQpID0gcGF0MTY7CkBAIC0yOTgsMjAgKzMwMiw2IEBACiAJCSAgICB9CiAJCSAgICBpZiAobGVuICYgMSkKIAkJCVBVUChvdXQpID0gUFVQKGZyb20pOwotI2Vsc2UgLyogQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1MgKi8KLSAgICAgICAgICAgICAgICAgICAgZnJvbSA9IG91dCAtIGRpc3Q7ICAgICAgICAgIC8qIGNvcHkgZGlyZWN0IGZyb20gb3V0cHV0ICovCi0gICAgICAgICAgICAgICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAvKiBtaW5pbXVtIGxlbmd0aCBpcyB0aHJlZSAqLwotCQkJIFBVUChvdXQpID0gUFVQKGZyb20pOwotCQkJIFBVUChvdXQpID0gUFVQKGZyb20pOwotCQkJIFBVUChvdXQpID0gUFVQKGZyb20pOwotCQkJIGxlbiAtPSAzOwotICAgICAgICAgICAgICAgICAgICB9IHdoaWxlIChsZW4gPiAyKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxlbikgewotCQkJIFBVUChvdXQpID0gUFVQKGZyb20pOwotCQkJIGlmIChsZW4gPiAxKQotCQkJICAgICBQVVAob3V0KSA9IFBVUChmcm9tKTsKLSAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmIC8qICFDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUyAqLwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYgKChvcCAmIDY0KSA9PSAwKSB7ICAgICAgICAgIC8qIDJuZCBsZXZlbCBkaXN0YW5jZSBjb2RlICovCmRpZmYgLS1naXQgYS9tbS9LY29uZmlnIGIvbW0vS2NvbmZpZwppbmRleCBkMzRjMmI5Li45YzYxMTU4IDEwMDY0NAotLS0gYS9tbS9LY29uZmlnCisrKyBiL21tL0tjb25maWcKQEAgLTExNSw2ICsxMTUsMTAgQEAKIGNvbmZpZyBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUKIAlib29sCiAKK2NvbmZpZyBTUEFSU0VNRU1fQUxMT0NfTUVNX01BUF9UT0dFVEhFUgorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFNQQVJTRU1FTSAmJiBYODZfNjQKKwogY29uZmlnIFNQQVJTRU1FTV9WTUVNTUFQCiAJYm9vbCAiU3BhcnNlIE1lbW9yeSB2aXJ0dWFsIG1lbW1hcCIKIAlkZXBlbmRzIG9uIFNQQVJTRU1FTSAmJiBTUEFSU0VNRU1fVk1FTU1BUF9FTkFCTEUKZGlmZiAtLWdpdCBhL21tL2Jvb3RtZW0uYyBiL21tL2Jvb3RtZW0uYwppbmRleCA3ZDE0ODY4Li5kN2M3OTFlIDEwMDY0NAotLS0gYS9tbS9ib290bWVtLmMKKysrIGIvbW0vYm9vdG1lbS5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ttZW1sZWFrLmg+CisjaW5jbHVkZSA8bGludXgvcmFuZ2UuaD4KIAogI2luY2x1ZGUgPGFzbS9idWcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KQEAgLTMyLDYgKzMzLDcgQEAKIHVuc2lnbmVkIGxvbmcgc2F2ZWRfbWF4X3BmbjsKICNlbmRpZgogCisjaWZuZGVmIENPTkZJR19OT19CT09UTUVNCiBib290bWVtX2RhdGFfdCBib290bWVtX25vZGVfZGF0YVtNQVhfTlVNTk9ERVNdIF9faW5pdGRhdGE7CiAKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGJkYXRhX2xpc3QgX19pbml0ZGF0YSA9IExJU1RfSEVBRF9JTklUKGJkYXRhX2xpc3QpOwpAQCAtMTQyLDcgKzE0NCw3IEBACiAJbWluX2xvd19wZm4gPSBzdGFydDsKIAlyZXR1cm4gaW5pdF9ib290bWVtX2NvcmUoTk9ERV9EQVRBKDApLT5iZGF0YSwgc3RhcnQsIDAsIHBhZ2VzKTsKIH0KLQorI2VuZGlmCiAvKgogICogZnJlZV9ib290bWVtX2xhdGUgLSBmcmVlIGJvb3RtZW0gcGFnZXMgZGlyZWN0bHkgdG8gcGFnZSBhbGxvY2F0b3IKICAqIEBhZGRyOiBzdGFydGluZyBhZGRyZXNzIG9mIHRoZSByYW5nZQpAQCAtMTY3LDYgKzE2OSw2MCBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19OT19CT09UTUVNCitzdGF0aWMgdm9pZCBfX2luaXQgX19mcmVlX3BhZ2VzX21lbW9yeSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X2FsaWduZWQsIGVuZF9hbGlnbmVkOworCWludCBvcmRlciA9IGlsb2cyKEJJVFNfUEVSX0xPTkcpOworCisJc3RhcnRfYWxpZ25lZCA9IChzdGFydCArIChCSVRTX1BFUl9MT05HIC0gMSkpICYgfihCSVRTX1BFUl9MT05HIC0gMSk7CisJZW5kX2FsaWduZWQgPSBlbmQgJiB+KEJJVFNfUEVSX0xPTkcgLSAxKTsKKworCWlmIChlbmRfYWxpZ25lZCA8PSBzdGFydF9hbGlnbmVkKSB7CisjaWYgMQorCQlwcmludGsoS0VSTl9ERUJVRyAiICVseCAtICVseFxuIiwgc3RhcnQsIGVuZCk7CisjZW5kaWYKKwkJZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkrKykKKwkJCV9fZnJlZV9wYWdlc19ib290bWVtKHBmbl90b19wYWdlKGkpLCAwKTsKKworCQlyZXR1cm47CisJfQorCisjaWYgMQorCXByaW50ayhLRVJOX0RFQlVHICIgJWx4ICVseCAtICVseCAlbHhcbiIsCisJCSBzdGFydCwgc3RhcnRfYWxpZ25lZCwgZW5kX2FsaWduZWQsIGVuZCk7CisjZW5kaWYKKwlmb3IgKGkgPSBzdGFydDsgaSA8IHN0YXJ0X2FsaWduZWQ7IGkrKykKKwkJX19mcmVlX3BhZ2VzX2Jvb3RtZW0ocGZuX3RvX3BhZ2UoaSksIDApOworCisJZm9yIChpID0gc3RhcnRfYWxpZ25lZDsgaSA8IGVuZF9hbGlnbmVkOyBpICs9IEJJVFNfUEVSX0xPTkcpCisJCV9fZnJlZV9wYWdlc19ib290bWVtKHBmbl90b19wYWdlKGkpLCBvcmRlcik7CisKKwlmb3IgKGkgPSBlbmRfYWxpZ25lZDsgaSA8IGVuZDsgaSsrKQorCQlfX2ZyZWVfcGFnZXNfYm9vdG1lbShwZm5fdG9fcGFnZShpKSwgMCk7Cit9CisKK3Vuc2lnbmVkIGxvbmcgX19pbml0IGZyZWVfYWxsX21lbW9yeV9jb3JlX2Vhcmx5KGludCBub2RlaWQpCit7CisJaW50IGk7CisJdTY0IHN0YXJ0LCBlbmQ7CisJdW5zaWduZWQgbG9uZyBjb3VudCA9IDA7CisJc3RydWN0IHJhbmdlICpyYW5nZSA9IE5VTEw7CisJaW50IG5yX3JhbmdlOworCisJbnJfcmFuZ2UgPSBnZXRfZnJlZV9hbGxfbWVtb3J5X3JhbmdlKCZyYW5nZSwgbm9kZWlkKTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKSB7CisJCXN0YXJ0ID0gcmFuZ2VbaV0uc3RhcnQ7CisJCWVuZCA9IHJhbmdlW2ldLmVuZDsKKwkJY291bnQgKz0gZW5kIC0gc3RhcnQ7CisJCV9fZnJlZV9wYWdlc19tZW1vcnkoc3RhcnQsIGVuZCk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorI2Vsc2UKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBmcmVlX2FsbF9ib290bWVtX2NvcmUoYm9vdG1lbV9kYXRhX3QgKmJkYXRhKQogewogCWludCBhbGlnbmVkOwpAQCAtMjI3LDYgKzI4Myw3IEBACiAKIAlyZXR1cm4gY291bnQ7CiB9CisjZW5kaWYKIAogLyoqCiAgKiBmcmVlX2FsbF9ib290bWVtX25vZGUgLSByZWxlYXNlIGEgbm9kZSdzIGZyZWUgcGFnZXMgdG8gdGhlIGJ1ZGR5IGFsbG9jYXRvcgpAQCAtMjM3LDcgKzI5NCwxMiBAQAogdW5zaWduZWQgbG9uZyBfX2luaXQgZnJlZV9hbGxfYm9vdG1lbV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQpCiB7CiAJcmVnaXN0ZXJfcGFnZV9ib290bWVtX2luZm9fbm9kZShwZ2RhdCk7CisjaWZkZWYgQ09ORklHX05PX0JPT1RNRU0KKwkvKiBmcmVlX2FsbF9tZW1vcnlfY29yZV9lYXJseShNQVhfTlVNTk9ERVMpIHdpbGwgYmUgY2FsbGVkIGxhdGVyICovCisJcmV0dXJuIDA7CisjZWxzZQogCXJldHVybiBmcmVlX2FsbF9ib290bWVtX2NvcmUocGdkYXQtPmJkYXRhKTsKKyNlbmRpZgogfQogCiAvKioKQEAgLTI0Nyw5ICszMDksMTQgQEAKICAqLwogdW5zaWduZWQgbG9uZyBfX2luaXQgZnJlZV9hbGxfYm9vdG1lbSh2b2lkKQogeworI2lmZGVmIENPTkZJR19OT19CT09UTUVNCisJcmV0dXJuIGZyZWVfYWxsX21lbW9yeV9jb3JlX2Vhcmx5KE5PREVfREFUQSgwKS0+bm9kZV9pZCk7CisjZWxzZQogCXJldHVybiBmcmVlX2FsbF9ib290bWVtX2NvcmUoTk9ERV9EQVRBKDApLT5iZGF0YSk7CisjZW5kaWYKIH0KIAorI2lmbmRlZiBDT05GSUdfTk9fQk9PVE1FTQogc3RhdGljIHZvaWQgX19pbml0IF9fZnJlZShib290bWVtX2RhdGFfdCAqYmRhdGEsCiAJCQl1bnNpZ25lZCBsb25nIHNpZHgsIHVuc2lnbmVkIGxvbmcgZWlkeCkKIHsKQEAgLTM0NCw2ICs0MTEsNyBAQAogCX0KIAlCVUcoKTsKIH0KKyNlbmRpZgogCiAvKioKICAqIGZyZWVfYm9vdG1lbV9ub2RlIC0gbWFyayBhIHBhZ2UgcmFuZ2UgYXMgdXNhYmxlCkBAIC0zNTgsNiArNDI2LDEyIEBACiB2b2lkIF9faW5pdCBmcmVlX2Jvb3RtZW1fbm9kZShwZ19kYXRhX3QgKnBnZGF0LCB1bnNpZ25lZCBsb25nIHBoeXNhZGRyLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBzaXplKQogeworI2lmZGVmIENPTkZJR19OT19CT09UTUVNCisJZnJlZV9lYXJseShwaHlzYWRkciwgcGh5c2FkZHIgKyBzaXplKTsKKyNpZiAwCisJcHJpbnRrKEtFUk5fREVCVUcgImZyZWUgJWx4ICVseFxuIiwgcGh5c2FkZHIsIHNpemUpOworI2VuZGlmCisjZWxzZQogCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKIAogCWttZW1sZWFrX2ZyZWVfcGFydChfX3ZhKHBoeXNhZGRyKSwgc2l6ZSk7CkBAIC0zNjYsNiArNDQwLDcgQEAKIAllbmQgPSBQRk5fRE9XTihwaHlzYWRkciArIHNpemUpOwogCiAJbWFya19ib290bWVtX25vZGUocGdkYXQtPmJkYXRhLCBzdGFydCwgZW5kLCAwLCAwKTsKKyNlbmRpZgogfQogCiAvKioKQEAgLTM3OSw2ICs0NTQsMTIgQEAKICAqLwogdm9pZCBfX2luaXQgZnJlZV9ib290bWVtKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKQogeworI2lmZGVmIENPTkZJR19OT19CT09UTUVNCisJZnJlZV9lYXJseShhZGRyLCBhZGRyICsgc2l6ZSk7CisjaWYgMAorCXByaW50ayhLRVJOX0RFQlVHICJmcmVlICVseCAlbHhcbiIsIGFkZHIsIHNpemUpOworI2VuZGlmCisjZWxzZQogCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKIAogCWttZW1sZWFrX2ZyZWVfcGFydChfX3ZhKGFkZHIpLCBzaXplKTsKQEAgLTM4Nyw2ICs0NjgsNyBAQAogCWVuZCA9IFBGTl9ET1dOKGFkZHIgKyBzaXplKTsKIAogCW1hcmtfYm9vdG1lbShzdGFydCwgZW5kLCAwLCAwKTsKKyNlbmRpZgogfQogCiAvKioKQEAgLTQwMywxMiArNDg1LDE3IEBACiBpbnQgX19pbml0IHJlc2VydmVfYm9vdG1lbV9ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHVuc2lnbmVkIGxvbmcgcGh5c2FkZHIsCiAJCQkJIHVuc2lnbmVkIGxvbmcgc2l6ZSwgaW50IGZsYWdzKQogeworI2lmZGVmIENPTkZJR19OT19CT09UTUVNCisJcGFuaWMoIm5vIGJvb3RtZW0iKTsKKwlyZXR1cm4gMDsKKyNlbHNlCiAJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwogCiAJc3RhcnQgPSBQRk5fRE9XTihwaHlzYWRkcik7CiAJZW5kID0gUEZOX1VQKHBoeXNhZGRyICsgc2l6ZSk7CiAKIAlyZXR1cm4gbWFya19ib290bWVtX25vZGUocGdkYXQtPmJkYXRhLCBzdGFydCwgZW5kLCAxLCBmbGFncyk7CisjZW5kaWYKIH0KIAogLyoqCkBAIC00MjQsMTQgKzUxMSwyMCBAQAogaW50IF9faW5pdCByZXNlcnZlX2Jvb3RtZW0odW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkgICAgaW50IGZsYWdzKQogeworI2lmZGVmIENPTkZJR19OT19CT09UTUVNCisJcGFuaWMoIm5vIGJvb3RtZW0iKTsKKwlyZXR1cm4gMDsKKyNlbHNlCiAJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwogCiAJc3RhcnQgPSBQRk5fRE9XTihhZGRyKTsKIAllbmQgPSBQRk5fVVAoYWRkciArIHNpemUpOwogCiAJcmV0dXJuIG1hcmtfYm9vdG1lbShzdGFydCwgZW5kLCAxLCBmbGFncyk7CisjZW5kaWYKIH0KIAorI2lmbmRlZiBDT05GSUdfTk9fQk9PVE1FTQogc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGFsaWduX2lkeChzdHJ1Y3QgYm9vdG1lbV9kYXRhICpiZGF0YSwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGlkeCwgdW5zaWduZWQgbG9uZyBzdGVwKQogewpAQCAtNTgyLDEyICs2NzUsMzMgQEAKICNlbmRpZgogCXJldHVybiBOVUxMOwogfQorI2VuZGlmCiAKIHN0YXRpYyB2b2lkICogX19pbml0IF9fX2FsbG9jX2Jvb3RtZW1fbm9wYW5pYyh1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkJCXVuc2lnbmVkIGxvbmcgYWxpZ24sCiAJCQkJCXVuc2lnbmVkIGxvbmcgZ29hbCwKIAkJCQkJdW5zaWduZWQgbG9uZyBsaW1pdCkKIHsKKyNpZmRlZiBDT05GSUdfTk9fQk9PVE1FTQorCXZvaWQgKnB0cjsKKworCWlmIChXQVJOX09OX09OQ0Uoc2xhYl9pc19hdmFpbGFibGUoKSkpCisJCXJldHVybiBremFsbG9jKHNpemUsIEdGUF9OT1dBSVQpOworCityZXN0YXJ0OgorCisJcHRyID0gX19hbGxvY19tZW1vcnlfY29yZV9lYXJseShNQVhfTlVNTk9ERVMsIHNpemUsIGFsaWduLCBnb2FsLCBsaW1pdCk7CisKKwlpZiAocHRyKQorCQlyZXR1cm4gcHRyOworCisJaWYgKGdvYWwgIT0gMCkgeworCQlnb2FsID0gMDsKKwkJZ290byByZXN0YXJ0OworCX0KKworCXJldHVybiBOVUxMOworI2Vsc2UKIAlib290bWVtX2RhdGFfdCAqYmRhdGE7CiAJdm9pZCAqcmVnaW9uOwogCkBAIC02MTMsNiArNzI3LDcgQEAKIAl9CiAKIAlyZXR1cm4gTlVMTDsKKyNlbmRpZgogfQogCiAvKioKQEAgLTYzMSw3ICs3NDYsMTMgQEAKIHZvaWQgKiBfX2luaXQgX19hbGxvY19ib290bWVtX25vcGFuaWModW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLAogCQkJCQl1bnNpZ25lZCBsb25nIGdvYWwpCiB7Ci0JcmV0dXJuIF9fX2FsbG9jX2Jvb3RtZW1fbm9wYW5pYyhzaXplLCBhbGlnbiwgZ29hbCwgMCk7CisJdW5zaWduZWQgbG9uZyBsaW1pdCA9IDA7CisKKyNpZmRlZiBDT05GSUdfTk9fQk9PVE1FTQorCWxpbWl0ID0gLTFVTDsKKyNlbmRpZgorCisJcmV0dXJuIF9fX2FsbG9jX2Jvb3RtZW1fbm9wYW5pYyhzaXplLCBhbGlnbiwgZ29hbCwgbGltaXQpOwogfQogCiBzdGF0aWMgdm9pZCAqIF9faW5pdCBfX19hbGxvY19ib290bWVtKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwKQEAgLTY2NSw5ICs3ODYsMTYgQEAKIHZvaWQgKiBfX2luaXQgX19hbGxvY19ib290bWVtKHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBhbGlnbiwKIAkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZ29hbCkKIHsKLQlyZXR1cm4gX19fYWxsb2NfYm9vdG1lbShzaXplLCBhbGlnbiwgZ29hbCwgMCk7CisJdW5zaWduZWQgbG9uZyBsaW1pdCA9IDA7CisKKyNpZmRlZiBDT05GSUdfTk9fQk9PVE1FTQorCWxpbWl0ID0gLTFVTDsKKyNlbmRpZgorCisJcmV0dXJuIF9fX2FsbG9jX2Jvb3RtZW0oc2l6ZSwgYWxpZ24sIGdvYWwsIGxpbWl0KTsKIH0KIAorI2lmbmRlZiBDT05GSUdfTk9fQk9PVE1FTQogc3RhdGljIHZvaWQgKiBfX2luaXQgX19fYWxsb2NfYm9vdG1lbV9ub2RlKGJvb3RtZW1fZGF0YV90ICpiZGF0YSwKIAkJCQl1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sCiAJCQkJdW5zaWduZWQgbG9uZyBnb2FsLCB1bnNpZ25lZCBsb25nIGxpbWl0KQpAQCAtNjg0LDYgKzgxMiw3IEBACiAKIAlyZXR1cm4gX19fYWxsb2NfYm9vdG1lbShzaXplLCBhbGlnbiwgZ29hbCwgbGltaXQpOwogfQorI2VuZGlmCiAKIC8qKgogICogX19hbGxvY19ib290bWVtX25vZGUgLSBhbGxvY2F0ZSBib290IG1lbW9yeSBmcm9tIGEgc3BlY2lmaWMgbm9kZQpAQCAtNzA2LDcgKzgzNSw0NiBAQAogCWlmIChXQVJOX09OX09OQ0Uoc2xhYl9pc19hdmFpbGFibGUoKSkpCiAJCXJldHVybiBremFsbG9jX25vZGUoc2l6ZSwgR0ZQX05PV0FJVCwgcGdkYXQtPm5vZGVfaWQpOwogCisjaWZkZWYgQ09ORklHX05PX0JPT1RNRU0KKwlyZXR1cm4gX19hbGxvY19tZW1vcnlfY29yZV9lYXJseShwZ2RhdC0+bm9kZV9pZCwgc2l6ZSwgYWxpZ24sCisJCQkJCSBnb2FsLCAtMVVMTCk7CisjZWxzZQogCXJldHVybiBfX19hbGxvY19ib290bWVtX25vZGUocGdkYXQtPmJkYXRhLCBzaXplLCBhbGlnbiwgZ29hbCwgMCk7CisjZW5kaWYKK30KKwordm9pZCAqIF9faW5pdCBfX2FsbG9jX2Jvb3RtZW1fbm9kZV9oaWdoKHBnX2RhdGFfdCAqcGdkYXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIGFsaWduLCB1bnNpZ25lZCBsb25nIGdvYWwpCit7CisjaWZkZWYgTUFYX0RNQTMyX1BGTgorCXVuc2lnbmVkIGxvbmcgZW5kX3BmbjsKKworCWlmIChXQVJOX09OX09OQ0Uoc2xhYl9pc19hdmFpbGFibGUoKSkpCisJCXJldHVybiBremFsbG9jX25vZGUoc2l6ZSwgR0ZQX05PV0FJVCwgcGdkYXQtPm5vZGVfaWQpOworCisJLyogdXBkYXRlIGdvYWwgYWNjb3JkaW5nIC4uLk1BWF9ETUEzMl9QRk4gKi8KKwllbmRfcGZuID0gcGdkYXQtPm5vZGVfc3RhcnRfcGZuICsgcGdkYXQtPm5vZGVfc3Bhbm5lZF9wYWdlczsKKworCWlmIChlbmRfcGZuID4gTUFYX0RNQTMyX1BGTiArICgxMjggPj4gKDIwIC0gUEFHRV9TSElGVCkpICYmCisJICAgIChnb2FsID4+IFBBR0VfU0hJRlQpIDwgTUFYX0RNQTMyX1BGTikgeworCQl2b2lkICpwdHI7CisJCXVuc2lnbmVkIGxvbmcgbmV3X2dvYWw7CisKKwkJbmV3X2dvYWwgPSBNQVhfRE1BMzJfUEZOIDw8IFBBR0VfU0hJRlQ7CisjaWZkZWYgQ09ORklHX05PX0JPT1RNRU0KKwkJcHRyID0gIF9fYWxsb2NfbWVtb3J5X2NvcmVfZWFybHkocGdkYXQtPm5vZGVfaWQsIHNpemUsIGFsaWduLAorCQkJCQkJIG5ld19nb2FsLCAtMVVMTCk7CisjZWxzZQorCQlwdHIgPSBhbGxvY19ib290bWVtX2NvcmUocGdkYXQtPmJkYXRhLCBzaXplLCBhbGlnbiwKKwkJCQkJCSBuZXdfZ29hbCwgMCk7CisjZW5kaWYKKwkJaWYgKHB0cikKKwkJCXJldHVybiBwdHI7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gX19hbGxvY19ib290bWVtX25vZGUocGdkYXQsIHNpemUsIGFsaWduLCBnb2FsKTsKKwogfQogCiAjaWZkZWYgQ09ORklHX1NQQVJTRU1FTQpAQCAtNzIwLDYgKzg4OCwxNiBAQAogdm9pZCAqIF9faW5pdCBhbGxvY19ib290bWVtX3NlY3Rpb24odW5zaWduZWQgbG9uZyBzaXplLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIHNlY3Rpb25fbnIpCiB7CisjaWZkZWYgQ09ORklHX05PX0JPT1RNRU0KKwl1bnNpZ25lZCBsb25nIHBmbiwgZ29hbCwgbGltaXQ7CisKKwlwZm4gPSBzZWN0aW9uX25yX3RvX3BmbihzZWN0aW9uX25yKTsKKwlnb2FsID0gcGZuIDw8IFBBR0VfU0hJRlQ7CisJbGltaXQgPSBzZWN0aW9uX25yX3RvX3BmbihzZWN0aW9uX25yICsgMSkgPDwgUEFHRV9TSElGVDsKKworCXJldHVybiBfX2FsbG9jX21lbW9yeV9jb3JlX2Vhcmx5KGVhcmx5X3Bmbl90b19uaWQocGZuKSwgc2l6ZSwKKwkJCQkJIFNNUF9DQUNIRV9CWVRFUywgZ29hbCwgbGltaXQpOworI2Vsc2UKIAlib290bWVtX2RhdGFfdCAqYmRhdGE7CiAJdW5zaWduZWQgbG9uZyBwZm4sIGdvYWwsIGxpbWl0OwogCkBAIC03MjksNiArOTA3LDcgQEAKIAliZGF0YSA9ICZib290bWVtX25vZGVfZGF0YVtlYXJseV9wZm5fdG9fbmlkKHBmbildOwogCiAJcmV0dXJuIGFsbG9jX2Jvb3RtZW1fY29yZShiZGF0YSwgc2l6ZSwgU01QX0NBQ0hFX0JZVEVTLCBnb2FsLCBsaW1pdCk7CisjZW5kaWYKIH0KICNlbmRpZgogCkBAIC03NDAsMTEgKzkxOSwxNiBAQAogCWlmIChXQVJOX09OX09OQ0Uoc2xhYl9pc19hdmFpbGFibGUoKSkpCiAJCXJldHVybiBremFsbG9jX25vZGUoc2l6ZSwgR0ZQX05PV0FJVCwgcGdkYXQtPm5vZGVfaWQpOwogCisjaWZkZWYgQ09ORklHX05PX0JPT1RNRU0KKwlwdHIgPSAgX19hbGxvY19tZW1vcnlfY29yZV9lYXJseShwZ2RhdC0+bm9kZV9pZCwgc2l6ZSwgYWxpZ24sCisJCQkJCQkgZ29hbCwgLTFVTEwpOworI2Vsc2UKIAlwdHIgPSBhbGxvY19hcmNoX3ByZWZlcnJlZF9ib290bWVtKHBnZGF0LT5iZGF0YSwgc2l6ZSwgYWxpZ24sIGdvYWwsIDApOwogCWlmIChwdHIpCiAJCXJldHVybiBwdHI7CiAKIAlwdHIgPSBhbGxvY19ib290bWVtX2NvcmUocGdkYXQtPmJkYXRhLCBzaXplLCBhbGlnbiwgZ29hbCwgMCk7CisjZW5kaWYKIAlpZiAocHRyKQogCQlyZXR1cm4gcHRyOwogCkBAIC03OTUsNiArOTc5LDExIEBACiAJaWYgKFdBUk5fT05fT05DRShzbGFiX2lzX2F2YWlsYWJsZSgpKSkKIAkJcmV0dXJuIGt6YWxsb2Nfbm9kZShzaXplLCBHRlBfTk9XQUlULCBwZ2RhdC0+bm9kZV9pZCk7CiAKKyNpZmRlZiBDT05GSUdfTk9fQk9PVE1FTQorCXJldHVybiBfX2FsbG9jX21lbW9yeV9jb3JlX2Vhcmx5KHBnZGF0LT5ub2RlX2lkLCBzaXplLCBhbGlnbiwKKwkJCQlnb2FsLCBBUkNIX0xPV19BRERSRVNTX0xJTUlUKTsKKyNlbHNlCiAJcmV0dXJuIF9fX2FsbG9jX2Jvb3RtZW1fbm9kZShwZ2RhdC0+YmRhdGEsIHNpemUsIGFsaWduLAogCQkJCWdvYWwsIEFSQ0hfTE9XX0FERFJFU1NfTElNSVQpOworI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9tbS9mYWR2aXNlLmMgYi9tbS9mYWR2aXNlLmMKaW5kZXggZTQzMzU5Mi4uOGQ3MjNjOSAxMDA2NDQKLS0tIGEvbW0vZmFkdmlzZS5jCisrKyBiL21tL2ZhZHZpc2UuYwpAQCAtNzcsMTIgKzc3LDIwIEBACiAJc3dpdGNoIChhZHZpY2UpIHsKIAljYXNlIFBPU0lYX0ZBRFZfTk9STUFMOgogCQlmaWxlLT5mX3JhLnJhX3BhZ2VzID0gYmRpLT5yYV9wYWdlczsKKwkJc3Bpbl9sb2NrKCZmaWxlLT5mX2xvY2spOworCQlmaWxlLT5mX21vZGUgJj0gfkZNT0RFX1JBTkRPTTsKKwkJc3Bpbl91bmxvY2soJmZpbGUtPmZfbG9jayk7CiAJCWJyZWFrOwogCWNhc2UgUE9TSVhfRkFEVl9SQU5ET006Ci0JCWZpbGUtPmZfcmEucmFfcGFnZXMgPSAwOworCQlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CisJCWZpbGUtPmZfbW9kZSB8PSBGTU9ERV9SQU5ET007CisJCXNwaW5fdW5sb2NrKCZmaWxlLT5mX2xvY2spOwogCQlicmVhazsKIAljYXNlIFBPU0lYX0ZBRFZfU0VRVUVOVElBTDoKIAkJZmlsZS0+Zl9yYS5yYV9wYWdlcyA9IGJkaS0+cmFfcGFnZXMgKiAyOworCQlzcGluX2xvY2soJmZpbGUtPmZfbG9jayk7CisJCWZpbGUtPmZfbW9kZSAmPSB+Rk1PREVfUkFORE9NOworCQlzcGluX3VubG9jaygmZmlsZS0+Zl9sb2NrKTsKIAkJYnJlYWs7CiAJY2FzZSBQT1NJWF9GQURWX1dJTExORUVEOgogCQlpZiAoIW1hcHBpbmctPmFfb3BzLT5yZWFkcGFnZSkgewpkaWZmIC0tZ2l0IGEvbW0vZmFpbHNsYWIuYyBiL21tL2ZhaWxzbGFiLmMKaW5kZXggOTMzOWRlNS4uYmI0MWY5OCAxMDA2NDQKLS0tIGEvbW0vZmFpbHNsYWIuYworKysgYi9tbS9mYWlsc2xhYi5jCkBAIC0xLDE4ICsxLDIyIEBACiAjaW5jbHVkZSA8bGludXgvZmF1bHQtaW5qZWN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCiBzdGF0aWMgc3RydWN0IHsKIAlzdHJ1Y3QgZmF1bHRfYXR0ciBhdHRyOwogCXUzMiBpZ25vcmVfZ2ZwX3dhaXQ7CisJaW50IGNhY2hlX2ZpbHRlcjsKICNpZmRlZiBDT05GSUdfRkFVTFRfSU5KRUNUSU9OX0RFQlVHX0ZTCiAJc3RydWN0IGRlbnRyeSAqaWdub3JlX2dmcF93YWl0X2ZpbGU7CisJc3RydWN0IGRlbnRyeSAqY2FjaGVfZmlsdGVyX2ZpbGU7CiAjZW5kaWYKIH0gZmFpbHNsYWIgPSB7CiAJLmF0dHIgPSBGQVVMVF9BVFRSX0lOSVRJQUxJWkVSLAogCS5pZ25vcmVfZ2ZwX3dhaXQgPSAxLAorCS5jYWNoZV9maWx0ZXIgPSAwLAogfTsKIAotYm9vbCBzaG91bGRfZmFpbHNsYWIoc2l6ZV90IHNpemUsIGdmcF90IGdmcGZsYWdzKQorYm9vbCBzaG91bGRfZmFpbHNsYWIoc2l6ZV90IHNpemUsIGdmcF90IGdmcGZsYWdzLCB1bnNpZ25lZCBsb25nIGNhY2hlX2ZsYWdzKQogewogCWlmIChnZnBmbGFncyAmIF9fR0ZQX05PRkFJTCkKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMjAsNiArMjQsOSBAQAogICAgICAgICBpZiAoZmFpbHNsYWIuaWdub3JlX2dmcF93YWl0ICYmIChnZnBmbGFncyAmIF9fR0ZQX1dBSVQpKQogCQlyZXR1cm4gZmFsc2U7CiAKKwlpZiAoZmFpbHNsYWIuY2FjaGVfZmlsdGVyICYmICEoY2FjaGVfZmxhZ3MgJiBTTEFCX0ZBSUxTTEFCKSkKKwkJcmV0dXJuIGZhbHNlOworCiAJcmV0dXJuIHNob3VsZF9mYWlsKCZmYWlsc2xhYi5hdHRyLCBzaXplKTsKIH0KIApAQCAtMzAsNyArMzcsNiBAQAogX19zZXR1cCgiZmFpbHNsYWI9Iiwgc2V0dXBfZmFpbHNsYWIpOwogCiAjaWZkZWYgQ09ORklHX0ZBVUxUX0lOSkVDVElPTl9ERUJVR19GUwotCiBzdGF0aWMgaW50IF9faW5pdCBmYWlsc2xhYl9kZWJ1Z2ZzX2luaXQodm9pZCkKIHsKIAltb2RlX3QgbW9kZSA9IFNfSUZSRUcgfCBTX0lSVVNSIHwgU19JV1VTUjsKQEAgLTQ2LDggKzUyLDE0IEBACiAJCWRlYnVnZnNfY3JlYXRlX2Jvb2woImlnbm9yZS1nZnAtd2FpdCIsIG1vZGUsIGRpciwKIAkJCQkgICAgICAmZmFpbHNsYWIuaWdub3JlX2dmcF93YWl0KTsKIAotCWlmICghZmFpbHNsYWIuaWdub3JlX2dmcF93YWl0X2ZpbGUpIHsKKwlmYWlsc2xhYi5jYWNoZV9maWx0ZXJfZmlsZSA9CisJCWRlYnVnZnNfY3JlYXRlX2Jvb2woImNhY2hlLWZpbHRlciIsIG1vZGUsIGRpciwKKwkJCQkgICAgICAmZmFpbHNsYWIuY2FjaGVfZmlsdGVyKTsKKworCWlmICghZmFpbHNsYWIuaWdub3JlX2dmcF93YWl0X2ZpbGUgfHwKKwkgICAgIWZhaWxzbGFiLmNhY2hlX2ZpbHRlcl9maWxlKSB7CiAJCWVyciA9IC1FTk9NRU07CisJCWRlYnVnZnNfcmVtb3ZlKGZhaWxzbGFiLmNhY2hlX2ZpbHRlcl9maWxlKTsKIAkJZGVidWdmc19yZW1vdmUoZmFpbHNsYWIuaWdub3JlX2dmcF93YWl0X2ZpbGUpOwogCQljbGVhbnVwX2ZhdWx0X2F0dHJfZGVudHJpZXMoJmZhaWxzbGFiLmF0dHIpOwogCX0KZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuYwppbmRleCA2OThlYTgwLi4wNDViMzFjIDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKKysrIGIvbW0vZmlsZW1hcC5jCkBAIC0xMTE3LDcgKzExMTcsNyBAQAogCQkJaWYgKCFQYWdlVXB0b2RhdGUocGFnZSkpIHsKIAkJCQlpZiAocGFnZS0+bWFwcGluZyA9PSBOVUxMKSB7CiAJCQkJCS8qCi0JCQkJCSAqIGludmFsaWRhdGVfaW5vZGVfcGFnZXMgZ290IGl0CisJCQkJCSAqIGludmFsaWRhdGVfbWFwcGluZ19wYWdlcyBnb3QgaXQKIAkJCQkJICovCiAJCQkJCXVubG9ja19wYWdlKHBhZ2UpOwogCQkJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CkBAIC0xOTg2LDcgKzE5ODYsNyBAQAogaW5saW5lIGludCBnZW5lcmljX3dyaXRlX2NoZWNrcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90ICpwb3MsIHNpemVfdCAqY291bnQsIGludCBpc2JsaykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OwotCXVuc2lnbmVkIGxvbmcgbGltaXQgPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0ZTSVpFXS5ybGltX2N1cjsKKwl1bnNpZ25lZCBsb25nIGxpbWl0ID0gcmxpbWl0KFJMSU1JVF9GU0laRSk7CiAKICAgICAgICAgaWYgKHVubGlrZWx5KCpwb3MgPCAwKSkKICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXBfeGlwLmMgYi9tbS9maWxlbWFwX3hpcC5jCmluZGV4IDE4ODhiMmQuLjc4Yjk0ZjAgMTAwNjQ0Ci0tLSBhL21tL2ZpbGVtYXBfeGlwLmMKKysrIGIvbW0vZmlsZW1hcF94aXAuYwpAQCAtMTk0LDcgKzE5NCw3IEBACiAJCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkcmVzcywgcHRlX3BmbigqcHRlKSk7CiAJCQlwdGV2YWwgPSBwdGVwX2NsZWFyX2ZsdXNoX25vdGlmeSh2bWEsIGFkZHJlc3MsIHB0ZSk7CiAJCQlwYWdlX3JlbW92ZV9ybWFwKHBhZ2UpOwotCQkJZGVjX21tX2NvdW50ZXIobW0sIGZpbGVfcnNzKTsKKwkJCWRlY19tbV9jb3VudGVyKG1tLCBNTV9GSUxFUEFHRVMpOwogCQkJQlVHX09OKHB0ZV9kaXJ0eShwdGV2YWwpKTsKIAkJCXB0ZV91bm1hcF91bmxvY2socHRlLCBwdGwpOwogCQkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwpkaWZmIC0tZ2l0IGEvbW0vZnJlbWFwLmMgYi9tbS9mcmVtYXAuYwppbmRleCBiNmVjODVhLi40NmY1ZGFjIDEwMDY0NAotLS0gYS9tbS9mcmVtYXAuYworKysgYi9tbS9mcmVtYXAuYwpAQCAtNDAsNyArNDAsNyBAQAogCQkJcGFnZV9yZW1vdmVfcm1hcChwYWdlKTsKIAkJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAkJCXVwZGF0ZV9oaXdhdGVyX3JzcyhtbSk7Ci0JCQlkZWNfbW1fY291bnRlcihtbSwgZmlsZV9yc3MpOworCQkJZGVjX21tX2NvdW50ZXIobW0sIE1NX0ZJTEVQQUdFUyk7CiAJCX0KIAl9IGVsc2UgewogCQlpZiAoIXB0ZV9maWxlKHB0ZSkpCmRpZmYgLS1naXQgYS9tbS9oaWdobWVtLmMgYi9tbS9oaWdobWVtLmMKaW5kZXggOWMxZTYyNy4uYmVkOGE4YiAxMDA2NDQKLS0tIGEvbW0vaGlnaG1lbS5jCisrKyBiL21tL2hpZ2htZW0uYwpAQCAtMjIwLDcgKzIyMCw3IEBACiAgKiBAcGFnZTogJnN0cnVjdCBwYWdlIHRvIHBpbgogICoKICAqIFJldHVybnMgdGhlIHBhZ2UncyBjdXJyZW50IHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MsIG9yIE5VTEwgaWYgbm8gbWFwcGluZwotICogZXhpc3RzLiAgV2hlbiBhbmQgb25seSB3aGVuIGEgbm9uIG51bGwgYWRkcmVzcyBpcyByZXR1cm5lZCB0aGVuIGEKKyAqIGV4aXN0cy4gIElmIGFuZCBvbmx5IGlmIGEgbm9uIG51bGwgYWRkcmVzcyBpcyByZXR1cm5lZCB0aGVuIGEKICAqIG1hdGNoaW5nIGNhbGwgdG8ga3VubWFwX2hpZ2goKSBpcyBuZWNlc3NhcnkuCiAgKgogICogVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gYW55IGNvbnRleHQuCmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jCmluZGV4IDU2YTBkYTEuLmE5M2YxYjcgMTAwNjQ0Ci0tLSBhL21tL2tzbS5jCisrKyBiL21tL2tzbS5jCkBAIC0xNTYzLDEwICsxNTYzLDEyIEBACiBhZ2FpbjoKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShybWFwX2l0ZW0sIGhsaXN0LCAmc3RhYmxlX25vZGUtPmhsaXN0LCBobGlzdCkgewogCQlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gcm1hcF9pdGVtLT5hbm9uX3ZtYTsKKwkJc3RydWN0IGFub25fdm1hX2NoYWluICp2bWFjOwogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAogCQlzcGluX2xvY2soJmFub25fdm1hLT5sb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZhbm9uX3ZtYS0+aGVhZCwgYW5vbl92bWFfbm9kZSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYWMsICZhbm9uX3ZtYS0+aGVhZCwgc2FtZV9hbm9uX3ZtYSkgeworCQkJdm1hID0gdm1hYy0+dm1hOwogCQkJaWYgKHJtYXBfaXRlbS0+YWRkcmVzcyA8IHZtYS0+dm1fc3RhcnQgfHwKIAkJCSAgICBybWFwX2l0ZW0tPmFkZHJlc3MgPj0gdm1hLT52bV9lbmQpCiAJCQkJY29udGludWU7CkBAIC0xNjE0LDEwICsxNjE2LDEyIEBACiBhZ2FpbjoKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShybWFwX2l0ZW0sIGhsaXN0LCAmc3RhYmxlX25vZGUtPmhsaXN0LCBobGlzdCkgewogCQlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gcm1hcF9pdGVtLT5hbm9uX3ZtYTsKKwkJc3RydWN0IGFub25fdm1hX2NoYWluICp2bWFjOwogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAogCQlzcGluX2xvY2soJmFub25fdm1hLT5sb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZhbm9uX3ZtYS0+aGVhZCwgYW5vbl92bWFfbm9kZSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYWMsICZhbm9uX3ZtYS0+aGVhZCwgc2FtZV9hbm9uX3ZtYSkgeworCQkJdm1hID0gdm1hYy0+dm1hOwogCQkJaWYgKHJtYXBfaXRlbS0+YWRkcmVzcyA8IHZtYS0+dm1fc3RhcnQgfHwKIAkJCSAgICBybWFwX2l0ZW0tPmFkZHJlc3MgPj0gdm1hLT52bV9lbmQpCiAJCQkJY29udGludWU7CkBAIC0xNjY0LDEwICsxNjY4LDEyIEBACiBhZ2FpbjoKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShybWFwX2l0ZW0sIGhsaXN0LCAmc3RhYmxlX25vZGUtPmhsaXN0LCBobGlzdCkgewogCQlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gcm1hcF9pdGVtLT5hbm9uX3ZtYTsKKwkJc3RydWN0IGFub25fdm1hX2NoYWluICp2bWFjOwogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAogCQlzcGluX2xvY2soJmFub25fdm1hLT5sb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bWEsICZhbm9uX3ZtYS0+aGVhZCwgYW5vbl92bWFfbm9kZSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYWMsICZhbm9uX3ZtYS0+aGVhZCwgc2FtZV9hbm9uX3ZtYSkgeworCQkJdm1hID0gdm1hYy0+dm1hOwogCQkJaWYgKHJtYXBfaXRlbS0+YWRkcmVzcyA8IHZtYS0+dm1fc3RhcnQgfHwKIAkJCSAgICBybWFwX2l0ZW0tPmFkZHJlc3MgPj0gdm1hLT52bV9lbmQpCiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggOTU0MDMyYi4uNzk3M2I1MiAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCisrKyBiL21tL21lbWNvbnRyb2wuYwpAQCAtNiw2ICs2LDEwIEBACiAgKiBDb3B5cmlnaHQgMjAwNyBPcGVuVlogU1dzb2Z0IEluYwogICogQXV0aG9yOiBQYXZlbCBFbWVsaWFub3YgPHhlbXVsQG9wZW52ei5vcmc+CiAgKgorICogTWVtb3J5IHRocmVzaG9sZHMKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOb2tpYSBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBLaXJpbGwgQS4gU2h1dGVtb3YKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCkBAIC0yMSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbWVtY29udHJvbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Nncm91cC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaHVnZXRsYi5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLmg+CkBAIC0zMiw3ICszNywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3JidHJlZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZXZlbnRmZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgpAQCAtNTUsNyArNjMsMTUgQEAKICNkZWZpbmUgZG9fc3dhcF9hY2NvdW50CQkoMCkKICNlbmRpZgogCi0jZGVmaW5lIFNPRlRMSU1JVF9FVkVOVFNfVEhSRVNIICgxMDAwKQorLyoKKyAqIFBlciBtZW1jZyBldmVudCBjb3VudGVyIGlzIGluY3JlbWVudGVkIGF0IGV2ZXJ5IHBhZ2Vpbi9wYWdlb3V0LiBUaGlzIGNvdW50ZXIKKyAqIGlzIHVzZWQgZm9yIHRyaWdnZXIgc29tZSBwZXJpb2RpYyBldmVudHMuIFRoaXMgaXMgc3RyYWlnaHRmb3J3YXJkIGFuZCBiZXR0ZXIKKyAqIHRoYW4gdXNpbmcgamlmZmllcyBldGMuIHRvIGhhbmRsZSBwZXJpb2RpYyBtZW1jZyBldmVudC4KKyAqCisgKiBUaGVzZSB2YWx1ZXMgd2lsbCBiZSB1c2VkIGFzICEoKGV2ZW50KSAmICgoMSA8PCh0aHJlc2gpKSAtIDEpKQorICovCisjZGVmaW5lIFRIUkVTSE9MRFNfRVZFTlRTX1RIUkVTSCAoNykgLyogb25jZSBpbiAxMjggKi8KKyNkZWZpbmUgU09GVExJTUlUX0VWRU5UU19USFJFU0ggKDEwKSAvKiBvbmNlIGluIDEwMjQgKi8KIAogLyoKICAqIFN0YXRpc3RpY3MgZm9yIG1lbW9yeSBjZ3JvdXAuCkBAIC02OSw2MiArODUsMTYgQEAKIAlNRU1fQ0dST1VQX1NUQVRfRklMRV9NQVBQRUQsICAvKiAjIG9mIHBhZ2VzIGNoYXJnZWQgYXMgZmlsZSByc3MgKi8KIAlNRU1fQ0dST1VQX1NUQVRfUEdQR0lOX0NPVU5ULAkvKiAjIG9mIHBhZ2VzIHBhZ2VkIGluICovCiAJTUVNX0NHUk9VUF9TVEFUX1BHUEdPVVRfQ09VTlQsCS8qICMgb2YgcGFnZXMgcGFnZWQgb3V0ICovCi0JTUVNX0NHUk9VUF9TVEFUX0VWRU5UUywJLyogc3VtIG9mIHBhZ2VpbiArIHBhZ2VvdXQgZm9yIGludGVybmFsIHVzZSAqLwogCU1FTV9DR1JPVVBfU1RBVF9TV0FQT1VULCAvKiAjIG9mIHBhZ2VzLCBzd2FwcGVkIG91dCAqLworCU1FTV9DR1JPVVBfRVZFTlRTLAkvKiBpbmNyZW1lbnRlZCBhdCBldmVyeSAgcGFnZWluL3BhZ2VvdXQgKi8KIAogCU1FTV9DR1JPVVBfU1RBVF9OU1RBVFMsCiB9OwogCiBzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0X2NwdSB7CiAJczY0IGNvdW50W01FTV9DR1JPVVBfU1RBVF9OU1RBVFNdOwotfSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwotCi1zdHJ1Y3QgbWVtX2Nncm91cF9zdGF0IHsKLQlzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0X2NwdSBjcHVzdGF0WzBdOwogfTsKIAotc3RhdGljIGlubGluZSB2b2lkCi1fX21lbV9jZ3JvdXBfc3RhdF9yZXNldF9zYWZlKHN0cnVjdCBtZW1fY2dyb3VwX3N0YXRfY3B1ICpzdGF0LAotCQkJCWVudW0gbWVtX2Nncm91cF9zdGF0X2luZGV4IGlkeCkKLXsKLQlzdGF0LT5jb3VudFtpZHhdID0gMDsKLX0KLQotc3RhdGljIGlubGluZSBzNjQKLV9fbWVtX2Nncm91cF9zdGF0X3JlYWRfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXBfc3RhdF9jcHUgKnN0YXQsCi0JCQkJZW51bSBtZW1fY2dyb3VwX3N0YXRfaW5kZXggaWR4KQotewotCXJldHVybiBzdGF0LT5jb3VudFtpZHhdOwotfQotCi0vKgotICogRm9yIGFjY291bnRpbmcgdW5kZXIgaXJxIGRpc2FibGUsIG5vIG5lZWQgZm9yIGluY3JlbWVudCBwcmVlbXB0IGNvdW50LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19tZW1fY2dyb3VwX3N0YXRfYWRkX3NhZmUoc3RydWN0IG1lbV9jZ3JvdXBfc3RhdF9jcHUgKnN0YXQsCi0JCWVudW0gbWVtX2Nncm91cF9zdGF0X2luZGV4IGlkeCwgaW50IHZhbCkKLXsKLQlzdGF0LT5jb3VudFtpZHhdICs9IHZhbDsKLX0KLQotc3RhdGljIHM2NCBtZW1fY2dyb3VwX3JlYWRfc3RhdChzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0ICpzdGF0LAotCQllbnVtIG1lbV9jZ3JvdXBfc3RhdF9pbmRleCBpZHgpCi17Ci0JaW50IGNwdTsKLQlzNjQgcmV0ID0gMDsKLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KQotCQlyZXQgKz0gc3RhdC0+Y3B1c3RhdFtjcHVdLmNvdW50W2lkeF07Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHM2NCBtZW1fY2dyb3VwX2xvY2FsX3VzYWdlKHN0cnVjdCBtZW1fY2dyb3VwX3N0YXQgKnN0YXQpCi17Ci0JczY0IHJldDsKLQotCXJldCA9IG1lbV9jZ3JvdXBfcmVhZF9zdGF0KHN0YXQsIE1FTV9DR1JPVVBfU1RBVF9DQUNIRSk7Ci0JcmV0ICs9IG1lbV9jZ3JvdXBfcmVhZF9zdGF0KHN0YXQsIE1FTV9DR1JPVVBfU1RBVF9SU1MpOwotCXJldHVybiByZXQ7Ci19Ci0KIC8qCiAgKiBwZXItem9uZSBpbmZvcm1hdGlvbiBpbiBtZW1vcnkgY29udHJvbGxlci4KICAqLwpAQCAtMTc0LDYgKzE0NCwyMiBAQAogCiBzdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXBfdHJlZSBzb2Z0X2xpbWl0X3RyZWUgX19yZWFkX21vc3RseTsKIAorc3RydWN0IG1lbV9jZ3JvdXBfdGhyZXNob2xkIHsKKwlzdHJ1Y3QgZXZlbnRmZF9jdHggKmV2ZW50ZmQ7CisJdTY0IHRocmVzaG9sZDsKK307CisKK3N0cnVjdCBtZW1fY2dyb3VwX3RocmVzaG9sZF9hcnkgeworCS8qIEFuIGFycmF5IGluZGV4IHBvaW50cyB0byB0aHJlc2hvbGQganVzdCBiZWxvdyB1c2FnZS4gKi8KKwlhdG9taWNfdCBjdXJyZW50X3RocmVzaG9sZDsKKwkvKiBTaXplIG9mIGVudHJpZXNbXSAqLworCXVuc2lnbmVkIGludCBzaXplOworCS8qIEFycmF5IG9mIHRocmVzaG9sZHMgKi8KKwlzdHJ1Y3QgbWVtX2Nncm91cF90aHJlc2hvbGQgZW50cmllc1swXTsKK307CisKK3N0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfdGhyZXNob2xkKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pOworCiAvKgogICogVGhlIG1lbW9yeSBjb250cm9sbGVyIGRhdGEgc3RydWN0dXJlLiBUaGUgbWVtb3J5IGNvbnRyb2xsZXIgY29udHJvbHMgYm90aAogICogcGFnZSBjYWNoZSBhbmQgUlNTIHBlciBjZ3JvdXAuIFdlIHdvdWxkIGV2ZW50dWFsbHkgbGlrZSB0byBwcm92aWRlCkBAIC0yMTcsNyArMjAzLDcgQEAKIAkgKiBTaG91bGQgdGhlIGFjY291bnRpbmcgYW5kIGNvbnRyb2wgYmUgaGllcmFyY2hpY2FsLCBwZXIgc3VidHJlZT8KIAkgKi8KIAlib29sIHVzZV9oaWVyYXJjaHk7Ci0JdW5zaWduZWQgbG9uZwlsYXN0X29vbV9qaWZmaWVzOworCWF0b21pY190CW9vbV9sb2NrOwogCWF0b21pY190CXJlZmNudDsKIAogCXVuc2lnbmVkIGludAlzd2FwcGluZXNzOwpAQCAtMjI1LDEwICsyMTEsNDggQEAKIAkvKiBzZXQgd2hlbiByZXMubGltaXQgPT0gbWVtc3cubGltaXQgKi8KIAlib29sCQltZW1zd19pc19taW5pbXVtOwogCisJLyogcHJvdGVjdCBhcnJheXMgb2YgdGhyZXNob2xkcyAqLworCXN0cnVjdCBtdXRleCB0aHJlc2hvbGRzX2xvY2s7CisKKwkvKiB0aHJlc2hvbGRzIGZvciBtZW1vcnkgdXNhZ2UuIFJDVS1wcm90ZWN0ZWQgKi8KKwlzdHJ1Y3QgbWVtX2Nncm91cF90aHJlc2hvbGRfYXJ5ICp0aHJlc2hvbGRzOworCisJLyogdGhyZXNob2xkcyBmb3IgbWVtK3N3YXAgdXNhZ2UuIFJDVS1wcm90ZWN0ZWQgKi8KKwlzdHJ1Y3QgbWVtX2Nncm91cF90aHJlc2hvbGRfYXJ5ICptZW1zd190aHJlc2hvbGRzOworCiAJLyoKLQkgKiBzdGF0aXN0aWNzLiBUaGlzIG11c3QgYmUgcGxhY2VkIGF0IHRoZSBlbmQgb2YgbWVtY2cuCisJICogU2hvdWxkIHdlIG1vdmUgY2hhcmdlcyBvZiBhIHRhc2sgd2hlbiBhIHRhc2sgaXMgbW92ZWQgaW50byB0aGlzCisJICogbWVtX2Nncm91cCA/IEFuZCB3aGF0IHR5cGUgb2YgY2hhcmdlcyBzaG91bGQgd2UgbW92ZSA/CiAJICovCi0Jc3RydWN0IG1lbV9jZ3JvdXBfc3RhdCBzdGF0OworCXVuc2lnbmVkIGxvbmcgCW1vdmVfY2hhcmdlX2F0X2ltbWlncmF0ZTsKKworCS8qCisJICogcGVyY3B1IGNvdW50ZXIuCisJICovCisJc3RydWN0IG1lbV9jZ3JvdXBfc3RhdF9jcHUgKnN0YXQ7Cit9OworCisvKiBTdHVmZnMgZm9yIG1vdmUgY2hhcmdlcyBhdCB0YXNrIG1pZ3JhdGlvbi4gKi8KKy8qCisgKiBUeXBlcyBvZiBjaGFyZ2VzIHRvIGJlIG1vdmVkLiAibW92ZV9jaGFyZ2VfYXRfaW1taXRncmF0ZSIgaXMgdHJlYXRlZCBhcyBhCisgKiBsZWZ0LXNoaWZ0ZWQgYml0bWFwIG9mIHRoZXNlIHR5cGVzLgorICovCitlbnVtIG1vdmVfdHlwZSB7CisJTU9WRV9DSEFSR0VfVFlQRV9BTk9OLAkvKiBwcml2YXRlIGFub255bW91cyBwYWdlIGFuZCBzd2FwIG9mIGl0ICovCisJTlJfTU9WRV9UWVBFLAorfTsKKworLyogIm1jIiBhbmQgaXRzIG1lbWJlcnMgYXJlIHByb3RlY3RlZCBieSBjZ3JvdXBfbXV0ZXggKi8KK3N0YXRpYyBzdHJ1Y3QgbW92ZV9jaGFyZ2Vfc3RydWN0IHsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqZnJvbTsKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqdG87CisJdW5zaWduZWQgbG9uZyBwcmVjaGFyZ2U7CisJdW5zaWduZWQgbG9uZyBtb3ZlZF9jaGFyZ2U7CisJdW5zaWduZWQgbG9uZyBtb3ZlZF9zd2FwOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqbW92aW5nX3Rhc2s7CS8qIGEgdGFzayBtb3ZpbmcgY2hhcmdlcyAqLworCXdhaXRfcXVldWVfaGVhZF90IHdhaXRxOwkJLyogYSB3YWl0cSBmb3Igb3RoZXIgY29udGV4dCAqLworfSBtYyA9IHsKKwkud2FpdHEgPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUihtYy53YWl0cSksCiB9OwogCiAvKgpAQCAtMzcxLDIzICszOTUsNiBAQAogCXNwaW5fdW5sb2NrKCZtY3R6LT5sb2NrKTsKIH0KIAotc3RhdGljIGJvb2wgbWVtX2Nncm91cF9zb2Z0X2xpbWl0X2NoZWNrKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCi17Ci0JYm9vbCByZXQgPSBmYWxzZTsKLQlpbnQgY3B1OwotCXM2NCB2YWw7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfc3RhdF9jcHUgKmNwdXN0YXQ7Ci0KLQljcHUgPSBnZXRfY3B1KCk7Ci0JY3B1c3RhdCA9ICZtZW0tPnN0YXQuY3B1c3RhdFtjcHVdOwotCXZhbCA9IF9fbWVtX2Nncm91cF9zdGF0X3JlYWRfbG9jYWwoY3B1c3RhdCwgTUVNX0NHUk9VUF9TVEFUX0VWRU5UUyk7Ci0JaWYgKHVubGlrZWx5KHZhbCA+IFNPRlRMSU1JVF9FVkVOVFNfVEhSRVNIKSkgewotCQlfX21lbV9jZ3JvdXBfc3RhdF9yZXNldF9zYWZlKGNwdXN0YXQsIE1FTV9DR1JPVVBfU1RBVF9FVkVOVFMpOwotCQlyZXQgPSB0cnVlOwotCX0KLQlwdXRfY3B1KCk7Ci0JcmV0dXJuIHJldDsKLX0KIAogc3RhdGljIHZvaWQgbWVtX2Nncm91cF91cGRhdGVfdHJlZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKQEAgLTQ4MSwxNyArNDg4LDMxIEBACiAJcmV0dXJuIG16OwogfQogCitzdGF0aWMgczY0IG1lbV9jZ3JvdXBfcmVhZF9zdGF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sCisJCWVudW0gbWVtX2Nncm91cF9zdGF0X2luZGV4IGlkeCkKK3sKKwlpbnQgY3B1OworCXM2NCB2YWwgPSAwOworCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJdmFsICs9IHBlcl9jcHUobWVtLT5zdGF0LT5jb3VudFtpZHhdLCBjcHUpOworCXJldHVybiB2YWw7Cit9CisKK3N0YXRpYyBzNjQgbWVtX2Nncm91cF9sb2NhbF91c2FnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQoreworCXM2NCByZXQ7CisKKwlyZXQgPSBtZW1fY2dyb3VwX3JlYWRfc3RhdChtZW0sIE1FTV9DR1JPVVBfU1RBVF9SU1MpOworCXJldCArPSBtZW1fY2dyb3VwX3JlYWRfc3RhdChtZW0sIE1FTV9DR1JPVVBfU1RBVF9DQUNIRSk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHZvaWQgbWVtX2Nncm91cF9zd2FwX3N0YXRpc3RpY3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKIAkJCQkJIGJvb2wgY2hhcmdlKQogewogCWludCB2YWwgPSAoY2hhcmdlKSA/IDEgOiAtMTsKLQlzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0ICpzdGF0ID0gJm1lbS0+c3RhdDsKLQlzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0X2NwdSAqY3B1c3RhdDsKLQlpbnQgY3B1ID0gZ2V0X2NwdSgpOwotCi0JY3B1c3RhdCA9ICZzdGF0LT5jcHVzdGF0W2NwdV07Ci0JX19tZW1fY2dyb3VwX3N0YXRfYWRkX3NhZmUoY3B1c3RhdCwgTUVNX0NHUk9VUF9TVEFUX1NXQVBPVVQsIHZhbCk7Ci0JcHV0X2NwdSgpOworCXRoaXNfY3B1X2FkZChtZW0tPnN0YXQtPmNvdW50W01FTV9DR1JPVVBfU1RBVF9TV0FQT1VUXSwgdmFsKTsKIH0KIAogc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jaGFyZ2Vfc3RhdGlzdGljcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLApAQCAtNDk5LDI0ICs1MjAsMjEgQEAKIAkJCQkJIGJvb2wgY2hhcmdlKQogewogCWludCB2YWwgPSAoY2hhcmdlKSA/IDEgOiAtMTsKLQlzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0ICpzdGF0ID0gJm1lbS0+c3RhdDsKLQlzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0X2NwdSAqY3B1c3RhdDsKLQlpbnQgY3B1ID0gZ2V0X2NwdSgpOwogCi0JY3B1c3RhdCA9ICZzdGF0LT5jcHVzdGF0W2NwdV07CisJcHJlZW1wdF9kaXNhYmxlKCk7CisKIAlpZiAoUGFnZUNncm91cENhY2hlKHBjKSkKLQkJX19tZW1fY2dyb3VwX3N0YXRfYWRkX3NhZmUoY3B1c3RhdCwgTUVNX0NHUk9VUF9TVEFUX0NBQ0hFLCB2YWwpOworCQlfX3RoaXNfY3B1X2FkZChtZW0tPnN0YXQtPmNvdW50W01FTV9DR1JPVVBfU1RBVF9DQUNIRV0sIHZhbCk7CiAJZWxzZQotCQlfX21lbV9jZ3JvdXBfc3RhdF9hZGRfc2FmZShjcHVzdGF0LCBNRU1fQ0dST1VQX1NUQVRfUlNTLCB2YWwpOworCQlfX3RoaXNfY3B1X2FkZChtZW0tPnN0YXQtPmNvdW50W01FTV9DR1JPVVBfU1RBVF9SU1NdLCB2YWwpOwogCiAJaWYgKGNoYXJnZSkKLQkJX19tZW1fY2dyb3VwX3N0YXRfYWRkX3NhZmUoY3B1c3RhdCwKLQkJCQlNRU1fQ0dST1VQX1NUQVRfUEdQR0lOX0NPVU5ULCAxKTsKKwkJX190aGlzX2NwdV9pbmMobWVtLT5zdGF0LT5jb3VudFtNRU1fQ0dST1VQX1NUQVRfUEdQR0lOX0NPVU5UXSk7CiAJZWxzZQotCQlfX21lbV9jZ3JvdXBfc3RhdF9hZGRfc2FmZShjcHVzdGF0LAotCQkJCU1FTV9DR1JPVVBfU1RBVF9QR1BHT1VUX0NPVU5ULCAxKTsKLQlfX21lbV9jZ3JvdXBfc3RhdF9hZGRfc2FmZShjcHVzdGF0LCBNRU1fQ0dST1VQX1NUQVRfRVZFTlRTLCAxKTsKLQlwdXRfY3B1KCk7CisJCV9fdGhpc19jcHVfaW5jKG1lbS0+c3RhdC0+Y291bnRbTUVNX0NHUk9VUF9TVEFUX1BHUEdPVVRfQ09VTlRdKTsKKwlfX3RoaXNfY3B1X2luYyhtZW0tPnN0YXQtPmNvdW50W01FTV9DR1JPVVBfRVZFTlRTXSk7CisKKwlwcmVlbXB0X2VuYWJsZSgpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX2dldF9sb2NhbF96b25lc3RhdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLApAQCAtNTM0LDYgKzU1MiwyOSBAQAogCXJldHVybiB0b3RhbDsKIH0KIAorc3RhdGljIGJvb2wgX19tZW1jZ19ldmVudF9jaGVjayhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCBpbnQgZXZlbnRfbWFza19zaGlmdCkKK3sKKwlzNjQgdmFsOworCisJdmFsID0gdGhpc19jcHVfcmVhZChtZW0tPnN0YXQtPmNvdW50W01FTV9DR1JPVVBfRVZFTlRTXSk7CisKKwlyZXR1cm4gISh2YWwgJiAoKDEgPDwgZXZlbnRfbWFza19zaGlmdCkgLSAxKSk7Cit9CisKKy8qCisgKiBDaGVjayBldmVudHMgaW4gb3JkZXIuCisgKgorICovCitzdGF0aWMgdm9pZCBtZW1jZ19jaGVja19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJLyogdGhyZXNob2xkIGV2ZW50IGlzIHRyaWdnZXJlZCBpbiBmaW5lciBncmFpbiB0aGFuIHNvZnQgbGltaXQgKi8KKwlpZiAodW5saWtlbHkoX19tZW1jZ19ldmVudF9jaGVjayhtZW0sIFRIUkVTSE9MRFNfRVZFTlRTX1RIUkVTSCkpKSB7CisJCW1lbV9jZ3JvdXBfdGhyZXNob2xkKG1lbSk7CisJCWlmICh1bmxpa2VseShfX21lbWNnX2V2ZW50X2NoZWNrKG1lbSwgU09GVExJTUlUX0VWRU5UU19USFJFU0gpKSkKKwkJCW1lbV9jZ3JvdXBfdXBkYXRlX3RyZWUobWVtLCBwYWdlKTsKKwl9Cit9CisKIHN0YXRpYyBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9mcm9tX2NvbnQoc3RydWN0IGNncm91cCAqY29udCkKIHsKIAlyZXR1cm4gY29udGFpbmVyX29mKGNncm91cF9zdWJzeXNfc3RhdGUoY29udCwKQEAgLTEwMDAsNyArMTA0MSw3IEBACiB9CiAKIC8qKgotICogbWVtX2Nncm91cF9wcmludF9tZW1faW5mbzogQ2FsbGVkIGZyb20gT09NIHdpdGggdGFza2xpc3RfbG9jayBoZWxkIGluIHJlYWQgbW9kZS4KKyAqIG1lbV9jZ3JvdXBfcHJpbnRfb29tX2luZm86IENhbGxlZCBmcm9tIE9PTSB3aXRoIHRhc2tsaXN0X2xvY2sgaGVsZCBpbiByZWFkIG1vZGUuCiAgKiBAbWVtY2c6IFRoZSBtZW1vcnkgY2dyb3VwIHRoYXQgd2VudCBvdmVyIGxpbWl0CiAgKiBAcDogVGFzayB0aGF0IGlzIGdvaW5nIHRvIGJlIGtpbGxlZAogICoKQEAgLTExNzQsNyArMTIxNSw3IEBACiAJCQkJfQogCQkJfQogCQl9Ci0JCWlmICghbWVtX2Nncm91cF9sb2NhbF91c2FnZSgmdmljdGltLT5zdGF0KSkgeworCQlpZiAoIW1lbV9jZ3JvdXBfbG9jYWxfdXNhZ2UodmljdGltKSkgewogCQkJLyogdGhpcyBjZ3JvdXAncyBsb2NhbCB1c2FnZSA9PSAwICovCiAJCQljc3NfcHV0KCZ2aWN0aW0tPmNzcyk7CiAJCQljb250aW51ZTsKQEAgLTEyMDUsMzIgKzEyNDYsMTAyIEBACiAJcmV0dXJuIHRvdGFsOwogfQogCi1ib29sIG1lbV9jZ3JvdXBfb29tX2NhbGxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCitzdGF0aWMgaW50IG1lbV9jZ3JvdXBfb29tX2xvY2tfY2Ioc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgdm9pZCAqZGF0YSkKIHsKLQlib29sIHJldCA9IGZhbHNlOwotCXN0cnVjdCBtZW1fY2dyb3VwICptZW07Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW07CisJaW50ICp2YWwgPSAoaW50ICopZGF0YTsKKwlpbnQgeDsKKwkvKgorCSAqIExvZ2ljYWxseSwgd2UgY2FuIHN0b3Agc2Nhbm5pbmcgaW1tZWRpYXRlbHkgd2hlbiB3ZSBmaW5kCisJICogYSBtZW1jZyBpcyBhbHJlYWR5IGxvY2tlZC4gQnV0IGNvbmRpZGVyaW5nIHVubG9jayBvcHMgYW5kCisJICogY3JlYXRpb24vcmVtb3ZhbCBvZiBtZW1jZywgc2Nhbi1hbGwgaXMgc2ltcGxlIG9wZXJhdGlvbi4KKwkgKi8KKwl4ID0gYXRvbWljX2luY19yZXR1cm4oJm1lbS0+b29tX2xvY2spOworCSp2YWwgPSBtYXgoeCwgKnZhbCk7CisJcmV0dXJuIDA7Cit9CisvKgorICogQ2hlY2sgT09NLUtpbGxlciBpcyBhbHJlYWR5IHJ1bm5pbmcgdW5kZXIgb3VyIGhpZXJhcmNoeS4KKyAqIElmIHNvbWVvbmUgaXMgcnVubmluZywgcmV0dXJuIGZhbHNlLgorICovCitzdGF0aWMgYm9vbCBtZW1fY2dyb3VwX29vbV9sb2NrKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCit7CisJaW50IGxvY2tfY291bnQgPSAwOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCW1tID0gdGFzay0+bW07Ci0JaWYgKCFtbSkKLQkJbW0gPSAmaW5pdF9tbTsKLQltZW0gPSBtZW1fY2dyb3VwX2Zyb21fdGFzayhyY3VfZGVyZWZlcmVuY2UobW0tPm93bmVyKSk7Ci0JaWYgKG1lbSAmJiB0aW1lX2JlZm9yZShqaWZmaWVzLCBtZW0tPmxhc3Rfb29tX2ppZmZpZXMgKyBIWi8xMCkpCi0JCXJldCA9IHRydWU7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JcmV0dXJuIHJldDsKKwltZW1fY2dyb3VwX3dhbGtfdHJlZShtZW0sICZsb2NrX2NvdW50LCBtZW1fY2dyb3VwX29vbV9sb2NrX2NiKTsKKworCWlmIChsb2NrX2NvdW50ID09IDEpCisJCXJldHVybiB0cnVlOworCXJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGludCByZWNvcmRfbGFzdF9vb21fY2Ioc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgbWVtX2Nncm91cF9vb21fdW5sb2NrX2NiKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIHZvaWQgKmRhdGEpCiB7Ci0JbWVtLT5sYXN0X29vbV9qaWZmaWVzID0gamlmZmllczsKKwkvKgorCSAqIFdoZW4gYSBuZXcgY2hpbGQgaXMgY3JlYXRlZCB3aGlsZSB0aGUgaGllcmFyY2h5IGlzIHVuZGVyIG9vbSwKKwkgKiBtZW1fY2dyb3VwX29vbV9sb2NrKCkgbWF5IG5vdCBiZSBjYWxsZWQuIFdlIGhhdmUgdG8gdXNlCisJICogYXRvbWljX2FkZF91bmxlc3MoKSBoZXJlLgorCSAqLworCWF0b21pY19hZGRfdW5sZXNzKCZtZW0tPm9vbV9sb2NrLCAtMSwgMCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJlY29yZF9sYXN0X29vbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQorc3RhdGljIHZvaWQgbWVtX2Nncm91cF9vb21fdW5sb2NrKHN0cnVjdCBtZW1fY2dyb3VwICptZW0pCiB7Ci0JbWVtX2Nncm91cF93YWxrX3RyZWUobWVtLCBOVUxMLCByZWNvcmRfbGFzdF9vb21fY2IpOworCW1lbV9jZ3JvdXBfd2Fsa190cmVlKG1lbSwgTlVMTCwJbWVtX2Nncm91cF9vb21fdW5sb2NrX2NiKTsKK30KKworc3RhdGljIERFRklORV9NVVRFWChtZW1jZ19vb21fbXV0ZXgpOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKG1lbWNnX29vbV93YWl0cSk7CisKKy8qCisgKiB0cnkgdG8gY2FsbCBPT00ga2lsbGVyLiByZXR1cm5zIGZhbHNlIGlmIHdlIHNob3VsZCBleGl0IG1lbW9yeS1yZWNsYWltIGxvb3AuCisgKi8KK2Jvb2wgbWVtX2Nncm91cF9oYW5kbGVfb29tKHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIGdmcF90IG1hc2spCit7CisJREVGSU5FX1dBSVQod2FpdCk7CisJYm9vbCBsb2NrZWQ7CisKKwkvKiBBdCBmaXJzdCwgdHJ5IHRvIE9PTSBsb2NrIGhpZXJhcmNoeSB1bmRlciBtZW0uKi8KKwltdXRleF9sb2NrKCZtZW1jZ19vb21fbXV0ZXgpOworCWxvY2tlZCA9IG1lbV9jZ3JvdXBfb29tX2xvY2sobWVtKTsKKwkvKgorCSAqIEV2ZW4gaWYgc2lnbmFsX3BlbmRpbmcoKSwgd2UgY2FuJ3QgcXVpdCBjaGFyZ2UoKSBsb29wIHdpdGhvdXQKKwkgKiBhY2NvdW50aW5nLiBTbywgVU5JTlRFUlJVUFRJQkxFIGlzIGFwcHJvcHJpYXRlLiBCdXQgU0lHS0lMTAorCSAqIHVuZGVyIE9PTSBpcyBhbHdheXMgd2VsY29tZWQsIHVzZSBUQVNLX0tJTExBQkxFIGhlcmUuCisJICovCisJaWYgKCFsb2NrZWQpCisJCXByZXBhcmVfdG9fd2FpdCgmbWVtY2dfb29tX3dhaXRxLCAmd2FpdCwgVEFTS19LSUxMQUJMRSk7CisJbXV0ZXhfdW5sb2NrKCZtZW1jZ19vb21fbXV0ZXgpOworCisJaWYgKGxvY2tlZCkKKwkJbWVtX2Nncm91cF9vdXRfb2ZfbWVtb3J5KG1lbSwgbWFzayk7CisJZWxzZSB7CisJCXNjaGVkdWxlKCk7CisJCWZpbmlzaF93YWl0KCZtZW1jZ19vb21fd2FpdHEsICZ3YWl0KTsKKwl9CisJbXV0ZXhfbG9jaygmbWVtY2dfb29tX211dGV4KTsKKwltZW1fY2dyb3VwX29vbV91bmxvY2sobWVtKTsKKwkvKgorCSAqIEhlcmUsIHdlIHVzZSBnbG9iYWwgd2FpdHEgLi4uLi5tb3JlIGZpbmUgZ3JhaW5lZCB3YWl0cSA/CisJICogQXNzdW1lIGZvbGxvd2luZyBoaWVyYXJjaHkuCisJICogQS8KKwkgKiAgIDAxCisJICogICAwMgorCSAqIGFzc3VtZSBPT00gaGFwcGVucyBib3RoIGluIEEgYW5kIDAxIGF0IHRoZSBzYW1lIHRpbWUuIFR0aGV5IGFyZQorCSAqIG11dHVhbGx5IGV4Y2x1c2l2ZSBieSBsb2NrLiAoa2lsbCBpbiAwMSBoZWxwcyBBLikKKwkgKiBXaGVuIHdlIHVzZSBwZXIgbWVtY2cgd2FpdHEsIHdlIGhhdmUgdG8gd2FrZSB1cCB3YWl0ZXJzIG9uIEEgYW5kIDAyCisJICogaW4gYWRkdGlvbiB0byB3YWl0ZXJzIG9uIDAxLiBXZSB1c2UgZ2xvYmFsIHdhaXRxIGZvciBhdm9pZGluZyBtZXNzLgorCSAqIEl0IHdpbGwgbm90IGJlIGEgYmlnIHByb2JsZW0uCisJICogKEFuZCBhIHRhc2sgbWF5IGJlIG1vdmVkIHRvIG90aGVyIGdyb3VwcyB3aGlsZSBpdCdzIHdhaXRpbmcgZm9yIE9PTS4pCisJICovCisJd2FrZV91cF9hbGwoJm1lbWNnX29vbV93YWl0cSk7CisJbXV0ZXhfdW5sb2NrKCZtZW1jZ19vb21fbXV0ZXgpOworCisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX01FTURJRSkgfHwgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCisJCXJldHVybiBmYWxzZTsKKwkvKiBHaXZlIGNoYW5jZSB0byBkeWluZyBwcm9jZXNzICovCisJc2NoZWR1bGVfdGltZW91dCgxKTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoKQEAgLTEyNDAsOSArMTM1MSw2IEBACiB2b2lkIG1lbV9jZ3JvdXBfdXBkYXRlX2ZpbGVfbWFwcGVkKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgdmFsKQogewogCXN0cnVjdCBtZW1fY2dyb3VwICptZW07Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfc3RhdCAqc3RhdDsKLQlzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0X2NwdSAqY3B1c3RhdDsKLQlpbnQgY3B1OwogCXN0cnVjdCBwYWdlX2Nncm91cCAqcGM7CiAKIAlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKQEAgLTEyNTgsMTMgKzEzNjYsMTAgQEAKIAkJZ290byBkb25lOwogCiAJLyoKLQkgKiBQcmVlbXB0aW9uIGlzIGFscmVhZHkgZGlzYWJsZWQsIHdlIGRvbid0IG5lZWQgZ2V0X2NwdSgpCisJICogUHJlZW1wdGlvbiBpcyBhbHJlYWR5IGRpc2FibGVkLiBXZSBjYW4gdXNlIF9fdGhpc19jcHVfeHh4CiAJICovCi0JY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0YXQgPSAmbWVtLT5zdGF0OwotCWNwdXN0YXQgPSAmc3RhdC0+Y3B1c3RhdFtjcHVdOworCV9fdGhpc19jcHVfYWRkKG1lbS0+c3RhdC0+Y291bnRbTUVNX0NHUk9VUF9TVEFUX0ZJTEVfTUFQUEVEXSwgdmFsKTsKIAotCV9fbWVtX2Nncm91cF9zdGF0X2FkZF9zYWZlKGNwdXN0YXQsIE1FTV9DR1JPVVBfU1RBVF9GSUxFX01BUFBFRCwgdmFsKTsKIGRvbmU6CiAJdW5sb2NrX3BhZ2VfY2dyb3VwKHBjKTsKIH0KQEAgLTE0MDEsMTkgKzE1MDYsMjEgQEAKICAqIG9vbS1raWxsZXIgY2FuIGJlIGludm9rZWQuCiAgKi8KIHN0YXRpYyBpbnQgX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQlnZnBfdCBnZnBfbWFzaywgc3RydWN0IG1lbV9jZ3JvdXAgKiptZW1jZywKLQkJCWJvb2wgb29tLCBzdHJ1Y3QgcGFnZSAqcGFnZSkKKwkJCWdmcF90IGdmcF9tYXNrLCBzdHJ1Y3QgbWVtX2Nncm91cCAqKm1lbWNnLCBib29sIG9vbSkKIHsKIAlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCAqbWVtX292ZXJfbGltaXQ7CiAJaW50IG5yX3JldHJpZXMgPSBNRU1fQ0dST1VQX1JFQ0xBSU1fUkVUUklFUzsKIAlzdHJ1Y3QgcmVzX2NvdW50ZXIgKmZhaWxfcmVzOwogCWludCBjc2l6ZSA9IENIQVJHRV9TSVpFOwogCi0JaWYgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX01FTURJRSkpKSB7Ci0JCS8qIERvbid0IGFjY291bnQgdGhpcyEgKi8KLQkJKm1lbWNnID0gTlVMTDsKLQkJcmV0dXJuIDA7Ci0JfQorCS8qCisJICogVW5saWtlIGdsb3ZhbC12bSdzIE9PTS1raWxsLCB3ZSdyZSBub3QgaW4gbWVtb3J5IHNob3J0YWdlCisJICogaW4gc3lzdGVtIGxldmVsLiBTbywgYWxsb3cgdG8gZ28gYWhlYWQgZHlpbmcgcHJvY2VzcyBpbiBhZGRpdGlvbiB0bworCSAqIE1FTURJRSBwcm9jZXNzLgorCSAqLworCWlmICh1bmxpa2VseSh0ZXN0X3RocmVhZF9mbGFnKFRJRl9NRU1ESUUpCisJCSAgICAgfHwgZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpKQorCQlnb3RvIGJ5cGFzczsKIAogCS8qCiAJICogV2UgYWx3YXlzIGNoYXJnZSB0aGUgY2dyb3VwIHRoZSBtbV9zdHJ1Y3QgYmVsb25ncyB0by4KQEAgLTE0NDAsNyArMTU0Nyw3IEBACiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwogCiAJCWlmIChjb25zdW1lX3N0b2NrKG1lbSkpCi0JCQlnb3RvIGNoYXJnZWQ7CisJCQlnb3RvIGRvbmU7CiAKIAkJcmV0ID0gcmVzX2NvdW50ZXJfY2hhcmdlKCZtZW0tPnJlcywgY3NpemUsICZmYWlsX3Jlcyk7CiAJCWlmIChsaWtlbHkoIXJldCkpIHsKQEAgLTE0ODMsMjggKzE1OTAsNzAgQEAKIAkJaWYgKG1lbV9jZ3JvdXBfY2hlY2tfdW5kZXJfbGltaXQobWVtX292ZXJfbGltaXQpKQogCQkJY29udGludWU7CiAKLQkJaWYgKCFucl9yZXRyaWVzLS0pIHsKLQkJCWlmIChvb20pIHsKLQkJCQltZW1fY2dyb3VwX291dF9vZl9tZW1vcnkobWVtX292ZXJfbGltaXQsIGdmcF9tYXNrKTsKLQkJCQlyZWNvcmRfbGFzdF9vb20obWVtX292ZXJfbGltaXQpOworCQkvKiB0cnkgdG8gYXZvaWQgb29tIHdoaWxlIHNvbWVvbmUgaXMgbW92aW5nIGNoYXJnZSAqLworCQlpZiAobWMubW92aW5nX3Rhc2sgJiYgY3VycmVudCAhPSBtYy5tb3ZpbmdfdGFzaykgeworCQkJc3RydWN0IG1lbV9jZ3JvdXAgKmZyb20sICp0bzsKKwkJCWJvb2wgZG9fY29udGludWUgPSBmYWxzZTsKKwkJCS8qCisJCQkgKiBUaGVyZSBpcyBhIHNtYWxsIHJhY2UgdGhhdCAiZnJvbSIgb3IgInRvIiBjYW4gYmUKKwkJCSAqIGZyZWVkIGJ5IHJtZGlyLCBzbyB3ZSB1c2UgY3NzX3RyeWdldCgpLgorCQkJICovCisJCQlyY3VfcmVhZF9sb2NrKCk7CisJCQlmcm9tID0gbWMuZnJvbTsKKwkJCXRvID0gbWMudG87CisJCQlpZiAoZnJvbSAmJiBjc3NfdHJ5Z2V0KCZmcm9tLT5jc3MpKSB7CisJCQkJaWYgKG1lbV9vdmVyX2xpbWl0LT51c2VfaGllcmFyY2h5KQorCQkJCQlkb19jb250aW51ZSA9IGNzc19pc19hbmNlc3RvcigKKwkJCQkJCQkmZnJvbS0+Y3NzLAorCQkJCQkJCSZtZW1fb3Zlcl9saW1pdC0+Y3NzKTsKKwkJCQllbHNlCisJCQkJCWRvX2NvbnRpbnVlID0gKGZyb20gPT0gbWVtX292ZXJfbGltaXQpOworCQkJCWNzc19wdXQoJmZyb20tPmNzcyk7CiAJCQl9Ci0JCQlnb3RvIG5vbWVtOworCQkJaWYgKCFkb19jb250aW51ZSAmJiB0byAmJiBjc3NfdHJ5Z2V0KCZ0by0+Y3NzKSkgeworCQkJCWlmIChtZW1fb3Zlcl9saW1pdC0+dXNlX2hpZXJhcmNoeSkKKwkJCQkJZG9fY29udGludWUgPSBjc3NfaXNfYW5jZXN0b3IoCisJCQkJCQkJJnRvLT5jc3MsCisJCQkJCQkJJm1lbV9vdmVyX2xpbWl0LT5jc3MpOworCQkJCWVsc2UKKwkJCQkJZG9fY29udGludWUgPSAodG8gPT0gbWVtX292ZXJfbGltaXQpOworCQkJCWNzc19wdXQoJnRvLT5jc3MpOworCQkJfQorCQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlpZiAoZG9fY29udGludWUpIHsKKwkJCQlERUZJTkVfV0FJVCh3YWl0KTsKKwkJCQlwcmVwYXJlX3RvX3dhaXQoJm1jLndhaXRxLCAmd2FpdCwKKwkJCQkJCQlUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJCS8qIG1vdmluZyBjaGFyZ2UgY29udGV4dCBtaWdodCBoYXZlIGZpbmlzaGVkLiAqLworCQkJCWlmIChtYy5tb3ZpbmdfdGFzaykKKwkJCQkJc2NoZWR1bGUoKTsKKwkJCQlmaW5pc2hfd2FpdCgmbWMud2FpdHEsICZ3YWl0KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCisJCWlmICghbnJfcmV0cmllcy0tKSB7CisJCQlpZiAoIW9vbSkKKwkJCQlnb3RvIG5vbWVtOworCQkJaWYgKG1lbV9jZ3JvdXBfaGFuZGxlX29vbShtZW1fb3Zlcl9saW1pdCwgZ2ZwX21hc2spKSB7CisJCQkJbnJfcmV0cmllcyA9IE1FTV9DR1JPVVBfUkVDTEFJTV9SRVRSSUVTOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyogV2hlbiB3ZSByZWFjaCBoZXJlLCBjdXJyZW50IHRhc2sgaXMgZHlpbmcgLiovCisJCQljc3NfcHV0KCZtZW0tPmNzcyk7CisJCQlnb3RvIGJ5cGFzczsKIAkJfQogCX0KIAlpZiAoY3NpemUgPiBQQUdFX1NJWkUpCiAJCXJlZmlsbF9zdG9jayhtZW0sIGNzaXplIC0gUEFHRV9TSVpFKTsKLWNoYXJnZWQ6Ci0JLyoKLQkgKiBJbnNlcnQgYW5jZXN0b3IgKGFuZCBhbmNlc3RvcidzIGFuY2VzdG9ycyksIHRvIHNvZnRsaW1pdCBSQi10cmVlLgotCSAqIGlmIHRoZXkgZXhjZWVkcyBzb2Z0bGltaXQuCi0JICovCi0JaWYgKG1lbV9jZ3JvdXBfc29mdF9saW1pdF9jaGVjayhtZW0pKQotCQltZW1fY2dyb3VwX3VwZGF0ZV90cmVlKG1lbSwgcGFnZSk7CiBkb25lOgogCXJldHVybiAwOwogbm9tZW06CiAJY3NzX3B1dCgmbWVtLT5jc3MpOwogCXJldHVybiAtRU5PTUVNOworYnlwYXNzOgorCSptZW1jZyA9IE5VTEw7CisJcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0xNTEyLDE0ICsxNjYxLDIzIEBACiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGZvciB0aGF0IGFuZCBkbyB1bmNoYXJnZSwgcHV0IGNzcydzIHJlZmNudC4KICAqIGdvdHRlbiBieSB0cnlfY2hhcmdlKCkuCiAgKi8KLXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY2FuY2VsX2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQorc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2NhbmNlbF9jaGFyZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwKKwkJCQkJCQl1bnNpZ25lZCBsb25nIGNvdW50KQogewogCWlmICghbWVtX2Nncm91cF9pc19yb290KG1lbSkpIHsKLQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+cmVzLCBQQUdFX1NJWkUpOworCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSAqIGNvdW50KTsKIAkJaWYgKGRvX3N3YXBfYWNjb3VudCkKLQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtZW0tPm1lbXN3LCBQQUdFX1NJWkUpOworCQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJm1lbS0+bWVtc3csIFBBR0VfU0laRSAqIGNvdW50KTsKKwkJVk1fQlVHX09OKHRlc3RfYml0KENTU19ST09ULCAmbWVtLT5jc3MuZmxhZ3MpKTsKKwkJV0FSTl9PTl9PTkNFKGNvdW50ID4gSU5UX01BWCk7CisJCV9fY3NzX3B1dCgmbWVtLT5jc3MsIChpbnQpY291bnQpOwogCX0KLQljc3NfcHV0KCZtZW0tPmNzcyk7CisJLyogd2UgZG9uJ3QgbmVlZCBjc3NfcHV0IGZvciByb290ICovCit9CisKK3N0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY2FuY2VsX2NoYXJnZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQoreworCV9fbWVtX2Nncm91cF9jYW5jZWxfY2hhcmdlKG1lbSwgMSk7CiB9CiAKIC8qCkBAIC0xNjE1LDYgKzE3NzMsMTIgQEAKIAltZW1fY2dyb3VwX2NoYXJnZV9zdGF0aXN0aWNzKG1lbSwgcGMsIHRydWUpOwogCiAJdW5sb2NrX3BhZ2VfY2dyb3VwKHBjKTsKKwkvKgorCSAqICJjaGFyZ2Vfc3RhdGlzdGljcyIgdXBkYXRlZCBldmVudCBjb3VudGVyLiBUaGVuLCBjaGVjayBpdC4KKwkgKiBJbnNlcnQgYW5jZXN0b3IgKGFuZCBhbmNlc3RvcidzIGFuY2VzdG9ycyksIHRvIHNvZnRsaW1pdCBSQi10cmVlLgorCSAqIGlmIHRoZXkgZXhjZWVkcyBzb2Z0bGltaXQuCisJICovCisJbWVtY2dfY2hlY2tfZXZlbnRzKG1lbSwgcGMtPnBhZ2UpOwogfQogCiAvKioKQEAgLTE2MjIsMjIgKzE3ODYsMjIgQEAKICAqIEBwYzoJcGFnZV9jZ3JvdXAgb2YgdGhlIHBhZ2UuCiAgKiBAZnJvbTogbWVtX2Nncm91cCB3aGljaCB0aGUgcGFnZSBpcyBtb3ZlZCBmcm9tLgogICogQHRvOgltZW1fY2dyb3VwIHdoaWNoIHRoZSBwYWdlIGlzIG1vdmVkIHRvLiBAZnJvbSAhPSBAdG8uCisgKiBAdW5jaGFyZ2U6IHdoZXRoZXIgd2Ugc2hvdWxkIGNhbGwgdW5jaGFyZ2UgYW5kIGNzc19wdXQgYWdhaW5zdCBAZnJvbS4KICAqCiAgKiBUaGUgY2FsbGVyIG11c3QgY29uZmlybSBmb2xsb3dpbmcuCiAgKiAtIHBhZ2UgaXMgbm90IG9uIExSVSAoaXNvbGF0ZV9wYWdlKCkgaXMgdXNlZnVsLikKICAqIC0gdGhlIHBjIGlzIGxvY2tlZCwgdXNlZCwgYW5kIC0+bWVtX2Nncm91cCBwb2ludHMgdG8gQGZyb20uCiAgKgotICogVGhpcyBmdW5jdGlvbiBkb2VzICJ1bmNoYXJnZSIgZnJvbSBvbGQgY2dyb3VwIGJ1dCBkb2Vzbid0IGRvICJjaGFyZ2UiIHRvCi0gKiBuZXcgY2dyb3VwLiBJdCBzaG91bGQgYmUgZG9uZSBieSBhIGNhbGxlci4KKyAqIFRoaXMgZnVuY3Rpb24gZG9lc24ndCBkbyAiY2hhcmdlIiBub3IgY3NzX2dldCB0byBuZXcgY2dyb3VwLiBJdCBzaG91bGQgYmUKKyAqIGRvbmUgYnkgYSBjYWxsZXIoX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2Ugd291bGQgYmUgdXNlZnVsbCkuIElmIEB1bmNoYXJnZSBpcworICogdHJ1ZSwgdGhpcyBmdW5jdGlvbiBkb2VzICJ1bmNoYXJnZSIgZnJvbSBvbGQgY2dyb3VwLCBidXQgaXQgZG9lc24ndCBpZgorICogQHVuY2hhcmdlIGlzIGZhbHNlLCBzbyBhIGNhbGxlciBzaG91bGQgZG8gInVuY2hhcmdlIi4KICAqLwogCiBzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfbW92ZV9hY2NvdW50KHN0cnVjdCBwYWdlX2Nncm91cCAqcGMsCi0Jc3RydWN0IG1lbV9jZ3JvdXAgKmZyb20sIHN0cnVjdCBtZW1fY2dyb3VwICp0bykKKwlzdHJ1Y3QgbWVtX2Nncm91cCAqZnJvbSwgc3RydWN0IG1lbV9jZ3JvdXAgKnRvLCBib29sIHVuY2hhcmdlKQogewogCXN0cnVjdCBwYWdlICpwYWdlOwotCWludCBjcHU7Ci0Jc3RydWN0IG1lbV9jZ3JvdXBfc3RhdCAqc3RhdDsKLQlzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0X2NwdSAqY3B1c3RhdDsKIAogCVZNX0JVR19PTihmcm9tID09IHRvKTsKIAlWTV9CVUdfT04oUGFnZUxSVShwYy0+cGFnZSkpOwpAQCAtMTY0NSwzOCArMTgwOSwyOCBAQAogCVZNX0JVR19PTighUGFnZUNncm91cFVzZWQocGMpKTsKIAlWTV9CVUdfT04ocGMtPm1lbV9jZ3JvdXAgIT0gZnJvbSk7CiAKLQlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChmcm9tKSkKLQkJcmVzX2NvdW50ZXJfdW5jaGFyZ2UoJmZyb20tPnJlcywgUEFHRV9TSVpFKTsKLQltZW1fY2dyb3VwX2NoYXJnZV9zdGF0aXN0aWNzKGZyb20sIHBjLCBmYWxzZSk7Ci0KIAlwYWdlID0gcGMtPnBhZ2U7CiAJaWYgKHBhZ2VfbWFwcGVkKHBhZ2UpICYmICFQYWdlQW5vbihwYWdlKSkgewotCQljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7Ci0JCS8qIFVwZGF0ZSBtYXBwZWRfZmlsZSBkYXRhIGZvciBtZW1fY2dyb3VwICJmcm9tIiAqLwotCQlzdGF0ID0gJmZyb20tPnN0YXQ7Ci0JCWNwdXN0YXQgPSAmc3RhdC0+Y3B1c3RhdFtjcHVdOwotCQlfX21lbV9jZ3JvdXBfc3RhdF9hZGRfc2FmZShjcHVzdGF0LCBNRU1fQ0dST1VQX1NUQVRfRklMRV9NQVBQRUQsCi0JCQkJCQktMSk7Ci0KLQkJLyogVXBkYXRlIG1hcHBlZF9maWxlIGRhdGEgZm9yIG1lbV9jZ3JvdXAgInRvIiAqLwotCQlzdGF0ID0gJnRvLT5zdGF0OwotCQljcHVzdGF0ID0gJnN0YXQtPmNwdXN0YXRbY3B1XTsKLQkJX19tZW1fY2dyb3VwX3N0YXRfYWRkX3NhZmUoY3B1c3RhdCwgTUVNX0NHUk9VUF9TVEFUX0ZJTEVfTUFQUEVELAotCQkJCQkJMSk7CisJCS8qIFVwZGF0ZSBtYXBwZWRfZmlsZSBkYXRhIGZvciBtZW1fY2dyb3VwICovCisJCXByZWVtcHRfZGlzYWJsZSgpOworCQlfX3RoaXNfY3B1X2RlYyhmcm9tLT5zdGF0LT5jb3VudFtNRU1fQ0dST1VQX1NUQVRfRklMRV9NQVBQRURdKTsKKwkJX190aGlzX2NwdV9pbmModG8tPnN0YXQtPmNvdW50W01FTV9DR1JPVVBfU1RBVF9GSUxFX01BUFBFRF0pOworCQlwcmVlbXB0X2VuYWJsZSgpOwogCX0KKwltZW1fY2dyb3VwX2NoYXJnZV9zdGF0aXN0aWNzKGZyb20sIHBjLCBmYWxzZSk7CisJaWYgKHVuY2hhcmdlKQorCQkvKiBUaGlzIGlzIG5vdCAiY2FuY2VsIiwgYnV0IGNhbmNlbF9jaGFyZ2UgZG9lcyBhbGwgd2UgbmVlZC4gKi8KKwkJbWVtX2Nncm91cF9jYW5jZWxfY2hhcmdlKGZyb20pOwogCi0JaWYgKGRvX3N3YXBfYWNjb3VudCAmJiAhbWVtX2Nncm91cF9pc19yb290KGZyb20pKQotCQlyZXNfY291bnRlcl91bmNoYXJnZSgmZnJvbS0+bWVtc3csIFBBR0VfU0laRSk7Ci0JY3NzX3B1dCgmZnJvbS0+Y3NzKTsKLQotCWNzc19nZXQoJnRvLT5jc3MpOworCS8qIGNhbGxlciBzaG91bGQgaGF2ZSBkb25lIGNzc19nZXQgKi8KIAlwYy0+bWVtX2Nncm91cCA9IHRvOwogCW1lbV9jZ3JvdXBfY2hhcmdlX3N0YXRpc3RpY3ModG8sIHBjLCB0cnVlKTsKIAkvKgogCSAqIFdlIGNoYXJnZXMgYWdhaW5zdCAidG8iIHdoaWNoIG1heSBub3QgaGF2ZSBhbnkgdGFza3MuIFRoZW4sICJ0byIKIAkgKiBjYW4gYmUgdW5kZXIgcm1kaXIoKS4gQnV0IGluIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sIGNhbGxlciBvZgotCSAqIHRoaXMgZnVuY3Rpb24gaXMganVzdCBmb3JjZV9lbXB0eSgpIGFuZCBpdCdzIGdhcmFudGVlZCB0aGF0Ci0JICogInRvIiBpcyBuZXZlciByZW1vdmVkLiBTbywgd2UgZG9uJ3QgY2hlY2sgcm1kaXIgc3RhdHVzIGhlcmUuCisJICogdGhpcyBmdW5jdGlvbiBpcyBqdXN0IGZvcmNlX2VtcHR5KCkgYW5kIG1vdmUgY2hhcmdlLCBzbyBpdCdzCisJICogZ2FyYW50ZWVkIHRoYXQgInRvIiBpcyBuZXZlciByZW1vdmVkLiBTbywgd2UgZG9uJ3QgY2hlY2sgcm1kaXIKKwkgKiBzdGF0dXMgaGVyZS4KIAkgKi8KIH0KIApAQCAtMTY4NSwxNSArMTgzOSwyMCBAQAogICogX19tZW1fY2dyb3VwX21vdmVfYWNjb3VudCgpCiAgKi8KIHN0YXRpYyBpbnQgbWVtX2Nncm91cF9tb3ZlX2FjY291bnQoc3RydWN0IHBhZ2VfY2dyb3VwICpwYywKLQkJCQlzdHJ1Y3QgbWVtX2Nncm91cCAqZnJvbSwgc3RydWN0IG1lbV9jZ3JvdXAgKnRvKQorCQlzdHJ1Y3QgbWVtX2Nncm91cCAqZnJvbSwgc3RydWN0IG1lbV9jZ3JvdXAgKnRvLCBib29sIHVuY2hhcmdlKQogewogCWludCByZXQgPSAtRUlOVkFMOwogCWxvY2tfcGFnZV9jZ3JvdXAocGMpOwogCWlmIChQYWdlQ2dyb3VwVXNlZChwYykgJiYgcGMtPm1lbV9jZ3JvdXAgPT0gZnJvbSkgewotCQlfX21lbV9jZ3JvdXBfbW92ZV9hY2NvdW50KHBjLCBmcm9tLCB0byk7CisJCV9fbWVtX2Nncm91cF9tb3ZlX2FjY291bnQocGMsIGZyb20sIHRvLCB1bmNoYXJnZSk7CiAJCXJldCA9IDA7CiAJfQogCXVubG9ja19wYWdlX2Nncm91cChwYyk7CisJLyoKKwkgKiBjaGVjayBldmVudHMKKwkgKi8KKwltZW1jZ19jaGVja19ldmVudHModG8sIHBjLT5wYWdlKTsKKwltZW1jZ19jaGVja19ldmVudHMoZnJvbSwgcGMtPnBhZ2UpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE3MjIsMTUgKzE4ODEsMTMgQEAKIAkJZ290byBwdXQ7CiAKIAlwYXJlbnQgPSBtZW1fY2dyb3VwX2Zyb21fY29udChwY2cpOwotCXJldCA9IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlKE5VTEwsIGdmcF9tYXNrLCAmcGFyZW50LCBmYWxzZSwgcGFnZSk7CisJcmV0ID0gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2UoTlVMTCwgZ2ZwX21hc2ssICZwYXJlbnQsIGZhbHNlKTsKIAlpZiAocmV0IHx8ICFwYXJlbnQpCiAJCWdvdG8gcHV0X2JhY2s7CiAKLQlyZXQgPSBtZW1fY2dyb3VwX21vdmVfYWNjb3VudChwYywgY2hpbGQsIHBhcmVudCk7Ci0JaWYgKCFyZXQpCi0JCWNzc19wdXQoJnBhcmVudC0+Y3NzKTsJLyogZHJvcCBleHRyYSByZWZjbnQgYnkgdHJ5X2NoYXJnZSgpICovCi0JZWxzZQotCQltZW1fY2dyb3VwX2NhbmNlbF9jaGFyZ2UocGFyZW50KTsJLyogZG9lcyBjc3NfcHV0ICovCisJcmV0ID0gbWVtX2Nncm91cF9tb3ZlX2FjY291bnQocGMsIGNoaWxkLCBwYXJlbnQsIHRydWUpOworCWlmIChyZXQpCisJCW1lbV9jZ3JvdXBfY2FuY2VsX2NoYXJnZShwYXJlbnQpOwogcHV0X2JhY2s6CiAJcHV0YmFja19scnVfcGFnZShwYWdlKTsKIHB1dDoKQEAgLTE3NjAsNyArMTkxNyw3IEBACiAJcHJlZmV0Y2h3KHBjKTsKIAogCW1lbSA9IG1lbWNnOwotCXJldCA9IF9fbWVtX2Nncm91cF90cnlfY2hhcmdlKG1tLCBnZnBfbWFzaywgJm1lbSwgdHJ1ZSwgcGFnZSk7CisJcmV0ID0gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2UobW0sIGdmcF9tYXNrLCAmbWVtLCB0cnVlKTsKIAlpZiAocmV0IHx8ICFtZW0pCiAJCXJldHVybiByZXQ7CiAKQEAgLTE4ODAsMTQgKzIwMzcsMTQgQEAKIAlpZiAoIW1lbSkKIAkJZ290byBjaGFyZ2VfY3VyX21tOwogCSpwdHIgPSBtZW07Ci0JcmV0ID0gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2UoTlVMTCwgbWFzaywgcHRyLCB0cnVlLCBwYWdlKTsKKwlyZXQgPSBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZShOVUxMLCBtYXNrLCBwdHIsIHRydWUpOwogCS8qIGRyb3AgZXh0cmEgcmVmY250IGZyb20gdHJ5Z2V0ICovCiAJY3NzX3B1dCgmbWVtLT5jc3MpOwogCXJldHVybiByZXQ7CiBjaGFyZ2VfY3VyX21tOgogCWlmICh1bmxpa2VseSghbW0pKQogCQltbSA9ICZpbml0X21tOwotCXJldHVybiBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZShtbSwgbWFzaywgcHRyLCB0cnVlLCBwYWdlKTsKKwlyZXR1cm4gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2UobW0sIG1hc2ssIHB0ciwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yMDY0LDggKzIyMjEsNyBAQAogCW16ID0gcGFnZV9jZ3JvdXBfem9uZWluZm8ocGMpOwogCXVubG9ja19wYWdlX2Nncm91cChwYyk7CiAKLQlpZiAobWVtX2Nncm91cF9zb2Z0X2xpbWl0X2NoZWNrKG1lbSkpCi0JCW1lbV9jZ3JvdXBfdXBkYXRlX3RyZWUobWVtLCBwYWdlKTsKKwltZW1jZ19jaGVja19ldmVudHMobWVtLCBwYWdlKTsKIAkvKiBhdCBzd2Fwb3V0LCB0aGlzIG1lbWNnIHdpbGwgYmUgYWNjZXNzZWQgdG8gcmVjb3JkIHRvIHN3YXAgKi8KIAlpZiAoY3R5cGUgIT0gTUVNX0NHUk9VUF9DSEFSR0VfVFlQRV9TV0FQT1VUKQogCQljc3NfcHV0KCZtZW0tPmNzcyk7CkBAIC0yMTkyLDYgKzIzNDgsNjQgQEAKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CisKKy8qKgorICogbWVtX2Nncm91cF9tb3ZlX3N3YXBfYWNjb3VudCAtIG1vdmUgc3dhcCBjaGFyZ2UgYW5kIHN3YXBfY2dyb3VwJ3MgcmVjb3JkLgorICogQGVudHJ5OiBzd2FwIGVudHJ5IHRvIGJlIG1vdmVkCisgKiBAZnJvbTogIG1lbV9jZ3JvdXAgd2hpY2ggdGhlIGVudHJ5IGlzIG1vdmVkIGZyb20KKyAqIEB0bzogIG1lbV9jZ3JvdXAgd2hpY2ggdGhlIGVudHJ5IGlzIG1vdmVkIHRvCisgKiBAbmVlZF9maXh1cDogd2hldGhlciB3ZSBzaG91bGQgZml4dXAgcmVzX2NvdW50ZXJzIGFuZCByZWZjb3VudHMuCisgKgorICogSXQgc3VjY2VlZHMgb25seSB3aGVuIHRoZSBzd2FwX2Nncm91cCdzIHJlY29yZCBmb3IgdGhpcyBlbnRyeSBpcyB0aGUgc2FtZQorICogYXMgdGhlIG1lbV9jZ3JvdXAncyBpZCBvZiBAZnJvbS4KKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVJTlZBTCBvbiBmYWlsdXJlLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBoYXZlIGNoYXJnZWQgdG8gQHRvLCBJT1csIGNhbGxlZCByZXNfY291bnRlcl9jaGFyZ2UoKSBhYm91dAorICogYm90aCByZXMgYW5kIG1lbXN3LCBhbmQgY2FsbGVkIGNzc19nZXQoKS4KKyAqLworc3RhdGljIGludCBtZW1fY2dyb3VwX21vdmVfc3dhcF9hY2NvdW50KHN3cF9lbnRyeV90IGVudHJ5LAorCQlzdHJ1Y3QgbWVtX2Nncm91cCAqZnJvbSwgc3RydWN0IG1lbV9jZ3JvdXAgKnRvLCBib29sIG5lZWRfZml4dXApCit7CisJdW5zaWduZWQgc2hvcnQgb2xkX2lkLCBuZXdfaWQ7CisKKwlvbGRfaWQgPSBjc3NfaWQoJmZyb20tPmNzcyk7CisJbmV3X2lkID0gY3NzX2lkKCZ0by0+Y3NzKTsKKworCWlmIChzd2FwX2Nncm91cF9jbXB4Y2hnKGVudHJ5LCBvbGRfaWQsIG5ld19pZCkgPT0gb2xkX2lkKSB7CisJCW1lbV9jZ3JvdXBfc3dhcF9zdGF0aXN0aWNzKGZyb20sIGZhbHNlKTsKKwkJbWVtX2Nncm91cF9zd2FwX3N0YXRpc3RpY3ModG8sIHRydWUpOworCQkvKgorCQkgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgY2FsbGVkIGZyb20gdGFzayBtaWdyYXRpb24gY29udGV4dCBub3cuCisJCSAqIEl0IHBvc3Rwb25lcyByZXNfY291bnRlciBhbmQgcmVmY291bnQgaGFuZGxpbmcgdGlsbCB0aGUgZW5kCisJCSAqIG9mIHRhc2sgbWlncmF0aW9uKG1lbV9jZ3JvdXBfY2xlYXJfbWMoKSkgZm9yIHBlcmZvcm1hbmNlCisJCSAqIGltcHJvdmVtZW50LiBCdXQgd2UgY2Fubm90IHBvc3Rwb25lIG1lbV9jZ3JvdXBfZ2V0KHRvKQorCQkgKiBiZWNhdXNlIGlmIHRoZSBwcm9jZXNzIHRoYXQgaGFzIGJlZW4gbW92ZWQgdG8gQHRvIGRvZXMKKwkJICogc3dhcC1pbiwgdGhlIHJlZmNvdW50IG9mIEB0byBtaWdodCBiZSBkZWNyZWFzZWQgdG8gMC4KKwkJICovCisJCW1lbV9jZ3JvdXBfZ2V0KHRvKTsKKwkJaWYgKG5lZWRfZml4dXApIHsKKwkJCWlmICghbWVtX2Nncm91cF9pc19yb290KGZyb20pKQorCQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZmcm9tLT5tZW1zdywgUEFHRV9TSVpFKTsKKwkJCW1lbV9jZ3JvdXBfcHV0KGZyb20pOworCQkJLyoKKwkJCSAqIHdlIGNoYXJnZWQgYm90aCB0by0+cmVzIGFuZCB0by0+bWVtc3csIHNvIHdlIHNob3VsZAorCQkJICogdW5jaGFyZ2UgdG8tPnJlcy4KKwkJCSAqLworCQkJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QodG8pKQorCQkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZ0by0+cmVzLCBQQUdFX1NJWkUpOworCQkJY3NzX3B1dCgmdG8tPmNzcyk7CisJCX0KKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IG1lbV9jZ3JvdXBfbW92ZV9zd2FwX2FjY291bnQoc3dwX2VudHJ5X3QgZW50cnksCisJCXN0cnVjdCBtZW1fY2dyb3VwICpmcm9tLCBzdHJ1Y3QgbWVtX2Nncm91cCAqdG8sIGJvb2wgbmVlZF9maXh1cCkKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KICNlbmRpZgogCiAvKgpAQCAtMjIxNiw4ICsyNDMwLDcgQEAKIAl1bmxvY2tfcGFnZV9jZ3JvdXAocGMpOwogCiAJaWYgKG1lbSkgewotCQlyZXQgPSBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZShOVUxMLCBHRlBfS0VSTkVMLCAmbWVtLCBmYWxzZSwKLQkJCQkJCXBhZ2UpOworCQlyZXQgPSBfX21lbV9jZ3JvdXBfdHJ5X2NoYXJnZShOVUxMLCBHRlBfS0VSTkVMLCAmbWVtLCBmYWxzZSk7CiAJCWNzc19wdXQoJm1lbS0+Y3NzKTsKIAl9CiAJKnB0ciA9IG1lbTsKQEAgLTI1NDUsNyArMjc1OCw3IEBACiAJCXBjID0gbGlzdF9lbnRyeShsaXN0LT5wcmV2LCBzdHJ1Y3QgcGFnZV9jZ3JvdXAsIGxydSk7CiAJCWlmIChidXN5ID09IHBjKSB7CiAJCQlsaXN0X21vdmUoJnBjLT5scnUsIGxpc3QpOwotCQkJYnVzeSA9IDA7CisJCQlidXN5ID0gTlVMTDsKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpvbmUtPmxydV9sb2NrLCBmbGFncyk7CiAJCQljb250aW51ZTsKIAkJfQpAQCAtMjcwNCw3ICsyOTE3LDcgQEAKIG1lbV9jZ3JvdXBfZ2V0X2lkeF9zdGF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW0sIHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXBfaWR4X2RhdGEgKmQgPSBkYXRhOwotCWQtPnZhbCArPSBtZW1fY2dyb3VwX3JlYWRfc3RhdCgmbWVtLT5zdGF0LCBkLT5pZHgpOworCWQtPnZhbCArPSBtZW1fY2dyb3VwX3JlYWRfc3RhdChtZW0sIGQtPmlkeCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI3MTksNDAgKzI5MzIsNTAgQEAKIAkqdmFsID0gZC52YWw7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdTY0IG1lbV9jZ3JvdXBfdXNhZ2Uoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSwgYm9vbCBzd2FwKQoreworCXU2NCBpZHhfdmFsLCB2YWw7CisKKwlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtZW0pKSB7CisJCWlmICghc3dhcCkKKwkJCXJldHVybiByZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtLT5yZXMsIFJFU19VU0FHRSk7CisJCWVsc2UKKwkJCXJldHVybiByZXNfY291bnRlcl9yZWFkX3U2NCgmbWVtLT5tZW1zdywgUkVTX1VTQUdFKTsKKwl9CisKKwltZW1fY2dyb3VwX2dldF9yZWN1cnNpdmVfaWR4X3N0YXQobWVtLCBNRU1fQ0dST1VQX1NUQVRfQ0FDSEUsICZpZHhfdmFsKTsKKwl2YWwgPSBpZHhfdmFsOworCW1lbV9jZ3JvdXBfZ2V0X3JlY3Vyc2l2ZV9pZHhfc3RhdChtZW0sIE1FTV9DR1JPVVBfU1RBVF9SU1MsICZpZHhfdmFsKTsKKwl2YWwgKz0gaWR4X3ZhbDsKKworCWlmIChzd2FwKSB7CisJCW1lbV9jZ3JvdXBfZ2V0X3JlY3Vyc2l2ZV9pZHhfc3RhdChtZW0sCisJCQkJTUVNX0NHUk9VUF9TVEFUX1NXQVBPVVQsICZpZHhfdmFsKTsKKwkJdmFsICs9IGlkeF92YWw7CisJfQorCisJcmV0dXJuIHZhbCA8PCBQQUdFX1NISUZUOworfQorCiBzdGF0aWMgdTY0IG1lbV9jZ3JvdXBfcmVhZChzdHJ1Y3QgY2dyb3VwICpjb250LCBzdHJ1Y3QgY2Z0eXBlICpjZnQpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IG1lbV9jZ3JvdXBfZnJvbV9jb250KGNvbnQpOwotCXU2NCBpZHhfdmFsLCB2YWw7CisJdTY0IHZhbDsKIAlpbnQgdHlwZSwgbmFtZTsKIAogCXR5cGUgPSBNRU1GSUxFX1RZUEUoY2Z0LT5wcml2YXRlKTsKIAluYW1lID0gTUVNRklMRV9BVFRSKGNmdC0+cHJpdmF0ZSk7CiAJc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBfTUVNOgotCQlpZiAobmFtZSA9PSBSRVNfVVNBR0UgJiYgbWVtX2Nncm91cF9pc19yb290KG1lbSkpIHsKLQkJCW1lbV9jZ3JvdXBfZ2V0X3JlY3Vyc2l2ZV9pZHhfc3RhdChtZW0sCi0JCQkJTUVNX0NHUk9VUF9TVEFUX0NBQ0hFLCAmaWR4X3ZhbCk7Ci0JCQl2YWwgPSBpZHhfdmFsOwotCQkJbWVtX2Nncm91cF9nZXRfcmVjdXJzaXZlX2lkeF9zdGF0KG1lbSwKLQkJCQlNRU1fQ0dST1VQX1NUQVRfUlNTLCAmaWR4X3ZhbCk7Ci0JCQl2YWwgKz0gaWR4X3ZhbDsKLQkJCXZhbCA8PD0gUEFHRV9TSElGVDsKLQkJfSBlbHNlCisJCWlmIChuYW1lID09IFJFU19VU0FHRSkKKwkJCXZhbCA9IG1lbV9jZ3JvdXBfdXNhZ2UobWVtLCBmYWxzZSk7CisJCWVsc2UKIAkJCXZhbCA9IHJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW0tPnJlcywgbmFtZSk7CiAJCWJyZWFrOwogCWNhc2UgX01FTVNXQVA6Ci0JCWlmIChuYW1lID09IFJFU19VU0FHRSAmJiBtZW1fY2dyb3VwX2lzX3Jvb3QobWVtKSkgewotCQkJbWVtX2Nncm91cF9nZXRfcmVjdXJzaXZlX2lkeF9zdGF0KG1lbSwKLQkJCQlNRU1fQ0dST1VQX1NUQVRfQ0FDSEUsICZpZHhfdmFsKTsKLQkJCXZhbCA9IGlkeF92YWw7Ci0JCQltZW1fY2dyb3VwX2dldF9yZWN1cnNpdmVfaWR4X3N0YXQobWVtLAotCQkJCU1FTV9DR1JPVVBfU1RBVF9SU1MsICZpZHhfdmFsKTsKLQkJCXZhbCArPSBpZHhfdmFsOwotCQkJbWVtX2Nncm91cF9nZXRfcmVjdXJzaXZlX2lkeF9zdGF0KG1lbSwKLQkJCQlNRU1fQ0dST1VQX1NUQVRfU1dBUE9VVCwgJmlkeF92YWwpOwotCQkJdmFsICs9IGlkeF92YWw7Ci0JCQl2YWwgPDw9IFBBR0VfU0hJRlQ7Ci0JCX0gZWxzZQorCQlpZiAobmFtZSA9PSBSRVNfVVNBR0UpCisJCQl2YWwgPSBtZW1fY2dyb3VwX3VzYWdlKG1lbSwgdHJ1ZSk7CisJCWVsc2UKIAkJCXZhbCA9IHJlc19jb3VudGVyX3JlYWRfdTY0KCZtZW0tPm1lbXN3LCBuYW1lKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTI4NjUsNiArMzA4OCwzOSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdTY0IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2VfcmVhZChzdHJ1Y3QgY2dyb3VwICpjZ3JwLAorCQkJCQlzdHJ1Y3QgY2Z0eXBlICpjZnQpCit7CisJcmV0dXJuIG1lbV9jZ3JvdXBfZnJvbV9jb250KGNncnApLT5tb3ZlX2NoYXJnZV9hdF9pbW1pZ3JhdGU7Cit9CisKKyNpZmRlZiBDT05GSUdfTU1VCitzdGF0aWMgaW50IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2Vfd3JpdGUoc3RydWN0IGNncm91cCAqY2dycCwKKwkJCQkJc3RydWN0IGNmdHlwZSAqY2Z0LCB1NjQgdmFsKQoreworCXN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBtZW1fY2dyb3VwX2Zyb21fY29udChjZ3JwKTsKKworCWlmICh2YWwgPj0gKDEgPDwgTlJfTU9WRV9UWVBFKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJLyoKKwkgKiBXZSBjaGVjayB0aGlzIHZhbHVlIHNldmVyYWwgdGltZXMgaW4gYm90aCBpbiBjYW5fYXR0YWNoKCkgYW5kCisJICogYXR0YWNoKCksIHNvIHdlIG5lZWQgY2dyb3VwIGxvY2sgdG8gcHJldmVudCB0aGlzIHZhbHVlIGZyb20gYmVpbmcKKwkgKiBpbmNvbnNpc3RlbnQuCisJICovCisJY2dyb3VwX2xvY2soKTsKKwltZW0tPm1vdmVfY2hhcmdlX2F0X2ltbWlncmF0ZSA9IHZhbDsKKwljZ3JvdXBfdW5sb2NrKCk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitzdGF0aWMgaW50IG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2Vfd3JpdGUoc3RydWN0IGNncm91cCAqY2dycCwKKwkJCQkJc3RydWN0IGNmdHlwZSAqY2Z0LCB1NjQgdmFsKQoreworCXJldHVybiAtRU5PU1lTOworfQorI2VuZGlmCisKIAogLyogRm9yIHJlYWQgc3RhdGlzdGljcyAqLwogZW51bSB7CkBAIC0yOTEwLDE4ICszMTY2LDE4IEBACiAJczY0IHZhbDsKIAogCS8qIHBlciBjcHUgc3RhdCAqLwotCXZhbCA9IG1lbV9jZ3JvdXBfcmVhZF9zdGF0KCZtZW0tPnN0YXQsIE1FTV9DR1JPVVBfU1RBVF9DQUNIRSk7CisJdmFsID0gbWVtX2Nncm91cF9yZWFkX3N0YXQobWVtLCBNRU1fQ0dST1VQX1NUQVRfQ0FDSEUpOwogCXMtPnN0YXRbTUNTX0NBQ0hFXSArPSB2YWwgKiBQQUdFX1NJWkU7Ci0JdmFsID0gbWVtX2Nncm91cF9yZWFkX3N0YXQoJm1lbS0+c3RhdCwgTUVNX0NHUk9VUF9TVEFUX1JTUyk7CisJdmFsID0gbWVtX2Nncm91cF9yZWFkX3N0YXQobWVtLCBNRU1fQ0dST1VQX1NUQVRfUlNTKTsKIAlzLT5zdGF0W01DU19SU1NdICs9IHZhbCAqIFBBR0VfU0laRTsKLQl2YWwgPSBtZW1fY2dyb3VwX3JlYWRfc3RhdCgmbWVtLT5zdGF0LCBNRU1fQ0dST1VQX1NUQVRfRklMRV9NQVBQRUQpOworCXZhbCA9IG1lbV9jZ3JvdXBfcmVhZF9zdGF0KG1lbSwgTUVNX0NHUk9VUF9TVEFUX0ZJTEVfTUFQUEVEKTsKIAlzLT5zdGF0W01DU19GSUxFX01BUFBFRF0gKz0gdmFsICogUEFHRV9TSVpFOwotCXZhbCA9IG1lbV9jZ3JvdXBfcmVhZF9zdGF0KCZtZW0tPnN0YXQsIE1FTV9DR1JPVVBfU1RBVF9QR1BHSU5fQ09VTlQpOworCXZhbCA9IG1lbV9jZ3JvdXBfcmVhZF9zdGF0KG1lbSwgTUVNX0NHUk9VUF9TVEFUX1BHUEdJTl9DT1VOVCk7CiAJcy0+c3RhdFtNQ1NfUEdQR0lOXSArPSB2YWw7Ci0JdmFsID0gbWVtX2Nncm91cF9yZWFkX3N0YXQoJm1lbS0+c3RhdCwgTUVNX0NHUk9VUF9TVEFUX1BHUEdPVVRfQ09VTlQpOworCXZhbCA9IG1lbV9jZ3JvdXBfcmVhZF9zdGF0KG1lbSwgTUVNX0NHUk9VUF9TVEFUX1BHUEdPVVRfQ09VTlQpOwogCXMtPnN0YXRbTUNTX1BHUEdPVVRdICs9IHZhbDsKIAlpZiAoZG9fc3dhcF9hY2NvdW50KSB7Ci0JCXZhbCA9IG1lbV9jZ3JvdXBfcmVhZF9zdGF0KCZtZW0tPnN0YXQsIE1FTV9DR1JPVVBfU1RBVF9TV0FQT1VUKTsKKwkJdmFsID0gbWVtX2Nncm91cF9yZWFkX3N0YXQobWVtLCBNRU1fQ0dST1VQX1NUQVRfU1dBUE9VVCk7CiAJCXMtPnN0YXRbTUNTX1NXQVBdICs9IHZhbCAqIFBBR0VfU0laRTsKIAl9CiAKQEAgLTMwNDksMTIgKzMzMDUsMjQ5IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF90aHJlc2hvbGQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIHN3YXApCit7CisJc3RydWN0IG1lbV9jZ3JvdXBfdGhyZXNob2xkX2FyeSAqdDsKKwl1NjQgdXNhZ2U7CisJaW50IGk7CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJaWYgKCFzd2FwKQorCQl0ID0gcmN1X2RlcmVmZXJlbmNlKG1lbWNnLT50aHJlc2hvbGRzKTsKKwllbHNlCisJCXQgPSByY3VfZGVyZWZlcmVuY2UobWVtY2ctPm1lbXN3X3RocmVzaG9sZHMpOworCisJaWYgKCF0KQorCQlnb3RvIHVubG9jazsKKworCXVzYWdlID0gbWVtX2Nncm91cF91c2FnZShtZW1jZywgc3dhcCk7CisKKwkvKgorCSAqIGN1cnJlbnRfdGhyZXNob2xkIHBvaW50cyB0byB0aHJlc2hvbGQganVzdCBiZWxvdyB1c2FnZS4KKwkgKiBJZiBpdCdzIG5vdCB0cnVlLCBhIHRocmVzaG9sZCB3YXMgY3Jvc3NlZCBhZnRlciBsYXN0CisJICogY2FsbCBvZiBfX21lbV9jZ3JvdXBfdGhyZXNob2xkKCkuCisJICovCisJaSA9IGF0b21pY19yZWFkKCZ0LT5jdXJyZW50X3RocmVzaG9sZCk7CisKKwkvKgorCSAqIEl0ZXJhdGUgYmFja3dhcmQgb3ZlciBhcnJheSBvZiB0aHJlc2hvbGRzIHN0YXJ0aW5nIGZyb20KKwkgKiBjdXJyZW50X3RocmVzaG9sZCBhbmQgY2hlY2sgaWYgYSB0aHJlc2hvbGQgaXMgY3Jvc3NlZC4KKwkgKiBJZiBub25lIG9mIHRocmVzaG9sZHMgYmVsb3cgdXNhZ2UgaXMgY3Jvc3NlZCwgd2UgcmVhZAorCSAqIG9ubHkgb25lIGVsZW1lbnQgb2YgdGhlIGFycmF5IGhlcmUuCisJICovCisJZm9yICg7IGkgPj0gMCAmJiB1bmxpa2VseSh0LT5lbnRyaWVzW2ldLnRocmVzaG9sZCA+IHVzYWdlKTsgaS0tKQorCQlldmVudGZkX3NpZ25hbCh0LT5lbnRyaWVzW2ldLmV2ZW50ZmQsIDEpOworCisJLyogaSA9IGN1cnJlbnRfdGhyZXNob2xkICsgMSAqLworCWkrKzsKKworCS8qCisJICogSXRlcmF0ZSBmb3J3YXJkIG92ZXIgYXJyYXkgb2YgdGhyZXNob2xkcyBzdGFydGluZyBmcm9tCisJICogY3VycmVudF90aHJlc2hvbGQrMSBhbmQgY2hlY2sgaWYgYSB0aHJlc2hvbGQgaXMgY3Jvc3NlZC4KKwkgKiBJZiBub25lIG9mIHRocmVzaG9sZHMgYWJvdmUgdXNhZ2UgaXMgY3Jvc3NlZCwgd2UgcmVhZAorCSAqIG9ubHkgb25lIGVsZW1lbnQgb2YgdGhlIGFycmF5IGhlcmUuCisJICovCisJZm9yICg7IGkgPCB0LT5zaXplICYmIHVubGlrZWx5KHQtPmVudHJpZXNbaV0udGhyZXNob2xkIDw9IHVzYWdlKTsgaSsrKQorCQlldmVudGZkX3NpZ25hbCh0LT5lbnRyaWVzW2ldLmV2ZW50ZmQsIDEpOworCisJLyogVXBkYXRlIGN1cnJlbnRfdGhyZXNob2xkICovCisJYXRvbWljX3NldCgmdC0+Y3VycmVudF90aHJlc2hvbGQsIGkgLSAxKTsKK3VubG9jazoKKwlyY3VfcmVhZF91bmxvY2soKTsKK30KKworc3RhdGljIHZvaWQgbWVtX2Nncm91cF90aHJlc2hvbGQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQoreworCV9fbWVtX2Nncm91cF90aHJlc2hvbGQobWVtY2csIGZhbHNlKTsKKwlpZiAoZG9fc3dhcF9hY2NvdW50KQorCQlfX21lbV9jZ3JvdXBfdGhyZXNob2xkKG1lbWNnLCB0cnVlKTsKK30KKworc3RhdGljIGludCBjb21wYXJlX3RocmVzaG9sZHMoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKK3sKKwljb25zdCBzdHJ1Y3QgbWVtX2Nncm91cF90aHJlc2hvbGQgKl9hID0gYTsKKwljb25zdCBzdHJ1Y3QgbWVtX2Nncm91cF90aHJlc2hvbGQgKl9iID0gYjsKKworCXJldHVybiBfYS0+dGhyZXNob2xkIC0gX2ItPnRocmVzaG9sZDsKK30KKworc3RhdGljIGludCBtZW1fY2dyb3VwX3JlZ2lzdGVyX2V2ZW50KHN0cnVjdCBjZ3JvdXAgKmNncnAsIHN0cnVjdCBjZnR5cGUgKmNmdCwKKwkJc3RydWN0IGV2ZW50ZmRfY3R4ICpldmVudGZkLCBjb25zdCBjaGFyICphcmdzKQoreworCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9jb250KGNncnApOworCXN0cnVjdCBtZW1fY2dyb3VwX3RocmVzaG9sZF9hcnkgKnRocmVzaG9sZHMsICp0aHJlc2hvbGRzX25ldzsKKwlpbnQgdHlwZSA9IE1FTUZJTEVfVFlQRShjZnQtPnByaXZhdGUpOworCXU2NCB0aHJlc2hvbGQsIHVzYWdlOworCWludCBzaXplOworCWludCBpLCByZXQ7CisKKwlyZXQgPSByZXNfY291bnRlcl9tZW1wYXJzZV93cml0ZV9zdHJhdGVneShhcmdzLCAmdGhyZXNob2xkKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmbWVtY2ctPnRocmVzaG9sZHNfbG9jayk7CisJaWYgKHR5cGUgPT0gX01FTSkKKwkJdGhyZXNob2xkcyA9IG1lbWNnLT50aHJlc2hvbGRzOworCWVsc2UgaWYgKHR5cGUgPT0gX01FTVNXQVApCisJCXRocmVzaG9sZHMgPSBtZW1jZy0+bWVtc3dfdGhyZXNob2xkczsKKwllbHNlCisJCUJVRygpOworCisJdXNhZ2UgPSBtZW1fY2dyb3VwX3VzYWdlKG1lbWNnLCB0eXBlID09IF9NRU1TV0FQKTsKKworCS8qIENoZWNrIGlmIGEgdGhyZXNob2xkIGNyb3NzZWQgYmVmb3JlIGFkZGluZyBhIG5ldyBvbmUgKi8KKwlpZiAodGhyZXNob2xkcykKKwkJX19tZW1fY2dyb3VwX3RocmVzaG9sZChtZW1jZywgdHlwZSA9PSBfTUVNU1dBUCk7CisKKwlpZiAodGhyZXNob2xkcykKKwkJc2l6ZSA9IHRocmVzaG9sZHMtPnNpemUgKyAxOworCWVsc2UKKwkJc2l6ZSA9IDE7CisKKwkvKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIG5ldyBhcnJheSBvZiB0aHJlc2hvbGRzICovCisJdGhyZXNob2xkc19uZXcgPSBrbWFsbG9jKHNpemVvZigqdGhyZXNob2xkc19uZXcpICsKKwkJCXNpemUgKiBzaXplb2Yoc3RydWN0IG1lbV9jZ3JvdXBfdGhyZXNob2xkKSwKKwkJCUdGUF9LRVJORUwpOworCWlmICghdGhyZXNob2xkc19uZXcpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byB1bmxvY2s7CisJfQorCXRocmVzaG9sZHNfbmV3LT5zaXplID0gc2l6ZTsKKworCS8qIENvcHkgdGhyZXNob2xkcyAoaWYgYW55KSB0byBuZXcgYXJyYXkgKi8KKwlpZiAodGhyZXNob2xkcykKKwkJbWVtY3B5KHRocmVzaG9sZHNfbmV3LT5lbnRyaWVzLCB0aHJlc2hvbGRzLT5lbnRyaWVzLAorCQkJCXRocmVzaG9sZHMtPnNpemUgKgorCQkJCXNpemVvZihzdHJ1Y3QgbWVtX2Nncm91cF90aHJlc2hvbGQpKTsKKwkvKiBBZGQgbmV3IHRocmVzaG9sZCAqLworCXRocmVzaG9sZHNfbmV3LT5lbnRyaWVzW3NpemUgLSAxXS5ldmVudGZkID0gZXZlbnRmZDsKKwl0aHJlc2hvbGRzX25ldy0+ZW50cmllc1tzaXplIC0gMV0udGhyZXNob2xkID0gdGhyZXNob2xkOworCisJLyogU29ydCB0aHJlc2hvbGRzLiBSZWdpc3RlcmluZyBvZiBuZXcgdGhyZXNob2xkIGlzbid0IHRpbWUtY3JpdGljYWwgKi8KKwlzb3J0KHRocmVzaG9sZHNfbmV3LT5lbnRyaWVzLCBzaXplLAorCQkJc2l6ZW9mKHN0cnVjdCBtZW1fY2dyb3VwX3RocmVzaG9sZCksCisJCQljb21wYXJlX3RocmVzaG9sZHMsIE5VTEwpOworCisJLyogRmluZCBjdXJyZW50IHRocmVzaG9sZCAqLworCWF0b21pY19zZXQoJnRocmVzaG9sZHNfbmV3LT5jdXJyZW50X3RocmVzaG9sZCwgLTEpOworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJaWYgKHRocmVzaG9sZHNfbmV3LT5lbnRyaWVzW2ldLnRocmVzaG9sZCA8IHVzYWdlKSB7CisJCQkvKgorCQkJICogdGhyZXNob2xkc19uZXctPmN1cnJlbnRfdGhyZXNob2xkIHdpbGwgbm90IGJlIHVzZWQKKwkJCSAqIHVudGlsIHJjdV9hc3NpZ25fcG9pbnRlcigpLCBzbyBpdCdzIHNhZmUgdG8gaW5jcmVtZW50CisJCQkgKiBpdCBoZXJlLgorCQkJICovCisJCQlhdG9taWNfaW5jKCZ0aHJlc2hvbGRzX25ldy0+Y3VycmVudF90aHJlc2hvbGQpOworCQl9CisJfQorCisJaWYgKHR5cGUgPT0gX01FTSkKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKG1lbWNnLT50aHJlc2hvbGRzLCB0aHJlc2hvbGRzX25ldyk7CisJZWxzZQorCQlyY3VfYXNzaWduX3BvaW50ZXIobWVtY2ctPm1lbXN3X3RocmVzaG9sZHMsIHRocmVzaG9sZHNfbmV3KTsKKworCS8qIFRvIGJlIHN1cmUgdGhhdCBub2JvZHkgdXNlcyB0aHJlc2hvbGRzIGJlZm9yZSBmcmVlaW5nIGl0ICovCisJc3luY2hyb25pemVfcmN1KCk7CisKKwlrZnJlZSh0aHJlc2hvbGRzKTsKK3VubG9jazoKKwltdXRleF91bmxvY2soJm1lbWNnLT50aHJlc2hvbGRzX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBtZW1fY2dyb3VwX3VucmVnaXN0ZXJfZXZlbnQoc3RydWN0IGNncm91cCAqY2dycCwgc3RydWN0IGNmdHlwZSAqY2Z0LAorCQlzdHJ1Y3QgZXZlbnRmZF9jdHggKmV2ZW50ZmQpCit7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX2NvbnQoY2dycCk7CisJc3RydWN0IG1lbV9jZ3JvdXBfdGhyZXNob2xkX2FyeSAqdGhyZXNob2xkcywgKnRocmVzaG9sZHNfbmV3OworCWludCB0eXBlID0gTUVNRklMRV9UWVBFKGNmdC0+cHJpdmF0ZSk7CisJdTY0IHVzYWdlOworCWludCBzaXplID0gMDsKKwlpbnQgaSwgaiwgcmV0OworCisJbXV0ZXhfbG9jaygmbWVtY2ctPnRocmVzaG9sZHNfbG9jayk7CisJaWYgKHR5cGUgPT0gX01FTSkKKwkJdGhyZXNob2xkcyA9IG1lbWNnLT50aHJlc2hvbGRzOworCWVsc2UgaWYgKHR5cGUgPT0gX01FTVNXQVApCisJCXRocmVzaG9sZHMgPSBtZW1jZy0+bWVtc3dfdGhyZXNob2xkczsKKwllbHNlCisJCUJVRygpOworCisJLyoKKwkgKiBTb21ldGhpbmcgd2VudCB3cm9uZyBpZiB3ZSB0cnlpbmcgdG8gdW5yZWdpc3RlciBhIHRocmVzaG9sZAorCSAqIGlmIHdlIGRvbid0IGhhdmUgdGhyZXNob2xkcworCSAqLworCUJVR19PTighdGhyZXNob2xkcyk7CisKKwl1c2FnZSA9IG1lbV9jZ3JvdXBfdXNhZ2UobWVtY2csIHR5cGUgPT0gX01FTVNXQVApOworCisJLyogQ2hlY2sgaWYgYSB0aHJlc2hvbGQgY3Jvc3NlZCBiZWZvcmUgcmVtb3ZpbmcgKi8KKwlfX21lbV9jZ3JvdXBfdGhyZXNob2xkKG1lbWNnLCB0eXBlID09IF9NRU1TV0FQKTsKKworCS8qIENhbGN1bGF0ZSBuZXcgbnVtYmVyIG9mIHRocmVzaG9sZCAqLworCWZvciAoaSA9IDA7IGkgPCB0aHJlc2hvbGRzLT5zaXplOyBpKyspIHsKKwkJaWYgKHRocmVzaG9sZHMtPmVudHJpZXNbaV0uZXZlbnRmZCAhPSBldmVudGZkKQorCQkJc2l6ZSsrOworCX0KKworCS8qIFNldCB0aHJlc2hvbGRzIGFycmF5IHRvIE5VTEwgaWYgd2UgZG9uJ3QgaGF2ZSB0aHJlc2hvbGRzICovCisJaWYgKCFzaXplKSB7CisJCXRocmVzaG9sZHNfbmV3ID0gTlVMTDsKKwkJZ290byBhc3NpZ247CisJfQorCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgYXJyYXkgb2YgdGhyZXNob2xkcyAqLworCXRocmVzaG9sZHNfbmV3ID0ga21hbGxvYyhzaXplb2YoKnRocmVzaG9sZHNfbmV3KSArCisJCQlzaXplICogc2l6ZW9mKHN0cnVjdCBtZW1fY2dyb3VwX3RocmVzaG9sZCksCisJCQlHRlBfS0VSTkVMKTsKKwlpZiAoIXRocmVzaG9sZHNfbmV3KSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gdW5sb2NrOworCX0KKwl0aHJlc2hvbGRzX25ldy0+c2l6ZSA9IHNpemU7CisKKwkvKiBDb3B5IHRocmVzaG9sZHMgYW5kIGZpbmQgY3VycmVudCB0aHJlc2hvbGQgKi8KKwlhdG9taWNfc2V0KCZ0aHJlc2hvbGRzX25ldy0+Y3VycmVudF90aHJlc2hvbGQsIC0xKTsKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IHRocmVzaG9sZHMtPnNpemU7IGkrKykgeworCQlpZiAodGhyZXNob2xkcy0+ZW50cmllc1tpXS5ldmVudGZkID09IGV2ZW50ZmQpCisJCQljb250aW51ZTsKKworCQl0aHJlc2hvbGRzX25ldy0+ZW50cmllc1tqXSA9IHRocmVzaG9sZHMtPmVudHJpZXNbaV07CisJCWlmICh0aHJlc2hvbGRzX25ldy0+ZW50cmllc1tqXS50aHJlc2hvbGQgPCB1c2FnZSkgeworCQkJLyoKKwkJCSAqIHRocmVzaG9sZHNfbmV3LT5jdXJyZW50X3RocmVzaG9sZCB3aWxsIG5vdCBiZSB1c2VkCisJCQkgKiB1bnRpbCByY3VfYXNzaWduX3BvaW50ZXIoKSwgc28gaXQncyBzYWZlIHRvIGluY3JlbWVudAorCQkJICogaXQgaGVyZS4KKwkJCSAqLworCQkJYXRvbWljX2luYygmdGhyZXNob2xkc19uZXctPmN1cnJlbnRfdGhyZXNob2xkKTsKKwkJfQorCQlqKys7CisJfQorCithc3NpZ246CisJaWYgKHR5cGUgPT0gX01FTSkKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKG1lbWNnLT50aHJlc2hvbGRzLCB0aHJlc2hvbGRzX25ldyk7CisJZWxzZQorCQlyY3VfYXNzaWduX3BvaW50ZXIobWVtY2ctPm1lbXN3X3RocmVzaG9sZHMsIHRocmVzaG9sZHNfbmV3KTsKKworCS8qIFRvIGJlIHN1cmUgdGhhdCBub2JvZHkgdXNlcyB0aHJlc2hvbGRzIGJlZm9yZSBmcmVlaW5nIGl0ICovCisJc3luY2hyb25pemVfcmN1KCk7CisKKwlrZnJlZSh0aHJlc2hvbGRzKTsKK3VubG9jazoKKwltdXRleF91bmxvY2soJm1lbWNnLT50aHJlc2hvbGRzX2xvY2spOworCisJcmV0dXJuIHJldDsKK30KIAogc3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtX2Nncm91cF9maWxlc1tdID0gewogCXsKIAkJLm5hbWUgPSAidXNhZ2VfaW5fYnl0ZXMiLAogCQkucHJpdmF0ZSA9IE1FTUZJTEVfUFJJVkFURShfTUVNLCBSRVNfVVNBR0UpLAogCQkucmVhZF91NjQgPSBtZW1fY2dyb3VwX3JlYWQsCisJCS5yZWdpc3Rlcl9ldmVudCA9IG1lbV9jZ3JvdXBfcmVnaXN0ZXJfZXZlbnQsCisJCS51bnJlZ2lzdGVyX2V2ZW50ID0gbWVtX2Nncm91cF91bnJlZ2lzdGVyX2V2ZW50LAogCX0sCiAJewogCQkubmFtZSA9ICJtYXhfdXNhZ2VfaW5fYnl0ZXMiLApAQCAtMzA5OCw2ICszNTkxLDExIEBACiAJCS5yZWFkX3U2NCA9IG1lbV9jZ3JvdXBfc3dhcHBpbmVzc19yZWFkLAogCQkud3JpdGVfdTY0ID0gbWVtX2Nncm91cF9zd2FwcGluZXNzX3dyaXRlLAogCX0sCisJeworCQkubmFtZSA9ICJtb3ZlX2NoYXJnZV9hdF9pbW1pZ3JhdGUiLAorCQkucmVhZF91NjQgPSBtZW1fY2dyb3VwX21vdmVfY2hhcmdlX3JlYWQsCisJCS53cml0ZV91NjQgPSBtZW1fY2dyb3VwX21vdmVfY2hhcmdlX3dyaXRlLAorCX0sCiB9OwogCiAjaWZkZWYgQ09ORklHX0NHUk9VUF9NRU1fUkVTX0NUTFJfU1dBUApAQCAtMzEwNiw2ICszNjA0LDggQEAKIAkJLm5hbWUgPSAibWVtc3cudXNhZ2VfaW5fYnl0ZXMiLAogCQkucHJpdmF0ZSA9IE1FTUZJTEVfUFJJVkFURShfTUVNU1dBUCwgUkVTX1VTQUdFKSwKIAkJLnJlYWRfdTY0ID0gbWVtX2Nncm91cF9yZWFkLAorCQkucmVnaXN0ZXJfZXZlbnQgPSBtZW1fY2dyb3VwX3JlZ2lzdGVyX2V2ZW50LAorCQkudW5yZWdpc3Rlcl9ldmVudCA9IG1lbV9jZ3JvdXBfdW5yZWdpc3Rlcl9ldmVudCwKIAl9LAogCXsKIAkJLm5hbWUgPSAibWVtc3cubWF4X3VzYWdlX2luX2J5dGVzIiwKQEAgLTMxODAsMTcgKzM2ODAsMTIgQEAKIAlrZnJlZShtZW0tPmluZm8ubm9kZWluZm9bbm9kZV0pOwogfQogCi1zdGF0aWMgaW50IG1lbV9jZ3JvdXBfc2l6ZSh2b2lkKQotewotCWludCBjcHVzdGF0X3NpemUgPSBucl9jcHVfaWRzICogc2l6ZW9mKHN0cnVjdCBtZW1fY2dyb3VwX3N0YXRfY3B1KTsKLQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBtZW1fY2dyb3VwKSArIGNwdXN0YXRfc2l6ZTsKLX0KLQogc3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHZvaWQpCiB7CiAJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbTsKLQlpbnQgc2l6ZSA9IG1lbV9jZ3JvdXBfc2l6ZSgpOworCWludCBzaXplID0gc2l6ZW9mKHN0cnVjdCBtZW1fY2dyb3VwKTsKIAorCS8qIENhbiBiZSB2ZXJ5IGJpZyBpZiBNQVhfTlVNTk9ERVMgaXMgdmVyeSBiaWcgKi8KIAlpZiAoc2l6ZSA8IFBBR0VfU0laRSkKIAkJbWVtID0ga21hbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKIAllbHNlCkBAIC0zMTk4LDYgKzM2OTMsMTQgQEAKIAogCWlmIChtZW0pCiAJCW1lbXNldChtZW0sIDAsIHNpemUpOworCW1lbS0+c3RhdCA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgbWVtX2Nncm91cF9zdGF0X2NwdSk7CisJaWYgKCFtZW0tPnN0YXQpIHsKKwkJaWYgKHNpemUgPCBQQUdFX1NJWkUpCisJCQlrZnJlZShtZW0pOworCQllbHNlCisJCQl2ZnJlZShtZW0pOworCQltZW0gPSBOVUxMOworCX0KIAlyZXR1cm4gbWVtOwogfQogCkBAIC0zMjIyLDcgKzM3MjUsOCBAQAogCWZvcl9lYWNoX25vZGVfc3RhdGUobm9kZSwgTl9QT1NTSUJMRSkKIAkJZnJlZV9tZW1fY2dyb3VwX3Blcl96b25lX2luZm8obWVtLCBub2RlKTsKIAotCWlmIChtZW1fY2dyb3VwX3NpemUoKSA8IFBBR0VfU0laRSkKKwlmcmVlX3BlcmNwdShtZW0tPnN0YXQpOworCWlmIChzaXplb2Yoc3RydWN0IG1lbV9jZ3JvdXApIDwgUEFHRV9TSVpFKQogCQlrZnJlZShtZW0pOwogCWVsc2UKIAkJdmZyZWUobWVtKTsKQEAgLTMyMzMsOSArMzczNyw5IEBACiAJYXRvbWljX2luYygmbWVtLT5yZWZjbnQpOwogfQogCi1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3B1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQorc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX3B1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtLCBpbnQgY291bnQpCiB7Ci0JaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJm1lbS0+cmVmY250KSkgeworCWlmIChhdG9taWNfc3ViX2FuZF90ZXN0KGNvdW50LCAmbWVtLT5yZWZjbnQpKSB7CiAJCXN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQgPSBwYXJlbnRfbWVtX2Nncm91cChtZW0pOwogCQlfX21lbV9jZ3JvdXBfZnJlZShtZW0pOwogCQlpZiAocGFyZW50KQpAQCAtMzI0Myw2ICszNzQ3LDExIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3B1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtKQoreworCV9fbWVtX2Nncm91cF9wdXQobWVtLCAxKTsKK30KKwogLyoKICAqIFJldHVybnMgdGhlIHBhcmVudCBtZW1fY2dyb3VwIGluIG1lbWNncm91cCBoaWVyYXJjaHkgd2l0aCBoaWVyYXJjaHkgZW5hYmxlZC4KICAqLwpAQCAtMzMxOSw3ICszODI4LDYgQEAKIAkJCUlOSVRfV09SSygmc3RvY2stPndvcmssIGRyYWluX2xvY2FsX3N0b2NrKTsKIAkJfQogCQlob3RjcHVfbm90aWZpZXIobWVtY2dfc3RvY2tfY3B1X2NhbGxiYWNrLCAwKTsKLQogCX0gZWxzZSB7CiAJCXBhcmVudCA9IG1lbV9jZ3JvdXBfZnJvbV9jb250KGNvbnQtPnBhcmVudCk7CiAJCW1lbS0+dXNlX2hpZXJhcmNoeSA9IHBhcmVudC0+dXNlX2hpZXJhcmNoeTsKQEAgLTMzNDUsNiArMzg1Myw4IEBACiAJaWYgKHBhcmVudCkKIAkJbWVtLT5zd2FwcGluZXNzID0gZ2V0X3N3YXBwaW5lc3MocGFyZW50KTsKIAlhdG9taWNfc2V0KCZtZW0tPnJlZmNudCwgMSk7CisJbWVtLT5tb3ZlX2NoYXJnZV9hdF9pbW1pZ3JhdGUgPSAwOworCW11dGV4X2luaXQoJm1lbS0+dGhyZXNob2xkc19sb2NrKTsKIAlyZXR1cm4gJm1lbS0+Y3NzOwogZnJlZV9vdXQ6CiAJX19tZW1fY2dyb3VwX2ZyZWUobWVtKTsKQEAgLTMzODEsMTYgKzM4OTEsNDQ0IEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmIENPTkZJR19NTVUKKy8qIEhhbmRsZXJzIGZvciBtb3ZlIGNoYXJnZSBhdCB0YXNrIG1pZ3JhdGlvbi4gKi8KKyNkZWZpbmUgUFJFQ0hBUkdFX0NPVU5UX0FUX09OQ0UJMjU2CitzdGF0aWMgaW50IG1lbV9jZ3JvdXBfZG9fcHJlY2hhcmdlKHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJaW50IHJldCA9IDA7CisJaW50IGJhdGNoX2NvdW50ID0gUFJFQ0hBUkdFX0NPVU5UX0FUX09OQ0U7CisJc3RydWN0IG1lbV9jZ3JvdXAgKm1lbSA9IG1jLnRvOworCisJaWYgKG1lbV9jZ3JvdXBfaXNfcm9vdChtZW0pKSB7CisJCW1jLnByZWNoYXJnZSArPSBjb3VudDsKKwkJLyogd2UgZG9uJ3QgbmVlZCBjc3NfZ2V0IGZvciByb290ICovCisJCXJldHVybiByZXQ7CisJfQorCS8qIHRyeSB0byBjaGFyZ2UgYXQgb25jZSAqLworCWlmIChjb3VudCA+IDEpIHsKKwkJc3RydWN0IHJlc19jb3VudGVyICpkdW1teTsKKwkJLyoKKwkJICogIm1lbSIgY2Fubm90IGJlIHVuZGVyIHJtZGlyKCkgYmVjYXVzZSB3ZSd2ZSBhbHJlYWR5IGNoZWNrZWQKKwkJICogYnkgY2dyb3VwX2xvY2tfbGl2ZV9jZ3JvdXAoKSB0aGF0IGl0IGlzIG5vdCByZW1vdmVkIGFuZCB3ZQorCQkgKiBhcmUgc3RpbGwgdW5kZXIgdGhlIHNhbWUgY2dyb3VwX211dGV4LiBTbyB3ZSBjYW4gcG9zdHBvbmUKKwkJICogY3NzX2dldCgpLgorCQkgKi8KKwkJaWYgKHJlc19jb3VudGVyX2NoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSAqIGNvdW50LCAmZHVtbXkpKQorCQkJZ290byBvbmVfYnlfb25lOworCQlpZiAoZG9fc3dhcF9hY2NvdW50ICYmIHJlc19jb3VudGVyX2NoYXJnZSgmbWVtLT5tZW1zdywKKwkJCQkJCVBBR0VfU0laRSAqIGNvdW50LCAmZHVtbXkpKSB7CisJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWVtLT5yZXMsIFBBR0VfU0laRSAqIGNvdW50KTsKKwkJCWdvdG8gb25lX2J5X29uZTsKKwkJfQorCQltYy5wcmVjaGFyZ2UgKz0gY291bnQ7CisJCVZNX0JVR19PTih0ZXN0X2JpdChDU1NfUk9PVCwgJm1lbS0+Y3NzLmZsYWdzKSk7CisJCVdBUk5fT05fT05DRShjb3VudCA+IElOVF9NQVgpOworCQlfX2Nzc19nZXQoJm1lbS0+Y3NzLCAoaW50KWNvdW50KTsKKwkJcmV0dXJuIHJldDsKKwl9CitvbmVfYnlfb25lOgorCS8qIGZhbGwgYmFjayB0byBvbmUgYnkgb25lIGNoYXJnZSAqLworCXdoaWxlIChjb3VudC0tKSB7CisJCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCQkJcmV0ID0gLUVJTlRSOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFiYXRjaF9jb3VudC0tKSB7CisJCQliYXRjaF9jb3VudCA9IFBSRUNIQVJHRV9DT1VOVF9BVF9PTkNFOworCQkJY29uZF9yZXNjaGVkKCk7CisJCX0KKwkJcmV0ID0gX19tZW1fY2dyb3VwX3RyeV9jaGFyZ2UoTlVMTCwgR0ZQX0tFUk5FTCwgJm1lbSwgZmFsc2UpOworCQlpZiAocmV0IHx8ICFtZW0pCisJCQkvKiBtZW1fY2dyb3VwX2NsZWFyX21jKCkgd2lsbCBkbyB1bmNoYXJnZSBsYXRlciAqLworCQkJcmV0dXJuIC1FTk9NRU07CisJCW1jLnByZWNoYXJnZSsrOworCX0KKwlyZXR1cm4gcmV0OworfQorI2Vsc2UJLyogIUNPTkZJR19NTVUgKi8KK3N0YXRpYyBpbnQgbWVtX2Nncm91cF9jYW5fYXR0YWNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywKKwkJCQlzdHJ1Y3QgY2dyb3VwICpjZ3JvdXAsCisJCQkJc3RydWN0IHRhc2tfc3RydWN0ICpwLAorCQkJCWJvb2wgdGhyZWFkZ3JvdXApCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAorCQkJCXN0cnVjdCBjZ3JvdXAgKmNncm91cCwKKwkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCisJCQkJYm9vbCB0aHJlYWRncm91cCkKK3sKK30KIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfbW92ZV90YXNrKHN0cnVjdCBjZ3JvdXBfc3Vic3lzICpzcywKIAkJCQlzdHJ1Y3QgY2dyb3VwICpjb250LAogCQkJCXN0cnVjdCBjZ3JvdXAgKm9sZF9jb250LAogCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKIAkJCQlib29sIHRocmVhZGdyb3VwKQogeworfQorI2VuZGlmCisKKy8qKgorICogaXNfdGFyZ2V0X3B0ZV9mb3JfbWMgLSBjaGVjayBhIHB0ZSB3aGV0aGVyIGl0IGlzIHZhbGlkIGZvciBtb3ZlIGNoYXJnZQorICogQHZtYTogdGhlIHZtYSB0aGUgcHRlIHRvIGJlIGNoZWNrZWQgYmVsb25ncworICogQGFkZHI6IHRoZSBhZGRyZXNzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHB0ZSB0byBiZSBjaGVja2VkCisgKiBAcHRlbnQ6IHRoZSBwdGUgdG8gYmUgY2hlY2tlZAorICogQHRhcmdldDogdGhlIHBvaW50ZXIgdGhlIHRhcmdldCBwYWdlIG9yIHN3YXAgZW50IHdpbGwgYmUgc3RvcmVkKGNhbiBiZSBOVUxMKQorICoKKyAqIFJldHVybnMKKyAqICAgMChNQ19UQVJHRVRfTk9ORSk6IGlmIHRoZSBwdGUgaXMgbm90IGEgdGFyZ2V0IGZvciBtb3ZlIGNoYXJnZS4KKyAqICAgMShNQ19UQVJHRVRfUEFHRSk6IGlmIHRoZSBwYWdlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwdGUgaXMgYSB0YXJnZXQgZm9yCisgKiAgICAgbW92ZSBjaGFyZ2UuIGlmIEB0YXJnZXQgaXMgbm90IE5VTEwsIHRoZSBwYWdlIGlzIHN0b3JlZCBpbiB0YXJnZXQtPnBhZ2UKKyAqICAgICB3aXRoIGV4dHJhIHJlZmNudCBnb3QoQ2FsbGVycyBzaG91bGQgaGFuZGxlIGl0KS4KKyAqICAgMihNQ19UQVJHRVRfU1dBUCk6IGlmIHRoZSBzd2FwIGVudHJ5IGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwdGUgaXMgYQorICogICAgIHRhcmdldCBmb3IgY2hhcmdlIG1pZ3JhdGlvbi4gaWYgQHRhcmdldCBpcyBub3QgTlVMTCwgdGhlIGVudHJ5IGlzIHN0b3JlZAorICogICAgIGluIHRhcmdldC0+ZW50LgorICoKKyAqIENhbGxlZCB3aXRoIHB0ZSBsb2NrIGhlbGQuCisgKi8KK3VuaW9uIG1jX3RhcmdldCB7CisJc3RydWN0IHBhZ2UJKnBhZ2U7CisJc3dwX2VudHJ5X3QJZW50OworfTsKKworZW51bSBtY190YXJnZXRfdHlwZSB7CisJTUNfVEFSR0VUX05PTkUsCS8qIG5vdCB1c2VkICovCisJTUNfVEFSR0VUX1BBR0UsCisJTUNfVEFSR0VUX1NXQVAsCit9OworCitzdGF0aWMgaW50IGlzX3RhcmdldF9wdGVfZm9yX21jKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQl1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZW50LCB1bmlvbiBtY190YXJnZXQgKnRhcmdldCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CisJc3RydWN0IHBhZ2VfY2dyb3VwICpwYzsKKwlpbnQgcmV0ID0gMDsKKwlzd3BfZW50cnlfdCBlbnQgPSB7IC52YWwgPSAwIH07CisJaW50IHVzYWdlX2NvdW50ID0gMDsKKwlib29sIG1vdmVfYW5vbiA9IHRlc3RfYml0KE1PVkVfQ0hBUkdFX1RZUEVfQU5PTiwKKwkJCQkJJm1jLnRvLT5tb3ZlX2NoYXJnZV9hdF9pbW1pZ3JhdGUpOworCisJaWYgKCFwdGVfcHJlc2VudChwdGVudCkpIHsKKwkJLyogVE9ETzogaGFuZGxlIHN3YXAgb2Ygc2htZXMvdG1wZnMgKi8KKwkJaWYgKHB0ZV9ub25lKHB0ZW50KSB8fCBwdGVfZmlsZShwdGVudCkpCisJCQlyZXR1cm4gMDsKKwkJZWxzZSBpZiAoaXNfc3dhcF9wdGUocHRlbnQpKSB7CisJCQllbnQgPSBwdGVfdG9fc3dwX2VudHJ5KHB0ZW50KTsKKwkJCWlmICghbW92ZV9hbm9uIHx8IG5vbl9zd2FwX2VudHJ5KGVudCkpCisJCQkJcmV0dXJuIDA7CisJCQl1c2FnZV9jb3VudCA9IG1lbV9jZ3JvdXBfY291bnRfc3dhcF91c2VyKGVudCwgJnBhZ2UpOworCQl9CisJfSBlbHNlIHsKKwkJcGFnZSA9IHZtX25vcm1hbF9wYWdlKHZtYSwgYWRkciwgcHRlbnQpOworCQlpZiAoIXBhZ2UgfHwgIXBhZ2VfbWFwcGVkKHBhZ2UpKQorCQkJcmV0dXJuIDA7CisJCS8qCisJCSAqIFRPRE86IFdlIGRvbid0IG1vdmUgY2hhcmdlcyBvZiBmaWxlKGluY2x1ZGluZyBzaG1lbS90bXBmcykKKwkJICogcGFnZXMgZm9yIG5vdy4KKwkJICovCisJCWlmICghbW92ZV9hbm9uIHx8ICFQYWdlQW5vbihwYWdlKSkKKwkJCXJldHVybiAwOworCQlpZiAoIWdldF9wYWdlX3VubGVzc196ZXJvKHBhZ2UpKQorCQkJcmV0dXJuIDA7CisJCXVzYWdlX2NvdW50ID0gcGFnZV9tYXBjb3VudChwYWdlKTsKKwl9CisJaWYgKHVzYWdlX2NvdW50ID4gMSkgeworCQkvKgorCQkgKiBUT0RPOiBXZSBkb24ndCBtb3ZlIGNoYXJnZXMgb2Ygc2hhcmVkKHVzZWQgYnkgbXVsdGlwbGUKKwkJICogcHJvY2Vzc2VzKSBwYWdlcyBmb3Igbm93LgorCQkgKi8KKwkJaWYgKHBhZ2UpCisJCQlwdXRfcGFnZShwYWdlKTsKKwkJcmV0dXJuIDA7CisJfQorCWlmIChwYWdlKSB7CisJCXBjID0gbG9va3VwX3BhZ2VfY2dyb3VwKHBhZ2UpOworCQkvKgorCQkgKiBEbyBvbmx5IGxvb3NlIGNoZWNrIHcvbyBwYWdlX2Nncm91cCBsb2NrLgorCQkgKiBtZW1fY2dyb3VwX21vdmVfYWNjb3VudCgpIGNoZWNrcyB0aGUgcGMgaXMgdmFsaWQgb3Igbm90IHVuZGVyCisJCSAqIHRoZSBsb2NrLgorCQkgKi8KKwkJaWYgKFBhZ2VDZ3JvdXBVc2VkKHBjKSAmJiBwYy0+bWVtX2Nncm91cCA9PSBtYy5mcm9tKSB7CisJCQlyZXQgPSBNQ19UQVJHRVRfUEFHRTsKKwkJCWlmICh0YXJnZXQpCisJCQkJdGFyZ2V0LT5wYWdlID0gcGFnZTsKKwkJfQorCQlpZiAoIXJldCB8fCAhdGFyZ2V0KQorCQkJcHV0X3BhZ2UocGFnZSk7CisJfQorCS8qIHRocm91Z2h0ICovCisJaWYgKGVudC52YWwgJiYgZG9fc3dhcF9hY2NvdW50ICYmICFyZXQgJiYKKwkJCWNzc19pZCgmbWMuZnJvbS0+Y3NzKSA9PSBsb29rdXBfc3dhcF9jZ3JvdXAoZW50KSkgeworCQlyZXQgPSBNQ19UQVJHRVRfU1dBUDsKKwkJaWYgKHRhcmdldCkKKwkJCXRhcmdldC0+ZW50ID0gZW50OworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY291bnRfcHJlY2hhcmdlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLAorCQkJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJCQlzdHJ1Y3QgbW1fd2FsayAqd2FsaykKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHdhbGstPnByaXZhdGU7CisJcHRlX3QgKnB0ZTsKKwlzcGlubG9ja190ICpwdGw7CisKKwlwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS0+dm1fbW0sIHBtZCwgYWRkciwgJnB0bCk7CisJZm9yICg7IGFkZHIgIT0gZW5kOyBwdGUrKywgYWRkciArPSBQQUdFX1NJWkUpCisJCWlmIChpc190YXJnZXRfcHRlX2Zvcl9tYyh2bWEsIGFkZHIsICpwdGUsIE5VTEwpKQorCQkJbWMucHJlY2hhcmdlKys7CS8qIGluY3JlbWVudCBwcmVjaGFyZ2UgdGVtcG9yYXJpbHkgKi8KKwlwdGVfdW5tYXBfdW5sb2NrKHB0ZSAtIDEsIHB0bCk7CisJY29uZF9yZXNjaGVkKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9jb3VudF9wcmVjaGFyZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJdW5zaWduZWQgbG9uZyBwcmVjaGFyZ2U7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisKKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJZm9yICh2bWEgPSBtbS0+bW1hcDsgdm1hOyB2bWEgPSB2bWEtPnZtX25leHQpIHsKKwkJc3RydWN0IG1tX3dhbGsgbWVtX2Nncm91cF9jb3VudF9wcmVjaGFyZ2Vfd2FsayA9IHsKKwkJCS5wbWRfZW50cnkgPSBtZW1fY2dyb3VwX2NvdW50X3ByZWNoYXJnZV9wdGVfcmFuZ2UsCisJCQkubW0gPSBtbSwKKwkJCS5wcml2YXRlID0gdm1hLAorCQl9OworCQlpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpCisJCQljb250aW51ZTsKKwkJLyogVE9ETzogV2UgZG9uJ3QgbW92ZSBjaGFyZ2VzIG9mIHNobWVtL3RtcGZzIHBhZ2VzIGZvciBub3cuICovCisJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKQorCQkJY29udGludWU7CisJCXdhbGtfcGFnZV9yYW5nZSh2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwKKwkJCQkJJm1lbV9jZ3JvdXBfY291bnRfcHJlY2hhcmdlX3dhbGspOworCX0KKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCisJcHJlY2hhcmdlID0gbWMucHJlY2hhcmdlOworCW1jLnByZWNoYXJnZSA9IDA7CisKKwlyZXR1cm4gcHJlY2hhcmdlOworfQorCitzdGF0aWMgaW50IG1lbV9jZ3JvdXBfcHJlY2hhcmdlX21jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCXJldHVybiBtZW1fY2dyb3VwX2RvX3ByZWNoYXJnZShtZW1fY2dyb3VwX2NvdW50X3ByZWNoYXJnZShtbSkpOworfQorCitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2NsZWFyX21jKHZvaWQpCit7CisJLyogd2UgbXVzdCB1bmNoYXJnZSBhbGwgdGhlIGxlZnRvdmVyIHByZWNoYXJnZXMgZnJvbSBtYy50byAqLworCWlmIChtYy5wcmVjaGFyZ2UpIHsKKwkJX19tZW1fY2dyb3VwX2NhbmNlbF9jaGFyZ2UobWMudG8sIG1jLnByZWNoYXJnZSk7CisJCW1jLnByZWNoYXJnZSA9IDA7CisJfQogCS8qCi0JICogRklYTUU6IEl0J3MgYmV0dGVyIHRvIG1vdmUgY2hhcmdlcyBvZiB0aGlzIHByb2Nlc3MgZnJvbSBvbGQKLQkgKiBtZW1jZyB0byBuZXcgbWVtY2cuIEJ1dCBpdCdzIGp1c3Qgb24gVE9ETy1MaXN0IG5vdy4KKwkgKiB3ZSBkaWRuJ3QgdW5jaGFyZ2UgZnJvbSBtYy5mcm9tIGF0IG1lbV9jZ3JvdXBfbW92ZV9hY2NvdW50KCksIHNvCisJICogd2UgbXVzdCB1bmNoYXJnZSBoZXJlLgogCSAqLworCWlmIChtYy5tb3ZlZF9jaGFyZ2UpIHsKKwkJX19tZW1fY2dyb3VwX2NhbmNlbF9jaGFyZ2UobWMuZnJvbSwgbWMubW92ZWRfY2hhcmdlKTsKKwkJbWMubW92ZWRfY2hhcmdlID0gMDsKKwl9CisJLyogd2UgbXVzdCBmaXh1cCByZWZjbnRzIGFuZCBjaGFyZ2VzICovCisJaWYgKG1jLm1vdmVkX3N3YXApIHsKKwkJV0FSTl9PTl9PTkNFKG1jLm1vdmVkX3N3YXAgPiBJTlRfTUFYKTsKKwkJLyogdW5jaGFyZ2Ugc3dhcCBhY2NvdW50IGZyb20gdGhlIG9sZCBjZ3JvdXAgKi8KKwkJaWYgKCFtZW1fY2dyb3VwX2lzX3Jvb3QobWMuZnJvbSkpCisJCQlyZXNfY291bnRlcl91bmNoYXJnZSgmbWMuZnJvbS0+bWVtc3csCisJCQkJCQlQQUdFX1NJWkUgKiBtYy5tb3ZlZF9zd2FwKTsKKwkJX19tZW1fY2dyb3VwX3B1dChtYy5mcm9tLCBtYy5tb3ZlZF9zd2FwKTsKKworCQlpZiAoIW1lbV9jZ3JvdXBfaXNfcm9vdChtYy50bykpIHsKKwkJCS8qCisJCQkgKiB3ZSBjaGFyZ2VkIGJvdGggdG8tPnJlcyBhbmQgdG8tPm1lbXN3LCBzbyB3ZSBzaG91bGQKKwkJCSAqIHVuY2hhcmdlIHRvLT5yZXMuCisJCQkgKi8KKwkJCXJlc19jb3VudGVyX3VuY2hhcmdlKCZtYy50by0+cmVzLAorCQkJCQkJUEFHRV9TSVpFICogbWMubW92ZWRfc3dhcCk7CisJCQlWTV9CVUdfT04odGVzdF9iaXQoQ1NTX1JPT1QsICZtYy50by0+Y3NzLmZsYWdzKSk7CisJCQlfX2Nzc19wdXQoJm1jLnRvLT5jc3MsIG1jLm1vdmVkX3N3YXApOworCQl9CisJCS8qIHdlJ3ZlIGFscmVhZHkgZG9uZSBtZW1fY2dyb3VwX2dldChtYy50bykgKi8KKworCQltYy5tb3ZlZF9zd2FwID0gMDsKKwl9CisJbWMuZnJvbSA9IE5VTEw7CisJbWMudG8gPSBOVUxMOworCW1jLm1vdmluZ190YXNrID0gTlVMTDsKKwl3YWtlX3VwX2FsbCgmbWMud2FpdHEpOworfQorCitzdGF0aWMgaW50IG1lbV9jZ3JvdXBfY2FuX2F0dGFjaChzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCisJCQkJc3RydWN0IGNncm91cCAqY2dyb3VwLAorCQkJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwKKwkJCQlib29sIHRocmVhZGdyb3VwKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBtZW1fY2dyb3VwICptZW0gPSBtZW1fY2dyb3VwX2Zyb21fY29udChjZ3JvdXApOworCisJaWYgKG1lbS0+bW92ZV9jaGFyZ2VfYXRfaW1taWdyYXRlKSB7CisJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCQlzdHJ1Y3QgbWVtX2Nncm91cCAqZnJvbSA9IG1lbV9jZ3JvdXBfZnJvbV90YXNrKHApOworCisJCVZNX0JVR19PTihmcm9tID09IG1lbSk7CisKKwkJbW0gPSBnZXRfdGFza19tbShwKTsKKwkJaWYgKCFtbSkKKwkJCXJldHVybiAwOworCQkvKiBXZSBtb3ZlIGNoYXJnZXMgb25seSB3aGVuIHdlIG1vdmUgYSBvd25lciBvZiB0aGUgbW0gKi8KKwkJaWYgKG1tLT5vd25lciA9PSBwKSB7CisJCQlWTV9CVUdfT04obWMuZnJvbSk7CisJCQlWTV9CVUdfT04obWMudG8pOworCQkJVk1fQlVHX09OKG1jLnByZWNoYXJnZSk7CisJCQlWTV9CVUdfT04obWMubW92ZWRfY2hhcmdlKTsKKwkJCVZNX0JVR19PTihtYy5tb3ZlZF9zd2FwKTsKKwkJCVZNX0JVR19PTihtYy5tb3ZpbmdfdGFzayk7CisJCQltYy5mcm9tID0gZnJvbTsKKwkJCW1jLnRvID0gbWVtOworCQkJbWMucHJlY2hhcmdlID0gMDsKKwkJCW1jLm1vdmVkX2NoYXJnZSA9IDA7CisJCQltYy5tb3ZlZF9zd2FwID0gMDsKKwkJCW1jLm1vdmluZ190YXNrID0gY3VycmVudDsKKworCQkJcmV0ID0gbWVtX2Nncm91cF9wcmVjaGFyZ2VfbWMobW0pOworCQkJaWYgKHJldCkKKwkJCQltZW1fY2dyb3VwX2NsZWFyX21jKCk7CisJCX0KKwkJbW1wdXQobW0pOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2NhbmNlbF9hdHRhY2goc3RydWN0IGNncm91cF9zdWJzeXMgKnNzLAorCQkJCXN0cnVjdCBjZ3JvdXAgKmNncm91cCwKKwkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCisJCQkJYm9vbCB0aHJlYWRncm91cCkKK3sKKwltZW1fY2dyb3VwX2NsZWFyX21jKCk7Cit9CisKK3N0YXRpYyBpbnQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZV9wdGVfcmFuZ2UocG1kX3QgKnBtZCwKKwkJCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLAorCQkJCXN0cnVjdCBtbV93YWxrICp3YWxrKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gd2Fsay0+cHJpdmF0ZTsKKwlwdGVfdCAqcHRlOworCXNwaW5sb2NrX3QgKnB0bDsKKworcmV0cnk6CisJcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtPnZtX21tLCBwbWQsIGFkZHIsICZwdGwpOworCWZvciAoOyBhZGRyICE9IGVuZDsgYWRkciArPSBQQUdFX1NJWkUpIHsKKwkJcHRlX3QgcHRlbnQgPSAqKHB0ZSsrKTsKKwkJdW5pb24gbWNfdGFyZ2V0IHRhcmdldDsKKwkJaW50IHR5cGU7CisJCXN0cnVjdCBwYWdlICpwYWdlOworCQlzdHJ1Y3QgcGFnZV9jZ3JvdXAgKnBjOworCQlzd3BfZW50cnlfdCBlbnQ7CisKKwkJaWYgKCFtYy5wcmVjaGFyZ2UpCisJCQlicmVhazsKKworCQl0eXBlID0gaXNfdGFyZ2V0X3B0ZV9mb3JfbWModm1hLCBhZGRyLCBwdGVudCwgJnRhcmdldCk7CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIE1DX1RBUkdFVF9QQUdFOgorCQkJcGFnZSA9IHRhcmdldC5wYWdlOworCQkJaWYgKGlzb2xhdGVfbHJ1X3BhZ2UocGFnZSkpCisJCQkJZ290byBwdXQ7CisJCQlwYyA9IGxvb2t1cF9wYWdlX2Nncm91cChwYWdlKTsKKwkJCWlmICghbWVtX2Nncm91cF9tb3ZlX2FjY291bnQocGMsCisJCQkJCQltYy5mcm9tLCBtYy50bywgZmFsc2UpKSB7CisJCQkJbWMucHJlY2hhcmdlLS07CisJCQkJLyogd2UgdW5jaGFyZ2UgZnJvbSBtYy5mcm9tIGxhdGVyLiAqLworCQkJCW1jLm1vdmVkX2NoYXJnZSsrOworCQkJfQorCQkJcHV0YmFja19scnVfcGFnZShwYWdlKTsKK3B1dDoJCQkvKiBpc190YXJnZXRfcHRlX2Zvcl9tYygpIGdldHMgdGhlIHBhZ2UgKi8KKwkJCXB1dF9wYWdlKHBhZ2UpOworCQkJYnJlYWs7CisJCWNhc2UgTUNfVEFSR0VUX1NXQVA6CisJCQllbnQgPSB0YXJnZXQuZW50OworCQkJaWYgKCFtZW1fY2dyb3VwX21vdmVfc3dhcF9hY2NvdW50KGVudCwKKwkJCQkJCW1jLmZyb20sIG1jLnRvLCBmYWxzZSkpIHsKKwkJCQltYy5wcmVjaGFyZ2UtLTsKKwkJCQkvKiB3ZSBmaXh1cCByZWZjbnRzIGFuZCBjaGFyZ2VzIGxhdGVyLiAqLworCQkJCW1jLm1vdmVkX3N3YXArKzsKKwkJCX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisJcHRlX3VubWFwX3VubG9jayhwdGUgLSAxLCBwdGwpOworCWNvbmRfcmVzY2hlZCgpOworCisJaWYgKGFkZHIgIT0gZW5kKSB7CisJCS8qCisJCSAqIFdlIGhhdmUgY29uc3VtZWQgYWxsIHByZWNoYXJnZXMgd2UgZ290IGluIGNhbl9hdHRhY2goKS4KKwkJICogV2UgdHJ5IGNoYXJnZSBvbmUgYnkgb25lLCBidXQgZG9uJ3QgZG8gYW55IGFkZGl0aW9uYWwKKwkJICogY2hhcmdlcyB0byBtYy50byBpZiB3ZSBoYXZlIGZhaWxlZCBpbiBjaGFyZ2Ugb25jZSBpbiBhdHRhY2goKQorCQkgKiBwaGFzZS4KKwkJICovCisJCXJldCA9IG1lbV9jZ3JvdXBfZG9fcHJlY2hhcmdlKDEpOworCQlpZiAoIXJldCkKKwkJCWdvdG8gcmV0cnk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbWVtX2Nncm91cF9tb3ZlX2NoYXJnZShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKworCWxydV9hZGRfZHJhaW5fYWxsKCk7CisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCWZvciAodm1hID0gbW0tPm1tYXA7IHZtYTsgdm1hID0gdm1hLT52bV9uZXh0KSB7CisJCWludCByZXQ7CisJCXN0cnVjdCBtbV93YWxrIG1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2Vfd2FsayA9IHsKKwkJCS5wbWRfZW50cnkgPSBtZW1fY2dyb3VwX21vdmVfY2hhcmdlX3B0ZV9yYW5nZSwKKwkJCS5tbSA9IG1tLAorCQkJLnByaXZhdGUgPSB2bWEsCisJCX07CisJCWlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSkKKwkJCWNvbnRpbnVlOworCQkvKiBUT0RPOiBXZSBkb24ndCBtb3ZlIGNoYXJnZXMgb2Ygc2htZW0vdG1wZnMgcGFnZXMgZm9yIG5vdy4gKi8KKwkJaWYgKHZtYS0+dm1fZmxhZ3MgJiBWTV9TSEFSRUQpCisJCQljb250aW51ZTsKKwkJcmV0ID0gd2Fsa19wYWdlX3JhbmdlKHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLAorCQkJCQkJJm1lbV9jZ3JvdXBfbW92ZV9jaGFyZ2Vfd2Fsayk7CisJCWlmIChyZXQpCisJCQkvKgorCQkJICogbWVhbnMgd2UgaGF2ZSBjb25zdW1lZCBhbGwgcHJlY2hhcmdlcyBhbmQgZmFpbGVkIGluCisJCQkgKiBkb2luZyBhZGRpdGlvbmFsIGNoYXJnZS4gSnVzdCBhYmFuZG9uIGhlcmUuCisJCQkgKi8KKwkJCWJyZWFrOworCX0KKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworfQorCitzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX21vdmVfdGFzayhzdHJ1Y3QgY2dyb3VwX3N1YnN5cyAqc3MsCisJCQkJc3RydWN0IGNncm91cCAqY29udCwKKwkJCQlzdHJ1Y3QgY2dyb3VwICpvbGRfY29udCwKKwkJCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCisJCQkJYm9vbCB0aHJlYWRncm91cCkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKworCWlmICghbWMudG8pCisJCS8qIG5vIG5lZWQgdG8gbW92ZSBjaGFyZ2UgKi8KKwkJcmV0dXJuOworCisJbW0gPSBnZXRfdGFza19tbShwKTsKKwlpZiAobW0pIHsKKwkJbWVtX2Nncm91cF9tb3ZlX2NoYXJnZShtbSk7CisJCW1tcHV0KG1tKTsKKwl9CisJbWVtX2Nncm91cF9jbGVhcl9tYygpOwogfQogCiBzdHJ1Y3QgY2dyb3VwX3N1YnN5cyBtZW1fY2dyb3VwX3N1YnN5cyA9IHsKQEAgLTM0MDAsNiArNDMzOCw4IEBACiAJLnByZV9kZXN0cm95ID0gbWVtX2Nncm91cF9wcmVfZGVzdHJveSwKIAkuZGVzdHJveSA9IG1lbV9jZ3JvdXBfZGVzdHJveSwKIAkucG9wdWxhdGUgPSBtZW1fY2dyb3VwX3BvcHVsYXRlLAorCS5jYW5fYXR0YWNoID0gbWVtX2Nncm91cF9jYW5fYXR0YWNoLAorCS5jYW5jZWxfYXR0YWNoID0gbWVtX2Nncm91cF9jYW5jZWxfYXR0YWNoLAogCS5hdHRhY2ggPSBtZW1fY2dyb3VwX21vdmVfdGFzaywKIAkuZWFybHlfaW5pdCA9IDAsCiAJLnVzZV9pZCA9IDEsCmRpZmYgLS1naXQgYS9tbS9tZW1vcnktZmFpbHVyZS5jIGIvbW0vbWVtb3J5LWZhaWx1cmUuYwppbmRleCAxNzI5OWZkLi5kMWYzMzUxIDEwMDY0NAotLS0gYS9tbS9tZW1vcnktZmFpbHVyZS5jCisrKyBiL21tL21lbW9yeS1mYWlsdXJlLmMKQEAgLTM4Myw5ICszODMsMTIgQEAKIAlpZiAoYXYgPT0gTlVMTCkJLyogTm90IGFjdHVhbGx5IG1hcHBlZCBhbnltb3JlICovCiAJCWdvdG8gb3V0OwogCWZvcl9lYWNoX3Byb2Nlc3MgKHRzaykgeworCQlzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKnZtYWM7CisKIAkJaWYgKCF0YXNrX2Vhcmx5X2tpbGwodHNrKSkKIAkJCWNvbnRpbnVlOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5ICh2bWEsICZhdi0+aGVhZCwgYW5vbl92bWFfbm9kZSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYWMsICZhdi0+aGVhZCwgc2FtZV9hbm9uX3ZtYSkgeworCQkJdm1hID0gdm1hYy0+dm1hOwogCQkJaWYgKCFwYWdlX21hcHBlZF9pbl92bWEocGFnZSwgdm1hKSkKIAkJCQljb250aW51ZTsKIAkJCWlmICh2bWEtPnZtX21tID09IHRzay0+bW0pCmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IDcyZmI1ZjMuLjViN2YyMDAgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCisrKyBiL21tL21lbW9yeS5jCkBAIC0xMjEsNiArMTIxLDc3IEBACiB9CiBjb3JlX2luaXRjYWxsKGluaXRfemVyb19wZm4pOwogCisKKyNpZiBkZWZpbmVkKFNQTElUX1JTU19DT1VOVElORykKKwordm9pZCBfX3N5bmNfdGFza19yc3Nfc3RhdChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE5SX01NX0NPVU5URVJTOyBpKyspIHsKKwkJaWYgKHRhc2stPnJzc19zdGF0LmNvdW50W2ldKSB7CisJCQlhZGRfbW1fY291bnRlcihtbSwgaSwgdGFzay0+cnNzX3N0YXQuY291bnRbaV0pOworCQkJdGFzay0+cnNzX3N0YXQuY291bnRbaV0gPSAwOworCQl9CisJfQorCXRhc2stPnJzc19zdGF0LmV2ZW50cyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9tbV9jb3VudGVyX2Zhc3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBtZW1iZXIsIGludCB2YWwpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrID0gY3VycmVudDsKKworCWlmIChsaWtlbHkodGFzay0+bW0gPT0gbW0pKQorCQl0YXNrLT5yc3Nfc3RhdC5jb3VudFttZW1iZXJdICs9IHZhbDsKKwllbHNlCisJCWFkZF9tbV9jb3VudGVyKG1tLCBtZW1iZXIsIHZhbCk7Cit9CisjZGVmaW5lIGluY19tbV9jb3VudGVyX2Zhc3QobW0sIG1lbWJlcikgYWRkX21tX2NvdW50ZXJfZmFzdChtbSwgbWVtYmVyLCAxKQorI2RlZmluZSBkZWNfbW1fY291bnRlcl9mYXN0KG1tLCBtZW1iZXIpIGFkZF9tbV9jb3VudGVyX2Zhc3QobW0sIG1lbWJlciwgLTEpCisKKy8qIHN5bmMgY291bnRlciBvbmNlIHBlciA2NCBwYWdlIGZhdWx0cyAqLworI2RlZmluZSBUQVNLX1JTU19FVkVOVFNfVEhSRVNICSg2NCkKK3N0YXRpYyB2b2lkIGNoZWNrX3N5bmNfcnNzX3N0YXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCWlmICh1bmxpa2VseSh0YXNrICE9IGN1cnJlbnQpKQorCQlyZXR1cm47CisJaWYgKHVubGlrZWx5KHRhc2stPnJzc19zdGF0LmV2ZW50cysrID4gVEFTS19SU1NfRVZFTlRTX1RIUkVTSCkpCisJCV9fc3luY190YXNrX3Jzc19zdGF0KHRhc2ssIHRhc2stPm1tKTsKK30KKwordW5zaWduZWQgbG9uZyBnZXRfbW1fY291bnRlcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IG1lbWJlcikKK3sKKwlsb25nIHZhbCA9IDA7CisKKwkvKgorCSAqIERvbid0IHVzZSB0YXNrLT5tbSBoZXJlLi4uZm9yIGF2b2lkaW5nIHRvIHVzZSB0YXNrX2dldF9tbSgpLi4KKwkgKiBUaGUgY2FsbGVyIG11c3QgZ3VhcmFudGVlIHRhc2stPm1tIGlzIG5vdCBpbnZhbGlkLgorCSAqLworCXZhbCA9IGF0b21pY19sb25nX3JlYWQoJm1tLT5yc3Nfc3RhdC5jb3VudFttZW1iZXJdKTsKKwkvKgorCSAqIGNvdW50ZXIgaXMgdXBkYXRlZCBpbiBhc3luY2hyb25vdXMgbWFubmVyIGFuZCBtYXkgZ28gdG8gbWludXMuCisJICogQnV0IGl0J3MgbmV2ZXIgYmUgZXhwZWN0ZWQgbnVtYmVyIGZvciB1c2Vycy4KKwkgKi8KKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuICh1bnNpZ25lZCBsb25nKXZhbDsKK30KKwordm9pZCBzeW5jX21tX3JzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCV9fc3luY190YXNrX3Jzc19zdGF0KHRhc2ssIG1tKTsKK30KKyNlbHNlCisKKyNkZWZpbmUgaW5jX21tX2NvdW50ZXJfZmFzdChtbSwgbWVtYmVyKSBpbmNfbW1fY291bnRlcihtbSwgbWVtYmVyKQorI2RlZmluZSBkZWNfbW1fY291bnRlcl9mYXN0KG1tLCBtZW1iZXIpIGRlY19tbV9jb3VudGVyKG1tLCBtZW1iZXIpCisKK3N0YXRpYyB2b2lkIGNoZWNrX3N5bmNfcnNzX3N0YXQoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworfQorCisjZW5kaWYKKwogLyoKICAqIElmIGEgcD9kX2JhZCBlbnRyeSBpcyBmb3VuZCB3aGlsZSB3YWxraW5nIHBhZ2UgdGFibGVzLCByZXBvcnQKICAqIHRoZSBlcnJvciwgYmVmb3JlIHJlc2V0dGluZyBlbnRyeSB0byBwP2Rfbm9uZS4gIFVzdWFsbHkgKGJ1dApAQCAtMzAwLDcgKzM3MSw3IEBACiAJCSAqIEhpZGUgdm1hIGZyb20gcm1hcCBhbmQgdHJ1bmNhdGVfcGFnZWNhY2hlIGJlZm9yZSBmcmVlaW5nCiAJCSAqIHBndGFibGVzCiAJCSAqLwotCQlhbm9uX3ZtYV91bmxpbmsodm1hKTsKKwkJdW5saW5rX2Fub25fdm1hcyh2bWEpOwogCQl1bmxpbmtfZmlsZV92bWEodm1hKTsKIAogCQlpZiAoaXNfdm1faHVnZXRsYl9wYWdlKHZtYSkpIHsKQEAgLTMxNCw3ICszODUsNyBAQAogCQkJICAgICAgICYmICFpc192bV9odWdldGxiX3BhZ2UobmV4dCkpIHsKIAkJCQl2bWEgPSBuZXh0OwogCQkJCW5leHQgPSB2bWEtPnZtX25leHQ7Ci0JCQkJYW5vbl92bWFfdW5saW5rKHZtYSk7CisJCQkJdW5saW5rX2Fub25fdm1hcyh2bWEpOwogCQkJCXVubGlua19maWxlX3ZtYSh2bWEpOwogCQkJfQogCQkJZnJlZV9wZ2RfcmFuZ2UodGxiLCBhZGRyLCB2bWEtPnZtX2VuZCwKQEAgLTM3NiwxMiArNDQ3LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRfbW1fcnNzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgZmlsZV9yc3MsIGludCBhbm9uX3JzcykKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3Jzc192ZWMoaW50ICpyc3MpCiB7Ci0JaWYgKGZpbGVfcnNzKQotCQlhZGRfbW1fY291bnRlcihtbSwgZmlsZV9yc3MsIGZpbGVfcnNzKTsKLQlpZiAoYW5vbl9yc3MpCi0JCWFkZF9tbV9jb3VudGVyKG1tLCBhbm9uX3JzcywgYW5vbl9yc3MpOworCW1lbXNldChyc3MsIDAsIHNpemVvZihpbnQpICogTlJfTU1fQ09VTlRFUlMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYWRkX21tX3Jzc192ZWMoc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCAqcnNzKQoreworCWludCBpOworCisJaWYgKGN1cnJlbnQtPm1tID09IG1tKQorCQlzeW5jX21tX3JzcyhjdXJyZW50LCBtbSk7CisJZm9yIChpID0gMDsgaSA8IE5SX01NX0NPVU5URVJTOyBpKyspCisJCWlmIChyc3NbaV0pCisJCQlhZGRfbW1fY291bnRlcihtbSwgaSwgcnNzW2ldKTsKIH0KIAogLyoKQEAgLTQzMCwxMiArNTA5LDggQEAKIAkJIkJVRzogQmFkIHBhZ2UgbWFwIGluIHByb2Nlc3MgJXMgIHB0ZTolMDhsbHggcG1kOiUwOGxseFxuIiwKIAkJY3VycmVudC0+Y29tbSwKIAkJKGxvbmcgbG9uZylwdGVfdmFsKHB0ZSksIChsb25nIGxvbmcpcG1kX3ZhbCgqcG1kKSk7Ci0JaWYgKHBhZ2UpIHsKLQkJcHJpbnRrKEtFUk5fQUxFUlQKLQkJInBhZ2U6JXAgZmxhZ3M6JXAgY291bnQ6JWQgbWFwY291bnQ6JWQgbWFwcGluZzolcCBpbmRleDolbHhcbiIsCi0JCXBhZ2UsICh2b2lkICopcGFnZS0+ZmxhZ3MsIHBhZ2VfY291bnQocGFnZSksCi0JCXBhZ2VfbWFwY291bnQocGFnZSksIHBhZ2UtPm1hcHBpbmcsIHBhZ2UtPmluZGV4KTsKLQl9CisJaWYgKHBhZ2UpCisJCWR1bXBfcGFnZShwYWdlKTsKIAlwcmludGsoS0VSTl9BTEVSVAogCQkiYWRkcjolcCB2bV9mbGFnczolMDhseCBhbm9uX3ZtYTolcCBtYXBwaW5nOiVwIGluZGV4OiVseFxuIiwKIAkJKHZvaWQgKilhZGRyLCB2bWEtPnZtX2ZsYWdzLCB2bWEtPmFub25fdm1hLCBtYXBwaW5nLCBpbmRleCk7CkBAIC01OTcsNyArNjcyLDkgQEAKIAkJCQkJCSAmc3JjX21tLT5tbWxpc3QpOwogCQkJCXNwaW5fdW5sb2NrKCZtbWxpc3RfbG9jayk7CiAJCQl9Ci0JCQlpZiAoaXNfd3JpdGVfbWlncmF0aW9uX2VudHJ5KGVudHJ5KSAmJgorCQkJaWYgKGxpa2VseSghbm9uX3N3YXBfZW50cnkoZW50cnkpKSkKKwkJCQlyc3NbTU1fU1dBUEVOVFNdKys7CisJCQllbHNlIGlmIChpc193cml0ZV9taWdyYXRpb25fZW50cnkoZW50cnkpICYmCiAJCQkJCWlzX2Nvd19tYXBwaW5nKHZtX2ZsYWdzKSkgewogCQkJCS8qCiAJCQkJICogQ09XIG1hcHBpbmdzIHJlcXVpcmUgcGFnZXMgaW4gYm90aCBwYXJlbnQKQEAgLTYzMiw3ICs3MDksMTAgQEAKIAlpZiAocGFnZSkgewogCQlnZXRfcGFnZShwYWdlKTsKIAkJcGFnZV9kdXBfcm1hcChwYWdlKTsKLQkJcnNzW1BhZ2VBbm9uKHBhZ2UpXSsrOworCQlpZiAoUGFnZUFub24ocGFnZSkpCisJCQlyc3NbTU1fQU5PTlBBR0VTXSsrOworCQllbHNlCisJCQlyc3NbTU1fRklMRVBBR0VTXSsrOwogCX0KIAogb3V0X3NldF9wdGU6CkBAIC02NDgsMTEgKzcyOCwxMiBAQAogCXB0ZV90ICpzcmNfcHRlLCAqZHN0X3B0ZTsKIAlzcGlubG9ja190ICpzcmNfcHRsLCAqZHN0X3B0bDsKIAlpbnQgcHJvZ3Jlc3MgPSAwOwotCWludCByc3NbMl07CisJaW50IHJzc1tOUl9NTV9DT1VOVEVSU107CiAJc3dwX2VudHJ5X3QgZW50cnkgPSAoc3dwX2VudHJ5X3QpezB9OwogCiBhZ2FpbjoKLQlyc3NbMV0gPSByc3NbMF0gPSAwOworCWluaXRfcnNzX3ZlYyhyc3MpOworCiAJZHN0X3B0ZSA9IHB0ZV9hbGxvY19tYXBfbG9jayhkc3RfbW0sIGRzdF9wbWQsIGFkZHIsICZkc3RfcHRsKTsKIAlpZiAoIWRzdF9wdGUpCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNjg4LDcgKzc2OSw3IEBACiAJYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKCk7CiAJc3Bpbl91bmxvY2soc3JjX3B0bCk7CiAJcHRlX3VubWFwX25lc3RlZChvcmlnX3NyY19wdGUpOwotCWFkZF9tbV9yc3MoZHN0X21tLCByc3NbMF0sIHJzc1sxXSk7CisJYWRkX21tX3Jzc192ZWMoZHN0X21tLCByc3MpOwogCXB0ZV91bm1hcF91bmxvY2sob3JpZ19kc3RfcHRlLCBkc3RfcHRsKTsKIAljb25kX3Jlc2NoZWQoKTsKIApAQCAtODE2LDggKzg5Nyw5IEBACiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0bGItPm1tOwogCXB0ZV90ICpwdGU7CiAJc3BpbmxvY2tfdCAqcHRsOwotCWludCBmaWxlX3JzcyA9IDA7Ci0JaW50IGFub25fcnNzID0gMDsKKwlpbnQgcnNzW05SX01NX0NPVU5URVJTXTsKKworCWluaXRfcnNzX3ZlYyhyc3MpOwogCiAJcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyLCAmcHRsKTsKIAlhcmNoX2VudGVyX2xhenlfbW11X21vZGUoKTsKQEAgLTg2MywxNCArOTQ1LDE0IEBACiAJCQkJc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlLAogCQkJCQkgICBwZ29mZl90b19wdGUocGFnZS0+aW5kZXgpKTsKIAkJCWlmIChQYWdlQW5vbihwYWdlKSkKLQkJCQlhbm9uX3Jzcy0tOworCQkJCXJzc1tNTV9BTk9OUEFHRVNdLS07CiAJCQllbHNlIHsKIAkJCQlpZiAocHRlX2RpcnR5KHB0ZW50KSkKIAkJCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CiAJCQkJaWYgKHB0ZV95b3VuZyhwdGVudCkgJiYKIAkJCQkgICAgbGlrZWx5KCFWTV9TZXF1ZW50aWFsUmVhZEhpbnQodm1hKSkpCiAJCQkJCW1hcmtfcGFnZV9hY2Nlc3NlZChwYWdlKTsKLQkJCQlmaWxlX3Jzcy0tOworCQkJCXJzc1tNTV9GSUxFUEFHRVNdLS07CiAJCQl9CiAJCQlwYWdlX3JlbW92ZV9ybWFwKHBhZ2UpOwogCQkJaWYgKHVubGlrZWx5KHBhZ2VfbWFwY291bnQocGFnZSkgPCAwKSkKQEAgLTg4NywxMyArOTY5LDE4IEBACiAJCWlmIChwdGVfZmlsZShwdGVudCkpIHsKIAkJCWlmICh1bmxpa2VseSghKHZtYS0+dm1fZmxhZ3MgJiBWTV9OT05MSU5FQVIpKSkKIAkJCQlwcmludF9iYWRfcHRlKHZtYSwgYWRkciwgcHRlbnQsIE5VTEwpOwotCQl9IGVsc2UgaWYKLQkJICAodW5saWtlbHkoIWZyZWVfc3dhcF9hbmRfY2FjaGUocHRlX3RvX3N3cF9lbnRyeShwdGVudCkpKSkKLQkJCXByaW50X2JhZF9wdGUodm1hLCBhZGRyLCBwdGVudCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQlzd3BfZW50cnlfdCBlbnRyeSA9IHB0ZV90b19zd3BfZW50cnkocHRlbnQpOworCisJCQlpZiAoIW5vbl9zd2FwX2VudHJ5KGVudHJ5KSkKKwkJCQlyc3NbTU1fU1dBUEVOVFNdLS07CisJCQlpZiAodW5saWtlbHkoIWZyZWVfc3dhcF9hbmRfY2FjaGUoZW50cnkpKSkKKwkJCQlwcmludF9iYWRfcHRlKHZtYSwgYWRkciwgcHRlbnQsIE5VTEwpOworCQl9CiAJCXB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKG1tLCBhZGRyLCBwdGUsIHRsYi0+ZnVsbG1tKTsKIAl9IHdoaWxlIChwdGUrKywgYWRkciArPSBQQUdFX1NJWkUsIChhZGRyICE9IGVuZCAmJiAqemFwX3dvcmsgPiAwKSk7CiAKLQlhZGRfbW1fcnNzKG1tLCBmaWxlX3JzcywgYW5vbl9yc3MpOworCWFkZF9tbV9yc3NfdmVjKG1tLCByc3MpOwogCWFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSgpOwogCXB0ZV91bm1hcF91bmxvY2socHRlIC0gMSwgcHRsKTsKIApAQCAtMTUyNyw3ICsxNjE0LDcgQEAKIAogCS8qIE9rLCBmaW5hbGx5IGp1c3QgaW5zZXJ0IHRoZSB0aGluZy4uICovCiAJZ2V0X3BhZ2UocGFnZSk7Ci0JaW5jX21tX2NvdW50ZXIobW0sIGZpbGVfcnNzKTsKKwlpbmNfbW1fY291bnRlcl9mYXN0KG1tLCBNTV9GSUxFUEFHRVMpOwogCXBhZ2VfYWRkX2ZpbGVfcm1hcChwYWdlKTsKIAlzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGUsIG1rX3B0ZShwYWdlLCBwcm90KSk7CiAKQEAgLTIwNDQsNiArMjEzMSwxMyBAQAogCQkJcGFnZV9jYWNoZV9yZWxlYXNlKG9sZF9wYWdlKTsKIAkJfQogCQlyZXVzZSA9IHJldXNlX3N3YXBfcGFnZShvbGRfcGFnZSk7CisJCWlmIChyZXVzZSkKKwkJCS8qCisJCQkgKiBUaGUgcGFnZSBpcyBhbGwgb3Vycy4gIE1vdmUgaXQgdG8gb3VyIGFub25fdm1hIHNvCisJCQkgKiB0aGUgcm1hcCBjb2RlIHdpbGwgbm90IHNlYXJjaCBvdXIgcGFyZW50IG9yIHNpYmxpbmdzLgorCQkJICogUHJvdGVjdGVkIGFnYWluc3QgdGhlIHJtYXAgY29kZSBieSB0aGUgcGFnZSBsb2NrLgorCQkJICovCisJCQlwYWdlX21vdmVfYW5vbl9ybWFwKG9sZF9wYWdlLCB2bWEsIGFkZHJlc3MpOwogCQl1bmxvY2tfcGFnZShvbGRfcGFnZSk7CiAJfSBlbHNlIGlmICh1bmxpa2VseSgodm1hLT52bV9mbGFncyAmIChWTV9XUklURXxWTV9TSEFSRUQpKSA9PQogCQkJCQkoVk1fV1JJVEV8Vk1fU0hBUkVEKSkpIHsKQEAgLTIxNjMsMTEgKzIyNTcsMTEgQEAKIAlpZiAobGlrZWx5KHB0ZV9zYW1lKCpwYWdlX3RhYmxlLCBvcmlnX3B0ZSkpKSB7CiAJCWlmIChvbGRfcGFnZSkgewogCQkJaWYgKCFQYWdlQW5vbihvbGRfcGFnZSkpIHsKLQkJCQlkZWNfbW1fY291bnRlcihtbSwgZmlsZV9yc3MpOwotCQkJCWluY19tbV9jb3VudGVyKG1tLCBhbm9uX3Jzcyk7CisJCQkJZGVjX21tX2NvdW50ZXJfZmFzdChtbSwgTU1fRklMRVBBR0VTKTsKKwkJCQlpbmNfbW1fY291bnRlcl9mYXN0KG1tLCBNTV9BTk9OUEFHRVMpOwogCQkJfQogCQl9IGVsc2UKLQkJCWluY19tbV9jb3VudGVyKG1tLCBhbm9uX3Jzcyk7CisJCQlpbmNfbW1fY291bnRlcl9mYXN0KG1tLCBNTV9BTk9OUEFHRVMpOwogCQlmbHVzaF9jYWNoZV9wYWdlKHZtYSwgYWRkcmVzcywgcHRlX3BmbihvcmlnX3B0ZSkpOwogCQllbnRyeSA9IG1rX3B0ZShuZXdfcGFnZSwgdm1hLT52bV9wYWdlX3Byb3QpOwogCQllbnRyeSA9IG1heWJlX21rd3JpdGUocHRlX21rZGlydHkoZW50cnkpLCB2bWEpOwpAQCAtMjYwNCw3ICsyNjk4LDggQEAKIAkgKiBkaXNjYXJkZWQgYXQgc3dhcF9mcmVlKCkuCiAJICovCiAKLQlpbmNfbW1fY291bnRlcihtbSwgYW5vbl9yc3MpOworCWluY19tbV9jb3VudGVyX2Zhc3QobW0sIE1NX0FOT05QQUdFUyk7CisJZGVjX21tX2NvdW50ZXJfZmFzdChtbSwgTU1fU1dBUEVOVFMpOwogCXB0ZSA9IG1rX3B0ZShwYWdlLCB2bWEtPnZtX3BhZ2VfcHJvdCk7CiAJaWYgKChmbGFncyAmIEZBVUxUX0ZMQUdfV1JJVEUpICYmIHJldXNlX3N3YXBfcGFnZShwYWdlKSkgewogCQlwdGUgPSBtYXliZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KHB0ZSksIHZtYSk7CkBAIC0yNjg4LDcgKzI3ODMsNyBAQAogCWlmICghcHRlX25vbmUoKnBhZ2VfdGFibGUpKQogCQlnb3RvIHJlbGVhc2U7CiAKLQlpbmNfbW1fY291bnRlcihtbSwgYW5vbl9yc3MpOworCWluY19tbV9jb3VudGVyX2Zhc3QobW0sIE1NX0FOT05QQUdFUyk7CiAJcGFnZV9hZGRfbmV3X2Fub25fcm1hcChwYWdlLCB2bWEsIGFkZHJlc3MpOwogc2V0cHRlOgogCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHBhZ2VfdGFibGUsIGVudHJ5KTsKQEAgLTI4NDIsMTAgKzI5MzcsMTAgQEAKIAkJaWYgKGZsYWdzICYgRkFVTFRfRkxBR19XUklURSkKIAkJCWVudHJ5ID0gbWF5YmVfbWt3cml0ZShwdGVfbWtkaXJ0eShlbnRyeSksIHZtYSk7CiAJCWlmIChhbm9uKSB7Ci0JCQlpbmNfbW1fY291bnRlcihtbSwgYW5vbl9yc3MpOworCQkJaW5jX21tX2NvdW50ZXJfZmFzdChtbSwgTU1fQU5PTlBBR0VTKTsKIAkJCXBhZ2VfYWRkX25ld19hbm9uX3JtYXAocGFnZSwgdm1hLCBhZGRyZXNzKTsKIAkJfSBlbHNlIHsKLQkJCWluY19tbV9jb3VudGVyKG1tLCBmaWxlX3Jzcyk7CisJCQlpbmNfbW1fY291bnRlcl9mYXN0KG1tLCBNTV9GSUxFUEFHRVMpOwogCQkJcGFnZV9hZGRfZmlsZV9ybWFwKHBhZ2UpOwogCQkJaWYgKGZsYWdzICYgRkFVTFRfRkxBR19XUklURSkgewogCQkJCWRpcnR5X3BhZ2UgPSBwYWdlOwpAQCAtMzAyMyw2ICszMTE4LDkgQEAKIAogCWNvdW50X3ZtX2V2ZW50KFBHRkFVTFQpOwogCisJLyogZG8gY291bnRlciB1cGRhdGVzIGJlZm9yZSBlbnRlcmluZyByZWFsbHkgY3JpdGljYWwgc2VjdGlvbi4gKi8KKwljaGVja19zeW5jX3Jzc19zdGF0KGN1cnJlbnQpOworCiAJaWYgKHVubGlrZWx5KGlzX3ZtX2h1Z2V0bGJfcGFnZSh2bWEpKSkKIAkJcmV0dXJuIGh1Z2V0bGJfZmF1bHQobW0sIHZtYSwgYWRkcmVzcywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9tbS9tZW1vcnlfaG90cGx1Zy5jIGIvbW0vbWVtb3J5X2hvdHBsdWcuYwppbmRleCAwMzBjZThhLi5iZTIxMWE1IDEwMDY0NAotLS0gYS9tbS9tZW1vcnlfaG90cGx1Zy5jCisrKyBiL21tL21lbW9yeV9ob3RwbHVnLmMKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wZm4uaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvbW1faW5saW5lLmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUtbWFwLmg+CiAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIApAQCAtNTIzLDYgKzUyNCw5IEBACiAJCUJVR19PTihyZXQpOwogCX0KIAorCS8qIGNyZWF0ZSBuZXcgbWVtbWFwIGVudHJ5ICovCisJZmlybXdhcmVfbWFwX2FkZF9ob3RwbHVnKHN0YXJ0LCBzdGFydCArIHNpemUsICJTeXN0ZW0gUkFNIik7CisKIAlnb3RvIG91dDsKIAogZXJyb3I6CkBAIC02ODQsOSArNjg4LDkgQEAKIAkJCWlmIChwYWdlX2NvdW50KHBhZ2UpKQogCQkJCW5vdF9tYW5hZ2VkKys7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1ZNCi0JCQlwcmludGsoS0VSTl9JTkZPICJyZW1vdmluZyBmcm9tIExSVSBmYWlsZWQiCi0JCQkJCSAiICVseC8lZC8lbHhcbiIsCi0JCQkJcGZuLCBwYWdlX2NvdW50KHBhZ2UpLCBwYWdlLT5mbGFncyk7CisJCQlwcmludGsoS0VSTl9BTEVSVCAicmVtb3ZpbmcgcGZuICVseCBmcm9tIExSVSBmYWlsZWRcbiIsCisJCQkgICAgICAgcGZuKTsKKwkJCWR1bXBfcGFnZShwYWdlKTsKICNlbmRpZgogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCAyOTBmYjViLi5iZGEyMzBlIDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYworKysgYi9tbS9tZW1wb2xpY3kuYwpAQCAtNTYzLDI0ICs1NjMsNTAgQEAKIH0KIAogLyogU3RlcCAyOiBhcHBseSBwb2xpY3kgdG8gYSByYW5nZSBhbmQgZG8gc3BsaXRzLiAqLwotc3RhdGljIGludCBtYmluZF9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgbWVtcG9saWN5ICpuZXcpCitzdGF0aWMgaW50IG1iaW5kX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkgICAgICAgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCBtZW1wb2xpY3kgKm5ld19wb2wpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpuZXh0OwotCWludCBlcnI7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcmV2OworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCWludCBlcnIgPSAwOworCXBnb2ZmX3QgcGdvZmY7CisJdW5zaWduZWQgbG9uZyB2bXN0YXJ0OworCXVuc2lnbmVkIGxvbmcgdm1lbmQ7CiAKLQllcnIgPSAwOwotCWZvciAoOyB2bWEgJiYgdm1hLT52bV9zdGFydCA8IGVuZDsgdm1hID0gbmV4dCkgeworCXZtYSA9IGZpbmRfdm1hX3ByZXYobW0sIHN0YXJ0LCAmcHJldik7CisJaWYgKCF2bWEgfHwgdm1hLT52bV9zdGFydCA+IHN0YXJ0KQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWZvciAoOyB2bWEgJiYgdm1hLT52bV9zdGFydCA8IGVuZDsgcHJldiA9IHZtYSwgdm1hID0gbmV4dCkgewogCQluZXh0ID0gdm1hLT52bV9uZXh0OwotCQlpZiAodm1hLT52bV9zdGFydCA8IHN0YXJ0KQotCQkJZXJyID0gc3BsaXRfdm1hKHZtYS0+dm1fbW0sIHZtYSwgc3RhcnQsIDEpOwotCQlpZiAoIWVyciAmJiB2bWEtPnZtX2VuZCA+IGVuZCkKLQkJCWVyciA9IHNwbGl0X3ZtYSh2bWEtPnZtX21tLCB2bWEsIGVuZCwgMCk7Ci0JCWlmICghZXJyKQotCQkJZXJyID0gcG9saWN5X3ZtYSh2bWEsIG5ldyk7CisJCXZtc3RhcnQgPSBtYXgoc3RhcnQsIHZtYS0+dm1fc3RhcnQpOworCQl2bWVuZCAgID0gbWluKGVuZCwgdm1hLT52bV9lbmQpOworCisJCXBnb2ZmID0gdm1hLT52bV9wZ29mZiArICgoc3RhcnQgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUKTsKKwkJcHJldiA9IHZtYV9tZXJnZShtbSwgcHJldiwgdm1zdGFydCwgdm1lbmQsIHZtYS0+dm1fZmxhZ3MsCisJCQkJICB2bWEtPmFub25fdm1hLCB2bWEtPnZtX2ZpbGUsIHBnb2ZmLCBuZXdfcG9sKTsKKwkJaWYgKHByZXYpIHsKKwkJCXZtYSA9IHByZXY7CisJCQluZXh0ID0gdm1hLT52bV9uZXh0OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHZtYS0+dm1fc3RhcnQgIT0gdm1zdGFydCkgeworCQkJZXJyID0gc3BsaXRfdm1hKHZtYS0+dm1fbW0sIHZtYSwgdm1zdGFydCwgMSk7CisJCQlpZiAoZXJyKQorCQkJCWdvdG8gb3V0OworCQl9CisJCWlmICh2bWEtPnZtX2VuZCAhPSB2bWVuZCkgeworCQkJZXJyID0gc3BsaXRfdm1hKHZtYS0+dm1fbW0sIHZtYSwgdm1lbmQsIDApOworCQkJaWYgKGVycikKKwkJCQlnb3RvIG91dDsKKwkJfQorCQllcnIgPSBwb2xpY3lfdm1hKHZtYSwgbmV3X3BvbCk7CiAJCWlmIChlcnIpCi0JCQlicmVhazsKKwkJCWdvdG8gb3V0OwogCX0KKworIG91dDoKIAlyZXR1cm4gZXJyOwogfQogCkBAIC04NjIsMzYgKzg4OCwzNiBAQAogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCi0vKgotICogRmluZCBhICdzb3VyY2UnIGJpdCBzZXQgaW4gJ3RtcCcgd2hvc2UgY29ycmVzcG9uZGluZyAnZGVzdCcKLSAqIGJpdCBpbiAndG8nIGlzIG5vdCBhbHNvIHNldCBpbiAndG1wJy4gIENsZWFyIHRoZSBmb3VuZCAnc291cmNlJwotICogYml0IGluICd0bXAnLCBhbmQgcmV0dXJuIHRoYXQgPHNvdXJjZSwgZGVzdD4gcGFpciBmb3IgbWlncmF0aW9uLgotICogVGhlIHBhaXIgb2Ygbm9kZW1hc2tzICd0bycgYW5kICdmcm9tJyBkZWZpbmUgdGhlIG1hcC4KLSAqCi0gKiBJZiBubyBwYWlyIG9mIGJpdHMgaXMgZm91bmQgdGhhdCB3YXksIGZhbGxiYWNrIHRvIHBpY2tpbmcgc29tZQotICogcGFpciBvZiAnc291cmNlJyBhbmQgJ2Rlc3QnIGJpdHMgdGhhdCBhcmUgbm90IHRoZSBzYW1lLiAgSWYgdGhlCi0gKiAnc291cmNlJyBhbmQgJ2Rlc3QnIGJpdHMgYXJlIHRoZSBzYW1lLCB0aGlzIHJlcHJlc2VudHMgYSBub2RlCi0gKiB0aGF0IHdpbGwgYmUgbWlncmF0aW5nIHRvIGl0c2VsZiwgc28gbm8gcGFnZXMgbmVlZCBtb3ZlLgotICoKLSAqIElmIG5vIGJpdHMgYXJlIGxlZnQgaW4gJ3RtcCcsIG9yIGlmIGFsbCByZW1haW5pbmcgYml0cyBsZWZ0Ci0gKiBpbiAndG1wJyBjb3JyZXNwb25kIHRvIHRoZSBzYW1lIGJpdCBpbiAndG8nLCByZXR1cm4gZmFsc2UKLSAqIChub3RoaW5nIGxlZnQgdG8gbWlncmF0ZSkuCi0gKgotICogVGhpcyBsZXRzIHVzIHBpY2sgYSBwYWlyIG9mIG5vZGVzIHRvIG1pZ3JhdGUgYmV0d2Vlbiwgc3VjaCB0aGF0Ci0gKiBpZiBwb3NzaWJsZSB0aGUgZGVzdCBub2RlIGlzIG5vdCBhbHJlYWR5IG9jY3VwaWVkIGJ5IHNvbWUgb3RoZXIKLSAqIHNvdXJjZSBub2RlLCBtaW5pbWl6aW5nIHRoZSByaXNrIG9mIG92ZXJsb2FkaW5nIHRoZSBtZW1vcnkgb24gYQotICogbm9kZSB0aGF0IHdvdWxkIGhhcHBlbiBpZiB3ZSBtaWdyYXRlZCBpbmNvbWluZyBtZW1vcnkgdG8gYSBub2RlCi0gKiBiZWZvcmUgbWlncmF0aW5nIG91dGdvaW5nIG1lbW9yeSBzb3VyY2UgdGhhdCBzYW1lIG5vZGUuCi0gKgotICogQSBzaW5nbGUgc2NhbiBvZiB0bXAgaXMgc3VmZmljaWVudC4gIEFzIHdlIGdvLCB3ZSByZW1lbWJlciB0aGUKLSAqIG1vc3QgcmVjZW50IDxzLCBkPiBwYWlyIHRoYXQgbW92ZWQgKHMgIT0gZCkuICBJZiB3ZSBmaW5kIGEgcGFpcgotICogdGhhdCBub3Qgb25seSBtb3ZlZCwgYnV0IHdoYXQncyBiZXR0ZXIsIG1vdmVkIHRvIGFuIGVtcHR5IHNsb3QKLSAqIChkIGlzIG5vdCBzZXQgaW4gdG1wKSwgdGhlbiB3ZSBicmVhayBvdXQgdGhlbiwgd2l0aCB0aGF0IHBhaXIuCi0gKiBPdGhlcndpc2Ugd2hlbiB3ZSBmaW5pc2ggc2Nhbm5uZyBmcm9tX3RtcCwgd2UgYXQgbGVhc3QgaGF2ZSB0aGUKLSAqIG1vc3QgcmVjZW50IDxzLCBkPiBwYWlyIHRoYXQgbW92ZWQuICBJZiB3ZSBnZXQgYWxsIHRoZSB3YXkgdGhyb3VnaAotICogdGhlIHNjYW4gb2YgdG1wIHdpdGhvdXQgZmluZGluZyBhbnkgbm9kZSB0aGF0IG1vdmVkLCBtdWNoIGxlc3MKLSAqIG1vdmVkIHRvIGFuIGVtcHR5IG5vZGUsIHRoZW4gdGhlcmUgaXMgbm90aGluZyBsZWZ0IHdvcnRoIG1pZ3JhdGluZy4KLSAqLworCS8qCisJICogRmluZCBhICdzb3VyY2UnIGJpdCBzZXQgaW4gJ3RtcCcgd2hvc2UgY29ycmVzcG9uZGluZyAnZGVzdCcKKwkgKiBiaXQgaW4gJ3RvJyBpcyBub3QgYWxzbyBzZXQgaW4gJ3RtcCcuICBDbGVhciB0aGUgZm91bmQgJ3NvdXJjZScKKwkgKiBiaXQgaW4gJ3RtcCcsIGFuZCByZXR1cm4gdGhhdCA8c291cmNlLCBkZXN0PiBwYWlyIGZvciBtaWdyYXRpb24uCisJICogVGhlIHBhaXIgb2Ygbm9kZW1hc2tzICd0bycgYW5kICdmcm9tJyBkZWZpbmUgdGhlIG1hcC4KKwkgKgorCSAqIElmIG5vIHBhaXIgb2YgYml0cyBpcyBmb3VuZCB0aGF0IHdheSwgZmFsbGJhY2sgdG8gcGlja2luZyBzb21lCisJICogcGFpciBvZiAnc291cmNlJyBhbmQgJ2Rlc3QnIGJpdHMgdGhhdCBhcmUgbm90IHRoZSBzYW1lLiAgSWYgdGhlCisJICogJ3NvdXJjZScgYW5kICdkZXN0JyBiaXRzIGFyZSB0aGUgc2FtZSwgdGhpcyByZXByZXNlbnRzIGEgbm9kZQorCSAqIHRoYXQgd2lsbCBiZSBtaWdyYXRpbmcgdG8gaXRzZWxmLCBzbyBubyBwYWdlcyBuZWVkIG1vdmUuCisJICoKKwkgKiBJZiBubyBiaXRzIGFyZSBsZWZ0IGluICd0bXAnLCBvciBpZiBhbGwgcmVtYWluaW5nIGJpdHMgbGVmdAorCSAqIGluICd0bXAnIGNvcnJlc3BvbmQgdG8gdGhlIHNhbWUgYml0IGluICd0bycsIHJldHVybiBmYWxzZQorCSAqIChub3RoaW5nIGxlZnQgdG8gbWlncmF0ZSkuCisJICoKKwkgKiBUaGlzIGxldHMgdXMgcGljayBhIHBhaXIgb2Ygbm9kZXMgdG8gbWlncmF0ZSBiZXR3ZWVuLCBzdWNoIHRoYXQKKwkgKiBpZiBwb3NzaWJsZSB0aGUgZGVzdCBub2RlIGlzIG5vdCBhbHJlYWR5IG9jY3VwaWVkIGJ5IHNvbWUgb3RoZXIKKwkgKiBzb3VyY2Ugbm9kZSwgbWluaW1pemluZyB0aGUgcmlzayBvZiBvdmVybG9hZGluZyB0aGUgbWVtb3J5IG9uIGEKKwkgKiBub2RlIHRoYXQgd291bGQgaGFwcGVuIGlmIHdlIG1pZ3JhdGVkIGluY29taW5nIG1lbW9yeSB0byBhIG5vZGUKKwkgKiBiZWZvcmUgbWlncmF0aW5nIG91dGdvaW5nIG1lbW9yeSBzb3VyY2UgdGhhdCBzYW1lIG5vZGUuCisJICoKKwkgKiBBIHNpbmdsZSBzY2FuIG9mIHRtcCBpcyBzdWZmaWNpZW50LiAgQXMgd2UgZ28sIHdlIHJlbWVtYmVyIHRoZQorCSAqIG1vc3QgcmVjZW50IDxzLCBkPiBwYWlyIHRoYXQgbW92ZWQgKHMgIT0gZCkuICBJZiB3ZSBmaW5kIGEgcGFpcgorCSAqIHRoYXQgbm90IG9ubHkgbW92ZWQsIGJ1dCB3aGF0J3MgYmV0dGVyLCBtb3ZlZCB0byBhbiBlbXB0eSBzbG90CisJICogKGQgaXMgbm90IHNldCBpbiB0bXApLCB0aGVuIHdlIGJyZWFrIG91dCB0aGVuLCB3aXRoIHRoYXQgcGFpci4KKwkgKiBPdGhlcndpc2Ugd2hlbiB3ZSBmaW5pc2ggc2Nhbm5uZyBmcm9tX3RtcCwgd2UgYXQgbGVhc3QgaGF2ZSB0aGUKKwkgKiBtb3N0IHJlY2VudCA8cywgZD4gcGFpciB0aGF0IG1vdmVkLiAgSWYgd2UgZ2V0IGFsbCB0aGUgd2F5IHRocm91Z2gKKwkgKiB0aGUgc2NhbiBvZiB0bXAgd2l0aG91dCBmaW5kaW5nIGFueSBub2RlIHRoYXQgbW92ZWQsIG11Y2ggbGVzcworCSAqIG1vdmVkIHRvIGFuIGVtcHR5IG5vZGUsIHRoZW4gdGhlcmUgaXMgbm90aGluZyBsZWZ0IHdvcnRoIG1pZ3JhdGluZy4KKwkgKi8KIAogCXRtcCA9ICpmcm9tX25vZGVzOwogCXdoaWxlICghbm9kZXNfZW1wdHkodG1wKSkgewpAQCAtMTA0Nyw3ICsxMDczLDcgQEAKIAlpZiAoIUlTX0VSUih2bWEpKSB7CiAJCWludCBucl9mYWlsZWQgPSAwOwogCi0JCWVyciA9IG1iaW5kX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCwgbmV3KTsKKwkJZXJyID0gbWJpbmRfcmFuZ2UobW0sIHN0YXJ0LCBlbmQsIG5ldyk7CiAKIAkJaWYgKCFsaXN0X2VtcHR5KCZwYWdlbGlzdCkpCiAJCQlucl9mYWlsZWQgPSBtaWdyYXRlX3BhZ2VzKCZwYWdlbGlzdCwgbmV3X3ZtYV9wYWdlLApkaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jCmluZGV4IGVkYjYxMDEuLjg4MDAwYjggMTAwNjQ0Ci0tLSBhL21tL21pZ3JhdGUuYworKysgYi9tbS9taWdyYXRlLmMKQEAgLTI3NSw4ICsyNzUsNiBAQAogICovCiBzdGF0aWMgdm9pZCBtaWdyYXRlX3BhZ2VfY29weShzdHJ1Y3QgcGFnZSAqbmV3cGFnZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JaW50IGFub247Ci0KIAljb3B5X2hpZ2hwYWdlKG5ld3BhZ2UsIHBhZ2UpOwogCiAJaWYgKFBhZ2VFcnJvcihwYWdlKSkKQEAgLTMxMyw4ICszMTEsNiBAQAogCUNsZWFyUGFnZVN3YXBDYWNoZShwYWdlKTsKIAlDbGVhclBhZ2VQcml2YXRlKHBhZ2UpOwogCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgMCk7Ci0JLyogcGFnZS0+bWFwcGluZyBjb250YWlucyBhIGZsYWcgZm9yIFBhZ2VBbm9uKCkgKi8KLQlhbm9uID0gUGFnZUFub24ocGFnZSk7CiAJcGFnZS0+bWFwcGluZyA9IE5VTEw7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvbW0vbWxvY2suYyBiL21tL21sb2NrLmMKaW5kZXggMmI4MzM1YS4uOGY0ZTJkZiAxMDA2NDQKLS0tIGEvbW0vbWxvY2suYworKysgYi9tbS9tbG9jay5jCkBAIC0yNSw3ICsyNSw3IEBACiB7CiAJaWYgKGNhcGFibGUoQ0FQX0lQQ19MT0NLKSkKIAkJcmV0dXJuIDE7Ci0JaWYgKGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTUVNTE9DS10ucmxpbV9jdXIgIT0gMCkKKwlpZiAocmxpbWl0KFJMSU1JVF9NRU1MT0NLKSAhPSAwKQogCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ4Nyw3ICs0ODcsNyBAQAogCWxvY2tlZCA9IGxlbiA+PiBQQUdFX1NISUZUOwogCWxvY2tlZCArPSBjdXJyZW50LT5tbS0+bG9ja2VkX3ZtOwogCi0JbG9ja19saW1pdCA9IGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfTUVNTE9DS10ucmxpbV9jdXI7CisJbG9ja19saW1pdCA9IHJsaW1pdChSTElNSVRfTUVNTE9DSyk7CiAJbG9ja19saW1pdCA+Pj0gUEFHRV9TSElGVDsKIAogCS8qIGNoZWNrIGFnYWluc3QgcmVzb3VyY2UgbGltaXRzICovCkBAIC01NTAsNyArNTUwLDcgQEAKIAogCWRvd25fd3JpdGUoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAKLQlsb2NrX2xpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1cjsKKwlsb2NrX2xpbWl0ID0gcmxpbWl0KFJMSU1JVF9NRU1MT0NLKTsKIAlsb2NrX2xpbWl0ID4+PSBQQUdFX1NISUZUOwogCiAJcmV0ID0gLUVOT01FTTsKQEAgLTU4NCw3ICs1ODQsNyBAQAogCWludCBhbGxvd2VkID0gMDsKIAogCWxvY2tlZCA9IChzaXplICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKLQlsb2NrX2xpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1cjsKKwlsb2NrX2xpbWl0ID0gcmxpbWl0KFJMSU1JVF9NRU1MT0NLKTsKIAlpZiAobG9ja19saW1pdCA9PSBSTElNX0lORklOSVRZKQogCQlhbGxvd2VkID0gMTsKIAlsb2NrX2xpbWl0ID4+PSBQQUdFX1NISUZUOwpAQCAtNjE4LDEyICs2MTgsMTIgQEAKIAogCWRvd25fd3JpdGUoJm1tLT5tbWFwX3NlbSk7CiAKLQlsaW0gPSBybGltW1JMSU1JVF9BU10ucmxpbV9jdXIgPj4gUEFHRV9TSElGVDsKKwlsaW0gPSBBQ0NFU1NfT05DRShybGltW1JMSU1JVF9BU10ucmxpbV9jdXIpID4+IFBBR0VfU0hJRlQ7CiAJdm0gICA9IG1tLT50b3RhbF92bSArIHBnc3o7CiAJaWYgKGxpbSA8IHZtKQogCQlnb3RvIG91dDsKIAotCWxpbSA9IHJsaW1bUkxJTUlUX01FTUxPQ0tdLnJsaW1fY3VyID4+IFBBR0VfU0hJRlQ7CisJbGltID0gQUNDRVNTX09OQ0UocmxpbVtSTElNSVRfTUVNTE9DS10ucmxpbV9jdXIpID4+IFBBR0VfU0hJRlQ7CiAJdm0gICA9IG1tLT5sb2NrZWRfdm0gKyBwZ3N6OwogCWlmIChsaW0gPCB2bSkKIAkJZ290byBvdXQ7CmRpZmYgLS1naXQgYS9tbS9tbWFwLmMgYi9tbS9tbWFwLmMKaW5kZXggZWUyMjk4OS4uNzU1NTdjNiAxMDA2NDQKLS0tIGEvbW0vbW1hcC5jCisrKyBiL21tL21tYXAuYwpAQCAtMjY1LDcgKzI2NSw3IEBACiAJICogc2VnbWVudCBncm93IGJleW9uZCBpdHMgc2V0IGxpbWl0IHRoZSBpbiBjYXNlIHdoZXJlIHRoZSBsaW1pdCBpcwogCSAqIG5vdCBwYWdlIGFsaWduZWQgLVJhbSBHdXB0YQogCSAqLwotCXJsaW0gPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX0RBVEFdLnJsaW1fY3VyOworCXJsaW0gPSBybGltaXQoUkxJTUlUX0RBVEEpOwogCWlmIChybGltIDwgUkxJTV9JTkZJTklUWSAmJiAoYnJrIC0gbW0tPnN0YXJ0X2JyaykgKwogCQkJKG1tLT5lbmRfZGF0YSAtIG1tLT5zdGFydF9kYXRhKSA+IHJsaW0pCiAJCWdvdG8gb3V0OwpAQCAtNDM3LDcgKzQzNyw2IEBACiB7CiAJX192bWFfbGlua19saXN0KG1tLCB2bWEsIHByZXYsIHJiX3BhcmVudCk7CiAJX192bWFfbGlua19yYihtbSwgdm1hLCByYl9saW5rLCByYl9wYXJlbnQpOwotCV9fYW5vbl92bWFfbGluayh2bWEpOwogfQogCiBzdGF0aWMgdm9pZCB2bWFfbGluayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCkBAIC00OTksNyArNDk4LDcgQEAKICAqIGFyZSBuZWNlc3NhcnkuICBUaGUgImluc2VydCIgdm1hIChpZiBhbnkpIGlzIHRvIGJlIGluc2VydGVkCiAgKiBiZWZvcmUgd2UgZHJvcCB0aGUgbmVjZXNzYXJ5IGxvY2tzLgogICovCi12b2lkIHZtYV9hZGp1c3Qoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCitpbnQgdm1hX2FkanVzdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAl1bnNpZ25lZCBsb25nIGVuZCwgcGdvZmZfdCBwZ29mZiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICppbnNlcnQpCiB7CiAJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB2bWEtPnZtX21tOwpAQCAtNTQyLDYgKzU0MSwyNiBAQAogCQl9CiAJfQogCisJLyoKKwkgKiBXaGVuIGNoYW5naW5nIG9ubHkgdm1hLT52bV9lbmQsIHdlIGRvbid0IHJlYWxseSBuZWVkIGFub25fdm1hIGxvY2suCisJICovCisJaWYgKHZtYS0+YW5vbl92bWEgJiYgKGluc2VydCB8fCBpbXBvcnRlciB8fCBzdGFydCAhPSB2bWEtPnZtX3N0YXJ0KSkKKwkJYW5vbl92bWEgPSB2bWEtPmFub25fdm1hOworCWlmIChhbm9uX3ZtYSkgeworCQkvKgorCQkgKiBFYXNpbHkgb3Zlcmxvb2tlZDogd2hlbiBtcHJvdGVjdCBzaGlmdHMgdGhlIGJvdW5kYXJ5LAorCQkgKiBtYWtlIHN1cmUgdGhlIGV4cGFuZGluZyB2bWEgaGFzIGFub25fdm1hIHNldCBpZiB0aGUKKwkJICogc2hyaW5raW5nIHZtYSBoYWQsIHRvIGNvdmVyIGFueSBhbm9uIHBhZ2VzIGltcG9ydGVkLgorCQkgKi8KKwkJaWYgKGltcG9ydGVyICYmICFpbXBvcnRlci0+YW5vbl92bWEpIHsKKwkJCS8qIEJsb2NrIHJldmVyc2UgbWFwIGxvb2t1cHMgdW50aWwgdGhpbmdzIGFyZSBzZXQgdXAuICovCisJCQlpZiAoYW5vbl92bWFfY2xvbmUoaW1wb3J0ZXIsIHZtYSkpIHsKKwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCX0KKwkJCWltcG9ydGVyLT5hbm9uX3ZtYSA9IGFub25fdm1hOworCQl9CisJfQorCiAJaWYgKGZpbGUpIHsKIAkJbWFwcGluZyA9IGZpbGUtPmZfbWFwcGluZzsKIAkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX05PTkxJTkVBUikpCkBAIC01NjcsMjUgKzU4Niw2IEBACiAJCX0KIAl9CiAKLQkvKgotCSAqIFdoZW4gY2hhbmdpbmcgb25seSB2bWEtPnZtX2VuZCwgd2UgZG9uJ3QgcmVhbGx5IG5lZWQKLQkgKiBhbm9uX3ZtYSBsb2NrLgotCSAqLwotCWlmICh2bWEtPmFub25fdm1hICYmIChpbnNlcnQgfHwgaW1wb3J0ZXIgfHwgc3RhcnQgIT0gdm1hLT52bV9zdGFydCkpCi0JCWFub25fdm1hID0gdm1hLT5hbm9uX3ZtYTsKLQlpZiAoYW5vbl92bWEpIHsKLQkJc3Bpbl9sb2NrKCZhbm9uX3ZtYS0+bG9jayk7Ci0JCS8qCi0JCSAqIEVhc2lseSBvdmVybG9va2VkOiB3aGVuIG1wcm90ZWN0IHNoaWZ0cyB0aGUgYm91bmRhcnksCi0JCSAqIG1ha2Ugc3VyZSB0aGUgZXhwYW5kaW5nIHZtYSBoYXMgYW5vbl92bWEgc2V0IGlmIHRoZQotCQkgKiBzaHJpbmtpbmcgdm1hIGhhZCwgdG8gY292ZXIgYW55IGFub24gcGFnZXMgaW1wb3J0ZWQuCi0JCSAqLwotCQlpZiAoaW1wb3J0ZXIgJiYgIWltcG9ydGVyLT5hbm9uX3ZtYSkgewotCQkJaW1wb3J0ZXItPmFub25fdm1hID0gYW5vbl92bWE7Ci0JCQlfX2Fub25fdm1hX2xpbmsoaW1wb3J0ZXIpOwotCQl9Ci0JfQotCiAJaWYgKHJvb3QpIHsKIAkJZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKTsKIAkJdm1hX3ByaW9fdHJlZV9yZW1vdmUodm1hLCByb290KTsKQEAgLTYxNiw4ICs2MTYsNiBAQAogCQlfX3ZtYV91bmxpbmsobW0sIG5leHQsIHZtYSk7CiAJCWlmIChmaWxlKQogCQkJX19yZW1vdmVfc2hhcmVkX3ZtX3N0cnVjdChuZXh0LCBmaWxlLCBtYXBwaW5nKTsKLQkJaWYgKG5leHQtPmFub25fdm1hKQotCQkJX19hbm9uX3ZtYV9tZXJnZSh2bWEsIG5leHQpOwogCX0gZWxzZSBpZiAoaW5zZXJ0KSB7CiAJCS8qCiAJCSAqIHNwbGl0X3ZtYSBoYXMgc3BsaXQgaW5zZXJ0IGZyb20gdm1hLCBhbmQgbmVlZHMKQEAgLTYyNyw4ICs2MjUsNiBAQAogCQlfX2luc2VydF92bV9zdHJ1Y3QobW0sIGluc2VydCk7CiAJfQogCi0JaWYgKGFub25fdm1hKQotCQlzcGluX3VubG9jaygmYW5vbl92bWEtPmxvY2spOwogCWlmIChtYXBwaW5nKQogCQlzcGluX3VubG9jaygmbWFwcGluZy0+aV9tbWFwX2xvY2spOwogCkBAIC02MzgsNiArNjM0LDggQEAKIAkJCWlmIChuZXh0LT52bV9mbGFncyAmIFZNX0VYRUNVVEFCTEUpCiAJCQkJcmVtb3ZlZF9leGVfZmlsZV92bWEobW0pOwogCQl9CisJCWlmIChuZXh0LT5hbm9uX3ZtYSkKKwkJCWFub25fdm1hX21lcmdlKHZtYSwgbmV4dCk7CiAJCW1tLT5tYXBfY291bnQtLTsKIAkJbXBvbF9wdXQodm1hX3BvbGljeShuZXh0KSk7CiAJCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hlcCwgbmV4dCk7CkBAIC02NTMsNiArNjUxLDggQEAKIAl9CiAKIAl2YWxpZGF0ZV9tbShtbSk7CisKKwlyZXR1cm4gMDsKIH0KIAogLyoKQEAgLTc1OSw2ICs3NTksNyBAQAogewogCXBnb2ZmX3QgcGdsZW4gPSAoZW5kIC0gYWRkcikgPj4gUEFHRV9TSElGVDsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEsICpuZXh0OworCWludCBlcnI7CiAKIAkvKgogCSAqIFdlIGxhdGVyIHJlcXVpcmUgdGhhdCB2bWEtPnZtX2ZsYWdzID09IHZtX2ZsYWdzLApAQCAtNzkyLDExICs3OTMsMTMgQEAKIAkJCQlpc19tZXJnZWFibGVfYW5vbl92bWEocHJldi0+YW5vbl92bWEsCiAJCQkJCQkgICAgICBuZXh0LT5hbm9uX3ZtYSkpIHsKIAkJCQkJCQkvKiBjYXNlcyAxLCA2ICovCi0JCQl2bWFfYWRqdXN0KHByZXYsIHByZXYtPnZtX3N0YXJ0LAorCQkJZXJyID0gdm1hX2FkanVzdChwcmV2LCBwcmV2LT52bV9zdGFydCwKIAkJCQluZXh0LT52bV9lbmQsIHByZXYtPnZtX3Bnb2ZmLCBOVUxMKTsKIAkJfSBlbHNlCQkJCQkvKiBjYXNlcyAyLCA1LCA3ICovCi0JCQl2bWFfYWRqdXN0KHByZXYsIHByZXYtPnZtX3N0YXJ0LAorCQkJZXJyID0gdm1hX2FkanVzdChwcmV2LCBwcmV2LT52bV9zdGFydCwKIAkJCQllbmQsIHByZXYtPnZtX3Bnb2ZmLCBOVUxMKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBOVUxMOwogCQlyZXR1cm4gcHJldjsKIAl9CiAKQEAgLTgwOCwxMSArODExLDEzIEBACiAJCQljYW5fdm1hX21lcmdlX2JlZm9yZShuZXh0LCB2bV9mbGFncywKIAkJCQkJYW5vbl92bWEsIGZpbGUsIHBnb2ZmK3BnbGVuKSkgewogCQlpZiAocHJldiAmJiBhZGRyIDwgcHJldi0+dm1fZW5kKQkvKiBjYXNlIDQgKi8KLQkJCXZtYV9hZGp1c3QocHJldiwgcHJldi0+dm1fc3RhcnQsCisJCQllcnIgPSB2bWFfYWRqdXN0KHByZXYsIHByZXYtPnZtX3N0YXJ0LAogCQkJCWFkZHIsIHByZXYtPnZtX3Bnb2ZmLCBOVUxMKTsKIAkJZWxzZQkJCQkJLyogY2FzZXMgMywgOCAqLwotCQkJdm1hX2FkanVzdChhcmVhLCBhZGRyLCBuZXh0LT52bV9lbmQsCisJCQllcnIgPSB2bWFfYWRqdXN0KGFyZWEsIGFkZHIsIG5leHQtPnZtX2VuZCwKIAkJCQluZXh0LT52bV9wZ29mZiAtIHBnbGVuLCBOVUxMKTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBOVUxMOwogCQlyZXR1cm4gYXJlYTsKIAl9CiAKQEAgLTk2Nyw3ICs5NzIsNyBAQAogCQl1bnNpZ25lZCBsb25nIGxvY2tlZCwgbG9ja19saW1pdDsKIAkJbG9ja2VkID0gbGVuID4+IFBBR0VfU0hJRlQ7CiAJCWxvY2tlZCArPSBtbS0+bG9ja2VkX3ZtOwotCQlsb2NrX2xpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1cjsKKwkJbG9ja19saW1pdCA9IHJsaW1pdChSTElNSVRfTUVNTE9DSyk7CiAJCWxvY2tfbGltaXQgPj49IFBBR0VfU0hJRlQ7CiAJCWlmIChsb2NrZWQgPiBsb2NrX2xpbWl0ICYmICFjYXBhYmxlKENBUF9JUENfTE9DSykpCiAJCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTEwODMsNiArMTA4OCwzMCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKKyNpZmRlZiBfX0FSQ0hfV0FOVF9TWVNfT0xEX01NQVAKK3N0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl1bnNpZ25lZCBsb25nIGxlbjsKKwl1bnNpZ25lZCBsb25nIHByb3Q7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZkOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0OworfTsKKworU1lTQ0FMTF9ERUZJTkUxKG9sZF9tbWFwLCBzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0IF9fdXNlciAqLCBhcmcpCit7CisJc3RydWN0IG1tYXBfYXJnX3N0cnVjdCBhOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZhLCBhcmcsIHNpemVvZihhKSkpCisJCXJldHVybiAtRUZBVUxUOworCWlmIChhLm9mZnNldCAmIH5QQUdFX01BU0spCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHN5c19tbWFwX3Bnb2ZmKGEuYWRkciwgYS5sZW4sIGEucHJvdCwgYS5mbGFncywgYS5mZCwKKwkJCSAgICAgIGEub2Zmc2V0ID4+IFBBR0VfU0hJRlQpOworfQorI2VuZGlmIC8qIF9fQVJDSF9XQU5UX1NZU19PTERfTU1BUCAqLworCiAvKgogICogU29tZSBzaGFyZWQgbWFwcGlnbnMgd2lsbCB3YW50IHRoZSBwYWdlcyBtYXJrZWQgcmVhZC1vbmx5CiAgKiB0byB0cmFjayB3cml0ZSBldmVudHMuIElmIHNvLCB3ZSdsbCBkb3duZ3JhZGUgdm1fcGFnZV9wcm90CkBAIC0xMjA1LDYgKzEyMzQsNyBAQAogCXZtYS0+dm1fZmxhZ3MgPSB2bV9mbGFnczsKIAl2bWEtPnZtX3BhZ2VfcHJvdCA9IHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3MpOwogCXZtYS0+dm1fcGdvZmYgPSBwZ29mZjsKKwlJTklUX0xJU1RfSEVBRCgmdm1hLT5hbm9uX3ZtYV9jaGFpbik7CiAKIAlpZiAoZmlsZSkgewogCQllcnJvciA9IC1FSU5WQUw7CkBAIC0xMjY1LDEzICsxMjk1LDggQEAKIAltbS0+dG90YWxfdm0gKz0gbGVuID4+IFBBR0VfU0hJRlQ7CiAJdm1fc3RhdF9hY2NvdW50KG1tLCB2bV9mbGFncywgZmlsZSwgbGVuID4+IFBBR0VfU0hJRlQpOwogCWlmICh2bV9mbGFncyAmIFZNX0xPQ0tFRCkgewotCQkvKgotCQkgKiBtYWtlcyBwYWdlcyBwcmVzZW50OyBkb3duZ3JhZGVzLCBkcm9wcywgcmVhY3F1aXJlcyBtbWFwX3NlbQotCQkgKi8KLQkJbG9uZyBucl9wYWdlcyA9IG1sb2NrX3ZtYV9wYWdlc19yYW5nZSh2bWEsIGFkZHIsIGFkZHIgKyBsZW4pOwotCQlpZiAobnJfcGFnZXMgPCAwKQotCQkJcmV0dXJuIG5yX3BhZ2VzOwkvKiB2bWEgZ29uZSEgKi8KLQkJbW0tPmxvY2tlZF92bSArPSAobGVuID4+IFBBR0VfU0hJRlQpIC0gbnJfcGFnZXM7CisJCWlmICghbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHZtYSwgYWRkciwgYWRkciArIGxlbikpCisJCQltbS0+bG9ja2VkX3ZtICs9IChsZW4gPj4gUEFHRV9TSElGVCk7CiAJfSBlbHNlIGlmICgoZmxhZ3MgJiBNQVBfUE9QVUxBVEUpICYmICEoZmxhZ3MgJiBNQVBfTk9OQkxPQ0spKQogCQltYWtlX3BhZ2VzX3ByZXNlbnQoYWRkciwgYWRkciArIGxlbik7CiAJcmV0dXJuIGFkZHI7CkBAIC0xNTk5LDcgKzE2MjQsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCS8qIFN0YWNrIGxpbWl0IHRlc3QgKi8KLQlpZiAoc2l6ZSA+IHJsaW1bUkxJTUlUX1NUQUNLXS5ybGltX2N1cikKKwlpZiAoc2l6ZSA+IEFDQ0VTU19PTkNFKHJsaW1bUkxJTUlUX1NUQUNLXS5ybGltX2N1cikpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJLyogbWxvY2sgbGltaXQgdGVzdHMgKi8KQEAgLTE2MDcsNyArMTYzMiw4IEBACiAJCXVuc2lnbmVkIGxvbmcgbG9ja2VkOwogCQl1bnNpZ25lZCBsb25nIGxpbWl0OwogCQlsb2NrZWQgPSBtbS0+bG9ja2VkX3ZtICsgZ3JvdzsKLQkJbGltaXQgPSBybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1ciA+PiBQQUdFX1NISUZUOworCQlsaW1pdCA9IEFDQ0VTU19PTkNFKHJsaW1bUkxJTUlUX01FTUxPQ0tdLnJsaW1fY3VyKTsKKwkJbGltaXQgPj49IFBBR0VfU0hJRlQ7CiAJCWlmIChsb2NrZWQgPiBsaW1pdCAmJiAhY2FwYWJsZShDQVBfSVBDX0xPQ0spKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMTc1NCw4ICsxNzgwLDcgQEAKIAlpZiAoIXByZXYgfHwgZXhwYW5kX3N0YWNrKHByZXYsIGFkZHIpKQogCQlyZXR1cm4gTlVMTDsKIAlpZiAocHJldi0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQpIHsKLQkJaWYgKG1sb2NrX3ZtYV9wYWdlc19yYW5nZShwcmV2LCBhZGRyLCBwcmV2LT52bV9lbmQpIDwgMCkKLQkJCXJldHVybiBOVUxMOwkvKiB2bWEgZ29uZSEgKi8KKwkJbWxvY2tfdm1hX3BhZ2VzX3JhbmdlKHByZXYsIGFkZHIsIHByZXYtPnZtX2VuZCk7CiAJfQogCXJldHVybiBwcmV2OwogfQpAQCAtMTc4Myw4ICsxODA4LDcgQEAKIAlpZiAoZXhwYW5kX3N0YWNrKHZtYSwgYWRkcikpCiAJCXJldHVybiBOVUxMOwogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7Ci0JCWlmIChtbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBhZGRyLCBzdGFydCkgPCAwKQotCQkJcmV0dXJuIE5VTEw7CS8qIHZtYSBnb25lISAqLworCQltbG9ja192bWFfcGFnZXNfcmFuZ2Uodm1hLCBhZGRyLCBzdGFydCk7CiAJfQogCXJldHVybiB2bWE7CiB9CkBAIC0xODcxLDYgKzE4OTUsNyBAQAogewogCXN0cnVjdCBtZW1wb2xpY3kgKnBvbDsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5ldzsKKwlpbnQgZXJyID0gLUVOT01FTTsKIAogCWlmIChpc192bV9odWdldGxiX3BhZ2Uodm1hKSAmJiAoYWRkciAmCiAJCQkJCX4oaHVnZV9wYWdlX21hc2soaHN0YXRlX3ZtYSh2bWEpKSkpKQpAQCAtMTg3OCwxMSArMTkwMywxMyBAQAogCiAJbmV3ID0ga21lbV9jYWNoZV9hbGxvYyh2bV9hcmVhX2NhY2hlcCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFuZXcpCi0JCXJldHVybiAtRU5PTUVNOworCQlnb3RvIG91dF9lcnI7CiAKIAkvKiBtb3N0IGZpZWxkcyBhcmUgdGhlIHNhbWUsIGNvcHkgYWxsLCBhbmQgdGhlbiBmaXh1cCAqLwogCSpuZXcgPSAqdm1hOwogCisJSU5JVF9MSVNUX0hFQUQoJm5ldy0+YW5vbl92bWFfY2hhaW4pOworCiAJaWYgKG5ld19iZWxvdykKIAkJbmV3LT52bV9lbmQgPSBhZGRyOwogCWVsc2UgewpAQCAtMTg5MiwxMSArMTkxOSwxNCBAQAogCiAJcG9sID0gbXBvbF9kdXAodm1hX3BvbGljeSh2bWEpKTsKIAlpZiAoSVNfRVJSKHBvbCkpIHsKLQkJa21lbV9jYWNoZV9mcmVlKHZtX2FyZWFfY2FjaGVwLCBuZXcpOwotCQlyZXR1cm4gUFRSX0VSUihwb2wpOworCQllcnIgPSBQVFJfRVJSKHBvbCk7CisJCWdvdG8gb3V0X2ZyZWVfdm1hOwogCX0KIAl2bWFfc2V0X3BvbGljeShuZXcsIHBvbCk7CiAKKwlpZiAoYW5vbl92bWFfY2xvbmUobmV3LCB2bWEpKQorCQlnb3RvIG91dF9mcmVlX21wb2w7CisKIAlpZiAobmV3LT52bV9maWxlKSB7CiAJCWdldF9maWxlKG5ldy0+dm1fZmlsZSk7CiAJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQ1VUQUJMRSkKQEAgLTE5MDcsMTIgKzE5MzcsMjggQEAKIAkJbmV3LT52bV9vcHMtPm9wZW4obmV3KTsKIAogCWlmIChuZXdfYmVsb3cpCi0JCXZtYV9hZGp1c3Qodm1hLCBhZGRyLCB2bWEtPnZtX2VuZCwgdm1hLT52bV9wZ29mZiArCisJCWVyciA9IHZtYV9hZGp1c3Qodm1hLCBhZGRyLCB2bWEtPnZtX2VuZCwgdm1hLT52bV9wZ29mZiArCiAJCQkoKGFkZHIgLSBuZXctPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUKSwgbmV3KTsKIAllbHNlCi0JCXZtYV9hZGp1c3Qodm1hLCB2bWEtPnZtX3N0YXJ0LCBhZGRyLCB2bWEtPnZtX3Bnb2ZmLCBuZXcpOworCQllcnIgPSB2bWFfYWRqdXN0KHZtYSwgdm1hLT52bV9zdGFydCwgYWRkciwgdm1hLT52bV9wZ29mZiwgbmV3KTsKIAotCXJldHVybiAwOworCS8qIFN1Y2Nlc3MuICovCisJaWYgKCFlcnIpCisJCXJldHVybiAwOworCisJLyogQ2xlYW4gZXZlcnl0aGluZyB1cCBpZiB2bWFfYWRqdXN0IGZhaWxlZC4gKi8KKwluZXctPnZtX29wcy0+Y2xvc2UobmV3KTsKKwlpZiAobmV3LT52bV9maWxlKSB7CisJCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQ1VUQUJMRSkKKwkJCXJlbW92ZWRfZXhlX2ZpbGVfdm1hKG1tKTsKKwkJZnB1dChuZXctPnZtX2ZpbGUpOworCX0KKyBvdXRfZnJlZV9tcG9sOgorCW1wb2xfcHV0KHBvbCk7Cisgb3V0X2ZyZWVfdm1hOgorCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hlcCwgbmV3KTsKKyBvdXRfZXJyOgorCXJldHVybiBlcnI7CiB9CiAKIC8qCkBAIC0yMDc0LDcgKzIxMjAsNyBAQAogCQl1bnNpZ25lZCBsb25nIGxvY2tlZCwgbG9ja19saW1pdDsKIAkJbG9ja2VkID0gbGVuID4+IFBBR0VfU0hJRlQ7CiAJCWxvY2tlZCArPSBtbS0+bG9ja2VkX3ZtOwotCQlsb2NrX2xpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9NRU1MT0NLXS5ybGltX2N1cjsKKwkJbG9ja19saW1pdCA9IHJsaW1pdChSTElNSVRfTUVNTE9DSyk7CiAJCWxvY2tfbGltaXQgPj49IFBBR0VfU0hJRlQ7CiAJCWlmIChsb2NrZWQgPiBsb2NrX2xpbWl0ICYmICFjYXBhYmxlKENBUF9JUENfTE9DSykpCiAJCQlyZXR1cm4gLUVBR0FJTjsKQEAgLTIxMjIsNiArMjE2OCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAorCUlOSVRfTElTVF9IRUFEKCZ2bWEtPmFub25fdm1hX2NoYWluKTsKIAl2bWEtPnZtX21tID0gbW07CiAJdm1hLT52bV9zdGFydCA9IGFkZHI7CiAJdm1hLT52bV9lbmQgPSBhZGRyICsgbGVuOwpAQCAtMjI1OCwxMCArMjMwNSwxMSBAQAogCQlpZiAobmV3X3ZtYSkgewogCQkJKm5ld192bWEgPSAqdm1hOwogCQkJcG9sID0gbXBvbF9kdXAodm1hX3BvbGljeSh2bWEpKTsKLQkJCWlmIChJU19FUlIocG9sKSkgewotCQkJCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hlcCwgbmV3X3ZtYSk7Ci0JCQkJcmV0dXJuIE5VTEw7Ci0JCQl9CisJCQlpZiAoSVNfRVJSKHBvbCkpCisJCQkJZ290byBvdXRfZnJlZV92bWE7CisJCQlJTklUX0xJU1RfSEVBRCgmbmV3X3ZtYS0+YW5vbl92bWFfY2hhaW4pOworCQkJaWYgKGFub25fdm1hX2Nsb25lKG5ld192bWEsIHZtYSkpCisJCQkJZ290byBvdXRfZnJlZV9tZW1wb2w7CiAJCQl2bWFfc2V0X3BvbGljeShuZXdfdm1hLCBwb2wpOwogCQkJbmV3X3ZtYS0+dm1fc3RhcnQgPSBhZGRyOwogCQkJbmV3X3ZtYS0+dm1fZW5kID0gYWRkciArIGxlbjsKQEAgLTIyNzcsNiArMjMyNSwxMiBAQAogCQl9CiAJfQogCXJldHVybiBuZXdfdm1hOworCisgb3V0X2ZyZWVfbWVtcG9sOgorCW1wb2xfcHV0KHBvbCk7Cisgb3V0X2ZyZWVfdm1hOgorCWttZW1fY2FjaGVfZnJlZSh2bV9hcmVhX2NhY2hlcCwgbmV3X3ZtYSk7CisJcmV0dXJuIE5VTEw7CiB9CiAKIC8qCkBAIC0yMjg4LDcgKzIzNDIsNyBAQAogCXVuc2lnbmVkIGxvbmcgY3VyID0gbW0tPnRvdGFsX3ZtOwkvKiBwYWdlcyAqLwogCXVuc2lnbmVkIGxvbmcgbGltOwogCi0JbGltID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9BU10ucmxpbV9jdXIgPj4gUEFHRV9TSElGVDsKKwlsaW0gPSBybGltaXQoUkxJTUlUX0FTKSA+PiBQQUdFX1NISUZUOwogCiAJaWYgKGN1ciArIG5wYWdlcyA+IGxpbSkKIAkJcmV0dXJuIDA7CkBAIC0yMzU0LDYgKzI0MDgsNyBAQAogCWlmICh1bmxpa2VseSh2bWEgPT0gTlVMTCkpCiAJCXJldHVybiAtRU5PTUVNOwogCisJSU5JVF9MSVNUX0hFQUQoJnZtYS0+YW5vbl92bWFfY2hhaW4pOwogCXZtYS0+dm1fbW0gPSBtbTsKIAl2bWEtPnZtX3N0YXJ0ID0gYWRkcjsKIAl2bWEtPnZtX2VuZCA9IGFkZHIgKyBsZW47CkBAIC0yNDU0LDYgKzI1MDksNyBAQAogaW50IG1tX3Rha2VfYWxsX2xvY2tzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjOwogCWludCByZXQgPSAtRUlOVFI7CiAKIAlCVUdfT04oZG93bl9yZWFkX3RyeWxvY2soJm1tLT5tbWFwX3NlbSkpOwpAQCAtMjQ3MSw3ICsyNTI3LDggQEAKIAkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQkJZ290byBvdXRfdW5sb2NrOwogCQlpZiAodm1hLT5hbm9uX3ZtYSkKLQkJCXZtX2xvY2tfYW5vbl92bWEobW0sIHZtYS0+YW5vbl92bWEpOworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShhdmMsICZ2bWEtPmFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkKKwkJCQl2bV9sb2NrX2Fub25fdm1hKG1tLCBhdmMtPmFub25fdm1hKTsKIAl9CiAKIAlyZXQgPSAwOwpAQCAtMjUyNiwxMyArMjU4MywxNSBAQAogdm9pZCBtbV9kcm9wX2FsbF9sb2NrcyhzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YzsKIAogCUJVR19PTihkb3duX3JlYWRfdHJ5bG9jaygmbW0tPm1tYXBfc2VtKSk7CiAJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJm1tX2FsbF9sb2Nrc19tdXRleCkpOwogCiAJZm9yICh2bWEgPSBtbS0+bW1hcDsgdm1hOyB2bWEgPSB2bWEtPnZtX25leHQpIHsKIAkJaWYgKHZtYS0+YW5vbl92bWEpCi0JCQl2bV91bmxvY2tfYW5vbl92bWEodm1hLT5hbm9uX3ZtYSk7CisJCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGF2YywgJnZtYS0+YW5vbl92bWFfY2hhaW4sIHNhbWVfdm1hKQorCQkJCXZtX3VubG9ja19hbm9uX3ZtYShhdmMtPmFub25fdm1hKTsKIAkJaWYgKHZtYS0+dm1fZmlsZSAmJiB2bWEtPnZtX2ZpbGUtPmZfbWFwcGluZykKIAkJCXZtX3VubG9ja19tYXBwaW5nKHZtYS0+dm1fZmlsZS0+Zl9tYXBwaW5nKTsKIAl9CmRpZmYgLS1naXQgYS9tbS9tbXVfY29udGV4dC5jIGIvbW0vbW11X2NvbnRleHQuYwppbmRleCBkZWQ5MDgxLi4wNzc3NjU0IDEwMDY0NAotLS0gYS9tbS9tbXVfY29udGV4dC5jCisrKyBiL21tL21tdV9jb250ZXh0LmMKQEAgLTUsNiArNSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KIAogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgpAQCAtMzcsNiArMzgsNyBAQAogCWlmIChhY3RpdmVfbW0gIT0gbW0pCiAJCW1tZHJvcChhY3RpdmVfbW0pOwogfQorRVhQT1JUX1NZTUJPTF9HUEwodXNlX21tKTsKIAogLyoKICAqIHVudXNlX21tCkBAIC01NiwzICs1OCw0IEBACiAJZW50ZXJfbGF6eV90bGIobW0sIHRzayk7CiAJdGFza191bmxvY2sodHNrKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHVudXNlX21tKTsKZGlmZiAtLWdpdCBhL21tL21yZW1hcC5jIGIvbW0vbXJlbWFwLmMKaW5kZXggODQ1MTkwOC4uZTljNzVlZiAxMDA2NDQKLS0tIGEvbW0vbXJlbWFwLmMKKysrIGIvbW0vbXJlbWFwLmMKQEAgLTI4NSw3ICsyODUsNyBAQAogCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CiAJCXVuc2lnbmVkIGxvbmcgbG9ja2VkLCBsb2NrX2xpbWl0OwogCQlsb2NrZWQgPSBtbS0+bG9ja2VkX3ZtIDw8IFBBR0VfU0hJRlQ7Ci0JCWxvY2tfbGltaXQgPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX01FTUxPQ0tdLnJsaW1fY3VyOworCQlsb2NrX2xpbWl0ID0gcmxpbWl0KFJMSU1JVF9NRU1MT0NLKTsKIAkJbG9ja2VkICs9IG5ld19sZW4gLSBvbGRfbGVuOwogCQlpZiAobG9ja2VkID4gbG9ja19saW1pdCAmJiAhY2FwYWJsZShDQVBfSVBDX0xPQ0spKQogCQkJZ290byBFYWdhaW47CkBAIC00NjAsOCArNDYwLDExIEBACiAJCWlmICh2bWFfZXhwYW5kYWJsZSh2bWEsIG5ld19sZW4gLSBvbGRfbGVuKSkgewogCQkJaW50IHBhZ2VzID0gKG5ld19sZW4gLSBvbGRfbGVuKSA+PiBQQUdFX1NISUZUOwogCi0JCQl2bWFfYWRqdXN0KHZtYSwgdm1hLT52bV9zdGFydCwKLQkJCQlhZGRyICsgbmV3X2xlbiwgdm1hLT52bV9wZ29mZiwgTlVMTCk7CisJCQlpZiAodm1hX2FkanVzdCh2bWEsIHZtYS0+dm1fc3RhcnQsIGFkZHIgKyBuZXdfbGVuLAorCQkJCSAgICAgICB2bWEtPnZtX3Bnb2ZmLCBOVUxMKSkgeworCQkJCXJldCA9IC1FTk9NRU07CisJCQkJZ290byBvdXQ7CisJCQl9CiAKIAkJCW1tLT50b3RhbF92bSArPSBwYWdlczsKIAkJCXZtX3N0YXRfYWNjb3VudChtbSwgdm1hLT52bV9mbGFncywgdm1hLT52bV9maWxlLCBwYWdlcyk7CmRpZmYgLS1naXQgYS9tbS9ub21tdS5jIGIvbW0vbm9tbXUuYwppbmRleCA0OGEyZWNmLi42MDVhY2U4IDEwMDY0NAotLS0gYS9tbS9ub21tdS5jCisrKyBiL21tL25vbW11LmMKQEAgLTE0Niw3ICsxNDYsNyBAQAogCQkJKFZNX01BWVJFQUQgfCBWTV9NQVlXUklURSkgOiAoVk1fUkVBRCB8IFZNX1dSSVRFKTsKIAogCWZvciAoaSA9IDA7IGkgPCBucl9wYWdlczsgaSsrKSB7Ci0JCXZtYSA9IGZpbmRfdm1hKG1tLCBzdGFydCk7CisJCXZtYSA9IGZpbmRfZXh0ZW5kX3ZtYShtbSwgc3RhcnQpOwogCQlpZiAoIXZtYSkKIAkJCWdvdG8gZmluaXNoX29yX2ZhdWx0OwogCkBAIC03NjQsNyArNzY0LDcgQEAKICAqLwogc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX2V4dGVuZF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQlyZXR1cm4gZmluZF92bWEobW0sIGFkZHIpOworCXJldHVybiBmaW5kX3ZtYShtbSwgYWRkciAmIFBBR0VfTUFTSyk7CiB9CiAKIC8qCkBAIC0xMjA5LDcgKzEyMDksNyBAQAogCXJlZ2lvbi0+dm1fZmxhZ3MgPSB2bV9mbGFnczsKIAlyZWdpb24tPnZtX3Bnb2ZmID0gcGdvZmY7CiAKLQlJTklUX0xJU1RfSEVBRCgmdm1hLT5hbm9uX3ZtYV9ub2RlKTsKKwlJTklUX0xJU1RfSEVBRCgmdm1hLT5hbm9uX3ZtYV9jaGFpbik7CiAJdm1hLT52bV9mbGFncyA9IHZtX2ZsYWdzOwogCXZtYS0+dm1fcGdvZmYgPSBwZ29mZjsKIApAQCAtMTQyOCw2ICsxNDI4LDMwIEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAorI2lmZGVmIF9fQVJDSF9XQU5UX1NZU19PTERfTU1BUAorc3RydWN0IG1tYXBfYXJnX3N0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGxvbmcgbGVuOworCXVuc2lnbmVkIGxvbmcgcHJvdDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmQ7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQ7Cit9OworCitTWVNDQUxMX0RFRklORTEob2xkX21tYXAsIHN0cnVjdCBtbWFwX2FyZ19zdHJ1Y3QgX191c2VyICosIGFyZykKK3sKKwlzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0IGE7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmEsIGFyZywgc2l6ZW9mKGEpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJaWYgKGEub2Zmc2V0ICYgflBBR0VfTUFTSykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3lzX21tYXBfcGdvZmYoYS5hZGRyLCBhLmxlbiwgYS5wcm90LCBhLmZsYWdzLCBhLmZkLAorCQkJICAgICAgYS5vZmZzZXQgPj4gUEFHRV9TSElGVCk7Cit9CisjZW5kaWYgLyogX19BUkNIX1dBTlRfU1lTX09MRF9NTUFQICovCisKIC8qCiAgKiBzcGxpdCBhIHZtYSBpbnRvIHR3byBwaWVjZXMgYXQgYWRkcmVzcyAnYWRkcicsIGEgbmV3IHZtYSBpcyBhbGxvY2F0ZWQgZWl0aGVyCiAgKiBmb3IgdGhlIGZpcnN0IHBhcnQgb3IgdGhlIHRhaWwuCmRpZmYgLS1naXQgYS9tbS9vb21fa2lsbC5jIGIvbW0vb29tX2tpbGwuYwppbmRleCAyMzcwNTA0Li45YjIyM2FmIDEwMDY0NAotLS0gYS9tbS9vb21fa2lsbC5jCisrKyBiL21tL29vbV9raWxsLmMKQEAgLTQwMSw4ICs0MDEsOCBAQAogCQkgICAgICAgInZzejolbHVrQiwgYW5vbi1yc3M6JWx1a0IsIGZpbGUtcnNzOiVsdWtCXG4iLAogCQkgICAgICAgdGFza19waWRfbnIocCksIHAtPmNvbW0sCiAJCSAgICAgICBLKHAtPm1tLT50b3RhbF92bSksCi0JCSAgICAgICBLKGdldF9tbV9jb3VudGVyKHAtPm1tLCBhbm9uX3JzcykpLAotCQkgICAgICAgSyhnZXRfbW1fY291bnRlcihwLT5tbSwgZmlsZV9yc3MpKSk7CisJCSAgICAgICBLKGdldF9tbV9jb3VudGVyKHAtPm1tLCBNTV9BTk9OUEFHRVMpKSwKKwkJICAgICAgIEsoZ2V0X21tX2NvdW50ZXIocC0+bW0sIE1NX0ZJTEVQQUdFUykpKTsKIAl0YXNrX3VubG9jayhwKTsKIAogCS8qCkBAIC00NzMsNiArNDczLDggQEAKIAl1bnNpZ25lZCBsb25nIHBvaW50cyA9IDA7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCisJaWYgKHN5c2N0bF9wYW5pY19vbl9vb20gPT0gMikKKwkJcGFuaWMoIm91dCBvZiBtZW1vcnkobWVtY2cpLiBwYW5pY19vbl9vb20gaXMgc2VsZWN0ZWQuXG4iKTsKIAlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogcmV0cnk6CiAJcCA9IHNlbGVjdF9iYWRfcHJvY2VzcygmcG9pbnRzLCBtZW0pOwpAQCAtNjAxLDEzICs2MDMsNiBAQAogCQkvKiBHb3Qgc29tZSBtZW1vcnkgYmFjayBpbiB0aGUgbGFzdCBzZWNvbmQuICovCiAJCXJldHVybjsKIAotCS8qCi0JICogSWYgdGhpcyBpcyBmcm9tIG1lbWNnLCBvb20ta2lsbGVyIGlzIGFscmVhZHkgaW52b2tlZC4KLQkgKiBhbmQgbm90IHdvcnRoIHRvIGdvIHN5c3RlbS13aWRlLW9vbS4KLQkgKi8KLQlpZiAobWVtX2Nncm91cF9vb21fY2FsbGVkKGN1cnJlbnQpKQotCQlnb3RvIHJlc3RfYW5kX3JldHVybjsKLQogCWlmIChzeXNjdGxfcGFuaWNfb25fb29tKQogCQlwYW5pYygib3V0IG9mIG1lbW9yeSBmcm9tIHBhZ2UgZmF1bHQuIHBhbmljX29uX29vbSBpcyBzZWxlY3RlZC5cbiIpOwogCkBAIC02MTksNyArNjE0LDYgQEAKIAkgKiBHaXZlICJwIiBhIGdvb2QgY2hhbmNlIG9mIGtpbGxpbmcgaXRzZWxmIGJlZm9yZSB3ZQogCSAqIHJldHJ5IHRvIGFsbG9jYXRlIG1lbW9yeS4KIAkgKi8KLXJlc3RfYW5kX3JldHVybjoKIAlpZiAoIXRlc3RfdGhyZWFkX2ZsYWcoVElGX01FTURJRSkpCiAJCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKDEpOwogfQpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDhkZWI5ZDAuLmQwM2M5NDYgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTUwLDYgKzUwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rbWVtbGVhay5oPgogI2luY2x1ZGUgPGxpbnV4L21lbW9yeS5oPgogI2luY2x1ZGUgPHRyYWNlL2V2ZW50cy9rbWVtLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlX2V2ZW50Lmg+CiAKICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KQEAgLTc2LDYgKzc3LDMxIEBACiBpbnQgcGVyY3B1X3BhZ2VsaXN0X2ZyYWN0aW9uOwogZ2ZwX3QgZ2ZwX2FsbG93ZWRfbWFzayBfX3JlYWRfbW9zdGx5ID0gR0ZQX0JPT1RfTUFTSzsKIAorI2lmZGVmIENPTkZJR19QTV9TTEVFUAorLyoKKyAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSB1c2VkIGJ5IHRoZSBzdXNwZW5kL2hpYmVybmF0ZSBjb2RlIHRvIHRlbXBvcmFyaWx5CisgKiBjaGFuZ2UgZ2ZwX2FsbG93ZWRfbWFzayBpbiBvcmRlciB0byBhdm9pZCB1c2luZyBJL08gZHVyaW5nIG1lbW9yeSBhbGxvY2F0aW9ucworICogd2hpbGUgZGV2aWNlcyBhcmUgc3VzcGVuZGVkLiAgVG8gYXZvaWQgcmFjZXMgd2l0aCB0aGUgc3VzcGVuZC9oaWJlcm5hdGUgY29kZSwKKyAqIHRoZXkgc2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQgd2l0aCBwbV9tdXRleCBoZWxkIChnZnBfYWxsb3dlZF9tYXNrIGFsc28gc2hvdWxkCisgKiBvbmx5IGJlIG1vZGlmaWVkIHdpdGggcG1fbXV0ZXggaGVsZCwgdW5sZXNzIHRoZSBzdXNwZW5kL2hpYmVybmF0ZSBjb2RlIGlzCisgKiBndWFyYW50ZWVkIG5vdCB0byBydW4gaW4gcGFyYWxsZWwgd2l0aCB0aGF0IG1vZGlmaWNhdGlvbikuCisgKi8KK3ZvaWQgc2V0X2dmcF9hbGxvd2VkX21hc2soZ2ZwX3QgbWFzaykKK3sKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJnBtX211dGV4KSk7CisJZ2ZwX2FsbG93ZWRfbWFzayA9IG1hc2s7Cit9CisKK2dmcF90IGNsZWFyX2dmcF9hbGxvd2VkX21hc2soZ2ZwX3QgbWFzaykKK3sKKwlnZnBfdCByZXQgPSBnZnBfYWxsb3dlZF9tYXNrOworCisJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZwbV9tdXRleCkpOworCWdmcF9hbGxvd2VkX21hc2sgJj0gfm1hc2s7CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZiAvKiBDT05GSUdfUE1fU0xFRVAgKi8KKwogI2lmZGVmIENPTkZJR19IVUdFVExCX1BBR0VfU0laRV9WQVJJQUJMRQogaW50IHBhZ2VibG9ja19vcmRlciBfX3JlYWRfbW9zdGx5OwogI2VuZGlmCkBAIC0yNjMsMTAgKzI4OSw3IEBACiAKIAlwcmludGsoS0VSTl9BTEVSVCAiQlVHOiBCYWQgcGFnZSBzdGF0ZSBpbiBwcm9jZXNzICVzICBwZm46JTA1bHhcbiIsCiAJCWN1cnJlbnQtPmNvbW0sIHBhZ2VfdG9fcGZuKHBhZ2UpKTsKLQlwcmludGsoS0VSTl9BTEVSVAotCQkicGFnZTolcCBmbGFnczolcCBjb3VudDolZCBtYXBjb3VudDolZCBtYXBwaW5nOiVwIGluZGV4OiVseFxuIiwKLQkJcGFnZSwgKHZvaWQgKilwYWdlLT5mbGFncywgcGFnZV9jb3VudChwYWdlKSwKLQkJcGFnZV9tYXBjb3VudChwYWdlKSwgcGFnZS0+bWFwcGluZywgcGFnZS0+aW5kZXgpOworCWR1bXBfcGFnZShwYWdlKTsKIAogCWR1bXBfc3RhY2soKTsKIG91dDoKQEAgLTUzMCw3ICs1NTMsNyBAQAogCWludCBiYXRjaF9mcmVlID0gMDsKIAogCXNwaW5fbG9jaygmem9uZS0+bG9jayk7Ci0Jem9uZV9jbGVhcl9mbGFnKHpvbmUsIFpPTkVfQUxMX1VOUkVDTEFJTUFCTEUpOworCXpvbmUtPmFsbF91bnJlY2xhaW1hYmxlID0gMDsKIAl6b25lLT5wYWdlc19zY2FubmVkID0gMDsKIAogCV9fbW9kX3pvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9GUkVFX1BBR0VTLCBjb3VudCk7CkBAIC01NjgsNyArNTkxLDcgQEAKIAkJCQlpbnQgbWlncmF0ZXR5cGUpCiB7CiAJc3Bpbl9sb2NrKCZ6b25lLT5sb2NrKTsKLQl6b25lX2NsZWFyX2ZsYWcoem9uZSwgWk9ORV9BTExfVU5SRUNMQUlNQUJMRSk7CisJem9uZS0+YWxsX3VucmVjbGFpbWFibGUgPSAwOwogCXpvbmUtPnBhZ2VzX3NjYW5uZWQgPSAwOwogCiAJX19tb2Rfem9uZV9wYWdlX3N0YXRlKHpvbmUsIE5SX0ZSRUVfUEFHRVMsIDEgPDwgb3JkZXIpOwpAQCAtNTgzLDYgKzYwNiw3IEBACiAJaW50IGJhZCA9IDA7CiAJaW50IHdhc01sb2NrZWQgPSBfX1Rlc3RDbGVhclBhZ2VNbG9ja2VkKHBhZ2UpOwogCisJdHJhY2VfbW1fcGFnZV9mcmVlX2RpcmVjdChwYWdlLCBvcmRlcik7CiAJa21lbWNoZWNrX2ZyZWVfc2hhZG93KHBhZ2UsIG9yZGVyKTsKIAogCWZvciAoaSA9IDAgOyBpIDwgKDEgPDwgb3JkZXIpIDsgKytpKQpAQCAtMTAwOSwxMCArMTAzMywxMCBAQAogCQlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwc2V0OwogCQlzdHJ1Y3QgcGVyX2NwdV9wYWdlcyAqcGNwOwogCi0JCXBzZXQgPSB6b25lX3BjcCh6b25lLCBjcHUpOworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXBzZXQgPSBwZXJfY3B1X3B0cih6b25lLT5wYWdlc2V0LCBjcHUpOwogCiAJCXBjcCA9ICZwc2V0LT5wY3A7Ci0JCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJZnJlZV9wY3BwYWdlc19idWxrKHpvbmUsIHBjcC0+Y291bnQsIHBjcCk7CiAJCXBjcC0+Y291bnQgPSAwOwogCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CkBAIC0xMDczLDggKzEwOTcsOSBAQAogCiAvKgogICogRnJlZSBhIDAtb3JkZXIgcGFnZQorICogY29sZCA9PSAxID8gZnJlZSBhIGNvbGQgcGFnZSA6IGZyZWUgYSBob3QgcGFnZQogICovCi1zdGF0aWMgdm9pZCBmcmVlX2hvdF9jb2xkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBjb2xkKQordm9pZCBmcmVlX2hvdF9jb2xkX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGludCBjb2xkKQogewogCXN0cnVjdCB6b25lICp6b25lID0gcGFnZV96b25lKHBhZ2UpOwogCXN0cnVjdCBwZXJfY3B1X3BhZ2VzICpwY3A7CkBAIC0xMDgyLDYgKzExMDcsNyBAQAogCWludCBtaWdyYXRldHlwZTsKIAlpbnQgd2FzTWxvY2tlZCA9IF9fVGVzdENsZWFyUGFnZU1sb2NrZWQocGFnZSk7CiAKKwl0cmFjZV9tbV9wYWdlX2ZyZWVfZGlyZWN0KHBhZ2UsIDApOwogCWttZW1jaGVja19mcmVlX3NoYWRvdyhwYWdlLCAwKTsKIAogCWlmIChQYWdlQW5vbihwYWdlKSkKQEAgLTEwOTYsNyArMTEyMiw2IEBACiAJYXJjaF9mcmVlX3BhZ2UocGFnZSwgMCk7CiAJa2VybmVsX21hcF9wYWdlcyhwYWdlLCAxLCAwKTsKIAotCXBjcCA9ICZ6b25lX3BjcCh6b25lLCBnZXRfY3B1KCkpLT5wY3A7CiAJbWlncmF0ZXR5cGUgPSBnZXRfcGFnZWJsb2NrX21pZ3JhdGV0eXBlKHBhZ2UpOwogCXNldF9wYWdlX3ByaXZhdGUocGFnZSwgbWlncmF0ZXR5cGUpOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKQEAgLTExMTksNiArMTE0NCw3IEBACiAJCW1pZ3JhdGV0eXBlID0gTUlHUkFURV9NT1ZBQkxFOwogCX0KIAorCXBjcCA9ICZ0aGlzX2NwdV9wdHIoem9uZS0+cGFnZXNldCktPnBjcDsKIAlpZiAoY29sZCkKIAkJbGlzdF9hZGRfdGFpbCgmcGFnZS0+bHJ1LCAmcGNwLT5saXN0c1ttaWdyYXRldHlwZV0pOwogCWVsc2UKQEAgLTExMzEsMTUgKzExNTcsOCBAQAogCiBvdXQ6CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXB1dF9jcHUoKTsKIH0KIAotdm9pZCBmcmVlX2hvdF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQotewotCXRyYWNlX21tX3BhZ2VfZnJlZV9kaXJlY3QocGFnZSwgMCk7Ci0JZnJlZV9ob3RfY29sZF9wYWdlKHBhZ2UsIDApOwotfQotCQogLyoKICAqIHNwbGl0X3BhZ2UgdGFrZXMgYSBub24tY29tcG91bmQgaGlnaGVyLW9yZGVyIHBhZ2UsIGFuZCBzcGxpdHMgaXQgaW50bwogICogbiAoMTw8b3JkZXIpIHN1Yi1wYWdlczogcGFnZVswLi5uXQpAQCAtMTE4MSwxNyArMTIwMCwxNSBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJaW50IGNvbGQgPSAhIShnZnBfZmxhZ3MgJiBfX0dGUF9DT0xEKTsKLQlpbnQgY3B1OwogCiBhZ2FpbjoKLQljcHUgID0gZ2V0X2NwdSgpOwogCWlmIChsaWtlbHkob3JkZXIgPT0gMCkpIHsKIAkJc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcDsKIAkJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKIAotCQlwY3AgPSAmem9uZV9wY3Aoem9uZSwgY3B1KS0+cGNwOwotCQlsaXN0ID0gJnBjcC0+bGlzdHNbbWlncmF0ZXR5cGVdOwogCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXBjcCA9ICZ0aGlzX2NwdV9wdHIoem9uZS0+cGFnZXNldCktPnBjcDsKKwkJbGlzdCA9ICZwY3AtPmxpc3RzW21pZ3JhdGV0eXBlXTsKIAkJaWYgKGxpc3RfZW1wdHkobGlzdCkpIHsKIAkJCXBjcC0+Y291bnQgKz0gcm1xdWV1ZV9idWxrKHpvbmUsIDAsCiAJCQkJCXBjcC0+YmF0Y2gsIGxpc3QsCkBAIC0xMjMyLDcgKzEyNDksNiBAQAogCV9fY291bnRfem9uZV92bV9ldmVudHMoUEdBTExPQywgem9uZSwgMSA8PCBvcmRlcik7CiAJem9uZV9zdGF0aXN0aWNzKHByZWZlcnJlZF96b25lLCB6b25lKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JcHV0X2NwdSgpOwogCiAJVk1fQlVHX09OKGJhZF9yYW5nZSh6b25lLCBwYWdlKSk7CiAJaWYgKHByZXBfbmV3X3BhZ2UocGFnZSwgb3JkZXIsIGdmcF9mbGFncykpCkBAIC0xMjQxLDcgKzEyNTcsNiBAQAogCiBmYWlsZWQ6CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCXB1dF9jcHUoKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMjAxMyw5ICsyMDI4LDggQEAKIHZvaWQgX19mcmVlX3BhZ2VzKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpCiB7CiAJaWYgKHB1dF9wYWdlX3Rlc3R6ZXJvKHBhZ2UpKSB7Ci0JCXRyYWNlX21tX3BhZ2VfZnJlZV9kaXJlY3QocGFnZSwgb3JkZXIpOwogCQlpZiAob3JkZXIgPT0gMCkKLQkJCWZyZWVfaG90X3BhZ2UocGFnZSk7CisJCQlmcmVlX2hvdF9jb2xkX3BhZ2UocGFnZSwgMCk7CiAJCWVsc2UKIAkJCV9fZnJlZV9wYWdlc19vayhwYWdlLCBvcmRlcik7CiAJfQpAQCAtMjE4MCw3ICsyMTk0LDcgQEAKIAkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKIAkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBhZ2VzZXQ7CiAKLQkJCXBhZ2VzZXQgPSB6b25lX3BjcCh6b25lLCBjcHUpOworCQkJcGFnZXNldCA9IHBlcl9jcHVfcHRyKHpvbmUtPnBhZ2VzZXQsIGNwdSk7CiAKIAkJCXByaW50aygiQ1BVICU0ZDogaGk6JTVkLCBidGNoOiU0ZCB1c2Q6JTRkXG4iLAogCQkJICAgICAgIGNwdSwgcGFnZXNldC0+cGNwLmhpZ2gsCkBAIC0yMjcxLDcgKzIyODUsNyBAQAogCQkJSyh6b25lX3BhZ2Vfc3RhdGUoem9uZSwgTlJfQk9VTkNFKSksCiAJCQlLKHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9XUklURUJBQ0tfVEVNUCkpLAogCQkJem9uZS0+cGFnZXNfc2Nhbm5lZCwKLQkJCSh6b25lX2lzX2FsbF91bnJlY2xhaW1hYmxlKHpvbmUpID8gInllcyIgOiAibm8iKQorCQkJKHpvbmUtPmFsbF91bnJlY2xhaW1hYmxlID8gInllcyIgOiAibm8iKQogCQkJKTsKIAkJcHJpbnRrKCJsb3dtZW1fcmVzZXJ2ZVtdOiIpOwogCQlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspCkBAIC0yNzQ1LDEwICsyNzU5LDI5IEBACiAKICNlbmRpZgkvKiBDT05GSUdfTlVNQSAqLwogCisvKgorICogQm9vdCBwYWdlc2V0IHRhYmxlLiBPbmUgcGVyIGNwdSB3aGljaCBpcyBnb2luZyB0byBiZSB1c2VkIGZvciBhbGwKKyAqIHpvbmVzIGFuZCBhbGwgbm9kZXMuIFRoZSBwYXJhbWV0ZXJzIHdpbGwgYmUgc2V0IGluIHN1Y2ggYSB3YXkKKyAqIHRoYXQgYW4gaXRlbSBwdXQgb24gYSBsaXN0IHdpbGwgaW1tZWRpYXRlbHkgYmUgaGFuZGVkIG92ZXIgdG8KKyAqIHRoZSBidWRkeSBsaXN0LiBUaGlzIGlzIHNhZmUgc2luY2UgcGFnZXNldCBtYW5pcHVsYXRpb24gaXMgZG9uZQorICogd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICoKKyAqIFRoZSBib290X3BhZ2VzZXRzIG11c3QgYmUga2VwdCBldmVuIGFmdGVyIGJvb3R1cCBpcyBjb21wbGV0ZSBmb3IKKyAqIHVudXNlZCBwcm9jZXNzb3JzIGFuZC9vciB6b25lcy4gVGhleSBkbyBwbGF5IGEgcm9sZSBmb3IgYm9vdHN0cmFwcGluZworICogaG90cGx1Z2dlZCBwcm9jZXNzb3JzLgorICoKKyAqIHpvbmVpbmZvX3Nob3coKSBhbmQgbWF5YmUgb3RoZXIgZnVuY3Rpb25zIGRvCisgKiBub3QgY2hlY2sgaWYgdGhlIHByb2Nlc3NvciBpcyBvbmxpbmUgYmVmb3JlIGZvbGxvd2luZyB0aGUgcGFnZXNldCBwb2ludGVyLgorICogT3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBtYXkgbm90IGNoZWNrIGlmIHRoZSB6b25lIGlzIGF2YWlsYWJsZS4KKyAqLworc3RhdGljIHZvaWQgc2V0dXBfcGFnZXNldChzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwLCB1bnNpZ25lZCBsb25nIGJhdGNoKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0LCBib290X3BhZ2VzZXQpOworCiAvKiByZXR1cm4gdmFsdWVzIGludCAuLi4uanVzdCBmb3Igc3RvcF9tYWNoaW5lKCkgKi8KIHN0YXRpYyBpbnQgX19idWlsZF9hbGxfem9uZWxpc3RzKHZvaWQgKmR1bW15KQogewogCWludCBuaWQ7CisJaW50IGNwdTsKIAogI2lmZGVmIENPTkZJR19OVU1BCiAJbWVtc2V0KG5vZGVfbG9hZCwgMCwgc2l6ZW9mKG5vZGVfbG9hZCkpOwpAQCAtMjc1OSw2ICsyNzkyLDIzIEBACiAJCWJ1aWxkX3pvbmVsaXN0cyhwZ2RhdCk7CiAJCWJ1aWxkX3pvbmVsaXN0X2NhY2hlKHBnZGF0KTsKIAl9CisKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIGJvb3RfcGFnZXNldHMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgdXNlZAorCSAqIGZvciBib290c3RyYXBwaW5nIHByb2Nlc3NvcnMuIFRoZSByZWFsIHBhZ2VzZXRzIGZvcgorCSAqIGVhY2ggem9uZSB3aWxsIGJlIGFsbG9jYXRlZCBsYXRlciB3aGVuIHRoZSBwZXIgY3B1CisJICogYWxsb2NhdG9yIGlzIGF2YWlsYWJsZS4KKwkgKgorCSAqIGJvb3RfcGFnZXNldHMgYXJlIHVzZWQgYWxzbyBmb3IgYm9vdHN0cmFwcGluZyBvZmZsaW5lCisJICogY3B1cyBpZiB0aGUgc3lzdGVtIGlzIGFscmVhZHkgYm9vdGVkIGJlY2F1c2UgdGhlIHBhZ2VzZXRzCisJICogYXJlIG5lZWRlZCB0byBpbml0aWFsaXplIGFsbG9jYXRvcnMgb24gYSBzcGVjaWZpYyBjcHUgdG9vLgorCSAqIEYuZS4gdGhlIHBlcmNwdSBhbGxvY2F0b3IgbmVlZHMgdGhlIHBhZ2UgYWxsb2NhdG9yIHdoaWNoCisJICogbmVlZHMgdGhlIHBlcmNwdSBhbGxvY2F0b3IgaW4gb3JkZXIgdG8gYWxsb2NhdGUgaXRzIHBhZ2VzZXRzCisJICogKGEgY2hpY2tlbi1lZ2cgZGlsZW1tYSkuCisJICovCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKKwkJc2V0dXBfcGFnZXNldCgmcGVyX2NwdShib290X3BhZ2VzZXQsIGNwdSksIDApOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwOTYsMTIxICszMTQ2LDMzIEBACiAJCXBjcC0+YmF0Y2ggPSBQQUdFX1NISUZUICogODsKIH0KIAotCi0jaWZkZWYgQ09ORklHX05VTUEKIC8qCi0gKiBCb290IHBhZ2VzZXQgdGFibGUuIE9uZSBwZXIgY3B1IHdoaWNoIGlzIGdvaW5nIHRvIGJlIHVzZWQgZm9yIGFsbAotICogem9uZXMgYW5kIGFsbCBub2Rlcy4gVGhlIHBhcmFtZXRlcnMgd2lsbCBiZSBzZXQgaW4gc3VjaCBhIHdheQotICogdGhhdCBhbiBpdGVtIHB1dCBvbiBhIGxpc3Qgd2lsbCBpbW1lZGlhdGVseSBiZSBoYW5kZWQgb3ZlciB0bwotICogdGhlIGJ1ZGR5IGxpc3QuIFRoaXMgaXMgc2FmZSBzaW5jZSBwYWdlc2V0IG1hbmlwdWxhdGlvbiBpcyBkb25lCi0gKiB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCi0gKgotICogU29tZSBOVU1BIGNvdW50ZXIgdXBkYXRlcyBtYXkgYWxzbyBiZSBjYXVnaHQgYnkgdGhlIGJvb3QgcGFnZXNldHMuCi0gKgotICogVGhlIGJvb3RfcGFnZXNldHMgbXVzdCBiZSBrZXB0IGV2ZW4gYWZ0ZXIgYm9vdHVwIGlzIGNvbXBsZXRlIGZvcgotICogdW51c2VkIHByb2Nlc3NvcnMgYW5kL29yIHpvbmVzLiBUaGV5IGRvIHBsYXkgYSByb2xlIGZvciBib290c3RyYXBwaW5nCi0gKiBob3RwbHVnZ2VkIHByb2Nlc3NvcnMuCi0gKgotICogem9uZWluZm9fc2hvdygpIGFuZCBtYXliZSBvdGhlciBmdW5jdGlvbnMgZG8KLSAqIG5vdCBjaGVjayBpZiB0aGUgcHJvY2Vzc29yIGlzIG9ubGluZSBiZWZvcmUgZm9sbG93aW5nIHRoZSBwYWdlc2V0IHBvaW50ZXIuCi0gKiBPdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIG1heSBub3QgY2hlY2sgaWYgdGhlIHpvbmUgaXMgYXZhaWxhYmxlLgorICogQWxsb2NhdGUgcGVyIGNwdSBwYWdlc2V0cyBhbmQgaW5pdGlhbGl6ZSB0aGVtLgorICogQmVmb3JlIHRoaXMgY2FsbCBvbmx5IGJvb3QgcGFnZXNldHMgd2VyZSBhdmFpbGFibGUuCisgKiBCb290IHBhZ2VzZXRzIHdpbGwgbm8gbG9uZ2VyIGJlIHVzZWQgYnkgdGhpcyBwcm9jZXNzb3JyCisgKiBhZnRlciBzZXR1cF9wZXJfY3B1X3BhZ2VzZXQoKS4KICAqLwotc3RhdGljIHN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgYm9vdF9wYWdlc2V0W05SX0NQVVNdOwotCi0vKgotICogRHluYW1pY2FsbHkgYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUKLSAqIHBlciBjcHUgcGFnZXNldCBhcnJheSBpbiBzdHJ1Y3Qgem9uZS4KLSAqLwotc3RhdGljIGludCBfX2NwdWluaXQgcHJvY2Vzc196b25lcyhpbnQgY3B1KQotewotCXN0cnVjdCB6b25lICp6b25lLCAqZHpvbmU7Ci0JaW50IG5vZGUgPSBjcHVfdG9fbm9kZShjcHUpOwotCi0Jbm9kZV9zZXRfc3RhdGUobm9kZSwgTl9DUFUpOwkvKiB0aGlzIG5vZGUgaGFzIGEgY3B1ICovCi0KLQlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKSB7Ci0JCXpvbmVfcGNwKHpvbmUsIGNwdSkgPSBrbWFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQpLAotCQkJCQkgR0ZQX0tFUk5FTCwgbm9kZSk7Ci0JCWlmICghem9uZV9wY3Aoem9uZSwgY3B1KSkKLQkJCWdvdG8gYmFkOwotCi0JCXNldHVwX3BhZ2VzZXQoem9uZV9wY3Aoem9uZSwgY3B1KSwgem9uZV9iYXRjaHNpemUoem9uZSkpOwotCi0JCWlmIChwZXJjcHVfcGFnZWxpc3RfZnJhY3Rpb24pCi0JCQlzZXR1cF9wYWdlbGlzdF9oaWdobWFyayh6b25lX3BjcCh6b25lLCBjcHUpLAotCQkJICAgICh6b25lLT5wcmVzZW50X3BhZ2VzIC8gcGVyY3B1X3BhZ2VsaXN0X2ZyYWN0aW9uKSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci1iYWQ6Ci0JZm9yX2VhY2hfem9uZShkem9uZSkgewotCQlpZiAoIXBvcHVsYXRlZF96b25lKGR6b25lKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoZHpvbmUgPT0gem9uZSkKLQkJCWJyZWFrOwotCQlrZnJlZSh6b25lX3BjcChkem9uZSwgY3B1KSk7Ci0JCXpvbmVfcGNwKGR6b25lLCBjcHUpID0gJmJvb3RfcGFnZXNldFtjcHVdOwotCX0KLQlyZXR1cm4gLUVOT01FTTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGZyZWVfem9uZV9wYWdlc2V0cyhpbnQgY3B1KQotewotCXN0cnVjdCB6b25lICp6b25lOwotCi0JZm9yX2VhY2hfem9uZSh6b25lKSB7Ci0JCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBzZXQgPSB6b25lX3BjcCh6b25lLCBjcHUpOwotCi0JCS8qIEZyZWUgcGVyX2NwdV9wYWdlc2V0IGlmIGl0IGlzIHNsYWIgYWxsb2NhdGVkICovCi0JCWlmIChwc2V0ICE9ICZib290X3BhZ2VzZXRbY3B1XSkKLQkJCWtmcmVlKHBzZXQpOwotCQl6b25lX3BjcCh6b25lLCBjcHUpID0gJmJvb3RfcGFnZXNldFtjcHVdOwotCX0KLX0KLQotc3RhdGljIGludCBfX2NwdWluaXQgcGFnZXNldF9jcHV1cF9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKLQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sCi0JCXZvaWQgKmhjcHUpCi17Ci0JaW50IGNwdSA9IChsb25nKWhjcHU7Ci0JaW50IHJldCA9IE5PVElGWV9PSzsKLQotCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSBDUFVfVVBfUFJFUEFSRToKLQljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKLQkJaWYgKHByb2Nlc3Nfem9uZXMoY3B1KSkKLQkJCXJldCA9IE5PVElGWV9CQUQ7Ci0JCWJyZWFrOwotCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgotCWNhc2UgQ1BVX1VQX0NBTkNFTEVEX0ZST1pFTjoKLQljYXNlIENQVV9ERUFEOgotCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgotCQlmcmVlX3pvbmVfcGFnZXNldHMoY3B1KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgX19jcHVpbml0ZGF0YSBwYWdlc2V0X25vdGlmaWVyID0KLQl7ICZwYWdlc2V0X2NwdXVwX2NhbGxiYWNrLCBOVUxMLCAwIH07Ci0KIHZvaWQgX19pbml0IHNldHVwX3Blcl9jcHVfcGFnZXNldCh2b2lkKQogewotCWludCBlcnI7CisJc3RydWN0IHpvbmUgKnpvbmU7CisJaW50IGNwdTsKIAotCS8qIEluaXRpYWxpemUgcGVyX2NwdV9wYWdlc2V0IGZvciBjcHUgMC4KLQkgKiBBIGNwdXVwIGNhbGxiYWNrIHdpbGwgZG8gdGhpcyBmb3IgZXZlcnkgY3B1Ci0JICogYXMgaXQgY29tZXMgb25saW5lCi0JICovCi0JZXJyID0gcHJvY2Vzc196b25lcyhzbXBfcHJvY2Vzc29yX2lkKCkpOwotCUJVR19PTihlcnIpOwotCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmcGFnZXNldF9ub3RpZmllcik7CisJZm9yX2VhY2hfcG9wdWxhdGVkX3pvbmUoem9uZSkgeworCQl6b25lLT5wYWdlc2V0ID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQpOworCisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKKwkJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBjcCA9IHBlcl9jcHVfcHRyKHpvbmUtPnBhZ2VzZXQsIGNwdSk7CisKKwkJCXNldHVwX3BhZ2VzZXQocGNwLCB6b25lX2JhdGNoc2l6ZSh6b25lKSk7CisKKwkJCWlmIChwZXJjcHVfcGFnZWxpc3RfZnJhY3Rpb24pCisJCQkJc2V0dXBfcGFnZWxpc3RfaGlnaG1hcmsocGNwLAorCQkJCQkoem9uZS0+cHJlc2VudF9wYWdlcyAvCisJCQkJCQlwZXJjcHVfcGFnZWxpc3RfZnJhY3Rpb24pKTsKKwkJfQorCX0KIH0KIAotI2VuZGlmCi0KIHN0YXRpYyBub2lubGluZSBfX2luaXRfcmVmb2sKIGludCB6b25lX3dhaXRfdGFibGVfaW5pdChzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyB6b25lX3NpemVfcGFnZXMpCiB7CkBAIC0zMjYwLDExICszMjIyLDExIEBACiAJaW50IGNwdTsKIAl1bnNpZ25lZCBsb25nIGJhdGNoID0gem9uZV9iYXRjaHNpemUoem9uZSksIGZsYWdzOwogCi0JZm9yIChjcHUgPSAwOyBjcHUgPCBOUl9DUFVTOyBjcHUrKykgeworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJc3RydWN0IHBlcl9jcHVfcGFnZXNldCAqcHNldDsKIAkJc3RydWN0IHBlcl9jcHVfcGFnZXMgKnBjcDsKIAotCQlwc2V0ID0gem9uZV9wY3Aoem9uZSwgY3B1KTsKKwkJcHNldCA9IHBlcl9jcHVfcHRyKHpvbmUtPnBhZ2VzZXQsIGNwdSk7CiAJCXBjcCA9ICZwc2V0LT5wY3A7CiAKIAkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwpAQCAtMzI4MiwyMSArMzI0NCwxNyBAQAogCiBzdGF0aWMgX19tZW1pbml0IHZvaWQgem9uZV9wY3BfaW5pdChzdHJ1Y3Qgem9uZSAqem9uZSkKIHsKLQlpbnQgY3B1OwotCXVuc2lnbmVkIGxvbmcgYmF0Y2ggPSB6b25lX2JhdGNoc2l6ZSh6b25lKTsKKwkvKgorCSAqIHBlciBjcHUgc3Vic3lzdGVtIGlzIG5vdCB1cCBhdCB0aGlzIHBvaW50LiBUaGUgZm9sbG93aW5nIGNvZGUKKwkgKiByZWxpZXMgb24gdGhlIGFiaWxpdHkgb2YgdGhlIGxpbmtlciB0byBwcm92aWRlIHRoZQorCSAqIG9mZnNldCBvZiBhIChzdGF0aWMpIHBlciBjcHUgdmFyaWFibGUgaW50byB0aGUgcGVyIGNwdSBhcmVhLgorCSAqLworCXpvbmUtPnBhZ2VzZXQgPSAmYm9vdF9wYWdlc2V0OwogCi0JZm9yIChjcHUgPSAwOyBjcHUgPCBOUl9DUFVTOyBjcHUrKykgewotI2lmZGVmIENPTkZJR19OVU1BCi0JCS8qIEVhcmx5IGJvb3QuIFNsYWIgYWxsb2NhdG9yIG5vdCBmdW5jdGlvbmFsIHlldCAqLwotCQl6b25lX3BjcCh6b25lLCBjcHUpID0gJmJvb3RfcGFnZXNldFtjcHVdOwotCQlzZXR1cF9wYWdlc2V0KCZib290X3BhZ2VzZXRbY3B1XSwwKTsKLSNlbHNlCi0JCXNldHVwX3BhZ2VzZXQoem9uZV9wY3Aoem9uZSxjcHUpLCBiYXRjaCk7Ci0jZW5kaWYKLQl9CiAJaWYgKHpvbmUtPnByZXNlbnRfcGFnZXMpCi0JCXByaW50ayhLRVJOX0RFQlVHICIgICVzIHpvbmU6ICVsdSBwYWdlcywgTElGTyBiYXRjaDolbHVcbiIsCi0JCQl6b25lLT5uYW1lLCB6b25lLT5wcmVzZW50X3BhZ2VzLCBiYXRjaCk7CisJCXByaW50ayhLRVJOX0RFQlVHICIgICVzIHpvbmU6ICVsdSBwYWdlcywgTElGTyBiYXRjaDoldVxuIiwKKwkJCXpvbmUtPm5hbWUsIHpvbmUtPnByZXNlbnRfcGFnZXMsCisJCQkJCSB6b25lX2JhdGNoc2l6ZSh6b25lKSk7CiB9CiAKIF9fbWVtaW5pdCBpbnQgaW5pdF9jdXJyZW50bHlfZW1wdHlfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwKQEAgLTM0MzUsNiArMzM5Myw2MSBAQAogCX0KIH0KIAoraW50IF9faW5pdCBhZGRfZnJvbV9lYXJseV9ub2RlX21hcChzdHJ1Y3QgcmFuZ2UgKnJhbmdlLCBpbnQgYXosCisJCQkJICAgaW50IG5yX3JhbmdlLCBpbnQgbmlkKQoreworCWludCBpOworCXU2NCBzdGFydCwgZW5kOworCisJLyogbmVlZCB0byBnbyBvdmVyIGVhcmx5X25vZGVfbWFwIHRvIGZpbmQgb3V0IGdvb2QgcmFuZ2UgZm9yIG5vZGUgKi8KKwlmb3JfZWFjaF9hY3RpdmVfcmFuZ2VfaW5kZXhfaW5fbmlkKGksIG5pZCkgeworCQlzdGFydCA9IGVhcmx5X25vZGVfbWFwW2ldLnN0YXJ0X3BmbjsKKwkJZW5kID0gZWFybHlfbm9kZV9tYXBbaV0uZW5kX3BmbjsKKwkJbnJfcmFuZ2UgPSBhZGRfcmFuZ2UocmFuZ2UsIGF6LCBucl9yYW5nZSwgc3RhcnQsIGVuZCk7CisJfQorCXJldHVybiBucl9yYW5nZTsKK30KKworI2lmZGVmIENPTkZJR19OT19CT09UTUVNCit2b2lkICogX19pbml0IF9fYWxsb2NfbWVtb3J5X2NvcmVfZWFybHkoaW50IG5pZCwgdTY0IHNpemUsIHU2NCBhbGlnbiwKKwkJCQkJdTY0IGdvYWwsIHU2NCBsaW1pdCkKK3sKKwlpbnQgaTsKKwl2b2lkICpwdHI7CisKKwkvKiBuZWVkIHRvIGdvIG92ZXIgZWFybHlfbm9kZV9tYXAgdG8gZmluZCBvdXQgZ29vZCByYW5nZSBmb3Igbm9kZSAqLworCWZvcl9lYWNoX2FjdGl2ZV9yYW5nZV9pbmRleF9pbl9uaWQoaSwgbmlkKSB7CisJCXU2NCBhZGRyOworCQl1NjQgZWlfc3RhcnQsIGVpX2xhc3Q7CisKKwkJZWlfbGFzdCA9IGVhcmx5X25vZGVfbWFwW2ldLmVuZF9wZm47CisJCWVpX2xhc3QgPDw9IFBBR0VfU0hJRlQ7CisJCWVpX3N0YXJ0ID0gZWFybHlfbm9kZV9tYXBbaV0uc3RhcnRfcGZuOworCQllaV9zdGFydCA8PD0gUEFHRV9TSElGVDsKKwkJYWRkciA9IGZpbmRfZWFybHlfYXJlYShlaV9zdGFydCwgZWlfbGFzdCwKKwkJCQkJIGdvYWwsIGxpbWl0LCBzaXplLCBhbGlnbik7CisKKwkJaWYgKGFkZHIgPT0gLTFVTEwpCisJCQljb250aW51ZTsKKworI2lmIDAKKwkJcHJpbnRrKEtFUk5fREVCVUcgImFsbG9jIChuaWQ9JWQgJWxseCAtICVsbHgpICglbGx4IC0gJWxseCkgJWxseCAlbGx4ID0+ICVsbHhcbiIsCisJCQkJbmlkLAorCQkJCWVpX3N0YXJ0LCBlaV9sYXN0LCBnb2FsLCBsaW1pdCwgc2l6ZSwKKwkJCQlhbGlnbiwgYWRkcik7CisjZW5kaWYKKworCQlwdHIgPSBwaHlzX3RvX3ZpcnQoYWRkcik7CisJCW1lbXNldChwdHIsIDAsIHNpemUpOworCQlyZXNlcnZlX2Vhcmx5X3dpdGhvdXRfY2hlY2soYWRkciwgYWRkciArIHNpemUsICJCT09UTUVNIik7CisJCXJldHVybiBwdHI7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworCiB2b2lkIF9faW5pdCB3b3JrX3dpdGhfYWN0aXZlX3JlZ2lvbnMoaW50IG5pZCwgd29ya19mbl90IHdvcmtfZm4sIHZvaWQgKmRhdGEpCiB7CiAJaW50IGk7CkBAIC00Mzc3LDggKzQzOTAsMTIgQEAKIAlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspIHsKIAkJaWYgKGkgPT0gWk9ORV9NT1ZBQkxFKQogCQkJY29udGludWU7Ci0JCXByaW50aygiICAlLThzICUwIzEwbHggLT4gJTAjMTBseFxuIiwKLQkJCQl6b25lX25hbWVzW2ldLAorCQlwcmludGsoIiAgJS04cyAiLCB6b25lX25hbWVzW2ldKTsKKwkJaWYgKGFyY2hfem9uZV9sb3dlc3RfcG9zc2libGVfcGZuW2ldID09CisJCQkJYXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW2ldKQorCQkJcHJpbnRrKCJlbXB0eVxuIik7CisJCWVsc2UKKwkJCXByaW50aygiJTAjMTBseCAtPiAlMCMxMGx4XG4iLAogCQkJCWFyY2hfem9uZV9sb3dlc3RfcG9zc2libGVfcGZuW2ldLAogCQkJCWFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3BmbltpXSk7CiAJfQpAQCAtNDQ2Nyw3ICs0NDg0LDExIEBACiB9CiAKICNpZm5kZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKLXN0cnVjdCBwZ2xpc3RfZGF0YSBfX3JlZmRhdGEgY29udGlnX3BhZ2VfZGF0YSA9IHsgLmJkYXRhID0gJmJvb3RtZW1fbm9kZV9kYXRhWzBdIH07CitzdHJ1Y3QgcGdsaXN0X2RhdGEgX19yZWZkYXRhIGNvbnRpZ19wYWdlX2RhdGEgPSB7CisjaWZuZGVmIENPTkZJR19OT19CT09UTUVNCisgLmJkYXRhID0gJmJvb3RtZW1fbm9kZV9kYXRhWzBdCisjZW5kaWYKKyB9OwogRVhQT1JUX1NZTUJPTChjb250aWdfcGFnZV9kYXRhKTsKICNlbmRpZgogCkBAIC00ODEwLDEwICs0ODMxLDExIEBACiAJaWYgKCF3cml0ZSB8fCAocmV0ID09IC1FSU5WQUwpKQogCQlyZXR1cm4gcmV0OwogCWZvcl9lYWNoX3BvcHVsYXRlZF96b25lKHpvbmUpIHsKLQkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQkJdW5zaWduZWQgbG9uZyAgaGlnaDsKIAkJCWhpZ2ggPSB6b25lLT5wcmVzZW50X3BhZ2VzIC8gcGVyY3B1X3BhZ2VsaXN0X2ZyYWN0aW9uOwotCQkJc2V0dXBfcGFnZWxpc3RfaGlnaG1hcmsoem9uZV9wY3Aoem9uZSwgY3B1KSwgaGlnaCk7CisJCQlzZXR1cF9wYWdlbGlzdF9oaWdobWFyaygKKwkJCQlwZXJfY3B1X3B0cih6b25lLT5wYWdlc2V0LCBjcHUpLCBoaWdoKTsKIAkJfQogCX0KIAlyZXR1cm4gMDsKQEAgLTUxNTksMyArNTE4MSw4MCBAQAogCXJldHVybiBvcmRlciA8IE1BWF9PUkRFUjsKIH0KICNlbmRpZgorCitzdGF0aWMgc3RydWN0IHRyYWNlX3ByaW50X2ZsYWdzIHBhZ2VmbGFnX25hbWVzW10gPSB7CisJezFVTCA8PCBQR19sb2NrZWQsCQkibG9ja2VkIgl9LAorCXsxVUwgPDwgUEdfZXJyb3IsCQkiZXJyb3IiCQl9LAorCXsxVUwgPDwgUEdfcmVmZXJlbmNlZCwJCSJyZWZlcmVuY2VkIgl9LAorCXsxVUwgPDwgUEdfdXB0b2RhdGUsCQkidXB0b2RhdGUiCX0sCisJezFVTCA8PCBQR19kaXJ0eSwJCSJkaXJ0eSIJCX0sCisJezFVTCA8PCBQR19scnUsCQkJImxydSIJCX0sCisJezFVTCA8PCBQR19hY3RpdmUsCQkiYWN0aXZlIgl9LAorCXsxVUwgPDwgUEdfc2xhYiwJCSJzbGFiIgkJfSwKKwl7MVVMIDw8IFBHX293bmVyX3ByaXZfMSwJIm93bmVyX3ByaXZfMSIJfSwKKwl7MVVMIDw8IFBHX2FyY2hfMSwJCSJhcmNoXzEiCX0sCisJezFVTCA8PCBQR19yZXNlcnZlZCwJCSJyZXNlcnZlZCIJfSwKKwl7MVVMIDw8IFBHX3ByaXZhdGUsCQkicHJpdmF0ZSIJfSwKKwl7MVVMIDw8IFBHX3ByaXZhdGVfMiwJCSJwcml2YXRlXzIiCX0sCisJezFVTCA8PCBQR193cml0ZWJhY2ssCQkid3JpdGViYWNrIgl9LAorI2lmZGVmIENPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQKKwl7MVVMIDw8IFBHX2hlYWQsCQkiaGVhZCIJCX0sCisJezFVTCA8PCBQR190YWlsLAkJInRhaWwiCQl9LAorI2Vsc2UKKwl7MVVMIDw8IFBHX2NvbXBvdW5kLAkJImNvbXBvdW5kIgl9LAorI2VuZGlmCisJezFVTCA8PCBQR19zd2FwY2FjaGUsCQkic3dhcGNhY2hlIgl9LAorCXsxVUwgPDwgUEdfbWFwcGVkdG9kaXNrLAkibWFwcGVkdG9kaXNrIgl9LAorCXsxVUwgPDwgUEdfcmVjbGFpbSwJCSJyZWNsYWltIgl9LAorCXsxVUwgPDwgUEdfYnVkZHksCQkiYnVkZHkiCQl9LAorCXsxVUwgPDwgUEdfc3dhcGJhY2tlZCwJCSJzd2FwYmFja2VkIgl9LAorCXsxVUwgPDwgUEdfdW5ldmljdGFibGUsCQkidW5ldmljdGFibGUiCX0sCisjaWZkZWYgQ09ORklHX01NVQorCXsxVUwgPDwgUEdfbWxvY2tlZCwJCSJtbG9ja2VkIgl9LAorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfVVNFU19QR19VTkNBQ0hFRAorCXsxVUwgPDwgUEdfdW5jYWNoZWQsCQkidW5jYWNoZWQiCX0sCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfTUVNT1JZX0ZBSUxVUkUKKwl7MVVMIDw8IFBHX2h3cG9pc29uLAkJImh3cG9pc29uIgl9LAorI2VuZGlmCisJey0xVUwsCQkJCU5VTEwJCX0sCit9OworCitzdGF0aWMgdm9pZCBkdW1wX3BhZ2VfZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwljb25zdCBjaGFyICpkZWxpbSA9ICIiOworCXVuc2lnbmVkIGxvbmcgbWFzazsKKwlpbnQgaTsKKworCXByaW50ayhLRVJOX0FMRVJUICJwYWdlIGZsYWdzOiAlI2x4KCIsIGZsYWdzKTsKKworCS8qIHJlbW92ZSB6b25lIGlkICovCisJZmxhZ3MgJj0gKDFVTCA8PCBOUl9QQUdFRkxBR1MpIC0gMTsKKworCWZvciAoaSA9IDA7IHBhZ2VmbGFnX25hbWVzW2ldLm5hbWUgJiYgZmxhZ3M7IGkrKykgeworCisJCW1hc2sgPSBwYWdlZmxhZ19uYW1lc1tpXS5tYXNrOworCQlpZiAoKGZsYWdzICYgbWFzaykgIT0gbWFzaykKKwkJCWNvbnRpbnVlOworCisJCWZsYWdzICY9IH5tYXNrOworCQlwcmludGsoIiVzJXMiLCBkZWxpbSwgcGFnZWZsYWdfbmFtZXNbaV0ubmFtZSk7CisJCWRlbGltID0gInwiOworCX0KKworCS8qIGNoZWNrIGZvciBsZWZ0IG92ZXIgZmxhZ3MgKi8KKwlpZiAoZmxhZ3MpCisJCXByaW50aygiJXMlI2x4IiwgZGVsaW0sIGZsYWdzKTsKKworCXByaW50aygiKVxuIik7Cit9CisKK3ZvaWQgZHVtcF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQoreworCXByaW50ayhLRVJOX0FMRVJUCisJICAgICAgICJwYWdlOiVwIGNvdW50OiVkIG1hcGNvdW50OiVkIG1hcHBpbmc6JXAgaW5kZXg6JSNseFxuIiwKKwkJcGFnZSwgcGFnZV9jb3VudChwYWdlKSwgcGFnZV9tYXBjb3VudChwYWdlKSwKKwkJcGFnZS0+bWFwcGluZywgcGFnZS0+aW5kZXgpOworCWR1bXBfcGFnZV9mbGFncyhwYWdlLT5mbGFncyk7Cit9CmRpZmYgLS1naXQgYS9tbS9wYWdlX2Nncm91cC5jIGIvbW0vcGFnZV9jZ3JvdXAuYwppbmRleCAzZDUzNWQ1Li4zZGQ4ODUzIDEwMDY0NAotLS0gYS9tbS9wYWdlX2Nncm91cC5jCisrKyBiL21tL3BhZ2VfY2dyb3VwLmMKQEAgLTMzNSw2ICszMzUsMzcgQEAKIH0KIAogLyoqCisgKiBzd2FwX2Nncm91cF9jbXB4Y2hnIC0gY21weGNoZyBtZW1fY2dyb3VwJ3MgaWQgZm9yIHRoaXMgc3dwX2VudHJ5LgorICogQGVuZDogc3dhcCBlbnRyeSB0byBiZSBjbXB4Y2hnZWQKKyAqIEBvbGQ6IG9sZCBpZAorICogQG5ldzogbmV3IGlkCisgKgorICogUmV0dXJucyBvbGQgaWQgYXQgc3VjY2VzcywgMCBhdCBmYWlsdXJlLgorICogKFRoZXJlIGlzIG5vIG1lbV9jZ3JvdXAgdXNlaW5nIDAgYXMgaXRzIGlkKQorICovCit1bnNpZ25lZCBzaG9ydCBzd2FwX2Nncm91cF9jbXB4Y2hnKHN3cF9lbnRyeV90IGVudCwKKwkJCQkJdW5zaWduZWQgc2hvcnQgb2xkLCB1bnNpZ25lZCBzaG9ydCBuZXcpCit7CisJaW50IHR5cGUgPSBzd3BfdHlwZShlbnQpOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gc3dwX29mZnNldChlbnQpOworCXVuc2lnbmVkIGxvbmcgaWR4ID0gb2Zmc2V0IC8gU0NfUEVSX1BBR0U7CisJdW5zaWduZWQgbG9uZyBwb3MgPSBvZmZzZXQgJiBTQ19QT1NfTUFTSzsKKwlzdHJ1Y3Qgc3dhcF9jZ3JvdXBfY3RybCAqY3RybDsKKwlzdHJ1Y3QgcGFnZSAqbWFwcGFnZTsKKwlzdHJ1Y3Qgc3dhcF9jZ3JvdXAgKnNjOworCisJY3RybCA9ICZzd2FwX2Nncm91cF9jdHJsW3R5cGVdOworCisJbWFwcGFnZSA9IGN0cmwtPm1hcFtpZHhdOworCXNjID0gcGFnZV9hZGRyZXNzKG1hcHBhZ2UpOworCXNjICs9IHBvczsKKwlpZiAoY21weGNoZygmc2MtPmlkLCBvbGQsIG5ldykgPT0gb2xkKQorCQlyZXR1cm4gb2xkOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qKgogICogc3dhcF9jZ3JvdXBfcmVjb3JkIC0gcmVjb3JkIG1lbV9jZ3JvdXAgZm9yIHRoaXMgc3dwX2VudHJ5LgogICogQGVudDogc3dhcCBlbnRyeSB0byBiZSByZWNvcmRlZCBpbnRvCiAgKiBAbWVtOiBtZW1fY2dyb3VwIHRvIGJlIHJlY29yZGVkCkBAIC0zNTgsOCArMzg5LDcgQEAKIAltYXBwYWdlID0gY3RybC0+bWFwW2lkeF07CiAJc2MgPSBwYWdlX2FkZHJlc3MobWFwcGFnZSk7CiAJc2MgKz0gcG9zOwotCW9sZCA9IHNjLT5pZDsKLQlzYy0+aWQgPSBpZDsKKwlvbGQgPSB4Y2hnKCZzYy0+aWQsIGlkKTsKIAogCXJldHVybiBvbGQ7CiB9CmRpZmYgLS1naXQgYS9tbS9wZXJjcHUuYyBiL21tL3BlcmNwdS5jCmluZGV4IDA4M2U3YzkuLjc2ODQxOWQgMTAwNjQ0Ci0tLSBhL21tL3BlcmNwdS5jCisrKyBiL21tL3BlcmNwdS5jCkBAIC04MCwxMyArODAsMTUgQEAKIC8qIGRlZmF1bHQgYWRkciA8LT4gcGNwdV9wdHIgbWFwcGluZywgb3ZlcnJpZGUgaW4gYXNtL3BlcmNwdS5oIGlmIG5lY2Vzc2FyeSAqLwogI2lmbmRlZiBfX2FkZHJfdG9fcGNwdV9wdHIKICNkZWZpbmUgX19hZGRyX3RvX3BjcHVfcHRyKGFkZHIpCQkJCQlcCi0JKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGFkZHIpIC0gKHVuc2lnbmVkIGxvbmcpcGNwdV9iYXNlX2FkZHIJXAotCQkgKyAodW5zaWduZWQgbG9uZylfX3Blcl9jcHVfc3RhcnQpCisJKHZvaWQgX19wZXJjcHUgKikoKHVuc2lnbmVkIGxvbmcpKGFkZHIpIC0JCQlcCisJCQkgICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyCSsJCVwKKwkJCSAgKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0KQogI2VuZGlmCiAjaWZuZGVmIF9fcGNwdV9wdHJfdG9fYWRkcgogI2RlZmluZSBfX3BjcHVfcHRyX3RvX2FkZHIocHRyKQkJCQkJCVwKLQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykocHRyKSArICh1bnNpZ25lZCBsb25nKXBjcHVfYmFzZV9hZGRyCVwKLQkJIC0gKHVuc2lnbmVkIGxvbmcpX19wZXJfY3B1X3N0YXJ0KQorCSh2b2lkIF9fZm9yY2UgKikoKHVuc2lnbmVkIGxvbmcpKHB0cikgKwkJCQlcCisJCQkgKHVuc2lnbmVkIGxvbmcpcGNwdV9iYXNlX2FkZHIgLQkJXAorCQkJICh1bnNpZ25lZCBsb25nKV9fcGVyX2NwdV9zdGFydCkKICNlbmRpZgogCiBzdHJ1Y3QgcGNwdV9jaHVuayB7CkBAIC05MTMsMTEgKzkxNSwxMCBAQAogCWludCBycywgcmU7CiAKIAkvKiBxdWljayBwYXRoLCBjaGVjayB3aGV0aGVyIGl0J3MgZW1wdHkgYWxyZWFkeSAqLwotCXBjcHVfZm9yX2VhY2hfdW5wb3BfcmVnaW9uKGNodW5rLCBycywgcmUsIHBhZ2Vfc3RhcnQsIHBhZ2VfZW5kKSB7Ci0JCWlmIChycyA9PSBwYWdlX3N0YXJ0ICYmIHJlID09IHBhZ2VfZW5kKQotCQkJcmV0dXJuOwotCQlicmVhazsKLQl9CisJcnMgPSBwYWdlX3N0YXJ0OworCXBjcHVfbmV4dF91bnBvcChjaHVuaywgJnJzLCAmcmUsIHBhZ2VfZW5kKTsKKwlpZiAocnMgPT0gcGFnZV9zdGFydCAmJiByZSA9PSBwYWdlX2VuZCkKKwkJcmV0dXJuOwogCiAJLyogaW1tdXRhYmxlIGNodW5rcyBjYW4ndCBiZSBkZXBvcHVsYXRlZCAqLwogCVdBUk5fT04oY2h1bmstPmltbXV0YWJsZSk7CkBAIC05NjgsMTEgKzk2OSwxMCBAQAogCWludCBycywgcmUsIHJjOwogCiAJLyogcXVpY2sgcGF0aCwgY2hlY2sgd2hldGhlciBhbGwgcGFnZXMgYXJlIGFscmVhZHkgdGhlcmUgKi8KLQlwY3B1X2Zvcl9lYWNoX3BvcF9yZWdpb24oY2h1bmssIHJzLCByZSwgcGFnZV9zdGFydCwgcGFnZV9lbmQpIHsKLQkJaWYgKHJzID09IHBhZ2Vfc3RhcnQgJiYgcmUgPT0gcGFnZV9lbmQpCi0JCQlnb3RvIGNsZWFyOwotCQlicmVhazsKLQl9CisJcnMgPSBwYWdlX3N0YXJ0OworCXBjcHVfbmV4dF9wb3AoY2h1bmssICZycywgJnJlLCBwYWdlX2VuZCk7CisJaWYgKHJzID09IHBhZ2Vfc3RhcnQgJiYgcmUgPT0gcGFnZV9lbmQpCisJCWdvdG8gY2xlYXI7CiAKIAkvKiBuZWVkIHRvIGFsbG9jYXRlIGFuZCBtYXAgcGFnZXMsIHRoaXMgY2h1bmsgY2FuJ3QgYmUgaW1tdXRhYmxlICovCiAJV0FSTl9PTihjaHVuay0+aW1tdXRhYmxlKTsKQEAgLTEwNjcsNyArMTA2Nyw3IEBACiAgKiBSRVRVUk5TOgogICogUGVyY3B1IHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBhcmVhIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZS4KICAqLwotc3RhdGljIHZvaWQgKnBjcHVfYWxsb2Moc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbiwgYm9vbCByZXNlcnZlZCkKK3N0YXRpYyB2b2lkIF9fcGVyY3B1ICpwY3B1X2FsbG9jKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24sIGJvb2wgcmVzZXJ2ZWQpCiB7CiAJc3RhdGljIGludCB3YXJuX2xpbWl0ID0gMTA7CiAJc3RydWN0IHBjcHVfY2h1bmsgKmNodW5rOwpAQCAtMTE5Niw3ICsxMTk2LDcgQEAKICAqIFJFVFVSTlM6CiAgKiBQZXJjcHUgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGFyZWEgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgogICovCi12b2lkICpfX2FsbG9jX3BlcmNwdShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKQordm9pZCBfX3BlcmNwdSAqX19hbGxvY19wZXJjcHUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbikKIHsKIAlyZXR1cm4gcGNwdV9hbGxvYyhzaXplLCBhbGlnbiwgZmFsc2UpOwogfQpAQCAtMTIxNyw3ICsxMjE3LDcgQEAKICAqIFJFVFVSTlM6CiAgKiBQZXJjcHUgcG9pbnRlciB0byB0aGUgYWxsb2NhdGVkIGFyZWEgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgogICovCi12b2lkICpfX2FsbG9jX3Jlc2VydmVkX3BlcmNwdShzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKQordm9pZCBfX3BlcmNwdSAqX19hbGxvY19yZXNlcnZlZF9wZXJjcHUoc2l6ZV90IHNpemUsIHNpemVfdCBhbGlnbikKIHsKIAlyZXR1cm4gcGNwdV9hbGxvYyhzaXplLCBhbGlnbiwgdHJ1ZSk7CiB9CkBAIC0xMjY5LDcgKzEyNjksNyBAQAogICogQ09OVEVYVDoKICAqIENhbiBiZSBjYWxsZWQgZnJvbSBhdG9taWMgY29udGV4dC4KICAqLwotdm9pZCBmcmVlX3BlcmNwdSh2b2lkICpwdHIpCit2b2lkIGZyZWVfcGVyY3B1KHZvaWQgX19wZXJjcHUgKnB0cikKIHsKIAl2b2lkICphZGRyOwogCXN0cnVjdCBwY3B1X2NodW5rICpjaHVuazsKZGlmZiAtLWdpdCBhL21tL3JlYWRhaGVhZC5jIGIvbW0vcmVhZGFoZWFkLmMKaW5kZXggMDMzYmMxMy4uMzM3YjIwZSAxMDA2NDQKLS0tIGEvbW0vcmVhZGFoZWFkLmMKKysrIGIvbW0vcmVhZGFoZWFkLmMKQEAgLTUwMSw2ICs1MDEsMTIgQEAKIAlpZiAoIXJhLT5yYV9wYWdlcykKIAkJcmV0dXJuOwogCisJLyogYmUgZHVtYiAqLworCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9SQU5ET00pIHsKKwkJZm9yY2VfcGFnZV9jYWNoZV9yZWFkYWhlYWQobWFwcGluZywgZmlscCwgb2Zmc2V0LCByZXFfc2l6ZSk7CisJCXJldHVybjsKKwl9CisKIAkvKiBkbyByZWFkLWFoZWFkICovCiAJb25kZW1hbmRfcmVhZGFoZWFkKG1hcHBpbmcsIHJhLCBmaWxwLCBmYWxzZSwgb2Zmc2V0LCByZXFfc2l6ZSk7CiB9CmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggMjc4Y2QyNy4uZmNkNTkzYzkgMTAwNjQ0Ci0tLSBhL21tL3JtYXAuYworKysgYi9tbS9ybWFwLmMKQEAgLTYyLDYgKzYyLDcgQEAKICNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmFub25fdm1hX2NhY2hlcDsKK3N0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqYW5vbl92bWFfY2hhaW5fY2FjaGVwOwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWFfYWxsb2Modm9pZCkKIHsKQEAgLTczLDYgKzc0LDE2IEBACiAJa21lbV9jYWNoZV9mcmVlKGFub25fdm1hX2NhY2hlcCwgYW5vbl92bWEpOwogfQogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYW5vbl92bWFfY2hhaW5fYWxsb2Modm9pZCkKK3sKKwlyZXR1cm4ga21lbV9jYWNoZV9hbGxvYyhhbm9uX3ZtYV9jaGFpbl9jYWNoZXAsIEdGUF9LRVJORUwpOworfQorCit2b2lkIGFub25fdm1hX2NoYWluX2ZyZWUoc3RydWN0IGFub25fdm1hX2NoYWluICphbm9uX3ZtYV9jaGFpbikKK3sKKwlrbWVtX2NhY2hlX2ZyZWUoYW5vbl92bWFfY2hhaW5fY2FjaGVwLCBhbm9uX3ZtYV9jaGFpbik7Cit9CisKIC8qKgogICogYW5vbl92bWFfcHJlcGFyZSAtIGF0dGFjaCBhbiBhbm9uX3ZtYSB0byBhIG1lbW9yeSByZWdpb24KICAqIEB2bWE6IHRoZSBtZW1vcnkgcmVnaW9uIGluIHF1ZXN0aW9uCkBAIC0xMDMsMTggKzExNCwyMyBAQAogaW50IGFub25fdm1hX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IHZtYS0+YW5vbl92bWE7CisJc3RydWN0IGFub25fdm1hX2NoYWluICphdmM7CiAKIAltaWdodF9zbGVlcCgpOwogCWlmICh1bmxpa2VseSghYW5vbl92bWEpKSB7CiAJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKIAkJc3RydWN0IGFub25fdm1hICphbGxvY2F0ZWQ7CiAKKwkJYXZjID0gYW5vbl92bWFfY2hhaW5fYWxsb2MoKTsKKwkJaWYgKCFhdmMpCisJCQlnb3RvIG91dF9lbm9tZW07CisKIAkJYW5vbl92bWEgPSBmaW5kX21lcmdlYWJsZV9hbm9uX3ZtYSh2bWEpOwogCQlhbGxvY2F0ZWQgPSBOVUxMOwogCQlpZiAoIWFub25fdm1hKSB7CiAJCQlhbm9uX3ZtYSA9IGFub25fdm1hX2FsbG9jKCk7CiAJCQlpZiAodW5saWtlbHkoIWFub25fdm1hKSkKLQkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCQlnb3RvIG91dF9lbm9tZW1fZnJlZV9hdmM7CiAJCQlhbGxvY2F0ZWQgPSBhbm9uX3ZtYTsKIAkJfQogCQlzcGluX2xvY2soJmFub25fdm1hLT5sb2NrKTsKQEAgLTEyMyw1MyArMTM5LDExMyBAQAogCQlzcGluX2xvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCQlpZiAobGlrZWx5KCF2bWEtPmFub25fdm1hKSkgewogCQkJdm1hLT5hbm9uX3ZtYSA9IGFub25fdm1hOwotCQkJbGlzdF9hZGRfdGFpbCgmdm1hLT5hbm9uX3ZtYV9ub2RlLCAmYW5vbl92bWEtPmhlYWQpOworCQkJYXZjLT5hbm9uX3ZtYSA9IGFub25fdm1hOworCQkJYXZjLT52bWEgPSB2bWE7CisJCQlsaXN0X2FkZCgmYXZjLT5zYW1lX3ZtYSwgJnZtYS0+YW5vbl92bWFfY2hhaW4pOworCQkJbGlzdF9hZGQoJmF2Yy0+c2FtZV9hbm9uX3ZtYSwgJmFub25fdm1hLT5oZWFkKTsKIAkJCWFsbG9jYXRlZCA9IE5VTEw7CiAJCX0KIAkJc3Bpbl91bmxvY2soJm1tLT5wYWdlX3RhYmxlX2xvY2spOwogCiAJCXNwaW5fdW5sb2NrKCZhbm9uX3ZtYS0+bG9jayk7Ci0JCWlmICh1bmxpa2VseShhbGxvY2F0ZWQpKQorCQlpZiAodW5saWtlbHkoYWxsb2NhdGVkKSkgewogCQkJYW5vbl92bWFfZnJlZShhbGxvY2F0ZWQpOworCQkJYW5vbl92bWFfY2hhaW5fZnJlZShhdmMpOworCQl9CiAJfQogCXJldHVybiAwOworCisgb3V0X2Vub21lbV9mcmVlX2F2YzoKKwlhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7Cisgb3V0X2Vub21lbToKKwlyZXR1cm4gLUVOT01FTTsKIH0KIAotdm9pZCBfX2Fub25fdm1hX21lcmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKm5leHQpCitzdGF0aWMgdm9pZCBhbm9uX3ZtYV9jaGFpbl9saW5rKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCXN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjLAorCQkJCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEpCiB7Ci0JQlVHX09OKHZtYS0+YW5vbl92bWEgIT0gbmV4dC0+YW5vbl92bWEpOwotCWxpc3RfZGVsKCZuZXh0LT5hbm9uX3ZtYV9ub2RlKTsKKwlhdmMtPnZtYSA9IHZtYTsKKwlhdmMtPmFub25fdm1hID0gYW5vbl92bWE7CisJbGlzdF9hZGQoJmF2Yy0+c2FtZV92bWEsICZ2bWEtPmFub25fdm1hX2NoYWluKTsKKworCXNwaW5fbG9jaygmYW5vbl92bWEtPmxvY2spOworCWxpc3RfYWRkX3RhaWwoJmF2Yy0+c2FtZV9hbm9uX3ZtYSwgJmFub25fdm1hLT5oZWFkKTsKKwlzcGluX3VubG9jaygmYW5vbl92bWEtPmxvY2spOwogfQogCi12b2lkIF9fYW5vbl92bWFfbGluayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKKy8qCisgKiBBdHRhY2ggdGhlIGFub25fdm1hcyBmcm9tIHNyYyB0byBkc3QuCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT01FTSBvbiBmYWlsdXJlLgorICovCitpbnQgYW5vbl92bWFfY2xvbmUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICpkc3QsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjKQogewotCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWEgPSB2bWEtPmFub25fdm1hOworCXN0cnVjdCBhbm9uX3ZtYV9jaGFpbiAqYXZjLCAqcGF2YzsKIAotCWlmIChhbm9uX3ZtYSkKLQkJbGlzdF9hZGRfdGFpbCgmdm1hLT5hbm9uX3ZtYV9ub2RlLCAmYW5vbl92bWEtPmhlYWQpOwotfQotCi12b2lkIGFub25fdm1hX2xpbmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0Jc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IHZtYS0+YW5vbl92bWE7Ci0KLQlpZiAoYW5vbl92bWEpIHsKLQkJc3Bpbl9sb2NrKCZhbm9uX3ZtYS0+bG9jayk7Ci0JCWxpc3RfYWRkX3RhaWwoJnZtYS0+YW5vbl92bWFfbm9kZSwgJmFub25fdm1hLT5oZWFkKTsKLQkJc3Bpbl91bmxvY2soJmFub25fdm1hLT5sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHBhdmMsICZzcmMtPmFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkgeworCQlhdmMgPSBhbm9uX3ZtYV9jaGFpbl9hbGxvYygpOworCQlpZiAoIWF2YykKKwkJCWdvdG8gZW5vbWVtX2ZhaWx1cmU7CisJCWFub25fdm1hX2NoYWluX2xpbmsoZHN0LCBhdmMsIHBhdmMtPmFub25fdm1hKTsKIAl9CisJcmV0dXJuIDA7CisKKyBlbm9tZW1fZmFpbHVyZToKKwl1bmxpbmtfYW5vbl92bWFzKGRzdCk7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXZvaWQgYW5vbl92bWFfdW5saW5rKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorLyoKKyAqIEF0dGFjaCB2bWEgdG8gaXRzIG93biBhbm9uX3ZtYSwgYXMgd2VsbCBhcyB0byB0aGUgYW5vbl92bWFzIHRoYXQKKyAqIHRoZSBjb3JyZXNwb25kaW5nIFZNQSBpbiB0aGUgcGFyZW50IHByb2Nlc3MgaXMgYXR0YWNoZWQgdG8uCisgKiBSZXR1cm5zIDAgb24gc3VjY2Vzcywgbm9uLXplcm8gb24gZmFpbHVyZS4KKyAqLworaW50IGFub25fdm1hX2Zvcmsoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHZtYSkKIHsKLQlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gdm1hLT5hbm9uX3ZtYTsKKwlzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YzsKKwlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hOworCisJLyogRG9uJ3QgYm90aGVyIGlmIHRoZSBwYXJlbnQgcHJvY2VzcyBoYXMgbm8gYW5vbl92bWEgaGVyZS4gKi8KKwlpZiAoIXB2bWEtPmFub25fdm1hKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogRmlyc3QsIGF0dGFjaCB0aGUgbmV3IFZNQSB0byB0aGUgcGFyZW50IFZNQSdzIGFub25fdm1hcywKKwkgKiBzbyBybWFwIGNhbiBmaW5kIG5vbi1DT1dlZCBwYWdlcyBpbiBjaGlsZCBwcm9jZXNzZXMuCisJICovCisJaWYgKGFub25fdm1hX2Nsb25lKHZtYSwgcHZtYSkpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogVGhlbiBhZGQgb3VyIG93biBhbm9uX3ZtYS4gKi8KKwlhbm9uX3ZtYSA9IGFub25fdm1hX2FsbG9jKCk7CisJaWYgKCFhbm9uX3ZtYSkKKwkJZ290byBvdXRfZXJyb3I7CisJYXZjID0gYW5vbl92bWFfY2hhaW5fYWxsb2MoKTsKKwlpZiAoIWF2YykKKwkJZ290byBvdXRfZXJyb3JfZnJlZV9hbm9uX3ZtYTsKKwlhbm9uX3ZtYV9jaGFpbl9saW5rKHZtYSwgYXZjLCBhbm9uX3ZtYSk7CisJLyogTWFyayB0aGlzIGFub25fdm1hIGFzIHRoZSBvbmUgd2hlcmUgb3VyIG5ldyAoQ09XZWQpIHBhZ2VzIGdvLiAqLworCXZtYS0+YW5vbl92bWEgPSBhbm9uX3ZtYTsKKworCXJldHVybiAwOworCisgb3V0X2Vycm9yX2ZyZWVfYW5vbl92bWE6CisJYW5vbl92bWFfZnJlZShhbm9uX3ZtYSk7Cisgb3V0X2Vycm9yOgorCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgdm9pZCBhbm9uX3ZtYV91bmxpbmsoc3RydWN0IGFub25fdm1hX2NoYWluICphbm9uX3ZtYV9jaGFpbikKK3sKKwlzdHJ1Y3QgYW5vbl92bWEgKmFub25fdm1hID0gYW5vbl92bWFfY2hhaW4tPmFub25fdm1hOwogCWludCBlbXB0eTsKIAorCS8qIElmIGFub25fdm1hX2ZvcmsgZmFpbHMsIHdlIGNhbiBnZXQgYW4gZW1wdHkgYW5vbl92bWFfY2hhaW4uICovCiAJaWYgKCFhbm9uX3ZtYSkKIAkJcmV0dXJuOwogCiAJc3Bpbl9sb2NrKCZhbm9uX3ZtYS0+bG9jayk7Ci0JbGlzdF9kZWwoJnZtYS0+YW5vbl92bWFfbm9kZSk7CisJbGlzdF9kZWwoJmFub25fdm1hX2NoYWluLT5zYW1lX2Fub25fdm1hKTsKIAogCS8qIFdlIG11c3QgZ2FyYmFnZSBjb2xsZWN0IHRoZSBhbm9uX3ZtYSBpZiBpdCdzIGVtcHR5ICovCiAJZW1wdHkgPSBsaXN0X2VtcHR5KCZhbm9uX3ZtYS0+aGVhZCkgJiYgIWtzbV9yZWZjb3VudChhbm9uX3ZtYSk7CkBAIC0xNzksNiArMjU1LDE4IEBACiAJCWFub25fdm1hX2ZyZWUoYW5vbl92bWEpOwogfQogCit2b2lkIHVubGlua19hbm9uX3ZtYXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGFub25fdm1hX2NoYWluICphdmMsICpuZXh0OworCisJLyogVW5saW5rIGVhY2ggYW5vbl92bWEgY2hhaW5lZCB0byB0aGUgVk1BLiAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhdmMsIG5leHQsICZ2bWEtPmFub25fdm1hX2NoYWluLCBzYW1lX3ZtYSkgeworCQlhbm9uX3ZtYV91bmxpbmsoYXZjKTsKKwkJbGlzdF9kZWwoJmF2Yy0+c2FtZV92bWEpOworCQlhbm9uX3ZtYV9jaGFpbl9mcmVlKGF2Yyk7CisJfQorfQorCiBzdGF0aWMgdm9pZCBhbm9uX3ZtYV9jdG9yKHZvaWQgKmRhdGEpCiB7CiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IGRhdGE7CkBAIC0xOTIsNiArMjgwLDcgQEAKIHsKIAlhbm9uX3ZtYV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiYW5vbl92bWEiLCBzaXplb2Yoc3RydWN0IGFub25fdm1hKSwKIAkJCTAsIFNMQUJfREVTVFJPWV9CWV9SQ1V8U0xBQl9QQU5JQywgYW5vbl92bWFfY3Rvcik7CisJYW5vbl92bWFfY2hhaW5fY2FjaGVwID0gS01FTV9DQUNIRShhbm9uX3ZtYV9jaGFpbiwgU0xBQl9QQU5JQyk7CiB9CiAKIC8qCkBAIC0zOTYsNyArNDg1LDcgQEAKIHsKIAl1bnNpZ25lZCBpbnQgbWFwY291bnQ7CiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYTsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YzsKIAlpbnQgcmVmZXJlbmNlZCA9IDA7CiAKIAlhbm9uX3ZtYSA9IHBhZ2VfbG9ja19hbm9uX3ZtYShwYWdlKTsKQEAgLTQwNCw3ICs0OTMsOCBAQAogCQlyZXR1cm4gcmVmZXJlbmNlZDsKIAogCW1hcGNvdW50ID0gcGFnZV9tYXBjb3VudChwYWdlKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJmFub25fdm1hLT5oZWFkLCBhbm9uX3ZtYV9ub2RlKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShhdmMsICZhbm9uX3ZtYS0+aGVhZCwgc2FtZV9hbm9uX3ZtYSkgeworCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGF2Yy0+dm1hOwogCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSB2bWFfYWRkcmVzcyhwYWdlLCB2bWEpOwogCQlpZiAoYWRkcmVzcyA9PSAtRUZBVUxUKQogCQkJY29udGludWU7CkBAIC01MTEsOSArNjAxLDYgQEAKIAlpbnQgcmVmZXJlbmNlZCA9IDA7CiAJaW50IHdlX2xvY2tlZCA9IDA7CiAKLQlpZiAoVGVzdENsZWFyUGFnZVJlZmVyZW5jZWQocGFnZSkpCi0JCXJlZmVyZW5jZWQrKzsKLQogCSp2bV9mbGFncyA9IDA7CiAJaWYgKHBhZ2VfbWFwcGVkKHBhZ2UpICYmIHBhZ2Vfcm1hcHBpbmcocGFnZSkpIHsKIAkJaWYgKCFpc19sb2NrZWQgJiYgKCFQYWdlQW5vbihwYWdlKSB8fCBQYWdlS3NtKHBhZ2UpKSkgewpAQCAtNjE0LDYgKzcwMSwzMCBAQAogRVhQT1JUX1NZTUJPTF9HUEwocGFnZV9ta2NsZWFuKTsKIAogLyoqCisgKiBwYWdlX21vdmVfYW5vbl9ybWFwIC0gbW92ZSBhIHBhZ2UgdG8gb3VyIGFub25fdm1hCisgKiBAcGFnZToJdGhlIHBhZ2UgdG8gbW92ZSB0byBvdXIgYW5vbl92bWEKKyAqIEB2bWE6CXRoZSB2bWEgdGhlIHBhZ2UgYmVsb25ncyB0bworICogQGFkZHJlc3M6CXRoZSB1c2VyIHZpcnR1YWwgYWRkcmVzcyBtYXBwZWQKKyAqCisgKiBXaGVuIGEgcGFnZSBiZWxvbmdzIGV4Y2x1c2l2ZWx5IHRvIG9uZSBwcm9jZXNzIGFmdGVyIGEgQ09XIGV2ZW50LAorICogdGhhdCBwYWdlIGNhbiBiZSBtb3ZlZCBpbnRvIHRoZSBhbm9uX3ZtYSB0aGF0IGJlbG9uZ3MgdG8ganVzdCB0aGF0CisgKiBwcm9jZXNzLCBzbyB0aGUgcm1hcCBjb2RlIHdpbGwgbm90IHNlYXJjaCB0aGUgcGFyZW50IG9yIHNpYmxpbmcKKyAqIHByb2Nlc3Nlcy4KKyAqLwordm9pZCBwYWdlX21vdmVfYW5vbl9ybWFwKHN0cnVjdCBwYWdlICpwYWdlLAorCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IHZtYS0+YW5vbl92bWE7CisKKwlWTV9CVUdfT04oIVBhZ2VMb2NrZWQocGFnZSkpOworCVZNX0JVR19PTighYW5vbl92bWEpOworCVZNX0JVR19PTihwYWdlLT5pbmRleCAhPSBsaW5lYXJfcGFnZV9pbmRleCh2bWEsIGFkZHJlc3MpKTsKKworCWFub25fdm1hID0gKHZvaWQgKikgYW5vbl92bWEgKyBQQUdFX01BUFBJTkdfQU5PTjsKKwlwYWdlLT5tYXBwaW5nID0gKHN0cnVjdCBhZGRyZXNzX3NwYWNlICopIGFub25fdm1hOworfQorCisvKioKICAqIF9fcGFnZV9zZXRfYW5vbl9ybWFwIC0gc2V0dXAgbmV3IGFub255bW91cyBybWFwCiAgKiBAcGFnZToJdGhlIHBhZ2UgdG8gYWRkIHRoZSBtYXBwaW5nIHRvCiAgKiBAdm1hOgl0aGUgdm0gYXJlYSBpbiB3aGljaCB0aGUgbWFwcGluZyBpcyBhZGRlZApAQCAtNjUyLDkgKzc2Myw2IEBACiAJICogYXJlIGluaXRpYWxseSBvbmx5IHZpc2libGUgdmlhIHRoZSBwYWdldGFibGVzLCBhbmQgdGhlIHB0ZSBpcyBsb2NrZWQKIAkgKiBvdmVyIHRoZSBjYWxsIHRvIHBhZ2VfYWRkX25ld19hbm9uX3JtYXAuCiAJICovCi0Jc3RydWN0IGFub25fdm1hICphbm9uX3ZtYSA9IHZtYS0+YW5vbl92bWE7Ci0JYW5vbl92bWEgPSAodm9pZCAqKSBhbm9uX3ZtYSArIFBBR0VfTUFQUElOR19BTk9OOwotCUJVR19PTihwYWdlLT5tYXBwaW5nICE9IChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqKWFub25fdm1hKTsKIAlCVUdfT04ocGFnZS0+aW5kZXggIT0gbGluZWFyX3BhZ2VfaW5kZXgodm1hLCBhZGRyZXNzKSk7CiAjZW5kaWYKIH0KQEAgLTgxNSw5ICs5MjMsOSBAQAogCiAJaWYgKFBhZ2VIV1BvaXNvbihwYWdlKSAmJiAhKGZsYWdzICYgVFRVX0lHTk9SRV9IV1BPSVNPTikpIHsKIAkJaWYgKFBhZ2VBbm9uKHBhZ2UpKQotCQkJZGVjX21tX2NvdW50ZXIobW0sIGFub25fcnNzKTsKKwkJCWRlY19tbV9jb3VudGVyKG1tLCBNTV9BTk9OUEFHRVMpOwogCQllbHNlCi0JCQlkZWNfbW1fY291bnRlcihtbSwgZmlsZV9yc3MpOworCQkJZGVjX21tX2NvdW50ZXIobW0sIE1NX0ZJTEVQQUdFUyk7CiAJCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHB0ZSwKIAkJCQlzd3BfZW50cnlfdG9fcHRlKG1ha2VfaHdwb2lzb25fZW50cnkocGFnZSkpKTsKIAl9IGVsc2UgaWYgKFBhZ2VBbm9uKHBhZ2UpKSB7CkBAIC04MzksNyArOTQ3LDggQEAKIAkJCQkJbGlzdF9hZGQoJm1tLT5tbWxpc3QsICZpbml0X21tLm1tbGlzdCk7CiAJCQkJc3Bpbl91bmxvY2soJm1tbGlzdF9sb2NrKTsKIAkJCX0KLQkJCWRlY19tbV9jb3VudGVyKG1tLCBhbm9uX3Jzcyk7CisJCQlkZWNfbW1fY291bnRlcihtbSwgTU1fQU5PTlBBR0VTKTsKKwkJCWluY19tbV9jb3VudGVyKG1tLCBNTV9TV0FQRU5UUyk7CiAJCX0gZWxzZSBpZiAoUEFHRV9NSUdSQVRJT04pIHsKIAkJCS8qCiAJCQkgKiBTdG9yZSB0aGUgcGZuIG9mIHRoZSBwYWdlIGluIGEgc3BlY2lhbCBtaWdyYXRpb24KQEAgLTg1Nyw3ICs5NjYsNyBAQAogCQllbnRyeSA9IG1ha2VfbWlncmF0aW9uX2VudHJ5KHBhZ2UsIHB0ZV93cml0ZShwdGV2YWwpKTsKIAkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcHRlLCBzd3BfZW50cnlfdG9fcHRlKGVudHJ5KSk7CiAJfSBlbHNlCi0JCWRlY19tbV9jb3VudGVyKG1tLCBmaWxlX3Jzcyk7CisJCWRlY19tbV9jb3VudGVyKG1tLCBNTV9GSUxFUEFHRVMpOwogCiAJcGFnZV9yZW1vdmVfcm1hcChwYWdlKTsKIAlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CkBAIC05OTYsNyArMTEwNSw3IEBACiAKIAkJcGFnZV9yZW1vdmVfcm1hcChwYWdlKTsKIAkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCQlkZWNfbW1fY291bnRlcihtbSwgZmlsZV9yc3MpOworCQlkZWNfbW1fY291bnRlcihtbSwgTU1fRklMRVBBR0VTKTsKIAkJKCptYXBjb3VudCktLTsKIAl9CiAJcHRlX3VubWFwX3VubG9jayhwdGUgLSAxLCBwdGwpOwpAQCAtMTAyNCwxNCArMTEzMywxNSBAQAogc3RhdGljIGludCB0cnlfdG9fdW5tYXBfYW5vbihzdHJ1Y3QgcGFnZSAqcGFnZSwgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpCiB7CiAJc3RydWN0IGFub25fdm1hICphbm9uX3ZtYTsKLQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlzdHJ1Y3QgYW5vbl92bWFfY2hhaW4gKmF2YzsKIAlpbnQgcmV0ID0gU1dBUF9BR0FJTjsKIAogCWFub25fdm1hID0gcGFnZV9sb2NrX2Fub25fdm1hKHBhZ2UpOwogCWlmICghYW5vbl92bWEpCiAJCXJldHVybiByZXQ7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJmFub25fdm1hLT5oZWFkLCBhbm9uX3ZtYV9ub2RlKSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShhdmMsICZhbm9uX3ZtYS0+aGVhZCwgc2FtZV9hbm9uX3ZtYSkgeworCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IGF2Yy0+dm1hOwogCQl1bnNpZ25lZCBsb25nIGFkZHJlc3MgPSB2bWFfYWRkcmVzcyhwYWdlLCB2bWEpOwogCQlpZiAoYWRkcmVzcyA9PSAtRUZBVUxUKQogCQkJY29udGludWU7CkBAIC0xMjIyLDcgKzEzMzIsNyBAQAogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgdm9pZCAqKSwgdm9pZCAqYXJnKQogewogCXN0cnVjdCBhbm9uX3ZtYSAqYW5vbl92bWE7Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJc3RydWN0IGFub25fdm1hX2NoYWluICphdmM7CiAJaW50IHJldCA9IFNXQVBfQUdBSU47CiAKIAkvKgpAQCAtMTIzNyw3ICsxMzQ3LDggQEAKIAlpZiAoIWFub25fdm1hKQogCQlyZXR1cm4gcmV0OwogCXNwaW5fbG9jaygmYW5vbl92bWEtPmxvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkodm1hLCAmYW5vbl92bWEtPmhlYWQsIGFub25fdm1hX25vZGUpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGF2YywgJmFub25fdm1hLT5oZWFkLCBzYW1lX2Fub25fdm1hKSB7CisJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gYXZjLT52bWE7CiAJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9IHZtYV9hZGRyZXNzKHBhZ2UsIHZtYSk7CiAJCWlmIChhZGRyZXNzID09IC1FRkFVTFQpCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL21tL3NsYWIuYyBiL21tL3NsYWIuYwppbmRleCA3NDUxYmRhLi5hOWYzMjViIDEwMDY0NAotLS0gYS9tbS9zbGFiLmMKKysrIGIvbW0vc2xhYi5jCkBAIC05MzUsNyArOTM1LDYgQEAKIAogCWZyb20tPmF2YWlsIC09IG5yOwogCXRvLT5hdmFpbCArPSBucjsKLQl0by0+dG91Y2hlZCA9IDE7CiAJcmV0dXJuIG5yOwogfQogCkBAIC05ODMsMTMgKzk4MiwxMSBAQAogCiAJaWYgKGxpbWl0ID4gMSkKIAkJbGltaXQgPSAxMjsKLQlhY19wdHIgPSBrbWFsbG9jX25vZGUobWVtc2l6ZSwgZ2ZwLCBub2RlKTsKKwlhY19wdHIgPSBremFsbG9jX25vZGUobWVtc2l6ZSwgZ2ZwLCBub2RlKTsKIAlpZiAoYWNfcHRyKSB7CiAJCWZvcl9lYWNoX25vZGUoaSkgewotCQkJaWYgKGkgPT0gbm9kZSB8fCAhbm9kZV9vbmxpbmUoaSkpIHsKLQkJCQlhY19wdHJbaV0gPSBOVUxMOworCQkJaWYgKGkgPT0gbm9kZSB8fCAhbm9kZV9vbmxpbmUoaSkpCiAJCQkJY29udGludWU7Ci0JCQl9CiAJCQlhY19wdHJbaV0gPSBhbGxvY19hcnJheWNhY2hlKG5vZGUsIGxpbWl0LCAweGJhYWRmMDBkLCBnZnApOwogCQkJaWYgKCFhY19wdHJbaV0pIHsKIAkJCQlmb3IgKGktLTsgaSA+PSAwOyBpLS0pCkBAIC0yOTYzLDggKzI5NjAsMTAgQEAKIAlzcGluX2xvY2soJmwzLT5saXN0X2xvY2spOwogCiAJLyogU2VlIGlmIHdlIGNhbiByZWZpbGwgZnJvbSB0aGUgc2hhcmVkIGFycmF5ICovCi0JaWYgKGwzLT5zaGFyZWQgJiYgdHJhbnNmZXJfb2JqZWN0cyhhYywgbDMtPnNoYXJlZCwgYmF0Y2hjb3VudCkpCisJaWYgKGwzLT5zaGFyZWQgJiYgdHJhbnNmZXJfb2JqZWN0cyhhYywgbDMtPnNoYXJlZCwgYmF0Y2hjb3VudCkpIHsKKwkJbDMtPnNoYXJlZC0+dG91Y2hlZCA9IDE7CiAJCWdvdG8gYWxsb2NfZG9uZTsKKwl9CiAKIAl3aGlsZSAoYmF0Y2hjb3VudCA+IDApIHsKIAkJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CkBAIC0zMTAxLDcgKzMxMDAsNyBAQAogCWlmIChjYWNoZXAgPT0gJmNhY2hlX2NhY2hlKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlyZXR1cm4gc2hvdWxkX2ZhaWxzbGFiKG9ial9zaXplKGNhY2hlcCksIGZsYWdzKTsKKwlyZXR1cm4gc2hvdWxkX2ZhaWxzbGFiKG9ial9zaXplKGNhY2hlcCksIGZsYWdzLCBjYWNoZXAtPmZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkICpfX19fY2FjaGVfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgZ2ZwX3QgZmxhZ3MpCmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmMKaW5kZXggOGQ3MWFhZi4uYjM2NDg0NCAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCisrKyBiL21tL3NsdWIuYwpAQCAtMTUxLDcgKzE1MSw4IEBACiAgKiBTZXQgb2YgZmxhZ3MgdGhhdCB3aWxsIHByZXZlbnQgc2xhYiBtZXJnaW5nCiAgKi8KICNkZWZpbmUgU0xVQl9ORVZFUl9NRVJHRSAoU0xBQl9SRURfWk9ORSB8IFNMQUJfUE9JU09OIHwgU0xBQl9TVE9SRV9VU0VSIHwgXAotCQlTTEFCX1RSQUNFIHwgU0xBQl9ERVNUUk9ZX0JZX1JDVSB8IFNMQUJfTk9MRUFLVFJBQ0UpCisJCVNMQUJfVFJBQ0UgfCBTTEFCX0RFU1RST1lfQllfUkNVIHwgU0xBQl9OT0xFQUtUUkFDRSB8IFwKKwkJU0xBQl9GQUlMU0xBQikKIAogI2RlZmluZSBTTFVCX01FUkdFX1NBTUUgKFNMQUJfREVCVUdfRlJFRSB8IFNMQUJfUkVDTEFJTV9BQ0NPVU5UIHwgXAogCQlTTEFCX0NBQ0hFX0RNQSB8IFNMQUJfTk9UUkFDSykKQEAgLTIxNywxMCArMjE4LDEwIEBACiAKICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3RhdChzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgKmMsIGVudW0gc3RhdF9pdGVtIHNpKQorc3RhdGljIGlubGluZSB2b2lkIHN0YXQoc3RydWN0IGttZW1fY2FjaGUgKnMsIGVudW0gc3RhdF9pdGVtIHNpKQogewogI2lmZGVmIENPTkZJR19TTFVCX1NUQVRTCi0JYy0+c3RhdFtzaV0rKzsKKwlfX3RoaXNfY3B1X2luYyhzLT5jcHVfc2xhYi0+c3RhdFtzaV0pOwogI2VuZGlmCiB9CiAKQEAgLTI0MiwxNSArMjQzLDYgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBrbWVtX2NhY2hlX2NwdSAqZ2V0X2NwdV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBpbnQgY3B1KQotewotI2lmZGVmIENPTkZJR19TTVAKLQlyZXR1cm4gcy0+Y3B1X3NsYWJbY3B1XTsKLSNlbHNlCi0JcmV0dXJuICZzLT5jcHVfc2xhYjsKLSNlbmRpZgotfQotCiAvKiBWZXJpZnkgdGhhdCBhIHBvaW50ZXIgaGFzIGFuIGFkZHJlc3MgdGhhdCBpcyB2YWxpZCB3aXRoaW4gYSBzbGFiIHBhZ2UgKi8KIHN0YXRpYyBpbmxpbmUgaW50IGNoZWNrX3ZhbGlkX3BvaW50ZXIoc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIGNvbnN0IHZvaWQgKm9iamVjdCkKQEAgLTI2OSwxMyArMjYxLDYgQEAKIAlyZXR1cm4gMTsKIH0KIAotLyoKLSAqIFNsb3cgdmVyc2lvbiBvZiBnZXQgYW5kIHNldCBmcmVlIHBvaW50ZXIuCi0gKgotICogVGhpcyB2ZXJzaW9uIHJlcXVpcmVzIHRvdWNoaW5nIHRoZSBjYWNoZSBsaW5lcyBvZiBrbWVtX2NhY2hlIHdoaWNoCi0gKiB3ZSBhdm9pZCB0byBkbyBpbiB0aGUgZmFzdCBhbGxvYyBmcmVlIHBhdGhzLiBUaGVyZSB3ZSBvYnRhaW4gdGhlIG9mZnNldAotICogZnJvbSB0aGUgcGFnZSBzdHJ1Y3QuCi0gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCAqZ2V0X2ZyZWVwb2ludGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QpCiB7CiAJcmV0dXJuICoodm9pZCAqKikob2JqZWN0ICsgcy0+b2Zmc2V0KTsKQEAgLTEwMjAsNiArMTAwNSw5IEBACiAJCWNhc2UgJ3QnOgogCQkJc2x1Yl9kZWJ1ZyB8PSBTTEFCX1RSQUNFOwogCQkJYnJlYWs7CisJCWNhc2UgJ2EnOgorCQkJc2x1Yl9kZWJ1ZyB8PSBTTEFCX0ZBSUxTTEFCOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9FUlIgInNsdWJfZGVidWcgb3B0aW9uICclYycgIgogCQkJCSJ1bmtub3duLiBza2lwcGVkXG4iLCAqc3RyKTsKQEAgLTExMjQsNyArMTExMiw3IEBACiAJCWlmICghcGFnZSkKIAkJCXJldHVybiBOVUxMOwogCi0JCXN0YXQoZ2V0X2NwdV9zbGFiKHMsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpLCBPUkRFUl9GQUxMQkFDSyk7CisJCXN0YXQocywgT1JERVJfRkFMTEJBQ0spOwogCX0KIAogCWlmIChrbWVtY2hlY2tfZW5hYmxlZApAQCAtMTQyMiwyMyArMTQxMCwyMiBAQAogc3RhdGljIHZvaWQgdW5mcmVlemVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsIGludCB0YWlsKQogewogCXN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4gPSBnZXRfbm9kZShzLCBwYWdlX3RvX25pZChwYWdlKSk7Ci0Jc3RydWN0IGttZW1fY2FjaGVfY3B1ICpjID0gZ2V0X2NwdV9zbGFiKHMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CiAKIAlfX0NsZWFyUGFnZVNsdWJGcm96ZW4ocGFnZSk7CiAJaWYgKHBhZ2UtPmludXNlKSB7CiAKIAkJaWYgKHBhZ2UtPmZyZWVsaXN0KSB7CiAJCQlhZGRfcGFydGlhbChuLCBwYWdlLCB0YWlsKTsKLQkJCXN0YXQoYywgdGFpbCA/IERFQUNUSVZBVEVfVE9fVEFJTCA6IERFQUNUSVZBVEVfVE9fSEVBRCk7CisJCQlzdGF0KHMsIHRhaWwgPyBERUFDVElWQVRFX1RPX1RBSUwgOiBERUFDVElWQVRFX1RPX0hFQUQpOwogCQl9IGVsc2UgewotCQkJc3RhdChjLCBERUFDVElWQVRFX0ZVTEwpOworCQkJc3RhdChzLCBERUFDVElWQVRFX0ZVTEwpOwogCQkJaWYgKFNMQUJERUJVRyAmJiBQYWdlU2x1YkRlYnVnKHBhZ2UpICYmCiAJCQkJCQkocy0+ZmxhZ3MgJiBTTEFCX1NUT1JFX1VTRVIpKQogCQkJCWFkZF9mdWxsKG4sIHBhZ2UpOwogCQl9CiAJCXNsYWJfdW5sb2NrKHBhZ2UpOwogCX0gZWxzZSB7Ci0JCXN0YXQoYywgREVBQ1RJVkFURV9FTVBUWSk7CisJCXN0YXQocywgREVBQ1RJVkFURV9FTVBUWSk7CiAJCWlmIChuLT5ucl9wYXJ0aWFsIDwgcy0+bWluX3BhcnRpYWwpIHsKIAkJCS8qCiAJCQkgKiBBZGRpbmcgYW4gZW1wdHkgc2xhYiB0byB0aGUgcGFydGlhbCBzbGFicyBpbiBvcmRlcgpAQCAtMTQ1NCw3ICsxNDQxLDcgQEAKIAkJCXNsYWJfdW5sb2NrKHBhZ2UpOwogCQl9IGVsc2UgewogCQkJc2xhYl91bmxvY2socGFnZSk7Ci0JCQlzdGF0KGdldF9jcHVfc2xhYihzLCByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKSwgRlJFRV9TTEFCKTsKKwkJCXN0YXQocywgRlJFRV9TTEFCKTsKIAkJCWRpc2NhcmRfc2xhYihzLCBwYWdlKTsKIAkJfQogCX0KQEAgLTE0NjksNyArMTQ1Niw3IEBACiAJaW50IHRhaWwgPSAxOwogCiAJaWYgKHBhZ2UtPmZyZWVsaXN0KQotCQlzdGF0KGMsIERFQUNUSVZBVEVfUkVNT1RFX0ZSRUVTKTsKKwkJc3RhdChzLCBERUFDVElWQVRFX1JFTU9URV9GUkVFUyk7CiAJLyoKIAkgKiBNZXJnZSBjcHUgZnJlZWxpc3QgaW50byBzbGFiIGZyZWVsaXN0LiBUeXBpY2FsbHkgd2UgZ2V0IGhlcmUKIAkgKiBiZWNhdXNlIGJvdGggZnJlZWxpc3RzIGFyZSBlbXB0eS4gU28gdGhpcyBpcyB1bmxpa2VseQpAQCAtMTQ4MiwxMCArMTQ2OSwxMCBAQAogCiAJCS8qIFJldHJpZXZlIG9iamVjdCBmcm9tIGNwdV9mcmVlbGlzdCAqLwogCQlvYmplY3QgPSBjLT5mcmVlbGlzdDsKLQkJYy0+ZnJlZWxpc3QgPSBjLT5mcmVlbGlzdFtjLT5vZmZzZXRdOworCQljLT5mcmVlbGlzdCA9IGdldF9mcmVlcG9pbnRlcihzLCBjLT5mcmVlbGlzdCk7CiAKIAkJLyogQW5kIHB1dCBvbnRvIHRoZSByZWd1bGFyIGZyZWVsaXN0ICovCi0JCW9iamVjdFtjLT5vZmZzZXRdID0gcGFnZS0+ZnJlZWxpc3Q7CisJCXNldF9mcmVlcG9pbnRlcihzLCBvYmplY3QsIHBhZ2UtPmZyZWVsaXN0KTsKIAkJcGFnZS0+ZnJlZWxpc3QgPSBvYmplY3Q7CiAJCXBhZ2UtPmludXNlLS07CiAJfQpAQCAtMTQ5NSw3ICsxNDgyLDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBrbWVtX2NhY2hlX2NwdSAqYykKIHsKLQlzdGF0KGMsIENQVVNMQUJfRkxVU0gpOworCXN0YXQocywgQ1BVU0xBQl9GTFVTSCk7CiAJc2xhYl9sb2NrKGMtPnBhZ2UpOwogCWRlYWN0aXZhdGVfc2xhYihzLCBjKTsKIH0KQEAgLTE1MDcsNyArMTQ5NCw3IEBACiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2ZsdXNoX2NwdV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBpbnQgY3B1KQogewotCXN0cnVjdCBrbWVtX2NhY2hlX2NwdSAqYyA9IGdldF9jcHVfc2xhYihzLCBjcHUpOworCXN0cnVjdCBrbWVtX2NhY2hlX2NwdSAqYyA9IHBlcl9jcHVfcHRyKHMtPmNwdV9zbGFiLCBjcHUpOwogCiAJaWYgKGxpa2VseShjICYmIGMtPnBhZ2UpKQogCQlmbHVzaF9zbGFiKHMsIGMpOwpAQCAtMTYzNSw3ICsxNjIyLDcgQEAKIAlpZiAodW5saWtlbHkoIW5vZGVfbWF0Y2goYywgbm9kZSkpKQogCQlnb3RvIGFub3RoZXJfc2xhYjsKIAotCXN0YXQoYywgQUxMT0NfUkVGSUxMKTsKKwlzdGF0KHMsIEFMTE9DX1JFRklMTCk7CiAKIGxvYWRfZnJlZWxpc3Q6CiAJb2JqZWN0ID0gYy0+cGFnZS0+ZnJlZWxpc3Q7CkBAIC0xNjQ0LDEzICsxNjMxLDEzIEBACiAJaWYgKHVubGlrZWx5KFNMQUJERUJVRyAmJiBQYWdlU2x1YkRlYnVnKGMtPnBhZ2UpKSkKIAkJZ290byBkZWJ1ZzsKIAotCWMtPmZyZWVsaXN0ID0gb2JqZWN0W2MtPm9mZnNldF07CisJYy0+ZnJlZWxpc3QgPSBnZXRfZnJlZXBvaW50ZXIocywgb2JqZWN0KTsKIAljLT5wYWdlLT5pbnVzZSA9IGMtPnBhZ2UtPm9iamVjdHM7CiAJYy0+cGFnZS0+ZnJlZWxpc3QgPSBOVUxMOwogCWMtPm5vZGUgPSBwYWdlX3RvX25pZChjLT5wYWdlKTsKIHVubG9ja19vdXQ6CiAJc2xhYl91bmxvY2soYy0+cGFnZSk7Ci0Jc3RhdChjLCBBTExPQ19TTE9XUEFUSCk7CisJc3RhdChzLCBBTExPQ19TTE9XUEFUSCk7CiAJcmV0dXJuIG9iamVjdDsKIAogYW5vdGhlcl9zbGFiOgpAQCAtMTY2MCw3ICsxNjQ3LDcgQEAKIAluZXcgPSBnZXRfcGFydGlhbChzLCBnZnBmbGFncywgbm9kZSk7CiAJaWYgKG5ldykgewogCQljLT5wYWdlID0gbmV3OwotCQlzdGF0KGMsIEFMTE9DX0ZST01fUEFSVElBTCk7CisJCXN0YXQocywgQUxMT0NfRlJPTV9QQVJUSUFMKTsKIAkJZ290byBsb2FkX2ZyZWVsaXN0OwogCX0KIApAQCAtMTY3Myw4ICsxNjYwLDggQEAKIAkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAogCWlmIChuZXcpIHsKLQkJYyA9IGdldF9jcHVfc2xhYihzLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCQlzdGF0KGMsIEFMTE9DX1NMQUIpOworCQljID0gX190aGlzX2NwdV9wdHIocy0+Y3B1X3NsYWIpOworCQlzdGF0KHMsIEFMTE9DX1NMQUIpOwogCQlpZiAoYy0+cGFnZSkKIAkJCWZsdXNoX3NsYWIocywgYyk7CiAJCXNsYWJfbG9jayhuZXcpOwpAQCAtMTY5MCw3ICsxNjc3LDcgQEAKIAkJZ290byBhbm90aGVyX3NsYWI7CiAKIAljLT5wYWdlLT5pbnVzZSsrOwotCWMtPnBhZ2UtPmZyZWVsaXN0ID0gb2JqZWN0W2MtPm9mZnNldF07CisJYy0+cGFnZS0+ZnJlZWxpc3QgPSBnZXRfZnJlZXBvaW50ZXIocywgb2JqZWN0KTsKIAljLT5ub2RlID0gLTE7CiAJZ290byB1bmxvY2tfb3V0OwogfQpAQCAtMTcxMSwzNSArMTY5OCwzMyBAQAogCXZvaWQgKipvYmplY3Q7CiAJc3RydWN0IGttZW1fY2FjaGVfY3B1ICpjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IG9ianNpemU7CiAKIAlnZnBmbGFncyAmPSBnZnBfYWxsb3dlZF9tYXNrOwogCiAJbG9ja2RlcF90cmFjZV9hbGxvYyhnZnBmbGFncyk7CiAJbWlnaHRfc2xlZXBfaWYoZ2ZwZmxhZ3MgJiBfX0dGUF9XQUlUKTsKIAotCWlmIChzaG91bGRfZmFpbHNsYWIocy0+b2Jqc2l6ZSwgZ2ZwZmxhZ3MpKQorCWlmIChzaG91bGRfZmFpbHNsYWIocy0+b2Jqc2l6ZSwgZ2ZwZmxhZ3MsIHMtPmZsYWdzKSkKIAkJcmV0dXJuIE5VTEw7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JYyA9IGdldF9jcHVfc2xhYihzLCBzbXBfcHJvY2Vzc29yX2lkKCkpOwotCW9ianNpemUgPSBjLT5vYmpzaXplOwotCWlmICh1bmxpa2VseSghYy0+ZnJlZWxpc3QgfHwgIW5vZGVfbWF0Y2goYywgbm9kZSkpKQorCWMgPSBfX3RoaXNfY3B1X3B0cihzLT5jcHVfc2xhYik7CisJb2JqZWN0ID0gYy0+ZnJlZWxpc3Q7CisJaWYgKHVubGlrZWx5KCFvYmplY3QgfHwgIW5vZGVfbWF0Y2goYywgbm9kZSkpKQogCiAJCW9iamVjdCA9IF9fc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgbm9kZSwgYWRkciwgYyk7CiAKIAllbHNlIHsKLQkJb2JqZWN0ID0gYy0+ZnJlZWxpc3Q7Ci0JCWMtPmZyZWVsaXN0ID0gb2JqZWN0W2MtPm9mZnNldF07Ci0JCXN0YXQoYywgQUxMT0NfRkFTVFBBVEgpOworCQljLT5mcmVlbGlzdCA9IGdldF9mcmVlcG9pbnRlcihzLCBvYmplY3QpOworCQlzdGF0KHMsIEFMTE9DX0ZBU1RQQVRIKTsKIAl9CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJaWYgKHVubGlrZWx5KGdmcGZsYWdzICYgX19HRlBfWkVSTykgJiYgb2JqZWN0KQotCQltZW1zZXQob2JqZWN0LCAwLCBvYmpzaXplKTsKKwkJbWVtc2V0KG9iamVjdCwgMCwgcy0+b2Jqc2l6ZSk7CiAKLQlrbWVtY2hlY2tfc2xhYl9hbGxvYyhzLCBnZnBmbGFncywgb2JqZWN0LCBjLT5vYmpzaXplKTsKLQlrbWVtbGVha19hbGxvY19yZWN1cnNpdmUob2JqZWN0LCBvYmpzaXplLCAxLCBzLT5mbGFncywgZ2ZwZmxhZ3MpOworCWttZW1jaGVja19zbGFiX2FsbG9jKHMsIGdmcGZsYWdzLCBvYmplY3QsIHMtPm9ianNpemUpOworCWttZW1sZWFrX2FsbG9jX3JlY3Vyc2l2ZShvYmplY3QsIHMtPm9ianNpemUsIDEsIHMtPmZsYWdzLCBnZnBmbGFncyk7CiAKIAlyZXR1cm4gb2JqZWN0OwogfQpAQCAtMTc5NCwyNiArMTc3OSwyNSBAQAogICogaGFuZGxpbmcgcmVxdWlyZWQgdGhlbiB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5LgogICovCiBzdGF0aWMgdm9pZCBfX3NsYWJfZnJlZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHBhZ2UgKnBhZ2UsCi0JCQl2b2lkICp4LCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBvZmZzZXQpCisJCQl2b2lkICp4LCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJdm9pZCAqcHJpb3I7CiAJdm9pZCAqKm9iamVjdCA9ICh2b2lkICopeDsKLQlzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgKmM7CiAKLQljID0gZ2V0X2NwdV9zbGFiKHMsIHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOwotCXN0YXQoYywgRlJFRV9TTE9XUEFUSCk7CisJc3RhdChzLCBGUkVFX1NMT1dQQVRIKTsKIAlzbGFiX2xvY2socGFnZSk7CiAKIAlpZiAodW5saWtlbHkoU0xBQkRFQlVHICYmIFBhZ2VTbHViRGVidWcocGFnZSkpKQogCQlnb3RvIGRlYnVnOwogCiBjaGVja3Nfb2s6Ci0JcHJpb3IgPSBvYmplY3Rbb2Zmc2V0XSA9IHBhZ2UtPmZyZWVsaXN0OworCXByaW9yID0gcGFnZS0+ZnJlZWxpc3Q7CisJc2V0X2ZyZWVwb2ludGVyKHMsIG9iamVjdCwgcHJpb3IpOwogCXBhZ2UtPmZyZWVsaXN0ID0gb2JqZWN0OwogCXBhZ2UtPmludXNlLS07CiAKIAlpZiAodW5saWtlbHkoUGFnZVNsdWJGcm96ZW4ocGFnZSkpKSB7Ci0JCXN0YXQoYywgRlJFRV9GUk9aRU4pOworCQlzdGF0KHMsIEZSRUVfRlJPWkVOKTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KIApAQCAtMTgyNiw3ICsxODEwLDcgQEAKIAkgKi8KIAlpZiAodW5saWtlbHkoIXByaW9yKSkgewogCQlhZGRfcGFydGlhbChnZXRfbm9kZShzLCBwYWdlX3RvX25pZChwYWdlKSksIHBhZ2UsIDEpOwotCQlzdGF0KGMsIEZSRUVfQUREX1BBUlRJQUwpOworCQlzdGF0KHMsIEZSRUVfQUREX1BBUlRJQUwpOwogCX0KIAogb3V0X3VubG9jazoKQEAgLTE4MzksMTAgKzE4MjMsMTAgQEAKIAkJICogU2xhYiBzdGlsbCBvbiB0aGUgcGFydGlhbCBsaXN0LgogCQkgKi8KIAkJcmVtb3ZlX3BhcnRpYWwocywgcGFnZSk7Ci0JCXN0YXQoYywgRlJFRV9SRU1PVkVfUEFSVElBTCk7CisJCXN0YXQocywgRlJFRV9SRU1PVkVfUEFSVElBTCk7CiAJfQogCXNsYWJfdW5sb2NrKHBhZ2UpOwotCXN0YXQoYywgRlJFRV9TTEFCKTsKKwlzdGF0KHMsIEZSRUVfU0xBQik7CiAJZGlzY2FyZF9zbGFiKHMsIHBhZ2UpOwogCXJldHVybjsKIApAQCAtMTg3MiwxNyArMTg1NiwxNyBAQAogCiAJa21lbWxlYWtfZnJlZV9yZWN1cnNpdmUoeCwgcy0+ZmxhZ3MpOwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQljID0gZ2V0X2NwdV9zbGFiKHMsIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0Ja21lbWNoZWNrX3NsYWJfZnJlZShzLCBvYmplY3QsIGMtPm9ianNpemUpOwotCWRlYnVnX2NoZWNrX25vX2xvY2tzX2ZyZWVkKG9iamVjdCwgYy0+b2Jqc2l6ZSk7CisJYyA9IF9fdGhpc19jcHVfcHRyKHMtPmNwdV9zbGFiKTsKKwlrbWVtY2hlY2tfc2xhYl9mcmVlKHMsIG9iamVjdCwgcy0+b2Jqc2l6ZSk7CisJZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQob2JqZWN0LCBzLT5vYmpzaXplKTsKIAlpZiAoIShzLT5mbGFncyAmIFNMQUJfREVCVUdfT0JKRUNUUykpCi0JCWRlYnVnX2NoZWNrX25vX29ial9mcmVlZChvYmplY3QsIGMtPm9ianNpemUpOworCQlkZWJ1Z19jaGVja19ub19vYmpfZnJlZWQob2JqZWN0LCBzLT5vYmpzaXplKTsKIAlpZiAobGlrZWx5KHBhZ2UgPT0gYy0+cGFnZSAmJiBjLT5ub2RlID49IDApKSB7Ci0JCW9iamVjdFtjLT5vZmZzZXRdID0gYy0+ZnJlZWxpc3Q7CisJCXNldF9mcmVlcG9pbnRlcihzLCBvYmplY3QsIGMtPmZyZWVsaXN0KTsKIAkJYy0+ZnJlZWxpc3QgPSBvYmplY3Q7Ci0JCXN0YXQoYywgRlJFRV9GQVNUUEFUSCk7CisJCXN0YXQocywgRlJFRV9GQVNUUEFUSCk7CiAJfSBlbHNlCi0JCV9fc2xhYl9mcmVlKHMsIHBhZ2UsIHgsIGFkZHIsIGMtPm9mZnNldCk7CisJCV9fc2xhYl9mcmVlKHMsIHBhZ2UsIHgsIGFkZHIpOwogCiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQpAQCAtMjA2OSwxOSArMjA1Myw2IEBACiAJcmV0dXJuIEFMSUdOKGFsaWduLCBzaXplb2Yodm9pZCAqKSk7CiB9CiAKLXN0YXRpYyB2b2lkIGluaXRfa21lbV9jYWNoZV9jcHUoc3RydWN0IGttZW1fY2FjaGUgKnMsCi0JCQlzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgKmMpCi17Ci0JYy0+cGFnZSA9IE5VTEw7Ci0JYy0+ZnJlZWxpc3QgPSBOVUxMOwotCWMtPm5vZGUgPSAwOwotCWMtPm9mZnNldCA9IHMtPm9mZnNldCAvIHNpemVvZih2b2lkICopOwotCWMtPm9ianNpemUgPSBzLT5vYmpzaXplOwotI2lmZGVmIENPTkZJR19TTFVCX1NUQVRTCi0JbWVtc2V0KGMtPnN0YXQsIDAsIE5SX1NMVUJfU1RBVF9JVEVNUyAqIHNpemVvZih1bnNpZ25lZCkpOwotI2VuZGlmCi19Ci0KIHN0YXRpYyB2b2lkCiBpbml0X2ttZW1fY2FjaGVfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcykKIHsKQEAgLTIwOTUsMTMwICsyMDY2LDI0IEBACiAjZW5kaWYKIH0KIAotI2lmZGVmIENPTkZJR19TTVAKLS8qCi0gKiBQZXIgY3B1IGFycmF5IGZvciBwZXIgY3B1IHN0cnVjdHVyZXMuCi0gKgotICogVGhlIHBlciBjcHUgYXJyYXkgcGxhY2VzIGFsbCBrbWVtX2NhY2hlX2NwdSBzdHJ1Y3R1cmVzIGZyb20gb25lIHByb2Nlc3NvcgotICogY2xvc2UgdG9nZXRoZXIgbWVhbmluZyB0aGF0IGl0IGJlY29tZXMgcG9zc2libGUgdGhhdCBtdWx0aXBsZSBwZXIgY3B1Ci0gKiBzdHJ1Y3R1cmVzIGFyZSBjb250YWluZWQgaW4gb25lIGNhY2hlbGluZS4gVGhpcyBtYXkgYmUgcGFydGljdWxhcmx5Ci0gKiBiZW5lZmljaWFsIGZvciB0aGUga21hbGxvYyBjYWNoZXMuCi0gKgotICogQSBkZXNrdG9wIHN5c3RlbSB0eXBpY2FsbHkgaGFzIGFyb3VuZCA2MC04MCBzbGFicy4gV2l0aCAxMDAgaGVyZSB3ZSBhcmUKLSAqIGxpa2VseSBhYmxlIHRvIGdldCBwZXIgY3B1IHN0cnVjdHVyZXMgZm9yIGFsbCBjYWNoZXMgZnJvbSB0aGUgYXJyYXkgZGVmaW5lZAotICogaGVyZS4gV2UgbXVzdCBiZSBhYmxlIHRvIGNvdmVyIGFsbCBrbWFsbG9jIGNhY2hlcyBkdXJpbmcgYm9vdHN0cmFwLgotICoKLSAqIElmIHRoZSBwZXIgY3B1IGFycmF5IGlzIGV4aGF1c3RlZCB0aGVuIGZhbGwgYmFjayB0byBrbWFsbG9jCi0gKiBvZiBpbmRpdmlkdWFsIGNhY2hlbGluZXMuIE5vIHNoYXJpbmcgaXMgcG9zc2libGUgdGhlbi4KLSAqLwotI2RlZmluZSBOUl9LTUVNX0NBQ0hFX0NQVSAxMDAKLQotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBrbWVtX2NhY2hlX2NwdSBbTlJfS01FTV9DQUNIRV9DUFVdLAotCQkgICAgICBrbWVtX2NhY2hlX2NwdSk7Ci0KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgKiwga21lbV9jYWNoZV9jcHVfZnJlZSk7Ci1zdGF0aWMgREVDTEFSRV9CSVRNQVAoa21lbV9jYWNoX2NwdV9mcmVlX2luaXRfb25jZSwgQ09ORklHX05SX0NQVVMpOwotCi1zdGF0aWMgc3RydWN0IGttZW1fY2FjaGVfY3B1ICphbGxvY19rbWVtX2NhY2hlX2NwdShzdHJ1Y3Qga21lbV9jYWNoZSAqcywKLQkJCQkJCQlpbnQgY3B1LCBnZnBfdCBmbGFncykKLXsKLQlzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgKmMgPSBwZXJfY3B1KGttZW1fY2FjaGVfY3B1X2ZyZWUsIGNwdSk7Ci0KLQlpZiAoYykKLQkJcGVyX2NwdShrbWVtX2NhY2hlX2NwdV9mcmVlLCBjcHUpID0KLQkJCQkodm9pZCAqKWMtPmZyZWVsaXN0OwotCWVsc2UgewotCQkvKiBUYWJsZSBvdmVyZmxvdzogU28gYWxsb2NhdGUgb3Vyc2VsdmVzICovCi0JCWMgPSBrbWFsbG9jX25vZGUoCi0JCQlBTElHTihzaXplb2Yoc3RydWN0IGttZW1fY2FjaGVfY3B1KSwgY2FjaGVfbGluZV9zaXplKCkpLAotCQkJZmxhZ3MsIGNwdV90b19ub2RlKGNwdSkpOwotCQlpZiAoIWMpCi0JCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlpbml0X2ttZW1fY2FjaGVfY3B1KHMsIGMpOwotCXJldHVybiBjOwotfQotCi1zdGF0aWMgdm9pZCBmcmVlX2ttZW1fY2FjaGVfY3B1KHN0cnVjdCBrbWVtX2NhY2hlX2NwdSAqYywgaW50IGNwdSkKLXsKLQlpZiAoYyA8IHBlcl9jcHUoa21lbV9jYWNoZV9jcHUsIGNwdSkgfHwKLQkJCWMgPj0gcGVyX2NwdShrbWVtX2NhY2hlX2NwdSwgY3B1KSArIE5SX0tNRU1fQ0FDSEVfQ1BVKSB7Ci0JCWtmcmVlKGMpOwotCQlyZXR1cm47Ci0JfQotCWMtPmZyZWVsaXN0ID0gKHZvaWQgKilwZXJfY3B1KGttZW1fY2FjaGVfY3B1X2ZyZWUsIGNwdSk7Ci0JcGVyX2NwdShrbWVtX2NhY2hlX2NwdV9mcmVlLCBjcHUpID0gYzsKLX0KLQotc3RhdGljIHZvaWQgZnJlZV9rbWVtX2NhY2hlX2NwdXMoc3RydWN0IGttZW1fY2FjaGUgKnMpCi17Ci0JaW50IGNwdTsKLQotCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KSB7Ci0JCXN0cnVjdCBrbWVtX2NhY2hlX2NwdSAqYyA9IGdldF9jcHVfc2xhYihzLCBjcHUpOwotCi0JCWlmIChjKSB7Ci0JCQlzLT5jcHVfc2xhYltjcHVdID0gTlVMTDsKLQkJCWZyZWVfa21lbV9jYWNoZV9jcHUoYywgY3B1KTsKLQkJfQotCX0KLX0KLQotc3RhdGljIGludCBhbGxvY19rbWVtX2NhY2hlX2NwdXMoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzKQotewotCWludCBjcHU7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewotCQlzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgKmMgPSBnZXRfY3B1X3NsYWIocywgY3B1KTsKLQotCQlpZiAoYykKLQkJCWNvbnRpbnVlOwotCi0JCWMgPSBhbGxvY19rbWVtX2NhY2hlX2NwdShzLCBjcHUsIGZsYWdzKTsKLQkJaWYgKCFjKSB7Ci0JCQlmcmVlX2ttZW1fY2FjaGVfY3B1cyhzKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCXMtPmNwdV9zbGFiW2NwdV0gPSBjOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotLyoKLSAqIEluaXRpYWxpemUgdGhlIHBlciBjcHUgYXJyYXkuCi0gKi8KLXN0YXRpYyB2b2lkIGluaXRfYWxsb2NfY3B1X2NwdShpbnQgY3B1KQotewotCWludCBpOwotCi0JaWYgKGNwdW1hc2tfdGVzdF9jcHUoY3B1LCB0b19jcHVtYXNrKGttZW1fY2FjaF9jcHVfZnJlZV9pbml0X29uY2UpKSkKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gTlJfS01FTV9DQUNIRV9DUFUgLSAxOyBpID49IDA7IGktLSkKLQkJZnJlZV9rbWVtX2NhY2hlX2NwdSgmcGVyX2NwdShrbWVtX2NhY2hlX2NwdSwgY3B1KVtpXSwgY3B1KTsKLQotCWNwdW1hc2tfc2V0X2NwdShjcHUsIHRvX2NwdW1hc2soa21lbV9jYWNoX2NwdV9mcmVlX2luaXRfb25jZSkpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9hbGxvY19jcHUodm9pZCkKLXsKLQlpbnQgY3B1OwotCi0JZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCWluaXRfYWxsb2NfY3B1X2NwdShjcHUpOwotICB9Ci0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9rbWVtX2NhY2hlX2NwdXMoc3RydWN0IGttZW1fY2FjaGUgKnMpIHt9Ci1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9hbGxvY19jcHUodm9pZCkge30KK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qga21lbV9jYWNoZV9jcHUsIGttYWxsb2NfcGVyY3B1W0tNQUxMT0NfQ0FDSEVTXSk7CiAKIHN0YXRpYyBpbmxpbmUgaW50IGFsbG9jX2ttZW1fY2FjaGVfY3B1cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MpCiB7Ci0JaW5pdF9rbWVtX2NhY2hlX2NwdShzLCAmcy0+Y3B1X3NsYWIpOworCWlmIChzIDwga21hbGxvY19jYWNoZXMgKyBLTUFMTE9DX0NBQ0hFUyAmJiBzID49IGttYWxsb2NfY2FjaGVzKQorCQkvKgorCQkgKiBCb290IHRpbWUgY3JlYXRpb24gb2YgdGhlIGttYWxsb2MgYXJyYXkuIFVzZSBzdGF0aWMgcGVyIGNwdSBkYXRhCisJCSAqIHNpbmNlIHRoZSBwZXIgY3B1IGFsbG9jYXRvciBpcyBub3QgYXZhaWxhYmxlIHlldC4KKwkJICovCisJCXMtPmNwdV9zbGFiID0ga21hbGxvY19wZXJjcHUgKyAocyAtIGttYWxsb2NfY2FjaGVzKTsKKwllbHNlCisJCXMtPmNwdV9zbGFiID0gIGFsbG9jX3BlcmNwdShzdHJ1Y3Qga21lbV9jYWNoZV9jcHUpOworCisJaWYgKCFzLT5jcHVfc2xhYikKKwkJcmV0dXJuIDA7CisKIAlyZXR1cm4gMTsKIH0KLSNlbmRpZgogCiAjaWZkZWYgQ09ORklHX05VTUEKIC8qCkBAIC0yMjg3LDcgKzIxNTIsOCBAQAogCWludCBub2RlOwogCWludCBsb2NhbF9ub2RlOwogCi0JaWYgKHNsYWJfc3RhdGUgPj0gVVApCisJaWYgKHNsYWJfc3RhdGUgPj0gVVAgJiYgKHMgPCBrbWFsbG9jX2NhY2hlcyB8fAorCQkJcyA+IGttYWxsb2NfY2FjaGVzICsgS01BTExPQ19DQUNIRVMpKQogCQlsb2NhbF9ub2RlID0gcGFnZV90b19uaWQodmlydF90b19wYWdlKHMpKTsKIAllbHNlCiAJCWxvY2FsX25vZGUgPSAwOwpAQCAtMjUwMiw2ICsyMzY4LDcgQEAKIAogCWlmIChhbGxvY19rbWVtX2NhY2hlX2NwdXMocywgZ2ZwZmxhZ3MgJiB+U0xVQl9ETUEpKQogCQlyZXR1cm4gMTsKKwogCWZyZWVfa21lbV9jYWNoZV9ub2RlcyhzKTsKIGVycm9yOgogCWlmIChmbGFncyAmIFNMQUJfUEFOSUMpCkBAIC0yNjA5LDkgKzI0NzYsOCBAQAogCWludCBub2RlOwogCiAJZmx1c2hfYWxsKHMpOwotCisJZnJlZV9wZXJjcHUocy0+Y3B1X3NsYWIpOwogCS8qIEF0dGVtcHQgdG8gZnJlZSBhbGwgb2JqZWN0cyAqLwotCWZyZWVfa21lbV9jYWNoZV9jcHVzKHMpOwogCWZvcl9lYWNoX25vZGVfc3RhdGUobm9kZSwgTl9OT1JNQUxfTUVNT1JZKSB7CiAJCXN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4gPSBnZXRfbm9kZShzLCBub2RlKTsKIApAQCAtMjY1MSw3ICsyNTE3LDcgQEAKICAqCQlLbWFsbG9jIHN1YnN5c3RlbQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0cnVjdCBrbWVtX2NhY2hlIGttYWxsb2NfY2FjaGVzW1NMVUJfUEFHRV9TSElGVF0gX19jYWNoZWxpbmVfYWxpZ25lZDsKK3N0cnVjdCBrbWVtX2NhY2hlIGttYWxsb2NfY2FjaGVzW0tNQUxMT0NfQ0FDSEVTXSBfX2NhY2hlbGluZV9hbGlnbmVkOwogRVhQT1JUX1NZTUJPTChrbWFsbG9jX2NhY2hlcyk7CiAKIHN0YXRpYyBpbnQgX19pbml0IHNldHVwX3NsdWJfbWluX29yZGVyKGNoYXIgKnN0cikKQEAgLTI3NDEsNiArMjYwNyw3IEBACiAJY2hhciAqdGV4dDsKIAlzaXplX3QgcmVhbHNpemU7CiAJdW5zaWduZWQgbG9uZyBzbGFiZmxhZ3M7CisJaW50IGk7CiAKIAlzID0ga21hbGxvY19jYWNoZXNfZG1hW2luZGV4XTsKIAlpZiAocykKQEAgLTI3NjAsNyArMjYyNywxNCBAQAogCXJlYWxzaXplID0ga21hbGxvY19jYWNoZXNbaW5kZXhdLm9ianNpemU7CiAJdGV4dCA9IGthc3ByaW50ZihmbGFncyAmIH5TTFVCX0RNQSwgImttYWxsb2NfZG1hLSVkIiwKIAkJCSAodW5zaWduZWQgaW50KXJlYWxzaXplKTsKLQlzID0ga21hbGxvYyhrbWVtX3NpemUsIGZsYWdzICYgflNMVUJfRE1BKTsKKworCXMgPSBOVUxMOworCWZvciAoaSA9IDA7IGkgPCBLTUFMTE9DX0NBQ0hFUzsgaSsrKQorCQlpZiAoIWttYWxsb2NfY2FjaGVzW2ldLnNpemUpCisJCQlicmVhazsKKworCUJVR19PTihpID49IEtNQUxMT0NfQ0FDSEVTKTsKKwlzID0ga21hbGxvY19jYWNoZXMgKyBpOwogCiAJLyoKIAkgKiBNdXN0IGRlZmVyIHN5c2ZzIGNyZWF0aW9uIHRvIGEgd29ya3F1ZXVlIGJlY2F1c2Ugd2UgZG9uJ3Qga25vdwpAQCAtMjc3Miw5ICsyNjQ2LDkgQEAKIAlpZiAoc2xhYl9zdGF0ZSA+PSBTWVNGUykKIAkJc2xhYmZsYWdzIHw9IF9fU1lTRlNfQUREX0RFRkVSUkVEOwogCi0JaWYgKCFzIHx8ICF0ZXh0IHx8ICFrbWVtX2NhY2hlX29wZW4ocywgZmxhZ3MsIHRleHQsCisJaWYgKCF0ZXh0IHx8ICFrbWVtX2NhY2hlX29wZW4ocywgZmxhZ3MsIHRleHQsCiAJCQlyZWFsc2l6ZSwgQVJDSF9LTUFMTE9DX01JTkFMSUdOLCBzbGFiZmxhZ3MsIE5VTEwpKSB7Ci0JCWtmcmVlKHMpOworCQlzLT5zaXplID0gMDsKIAkJa2ZyZWUodGV4dCk7CiAJCWdvdG8gdW5sb2NrX291dDsKIAl9CkBAIC0zMDg2LDcgKzI5NjAsNyBAQAogCQkJLyoKIAkJCSAqIGlmIG4tPm5yX3NsYWJzID4gMCwgc2xhYnMgc3RpbGwgZXhpc3Qgb24gdGhlIG5vZGUKIAkJCSAqIHRoYXQgaXMgZ29pbmcgZG93bi4gV2Ugd2VyZSB1bmFibGUgdG8gZnJlZSB0aGVtLAotCQkJICogYW5kIG9mZmxpbmVfcGFnZXMoKSBmdW5jdGlvbiBzaG91ZG4ndCBjYWxsIHRoaXMKKwkJCSAqIGFuZCBvZmZsaW5lX3BhZ2VzKCkgZnVuY3Rpb24gc2hvdWxkbid0IGNhbGwgdGhpcwogCQkJICogY2FsbGJhY2suIFNvLCB3ZSBtdXN0IGZhaWwuCiAJCQkgKi8KIAkJCUJVR19PTihzbGFic19ub2RlKHMsIG9mZmxpbmVfbm9kZSkpOwpAQCAtMzE3Niw4ICszMDUwLDYgQEAKIAlpbnQgaTsKIAlpbnQgY2FjaGVzID0gMDsKIAotCWluaXRfYWxsb2NfY3B1KCk7Ci0KICNpZmRlZiBDT05GSUdfTlVNQQogCS8qCiAJICogTXVzdCBmaXJzdCBoYXZlIHRoZSBzbGFiIGNhY2hlIGF2YWlsYWJsZSBmb3IgdGhlIGFsbG9jYXRpb25zIG9mIHRoZQpAQCAtMzI2MSw4ICszMTMzLDEwIEBACiAKICNpZmRlZiBDT05GSUdfU01QCiAJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZzbGFiX25vdGlmaWVyKTsKLQlrbWVtX3NpemUgPSBvZmZzZXRvZihzdHJ1Y3Qga21lbV9jYWNoZSwgY3B1X3NsYWIpICsKLQkJCQlucl9jcHVfaWRzICogc2l6ZW9mKHN0cnVjdCBrbWVtX2NhY2hlX2NwdSAqKTsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19OVU1BCisJa21lbV9zaXplID0gb2Zmc2V0b2Yoc3RydWN0IGttZW1fY2FjaGUsIG5vZGUpICsKKwkJCQlucl9ub2RlX2lkcyAqIHNpemVvZihzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICopOwogI2Vsc2UKIAlrbWVtX3NpemUgPSBzaXplb2Yoc3RydWN0IGttZW1fY2FjaGUpOwogI2VuZGlmCkBAIC0zMzUxLDIyICszMjI1LDEyIEBACiAJZG93bl93cml0ZSgmc2x1Yl9sb2NrKTsKIAlzID0gZmluZF9tZXJnZWFibGUoc2l6ZSwgYWxpZ24sIGZsYWdzLCBuYW1lLCBjdG9yKTsKIAlpZiAocykgewotCQlpbnQgY3B1OwotCiAJCXMtPnJlZmNvdW50Kys7CiAJCS8qCiAJCSAqIEFkanVzdCB0aGUgb2JqZWN0IHNpemVzIHNvIHRoYXQgd2UgY2xlYXIKIAkJICogdGhlIGNvbXBsZXRlIG9iamVjdCBvbiBremFsbG9jLgogCQkgKi8KIAkJcy0+b2Jqc2l6ZSA9IG1heChzLT5vYmpzaXplLCAoaW50KXNpemUpOwotCi0JCS8qCi0JCSAqIEFuZCB0aGVuIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBvYmplY3Qgc2l6ZSBpbiB0aGUKLQkJICogcGVyIGNwdSBzdHJ1Y3R1cmVzCi0JCSAqLwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLQkJCWdldF9jcHVfc2xhYihzLCBjcHUpLT5vYmpzaXplID0gcy0+b2Jqc2l6ZTsKLQogCQlzLT5pbnVzZSA9IG1heF90KGludCwgcy0+aW51c2UsIEFMSUdOKHNpemUsIHNpemVvZih2b2lkICopKSk7CiAJCXVwX3dyaXRlKCZzbHViX2xvY2spOwogCkBAIC0zNDIwLDI5ICszMjg0LDE1IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXN3aXRjaCAoYWN0aW9uKSB7Ci0JY2FzZSBDUFVfVVBfUFJFUEFSRToKLQljYXNlIENQVV9VUF9QUkVQQVJFX0ZST1pFTjoKLQkJaW5pdF9hbGxvY19jcHVfY3B1KGNwdSk7Ci0JCWRvd25fcmVhZCgmc2x1Yl9sb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShzLCAmc2xhYl9jYWNoZXMsIGxpc3QpCi0JCQlzLT5jcHVfc2xhYltjcHVdID0gYWxsb2Nfa21lbV9jYWNoZV9jcHUocywgY3B1LAotCQkJCQkJCUdGUF9LRVJORUwpOwotCQl1cF9yZWFkKCZzbHViX2xvY2spOwotCQlicmVhazsKLQogCWNhc2UgQ1BVX1VQX0NBTkNFTEVEOgogCWNhc2UgQ1BVX1VQX0NBTkNFTEVEX0ZST1pFTjoKIAljYXNlIENQVV9ERUFEOgogCWNhc2UgQ1BVX0RFQURfRlJPWkVOOgogCQlkb3duX3JlYWQoJnNsdWJfbG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocywgJnNsYWJfY2FjaGVzLCBsaXN0KSB7Ci0JCQlzdHJ1Y3Qga21lbV9jYWNoZV9jcHUgKmMgPSBnZXRfY3B1X3NsYWIocywgY3B1KTsKLQogCQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQkJX19mbHVzaF9jcHVfc2xhYihzLCBjcHUpOwogCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQkJZnJlZV9rbWVtX2NhY2hlX2NwdShjLCBjcHUpOwotCQkJcy0+Y3B1X3NsYWJbY3B1XSA9IE5VTEw7CiAJCX0KIAkJdXBfcmVhZCgmc2x1Yl9sb2NrKTsKIAkJYnJlYWs7CkBAIC0zOTI4LDcgKzM3NzgsNyBAQAogCQlpbnQgY3B1OwogCiAJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKLQkJCXN0cnVjdCBrbWVtX2NhY2hlX2NwdSAqYyA9IGdldF9jcHVfc2xhYihzLCBjcHUpOworCQkJc3RydWN0IGttZW1fY2FjaGVfY3B1ICpjID0gcGVyX2NwdV9wdHIocy0+Y3B1X3NsYWIsIGNwdSk7CiAKIAkJCWlmICghYyB8fCBjLT5ub2RlIDwgMCkKIAkJCQljb250aW51ZTsKQEAgLTQxNzEsNiArNDAyMSwyMyBAQAogfQogU0xBQl9BVFRSKHRyYWNlKTsKIAorI2lmZGVmIENPTkZJR19GQUlMU0xBQgorc3RhdGljIHNzaXplX3QgZmFpbHNsYWJfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAhIShzLT5mbGFncyAmIFNMQUJfRkFJTFNMQUIpKTsKK30KKworc3RhdGljIHNzaXplX3QgZmFpbHNsYWJfc3RvcmUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkJCQlzaXplX3QgbGVuZ3RoKQoreworCXMtPmZsYWdzICY9IH5TTEFCX0ZBSUxTTEFCOworCWlmIChidWZbMF0gPT0gJzEnKQorCQlzLT5mbGFncyB8PSBTTEFCX0ZBSUxTTEFCOworCXJldHVybiBsZW5ndGg7Cit9CitTTEFCX0FUVFIoZmFpbHNsYWIpOworI2VuZGlmCisKIHN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fYWNjb3VudF9zaG93KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjaGFyICpidWYpCiB7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsICEhKHMtPmZsYWdzICYgU0xBQl9SRUNMQUlNX0FDQ09VTlQpKTsKQEAgLTQzNTMsNyArNDIyMCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCiAJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHsKLQkJdW5zaWduZWQgeCA9IGdldF9jcHVfc2xhYihzLCBjcHUpLT5zdGF0W3NpXTsKKwkJdW5zaWduZWQgeCA9IHBlcl9jcHVfcHRyKHMtPmNwdV9zbGFiLCBjcHUpLT5zdGF0W3NpXTsKIAogCQlkYXRhW2NwdV0gPSB4OwogCQlzdW0gKz0geDsKQEAgLTQzNzYsNyArNDI0Myw3IEBACiAJaW50IGNwdTsKIAogCWZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQotCQlnZXRfY3B1X3NsYWIocywgY3B1KS0+c3RhdFtzaV0gPSAwOworCQlwZXJfY3B1X3B0cihzLT5jcHVfc2xhYiwgY3B1KS0+c3RhdFtzaV0gPSAwOwogfQogCiAjZGVmaW5lIFNUQVRfQVRUUihzaSwgdGV4dCkgCQkJCQlcCkBAIC00NDY3LDYgKzQzMzQsMTAgQEAKIAkmZGVhY3RpdmF0ZV9yZW1vdGVfZnJlZXNfYXR0ci5hdHRyLAogCSZvcmRlcl9mYWxsYmFja19hdHRyLmF0dHIsCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfRkFJTFNMQUIKKwkmZmFpbHNsYWJfYXR0ci5hdHRyLAorI2VuZGlmCisKIAlOVUxMCiB9OwogCkBAIC00NTE5LDcgKzQzOTAsNyBAQAogCWtmcmVlKHMpOwogfQogCi1zdGF0aWMgc3RydWN0IHN5c2ZzX29wcyBzbGFiX3N5c2ZzX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIHNsYWJfc3lzZnNfb3BzID0gewogCS5zaG93ID0gc2xhYl9hdHRyX3Nob3csCiAJLnN0b3JlID0gc2xhYl9hdHRyX3N0b3JlLAogfTsKQEAgLTQ1MzgsNyArNDQwOSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qga3NldF91ZXZlbnRfb3BzIHNsYWJfdWV2ZW50X29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qga3NldF91ZXZlbnRfb3BzIHNsYWJfdWV2ZW50X29wcyA9IHsKIAkuZmlsdGVyID0gdWV2ZW50X2ZpbHRlciwKIH07CiAKZGlmZiAtLWdpdCBhL21tL3NwYXJzZS12bWVtbWFwLmMgYi9tbS9zcGFyc2Utdm1lbW1hcC5jCmluZGV4IGQ5NzE0YmQuLjM5MmI5YmIgMTAwNjQ0Ci0tLSBhL21tL3NwYXJzZS12bWVtbWFwLmMKKysrIGIvbW0vc3BhcnNlLXZtZW1tYXAuYwpAQCAtNDAsOSArNDAsMTEgQEAKIAkJCQl1bnNpZ25lZCBsb25nIGFsaWduLAogCQkJCXVuc2lnbmVkIGxvbmcgZ29hbCkKIHsKLQlyZXR1cm4gX19hbGxvY19ib290bWVtX25vZGUoTk9ERV9EQVRBKG5vZGUpLCBzaXplLCBhbGlnbiwgZ29hbCk7CisJcmV0dXJuIF9fYWxsb2NfYm9vdG1lbV9ub2RlX2hpZ2goTk9ERV9EQVRBKG5vZGUpLCBzaXplLCBhbGlnbiwgZ29hbCk7CiB9CiAKK3N0YXRpYyB2b2lkICp2bWVtbWFwX2J1ZjsKK3N0YXRpYyB2b2lkICp2bWVtbWFwX2J1Zl9lbmQ7CiAKIHZvaWQgKiBfX21lbWluaXQgdm1lbW1hcF9hbGxvY19ibG9jayh1bnNpZ25lZCBsb25nIHNpemUsIGludCBub2RlKQogewpAQCAtNjQsNiArNjYsMjQgQEAKIAkJCQlfX3BhKE1BWF9ETUFfQUREUkVTUykpOwogfQogCisvKiBuZWVkIHRvIG1ha2Ugc3VyZSBzaXplIGlzIGFsbCB0aGUgc2FtZSBkdXJpbmcgZWFybHkgc3RhZ2UgKi8KK3ZvaWQgKiBfX21lbWluaXQgdm1lbW1hcF9hbGxvY19ibG9ja19idWYodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgbm9kZSkKK3sKKwl2b2lkICpwdHI7CisKKwlpZiAoIXZtZW1tYXBfYnVmKQorCQlyZXR1cm4gdm1lbW1hcF9hbGxvY19ibG9jayhzaXplLCBub2RlKTsKKworCS8qIHRha2UgdGhlIGZyb20gYnVmICovCisJcHRyID0gKHZvaWQgKilBTElHTigodW5zaWduZWQgbG9uZyl2bWVtbWFwX2J1Ziwgc2l6ZSk7CisJaWYgKHB0ciArIHNpemUgPiB2bWVtbWFwX2J1Zl9lbmQpCisJCXJldHVybiB2bWVtbWFwX2FsbG9jX2Jsb2NrKHNpemUsIG5vZGUpOworCisJdm1lbW1hcF9idWYgPSBwdHIgKyBzaXplOworCisJcmV0dXJuIHB0cjsKK30KKwogdm9pZCBfX21lbWluaXQgdm1lbW1hcF92ZXJpZnkocHRlX3QgKnB0ZSwgaW50IG5vZGUsCiAJCQkJdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCiB7CkBAIC04MCw3ICsxMDAsNyBAQAogCXB0ZV90ICpwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHIpOwogCWlmIChwdGVfbm9uZSgqcHRlKSkgewogCQlwdGVfdCBlbnRyeTsKLQkJdm9pZCAqcCA9IHZtZW1tYXBfYWxsb2NfYmxvY2soUEFHRV9TSVpFLCBub2RlKTsKKwkJdm9pZCAqcCA9IHZtZW1tYXBfYWxsb2NfYmxvY2tfYnVmKFBBR0VfU0laRSwgbm9kZSk7CiAJCWlmICghcCkKIAkJCXJldHVybiBOVUxMOwogCQllbnRyeSA9IHBmbl9wdGUoX19wYShwKSA+PiBQQUdFX1NISUZULCBQQUdFX0tFUk5FTCk7CkBAIC0xNjMsMyArMTgzLDU1IEBACiAKIAlyZXR1cm4gbWFwOwogfQorCit2b2lkIF9faW5pdCBzcGFyc2VfbWVtX21hcHNfcG9wdWxhdGVfbm9kZShzdHJ1Y3QgcGFnZSAqKm1hcF9tYXAsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBwbnVtX2JlZ2luLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgcG51bV9lbmQsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBtYXBfY291bnQsIGludCBub2RlaWQpCit7CisJdW5zaWduZWQgbG9uZyBwbnVtOworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGFnZSkgKiBQQUdFU19QRVJfU0VDVElPTjsKKwl2b2lkICp2bWVtbWFwX2J1Zl9zdGFydDsKKworCXNpemUgPSBBTElHTihzaXplLCBQTURfU0laRSk7CisJdm1lbW1hcF9idWZfc3RhcnQgPSBfX2Vhcmx5b25seV9ib290bWVtX2FsbG9jKG5vZGVpZCwgc2l6ZSAqIG1hcF9jb3VudCwKKwkJCSBQTURfU0laRSwgX19wYShNQVhfRE1BX0FERFJFU1MpKTsKKworCWlmICh2bWVtbWFwX2J1Zl9zdGFydCkgeworCQl2bWVtbWFwX2J1ZiA9IHZtZW1tYXBfYnVmX3N0YXJ0OworCQl2bWVtbWFwX2J1Zl9lbmQgPSB2bWVtbWFwX2J1Zl9zdGFydCArIHNpemUgKiBtYXBfY291bnQ7CisJfQorCisJZm9yIChwbnVtID0gcG51bV9iZWdpbjsgcG51bSA8IHBudW1fZW5kOyBwbnVtKyspIHsKKwkJc3RydWN0IG1lbV9zZWN0aW9uICptczsKKworCQlpZiAoIXByZXNlbnRfc2VjdGlvbl9ucihwbnVtKSkKKwkJCWNvbnRpbnVlOworCisJCW1hcF9tYXBbcG51bV0gPSBzcGFyc2VfbWVtX21hcF9wb3B1bGF0ZShwbnVtLCBub2RlaWQpOworCQlpZiAobWFwX21hcFtwbnVtXSkKKwkJCWNvbnRpbnVlOworCQltcyA9IF9fbnJfdG9fc2VjdGlvbihwbnVtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogc3BhcnNlbWVtIG1lbW9yeSBtYXAgYmFja2luZyBmYWlsZWQgIgorCQkJInNvbWUgbWVtb3J5IHdpbGwgbm90IGJlIGF2YWlsYWJsZS5cbiIsIF9fZnVuY19fKTsKKwkJbXMtPnNlY3Rpb25fbWVtX21hcCA9IDA7CisJfQorCisJaWYgKHZtZW1tYXBfYnVmX3N0YXJ0KSB7CisJCS8qIG5lZWQgdG8gZnJlZSBsZWZ0IGJ1ZiAqLworI2lmZGVmIENPTkZJR19OT19CT09UTUVNCisJCWZyZWVfZWFybHkoX19wYSh2bWVtbWFwX2J1Zl9zdGFydCksIF9fcGEodm1lbW1hcF9idWZfZW5kKSk7CisJCWlmICh2bWVtbWFwX2J1Zl9zdGFydCA8IHZtZW1tYXBfYnVmKSB7CisJCQljaGFyIG5hbWVbMTVdOworCisJCQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJNRU1NQVAgJWQiLCBub2RlaWQpOworCQkJcmVzZXJ2ZV9lYXJseV93aXRob3V0X2NoZWNrKF9fcGEodm1lbW1hcF9idWZfc3RhcnQpLAorCQkJCQkJICAgIF9fcGEodm1lbW1hcF9idWYpLCBuYW1lKTsKKwkJfQorI2Vsc2UKKwkJZnJlZV9ib290bWVtKF9fcGEodm1lbW1hcF9idWYpLCB2bWVtbWFwX2J1Zl9lbmQgLSB2bWVtbWFwX2J1Zik7CisjZW5kaWYKKwkJdm1lbW1hcF9idWYgPSBOVUxMOworCQl2bWVtbWFwX2J1Zl9lbmQgPSBOVUxMOworCX0KK30KZGlmZiAtLWdpdCBhL21tL3NwYXJzZS5jIGIvbW0vc3BhcnNlLmMKaW5kZXggNmNlNGFhYi4uMjI4OTZkNSAxMDA2NDQKLS0tIGEvbW0vc3BhcnNlLmMKKysrIGIvbW0vc3BhcnNlLmMKQEAgLTI3MSw3ICsyNzEsOCBAQAogCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RSRU1PVkUKIHN0YXRpYyB1bnNpZ25lZCBsb25nICogX19pbml0Ci1zcGFyc2VfZWFybHlfdXNlbWFwX2FsbG9jX3BnZGF0X3NlY3Rpb24oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCkKK3NwYXJzZV9lYXJseV91c2VtYXBzX2FsbG9jX3BnZGF0X3NlY3Rpb24oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKKwkJCQkJIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7CiAJdW5zaWduZWQgbG9uZyBzZWN0aW9uX25yOwogCkBAIC0yODYsNyArMjg3LDcgQEAKIAkgKiB0aGlzIHByb2JsZW0uCiAJICovCiAJc2VjdGlvbl9uciA9IHBmbl90b19zZWN0aW9uX25yKF9fcGEocGdkYXQpID4+IFBBR0VfU0hJRlQpOwotCXJldHVybiBhbGxvY19ib290bWVtX3NlY3Rpb24odXNlbWFwX3NpemUoKSwgc2VjdGlvbl9ucik7CisJcmV0dXJuIGFsbG9jX2Jvb3RtZW1fc2VjdGlvbih1c2VtYXBfc2l6ZSgpICogY291bnQsIHNlY3Rpb25fbnIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2luaXQgY2hlY2tfdXNlbWFwX3NlY3Rpb25fbnIoaW50IG5pZCwgdW5zaWduZWQgbG9uZyAqdXNlbWFwKQpAQCAtMzI5LDcgKzMzMCw4IEBACiB9CiAjZWxzZQogc3RhdGljIHVuc2lnbmVkIGxvbmcgKiBfX2luaXQKLXNwYXJzZV9lYXJseV91c2VtYXBfYWxsb2NfcGdkYXRfc2VjdGlvbihzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KQorc3BhcnNlX2Vhcmx5X3VzZW1hcHNfYWxsb2NfcGdkYXRfc2VjdGlvbihzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LAorCQkJCQkgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTMzOSwyNyArMzQxLDQwIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RSRU1PVkUgKi8KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgKl9faW5pdCBzcGFyc2VfZWFybHlfdXNlbWFwX2FsbG9jKHVuc2lnbmVkIGxvbmcgcG51bSkKK3N0YXRpYyB2b2lkIF9faW5pdCBzcGFyc2VfZWFybHlfdXNlbWFwc19hbGxvY19ub2RlKHVuc2lnbmVkIGxvbmcqKnVzZW1hcF9tYXAsCisJCQkJIHVuc2lnbmVkIGxvbmcgcG51bV9iZWdpbiwKKwkJCQkgdW5zaWduZWQgbG9uZyBwbnVtX2VuZCwKKwkJCQkgdW5zaWduZWQgbG9uZyB1c2VtYXBfY291bnQsIGludCBub2RlaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyAqdXNlbWFwOwotCXN0cnVjdCBtZW1fc2VjdGlvbiAqbXMgPSBfX25yX3RvX3NlY3Rpb24ocG51bSk7Ci0JaW50IG5pZCA9IHNwYXJzZV9lYXJseV9uaWQobXMpOworCXZvaWQgKnVzZW1hcDsKKwl1bnNpZ25lZCBsb25nIHBudW07CisJaW50IHNpemUgPSB1c2VtYXBfc2l6ZSgpOwogCi0JdXNlbWFwID0gc3BhcnNlX2Vhcmx5X3VzZW1hcF9hbGxvY19wZ2RhdF9zZWN0aW9uKE5PREVfREFUQShuaWQpKTsKLQlpZiAodXNlbWFwKQotCQlyZXR1cm4gdXNlbWFwOwotCi0JdXNlbWFwID0gYWxsb2NfYm9vdG1lbV9ub2RlKE5PREVfREFUQShuaWQpLCB1c2VtYXBfc2l6ZSgpKTsKKwl1c2VtYXAgPSBzcGFyc2VfZWFybHlfdXNlbWFwc19hbGxvY19wZ2RhdF9zZWN0aW9uKE5PREVfREFUQShub2RlaWQpLAorCQkJCQkJCQkgdXNlbWFwX2NvdW50KTsKIAlpZiAodXNlbWFwKSB7Ci0JCWNoZWNrX3VzZW1hcF9zZWN0aW9uX25yKG5pZCwgdXNlbWFwKTsKLQkJcmV0dXJuIHVzZW1hcDsKKwkJZm9yIChwbnVtID0gcG51bV9iZWdpbjsgcG51bSA8IHBudW1fZW5kOyBwbnVtKyspIHsKKwkJCWlmICghcHJlc2VudF9zZWN0aW9uX25yKHBudW0pKQorCQkJCWNvbnRpbnVlOworCQkJdXNlbWFwX21hcFtwbnVtXSA9IHVzZW1hcDsKKwkJCXVzZW1hcCArPSBzaXplOworCQl9CisJCXJldHVybjsKIAl9CiAKLQkvKiBTdHVwaWQ6IHN1cHByZXNzIGdjYyB3YXJuaW5nIGZvciBTUEFSU0VNRU0gJiYgIU5VTUEgKi8KLQluaWQgPSAwOworCXVzZW1hcCA9IGFsbG9jX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobm9kZWlkKSwgc2l6ZSAqIHVzZW1hcF9jb3VudCk7CisJaWYgKHVzZW1hcCkgeworCQlmb3IgKHBudW0gPSBwbnVtX2JlZ2luOyBwbnVtIDwgcG51bV9lbmQ7IHBudW0rKykgeworCQkJaWYgKCFwcmVzZW50X3NlY3Rpb25fbnIocG51bSkpCisJCQkJY29udGludWU7CisJCQl1c2VtYXBfbWFwW3BudW1dID0gdXNlbWFwOworCQkJdXNlbWFwICs9IHNpemU7CisJCQljaGVja191c2VtYXBfc2VjdGlvbl9ucihub2RlaWQsIHVzZW1hcF9tYXBbcG51bV0pOworCQl9CisJCXJldHVybjsKKwl9CiAKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogYWxsb2NhdGlvbiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKLQlyZXR1cm4gTlVMTDsKIH0KIAogI2lmbmRlZiBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVAKQEAgLTM3NSw4ICszOTAsNjUgQEAKIAkJICAgICAgIFBBR0VfQUxJR04oc2l6ZW9mKHN0cnVjdCBwYWdlKSAqIFBBR0VTX1BFUl9TRUNUSU9OKSk7CiAJcmV0dXJuIG1hcDsKIH0KK3ZvaWQgX19pbml0IHNwYXJzZV9tZW1fbWFwc19wb3B1bGF0ZV9ub2RlKHN0cnVjdCBwYWdlICoqbWFwX21hcCwKKwkJCQkJICB1bnNpZ25lZCBsb25nIHBudW1fYmVnaW4sCisJCQkJCSAgdW5zaWduZWQgbG9uZyBwbnVtX2VuZCwKKwkJCQkJICB1bnNpZ25lZCBsb25nIG1hcF9jb3VudCwgaW50IG5vZGVpZCkKK3sKKwl2b2lkICptYXA7CisJdW5zaWduZWQgbG9uZyBwbnVtOworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHNpemVvZihzdHJ1Y3QgcGFnZSkgKiBQQUdFU19QRVJfU0VDVElPTjsKKworCW1hcCA9IGFsbG9jX3JlbWFwKG5vZGVpZCwgc2l6ZSAqIG1hcF9jb3VudCk7CisJaWYgKG1hcCkgeworCQlmb3IgKHBudW0gPSBwbnVtX2JlZ2luOyBwbnVtIDwgcG51bV9lbmQ7IHBudW0rKykgeworCQkJaWYgKCFwcmVzZW50X3NlY3Rpb25fbnIocG51bSkpCisJCQkJY29udGludWU7CisJCQltYXBfbWFwW3BudW1dID0gbWFwOworCQkJbWFwICs9IHNpemU7CisJCX0KKwkJcmV0dXJuOworCX0KKworCXNpemUgPSBQQUdFX0FMSUdOKHNpemUpOworCW1hcCA9IGFsbG9jX2Jvb3RtZW1fcGFnZXNfbm9kZShOT0RFX0RBVEEobm9kZWlkKSwgc2l6ZSAqIG1hcF9jb3VudCk7CisJaWYgKG1hcCkgeworCQlmb3IgKHBudW0gPSBwbnVtX2JlZ2luOyBwbnVtIDwgcG51bV9lbmQ7IHBudW0rKykgeworCQkJaWYgKCFwcmVzZW50X3NlY3Rpb25fbnIocG51bSkpCisJCQkJY29udGludWU7CisJCQltYXBfbWFwW3BudW1dID0gbWFwOworCQkJbWFwICs9IHNpemU7CisJCX0KKwkJcmV0dXJuOworCX0KKworCS8qIGZhbGxiYWNrICovCisJZm9yIChwbnVtID0gcG51bV9iZWdpbjsgcG51bSA8IHBudW1fZW5kOyBwbnVtKyspIHsKKwkJc3RydWN0IG1lbV9zZWN0aW9uICptczsKKworCQlpZiAoIXByZXNlbnRfc2VjdGlvbl9ucihwbnVtKSkKKwkJCWNvbnRpbnVlOworCQltYXBfbWFwW3BudW1dID0gc3BhcnNlX21lbV9tYXBfcG9wdWxhdGUocG51bSwgbm9kZWlkKTsKKwkJaWYgKG1hcF9tYXBbcG51bV0pCisJCQljb250aW51ZTsKKwkJbXMgPSBfX25yX3RvX3NlY3Rpb24ocG51bSk7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IHNwYXJzZW1lbSBtZW1vcnkgbWFwIGJhY2tpbmcgZmFpbGVkICIKKwkJCSJzb21lIG1lbW9yeSB3aWxsIG5vdCBiZSBhdmFpbGFibGUuXG4iLCBfX2Z1bmNfXyk7CisJCW1zLT5zZWN0aW9uX21lbV9tYXAgPSAwOworCX0KK30KICNlbmRpZiAvKiAhQ09ORklHX1NQQVJTRU1FTV9WTUVNTUFQICovCiAKKyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNX0FMTE9DX01FTV9NQVBfVE9HRVRIRVIKK3N0YXRpYyB2b2lkIF9faW5pdCBzcGFyc2VfZWFybHlfbWVtX21hcHNfYWxsb2Nfbm9kZShzdHJ1Y3QgcGFnZSAqKm1hcF9tYXAsCisJCQkJIHVuc2lnbmVkIGxvbmcgcG51bV9iZWdpbiwKKwkJCQkgdW5zaWduZWQgbG9uZyBwbnVtX2VuZCwKKwkJCQkgdW5zaWduZWQgbG9uZyBtYXBfY291bnQsIGludCBub2RlaWQpCit7CisJc3BhcnNlX21lbV9tYXBzX3BvcHVsYXRlX25vZGUobWFwX21hcCwgcG51bV9iZWdpbiwgcG51bV9lbmQsCisJCQkJCSBtYXBfY291bnQsIG5vZGVpZCk7Cit9CisjZWxzZQogc3RhdGljIHN0cnVjdCBwYWdlIF9faW5pdCAqc3BhcnNlX2Vhcmx5X21lbV9tYXBfYWxsb2ModW5zaWduZWQgbG9uZyBwbnVtKQogewogCXN0cnVjdCBwYWdlICptYXA7CkBAIC0zOTIsMTAgKzQ2NCwxMiBAQAogCW1zLT5zZWN0aW9uX21lbV9tYXAgPSAwOwogCXJldHVybiBOVUxMOwogfQorI2VuZGlmCiAKIHZvaWQgX19hdHRyaWJ1dGVfXygod2VhaykpIF9fbWVtaW5pdCB2bWVtbWFwX3BvcHVsYXRlX3ByaW50X2xhc3Qodm9pZCkKIHsKIH0KKwogLyoKICAqIEFsbG9jYXRlIHRoZSBhY2N1bXVsYXRlZCBub24tbGluZWFyIHNlY3Rpb25zLCBhbGxvY2F0ZSBhIG1lbV9tYXAKICAqIGZvciBlYWNoIGFuZCByZWNvcmQgdGhlIHBoeXNpY2FsIHRvIHNlY3Rpb24gbWFwcGluZy4KQEAgLTQwNyw2ICs0ODEsMTQgQEAKIAl1bnNpZ25lZCBsb25nICp1c2VtYXA7CiAJdW5zaWduZWQgbG9uZyAqKnVzZW1hcF9tYXA7CiAJaW50IHNpemU7CisJaW50IG5vZGVpZF9iZWdpbiA9IDA7CisJdW5zaWduZWQgbG9uZyBwbnVtX2JlZ2luID0gMDsKKwl1bnNpZ25lZCBsb25nIHVzZW1hcF9jb3VudDsKKyNpZmRlZiBDT05GSUdfU1BBUlNFTUVNX0FMTE9DX01FTV9NQVBfVE9HRVRIRVIKKwl1bnNpZ25lZCBsb25nIG1hcF9jb3VudDsKKwlpbnQgc2l6ZTI7CisJc3RydWN0IHBhZ2UgKiptYXBfbWFwOworI2VuZGlmCiAKIAkvKgogCSAqIG1hcCBpcyB1c2luZyBiaWcgcGFnZSAoYWthIDJNIGluIHg4NiA2NCBiaXQpCkBAIC00MjUsMTAgKzUwNyw4MSBAQAogCQlwYW5pYygiY2FuIG5vdCBhbGxvY2F0ZSB1c2VtYXBfbWFwXG4iKTsKIAogCWZvciAocG51bSA9IDA7IHBudW0gPCBOUl9NRU1fU0VDVElPTlM7IHBudW0rKykgeworCQlzdHJ1Y3QgbWVtX3NlY3Rpb24gKm1zOworCiAJCWlmICghcHJlc2VudF9zZWN0aW9uX25yKHBudW0pKQogCQkJY29udGludWU7Ci0JCXVzZW1hcF9tYXBbcG51bV0gPSBzcGFyc2VfZWFybHlfdXNlbWFwX2FsbG9jKHBudW0pOworCQltcyA9IF9fbnJfdG9fc2VjdGlvbihwbnVtKTsKKwkJbm9kZWlkX2JlZ2luID0gc3BhcnNlX2Vhcmx5X25pZChtcyk7CisJCXBudW1fYmVnaW4gPSBwbnVtOworCQlicmVhazsKIAl9CisJdXNlbWFwX2NvdW50ID0gMTsKKwlmb3IgKHBudW0gPSBwbnVtX2JlZ2luICsgMTsgcG51bSA8IE5SX01FTV9TRUNUSU9OUzsgcG51bSsrKSB7CisJCXN0cnVjdCBtZW1fc2VjdGlvbiAqbXM7CisJCWludCBub2RlaWQ7CisKKwkJaWYgKCFwcmVzZW50X3NlY3Rpb25fbnIocG51bSkpCisJCQljb250aW51ZTsKKwkJbXMgPSBfX25yX3RvX3NlY3Rpb24ocG51bSk7CisJCW5vZGVpZCA9IHNwYXJzZV9lYXJseV9uaWQobXMpOworCQlpZiAobm9kZWlkID09IG5vZGVpZF9iZWdpbikgeworCQkJdXNlbWFwX2NvdW50Kys7CisJCQljb250aW51ZTsKKwkJfQorCQkvKiBvaywgd2UgbmVlZCB0byB0YWtlIGNha2Ugb2YgZnJvbSBwbnVtX2JlZ2luIHRvIHBudW0gLSAxKi8KKwkJc3BhcnNlX2Vhcmx5X3VzZW1hcHNfYWxsb2Nfbm9kZSh1c2VtYXBfbWFwLCBwbnVtX2JlZ2luLCBwbnVtLAorCQkJCQkJIHVzZW1hcF9jb3VudCwgbm9kZWlkX2JlZ2luKTsKKwkJLyogbmV3IHN0YXJ0LCB1cGRhdGUgY291bnQgZXRjKi8KKwkJbm9kZWlkX2JlZ2luID0gbm9kZWlkOworCQlwbnVtX2JlZ2luID0gcG51bTsKKwkJdXNlbWFwX2NvdW50ID0gMTsKKwl9CisJLyogb2ssIGxhc3QgY2h1bmsgKi8KKwlzcGFyc2VfZWFybHlfdXNlbWFwc19hbGxvY19ub2RlKHVzZW1hcF9tYXAsIHBudW1fYmVnaW4sIE5SX01FTV9TRUNUSU9OUywKKwkJCQkJIHVzZW1hcF9jb3VudCwgbm9kZWlkX2JlZ2luKTsKKworI2lmZGVmIENPTkZJR19TUEFSU0VNRU1fQUxMT0NfTUVNX01BUF9UT0dFVEhFUgorCXNpemUyID0gc2l6ZW9mKHN0cnVjdCBwYWdlICopICogTlJfTUVNX1NFQ1RJT05TOworCW1hcF9tYXAgPSBhbGxvY19ib290bWVtKHNpemUyKTsKKwlpZiAoIW1hcF9tYXApCisJCXBhbmljKCJjYW4gbm90IGFsbG9jYXRlIG1hcF9tYXBcbiIpOworCisJZm9yIChwbnVtID0gMDsgcG51bSA8IE5SX01FTV9TRUNUSU9OUzsgcG51bSsrKSB7CisJCXN0cnVjdCBtZW1fc2VjdGlvbiAqbXM7CisKKwkJaWYgKCFwcmVzZW50X3NlY3Rpb25fbnIocG51bSkpCisJCQljb250aW51ZTsKKwkJbXMgPSBfX25yX3RvX3NlY3Rpb24ocG51bSk7CisJCW5vZGVpZF9iZWdpbiA9IHNwYXJzZV9lYXJseV9uaWQobXMpOworCQlwbnVtX2JlZ2luID0gcG51bTsKKwkJYnJlYWs7CisJfQorCW1hcF9jb3VudCA9IDE7CisJZm9yIChwbnVtID0gcG51bV9iZWdpbiArIDE7IHBudW0gPCBOUl9NRU1fU0VDVElPTlM7IHBudW0rKykgeworCQlzdHJ1Y3QgbWVtX3NlY3Rpb24gKm1zOworCQlpbnQgbm9kZWlkOworCisJCWlmICghcHJlc2VudF9zZWN0aW9uX25yKHBudW0pKQorCQkJY29udGludWU7CisJCW1zID0gX19ucl90b19zZWN0aW9uKHBudW0pOworCQlub2RlaWQgPSBzcGFyc2VfZWFybHlfbmlkKG1zKTsKKwkJaWYgKG5vZGVpZCA9PSBub2RlaWRfYmVnaW4pIHsKKwkJCW1hcF9jb3VudCsrOworCQkJY29udGludWU7CisJCX0KKwkJLyogb2ssIHdlIG5lZWQgdG8gdGFrZSBjYWtlIG9mIGZyb20gcG51bV9iZWdpbiB0byBwbnVtIC0gMSovCisJCXNwYXJzZV9lYXJseV9tZW1fbWFwc19hbGxvY19ub2RlKG1hcF9tYXAsIHBudW1fYmVnaW4sIHBudW0sCisJCQkJCQkgbWFwX2NvdW50LCBub2RlaWRfYmVnaW4pOworCQkvKiBuZXcgc3RhcnQsIHVwZGF0ZSBjb3VudCBldGMqLworCQlub2RlaWRfYmVnaW4gPSBub2RlaWQ7CisJCXBudW1fYmVnaW4gPSBwbnVtOworCQltYXBfY291bnQgPSAxOworCX0KKwkvKiBvaywgbGFzdCBjaHVuayAqLworCXNwYXJzZV9lYXJseV9tZW1fbWFwc19hbGxvY19ub2RlKG1hcF9tYXAsIHBudW1fYmVnaW4sIE5SX01FTV9TRUNUSU9OUywKKwkJCQkJIG1hcF9jb3VudCwgbm9kZWlkX2JlZ2luKTsKKyNlbmRpZgogCiAJZm9yIChwbnVtID0gMDsgcG51bSA8IE5SX01FTV9TRUNUSU9OUzsgcG51bSsrKSB7CiAJCWlmICghcHJlc2VudF9zZWN0aW9uX25yKHBudW0pKQpAQCAtNDM4LDcgKzU5MSwxMSBAQAogCQlpZiAoIXVzZW1hcCkKIAkJCWNvbnRpbnVlOwogCisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9BTExPQ19NRU1fTUFQX1RPR0VUSEVSCisJCW1hcCA9IG1hcF9tYXBbcG51bV07CisjZWxzZQogCQltYXAgPSBzcGFyc2VfZWFybHlfbWVtX21hcF9hbGxvYyhwbnVtKTsKKyNlbmRpZgogCQlpZiAoIW1hcCkKIAkJCWNvbnRpbnVlOwogCkBAIC00NDgsNiArNjA1LDkgQEAKIAogCXZtZW1tYXBfcG9wdWxhdGVfcHJpbnRfbGFzdCgpOwogCisjaWZkZWYgQ09ORklHX1NQQVJTRU1FTV9BTExPQ19NRU1fTUFQX1RPR0VUSEVSCisJZnJlZV9ib290bWVtKF9fcGEobWFwX21hcCksIHNpemUyKTsKKyNlbmRpZgogCWZyZWVfYm9vdG1lbShfX3BhKHVzZW1hcF9tYXApLCBzaXplKTsKIH0KIApkaWZmIC0tZ2l0IGEvbW0vc3dhcC5jIGIvbW0vc3dhcC5jCmluZGV4IDMwOGU1N2QuLjkwMzZiODkgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuYworKysgYi9tbS9zd2FwLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAkJZGVsX3BhZ2VfZnJvbV9scnUoem9uZSwgcGFnZSk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpvbmUtPmxydV9sb2NrLCBmbGFncyk7CiAJfQotCWZyZWVfaG90X3BhZ2UocGFnZSk7CisJZnJlZV9ob3RfY29sZF9wYWdlKHBhZ2UsIDApOwogfQogCiBzdGF0aWMgdm9pZCBwdXRfY29tcG91bmRfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDZjMDU4NWIuLjZjZDBhOGYgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKKysrIGIvbW0vc3dhcGZpbGUuYwpAQCAtNzIzLDYgKzcyMywzNyBAQAogCXJldHVybiBwICE9IE5VTEw7CiB9CiAKKyNpZmRlZiBDT05GSUdfQ0dST1VQX01FTV9SRVNfQ1RMUgorLyoqCisgKiBtZW1fY2dyb3VwX2NvdW50X3N3YXBfdXNlciAtIGNvdW50IHRoZSB1c2VyIG9mIGEgc3dhcCBlbnRyeQorICogQGVudDogdGhlIHN3YXAgZW50cnkgdG8gYmUgY2hlY2tlZAorICogQHBhZ2VwOiB0aGUgcG9pbnRlciBmb3IgdGhlIHN3YXAgY2FjaGUgcGFnZSBvZiB0aGUgZW50cnkgdG8gYmUgc3RvcmVkCisgKgorICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHRoZSB1c2VyIG9mIHRoZSBzd2FwIGVudHJ5LiBUaGUgbnVtYmVyIGlzIHZhbGlkIG9ubHkKKyAqIGZvciBzd2FwcyBvZiBhbm9ueW1vdXMgcGFnZXMuCisgKiBJZiB0aGUgZW50cnkgaXMgZm91bmQgb24gc3dhcCBjYWNoZSwgdGhlIHBhZ2UgaXMgc3RvcmVkIHRvIHBhZ2VwIHdpdGgKKyAqIHJlZmNvdW50IG9mIGl0IGJlaW5nIGluY3JlbWVudGVkLgorICovCitpbnQgbWVtX2Nncm91cF9jb3VudF9zd2FwX3VzZXIoc3dwX2VudHJ5X3QgZW50LCBzdHJ1Y3QgcGFnZSAqKnBhZ2VwKQoreworCXN0cnVjdCBwYWdlICpwYWdlOworCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpwOworCWludCBjb3VudCA9IDA7CisKKwlwYWdlID0gZmluZF9nZXRfcGFnZSgmc3dhcHBlcl9zcGFjZSwgZW50LnZhbCk7CisJaWYgKHBhZ2UpCisJCWNvdW50ICs9IHBhZ2VfbWFwY291bnQocGFnZSk7CisJcCA9IHN3YXBfaW5mb19nZXQoZW50KTsKKwlpZiAocCkgeworCQljb3VudCArPSBzd2FwX2NvdW50KHAtPnN3YXBfbWFwW3N3cF9vZmZzZXQoZW50KV0pOworCQlzcGluX3VubG9jaygmc3dhcF9sb2NrKTsKKwl9CisKKwkqcGFnZXAgPSBwYWdlOworCXJldHVybiBjb3VudDsKK30KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0hJQkVSTkFUSU9OCiAvKgogICogRmluZCB0aGUgc3dhcCB0eXBlIHRoYXQgY29ycmVzcG9uZHMgdG8gZ2l2ZW4gZGV2aWNlIChpZiBhbnkpLgpAQCAtODQwLDcgKzg3MSw4IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWluY19tbV9jb3VudGVyKHZtYS0+dm1fbW0sIGFub25fcnNzKTsKKwlkZWNfbW1fY291bnRlcih2bWEtPnZtX21tLCBNTV9TV0FQRU5UUyk7CisJaW5jX21tX2NvdW50ZXIodm1hLT52bV9tbSwgTU1fQU5PTlBBR0VTKTsKIAlnZXRfcGFnZShwYWdlKTsKIAlzZXRfcHRlX2F0KHZtYS0+dm1fbW0sIGFkZHIsIHB0ZSwKIAkJICAgcHRlX21rb2xkKG1rX3B0ZShwYWdlLCB2bWEtPnZtX3BhZ2VfcHJvdCkpKTsKQEAgLTE3NTksMTEgKzE3OTEsMTEgQEAKIAl1bnNpZ25lZCBpbnQgdHlwZTsKIAlpbnQgaSwgcHJldjsKIAlpbnQgZXJyb3I7Ci0JdW5pb24gc3dhcF9oZWFkZXIgKnN3YXBfaGVhZGVyID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQgbnJfZ29vZF9wYWdlcyA9IDA7CisJdW5pb24gc3dhcF9oZWFkZXIgKnN3YXBfaGVhZGVyOworCXVuc2lnbmVkIGludCBucl9nb29kX3BhZ2VzOwogCWludCBucl9leHRlbnRzID0gMDsKIAlzZWN0b3JfdCBzcGFuOwotCXVuc2lnbmVkIGxvbmcgbWF4cGFnZXMgPSAxOworCXVuc2lnbmVkIGxvbmcgbWF4cGFnZXM7CiAJdW5zaWduZWQgbG9uZyBzd2FwZmlsZXBhZ2VzOwogCXVuc2lnbmVkIGNoYXIgKnN3YXBfbWFwID0gTlVMTDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7CkBAIC0xOTIyLDkgKzE5NTQsMTMgQEAKIAkgKiBzd2FwIHB0ZS4KIAkgKi8KIAltYXhwYWdlcyA9IHN3cF9vZmZzZXQocHRlX3RvX3N3cF9lbnRyeSgKLQkJCXN3cF9lbnRyeV90b19wdGUoc3dwX2VudHJ5KDAsIH4wVUwpKSkpIC0gMTsKLQlpZiAobWF4cGFnZXMgPiBzd2FwX2hlYWRlci0+aW5mby5sYXN0X3BhZ2UpCi0JCW1heHBhZ2VzID0gc3dhcF9oZWFkZXItPmluZm8ubGFzdF9wYWdlOworCQkJc3dwX2VudHJ5X3RvX3B0ZShzd3BfZW50cnkoMCwgfjBVTCkpKSkgKyAxOworCWlmIChtYXhwYWdlcyA+IHN3YXBfaGVhZGVyLT5pbmZvLmxhc3RfcGFnZSkgeworCQltYXhwYWdlcyA9IHN3YXBfaGVhZGVyLT5pbmZvLmxhc3RfcGFnZSArIDE7CisJCS8qIHAtPm1heCBpcyBhbiB1bnNpZ25lZCBpbnQ6IGRvbid0IG92ZXJmbG93IGl0ICovCisJCWlmICgodW5zaWduZWQgaW50KW1heHBhZ2VzID09IDApCisJCQltYXhwYWdlcyA9IFVJTlRfTUFYOworCX0KIAlwLT5oaWdoZXN0X2JpdCA9IG1heHBhZ2VzIC0gMTsKIAogCWVycm9yID0gLUVJTlZBTDsKQEAgLTE5NDgsMjMgKzE5ODQsMjQgQEAKIAl9CiAKIAltZW1zZXQoc3dhcF9tYXAsIDAsIG1heHBhZ2VzKTsKKwlucl9nb29kX3BhZ2VzID0gbWF4cGFnZXMgLSAxOwkvKiBvbWl0IGhlYWRlciBwYWdlICovCisKIAlmb3IgKGkgPSAwOyBpIDwgc3dhcF9oZWFkZXItPmluZm8ubnJfYmFkcGFnZXM7IGkrKykgewotCQlpbnQgcGFnZV9uciA9IHN3YXBfaGVhZGVyLT5pbmZvLmJhZHBhZ2VzW2ldOwotCQlpZiAocGFnZV9uciA8PSAwIHx8IHBhZ2VfbnIgPj0gc3dhcF9oZWFkZXItPmluZm8ubGFzdF9wYWdlKSB7CisJCXVuc2lnbmVkIGludCBwYWdlX25yID0gc3dhcF9oZWFkZXItPmluZm8uYmFkcGFnZXNbaV07CisJCWlmIChwYWdlX25yID09IDAgfHwgcGFnZV9uciA+IHN3YXBfaGVhZGVyLT5pbmZvLmxhc3RfcGFnZSkgewogCQkJZXJyb3IgPSAtRUlOVkFMOwogCQkJZ290byBiYWRfc3dhcDsKIAkJfQotCQlzd2FwX21hcFtwYWdlX25yXSA9IFNXQVBfTUFQX0JBRDsKKwkJaWYgKHBhZ2VfbnIgPCBtYXhwYWdlcykgeworCQkJc3dhcF9tYXBbcGFnZV9ucl0gPSBTV0FQX01BUF9CQUQ7CisJCQlucl9nb29kX3BhZ2VzLS07CisJCX0KIAl9CiAKIAllcnJvciA9IHN3YXBfY2dyb3VwX3N3YXBvbih0eXBlLCBtYXhwYWdlcyk7CiAJaWYgKGVycm9yKQogCQlnb3RvIGJhZF9zd2FwOwogCi0JbnJfZ29vZF9wYWdlcyA9IHN3YXBfaGVhZGVyLT5pbmZvLmxhc3RfcGFnZSAtCi0JCQlzd2FwX2hlYWRlci0+aW5mby5ucl9iYWRwYWdlcyAtCi0JCQkxIC8qIGhlYWRlciBwYWdlICovOwotCiAJaWYgKG5yX2dvb2RfcGFnZXMpIHsKIAkJc3dhcF9tYXBbMF0gPSBTV0FQX01BUF9CQUQ7CiAJCXAtPm1heCA9IG1heHBhZ2VzOwpAQCAtMjE1NSw3ICsyMTkyLDExIEBACiB9CiAKIC8qCi0gKiBpbmNyZWFzZSByZWZlcmVuY2UgY291bnQgb2Ygc3dhcCBlbnRyeSBieSAxLgorICogSW5jcmVhc2UgcmVmZXJlbmNlIGNvdW50IG9mIHN3YXAgZW50cnkgYnkgMS4KKyAqIFJldHVybnMgMCBmb3Igc3VjY2Vzcywgb3IgLUVOT01FTSBpZiBhIHN3YXBfY291bnRfY29udGludWF0aW9uIGlzIHJlcXVpcmVkCisgKiBidXQgY291bGQgbm90IGJlIGF0b21pY2FsbHkgYWxsb2NhdGVkLiAgUmV0dXJucyAwLCBqdXN0IGFzIGlmIGl0IHN1Y2NlZWRlZCwKKyAqIGlmIF9fc3dhcF9kdXBsaWNhdGUoKSBmYWlscyBmb3IgYW5vdGhlciByZWFzb24gKC1FSU5WQUwgb3IgLUVOT0VOVCksIHdoaWNoCisgKiBtaWdodCBvY2N1ciBpZiBhIHBhZ2UgdGFibGUgZW50cnkgaGFzIGdvdCBjb3JydXB0ZWQuCiAgKi8KIGludCBzd2FwX2R1cGxpY2F0ZShzd3BfZW50cnlfdCBlbnRyeSkKIHsKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggYzI2OTg2Yy4uNzljODA5OCAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKKysrIGIvbW0vdm1zY2FuLmMKQEAgLTI2MiwyNyArMjYyLDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBDYWxsZWQgd2l0aG91dCBsb2NrIG9uIHdoZXRoZXIgcGFnZSBpcyBtYXBwZWQsIHNvIGFuc3dlciBpcyB1bnN0YWJsZSAqLwotc3RhdGljIGlubGluZSBpbnQgcGFnZV9tYXBwaW5nX2ludXNlKHN0cnVjdCBwYWdlICpwYWdlKQotewotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwotCi0JLyogUGFnZSBpcyBpbiBzb21lYm9keSdzIHBhZ2UgdGFibGVzLiAqLwotCWlmIChwYWdlX21hcHBlZChwYWdlKSkKLQkJcmV0dXJuIDE7Ci0KLQkvKiBCZSBtb3JlIHJlbHVjdGFudCB0byByZWNsYWltIHN3YXBjYWNoZSB0aGFuIHBhZ2VjYWNoZSAqLwotCWlmIChQYWdlU3dhcENhY2hlKHBhZ2UpKQotCQlyZXR1cm4gMTsKLQotCW1hcHBpbmcgPSBwYWdlX21hcHBpbmcocGFnZSk7Ci0JaWYgKCFtYXBwaW5nKQotCQlyZXR1cm4gMDsKLQotCS8qIEZpbGUgaXMgbW1hcCdkIGJ5IHNvbWVib2R5PyAqLwotCXJldHVybiBtYXBwaW5nX21hcHBlZChtYXBwaW5nKTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgaXNfcGFnZV9jYWNoZV9mcmVlYWJsZShzdHJ1Y3QgcGFnZSAqcGFnZSkKIHsKIAkvKgpAQCAtNTc5LDYgKzU1OCw2NSBAQAogCXB1dF9wYWdlKHBhZ2UpOwkJLyogZHJvcCByZWYgZnJvbSBpc29sYXRlICovCiB9CiAKK2VudW0gcGFnZV9yZWZlcmVuY2VzIHsKKwlQQUdFUkVGX1JFQ0xBSU0sCisJUEFHRVJFRl9SRUNMQUlNX0NMRUFOLAorCVBBR0VSRUZfS0VFUCwKKwlQQUdFUkVGX0FDVElWQVRFLAorfTsKKworc3RhdGljIGVudW0gcGFnZV9yZWZlcmVuY2VzIHBhZ2VfY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkJCSAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpCit7CisJaW50IHJlZmVyZW5jZWRfcHRlcywgcmVmZXJlbmNlZF9wYWdlOworCXVuc2lnbmVkIGxvbmcgdm1fZmxhZ3M7CisKKwlyZWZlcmVuY2VkX3B0ZXMgPSBwYWdlX3JlZmVyZW5jZWQocGFnZSwgMSwgc2MtPm1lbV9jZ3JvdXAsICZ2bV9mbGFncyk7CisJcmVmZXJlbmNlZF9wYWdlID0gVGVzdENsZWFyUGFnZVJlZmVyZW5jZWQocGFnZSk7CisKKwkvKiBMdW1weSByZWNsYWltIC0gaWdub3JlIHJlZmVyZW5jZXMgKi8KKwlpZiAoc2MtPm9yZGVyID4gUEFHRV9BTExPQ19DT1NUTFlfT1JERVIpCisJCXJldHVybiBQQUdFUkVGX1JFQ0xBSU07CisKKwkvKgorCSAqIE1sb2NrIGxvc3QgdGhlIGlzb2xhdGlvbiByYWNlIHdpdGggdXMuICBMZXQgdHJ5X3RvX3VubWFwKCkKKwkgKiBtb3ZlIHRoZSBwYWdlIHRvIHRoZSB1bmV2aWN0YWJsZSBsaXN0LgorCSAqLworCWlmICh2bV9mbGFncyAmIFZNX0xPQ0tFRCkKKwkJcmV0dXJuIFBBR0VSRUZfUkVDTEFJTTsKKworCWlmIChyZWZlcmVuY2VkX3B0ZXMpIHsKKwkJaWYgKFBhZ2VBbm9uKHBhZ2UpKQorCQkJcmV0dXJuIFBBR0VSRUZfQUNUSVZBVEU7CisJCS8qCisJCSAqIEFsbCBtYXBwZWQgcGFnZXMgc3RhcnQgb3V0IHdpdGggcGFnZSB0YWJsZQorCQkgKiByZWZlcmVuY2VzIGZyb20gdGhlIGluc3RhbnRpYXRpbmcgZmF1bHQsIHNvIHdlIG5lZWQKKwkJICogdG8gbG9vayB0d2ljZSBpZiBhIG1hcHBlZCBmaWxlIHBhZ2UgaXMgdXNlZCBtb3JlCisJCSAqIHRoYW4gb25jZS4KKwkJICoKKwkJICogTWFyayBpdCBhbmQgc3BhcmUgaXQgZm9yIGFub3RoZXIgdHJpcCBhcm91bmQgdGhlCisJCSAqIGluYWN0aXZlIGxpc3QuICBBbm90aGVyIHBhZ2UgdGFibGUgcmVmZXJlbmNlIHdpbGwKKwkJICogbGVhZCB0byBpdHMgYWN0aXZhdGlvbi4KKwkJICoKKwkJICogTm90ZTogdGhlIG1hcmsgaXMgc2V0IGZvciBhY3RpdmF0ZWQgcGFnZXMgYXMgd2VsbAorCQkgKiBzbyB0aGF0IHJlY2VudGx5IGRlYWN0aXZhdGVkIGJ1dCB1c2VkIHBhZ2VzIGFyZQorCQkgKiBxdWlja2x5IHJlY292ZXJlZC4KKwkJICovCisJCVNldFBhZ2VSZWZlcmVuY2VkKHBhZ2UpOworCisJCWlmIChyZWZlcmVuY2VkX3BhZ2UpCisJCQlyZXR1cm4gUEFHRVJFRl9BQ1RJVkFURTsKKworCQlyZXR1cm4gUEFHRVJFRl9LRUVQOworCX0KKworCS8qIFJlY2xhaW0gaWYgY2xlYW4sIGRlZmVyIGRpcnR5IHBhZ2VzIHRvIHdyaXRlYmFjayAqLworCWlmIChyZWZlcmVuY2VkX3BhZ2UpCisJCXJldHVybiBQQUdFUkVGX1JFQ0xBSU1fQ0xFQU47CisKKwlyZXR1cm4gUEFHRVJFRl9SRUNMQUlNOworfQorCiAvKgogICogc2hyaW5rX3BhZ2VfbGlzdCgpIHJldHVybnMgdGhlIG51bWJlciBvZiByZWNsYWltZWQgcGFnZXMKICAqLwpAQCAtNTkwLDE2ICs2MjgsMTUgQEAKIAlzdHJ1Y3QgcGFnZXZlYyBmcmVlZF9wdmVjOwogCWludCBwZ2FjdGl2YXRlID0gMDsKIAl1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCA9IDA7Ci0JdW5zaWduZWQgbG9uZyB2bV9mbGFnczsKIAogCWNvbmRfcmVzY2hlZCgpOwogCiAJcGFnZXZlY19pbml0KCZmcmVlZF9wdmVjLCAxKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkocGFnZV9saXN0KSkgeworCQllbnVtIHBhZ2VfcmVmZXJlbmNlcyByZWZlcmVuY2VzOwogCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKIAkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJCWludCBtYXlfZW50ZXJfZnM7Ci0JCWludCByZWZlcmVuY2VkOwogCiAJCWNvbmRfcmVzY2hlZCgpOwogCkBAIC02NDEsMTcgKzY3OCwxNiBAQAogCQkJCWdvdG8ga2VlcF9sb2NrZWQ7CiAJCX0KIAotCQlyZWZlcmVuY2VkID0gcGFnZV9yZWZlcmVuY2VkKHBhZ2UsIDEsCi0JCQkJCQlzYy0+bWVtX2Nncm91cCwgJnZtX2ZsYWdzKTsKLQkJLyoKLQkJICogSW4gYWN0aXZlIHVzZSBvciByZWFsbHkgdW5mcmVlYWJsZT8gIEFjdGl2YXRlIGl0LgotCQkgKiBJZiBwYWdlIHdoaWNoIGhhdmUgUEdfbWxvY2tlZCBsb3N0IGlzb2x0YXRpb24gcmFjZSwKLQkJICogdHJ5X3RvX3VubWFwIG1vdmVzIGl0IHRvIHVuZXZpY3RhYmxlIGxpc3QKLQkJICovCi0JCWlmIChzYy0+b3JkZXIgPD0gUEFHRV9BTExPQ19DT1NUTFlfT1JERVIgJiYKLQkJCQkJcmVmZXJlbmNlZCAmJiBwYWdlX21hcHBpbmdfaW51c2UocGFnZSkKLQkJCQkJJiYgISh2bV9mbGFncyAmIFZNX0xPQ0tFRCkpCisJCXJlZmVyZW5jZXMgPSBwYWdlX2NoZWNrX3JlZmVyZW5jZXMocGFnZSwgc2MpOworCQlzd2l0Y2ggKHJlZmVyZW5jZXMpIHsKKwkJY2FzZSBQQUdFUkVGX0FDVElWQVRFOgogCQkJZ290byBhY3RpdmF0ZV9sb2NrZWQ7CisJCWNhc2UgUEFHRVJFRl9LRUVQOgorCQkJZ290byBrZWVwX2xvY2tlZDsKKwkJY2FzZSBQQUdFUkVGX1JFQ0xBSU06CisJCWNhc2UgUEFHRVJFRl9SRUNMQUlNX0NMRUFOOgorCQkJOyAvKiB0cnkgdG8gcmVjbGFpbSB0aGUgcGFnZSBiZWxvdyAqLworCQl9CiAKIAkJLyoKIAkJICogQW5vbnltb3VzIHByb2Nlc3MgbWVtb3J5IGhhcyBiYWNraW5nIHN0b3JlPwpAQCAtNjg1LDcgKzcyMSw3IEBACiAJCX0KIAogCQlpZiAoUGFnZURpcnR5KHBhZ2UpKSB7Ci0JCQlpZiAoc2MtPm9yZGVyIDw9IFBBR0VfQUxMT0NfQ09TVExZX09SREVSICYmIHJlZmVyZW5jZWQpCisJCQlpZiAocmVmZXJlbmNlcyA9PSBQQUdFUkVGX1JFQ0xBSU1fQ0xFQU4pCiAJCQkJZ290byBrZWVwX2xvY2tlZDsKIAkJCWlmICghbWF5X2VudGVyX2ZzKQogCQkJCWdvdG8ga2VlcF9sb2NrZWQ7CkBAIC0xMzUwLDkgKzEzODYsNyBAQAogCQkJY29udGludWU7CiAJCX0KIAotCQkvKiBwYWdlX3JlZmVyZW5jZWQgY2xlYXJzIFBhZ2VSZWZlcmVuY2VkICovCi0JCWlmIChwYWdlX21hcHBpbmdfaW51c2UocGFnZSkgJiYKLQkJICAgIHBhZ2VfcmVmZXJlbmNlZChwYWdlLCAwLCBzYy0+bWVtX2Nncm91cCwgJnZtX2ZsYWdzKSkgeworCQlpZiAocGFnZV9yZWZlcmVuY2VkKHBhZ2UsIDAsIHNjLT5tZW1fY2dyb3VwLCAmdm1fZmxhZ3MpKSB7CiAJCQlucl9yb3RhdGVkKys7CiAJCQkvKgogCQkJICogSWRlbnRpZnkgcmVmZXJlbmNlZCwgZmlsZS1iYWNrZWQgYWN0aXZlIHBhZ2VzIGFuZApAQCAtMTUwMSw2ICsxNTM1LDEzIEBACiAJdW5zaWduZWQgbG9uZyBhcCwgZnA7CiAJc3RydWN0IHpvbmVfcmVjbGFpbV9zdGF0ICpyZWNsYWltX3N0YXQgPSBnZXRfcmVjbGFpbV9zdGF0KHpvbmUsIHNjKTsKIAorCS8qIElmIHdlIGhhdmUgbm8gc3dhcCBzcGFjZSwgZG8gbm90IGJvdGhlciBzY2FubmluZyBhbm9uIHBhZ2VzLiAqLworCWlmICghc2MtPm1heV9zd2FwIHx8IChucl9zd2FwX3BhZ2VzIDw9IDApKSB7CisJCXBlcmNlbnRbMF0gPSAwOworCQlwZXJjZW50WzFdID0gMTAwOworCQlyZXR1cm47CisJfQorCiAJYW5vbiAgPSB6b25lX25yX2xydV9wYWdlcyh6b25lLCBzYywgTFJVX0FDVElWRV9BTk9OKSArCiAJCXpvbmVfbnJfbHJ1X3BhZ2VzKHpvbmUsIHNjLCBMUlVfSU5BQ1RJVkVfQU5PTik7CiAJZmlsZSAgPSB6b25lX25yX2xydV9wYWdlcyh6b25lLCBzYywgTFJVX0FDVElWRV9GSUxFKSArCkBAIC0xNTk4LDIyICsxNjM5LDIwIEBACiAJdW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQgPSBzYy0+bnJfcmVjbGFpbWVkOwogCXVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSA9IHNjLT5ucl90b19yZWNsYWltOwogCXN0cnVjdCB6b25lX3JlY2xhaW1fc3RhdCAqcmVjbGFpbV9zdGF0ID0gZ2V0X3JlY2xhaW1fc3RhdCh6b25lLCBzYyk7Ci0JaW50IG5vc3dhcCA9IDA7CiAKLQkvKiBJZiB3ZSBoYXZlIG5vIHN3YXAgc3BhY2UsIGRvIG5vdCBib3RoZXIgc2Nhbm5pbmcgYW5vbiBwYWdlcy4gKi8KLQlpZiAoIXNjLT5tYXlfc3dhcCB8fCAobnJfc3dhcF9wYWdlcyA8PSAwKSkgewotCQlub3N3YXAgPSAxOwotCQlwZXJjZW50WzBdID0gMDsKLQkJcGVyY2VudFsxXSA9IDEwMDsKLQl9IGVsc2UKLQkJZ2V0X3NjYW5fcmF0aW8oem9uZSwgc2MsIHBlcmNlbnQpOworCWdldF9zY2FuX3JhdGlvKHpvbmUsIHNjLCBwZXJjZW50KTsKIAogCWZvcl9lYWNoX2V2aWN0YWJsZV9scnUobCkgewogCQlpbnQgZmlsZSA9IGlzX2ZpbGVfbHJ1KGwpOwogCQl1bnNpZ25lZCBsb25nIHNjYW47CiAKKwkJaWYgKHBlcmNlbnRbZmlsZV0gPT0gMCkgeworCQkJbnJbbF0gPSAwOworCQkJY29udGludWU7CisJCX0KKwogCQlzY2FuID0gem9uZV9ucl9scnVfcGFnZXMoem9uZSwgc2MsIGwpOwotCQlpZiAocHJpb3JpdHkgfHwgbm9zd2FwKSB7CisJCWlmIChwcmlvcml0eSkgewogCQkJc2NhbiA+Pj0gcHJpb3JpdHk7CiAJCQlzY2FuID0gKHNjYW4gKiBwZXJjZW50W2ZpbGVdKSAvIDEwMDsKIAkJfQpAQCAtMTY5NCw4ICsxNzMzLDcgQEAKIAkJCQljb250aW51ZTsKIAkJCW5vdGVfem9uZV9zY2FubmluZ19wcmlvcml0eSh6b25lLCBwcmlvcml0eSk7CiAKLQkJCWlmICh6b25lX2lzX2FsbF91bnJlY2xhaW1hYmxlKHpvbmUpICYmCi0JCQkJCQlwcmlvcml0eSAhPSBERUZfUFJJT1JJVFkpCisJCQlpZiAoem9uZS0+YWxsX3VucmVjbGFpbWFibGUgJiYgcHJpb3JpdHkgIT0gREVGX1BSSU9SSVRZKQogCQkJCWNvbnRpbnVlOwkvKiBMZXQga3N3YXBkIHBvbGwgaXQgKi8KIAkJCXNjLT5hbGxfdW5yZWNsYWltYWJsZSA9IDA7CiAJCX0gZWxzZSB7CkBAIC0xOTIyLDcgKzE5NjAsNyBAQAogCQlpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKQogCQkJY29udGludWU7CiAKLQkJaWYgKHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoem9uZSkpCisJCWlmICh6b25lLT5hbGxfdW5yZWNsYWltYWJsZSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmICghem9uZV93YXRlcm1hcmtfb2soem9uZSwgb3JkZXIsIGhpZ2hfd21hcmtfcGFnZXMoem9uZSksCkBAIC0yMDEyLDggKzIwNTAsNyBAQAogCQkJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoem9uZSkgJiYKLQkJCSAgICBwcmlvcml0eSAhPSBERUZfUFJJT1JJVFkpCisJCQlpZiAoem9uZS0+YWxsX3VucmVjbGFpbWFibGUgJiYgcHJpb3JpdHkgIT0gREVGX1BSSU9SSVRZKQogCQkJCWNvbnRpbnVlOwogCiAJCQkvKgpAQCAtMjA1NiwxMyArMjA5Myw5IEBACiAJCQlpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoem9uZV9pc19hbGxfdW5yZWNsYWltYWJsZSh6b25lKSAmJgotCQkJCQlwcmlvcml0eSAhPSBERUZfUFJJT1JJVFkpCisJCQlpZiAoem9uZS0+YWxsX3VucmVjbGFpbWFibGUgJiYgcHJpb3JpdHkgIT0gREVGX1BSSU9SSVRZKQogCQkJCWNvbnRpbnVlOwogCi0JCQlpZiAoIXpvbmVfd2F0ZXJtYXJrX29rKHpvbmUsIG9yZGVyLAotCQkJCQloaWdoX3dtYXJrX3BhZ2VzKHpvbmUpLCBlbmRfem9uZSwgMCkpCi0JCQkJYWxsX3pvbmVzX29rID0gMDsKIAkJCXRlbXBfcHJpb3JpdHlbaV0gPSBwcmlvcml0eTsKIAkJCXNjLm5yX3NjYW5uZWQgPSAwOwogCQkJbm90ZV96b25lX3NjYW5uaW5nX3ByaW9yaXR5KHpvbmUsIHByaW9yaXR5KTsKQEAgLTIwODcsMTIgKzIxMjAsMTEgQEAKIAkJCQkJCWxydV9wYWdlcyk7CiAJCQlzYy5ucl9yZWNsYWltZWQgKz0gcmVjbGFpbV9zdGF0ZS0+cmVjbGFpbWVkX3NsYWI7CiAJCQl0b3RhbF9zY2FubmVkICs9IHNjLm5yX3NjYW5uZWQ7Ci0JCQlpZiAoem9uZV9pc19hbGxfdW5yZWNsYWltYWJsZSh6b25lKSkKKwkJCWlmICh6b25lLT5hbGxfdW5yZWNsYWltYWJsZSkKIAkJCQljb250aW51ZTsKLQkJCWlmIChucl9zbGFiID09IDAgJiYgem9uZS0+cGFnZXNfc2Nhbm5lZCA+PQotCQkJCQkoem9uZV9yZWNsYWltYWJsZV9wYWdlcyh6b25lKSAqIDYpKQotCQkJCQl6b25lX3NldF9mbGFnKHpvbmUsCi0JCQkJCQkgICAgICBaT05FX0FMTF9VTlJFQ0xBSU1BQkxFKTsKKwkJCWlmIChucl9zbGFiID09IDAgJiYKKwkJCSAgICB6b25lLT5wYWdlc19zY2FubmVkID49ICh6b25lX3JlY2xhaW1hYmxlX3BhZ2VzKHpvbmUpICogNikpCisJCQkJem9uZS0+YWxsX3VucmVjbGFpbWFibGUgPSAxOwogCQkJLyoKIAkJCSAqIElmIHdlJ3ZlIGRvbmUgYSBkZWNlbnQgYW1vdW50IG9mIHNjYW5uaW5nIGFuZAogCQkJICogdGhlIHJlY2xhaW0gcmF0aW8gaXMgbG93LCBzdGFydCBkb2luZyB3cml0ZXBhZ2UKQEAgLTIxMDIsMTMgKzIxMzQsMTggQEAKIAkJCSAgICB0b3RhbF9zY2FubmVkID4gc2MubnJfcmVjbGFpbWVkICsgc2MubnJfcmVjbGFpbWVkIC8gMikKIAkJCQlzYy5tYXlfd3JpdGVwYWdlID0gMTsKIAotCQkJLyoKLQkJCSAqIFdlIGFyZSBzdGlsbCB1bmRlciBtaW4gd2F0ZXIgbWFyay4gaXQgbWVhbiB3ZSBoYXZlCi0JCQkgKiBHRlBfQVRPTUlDIGFsbG9jYXRpb24gZmFpbHVyZSByaXNrLiBIdXJyeSB1cCEKLQkJCSAqLwotCQkJaWYgKCF6b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwgbWluX3dtYXJrX3BhZ2VzKHpvbmUpLAotCQkJCQkgICAgICBlbmRfem9uZSwgMCkpCi0JCQkJaGFzX3VuZGVyX21pbl93YXRlcm1hcmtfem9uZSA9IDE7CisJCQlpZiAoIXpvbmVfd2F0ZXJtYXJrX29rKHpvbmUsIG9yZGVyLAorCQkJCQloaWdoX3dtYXJrX3BhZ2VzKHpvbmUpLCBlbmRfem9uZSwgMCkpIHsKKwkJCQlhbGxfem9uZXNfb2sgPSAwOworCQkJCS8qCisJCQkJICogV2UgYXJlIHN0aWxsIHVuZGVyIG1pbiB3YXRlciBtYXJrLiAgVGhpcworCQkJCSAqIG1lYW5zIHRoYXQgd2UgaGF2ZSBhIEdGUF9BVE9NSUMgYWxsb2NhdGlvbgorCQkJCSAqIGZhaWx1cmUgcmlzay4gSHVycnkgdXAhCisJCQkJICovCisJCQkJaWYgKCF6b25lX3dhdGVybWFya19vayh6b25lLCBvcmRlciwKKwkJCQkJICAgIG1pbl93bWFya19wYWdlcyh6b25lKSwgZW5kX3pvbmUsIDApKQorCQkJCQloYXNfdW5kZXJfbWluX3dhdGVybWFya196b25lID0gMTsKKwkJCX0KIAogCQl9CiAJCWlmIChhbGxfem9uZXNfb2spCkBAIC0yNTUwLDYgKzI1ODcsNyBAQAogCSAqIGFuZCBSRUNMQUlNX1NXQVAuCiAJICovCiAJcC0+ZmxhZ3MgfD0gUEZfTUVNQUxMT0MgfCBQRl9TV0FQV1JJVEU7CisJbG9ja2RlcF9zZXRfY3VycmVudF9yZWNsYWltX3N0YXRlKGdmcF9tYXNrKTsKIAlyZWNsYWltX3N0YXRlLnJlY2xhaW1lZF9zbGFiID0gMDsKIAlwLT5yZWNsYWltX3N0YXRlID0gJnJlY2xhaW1fc3RhdGU7CiAKQEAgLTI1OTMsNiArMjYzMSw3IEBACiAKIAlwLT5yZWNsYWltX3N0YXRlID0gTlVMTDsKIAljdXJyZW50LT5mbGFncyAmPSB+KFBGX01FTUFMTE9DIHwgUEZfU1dBUFdSSVRFKTsKKwlsb2NrZGVwX2NsZWFyX2N1cnJlbnRfcmVjbGFpbV9zdGF0ZSgpOwogCXJldHVybiBzYy5ucl9yZWNsYWltZWQgPj0gbnJfcGFnZXM7CiB9CiAKQEAgLTI2MTUsNyArMjY1NCw3IEBACiAJICAgIHpvbmVfcGFnZV9zdGF0ZSh6b25lLCBOUl9TTEFCX1JFQ0xBSU1BQkxFKSA8PSB6b25lLT5taW5fc2xhYl9wYWdlcykKIAkJcmV0dXJuIFpPTkVfUkVDTEFJTV9GVUxMOwogCi0JaWYgKHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoem9uZSkpCisJaWYgKHpvbmUtPmFsbF91bnJlY2xhaW1hYmxlKQogCQlyZXR1cm4gWk9ORV9SRUNMQUlNX0ZVTEw7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvbW0vdm1zdGF0LmMgYi9tbS92bXN0YXQuYwppbmRleCA2MDUxZmJhLi43Zjc2MGNiIDEwMDY0NAotLS0gYS9tbS92bXN0YXQuYworKysgYi9tbS92bXN0YXQuYwpAQCAtMTM5LDcgKzEzOSw4IEBACiAJCXRocmVzaG9sZCA9IGNhbGN1bGF0ZV90aHJlc2hvbGQoem9uZSk7CiAKIAkJZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCi0JCQl6b25lX3BjcCh6b25lLCBjcHUpLT5zdGF0X3RocmVzaG9sZCA9IHRocmVzaG9sZDsKKwkJCXBlcl9jcHVfcHRyKHpvbmUtPnBhZ2VzZXQsIGNwdSktPnN0YXRfdGhyZXNob2xkCisJCQkJCQkJPSB0aHJlc2hvbGQ7CiAJfQogfQogCkBAIC0xNDksNyArMTUwLDggQEAKIHZvaWQgX19tb2Rfem9uZV9wYWdlX3N0YXRlKHN0cnVjdCB6b25lICp6b25lLCBlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0sCiAJCQkJaW50IGRlbHRhKQogewotCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnBjcCA9IHpvbmVfcGNwKHpvbmUsIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJc3RydWN0IHBlcl9jcHVfcGFnZXNldCAqcGNwID0gdGhpc19jcHVfcHRyKHpvbmUtPnBhZ2VzZXQpOworCiAJczggKnAgPSBwY3AtPnZtX3N0YXRfZGlmZiArIGl0ZW07CiAJbG9uZyB4OwogCkBAIC0yMDIsNyArMjA0LDcgQEAKICAqLwogdm9pZCBfX2luY196b25lX3N0YXRlKHN0cnVjdCB6b25lICp6b25lLCBlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0pCiB7Ci0Jc3RydWN0IHBlcl9jcHVfcGFnZXNldCAqcGNwID0gem9uZV9wY3Aoem9uZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwY3AgPSB0aGlzX2NwdV9wdHIoem9uZS0+cGFnZXNldCk7CiAJczggKnAgPSBwY3AtPnZtX3N0YXRfZGlmZiArIGl0ZW07CiAKIAkoKnApKys7CkBAIC0yMjMsNyArMjI1LDcgQEAKIAogdm9pZCBfX2RlY196b25lX3N0YXRlKHN0cnVjdCB6b25lICp6b25lLCBlbnVtIHpvbmVfc3RhdF9pdGVtIGl0ZW0pCiB7Ci0Jc3RydWN0IHBlcl9jcHVfcGFnZXNldCAqcGNwID0gem9uZV9wY3Aoem9uZSwgc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwY3AgPSB0aGlzX2NwdV9wdHIoem9uZS0+cGFnZXNldCk7CiAJczggKnAgPSBwY3AtPnZtX3N0YXRfZGlmZiArIGl0ZW07CiAKIAkoKnApLS07CkBAIC0zMDAsNyArMzAyLDcgQEAKIAlmb3JfZWFjaF9wb3B1bGF0ZWRfem9uZSh6b25lKSB7CiAJCXN0cnVjdCBwZXJfY3B1X3BhZ2VzZXQgKnA7CiAKLQkJcCA9IHpvbmVfcGNwKHpvbmUsIGNwdSk7CisJCXAgPSBwZXJfY3B1X3B0cih6b25lLT5wYWdlc2V0LCBjcHUpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBOUl9WTV9aT05FX1NUQVRfSVRFTVM7IGkrKykKIAkJCWlmIChwLT52bV9zdGF0X2RpZmZbaV0pIHsKQEAgLTc0MSw3ICs3NDMsNyBAQAogCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewogCQlzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0ICpwYWdlc2V0OwogCi0JCXBhZ2VzZXQgPSB6b25lX3BjcCh6b25lLCBpKTsKKwkJcGFnZXNldCA9IHBlcl9jcHVfcHRyKHpvbmUtPnBhZ2VzZXQsIGkpOwogCQlzZXFfcHJpbnRmKG0sCiAJCQkgICAiXG4gICAgY3B1OiAlaSIKIAkJCSAgICJcbiAgICAgICAgICAgICAgY291bnQ6ICVpIgpAQCAtNzYxLDcgKzc2Myw3IEBACiAJCSAgICJcbiAgcHJldl9wcmlvcml0eTogICAgICVpIgogCQkgICAiXG4gIHN0YXJ0X3BmbjogICAgICAgICAlbHUiCiAJCSAgICJcbiAgaW5hY3RpdmVfcmF0aW86ICAgICV1IiwKLQkJCSAgIHpvbmVfaXNfYWxsX3VucmVjbGFpbWFibGUoem9uZSksCisJCSAgIHpvbmUtPmFsbF91bnJlY2xhaW1hYmxlLAogCQkgICB6b25lLT5wcmV2X3ByaW9yaXR5LAogCQkgICB6b25lLT56b25lX3N0YXJ0X3BmbiwKIAkJICAgem9uZS0+aW5hY3RpdmVfcmF0aW8pOwpAQCAtOTA2LDYgKzkwOCw3IEBACiAJY2FzZSBDUFVfT05MSU5FOgogCWNhc2UgQ1BVX09OTElORV9GUk9aRU46CiAJCXN0YXJ0X2NwdV90aW1lcihjcHUpOworCQlub2RlX3NldF9zdGF0ZShjcHVfdG9fbm9kZShjcHUpLCBOX0NQVSk7CiAJCWJyZWFrOwogCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKIAljYXNlIENQVV9ET1dOX1BSRVBBUkVfRlJPWkVOOgpkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW4uYyBiL25ldC84MDIxcS92bGFuLmMKaW5kZXggMzNmOTBlNy4uNDUzNTEyMiAxMDA2NDQKLS0tIGEvbmV0LzgwMjFxL3ZsYW4uYworKysgYi9uZXQvODAyMXEvdmxhbi5jCkBAIC02NjMsNyArNjYzLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHZsYW5faW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IHZsYW5faW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCB2bGFuX25ldCAqdm4gPSBuZXRfZ2VuZXJpYyhuZXQsIHZsYW5fbmV0X2lkKTsKIAlpbnQgZXJyOwpAQCAtNjc1LDcgKzY3NSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgdmxhbl9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IHZsYW5fZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCXZsYW5fcHJvY19jbGVhbnVwKG5ldCk7CiB9CmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbi5oIGIvbmV0LzgwMjFxL3ZsYW4uaAppbmRleCA1Njg1Mjk2Li42YWJkY2FjIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbi5oCisrKyBiL25ldC84MDIxcS92bGFuLmgKQEAgLTYxLDcgKzYxLDcgQEAKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJCQkqZGVudDsKIAl1bnNpZ25lZCBsb25nCQkJCWNudF9pbmNfaGVhZHJvb21fb25fdHg7CiAJdW5zaWduZWQgbG9uZwkJCQljbnRfZW5jYXBfb25feG1pdDsKLQlzdHJ1Y3Qgdmxhbl9yeF9zdGF0cwkJCSp2bGFuX3J4X3N0YXRzOworCXN0cnVjdCB2bGFuX3J4X3N0YXRzIF9fcGVyY3B1CQkqdmxhbl9yeF9zdGF0czsKIH07CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZsYW5fZGV2X2luZm8gKnZsYW5fZGV2X2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL25ldC84MDIxcS92bGFuX2NvcmUuYyBiL25ldC84MDIxcS92bGFuX2NvcmUuYwppbmRleCBlNzVhMmYzLi5jMDMxNmUwIDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbl9jb3JlLmMKKysrIGIvbmV0LzgwMjFxL3ZsYW5fY29yZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAJaWYgKHNrYl9ib25kX3Nob3VsZF9kcm9wKHNrYikpCiAJCWdvdG8gZHJvcDsKIAorCXNrYi0+c2tiX2lpZiA9IHNrYi0+ZGV2LT5pZmluZGV4OwogCV9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCB2bGFuX3RjaSk7CiAJc2tiLT5kZXYgPSB2bGFuX2dyb3VwX2dldF9kZXZpY2UoZ3JwLCB2bGFuX3RjaSAmIFZMQU5fVklEX01BU0spOwogCkBAIC04NSw2ICs4Niw3IEBACiAJaWYgKHNrYl9ib25kX3Nob3VsZF9kcm9wKHNrYikpCiAJCWdvdG8gZHJvcDsKIAorCXNrYi0+c2tiX2lpZiA9IHNrYi0+ZGV2LT5pZmluZGV4OwogCV9fdmxhbl9od2FjY2VsX3B1dF90YWcoc2tiLCB2bGFuX3RjaSk7CiAJc2tiLT5kZXYgPSB2bGFuX2dyb3VwX2dldF9kZXZpY2UoZ3JwLCB2bGFuX3RjaSAmIFZMQU5fVklEX01BU0spOwogCmRpZmYgLS1naXQgYS9uZXQvODAyMXEvdmxhbl9kZXYuYyBiL25ldC84MDIxcS92bGFuX2Rldi5jCmluZGV4IGMxYjkyY2EuLjllODMyNzIgMTAwNjQ0Ci0tLSBhL25ldC84MDIxcS92bGFuX2Rldi5jCisrKyBiL25ldC84MDIxcS92bGFuX2Rldi5jCkBAIC0yNjMsMTEgKzI2MywxMCBAQAogCQl2aGRyLT5oX3ZsYW5fVENJID0gaHRvbnModmxhbl90Y2kpOwogCiAJCS8qCi0JCSAqICBTZXQgdGhlIHByb3RvY29sIHR5cGUuIEZvciBhIHBhY2tldCBvZiB0eXBlIEVUSF9QXzgwMl8zIHdlCi0JCSAqICBwdXQgdGhlIGxlbmd0aCBpbiBoZXJlIGluc3RlYWQuIEl0IGlzIHVwIHRvIHRoZSA4MDIuMgotCQkgKiAgbGF5ZXIgdG8gY2FycnkgcHJvdG9jb2wgaW5mb3JtYXRpb24uCisJCSAqICBTZXQgdGhlIHByb3RvY29sIHR5cGUuIEZvciBhIHBhY2tldCBvZiB0eXBlIEVUSF9QXzgwMl8zLzIgd2UKKwkJICogIHB1dCB0aGUgbGVuZ3RoIGluIGhlcmUgaW5zdGVhZC4KIAkJICovCi0JCWlmICh0eXBlICE9IEVUSF9QXzgwMl8zKQorCQlpZiAodHlwZSAhPSBFVEhfUF84MDJfMyAmJiB0eXBlICE9IEVUSF9QXzgwMl8yKQogCQkJdmhkci0+aF92bGFuX2VuY2Fwc3VsYXRlZF9wcm90byA9IGh0b25zKHR5cGUpOwogCQllbHNlCiAJCQl2aGRyLT5oX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvID0gaHRvbnMobGVuKTsKQEAgLTMyMyw3ICszMjIsNyBAQAogCX0KIAogCi0Jc2tiLT5kZXYgPSB2bGFuX2Rldl9pbmZvKGRldiktPnJlYWxfZGV2OworCXNrYl9zZXRfZGV2KHNrYiwgdmxhbl9kZXZfaW5mbyhkZXYpLT5yZWFsX2Rldik7CiAJbGVuID0gc2tiLT5sZW47CiAJcmV0ID0gZGV2X3F1ZXVlX3htaXQoc2tiKTsKIApkaWZmIC0tZ2l0IGEvbmV0LzgwMjFxL3ZsYW5wcm9jLmMgYi9uZXQvODAyMXEvdmxhbnByb2MuYwppbmRleCA5ZWMxZjA1Li5hZmVhZDM1IDEwMDY0NAotLS0gYS9uZXQvODAyMXEvdmxhbnByb2MuYworKysgYi9uZXQvODAyMXEvdmxhbnByb2MuYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAgKglDcmVhdGUgL3Byb2MvbmV0L3ZsYW4gZW50cmllcwogICovCiAKLWludCB2bGFuX3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitpbnQgX19uZXRfaW5pdCB2bGFuX3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IHZsYW5fbmV0ICp2biA9IG5ldF9nZW5lcmljKG5ldCwgdmxhbl9uZXRfaWQpOwogCmRpZmYgLS1naXQgYS9uZXQvOXAvY2xpZW50LmMgYi9uZXQvOXAvY2xpZW50LmMKaW5kZXggMDlkNGYxZTIuLmJkZTlmM2QgMTAwNjQ0Ci0tLSBhL25ldC85cC9jbGllbnQuYworKysgYi9uZXQvOXAvY2xpZW50LmMKQEAgLTQ2LDYgKzQ2LDcgQEAKIAlPcHRfbXNpemUsCiAJT3B0X3RyYW5zLAogCU9wdF9sZWdhY3ksCisJT3B0X3ZlcnNpb24sCiAJT3B0X2VyciwKIH07CiAKQEAgLTUzLDkgKzU0LDQyIEBACiAJe09wdF9tc2l6ZSwgIm1zaXplPSV1In0sCiAJe09wdF9sZWdhY3ksICJub2V4dGVuZCJ9LAogCXtPcHRfdHJhbnMsICJ0cmFucz0lcyJ9LAorCXtPcHRfdmVyc2lvbiwgInZlcnNpb249JXMifSwKIAl7T3B0X2VyciwgTlVMTH0sCiB9OwogCitpbmxpbmUgaW50IHA5X2lzX3Byb3RvX2RvdGwoc3RydWN0IHA5X2NsaWVudCAqY2xudCkKK3sKKwlyZXR1cm4gKGNsbnQtPnByb3RvX3ZlcnNpb24gPT0gcDlfcHJvdG9fMjAxMEwpOworfQorRVhQT1JUX1NZTUJPTChwOV9pc19wcm90b19kb3RsKTsKKworaW5saW5lIGludCBwOV9pc19wcm90b19kb3R1KHN0cnVjdCBwOV9jbGllbnQgKmNsbnQpCit7CisJcmV0dXJuIChjbG50LT5wcm90b192ZXJzaW9uID09IHA5X3Byb3RvXzIwMDB1KTsKK30KK0VYUE9SVF9TWU1CT0wocDlfaXNfcHJvdG9fZG90dSk7CisKKy8qIEludGVycHJldCBtb3VudCBvcHRpb24gZm9yIHByb3RvY29sIHZlcnNpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGdldF9wcm90b2NvbF92ZXJzaW9uKGNvbnN0IHN1YnN0cmluZ190ICpuYW1lKQoreworCXVuc2lnbmVkIGNoYXIgdmVyc2lvbiA9IC1FSU5WQUw7CisJaWYgKCFzdHJuY21wKCI5cDIwMDAiLCBuYW1lLT5mcm9tLCBuYW1lLT50by1uYW1lLT5mcm9tKSkgeworCQl2ZXJzaW9uID0gcDlfcHJvdG9fbGVnYWN5OworCQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiUHJvdG9jb2wgdmVyc2lvbjogTGVnYWN5XG4iKTsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKCI5cDIwMDAudSIsIG5hbWUtPmZyb20sIG5hbWUtPnRvLW5hbWUtPmZyb20pKSB7CisJCXZlcnNpb24gPSBwOV9wcm90b18yMDAwdTsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIlByb3RvY29sIHZlcnNpb246IDlQMjAwMC51XG4iKTsKKwl9IGVsc2UgaWYgKCFzdHJuY21wKCI5cDIwMTAuTCIsIG5hbWUtPmZyb20sIG5hbWUtPnRvLW5hbWUtPmZyb20pKSB7CisJCXZlcnNpb24gPSBwOV9wcm90b18yMDEwTDsKKwkJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIlByb3RvY29sIHZlcnNpb246IDlQMjAxMC5MXG4iKTsKKwl9IGVsc2UgeworCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiVW5rbm93biBwcm90b2NvbCB2ZXJzaW9uICVzLiAiLAorCQkJCQkJCW5hbWUtPmZyb20pOworCX0KKwlyZXR1cm4gdmVyc2lvbjsKK30KKwogc3RhdGljIHN0cnVjdCBwOV9yZXFfdCAqCiBwOV9jbGllbnRfcnBjKHN0cnVjdCBwOV9jbGllbnQgKmMsIGludDhfdCB0eXBlLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CiAKQEAgLTc1LDcgKzEwOSw3IEBACiAJaW50IG9wdGlvbjsKIAlpbnQgcmV0ID0gMDsKIAotCWNsbnQtPmRvdHUgPSAxOworCWNsbnQtPnByb3RvX3ZlcnNpb24gPSBwOV9wcm90b18yMDAwdTsKIAljbG50LT5tc2l6ZSA9IDgxOTI7CiAKIAlpZiAoIW9wdHMpCkBAIC0xMTgsNyArMTUyLDEzIEBACiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBPcHRfbGVnYWN5OgotCQkJY2xudC0+ZG90dSA9IDA7CisJCQljbG50LT5wcm90b192ZXJzaW9uID0gcDlfcHJvdG9fbGVnYWN5OworCQkJYnJlYWs7CisJCWNhc2UgT3B0X3ZlcnNpb246CisJCQlyZXQgPSBnZXRfcHJvdG9jb2xfdmVyc2lvbigmYXJnc1swXSk7CisJCQlpZiAocmV0ID09IC1FSU5WQUwpCisJCQkJZ290byBmcmVlX2FuZF9yZXR1cm47CisJCQljbG50LT5wcm90b192ZXJzaW9uID0gcmV0OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQljb250aW51ZTsKQEAgLTQxMCwxNCArNDUwLDE1IEBACiAJCWludCBlY29kZTsKIAkJY2hhciAqZW5hbWU7CiAKLQkJZXJyID0gcDlwZHVfcmVhZGYocmVxLT5yYywgYy0+ZG90dSwgInM/ZCIsICZlbmFtZSwgJmVjb2RlKTsKKwkJZXJyID0gcDlwZHVfcmVhZGYocmVxLT5yYywgYy0+cHJvdG9fdmVyc2lvbiwgInM/ZCIsCisJCQkJCQkJJmVuYW1lLCAmZWNvZGUpOwogCQlpZiAoZXJyKSB7CiAJCQlQOV9EUFJJTlRLKFA5X0RFQlVHX0VSUk9SLCAiY291bGRuJ3QgcGFyc2UgZXJyb3IlZFxuIiwKIAkJCQkJCQkJCWVycik7CiAJCQlyZXR1cm4gZXJyOwogCQl9CiAKLQkJaWYgKGMtPmRvdHUpCisJCWlmIChwOV9pc19wcm90b19kb3R1KGMpKQogCQkJZXJyID0gLWVjb2RlOwogCiAJCWlmICghZXJyIHx8ICFJU19FUlJfVkFMVUUoZXJyKSkKQEAgLTUxNSw3ICs1NTYsNyBAQAogCS8qIG1hcnNoYWxsIHRoZSBkYXRhICovCiAJcDlwZHVfcHJlcGFyZShyZXEtPnRjLCB0YWcsIHR5cGUpOwogCXZhX3N0YXJ0KGFwLCBmbXQpOwotCWVyciA9IHA5cGR1X3Z3cml0ZWYocmVxLT50YywgYy0+ZG90dSwgZm10LCBhcCk7CisJZXJyID0gcDlwZHVfdndyaXRlZihyZXEtPnRjLCBjLT5wcm90b192ZXJzaW9uLCBmbXQsIGFwKTsKIAl2YV9lbmQoYXApOwogCXA5cGR1X2ZpbmFsaXplKHJlcS0+dGMpOwogCkBAIC02MjcsMTQgKzY2OCwzMSBAQAogCWNoYXIgKnZlcnNpb247CiAJaW50IG1zaXplOwogCi0JUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUVkVSU0lPTiBtc2l6ZSAlZCBleHRlbmRlZCAlZFxuIiwKLQkJCQkJCQljLT5tc2l6ZSwgYy0+ZG90dSk7Ci0JcmVxID0gcDlfY2xpZW50X3JwYyhjLCBQOV9UVkVSU0lPTiwgImRzIiwgYy0+bXNpemUsCi0JCQkJYy0+ZG90dSA/ICI5UDIwMDAudSIgOiAiOVAyMDAwIik7CisJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUVkVSU0lPTiBtc2l6ZSAlZCBwcm90b2NvbCAlZFxuIiwKKwkJCQkJCWMtPm1zaXplLCBjLT5wcm90b192ZXJzaW9uKTsKKworCXN3aXRjaCAoYy0+cHJvdG9fdmVyc2lvbikgeworCWNhc2UgcDlfcHJvdG9fMjAxMEw6CisJCXJlcSA9IHA5X2NsaWVudF9ycGMoYywgUDlfVFZFUlNJT04sICJkcyIsCisJCQkJCWMtPm1zaXplLCAiOVAyMDEwLkwiKTsKKwkJYnJlYWs7CisJY2FzZSBwOV9wcm90b18yMDAwdToKKwkJcmVxID0gcDlfY2xpZW50X3JwYyhjLCBQOV9UVkVSU0lPTiwgImRzIiwKKwkJCQkJYy0+bXNpemUsICI5UDIwMDAudSIpOworCQlicmVhazsKKwljYXNlIHA5X3Byb3RvX2xlZ2FjeToKKwkJcmVxID0gcDlfY2xpZW50X3JwYyhjLCBQOV9UVkVSU0lPTiwgImRzIiwKKwkJCQkJYy0+bXNpemUsICI5UDIwMDAiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwogCWlmIChJU19FUlIocmVxKSkKIAkJcmV0dXJuIFBUUl9FUlIocmVxKTsKIAotCWVyciA9IHA5cGR1X3JlYWRmKHJlcS0+cmMsIGMtPmRvdHUsICJkcyIsICZtc2l6ZSwgJnZlcnNpb24pOworCWVyciA9IHA5cGR1X3JlYWRmKHJlcS0+cmMsIGMtPnByb3RvX3ZlcnNpb24sICJkcyIsICZtc2l6ZSwgJnZlcnNpb24pOwogCWlmIChlcnIpIHsKIAkJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgInZlcnNpb24gZXJyb3IgJWRcbiIsIGVycik7CiAJCXA5cGR1X2R1bXAoMSwgcmVxLT5yYyk7CkBAIC02NDIsMTAgKzcwMCwxMiBAQAogCX0KIAogCVA5X0RQUklOVEsoUDlfREVCVUdfOVAsICI8PDwgUlZFUlNJT04gbXNpemUgJWQgJXNcbiIsIG1zaXplLCB2ZXJzaW9uKTsKLQlpZiAoIW1lbWNtcCh2ZXJzaW9uLCAiOVAyMDAwLnUiLCA4KSkKLQkJYy0+ZG90dSA9IDE7Ci0JZWxzZSBpZiAoIW1lbWNtcCh2ZXJzaW9uLCAiOVAyMDAwIiwgNikpCi0JCWMtPmRvdHUgPSAwOworCWlmICghc3RybmNtcCh2ZXJzaW9uLCAiOVAyMDEwLkwiLCA4KSkKKwkJYy0+cHJvdG9fdmVyc2lvbiA9IHA5X3Byb3RvXzIwMTBMOworCWVsc2UgaWYgKCFzdHJuY21wKHZlcnNpb24sICI5UDIwMDAudSIsIDgpKQorCQljLT5wcm90b192ZXJzaW9uID0gcDlfcHJvdG9fMjAwMHU7CisJZWxzZSBpZiAoIXN0cm5jbXAodmVyc2lvbiwgIjlQMjAwMCIsIDYpKQorCQljLT5wcm90b192ZXJzaW9uID0gcDlfcHJvdG9fbGVnYWN5OwogCWVsc2UgewogCQllcnIgPSAtRVJFTU9URUlPOwogCQlnb3RvIGVycm9yOwpAQCAtNzAwLDggKzc2MCw4IEBACiAJCWdvdG8gcHV0X3RyYW5zOwogCX0KIAotCVA5X0RQUklOVEsoUDlfREVCVUdfTVVYLCAiY2xudCAlcCB0cmFucyAlcCBtc2l6ZSAlZCBkb3R1ICVkXG4iLAotCQljbG50LCBjbG50LT50cmFuc19tb2QsIGNsbnQtPm1zaXplLCBjbG50LT5kb3R1KTsKKwlQOV9EUFJJTlRLKFA5X0RFQlVHX01VWCwgImNsbnQgJXAgdHJhbnMgJXAgbXNpemUgJWQgcHJvdG9jb2wgJWRcbiIsCisJCWNsbnQsIGNsbnQtPnRyYW5zX21vZCwgY2xudC0+bXNpemUsIGNsbnQtPnByb3RvX3ZlcnNpb24pOwogCiAJZXJyID0gY2xudC0+dHJhbnNfbW9kLT5jcmVhdGUoY2xudCwgZGV2X25hbWUsIG9wdGlvbnMpOwogCWlmIChlcnIpCkBAIC03ODQsNyArODQ0LDcgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5kb3R1LCAiUSIsICZxaWQpOworCWVyciA9IHA5cGR1X3JlYWRmKHJlcS0+cmMsIGNsbnQtPnByb3RvX3ZlcnNpb24sICJRIiwgJnFpZCk7CiAJaWYgKGVycikgewogCQlwOXBkdV9kdW1wKDEsIHJlcS0+cmMpOwogCQlwOV9mcmVlX3JlcShjbG50LCByZXEpOwpAQCAtODMzLDcgKzg5Myw3IEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JZXJyID0gcDlwZHVfcmVhZGYocmVxLT5yYywgY2xudC0+ZG90dSwgIlEiLCAmcWlkKTsKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5wcm90b192ZXJzaW9uLCAiUSIsICZxaWQpOwogCWlmIChlcnIpIHsKIAkJcDlwZHVfZHVtcCgxLCByZXEtPnJjKTsKIAkJcDlfZnJlZV9yZXEoY2xudCwgcmVxKTsKQEAgLTg5MSw3ICs5NTEsNyBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWVyciA9IHA5cGR1X3JlYWRmKHJlcS0+cmMsIGNsbnQtPmRvdHUsICJSIiwgJm53cWlkcywgJndxaWRzKTsKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5wcm90b192ZXJzaW9uLCAiUiIsICZud3FpZHMsICZ3cWlkcyk7CiAJaWYgKGVycikgewogCQlwOXBkdV9kdW1wKDEsIHJlcS0+cmMpOwogCQlwOV9mcmVlX3JlcShjbG50LCByZXEpOwpAQCAtOTUyLDcgKzEwMTIsNyBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWVyciA9IHA5cGR1X3JlYWRmKHJlcS0+cmMsIGNsbnQtPmRvdHUsICJRZCIsICZxaWQsICZpb3VuaXQpOworCWVyciA9IHA5cGR1X3JlYWRmKHJlcS0+cmMsIGNsbnQtPnByb3RvX3ZlcnNpb24sICJRZCIsICZxaWQsICZpb3VuaXQpOwogCWlmIChlcnIpIHsKIAkJcDlwZHVfZHVtcCgxLCByZXEtPnJjKTsKIAkJZ290byBmcmVlX2FuZF9lcnJvcjsKQEAgLTk5Nyw3ICsxMDU3LDcgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5kb3R1LCAiUWQiLCAmcWlkLCAmaW91bml0KTsKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5wcm90b192ZXJzaW9uLCAiUWQiLCAmcWlkLCAmaW91bml0KTsKIAlpZiAoZXJyKSB7CiAJCXA5cGR1X2R1bXAoMSwgcmVxLT5yYyk7CiAJCWdvdG8gZnJlZV9hbmRfZXJyb3I7CkBAIC0xMDk4LDcgKzExNTgsNyBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWVyciA9IHA5cGR1X3JlYWRmKHJlcS0+cmMsIGNsbnQtPmRvdHUsICJEIiwgJmNvdW50LCAmZGF0YXB0cik7CisJZXJyID0gcDlwZHVfcmVhZGYocmVxLT5yYywgY2xudC0+cHJvdG9fdmVyc2lvbiwgIkQiLCAmY291bnQsICZkYXRhcHRyKTsKIAlpZiAoZXJyKSB7CiAJCXA5cGR1X2R1bXAoMSwgcmVxLT5yYyk7CiAJCWdvdG8gZnJlZV9hbmRfZXJyb3I7CkBAIC0xMTU5LDcgKzEyMTksNyBAQAogCQlnb3RvIGVycm9yOwogCX0KIAotCWVyciA9IHA5cGR1X3JlYWRmKHJlcS0+cmMsIGNsbnQtPmRvdHUsICJkIiwgJmNvdW50KTsKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5wcm90b192ZXJzaW9uLCAiZCIsICZjb3VudCk7CiAJaWYgKGVycikgewogCQlwOXBkdV9kdW1wKDEsIHJlcS0+cmMpOwogCQlnb3RvIGZyZWVfYW5kX2Vycm9yOwpAQCAtMTE5OSw3ICsxMjU5LDcgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5kb3R1LCAid1MiLCAmaWdub3JlZCwgcmV0KTsKKwllcnIgPSBwOXBkdV9yZWFkZihyZXEtPnJjLCBjbG50LT5wcm90b192ZXJzaW9uLCAid1MiLCAmaWdub3JlZCwgcmV0KTsKIAlpZiAoZXJyKSB7CiAJCXA5cGR1X2R1bXAoMSwgcmVxLT5yYyk7CiAJCXA5X2ZyZWVfcmVxKGNsbnQsIHJlcSk7CkBAIC0xMjI2LDcgKzEyODYsNyBAQAogfQogRVhQT1JUX1NZTUJPTChwOV9jbGllbnRfc3RhdCk7CiAKLXN0YXRpYyBpbnQgcDlfY2xpZW50X3N0YXRzaXplKHN0cnVjdCBwOV93c3RhdCAqd3N0LCBpbnQgb3B0aW9uYWwpCitzdGF0aWMgaW50IHA5X2NsaWVudF9zdGF0c2l6ZShzdHJ1Y3QgcDlfd3N0YXQgKndzdCwgaW50IHByb3RvX3ZlcnNpb24pCiB7CiAJaW50IHJldDsKIApAQCAtMTI0NSw3ICsxMzA1LDcgQEAKIAlpZiAod3N0LT5tdWlkKQogCQlyZXQgKz0gc3RybGVuKHdzdC0+bXVpZCk7CiAKLQlpZiAob3B0aW9uYWwpIHsKKwlpZiAocHJvdG9fdmVyc2lvbiA9PSBwOV9wcm90b18yMDAwdSkgewogCQlyZXQgKz0gMis0KzQrNDsJLyogZXh0ZW5zaW9uW3NdIG5fdWlkWzRdIG5fZ2lkWzRdIG5fbXVpZFs0XSAqLwogCQlpZiAod3N0LT5leHRlbnNpb24pCiAJCQlyZXQgKz0gc3RybGVuKHdzdC0+ZXh0ZW5zaW9uKTsKQEAgLTEyNjIsNyArMTMyMiw3IEBACiAKIAllcnIgPSAwOwogCWNsbnQgPSBmaWQtPmNsbnQ7Ci0Jd3N0LT5zaXplID0gcDlfY2xpZW50X3N0YXRzaXplKHdzdCwgY2xudC0+ZG90dSk7CisJd3N0LT5zaXplID0gcDlfY2xpZW50X3N0YXRzaXplKHdzdCwgY2xudC0+cHJvdG9fdmVyc2lvbik7CiAJUDlfRFBSSU5USyhQOV9ERUJVR185UCwgIj4+PiBUV1NUQVQgZmlkICVkXG4iLCBmaWQtPmZpZCk7CiAJUDlfRFBSSU5USyhQOV9ERUJVR185UCwKIAkJIiAgICAgc3o9JXggdHlwZT0leCBkZXY9JXggcWlkPSV4LiVsbHguJXhcbiIKZGlmZiAtLWdpdCBhL25ldC85cC9wcm90b2NvbC5jIGIvbmV0LzlwL3Byb3RvY29sLmMKaW5kZXggZmM3MDE0Ny4uOTRmNWE4ZiAxMDA2NDQKLS0tIGEvbmV0LzlwL3Byb3RvY29sLmMKKysrIGIvbmV0LzlwL3Byb3RvY29sLmMKQEAgLTUyLDcgKzUyLDcgQEAKICNlbmRpZgogCiBzdGF0aWMgaW50Ci1wOXBkdV93cml0ZWYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCAuLi4pOworcDlwZHVfd3JpdGVmKHN0cnVjdCBwOV9mY2FsbCAqcGR1LCBpbnQgcHJvdG9fdmVyc2lvbiwgY29uc3QgY2hhciAqZm10LCAuLi4pOwogCiAjaWZkZWYgQ09ORklHX05FVF85UF9ERUJVRwogdm9pZApAQCAtMTQ0LDcgKzE0NCw4IEBACiAqLwogCiBzdGF0aWMgaW50Ci1wOXBkdV92cmVhZGYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFwKQorcDlwZHVfdnJlYWRmKHN0cnVjdCBwOV9mY2FsbCAqcGR1LCBpbnQgcHJvdG9fdmVyc2lvbiwgY29uc3QgY2hhciAqZm10LAorCXZhX2xpc3QgYXApCiB7CiAJY29uc3QgY2hhciAqcHRyOwogCWludCBlcnJjb2RlID0gMDsKQEAgLTE5NCw3ICsxOTUsOCBAQAogCQkJCWludDE2X3QgbGVuOwogCQkJCWludCBzaXplOwogCi0JCQkJZXJyY29kZSA9IHA5cGR1X3JlYWRmKHBkdSwgb3B0aW9uYWwsICJ3IiwgJmxlbik7CisJCQkJZXJyY29kZSA9IHA5cGR1X3JlYWRmKHBkdSwgcHJvdG9fdmVyc2lvbiwKKwkJCQkJCQkJInciLCAmbGVuKTsKIAkJCQlpZiAoZXJyY29kZSkKIAkJCQkJYnJlYWs7CiAKQEAgLTIxNyw3ICsyMTksNyBAQAogCQkJCXN0cnVjdCBwOV9xaWQgKnFpZCA9CiAJCQkJICAgIHZhX2FyZyhhcCwgc3RydWN0IHA5X3FpZCAqKTsKIAotCQkJCWVycmNvZGUgPSBwOXBkdV9yZWFkZihwZHUsIG9wdGlvbmFsLCAiYmRxIiwKKwkJCQllcnJjb2RlID0gcDlwZHVfcmVhZGYocGR1LCBwcm90b192ZXJzaW9uLCAiYmRxIiwKIAkJCQkJCSAgICAgICZxaWQtPnR5cGUsICZxaWQtPnZlcnNpb24sCiAJCQkJCQkgICAgICAmcWlkLT5wYXRoKTsKIAkJCX0KQEAgLTIzMCw3ICsyMzIsNyBAQAogCQkJCXN0YnVmLT5uX3VpZCA9IHN0YnVmLT5uX2dpZCA9IHN0YnVmLT5uX211aWQgPQogCQkJCQkJCQkJLTE7CiAJCQkJZXJyY29kZSA9Ci0JCQkJICAgIHA5cGR1X3JlYWRmKHBkdSwgb3B0aW9uYWwsCisJCQkJICAgIHA5cGR1X3JlYWRmKHBkdSwgcHJvdG9fdmVyc2lvbiwKIAkJCQkJCSJ3d2RRZGRkcXNzc3M/c2RkZCIsCiAJCQkJCQkmc3RidWYtPnNpemUsICZzdGJ1Zi0+dHlwZSwKIAkJCQkJCSZzdGJ1Zi0+ZGV2LCAmc3RidWYtPnFpZCwKQEAgLTI1MCw3ICsyNTIsNyBAQAogCQkJCXZvaWQgKipkYXRhID0gdmFfYXJnKGFwLCB2b2lkICoqKTsKIAogCQkJCWVycmNvZGUgPQotCQkJCSAgICBwOXBkdV9yZWFkZihwZHUsIG9wdGlvbmFsLCAiZCIsIGNvdW50KTsKKwkJCQkgICAgcDlwZHVfcmVhZGYocGR1LCBwcm90b192ZXJzaW9uLCAiZCIsIGNvdW50KTsKIAkJCQlpZiAoIWVycmNvZGUpIHsKIAkJCQkJKmNvdW50ID0KIAkJCQkJICAgIE1JTigqY291bnQsCkBAIC0yNjMsOCArMjY1LDggQEAKIAkJCQlpbnQxNl90ICpud25hbWUgPSB2YV9hcmcoYXAsIGludDE2X3QgKik7CiAJCQkJY2hhciAqKip3bmFtZXMgPSB2YV9hcmcoYXAsIGNoYXIgKioqKTsKIAotCQkJCWVycmNvZGUgPQotCQkJCSAgICBwOXBkdV9yZWFkZihwZHUsIG9wdGlvbmFsLCAidyIsIG53bmFtZSk7CisJCQkJZXJyY29kZSA9IHA5cGR1X3JlYWRmKHBkdSwgcHJvdG9fdmVyc2lvbiwKKwkJCQkJCQkJInciLCBud25hbWUpOwogCQkJCWlmICghZXJyY29kZSkgewogCQkJCQkqd25hbWVzID0KIAkJCQkJICAgIGttYWxsb2Moc2l6ZW9mKGNoYXIgKikgKiAqbnduYW1lLApAQCAtMjc4LDcgKzI4MCw4IEBACiAKIAkJCQkJZm9yIChpID0gMDsgaSA8ICpud25hbWU7IGkrKykgewogCQkJCQkJZXJyY29kZSA9Ci0JCQkJCQkgICAgcDlwZHVfcmVhZGYocGR1LCBvcHRpb25hbCwKKwkJCQkJCSAgICBwOXBkdV9yZWFkZihwZHUsCisJCQkJCQkJCXByb3RvX3ZlcnNpb24sCiAJCQkJCQkJCSJzIiwKIAkJCQkJCQkJJigqd25hbWVzKVtpXSk7CiAJCQkJCQlpZiAoZXJyY29kZSkKQEAgLTMwNiw3ICszMDksNyBAQAogCQkJCSp3cWlkcyA9IE5VTEw7CiAKIAkJCQllcnJjb2RlID0KLQkJCQkgICAgcDlwZHVfcmVhZGYocGR1LCBvcHRpb25hbCwgInciLCBud3FpZCk7CisJCQkJICAgIHA5cGR1X3JlYWRmKHBkdSwgcHJvdG9fdmVyc2lvbiwgInciLCBud3FpZCk7CiAJCQkJaWYgKCFlcnJjb2RlKSB7CiAJCQkJCSp3cWlkcyA9CiAJCQkJCSAgICBrbWFsbG9jKCpud3FpZCAqCkBAIC0zMjEsNyArMzI0LDggQEAKIAogCQkJCQlmb3IgKGkgPSAwOyBpIDwgKm53cWlkOyBpKyspIHsKIAkJCQkJCWVycmNvZGUgPQotCQkJCQkJICAgIHA5cGR1X3JlYWRmKHBkdSwgb3B0aW9uYWwsCisJCQkJCQkgICAgcDlwZHVfcmVhZGYocGR1LAorCQkJCQkJCQlwcm90b192ZXJzaW9uLAogCQkJCQkJCQkiUSIsCiAJCQkJCQkJCSYoKndxaWRzKVtpXSk7CiAJCQkJCQlpZiAoZXJyY29kZSkKQEAgLTMzNiw3ICszNDAsNyBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgJz8nOgotCQkJaWYgKCFvcHRpb25hbCkKKwkJCWlmIChwcm90b192ZXJzaW9uICE9IHA5X3Byb3RvXzIwMDB1KQogCQkJCXJldHVybiAwOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC0zNTIsNyArMzU2LDggQEAKIH0KIAogaW50Ci1wOXBkdV92d3JpdGVmKHN0cnVjdCBwOV9mY2FsbCAqcGR1LCBpbnQgb3B0aW9uYWwsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3A5cGR1X3Z3cml0ZWYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBwcm90b192ZXJzaW9uLCBjb25zdCBjaGFyICpmbXQsCisJdmFfbGlzdCBhcCkKIHsKIAljb25zdCBjaGFyICpwdHI7CiAJaW50IGVycmNvZGUgPSAwOwpAQCAtMzg5LDcgKzM5NCw4IEBACiAJCQkJaWYgKHNwdHIpCiAJCQkJCWxlbiA9IE1JTihzdHJsZW4oc3B0ciksIFVTSE9SVF9NQVgpOwogCi0JCQkJZXJyY29kZSA9IHA5cGR1X3dyaXRlZihwZHUsIG9wdGlvbmFsLCAidyIsIGxlbik7CisJCQkJZXJyY29kZSA9IHA5cGR1X3dyaXRlZihwZHUsIHByb3RvX3ZlcnNpb24sCisJCQkJCQkJCSJ3IiwgbGVuKTsKIAkJCQlpZiAoIWVycmNvZGUgJiYgcGR1X3dyaXRlKHBkdSwgc3B0ciwgbGVuKSkKIAkJCQkJZXJyY29kZSA9IC1FRkFVTFQ7CiAJCQl9CkBAIC0zOTgsNyArNDA0LDcgQEAKIAkJCQljb25zdCBzdHJ1Y3QgcDlfcWlkICpxaWQgPQogCQkJCSAgICB2YV9hcmcoYXAsIGNvbnN0IHN0cnVjdCBwOV9xaWQgKik7CiAJCQkJZXJyY29kZSA9Ci0JCQkJICAgIHA5cGR1X3dyaXRlZihwZHUsIG9wdGlvbmFsLCAiYmRxIiwKKwkJCQkgICAgcDlwZHVfd3JpdGVmKHBkdSwgcHJvdG9fdmVyc2lvbiwgImJkcSIsCiAJCQkJCQkgcWlkLT50eXBlLCBxaWQtPnZlcnNpb24sCiAJCQkJCQkgcWlkLT5wYXRoKTsKIAkJCX0gYnJlYWs7CkBAIC00MDYsNyArNDEyLDcgQEAKIAkJCQljb25zdCBzdHJ1Y3QgcDlfd3N0YXQgKnN0YnVmID0KIAkJCQkgICAgdmFfYXJnKGFwLCBjb25zdCBzdHJ1Y3QgcDlfd3N0YXQgKik7CiAJCQkJZXJyY29kZSA9Ci0JCQkJICAgIHA5cGR1X3dyaXRlZihwZHUsIG9wdGlvbmFsLAorCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LCBwcm90b192ZXJzaW9uLAogCQkJCQkJICJ3d2RRZGRkcXNzc3M/c2RkZCIsCiAJCQkJCQkgc3RidWYtPnNpemUsIHN0YnVmLT50eXBlLAogCQkJCQkJIHN0YnVmLT5kZXYsICZzdGJ1Zi0+cWlkLApAQCAtNDIxLDggKzQyNyw4IEBACiAJCQkJaW50MzJfdCBjb3VudCA9IHZhX2FyZyhhcCwgaW50MzJfdCk7CiAJCQkJY29uc3Qgdm9pZCAqZGF0YSA9IHZhX2FyZyhhcCwgY29uc3Qgdm9pZCAqKTsKIAotCQkJCWVycmNvZGUgPQotCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwgImQiLCBjb3VudCk7CisJCQkJZXJyY29kZSA9IHA5cGR1X3dyaXRlZihwZHUsIHByb3RvX3ZlcnNpb24sICJkIiwKKwkJCQkJCQkJCWNvdW50KTsKIAkJCQlpZiAoIWVycmNvZGUgJiYgcGR1X3dyaXRlKHBkdSwgZGF0YSwgY291bnQpKQogCQkJCQllcnJjb2RlID0gLUVGQVVMVDsKIAkJCX0KQEAgLTQzMSw4ICs0MzcsOCBAQAogCQkJCWludDMyX3QgY291bnQgPSB2YV9hcmcoYXAsIGludDMyX3QpOwogCQkJCWNvbnN0IGNoYXIgX191c2VyICp1ZGF0YSA9CiAJCQkJCQl2YV9hcmcoYXAsIGNvbnN0IHZvaWQgX191c2VyICopOwotCQkJCWVycmNvZGUgPQotCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwgImQiLCBjb3VudCk7CisJCQkJZXJyY29kZSA9IHA5cGR1X3dyaXRlZihwZHUsIHByb3RvX3ZlcnNpb24sICJkIiwKKwkJCQkJCQkJCWNvdW50KTsKIAkJCQlpZiAoIWVycmNvZGUgJiYgcGR1X3dyaXRlX3UocGR1LCB1ZGF0YSwgY291bnQpKQogCQkJCQllcnJjb2RlID0gLUVGQVVMVDsKIAkJCX0KQEAgLTQ0MSwxNCArNDQ3LDE1IEBACiAJCQkJaW50MTZfdCBud25hbWUgPSB2YV9hcmcoYXAsIGludCk7CiAJCQkJY29uc3QgY2hhciAqKnduYW1lcyA9IHZhX2FyZyhhcCwgY29uc3QgY2hhciAqKik7CiAKLQkJCQllcnJjb2RlID0KLQkJCQkgICAgcDlwZHVfd3JpdGVmKHBkdSwgb3B0aW9uYWwsICJ3IiwgbnduYW1lKTsKKwkJCQllcnJjb2RlID0gcDlwZHVfd3JpdGVmKHBkdSwgcHJvdG9fdmVyc2lvbiwgInciLAorCQkJCQkJCQkJbnduYW1lKTsKIAkJCQlpZiAoIWVycmNvZGUpIHsKIAkJCQkJaW50IGk7CiAKIAkJCQkJZm9yIChpID0gMDsgaSA8IG53bmFtZTsgaSsrKSB7CiAJCQkJCQllcnJjb2RlID0KLQkJCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwKKwkJCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LAorCQkJCQkJCQlwcm90b192ZXJzaW9uLAogCQkJCQkJCQkgInMiLAogCQkJCQkJCQkgd25hbWVzW2ldKTsKIAkJCQkJCWlmIChlcnJjb2RlKQpAQCAtNDYyLDE0ICs0NjksMTUgQEAKIAkJCQlzdHJ1Y3QgcDlfcWlkICp3cWlkcyA9CiAJCQkJICAgIHZhX2FyZyhhcCwgc3RydWN0IHA5X3FpZCAqKTsKIAotCQkJCWVycmNvZGUgPQotCQkJCSAgICBwOXBkdV93cml0ZWYocGR1LCBvcHRpb25hbCwgInciLCBud3FpZCk7CisJCQkJZXJyY29kZSA9IHA5cGR1X3dyaXRlZihwZHUsIHByb3RvX3ZlcnNpb24sICJ3IiwKKwkJCQkJCQkJCW53cWlkKTsKIAkJCQlpZiAoIWVycmNvZGUpIHsKIAkJCQkJaW50IGk7CiAKIAkJCQkJZm9yIChpID0gMDsgaSA8IG53cWlkOyBpKyspIHsKIAkJCQkJCWVycmNvZGUgPQotCQkJCQkJICAgIHA5cGR1X3dyaXRlZihwZHUsIG9wdGlvbmFsLAorCQkJCQkJICAgIHA5cGR1X3dyaXRlZihwZHUsCisJCQkJCQkJCXByb3RvX3ZlcnNpb24sCiAJCQkJCQkJCSAiUSIsCiAJCQkJCQkJCSAmd3FpZHNbaV0pOwogCQkJCQkJaWYgKGVycmNvZGUpCkBAIC00NzksNyArNDg3LDcgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlICc/JzoKLQkJCWlmICghb3B0aW9uYWwpCisJCQlpZiAocHJvdG9fdmVyc2lvbiAhPSBwOV9wcm90b18yMDAwdSkKIAkJCQlyZXR1cm4gMDsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgpAQCAtNDk0LDMyICs1MDIsMzIgQEAKIAlyZXR1cm4gZXJyY29kZTsKIH0KIAotaW50IHA5cGR1X3JlYWRmKHN0cnVjdCBwOV9mY2FsbCAqcGR1LCBpbnQgb3B0aW9uYWwsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoraW50IHA5cGR1X3JlYWRmKHN0cnVjdCBwOV9mY2FsbCAqcGR1LCBpbnQgcHJvdG9fdmVyc2lvbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcDsKIAlpbnQgcmV0OwogCiAJdmFfc3RhcnQoYXAsIGZtdCk7Ci0JcmV0ID0gcDlwZHVfdnJlYWRmKHBkdSwgb3B0aW9uYWwsIGZtdCwgYXApOworCXJldCA9IHA5cGR1X3ZyZWFkZihwZHUsIHByb3RvX3ZlcnNpb24sIGZtdCwgYXApOwogCXZhX2VuZChhcCk7CiAKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50Ci1wOXBkdV93cml0ZWYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCAuLi4pCitwOXBkdV93cml0ZWYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBwcm90b192ZXJzaW9uLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFwOwogCWludCByZXQ7CiAKIAl2YV9zdGFydChhcCwgZm10KTsKLQlyZXQgPSBwOXBkdV92d3JpdGVmKHBkdSwgb3B0aW9uYWwsIGZtdCwgYXApOworCXJldCA9IHA5cGR1X3Z3cml0ZWYocGR1LCBwcm90b192ZXJzaW9uLCBmbXQsIGFwKTsKIAl2YV9lbmQoYXApOwogCiAJcmV0dXJuIHJldDsKIH0KIAotaW50IHA5c3RhdF9yZWFkKGNoYXIgKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHA5X3dzdGF0ICpzdCwgaW50IGRvdHUpCitpbnQgcDlzdGF0X3JlYWQoY2hhciAqYnVmLCBpbnQgbGVuLCBzdHJ1Y3QgcDlfd3N0YXQgKnN0LCBpbnQgcHJvdG9fdmVyc2lvbikKIHsKIAlzdHJ1Y3QgcDlfZmNhbGwgZmFrZV9wZHU7CiAJaW50IHJldDsKQEAgLTUyOSw3ICs1MzcsNyBAQAogCWZha2VfcGR1LnNkYXRhID0gYnVmOwogCWZha2VfcGR1Lm9mZnNldCA9IDA7CiAKLQlyZXQgPSBwOXBkdV9yZWFkZigmZmFrZV9wZHUsIGRvdHUsICJTIiwgc3QpOworCXJldCA9IHA5cGR1X3JlYWRmKCZmYWtlX3BkdSwgcHJvdG9fdmVyc2lvbiwgIlMiLCBzdCk7CiAJaWYgKHJldCkgewogCQlQOV9EUFJJTlRLKFA5X0RFQlVHXzlQLCAiPDw8IHA5c3RhdF9yZWFkIGZhaWxlZDogJWRcbiIsIHJldCk7CiAJCXA5cGR1X2R1bXAoMSwgJmZha2VfcGR1KTsKZGlmZiAtLWdpdCBhL25ldC85cC9wcm90b2NvbC5oIGIvbmV0LzlwL3Byb3RvY29sLmgKaW5kZXggY2NkZTQ2Mi4uMjQzMWMwZiAxMDA2NDQKLS0tIGEvbmV0LzlwL3Byb3RvY29sLmgKKysrIGIvbmV0LzlwL3Byb3RvY29sLmgKQEAgLTI1LDkgKzI1LDkgQEAKICAqCiAgKi8KIAotaW50Ci1wOXBkdV92d3JpdGVmKHN0cnVjdCBwOV9mY2FsbCAqcGR1LCBpbnQgb3B0aW9uYWwsIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCk7Ci1pbnQgcDlwZHVfcmVhZGYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBvcHRpb25hbCwgY29uc3QgY2hhciAqZm10LCAuLi4pOworaW50IHA5cGR1X3Z3cml0ZWYoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludCBwcm90b192ZXJzaW9uLCBjb25zdCBjaGFyICpmbXQsCisJCQkJCQkJCXZhX2xpc3QgYXApOworaW50IHA5cGR1X3JlYWRmKHN0cnVjdCBwOV9mY2FsbCAqcGR1LCBpbnQgcHJvdG9fdmVyc2lvbiwgY29uc3QgY2hhciAqZm10LCAuLi4pOwogaW50IHA5cGR1X3ByZXBhcmUoc3RydWN0IHA5X2ZjYWxsICpwZHUsIGludDE2X3QgdGFnLCBpbnQ4X3QgdHlwZSk7CiBpbnQgcDlwZHVfZmluYWxpemUoc3RydWN0IHA5X2ZjYWxsICpwZHUpOwogdm9pZCBwOXBkdV9kdW1wKGludCwgc3RydWN0IHA5X2ZjYWxsICopOwpkaWZmIC0tZ2l0IGEvbmV0LzlwL3RyYW5zX3ZpcnRpby5jIGIvbmV0LzlwL3RyYW5zX3ZpcnRpby5jCmluZGV4IGNiNTBmNGEuLjBhYWVkNDggMTAwNjQ0Ci0tLSBhL25ldC85cC90cmFuc192aXJ0aW8uYworKysgYi9uZXQvOXAvdHJhbnNfdmlydGlvLmMKQEAgLTQ5LDggKzQ5LDYgQEAKIAogLyogYSBzaW5nbGUgbXV0ZXggdG8gbWFuYWdlIGNoYW5uZWwgaW5pdGlhbGl6YXRpb24gYW5kIGF0dGFjaG1lbnQgKi8KIHN0YXRpYyBERUZJTkVfTVVURVgodmlydGlvXzlwX2xvY2spOwotLyogZ2xvYmFsIHdoaWNoIHRyYWNrcyBoaWdoZXN0IGluaXRpYWxpemVkIGNoYW5uZWwgKi8KLXN0YXRpYyBpbnQgY2hhbl9pbmRleDsKIAogLyoqCiAgKiBzdHJ1Y3QgdmlydGlvX2NoYW4gLSBwZXItaW5zdGFuY2UgdHJhbnNwb3J0IGluZm9ybWF0aW9uCkBAIC02OCw4ICs2Niw3IEBACiAgKgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgdmlydGlvX2NoYW4gewotCWJvb2wgaW5pdGlhbGl6ZWQ7CitzdHJ1Y3QgdmlydGlvX2NoYW4gewogCWJvb2wgaW51c2U7CiAKIAlzcGlubG9ja190IGxvY2s7CkBAIC04MCw3ICs3NywxMSBAQAogCiAJLyogU2NhdHRlcmxpc3Q6IGNhbiBiZSB0b28gYmlnIGZvciBzdGFjay4gKi8KIAlzdHJ1Y3Qgc2NhdHRlcmxpc3Qgc2dbVklSVFFVRVVFX05VTV07Ci19IGNoYW5uZWxzW01BWF85UF9DSEFOXTsKKworCXN0cnVjdCBsaXN0X2hlYWQgY2hhbl9saXN0OworfTsKKworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgdmlydGlvX2NoYW5fbGlzdDsKIAogLyogSG93IG1hbnkgYnl0ZXMgbGVmdCBpbiB0aGlzIHBhZ2UuICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHJlc3Rfb2ZfcGFnZSh2b2lkICpkYXRhKQpAQCAtMjE3LDkgKzIxOCw3IEBACiAgKiBwOV92aXJ0aW9fcHJvYmUgLSBwcm9iZSBmb3IgZXhpc3RlbmNlIG9mIDlQIHZpcnRpbyBjaGFubmVscwogICogQHZkZXY6IHZpcnRpbyBkZXZpY2UgdG8gcHJvYmUKICAqCi0gKiBUaGlzIHByb2JlcyBmb3IgZXhpc3RpbmcgdmlydGlvIGNoYW5uZWxzLiAgQXQgcHJlc2VudCBvbmx5Ci0gKiBhIHNpbmdsZSBjaGFubmVsIGlzIGluIHVzZSwgc28gaW4gdGhlIGZ1dHVyZSBtb3JlIHdvcmsgbWF5IG5lZWQKLSAqIHRvIGJlIGRvbmUgaGVyZS4KKyAqIFRoaXMgcHJvYmVzIGZvciBleGlzdGluZyB2aXJ0aW8gY2hhbm5lbHMuCiAgKgogICovCiAKQEAgLTIyNywxNiArMjI2LDEwIEBACiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgdmlydGlvX2NoYW4gKmNoYW47Ci0JaW50IGluZGV4OwogCi0JbXV0ZXhfbG9jaygmdmlydGlvXzlwX2xvY2spOwotCWluZGV4ID0gY2hhbl9pbmRleCsrOwotCWNoYW4gPSAmY2hhbm5lbHNbaW5kZXhdOwotCW11dGV4X3VubG9jaygmdmlydGlvXzlwX2xvY2spOwotCi0JaWYgKGNoYW5faW5kZXggPiBNQVhfOVBfQ0hBTikgewotCQlwcmludGsoS0VSTl9FUlIgIjlwOiB2aXJ0aW86IE1heGltdW0gY2hhbm5lbHMgZXhjZWVkZWRcbiIpOwotCQlCVUcoKTsKKwljaGFuID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZpcnRpb19jaGFuKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFjaGFuKSB7CisJCXByaW50ayhLRVJOX0VSUiAiOXA6IEZhaWxlZCB0byBhbGxvY2F0ZSB2aXJ0aW8gOVAgY2hhbm5lbFxuIik7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZmFpbDsKIAl9CkBAIC0yNTUsMTUgKzI0OCwxNSBAQAogCXNnX2luaXRfdGFibGUoY2hhbi0+c2csIFZJUlRRVUVVRV9OVU0pOwogCiAJY2hhbi0+aW51c2UgPSBmYWxzZTsKLQljaGFuLT5pbml0aWFsaXplZCA9IHRydWU7CisJbXV0ZXhfbG9jaygmdmlydGlvXzlwX2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmNoYW4tPmNoYW5fbGlzdCwgJnZpcnRpb19jaGFuX2xpc3QpOworCW11dGV4X3VubG9jaygmdmlydGlvXzlwX2xvY2spOwogCXJldHVybiAwOwogCiBvdXRfZnJlZV92cToKIAl2ZGV2LT5jb25maWctPmRlbF92cXModmRldik7CisJa2ZyZWUoY2hhbik7CiBmYWlsOgotCW11dGV4X2xvY2soJnZpcnRpb185cF9sb2NrKTsKLQljaGFuX2luZGV4LS07Ci0JbXV0ZXhfdW5sb2NrKCZ2aXJ0aW9fOXBfbG9jayk7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjgwLDM1ICsyNzMsMzEgQEAKICAqIFdlIHVzZSBhIHNpbXBsZSByZWZlcmVuY2UgY291bnQgbWVjaGFuaXNtIHRvIGVuc3VyZSB0aGF0IG9ubHkgYSBzaW5nbGUKICAqIG1vdW50IGhhcyBhIGNoYW5uZWwgb3BlbiBhdCBhIHRpbWUuCiAgKgotICogQnVnczogZG9lc24ndCBhbGxvdyBpZGVudGlmaWNhdGlvbiBvZiBhIHNwZWNpZmljIGNoYW5uZWwKLSAqIHRvIGFsbG9jYXRlLCBjaGFubmVscyBhcmUgYWxsb2NhdGVkIHNlcXVlbnRpYWxseS4gVGhpcyB3YXMKLSAqIGEgcHJhZ21hdGljIGRlY2lzaW9uIHRvIGdldCB0aGluZ3Mgcm9sbGluZywgYnV0IGlkZWFsbHkgc29tZQotICogd2F5IG9mIGlkZW50aWZ5aW5nIHRoZSBjaGFubmVsIHRvIGF0dGFjaCB0byB3b3VsZCBiZSBuaWNlCi0gKiBpZiB3ZSBhcmUgZ29pbmcgdG8gc3VwcG9ydCBtdWx0aXBsZSBjaGFubmVscy4KLSAqCiAgKi8KIAogc3RhdGljIGludAogcDlfdmlydGlvX2NyZWF0ZShzdHJ1Y3QgcDlfY2xpZW50ICpjbGllbnQsIGNvbnN0IGNoYXIgKmRldm5hbWUsIGNoYXIgKmFyZ3MpCiB7Ci0Jc3RydWN0IHZpcnRpb19jaGFuICpjaGFuID0gY2hhbm5lbHM7Ci0JaW50IGluZGV4ID0gMDsKKwlzdHJ1Y3QgdmlydGlvX2NoYW4gKmNoYW47CisJaW50IHJldCA9IC1FTk9FTlQ7CisJaW50IGZvdW5kID0gMDsKIAogCW11dGV4X2xvY2soJnZpcnRpb185cF9sb2NrKTsKLQl3aGlsZSAoaW5kZXggPCBNQVhfOVBfQ0hBTikgewotCQlpZiAoY2hhbi0+aW5pdGlhbGl6ZWQgJiYgIWNoYW4tPmludXNlKSB7Ci0JCQljaGFuLT5pbnVzZSA9IHRydWU7Ci0JCQlicmVhazsKLQkJfSBlbHNlIHsKLQkJCWluZGV4Kys7Ci0JCQljaGFuID0gJmNoYW5uZWxzW2luZGV4XTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNoYW4sICZ2aXJ0aW9fY2hhbl9saXN0LCBjaGFuX2xpc3QpIHsKKwkJaWYgKCFzdHJjbXAoZGV2bmFtZSwgZGV2X25hbWUoJmNoYW4tPnZkZXYtPmRldikpKSB7CisJCQlpZiAoIWNoYW4tPmludXNlKSB7CisJCQkJY2hhbi0+aW51c2UgPSB0cnVlOworCQkJCWZvdW5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXJldCA9IC1FQlVTWTsKIAkJfQogCX0KIAltdXRleF91bmxvY2soJnZpcnRpb185cF9sb2NrKTsKIAotCWlmIChpbmRleCA+PSBNQVhfOVBfQ0hBTikgeworCWlmICghZm91bmQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICI5cDogbm8gY2hhbm5lbHMgYXZhaWxhYmxlXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCXJldHVybiByZXQ7CiAJfQogCiAJY2xpZW50LT50cmFucyA9ICh2b2lkICopY2hhbjsKQEAgLTMyOSwxMSArMzE4LDEzIEBACiAJc3RydWN0IHZpcnRpb19jaGFuICpjaGFuID0gdmRldi0+cHJpdjsKIAogCUJVR19PTihjaGFuLT5pbnVzZSk7CisJdmRldi0+Y29uZmlnLT5kZWxfdnFzKHZkZXYpOwogCi0JaWYgKGNoYW4tPmluaXRpYWxpemVkKSB7Ci0JCXZkZXYtPmNvbmZpZy0+ZGVsX3Zxcyh2ZGV2KTsKLQkJY2hhbi0+aW5pdGlhbGl6ZWQgPSBmYWxzZTsKLQl9CisJbXV0ZXhfbG9jaygmdmlydGlvXzlwX2xvY2spOworCWxpc3RfZGVsKCZjaGFuLT5jaGFuX2xpc3QpOworCW11dGV4X3VubG9jaygmdmlydGlvXzlwX2xvY2spOworCWtmcmVlKGNoYW4pOworCiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdmlydGlvX2RldmljZV9pZCBpZF90YWJsZVtdID0gewpAQCAtMzY0LDEwICszNTUsNyBAQAogLyogVGhlIHN0YW5kYXJkIGluaXQgZnVuY3Rpb24gKi8KIHN0YXRpYyBpbnQgX19pbml0IHA5X3ZpcnRpb19pbml0KHZvaWQpCiB7Ci0JaW50IGNvdW50OwotCi0JZm9yIChjb3VudCA9IDA7IGNvdW50IDwgTUFYXzlQX0NIQU47IGNvdW50KyspCi0JCWNoYW5uZWxzW2NvdW50XS5pbml0aWFsaXplZCA9IGZhbHNlOworCUlOSVRfTElTVF9IRUFEKCZ2aXJ0aW9fY2hhbl9saXN0KTsKIAogCXY5ZnNfcmVnaXN0ZXJfdHJhbnMoJnA5X3ZpcnRpb190cmFucyk7CiAJcmV0dXJuIHJlZ2lzdGVyX3ZpcnRpb19kcml2ZXIoJnA5X3ZpcnRpb19kcnYpOwpkaWZmIC0tZ2l0IGEvbmV0L2FwcGxldGFsay9hdGFsa19wcm9jLmMgYi9uZXQvYXBwbGV0YWxrL2F0YWxrX3Byb2MuYwppbmRleCA4MGNhYWQxLi42ZWYwZTc2IDEwMDY0NAotLS0gYS9uZXQvYXBwbGV0YWxrL2F0YWxrX3Byb2MuYworKysgYi9uZXQvYXBwbGV0YWxrL2F0YWxrX3Byb2MuYwpAQCAtMTQ0LDQwICsxNDQsMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIF9faW5saW5lX18gc3RydWN0IHNvY2sgKmF0YWxrX2dldF9zb2NrZXRfaWR4KGxvZmZfdCBwb3MpCi17Ci0Jc3RydWN0IHNvY2sgKnM7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0KLQlza19mb3JfZWFjaChzLCBub2RlLCAmYXRhbGtfc29ja2V0cykKLQkJaWYgKCFwb3MtLSkKLQkJCWdvdG8gZm91bmQ7Ci0JcyA9IE5VTEw7Ci1mb3VuZDoKLQlyZXR1cm4gczsKLX0KLQogc3RhdGljIHZvaWQgKmF0YWxrX3NlcV9zb2NrZXRfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogCV9fYWNxdWlyZXMoYXRhbGtfc29ja2V0c19sb2NrKQogewotCWxvZmZfdCBsID0gKnBvczsKLQogCXJlYWRfbG9ja19iaCgmYXRhbGtfc29ja2V0c19sb2NrKTsKLQlyZXR1cm4gbCA/IGF0YWxrX2dldF9zb2NrZXRfaWR4KC0tbCkgOiBTRVFfU1RBUlRfVE9LRU47CisJcmV0dXJuIHNlcV9obGlzdF9zdGFydF9oZWFkKCZhdGFsa19zb2NrZXRzLCAqcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgKmF0YWxrX3NlcV9zb2NrZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IHNvY2sgKmk7Ci0KLQkrKypwb3M7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7Ci0JCWkgPSBza19oZWFkKCZhdGFsa19zb2NrZXRzKTsKLQkJZ290byBvdXQ7Ci0JfQotCWkgPSBza19uZXh0KHYpOwotb3V0OgotCXJldHVybiBpOworCXJldHVybiBzZXFfaGxpc3RfbmV4dCh2LCAmYXRhbGtfc29ja2V0cywgcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgYXRhbGtfc2VxX3NvY2tldF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpAQCAtMTk3LDcgKzE3Myw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCXMgPSB2OworCXMgPSBza19lbnRyeSh2KTsKIAlhdCA9IGF0X3NrKHMpOwogCiAJc2VxX3ByaW50ZihzZXEsICIlMDJYICAgJTA0WDolMDJYOiUwMlggICUwNFg6JTAyWDolMDJYICAlMDhYOiUwOFggIgpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9hZGRyLmMgYi9uZXQvYXRtL2FkZHIuYwppbmRleCA4MmU4NWFiLi5jZjNhZThiIDEwMDY0NAotLS0gYS9uZXQvYXRtL2FkZHIuYworKysgYi9uZXQvYXRtL2FkZHIuYwpAQCAtNCw3ICs0LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bWRldi5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaW5jbHVkZSAic2lnbmFsaW5nLmgiCiAjaW5jbHVkZSAiYWRkci5oIgpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9hdG1fbWlzYy5jIGIvbmV0L2F0bS9hdG1fbWlzYy5jCmluZGV4IDAyY2M3ZTcuLmZjNjM1MjYgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vYXRtX21pc2MuYworKysgYi9uZXQvYXRtL2F0bV9taXNjLmMKQEAgLTIsMzcgKzIsMzUgQEAKIAogLyogV3JpdHRlbiAxOTk1LTIwMDAgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIElDQSAqLwogCi0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9hdG0uaD4KICNpbmNsdWRlIDxsaW51eC9hdG1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9zb25ldC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9lcnJuby5oPgogCi0KLWludCBhdG1fY2hhcmdlKHN0cnVjdCBhdG1fdmNjICp2Y2MsaW50IHRydWVzaXplKQoraW50IGF0bV9jaGFyZ2Uoc3RydWN0IGF0bV92Y2MgKnZjYywgaW50IHRydWVzaXplKQogewotCWF0bV9mb3JjZV9jaGFyZ2UodmNjLHRydWVzaXplKTsKKwlhdG1fZm9yY2VfY2hhcmdlKHZjYywgdHJ1ZXNpemUpOwogCWlmIChhdG9taWNfcmVhZCgmc2tfYXRtKHZjYyktPnNrX3JtZW1fYWxsb2MpIDw9IHNrX2F0bSh2Y2MpLT5za19yY3ZidWYpCiAJCXJldHVybiAxOwotCWF0bV9yZXR1cm4odmNjLHRydWVzaXplKTsKKwlhdG1fcmV0dXJuKHZjYywgdHJ1ZXNpemUpOwogCWF0b21pY19pbmMoJnZjYy0+c3RhdHMtPnJ4X2Ryb3ApOwogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTChhdG1fY2hhcmdlKTsKIAotCi1zdHJ1Y3Qgc2tfYnVmZiAqYXRtX2FsbG9jX2NoYXJnZShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLGludCBwZHVfc2l6ZSwKLSAgICBnZnBfdCBnZnBfZmxhZ3MpCitzdHJ1Y3Qgc2tfYnVmZiAqYXRtX2FsbG9jX2NoYXJnZShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgcGR1X3NpemUsCisJCQkJIGdmcF90IGdmcF9mbGFncykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBza19hdG0odmNjKTsKIAlpbnQgZ3Vlc3MgPSBhdG1fZ3Vlc3NfcGR1MnRydWVzaXplKHBkdV9zaXplKTsKIAotCWF0bV9mb3JjZV9jaGFyZ2UodmNjLGd1ZXNzKTsKKwlhdG1fZm9yY2VfY2hhcmdlKHZjYywgZ3Vlc3MpOwogCWlmIChhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpIDw9IHNrLT5za19yY3ZidWYpIHsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IGFsbG9jX3NrYihwZHVfc2l6ZSxnZnBfZmxhZ3MpOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gYWxsb2Nfc2tiKHBkdV9zaXplLCBnZnBfZmxhZ3MpOwogCiAJCWlmIChza2IpIHsKIAkJCWF0b21pY19hZGQoc2tiLT50cnVlc2l6ZS1ndWVzcywKQEAgLTQwLDEwICszOCwxMSBAQAogCQkJcmV0dXJuIHNrYjsKIAkJfQogCX0KLQlhdG1fcmV0dXJuKHZjYyxndWVzcyk7CisJYXRtX3JldHVybih2Y2MsIGd1ZXNzKTsKIAlhdG9taWNfaW5jKCZ2Y2MtPnN0YXRzLT5yeF9kcm9wKTsKIAlyZXR1cm4gTlVMTDsKIH0KK0VYUE9SVF9TWU1CT0woYXRtX2FsbG9jX2NoYXJnZSk7CiAKIAogLyoKQEAgLTczLDcgKzcyLDYgQEAKICAqCSBlbHNlICoKICAqLwogCi0KIGludCBhdG1fcGNyX2dvYWwoY29uc3Qgc3RydWN0IGF0bV90cmFmcHJtICp0cCkKIHsKIAlpZiAodHAtPnBjciAmJiB0cC0+cGNyICE9IEFUTV9NQVhfUENSKQpAQCAtODQsMjYgKzgyLDIwIEBACiAJCXJldHVybiAtdHAtPm1heF9wY3I7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGF0bV9wY3JfZ29hbCk7CiAKLQotdm9pZCBzb25ldF9jb3B5X3N0YXRzKHN0cnVjdCBrX3NvbmV0X3N0YXRzICpmcm9tLHN0cnVjdCBzb25ldF9zdGF0cyAqdG8pCit2b2lkIHNvbmV0X2NvcHlfc3RhdHMoc3RydWN0IGtfc29uZXRfc3RhdHMgKmZyb20sIHN0cnVjdCBzb25ldF9zdGF0cyAqdG8pCiB7CiAjZGVmaW5lIF9fSEFORExFX0lURU0oaSkgdG8tPmkgPSBhdG9taWNfcmVhZCgmZnJvbS0+aSkKIAlfX1NPTkVUX0lURU1TCiAjdW5kZWYgX19IQU5ETEVfSVRFTQogfQorRVhQT1JUX1NZTUJPTChzb25ldF9jb3B5X3N0YXRzKTsKIAotCi12b2lkIHNvbmV0X3N1YnRyYWN0X3N0YXRzKHN0cnVjdCBrX3NvbmV0X3N0YXRzICpmcm9tLHN0cnVjdCBzb25ldF9zdGF0cyAqdG8pCit2b2lkIHNvbmV0X3N1YnRyYWN0X3N0YXRzKHN0cnVjdCBrX3NvbmV0X3N0YXRzICpmcm9tLCBzdHJ1Y3Qgc29uZXRfc3RhdHMgKnRvKQogewotI2RlZmluZSBfX0hBTkRMRV9JVEVNKGkpIGF0b21pY19zdWIodG8tPmksJmZyb20tPmkpCisjZGVmaW5lIF9fSEFORExFX0lURU0oaSkgYXRvbWljX3N1Yih0by0+aSwgJmZyb20tPmkpCiAJX19TT05FVF9JVEVNUwogI3VuZGVmIF9fSEFORExFX0lURU0KIH0KLQotCi1FWFBPUlRfU1lNQk9MKGF0bV9jaGFyZ2UpOwotRVhQT1JUX1NZTUJPTChhdG1fYWxsb2NfY2hhcmdlKTsKLUVYUE9SVF9TWU1CT0woYXRtX3Bjcl9nb2FsKTsKLUVYUE9SVF9TWU1CT0woc29uZXRfY29weV9zdGF0cyk7CiBFWFBPUlRfU1lNQk9MKHNvbmV0X3N1YnRyYWN0X3N0YXRzKTsKZGlmZiAtLWdpdCBhL25ldC9hdG0vYXRtX3N5c2ZzLmMgYi9uZXQvYXRtL2F0bV9zeXNmcy5jCmluZGV4IGI1Njc0ZGMuLmY2OTNiNzggMTAwNjQ0Ci0tLSBhL25ldC9hdG0vYXRtX3N5c2ZzLmMKKysrIGIvbmV0L2F0bS9hdG1fc3lzZnMuYwpAQCAtNDIsMTMgKzQyLDE0IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYWRldi0+bG9jaywgZmxhZ3MpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoYWFkZHIsICZhZGV2LT5sb2NhbCwgZW50cnkpIHsKLQkJZm9yKGkgPSAwLCBqID0gMDsgaSA8IEFUTV9FU0FfTEVOOyArK2ksICsraikgeworCQlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IEFUTV9FU0FfTEVOOyArK2ksICsraikgewogCQkJaWYgKGogPT0gKmZtdCkgewogCQkJCXBvcyArPSBzcHJpbnRmKHBvcywgIi4iKTsKIAkJCQkrK2ZtdDsKIAkJCQlqID0gMDsKIAkJCX0KLQkJCXBvcyArPSBzcHJpbnRmKHBvcywgIiUwMngiLCBhYWRkci0+YWRkci5zYXNfYWRkci5wcnZbaV0pOworCQkJcG9zICs9IHNwcmludGYocG9zLCAiJTAyeCIsCisJCQkJICAgICAgIGFhZGRyLT5hZGRyLnNhc19hZGRyLnBydltpXSk7CiAJCX0KIAkJcG9zICs9IHNwcmludGYocG9zLCAiXG4iKTsKIAl9CkBAIC03OCwxNyArNzksMTcgQEAKIAogCS8qIHNob3cgdGhlIGxpbmsgcmF0ZSwgbm90IHRoZSBkYXRhIHJhdGUgKi8KIAlzd2l0Y2ggKGFkZXYtPmxpbmtfcmF0ZSkgewotCQljYXNlIEFUTV9PQzNfUENSOgotCQkJbGlua19yYXRlID0gMTU1NTIwMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVRNX09DMTJfUENSOgotCQkJbGlua19yYXRlID0gNjIyMDgwMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVRNXzI1X1BDUjoKLQkJCWxpbmtfcmF0ZSA9IDI1NjAwMDAwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlsaW5rX3JhdGUgPSBhZGV2LT5saW5rX3JhdGUgKiA4ICogNTM7CisJY2FzZSBBVE1fT0MzX1BDUjoKKwkJbGlua19yYXRlID0gMTU1NTIwMDAwOworCQlicmVhazsKKwljYXNlIEFUTV9PQzEyX1BDUjoKKwkJbGlua19yYXRlID0gNjIyMDgwMDAwOworCQlicmVhazsKKwljYXNlIEFUTV8yNV9QQ1I6CisJCWxpbmtfcmF0ZSA9IDI1NjAwMDAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlsaW5rX3JhdGUgPSBhZGV2LT5saW5rX3JhdGUgKiA4ICogNTM7CiAJfQogCXBvcyArPSBzcHJpbnRmKHBvcywgIiVkXG4iLCBsaW5rX3JhdGUpOwogCmRpZmYgLS1naXQgYS9uZXQvYXRtL2JyMjY4NC5jIGIvbmV0L2F0bS9icjI2ODQuYwppbmRleCBjOTIzMGMzLi40ZDY0ZDg3IDEwMDY0NAotLS0gYS9uZXQvYXRtL2JyMjY4NC5jCisrKyBiL25ldC9hdG0vYnIyNjg0LmMKQEAgLTYsNiArNiw4IEBACiAgKiAgICAgICAgICBFcmljIEtpbnppZSwgMjAwNi0yMDA3LCBVUyBOYXZhbCBSZXNlYXJjaCBMYWJvcmF0b3J5CiAgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiVzOiAiIGZtdCwgX19mdW5jX18KKwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTE1LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bmV0L2FycC5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bWRldi5oPgpAQCAtMjYsMjAgKzI4LDE0IEBACiAKICNpbmNsdWRlICJjb21tb24uaCIKIAotI2lmZGVmIFNLQl9ERUJVRwogc3RhdGljIHZvaWQgc2tiX2RlYnVnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCiB7CisjaWZkZWYgU0tCX0RFQlVHCiAjZGVmaW5lIE5VTTJQUklOVCA1MAotCWNoYXIgYnVmW05VTTJQUklOVCAqIDMgKyAxXTsJLyogMyBjaGFycyBwZXIgYnl0ZSAqLwotCWludCBpID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgc2tiLT5sZW4gJiYgaSA8IE5VTTJQUklOVDsgaSsrKSB7Ci0JCXNwcmludGYoYnVmICsgaSAqIDMsICIlMi4yeCAiLCAweGZmICYgc2tiLT5kYXRhW2ldKTsKLQl9Ci0JcHJpbnRrKEtFUk5fREVCVUcgImJyMjY4NDogc2tiOiAlc1xuIiwgYnVmKTsKLX0KLSNlbHNlCi0jZGVmaW5lIHNrYl9kZWJ1Zyhza2IpCWRvIHt9IHdoaWxlICgwKQorCXByaW50X2hleF9kdW1wKEtFUk5fREVCVUcsICJicjI2ODQ6IHNrYjogIiwgRFVNUF9PRkZTRVQsCisJCSAgICAgICAxNiwgMSwgc2tiLT5kYXRhLCBtaW4oTlVNMlBSSU5ULCBza2ItPmxlbiksIHRydWUpOwogI2VuZGlmCit9CiAKICNkZWZpbmUgQlIyNjg0X0VUSEVSVFlQRV9MRU4JMgogI2RlZmluZSBCUjI2ODRfUEFEX0xFTgkJMgpAQCAtNjgsNyArNjQsNyBAQAogCXN0cnVjdCBhdG1fdmNjICphdG12Y2M7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldmljZTsKIAkvKiBrZWVwIG9sZCBwdXNoLCBwb3AgZnVuY3Rpb25zIGZvciBjaGFpbmluZyAqLwotCXZvaWQgKCpvbGRfcHVzaCkgKHN0cnVjdCBhdG1fdmNjICogdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqIHNrYik7CisJdm9pZCAoKm9sZF9wdXNoKShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAl2b2lkICgqb2xkX3BvcCkoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAJZW51bSBicjI2ODRfZW5jYXBzIGVuY2FwczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGJydmNjczsKQEAgLTE0OCw3ICsxNDQsNyBAQAogCXN0cnVjdCBicjI2ODRfdmNjICpicnZjYyA9IEJSMjY4NF9WQ0ModmNjKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IHNrYi0+ZGV2OwogCi0JcHJfZGVidWcoImJyMjY4NF9wb3AodmNjICVwIDsgbmV0X2RldiAlcCApXG4iLCB2Y2MsIG5ldF9kZXYpOworCXByX2RlYnVnKCIodmNjICVwIDsgbmV0X2RldiAlcCApXG4iLCB2Y2MsIG5ldF9kZXYpOwogCWJydmNjLT5vbGRfcG9wKHZjYywgc2tiKTsKIAogCWlmICghbmV0X2RldikKQEAgLTI0NCw3ICsyNDAsNyBAQAogCXN0cnVjdCBicjI2ODRfZGV2ICpicmRldiA9IEJSUFJJVihkZXYpOwogCXN0cnVjdCBicjI2ODRfdmNjICpicnZjYzsKIAotCXByX2RlYnVnKCJicjI2ODRfc3RhcnRfeG1pdCwgc2tiX2RzdChza2IpPSVwXG4iLCBza2JfZHN0KHNrYikpOworCXByX2RlYnVnKCJza2JfZHN0KHNrYik9JXBcbiIsIHNrYl9kc3Qoc2tiKSk7CiAJcmVhZF9sb2NrKCZkZXZzX2xvY2spOwogCWJydmNjID0gcGlja19vdXRnb2luZ192Y2Moc2tiLCBicmRldik7CiAJaWYgKGJydmNjID09IE5VTEwpIHsKQEAgLTMwMCw3ICsyOTYsOCBAQAogCQlzdHJ1Y3QgYnIyNjg0X2RldiAqYnJkZXY7CiAJCXJlYWRfbG9jaygmZGV2c19sb2NrKTsKIAkJYnJkZXYgPSBCUlBSSVYoYnIyNjg0X2ZpbmRfZGV2KCZmcy5pZnNwZWMpKTsKLQkJaWYgKGJyZGV2ID09IE5VTEwgfHwgbGlzdF9lbXB0eSgmYnJkZXYtPmJydmNjcykgfHwgYnJkZXYtPmJydmNjcy5uZXh0ICE9IGJyZGV2LT5icnZjY3MucHJldikJLyogPjEgVkNDICovCisJCWlmIChicmRldiA9PSBOVUxMIHx8IGxpc3RfZW1wdHkoJmJyZGV2LT5icnZjY3MpIHx8CisJCSAgICBicmRldi0+YnJ2Y2NzLm5leHQgIT0gYnJkZXYtPmJydmNjcy5wcmV2KQkvKiA+MSBWQ0MgKi8KIAkJCWJydmNjID0gTlVMTDsKIAkJZWxzZQogCQkJYnJ2Y2MgPSBsaXN0X2VudHJ5X2JydmNjKGJyZGV2LT5icnZjY3MubmV4dCk7CkBAIC0zNTIsNyArMzQ5LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2RldiA9IGJydmNjLT5kZXZpY2U7CiAJc3RydWN0IGJyMjY4NF9kZXYgKmJyZGV2ID0gQlJQUklWKG5ldF9kZXYpOwogCi0JcHJfZGVidWcoImJyMjY4NF9wdXNoXG4iKTsKKwlwcl9kZWJ1ZygiXG4iKTsKIAogCWlmICh1bmxpa2VseShza2IgPT0gTlVMTCkpIHsKIAkJLyogc2tiPT1OVUxMIG1lYW5zIFZDQyBpcyBiZWluZyBkZXN0cm95ZWQgKi8KQEAgLTM3NiwyOSArMzczLDI1IEBACiAJCQlfX3NrYl90cmltKHNrYiwgc2tiLT5sZW4gLSA0KTsKIAogCQkvKiBhY2NlcHQgcGFja2V0cyB0aGF0IGhhdmUgImlwdls0Nl0iIGluIHRoZSBzbmFwIGhlYWRlciAqLwotCQlpZiAoKHNrYi0+bGVuID49IChzaXplb2YobGxjX291aV9pcHY0KSkpCi0JCSAgICAmJgotCQkgICAgKG1lbWNtcAotCQkgICAgIChza2ItPmRhdGEsIGxsY19vdWlfaXB2NCwKLQkJICAgICAgc2l6ZW9mKGxsY19vdWlfaXB2NCkgLSBCUjI2ODRfRVRIRVJUWVBFX0xFTikgPT0gMCkpIHsKLQkJCWlmIChtZW1jbXAKLQkJCSAgICAoc2tiLT5kYXRhICsgNiwgZXRoZXJ0eXBlX2lwdjYsCi0JCQkgICAgIHNpemVvZihldGhlcnR5cGVfaXB2NikpID09IDApCisJCWlmICgoc2tiLT5sZW4gPj0gKHNpemVvZihsbGNfb3VpX2lwdjQpKSkgJiYKKwkJICAgIChtZW1jbXAoc2tiLT5kYXRhLCBsbGNfb3VpX2lwdjQsCisJCQkgICAgc2l6ZW9mKGxsY19vdWlfaXB2NCkgLSBCUjI2ODRfRVRIRVJUWVBFX0xFTikgPT0gMCkpIHsKKwkJCWlmIChtZW1jbXAoc2tiLT5kYXRhICsgNiwgZXRoZXJ0eXBlX2lwdjYsCisJCQkJICAgc2l6ZW9mKGV0aGVydHlwZV9pcHY2KSkgPT0gMCkKIAkJCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVBWNik7Ci0JCQllbHNlIGlmIChtZW1jbXAKLQkJCQkgKHNrYi0+ZGF0YSArIDYsIGV0aGVydHlwZV9pcHY0LAotCQkJCSAgc2l6ZW9mKGV0aGVydHlwZV9pcHY0KSkgPT0gMCkKKwkJCWVsc2UgaWYgKG1lbWNtcChza2ItPmRhdGEgKyA2LCBldGhlcnR5cGVfaXB2NCwKKwkJCQkJc2l6ZW9mKGV0aGVydHlwZV9pcHY0KSkgPT0gMCkKIAkJCQlza2ItPnByb3RvY29sID0gaHRvbnMoRVRIX1BfSVApOwogCQkJZWxzZQogCQkJCWdvdG8gZXJyb3I7CiAJCQlza2JfcHVsbChza2IsIHNpemVvZihsbGNfb3VpX2lwdjQpKTsKIAkJCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihza2IpOwogCQkJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwotCQkJLyoKLQkJCSAqIExldCB1cyB3YXN0ZSBzb21lIHRpbWUgZm9yIGNoZWNraW5nIHRoZSBlbmNhcHN1bGF0aW9uLgotCQkJICogTm90ZSwgdGhhdCBvbmx5IDcgY2hhciBpcyBjaGVja2VkIHNvIGZyYW1lcyB3aXRoIGEgdmFsaWQgRkNTCi0JCQkgKiBhcmUgYWxzbyBhY2NlcHRlZCAoYnV0IEZDUyBpcyBub3QgY2hlY2tlZCBvZiBjb3Vyc2UpLgotCQkJICovCisJCS8qCisJCSAqIExldCB1cyB3YXN0ZSBzb21lIHRpbWUgZm9yIGNoZWNraW5nIHRoZSBlbmNhcHN1bGF0aW9uLgorCQkgKiBOb3RlLCB0aGF0IG9ubHkgNyBjaGFyIGlzIGNoZWNrZWQgc28gZnJhbWVzIHdpdGggYSB2YWxpZCBGQ1MKKwkJICogYXJlIGFsc28gYWNjZXB0ZWQgKGJ1dCBGQ1MgaXMgbm90IGNoZWNrZWQgb2YgY291cnNlKS4KKwkJICovCiAJCX0gZWxzZSBpZiAoKHNrYi0+bGVuID49IHNpemVvZihsbGNfb3VpX3BpZF9wYWQpKSAmJgogCQkJICAgKG1lbWNtcChza2ItPmRhdGEsIGxsY19vdWlfcGlkX3BhZCwgNykgPT0gMCkpIHsKIAkJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKGxsY19vdWlfcGlkX3BhZCkpOwpAQCAtNDc5LDggKzQ3Miw3IEBACiAJd3JpdGVfbG9ja19pcnEoJmRldnNfbG9jayk7CiAJbmV0X2RldiA9IGJyMjY4NF9maW5kX2RldigmYmUuaWZzcGVjKTsKIAlpZiAobmV0X2RldiA9PSBOVUxMKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgImJyMjY4NDogdHJpZWQgdG8gYXR0YWNoIHRvIG5vbi1leGlzdGFudCBkZXZpY2VcbiIpOworCQlwcl9lcnIoInRyaWVkIHRvIGF0dGFjaCB0byBub24tZXhpc3RhbnQgZGV2aWNlXG4iKTsKIAkJZXJyID0gLUVOWElPOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTQ5NCwxNyArNDg2LDE2IEBACiAJCWVyciA9IC1FRVhJU1Q7CiAJCWdvdG8gZXJyb3I7CiAJfQotCWlmIChiZS5mY3NfaW4gIT0gQlIyNjg0X0ZDU0lOX05PIHx8IGJlLmZjc19vdXQgIT0gQlIyNjg0X0ZDU09VVF9OTyB8fAotCSAgICBiZS5mY3NfYXV0byB8fCBiZS5oYXNfdnBpaWQgfHwgYmUuc2VuZF9wYWRkaW5nIHx8IChiZS5lbmNhcHMgIT0KLQkJCQkJCQkgICAgICAgQlIyNjg0X0VOQ0FQU19WQwotCQkJCQkJCSAgICAgICAmJiBiZS5lbmNhcHMgIT0KLQkJCQkJCQkgICAgICAgQlIyNjg0X0VOQ0FQU19MTEMpCi0JICAgIHx8IGJlLm1pbl9zaXplICE9IDApIHsKKwlpZiAoYmUuZmNzX2luICE9IEJSMjY4NF9GQ1NJTl9OTyB8fAorCSAgICBiZS5mY3Nfb3V0ICE9IEJSMjY4NF9GQ1NPVVRfTk8gfHwKKwkgICAgYmUuZmNzX2F1dG8gfHwgYmUuaGFzX3ZwaWlkIHx8IGJlLnNlbmRfcGFkZGluZyB8fAorCSAgICAoYmUuZW5jYXBzICE9IEJSMjY4NF9FTkNBUFNfVkMgJiYKKwkgICAgIGJlLmVuY2FwcyAhPSBCUjI2ODRfRU5DQVBTX0xMQykgfHwKKwkgICAgYmUubWluX3NpemUgIT0gMCkgewogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIGVycm9yOwogCX0KLQlwcl9kZWJ1ZygiYnIyNjg0X3JlZ3ZjYyB2Y2M9JXAsIGVuY2Fwcz0lZCwgYnJ2Y2M9JXBcbiIsIGF0bXZjYywKLQkJIGJlLmVuY2FwcywgYnJ2Y2MpOworCXByX2RlYnVnKCJ2Y2M9JXAsIGVuY2Fwcz0lZCwgYnJ2Y2M9JXBcbiIsIGF0bXZjYywgYmUuZW5jYXBzLCBicnZjYyk7CiAJaWYgKGxpc3RfZW1wdHkoJmJyZGV2LT5icnZjY3MpICYmICFicmRldi0+bWFjX3dhc19zZXQpIHsKIAkJdW5zaWduZWQgY2hhciAqZXNpID0gYXRtdmNjLT5kZXYtPmVzaTsKIAkJaWYgKGVzaVswXSB8IGVzaVsxXSB8IGVzaVsyXSB8IGVzaVszXSB8IGVzaVs0XSB8IGVzaVs1XSkKQEAgLTU0MSw3ICs1MzIsOCBAQAogCX0KIAlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwogCXJldHVybiAwOwotICAgICAgZXJyb3I6CisKK2Vycm9yOgogCXdyaXRlX3VubG9ja19pcnEoJmRldnNfbG9jayk7CiAJa2ZyZWUoYnJ2Y2MpOwogCXJldHVybiBlcnI7CkBAIC01ODcsNyArNTc5LDcgQEAKIAlJTklUX0xJU1RfSEVBRCgmYnJkZXYtPmJydmNjcyk7CiB9CiAKLXN0YXRpYyBpbnQgYnIyNjg0X2NyZWF0ZSh2b2lkIF9fdXNlciAqIGFyZykKK3N0YXRpYyBpbnQgYnIyNjg0X2NyZWF0ZSh2b2lkIF9fdXNlciAqYXJnKQogewogCWludCBlcnI7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjsKQEAgLTU5NSwxMSArNTg3LDEwIEBACiAJc3RydWN0IGF0bV9uZXdpZl9icjI2ODQgbmk7CiAJZW51bSBicjI2ODRfcGF5bG9hZCBwYXlsb2FkOwogCi0JcHJfZGVidWcoImJyMjY4NF9jcmVhdGVcbiIpOworCXByX2RlYnVnKCJcbiIpOwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZuaSwgYXJnLCBzaXplb2YgbmkpKSB7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZuaSwgYXJnLCBzaXplb2YgbmkpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQl9CiAKIAlpZiAobmkubWVkaWEgJiBCUjI2ODRfRkxBR19ST1VURUQpCiAJCXBheWxvYWQgPSBwX3JvdXRlZDsKQEAgLTYwNyw5ICs1OTgsOCBAQAogCQlwYXlsb2FkID0gcF9icmlkZ2VkOwogCW5pLm1lZGlhICY9IDB4ZmZmZjsJLyogc3RyaXAgZmxhZ3MgKi8KIAotCWlmIChuaS5tZWRpYSAhPSBCUjI2ODRfTUVESUFfRVRIRVJORVQgfHwgbmkubXR1ICE9IDE1MDApIHsKKwlpZiAobmkubWVkaWEgIT0gQlIyNjg0X01FRElBX0VUSEVSTkVUIHx8IG5pLm10dSAhPSAxNTAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAluZXRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBicjI2ODRfZGV2KSwKIAkJCSAgICAgIG5pLmlmbmFtZVswXSA/IG5pLmlmbmFtZSA6ICJuYXMlZCIsCkBAIC02MjQsNyArNjE0LDcgQEAKIAkvKiBvcGVuLCBzdG9wLCBkb19pb2N0bCA/ICovCiAJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5ldGRldik7CiAJaWYgKGVyciA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJicjI2ODRfY3JlYXRlOiByZWdpc3Rlcl9uZXRkZXYgZmFpbGVkXG4iKTsKKwkJcHJfZXJyKCJyZWdpc3Rlcl9uZXRkZXYgZmFpbGVkXG4iKTsKIAkJZnJlZV9uZXRkZXYobmV0ZGV2KTsKIAkJcmV0dXJuIGVycjsKIAl9CmRpZmYgLS1naXQgYS9uZXQvYXRtL2NsaXAuYyBiL25ldC9hdG0vY2xpcC5jCmluZGV4IDY0NjI5YzMuLmViZmEwMjIgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vY2xpcC5jCisrKyBiL25ldC9hdG0vY2xpcC5jCkBAIC0yLDYgKzIsOCBAQAogCiAvKiBXcml0dGVuIDE5OTUtMjAwMCBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIEVQRkwgTFJDL0lDQSAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6JXM6ICIgZm10LCBfX2Z1bmNfXworCiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4gLyogZm9yIFVJTlRfTUFYICovCkBAIC0zMCwxMCArMzIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9qaGFzaC5oPgogI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPiAvKiBmb3Igc3RydWN0IHJ0YWJsZSBhbmQgcm91dGluZyAqLwogI2luY2x1ZGUgPG5ldC9pY21wLmg+IC8qIGljbXBfc2VuZCAqLwotI2luY2x1ZGUgPGFzbS9wYXJhbS5oPiAvKiBmb3IgSFogKi8KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPiAvKiBmb3IgSFogKi8KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPiAvKiBmb3IgaHRvbnMgZXRjLiAqLwogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4gLyogc2F2ZS9yZXN0b3JlX2ZsYWdzICovCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAKICNpbmNsdWRlICJjb21tb24uaCIKQEAgLTUxLDEzICs1MywxMyBAQAogCXN0cnVjdCBhdG1hcnBfY3RybCAqY3RybDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JcHJfZGVidWcoInRvX2F0bWFycGQoJWQpXG4iLCB0eXBlKTsKKwlwcl9kZWJ1ZygiKCVkKVxuIiwgdHlwZSk7CiAJaWYgKCFhdG1hcnBkKQogCQlyZXR1cm4gLUVVTkFUQ0g7Ci0Jc2tiID0gYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgYXRtYXJwX2N0cmwpLEdGUF9BVE9NSUMpOworCXNrYiA9IGFsbG9jX3NrYihzaXplb2Yoc3RydWN0IGF0bWFycF9jdHJsKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwotCWN0cmwgPSAoc3RydWN0IGF0bWFycF9jdHJsICopIHNrYl9wdXQoc2tiLHNpemVvZihzdHJ1Y3QgYXRtYXJwX2N0cmwpKTsKKwljdHJsID0gKHN0cnVjdCBhdG1hcnBfY3RybCAqKXNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGF0bWFycF9jdHJsKSk7CiAJY3RybC0+dHlwZSA9IHR5cGU7CiAJY3RybC0+aXRmX251bSA9IGl0ZjsKIAljdHJsLT5pcCA9IGlwOwpAQCAtNzEsOCArNzMsNyBAQAogCiBzdGF0aWMgdm9pZCBsaW5rX3ZjYyhzdHJ1Y3QgY2xpcF92Y2MgKmNsaXBfdmNjLCBzdHJ1Y3QgYXRtYXJwX2VudHJ5ICplbnRyeSkKIHsKLQlwcl9kZWJ1ZygibGlua192Y2MgJXAgdG8gZW50cnkgJXAgKG5laWdoICVwKVxuIiwgY2xpcF92Y2MsIGVudHJ5LAotCQllbnRyeS0+bmVpZ2gpOworCXByX2RlYnVnKCIlcCB0byBlbnRyeSAlcCAobmVpZ2ggJXApXG4iLCBjbGlwX3ZjYywgZW50cnksIGVudHJ5LT5uZWlnaCk7CiAJY2xpcF92Y2MtPmVudHJ5ID0gZW50cnk7CiAJY2xpcF92Y2MtPnhvZmYgPSAwOwkvKiBAQEAgbWF5IG92ZXJydW4gYnVmZmVyIGJ5IG9uZSBwYWNrZXQgKi8KIAljbGlwX3ZjYy0+bmV4dCA9IGVudHJ5LT52Y2NzOwpAQCAtODYsNyArODcsNyBAQAogCXN0cnVjdCBjbGlwX3ZjYyAqKndhbGs7CiAKIAlpZiAoIWVudHJ5KSB7Ci0JCXByaW50ayhLRVJOX0NSSVQgIiFjbGlwX3ZjYy0+ZW50cnkgKGNsaXBfdmNjICVwKVxuIiwgY2xpcF92Y2MpOworCQlwcl9jcml0KCIhY2xpcF92Y2MtPmVudHJ5IChjbGlwX3ZjYyAlcClcbiIsIGNsaXBfdmNjKTsKIAkJcmV0dXJuOwogCX0KIAluZXRpZl90eF9sb2NrX2JoKGVudHJ5LT5uZWlnaC0+ZGV2KTsJLyogYmxvY2sgY2xpcF9zdGFydF94bWl0KCkgKi8KQEAgLTEwNiwxMyArMTA3LDExIEBACiAJCQllcnJvciA9IG5laWdoX3VwZGF0ZShlbnRyeS0+bmVpZ2gsIE5VTEwsIE5VRF9OT05FLAogCQkJCQkgICAgIE5FSUdIX1VQREFURV9GX0FETUlOKTsKIAkJCWlmIChlcnJvcikKLQkJCQlwcmludGsoS0VSTl9DUklUICJ1bmxpbmtfY2xpcF92Y2M6ICIKLQkJCQkgICAgICAgIm5laWdoX3VwZGF0ZSBmYWlsZWQgd2l0aCAlZFxuIiwgZXJyb3IpOworCQkJCXByX2NyaXQoIm5laWdoX3VwZGF0ZSBmYWlsZWQgd2l0aCAlZFxuIiwgZXJyb3IpOwogCQkJZ290byBvdXQ7CiAJCX0KLQlwcmludGsoS0VSTl9DUklUICJBVE1BUlA6IHVubGlua19jbGlwX3ZjYyBmYWlsZWQgKGVudHJ5ICVwLCB2Y2MgIgotCSAgICAgICAiMHglcClcbiIsIGVudHJ5LCBjbGlwX3ZjYyk7Ci0gICAgICBvdXQ6CisJcHJfY3JpdCgiQVRNQVJQOiBmYWlsZWQgKGVudHJ5ICVwLCB2Y2MgMHglcClcbiIsIGVudHJ5LCBjbGlwX3ZjYyk7CitvdXQ6CiAJbmV0aWZfdHhfdW5sb2NrX2JoKGVudHJ5LT5uZWlnaC0+ZGV2KTsKIH0KIApAQCAtMTI3LDcgKzEyNiw3IEBACiAKIAkJaWYgKGN2LT5pZGxlX3RpbWVvdXQgJiYgdGltZV9hZnRlcihqaWZmaWVzLCBleHApKSB7CiAJCQlwcl9kZWJ1ZygicmVsZWFzaW5nIHZjYyAlcC0+JXAgb2YgZW50cnkgJXBcbiIsCi0JCQkJY3YsIGN2LT52Y2MsIGVudHJ5KTsKKwkJCQkgY3YsIGN2LT52Y2MsIGVudHJ5KTsKIAkJCXZjY19yZWxlYXNlX2FzeW5jKGN2LT52Y2MsIC1FVElNRURPVVQpOwogCQl9CiAJfQpAQCAtMTM5LDcgKzEzOCw3IEBACiAJCXN0cnVjdCBza19idWZmICpza2I7CiAKIAkJcHJfZGVidWcoImRlc3RydWN0aW9uIHBvc3Rwb25lZCB3aXRoIHJlZiAlZFxuIiwKLQkJCWF0b21pY19yZWFkKCZuLT5yZWZjbnQpKTsKKwkJCSBhdG9taWNfcmVhZCgmbi0+cmVmY250KSk7CiAKIAkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmbi0+YXJwX3F1ZXVlKSkgIT0gTlVMTCkKIAkJCWRldl9rZnJlZV9za2Ioc2tiKTsKQEAgLTE2Myw3ICsxNjIsNyBAQAogewogCXN0cnVjdCBhdG1fdmNjICp2Y2M7CiAKLQlwcl9kZWJ1ZygiY2xpcF9hcnBfcmN2XG4iKTsKKwlwcl9kZWJ1ZygiXG4iKTsKIAl2Y2MgPSBBVE1fU0tCKHNrYiktPnZjYzsKIAlpZiAoIXZjYyB8fCAhYXRtX2NoYXJnZSh2Y2MsIHNrYi0+dHJ1ZXNpemUpKSB7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CkBAIC0xODgsNyArMTg3LDcgQEAKIHsKIAlzdHJ1Y3QgY2xpcF92Y2MgKmNsaXBfdmNjID0gQ0xJUF9WQ0ModmNjKTsKIAotCXByX2RlYnVnKCJjbGlwIHB1c2hcbiIpOworCXByX2RlYnVnKCJcbiIpOwogCWlmICghc2tiKSB7CiAJCXByX2RlYnVnKCJyZW1vdmluZyBWQ0MgJXBcbiIsIGNsaXBfdmNjKTsKIAkJaWYgKGNsaXBfdmNjLT5lbnRyeSkKQEAgLTIwNiwxMiArMjA1LDEyIEBACiAJfQogCUFUTV9TS0Ioc2tiKS0+dmNjID0gdmNjOwogCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0JaWYgKCFjbGlwX3ZjYy0+ZW5jYXAKLQkgICAgfHwgc2tiLT5sZW4gPCBSRkMxNDgzTExDX0xFTgotCSAgICB8fCBtZW1jbXAoc2tiLT5kYXRhLCBsbGNfb3VpLCBzaXplb2YgKGxsY19vdWkpKSkKKwlpZiAoIWNsaXBfdmNjLT5lbmNhcCB8fAorCSAgICBza2ItPmxlbiA8IFJGQzE0ODNMTENfTEVOIHx8CisJICAgIG1lbWNtcChza2ItPmRhdGEsIGxsY19vdWksIHNpemVvZihsbGNfb3VpKSkpCiAJCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9JUCk7CiAJZWxzZSB7Ci0JCXNrYi0+cHJvdG9jb2wgPSAoKF9fYmUxNiAqKSBza2ItPmRhdGEpWzNdOworCQlza2ItPnByb3RvY29sID0gKChfX2JlMTYgKilza2ItPmRhdGEpWzNdOwogCQlza2JfcHVsbChza2IsIFJGQzE0ODNMTENfTEVOKTsKIAkJaWYgKHNrYi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfQVJQKSkgewogCQkJc2tiLT5kZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKQEAgLTIzOSw3ICsyMzgsNyBAQAogCWludCBvbGQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXByX2RlYnVnKCJjbGlwX3BvcCh2Y2MgJXApXG4iLCB2Y2MpOworCXByX2RlYnVnKCIodmNjICVwKVxuIiwgdmNjKTsKIAljbGlwX3ZjYy0+b2xkX3BvcCh2Y2MsIHNrYik7CiAJLyogc2tiLT5kZXYgPT0gTlVMTCBpbiBvdXRib3VuZCBBUlAgcGFja2V0cyAqLwogCWlmICghZGV2KQpAQCAtMjU1LDcgKzI1NCw3IEBACiAKIHN0YXRpYyB2b2lkIGNsaXBfbmVpZ2hfc29saWNpdChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQlwcl9kZWJ1ZygiY2xpcF9uZWlnaF9zb2xpY2l0IChuZWlnaCAlcCwgc2tiICVwKVxuIiwgbmVpZ2gsIHNrYik7CisJcHJfZGVidWcoIihuZWlnaCAlcCwgc2tiICVwKVxuIiwgbmVpZ2gsIHNrYik7CiAJdG9fYXRtYXJwZChhY3RfbmVlZCwgUFJJVihuZWlnaC0+ZGV2KS0+bnVtYmVyLCBORUlHSDJFTlRSWShuZWlnaCktPmlwKTsKIH0KIApAQCAtMjg0LDcgKzI4Myw3IEBACiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCXN0cnVjdCBuZWlnaF9wYXJtcyAqcGFybXM7CiAKLQlwcl9kZWJ1ZygiY2xpcF9jb25zdHJ1Y3RvciAobmVpZ2ggJXAsIGVudHJ5ICVwKVxuIiwgbmVpZ2gsIGVudHJ5KTsKKwlwcl9kZWJ1ZygiKG5laWdoICVwLCBlbnRyeSAlcClcbiIsIG5laWdoLCBlbnRyeSk7CiAJbmVpZ2gtPnR5cGUgPSBpbmV0X2FkZHJfdHlwZSgmaW5pdF9uZXQsIGVudHJ5LT5pcCk7CiAJaWYgKG5laWdoLT50eXBlICE9IFJUTl9VTklDQVNUKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTM2OSw5ICszNjgsOSBAQAogCWludCBvbGQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXByX2RlYnVnKCJjbGlwX3N0YXJ0X3htaXQgKHNrYiAlcClcbiIsIHNrYik7CisJcHJfZGVidWcoIihza2IgJXApXG4iLCBza2IpOwogCWlmICghc2tiX2RzdChza2IpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2xpcF9zdGFydF94bWl0OiBza2JfZHN0KHNrYikgPT0gTlVMTFxuIik7CisJCXByX2Vycigic2tiX2RzdChza2IpID09IE5VTExcbiIpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQlyZXR1cm4gTkVUREVWX1RYX09LOwpAQCAtMzg1LDcgKzM4NCw3IEBACiAJCQlyZXR1cm4gMDsKIAkJfQogI2VuZGlmCi0JCXByaW50ayhLRVJOX0VSUiAiY2xpcF9zdGFydF94bWl0OiBOTyBORUlHSEJPVVIgIVxuIik7CisJCXByX2VycigiTk8gTkVJR0hCT1VSICFcbiIpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQlyZXR1cm4gTkVUREVWX1RYX09LOwpAQCAtNDIxLDcgKzQyMCw3IEBACiAJcHJfZGVidWcoImF0bV9za2IoJXApLT52Y2MoJXApLT5kZXYoJXApXG4iLCBza2IsIHZjYywgdmNjLT5kZXYpOwogCW9sZCA9IHhjaGcoJmVudHJ5LT52Y2NzLT54b2ZmLCAxKTsJLyogYXNzdW1lIFhPRkYgLi4uICovCiAJaWYgKG9sZCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjbGlwX3N0YXJ0X3htaXQ6IFhPRkYtPlhPRkYgdHJhbnNpdGlvblxuIik7CisJCXByX3dhcm5pbmcoIlhPRkYtPlhPRkYgdHJhbnNpdGlvblxuIik7CiAJCXJldHVybiBORVRERVZfVFhfT0s7CiAJfQogCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwpAQCAtNDU2LDcgKzQ1NSw3IEBACiAJY2xpcF92Y2MgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2xpcF92Y2MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNsaXBfdmNjKQogCQlyZXR1cm4gLUVOT01FTTsKLQlwcl9kZWJ1ZygibWtpcCBjbGlwX3ZjYyAlcCB2Y2MgJXBcbiIsIGNsaXBfdmNjLCB2Y2MpOworCXByX2RlYnVnKCIlcCB2Y2MgJXBcbiIsIGNsaXBfdmNjLCB2Y2MpOwogCWNsaXBfdmNjLT52Y2MgPSB2Y2M7CiAJdmNjLT51c2VyX2JhY2sgPSBjbGlwX3ZjYzsKIAlzZXRfYml0KEFUTV9WRl9JU19DTElQLCAmdmNjLT5mbGFncyk7CkBAIC01MDYsMTYgKzUwNSwxNiBAQAogCXN0cnVjdCBydGFibGUgKnJ0OwogCiAJaWYgKHZjYy0+cHVzaCAhPSBjbGlwX3B1c2gpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2xpcF9zZXRlbnRyeTogbm9uLUNMSVAgVkNDXG4iKTsKKwkJcHJfd2FybmluZygibm9uLUNMSVAgVkNDXG4iKTsKIAkJcmV0dXJuIC1FQkFERjsKIAl9CiAJY2xpcF92Y2MgPSBDTElQX1ZDQyh2Y2MpOwogCWlmICghaXApIHsKIAkJaWYgKCFjbGlwX3ZjYy0+ZW50cnkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiaGlkaW5nIGhpZGRlbiBBVE1BUlAgZW50cnlcbiIpOworCQkJcHJfZXJyKCJoaWRpbmcgaGlkZGVuIEFUTUFSUCBlbnRyeVxuIik7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQlwcl9kZWJ1Zygic2V0ZW50cnk6IHJlbW92ZVxuIik7CisJCXByX2RlYnVnKCJyZW1vdmVcbiIpOwogCQl1bmxpbmtfY2xpcF92Y2MoY2xpcF92Y2MpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC01MjksOSArNTI4LDkgQEAKIAllbnRyeSA9IE5FSUdIMkVOVFJZKG5laWdoKTsKIAlpZiAoZW50cnkgIT0gY2xpcF92Y2MtPmVudHJ5KSB7CiAJCWlmICghY2xpcF92Y2MtPmVudHJ5KQotCQkJcHJfZGVidWcoInNldGVudHJ5OiBhZGRcbiIpOworCQkJcHJfZGVidWcoImFkZFxuIik7CiAJCWVsc2UgewotCQkJcHJfZGVidWcoInNldGVudHJ5OiB1cGRhdGVcbiIpOworCQkJcHJfZGVidWcoInVwZGF0ZVxuIik7CiAJCQl1bmxpbmtfY2xpcF92Y2MoY2xpcF92Y2MpOwogCQl9CiAJCWxpbmtfdmNjKGNsaXBfdmNjLCBlbnRyeSk7CkBAIC02MTQsMTYgKzYxMywxNiBAQAogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgTkVUREVWX1VQOgotCQlwcl9kZWJ1ZygiY2xpcF9kZXZpY2VfZXZlbnQgTkVUREVWX1VQXG4iKTsKKwkJcHJfZGVidWcoIk5FVERFVl9VUFxuIik7CiAJCXRvX2F0bWFycGQoYWN0X3VwLCBQUklWKGRldiktPm51bWJlciwgMCk7CiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX0dPSU5HX0RPV046Ci0JCXByX2RlYnVnKCJjbGlwX2RldmljZV9ldmVudCBORVRERVZfRE9XTlxuIik7CisJCXByX2RlYnVnKCJORVRERVZfRE9XTlxuIik7CiAJCXRvX2F0bWFycGQoYWN0X2Rvd24sIFBSSVYoZGV2KS0+bnVtYmVyLCAwKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfQ0hBTkdFOgogCWNhc2UgTkVUREVWX0NIQU5HRU1UVToKLQkJcHJfZGVidWcoImNsaXBfZGV2aWNlX2V2ZW50IE5FVERFVl9DSEFOR0UqXG4iKTsKKwkJcHJfZGVidWcoIk5FVERFVl9DSEFOR0UqXG4iKTsKIAkJdG9fYXRtYXJwZChhY3RfY2hhbmdlLCBQUklWKGRldiktPm51bWJlciwgMCk7CiAJCWJyZWFrOwogCX0KQEAgLTY0NSw3ICs2NDQsNiBAQAogCXJldHVybiBjbGlwX2RldmljZV9ldmVudCh0aGlzLCBORVRERVZfQ0hBTkdFLCBpbl9kZXYtPmRldik7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBjbGlwX2Rldl9ub3RpZmllciA9IHsKIAkubm90aWZpZXJfY2FsbCA9IGNsaXBfZGV2aWNlX2V2ZW50LAogfTsKQEAgLTY2MCw3ICs2NTgsNyBAQAogCiBzdGF0aWMgdm9pZCBhdG1hcnBkX2Nsb3NlKHN0cnVjdCBhdG1fdmNjICp2Y2MpCiB7Ci0JcHJfZGVidWcoImF0bWFycGRfY2xvc2VcbiIpOworCXByX2RlYnVnKCJcbiIpOwogCiAJcnRubF9sb2NrKCk7CiAJYXRtYXJwZCA9IE5VTEw7CkBAIC02NzEsNyArNjY5LDYgQEAKIAltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIH0KIAotCiBzdGF0aWMgc3RydWN0IGF0bWRldl9vcHMgYXRtYXJwZF9kZXZfb3BzID0gewogCS5jbG9zZSA9IGF0bWFycGRfY2xvc2UKIH07CkBAIC02OTMsMTEgKzY5MCwxMSBAQAogCQlyZXR1cm4gLUVBRERSSU5VU0U7CiAJfQogCi0JbW9kX3RpbWVyKCZpZGxlX3RpbWVyLCBqaWZmaWVzK0NMSVBfQ0hFQ0tfSU5URVJWQUwqSFopOworCW1vZF90aW1lcigmaWRsZV90aW1lciwgamlmZmllcyArIENMSVBfQ0hFQ0tfSU5URVJWQUwgKiBIWik7CiAKIAlhdG1hcnBkID0gdmNjOwotCXNldF9iaXQoQVRNX1ZGX01FVEEsJnZjYy0+ZmxhZ3MpOwotCXNldF9iaXQoQVRNX1ZGX1JFQURZLCZ2Y2MtPmZsYWdzKTsKKwlzZXRfYml0KEFUTV9WRl9NRVRBLCAmdmNjLT5mbGFncyk7CisJc2V0X2JpdChBVE1fVkZfUkVBRFksICZ2Y2MtPmZsYWdzKTsKIAkgICAgLyogYWxsb3cgcmVwbGllcyBhbmQgYXZvaWQgZ2V0dGluZyBjbG9zZWQgaWYgc2lnbmFsaW5nIGRpZXMgKi8KIAl2Y2MtPmRldiA9ICZhdG1hcnBkX2RldjsKIAl2Y2NfaW5zZXJ0X3NvY2tldChza19hdG0odmNjKSk7CkBAIC05NTAsOCArOTQ3LDcgQEAKIAogCQlwID0gcHJvY19jcmVhdGUoImFycCIsIFNfSVJVR08sIGF0bV9wcm9jX3Jvb3QsICZhcnBfc2VxX2ZvcHMpOwogCQlpZiAoIXApIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGluaXRpYWxpemUgIgotCQkJICAgICAgICIvcHJvYy9uZXQvYXRtL2FycFxuIik7CisJCQlwcl9lcnIoIlVuYWJsZSB0byBpbml0aWFsaXplIC9wcm9jL25ldC9hdG0vYXJwXG4iKTsKIAkJCWF0bV9jbGlwX2V4aXRfbm9wcm9jKCk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQpkaWZmIC0tZ2l0IGEvbmV0L2F0bS9jb21tb24uYyBiL25ldC9hdG0vY29tbW9uLmMKaW5kZXggZDYxZTA1MS4uNzRkMDk1YSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9jb21tb24uYworKysgYi9uZXQvYXRtL2NvbW1vbi5jCkBAIC0yLDYgKzIsNyBAQAogCiAvKiBXcml0dGVuIDE5OTUtMjAwMCBieSBXZXJuZXIgQWxtZXNiZXJnZXIsIEVQRkwgTFJDL0lDQSAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6JXM6ICIgZm10LCBfX2Z1bmNfXwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgpAQCAtMTgsMTEgKzE5LDEwIEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CQkvKiBzdHJ1Y3Qgc29jayAqLworI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAKLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vcG9sbC5oPgotCiAKICNpbmNsdWRlICJyZXNvdXJjZXMuaCIJCS8qIGF0bV9maW5kX2RldiAqLwogI2luY2x1ZGUgImNvbW1vbi5oIgkJLyogcHJvdG90eXBlcyAqLwpAQCAtMzEsMTMgKzMxLDE1IEBACiAjaW5jbHVkZSAic2lnbmFsaW5nLmgiCQkvKiBmb3IgV0FJVElORyBhbmQgc2lnZF9hdHRhY2ggKi8KIAogc3RydWN0IGhsaXN0X2hlYWQgdmNjX2hhc2hbVkNDX0hUQUJMRV9TSVpFXTsKK0VYUE9SVF9TWU1CT0wodmNjX2hhc2gpOworCiBERUZJTkVfUldMT0NLKHZjY19za2xpc3RfbG9jayk7CitFWFBPUlRfU1lNQk9MKHZjY19za2xpc3RfbG9jayk7CiAKIHN0YXRpYyB2b2lkIF9fdmNjX2luc2VydF9zb2NrZXQoc3RydWN0IHNvY2sgKnNrKQogewogCXN0cnVjdCBhdG1fdmNjICp2Y2MgPSBhdG1fc2soc2spOwotCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gJnZjY19oYXNoW3ZjYy0+dmNpICYKLQkJCQkJKFZDQ19IVEFCTEVfU0laRSAtIDEpXTsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9ICZ2Y2NfaGFzaFt2Y2MtPnZjaSAmIChWQ0NfSFRBQkxFX1NJWkUgLSAxKV07CiAJc2stPnNrX2hhc2ggPSB2Y2MtPnZjaSAmIChWQ0NfSFRBQkxFX1NJWkUgLSAxKTsKIAlza19hZGRfbm9kZShzaywgaGVhZCk7CiB9CkBAIC00OCw2ICs1MCw3IEBACiAJX192Y2NfaW5zZXJ0X3NvY2tldChzayk7CiAJd3JpdGVfdW5sb2NrX2lycSgmdmNjX3NrbGlzdF9sb2NrKTsKIH0KK0VYUE9SVF9TWU1CT0wodmNjX2luc2VydF9zb2NrZXQpOwogCiBzdGF0aWMgdm9pZCB2Y2NfcmVtb3ZlX3NvY2tldChzdHJ1Y3Qgc29jayAqc2spCiB7CkBAIC01NiwzNyArNTksMzIgQEAKIAl3cml0ZV91bmxvY2tfaXJxKCZ2Y2Nfc2tsaXN0X2xvY2spOwogfQogCi0KLXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfdHgoc3RydWN0IGF0bV92Y2MgKnZjYyx1bnNpZ25lZCBpbnQgc2l6ZSkKK3N0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqYWxsb2NfdHgoc3RydWN0IGF0bV92Y2MgKnZjYywgdW5zaWduZWQgaW50IHNpemUpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBza19hdG0odmNjKTsKIAogCWlmIChza193bWVtX2FsbG9jX2dldChzaykgJiYgIWF0bV9tYXlfc2VuZCh2Y2MsIHNpemUpKSB7CiAJCXByX2RlYnVnKCJTb3JyeTogd21lbV9hbGxvYyA9ICVkLCBzaXplID0gJWQsIHNuZGJ1ZiA9ICVkXG4iLAotCQkJc2tfd21lbV9hbGxvY19nZXQoc2spLCBzaXplLAotCQkJc2stPnNrX3NuZGJ1Zik7CisJCQkgc2tfd21lbV9hbGxvY19nZXQoc2spLCBzaXplLCBzay0+c2tfc25kYnVmKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCXdoaWxlICghKHNrYiA9IGFsbG9jX3NrYihzaXplLCBHRlBfS0VSTkVMKSkpCiAJCXNjaGVkdWxlKCk7Ci0JcHJfZGVidWcoIkFsVHggJWQgKz0gJWRcbiIsIHNrX3dtZW1fYWxsb2NfZ2V0KHNrKSwgc2tiLT50cnVlc2l6ZSk7CisJcHJfZGVidWcoIiVkICs9ICVkXG4iLCBza193bWVtX2FsbG9jX2dldChzayksIHNrYi0+dHJ1ZXNpemUpOwogCWF0b21pY19hZGQoc2tiLT50cnVlc2l6ZSwgJnNrLT5za193bWVtX2FsbG9jKTsKIAlyZXR1cm4gc2tiOwogfQogCi0KLUVYUE9SVF9TWU1CT0wodmNjX2hhc2gpOwotRVhQT1JUX1NZTUJPTCh2Y2Nfc2tsaXN0X2xvY2spOwotRVhQT1JUX1NZTUJPTCh2Y2NfaW5zZXJ0X3NvY2tldCk7Ci0KIHN0YXRpYyB2b2lkIHZjY19zb2NrX2Rlc3RydWN0KHN0cnVjdCBzb2NrICpzaykKIHsKIAlpZiAoYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgInZjY19zb2NrX2Rlc3RydWN0OiBybWVtIGxlYWthZ2UgKCVkIGJ5dGVzKSBkZXRlY3RlZC5cbiIsIGF0b21pY19yZWFkKCZzay0+c2tfcm1lbV9hbGxvYykpOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHJtZW0gbGVha2FnZSAoJWQgYnl0ZXMpIGRldGVjdGVkLlxuIiwKKwkJICAgICAgIF9fZnVuY19fLCBhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpKTsKIAogCWlmIChhdG9taWNfcmVhZCgmc2stPnNrX3dtZW1fYWxsb2MpKQotCQlwcmludGsoS0VSTl9ERUJVRyAidmNjX3NvY2tfZGVzdHJ1Y3Q6IHdtZW0gbGVha2FnZSAoJWQgYnl0ZXMpIGRldGVjdGVkLlxuIiwgYXRvbWljX3JlYWQoJnNrLT5za193bWVtX2FsbG9jKSk7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogd21lbSBsZWFrYWdlICglZCBieXRlcykgZGV0ZWN0ZWQuXG4iLAorCQkgICAgICAgX19mdW5jX18sIGF0b21pY19yZWFkKCZzay0+c2tfd21lbV9hbGxvYykpOwogfQogCiBzdGF0aWMgdm9pZCB2Y2NfZGVmX3dha2V1cChzdHJ1Y3Qgc29jayAqc2spCkBAIC0xNDIsOCArMTQwLDggQEAKIAogCXZjYyA9IGF0bV9zayhzayk7CiAJdmNjLT5kZXYgPSBOVUxMOwotCW1lbXNldCgmdmNjLT5sb2NhbCwwLHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjKSk7Ci0JbWVtc2V0KCZ2Y2MtPnJlbW90ZSwwLHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjKSk7CisJbWVtc2V0KCZ2Y2MtPmxvY2FsLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXN2YykpOworCW1lbXNldCgmdmNjLT5yZW1vdGUsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjKSk7CiAJdmNjLT5xb3MudHh0cC5tYXhfc2R1ID0gMSA8PCAxNjsgLyogZm9yIG1ldGEgVkNzICovCiAJYXRvbWljX3NldCgmc2stPnNrX3dtZW1fYWxsb2MsIDEpOwogCWF0b21pY19zZXQoJnNrLT5za19ybWVtX2FsbG9jLCAwKTsKQEAgLTE1Niw3ICsxNTQsNiBAQAogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyB2b2lkIHZjY19kZXN0cm95X3NvY2tldChzdHJ1Y3Qgc29jayAqc2spCiB7CiAJc3RydWN0IGF0bV92Y2MgKnZjYyA9IGF0bV9zayhzayk7CkBAIC0xNzEsNyArMTY4LDcgQEAKIAkJCXZjYy0+cHVzaCh2Y2MsIE5VTEwpOyAvKiBhdG1hcnBkIGhhcyBubyBwdXNoICovCiAKIAkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmc2stPnNrX3JlY2VpdmVfcXVldWUpKSAhPSBOVUxMKSB7Ci0JCQlhdG1fcmV0dXJuKHZjYyxza2ItPnRydWVzaXplKTsKKwkJCWF0bV9yZXR1cm4odmNjLCBza2ItPnRydWVzaXplKTsKIAkJCWtmcmVlX3NrYihza2IpOwogCQl9CiAKQEAgLTE4Miw3ICsxNzksNiBAQAogCXZjY19yZW1vdmVfc29ja2V0KHNrKTsKIH0KIAotCiBpbnQgdmNjX3JlbGVhc2Uoc3RydWN0IHNvY2tldCAqc29jaykKIHsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKQEAgLTE5Nyw3ICsxOTMsNiBAQAogCXJldHVybiAwOwogfQogCi0KIHZvaWQgdmNjX3JlbGVhc2VfYXN5bmMoc3RydWN0IGF0bV92Y2MgKnZjYywgaW50IHJlcGx5KQogewogCXN0cnVjdCBzb2NrICpzayA9IHNrX2F0bSh2Y2MpOwpAQCAtMjA4LDggKzIwMyw2IEBACiAJY2xlYXJfYml0KEFUTV9WRl9XQUlUSU5HLCAmdmNjLT5mbGFncyk7CiAJc2stPnNrX3N0YXRlX2NoYW5nZShzayk7CiB9Ci0KLQogRVhQT1JUX1NZTUJPTCh2Y2NfcmVsZWFzZV9hc3luYyk7CiAKIApAQCAtMjM1LDM3ICsyMjgsMzcgQEAKIAl3cml0ZV91bmxvY2tfaXJxKCZ2Y2Nfc2tsaXN0X2xvY2spOwogfQogCi0KLXN0YXRpYyBpbnQgYWRqdXN0X3RwKHN0cnVjdCBhdG1fdHJhZnBybSAqdHAsdW5zaWduZWQgY2hhciBhYWwpCitzdGF0aWMgaW50IGFkanVzdF90cChzdHJ1Y3QgYXRtX3RyYWZwcm0gKnRwLCB1bnNpZ25lZCBjaGFyIGFhbCkKIHsKIAlpbnQgbWF4X3NkdTsKIAotCWlmICghdHAtPnRyYWZmaWNfY2xhc3MpIHJldHVybiAwOworCWlmICghdHAtPnRyYWZmaWNfY2xhc3MpCisJCXJldHVybiAwOwogCXN3aXRjaCAoYWFsKSB7Ci0JCWNhc2UgQVRNX0FBTDA6Ci0JCQltYXhfc2R1ID0gQVRNX0NFTExfU0laRS0xOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVRNX0FBTDM0OgotCQkJbWF4X3NkdSA9IEFUTV9NQVhfQUFMMzRfUERVOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJBVE06IEFBTCBwcm9ibGVtcyAuLi4gIgotCQkJICAgICIoJWQpXG4iLGFhbCk7Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBBVE1fQUFMNToKLQkJCW1heF9zZHUgPSBBVE1fTUFYX0FBTDVfUERVOworCWNhc2UgQVRNX0FBTDA6CisJCW1heF9zZHUgPSBBVE1fQ0VMTF9TSVpFLTE7CisJCWJyZWFrOworCWNhc2UgQVRNX0FBTDM0OgorCQltYXhfc2R1ID0gQVRNX01BWF9BQUwzNF9QRFU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByX3dhcm5pbmcoIkFBTCBwcm9ibGVtcyAuLi4gKCVkKVxuIiwgYWFsKTsKKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBBVE1fQUFMNToKKwkJbWF4X3NkdSA9IEFUTV9NQVhfQUFMNV9QRFU7CiAJfQotCWlmICghdHAtPm1heF9zZHUpIHRwLT5tYXhfc2R1ID0gbWF4X3NkdTsKLQllbHNlIGlmICh0cC0+bWF4X3NkdSA+IG1heF9zZHUpIHJldHVybiAtRUlOVkFMOwotCWlmICghdHAtPm1heF9jZHYpIHRwLT5tYXhfY2R2ID0gQVRNX01BWF9DRFY7CisJaWYgKCF0cC0+bWF4X3NkdSkKKwkJdHAtPm1heF9zZHUgPSBtYXhfc2R1OworCWVsc2UgaWYgKHRwLT5tYXhfc2R1ID4gbWF4X3NkdSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCF0cC0+bWF4X2NkdikKKwkJdHAtPm1heF9jZHYgPSBBVE1fTUFYX0NEVjsKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgaW50IGNoZWNrX2NpKGNvbnN0IHN0cnVjdCBhdG1fdmNjICp2Y2MsIHNob3J0IHZwaSwgaW50IHZjaSkKIHsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9ICZ2Y2NfaGFzaFt2Y2kgJgotCQkJCQkoVkNDX0hUQUJMRV9TSVpFIC0gMSldOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gJnZjY19oYXNoW3ZjaSAmIChWQ0NfSFRBQkxFX1NJWkUgLSAxKV07CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJc3RydWN0IHNvY2sgKnM7CiAJc3RydWN0IGF0bV92Y2MgKndhbGs7CkBAIC0yODksNyArMjgyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgaW50IGZpbmRfY2koY29uc3Qgc3RydWN0IGF0bV92Y2MgKnZjYywgc2hvcnQgKnZwaSwgaW50ICp2Y2kpCiB7CiAJc3RhdGljIHNob3J0IHA7ICAgICAgICAvKiBwb29yIG1hbidzIHBlci1kZXZpY2UgY2FjaGUgKi8KQEAgLTMyNywxNCArMzE5LDEzIEBACiAJCWlmICgoYyA9PSBBVE1fTk9UX1JTVl9WQ0kgfHwgKnZjaSAhPSBBVE1fVkNJX0FOWSkgJiYKIAkJICAgICp2cGkgPT0gQVRNX1ZQSV9BTlkpIHsKIAkJCXArKzsKLQkJCWlmIChwID49IDEgPDwgdmNjLT5kZXYtPmNpX3JhbmdlLnZwaV9iaXRzKSBwID0gMDsKKwkJCWlmIChwID49IDEgPDwgdmNjLT5kZXYtPmNpX3JhbmdlLnZwaV9iaXRzKQorCQkJCXAgPSAwOwogCQl9Ci0JfQotCXdoaWxlIChvbGRfcCAhPSBwIHx8IG9sZF9jICE9IGMpOworCX0gd2hpbGUgKG9sZF9wICE9IHAgfHwgb2xkX2MgIT0gYyk7CiAJcmV0dXJuIC1FQUREUklOVVNFOwogfQogCi0KIHN0YXRpYyBpbnQgX192Y2NfY29ubmVjdChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzaG9ydCB2cGksCiAJCQkgaW50IHZjaSkKIHsKQEAgLTM2MiwzNyArMzUzLDQ2IEBACiAJX192Y2NfaW5zZXJ0X3NvY2tldChzayk7CiAJd3JpdGVfdW5sb2NrX2lycSgmdmNjX3NrbGlzdF9sb2NrKTsKIAlzd2l0Y2ggKHZjYy0+cW9zLmFhbCkgewotCQljYXNlIEFUTV9BQUwwOgotCQkJZXJyb3IgPSBhdG1faW5pdF9hYWwwKHZjYyk7Ci0JCQl2Y2MtPnN0YXRzID0gJmRldi0+c3RhdHMuYWFsMDsKLQkJCWJyZWFrOwotCQljYXNlIEFUTV9BQUwzNDoKLQkJCWVycm9yID0gYXRtX2luaXRfYWFsMzQodmNjKTsKLQkJCXZjYy0+c3RhdHMgPSAmZGV2LT5zdGF0cy5hYWwzNDsKLQkJCWJyZWFrOwotCQljYXNlIEFUTV9OT19BQUw6Ci0JCQkvKiBBVE1fQUFMNSBpcyBhbHNvIHVzZWQgaW4gdGhlICIwIGZvciBkZWZhdWx0IiBjYXNlICovCi0JCQl2Y2MtPnFvcy5hYWwgPSBBVE1fQUFMNTsKLQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCQljYXNlIEFUTV9BQUw1OgotCQkJZXJyb3IgPSBhdG1faW5pdF9hYWw1KHZjYyk7Ci0JCQl2Y2MtPnN0YXRzID0gJmRldi0+c3RhdHMuYWFsNTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZXJyb3IgPSAtRVBST1RPVFlQRTsKKwljYXNlIEFUTV9BQUwwOgorCQllcnJvciA9IGF0bV9pbml0X2FhbDAodmNjKTsKKwkJdmNjLT5zdGF0cyA9ICZkZXYtPnN0YXRzLmFhbDA7CisJCWJyZWFrOworCWNhc2UgQVRNX0FBTDM0OgorCQllcnJvciA9IGF0bV9pbml0X2FhbDM0KHZjYyk7CisJCXZjYy0+c3RhdHMgPSAmZGV2LT5zdGF0cy5hYWwzNDsKKwkJYnJlYWs7CisJY2FzZSBBVE1fTk9fQUFMOgorCQkvKiBBVE1fQUFMNSBpcyBhbHNvIHVzZWQgaW4gdGhlICIwIGZvciBkZWZhdWx0IiBjYXNlICovCisJCXZjYy0+cW9zLmFhbCA9IEFUTV9BQUw1OworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEFUTV9BQUw1OgorCQllcnJvciA9IGF0bV9pbml0X2FhbDUodmNjKTsKKwkJdmNjLT5zdGF0cyA9ICZkZXYtPnN0YXRzLmFhbDU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm9yID0gLUVQUk9UT1RZUEU7CiAJfQotCWlmICghZXJyb3IpIGVycm9yID0gYWRqdXN0X3RwKCZ2Y2MtPnFvcy50eHRwLHZjYy0+cW9zLmFhbCk7Ci0JaWYgKCFlcnJvcikgZXJyb3IgPSBhZGp1c3RfdHAoJnZjYy0+cW9zLnJ4dHAsdmNjLT5xb3MuYWFsKTsKKwlpZiAoIWVycm9yKQorCQllcnJvciA9IGFkanVzdF90cCgmdmNjLT5xb3MudHh0cCwgdmNjLT5xb3MuYWFsKTsKKwlpZiAoIWVycm9yKQorCQllcnJvciA9IGFkanVzdF90cCgmdmNjLT5xb3Mucnh0cCwgdmNjLT5xb3MuYWFsKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZmFpbDsKLQlwcl9kZWJ1ZygiVkNDICVkLiVkLCBBQUwgJWRcbiIsdnBpLHZjaSx2Y2MtPnFvcy5hYWwpOwotCXByX2RlYnVnKCIgIFRYOiAlZCwgUENSICVkLi4lZCwgU0RVICVkXG4iLHZjYy0+cW9zLnR4dHAudHJhZmZpY19jbGFzcywKLQkgICAgdmNjLT5xb3MudHh0cC5taW5fcGNyLHZjYy0+cW9zLnR4dHAubWF4X3Bjcix2Y2MtPnFvcy50eHRwLm1heF9zZHUpOwotCXByX2RlYnVnKCIgIFJYOiAlZCwgUENSICVkLi4lZCwgU0RVICVkXG4iLHZjYy0+cW9zLnJ4dHAudHJhZmZpY19jbGFzcywKLQkgICAgdmNjLT5xb3Mucnh0cC5taW5fcGNyLHZjYy0+cW9zLnJ4dHAubWF4X3Bjcix2Y2MtPnFvcy5yeHRwLm1heF9zZHUpOworCXByX2RlYnVnKCJWQ0MgJWQuJWQsIEFBTCAlZFxuIiwgdnBpLCB2Y2ksIHZjYy0+cW9zLmFhbCk7CisJcHJfZGVidWcoIiAgVFg6ICVkLCBQQ1IgJWQuLiVkLCBTRFUgJWRcbiIsCisJCSB2Y2MtPnFvcy50eHRwLnRyYWZmaWNfY2xhc3MsCisJCSB2Y2MtPnFvcy50eHRwLm1pbl9wY3IsCisJCSB2Y2MtPnFvcy50eHRwLm1heF9wY3IsCisJCSB2Y2MtPnFvcy50eHRwLm1heF9zZHUpOworCXByX2RlYnVnKCIgIFJYOiAlZCwgUENSICVkLi4lZCwgU0RVICVkXG4iLAorCQkgdmNjLT5xb3Mucnh0cC50cmFmZmljX2NsYXNzLAorCQkgdmNjLT5xb3Mucnh0cC5taW5fcGNyLAorCQkgdmNjLT5xb3Mucnh0cC5tYXhfcGNyLAorCQkgdmNjLT5xb3Mucnh0cC5tYXhfc2R1KTsKIAogCWlmIChkZXYtPm9wcy0+b3BlbikgewotCQlpZiAoKGVycm9yID0gZGV2LT5vcHMtPm9wZW4odmNjKSkpCisJCWVycm9yID0gZGV2LT5vcHMtPm9wZW4odmNjKTsKKwkJaWYgKGVycm9yKQogCQkJZ290byBmYWlsOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQwNiwxNCArNDA2LDEzIEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0KIGludCB2Y2NfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaXRmLCBzaG9ydCB2cGksIGludCB2Y2kpCiB7CiAJc3RydWN0IGF0bV9kZXYgKmRldjsKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjID0gQVRNX1NEKHNvY2spOwogCWludCBlcnJvcjsKIAotCXByX2RlYnVnKCJ2Y2NfY29ubmVjdCAodnBpICVkLCB2Y2kgJWQpXG4iLHZwaSx2Y2kpOworCXByX2RlYnVnKCIodnBpICVkLCB2Y2kgJWQpXG4iLCB2cGksIHZjaSk7CiAJaWYgKHNvY2stPnN0YXRlID09IFNTX0NPTk5FQ1RFRCkKIAkJcmV0dXJuIC1FSVNDT05OOwogCWlmIChzb2NrLT5zdGF0ZSAhPSBTU19VTkNPTk5FQ1RFRCkKQEAgLTQyMiwzMCArNDIxLDMzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHZwaSAhPSBBVE1fVlBJX1VOU1BFQyAmJiB2Y2kgIT0gQVRNX1ZDSV9VTlNQRUMpCi0JCWNsZWFyX2JpdChBVE1fVkZfUEFSVElBTCwmdmNjLT5mbGFncyk7CisJCWNsZWFyX2JpdChBVE1fVkZfUEFSVElBTCwgJnZjYy0+ZmxhZ3MpOwogCWVsc2UKLQkJaWYgKHRlc3RfYml0KEFUTV9WRl9QQVJUSUFMLCZ2Y2MtPmZsYWdzKSkKKwkJaWYgKHRlc3RfYml0KEFUTV9WRl9QQVJUSUFMLCAmdmNjLT5mbGFncykpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQlwcl9kZWJ1ZygidmNjX2Nvbm5lY3QgKFRYOiBjbCAlZCxidyAlZC0lZCxzZHUgJWQ7ICIKLQkgICAgIlJYOiBjbCAlZCxidyAlZC0lZCxzZHUgJWQsQUFMICVzJWQpXG4iLAotCSAgICB2Y2MtPnFvcy50eHRwLnRyYWZmaWNfY2xhc3MsdmNjLT5xb3MudHh0cC5taW5fcGNyLAotCSAgICB2Y2MtPnFvcy50eHRwLm1heF9wY3IsdmNjLT5xb3MudHh0cC5tYXhfc2R1LAotCSAgICB2Y2MtPnFvcy5yeHRwLnRyYWZmaWNfY2xhc3MsdmNjLT5xb3Mucnh0cC5taW5fcGNyLAotCSAgICB2Y2MtPnFvcy5yeHRwLm1heF9wY3IsdmNjLT5xb3Mucnh0cC5tYXhfc2R1LAotCSAgICB2Y2MtPnFvcy5hYWwgPT0gQVRNX0FBTDUgPyAiIiA6IHZjYy0+cW9zLmFhbCA9PSBBVE1fQUFMMCA/ICIiIDoKLQkgICAgIiA/Pz8gY29kZSAiLHZjYy0+cW9zLmFhbCA9PSBBVE1fQUFMMCA/IDAgOiB2Y2MtPnFvcy5hYWwpOworCXByX2RlYnVnKCIoVFg6IGNsICVkLGJ3ICVkLSVkLHNkdSAlZDsgIgorCQkgIlJYOiBjbCAlZCxidyAlZC0lZCxzZHUgJWQsQUFMICVzJWQpXG4iLAorCQkgdmNjLT5xb3MudHh0cC50cmFmZmljX2NsYXNzLCB2Y2MtPnFvcy50eHRwLm1pbl9wY3IsCisJCSB2Y2MtPnFvcy50eHRwLm1heF9wY3IsIHZjYy0+cW9zLnR4dHAubWF4X3NkdSwKKwkJIHZjYy0+cW9zLnJ4dHAudHJhZmZpY19jbGFzcywgdmNjLT5xb3Mucnh0cC5taW5fcGNyLAorCQkgdmNjLT5xb3Mucnh0cC5tYXhfcGNyLCB2Y2MtPnFvcy5yeHRwLm1heF9zZHUsCisJCSB2Y2MtPnFvcy5hYWwgPT0gQVRNX0FBTDUgPyAiIiA6CisJCSB2Y2MtPnFvcy5hYWwgPT0gQVRNX0FBTDAgPyAiIiA6ICIgPz8/IGNvZGUgIiwKKwkJIHZjYy0+cW9zLmFhbCA9PSBBVE1fQUFMMCA/IDAgOiB2Y2MtPnFvcy5hYWwpOwogCWlmICghdGVzdF9iaXQoQVRNX1ZGX0hBU1FPUywgJnZjYy0+ZmxhZ3MpKQogCQlyZXR1cm4gLUVCQURGRDsKIAlpZiAodmNjLT5xb3MudHh0cC50cmFmZmljX2NsYXNzID09IEFUTV9BTllDTEFTUyB8fAogCSAgICB2Y2MtPnFvcy5yeHRwLnRyYWZmaWNfY2xhc3MgPT0gQVRNX0FOWUNMQVNTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAobGlrZWx5KGl0ZiAhPSBBVE1fSVRGX0FOWSkpIHsKLQkJZGV2ID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoYXRtX2Rldl9sb29rdXAoaXRmKSwgImF0bS1kZXZpY2UtJWQiLCBpdGYpOworCQlkZXYgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZShhdG1fZGV2X2xvb2t1cChpdGYpLAorCQkJCQkgICAgICAiYXRtLWRldmljZS0lZCIsIGl0Zik7CiAJfSBlbHNlIHsKIAkJZGV2ID0gTlVMTDsKIAkJbXV0ZXhfbG9jaygmYXRtX2Rldl9tdXRleCk7CiAJCWlmICghbGlzdF9lbXB0eSgmYXRtX2RldnMpKSB7Ci0JCQlkZXYgPSBsaXN0X2VudHJ5KGF0bV9kZXZzLm5leHQsIHN0cnVjdCBhdG1fZGV2LCBkZXZfbGlzdCk7CisJCQlkZXYgPSBsaXN0X2VudHJ5KGF0bV9kZXZzLm5leHQsCisJCQkJCSBzdHJ1Y3QgYXRtX2RldiwgZGV2X2xpc3QpOwogCQkJYXRtX2Rldl9ob2xkKGRldik7CiAJCX0KIAkJbXV0ZXhfdW5sb2NrKCZhdG1fZGV2X211dGV4KTsKQEAgLTQ1OCwxMyArNDYwLDEyIEBACiAJCXJldHVybiBlcnJvcjsKIAl9CiAJaWYgKHZwaSA9PSBBVE1fVlBJX1VOU1BFQyB8fCB2Y2kgPT0gQVRNX1ZDSV9VTlNQRUMpCi0JCXNldF9iaXQoQVRNX1ZGX1BBUlRJQUwsJnZjYy0+ZmxhZ3MpOwotCWlmICh0ZXN0X2JpdChBVE1fVkZfUkVBRFksJkFUTV9TRChzb2NrKS0+ZmxhZ3MpKQorCQlzZXRfYml0KEFUTV9WRl9QQVJUSUFMLCAmdmNjLT5mbGFncyk7CisJaWYgKHRlc3RfYml0KEFUTV9WRl9SRUFEWSwgJkFUTV9TRChzb2NrKS0+ZmxhZ3MpKQogCQlzb2NrLT5zdGF0ZSA9IFNTX0NPTk5FQ1RFRDsKIAlyZXR1cm4gMDsKIH0KIAotCiBpbnQgdmNjX3JlY3Ztc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptc2csCiAJCXNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CkBAIC00NzgsOCArNDc5LDggQEAKIAlpZiAoZmxhZ3MgJiB+TVNHX0RPTlRXQUlUKQkJLyogb25seSBoYW5kbGUgTVNHX0RPTlRXQUlUICovCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl2Y2MgPSBBVE1fU0Qoc29jayk7Ci0JaWYgKHRlc3RfYml0KEFUTV9WRl9SRUxFQVNFRCwmdmNjLT5mbGFncykgfHwKLQkgICAgdGVzdF9iaXQoQVRNX1ZGX0NMT1NFLCZ2Y2MtPmZsYWdzKSB8fAorCWlmICh0ZXN0X2JpdChBVE1fVkZfUkVMRUFTRUQsICZ2Y2MtPmZsYWdzKSB8fAorCSAgICB0ZXN0X2JpdChBVE1fVkZfQ0xPU0UsICZ2Y2MtPmZsYWdzKSB8fAogCSAgICAhdGVzdF9iaXQoQVRNX1ZGX1JFQURZLCAmdmNjLT5mbGFncykpCiAJCXJldHVybiAwOwogCkBAIC00OTcsMTMgKzQ5OCwxMiBAQAogCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwogCXNvY2tfcmVjdl90c19hbmRfZHJvcHMobXNnLCBzaywgc2tiKTsKLQlwcl9kZWJ1ZygiUmN2TSAlZCAtPSAlZFxuIiwgYXRvbWljX3JlYWQoJnNrLT5za19ybWVtX2FsbG9jKSwgc2tiLT50cnVlc2l6ZSk7CisJcHJfZGVidWcoIiVkIC09ICVkXG4iLCBhdG9taWNfcmVhZCgmc2stPnNrX3JtZW1fYWxsb2MpLCBza2ItPnRydWVzaXplKTsKIAlhdG1fcmV0dXJuKHZjYywgc2tiLT50cnVlc2l6ZSk7CiAJc2tiX2ZyZWVfZGF0YWdyYW0oc2ssIHNrYik7CiAJcmV0dXJuIGNvcGllZDsKIH0KIAotCiBpbnQgdmNjX3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgbXNnaGRyICptLAogCQlzaXplX3QgdG90YWxfbGVuKQogewpAQCAtNTExLDcgKzUxMSw3IEBACiAJREVGSU5FX1dBSVQod2FpdCk7CiAJc3RydWN0IGF0bV92Y2MgKnZjYzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCBlZmYsZXJyb3I7CisJaW50IGVmZiwgZXJyb3I7CiAJY29uc3Qgdm9pZCBfX3VzZXIgKmJ1ZmY7CiAJaW50IHNpemU7CiAKQEAgLTU1MCw3ICs1NTAsNyBAQAogCWVmZiA9IChzaXplKzMpICYgfjM7IC8qIGFsaWduIHRvIHdvcmQgYm91bmRhcnkgKi8KIAlwcmVwYXJlX3RvX3dhaXQoc2stPnNrX3NsZWVwLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKIAllcnJvciA9IDA7Ci0Jd2hpbGUgKCEoc2tiID0gYWxsb2NfdHgodmNjLGVmZikpKSB7CisJd2hpbGUgKCEoc2tiID0gYWxsb2NfdHgodmNjLCBlZmYpKSkgewogCQlpZiAobS0+bXNnX2ZsYWdzICYgTVNHX0RPTlRXQUlUKSB7CiAJCQllcnJvciA9IC1FQUdBSU47CiAJCQlicmVhazsKQEAgLTU2MCw5ICs1NjAsOSBAQAogCQkJZXJyb3IgPSAtRVJFU1RBUlRTWVM7CiAJCQlicmVhazsKIAkJfQotCQlpZiAodGVzdF9iaXQoQVRNX1ZGX1JFTEVBU0VELCZ2Y2MtPmZsYWdzKSB8fAotCQkgICAgdGVzdF9iaXQoQVRNX1ZGX0NMT1NFLCZ2Y2MtPmZsYWdzKSB8fAotCQkgICAgIXRlc3RfYml0KEFUTV9WRl9SRUFEWSwmdmNjLT5mbGFncykpIHsKKwkJaWYgKHRlc3RfYml0KEFUTV9WRl9SRUxFQVNFRCwgJnZjYy0+ZmxhZ3MpIHx8CisJCSAgICB0ZXN0X2JpdChBVE1fVkZfQ0xPU0UsICZ2Y2MtPmZsYWdzKSB8fAorCQkgICAgIXRlc3RfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpKSB7CiAJCQllcnJvciA9IC1FUElQRTsKIAkJCXNlbmRfc2lnKFNJR1BJUEUsIGN1cnJlbnQsIDApOwogCQkJYnJlYWs7CkBAIC01NzQsMjAgKzU3NCwyMCBAQAogCQlnb3RvIG91dDsKIAlza2ItPmRldiA9IE5VTEw7IC8qIGZvciBwYXRocyBzaGFyZWQgd2l0aCBuZXRfZGV2aWNlIGludGVyZmFjZXMgKi8KIAlBVE1fU0tCKHNrYiktPmF0bV9vcHRpb25zID0gdmNjLT5hdG1fb3B0aW9uczsKLQlpZiAoY29weV9mcm9tX3VzZXIoc2tiX3B1dChza2Isc2l6ZSksYnVmZixzaXplKSkgeworCWlmIChjb3B5X2Zyb21fdXNlcihza2JfcHV0KHNrYiwgc2l6ZSksIGJ1ZmYsIHNpemUpKSB7CiAJCWtmcmVlX3NrYihza2IpOwogCQllcnJvciA9IC1FRkFVTFQ7CiAJCWdvdG8gb3V0OwogCX0KLQlpZiAoZWZmICE9IHNpemUpIG1lbXNldChza2ItPmRhdGErc2l6ZSwwLGVmZi1zaXplKTsKLQllcnJvciA9IHZjYy0+ZGV2LT5vcHMtPnNlbmQodmNjLHNrYik7CisJaWYgKGVmZiAhPSBzaXplKQorCQltZW1zZXQoc2tiLT5kYXRhICsgc2l6ZSwgMCwgZWZmLXNpemUpOworCWVycm9yID0gdmNjLT5kZXYtPm9wcy0+c2VuZCh2Y2MsIHNrYik7CiAJZXJyb3IgPSBlcnJvciA/IGVycm9yIDogc2l6ZTsKIG91dDoKIAlyZWxlYXNlX3NvY2soc2spOwogCXJldHVybiBlcnJvcjsKIH0KIAotCiB1bnNpZ25lZCBpbnQgdmNjX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIHBvbGxfdGFibGUgKndhaXQpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CkBAIC02MjMsOCArNjIzLDcgQEAKIAlyZXR1cm4gbWFzazsKIH0KIAotCi1zdGF0aWMgaW50IGF0bV9jaGFuZ2VfcW9zKHN0cnVjdCBhdG1fdmNjICp2Y2Msc3RydWN0IGF0bV9xb3MgKnFvcykKK3N0YXRpYyBpbnQgYXRtX2NoYW5nZV9xb3Moc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IGF0bV9xb3MgKnFvcykKIHsKIAlpbnQgZXJyb3I7CiAKQEAgLTYzNiwyNSArNjM1LDMxIEBACiAJICAgIHFvcy0+cnh0cC50cmFmZmljX2NsYXNzICE9IHZjYy0+cW9zLnJ4dHAudHJhZmZpY19jbGFzcyB8fAogCSAgICBxb3MtPnR4dHAudHJhZmZpY19jbGFzcyAhPSB2Y2MtPnFvcy50eHRwLnRyYWZmaWNfY2xhc3MpCiAJCXJldHVybiAtRUlOVkFMOwotCWVycm9yID0gYWRqdXN0X3RwKCZxb3MtPnR4dHAscW9zLT5hYWwpOwotCWlmICghZXJyb3IpIGVycm9yID0gYWRqdXN0X3RwKCZxb3MtPnJ4dHAscW9zLT5hYWwpOwotCWlmIChlcnJvcikgcmV0dXJuIGVycm9yOwotCWlmICghdmNjLT5kZXYtPm9wcy0+Y2hhbmdlX3FvcykgcmV0dXJuIC1FT1BOT1RTVVBQOworCWVycm9yID0gYWRqdXN0X3RwKCZxb3MtPnR4dHAsIHFvcy0+YWFsKTsKKwlpZiAoIWVycm9yKQorCQllcnJvciA9IGFkanVzdF90cCgmcW9zLT5yeHRwLCBxb3MtPmFhbCk7CisJaWYgKGVycm9yKQorCQlyZXR1cm4gZXJyb3I7CisJaWYgKCF2Y2MtPmRldi0+b3BzLT5jaGFuZ2VfcW9zKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJaWYgKHNrX2F0bSh2Y2MpLT5za19mYW1pbHkgPT0gQUZfQVRNUFZDKQotCQlyZXR1cm4gdmNjLT5kZXYtPm9wcy0+Y2hhbmdlX3Fvcyh2Y2MscW9zLEFUTV9NRl9TRVQpOwotCXJldHVybiBzdmNfY2hhbmdlX3Fvcyh2Y2MscW9zKTsKKwkJcmV0dXJuIHZjYy0+ZGV2LT5vcHMtPmNoYW5nZV9xb3ModmNjLCBxb3MsIEFUTV9NRl9TRVQpOworCXJldHVybiBzdmNfY2hhbmdlX3Fvcyh2Y2MsIHFvcyk7CiB9CiAKLQogc3RhdGljIGludCBjaGVja190cChjb25zdCBzdHJ1Y3QgYXRtX3RyYWZwcm0gKnRwKQogewogCS8qIEBAQCBTaG91bGQgYmUgbWVyZ2VkIHdpdGggYWRqdXN0X3RwICovCi0JaWYgKCF0cC0+dHJhZmZpY19jbGFzcyB8fCB0cC0+dHJhZmZpY19jbGFzcyA9PSBBVE1fQU5ZQ0xBU1MpIHJldHVybiAwOworCWlmICghdHAtPnRyYWZmaWNfY2xhc3MgfHwgdHAtPnRyYWZmaWNfY2xhc3MgPT0gQVRNX0FOWUNMQVNTKQorCQlyZXR1cm4gMDsKIAlpZiAodHAtPnRyYWZmaWNfY2xhc3MgIT0gQVRNX1VCUiAmJiAhdHAtPm1pbl9wY3IgJiYgIXRwLT5wY3IgJiYKLQkgICAgIXRwLT5tYXhfcGNyKSByZXR1cm4gLUVJTlZBTDsKLQlpZiAodHAtPm1pbl9wY3IgPT0gQVRNX01BWF9QQ1IpIHJldHVybiAtRUlOVkFMOworCSAgICAhdHAtPm1heF9wY3IpCisJCXJldHVybiAtRUlOVkFMOworCWlmICh0cC0+bWluX3BjciA9PSBBVE1fTUFYX1BDUikKKwkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHRwLT5taW5fcGNyICYmIHRwLT5tYXhfcGNyICYmIHRwLT5tYXhfcGNyICE9IEFUTV9NQVhfUENSICYmCi0JICAgIHRwLT5taW5fcGNyID4gdHAtPm1heF9wY3IpIHJldHVybiAtRUlOVkFMOworCSAgICB0cC0+bWluX3BjciA+IHRwLT5tYXhfcGNyKQorCQlyZXR1cm4gLUVJTlZBTDsKIAkvKgogCSAqIFdlIGFsbG93IHBjciB0byBiZSBvdXRzaWRlIFttaW5fcGNyLG1heF9wY3JdLCBiZWNhdXNlIGxhdGVyCiAJICogYWRqdXN0bWVudCBtYXkgc3RpbGwgcHVzaCBpdCBpbiB0aGUgdmFsaWQgcmFuZ2UuCkBAIC02NjIsNyArNjY3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiBzdGF0aWMgaW50IGNoZWNrX3Fvcyhjb25zdCBzdHJ1Y3QgYXRtX3FvcyAqcW9zKQogewogCWludCBlcnJvcjsKQEAgLTY3Miw5ICs2NzYsMTEgQEAKIAlpZiAocW9zLT50eHRwLnRyYWZmaWNfY2xhc3MgIT0gcW9zLT5yeHRwLnRyYWZmaWNfY2xhc3MgJiYKIAkgICAgcW9zLT50eHRwLnRyYWZmaWNfY2xhc3MgJiYgcW9zLT5yeHRwLnRyYWZmaWNfY2xhc3MgJiYKIAkgICAgcW9zLT50eHRwLnRyYWZmaWNfY2xhc3MgIT0gQVRNX0FOWUNMQVNTICYmCi0JICAgIHFvcy0+cnh0cC50cmFmZmljX2NsYXNzICE9IEFUTV9BTllDTEFTUykgcmV0dXJuIC1FSU5WQUw7CisJICAgIHFvcy0+cnh0cC50cmFmZmljX2NsYXNzICE9IEFUTV9BTllDTEFTUykKKwkJcmV0dXJuIC1FSU5WQUw7CiAJZXJyb3IgPSBjaGVja190cCgmcW9zLT50eHRwKTsKLQlpZiAoZXJyb3IpIHJldHVybiBlcnJvcjsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKIAlyZXR1cm4gY2hlY2tfdHAoJnFvcy0+cnh0cCk7CiB9CiAKQEAgLTY5MCwzNyArNjk2LDQxIEBACiAKIAl2Y2MgPSBBVE1fU0Qoc29jayk7CiAJc3dpdGNoIChvcHRuYW1lKSB7Ci0JCWNhc2UgU09fQVRNUU9TOgotCQkJewotCQkJCXN0cnVjdCBhdG1fcW9zIHFvczsKKwljYXNlIFNPX0FUTVFPUzoKKwl7CisJCXN0cnVjdCBhdG1fcW9zIHFvczsKIAotCQkJCWlmIChjb3B5X2Zyb21fdXNlcigmcW9zLG9wdHZhbCxzaXplb2YocW9zKSkpCi0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCWVycm9yID0gY2hlY2tfcW9zKCZxb3MpOwotCQkJCWlmIChlcnJvcikgcmV0dXJuIGVycm9yOwotCQkJCWlmIChzb2NrLT5zdGF0ZSA9PSBTU19DT05ORUNURUQpCi0JCQkJCXJldHVybiBhdG1fY2hhbmdlX3Fvcyh2Y2MsJnFvcyk7Ci0JCQkJaWYgKHNvY2stPnN0YXRlICE9IFNTX1VOQ09OTkVDVEVEKQotCQkJCQlyZXR1cm4gLUVCQURGRDsKLQkJCQl2Y2MtPnFvcyA9IHFvczsKLQkJCQlzZXRfYml0KEFUTV9WRl9IQVNRT1MsJnZjYy0+ZmxhZ3MpOwotCQkJCXJldHVybiAwOwotCQkJfQotCQljYXNlIFNPX1NFVENMUDoKLQkJCWlmIChnZXRfdXNlcih2YWx1ZSwodW5zaWduZWQgbG9uZyBfX3VzZXIgKilvcHR2YWwpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJaWYgKHZhbHVlKSB2Y2MtPmF0bV9vcHRpb25zIHw9IEFUTV9BVE1PUFRfQ0xQOwotCQkJZWxzZSB2Y2MtPmF0bV9vcHRpb25zICY9IH5BVE1fQVRNT1BUX0NMUDsKLQkJCXJldHVybiAwOwotCQlkZWZhdWx0OgotCQkJaWYgKGxldmVsID09IFNPTF9TT0NLRVQpIHJldHVybiAtRUlOVkFMOwotCQkJYnJlYWs7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmcW9zLCBvcHR2YWwsIHNpemVvZihxb3MpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQllcnJvciA9IGNoZWNrX3FvcygmcW9zKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCQlpZiAoc29jay0+c3RhdGUgPT0gU1NfQ09OTkVDVEVEKQorCQkJcmV0dXJuIGF0bV9jaGFuZ2VfcW9zKHZjYywgJnFvcyk7CisJCWlmIChzb2NrLT5zdGF0ZSAhPSBTU19VTkNPTk5FQ1RFRCkKKwkJCXJldHVybiAtRUJBREZEOworCQl2Y2MtPnFvcyA9IHFvczsKKwkJc2V0X2JpdChBVE1fVkZfSEFTUU9TLCAmdmNjLT5mbGFncyk7CisJCXJldHVybiAwOwogCX0KLQlpZiAoIXZjYy0+ZGV2IHx8ICF2Y2MtPmRldi0+b3BzLT5zZXRzb2Nrb3B0KSByZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gdmNjLT5kZXYtPm9wcy0+c2V0c29ja29wdCh2Y2MsbGV2ZWwsb3B0bmFtZSxvcHR2YWwsb3B0bGVuKTsKKwljYXNlIFNPX1NFVENMUDoKKwkJaWYgKGdldF91c2VyKHZhbHVlLCAodW5zaWduZWQgbG9uZyBfX3VzZXIgKilvcHR2YWwpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCWlmICh2YWx1ZSkKKwkJCXZjYy0+YXRtX29wdGlvbnMgfD0gQVRNX0FUTU9QVF9DTFA7CisJCWVsc2UKKwkJCXZjYy0+YXRtX29wdGlvbnMgJj0gfkFUTV9BVE1PUFRfQ0xQOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlpZiAobGV2ZWwgPT0gU09MX1NPQ0tFVCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwl9CisJaWYgKCF2Y2MtPmRldiB8fCAhdmNjLT5kZXYtPm9wcy0+c2V0c29ja29wdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIHZjYy0+ZGV2LT5vcHMtPnNldHNvY2tvcHQodmNjLCBsZXZlbCwgb3B0bmFtZSwgb3B0dmFsLCBvcHRsZW4pOwogfQogCi0KIGludCB2Y2NfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogCQkgICBjaGFyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pCiB7CkBAIC03MzQsMzMgKzc0NCwzMyBAQAogCiAJdmNjID0gQVRNX1NEKHNvY2spOwogCXN3aXRjaCAob3B0bmFtZSkgewotCQljYXNlIFNPX0FUTVFPUzoKLQkJCWlmICghdGVzdF9iaXQoQVRNX1ZGX0hBU1FPUywmdmNjLT5mbGFncykpCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlyZXR1cm4gY29weV90b191c2VyKG9wdHZhbCwmdmNjLT5xb3Msc2l6ZW9mKHZjYy0+cW9zKSkgPwotCQkJICAgIC1FRkFVTFQgOiAwOwotCQljYXNlIFNPX1NFVENMUDoKLQkJCXJldHVybiBwdXRfdXNlcih2Y2MtPmF0bV9vcHRpb25zICYgQVRNX0FUTU9QVF9DTFAgPyAxIDoKLQkJCSAgMCwodW5zaWduZWQgbG9uZyBfX3VzZXIgKilvcHR2YWwpID8gLUVGQVVMVCA6IDA7Ci0JCWNhc2UgU09fQVRNUFZDOgotCQkJewotCQkJCXN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgcHZjOworCWNhc2UgU09fQVRNUU9TOgorCQlpZiAoIXRlc3RfYml0KEFUTV9WRl9IQVNRT1MsICZ2Y2MtPmZsYWdzKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gY29weV90b191c2VyKG9wdHZhbCwgJnZjYy0+cW9zLCBzaXplb2YodmNjLT5xb3MpKQorCQkJPyAtRUZBVUxUIDogMDsKKwljYXNlIFNPX1NFVENMUDoKKwkJcmV0dXJuIHB1dF91c2VyKHZjYy0+YXRtX29wdGlvbnMgJiBBVE1fQVRNT1BUX0NMUCA/IDEgOiAwLAorCQkJCSh1bnNpZ25lZCBsb25nIF9fdXNlciAqKW9wdHZhbCkgPyAtRUZBVUxUIDogMDsKKwljYXNlIFNPX0FUTVBWQzoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgcHZjOwogCi0JCQkJaWYgKCF2Y2MtPmRldiB8fAotCQkJCSAgICAhdGVzdF9iaXQoQVRNX1ZGX0FERFIsJnZjYy0+ZmxhZ3MpKQotCQkJCQlyZXR1cm4gLUVOT1RDT05OOwotCQkJCXB2Yy5zYXBfZmFtaWx5ID0gQUZfQVRNUFZDOwotCQkJCXB2Yy5zYXBfYWRkci5pdGYgPSB2Y2MtPmRldi0+bnVtYmVyOwotCQkJCXB2Yy5zYXBfYWRkci52cGkgPSB2Y2MtPnZwaTsKLQkJCQlwdmMuc2FwX2FkZHIudmNpID0gdmNjLT52Y2k7Ci0JCQkJcmV0dXJuIGNvcHlfdG9fdXNlcihvcHR2YWwsJnB2YyxzaXplb2YocHZjKSkgPwotCQkJCSAgICAtRUZBVUxUIDogMDsKLQkJCX0KLQkJZGVmYXVsdDoKLQkJCWlmIChsZXZlbCA9PSBTT0xfU09DS0VUKSByZXR1cm4gLUVJTlZBTDsKKwkJaWYgKCF2Y2MtPmRldiB8fCAhdGVzdF9iaXQoQVRNX1ZGX0FERFIsICZ2Y2MtPmZsYWdzKSkKKwkJCXJldHVybiAtRU5PVENPTk47CisJCXB2Yy5zYXBfZmFtaWx5ID0gQUZfQVRNUFZDOworCQlwdmMuc2FwX2FkZHIuaXRmID0gdmNjLT5kZXYtPm51bWJlcjsKKwkJcHZjLnNhcF9hZGRyLnZwaSA9IHZjYy0+dnBpOworCQlwdmMuc2FwX2FkZHIudmNpID0gdmNjLT52Y2k7CisJCXJldHVybiBjb3B5X3RvX3VzZXIob3B0dmFsLCAmcHZjLCBzaXplb2YocHZjKSkgPyAtRUZBVUxUIDogMDsKKwl9CisJZGVmYXVsdDoKKwkJaWYgKGxldmVsID09IFNPTF9TT0NLRVQpCisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCWJyZWFrOwogCX0KLQlpZiAoIXZjYy0+ZGV2IHx8ICF2Y2MtPmRldi0+b3BzLT5nZXRzb2Nrb3B0KSByZXR1cm4gLUVJTlZBTDsKKwlpZiAoIXZjYy0+ZGV2IHx8ICF2Y2MtPmRldi0+b3BzLT5nZXRzb2Nrb3B0KQorCQlyZXR1cm4gLUVJTlZBTDsKIAlyZXR1cm4gdmNjLT5kZXYtPm9wcy0+Z2V0c29ja29wdCh2Y2MsIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIGxlbik7CiB9CiAKQEAgLTc2OCwyMyArNzc4LDI3IEBACiB7CiAJaW50IGVycm9yOwogCi0JaWYgKChlcnJvciA9IHByb3RvX3JlZ2lzdGVyKCZ2Y2NfcHJvdG8sIDApKSA8IDApCisJZXJyb3IgPSBwcm90b19yZWdpc3RlcigmdmNjX3Byb3RvLCAwKTsKKwlpZiAoZXJyb3IgPCAwKQogCQlnb3RvIG91dDsKLQotCWlmICgoZXJyb3IgPSBhdG1wdmNfaW5pdCgpKSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdG1wdmNfaW5pdCgpIGZhaWxlZCB3aXRoICVkXG4iLCBlcnJvcik7CisJZXJyb3IgPSBhdG1wdmNfaW5pdCgpOworCWlmIChlcnJvciA8IDApIHsKKwkJcHJfZXJyKCJhdG1wdmNfaW5pdCgpIGZhaWxlZCB3aXRoICVkXG4iLCBlcnJvcik7CiAJCWdvdG8gb3V0X3VucmVnaXN0ZXJfdmNjX3Byb3RvOwogCX0KLQlpZiAoKGVycm9yID0gYXRtc3ZjX2luaXQoKSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYXRtc3ZjX2luaXQoKSBmYWlsZWQgd2l0aCAlZFxuIiwgZXJyb3IpOworCWVycm9yID0gYXRtc3ZjX2luaXQoKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCXByX2VycigiYXRtc3ZjX2luaXQoKSBmYWlsZWQgd2l0aCAlZFxuIiwgZXJyb3IpOwogCQlnb3RvIG91dF9hdG1wdmNfZXhpdDsKIAl9Ci0JaWYgKChlcnJvciA9IGF0bV9wcm9jX2luaXQoKSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYXRtX3Byb2NfaW5pdCgpIGZhaWxlZCB3aXRoICVkXG4iLGVycm9yKTsKKwllcnJvciA9IGF0bV9wcm9jX2luaXQoKTsKKwlpZiAoZXJyb3IgPCAwKSB7CisJCXByX2VycigiYXRtX3Byb2NfaW5pdCgpIGZhaWxlZCB3aXRoICVkXG4iLCBlcnJvcik7CiAJCWdvdG8gb3V0X2F0bXN2Y19leGl0OwogCX0KLQlpZiAoKGVycm9yID0gYXRtX3N5c2ZzX2luaXQoKSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYXRtX3N5c2ZzX2luaXQoKSBmYWlsZWQgd2l0aCAlZFxuIixlcnJvcik7CisJZXJyb3IgPSBhdG1fc3lzZnNfaW5pdCgpOworCWlmIChlcnJvciA8IDApIHsKKwkJcHJfZXJyKCJhdG1fc3lzZnNfaW5pdCgpIGZhaWxlZCB3aXRoICVkXG4iLCBlcnJvcik7CiAJCWdvdG8gb3V0X2F0bXByb2NfZXhpdDsKIAl9CiBvdXQ6CmRpZmYgLS1naXQgYS9uZXQvYXRtL2lvY3RsLmMgYi9uZXQvYXRtL2lvY3RsLmMKaW5kZXggMmVhNDA5OS4uNjJkYzhiZiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9pb2N0bC5jCisrKyBiL25ldC9hdG0vaW9jdGwuYwpAQCAtMyw2ICszLDcgQEAKIC8qIFdyaXR0ZW4gMTk5NS0yMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovCiAvKiAyMDAzIEpvaG4gTGV2b24gIDxsZXZvbkBtb3ZlbWVudGFyaWFuLm9yZz4gKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiVzOiAiIGZtdCwgX19mdW5jX18KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ttb2QuaD4KQEAgLTM2LDYgKzM3LDcgQEAKIAlsaXN0X2FkZF90YWlsKCZpb2N0bC0+bGlzdCwgJmlvY3RsX2xpc3QpOwogCW11dGV4X3VubG9jaygmaW9jdGxfbXV0ZXgpOwogfQorRVhQT1JUX1NZTUJPTChyZWdpc3Rlcl9hdG1faW9jdGwpOwogCiB2b2lkIGRlcmVnaXN0ZXJfYXRtX2lvY3RsKHN0cnVjdCBhdG1faW9jdGwgKmlvY3RsKQogewpAQCAtNDMsMTI5ICs0NSwxMjggQEAKIAlsaXN0X2RlbCgmaW9jdGwtPmxpc3QpOwogCW11dGV4X3VubG9jaygmaW9jdGxfbXV0ZXgpOwogfQotCi1FWFBPUlRfU1lNQk9MKHJlZ2lzdGVyX2F0bV9pb2N0bCk7CiBFWFBPUlRfU1lNQk9MKGRlcmVnaXN0ZXJfYXRtX2lvY3RsKTsKIAotc3RhdGljIGludCBkb192Y2NfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcsIGludCBjb21wYXQpCitzdGF0aWMgaW50IGRvX3ZjY19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJdW5zaWduZWQgbG9uZyBhcmcsIGludCBjb21wYXQpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IGF0bV92Y2MgKnZjYzsKIAlpbnQgZXJyb3I7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqIHBvczsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJdm9pZCBfX3VzZXIgKmFyZ3AgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAKIAl2Y2MgPSBBVE1fU0Qoc29jayk7CiAJc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBTSU9DT1VUUToKLQkJCWlmIChzb2NrLT5zdGF0ZSAhPSBTU19DT05ORUNURUQgfHwKLQkJCSAgICAhdGVzdF9iaXQoQVRNX1ZGX1JFQURZLCAmdmNjLT5mbGFncykpIHsKLQkJCQllcnJvciA9ICAtRUlOVkFMOwotCQkJCWdvdG8gZG9uZTsKLQkJCX0KLQkJCWVycm9yID0gcHV0X3VzZXIoc2stPnNrX3NuZGJ1ZiAtIHNrX3dtZW1fYWxsb2NfZ2V0KHNrKSwKLQkJCQkJIChpbnQgX191c2VyICopIGFyZ3ApID8gLUVGQVVMVCA6IDA7CisJY2FzZSBTSU9DT1VUUToKKwkJaWYgKHNvY2stPnN0YXRlICE9IFNTX0NPTk5FQ1RFRCB8fAorCQkgICAgIXRlc3RfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpKSB7CisJCQllcnJvciA9ICAtRUlOVkFMOwogCQkJZ290byBkb25lOwotCQljYXNlIFNJT0NJTlE6Ci0JCQl7Ci0JCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJfQorCQllcnJvciA9IHB1dF91c2VyKHNrLT5za19zbmRidWYgLSBza193bWVtX2FsbG9jX2dldChzayksCisJCQkJIChpbnQgX191c2VyICopYXJncCkgPyAtRUZBVUxUIDogMDsKKwkJZ290byBkb25lOworCWNhc2UgU0lPQ0lOUToKKwl7CisJCXN0cnVjdCBza19idWZmICpza2I7CiAKLQkJCQlpZiAoc29jay0+c3RhdGUgIT0gU1NfQ09OTkVDVEVEKSB7Ci0JCQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCQkJZ290byBkb25lOwotCQkJCX0KLQkJCQlza2IgPSBza2JfcGVlaygmc2stPnNrX3JlY2VpdmVfcXVldWUpOwotCQkJCWVycm9yID0gcHV0X3VzZXIoc2tiID8gc2tiLT5sZW4gOiAwLAotCQkJCQkJIChpbnQgX191c2VyICopYXJncCkgPyAtRUZBVUxUIDogMDsKLQkJCQlnb3RvIGRvbmU7Ci0JCQl9Ci0JCWNhc2UgU0lPQ0dTVEFNUDogLyogYm9ycm93ZWQgZnJvbSBJUCAqLwotI2lmZGVmIENPTkZJR19DT01QQVQKLQkJCWlmIChjb21wYXQpCi0JCQkJZXJyb3IgPSBjb21wYXRfc29ja19nZXRfdGltZXN0YW1wKHNrLCBhcmdwKTsKLQkJCWVsc2UKLSNlbmRpZgotCQkJCWVycm9yID0gc29ja19nZXRfdGltZXN0YW1wKHNrLCBhcmdwKTsKKwkJaWYgKHNvY2stPnN0YXRlICE9IFNTX0NPTk5FQ1RFRCkgeworCQkJZXJyb3IgPSAtRUlOVkFMOwogCQkJZ290byBkb25lOwotCQljYXNlIFNJT0NHU1RBTVBOUzogLyogYm9ycm93ZWQgZnJvbSBJUCAqLworCQl9CisJCXNrYiA9IHNrYl9wZWVrKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSk7CisJCWVycm9yID0gcHV0X3VzZXIoc2tiID8gc2tiLT5sZW4gOiAwLAorCQkJCSAoaW50IF9fdXNlciAqKWFyZ3ApID8gLUVGQVVMVCA6IDA7CisJCWdvdG8gZG9uZTsKKwl9CisJY2FzZSBTSU9DR1NUQU1QOiAvKiBib3Jyb3dlZCBmcm9tIElQICovCiAjaWZkZWYgQ09ORklHX0NPTVBBVAotCQkJaWYgKGNvbXBhdCkKLQkJCQllcnJvciA9IGNvbXBhdF9zb2NrX2dldF90aW1lc3RhbXBucyhzaywgYXJncCk7Ci0JCQllbHNlCisJCWlmIChjb21wYXQpCisJCQllcnJvciA9IGNvbXBhdF9zb2NrX2dldF90aW1lc3RhbXAoc2ssIGFyZ3ApOworCQllbHNlCiAjZW5kaWYKLQkJCQllcnJvciA9IHNvY2tfZ2V0X3RpbWVzdGFtcG5zKHNrLCBhcmdwKTsKKwkJCWVycm9yID0gc29ja19nZXRfdGltZXN0YW1wKHNrLCBhcmdwKTsKKwkJZ290byBkb25lOworCWNhc2UgU0lPQ0dTVEFNUE5TOiAvKiBib3Jyb3dlZCBmcm9tIElQICovCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCQlpZiAoY29tcGF0KQorCQkJZXJyb3IgPSBjb21wYXRfc29ja19nZXRfdGltZXN0YW1wbnMoc2ssIGFyZ3ApOworCQllbHNlCisjZW5kaWYKKwkJCWVycm9yID0gc29ja19nZXRfdGltZXN0YW1wbnMoc2ssIGFyZ3ApOworCQlnb3RvIGRvbmU7CisJY2FzZSBBVE1fU0VUU0M6CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcl93YXJuaW5nKCJBVE1fU0VUU0MgaXMgb2Jzb2xldGU7IHVzZWQgYnkgJXM6JWRcbiIsCisJCQkJICAgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCkpOworCQllcnJvciA9IDA7CisJCWdvdG8gZG9uZTsKKwljYXNlIEFUTVNJR0RfQ1RSTDoKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7CisJCQllcnJvciA9IC1FUEVSTTsKIAkJCWdvdG8gZG9uZTsKLQkJY2FzZSBBVE1fU0VUU0M6CisJCX0KKwkJLyoKKwkJICogVGhlIHVzZXIva2VybmVsIHByb3RvY29sIGZvciBleGNoYW5naW5nIHNpZ25hbGxpbmcKKwkJICogaW5mbyB1c2VzIGtlcm5lbCBwb2ludGVycyBhcyBvcGFxdWUgcmVmZXJlbmNlcywKKwkJICogc28gdGhlIGhvbGRlciBvZiB0aGUgZmlsZSBkZXNjcmlwdG9yIGNhbiBzY3JpYmJsZQorCQkgKiBvbiB0aGUga2VybmVsLi4uIHNvIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB3ZQorCQkgKiBoYXZlIHRoZSBzYW1lIHByaXZpbGVnZXMgdGhhdCAvcHJvYy9rY29yZSBuZWVkcworCQkgKi8KKwkJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKSB7CisJCQllcnJvciA9IC1FUEVSTTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorI2lmZGVmIENPTkZJR19DT01QQVQKKwkJLyogV1RGPyBJIGRvbid0IGV2ZW4gd2FudCB0byBfdGhpbmtfIGFib3V0IG1ha2luZyB0aGlzCisJCSAgIHdvcmsgZm9yIDMyLWJpdCB1c2Vyc3BhY2UuIFRCSCBJIGRvbid0IHJlYWxseSB3YW50CisJCSAgIHRvIHRoaW5rIGFib3V0IGl0IGF0IGFsbC4gZHdtdzIuICovCisJCWlmIChjb21wYXQpIHsKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQVRNX1NFVFNDIGlzIG9ic29sZXRlOyB1c2VkIGJ5ICVzOiVkXG4iLAotCQkJCSAgICAgICBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSk7Ci0JCQllcnJvciA9IDA7CisJCQkJcHJfd2FybmluZygiMzItYml0IHRhc2sgY2Fubm90IGJlIGF0bXNpZ2RcbiIpOworCQkJZXJyb3IgPSAtRUlOVkFMOwogCQkJZ290byBkb25lOwotCQljYXNlIEFUTVNJR0RfQ1RSTDoKLQkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgewotCQkJCWVycm9yID0gLUVQRVJNOwotCQkJCWdvdG8gZG9uZTsKLQkJCX0KLQkJCS8qCi0JCQkgKiBUaGUgdXNlci9rZXJuZWwgcHJvdG9jb2wgZm9yIGV4Y2hhbmdpbmcgc2lnbmFsbGluZwotCQkJICogaW5mbyB1c2VzIGtlcm5lbCBwb2ludGVycyBhcyBvcGFxdWUgcmVmZXJlbmNlcywKLQkJCSAqIHNvIHRoZSBob2xkZXIgb2YgdGhlIGZpbGUgZGVzY3JpcHRvciBjYW4gc2NyaWJibGUKLQkJCSAqIG9uIHRoZSBrZXJuZWwuLi4gc28gd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHdlCi0JCQkgKiBoYXZlIHRoZSBzYW1lIHByaXZpbGVnZXMgdGhhdCAvcHJvYy9rY29yZSBuZWVkcwotCQkJICovCi0JCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpIHsKLQkJCQllcnJvciA9IC1FUEVSTTsKLQkJCQlnb3RvIGRvbmU7Ci0JCQl9Ci0jaWZkZWYgQ09ORklHX0NPTVBBVAotCQkJLyogV1RGPyBJIGRvbid0IGV2ZW4gd2FudCB0byBfdGhpbmtfIGFib3V0IG1ha2luZyB0aGlzCi0JCQkgICB3b3JrIGZvciAzMi1iaXQgdXNlcnNwYWNlLiBUQkggSSBkb24ndCByZWFsbHkgd2FudAotCQkJICAgdG8gdGhpbmsgYWJvdXQgaXQgYXQgYWxsLiBkd213Mi4gKi8KLQkJCWlmIChjb21wYXQpIHsKLQkJCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCQlwcmludGsoS0VSTl9XQVJOSU5HICIzMi1iaXQgdGFzayBjYW5ub3QgYmUgYXRtc2lnZFxuIik7Ci0JCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJCWdvdG8gZG9uZTsKLQkJCX0KKwkJfQogI2VuZGlmCi0JCQllcnJvciA9IHNpZ2RfYXR0YWNoKHZjYyk7Ci0JCQlpZiAoIWVycm9yKQotCQkJCXNvY2stPnN0YXRlID0gU1NfQ09OTkVDVEVEOworCQllcnJvciA9IHNpZ2RfYXR0YWNoKHZjYyk7CisJCWlmICghZXJyb3IpCisJCQlzb2NrLT5zdGF0ZSA9IFNTX0NPTk5FQ1RFRDsKKwkJZ290byBkb25lOworCWNhc2UgQVRNX1NFVEJBQ0tFTkQ6CisJY2FzZSBBVE1fTkVXQkFDS0VORElGOgorCXsKKwkJYXRtX2JhY2tlbmRfdCBiYWNrZW5kOworCQllcnJvciA9IGdldF91c2VyKGJhY2tlbmQsIChhdG1fYmFja2VuZF90IF9fdXNlciAqKWFyZ3ApOworCQlpZiAoZXJyb3IpCiAJCQlnb3RvIGRvbmU7Ci0JCWNhc2UgQVRNX1NFVEJBQ0tFTkQ6Ci0JCWNhc2UgQVRNX05FV0JBQ0tFTkRJRjoKLQkJCXsKLQkJCQlhdG1fYmFja2VuZF90IGJhY2tlbmQ7Ci0JCQkJZXJyb3IgPSBnZXRfdXNlcihiYWNrZW5kLCAoYXRtX2JhY2tlbmRfdCBfX3VzZXIgKikgYXJncCk7Ci0JCQkJaWYgKGVycm9yKQotCQkJCQlnb3RvIGRvbmU7Ci0JCQkJc3dpdGNoIChiYWNrZW5kKSB7Ci0JCQkJCWNhc2UgQVRNX0JBQ0tFTkRfUFBQOgotCQkJCQkJcmVxdWVzdF9tb2R1bGUoInBwcG9hdG0iKTsKLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIEFUTV9CQUNLRU5EX0JSMjY4NDoKLQkJCQkJCXJlcXVlc3RfbW9kdWxlKCJicjI2ODQiKTsKLQkJCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KKwkJc3dpdGNoIChiYWNrZW5kKSB7CisJCWNhc2UgQVRNX0JBQ0tFTkRfUFBQOgorCQkJcmVxdWVzdF9tb2R1bGUoInBwcG9hdG0iKTsKIAkJCWJyZWFrOwotCQljYXNlIEFUTU1QQ19DVFJMOgotCQljYXNlIEFUTU1QQ19EQVRBOgotCQkJcmVxdWVzdF9tb2R1bGUoIm1wb2EiKTsKKwkJY2FzZSBBVE1fQkFDS0VORF9CUjI2ODQ6CisJCQlyZXF1ZXN0X21vZHVsZSgiYnIyNjg0Iik7CiAJCQlicmVhazsKLQkJY2FzZSBBVE1BUlBEX0NUUkw6Ci0JCQlyZXF1ZXN0X21vZHVsZSgiY2xpcCIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVRNTEVDX0NUUkw6Ci0JCQlyZXF1ZXN0X21vZHVsZSgibGVjIik7Ci0JCQlicmVhazsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBBVE1NUENfQ1RSTDoKKwljYXNlIEFUTU1QQ19EQVRBOgorCQlyZXF1ZXN0X21vZHVsZSgibXBvYSIpOworCQlicmVhazsKKwljYXNlIEFUTUFSUERfQ1RSTDoKKwkJcmVxdWVzdF9tb2R1bGUoImNsaXAiKTsKKwkJYnJlYWs7CisJY2FzZSBBVE1MRUNfQ1RSTDoKKwkJcmVxdWVzdF9tb2R1bGUoImxlYyIpOworCQlicmVhazsKIAl9CiAKIAllcnJvciA9IC1FTk9JT0NUTENNRDsKIAogCW11dGV4X2xvY2soJmlvY3RsX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoKHBvcywgJmlvY3RsX2xpc3QpIHsKLQkJc3RydWN0IGF0bV9pb2N0bCAqIGljID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCBhdG1faW9jdGwsIGxpc3QpOworCQlzdHJ1Y3QgYXRtX2lvY3RsICppYyA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgYXRtX2lvY3RsLCBsaXN0KTsKIAkJaWYgKHRyeV9tb2R1bGVfZ2V0KGljLT5vd25lcikpIHsKIAkJCWVycm9yID0gaWMtPmlvY3RsKHNvY2ssIGNtZCwgYXJnKTsKIAkJCW1vZHVsZV9wdXQoaWMtPm93bmVyKTsKQEAgLTE4NCw3ICsxODUsNiBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotCiBpbnQgdmNjX2lvY3RsKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXJldHVybiBkb192Y2NfaW9jdGwoc29jaywgY21kLCBhcmcsIDApOwpAQCAtMjg3LDggKzI4Nyw4IEBACiAJc2lvYyA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZigqc2lvYykpOwogCXNpb2MzMiA9IGNvbXBhdF9wdHIoYXJnKTsKIAotCWlmIChjb3B5X2luX3VzZXIoJnNpb2MtPm51bWJlciwgJnNpb2MzMi0+bnVtYmVyLCAyICogc2l6ZW9mKGludCkpCi0JICAgIHx8IGdldF91c2VyKGRhdGEsICZzaW9jMzItPmFyZykpCisJaWYgKGNvcHlfaW5fdXNlcigmc2lvYy0+bnVtYmVyLCAmc2lvYzMyLT5udW1iZXIsIDIgKiBzaXplb2YoaW50KSkgfHwKKwkgICAgZ2V0X3VzZXIoZGF0YSwgJnNpb2MzMi0+YXJnKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJZGF0YXAgPSBjb21wYXRfcHRyKGRhdGEpOwogCWlmIChwdXRfdXNlcihkYXRhcCwgJnNpb2MtPmFyZykpCmRpZmYgLS1naXQgYS9uZXQvYXRtL2xlYy5jIGIvbmV0L2F0bS9sZWMuYwppbmRleCA0Mjc0OWI3Li41ZGE1NzUzIDEwMDY0NAotLS0gYS9uZXQvYXRtL2xlYy5jCisrKyBiL25ldC9hdG0vbGVjLmMKQEAgLTQsNiArNCw4IEBACiAgKiBNYXJrbyBLaWlza2lsYSA8bWtpaXNraWxhQHlhaG9vLmNvbT4KICAqLwogCisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6JXM6ICIgZm10LCBfX2Z1bmNfXworCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgpAQCAtMTYsNyArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogI2luY2x1ZGUgPG5ldC9hcnAuaD4KICNpbmNsdWRlIDxuZXQvZHN0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgpAQCAtODUsMTcgKzg3LDE5IEBACiAJCQkJICAgICAgIGludCBpc19yZGVzYywKIAkJCQkgICAgICAgc3RydWN0IGxlY19hcnBfdGFibGUgKipyZXRfZW50cnkpOwogc3RhdGljIHZvaWQgbGVjX2FycF91cGRhdGUoc3RydWN0IGxlY19wcml2ICpwcml2LCBjb25zdCB1bnNpZ25lZCBjaGFyICptYWNfYWRkciwKLQkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmF0bV9hZGRyLCB1bnNpZ25lZCBsb25nIHJlbW90ZWZsYWcsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICphdG1fYWRkciwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgcmVtb3RlZmxhZywKIAkJCSAgIHVuc2lnbmVkIGludCB0YXJnZXRsZXNzX2xlX2FycCk7CiBzdGF0aWMgdm9pZCBsZWNfZmx1c2hfY29tcGxldGUoc3RydWN0IGxlY19wcml2ICpwcml2LCB1bnNpZ25lZCBsb25nIHRyYW5faWQpOwogc3RhdGljIGludCBsZWNfbWNhc3RfbWFrZShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIHN0cnVjdCBhdG1fdmNjICp2Y2MpOwogc3RhdGljIHZvaWQgbGVjX3NldF9mbHVzaF90cmFuX2lkKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwKIAkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmF0bV9hZGRyLAogCQkJCSAgdW5zaWduZWQgbG9uZyB0cmFuX2lkKTsKLXN0YXRpYyB2b2lkIGxlY192Y2NfYWRkZWQoc3RydWN0IGxlY19wcml2ICpwcml2LCBjb25zdCBzdHJ1Y3QgYXRtbGVjX2lvYyAqaW9jX2RhdGEsCitzdGF0aWMgdm9pZCBsZWNfdmNjX2FkZGVkKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwKKwkJCSAgY29uc3Qgc3RydWN0IGF0bWxlY19pb2MgKmlvY19kYXRhLAogCQkJICBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLAotCQkJICB2b2lkICgqb2xkX3B1c2gpIChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLAotCQkJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikpOworCQkJICB2b2lkICgqb2xkX3B1c2gpKHN0cnVjdCBhdG1fdmNjICp2Y2MsCisJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpKTsKIHN0YXRpYyB2b2lkIGxlY192Y2NfY2xvc2Uoc3RydWN0IGxlY19wcml2ICpwcml2LCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjKTsKIAogLyogbXVzdCBiZSBkb25lIHVuZGVyIGxlY19hcnBfbG9jayAqLwpAQCAtMTEwLDcgKzExNCw2IEBACiAJCWtmcmVlKGVudHJ5KTsKIH0KIAotCiBzdGF0aWMgc3RydWN0IGxhbmUyX29wcyBsYW5lMl9vcHMgPSB7CiAJbGFuZTJfcmVzb2x2ZSwJCS8qIHJlc29sdmUsICAgICAgICAgICAgIHNwZWMgMy4xLjMgKi8KIAlsYW5lMl9hc3NvY2lhdGVfcmVxLAkvKiBhc3NvY2lhdGVfcmVxLCAgICAgICBzcGVjIDMuMS40ICovCkBAIC0xNDgsNyArMTUxLDggQEAKIAkJbWVzZyA9IChzdHJ1Y3QgYXRtbGVjX21zZyAqKXNrYjItPmRhdGE7CiAJCW1lc2ctPnR5cGUgPSBsX3RvcG9sb2d5X2NoYW5nZTsKIAkJYnVmZiArPSA0OwotCQltZXNnLT5jb250ZW50Lm5vcm1hbC5mbGFnID0gKmJ1ZmYgJiAweDAxOwkvKiAweDAxIGlzIHRvcG9sb2d5IGNoYW5nZSAqLworCQltZXNnLT5jb250ZW50Lm5vcm1hbC5mbGFnID0gKmJ1ZmYgJiAweDAxOworCQkJCQkvKiAweDAxIGlzIHRvcG9sb2d5IGNoYW5nZSAqLwogCiAJCXByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCQlhdG1fZm9yY2VfY2hhcmdlKHByaXYtPmxlY2QsIHNrYjItPnRydWVzaXplKTsKQEAgLTI0Miw3ICsyNDYsNyBAQAogCiBzdGF0aWMgdm9pZCBsZWNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXByaW50ayhLRVJOX0lORk8gIiVzOiB0eCB0aW1lb3V0XG4iLCBkZXYtPm5hbWUpOworCXByX2luZm8oIiVzXG4iLCBkZXYtPm5hbWUpOwogCWRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOwogCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIH0KQEAgLTI2MSwxNCArMjY1LDEwIEBACiAJdW5zaWduZWQgY2hhciByZGVzY1tFVEhfQUxFTl07CS8qIFRva2VuIFJpbmcgcm91dGUgZGVzY3JpcHRvciAqLwogI2VuZGlmCiAJaW50IGlzX3JkZXNjOwotI2lmIERVTVBfUEFDS0VUUyA+IDAKLQljaGFyIGJ1ZlszMDBdOwotCWludCBpID0gMDsKLSNlbmRpZiAvKiBEVU1QX1BBQ0tFVFMgPjAgKi8KIAotCXByX2RlYnVnKCJsZWNfc3RhcnRfeG1pdCBjYWxsZWRcbiIpOworCXByX2RlYnVnKCJjYWxsZWRcbiIpOwogCWlmICghcHJpdi0+bGVjZCkgewotCQlwcmludGsoIiVzOk5vIGxlY2QgYXR0YWNoZWRcbiIsIGRldi0+bmFtZSk7CisJCXByX2luZm8oIiVzOk5vIGxlY2QgYXR0YWNoZWRcbiIsIGRldi0+bmFtZSk7CiAJCWRldi0+c3RhdHMudHhfZXJyb3JzKys7CiAJCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKIAkJa2ZyZWVfc2tiKHNrYik7CkBAIC0yNzYsOCArMjc2LDggQEAKIAl9CiAKIAlwcl9kZWJ1Zygic2tidWZmIGhlYWQ6JWx4IGRhdGE6JWx4IHRhaWw6JWx4IGVuZDolbHhcbiIsCi0JCShsb25nKXNrYi0+aGVhZCwgKGxvbmcpc2tiLT5kYXRhLCAobG9uZylza2JfdGFpbF9wb2ludGVyKHNrYiksCi0JCShsb25nKXNrYl9lbmRfcG9pbnRlcihza2IpKTsKKwkJIChsb25nKXNrYi0+aGVhZCwgKGxvbmcpc2tiLT5kYXRhLCAobG9uZylza2JfdGFpbF9wb2ludGVyKHNrYiksCisJCSAobG9uZylza2JfZW5kX3BvaW50ZXIoc2tiKSk7CiAjaWYgZGVmaW5lZChDT05GSUdfQlJJREdFKSB8fCBkZWZpbmVkKENPTkZJR19CUklER0VfTU9EVUxFKQogCWlmIChtZW1jbXAoc2tiLT5kYXRhLCBicmlkZ2VfdWxhX2xlYywgc2l6ZW9mKGJyaWRnZV91bGFfbGVjKSkgPT0gMCkKIAkJbGVjX2hhbmRsZV9icmlkZ2Uoc2tiLCBkZXYpOwpAQCAtMjg1LDggKzI4NSw3IEBACiAKIAkvKiBNYWtlIHN1cmUgd2UgaGF2ZSByb29tIGZvciBsZWNfaWQgKi8KIAlpZiAoc2tiX2hlYWRyb29tKHNrYikgPCAyKSB7Ci0KLQkJcHJfZGVidWcoImxlY19zdGFydF94bWl0OiByZWFsbG9jYXRpbmcgc2tiXG4iKTsKKwkJcHJfZGVidWcoInJlYWxsb2NhdGluZyBza2JcbiIpOwogCQlza2IyID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBMRUNfSEVBREVSX0xFTik7CiAJCWtmcmVlX3NrYihza2IpOwogCQlpZiAoc2tiMiA9PSBOVUxMKQpAQCAtMzEzLDIzICszMTIsMTcgQEAKIAl9CiAjZW5kaWYKIAotI2lmIERVTVBfUEFDS0VUUyA+IDAKLQlwcmludGsoIiVzOiBzZW5kIGRhdGFsZW46JWxkIGxlY2lkOiU0LjR4XG4iLCBkZXYtPm5hbWUsCi0JICAgICAgIHNrYi0+bGVuLCBwcml2LT5sZWNpZCk7CiAjaWYgRFVNUF9QQUNLRVRTID49IDIKLQlmb3IgKGkgPSAwOyBpIDwgc2tiLT5sZW4gJiYgaSA8IDk5OyBpKyspIHsKLQkJc3ByaW50ZihidWYgKyBpICogMywgIiUyLjJ4ICIsIDB4ZmYgJiBza2ItPmRhdGFbaV0pOwotCX0KKyNkZWZpbmUgTUFYX0RVTVBfU0tCIDk5CiAjZWxpZiBEVU1QX1BBQ0tFVFMgPj0gMQotCWZvciAoaSA9IDA7IGkgPCBza2ItPmxlbiAmJiBpIDwgMzA7IGkrKykgewotCQlzcHJpbnRmKGJ1ZiArIGkgKiAzLCAiJTIuMnggIiwgMHhmZiAmIHNrYi0+ZGF0YVtpXSk7Ci0JfQorI2RlZmluZSBNQVhfRFVNUF9TS0IgMzAKKyNlbmRpZgorI2lmIERVTVBfUEFDS0VUUyA+PSAxCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzZW5kIGRhdGFsZW46JWxkIGxlY2lkOiU0LjR4XG4iLAorCSAgICAgICBkZXYtPm5hbWUsIHNrYi0+bGVuLCBwcml2LT5sZWNpZCk7CisJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgIiIsIERVTVBfT0ZGU0VULCAxNiwgMSwKKwkJICAgICAgIHNrYi0+ZGF0YSwgbWluKHNrYi0+bGVuLCBNQVhfRFVNUF9TS0IpLCB0cnVlKTsKICNlbmRpZiAvKiBEVU1QX1BBQ0tFVFMgPj0gMSAqLwotCWlmIChpID09IHNrYi0+bGVuKQotCQlwcmludGsoIiVzXG4iLCBidWYpOwotCWVsc2UKLQkJcHJpbnRrKCIlcy4uLlxuIiwgYnVmKTsKLSNlbmRpZiAvKiBEVU1QX1BBQ0tFVFMgPiAwICovCiAKIAkvKiBNaW5pbXVtIGV0aGVybmV0LWZyYW1lIHNpemUgKi8KICNpZmRlZiBDT05GSUdfVFIKQEAgLTM2NywzMSArMzYwLDI4IEBACiAjZW5kaWYKIAllbnRyeSA9IE5VTEw7CiAJdmNjID0gbGVjX2FycF9yZXNvbHZlKHByaXYsIGRzdCwgaXNfcmRlc2MsICZlbnRyeSk7Ci0JcHJfZGVidWcoIiVzOnZjYzolcCB2Y2NfZmxhZ3M6JWx4LCBlbnRyeTolcFxuIiwgZGV2LT5uYW1lLAotCQl2Y2MsIHZjYyA/IHZjYy0+ZmxhZ3MgOiAwLCBlbnRyeSk7CisJcHJfZGVidWcoIiVzOnZjYzolcCB2Y2NfZmxhZ3M6JWx4LCBlbnRyeTolcFxuIiwKKwkJIGRldi0+bmFtZSwgdmNjLCB2Y2MgPyB2Y2MtPmZsYWdzIDogMCwgZW50cnkpOwogCWlmICghdmNjIHx8ICF0ZXN0X2JpdChBVE1fVkZfUkVBRFksICZ2Y2MtPmZsYWdzKSkgewogCQlpZiAoZW50cnkgJiYgKGVudHJ5LT50eF93YWl0LnFsZW4gPCBMRUNfVU5SRVNfUVVFX0xFTikpIHsKLQkJCXByX2RlYnVnKCIlczpsZWNfc3RhcnRfeG1pdDogcXVldWluZyBwYWNrZXQsICIsCi0JCQkJZGV2LT5uYW1lKTsKLQkJCXByX2RlYnVnKCJNQUMgYWRkcmVzcyAlcE1cbiIsIGxlY19oLT5oX2Rlc3QpOworCQkJcHJfZGVidWcoIiVzOnF1ZXVpbmcgcGFja2V0LCBNQUMgYWRkcmVzcyAlcE1cbiIsCisJCQkJIGRldi0+bmFtZSwgbGVjX2gtPmhfZGVzdCk7CiAJCQlza2JfcXVldWVfdGFpbCgmZW50cnktPnR4X3dhaXQsIHNrYik7CiAJCX0gZWxzZSB7Ci0JCQlwcl9kZWJ1ZwotCQkJICAgICgiJXM6bGVjX3N0YXJ0X3htaXQ6IHR4IHF1ZXVlIGZ1bGwgb3Igbm8gYXJwIGVudHJ5LCBkcm9wcGluZywgIiwKLQkJCSAgICAgZGV2LT5uYW1lKTsKLQkJCXByX2RlYnVnKCJNQUMgYWRkcmVzcyAlcE1cbiIsIGxlY19oLT5oX2Rlc3QpOworCQkJcHJfZGVidWcoIiVzOnR4IHF1ZXVlIGZ1bGwgb3Igbm8gYXJwIGVudHJ5LCBkcm9wcGluZywgTUFDIGFkZHJlc3M6ICVwTVxuIiwKKwkJCQkgZGV2LT5uYW1lLCBsZWNfaC0+aF9kZXN0KTsKIAkJCWRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQl9CiAJCWdvdG8gb3V0OwogCX0KICNpZiBEVU1QX1BBQ0tFVFMgPiAwCi0JcHJpbnRrKCIlczpzZW5kaW5nIHRvIHZwaTolZCB2Y2k6JWRcbiIsIGRldi0+bmFtZSwgdmNjLT52cGksIHZjYy0+dmNpKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6c2VuZGluZyB0byB2cGk6JWQgdmNpOiVkXG4iLAorCSAgICAgICBkZXYtPm5hbWUsIHZjYy0+dnBpLCB2Y2MtPnZjaSk7CiAjZW5kaWYgLyogRFVNUF9QQUNLRVRTID4gMCAqLwogCiAJd2hpbGUgKGVudHJ5ICYmIChza2IyID0gc2tiX2RlcXVldWUoJmVudHJ5LT50eF93YWl0KSkpIHsKLQkJcHJfZGVidWcoImxlYy5jOiBlbXB0eWluZyB0eCBxdWV1ZSwgIik7Ci0JCXByX2RlYnVnKCJNQUMgYWRkcmVzcyAlcE1cbiIsIGxlY19oLT5oX2Rlc3QpOworCQlwcl9kZWJ1ZygiZW1wdHlpbmcgdHggcXVldWUsIE1BQyBhZGRyZXNzICVwTVxuIiwgbGVjX2gtPmhfZGVzdCk7CiAJCWxlY19zZW5kKHZjYywgc2tiMik7CiAJfQogCkBAIC00NDQsMTQgKzQzNCwxMiBAQAogCXByX2RlYnVnKCIlczogbXNnIGZyb20gemVwcGVsaW46JWRcbiIsIGRldi0+bmFtZSwgbWVzZy0+dHlwZSk7CiAJc3dpdGNoIChtZXNnLT50eXBlKSB7CiAJY2FzZSBsX3NldF9tYWNfYWRkcjoKLQkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKQogCQkJZGV2LT5kZXZfYWRkcltpXSA9IG1lc2ctPmNvbnRlbnQubm9ybWFsLm1hY19hZGRyW2ldOwotCQl9CiAJCWJyZWFrOwogCWNhc2UgbF9kZWxfbWFjX2FkZHI6Ci0JCWZvciAoaSA9IDA7IGkgPCA2OyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykKIAkJCWRldi0+ZGV2X2FkZHJbaV0gPSAwOwotCQl9CiAJCWJyZWFrOwogCWNhc2UgbF9hZGRyX2RlbGV0ZToKIAkJbGVjX2FkZHJfZGVsZXRlKHByaXYsIG1lc2ctPmNvbnRlbnQubm9ybWFsLmF0bV9hZGRyLApAQCAtNDc3LDEwICs0NjUsMTAgQEAKIAkJCSAgICAgICBtZXNnLT5jb250ZW50Lm5vcm1hbC5hdG1fYWRkciwKIAkJCSAgICAgICBtZXNnLT5jb250ZW50Lm5vcm1hbC5mbGFnLAogCQkJICAgICAgIG1lc2ctPmNvbnRlbnQubm9ybWFsLnRhcmdldGxlc3NfbGVfYXJwKTsKLQkJcHJfZGVidWcoImxlYzogaW4gbF9hcnBfdXBkYXRlXG4iKTsKKwkJcHJfZGVidWcoImluIGxfYXJwX3VwZGF0ZVxuIik7CiAJCWlmIChtZXNnLT5zaXplb2Z0bHZzICE9IDApIHsJLyogTEFORTIgMy4xLjUgKi8KLQkJCXByX2RlYnVnKCJsZWM6IExBTkUyIDMuMS41LCBnb3QgdGx2cywgc2l6ZSAlZFxuIiwKLQkJCQltZXNnLT5zaXplb2Z0bHZzKTsKKwkJCXByX2RlYnVnKCJMQU5FMiAzLjEuNSwgZ290IHRsdnMsIHNpemUgJWRcbiIsCisJCQkJIG1lc2ctPnNpemVvZnRsdnMpOwogCQkJbGFuZTJfYXNzb2NpYXRlX2luZChkZXYsIG1lc2ctPmNvbnRlbnQubm9ybWFsLm1hY19hZGRyLAogCQkJCQkgICAgdG1wLCBtZXNnLT5zaXplb2Z0bHZzKTsKIAkJfQpAQCAtNDk5LDEzICs0ODcsMTQgQEAKIAkJcHJpdi0+Zmx1c2hfdGltZW91dCA9IChtZXNnLT5jb250ZW50LmNvbmZpZy5mbHVzaF90aW1lb3V0ICogSFopOwogCQlwcml2LT5wYXRoX3N3aXRjaGluZ19kZWxheSA9CiAJCSAgICAobWVzZy0+Y29udGVudC5jb25maWcucGF0aF9zd2l0Y2hpbmdfZGVsYXkgKiBIWik7Ci0JCXByaXYtPmxhbmVfdmVyc2lvbiA9IG1lc2ctPmNvbnRlbnQuY29uZmlnLmxhbmVfdmVyc2lvbjsJLyogTEFORTIgKi8KKwkJcHJpdi0+bGFuZV92ZXJzaW9uID0gbWVzZy0+Y29udGVudC5jb25maWcubGFuZV92ZXJzaW9uOworCQkJCQkvKiBMQU5FMiAqLwogCQlwcml2LT5sYW5lMl9vcHMgPSBOVUxMOwogCQlpZiAocHJpdi0+bGFuZV92ZXJzaW9uID4gMSkKIAkJCXByaXYtPmxhbmUyX29wcyA9ICZsYW5lMl9vcHM7CiAJCWlmIChkZXZfc2V0X210dShkZXYsIG1lc2ctPmNvbnRlbnQuY29uZmlnLm10dSkpCi0JCQlwcmludGsoIiVzOiBjaGFuZ2VfbXR1IHRvICVkIGZhaWxlZFxuIiwgZGV2LT5uYW1lLAotCQkJICAgICAgIG1lc2ctPmNvbnRlbnQuY29uZmlnLm10dSk7CisJCQlwcl9pbmZvKCIlczogY2hhbmdlX210dSB0byAlZCBmYWlsZWRcbiIsCisJCQkJZGV2LT5uYW1lLCBtZXNnLT5jb250ZW50LmNvbmZpZy5tdHUpOwogCQlwcml2LT5pc19wcm94eSA9IG1lc2ctPmNvbnRlbnQuY29uZmlnLmlzX3Byb3h5OwogCQlicmVhazsKIAljYXNlIGxfZmx1c2hfdHJhbl9pZDoKQEAgLTUxOCw0MCArNTA3LDM1IEBACiAJCWJyZWFrOwogCWNhc2UgbF9zaG91bGRfYnJpZGdlOgogI2lmIGRlZmluZWQoQ09ORklHX0JSSURHRSkgfHwgZGVmaW5lZChDT05GSUdfQlJJREdFX01PRFVMRSkKLQkJewotCQkJcHJfZGVidWcoIiVzOiBicmlkZ2UgemVwcGVsaW4gYXNrcyBhYm91dCAlcE1cbiIsCi0JCQkJIGRldi0+bmFtZSwgbWVzZy0+Y29udGVudC5wcm94eS5tYWNfYWRkcik7CisJeworCQlwcl9kZWJ1ZygiJXM6IGJyaWRnZSB6ZXBwZWxpbiBhc2tzIGFib3V0ICVwTVxuIiwKKwkJCSBkZXYtPm5hbWUsIG1lc2ctPmNvbnRlbnQucHJveHkubWFjX2FkZHIpOwogCi0JCQlpZiAoYnJfZmRiX3Rlc3RfYWRkcl9ob29rID09IE5VTEwpCisJCWlmIChicl9mZGJfdGVzdF9hZGRyX2hvb2sgPT0gTlVMTCkKKwkJCWJyZWFrOworCisJCWlmIChicl9mZGJfdGVzdF9hZGRyX2hvb2soZGV2LCBtZXNnLT5jb250ZW50LnByb3h5Lm1hY19hZGRyKSkgeworCQkJLyogaGl0IGZyb20gYnJpZGdlIHRhYmxlLCBzZW5kIExFX0FSUF9SRVNQT05TRSAqLworCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjI7CisJCQlzdHJ1Y3Qgc29jayAqc2s7CisKKwkJCXByX2RlYnVnKCIlczogZW50cnkgZm91bmQsIHJlc3BvbmRpbmcgdG8gemVwcGVsaW5cbiIsCisJCQkJIGRldi0+bmFtZSk7CisJCQlza2IyID0gYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgYXRtbGVjX21zZyksIEdGUF9BVE9NSUMpOworCQkJaWYgKHNrYjIgPT0gTlVMTCkKIAkJCQlicmVhazsKLQotCQkJaWYgKGJyX2ZkYl90ZXN0X2FkZHJfaG9vayhkZXYsCi0JCQkJCW1lc2ctPmNvbnRlbnQucHJveHkubWFjX2FkZHIpKSB7Ci0JCQkJLyogaGl0IGZyb20gYnJpZGdlIHRhYmxlLCBzZW5kIExFX0FSUF9SRVNQT05TRSAqLwotCQkJCXN0cnVjdCBza19idWZmICpza2IyOwotCQkJCXN0cnVjdCBzb2NrICpzazsKLQotCQkJCXByX2RlYnVnCi0JCQkJICAgICgiJXM6IGVudHJ5IGZvdW5kLCByZXNwb25kaW5nIHRvIHplcHBlbGluXG4iLAotCQkJCSAgICAgZGV2LT5uYW1lKTsKLQkJCQlza2IyID0KLQkJCQkgICAgYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgYXRtbGVjX21zZyksCi0JCQkJCSAgICAgIEdGUF9BVE9NSUMpOwotCQkJCWlmIChza2IyID09IE5VTEwpCi0JCQkJCWJyZWFrOwotCQkJCXNrYjItPmxlbiA9IHNpemVvZihzdHJ1Y3QgYXRtbGVjX21zZyk7Ci0JCQkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiMiwgbWVzZywKLQkJCQkJCQlzaXplb2YoKm1lc2cpKTsKLQkJCQlhdG1fZm9yY2VfY2hhcmdlKHByaXYtPmxlY2QsIHNrYjItPnRydWVzaXplKTsKLQkJCQlzayA9IHNrX2F0bShwcml2LT5sZWNkKTsKLQkJCQlza2JfcXVldWVfdGFpbCgmc2stPnNrX3JlY2VpdmVfcXVldWUsIHNrYjIpOwotCQkJCXNrLT5za19kYXRhX3JlYWR5KHNrLCBza2IyLT5sZW4pOwotCQkJfQorCQkJc2tiMi0+bGVuID0gc2l6ZW9mKHN0cnVjdCBhdG1sZWNfbXNnKTsKKwkJCXNrYl9jb3B5X3RvX2xpbmVhcl9kYXRhKHNrYjIsIG1lc2csIHNpemVvZigqbWVzZykpOworCQkJYXRtX2ZvcmNlX2NoYXJnZShwcml2LT5sZWNkLCBza2IyLT50cnVlc2l6ZSk7CisJCQlzayA9IHNrX2F0bShwcml2LT5sZWNkKTsKKwkJCXNrYl9xdWV1ZV90YWlsKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiMik7CisJCQlzay0+c2tfZGF0YV9yZWFkeShzaywgc2tiMi0+bGVuKTsKIAkJfQorCX0KICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19CUklER0UpIHx8IGRlZmluZWQoQ09ORklHX0JSSURHRV9NT0RVTEUpICovCiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXByaW50aygiJXM6IFVua25vd24gbWVzc2FnZSB0eXBlICVkXG4iLCBkZXYtPm5hbWUsIG1lc2ctPnR5cGUpOworCQlwcl9pbmZvKCIlczogVW5rbm93biBtZXNzYWdlIHR5cGUgJWRcbiIsIGRldi0+bmFtZSwgbWVzZy0+dHlwZSk7CiAJCWRldl9rZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNTcyLDE0ICs1NTYsMTMgQEAKIAlsZWNfYXJwX2Rlc3Ryb3kocHJpdik7CiAKIAlpZiAoc2tiX3BlZWsoJnNrX2F0bSh2Y2MpLT5za19yZWNlaXZlX3F1ZXVlKSkKLQkJcHJpbnRrKCIlcyBsZWNfYXRtX2Nsb3NlOiBjbG9zaW5nIHdpdGggbWVzc2FnZXMgcGVuZGluZ1xuIiwKLQkJICAgICAgIGRldi0+bmFtZSk7Ci0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmc2tfYXRtKHZjYyktPnNrX3JlY2VpdmVfcXVldWUpKSAhPSBOVUxMKSB7CisJCXByX2luZm8oIiVzIGNsb3Npbmcgd2l0aCBtZXNzYWdlcyBwZW5kaW5nXG4iLCBkZXYtPm5hbWUpOworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnNrX2F0bSh2Y2MpLT5za19yZWNlaXZlX3F1ZXVlKSkpIHsKIAkJYXRtX3JldHVybih2Y2MsIHNrYi0+dHJ1ZXNpemUpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJfQogCi0JcHJpbnRrKCIlczogU2h1dCBkb3duIVxuIiwgZGV2LT5uYW1lKTsKKwlwcl9pbmZvKCIlczogU2h1dCBkb3duIVxuIiwgZGV2LT5uYW1lKTsKIAltb2R1bGVfcHV0KFRISVNfTU9EVUxFKTsKIH0KIApAQCAtNjA4LDkgKzU5MSw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgYXRtbGVjX21zZyAqbWVzZzsKIAotCWlmICghcHJpdiB8fCAhcHJpdi0+bGVjZCkgeworCWlmICghcHJpdiB8fCAhcHJpdi0+bGVjZCkKIAkJcmV0dXJuIC0xOwotCX0KIAlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBhdG1sZWNfbXNnKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybiAtMTsKQEAgLTYzMyw3ICs2MTUsNyBAQAogCXNrLT5za19kYXRhX3JlYWR5KHNrLCBza2ItPmxlbik7CiAKIAlpZiAoZGF0YSAhPSBOVUxMKSB7Ci0JCXByX2RlYnVnKCJsZWM6IGFib3V0IHRvIHNlbmQgJWQgYnl0ZXMgb2YgZGF0YVxuIiwgZGF0YS0+bGVuKTsKKwkJcHJfZGVidWcoImFib3V0IHRvIHNlbmQgJWQgYnl0ZXMgb2YgZGF0YVxuIiwgZGF0YS0+bGVuKTsKIAkJYXRtX2ZvcmNlX2NoYXJnZShwcml2LT5sZWNkLCBkYXRhLT50cnVlc2l6ZSk7CiAJCXNrYl9xdWV1ZV90YWlsKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSwgZGF0YSk7CiAJCXNrLT5za19kYXRhX3JlYWR5KHNrLCBza2ItPmxlbik7CkBAIC02OTEsMzYgKzY3MywyOCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKil2Y2MtPnByb3RvX2RhdGE7CiAJc3RydWN0IGxlY19wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotI2lmIERVTVBfUEFDS0VUUyA+MAotCWludCBpID0gMDsKLQljaGFyIGJ1ZlszMDBdOwotCi0JcHJpbnRrKCIlczogbGVjX3B1c2ggdmNjIHZwaTolZCB2Y2k6JWRcbiIsIGRldi0+bmFtZSwKLQkgICAgICAgdmNjLT52cGksIHZjYy0+dmNpKTsKKyNpZiBEVU1QX1BBQ0tFVFMgPiAwCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiB2Y2MgdnBpOiVkIHZjaTolZFxuIiwKKwkgICAgICAgZGV2LT5uYW1lLCB2Y2MtPnZwaSwgdmNjLT52Y2kpOwogI2VuZGlmCiAJaWYgKCFza2IpIHsKIAkJcHJfZGVidWcoIiVzOiBudWxsIHNrYlxuIiwgZGV2LT5uYW1lKTsKIAkJbGVjX3ZjY19jbG9zZShwcml2LCB2Y2MpOwogCQlyZXR1cm47CiAJfQotI2lmIERVTVBfUEFDS0VUUyA+IDAKLQlwcmludGsoIiVzOiByY3YgZGF0YWxlbjolbGQgbGVjaWQ6JTQuNHhcbiIsIGRldi0+bmFtZSwKLQkgICAgICAgc2tiLT5sZW4sIHByaXYtPmxlY2lkKTsKICNpZiBEVU1QX1BBQ0tFVFMgPj0gMgotCWZvciAoaSA9IDA7IGkgPCBza2ItPmxlbiAmJiBpIDwgOTk7IGkrKykgewotCQlzcHJpbnRmKGJ1ZiArIGkgKiAzLCAiJTIuMnggIiwgMHhmZiAmIHNrYi0+ZGF0YVtpXSk7Ci0JfQorI2RlZmluZSBNQVhfU0tCX0RVTVAgOTkKICNlbGlmIERVTVBfUEFDS0VUUyA+PSAxCi0JZm9yIChpID0gMDsgaSA8IHNrYi0+bGVuICYmIGkgPCAzMDsgaSsrKSB7Ci0JCXNwcmludGYoYnVmICsgaSAqIDMsICIlMi4yeCAiLCAweGZmICYgc2tiLT5kYXRhW2ldKTsKLQl9Ci0jZW5kaWYgLyogRFVNUF9QQUNLRVRTID49IDEgKi8KLQlpZiAoaSA9PSBza2ItPmxlbikKLQkJcHJpbnRrKCIlc1xuIiwgYnVmKTsKLQllbHNlCi0JCXByaW50aygiJXMuLi5cbiIsIGJ1Zik7CisjZGVmaW5lIE1BWF9TS0JfRFVNUCAzMAorI2VuZGlmCisjaWYgRFVNUF9QQUNLRVRTID4gMAorCXByaW50ayhLRVJOX0RFQlVHICIlczogcmN2IGRhdGFsZW46JWxkIGxlY2lkOiU0LjR4XG4iLAorCSAgICAgICBkZXYtPm5hbWUsIHNrYi0+bGVuLCBwcml2LT5sZWNpZCk7CisJcHJpbnRfaGV4X2R1bXAoS0VSTl9ERUJVRywgIiIsIERVTVBfT0ZGU0VULCAxNiwgMSwKKwkJICAgICAgIHNrYi0+ZGF0YSwgbWluKE1BWF9TS0JfRFVNUCwgc2tiLT5sZW4pLCB0cnVlKTsKICNlbmRpZiAvKiBEVU1QX1BBQ0tFVFMgPiAwICovCi0JaWYgKG1lbWNtcChza2ItPmRhdGEsIGxlY19jdHJsX21hZ2ljLCA0KSA9PSAwKSB7CS8qIENvbnRyb2wgZnJhbWUsIHRvIGRhZW1vbiAqLworCWlmIChtZW1jbXAoc2tiLT5kYXRhLCBsZWNfY3RybF9tYWdpYywgNCkgPT0gMCkgeworCQkJCS8qIENvbnRyb2wgZnJhbWUsIHRvIGRhZW1vbiAqLwogCQlzdHJ1Y3Qgc29jayAqc2sgPSBza19hdG0odmNjKTsKIAogCQlwcl9kZWJ1ZygiJXM6IFRvIGRhZW1vblxuIiwgZGV2LT5uYW1lKTsKQEAgLTc3OCw5ICs3NTIsOCBAQAogCQkJZGV2X2tmcmVlX3NrYihza2IpOwogCQkJcmV0dXJuOwogCQl9Ci0JCWlmICghaGxpc3RfZW1wdHkoJnByaXYtPmxlY19hcnBfZW1wdHlfb25lcykpIHsKKwkJaWYgKCFobGlzdF9lbXB0eSgmcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzKSkKIAkJCWxlY19hcnBfY2hlY2tfZW1wdGllcyhwcml2LCB2Y2MsIHNrYik7Ci0JCX0KIAkJc2tiX3B1bGwoc2tiLCAyKTsJLyogc2tpcCBsZWNfaWQgKi8KICNpZmRlZiBDT05GSUdfVFIKIAkJaWYgKHByaXYtPmlzX3RyZGV2KQpAQCAtODAxLDcgKzc3NCw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OwogCiAJaWYgKHZwcml2ID09IE5VTEwpIHsKLQkJcHJpbnRrKCJsZWNfcG9wKCk6IHZwcml2ID0gTlVMTCE/IT8hP1xuIik7CisJCXByX2luZm8oInZwcml2ID0gTlVMTCE/IT8hP1xuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTgyMiwxNSArNzk1LDEzIEBACiAKIAkvKiBMZWNkIG11c3QgYmUgdXAgaW4gdGhpcyBjYXNlICovCiAJYnl0ZXNfbGVmdCA9IGNvcHlfZnJvbV91c2VyKCZpb2NfZGF0YSwgYXJnLCBzaXplb2Yoc3RydWN0IGF0bWxlY19pb2MpKTsKLQlpZiAoYnl0ZXNfbGVmdCAhPSAwKSB7Ci0JCXByaW50awotCQkgICAgKCJsZWM6IGxlY192Y2NfYXR0YWNoLCBjb3B5IGZyb20gdXNlciBmYWlsZWQgZm9yICVkIGJ5dGVzXG4iLAotCQkgICAgIGJ5dGVzX2xlZnQpOwotCX0KKwlpZiAoYnl0ZXNfbGVmdCAhPSAwKQorCQlwcl9pbmZvKCJjb3B5IGZyb20gdXNlciBmYWlsZWQgZm9yICVkIGJ5dGVzXG4iLCBieXRlc19sZWZ0KTsKIAlpZiAoaW9jX2RhdGEuZGV2X251bSA8IDAgfHwgaW9jX2RhdGEuZGV2X251bSA+PSBNQVhfTEVDX0lURiB8fAogCSAgICAhZGV2X2xlY1tpb2NfZGF0YS5kZXZfbnVtXSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCEodnByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGVjX3ZjY19wcml2KSwgR0ZQX0tFUk5FTCkpKQorCXZwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxlY192Y2NfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghdnByaXYpCiAJCXJldHVybiAtRU5PTUVNOwogCXZwcml2LT54b2ZmID0gMDsKIAl2cHJpdi0+b2xkX3BvcCA9IHZjYy0+cG9wOwpAQCAtOTIxLDkgKzg5Miw4IEBACiAJcHJpdi0+Zmx1c2hfdGltZW91dCA9ICg0ICogSFopOwogCXByaXYtPnBhdGhfc3dpdGNoaW5nX2RlbGF5ID0gKDYgKiBIWik7CiAKLQlpZiAoZGV2X2xlY1tpXS0+ZmxhZ3MgJiBJRkZfVVApIHsKKwlpZiAoZGV2X2xlY1tpXS0+ZmxhZ3MgJiBJRkZfVVApCiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldl9sZWNbaV0pOwotCX0KIAlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwogCXJldHVybiBpOwogfQpAQCAtMTEyNSw3ICsxMDk1LDkgQEAKIAllbHNlIHsKIAkJc3RydWN0IGxlY19zdGF0ZSAqc3RhdGUgPSBzZXEtPnByaXZhdGU7CiAJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzdGF0ZS0+ZGV2OwotCQlzdHJ1Y3QgbGVjX2FycF90YWJsZSAqZW50cnkgPSBobGlzdF9lbnRyeShzdGF0ZS0+bm9kZSwgc3RydWN0IGxlY19hcnBfdGFibGUsIG5leHQpOworCQlzdHJ1Y3QgbGVjX2FycF90YWJsZSAqZW50cnkgPSBobGlzdF9lbnRyeShzdGF0ZS0+bm9kZSwKKwkJCQkJCQkgIHN0cnVjdCBsZWNfYXJwX3RhYmxlLAorCQkJCQkJCSAgbmV4dCk7CiAKIAkJc2VxX3ByaW50ZihzZXEsICIlcyAiLCBkZXYtPm5hbWUpOwogCQlsZWNfaW5mbyhzZXEsIGVudHJ5KTsKQEAgLTExOTksMTMgKzExNzEsMTMgQEAKIAogCXAgPSBwcm9jX2NyZWF0ZSgibGVjIiwgU19JUlVHTywgYXRtX3Byb2Nfcm9vdCwgJmxlY19zZXFfZm9wcyk7CiAJaWYgKCFwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGluaXRpYWxpemUgL3Byb2MvbmV0L2F0bS9sZWNcbiIpOworCQlwcl9lcnIoIlVuYWJsZSB0byBpbml0aWFsaXplIC9wcm9jL25ldC9hdG0vbGVjXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogI2VuZGlmCiAKIAlyZWdpc3Rlcl9hdG1faW9jdGwoJmxhbmVfaW9jdGxfb3BzKTsKLQlwcmludGsoImxlYy5jOiAiIF9fREFURV9fICIgIiBfX1RJTUVfXyAiIGluaXRpYWxpemVkXG4iKTsKKwlwcl9pbmZvKCJsZWMuYzogIiBfX0RBVEVfXyAiICIgX19USU1FX18gIiBpbml0aWFsaXplZFxuIik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyOTQsMTMgKzEyNjYsMTMgQEAKIAlzdHJ1Y3QgbGVjX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihsYW5fZHN0LCBkZXYtPmRldl9hZGRyKSkKLQkJcmV0dXJuICgwKTsJLyogbm90IG91ciBtYWMgYWRkcmVzcyAqLworCQlyZXR1cm4gMDsJLyogbm90IG91ciBtYWMgYWRkcmVzcyAqLwogCiAJa2ZyZWUocHJpdi0+dGx2cyk7CS8qIE5VTEwgaWYgdGhlcmUgd2FzIG5vIHByZXZpb3VzIGFzc29jaWF0aW9uICovCiAKIAlwcml2LT50bHZzID0ga21lbWR1cCh0bHZzLCBzaXplb2Z0bHZzLCBHRlBfS0VSTkVMKTsKIAlpZiAocHJpdi0+dGx2cyA9PSBOVUxMKQotCQlyZXR1cm4gKDApOworCQlyZXR1cm4gMDsKIAlwcml2LT5zaXplb2Z0bHZzID0gc2l6ZW9mdGx2czsKIAogCXNrYiA9IGFsbG9jX3NrYihzaXplb2Z0bHZzLCBHRlBfQVRPTUlDKTsKQEAgLTEzMTAsMTIgKzEyODIsMTIgQEAKIAlza2JfY29weV90b19saW5lYXJfZGF0YShza2IsIHRsdnMsIHNpemVvZnRsdnMpOwogCXJldHZhbCA9IHNlbmRfdG9fbGVjZChwcml2LCBsX2Fzc29jaWF0ZV9yZXEsIE5VTEwsIE5VTEwsIHNrYik7CiAJaWYgKHJldHZhbCAhPSAwKQotCQlwcmludGsoImxlYy5jOiBsYW5lMl9hc3NvY2lhdGVfcmVxKCkgZmFpbGVkXG4iKTsKKwkJcHJfaW5mbygibGVjLmM6IGxhbmUyX2Fzc29jaWF0ZV9yZXEoKSBmYWlsZWRcbiIpOwogCS8qCiAJICogSWYgdGhlIHByZXZpb3VzIGFzc29jaWF0aW9uIGhhcyBjaGFuZ2VkIHdlIG11c3QKIAkgKiBzb21laG93IG5vdGlmeSBvdGhlciBMQU5FIGVudGl0aWVzIGFib3V0IHRoZSBjaGFuZ2UKIAkgKi8KLQlyZXR1cm4gKDEpOworCXJldHVybiAxOwogfQogCiAvKgpAQCAtMTM0OCwxMiArMTMyMCwxMiBAQAogCWVudHJ5LT5zaXplb2Z0bHZzID0gc2l6ZW9mdGx2czsKICNlbmRpZgogI2lmIDAKLQlwcmludGsoImxlYy5jOiBsYW5lMl9hc3NvY2lhdGVfaW5kKClcbiIpOwotCXByaW50aygiZHVtcCBvZiB0bHZzLCBzaXplb2Z0bHZzPSVkXG4iLCBzaXplb2Z0bHZzKTsKKwlwcl9pbmZvKCJcbiIpOworCXByX2luZm8oImR1bXAgb2YgdGx2cywgc2l6ZW9mdGx2cz0lZFxuIiwgc2l6ZW9mdGx2cyk7CiAJd2hpbGUgKGkgPCBzaXplb2Z0bHZzKQotCQlwcmludGsoIiUwMnggIiwgdGx2c1tpKytdKTsKKwkJcHJfY29udCgiJTAyeCAiLCB0bHZzW2krK10pOwogCi0JcHJpbnRrKCJcbiIpOworCXByX2NvbnQoIlxuIik7CiAjZW5kaWYKIAogCS8qIHRlbGwgTVBPQSBhYm91dCB0aGUgVExWcyB3ZSBzYXcgKi8KQEAgLTEzNzMsMTUgKzEzNDUsMTUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KLSNpbmNsdWRlIDxhc20vcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9wYXJhbS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KICNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CiAKICNpZiAwCi0jZGVmaW5lIHByX2RlYnVnKGZvcm1hdCxhcmdzLi4uKQorI2RlZmluZSBwcl9kZWJ1Zyhmb3JtYXQsIGFyZ3MuLi4pCiAvKgotI2RlZmluZSBwcl9kZWJ1ZyBwcmludGsKKyAgI2RlZmluZSBwcl9kZWJ1ZyBwcmludGsKICovCiAjZW5kaWYKICNkZWZpbmUgREVCVUdfQVJQX1RBQkxFIDAKQEAgLTEzOTUsNyArMTM2Nyw3IEBACiAgKiBBcnAgdGFibGUgZnVuY3MKICAqLwogCi0jZGVmaW5lIEhBU0goY2gpIChjaCAmIChMRUNfQVJQX1RBQkxFX1NJWkUgLTEpKQorI2RlZmluZSBIQVNIKGNoKSAoY2ggJiAoTEVDX0FSUF9UQUJMRV9TSVpFIC0gMSkpCiAKIC8qCiAgKiBJbml0aWFsaXphdGlvbiBvZiBhcnAtY2FjaGUKQEAgLTE0MDQsOSArMTM3Niw4IEBACiB7CiAJdW5zaWduZWQgc2hvcnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCBMRUNfQVJQX1RBQkxFX1NJWkU7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBMRUNfQVJQX1RBQkxFX1NJWkU7IGkrKykKIAkJSU5JVF9ITElTVF9IRUFEKCZwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSk7Ci0JfQogCUlOSVRfSExJU1RfSEVBRCgmcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzKTsKIAlJTklUX0hMSVNUX0hFQUQoJnByaXYtPmxlY19ub19mb3J3YXJkKTsKIAlJTklUX0hMSVNUX0hFQUQoJnByaXYtPm1jYXN0X2Z3ZHMpOwpAQCAtMTQ1MCwxMCArMTQyMSw3IEBACiAJdG1wID0gJnByaXYtPmxlY19hcnBfdGFibGVzW0hBU0goZW50cnktPm1hY19hZGRyW0VUSF9BTEVOIC0gMV0pXTsKIAlobGlzdF9hZGRfaGVhZCgmZW50cnktPm5leHQsIHRtcCk7CiAKLQlwcl9kZWJ1ZygiTEVDX0FSUDogQWRkZWQgZW50cnk6JTIuMnggJTIuMnggJTIuMnggJTIuMnggJTIuMnggJTIuMnhcbiIsCi0JCTB4ZmYgJiBlbnRyeS0+bWFjX2FkZHJbMF0sIDB4ZmYgJiBlbnRyeS0+bWFjX2FkZHJbMV0sCi0JCTB4ZmYgJiBlbnRyeS0+bWFjX2FkZHJbMl0sIDB4ZmYgJiBlbnRyeS0+bWFjX2FkZHJbM10sCi0JCTB4ZmYgJiBlbnRyeS0+bWFjX2FkZHJbNF0sIDB4ZmYgJiBlbnRyeS0+bWFjX2FkZHJbNV0pOworCXByX2RlYnVnKCJBZGRlZCBlbnRyeTolcE1cbiIsIGVudHJ5LT5tYWNfYWRkcik7CiB9CiAKIC8qCkBAIC0xNDY2LDIwICsxNDM0LDIzIEBACiAJc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5OwogCWludCBpLCByZW1vdmVfdmNjID0gMTsKIAotCWlmICghdG9fcmVtb3ZlKSB7CisJaWYgKCF0b19yZW1vdmUpCiAJCXJldHVybiAtMTsKLQl9CiAKIAlobGlzdF9kZWwoJnRvX3JlbW92ZS0+bmV4dCk7CiAJZGVsX3RpbWVyKCZ0b19yZW1vdmUtPnRpbWVyKTsKIAotCS8qIElmIHRoaXMgaXMgdGhlIG9ubHkgTUFDIGNvbm5lY3RlZCB0byB0aGlzIFZDQywgYWxzbyB0ZWFyIGRvd24gdGhlIFZDQyAqLworCS8qCisJICogSWYgdGhpcyBpcyB0aGUgb25seSBNQUMgY29ubmVjdGVkIHRvIHRoaXMgVkNDLAorCSAqIGFsc28gdGVhciBkb3duIHRoZSBWQ0MKKwkgKi8KIAlpZiAodG9fcmVtb3ZlLT5zdGF0dXMgPj0gRVNJX0ZMVVNIX1BFTkRJTkcpIHsKIAkJLyoKIAkJICogRVNJX0ZMVVNIX1BFTkRJTkcsIEVTSV9GT1JXQVJEX0RJUkVDVAogCQkgKi8KIAkJZm9yIChpID0gMDsgaSA8IExFQ19BUlBfVEFCTEVfU0laRTsgaSsrKSB7Ci0JCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbm9kZSwgJnByaXYtPmxlY19hcnBfdGFibGVzW2ldLCBuZXh0KSB7CisJCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbm9kZSwKKwkJCQkJICAgICAmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0sIG5leHQpIHsKIAkJCQlpZiAobWVtY21wKHRvX3JlbW92ZS0+YXRtX2FkZHIsCiAJCQkJCSAgIGVudHJ5LT5hdG1fYWRkciwgQVRNX0VTQV9MRU4pID09IDApIHsKIAkJCQkJcmVtb3ZlX3ZjYyA9IDA7CkBAIC0xNDkyLDEwICsxNDYzLDcgQEAKIAl9CiAJc2tiX3F1ZXVlX3B1cmdlKCZ0b19yZW1vdmUtPnR4X3dhaXQpOwkvKiBGSVhNRTogZ29vZCBwbGFjZSBmb3IgdGhpcz8gKi8KIAotCXByX2RlYnVnKCJMRUNfQVJQOiBSZW1vdmVkIGVudHJ5OiUyLjJ4ICUyLjJ4ICUyLjJ4ICUyLjJ4ICUyLjJ4ICUyLjJ4XG4iLAotCQkweGZmICYgdG9fcmVtb3ZlLT5tYWNfYWRkclswXSwgMHhmZiAmIHRvX3JlbW92ZS0+bWFjX2FkZHJbMV0sCi0JCTB4ZmYgJiB0b19yZW1vdmUtPm1hY19hZGRyWzJdLCAweGZmICYgdG9fcmVtb3ZlLT5tYWNfYWRkclszXSwKLQkJMHhmZiAmIHRvX3JlbW92ZS0+bWFjX2FkZHJbNF0sIDB4ZmYgJiB0b19yZW1vdmUtPm1hY19hZGRyWzVdKTsKKwlwcl9kZWJ1ZygiUmVtb3ZlZCBlbnRyeTolcE1cbiIsIHRvX3JlbW92ZS0+bWFjX2FkZHIpOwogCXJldHVybiAwOwogfQogCkBAIC0xNTEzLDkgKzE0ODEsOCBAQAogCQlyZXR1cm4gIkVTSV9GTFVTSF9QRU5ESU5HIjsKIAljYXNlIEVTSV9GT1JXQVJEX0RJUkVDVDoKIAkJcmV0dXJuICJFU0lfRk9SV0FSRF9ESVJFQ1QiOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAiPFVOS05PV04+IjsKIAl9CisJcmV0dXJuICI8VU5LTk9XTj4iOwogfQogCiBzdGF0aWMgdm9pZCBkdW1wX2FycF90YWJsZShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYpCkBAIC0xNTI1LDE4ICsxNDkyLDE1IEBACiAJY2hhciBidWZbMjU2XTsKIAlpbnQgaSwgaiwgb2Zmc2V0OwogCi0JcHJpbnRrKCJEdW1wICVwOlxuIiwgcHJpdik7CisJcHJfaW5mbygiRHVtcCAlcDpcbiIsIHByaXYpOwogCWZvciAoaSA9IDA7IGkgPCBMRUNfQVJQX1RBQkxFX1NJWkU7IGkrKykgewotCQlobGlzdF9mb3JfZWFjaF9lbnRyeShydWxsYSwgbm9kZSwgJnByaXYtPmxlY19hcnBfdGFibGVzW2ldLCBuZXh0KSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ1bGxhLCBub2RlLAorCQkJCSAgICAgJnByaXYtPmxlY19hcnBfdGFibGVzW2ldLCBuZXh0KSB7CiAJCQlvZmZzZXQgPSAwOwogCQkJb2Zmc2V0ICs9IHNwcmludGYoYnVmLCAiJWQ6ICVwXG4iLCBpLCBydWxsYSk7Ci0JCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICJNYWM6Iik7Ci0JCQlmb3IgKGogPSAwOyBqIDwgRVRIX0FMRU47IGorKykgewotCQkJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwKLQkJCQkJCSAgIiUyLjJ4ICIsCi0JCQkJCQkgIHJ1bGxhLT5tYWNfYWRkcltqXSAmIDB4ZmYpOwotCQkJfQotCQkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LCAiQXRtOiIpOworCQkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LCAiTWFjOiAlcE0iLAorCQkJCQkgIHJ1bGxhLT5tYWNfYWRkcik7CisJCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICIgQXRtOiIpOwogCQkJZm9yIChqID0gMDsgaiA8IEFUTV9FU0FfTEVOOyBqKyspIHsKIAkJCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsCiAJCQkJCQkgICIlMi4yeCAiLApAQCAtMTU1NiwyMCArMTUyMCwxNiBAQAogCQkJCSAgICAiRmxhZ3M6JXgsIFBhY2tldHNfZmxvb2RlZDoleCwgU3RhdHVzOiAlcyAiLAogCQkJCSAgICBydWxsYS0+ZmxhZ3MsIHJ1bGxhLT5wYWNrZXRzX2Zsb29kZWQsCiAJCQkJICAgIGdldF9zdGF0dXNfc3RyaW5nKHJ1bGxhLT5zdGF0dXMpKTsKLQkJCXByaW50aygiJXNcbiIsIGJ1Zik7CisJCQlwcl9pbmZvKCIlc1xuIiwgYnVmKTsKIAkJfQogCX0KIAogCWlmICghaGxpc3RfZW1wdHkoJnByaXYtPmxlY19ub19mb3J3YXJkKSkKLQkJcHJpbnRrKCJObyBmb3J3YXJkXG4iKTsKKwkJcHJfaW5mbygiTm8gZm9yd2FyZFxuIik7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnkocnVsbGEsIG5vZGUsICZwcml2LT5sZWNfbm9fZm9yd2FyZCwgbmV4dCkgewogCQlvZmZzZXQgPSAwOwotCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICJNYWM6Iik7Ci0JCWZvciAoaiA9IDA7IGogPCBFVEhfQUxFTjsgaisrKSB7Ci0JCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICIlMi4yeCAiLAotCQkJCQkgIHJ1bGxhLT5tYWNfYWRkcltqXSAmIDB4ZmYpOwotCQl9Ci0JCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIkF0bToiKTsKKwkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LCAiTWFjOiAlcE0iLCBydWxsYS0+bWFjX2FkZHIpOworCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICIgQXRtOiIpOwogCQlmb3IgKGogPSAwOyBqIDwgQVRNX0VTQV9MRU47IGorKykgewogCQkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LCAiJTIuMnggIiwKIAkJCQkJICBydWxsYS0+YXRtX2FkZHJbal0gJiAweGZmKTsKQEAgLTE1ODYsMTkgKzE1NDYsMTUgQEAKIAkJCQkgICJGbGFnczoleCwgUGFja2V0c19mbG9vZGVkOiV4LCBTdGF0dXM6ICVzICIsCiAJCQkJICBydWxsYS0+ZmxhZ3MsIHJ1bGxhLT5wYWNrZXRzX2Zsb29kZWQsCiAJCQkJICBnZXRfc3RhdHVzX3N0cmluZyhydWxsYS0+c3RhdHVzKSk7Ci0JCXByaW50aygiJXNcbiIsIGJ1Zik7CisJCXByX2luZm8oIiVzXG4iLCBidWYpOwogCX0KIAogCWlmICghaGxpc3RfZW1wdHkoJnByaXYtPmxlY19hcnBfZW1wdHlfb25lcykpCi0JCXByaW50aygiRW1wdHkgb25lc1xuIik7CisJCXByX2luZm8oIkVtcHR5IG9uZXNcbiIpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ1bGxhLCBub2RlLCAmcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzLCBuZXh0KSB7CiAJCW9mZnNldCA9IDA7Ci0JCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIk1hYzoiKTsKLQkJZm9yIChqID0gMDsgaiA8IEVUSF9BTEVOOyBqKyspIHsKLQkJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIiUyLjJ4ICIsCi0JCQkJCSAgcnVsbGEtPm1hY19hZGRyW2pdICYgMHhmZik7Ci0JCX0KLQkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LCAiQXRtOiIpOworCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICJNYWM6ICVwTSIsIHJ1bGxhLT5tYWNfYWRkcik7CisJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIiBBdG06Iik7CiAJCWZvciAoaiA9IDA7IGogPCBBVE1fRVNBX0xFTjsgaisrKSB7CiAJCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICIlMi4yeCAiLAogCQkJCQkgIHJ1bGxhLT5hdG1fYWRkcltqXSAmIDB4ZmYpOwpAQCAtMTYxNSwxOSArMTU3MSwxNSBAQAogCQkJCSAgIkZsYWdzOiV4LCBQYWNrZXRzX2Zsb29kZWQ6JXgsIFN0YXR1czogJXMgIiwKIAkJCQkgIHJ1bGxhLT5mbGFncywgcnVsbGEtPnBhY2tldHNfZmxvb2RlZCwKIAkJCQkgIGdldF9zdGF0dXNfc3RyaW5nKHJ1bGxhLT5zdGF0dXMpKTsKLQkJcHJpbnRrKCIlcyIsIGJ1Zik7CisJCXByX2luZm8oIiVzIiwgYnVmKTsKIAl9CiAKIAlpZiAoIWhsaXN0X2VtcHR5KCZwcml2LT5tY2FzdF9md2RzKSkKLQkJcHJpbnRrKCJNdWx0aWNhc3QgRm9yd2FyZCBWQ0NzXG4iKTsKKwkJcHJfaW5mbygiTXVsdGljYXN0IEZvcndhcmQgVkNDc1xuIik7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnkocnVsbGEsIG5vZGUsICZwcml2LT5tY2FzdF9md2RzLCBuZXh0KSB7CiAJCW9mZnNldCA9IDA7Ci0JCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIk1hYzoiKTsKLQkJZm9yIChqID0gMDsgaiA8IEVUSF9BTEVOOyBqKyspIHsKLQkJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIiUyLjJ4ICIsCi0JCQkJCSAgcnVsbGEtPm1hY19hZGRyW2pdICYgMHhmZik7Ci0JCX0KLQkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LCAiQXRtOiIpOworCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICJNYWM6ICVwTSIsIHJ1bGxhLT5tYWNfYWRkcik7CisJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIiBBdG06Iik7CiAJCWZvciAoaiA9IDA7IGogPCBBVE1fRVNBX0xFTjsgaisrKSB7CiAJCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICIlMi4yeCAiLAogCQkJCQkgIHJ1bGxhLT5hdG1fYWRkcltqXSAmIDB4ZmYpOwpAQCAtMTY0NCw3ICsxNTk2LDcgQEAKIAkJCQkgICJGbGFnczoleCwgUGFja2V0c19mbG9vZGVkOiV4LCBTdGF0dXM6ICVzICIsCiAJCQkJICBydWxsYS0+ZmxhZ3MsIHJ1bGxhLT5wYWNrZXRzX2Zsb29kZWQsCiAJCQkJICBnZXRfc3RhdHVzX3N0cmluZyhydWxsYS0+c3RhdHVzKSk7Ci0JCXByaW50aygiJXNcbiIsIGJ1Zik7CisJCXByX2luZm8oIiVzXG4iLCBidWYpOwogCX0KIAogfQpAQCAtMTY3MCwxNCArMTYyMiwxNiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBMRUNfQVJQX1RBQkxFX1NJWkU7IGkrKykgewotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LCAmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0sIG5leHQpIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbm9kZSwgbmV4dCwKKwkJCQkJICAmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0sIG5leHQpIHsKIAkJCWxlY19hcnBfcmVtb3ZlKHByaXYsIGVudHJ5KTsKIAkJCWxlY19hcnBfcHV0KGVudHJ5KTsKIAkJfQogCQlJTklUX0hMSVNUX0hFQUQoJnByaXYtPmxlY19hcnBfdGFibGVzW2ldKTsKIAl9CiAKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LCAmcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzLCBuZXh0KSB7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbm9kZSwgbmV4dCwKKwkJCQkgICZwcml2LT5sZWNfYXJwX2VtcHR5X29uZXMsIG5leHQpIHsKIAkJZGVsX3RpbWVyX3N5bmMoJmVudHJ5LT50aW1lcik7CiAJCWxlY19hcnBfY2xlYXJfdmNjcyhlbnRyeSk7CiAJCWhsaXN0X2RlbCgmZW50cnktPm5leHQpOwpAQCAtMTY4NSw3ICsxNjM5LDggQEAKIAl9CiAJSU5JVF9ITElTVF9IRUFEKCZwcml2LT5sZWNfYXJwX2VtcHR5X29uZXMpOwogCi0JaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbm9kZSwgbmV4dCwgJnByaXYtPmxlY19ub19mb3J3YXJkLCBuZXh0KSB7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbm9kZSwgbmV4dCwKKwkJCQkgICZwcml2LT5sZWNfbm9fZm9yd2FyZCwgbmV4dCkgewogCQlkZWxfdGltZXJfc3luYygmZW50cnktPnRpbWVyKTsKIAkJbGVjX2FycF9jbGVhcl92Y2NzKGVudHJ5KTsKIAkJaGxpc3RfZGVsKCZlbnRyeS0+bmV4dCk7CkBAIC0xNzE0LDE1ICsxNjY5LDEyIEBACiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQ7CiAJc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5OwogCi0JcHJfZGVidWcoIkxFQ19BUlA6IGxlY19hcnBfZmluZCA6JTIuMnggJTIuMnggJTIuMnggJTIuMnggJTIuMnggJTIuMnhcbiIsCi0JCW1hY19hZGRyWzBdICYgMHhmZiwgbWFjX2FkZHJbMV0gJiAweGZmLCBtYWNfYWRkclsyXSAmIDB4ZmYsCi0JCW1hY19hZGRyWzNdICYgMHhmZiwgbWFjX2FkZHJbNF0gJiAweGZmLCBtYWNfYWRkcls1XSAmIDB4ZmYpOworCXByX2RlYnVnKCIlcE1cbiIsIG1hY19hZGRyKTsKIAogCWhlYWQgPSAmcHJpdi0+bGVjX2FycF90YWJsZXNbSEFTSChtYWNfYWRkcltFVEhfQUxFTiAtIDFdKV07CiAJaGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIG5vZGUsIGhlYWQsIG5leHQpIHsKLQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIobWFjX2FkZHIsIGVudHJ5LT5tYWNfYWRkcikpIHsKKwkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIobWFjX2FkZHIsIGVudHJ5LT5tYWNfYWRkcikpCiAJCQlyZXR1cm4gZW50cnk7Ci0JCX0KIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC0xNzM0LDcgKzE2ODYsNyBAQAogCiAJdG9fcmV0dXJuID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxlY19hcnBfdGFibGUpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXRvX3JldHVybikgewotCQlwcmludGsoIkxFQzogQXJwIGVudHJ5IGttYWxsb2MgZmFpbGVkXG4iKTsKKwkJcHJfaW5mbygiTEVDOiBBcnAgZW50cnkga21hbGxvYyBmYWlsZWRcbiIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAJbWVtY3B5KHRvX3JldHVybi0+bWFjX2FkZHIsIG1hY19hZGRyLCBFVEhfQUxFTik7CkBAIC0xNzU1LDcgKzE3MDcsNyBAQAogCiAJZW50cnkgPSAoc3RydWN0IGxlY19hcnBfdGFibGUgKilkYXRhOwogCi0JcHJfZGVidWcoImxlY19hcnBfZXhwaXJlX2FycFxuIik7CisJcHJfZGVidWcoIlxuIik7CiAJaWYgKGVudHJ5LT5zdGF0dXMgPT0gRVNJX0FSUF9QRU5ESU5HKSB7CiAJCWlmIChlbnRyeS0+bm9fdHJpZXMgPD0gZW50cnktPnByaXYtPm1heF9yZXRyeV9jb3VudCkgewogCQkJaWYgKGVudHJ5LT5pc19yZGVzYykKQEAgLTE3NzksMTAgKzE3MzEsMTAgQEAKIAogCWRlbF90aW1lcigmdG9fcmVtb3ZlLT50aW1lcik7CiAKLQlwcl9kZWJ1ZygiTEVDX0FSUCAlcCAlcDogbGVjX2FycF9leHBpcmVfdmNjIHZwaTolZCB2Y2k6JWRcbiIsCi0JCXRvX3JlbW92ZSwgcHJpdiwKLQkJdG9fcmVtb3ZlLT52Y2MgPyB0b19yZW1vdmUtPnJlY3ZfdmNjLT52cGkgOiAwLAotCQl0b19yZW1vdmUtPnZjYyA/IHRvX3JlbW92ZS0+cmVjdl92Y2MtPnZjaSA6IDApOworCXByX2RlYnVnKCIlcCAlcDogdnBpOiVkIHZjaTolZFxuIiwKKwkJIHRvX3JlbW92ZSwgcHJpdiwKKwkJIHRvX3JlbW92ZS0+dmNjID8gdG9fcmVtb3ZlLT5yZWN2X3ZjYy0+dnBpIDogMCwKKwkJIHRvX3JlbW92ZS0+dmNjID8gdG9fcmVtb3ZlLT5yZWN2X3ZjYy0+dmNpIDogMCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CiAJaGxpc3RfZGVsKCZ0b19yZW1vdmUtPm5leHQpOwpAQCAtMTc5Miw2ICsxNzQ0LDUwIEBACiAJbGVjX2FycF9wdXQodG9fcmVtb3ZlKTsKIH0KIAorc3RhdGljIGJvb2wgX19sZWNfYXJwX2NoZWNrX2V4cGlyZShzdHJ1Y3QgbGVjX2FycF90YWJsZSAqZW50cnksCisJCQkJICAgdW5zaWduZWQgbG9uZyBub3csCisJCQkJICAgc3RydWN0IGxlY19wcml2ICpwcml2KQoreworCXVuc2lnbmVkIGxvbmcgdGltZV90b19jaGVjazsKKworCWlmICgoZW50cnktPmZsYWdzKSAmIExFQ19SRU1PVEVfRkxBRyAmJiBwcml2LT50b3BvbG9neV9jaGFuZ2UpCisJCXRpbWVfdG9fY2hlY2sgPSBwcml2LT5mb3J3YXJkX2RlbGF5X3RpbWU7CisJZWxzZQorCQl0aW1lX3RvX2NoZWNrID0gcHJpdi0+YWdpbmdfdGltZTsKKworCXByX2RlYnVnKCJBYm91dCB0byBleHBpcmU6ICVseCAtICVseCA+ICVseFxuIiwKKwkJIG5vdywgZW50cnktPmxhc3RfdXNlZCwgdGltZV90b19jaGVjayk7CisJaWYgKHRpbWVfYWZ0ZXIobm93LCBlbnRyeS0+bGFzdF91c2VkICsgdGltZV90b19jaGVjaykgJiYKKwkgICAgIShlbnRyeS0+ZmxhZ3MgJiBMRUNfUEVSTUFORU5UX0ZMQUcpICYmCisJICAgICEoZW50cnktPm1hY19hZGRyWzBdICYgMHgwMSkpIHsJLyogTEFORTI6IDcuMS4yMCAqLworCQkvKiBSZW1vdmUgZW50cnkgKi8KKwkJcHJfZGVidWcoIkVudHJ5IHRpbWVkIG91dFxuIik7CisJCWxlY19hcnBfcmVtb3ZlKHByaXYsIGVudHJ5KTsKKwkJbGVjX2FycF9wdXQoZW50cnkpOworCX0gZWxzZSB7CisJCS8qIFNvbWV0aGluZyBlbHNlICovCisJCWlmICgoZW50cnktPnN0YXR1cyA9PSBFU0lfVkNfUEVORElORyB8fAorCQkgICAgIGVudHJ5LT5zdGF0dXMgPT0gRVNJX0FSUF9QRU5ESU5HKSAmJgorCQkgICAgdGltZV9hZnRlcl9lcShub3csIGVudHJ5LT50aW1lc3RhbXAgKworCQkJCSAgICAgICBwcml2LT5tYXhfdW5rbm93bl9mcmFtZV90aW1lKSkgeworCQkJZW50cnktPnRpbWVzdGFtcCA9IGppZmZpZXM7CisJCQllbnRyeS0+cGFja2V0c19mbG9vZGVkID0gMDsKKwkJCWlmIChlbnRyeS0+c3RhdHVzID09IEVTSV9WQ19QRU5ESU5HKQorCQkJCXNlbmRfdG9fbGVjZChwcml2LCBsX3N2Y19zZXR1cCwKKwkJCQkJICAgICBlbnRyeS0+bWFjX2FkZHIsCisJCQkJCSAgICAgZW50cnktPmF0bV9hZGRyLAorCQkJCQkgICAgIE5VTEwpOworCQl9CisJCWlmIChlbnRyeS0+c3RhdHVzID09IEVTSV9GTFVTSF9QRU5ESU5HICYmCisJCSAgICB0aW1lX2FmdGVyX2VxKG5vdywgZW50cnktPnRpbWVzdGFtcCArCisJCQkJICAgICAgIHByaXYtPnBhdGhfc3dpdGNoaW5nX2RlbGF5KSkgeworCQkJbGVjX2FycF9ob2xkKGVudHJ5KTsKKwkJCXJldHVybiB0cnVlOworCQl9CisJfQorCisJcmV0dXJuIGZhbHNlOworfQogLyoKICAqIEV4cGlyZSBlbnRyaWVzLgogICogMS4gUmUtc2V0IHRpbWVyCkBAIC0xODE2LDYyICsxODEyLDI4IEBACiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICpuZXh0OwogCXN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeTsKIAl1bnNpZ25lZCBsb25nIG5vdzsKLQl1bnNpZ25lZCBsb25nIHRpbWVfdG9fY2hlY2s7CiAJaW50IGk7CiAKLQlwcl9kZWJ1ZygibGVjX2FycF9jaGVja19leHBpcmUgJXBcbiIsIHByaXYpOworCXByX2RlYnVnKCIlcFxuIiwgcHJpdik7CiAJbm93ID0gamlmZmllczsKIHJlc3RhcnQ6CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBMRUNfQVJQX1RBQkxFX1NJWkU7IGkrKykgewotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LCAmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0sIG5leHQpIHsKLQkJCWlmICgoZW50cnktPmZsYWdzKSAmIExFQ19SRU1PVEVfRkxBRyAmJgotCQkJICAgIHByaXYtPnRvcG9sb2d5X2NoYW5nZSkKLQkJCQl0aW1lX3RvX2NoZWNrID0gcHJpdi0+Zm9yd2FyZF9kZWxheV90aW1lOwotCQkJZWxzZQotCQkJCXRpbWVfdG9fY2hlY2sgPSBwcml2LT5hZ2luZ190aW1lOworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LAorCQkJCQkgICZwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSwgbmV4dCkgeworCQkJaWYgKF9fbGVjX2FycF9jaGVja19leHBpcmUoZW50cnksIG5vdywgcHJpdikpIHsKKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCQkJCXN0cnVjdCBhdG1fdmNjICp2Y2MgPSBlbnRyeS0+dmNjOwogCi0JCQlwcl9kZWJ1ZygiQWJvdXQgdG8gZXhwaXJlOiAlbHggLSAlbHggPiAlbHhcbiIsCi0JCQkJbm93LCBlbnRyeS0+bGFzdF91c2VkLCB0aW1lX3RvX2NoZWNrKTsKLQkJCWlmICh0aW1lX2FmdGVyKG5vdywgZW50cnktPmxhc3RfdXNlZCArIHRpbWVfdG9fY2hlY2spCi0JCQkgICAgJiYgIShlbnRyeS0+ZmxhZ3MgJiBMRUNfUEVSTUFORU5UX0ZMQUcpCi0JCQkgICAgJiYgIShlbnRyeS0+bWFjX2FkZHJbMF0gJiAweDAxKSkgewkvKiBMQU5FMjogNy4xLjIwICovCi0JCQkJLyogUmVtb3ZlIGVudHJ5ICovCi0JCQkJcHJfZGVidWcoIkxFQzpFbnRyeSB0aW1lZCBvdXRcbiIpOwotCQkJCWxlY19hcnBfcmVtb3ZlKHByaXYsIGVudHJ5KTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sZWNfYXJwX2xvY2ssCisJCQkJCQkgICAgICAgZmxhZ3MpOworCQkJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmVudHJ5LT50eF93YWl0KSkpCisJCQkJCWxlY19zZW5kKHZjYywgc2tiKTsKKwkJCQllbnRyeS0+bGFzdF91c2VkID0gamlmZmllczsKKwkJCQllbnRyeS0+c3RhdHVzID0gRVNJX0ZPUldBUkRfRElSRUNUOwogCQkJCWxlY19hcnBfcHV0KGVudHJ5KTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogU29tZXRoaW5nIGVsc2UgKi8KLQkJCQlpZiAoKGVudHJ5LT5zdGF0dXMgPT0gRVNJX1ZDX1BFTkRJTkcgfHwKLQkJCQkgICAgIGVudHJ5LT5zdGF0dXMgPT0gRVNJX0FSUF9QRU5ESU5HKQotCQkJCSAgICAmJiB0aW1lX2FmdGVyX2VxKG5vdywKLQkJCQkJCSAgICAgZW50cnktPnRpbWVzdGFtcCArCi0JCQkJCQkgICAgIHByaXYtPgotCQkJCQkJICAgICBtYXhfdW5rbm93bl9mcmFtZV90aW1lKSkgewotCQkJCQllbnRyeS0+dGltZXN0YW1wID0gamlmZmllczsKLQkJCQkJZW50cnktPnBhY2tldHNfZmxvb2RlZCA9IDA7Ci0JCQkJCWlmIChlbnRyeS0+c3RhdHVzID09IEVTSV9WQ19QRU5ESU5HKQotCQkJCQkJc2VuZF90b19sZWNkKHByaXYsIGxfc3ZjX3NldHVwLAotCQkJCQkJCSAgICAgZW50cnktPm1hY19hZGRyLAotCQkJCQkJCSAgICAgZW50cnktPmF0bV9hZGRyLAotCQkJCQkJCSAgICAgTlVMTCk7Ci0JCQkJfQotCQkJCWlmIChlbnRyeS0+c3RhdHVzID09IEVTSV9GTFVTSF9QRU5ESU5HCi0JCQkJICAgICYmCi0JCQkJICAgIHRpbWVfYWZ0ZXJfZXEobm93LCBlbnRyeS0+dGltZXN0YW1wICsKLQkJCQkJCSAgcHJpdi0+cGF0aF9zd2l0Y2hpbmdfZGVsYXkpKSB7Ci0JCQkJCXN0cnVjdCBza19idWZmICpza2I7Ci0JCQkJCXN0cnVjdCBhdG1fdmNjICp2Y2MgPSBlbnRyeS0+dmNjOwogCi0JCQkJCWxlY19hcnBfaG9sZChlbnRyeSk7Ci0JCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwotCQkJCQl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZlbnRyeS0+dHhfd2FpdCkpICE9IE5VTEwpCi0JCQkJCQlsZWNfc2VuZCh2Y2MsIHNrYik7Ci0JCQkJCWVudHJ5LT5sYXN0X3VzZWQgPSBqaWZmaWVzOwotCQkJCQllbnRyeS0+c3RhdHVzID0gRVNJX0ZPUldBUkRfRElSRUNUOwotCQkJCQlsZWNfYXJwX3B1dChlbnRyeSk7Ci0JCQkJCWdvdG8gcmVzdGFydDsKLQkJCQl9CisJCQkJZ290byByZXN0YXJ0OwogCQkJfQogCQl9CiAJfQpAQCAtMTg4NSw3ICsxODQ3LDggQEAKICAqCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYXRtX3ZjYyAqbGVjX2FycF9yZXNvbHZlKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwKLQkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbWFjX3RvX2ZpbmQsIGludCBpc19yZGVzYywKKwkJCQkgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqbWFjX3RvX2ZpbmQsCisJCQkJICAgICAgIGludCBpc19yZGVzYywKIAkJCQkgICAgICAgc3RydWN0IGxlY19hcnBfdGFibGUgKipyZXRfZW50cnkpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTE5MjEsOSArMTg4NCw4IEBACiAJCSAqIElmIHRoZSBMRV9BUlAgY2FjaGUgZW50cnkgaXMgc3RpbGwgcGVuZGluZywgcmVzZXQgY291bnQgdG8gMAogCQkgKiBzbyBhbm90aGVyIExFX0FSUCByZXF1ZXN0IGNhbiBiZSBtYWRlIGZvciB0aGlzIGZyYW1lLgogCQkgKi8KLQkJaWYgKGVudHJ5LT5zdGF0dXMgPT0gRVNJX0FSUF9QRU5ESU5HKSB7CisJCWlmIChlbnRyeS0+c3RhdHVzID09IEVTSV9BUlBfUEVORElORykKIAkJCWVudHJ5LT5ub190cmllcyA9IDA7Ci0JCX0KIAkJLyoKIAkJICogRGF0YSBkaXJlY3QgVkMgbm90IHlldCBzZXQgdXAsIGNoZWNrIHRvIHNlZSBpZiB0aGUgdW5rbm93bgogCQkgKiBmcmFtZSBjb3VudCBpcyBncmVhdGVyIHRoYW4gdGhlIGxpbWl0LiBJZiB0aGUgbGltaXQgaGFzCkBAIC0xOTM0LDcgKzE4OTYsNyBAQAogCQkgICAgZW50cnktPnBhY2tldHNfZmxvb2RlZCA8CiAJCSAgICBwcml2LT5tYXhpbXVtX3Vua25vd25fZnJhbWVfY291bnQpIHsKIAkJCWVudHJ5LT5wYWNrZXRzX2Zsb29kZWQrKzsKLQkJCXByX2RlYnVnKCJMRUNfQVJQOiBGbG9vZGluZy4uXG4iKTsKKwkJCXByX2RlYnVnKCJGbG9vZGluZy4uXG4iKTsKIAkJCWZvdW5kID0gcHJpdi0+bWNhc3RfdmNjOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTE5NDUsMTMgKzE5MDcsMTMgQEAKIAkJICovCiAJCWxlY19hcnBfaG9sZChlbnRyeSk7CiAJCSpyZXRfZW50cnkgPSBlbnRyeTsKLQkJcHJfZGVidWcoImxlYzogZW50cnktPnN0YXR1cyAlZCBlbnRyeS0+dmNjICVwXG4iLCBlbnRyeS0+c3RhdHVzLAotCQkJZW50cnktPnZjYyk7CisJCXByX2RlYnVnKCJlbnRyeS0+c3RhdHVzICVkIGVudHJ5LT52Y2MgJXBcbiIsIGVudHJ5LT5zdGF0dXMsCisJCQkgZW50cnktPnZjYyk7CiAJCWZvdW5kID0gTlVMTDsKIAl9IGVsc2UgewogCQkvKiBObyBtYXRjaGluZyBlbnRyeSB3YXMgZm91bmQgKi8KIAkJZW50cnkgPSBtYWtlX2VudHJ5KHByaXYsIG1hY190b19maW5kKTsKLQkJcHJfZGVidWcoIkxFQ19BUlA6IE1ha2luZyBlbnRyeVxuIik7CisJCXByX2RlYnVnKCJNYWtpbmcgZW50cnlcbiIpOwogCQlpZiAoIWVudHJ5KSB7CiAJCQlmb3VuZCA9IHByaXYtPm1jYXN0X3ZjYzsKIAkJCWdvdG8gb3V0OwpAQCAtMTk4OCwxMyArMTk1MCwxNCBAQAogCXN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeTsKIAlpbnQgaTsKIAotCXByX2RlYnVnKCJsZWNfYWRkcl9kZWxldGVcbiIpOworCXByX2RlYnVnKCJcbiIpOwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sZWNfYXJwX2xvY2ssIGZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpIDwgTEVDX0FSUF9UQUJMRV9TSVpFOyBpKyspIHsKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbm9kZSwgbmV4dCwgJnByaXYtPmxlY19hcnBfdGFibGVzW2ldLCBuZXh0KSB7Ci0JCQlpZiAoIW1lbWNtcChhdG1fYWRkciwgZW50cnktPmF0bV9hZGRyLCBBVE1fRVNBX0xFTikKLQkJCSAgICAmJiAocGVybWFuZW50IHx8Ci0JCQkJIShlbnRyeS0+ZmxhZ3MgJiBMRUNfUEVSTUFORU5UX0ZMQUcpKSkgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LAorCQkJCQkgICZwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSwgbmV4dCkgeworCQkJaWYgKCFtZW1jbXAoYXRtX2FkZHIsIGVudHJ5LT5hdG1fYWRkciwgQVRNX0VTQV9MRU4pICYmCisJCQkgICAgKHBlcm1hbmVudCB8fAorCQkJICAgICAhKGVudHJ5LT5mbGFncyAmIExFQ19QRVJNQU5FTlRfRkxBRykpKSB7CiAJCQkJbGVjX2FycF9yZW1vdmUocHJpdiwgZW50cnkpOwogCQkJCWxlY19hcnBfcHV0KGVudHJ5KTsKIAkJCX0KQEAgLTIwMTksMTAgKzE5ODIsOCBAQAogCXN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeSwgKnRtcDsKIAlpbnQgaTsKIAotCXByX2RlYnVnKCJsZWM6JXMiLCAodGFyZ2V0bGVzc19sZV9hcnApID8gInRhcmdldGxlc3MgIiA6ICIgIik7Ci0JcHJfZGVidWcoImxlY19hcnBfdXBkYXRlIG1hYzolMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnhcbiIsCi0JCW1hY19hZGRyWzBdLCBtYWNfYWRkclsxXSwgbWFjX2FkZHJbMl0sIG1hY19hZGRyWzNdLAotCQltYWNfYWRkcls0XSwgbWFjX2FkZHJbNV0pOworCXByX2RlYnVnKCIlc21hYzolcE1cbiIsCisJCSAodGFyZ2V0bGVzc19sZV9hcnApID8gInRhcmdldGxlc3MgIiA6ICIiLCBtYWNfYWRkcik7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CiAJZW50cnkgPSBsZWNfYXJwX2ZpbmQocHJpdiwgbWFjX2FkZHIpOwpAQCAtMjAzMiw3ICsxOTkzLDggQEAKIAkJCQkgKiB3ZSBoYXZlIG5vIGVudHJ5IGluIHRoZSBjYWNoZS4gNy4xLjMwCiAJCQkJICovCiAJaWYgKCFobGlzdF9lbXB0eSgmcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzKSkgewotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LCAmcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzLCBuZXh0KSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5vZGUsIG5leHQsCisJCQkJCSAgJnByaXYtPmxlY19hcnBfZW1wdHlfb25lcywgbmV4dCkgewogCQkJaWYgKG1lbWNtcChlbnRyeS0+YXRtX2FkZHIsIGF0bV9hZGRyLCBBVE1fRVNBX0xFTikgPT0gMCkgewogCQkJCWhsaXN0X2RlbCgmZW50cnktPm5leHQpOwogCQkJCWRlbF90aW1lcigmZW50cnktPnRpbWVyKTsKQEAgLTIwNzYsNyArMjAzOCw4IEBACiAJbWVtY3B5KGVudHJ5LT5hdG1fYWRkciwgYXRtX2FkZHIsIEFUTV9FU0FfTEVOKTsKIAlkZWxfdGltZXIoJmVudHJ5LT50aW1lcik7CiAJZm9yIChpID0gMDsgaSA8IExFQ19BUlBfVEFCTEVfU0laRTsgaSsrKSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgbm9kZSwgJnByaXYtPmxlY19hcnBfdGFibGVzW2ldLCBuZXh0KSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgbm9kZSwKKwkJCQkgICAgICZwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSwgbmV4dCkgewogCQkJaWYgKGVudHJ5ICE9IHRtcCAmJgogCQkJICAgICFtZW1jbXAodG1wLT5hdG1fYWRkciwgYXRtX2FkZHIsIEFUTV9FU0FfTEVOKSkgewogCQkJCS8qIFZjYyB0byB0aGlzIGhvc3QgZXhpc3RzICovCkBAIC0yMTIxLDE0ICsyMDg0LDEzIEBACiAJaW50IGksIGZvdW5kX2VudHJ5ID0gMDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sZWNfYXJwX2xvY2ssIGZsYWdzKTsKKwkvKiBWY2MgZm9yIE11bHRpY2FzdCBGb3J3YXJkLiBObyB0aW1lciwgTEFORXYyIDcuMS4yMCBhbmQgMi4zLjUuMyAqLwogCWlmIChpb2NfZGF0YS0+cmVjZWl2ZSA9PSAyKSB7Ci0JCS8qIFZjYyBmb3IgTXVsdGljYXN0IEZvcndhcmQuIE5vIHRpbWVyLCBMQU5FdjIgNy4xLjIwIGFuZCAyLjMuNS4zICovCi0KIAkJcHJfZGVidWcoIkxFQ19BUlA6IEF0dGFjaGluZyBtY2FzdCBmb3J3YXJkXG4iKTsKICNpZiAwCiAJCWVudHJ5ID0gbGVjX2FycF9maW5kKHByaXYsIGJ1c19tYWMpOwogCQlpZiAoIWVudHJ5KSB7Ci0JCQlwcmludGsoIkxFQ19BUlA6IE11bHRpY2FzdCBlbnRyeSBub3QgZm91bmQhXG4iKTsKKwkJCXByX2luZm8oIkxFQ19BUlA6IE11bHRpY2FzdCBlbnRyeSBub3QgZm91bmQhXG4iKTsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCW1lbWNweShlbnRyeS0+YXRtX2FkZHIsIGlvY19kYXRhLT5hdG1fYWRkciwgQVRNX0VTQV9MRU4pOwpAQCAtMjE0OSwxOSArMjExMSwxNyBAQAogCQkgKiBWY2Mgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBtYWtlIGRlZmF1bHQgdmNjLAogCQkgKiBhdHRhY2ggaXQgYW55d2F5LgogCQkgKi8KLQkJcHJfZGVidWcKLQkJICAgICgiTEVDX0FSUDpBdHRhY2hpbmcgZGF0YSBkaXJlY3QsIG5vdCBkZWZhdWx0OiAiCi0JCSAgICAgIiUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnhcbiIsCi0JCSAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzBdLCBpb2NfZGF0YS0+YXRtX2FkZHJbMV0sCi0JCSAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzJdLCBpb2NfZGF0YS0+YXRtX2FkZHJbM10sCi0JCSAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzRdLCBpb2NfZGF0YS0+YXRtX2FkZHJbNV0sCi0JCSAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzZdLCBpb2NfZGF0YS0+YXRtX2FkZHJbN10sCi0JCSAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzhdLCBpb2NfZGF0YS0+YXRtX2FkZHJbOV0sCi0JCSAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzEwXSwgaW9jX2RhdGEtPmF0bV9hZGRyWzExXSwKLQkJICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbMTJdLCBpb2NfZGF0YS0+YXRtX2FkZHJbMTNdLAotCQkgICAgIGlvY19kYXRhLT5hdG1fYWRkclsxNF0sIGlvY19kYXRhLT5hdG1fYWRkclsxNV0sCi0JCSAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzE2XSwgaW9jX2RhdGEtPmF0bV9hZGRyWzE3XSwKLQkJICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbMThdLCBpb2NfZGF0YS0+YXRtX2FkZHJbMTldKTsKKwkJcHJfZGVidWcoIkxFQ19BUlA6QXR0YWNoaW5nIGRhdGEgZGlyZWN0LCBub3QgZGVmYXVsdDogJTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeFxuIiwKKwkJCSBpb2NfZGF0YS0+YXRtX2FkZHJbMF0sIGlvY19kYXRhLT5hdG1fYWRkclsxXSwKKwkJCSBpb2NfZGF0YS0+YXRtX2FkZHJbMl0sIGlvY19kYXRhLT5hdG1fYWRkclszXSwKKwkJCSBpb2NfZGF0YS0+YXRtX2FkZHJbNF0sIGlvY19kYXRhLT5hdG1fYWRkcls1XSwKKwkJCSBpb2NfZGF0YS0+YXRtX2FkZHJbNl0sIGlvY19kYXRhLT5hdG1fYWRkcls3XSwKKwkJCSBpb2NfZGF0YS0+YXRtX2FkZHJbOF0sIGlvY19kYXRhLT5hdG1fYWRkcls5XSwKKwkJCSBpb2NfZGF0YS0+YXRtX2FkZHJbMTBdLCBpb2NfZGF0YS0+YXRtX2FkZHJbMTFdLAorCQkJIGlvY19kYXRhLT5hdG1fYWRkclsxMl0sIGlvY19kYXRhLT5hdG1fYWRkclsxM10sCisJCQkgaW9jX2RhdGEtPmF0bV9hZGRyWzE0XSwgaW9jX2RhdGEtPmF0bV9hZGRyWzE1XSwKKwkJCSBpb2NfZGF0YS0+YXRtX2FkZHJbMTZdLCBpb2NfZGF0YS0+YXRtX2FkZHJbMTddLAorCQkJIGlvY19kYXRhLT5hdG1fYWRkclsxOF0sIGlvY19kYXRhLT5hdG1fYWRkclsxOV0pOwogCQllbnRyeSA9IG1ha2VfZW50cnkocHJpdiwgYnVzX21hYyk7CiAJCWlmIChlbnRyeSA9PSBOVUxMKQogCQkJZ290byBvdXQ7CkBAIC0yMTc3LDI5ICsyMTM3LDI4IEBACiAJCWR1bXBfYXJwX3RhYmxlKHByaXYpOwogCQlnb3RvIG91dDsKIAl9Ci0JcHJfZGVidWcKLQkgICAgKCJMRUNfQVJQOkF0dGFjaGluZyBkYXRhIGRpcmVjdCwgZGVmYXVsdDogIgotCSAgICAgIiUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnhcbiIsCi0JICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbMF0sIGlvY19kYXRhLT5hdG1fYWRkclsxXSwKLQkgICAgIGlvY19kYXRhLT5hdG1fYWRkclsyXSwgaW9jX2RhdGEtPmF0bV9hZGRyWzNdLAotCSAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzRdLCBpb2NfZGF0YS0+YXRtX2FkZHJbNV0sCi0JICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbNl0sIGlvY19kYXRhLT5hdG1fYWRkcls3XSwKLQkgICAgIGlvY19kYXRhLT5hdG1fYWRkcls4XSwgaW9jX2RhdGEtPmF0bV9hZGRyWzldLAotCSAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzEwXSwgaW9jX2RhdGEtPmF0bV9hZGRyWzExXSwKLQkgICAgIGlvY19kYXRhLT5hdG1fYWRkclsxMl0sIGlvY19kYXRhLT5hdG1fYWRkclsxM10sCi0JICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbMTRdLCBpb2NfZGF0YS0+YXRtX2FkZHJbMTVdLAotCSAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzE2XSwgaW9jX2RhdGEtPmF0bV9hZGRyWzE3XSwKLQkgICAgIGlvY19kYXRhLT5hdG1fYWRkclsxOF0sIGlvY19kYXRhLT5hdG1fYWRkclsxOV0pOworCXByX2RlYnVnKCJMRUNfQVJQOkF0dGFjaGluZyBkYXRhIGRpcmVjdCwgZGVmYXVsdDogJTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeFxuIiwKKwkJIGlvY19kYXRhLT5hdG1fYWRkclswXSwgaW9jX2RhdGEtPmF0bV9hZGRyWzFdLAorCQkgaW9jX2RhdGEtPmF0bV9hZGRyWzJdLCBpb2NfZGF0YS0+YXRtX2FkZHJbM10sCisJCSBpb2NfZGF0YS0+YXRtX2FkZHJbNF0sIGlvY19kYXRhLT5hdG1fYWRkcls1XSwKKwkJIGlvY19kYXRhLT5hdG1fYWRkcls2XSwgaW9jX2RhdGEtPmF0bV9hZGRyWzddLAorCQkgaW9jX2RhdGEtPmF0bV9hZGRyWzhdLCBpb2NfZGF0YS0+YXRtX2FkZHJbOV0sCisJCSBpb2NfZGF0YS0+YXRtX2FkZHJbMTBdLCBpb2NfZGF0YS0+YXRtX2FkZHJbMTFdLAorCQkgaW9jX2RhdGEtPmF0bV9hZGRyWzEyXSwgaW9jX2RhdGEtPmF0bV9hZGRyWzEzXSwKKwkJIGlvY19kYXRhLT5hdG1fYWRkclsxNF0sIGlvY19kYXRhLT5hdG1fYWRkclsxNV0sCisJCSBpb2NfZGF0YS0+YXRtX2FkZHJbMTZdLCBpb2NfZGF0YS0+YXRtX2FkZHJbMTddLAorCQkgaW9jX2RhdGEtPmF0bV9hZGRyWzE4XSwgaW9jX2RhdGEtPmF0bV9hZGRyWzE5XSk7CiAJZm9yIChpID0gMDsgaSA8IExFQ19BUlBfVEFCTEVfU0laRTsgaSsrKSB7Ci0JCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBub2RlLCAmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0sIG5leHQpIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIG5vZGUsCisJCQkJICAgICAmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0sIG5leHQpIHsKIAkJCWlmIChtZW1jbXAKIAkJCSAgICAoaW9jX2RhdGEtPmF0bV9hZGRyLCBlbnRyeS0+YXRtX2FkZHIsCiAJCQkgICAgIEFUTV9FU0FfTEVOKSA9PSAwKSB7CiAJCQkJcHJfZGVidWcoIkxFQ19BUlA6IEF0dGFjaGluZyBkYXRhIGRpcmVjdFxuIik7CiAJCQkJcHJfZGVidWcoIkN1cnJlbnRseSAtPiBWY2M6ICVkLCBSdmNjOiVkXG4iLAotCQkJCQllbnRyeS0+dmNjID8gZW50cnktPnZjYy0+dmNpIDogMCwKLQkJCQkJZW50cnktPnJlY3ZfdmNjID8gZW50cnktPnJlY3ZfdmNjLT4KLQkJCQkJdmNpIDogMCk7CisJCQkJCSBlbnRyeS0+dmNjID8gZW50cnktPnZjYy0+dmNpIDogMCwKKwkJCQkJIGVudHJ5LT5yZWN2X3ZjYyA/IGVudHJ5LT5yZWN2X3ZjYy0+CisJCQkJCSB2Y2kgOiAwKTsKIAkJCQlmb3VuZF9lbnRyeSA9IDE7CiAJCQkJZGVsX3RpbWVyKCZlbnRyeS0+dGltZXIpOwogCQkJCWVudHJ5LT52Y2MgPSB2Y2M7CkBAIC0yMjcxLDE5ICsyMjMwLDIxIEBACiAJc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5OwogCWludCBpOwogCi0JcHJfZGVidWcoIkxFQzpsZWNfZmx1c2hfY29tcGxldGUgJWx4XG4iLCB0cmFuX2lkKTsKKwlwcl9kZWJ1ZygiJWx4XG4iLCB0cmFuX2lkKTsKIHJlc3RhcnQ6CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBMRUNfQVJQX1RBQkxFX1NJWkU7IGkrKykgewotCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbm9kZSwgJnByaXYtPmxlY19hcnBfdGFibGVzW2ldLCBuZXh0KSB7Ci0JCQlpZiAoZW50cnktPmZsdXNoX3RyYW5faWQgPT0gdHJhbl9pZAotCQkJICAgICYmIGVudHJ5LT5zdGF0dXMgPT0gRVNJX0ZMVVNIX1BFTkRJTkcpIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIG5vZGUsCisJCQkJICAgICAmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0sIG5leHQpIHsKKwkJCWlmIChlbnRyeS0+Zmx1c2hfdHJhbl9pZCA9PSB0cmFuX2lkICYmCisJCQkgICAgZW50cnktPnN0YXR1cyA9PSBFU0lfRkxVU0hfUEVORElORykgewogCQkJCXN0cnVjdCBza19idWZmICpza2I7CiAJCQkJc3RydWN0IGF0bV92Y2MgKnZjYyA9IGVudHJ5LT52Y2M7CiAKIAkJCQlsZWNfYXJwX2hvbGQoZW50cnkpOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwotCQkJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmVudHJ5LT50eF93YWl0KSkgIT0gTlVMTCkKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sZWNfYXJwX2xvY2ssCisJCQkJCQkgICAgICAgZmxhZ3MpOworCQkJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmVudHJ5LT50eF93YWl0KSkpCiAJCQkJCWxlY19zZW5kKHZjYywgc2tiKTsKIAkJCQllbnRyeS0+bGFzdF91c2VkID0gamlmZmllczsKIAkJCQllbnRyeS0+c3RhdHVzID0gRVNJX0ZPUldBUkRfRElSRUNUOwpAQCAtMjMwOCwxMSArMjI2OSwxMiBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBMRUNfQVJQX1RBQkxFX1NJWkU7IGkrKykKLQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIG5vZGUsICZwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSwgbmV4dCkgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbm9kZSwKKwkJCQkgICAgICZwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSwgbmV4dCkgewogCQkJaWYgKCFtZW1jbXAoYXRtX2FkZHIsIGVudHJ5LT5hdG1fYWRkciwgQVRNX0VTQV9MRU4pKSB7CiAJCQkJZW50cnktPmZsdXNoX3RyYW5faWQgPSB0cmFuX2lkOwogCQkJCXByX2RlYnVnKCJTZXQgZmx1c2ggdHJhbnNhY3Rpb24gaWQgdG8gJWx4IGZvciAlcFxuIiwKLQkJCQkJdHJhbl9pZCwgZW50cnkpOworCQkJCQkgdHJhbl9pZCwgZW50cnkpOwogCQkJfQogCQl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CkBAIC0yMzI4LDcgKzIyOTAsOCBAQAogCXN0cnVjdCBsZWNfdmNjX3ByaXYgKnZwcml2OwogCWludCBlcnIgPSAwOwogCi0JaWYgKCEodnByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGVjX3ZjY19wcml2KSwgR0ZQX0tFUk5FTCkpKQorCXZwcml2ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGxlY192Y2NfcHJpdiksIEdGUF9LRVJORUwpOworCWlmICghdnByaXYpCiAJCXJldHVybiAtRU5PTUVNOwogCXZwcml2LT54b2ZmID0gMDsKIAl2cHJpdi0+b2xkX3BvcCA9IHZjYy0+cG9wOwpAQCAtMjM2OCwxOCArMjMzMSwxOSBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sZWNfYXJwX2xvY2ssIGZsYWdzKTsKIAogCWZvciAoaSA9IDA7IGkgPCBMRUNfQVJQX1RBQkxFX1NJWkU7IGkrKykgewotCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LCAmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0sIG5leHQpIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbm9kZSwgbmV4dCwKKwkJCQkJICAmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0sIG5leHQpIHsKIAkJCWlmICh2Y2MgPT0gZW50cnktPnZjYykgewogCQkJCWxlY19hcnBfcmVtb3ZlKHByaXYsIGVudHJ5KTsKIAkJCQlsZWNfYXJwX3B1dChlbnRyeSk7Ci0JCQkJaWYgKHByaXYtPm1jYXN0X3ZjYyA9PSB2Y2MpIHsKKwkJCQlpZiAocHJpdi0+bWNhc3RfdmNjID09IHZjYykKIAkJCQkJcHJpdi0+bWNhc3RfdmNjID0gTlVMTDsKLQkJCQl9CiAJCQl9CiAJCX0KIAl9CiAKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LCAmcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzLCBuZXh0KSB7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbm9kZSwgbmV4dCwKKwkJCQkgICZwcml2LT5sZWNfYXJwX2VtcHR5X29uZXMsIG5leHQpIHsKIAkJaWYgKGVudHJ5LT52Y2MgPT0gdmNjKSB7CiAJCQlsZWNfYXJwX2NsZWFyX3ZjY3MoZW50cnkpOwogCQkJZGVsX3RpbWVyKCZlbnRyeS0+dGltZXIpOwpAQCAtMjM4OCw3ICsyMzUyLDggQEAKIAkJfQogCX0KIAotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5vZGUsIG5leHQsICZwcml2LT5sZWNfbm9fZm9yd2FyZCwgbmV4dCkgeworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5vZGUsIG5leHQsCisJCQkJICAmcHJpdi0+bGVjX25vX2ZvcndhcmQsIG5leHQpIHsKIAkJaWYgKGVudHJ5LT5yZWN2X3ZjYyA9PSB2Y2MpIHsKIAkJCWxlY19hcnBfY2xlYXJfdmNjcyhlbnRyeSk7CiAJCQlkZWxfdGltZXIoJmVudHJ5LT50aW1lcik7CkBAIC0yNDI5LDE0ICsyMzk0LDE2IEBACiAJCXNyYyA9IGhkci0+aF9zb3VyY2U7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbm9kZSwgbmV4dCwgJnByaXYtPmxlY19hcnBfZW1wdHlfb25lcywgbmV4dCkgeworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5vZGUsIG5leHQsCisJCQkJICAmcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzLCBuZXh0KSB7CiAJCWlmICh2Y2MgPT0gZW50cnktPnZjYykgewogCQkJZGVsX3RpbWVyKCZlbnRyeS0+dGltZXIpOwogCQkJbWVtY3B5KGVudHJ5LT5tYWNfYWRkciwgc3JjLCBFVEhfQUxFTik7CiAJCQllbnRyeS0+c3RhdHVzID0gRVNJX0ZPUldBUkRfRElSRUNUOwogCQkJZW50cnktPmxhc3RfdXNlZCA9IGppZmZpZXM7CiAJCQkvKiBXZSBtaWdodCBoYXZlIGdvdCBhbiBlbnRyeSAqLwotCQkJaWYgKCh0bXAgPSBsZWNfYXJwX2ZpbmQocHJpdiwgc3JjKSkpIHsKKwkJCXRtcCA9IGxlY19hcnBfZmluZChwcml2LCBzcmMpOworCQkJaWYgKHRtcCkgewogCQkJCWxlY19hcnBfcmVtb3ZlKHByaXYsIHRtcCk7CiAJCQkJbGVjX2FycF9wdXQodG1wKTsKIAkJCX0KZGlmZiAtLWdpdCBhL25ldC9hdG0vbXBjLmMgYi9uZXQvYXRtL21wYy5jCmluZGV4IDM4YTZjYjAuLmE2NTIxYzggMTAwNjQ0Ci0tLSBhL25ldC9hdG0vbXBjLmMKKysrIGIvbmV0L2F0bS9tcGMuYwpAQCAtMSwzICsxLDUgQEAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjolczogIiBmbXQsIF9fZnVuY19fCisKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgpAQCAtMTMsOCArMTUsOCBAQAogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bmV0L2NoZWNrc3VtLmg+ICAgLyogZm9yIGlwX2Zhc3RfY3N1bSgpICovCiAjaW5jbHVkZSA8bmV0L2FycC5oPgogI2luY2x1ZGUgPG5ldC9kc3QuaD4KQEAgLTM2LDMxICszOCw0NyBAQAogICovCiAKICNpZiAwCi0jZGVmaW5lIGRwcmludGsgcHJpbnRrICAgLyogZGVidWcgKi8KKyNkZWZpbmUgZHByaW50ayhmb3JtYXQsIGFyZ3MuLi4pIFwKKwlwcmludGsoS0VSTl9ERUJVRyAibXBvYTolczogIiBmb3JtYXQsIF9fZnVuY19fLCAjI2FyZ3MpCisjZGVmaW5lIGRwcmludGtfY29udChmb3JtYXQsIGFyZ3MuLi4pIHByaW50ayhLRVJOX0NPTlQgZm9ybWF0LCAjI2FyZ3MpCiAjZWxzZQotI2RlZmluZSBkcHJpbnRrKGZvcm1hdCxhcmdzLi4uKQorI2RlZmluZSBkcHJpbnRrKGZvcm1hdCwgYXJncy4uLikJCQkJCVwKKwlkbyB7IGlmICgwKQkJCQkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHICJtcG9hOiVzOiAiIGZvcm1hdCwgX19mdW5jX18sICMjYXJncyk7XAorCX0gd2hpbGUgKDApCisjZGVmaW5lIGRwcmludGtfY29udChmb3JtYXQsIGFyZ3MuLi4pCQkJXAorCWRvIHsgaWYgKDApIHByaW50ayhLRVJOX0NPTlQgZm9ybWF0LCAjI2FyZ3MpOyB9IHdoaWxlICgwKQogI2VuZGlmCiAKICNpZiAwCi0jZGVmaW5lIGRkcHJpbnRrIHByaW50ayAgLyogbW9yZSBkZWJ1ZyAqLworI2RlZmluZSBkZHByaW50ayhmb3JtYXQsIGFyZ3MuLi4pIFwKKwlwcmludGsoS0VSTl9ERUJVRyAibXBvYTolczogIiBmb3JtYXQsIF9fZnVuY19fLCAjI2FyZ3MpCisjZGVmaW5lIGRkcHJpbnRrX2NvbnQoZm9ybWF0LCBhcmdzLi4uKSBwcmludGsoS0VSTl9DT05UIGZvcm1hdCwgIyNhcmdzKQogI2Vsc2UKLSNkZWZpbmUgZGRwcmludGsoZm9ybWF0LGFyZ3MuLi4pCisjZGVmaW5lIGRkcHJpbnRrKGZvcm1hdCwgYXJncy4uLikJCQkJCVwKKwlkbyB7IGlmICgwKQkJCQkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHICJtcG9hOiVzOiAiIGZvcm1hdCwgX19mdW5jX18sICMjYXJncyk7XAorCX0gd2hpbGUgKDApCisjZGVmaW5lIGRkcHJpbnRrX2NvbnQoZm9ybWF0LCBhcmdzLi4uKQkJCVwKKwlkbyB7IGlmICgwKSBwcmludGsoS0VSTl9DT05UIGZvcm1hdCwgIyNhcmdzKTsgfSB3aGlsZSAoMCkKICNlbmRpZgogCi0KLQogI2RlZmluZSBNUE9BX1RBR19MRU4gNAogCiAvKiBtcGNfZGFlbW9uIC0+IGtlcm5lbCAqLwotc3RhdGljIHZvaWQgTVBPQV90cmlnZ2VyX3JjdmQgKHN0cnVjdCBrX21lc3NhZ2UgKm1zZywgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpOworc3RhdGljIHZvaWQgTVBPQV90cmlnZ2VyX3JjdmQoc3RydWN0IGtfbWVzc2FnZSAqbXNnLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYyk7CiBzdGF0aWMgdm9pZCBNUE9BX3Jlc19yZXBseV9yY3ZkKHN0cnVjdCBrX21lc3NhZ2UgKm1zZywgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpOwogc3RhdGljIHZvaWQgaW5ncmVzc19wdXJnZV9yY3ZkKHN0cnVjdCBrX21lc3NhZ2UgKm1zZywgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpOwogc3RhdGljIHZvaWQgZWdyZXNzX3B1cmdlX3JjdmQoc3RydWN0IGtfbWVzc2FnZSAqbXNnLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYyk7CiBzdGF0aWMgdm9pZCBtcHNfZGVhdGgoc3RydWN0IGtfbWVzc2FnZSAqbXNnLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYyk7Ci1zdGF0aWMgdm9pZCBjbGVhbl91cChzdHJ1Y3Qga19tZXNzYWdlICptc2csIHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjLCBpbnQgYWN0aW9uKTsKLXN0YXRpYyB2b2lkIE1QT0FfY2FjaGVfaW1wb3NfcmN2ZChzdHJ1Y3Qga19tZXNzYWdlICptc2csIHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjKTsKLXN0YXRpYyB2b2lkIHNldF9tcGNfY3RybF9hZGRyX3JjdmQoc3RydWN0IGtfbWVzc2FnZSAqbWVzZywgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpOwotc3RhdGljIHZvaWQgc2V0X21wc19tYWNfYWRkcl9yY3ZkKHN0cnVjdCBrX21lc3NhZ2UgKm1lc2csIHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjKTsKK3N0YXRpYyB2b2lkIGNsZWFuX3VwKHN0cnVjdCBrX21lc3NhZ2UgKm1zZywgc3RydWN0IG1wb2FfY2xpZW50ICptcGMsCisJCSAgICAgaW50IGFjdGlvbik7CitzdGF0aWMgdm9pZCBNUE9BX2NhY2hlX2ltcG9zX3JjdmQoc3RydWN0IGtfbWVzc2FnZSAqbXNnLAorCQkJCSAgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpOworc3RhdGljIHZvaWQgc2V0X21wY19jdHJsX2FkZHJfcmN2ZChzdHJ1Y3Qga19tZXNzYWdlICptZXNnLAorCQkJCSAgIHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjKTsKK3N0YXRpYyB2b2lkIHNldF9tcHNfbWFjX2FkZHJfcmN2ZChzdHJ1Y3Qga19tZXNzYWdlICptZXNnLAorCQkJCSAgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpOwogCiBzdGF0aWMgY29uc3QgdWludDhfdCAqY29weV9tYWNzKHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjLAogCQkJCWNvbnN0IHVpbnQ4X3QgKnJvdXRlcl9tYWMsCkBAIC03NCwxMCArOTIsMTEgQEAKIAogc3RhdGljIHZvaWQgbXBjX3B1c2goc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBzdGF0aWMgbmV0ZGV2X3R4X3QgbXBjX3NlbmRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLXN0YXRpYyBpbnQgbXBvYV9ldmVudF9saXN0ZW5lcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm1wb2Ffbm90aWZpZXIsIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRldik7CisJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitzdGF0aWMgaW50IG1wb2FfZXZlbnRfbGlzdGVuZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICptcG9hX25vdGlmaWVyLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKmRldik7CiBzdGF0aWMgdm9pZCBtcGNfdGltZXJfcmVmcmVzaCh2b2lkKTsKLXN0YXRpYyB2b2lkIG1wY19jYWNoZV9jaGVjayggdW5zaWduZWQgbG9uZyBjaGVja2luZ190aW1lICApOworc3RhdGljIHZvaWQgbXBjX2NhY2hlX2NoZWNrKHVuc2lnbmVkIGxvbmcgY2hlY2tpbmdfdGltZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgbGxjX3NuYXBfaGRyIGxsY19zbmFwX21wb2FfY3RybCA9IHsKIAkweGFhLCAweGFhLCAweDAzLApAQCAtMTY3LDcgKzE4Niw3IEBACiAKIAllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhdG1fbXBvYV9xb3MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZW50cnkgPT0gTlVMTCkgewotCQlwcmludGsoIm1wb2E6IGF0bV9tcG9hX2FkZF9xb3M6IG91dCBvZiBtZW1vcnlcbiIpOworCQlwcl9pbmZvKCJtcG9hOiBvdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIGVudHJ5OwogCX0KIApAQCAtMTg1LDEwICsyMDQsOSBAQAogCXN0cnVjdCBhdG1fbXBvYV9xb3MgKnFvczsKIAogCXFvcyA9IHFvc19oZWFkOwotCXdoaWxlKCBxb3MgIT0gTlVMTCApewotCQlpZihxb3MtPmlwYWRkciA9PSBkc3RfaXApIHsKKwl3aGlsZSAocW9zKSB7CisJCWlmIChxb3MtPmlwYWRkciA9PSBkc3RfaXApCiAJCQlicmVhazsKLQkJfQogCQlxb3MgPSBxb3MtPm5leHQ7CiAJfQogCkBAIC0yMDAsMTAgKzIxOCwxMCBAQAogICovCiBpbnQgYXRtX21wb2FfZGVsZXRlX3FvcyhzdHJ1Y3QgYXRtX21wb2FfcW9zICplbnRyeSkKIHsKLQogCXN0cnVjdCBhdG1fbXBvYV9xb3MgKmN1cnI7CiAKLQlpZiAoZW50cnkgPT0gTlVMTCkgcmV0dXJuIDA7CisJaWYgKGVudHJ5ID09IE5VTEwpCisJCXJldHVybiAwOwogCWlmIChlbnRyeSA9PSBxb3NfaGVhZCkgewogCQlxb3NfaGVhZCA9IHFvc19oZWFkLT5uZXh0OwogCQlrZnJlZShlbnRyeSk7CkBAIC0yMzQsOSArMjUyLDE3IEBACiAKIAl3aGlsZSAocW9zICE9IE5VTEwpIHsKIAkJc2VxX3ByaW50ZihtLCAiJXBJNFxuICAgICAlLTdkICUtN2QgJS03ZCAlLTdkICUtN2RcbiAgICAgJS03ZCAlLTdkICUtN2QgJS03ZCAlLTdkXG4iLAotCQkJCSZxb3MtPmlwYWRkciwKLQkJCQlxb3MtPnFvcy50eHRwLm1heF9wY3IsIHFvcy0+cW9zLnR4dHAucGNyLCBxb3MtPnFvcy50eHRwLm1pbl9wY3IsIHFvcy0+cW9zLnR4dHAubWF4X2NkdiwgcW9zLT5xb3MudHh0cC5tYXhfc2R1LAotCQkJCXFvcy0+cW9zLnJ4dHAubWF4X3BjciwgcW9zLT5xb3Mucnh0cC5wY3IsIHFvcy0+cW9zLnJ4dHAubWluX3BjciwgcW9zLT5xb3Mucnh0cC5tYXhfY2R2LCBxb3MtPnFvcy5yeHRwLm1heF9zZHUpOworCQkJICAgJnFvcy0+aXBhZGRyLAorCQkJICAgcW9zLT5xb3MudHh0cC5tYXhfcGNyLAorCQkJICAgcW9zLT5xb3MudHh0cC5wY3IsCisJCQkgICBxb3MtPnFvcy50eHRwLm1pbl9wY3IsCisJCQkgICBxb3MtPnFvcy50eHRwLm1heF9jZHYsCisJCQkgICBxb3MtPnFvcy50eHRwLm1heF9zZHUsCisJCQkgICBxb3MtPnFvcy5yeHRwLm1heF9wY3IsCisJCQkgICBxb3MtPnFvcy5yeHRwLnBjciwKKwkJCSAgIHFvcy0+cW9zLnJ4dHAubWluX3BjciwKKwkJCSAgIHFvcy0+cW9zLnJ4dHAubWF4X2NkdiwKKwkJCSAgIHFvcy0+cW9zLnJ4dHAubWF4X3NkdSk7CiAJCXFvcyA9IHFvcy0+bmV4dDsKIAl9CiB9CkBAIC0yNTYsNyArMjgyLDcgQEAKIHsKIAlzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYzsKIAotCW1wYyA9IGt6YWxsb2Moc2l6ZW9mIChzdHJ1Y3QgbXBvYV9jbGllbnQpLCBHRlBfS0VSTkVMKTsKKwltcGMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXBvYV9jbGllbnQpLCBHRlBfS0VSTkVMKTsKIAlpZiAobXBjID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCXJ3bG9ja19pbml0KCZtcGMtPmluZ3Jlc3NfbG9jayk7CkBAIC0yNjYsNyArMjkyLDcgQEAKIAogCW1wYy0+cGFyYW1ldGVycy5tcGNfcDEgPSBNUENfUDE7CiAJbXBjLT5wYXJhbWV0ZXJzLm1wY19wMiA9IE1QQ19QMjsKLQltZW1zZXQobXBjLT5wYXJhbWV0ZXJzLm1wY19wMywwLHNpemVvZihtcGMtPnBhcmFtZXRlcnMubXBjX3AzKSk7CisJbWVtc2V0KG1wYy0+cGFyYW1ldGVycy5tcGNfcDMsIDAsIHNpemVvZihtcGMtPnBhcmFtZXRlcnMubXBjX3AzKSk7CiAJbXBjLT5wYXJhbWV0ZXJzLm1wY19wNCA9IE1QQ19QNDsKIAltcGMtPnBhcmFtZXRlcnMubXBjX3A1ID0gTVBDX1A1OwogCW1wYy0+cGFyYW1ldGVycy5tcGNfcDYgPSBNUENfUDY7CkBAIC0yODYsOSArMzEyLDkgQEAKIHN0YXRpYyB2b2lkIHN0YXJ0X21wYyhzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYywgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAotCWRwcmludGsoIm1wb2E6ICglcykgc3RhcnRfbXBjOlxuIiwgbXBjLT5kZXYtPm5hbWUpOworCWRwcmludGsoIiglcylcbiIsIG1wYy0+ZGV2LT5uYW1lKTsKIAlpZiAoIWRldi0+bmV0ZGV2X29wcykKLQkJcHJpbnRrKCJtcG9hOiAoJXMpIHN0YXJ0X21wYyAgbm90IHN0YXJ0aW5nXG4iLCBkZXYtPm5hbWUpOworCQlwcl9pbmZvKCIoJXMpIG5vdCBzdGFydGluZ1xuIiwgZGV2LT5uYW1lKTsKIAllbHNlIHsKIAkJbXBjLT5vbGRfb3BzID0gZGV2LT5uZXRkZXZfb3BzOwogCQltcGMtPm5ld19vcHMgPSAqbXBjLT5vbGRfb3BzOwpAQCAtMzAwLDE0ICszMjYsMTQgQEAKIHN0YXRpYyB2b2lkIHN0b3BfbXBjKHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBtcGMtPmRldjsKLQlkcHJpbnRrKCJtcG9hOiAoJXMpIHN0b3BfbXBjOiIsIG1wYy0+ZGV2LT5uYW1lKTsKKwlkcHJpbnRrKCIoJXMpIiwgbXBjLT5kZXYtPm5hbWUpOwogCiAJLyogTGV0cyBub3QgbnVsbGlmeSBsZWMgZGV2aWNlJ3MgZGV2LT5oYXJkX3N0YXJ0X3htaXQgKi8KIAlpZiAoZGV2LT5uZXRkZXZfb3BzICE9ICZtcGMtPm5ld19vcHMpIHsKLQkJZHByaW50aygiIG1wYyBhbHJlYWR5IHN0b3BwZWQsIG5vdCBmYXRhbFxuIik7CisJCWRwcmludGtfY29udCgiIG1wYyBhbHJlYWR5IHN0b3BwZWQsIG5vdCBmYXRhbFxuIik7CiAJCXJldHVybjsKIAl9Ci0JZHByaW50aygiXG4iKTsKKwlkcHJpbnRrX2NvbnQoIlxuIik7CiAKIAlkZXYtPm5ldGRldl9vcHMgPSBtcGMtPm9sZF9vcHM7CiAJbXBjLT5vbGRfb3BzID0gTlVMTDsKQEAgLTMxOSwyNSArMzQ1LDE4IEBACiAKIHN0YXRpYyBjb25zdCBjaGFyICptcG9hX2RldmljZV90eXBlX3N0cmluZyhjaGFyIHR5cGUpCiB7Ci0Jc3dpdGNoKHR5cGUpIHsKKwlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIE5PTl9NUE9BOgogCQlyZXR1cm4gIm5vbi1NUE9BIGRldmljZSI7Ci0JCWJyZWFrOwogCWNhc2UgTVBTOgogCQlyZXR1cm4gIk1QUyI7Ci0JCWJyZWFrOwogCWNhc2UgTVBDOgogCQlyZXR1cm4gIk1QQyI7Ci0JCWJyZWFrOwogCWNhc2UgTVBTX0FORF9NUEM6CiAJCXJldHVybiAiYm90aCBNUFMgYW5kIE1QQyI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAidW5zcGVjaWZpZWQgKG5vbi1NUE9BKSBkZXZpY2UiOwotCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gIiI7IC8qIG5vdCByZWFjaGVkICovCisJcmV0dXJuICJ1bnNwZWNpZmllZCAobm9uLU1QT0EpIGRldmljZSI7CiB9CiAKIC8qCkBAIC0zNjIsMjYgKzM4MSwyOCBAQAogCXN0cnVjdCBtcG9hX2NsaWVudCAqbXBjOwogCiAJbXBvYV9kZXZpY2VfdHlwZSA9IG51bWJlcl9vZl9tcHNfbWFjcyA9IDA7IC8qIHNpbGVuY2UgZ2NjICovCi0JZHByaW50aygibXBvYTogKCVzKSBsYW5lMl9hc3NvY19pbmQ6IHJlY2VpdmVkIFRMVihzKSwgIiwgZGV2LT5uYW1lKTsKKwlkcHJpbnRrKCIoJXMpIHJlY2VpdmVkIFRMVihzKSwgIiwgZGV2LT5uYW1lKTsKIAlkcHJpbnRrKCJ0b3RhbCBsZW5ndGggb2YgYWxsIFRMVnMgJWRcbiIsIHNpemVvZnRsdnMpOwogCW1wYyA9IGZpbmRfbXBjX2J5X2xlYyhkZXYpOyAvKiBTYW1wby1GaXg6IG1vdmVkIGhlcmUgZnJvbSBiZWxvdyAqLwogCWlmIChtcGMgPT0gTlVMTCkgewotCQlwcmludGsoIm1wb2E6ICglcykgbGFuZTJfYXNzb2NfaW5kOiBubyBtcGNcbiIsIGRldi0+bmFtZSk7CisJCXByX2luZm8oIiglcykgbm8gbXBjXG4iLCBkZXYtPm5hbWUpOwogCQlyZXR1cm47CiAJfQogCWVuZF9vZl90bHZzID0gdGx2cyArIHNpemVvZnRsdnM7CiAJd2hpbGUgKGVuZF9vZl90bHZzIC0gdGx2cyA+PSA1KSB7Ci0JCXR5cGUgPSAodGx2c1swXSA8PCAyNCkgfCAodGx2c1sxXSA8PCAxNikgfCAodGx2c1syXSA8PCA4KSB8IHRsdnNbM107CisJCXR5cGUgPSAoKHRsdnNbMF0gPDwgMjQpIHwgKHRsdnNbMV0gPDwgMTYpIHwKKwkJCSh0bHZzWzJdIDw8IDgpIHwgdGx2c1szXSk7CiAJCWxlbmd0aCA9IHRsdnNbNF07CiAJCXRsdnMgKz0gNTsKIAkJZHByaW50aygiICAgIHR5cGUgMHgleCBsZW5ndGggJTAyeFxuIiwgdHlwZSwgbGVuZ3RoKTsKIAkJaWYgKHRsdnMgKyBsZW5ndGggPiBlbmRfb2ZfdGx2cykgewotCQkJcHJpbnRrKCJUTFYgdmFsdWUgZXh0ZW5kcyBwYXN0IGl0cyBidWZmZXIsIGFib3J0aW5nIHBhcnNlXG4iKTsKKwkJCXByX2luZm8oIlRMViB2YWx1ZSBleHRlbmRzIHBhc3QgaXRzIGJ1ZmZlciwgYWJvcnRpbmcgcGFyc2VcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAKIAkJaWYgKHR5cGUgPT0gMCkgewotCQkJcHJpbnRrKCJtcG9hOiAoJXMpIGxhbmUyX2Fzc29jX2luZDogVExWIHR5cGUgd2FzIDAsIHJldHVybmluZ1xuIiwgZGV2LT5uYW1lKTsKKwkJCXByX2luZm8oIm1wb2E6ICglcykgVExWIHR5cGUgd2FzIDAsIHJldHVybmluZ1xuIiwKKwkJCQlkZXYtPm5hbWUpOwogCQkJcmV0dXJuOwogCQl9CiAKQEAgLTM5MSwzOSArNDEyLDQ4IEBACiAJCX0KIAkJbXBvYV9kZXZpY2VfdHlwZSA9ICp0bHZzKys7CiAJCW51bWJlcl9vZl9tcHNfbWFjcyA9ICp0bHZzKys7Ci0JCWRwcmludGsoIm1wb2E6ICglcykgTVBPQSBkZXZpY2UgdHlwZSAnJXMnLCAiLCBkZXYtPm5hbWUsIG1wb2FfZGV2aWNlX3R5cGVfc3RyaW5nKG1wb2FfZGV2aWNlX3R5cGUpKTsKKwkJZHByaW50aygiKCVzKSBNUE9BIGRldmljZSB0eXBlICclcycsICIsCisJCQlkZXYtPm5hbWUsIG1wb2FfZGV2aWNlX3R5cGVfc3RyaW5nKG1wb2FfZGV2aWNlX3R5cGUpKTsKIAkJaWYgKG1wb2FfZGV2aWNlX3R5cGUgPT0gTVBTX0FORF9NUEMgJiYKIAkJICAgIGxlbmd0aCA8ICg0MiArIG51bWJlcl9vZl9tcHNfbWFjcypFVEhfQUxFTikpIHsgLyogOikgKi8KLQkJCXByaW50aygiXG5tcG9hOiAoJXMpIGxhbmUyX2Fzc29jX2luZDogc2hvcnQgTVBPQSBEZXZpY2UgVHlwZSBUTFZcbiIsCi0JCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICgobXBvYV9kZXZpY2VfdHlwZSA9PSBNUFMgfHwgbXBvYV9kZXZpY2VfdHlwZSA9PSBNUEMpCi0JCSAgICAmJiBsZW5ndGggPCAyMiArIG51bWJlcl9vZl9tcHNfbWFjcypFVEhfQUxFTikgewotCQkJcHJpbnRrKCJcbm1wb2E6ICglcykgbGFuZTJfYXNzb2NfaW5kOiBzaG9ydCBNUE9BIERldmljZSBUeXBlIFRMVlxuIiwKKwkJCXByX2luZm8oIiglcykgc2hvcnQgTVBPQSBEZXZpY2UgVHlwZSBUTFZcbiIsCiAJCQkJZGV2LT5uYW1lKTsKIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWlmIChtcG9hX2RldmljZV90eXBlICE9IE1QUyAmJiBtcG9hX2RldmljZV90eXBlICE9IE1QU19BTkRfTVBDKSB7Ci0JCQlkcHJpbnRrKCJpZ25vcmluZyBub24tTVBTIGRldmljZVxuIik7Ci0JCQlpZiAobXBvYV9kZXZpY2VfdHlwZSA9PSBNUEMpIHRsdnMgKz0gMjA7CisJCWlmICgobXBvYV9kZXZpY2VfdHlwZSA9PSBNUFMgfHwgbXBvYV9kZXZpY2VfdHlwZSA9PSBNUEMpICYmCisJCSAgICBsZW5ndGggPCAyMiArIG51bWJlcl9vZl9tcHNfbWFjcypFVEhfQUxFTikgeworCQkJcHJfaW5mbygiKCVzKSBzaG9ydCBNUE9BIERldmljZSBUeXBlIFRMVlxuIiwgZGV2LT5uYW1lKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChtcG9hX2RldmljZV90eXBlICE9IE1QUyAmJgorCQkgICAgbXBvYV9kZXZpY2VfdHlwZSAhPSBNUFNfQU5EX01QQykgeworCQkJZHByaW50aygiaWdub3Jpbmcgbm9uLU1QUyBkZXZpY2UgIik7CisJCQlpZiAobXBvYV9kZXZpY2VfdHlwZSA9PSBNUEMpCisJCQkJdGx2cyArPSAyMDsKIAkJCWNvbnRpbnVlOyAgLyogd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBNUFNzICovCiAJCX0KLQkJaWYgKG51bWJlcl9vZl9tcHNfbWFjcyA9PSAwICYmIG1wb2FfZGV2aWNlX3R5cGUgPT0gTVBTX0FORF9NUEMpIHsKLQkJCXByaW50aygiXG5tcG9hOiAoJXMpIGxhbmUyX2Fzc29jX2luZDogTVBTX0FORF9NUEMgaGFzIHplcm8gTUFDc1xuIiwgZGV2LT5uYW1lKTsKKwkJaWYgKG51bWJlcl9vZl9tcHNfbWFjcyA9PSAwICYmCisJCSAgICBtcG9hX2RldmljZV90eXBlID09IE1QU19BTkRfTVBDKSB7CisJCQlwcl9pbmZvKCIoJXMpIE1QU19BTkRfTVBDIGhhcyB6ZXJvIE1BQ3NcbiIsIGRldi0+bmFtZSk7CiAJCQljb250aW51ZTsgIC8qIHNvbWVvbmUgc2hvdWxkIHJlYWQgdGhlIHNwZWMgKi8KIAkJfQotCQlkcHJpbnRrKCJ0aGlzIE1QUyBoYXMgJWQgTUFDIGFkZHJlc3Nlc1xuIiwgbnVtYmVyX29mX21wc19tYWNzKTsKKwkJZHByaW50a19jb250KCJ0aGlzIE1QUyBoYXMgJWQgTUFDIGFkZHJlc3Nlc1xuIiwKKwkJCSAgICAgbnVtYmVyX29mX21wc19tYWNzKTsKIAotCQkvKiBvaywgbm93IHdlIGNhbiBnbyBhbmQgdGVsbCBvdXIgZGFlbW9uIHRoZSBjb250cm9sIGFkZHJlc3Mgb2YgTVBTICovCisJCS8qCisJCSAqIG9rLCBub3cgd2UgY2FuIGdvIGFuZCB0ZWxsIG91ciBkYWVtb24KKwkJICogdGhlIGNvbnRyb2wgYWRkcmVzcyBvZiBNUFMKKwkJICovCiAJCXNlbmRfc2V0X21wc19jdHJsX2FkZHIodGx2cywgbXBjKTsKIAotCQl0bHZzID0gY29weV9tYWNzKG1wYywgbWFjX2FkZHIsIHRsdnMsIG51bWJlcl9vZl9tcHNfbWFjcywgbXBvYV9kZXZpY2VfdHlwZSk7Ci0JCWlmICh0bHZzID09IE5VTEwpIHJldHVybjsKKwkJdGx2cyA9IGNvcHlfbWFjcyhtcGMsIG1hY19hZGRyLCB0bHZzLAorCQkJCSBudW1iZXJfb2ZfbXBzX21hY3MsIG1wb2FfZGV2aWNlX3R5cGUpOworCQlpZiAodGx2cyA9PSBOVUxMKQorCQkJcmV0dXJuOwogCX0KIAlpZiAoZW5kX29mX3RsdnMgLSB0bHZzICE9IDApCi0JCXByaW50aygibXBvYTogKCVzKSBsYW5lMl9hc3NvY19pbmQ6IGlnbm9yaW5nICVaZCBieXRlcyBvZiB0cmFpbGluZyBUTFYgY2FyYmFnZVxuIiwKLQkJICAgICAgIGRldi0+bmFtZSwgZW5kX29mX3RsdnMgLSB0bHZzKTsKKwkJcHJfaW5mbygiKCVzKSBpZ25vcmluZyAlWmQgYnl0ZXMgb2YgdHJhaWxpbmcgVExWIGdhcmJhZ2VcbiIsCisJCQlkZXYtPm5hbWUsIGVuZF9vZl90bHZzIC0gdGx2cyk7CiAJcmV0dXJuOwogfQogCkBAIC00NDEsMTEgKzQ3MSwxMiBAQAogCW51bV9tYWNzID0gKG1wc19tYWNzID4gMSkgPyBtcHNfbWFjcyA6IDE7CiAKIAlpZiAobXBjLT5udW1iZXJfb2ZfbXBzX21hY3MgIT0gbnVtX21hY3MpIHsgLyogbmVlZCB0byByZWFsbG9jYXRlPyAqLwotCQlpZiAobXBjLT5udW1iZXJfb2ZfbXBzX21hY3MgIT0gMCkga2ZyZWUobXBjLT5tcHNfbWFjcyk7CisJCWlmIChtcGMtPm51bWJlcl9vZl9tcHNfbWFjcyAhPSAwKQorCQkJa2ZyZWUobXBjLT5tcHNfbWFjcyk7CiAJCW1wYy0+bnVtYmVyX29mX21wc19tYWNzID0gMDsKLQkJbXBjLT5tcHNfbWFjcyA9IGttYWxsb2MobnVtX21hY3MqRVRIX0FMRU4sIEdGUF9LRVJORUwpOworCQltcGMtPm1wc19tYWNzID0ga21hbGxvYyhudW1fbWFjcyAqIEVUSF9BTEVOLCBHRlBfS0VSTkVMKTsKIAkJaWYgKG1wYy0+bXBzX21hY3MgPT0gTlVMTCkgewotCQkJcHJpbnRrKCJtcG9hOiAoJXMpIGNvcHlfbWFjczogb3V0IG9mIG1lbVxuIiwgbXBjLT5kZXYtPm5hbWUpOworCQkJcHJfaW5mbygiKCVzKSBvdXQgb2YgbWVtXG4iLCBtcGMtPmRldi0+bmFtZSk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQogCX0KQEAgLTQ3OCwyNCArNTA5LDMwIEBACiAJaXBoID0gKHN0cnVjdCBpcGhkciAqKWJ1ZmY7CiAJaXBhZGRyID0gaXBoLT5kYWRkcjsKIAotCWRkcHJpbnRrKCJtcG9hOiAoJXMpIHNlbmRfdmlhX3Nob3J0Y3V0OiBpcGFkZHIgMHgleFxuIiwgbXBjLT5kZXYtPm5hbWUsIGlwYWRkcik7CisJZGRwcmludGsoIiglcykgaXBhZGRyIDB4JXhcbiIsCisJCSBtcGMtPmRldi0+bmFtZSwgaXBhZGRyKTsKIAogCWVudHJ5ID0gbXBjLT5pbl9vcHMtPmdldChpcGFkZHIsIG1wYyk7CiAJaWYgKGVudHJ5ID09IE5VTEwpIHsKIAkJZW50cnkgPSBtcGMtPmluX29wcy0+YWRkX2VudHJ5KGlwYWRkciwgbXBjKTsKLQkJaWYgKGVudHJ5ICE9IE5VTEwpIG1wYy0+aW5fb3BzLT5wdXQoZW50cnkpOworCQlpZiAoZW50cnkgIT0gTlVMTCkKKwkJCW1wYy0+aW5fb3BzLT5wdXQoZW50cnkpOwogCQlyZXR1cm4gMTsKIAl9Ci0JaWYgKG1wYy0+aW5fb3BzLT5jYWNoZV9oaXQoZW50cnksIG1wYykgIT0gT1BFTil7ICAgLyogdGhyZXNob2xkIG5vdCBleGNlZWRlZCBvciBWQ0Mgbm90IHJlYWR5ICovCi0JCWRkcHJpbnRrKCJtcG9hOiAoJXMpIHNlbmRfdmlhX3Nob3J0Y3V0OiBjYWNoZV9oaXQ6IHJldHVybnMgIT0gT1BFTlxuIiwgbXBjLT5kZXYtPm5hbWUpOworCS8qIHRocmVzaG9sZCBub3QgZXhjZWVkZWQgb3IgVkNDIG5vdCByZWFkeSAqLworCWlmIChtcGMtPmluX29wcy0+Y2FjaGVfaGl0KGVudHJ5LCBtcGMpICE9IE9QRU4pIHsKKwkJZGRwcmludGsoIiglcykgY2FjaGVfaGl0OiByZXR1cm5zICE9IE9QRU5cbiIsCisJCQkgbXBjLT5kZXYtPm5hbWUpOwogCQltcGMtPmluX29wcy0+cHV0KGVudHJ5KTsKIAkJcmV0dXJuIDE7CiAJfQogCi0JZGRwcmludGsoIm1wb2E6ICglcykgc2VuZF92aWFfc2hvcnRjdXQ6IHVzaW5nIHNob3J0Y3V0XG4iLCBtcGMtPmRldi0+bmFtZSk7CisJZGRwcmludGsoIiglcykgdXNpbmcgc2hvcnRjdXRcbiIsCisJCSBtcGMtPmRldi0+bmFtZSk7CiAJLyogTVBPQSBzcGVjIEEuMS40LCBNUE9BIGNsaWVudCBtdXN0IGRlY3JlbWVudCBJUCB0dGwgYXQgbGVhc3QgYnkgb25lICovCiAJaWYgKGlwaC0+dHRsIDw9IDEpIHsKLQkJZGRwcmludGsoIm1wb2E6ICglcykgc2VuZF92aWFfc2hvcnRjdXQ6IElQIHR0bCA9ICV1LCB1c2luZyBMQU5FXG4iLCBtcGMtPmRldi0+bmFtZSwgaXBoLT50dGwpOworCQlkZHByaW50aygiKCVzKSBJUCB0dGwgPSAldSwgdXNpbmcgTEFORVxuIiwKKwkJCSBtcGMtPmRldi0+bmFtZSwgaXBoLT50dGwpOwogCQltcGMtPmluX29wcy0+cHV0KGVudHJ5KTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtNTA0LDE1ICs1NDEsMTggQEAKIAlpcGgtPmNoZWNrID0gaXBfZmFzdF9jc3VtKCh1bnNpZ25lZCBjaGFyICopaXBoLCBpcGgtPmlobCk7CiAKIAlpZiAoZW50cnktPmN0cmxfaW5mby50YWcgIT0gMCkgewotCQlkZHByaW50aygibXBvYTogKCVzKSBzZW5kX3ZpYV9zaG9ydGN1dDogYWRkaW5nIHRhZyAweCV4XG4iLCBtcGMtPmRldi0+bmFtZSwgZW50cnktPmN0cmxfaW5mby50YWcpOworCQlkZHByaW50aygiKCVzKSBhZGRpbmcgdGFnIDB4JXhcbiIsCisJCQkgbXBjLT5kZXYtPm5hbWUsIGVudHJ5LT5jdHJsX2luZm8udGFnKTsKIAkJdGFnZ2VkX2xsY19zbmFwX2hkci50YWcgPSBlbnRyeS0+Y3RybF9pbmZvLnRhZzsKLQkJc2tiX3B1bGwoc2tiLCBFVEhfSExFTik7ICAgICAgICAgICAgICAgICAgICAgICAvKiBnZXQgcmlkIG9mIEV0aCBoZWFkZXIgKi8KLQkJc2tiX3B1c2goc2tiLCBzaXplb2YodGFnZ2VkX2xsY19zbmFwX2hkcikpOyAgICAvKiBhZGQgTExDL1NOQVAgaGVhZGVyICAgKi8KKwkJc2tiX3B1bGwoc2tiLCBFVEhfSExFTik7CS8qIGdldCByaWQgb2YgRXRoIGhlYWRlciAqLworCQlza2JfcHVzaChza2IsIHNpemVvZih0YWdnZWRfbGxjX3NuYXBfaGRyKSk7CisJCQkJCQkvKiBhZGQgTExDL1NOQVAgaGVhZGVyICAgKi8KIAkJc2tiX2NvcHlfdG9fbGluZWFyX2RhdGEoc2tiLCAmdGFnZ2VkX2xsY19zbmFwX2hkciwKIAkJCQkJc2l6ZW9mKHRhZ2dlZF9sbGNfc25hcF9oZHIpKTsKIAl9IGVsc2UgewotCQlza2JfcHVsbChza2IsIEVUSF9ITEVOKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBnZXQgcmlkIG9mIEV0aCBoZWFkZXIgKi8KLQkJc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGxsY19zbmFwX2hkcikpOyAgICAgLyogYWRkIExMQy9TTkFQIGhlYWRlciArIHRhZyAgKi8KKwkJc2tiX3B1bGwoc2tiLCBFVEhfSExFTik7CS8qIGdldCByaWQgb2YgRXRoIGhlYWRlciAqLworCQlza2JfcHVzaChza2IsIHNpemVvZihzdHJ1Y3QgbGxjX3NuYXBfaGRyKSk7CisJCQkJCQkvKiBhZGQgTExDL1NOQVAgaGVhZGVyICsgdGFnICAqLwogCQlza2JfY29weV90b19saW5lYXJfZGF0YShza2IsICZsbGNfc25hcF9tcG9hX2RhdGEsCiAJCQkJCXNpemVvZihzdHJ1Y3QgbGxjX3NuYXBfaGRyKSk7CiAJfQpAQCAtNTM3LDggKzU3Nyw4IEBACiAJaW50IGkgPSAwOwogCiAJbXBjID0gZmluZF9tcGNfYnlfbGVjKGRldik7IC8qIHRoaXMgc2hvdWxkIE5FVkVSIGZhaWwgKi8KLQlpZihtcGMgPT0gTlVMTCkgewotCQlwcmludGsoIm1wb2E6ICglcykgbXBjX3NlbmRfcGFja2V0OiBubyBNUEMgZm91bmRcbiIsIGRldi0+bmFtZSk7CisJaWYgKG1wYyA9PSBOVUxMKSB7CisJCXByX2luZm8oIiglcykgbm8gTVBDIGZvdW5kXG4iLCBkZXYtPm5hbWUpOwogCQlnb3RvIG5vbl9pcDsKIAl9CiAKQEAgLTU1NCwxNCArNTk0LDE1IEBACiAJCWdvdG8gbm9uX2lwOwogCiAJd2hpbGUgKGkgPCBtcGMtPm51bWJlcl9vZl9tcHNfbWFjcykgewotCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihldGgtPmhfZGVzdCwgKG1wYy0+bXBzX21hY3MgKyBpKkVUSF9BTEVOKSkpCi0JCQlpZiAoIHNlbmRfdmlhX3Nob3J0Y3V0KHNrYiwgbXBjKSA9PSAwICkgICAgICAgICAgIC8qIHRyeSBzaG9ydGN1dCAqLwotCQkJCXJldHVybiBORVRERVZfVFhfT0s7ICAgICAgICAgICAgICAgICAgICAgIC8qIHN1Y2Nlc3MhICAgICAqLworCQlpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihldGgtPmhfZGVzdCwKKwkJCQkJKG1wYy0+bXBzX21hY3MgKyBpKkVUSF9BTEVOKSkpCisJCQlpZiAoc2VuZF92aWFfc2hvcnRjdXQoc2tiLCBtcGMpID09IDApIC8qIHRyeSBzaG9ydGN1dCAqLworCQkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCWkrKzsKIAl9CiAKLSBub25faXA6Ci0JcmV0dXJuIG1wYy0+b2xkX29wcy0+bmRvX3N0YXJ0X3htaXQoc2tiLGRldik7Citub25faXA6CisJcmV0dXJuIG1wYy0+b2xkX29wcy0+bmRvX3N0YXJ0X3htaXQoc2tiLCBkZXYpOwogfQogCiBzdGF0aWMgaW50IGF0bV9tcG9hX3ZjY19hdHRhY2goc3RydWN0IGF0bV92Y2MgKnZjYywgdm9pZCBfX3VzZXIgKmFyZykKQEAgLTU3NCw3ICs2MTUsOCBAQAogCiAJYnl0ZXNfbGVmdCA9IGNvcHlfZnJvbV91c2VyKCZpb2NfZGF0YSwgYXJnLCBzaXplb2Yoc3RydWN0IGF0bW1wY19pb2MpKTsKIAlpZiAoYnl0ZXNfbGVmdCAhPSAwKSB7Ci0JCXByaW50aygibXBvYTogbXBjX3ZjY19hdHRhY2g6IFNob3J0IHJlYWQgKG1pc3NlZCAlZCBieXRlcykgZnJvbSB1c2VybGFuZFxuIiwgYnl0ZXNfbGVmdCk7CisJCXByX2luZm8oIm1wb2E6U2hvcnQgcmVhZCAobWlzc2VkICVkIGJ5dGVzKSBmcm9tIHVzZXJsYW5kXG4iLAorCQkJYnl0ZXNfbGVmdCk7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAlpcGFkZHIgPSBpb2NfZGF0YS5pcGFkZHI7CkBAIC01ODcsMTggKzYyOSwyMCBAQAogCiAJaWYgKGlvY19kYXRhLnR5cGUgPT0gTVBDX1NPQ0tFVF9JTkdSRVNTKSB7CiAJCWluX2VudHJ5ID0gbXBjLT5pbl9vcHMtPmdldChpcGFkZHIsIG1wYyk7Ci0JCWlmIChpbl9lbnRyeSA9PSBOVUxMIHx8IGluX2VudHJ5LT5lbnRyeV9zdGF0ZSA8IElOR1JFU1NfUkVTT0xWRUQpIHsKLQkJCXByaW50aygibXBvYTogKCVzKSBtcGNfdmNjX2F0dGFjaDogZGlkIG5vdCBmaW5kIFJFU09MVkVEIGVudHJ5IGZyb20gaW5ncmVzcyBjYWNoZVxuIiwKKwkJaWYgKGluX2VudHJ5ID09IE5VTEwgfHwKKwkJICAgIGluX2VudHJ5LT5lbnRyeV9zdGF0ZSA8IElOR1JFU1NfUkVTT0xWRUQpIHsKKwkJCXByX2luZm8oIiglcykgZGlkIG5vdCBmaW5kIFJFU09MVkVEIGVudHJ5IGZyb20gaW5ncmVzcyBjYWNoZVxuIiwKIAkJCQltcGMtPmRldi0+bmFtZSk7Ci0JCQlpZiAoaW5fZW50cnkgIT0gTlVMTCkgbXBjLT5pbl9vcHMtPnB1dChpbl9lbnRyeSk7CisJCQlpZiAoaW5fZW50cnkgIT0gTlVMTCkKKwkJCQltcGMtPmluX29wcy0+cHV0KGluX2VudHJ5KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCXByaW50aygibXBvYTogKCVzKSBtcGNfdmNjX2F0dGFjaDogYXR0YWNoaW5nIGluZ3Jlc3MgU1ZDLCBlbnRyeSA9ICVwSTRcbiIsCi0JCSAgICAgICBtcGMtPmRldi0+bmFtZSwgJmluX2VudHJ5LT5jdHJsX2luZm8uaW5fZHN0X2lwKTsKKwkJcHJfaW5mbygiKCVzKSBhdHRhY2hpbmcgaW5ncmVzcyBTVkMsIGVudHJ5ID0gJXBJNFxuIiwKKwkJCW1wYy0+ZGV2LT5uYW1lLCAmaW5fZW50cnktPmN0cmxfaW5mby5pbl9kc3RfaXApOwogCQlpbl9lbnRyeS0+c2hvcnRjdXQgPSB2Y2M7CiAJCW1wYy0+aW5fb3BzLT5wdXQoaW5fZW50cnkpOwogCX0gZWxzZSB7Ci0JCXByaW50aygibXBvYTogKCVzKSBtcGNfdmNjX2F0dGFjaDogYXR0YWNoaW5nIGVncmVzcyBTVkNcbiIsIG1wYy0+ZGV2LT5uYW1lKTsKKwkJcHJfaW5mbygiKCVzKSBhdHRhY2hpbmcgZWdyZXNzIFNWQ1xuIiwgbXBjLT5kZXYtPm5hbWUpOwogCX0KIAogCXZjYy0+cHJvdG9fZGF0YSA9IG1wYy0+ZGV2OwpAQCAtNjE4LDI3ICs2NjIsMjcgQEAKIAogCW1wYyA9IGZpbmRfbXBjX2J5X2xlYyhkZXYpOwogCWlmIChtcGMgPT0gTlVMTCkgewotCQlwcmludGsoIm1wb2E6ICglcykgbXBjX3ZjY19jbG9zZTogY2xvc2UgZm9yIHVua25vd24gTVBDXG4iLCBkZXYtPm5hbWUpOworCQlwcl9pbmZvKCIoJXMpIGNsb3NlIGZvciB1bmtub3duIE1QQ1xuIiwgZGV2LT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIAotCWRwcmludGsoIm1wb2E6ICglcykgbXBjX3ZjY19jbG9zZTpcbiIsIGRldi0+bmFtZSk7CisJZHByaW50aygiKCVzKVxuIiwgZGV2LT5uYW1lKTsKIAlpbl9lbnRyeSA9IG1wYy0+aW5fb3BzLT5nZXRfYnlfdmNjKHZjYywgbXBjKTsKIAlpZiAoaW5fZW50cnkpIHsKLQkJZHByaW50aygibXBvYTogKCVzKSBtcGNfdmNjX2Nsb3NlOiBpbmdyZXNzIFNWQyBjbG9zZWQgaXAgPSAlcEk0XG4iLAotCQkgICAgICAgbXBjLT5kZXYtPm5hbWUsICZpbl9lbnRyeS0+Y3RybF9pbmZvLmluX2RzdF9pcCk7CisJCWRwcmludGsoIiglcykgaW5ncmVzcyBTVkMgY2xvc2VkIGlwID0gJXBJNFxuIiwKKwkJCW1wYy0+ZGV2LT5uYW1lLCAmaW5fZW50cnktPmN0cmxfaW5mby5pbl9kc3RfaXApOwogCQlpbl9lbnRyeS0+c2hvcnRjdXQgPSBOVUxMOwogCQltcGMtPmluX29wcy0+cHV0KGluX2VudHJ5KTsKIAl9CiAJZWdfZW50cnkgPSBtcGMtPmVnX29wcy0+Z2V0X2J5X3ZjYyh2Y2MsIG1wYyk7CiAJaWYgKGVnX2VudHJ5KSB7Ci0JCWRwcmludGsoIm1wb2E6ICglcykgbXBjX3ZjY19jbG9zZTogZWdyZXNzIFNWQyBjbG9zZWRcbiIsIG1wYy0+ZGV2LT5uYW1lKTsKKwkJZHByaW50aygiKCVzKSBlZ3Jlc3MgU1ZDIGNsb3NlZFxuIiwgbXBjLT5kZXYtPm5hbWUpOwogCQllZ19lbnRyeS0+c2hvcnRjdXQgPSBOVUxMOwogCQltcGMtPmVnX29wcy0+cHV0KGVnX2VudHJ5KTsKIAl9CiAKIAlpZiAoaW5fZW50cnkgPT0gTlVMTCAmJiBlZ19lbnRyeSA9PSBOVUxMKQotCQlkcHJpbnRrKCJtcG9hOiAoJXMpIG1wY192Y2NfY2xvc2U6ICB1bnVzZWQgdmNjIGNsb3NlZFxuIiwgZGV2LT5uYW1lKTsKKwkJZHByaW50aygiKCVzKSB1bnVzZWQgdmNjIGNsb3NlZFxuIiwgZGV2LT5uYW1lKTsKIAogCXJldHVybjsKIH0KQEAgLTY1MiwxOCArNjk2LDE5IEBACiAJX19iZTMyIHRhZzsKIAljaGFyICp0bXA7CiAKLQlkZHByaW50aygibXBvYTogKCVzKSBtcGNfcHVzaDpcbiIsIGRldi0+bmFtZSk7CisJZGRwcmludGsoIiglcylcbiIsIGRldi0+bmFtZSk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7Ci0JCWRwcmludGsoIm1wb2E6ICglcykgbXBjX3B1c2g6IG51bGwgc2tiLCBjbG9zaW5nIFZDQ1xuIiwgZGV2LT5uYW1lKTsKKwkJZHByaW50aygiKCVzKSBudWxsIHNrYiwgY2xvc2luZyBWQ0NcbiIsIGRldi0+bmFtZSk7CiAJCW1wY192Y2NfY2xvc2UodmNjLCBkZXYpOwogCQlyZXR1cm47CiAJfQogCiAJc2tiLT5kZXYgPSBkZXY7Ci0JaWYgKG1lbWNtcChza2ItPmRhdGEsICZsbGNfc25hcF9tcG9hX2N0cmwsIHNpemVvZihzdHJ1Y3QgbGxjX3NuYXBfaGRyKSkgPT0gMCkgeworCWlmIChtZW1jbXAoc2tiLT5kYXRhLCAmbGxjX3NuYXBfbXBvYV9jdHJsLAorCQkgICBzaXplb2Yoc3RydWN0IGxsY19zbmFwX2hkcikpID09IDApIHsKIAkJc3RydWN0IHNvY2sgKnNrID0gc2tfYXRtKHZjYyk7CiAKLQkJZHByaW50aygibXBvYTogKCVzKSBtcGNfcHVzaDogY29udHJvbCBwYWNrZXQgYXJyaXZlZFxuIiwgZGV2LT5uYW1lKTsKKwkJZHByaW50aygiKCVzKSBjb250cm9sIHBhY2tldCBhcnJpdmVkXG4iLCBkZXYtPm5hbWUpOwogCQkvKiBQYXNzIGNvbnRyb2wgcGFja2V0cyB0byBkYWVtb24gKi8KIAkJc2tiX3F1ZXVlX3RhaWwoJnNrLT5za19yZWNlaXZlX3F1ZXVlLCBza2IpOwogCQlzay0+c2tfZGF0YV9yZWFkeShzaywgc2tiLT5sZW4pOwpAQCAtNjc1LDIwICs3MjAsMjIgQEAKIAogCW1wYyA9IGZpbmRfbXBjX2J5X2xlYyhkZXYpOwogCWlmIChtcGMgPT0gTlVMTCkgewotCQlwcmludGsoIm1wb2E6ICglcykgbXBjX3B1c2g6IHVua25vd24gTVBDXG4iLCBkZXYtPm5hbWUpOworCQlwcl9pbmZvKCIoJXMpIHVua25vd24gTVBDXG4iLCBkZXYtPm5hbWUpOwogCQlyZXR1cm47CiAJfQogCi0JaWYgKG1lbWNtcChza2ItPmRhdGEsICZsbGNfc25hcF9tcG9hX2RhdGFfdGFnZ2VkLCBzaXplb2Yoc3RydWN0IGxsY19zbmFwX2hkcikpID09IDApIHsgLyogTVBPQSB0YWdnZWQgZGF0YSAqLwotCQlkZHByaW50aygibXBvYTogKCVzKSBtcGNfcHVzaDogdGFnZ2VkIGRhdGEgcGFja2V0IGFycml2ZWRcbiIsIGRldi0+bmFtZSk7CisJaWYgKG1lbWNtcChza2ItPmRhdGEsICZsbGNfc25hcF9tcG9hX2RhdGFfdGFnZ2VkLAorCQkgICBzaXplb2Yoc3RydWN0IGxsY19zbmFwX2hkcikpID09IDApIHsgLyogTVBPQSB0YWdnZWQgZGF0YSAqLworCQlkZHByaW50aygiKCVzKSB0YWdnZWQgZGF0YSBwYWNrZXQgYXJyaXZlZFxuIiwgZGV2LT5uYW1lKTsKIAotCX0gZWxzZSBpZiAobWVtY21wKHNrYi0+ZGF0YSwgJmxsY19zbmFwX21wb2FfZGF0YSwgc2l6ZW9mKHN0cnVjdCBsbGNfc25hcF9oZHIpKSA9PSAwKSB7IC8qIE1QT0EgZGF0YSAqLwotCQlwcmludGsoIm1wb2E6ICglcykgbXBjX3B1c2g6IG5vbi10YWdnZWQgZGF0YSBwYWNrZXQgYXJyaXZlZFxuIiwgZGV2LT5uYW1lKTsKLQkJcHJpbnRrKCIgICAgICAgICAgIG1wY19wdXNoOiBub24tdGFnZ2VkIGRhdGEgdW5zdXBwb3J0ZWQsIHB1cmdpbmdcbiIpOworCX0gZWxzZSBpZiAobWVtY21wKHNrYi0+ZGF0YSwgJmxsY19zbmFwX21wb2FfZGF0YSwKKwkJCSAgc2l6ZW9mKHN0cnVjdCBsbGNfc25hcF9oZHIpKSA9PSAwKSB7IC8qIE1QT0EgZGF0YSAqLworCQlwcl9pbmZvKCIoJXMpIFVuc3VwcG9ydGVkIG5vbi10YWdnZWQgZGF0YSBwYWNrZXQgYXJyaXZlZC4gIFB1cmdpbmdcbiIsCisJCQlkZXYtPm5hbWUpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm47CiAJfSBlbHNlIHsKLQkJcHJpbnRrKCJtcG9hOiAoJXMpIG1wY19wdXNoOiBnYXJiYWdlIGFycml2ZWQsIHB1cmdpbmdcbiIsIGRldi0+bmFtZSk7CisJCXByX2luZm8oIiglcykgZ2FyYmFnZSBhcnJpdmVkLCBwdXJnaW5nXG4iLCBkZXYtPm5hbWUpOwogCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCQlyZXR1cm47CiAJfQpAQCAtNjk4LDggKzc0NSw4IEBACiAKIAllZyA9IG1wYy0+ZWdfb3BzLT5nZXRfYnlfdGFnKHRhZywgbXBjKTsKIAlpZiAoZWcgPT0gTlVMTCkgewotCQlwcmludGsoIm1wb2E6ICglcykgbXBjX3B1c2g6IERpZG4ndCBmaW5kIGVncmVzcyBjYWNoZSBlbnRyeSwgdGFnID0gJXVcbiIsCi0JCSAgICAgICBkZXYtPm5hbWUsdGFnKTsKKwkJcHJfaW5mbygibXBvYTogKCVzKSBEaWRuJ3QgZmluZCBlZ3Jlc3MgY2FjaGUgZW50cnksIHRhZyA9ICV1XG4iLAorCQkJZGV2LT5uYW1lLCB0YWcpOwogCQlwdXJnZV9lZ3Jlc3Nfc2hvcnRjdXQodmNjLCBOVUxMKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuOwpAQCAtNzExLDEzICs3NTgsMTUgQEAKIAkgKi8KIAlpZiAoZWctPnNob3J0Y3V0ID09IE5VTEwpIHsKIAkJZWctPnNob3J0Y3V0ID0gdmNjOwotCQlwcmludGsoIm1wb2E6ICglcykgbXBjX3B1c2g6IGVncmVzcyBTVkMgaW4gdXNlXG4iLCBkZXYtPm5hbWUpOworCQlwcl9pbmZvKCIoJXMpIGVncmVzcyBTVkMgaW4gdXNlXG4iLCBkZXYtPm5hbWUpOwogCX0KIAotCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBsbGNfc25hcF9oZHIpICsgc2l6ZW9mKHRhZykpOyAvKiBnZXQgcmlkIG9mIExMQy9TTkFQIGhlYWRlciAqLwotCW5ld19za2IgPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIGVnLT5jdHJsX2luZm8uREhfbGVuZ3RoKTsgLyogTExDL1NOQVAgaXMgc2hvcnRlciB0aGFuIE1BQyBoZWFkZXIgOiggKi8KKwlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgbGxjX3NuYXBfaGRyKSArIHNpemVvZih0YWcpKTsKKwkJCQkJLyogZ2V0IHJpZCBvZiBMTEMvU05BUCBoZWFkZXIgKi8KKwluZXdfc2tiID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBlZy0+Y3RybF9pbmZvLkRIX2xlbmd0aCk7CisJCQkJCS8qIExMQy9TTkFQIGlzIHNob3J0ZXIgdGhhbiBNQUMgaGVhZGVyIDooICovCiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKLQlpZiAobmV3X3NrYiA9PSBOVUxMKXsKKwlpZiAobmV3X3NrYiA9PSBOVUxMKSB7CiAJCW1wYy0+ZWdfb3BzLT5wdXQoZWcpOwogCQlyZXR1cm47CiAJfQpAQCAtNzUwLDcgKzc5OSw3IEBACiAJLyogbWVtYmVycyBub3QgZXhwbGljaXRseSBpbml0aWFsaXNlZCB3aWxsIGJlIDAgKi8KIH07CiAKLXN0YXRpYyBpbnQgYXRtX21wb2FfbXBvYWRfYXR0YWNoIChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgYXJnKQorc3RhdGljIGludCBhdG1fbXBvYV9tcG9hZF9hdHRhY2goc3RydWN0IGF0bV92Y2MgKnZjYywgaW50IGFyZykKIHsKIAlzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYzsKIAlzdHJ1Y3QgbGVjX3ByaXYgKnByaXY7CkBAIC03NzAsMTUgKzgxOSwxNiBAQAogCiAJbXBjID0gZmluZF9tcGNfYnlfaXRmbnVtKGFyZyk7CiAJaWYgKG1wYyA9PSBOVUxMKSB7Ci0JCWRwcmludGsoIm1wb2E6IG1wb2FkX2F0dGFjaDogYWxsb2NhdGluZyBuZXcgbXBjIGZvciBpdGYgJWRcbiIsIGFyZyk7CisJCWRwcmludGsoImFsbG9jYXRpbmcgbmV3IG1wYyBmb3IgaXRmICVkXG4iLCBhcmcpOwogCQltcGMgPSBhbGxvY19tcGMoKTsKIAkJaWYgKG1wYyA9PSBOVUxMKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCW1wYy0+ZGV2X251bSA9IGFyZzsKLQkJbXBjLT5kZXYgPSBmaW5kX2xlY19ieV9pdGZudW0oYXJnKTsgLyogTlVMTCBpZiB0aGVyZSB3YXMgbm8gbGVjICovCisJCW1wYy0+ZGV2ID0gZmluZF9sZWNfYnlfaXRmbnVtKGFyZyk7CisJCQkJCS8qIE5VTEwgaWYgdGhlcmUgd2FzIG5vIGxlYyAqLwogCX0KIAlpZiAobXBjLT5tcG9hZF92Y2MpIHsKLQkJcHJpbnRrKCJtcG9hOiBtcG9hZF9hdHRhY2g6IG1wb2FkIGlzIGFscmVhZHkgcHJlc2VudCBmb3IgaXRmICVkXG4iLCBhcmcpOworCQlwcl9pbmZvKCJtcG9hZCBpcyBhbHJlYWR5IHByZXNlbnQgZm9yIGl0ZiAlZFxuIiwgYXJnKTsKIAkJcmV0dXJuIC1FQUREUklOVVNFOwogCX0KIApAQCAtNzk0LDggKzg0NCw4IEBACiAJbXBjLT5tcG9hZF92Y2MgPSB2Y2M7CiAJdmNjLT5kZXYgPSAmbXBjX2RldjsKIAl2Y2NfaW5zZXJ0X3NvY2tldChza19hdG0odmNjKSk7Ci0Jc2V0X2JpdChBVE1fVkZfTUVUQSwmdmNjLT5mbGFncyk7Ci0Jc2V0X2JpdChBVE1fVkZfUkVBRFksJnZjYy0+ZmxhZ3MpOworCXNldF9iaXQoQVRNX1ZGX01FVEEsICZ2Y2MtPmZsYWdzKTsKKwlzZXRfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpOwogCiAJaWYgKG1wYy0+ZGV2KSB7CiAJCWNoYXIgZW1wdHlbQVRNX0VTQV9MRU5dOwpAQCAtODA1LDcgKzg1NSw3IEBACiAJCS8qIHNldCBhZGRyZXNzIGlmIG1wY2QgZS5nLiBnZXRzIGtpbGxlZCBhbmQgcmVzdGFydGVkLgogCQkgKiBJZiB3ZSBkbyBub3QgZG8gaXQgbm93IHdlIGhhdmUgdG8gd2FpdCBmb3IgdGhlIG5leHQgTEVfQVJQCiAJCSAqLwotCQlpZiAoIG1lbWNtcChtcGMtPm1wc19jdHJsX2FkZHIsIGVtcHR5LCBBVE1fRVNBX0xFTikgIT0gMCApCisJCWlmIChtZW1jbXAobXBjLT5tcHNfY3RybF9hZGRyLCBlbXB0eSwgQVRNX0VTQV9MRU4pICE9IDApCiAJCQlzZW5kX3NldF9tcHNfY3RybF9hZGRyKG1wYy0+bXBzX2N0cmxfYWRkciwgbXBjKTsKIAl9CiAKQEAgLTgxNyw3ICs4NjcsNyBAQAogewogCXN0cnVjdCBrX21lc3NhZ2UgbWVzZzsKIAotCW1lbWNweSAobXBjLT5tcHNfY3RybF9hZGRyLCBhZGRyLCBBVE1fRVNBX0xFTik7CisJbWVtY3B5KG1wYy0+bXBzX2N0cmxfYWRkciwgYWRkciwgQVRNX0VTQV9MRU4pOwogCiAJbWVzZy50eXBlID0gU0VUX01QU19DVFJMX0FERFI7CiAJbWVtY3B5KG1lc2cuTVBTX2N0cmwsIGFkZHIsIEFUTV9FU0FfTEVOKTsKQEAgLTgzMywxMSArODgzLDExIEBACiAKIAltcGMgPSBmaW5kX21wY19ieV92Y2ModmNjKTsKIAlpZiAobXBjID09IE5VTEwpIHsKLQkJcHJpbnRrKCJtcG9hOiBtcG9hZF9jbG9zZTogZGlkIG5vdCBmaW5kIE1QQ1xuIik7CisJCXByX2luZm8oImRpZCBub3QgZmluZCBNUENcbiIpOwogCQlyZXR1cm47CiAJfQogCWlmICghbXBjLT5tcG9hZF92Y2MpIHsKLQkJcHJpbnRrKCJtcG9hOiBtcG9hZF9jbG9zZTogY2xvc2UgZm9yIG5vbi1wcmVzZW50IG1wb2FkXG4iKTsKKwkJcHJfaW5mbygiY2xvc2UgZm9yIG5vbi1wcmVzZW50IG1wb2FkXG4iKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtODU3LDcgKzkwNyw3IEBACiAJCWtmcmVlX3NrYihza2IpOwogCX0KIAotCXByaW50aygibXBvYTogKCVzKSBnb2luZyBkb3duXG4iLAorCXByX2luZm8oIiglcykgZ29pbmcgZG93blxuIiwKIAkJKG1wYy0+ZGV2KSA/IG1wYy0+ZGV2LT5uYW1lIDogIjx1bmtub3duPiIpOwogCW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwogCkBAIC04NzEsNjEgKzkyMSw2MSBAQAogewogCiAJc3RydWN0IG1wb2FfY2xpZW50ICptcGMgPSBmaW5kX21wY19ieV92Y2ModmNjKTsKLQlzdHJ1Y3Qga19tZXNzYWdlICptZXNnID0gKHN0cnVjdCBrX21lc3NhZ2UqKXNrYi0+ZGF0YTsKKwlzdHJ1Y3Qga19tZXNzYWdlICptZXNnID0gKHN0cnVjdCBrX21lc3NhZ2UgKilza2ItPmRhdGE7CiAJYXRvbWljX3N1Yihza2ItPnRydWVzaXplLCAmc2tfYXRtKHZjYyktPnNrX3dtZW1fYWxsb2MpOwogCiAJaWYgKG1wYyA9PSBOVUxMKSB7Ci0JCXByaW50aygibXBvYTogbXNnX2Zyb21fbXBvYWQ6IG5vIG1wYyBmb3VuZFxuIik7CisJCXByX2luZm8oIm5vIG1wYyBmb3VuZFxuIik7CiAJCXJldHVybiAwOwogCX0KLQlkcHJpbnRrKCJtcG9hOiAoJXMpIG1zZ19mcm9tX21wb2FkOiIsIChtcGMtPmRldikgPyBtcGMtPmRldi0+bmFtZSA6ICI8dW5rbm93bj4iKTsKLQlzd2l0Y2gobWVzZy0+dHlwZSkgeworCWRwcmludGsoIiglcykiLCBtcGMtPmRldiA/IG1wYy0+ZGV2LT5uYW1lIDogIjx1bmtub3duPiIpOworCXN3aXRjaCAobWVzZy0+dHlwZSkgewogCWNhc2UgTVBPQV9SRVNfUkVQTFlfUkNWRDoKLQkJZHByaW50aygiIG1wb2FfcmVzX3JlcGx5X3JjdmRcbiIpOworCQlkcHJpbnRrX2NvbnQoIm1wb2FfcmVzX3JlcGx5X3JjdmRcbiIpOwogCQlNUE9BX3Jlc19yZXBseV9yY3ZkKG1lc2csIG1wYyk7CiAJCWJyZWFrOwogCWNhc2UgTVBPQV9UUklHR0VSX1JDVkQ6Ci0JCWRwcmludGsoIiBtcG9hX3RyaWdnZXJfcmN2ZFxuIik7CisJCWRwcmludGtfY29udCgibXBvYV90cmlnZ2VyX3JjdmRcbiIpOwogCQlNUE9BX3RyaWdnZXJfcmN2ZChtZXNnLCBtcGMpOwogCQlicmVhazsKIAljYXNlIElOR1JFU1NfUFVSR0VfUkNWRDoKLQkJZHByaW50aygiIG5ocnBfcHVyZ2VfcmN2ZFxuIik7CisJCWRwcmludGtfY29udCgibmhycF9wdXJnZV9yY3ZkXG4iKTsKIAkJaW5ncmVzc19wdXJnZV9yY3ZkKG1lc2csIG1wYyk7CiAJCWJyZWFrOwogCWNhc2UgRUdSRVNTX1BVUkdFX1JDVkQ6Ci0JCWRwcmludGsoIiBlZ3Jlc3NfcHVyZ2VfcmVwbHlfcmN2ZFxuIik7CisJCWRwcmludGtfY29udCgiZWdyZXNzX3B1cmdlX3JlcGx5X3JjdmRcbiIpOwogCQllZ3Jlc3NfcHVyZ2VfcmN2ZChtZXNnLCBtcGMpOwogCQlicmVhazsKIAljYXNlIE1QU19ERUFUSDoKLQkJZHByaW50aygiIG1wc19kZWF0aFxuIik7CisJCWRwcmludGtfY29udCgibXBzX2RlYXRoXG4iKTsKIAkJbXBzX2RlYXRoKG1lc2csIG1wYyk7CiAJCWJyZWFrOwogCWNhc2UgQ0FDSEVfSU1QT1NfUkNWRDoKLQkJZHByaW50aygiIGNhY2hlX2ltcG9zX3JjdmRcbiIpOworCQlkcHJpbnRrX2NvbnQoImNhY2hlX2ltcG9zX3JjdmRcbiIpOwogCQlNUE9BX2NhY2hlX2ltcG9zX3JjdmQobWVzZywgbXBjKTsKIAkJYnJlYWs7CiAJY2FzZSBTRVRfTVBDX0NUUkxfQUREUjoKLQkJZHByaW50aygiIHNldF9tcGNfY3RybF9hZGRyXG4iKTsKKwkJZHByaW50a19jb250KCJzZXRfbXBjX2N0cmxfYWRkclxuIik7CiAJCXNldF9tcGNfY3RybF9hZGRyX3JjdmQobWVzZywgbXBjKTsKIAkJYnJlYWs7CiAJY2FzZSBTRVRfTVBTX01BQ19BRERSOgotCQlkcHJpbnRrKCIgc2V0X21wc19tYWNfYWRkclxuIik7CisJCWRwcmludGtfY29udCgic2V0X21wc19tYWNfYWRkclxuIik7CiAJCXNldF9tcHNfbWFjX2FkZHJfcmN2ZChtZXNnLCBtcGMpOwogCQlicmVhazsKIAljYXNlIENMRUFOX1VQX0FORF9FWElUOgotCQlkcHJpbnRrKCIgY2xlYW5fdXBfYW5kX2V4aXRcbiIpOworCQlkcHJpbnRrX2NvbnQoImNsZWFuX3VwX2FuZF9leGl0XG4iKTsKIAkJY2xlYW5fdXAobWVzZywgbXBjLCBESUUpOwogCQlicmVhazsKIAljYXNlIFJFTE9BRDoKLQkJZHByaW50aygiIHJlbG9hZFxuIik7CisJCWRwcmludGtfY29udCgicmVsb2FkXG4iKTsKIAkJY2xlYW5fdXAobWVzZywgbXBjLCBSRUxPQUQpOwogCQlicmVhazsKIAljYXNlIFNFVF9NUENfUEFSQU1TOgotCQlkcHJpbnRrKCIgc2V0X21wY19wYXJhbXNcbiIpOworCQlkcHJpbnRrX2NvbnQoInNldF9tcGNfcGFyYW1zXG4iKTsKIAkJbXBjLT5wYXJhbWV0ZXJzID0gbWVzZy0+Y29udGVudC5wYXJhbXM7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCWRwcmludGsoIiB1bmtub3duIG1lc3NhZ2UgJWRcbiIsIG1lc2ctPnR5cGUpOworCQlkcHJpbnRrX2NvbnQoInVua25vd24gbWVzc2FnZSAlZFxuIiwgbWVzZy0+dHlwZSk7CiAJCWJyZWFrOwogCX0KIAlrZnJlZV9za2Ioc2tiKTsKQEAgLTk0MCw3ICs5OTAsNyBAQAogCXN0cnVjdCBzb2NrICpzazsKIAogCWlmIChtcGMgPT0gTlVMTCB8fCAhbXBjLT5tcG9hZF92Y2MpIHsKLQkJcHJpbnRrKCJtcG9hOiBtc2dfdG9fbXBvYWQ6IG1lc2cgJWQgdG8gYSBub24tZXhpc3RlbnQgbXBvYWRcbiIsIG1lc2ctPnR5cGUpOworCQlwcl9pbmZvKCJtZXNnICVkIHRvIGEgbm9uLWV4aXN0ZW50IG1wb2FkXG4iLCBtZXNnLT50eXBlKTsKIAkJcmV0dXJuIC1FTlhJTzsKIAl9CiAKQEAgLTk1OCw3ICsxMDA4LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtcG9hX2V2ZW50X2xpc3RlbmVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbXBvYV9ub3RpZmllciwgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGV2X3B0cikKK3N0YXRpYyBpbnQgbXBvYV9ldmVudF9saXN0ZW5lcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm1wb2Ffbm90aWZpZXIsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqZGV2X3B0cikKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBtcG9hX2NsaWVudCAqbXBjOwpAQCAtOTgwLDI1ICsxMDMxLDI0IEBACiAJCXByaXYtPmxhbmUyX29wcy0+YXNzb2NpYXRlX2luZGljYXRvciA9IGxhbmUyX2Fzc29jX2luZDsKIAkJbXBjID0gZmluZF9tcGNfYnlfaXRmbnVtKHByaXYtPml0Zm51bSk7CiAJCWlmIChtcGMgPT0gTlVMTCkgewotCQkJZHByaW50aygibXBvYTogbXBvYV9ldmVudF9saXN0ZW5lcjogYWxsb2NhdGluZyBuZXcgbXBjIGZvciAlc1xuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJZHByaW50aygiYWxsb2NhdGluZyBuZXcgbXBjIGZvciAlc1xuIiwgZGV2LT5uYW1lKTsKIAkJCW1wYyA9IGFsbG9jX21wYygpOwogCQkJaWYgKG1wYyA9PSBOVUxMKSB7Ci0JCQkJcHJpbnRrKCJtcG9hOiBtcG9hX2V2ZW50X2xpc3RlbmVyOiBubyBuZXcgbXBjIik7CisJCQkJcHJfaW5mbygibm8gbmV3IG1wYyIpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAJCW1wYy0+ZGV2X251bSA9IHByaXYtPml0Zm51bTsKIAkJbXBjLT5kZXYgPSBkZXY7CiAJCWRldl9ob2xkKGRldik7Ci0JCWRwcmludGsoIm1wb2E6ICglcykgd2FzIGluaXRpYWxpemVkXG4iLCBkZXYtPm5hbWUpOworCQlkcHJpbnRrKCIoJXMpIHdhcyBpbml0aWFsaXplZFxuIiwgZGV2LT5uYW1lKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRERVZfVU5SRUdJU1RFUjoKIAkJLyogdGhlIGxlYyBkZXZpY2Ugd2FzIGRlYWxsb2NhdGVkICovCiAJCW1wYyA9IGZpbmRfbXBjX2J5X2xlYyhkZXYpOwogCQlpZiAobXBjID09IE5VTEwpCiAJCQlicmVhazsKLQkJZHByaW50aygibXBvYTogZGV2aWNlICglcykgd2FzIGRlYWxsb2NhdGVkXG4iLCBkZXYtPm5hbWUpOworCQlkcHJpbnRrKCJkZXZpY2UgKCVzKSB3YXMgZGVhbGxvY2F0ZWRcbiIsIGRldi0+bmFtZSk7CiAJCXN0b3BfbXBjKG1wYyk7CiAJCWRldl9wdXQobXBjLT5kZXYpOwogCQltcGMtPmRldiA9IE5VTEw7CkBAIC0xMDA4LDkgKzEwNTgsOCBAQAogCQltcGMgPSBmaW5kX21wY19ieV9sZWMoZGV2KTsKIAkJaWYgKG1wYyA9PSBOVUxMKQogCQkJYnJlYWs7Ci0JCWlmIChtcGMtPm1wb2FkX3ZjYyAhPSBOVUxMKSB7CisJCWlmIChtcGMtPm1wb2FkX3ZjYyAhPSBOVUxMKQogCQkJc3RhcnRfbXBjKG1wYywgZGV2KTsKLQkJfQogCQlicmVhazsKIAljYXNlIE5FVERFVl9ET1dOOgogCQkvKiB0aGUgZGV2IHdhcyBpZmNvbmZpZydlZCBkb3duICovCkBAIC0xMDIwLDkgKzEwNjksOCBAQAogCQltcGMgPSBmaW5kX21wY19ieV9sZWMoZGV2KTsKIAkJaWYgKG1wYyA9PSBOVUxMKQogCQkJYnJlYWs7Ci0JCWlmIChtcGMtPm1wb2FkX3ZjYyAhPSBOVUxMKSB7CisJCWlmIChtcGMtPm1wb2FkX3ZjYyAhPSBOVUxMKQogCQkJc3RvcF9tcGMobXBjKTsKLQkJfQogCQlicmVhazsKIAljYXNlIE5FVERFVl9SRUJPT1Q6CiAJY2FzZSBORVRERVZfQ0hBTkdFOgpAQCAtMTA0OSw3ICsxMDk3LDcgQEAKIAlpbl9jYWNoZV9lbnRyeSAqZW50cnk7CiAKIAllbnRyeSA9IG1wYy0+aW5fb3BzLT5nZXQoZHN0X2lwLCBtcGMpOwotCWlmKGVudHJ5ID09IE5VTEwpeworCWlmIChlbnRyeSA9PSBOVUxMKSB7CiAJCWVudHJ5ID0gbXBjLT5pbl9vcHMtPmFkZF9lbnRyeShkc3RfaXAsIG1wYyk7CiAJCWVudHJ5LT5lbnRyeV9zdGF0ZSA9IElOR1JFU1NfUkVTT0xWSU5HOwogCQltc2ctPnR5cGUgPSBTTkRfTVBPQV9SRVNfUlFTVDsKQEAgLTEwNjAsNyArMTEwOCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZihlbnRyeS0+ZW50cnlfc3RhdGUgPT0gSU5HUkVTU19JTlZBTElEKXsKKwlpZiAoZW50cnktPmVudHJ5X3N0YXRlID09IElOR1JFU1NfSU5WQUxJRCkgewogCQllbnRyeS0+ZW50cnlfc3RhdGUgPSBJTkdSRVNTX1JFU09MVklORzsKIAkJbXNnLT50eXBlID0gU05EX01QT0FfUkVTX1JRU1Q7CiAJCW1zZy0+Y29udGVudC5pbl9pbmZvID0gZW50cnktPmN0cmxfaW5mbzsKQEAgLTEwNzAsNyArMTExOCw3IEBACiAJCXJldHVybjsKIAl9CiAKLQlwcmludGsoIm1wb2E6ICglcykgTVBPQV90cmlnZ2VyX3JjdmQ6IGVudHJ5IGFscmVhZHkgaW4gcmVzb2x2aW5nIHN0YXRlXG4iLAorCXByX2luZm8oIiglcykgZW50cnkgYWxyZWFkeSBpbiByZXNvbHZpbmcgc3RhdGVcbiIsCiAJCShtcGMtPmRldikgPyBtcGMtPmRldi0+bmFtZSA6ICI8dW5rbm93bj4iKTsKIAltcGMtPmluX29wcy0+cHV0KGVudHJ5KTsKIAlyZXR1cm47CkBAIC0xMDgwLDIzICsxMTI4LDI1IEBACiAgKiBUaGluZ3MgZ2V0IGNvbXBsaWNhdGVkIGJlY2F1c2Ugd2UgaGF2ZSB0byBjaGVjayBpZiB0aGVyZSdzIGFuIGVncmVzcwogICogc2hvcnRjdXQgd2l0aCBzdWl0YWJsZSB0cmFmZmljIHBhcmFtZXRlcnMgd2UgY291bGQgdXNlLgogICovCi1zdGF0aWMgdm9pZCBjaGVja19xb3NfYW5kX29wZW5fc2hvcnRjdXQoc3RydWN0IGtfbWVzc2FnZSAqbXNnLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKmNsaWVudCwgaW5fY2FjaGVfZW50cnkgKmVudHJ5KQorc3RhdGljIHZvaWQgY2hlY2tfcW9zX2FuZF9vcGVuX3Nob3J0Y3V0KHN0cnVjdCBrX21lc3NhZ2UgKm1zZywKKwkJCQkJc3RydWN0IG1wb2FfY2xpZW50ICpjbGllbnQsCisJCQkJCWluX2NhY2hlX2VudHJ5ICplbnRyeSkKIHsKIAlfX2JlMzIgZHN0X2lwID0gbXNnLT5jb250ZW50LmluX2luZm8uaW5fZHN0X2lwOwogCXN0cnVjdCBhdG1fbXBvYV9xb3MgKnFvcyA9IGF0bV9tcG9hX3NlYXJjaF9xb3MoZHN0X2lwKTsKIAllZ19jYWNoZV9lbnRyeSAqZWdfZW50cnkgPSBjbGllbnQtPmVnX29wcy0+Z2V0X2J5X3NyY19pcChkc3RfaXAsIGNsaWVudCk7CiAKLQlpZihlZ19lbnRyeSAmJiBlZ19lbnRyeS0+c2hvcnRjdXQpewotCQlpZihlZ19lbnRyeS0+c2hvcnRjdXQtPnFvcy50eHRwLnRyYWZmaWNfY2xhc3MgJgotCQkgICBtc2ctPnFvcy50eHRwLnRyYWZmaWNfY2xhc3MgJgotCQkgICAocW9zID8gcW9zLT5xb3MudHh0cC50cmFmZmljX2NsYXNzIDogQVRNX1VCUiB8IEFUTV9DQlIpKXsKLQkJCSAgICBpZihlZ19lbnRyeS0+c2hvcnRjdXQtPnFvcy50eHRwLnRyYWZmaWNfY2xhc3MgPT0gQVRNX1VCUikKLQkJCQkgICAgZW50cnktPnNob3J0Y3V0ID0gZWdfZW50cnktPnNob3J0Y3V0OwotCQkJICAgIGVsc2UgaWYoZWdfZW50cnktPnNob3J0Y3V0LT5xb3MudHh0cC5tYXhfcGNyID4gMCkKLQkJCQkgICAgZW50cnktPnNob3J0Y3V0ID0gZWdfZW50cnktPnNob3J0Y3V0OworCWlmIChlZ19lbnRyeSAmJiBlZ19lbnRyeS0+c2hvcnRjdXQpIHsKKwkJaWYgKGVnX2VudHJ5LT5zaG9ydGN1dC0+cW9zLnR4dHAudHJhZmZpY19jbGFzcyAmCisJCSAgICBtc2ctPnFvcy50eHRwLnRyYWZmaWNfY2xhc3MgJgorCQkgICAgKHFvcyA/IHFvcy0+cW9zLnR4dHAudHJhZmZpY19jbGFzcyA6IEFUTV9VQlIgfCBBVE1fQ0JSKSkgeworCQkJaWYgKGVnX2VudHJ5LT5zaG9ydGN1dC0+cW9zLnR4dHAudHJhZmZpY19jbGFzcyA9PSBBVE1fVUJSKQorCQkJCWVudHJ5LT5zaG9ydGN1dCA9IGVnX2VudHJ5LT5zaG9ydGN1dDsKKwkJCWVsc2UgaWYgKGVnX2VudHJ5LT5zaG9ydGN1dC0+cW9zLnR4dHAubWF4X3BjciA+IDApCisJCQkJZW50cnktPnNob3J0Y3V0ID0gZWdfZW50cnktPnNob3J0Y3V0OwogCQl9Ci0JCWlmKGVudHJ5LT5zaG9ydGN1dCl7Ci0JCQlkcHJpbnRrKCJtcG9hOiAoJXMpIHVzaW5nIGVncmVzcyBTVkMgdG8gcmVhY2ggJXBJNFxuIiwKKwkJaWYgKGVudHJ5LT5zaG9ydGN1dCkgeworCQkJZHByaW50aygiKCVzKSB1c2luZyBlZ3Jlc3MgU1ZDIHRvIHJlYWNoICVwSTRcbiIsCiAJCQkJY2xpZW50LT5kZXYtPm5hbWUsICZkc3RfaXApOwogCQkJY2xpZW50LT5lZ19vcHMtPnB1dChlZ19lbnRyeSk7CiAJCQlyZXR1cm47CkBAIC0xMTA3LDEyICsxMTU3LDEzIEBACiAKIAkvKiBObyBsdWNrIGluIHRoZSBlZ3Jlc3MgY2FjaGUgd2UgbXVzdCBvcGVuIGFuIGluZ3Jlc3MgU1ZDICovCiAJbXNnLT50eXBlID0gT1BFTl9JTkdSRVNTX1NWQzsKLQlpZiAocW9zICYmIChxb3MtPnFvcy50eHRwLnRyYWZmaWNfY2xhc3MgPT0gbXNnLT5xb3MudHh0cC50cmFmZmljX2NsYXNzKSkKLQl7CisJaWYgKHFvcyAmJgorCSAgICAocW9zLT5xb3MudHh0cC50cmFmZmljX2NsYXNzID09IG1zZy0+cW9zLnR4dHAudHJhZmZpY19jbGFzcykpIHsKIAkJbXNnLT5xb3MgPSBxb3MtPnFvczsKLQkJcHJpbnRrKCJtcG9hOiAoJXMpIHRyeWluZyB0byBnZXQgYSBDQlIgc2hvcnRjdXRcbiIsY2xpZW50LT5kZXYtPm5hbWUpOwotCX0KLQllbHNlIG1lbXNldCgmbXNnLT5xb3MsMCxzaXplb2Yoc3RydWN0IGF0bV9xb3MpKTsKKwkJcHJfaW5mbygiKCVzKSB0cnlpbmcgdG8gZ2V0IGEgQ0JSIHNob3J0Y3V0XG4iLAorCQkJY2xpZW50LT5kZXYtPm5hbWUpOworCX0gZWxzZQorCQltZW1zZXQoJm1zZy0+cW9zLCAwLCBzaXplb2Yoc3RydWN0IGF0bV9xb3MpKTsKIAltc2dfdG9fbXBvYWQobXNnLCBjbGllbnQpOwogCXJldHVybjsKIH0KQEAgLTExMjIsMTcgKzExNzMsMTkgQEAKIAlfX2JlMzIgZHN0X2lwID0gbXNnLT5jb250ZW50LmluX2luZm8uaW5fZHN0X2lwOwogCWluX2NhY2hlX2VudHJ5ICplbnRyeSA9IG1wYy0+aW5fb3BzLT5nZXQoZHN0X2lwLCBtcGMpOwogCi0JZHByaW50aygibXBvYTogKCVzKSBNUE9BX3Jlc19yZXBseV9yY3ZkOiBpcCAlcEk0XG4iLAorCWRwcmludGsoIiglcykgaXAgJXBJNFxuIiwKIAkJbXBjLT5kZXYtPm5hbWUsICZkc3RfaXApOwotCWRkcHJpbnRrKCJtcG9hOiAoJXMpIE1QT0FfcmVzX3JlcGx5X3JjdmQoKSBlbnRyeSA9ICVwIiwgbXBjLT5kZXYtPm5hbWUsIGVudHJ5KTsKLQlpZihlbnRyeSA9PSBOVUxMKXsKLQkJcHJpbnRrKCJcbm1wb2E6ICglcykgQVJHSCwgcmVjZWl2ZWQgcmVzLiByZXBseSBmb3IgYW4gZW50cnkgdGhhdCBkb2Vzbid0IGV4aXN0LlxuIiwgbXBjLT5kZXYtPm5hbWUpOworCWRkcHJpbnRrKCIoJXMpIGVudHJ5ID0gJXAiLAorCQkgbXBjLT5kZXYtPm5hbWUsIGVudHJ5KTsKKwlpZiAoZW50cnkgPT0gTlVMTCkgeworCQlwcl9pbmZvKCIoJXMpIEFSR0gsIHJlY2VpdmVkIHJlcy4gcmVwbHkgZm9yIGFuIGVudHJ5IHRoYXQgZG9lc24ndCBleGlzdC5cbiIsCisJCQltcGMtPmRldi0+bmFtZSk7CiAJCXJldHVybjsKIAl9Ci0JZGRwcmludGsoIiBlbnRyeV9zdGF0ZSA9ICVkICIsIGVudHJ5LT5lbnRyeV9zdGF0ZSk7CisJZGRwcmludGtfY29udCgiIGVudHJ5X3N0YXRlID0gJWQgIiwgZW50cnktPmVudHJ5X3N0YXRlKTsKIAogCWlmIChlbnRyeS0+ZW50cnlfc3RhdGUgPT0gSU5HUkVTU19SRVNPTFZFRCkgewotCQlwcmludGsoIlxubXBvYTogKCVzKSBNUE9BX3Jlc19yZXBseV9yY3ZkIGZvciBSRVNPTFZFRCBlbnRyeSFcbiIsIG1wYy0+ZGV2LT5uYW1lKTsKKwkJcHJfaW5mbygiKCVzKSBSRVNPTFZFRCBlbnRyeSFcbiIsIG1wYy0+ZGV2LT5uYW1lKTsKIAkJbXBjLT5pbl9vcHMtPnB1dChlbnRyeSk7CiAJCXJldHVybjsKIAl9CkBAIC0xMTQxLDE3ICsxMTk0LDE4IEBACiAJZG9fZ2V0dGltZW9mZGF5KCYoZW50cnktPnR2KSk7CiAJZG9fZ2V0dGltZW9mZGF5KCYoZW50cnktPnJlcGx5X3dhaXQpKTsgLyogVXNlZCBpbiByZWZyZXNoaW5nIGZ1bmMgZnJvbSBub3cgb24gKi8KIAllbnRyeS0+cmVmcmVzaF90aW1lID0gMDsKLQlkZHByaW50aygiZW50cnktPnNob3J0Y3V0ID0gJXBcbiIsIGVudHJ5LT5zaG9ydGN1dCk7CisJZGRwcmludGtfY29udCgiZW50cnktPnNob3J0Y3V0ID0gJXBcbiIsIGVudHJ5LT5zaG9ydGN1dCk7CiAKLQlpZihlbnRyeS0+ZW50cnlfc3RhdGUgPT0gSU5HUkVTU19SRVNPTFZJTkcgJiYgZW50cnktPnNob3J0Y3V0ICE9IE5VTEwpeworCWlmIChlbnRyeS0+ZW50cnlfc3RhdGUgPT0gSU5HUkVTU19SRVNPTFZJTkcgJiYKKwkgICAgZW50cnktPnNob3J0Y3V0ICE9IE5VTEwpIHsKIAkJZW50cnktPmVudHJ5X3N0YXRlID0gSU5HUkVTU19SRVNPTFZFRDsKIAkJbXBjLT5pbl9vcHMtPnB1dChlbnRyeSk7CiAJCXJldHVybjsgLyogU2hvcnRjdXQgYWxyZWFkeSBvcGVuLi4uICovCiAJfQogCiAJaWYgKGVudHJ5LT5zaG9ydGN1dCAhPSBOVUxMKSB7Ci0JCXByaW50aygibXBvYTogKCVzKSBNUE9BX3Jlc19yZXBseV9yY3ZkOiBlbnRyeS0+c2hvcnRjdXQgIT0gTlVMTCwgaW1wb3NzaWJsZSFcbiIsCi0JCSAgICAgICBtcGMtPmRldi0+bmFtZSk7CisJCXByX2luZm8oIiglcykgZW50cnktPnNob3J0Y3V0ICE9IE5VTEwsIGltcG9zc2libGUhXG4iLAorCQkJbXBjLT5kZXYtPm5hbWUpOwogCQltcGMtPmluX29wcy0+cHV0KGVudHJ5KTsKIAkJcmV0dXJuOwogCX0KQEAgLTExNzAsMTQgKzEyMjQsMTQgQEAKIAlfX2JlMzIgbWFzayA9IG1zZy0+aXBfbWFzazsKIAlpbl9jYWNoZV9lbnRyeSAqZW50cnkgPSBtcGMtPmluX29wcy0+Z2V0X3dpdGhfbWFzayhkc3RfaXAsIG1wYywgbWFzayk7CiAKLQlpZihlbnRyeSA9PSBOVUxMKXsKLQkJcHJpbnRrKCJtcG9hOiAoJXMpIGluZ3Jlc3NfcHVyZ2VfcmN2ZDogcHVyZ2UgZm9yIGEgbm9uLWV4aXN0aW5nIGVudHJ5LCBpcCA9ICVwSTRcbiIsCi0JCSAgICAgICBtcGMtPmRldi0+bmFtZSwgJmRzdF9pcCk7CisJaWYgKGVudHJ5ID09IE5VTEwpIHsKKwkJcHJfaW5mbygiKCVzKSBwdXJnZSBmb3IgYSBub24tZXhpc3RpbmcgZW50cnksIGlwID0gJXBJNFxuIiwKKwkJCW1wYy0+ZGV2LT5uYW1lLCAmZHN0X2lwKTsKIAkJcmV0dXJuOwogCX0KIAogCWRvIHsKLQkJZHByaW50aygibXBvYTogKCVzKSBpbmdyZXNzX3B1cmdlX3JjdmQ6IHJlbW92aW5nIGFuIGluZ3Jlc3MgZW50cnksIGlwID0gJXBJNFxuIiwKKwkJZHByaW50aygiKCVzKSByZW1vdmluZyBhbiBpbmdyZXNzIGVudHJ5LCBpcCA9ICVwSTRcbiIsCiAJCQltcGMtPmRldi0+bmFtZSwgJmRzdF9pcCk7CiAJCXdyaXRlX2xvY2tfYmgoJm1wYy0+aW5ncmVzc19sb2NrKTsKIAkJbXBjLT5pbl9vcHMtPnJlbW92ZV9lbnRyeShlbnRyeSwgbXBjKTsKQEAgLTExOTUsNyArMTI0OSw4IEBACiAJZWdfY2FjaGVfZW50cnkgKmVudHJ5ID0gbXBjLT5lZ19vcHMtPmdldF9ieV9jYWNoZV9pZChjYWNoZV9pZCwgbXBjKTsKIAogCWlmIChlbnRyeSA9PSBOVUxMKSB7Ci0JCWRwcmludGsoIm1wb2E6ICglcykgZWdyZXNzX3B1cmdlX3JjdmQ6IHB1cmdlIGZvciBhIG5vbi1leGlzdGluZyBlbnRyeVxuIiwgbXBjLT5kZXYtPm5hbWUpOworCQlkcHJpbnRrKCIoJXMpIHB1cmdlIGZvciBhIG5vbi1leGlzdGluZyBlbnRyeVxuIiwKKwkJCW1wYy0+ZGV2LT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTIxNCwxNSArMTI2OSwxNSBAQAogCXN0cnVjdCBrX21lc3NhZ2UgKnB1cmdlX21zZzsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JZHByaW50aygibXBvYTogcHVyZ2VfZWdyZXNzX3Nob3J0Y3V0OiBlbnRlcmluZ1xuIik7CisJZHByaW50aygiZW50ZXJpbmdcbiIpOwogCWlmICh2Y2MgPT0gTlVMTCkgewotCQlwcmludGsoIm1wb2E6IHB1cmdlX2VncmVzc19zaG9ydGN1dDogdmNjID09IE5VTExcbiIpOworCQlwcl9pbmZvKCJ2Y2MgPT0gTlVMTFxuIik7CiAJCXJldHVybjsKIAl9CiAKIAlza2IgPSBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBrX21lc3NhZ2UpLCBHRlBfQVRPTUlDKTsKIAlpZiAoc2tiID09IE5VTEwpIHsKLQkJIHByaW50aygibXBvYTogcHVyZ2VfZWdyZXNzX3Nob3J0Y3V0OiBvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcHJfaW5mbygib3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEyMzgsNyArMTI5Myw3IEBACiAJc2sgPSBza19hdG0odmNjKTsKIAlza2JfcXVldWVfdGFpbCgmc2stPnNrX3JlY2VpdmVfcXVldWUsIHNrYik7CiAJc2stPnNrX2RhdGFfcmVhZHkoc2ssIHNrYi0+bGVuKTsKLQlkcHJpbnRrKCJtcG9hOiBwdXJnZV9lZ3Jlc3Nfc2hvcnRjdXQ6IGV4aXRpbmc6XG4iKTsKKwlkcHJpbnRrKCJleGl0aW5nXG4iKTsKIAogCXJldHVybjsKIH0KQEAgLTEyNDcsMTQgKzEzMDIsMTQgQEAKICAqIE91ciBNUFMgZGllZC4gVGVsbCBvdXIgZGFlbW9uIHRvIHNlbmQgTkhSUCBkYXRhIHBsYW5lIHB1cmdlIHRvIGVhY2gKICAqIG9mIHRoZSBlZ3Jlc3Mgc2hvcnRjdXRzIHdlIGhhdmUuCiAgKi8KLXN0YXRpYyB2b2lkIG1wc19kZWF0aCggc3RydWN0IGtfbWVzc2FnZSAqIG1zZywgc3RydWN0IG1wb2FfY2xpZW50ICogbXBjICkKK3N0YXRpYyB2b2lkIG1wc19kZWF0aChzdHJ1Y3Qga19tZXNzYWdlICptc2csIHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjKQogewogCWVnX2NhY2hlX2VudHJ5ICplbnRyeTsKIAotCWRwcmludGsoIm1wb2E6ICglcykgbXBzX2RlYXRoOlxuIiwgbXBjLT5kZXYtPm5hbWUpOworCWRwcmludGsoIiglcylcbiIsIG1wYy0+ZGV2LT5uYW1lKTsKIAotCWlmKG1lbWNtcChtc2ctPk1QU19jdHJsLCBtcGMtPm1wc19jdHJsX2FkZHIsIEFUTV9FU0FfTEVOKSl7Ci0JCXByaW50aygibXBvYTogKCVzKSBtcHNfZGVhdGg6IHdyb25nIE1QU1xuIiwgbXBjLT5kZXYtPm5hbWUpOworCWlmIChtZW1jbXAobXNnLT5NUFNfY3RybCwgbXBjLT5tcHNfY3RybF9hZGRyLCBBVE1fRVNBX0xFTikpIHsKKwkJcHJfaW5mbygiKCVzKSB3cm9uZyBNUFNcbiIsIG1wYy0+ZGV2LT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtMTI3MywyMCArMTMyOCwyMSBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgTVBPQV9jYWNoZV9pbXBvc19yY3ZkKCBzdHJ1Y3Qga19tZXNzYWdlICogbXNnLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKiBtcGMpCitzdGF0aWMgdm9pZCBNUE9BX2NhY2hlX2ltcG9zX3JjdmQoc3RydWN0IGtfbWVzc2FnZSAqbXNnLAorCQkJCSAgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCiB7CiAJdWludDE2X3QgaG9sZGluZ190aW1lOwogCWVnX2NhY2hlX2VudHJ5ICplbnRyeSA9IG1wYy0+ZWdfb3BzLT5nZXRfYnlfY2FjaGVfaWQobXNnLT5jb250ZW50LmVnX2luZm8uY2FjaGVfaWQsIG1wYyk7CiAKIAlob2xkaW5nX3RpbWUgPSBtc2ctPmNvbnRlbnQuZWdfaW5mby5ob2xkaW5nX3RpbWU7Ci0JZHByaW50aygibXBvYTogKCVzKSBNUE9BX2NhY2hlX2ltcG9zX3JjdmQ6IGVudHJ5ID0gJXAsIGhvbGRpbmdfdGltZSA9ICV1XG4iLAotCSAgICAgICBtcGMtPmRldi0+bmFtZSwgZW50cnksIGhvbGRpbmdfdGltZSk7Ci0JaWYoZW50cnkgPT0gTlVMTCAmJiBob2xkaW5nX3RpbWUpIHsKKwlkcHJpbnRrKCIoJXMpIGVudHJ5ID0gJXAsIGhvbGRpbmdfdGltZSA9ICV1XG4iLAorCQltcGMtPmRldi0+bmFtZSwgZW50cnksIGhvbGRpbmdfdGltZSk7CisJaWYgKGVudHJ5ID09IE5VTEwgJiYgaG9sZGluZ190aW1lKSB7CiAJCWVudHJ5ID0gbXBjLT5lZ19vcHMtPmFkZF9lbnRyeShtc2csIG1wYyk7CiAJCW1wYy0+ZWdfb3BzLT5wdXQoZW50cnkpOwogCQlyZXR1cm47CiAJfQotCWlmKGhvbGRpbmdfdGltZSl7CisJaWYgKGhvbGRpbmdfdGltZSkgewogCQltcGMtPmVnX29wcy0+dXBkYXRlKGVudHJ5LCBob2xkaW5nX3RpbWUpOwogCQlyZXR1cm47CiAJfQpAQCAtMTMwMCw3ICsxMzU2LDggQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9tcGNfY3RybF9hZGRyX3JjdmQoc3RydWN0IGtfbWVzc2FnZSAqbWVzZywgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCitzdGF0aWMgdm9pZCBzZXRfbXBjX2N0cmxfYWRkcl9yY3ZkKHN0cnVjdCBrX21lc3NhZ2UgKm1lc2csCisJCQkJICAgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCiB7CiAJc3RydWN0IGxlY19wcml2ICpwcml2OwogCWludCBpLCByZXR2YWwgOwpAQCAtMTMxNSwzNCArMTM3MiwzOSBAQAogCW1lbWNweSgmdGx2WzddLCBtZXNnLT5NUFNfY3RybCwgQVRNX0VTQV9MRU4pOyAvKiBNUEMgY3RybCBBVE0gYWRkciAqLwogCW1lbWNweShtcGMtPm91cl9jdHJsX2FkZHIsIG1lc2ctPk1QU19jdHJsLCBBVE1fRVNBX0xFTik7CiAKLQlkcHJpbnRrKCJtcG9hOiAoJXMpIHNldHRpbmcgTVBDIGN0cmwgQVRNIGFkZHJlc3MgdG8gIiwKLQkgICAgICAgKG1wYy0+ZGV2KSA/IG1wYy0+ZGV2LT5uYW1lIDogIjx1bmtub3duPiIpOworCWRwcmludGsoIiglcykgc2V0dGluZyBNUEMgY3RybCBBVE0gYWRkcmVzcyB0byIsCisJCW1wYy0+ZGV2ID8gbXBjLT5kZXYtPm5hbWUgOiAiPHVua25vd24+Iik7CiAJZm9yIChpID0gNzsgaSA8IHNpemVvZih0bHYpOyBpKyspCi0JCWRwcmludGsoIiUwMnggIiwgdGx2W2ldKTsKLQlkcHJpbnRrKCJcbiIpOworCQlkcHJpbnRrX2NvbnQoIiAlMDJ4IiwgdGx2W2ldKTsKKwlkcHJpbnRrX2NvbnQoIlxuIik7CiAKIAlpZiAobXBjLT5kZXYpIHsKIAkJcHJpdiA9IG5ldGRldl9wcml2KG1wYy0+ZGV2KTsKLQkJcmV0dmFsID0gcHJpdi0+bGFuZTJfb3BzLT5hc3NvY2lhdGVfcmVxKG1wYy0+ZGV2LCBtcGMtPmRldi0+ZGV2X2FkZHIsIHRsdiwgc2l6ZW9mKHRsdikpOworCQlyZXR2YWwgPSBwcml2LT5sYW5lMl9vcHMtPmFzc29jaWF0ZV9yZXEobXBjLT5kZXYsCisJCQkJCQkJbXBjLT5kZXYtPmRldl9hZGRyLAorCQkJCQkJCXRsdiwgc2l6ZW9mKHRsdikpOwogCQlpZiAocmV0dmFsID09IDApCi0JCQlwcmludGsoIm1wb2E6ICglcykgTVBPQSBkZXZpY2UgdHlwZSBUTFYgYXNzb2NpYXRpb24gZmFpbGVkXG4iLCBtcGMtPmRldi0+bmFtZSk7CisJCQlwcl9pbmZvKCIoJXMpIE1QT0EgZGV2aWNlIHR5cGUgVExWIGFzc29jaWF0aW9uIGZhaWxlZFxuIiwKKwkJCQltcGMtPmRldi0+bmFtZSk7CiAJCXJldHZhbCA9IHByaXYtPmxhbmUyX29wcy0+cmVzb2x2ZShtcGMtPmRldiwgTlVMTCwgMSwgTlVMTCwgTlVMTCk7CiAJCWlmIChyZXR2YWwgPCAwKQotCQkJcHJpbnRrKCJtcG9hOiAoJXMpIHRhcmdldGxlc3MgTEVfQVJQIHJlcXVlc3QgZmFpbGVkXG4iLCBtcGMtPmRldi0+bmFtZSk7CisJCQlwcl9pbmZvKCIoJXMpIHRhcmdldGxlc3MgTEVfQVJQIHJlcXVlc3QgZmFpbGVkXG4iLAorCQkJCW1wYy0+ZGV2LT5uYW1lKTsKIAl9CiAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyB2b2lkIHNldF9tcHNfbWFjX2FkZHJfcmN2ZChzdHJ1Y3Qga19tZXNzYWdlICptc2csIHN0cnVjdCBtcG9hX2NsaWVudCAqY2xpZW50KQorc3RhdGljIHZvaWQgc2V0X21wc19tYWNfYWRkcl9yY3ZkKHN0cnVjdCBrX21lc3NhZ2UgKm1zZywKKwkJCQkgIHN0cnVjdCBtcG9hX2NsaWVudCAqY2xpZW50KQogewogCi0JaWYoY2xpZW50LT5udW1iZXJfb2ZfbXBzX21hY3MpCisJaWYgKGNsaWVudC0+bnVtYmVyX29mX21wc19tYWNzKQogCQlrZnJlZShjbGllbnQtPm1wc19tYWNzKTsKIAljbGllbnQtPm51bWJlcl9vZl9tcHNfbWFjcyA9IDA7CiAJY2xpZW50LT5tcHNfbWFjcyA9IGttZW1kdXAobXNnLT5NUFNfY3RybCwgRVRIX0FMRU4sIEdGUF9LRVJORUwpOwogCWlmIChjbGllbnQtPm1wc19tYWNzID09IE5VTEwpIHsKLQkJcHJpbnRrKCJtcG9hOiBzZXRfbXBzX21hY19hZGRyX3JjdmQ6IG91dCBvZiBtZW1vcnlcbiIpOworCQlwcl9pbmZvKCJvdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuOwogCX0KIAljbGllbnQtPm51bWJlcl9vZl9tcHNfbWFjcyA9IDE7CkBAIC0xMzYzLDExICsxNDI1LDExIEBACiAJLyogRklYTUU6IFRoaXMga25vd3MgdG9vIG11Y2ggb2YgdGhlIGNhY2hlIHN0cnVjdHVyZSAqLwogCXJlYWRfbG9ja19pcnEoJm1wYy0+ZWdyZXNzX2xvY2spOwogCWVudHJ5ID0gbXBjLT5lZ19jYWNoZTsKLQl3aGlsZSAoZW50cnkgIT0gTlVMTCl7Ci0JCSAgICBtc2ctPmNvbnRlbnQuZWdfaW5mbyA9IGVudHJ5LT5jdHJsX2luZm87Ci0JCSAgICBkcHJpbnRrKCJtcG9hOiBjYWNoZV9pZCAldVxuIiwgZW50cnktPmN0cmxfaW5mby5jYWNoZV9pZCk7Ci0JCSAgICBtc2dfdG9fbXBvYWQobXNnLCBtcGMpOwotCQkgICAgZW50cnkgPSBlbnRyeS0+bmV4dDsKKwl3aGlsZSAoZW50cnkgIT0gTlVMTCkgeworCQltc2ctPmNvbnRlbnQuZWdfaW5mbyA9IGVudHJ5LT5jdHJsX2luZm87CisJCWRwcmludGsoImNhY2hlX2lkICV1XG4iLCBlbnRyeS0+Y3RybF9pbmZvLmNhY2hlX2lkKTsKKwkJbXNnX3RvX21wb2FkKG1zZywgbXBjKTsKKwkJZW50cnkgPSBlbnRyeS0+bmV4dDsKIAl9CiAJcmVhZF91bmxvY2tfaXJxKCZtcGMtPmVncmVzc19sb2NrKTsKIApAQCAtMTM4NiwyMCArMTQ0OCwyMiBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIHZvaWQgbXBjX2NhY2hlX2NoZWNrKCB1bnNpZ25lZCBsb25nIGNoZWNraW5nX3RpbWUgICkKK3N0YXRpYyB2b2lkIG1wY19jYWNoZV9jaGVjayh1bnNpZ25lZCBsb25nIGNoZWNraW5nX3RpbWUpCiB7CiAJc3RydWN0IG1wb2FfY2xpZW50ICptcGMgPSBtcGNzOwogCXN0YXRpYyB1bnNpZ25lZCBsb25nIHByZXZpb3VzX3Jlc29sdmluZ19jaGVja190aW1lOwogCXN0YXRpYyB1bnNpZ25lZCBsb25nIHByZXZpb3VzX3JlZnJlc2hfdGltZTsKIAotCXdoaWxlKCBtcGMgIT0gTlVMTCApeworCXdoaWxlIChtcGMgIT0gTlVMTCkgewogCQltcGMtPmluX29wcy0+Y2xlYXJfY291bnQobXBjKTsKIAkJbXBjLT5lZ19vcHMtPmNsZWFyX2V4cGlyZWQobXBjKTsKLQkJaWYoY2hlY2tpbmdfdGltZSAtIHByZXZpb3VzX3Jlc29sdmluZ19jaGVja190aW1lID4gbXBjLT5wYXJhbWV0ZXJzLm1wY19wNCAqIEhaICl7CisJCWlmIChjaGVja2luZ190aW1lIC0gcHJldmlvdXNfcmVzb2x2aW5nX2NoZWNrX3RpbWUgPgorCQkgICAgbXBjLT5wYXJhbWV0ZXJzLm1wY19wNCAqIEhaKSB7CiAJCQltcGMtPmluX29wcy0+Y2hlY2tfcmVzb2x2aW5nKG1wYyk7CiAJCQlwcmV2aW91c19yZXNvbHZpbmdfY2hlY2tfdGltZSA9IGNoZWNraW5nX3RpbWU7CiAJCX0KLQkJaWYoY2hlY2tpbmdfdGltZSAtIHByZXZpb3VzX3JlZnJlc2hfdGltZSA+IG1wYy0+cGFyYW1ldGVycy5tcGNfcDUgKiBIWiApeworCQlpZiAoY2hlY2tpbmdfdGltZSAtIHByZXZpb3VzX3JlZnJlc2hfdGltZSA+CisJCSAgICBtcGMtPnBhcmFtZXRlcnMubXBjX3A1ICogSFopIHsKIAkJCW1wYy0+aW5fb3BzLT5yZWZyZXNoKG1wYyk7CiAJCQlwcmV2aW91c19yZWZyZXNoX3RpbWUgPSBjaGVja2luZ190aW1lOwogCQl9CkBAIC0xNDEwLDcgKzE0NzQsOCBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGludCBhdG1fbXBvYV9pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgYXRtX21wb2FfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaW50IGVyciA9IDA7CiAJc3RydWN0IGF0bV92Y2MgKnZjYyA9IEFUTV9TRChzb2NrKTsKQEAgLTE0MjIsMjEgKzE0ODcsMjAgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAogCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgQVRNTVBDX0NUUkw6Ci0JCQllcnIgPSBhdG1fbXBvYV9tcG9hZF9hdHRhY2godmNjLCAoaW50KWFyZyk7Ci0JCQlpZiAoZXJyID49IDApCi0JCQkJc29jay0+c3RhdGUgPSBTU19DT05ORUNURUQ7Ci0JCQlicmVhazsKLQkJY2FzZSBBVE1NUENfREFUQToKLQkJCWVyciA9IGF0bV9tcG9hX3ZjY19hdHRhY2godmNjLCAodm9pZCBfX3VzZXIgKilhcmcpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKKwljYXNlIEFUTU1QQ19DVFJMOgorCQllcnIgPSBhdG1fbXBvYV9tcG9hZF9hdHRhY2godmNjLCAoaW50KWFyZyk7CisJCWlmIChlcnIgPj0gMCkKKwkJCXNvY2stPnN0YXRlID0gU1NfQ09OTkVDVEVEOworCQlicmVhazsKKwljYXNlIEFUTU1QQ19EQVRBOgorCQllcnIgPSBhdG1fbXBvYV92Y2NfYXR0YWNoKHZjYywgKHZvaWQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CiAJfQogCXJldHVybiBlcnI7CiB9CiAKLQogc3RhdGljIHN0cnVjdCBhdG1faW9jdGwgYXRtX2lvY3RsX29wcyA9IHsKIAkub3duZXIJPSBUSElTX01PRFVMRSwKIAkuaW9jdGwJPSBhdG1fbXBvYV9pb2N0bCwKQEAgLTE0NDcsOSArMTUxMSw5IEBACiAJcmVnaXN0ZXJfYXRtX2lvY3RsKCZhdG1faW9jdGxfb3BzKTsKIAogCWlmIChtcGNfcHJvY19pbml0KCkgIT0gMCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAibXBvYTogZmFpbGVkIHRvIGluaXRpYWxpemUgL3Byb2MvbXBvYVxuIik7CisJCXByX2luZm8oImZhaWxlZCB0byBpbml0aWFsaXplIC9wcm9jL21wb2FcbiIpOwogCi0JcHJpbnRrKCJtcGMuYzogIiBfX0RBVEVfXyAiICIgX19USU1FX18gIiBpbml0aWFsaXplZFxuIik7CisJcHJfaW5mbygibXBjLmM6ICIgX19EQVRFX18gIiAiIF9fVElNRV9fICIgaW5pdGlhbGl6ZWRcbiIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDc2LDE1ICsxNTQwLDE1IEBACiAJCQlpZiAocHJpdi0+bGFuZTJfb3BzICE9IE5VTEwpCiAJCQkJcHJpdi0+bGFuZTJfb3BzLT5hc3NvY2lhdGVfaW5kaWNhdG9yID0gTlVMTDsKIAkJfQotCQlkZHByaW50aygibXBvYTogY2xlYW51cF9tb2R1bGU6IGFib3V0IHRvIGNsZWFyIGNhY2hlc1xuIik7CisJCWRkcHJpbnRrKCJhYm91dCB0byBjbGVhciBjYWNoZXNcbiIpOwogCQltcGMtPmluX29wcy0+ZGVzdHJveV9jYWNoZShtcGMpOwogCQltcGMtPmVnX29wcy0+ZGVzdHJveV9jYWNoZShtcGMpOwotCQlkZHByaW50aygibXBvYTogY2xlYW51cF9tb2R1bGU6IGNhY2hlcyBjbGVhcmVkXG4iKTsKKwkJZGRwcmludGsoImNhY2hlcyBjbGVhcmVkXG4iKTsKIAkJa2ZyZWUobXBjLT5tcHNfbWFjcyk7CiAJCW1lbXNldChtcGMsIDAsIHNpemVvZihzdHJ1Y3QgbXBvYV9jbGllbnQpKTsKLQkJZGRwcmludGsoIm1wb2E6IGNsZWFudXBfbW9kdWxlOiBhYm91dCB0byBrZnJlZSAlcFxuIiwgbXBjKTsKKwkJZGRwcmludGsoImFib3V0IHRvIGtmcmVlICVwXG4iLCBtcGMpOwogCQlrZnJlZShtcGMpOwotCQlkZHByaW50aygibXBvYTogY2xlYW51cF9tb2R1bGU6IG5leHQgbXBjIGlzIGF0ICVwXG4iLCB0bXApOworCQlkZHByaW50aygibmV4dCBtcGMgaXMgYXQgJXBcbiIsIHRtcCk7CiAJCW1wYyA9IHRtcDsKIAl9CiAKQEAgLTE0OTIsNyArMTU1Niw3IEBACiAJcW9zX2hlYWQgPSBOVUxMOwogCXdoaWxlIChxb3MgIT0gTlVMTCkgewogCQluZXh0cW9zID0gcW9zLT5uZXh0OwotCQlkcHJpbnRrKCJtcG9hOiBjbGVhbnVwX21vZHVsZTogZnJlZWluZyBxb3MgZW50cnkgJXBcbiIsIHFvcyk7CisJCWRwcmludGsoImZyZWVpbmcgcW9zIGVudHJ5ICVwXG4iLCBxb3MpOwogCQlrZnJlZShxb3MpOwogCQlxb3MgPSBuZXh0cW9zOwogCX0KZGlmZiAtLWdpdCBhL25ldC9hdG0vbXBvYV9jYWNoZXMuYyBiL25ldC9hdG0vbXBvYV9jYWNoZXMuYwppbmRleCA0NTA0YTRiLi40YzE0MTgxIDEwMDY0NAotLS0gYS9uZXQvYXRtL21wb2FfY2FjaGVzLmMKKysrIGIvbmV0L2F0bS9tcG9hX2NhY2hlcy5jCkBAIC0xMSwxNSArMTEsMjMgQEAKICAqLwogCiAjaWYgMAotI2RlZmluZSBkcHJpbnRrIHByaW50ayAgICAvKiBkZWJ1ZyAqLworI2RlZmluZSBkcHJpbnRrKGZvcm1hdCwgYXJncy4uLikJCQkJCVwKKwlwcmludGsoS0VSTl9ERUJVRyAibXBvYTolczogIiBmb3JtYXQsIF9fRklMRV9fLCAjI2FyZ3MpICAvKiBkZWJ1ZyAqLwogI2Vsc2UKLSNkZWZpbmUgZHByaW50ayhmb3JtYXQsYXJncy4uLikKKyNkZWZpbmUgZHByaW50ayhmb3JtYXQsIGFyZ3MuLi4pCQkJCQlcCisJZG8geyBpZiAoMCkJCQkJCQkJXAorCQlwcmludGsoS0VSTl9ERUJVRyAibXBvYTolczogIiBmb3JtYXQsIF9fRklMRV9fLCAjI2FyZ3MpO1wKKwl9IHdoaWxlICgwKQogI2VuZGlmCiAKICNpZiAwCi0jZGVmaW5lIGRkcHJpbnRrIHByaW50ayAgLyogbW9yZSBkZWJ1ZyAqLworI2RlZmluZSBkZHByaW50ayhmb3JtYXQsIGFyZ3MuLi4pCQkJCQlcCisJcHJpbnRrKEtFUk5fREVCVUcgIm1wb2E6JXM6ICIgZm9ybWF0LCBfX0ZJTEVfXywgIyNhcmdzKSAgLyogZGVidWcgKi8KICNlbHNlCi0jZGVmaW5lIGRkcHJpbnRrKGZvcm1hdCxhcmdzLi4uKQorI2RlZmluZSBkZHByaW50ayhmb3JtYXQsIGFyZ3MuLi4pCQkJCQlcCisJZG8geyBpZiAoMCkJCQkJCQkJXAorCQlwcmludGsoS0VSTl9ERUJVRyAibXBvYTolczogIiBmb3JtYXQsIF9fRklMRV9fLCAjI2FyZ3MpO1wKKwl9IHdoaWxlICgwKQogI2VuZGlmCiAKIHN0YXRpYyBpbl9jYWNoZV9lbnRyeSAqaW5fY2FjaGVfZ2V0KF9fYmUzMiBkc3RfaXAsCkBAIC0yOSw4ICszNyw4IEBACiAKIAlyZWFkX2xvY2tfYmgoJmNsaWVudC0+aW5ncmVzc19sb2NrKTsKIAllbnRyeSA9IGNsaWVudC0+aW5fY2FjaGU7Ci0Jd2hpbGUoZW50cnkgIT0gTlVMTCl7Ci0JCWlmKCBlbnRyeS0+Y3RybF9pbmZvLmluX2RzdF9pcCA9PSBkc3RfaXAgKXsKKwl3aGlsZSAoZW50cnkgIT0gTlVMTCkgeworCQlpZiAoZW50cnktPmN0cmxfaW5mby5pbl9kc3RfaXAgPT0gZHN0X2lwKSB7CiAJCQlhdG9taWNfaW5jKCZlbnRyeS0+dXNlKTsKIAkJCXJlYWRfdW5sb2NrX2JoKCZjbGllbnQtPmluZ3Jlc3NfbG9jayk7CiAJCQlyZXR1cm4gZW50cnk7CkBAIC01MCw4ICs1OCw4IEBACiAKIAlyZWFkX2xvY2tfYmgoJmNsaWVudC0+aW5ncmVzc19sb2NrKTsKIAllbnRyeSA9IGNsaWVudC0+aW5fY2FjaGU7Ci0Jd2hpbGUoZW50cnkgIT0gTlVMTCl7Ci0JCWlmKChlbnRyeS0+Y3RybF9pbmZvLmluX2RzdF9pcCAmIG1hc2spICA9PSAoZHN0X2lwICYgbWFzayApKXsKKwl3aGlsZSAoZW50cnkgIT0gTlVMTCkgeworCQlpZiAoKGVudHJ5LT5jdHJsX2luZm8uaW5fZHN0X2lwICYgbWFzaykgPT0gKGRzdF9pcCAmIG1hc2spKSB7CiAJCQlhdG9taWNfaW5jKCZlbnRyeS0+dXNlKTsKIAkJCXJlYWRfdW5sb2NrX2JoKCZjbGllbnQtPmluZ3Jlc3NfbG9jayk7CiAJCQlyZXR1cm4gZW50cnk7CkBAIC02NSwxNCArNzMsMTQgQEAKIH0KIAogc3RhdGljIGluX2NhY2hlX2VudHJ5ICppbl9jYWNoZV9nZXRfYnlfdmNjKHN0cnVjdCBhdG1fdmNjICp2Y2MsCi0JCQkJCSAgIHN0cnVjdCBtcG9hX2NsaWVudCAqY2xpZW50ICkKKwkJCQkJICAgc3RydWN0IG1wb2FfY2xpZW50ICpjbGllbnQpCiB7CiAJaW5fY2FjaGVfZW50cnkgKmVudHJ5OwogCiAJcmVhZF9sb2NrX2JoKCZjbGllbnQtPmluZ3Jlc3NfbG9jayk7CiAJZW50cnkgPSBjbGllbnQtPmluX2NhY2hlOwotCXdoaWxlKGVudHJ5ICE9IE5VTEwpewotCQlpZihlbnRyeS0+c2hvcnRjdXQgPT0gdmNjKSB7CisJd2hpbGUgKGVudHJ5ICE9IE5VTEwpIHsKKwkJaWYgKGVudHJ5LT5zaG9ydGN1dCA9PSB2Y2MpIHsKIAkJCWF0b21pY19pbmMoJmVudHJ5LT51c2UpOwogCQkJcmVhZF91bmxvY2tfYmgoJmNsaWVudC0+aW5ncmVzc19sb2NrKTsKIAkJCXJldHVybiBlbnRyeTsKQEAgLTkwLDE0ICs5OCwxNCBAQAogCWluX2NhY2hlX2VudHJ5ICplbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKGluX2NhY2hlX2VudHJ5KSwgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoZW50cnkgPT0gTlVMTCkgewotCQlwcmludGsoIm1wb2E6IG1wb2FfY2FjaGVzLmM6IG5ld19pbl9jYWNoZV9lbnRyeTogb3V0IG9mIG1lbW9yeVxuIik7CisJCXByX2luZm8oIm1wb2E6IG1wb2FfY2FjaGVzLmM6IG5ld19pbl9jYWNoZV9lbnRyeTogb3V0IG9mIG1lbW9yeVxuIik7CiAJCXJldHVybiBOVUxMOwogCX0KIAotCWRwcmludGsoIm1wb2E6IG1wb2FfY2FjaGVzLmM6IGFkZGluZyBhbiBpbmdyZXNzIGVudHJ5LCBpcCA9ICVwSTRcbiIsICZkc3RfaXApOworCWRwcmludGsoImFkZGluZyBhbiBpbmdyZXNzIGVudHJ5LCBpcCA9ICVwSTRcbiIsICZkc3RfaXApOwogCiAJYXRvbWljX3NldCgmZW50cnktPnVzZSwgMSk7Ci0JZHByaW50aygibXBvYTogbXBvYV9jYWNoZXMuYzogbmV3X2luX2NhY2hlX2VudHJ5OiBhYm91dCB0byBsb2NrXG4iKTsKKwlkcHJpbnRrKCJuZXdfaW5fY2FjaGVfZW50cnk6IGFib3V0IHRvIGxvY2tcbiIpOwogCXdyaXRlX2xvY2tfYmgoJmNsaWVudC0+aW5ncmVzc19sb2NrKTsKIAllbnRyeS0+bmV4dCA9IGNsaWVudC0+aW5fY2FjaGU7CiAJZW50cnktPnByZXYgPSBOVUxMOwpAQCAtMTE1LDcgKzEyMyw3IEBACiAJYXRvbWljX2luYygmZW50cnktPnVzZSk7CiAKIAl3cml0ZV91bmxvY2tfYmgoJmNsaWVudC0+aW5ncmVzc19sb2NrKTsKLQlkcHJpbnRrKCJtcG9hOiBtcG9hX2NhY2hlcy5jOiBuZXdfaW5fY2FjaGVfZW50cnk6IHVubG9ja2VkXG4iKTsKKwlkcHJpbnRrKCJuZXdfaW5fY2FjaGVfZW50cnk6IHVubG9ja2VkXG4iKTsKIAogCXJldHVybiBlbnRyeTsKIH0KQEAgLTEyNiwzOSArMTM0LDQxIEBACiAJc3RydWN0IGtfbWVzc2FnZSBtc2c7CiAKIAllbnRyeS0+Y291bnQrKzsKLQlpZihlbnRyeS0+ZW50cnlfc3RhdGUgPT0gSU5HUkVTU19SRVNPTFZFRCAmJiBlbnRyeS0+c2hvcnRjdXQgIT0gTlVMTCkKKwlpZiAoZW50cnktPmVudHJ5X3N0YXRlID09IElOR1JFU1NfUkVTT0xWRUQgJiYgZW50cnktPnNob3J0Y3V0ICE9IE5VTEwpCiAJCXJldHVybiBPUEVOOwogCi0JaWYoZW50cnktPmVudHJ5X3N0YXRlID09IElOR1JFU1NfUkVGUkVTSElORyl7Ci0JCWlmKGVudHJ5LT5jb3VudCA+IG1wYy0+cGFyYW1ldGVycy5tcGNfcDEpeworCWlmIChlbnRyeS0+ZW50cnlfc3RhdGUgPT0gSU5HUkVTU19SRUZSRVNISU5HKSB7CisJCWlmIChlbnRyeS0+Y291bnQgPiBtcGMtPnBhcmFtZXRlcnMubXBjX3AxKSB7CiAJCQltc2cudHlwZSA9IFNORF9NUE9BX1JFU19SUVNUOwogCQkJbXNnLmNvbnRlbnQuaW5faW5mbyA9IGVudHJ5LT5jdHJsX2luZm87CiAJCQltZW1jcHkobXNnLk1QU19jdHJsLCBtcGMtPm1wc19jdHJsX2FkZHIsIEFUTV9FU0FfTEVOKTsKIAkJCXFvcyA9IGF0bV9tcG9hX3NlYXJjaF9xb3MoZW50cnktPmN0cmxfaW5mby5pbl9kc3RfaXApOwotCQkJaWYgKHFvcyAhPSBOVUxMKSBtc2cucW9zID0gcW9zLT5xb3M7CisJCQlpZiAocW9zICE9IE5VTEwpCisJCQkJbXNnLnFvcyA9IHFvcy0+cW9zOwogCQkJbXNnX3RvX21wb2FkKCZtc2csIG1wYyk7CiAJCQlkb19nZXR0aW1lb2ZkYXkoJihlbnRyeS0+cmVwbHlfd2FpdCkpOwogCQkJZW50cnktPmVudHJ5X3N0YXRlID0gSU5HUkVTU19SRVNPTFZJTkc7CiAJCX0KLQkJaWYoZW50cnktPnNob3J0Y3V0ICE9IE5VTEwpCisJCWlmIChlbnRyeS0+c2hvcnRjdXQgIT0gTlVMTCkKIAkJCXJldHVybiBPUEVOOwogCQlyZXR1cm4gQ0xPU0VEOwogCX0KIAotCWlmKGVudHJ5LT5lbnRyeV9zdGF0ZSA9PSBJTkdSRVNTX1JFU09MVklORyAmJiBlbnRyeS0+c2hvcnRjdXQgIT0gTlVMTCkKKwlpZiAoZW50cnktPmVudHJ5X3N0YXRlID09IElOR1JFU1NfUkVTT0xWSU5HICYmIGVudHJ5LT5zaG9ydGN1dCAhPSBOVUxMKQogCQlyZXR1cm4gT1BFTjsKIAotCWlmKCBlbnRyeS0+Y291bnQgPiBtcGMtPnBhcmFtZXRlcnMubXBjX3AxICYmCi0JICAgIGVudHJ5LT5lbnRyeV9zdGF0ZSA9PSBJTkdSRVNTX0lOVkFMSUQpewotCQlkcHJpbnRrKCJtcG9hOiAoJXMpIG1wb2FfY2FjaGVzLmM6IHRocmVzaG9sZCBleGNlZWRlZCBmb3IgaXAgJXBJNCwgc2VuZGluZyBNUE9BIHJlcyByZXFcbiIsCisJaWYgKGVudHJ5LT5jb3VudCA+IG1wYy0+cGFyYW1ldGVycy5tcGNfcDEgJiYKKwkgICAgZW50cnktPmVudHJ5X3N0YXRlID09IElOR1JFU1NfSU5WQUxJRCkgeworCQlkcHJpbnRrKCIoJXMpIHRocmVzaG9sZCBleGNlZWRlZCBmb3IgaXAgJXBJNCwgc2VuZGluZyBNUE9BIHJlcyByZXFcbiIsCiAJCQltcGMtPmRldi0+bmFtZSwgJmVudHJ5LT5jdHJsX2luZm8uaW5fZHN0X2lwKTsKIAkJZW50cnktPmVudHJ5X3N0YXRlID0gSU5HUkVTU19SRVNPTFZJTkc7Ci0JCW1zZy50eXBlID0gIFNORF9NUE9BX1JFU19SUVNUOwotCQltZW1jcHkobXNnLk1QU19jdHJsLCBtcGMtPm1wc19jdHJsX2FkZHIsIEFUTV9FU0FfTEVOICk7CisJCW1zZy50eXBlID0gU05EX01QT0FfUkVTX1JRU1Q7CisJCW1lbWNweShtc2cuTVBTX2N0cmwsIG1wYy0+bXBzX2N0cmxfYWRkciwgQVRNX0VTQV9MRU4pOwogCQltc2cuY29udGVudC5pbl9pbmZvID0gZW50cnktPmN0cmxfaW5mbzsKIAkJcW9zID0gYXRtX21wb2Ffc2VhcmNoX3FvcyhlbnRyeS0+Y3RybF9pbmZvLmluX2RzdF9pcCk7Ci0JCWlmIChxb3MgIT0gTlVMTCkgbXNnLnFvcyA9IHFvcy0+cW9zOwotCQltc2dfdG9fbXBvYWQoICZtc2csIG1wYyk7CisJCWlmIChxb3MgIT0gTlVMTCkKKwkJCW1zZy5xb3MgPSBxb3MtPnFvczsKKwkJbXNnX3RvX21wb2FkKCZtc2csIG1wYyk7CiAJCWRvX2dldHRpbWVvZmRheSgmKGVudHJ5LT5yZXBseV93YWl0KSk7CiAJfQogCkBAIC0xODUsNyArMTk1LDcgQEAKIAlzdHJ1Y3Qga19tZXNzYWdlIG1zZzsKIAogCXZjYyA9IGVudHJ5LT5zaG9ydGN1dDsKLQlkcHJpbnRrKCJtcG9hOiBtcG9hX2NhY2hlcy5jOiByZW1vdmluZyBhbiBpbmdyZXNzIGVudHJ5LCBpcCA9ICVwSTRcbiIsCisJZHByaW50aygicmVtb3ZpbmcgYW4gaW5ncmVzcyBlbnRyeSwgaXAgPSAlcEk0XG4iLAogCQkmZW50cnktPmN0cmxfaW5mby5pbl9kc3RfaXApOwogCiAJaWYgKGVudHJ5LT5wcmV2ICE9IE5VTEwpCkBAIC0xOTUsMTQgKzIwNSwxNSBAQAogCWlmIChlbnRyeS0+bmV4dCAhPSBOVUxMKQogCQllbnRyeS0+bmV4dC0+cHJldiA9IGVudHJ5LT5wcmV2OwogCWNsaWVudC0+aW5fb3BzLT5wdXQoZW50cnkpOwotCWlmKGNsaWVudC0+aW5fY2FjaGUgPT0gTlVMTCAmJiBjbGllbnQtPmVnX2NhY2hlID09IE5VTEwpeworCWlmIChjbGllbnQtPmluX2NhY2hlID09IE5VTEwgJiYgY2xpZW50LT5lZ19jYWNoZSA9PSBOVUxMKSB7CiAJCW1zZy50eXBlID0gU1RPUF9LRUVQX0FMSVZFX1NNOwotCQltc2dfdG9fbXBvYWQoJm1zZyxjbGllbnQpOworCQltc2dfdG9fbXBvYWQoJm1zZywgY2xpZW50KTsKIAl9CiAKIAkvKiBDaGVjayBpZiB0aGUgZWdyZXNzIHNpZGUgc3RpbGwgdXNlcyB0aGlzIFZDQyAqLwogCWlmICh2Y2MgIT0gTlVMTCkgewotCQllZ19jYWNoZV9lbnRyeSAqZWdfZW50cnkgPSBjbGllbnQtPmVnX29wcy0+Z2V0X2J5X3ZjYyh2Y2MsIGNsaWVudCk7CisJCWVnX2NhY2hlX2VudHJ5ICplZ19lbnRyeSA9IGNsaWVudC0+ZWdfb3BzLT5nZXRfYnlfdmNjKHZjYywKKwkJCQkJCQkJICAgICAgY2xpZW50KTsKIAkJaWYgKGVnX2VudHJ5ICE9IE5VTEwpIHsKIAkJCWNsaWVudC0+ZWdfb3BzLT5wdXQoZWdfZW50cnkpOwogCQkJcmV0dXJuOwpAQCAtMjEzLDcgKzIyNCw2IEBACiAJcmV0dXJuOwogfQogCi0KIC8qIENhbGwgdGhpcyBldmVyeSBNUEMtcDIgc2Vjb25kcy4uLiBOb3QgZXhhY3RseSBjb3JyZWN0IHNvbHV0aW9uLAogICAgYnV0IGFuIGVhc3kgb25lLi4uICovCiBzdGF0aWMgdm9pZCBjbGVhcl9jb3VudF9hbmRfZXhwaXJlZChzdHJ1Y3QgbXBvYV9jbGllbnQgKmNsaWVudCkKQEAgLTIyNSwxMiArMjM1LDEyIEBACiAKIAl3cml0ZV9sb2NrX2JoKCZjbGllbnQtPmluZ3Jlc3NfbG9jayk7CiAJZW50cnkgPSBjbGllbnQtPmluX2NhY2hlOwotCXdoaWxlKGVudHJ5ICE9IE5VTEwpewotCQllbnRyeS0+Y291bnQ9MDsKKwl3aGlsZSAoZW50cnkgIT0gTlVMTCkgeworCQllbnRyeS0+Y291bnQgPSAwOwogCQluZXh0X2VudHJ5ID0gZW50cnktPm5leHQ7Ci0JCWlmKChub3cudHZfc2VjIC0gZW50cnktPnR2LnR2X3NlYykKLQkJICAgPiBlbnRyeS0+Y3RybF9pbmZvLmhvbGRpbmdfdGltZSl7Ci0JCQlkcHJpbnRrKCJtcG9hOiBtcG9hX2NhY2hlcy5jOiBob2xkaW5nIHRpbWUgZXhwaXJlZCwgaXAgPSAlcEk0XG4iLAorCQlpZiAoKG5vdy50dl9zZWMgLSBlbnRyeS0+dHYudHZfc2VjKQorCQkgICA+IGVudHJ5LT5jdHJsX2luZm8uaG9sZGluZ190aW1lKSB7CisJCQlkcHJpbnRrKCJob2xkaW5nIHRpbWUgZXhwaXJlZCwgaXAgPSAlcEk0XG4iLAogCQkJCSZlbnRyeS0+Y3RybF9pbmZvLmluX2RzdF9pcCk7CiAJCQljbGllbnQtPmluX29wcy0+cmVtb3ZlX2VudHJ5KGVudHJ5LCBjbGllbnQpOwogCQl9CkBAIC0yNTAsMzMgKzI2MCwzOCBAQAogCXN0cnVjdCB0aW1ldmFsIG5vdzsKIAlzdHJ1Y3Qga19tZXNzYWdlIG1zZzsKIAotCWRvX2dldHRpbWVvZmRheSggJm5vdyApOworCWRvX2dldHRpbWVvZmRheSgmbm93KTsKIAogCXJlYWRfbG9ja19iaCgmY2xpZW50LT5pbmdyZXNzX2xvY2spOwogCWVudHJ5ID0gY2xpZW50LT5pbl9jYWNoZTsKLQl3aGlsZSggZW50cnkgIT0gTlVMTCApewotCQlpZihlbnRyeS0+ZW50cnlfc3RhdGUgPT0gSU5HUkVTU19SRVNPTFZJTkcpewotCQkJaWYobm93LnR2X3NlYyAtIGVudHJ5LT5ob2xkX2Rvd24udHZfc2VjIDwgY2xpZW50LT5wYXJhbWV0ZXJzLm1wY19wNil7Ci0JCQkJZW50cnkgPSBlbnRyeS0+bmV4dDsgICAgICAgICAgICAgICAgICAgICAgLyogRW50cnkgaW4gaG9sZCBkb3duICovCisJd2hpbGUgKGVudHJ5ICE9IE5VTEwpIHsKKwkJaWYgKGVudHJ5LT5lbnRyeV9zdGF0ZSA9PSBJTkdSRVNTX1JFU09MVklORykgeworCQkJaWYgKChub3cudHZfc2VjIC0gZW50cnktPmhvbGRfZG93bi50dl9zZWMpIDwKKwkJCSAgICBjbGllbnQtPnBhcmFtZXRlcnMubXBjX3A2KSB7CisJCQkJZW50cnkgPSBlbnRyeS0+bmV4dDsJLyogRW50cnkgaW4gaG9sZCBkb3duICovCiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlpZiggKG5vdy50dl9zZWMgLSBlbnRyeS0+cmVwbHlfd2FpdC50dl9zZWMpID4KLQkJCSAgICBlbnRyeS0+cmV0cnlfdGltZSApewotCQkJCWVudHJ5LT5yZXRyeV90aW1lID0gTVBDX0MxKiggZW50cnktPnJldHJ5X3RpbWUgKTsKLQkJCQlpZihlbnRyeS0+cmV0cnlfdGltZSA+IGNsaWVudC0+cGFyYW1ldGVycy5tcGNfcDUpewotCQkJCQkvKiBSZXRyeSB0aW1lIG1heGltdW0gZXhjZWVkZWQsIHB1dCBlbnRyeSBpbiBob2xkIGRvd24uICovCisJCQlpZiAoKG5vdy50dl9zZWMgLSBlbnRyeS0+cmVwbHlfd2FpdC50dl9zZWMpID4KKwkJCSAgICBlbnRyeS0+cmV0cnlfdGltZSkgeworCQkJCWVudHJ5LT5yZXRyeV90aW1lID0gTVBDX0MxICogKGVudHJ5LT5yZXRyeV90aW1lKTsKKwkJCQkvKgorCQkJCSAqIFJldHJ5IHRpbWUgbWF4aW11bSBleGNlZWRlZCwKKwkJCQkgKiBwdXQgZW50cnkgaW4gaG9sZCBkb3duLgorCQkJCSAqLworCQkJCWlmIChlbnRyeS0+cmV0cnlfdGltZSA+IGNsaWVudC0+cGFyYW1ldGVycy5tcGNfcDUpIHsKIAkJCQkJZG9fZ2V0dGltZW9mZGF5KCYoZW50cnktPmhvbGRfZG93bikpOwogCQkJCQllbnRyeS0+cmV0cnlfdGltZSA9IGNsaWVudC0+cGFyYW1ldGVycy5tcGNfcDQ7CiAJCQkJCWVudHJ5ID0gZW50cnktPm5leHQ7CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAkJCQkvKiBBc2sgZGFlbW9uIHRvIHNlbmQgYSByZXNvbHV0aW9uIHJlcXVlc3QuICovCi0JCQkJbWVtc2V0KCYoZW50cnktPmhvbGRfZG93biksMCxzaXplb2Yoc3RydWN0IHRpbWV2YWwpKTsKKwkJCQltZW1zZXQoJihlbnRyeS0+aG9sZF9kb3duKSwgMCwgc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSk7CiAJCQkJbXNnLnR5cGUgPSBTTkRfTVBPQV9SRVNfUlRSWTsKIAkJCQltZW1jcHkobXNnLk1QU19jdHJsLCBjbGllbnQtPm1wc19jdHJsX2FkZHIsIEFUTV9FU0FfTEVOKTsKIAkJCQltc2cuY29udGVudC5pbl9pbmZvID0gZW50cnktPmN0cmxfaW5mbzsKIAkJCQlxb3MgPSBhdG1fbXBvYV9zZWFyY2hfcW9zKGVudHJ5LT5jdHJsX2luZm8uaW5fZHN0X2lwKTsKLQkJCQlpZiAocW9zICE9IE5VTEwpIG1zZy5xb3MgPSBxb3MtPnFvczsKKwkJCQlpZiAocW9zICE9IE5VTEwpCisJCQkJCW1zZy5xb3MgPSBxb3MtPnFvczsKIAkJCQltc2dfdG9fbXBvYWQoJm1zZywgY2xpZW50KTsKIAkJCQlkb19nZXR0aW1lb2ZkYXkoJihlbnRyeS0+cmVwbHlfd2FpdCkpOwogCQkJfQpAQCAtMjkyLDE2ICszMDcsMTcgQEAKIAlzdHJ1Y3QgdGltZXZhbCBub3c7CiAJc3RydWN0IGluX2NhY2hlX2VudHJ5ICplbnRyeSA9IGNsaWVudC0+aW5fY2FjaGU7CiAKLQlkZHByaW50aygibXBvYTogbXBvYV9jYWNoZXMuYzogcmVmcmVzaF9lbnRyaWVzXG4iKTsKKwlkZHByaW50aygicmVmcmVzaF9lbnRyaWVzXG4iKTsKIAlkb19nZXR0aW1lb2ZkYXkoJm5vdyk7CiAKIAlyZWFkX2xvY2tfYmgoJmNsaWVudC0+aW5ncmVzc19sb2NrKTsKLQl3aGlsZSggZW50cnkgIT0gTlVMTCApewotCQlpZiggZW50cnktPmVudHJ5X3N0YXRlID09IElOR1JFU1NfUkVTT0xWRUQgKXsKLQkJCWlmKCEoZW50cnktPnJlZnJlc2hfdGltZSkpCi0JCQkJZW50cnktPnJlZnJlc2hfdGltZSA9ICgyKihlbnRyeS0+Y3RybF9pbmZvLmhvbGRpbmdfdGltZSkpLzM7Ci0JCQlpZiggKG5vdy50dl9zZWMgLSBlbnRyeS0+cmVwbHlfd2FpdC50dl9zZWMpID4gZW50cnktPnJlZnJlc2hfdGltZSApewotCQkJCWRwcmludGsoIm1wb2E6IG1wb2FfY2FjaGVzLmM6IHJlZnJlc2hpbmcgYW4gZW50cnkuXG4iKTsKKwl3aGlsZSAoZW50cnkgIT0gTlVMTCkgeworCQlpZiAoZW50cnktPmVudHJ5X3N0YXRlID09IElOR1JFU1NfUkVTT0xWRUQpIHsKKwkJCWlmICghKGVudHJ5LT5yZWZyZXNoX3RpbWUpKQorCQkJCWVudHJ5LT5yZWZyZXNoX3RpbWUgPSAoMiAqIChlbnRyeS0+Y3RybF9pbmZvLmhvbGRpbmdfdGltZSkpLzM7CisJCQlpZiAoKG5vdy50dl9zZWMgLSBlbnRyeS0+cmVwbHlfd2FpdC50dl9zZWMpID4KKwkJCSAgICBlbnRyeS0+cmVmcmVzaF90aW1lKSB7CisJCQkJZHByaW50aygicmVmcmVzaGluZyBhbiBlbnRyeS5cbiIpOwogCQkJCWVudHJ5LT5lbnRyeV9zdGF0ZSA9IElOR1JFU1NfUkVGUkVTSElORzsKIAogCQkJfQpAQCAtMzE0LDIxICszMzAsMjIgQEAKIHN0YXRpYyB2b2lkIGluX2Rlc3Ryb3lfY2FjaGUoc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCiB7CiAJd3JpdGVfbG9ja19pcnEoJm1wYy0+aW5ncmVzc19sb2NrKTsKLQl3aGlsZShtcGMtPmluX2NhY2hlICE9IE5VTEwpCisJd2hpbGUgKG1wYy0+aW5fY2FjaGUgIT0gTlVMTCkKIAkJbXBjLT5pbl9vcHMtPnJlbW92ZV9lbnRyeShtcGMtPmluX2NhY2hlLCBtcGMpOwogCXdyaXRlX3VubG9ja19pcnEoJm1wYy0+aW5ncmVzc19sb2NrKTsKIAogCXJldHVybjsKIH0KIAotc3RhdGljIGVnX2NhY2hlX2VudHJ5ICplZ19jYWNoZV9nZXRfYnlfY2FjaGVfaWQoX19iZTMyIGNhY2hlX2lkLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKm1wYykKK3N0YXRpYyBlZ19jYWNoZV9lbnRyeSAqZWdfY2FjaGVfZ2V0X2J5X2NhY2hlX2lkKF9fYmUzMiBjYWNoZV9pZCwKKwkJCQkJCXN0cnVjdCBtcG9hX2NsaWVudCAqbXBjKQogewogCWVnX2NhY2hlX2VudHJ5ICplbnRyeTsKIAogCXJlYWRfbG9ja19pcnEoJm1wYy0+ZWdyZXNzX2xvY2spOwogCWVudHJ5ID0gbXBjLT5lZ19jYWNoZTsKLQl3aGlsZShlbnRyeSAhPSBOVUxMKXsKLQkJaWYoZW50cnktPmN0cmxfaW5mby5jYWNoZV9pZCA9PSBjYWNoZV9pZCl7CisJd2hpbGUgKGVudHJ5ICE9IE5VTEwpIHsKKwkJaWYgKGVudHJ5LT5jdHJsX2luZm8uY2FjaGVfaWQgPT0gY2FjaGVfaWQpIHsKIAkJCWF0b21pY19pbmMoJmVudHJ5LT51c2UpOwogCQkJcmVhZF91bmxvY2tfaXJxKCZtcGMtPmVncmVzc19sb2NrKTsKIAkJCXJldHVybiBlbnRyeTsKQEAgLTM0OCw3ICszNjUsNyBAQAogCiAJcmVhZF9sb2NrX2lycXNhdmUoJm1wYy0+ZWdyZXNzX2xvY2ssIGZsYWdzKTsKIAllbnRyeSA9IG1wYy0+ZWdfY2FjaGU7Ci0Jd2hpbGUgKGVudHJ5ICE9IE5VTEwpeworCXdoaWxlIChlbnRyeSAhPSBOVUxMKSB7CiAJCWlmIChlbnRyeS0+Y3RybF9pbmZvLnRhZyA9PSB0YWcpIHsKIAkJCWF0b21pY19pbmMoJmVudHJ5LT51c2UpOwogCQkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmbXBjLT5lZ3Jlc3NfbG9jaywgZmxhZ3MpOwpAQCAtMzYyLDE0ICszNzksMTUgQEAKIH0KIAogLyogVGhpcyBjYW4gYmUgY2FsbGVkIGZyb20gYW55IGNvbnRleHQgc2luY2UgaXQgc2F2ZXMgQ1BVIGZsYWdzICovCi1zdGF0aWMgZWdfY2FjaGVfZW50cnkgKmVnX2NhY2hlX2dldF9ieV92Y2Moc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCitzdGF0aWMgZWdfY2FjaGVfZW50cnkgKmVnX2NhY2hlX2dldF9ieV92Y2Moc3RydWN0IGF0bV92Y2MgKnZjYywKKwkJCQkJICAgc3RydWN0IG1wb2FfY2xpZW50ICptcGMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAllZ19jYWNoZV9lbnRyeSAqZW50cnk7CiAKIAlyZWFkX2xvY2tfaXJxc2F2ZSgmbXBjLT5lZ3Jlc3NfbG9jaywgZmxhZ3MpOwogCWVudHJ5ID0gbXBjLT5lZ19jYWNoZTsKLQl3aGlsZSAoZW50cnkgIT0gTlVMTCl7CisJd2hpbGUgKGVudHJ5ICE9IE5VTEwpIHsKIAkJaWYgKGVudHJ5LT5zaG9ydGN1dCA9PSB2Y2MpIHsKIAkJCWF0b21pY19pbmMoJmVudHJ5LT51c2UpOwogCQkJcmVhZF91bmxvY2tfaXJxcmVzdG9yZSgmbXBjLT5lZ3Jlc3NfbG9jaywgZmxhZ3MpOwpAQCAtMzgyLDE0ICs0MDAsMTUgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIGVnX2NhY2hlX2VudHJ5ICplZ19jYWNoZV9nZXRfYnlfc3JjX2lwKF9fYmUzMiBpcGFkZHIsIHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjKQorc3RhdGljIGVnX2NhY2hlX2VudHJ5ICplZ19jYWNoZV9nZXRfYnlfc3JjX2lwKF9fYmUzMiBpcGFkZHIsCisJCQkJCSAgICAgIHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjKQogewogCWVnX2NhY2hlX2VudHJ5ICplbnRyeTsKIAogCXJlYWRfbG9ja19pcnEoJm1wYy0+ZWdyZXNzX2xvY2spOwogCWVudHJ5ID0gbXBjLT5lZ19jYWNoZTsKLQl3aGlsZShlbnRyeSAhPSBOVUxMKXsKLQkJaWYoZW50cnktPmxhdGVzdF9pcF9hZGRyID09IGlwYWRkcikgeworCXdoaWxlIChlbnRyeSAhPSBOVUxMKSB7CisJCWlmIChlbnRyeS0+bGF0ZXN0X2lwX2FkZHIgPT0gaXBhZGRyKSB7CiAJCQlhdG9taWNfaW5jKCZlbnRyeS0+dXNlKTsKIAkJCXJlYWRfdW5sb2NrX2lycSgmbXBjLT5lZ3Jlc3NfbG9jayk7CiAJCQlyZXR1cm4gZW50cnk7CkBAIC00MjEsNyArNDQwLDcgQEAKIAlzdHJ1Y3Qga19tZXNzYWdlIG1zZzsKIAogCXZjYyA9IGVudHJ5LT5zaG9ydGN1dDsKLQlkcHJpbnRrKCJtcG9hOiBtcG9hX2NhY2hlcy5jOiByZW1vdmluZyBhbiBlZ3Jlc3MgZW50cnkuXG4iKTsKKwlkcHJpbnRrKCJyZW1vdmluZyBhbiBlZ3Jlc3MgZW50cnkuXG4iKTsKIAlpZiAoZW50cnktPnByZXYgIT0gTlVMTCkKIAkJZW50cnktPnByZXYtPm5leHQgPSBlbnRyeS0+bmV4dDsKIAllbHNlCkBAIC00MjksOSArNDQ4LDkgQEAKIAlpZiAoZW50cnktPm5leHQgIT0gTlVMTCkKIAkJZW50cnktPm5leHQtPnByZXYgPSBlbnRyeS0+cHJldjsKIAljbGllbnQtPmVnX29wcy0+cHV0KGVudHJ5KTsKLQlpZihjbGllbnQtPmluX2NhY2hlID09IE5VTEwgJiYgY2xpZW50LT5lZ19jYWNoZSA9PSBOVUxMKXsKKwlpZiAoY2xpZW50LT5pbl9jYWNoZSA9PSBOVUxMICYmIGNsaWVudC0+ZWdfY2FjaGUgPT0gTlVMTCkgewogCQltc2cudHlwZSA9IFNUT1BfS0VFUF9BTElWRV9TTTsKLQkJbXNnX3RvX21wb2FkKCZtc2csY2xpZW50KTsKKwkJbXNnX3RvX21wb2FkKCZtc2csIGNsaWVudCk7CiAJfQogCiAJLyogQ2hlY2sgaWYgdGhlIGluZ3Jlc3Mgc2lkZSBzdGlsbCB1c2VzIHRoaXMgVkNDICovCkBAIC00NDcsMjAgKzQ2NiwyMSBAQAogCXJldHVybjsKIH0KIAotc3RhdGljIGVnX2NhY2hlX2VudHJ5ICplZ19jYWNoZV9hZGRfZW50cnkoc3RydWN0IGtfbWVzc2FnZSAqbXNnLCBzdHJ1Y3QgbXBvYV9jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBlZ19jYWNoZV9lbnRyeSAqZWdfY2FjaGVfYWRkX2VudHJ5KHN0cnVjdCBrX21lc3NhZ2UgKm1zZywKKwkJCQkJICBzdHJ1Y3QgbXBvYV9jbGllbnQgKmNsaWVudCkKIHsKIAllZ19jYWNoZV9lbnRyeSAqZW50cnkgPSBremFsbG9jKHNpemVvZihlZ19jYWNoZV9lbnRyeSksIEdGUF9LRVJORUwpOwogCiAJaWYgKGVudHJ5ID09IE5VTEwpIHsKLQkJcHJpbnRrKCJtcG9hOiBtcG9hX2NhY2hlcy5jOiBuZXdfZWdfY2FjaGVfZW50cnk6IG91dCBvZiBtZW1vcnlcbiIpOworCQlwcl9pbmZvKCJvdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JZHByaW50aygibXBvYTogbXBvYV9jYWNoZXMuYzogYWRkaW5nIGFuIGVncmVzcyBlbnRyeSwgaXAgPSAlcEk0LCB0aGlzIHNob3VsZCBiZSBvdXIgSVBcbiIsCisJZHByaW50aygiYWRkaW5nIGFuIGVncmVzcyBlbnRyeSwgaXAgPSAlcEk0LCB0aGlzIHNob3VsZCBiZSBvdXIgSVBcbiIsCiAJCSZtc2ctPmNvbnRlbnQuZWdfaW5mby5lZ19kc3RfaXApOwogCiAJYXRvbWljX3NldCgmZW50cnktPnVzZSwgMSk7Ci0JZHByaW50aygibXBvYTogbXBvYV9jYWNoZXMuYzogbmV3X2VnX2NhY2hlX2VudHJ5OiBhYm91dCB0byBsb2NrXG4iKTsKKwlkcHJpbnRrKCJuZXdfZWdfY2FjaGVfZW50cnk6IGFib3V0IHRvIGxvY2tcbiIpOwogCXdyaXRlX2xvY2tfaXJxKCZjbGllbnQtPmVncmVzc19sb2NrKTsKIAllbnRyeS0+bmV4dCA9IGNsaWVudC0+ZWdfY2FjaGU7CiAJZW50cnktPnByZXYgPSBOVUxMOwpAQCAtNDcyLDE4ICs0OTIsMTggQEAKIAllbnRyeS0+Y3RybF9pbmZvID0gbXNnLT5jb250ZW50LmVnX2luZm87CiAJZG9fZ2V0dGltZW9mZGF5KCYoZW50cnktPnR2KSk7CiAJZW50cnktPmVudHJ5X3N0YXRlID0gRUdSRVNTX1JFU09MVkVEOwotCWRwcmludGsoIm1wb2E6IG1wb2FfY2FjaGVzLmM6IG5ld19lZ19jYWNoZV9lbnRyeSBjYWNoZV9pZCAlbHVcbiIsIG50b2hsKGVudHJ5LT5jdHJsX2luZm8uY2FjaGVfaWQpKTsKLQlkcHJpbnRrKCJtcG9hOiBtcG9hX2NhY2hlcy5jOiBtcHNfaXAgPSAlcEk0XG4iLAotCQkmZW50cnktPmN0cmxfaW5mby5tcHNfaXApOworCWRwcmludGsoIm5ld19lZ19jYWNoZV9lbnRyeSBjYWNoZV9pZCAldVxuIiwKKwkJbnRvaGwoZW50cnktPmN0cmxfaW5mby5jYWNoZV9pZCkpOworCWRwcmludGsoIm1wc19pcCA9ICVwSTRcbiIsICZlbnRyeS0+Y3RybF9pbmZvLm1wc19pcCk7CiAJYXRvbWljX2luYygmZW50cnktPnVzZSk7CiAKIAl3cml0ZV91bmxvY2tfaXJxKCZjbGllbnQtPmVncmVzc19sb2NrKTsKLQlkcHJpbnRrKCJtcG9hOiBtcG9hX2NhY2hlcy5jOiBuZXdfZWdfY2FjaGVfZW50cnk6IHVubG9ja2VkXG4iKTsKKwlkcHJpbnRrKCJuZXdfZWdfY2FjaGVfZW50cnk6IHVubG9ja2VkXG4iKTsKIAogCXJldHVybiBlbnRyeTsKIH0KIAotc3RhdGljIHZvaWQgdXBkYXRlX2VnX2NhY2hlX2VudHJ5KGVnX2NhY2hlX2VudHJ5ICogZW50cnksIHVpbnQxNl90IGhvbGRpbmdfdGltZSkKK3N0YXRpYyB2b2lkIHVwZGF0ZV9lZ19jYWNoZV9lbnRyeShlZ19jYWNoZV9lbnRyeSAqZW50cnksIHVpbnQxNl90IGhvbGRpbmdfdGltZSkKIHsKIAlkb19nZXR0aW1lb2ZkYXkoJihlbnRyeS0+dHYpKTsKIAllbnRyeS0+ZW50cnlfc3RhdGUgPSBFR1JFU1NfUkVTT0xWRUQ7CkBAIC01MDIsMTMgKzUyMiwxNCBAQAogCiAJd3JpdGVfbG9ja19pcnEoJmNsaWVudC0+ZWdyZXNzX2xvY2spOwogCWVudHJ5ID0gY2xpZW50LT5lZ19jYWNoZTsKLQl3aGlsZShlbnRyeSAhPSBOVUxMKXsKKwl3aGlsZSAoZW50cnkgIT0gTlVMTCkgewogCQluZXh0X2VudHJ5ID0gZW50cnktPm5leHQ7Ci0JCWlmKChub3cudHZfc2VjIC0gZW50cnktPnR2LnR2X3NlYykKLQkJICAgPiBlbnRyeS0+Y3RybF9pbmZvLmhvbGRpbmdfdGltZSl7CisJCWlmICgobm93LnR2X3NlYyAtIGVudHJ5LT50di50dl9zZWMpCisJCSAgID4gZW50cnktPmN0cmxfaW5mby5ob2xkaW5nX3RpbWUpIHsKIAkJCW1zZy50eXBlID0gU05EX0VHUkVTU19QVVJHRTsKIAkJCW1zZy5jb250ZW50LmVnX2luZm8gPSBlbnRyeS0+Y3RybF9pbmZvOwotCQkJZHByaW50aygibXBvYTogbXBvYV9jYWNoZXMuYzogZWdyZXNzX2NhY2hlOiBob2xkaW5nIHRpbWUgZXhwaXJlZCwgY2FjaGVfaWQgPSAlbHUuXG4iLG50b2hsKGVudHJ5LT5jdHJsX2luZm8uY2FjaGVfaWQpKTsKKwkJCWRwcmludGsoImVncmVzc19jYWNoZTogaG9sZGluZyB0aW1lIGV4cGlyZWQsIGNhY2hlX2lkID0gJXUuXG4iLAorCQkJCW50b2hsKGVudHJ5LT5jdHJsX2luZm8uY2FjaGVfaWQpKTsKIAkJCW1zZ190b19tcG9hZCgmbXNnLCBjbGllbnQpOwogCQkJY2xpZW50LT5lZ19vcHMtPnJlbW92ZV9lbnRyeShlbnRyeSwgY2xpZW50KTsKIAkJfQpAQCAtNTIyLDcgKzU0Myw3IEBACiBzdGF0aWMgdm9pZCBlZ19kZXN0cm95X2NhY2hlKHN0cnVjdCBtcG9hX2NsaWVudCAqbXBjKQogewogCXdyaXRlX2xvY2tfaXJxKCZtcGMtPmVncmVzc19sb2NrKTsKLQl3aGlsZShtcGMtPmVnX2NhY2hlICE9IE5VTEwpCisJd2hpbGUgKG1wYy0+ZWdfY2FjaGUgIT0gTlVMTCkKIAkJbXBjLT5lZ19vcHMtPnJlbW92ZV9lbnRyeShtcGMtPmVnX2NhY2hlLCBtcGMpOwogCXdyaXRlX3VubG9ja19pcnEoJm1wYy0+ZWdyZXNzX2xvY2spOwogCkBAIC01MzAsNyArNTUxLDYgQEAKIH0KIAogCi0KIHN0YXRpYyBzdHJ1Y3QgaW5fY2FjaGVfb3BzIGluZ3Jlc3Nfb3BzID0gewogCWluX2NhY2hlX2FkZF9lbnRyeSwgICAgICAgICAgICAgICAvKiBhZGRfZW50cnkgICAgICAgKi8KIAlpbl9jYWNoZV9nZXQsICAgICAgICAgICAgICAgICAgICAgLyogZ2V0ICAgICAgICAgICAgICovCmRpZmYgLS1naXQgYS9uZXQvYXRtL21wb2FfcHJvYy5jIGIvbmV0L2F0bS9tcG9hX3Byb2MuYwppbmRleCAxYTBmNWNjLi5iOWJkYjk4IDEwMDY0NAotLS0gYS9uZXQvYXRtL21wb2FfcHJvYy5jCisrKyBiL25ldC9hdG0vbXBvYV9wcm9jLmMKQEAgLTEsMyArMSw0IEBACisjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FICI6JXM6ICIgZm10LCBfX2Z1bmNfXwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgpAQCAtOCw3ICs5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtbXBjLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtLmg+CiAjaW5jbHVkZSAibXBjLmgiCkBAIC0yMCw5ICsyMSwyMyBAQAogICovCiAKICNpZiAxCi0jZGVmaW5lIGRwcmludGsgcHJpbnRrICAgLyogZGVidWcgKi8KKyNkZWZpbmUgZHByaW50ayhmb3JtYXQsIGFyZ3MuLi4pCQkJCQlcCisJcHJpbnRrKEtFUk5fREVCVUcgIm1wb2E6JXM6ICIgZm9ybWF0LCBfX0ZJTEVfXywgIyNhcmdzKSAgLyogZGVidWcgKi8KICNlbHNlCi0jZGVmaW5lIGRwcmludGsoZm9ybWF0LGFyZ3MuLi4pCisjZGVmaW5lIGRwcmludGsoZm9ybWF0LCBhcmdzLi4uKQkJCQkJXAorCWRvIHsgaWYgKDApCQkJCQkJCVwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIm1wb2E6JXM6ICIgZm9ybWF0LCBfX0ZJTEVfXywgIyNhcmdzKTtcCisJfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjaWYgMAorI2RlZmluZSBkZHByaW50ayhmb3JtYXQsIGFyZ3MuLi4pCQkJCQlcCisJcHJpbnRrKEtFUk5fREVCVUcgIm1wb2E6JXM6ICIgZm9ybWF0LCBfX0ZJTEVfXywgIyNhcmdzKSAgLyogZGVidWcgKi8KKyNlbHNlCisjZGVmaW5lIGRkcHJpbnRrKGZvcm1hdCwgYXJncy4uLikJCQkJCVwKKwlkbyB7IGlmICgwKQkJCQkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHICJtcG9hOiVzOiAiIGZvcm1hdCwgX19GSUxFX18sICMjYXJncyk7XAorCX0gd2hpbGUgKDApCiAjZW5kaWYKIAogI2RlZmluZSBTVEFUX0ZJTEVfTkFNRSAibXBjIiAgICAgLyogT3VyIHN0YXRpc3RpYyBmaWxlJ3MgbmFtZSAqLwpAQCAtNTEsNDIgKzY2LDM3IEBACiAvKgogICogUmV0dXJucyB0aGUgc3RhdGUgb2YgYW4gaW5ncmVzcyBjYWNoZSBlbnRyeSBhcyBhIHN0cmluZwogICovCi1zdGF0aWMgY29uc3QgY2hhciAqaW5ncmVzc19zdGF0ZV9zdHJpbmcoaW50IHN0YXRlKXsKLQlzd2l0Y2goc3RhdGUpIHsKK3N0YXRpYyBjb25zdCBjaGFyICppbmdyZXNzX3N0YXRlX3N0cmluZyhpbnQgc3RhdGUpCit7CisJc3dpdGNoIChzdGF0ZSkgewogCWNhc2UgSU5HUkVTU19SRVNPTFZJTkc6CiAJCXJldHVybiAicmVzb2x2aW5nICAiOwotCQlicmVhazsKIAljYXNlIElOR1JFU1NfUkVTT0xWRUQ6CiAJCXJldHVybiAicmVzb2x2ZWQgICAiOwotCQlicmVhazsKIAljYXNlIElOR1JFU1NfSU5WQUxJRDoKIAkJcmV0dXJuICJpbnZhbGlkICAgICI7Ci0JCWJyZWFrOwogCWNhc2UgSU5HUkVTU19SRUZSRVNISU5HOgogCQlyZXR1cm4gInJlZnJlc2hpbmcgIjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkgICAgICAgcmV0dXJuICIiOwogCX0KKworCXJldHVybiAiIjsKIH0KIAogLyoKICAqIFJldHVybnMgdGhlIHN0YXRlIG9mIGFuIGVncmVzcyBjYWNoZSBlbnRyeSBhcyBhIHN0cmluZwogICovCi1zdGF0aWMgY29uc3QgY2hhciAqZWdyZXNzX3N0YXRlX3N0cmluZyhpbnQgc3RhdGUpewotCXN3aXRjaChzdGF0ZSkgeworc3RhdGljIGNvbnN0IGNoYXIgKmVncmVzc19zdGF0ZV9zdHJpbmcoaW50IHN0YXRlKQoreworCXN3aXRjaCAoc3RhdGUpIHsKIAljYXNlIEVHUkVTU19SRVNPTFZFRDoKIAkJcmV0dXJuICJyZXNvbHZlZCAgICI7Ci0JCWJyZWFrOwogCWNhc2UgRUdSRVNTX1BVUkdFOgogCQlyZXR1cm4gInB1cmdlICAgICAgIjsKLQkJYnJlYWs7CiAJY2FzZSBFR1JFU1NfSU5WQUxJRDoKIAkJcmV0dXJuICJpbnZhbGlkICAgICI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JICAgICAgIHJldHVybiAiIjsKIAl9CisKKwlyZXR1cm4gIiI7CiB9CiAKIC8qCkBAIC0xMjMsNyArMTMzLDYgQEAKIHN0YXRpYyBpbnQgbXBjX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCXN0cnVjdCBtcG9hX2NsaWVudCAqbXBjID0gdjsKLQl1bnNpZ25lZCBjaGFyICp0ZW1wOwogCWludCBpOwogCWluX2NhY2hlX2VudHJ5ICppbl9lbnRyeTsKIAllZ19jYWNoZV9lbnRyeSAqZWdfZW50cnk7CkBAIC0xNDAsMTUgKzE0OSwxNyBAQAogCWRvX2dldHRpbWVvZmRheSgmbm93KTsKIAogCWZvciAoaW5fZW50cnkgPSBtcGMtPmluX2NhY2hlOyBpbl9lbnRyeTsgaW5fZW50cnkgPSBpbl9lbnRyeS0+bmV4dCkgewotCQl0ZW1wID0gKHVuc2lnbmVkIGNoYXIgKikmaW5fZW50cnktPmN0cmxfaW5mby5pbl9kc3RfaXA7Ci0JCXNwcmludGYoaXBfc3RyaW5nLCIlZC4lZC4lZC4lZCIsIHRlbXBbMF0sIHRlbXBbMV0sIHRlbXBbMl0sIHRlbXBbM10pOworCQlzcHJpbnRmKGlwX3N0cmluZywgIiVwSTQiLCAmaW5fZW50cnktPmN0cmxfaW5mby5pbl9kc3RfaXApOwogCQlzZXFfcHJpbnRmKG0sICIlLTE2cyVzJS0xNGx1JS0xMnUiLAotCQkJICAgICAgaXBfc3RyaW5nLAotCQkJICAgICAgaW5ncmVzc19zdGF0ZV9zdHJpbmcoaW5fZW50cnktPmVudHJ5X3N0YXRlKSwKLQkJCSAgICAgIGluX2VudHJ5LT5jdHJsX2luZm8uaG9sZGluZ190aW1lLShub3cudHZfc2VjLWluX2VudHJ5LT50di50dl9zZWMpLAotCQkJICAgICAgaW5fZW50cnktPnBhY2tldHNfZndkZWQpOworCQkJICAgaXBfc3RyaW5nLAorCQkJICAgaW5ncmVzc19zdGF0ZV9zdHJpbmcoaW5fZW50cnktPmVudHJ5X3N0YXRlKSwKKwkJCSAgIGluX2VudHJ5LT5jdHJsX2luZm8uaG9sZGluZ190aW1lIC0KKwkJCSAgIChub3cudHZfc2VjLWluX2VudHJ5LT50di50dl9zZWMpLAorCQkJICAgaW5fZW50cnktPnBhY2tldHNfZndkZWQpOwogCQlpZiAoaW5fZW50cnktPnNob3J0Y3V0KQotCQkJc2VxX3ByaW50ZihtLCAiICAgJS0zZCAgJS0zZCIsaW5fZW50cnktPnNob3J0Y3V0LT52cGksaW5fZW50cnktPnNob3J0Y3V0LT52Y2kpOworCQkJc2VxX3ByaW50ZihtLCAiICAgJS0zZCAgJS0zZCIsCisJCQkJICAgaW5fZW50cnktPnNob3J0Y3V0LT52cGksCisJCQkJICAgaW5fZW50cnktPnNob3J0Y3V0LT52Y2kpOwogCQlzZXFfcHJpbnRmKG0sICJcbiIpOwogCX0KIApAQCAtMTU2LDIxICsxNjcsMjMgQEAKIAlzZXFfcHJpbnRmKG0sICJFZ3Jlc3MgRW50cmllczpcbkluZ3Jlc3MgTVBDIEFUTSBhZGRyXG5DYWNoZS1pZCAgICAgICAgU3RhdGUgICAgICBIb2xkaW5nIHRpbWUgIFBhY2tldHMgcmVjdmQgIExhdGVzdCBJUCBhZGRyICAgVlBJIFZDSVxuIik7CiAJZm9yIChlZ19lbnRyeSA9IG1wYy0+ZWdfY2FjaGU7IGVnX2VudHJ5OyBlZ19lbnRyeSA9IGVnX2VudHJ5LT5uZXh0KSB7CiAJCXVuc2lnbmVkIGNoYXIgKnAgPSBlZ19lbnRyeS0+Y3RybF9pbmZvLmluX01QQ19kYXRhX0FUTV9hZGRyOwotCQlmb3IoaSA9IDA7IGkgPCBBVE1fRVNBX0xFTjsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgQVRNX0VTQV9MRU47IGkrKykKIAkJCXNlcV9wcmludGYobSwgIiUwMngiLCBwW2ldKTsKIAkJc2VxX3ByaW50ZihtLCAiXG4lLTE2bHUlcyUtMTRsdSUtMTV1IiwKIAkJCSAgICh1bnNpZ25lZCBsb25nKW50b2hsKGVnX2VudHJ5LT5jdHJsX2luZm8uY2FjaGVfaWQpLAogCQkJICAgZWdyZXNzX3N0YXRlX3N0cmluZyhlZ19lbnRyeS0+ZW50cnlfc3RhdGUpLAotCQkJICAgKGVnX2VudHJ5LT5jdHJsX2luZm8uaG9sZGluZ190aW1lLShub3cudHZfc2VjLWVnX2VudHJ5LT50di50dl9zZWMpKSwKKwkJCSAgIChlZ19lbnRyeS0+Y3RybF9pbmZvLmhvbGRpbmdfdGltZSAtCisJCQkgICAgKG5vdy50dl9zZWMtZWdfZW50cnktPnR2LnR2X3NlYykpLAogCQkJICAgZWdfZW50cnktPnBhY2tldHNfcmN2ZCk7CiAKIAkJLyogbGF0ZXN0IElQIGFkZHJlc3MgKi8KLQkJdGVtcCA9ICh1bnNpZ25lZCBjaGFyICopJmVnX2VudHJ5LT5sYXRlc3RfaXBfYWRkcjsKLQkJc3ByaW50ZihpcF9zdHJpbmcsICIlZC4lZC4lZC4lZCIsIHRlbXBbMF0sIHRlbXBbMV0sIHRlbXBbMl0sIHRlbXBbM10pOworCQlzcHJpbnRmKGlwX3N0cmluZywgIiVwSTQiLCAmZWdfZW50cnktPmxhdGVzdF9pcF9hZGRyKTsKIAkJc2VxX3ByaW50ZihtLCAiJS0xNnMiLCBpcF9zdHJpbmcpOwogCiAJCWlmIChlZ19lbnRyeS0+c2hvcnRjdXQpCi0JCQlzZXFfcHJpbnRmKG0sICIgJS0zZCAlLTNkIixlZ19lbnRyeS0+c2hvcnRjdXQtPnZwaSxlZ19lbnRyeS0+c2hvcnRjdXQtPnZjaSk7CisJCQlzZXFfcHJpbnRmKG0sICIgJS0zZCAlLTNkIiwKKwkJCQkgICBlZ19lbnRyeS0+c2hvcnRjdXQtPnZwaSwKKwkJCQkgICBlZ19lbnRyeS0+c2hvcnRjdXQtPnZjaSk7CiAJCXNlcV9wcmludGYobSwgIlxuIik7CiAJfQogCXNlcV9wcmludGYobSwgIlxuIik7CkBAIC0yNTgsMTIgKzI3MSw5IEBACiAJcW9zLnJ4dHAubWF4X3BjciA9IHJ4X3BjcjsKIAlxb3Mucnh0cC5tYXhfc2R1ID0gcnhfc2R1OwogCXFvcy5hYWwgPSBBVE1fQUFMNTsKLQlkcHJpbnRrKCJtcG9hOiBtcG9hX3Byb2MuYzogcGFyc2VfcW9zKCk6IHNldHRpbmcgcW9zIHBhcmFtYW1ldGVycyB0byB0eD0lZCwlZCByeD0lZCwlZFxuIiwKLQkJcW9zLnR4dHAubWF4X3BjciwKLQkJcW9zLnR4dHAubWF4X3NkdSwKLQkJcW9zLnJ4dHAubWF4X3BjciwKLQkJcW9zLnJ4dHAubWF4X3NkdQotCQkpOworCWRwcmludGsoInBhcnNlX3FvcygpOiBzZXR0aW5nIHFvcyBwYXJhbWFtZXRlcnMgdG8gdHg9JWQsJWQgcng9JWQsJWRcbiIsCisJCXFvcy50eHRwLm1heF9wY3IsIHFvcy50eHRwLm1heF9zZHUsCisJCXFvcy5yeHRwLm1heF9wY3IsIHFvcy5yeHRwLm1heF9zZHUpOwogCiAJYXRtX21wb2FfYWRkX3FvcyhpcGFkZHIsICZxb3MpOwogCXJldHVybiAxOwpAQCAtMjc4LDcgKzI4OCw3IEBACiAKIAlwID0gcHJvY19jcmVhdGUoU1RBVF9GSUxFX05BTUUsIDAsIGF0bV9wcm9jX3Jvb3QsICZtcGNfZmlsZV9vcGVyYXRpb25zKTsKIAlpZiAoIXApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gaW5pdGlhbGl6ZSAvcHJvYy9hdG0vJXNcbiIsIFNUQVRfRklMRV9OQU1FKTsKKwkJcHJfZXJyKCJVbmFibGUgdG8gaW5pdGlhbGl6ZSAvcHJvYy9hdG0vJXNcbiIsIFNUQVRfRklMRV9OQU1FKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXJldHVybiAwOwpAQCAtMjg5LDEwICsyOTksOSBAQAogICovCiB2b2lkIG1wY19wcm9jX2NsZWFuKHZvaWQpCiB7Ci0JcmVtb3ZlX3Byb2NfZW50cnkoU1RBVF9GSUxFX05BTUUsYXRtX3Byb2Nfcm9vdCk7CisJcmVtb3ZlX3Byb2NfZW50cnkoU1RBVF9GSUxFX05BTUUsIGF0bV9wcm9jX3Jvb3QpOwogfQogCi0KICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCiAKZGlmZiAtLWdpdCBhL25ldC9hdG0vcHBwb2F0bS5jIGIvbmV0L2F0bS9wcHBvYXRtLmMKaW5kZXggMGFmODRjZC4uNDAwODM5MiAxMDA2NDQKLS0tIGEvbmV0L2F0bS9wcHBvYXRtLmMKKysrIGIvbmV0L2F0bS9wcHBvYXRtLmMKQEAgLTMzLDYgKzMzLDggQEAKICAqIFRoZXNlIGhvb2tzIGFyZSBub3QgeWV0IGF2YWlsYWJsZSBpbiBwcHBfZ2VuZXJpYwogICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjolczogIiBmbXQsIF9fZnVuY19fCisKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CkBAIC0xMzIsNyArMTM0LDcgQEAKIHN0YXRpYyB2b2lkIHBwcG9hdG1fcHVzaChzdHJ1Y3QgYXRtX3ZjYyAqYXRtdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBwcHBvYXRtX3ZjYyAqcHZjYyA9IGF0bXZjY190b19wdmNjKGF0bXZjYyk7Ci0JcHJfZGVidWcoInBwcG9hdG0gcHVzaFxuIik7CisJcHJfZGVidWcoIlxuIik7CiAJaWYgKHNrYiA9PSBOVUxMKSB7CQkJLyogVkNDIHdhcyBjbG9zZWQgKi8KIAkJcHJfZGVidWcoInJlbW92aW5nIEFUTVBQUCBWQ0MgJXBcbiIsIHB2Y2MpOwogCQlwcHBvYXRtX3VuYXNzaWduX3ZjYyhhdG12Y2MpOwpAQCAtMTY1LDE3ICsxNjcsMTcgQEAKIAkJCXB2Y2MtPmNoYW4ubXR1ICs9IExMQ19MRU47CiAJCQlicmVhazsKIAkJfQotCQlwcl9kZWJ1ZygiQ291bGRuJ3QgYXV0b2RldGVjdCB5ZXQgIgotCQkgICAgIihza2I6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYKVxuIiwKLQkJICAgIHNrYi0+ZGF0YVswXSwgc2tiLT5kYXRhWzFdLCBza2ItPmRhdGFbMl0sCi0JCSAgICBza2ItPmRhdGFbM10sIHNrYi0+ZGF0YVs0XSwgc2tiLT5kYXRhWzVdKTsKKwkJcHJfZGVidWcoIkNvdWxkbid0IGF1dG9kZXRlY3QgeWV0IChza2I6ICUwMlggJTAyWCAlMDJYICUwMlggJTAyWCAlMDJYKVxuIiwKKwkJCSBza2ItPmRhdGFbMF0sIHNrYi0+ZGF0YVsxXSwgc2tiLT5kYXRhWzJdLAorCQkJIHNrYi0+ZGF0YVszXSwgc2tiLT5kYXRhWzRdLCBza2ItPmRhdGFbNV0pOwogCQlnb3RvIGVycm9yOwogCWNhc2UgZV92YzoKIAkJYnJlYWs7CiAJfQogCXBwcF9pbnB1dCgmcHZjYy0+Y2hhbiwgc2tiKTsKIAlyZXR1cm47Ci0gICAgZXJyb3I6CisKK2Vycm9yOgogCWtmcmVlX3NrYihza2IpOwogCXBwcF9pbnB1dF9lcnJvcigmcHZjYy0+Y2hhbiwgMCk7CiB9CkBAIC0xOTQsNyArMTk2LDcgQEAKIHsKIAlzdHJ1Y3QgcHBwb2F0bV92Y2MgKnB2Y2MgPSBjaGFuX3RvX3B2Y2MoY2hhbik7CiAJQVRNX1NLQihza2IpLT52Y2MgPSBwdmNjLT5hdG12Y2M7Ci0JcHJfZGVidWcoInBwcG9hdG1fc2VuZCAoc2tiPTB4JXAsIHZjYz0weCVwKVxuIiwgc2tiLCBwdmNjLT5hdG12Y2MpOworCXByX2RlYnVnKCIoc2tiPTB4JXAsIHZjYz0weCVwKVxuIiwgc2tiLCBwdmNjLT5hdG12Y2MpOwogCWlmIChza2ItPmRhdGFbMF0gPT0gJ1wwJyAmJiAocHZjYy0+ZmxhZ3MgJiBTQ19DT01QX1BST1QpKQogCQkodm9pZCkgc2tiX3B1bGwoc2tiLCAxKTsKIAlzd2l0Y2ggKHB2Y2MtPmVuY2FwcykgewkJLyogTExDIGVuY2Fwc3VsYXRpb24gbmVlZGVkICovCkBAIC0yMDgsNyArMjEwLDggQEAKIAkJCQlnb3RvIG5vc3BhY2U7CiAJCQl9CiAJCQlrZnJlZV9za2Ioc2tiKTsKLQkJCWlmICgoc2tiID0gbikgPT0gTlVMTCkKKwkJCXNrYiA9IG47CisJCQlpZiAoc2tiID09IE5VTEwpCiAJCQkJcmV0dXJuIERST1BfUEFDS0VUOwogCQl9IGVsc2UgaWYgKCFhdG1fbWF5X3NlbmQocHZjYy0+YXRtdmNjLCBza2ItPnRydWVzaXplKSkKIAkJCWdvdG8gbm9zcGFjZTsKQEAgLTIyNiwxMSArMjI5LDExIEBACiAKIAlhdG9taWNfYWRkKHNrYi0+dHJ1ZXNpemUsICZza19hdG0oQVRNX1NLQihza2IpLT52Y2MpLT5za193bWVtX2FsbG9jKTsKIAlBVE1fU0tCKHNrYiktPmF0bV9vcHRpb25zID0gQVRNX1NLQihza2IpLT52Y2MtPmF0bV9vcHRpb25zOwotCXByX2RlYnVnKCJhdG1fc2tiKCVwKS0+dmNjKCVwKS0+ZGV2KCVwKVxuIiwgc2tiLCBBVE1fU0tCKHNrYiktPnZjYywKLQkgICAgQVRNX1NLQihza2IpLT52Y2MtPmRldik7CisJcHJfZGVidWcoImF0bV9za2IoJXApLT52Y2MoJXApLT5kZXYoJXApXG4iLAorCQkgc2tiLCBBVE1fU0tCKHNrYiktPnZjYywgQVRNX1NLQihza2IpLT52Y2MtPmRldik7CiAJcmV0dXJuIEFUTV9TS0Ioc2tiKS0+dmNjLT5zZW5kKEFUTV9TS0Ioc2tiKS0+dmNjLCBza2IpCiAJICAgID8gRFJPUF9QQUNLRVQgOiAxOwotICAgIG5vc3BhY2U6Citub3NwYWNlOgogCS8qCiAJICogV2UgZG9uJ3QgaGF2ZSBzcGFjZSB0byBzZW5kIHRoaXMgU0tCIG5vdywgYnV0IHdlIG1pZ2h0IGhhdmUKIAkgKiBhbHJlYWR5IGFwcGxpZWQgU0NfQ09NUF9QUk9UIGNvbXByZXNzaW9uLCBzbyBtYXkgbmVlZCB0byB1bmRvCkBAIC0yODksNyArMjkyLDggQEAKIAkgICAgKGJlLmVuY2FwcyA9PSBlX3ZjID8gMCA6IExMQ19MRU4pOwogCXB2Y2MtPndha2V1cF90YXNrbGV0ID0gdGFza2xldF9wcm90bzsKIAlwdmNjLT53YWtldXBfdGFza2xldC5kYXRhID0gKHVuc2lnbmVkIGxvbmcpICZwdmNjLT5jaGFuOwotCWlmICgoZXJyID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoJnB2Y2MtPmNoYW4pKSAhPSAwKSB7CisJZXJyID0gcHBwX3JlZ2lzdGVyX2NoYW5uZWwoJnB2Y2MtPmNoYW4pOworCWlmIChlcnIgIT0gMCkgewogCQlrZnJlZShwdmNjKTsKIAkJcmV0dXJuIGVycjsKIAl9CmRpZmYgLS1naXQgYS9uZXQvYXRtL3Byb2MuYyBiL25ldC9hdG0vcHJvYy5jCmluZGV4IGFiODQxOWEuLjdhOTZiMjMgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vcHJvYy5jCisrKyBiL25ldC9hdG0vcHJvYy5jCkBAIC0yNCwxNSArMjQsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+IC8qIGZvciBfX2luaXQgKi8KICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPG5ldC9hdG1jbGlwLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4gLyogZm9yIEhaICovCiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgotI2luY2x1ZGUgPGFzbS9wYXJhbS5oPiAvKiBmb3IgSFogKi8KICNpbmNsdWRlICJyZXNvdXJjZXMuaCIKICNpbmNsdWRlICJjb21tb24uaCIgLyogYXRtX3Byb2NfaW5pdCBwcm90b3R5cGUgKi8KICNpbmNsdWRlICJzaWduYWxpbmcuaCIgLyogdG8gZ2V0IHNpZ2QgLSB1Z2x5IHRvbyAqLwogCi1zdGF0aWMgc3NpemVfdCBwcm9jX2Rldl9hdG1fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSxjaGFyIF9fdXNlciAqYnVmLHNpemVfdCBjb3VudCwKLSAgICBsb2ZmX3QgKnBvcyk7CitzdGF0aWMgc3NpemVfdCBwcm9jX2Rldl9hdG1fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcyk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfYXRtX2Rldl9vcHMgPSB7CiAJLm93bmVyID0JVEhJU19NT0RVTEUsCkBAIC00Myw5ICs0Myw5IEBACiAgIGNvbnN0IHN0cnVjdCBrX2F0bV9hYWxfc3RhdHMgKnN0YXRzKQogewogCXNlcV9wcmludGYoc2VxLCAiJXMgKCAlZCAlZCAlZCAlZCAlZCApIiwgYWFsLAotCSAgICBhdG9taWNfcmVhZCgmc3RhdHMtPnR4KSxhdG9taWNfcmVhZCgmc3RhdHMtPnR4X2VyciksCi0JICAgIGF0b21pY19yZWFkKCZzdGF0cy0+cngpLGF0b21pY19yZWFkKCZzdGF0cy0+cnhfZXJyKSwKLQkgICAgYXRvbWljX3JlYWQoJnN0YXRzLT5yeF9kcm9wKSk7CisJCSAgIGF0b21pY19yZWFkKCZzdGF0cy0+dHgpLCBhdG9taWNfcmVhZCgmc3RhdHMtPnR4X2VyciksCisJCSAgIGF0b21pY19yZWFkKCZzdGF0cy0+cngpLCBhdG9taWNfcmVhZCgmc3RhdHMtPnJ4X2VyciksCisJCSAgIGF0b21pY19yZWFkKCZzdGF0cy0+cnhfZHJvcCkpOwogfQogCiBzdGF0aWMgdm9pZCBhdG1fZGV2X2luZm8oc3RydWN0IHNlcV9maWxlICpzZXEsIGNvbnN0IHN0cnVjdCBhdG1fZGV2ICpkZXYpCkBAIC0xNTEsOCArMTUxLDggQEAKIAogc3RhdGljIHZvaWQgcHZjX2luZm8oc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBhdG1fdmNjICp2Y2MpCiB7Ci0Jc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGNsYXNzX25hbWVbXSA9Ci0JCXsib2ZmIiwiVUJSIiwiQ0JSIiwiVkJSIiwiQUJSIn07CisJc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGNsYXNzX25hbWVbXSA9IHsKKwkJIm9mZiIsICJVQlIiLCAiQ0JSIiwgIlZCUiIsICJBQlIifTsKIAlzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgYWFsX25hbWVbXSA9IHsKIAkJIi0tLSIsCSIxIiwJIjIiLAkiMy80IiwJLyogIDAtIDMgKi8KIAkJIj8/PyIsCSI1IiwJIj8/PyIsCSI/Pz8iLAkvKiAgNC0gNyAqLwpAQCAtMTYwLDExICsxNjAsMTIgQEAKIAkJIj8/PyIsCSIwIiwJIj8/PyIsCSI/Pz8ifTsJLyogMTItMTUgKi8KIAogCXNlcV9wcmludGYoc2VxLCAiJTNkICUzZCAlNWQgJS0zcyAlN2QgJS01cyAlN2QgJS02cyIsCi0JICAgIHZjYy0+ZGV2LT5udW1iZXIsdmNjLT52cGksdmNjLT52Y2ksCi0JICAgIHZjYy0+cW9zLmFhbCA+PSBBUlJBWV9TSVpFKGFhbF9uYW1lKSA/ICJlcnIiIDoKLQkgICAgYWFsX25hbWVbdmNjLT5xb3MuYWFsXSx2Y2MtPnFvcy5yeHRwLm1pbl9wY3IsCi0JICAgIGNsYXNzX25hbWVbdmNjLT5xb3Mucnh0cC50cmFmZmljX2NsYXNzXSx2Y2MtPnFvcy50eHRwLm1pbl9wY3IsCi0JICAgIGNsYXNzX25hbWVbdmNjLT5xb3MudHh0cC50cmFmZmljX2NsYXNzXSk7CisJCSAgIHZjYy0+ZGV2LT5udW1iZXIsIHZjYy0+dnBpLCB2Y2MtPnZjaSwKKwkJICAgdmNjLT5xb3MuYWFsID49IEFSUkFZX1NJWkUoYWFsX25hbWUpID8gImVyciIgOgorCQkgICBhYWxfbmFtZVt2Y2MtPnFvcy5hYWxdLCB2Y2MtPnFvcy5yeHRwLm1pbl9wY3IsCisJCSAgIGNsYXNzX25hbWVbdmNjLT5xb3Mucnh0cC50cmFmZmljX2NsYXNzXSwKKwkJICAgdmNjLT5xb3MudHh0cC5taW5fcGNyLAorCQkgICBjbGFzc19uYW1lW3ZjYy0+cW9zLnR4dHAudHJhZmZpY19jbGFzc10pOwogCWlmICh0ZXN0X2JpdChBVE1fVkZfSVNfQ0xJUCwgJnZjYy0+ZmxhZ3MpKSB7CiAJCXN0cnVjdCBjbGlwX3ZjYyAqY2xpcF92Y2MgPSBDTElQX1ZDQyh2Y2MpOwogCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtMTk1LDE5ICsxOTYsMjAgQEAKIAkJc2VxX3ByaW50ZihzZXEsICIlM2QgJTNkICU1ZCAiLCB2Y2MtPmRldi0+bnVtYmVyLCB2Y2MtPnZwaSwKIAkJCXZjYy0+dmNpKTsKIAlzd2l0Y2ggKHNrLT5za19mYW1pbHkpIHsKLQkJY2FzZSBBRl9BVE1QVkM6Ci0JCQlzZXFfcHJpbnRmKHNlcSwgIlBWQyIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQUZfQVRNU1ZDOgotCQkJc2VxX3ByaW50ZihzZXEsICJTVkMiKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJc2VxX3ByaW50ZihzZXEsICIlM2QiLCBzay0+c2tfZmFtaWx5KTsKKwljYXNlIEFGX0FUTVBWQzoKKwkJc2VxX3ByaW50ZihzZXEsICJQVkMiKTsKKwkJYnJlYWs7CisJY2FzZSBBRl9BVE1TVkM6CisJCXNlcV9wcmludGYoc2VxLCAiU1ZDIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNlcV9wcmludGYoc2VxLCAiJTNkIiwgc2stPnNrX2ZhbWlseSk7CiAJfQotCXNlcV9wcmludGYoc2VxLCAiICUwNGx4ICAlNWQgJTdkLyU3ZCAlN2QvJTdkIFslZF1cbiIsIHZjYy0+ZmxhZ3MsIHNrLT5za19lcnIsCi0JCSAgc2tfd21lbV9hbGxvY19nZXQoc2spLCBzay0+c2tfc25kYnVmLAotCQkgIHNrX3JtZW1fYWxsb2NfZ2V0KHNrKSwgc2stPnNrX3JjdmJ1ZiwKLQkJICBhdG9taWNfcmVhZCgmc2stPnNrX3JlZmNudCkpOworCXNlcV9wcmludGYoc2VxLCAiICUwNGx4ICAlNWQgJTdkLyU3ZCAlN2QvJTdkIFslZF1cbiIsCisJCSAgIHZjYy0+ZmxhZ3MsIHNrLT5za19lcnIsCisJCSAgIHNrX3dtZW1fYWxsb2NfZ2V0KHNrKSwgc2stPnNrX3NuZGJ1ZiwKKwkJICAgc2tfcm1lbV9hbGxvY19nZXQoc2spLCBzay0+c2tfcmN2YnVmLAorCQkgICBhdG9taWNfcmVhZCgmc2stPnNrX3JlZmNudCkpOwogfQogCiBzdGF0aWMgdm9pZCBzdmNfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGF0bV92Y2MgKnZjYykKQEAgLTIzNiw3ICsyMzgsNyBAQAogCQkiSXRmIFR5cGUgICAgRVNJL1wiTUFDXCJhZGRyICIKIAkJIkFBTChUWCxlcnIsUlgsZXJyLGRyb3ApIC4uLiAgICAgICAgICAgICAgIFtyZWZjbnRdXG4iOwogCi0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQorCWlmICh2ID09ICZhdG1fZGV2cykKIAkJc2VxX3B1dHMoc2VxLCBhdG1fZGV2X2Jhbm5lcik7CiAJZWxzZSB7CiAJCXN0cnVjdCBhdG1fZGV2ICpkZXYgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCBhdG1fZGV2LCBkZXZfbGlzdCk7CkBAIC0zNzYsMzIgKzM3OCwzNSBAQAogCXVuc2lnbmVkIGxvbmcgcGFnZTsKIAlpbnQgbGVuZ3RoOwogCi0JaWYgKGNvdW50ID09IDApIHJldHVybiAwOworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKIAlwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOwotCWlmICghcGFnZSkgcmV0dXJuIC1FTk9NRU07CisJaWYgKCFwYWdlKQorCQlyZXR1cm4gLUVOT01FTTsKIAlkZXYgPSBQREUoZmlsZS0+Zl9wYXRoLmRlbnRyeS0+ZF9pbm9kZSktPmRhdGE7CiAJaWYgKCFkZXYtPm9wcy0+cHJvY19yZWFkKQogCQlsZW5ndGggPSAtRUlOVkFMOwogCWVsc2UgewotCQlsZW5ndGggPSBkZXYtPm9wcy0+cHJvY19yZWFkKGRldixwb3MsKGNoYXIgKikgcGFnZSk7Ci0JCWlmIChsZW5ndGggPiBjb3VudCkgbGVuZ3RoID0gLUVJTlZBTDsKKwkJbGVuZ3RoID0gZGV2LT5vcHMtPnByb2NfcmVhZChkZXYsIHBvcywgKGNoYXIgKilwYWdlKTsKKwkJaWYgKGxlbmd0aCA+IGNvdW50KQorCQkJbGVuZ3RoID0gLUVJTlZBTDsKIAl9CiAJaWYgKGxlbmd0aCA+PSAwKSB7Ci0JCWlmIChjb3B5X3RvX3VzZXIoYnVmLChjaGFyICopIHBhZ2UsbGVuZ3RoKSkgbGVuZ3RoID0gLUVGQVVMVDsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWYsIChjaGFyICopcGFnZSwgbGVuZ3RoKSkKKwkJCWxlbmd0aCA9IC1FRkFVTFQ7CiAJCSgqcG9zKSsrOwogCX0KIAlmcmVlX3BhZ2UocGFnZSk7CiAJcmV0dXJuIGxlbmd0aDsKIH0KIAotCiBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmF0bV9wcm9jX3Jvb3Q7CiBFWFBPUlRfU1lNQk9MKGF0bV9wcm9jX3Jvb3QpOwogCiAKIGludCBhdG1fcHJvY19kZXZfcmVnaXN0ZXIoc3RydWN0IGF0bV9kZXYgKmRldikKIHsKLQlpbnQgZGlnaXRzLG51bTsKKwlpbnQgZGlnaXRzLCBudW07CiAJaW50IGVycm9yOwogCiAJLyogTm8gcHJvYyBpbmZvICovCkBAIC00MTAsMjYgKzQxNSwyOCBAQAogCiAJZXJyb3IgPSAtRU5PTUVNOwogCWRpZ2l0cyA9IDA7Ci0JZm9yIChudW0gPSBkZXYtPm51bWJlcjsgbnVtOyBudW0gLz0gMTApIGRpZ2l0cysrOwotCWlmICghZGlnaXRzKSBkaWdpdHMrKzsKKwlmb3IgKG51bSA9IGRldi0+bnVtYmVyOyBudW07IG51bSAvPSAxMCkKKwkJZGlnaXRzKys7CisJaWYgKCFkaWdpdHMpCisJCWRpZ2l0cysrOwogCiAJZGV2LT5wcm9jX25hbWUgPSBrbWFsbG9jKHN0cmxlbihkZXYtPnR5cGUpICsgZGlnaXRzICsgMiwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFkZXYtPnByb2NfbmFtZSkKIAkJZ290byBlcnJfb3V0OwotCXNwcmludGYoZGV2LT5wcm9jX25hbWUsIiVzOiVkIixkZXYtPnR5cGUsIGRldi0+bnVtYmVyKTsKKwlzcHJpbnRmKGRldi0+cHJvY19uYW1lLCAiJXM6JWQiLCBkZXYtPnR5cGUsIGRldi0+bnVtYmVyKTsKIAogCWRldi0+cHJvY19lbnRyeSA9IHByb2NfY3JlYXRlX2RhdGEoZGV2LT5wcm9jX25hbWUsIDAsIGF0bV9wcm9jX3Jvb3QsCiAJCQkJCSAgICZwcm9jX2F0bV9kZXZfb3BzLCBkZXYpOwogCWlmICghZGV2LT5wcm9jX2VudHJ5KQogCQlnb3RvIGVycl9mcmVlX25hbWU7CiAJcmV0dXJuIDA7CisKIGVycl9mcmVlX25hbWU6CiAJa2ZyZWUoZGV2LT5wcm9jX25hbWUpOwogZXJyX291dDoKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLQogdm9pZCBhdG1fcHJvY19kZXZfZGVyZWdpc3RlcihzdHJ1Y3QgYXRtX2RldiAqZGV2KQogewogCWlmICghZGV2LT5vcHMtPnByb2NfcmVhZCkKZGlmZiAtLWdpdCBhL25ldC9hdG0vcHZjLmMgYi9uZXQvYXRtL3B2Yy5jCmluZGV4IDhkNzRlNjIuLjQzN2VlNzAgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vcHZjLmMKKysrIGIvbmV0L2F0bS9wdmMuYwpAQCAtMTcsMzIgKzE3LDM1IEBACiAjaW5jbHVkZSAiY29tbW9uLmgiCQkvKiBjb21tb24gZm9yIFBWQ3MgYW5kIFNWQ3MgKi8KIAogCi1zdGF0aWMgaW50IHB2Y19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLGludCBob3cpCitzdGF0aWMgaW50IHB2Y19zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgaG93KQogewogCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyBpbnQgcHZjX2JpbmQoc3RydWN0IHNvY2tldCAqc29jayxzdHJ1Y3Qgc29ja2FkZHIgKnNvY2thZGRyLAotICAgIGludCBzb2NrYWRkcl9sZW4pCitzdGF0aWMgaW50IHB2Y19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc29ja2FkZHIsCisJCSAgICBpbnQgc29ja2FkZHJfbGVuKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKmFkZHI7CiAJc3RydWN0IGF0bV92Y2MgKnZjYzsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoc29ja2FkZHJfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKSkgcmV0dXJuIC1FSU5WQUw7Ci0JYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjICopIHNvY2thZGRyOwotCWlmIChhZGRyLT5zYXBfZmFtaWx5ICE9IEFGX0FUTVBWQykgcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CisJaWYgKHNvY2thZGRyX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpCisJCXJldHVybiAtRUlOVkFMOworCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqKXNvY2thZGRyOworCWlmIChhZGRyLT5zYXBfZmFtaWx5ICE9IEFGX0FUTVBWQykKKwkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7CiAJbG9ja19zb2NrKHNrKTsKIAl2Y2MgPSBBVE1fU0Qoc29jayk7CiAJaWYgKCF0ZXN0X2JpdChBVE1fVkZfSEFTUU9TLCAmdmNjLT5mbGFncykpIHsKIAkJZXJyb3IgPSAtRUJBREZEOwogCQlnb3RvIG91dDsKIAl9Ci0JaWYgKHRlc3RfYml0KEFUTV9WRl9QQVJUSUFMLCZ2Y2MtPmZsYWdzKSkgewotCQlpZiAodmNjLT52cGkgIT0gQVRNX1ZQSV9VTlNQRUMpIGFkZHItPnNhcF9hZGRyLnZwaSA9IHZjYy0+dnBpOwotCQlpZiAodmNjLT52Y2kgIT0gQVRNX1ZDSV9VTlNQRUMpIGFkZHItPnNhcF9hZGRyLnZjaSA9IHZjYy0+dmNpOworCWlmICh0ZXN0X2JpdChBVE1fVkZfUEFSVElBTCwgJnZjYy0+ZmxhZ3MpKSB7CisJCWlmICh2Y2MtPnZwaSAhPSBBVE1fVlBJX1VOU1BFQykKKwkJCWFkZHItPnNhcF9hZGRyLnZwaSA9IHZjYy0+dnBpOworCQlpZiAodmNjLT52Y2kgIT0gQVRNX1ZDSV9VTlNQRUMpCisJCQlhZGRyLT5zYXBfYWRkci52Y2kgPSB2Y2MtPnZjaTsKIAl9CiAJZXJyb3IgPSB2Y2NfY29ubmVjdChzb2NrLCBhZGRyLT5zYXBfYWRkci5pdGYsIGFkZHItPnNhcF9hZGRyLnZwaSwKIAkJCSAgICBhZGRyLT5zYXBfYWRkci52Y2kpOwpAQCAtNTEsMTEgKzU0LDEwIEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0KLXN0YXRpYyBpbnQgcHZjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jayxzdHJ1Y3Qgc29ja2FkZHIgKnNvY2thZGRyLAotICAgIGludCBzb2NrYWRkcl9sZW4saW50IGZsYWdzKQorc3RhdGljIGludCBwdmNfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNvY2thZGRyLAorCQkgICAgICAgaW50IHNvY2thZGRyX2xlbiwgaW50IGZsYWdzKQogewotCXJldHVybiBwdmNfYmluZChzb2NrLHNvY2thZGRyLHNvY2thZGRyX2xlbik7CisJcmV0dXJuIHB2Y19iaW5kKHNvY2ssIHNvY2thZGRyLCBzb2NrYWRkcl9sZW4pOwogfQogCiBzdGF0aWMgaW50IHB2Y19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCkBAIC03MCw3ICs3Miw2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0KIHN0YXRpYyBpbnQgcHZjX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKIAkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewpAQCAtODMsMTYgKzg0LDE2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0KLXN0YXRpYyBpbnQgcHZjX2dldG5hbWUoc3RydWN0IHNvY2tldCAqc29jayxzdHJ1Y3Qgc29ja2FkZHIgKnNvY2thZGRyLAotICAgIGludCAqc29ja2FkZHJfbGVuLGludCBwZWVyKQorc3RhdGljIGludCBwdmNfZ2V0bmFtZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNvY2thZGRyLAorCQkgICAgICAgaW50ICpzb2NrYWRkcl9sZW4sIGludCBwZWVyKQogewogCXN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKmFkZHI7CiAJc3RydWN0IGF0bV92Y2MgKnZjYyA9IEFUTV9TRChzb2NrKTsKIAotCWlmICghdmNjLT5kZXYgfHwgIXRlc3RfYml0KEFUTV9WRl9BRERSLCZ2Y2MtPmZsYWdzKSkgcmV0dXJuIC1FTk9UQ09OTjsKKwlpZiAoIXZjYy0+ZGV2IHx8ICF0ZXN0X2JpdChBVE1fVkZfQUREUiwgJnZjYy0+ZmxhZ3MpKQorCQlyZXR1cm4gLUVOT1RDT05OOwogCSpzb2NrYWRkcl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2Yyk7Ci0JYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjICopIHNvY2thZGRyOworCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqKXNvY2thZGRyOwogCWFkZHItPnNhcF9mYW1pbHkgPSBBRl9BVE1QVkM7CiAJYWRkci0+c2FwX2FkZHIuaXRmID0gdmNjLT5kZXYtPm51bWJlcjsKIAlhZGRyLT5zYXBfYWRkci52cGkgPSB2Y2MtPnZwaTsKQEAgLTEwMCw3ICsxMDEsNiBAQAogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHJvdG9fb3BzIHB2Y19wcm90b19vcHMgPSB7CiAJLmZhbWlseSA9CVBGX0FUTVBWQywKIAkub3duZXIgPQlUSElTX01PRFVMRSwKQEAgLTEzNyw3ICsxMzcsNiBAQAogCXJldHVybiB2Y2NfY3JlYXRlKG5ldCwgc29jaywgcHJvdG9jb2wsIFBGX0FUTVBWQyk7CiB9CiAKLQogc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5IHB2Y19mYW1pbHlfb3BzID0gewogCS5mYW1pbHkgPSBQRl9BVE1QVkMsCiAJLmNyZWF0ZSA9IHB2Y19jcmVhdGUsCmRpZmYgLS1naXQgYS9uZXQvYXRtL3Jhdy5jIGIvbmV0L2F0bS9yYXcuYwppbmRleCBjYmZjYzcxLi5kMGM0YmQwIDEwMDY0NAotLS0gYS9uZXQvYXRtL3Jhdy5jCisrKyBiL25ldC9hdG0vcmF3LmMKQEAgLTIsNiArMiw3IEBACiAKIC8qIFdyaXR0ZW4gMTk5NS0yMDAwIGJ5IFdlcm5lciBBbG1lc2JlcmdlciwgRVBGTCBMUkMvSUNBICovCiAKKyNkZWZpbmUgcHJfZm10KGZtdCkgS0JVSUxEX01PRE5BTUUgIjolczogIiBmbXQsIF9fZnVuY19fCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9hdG1kZXYuaD4KQEAgLTE3LDcgKzE4LDcgQEAKICAqIFNLQiA9PSBOVUxMIGluZGljYXRlcyB0aGF0IHRoZSBsaW5rIGlzIGJlaW5nIGNsb3NlZAogICovCiAKLXN0YXRpYyB2b2lkIGF0bV9wdXNoX3JhdyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjLHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdm9pZCBhdG1fcHVzaF9yYXcoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpZiAoc2tiKSB7CiAJCXN0cnVjdCBzb2NrICpzayA9IHNrX2F0bSh2Y2MpOwpAQCAtMjcsMzYgKzI4LDMzIEBACiAJfQogfQogCi0KLXN0YXRpYyB2b2lkIGF0bV9wb3BfcmF3KHN0cnVjdCBhdG1fdmNjICp2Y2Msc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIGF0bV9wb3BfcmF3KHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc2tfYXRtKHZjYyk7CiAKLQlwcl9kZWJ1ZygiQVBvcFIgKCVkKSAlZCAtPSAlZFxuIiwgdmNjLT52Y2ksCi0JCXNrX3dtZW1fYWxsb2NfZ2V0KHNrKSwgc2tiLT50cnVlc2l6ZSk7CisJcHJfZGVidWcoIiglZCkgJWQgLT0gJWRcbiIsCisJCSB2Y2MtPnZjaSwgc2tfd21lbV9hbGxvY19nZXQoc2spLCBza2ItPnRydWVzaXplKTsKIAlhdG9taWNfc3ViKHNrYi0+dHJ1ZXNpemUsICZzay0+c2tfd21lbV9hbGxvYyk7CiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAlzay0+c2tfd3JpdGVfc3BhY2Uoc2spOwogfQogCi0KLXN0YXRpYyBpbnQgYXRtX3NlbmRfYWFsMChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgaW50IGF0bV9zZW5kX2FhbDAoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAkvKgogCSAqIE5vdGUgdGhhdCBpZiB2cGkvdmNpIGFyZSBfQU5ZIG9yIF9VTlNQRUMgdGhlIGJlbG93IHdpbGwKIAkgKiBzdGlsbCB3b3JrCiAJICovCiAJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pICYmCi0JICAgICgoKHUzMiAqKSBza2ItPmRhdGEpWzBdICYgKEFUTV9IRFJfVlBJX01BU0sgfCBBVE1fSERSX1ZDSV9NQVNLKSkgIT0KLQkgICAgKCh2Y2MtPnZwaSA8PCBBVE1fSERSX1ZQSV9TSElGVCkgfCAodmNjLT52Y2kgPDwgQVRNX0hEUl9WQ0lfU0hJRlQpKSkKLQkgICAgeworCSAgICAoKCh1MzIgKilza2ItPmRhdGEpWzBdICYgKEFUTV9IRFJfVlBJX01BU0sgfCBBVE1fSERSX1ZDSV9NQVNLKSkgIT0KKwkgICAgKCh2Y2MtPnZwaSA8PCBBVE1fSERSX1ZQSV9TSElGVCkgfAorCSAgICAgKHZjYy0+dmNpIDw8IEFUTV9IRFJfVkNJX1NISUZUKSkpIHsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXJldHVybiAtRUFERFJOT1RBVkFJTDsKIAl9Ci0JcmV0dXJuIHZjYy0+ZGV2LT5vcHMtPnNlbmQodmNjLHNrYik7CisJcmV0dXJuIHZjYy0+ZGV2LT5vcHMtPnNlbmQodmNjLCBza2IpOwogfQogCi0KIGludCBhdG1faW5pdF9hYWwwKHN0cnVjdCBhdG1fdmNjICp2Y2MpCiB7CiAJdmNjLT5wdXNoID0gYXRtX3B1c2hfcmF3OwpAQCAtNjYsNyArNjQsNiBAQAogCXJldHVybiAwOwogfQogCi0KIGludCBhdG1faW5pdF9hYWwzNChzdHJ1Y3QgYXRtX3ZjYyAqdmNjKQogewogCXZjYy0+cHVzaCA9IGF0bV9wdXNoX3JhdzsKQEAgLTc2LDcgKzczLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiBpbnQgYXRtX2luaXRfYWFsNShzdHJ1Y3QgYXRtX3ZjYyAqdmNjKQogewogCXZjYy0+cHVzaCA9IGF0bV9wdXNoX3JhdzsKQEAgLTg1LDYgKzgxLDQgQEAKIAl2Y2MtPnNlbmQgPSB2Y2MtPmRldi0+b3BzLT5zZW5kOwogCXJldHVybiAwOwogfQotCi0KIEVYUE9SVF9TWU1CT0woYXRtX2luaXRfYWFsNSk7CmRpZmYgLS1naXQgYS9uZXQvYXRtL3Jlc291cmNlcy5jIGIvbmV0L2F0bS9yZXNvdXJjZXMuYwppbmRleCA1NmI3MzIyLi45MDA4MjkwIDEwMDY0NAotLS0gYS9uZXQvYXRtL3Jlc291cmNlcy5jCisrKyBiL25ldC9hdG0vcmVzb3VyY2VzLmMKQEAgLTcsNiArNyw3IEBACiAgKiAyMDAyLzAxIC0gZG9uJ3QgZnJlZSB0aGUgd2hvbGUgc3RydWN0IHNvY2sgb24gc2stPmRlc3RydWN0IHRpbWUsCiAgKiAJICAgICB1c2UgdGhlIGRlZmF1bHQgZGVzdHJ1Y3QgZnVuY3Rpb24gaW5pdGlhbGl6ZWQgYnkgc29ja19pbml0X2RhdGEgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiVzOiAiIGZtdCwgX19mdW5jX18KIAogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CkBAIC03MCw3ICs3MSw3IEBACiAJbXV0ZXhfdW5sb2NrKCZhdG1fZGV2X211dGV4KTsKIAlyZXR1cm4gZGV2OwogfQotCitFWFBPUlRfU1lNQk9MKGF0bV9kZXZfbG9va3VwKTsKIAogc3RydWN0IGF0bV9kZXYgKmF0bV9kZXZfcmVnaXN0ZXIoY29uc3QgY2hhciAqdHlwZSwgY29uc3Qgc3RydWN0IGF0bWRldl9vcHMgKm9wcywKIAkJCQkgaW50IG51bWJlciwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCkBAIC03OSwxMyArODAsMTMgQEAKIAogCWRldiA9IF9fYWxsb2NfYXRtX2Rldih0eXBlKTsKIAlpZiAoIWRldikgewotCQlwcmludGsoS0VSTl9FUlIgImF0bV9kZXZfcmVnaXN0ZXI6IG5vIHNwYWNlIGZvciBkZXYgJXNcbiIsCi0JCSAgICB0eXBlKTsKKwkJcHJfZXJyKCJubyBzcGFjZSBmb3IgZGV2ICVzXG4iLCB0eXBlKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCW11dGV4X2xvY2soJmF0bV9kZXZfbXV0ZXgpOwogCWlmIChudW1iZXIgIT0gLTEpIHsKLQkJaWYgKChpbnVzZSA9IF9fYXRtX2Rldl9sb29rdXAobnVtYmVyKSkpIHsKKwkJaW51c2UgPSBfX2F0bV9kZXZfbG9va3VwKG51bWJlcik7CisJCWlmIChpbnVzZSkgewogCQkJYXRtX2Rldl9wdXQoaW51c2UpOwogCQkJbXV0ZXhfdW5sb2NrKCZhdG1fZGV2X211dGV4KTsKIAkJCWtmcmVlKGRldik7CkBAIC0xMDksMTYgKzExMCwxMiBAQAogCWF0b21pY19zZXQoJmRldi0+cmVmY250LCAxKTsKIAogCWlmIChhdG1fcHJvY19kZXZfcmVnaXN0ZXIoZGV2KSA8IDApIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJhdG1fZGV2X3JlZ2lzdGVyOiAiCi0JCSAgICAgICAiYXRtX3Byb2NfZGV2X3JlZ2lzdGVyIGZhaWxlZCBmb3IgZGV2ICVzXG4iLAotCQkgICAgICAgdHlwZSk7CisJCXByX2VycigiYXRtX3Byb2NfZGV2X3JlZ2lzdGVyIGZhaWxlZCBmb3IgZGV2ICVzXG4iLCB0eXBlKTsKIAkJZ290byBvdXRfZmFpbDsKIAl9CiAKIAlpZiAoYXRtX3JlZ2lzdGVyX3N5c2ZzKGRldikgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYXRtX2Rldl9yZWdpc3RlcjogIgotCQkgICAgICAgImF0bV9yZWdpc3Rlcl9zeXNmcyBmYWlsZWQgZm9yIGRldiAlc1xuIiwKLQkJICAgICAgIHR5cGUpOworCQlwcl9lcnIoImF0bV9yZWdpc3Rlcl9zeXNmcyBmYWlsZWQgZm9yIGRldiAlc1xuIiwgdHlwZSk7CiAJCWF0bV9wcm9jX2Rldl9kZXJlZ2lzdGVyKGRldik7CiAJCWdvdG8gb3V0X2ZhaWw7CiAJfQpAQCAtMTM0LDcgKzEzMSw3IEBACiAJZGV2ID0gTlVMTDsKIAlnb3RvIG91dDsKIH0KLQorRVhQT1JUX1NZTUJPTChhdG1fZGV2X3JlZ2lzdGVyKTsKIAogdm9pZCBhdG1fZGV2X2RlcmVnaXN0ZXIoc3RydWN0IGF0bV9kZXYgKmRldikKIHsKQEAgLTE1Niw3ICsxNTMsNyBAQAogCiAJYXRtX2Rldl9wdXQoZGV2KTsKIH0KLQorRVhQT1JUX1NZTUJPTChhdG1fZGV2X2RlcmVnaXN0ZXIpOwogCiBzdGF0aWMgdm9pZCBjb3B5X2FhbF9zdGF0cyhzdHJ1Y3Qga19hdG1fYWFsX3N0YXRzICpmcm9tLAogICAgIHN0cnVjdCBhdG1fYWFsX3N0YXRzICp0bykKQEAgLTE2Niw3ICsxNjMsNiBAQAogI3VuZGVmIF9fSEFORExFX0lURU0KIH0KIAotCiBzdGF0aWMgdm9pZCBzdWJ0cmFjdF9hYWxfc3RhdHMoc3RydWN0IGtfYXRtX2FhbF9zdGF0cyAqZnJvbSwKICAgICBzdHJ1Y3QgYXRtX2FhbF9zdGF0cyAqdG8pCiB7CkBAIC0xNzUsOCArMTcxLDggQEAKICN1bmRlZiBfX0hBTkRMRV9JVEVNCiB9CiAKLQotc3RhdGljIGludCBmZXRjaF9zdGF0cyhzdHJ1Y3QgYXRtX2RldiAqZGV2LCBzdHJ1Y3QgYXRtX2Rldl9zdGF0cyBfX3VzZXIgKmFyZywgaW50IHplcm8pCitzdGF0aWMgaW50IGZldGNoX3N0YXRzKHN0cnVjdCBhdG1fZGV2ICpkZXYsIHN0cnVjdCBhdG1fZGV2X3N0YXRzIF9fdXNlciAqYXJnLAorCQkgICAgICAgaW50IHplcm8pCiB7CiAJc3RydWN0IGF0bV9kZXZfc3RhdHMgdG1wOwogCWludCBlcnJvciA9IDA7CkBAIC0xOTQsNyArMTkwLDYgQEAKIAlyZXR1cm4gZXJyb3IgPyAtRUZBVUxUIDogMDsKIH0KIAotCiBpbnQgYXRtX2Rldl9pb2N0bCh1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqYXJnLCBpbnQgY29tcGF0KQogewogCXZvaWQgX191c2VyICpidWY7CkBAIC0yMTAsNTAgKzIwNSw0OSBAQAogI2VuZGlmCiAKIAlzd2l0Y2ggKGNtZCkgewotCQljYXNlIEFUTV9HRVROQU1FUzoKLQotCQkJaWYgKGNvbXBhdCkgeworCWNhc2UgQVRNX0dFVE5BTUVTOgorCQlpZiAoY29tcGF0KSB7CiAjaWZkZWYgQ09ORklHX0NPTVBBVAotCQkJCXN0cnVjdCBjb21wYXRfYXRtX2lvYnVmIF9fdXNlciAqY2lvYnVmID0gYXJnOwotCQkJCWNvbXBhdF91cHRyX3QgY2J1ZjsKLQkJCQlpb2J1Zl9sZW4gPSAmY2lvYnVmLT5sZW5ndGg7Ci0JCQkJaWYgKGdldF91c2VyKGNidWYsICZjaW9idWYtPmJ1ZmZlcikpCi0JCQkJCXJldHVybiAtRUZBVUxUOwotCQkJCWJ1ZiA9IGNvbXBhdF9wdHIoY2J1Zik7Ci0jZW5kaWYKLQkJCX0gZWxzZSB7Ci0JCQkJc3RydWN0IGF0bV9pb2J1ZiBfX3VzZXIgKmlvYnVmID0gYXJnOwotCQkJCWlvYnVmX2xlbiA9ICZpb2J1Zi0+bGVuZ3RoOwotCQkJCWlmIChnZXRfdXNlcihidWYsICZpb2J1Zi0+YnVmZmVyKSkKLQkJCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQl9Ci0JCQlpZiAoZ2V0X3VzZXIobGVuLCBpb2J1Zl9sZW4pKQorCQkJc3RydWN0IGNvbXBhdF9hdG1faW9idWYgX191c2VyICpjaW9idWYgPSBhcmc7CisJCQljb21wYXRfdXB0cl90IGNidWY7CisJCQlpb2J1Zl9sZW4gPSAmY2lvYnVmLT5sZW5ndGg7CisJCQlpZiAoZ2V0X3VzZXIoY2J1ZiwgJmNpb2J1Zi0+YnVmZmVyKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCW11dGV4X2xvY2soJmF0bV9kZXZfbXV0ZXgpOwotCQkJbGlzdF9mb3JfZWFjaChwLCAmYXRtX2RldnMpCi0JCQkJc2l6ZSArPSBzaXplb2YoaW50KTsKLQkJCWlmIChzaXplID4gbGVuKSB7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZhdG1fZGV2X211dGV4KTsKLQkJCQlyZXR1cm4gLUUyQklHOwotCQkJfQotCQkJdG1wX2J1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7Ci0JCQlpZiAoIXRtcF9idWYpIHsKLQkJCQltdXRleF91bmxvY2soJmF0bV9kZXZfbXV0ZXgpOwotCQkJCXJldHVybiAtRU5PTUVNOwotCQkJfQotCQkJdG1wX3AgPSB0bXBfYnVmOwotCQkJbGlzdF9mb3JfZWFjaChwLCAmYXRtX2RldnMpIHsKLQkJCQlkZXYgPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCBhdG1fZGV2LCBkZXZfbGlzdCk7Ci0JCQkJKnRtcF9wKysgPSBkZXYtPm51bWJlcjsKLQkJCX0KKwkJCWJ1ZiA9IGNvbXBhdF9wdHIoY2J1Zik7CisjZW5kaWYKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBhdG1faW9idWYgX191c2VyICppb2J1ZiA9IGFyZzsKKwkJCWlvYnVmX2xlbiA9ICZpb2J1Zi0+bGVuZ3RoOworCQkJaWYgKGdldF91c2VyKGJ1ZiwgJmlvYnVmLT5idWZmZXIpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCWlmIChnZXRfdXNlcihsZW4sIGlvYnVmX2xlbikpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJbXV0ZXhfbG9jaygmYXRtX2Rldl9tdXRleCk7CisJCWxpc3RfZm9yX2VhY2gocCwgJmF0bV9kZXZzKQorCQkJc2l6ZSArPSBzaXplb2YoaW50KTsKKwkJaWYgKHNpemUgPiBsZW4pIHsKIAkJCW11dGV4X3VubG9jaygmYXRtX2Rldl9tdXRleCk7Ci0JCQllcnJvciA9ICgoY29weV90b191c2VyKGJ1ZiwgdG1wX2J1Ziwgc2l6ZSkpIHx8Ci0JCQkJCXB1dF91c2VyKHNpemUsIGlvYnVmX2xlbikpCi0JCQkJCQk/IC1FRkFVTFQgOiAwOwotCQkJa2ZyZWUodG1wX2J1Zik7Ci0JCQlyZXR1cm4gZXJyb3I7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKKwkJCXJldHVybiAtRTJCSUc7CisJCX0KKwkJdG1wX2J1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0FUT01JQyk7CisJCWlmICghdG1wX2J1ZikgeworCQkJbXV0ZXhfdW5sb2NrKCZhdG1fZGV2X211dGV4KTsKKwkJCXJldHVybiAtRU5PTUVNOworCQl9CisJCXRtcF9wID0gdG1wX2J1ZjsKKwkJbGlzdF9mb3JfZWFjaChwLCAmYXRtX2RldnMpIHsKKwkJCWRldiA9IGxpc3RfZW50cnkocCwgc3RydWN0IGF0bV9kZXYsIGRldl9saXN0KTsKKwkJCSp0bXBfcCsrID0gZGV2LT5udW1iZXI7CisJCX0KKwkJbXV0ZXhfdW5sb2NrKCZhdG1fZGV2X211dGV4KTsKKwkJZXJyb3IgPSAoKGNvcHlfdG9fdXNlcihidWYsIHRtcF9idWYsIHNpemUpKSB8fAorCQkJIHB1dF91c2VyKHNpemUsIGlvYnVmX2xlbikpCisJCQk/IC1FRkFVTFQgOiAwOworCQlrZnJlZSh0bXBfYnVmKTsKKwkJcmV0dXJuIGVycm9yOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAogCWlmIChjb21wYXQpIHsKQEAgLTI4MiwxNjYgKzI3NiwxNjcgQEAKIAkJaWYgKGdldF91c2VyKG51bWJlciwgJnNpb2MtPm51bWJlcikpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAl9Ci0JaWYgKCEoZGV2ID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoYXRtX2Rldl9sb29rdXAobnVtYmVyKSwKLQkJCQkJICAgICJhdG0tZGV2aWNlLSVkIiwgbnVtYmVyKSkpCisKKwlkZXYgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZShhdG1fZGV2X2xvb2t1cChudW1iZXIpLCAiYXRtLWRldmljZS0lZCIsCisJCQkJICAgICAgbnVtYmVyKTsKKwlpZiAoIWRldikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlzd2l0Y2ggKGNtZCkgewotCQljYXNlIEFUTV9HRVRUWVBFOgotCQkJc2l6ZSA9IHN0cmxlbihkZXYtPnR5cGUpICsgMTsKLQkJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBkZXYtPnR5cGUsIHNpemUpKSB7Ci0JCQkJZXJyb3IgPSAtRUZBVUxUOwotCQkJCWdvdG8gZG9uZTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIEFUTV9HRVRFU0k6Ci0JCQlzaXplID0gRVNJX0xFTjsKLQkJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBkZXYtPmVzaSwgc2l6ZSkpIHsKLQkJCQllcnJvciA9IC1FRkFVTFQ7Ci0JCQkJZ290byBkb25lOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgQVRNX1NFVEVTSToKLQkJCXsKLQkJCQlpbnQgaTsKLQotCQkJCWZvciAoaSA9IDA7IGkgPCBFU0lfTEVOOyBpKyspCi0JCQkJCWlmIChkZXYtPmVzaVtpXSkgewotCQkJCQkJZXJyb3IgPSAtRUVYSVNUOwotCQkJCQkJZ290byBkb25lOwotCQkJCQl9Ci0JCQl9Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBBVE1fU0VURVNJRjoKLQkJCXsKLQkJCQl1bnNpZ25lZCBjaGFyIGVzaVtFU0lfTEVOXTsKLQotCQkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgewotCQkJCQllcnJvciA9IC1FUEVSTTsKLQkJCQkJZ290byBkb25lOwotCQkJCX0KLQkJCQlpZiAoY29weV9mcm9tX3VzZXIoZXNpLCBidWYsIEVTSV9MRU4pKSB7Ci0JCQkJCWVycm9yID0gLUVGQVVMVDsKLQkJCQkJZ290byBkb25lOwotCQkJCX0KLQkJCQltZW1jcHkoZGV2LT5lc2ksIGVzaSwgRVNJX0xFTik7Ci0JCQkJZXJyb3IgPSAgRVNJX0xFTjsKLQkJCQlnb3RvIGRvbmU7Ci0JCQl9Ci0JCWNhc2UgQVRNX0dFVFNUQVRaOgotCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7Ci0JCQkJZXJyb3IgPSAtRVBFUk07Ci0JCQkJZ290byBkb25lOwotCQkJfQotCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgQVRNX0dFVFNUQVQ6Ci0JCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBhdG1fZGV2X3N0YXRzKTsKLQkJCWVycm9yID0gZmV0Y2hfc3RhdHMoZGV2LCBidWYsIGNtZCA9PSBBVE1fR0VUU1RBVFopOwotCQkJaWYgKGVycm9yKQotCQkJCWdvdG8gZG9uZTsKLQkJCWJyZWFrOwotCQljYXNlIEFUTV9HRVRDSVJBTkdFOgotCQkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRtX2NpcmFuZ2UpOwotCQkJaWYgKGNvcHlfdG9fdXNlcihidWYsICZkZXYtPmNpX3JhbmdlLCBzaXplKSkgewotCQkJCWVycm9yID0gLUVGQVVMVDsKLQkJCQlnb3RvIGRvbmU7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBBVE1fR0VUTElOS1JBVEU6Ci0JCQlzaXplID0gc2l6ZW9mKGludCk7Ci0JCQlpZiAoY29weV90b191c2VyKGJ1ZiwgJmRldi0+bGlua19yYXRlLCBzaXplKSkgewotCQkJCWVycm9yID0gLUVGQVVMVDsKLQkJCQlnb3RvIGRvbmU7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBBVE1fUlNUQUREUjoKLQkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgewotCQkJCWVycm9yID0gLUVQRVJNOwotCQkJCWdvdG8gZG9uZTsKLQkJCX0KLQkJCWF0bV9yZXNldF9hZGRyKGRldiwgQVRNX0FERFJfTE9DQUwpOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVRNX0FEREFERFI6Ci0JCWNhc2UgQVRNX0RFTEFERFI6Ci0JCWNhc2UgQVRNX0FERExFQ1NBRERSOgotCQljYXNlIEFUTV9ERUxMRUNTQUREUjoKLQkJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgewotCQkJCWVycm9yID0gLUVQRVJNOwotCQkJCWdvdG8gZG9uZTsKLQkJCX0KLQkJCXsKLQkJCQlzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjIGFkZHI7Ci0KLQkJCQlpZiAoY29weV9mcm9tX3VzZXIoJmFkZHIsIGJ1Ziwgc2l6ZW9mKGFkZHIpKSkgewotCQkJCQllcnJvciA9IC1FRkFVTFQ7Ci0JCQkJCWdvdG8gZG9uZTsKLQkJCQl9Ci0JCQkJaWYgKGNtZCA9PSBBVE1fQUREQUREUiB8fCBjbWQgPT0gQVRNX0FERExFQ1NBRERSKQotCQkJCQllcnJvciA9IGF0bV9hZGRfYWRkcihkZXYsICZhZGRyLAotCQkJCQkJCSAgICAgKGNtZCA9PSBBVE1fQUREQUREUiA/Ci0JCQkJCQkJICAgICAgQVRNX0FERFJfTE9DQUwgOiBBVE1fQUREUl9MRUNTKSk7Ci0JCQkJZWxzZQotCQkJCQllcnJvciA9IGF0bV9kZWxfYWRkcihkZXYsICZhZGRyLAotCQkJCQkJCSAgICAgKGNtZCA9PSBBVE1fREVMQUREUiA/Ci0JCQkJCQkJICAgICAgQVRNX0FERFJfTE9DQUwgOiBBVE1fQUREUl9MRUNTKSk7Ci0JCQkJZ290byBkb25lOwotCQkJfQotCQljYXNlIEFUTV9HRVRBRERSOgotCQljYXNlIEFUTV9HRVRMRUNTQUREUjoKLQkJCWVycm9yID0gYXRtX2dldF9hZGRyKGRldiwgYnVmLCBsZW4sCi0JCQkJCSAgICAgKGNtZCA9PSBBVE1fR0VUQUREUiA/Ci0JCQkJCSAgICAgIEFUTV9BRERSX0xPQ0FMIDogQVRNX0FERFJfTEVDUykpOwotCQkJaWYgKGVycm9yIDwgMCkKLQkJCQlnb3RvIGRvbmU7Ci0JCQlzaXplID0gZXJyb3I7Ci0JCQkvKiBtYXkgcmV0dXJuIDAsIGJ1dCBsYXRlciBvbiBzaXplID09IDAgbWVhbnMgImRvbid0Ci0JCQkgICB3cml0ZSB0aGUgbGVuZ3RoIiAqLwotCQkJZXJyb3IgPSBwdXRfdXNlcihzaXplLCBzaW9jX2xlbikKLQkJCQk/IC1FRkFVTFQgOiAwOworCWNhc2UgQVRNX0dFVFRZUEU6CisJCXNpemUgPSBzdHJsZW4oZGV2LT50eXBlKSArIDE7CisJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBkZXYtPnR5cGUsIHNpemUpKSB7CisJCQllcnJvciA9IC1FRkFVTFQ7CiAJCQlnb3RvIGRvbmU7Ci0JCWNhc2UgQVRNX1NFVExPT1A6Ci0JCQlpZiAoX19BVE1fTE1fWFRSTVQoKGludCkgKHVuc2lnbmVkIGxvbmcpIGJ1ZikgJiYKLQkJCSAgICBfX0FUTV9MTV9YVExPQygoaW50KSAodW5zaWduZWQgbG9uZykgYnVmKSA+Ci0JCQkgICAgX19BVE1fTE1fWFRSTVQoKGludCkgKHVuc2lnbmVkIGxvbmcpIGJ1ZikpIHsKLQkJCQllcnJvciA9IC1FSU5WQUw7Ci0JCQkJZ290byBkb25lOwotCQkJfQotCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgQVRNX1NFVENJUkFOR0U6Ci0JCWNhc2UgU09ORVRfR0VUU1RBVFo6Ci0JCWNhc2UgU09ORVRfU0VURElBRzoKLQkJY2FzZSBTT05FVF9DTFJESUFHOgotCQljYXNlIFNPTkVUX1NFVEZSQU1JTkc6Ci0JCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKLQkJCQllcnJvciA9IC1FUEVSTTsKLQkJCQlnb3RvIGRvbmU7Ci0JCQl9Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJZGVmYXVsdDoKLQkJCWlmIChjb21wYXQpIHsKLSNpZmRlZiBDT05GSUdfQ09NUEFUCi0JCQkJaWYgKCFkZXYtPm9wcy0+Y29tcGF0X2lvY3RsKSB7Ci0JCQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCQkJZ290byBkb25lOwotCQkJCX0KLQkJCQlzaXplID0gZGV2LT5vcHMtPmNvbXBhdF9pb2N0bChkZXYsIGNtZCwgYnVmKTsKLSNlbmRpZgotCQkJfSBlbHNlIHsKLQkJCQlpZiAoIWRldi0+b3BzLT5pb2N0bCkgewotCQkJCQllcnJvciA9IC1FSU5WQUw7Ci0JCQkJCWdvdG8gZG9uZTsKLQkJCQl9Ci0JCQkJc2l6ZSA9IGRldi0+b3BzLT5pb2N0bChkZXYsIGNtZCwgYnVmKTsKLQkJCX0KLQkJCWlmIChzaXplIDwgMCkgewotCQkJCWVycm9yID0gKHNpemUgPT0gLUVOT0lPQ1RMQ01EID8gLUVJTlZBTCA6IHNpemUpOworCQl9CisJCWJyZWFrOworCWNhc2UgQVRNX0dFVEVTSToKKwkJc2l6ZSA9IEVTSV9MRU47CisJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCBkZXYtPmVzaSwgc2l6ZSkpIHsKKwkJCWVycm9yID0gLUVGQVVMVDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlicmVhazsKKwljYXNlIEFUTV9TRVRFU0k6CisJeworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAwOyBpIDwgRVNJX0xFTjsgaSsrKQorCQkJaWYgKGRldi0+ZXNpW2ldKSB7CisJCQkJZXJyb3IgPSAtRUVYSVNUOwogCQkJCWdvdG8gZG9uZTsKIAkJCX0KIAl9CisJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBBVE1fU0VURVNJRjoKKwl7CisJCXVuc2lnbmVkIGNoYXIgZXNpW0VTSV9MRU5dOworCisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkgeworCQkJZXJyb3IgPSAtRVBFUk07CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJaWYgKGNvcHlfZnJvbV91c2VyKGVzaSwgYnVmLCBFU0lfTEVOKSkgeworCQkJZXJyb3IgPSAtRUZBVUxUOworCQkJZ290byBkb25lOworCQl9CisJCW1lbWNweShkZXYtPmVzaSwgZXNpLCBFU0lfTEVOKTsKKwkJZXJyb3IgPSAgRVNJX0xFTjsKKwkJZ290byBkb25lOworCX0KKwljYXNlIEFUTV9HRVRTVEFUWjoKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7CisJCQllcnJvciA9IC1FUEVSTTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIEFUTV9HRVRTVEFUOgorCQlzaXplID0gc2l6ZW9mKHN0cnVjdCBhdG1fZGV2X3N0YXRzKTsKKwkJZXJyb3IgPSBmZXRjaF9zdGF0cyhkZXYsIGJ1ZiwgY21kID09IEFUTV9HRVRTVEFUWik7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZG9uZTsKKwkJYnJlYWs7CisJY2FzZSBBVE1fR0VUQ0lSQU5HRToKKwkJc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXRtX2NpcmFuZ2UpOworCQlpZiAoY29weV90b191c2VyKGJ1ZiwgJmRldi0+Y2lfcmFuZ2UsIHNpemUpKSB7CisJCQllcnJvciA9IC1FRkFVTFQ7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBBVE1fR0VUTElOS1JBVEU6CisJCXNpemUgPSBzaXplb2YoaW50KTsKKwkJaWYgKGNvcHlfdG9fdXNlcihidWYsICZkZXYtPmxpbmtfcmF0ZSwgc2l6ZSkpIHsKKwkJCWVycm9yID0gLUVGQVVMVDsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCQlicmVhazsKKwljYXNlIEFUTV9SU1RBRERSOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKKwkJCWVycm9yID0gLUVQRVJNOworCQkJZ290byBkb25lOworCQl9CisJCWF0bV9yZXNldF9hZGRyKGRldiwgQVRNX0FERFJfTE9DQUwpOworCQlicmVhazsKKwljYXNlIEFUTV9BRERBRERSOgorCWNhc2UgQVRNX0RFTEFERFI6CisJY2FzZSBBVE1fQURETEVDU0FERFI6CisJY2FzZSBBVE1fREVMTEVDU0FERFI6CisJeworCQlzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjIGFkZHI7CisKKwkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKSB7CisJCQllcnJvciA9IC1FUEVSTTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCisJCWlmIChjb3B5X2Zyb21fdXNlcigmYWRkciwgYnVmLCBzaXplb2YoYWRkcikpKSB7CisJCQllcnJvciA9IC1FRkFVTFQ7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJaWYgKGNtZCA9PSBBVE1fQUREQUREUiB8fCBjbWQgPT0gQVRNX0FERExFQ1NBRERSKQorCQkJZXJyb3IgPSBhdG1fYWRkX2FkZHIoZGV2LCAmYWRkciwKKwkJCQkJICAgICAoY21kID09IEFUTV9BRERBRERSID8KKwkJCQkJICAgICAgQVRNX0FERFJfTE9DQUwgOiBBVE1fQUREUl9MRUNTKSk7CisJCWVsc2UKKwkJCWVycm9yID0gYXRtX2RlbF9hZGRyKGRldiwgJmFkZHIsCisJCQkJCSAgICAgKGNtZCA9PSBBVE1fREVMQUREUiA/CisJCQkJCSAgICAgIEFUTV9BRERSX0xPQ0FMIDogQVRNX0FERFJfTEVDUykpOworCQlnb3RvIGRvbmU7CisJfQorCWNhc2UgQVRNX0dFVEFERFI6CisJY2FzZSBBVE1fR0VUTEVDU0FERFI6CisJCWVycm9yID0gYXRtX2dldF9hZGRyKGRldiwgYnVmLCBsZW4sCisJCQkJICAgICAoY21kID09IEFUTV9HRVRBRERSID8KKwkJCQkgICAgICBBVE1fQUREUl9MT0NBTCA6IEFUTV9BRERSX0xFQ1MpKTsKKwkJaWYgKGVycm9yIDwgMCkKKwkJCWdvdG8gZG9uZTsKKwkJc2l6ZSA9IGVycm9yOworCQkvKiBtYXkgcmV0dXJuIDAsIGJ1dCBsYXRlciBvbiBzaXplID09IDAgbWVhbnMgImRvbid0CisJCSAgIHdyaXRlIHRoZSBsZW5ndGgiICovCisJCWVycm9yID0gcHV0X3VzZXIoc2l6ZSwgc2lvY19sZW4pID8gLUVGQVVMVCA6IDA7CisJCWdvdG8gZG9uZTsKKwljYXNlIEFUTV9TRVRMT09QOgorCQlpZiAoX19BVE1fTE1fWFRSTVQoKGludCkgKHVuc2lnbmVkIGxvbmcpIGJ1ZikgJiYKKwkJICAgIF9fQVRNX0xNX1hUTE9DKChpbnQpICh1bnNpZ25lZCBsb25nKSBidWYpID4KKwkJICAgIF9fQVRNX0xNX1hUUk1UKChpbnQpICh1bnNpZ25lZCBsb25nKSBidWYpKSB7CisJCQllcnJvciA9IC1FSU5WQUw7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJLyogZmFsbCB0aHJvdWdoICovCisJY2FzZSBBVE1fU0VUQ0lSQU5HRToKKwljYXNlIFNPTkVUX0dFVFNUQVRaOgorCWNhc2UgU09ORVRfU0VURElBRzoKKwljYXNlIFNPTkVUX0NMUkRJQUc6CisJY2FzZSBTT05FVF9TRVRGUkFNSU5HOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpIHsKKwkJCWVycm9yID0gLUVQRVJNOworCQkJZ290byBkb25lOworCQl9CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCWlmIChjb21wYXQpIHsKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJCQlpZiAoIWRldi0+b3BzLT5jb21wYXRfaW9jdGwpIHsKKwkJCQllcnJvciA9IC1FSU5WQUw7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJc2l6ZSA9IGRldi0+b3BzLT5jb21wYXRfaW9jdGwoZGV2LCBjbWQsIGJ1Zik7CisjZW5kaWYKKwkJfSBlbHNlIHsKKwkJCWlmICghZGV2LT5vcHMtPmlvY3RsKSB7CisJCQkJZXJyb3IgPSAtRUlOVkFMOworCQkJCWdvdG8gZG9uZTsKKwkJCX0KKwkJCXNpemUgPSBkZXYtPm9wcy0+aW9jdGwoZGV2LCBjbWQsIGJ1Zik7CisJCX0KKwkJaWYgKHNpemUgPCAwKSB7CisJCQllcnJvciA9IChzaXplID09IC1FTk9JT0NUTENNRCA/IC1FSU5WQUwgOiBzaXplKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KIAogCWlmIChzaXplKQotCQllcnJvciA9IHB1dF91c2VyKHNpemUsIHNpb2NfbGVuKQotCQkJPyAtRUZBVUxUIDogMDsKKwkJZXJyb3IgPSBwdXRfdXNlcihzaXplLCBzaW9jX2xlbikgPyAtRUZBVUxUIDogMDsKIAllbHNlCiAJCWVycm9yID0gMDsKIGRvbmU6CkBAIC00NDksMjEgKzQ0NCwxMCBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCAqZGV2X2dldF9pZHgobG9mZl90IGxlZnQpCi17Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcDsKLQotCWxpc3RfZm9yX2VhY2gocCwgJmF0bV9kZXZzKSB7Ci0JCWlmICghLS1sZWZ0KQotCQkJYnJlYWs7Ci0JfQotCXJldHVybiAocCAhPSAmYXRtX2RldnMpID8gcCA6IE5VTEw7Ci19Ci0KIHZvaWQgKmF0bV9kZXZfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKIAltdXRleF9sb2NrKCZhdG1fZGV2X211dGV4KTsKLQlyZXR1cm4gKnBvcyA/IGRldl9nZXRfaWR4KCpwb3MpIDogU0VRX1NUQVJUX1RPS0VOOworCXJldHVybiBzZXFfbGlzdF9zdGFydF9oZWFkKCZhdG1fZGV2cywgKnBvcyk7CiB9CiAKIHZvaWQgYXRtX2Rldl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKQEAgLTQ3MywxMyArNDU3LDUgQEAKIAogdm9pZCAqYXRtX2Rldl9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0JKysqcG9zOwotCXYgPSAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCi0JCT8gYXRtX2RldnMubmV4dCA6ICgoc3RydWN0IGxpc3RfaGVhZCAqKXYpLT5uZXh0OwotCXJldHVybiAodiA9PSAmYXRtX2RldnMpID8gTlVMTCA6IHY7CisJcmV0dXJuIHNlcV9saXN0X25leHQodiwgJmF0bV9kZXZzLCBwb3MpOwogfQotCi0KLUVYUE9SVF9TWU1CT0woYXRtX2Rldl9yZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MKGF0bV9kZXZfZGVyZWdpc3Rlcik7Ci1FWFBPUlRfU1lNQk9MKGF0bV9kZXZfbG9va3VwKTsKZGlmZiAtLWdpdCBhL25ldC9hdG0vc2lnbmFsaW5nLmMgYi9uZXQvYXRtL3NpZ25hbGluZy5jCmluZGV4IDIyOTkyMTQuLmFkMWQyOGEgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vc2lnbmFsaW5nLmMKKysrIGIvbmV0L2F0bS9zaWduYWxpbmcuYwpAQCAtMiw2ICsyLDcgQEAKIAogLyogV3JpdHRlbiAxOTk1LTIwMDAgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiVzOiAiIGZtdCwgX19mdW5jX18KIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CS8qIGVycm9yIGNvZGVzICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CS8qIHByaW50ayAqLwpAQCAtMTcsNyArMTgsNiBAQAogI2luY2x1ZGUgInJlc291cmNlcy5oIgogI2luY2x1ZGUgInNpZ25hbGluZy5oIgogCi0KICN1bmRlZiBXQUlUX0ZPUl9ERU1PTgkJLyogI2RlZmluZSB0aGlzIGlmIHN5c3RlbSBjYWxscyBvbiBTVkMgc29ja2V0cwogCQkJCSAgIHNob3VsZCBibG9jayB1bnRpbCB0aGUgZGVtb24gcnVucy4KIAkJCQkgICBEYW5nZXI6IG1heSBjYXVzZSBuYXN0eSBoYW5ncyBpZiB0aGUgZGVtb24KQEAgLTI4LDYwICsyOCw1OSBAQAogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKHNpZ2Rfc2xlZXApOwogI2VuZGlmCiAKLQogc3RhdGljIHZvaWQgc2lnZF9wdXRfc2tiKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAjaWZkZWYgV0FJVF9GT1JfREVNT04KLQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LGN1cnJlbnQpOworCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCi0JYWRkX3dhaXRfcXVldWUoJnNpZ2Rfc2xlZXAsJndhaXQpOworCWFkZF93YWl0X3F1ZXVlKCZzaWdkX3NsZWVwLCAmd2FpdCk7CiAJd2hpbGUgKCFzaWdkKSB7CiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQkJcHJfZGVidWcoImF0bXN2Yzogd2FpdGluZyBmb3Igc2lnbmFsaW5nIGRlbW9uLi4uXG4iKTsKKwkJcHJfZGVidWcoImF0bXN2Yzogd2FpdGluZyBmb3Igc2lnbmFsaW5nIGRhZW1vbi4uLlxuIik7CiAJCXNjaGVkdWxlKCk7CiAJfQogCWN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOwotCXJlbW92ZV93YWl0X3F1ZXVlKCZzaWdkX3NsZWVwLCZ3YWl0KTsKKwlyZW1vdmVfd2FpdF9xdWV1ZSgmc2lnZF9zbGVlcCwgJndhaXQpOwogI2Vsc2UKIAlpZiAoIXNpZ2QpIHsKLQkJcHJfZGVidWcoImF0bXN2Yzogbm8gc2lnbmFsaW5nIGRlbW9uXG4iKTsKKwkJcHJfZGVidWcoImF0bXN2Yzogbm8gc2lnbmFsaW5nIGRhZW1vblxuIik7CiAJCWtmcmVlX3NrYihza2IpOwogCQlyZXR1cm47CiAJfQogI2VuZGlmCi0JYXRtX2ZvcmNlX2NoYXJnZShzaWdkLHNrYi0+dHJ1ZXNpemUpOwotCXNrYl9xdWV1ZV90YWlsKCZza19hdG0oc2lnZCktPnNrX3JlY2VpdmVfcXVldWUsc2tiKTsKKwlhdG1fZm9yY2VfY2hhcmdlKHNpZ2QsIHNrYi0+dHJ1ZXNpemUpOworCXNrYl9xdWV1ZV90YWlsKCZza19hdG0oc2lnZCktPnNrX3JlY2VpdmVfcXVldWUsIHNrYik7CiAJc2tfYXRtKHNpZ2QpLT5za19kYXRhX3JlYWR5KHNrX2F0bShzaWdkKSwgc2tiLT5sZW4pOwogfQogCi0KLXN0YXRpYyB2b2lkIG1vZGlmeV9xb3Moc3RydWN0IGF0bV92Y2MgKnZjYyxzdHJ1Y3QgYXRtc3ZjX21zZyAqbXNnKQorc3RhdGljIHZvaWQgbW9kaWZ5X3FvcyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtc3ZjX21zZyAqbXNnKQogewogCXN0cnVjdCBza19idWZmICpza2I7CiAKLQlpZiAodGVzdF9iaXQoQVRNX1ZGX1JFTEVBU0VELCZ2Y2MtPmZsYWdzKSB8fAotCSAgICAhdGVzdF9iaXQoQVRNX1ZGX1JFQURZLCZ2Y2MtPmZsYWdzKSkKKwlpZiAodGVzdF9iaXQoQVRNX1ZGX1JFTEVBU0VELCAmdmNjLT5mbGFncykgfHwKKwkgICAgIXRlc3RfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpKQogCQlyZXR1cm47CiAJbXNnLT50eXBlID0gYXNfZXJyb3I7Ci0JaWYgKCF2Y2MtPmRldi0+b3BzLT5jaGFuZ2VfcW9zKSBtc2ctPnJlcGx5ID0gLUVPUE5PVFNVUFA7CisJaWYgKCF2Y2MtPmRldi0+b3BzLT5jaGFuZ2VfcW9zKQorCQltc2ctPnJlcGx5ID0gLUVPUE5PVFNVUFA7CiAJZWxzZSB7CiAJCS8qIHNob3VsZCBsb2NrIFZDQyAqLwotCQltc2ctPnJlcGx5ID0gdmNjLT5kZXYtPm9wcy0+Y2hhbmdlX3Fvcyh2Y2MsJm1zZy0+cW9zLAotCQkgICAgbXNnLT5yZXBseSk7Ci0JCWlmICghbXNnLT5yZXBseSkgbXNnLT50eXBlID0gYXNfb2theTsKKwkJbXNnLT5yZXBseSA9IHZjYy0+ZGV2LT5vcHMtPmNoYW5nZV9xb3ModmNjLCAmbXNnLT5xb3MsCisJCQkJCQkgICAgICAgbXNnLT5yZXBseSk7CisJCWlmICghbXNnLT5yZXBseSkKKwkJCW1zZy0+dHlwZSA9IGFzX29rYXk7CiAJfQogCS8qCiAJICogU2hvdWxkIHByb2JhYmx5IGp1c3QgdHVybiBhcm91bmQgdGhlIG9sZCBza2IuIEJ1dCB0aGUsIHRoZSBidWZmZXIKIAkgKiBzcGFjZSBhY2NvdW50aW5nIG5lZWRzIHRvIGZvbGxvdyB0aGUgY2hhbmdlIHRvby4gTWF5YmUgbGF0ZXIuCiAJICovCi0Jd2hpbGUgKCEoc2tiID0gYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgYXRtc3ZjX21zZyksR0ZQX0tFUk5FTCkpKQorCXdoaWxlICghKHNrYiA9IGFsbG9jX3NrYihzaXplb2Yoc3RydWN0IGF0bXN2Y19tc2cpLCBHRlBfS0VSTkVMKSkpCiAJCXNjaGVkdWxlKCk7Ci0JKihzdHJ1Y3QgYXRtc3ZjX21zZyAqKSBza2JfcHV0KHNrYixzaXplb2Yoc3RydWN0IGF0bXN2Y19tc2cpKSA9ICptc2c7CisJKihzdHJ1Y3QgYXRtc3ZjX21zZyAqKXNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGF0bXN2Y19tc2cpKSA9ICptc2c7CiAJc2lnZF9wdXRfc2tiKHNrYik7CiB9CiAKLQotc3RhdGljIGludCBzaWdkX3NlbmQoc3RydWN0IGF0bV92Y2MgKnZjYyxzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBzaWdkX3NlbmQoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgYXRtc3ZjX21zZyAqbXNnOwogCXN0cnVjdCBhdG1fdmNjICpzZXNzaW9uX3ZjYzsKQEAgLTkwLDY5ICs4OSw2OCBAQAogCW1zZyA9IChzdHJ1Y3QgYXRtc3ZjX21zZyAqKSBza2ItPmRhdGE7CiAJYXRvbWljX3N1Yihza2ItPnRydWVzaXplLCAmc2tfYXRtKHZjYyktPnNrX3dtZW1fYWxsb2MpOwogCXZjYyA9ICooc3RydWN0IGF0bV92Y2MgKiopICZtc2ctPnZjYzsKLQlwcl9kZWJ1Zygic2lnZF9zZW5kICVkICgweCVseClcbiIsKGludCkgbXNnLT50eXBlLAotCSAgKHVuc2lnbmVkIGxvbmcpIHZjYyk7CisJcHJfZGVidWcoIiVkICgweCVseClcbiIsIChpbnQpbXNnLT50eXBlLCAodW5zaWduZWQgbG9uZyl2Y2MpOwogCXNrID0gc2tfYXRtKHZjYyk7CiAKIAlzd2l0Y2ggKG1zZy0+dHlwZSkgewotCQljYXNlIGFzX29rYXk6Ci0JCQlzay0+c2tfZXJyID0gLW1zZy0+cmVwbHk7Ci0JCQljbGVhcl9iaXQoQVRNX1ZGX1dBSVRJTkcsICZ2Y2MtPmZsYWdzKTsKLQkJCWlmICghKnZjYy0+bG9jYWwuc2FzX2FkZHIucHJ2ICYmCi0JCQkgICAgISp2Y2MtPmxvY2FsLnNhc19hZGRyLnB1YikgewotCQkJCXZjYy0+bG9jYWwuc2FzX2ZhbWlseSA9IEFGX0FUTVNWQzsKLQkJCQltZW1jcHkodmNjLT5sb2NhbC5zYXNfYWRkci5wcnYsCi0JCQkJICAgIG1zZy0+bG9jYWwuc2FzX2FkZHIucHJ2LEFUTV9FU0FfTEVOKTsKLQkJCQltZW1jcHkodmNjLT5sb2NhbC5zYXNfYWRkci5wdWIsCi0JCQkJICAgIG1zZy0+bG9jYWwuc2FzX2FkZHIucHViLEFUTV9FMTY0X0xFTisxKTsKLQkJCX0KLQkJCXNlc3Npb25fdmNjID0gdmNjLT5zZXNzaW9uID8gdmNjLT5zZXNzaW9uIDogdmNjOwotCQkJaWYgKHNlc3Npb25fdmNjLT52cGkgfHwgc2Vzc2lvbl92Y2MtPnZjaSkgYnJlYWs7Ci0JCQlzZXNzaW9uX3ZjYy0+aXRmID0gbXNnLT5wdmMuc2FwX2FkZHIuaXRmOwotCQkJc2Vzc2lvbl92Y2MtPnZwaSA9IG1zZy0+cHZjLnNhcF9hZGRyLnZwaTsKLQkJCXNlc3Npb25fdmNjLT52Y2kgPSBtc2ctPnB2Yy5zYXBfYWRkci52Y2k7Ci0JCQlpZiAoc2Vzc2lvbl92Y2MtPnZwaSB8fCBzZXNzaW9uX3ZjYy0+dmNpKQotCQkJCXNlc3Npb25fdmNjLT5xb3MgPSBtc2ctPnFvczsKKwljYXNlIGFzX29rYXk6CisJCXNrLT5za19lcnIgPSAtbXNnLT5yZXBseTsKKwkJY2xlYXJfYml0KEFUTV9WRl9XQUlUSU5HLCAmdmNjLT5mbGFncyk7CisJCWlmICghKnZjYy0+bG9jYWwuc2FzX2FkZHIucHJ2ICYmICEqdmNjLT5sb2NhbC5zYXNfYWRkci5wdWIpIHsKKwkJCXZjYy0+bG9jYWwuc2FzX2ZhbWlseSA9IEFGX0FUTVNWQzsKKwkJCW1lbWNweSh2Y2MtPmxvY2FsLnNhc19hZGRyLnBydiwKKwkJCSAgICAgICBtc2ctPmxvY2FsLnNhc19hZGRyLnBydiwgQVRNX0VTQV9MRU4pOworCQkJbWVtY3B5KHZjYy0+bG9jYWwuc2FzX2FkZHIucHViLAorCQkJICAgICAgIG1zZy0+bG9jYWwuc2FzX2FkZHIucHViLCBBVE1fRTE2NF9MRU4gKyAxKTsKKwkJfQorCQlzZXNzaW9uX3ZjYyA9IHZjYy0+c2Vzc2lvbiA/IHZjYy0+c2Vzc2lvbiA6IHZjYzsKKwkJaWYgKHNlc3Npb25fdmNjLT52cGkgfHwgc2Vzc2lvbl92Y2MtPnZjaSkKIAkJCWJyZWFrOwotCQljYXNlIGFzX2Vycm9yOgotCQkJY2xlYXJfYml0KEFUTV9WRl9SRUdJUywmdmNjLT5mbGFncyk7Ci0JCQljbGVhcl9iaXQoQVRNX1ZGX1JFQURZLCZ2Y2MtPmZsYWdzKTsKLQkJCXNrLT5za19lcnIgPSAtbXNnLT5yZXBseTsKLQkJCWNsZWFyX2JpdChBVE1fVkZfV0FJVElORywgJnZjYy0+ZmxhZ3MpOwotCQkJYnJlYWs7Ci0JCWNhc2UgYXNfaW5kaWNhdGU6Ci0JCQl2Y2MgPSAqKHN0cnVjdCBhdG1fdmNjICoqKSAmbXNnLT5saXN0ZW5fdmNjOwotCQkJc2sgPSBza19hdG0odmNjKTsKLQkJCXByX2RlYnVnKCJhc19pbmRpY2F0ZSEhIVxuIik7Ci0JCQlsb2NrX3NvY2soc2spOwotCQkJaWYgKHNrX2FjY2VwdHFfaXNfZnVsbChzaykpIHsKLQkJCQlzaWdkX2VucShOVUxMLGFzX3JlamVjdCx2Y2MsTlVMTCxOVUxMKTsKLQkJCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0JCQkJZ290byBhc19pbmRpY2F0ZV9jb21wbGV0ZTsKLQkJCX0KLQkJCXNrLT5za19hY2tfYmFja2xvZysrOwotCQkJc2tiX3F1ZXVlX3RhaWwoJnNrLT5za19yZWNlaXZlX3F1ZXVlLCBza2IpOwotCQkJcHJfZGVidWcoIndha2luZyBzay0+c2tfc2xlZXAgMHglcFxuIiwgc2stPnNrX3NsZWVwKTsKLQkJCXNrLT5za19zdGF0ZV9jaGFuZ2Uoc2spOworCQlzZXNzaW9uX3ZjYy0+aXRmID0gbXNnLT5wdmMuc2FwX2FkZHIuaXRmOworCQlzZXNzaW9uX3ZjYy0+dnBpID0gbXNnLT5wdmMuc2FwX2FkZHIudnBpOworCQlzZXNzaW9uX3ZjYy0+dmNpID0gbXNnLT5wdmMuc2FwX2FkZHIudmNpOworCQlpZiAoc2Vzc2lvbl92Y2MtPnZwaSB8fCBzZXNzaW9uX3ZjYy0+dmNpKQorCQkJc2Vzc2lvbl92Y2MtPnFvcyA9IG1zZy0+cW9zOworCQlicmVhazsKKwljYXNlIGFzX2Vycm9yOgorCQljbGVhcl9iaXQoQVRNX1ZGX1JFR0lTLCAmdmNjLT5mbGFncyk7CisJCWNsZWFyX2JpdChBVE1fVkZfUkVBRFksICZ2Y2MtPmZsYWdzKTsKKwkJc2stPnNrX2VyciA9IC1tc2ctPnJlcGx5OworCQljbGVhcl9iaXQoQVRNX1ZGX1dBSVRJTkcsICZ2Y2MtPmZsYWdzKTsKKwkJYnJlYWs7CisJY2FzZSBhc19pbmRpY2F0ZToKKwkJdmNjID0gKihzdHJ1Y3QgYXRtX3ZjYyAqKikmbXNnLT5saXN0ZW5fdmNjOworCQlzayA9IHNrX2F0bSh2Y2MpOworCQlwcl9kZWJ1ZygiYXNfaW5kaWNhdGUhISFcbiIpOworCQlsb2NrX3NvY2soc2spOworCQlpZiAoc2tfYWNjZXB0cV9pc19mdWxsKHNrKSkgeworCQkJc2lnZF9lbnEoTlVMTCwgYXNfcmVqZWN0LCB2Y2MsIE5VTEwsIE5VTEwpOworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJZ290byBhc19pbmRpY2F0ZV9jb21wbGV0ZTsKKwkJfQorCQlzay0+c2tfYWNrX2JhY2tsb2crKzsKKwkJc2tiX3F1ZXVlX3RhaWwoJnNrLT5za19yZWNlaXZlX3F1ZXVlLCBza2IpOworCQlwcl9kZWJ1Zygid2FraW5nIHNrLT5za19zbGVlcCAweCVwXG4iLCBzay0+c2tfc2xlZXApOworCQlzay0+c2tfc3RhdGVfY2hhbmdlKHNrKTsKIGFzX2luZGljYXRlX2NvbXBsZXRlOgotCQkJcmVsZWFzZV9zb2NrKHNrKTsKLQkJCXJldHVybiAwOwotCQljYXNlIGFzX2Nsb3NlOgotCQkJc2V0X2JpdChBVE1fVkZfUkVMRUFTRUQsJnZjYy0+ZmxhZ3MpOwotCQkJdmNjX3JlbGVhc2VfYXN5bmModmNjLCBtc2ctPnJlcGx5KTsKLQkJCWdvdG8gb3V0OwotCQljYXNlIGFzX21vZGlmeToKLQkJCW1vZGlmeV9xb3ModmNjLG1zZyk7Ci0JCQlicmVhazsKLQkJY2FzZSBhc19hZGRwYXJ0eToKLQkJY2FzZSBhc19kcm9wcGFydHk6Ci0JCQlzay0+c2tfZXJyX3NvZnQgPSBtc2ctPnJlcGx5OwkvKiA8IDAgZmFpbHVyZSwgb3RoZXJ3aXNlIGVwX3JlZiAqLwotCQkJY2xlYXJfYml0KEFUTV9WRl9XQUlUSU5HLCAmdmNjLT5mbGFncyk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXByaW50ayhLRVJOX0FMRVJUICJzaWdkX3NlbmQ6IGJhZCBtZXNzYWdlIHR5cGUgJWRcbiIsCi0JCQkgICAgKGludCkgbXNnLT50eXBlKTsKLQkJCXJldHVybiAtRUlOVkFMOworCQlyZWxlYXNlX3NvY2soc2spOworCQlyZXR1cm4gMDsKKwljYXNlIGFzX2Nsb3NlOgorCQlzZXRfYml0KEFUTV9WRl9SRUxFQVNFRCwgJnZjYy0+ZmxhZ3MpOworCQl2Y2NfcmVsZWFzZV9hc3luYyh2Y2MsIG1zZy0+cmVwbHkpOworCQlnb3RvIG91dDsKKwljYXNlIGFzX21vZGlmeToKKwkJbW9kaWZ5X3Fvcyh2Y2MsIG1zZyk7CisJCWJyZWFrOworCWNhc2UgYXNfYWRkcGFydHk6CisJY2FzZSBhc19kcm9wcGFydHk6CisJCXNrLT5za19lcnJfc29mdCA9IG1zZy0+cmVwbHk7CisJCQkJCS8qIDwgMCBmYWlsdXJlLCBvdGhlcndpc2UgZXBfcmVmICovCisJCWNsZWFyX2JpdChBVE1fVkZfV0FJVElORywgJnZjYy0+ZmxhZ3MpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcl9hbGVydCgiYmFkIG1lc3NhZ2UgdHlwZSAlZFxuIiwgKGludCltc2ctPnR5cGUpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJc2stPnNrX3N0YXRlX2NoYW5nZShzayk7CiBvdXQ6CkBAIC0xNjAsNDggKzE1OCw1MiBAQAogCXJldHVybiAwOwogfQogCi0KLXZvaWQgc2lnZF9lbnEyKHN0cnVjdCBhdG1fdmNjICp2Y2MsZW51bSBhdG1zdmNfbXNnX3R5cGUgdHlwZSwKLSAgICBzdHJ1Y3QgYXRtX3ZjYyAqbGlzdGVuX3ZjYyxjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjICpwdmMsCi0gICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2F0bXN2YyAqc3ZjLGNvbnN0IHN0cnVjdCBhdG1fcW9zICpxb3MsaW50IHJlcGx5KQordm9pZCBzaWdkX2VucTIoc3RydWN0IGF0bV92Y2MgKnZjYywgZW51bSBhdG1zdmNfbXNnX3R5cGUgdHlwZSwKKwkgICAgICAgc3RydWN0IGF0bV92Y2MgKmxpc3Rlbl92Y2MsIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKnB2YywKKwkgICAgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyX2F0bXN2YyAqc3ZjLCBjb25zdCBzdHJ1Y3QgYXRtX3FvcyAqcW9zLAorCSAgICAgICBpbnQgcmVwbHkpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgYXRtc3ZjX21zZyAqbXNnOwogCXN0YXRpYyB1bnNpZ25lZCBzZXNzaW9uID0gMDsKIAotCXByX2RlYnVnKCJzaWdkX2VucSAlZCAoMHglcClcbiIsKGludCkgdHlwZSx2Y2MpOwotCXdoaWxlICghKHNrYiA9IGFsbG9jX3NrYihzaXplb2Yoc3RydWN0IGF0bXN2Y19tc2cpLEdGUF9LRVJORUwpKSkKKwlwcl9kZWJ1ZygiJWQgKDB4JXApXG4iLCAoaW50KXR5cGUsIHZjYyk7CisJd2hpbGUgKCEoc2tiID0gYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgYXRtc3ZjX21zZyksIEdGUF9LRVJORUwpKSkKIAkJc2NoZWR1bGUoKTsKLQltc2cgPSAoc3RydWN0IGF0bXN2Y19tc2cgKikgc2tiX3B1dChza2Isc2l6ZW9mKHN0cnVjdCBhdG1zdmNfbXNnKSk7Ci0JbWVtc2V0KG1zZywwLHNpemVvZigqbXNnKSk7CisJbXNnID0gKHN0cnVjdCBhdG1zdmNfbXNnICopc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgYXRtc3ZjX21zZykpOworCW1lbXNldChtc2csIDAsIHNpemVvZigqbXNnKSk7CiAJbXNnLT50eXBlID0gdHlwZTsKIAkqKHN0cnVjdCBhdG1fdmNjICoqKSAmbXNnLT52Y2MgPSB2Y2M7CiAJKihzdHJ1Y3QgYXRtX3ZjYyAqKikgJm1zZy0+bGlzdGVuX3ZjYyA9IGxpc3Rlbl92Y2M7CiAJbXNnLT5yZXBseSA9IHJlcGx5OwotCWlmIChxb3MpIG1zZy0+cW9zID0gKnFvczsKLQlpZiAodmNjKSBtc2ctPnNhcCA9IHZjYy0+c2FwOwotCWlmIChzdmMpIG1zZy0+c3ZjID0gKnN2YzsKLQlpZiAodmNjKSBtc2ctPmxvY2FsID0gdmNjLT5sb2NhbDsKLQlpZiAocHZjKSBtc2ctPnB2YyA9ICpwdmM7CisJaWYgKHFvcykKKwkJbXNnLT5xb3MgPSAqcW9zOworCWlmICh2Y2MpCisJCW1zZy0+c2FwID0gdmNjLT5zYXA7CisJaWYgKHN2YykKKwkJbXNnLT5zdmMgPSAqc3ZjOworCWlmICh2Y2MpCisJCW1zZy0+bG9jYWwgPSB2Y2MtPmxvY2FsOworCWlmIChwdmMpCisJCW1zZy0+cHZjID0gKnB2YzsKIAlpZiAodmNjKSB7CiAJCWlmICh0eXBlID09IGFzX2Nvbm5lY3QgJiYgdGVzdF9iaXQoQVRNX1ZGX1NFU1NJT04sICZ2Y2MtPmZsYWdzKSkKIAkJCW1zZy0+c2Vzc2lvbiA9ICsrc2Vzc2lvbjsKIAkJCS8qIGV2ZXJ5IG5ldyBwbXAgY29ubmVjdCBnZXRzIHRoZSBuZXh0IHNlc3Npb24gbnVtYmVyICovCiAJfQogCXNpZ2RfcHV0X3NrYihza2IpOwotCWlmICh2Y2MpIHNldF9iaXQoQVRNX1ZGX1JFR0lTLCZ2Y2MtPmZsYWdzKTsKKwlpZiAodmNjKQorCQlzZXRfYml0KEFUTV9WRl9SRUdJUywgJnZjYy0+ZmxhZ3MpOwogfQogCi0KLXZvaWQgc2lnZF9lbnEoc3RydWN0IGF0bV92Y2MgKnZjYyxlbnVtIGF0bXN2Y19tc2dfdHlwZSB0eXBlLAotICAgIHN0cnVjdCBhdG1fdmNjICpsaXN0ZW5fdmNjLGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKnB2YywKLSAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjICpzdmMpCit2b2lkIHNpZ2RfZW5xKHN0cnVjdCBhdG1fdmNjICp2Y2MsIGVudW0gYXRtc3ZjX21zZ190eXBlIHR5cGUsCisJICAgICAgc3RydWN0IGF0bV92Y2MgKmxpc3Rlbl92Y2MsIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKnB2YywKKwkgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjICpzdmMpCiB7Ci0Jc2lnZF9lbnEyKHZjYyx0eXBlLGxpc3Rlbl92Y2MscHZjLHN2Yyx2Y2MgPyAmdmNjLT5xb3MgOiBOVUxMLDApOworCXNpZ2RfZW5xMih2Y2MsIHR5cGUsIGxpc3Rlbl92Y2MsIHB2Yywgc3ZjLCB2Y2MgPyAmdmNjLT5xb3MgOiBOVUxMLCAwKTsKIAkvKiBvdGhlciBJU1AgYXBwbGljYXRpb25zIG1heSB1c2UgInJlcGx5IiAqLwogfQogCi0KIHN0YXRpYyB2b2lkIHB1cmdlX3ZjYyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjKQogewogCWlmIChza19hdG0odmNjKS0+c2tfZmFtaWx5ID09IFBGX0FUTVNWQyAmJgpAQCAtMjEyLDIxICsyMTQsMjAgQEAKIAl9CiB9CiAKLQogc3RhdGljIHZvaWQgc2lnZF9jbG9zZShzdHJ1Y3QgYXRtX3ZjYyAqdmNjKQogewogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCXN0cnVjdCBzb2NrICpzOwogCWludCBpOwogCi0JcHJfZGVidWcoInNpZ2RfY2xvc2VcbiIpOworCXByX2RlYnVnKCJcbiIpOwogCXNpZ2QgPSBOVUxMOwogCWlmIChza2JfcGVlaygmc2tfYXRtKHZjYyktPnNrX3JlY2VpdmVfcXVldWUpKQotCQlwcmludGsoS0VSTl9FUlIgInNpZ2RfY2xvc2U6IGNsb3Npbmcgd2l0aCByZXF1ZXN0cyBwZW5kaW5nXG4iKTsKKwkJcHJfZXJyKCJjbG9zaW5nIHdpdGggcmVxdWVzdHMgcGVuZGluZ1xuIik7CiAJc2tiX3F1ZXVlX3B1cmdlKCZza19hdG0odmNjKS0+c2tfcmVjZWl2ZV9xdWV1ZSk7CiAKIAlyZWFkX2xvY2soJnZjY19za2xpc3RfbG9jayk7Ci0JZm9yKGkgPSAwOyBpIDwgVkNDX0hUQUJMRV9TSVpFOyArK2kpIHsKKwlmb3IgKGkgPSAwOyBpIDwgVkNDX0hUQUJMRV9TSVpFOyArK2kpIHsKIAkJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSAmdmNjX2hhc2hbaV07CiAKIAkJc2tfZm9yX2VhY2gocywgbm9kZSwgaGVhZCkgewpAQCAtMjM4LDEzICsyMzksMTEgQEAKIAlyZWFkX3VubG9jaygmdmNjX3NrbGlzdF9sb2NrKTsKIH0KIAotCiBzdGF0aWMgc3RydWN0IGF0bWRldl9vcHMgc2lnZF9kZXZfb3BzID0gewogCS5jbG9zZSA9IHNpZ2RfY2xvc2UsCiAJLnNlbmQgPQlzaWdkX3NlbmQKIH07CiAKLQogc3RhdGljIHN0cnVjdCBhdG1fZGV2IHNpZ2RfZGV2ID0gewogCS5vcHMgPQkJJnNpZ2RfZGV2X29wcywKIAkudHlwZSA9CQkic2lnIiwKQEAgLTI1MiwxNiArMjUxLDE2IEBACiAJLmxvY2sgPQkJX19TUElOX0xPQ0tfVU5MT0NLRUQoc2lnZF9kZXYubG9jaykKIH07CiAKLQogaW50IHNpZ2RfYXR0YWNoKHN0cnVjdCBhdG1fdmNjICp2Y2MpCiB7Ci0JaWYgKHNpZ2QpIHJldHVybiAtRUFERFJJTlVTRTsKLQlwcl9kZWJ1Zygic2lnZF9hdHRhY2hcbiIpOworCWlmIChzaWdkKQorCQlyZXR1cm4gLUVBRERSSU5VU0U7CisJcHJfZGVidWcoIlxuIik7CiAJc2lnZCA9IHZjYzsKIAl2Y2MtPmRldiA9ICZzaWdkX2RldjsKIAl2Y2NfaW5zZXJ0X3NvY2tldChza19hdG0odmNjKSk7Ci0Jc2V0X2JpdChBVE1fVkZfTUVUQSwmdmNjLT5mbGFncyk7Ci0Jc2V0X2JpdChBVE1fVkZfUkVBRFksJnZjYy0+ZmxhZ3MpOworCXNldF9iaXQoQVRNX1ZGX01FVEEsICZ2Y2MtPmZsYWdzKTsKKwlzZXRfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpOwogI2lmZGVmIFdBSVRfRk9SX0RFTU9OCiAJd2FrZV91cCgmc2lnZF9zbGVlcCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9hdG0vc3ZjLmMgYi9uZXQvYXRtL3N2Yy5jCmluZGV4IDY2ZTFkOWIuLjNiYTlhNDUgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vc3ZjLmMKKysrIGIvbmV0L2F0bS9zdmMuYwpAQCAtMiw2ICsyLDcgQEAKIAogLyogV3JpdHRlbiAxOTk1LTIwMDAgYnkgV2VybmVyIEFsbWVzYmVyZ2VyLCBFUEZMIExSQy9JQ0EgKi8KIAorI2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSAiOiVzOiAiIGZtdCwgX19mdW5jX18KIAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldC5oPgkJLyogc3RydWN0IHNvY2tldCwgc3RydWN0IHByb3RvX29wcyAqLwpAQCAtMTgsMTQgKzE5LDE1IEBACiAjaW5jbHVkZSA8bGludXgvYXRtZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bmV0L3NvY2suaD4JCS8qIGZvciBzb2NrX25vXyogKi8KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KIAogI2luY2x1ZGUgInJlc291cmNlcy5oIgogI2luY2x1ZGUgImNvbW1vbi5oIgkJLyogY29tbW9uIGZvciBQVkNzIGFuZCBTVkNzICovCiAjaW5jbHVkZSAic2lnbmFsaW5nLmgiCiAjaW5jbHVkZSAiYWRkci5oIgogCi1zdGF0aWMgaW50IHN2Y19jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgcHJvdG9jb2wsIGludCBrZXJuKTsKK3N0YXRpYyBpbnQgc3ZjX2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBwcm90b2NvbCwKKwkJICAgICAgaW50IGtlcm4pOwogCiAvKgogICogTm90ZTogc2luY2UgYWxsIHRoaXMgaXMgc3RpbGwgbmljZWx5IHN5bmNocm9uaXplZCB3aXRoIHRoZSBzaWduYWxpbmcgZGVtb24sCkBAIC0zNCwyNSArMzYsMjUgQEAKICAqLwogCiAKLXN0YXRpYyBpbnQgc3ZjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssaW50IGhvdykKK3N0YXRpYyBpbnQgc3ZjX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBob3cpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLQogc3RhdGljIHZvaWQgc3ZjX2Rpc2Nvbm5lY3Qoc3RydWN0IGF0bV92Y2MgKnZjYykKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBzb2NrICpzayA9IHNrX2F0bSh2Y2MpOwogCi0JcHJfZGVidWcoInN2Y19kaXNjb25uZWN0ICVwXG4iLHZjYyk7Ci0JaWYgKHRlc3RfYml0KEFUTV9WRl9SRUdJUywmdmNjLT5mbGFncykpIHsKKwlwcl9kZWJ1ZygiJXBcbiIsIHZjYyk7CisJaWYgKHRlc3RfYml0KEFUTV9WRl9SRUdJUywgJnZjYy0+ZmxhZ3MpKSB7CiAJCXByZXBhcmVfdG9fd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCXNpZ2RfZW5xKHZjYyxhc19jbG9zZSxOVUxMLE5VTEwsTlVMTCk7Ci0JCXdoaWxlICghdGVzdF9iaXQoQVRNX1ZGX1JFTEVBU0VELCZ2Y2MtPmZsYWdzKSAmJiBzaWdkKSB7CisJCXNpZ2RfZW5xKHZjYywgYXNfY2xvc2UsIE5VTEwsIE5VTEwsIE5VTEwpOworCQl3aGlsZSAoIXRlc3RfYml0KEFUTV9WRl9SRUxFQVNFRCwgJnZjYy0+ZmxhZ3MpICYmIHNpZ2QpIHsKIAkJCXNjaGVkdWxlKCk7Ci0JCQlwcmVwYXJlX3RvX3dhaXQoc2stPnNrX3NsZWVwLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOworCQkJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsCisJCQkJCVRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJfQogCQlmaW5pc2hfd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0KTsKIAl9CkBAIC02MSwzNSArNjMsMzUgQEAKIAl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSkpICE9IE5VTEwpIHsKIAkJYXRtX3JldHVybih2Y2MsIHNrYi0+dHJ1ZXNpemUpOwogCQlwcl9kZWJ1ZygiTElTVEVOIFJFTFxuIik7Ci0JCXNpZ2RfZW5xMihOVUxMLGFzX3JlamVjdCx2Y2MsTlVMTCxOVUxMLCZ2Y2MtPnFvcywwKTsKKwkJc2lnZF9lbnEyKE5VTEwsIGFzX3JlamVjdCwgdmNjLCBOVUxMLCBOVUxMLCAmdmNjLT5xb3MsIDApOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJfQogCWNsZWFyX2JpdChBVE1fVkZfUkVHSVMsICZ2Y2MtPmZsYWdzKTsKIAkvKiAuLi4gbWF5IHJldHJ5IGxhdGVyICovCiB9CiAKLQogc3RhdGljIGludCBzdmNfcmVsZWFzZShzdHJ1Y3Qgc29ja2V0ICpzb2NrKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBhdG1fdmNjICp2Y2M7CiAKLQlpZiAoc2spICB7CisJaWYgKHNrKSB7CiAJCXZjYyA9IEFUTV9TRChzb2NrKTsKLQkJcHJfZGVidWcoInN2Y19yZWxlYXNlICVwXG4iLCB2Y2MpOworCQlwcl9kZWJ1ZygiJXBcbiIsIHZjYyk7CiAJCWNsZWFyX2JpdChBVE1fVkZfUkVBRFksICZ2Y2MtPmZsYWdzKTsKLQkJLyogVkNDIHBvaW50ZXIgaXMgdXNlZCBhcyBhIHJlZmVyZW5jZSwgc28gd2UgbXVzdCBub3QgZnJlZSBpdAotCQkgICAodGhlcmVieSBzdWJqZWN0aW5nIGl0IHRvIHJlLXVzZSkgYmVmb3JlIGFsbCBwZW5kaW5nIGNvbm5lY3Rpb25zCi0JCSAgIGFyZSBjbG9zZWQgKi8KKwkJLyoKKwkJICogVkNDIHBvaW50ZXIgaXMgdXNlZCBhcyBhIHJlZmVyZW5jZSwKKwkJICogc28gd2UgbXVzdCBub3QgZnJlZSBpdCAodGhlcmVieSBzdWJqZWN0aW5nIGl0IHRvIHJlLXVzZSkKKwkJICogYmVmb3JlIGFsbCBwZW5kaW5nIGNvbm5lY3Rpb25zIGFyZSBjbG9zZWQKKwkJICovCiAJCXN2Y19kaXNjb25uZWN0KHZjYyk7CiAJCXZjY19yZWxlYXNlKHNvY2spOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotCi1zdGF0aWMgaW50IHN2Y19iaW5kKHN0cnVjdCBzb2NrZXQgKnNvY2ssc3RydWN0IHNvY2thZGRyICpzb2NrYWRkciwKLSAgICBpbnQgc29ja2FkZHJfbGVuKQorc3RhdGljIGludCBzdmNfYmluZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNvY2thZGRyLAorCQkgICAgaW50IHNvY2thZGRyX2xlbikKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKQEAgLTExNCwzOCArMTE2LDM3IEBACiAJCWVycm9yID0gLUVBRk5PU1VQUE9SVDsKIAkJZ290byBvdXQ7CiAJfQotCWNsZWFyX2JpdChBVE1fVkZfQk9VTkQsJnZjYy0+ZmxhZ3MpOworCWNsZWFyX2JpdChBVE1fVkZfQk9VTkQsICZ2Y2MtPmZsYWdzKTsKIAkgICAgLyogZmFpbGluZyByZWJpbmQgd2lsbCBraWxsIG9sZCBiaW5kaW5nICovCiAJLyogQEBAIGNoZWNrIG1lbW9yeSAoZGUpYWxsb2NhdGlvbiBvbiByZWJpbmQgKi8KLQlpZiAoIXRlc3RfYml0KEFUTV9WRl9IQVNRT1MsJnZjYy0+ZmxhZ3MpKSB7CisJaWYgKCF0ZXN0X2JpdChBVE1fVkZfSEFTUU9TLCAmdmNjLT5mbGFncykpIHsKIAkJZXJyb3IgPSAtRUJBREZEOwogCQlnb3RvIG91dDsKIAl9CiAJdmNjLT5sb2NhbCA9ICphZGRyOwogCXNldF9iaXQoQVRNX1ZGX1dBSVRJTkcsICZ2Y2MtPmZsYWdzKTsKIAlwcmVwYXJlX3RvX3dhaXQoc2stPnNrX3NsZWVwLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOwotCXNpZ2RfZW5xKHZjYyxhc19iaW5kLE5VTEwsTlVMTCwmdmNjLT5sb2NhbCk7CisJc2lnZF9lbnEodmNjLCBhc19iaW5kLCBOVUxMLCBOVUxMLCAmdmNjLT5sb2NhbCk7CiAJd2hpbGUgKHRlc3RfYml0KEFUTV9WRl9XQUlUSU5HLCAmdmNjLT5mbGFncykgJiYgc2lnZCkgewogCQlzY2hlZHVsZSgpOwogCQlwcmVwYXJlX3RvX3dhaXQoc2stPnNrX3NsZWVwLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOwogCX0KIAlmaW5pc2hfd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0KTsKLQljbGVhcl9iaXQoQVRNX1ZGX1JFR0lTLCZ2Y2MtPmZsYWdzKTsgLyogZG9lc24ndCBjb3VudCAqLworCWNsZWFyX2JpdChBVE1fVkZfUkVHSVMsICZ2Y2MtPmZsYWdzKTsgLyogZG9lc24ndCBjb3VudCAqLwogCWlmICghc2lnZCkgewogCQllcnJvciA9IC1FVU5BVENIOwogCQlnb3RvIG91dDsKIAl9CiAJaWYgKCFzay0+c2tfZXJyKQotCQlzZXRfYml0KEFUTV9WRl9CT1VORCwmdmNjLT5mbGFncyk7CisJCXNldF9iaXQoQVRNX1ZGX0JPVU5ELCAmdmNjLT5mbGFncyk7CiAJZXJyb3IgPSAtc2stPnNrX2VycjsKIG91dDoKIAlyZWxlYXNlX3NvY2soc2spOwogCXJldHVybiBlcnJvcjsKIH0KIAotCi1zdGF0aWMgaW50IHN2Y19jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvY2ssc3RydWN0IHNvY2thZGRyICpzb2NrYWRkciwKLSAgICBpbnQgc29ja2FkZHJfbGVuLGludCBmbGFncykKK3N0YXRpYyBpbnQgc3ZjX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpzb2NrYWRkciwKKwkJICAgICAgIGludCBzb2NrYWRkcl9sZW4sIGludCBmbGFncykKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKQEAgLTE1Myw3ICsxNTQsNyBAQAogCXN0cnVjdCBhdG1fdmNjICp2Y2MgPSBBVE1fU0Qoc29jayk7CiAJaW50IGVycm9yOwogCi0JcHJfZGVidWcoInN2Y19jb25uZWN0ICVwXG4iLHZjYyk7CisJcHJfZGVidWcoIiVwXG4iLCB2Y2MpOwogCWxvY2tfc29jayhzayk7CiAJaWYgKHNvY2thZGRyX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXN2YykpIHsKIAkJZXJyb3IgPSAtRUlOVkFMOwpAQCAtMjAxLDcgKzIwMiw3IEBACiAJCXZjYy0+cmVtb3RlID0gKmFkZHI7CiAJCXNldF9iaXQoQVRNX1ZGX1dBSVRJTkcsICZ2Y2MtPmZsYWdzKTsKIAkJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7Ci0JCXNpZ2RfZW5xKHZjYyxhc19jb25uZWN0LE5VTEwsTlVMTCwmdmNjLT5yZW1vdGUpOworCQlzaWdkX2VucSh2Y2MsIGFzX2Nvbm5lY3QsIE5VTEwsIE5VTEwsICZ2Y2MtPnJlbW90ZSk7CiAJCWlmIChmbGFncyAmIE9fTk9OQkxPQ0spIHsKIAkJCWZpbmlzaF93YWl0KHNrLT5za19zbGVlcCwgJndhaXQpOwogCQkJc29jay0+c3RhdGUgPSBTU19DT05ORUNUSU5HOwpAQCAtMjEyLDcgKzIxMyw4IEBACiAJCXdoaWxlICh0ZXN0X2JpdChBVE1fVkZfV0FJVElORywgJnZjYy0+ZmxhZ3MpICYmIHNpZ2QpIHsKIAkJCXNjaGVkdWxlKCk7CiAJCQlpZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7Ci0JCQkJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQkJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsCisJCQkJCQlUQVNLX0lOVEVSUlVQVElCTEUpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJcHJfZGVidWcoIipBQk9SVCpcbiIpOwpAQCAtMjI4LDIwICsyMzAsMjIgQEAKIAkJCSAqICAgS2VybmVsIDwtLW9rYXktLS0tIERlbW9uCiAJCQkgKiAgIEtlcm5lbCA8LS1jbG9zZS0tLSBEZW1vbgogCQkJICovCi0JCQlzaWdkX2VucSh2Y2MsYXNfY2xvc2UsTlVMTCxOVUxMLE5VTEwpOworCQkJc2lnZF9lbnEodmNjLCBhc19jbG9zZSwgTlVMTCwgTlVMTCwgTlVMTCk7CiAJCQl3aGlsZSAodGVzdF9iaXQoQVRNX1ZGX1dBSVRJTkcsICZ2Y2MtPmZsYWdzKSAmJiBzaWdkKSB7Ci0JCQkJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQkJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsCisJCQkJCQlUQVNLX0lOVEVSUlVQVElCTEUpOwogCQkJCXNjaGVkdWxlKCk7CiAJCQl9CiAJCQlpZiAoIXNrLT5za19lcnIpCi0JCQkJd2hpbGUgKCF0ZXN0X2JpdChBVE1fVkZfUkVMRUFTRUQsJnZjYy0+ZmxhZ3MpCi0JCQkJICAgICYmIHNpZ2QpIHsKLQkJCQkJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQkJd2hpbGUgKCF0ZXN0X2JpdChBVE1fVkZfUkVMRUFTRUQsICZ2Y2MtPmZsYWdzKSAmJgorCQkJCSAgICAgICBzaWdkKSB7CisJCQkJCXByZXBhcmVfdG9fd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0LAorCQkJCQkJCVRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCQkJCXNjaGVkdWxlKCk7CiAJCQkJfQotCQkJY2xlYXJfYml0KEFUTV9WRl9SRUdJUywmdmNjLT5mbGFncyk7Ci0JCQljbGVhcl9iaXQoQVRNX1ZGX1JFTEVBU0VELCZ2Y2MtPmZsYWdzKTsKLQkJCWNsZWFyX2JpdChBVE1fVkZfQ0xPU0UsJnZjYy0+ZmxhZ3MpOworCQkJY2xlYXJfYml0KEFUTV9WRl9SRUdJUywgJnZjYy0+ZmxhZ3MpOworCQkJY2xlYXJfYml0KEFUTV9WRl9SRUxFQVNFRCwgJnZjYy0+ZmxhZ3MpOworCQkJY2xlYXJfYml0KEFUTV9WRl9DTE9TRSwgJnZjYy0+ZmxhZ3MpOwogCQkJICAgIC8qIHdlJ3JlIGdvbmUgbm93IGJ1dCBtYXkgY29ubmVjdCBsYXRlciAqLwogCQkJZXJyb3IgPSAtRUlOVFI7CiAJCQlicmVhazsKQEAgLTI2OSwzNyArMjczLDM3IEBACiAvKgogICogI2VuZGlmCiAgKi8KLQlpZiAoIShlcnJvciA9IHZjY19jb25uZWN0KHNvY2ssIHZjYy0+aXRmLCB2Y2MtPnZwaSwgdmNjLT52Y2kpKSkKKwllcnJvciA9IHZjY19jb25uZWN0KHNvY2ssIHZjYy0+aXRmLCB2Y2MtPnZwaSwgdmNjLT52Y2kpOworCWlmICghZXJyb3IpCiAJCXNvY2stPnN0YXRlID0gU1NfQ09OTkVDVEVEOwogCWVsc2UKLQkJKHZvaWQpIHN2Y19kaXNjb25uZWN0KHZjYyk7CisJCSh2b2lkKXN2Y19kaXNjb25uZWN0KHZjYyk7CiBvdXQ6CiAJcmVsZWFzZV9zb2NrKHNrKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLQotc3RhdGljIGludCBzdmNfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvY2ssaW50IGJhY2tsb2cpCitzdGF0aWMgaW50IHN2Y19saXN0ZW4oc3RydWN0IHNvY2tldCAqc29jaywgaW50IGJhY2tsb2cpCiB7CiAJREVGSU5FX1dBSVQod2FpdCk7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IGF0bV92Y2MgKnZjYyA9IEFUTV9TRChzb2NrKTsKIAlpbnQgZXJyb3I7CiAKLQlwcl9kZWJ1Zygic3ZjX2xpc3RlbiAlcFxuIix2Y2MpOworCXByX2RlYnVnKCIlcFxuIiwgdmNjKTsKIAlsb2NrX3NvY2soc2spOwogCS8qIGxldCBzZXJ2ZXIgaGFuZGxlIGxpc3RlbiBvbiB1bmJvdW5kIHNvY2tldHMgKi8KLQlpZiAodGVzdF9iaXQoQVRNX1ZGX1NFU1NJT04sJnZjYy0+ZmxhZ3MpKSB7CisJaWYgKHRlc3RfYml0KEFUTV9WRl9TRVNTSU9OLCAmdmNjLT5mbGFncykpIHsKIAkJZXJyb3IgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAJaWYgKHRlc3RfYml0KEFUTV9WRl9MSVNURU4sICZ2Y2MtPmZsYWdzKSkgewogCQllcnJvciA9IC1FQUREUklOVVNFOwogCQlnb3RvIG91dDsKLSAgICAgICAgfQorCX0KIAlzZXRfYml0KEFUTV9WRl9XQUlUSU5HLCAmdmNjLT5mbGFncyk7CiAJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKLQlzaWdkX2VucSh2Y2MsYXNfbGlzdGVuLE5VTEwsTlVMTCwmdmNjLT5sb2NhbCk7CisJc2lnZF9lbnEodmNjLCBhc19saXN0ZW4sIE5VTEwsIE5VTEwsICZ2Y2MtPmxvY2FsKTsKIAl3aGlsZSAodGVzdF9iaXQoQVRNX1ZGX1dBSVRJTkcsICZ2Y2MtPmZsYWdzKSAmJiBzaWdkKSB7CiAJCXNjaGVkdWxlKCk7CiAJCXByZXBhcmVfdG9fd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CkBAIC0zMDksNyArMzEzLDcgQEAKIAkJZXJyb3IgPSAtRVVOQVRDSDsKIAkJZ290byBvdXQ7CiAJfQotCXNldF9iaXQoQVRNX1ZGX0xJU1RFTiwmdmNjLT5mbGFncyk7CisJc2V0X2JpdChBVE1fVkZfTElTVEVOLCAmdmNjLT5mbGFncyk7CiAJdmNjX2luc2VydF9zb2NrZXQoc2spOwogCXNrLT5za19tYXhfYWNrX2JhY2tsb2cgPSBiYWNrbG9nID4gMCA/IGJhY2tsb2cgOiBBVE1fQkFDS0xPR19ERUZBVUxUOwogCWVycm9yID0gLXNrLT5za19lcnI7CkBAIC0zMTgsOCArMzIyLDcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLQotc3RhdGljIGludCBzdmNfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvY2ssc3RydWN0IHNvY2tldCAqbmV3c29jayxpbnQgZmxhZ3MpCitzdGF0aWMgaW50IHN2Y19hY2NlcHQoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2tldCAqbmV3c29jaywgaW50IGZsYWdzKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0zMzYsMTUgKzMzOSwxNiBAQAogCiAJbmV3X3ZjYyA9IEFUTV9TRChuZXdzb2NrKTsKIAotCXByX2RlYnVnKCJzdmNfYWNjZXB0ICVwIC0+ICVwXG4iLG9sZF92Y2MsbmV3X3ZjYyk7CisJcHJfZGVidWcoIiVwIC0+ICVwXG4iLCBvbGRfdmNjLCBuZXdfdmNjKTsKIAl3aGlsZSAoMSkgewogCQlERUZJTkVfV0FJVCh3YWl0KTsKIAogCQlwcmVwYXJlX3RvX3dhaXQoc2stPnNrX3NsZWVwLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJd2hpbGUgKCEoc2tiID0gc2tiX2RlcXVldWUoJnNrLT5za19yZWNlaXZlX3F1ZXVlKSkgJiYKIAkJICAgICAgIHNpZ2QpIHsKLQkJCWlmICh0ZXN0X2JpdChBVE1fVkZfUkVMRUFTRUQsJm9sZF92Y2MtPmZsYWdzKSkgYnJlYWs7Ci0JCQlpZiAodGVzdF9iaXQoQVRNX1ZGX0NMT1NFLCZvbGRfdmNjLT5mbGFncykpIHsKKwkJCWlmICh0ZXN0X2JpdChBVE1fVkZfUkVMRUFTRUQsICZvbGRfdmNjLT5mbGFncykpCisJCQkJYnJlYWs7CisJCQlpZiAodGVzdF9iaXQoQVRNX1ZGX0NMT1NFLCAmb2xkX3ZjYy0+ZmxhZ3MpKSB7CiAJCQkJZXJyb3IgPSAtc2stPnNrX2VycjsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTM1OSw3ICszNjMsOCBAQAogCQkJCWVycm9yID0gLUVSRVNUQVJUU1lTOwogCQkJCWJyZWFrOwogCQkJfQotCQkJcHJlcGFyZV90b193YWl0KHNrLT5za19zbGVlcCwgJndhaXQsIFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCQlwcmVwYXJlX3RvX3dhaXQoc2stPnNrX3NsZWVwLCAmd2FpdCwKKwkJCQkJVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJfQogCQlmaW5pc2hfd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0KTsKIAkJaWYgKGVycm9yKQpAQCAtMzY4LDMxICszNzMsMzQgQEAKIAkJCWVycm9yID0gLUVVTkFUQ0g7CiAJCQlnb3RvIG91dDsKIAkJfQotCQltc2cgPSAoc3RydWN0IGF0bXN2Y19tc2cgKikgc2tiLT5kYXRhOworCQltc2cgPSAoc3RydWN0IGF0bXN2Y19tc2cgKilza2ItPmRhdGE7CiAJCW5ld192Y2MtPnFvcyA9IG1zZy0+cW9zOwotCQlzZXRfYml0KEFUTV9WRl9IQVNRT1MsJm5ld192Y2MtPmZsYWdzKTsKKwkJc2V0X2JpdChBVE1fVkZfSEFTUU9TLCAmbmV3X3ZjYy0+ZmxhZ3MpOwogCQluZXdfdmNjLT5yZW1vdGUgPSBtc2ctPnN2YzsKIAkJbmV3X3ZjYy0+bG9jYWwgPSBtc2ctPmxvY2FsOwogCQluZXdfdmNjLT5zYXAgPSBtc2ctPnNhcDsKIAkJZXJyb3IgPSB2Y2NfY29ubmVjdChuZXdzb2NrLCBtc2ctPnB2Yy5zYXBfYWRkci5pdGYsCi0JCQkJICAgIG1zZy0+cHZjLnNhcF9hZGRyLnZwaSwgbXNnLT5wdmMuc2FwX2FkZHIudmNpKTsKKwkJCQkgICAgbXNnLT5wdmMuc2FwX2FkZHIudnBpLAorCQkJCSAgICBtc2ctPnB2Yy5zYXBfYWRkci52Y2kpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCXNrLT5za19hY2tfYmFja2xvZy0tOwogCQlpZiAoZXJyb3IpIHsKLQkJCXNpZ2RfZW5xMihOVUxMLGFzX3JlamVjdCxvbGRfdmNjLE5VTEwsTlVMTCwKLQkJCSAgICAmb2xkX3ZjYy0+cW9zLGVycm9yKTsKKwkJCXNpZ2RfZW5xMihOVUxMLCBhc19yZWplY3QsIG9sZF92Y2MsIE5VTEwsIE5VTEwsCisJCQkJICAmb2xkX3ZjYy0+cW9zLCBlcnJvcik7CiAJCQllcnJvciA9IGVycm9yID09IC1FQUdBSU4gPyAtRUJVU1kgOiBlcnJvcjsKIAkJCWdvdG8gb3V0OwogCQl9CiAJCS8qIHdhaXQgc2hvdWxkIGJlIHNob3J0LCBzbyB3ZSBpZ25vcmUgdGhlIG5vbi1ibG9ja2luZyBmbGFnICovCiAJCXNldF9iaXQoQVRNX1ZGX1dBSVRJTkcsICZuZXdfdmNjLT5mbGFncyk7Ci0JCXByZXBhcmVfdG9fd2FpdChza19hdG0obmV3X3ZjYyktPnNrX3NsZWVwLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOwotCQlzaWdkX2VucShuZXdfdmNjLGFzX2FjY2VwdCxvbGRfdmNjLE5VTEwsTlVMTCk7CisJCXByZXBhcmVfdG9fd2FpdChza19hdG0obmV3X3ZjYyktPnNrX3NsZWVwLCAmd2FpdCwKKwkJCQlUQVNLX1VOSU5URVJSVVBUSUJMRSk7CisJCXNpZ2RfZW5xKG5ld192Y2MsIGFzX2FjY2VwdCwgb2xkX3ZjYywgTlVMTCwgTlVMTCk7CiAJCXdoaWxlICh0ZXN0X2JpdChBVE1fVkZfV0FJVElORywgJm5ld192Y2MtPmZsYWdzKSAmJiBzaWdkKSB7CiAJCQlyZWxlYXNlX3NvY2soc2spOwogCQkJc2NoZWR1bGUoKTsKIAkJCWxvY2tfc29jayhzayk7Ci0JCQlwcmVwYXJlX3RvX3dhaXQoc2tfYXRtKG5ld192Y2MpLT5za19zbGVlcCwgJndhaXQsIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKKwkJCXByZXBhcmVfdG9fd2FpdChza19hdG0obmV3X3ZjYyktPnNrX3NsZWVwLCAmd2FpdCwKKwkJCQkJVEFTS19VTklOVEVSUlVQVElCTEUpOwogCQl9CiAJCWZpbmlzaF93YWl0KHNrX2F0bShuZXdfdmNjKS0+c2tfc2xlZXAsICZ3YWl0KTsKIAkJaWYgKCFzaWdkKSB7CkBAIC00MTIsMzkgKzQyMCwzNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotCi1zdGF0aWMgaW50IHN2Y19nZXRuYW1lKHN0cnVjdCBzb2NrZXQgKnNvY2ssc3RydWN0IHNvY2thZGRyICpzb2NrYWRkciwKLSAgICBpbnQgKnNvY2thZGRyX2xlbixpbnQgcGVlcikKK3N0YXRpYyBpbnQgc3ZjX2dldG5hbWUoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNvY2thZGRyICpzb2NrYWRkciwKKwkJICAgICAgIGludCAqc29ja2FkZHJfbGVuLCBpbnQgcGVlcikKIHsKIAlzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjICphZGRyOwogCiAJKnNvY2thZGRyX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjKTsKIAlhZGRyID0gKHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMgKikgc29ja2FkZHI7Ci0JbWVtY3B5KGFkZHIscGVlciA/ICZBVE1fU0Qoc29jayktPnJlbW90ZSA6ICZBVE1fU0Qoc29jayktPmxvY2FsLAotCSAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXN2YykpOworCW1lbWNweShhZGRyLCBwZWVyID8gJkFUTV9TRChzb2NrKS0+cmVtb3RlIDogJkFUTV9TRChzb2NrKS0+bG9jYWwsCisJICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtc3ZjKSk7CiAJcmV0dXJuIDA7CiB9CiAKLQotaW50IHN2Y19jaGFuZ2VfcW9zKHN0cnVjdCBhdG1fdmNjICp2Y2Msc3RydWN0IGF0bV9xb3MgKnFvcykKK2ludCBzdmNfY2hhbmdlX3FvcyhzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3QgYXRtX3FvcyAqcW9zKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNrX2F0bSh2Y2MpOwogCURFRklORV9XQUlUKHdhaXQpOwogCiAJc2V0X2JpdChBVE1fVkZfV0FJVElORywgJnZjYy0+ZmxhZ3MpOwogCXByZXBhcmVfdG9fd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0Jc2lnZF9lbnEyKHZjYyxhc19tb2RpZnksTlVMTCxOVUxMLCZ2Y2MtPmxvY2FsLHFvcywwKTsKKwlzaWdkX2VucTIodmNjLCBhc19tb2RpZnksIE5VTEwsIE5VTEwsICZ2Y2MtPmxvY2FsLCBxb3MsIDApOwogCXdoaWxlICh0ZXN0X2JpdChBVE1fVkZfV0FJVElORywgJnZjYy0+ZmxhZ3MpICYmCiAJICAgICAgICF0ZXN0X2JpdChBVE1fVkZfUkVMRUFTRUQsICZ2Y2MtPmZsYWdzKSAmJiBzaWdkKSB7CiAJCXNjaGVkdWxlKCk7CiAJCXByZXBhcmVfdG9fd2FpdChzay0+c2tfc2xlZXAsICZ3YWl0LCBUQVNLX1VOSU5URVJSVVBUSUJMRSk7CiAJfQogCWZpbmlzaF93YWl0KHNrLT5za19zbGVlcCwgJndhaXQpOwotCWlmICghc2lnZCkgcmV0dXJuIC1FVU5BVENIOworCWlmICghc2lnZCkKKwkJcmV0dXJuIC1FVU5BVENIOwogCXJldHVybiAtc2stPnNrX2VycjsKIH0KIAotCiBzdGF0aWMgaW50IHN2Y19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAJCQkgIGNoYXIgX191c2VyICpvcHR2YWwsIHVuc2lnbmVkIGludCBvcHRsZW4pCiB7CkBAIC00NTQsMzcgKzQ2MCwzNSBAQAogCiAJbG9ja19zb2NrKHNrKTsKIAlzd2l0Y2ggKG9wdG5hbWUpIHsKLQkJY2FzZSBTT19BVE1TQVA6Ci0JCQlpZiAobGV2ZWwgIT0gU09MX0FUTSB8fCBvcHRsZW4gIT0gc2l6ZW9mKHN0cnVjdCBhdG1fc2FwKSkgewotCQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmdmNjLT5zYXAsIG9wdHZhbCwgb3B0bGVuKSkgewotCQkJCWVycm9yID0gLUVGQVVMVDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCXNldF9iaXQoQVRNX1ZGX0hBU1NBUCwgJnZjYy0+ZmxhZ3MpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU09fTVVMVElQT0lOVDoKLQkJCWlmIChsZXZlbCAhPSBTT0xfQVRNIHx8IG9wdGxlbiAhPSBzaXplb2YoaW50KSkgewotCQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWlmIChnZXRfdXNlcih2YWx1ZSwgKGludCBfX3VzZXIgKikgb3B0dmFsKSkgewotCQkJCWVycm9yID0gLUVGQVVMVDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWlmICh2YWx1ZSA9PSAxKSB7Ci0JCQkJc2V0X2JpdChBVE1fVkZfU0VTU0lPTiwgJnZjYy0+ZmxhZ3MpOwotCQkJfSBlbHNlIGlmICh2YWx1ZSA9PSAwKSB7Ci0JCQkJY2xlYXJfYml0KEFUTV9WRl9TRVNTSU9OLCAmdmNjLT5mbGFncyk7Ci0JCQl9IGVsc2UgewotCQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZXJyb3IgPSB2Y2Nfc2V0c29ja29wdChzb2NrLCBsZXZlbCwgb3B0bmFtZSwKLQkJCQkJICAgICAgIG9wdHZhbCwgb3B0bGVuKTsKKwljYXNlIFNPX0FUTVNBUDoKKwkJaWYgKGxldmVsICE9IFNPTF9BVE0gfHwgb3B0bGVuICE9IHNpemVvZihzdHJ1Y3QgYXRtX3NhcCkpIHsKKwkJCWVycm9yID0gLUVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChjb3B5X2Zyb21fdXNlcigmdmNjLT5zYXAsIG9wdHZhbCwgb3B0bGVuKSkgeworCQkJZXJyb3IgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKwkJc2V0X2JpdChBVE1fVkZfSEFTU0FQLCAmdmNjLT5mbGFncyk7CisJCWJyZWFrOworCWNhc2UgU09fTVVMVElQT0lOVDoKKwkJaWYgKGxldmVsICE9IFNPTF9BVE0gfHwgb3B0bGVuICE9IHNpemVvZihpbnQpKSB7CisJCQllcnJvciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoZ2V0X3VzZXIodmFsdWUsIChpbnQgX191c2VyICopb3B0dmFsKSkgeworCQkJZXJyb3IgPSAtRUZBVUxUOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKHZhbHVlID09IDEpCisJCQlzZXRfYml0KEFUTV9WRl9TRVNTSU9OLCAmdmNjLT5mbGFncyk7CisJCWVsc2UgaWYgKHZhbHVlID09IDApCisJCQljbGVhcl9iaXQoQVRNX1ZGX1NFU1NJT04sICZ2Y2MtPmZsYWdzKTsKKwkJZWxzZQorCQkJZXJyb3IgPSAtRUlOVkFMOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnJvciA9IHZjY19zZXRzb2Nrb3B0KHNvY2ssIGxldmVsLCBvcHRuYW1lLCBvcHR2YWwsIG9wdGxlbik7CiAJfQogCiBvdXQ6CkBAIC00OTIsOSArNDk2LDggQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLQotc3RhdGljIGludCBzdmNfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzb2NrLGludCBsZXZlbCxpbnQgb3B0bmFtZSwKLSAgICBjaGFyIF9fdXNlciAqb3B0dmFsLGludCBfX3VzZXIgKm9wdGxlbikKK3N0YXRpYyBpbnQgc3ZjX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwKKwkJCSAgY2hhciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKQogewogCXN0cnVjdCBzb2NrICpzayA9IHNvY2stPnNrOwogCWludCBlcnJvciA9IDAsIGxlbjsKQEAgLTUyMSw3ICs1MjQsNiBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotCiBzdGF0aWMgaW50IHN2Y19hZGRwYXJ0eShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNvY2thZGRyLAogCQkJaW50IHNvY2thZGRyX2xlbiwgaW50IGZsYWdzKQogewpAQCAtNTQwLDcgKzU0Miw3IEBACiAJCWVycm9yID0gLUVJTlBST0dSRVNTOwogCQlnb3RvIG91dDsKIAl9Ci0JcHJfZGVidWcoInN2Y19hZGRwYXJ0eSBhZGRlZCB3YWl0IHF1ZXVlXG4iKTsKKwlwcl9kZWJ1ZygiYWRkZWQgd2FpdCBxdWV1ZVxuIik7CiAJd2hpbGUgKHRlc3RfYml0KEFUTV9WRl9XQUlUSU5HLCAmdmNjLT5mbGFncykgJiYgc2lnZCkgewogCQlzY2hlZHVsZSgpOwogCQlwcmVwYXJlX3RvX3dhaXQoc2stPnNrX3NsZWVwLCAmd2FpdCwgVEFTS19JTlRFUlJVUFRJQkxFKTsKQEAgLTU1Miw3ICs1NTQsNiBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotCiBzdGF0aWMgaW50IHN2Y19kcm9wcGFydHkoc3RydWN0IHNvY2tldCAqc29jaywgaW50IGVwX3JlZikKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKQEAgLTU3OSw3ICs1ODAsNiBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotCiBzdGF0aWMgaW50IHN2Y19pb2N0bChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpbnQgZXJyb3IsIGVwX3JlZjsKQEAgLTU4NywyOSArNTg3LDMxIEBACiAJc3RydWN0IGF0bV92Y2MgKnZjYyA9IEFUTV9TRChzb2NrKTsKIAogCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgQVRNX0FERFBBUlRZOgotCQkJaWYgKCF0ZXN0X2JpdChBVE1fVkZfU0VTU0lPTiwgJnZjYy0+ZmxhZ3MpKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZzYSwgKHZvaWQgX191c2VyICopIGFyZywgc2l6ZW9mKHNhKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQllcnJvciA9IHN2Y19hZGRwYXJ0eShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZzYSwgc2l6ZW9mKHNhKSwgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSBBVE1fRFJPUFBBUlRZOgotCQkJaWYgKCF0ZXN0X2JpdChBVE1fVkZfU0VTU0lPTiwgJnZjYy0+ZmxhZ3MpKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZlcF9yZWYsICh2b2lkIF9fdXNlciAqKSBhcmcsIHNpemVvZihpbnQpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWVycm9yID0gc3ZjX2Ryb3BwYXJ0eShzb2NrLCBlcF9yZWYpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQllcnJvciA9IHZjY19pb2N0bChzb2NrLCBjbWQsIGFyZyk7CisJY2FzZSBBVE1fQUREUEFSVFk6CisJCWlmICghdGVzdF9iaXQoQVRNX1ZGX1NFU1NJT04sICZ2Y2MtPmZsYWdzKSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoY29weV9mcm9tX3VzZXIoJnNhLCAodm9pZCBfX3VzZXIgKikgYXJnLCBzaXplb2Yoc2EpKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQllcnJvciA9IHN2Y19hZGRwYXJ0eShzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJnNhLCBzaXplb2Yoc2EpLAorCQkJCSAgICAgMCk7CisJCWJyZWFrOworCWNhc2UgQVRNX0RST1BQQVJUWToKKwkJaWYgKCF0ZXN0X2JpdChBVE1fVkZfU0VTU0lPTiwgJnZjYy0+ZmxhZ3MpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChjb3B5X2Zyb21fdXNlcigmZXBfcmVmLCAodm9pZCBfX3VzZXIgKikgYXJnLCBzaXplb2YoaW50KSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJZXJyb3IgPSBzdmNfZHJvcHBhcnR5KHNvY2ssIGVwX3JlZik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm9yID0gdmNjX2lvY3RsKHNvY2ssIGNtZCwgYXJnKTsKIAl9CiAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCi1zdGF0aWMgaW50IHN2Y19jb21wYXRfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IHN2Y19jb21wYXRfaW9jdGwoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAkvKiBUaGUgZGVmaW5pdGlvbiBvZiBBVE1fQUREUEFSVFkgdXNlcyB0aGUgc2l6ZSBvZiBzdHJ1Y3QgYXRtX2lvYnVmLgogCSAgIEJ1dCBhY3R1YWxseSBpdCB0YWtlcyBhIHN0cnVjdCBzb2NrYWRkcl9hdG1zdmMsIHdoaWNoIGRvZXNuJ3QgbmVlZApAQCAtNjYwLDEzICs2NjIsMTMgQEAKIAogCXNvY2stPm9wcyA9ICZzdmNfcHJvdG9fb3BzOwogCWVycm9yID0gdmNjX2NyZWF0ZShuZXQsIHNvY2ssIHByb3RvY29sLCBBRl9BVE1TVkMpOwotCWlmIChlcnJvcikgcmV0dXJuIGVycm9yOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOwogCUFUTV9TRChzb2NrKS0+bG9jYWwuc2FzX2ZhbWlseSA9IEFGX0FUTVNWQzsKIAlBVE1fU0Qoc29jayktPnJlbW90ZS5zYXNfZmFtaWx5ID0gQUZfQVRNU1ZDOwogCXJldHVybiAwOwogfQogCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseSBzdmNfZmFtaWx5X29wcyA9IHsKIAkuZmFtaWx5ID0gUEZfQVRNU1ZDLAogCS5jcmVhdGUgPSBzdmNfY3JlYXRlLApkaWZmIC0tZ2l0IGEvbmV0L2F4MjUvYWZfYXgyNS5jIGIvbmV0L2F4MjUvYWZfYXgyNS5jCmluZGV4IDU1ODhiYTYuLmE1YmVlZGYgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2FmX2F4MjUuYworKysgYi9uZXQvYXgyNS9hZl9heDI1LmMKQEAgLTE4NjMsMjUgKzE4NjMsMTMgQEAKIHN0YXRpYyB2b2lkICpheDI1X2luZm9fc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogCV9fYWNxdWlyZXMoYXgyNV9saXN0X2xvY2spCiB7Ci0Jc3RydWN0IGF4MjVfY2IgKmF4MjU7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0JaW50IGkgPSAwOwotCiAJc3Bpbl9sb2NrX2JoKCZheDI1X2xpc3RfbG9jayk7Ci0JYXgyNV9mb3JfZWFjaChheDI1LCBub2RlLCAmYXgyNV9saXN0KSB7Ci0JCWlmIChpID09ICpwb3MpCi0JCQlyZXR1cm4gYXgyNTsKLQkJKytpOwotCX0KLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gc2VxX2hsaXN0X3N0YXJ0KCZheDI1X2xpc3QsICpwb3MpOwogfQogCiBzdGF0aWMgdm9pZCAqYXgyNV9pbmZvX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCSsrKnBvczsKLQotCXJldHVybiBobGlzdF9lbnRyeSggKChzdHJ1Y3QgYXgyNV9jYiAqKXYpLT5heDI1X25vZGUubmV4dCwKLQkJCSAgICBzdHJ1Y3QgYXgyNV9jYiwgYXgyNV9ub2RlKTsKKwlyZXR1cm4gc2VxX2hsaXN0X25leHQodiwgJmF4MjVfbGlzdCwgcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgYXgyNV9pbmZvX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCkBAIC0xODkyLDcgKzE4ODAsNyBAQAogCiBzdGF0aWMgaW50IGF4MjVfaW5mb19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewotCWF4MjVfY2IgKmF4MjUgPSB2OworCWF4MjVfY2IgKmF4MjUgPSBobGlzdF9lbnRyeSh2LCBzdHJ1Y3QgYXgyNV9jYiwgYXgyNV9ub2RlKTsKIAljaGFyIGJ1ZlsxMV07CiAJaW50IGs7CiAKZGlmZiAtLWdpdCBhL25ldC9heDI1L2F4MjVfdWlkLmMgYi9uZXQvYXgyNS9heDI1X3VpZC5jCmluZGV4IDgzMmJjZjAuLjlmMTNmNmUgMTAwNjQ0Ci0tLSBhL25ldC9heDI1L2F4MjVfdWlkLmMKKysrIGIvbmV0L2F4MjUvYXgyNV91aWQuYwpAQCAtMTQ2LDMxICsxNDYsMTMgQEAKIHN0YXRpYyB2b2lkICpheDI1X3VpZF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogCV9fYWNxdWlyZXMoYXgyNV91aWRfbG9jaykKIHsKLQlzdHJ1Y3QgYXgyNV91aWRfYXNzb2MgKnB0OwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCWludCBpID0gMTsKLQogCXJlYWRfbG9jaygmYXgyNV91aWRfbG9jayk7Ci0KLQlpZiAoKnBvcyA9PSAwKQotCQlyZXR1cm4gU0VRX1NUQVJUX1RPS0VOOwotCi0JYXgyNV91aWRfZm9yX2VhY2gocHQsIG5vZGUsICZheDI1X3VpZF9saXN0KSB7Ci0JCWlmIChpID09ICpwb3MpCi0JCQlyZXR1cm4gcHQ7Ci0JCSsraTsKLQl9Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIHNlcV9obGlzdF9zdGFydF9oZWFkKCZheDI1X3VpZF9saXN0LCAqcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgKmF4MjVfdWlkX3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQkrKypwb3M7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQlyZXR1cm4gYXgyNV91aWRfbGlzdC5maXJzdDsKLQllbHNlCi0JCXJldHVybiBobGlzdF9lbnRyeSgoKGF4MjVfdWlkX2Fzc29jICopdiktPnVpZF9ub2RlLm5leHQsCi0JCQkgICBheDI1X3VpZF9hc3NvYywgdWlkX25vZGUpOworCXJldHVybiBzZXFfaGxpc3RfbmV4dCh2LCAmYXgyNV91aWRfbGlzdCwgcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgYXgyNV91aWRfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCkBAIC0xODYsOCArMTY4LDkgQEAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCiAJCXNlcV9wcmludGYoc2VxLCAiUG9saWN5OiAlZFxuIiwgYXgyNV91aWRfcG9saWN5KTsKIAllbHNlIHsKLQkJc3RydWN0IGF4MjVfdWlkX2Fzc29jICpwdCA9IHY7CisJCXN0cnVjdCBheDI1X3VpZF9hc3NvYyAqcHQ7CiAKKwkJcHQgPSBobGlzdF9lbnRyeSh2LCBzdHJ1Y3QgYXgyNV91aWRfYXNzb2MsIHVpZF9ub2RlKTsKIAkJc2VxX3ByaW50ZihzZXEsICIlNmQgJXNcbiIsIHB0LT51aWQsIGF4MmFzYyhidWYsICZwdC0+Y2FsbCkpOwogCX0KIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYm5lcC9uZXRkZXYuYyBiL25ldC9ibHVldG9vdGgvYm5lcC9uZXRkZXYuYwppbmRleCAyNmZiODMxLi5iNjIzNGI3IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2JuZXAvbmV0ZGV2LmMKKysrIGIvbmV0L2JsdWV0b290aC9ibmVwL25ldGRldi5jCkBAIC02NCw3ICs2NCw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlpbnQgc2l6ZTsKIAotCUJUX0RCRygiJXMgbWNfY291bnQgJWQiLCBkZXYtPm5hbWUsIGRldi0+bWNfY291bnQpOworCUJUX0RCRygiJXMgbWNfY291bnQgJWQiLCBkZXYtPm5hbWUsIG5ldGRldl9tY19jb3VudChkZXYpKTsKIAogCXNpemUgPSBzaXplb2YoKnIpICsgKEJORVBfTUFYX01VTFRJQ0FTVF9GSUxURVJTICsgMSkgKiBFVEhfQUxFTiAqIDI7CiAJc2tiICA9IGFsbG9jX3NrYihzaXplLCBHRlBfQVRPTUlDKTsKQEAgLTk3LDcgKzk3LDkgQEAKIAogCQkvKiBGSVhNRTogV2Ugc2hvdWxkIGdyb3VwIGFkZHJlc3NlcyBoZXJlLiAqLwogCi0JCWZvciAoaSA9IDA7IGkgPCBkZXYtPm1jX2NvdW50ICYmIGkgPCBCTkVQX01BWF9NVUxUSUNBU1RfRklMVEVSUzsgaSsrKSB7CisJCWZvciAoaSA9IDA7CisJCSAgICAgaSA8IG5ldGRldl9tY19jb3VudChkZXYpICYmIGkgPCBCTkVQX01BWF9NVUxUSUNBU1RfRklMVEVSUzsKKwkJICAgICBpKyspIHsKIAkJCW1lbWNweShfX3NrYl9wdXQoc2tiLCBFVEhfQUxFTiksIGRtaS0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKIAkJCW1lbWNweShfX3NrYl9wdXQoc2tiLCBFVEhfQUxFTiksIGRtaS0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKIAkJCWRtaSA9IGRtaS0+bmV4dDsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvY210cC9jYXBpLmMgYi9uZXQvYmx1ZXRvb3RoL2NtdHAvY2FwaS5jCmluZGV4IDk3ZjhkNjguLjM0ODdjZmUgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvY210cC9jYXBpLmMKKysrIGIvbmV0L2JsdWV0b290aC9jbXRwL2NhcGkuYwpAQCAtMjEsNyArMjEsOCBAQAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCisjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpAQCAtNTE2LDMzICs1MTcsMzcgQEAKIAlyZXR1cm4gIkNBUEkgTWVzc2FnZSBUcmFuc3BvcnQgUHJvdG9jb2wiOwogfQogCi1zdGF0aWMgaW50IGNtdHBfY3RyX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LCBpbnQgKmVvZiwgc3RydWN0IGNhcGlfY3RyICpjdHJsKQorc3RhdGljIGludCBjbXRwX3Byb2Nfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CisJc3RydWN0IGNhcGlfY3RyICpjdHJsID0gbS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgY210cF9zZXNzaW9uICpzZXNzaW9uID0gY3RybC0+ZHJpdmVyZGF0YTsKIAlzdHJ1Y3QgY210cF9hcHBsaWNhdGlvbiAqYXBwOwogCXN0cnVjdCBsaXN0X2hlYWQgKnAsICpuOwotCWludCBsZW4gPSAwOwogCi0JbGVuICs9IHNwcmludGYocGFnZSArIGxlbiwgIiVzXG5cbiIsIGNtdHBfcHJvY2luZm8oY3RybCkpOwotCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJhZGRyICVzXG4iLCBzZXNzaW9uLT5uYW1lKTsKLQlsZW4gKz0gc3ByaW50ZihwYWdlICsgbGVuLCAiY3RybCAlZFxuIiwgc2Vzc2lvbi0+bnVtKTsKKwlzZXFfcHJpbnRmKG0sICIlc1xuXG4iLCBjbXRwX3Byb2NpbmZvKGN0cmwpKTsKKwlzZXFfcHJpbnRmKG0sICJhZGRyICVzXG4iLCBzZXNzaW9uLT5uYW1lKTsKKwlzZXFfcHJpbnRmKG0sICJjdHJsICVkXG4iLCBzZXNzaW9uLT5udW0pOwogCiAJbGlzdF9mb3JfZWFjaF9zYWZlKHAsIG4sICZzZXNzaW9uLT5hcHBsaWNhdGlvbnMpIHsKIAkJYXBwID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgY210cF9hcHBsaWNhdGlvbiwgbGlzdCk7Ci0JCWxlbiArPSBzcHJpbnRmKHBhZ2UgKyBsZW4sICJhcHBsICVkIC0+ICVkXG4iLCBhcHAtPmFwcGwsIGFwcC0+bWFwcGluZyk7CisJCXNlcV9wcmludGYobSwgImFwcGwgJWQgLT4gJWRcbiIsIGFwcC0+YXBwbCwgYXBwLT5tYXBwaW5nKTsKIAl9CiAKLQlpZiAob2ZmICsgY291bnQgPj0gbGVuKQotCQkqZW9mID0gMTsKLQotCWlmIChsZW4gPCBvZmYpCi0JCXJldHVybiAwOwotCi0JKnN0YXJ0ID0gcGFnZSArIG9mZjsKLQotCXJldHVybiAoKGNvdW50IDwgbGVuIC0gb2ZmKSA/IGNvdW50IDogbGVuIC0gb2ZmKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjbXRwX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgY210cF9wcm9jX3Nob3csIFBERShpbm9kZSktPmRhdGEpOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjbXRwX3Byb2NfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gY210cF9wcm9jX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKK307CiAKIGludCBjbXRwX2F0dGFjaF9kZXZpY2Uoc3RydWN0IGNtdHBfc2Vzc2lvbiAqc2Vzc2lvbikKIHsKQEAgLTU4Miw3ICs1ODcsNyBAQAogCXNlc3Npb24tPmN0cmwuc2VuZF9tZXNzYWdlICA9IGNtdHBfc2VuZF9tZXNzYWdlOwogCiAJc2Vzc2lvbi0+Y3RybC5wcm9jaW5mbyAgICAgID0gY210cF9wcm9jaW5mbzsKLQlzZXNzaW9uLT5jdHJsLmN0cl9yZWFkX3Byb2MgPSBjbXRwX2N0cl9yZWFkX3Byb2M7CisJc2Vzc2lvbi0+Y3RybC5wcm9jX2ZvcHMgPSAmY210cF9wcm9jX2ZvcHM7CiAKIAlpZiAoYXR0YWNoX2NhcGlfY3RyKCZzZXNzaW9uLT5jdHJsKSA8IDApIHsKIAkJQlRfRVJSKCJDYW4ndCBhdHRhY2ggbmV3IGNvbnRyb2xsZXIiKTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwppbmRleCA5NGJhMzQ5Li40YWQyMzE5IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCkBAIC00OTEsNiArNDkxLDEwIEBACiAJaWYgKHRlc3RfYml0KEhDSV9RVUlSS19SQVdfREVWSUNFLCAmaGRldi0+cXVpcmtzKSkKIAkJc2V0X2JpdChIQ0lfUkFXLCAmaGRldi0+ZmxhZ3MpOwogCisJLyogVHJlYXQgYWxsIG5vbiBCUi9FRFIgY29udHJvbGxlcnMgYXMgcmF3IGRldmljZXMgZm9yIG5vdyAqLworCWlmIChoZGV2LT5kZXZfdHlwZSAhPSBIQ0lfQlJFRFIpCisJCXNldF9iaXQoSENJX1JBVywgJmhkZXYtPmZsYWdzKTsKKwogCWlmIChoZGV2LT5vcGVuKGhkZXYpKSB7CiAJCXJldCA9IC1FSU87CiAJCWdvdG8gZG9uZTsKQEAgLTc5Nyw3ICs4MDEsNyBAQAogCiAJc3RyY3B5KGRpLm5hbWUsIGhkZXYtPm5hbWUpOwogCWRpLmJkYWRkciAgID0gaGRldi0+YmRhZGRyOwotCWRpLnR5cGUgICAgID0gaGRldi0+dHlwZTsKKwlkaS50eXBlICAgICA9IChoZGV2LT5idXMgJiAweDBmKSB8IChoZGV2LT5kZXZfdHlwZSA8PCA0KTsKIAlkaS5mbGFncyAgICA9IGhkZXYtPmZsYWdzOwogCWRpLnBrdF90eXBlID0gaGRldi0+cGt0X3R5cGU7CiAJZGkuYWNsX210dSAgPSBoZGV2LT5hY2xfbXR1OwpAQCAtODY5LDggKzg3Myw4IEBACiAJc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZoY2lfZGV2X2xpc3QsICpwOwogCWludCBpLCBpZCA9IDA7CiAKLQlCVF9EQkcoIiVwIG5hbWUgJXMgdHlwZSAlZCBvd25lciAlcCIsIGhkZXYsIGhkZXYtPm5hbWUsCi0JCQkJCQloZGV2LT50eXBlLCBoZGV2LT5vd25lcik7CisJQlRfREJHKCIlcCBuYW1lICVzIGJ1cyAlZCBvd25lciAlcCIsIGhkZXYsIGhkZXYtPm5hbWUsCisJCQkJCQloZGV2LT5idXMsIGhkZXYtPm93bmVyKTsKIAogCWlmICghaGRldi0+b3BlbiB8fCAhaGRldi0+Y2xvc2UgfHwgIWhkZXYtPmRlc3RydWN0KQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTk0Niw3ICs5NTAsNyBAQAogewogCWludCBpOwogCi0JQlRfREJHKCIlcCBuYW1lICVzIHR5cGUgJWQiLCBoZGV2LCBoZGV2LT5uYW1lLCBoZGV2LT50eXBlKTsKKwlCVF9EQkcoIiVwIG5hbWUgJXMgYnVzICVkIiwgaGRldiwgaGRldi0+bmFtZSwgaGRldi0+YnVzKTsKIAogCXdyaXRlX2xvY2tfYmgoJmhjaV9kZXZfbGlzdF9sb2NrKTsKIAlsaXN0X2RlbCgmaGRldi0+bGlzdCk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwppbmRleCA1OTJkYTVjLi42YzU3ZmM3IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKQEAgLTE2OTgsNiArMTY5OCw3IEBACiAJCWhjaV9jb25uX2FkZF9zeXNmcyhjb25uKTsKIAkJYnJlYWs7CiAKKwljYXNlIDB4MTE6CS8qIFVuc3VwcG9ydGVkIEZlYXR1cmUgb3IgUGFyYW1ldGVyIFZhbHVlICovCiAJY2FzZSAweDFjOgkvKiBTQ08gaW50ZXJ2YWwgcmVqZWN0ZWQgKi8KIAljYXNlIDB4MWE6CS8qIFVuc3VwcG9ydGVkIFJlbW90ZSBGZWF0dXJlICovCiAJY2FzZSAweDFmOgkvKiBVbnNwZWNpZmllZCBlcnJvciAqLwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9oY2lfc29jay5jIGIvbmV0L2JsdWV0b290aC9oY2lfc29jay5jCmluZGV4IDY4OGNmZWIuLjM4ZjA4ZjYgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX3NvY2suYworKysgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zb2NrLmMKQEAgLTMyOSw2ICszMjksOSBAQAogCX0KIAogCWlmIChtYXNrICYgSENJX0NNU0dfVFNUQU1QKSB7CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCQlzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgY3R2OworI2VuZGlmCiAJCXN0cnVjdCB0aW1ldmFsIHR2OwogCQl2b2lkICpkYXRhOwogCQlpbnQgbGVuOwpAQCAtMzM5LDcgKzM0Miw2IEBACiAJCWxlbiA9IHNpemVvZih0dik7CiAjaWZkZWYgQ09ORklHX0NPTVBBVAogCQlpZiAobXNnLT5tc2dfZmxhZ3MgJiBNU0dfQ01TR19DT01QQVQpIHsKLQkJCXN0cnVjdCBjb21wYXRfdGltZXZhbCBjdHY7CiAJCQljdHYudHZfc2VjID0gdHYudHZfc2VjOwogCQkJY3R2LnR2X3VzZWMgPSB0di50dl91c2VjOwogCQkJZGF0YSA9ICZjdHY7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jIGIvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwppbmRleCAyYmM2ZjZhLi4xYTc5YTZjIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKQEAgLTIsNiArMiw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogCiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4KICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmg+CkBAIC05LDYgKzEwLDkgQEAKIHN0cnVjdCBjbGFzcyAqYnRfY2xhc3MgPSBOVUxMOwogRVhQT1JUX1NZTUJPTF9HUEwoYnRfY2xhc3MpOwogCitzdHJ1Y3QgZGVudHJ5ICpidF9kZWJ1Z2ZzID0gTlVMTDsKK0VYUE9SVF9TWU1CT0xfR1BMKGJ0X2RlYnVnZnMpOworCiBzdGF0aWMgc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKmJ0X3dvcmtxOwogCiBzdGF0aWMgaW5saW5lIGNoYXIgKmxpbmtfdHlwZXRvc3RyKGludCB0eXBlKQpAQCAtMTY2LDkgKzE3MCw5IEBACiAJcXVldWVfd29yayhidF93b3JrcSwgJmNvbm4tPndvcmtfZGVsKTsKIH0KIAotc3RhdGljIGlubGluZSBjaGFyICpob3N0X3R5cGV0b3N0cihpbnQgdHlwZSkKK3N0YXRpYyBpbmxpbmUgY2hhciAqaG9zdF9idXN0b3N0cihpbnQgYnVzKQogewotCXN3aXRjaCAodHlwZSkgeworCXN3aXRjaCAoYnVzKSB7CiAJY2FzZSBIQ0lfVklSVFVBTDoKIAkJcmV0dXJuICJWSVJUVUFMIjsKIAljYXNlIEhDSV9VU0I6CkBAIC0xODgsMTAgKzE5MiwyOCBAQAogCX0KIH0KIAorc3RhdGljIGlubGluZSBjaGFyICpob3N0X3R5cGV0b3N0cihpbnQgdHlwZSkKK3sKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEhDSV9CUkVEUjoKKwkJcmV0dXJuICJCUi9FRFIiOworCWNhc2UgSENJXzgwMjExOgorCQlyZXR1cm4gIjgwMi4xMSI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJVTktOT1dOIjsKKwl9Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfYnVzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBob3N0X2J1c3Rvc3RyKGhkZXYtPmJ1cykpOworfQorCiBzdGF0aWMgc3NpemVfdCBzaG93X3R5cGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGhvc3RfdHlwZXRvc3RyKGhkZXYtPnR5cGUpKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgaG9zdF90eXBldG9zdHIoaGRldi0+ZGV2X3R5cGUpKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19uYW1lKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTI1MSwzMiArMjczLDYgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaGRldi0+aGNpX3Jldik7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfaW5xdWlyeV9jYWNoZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlzdHJ1Y3QgaW5xdWlyeV9jYWNoZSAqY2FjaGUgPSAmaGRldi0+aW5xX2NhY2hlOwotCXN0cnVjdCBpbnF1aXJ5X2VudHJ5ICplOwotCWludCBuID0gMDsKLQotCWhjaV9kZXZfbG9ja19iaChoZGV2KTsKLQotCWZvciAoZSA9IGNhY2hlLT5saXN0OyBlOyBlID0gZS0+bmV4dCkgewotCQlzdHJ1Y3QgaW5xdWlyeV9kYXRhICpkYXRhID0gJmUtPmRhdGE7Ci0JCWJkYWRkcl90IGJkYWRkcjsKLQkJYmFzd2FwKCZiZGFkZHIsICZkYXRhLT5iZGFkZHIpOwotCQluICs9IHNwcmludGYoYnVmICsgbiwgIiVzICVkICVkICVkIDB4JS4yeCUuMnglLjJ4IDB4JS40eCAlZCAlZCAldVxuIiwKLQkJCQliYXRvc3RyKCZiZGFkZHIpLAotCQkJCWRhdGEtPnBzY2FuX3JlcF9tb2RlLCBkYXRhLT5wc2Nhbl9wZXJpb2RfbW9kZSwKLQkJCQlkYXRhLT5wc2Nhbl9tb2RlLCBkYXRhLT5kZXZfY2xhc3NbMl0sCi0JCQkJZGF0YS0+ZGV2X2NsYXNzWzFdLCBkYXRhLT5kZXZfY2xhc3NbMF0sCi0JCQkJX19sZTE2X3RvX2NwdShkYXRhLT5jbG9ja19vZmZzZXQpLAotCQkJCWRhdGEtPnJzc2ksIGRhdGEtPnNzcF9tb2RlLCBlLT50aW1lc3RhbXApOwotCX0KLQotCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOwotCXJldHVybiBuOwotfQotCiBzdGF0aWMgc3NpemVfdCBzaG93X2lkbGVfdGltZW91dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKQEAgLTM1NSw2ICszNTEsNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIERFVklDRV9BVFRSKGJ1cywgU19JUlVHTywgc2hvd19idXMsIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHR5cGUsIFNfSVJVR08sIHNob3dfdHlwZSwgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19uYW1lLCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihjbGFzcywgU19JUlVHTywgc2hvd19jbGFzcywgTlVMTCk7CkBAIC0zNjMsNyArMzYwLDYgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihtYW51ZmFjdHVyZXIsIFNfSVJVR08sIHNob3dfbWFudWZhY3R1cmVyLCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihoY2lfdmVyc2lvbiwgU19JUlVHTywgc2hvd19oY2lfdmVyc2lvbiwgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoaGNpX3JldmlzaW9uLCBTX0lSVUdPLCBzaG93X2hjaV9yZXZpc2lvbiwgTlVMTCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIoaW5xdWlyeV9jYWNoZSwgU19JUlVHTywgc2hvd19pbnF1aXJ5X2NhY2hlLCBOVUxMKTsKIAogc3RhdGljIERFVklDRV9BVFRSKGlkbGVfdGltZW91dCwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCQkJc2hvd19pZGxlX3RpbWVvdXQsIHN0b3JlX2lkbGVfdGltZW91dCk7CkBAIC0zNzMsNiArMzY5LDcgQEAKIAkJCQlzaG93X3NuaWZmX21pbl9pbnRlcnZhbCwgc3RvcmVfc25pZmZfbWluX2ludGVydmFsKTsKIAogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmJ0X2hvc3RfYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfYnVzLmF0dHIsCiAJJmRldl9hdHRyX3R5cGUuYXR0ciwKIAkmZGV2X2F0dHJfbmFtZS5hdHRyLAogCSZkZXZfYXR0cl9jbGFzcy5hdHRyLApAQCAtMzgxLDcgKzM3OCw2IEBACiAJJmRldl9hdHRyX21hbnVmYWN0dXJlci5hdHRyLAogCSZkZXZfYXR0cl9oY2lfdmVyc2lvbi5hdHRyLAogCSZkZXZfYXR0cl9oY2lfcmV2aXNpb24uYXR0ciwKLQkmZGV2X2F0dHJfaW5xdWlyeV9jYWNoZS5hdHRyLAogCSZkZXZfYXR0cl9pZGxlX3RpbWVvdXQuYXR0ciwKIAkmZGV2X2F0dHJfc25pZmZfbWF4X2ludGVydmFsLmF0dHIsCiAJJmRldl9hdHRyX3NuaWZmX21pbl9pbnRlcnZhbC5hdHRyLApAQCAtNDA5LDEyICs0MDUsNTIgQEAKIAkucmVsZWFzZSA9IGJ0X2hvc3RfcmVsZWFzZSwKIH07CiAKK3N0YXRpYyBpbnQgaW5xdWlyeV9jYWNoZV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGlucXVpcnlfY2FjaGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCisJCQkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaW5xdWlyeV9jYWNoZSAqY2FjaGUgPSAmaGRldi0+aW5xX2NhY2hlOworCXN0cnVjdCBpbnF1aXJ5X2VudHJ5ICplOworCWNoYXIgYnVmWzQwOTZdOworCWludCBuID0gMDsKKworCWhjaV9kZXZfbG9ja19iaChoZGV2KTsKKworCWZvciAoZSA9IGNhY2hlLT5saXN0OyBlOyBlID0gZS0+bmV4dCkgeworCQlzdHJ1Y3QgaW5xdWlyeV9kYXRhICpkYXRhID0gJmUtPmRhdGE7CisJCWJkYWRkcl90IGJkYWRkcjsKKwkJYmFzd2FwKCZiZGFkZHIsICZkYXRhLT5iZGFkZHIpOworCQluICs9IHNwcmludGYoYnVmICsgbiwgIiVzICVkICVkICVkIDB4JS4yeCUuMnglLjJ4IDB4JS40eCAlZCAlZCAldVxuIiwKKwkJCQliYXRvc3RyKCZiZGFkZHIpLAorCQkJCWRhdGEtPnBzY2FuX3JlcF9tb2RlLCBkYXRhLT5wc2Nhbl9wZXJpb2RfbW9kZSwKKwkJCQlkYXRhLT5wc2Nhbl9tb2RlLCBkYXRhLT5kZXZfY2xhc3NbMl0sCisJCQkJZGF0YS0+ZGV2X2NsYXNzWzFdLCBkYXRhLT5kZXZfY2xhc3NbMF0sCisJCQkJX19sZTE2X3RvX2NwdShkYXRhLT5jbG9ja19vZmZzZXQpLAorCQkJCWRhdGEtPnJzc2ksIGRhdGEtPnNzcF9tb2RlLCBlLT50aW1lc3RhbXApOworCX0KKworCWhjaV9kZXZfdW5sb2NrX2JoKGhkZXYpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJidWYsIGNvdW50LCBwcG9zLCBidWYsIG4pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpbnF1aXJ5X2NhY2hlX2ZvcHMgPSB7CisJLm9wZW4gPSBpbnF1aXJ5X2NhY2hlX29wZW4sCisJLnJlYWQgPSBpbnF1aXJ5X2NhY2hlX3JlYWQsCit9OworCiBpbnQgaGNpX3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZoZGV2LT5kZXY7CiAJaW50IGVycjsKIAotCUJUX0RCRygiJXAgbmFtZSAlcyB0eXBlICVkIiwgaGRldiwgaGRldi0+bmFtZSwgaGRldi0+dHlwZSk7CisJQlRfREJHKCIlcCBuYW1lICVzIGJ1cyAlZCIsIGhkZXYsIGhkZXYtPm5hbWUsIGhkZXYtPmJ1cyk7CiAKIAlkZXYtPnR5cGUgPSAmYnRfaG9zdDsKIAlkZXYtPmNsYXNzID0gYnRfY2xhc3M7CkBAIC00MjgsMTIgKzQ2NCwyNCBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCisJaWYgKCFidF9kZWJ1Z2ZzKQorCQlyZXR1cm4gMDsKKworCWhkZXYtPmRlYnVnZnMgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoaGRldi0+bmFtZSwgYnRfZGVidWdmcyk7CisJaWYgKCFoZGV2LT5kZWJ1Z2ZzKQorCQlyZXR1cm4gMDsKKworCWRlYnVnZnNfY3JlYXRlX2ZpbGUoImlucXVpcnlfY2FjaGUiLCAwNDQ0LCBoZGV2LT5kZWJ1Z2ZzLAorCQkJCQkJaGRldiwgJmlucXVpcnlfY2FjaGVfZm9wcyk7CisKIAlyZXR1cm4gMDsKIH0KIAogdm9pZCBoY2lfdW5yZWdpc3Rlcl9zeXNmcyhzdHJ1Y3QgaGNpX2RldiAqaGRldikKIHsKLQlCVF9EQkcoIiVwIG5hbWUgJXMgdHlwZSAlZCIsIGhkZXYsIGhkZXYtPm5hbWUsIGhkZXYtPnR5cGUpOworCUJUX0RCRygiJXAgbmFtZSAlcyBidXMgJWQiLCBoZGV2LCBoZGV2LT5uYW1lLCBoZGV2LT5idXMpOworCisJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKGhkZXYtPmRlYnVnZnMpOwogCiAJZGV2aWNlX2RlbCgmaGRldi0+ZGV2KTsKIH0KQEAgLTQ0NCw2ICs0OTIsOCBAQAogCWlmICghYnRfd29ya3EpCiAJCXJldHVybiAtRU5PTUVNOwogCisJYnRfZGVidWdmcyA9IGRlYnVnZnNfY3JlYXRlX2RpcigiYmx1ZXRvb3RoIiwgTlVMTCk7CisKIAlidF9jbGFzcyA9IGNsYXNzX2NyZWF0ZShUSElTX01PRFVMRSwgImJsdWV0b290aCIpOwogCWlmIChJU19FUlIoYnRfY2xhc3MpKSB7CiAJCWRlc3Ryb3lfd29ya3F1ZXVlKGJ0X3dvcmtxKTsKQEAgLTQ1NSw3ICs1MDUsOSBAQAogCiB2b2lkIGJ0X3N5c2ZzX2NsZWFudXAodm9pZCkKIHsKLQlkZXN0cm95X3dvcmtxdWV1ZShidF93b3JrcSk7Ci0KIAljbGFzc19kZXN0cm95KGJ0X2NsYXNzKTsKKworCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShidF9kZWJ1Z2ZzKTsKKworCWRlc3Ryb3lfd29ya3F1ZXVlKGJ0X3dvcmtxKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvbDJjYXAuYyBiL25ldC9ibHVldG9vdGgvbDJjYXAuYwppbmRleCA0MDBlZmEyLi40ZGI3YWUyIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2wyY2FwLmMKKysrIGIvbmV0L2JsdWV0b290aC9sMmNhcC5jCkBAIC0zOTM3LDcgKzM5MzcsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3NpemVfdCBsMmNhcF9zeXNmc19zaG93KHN0cnVjdCBjbGFzcyAqZGV2LCBjaGFyICpidWYpCitzdGF0aWMgc3NpemVfdCBsMmNhcF9zeXNmc19zaG93KHN0cnVjdCBjbGFzcyAqZGV2LAorCQkJCXN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmKQogewogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwppbmRleCA4OWY0YTU5Li5kYjhhNjhlIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCkBAIC0yMDk4LDcgKzIwOTgsOSBAQAogCS5zZWN1cml0eV9jZm0JPSByZmNvbW1fc2VjdXJpdHlfY2ZtCiB9OwogCi1zdGF0aWMgc3NpemVfdCByZmNvbW1fZGxjX3N5c2ZzX3Nob3coc3RydWN0IGNsYXNzICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHJmY29tbV9kbGNfc3lzZnNfc2hvdyhzdHJ1Y3QgY2xhc3MgKmRldiwKKwkJCQkgICAgIHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjaGFyICpidWYpCiB7CiAJc3RydWN0IHJmY29tbV9zZXNzaW9uICpzOwogCXN0cnVjdCBsaXN0X2hlYWQgKnBwLCAqcDsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3NvY2suYwppbmRleCA0YjU5NjhkLi5jYTg3ZDZhIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9zb2NrLmMKKysrIGIvbmV0L2JsdWV0b290aC9yZmNvbW0vc29jay5jCkBAIC0xMDYxLDcgKzEwNjEsOSBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHJmY29tbV9zb2NrX3N5c2ZzX3Nob3coc3RydWN0IGNsYXNzICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHJmY29tbV9zb2NrX3N5c2ZzX3Nob3coc3RydWN0IGNsYXNzICpkZXYsCisJCQkJICAgICAgc3RydWN0IGNsYXNzX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICBjaGFyICpidWYpCiB7CiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwpkaWZmIC0tZ2l0IGEvbmV0L2JsdWV0b290aC9zY28uYyBiL25ldC9ibHVldG9vdGgvc2NvLmMKaW5kZXggZGQ4ZjZlYy4uZjkzYjkzOSAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9zY28uYworKysgYi9uZXQvYmx1ZXRvb3RoL3Njby5jCkBAIC05NTMsNyArOTUzLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3Qgc2NvX3N5c2ZzX3Nob3coc3RydWN0IGNsYXNzICpkZXYsIGNoYXIgKmJ1ZikKK3N0YXRpYyBzc2l6ZV90IHNjb19zeXNmc19zaG93KHN0cnVjdCBjbGFzcyAqZGV2LAorCQkJCXN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgKmF0dHIsCisJCQkJY2hhciAqYnVmKQogewogCXN0cnVjdCBzb2NrICpzazsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvS2NvbmZpZyBiL25ldC9icmlkZ2UvS2NvbmZpZwppbmRleCBlMTQzY2E2Li4xOWE2Yjk2IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL0tjb25maWcKKysrIGIvbmV0L2JyaWRnZS9LY29uZmlnCkBAIC0zMSwzICszMSwxNiBAQAogCSAgd2lsbCBiZSBjYWxsZWQgYnJpZGdlLgogCiAJICBJZiB1bnN1cmUsIHNheSBOLgorCitjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkcKKwlib29sICJJR01QIHNub29waW5nIgorCWRlcGVuZHMgb24gQlJJREdFCisJZGVmYXVsdCB5CisJLS0taGVscC0tLQorCSAgSWYgeW91IHNheSBZIGhlcmUsIHRoZW4gdGhlIEV0aGVybmV0IGJyaWRnZSB3aWxsIGJlIGFibGUgc2VsZWN0aXZlbHkKKwkgIGZvcndhcmQgbXVsdGljYXN0IHRyYWZmaWMgYmFzZWQgb24gSUdNUCB0cmFmZmljIHJlY2VpdmVkIGZyb20gZWFjaAorCSAgcG9ydC4KKworCSAgU2F5IE4gdG8gZXhjbHVkZSB0aGlzIHN1cHBvcnQgYW5kIHJlZHVjZSB0aGUgYmluYXJ5IHNpemUuCisKKwkgIElmIHVuc3VyZSwgc2F5IFkuCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL01ha2VmaWxlIGIvbmV0L2JyaWRnZS9NYWtlZmlsZQppbmRleCBmNDQ0YzEyLi5kMDM1OWVhIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL01ha2VmaWxlCisrKyBiL25ldC9icmlkZ2UvTWFrZWZpbGUKQEAgLTEyLDQgKzEyLDYgQEAKIAogYnJpZGdlLSQoQ09ORklHX0JSSURHRV9ORVRGSUxURVIpICs9IGJyX25ldGZpbHRlci5vCiAKK2JyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgKz0gYnJfbXVsdGljYXN0Lm8KKwogb2JqLSQoQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUykgKz0gbmV0ZmlsdGVyLwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuYyBiL25ldC9icmlkZ2UvYnJfZGV2aWNlLmMKaW5kZXggMWE5OWM0ZS4uZWI3MDYyZCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9kZXZpY2UuYworKysgYi9uZXQvYnJpZGdlL2JyX2RldmljZS5jCkBAIC0yNSw2ICsyNSw5IEBACiAJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAljb25zdCB1bnNpZ25lZCBjaGFyICpkZXN0ID0gc2tiLT5kYXRhOwogCXN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZHN0OworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbWRzdDsKKworCUJSX0lOUFVUX1NLQl9DQihza2IpLT5icmRldiA9IGRldjsKIAogCWRldi0+c3RhdHMudHhfcGFja2V0cysrOwogCWRldi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CkBAIC0zMiwxMyArMzUsMjEgQEAKIAlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwogCXNrYl9wdWxsKHNrYiwgRVRIX0hMRU4pOwogCi0JaWYgKGRlc3RbMF0gJiAxKQotCQlicl9mbG9vZF9kZWxpdmVyKGJyLCBza2IpOwotCWVsc2UgaWYgKChkc3QgPSBfX2JyX2ZkYl9nZXQoYnIsIGRlc3QpKSAhPSBOVUxMKQorCWlmIChkZXN0WzBdICYgMSkgeworCQlpZiAoYnJfbXVsdGljYXN0X3JjdihiciwgTlVMTCwgc2tiKSkKKwkJCWdvdG8gb3V0OworCisJCW1kc3QgPSBicl9tZGJfZ2V0KGJyLCBza2IpOworCQlpZiAobWRzdCB8fCBCUl9JTlBVVF9TS0JfQ0Ioc2tiKS0+bXJvdXRlcnNfb25seSkKKwkJCWJyX211bHRpY2FzdF9kZWxpdmVyKG1kc3QsIHNrYik7CisJCWVsc2UKKwkJCWJyX2Zsb29kX2RlbGl2ZXIoYnIsIHNrYik7CisJfSBlbHNlIGlmICgoZHN0ID0gX19icl9mZGJfZ2V0KGJyLCBkZXN0KSkgIT0gTlVMTCkKIAkJYnJfZGVsaXZlcihkc3QtPmRzdCwgc2tiKTsKIAllbHNlCiAJCWJyX2Zsb29kX2RlbGl2ZXIoYnIsIHNrYik7CiAKK291dDoKIAlyZXR1cm4gTkVUREVWX1RYX09LOwogfQogCkBAIC00OSw2ICs2MCw3IEBACiAJYnJfZmVhdHVyZXNfcmVjb21wdXRlKGJyKTsKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwogCWJyX3N0cF9lbmFibGVfYnJpZGdlKGJyKTsKKwlicl9tdWx0aWNhc3Rfb3Blbihicik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU5LDcgKzcxLDEwIEBACiAKIHN0YXRpYyBpbnQgYnJfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlicl9zdHBfZGlzYWJsZV9icmlkZ2UobmV0ZGV2X3ByaXYoZGV2KSk7CisJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gbmV0ZGV2X3ByaXYoZGV2KTsKKworCWJyX3N0cF9kaXNhYmxlX2JyaWRnZShicik7CisJYnJfbXVsdGljYXN0X3N0b3AoYnIpOwogCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZvcndhcmQuYyBiL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCmluZGV4IGJjMTcwNGEuLmQ2MWU2ZjcgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCisrKyBiL25ldC9icmlkZ2UvYnJfZm9yd2FyZC5jCkBAIC0xMSw2ICsxMSw3IEBACiAgKgkyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KQEAgLTEwMyw1MSArMTA0LDE1MiBAQAogCWtmcmVlX3NrYihza2IpOwogfQogCi0vKiBjYWxsZWQgdW5kZXIgYnJpZGdlIGxvY2sgKi8KLXN0YXRpYyB2b2lkIGJyX2Zsb29kKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3N0YXRpYyBpbnQgZGVsaXZlcl9jbG9uZShzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwcmV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJIHZvaWQgKCpfX3BhY2tldF9ob29rKShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAorCQkJCQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikpCit7CisJc2tiID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CisJaWYgKCFza2IpIHsKKwkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IEJSX0lOUFVUX1NLQl9DQihza2IpLT5icmRldjsKKworCQlkZXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJX19wYWNrZXRfaG9vayhwcmV2LCBza2IpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqbWF5YmVfZGVsaXZlcigKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwcmV2LCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAorCXN0cnVjdCBza19idWZmICpza2IsCiAJdm9pZCAoKl9fcGFja2V0X2hvb2spKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAsCiAJCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSkKIHsKKwlpbnQgZXJyOworCisJaWYgKCFzaG91bGRfZGVsaXZlcihwLCBza2IpKQorCQlyZXR1cm4gcHJldjsKKworCWlmICghcHJldikKKwkJZ290byBvdXQ7CisKKwllcnIgPSBkZWxpdmVyX2Nsb25lKHByZXYsIHNrYiwgX19wYWNrZXRfaG9vayk7CisJaWYgKGVycikKKwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKKworb3V0OgorCXJldHVybiBwOworfQorCisvKiBjYWxsZWQgdW5kZXIgYnJpZGdlIGxvY2sgKi8KK3N0YXRpYyB2b2lkIGJyX2Zsb29kKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiMCwKKwkJICAgICB2b2lkICgqX19wYWNrZXRfaG9vaykoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwKKwkJCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikpCit7CiAJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcDsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwcmV2OwogCiAJcHJldiA9IE5VTEw7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwLCAmYnItPnBvcnRfbGlzdCwgbGlzdCkgewotCQlpZiAoc2hvdWxkX2RlbGl2ZXIocCwgc2tiKSkgewotCQkJaWYgKHByZXYgIT0gTlVMTCkgewotCQkJCXN0cnVjdCBza19idWZmICpza2IyOwotCi0JCQkJaWYgKChza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQykpID09IE5VTEwpIHsKLQkJCQkJYnItPmRldi0+c3RhdHMudHhfZHJvcHBlZCsrOwotCQkJCQlrZnJlZV9za2Ioc2tiKTsKLQkJCQkJcmV0dXJuOwotCQkJCX0KLQotCQkJCV9fcGFja2V0X2hvb2socHJldiwgc2tiMik7Ci0JCQl9Ci0KLQkJCXByZXYgPSBwOwotCQl9CisJCXByZXYgPSBtYXliZV9kZWxpdmVyKHByZXYsIHAsIHNrYiwgX19wYWNrZXRfaG9vayk7CisJCWlmIChJU19FUlIocHJldikpCisJCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAocHJldiAhPSBOVUxMKSB7CisJaWYgKCFwcmV2KQorCQlnb3RvIG91dDsKKworCWlmIChza2IwKQorCQlkZWxpdmVyX2Nsb25lKHByZXYsIHNrYiwgX19wYWNrZXRfaG9vayk7CisJZWxzZQogCQlfX3BhY2tldF9ob29rKHByZXYsIHNrYik7Ci0JCXJldHVybjsKLQl9CisJcmV0dXJuOwogCi0Ja2ZyZWVfc2tiKHNrYik7CitvdXQ6CisJaWYgKCFza2IwKQorCQlrZnJlZV9za2Ioc2tiKTsKIH0KIAogCiAvKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrICovCiB2b2lkIGJyX2Zsb29kX2RlbGl2ZXIoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCWJyX2Zsb29kKGJyLCBza2IsIF9fYnJfZGVsaXZlcik7CisJYnJfZmxvb2QoYnIsIHNrYiwgTlVMTCwgX19icl9kZWxpdmVyKTsKIH0KIAogLyogY2FsbGVkIHVuZGVyIGJyaWRnZSBsb2NrICovCi12b2lkIGJyX2Zsb29kX2ZvcndhcmQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQordm9pZCBicl9mbG9vZF9mb3J3YXJkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYjIpCiB7Ci0JYnJfZmxvb2QoYnIsIHNrYiwgX19icl9mb3J3YXJkKTsKKwlicl9mbG9vZChiciwgc2tiLCBza2IyLCBfX2JyX2ZvcndhcmQpOwogfQorCisjaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HCisvKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrICovCitzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZmxvb2Qoc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptZHN0LAorCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICpza2IwLAorCQkJICAgICAgIHZvaWQgKCpfX3BhY2tldF9ob29rKSgKKwkJCQkJY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwKKwkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IEJSX0lOUFVUX1NLQl9DQihza2IpLT5icmRldjsKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBuZXRkZXZfcHJpdihkZXYpOworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQ7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqbHBvcnQsICpycG9ydDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwcmV2OworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnA7CisJc3RydWN0IGhsaXN0X25vZGUgKnJwOworCisJcHJldiA9IE5VTEw7CisKKwlycCA9IGJyLT5yb3V0ZXJfbGlzdC5maXJzdDsKKwlwID0gbWRzdCA/IG1kc3QtPnBvcnRzIDogTlVMTDsKKwl3aGlsZSAocCB8fCBycCkgeworCQlscG9ydCA9IHAgPyBwLT5wb3J0IDogTlVMTDsKKwkJcnBvcnQgPSBycCA/IGhsaXN0X2VudHJ5KHJwLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0LCBybGlzdCkgOgorCQkJICAgICBOVUxMOworCisJCXBvcnQgPSAodW5zaWduZWQgbG9uZylscG9ydCA+ICh1bnNpZ25lZCBsb25nKXJwb3J0ID8KKwkJICAgICAgIGxwb3J0IDogcnBvcnQ7CisKKwkJcHJldiA9IG1heWJlX2RlbGl2ZXIocHJldiwgcG9ydCwgc2tiLCBfX3BhY2tldF9ob29rKTsKKwkJaWYgKElTX0VSUihwcmV2KSkKKwkJCWdvdG8gb3V0OworCisJCWlmICgodW5zaWduZWQgbG9uZylscG9ydCA+PSAodW5zaWduZWQgbG9uZylwb3J0KQorCQkJcCA9IHAtPm5leHQ7CisJCWlmICgodW5zaWduZWQgbG9uZylycG9ydCA+PSAodW5zaWduZWQgbG9uZylwb3J0KQorCQkJcnAgPSBycC0+bmV4dDsKKwl9CisKKwlpZiAoIXByZXYpCisJCWdvdG8gb3V0OworCisJaWYgKHNrYjApCisJCWRlbGl2ZXJfY2xvbmUocHJldiwgc2tiLCBfX3BhY2tldF9ob29rKTsKKwllbHNlCisJCV9fcGFja2V0X2hvb2socHJldiwgc2tiKTsKKwlyZXR1cm47CisKK291dDoKKwlpZiAoIXNrYjApCisJCWtmcmVlX3NrYihza2IpOworfQorCisvKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrICovCit2b2lkIGJyX211bHRpY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbWRzdCwKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlicl9tdWx0aWNhc3RfZmxvb2QobWRzdCwgc2tiLCBOVUxMLCBfX2JyX2RlbGl2ZXIpOworfQorCisvKiBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrICovCit2b2lkIGJyX211bHRpY2FzdF9mb3J3YXJkKHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbWRzdCwKKwkJCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNrX2J1ZmYgKnNrYjIpCit7CisJYnJfbXVsdGljYXN0X2Zsb29kKG1kc3QsIHNrYiwgc2tiMiwgX19icl9mb3J3YXJkKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pZi5jIGIvbmV0L2JyaWRnZS9icl9pZi5jCmluZGV4IGEyY2JlNjEuLmI2YTM4NzIgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfaWYuYworKysgYi9uZXQvYnJpZGdlL2JyX2lmLmMKQEAgLTE0Nyw2ICsxNDcsOCBAQAogCiAJcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0+YnJfcG9ydCwgTlVMTCk7CiAKKwlicl9tdWx0aWNhc3RfZGVsX3BvcnQocCk7CisKIAlrb2JqZWN0X3VldmVudCgmcC0+a29iaiwgS09CSl9SRU1PVkUpOwogCWtvYmplY3RfZGVsKCZwLT5rb2JqKTsKIApAQCAtMjA2LDkgKzIwOCw4IEBACiAKIAlicl9uZXRmaWx0ZXJfcnRhYmxlX2luaXQoYnIpOwogCi0JSU5JVF9MSVNUX0hFQUQoJmJyLT5hZ2VfbGlzdCk7Ci0KIAlicl9zdHBfdGltZXJfaW5pdChicik7CisJYnJfbXVsdGljYXN0X2luaXQoYnIpOwogCiAJcmV0dXJuIGRldjsKIH0KQEAgLTI2MCw2ICsyNjEsNyBAQAogCWJyX2luaXRfcG9ydChwKTsKIAlwLT5zdGF0ZSA9IEJSX1NUQVRFX0RJU0FCTEVEOwogCWJyX3N0cF9wb3J0X3RpbWVyX2luaXQocCk7CisJYnJfbXVsdGljYXN0X2FkZF9wb3J0KHApOwogCiAJcmV0dXJuIHA7CiB9CkBAIC00NjcsNyArNDY5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBicl9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit2b2lkIF9fbmV0X2V4aXQgYnJfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJTElTVF9IRUFEKGxpc3QpOwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9pbnB1dC5jIGIvbmV0L2JyaWRnZS9icl9pbnB1dC5jCmluZGV4IDVlZTFhMzYuLjUzYjM5ODUgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfaW5wdXQuYworKysgYi9uZXQvYnJpZGdlL2JyX2lucHV0LmMKQEAgLTIwLDkgKzIwLDkgQEAKIC8qIEJyaWRnZSBncm91cCBtdWx0aWNhc3QgYWRkcmVzcyA4MDIuMWQgKHBnIDUxKS4gKi8KIGNvbnN0IHU4IGJyX2dyb3VwX2FkZHJlc3NbRVRIX0FMRU5dID0geyAweDAxLCAweDgwLCAweGMyLCAweDAwLCAweDAwLCAweDAwIH07CiAKLXN0YXRpYyB2b2lkIGJyX3Bhc3NfZnJhbWVfdXAoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBicl9wYXNzX2ZyYW1lX3VwKHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmluZGV2LCAqYnJkZXYgPSBici0+ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICppbmRldiwgKmJyZGV2ID0gQlJfSU5QVVRfU0tCX0NCKHNrYiktPmJyZGV2OwogCiAJYnJkZXYtPnN0YXRzLnJ4X3BhY2tldHMrKzsKIAlicmRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CkBAIC0zMCw4ICszMCw4IEBACiAJaW5kZXYgPSBza2ItPmRldjsKIAlza2ItPmRldiA9IGJyZGV2OwogCi0JTkZfSE9PSyhQRl9CUklER0UsIE5GX0JSX0xPQ0FMX0lOLCBza2IsIGluZGV2LCBOVUxMLAotCQluZXRpZl9yZWNlaXZlX3NrYik7CisJcmV0dXJuIE5GX0hPT0soUEZfQlJJREdFLCBORl9CUl9MT0NBTF9JTiwgc2tiLCBpbmRldiwgTlVMTCwKKwkJICAgICAgIG5ldGlmX3JlY2VpdmVfc2tiKTsKIH0KIAogLyogbm90ZTogYWxyZWFkeSBjYWxsZWQgd2l0aCByY3VfcmVhZF9sb2NrIChwcmVlbXB0X2Rpc2FibGVkKSAqLwpAQCAtNDEsNiArNDEsNyBAQAogCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnAgPSByY3VfZGVyZWZlcmVuY2Uoc2tiLT5kZXYtPmJyX3BvcnQpOwogCXN0cnVjdCBuZXRfYnJpZGdlICpicjsKIAlzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmRzdDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1kc3Q7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjI7CiAKIAlpZiAoIXAgfHwgcC0+c3RhdGUgPT0gQlJfU1RBVEVfRElTQUJMRUQpCkBAIC01MCw5ICs1MSwxNSBAQAogCWJyID0gcC0+YnI7CiAJYnJfZmRiX3VwZGF0ZShiciwgcCwgZXRoX2hkcihza2IpLT5oX3NvdXJjZSk7CiAKKwlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZGVzdCkgJiYKKwkgICAgYnJfbXVsdGljYXN0X3JjdihiciwgcCwgc2tiKSkKKwkJZ290byBkcm9wOworCiAJaWYgKHAtPnN0YXRlID09IEJSX1NUQVRFX0xFQVJOSU5HKQogCQlnb3RvIGRyb3A7CiAKKwlCUl9JTlBVVF9TS0JfQ0Ioc2tiKS0+YnJkZXYgPSBici0+ZGV2OworCiAJLyogVGhlIHBhY2tldCBza2IyIGdvZXMgdG8gdGhlIGxvY2FsIGhvc3QgKE5VTEwgdG8gc2tpcCkuICovCiAJc2tiMiA9IE5VTEw7CiAKQEAgLTYyLDI3ICs2OSwzNSBAQAogCWRzdCA9IE5VTEw7CiAKIAlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoZGVzdCkpIHsKKwkJbWRzdCA9IGJyX21kYl9nZXQoYnIsIHNrYik7CisJCWlmIChtZHN0IHx8IEJSX0lOUFVUX1NLQl9DQihza2IpLT5tcm91dGVyc19vbmx5KSB7CisJCQlpZiAoKG1kc3QgJiYgIWhsaXN0X3VuaGFzaGVkKCZtZHN0LT5tZ2xpc3QpKSB8fAorCQkJICAgIGJyX211bHRpY2FzdF9pc19yb3V0ZXIoYnIpKQorCQkJCXNrYjIgPSBza2I7CisJCQlicl9tdWx0aWNhc3RfZm9yd2FyZChtZHN0LCBza2IsIHNrYjIpOworCQkJc2tiID0gTlVMTDsKKwkJCWlmICghc2tiMikKKwkJCQlnb3RvIG91dDsKKwkJfSBlbHNlCisJCQlza2IyID0gc2tiOworCiAJCWJyLT5kZXYtPnN0YXRzLm11bHRpY2FzdCsrOwotCQlza2IyID0gc2tiOwogCX0gZWxzZSBpZiAoKGRzdCA9IF9fYnJfZmRiX2dldChiciwgZGVzdCkpICYmIGRzdC0+aXNfbG9jYWwpIHsKIAkJc2tiMiA9IHNrYjsKIAkJLyogRG8gbm90IGZvcndhcmQgdGhlIHBhY2tldCBzaW5jZSBpdCdzIGxvY2FsLiAqLwogCQlza2IgPSBOVUxMOwogCX0KIAotCWlmIChza2IyID09IHNrYikKLQkJc2tiMiA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwotCi0JaWYgKHNrYjIpCi0JCWJyX3Bhc3NfZnJhbWVfdXAoYnIsIHNrYjIpOwotCiAJaWYgKHNrYikgewogCQlpZiAoZHN0KQogCQkJYnJfZm9yd2FyZChkc3QtPmRzdCwgc2tiKTsKIAkJZWxzZQotCQkJYnJfZmxvb2RfZm9yd2FyZChiciwgc2tiKTsKKwkJCWJyX2Zsb29kX2ZvcndhcmQoYnIsIHNrYiwgc2tiMik7CiAJfQogCisJaWYgKHNrYjIpCisJCXJldHVybiBicl9wYXNzX2ZyYW1lX3VwKHNrYjIpOworCiBvdXQ6CiAJcmV0dXJuIDA7CiBkcm9wOgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9tdWx0aWNhc3QuYyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU1OWZiNQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9icmlkZ2UvYnJfbXVsdGljYXN0LmMKQEAgLTAsMCArMSwxMzA0IEBACisvKgorICogQnJpZGdlIG11bHRpY2FzdCBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoYykgMjAxMCBIZXJiZXJ0IFh1IDxoZXJiZXJ0QGdvbmRvci5hcGFuYS5vcmcuYXU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvaWdtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9icmlkZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9yY3VsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CisKKyNpbmNsdWRlICJicl9wcml2YXRlLmgiCisKK3N0YXRpYyBpbmxpbmUgaW50IGJyX2lwX2hhc2goc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZSAqbWRiLCBfX2JlMzIgaXApCit7CisJcmV0dXJuIGpoYXNoXzF3b3JkKG1kYi0+c2VjcmV0LCAodTMyKWlwKSAmIChtZGItPm1heCAtIDEpOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICpfX2JyX21kYl9pcF9nZXQoCisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZSAqbWRiLCBfX2JlMzIgZHN0LCBpbnQgaGFzaCkKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1wOworCXN0cnVjdCBobGlzdF9ub2RlICpwOworCisJaGxpc3RfZm9yX2VhY2hfZW50cnkobXAsIHAsICZtZGItPm1oYXNoW2hhc2hdLCBobGlzdFttZGItPnZlcl0pIHsKKwkJaWYgKGRzdCA9PSBtcC0+YWRkcikKKwkJCXJldHVybiBtcDsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqYnJfbWRiX2lwX2dldCgKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICptZGIsIF9fYmUzMiBkc3QpCit7CisJcmV0dXJuIF9fYnJfbWRiX2lwX2dldChtZGIsIGRzdCwgYnJfaXBfaGFzaChtZGIsIGRzdCkpOworfQorCitzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKmJyX21kYl9nZXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAorCQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9odGFibGUgKm1kYiA9IGJyLT5tZGI7CisKKwlpZiAoIW1kYiB8fCBici0+bXVsdGljYXN0X2Rpc2FibGVkKQorCQlyZXR1cm4gTlVMTDsKKworCXN3aXRjaCAoc2tiLT5wcm90b2NvbCkgeworCWNhc2UgaHRvbnMoRVRIX1BfSVApOgorCQlpZiAoQlJfSU5QVVRfU0tCX0NCKHNrYiktPmlnbXApCisJCQlicmVhazsKKwkJcmV0dXJuIGJyX21kYl9pcF9nZXQobWRiLCBpcF9oZHIoc2tiKS0+ZGFkZHIpOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCBicl9tZGJfZnJlZShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpCit7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZSAqbWRiID0KKwkJY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBuZXRfYnJpZGdlX21kYl9odGFibGUsIHJjdSk7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZSAqb2xkID0gbWRiLT5vbGQ7CisKKwltZGItPm9sZCA9IE5VTEw7CisJa2ZyZWUob2xkLT5taGFzaCk7CisJa2ZyZWUob2xkKTsKK30KKworc3RhdGljIGludCBicl9tZGJfY29weShzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICpuZXcsCisJCSAgICAgICBzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICpvbGQsCisJCSAgICAgICBpbnQgZWxhc3RpY2l0eSkKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1wOworCXN0cnVjdCBobGlzdF9ub2RlICpwOworCWludCBtYXhsZW47CisJaW50IGxlbjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBvbGQtPm1heDsgaSsrKQorCQlobGlzdF9mb3JfZWFjaF9lbnRyeShtcCwgcCwgJm9sZC0+bWhhc2hbaV0sIGhsaXN0W29sZC0+dmVyXSkKKwkJCWhsaXN0X2FkZF9oZWFkKCZtcC0+aGxpc3RbbmV3LT52ZXJdLAorCQkJCSAgICAgICAmbmV3LT5taGFzaFticl9pcF9oYXNoKG5ldywgbXAtPmFkZHIpXSk7CisKKwlpZiAoIWVsYXN0aWNpdHkpCisJCXJldHVybiAwOworCisJbWF4bGVuID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbmV3LT5tYXg7IGkrKykgeworCQlsZW4gPSAwOworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShtcCwgcCwgJm5ldy0+bWhhc2hbaV0sIGhsaXN0W25ldy0+dmVyXSkKKwkJCWxlbisrOworCQlpZiAobGVuID4gbWF4bGVuKQorCQkJbWF4bGVuID0gbGVuOworCX0KKworCXJldHVybiBtYXhsZW4gPiBlbGFzdGljaXR5ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9mcmVlX3BnKHN0cnVjdCByY3VfaGVhZCAqaGVhZCkKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwID0KKwkJY29udGFpbmVyX29mKGhlYWQsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAsIHJjdSk7CisKKwlrZnJlZShwKTsKK30KKworc3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2ZyZWVfZ3JvdXAoc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXAgPQorCQljb250YWluZXJfb2YoaGVhZCwgc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5LCByY3UpOworCisJa2ZyZWUobXApOworfQorCitzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZ3JvdXBfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcCA9ICh2b2lkICopZGF0YTsKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBtcC0+YnI7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZSAqbWRiOworCisJc3Bpbl9sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOworCWlmICghbmV0aWZfcnVubmluZyhici0+ZGV2KSB8fCB0aW1lcl9wZW5kaW5nKCZtcC0+dGltZXIpKQorCQlnb3RvIG91dDsKKworCWlmICghaGxpc3RfdW5oYXNoZWQoJm1wLT5tZ2xpc3QpKQorCQlobGlzdF9kZWxfaW5pdCgmbXAtPm1nbGlzdCk7CisKKwlpZiAobXAtPnBvcnRzKQorCQlnb3RvIG91dDsKKworCW1kYiA9IGJyLT5tZGI7CisJaGxpc3RfZGVsX3JjdSgmbXAtPmhsaXN0W21kYi0+dmVyXSk7CisJbWRiLT5zaXplLS07CisKKwlkZWxfdGltZXIoJm1wLT5xdWVyeV90aW1lcik7CisJY2FsbF9yY3VfYmgoJm1wLT5yY3UsIGJyX211bHRpY2FzdF9mcmVlX2dyb3VwKTsKKworb3V0OgorCXNwaW5fdW5sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOworfQorCitzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZGVsX3BnKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKKwkJCQlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICpwZykKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICptZGIgPSBici0+bWRiOworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXA7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICoqcHA7CisKKwltcCA9IGJyX21kYl9pcF9nZXQobWRiLCBwZy0+YWRkcik7CisJaWYgKFdBUk5fT04oIW1wKSkKKwkJcmV0dXJuOworCisJZm9yIChwcCA9ICZtcC0+cG9ydHM7IChwID0gKnBwKTsgcHAgPSAmcC0+bmV4dCkgeworCQlpZiAocCAhPSBwZykKKwkJCWNvbnRpbnVlOworCisJCSpwcCA9IHAtPm5leHQ7CisJCWhsaXN0X2RlbF9pbml0KCZwLT5tZ2xpc3QpOworCQlkZWxfdGltZXIoJnAtPnRpbWVyKTsKKwkJZGVsX3RpbWVyKCZwLT5xdWVyeV90aW1lcik7CisJCWNhbGxfcmN1X2JoKCZwLT5yY3UsIGJyX211bHRpY2FzdF9mcmVlX3BnKTsKKworCQlpZiAoIW1wLT5wb3J0cyAmJiBobGlzdF91bmhhc2hlZCgmbXAtPm1nbGlzdCkgJiYKKwkJICAgIG5ldGlmX3J1bm5pbmcoYnItPmRldikpCisJCQltb2RfdGltZXIoJm1wLT50aW1lciwgamlmZmllcyk7CisKKwkJcmV0dXJuOworCX0KKworCVdBUk5fT04oMSk7Cit9CisKK3N0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnID0gKHZvaWQgKilkYXRhOworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHBnLT5wb3J0LT5icjsKKworCXNwaW5fbG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnItPmRldikgfHwgdGltZXJfcGVuZGluZygmcGctPnRpbWVyKSB8fAorCSAgICBobGlzdF91bmhhc2hlZCgmcGctPm1nbGlzdCkpCisJCWdvdG8gb3V0OworCisJYnJfbXVsdGljYXN0X2RlbF9wZyhiciwgcGcpOworCitvdXQ6CisJc3Bpbl91bmxvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgYnJfbWRiX3JlaGFzaChzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICoqbWRicCwgaW50IG1heCwKKwkJCSBpbnQgZWxhc3RpY2l0eSkKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICpvbGQgPSAqbWRicDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlICptZGI7CisJaW50IGVycjsKKworCW1kYiA9IGttYWxsb2Moc2l6ZW9mKCptZGIpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIW1kYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZGItPm1heCA9IG1heDsKKwltZGItPm9sZCA9IG9sZDsKKworCW1kYi0+bWhhc2ggPSBremFsbG9jKG1heCAqIHNpemVvZigqbWRiLT5taGFzaCksIEdGUF9BVE9NSUMpOworCWlmICghbWRiLT5taGFzaCkgeworCQlrZnJlZShtZGIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwltZGItPnNpemUgPSBvbGQgPyBvbGQtPnNpemUgOiAwOworCW1kYi0+dmVyID0gb2xkID8gb2xkLT52ZXIgXiAxIDogMDsKKworCWlmICghb2xkIHx8IGVsYXN0aWNpdHkpCisJCWdldF9yYW5kb21fYnl0ZXMoJm1kYi0+c2VjcmV0LCBzaXplb2YobWRiLT5zZWNyZXQpKTsKKwllbHNlCisJCW1kYi0+c2VjcmV0ID0gb2xkLT5zZWNyZXQ7CisKKwlpZiAoIW9sZCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBicl9tZGJfY29weShtZGIsIG9sZCwgZWxhc3RpY2l0eSk7CisJaWYgKGVycikgeworCQlrZnJlZShtZGItPm1oYXNoKTsKKwkJa2ZyZWUobWRiKTsKKwkJcmV0dXJuIGVycjsKKwl9CisKKwljYWxsX3JjdV9iaCgmbWRiLT5yY3UsIGJyX21kYl9mcmVlKTsKKworb3V0OgorCXJjdV9hc3NpZ25fcG9pbnRlcigqbWRicCwgbWRiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmJyX211bHRpY2FzdF9hbGxvY19xdWVyeShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCisJCQkJCQlfX2JlMzIgZ3JvdXApCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWdtcGhkciAqaWg7CisJc3RydWN0IGV0aGhkciAqZXRoOworCXN0cnVjdCBpcGhkciAqaXBoOworCisJc2tiID0gbmV0ZGV2X2FsbG9jX3NrYl9pcF9hbGlnbihici0+ZGV2LCBzaXplb2YoKmV0aCkgKyBzaXplb2YoKmlwaCkgKworCQkJCQkJIHNpemVvZigqaWgpICsgNCk7CisJaWYgKCFza2IpCisJCWdvdG8gb3V0OworCisJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0lQKTsKKworCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7CisJZXRoID0gZXRoX2hkcihza2IpOworCisJbWVtY3B5KGV0aC0+aF9zb3VyY2UsIGJyLT5kZXYtPmRldl9hZGRyLCA2KTsKKwlldGgtPmhfZGVzdFswXSA9IDE7CisJZXRoLT5oX2Rlc3RbMV0gPSAwOworCWV0aC0+aF9kZXN0WzJdID0gMHg1ZTsKKwlldGgtPmhfZGVzdFszXSA9IDA7CisJZXRoLT5oX2Rlc3RbNF0gPSAwOworCWV0aC0+aF9kZXN0WzVdID0gMTsKKwlldGgtPmhfcHJvdG8gPSBodG9ucyhFVEhfUF9JUCk7CisJc2tiX3B1dChza2IsIHNpemVvZigqZXRoKSk7CisKKwlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgc2tiLT5sZW4pOworCWlwaCA9IGlwX2hkcihza2IpOworCisJaXBoLT52ZXJzaW9uID0gNDsKKwlpcGgtPmlobCA9IDY7CisJaXBoLT50b3MgPSAweGMwOworCWlwaC0+dG90X2xlbiA9IGh0b25zKHNpemVvZigqaXBoKSArIHNpemVvZigqaWgpICsgNCk7CisJaXBoLT5pZCA9IDA7CisJaXBoLT5mcmFnX29mZiA9IGh0b25zKElQX0RGKTsKKwlpcGgtPnR0bCA9IDE7CisJaXBoLT5wcm90b2NvbCA9IElQUFJPVE9fSUdNUDsKKwlpcGgtPnNhZGRyID0gMDsKKwlpcGgtPmRhZGRyID0gaHRvbmwoSU5BRERSX0FMTEhPU1RTX0dST1VQKTsKKwkoKHU4ICopJmlwaFsxXSlbMF0gPSBJUE9QVF9SQTsKKwkoKHU4ICopJmlwaFsxXSlbMV0gPSA0OworCSgodTggKikmaXBoWzFdKVsyXSA9IDA7CisJKCh1OCAqKSZpcGhbMV0pWzNdID0gMDsKKwlpcF9zZW5kX2NoZWNrKGlwaCk7CisJc2tiX3B1dChza2IsIDI0KTsKKworCXNrYl9zZXRfdHJhbnNwb3J0X2hlYWRlcihza2IsIHNrYi0+bGVuKTsKKwlpaCA9IGlnbXBfaGRyKHNrYik7CisJaWgtPnR5cGUgPSBJR01QX0hPU1RfTUVNQkVSU0hJUF9RVUVSWTsKKwlpaC0+Y29kZSA9IChncm91cCA/IGJyLT5tdWx0aWNhc3RfbGFzdF9tZW1iZXJfaW50ZXJ2YWwgOgorCQkJICAgIGJyLT5tdWx0aWNhc3RfcXVlcnlfcmVzcG9uc2VfaW50ZXJ2YWwpIC8KKwkJICAgKEhaIC8gSUdNUF9USU1FUl9TQ0FMRSk7CisJaWgtPmdyb3VwID0gZ3JvdXA7CisJaWgtPmNzdW0gPSAwOworCWloLT5jc3VtID0gaXBfY29tcHV0ZV9jc3VtKCh2b2lkICopaWgsIHNpemVvZihzdHJ1Y3QgaWdtcGhkcikpOworCXNrYl9wdXQoc2tiLCBzaXplb2YoKmloKSk7CisKKwlfX3NrYl9wdWxsKHNrYiwgc2l6ZW9mKCpldGgpKTsKKworb3V0OgorCXJldHVybiBza2I7Cit9CisKK3N0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9zZW5kX2dyb3VwX3F1ZXJ5KHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXApCit7CisJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gbXAtPmJyOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBicl9tdWx0aWNhc3RfYWxsb2NfcXVlcnkoYnIsIG1wLT5hZGRyKTsKKwlpZiAoIXNrYikKKwkJZ290byB0aW1lcjsKKworCW5ldGlmX3J4KHNrYik7CisKK3RpbWVyOgorCWlmICgrK21wLT5xdWVyaWVzX3NlbnQgPCBici0+bXVsdGljYXN0X2xhc3RfbWVtYmVyX2NvdW50KQorCQltb2RfdGltZXIoJm1wLT5xdWVyeV90aW1lciwKKwkJCSAgamlmZmllcyArIGJyLT5tdWx0aWNhc3RfbGFzdF9tZW1iZXJfaW50ZXJ2YWwpOworfQorCitzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfZ3JvdXBfcXVlcnlfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcCA9ICh2b2lkICopZGF0YTsKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBtcC0+YnI7CisKKwlzcGluX2xvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGJyLT5kZXYpIHx8IGhsaXN0X3VuaGFzaGVkKCZtcC0+bWdsaXN0KSB8fAorCSAgICBtcC0+cXVlcmllc19zZW50ID49IGJyLT5tdWx0aWNhc3RfbGFzdF9tZW1iZXJfY291bnQpCisJCWdvdG8gb3V0OworCisJYnJfbXVsdGljYXN0X3NlbmRfZ3JvdXBfcXVlcnkobXApOworCitvdXQ6CisJc3Bpbl91bmxvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9zZW5kX3BvcnRfZ3JvdXBfcXVlcnkoc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcGcpCit7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IHBnLT5wb3J0OworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHBvcnQtPmJyOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwlza2IgPSBicl9tdWx0aWNhc3RfYWxsb2NfcXVlcnkoYnIsIHBnLT5hZGRyKTsKKwlpZiAoIXNrYikKKwkJZ290byB0aW1lcjsKKworCWJyX2RlbGl2ZXIocG9ydCwgc2tiKTsKKwordGltZXI6CisJaWYgKCsrcGctPnF1ZXJpZXNfc2VudCA8IGJyLT5tdWx0aWNhc3RfbGFzdF9tZW1iZXJfY291bnQpCisJCW1vZF90aW1lcigmcGctPnF1ZXJ5X3RpbWVyLAorCQkJICBqaWZmaWVzICsgYnItPm11bHRpY2FzdF9sYXN0X21lbWJlcl9pbnRlcnZhbCk7Cit9CisKK3N0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9wb3J0X2dyb3VwX3F1ZXJ5X2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnID0gKHZvaWQgKilkYXRhOworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSBwZy0+cG9ydDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBwb3J0LT5icjsKKworCXNwaW5fbG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnItPmRldikgfHwgaGxpc3RfdW5oYXNoZWQoJnBnLT5tZ2xpc3QpIHx8CisJICAgIHBnLT5xdWVyaWVzX3NlbnQgPj0gYnItPm11bHRpY2FzdF9sYXN0X21lbWJlcl9jb3VudCkKKwkJZ290byBvdXQ7CisKKwlicl9tdWx0aWNhc3Rfc2VuZF9wb3J0X2dyb3VwX3F1ZXJ5KHBnKTsKKworb3V0OgorCXNwaW5fdW5sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOworfQorCitzdGF0aWMgc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICpicl9tdWx0aWNhc3RfZ2V0X2dyb3VwKAorCXN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgX19iZTMyIGdyb3VwLAorCWludCBoYXNoKQoreworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9odGFibGUgKm1kYiA9IGJyLT5tZGI7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICptcDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcDsKKwl1bnNpZ25lZCBjb3VudCA9IDA7CisJdW5zaWduZWQgbWF4OworCWludCBlbGFzdGljaXR5OworCWludCBlcnI7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShtcCwgcCwgJm1kYi0+bWhhc2hbaGFzaF0sIGhsaXN0W21kYi0+dmVyXSkgeworCQljb3VudCsrOworCQlpZiAodW5saWtlbHkoZ3JvdXAgPT0gbXAtPmFkZHIpKSB7CisJCQlyZXR1cm4gbXA7CisJCX0KKwl9CisKKwllbGFzdGljaXR5ID0gMDsKKwltYXggPSBtZGItPm1heDsKKworCWlmICh1bmxpa2VseShjb3VudCA+IGJyLT5oYXNoX2VsYXN0aWNpdHkgJiYgY291bnQpKSB7CisJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogTXVsdGljYXN0IGhhc2ggdGFibGUgIgorCQkJICAgICAgICJjaGFpbiBsaW1pdCByZWFjaGVkOiAlc1xuIiwKKwkJCSAgICAgICBici0+ZGV2LT5uYW1lLCBwb3J0ID8gcG9ydC0+ZGV2LT5uYW1lIDoKKwkJCQkJCSAgICAgYnItPmRldi0+bmFtZSk7CisKKwkJZWxhc3RpY2l0eSA9IGJyLT5oYXNoX2VsYXN0aWNpdHk7CisJfQorCisJaWYgKG1kYi0+c2l6ZSA+PSBtYXgpIHsKKwkJbWF4ICo9IDI7CisJCWlmICh1bmxpa2VseShtYXggPj0gYnItPmhhc2hfbWF4KSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE11bHRpY2FzdCBoYXNoIHRhYmxlIG1heGltdW0gIgorCQkJICAgICAgICJyZWFjaGVkLCBkaXNhYmxpbmcgc25vb3Bpbmc6ICVzLCAlZFxuIiwKKwkJCSAgICAgICBici0+ZGV2LT5uYW1lLCBwb3J0ID8gcG9ydC0+ZGV2LT5uYW1lIDoKKwkJCQkJCSAgICAgYnItPmRldi0+bmFtZSwKKwkJCSAgICAgICBtYXgpOworCQkJZXJyID0gLUUyQklHOworZGlzYWJsZToKKwkJCWJyLT5tdWx0aWNhc3RfZGlzYWJsZWQgPSAxOworCQkJZ290byBlcnI7CisJCX0KKwl9CisKKwlpZiAobWF4ID4gbWRiLT5tYXggfHwgZWxhc3RpY2l0eSkgeworCQlpZiAobWRiLT5vbGQpIHsKKwkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpCisJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE11bHRpY2FzdCBoYXNoIHRhYmxlICIKKwkJCQkgICAgICAgIm9uIGZpcmU6ICVzXG4iLAorCQkJCSAgICAgICBici0+ZGV2LT5uYW1lLCBwb3J0ID8gcG9ydC0+ZGV2LT5uYW1lIDoKKwkJCQkJCQkgICAgIGJyLT5kZXYtPm5hbWUpOworCQkJZXJyID0gLUVFWElTVDsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJZXJyID0gYnJfbWRiX3JlaGFzaCgmYnItPm1kYiwgbWF4LCBlbGFzdGljaXR5KTsKKwkJaWYgKGVycikgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IENhbm5vdCByZWhhc2ggbXVsdGljYXN0ICIKKwkJCSAgICAgICAiaGFzaCB0YWJsZSwgZGlzYWJsaW5nIHNub29waW5nOiAiCisJCQkgICAgICAgIiVzLCAlZCwgJWRcbiIsCisJCQkgICAgICAgYnItPmRldi0+bmFtZSwgcG9ydCA/IHBvcnQtPmRldi0+bmFtZSA6CisJCQkJCQkgICAgIGJyLT5kZXYtPm5hbWUsCisJCQkgICAgICAgbWRiLT5zaXplLCBlcnIpOworCQkJZ290byBkaXNhYmxlOworCQl9CisKKwkJZXJyID0gLUVBR0FJTjsKKwkJZ290byBlcnI7CisJfQorCisJcmV0dXJuIE5VTEw7CisKK2VycjoKKwltcCA9IEVSUl9QVFIoZXJyKTsKKwlyZXR1cm4gbXA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKmJyX211bHRpY2FzdF9uZXdfZ3JvdXAoCisJc3RydWN0IG5ldF9icmlkZ2UgKmJyLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LCBfX2JlMzIgZ3JvdXApCit7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZSAqbWRiID0gYnItPm1kYjsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1wOworCWludCBoYXNoOworCisJaWYgKCFtZGIpIHsKKwkJaWYgKGJyX21kYl9yZWhhc2goJmJyLT5tZGIsIEJSX0hBU0hfU0laRSwgMCkpCisJCQlyZXR1cm4gTlVMTDsKKwkJZ290byByZWhhc2g7CisJfQorCisJaGFzaCA9IGJyX2lwX2hhc2gobWRiLCBncm91cCk7CisJbXAgPSBicl9tdWx0aWNhc3RfZ2V0X2dyb3VwKGJyLCBwb3J0LCBncm91cCwgaGFzaCk7CisJc3dpdGNoIChQVFJfRVJSKG1wKSkgeworCWNhc2UgMDoKKwkJYnJlYWs7CisKKwljYXNlIC1FQUdBSU46CityZWhhc2g6CisJCW1kYiA9IGJyLT5tZGI7CisJCWhhc2ggPSBicl9pcF9oYXNoKG1kYiwgZ3JvdXApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWdvdG8gb3V0OworCX0KKworCW1wID0ga3phbGxvYyhzaXplb2YoKm1wKSwgR0ZQX0FUT01JQyk7CisJaWYgKHVubGlrZWx5KCFtcCkpCisJCWdvdG8gb3V0OworCisJbXAtPmJyID0gYnI7CisJbXAtPmFkZHIgPSBncm91cDsKKwlzZXR1cF90aW1lcigmbXAtPnRpbWVyLCBicl9tdWx0aWNhc3RfZ3JvdXBfZXhwaXJlZCwKKwkJICAgICh1bnNpZ25lZCBsb25nKW1wKTsKKwlzZXR1cF90aW1lcigmbXAtPnF1ZXJ5X3RpbWVyLCBicl9tdWx0aWNhc3RfZ3JvdXBfcXVlcnlfZXhwaXJlZCwKKwkJICAgICh1bnNpZ25lZCBsb25nKW1wKTsKKworCWhsaXN0X2FkZF9oZWFkX3JjdSgmbXAtPmhsaXN0W21kYi0+dmVyXSwgJm1kYi0+bWhhc2hbaGFzaF0pOworCW1kYi0+c2l6ZSsrOworCitvdXQ6CisJcmV0dXJuIG1wOworfQorCitzdGF0aWMgaW50IGJyX211bHRpY2FzdF9hZGRfZ3JvdXAoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAorCQkJCSAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwgX19iZTMyIGdyb3VwKQoreworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXA7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcDsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwICoqcHA7CisJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOworCWludCBlcnI7CisKKwlpZiAoaXB2NF9pc19sb2NhbF9tdWx0aWNhc3QoZ3JvdXApKQorCQlyZXR1cm4gMDsKKworCXNwaW5fbG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnItPmRldikgfHwKKwkgICAgKHBvcnQgJiYgcG9ydC0+c3RhdGUgPT0gQlJfU1RBVEVfRElTQUJMRUQpKQorCQlnb3RvIG91dDsKKworCW1wID0gYnJfbXVsdGljYXN0X25ld19ncm91cChiciwgcG9ydCwgZ3JvdXApOworCWVyciA9IFBUUl9FUlIobXApOworCWlmICh1bmxpa2VseShJU19FUlIobXApIHx8ICFtcCkpCisJCWdvdG8gZXJyOworCisJaWYgKCFwb3J0KSB7CisJCWhsaXN0X2FkZF9oZWFkKCZtcC0+bWdsaXN0LCAmYnItPm1nbGlzdCk7CisJCW1vZF90aW1lcigmbXAtPnRpbWVyLCBub3cgKyBici0+bXVsdGljYXN0X21lbWJlcnNoaXBfaW50ZXJ2YWwpOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKHBwID0gJm1wLT5wb3J0czsgKHAgPSAqcHApOyBwcCA9ICZwLT5uZXh0KSB7CisJCWlmIChwLT5wb3J0ID09IHBvcnQpCisJCQlnb3RvIGZvdW5kOworCQlpZiAoKHVuc2lnbmVkIGxvbmcpcC0+cG9ydCA8ICh1bnNpZ25lZCBsb25nKXBvcnQpCisJCQlicmVhazsKKwl9CisKKwlwID0ga3phbGxvYyhzaXplb2YoKnApLCBHRlBfQVRPTUlDKTsKKwllcnIgPSAtRU5PTUVNOworCWlmICh1bmxpa2VseSghcCkpCisJCWdvdG8gZXJyOworCisJcC0+YWRkciA9IGdyb3VwOworCXAtPnBvcnQgPSBwb3J0OworCXAtPm5leHQgPSAqcHA7CisJaGxpc3RfYWRkX2hlYWQoJnAtPm1nbGlzdCwgJnBvcnQtPm1nbGlzdCk7CisJc2V0dXBfdGltZXIoJnAtPnRpbWVyLCBicl9tdWx0aWNhc3RfcG9ydF9ncm91cF9leHBpcmVkLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpcCk7CisJc2V0dXBfdGltZXIoJnAtPnF1ZXJ5X3RpbWVyLCBicl9tdWx0aWNhc3RfcG9ydF9ncm91cF9xdWVyeV9leHBpcmVkLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpcCk7CisKKwlyY3VfYXNzaWduX3BvaW50ZXIoKnBwLCBwKTsKKworZm91bmQ6CisJbW9kX3RpbWVyKCZwLT50aW1lciwgbm93ICsgYnItPm11bHRpY2FzdF9tZW1iZXJzaGlwX2ludGVydmFsKTsKK291dDoKKwllcnIgPSAwOworCitlcnI6CisJc3Bpbl91bmxvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3JvdXRlcl9leHBpcmVkKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gKHZvaWQgKilkYXRhOworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHBvcnQtPmJyOworCisJc3Bpbl9sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOworCWlmIChwb3J0LT5tdWx0aWNhc3Rfcm91dGVyICE9IDEgfHwKKwkgICAgdGltZXJfcGVuZGluZygmcG9ydC0+bXVsdGljYXN0X3JvdXRlcl90aW1lcikgfHwKKwkgICAgaGxpc3RfdW5oYXNoZWQoJnBvcnQtPnJsaXN0KSkKKwkJZ290byBvdXQ7CisKKwlobGlzdF9kZWxfaW5pdF9yY3UoJnBvcnQtPnJsaXN0KTsKKworb3V0OgorCXNwaW5fdW5sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOworfQorCitzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfbG9jYWxfcm91dGVyX2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKQoreworfQorCitzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3Rfc2VuZF9xdWVyeShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCisJCQkJICAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsIHUzMiBzZW50KQoreworCXVuc2lnbmVkIGxvbmcgdGltZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKCFuZXRpZl9ydW5uaW5nKGJyLT5kZXYpIHx8IGJyLT5tdWx0aWNhc3RfZGlzYWJsZWQgfHwKKwkgICAgdGltZXJfcGVuZGluZygmYnItPm11bHRpY2FzdF9xdWVyaWVyX3RpbWVyKSkKKwkJcmV0dXJuOworCisJc2tiID0gYnJfbXVsdGljYXN0X2FsbG9jX3F1ZXJ5KGJyLCAwKTsKKwlpZiAoIXNrYikKKwkJZ290byB0aW1lcjsKKworCWlmIChwb3J0KSB7CisJCV9fc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOworCQlza2ItPmRldiA9IHBvcnQtPmRldjsKKwkJTkZfSE9PSyhQRl9CUklER0UsIE5GX0JSX0xPQ0FMX09VVCwgc2tiLCBOVUxMLCBza2ItPmRldiwKKwkJCWRldl9xdWV1ZV94bWl0KTsKKwl9IGVsc2UKKwkJbmV0aWZfcngoc2tiKTsKKwordGltZXI6CisJdGltZSA9IGppZmZpZXM7CisJdGltZSArPSBzZW50IDwgYnItPm11bHRpY2FzdF9zdGFydHVwX3F1ZXJ5X2NvdW50ID8KKwkJYnItPm11bHRpY2FzdF9zdGFydHVwX3F1ZXJ5X2ludGVydmFsIDoKKwkJYnItPm11bHRpY2FzdF9xdWVyeV9pbnRlcnZhbDsKKwltb2RfdGltZXIocG9ydCA/ICZwb3J0LT5tdWx0aWNhc3RfcXVlcnlfdGltZXIgOgorCQkJICZici0+bXVsdGljYXN0X3F1ZXJ5X3RpbWVyLCB0aW1lKTsKK30KKworc3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3BvcnRfcXVlcnlfZXhwaXJlZCh1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9ICh2b2lkICopZGF0YTsKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBwb3J0LT5icjsKKworCXNwaW5fbG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKKwlpZiAocG9ydCAmJiAocG9ydC0+c3RhdGUgPT0gQlJfU1RBVEVfRElTQUJMRUQgfHwKKwkJICAgICBwb3J0LT5zdGF0ZSA9PSBCUl9TVEFURV9CTE9DS0lORykpCisJCWdvdG8gb3V0OworCisJaWYgKHBvcnQtPm11bHRpY2FzdF9zdGFydHVwX3F1ZXJpZXNfc2VudCA8CisJICAgIGJyLT5tdWx0aWNhc3Rfc3RhcnR1cF9xdWVyeV9jb3VudCkKKwkJcG9ydC0+bXVsdGljYXN0X3N0YXJ0dXBfcXVlcmllc19zZW50Kys7CisKKwlicl9tdWx0aWNhc3Rfc2VuZF9xdWVyeShwb3J0LT5iciwgcG9ydCwKKwkJCQlwb3J0LT5tdWx0aWNhc3Rfc3RhcnR1cF9xdWVyaWVzX3NlbnQpOworCitvdXQ6CisJc3Bpbl91bmxvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7Cit9CisKK3ZvaWQgYnJfbXVsdGljYXN0X2FkZF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpCit7CisJcG9ydC0+bXVsdGljYXN0X3JvdXRlciA9IDE7CisKKwlzZXR1cF90aW1lcigmcG9ydC0+bXVsdGljYXN0X3JvdXRlcl90aW1lciwgYnJfbXVsdGljYXN0X3JvdXRlcl9leHBpcmVkLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpcG9ydCk7CisJc2V0dXBfdGltZXIoJnBvcnQtPm11bHRpY2FzdF9xdWVyeV90aW1lciwKKwkJICAgIGJyX211bHRpY2FzdF9wb3J0X3F1ZXJ5X2V4cGlyZWQsICh1bnNpZ25lZCBsb25nKXBvcnQpOworfQorCit2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KQoreworCWRlbF90aW1lcl9zeW5jKCZwb3J0LT5tdWx0aWNhc3Rfcm91dGVyX3RpbWVyKTsKK30KKworc3RhdGljIHZvaWQgX19icl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCkKK3sKKwlwb3J0LT5tdWx0aWNhc3Rfc3RhcnR1cF9xdWVyaWVzX3NlbnQgPSAwOworCisJaWYgKHRyeV90b19kZWxfdGltZXJfc3luYygmcG9ydC0+bXVsdGljYXN0X3F1ZXJ5X3RpbWVyKSA+PSAwIHx8CisJICAgIGRlbF90aW1lcigmcG9ydC0+bXVsdGljYXN0X3F1ZXJ5X3RpbWVyKSkKKwkJbW9kX3RpbWVyKCZwb3J0LT5tdWx0aWNhc3RfcXVlcnlfdGltZXIsIGppZmZpZXMpOworfQorCit2b2lkIGJyX211bHRpY2FzdF9lbmFibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHBvcnQtPmJyOworCisJc3Bpbl9sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOworCWlmIChici0+bXVsdGljYXN0X2Rpc2FibGVkIHx8ICFuZXRpZl9ydW5uaW5nKGJyLT5kZXYpKQorCQlnb3RvIG91dDsKKworCV9fYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHBvcnQpOworCitvdXQ6CisJc3Bpbl91bmxvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7Cit9CisKK3ZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHBvcnQtPmJyOworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnBnOworCXN0cnVjdCBobGlzdF9ub2RlICpwLCAqbjsKKworCXNwaW5fbG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBnLCBwLCBuLCAmcG9ydC0+bWdsaXN0LCBtZ2xpc3QpCisJCWJyX211bHRpY2FzdF9kZWxfcGcoYnIsIHBnKTsKKworCWlmICghaGxpc3RfdW5oYXNoZWQoJnBvcnQtPnJsaXN0KSkKKwkJaGxpc3RfZGVsX2luaXRfcmN1KCZwb3J0LT5ybGlzdCk7CisJZGVsX3RpbWVyKCZwb3J0LT5tdWx0aWNhc3Rfcm91dGVyX3RpbWVyKTsKKwlkZWxfdGltZXIoJnBvcnQtPm11bHRpY2FzdF9xdWVyeV90aW1lcik7CisJc3Bpbl91bmxvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgYnJfbXVsdGljYXN0X2lnbXAzX3JlcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsCisJCQkJICAgICBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LAorCQkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWdtcHYzX3JlcG9ydCAqaWg7CisJc3RydWN0IGlnbXB2M19ncmVjICpncmVjOworCWludCBpOworCWludCBsZW47CisJaW50IG51bTsKKwlpbnQgdHlwZTsKKwlpbnQgZXJyID0gMDsKKwlfX2JlMzIgZ3JvdXA7CisKKwlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2YoKmloKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWggPSBpZ21wdjNfcmVwb3J0X2hkcihza2IpOworCW51bSA9IG50b2hzKGloLT5uZ3JlYyk7CisJbGVuID0gc2l6ZW9mKCppaCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKKwkJbGVuICs9IHNpemVvZigqZ3JlYyk7CisJCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGxlbikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlncmVjID0gKHZvaWQgKikoc2tiLT5kYXRhICsgbGVuKTsKKwkJZ3JvdXAgPSBncmVjLT5ncmVjX21jYTsKKwkJdHlwZSA9IGdyZWMtPmdyZWNfdHlwZTsKKworCQlsZW4gKz0gZ3JlYy0+Z3JlY19uc3JjcyAqIDQ7CisJCWlmICghcHNrYl9tYXlfcHVsbChza2IsIGxlbikpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkvKiBXZSB0cmVhdCB0aGlzIGFzIGFuIElHTVB2MiByZXBvcnQgZm9yIG5vdy4gKi8KKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgSUdNUFYzX01PREVfSVNfSU5DTFVERToKKwkJY2FzZSBJR01QVjNfTU9ERV9JU19FWENMVURFOgorCQljYXNlIElHTVBWM19DSEFOR0VfVE9fSU5DTFVERToKKwkJY2FzZSBJR01QVjNfQ0hBTkdFX1RPX0VYQ0xVREU6CisJCWNhc2UgSUdNUFYzX0FMTE9XX05FV19TT1VSQ0VTOgorCQljYXNlIElHTVBWM19CTE9DS19PTERfU09VUkNFUzoKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJfQorCisJCWVyciA9IGJyX211bHRpY2FzdF9hZGRfZ3JvdXAoYnIsIHBvcnQsIGdyb3VwKTsKKwkJaWYgKGVycikKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIGJyX211bHRpY2FzdF9hZGRfcm91dGVyKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKKwkJCQkgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqKmg7CisKKwlmb3IgKGggPSAmYnItPnJvdXRlcl9saXN0LmZpcnN0OworCSAgICAgKHAgPSAqaCkgJiYKKwkgICAgICh1bnNpZ25lZCBsb25nKWNvbnRhaW5lcl9vZihwLCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0LCBybGlzdCkgPgorCSAgICAgKHVuc2lnbmVkIGxvbmcpcG9ydDsKKwkgICAgIGggPSAmcC0+bmV4dCkKKwkJOworCisJcG9ydC0+cmxpc3QucHByZXYgPSBoOworCXBvcnQtPnJsaXN0Lm5leHQgPSBwOworCXJjdV9hc3NpZ25fcG9pbnRlcigqaCwgJnBvcnQtPnJsaXN0KTsKKwlpZiAocCkKKwkJcC0+cHByZXYgPSAmcG9ydC0+cmxpc3QubmV4dDsKK30KKworc3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X21hcmtfcm91dGVyKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKKwkJCQkgICAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBub3cgPSBqaWZmaWVzOworCisJaWYgKCFwb3J0KSB7CisJCWlmIChici0+bXVsdGljYXN0X3JvdXRlciA9PSAxKQorCQkJbW9kX3RpbWVyKCZici0+bXVsdGljYXN0X3JvdXRlcl90aW1lciwKKwkJCQkgIG5vdyArIGJyLT5tdWx0aWNhc3RfcXVlcmllcl9pbnRlcnZhbCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAocG9ydC0+bXVsdGljYXN0X3JvdXRlciAhPSAxKQorCQlyZXR1cm47CisKKwlpZiAoIWhsaXN0X3VuaGFzaGVkKCZwb3J0LT5ybGlzdCkpCisJCWdvdG8gdGltZXI7CisKKwlicl9tdWx0aWNhc3RfYWRkX3JvdXRlcihiciwgcG9ydCk7CisKK3RpbWVyOgorCW1vZF90aW1lcigmcG9ydC0+bXVsdGljYXN0X3JvdXRlcl90aW1lciwKKwkJICBub3cgKyBici0+bXVsdGljYXN0X3F1ZXJpZXJfaW50ZXJ2YWwpOworfQorCitzdGF0aWMgdm9pZCBicl9tdWx0aWNhc3RfcXVlcnlfcmVjZWl2ZWQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAorCQkJCQlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LAorCQkJCQlfX2JlMzIgc2FkZHIpCit7CisJaWYgKHNhZGRyKQorCQltb2RfdGltZXIoJmJyLT5tdWx0aWNhc3RfcXVlcmllcl90aW1lciwKKwkJCSAgamlmZmllcyArIGJyLT5tdWx0aWNhc3RfcXVlcmllcl9pbnRlcnZhbCk7CisJZWxzZSBpZiAodGltZXJfcGVuZGluZygmYnItPm11bHRpY2FzdF9xdWVyaWVyX3RpbWVyKSkKKwkJcmV0dXJuOworCisJYnJfbXVsdGljYXN0X21hcmtfcm91dGVyKGJyLCBwb3J0KTsKK30KKworc3RhdGljIGludCBicl9tdWx0aWNhc3RfcXVlcnkoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAorCQkJICAgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCwKKwkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGlwaGRyICppcGggPSBpcF9oZHIoc2tiKTsKKwlzdHJ1Y3QgaWdtcGhkciAqaWggPSBpZ21wX2hkcihza2IpOworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXA7CisJc3RydWN0IGlnbXB2M19xdWVyeSAqaWgzOworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgKnA7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqKnBwOworCXVuc2lnbmVkIGxvbmcgbWF4X2RlbGF5OworCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKKwlfX2JlMzIgZ3JvdXA7CisKKwlzcGluX2xvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGJyLT5kZXYpIHx8CisJICAgIChwb3J0ICYmIHBvcnQtPnN0YXRlID09IEJSX1NUQVRFX0RJU0FCTEVEKSkKKwkJZ290byBvdXQ7CisKKwlicl9tdWx0aWNhc3RfcXVlcnlfcmVjZWl2ZWQoYnIsIHBvcnQsIGlwaC0+c2FkZHIpOworCisJZ3JvdXAgPSBpaC0+Z3JvdXA7CisKKwlpZiAoc2tiLT5sZW4gPT0gc2l6ZW9mKCppaCkpIHsKKwkJbWF4X2RlbGF5ID0gaWgtPmNvZGUgKiAoSFogLyBJR01QX1RJTUVSX1NDQUxFKTsKKworCQlpZiAoIW1heF9kZWxheSkgeworCQkJbWF4X2RlbGF5ID0gMTAgKiBIWjsKKwkJCWdyb3VwID0gMDsKKwkJfQorCX0gZWxzZSB7CisJCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaWdtcHYzX3F1ZXJ5KSkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQlpaDMgPSBpZ21wdjNfcXVlcnlfaGRyKHNrYik7CisJCWlmIChpaDMtPm5zcmNzKQorCQkJcmV0dXJuIDA7CisKKwkJbWF4X2RlbGF5ID0gaWgzLT5jb2RlID8gMSA6CisJCQkgICAgSUdNUFYzX01SQyhpaDMtPmNvZGUpICogKEhaIC8gSUdNUF9USU1FUl9TQ0FMRSk7CisJfQorCisJaWYgKCFncm91cCkKKwkJZ290byBvdXQ7CisKKwltcCA9IGJyX21kYl9pcF9nZXQoYnItPm1kYiwgZ3JvdXApOworCWlmICghbXApCisJCWdvdG8gb3V0OworCisJbWF4X2RlbGF5ICo9IGJyLT5tdWx0aWNhc3RfbGFzdF9tZW1iZXJfY291bnQ7CisKKwlpZiAoIWhsaXN0X3VuaGFzaGVkKCZtcC0+bWdsaXN0KSAmJgorCSAgICAodGltZXJfcGVuZGluZygmbXAtPnRpbWVyKSA/CisJICAgICB0aW1lX2FmdGVyKG1wLT50aW1lci5leHBpcmVzLCBub3cgKyBtYXhfZGVsYXkpIDoKKwkgICAgIHRyeV90b19kZWxfdGltZXJfc3luYygmbXAtPnRpbWVyKSA+PSAwKSkKKwkJbW9kX3RpbWVyKCZtcC0+dGltZXIsIG5vdyArIG1heF9kZWxheSk7CisKKwlmb3IgKHBwID0gJm1wLT5wb3J0czsgKHAgPSAqcHApOyBwcCA9ICZwLT5uZXh0KSB7CisJCWlmICh0aW1lcl9wZW5kaW5nKCZwLT50aW1lcikgPworCQkgICAgdGltZV9hZnRlcihwLT50aW1lci5leHBpcmVzLCBub3cgKyBtYXhfZGVsYXkpIDoKKwkJICAgIHRyeV90b19kZWxfdGltZXJfc3luYygmcC0+dGltZXIpID49IDApCisJCQltb2RfdGltZXIoJm1wLT50aW1lciwgbm93ICsgbWF4X2RlbGF5KTsKKwl9CisKK291dDoKKwlzcGluX3VubG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X2xlYXZlX2dyb3VwKHN0cnVjdCBuZXRfYnJpZGdlICpiciwKKwkJCQkgICAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsCisJCQkJICAgICBfX2JlMzIgZ3JvdXApCit7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZSAqbWRiOworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXA7CisJc3RydWN0IG5ldF9icmlkZ2VfcG9ydF9ncm91cCAqcDsKKwl1bnNpZ25lZCBsb25nIG5vdzsKKwl1bnNpZ25lZCBsb25nIHRpbWU7CisKKwlpZiAoaXB2NF9pc19sb2NhbF9tdWx0aWNhc3QoZ3JvdXApKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGJyLT5kZXYpIHx8CisJICAgIChwb3J0ICYmIHBvcnQtPnN0YXRlID09IEJSX1NUQVRFX0RJU0FCTEVEKSB8fAorCSAgICB0aW1lcl9wZW5kaW5nKCZici0+bXVsdGljYXN0X3F1ZXJpZXJfdGltZXIpKQorCQlnb3RvIG91dDsKKworCW1kYiA9IGJyLT5tZGI7CisJbXAgPSBicl9tZGJfaXBfZ2V0KG1kYiwgZ3JvdXApOworCWlmICghbXApCisJCWdvdG8gb3V0OworCisJbm93ID0gamlmZmllczsKKwl0aW1lID0gbm93ICsgYnItPm11bHRpY2FzdF9sYXN0X21lbWJlcl9jb3VudCAqCisJCSAgICAgYnItPm11bHRpY2FzdF9sYXN0X21lbWJlcl9pbnRlcnZhbDsKKworCWlmICghcG9ydCkgeworCQlpZiAoIWhsaXN0X3VuaGFzaGVkKCZtcC0+bWdsaXN0KSAmJgorCQkgICAgKHRpbWVyX3BlbmRpbmcoJm1wLT50aW1lcikgPworCQkgICAgIHRpbWVfYWZ0ZXIobXAtPnRpbWVyLmV4cGlyZXMsIHRpbWUpIDoKKwkJICAgICB0cnlfdG9fZGVsX3RpbWVyX3N5bmMoJm1wLT50aW1lcikgPj0gMCkpIHsKKwkJCW1vZF90aW1lcigmbXAtPnRpbWVyLCB0aW1lKTsKKworCQkJbXAtPnF1ZXJpZXNfc2VudCA9IDA7CisJCQltb2RfdGltZXIoJm1wLT5xdWVyeV90aW1lciwgbm93KTsKKwkJfQorCisJCWdvdG8gb3V0OworCX0KKworCWZvciAocCA9IG1wLT5wb3J0czsgcDsgcCA9IHAtPm5leHQpIHsKKwkJaWYgKHAtPnBvcnQgIT0gcG9ydCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghaGxpc3RfdW5oYXNoZWQoJnAtPm1nbGlzdCkgJiYKKwkJICAgICh0aW1lcl9wZW5kaW5nKCZwLT50aW1lcikgPworCQkgICAgIHRpbWVfYWZ0ZXIocC0+dGltZXIuZXhwaXJlcywgdGltZSkgOgorCQkgICAgIHRyeV90b19kZWxfdGltZXJfc3luYygmcC0+dGltZXIpID49IDApKSB7CisJCQltb2RfdGltZXIoJnAtPnRpbWVyLCB0aW1lKTsKKworCQkJcC0+cXVlcmllc19zZW50ID0gMDsKKwkJCW1vZF90aW1lcigmcC0+cXVlcnlfdGltZXIsIG5vdyk7CisJCX0KKworCQlicmVhazsKKwl9CisKK291dDoKKwlzcGluX3VubG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKK30KKworc3RhdGljIGludCBicl9tdWx0aWNhc3RfaXB2NF9yY3Yoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAorCQkJCSBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LAorCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBza19idWZmICpza2IyID0gc2tiOworCXN0cnVjdCBpcGhkciAqaXBoOworCXN0cnVjdCBpZ21waGRyICppaDsKKwl1bnNpZ25lZCBsZW47CisJdW5zaWduZWQgb2Zmc2V0OworCWludCBlcnI7CisKKwlCUl9JTlBVVF9TS0JfQ0Ioc2tiKS0+aWdtcCA9IDA7CisJQlJfSU5QVVRfU0tCX0NCKHNrYiktPm1yb3V0ZXJzX29ubHkgPSAwOworCisJLyogV2UgdHJlYXQgT09NIGFzIHBhY2tldCBsb3NzIGZvciBub3cuICovCisJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKCppcGgpKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpcGggPSBpcF9oZHIoc2tiKTsKKworCWlmIChpcGgtPmlobCA8IDUgfHwgaXBoLT52ZXJzaW9uICE9IDQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgaXBfaGRybGVuKHNrYikpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlwaCA9IGlwX2hkcihza2IpOworCisJaWYgKHVubGlrZWx5KGlwX2Zhc3RfY3N1bSgodTggKilpcGgsIGlwaC0+aWhsKSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGlwaC0+cHJvdG9jb2wgIT0gSVBQUk9UT19JR01QKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IG50b2hzKGlwaC0+dG90X2xlbik7CisJaWYgKHNrYi0+bGVuIDwgbGVuIHx8IGxlbiA8IGlwX2hkcmxlbihza2IpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChza2ItPmxlbiA+IGxlbikgeworCQlza2IyID0gc2tiX2Nsb25lKHNrYiwgR0ZQX0FUT01JQyk7CisJCWlmICghc2tiMikKKwkJCXJldHVybiAtRU5PTUVNOworCisJCWVyciA9IHBza2JfdHJpbV9yY3N1bShza2IyLCBsZW4pOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlsZW4gLT0gaXBfaGRybGVuKHNrYjIpOworCW9mZnNldCA9IHNrYl9uZXR3b3JrX29mZnNldChza2IyKSArIGlwX2hkcmxlbihza2IyKTsKKwlfX3NrYl9wdWxsKHNrYjIsIG9mZnNldCk7CisJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiMik7CisKKwllcnIgPSAtRUlOVkFMOworCWlmICghcHNrYl9tYXlfcHVsbChza2IyLCBzaXplb2YoKmloKSkpCisJCWdvdG8gb3V0OworCisJaXBoID0gaXBfaGRyKHNrYjIpOworCisJc3dpdGNoIChza2IyLT5pcF9zdW1tZWQpIHsKKwljYXNlIENIRUNLU1VNX0NPTVBMRVRFOgorCQlpZiAoIWNzdW1fZm9sZChza2IyLT5jc3VtKSkKKwkJCWJyZWFrOworCQkvKiBmYWxsIHRocm91Z2ggKi8KKwljYXNlIENIRUNLU1VNX05PTkU6CisJCXNrYjItPmNzdW0gPSAwOworCQlpZiAoc2tiX2NoZWNrc3VtX2NvbXBsZXRlKHNrYjIpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZXJyID0gMDsKKworCUJSX0lOUFVUX1NLQl9DQihza2IpLT5pZ21wID0gMTsKKwlpaCA9IGlnbXBfaGRyKHNrYjIpOworCisJc3dpdGNoIChpaC0+dHlwZSkgeworCWNhc2UgSUdNUF9IT1NUX01FTUJFUlNISVBfUkVQT1JUOgorCWNhc2UgSUdNUFYyX0hPU1RfTUVNQkVSU0hJUF9SRVBPUlQ6CisJCUJSX0lOUFVUX1NLQl9DQihza2IyKS0+bXJvdXRlcnNfb25seSA9IDE7CisJCWVyciA9IGJyX211bHRpY2FzdF9hZGRfZ3JvdXAoYnIsIHBvcnQsIGloLT5ncm91cCk7CisJCWJyZWFrOworCWNhc2UgSUdNUFYzX0hPU1RfTUVNQkVSU0hJUF9SRVBPUlQ6CisJCWVyciA9IGJyX211bHRpY2FzdF9pZ21wM19yZXBvcnQoYnIsIHBvcnQsIHNrYjIpOworCQlicmVhazsKKwljYXNlIElHTVBfSE9TVF9NRU1CRVJTSElQX1FVRVJZOgorCQllcnIgPSBicl9tdWx0aWNhc3RfcXVlcnkoYnIsIHBvcnQsIHNrYjIpOworCQlicmVhazsKKwljYXNlIElHTVBfSE9TVF9MRUFWRV9NRVNTQUdFOgorCQlicl9tdWx0aWNhc3RfbGVhdmVfZ3JvdXAoYnIsIHBvcnQsIGloLT5ncm91cCk7CisJCWJyZWFrOworCX0KKworb3V0OgorCV9fc2tiX3B1c2goc2tiMiwgb2Zmc2V0KTsKKwlpZiAoc2tiMiAhPSBza2IpCisJCWtmcmVlX3NrYihza2IyKTsKKwlyZXR1cm4gZXJyOworfQorCitpbnQgYnJfbXVsdGljYXN0X3JjdihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsCisJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlpZiAoYnItPm11bHRpY2FzdF9kaXNhYmxlZCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wpIHsKKwljYXNlIGh0b25zKEVUSF9QX0lQKToKKwkJcmV0dXJuIGJyX211bHRpY2FzdF9pcHY0X3JjdihiciwgcG9ydCwgc2tiKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYnJfbXVsdGljYXN0X3F1ZXJ5X2V4cGlyZWQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9ICh2b2lkICopZGF0YTsKKworCXNwaW5fbG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKKwlpZiAoYnItPm11bHRpY2FzdF9zdGFydHVwX3F1ZXJpZXNfc2VudCA8CisJICAgIGJyLT5tdWx0aWNhc3Rfc3RhcnR1cF9xdWVyeV9jb3VudCkKKwkJYnItPm11bHRpY2FzdF9zdGFydHVwX3F1ZXJpZXNfc2VudCsrOworCisJYnJfbXVsdGljYXN0X3NlbmRfcXVlcnkoYnIsIE5VTEwsIGJyLT5tdWx0aWNhc3Rfc3RhcnR1cF9xdWVyaWVzX3NlbnQpOworCisJc3Bpbl91bmxvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7Cit9CisKK3ZvaWQgYnJfbXVsdGljYXN0X2luaXQoc3RydWN0IG5ldF9icmlkZ2UgKmJyKQoreworCWJyLT5oYXNoX2VsYXN0aWNpdHkgPSA0OworCWJyLT5oYXNoX21heCA9IDUxMjsKKworCWJyLT5tdWx0aWNhc3Rfcm91dGVyID0gMTsKKwlici0+bXVsdGljYXN0X2xhc3RfbWVtYmVyX2NvdW50ID0gMjsKKwlici0+bXVsdGljYXN0X3N0YXJ0dXBfcXVlcnlfY291bnQgPSAyOworCisJYnItPm11bHRpY2FzdF9sYXN0X21lbWJlcl9pbnRlcnZhbCA9IEhaOworCWJyLT5tdWx0aWNhc3RfcXVlcnlfcmVzcG9uc2VfaW50ZXJ2YWwgPSAxMCAqIEhaOworCWJyLT5tdWx0aWNhc3Rfc3RhcnR1cF9xdWVyeV9pbnRlcnZhbCA9IDEyNSAqIEhaIC8gNDsKKwlici0+bXVsdGljYXN0X3F1ZXJ5X2ludGVydmFsID0gMTI1ICogSFo7CisJYnItPm11bHRpY2FzdF9xdWVyaWVyX2ludGVydmFsID0gMjU1ICogSFo7CisJYnItPm11bHRpY2FzdF9tZW1iZXJzaGlwX2ludGVydmFsID0gMjYwICogSFo7CisKKwlzcGluX2xvY2tfaW5pdCgmYnItPm11bHRpY2FzdF9sb2NrKTsKKwlzZXR1cF90aW1lcigmYnItPm11bHRpY2FzdF9yb3V0ZXJfdGltZXIsCisJCSAgICBicl9tdWx0aWNhc3RfbG9jYWxfcm91dGVyX2V4cGlyZWQsIDApOworCXNldHVwX3RpbWVyKCZici0+bXVsdGljYXN0X3F1ZXJpZXJfdGltZXIsCisJCSAgICBicl9tdWx0aWNhc3RfbG9jYWxfcm91dGVyX2V4cGlyZWQsIDApOworCXNldHVwX3RpbWVyKCZici0+bXVsdGljYXN0X3F1ZXJ5X3RpbWVyLCBicl9tdWx0aWNhc3RfcXVlcnlfZXhwaXJlZCwKKwkJICAgICh1bnNpZ25lZCBsb25nKWJyKTsKK30KKwordm9pZCBicl9tdWx0aWNhc3Rfb3BlbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpCit7CisJYnItPm11bHRpY2FzdF9zdGFydHVwX3F1ZXJpZXNfc2VudCA9IDA7CisKKwlpZiAoYnItPm11bHRpY2FzdF9kaXNhYmxlZCkKKwkJcmV0dXJuOworCisJbW9kX3RpbWVyKCZici0+bXVsdGljYXN0X3F1ZXJ5X3RpbWVyLCBqaWZmaWVzKTsKK30KKwordm9pZCBicl9tdWx0aWNhc3Rfc3RvcChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpCit7CisJc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZSAqbWRiOworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbXA7CisJc3RydWN0IGhsaXN0X25vZGUgKnAsICpuOworCXUzMiB2ZXI7CisJaW50IGk7CisKKwlkZWxfdGltZXJfc3luYygmYnItPm11bHRpY2FzdF9yb3V0ZXJfdGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZici0+bXVsdGljYXN0X3F1ZXJpZXJfdGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZici0+bXVsdGljYXN0X3F1ZXJ5X3RpbWVyKTsKKworCXNwaW5fbG9ja19iaCgmYnItPm11bHRpY2FzdF9sb2NrKTsKKwltZGIgPSBici0+bWRiOworCWlmICghbWRiKQorCQlnb3RvIG91dDsKKworCWJyLT5tZGIgPSBOVUxMOworCisJdmVyID0gbWRiLT52ZXI7CisJZm9yIChpID0gMDsgaSA8IG1kYi0+bWF4OyBpKyspIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtcCwgcCwgbiwgJm1kYi0+bWhhc2hbaV0sCisJCQkJCSAgaGxpc3RbdmVyXSkgeworCQkJZGVsX3RpbWVyKCZtcC0+dGltZXIpOworCQkJZGVsX3RpbWVyKCZtcC0+cXVlcnlfdGltZXIpOworCQkJY2FsbF9yY3VfYmgoJm1wLT5yY3UsIGJyX211bHRpY2FzdF9mcmVlX2dyb3VwKTsKKwkJfQorCX0KKworCWlmIChtZGItPm9sZCkgeworCQlzcGluX3VubG9ja19iaCgmYnItPm11bHRpY2FzdF9sb2NrKTsKKwkJc3luY2hyb25pemVfcmN1X2JoKCk7CisJCXNwaW5fbG9ja19iaCgmYnItPm11bHRpY2FzdF9sb2NrKTsKKwkJV0FSTl9PTihtZGItPm9sZCk7CisJfQorCisJbWRiLT5vbGQgPSBtZGI7CisJY2FsbF9yY3VfYmgoJm1kYi0+cmN1LCBicl9tZGJfZnJlZSk7CisKK291dDoKKwlzcGluX3VubG9ja19iaCgmYnItPm11bHRpY2FzdF9sb2NrKTsKK30KKworaW50IGJyX211bHRpY2FzdF9zZXRfcm91dGVyKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJaW50IGVyciA9IC1FTk9FTlQ7CisKKwlzcGluX2xvY2tfYmgoJmJyLT5tdWx0aWNhc3RfbG9jayk7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGJyLT5kZXYpKQorCQlnb3RvIHVubG9jazsKKworCXN3aXRjaCAodmFsKSB7CisJY2FzZSAwOgorCWNhc2UgMjoKKwkJZGVsX3RpbWVyKCZici0+bXVsdGljYXN0X3JvdXRlcl90aW1lcik7CisJCS8qIGZhbGwgdGhyb3VnaCAqLworCWNhc2UgMToKKwkJYnItPm11bHRpY2FzdF9yb3V0ZXIgPSB2YWw7CisJCWVyciA9IDA7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorCit1bmxvY2s6CisJc3Bpbl91bmxvY2tfYmgoJmJyLT5tdWx0aWNhc3RfbG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgYnJfbXVsdGljYXN0X3NldF9wb3J0X3JvdXRlcihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSBwLT5icjsKKwlpbnQgZXJyID0gLUVOT0VOVDsKKworCXNwaW5fbG9jaygmYnItPm11bHRpY2FzdF9sb2NrKTsKKwlpZiAoIW5ldGlmX3J1bm5pbmcoYnItPmRldikgfHwgcC0+c3RhdGUgPT0gQlJfU1RBVEVfRElTQUJMRUQpCisJCWdvdG8gdW5sb2NrOworCisJc3dpdGNoICh2YWwpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCWNhc2UgMjoKKwkJcC0+bXVsdGljYXN0X3JvdXRlciA9IHZhbDsKKwkJZXJyID0gMDsKKworCQlpZiAodmFsIDwgMiAmJiAhaGxpc3RfdW5oYXNoZWQoJnAtPnJsaXN0KSkKKwkJCWhsaXN0X2RlbF9pbml0X3JjdSgmcC0+cmxpc3QpOworCisJCWlmICh2YWwgPT0gMSkKKwkJCWJyZWFrOworCisJCWRlbF90aW1lcigmcC0+bXVsdGljYXN0X3JvdXRlcl90aW1lcik7CisKKwkJaWYgKHZhbCA9PSAwKQorCQkJYnJlYWs7CisKKwkJYnJfbXVsdGljYXN0X2FkZF9yb3V0ZXIoYnIsIHApOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVyciA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwordW5sb2NrOgorCXNwaW5fdW5sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOworCisJcmV0dXJuIGVycjsKK30KKworaW50IGJyX211bHRpY2FzdF90b2dnbGUoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0OworCWludCBlcnIgPSAtRU5PRU5UOworCisJc3Bpbl9sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOworCWlmICghbmV0aWZfcnVubmluZyhici0+ZGV2KSkKKwkJZ290byB1bmxvY2s7CisKKwllcnIgPSAwOworCWlmIChici0+bXVsdGljYXN0X2Rpc2FibGVkID09ICF2YWwpCisJCWdvdG8gdW5sb2NrOworCisJYnItPm11bHRpY2FzdF9kaXNhYmxlZCA9ICF2YWw7CisJaWYgKGJyLT5tdWx0aWNhc3RfZGlzYWJsZWQpCisJCWdvdG8gdW5sb2NrOworCisJaWYgKGJyLT5tZGIpIHsKKwkJaWYgKGJyLT5tZGItPm9sZCkgeworCQkJZXJyID0gLUVFWElTVDsKK3JvbGxiYWNrOgorCQkJYnItPm11bHRpY2FzdF9kaXNhYmxlZCA9ICEhdmFsOworCQkJZ290byB1bmxvY2s7CisJCX0KKworCQllcnIgPSBicl9tZGJfcmVoYXNoKCZici0+bWRiLCBici0+bWRiLT5tYXgsCisJCQkJICAgIGJyLT5oYXNoX2VsYXN0aWNpdHkpOworCQlpZiAoZXJyKQorCQkJZ290byByb2xsYmFjazsKKwl9CisKKwlicl9tdWx0aWNhc3Rfb3Blbihicik7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCAmYnItPnBvcnRfbGlzdCwgbGlzdCkgeworCQlpZiAocG9ydC0+c3RhdGUgPT0gQlJfU1RBVEVfRElTQUJMRUQgfHwKKwkJICAgIHBvcnQtPnN0YXRlID09IEJSX1NUQVRFX0JMT0NLSU5HKQorCQkJY29udGludWU7CisKKwkJX19icl9tdWx0aWNhc3RfZW5hYmxlX3BvcnQocG9ydCk7CisJfQorCit1bmxvY2s6CisJc3Bpbl91bmxvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7CisKKwlyZXR1cm4gZXJyOworfQorCitpbnQgYnJfbXVsdGljYXN0X3NldF9oYXNoX21heChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWludCBlcnIgPSAtRU5PRU5UOworCXUzMiBvbGQ7CisKKwlzcGluX2xvY2soJmJyLT5tdWx0aWNhc3RfbG9jayk7CisJaWYgKCFuZXRpZl9ydW5uaW5nKGJyLT5kZXYpKQorCQlnb3RvIHVubG9jazsKKworCWVyciA9IC1FSU5WQUw7CisJaWYgKCFpc19wb3dlcl9vZl8yKHZhbCkpCisJCWdvdG8gdW5sb2NrOworCWlmIChici0+bWRiICYmIHZhbCA8IGJyLT5tZGItPnNpemUpCisJCWdvdG8gdW5sb2NrOworCisJZXJyID0gMDsKKworCW9sZCA9IGJyLT5oYXNoX21heDsKKwlici0+aGFzaF9tYXggPSB2YWw7CisKKwlpZiAoYnItPm1kYikgeworCQlpZiAoYnItPm1kYi0+b2xkKSB7CisJCQllcnIgPSAtRUVYSVNUOworcm9sbGJhY2s6CisJCQlici0+aGFzaF9tYXggPSBvbGQ7CisJCQlnb3RvIHVubG9jazsKKwkJfQorCisJCWVyciA9IGJyX21kYl9yZWhhc2goJmJyLT5tZGIsIGJyLT5oYXNoX21heCwKKwkJCQkgICAgYnItPmhhc2hfZWxhc3RpY2l0eSk7CisJCWlmIChlcnIpCisJCQlnb3RvIHJvbGxiYWNrOworCX0KKwordW5sb2NrOgorCXNwaW5fdW5sb2NrKCZici0+bXVsdGljYXN0X2xvY2spOworCisJcmV0dXJuIGVycjsKK30KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKaW5kZXggMjExNGU0NS4uZmVmMDM4NCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKKysrIGIvbmV0L2JyaWRnZS9icl9wcml2YXRlLmgKQEAgLTU3LDYgKzU3LDQxIEBACiAJdW5zaWduZWQgY2hhcgkJCWlzX3N0YXRpYzsKIH07CiAKK3N0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAgeworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnQJCSpwb3J0OworCXN0cnVjdCBuZXRfYnJpZGdlX3BvcnRfZ3JvdXAJKm5leHQ7CisJc3RydWN0IGhsaXN0X25vZGUJCW1nbGlzdDsKKwlzdHJ1Y3QgcmN1X2hlYWQJCQlyY3U7CisJc3RydWN0IHRpbWVyX2xpc3QJCXRpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0CQlxdWVyeV90aW1lcjsKKwlfX2JlMzIJCQkJYWRkcjsKKwl1MzIJCQkJcXVlcmllc19zZW50OworfTsKKworc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5Cit7CisJc3RydWN0IGhsaXN0X25vZGUJCWhsaXN0WzJdOworCXN0cnVjdCBobGlzdF9ub2RlCQltZ2xpc3Q7CisJc3RydWN0IG5ldF9icmlkZ2UJCSpicjsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0X2dyb3VwCSpwb3J0czsKKwlzdHJ1Y3QgcmN1X2hlYWQJCQlyY3U7CisJc3RydWN0IHRpbWVyX2xpc3QJCXRpbWVyOworCXN0cnVjdCB0aW1lcl9saXN0CQlxdWVyeV90aW1lcjsKKwlfX2JlMzIJCQkJYWRkcjsKKwl1MzIJCQkJcXVlcmllc19zZW50OworfTsKKworc3RydWN0IG5ldF9icmlkZ2VfbWRiX2h0YWJsZQoreworCXN0cnVjdCBobGlzdF9oZWFkCQkqbWhhc2g7CisJc3RydWN0IHJjdV9oZWFkCQkJcmN1OworCXN0cnVjdCBuZXRfYnJpZGdlX21kYl9odGFibGUJKm9sZDsKKwl1MzIJCQkJc2l6ZTsKKwl1MzIJCQkJbWF4OworCXUzMgkJCQlzZWNyZXQ7CisJdTMyCQkJCXZlcjsKK307CisKIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQKIHsKIAlzdHJ1Y3QgbmV0X2JyaWRnZQkJKmJyOwpAQCAtODQsNiArMTE5LDE1IEBACiAKIAl1bnNpZ25lZCBsb25nIAkJCWZsYWdzOwogI2RlZmluZSBCUl9IQUlSUElOX01PREUJCTB4MDAwMDAwMDEKKworI2lmZGVmIENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORworCXUzMgkJCQltdWx0aWNhc3Rfc3RhcnR1cF9xdWVyaWVzX3NlbnQ7CisJdW5zaWduZWQgY2hhcgkJCW11bHRpY2FzdF9yb3V0ZXI7CisJc3RydWN0IHRpbWVyX2xpc3QJCW11bHRpY2FzdF9yb3V0ZXJfdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QJCW11bHRpY2FzdF9xdWVyeV90aW1lcjsKKwlzdHJ1Y3QgaGxpc3RfaGVhZAkJbWdsaXN0OworCXN0cnVjdCBobGlzdF9ub2RlCQlybGlzdDsKKyNlbmRpZgogfTsKIAogc3RydWN0IG5ldF9icmlkZ2UKQEAgLTkzLDcgKzEzNyw2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UJCSpkZXY7CiAJc3BpbmxvY2tfdAkJCWhhc2hfbG9jazsKIAlzdHJ1Y3QgaGxpc3RfaGVhZAkJaGFzaFtCUl9IQVNIX1NJWkVdOwotCXN0cnVjdCBsaXN0X2hlYWQJCWFnZV9saXN0OwogCXVuc2lnbmVkIGxvbmcJCQlmZWF0dXJlX21hc2s7CiAjaWZkZWYgQ09ORklHX0JSSURHRV9ORVRGSUxURVIKIAlzdHJ1Y3QgcnRhYmxlIAkJCWZha2VfcnRhYmxlOwpAQCAtMTI1LDYgKzE2OCwzNSBAQAogCXVuc2lnbmVkIGNoYXIJCQl0b3BvbG9neV9jaGFuZ2U7CiAJdW5zaWduZWQgY2hhcgkJCXRvcG9sb2d5X2NoYW5nZV9kZXRlY3RlZDsKIAorI2lmZGVmIENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORworCXVuc2lnbmVkIGNoYXIJCQltdWx0aWNhc3Rfcm91dGVyOworCisJdTgJCQkJbXVsdGljYXN0X2Rpc2FibGVkOjE7CisKKwl1MzIJCQkJaGFzaF9lbGFzdGljaXR5OworCXUzMgkJCQloYXNoX21heDsKKworCXUzMgkJCQltdWx0aWNhc3RfbGFzdF9tZW1iZXJfY291bnQ7CisJdTMyCQkJCW11bHRpY2FzdF9zdGFydHVwX3F1ZXJpZXNfc2VudDsKKwl1MzIJCQkJbXVsdGljYXN0X3N0YXJ0dXBfcXVlcnlfY291bnQ7CisKKwl1bnNpZ25lZCBsb25nCQkJbXVsdGljYXN0X2xhc3RfbWVtYmVyX2ludGVydmFsOworCXVuc2lnbmVkIGxvbmcJCQltdWx0aWNhc3RfbWVtYmVyc2hpcF9pbnRlcnZhbDsKKwl1bnNpZ25lZCBsb25nCQkJbXVsdGljYXN0X3F1ZXJpZXJfaW50ZXJ2YWw7CisJdW5zaWduZWQgbG9uZwkJCW11bHRpY2FzdF9xdWVyeV9pbnRlcnZhbDsKKwl1bnNpZ25lZCBsb25nCQkJbXVsdGljYXN0X3F1ZXJ5X3Jlc3BvbnNlX2ludGVydmFsOworCXVuc2lnbmVkIGxvbmcJCQltdWx0aWNhc3Rfc3RhcnR1cF9xdWVyeV9pbnRlcnZhbDsKKworCXNwaW5sb2NrX3QJCQltdWx0aWNhc3RfbG9jazsKKwlzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfaHRhYmxlCSptZGI7CisJc3RydWN0IGhsaXN0X2hlYWQJCXJvdXRlcl9saXN0OworCXN0cnVjdCBobGlzdF9oZWFkCQltZ2xpc3Q7CisKKwlzdHJ1Y3QgdGltZXJfbGlzdAkJbXVsdGljYXN0X3JvdXRlcl90aW1lcjsKKwlzdHJ1Y3QgdGltZXJfbGlzdAkJbXVsdGljYXN0X3F1ZXJpZXJfdGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QJCW11bHRpY2FzdF9xdWVyeV90aW1lcjsKKyNlbmRpZgorCiAJc3RydWN0IHRpbWVyX2xpc3QJCWhlbGxvX3RpbWVyOwogCXN0cnVjdCB0aW1lcl9saXN0CQl0Y25fdGltZXI7CiAJc3RydWN0IHRpbWVyX2xpc3QJCXRvcG9sb2d5X2NoYW5nZV90aW1lcjsKQEAgLTEzMiw2ICsyMDQsMTQgQEAKIAlzdHJ1Y3Qga29iamVjdAkJCSppZm9iajsKIH07CiAKK3N0cnVjdCBicl9pbnB1dF9za2JfY2IgeworCXN0cnVjdCBuZXRfZGV2aWNlICpicmRldjsKKwlpbnQgaWdtcDsKKwlpbnQgbXJvdXRlcnNfb25seTsKK307CisKKyNkZWZpbmUgQlJfSU5QVVRfU0tCX0NCKF9fc2tiKQkoKHN0cnVjdCBicl9pbnB1dF9za2JfY2IgKikoX19za2IpLT5jYikKKwogZXh0ZXJuIHN0cnVjdCBub3RpZmllcl9ibG9jayBicl9kZXZpY2Vfbm90aWZpZXI7CiBleHRlcm4gY29uc3QgdTggYnJfZ3JvdXBfYWRkcmVzc1tFVEhfQUxFTl07CiAKQEAgLTE3NSw3ICsyNTUsOCBAQAogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQgYnJfZm9yd2FyZF9maW5pc2goc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gdm9pZCBicl9mbG9vZF9kZWxpdmVyKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7Ci1leHRlcm4gdm9pZCBicl9mbG9vZF9mb3J3YXJkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gdm9pZCBicl9mbG9vZF9mb3J3YXJkKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYjIpOwogCiAvKiBicl9pZi5jICovCiBleHRlcm4gdm9pZCBicl9wb3J0X2NhcnJpZXJfY2hlY2soc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCk7CkBAIC0xOTgsNiArMjc5LDk0IEBACiBleHRlcm4gaW50IGJyX2Rldl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKTsKIGV4dGVybiBpbnQgYnJfaW9jdGxfZGV2aWNlbGVzc19zdHViKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CiAKKy8qIGJyX211bHRpY2FzdC5jICovCisjaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HCitleHRlcm4gaW50IGJyX211bHRpY2FzdF9yY3Yoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAorCQkJICAgIHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQsCisJCQkgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICpicl9tZGJfZ2V0KHN0cnVjdCBuZXRfYnJpZGdlICpiciwKKwkJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IpOworZXh0ZXJuIHZvaWQgYnJfbXVsdGljYXN0X2FkZF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpOworZXh0ZXJuIHZvaWQgYnJfbXVsdGljYXN0X2RlbF9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpOworZXh0ZXJuIHZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpOworZXh0ZXJuIHZvaWQgYnJfbXVsdGljYXN0X2Rpc2FibGVfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KTsKK2V4dGVybiB2b2lkIGJyX211bHRpY2FzdF9pbml0KHN0cnVjdCBuZXRfYnJpZGdlICpicik7CitleHRlcm4gdm9pZCBicl9tdWx0aWNhc3Rfb3BlbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpOworZXh0ZXJuIHZvaWQgYnJfbXVsdGljYXN0X3N0b3Aoc3RydWN0IG5ldF9icmlkZ2UgKmJyKTsKK2V4dGVybiB2b2lkIGJyX211bHRpY2FzdF9kZWxpdmVyKHN0cnVjdCBuZXRfYnJpZGdlX21kYl9lbnRyeSAqbWRzdCwKKwkJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYik7CitleHRlcm4gdm9pZCBicl9tdWx0aWNhc3RfZm9yd2FyZChzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1kc3QsCisJCQkJIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmICpza2IyKTsKK2V4dGVybiBpbnQgYnJfbXVsdGljYXN0X3NldF9yb3V0ZXIoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCk7CitleHRlcm4gaW50IGJyX211bHRpY2FzdF9zZXRfcG9ydF9yb3V0ZXIoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwKKwkJCQkJdW5zaWduZWQgbG9uZyB2YWwpOworZXh0ZXJuIGludCBicl9tdWx0aWNhc3RfdG9nZ2xlKHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwpOworZXh0ZXJuIGludCBicl9tdWx0aWNhc3Rfc2V0X2hhc2hfbWF4KHN0cnVjdCBuZXRfYnJpZGdlICpiciwgdW5zaWduZWQgbG9uZyB2YWwpOworCitzdGF0aWMgaW5saW5lIGJvb2wgYnJfbXVsdGljYXN0X2lzX3JvdXRlcihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpCit7CisJcmV0dXJuIGJyLT5tdWx0aWNhc3Rfcm91dGVyID09IDIgfHwKKwkgICAgICAgKGJyLT5tdWx0aWNhc3Rfcm91dGVyID09IDEgJiYKKwkJdGltZXJfcGVuZGluZygmYnItPm11bHRpY2FzdF9yb3V0ZXJfdGltZXIpKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBicl9tdWx0aWNhc3RfcmN2KHN0cnVjdCBuZXRfYnJpZGdlICpiciwKKwkJCQkgICBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0LAorCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9icmlkZ2VfbWRiX2VudHJ5ICpicl9tZGJfZ2V0KHN0cnVjdCBuZXRfYnJpZGdlICpiciwKKwkJCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfYWRkX3BvcnQoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJyX211bHRpY2FzdF9kZWxfcG9ydChzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0KQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYnJfbXVsdGljYXN0X2VuYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0KHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfaW5pdChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3Rfb3BlbihzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3Rfc3RvcChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfZGVsaXZlcihzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1kc3QsCisJCQkJCXN0cnVjdCBza19idWZmICpza2IpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBicl9tdWx0aWNhc3RfZm9yd2FyZChzdHJ1Y3QgbmV0X2JyaWRnZV9tZGJfZW50cnkgKm1kc3QsCisJCQkJCXN0cnVjdCBza19idWZmICpza2IsCisJCQkJCXN0cnVjdCBza19idWZmICpza2IyKQoreworfQorc3RhdGljIGlubGluZSBib29sIGJyX211bHRpY2FzdF9pc19yb3V0ZXIoc3RydWN0IG5ldF9icmlkZ2UgKmJyKQoreworCXJldHVybiAwOworfQorI2VuZGlmCisKIC8qIGJyX25ldGZpbHRlci5jICovCiAjaWZkZWYgQ09ORklHX0JSSURHRV9ORVRGSUxURVIKIGV4dGVybiBpbnQgYnJfbmV0ZmlsdGVyX2luaXQodm9pZCk7CkBAIC0yNTQsNyArNDIzLDcgQEAKIAogI2lmZGVmIENPTkZJR19TWVNGUwogLyogYnJfc3lzZnNfaWYuYyAqLwotZXh0ZXJuIHN0cnVjdCBzeXNmc19vcHMgYnJwb3J0X3N5c2ZzX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIGJycG9ydF9zeXNmc19vcHM7CiBleHRlcm4gaW50IGJyX3N5c2ZzX2FkZGlmKHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApOwogCiAvKiBicl9zeXNmc19ici5jICovCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3N0cC5jIGIvbmV0L2JyaWRnZS9icl9zdHAuYwppbmRleCBmZDNmOGQ2Li5lZGNmMTRiIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL2JyX3N0cC5jCisrKyBiL25ldC9icmlkZ2UvYnJfc3RwLmMKQEAgLTM4Niw2ICszODYsOCBAQAogCWVsc2UKIAkJcC0+c3RhdGUgPSBCUl9TVEFURV9MRUFSTklORzsKIAorCWJyX211bHRpY2FzdF9lbmFibGVfcG9ydChwKTsKKwogCWJyX2xvZ19zdGF0ZShwKTsKIAogCWlmIChici0+Zm9yd2FyZF9kZWxheSAhPSAwKQpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl9zdHBfaWYuYyBiL25ldC9icmlkZ2UvYnJfc3RwX2lmLmMKaW5kZXggOWE1MmFjNS4uZDUyNzExOSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9zdHBfaWYuYworKysgYi9uZXQvYnJpZGdlL2JyX3N0cF9pZi5jCkBAIC0xMDgsNiArMTA4LDcgQEAKIAlkZWxfdGltZXIoJnAtPmhvbGRfdGltZXIpOwogCiAJYnJfZmRiX2RlbGV0ZV9ieV9wb3J0KGJyLCBwLCAwKTsKKwlicl9tdWx0aWNhc3RfZGlzYWJsZV9wb3J0KHApOwogCiAJYnJfY29uZmlndXJhdGlvbl91cGRhdGUoYnIpOwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMgYi9uZXQvYnJpZGdlL2JyX3N5c2ZzX2JyLmMKaW5kZXggYmVlNGYzMC4uZGQzMjFlMyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9zeXNmc19ici5jCisrKyBiL25ldC9icmlkZ2UvYnJfc3lzZnNfYnIuYwpAQCAtMzQ1LDYgKzM0NSwyNzMgQEAKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihmbHVzaCwgU19JV1VTUiwgTlVMTCwgc3RvcmVfZmx1c2gpOwogCisjaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HCitzdGF0aWMgc3NpemVfdCBzaG93X211bHRpY2FzdF9yb3V0ZXIoc3RydWN0IGRldmljZSAqZCwKKwkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gdG9fYnJpZGdlKGQpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBici0+bXVsdGljYXN0X3JvdXRlcik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX211bHRpY2FzdF9yb3V0ZXIoc3RydWN0IGRldmljZSAqZCwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJcmV0dXJuIHN0b3JlX2JyaWRnZV9wYXJtKGQsIGJ1ZiwgbGVuLCBicl9tdWx0aWNhc3Rfc2V0X3JvdXRlcik7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobXVsdGljYXN0X3JvdXRlciwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfbXVsdGljYXN0X3JvdXRlciwKKwkJICAgc3RvcmVfbXVsdGljYXN0X3JvdXRlcik7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbXVsdGljYXN0X3Nub29waW5nKHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCSAgICAgICBjaGFyICpidWYpCit7CisJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gdG9fYnJpZGdlKGQpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAhYnItPm11bHRpY2FzdF9kaXNhYmxlZCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX211bHRpY2FzdF9zbm9vcGluZyhzdHJ1Y3QgZGV2aWNlICpkLAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXJldHVybiBzdG9yZV9icmlkZ2VfcGFybShkLCBidWYsIGxlbiwgYnJfbXVsdGljYXN0X3RvZ2dsZSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobXVsdGljYXN0X3Nub29waW5nLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgc2hvd19tdWx0aWNhc3Rfc25vb3BpbmcsIHN0b3JlX211bHRpY2FzdF9zbm9vcGluZyk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfaGFzaF9lbGFzdGljaXR5KHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gdG9fYnJpZGdlKGQpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBici0+aGFzaF9lbGFzdGljaXR5KTsKK30KKworc3RhdGljIGludCBzZXRfZWxhc3RpY2l0eShzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWJyLT5oYXNoX2VsYXN0aWNpdHkgPSB2YWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2hhc2hfZWxhc3RpY2l0eShzdHJ1Y3QgZGV2aWNlICpkLAorCQkJCSAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCit7CisJcmV0dXJuIHN0b3JlX2JyaWRnZV9wYXJtKGQsIGJ1ZiwgbGVuLCBzZXRfZWxhc3RpY2l0eSk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoaGFzaF9lbGFzdGljaXR5LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19oYXNoX2VsYXN0aWNpdHksCisJCSAgIHN0b3JlX2hhc2hfZWxhc3RpY2l0eSk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfaGFzaF9tYXgoc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSB0b19icmlkZ2UoZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGJyLT5oYXNoX21heCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX2hhc2hfbWF4KHN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXJldHVybiBzdG9yZV9icmlkZ2VfcGFybShkLCBidWYsIGxlbiwgYnJfbXVsdGljYXN0X3NldF9oYXNoX21heCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoaGFzaF9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X2hhc2hfbWF4LAorCQkgICBzdG9yZV9oYXNoX21heCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbXVsdGljYXN0X2xhc3RfbWVtYmVyX2NvdW50KHN0cnVjdCBkZXZpY2UgKmQsCisJCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSB0b19icmlkZ2UoZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGJyLT5tdWx0aWNhc3RfbGFzdF9tZW1iZXJfY291bnQpOworfQorCitzdGF0aWMgaW50IHNldF9sYXN0X21lbWJlcl9jb3VudChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWJyLT5tdWx0aWNhc3RfbGFzdF9tZW1iZXJfY291bnQgPSB2YWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX211bHRpY2FzdF9sYXN0X21lbWJlcl9jb3VudChzdHJ1Y3QgZGV2aWNlICpkLAorCQkJCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gc3RvcmVfYnJpZGdlX3Bhcm0oZCwgYnVmLCBsZW4sIHNldF9sYXN0X21lbWJlcl9jb3VudCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobXVsdGljYXN0X2xhc3RfbWVtYmVyX2NvdW50LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgc2hvd19tdWx0aWNhc3RfbGFzdF9tZW1iZXJfY291bnQsCisJCSAgIHN0b3JlX211bHRpY2FzdF9sYXN0X21lbWJlcl9jb3VudCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbXVsdGljYXN0X3N0YXJ0dXBfcXVlcnlfY291bnQoCisJc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSB0b19icmlkZ2UoZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGJyLT5tdWx0aWNhc3Rfc3RhcnR1cF9xdWVyeV9jb3VudCk7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3N0YXJ0dXBfcXVlcnlfY291bnQoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlici0+bXVsdGljYXN0X3N0YXJ0dXBfcXVlcnlfY291bnQgPSB2YWw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX211bHRpY2FzdF9zdGFydHVwX3F1ZXJ5X2NvdW50KAorCXN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCisJc2l6ZV90IGxlbikKK3sKKwlyZXR1cm4gc3RvcmVfYnJpZGdlX3Bhcm0oZCwgYnVmLCBsZW4sIHNldF9zdGFydHVwX3F1ZXJ5X2NvdW50KTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihtdWx0aWNhc3Rfc3RhcnR1cF9xdWVyeV9jb3VudCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgIHNob3dfbXVsdGljYXN0X3N0YXJ0dXBfcXVlcnlfY291bnQsCisJCSAgIHN0b3JlX211bHRpY2FzdF9zdGFydHVwX3F1ZXJ5X2NvdW50KTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19tdWx0aWNhc3RfbGFzdF9tZW1iZXJfaW50ZXJ2YWwoCisJc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSB0b19icmlkZ2UoZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLAorCQkgICAgICAgamlmZmllc190b19jbG9ja190KGJyLT5tdWx0aWNhc3RfbGFzdF9tZW1iZXJfaW50ZXJ2YWwpKTsKK30KKworc3RhdGljIGludCBzZXRfbGFzdF9tZW1iZXJfaW50ZXJ2YWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlici0+bXVsdGljYXN0X2xhc3RfbWVtYmVyX2ludGVydmFsID0gY2xvY2tfdF90b19qaWZmaWVzKHZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX211bHRpY2FzdF9sYXN0X21lbWJlcl9pbnRlcnZhbCgKKwlzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLAorCXNpemVfdCBsZW4pCit7CisJcmV0dXJuIHN0b3JlX2JyaWRnZV9wYXJtKGQsIGJ1ZiwgbGVuLCBzZXRfbGFzdF9tZW1iZXJfaW50ZXJ2YWwpOworfQorc3RhdGljIERFVklDRV9BVFRSKG11bHRpY2FzdF9sYXN0X21lbWJlcl9pbnRlcnZhbCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgIHNob3dfbXVsdGljYXN0X2xhc3RfbWVtYmVyX2ludGVydmFsLAorCQkgICBzdG9yZV9tdWx0aWNhc3RfbGFzdF9tZW1iZXJfaW50ZXJ2YWwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X211bHRpY2FzdF9tZW1iZXJzaGlwX2ludGVydmFsKAorCXN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gdG9fYnJpZGdlKGQpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwKKwkJICAgICAgIGppZmZpZXNfdG9fY2xvY2tfdChici0+bXVsdGljYXN0X21lbWJlcnNoaXBfaW50ZXJ2YWwpKTsKK30KKworc3RhdGljIGludCBzZXRfbWVtYmVyc2hpcF9pbnRlcnZhbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWJyLT5tdWx0aWNhc3RfbWVtYmVyc2hpcF9pbnRlcnZhbCA9IGNsb2NrX3RfdG9famlmZmllcyh2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9tdWx0aWNhc3RfbWVtYmVyc2hpcF9pbnRlcnZhbCgKKwlzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLAorCXNpemVfdCBsZW4pCit7CisJcmV0dXJuIHN0b3JlX2JyaWRnZV9wYXJtKGQsIGJ1ZiwgbGVuLCBzZXRfbWVtYmVyc2hpcF9pbnRlcnZhbCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobXVsdGljYXN0X21lbWJlcnNoaXBfaW50ZXJ2YWwsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBzaG93X211bHRpY2FzdF9tZW1iZXJzaGlwX2ludGVydmFsLAorCQkgICBzdG9yZV9tdWx0aWNhc3RfbWVtYmVyc2hpcF9pbnRlcnZhbCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbXVsdGljYXN0X3F1ZXJpZXJfaW50ZXJ2YWwoc3RydWN0IGRldmljZSAqZCwKKwkJCQkJICAgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCBuZXRfYnJpZGdlICpiciA9IHRvX2JyaWRnZShkKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsCisJCSAgICAgICBqaWZmaWVzX3RvX2Nsb2NrX3QoYnItPm11bHRpY2FzdF9xdWVyaWVyX2ludGVydmFsKSk7Cit9CisKK3N0YXRpYyBpbnQgc2V0X3F1ZXJpZXJfaW50ZXJ2YWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlici0+bXVsdGljYXN0X3F1ZXJpZXJfaW50ZXJ2YWwgPSBjbG9ja190X3RvX2ppZmZpZXModmFsKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfbXVsdGljYXN0X3F1ZXJpZXJfaW50ZXJ2YWwoc3RydWN0IGRldmljZSAqZCwKKwkJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXJldHVybiBzdG9yZV9icmlkZ2VfcGFybShkLCBidWYsIGxlbiwgc2V0X3F1ZXJpZXJfaW50ZXJ2YWwpOworfQorc3RhdGljIERFVklDRV9BVFRSKG11bHRpY2FzdF9xdWVyaWVyX2ludGVydmFsLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJICAgc2hvd19tdWx0aWNhc3RfcXVlcmllcl9pbnRlcnZhbCwKKwkJICAgc3RvcmVfbXVsdGljYXN0X3F1ZXJpZXJfaW50ZXJ2YWwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X211bHRpY2FzdF9xdWVyeV9pbnRlcnZhbChzdHJ1Y3QgZGV2aWNlICpkLAorCQkJCQkgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQkgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSB0b19icmlkZ2UoZCk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLAorCQkgICAgICAgamlmZmllc190b19jbG9ja190KGJyLT5tdWx0aWNhc3RfcXVlcnlfaW50ZXJ2YWwpKTsKK30KKworc3RhdGljIGludCBzZXRfcXVlcnlfaW50ZXJ2YWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlici0+bXVsdGljYXN0X3F1ZXJ5X2ludGVydmFsID0gY2xvY2tfdF90b19qaWZmaWVzKHZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX211bHRpY2FzdF9xdWVyeV9pbnRlcnZhbChzdHJ1Y3QgZGV2aWNlICpkLAorCQkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkJICAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKQoreworCXJldHVybiBzdG9yZV9icmlkZ2VfcGFybShkLCBidWYsIGxlbiwgc2V0X3F1ZXJ5X2ludGVydmFsKTsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUihtdWx0aWNhc3RfcXVlcnlfaW50ZXJ2YWwsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBzaG93X211bHRpY2FzdF9xdWVyeV9pbnRlcnZhbCwKKwkJICAgc3RvcmVfbXVsdGljYXN0X3F1ZXJ5X2ludGVydmFsKTsKKworc3RhdGljIHNzaXplX3Qgc2hvd19tdWx0aWNhc3RfcXVlcnlfcmVzcG9uc2VfaW50ZXJ2YWwoCisJc3RydWN0IGRldmljZSAqZCwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIgPSB0b19icmlkZ2UoZCk7CisJcmV0dXJuIHNwcmludGYoCisJCWJ1ZiwgIiVsdVxuIiwKKwkJamlmZmllc190b19jbG9ja190KGJyLT5tdWx0aWNhc3RfcXVlcnlfcmVzcG9uc2VfaW50ZXJ2YWwpKTsKK30KKworc3RhdGljIGludCBzZXRfcXVlcnlfcmVzcG9uc2VfaW50ZXJ2YWwoc3RydWN0IG5ldF9icmlkZ2UgKmJyLCB1bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlici0+bXVsdGljYXN0X3F1ZXJ5X3Jlc3BvbnNlX2ludGVydmFsID0gY2xvY2tfdF90b19qaWZmaWVzKHZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHN0b3JlX211bHRpY2FzdF9xdWVyeV9yZXNwb25zZV9pbnRlcnZhbCgKKwlzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLAorCXNpemVfdCBsZW4pCit7CisJcmV0dXJuIHN0b3JlX2JyaWRnZV9wYXJtKGQsIGJ1ZiwgbGVuLCBzZXRfcXVlcnlfcmVzcG9uc2VfaW50ZXJ2YWwpOworfQorc3RhdGljIERFVklDRV9BVFRSKG11bHRpY2FzdF9xdWVyeV9yZXNwb25zZV9pbnRlcnZhbCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgIHNob3dfbXVsdGljYXN0X3F1ZXJ5X3Jlc3BvbnNlX2ludGVydmFsLAorCQkgICBzdG9yZV9tdWx0aWNhc3RfcXVlcnlfcmVzcG9uc2VfaW50ZXJ2YWwpOworCitzdGF0aWMgc3NpemVfdCBzaG93X211bHRpY2FzdF9zdGFydHVwX3F1ZXJ5X2ludGVydmFsKAorCXN0cnVjdCBkZXZpY2UgKmQsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IG5ldF9icmlkZ2UgKmJyID0gdG9fYnJpZGdlKGQpOworCXJldHVybiBzcHJpbnRmKAorCQlidWYsICIlbHVcbiIsCisJCWppZmZpZXNfdG9fY2xvY2tfdChici0+bXVsdGljYXN0X3N0YXJ0dXBfcXVlcnlfaW50ZXJ2YWwpKTsKK30KKworc3RhdGljIGludCBzZXRfc3RhcnR1cF9xdWVyeV9pbnRlcnZhbChzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsIHVuc2lnbmVkIGxvbmcgdmFsKQoreworCWJyLT5tdWx0aWNhc3Rfc3RhcnR1cF9xdWVyeV9pbnRlcnZhbCA9IGNsb2NrX3RfdG9famlmZmllcyh2YWwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBzdG9yZV9tdWx0aWNhc3Rfc3RhcnR1cF9xdWVyeV9pbnRlcnZhbCgKKwlzdHJ1Y3QgZGV2aWNlICpkLCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLAorCXNpemVfdCBsZW4pCit7CisJcmV0dXJuIHN0b3JlX2JyaWRnZV9wYXJtKGQsIGJ1ZiwgbGVuLCBzZXRfc3RhcnR1cF9xdWVyeV9pbnRlcnZhbCk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIobXVsdGljYXN0X3N0YXJ0dXBfcXVlcnlfaW50ZXJ2YWwsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkgICBzaG93X211bHRpY2FzdF9zdGFydHVwX3F1ZXJ5X2ludGVydmFsLAorCQkgICBzdG9yZV9tdWx0aWNhc3Rfc3RhcnR1cF9xdWVyeV9pbnRlcnZhbCk7CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmJyaWRnZV9hdHRyc1tdID0gewogCSZkZXZfYXR0cl9mb3J3YXJkX2RlbGF5LmF0dHIsCiAJJmRldl9hdHRyX2hlbGxvX3RpbWUuYXR0ciwKQEAgLTM2NCw2ICs2MzEsMjAgQEAKIAkmZGV2X2F0dHJfZ2NfdGltZXIuYXR0ciwKIAkmZGV2X2F0dHJfZ3JvdXBfYWRkci5hdHRyLAogCSZkZXZfYXR0cl9mbHVzaC5hdHRyLAorI2lmZGVmIENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORworCSZkZXZfYXR0cl9tdWx0aWNhc3Rfcm91dGVyLmF0dHIsCisJJmRldl9hdHRyX211bHRpY2FzdF9zbm9vcGluZy5hdHRyLAorCSZkZXZfYXR0cl9oYXNoX2VsYXN0aWNpdHkuYXR0ciwKKwkmZGV2X2F0dHJfaGFzaF9tYXguYXR0ciwKKwkmZGV2X2F0dHJfbXVsdGljYXN0X2xhc3RfbWVtYmVyX2NvdW50LmF0dHIsCisJJmRldl9hdHRyX211bHRpY2FzdF9zdGFydHVwX3F1ZXJ5X2NvdW50LmF0dHIsCisJJmRldl9hdHRyX211bHRpY2FzdF9sYXN0X21lbWJlcl9pbnRlcnZhbC5hdHRyLAorCSZkZXZfYXR0cl9tdWx0aWNhc3RfbWVtYmVyc2hpcF9pbnRlcnZhbC5hdHRyLAorCSZkZXZfYXR0cl9tdWx0aWNhc3RfcXVlcmllcl9pbnRlcnZhbC5hdHRyLAorCSZkZXZfYXR0cl9tdWx0aWNhc3RfcXVlcnlfaW50ZXJ2YWwuYXR0ciwKKwkmZGV2X2F0dHJfbXVsdGljYXN0X3F1ZXJ5X3Jlc3BvbnNlX2ludGVydmFsLmF0dHIsCisJJmRldl9hdHRyX211bHRpY2FzdF9zdGFydHVwX3F1ZXJ5X2ludGVydmFsLmF0dHIsCisjZW5kaWYKIAlOVUxMCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3N5c2ZzX2lmLmMgYi9uZXQvYnJpZGdlL2JyX3N5c2ZzX2lmLmMKaW5kZXggODIwNjQzYS4uMGI5OTE2NCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9icl9zeXNmc19pZi5jCisrKyBiL25ldC9icmlkZ2UvYnJfc3lzZnNfaWYuYwpAQCAtMTU5LDYgKzE1OSwyMSBAQAogc3RhdGljIEJSUE9SVF9BVFRSKGhhaXJwaW5fbW9kZSwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCSAgIHNob3dfaGFpcnBpbl9tb2RlLCBzdG9yZV9oYWlycGluX21vZGUpOwogCisjaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HCitzdGF0aWMgc3NpemVfdCBzaG93X211bHRpY2FzdF9yb3V0ZXIoc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCwgY2hhciAqYnVmKQoreworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBwLT5tdWx0aWNhc3Rfcm91dGVyKTsKK30KKworc3RhdGljIHNzaXplX3Qgc3RvcmVfbXVsdGljYXN0X3JvdXRlcihzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwLAorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgdikKK3sKKwlyZXR1cm4gYnJfbXVsdGljYXN0X3NldF9wb3J0X3JvdXRlcihwLCB2KTsKK30KK3N0YXRpYyBCUlBPUlRfQVRUUihtdWx0aWNhc3Rfcm91dGVyLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd19tdWx0aWNhc3Rfcm91dGVyLAorCQkgICBzdG9yZV9tdWx0aWNhc3Rfcm91dGVyKTsKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGJycG9ydF9hdHRyaWJ1dGUgKmJycG9ydF9hdHRyc1tdID0gewogCSZicnBvcnRfYXR0cl9wYXRoX2Nvc3QsCiAJJmJycG9ydF9hdHRyX3ByaW9yaXR5LApAQCAtMTc2LDYgKzE5MSw5IEBACiAJJmJycG9ydF9hdHRyX2hvbGRfdGltZXIsCiAJJmJycG9ydF9hdHRyX2ZsdXNoLAogCSZicnBvcnRfYXR0cl9oYWlycGluX21vZGUsCisjaWZkZWYgQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HCisJJmJycG9ydF9hdHRyX211bHRpY2FzdF9yb3V0ZXIsCisjZW5kaWYKIAlOVUxMCiB9OwogCkBAIC0yMjAsNyArMjM4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdHJ1Y3Qgc3lzZnNfb3BzIGJycG9ydF9zeXNmc19vcHMgPSB7Citjb25zdCBzdHJ1Y3Qgc3lzZnNfb3BzIGJycG9ydF9zeXNmc19vcHMgPSB7CiAJLnNob3cgPSBicnBvcnRfc2hvdywKIAkuc3RvcmUgPSBicnBvcnRfc3RvcmUsCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0XzgwMl8zLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfODAyXzMuYwppbmRleCBiZDkxZGM1Li41ZDExNzY3IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfODAyXzMuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfODAyXzMuYwpAQCAtNTIsNyArNTIsNyBAQAogCS5mYW1pbHkJCT0gTkZQUk9UT19CUklER0UsCiAJLm1hdGNoCQk9IGVidF84MDJfM19tdCwKIAkuY2hlY2tlbnRyeQk9IGVidF84MDJfM19tdF9jaGVjaywKLQkubWF0Y2hzaXplCT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBlYnRfODAyXzNfaW5mbykpLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGVidF84MDJfM19pbmZvKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfYXJwLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfYXJwLmMKaW5kZXggYjdhZDYwNC4uZTcyNzY5NyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2FycC5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9hcnAuYwpAQCAtMTIwLDcgKzEyMCw3IEBACiAJLmZhbWlseQkJPSBORlBST1RPX0JSSURHRSwKIAkubWF0Y2gJCT0gZWJ0X2FycF9tdCwKIAkuY2hlY2tlbnRyeQk9IGVidF9hcnBfbXRfY2hlY2ssCi0JLm1hdGNoc2l6ZQk9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgZWJ0X2FycF9pbmZvKSksCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgZWJ0X2FycF9pbmZvKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfYXJwcmVwbHkuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9hcnByZXBseS5jCmluZGV4IDc2NTg0Y2QuLmYzOTJlOWQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9hcnByZXBseS5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9hcnByZXBseS5jCkBAIC03OCw3ICs3OCw3IEBACiAJLmhvb2tzCQk9ICgxIDw8IE5GX0JSX05VTUhPT0tTKSB8ICgxIDw8IE5GX0JSX1BSRV9ST1VUSU5HKSwKIAkudGFyZ2V0CQk9IGVidF9hcnByZXBseV90ZywKIAkuY2hlY2tlbnRyeQk9IGVidF9hcnByZXBseV90Z19jaGVjaywKLQkudGFyZ2V0c2l6ZQk9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgZWJ0X2FycHJlcGx5X2luZm8pKSwKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgZWJ0X2FycHJlcGx5X2luZm8pLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9kbmF0LmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfZG5hdC5jCmluZGV4IDZiNDllYTkuLjJiYjQwZDcgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9kbmF0LmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2RuYXQuYwpAQCAtNTQsNyArNTQsNyBAQAogCQkJICAoMSA8PCBORl9CUl9MT0NBTF9PVVQpIHwgKDEgPDwgTkZfQlJfQlJPVVRJTkcpLAogCS50YXJnZXQJCT0gZWJ0X2RuYXRfdGcsCiAJLmNoZWNrZW50cnkJPSBlYnRfZG5hdF90Z19jaGVjaywKLQkudGFyZ2V0c2l6ZQk9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgZWJ0X25hdF9pbmZvKSksCisJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGVidF9uYXRfaW5mbyksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2lwLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfaXAuYwppbmRleCBkNzcxYmJmLi41ZGU2ZGY2IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfaXAuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfaXAuYwpAQCAtMTEwLDcgKzExMCw3IEBACiAJLmZhbWlseQkJPSBORlBST1RPX0JSSURHRSwKIAkubWF0Y2gJCT0gZWJ0X2lwX210LAogCS5jaGVja2VudHJ5CT0gZWJ0X2lwX210X2NoZWNrLAotCS5tYXRjaHNpemUJPSBYVF9BTElHTihzaXplb2Yoc3RydWN0IGVidF9pcF9pbmZvKSksCisJLm1hdGNoc2l6ZQk9IHNpemVvZihzdHJ1Y3QgZWJ0X2lwX2luZm8pLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9pcDYuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9pcDYuYwppbmRleCA3ODRhNjU3Li5iYmYyNTM0IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfaXA2LmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2lwNi5jCkBAIC0xMjIsNyArMTIyLDcgQEAKIAkuZmFtaWx5CQk9IE5GUFJPVE9fQlJJREdFLAogCS5tYXRjaAkJPSBlYnRfaXA2X210LAogCS5jaGVja2VudHJ5CT0gZWJ0X2lwNl9tdF9jaGVjaywKLQkubWF0Y2hzaXplCT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBlYnRfaXA2X2luZm8pKSwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBlYnRfaXA2X2luZm8pLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9saW1pdC5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xpbWl0LmMKaW5kZXggZjdiZDkxOS4uN2E4MTgyNzEgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9saW1pdC5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9saW1pdC5jCkBAIC04NCwxMyArODQsMjkgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAorCisjaWZkZWYgQ09ORklHX0NPTVBBVAorLyoKKyAqIG5vIGNvbnZlcnNpb24gZnVuY3Rpb24gbmVlZGVkIC0tCisgKiBvbmx5IGF2Zy9idXJzdCBoYXZlIG1lYW5pbmdmdWwgdmFsdWVzIGluIHVzZXJzcGFjZS4KKyAqLworc3RydWN0IGVidF9jb21wYXRfbGltaXRfaW5mbyB7CisJY29tcGF0X3VpbnRfdCBhdmcsIGJ1cnN0OworCWNvbXBhdF91bG9uZ190IHByZXY7CisJY29tcGF0X3VpbnRfdCBjcmVkaXQsIGNyZWRpdF9jYXAsIGNvc3Q7Cit9OworI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggZWJ0X2xpbWl0X210X3JlZyBfX3JlYWRfbW9zdGx5ID0gewogCS5uYW1lCQk9ICJsaW1pdCIsCiAJLnJldmlzaW9uCT0gMCwKIAkuZmFtaWx5CQk9IE5GUFJPVE9fQlJJREdFLAogCS5tYXRjaAkJPSBlYnRfbGltaXRfbXQsCiAJLmNoZWNrZW50cnkJPSBlYnRfbGltaXRfbXRfY2hlY2ssCi0JLm1hdGNoc2l6ZQk9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgZWJ0X2xpbWl0X2luZm8pKSwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBlYnRfbGltaXRfaW5mbyksCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBlYnRfY29tcGF0X2xpbWl0X2luZm8pLAorI2VuZGlmCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2xvZy5jCmluZGV4IGU0ZWEzZmQuLmU4NzM5MjQgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9sb2cuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbG9nLmMKQEAgLTE5NSw3ICsxOTUsNyBAQAogCS5mYW1pbHkJCT0gTkZQUk9UT19CUklER0UsCiAJLnRhcmdldAkJPSBlYnRfbG9nX3RnLAogCS5jaGVja2VudHJ5CT0gZWJ0X2xvZ190Z19jaGVjaywKLQkudGFyZ2V0c2l6ZQk9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgZWJ0X2xvZ19pbmZvKSksCisJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGVidF9sb2dfaW5mbyksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X21hcmsuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9tYXJrLmMKaW5kZXggMmZlZTdlOC4uMmI1Y2U1MyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X21hcmsuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbWFyay5jCkBAIC01Miw2ICs1MiwzMiBAQAogCQlyZXR1cm4gZmFsc2U7CiAJcmV0dXJuIHRydWU7CiB9CisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RydWN0IGNvbXBhdF9lYnRfbWFya190X2luZm8geworCWNvbXBhdF91bG9uZ190IG1hcms7CisJY29tcGF0X3VpbnRfdCB0YXJnZXQ7Cit9OworCitzdGF0aWMgdm9pZCBtYXJrX3RnX2NvbXBhdF9mcm9tX3VzZXIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCit7CisJY29uc3Qgc3RydWN0IGNvbXBhdF9lYnRfbWFya190X2luZm8gKnVzZXIgPSBzcmM7CisJc3RydWN0IGVidF9tYXJrX3RfaW5mbyAqa2VybiA9IGRzdDsKKworCWtlcm4tPm1hcmsgPSB1c2VyLT5tYXJrOworCWtlcm4tPnRhcmdldCA9IHVzZXItPnRhcmdldDsKK30KKworc3RhdGljIGludCBtYXJrX3RnX2NvbXBhdF90b191c2VyKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKK3sKKwlzdHJ1Y3QgY29tcGF0X2VidF9tYXJrX3RfaW5mbyBfX3VzZXIgKnVzZXIgPSBkc3Q7CisJY29uc3Qgc3RydWN0IGVidF9tYXJrX3RfaW5mbyAqa2VybiA9IHNyYzsKKworCWlmIChwdXRfdXNlcihrZXJuLT5tYXJrLCAmdXNlci0+bWFyaykgfHwKKwkgICAgcHV0X3VzZXIoa2Vybi0+dGFyZ2V0LCAmdXNlci0+dGFyZ2V0KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCB4dF90YXJnZXQgZWJ0X21hcmtfdGdfcmVnIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUJCT0gIm1hcmsiLApAQCAtNTksNyArODUsMTIgQEAKIAkuZmFtaWx5CQk9IE5GUFJPVE9fQlJJREdFLAogCS50YXJnZXQJCT0gZWJ0X21hcmtfdGcsCiAJLmNoZWNrZW50cnkJPSBlYnRfbWFya190Z19jaGVjaywKLQkudGFyZ2V0c2l6ZQk9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgZWJ0X21hcmtfdF9pbmZvKSksCisJLnRhcmdldHNpemUJPSBzaXplb2Yoc3RydWN0IGVidF9tYXJrX3RfaW5mbyksCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfZWJ0X21hcmtfdF9pbmZvKSwKKwkuY29tcGF0X2Zyb21fdXNlciA9IG1hcmtfdGdfY29tcGF0X2Zyb21fdXNlciwKKwkuY29tcGF0X3RvX3VzZXIJPSBtYXJrX3RnX2NvbXBhdF90b191c2VyLAorI2VuZGlmCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X21hcmtfbS5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X21hcmtfbS5jCmluZGV4IGVhNTcwZjIuLjhkZThjMzkgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9tYXJrX20uYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbWFya19tLmMKQEAgLTM1LDEzICszNSw1MCBAQAogCXJldHVybiB0cnVlOwogfQogCisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitzdHJ1Y3QgY29tcGF0X2VidF9tYXJrX21faW5mbyB7CisJY29tcGF0X3Vsb25nX3QgbWFyaywgbWFzazsKKwl1aW50OF90IGludmVydCwgYml0bWFzazsKK307CisKK3N0YXRpYyB2b2lkIG1hcmtfbXRfY29tcGF0X2Zyb21fdXNlcih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKK3sKKwljb25zdCBzdHJ1Y3QgY29tcGF0X2VidF9tYXJrX21faW5mbyAqdXNlciA9IHNyYzsKKwlzdHJ1Y3QgZWJ0X21hcmtfbV9pbmZvICprZXJuID0gZHN0OworCisJa2Vybi0+bWFyayA9IHVzZXItPm1hcms7CisJa2Vybi0+bWFzayA9IHVzZXItPm1hc2s7CisJa2Vybi0+aW52ZXJ0ID0gdXNlci0+aW52ZXJ0OworCWtlcm4tPmJpdG1hc2sgPSB1c2VyLT5iaXRtYXNrOworfQorCitzdGF0aWMgaW50IG1hcmtfbXRfY29tcGF0X3RvX3VzZXIodm9pZCBfX3VzZXIgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQoreworCXN0cnVjdCBjb21wYXRfZWJ0X21hcmtfbV9pbmZvIF9fdXNlciAqdXNlciA9IGRzdDsKKwljb25zdCBzdHJ1Y3QgZWJ0X21hcmtfbV9pbmZvICprZXJuID0gc3JjOworCisJaWYgKHB1dF91c2VyKGtlcm4tPm1hcmssICZ1c2VyLT5tYXJrKSB8fAorCSAgICBwdXRfdXNlcihrZXJuLT5tYXNrLCAmdXNlci0+bWFzaykgfHwKKwkgICAgcHV0X3VzZXIoa2Vybi0+aW52ZXJ0LCAmdXNlci0+aW52ZXJ0KSB8fAorCSAgICBwdXRfdXNlcihrZXJuLT5iaXRtYXNrLCAmdXNlci0+Yml0bWFzaykpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggZWJ0X21hcmtfbXRfcmVnIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5hbWUJCT0gIm1hcmtfbSIsCiAJLnJldmlzaW9uCT0gMCwKIAkuZmFtaWx5CQk9IE5GUFJPVE9fQlJJREdFLAogCS5tYXRjaAkJPSBlYnRfbWFya19tdCwKIAkuY2hlY2tlbnRyeQk9IGVidF9tYXJrX210X2NoZWNrLAotCS5tYXRjaHNpemUJPSBYVF9BTElHTihzaXplb2Yoc3RydWN0IGVidF9tYXJrX21faW5mbykpLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGVidF9tYXJrX21faW5mbyksCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfZWJ0X21hcmtfbV9pbmZvKSwKKwkuY29tcGF0X2Zyb21fdXNlciA9IG1hcmtfbXRfY29tcGF0X2Zyb21fdXNlciwKKwkuY29tcGF0X3RvX3VzZXIJPSBtYXJrX210X2NvbXBhdF90b191c2VyLAorI2VuZGlmCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X25mbG9nLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfbmZsb2cuYwppbmRleCAyYTYzZDk5Ni4uNDBkYmQyNCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X25mbG9nLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X25mbG9nLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAkuZmFtaWx5ICAgICA9IE5GUFJPVE9fQlJJREdFLAogCS50YXJnZXQgICAgID0gZWJ0X25mbG9nX3RnLAogCS5jaGVja2VudHJ5ID0gZWJ0X25mbG9nX3RnX2NoZWNrLAotCS50YXJnZXRzaXplID0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBlYnRfbmZsb2dfaW5mbykpLAorCS50YXJnZXRzaXplID0gc2l6ZW9mKHN0cnVjdCBlYnRfbmZsb2dfaW5mbyksCiAJLm1lICAgICAgICAgPSBUSElTX01PRFVMRSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9wa3R0eXBlLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfcGt0dHlwZS5jCmluZGV4IDg4M2U5NmUuLmUyYTA3ZTYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9wa3R0eXBlLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3BrdHR5cGUuYwpAQCAtMzYsNyArMzYsNyBAQAogCS5mYW1pbHkJCT0gTkZQUk9UT19CUklER0UsCiAJLm1hdGNoCQk9IGVidF9wa3R0eXBlX210LAogCS5jaGVja2VudHJ5CT0gZWJ0X3BrdHR5cGVfbXRfY2hlY2ssCi0JLm1hdGNoc2l6ZQk9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgZWJ0X3BrdHR5cGVfaW5mbykpLAorCS5tYXRjaHNpemUJPSBzaXplb2Yoc3RydWN0IGVidF9wa3R0eXBlX2luZm8pLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9yZWRpcmVjdC5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3JlZGlyZWN0LmMKaW5kZXggYzhhNDlmNy4uOWJlOGZiYyAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3JlZGlyZWN0LmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3JlZGlyZWN0LmMKQEAgLTU5LDcgKzU5LDcgQEAKIAkJCSAgKDEgPDwgTkZfQlJfQlJPVVRJTkcpLAogCS50YXJnZXQJCT0gZWJ0X3JlZGlyZWN0X3RnLAogCS5jaGVja2VudHJ5CT0gZWJ0X3JlZGlyZWN0X3RnX2NoZWNrLAotCS50YXJnZXRzaXplCT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBlYnRfcmVkaXJlY3RfaW5mbykpLAorCS50YXJnZXRzaXplCT0gc2l6ZW9mKHN0cnVjdCBlYnRfcmVkaXJlY3RfaW5mbyksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3NuYXQuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9zbmF0LmMKaW5kZXggOGQwNGQ0Yy4uOWM3YjUyMCAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3NuYXQuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfc25hdC5jCkBAIC02Nyw3ICs2Nyw3IEBACiAJLmhvb2tzCQk9ICgxIDw8IE5GX0JSX05VTUhPT0tTKSB8ICgxIDw8IE5GX0JSX1BPU1RfUk9VVElORyksCiAJLnRhcmdldAkJPSBlYnRfc25hdF90ZywKIAkuY2hlY2tlbnRyeQk9IGVidF9zbmF0X3RnX2NoZWNrLAotCS50YXJnZXRzaXplCT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBlYnRfbmF0X2luZm8pKSwKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgZWJ0X25hdF9pbmZvKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfc3RwLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfc3RwLmMKaW5kZXggNzVlMjlhOS4uOTJhOTNkMzYzIDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfc3RwLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3N0cC5jCkBAIC0xNzcsNyArMTc3LDcgQEAKIAkuZmFtaWx5CQk9IE5GUFJPVE9fQlJJREdFLAogCS5tYXRjaAkJPSBlYnRfc3RwX210LAogCS5jaGVja2VudHJ5CT0gZWJ0X3N0cF9tdF9jaGVjaywKLQkubWF0Y2hzaXplCT0gWFRfQUxJR04oc2l6ZW9mKHN0cnVjdCBlYnRfc3RwX2luZm8pKSwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBlYnRfc3RwX2luZm8pLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIH07CiAKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdWxvZy5jCmluZGV4IGNlNTA2ODguLmM2YWM2NTcgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF91bG9nLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3Vsb2cuYwpAQCAtMjc1LDcgKzI3NSw3IEBACiAJLmZhbWlseQkJPSBORlBST1RPX0JSSURHRSwKIAkudGFyZ2V0CQk9IGVidF91bG9nX3RnLAogCS5jaGVja2VudHJ5CT0gZWJ0X3Vsb2dfdGdfY2hlY2ssCi0JLnRhcmdldHNpemUJPSBYVF9BTElHTihzaXplb2Yoc3RydWN0IGVidF91bG9nX2luZm8pKSwKKwkudGFyZ2V0c2l6ZQk9IHNpemVvZihzdHJ1Y3QgZWJ0X3Vsb2dfaW5mbyksCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3ZsYW4uYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF92bGFuLmMKaW5kZXggM2RkZGQ0OC4uYmUxZGQyZSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X3ZsYW4uYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRfdmxhbi5jCkBAIC0xNjMsNyArMTYzLDcgQEAKIAkuZmFtaWx5CQk9IE5GUFJPVE9fQlJJREdFLAogCS5tYXRjaAkJPSBlYnRfdmxhbl9tdCwKIAkuY2hlY2tlbnRyeQk9IGVidF92bGFuX210X2NoZWNrLAotCS5tYXRjaHNpemUJPSBYVF9BTElHTihzaXplb2Yoc3RydWN0IGVidF92bGFuX2luZm8pKSwKKwkubWF0Y2hzaXplCT0gc2l6ZW9mKHN0cnVjdCBlYnRfdmxhbl9pbmZvKSwKIAkubWUJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2Jyb3V0ZS5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9icm91dGUuYwppbmRleCBkMzJhYjEzLi5hZTNmMTA2IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2Jyb3V0ZS5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfYnJvdXRlLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBicm91dGVfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewotCWVidF91bnJlZ2lzdGVyX3RhYmxlKG5ldC0+eHQuYnJvdXRlX3RhYmxlKTsKKwllYnRfdW5yZWdpc3Rlcl90YWJsZShuZXQsIG5ldC0+eHQuYnJvdXRlX3RhYmxlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBicm91dGVfbmV0X29wcyA9IHsKZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX2ZpbHRlci5jCmluZGV4IDYwYjFhNmMuLjQyZTZiZDAgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfZmlsdGVyLmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9maWx0ZXIuYwpAQCAtMTA3LDcgKzEwNyw3IEBACiAKIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgZnJhbWVfZmlsdGVyX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQllYnRfdW5yZWdpc3Rlcl90YWJsZShuZXQtPnh0LmZyYW1lX2ZpbHRlcik7CisJZWJ0X3VucmVnaXN0ZXJfdGFibGUobmV0LCBuZXQtPnh0LmZyYW1lX2ZpbHRlcik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgZnJhbWVfZmlsdGVyX25ldF9vcHMgPSB7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZV9uYXQuYwppbmRleCA0YTk4ODA0Li42ZGMyZjg3IDEwMDY0NAotLS0gYS9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlX25hdC5jCisrKyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVfbmF0LmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCiBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGZyYW1lX25hdF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JZWJ0X3VucmVnaXN0ZXJfdGFibGUobmV0LT54dC5mcmFtZV9uYXQpOworCWVidF91bnJlZ2lzdGVyX3RhYmxlKG5ldCwgbmV0LT54dC5mcmFtZV9uYXQpOwogfQogCiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGZyYW1lX25hdF9uZXRfb3BzID0gewpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYyBiL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidGFibGVzLmMKaW5kZXggMGI3ZjI2Mi4uZGZiNTgwNSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0YWJsZXMuYworKysgYi9uZXQvYnJpZGdlL25ldGZpbHRlci9lYnRhYmxlcy5jCkBAIC0zMywxMSArMzMsNiBAQAogI2RlZmluZSBCVUdQUklOVChmb3JtYXQsIGFyZ3MuLi4pIHByaW50aygia2VybmVsIG1zZzogZWJ0YWJsZXMgYnVnOiBwbGVhc2UgIlwKIAkJCQkJICJyZXBvcnQgdG8gYXV0aG9yOiAiZm9ybWF0LCAjIyBhcmdzKQogLyogI2RlZmluZSBCVUdQUklOVChmb3JtYXQsIGFyZ3MuLi4pICovCi0jZGVmaW5lIE1FTVBSSU5UKGZvcm1hdCwgYXJncy4uLikgcHJpbnRrKCJrZXJuZWwgbXNnOiBlYnRhYmxlcyAiXAotCQkJCQkgIjogb3V0IG9mIG1lbW9yeTogImZvcm1hdCwgIyMgYXJncykKLS8qICNkZWZpbmUgTUVNUFJJTlQoZm9ybWF0LCBhcmdzLi4uKSAqLwotCi0KIAogLyoKICAqIEVhY2ggY3B1IGhhcyBpdHMgb3duIHNldCBvZiBjb3VudGVycywgc28gdGhlcmUgaXMgbm8gbmVlZCBmb3Igd3JpdGVfbG9jayBpbgpAQCAtNTYsMTEgKzUxLDM3IEBACiAKIHN0YXRpYyBERUZJTkVfTVVURVgoZWJ0X211dGV4KTsKIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0YXRpYyB2b2lkIGVidF9zdGFuZGFyZF9jb21wYXRfZnJvbV91c2VyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQoreworCWludCB2ID0gKihjb21wYXRfaW50X3QgKilzcmM7CisKKwlpZiAodiA+PSAwKQorCQl2ICs9IHh0X2NvbXBhdF9jYWxjX2p1bXAoTkZQUk9UT19CUklER0UsIHYpOworCW1lbWNweShkc3QsICZ2LCBzaXplb2YodikpOworfQorCitzdGF0aWMgaW50IGVidF9zdGFuZGFyZF9jb21wYXRfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkICpzcmMpCit7CisJY29tcGF0X2ludF90IGN2ID0gKihpbnQgKilzcmM7CisKKwlpZiAoY3YgPj0gMCkKKwkJY3YgLT0geHRfY29tcGF0X2NhbGNfanVtcChORlBST1RPX0JSSURHRSwgY3YpOworCXJldHVybiBjb3B5X3RvX3VzZXIoZHN0LCAmY3YsIHNpemVvZihjdikpID8gLUVGQVVMVCA6IDA7Cit9CisjZW5kaWYKKworCiBzdGF0aWMgc3RydWN0IHh0X3RhcmdldCBlYnRfc3RhbmRhcmRfdGFyZ2V0ID0gewogCS5uYW1lICAgICAgID0gInN0YW5kYXJkIiwKIAkucmV2aXNpb24gICA9IDAsCiAJLmZhbWlseSAgICAgPSBORlBST1RPX0JSSURHRSwKIAkudGFyZ2V0c2l6ZSA9IHNpemVvZihpbnQpLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0c2l6ZSA9IHNpemVvZihjb21wYXRfaW50X3QpLAorCS5jb21wYXRfZnJvbV91c2VyID0gZWJ0X3N0YW5kYXJkX2NvbXBhdF9mcm9tX3VzZXIsCisJLmNvbXBhdF90b191c2VyID0gIGVidF9zdGFuZGFyZF9jb21wYXRfdG9fdXNlciwKKyNlbmRpZgogfTsKIAogc3RhdGljIGlubGluZSBpbnQKQEAgLTgyLDcgKzEwMyw4IEBACiAJcmV0dXJuIG0tPnUubWF0Y2gtPm1hdGNoKHNrYiwgcGFyKSA/IEVCVF9NQVRDSCA6IEVCVF9OT01BVENIOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBlYnRfZGV2X2NoZWNrKGNoYXIgKmVudHJ5LCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2aWNlKQorc3RhdGljIGlubGluZSBpbnQKK2VidF9kZXZfY2hlY2soY29uc3QgY2hhciAqZW50cnksIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXZpY2UpCiB7CiAJaW50IGkgPSAwOwogCWNvbnN0IGNoYXIgKmRldm5hbWU7CkBAIC0xMDAsOCArMTIyLDkgQEAKIAogI2RlZmluZSBGV0lOVjIoYm9vbCxpbnZmbGcpICgoYm9vbCkgXiAhIShlLT5pbnZmbGFncyAmIGludmZsZykpCiAvKiBwcm9jZXNzIHN0YW5kYXJkIG1hdGNoZXMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGVidF9iYXNpY19tYXRjaChzdHJ1Y3QgZWJ0X2VudHJ5ICplLCBzdHJ1Y3QgZXRoaGRyICpoLAotICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0KQorc3RhdGljIGlubGluZSBpbnQKK2VidF9iYXNpY19tYXRjaChjb25zdCBzdHJ1Y3QgZWJ0X2VudHJ5ICplLCBjb25zdCBzdHJ1Y3QgZXRoaGRyICpoLAorICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCkKIHsKIAlpbnQgdmVyZGljdCwgaTsKIApAQCAtMTU2LDEyICsxNzksMTIgQEAKIAlpbnQgaSwgbmVudHJpZXM7CiAJc3RydWN0IGVidF9lbnRyeSAqcG9pbnQ7CiAJc3RydWN0IGVidF9jb3VudGVyICpjb3VudGVyX2Jhc2UsICpjYl9iYXNlOwotCXN0cnVjdCBlYnRfZW50cnlfdGFyZ2V0ICp0OworCWNvbnN0IHN0cnVjdCBlYnRfZW50cnlfdGFyZ2V0ICp0OwogCWludCB2ZXJkaWN0LCBzcCA9IDA7CiAJc3RydWN0IGVidF9jaGFpbnN0YWNrICpjczsKIAlzdHJ1Y3QgZWJ0X2VudHJpZXMgKmNoYWluaW5mbzsKLQljaGFyICpiYXNlOwotCXN0cnVjdCBlYnRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKKwljb25zdCBjaGFyICpiYXNlOworCWNvbnN0IHN0cnVjdCBlYnRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKIAlib29sIGhvdGRyb3AgPSBmYWxzZTsKIAlzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gbXRwYXI7CiAJc3RydWN0IHh0X3RhcmdldF9wYXJhbSB0Z3BhcjsKQEAgLTM5NSw3ICs0MTgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGVidF92ZXJpZnlfcG9pbnRlcnMoc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLAorc3RhdGljIGludCBlYnRfdmVyaWZ5X3BvaW50ZXJzKGNvbnN0IHN0cnVjdCBlYnRfcmVwbGFjZSAqcmVwbCwKIAkJCSAgICAgICBzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKm5ld2luZm8pCiB7CiAJdW5zaWduZWQgaW50IGxpbWl0ID0gcmVwbC0+ZW50cmllc19zaXplOwpAQCAtNDQyLDYgKzQ2NSw4IEBACiAJCQkJYnJlYWs7CiAJCQlpZiAobGVmdCA8IGUtPm5leHRfb2Zmc2V0KQogCQkJCWJyZWFrOworCQkJaWYgKGUtPm5leHRfb2Zmc2V0IDwgc2l6ZW9mKHN0cnVjdCBlYnRfZW50cnkpKQorCQkJCXJldHVybiAtRUlOVkFMOwogCQkJb2Zmc2V0ICs9IGUtPm5leHRfb2Zmc2V0OwogCQl9CiAJfQpAQCAtNDY2LDggKzQ5MSw4IEBACiAgKiB0byBwYXJzZSB0aGUgdXNlcnNwYWNlIGRhdGEKICAqLwogc3RhdGljIGlubGluZSBpbnQKLWVidF9jaGVja19lbnRyeV9zaXplX2FuZF9ob29rcyhzdHJ1Y3QgZWJ0X2VudHJ5ICplLAotICAgc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvLAorZWJ0X2NoZWNrX2VudHJ5X3NpemVfYW5kX2hvb2tzKGNvbnN0IHN0cnVjdCBlYnRfZW50cnkgKmUsCisgICBjb25zdCBzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKm5ld2luZm8sCiAgICB1bnNpZ25lZCBpbnQgKm4sIHVuc2lnbmVkIGludCAqY250LAogICAgdW5zaWduZWQgaW50ICp0b3RhbGNudCwgdW5zaWduZWQgaW50ICp1ZGNfY250KQogewpAQCAtNTYxLDEzICs1ODYsMTQgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLWVidF9jbGVhbnVwX21hdGNoKHN0cnVjdCBlYnRfZW50cnlfbWF0Y2ggKm0sIHVuc2lnbmVkIGludCAqaSkKK2VidF9jbGVhbnVwX21hdGNoKHN0cnVjdCBlYnRfZW50cnlfbWF0Y2ggKm0sIHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50ICppKQogewogCXN0cnVjdCB4dF9tdGR0b3JfcGFyYW0gcGFyOwogCiAJaWYgKGkgJiYgKCppKS0tID09IDApCiAJCXJldHVybiAxOwogCisJcGFyLm5ldCAgICAgICA9IG5ldDsKIAlwYXIubWF0Y2ggICAgID0gbS0+dS5tYXRjaDsKIAlwYXIubWF0Y2hpbmZvID0gbS0+ZGF0YTsKIAlwYXIuZmFtaWx5ICAgID0gTkZQUk9UT19CUklER0U7CkBAIC01NzgsMTMgKzYwNCwxNCBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludAotZWJ0X2NsZWFudXBfd2F0Y2hlcihzdHJ1Y3QgZWJ0X2VudHJ5X3dhdGNoZXIgKncsIHVuc2lnbmVkIGludCAqaSkKK2VidF9jbGVhbnVwX3dhdGNoZXIoc3RydWN0IGVidF9lbnRyeV93YXRjaGVyICp3LCBzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCAqaSkKIHsKIAlzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtIHBhcjsKIAogCWlmIChpICYmICgqaSktLSA9PSAwKQogCQlyZXR1cm4gMTsKIAorCXBhci5uZXQgICAgICA9IG5ldDsKIAlwYXIudGFyZ2V0ICAgPSB3LT51LndhdGNoZXI7CiAJcGFyLnRhcmdpbmZvID0gdy0+ZGF0YTsKIAlwYXIuZmFtaWx5ICAgPSBORlBST1RPX0JSSURHRTsKQEAgLTU5NSw3ICs2MjIsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludAotZWJ0X2NsZWFudXBfZW50cnkoc3RydWN0IGVidF9lbnRyeSAqZSwgdW5zaWduZWQgaW50ICpjbnQpCitlYnRfY2xlYW51cF9lbnRyeShzdHJ1Y3QgZWJ0X2VudHJ5ICplLCBzdHJ1Y3QgbmV0ICpuZXQsIHVuc2lnbmVkIGludCAqY250KQogewogCXN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gcGFyOwogCXN0cnVjdCBlYnRfZW50cnlfdGFyZ2V0ICp0OwpAQCAtNjA1LDEwICs2MzIsMTEgQEAKIAkvKiB3ZSdyZSBkb25lICovCiAJaWYgKGNudCAmJiAoKmNudCktLSA9PSAwKQogCQlyZXR1cm4gMTsKLQlFQlRfV0FUQ0hFUl9JVEVSQVRFKGUsIGVidF9jbGVhbnVwX3dhdGNoZXIsIE5VTEwpOwotCUVCVF9NQVRDSF9JVEVSQVRFKGUsIGVidF9jbGVhbnVwX21hdGNoLCBOVUxMKTsKKwlFQlRfV0FUQ0hFUl9JVEVSQVRFKGUsIGVidF9jbGVhbnVwX3dhdGNoZXIsIG5ldCwgTlVMTCk7CisJRUJUX01BVENIX0lURVJBVEUoZSwgZWJ0X2NsZWFudXBfbWF0Y2gsIG5ldCwgTlVMTCk7CiAJdCA9IChzdHJ1Y3QgZWJ0X2VudHJ5X3RhcmdldCAqKSgoKGNoYXIgKillKSArIGUtPnRhcmdldF9vZmZzZXQpOwogCisJcGFyLm5ldCAgICAgID0gbmV0OwogCXBhci50YXJnZXQgICA9IHQtPnUudGFyZ2V0OwogCXBhci50YXJnaW5mbyA9IHQtPmRhdGE7CiAJcGFyLmZhbWlseSAgID0gTkZQUk9UT19CUklER0U7CkBAIC02MTksNyArNjQ3LDggQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLWVidF9jaGVja19lbnRyeShzdHJ1Y3QgZWJ0X2VudHJ5ICplLCBzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKm5ld2luZm8sCitlYnRfY2hlY2tfZW50cnkoc3RydWN0IGVidF9lbnRyeSAqZSwgc3RydWN0IG5ldCAqbmV0LAorICAgY29uc3Qgc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvLAogICAgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50ICpjbnQsCiAgICBzdHJ1Y3QgZWJ0X2NsX3N0YWNrICpjbF9zLCB1bnNpZ25lZCBpbnQgdWRjX2NudCkKIHsKQEAgLTY3MSw2ICs3MDAsNyBAQAogCX0KIAlpID0gMDsKIAorCW10cGFyLm5ldAk9IHRncGFyLm5ldCAgICAgICA9IG5ldDsKIAltdHBhci50YWJsZSAgICAgPSB0Z3Bhci50YWJsZSAgICAgPSBuYW1lOwogCW10cGFyLmVudHJ5aW5mbyA9IHRncGFyLmVudHJ5aW5mbyA9IGU7CiAJbXRwYXIuaG9va19tYXNrID0gdGdwYXIuaG9va19tYXNrID0gaG9va21hc2s7CkBAIC03MjYsOSArNzU2LDkgQEAKIAkoKmNudCkrKzsKIAlyZXR1cm4gMDsKIGNsZWFudXBfd2F0Y2hlcnM6Ci0JRUJUX1dBVENIRVJfSVRFUkFURShlLCBlYnRfY2xlYW51cF93YXRjaGVyLCAmaik7CisJRUJUX1dBVENIRVJfSVRFUkFURShlLCBlYnRfY2xlYW51cF93YXRjaGVyLCBuZXQsICZqKTsKIGNsZWFudXBfbWF0Y2hlczoKLQlFQlRfTUFUQ0hfSVRFUkFURShlLCBlYnRfY2xlYW51cF9tYXRjaCwgJmkpOworCUVCVF9NQVRDSF9JVEVSQVRFKGUsIGVidF9jbGVhbnVwX21hdGNoLCBuZXQsICZpKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC03MzcsMTIgKzc2NywxMiBAQAogICogdGhlIGhvb2sgbWFzayBmb3IgdWRjIHRlbGxzIHVzIGZyb20gd2hpY2ggYmFzZSBjaGFpbnMgdGhlIHVkYyBjYW4gYmUKICAqIGFjY2Vzc2VkLiBUaGlzIG1hc2sgaXMgYSBwYXJhbWV0ZXIgdG8gdGhlIGNoZWNrKCkgZnVuY3Rpb25zIG9mIHRoZSBleHRlbnNpb25zCiAgKi8KLXN0YXRpYyBpbnQgY2hlY2tfY2hhaW5sb29wcyhzdHJ1Y3QgZWJ0X2VudHJpZXMgKmNoYWluLCBzdHJ1Y3QgZWJ0X2NsX3N0YWNrICpjbF9zLAorc3RhdGljIGludCBjaGVja19jaGFpbmxvb3BzKGNvbnN0IHN0cnVjdCBlYnRfZW50cmllcyAqY2hhaW4sIHN0cnVjdCBlYnRfY2xfc3RhY2sgKmNsX3MsCiAgICB1bnNpZ25lZCBpbnQgdWRjX2NudCwgdW5zaWduZWQgaW50IGhvb2tuciwgY2hhciAqYmFzZSkKIHsKIAlpbnQgaSwgY2hhaW5fbnIgPSAtMSwgcG9zID0gMCwgbmVudHJpZXMgPSBjaGFpbi0+bmVudHJpZXMsIHZlcmRpY3Q7Ci0Jc3RydWN0IGVidF9lbnRyeSAqZSA9IChzdHJ1Y3QgZWJ0X2VudHJ5ICopY2hhaW4tPmRhdGE7Ci0Jc3RydWN0IGVidF9lbnRyeV90YXJnZXQgKnQ7CisJY29uc3Qgc3RydWN0IGVidF9lbnRyeSAqZSA9IChzdHJ1Y3QgZWJ0X2VudHJ5ICopY2hhaW4tPmRhdGE7CisJY29uc3Qgc3RydWN0IGVidF9lbnRyeV90YXJnZXQgKnQ7CiAKIAl3aGlsZSAocG9zIDwgbmVudHJpZXMgfHwgY2hhaW5fbnIgIT0gLTEpIHsKIAkJLyogZW5kIG9mIHVkYywgZ28gYmFjayBvbmUgJ3JlY3Vyc2lvbicgc3RlcCAqLwpAQCAtODA4LDcgKzgzOCw4IEBACiB9CiAKIC8qIGRvIHRoZSBwYXJzaW5nIG9mIHRoZSB0YWJsZS9jaGFpbnMvZW50cmllcy9tYXRjaGVzL3dhdGNoZXJzL3RhcmdldHMsIGhlaCAqLwotc3RhdGljIGludCB0cmFuc2xhdGVfdGFibGUoY2hhciAqbmFtZSwgc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvKQorc3RhdGljIGludCB0cmFuc2xhdGVfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvKQogewogCXVuc2lnbmVkIGludCBpLCBqLCBrLCB1ZGNfY250OwogCWludCByZXQ7CkBAIC05MTcsMTcgKzk0OCwxNyBAQAogCS8qIHVzZWQgdG8ga25vdyB3aGF0IHdlIG5lZWQgdG8gY2xlYW4gdXAgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcgKi8KIAlpID0gMDsKIAlyZXQgPSBFQlRfRU5UUllfSVRFUkFURShuZXdpbmZvLT5lbnRyaWVzLCBuZXdpbmZvLT5lbnRyaWVzX3NpemUsCi0JICAgZWJ0X2NoZWNrX2VudHJ5LCBuZXdpbmZvLCBuYW1lLCAmaSwgY2xfcywgdWRjX2NudCk7CisJICAgZWJ0X2NoZWNrX2VudHJ5LCBuZXQsIG5ld2luZm8sIG5hbWUsICZpLCBjbF9zLCB1ZGNfY250KTsKIAlpZiAocmV0ICE9IDApIHsKIAkJRUJUX0VOVFJZX0lURVJBVEUobmV3aW5mby0+ZW50cmllcywgbmV3aW5mby0+ZW50cmllc19zaXplLAotCQkgICBlYnRfY2xlYW51cF9lbnRyeSwgJmkpOworCQkJCSAgZWJ0X2NsZWFudXBfZW50cnksIG5ldCwgJmkpOwogCX0KIAl2ZnJlZShjbF9zKTsKIAlyZXR1cm4gcmV0OwogfQogCiAvKiBjYWxsZWQgdW5kZXIgd3JpdGVfbG9jayAqLwotc3RhdGljIHZvaWQgZ2V0X2NvdW50ZXJzKHN0cnVjdCBlYnRfY291bnRlciAqb2xkY291bnRlcnMsCitzdGF0aWMgdm9pZCBnZXRfY291bnRlcnMoY29uc3Qgc3RydWN0IGVidF9jb3VudGVyICpvbGRjb3VudGVycywKICAgIHN0cnVjdCBlYnRfY291bnRlciAqY291bnRlcnMsIHVuc2lnbmVkIGludCBuZW50cmllcykKIHsKIAlpbnQgaSwgY3B1OwpAQCAtOTQ5LDE2ICs5ODAsMTE3IEBACiAJfQogfQogCi0vKiByZXBsYWNlIHRoZSB0YWJsZSAqLwotc3RhdGljIGludCBkb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4pCitzdGF0aWMgaW50IGRvX3JlcGxhY2VfZmluaXNoKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGVidF9yZXBsYWNlICpyZXBsLAorCQkJICAgICAgc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvKQogewotCWludCByZXQsIGksIGNvdW50ZXJzaXplOwotCXN0cnVjdCBlYnRfdGFibGVfaW5mbyAqbmV3aW5mbzsKLQlzdHJ1Y3QgZWJ0X3JlcGxhY2UgdG1wOwotCXN0cnVjdCBlYnRfdGFibGUgKnQ7CisJaW50IHJldCwgaTsKIAlzdHJ1Y3QgZWJ0X2NvdW50ZXIgKmNvdW50ZXJzdG1wID0gTlVMTDsKIAkvKiB1c2VkIHRvIGJlIGFibGUgdG8gdW5sb2NrIGVhcmxpZXIgKi8KIAlzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8gKnRhYmxlOworCXN0cnVjdCBlYnRfdGFibGUgKnQ7CisKKwkvKiB0aGUgdXNlciB3YW50cyBjb3VudGVycyBiYWNrCisJICAgdGhlIGNoZWNrIG9uIHRoZSBzaXplIGlzIGRvbmUgbGF0ZXIsIHdoZW4gd2UgaGF2ZSB0aGUgbG9jayAqLworCWlmIChyZXBsLT5udW1fY291bnRlcnMpIHsKKwkJdW5zaWduZWQgbG9uZyBzaXplID0gcmVwbC0+bnVtX2NvdW50ZXJzICogc2l6ZW9mKCpjb3VudGVyc3RtcCk7CisJCWNvdW50ZXJzdG1wID0gdm1hbGxvYyhzaXplKTsKKwkJaWYgKCFjb3VudGVyc3RtcCkKKwkJCXJldHVybiAtRU5PTUVNOworCX0KKworCW5ld2luZm8tPmNoYWluc3RhY2sgPSBOVUxMOworCXJldCA9IGVidF92ZXJpZnlfcG9pbnRlcnMocmVwbCwgbmV3aW5mbyk7CisJaWYgKHJldCAhPSAwKQorCQlnb3RvIGZyZWVfY291bnRlcnN0bXA7CisKKwlyZXQgPSB0cmFuc2xhdGVfdGFibGUobmV0LCByZXBsLT5uYW1lLCBuZXdpbmZvKTsKKworCWlmIChyZXQgIT0gMCkKKwkJZ290byBmcmVlX2NvdW50ZXJzdG1wOworCisJdCA9IGZpbmRfdGFibGVfbG9jayhuZXQsIHJlcGwtPm5hbWUsICZyZXQsICZlYnRfbXV0ZXgpOworCWlmICghdCkgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGZyZWVfaXRlcmF0ZTsKKwl9CisKKwkvKiB0aGUgdGFibGUgZG9lc24ndCBsaWtlIGl0ICovCisJaWYgKHQtPmNoZWNrICYmIChyZXQgPSB0LT5jaGVjayhuZXdpbmZvLCByZXBsLT52YWxpZF9ob29rcykpKQorCQlnb3RvIGZyZWVfdW5sb2NrOworCisJaWYgKHJlcGwtPm51bV9jb3VudGVycyAmJiByZXBsLT5udW1fY291bnRlcnMgIT0gdC0+cHJpdmF0ZS0+bmVudHJpZXMpIHsKKwkJQlVHUFJJTlQoIldyb25nIG5yLiBvZiBjb3VudGVycyByZXF1ZXN0ZWRcbiIpOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGZyZWVfdW5sb2NrOworCX0KKworCS8qIHdlIGhhdmUgdGhlIG11dGV4IGxvY2ssIHNvIG5vIGRhbmdlciBpbiByZWFkaW5nIHRoaXMgcG9pbnRlciAqLworCXRhYmxlID0gdC0+cHJpdmF0ZTsKKwkvKiBtYWtlIHN1cmUgdGhlIHRhYmxlIGNhbiBvbmx5IGJlIHJtbW9kJ2VkIGlmIGl0IGNvbnRhaW5zIG5vIHJ1bGVzICovCisJaWYgKCF0YWJsZS0+bmVudHJpZXMgJiYgbmV3aW5mby0+bmVudHJpZXMgJiYgIXRyeV9tb2R1bGVfZ2V0KHQtPm1lKSkgeworCQlyZXQgPSAtRU5PRU5UOworCQlnb3RvIGZyZWVfdW5sb2NrOworCX0gZWxzZSBpZiAodGFibGUtPm5lbnRyaWVzICYmICFuZXdpbmZvLT5uZW50cmllcykKKwkJbW9kdWxlX3B1dCh0LT5tZSk7CisJLyogd2UgbmVlZCBhbiBhdG9taWMgc25hcHNob3Qgb2YgdGhlIGNvdW50ZXJzICovCisJd3JpdGVfbG9ja19iaCgmdC0+bG9jayk7CisJaWYgKHJlcGwtPm51bV9jb3VudGVycykKKwkJZ2V0X2NvdW50ZXJzKHQtPnByaXZhdGUtPmNvdW50ZXJzLCBjb3VudGVyc3RtcCwKKwkJICAgdC0+cHJpdmF0ZS0+bmVudHJpZXMpOworCisJdC0+cHJpdmF0ZSA9IG5ld2luZm87CisJd3JpdGVfdW5sb2NrX2JoKCZ0LT5sb2NrKTsKKwltdXRleF91bmxvY2soJmVidF9tdXRleCk7CisJLyogc28sIGEgdXNlciBjYW4gY2hhbmdlIHRoZSBjaGFpbnMgd2hpbGUgaGF2aW5nIG1lc3NlZCB1cCBoZXIgY291bnRlcgorCSAgIGFsbG9jYXRpb24uIE9ubHkgcmVhc29uIHdoeSB0aGlzIGlzIGRvbmUgaXMgYmVjYXVzZSB0aGlzIHdheSB0aGUgbG9jaworCSAgIGlzIGhlbGQgb25seSBvbmNlLCB3aGlsZSB0aGlzIGRvZXNuJ3QgYnJpbmcgdGhlIGtlcm5lbCBpbnRvIGEKKwkgICBkYW5nZXJvdXMgc3RhdGUuICovCisJaWYgKHJlcGwtPm51bV9jb3VudGVycyAmJgorCSAgIGNvcHlfdG9fdXNlcihyZXBsLT5jb3VudGVycywgY291bnRlcnN0bXAsCisJICAgcmVwbC0+bnVtX2NvdW50ZXJzICogc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpKSB7CisJCXJldCA9IC1FRkFVTFQ7CisJfQorCWVsc2UKKwkJcmV0ID0gMDsKKworCS8qIGRlY3JlYXNlIG1vZHVsZSBjb3VudCBhbmQgZnJlZSByZXNvdXJjZXMgKi8KKwlFQlRfRU5UUllfSVRFUkFURSh0YWJsZS0+ZW50cmllcywgdGFibGUtPmVudHJpZXNfc2l6ZSwKKwkJCSAgZWJ0X2NsZWFudXBfZW50cnksIG5ldCwgTlVMTCk7CisKKwl2ZnJlZSh0YWJsZS0+ZW50cmllcyk7CisJaWYgKHRhYmxlLT5jaGFpbnN0YWNrKSB7CisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQorCQkJdmZyZWUodGFibGUtPmNoYWluc3RhY2tbaV0pOworCQl2ZnJlZSh0YWJsZS0+Y2hhaW5zdGFjayk7CisJfQorCXZmcmVlKHRhYmxlKTsKKworCXZmcmVlKGNvdW50ZXJzdG1wKTsKKwlyZXR1cm4gcmV0OworCitmcmVlX3VubG9jazoKKwltdXRleF91bmxvY2soJmVidF9tdXRleCk7CitmcmVlX2l0ZXJhdGU6CisJRUJUX0VOVFJZX0lURVJBVEUobmV3aW5mby0+ZW50cmllcywgbmV3aW5mby0+ZW50cmllc19zaXplLAorCQkJICBlYnRfY2xlYW51cF9lbnRyeSwgbmV0LCBOVUxMKTsKK2ZyZWVfY291bnRlcnN0bXA6CisJdmZyZWUoY291bnRlcnN0bXApOworCS8qIGNhbiBiZSBpbml0aWFsaXplZCBpbiB0cmFuc2xhdGVfdGFibGUoKSAqLworCWlmIChuZXdpbmZvLT5jaGFpbnN0YWNrKSB7CisJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQorCQkJdmZyZWUobmV3aW5mby0+Y2hhaW5zdGFja1tpXSk7CisJCXZmcmVlKG5ld2luZm8tPmNoYWluc3RhY2spOworCX0KKwlyZXR1cm4gcmV0OworfQorCisvKiByZXBsYWNlIHRoZSB0YWJsZSAqLworc3RhdGljIGludCBkb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXIsCisJCSAgICAgIHVuc2lnbmVkIGludCBsZW4pCit7CisJaW50IHJldCwgY291bnRlcnNpemU7CisJc3RydWN0IGVidF90YWJsZV9pbmZvICpuZXdpbmZvOworCXN0cnVjdCBlYnRfcmVwbGFjZSB0bXA7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgdXNlciwgc2l6ZW9mKHRtcCkpICE9IDApCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtOTczLDggKzExMDUsOCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJLyogb3ZlcmZsb3cgY2hlY2sgKi8KLQlpZiAodG1wLm5lbnRyaWVzID49ICgoSU5UX01BWCAtIHNpemVvZihzdHJ1Y3QgZWJ0X3RhYmxlX2luZm8pKSAvIE5SX0NQVVMgLQotCQkJU01QX0NBQ0hFX0JZVEVTKSAvIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKQorCWlmICh0bXAubmVudHJpZXMgPj0gKChJTlRfTUFYIC0gc2l6ZW9mKHN0cnVjdCBlYnRfdGFibGVfaW5mbykpIC8KKwkJCU5SX0NQVVMgLSBTTVBfQ0FDSEVfQllURVMpIC8gc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpCiAJCXJldHVybiAtRU5PTUVNOwogCWlmICh0bXAubnVtX2NvdW50ZXJzID49IElOVF9NQVggLyBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC05OTksMTAzICsxMTMxLDkgQEAKIAkJZ290byBmcmVlX2VudHJpZXM7CiAJfQogCi0JLyogdGhlIHVzZXIgd2FudHMgY291bnRlcnMgYmFjawotCSAgIHRoZSBjaGVjayBvbiB0aGUgc2l6ZSBpcyBkb25lIGxhdGVyLCB3aGVuIHdlIGhhdmUgdGhlIGxvY2sgKi8KLQlpZiAodG1wLm51bV9jb3VudGVycykgewotCQljb3VudGVyc3RtcCA9IHZtYWxsb2ModG1wLm51bV9jb3VudGVycyAqIHNpemVvZigqY291bnRlcnN0bXApKTsKLQkJaWYgKCFjb3VudGVyc3RtcCkgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gZnJlZV9lbnRyaWVzOwotCQl9Ci0JfQotCWVsc2UKLQkJY291bnRlcnN0bXAgPSBOVUxMOwotCi0JLyogdGhpcyBjYW4gZ2V0IGluaXRpYWxpemVkIGJ5IHRyYW5zbGF0ZV90YWJsZSgpICovCi0JbmV3aW5mby0+Y2hhaW5zdGFjayA9IE5VTEw7Ci0JcmV0ID0gZWJ0X3ZlcmlmeV9wb2ludGVycygmdG1wLCBuZXdpbmZvKTsKLQlpZiAocmV0ICE9IDApCi0JCWdvdG8gZnJlZV9jb3VudGVyc3RtcDsKLQotCXJldCA9IHRyYW5zbGF0ZV90YWJsZSh0bXAubmFtZSwgbmV3aW5mbyk7Ci0KLQlpZiAocmV0ICE9IDApCi0JCWdvdG8gZnJlZV9jb3VudGVyc3RtcDsKLQotCXQgPSBmaW5kX3RhYmxlX2xvY2sobmV0LCB0bXAubmFtZSwgJnJldCwgJmVidF9tdXRleCk7Ci0JaWYgKCF0KSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gZnJlZV9pdGVyYXRlOwotCX0KLQotCS8qIHRoZSB0YWJsZSBkb2Vzbid0IGxpa2UgaXQgKi8KLQlpZiAodC0+Y2hlY2sgJiYgKHJldCA9IHQtPmNoZWNrKG5ld2luZm8sIHRtcC52YWxpZF9ob29rcykpKQotCQlnb3RvIGZyZWVfdW5sb2NrOwotCi0JaWYgKHRtcC5udW1fY291bnRlcnMgJiYgdG1wLm51bV9jb3VudGVycyAhPSB0LT5wcml2YXRlLT5uZW50cmllcykgewotCQlCVUdQUklOVCgiV3JvbmcgbnIuIG9mIGNvdW50ZXJzIHJlcXVlc3RlZFxuIik7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZnJlZV91bmxvY2s7Ci0JfQotCi0JLyogd2UgaGF2ZSB0aGUgbXV0ZXggbG9jaywgc28gbm8gZGFuZ2VyIGluIHJlYWRpbmcgdGhpcyBwb2ludGVyICovCi0JdGFibGUgPSB0LT5wcml2YXRlOwotCS8qIG1ha2Ugc3VyZSB0aGUgdGFibGUgY2FuIG9ubHkgYmUgcm1tb2QnZWQgaWYgaXQgY29udGFpbnMgbm8gcnVsZXMgKi8KLQlpZiAoIXRhYmxlLT5uZW50cmllcyAmJiBuZXdpbmZvLT5uZW50cmllcyAmJiAhdHJ5X21vZHVsZV9nZXQodC0+bWUpKSB7Ci0JCXJldCA9IC1FTk9FTlQ7Ci0JCWdvdG8gZnJlZV91bmxvY2s7Ci0JfSBlbHNlIGlmICh0YWJsZS0+bmVudHJpZXMgJiYgIW5ld2luZm8tPm5lbnRyaWVzKQotCQltb2R1bGVfcHV0KHQtPm1lKTsKLQkvKiB3ZSBuZWVkIGFuIGF0b21pYyBzbmFwc2hvdCBvZiB0aGUgY291bnRlcnMgKi8KLQl3cml0ZV9sb2NrX2JoKCZ0LT5sb2NrKTsKLQlpZiAodG1wLm51bV9jb3VudGVycykKLQkJZ2V0X2NvdW50ZXJzKHQtPnByaXZhdGUtPmNvdW50ZXJzLCBjb3VudGVyc3RtcCwKLQkJICAgdC0+cHJpdmF0ZS0+bmVudHJpZXMpOwotCi0JdC0+cHJpdmF0ZSA9IG5ld2luZm87Ci0Jd3JpdGVfdW5sb2NrX2JoKCZ0LT5sb2NrKTsKLQltdXRleF91bmxvY2soJmVidF9tdXRleCk7Ci0JLyogc28sIGEgdXNlciBjYW4gY2hhbmdlIHRoZSBjaGFpbnMgd2hpbGUgaGF2aW5nIG1lc3NlZCB1cCBoZXIgY291bnRlcgotCSAgIGFsbG9jYXRpb24uIE9ubHkgcmVhc29uIHdoeSB0aGlzIGlzIGRvbmUgaXMgYmVjYXVzZSB0aGlzIHdheSB0aGUgbG9jawotCSAgIGlzIGhlbGQgb25seSBvbmNlLCB3aGlsZSB0aGlzIGRvZXNuJ3QgYnJpbmcgdGhlIGtlcm5lbCBpbnRvIGEKLQkgICBkYW5nZXJvdXMgc3RhdGUuICovCi0JaWYgKHRtcC5udW1fY291bnRlcnMgJiYKLQkgICBjb3B5X3RvX3VzZXIodG1wLmNvdW50ZXJzLCBjb3VudGVyc3RtcCwKLQkgICB0bXAubnVtX2NvdW50ZXJzICogc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpKSB7Ci0JCUJVR1BSSU5UKCJDb3VsZG4ndCBjb3B5IGNvdW50ZXJzIHRvIHVzZXJzcGFjZVxuIik7Ci0JCXJldCA9IC1FRkFVTFQ7Ci0JfQotCWVsc2UKLQkJcmV0ID0gMDsKLQotCS8qIGRlY3JlYXNlIG1vZHVsZSBjb3VudCBhbmQgZnJlZSByZXNvdXJjZXMgKi8KLQlFQlRfRU5UUllfSVRFUkFURSh0YWJsZS0+ZW50cmllcywgdGFibGUtPmVudHJpZXNfc2l6ZSwKLQkgICBlYnRfY2xlYW51cF9lbnRyeSwgTlVMTCk7Ci0KLQl2ZnJlZSh0YWJsZS0+ZW50cmllcyk7Ci0JaWYgKHRhYmxlLT5jaGFpbnN0YWNrKSB7Ci0JCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQotCQkJdmZyZWUodGFibGUtPmNoYWluc3RhY2tbaV0pOwotCQl2ZnJlZSh0YWJsZS0+Y2hhaW5zdGFjayk7Ci0JfQotCXZmcmVlKHRhYmxlKTsKLQotCXZmcmVlKGNvdW50ZXJzdG1wKTsKLQlyZXR1cm4gcmV0OwotCi1mcmVlX3VubG9jazoKLQltdXRleF91bmxvY2soJmVidF9tdXRleCk7Ci1mcmVlX2l0ZXJhdGU6Ci0JRUJUX0VOVFJZX0lURVJBVEUobmV3aW5mby0+ZW50cmllcywgbmV3aW5mby0+ZW50cmllc19zaXplLAotCSAgIGVidF9jbGVhbnVwX2VudHJ5LCBOVUxMKTsKLWZyZWVfY291bnRlcnN0bXA6Ci0JdmZyZWUoY291bnRlcnN0bXApOwotCS8qIGNhbiBiZSBpbml0aWFsaXplZCBpbiB0cmFuc2xhdGVfdGFibGUoKSAqLwotCWlmIChuZXdpbmZvLT5jaGFpbnN0YWNrKSB7Ci0JCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKQotCQkJdmZyZWUobmV3aW5mby0+Y2hhaW5zdGFja1tpXSk7Ci0JCXZmcmVlKG5ld2luZm8tPmNoYWluc3RhY2spOwotCX0KKwlyZXQgPSBkb19yZXBsYWNlX2ZpbmlzaChuZXQsICZ0bXAsIG5ld2luZm8pOworCWlmIChyZXQgPT0gMCkKKwkJcmV0dXJuIHJldDsKIGZyZWVfZW50cmllczoKIAl2ZnJlZShuZXdpbmZvLT5lbnRyaWVzKTsKIGZyZWVfbmV3aW5mbzoKQEAgLTExNTQsNyArMTE5Miw3IEBACiAJCQluZXdpbmZvLT5ob29rX2VudHJ5W2ldID0gcCArCiAJCQkJKChjaGFyICopcmVwbC0+aG9va19lbnRyeVtpXSAtIHJlcGwtPmVudHJpZXMpOwogCX0KLQlyZXQgPSB0cmFuc2xhdGVfdGFibGUocmVwbC0+bmFtZSwgbmV3aW5mbyk7CisJcmV0ID0gdHJhbnNsYXRlX3RhYmxlKG5ldCwgcmVwbC0+bmFtZSwgbmV3aW5mbyk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCUJVR1BSSU5UKCJUcmFuc2xhdGVfdGFibGUgZmFpbGVkXG4iKTsKIAkJZ290byBmcmVlX2NoYWluc3RhY2s7CkBAIC0xMjA0LDcgKzEyNDIsNyBAQAogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKLXZvaWQgZWJ0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IGVidF90YWJsZSAqdGFibGUpCit2b2lkIGVidF91bnJlZ2lzdGVyX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGVidF90YWJsZSAqdGFibGUpCiB7CiAJaW50IGk7CiAKQEAgLTEyMTYsNyArMTI1NCw3IEBACiAJbGlzdF9kZWwoJnRhYmxlLT5saXN0KTsKIAltdXRleF91bmxvY2soJmVidF9tdXRleCk7CiAJRUJUX0VOVFJZX0lURVJBVEUodGFibGUtPnByaXZhdGUtPmVudHJpZXMsIHRhYmxlLT5wcml2YXRlLT5lbnRyaWVzX3NpemUsCi0JCQkgIGVidF9jbGVhbnVwX2VudHJ5LCBOVUxMKTsKKwkJCSAgZWJ0X2NsZWFudXBfZW50cnksIG5ldCwgTlVMTCk7CiAJaWYgKHRhYmxlLT5wcml2YXRlLT5uZW50cmllcykKIAkJbW9kdWxlX3B1dCh0YWJsZS0+bWUpOwogCXZmcmVlKHRhYmxlLT5wcml2YXRlLT5lbnRyaWVzKTsKQEAgLTEyMzAsMzkgKzEyNjgsMzMgQEAKIH0KIAogLyogdXNlcnNwYWNlIGp1c3Qgc3VwcGxpZWQgdXMgd2l0aCBjb3VudGVycyAqLwotc3RhdGljIGludCB1cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyBpbnQgZG9fdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQlzdHJ1Y3QgZWJ0X2NvdW50ZXIgX191c2VyICpjb3VudGVycywKKwkJCQl1bnNpZ25lZCBpbnQgbnVtX2NvdW50ZXJzLAorCQkJCWNvbnN0IHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCBpLCByZXQ7CiAJc3RydWN0IGVidF9jb3VudGVyICp0bXA7Ci0Jc3RydWN0IGVidF9yZXBsYWNlIGhscDsKIAlzdHJ1Y3QgZWJ0X3RhYmxlICp0OwogCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZobHAsIHVzZXIsIHNpemVvZihobHApKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlpZiAobGVuICE9IHNpemVvZihobHApICsgaGxwLm51bV9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoaGxwLm51bV9jb3VudGVycyA9PSAwKQorCWlmIChudW1fY291bnRlcnMgPT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoISh0bXAgPSB2bWFsbG9jKGhscC5udW1fY291bnRlcnMgKiBzaXplb2YoKnRtcCkpKSkgewotCQlNRU1QUklOVCgiVXBkYXRlX2NvdW50ZXJzICYmIG5vbWVtb3J5XG4iKTsKKwl0bXAgPSB2bWFsbG9jKG51bV9jb3VudGVycyAqIHNpemVvZigqdG1wKSk7CisJaWYgKCF0bXApCiAJCXJldHVybiAtRU5PTUVNOwotCX0KIAotCXQgPSBmaW5kX3RhYmxlX2xvY2sobmV0LCBobHAubmFtZSwgJnJldCwgJmVidF9tdXRleCk7CisJdCA9IGZpbmRfdGFibGVfbG9jayhuZXQsIG5hbWUsICZyZXQsICZlYnRfbXV0ZXgpOwogCWlmICghdCkKIAkJZ290byBmcmVlX3RtcDsKIAotCWlmIChobHAubnVtX2NvdW50ZXJzICE9IHQtPnByaXZhdGUtPm5lbnRyaWVzKSB7CisJaWYgKG51bV9jb3VudGVycyAhPSB0LT5wcml2YXRlLT5uZW50cmllcykgewogCQlCVUdQUklOVCgiV3JvbmcgbnIgb2YgY291bnRlcnNcbiIpOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIHVubG9ja19tdXRleDsKIAl9CiAKLQlpZiAoIGNvcHlfZnJvbV91c2VyKHRtcCwgaGxwLmNvdW50ZXJzLAotCSAgIGhscC5udW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSkgKSB7Ci0JCUJVR1BSSU5UKCJVcGRhdGFfY291bnRlcnMgJiYgIWNmdVxuIik7CisJaWYgKGNvcHlfZnJvbV91c2VyKHRtcCwgY291bnRlcnMsIG51bV9jb3VudGVycyAqIHNpemVvZigqY291bnRlcnMpKSkgewogCQlyZXQgPSAtRUZBVUxUOwogCQlnb3RvIHVubG9ja19tdXRleDsKIAl9CkBAIC0xMjcxLDcgKzEzMDMsNyBAQAogCXdyaXRlX2xvY2tfYmgoJnQtPmxvY2spOwogCiAJLyogd2UgYWRkIHRvIHRoZSBjb3VudGVycyBvZiB0aGUgZmlyc3QgY3B1ICovCi0JZm9yIChpID0gMDsgaSA8IGhscC5udW1fY291bnRlcnM7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBudW1fY291bnRlcnM7IGkrKykgewogCQl0LT5wcml2YXRlLT5jb3VudGVyc1tpXS5wY250ICs9IHRtcFtpXS5wY250OwogCQl0LT5wcml2YXRlLT5jb3VudGVyc1tpXS5iY250ICs9IHRtcFtpXS5iY250OwogCX0KQEAgLTEyODUsOCArMTMxNywyMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGVidF9tYWtlX21hdGNobmFtZShzdHJ1Y3QgZWJ0X2VudHJ5X21hdGNoICptLAotICAgY2hhciAqYmFzZSwgY2hhciBfX3VzZXIgKnViYXNlKQorc3RhdGljIGludCB1cGRhdGVfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBjb25zdCB2b2lkIF9fdXNlciAqdXNlciwKKwkJCSAgICB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBlYnRfcmVwbGFjZSBobHA7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmhscCwgdXNlciwgc2l6ZW9mKGhscCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChsZW4gIT0gc2l6ZW9mKGhscCkgKyBobHAubnVtX2NvdW50ZXJzICogc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcikpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIGRvX3VwZGF0ZV9jb3VudGVycyhuZXQsIGhscC5uYW1lLCBobHAuY291bnRlcnMsCisJCQkJaGxwLm51bV9jb3VudGVycywgdXNlciwgbGVuKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZWJ0X21ha2VfbWF0Y2huYW1lKGNvbnN0IHN0cnVjdCBlYnRfZW50cnlfbWF0Y2ggKm0sCisgICAgY29uc3QgY2hhciAqYmFzZSwgY2hhciBfX3VzZXIgKnViYXNlKQogewogCWNoYXIgX191c2VyICpobHAgPSB1YmFzZSArICgoY2hhciAqKW0gLSBiYXNlKTsKIAlpZiAoY29weV90b191c2VyKGhscCwgbS0+dS5tYXRjaC0+bmFtZSwgRUJUX0ZVTkNUSU9OX01BWE5BTUVMRU4pKQpAQCAtMTI5NCw4ICsxMzQxLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZWJ0X21ha2Vfd2F0Y2hlcm5hbWUoc3RydWN0IGVidF9lbnRyeV93YXRjaGVyICp3LAotICAgY2hhciAqYmFzZSwgY2hhciBfX3VzZXIgKnViYXNlKQorc3RhdGljIGlubGluZSBpbnQgZWJ0X21ha2Vfd2F0Y2hlcm5hbWUoY29uc3Qgc3RydWN0IGVidF9lbnRyeV93YXRjaGVyICp3LAorICAgIGNvbnN0IGNoYXIgKmJhc2UsIGNoYXIgX191c2VyICp1YmFzZSkKIHsKIAljaGFyIF9fdXNlciAqaGxwID0gdWJhc2UgKyAoKGNoYXIgKil3IC0gYmFzZSk7CiAJaWYgKGNvcHlfdG9fdXNlcihobHAgLCB3LT51LndhdGNoZXItPm5hbWUsIEVCVF9GVU5DVElPTl9NQVhOQU1FTEVOKSkKQEAgLTEzMDMsMTEgKzEzNTAsMTIgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZWJ0X21ha2VfbmFtZXMoc3RydWN0IGVidF9lbnRyeSAqZSwgY2hhciAqYmFzZSwgY2hhciBfX3VzZXIgKnViYXNlKQorc3RhdGljIGlubGluZSBpbnQKK2VidF9tYWtlX25hbWVzKHN0cnVjdCBlYnRfZW50cnkgKmUsIGNvbnN0IGNoYXIgKmJhc2UsIGNoYXIgX191c2VyICp1YmFzZSkKIHsKIAlpbnQgcmV0OwogCWNoYXIgX191c2VyICpobHA7Ci0Jc3RydWN0IGVidF9lbnRyeV90YXJnZXQgKnQ7CisJY29uc3Qgc3RydWN0IGVidF9lbnRyeV90YXJnZXQgKnQ7CiAKIAlpZiAoZS0+Yml0bWFzayA9PSAwKQogCQlyZXR1cm4gMDsKQEAgLTEzMjYsMTMgKzEzNzQsNDYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjb3B5X2NvdW50ZXJzX3RvX3VzZXIoc3RydWN0IGVidF90YWJsZSAqdCwKKwkJCQkgIGNvbnN0IHN0cnVjdCBlYnRfY291bnRlciAqb2xkY291bnRlcnMsCisJCQkJICB2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IG51bV9jb3VudGVycywKKwkJCQkgIHVuc2lnbmVkIGludCBuZW50cmllcykKK3sKKwlzdHJ1Y3QgZWJ0X2NvdW50ZXIgKmNvdW50ZXJzdG1wOworCWludCByZXQgPSAwOworCisJLyogdXNlcnNwYWNlIG1pZ2h0IG5vdCBuZWVkIHRoZSBjb3VudGVycyAqLworCWlmIChudW1fY291bnRlcnMgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlpZiAobnVtX2NvdW50ZXJzICE9IG5lbnRyaWVzKSB7CisJCUJVR1BSSU5UKCJOdW1fY291bnRlcnMgd3JvbmdcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljb3VudGVyc3RtcCA9IHZtYWxsb2MobmVudHJpZXMgKiBzaXplb2YoKmNvdW50ZXJzdG1wKSk7CisJaWYgKCFjb3VudGVyc3RtcCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwl3cml0ZV9sb2NrX2JoKCZ0LT5sb2NrKTsKKwlnZXRfY291bnRlcnMob2xkY291bnRlcnMsIGNvdW50ZXJzdG1wLCBuZW50cmllcyk7CisJd3JpdGVfdW5sb2NrX2JoKCZ0LT5sb2NrKTsKKworCWlmIChjb3B5X3RvX3VzZXIodXNlciwgY291bnRlcnN0bXAsCisJICAgbmVudHJpZXMgKiBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSkpCisJCXJldCA9IC1FRkFVTFQ7CisJdmZyZWUoY291bnRlcnN0bXApOworCXJldHVybiByZXQ7Cit9CisKIC8qIGNhbGxlZCB3aXRoIGVidF9tdXRleCBsb2NrZWQgKi8KIHN0YXRpYyBpbnQgY29weV9ldmVyeXRoaW5nX3RvX3VzZXIoc3RydWN0IGVidF90YWJsZSAqdCwgdm9pZCBfX3VzZXIgKnVzZXIsCi0gICBpbnQgKmxlbiwgaW50IGNtZCkKKyAgICBjb25zdCBpbnQgKmxlbiwgaW50IGNtZCkKIHsKIAlzdHJ1Y3QgZWJ0X3JlcGxhY2UgdG1wOwotCXN0cnVjdCBlYnRfY291bnRlciAqY291bnRlcnN0bXAsICpvbGRjb3VudGVyczsKKwljb25zdCBzdHJ1Y3QgZWJ0X2NvdW50ZXIgKm9sZGNvdW50ZXJzOwogCXVuc2lnbmVkIGludCBlbnRyaWVzX3NpemUsIG5lbnRyaWVzOworCWludCByZXQ7CiAJY2hhciAqZW50cmllczsKIAogCWlmIChjbWQgPT0gRUJUX1NPX0dFVF9FTlRSSUVTKSB7CkBAIC0xMzQ3LDE2ICsxNDI4LDEyIEBACiAJCW9sZGNvdW50ZXJzID0gdC0+dGFibGUtPmNvdW50ZXJzOwogCX0KIAotCWlmIChjb3B5X2Zyb21fdXNlcigmdG1wLCB1c2VyLCBzaXplb2YodG1wKSkpIHsKLQkJQlVHUFJJTlQoIkNmdSBkaWRuJ3Qgd29ya1xuIik7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIHVzZXIsIHNpemVvZih0bXApKSkKIAkJcmV0dXJuIC1FRkFVTFQ7Ci0JfQogCiAJaWYgKCpsZW4gIT0gc2l6ZW9mKHN0cnVjdCBlYnRfcmVwbGFjZSkgKyBlbnRyaWVzX3NpemUgKwotCSAgICh0bXAubnVtX2NvdW50ZXJzPyBuZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpOiAwKSkgewotCQlCVUdQUklOVCgiV3Jvbmcgc2l6ZVxuIik7CisJICAgKHRtcC5udW1fY291bnRlcnM/IG5lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBlYnRfY291bnRlcik6IDApKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAKIAlpZiAodG1wLm5lbnRyaWVzICE9IG5lbnRyaWVzKSB7CiAJCUJVR1BSSU5UKCJOZW50cmllcyB3cm9uZ1xuIik7CkBAIC0xMzY4LDI5ICsxNDQ1LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIHVzZXJzcGFjZSBtaWdodCBub3QgbmVlZCB0aGUgY291bnRlcnMgKi8KLQlpZiAodG1wLm51bV9jb3VudGVycykgewotCQlpZiAodG1wLm51bV9jb3VudGVycyAhPSBuZW50cmllcykgewotCQkJQlVHUFJJTlQoIk51bV9jb3VudGVycyB3cm9uZ1xuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQljb3VudGVyc3RtcCA9IHZtYWxsb2MobmVudHJpZXMgKiBzaXplb2YoKmNvdW50ZXJzdG1wKSk7Ci0JCWlmICghY291bnRlcnN0bXApIHsKLQkJCU1FTVBSSU5UKCJDb3VsZG4ndCBjb3B5IGNvdW50ZXJzLCBvdXQgb2YgbWVtb3J5XG4iKTsKLQkJCXJldHVybiAtRU5PTUVNOwotCQl9Ci0JCXdyaXRlX2xvY2tfYmgoJnQtPmxvY2spOwotCQlnZXRfY291bnRlcnMob2xkY291bnRlcnMsIGNvdW50ZXJzdG1wLCBuZW50cmllcyk7Ci0JCXdyaXRlX3VubG9ja19iaCgmdC0+bG9jayk7Ci0KLQkJaWYgKGNvcHlfdG9fdXNlcih0bXAuY291bnRlcnMsIGNvdW50ZXJzdG1wLAotCQkgICBuZW50cmllcyAqIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKSkgewotCQkJQlVHUFJJTlQoIkNvdWxkbid0IGNvcHkgY291bnRlcnMgdG8gdXNlcnNwYWNlXG4iKTsKLQkJCXZmcmVlKGNvdW50ZXJzdG1wKTsKLQkJCXJldHVybiAtRUZBVUxUOwotCQl9Ci0JCXZmcmVlKGNvdW50ZXJzdG1wKTsKLQl9CisJcmV0ID0gY29weV9jb3VudGVyc190b191c2VyKHQsIG9sZGNvdW50ZXJzLCB0bXAuY291bnRlcnMsCisJCQkJCXRtcC5udW1fY291bnRlcnMsIG5lbnRyaWVzKTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OwogCiAJaWYgKGNvcHlfdG9fdXNlcih0bXAuZW50cmllcywgZW50cmllcywgZW50cmllc19zaXplKSkgewogCQlCVUdQUklOVCgiQ291bGRuJ3QgY29weSBlbnRyaWVzIHRvIHVzZXJzcGFjZVxuIik7CkBAIC0xNDE4LDcgKzE0NzYsNyBAQAogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwotICB9CisJfQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE0NzgsMTUgKzE1MzYsODkyIEBACiAJcmV0dXJuIHJldDsKIH0KIAorI2lmZGVmIENPTkZJR19DT01QQVQKKy8qIDMyIGJpdC11c2Vyc3BhY2UgY29tcGF0aWJpbGl0eSBkZWZpbml0aW9ucy4gKi8KK3N0cnVjdCBjb21wYXRfZWJ0X3JlcGxhY2UgeworCWNoYXIgbmFtZVtFQlRfVEFCTEVfTUFYTkFNRUxFTl07CisJY29tcGF0X3VpbnRfdCB2YWxpZF9ob29rczsKKwljb21wYXRfdWludF90IG5lbnRyaWVzOworCWNvbXBhdF91aW50X3QgZW50cmllc19zaXplOworCS8qIHN0YXJ0IG9mIHRoZSBjaGFpbnMgKi8KKwljb21wYXRfdXB0cl90IGhvb2tfZW50cnlbTkZfQlJfTlVNSE9PS1NdOworCS8qIG5yIG9mIGNvdW50ZXJzIHVzZXJzcGFjZSBleHBlY3RzIGJhY2sgKi8KKwljb21wYXRfdWludF90IG51bV9jb3VudGVyczsKKwkvKiB3aGVyZSB0aGUga2VybmVsIHdpbGwgcHV0IHRoZSBvbGQgY291bnRlcnMuICovCisJY29tcGF0X3VwdHJfdCBjb3VudGVyczsKKwljb21wYXRfdXB0cl90IGVudHJpZXM7Cit9OworCisvKiBzdHJ1Y3QgZWJ0X2VudHJ5X21hdGNoLCBfdGFyZ2V0IGFuZCBfd2F0Y2hlciBoYXZlIHNhbWUgbGF5b3V0ICovCitzdHJ1Y3QgY29tcGF0X2VidF9lbnRyeV9td3QgeworCXVuaW9uIHsKKwkJY2hhciBuYW1lW0VCVF9GVU5DVElPTl9NQVhOQU1FTEVOXTsKKwkJY29tcGF0X3VwdHJfdCBwdHI7CisJfSB1OworCWNvbXBhdF91aW50X3QgbWF0Y2hfc2l6ZTsKKwljb21wYXRfdWludF90IGRhdGFbMF07Cit9OworCisvKiBhY2NvdW50IGZvciBwb3NzaWJsZSBwYWRkaW5nIGJldHdlZW4gbWF0Y2hfc2l6ZSBhbmQgLT5kYXRhICovCitzdGF0aWMgaW50IGVidF9jb21wYXRfZW50cnlfcGFkc2l6ZSh2b2lkKQoreworCUJVSUxEX0JVR19PTihYVF9BTElHTihzaXplb2Yoc3RydWN0IGVidF9lbnRyeV9tYXRjaCkpIDwKKwkJCUNPTVBBVF9YVF9BTElHTihzaXplb2Yoc3RydWN0IGNvbXBhdF9lYnRfZW50cnlfbXd0KSkpOworCXJldHVybiAoaW50KSBYVF9BTElHTihzaXplb2Yoc3RydWN0IGVidF9lbnRyeV9tYXRjaCkpIC0KKwkJCUNPTVBBVF9YVF9BTElHTihzaXplb2Yoc3RydWN0IGNvbXBhdF9lYnRfZW50cnlfbXd0KSk7Cit9CisKK3N0YXRpYyBpbnQgZWJ0X2NvbXBhdF9tYXRjaF9vZmZzZXQoY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCwKKwkJCQkgICB1bnNpZ25lZCBpbnQgdXNlcmxlbikKK3sKKwkvKgorCSAqIGVidF9hbW9uZyBuZWVkcyBzcGVjaWFsIGhhbmRsaW5nLiBUaGUga2VybmVsIC5tYXRjaHNpemUgaXMKKwkgKiBzZXQgdG8gLTEgYXQgcmVnaXN0cmF0aW9uIHRpbWU7IGF0IHJ1bnRpbWUgYW4gRUJUX0FMSUdOKCllZAorCSAqIHZhbHVlIGlzIGV4cGVjdGVkLgorCSAqIEV4YW1wbGU6IHVzZXJzcGFjZSBzZW5kcyA0NTAwLCBlYnRfYW1vbmcuYyB3YW50cyA0NTA0LgorCSAqLworCWlmICh1bmxpa2VseShtYXRjaC0+bWF0Y2hzaXplID09IC0xKSkKKwkJcmV0dXJuIFhUX0FMSUdOKHVzZXJsZW4pIC0gQ09NUEFUX1hUX0FMSUdOKHVzZXJsZW4pOworCXJldHVybiB4dF9jb21wYXRfbWF0Y2hfb2Zmc2V0KG1hdGNoKTsKK30KKworc3RhdGljIGludCBjb21wYXRfbWF0Y2hfdG9fdXNlcihzdHJ1Y3QgZWJ0X2VudHJ5X21hdGNoICptLCB2b2lkIF9fdXNlciAqKmRzdHB0ciwKKwkJCQl1bnNpZ25lZCBpbnQgKnNpemUpCit7CisJY29uc3Qgc3RydWN0IHh0X21hdGNoICptYXRjaCA9IG0tPnUubWF0Y2g7CisJc3RydWN0IGNvbXBhdF9lYnRfZW50cnlfbXd0IF9fdXNlciAqY20gPSAqZHN0cHRyOworCWludCBvZmYgPSBlYnRfY29tcGF0X21hdGNoX29mZnNldChtYXRjaCwgbS0+bWF0Y2hfc2l6ZSk7CisJY29tcGF0X3VpbnRfdCBtc2l6ZSA9IG0tPm1hdGNoX3NpemUgLSBvZmY7CisKKwlCVUdfT04ob2ZmID49IG0tPm1hdGNoX3NpemUpOworCisJaWYgKGNvcHlfdG9fdXNlcihjbS0+dS5uYW1lLCBtYXRjaC0+bmFtZSwKKwkgICAgc3RybGVuKG1hdGNoLT5uYW1lKSArIDEpIHx8IHB1dF91c2VyKG1zaXplLCAmY20tPm1hdGNoX3NpemUpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChtYXRjaC0+Y29tcGF0X3RvX3VzZXIpIHsKKwkJaWYgKG1hdGNoLT5jb21wYXRfdG9fdXNlcihjbS0+ZGF0YSwgbS0+ZGF0YSkpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwl9IGVsc2UgaWYgKGNvcHlfdG9fdXNlcihjbS0+ZGF0YSwgbS0+ZGF0YSwgbXNpemUpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkqc2l6ZSAtPSBlYnRfY29tcGF0X2VudHJ5X3BhZHNpemUoKSArIG9mZjsKKwkqZHN0cHRyID0gY20tPmRhdGE7CisJKmRzdHB0ciArPSBtc2l6ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb21wYXRfdGFyZ2V0X3RvX3VzZXIoc3RydWN0IGVidF9lbnRyeV90YXJnZXQgKnQsCisJCQkJIHZvaWQgX191c2VyICoqZHN0cHRyLAorCQkJCSB1bnNpZ25lZCBpbnQgKnNpemUpCit7CisJY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0ID0gdC0+dS50YXJnZXQ7CisJc3RydWN0IGNvbXBhdF9lYnRfZW50cnlfbXd0IF9fdXNlciAqY20gPSAqZHN0cHRyOworCWludCBvZmYgPSB4dF9jb21wYXRfdGFyZ2V0X29mZnNldCh0YXJnZXQpOworCWNvbXBhdF91aW50X3QgdHNpemUgPSB0LT50YXJnZXRfc2l6ZSAtIG9mZjsKKworCUJVR19PTihvZmYgPj0gdC0+dGFyZ2V0X3NpemUpOworCisJaWYgKGNvcHlfdG9fdXNlcihjbS0+dS5uYW1lLCB0YXJnZXQtPm5hbWUsCisJICAgIHN0cmxlbih0YXJnZXQtPm5hbWUpICsgMSkgfHwgcHV0X3VzZXIodHNpemUsICZjbS0+bWF0Y2hfc2l6ZSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKHRhcmdldC0+Y29tcGF0X3RvX3VzZXIpIHsKKwkJaWYgKHRhcmdldC0+Y29tcGF0X3RvX3VzZXIoY20tPmRhdGEsIHQtPmRhdGEpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJfSBlbHNlIGlmIChjb3B5X3RvX3VzZXIoY20tPmRhdGEsIHQtPmRhdGEsIHRzaXplKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkqc2l6ZSAtPSBlYnRfY29tcGF0X2VudHJ5X3BhZHNpemUoKSArIG9mZjsKKwkqZHN0cHRyID0gY20tPmRhdGE7CisJKmRzdHB0ciArPSB0c2l6ZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb21wYXRfd2F0Y2hlcl90b191c2VyKHN0cnVjdCBlYnRfZW50cnlfd2F0Y2hlciAqdywKKwkJCQkgIHZvaWQgX191c2VyICoqZHN0cHRyLAorCQkJCSAgdW5zaWduZWQgaW50ICpzaXplKQoreworCXJldHVybiBjb21wYXRfdGFyZ2V0X3RvX3VzZXIoKHN0cnVjdCBlYnRfZW50cnlfdGFyZ2V0ICopdywKKwkJCQkJCQlkc3RwdHIsIHNpemUpOworfQorCitzdGF0aWMgaW50IGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIoc3RydWN0IGVidF9lbnRyeSAqZSwgdm9pZCBfX3VzZXIgKipkc3RwdHIsCisJCQkJdW5zaWduZWQgaW50ICpzaXplKQoreworCXN0cnVjdCBlYnRfZW50cnlfdGFyZ2V0ICp0OworCXN0cnVjdCBlYnRfZW50cnkgX191c2VyICpjZTsKKwl1MzIgd2F0Y2hlcnNfb2Zmc2V0LCB0YXJnZXRfb2Zmc2V0LCBuZXh0X29mZnNldDsKKwljb21wYXRfdWludF90IG9yaWdzaXplOworCWludCByZXQ7CisKKwlpZiAoZS0+Yml0bWFzayA9PSAwKSB7CisJCWlmICgqc2l6ZSA8IHNpemVvZihzdHJ1Y3QgZWJ0X2VudHJpZXMpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCWlmIChjb3B5X3RvX3VzZXIoKmRzdHB0ciwgZSwgc2l6ZW9mKHN0cnVjdCBlYnRfZW50cmllcykpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJKmRzdHB0ciArPSBzaXplb2Yoc3RydWN0IGVidF9lbnRyaWVzKTsKKwkJKnNpemUgLT0gc2l6ZW9mKHN0cnVjdCBlYnRfZW50cmllcyk7CisJCXJldHVybiAwOworCX0KKworCWlmICgqc2l6ZSA8IHNpemVvZigqY2UpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNlID0gKHN0cnVjdCBlYnRfZW50cnkgX191c2VyICopKmRzdHB0cjsKKwlpZiAoY29weV90b191c2VyKGNlLCBlLCBzaXplb2YoKmNlKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJb3JpZ3NpemUgPSAqc2l6ZTsKKwkqZHN0cHRyICs9IHNpemVvZigqY2UpOworCisJcmV0ID0gRUJUX01BVENIX0lURVJBVEUoZSwgY29tcGF0X21hdGNoX3RvX3VzZXIsIGRzdHB0ciwgc2l6ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwl3YXRjaGVyc19vZmZzZXQgPSBlLT53YXRjaGVyc19vZmZzZXQgLSAob3JpZ3NpemUgLSAqc2l6ZSk7CisKKwlyZXQgPSBFQlRfV0FUQ0hFUl9JVEVSQVRFKGUsIGNvbXBhdF93YXRjaGVyX3RvX3VzZXIsIGRzdHB0ciwgc2l6ZSk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwl0YXJnZXRfb2Zmc2V0ID0gZS0+dGFyZ2V0X29mZnNldCAtIChvcmlnc2l6ZSAtICpzaXplKTsKKworCXQgPSAoc3RydWN0IGVidF9lbnRyeV90YXJnZXQgKikgKChjaGFyICopIGUgKyBlLT50YXJnZXRfb2Zmc2V0KTsKKworCXJldCA9IGNvbXBhdF90YXJnZXRfdG9fdXNlcih0LCBkc3RwdHIsIHNpemUpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisJbmV4dF9vZmZzZXQgPSBlLT5uZXh0X29mZnNldCAtIChvcmlnc2l6ZSAtICpzaXplKTsKKworCWlmIChwdXRfdXNlcih3YXRjaGVyc19vZmZzZXQsICZjZS0+d2F0Y2hlcnNfb2Zmc2V0KSB8fAorCSAgICBwdXRfdXNlcih0YXJnZXRfb2Zmc2V0LCAmY2UtPnRhcmdldF9vZmZzZXQpIHx8CisJICAgIHB1dF91c2VyKG5leHRfb2Zmc2V0LCAmY2UtPm5leHRfb2Zmc2V0KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkqc2l6ZSAtPSBzaXplb2YoKmNlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjb21wYXRfY2FsY19tYXRjaChzdHJ1Y3QgZWJ0X2VudHJ5X21hdGNoICptLCBpbnQgKm9mZikKK3sKKwkqb2ZmICs9IGVidF9jb21wYXRfbWF0Y2hfb2Zmc2V0KG0tPnUubWF0Y2gsIG0tPm1hdGNoX3NpemUpOworCSpvZmYgKz0gZWJ0X2NvbXBhdF9lbnRyeV9wYWRzaXplKCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29tcGF0X2NhbGNfd2F0Y2hlcihzdHJ1Y3QgZWJ0X2VudHJ5X3dhdGNoZXIgKncsIGludCAqb2ZmKQoreworCSpvZmYgKz0geHRfY29tcGF0X3RhcmdldF9vZmZzZXQody0+dS53YXRjaGVyKTsKKwkqb2ZmICs9IGVidF9jb21wYXRfZW50cnlfcGFkc2l6ZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbXBhdF9jYWxjX2VudHJ5KGNvbnN0IHN0cnVjdCBlYnRfZW50cnkgKmUsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBlYnRfdGFibGVfaW5mbyAqaW5mbywKKwkJCSAgICAgY29uc3Qgdm9pZCAqYmFzZSwKKwkJCSAgICAgc3RydWN0IGNvbXBhdF9lYnRfcmVwbGFjZSAqbmV3aW5mbykKK3sKKwljb25zdCBzdHJ1Y3QgZWJ0X2VudHJ5X3RhcmdldCAqdDsKKwl1bnNpZ25lZCBpbnQgZW50cnlfb2Zmc2V0OworCWludCBvZmYsIHJldCwgaTsKKworCWlmIChlLT5iaXRtYXNrID09IDApCisJCXJldHVybiAwOworCisJb2ZmID0gMDsKKwllbnRyeV9vZmZzZXQgPSAodm9pZCAqKWUgLSBiYXNlOworCisJRUJUX01BVENIX0lURVJBVEUoZSwgY29tcGF0X2NhbGNfbWF0Y2gsICZvZmYpOworCUVCVF9XQVRDSEVSX0lURVJBVEUoZSwgY29tcGF0X2NhbGNfd2F0Y2hlciwgJm9mZik7CisKKwl0ID0gKGNvbnN0IHN0cnVjdCBlYnRfZW50cnlfdGFyZ2V0ICopICgoY2hhciAqKSBlICsgZS0+dGFyZ2V0X29mZnNldCk7CisKKwlvZmYgKz0geHRfY29tcGF0X3RhcmdldF9vZmZzZXQodC0+dS50YXJnZXQpOworCW9mZiArPSBlYnRfY29tcGF0X2VudHJ5X3BhZHNpemUoKTsKKworCW5ld2luZm8tPmVudHJpZXNfc2l6ZSAtPSBvZmY7CisKKwlyZXQgPSB4dF9jb21wYXRfYWRkX29mZnNldChORlBST1RPX0JSSURHRSwgZW50cnlfb2Zmc2V0LCBvZmYpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgTkZfQlJfTlVNSE9PS1M7IGkrKykgeworCQljb25zdCB2b2lkICpob29rcHRyID0gaW5mby0+aG9va19lbnRyeVtpXTsKKwkJaWYgKGluZm8tPmhvb2tfZW50cnlbaV0gJiYKKwkJICAgIChlIDwgKHN0cnVjdCBlYnRfZW50cnkgKikoYmFzZSAtIGhvb2twdHIpKSkgeworCQkJbmV3aW5mby0+aG9va19lbnRyeVtpXSAtPSBvZmY7CisJCQlwcl9kZWJ1ZygiMHglMDhYIC0+IDB4JTA4WFxuIiwKKwkJCQkJbmV3aW5mby0+aG9va19lbnRyeVtpXSArIG9mZiwKKwkJCQkJbmV3aW5mby0+aG9va19lbnRyeVtpXSk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGNvbXBhdF90YWJsZV9pbmZvKGNvbnN0IHN0cnVjdCBlYnRfdGFibGVfaW5mbyAqaW5mbywKKwkJCSAgICAgc3RydWN0IGNvbXBhdF9lYnRfcmVwbGFjZSAqbmV3aW5mbykKK3sKKwl1bnNpZ25lZCBpbnQgc2l6ZSA9IGluZm8tPmVudHJpZXNfc2l6ZTsKKwljb25zdCB2b2lkICplbnRyaWVzID0gaW5mby0+ZW50cmllczsKKworCW5ld2luZm8tPmVudHJpZXNfc2l6ZSA9IHNpemU7CisKKwlyZXR1cm4gRUJUX0VOVFJZX0lURVJBVEUoZW50cmllcywgc2l6ZSwgY29tcGF0X2NhbGNfZW50cnksIGluZm8sCisJCQkJCQkJZW50cmllcywgbmV3aW5mbyk7Cit9CisKK3N0YXRpYyBpbnQgY29tcGF0X2NvcHlfZXZlcnl0aGluZ190b191c2VyKHN0cnVjdCBlYnRfdGFibGUgKnQsCisJCQkJCSAgdm9pZCBfX3VzZXIgKnVzZXIsIGludCAqbGVuLCBpbnQgY21kKQoreworCXN0cnVjdCBjb21wYXRfZWJ0X3JlcGxhY2UgcmVwbCwgdG1wOworCXN0cnVjdCBlYnRfY291bnRlciAqb2xkY291bnRlcnM7CisJc3RydWN0IGVidF90YWJsZV9pbmZvIHRpbmZvOworCWludCByZXQ7CisJdm9pZCBfX3VzZXIgKnBvczsKKworCW1lbXNldCgmdGluZm8sIDAsIHNpemVvZih0aW5mbykpOworCisJaWYgKGNtZCA9PSBFQlRfU09fR0VUX0VOVFJJRVMpIHsKKwkJdGluZm8uZW50cmllc19zaXplID0gdC0+cHJpdmF0ZS0+ZW50cmllc19zaXplOworCQl0aW5mby5uZW50cmllcyA9IHQtPnByaXZhdGUtPm5lbnRyaWVzOworCQl0aW5mby5lbnRyaWVzID0gdC0+cHJpdmF0ZS0+ZW50cmllczsKKwkJb2xkY291bnRlcnMgPSB0LT5wcml2YXRlLT5jb3VudGVyczsKKwl9IGVsc2UgeworCQl0aW5mby5lbnRyaWVzX3NpemUgPSB0LT50YWJsZS0+ZW50cmllc19zaXplOworCQl0aW5mby5uZW50cmllcyA9IHQtPnRhYmxlLT5uZW50cmllczsKKwkJdGluZm8uZW50cmllcyA9IHQtPnRhYmxlLT5lbnRyaWVzOworCQlvbGRjb3VudGVycyA9IHQtPnRhYmxlLT5jb3VudGVyczsKKwl9CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgdXNlciwgc2l6ZW9mKHRtcCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmICh0bXAubmVudHJpZXMgIT0gdGluZm8ubmVudHJpZXMgfHwKKwkgICAodG1wLm51bV9jb3VudGVycyAmJiB0bXAubnVtX2NvdW50ZXJzICE9IHRpbmZvLm5lbnRyaWVzKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1jcHkoJnJlcGwsICZ0bXAsIHNpemVvZihyZXBsKSk7CisJaWYgKGNtZCA9PSBFQlRfU09fR0VUX0VOVFJJRVMpCisJCXJldCA9IGNvbXBhdF90YWJsZV9pbmZvKHQtPnByaXZhdGUsICZyZXBsKTsKKwllbHNlCisJCXJldCA9IGNvbXBhdF90YWJsZV9pbmZvKCZ0aW5mbywgJnJlcGwpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoKmxlbiAhPSBzaXplb2YodG1wKSArIHJlcGwuZW50cmllc19zaXplICsKKwkgICAodG1wLm51bV9jb3VudGVycz8gdGluZm8ubmVudHJpZXMgKiBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKTogMCkpIHsKKwkJcHJfZXJyKCJ3cm9uZyBzaXplOiAqbGVuICVkLCBlbnRyaWVzX3NpemUgJXUsIHJlcGxzeiAlZFxuIiwKKwkJCQkqbGVuLCB0aW5mby5lbnRyaWVzX3NpemUsIHJlcGwuZW50cmllc19zaXplKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogdXNlcnNwYWNlIG1pZ2h0IG5vdCBuZWVkIHRoZSBjb3VudGVycyAqLworCXJldCA9IGNvcHlfY291bnRlcnNfdG9fdXNlcih0LCBvbGRjb3VudGVycywgY29tcGF0X3B0cih0bXAuY291bnRlcnMpLAorCQkJCQl0bXAubnVtX2NvdW50ZXJzLCB0aW5mby5uZW50cmllcyk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXBvcyA9IGNvbXBhdF9wdHIodG1wLmVudHJpZXMpOworCXJldHVybiBFQlRfRU5UUllfSVRFUkFURSh0aW5mby5lbnRyaWVzLCB0aW5mby5lbnRyaWVzX3NpemUsCisJCQljb21wYXRfY29weV9lbnRyeV90b191c2VyLCAmcG9zLCAmdG1wLmVudHJpZXNfc2l6ZSk7Cit9CisKK3N0cnVjdCBlYnRfZW50cmllc19idWZfc3RhdGUgeworCWNoYXIgKmJ1Zl9rZXJuX3N0YXJ0OwkvKiBrZXJuZWwgYnVmZmVyIHRvIGNvcHkgKHRyYW5zbGF0ZWQpIGRhdGEgdG8gKi8KKwl1MzIgYnVmX2tlcm5fbGVuOwkvKiB0b3RhbCBzaXplIG9mIGtlcm5lbCBidWZmZXIgKi8KKwl1MzIgYnVmX2tlcm5fb2Zmc2V0OwkvKiBhbW91bnQgb2YgZGF0YSBjb3BpZWQgc28gZmFyICovCisJdTMyIGJ1Zl91c2VyX29mZnNldDsJLyogcmVhZCBwb3NpdGlvbiBpbiB1c2Vyc3BhY2UgYnVmZmVyICovCit9OworCitzdGF0aWMgaW50IGVidF9idWZfY291bnQoc3RydWN0IGVidF9lbnRyaWVzX2J1Zl9zdGF0ZSAqc3RhdGUsIHVuc2lnbmVkIGludCBzeikKK3sKKwlzdGF0ZS0+YnVmX2tlcm5fb2Zmc2V0ICs9IHN6OworCXJldHVybiBzdGF0ZS0+YnVmX2tlcm5fb2Zmc2V0ID49IHN6ID8gMCA6IC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgZWJ0X2J1Zl9hZGQoc3RydWN0IGVidF9lbnRyaWVzX2J1Zl9zdGF0ZSAqc3RhdGUsCisJCSAgICAgICB2b2lkICpkYXRhLCB1bnNpZ25lZCBpbnQgc3opCit7CisJaWYgKHN0YXRlLT5idWZfa2Vybl9zdGFydCA9PSBOVUxMKQorCQlnb3RvIGNvdW50X29ubHk7CisKKwlCVUdfT04oc3RhdGUtPmJ1Zl9rZXJuX29mZnNldCArIHN6ID4gc3RhdGUtPmJ1Zl9rZXJuX2xlbik7CisKKwltZW1jcHkoc3RhdGUtPmJ1Zl9rZXJuX3N0YXJ0ICsgc3RhdGUtPmJ1Zl9rZXJuX29mZnNldCwgZGF0YSwgc3opOworCisgY291bnRfb25seToKKwlzdGF0ZS0+YnVmX3VzZXJfb2Zmc2V0ICs9IHN6OworCXJldHVybiBlYnRfYnVmX2NvdW50KHN0YXRlLCBzeik7Cit9CisKK3N0YXRpYyBpbnQgZWJ0X2J1Zl9hZGRfcGFkKHN0cnVjdCBlYnRfZW50cmllc19idWZfc3RhdGUgKnN0YXRlLCB1bnNpZ25lZCBpbnQgc3opCit7CisJY2hhciAqYiA9IHN0YXRlLT5idWZfa2Vybl9zdGFydDsKKworCUJVR19PTihiICYmIHN0YXRlLT5idWZfa2Vybl9vZmZzZXQgPiBzdGF0ZS0+YnVmX2tlcm5fbGVuKTsKKworCWlmIChiICE9IE5VTEwgJiYgc3ogPiAwKQorCQltZW1zZXQoYiArIHN0YXRlLT5idWZfa2Vybl9vZmZzZXQsIDAsIHN6KTsKKwkvKiBkbyBub3QgYWRqdXN0IC0+YnVmX3VzZXJfb2Zmc2V0IGhlcmUsIHdlIGFkZGVkIGtlcm5lbC1zaWRlIHBhZGRpbmcgKi8KKwlyZXR1cm4gZWJ0X2J1Zl9jb3VudChzdGF0ZSwgc3opOworfQorCitlbnVtIGNvbXBhdF9td3QgeworCUVCVF9DT01QQVRfTUFUQ0gsCisJRUJUX0NPTVBBVF9XQVRDSEVSLAorCUVCVF9DT01QQVRfVEFSR0VULAorfTsKKworc3RhdGljIGludCBjb21wYXRfbXR3X2Zyb21fdXNlcihzdHJ1Y3QgY29tcGF0X2VidF9lbnRyeV9td3QgKm13dCwKKwkJCQllbnVtIGNvbXBhdF9td3QgY29tcGF0X213dCwKKwkJCQlzdHJ1Y3QgZWJ0X2VudHJpZXNfYnVmX3N0YXRlICpzdGF0ZSwKKwkJCQljb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlKQoreworCWNoYXIgbmFtZVtFQlRfRlVOQ1RJT05fTUFYTkFNRUxFTl07CisJc3RydWN0IHh0X21hdGNoICptYXRjaDsKKwlzdHJ1Y3QgeHRfdGFyZ2V0ICp3dDsKKwl2b2lkICpkc3QgPSBOVUxMOworCWludCBvZmYsIHBhZCA9IDAsIHJldCA9IDA7CisJdW5zaWduZWQgaW50IHNpemVfa2VybiwgZW50cnlfb2Zmc2V0LCBtYXRjaF9zaXplID0gbXd0LT5tYXRjaF9zaXplOworCisJc3RybGNweShuYW1lLCBtd3QtPnUubmFtZSwgc2l6ZW9mKG5hbWUpKTsKKworCWlmIChzdGF0ZS0+YnVmX2tlcm5fc3RhcnQpCisJCWRzdCA9IHN0YXRlLT5idWZfa2Vybl9zdGFydCArIHN0YXRlLT5idWZfa2Vybl9vZmZzZXQ7CisKKwllbnRyeV9vZmZzZXQgPSAodW5zaWduZWQgY2hhciAqKSBtd3QgLSBiYXNlOworCXN3aXRjaCAoY29tcGF0X213dCkgeworCWNhc2UgRUJUX0NPTVBBVF9NQVRDSDoKKwkJbWF0Y2ggPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX21hdGNoKE5GUFJPVE9fQlJJREdFLAorCQkJCQkJbmFtZSwgMCksICJlYnRfJXMiLCBuYW1lKTsKKwkJaWYgKG1hdGNoID09IE5VTEwpCisJCQlyZXR1cm4gLUVOT0VOVDsKKwkJaWYgKElTX0VSUihtYXRjaCkpCisJCQlyZXR1cm4gUFRSX0VSUihtYXRjaCk7CisKKwkJb2ZmID0gZWJ0X2NvbXBhdF9tYXRjaF9vZmZzZXQobWF0Y2gsIG1hdGNoX3NpemUpOworCQlpZiAoZHN0KSB7CisJCQlpZiAobWF0Y2gtPmNvbXBhdF9mcm9tX3VzZXIpCisJCQkJbWF0Y2gtPmNvbXBhdF9mcm9tX3VzZXIoZHN0LCBtd3QtPmRhdGEpOworCQkJZWxzZQorCQkJCW1lbWNweShkc3QsIG13dC0+ZGF0YSwgbWF0Y2hfc2l6ZSk7CisJCX0KKworCQlzaXplX2tlcm4gPSBtYXRjaC0+bWF0Y2hzaXplOworCQlpZiAodW5saWtlbHkoc2l6ZV9rZXJuID09IC0xKSkKKwkJCXNpemVfa2VybiA9IG1hdGNoX3NpemU7CisJCW1vZHVsZV9wdXQobWF0Y2gtPm1lKTsKKwkJYnJlYWs7CisJY2FzZSBFQlRfQ09NUEFUX1dBVENIRVI6IC8qIGZhbGx0aHJvdWdoICovCisJY2FzZSBFQlRfQ09NUEFUX1RBUkdFVDoKKwkJd3QgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX3RhcmdldChORlBST1RPX0JSSURHRSwKKwkJCQkJCW5hbWUsIDApLCAiZWJ0XyVzIiwgbmFtZSk7CisJCWlmICh3dCA9PSBOVUxMKQorCQkJcmV0dXJuIC1FTk9FTlQ7CisJCWlmIChJU19FUlIod3QpKQorCQkJcmV0dXJuIFBUUl9FUlIod3QpOworCQlvZmYgPSB4dF9jb21wYXRfdGFyZ2V0X29mZnNldCh3dCk7CisKKwkJaWYgKGRzdCkgeworCQkJaWYgKHd0LT5jb21wYXRfZnJvbV91c2VyKQorCQkJCXd0LT5jb21wYXRfZnJvbV91c2VyKGRzdCwgbXd0LT5kYXRhKTsKKwkJCWVsc2UKKwkJCQltZW1jcHkoZHN0LCBtd3QtPmRhdGEsIG1hdGNoX3NpemUpOworCQl9CisKKwkJc2l6ZV9rZXJuID0gd3QtPnRhcmdldHNpemU7CisJCW1vZHVsZV9wdXQod3QtPm1lKTsKKwkJYnJlYWs7CisJfQorCisJaWYgKCFkc3QpIHsKKwkJcmV0ID0geHRfY29tcGF0X2FkZF9vZmZzZXQoTkZQUk9UT19CUklER0UsIGVudHJ5X29mZnNldCwKKwkJCQkJb2ZmICsgZWJ0X2NvbXBhdF9lbnRyeV9wYWRzaXplKCkpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJc3RhdGUtPmJ1Zl9rZXJuX29mZnNldCArPSBtYXRjaF9zaXplICsgb2ZmOworCXN0YXRlLT5idWZfdXNlcl9vZmZzZXQgKz0gbWF0Y2hfc2l6ZTsKKwlwYWQgPSBYVF9BTElHTihzaXplX2tlcm4pIC0gc2l6ZV9rZXJuOworCisJaWYgKHBhZCA+IDAgJiYgZHN0KSB7CisJCUJVR19PTihzdGF0ZS0+YnVmX2tlcm5fbGVuIDw9IHBhZCk7CisJCUJVR19PTihzdGF0ZS0+YnVmX2tlcm5fb2Zmc2V0IC0gKG1hdGNoX3NpemUgKyBvZmYpICsgc2l6ZV9rZXJuID4gc3RhdGUtPmJ1Zl9rZXJuX2xlbiAtIHBhZCk7CisJCW1lbXNldChkc3QgKyBzaXplX2tlcm4sIDAsIHBhZCk7CisJfQorCXJldHVybiBvZmYgKyBtYXRjaF9zaXplOworfQorCisvKgorICogcmV0dXJuIHNpemUgb2YgYWxsIG1hdGNoZXMsIHdhdGNoZXJzIG9yIHRhcmdldCwgaW5jbHVkaW5nIG5lY2Vzc2FyeQorICogYWxpZ25tZW50IGFuZCBwYWRkaW5nLgorICovCitzdGF0aWMgaW50IGVidF9zaXplX213dChzdHJ1Y3QgY29tcGF0X2VidF9lbnRyeV9td3QgKm1hdGNoMzIsCisJCQl1bnNpZ25lZCBpbnQgc2l6ZV9sZWZ0LCBlbnVtIGNvbXBhdF9td3QgdHlwZSwKKwkJCXN0cnVjdCBlYnRfZW50cmllc19idWZfc3RhdGUgKnN0YXRlLCBjb25zdCB2b2lkICpiYXNlKQoreworCWludCBncm93dGggPSAwOworCWNoYXIgKmJ1ZjsKKworCWlmIChzaXplX2xlZnQgPT0gMCkKKwkJcmV0dXJuIDA7CisKKwlidWYgPSAoY2hhciAqKSBtYXRjaDMyOworCisJd2hpbGUgKHNpemVfbGVmdCA+PSBzaXplb2YoKm1hdGNoMzIpKSB7CisJCXN0cnVjdCBlYnRfZW50cnlfbWF0Y2ggKm1hdGNoX2tlcm47CisJCWludCByZXQ7CisKKwkJbWF0Y2hfa2VybiA9IChzdHJ1Y3QgZWJ0X2VudHJ5X21hdGNoICopIHN0YXRlLT5idWZfa2Vybl9zdGFydDsKKwkJaWYgKG1hdGNoX2tlcm4pIHsKKwkJCWNoYXIgKnRtcDsKKwkJCXRtcCA9IHN0YXRlLT5idWZfa2Vybl9zdGFydCArIHN0YXRlLT5idWZfa2Vybl9vZmZzZXQ7CisJCQltYXRjaF9rZXJuID0gKHN0cnVjdCBlYnRfZW50cnlfbWF0Y2ggKikgdG1wOworCQl9CisJCXJldCA9IGVidF9idWZfYWRkKHN0YXRlLCBidWYsIHNpemVvZigqbWF0Y2gzMikpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCXNpemVfbGVmdCAtPSBzaXplb2YoKm1hdGNoMzIpOworCisJCS8qIGFkZCBwYWRkaW5nIGJlZm9yZSBtYXRjaC0+ZGF0YSAoaWYgYW55KSAqLworCQlyZXQgPSBlYnRfYnVmX2FkZF9wYWQoc3RhdGUsIGVidF9jb21wYXRfZW50cnlfcGFkc2l6ZSgpKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCisJCWlmIChtYXRjaDMyLT5tYXRjaF9zaXplID4gc2l6ZV9sZWZ0KQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJc2l6ZV9sZWZ0IC09IG1hdGNoMzItPm1hdGNoX3NpemU7CisKKwkJcmV0ID0gY29tcGF0X210d19mcm9tX3VzZXIobWF0Y2gzMiwgdHlwZSwgc3RhdGUsIGJhc2UpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisKKwkJQlVHX09OKHJldCA8IG1hdGNoMzItPm1hdGNoX3NpemUpOworCQlncm93dGggKz0gcmV0IC0gbWF0Y2gzMi0+bWF0Y2hfc2l6ZTsKKwkJZ3Jvd3RoICs9IGVidF9jb21wYXRfZW50cnlfcGFkc2l6ZSgpOworCisJCWJ1ZiArPSBzaXplb2YoKm1hdGNoMzIpOworCQlidWYgKz0gbWF0Y2gzMi0+bWF0Y2hfc2l6ZTsKKworCQlpZiAobWF0Y2hfa2VybikKKwkJCW1hdGNoX2tlcm4tPm1hdGNoX3NpemUgPSByZXQ7CisKKwkJV0FSTl9PTih0eXBlID09IEVCVF9DT01QQVRfVEFSR0VUICYmIHNpemVfbGVmdCk7CisJCW1hdGNoMzIgPSAoc3RydWN0IGNvbXBhdF9lYnRfZW50cnlfbXd0ICopIGJ1ZjsKKwl9CisKKwlyZXR1cm4gZ3Jvd3RoOworfQorCisjZGVmaW5lIEVCVF9DT01QQVRfV0FUQ0hFUl9JVEVSQVRFKGUsIGZuLCBhcmdzLi4uKSAgICAgICAgICBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJdW5zaWduZWQgaW50IF9faTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpbnQgX19yZXQgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXN0cnVjdCBjb21wYXRfZWJ0X2VudHJ5X213dCAqX193YXRjaGVyOyAgICAgICAgICAgICBcCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlmb3IgKF9faSA9IGUtPndhdGNoZXJzX29mZnNldDsgICAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgX19pIDwgKGUpLT50YXJnZXRfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICBfX2kgKz0gX193YXRjaGVyLT53YXRjaGVyX3NpemUgKyAgICAgICAgICAgICAgIFwKKwkgICAgIHNpemVvZihzdHJ1Y3QgY29tcGF0X2VidF9lbnRyeV9td3QpKSB7ICAgICAgICAgXAorCQlfX3dhdGNoZXIgPSAodm9pZCAqKShlKSArIF9faTsgICAgICAgICAgICAgIFwKKwkJX19yZXQgPSBmbihfX3dhdGNoZXIgLCAjIyBhcmdzKTsgICAgICAgICAgICBcCisJCWlmIChfX3JldCAhPSAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKF9fcmV0ID09IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJaWYgKF9faSAhPSAoZSktPnRhcmdldF9vZmZzZXQpICAgICAgICAgICAgICBcCisJCQlfX3JldCA9IC1FSU5WQUw7ICAgICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlfX3JldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSkKKworI2RlZmluZSBFQlRfQ09NUEFUX01BVENIX0lURVJBVEUoZSwgZm4sIGFyZ3MuLi4pICAgICAgICAgICAgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXVuc2lnbmVkIGludCBfX2k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaW50IF9fcmV0ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlzdHJ1Y3QgY29tcGF0X2VidF9lbnRyeV9td3QgKl9fbWF0Y2g7ICAgICAgICAgICAgICAgXAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZm9yIChfX2kgPSBzaXplb2Yoc3RydWN0IGVidF9lbnRyeSk7ICAgICAgICAgICAgICAgIFwKKwkgICAgIF9faSA8IChlKS0+d2F0Y2hlcnNfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgXAorCSAgICAgX19pICs9IF9fbWF0Y2gtPm1hdGNoX3NpemUgKyAgICAgICAgICAgICAgICAgICBcCisJICAgICBzaXplb2Yoc3RydWN0IGNvbXBhdF9lYnRfZW50cnlfbXd0KSkgeyAgICAgICAgIFwKKwkJX19tYXRjaCA9ICh2b2lkICopKGUpICsgX19pOyAgICAgICAgICAgICAgICBcCisJCV9fcmV0ID0gZm4oX19tYXRjaCAsICMjIGFyZ3MpOyAgICAgICAgICAgICAgXAorCQlpZiAoX19yZXQgIT0gMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJCWJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIChfX3JldCA9PSAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCWlmIChfX2kgIT0gKGUpLT53YXRjaGVyc19vZmZzZXQpICAgICAgICAgICAgXAorCQkJX19yZXQgPSAtRUlOVkFMOyAgICAgICAgICAgICAgICAgICAgXAorCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJX19yZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30pCisKKy8qIGNhbGxlZCBmb3IgYWxsIGVidF9lbnRyeSBzdHJ1Y3R1cmVzLiAqLworc3RhdGljIGludCBzaXplX2VudHJ5X213dChzdHJ1Y3QgZWJ0X2VudHJ5ICplbnRyeSwgY29uc3QgdW5zaWduZWQgY2hhciAqYmFzZSwKKwkJCSAgdW5zaWduZWQgaW50ICp0b3RhbCwKKwkJCSAgc3RydWN0IGVidF9lbnRyaWVzX2J1Zl9zdGF0ZSAqc3RhdGUpCit7CisJdW5zaWduZWQgaW50IGksIGosIHN0YXJ0b2ZmLCBuZXdfb2Zmc2V0ID0gMDsKKwkvKiBzdG9yZXMgbWF0Y2gvd2F0Y2hlcnMvdGFyZ2V0cyAmIG9mZnNldCBvZiBuZXh0IHN0cnVjdCBlYnRfZW50cnk6ICovCisJdW5zaWduZWQgaW50IG9mZnNldHNbNF07CisJdW5zaWduZWQgaW50ICpvZmZzZXRzX3VwZGF0ZSA9IE5VTEw7CisJaW50IHJldDsKKwljaGFyICpidWZfc3RhcnQ7CisKKwlpZiAoKnRvdGFsIDwgc2l6ZW9mKHN0cnVjdCBlYnRfZW50cmllcykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFlbnRyeS0+Yml0bWFzaykgeworCQkqdG90YWwgLT0gc2l6ZW9mKHN0cnVjdCBlYnRfZW50cmllcyk7CisJCXJldHVybiBlYnRfYnVmX2FkZChzdGF0ZSwgZW50cnksIHNpemVvZihzdHJ1Y3QgZWJ0X2VudHJpZXMpKTsKKwl9CisJaWYgKCp0b3RhbCA8IHNpemVvZigqZW50cnkpIHx8IGVudHJ5LT5uZXh0X29mZnNldCA8IHNpemVvZigqZW50cnkpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0YXJ0b2ZmID0gc3RhdGUtPmJ1Zl91c2VyX29mZnNldDsKKwkvKiBwdWxsIGluIG1vc3QgcGFydCBvZiBlYnRfZW50cnksIGl0IGRvZXMgbm90IG5lZWQgdG8gYmUgY2hhbmdlZC4gKi8KKwlyZXQgPSBlYnRfYnVmX2FkZChzdGF0ZSwgZW50cnksCisJCQlvZmZzZXRvZihzdHJ1Y3QgZWJ0X2VudHJ5LCB3YXRjaGVyc19vZmZzZXQpKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCW9mZnNldHNbMF0gPSBzaXplb2Yoc3RydWN0IGVidF9lbnRyeSk7IC8qIG1hdGNoZXMgY29tZSBmaXJzdCAqLworCW1lbWNweSgmb2Zmc2V0c1sxXSwgJmVudHJ5LT53YXRjaGVyc19vZmZzZXQsCisJCQlzaXplb2Yob2Zmc2V0cykgLSBzaXplb2Yob2Zmc2V0c1swXSkpOworCisJaWYgKHN0YXRlLT5idWZfa2Vybl9zdGFydCkgeworCQlidWZfc3RhcnQgPSBzdGF0ZS0+YnVmX2tlcm5fc3RhcnQgKyBzdGF0ZS0+YnVmX2tlcm5fb2Zmc2V0OworCQlvZmZzZXRzX3VwZGF0ZSA9ICh1bnNpZ25lZCBpbnQgKikgYnVmX3N0YXJ0OworCX0KKwlyZXQgPSBlYnRfYnVmX2FkZChzdGF0ZSwgJm9mZnNldHNbMV0sCisJCQlzaXplb2Yob2Zmc2V0cykgLSBzaXplb2Yob2Zmc2V0c1swXSkpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCWJ1Zl9zdGFydCA9IChjaGFyICopIGVudHJ5OworCS8qCisJICogMDogbWF0Y2hlcyBvZmZzZXQsIGFsd2F5cyBmb2xsb3dzIGVidF9lbnRyeS4KKwkgKiAxOiB3YXRjaGVycyBvZmZzZXQsIGZyb20gZWJ0X2VudHJ5IHN0cnVjdHVyZQorCSAqIDI6IHRhcmdldCBvZmZzZXQsIGZyb20gZWJ0X2VudHJ5IHN0cnVjdHVyZQorCSAqIDM6IG5leHQgZWJ0X2VudHJ5IG9mZnNldCwgZnJvbSBlYnRfZW50cnkgc3RydWN0dXJlCisJICoKKwkgKiBvZmZzZXRzIGFyZSByZWxhdGl2ZSB0byBiZWdpbm5pbmcgb2Ygc3RydWN0IGVidF9lbnRyeSAoaS5lLiwgMCkuCisJICovCisJZm9yIChpID0gMCwgaiA9IDEgOyBqIDwgNCA7IGorKywgaSsrKSB7CisJCXN0cnVjdCBjb21wYXRfZWJ0X2VudHJ5X213dCAqbWF0Y2gzMjsKKwkJdW5zaWduZWQgaW50IHNpemU7CisJCWNoYXIgKmJ1ZiA9IGJ1Zl9zdGFydDsKKworCQlidWYgPSBidWZfc3RhcnQgKyBvZmZzZXRzW2ldOworCQlpZiAob2Zmc2V0c1tpXSA+IG9mZnNldHNbal0pCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCQltYXRjaDMyID0gKHN0cnVjdCBjb21wYXRfZWJ0X2VudHJ5X213dCAqKSBidWY7CisJCXNpemUgPSBvZmZzZXRzW2pdIC0gb2Zmc2V0c1tpXTsKKwkJcmV0ID0gZWJ0X3NpemVfbXd0KG1hdGNoMzIsIHNpemUsIGksIHN0YXRlLCBiYXNlKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCQluZXdfb2Zmc2V0ICs9IHJldDsKKwkJaWYgKG9mZnNldHNfdXBkYXRlICYmIG5ld19vZmZzZXQpIHsKKwkJCXByX2RlYnVnKCJlYnRhYmxlczogY2hhbmdlIG9mZnNldCAlZCB0byAlZFxuIiwKKwkJCQlvZmZzZXRzX3VwZGF0ZVtpXSwgb2Zmc2V0c1tqXSArIG5ld19vZmZzZXQpOworCQkJb2Zmc2V0c191cGRhdGVbaV0gPSBvZmZzZXRzW2pdICsgbmV3X29mZnNldDsKKwkJfQorCX0KKworCXN0YXJ0b2ZmID0gc3RhdGUtPmJ1Zl91c2VyX29mZnNldCAtIHN0YXJ0b2ZmOworCisJQlVHX09OKCp0b3RhbCA8IHN0YXJ0b2ZmKTsKKwkqdG90YWwgLT0gc3RhcnRvZmY7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiByZXBsLT5lbnRyaWVzX3NpemUgaXMgdGhlIHNpemUgb2YgdGhlIGVidF9lbnRyeSBibG9iIGluIHVzZXJzcGFjZS4KKyAqIEl0IG1pZ2h0IG5lZWQgbW9yZSBtZW1vcnkgd2hlbiBjb3BpZWQgdG8gYSA2NCBiaXQga2VybmVsIGluIGNhc2UKKyAqIHVzZXJzcGFjZSBpcyAzMi1iaXQuIFNvLCBmaXJzdCB0YXNrOiBmaW5kIG91dCBob3cgbXVjaCBtZW1vcnkgaXMgbmVlZGVkLgorICoKKyAqIENhbGxlZCBiZWZvcmUgdmFsaWRhdGlvbiBpcyBwZXJmb3JtZWQuCisgKi8KK3N0YXRpYyBpbnQgY29tcGF0X2NvcHlfZW50cmllcyh1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6ZV91c2VyLAorCQkJCXN0cnVjdCBlYnRfZW50cmllc19idWZfc3RhdGUgKnN0YXRlKQoreworCXVuc2lnbmVkIGludCBzaXplX3JlbWFpbmluZyA9IHNpemVfdXNlcjsKKwlpbnQgcmV0OworCisJcmV0ID0gRUJUX0VOVFJZX0lURVJBVEUoZGF0YSwgc2l6ZV91c2VyLCBzaXplX2VudHJ5X213dCwgZGF0YSwKKwkJCQkJJnNpemVfcmVtYWluaW5nLCBzdGF0ZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlXQVJOX09OKHNpemVfcmVtYWluaW5nKTsKKwlyZXR1cm4gc3RhdGUtPmJ1Zl9rZXJuX29mZnNldDsKK30KKworCitzdGF0aWMgaW50IGNvbXBhdF9jb3B5X2VidF9yZXBsYWNlX2Zyb21fdXNlcihzdHJ1Y3QgZWJ0X3JlcGxhY2UgKnJlcGwsCisJCQkJCSAgICB2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbikKK3sKKwlzdHJ1Y3QgY29tcGF0X2VidF9yZXBsYWNlIHRtcDsKKwlpbnQgaTsKKworCWlmIChsZW4gPCBzaXplb2YodG1wKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgdXNlciwgc2l6ZW9mKHRtcCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChsZW4gIT0gc2l6ZW9mKHRtcCkgKyB0bXAuZW50cmllc19zaXplKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh0bXAuZW50cmllc19zaXplID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHRtcC5uZW50cmllcyA+PSAoKElOVF9NQVggLSBzaXplb2Yoc3RydWN0IGVidF90YWJsZV9pbmZvKSkgLworCQkJTlJfQ1BVUyAtIFNNUF9DQUNIRV9CWVRFUykgLyBzaXplb2Yoc3RydWN0IGVidF9jb3VudGVyKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJaWYgKHRtcC5udW1fY291bnRlcnMgPj0gSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweShyZXBsLCAmdG1wLCBvZmZzZXRvZihzdHJ1Y3QgZWJ0X3JlcGxhY2UsIGhvb2tfZW50cnkpKTsKKworCS8qIHN0YXJ0aW5nIHdpdGggaG9va19lbnRyeSwgMzIgdnMuIDY0IGJpdCBzdHJ1Y3R1cmVzIGFyZSBkaWZmZXJlbnQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTkZfQlJfTlVNSE9PS1M7IGkrKykKKwkJcmVwbC0+aG9va19lbnRyeVtpXSA9IGNvbXBhdF9wdHIodG1wLmhvb2tfZW50cnlbaV0pOworCisJcmVwbC0+bnVtX2NvdW50ZXJzID0gdG1wLm51bV9jb3VudGVyczsKKwlyZXBsLT5jb3VudGVycyA9IGNvbXBhdF9wdHIodG1wLmNvdW50ZXJzKTsKKwlyZXBsLT5lbnRyaWVzID0gY29tcGF0X3B0cih0bXAuZW50cmllcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY29tcGF0X2RvX3JlcGxhY2Uoc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwKKwkJCSAgICAgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpbnQgcmV0LCBpLCBjb3VudGVyc2l6ZSwgc2l6ZTY0OworCXN0cnVjdCBlYnRfdGFibGVfaW5mbyAqbmV3aW5mbzsKKwlzdHJ1Y3QgZWJ0X3JlcGxhY2UgdG1wOworCXN0cnVjdCBlYnRfZW50cmllc19idWZfc3RhdGUgc3RhdGU7CisJdm9pZCAqZW50cmllc190bXA7CisKKwlyZXQgPSBjb21wYXRfY29weV9lYnRfcmVwbGFjZV9mcm9tX3VzZXIoJnRtcCwgdXNlciwgbGVuKTsKKwlpZiAocmV0KSB7CisJCS8qIHRyeSByZWFsIGhhbmRsZXIgaW4gY2FzZSB1c2VybGFuZCBzdXBwbGllZCBuZWVkZWQgcGFkZGluZyAqLworCQlpZiAocmV0ID09IC1FSU5WQUwgJiYgZG9fcmVwbGFjZShuZXQsIHVzZXIsIGxlbikgPT0gMCkKKwkJCXJldCA9IDA7CisJCXJldHVybiByZXQ7CisJfQorCisJY291bnRlcnNpemUgPSBDT1VOVEVSX09GRlNFVCh0bXAubmVudHJpZXMpICogbnJfY3B1X2lkczsKKwluZXdpbmZvID0gdm1hbGxvYyhzaXplb2YoKm5ld2luZm8pICsgY291bnRlcnNpemUpOworCWlmICghbmV3aW5mbykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY291bnRlcnNpemUpCisJCW1lbXNldChuZXdpbmZvLT5jb3VudGVycywgMCwgY291bnRlcnNpemUpOworCisJbWVtc2V0KCZzdGF0ZSwgMCwgc2l6ZW9mKHN0YXRlKSk7CisKKwluZXdpbmZvLT5lbnRyaWVzID0gdm1hbGxvYyh0bXAuZW50cmllc19zaXplKTsKKwlpZiAoIW5ld2luZm8tPmVudHJpZXMpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBmcmVlX25ld2luZm87CisJfQorCWlmIChjb3B5X2Zyb21fdXNlcigKKwkgICBuZXdpbmZvLT5lbnRyaWVzLCB0bXAuZW50cmllcywgdG1wLmVudHJpZXNfc2l6ZSkgIT0gMCkgeworCQlyZXQgPSAtRUZBVUxUOworCQlnb3RvIGZyZWVfZW50cmllczsKKwl9CisKKwllbnRyaWVzX3RtcCA9IG5ld2luZm8tPmVudHJpZXM7CisKKwl4dF9jb21wYXRfbG9jayhORlBST1RPX0JSSURHRSk7CisKKwlyZXQgPSBjb21wYXRfY29weV9lbnRyaWVzKGVudHJpZXNfdG1wLCB0bXAuZW50cmllc19zaXplLCAmc3RhdGUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlwcl9kZWJ1ZygidG1wLmVudHJpZXNfc2l6ZSAlZCwga2VybiBvZmYgJWQsIHVzZXIgb2ZmICVkIGRlbHRhICVkXG4iLAorCQl0bXAuZW50cmllc19zaXplLCBzdGF0ZS5idWZfa2Vybl9vZmZzZXQsIHN0YXRlLmJ1Zl91c2VyX29mZnNldCwKKwkJeHRfY29tcGF0X2NhbGNfanVtcChORlBST1RPX0JSSURHRSwgdG1wLmVudHJpZXNfc2l6ZSkpOworCisJc2l6ZTY0ID0gcmV0OworCW5ld2luZm8tPmVudHJpZXMgPSB2bWFsbG9jKHNpemU2NCk7CisJaWYgKCFuZXdpbmZvLT5lbnRyaWVzKSB7CisJCXZmcmVlKGVudHJpZXNfdG1wKTsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXRfdW5sb2NrOworCX0KKworCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdGF0ZSkpOworCXN0YXRlLmJ1Zl9rZXJuX3N0YXJ0ID0gbmV3aW5mby0+ZW50cmllczsKKwlzdGF0ZS5idWZfa2Vybl9sZW4gPSBzaXplNjQ7CisKKwlyZXQgPSBjb21wYXRfY29weV9lbnRyaWVzKGVudHJpZXNfdG1wLCB0bXAuZW50cmllc19zaXplLCAmc3RhdGUpOworCUJVR19PTihyZXQgPCAwKTsJLyogcGFyc2VzIHNhbWUgZGF0YSBhZ2FpbiAqLworCisJdmZyZWUoZW50cmllc190bXApOworCXRtcC5lbnRyaWVzX3NpemUgPSBzaXplNjQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgTkZfQlJfTlVNSE9PS1M7IGkrKykgeworCQljaGFyIF9fdXNlciAqdXNycHRyOworCQlpZiAodG1wLmhvb2tfZW50cnlbaV0pIHsKKwkJCXVuc2lnbmVkIGludCBkZWx0YTsKKwkJCXVzcnB0ciA9IChjaGFyIF9fdXNlciAqKSB0bXAuaG9va19lbnRyeVtpXTsKKwkJCWRlbHRhID0gdXNycHRyIC0gdG1wLmVudHJpZXM7CisJCQl1c3JwdHIgKz0geHRfY29tcGF0X2NhbGNfanVtcChORlBST1RPX0JSSURHRSwgZGVsdGEpOworCQkJdG1wLmhvb2tfZW50cnlbaV0gPSAoc3RydWN0IGVidF9lbnRyaWVzIF9fdXNlciAqKXVzcnB0cjsKKwkJfQorCX0KKworCXh0X2NvbXBhdF9mbHVzaF9vZmZzZXRzKE5GUFJPVE9fQlJJREdFKTsKKwl4dF9jb21wYXRfdW5sb2NrKE5GUFJPVE9fQlJJREdFKTsKKworCXJldCA9IGRvX3JlcGxhY2VfZmluaXNoKG5ldCwgJnRtcCwgbmV3aW5mbyk7CisJaWYgKHJldCA9PSAwKQorCQlyZXR1cm4gcmV0OworZnJlZV9lbnRyaWVzOgorCXZmcmVlKG5ld2luZm8tPmVudHJpZXMpOworZnJlZV9uZXdpbmZvOgorCXZmcmVlKG5ld2luZm8pOworCXJldHVybiByZXQ7CitvdXRfdW5sb2NrOgorCXh0X2NvbXBhdF9mbHVzaF9vZmZzZXRzKE5GUFJPVE9fQlJJREdFKTsKKwl4dF9jb21wYXRfdW5sb2NrKE5GUFJPVE9fQlJJREdFKTsKKwlnb3RvIGZyZWVfZW50cmllczsKK30KKworc3RhdGljIGludCBjb21wYXRfdXBkYXRlX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsCisJCQkJICB1bnNpZ25lZCBpbnQgbGVuKQoreworCXN0cnVjdCBjb21wYXRfZWJ0X3JlcGxhY2UgaGxwOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZobHAsIHVzZXIsIHNpemVvZihobHApKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwkvKiB0cnkgcmVhbCBoYW5kbGVyIGluIGNhc2UgdXNlcmxhbmQgc3VwcGxpZWQgbmVlZGVkIHBhZGRpbmcgKi8KKwlpZiAobGVuICE9IHNpemVvZihobHApICsgaGxwLm51bV9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3QgZWJ0X2NvdW50ZXIpKQorCQlyZXR1cm4gdXBkYXRlX2NvdW50ZXJzKG5ldCwgdXNlciwgbGVuKTsKKworCXJldHVybiBkb191cGRhdGVfY291bnRlcnMobmV0LCBobHAubmFtZSwgY29tcGF0X3B0cihobHAuY291bnRlcnMpLAorCQkJCQlobHAubnVtX2NvdW50ZXJzLCB1c2VyLCBsZW4pOworfQorCitzdGF0aWMgaW50IGNvbXBhdF9kb19lYnRfc2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssCisJCWludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuKQoreworCWludCByZXQ7CisKKwlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRUJUX1NPX1NFVF9FTlRSSUVTOgorCQlyZXQgPSBjb21wYXRfZG9fcmVwbGFjZShzb2NrX25ldChzayksIHVzZXIsIGxlbik7CisJCWJyZWFrOworCWNhc2UgRUJUX1NPX1NFVF9DT1VOVEVSUzoKKwkJcmV0ID0gY29tcGF0X3VwZGF0ZV9jb3VudGVycyhzb2NrX25ldChzayksIHVzZXIsIGxlbik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisgIH0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNvbXBhdF9kb19lYnRfZ2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsCisJCXZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBjb21wYXRfZWJ0X3JlcGxhY2UgdG1wOworCXN0cnVjdCBlYnRfdGFibGUgKnQ7CisKKwlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCXJldHVybiAtRVBFUk07CisKKwkvKiB0cnkgcmVhbCBoYW5kbGVyIGluIGNhc2UgdXNlcmxhbmQgc3VwcGxpZWQgbmVlZGVkIHBhZGRpbmcgKi8KKwlpZiAoKGNtZCA9PSBFQlRfU09fR0VUX0lORk8gfHwKKwkgICAgIGNtZCA9PSBFQlRfU09fR0VUX0lOSVRfSU5GTykgJiYgKmxlbiAhPSBzaXplb2YodG1wKSkKKwkJCXJldHVybiBkb19lYnRfZ2V0X2N0bChzaywgY21kLCB1c2VyLCBsZW4pOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIHVzZXIsIHNpemVvZih0bXApKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwl0ID0gZmluZF90YWJsZV9sb2NrKHNvY2tfbmV0KHNrKSwgdG1wLm5hbWUsICZyZXQsICZlYnRfbXV0ZXgpOworCWlmICghdCkKKwkJcmV0dXJuIHJldDsKKworCXh0X2NvbXBhdF9sb2NrKE5GUFJPVE9fQlJJREdFKTsKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgRUJUX1NPX0dFVF9JTkZPOgorCQl0bXAubmVudHJpZXMgPSB0LT5wcml2YXRlLT5uZW50cmllczsKKwkJcmV0ID0gY29tcGF0X3RhYmxlX2luZm8odC0+cHJpdmF0ZSwgJnRtcCk7CisJCWlmIChyZXQpCisJCQlnb3RvIG91dDsKKwkJdG1wLnZhbGlkX2hvb2tzID0gdC0+dmFsaWRfaG9va3M7CisKKwkJaWYgKGNvcHlfdG9fdXNlcih1c2VyLCAmdG1wLCAqbGVuKSAhPSAwKSB7CisJCQlyZXQgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKwkJcmV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBFQlRfU09fR0VUX0lOSVRfSU5GTzoKKwkJdG1wLm5lbnRyaWVzID0gdC0+dGFibGUtPm5lbnRyaWVzOworCQl0bXAuZW50cmllc19zaXplID0gdC0+dGFibGUtPmVudHJpZXNfc2l6ZTsKKwkJdG1wLnZhbGlkX2hvb2tzID0gdC0+dGFibGUtPnZhbGlkX2hvb2tzOworCisJCWlmIChjb3B5X3RvX3VzZXIodXNlciwgJnRtcCwgKmxlbikgIT0gMCkgeworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgRUJUX1NPX0dFVF9FTlRSSUVTOgorCWNhc2UgRUJUX1NPX0dFVF9JTklUX0VOVFJJRVM6CisJCS8qCisJCSAqIHRyeSByZWFsIGhhbmRsZXIgZmlyc3QgaW4gY2FzZSBvZiB1c2VybGFuZC1zaWRlIHBhZGRpbmcuCisJCSAqIGluIGNhc2Ugd2UgYXJlIGRlYWxpbmcgd2l0aCBhbiAnb3JkaW5hcnknIDMyIGJpdCBiaW5hcnkKKwkJICogd2l0aG91dCA2NGJpdCBjb21wYXRpYmlsaXR5IHBhZGRpbmcsIHRoaXMgd2lsbCBmYWlsIHJpZ2h0CisJCSAqIGFmdGVyIGNvcHlfZnJvbV91c2VyIHdoZW4gdGhlICpsZW4gYXJndW1lbnQgaXMgdmFsaWRhdGVkLgorCQkgKgorCQkgKiB0aGUgY29tcGF0XyB2YXJpYW50IG5lZWRzIHRvIGRvIG9uZSBwYXNzIG92ZXIgdGhlIGtlcm5lbAorCQkgKiBkYXRhIHNldCB0byBhZGp1c3QgZm9yIHNpemUgZGlmZmVyZW5jZXMgYmVmb3JlIGl0IHRoZSBjaGVjay4KKwkJICovCisJCWlmIChjb3B5X2V2ZXJ5dGhpbmdfdG9fdXNlcih0LCB1c2VyLCBsZW4sIGNtZCkgPT0gMCkKKwkJCXJldCA9IDA7CisJCWVsc2UKKwkJCXJldCA9IGNvbXBhdF9jb3B5X2V2ZXJ5dGhpbmdfdG9fdXNlcih0LCB1c2VyLCBsZW4sIGNtZCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJfQorIG91dDoKKwl4dF9jb21wYXRfZmx1c2hfb2Zmc2V0cyhORlBST1RPX0JSSURHRSk7CisJeHRfY29tcGF0X3VubG9jayhORlBST1RPX0JSSURHRSk7CisJbXV0ZXhfdW5sb2NrKCZlYnRfbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKwogc3RhdGljIHN0cnVjdCBuZl9zb2Nrb3B0X29wcyBlYnRfc29ja29wdHMgPQogewogCS5wZgkJPSBQRl9JTkVULAogCS5zZXRfb3B0bWluCT0gRUJUX0JBU0VfQ1RMLAogCS5zZXRfb3B0bWF4CT0gRUJUX1NPX1NFVF9NQVggKyAxLAogCS5zZXQJCT0gZG9fZWJ0X3NldF9jdGwsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfc2V0CT0gY29tcGF0X2RvX2VidF9zZXRfY3RsLAorI2VuZGlmCiAJLmdldF9vcHRtaW4JPSBFQlRfQkFTRV9DVEwsCiAJLmdldF9vcHRtYXgJPSBFQlRfU09fR0VUX01BWCArIDEsCiAJLmdldAkJPSBkb19lYnRfZ2V0X2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9nZXQJPSBjb21wYXRfZG9fZWJ0X2dldF9jdGwsCisjZW5kaWYKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvY2FuL2FmX2Nhbi5jIGIvbmV0L2Nhbi9hZl9jYW4uYwppbmRleCA1MWFkYzRjLi43MDJiZTVhIDEwMDY0NAotLS0gYS9uZXQvY2FuL2FmX2Nhbi5jCisrKyBiL25ldC9jYW4vYWZfY2FuLmMKQEAgLTc3LDggKzc3LDggQEAKIG1vZHVsZV9wYXJhbShzdGF0c190aW1lciwgaW50LCBTX0lSVUdPKTsKIE1PRFVMRV9QQVJNX0RFU0Moc3RhdHNfdGltZXIsICJlbmFibGUgdGltZXIgZm9yIHN0YXRpc3RpY3MgKGRlZmF1bHQ6b24pIik7CiAKLUhMSVNUX0hFQUQoY2FuX3J4X2Rldl9saXN0KTsKLXN0YXRpYyBzdHJ1Y3QgZGV2X3Jjdl9saXN0cyBjYW5fcnhfYWxsZGV2X2xpc3Q7CisvKiByZWNlaXZlIGZpbHRlcnMgc3Vic2NyaWJlZCBmb3IgJ2FsbCcgQ0FOIGRldmljZXMgKi8KK3N0cnVjdCBkZXZfcmN2X2xpc3RzIGNhbl9yeF9hbGxkZXZfbGlzdDsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2FuX3Jjdmxpc3RzX2xvY2spOwogCiBzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKnJjdl9jYWNoZSBfX3JlYWRfbW9zdGx5OwpAQCAtMjkyLDI4ICsyOTIsMTAgQEAKIAogc3RhdGljIHN0cnVjdCBkZXZfcmN2X2xpc3RzICpmaW5kX2Rldl9yY3ZfbGlzdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgZGV2X3Jjdl9saXN0cyAqZCA9IE5VTEw7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm47Ci0KLQkvKgotCSAqIGZpbmQgcmVjZWl2ZSBsaXN0IGZvciB0aGlzIGRldmljZQotCSAqCi0JICogVGhlIGhsaXN0X2Zvcl9lYWNoX2VudHJ5KigpIG1hY3JvcyBjdXJzZSB0aHJvdWdoIHRoZSBsaXN0Ci0JICogdXNpbmcgdGhlIHBvaW50ZXIgdmFyaWFibGUgbiBhbmQgc2V0IGQgdG8gdGhlIGNvbnRhaW5pbmcKLQkgKiBzdHJ1Y3QgaW4gZWFjaCBsaXN0IGl0ZXJhdGlvbi4gIFRoZXJlZm9yZSwgYWZ0ZXIgbGlzdAotCSAqIGl0ZXJhdGlvbiwgZCBpcyB1bm1vZGlmaWVkIHdoZW4gdGhlIGxpc3QgaXMgZW1wdHksIGFuZCBpdAotCSAqIHBvaW50cyB0byBsYXN0IGxpc3QgZWxlbWVudCwgd2hlbiB0aGUgbGlzdCBpcyBub24tZW1wdHkKLQkgKiBidXQgbm8gbWF0Y2ggaW4gdGhlIGxvb3AgYm9keSBpcyBmb3VuZC4gIEkuZS4gZCBpcyAqbm90KgotCSAqIE5VTEwgd2hlbiBubyBtYXRjaCBpcyBmb3VuZC4gIFdlIGNhbiwgaG93ZXZlciwgdXNlIHRoZQotCSAqIGN1cnNvciB2YXJpYWJsZSBuIHRvIGRlY2lkZSBpZiBhIG1hdGNoIHdhcyBmb3VuZC4KLQkgKi8KLQotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkLCBuLCAmY2FuX3J4X2Rldl9saXN0LCBsaXN0KSB7Ci0JCWlmIChkLT5kZXYgPT0gZGV2KQotCQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIG4gPyBkIDogTlVMTDsKKwlpZiAoIWRldikKKwkJcmV0dXJuICZjYW5fcnhfYWxsZGV2X2xpc3Q7CisJZWxzZQorCQlyZXR1cm4gKHN0cnVjdCBkZXZfcmN2X2xpc3RzICopZGV2LT5tbF9wcml2OwogfQogCiAvKioKQEAgLTQzMyw2ICs0MTUsOSBAQAogCiAJLyogaW5zZXJ0IG5ldyByZWNlaXZlciAgKGRldixjYW5pZCxtYXNrKSAtPiAoZnVuYyxkYXRhKSAqLwogCisJaWYgKGRldiAmJiBkZXYtPnR5cGUgIT0gQVJQSFJEX0NBTikKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlyID0ga21lbV9jYWNoZV9hbGxvYyhyY3ZfY2FjaGUsIEdGUF9LRVJORUwpOwogCWlmICghcikKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC00NjgsMTYgKzQ1Myw2IEBACiBFWFBPUlRfU1lNQk9MKGNhbl9yeF9yZWdpc3Rlcik7CiAKIC8qCi0gKiBjYW5fcnhfZGVsZXRlX2RldmljZSAtIHJjdSBjYWxsYmFjayBmb3IgZGV2X3Jjdl9saXN0cyBzdHJ1Y3R1cmUgcmVtb3ZhbAotICovCi1zdGF0aWMgdm9pZCBjYW5fcnhfZGVsZXRlX2RldmljZShzdHJ1Y3QgcmN1X2hlYWQgKnJwKQotewotCXN0cnVjdCBkZXZfcmN2X2xpc3RzICpkID0gY29udGFpbmVyX29mKHJwLCBzdHJ1Y3QgZGV2X3Jjdl9saXN0cywgcmN1KTsKLQotCWtmcmVlKGQpOwotfQotCi0vKgogICogY2FuX3J4X2RlbGV0ZV9yZWNlaXZlciAtIHJjdSBjYWxsYmFjayBmb3Igc2luZ2xlIHJlY2VpdmVyIGVudHJ5IHJlbW92YWwKICAqLwogc3RhdGljIHZvaWQgY2FuX3J4X2RlbGV0ZV9yZWNlaXZlcihzdHJ1Y3QgcmN1X2hlYWQgKnJwKQpAQCAtNTA2LDYgKzQ4MSw5IEBACiAJc3RydWN0IGhsaXN0X25vZGUgKm5leHQ7CiAJc3RydWN0IGRldl9yY3ZfbGlzdHMgKmQ7CiAKKwlpZiAoZGV2ICYmIGRldi0+dHlwZSAhPSBBUlBIUkRfQ0FOKQorCQlyZXR1cm47CisKIAlzcGluX2xvY2soJmNhbl9yY3ZsaXN0c19sb2NrKTsKIAogCWQgPSBmaW5kX2Rldl9yY3ZfbGlzdHMoZGV2KTsKQEAgLTU0MSw3ICs1MTksNiBAQAogCQkgICAgICAgImRldiAlcywgaWQgJTAzWCwgbWFzayAlMDNYXG4iLAogCQkgICAgICAgRE5BTUUoZGV2KSwgY2FuX2lkLCBtYXNrKTsKIAkJciA9IE5VTEw7Ci0JCWQgPSBOVUxMOwogCQlnb3RvIG91dDsKIAl9CiAKQEAgLTU1MiwxMCArNTI5LDEwIEBACiAJCWNhbl9wc3RhdHMucmN2X2VudHJpZXMtLTsKIAogCS8qIHJlbW92ZSBkZXZpY2Ugc3RydWN0dXJlIHJlcXVlc3RlZCBieSBORVRERVZfVU5SRUdJU1RFUiAqLwotCWlmIChkLT5yZW1vdmVfb25femVyb19lbnRyaWVzICYmICFkLT5lbnRyaWVzKQotCQlobGlzdF9kZWxfcmN1KCZkLT5saXN0KTsKLQllbHNlCi0JCWQgPSBOVUxMOworCWlmIChkLT5yZW1vdmVfb25femVyb19lbnRyaWVzICYmICFkLT5lbnRyaWVzKSB7CisJCWtmcmVlKGQpOworCQlkZXYtPm1sX3ByaXYgPSBOVUxMOworCX0KIAogIG91dDoKIAlzcGluX3VubG9jaygmY2FuX3Jjdmxpc3RzX2xvY2spOwpAQCAtNTYzLDEwICs1NDAsNiBAQAogCS8qIHNjaGVkdWxlIHRoZSByZWNlaXZlciBpdGVtIGZvciBkZWxldGlvbiAqLwogCWlmIChyKQogCQljYWxsX3JjdSgmci0+cmN1LCBjYW5fcnhfZGVsZXRlX3JlY2VpdmVyKTsKLQotCS8qIHNjaGVkdWxlIHRoZSBkZXZpY2Ugc3RydWN0dXJlIGZvciBkZWxldGlvbiAqLwotCWlmIChkKQotCQljYWxsX3JjdSgmZC0+cmN1LCBjYW5fcnhfZGVsZXRlX2RldmljZSk7CiB9CiBFWFBPUlRfU1lNQk9MKGNhbl9yeF91bnJlZ2lzdGVyKTsKIApAQCAtNzgwLDQ4ICs3NTMsMzUgQEAKIAogCWNhc2UgTkVUREVWX1JFR0lTVEVSOgogCi0JCS8qCi0JCSAqIGNyZWF0ZSBuZXcgZGV2X3Jjdl9saXN0cyBmb3IgdGhpcyBkZXZpY2UKLQkJICoKLQkJICogTi5CLiB6ZXJvaW5nIHRoZSBzdHJ1Y3QgaXMgdGhlIGNvcnJlY3QgaW5pdGlhbGl6YXRpb24KLQkJICogZm9yIHRoZSBlbWJlZGRlZCBobGlzdF9oZWFkIHN0cnVjdHMuCi0JCSAqIEFub3RoZXIgbGlzdCB0eXBlLCBlLmcuIGxpc3RfaGVhZCwgd291bGQgcmVxdWlyZQotCQkgKiBleHBsaWNpdCBpbml0aWFsaXphdGlvbi4KLQkJICovCi0KKwkJLyogY3JlYXRlIG5ldyBkZXZfcmN2X2xpc3RzIGZvciB0aGlzIGRldmljZSAqLwogCQlkID0ga3phbGxvYyhzaXplb2YoKmQpLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFkKSB7CiAJCQlwcmludGsoS0VSTl9FUlIKIAkJCSAgICAgICAiY2FuOiBhbGxvY2F0aW9uIG9mIHJlY2VpdmUgbGlzdCBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIE5PVElGWV9ET05FOwogCQl9Ci0JCWQtPmRldiA9IGRldjsKLQotCQlzcGluX2xvY2soJmNhbl9yY3ZsaXN0c19sb2NrKTsKLQkJaGxpc3RfYWRkX2hlYWRfcmN1KCZkLT5saXN0LCAmY2FuX3J4X2Rldl9saXN0KTsKLQkJc3Bpbl91bmxvY2soJmNhbl9yY3ZsaXN0c19sb2NrKTsKKwkJQlVHX09OKGRldi0+bWxfcHJpdik7CisJCWRldi0+bWxfcHJpdiA9IGQ7CiAKIAkJYnJlYWs7CiAKIAljYXNlIE5FVERFVl9VTlJFR0lTVEVSOgogCQlzcGluX2xvY2soJmNhbl9yY3ZsaXN0c19sb2NrKTsKIAotCQlkID0gZmluZF9kZXZfcmN2X2xpc3RzKGRldik7CisJCWQgPSBkZXYtPm1sX3ByaXY7CiAJCWlmIChkKSB7Ci0JCQlpZiAoZC0+ZW50cmllcykgeworCQkJaWYgKGQtPmVudHJpZXMpCiAJCQkJZC0+cmVtb3ZlX29uX3plcm9fZW50cmllcyA9IDE7Ci0JCQkJZCA9IE5VTEw7Ci0JCQl9IGVsc2UKLQkJCQlobGlzdF9kZWxfcmN1KCZkLT5saXN0KTsKKwkJCWVsc2UgeworCQkJCWtmcmVlKGQpOworCQkJCWRldi0+bWxfcHJpdiA9IE5VTEw7CisJCQl9CiAJCX0gZWxzZQogCQkJcHJpbnRrKEtFUk5fRVJSICJjYW46IG5vdGlmaWVyOiByZWNlaXZlIGxpc3Qgbm90ICIKIAkJCSAgICAgICAiZm91bmQgZm9yIGRldiAlc1xuIiwgZGV2LT5uYW1lKTsKIAogCQlzcGluX3VubG9jaygmY2FuX3Jjdmxpc3RzX2xvY2spOwogCi0JCWlmIChkKQotCQkJY2FsbF9yY3UoJmQtPnJjdSwgY2FuX3J4X2RlbGV0ZV9kZXZpY2UpOwotCiAJCWJyZWFrOwogCX0KIApAQCAtODUzLDIxICs4MTMsMTMgQEAKIHsKIAlwcmludGsoYmFubmVyKTsKIAorCW1lbXNldCgmY2FuX3J4X2FsbGRldl9saXN0LCAwLCBzaXplb2YoY2FuX3J4X2FsbGRldl9saXN0KSk7CisKIAlyY3ZfY2FjaGUgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiY2FuX3JlY2VpdmVyIiwgc2l6ZW9mKHN0cnVjdCByZWNlaXZlciksCiAJCQkJICAgICAgMCwgMCwgTlVMTCk7CiAJaWYgKCFyY3ZfY2FjaGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JLyoKLQkgKiBJbnNlcnQgY2FuX3J4X2FsbGRldl9saXN0IGZvciByZWNlcHRpb24gb24gYWxsIGRldmljZXMuCi0JICogVGhpcyBzdHJ1Y3QgaXMgemVybyBpbml0aWFsaXplZCB3aGljaCBpcyBjb3JyZWN0IGZvciB0aGUKLQkgKiBlbWJlZGRlZCBobGlzdCBoZWFkcywgdGhlIGRldiBwb2ludGVyLCBhbmQgdGhlIGVudHJpZXMgY291bnRlci4KLQkgKi8KLQotCXNwaW5fbG9jaygmY2FuX3Jjdmxpc3RzX2xvY2spOwotCWhsaXN0X2FkZF9oZWFkX3JjdSgmY2FuX3J4X2FsbGRldl9saXN0Lmxpc3QsICZjYW5fcnhfZGV2X2xpc3QpOwotCXNwaW5fdW5sb2NrKCZjYW5fcmN2bGlzdHNfbG9jayk7Ci0KIAlpZiAoc3RhdHNfdGltZXIpIHsKIAkJLyogdGhlIHN0YXRpc3RpY3MgYXJlIHVwZGF0ZWQgZXZlcnkgc2Vjb25kICh0aW1lciB0cmlnZ2VyZWQpICovCiAJCXNldHVwX3RpbWVyKCZjYW5fc3RhdHRpbWVyLCBjYW5fc3RhdF91cGRhdGUsIDApOwpAQCAtODg3LDggKzgzOSw3IEBACiAKIHN0YXRpYyBfX2V4aXQgdm9pZCBjYW5fZXhpdCh2b2lkKQogewotCXN0cnVjdCBkZXZfcmN2X2xpc3RzICpkOwotCXN0cnVjdCBobGlzdF9ub2RlICpuLCAqbmV4dDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCiAJaWYgKHN0YXRzX3RpbWVyKQogCQlkZWxfdGltZXIoJmNhbl9zdGF0dGltZXIpOwpAQCAtOTAwLDE0ICs4NTEsMTkgQEAKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmY2FuX25ldGRldl9ub3RpZmllcik7CiAJc29ja191bnJlZ2lzdGVyKFBGX0NBTik7CiAKLQkvKiByZW1vdmUgY2FuX3J4X2Rldl9saXN0ICovCi0Jc3Bpbl9sb2NrKCZjYW5fcmN2bGlzdHNfbG9jayk7Ci0JaGxpc3RfZGVsKCZjYW5fcnhfYWxsZGV2X2xpc3QubGlzdCk7Ci0JaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkLCBuLCBuZXh0LCAmY2FuX3J4X2Rldl9saXN0LCBsaXN0KSB7Ci0JCWhsaXN0X2RlbCgmZC0+bGlzdCk7Ci0JCWtmcmVlKGQpOworCS8qIHJlbW92ZSBjcmVhdGVkIGRldl9yY3ZfbGlzdHMgZnJvbSBzdGlsbCByZWdpc3RlcmVkIENBTiBkZXZpY2VzICovCisJcmN1X3JlYWRfbG9jaygpOworCWZvcl9lYWNoX25ldGRldl9yY3UoJmluaXRfbmV0LCBkZXYpIHsKKwkJaWYgKGRldi0+dHlwZSA9PSBBUlBIUkRfQ0FOICYmIGRldi0+bWxfcHJpdil7CisKKwkJCXN0cnVjdCBkZXZfcmN2X2xpc3RzICpkID0gZGV2LT5tbF9wcml2OworCisJCQlCVUdfT04oZC0+ZW50cmllcyk7CisJCQlrZnJlZShkKTsKKwkJCWRldi0+bWxfcHJpdiA9IE5VTEw7CisJCX0KIAl9Ci0Jc3Bpbl91bmxvY2soJmNhbl9yY3ZsaXN0c19sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJjdV9iYXJyaWVyKCk7IC8qIFdhaXQgZm9yIGNvbXBsZXRpb24gb2YgY2FsbF9yY3UoKSdzICovCiAKZGlmZiAtLWdpdCBhL25ldC9jYW4vYWZfY2FuLmggYi9uZXQvY2FuL2FmX2Nhbi5oCmluZGV4IDE4ZjkxZTMuLjM0MjUzYjggMTAwNjQ0Ci0tLSBhL25ldC9jYW4vYWZfY2FuLmgKKysrIGIvbmV0L2Nhbi9hZl9jYW4uaApAQCAtNjMsMTAgKzYzLDggQEAKIAogZW51bSB7IFJYX0VSUiwgUlhfQUxMLCBSWF9GSUwsIFJYX0lOViwgUlhfRUZGLCBSWF9NQVggfTsKIAorLyogcGVyIGRldmljZSByZWNlaXZlIGZpbHRlcnMgbGlua2VkIGF0IGRldi0+bWxfcHJpdiAqLwogc3RydWN0IGRldl9yY3ZfbGlzdHMgewotCXN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7Ci0Jc3RydWN0IHJjdV9oZWFkIHJjdTsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBobGlzdF9oZWFkIHJ4W1JYX01BWF07CiAJc3RydWN0IGhsaXN0X2hlYWQgcnhfc2ZmWzB4ODAwXTsKIAlpbnQgcmVtb3ZlX29uX3plcm9fZW50cmllczsKZGlmZiAtLWdpdCBhL25ldC9jYW4vcHJvYy5jIGIvbmV0L2Nhbi9wcm9jLmMKaW5kZXggOWI5YWQyOS4uZjQyNjVjYyAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9wcm9jLmMKKysrIGIvbmV0L2Nhbi9wcm9jLmMKQEAgLTQ1LDYgKzQ1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CiAjaW5jbHVkZSA8bGludXgvY2FuL2NvcmUuaD4KIAogI2luY2x1ZGUgImFmX2Nhbi5oIgpAQCAtODQsNiArODUsOSBAQAogCVtSWF9FRkZdID0gInJ4X2VmZiIsCiB9OwogCisvKiByZWNlaXZlIGZpbHRlcnMgc3Vic2NyaWJlZCBmb3IgJ2FsbCcgQ0FOIGRldmljZXMgKi8KK2V4dGVybiBzdHJ1Y3QgZGV2X3Jjdl9saXN0cyBjYW5fcnhfYWxsZGV2X2xpc3Q7CisKIC8qCiAgKiBhZl9jYW4gc3RhdGlzdGljcyBzdHVmZgogICovCkBAIC0xOTAsMTAgKzE5NCw2IEBACiAKIC8qCiAgKiBwcm9jIHJlYWQgZnVuY3Rpb25zCi0gKgotICogRnJvbSBrbm93biB1c2UtY2FzZXMgd2UgZXhwZWN0IGFib3V0IDEwIGVudHJpZXMgaW4gYSByZWNlaXZlIGxpc3QgdG8gYmUKLSAqIHByaW50ZWQgaW4gdGhlIHByb2NfZnMuIFNvIFBBR0VfU0laRSBpcyBkZWZpbml0ZWx5IGVub3VnaCBzcGFjZSBoZXJlLgotICoKICAqLwogCiBzdGF0aWMgdm9pZCBjYW5fcHJpbnRfcmN2bGlzdChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBobGlzdF9oZWFkICpyeF9saXN0LApAQCAtMjAyLDcgKzIwMiw2IEBACiAJc3RydWN0IHJlY2VpdmVyICpyOwogCXN0cnVjdCBobGlzdF9ub2RlICpuOwogCi0JcmN1X3JlYWRfbG9jaygpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyLCBuLCByeF9saXN0LCBsaXN0KSB7CiAJCWNoYXIgKmZtdCA9IChyLT5jYW5faWQgJiBDQU5fRUZGX0ZMQUcpPwogCQkJIiAgICUtNXMgICUwOFggICUwOHggICUwOHggICUwOHggICU4bGQgICVzXG4iIDoKQEAgLTIxMiw3ICsyMTEsNiBAQAogCQkJCSh1bnNpZ25lZCBsb25nKXItPmZ1bmMsICh1bnNpZ25lZCBsb25nKXItPmRhdGEsCiAJCQkJci0+bWF0Y2hlcywgci0+aWRlbnQpOwogCX0KLQlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogc3RhdGljIHZvaWQgY2FuX3ByaW50X3JlY3ZfYmFubmVyKHN0cnVjdCBzZXFfZmlsZSAqbSkKQEAgLTM0NiwyNCArMzQ0LDM5IEBACiAJLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKIH07CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjYW5fcmN2bGlzdF9wcm9jX3Nob3dfb25lKHN0cnVjdCBzZXFfZmlsZSAqbSwgaW50IGlkeCwKKwkJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICAgIHN0cnVjdCBkZXZfcmN2X2xpc3RzICpkKQoreworCWlmICghaGxpc3RfZW1wdHkoJmQtPnJ4W2lkeF0pKSB7CisJCWNhbl9wcmludF9yZWN2X2Jhbm5lcihtKTsKKwkJY2FuX3ByaW50X3Jjdmxpc3QobSwgJmQtPnJ4W2lkeF0sIGRldik7CisJfSBlbHNlCisJCXNlcV9wcmludGYobSwgIiAgKCVzOiBubyBlbnRyeSlcbiIsIEROQU1FKGRldikpOworCit9CisKIHN0YXRpYyBpbnQgY2FuX3Jjdmxpc3RfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAkvKiBkb3VibGUgY2FzdCB0byBwcmV2ZW50IEdDQyB3YXJuaW5nICovCiAJaW50IGlkeCA9IChpbnQpKGxvbmcpbS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBkZXZfcmN2X2xpc3RzICpkOwotCXN0cnVjdCBobGlzdF9ub2RlICpuOwogCiAJc2VxX3ByaW50ZihtLCAiXG5yZWNlaXZlIGxpc3QgJyVzJzpcbiIsIHJ4X2xpc3RfbmFtZVtpZHhdKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZCwgbiwgJmNhbl9yeF9kZXZfbGlzdCwgbGlzdCkgewogCi0JCWlmICghaGxpc3RfZW1wdHkoJmQtPnJ4W2lkeF0pKSB7Ci0JCQljYW5fcHJpbnRfcmVjdl9iYW5uZXIobSk7Ci0JCQljYW5fcHJpbnRfcmN2bGlzdChtLCAmZC0+cnhbaWR4XSwgZC0+ZGV2KTsKLQkJfSBlbHNlCi0JCQlzZXFfcHJpbnRmKG0sICIgICglczogbm8gZW50cnkpXG4iLCBETkFNRShkLT5kZXYpKTsKKwkvKiByZWNlaXZlIGxpc3QgZm9yICdhbGwnIENBTiBkZXZpY2VzIChkZXYgPT0gTlVMTCkgKi8KKwlkID0gJmNhbl9yeF9hbGxkZXZfbGlzdDsKKwljYW5fcmN2bGlzdF9wcm9jX3Nob3dfb25lKG0sIGlkeCwgTlVMTCwgZCk7CisKKwkvKiByZWNlaXZlIGxpc3QgZm9yIHJlZ2lzdGVyZWQgQ0FOIGRldmljZXMgKi8KKwlmb3JfZWFjaF9uZXRkZXZfcmN1KCZpbml0X25ldCwgZGV2KSB7CisJCWlmIChkZXYtPnR5cGUgPT0gQVJQSFJEX0NBTiAmJiBkZXYtPm1sX3ByaXYpCisJCQljYW5fcmN2bGlzdF9wcm9jX3Nob3dfb25lKG0sIGlkeCwgZGV2LCBkZXYtPm1sX3ByaXYpOwogCX0KKwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJc2VxX3B1dGMobSwgJ1xuJyk7CkBAIC0zODMsMzQgKzM5Niw1MCBAQAogCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCiB9OwogCitzdGF0aWMgaW5saW5lIHZvaWQgY2FuX3Jjdmxpc3Rfc2ZmX3Byb2Nfc2hvd19vbmUoc3RydWN0IHNlcV9maWxlICptLAorCQkJCQkJIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCQkgc3RydWN0IGRldl9yY3ZfbGlzdHMgKmQpCit7CisJaW50IGk7CisJaW50IGFsbF9lbXB0eSA9IDE7CisKKwkvKiBjaGVjayB3ZXRoZXIgYXQgbGVhc3Qgb25lIGxpc3QgaXMgbm9uLWVtcHR5ICovCisJZm9yIChpID0gMDsgaSA8IDB4ODAwOyBpKyspCisJCWlmICghaGxpc3RfZW1wdHkoJmQtPnJ4X3NmZltpXSkpIHsKKwkJCWFsbF9lbXB0eSA9IDA7CisJCQlicmVhazsKKwkJfQorCisJaWYgKCFhbGxfZW1wdHkpIHsKKwkJY2FuX3ByaW50X3JlY3ZfYmFubmVyKG0pOworCQlmb3IgKGkgPSAwOyBpIDwgMHg4MDA7IGkrKykgeworCQkJaWYgKCFobGlzdF9lbXB0eSgmZC0+cnhfc2ZmW2ldKSkKKwkJCQljYW5fcHJpbnRfcmN2bGlzdChtLCAmZC0+cnhfc2ZmW2ldLCBkZXYpOworCQl9CisJfSBlbHNlCisJCXNlcV9wcmludGYobSwgIiAgKCVzOiBubyBlbnRyeSlcbiIsIEROQU1FKGRldikpOworfQorCiBzdGF0aWMgaW50IGNhbl9yY3ZsaXN0X3NmZl9wcm9jX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogeworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJc3RydWN0IGRldl9yY3ZfbGlzdHMgKmQ7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm47CiAKIAkvKiBSWF9TRkYgKi8KIAlzZXFfcHV0cyhtLCAiXG5yZWNlaXZlIGxpc3QgJ3J4X3NmZic6XG4iKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZCwgbiwgJmNhbl9yeF9kZXZfbGlzdCwgbGlzdCkgewotCQlpbnQgaSwgYWxsX2VtcHR5ID0gMTsKLQkJLyogY2hlY2sgd2V0aGVyIGF0IGxlYXN0IG9uZSBsaXN0IGlzIG5vbi1lbXB0eSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgMHg4MDA7IGkrKykKLQkJCWlmICghaGxpc3RfZW1wdHkoJmQtPnJ4X3NmZltpXSkpIHsKLQkJCQlhbGxfZW1wdHkgPSAwOwotCQkJCWJyZWFrOwotCQkJfQogCi0JCWlmICghYWxsX2VtcHR5KSB7Ci0JCQljYW5fcHJpbnRfcmVjdl9iYW5uZXIobSk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgMHg4MDA7IGkrKykgewotCQkJCWlmICghaGxpc3RfZW1wdHkoJmQtPnJ4X3NmZltpXSkpCi0JCQkJCWNhbl9wcmludF9yY3ZsaXN0KG0sICZkLT5yeF9zZmZbaV0sCi0JCQkJCQkJICBkLT5kZXYpOwotCQkJfQotCQl9IGVsc2UKLQkJCXNlcV9wcmludGYobSwgIiAgKCVzOiBubyBlbnRyeSlcbiIsIEROQU1FKGQtPmRldikpOworCS8qIHNmZiByZWNlaXZlIGxpc3QgZm9yICdhbGwnIENBTiBkZXZpY2VzIChkZXYgPT0gTlVMTCkgKi8KKwlkID0gJmNhbl9yeF9hbGxkZXZfbGlzdDsKKwljYW5fcmN2bGlzdF9zZmZfcHJvY19zaG93X29uZShtLCBOVUxMLCBkKTsKKworCS8qIHNmZiByZWNlaXZlIGxpc3QgZm9yIHJlZ2lzdGVyZWQgQ0FOIGRldmljZXMgKi8KKwlmb3JfZWFjaF9uZXRkZXZfcmN1KCZpbml0X25ldCwgZGV2KSB7CisJCWlmIChkZXYtPnR5cGUgPT0gQVJQSFJEX0NBTiAmJiBkZXYtPm1sX3ByaXYpCisJCQljYW5fcmN2bGlzdF9zZmZfcHJvY19zaG93X29uZShtLCBkZXYsIGRldi0+bWxfcHJpdik7CiAJfQorCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlzZXFfcHV0YyhtLCAnXG4nKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggYmIxZjFkYS4uYmNjNDkwYyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTExMTMsMTkgKzExMTMsNyBAQAogfQogRVhQT1JUX1NZTUJPTChkZXZfbG9hZCk7CiAKLS8qKgotICoJZGV2X29wZW4JLSBwcmVwYXJlIGFuIGludGVyZmFjZSBmb3IgdXNlLgotICoJQGRldjoJZGV2aWNlIHRvIG9wZW4KLSAqCi0gKglUYWtlcyBhIGRldmljZSBmcm9tIGRvd24gdG8gdXAgc3RhdGUuIFRoZSBkZXZpY2UncyBwcml2YXRlIG9wZW4KLSAqCWZ1bmN0aW9uIGlzIGludm9rZWQgYW5kIHRoZW4gdGhlIG11bHRpY2FzdCBsaXN0cyBhcmUgbG9hZGVkLiBGaW5hbGx5Ci0gKgl0aGUgZGV2aWNlIGlzIG1vdmVkIGludG8gdGhlIHVwIHN0YXRlIGFuZCBhICVORVRERVZfVVAgbWVzc2FnZSBpcwotICoJc2VudCB0byB0aGUgbmV0ZGV2IG5vdGlmaWVyIGNoYWluLgotICoKLSAqCUNhbGxpbmcgdGhpcyBmdW5jdGlvbiBvbiBhbiBhY3RpdmUgaW50ZXJmYWNlIGlzIGEgbm9wLiBPbiBhIGZhaWx1cmUKLSAqCWEgbmVnYXRpdmUgZXJybm8gY29kZSBpcyByZXR1cm5lZC4KLSAqLwotaW50IGRldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IF9fZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi0+bmV0ZGV2X29wczsKIAlpbnQgcmV0OwpAQCAtMTEzMywxMyArMTEyMSw2IEBACiAJQVNTRVJUX1JUTkwoKTsKIAogCS8qCi0JICoJSXMgaXQgYWxyZWFkeSB1cD8KLQkgKi8KLQotCWlmIChkZXYtPmZsYWdzICYgSUZGX1VQKQotCQlyZXR1cm4gMDsKLQotCS8qCiAJICoJSXMgaXQgZXZlbiBwcmVzZW50PwogCSAqLwogCWlmICghbmV0aWZfZGV2aWNlX3ByZXNlbnQoZGV2KSkKQEAgLTExODcsMzYgKzExNjgsNTcgQEAKIAkJICoJV2FrZXVwIHRyYW5zbWl0IHF1ZXVlIGVuZ2luZQogCQkgKi8KIAkJZGV2X2FjdGl2YXRlKGRldik7Ci0KLQkJLyoKLQkJICoJLi4uIGFuZCBhbm5vdW5jZSBuZXcgaW50ZXJmYWNlLgotCQkgKi8KLQkJY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9VUCwgZGV2KTsKIAl9CiAKIAlyZXR1cm4gcmV0OwogfQorCisvKioKKyAqCWRldl9vcGVuCS0gcHJlcGFyZSBhbiBpbnRlcmZhY2UgZm9yIHVzZS4KKyAqCUBkZXY6CWRldmljZSB0byBvcGVuCisgKgorICoJVGFrZXMgYSBkZXZpY2UgZnJvbSBkb3duIHRvIHVwIHN0YXRlLiBUaGUgZGV2aWNlJ3MgcHJpdmF0ZSBvcGVuCisgKglmdW5jdGlvbiBpcyBpbnZva2VkIGFuZCB0aGVuIHRoZSBtdWx0aWNhc3QgbGlzdHMgYXJlIGxvYWRlZC4gRmluYWxseQorICoJdGhlIGRldmljZSBpcyBtb3ZlZCBpbnRvIHRoZSB1cCBzdGF0ZSBhbmQgYSAlTkVUREVWX1VQIG1lc3NhZ2UgaXMKKyAqCXNlbnQgdG8gdGhlIG5ldGRldiBub3RpZmllciBjaGFpbi4KKyAqCisgKglDYWxsaW5nIHRoaXMgZnVuY3Rpb24gb24gYW4gYWN0aXZlIGludGVyZmFjZSBpcyBhIG5vcC4gT24gYSBmYWlsdXJlCisgKglhIG5lZ2F0aXZlIGVycm5vIGNvZGUgaXMgcmV0dXJuZWQuCisgKi8KK2ludCBkZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwkvKgorCSAqCUlzIGl0IGFscmVhZHkgdXA/CisJICovCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApCisJCXJldHVybiAwOworCisJLyoKKwkgKglPcGVuIGRldmljZQorCSAqLworCXJldCA9IF9fZGV2X29wZW4oZGV2KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8qCisJICoJLi4uIGFuZCBhbm5vdW5jZSBuZXcgaW50ZXJmYWNlLgorCSAqLworCXJ0bXNnX2lmaW5mbyhSVE1fTkVXTElOSywgZGV2LCBJRkZfVVB8SUZGX1JVTk5JTkcpOworCWNhbGxfbmV0ZGV2aWNlX25vdGlmaWVycyhORVRERVZfVVAsIGRldik7CisKKwlyZXR1cm4gcmV0OworfQogRVhQT1JUX1NZTUJPTChkZXZfb3Blbik7CiAKLS8qKgotICoJZGV2X2Nsb3NlIC0gc2h1dGRvd24gYW4gaW50ZXJmYWNlLgotICoJQGRldjogZGV2aWNlIHRvIHNodXRkb3duCi0gKgotICoJVGhpcyBmdW5jdGlvbiBtb3ZlcyBhbiBhY3RpdmUgZGV2aWNlIGludG8gZG93biBzdGF0ZS4gQQotICoJJU5FVERFVl9HT0lOR19ET1dOIGlzIHNlbnQgdG8gdGhlIG5ldGRldiBub3RpZmllciBjaGFpbi4gVGhlIGRldmljZQotICoJaXMgdGhlbiBkZWFjdGl2YXRlZCBhbmQgZmluYWxseSBhICVORVRERVZfRE9XTiBpcyBzZW50IHRvIHRoZSBub3RpZmllcgotICoJY2hhaW4uCi0gKi8KLWludCBkZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgKm9wcyA9IGRldi0+bmV0ZGV2X29wczsKKwogCUFTU0VSVF9SVE5MKCk7Ci0KIAltaWdodF9zbGVlcCgpOwogCi0JaWYgKCEoZGV2LT5mbGFncyAmIElGRl9VUCkpCi0JCXJldHVybiAwOwotCiAJLyoKIAkgKglUZWxsIHBlb3BsZSB3ZSBhcmUgZ29pbmcgZG93biwgc28gdGhhdCB0aGV5IGNhbgogCSAqCXByZXBhcmUgdG8gZGVhdGgsIHdoZW4gZGV2aWNlIGlzIHN0aWxsIG9wZXJhdGluZy4KQEAgLTEyNTIsMTcgKzEyNTQsMzcgQEAKIAlkZXYtPmZsYWdzICY9IH5JRkZfVVA7CiAKIAkvKgotCSAqIFRlbGwgcGVvcGxlIHdlIGFyZSBkb3duCi0JICovCi0JY2FsbF9uZXRkZXZpY2Vfbm90aWZpZXJzKE5FVERFVl9ET1dOLCBkZXYpOwotCi0JLyoKIAkgKglTaHV0ZG93biBORVRfRE1BCiAJICovCiAJbmV0X2RtYWVuZ2luZV9wdXQoKTsKIAogCXJldHVybiAwOwogfQorCisvKioKKyAqCWRldl9jbG9zZSAtIHNodXRkb3duIGFuIGludGVyZmFjZS4KKyAqCUBkZXY6IGRldmljZSB0byBzaHV0ZG93bgorICoKKyAqCVRoaXMgZnVuY3Rpb24gbW92ZXMgYW4gYWN0aXZlIGRldmljZSBpbnRvIGRvd24gc3RhdGUuIEEKKyAqCSVORVRERVZfR09JTkdfRE9XTiBpcyBzZW50IHRvIHRoZSBuZXRkZXYgbm90aWZpZXIgY2hhaW4uIFRoZSBkZXZpY2UKKyAqCWlzIHRoZW4gZGVhY3RpdmF0ZWQgYW5kIGZpbmFsbHkgYSAlTkVUREVWX0RPV04gaXMgc2VudCB0byB0aGUgbm90aWZpZXIKKyAqCWNoYWluLgorICovCitpbnQgZGV2X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaWYgKCEoZGV2LT5mbGFncyAmIElGRl9VUCkpCisJCXJldHVybiAwOworCisJX19kZXZfY2xvc2UoZGV2KTsKKworCS8qCisJICogVGVsbCBwZW9wbGUgd2UgYXJlIGRvd24KKwkgKi8KKwlydG1zZ19pZmluZm8oUlRNX05FV0xJTkssIGRldiwgSUZGX1VQfElGRl9SVU5OSU5HKTsKKwljYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0RPV04sIGRldik7CisKKwlyZXR1cm4gMDsKK30KIEVYUE9SVF9TWU1CT0woZGV2X2Nsb3NlKTsKIAogCkBAIC0xNDQ4LDEzICsxNDcwLDEwIEBACiAJaWYgKHNrYi0+bGVuID4gKGRldi0+bXR1ICsgZGV2LT5oYXJkX2hlYWRlcl9sZW4pKQogCQlyZXR1cm4gTkVUX1JYX0RST1A7CiAKLQlza2JfZHN0X2Ryb3Aoc2tiKTsKKwlza2Jfc2V0X2Rldihza2IsIGRldik7CiAJc2tiLT50c3RhbXAudHY2NCA9IDA7CiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwogCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0Jc2tiLT5tYXJrID0gMDsKLQlzZWNwYXRoX3Jlc2V0KHNrYik7Ci0JbmZfcmVzZXQoc2tiKTsKIAlyZXR1cm4gbmV0aWZfcngoc2tiKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRldl9mb3J3YXJkX3NrYik7CkBAIC0xNjE0LDYgKzE2MzMsMzYgQEAKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qKgorICogc2tiX2Rldl9zZXQgLS0gYXNzaWduIGEgbmV3IGRldmljZSB0byBhIGJ1ZmZlcgorICogQHNrYjogYnVmZmVyIGZvciB0aGUgbmV3IGRldmljZQorICogQGRldjogbmV0d29yayBkZXZpY2UKKyAqCisgKiBJZiBhbiBza2IgaXMgb3duZWQgYnkgYSBkZXZpY2UgYWxyZWFkeSwgd2UgaGF2ZSB0byByZXNldAorICogYWxsIGRhdGEgcHJpdmF0ZSB0byB0aGUgbmFtZXNwYWNlIGEgZGV2aWNlIGJlbG9uZ3MgdG8KKyAqIGJlZm9yZSBhc3NpZ25pbmcgaXQgYSBuZXcgZGV2aWNlLgorICovCisjaWZkZWYgQ09ORklHX05FVF9OUwordm9pZCBza2Jfc2V0X2RldihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXNrYl9kc3RfZHJvcChza2IpOworCWlmIChza2ItPmRldiAmJiAhbmV0X2VxKGRldl9uZXQoc2tiLT5kZXYpLCBkZXZfbmV0KGRldikpKSB7CisJCXNlY3BhdGhfcmVzZXQoc2tiKTsKKwkJbmZfcmVzZXQoc2tiKTsKKwkJc2tiX2luaXRfc2VjbWFyayhza2IpOworCQlza2ItPm1hcmsgPSAwOworCQlza2ItPnByaW9yaXR5ID0gMDsKKwkJc2tiLT5uZl90cmFjZSA9IDA7CisJCXNrYi0+aXB2c19wcm9wZXJ0eSA9IDA7CisjaWZkZWYgQ09ORklHX05FVF9TQ0hFRAorCQlza2ItPnRjX2luZGV4ID0gMDsKKyNlbmRpZgorCX0KKwlza2ItPmRldiA9IGRldjsKK30KK0VYUE9SVF9TWU1CT0woc2tiX3NldF9kZXYpOworI2VuZGlmIC8qIENPTkZJR19ORVRfTlMgKi8KKwogLyoKICAqIEludmFsaWRhdGUgaGFyZHdhcmUgY2hlY2tzdW0gd2hlbiBwYWNrZXQgaXMgdG8gYmUgbWFuZ2xlZCwgYW5kCiAgKiBjb21wbGV0ZSBjaGVja3N1bSBtYW51YWxseSBvbiBvdXRnb2luZyBwYXRoLgpAQCAtMTg1Myw2ICsxOTAyLDE0IEBACiAKIAkJc2tiLT5uZXh0ID0gbnNrYi0+bmV4dDsKIAkJbnNrYi0+bmV4dCA9IE5VTEw7CisKKwkJLyoKKwkJICogSWYgZGV2aWNlIGRvZXNudCBuZWVkIG5za2ItPmRzdCwgcmVsZWFzZSBpdCByaWdodCBub3cgd2hpbGUKKwkJICogaXRzIGhvdCBpbiB0aGlzIGNwdSBjYWNoZQorCQkgKi8KKwkJaWYgKGRldi0+cHJpdl9mbGFncyAmIElGRl9YTUlUX0RTVF9SRUxFQVNFKQorCQkJc2tiX2RzdF9kcm9wKG5za2IpOworCiAJCXJjID0gb3BzLT5uZG9fc3RhcnRfeG1pdChuc2tiLCBkZXYpOwogCQlpZiAodW5saWtlbHkocmMgIT0gTkVUREVWX1RYX09LKSkgewogCQkJaWYgKHJjICYgfk5FVERFVl9UWF9NQVNLKQpAQCAtMTk3NCw2ICsyMDMxLDIxIEBACiAJcmV0dXJuIHJjOwogfQogCisvKgorICogUmV0dXJucyB0cnVlIGlmIGVpdGhlcjoKKyAqCTEuIHNrYiBoYXMgZnJhZ19saXN0IGFuZCB0aGUgZGV2aWNlIGRvZXNuJ3Qgc3VwcG9ydCBGUkFHTElTVCwgb3IKKyAqCTIuIHNrYiBpcyBmcmFnbWVudGVkIGFuZCB0aGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQgU0csIG9yIGlmCisgKgkgICBhdCBsZWFzdCBvbmUgb2YgZnJhZ21lbnRzIGlzIGluIGhpZ2htZW0gYW5kIGRldmljZSBkb2VzIG5vdAorICoJICAgc3VwcG9ydCBETUEgZnJvbSBpdC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgc2tiX25lZWRzX2xpbmVhcml6ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIChza2JfaGFzX2ZyYWdzKHNrYikgJiYgIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9GUkFHTElTVCkpIHx8CisJICAgICAgIChza2Jfc2hpbmZvKHNrYiktPm5yX2ZyYWdzICYmICghKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX1NHKSB8fAorCQkJCQkgICAgICBpbGxlZ2FsX2hpZ2hkbWEoZGV2LCBza2IpKSk7Cit9CisKIC8qKgogICoJZGV2X3F1ZXVlX3htaXQgLSB0cmFuc21pdCBhIGJ1ZmZlcgogICoJQHNrYjogYnVmZmVyIHRvIHRyYW5zbWl0CkBAIC0yMDEwLDE4ICsyMDgyLDggQEAKIAlpZiAobmV0aWZfbmVlZHNfZ3NvKGRldiwgc2tiKSkKIAkJZ290byBnc287CiAKLQlpZiAoc2tiX2hhc19mcmFncyhza2IpICYmCi0JICAgICEoZGV2LT5mZWF0dXJlcyAmIE5FVElGX0ZfRlJBR0xJU1QpICYmCi0JICAgIF9fc2tiX2xpbmVhcml6ZShza2IpKQotCQlnb3RvIG91dF9rZnJlZV9za2I7Ci0KLQkvKiBGcmFnbWVudGVkIHNrYiBpcyBsaW5lYXJpemVkIGlmIGRldmljZSBkb2VzIG5vdCBzdXBwb3J0IFNHLAotCSAqIG9yIGlmIGF0IGxlYXN0IG9uZSBvZiBmcmFnbWVudHMgaXMgaW4gaGlnaG1lbSBhbmQgZGV2aWNlCi0JICogZG9lcyBub3Qgc3VwcG9ydCBETUEgZnJvbSBpdC4KLQkgKi8KLQlpZiAoc2tiX3NoaW5mbyhza2IpLT5ucl9mcmFncyAmJgotCSAgICAoIShkZXYtPmZlYXR1cmVzICYgTkVUSUZfRl9TRykgfHwgaWxsZWdhbF9oaWdoZG1hKGRldiwgc2tiKSkgJiYKLQkgICAgX19za2JfbGluZWFyaXplKHNrYikpCisJLyogQ29udmVydCBhIHBhZ2VkIHNrYiB0byBsaW5lYXIsIGlmIHJlcXVpcmVkICovCisJaWYgKHNrYl9uZWVkc19saW5lYXJpemUoc2tiLCBkZXYpICYmIF9fc2tiX2xpbmVhcml6ZShza2IpKQogCQlnb3RvIG91dF9rZnJlZV9za2I7CiAKIAkvKiBJZiBwYWNrZXQgaXMgbm90IGNoZWNrc3VtbWVkIGFuZCBkZXZpY2UgZG9lcyBub3Qgc3VwcG9ydApAQCAtMjQyMiw2ICsyNDg0LDcgQEAKIAlzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0eXBlLCAqcHRfcHJldjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXY7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm51bGxfb3Jfb3JpZzsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbnVsbF9vcl9ib25kOwogCWludCByZXQgPSBORVRfUlhfRFJPUDsKIAlfX2JlMTYgdHlwZTsKIApAQCAtMjQ4NywxMiArMjU1MCwyNCBAQAogCWlmICghc2tiKQogCQlnb3RvIG91dDsKIAorCS8qCisJICogTWFrZSBzdXJlIGZyYW1lcyByZWNlaXZlZCBvbiBWTEFOIGludGVyZmFjZXMgc3RhY2tlZCBvbgorCSAqIGJvbmRpbmcgaW50ZXJmYWNlcyBzdGlsbCBtYWtlIHRoZWlyIHdheSB0byBhbnkgYmFzZSBib25kaW5nCisJICogZGV2aWNlIHRoYXQgbWF5IGhhdmUgcmVnaXN0ZXJlZCBmb3IgYSBzcGVjaWZpYyBwdHlwZS4gIFRoZQorCSAqIGhhbmRsZXIgbWF5IGhhdmUgdG8gYWRqdXN0IHNrYi0+ZGV2IGFuZCBvcmlnX2Rldi4KKwkgKi8KKwludWxsX29yX2JvbmQgPSBOVUxMOworCWlmICgoc2tiLT5kZXYtPnByaXZfZmxhZ3MgJiBJRkZfODAyXzFRX1ZMQU4pICYmCisJICAgICh2bGFuX2Rldl9yZWFsX2Rldihza2ItPmRldiktPnByaXZfZmxhZ3MgJiBJRkZfQk9ORElORykpIHsKKwkJbnVsbF9vcl9ib25kID0gdmxhbl9kZXZfcmVhbF9kZXYoc2tiLT5kZXYpOworCX0KKwogCXR5cGUgPSBza2ItPnByb3RvY29sOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0eXBlLAogCQkJJnB0eXBlX2Jhc2VbbnRvaHModHlwZSkgJiBQVFlQRV9IQVNIX01BU0tdLCBsaXN0KSB7Ci0JCWlmIChwdHlwZS0+dHlwZSA9PSB0eXBlICYmCi0JCSAgICAocHR5cGUtPmRldiA9PSBudWxsX29yX29yaWcgfHwgcHR5cGUtPmRldiA9PSBza2ItPmRldiB8fAotCQkgICAgIHB0eXBlLT5kZXYgPT0gb3JpZ19kZXYpKSB7CisJCWlmIChwdHlwZS0+dHlwZSA9PSB0eXBlICYmIChwdHlwZS0+ZGV2ID09IG51bGxfb3Jfb3JpZyB8fAorCQkgICAgIHB0eXBlLT5kZXYgPT0gc2tiLT5kZXYgfHwgcHR5cGUtPmRldiA9PSBvcmlnX2RldiB8fAorCQkgICAgIHB0eXBlLT5kZXYgPT0gbnVsbF9vcl9ib25kKSkgewogCQkJaWYgKHB0X3ByZXYpCiAJCQkJcmV0ID0gZGVsaXZlcl9za2Ioc2tiLCBwdF9wcmV2LCBvcmlnX2Rldik7CiAJCQlwdF9wcmV2ID0gcHR5cGU7CkBAIC0yNTYxLDcgKzI2MzYsNyBAQAogCXJldHVybiBuZXRpZl9yZWNlaXZlX3NrYihza2IpOwogfQogCi12b2lkIG5hcGlfZ3JvX2ZsdXNoKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSkKK3N0YXRpYyB2b2lkIG5hcGlfZ3JvX2ZsdXNoKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAqbmV4dDsKIApAQCAtMjU3NCw3ICsyNjQ5LDYgQEAKIAluYXBpLT5ncm9fY291bnQgPSAwOwogCW5hcGktPmdyb19saXN0ID0gTlVMTDsKIH0KLUVYUE9SVF9TWU1CT0wobmFwaV9ncm9fZmx1c2gpOwogCiBlbnVtIGdyb19yZXN1bHQgZGV2X2dyb19yZWNlaXZlKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTI5NjYsNyArMzA0MCw3IEBACiAJCSAqIGVudHJpZXMgdG8gdGhlIHRhaWwgb2YgdGhpcyBsaXN0LCBhbmQgb25seSAtPnBvbGwoKQogCQkgKiBjYWxscyBjYW4gcmVtb3ZlIHRoaXMgaGVhZCBlbnRyeSBmcm9tIHRoZSBsaXN0LgogCQkgKi8KLQkJbiA9IGxpc3RfZW50cnkobGlzdC0+bmV4dCwgc3RydWN0IG5hcGlfc3RydWN0LCBwb2xsX2xpc3QpOworCQluID0gbGlzdF9maXJzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgbmFwaV9zdHJ1Y3QsIHBvbGxfbGlzdCk7CiAKIAkJaGF2ZSA9IG5ldHBvbGxfcG9sbF9sb2NrKG4pOwogCkBAIC0zMTg1LDcgKzMyNTksNyBAQAogewogCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0cyA9IGRldl9nZXRfc3RhdHMoZGV2KTsKIAotCXNlcV9wcmludGYoc2VxLCAiJTZzOiU4bHUgJTdsdSAlNGx1ICU0bHUgJTRsdSAlNWx1ICUxMGx1ICU5bHUgIgorCXNlcV9wcmludGYoc2VxLCAiJTZzOiAlN2x1ICU3bHUgJTRsdSAlNGx1ICU0bHUgJTVsdSAlMTBsdSAlOWx1ICIKIAkJICAgIiU4bHUgJTdsdSAlNGx1ICU0bHUgJTRsdSAlNWx1ICU3bHUgJTEwbHVcbiIsCiAJCSAgIGRldi0+bmFtZSwgc3RhdHMtPnJ4X2J5dGVzLCBzdGF0cy0+cnhfcGFja2V0cywKIAkJICAgc3RhdHMtPnJ4X2Vycm9ycywKQEAgLTM2NDAsMTAgKzM3MTQsMTAgQEAKIAkJLyogVW5pY2FzdCBhZGRyZXNzZXMgY2hhbmdlcyBtYXkgb25seSBoYXBwZW4gdW5kZXIgdGhlIHJ0bmwsCiAJCSAqIHRoZXJlZm9yZSBjYWxsaW5nIF9fZGV2X3NldF9wcm9taXNjdWl0eSBoZXJlIGlzIHNhZmUuCiAJCSAqLwotCQlpZiAoZGV2LT51Yy5jb3VudCA+IDAgJiYgIWRldi0+dWNfcHJvbWlzYykgeworCQlpZiAoIW5ldGRldl91Y19lbXB0eShkZXYpICYmICFkZXYtPnVjX3Byb21pc2MpIHsKIAkJCV9fZGV2X3NldF9wcm9taXNjdWl0eShkZXYsIDEpOwogCQkJZGV2LT51Y19wcm9taXNjID0gMTsKLQkJfSBlbHNlIGlmIChkZXYtPnVjLmNvdW50ID09IDAgJiYgZGV2LT51Y19wcm9taXNjKSB7CisJCX0gZWxzZSBpZiAobmV0ZGV2X3VjX2VtcHR5KGRldikgJiYgZGV2LT51Y19wcm9taXNjKSB7CiAJCQlfX2Rldl9zZXRfcHJvbWlzY3VpdHkoZGV2LCAtMSk7CiAJCQlkZXYtPnVjX3Byb21pc2MgPSAwOwogCQl9CkBAIC00MjExLDcgKzQyODUsNyBAQAogCW5ldGlmX2FkZHJfbG9ja19iaChkZXYpOwogCiAJX19kZXZfYWRkcl9kaXNjYXJkKCZkZXYtPm1jX2xpc3QpOwotCWRldi0+bWNfY291bnQgPSAwOworCW5ldGRldl9tY19jb3VudChkZXYpID0gMDsKIAogCW5ldGlmX2FkZHJfdW5sb2NrX2JoKGRldik7CiB9CkBAIC00MjQ3LDE4ICs0MzIxLDEwIEBACiB9CiBFWFBPUlRfU1lNQk9MKGRldl9nZXRfZmxhZ3MpOwogCi0vKioKLSAqCWRldl9jaGFuZ2VfZmxhZ3MgLSBjaGFuZ2UgZGV2aWNlIHNldHRpbmdzCi0gKglAZGV2OiBkZXZpY2UKLSAqCUBmbGFnczogZGV2aWNlIHN0YXRlIGZsYWdzCi0gKgotICoJQ2hhbmdlIHNldHRpbmdzIG9uIGRldmljZSBiYXNlZCBzdGF0ZSBmbGFncy4gVGhlIGZsYWdzIGFyZQotICoJaW4gdGhlIHVzZXJzcGFjZSBleHBvcnRlZCBmb3JtYXQuCi0gKi8KLWludCBkZXZfY2hhbmdlX2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGZsYWdzKQoraW50IF9fZGV2X2NoYW5nZV9mbGFncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0JaW50IHJldCwgY2hhbmdlczsKIAlpbnQgb2xkX2ZsYWdzID0gZGV2LT5mbGFnczsKKwlpbnQgcmV0OwogCiAJQVNTRVJUX1JUTkwoKTsKIApAQCAtNDI4OSwxNyArNDM1NSwxMiBAQAogCiAJcmV0ID0gMDsKIAlpZiAoKG9sZF9mbGFncyBeIGZsYWdzKSAmIElGRl9VUCkgewkvKiBCaXQgaXMgZGlmZmVyZW50ICA/ICovCi0JCXJldCA9ICgob2xkX2ZsYWdzICYgSUZGX1VQKSA/IGRldl9jbG9zZSA6IGRldl9vcGVuKShkZXYpOworCQlyZXQgPSAoKG9sZF9mbGFncyAmIElGRl9VUCkgPyBfX2Rldl9jbG9zZSA6IF9fZGV2X29wZW4pKGRldik7CiAKIAkJaWYgKCFyZXQpCiAJCQlkZXZfc2V0X3J4X21vZGUoZGV2KTsKIAl9CiAKLQlpZiAoZGV2LT5mbGFncyAmIElGRl9VUCAmJgotCSAgICAoKG9sZF9mbGFncyBeIGRldi0+ZmxhZ3MpICYgfihJRkZfVVAgfCBJRkZfUFJPTUlTQyB8IElGRl9BTExNVUxUSSB8Ci0JCQkJCSAgSUZGX1ZPTEFUSUxFKSkpCi0JCWNhbGxfbmV0ZGV2aWNlX25vdGlmaWVycyhORVRERVZfQ0hBTkdFLCBkZXYpOwotCiAJaWYgKChmbGFncyBeIGRldi0+Z2ZsYWdzKSAmIElGRl9QUk9NSVNDKSB7CiAJCWludCBpbmMgPSAoZmxhZ3MgJiBJRkZfUFJPTUlTQykgPyAxIDogLTE7CiAKQEAgLTQzMTgsMTEgKzQzNzksNDcgQEAKIAkJZGV2X3NldF9hbGxtdWx0aShkZXYsIGluYyk7CiAJfQogCi0JLyogRXhjbHVkZSBzdGF0ZSB0cmFuc2l0aW9uIGZsYWdzLCBhbHJlYWR5IG5vdGlmaWVkICovCi0JY2hhbmdlcyA9IChvbGRfZmxhZ3MgXiBkZXYtPmZsYWdzKSAmIH4oSUZGX1VQIHwgSUZGX1JVTk5JTkcpOworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgX19kZXZfbm90aWZ5X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBvbGRfZmxhZ3MpCit7CisJdW5zaWduZWQgaW50IGNoYW5nZXMgPSBkZXYtPmZsYWdzIF4gb2xkX2ZsYWdzOworCisJaWYgKGNoYW5nZXMgJiBJRkZfVVApIHsKKwkJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVApCisJCQljYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1VQLCBkZXYpOworCQllbHNlCisJCQljYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX0RPV04sIGRldik7CisJfQorCisJaWYgKGRldi0+ZmxhZ3MgJiBJRkZfVVAgJiYKKwkgICAgKGNoYW5nZXMgJiB+KElGRl9VUCB8IElGRl9QUk9NSVNDIHwgSUZGX0FMTE1VTFRJIHwgSUZGX1ZPTEFUSUxFKSkpCisJCWNhbGxfbmV0ZGV2aWNlX25vdGlmaWVycyhORVRERVZfQ0hBTkdFLCBkZXYpOworfQorCisvKioKKyAqCWRldl9jaGFuZ2VfZmxhZ3MgLSBjaGFuZ2UgZGV2aWNlIHNldHRpbmdzCisgKglAZGV2OiBkZXZpY2UKKyAqCUBmbGFnczogZGV2aWNlIHN0YXRlIGZsYWdzCisgKgorICoJQ2hhbmdlIHNldHRpbmdzIG9uIGRldmljZSBiYXNlZCBzdGF0ZSBmbGFncy4gVGhlIGZsYWdzIGFyZQorICoJaW4gdGhlIHVzZXJzcGFjZSBleHBvcnRlZCBmb3JtYXQuCisgKi8KK2ludCBkZXZfY2hhbmdlX2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGZsYWdzKQoreworCWludCByZXQsIGNoYW5nZXM7CisJaW50IG9sZF9mbGFncyA9IGRldi0+ZmxhZ3M7CisKKwlyZXQgPSBfX2Rldl9jaGFuZ2VfZmxhZ3MoZGV2LCBmbGFncyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwljaGFuZ2VzID0gb2xkX2ZsYWdzIF4gZGV2LT5mbGFnczsKIAlpZiAoY2hhbmdlcykKIAkJcnRtc2dfaWZpbmZvKFJUTV9ORVdMSU5LLCBkZXYsIGNoYW5nZXMpOwogCisJX19kZXZfbm90aWZ5X2ZsYWdzKGRldiwgb2xkX2ZsYWdzKTsKIAlyZXR1cm4gcmV0OwogfQogRVhQT1JUX1NZTUJPTChkZXZfY2hhbmdlX2ZsYWdzKTsKQEAgLTQ4MTMsNiArNDkxMCwxMCBAQAogCQkqLwogCQljYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1VOUkVHSVNURVIsIGRldik7CiAKKwkJaWYgKCFkZXYtPnJ0bmxfbGlua19vcHMgfHwKKwkJICAgIGRldi0+cnRubF9saW5rX3N0YXRlID09IFJUTkxfTElOS19JTklUSUFMSVpFRCkKKwkJCXJ0bXNnX2lmaW5mbyhSVE1fREVMTElOSywgZGV2LCB+MFUpOworCiAJCS8qCiAJCSAqCUZsdXNoIHRoZSB1bmljYXN0IGFuZCBtdWx0aWNhc3QgY2hhaW5zCiAJCSAqLwpAQCAtNDgzMCw3ICs0OTMxLDcgQEAKIAl9CiAKIAkvKiBQcm9jZXNzIGFueSB3b3JrIGRlbGF5ZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUgYmF0Y2ggKi8KLQlkZXYgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsIHN0cnVjdCBuZXRfZGV2aWNlLCB1bnJlZ19saXN0KTsKKwlkZXYgPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBuZXRfZGV2aWNlLCB1bnJlZ19saXN0KTsKIAljYWxsX25ldGRldmljZV9ub3RpZmllcnMoTkVUREVWX1VOUkVHSVNURVJfQkFUQ0gsIGRldik7CiAKIAlzeW5jaHJvbml6ZV9uZXQoKTsKQEAgLTUwMzksNyArNTE0MCw5IEBACiAJICoJUHJldmVudCB1c2Vyc3BhY2UgcmFjZXMgYnkgd2FpdGluZyB1bnRpbCB0aGUgbmV0d29yawogCSAqCWRldmljZSBpcyBmdWxseSBzZXR1cCBiZWZvcmUgc2VuZGluZyBub3RpZmljYXRpb25zLgogCSAqLwotCXJ0bXNnX2lmaW5mbyhSVE1fTkVXTElOSywgZGV2LCB+MFUpOworCWlmICghZGV2LT5ydG5sX2xpbmtfb3BzIHx8CisJICAgIGRldi0+cnRubF9saW5rX3N0YXRlID09IFJUTkxfTElOS19JTklUSUFMSVpFRCkKKwkJcnRtc2dfaWZpbmZvKFJUTV9ORVdMSU5LLCBkZXYsIH4wVSk7CiAKIG91dDoKIAlyZXR1cm4gcmV0OwpAQCAtNTIxNiw3ICs1MzE5LDcgQEAKIAogCXdoaWxlICghbGlzdF9lbXB0eSgmbGlzdCkpIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmRldgotCQkJPSBsaXN0X2VudHJ5KGxpc3QubmV4dCwgc3RydWN0IG5ldF9kZXZpY2UsIHRvZG9fbGlzdCk7CisJCQk9IGxpc3RfZmlyc3RfZW50cnkoJmxpc3QsIHN0cnVjdCBuZXRfZGV2aWNlLCB0b2RvX2xpc3QpOwogCQlsaXN0X2RlbCgmZGV2LT50b2RvX2xpc3QpOwogCiAJCWlmICh1bmxpa2VseShkZXYtPnJlZ19zdGF0ZSAhPSBORVRSRUdfVU5SRUdJU1RFUklORykpIHsKQEAgLTUzNjcsNiArNTQ3MCw4IEBACiAKIAluZXRkZXZfaW5pdF9xdWV1ZXMoZGV2KTsKIAorCUlOSVRfTElTVF9IRUFEKCZkZXYtPmV0aHRvb2xfbnR1cGxlX2xpc3QubGlzdCk7CisJZGV2LT5ldGh0b29sX250dXBsZV9saXN0LmNvdW50ID0gMDsKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5uYXBpX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZkZXYtPnVucmVnX2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZkZXYtPmxpbmtfd2F0Y2hfbGlzdCk7CkBAIC01NDAzLDYgKzU1MDgsOSBAQAogCS8qIEZsdXNoIGRldmljZSBhZGRyZXNzZXMgKi8KIAlkZXZfYWRkcl9mbHVzaChkZXYpOwogCisJLyogQ2xlYXIgZXRodG9vbCBuLXR1cGxlIGxpc3QgKi8KKwlldGh0b29sX250dXBsZV9mbHVzaChkZXYpOworCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIG4sICZkZXYtPm5hcGlfbGlzdCwgZGV2X2xpc3QpCiAJCW5ldGlmX25hcGlfZGVsKHApOwogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXZfbWNhc3QuYyBiL25ldC9jb3JlL2Rldl9tY2FzdC5jCmluZGV4IDllMmZhMzkuLmZkOTE1NjkgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2Rldl9tY2FzdC5jCisrKyBiL25ldC9jb3JlL2Rldl9tY2FzdC5jCkBAIC05Niw2ICs5Niw4IEBACiAJaW50IGVycjsKIAogCW5ldGlmX2FkZHJfbG9ja19iaChkZXYpOworCWlmIChhbGVuICE9IGRldi0+YWRkcl9sZW4pCisJCXJldHVybiAtRUlOVkFMOwogCWVyciA9IF9fZGV2X2FkZHJfYWRkKCZkZXYtPm1jX2xpc3QsICZkZXYtPm1jX2NvdW50LCBhZGRyLCBhbGVuLCBnbGJsKTsKIAlpZiAoIWVycikKIAkJX19kZXZfc2V0X3J4X21vZGUoZGV2KTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Ryb3BfbW9uaXRvci5jIGIvbmV0L2NvcmUvZHJvcF9tb25pdG9yLmMKaW5kZXggYjhlOWQzYS4uZjhjODc0OSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZHJvcF9tb25pdG9yLmMKKysrIGIvbmV0L2NvcmUvZHJvcF9tb25pdG9yLmMKQEAgLTI5Niw3ICsyOTYsNiBAQAogCiAJCW5ld19zdGF0LT5kZXYgPSBkZXY7CiAJCW5ld19zdGF0LT5sYXN0X3J4ID0gamlmZmllczsKLQkJSU5JVF9SQ1VfSEVBRCgmbmV3X3N0YXQtPnJjdSk7CiAJCXNwaW5fbG9jaygmdHJhY2Vfc3RhdGVfbG9jayk7CiAJCWxpc3RfYWRkX3JjdSgmbmV3X3N0YXQtPmxpc3QsICZod19zdGF0c19saXN0KTsKIAkJc3Bpbl91bmxvY2soJnRyYWNlX3N0YXRlX2xvY2spOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZXRodG9vbC5jIGIvbmV0L2NvcmUvZXRodG9vbC5jCmluZGV4IDIzNmE5OTguLjBmMmY4MjEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2V0aHRvb2wuYworKysgYi9uZXQvY29yZS9ldGh0b29sLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogICogTkVUSUZfRl94eHggdmFsdWVzIGluIGluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKICAqLwogc3RhdGljIGNvbnN0IHUzMiBmbGFnc19kdXBfZmVhdHVyZXMgPQotCUVUSF9GTEFHX0xSTzsKKwkoRVRIX0ZMQUdfTFJPIHwgRVRIX0ZMQUdfTlRVUExFKTsKIAogdTMyIGV0aHRvb2xfb3BfZ2V0X2ZsYWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CkBAIC0xMzQsMTkgKzEzNCw0NCBAQAogCiBpbnQgZXRodG9vbF9vcF9zZXRfZmxhZ3Moc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRhdGEpCiB7Ci0JaWYgKGRhdGEgJiBFVEhfRkxBR19MUk8pCi0JCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87Ci0JZWxzZQotCQlkZXYtPmZlYXR1cmVzICY9IH5ORVRJRl9GX0xSTzsKKwljb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGRldi0+ZXRodG9vbF9vcHM7CisJdW5zaWduZWQgbG9uZyBmZWF0dXJlcyA9IGRldi0+ZmVhdHVyZXM7CiAKKwlpZiAoZGF0YSAmIEVUSF9GTEFHX0xSTykKKwkJZmVhdHVyZXMgfD0gTkVUSUZfRl9MUk87CisJZWxzZQorCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9MUk87CisKKwlpZiAoZGF0YSAmIEVUSF9GTEFHX05UVVBMRSkgeworCQlpZiAoIW9wcy0+c2V0X3J4X250dXBsZSkKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKKwkJZmVhdHVyZXMgfD0gTkVUSUZfRl9OVFVQTEU7CisJfSBlbHNlIHsKKwkJLyogc2FmZSB0byBjbGVhciByZWdhcmRsZXNzICovCisJCWZlYXR1cmVzICY9IH5ORVRJRl9GX05UVVBMRTsKKwl9CisKKwlkZXYtPmZlYXR1cmVzID0gZmVhdHVyZXM7CiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgZXRodG9vbF9udHVwbGVfZmx1c2goc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgZXRodG9vbF9yeF9udHVwbGVfZmxvd19zcGVjX2NvbnRhaW5lciAqZnNjLCAqZjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShmc2MsIGYsICZkZXYtPmV0aHRvb2xfbnR1cGxlX2xpc3QubGlzdCwgbGlzdCkgeworCQlsaXN0X2RlbCgmZnNjLT5saXN0KTsKKwkJa2ZyZWUoZnNjKTsKKwl9CisJZGV2LT5ldGh0b29sX250dXBsZV9saXN0LmNvdW50ID0gMDsKK30KK0VYUE9SVF9TWU1CT0woZXRodG9vbF9udHVwbGVfZmx1c2gpOworCiAvKiBIYW5kbGVycyBmb3IgZWFjaCBldGh0b29sIGNvbW1hbmQgKi8KIAogc3RhdGljIGludCBldGh0b29sX2dldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCiB7Ci0Jc3RydWN0IGV0aHRvb2xfY21kIGNtZCA9IHsgRVRIVE9PTF9HU0VUIH07CisJc3RydWN0IGV0aHRvb2xfY21kIGNtZCA9IHsgLmNtZCA9IEVUSFRPT0xfR1NFVCB9OwogCWludCBlcnI7CiAKIAlpZiAoIWRldi0+ZXRodG9vbF9vcHMtPmdldF9zZXR0aW5ncykKQEAgLTE3NCw3ICsxOTksMTAgQEAKIAlyZXR1cm4gZGV2LT5ldGh0b29sX29wcy0+c2V0X3NldHRpbmdzKGRldiwgJmNtZCk7CiB9CiAKLXN0YXRpYyBpbnQgZXRodG9vbF9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCisvKgorICogbm9pbmxpbmUgYXR0cmlidXRlIHNvIHRoYXQgZ2NjIGRvZXNudCB1c2UgdG9vIG11Y2ggc3RhY2sgaW4gZGV2X2V0aHRvb2woKQorICovCitzdGF0aWMgbm9pbmxpbmUgaW50IGV0aHRvb2xfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQogewogCXN0cnVjdCBldGh0b29sX2RydmluZm8gaW5mbzsKIAljb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGRldi0+ZXRodG9vbF9vcHM7CkBAIC0yMDksNyArMjM3LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZXRodG9vbF9zZXRfcnhuZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQorLyoKKyAqIG5vaW5saW5lIGF0dHJpYnV0ZSBzbyB0aGF0IGdjYyBkb2VzbnQgdXNlIHRvbyBtdWNoIHN0YWNrIGluIGRldl9ldGh0b29sKCkKKyAqLworc3RhdGljIG5vaW5saW5lIGludCBldGh0b29sX3NldF9yeG5mYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCiB7CiAJc3RydWN0IGV0aHRvb2xfcnhuZmMgY21kOwogCkBAIC0yMjIsNyArMjUzLDEwIEBACiAJcmV0dXJuIGRldi0+ZXRodG9vbF9vcHMtPnNldF9yeG5mYyhkZXYsICZjbWQpOwogfQogCi1zdGF0aWMgaW50IGV0aHRvb2xfZ2V0X3J4bmZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKKy8qCisgKiBub2lubGluZSBhdHRyaWJ1dGUgc28gdGhhdCBnY2MgZG9lc250IHVzZSB0b28gbXVjaCBzdGFjayBpbiBkZXZfZXRodG9vbCgpCisgKi8KK3N0YXRpYyBub2lubGluZSBpbnQgZXRodG9vbF9nZXRfcnhuZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQogewogCXN0cnVjdCBldGh0b29sX3J4bmZjIGluZm87CiAJY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtPmV0aHRvb2xfb3BzOwpAQCAtMjY2LDYgKzMwMCwzMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBfX3J4X250dXBsZV9maWx0ZXJfYWRkKHN0cnVjdCBldGh0b29sX3J4X250dXBsZV9saXN0ICpsaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfcnhfbnR1cGxlX2Zsb3dfc3BlYyAqc3BlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX3J4X250dXBsZV9mbG93X3NwZWNfY29udGFpbmVyICpmc2MpCit7CisKKwkvKiBkb24ndCBhZGQgZmlsdGVycyBmb3JldmVyICovCisJaWYgKGxpc3QtPmNvdW50ID49IEVUSFRPT0xfTUFYX05UVVBMRV9MSVNUX0VOVFJZKSB7CisJCS8qIGZyZWUgdGhlIGNvbnRhaW5lciAqLworCQlrZnJlZShmc2MpOworCQlyZXR1cm47CisJfQorCisJLyogQ29weSB0aGUgd2hvbGUgZmlsdGVyIG92ZXIgKi8KKwlmc2MtPmZzLmZsb3dfdHlwZSA9IHNwZWMtPmZsb3dfdHlwZTsKKwltZW1jcHkoJmZzYy0+ZnMuaF91LCAmc3BlYy0+aF91LCBzaXplb2Yoc3BlYy0+aF91KSk7CisJbWVtY3B5KCZmc2MtPmZzLm1fdSwgJnNwZWMtPm1fdSwgc2l6ZW9mKHNwZWMtPm1fdSkpOworCisJZnNjLT5mcy52bGFuX3RhZyA9IHNwZWMtPnZsYW5fdGFnOworCWZzYy0+ZnMudmxhbl90YWdfbWFzayA9IHNwZWMtPnZsYW5fdGFnX21hc2s7CisJZnNjLT5mcy5kYXRhID0gc3BlYy0+ZGF0YTsKKwlmc2MtPmZzLmRhdGFfbWFzayA9IHNwZWMtPmRhdGFfbWFzazsKKwlmc2MtPmZzLmFjdGlvbiA9IHNwZWMtPmFjdGlvbjsKKworCS8qIGFkZCB0byB0aGUgbGlzdCAqLworCWxpc3RfYWRkX3RhaWxfcmN1KCZmc2MtPmxpc3QsICZsaXN0LT5saXN0KTsKKwlsaXN0LT5jb3VudCsrOworfQorCisvKgorICogbm9pbmxpbmUgYXR0cmlidXRlIHNvIHRoYXQgZ2NjIGRvZXNudCB1c2UgdG9vIG11Y2ggc3RhY2sgaW4gZGV2X2V0aHRvb2woKQorICovCitzdGF0aWMgbm9pbmxpbmUgaW50IGV0aHRvb2xfc2V0X3J4X250dXBsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCit7CisJc3RydWN0IGV0aHRvb2xfcnhfbnR1cGxlIGNtZDsKKwljb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgKm9wcyA9IGRldi0+ZXRodG9vbF9vcHM7CisJc3RydWN0IGV0aHRvb2xfcnhfbnR1cGxlX2Zsb3dfc3BlY19jb250YWluZXIgKmZzYyA9IE5VTEw7CisJaW50IHJldDsKKworCWlmICghKGRldi0+ZmVhdHVyZXMgJiBORVRJRl9GX05UVVBMRSkpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGNvcHlfZnJvbV91c2VyKCZjbWQsIHVzZXJhZGRyLCBzaXplb2YoY21kKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJLyoKKwkgKiBDYWNoZSBmaWx0ZXIgaW4gZGV2IHN0cnVjdCBmb3IgR0VUIG9wZXJhdGlvbiBvbmx5IGlmCisJICogdGhlIHVuZGVybHlpbmcgZHJpdmVyIGRvZXNuJ3QgaGF2ZSBpdHMgb3duIEdFVCBvcGVyYXRpb24sIGFuZAorCSAqIG9ubHkgaWYgdGhlIGZpbHRlciB3YXMgYWRkZWQgc3VjY2Vzc2Z1bGx5LiAgRmlyc3QgbWFrZSBzdXJlIHdlCisJICogY2FuIGFsbG9jYXRlIHRoZSBmaWx0ZXIsIHRoZW4gY29udGludWUgaWYgc3VjY2Vzc2Z1bC4KKwkgKi8KKwlpZiAoIW9wcy0+Z2V0X3J4X250dXBsZSkgeworCQlmc2MgPSBrbWFsbG9jKHNpemVvZigqZnNjKSwgR0ZQX0FUT01JQyk7CisJCWlmICghZnNjKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcmV0ID0gb3BzLT5zZXRfcnhfbnR1cGxlKGRldiwgJmNtZCk7CisJaWYgKHJldCkgeworCQlrZnJlZShmc2MpOworCQlyZXR1cm4gcmV0OworCX0KKworCWlmICghb3BzLT5nZXRfcnhfbnR1cGxlKQorCQlfX3J4X250dXBsZV9maWx0ZXJfYWRkKCZkZXYtPmV0aHRvb2xfbnR1cGxlX2xpc3QsICZjbWQuZnMsIGZzYyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGV0aHRvb2xfZ2V0X3J4X250dXBsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCit7CisJc3RydWN0IGV0aHRvb2xfZ3N0cmluZ3MgZ3N0cmluZ3M7CisJY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzICpvcHMgPSBkZXYtPmV0aHRvb2xfb3BzOworCXN0cnVjdCBldGh0b29sX3J4X250dXBsZV9mbG93X3NwZWNfY29udGFpbmVyICpmc2M7CisJdTggKmRhdGE7CisJY2hhciAqcDsKKwlpbnQgcmV0LCBpLCBudW1fc3RyaW5ncyA9IDA7CisKKwlpZiAoIW9wcy0+Z2V0X3NzZXRfY291bnQpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmZ3N0cmluZ3MsIHVzZXJhZGRyLCBzaXplb2YoZ3N0cmluZ3MpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlyZXQgPSBvcHMtPmdldF9zc2V0X2NvdW50KGRldiwgZ3N0cmluZ3Muc3RyaW5nX3NldCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwlnc3RyaW5ncy5sZW4gPSByZXQ7CisKKwlkYXRhID0ga21hbGxvYyhnc3RyaW5ncy5sZW4gKiBFVEhfR1NUUklOR19MRU4sIEdGUF9VU0VSKTsKKwlpZiAoIWRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKG9wcy0+Z2V0X3J4X250dXBsZSkgeworCQkvKiBkcml2ZXItc3BlY2lmaWMgZmlsdGVyIGdyYWIgKi8KKwkJcmV0ID0gb3BzLT5nZXRfcnhfbnR1cGxlKGRldiwgZ3N0cmluZ3Muc3RyaW5nX3NldCwgZGF0YSk7CisJCWdvdG8gY29weTsKKwl9CisKKwkvKiBkZWZhdWx0IGV0aHRvb2wgZmlsdGVyIGdyYWIgKi8KKwlpID0gMDsKKwlwID0gKGNoYXIgKilkYXRhOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZnNjLCAmZGV2LT5ldGh0b29sX250dXBsZV9saXN0Lmxpc3QsIGxpc3QpIHsKKwkJc3ByaW50ZihwLCAiRmlsdGVyICVkOlxuIiwgaSk7CisJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQludW1fc3RyaW5ncysrOworCisJCXN3aXRjaCAoZnNjLT5mcy5mbG93X3R5cGUpIHsKKwkJY2FzZSBUQ1BfVjRfRkxPVzoKKwkJCXNwcmludGYocCwgIlx0RmxvdyBUeXBlOiBUQ1BcbiIpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJYnJlYWs7CisJCWNhc2UgVURQX1Y0X0ZMT1c6CisJCQlzcHJpbnRmKHAsICJcdEZsb3cgVHlwZTogVURQXG4iKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfVjRfRkxPVzoKKwkJCXNwcmludGYocCwgIlx0RmxvdyBUeXBlOiBTQ1RQXG4iKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCWJyZWFrOworCQljYXNlIEFIX0VTUF9WNF9GTE9XOgorCQkJc3ByaW50ZihwLCAiXHRGbG93IFR5cGU6IEFIIEVTUFxuIik7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlicmVhazsKKwkJY2FzZSBFU1BfVjRfRkxPVzoKKwkJCXNwcmludGYocCwgIlx0RmxvdyBUeXBlOiBFU1BcbiIpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJYnJlYWs7CisJCWNhc2UgSVBfVVNFUl9GTE9XOgorCQkJc3ByaW50ZihwLCAiXHRGbG93IFR5cGU6IFJhdyBJUFxuIik7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlicmVhazsKKwkJY2FzZSBJUFY0X0ZMT1c6CisJCQlzcHJpbnRmKHAsICJcdEZsb3cgVHlwZTogSVB2NFxuIik7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNwcmludGYocCwgIlx0RmxvdyBUeXBlOiBVbmtub3duXG4iKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCWdvdG8gdW5rbm93bl9maWx0ZXI7CisJCX07CisKKwkJLyogbm93IHRoZSByZXN0IG9mIHRoZSBmaWx0ZXJzICovCisJCXN3aXRjaCAoZnNjLT5mcy5mbG93X3R5cGUpIHsKKwkJY2FzZSBUQ1BfVjRfRkxPVzoKKwkJY2FzZSBVRFBfVjRfRkxPVzoKKwkJY2FzZSBTQ1RQX1Y0X0ZMT1c6CisJCQlzcHJpbnRmKHAsICJcdFNyYyBJUCBhZGRyOiAweCV4XG4iLAorCQkJICAgICAgICBmc2MtPmZzLmhfdS50Y3BfaXA0X3NwZWMuaXA0c3JjKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCXNwcmludGYocCwgIlx0U3JjIElQIG1hc2s6IDB4JXhcbiIsCisJCQkgICAgICAgIGZzYy0+ZnMubV91LnRjcF9pcDRfc3BlYy5pcDRzcmMpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJc3ByaW50ZihwLCAiXHREZXN0IElQIGFkZHI6IDB4JXhcbiIsCisJCQkgICAgICAgIGZzYy0+ZnMuaF91LnRjcF9pcDRfc3BlYy5pcDRkc3QpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJc3ByaW50ZihwLCAiXHREZXN0IElQIG1hc2s6IDB4JXhcbiIsCisJCQkgICAgICAgIGZzYy0+ZnMubV91LnRjcF9pcDRfc3BlYy5pcDRkc3QpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJc3ByaW50ZihwLCAiXHRTcmMgUG9ydDogJWQsIG1hc2s6IDB4JXhcbiIsCisJCQkgICAgICAgIGZzYy0+ZnMuaF91LnRjcF9pcDRfc3BlYy5wc3JjLAorCQkJICAgICAgICBmc2MtPmZzLm1fdS50Y3BfaXA0X3NwZWMucHNyYyk7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlzcHJpbnRmKHAsICJcdERlc3QgUG9ydDogJWQsIG1hc2s6IDB4JXhcbiIsCisJCQkgICAgICAgIGZzYy0+ZnMuaF91LnRjcF9pcDRfc3BlYy5wZHN0LAorCQkJICAgICAgICBmc2MtPmZzLm1fdS50Y3BfaXA0X3NwZWMucGRzdCk7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlzcHJpbnRmKHAsICJcdFRPUzogJWQsIG1hc2s6IDB4JXhcbiIsCisJCQkgICAgICAgIGZzYy0+ZnMuaF91LnRjcF9pcDRfc3BlYy50b3MsCisJCQkgICAgICAgIGZzYy0+ZnMubV91LnRjcF9pcDRfc3BlYy50b3MpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJYnJlYWs7CisJCWNhc2UgQUhfRVNQX1Y0X0ZMT1c6CisJCWNhc2UgRVNQX1Y0X0ZMT1c6CisJCQlzcHJpbnRmKHAsICJcdFNyYyBJUCBhZGRyOiAweCV4XG4iLAorCQkJICAgICAgICBmc2MtPmZzLmhfdS5haF9pcDRfc3BlYy5pcDRzcmMpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJc3ByaW50ZihwLCAiXHRTcmMgSVAgbWFzazogMHgleFxuIiwKKwkJCSAgICAgICAgZnNjLT5mcy5tX3UuYWhfaXA0X3NwZWMuaXA0c3JjKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCXNwcmludGYocCwgIlx0RGVzdCBJUCBhZGRyOiAweCV4XG4iLAorCQkJICAgICAgICBmc2MtPmZzLmhfdS5haF9pcDRfc3BlYy5pcDRkc3QpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJc3ByaW50ZihwLCAiXHREZXN0IElQIG1hc2s6IDB4JXhcbiIsCisJCQkgICAgICAgIGZzYy0+ZnMubV91LmFoX2lwNF9zcGVjLmlwNGRzdCk7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlzcHJpbnRmKHAsICJcdFNQSTogJWQsIG1hc2s6IDB4JXhcbiIsCisJCQkgICAgICAgIGZzYy0+ZnMuaF91LmFoX2lwNF9zcGVjLnNwaSwKKwkJCSAgICAgICAgZnNjLT5mcy5tX3UuYWhfaXA0X3NwZWMuc3BpKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCXNwcmludGYocCwgIlx0VE9TOiAlZCwgbWFzazogMHgleFxuIiwKKwkJCSAgICAgICAgZnNjLT5mcy5oX3UuYWhfaXA0X3NwZWMudG9zLAorCQkJICAgICAgICBmc2MtPmZzLm1fdS5haF9pcDRfc3BlYy50b3MpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJYnJlYWs7CisJCWNhc2UgSVBfVVNFUl9GTE9XOgorCQkJc3ByaW50ZihwLCAiXHRTcmMgSVAgYWRkcjogMHgleFxuIiwKKwkJCSAgICAgICAgZnNjLT5mcy5oX3UucmF3X2lwNF9zcGVjLmlwNHNyYyk7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlzcHJpbnRmKHAsICJcdFNyYyBJUCBtYXNrOiAweCV4XG4iLAorCQkJICAgICAgICBmc2MtPmZzLm1fdS5yYXdfaXA0X3NwZWMuaXA0c3JjKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCXNwcmludGYocCwgIlx0RGVzdCBJUCBhZGRyOiAweCV4XG4iLAorCQkJICAgICAgICBmc2MtPmZzLmhfdS5yYXdfaXA0X3NwZWMuaXA0ZHN0KTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCXNwcmludGYocCwgIlx0RGVzdCBJUCBtYXNrOiAweCV4XG4iLAorCQkJICAgICAgICBmc2MtPmZzLm1fdS5yYXdfaXA0X3NwZWMuaXA0ZHN0KTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCWJyZWFrOworCQljYXNlIElQVjRfRkxPVzoKKwkJCXNwcmludGYocCwgIlx0U3JjIElQIGFkZHI6IDB4JXhcbiIsCisJCQkgICAgICAgIGZzYy0+ZnMuaF91LnVzcl9pcDRfc3BlYy5pcDRzcmMpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJc3ByaW50ZihwLCAiXHRTcmMgSVAgbWFzazogMHgleFxuIiwKKwkJCSAgICAgICAgZnNjLT5mcy5tX3UudXNyX2lwNF9zcGVjLmlwNHNyYyk7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlzcHJpbnRmKHAsICJcdERlc3QgSVAgYWRkcjogMHgleFxuIiwKKwkJCSAgICAgICAgZnNjLT5mcy5oX3UudXNyX2lwNF9zcGVjLmlwNGRzdCk7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlzcHJpbnRmKHAsICJcdERlc3QgSVAgbWFzazogMHgleFxuIiwKKwkJCSAgICAgICAgZnNjLT5mcy5tX3UudXNyX2lwNF9zcGVjLmlwNGRzdCk7CisJCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJCW51bV9zdHJpbmdzKys7CisJCQlzcHJpbnRmKHAsICJcdEw0IGJ5dGVzOiAweCV4LCBtYXNrOiAweCV4XG4iLAorCQkJICAgICAgICBmc2MtPmZzLmhfdS51c3JfaXA0X3NwZWMubDRfNF9ieXRlcywKKwkJCSAgICAgICAgZnNjLT5mcy5tX3UudXNyX2lwNF9zcGVjLmw0XzRfYnl0ZXMpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJc3ByaW50ZihwLCAiXHRUT1M6ICVkLCBtYXNrOiAweCV4XG4iLAorCQkJICAgICAgICBmc2MtPmZzLmhfdS51c3JfaXA0X3NwZWMudG9zLAorCQkJICAgICAgICBmc2MtPmZzLm1fdS51c3JfaXA0X3NwZWMudG9zKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCXNwcmludGYocCwgIlx0SVAgVmVyc2lvbjogJWQsIG1hc2s6IDB4JXhcbiIsCisJCQkgICAgICAgIGZzYy0+ZnMuaF91LnVzcl9pcDRfc3BlYy5pcF92ZXIsCisJCQkgICAgICAgIGZzYy0+ZnMubV91LnVzcl9pcDRfc3BlYy5pcF92ZXIpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQludW1fc3RyaW5ncysrOworCQkJc3ByaW50ZihwLCAiXHRQcm90b2NvbDogJWQsIG1hc2s6IDB4JXhcbiIsCisJCQkgICAgICAgIGZzYy0+ZnMuaF91LnVzcl9pcDRfc3BlYy5wcm90bywKKwkJCSAgICAgICAgZnNjLT5mcy5tX3UudXNyX2lwNF9zcGVjLnByb3RvKTsKKwkJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQkJbnVtX3N0cmluZ3MrKzsKKwkJCWJyZWFrOworCQl9OworCQlzcHJpbnRmKHAsICJcdFZMQU46ICVkLCBtYXNrOiAweCV4XG4iLAorCQkgICAgICAgIGZzYy0+ZnMudmxhbl90YWcsIGZzYy0+ZnMudmxhbl90YWdfbWFzayk7CisJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQludW1fc3RyaW5ncysrOworCQlzcHJpbnRmKHAsICJcdFVzZXItZGVmaW5lZDogMHglTHhcbiIsIGZzYy0+ZnMuZGF0YSk7CisJCXAgKz0gRVRIX0dTVFJJTkdfTEVOOworCQludW1fc3RyaW5ncysrOworCQlzcHJpbnRmKHAsICJcdFVzZXItZGVmaW5lZCBtYXNrOiAweCVMeFxuIiwgZnNjLT5mcy5kYXRhX21hc2spOworCQlwICs9IEVUSF9HU1RSSU5HX0xFTjsKKwkJbnVtX3N0cmluZ3MrKzsKKwkJaWYgKGZzYy0+ZnMuYWN0aW9uID09IEVUSFRPT0xfUlhOVFVQTEVfQUNUSU9OX0RST1ApCisJCQlzcHJpbnRmKHAsICJcdEFjdGlvbjogRHJvcFxuIik7CisJCWVsc2UKKwkJCXNwcmludGYocCwgIlx0QWN0aW9uOiBEaXJlY3QgdG8gcXVldWUgJWRcbiIsCisJCQkgICAgICAgIGZzYy0+ZnMuYWN0aW9uKTsKKwkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCW51bV9zdHJpbmdzKys7Cit1bmtub3duX2ZpbHRlcjoKKwkJaSsrOworCX0KK2NvcHk6CisJLyogaW5kaWNhdGUgdG8gdXNlcnNwYWNlIGhvdyBtYW55IHN0cmluZ3Mgd2UgYWN0dWFsbHkgaGF2ZSAqLworCWdzdHJpbmdzLmxlbiA9IG51bV9zdHJpbmdzOworCXJldCA9IC1FRkFVTFQ7CisJaWYgKGNvcHlfdG9fdXNlcih1c2VyYWRkciwgJmdzdHJpbmdzLCBzaXplb2YoZ3N0cmluZ3MpKSkKKwkJZ290byBvdXQ7CisJdXNlcmFkZHIgKz0gc2l6ZW9mKGdzdHJpbmdzKTsKKwlpZiAoY29weV90b191c2VyKHVzZXJhZGRyLCBkYXRhLCBnc3RyaW5ncy5sZW4gKiBFVEhfR1NUUklOR19MRU4pKQorCQlnb3RvIG91dDsKKwlyZXQgPSAwOworCitvdXQ6CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBldGh0b29sX2dldF9yZWdzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNoYXIgX191c2VyICp1c2VyYWRkcikKIHsKIAlzdHJ1Y3QgZXRodG9vbF9yZWdzIHJlZ3M7CkBAIC0zMjQsNyArNjY3LDcgQEAKIAogc3RhdGljIGludCBldGh0b29sX2dldF93b2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciBfX3VzZXIgKnVzZXJhZGRyKQogewotCXN0cnVjdCBldGh0b29sX3dvbGluZm8gd29sID0geyBFVEhUT09MX0dXT0wgfTsKKwlzdHJ1Y3QgZXRodG9vbF93b2xpbmZvIHdvbCA9IHsgLmNtZCA9IEVUSFRPT0xfR1dPTCB9OwogCiAJaWYgKCFkZXYtPmV0aHRvb2xfb3BzLT5nZXRfd29sKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CkBAIC00NTYsOSArNzk5LDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBldGh0b29sX2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkIF9fdXNlciAqdXNlcmFkZHIpCisvKgorICogbm9pbmxpbmUgYXR0cmlidXRlIHNvIHRoYXQgZ2NjIGRvZXNudCB1c2UgdG9vIG11Y2ggc3RhY2sgaW4gZGV2X2V0aHRvb2woKQorICovCitzdGF0aWMgbm9pbmxpbmUgaW50IGV0aHRvb2xfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKIHsKLQlzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSBjb2FsZXNjZSA9IHsgRVRIVE9PTF9HQ09BTEVTQ0UgfTsKKwlzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSBjb2FsZXNjZSA9IHsgLmNtZCA9IEVUSFRPT0xfR0NPQUxFU0NFIH07CiAKIAlpZiAoIWRldi0+ZXRodG9vbF9vcHMtPmdldF9jb2FsZXNjZSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtNDcwLDcgKzgxNiwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGV0aHRvb2xfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgX191c2VyICp1c2VyYWRkcikKKy8qCisgKiBub2lubGluZSBhdHRyaWJ1dGUgc28gdGhhdCBnY2MgZG9lc250IHVzZSB0b28gbXVjaCBzdGFjayBpbiBkZXZfZXRodG9vbCgpCisgKi8KK3N0YXRpYyBub2lubGluZSBpbnQgZXRodG9vbF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQogewogCXN0cnVjdCBldGh0b29sX2NvYWxlc2NlIGNvYWxlc2NlOwogCkBAIC00ODUsNyArODM0LDcgQEAKIAogc3RhdGljIGludCBldGh0b29sX2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCBfX3VzZXIgKnVzZXJhZGRyKQogewotCXN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSByaW5ncGFyYW0gPSB7IEVUSFRPT0xfR1JJTkdQQVJBTSB9OworCXN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSByaW5ncGFyYW0gPSB7IC5jbWQgPSBFVEhUT09MX0dSSU5HUEFSQU0gfTsKIAogCWlmICghZGV2LT5ldGh0b29sX29wcy0+Z2V0X3JpbmdwYXJhbSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwpAQCAtODM5LDcgKzExODgsNyBAQAogc3RhdGljIGludCBldGh0b29sX2dldF92YWx1ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyIF9fdXNlciAqdXNlcmFkZHIsCiAJCQkgICAgIHUzMiBjbWQsIHUzMiAoKmFjdG9yKShzdHJ1Y3QgbmV0X2RldmljZSAqKSkKIHsKLQlzdHJ1Y3QgZXRodG9vbF92YWx1ZSBlZGF0YSA9IHsgY21kIH07CisJc3RydWN0IGV0aHRvb2xfdmFsdWUgZWRhdGEgPSB7IC5jbWQgPSBjbWQgfTsKIAogCWlmICghYWN0b3IpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTg4MCw3ICsxMjI5LDEwIEBACiAJcmV0dXJuIGFjdG9yKGRldiwgZWRhdGEuZGF0YSk7CiB9CiAKLXN0YXRpYyBpbnQgZXRodG9vbF9mbGFzaF9kZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY2hhciBfX3VzZXIgKnVzZXJhZGRyKQorLyoKKyAqIG5vaW5saW5lIGF0dHJpYnV0ZSBzbyB0aGF0IGdjYyBkb2VzbnQgdXNlIHRvbyBtdWNoIHN0YWNrIGluIGRldl9ldGh0b29sKCkKKyAqLworc3RhdGljIG5vaW5saW5lIGludCBldGh0b29sX2ZsYXNoX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjaGFyIF9fdXNlciAqdXNlcmFkZHIpCiB7CiAJc3RydWN0IGV0aHRvb2xfZmxhc2ggZWZsOwogCkBAIC0xMTEzLDYgKzE0NjUsMTIgQEAKIAljYXNlIEVUSFRPT0xfUkVTRVQ6CiAJCXJjID0gZXRodG9vbF9yZXNldChkZXYsIHVzZXJhZGRyKTsKIAkJYnJlYWs7CisJY2FzZSBFVEhUT09MX1NSWE5UVVBMRToKKwkJcmMgPSBldGh0b29sX3NldF9yeF9udHVwbGUoZGV2LCB1c2VyYWRkcik7CisJCWJyZWFrOworCWNhc2UgRVRIVE9PTF9HUlhOVFVQTEU6CisJCXJjID0gZXRodG9vbF9nZXRfcnhfbnR1cGxlKGRldiwgdXNlcmFkZHIpOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlyYyA9IC1FT1BOT1RTVVBQOwogCX0KZGlmZiAtLWdpdCBhL25ldC9jb3JlL2ZpYl9ydWxlcy5jIGIvbmV0L2NvcmUvZmliX3J1bGVzLmMKaW5kZXggMDJhM2IyYy4uOWEyNDM3NyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZmliX3J1bGVzLmMKKysrIGIvbmV0L2NvcmUvZmliX3J1bGVzLmMKQEAgLTcwOCw3ICs3MDgsNyBAQAogCS5ub3RpZmllcl9jYWxsID0gZmliX3J1bGVzX2V2ZW50LAogfTsKIAotc3RhdGljIGludCBmaWJfcnVsZXNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGZpYl9ydWxlc19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJSU5JVF9MSVNUX0hFQUQoJm5ldC0+cnVsZXNfb3BzKTsKIAlzcGluX2xvY2tfaW5pdCgmbmV0LT5ydWxlc19tb2RfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvY29yZS9maWx0ZXIuYyBiL25ldC9jb3JlL2ZpbHRlci5jCmluZGV4IDM1NDFhYTQuLmQzOGVmN2YgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2ZpbHRlci5jCisrKyBiL25ldC9jb3JlL2ZpbHRlci5jCkBAIC01MjksNiArNTI5LDcgQEAKIAkJc2tfZmlsdGVyX2RlbGF5ZWRfdW5jaGFyZ2Uoc2ssIG9sZF9mcCk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChza19hdHRhY2hfZmlsdGVyKTsKIAogaW50IHNrX2RldGFjaF9maWx0ZXIoc3RydWN0IHNvY2sgKnNrKQogewpAQCAtNTQ1LDMgKzU0Niw0IEBACiAJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNrX2RldGFjaF9maWx0ZXIpOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwppbmRleCBmMzUzNzdiLi5kMTAyZjZkIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZWlnaGJvdXIuYworKysgYi9uZXQvY29yZS9uZWlnaGJvdXIuYwpAQCAtMjQxNyw4ICsyNDE3LDcgQEAKIAogc3RhdGljIHZvaWQgKm5laWdoX3N0YXRfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCA9IHBkZS0+ZGF0YTsKKwlzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCA9IHNlcS0+cHJpdmF0ZTsKIAlpbnQgY3B1OwogCiAJaWYgKCpwb3MgPT0gMCkKQEAgLTI0MzUsOCArMjQzNCw3IEBACiAKIHN0YXRpYyB2b2lkICpuZWlnaF9zdGF0X3NlcV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCA9IHBkZS0+ZGF0YTsKKwlzdHJ1Y3QgbmVpZ2hfdGFibGUgKnRibCA9IHNlcS0+cHJpdmF0ZTsKIAlpbnQgY3B1OwogCiAJZm9yIChjcHUgPSAqcG9zOyBjcHUgPCBucl9jcHVfaWRzOyArK2NwdSkgewpAQCAtMjQ1NSw4ICsyNDUzLDcgQEAKIAogc3RhdGljIGludCBuZWlnaF9zdGF0X3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlID0gc2VxLT5wcml2YXRlOwotCXN0cnVjdCBuZWlnaF90YWJsZSAqdGJsID0gcGRlLT5kYXRhOworCXN0cnVjdCBuZWlnaF90YWJsZSAqdGJsID0gc2VxLT5wcml2YXRlOwogCXN0cnVjdCBuZWlnaF9zdGF0aXN0aWNzICpzdCA9IHY7CiAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKQEAgLTI1MDEsNyArMjQ5OCw3IEBACiAKIAlpZiAoIXJldCkgewogCQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCQlzZi0+cHJpdmF0ZSA9IFBERShpbm9kZSk7CisJCXNmLT5wcml2YXRlID0gUERFKGlub2RlKS0+ZGF0YTsKIAl9CiAJcmV0dXJuIHJldDsKIH07CkBAIC0yNTU5LDkgKzI1NTYsMTEgQEAKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKIAorI2RlZmluZSBORUlHSF9WQVJTX01BWCAxOQorCiBzdGF0aWMgc3RydWN0IG5laWdoX3N5c2N0bF90YWJsZSB7CiAJc3RydWN0IGN0bF90YWJsZV9oZWFkZXIgKnN5c2N0bF9oZWFkZXI7Ci0Jc3RydWN0IGN0bF90YWJsZSBuZWlnaF92YXJzW19fTkVUX05FSUdIX01BWF07CisJc3RydWN0IGN0bF90YWJsZSBuZWlnaF92YXJzW05FSUdIX1ZBUlNfTUFYXTsKIAljaGFyICpkZXZfbmFtZTsKIH0gbmVpZ2hfc3lzY3RsX3RlbXBsYXRlIF9fcmVhZF9tb3N0bHkgPSB7CiAJLm5laWdoX3ZhcnMgPSB7CkBAIC0yNjc4LDggKzI2NzcsNyBAQAogfTsKIAogaW50IG5laWdoX3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmVpZ2hfcGFybXMgKnAsCi0JCQkgIGludCBwX2lkLCBpbnQgcGRldl9pZCwgY2hhciAqcF9uYW1lLAotCQkJICBwcm9jX2hhbmRsZXIgKmhhbmRsZXIpCisJCQkgIGNoYXIgKnBfbmFtZSwgcHJvY19oYW5kbGVyICpoYW5kbGVyKQogewogCXN0cnVjdCBuZWlnaF9zeXNjdGxfdGFibGUgKnQ7CiAJY29uc3QgY2hhciAqZGV2X25hbWVfc291cmNlID0gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldHBvbGwuYyBiL25ldC9jb3JlL25ldHBvbGwuYwppbmRleCAwYjRkMGQzLi43YWE2OTcyIDEwMDY0NAotLS0gYS9uZXQvY29yZS9uZXRwb2xsLmMKKysrIGIvbmV0L2NvcmUvbmV0cG9sbC5jCkBAIC00MDcsMTEgKzQwNywyNCBAQAogCV9fYmUzMiBzaXAsIHRpcDsKIAl1bnNpZ25lZCBjaGFyICpzaGE7CiAJc3RydWN0IHNrX2J1ZmYgKnNlbmRfc2tiOwotCXN0cnVjdCBuZXRwb2xsICpucCA9IE5VTEw7CisJc3RydWN0IG5ldHBvbGwgKm5wLCAqdG1wOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGhpdHMgPSAwOwogCi0JaWYgKG5waW5mby0+cnhfbnAgJiYgbnBpbmZvLT5yeF9ucC0+ZGV2ID09IHNrYi0+ZGV2KQotCQlucCA9IG5waW5mby0+cnhfbnA7Ci0JaWYgKCFucCkKKwlpZiAobGlzdF9lbXB0eSgmbnBpbmZvLT5yeF9ucCkpCisJCXJldHVybjsKKworCS8qIEJlZm9yZSBjaGVja2luZyB0aGUgcGFja2V0LCB3ZSBkbyBzb21lIGVhcmx5CisJICAgaW5zcGVjdGlvbiB3aGV0aGVyIHRoaXMgaXMgaW50ZXJlc3RpbmcgYXQgYWxsICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShucCwgdG1wLCAmbnBpbmZvLT5yeF9ucCwgcngpIHsKKwkJaWYgKG5wLT5kZXYgPT0gc2tiLT5kZXYpCisJCQloaXRzKys7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOworCisJLyogTm8gbmV0cG9sbCBzdHJ1Y3QgaXMgdXNpbmcgdGhpcyBkZXYgKi8KKwlpZiAoIWhpdHMpCiAJCXJldHVybjsKIAogCS8qIE5vIGFycCBvbiB0aGlzIGludGVyZmFjZSAqLwpAQCAtNDM3LDc3ICs0NTAsOTEgQEAKIAlhcnBfcHRyICs9IHNrYi0+ZGV2LT5hZGRyX2xlbjsKIAltZW1jcHkoJnNpcCwgYXJwX3B0ciwgNCk7CiAJYXJwX3B0ciArPSA0OwotCS8qIGlmIHdlIGFjdHVhbGx5IGNhcmVkIGFib3V0IGRzdCBodyBhZGRyLCBpdCB3b3VsZCBnZXQgY29waWVkIGhlcmUgKi8KKwkvKiBJZiB3ZSBhY3R1YWxseSBjYXJlZCBhYm91dCBkc3QgaHcgYWRkciwKKwkgICBpdCB3b3VsZCBnZXQgY29waWVkIGhlcmUgKi8KIAlhcnBfcHRyICs9IHNrYi0+ZGV2LT5hZGRyX2xlbjsKIAltZW1jcHkoJnRpcCwgYXJwX3B0ciwgNCk7CiAKIAkvKiBTaG91bGQgd2UgaWdub3JlIGFycD8gKi8KLQlpZiAodGlwICE9IG5wLT5sb2NhbF9pcCB8fAotCSAgICBpcHY0X2lzX2xvb3BiYWNrKHRpcCkgfHwgaXB2NF9pc19tdWx0aWNhc3QodGlwKSkKKwlpZiAoaXB2NF9pc19sb29wYmFjayh0aXApIHx8IGlwdjRfaXNfbXVsdGljYXN0KHRpcCkpCiAJCXJldHVybjsKIAogCXNpemUgPSBhcnBfaGRyX2xlbihza2ItPmRldik7Ci0Jc2VuZF9za2IgPSBmaW5kX3NrYihucCwgc2l6ZSArIExMX0FMTE9DQVRFRF9TUEFDRShucC0+ZGV2KSwKLQkJCSAgICBMTF9SRVNFUlZFRF9TUEFDRShucC0+ZGV2KSk7CiAKLQlpZiAoIXNlbmRfc2tiKQotCQlyZXR1cm47CisJc3Bpbl9sb2NrX2lycXNhdmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShucCwgdG1wLCAmbnBpbmZvLT5yeF9ucCwgcngpIHsKKwkJaWYgKHRpcCAhPSBucC0+bG9jYWxfaXApCisJCQljb250aW51ZTsKIAotCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihzZW5kX3NrYik7Ci0JYXJwID0gKHN0cnVjdCBhcnBoZHIgKikgc2tiX3B1dChzZW5kX3NrYiwgc2l6ZSk7Ci0Jc2VuZF9za2ItPmRldiA9IHNrYi0+ZGV2OwotCXNlbmRfc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0FSUCk7CisJCXNlbmRfc2tiID0gZmluZF9za2IobnAsIHNpemUgKyBMTF9BTExPQ0FURURfU1BBQ0UobnAtPmRldiksCisJCQkJICAgIExMX1JFU0VSVkVEX1NQQUNFKG5wLT5kZXYpKTsKKwkJaWYgKCFzZW5kX3NrYikKKwkJCWNvbnRpbnVlOwogCi0JLyogRmlsbCB0aGUgZGV2aWNlIGhlYWRlciBmb3IgdGhlIEFSUCBmcmFtZSAqLwotCWlmIChkZXZfaGFyZF9oZWFkZXIoc2VuZF9za2IsIHNrYi0+ZGV2LCBwdHlwZSwKLQkJCSAgICBzaGEsIG5wLT5kZXYtPmRldl9hZGRyLAotCQkJICAgIHNlbmRfc2tiLT5sZW4pIDwgMCkgewotCQlrZnJlZV9za2Ioc2VuZF9za2IpOwotCQlyZXR1cm47CisJCXNrYl9yZXNldF9uZXR3b3JrX2hlYWRlcihzZW5kX3NrYik7CisJCWFycCA9IChzdHJ1Y3QgYXJwaGRyICopIHNrYl9wdXQoc2VuZF9za2IsIHNpemUpOworCQlzZW5kX3NrYi0+ZGV2ID0gc2tiLT5kZXY7CisJCXNlbmRfc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QX0FSUCk7CisKKwkJLyogRmlsbCB0aGUgZGV2aWNlIGhlYWRlciBmb3IgdGhlIEFSUCBmcmFtZSAqLworCQlpZiAoZGV2X2hhcmRfaGVhZGVyKHNlbmRfc2tiLCBza2ItPmRldiwgcHR5cGUsCisJCQkJICAgIHNoYSwgbnAtPmRldi0+ZGV2X2FkZHIsCisJCQkJICAgIHNlbmRfc2tiLT5sZW4pIDwgMCkgeworCQkJa2ZyZWVfc2tiKHNlbmRfc2tiKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyoKKwkJICogRmlsbCBvdXQgdGhlIGFycCBwcm90b2NvbCBwYXJ0LgorCQkgKgorCQkgKiB3ZSBvbmx5IHN1cHBvcnQgZXRoZXJuZXQgZGV2aWNlIHR5cGUsCisJCSAqIHdoaWNoIChhY2NvcmRpbmcgdG8gUkZDIDEzOTApIHNob3VsZAorCQkgKiBhbHdheXMgZXF1YWwgMSAoRXRoZXJuZXQpLgorCQkgKi8KKworCQlhcnAtPmFyX2hyZCA9IGh0b25zKG5wLT5kZXYtPnR5cGUpOworCQlhcnAtPmFyX3BybyA9IGh0b25zKEVUSF9QX0lQKTsKKwkJYXJwLT5hcl9obG4gPSBucC0+ZGV2LT5hZGRyX2xlbjsKKwkJYXJwLT5hcl9wbG4gPSA0OworCQlhcnAtPmFyX29wID0gaHRvbnModHlwZSk7CisKKwkJYXJwX3B0ciA9ICh1bnNpZ25lZCBjaGFyICopKGFycCArIDEpOworCQltZW1jcHkoYXJwX3B0ciwgbnAtPmRldi0+ZGV2X2FkZHIsIG5wLT5kZXYtPmFkZHJfbGVuKTsKKwkJYXJwX3B0ciArPSBucC0+ZGV2LT5hZGRyX2xlbjsKKwkJbWVtY3B5KGFycF9wdHIsICZ0aXAsIDQpOworCQlhcnBfcHRyICs9IDQ7CisJCW1lbWNweShhcnBfcHRyLCBzaGEsIG5wLT5kZXYtPmFkZHJfbGVuKTsKKwkJYXJwX3B0ciArPSBucC0+ZGV2LT5hZGRyX2xlbjsKKwkJbWVtY3B5KGFycF9wdHIsICZzaXAsIDQpOworCisJCW5ldHBvbGxfc2VuZF9za2IobnAsIHNlbmRfc2tiKTsKKworCQkvKiBJZiB0aGVyZSBhcmUgc2V2ZXJhbCByeF9ob29rcyBmb3IgdGhlIHNhbWUgYWRkcmVzcywKKwkJICAgd2UncmUgZmluZSBieSBzZW5kaW5nIGEgc2luZ2xlIHJlcGx5ICovCisJCWJyZWFrOwogCX0KLQotCS8qCi0JICogRmlsbCBvdXQgdGhlIGFycCBwcm90b2NvbCBwYXJ0LgotCSAqCi0JICogd2Ugb25seSBzdXBwb3J0IGV0aGVybmV0IGRldmljZSB0eXBlLAotCSAqIHdoaWNoIChhY2NvcmRpbmcgdG8gUkZDIDEzOTApIHNob3VsZCBhbHdheXMgZXF1YWwgMSAoRXRoZXJuZXQpLgotCSAqLwotCi0JYXJwLT5hcl9ocmQgPSBodG9ucyhucC0+ZGV2LT50eXBlKTsKLQlhcnAtPmFyX3BybyA9IGh0b25zKEVUSF9QX0lQKTsKLQlhcnAtPmFyX2hsbiA9IG5wLT5kZXYtPmFkZHJfbGVuOwotCWFycC0+YXJfcGxuID0gNDsKLQlhcnAtPmFyX29wID0gaHRvbnModHlwZSk7Ci0KLQlhcnBfcHRyPSh1bnNpZ25lZCBjaGFyICopKGFycCArIDEpOwotCW1lbWNweShhcnBfcHRyLCBucC0+ZGV2LT5kZXZfYWRkciwgbnAtPmRldi0+YWRkcl9sZW4pOwotCWFycF9wdHIgKz0gbnAtPmRldi0+YWRkcl9sZW47Ci0JbWVtY3B5KGFycF9wdHIsICZ0aXAsIDQpOwotCWFycF9wdHIgKz0gNDsKLQltZW1jcHkoYXJwX3B0ciwgc2hhLCBucC0+ZGV2LT5hZGRyX2xlbik7Ci0JYXJwX3B0ciArPSBucC0+ZGV2LT5hZGRyX2xlbjsKLQltZW1jcHkoYXJwX3B0ciwgJnNpcCwgNCk7Ci0KLQluZXRwb2xsX3NlbmRfc2tiKG5wLCBzZW5kX3NrYik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnBpbmZvLT5yeF9sb2NrLCBmbGFncyk7CiB9CiAKIGludCBfX25ldHBvbGxfcngoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlpbnQgcHJvdG8sIGxlbiwgdWxlbjsKKwlpbnQgaGl0cyA9IDA7CiAJc3RydWN0IGlwaGRyICppcGg7CiAJc3RydWN0IHVkcGhkciAqdWg7Ci0Jc3RydWN0IG5ldHBvbGxfaW5mbyAqbnBpID0gc2tiLT5kZXYtPm5waW5mbzsKLQlzdHJ1Y3QgbmV0cG9sbCAqbnAgPSBucGktPnJ4X25wOworCXN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbyA9IHNrYi0+ZGV2LT5ucGluZm87CisJc3RydWN0IG5ldHBvbGwgKm5wLCAqdG1wOwogCi0JaWYgKCFucCkKKwlpZiAobGlzdF9lbXB0eSgmbnBpbmZvLT5yeF9ucCkpCiAJCWdvdG8gb3V0OworCiAJaWYgKHNrYi0+ZGV2LT50eXBlICE9IEFSUEhSRF9FVEhFUikKIAkJZ290byBvdXQ7CiAKIAkvKiBjaGVjayBpZiBuZXRwb2xsIGNsaWVudHMgbmVlZCBBUlAgKi8KIAlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9BUlApICYmCiAJICAgIGF0b21pY19yZWFkKCZ0cmFwcGVkKSkgewotCQlza2JfcXVldWVfdGFpbCgmbnBpLT5hcnBfdHgsIHNrYik7CisJCXNrYl9xdWV1ZV90YWlsKCZucGluZm8tPmFycF90eCwgc2tiKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC01NTEsMTYgKzU3OCwyMyBAQAogCQlnb3RvIG91dDsKIAlpZiAoY2hlY2tzdW1fdWRwKHNrYiwgdWgsIHVsZW4sIGlwaC0+c2FkZHIsIGlwaC0+ZGFkZHIpKQogCQlnb3RvIG91dDsKLQlpZiAobnAtPmxvY2FsX2lwICYmIG5wLT5sb2NhbF9pcCAhPSBpcGgtPmRhZGRyKQotCQlnb3RvIG91dDsKLQlpZiAobnAtPnJlbW90ZV9pcCAmJiBucC0+cmVtb3RlX2lwICE9IGlwaC0+c2FkZHIpCi0JCWdvdG8gb3V0OwotCWlmIChucC0+bG9jYWxfcG9ydCAmJiBucC0+bG9jYWxfcG9ydCAhPSBudG9ocyh1aC0+ZGVzdCkpCi0JCWdvdG8gb3V0OwogCi0JbnAtPnJ4X2hvb2sobnAsIG50b2hzKHVoLT5zb3VyY2UpLAotCQkgICAgKGNoYXIgKikodWgrMSksCi0JCSAgICB1bGVuIC0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUobnAsIHRtcCwgJm5waW5mby0+cnhfbnAsIHJ4KSB7CisJCWlmIChucC0+bG9jYWxfaXAgJiYgbnAtPmxvY2FsX2lwICE9IGlwaC0+ZGFkZHIpCisJCQljb250aW51ZTsKKwkJaWYgKG5wLT5yZW1vdGVfaXAgJiYgbnAtPnJlbW90ZV9pcCAhPSBpcGgtPnNhZGRyKQorCQkJY29udGludWU7CisJCWlmIChucC0+bG9jYWxfcG9ydCAmJiBucC0+bG9jYWxfcG9ydCAhPSBudG9ocyh1aC0+ZGVzdCkpCisJCQljb250aW51ZTsKKworCQlucC0+cnhfaG9vayhucCwgbnRvaHModWgtPnNvdXJjZSksCisJCQkgICAgICAgKGNoYXIgKikodWgrMSksCisJCQkgICAgICAgdWxlbiAtIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7CisJCWhpdHMrKzsKKwl9CisKKwlpZiAoIWhpdHMpCisJCWdvdG8gb3V0OwogCiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDE7CkBAIC02ODQsNiArNzE4LDcgQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IE5VTEw7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCXN0cnVjdCBuZXRwb2xsX2luZm8gKm5waW5mbzsKKwlzdHJ1Y3QgbmV0cG9sbCAqbnBlLCAqdG1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIApAQCAtNzA0LDcgKzczOSw3IEBACiAJCX0KIAogCQlucGluZm8tPnJ4X2ZsYWdzID0gMDsKLQkJbnBpbmZvLT5yeF9ucCA9IE5VTEw7CisJCUlOSVRfTElTVF9IRUFEKCZucGluZm8tPnJ4X25wKTsKIAogCQlzcGluX2xvY2tfaW5pdCgmbnBpbmZvLT5yeF9sb2NrKTsKIAkJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmbnBpbmZvLT5hcnBfdHgpOwpAQCAtNzg1LDcgKzgyMCw3IEBACiAJaWYgKG5wLT5yeF9ob29rKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZucGluZm8tPnJ4X2xvY2ssIGZsYWdzKTsKIAkJbnBpbmZvLT5yeF9mbGFncyB8PSBORVRQT0xMX1JYX0VOQUJMRUQ7Ci0JCW5waW5mby0+cnhfbnAgPSBucDsKKwkJbGlzdF9hZGRfdGFpbCgmbnAtPnJ4LCAmbnBpbmZvLT5yeF9ucCk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOwogCX0KIApAQCAtODAxLDkgKzgzNiwxNiBAQAogCXJldHVybiAwOwogCiAgcmVsZWFzZToKLQlpZiAoIW5kZXYtPm5waW5mbykKKwlpZiAoIW5kZXYtPm5waW5mbykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnBpbmZvLT5yeF9sb2NrLCBmbGFncyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShucGUsIHRtcCwgJm5waW5mby0+cnhfbnAsIHJ4KSB7CisJCQlucGUtPmRldiA9IE5VTEw7CisJCX0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbnBpbmZvLT5yeF9sb2NrLCBmbGFncyk7CisKIAkJa2ZyZWUobnBpbmZvKTsKLQlucC0+ZGV2ID0gTlVMTDsKKwl9CisKIAlkZXZfcHV0KG5kZXYpOwogCXJldHVybiBlcnI7CiB9CkBAIC04MjMsMTAgKzg2NSwxMSBAQAogCWlmIChucC0+ZGV2KSB7CiAJCW5waW5mbyA9IG5wLT5kZXYtPm5waW5mbzsKIAkJaWYgKG5waW5mbykgewotCQkJaWYgKG5waW5mby0+cnhfbnAgPT0gbnApIHsKKwkJCWlmICghbGlzdF9lbXB0eSgmbnBpbmZvLT5yeF9ucCkpIHsKIAkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmbnBpbmZvLT5yeF9sb2NrLCBmbGFncyk7Ci0JCQkJbnBpbmZvLT5yeF9ucCA9IE5VTEw7Ci0JCQkJbnBpbmZvLT5yeF9mbGFncyAmPSB+TkVUUE9MTF9SWF9FTkFCTEVEOworCQkJCWxpc3RfZGVsKCZucC0+cngpOworCQkJCWlmIChsaXN0X2VtcHR5KCZucGluZm8tPnJ4X25wKSkKKwkJCQkJbnBpbmZvLT5yeF9mbGFncyAmPSB+TkVUUE9MTF9SWF9FTkFCTEVEOwogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm5waW5mby0+cnhfbG9jaywgZmxhZ3MpOwogCQkJfQogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IDJlNjkyYWYuLjQzOTIzODEgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BrdGdlbi5jCisrKyBiL25ldC9jb3JlL3BrdGdlbi5jCkBAIC0yMTg4LDEyICsyMTg4LDEzIEBACiAvKiBJZiB0aGVyZSB3YXMgYWxyZWFkeSBhbiBJUFNFQyBTQSwgd2Uga2VlcCBpdCBhcyBpcywgZWxzZQogICogd2UgZ28gbG9vayBmb3IgaXQgLi4uCiAqLworI2RlZmluZSBEVU1NWV9NQVJLIDAKIHN0YXRpYyB2b2lkIGdldF9pcHNlY19zYShzdHJ1Y3QgcGt0Z2VuX2RldiAqcGt0X2RldiwgaW50IGZsb3cpCiB7CiAJc3RydWN0IHhmcm1fc3RhdGUgKnggPSBwa3RfZGV2LT5mbG93c1tmbG93XS54OwogCWlmICgheCkgewogCQkvKnNsb3cgcGF0aDogd2UgZG9udCBhbHJlYWR5IGhhdmUgeGZybV9zdGF0ZSovCi0JCXggPSB4ZnJtX3N0YXRlb25seV9maW5kKCZpbml0X25ldCwKKwkJeCA9IHhmcm1fc3RhdGVvbmx5X2ZpbmQoJmluaXRfbmV0LCBEVU1NWV9NQVJLLAogCQkJCQkoeGZybV9hZGRyZXNzX3QgKikmcGt0X2Rldi0+Y3VyX2RhZGRyLAogCQkJCQkoeGZybV9hZGRyZXNzX3QgKikmcGt0X2Rldi0+Y3VyX3NhZGRyLAogCQkJCQlBRl9JTkVULApkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwppbmRleCA0YzdkM2Y2Li40NTY4MTIwIDEwMDY0NAotLS0gYS9uZXQvY29yZS9ydG5ldGxpbmsuYworKysgYi9uZXQvY29yZS9ydG5ldGxpbmsuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hZGRyLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTU1Niw2ICs1NTcsMTkgQEAKIAl9CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnRubF9kZXZfY29tYmluZV9mbGFncyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJCQkgICBjb25zdCBzdHJ1Y3QgaWZpbmZvbXNnICppZm0pCit7CisJdW5zaWduZWQgaW50IGZsYWdzID0gaWZtLT5pZmlfZmxhZ3M7CisKKwkvKiBidWd3YXJkcyBjb21wYXRpYmlsaXR5OiBpZmlfY2hhbmdlID09IDAgaXMgdHJlYXRlZCBhcyB+MCAqLworCWlmIChpZm0tPmlmaV9jaGFuZ2UpCisJCWZsYWdzID0gKGZsYWdzICYgaWZtLT5pZmlfY2hhbmdlKSB8CisJCQkoZGV2LT5mbGFncyAmIH5pZm0tPmlmaV9jaGFuZ2UpOworCisJcmV0dXJuIGZsYWdzOworfQorCiBzdGF0aWMgdm9pZCBjb3B5X3J0bmxfbGlua19zdGF0cyhzdHJ1Y3QgcnRubF9saW5rX3N0YXRzICphLAogCQkJCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqYikKIHsKQEAgLTU4OCw2ICs2MDIsMTUgQEAKIAlhLT50eF9jb21wcmVzc2VkID0gYi0+dHhfY29tcHJlc3NlZDsKIH07CiAKK3N0YXRpYyBpbmxpbmUgaW50IHJ0bmxfdmZpbmZvX3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwlpZiAoZGV2LT5kZXYucGFyZW50ICYmIGRldl9pc19wY2koZGV2LT5kZXYucGFyZW50KSkKKwkJcmV0dXJuIGRldl9udW1fdmYoZGV2LT5kZXYucGFyZW50KSAqCisJCQlzaXplb2Yoc3RydWN0IGlmbGFfdmZfaW5mbyk7CisJZWxzZQorCQlyZXR1cm4gMDsKK30KKwogc3RhdGljIGlubGluZSBzaXplX3QgaWZfbmxtc2dfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJldHVybiBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmaW5mb21zZykpCkBAIC02MDUsNiArNjI4LDggQEAKIAkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBJRkxBX01BU1RFUiAqLwogCSAgICAgICArIG5sYV90b3RhbF9zaXplKDEpIC8qIElGTEFfT1BFUlNUQVRFICovCiAJICAgICAgICsgbmxhX3RvdGFsX3NpemUoMSkgLyogSUZMQV9MSU5LTU9ERSAqLworCSAgICAgICArIG5sYV90b3RhbF9zaXplKDQpIC8qIElGTEFfTlVNX1ZGICovCisJICAgICAgICsgbmxhX3RvdGFsX3NpemUocnRubF92ZmluZm9fc2l6ZShkZXYpKSAvKiBJRkxBX1ZGSU5GTyAqLwogCSAgICAgICArIHJ0bmxfbGlua19nZXRfc2l6ZShkZXYpOyAvKiBJRkxBX0xJTktJTkZPICovCiB9CiAKQEAgLTY3Myw2ICs2OTgsMTcgQEAKIAlzdGF0cyA9IGRldl9nZXRfc3RhdHMoZGV2KTsKIAljb3B5X3J0bmxfbGlua19zdGF0cyhubGFfZGF0YShhdHRyKSwgc3RhdHMpOwogCisJaWYgKGRldi0+bmV0ZGV2X29wcy0+bmRvX2dldF92Zl9jb25maWcgJiYgZGV2LT5kZXYucGFyZW50KSB7CisJCWludCBpOworCQlzdHJ1Y3QgaWZsYV92Zl9pbmZvIGl2aTsKKworCQlOTEFfUFVUX1UzMihza2IsIElGTEFfTlVNX1ZGLCBkZXZfbnVtX3ZmKGRldi0+ZGV2LnBhcmVudCkpOworCQlmb3IgKGkgPSAwOyBpIDwgZGV2X251bV92ZihkZXYtPmRldi5wYXJlbnQpOyBpKyspIHsKKwkJCWlmIChkZXYtPm5ldGRldl9vcHMtPm5kb19nZXRfdmZfY29uZmlnKGRldiwgaSwgJml2aSkpCisJCQkJYnJlYWs7CisJCQlOTEFfUFVUKHNrYiwgSUZMQV9WRklORk8sIHNpemVvZihpdmkpLCAmaXZpKTsKKwkJfQorCX0KIAlpZiAoZGV2LT5ydG5sX2xpbmtfb3BzKSB7CiAJCWlmIChydG5sX2xpbmtfZmlsbChza2IsIGRldikgPCAwKQogCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CkBAIC03MzMsNiArNzY5LDEyIEBACiAJW0lGTEFfTElOS0lORk9dCQk9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCiAJW0lGTEFfTkVUX05TX1BJRF0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAogCVtJRkxBX0lGQUxJQVNdCSAgICAgICAgPSB7IC50eXBlID0gTkxBX1NUUklORywgLmxlbiA9IElGQUxJQVNaLTEgfSwKKwlbSUZMQV9WRl9NQUNdCQk9IHsgLnR5cGUgPSBOTEFfQklOQVJZLAorCQkJCSAgICAubGVuID0gc2l6ZW9mKHN0cnVjdCBpZmxhX3ZmX21hYykgfSwKKwlbSUZMQV9WRl9WTEFOXQkJPSB7IC50eXBlID0gTkxBX0JJTkFSWSwKKwkJCQkgICAgLmxlbiA9IHNpemVvZihzdHJ1Y3QgaWZsYV92Zl92bGFuKSB9LAorCVtJRkxBX1ZGX1RYX1JBVEVdCT0geyAudHlwZSA9IE5MQV9CSU5BUlksCisJCQkJICAgIC5sZW4gPSBzaXplb2Yoc3RydWN0IGlmbGFfdmZfdHhfcmF0ZSkgfSwKIH07CiBFWFBPUlRfU1lNQk9MKGlmbGFfcG9saWN5KTsKIApAQCAtODgzLDEzICs5MjUsNyBAQAogCX0KIAogCWlmIChpZm0tPmlmaV9mbGFncyB8fCBpZm0tPmlmaV9jaGFuZ2UpIHsKLQkJdW5zaWduZWQgaW50IGZsYWdzID0gaWZtLT5pZmlfZmxhZ3M7Ci0KLQkJLyogYnVnd2FyZHMgY29tcGF0aWJpbGl0eTogaWZpX2NoYW5nZSA9PSAwIGlzIHRyZWF0ZWQgYXMgfjAgKi8KLQkJaWYgKGlmbS0+aWZpX2NoYW5nZSkKLQkJCWZsYWdzID0gKGZsYWdzICYgaWZtLT5pZmlfY2hhbmdlKSB8Ci0JCQkJKGRldi0+ZmxhZ3MgJiB+aWZtLT5pZmlfY2hhbmdlKTsKLQkJZXJyID0gZGV2X2NoYW5nZV9mbGFncyhkZXYsIGZsYWdzKTsKKwkJZXJyID0gZGV2X2NoYW5nZV9mbGFncyhkZXYsIHJ0bmxfZGV2X2NvbWJpbmVfZmxhZ3MoZGV2LCBpZm0pKTsKIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIGVycm91dDsKIAl9CkBAIC05MDYsNiArOTQyLDQxIEBACiAJCXdyaXRlX3VubG9ja19iaCgmZGV2X2Jhc2VfbG9jayk7CiAJfQogCisJaWYgKHRiW0lGTEFfVkZfTUFDXSkgeworCQlzdHJ1Y3QgaWZsYV92Zl9tYWMgKml2bTsKKwkJaXZtID0gbmxhX2RhdGEodGJbSUZMQV9WRl9NQUNdKTsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWlmIChvcHMtPm5kb19zZXRfdmZfbWFjKQorCQkJZXJyID0gb3BzLT5uZG9fc2V0X3ZmX21hYyhkZXYsIGl2bS0+dmYsIGl2bS0+bWFjKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycm91dDsKKwkJbW9kaWZpZWQgPSAxOworCX0KKworCWlmICh0YltJRkxBX1ZGX1ZMQU5dKSB7CisJCXN0cnVjdCBpZmxhX3ZmX3ZsYW4gKml2djsKKwkJaXZ2ID0gbmxhX2RhdGEodGJbSUZMQV9WRl9WTEFOXSk7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlpZiAob3BzLT5uZG9fc2V0X3ZmX3ZsYW4pCisJCQllcnIgPSBvcHMtPm5kb19zZXRfdmZfdmxhbihkZXYsIGl2di0+dmYsCisJCQkJCQkgICBpdnYtPnZsYW4sCisJCQkJCQkgICBpdnYtPnFvcyk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJvdXQ7CisJCW1vZGlmaWVkID0gMTsKKwl9CisJZXJyID0gMDsKKworCWlmICh0YltJRkxBX1ZGX1RYX1JBVEVdKSB7CisJCXN0cnVjdCBpZmxhX3ZmX3R4X3JhdGUgKml2dDsKKwkJaXZ0ID0gbmxhX2RhdGEodGJbSUZMQV9WRl9UWF9SQVRFXSk7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlpZiAob3BzLT5uZG9fc2V0X3ZmX3R4X3JhdGUpCisJCQllcnIgPSBvcHMtPm5kb19zZXRfdmZfdHhfcmF0ZShkZXYsIGl2dC0+dmYsIGl2dC0+cmF0ZSk7CisJCWlmIChlcnIgPCAwKQorCQkJZ290byBlcnJvdXQ7CisJCW1vZGlmaWVkID0gMTsKKwl9CiAJZXJyID0gMDsKIAogZXJyb3V0OgpAQCAtOTk3LDYgKzEwNjgsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAoraW50IHJ0bmxfY29uZmlndXJlX2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IGlmaW5mb21zZyAqaWZtKQoreworCXVuc2lnbmVkIGludCBvbGRfZmxhZ3M7CisJaW50IGVycjsKKworCW9sZF9mbGFncyA9IGRldi0+ZmxhZ3M7CisJaWYgKGlmbSAmJiAoaWZtLT5pZmlfZmxhZ3MgfHwgaWZtLT5pZmlfY2hhbmdlKSkgeworCQllcnIgPSBfX2Rldl9jaGFuZ2VfZmxhZ3MoZGV2LCBydG5sX2Rldl9jb21iaW5lX2ZsYWdzKGRldiwgaWZtKSk7CisJCWlmIChlcnIgPCAwKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlkZXYtPnJ0bmxfbGlua19zdGF0ZSA9IFJUTkxfTElOS19JTklUSUFMSVpFRDsKKwlydG1zZ19pZmluZm8oUlRNX05FV0xJTkssIGRldiwgfjBVKTsKKworCV9fZGV2X25vdGlmeV9mbGFncyhkZXYsIG9sZF9mbGFncyk7CisJcmV0dXJuIDA7Cit9CitFWFBPUlRfU1lNQk9MKHJ0bmxfY29uZmlndXJlX2xpbmspOworCiBzdHJ1Y3QgbmV0X2RldmljZSAqcnRubF9jcmVhdGVfbGluayhzdHJ1Y3QgbmV0ICpzcmNfbmV0LCBzdHJ1Y3QgbmV0ICpuZXQsCiAJY2hhciAqaWZuYW1lLCBjb25zdCBzdHJ1Y3QgcnRubF9saW5rX29wcyAqb3BzLCBzdHJ1Y3QgbmxhdHRyICp0YltdKQogewpAQCAtMTAxOCw2ICsxMTA5LDcgQEAKIAogCWRldl9uZXRfc2V0KGRldiwgbmV0KTsKIAlkZXYtPnJ0bmxfbGlua19vcHMgPSBvcHM7CisJZGV2LT5ydG5sX2xpbmtfc3RhdGUgPSBSVE5MX0xJTktfSU5JVElBTElaSU5HOwogCWRldi0+cmVhbF9udW1fdHhfcXVldWVzID0gcmVhbF9udW1fcXVldWVzOwogCiAJaWYgKHN0cmNocihkZXYtPm5hbWUsICclJykpIHsKQEAgLTExNDcsNyArMTIzOSw3IEBACiAJCWlmICghKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9DUkVBVEUpKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAKLQkJaWYgKGlmbS0+aWZpX2luZGV4IHx8IGlmbS0+aWZpX2ZsYWdzIHx8IGlmbS0+aWZpX2NoYW5nZSkKKwkJaWYgKGlmbS0+aWZpX2luZGV4KQogCQkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCQlpZiAodGJbSUZMQV9NQVBdIHx8IHRiW0lGTEFfTUFTVEVSXSB8fCB0YltJRkxBX1BST1RJTkZPXSkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTExNzgsOSArMTI3MCwxNSBAQAogCQkJZXJyID0gb3BzLT5uZXdsaW5rKG5ldCwgZGV2LCB0YiwgZGF0YSk7CiAJCWVsc2UKIAkJCWVyciA9IHJlZ2lzdGVyX25ldGRldmljZShkZXYpOwotCQlpZiAoZXJyIDwgMCAmJiAhSVNfRVJSKGRldikpCisJCWlmIChlcnIgPCAwICYmICFJU19FUlIoZGV2KSkgewogCQkJZnJlZV9uZXRkZXYoZGV2KTsKKwkJCWdvdG8gb3V0OworCQl9CiAKKwkJZXJyID0gcnRubF9jb25maWd1cmVfbGluayhkZXYsIGlmbSk7CisJCWlmIChlcnIgPCAwKQorCQkJdW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKK291dDoKIAkJcHV0X25ldChkZXN0X25ldCk7CiAJCXJldHVybiBlcnI7CiAJfQpAQCAtMTM2OSwxNyArMTQ2NywxNCBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBwdHI7CiAKIAlzd2l0Y2ggKGV2ZW50KSB7Ci0JY2FzZSBORVRERVZfVU5SRUdJU1RFUjoKLQkJcnRtc2dfaWZpbmZvKFJUTV9ERUxMSU5LLCBkZXYsIH4wVSk7Ci0JCWJyZWFrOwogCWNhc2UgTkVUREVWX1VQOgogCWNhc2UgTkVUREVWX0RPV046Ci0JCXJ0bXNnX2lmaW5mbyhSVE1fTkVXTElOSywgZGV2LCBJRkZfVVB8SUZGX1JVTk5JTkcpOwotCQlicmVhazsKKwljYXNlIE5FVERFVl9QUkVfVVA6CiAJY2FzZSBORVRERVZfUE9TVF9JTklUOgogCWNhc2UgTkVUREVWX1JFR0lTVEVSOgogCWNhc2UgTkVUREVWX0NIQU5HRToKIAljYXNlIE5FVERFVl9HT0lOR19ET1dOOgorCWNhc2UgTkVUREVWX1VOUkVHSVNURVI6CiAJY2FzZSBORVRERVZfVU5SRUdJU1RFUl9CQVRDSDoKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTEzOTQsNyArMTQ4OSw3IEBACiB9OwogCiAKLXN0YXRpYyBpbnQgcnRuZXRsaW5rX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBydG5ldGxpbmtfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBzb2NrICpzazsKIAlzayA9IG5ldGxpbmtfa2VybmVsX2NyZWF0ZShuZXQsIE5FVExJTktfUk9VVEUsIFJUTkxHUlBfTUFYLApAQCAtMTQwNSw3ICsxNTAwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcnRuZXRsaW5rX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgcnRuZXRsaW5rX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAluZXRsaW5rX2tlcm5lbF9yZWxlYXNlKG5ldC0+cnRubCk7CiAJbmV0LT5ydG5sID0gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3NjbS5jIGIvbmV0L2NvcmUvc2NtLmMKaW5kZXggYjdiYTkxYi4uOWIyNjQ2MyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvc2NtLmMKKysrIGIvbmV0L2NvcmUvc2NtLmMKQEAgLTE1Niw2ICsxNTYsOCBAQAogCQlzd2l0Y2ggKGNtc2ctPmNtc2dfdHlwZSkKIAkJewogCQljYXNlIFNDTV9SSUdIVFM6CisJCQlpZiAoIXNvY2stPm9wcyB8fCBzb2NrLT5vcHMtPmZhbWlseSAhPSBQRl9VTklYKQorCQkJCWdvdG8gZXJyb3I7CiAJCQllcnI9c2NtX2ZwX2NvcHkoY21zZywgJnAtPmZwKTsKIAkJCWlmIChlcnI8MCkKIAkJCQlnb3RvIGVycm9yOwpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvc29jay5jIGIvbmV0L2NvcmUvc29jay5jCmluZGV4IDMwNWNiYTQuLmZjZDM5N2EgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3NvY2suYworKysgYi9uZXQvY29yZS9zb2NrLmMKQEAgLTc0MSw3ICs3NDEsNyBAQAogCQlzdHJ1Y3QgdGltZXZhbCB0bTsKIAl9IHY7CiAKLQl1bnNpZ25lZCBpbnQgbHYgPSBzaXplb2YoaW50KTsKKwlpbnQgbHYgPSBzaXplb2YoaW50KTsKIAlpbnQgbGVuOwogCiAJaWYgKGdldF91c2VyKGxlbiwgb3B0bGVuKSkKQEAgLTIxNDEsMTMgKzIxNDEsMTMgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNvY2tfcHJvdF9pbnVzZV9nZXQpOwogCi1zdGF0aWMgaW50IHNvY2tfaW51c2VfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IHNvY2tfaW51c2VfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCW5ldC0+Y29yZS5pbnVzZSA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgcHJvdF9pbnVzZSk7CiAJcmV0dXJuIG5ldC0+Y29yZS5pbnVzZSA/IDAgOiAtRU5PTUVNOwogfQogCi1zdGF0aWMgdm9pZCBzb2NrX2ludXNlX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgc29ja19pbnVzZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJZnJlZV9wZXJjcHUobmV0LT5jb3JlLmludXNlKTsKIH0KQEAgLTIyMjksMTMgKzIyMjksMTAgQEAKIAkJfQogCiAJCWlmIChwcm90LT5yc2tfcHJvdCAhPSBOVUxMKSB7Ci0JCQlzdGF0aWMgY29uc3QgY2hhciBtYXNrW10gPSAicmVxdWVzdF9zb2NrXyVzIjsKLQotCQkJcHJvdC0+cnNrX3Byb3QtPnNsYWJfbmFtZSA9IGttYWxsb2Moc3RybGVuKHByb3QtPm5hbWUpICsgc2l6ZW9mKG1hc2spIC0gMSwgR0ZQX0tFUk5FTCk7CisJCQlwcm90LT5yc2tfcHJvdC0+c2xhYl9uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJyZXF1ZXN0X3NvY2tfJXMiLCBwcm90LT5uYW1lKTsKIAkJCWlmIChwcm90LT5yc2tfcHJvdC0+c2xhYl9uYW1lID09IE5VTEwpCiAJCQkJZ290byBvdXRfZnJlZV9zb2NrX3NsYWI7CiAKLQkJCXNwcmludGYocHJvdC0+cnNrX3Byb3QtPnNsYWJfbmFtZSwgbWFzaywgcHJvdC0+bmFtZSk7CiAJCQlwcm90LT5yc2tfcHJvdC0+c2xhYiA9IGttZW1fY2FjaGVfY3JlYXRlKHByb3QtPnJza19wcm90LT5zbGFiX25hbWUsCiAJCQkJCQkJCSBwcm90LT5yc2tfcHJvdC0+b2JqX3NpemUsIDAsCiAJCQkJCQkJCSBTTEFCX0hXQ0FDSEVfQUxJR04sIE5VTEwpOwpAQCAtMjI0OCwxNCArMjI0NSwxMSBAQAogCQl9CiAKIAkJaWYgKHByb3QtPnR3c2tfcHJvdCAhPSBOVUxMKSB7Ci0JCQlzdGF0aWMgY29uc3QgY2hhciBtYXNrW10gPSAidHdfc29ja18lcyI7Ci0KLQkJCXByb3QtPnR3c2tfcHJvdC0+dHdza19zbGFiX25hbWUgPSBrbWFsbG9jKHN0cmxlbihwcm90LT5uYW1lKSArIHNpemVvZihtYXNrKSAtIDEsIEdGUF9LRVJORUwpOworCQkJcHJvdC0+dHdza19wcm90LT50d3NrX3NsYWJfbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAidHdfc29ja18lcyIsIHByb3QtPm5hbWUpOwogCiAJCQlpZiAocHJvdC0+dHdza19wcm90LT50d3NrX3NsYWJfbmFtZSA9PSBOVUxMKQogCQkJCWdvdG8gb3V0X2ZyZWVfcmVxdWVzdF9zb2NrX3NsYWI7CiAKLQkJCXNwcmludGYocHJvdC0+dHdza19wcm90LT50d3NrX3NsYWJfbmFtZSwgbWFzaywgcHJvdC0+bmFtZSk7CiAJCQlwcm90LT50d3NrX3Byb3QtPnR3c2tfc2xhYiA9CiAJCQkJa21lbV9jYWNoZV9jcmVhdGUocHJvdC0+dHdza19wcm90LT50d3NrX3NsYWJfbmFtZSwKIAkJCQkJCSAgcHJvdC0+dHdza19wcm90LT50d3NrX29ial9zaXplLApkaWZmIC0tZ2l0IGEvbmV0L2RjYi9kY2JubC5jIGIvbmV0L2RjYi9kY2JubC5jCmluZGV4IGRiOWY1YjMuLjgxM2UzOTkgMTAwNjQ0Ci0tLSBhL25ldC9kY2IvZGNibmwuYworKysgYi9uZXQvZGNiL2RjYm5sLmMKQEAgLTU0LDcgKzU0LDcgQEAKIC8qKioqKioqKioqKioqKioqIERDQiBhdHRyaWJ1dGUgcG9saWNpZXMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogRENCIG5ldGxpbmsgYXR0cmlidXRlcyBwb2xpY3kgKi8KLXN0YXRpYyBzdHJ1Y3QgbmxhX3BvbGljeSBkY2JubF9ydG5sX3BvbGljeVtEQ0JfQVRUUl9NQVggKyAxXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkY2JubF9ydG5sX3BvbGljeVtEQ0JfQVRUUl9NQVggKyAxXSA9IHsKIAlbRENCX0FUVFJfSUZOQU1FXSAgICAgID0gey50eXBlID0gTkxBX05VTF9TVFJJTkcsIC5sZW4gPSBJRk5BTVNJWiAtIDF9LAogCVtEQ0JfQVRUUl9TVEFURV0gICAgICAgPSB7LnR5cGUgPSBOTEFfVTh9LAogCVtEQ0JfQVRUUl9QRkNfQ0ZHXSAgICAgPSB7LnR5cGUgPSBOTEFfTkVTVEVEfSwKQEAgLTY4LDcgKzY4LDcgQEAKIH07CiAKIC8qIERDQiBwcmlvcml0eSBmbG93IGNvbnRyb2wgdG8gVXNlciBQcmlvcml0eSBuZXN0ZWQgYXR0cmlidXRlcyAqLwotc3RhdGljIHN0cnVjdCBubGFfcG9saWN5IGRjYm5sX3BmY191cF9uZXN0W0RDQl9QRkNfVVBfQVRUUl9NQVggKyAxXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkY2JubF9wZmNfdXBfbmVzdFtEQ0JfUEZDX1VQX0FUVFJfTUFYICsgMV0gPSB7CiAJW0RDQl9QRkNfVVBfQVRUUl8wXSAgID0gey50eXBlID0gTkxBX1U4fSwKIAlbRENCX1BGQ19VUF9BVFRSXzFdICAgPSB7LnR5cGUgPSBOTEFfVTh9LAogCVtEQ0JfUEZDX1VQX0FUVFJfMl0gICA9IHsudHlwZSA9IE5MQV9VOH0sCkBAIC04MSw3ICs4MSw3IEBACiB9OwogCiAvKiBEQ0IgcHJpb3JpdHkgZ3JvdXBpbmcgbmVzdGVkIGF0dHJpYnV0ZXMgKi8KLXN0YXRpYyBzdHJ1Y3QgbmxhX3BvbGljeSBkY2JubF9wZ19uZXN0W0RDQl9QR19BVFRSX01BWCArIDFdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGRjYm5sX3BnX25lc3RbRENCX1BHX0FUVFJfTUFYICsgMV0gPSB7CiAJW0RDQl9QR19BVFRSX1RDXzBdICAgICAgPSB7LnR5cGUgPSBOTEFfTkVTVEVEfSwKIAlbRENCX1BHX0FUVFJfVENfMV0gICAgICA9IHsudHlwZSA9IE5MQV9ORVNURUR9LAogCVtEQ0JfUEdfQVRUUl9UQ18yXSAgICAgID0gey50eXBlID0gTkxBX05FU1RFRH0sCkBAIC0xMDMsNyArMTAzLDcgQEAKIH07CiAKIC8qIERDQiB0cmFmZmljIGNsYXNzIG5lc3RlZCBhdHRyaWJ1dGVzLiAqLwotc3RhdGljIHN0cnVjdCBubGFfcG9saWN5IGRjYm5sX3RjX3BhcmFtX25lc3RbRENCX1RDX0FUVFJfUEFSQU1fTUFYICsgMV0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZGNibmxfdGNfcGFyYW1fbmVzdFtEQ0JfVENfQVRUUl9QQVJBTV9NQVggKyAxXSA9IHsKIAlbRENCX1RDX0FUVFJfUEFSQU1fUEdJRF0gICAgICAgICAgICA9IHsudHlwZSA9IE5MQV9VOH0sCiAJW0RDQl9UQ19BVFRSX1BBUkFNX1VQX01BUFBJTkddICAgICAgPSB7LnR5cGUgPSBOTEFfVTh9LAogCVtEQ0JfVENfQVRUUl9QQVJBTV9TVFJJQ1RfUFJJT10gICAgID0gey50eXBlID0gTkxBX1U4fSwKQEAgLTExMiw3ICsxMTIsNyBAQAogfTsKIAogLyogRENCIGNhcGFiaWxpdGllcyBuZXN0ZWQgYXR0cmlidXRlcy4gKi8KLXN0YXRpYyBzdHJ1Y3QgbmxhX3BvbGljeSBkY2JubF9jYXBfbmVzdFtEQ0JfQ0FQX0FUVFJfTUFYICsgMV0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZGNibmxfY2FwX25lc3RbRENCX0NBUF9BVFRSX01BWCArIDFdID0gewogCVtEQ0JfQ0FQX0FUVFJfQUxMXSAgICAgPSB7LnR5cGUgPSBOTEFfRkxBR30sCiAJW0RDQl9DQVBfQVRUUl9QR10gICAgICA9IHsudHlwZSA9IE5MQV9VOH0sCiAJW0RDQl9DQVBfQVRUUl9QRkNdICAgICA9IHsudHlwZSA9IE5MQV9VOH0sCkBAIC0xMjQsMTQgKzEyNCwxNCBAQAogfTsKIAogLyogRENCIGNhcGFiaWxpdGllcyBuZXN0ZWQgYXR0cmlidXRlcy4gKi8KLXN0YXRpYyBzdHJ1Y3QgbmxhX3BvbGljeSBkY2JubF9udW10Y3NfbmVzdFtEQ0JfTlVNVENTX0FUVFJfTUFYICsgMV0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZGNibmxfbnVtdGNzX25lc3RbRENCX05VTVRDU19BVFRSX01BWCArIDFdID0gewogCVtEQ0JfTlVNVENTX0FUVFJfQUxMXSAgICAgPSB7LnR5cGUgPSBOTEFfRkxBR30sCiAJW0RDQl9OVU1UQ1NfQVRUUl9QR10gICAgICA9IHsudHlwZSA9IE5MQV9VOH0sCiAJW0RDQl9OVU1UQ1NfQVRUUl9QRkNdICAgICA9IHsudHlwZSA9IE5MQV9VOH0sCiB9OwogCiAvKiBEQ0IgQkNOIG5lc3RlZCBhdHRyaWJ1dGVzLiAqLwotc3RhdGljIHN0cnVjdCBubGFfcG9saWN5IGRjYm5sX2Jjbl9uZXN0W0RDQl9CQ05fQVRUUl9NQVggKyAxXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBkY2JubF9iY25fbmVzdFtEQ0JfQkNOX0FUVFJfTUFYICsgMV0gPSB7CiAJW0RDQl9CQ05fQVRUUl9SUF8wXSAgICAgICAgID0gey50eXBlID0gTkxBX1U4fSwKIAlbRENCX0JDTl9BVFRSX1JQXzFdICAgICAgICAgPSB7LnR5cGUgPSBOTEFfVTh9LAogCVtEQ0JfQkNOX0FUVFJfUlBfMl0gICAgICAgICA9IHsudHlwZSA9IE5MQV9VOH0sCkBAIC0xNjAsNyArMTYwLDcgQEAKIH07CiAKIC8qIERDQiBBUFAgbmVzdGVkIGF0dHJpYnV0ZXMuICovCi1zdGF0aWMgc3RydWN0IG5sYV9wb2xpY3kgZGNibmxfYXBwX25lc3RbRENCX0FQUF9BVFRSX01BWCArIDFdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGRjYm5sX2FwcF9uZXN0W0RDQl9BUFBfQVRUUl9NQVggKyAxXSA9IHsKIAlbRENCX0FQUF9BVFRSX0lEVFlQRV0gICAgICAgPSB7LnR5cGUgPSBOTEFfVTh9LAogCVtEQ0JfQVBQX0FUVFJfSURdICAgICAgICAgICA9IHsudHlwZSA9IE5MQV9VMTZ9LAogCVtEQ0JfQVBQX0FUVFJfUFJJT1JJVFldICAgICA9IHsudHlwZSA9IE5MQV9VOH0sCmRpZmYgLS1naXQgYS9uZXQvZGNjcC9jY2lkLmMgYi9uZXQvZGNjcC9jY2lkLmMKaW5kZXggZmYxNmU5ZC4uNDlkMjdjNSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvY2NpZC5jCisrKyBiL25ldC9kY2NwL2NjaWQuYwpAQCAtNjMsMTQgKzYzLDEzIEBACiAJdTggKmNjaWRfYXJyYXksIGFycmF5X2xlbjsKIAlpbnQgZXJyID0gMDsKIAotCWlmIChsZW4gPCBBUlJBWV9TSVpFKGNjaWRzKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAoY2NpZF9nZXRfYnVpbHRpbl9jY2lkcygmY2NpZF9hcnJheSwgJmFycmF5X2xlbikpCiAJCXJldHVybiAtRU5PQlVGUzsKIAotCWlmIChwdXRfdXNlcihhcnJheV9sZW4sIG9wdGxlbikgfHwKLQkgICAgY29weV90b191c2VyKG9wdHZhbCwgY2NpZF9hcnJheSwgYXJyYXlfbGVuKSkKKwlpZiAocHV0X3VzZXIoYXJyYXlfbGVuLCBvcHRsZW4pKQorCQllcnIgPSAtRUZBVUxUOworCWVsc2UgaWYgKGxlbiA+IDAgJiYgY29weV90b191c2VyKG9wdHZhbCwgY2NpZF9hcnJheSwKKwkJCQkJIGxlbiA+IGFycmF5X2xlbiA/IGFycmF5X2xlbiA6IGxlbikpCiAJCWVyciA9IC1FRkFVTFQ7CiAKIAlrZnJlZShjY2lkX2FycmF5KTsKZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjQuYyBiL25ldC9kY2NwL2lwdjQuYwppbmRleCBkYWQ3YmM0Li5iMTk1YzRmIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY0LmMKKysrIGIvbmV0L2RjY3AvaXB2NC5jCkBAIC05OTYsNyArOTk2LDcgQEAKIAkuZmxhZ3MJCT0gSU5FVF9QUk9UT1NXX0lDU0ssCiB9OwogCi1zdGF0aWMgaW50IGRjY3BfdjRfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGRjY3BfdjRfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCWludCBlcnI7CiAKQEAgLTEwMDUsNyArMTAwNSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgZGNjcF92NF9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGRjY3BfdjRfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCWluZXRfY3RsX3NvY2tfZGVzdHJveShuZXQtPmRjY3AudjRfY3RsX3NrKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjYuYyBiL25ldC9kY2NwL2lwdjYuYwppbmRleCBiYWYwNWNmLi4xYWVjNjM0IDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY2LmMKKysrIGIvbmV0L2RjY3AvaXB2Ni5jCkBAIC0xMTg5LDcgKzExODksNyBAQAogCS5mbGFncwkJPSBJTkVUX1BST1RPU1dfSUNTSywKIH07CiAKLXN0YXRpYyBpbnQgZGNjcF92Nl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgZGNjcF92Nl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaW50IGVycjsKIApAQCAtMTE5OCw3ICsxMTk4LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBkY2NwX3Y2X2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgZGNjcF92Nl9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaW5ldF9jdGxfc29ja19kZXN0cm95KG5ldC0+ZGNjcC52Nl9jdGxfc2spOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2RjY3AvcHJvdG8uYyBiL25ldC9kY2NwL3Byb3RvLmMKaW5kZXggNjcxY2QxNC4uMGVmNzA2MSAxMDA2NDQKLS0tIGEvbmV0L2RjY3AvcHJvdG8uYworKysgYi9uZXQvZGNjcC9wcm90by5jCkBAIC04MzUsNiArODM1LDggQEAKIAkJCWxlbiA9IC1FRkFVTFQ7CiAJCQlicmVhazsKIAkJfQorCQlpZiAoZmxhZ3MgJiBNU0dfVFJVTkMpCisJCQlsZW4gPSBza2ItPmxlbjsKIAlmb3VuZF9maW5fb2s6CiAJCWlmICghKGZsYWdzICYgTVNHX1BFRUspKQogCQkJc2tfZWF0X3NrYihzaywgc2tiLCAwKTsKQEAgLTEwMDMsMTIgKzEwMDUsMTMgQEAKIAogc3RhdGljIGlubGluZSBpbnQgZGNjcF9taWJfaW5pdCh2b2lkKQogewotCXJldHVybiBzbm1wX21pYl9pbml0KCh2b2lkKiopZGNjcF9zdGF0aXN0aWNzLCBzaXplb2Yoc3RydWN0IGRjY3BfbWliKSk7CisJcmV0dXJuIHNubXBfbWliX2luaXQoKHZvaWQgX19wZXJjcHUgKiopZGNjcF9zdGF0aXN0aWNzLAorCQkJICAgICBzaXplb2Yoc3RydWN0IGRjY3BfbWliKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkY2NwX21pYl9leGl0KHZvaWQpCiB7Ci0Jc25tcF9taWJfZnJlZSgodm9pZCoqKWRjY3Bfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKilkY2NwX3N0YXRpc3RpY3MpOwogfQogCiBzdGF0aWMgaW50IHRoYXNoX2VudHJpZXM7CmRpZmYgLS1naXQgYS9uZXQvZXRoZXJuZXQvZXRoLmMgYi9uZXQvZXRoZXJuZXQvZXRoLmMKaW5kZXggZGQzZGI4OC4uMjA1YTFjMSAxMDA2NDQKLS0tIGEvbmV0L2V0aGVybmV0L2V0aC5jCisrKyBiL25ldC9ldGhlcm5ldC9ldGguYwpAQCAtNzMsOCArNzMsOCBAQAogICogQGxlbjogICBwYWNrZXQgbGVuZ3RoICg8PSBza2ItPmxlbikKICAqCiAgKgotICogU2V0IHRoZSBwcm90b2NvbCB0eXBlLiBGb3IgYSBwYWNrZXQgb2YgdHlwZSBFVEhfUF84MDJfMyB3ZSBwdXQgdGhlIGxlbmd0aAotICogaW4gaGVyZSBpbnN0ZWFkLiBJdCBpcyB1cCB0byB0aGUgODAyLjIgbGF5ZXIgdG8gY2FycnkgcHJvdG9jb2wgaW5mb3JtYXRpb24uCisgKiBTZXQgdGhlIHByb3RvY29sIHR5cGUuIEZvciBhIHBhY2tldCBvZiB0eXBlIEVUSF9QXzgwMl8zLzIgd2UgcHV0IHRoZSBsZW5ndGgKKyAqIGluIGhlcmUgaW5zdGVhZC4KICAqLwogaW50IGV0aF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkgICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZSwKQEAgLTgyLDcgKzgyLDcgQEAKIHsKIAlzdHJ1Y3QgZXRoaGRyICpldGggPSAoc3RydWN0IGV0aGhkciAqKXNrYl9wdXNoKHNrYiwgRVRIX0hMRU4pOwogCi0JaWYgKHR5cGUgIT0gRVRIX1BfODAyXzMpCisJaWYgKHR5cGUgIT0gRVRIX1BfODAyXzMgJiYgdHlwZSAhPSBFVEhfUF84MDJfMikKIAkJZXRoLT5oX3Byb3RvID0gaHRvbnModHlwZSk7CiAJZWxzZQogCQlldGgtPmhfcHJvdG8gPSBodG9ucyhsZW4pOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYWZfaW5ldC5jIGIvbmV0L2lwdjQvYWZfaW5ldC5jCmluZGV4IDdkMTJjNmEuLjMzYjdkZmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FmX2luZXQuYworKysgYi9uZXQvaXB2NC9hZl9pbmV0LmMKQEAgLTEzODUsNyArMTM4NSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpbmV0X2N0bF9zb2NrX2NyZWF0ZSk7CiAKLXVuc2lnbmVkIGxvbmcgc25tcF9mb2xkX2ZpZWxkKHZvaWQgKm1pYltdLCBpbnQgb2ZmdCkKK3Vuc2lnbmVkIGxvbmcgc25tcF9mb2xkX2ZpZWxkKHZvaWQgX19wZXJjcHUgKm1pYltdLCBpbnQgb2ZmdCkKIHsKIAl1bnNpZ25lZCBsb25nIHJlcyA9IDA7CiAJaW50IGk7CkBAIC0xMzk4LDcgKzEzOTgsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoc25tcF9mb2xkX2ZpZWxkKTsKIAotaW50IHNubXBfbWliX2luaXQodm9pZCAqcHRyWzJdLCBzaXplX3QgbWlic2l6ZSkKK2ludCBzbm1wX21pYl9pbml0KHZvaWQgX19wZXJjcHUgKnB0clsyXSwgc2l6ZV90IG1pYnNpemUpCiB7CiAJQlVHX09OKHB0ciA9PSBOVUxMKTsKIAlwdHJbMF0gPSBfX2FsbG9jX3BlcmNwdShtaWJzaXplLCBfX2FsaWdub2ZfXyh1bnNpZ25lZCBsb25nIGxvbmcpKTsKQEAgLTE0MTYsNyArMTQxNiw3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzbm1wX21pYl9pbml0KTsKIAotdm9pZCBzbm1wX21pYl9mcmVlKHZvaWQgKnB0clsyXSkKK3ZvaWQgc25tcF9taWJfZnJlZSh2b2lkIF9fcGVyY3B1ICpwdHJbMl0pCiB7CiAJQlVHX09OKHB0ciA9PSBOVUxMKTsKIAlmcmVlX3BlcmNwdShwdHJbMF0pOwpAQCAtMTQ2MCwyNSArMTQ2MCwyNSBAQAogCiBzdGF0aWMgX19uZXRfaW5pdCBpbnQgaXB2NF9taWJfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewotCWlmIChzbm1wX21pYl9pbml0KCh2b2lkICoqKW5ldC0+bWliLnRjcF9zdGF0aXN0aWNzLAorCWlmIChzbm1wX21pYl9pbml0KCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnRjcF9zdGF0aXN0aWNzLAogCQkJICBzaXplb2Yoc3RydWN0IHRjcF9taWIpKSA8IDApCiAJCWdvdG8gZXJyX3RjcF9taWI7Ci0JaWYgKHNubXBfbWliX2luaXQoKHZvaWQgKiopbmV0LT5taWIuaXBfc3RhdGlzdGljcywKKwlpZiAoc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pcF9zdGF0aXN0aWNzLAogCQkJICBzaXplb2Yoc3RydWN0IGlwc3RhdHNfbWliKSkgPCAwKQogCQlnb3RvIGVycl9pcF9taWI7Ci0JaWYgKHNubXBfbWliX2luaXQoKHZvaWQgKiopbmV0LT5taWIubmV0X3N0YXRpc3RpY3MsCisJaWYgKHNubXBfbWliX2luaXQoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIubmV0X3N0YXRpc3RpY3MsCiAJCQkgIHNpemVvZihzdHJ1Y3QgbGludXhfbWliKSkgPCAwKQogCQlnb3RvIGVycl9uZXRfbWliOwotCWlmIChzbm1wX21pYl9pbml0KCh2b2lkICoqKW5ldC0+bWliLnVkcF9zdGF0aXN0aWNzLAorCWlmIChzbm1wX21pYl9pbml0KCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnVkcF9zdGF0aXN0aWNzLAogCQkJICBzaXplb2Yoc3RydWN0IHVkcF9taWIpKSA8IDApCiAJCWdvdG8gZXJyX3VkcF9taWI7Ci0JaWYgKHNubXBfbWliX2luaXQoKHZvaWQgKiopbmV0LT5taWIudWRwbGl0ZV9zdGF0aXN0aWNzLAorCWlmIChzbm1wX21pYl9pbml0KCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnVkcGxpdGVfc3RhdGlzdGljcywKIAkJCSAgc2l6ZW9mKHN0cnVjdCB1ZHBfbWliKSkgPCAwKQogCQlnb3RvIGVycl91ZHBsaXRlX21pYjsKLQlpZiAoc25tcF9taWJfaW5pdCgodm9pZCAqKiluZXQtPm1pYi5pY21wX3N0YXRpc3RpY3MsCisJaWYgKHNubXBfbWliX2luaXQoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaWNtcF9zdGF0aXN0aWNzLAogCQkJICBzaXplb2Yoc3RydWN0IGljbXBfbWliKSkgPCAwKQogCQlnb3RvIGVycl9pY21wX21pYjsKLQlpZiAoc25tcF9taWJfaW5pdCgodm9pZCAqKiluZXQtPm1pYi5pY21wbXNnX3N0YXRpc3RpY3MsCisJaWYgKHNubXBfbWliX2luaXQoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaWNtcG1zZ19zdGF0aXN0aWNzLAogCQkJICBzaXplb2Yoc3RydWN0IGljbXBtc2dfbWliKSkgPCAwKQogCQlnb3RvIGVycl9pY21wbXNnX21pYjsKIApAQCAtMTQ4NiwzMCArMTQ4NiwzMCBAQAogCXJldHVybiAwOwogCiBlcnJfaWNtcG1zZ19taWI6Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXQtPm1pYi5pY21wX3N0YXRpc3RpY3MpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaWNtcF9zdGF0aXN0aWNzKTsKIGVycl9pY21wX21pYjoKLQlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLnVkcGxpdGVfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi51ZHBsaXRlX3N0YXRpc3RpY3MpOwogZXJyX3VkcGxpdGVfbWliOgotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIudWRwX3N0YXRpc3RpY3MpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIudWRwX3N0YXRpc3RpY3MpOwogZXJyX3VkcF9taWI6Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXQtPm1pYi5uZXRfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5uZXRfc3RhdGlzdGljcyk7CiBlcnJfbmV0X21pYjoKLQlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLmlwX3N0YXRpc3RpY3MpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaXBfc3RhdGlzdGljcyk7CiBlcnJfaXBfbWliOgotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIudGNwX3N0YXRpc3RpY3MpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIudGNwX3N0YXRpc3RpY3MpOwogZXJyX3RjcF9taWI6CiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyBfX25ldF9leGl0IHZvaWQgaXB2NF9taWJfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIuaWNtcG1zZ19zdGF0aXN0aWNzKTsKLQlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLmljbXBfc3RhdGlzdGljcyk7Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXQtPm1pYi51ZHBsaXRlX3N0YXRpc3RpY3MpOwotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIudWRwX3N0YXRpc3RpY3MpOwotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIubmV0X3N0YXRpc3RpY3MpOwotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIuaXBfc3RhdGlzdGljcyk7Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXQtPm1pYi50Y3Bfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pY21wbXNnX3N0YXRpc3RpY3MpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaWNtcF9zdGF0aXN0aWNzKTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnVkcGxpdGVfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi51ZHBfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5uZXRfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pcF9zdGF0aXN0aWNzKTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnRjcF9zdGF0aXN0aWNzKTsKIH0KIAogc3RhdGljIF9fbmV0X2luaXRkYXRhIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcHY0X21pYl9vcHMgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9haDQuYyBiL25ldC9pcHY0L2FoNC5jCmluZGV4IDdlZDNlNGEuLjk4N2I0N2QgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2FoNC5jCisrKyBiL25ldC9pcHY0L2FoNC5jCkBAIC0zOTMsNyArMzkzLDcgQEAKIAkgICAgaWNtcF9oZHIoc2tiKS0+Y29kZSAhPSBJQ01QX0ZSQUdfTkVFREVEKQogCQlyZXR1cm47CiAKLQl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCAoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwgYWgtPnNwaSwgSVBQUk9UT19BSCwgQUZfSU5FVCk7CisJeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgc2tiLT5tYXJrLCAoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwgYWgtPnNwaSwgSVBQUk9UT19BSCwgQUZfSU5FVCk7CiAJaWYgKCF4KQogCQlyZXR1cm47CiAJcHJpbnRrKEtFUk5fREVCVUcgInBtdHUgZGlzY292ZXJ5IG9uIFNBIEFILyUwOHgvJTA4eFxuIiwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FycC5jIGIvbmV0L2lwdjQvYXJwLmMKaW5kZXggYzk1Y2Q5My4uYzRkZDEzNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvYXJwLmMKKysrIGIvbmV0L2lwdjQvYXJwLmMKQEAgLTcwLDYgKzcwLDcgQEAKICAqCQkJCQlib25kaW5nIGNhbiBjaGFuZ2UgdGhlIHNrYiBiZWZvcmUKICAqCQkJCQlzZW5kaW5nIChlLmcuIGluc2VydCA4MDIxcSB0YWcpLgogICoJCUhhcmFsZCBXZWx0ZQk6CWNvbnZlcnQgdG8gbWFrZSB1c2Ugb2YgamVua2lucyBoYXNoCisgKgkJSmVzcGVyIEQuIEJyb3VlcjogICAgICAgUHJveHkgQVJQIFBWTEFOIFJGQyAzMDY5IHN1cHBvcnQuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNTI0LDEyICs1MjUsMTUgQEAKIC8qCiAgKiBDaGVjayBpZiB3ZSBjYW4gdXNlIHByb3h5IEFSUCBmb3IgdGhpcyBwYXRoCiAgKi8KLQotc3RhdGljIGlubGluZSBpbnQgYXJwX2Z3ZF9wcm94eShzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIHN0cnVjdCBydGFibGUgKnJ0KQorc3RhdGljIGlubGluZSBpbnQgYXJwX2Z3ZF9wcm94eShzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsCisJCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwJc3RydWN0IHJ0YWJsZSAqcnQpCiB7CiAJc3RydWN0IGluX2RldmljZSAqb3V0X2RldjsKIAlpbnQgaW1pLCBvbWkgPSAtMTsKIAorCWlmIChydC0+dS5kc3QuZGV2ID09IGRldikKKwkJcmV0dXJuIDA7CisKIAlpZiAoIUlOX0RFVl9QUk9YWV9BUlAoaW5fZGV2KSkKIAkJcmV0dXJuIDA7CiAKQEAgLTU0OCw2ICs1NTIsNDMgQEAKIH0KIAogLyoKKyAqIENoZWNrIGZvciBSRkMzMDY5IHByb3h5IGFycCBwcml2YXRlIFZMQU4gKGFsbG93IHRvIHNlbmQgYmFjayB0byBzYW1lIGRldikKKyAqCisgKiBSRkMzMDY5IHN1cHBvcnRzIHByb3h5IGFycCByZXBsaWVzIGJhY2sgdG8gdGhlIHNhbWUgaW50ZXJmYWNlLiAgVGhpcworICogaXMgZG9uZSB0byBzdXBwb3J0IChldGhlcm5ldCkgc3dpdGNoIGZlYXR1cmVzLCBsaWtlIFJGQyAzMDY5LCB3aGVyZQorICogdGhlIGluZGl2aWR1YWwgcG9ydHMgYXJlIG5vdCBhbGxvd2VkIHRvIGNvbW11bmljYXRlIHdpdGggZWFjaAorICogb3RoZXIsIEJVVCB0aGV5IGFyZSBhbGxvd2VkIHRvIHRhbGsgdG8gdGhlIHVwc3RyZWFtIHJvdXRlci4gIEFzCisgKiBkZXNjcmliZWQgaW4gUkZDIDMwNjksIGl0IGlzIHBvc3NpYmxlIHRvIGFsbG93IHRoZXNlIGhvc3RzIHRvCisgKiBjb21tdW5pY2F0ZSB0aHJvdWdoIHRoZSB1cHN0cmVhbSByb3V0ZXIsIGJ5IHByb3h5X2FycCdpbmcuCisgKgorICogUkZDIDMwNjk6ICJWTEFOIEFnZ3JlZ2F0aW9uIGZvciBFZmZpY2llbnQgSVAgQWRkcmVzcyBBbGxvY2F0aW9uIgorICoKKyAqICBUaGlzIHRlY2hub2xvZ3kgaXMga25vd24gYnkgZGlmZmVyZW50IG5hbWVzOgorICogICAgSW4gUkZDIDMwNjkgaXQgaXMgY2FsbGVkIFZMQU4gQWdncmVnYXRpb24uCisgKiAgICBDaXNjbyBhbmQgQWxsaWVkIFRlbGVzeW4gY2FsbCBpdCBQcml2YXRlIFZMQU4uCisgKiAgICBIZXdsZXR0LVBhY2thcmQgY2FsbCBpdCBTb3VyY2UtUG9ydCBmaWx0ZXJpbmcgb3IgcG9ydC1pc29sYXRpb24uCisgKiAgICBFcmljc3NvbiBjYWxsIGl0IE1BQy1Gb3JjZWQgRm9yd2FyZGluZyAoUkZDIERyYWZ0KS4KKyAqCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGFycF9md2RfcHZsYW4oc3RydWN0IGluX2RldmljZSAqaW5fZGV2LAorCQkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCXN0cnVjdCBydGFibGUgKnJ0LAorCQkJCV9fYmUzMiBzaXAsIF9fYmUzMiB0aXApCit7CisJLyogUHJpdmF0ZSBWTEFOIGlzIG9ubHkgY29uY2VybmVkIGFib3V0IHRoZSBzYW1lIGV0aGVybmV0IHNlZ21lbnQgKi8KKwlpZiAocnQtPnUuZHN0LmRldiAhPSBkZXYpCisJCXJldHVybiAwOworCisJLyogRG9uJ3QgcmVwbHkgb24gc2VsZiBwcm9iZXMgKG9mdGVuIGRvbmUgYnkgd2luZG93eiBib3hlcykqLworCWlmIChzaXAgPT0gdGlwKQorCQlyZXR1cm4gMDsKKworCWlmIChJTl9ERVZfUFJPWFlfQVJQX1BWTEFOKGluX2RldikpCisJCXJldHVybiAxOworCWVsc2UKKwkJcmV0dXJuIDA7Cit9CisKKy8qCiAgKglJbnRlcmZhY2UgdG8gbGluayBsYXllcjogc2VuZCByb3V0aW5lIGFuZCByZWNlaXZlIGhhbmRsZXIuCiAgKi8KIApAQCAtODMzLDggKzg3NCwxMSBAQAogCQkJfQogCQkJZ290byBvdXQ7CiAJCX0gZWxzZSBpZiAoSU5fREVWX0ZPUldBUkQoaW5fZGV2KSkgewotCQkJICAgIGlmIChhZGRyX3R5cGUgPT0gUlROX1VOSUNBU1QgICYmIHJ0LT51LmRzdC5kZXYgIT0gZGV2ICYmCi0JCQkgICAgIChhcnBfZndkX3Byb3h5KGluX2RldiwgcnQpIHx8IHBuZWlnaF9sb29rdXAoJmFycF90YmwsIG5ldCwgJnRpcCwgZGV2LCAwKSkpIHsKKwkJCWlmIChhZGRyX3R5cGUgPT0gUlROX1VOSUNBU1QgICYmCisJCQkgICAgKGFycF9md2RfcHJveHkoaW5fZGV2LCBkZXYsIHJ0KSB8fAorCQkJICAgICBhcnBfZndkX3B2bGFuKGluX2RldiwgZGV2LCBydCwgc2lwLCB0aXApIHx8CisJCQkgICAgIHBuZWlnaF9sb29rdXAoJmFycF90YmwsIG5ldCwgJnRpcCwgZGV2LCAwKSkpCisJCQl7CiAJCQkJbiA9IG5laWdoX2V2ZW50X25zKCZhcnBfdGJsLCBzaGEsICZzaXAsIGRldik7CiAJCQkJaWYgKG4pCiAJCQkJCW5laWdoX3JlbGVhc2Uobik7CkBAIC04NjMsNyArOTA3LDggQEAKIAkJICAgZGV2aWNlcyAoc3RyaXAgaXMgY2FuZGlkYXRlKQogCQkgKi8KIAkJaWYgKG4gPT0gTlVMTCAmJgotCQkgICAgYXJwLT5hcl9vcCA9PSBodG9ucyhBUlBPUF9SRVBMWSkgJiYKKwkJICAgIChhcnAtPmFyX29wID09IGh0b25zKEFSUE9QX1JFUExZKSB8fAorCQkgICAgIChhcnAtPmFyX29wID09IGh0b25zKEFSUE9QX1JFUVVFU1QpICYmIHRpcCA9PSBzaXApKSAmJgogCQkgICAgaW5ldF9hZGRyX3R5cGUobmV0LCBzaXApID09IFJUTl9VTklDQVNUKQogCQkJbiA9IF9fbmVpZ2hfbG9va3VwKCZhcnBfdGJsLCAmc2lwLCBkZXYsIDEpOwogCX0KQEAgLTEyMzksOCArMTI4NCw3IEBACiAJZGV2X2FkZF9wYWNrKCZhcnBfcGFja2V0X3R5cGUpOwogCWFycF9wcm9jX2luaXQoKTsKICNpZmRlZiBDT05GSUdfU1lTQ1RMCi0JbmVpZ2hfc3lzY3RsX3JlZ2lzdGVyKE5VTEwsICZhcnBfdGJsLnBhcm1zLCBORVRfSVBWNCwKLQkJCSAgICAgIE5FVF9JUFY0X05FSUdILCAiaXB2NCIsIE5VTEwpOworCW5laWdoX3N5c2N0bF9yZWdpc3RlcihOVUxMLCAmYXJwX3RibC5wYXJtcywgImlwdjQiLCBOVUxMKTsKICNlbmRpZgogCXJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmYXJwX25ldGRldl9ub3RpZmllcik7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9kZXZpbmV0LmMgYi9uZXQvaXB2NC9kZXZpbmV0LmMKaW5kZXggMjZkZWMyYi4uNTFjYTk0NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGV2aW5ldC5jCisrKyBiL25ldC9pcHY0L2RldmluZXQuYwpAQCAtNjQsMjAgKzY0LDIwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgaXB2NF9kZXZjb25mIGlwdjRfZGV2Y29uZiA9IHsKIAkuZGF0YSA9IHsKLQkJW05FVF9JUFY0X0NPTkZfQUNDRVBUX1JFRElSRUNUUyAtIDFdID0gMSwKLQkJW05FVF9JUFY0X0NPTkZfU0VORF9SRURJUkVDVFMgLSAxXSA9IDEsCi0JCVtORVRfSVBWNF9DT05GX1NFQ1VSRV9SRURJUkVDVFMgLSAxXSA9IDEsCi0JCVtORVRfSVBWNF9DT05GX1NIQVJFRF9NRURJQSAtIDFdID0gMSwKKwkJW0lQVjRfREVWQ09ORl9BQ0NFUFRfUkVESVJFQ1RTIC0gMV0gPSAxLAorCQlbSVBWNF9ERVZDT05GX1NFTkRfUkVESVJFQ1RTIC0gMV0gPSAxLAorCQlbSVBWNF9ERVZDT05GX1NFQ1VSRV9SRURJUkVDVFMgLSAxXSA9IDEsCisJCVtJUFY0X0RFVkNPTkZfU0hBUkVEX01FRElBIC0gMV0gPSAxLAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGlwdjRfZGV2Y29uZiBpcHY0X2RldmNvbmZfZGZsdCA9IHsKIAkuZGF0YSA9IHsKLQkJW05FVF9JUFY0X0NPTkZfQUNDRVBUX1JFRElSRUNUUyAtIDFdID0gMSwKLQkJW05FVF9JUFY0X0NPTkZfU0VORF9SRURJUkVDVFMgLSAxXSA9IDEsCi0JCVtORVRfSVBWNF9DT05GX1NFQ1VSRV9SRURJUkVDVFMgLSAxXSA9IDEsCi0JCVtORVRfSVBWNF9DT05GX1NIQVJFRF9NRURJQSAtIDFdID0gMSwKLQkJW05FVF9JUFY0X0NPTkZfQUNDRVBUX1NPVVJDRV9ST1VURSAtIDFdID0gMSwKKwkJW0lQVjRfREVWQ09ORl9BQ0NFUFRfUkVESVJFQ1RTIC0gMV0gPSAxLAorCQlbSVBWNF9ERVZDT05GX1NFTkRfUkVESVJFQ1RTIC0gMV0gPSAxLAorCQlbSVBWNF9ERVZDT05GX1NFQ1VSRV9SRURJUkVDVFMgLSAxXSA9IDEsCisJCVtJUFY0X0RFVkNPTkZfU0hBUkVEX01FRElBIC0gMV0gPSAxLAorCQlbSVBWNF9ERVZDT05GX0FDQ0VQVF9TT1VSQ0VfUk9VVEUgLSAxXSA9IDEsCiAJfSwKIH07CiAKQEAgLTEzNjUsNyArMTM2NSw3IEBACiAJeyBcCiAJCS5wcm9jbmFtZQk9IG5hbWUsIFwKIAkJLmRhdGEJCT0gaXB2NF9kZXZjb25mLmRhdGEgKyBcCi0JCQkJICBORVRfSVBWNF9DT05GXyAjIyBhdHRyIC0gMSwgXAorCQkJCSAgSVBWNF9ERVZDT05GXyAjIyBhdHRyIC0gMSwgXAogCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLCBcCiAJCS5tb2RlCQk9IG12YWwsIFwKIAkJLnByb2NfaGFuZGxlcgk9IHByb2MsIFwKQEAgLTEzODYsNyArMTM4Niw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aW5ldF9zeXNjdGxfdGFibGUgewogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpzeXNjdGxfaGVhZGVyOwotCXN0cnVjdCBjdGxfdGFibGUgZGV2aW5ldF92YXJzW19fTkVUX0lQVjRfQ09ORl9NQVhdOworCXN0cnVjdCBjdGxfdGFibGUgZGV2aW5ldF92YXJzW19fSVBWNF9ERVZDT05GX01BWF07CiAJY2hhciAqZGV2X25hbWU7CiB9IGRldmluZXRfc3lzY3RsID0gewogCS5kZXZpbmV0X3ZhcnMgPSB7CkBAIC0xNDEzLDYgKzE0MTMsNyBAQAogCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShBUlBfSUdOT1JFLCAiYXJwX2lnbm9yZSIpLAogCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShBUlBfQUNDRVBULCAiYXJwX2FjY2VwdCIpLAogCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShBUlBfTk9USUZZLCAiYXJwX25vdGlmeSIpLAorCQlERVZJTkVUX1NZU0NUTF9SV19FTlRSWShQUk9YWV9BUlBfUFZMQU4sICJwcm94eV9hcnBfcHZsYW4iKSwKIAogCQlERVZJTkVUX1NZU0NUTF9GTFVTSElOR19FTlRSWShOT1hGUk0sICJkaXNhYmxlX3hmcm0iKSwKIAkJREVWSU5FVF9TWVNDVExfRkxVU0hJTkdfRU5UUlkoTk9QT0xJQ1ksICJkaXNhYmxlX3BvbGljeSIpLApAQCAtMTQ5MSw4ICsxNDkyLDcgQEAKIAogc3RhdGljIHZvaWQgZGV2aW5ldF9zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IGluX2RldmljZSAqaWRldikKIHsKLQluZWlnaF9zeXNjdGxfcmVnaXN0ZXIoaWRldi0+ZGV2LCBpZGV2LT5hcnBfcGFybXMsIE5FVF9JUFY0LAotCQkJTkVUX0lQVjRfTkVJR0gsICJpcHY0IiwgTlVMTCk7CisJbmVpZ2hfc3lzY3RsX3JlZ2lzdGVyKGlkZXYtPmRldiwgaWRldi0+YXJwX3Bhcm1zLCAiaXB2NCIsIE5VTEwpOwogCV9fZGV2aW5ldF9zeXNjdGxfcmVnaXN0ZXIoZGV2X25ldChpZGV2LT5kZXYpLCBpZGV2LT5kZXYtPm5hbWUsCiAJCQkJCSZpZGV2LT5jbmYpOwogfQpAQCAtMTUwNyw3ICsxNTA3LDcgQEAKIAl7CiAJCS5wcm9jbmFtZQk9ICJpcF9mb3J3YXJkIiwKIAkJLmRhdGEJCT0gJmlwdjRfZGV2Y29uZi5kYXRhWwotCQkJCQlORVRfSVBWNF9DT05GX0ZPUldBUkRJTkcgLSAxXSwKKwkJCQkJSVBWNF9ERVZDT05GX0ZPUldBUkRJTkcgLSAxXSwKIAkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKIAkJLm1vZGUJCT0gMDY0NCwKIAkJLnByb2NfaGFuZGxlcgk9IGRldmluZXRfc3lzY3RsX2ZvcndhcmQsCkBAIC0xNTUxLDcgKzE1NTEsNyBAQAogCQlpZiAodGJsID09IE5VTEwpCiAJCQlnb3RvIGVycl9hbGxvY19jdGw7CiAKLQkJdGJsWzBdLmRhdGEgPSAmYWxsLT5kYXRhW05FVF9JUFY0X0NPTkZfRk9SV0FSRElORyAtIDFdOworCQl0YmxbMF0uZGF0YSA9ICZhbGwtPmRhdGFbSVBWNF9ERVZDT05GX0ZPUldBUkRJTkcgLSAxXTsKIAkJdGJsWzBdLmV4dHJhMSA9IGFsbDsKIAkJdGJsWzBdLmV4dHJhMiA9IG5ldDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZXNwNC5jIGIvbmV0L2lwdjQvZXNwNC5jCmluZGV4IDE5NDg4OTUuLjE0Y2ExZjEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2VzcDQuYworKysgYi9uZXQvaXB2NC9lc3A0LmMKQEAgLTQyMiw3ICs0MjIsNyBAQAogCSAgICBpY21wX2hkcihza2IpLT5jb2RlICE9IElDTVBfRlJBR19ORUVERUQpCiAJCXJldHVybjsKIAotCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsICh4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPmRhZGRyLCBlc3BoLT5zcGksIElQUFJPVE9fRVNQLCBBRl9JTkVUKTsKKwl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBza2ItPm1hcmssICh4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPmRhZGRyLCBlc3BoLT5zcGksIElQUFJPVE9fRVNQLCBBRl9JTkVUKTsKIAlpZiAoIXgpCiAJCXJldHVybjsKIAlORVRERUJVRyhLRVJOX0RFQlVHICJwbXR1IGRpc2NvdmVyeSBvbiBTQSBFU1AvJTA4eC8lMDh4XG4iLApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX2Zyb250ZW5kLmMgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwppbmRleCA4MmRiZjcxLi45YjNlMjhlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYworKysgYi9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYwpAQCAtODgzLDcgKzg4Myw3IEBACiAJbmV0bGlua191bmljYXN0KG5ldC0+aXB2NC5maWJubCwgc2tiLCBwaWQsIE1TR19ET05UV0FJVCk7CiB9CiAKLXN0YXRpYyBpbnQgbmxfZmliX2xvb2t1cF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBubF9maWJfbG9va3VwX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBzb2NrICpzazsKIAlzayA9IG5ldGxpbmtfa2VybmVsX2NyZWF0ZShuZXQsIE5FVExJTktfRklCX0xPT0tVUCwgMCwKQEAgLTEwMDQsNyArMTAwNCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcF9maWJfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgaXBfZmliX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAl1bnNpZ25lZCBpbnQgaTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jIGIvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCmluZGV4IGVkMTlhYTYuLjFhZjBlYTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYworKysgYi9uZXQvaXB2NC9maWJfc2VtYW50aWNzLmMKQEAgLTYyLDggKzYyLDggQEAKICNkZWZpbmUgZm9yX25leHRob3BzKGZpKSB7IGludCBuaHNlbDsgY29uc3Qgc3RydWN0IGZpYl9uaCAqIG5oOyBcCiBmb3IgKG5oc2VsPTAsIG5oID0gKGZpKS0+ZmliX25oOyBuaHNlbCA8IChmaSktPmZpYl9uaHM7IG5oKyssIG5oc2VsKyspCiAKLSNkZWZpbmUgY2hhbmdlX25leHRob3BzKGZpKSB7IGludCBuaHNlbDsgc3RydWN0IGZpYl9uaCAqIG5oOyBcCi1mb3IgKG5oc2VsPTAsIG5oID0gKHN0cnVjdCBmaWJfbmggKikoKGZpKS0+ZmliX25oKTsgbmhzZWwgPCAoZmkpLT5maWJfbmhzOyBuaCsrLCBuaHNlbCsrKQorI2RlZmluZSBjaGFuZ2VfbmV4dGhvcHMoZmkpIHsgaW50IG5oc2VsOyBzdHJ1Y3QgZmliX25oICpuZXh0aG9wX25oOyBcCitmb3IgKG5oc2VsPTAsIG5leHRob3BfbmggPSAoc3RydWN0IGZpYl9uaCAqKSgoZmkpLT5maWJfbmgpOyBuaHNlbCA8IChmaSktPmZpYl9uaHM7IG5leHRob3BfbmgrKywgbmhzZWwrKykKIAogI2Vsc2UgLyogQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSCAqLwogCkBAIC03Miw3ICs3Miw3IEBACiAjZGVmaW5lIGZvcl9uZXh0aG9wcyhmaSkgeyBpbnQgbmhzZWwgPSAwOyBjb25zdCBzdHJ1Y3QgZmliX25oICogbmggPSAoZmkpLT5maWJfbmg7IFwKIGZvciAobmhzZWw9MDsgbmhzZWwgPCAxOyBuaHNlbCsrKQogCi0jZGVmaW5lIGNoYW5nZV9uZXh0aG9wcyhmaSkgeyBpbnQgbmhzZWwgPSAwOyBzdHJ1Y3QgZmliX25oICogbmggPSAoc3RydWN0IGZpYl9uaCAqKSgoZmkpLT5maWJfbmgpOyBcCisjZGVmaW5lIGNoYW5nZV9uZXh0aG9wcyhmaSkgeyBpbnQgbmhzZWwgPSAwOyBzdHJ1Y3QgZmliX25oICpuZXh0aG9wX25oID0gKHN0cnVjdCBmaWJfbmggKikoKGZpKS0+ZmliX25oKTsgXAogZm9yIChuaHNlbD0wOyBuaHNlbCA8IDE7IG5oc2VsKyspCiAKICNlbmRpZiAvKiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIICovCkBAIC0xNDUsOSArMTQ1LDkgQEAKIAkJcmV0dXJuOwogCX0KIAljaGFuZ2VfbmV4dGhvcHMoZmkpIHsKLQkJaWYgKG5oLT5uaF9kZXYpCi0JCQlkZXZfcHV0KG5oLT5uaF9kZXYpOwotCQluaC0+bmhfZGV2ID0gTlVMTDsKKwkJaWYgKG5leHRob3BfbmgtPm5oX2RldikKKwkJCWRldl9wdXQobmV4dGhvcF9uaC0+bmhfZGV2KTsKKwkJbmV4dGhvcF9uaC0+bmhfZGV2ID0gTlVMTDsKIAl9IGVuZGZvcl9uZXh0aG9wcyhmaSk7CiAJZmliX2luZm9fY250LS07CiAJcmVsZWFzZV9uZXQoZmktPmZpYl9uZXQpOwpAQCAtMTYyLDkgKzE2Miw5IEBACiAJCWlmIChmaS0+ZmliX3ByZWZzcmMpCiAJCQlobGlzdF9kZWwoJmZpLT5maWJfbGhhc2gpOwogCQljaGFuZ2VfbmV4dGhvcHMoZmkpIHsKLQkJCWlmICghbmgtPm5oX2RldikKKwkJCWlmICghbmV4dGhvcF9uaC0+bmhfZGV2KQogCQkJCWNvbnRpbnVlOwotCQkJaGxpc3RfZGVsKCZuaC0+bmhfaGFzaCk7CisJCQlobGlzdF9kZWwoJm5leHRob3BfbmgtPm5oX2hhc2gpOwogCQl9IGVuZGZvcl9uZXh0aG9wcyhmaSkKIAkJZmktPmZpYl9kZWFkID0gMTsKIAkJZmliX2luZm9fcHV0KGZpKTsKQEAgLTM5NSwxOSArMzk1LDIwIEBACiAJCWlmICghcnRuaF9vayhydG5oLCByZW1haW5pbmcpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJbmgtPm5oX2ZsYWdzID0gKGNmZy0+ZmNfZmxhZ3MgJiB+MHhGRikgfCBydG5oLT5ydG5oX2ZsYWdzOwotCQluaC0+bmhfb2lmID0gcnRuaC0+cnRuaF9pZmluZGV4OwotCQluaC0+bmhfd2VpZ2h0ID0gcnRuaC0+cnRuaF9ob3BzICsgMTsKKwkJbmV4dGhvcF9uaC0+bmhfZmxhZ3MgPQorCQkJKGNmZy0+ZmNfZmxhZ3MgJiB+MHhGRikgfCBydG5oLT5ydG5oX2ZsYWdzOworCQluZXh0aG9wX25oLT5uaF9vaWYgPSBydG5oLT5ydG5oX2lmaW5kZXg7CisJCW5leHRob3BfbmgtPm5oX3dlaWdodCA9IHJ0bmgtPnJ0bmhfaG9wcyArIDE7CiAKIAkJYXR0cmxlbiA9IHJ0bmhfYXR0cmxlbihydG5oKTsKIAkJaWYgKGF0dHJsZW4gPiAwKSB7CiAJCQlzdHJ1Y3QgbmxhdHRyICpubGEsICphdHRycyA9IHJ0bmhfYXR0cnMocnRuaCk7CiAKIAkJCW5sYSA9IG5sYV9maW5kKGF0dHJzLCBhdHRybGVuLCBSVEFfR0FURVdBWSk7Ci0JCQluaC0+bmhfZ3cgPSBubGEgPyBubGFfZ2V0X2JlMzIobmxhKSA6IDA7CisJCQluZXh0aG9wX25oLT5uaF9ndyA9IG5sYSA/IG5sYV9nZXRfYmUzMihubGEpIDogMDsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19ST1VURQogCQkJbmxhID0gbmxhX2ZpbmQoYXR0cnMsIGF0dHJsZW4sIFJUQV9GTE9XKTsKLQkJCW5oLT5uaF90Y2xhc3NpZCA9IG5sYSA/IG5sYV9nZXRfdTMyKG5sYSkgOiAwOworCQkJbmV4dGhvcF9uaC0+bmhfdGNsYXNzaWQgPSBubGEgPyBubGFfZ2V0X3UzMihubGEpIDogMDsKICNlbmRpZgogCQl9CiAKQEAgLTUyNywxMCArNTI4LDYgQEAKIAlpZiAobmgtPm5oX2d3KSB7CiAJCXN0cnVjdCBmaWJfcmVzdWx0IHJlczsKIAotI2lmZGVmIENPTkZJR19JUF9ST1VURV9QRVJWQVNJVkUKLQkJaWYgKG5oLT5uaF9mbGFncyZSVE5IX0ZfUEVSVkFTSVZFKQotCQkJcmV0dXJuIDA7Ci0jZW5kaWYKIAkJaWYgKG5oLT5uaF9mbGFncyZSVE5IX0ZfT05MSU5LKSB7CiAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCkBAIC03MzgsNyArNzM1LDcgQEAKIAogCWZpLT5maWJfbmhzID0gbmhzOwogCWNoYW5nZV9uZXh0aG9wcyhmaSkgewotCQluaC0+bmhfcGFyZW50ID0gZmk7CisJCW5leHRob3BfbmgtPm5oX3BhcmVudCA9IGZpOwogCX0gZW5kZm9yX25leHRob3BzKGZpKQogCiAJaWYgKGNmZy0+ZmNfbXgpIHsKQEAgLTgwOCw3ICs4MDUsNyBAQAogCQkJZ290byBmYWlsdXJlOwogCX0gZWxzZSB7CiAJCWNoYW5nZV9uZXh0aG9wcyhmaSkgewotCQkJaWYgKChlcnIgPSBmaWJfY2hlY2tfbmgoY2ZnLCBmaSwgbmgpKSAhPSAwKQorCQkJaWYgKChlcnIgPSBmaWJfY2hlY2tfbmgoY2ZnLCBmaSwgbmV4dGhvcF9uaCkpICE9IDApCiAJCQkJZ290byBmYWlsdXJlOwogCQl9IGVuZGZvcl9uZXh0aG9wcyhmaSkKIAl9CkBAIC04NDMsMTEgKzg0MCwxMSBAQAogCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAkJdW5zaWduZWQgaW50IGhhc2g7CiAKLQkJaWYgKCFuaC0+bmhfZGV2KQorCQlpZiAoIW5leHRob3BfbmgtPm5oX2RldikKIAkJCWNvbnRpbnVlOwotCQloYXNoID0gZmliX2RldmluZGV4X2hhc2hmbihuaC0+bmhfZGV2LT5pZmluZGV4KTsKKwkJaGFzaCA9IGZpYl9kZXZpbmRleF9oYXNoZm4obmV4dGhvcF9uaC0+bmhfZGV2LT5pZmluZGV4KTsKIAkJaGVhZCA9ICZmaWJfaW5mb19kZXZoYXNoW2hhc2hdOwotCQlobGlzdF9hZGRfaGVhZCgmbmgtPm5oX2hhc2gsIGhlYWQpOworCQlobGlzdF9hZGRfaGVhZCgmbmV4dGhvcF9uaC0+bmhfaGFzaCwgaGVhZCk7CiAJfSBlbmRmb3JfbmV4dGhvcHMoZmkpCiAJc3Bpbl91bmxvY2tfYmgoJmZpYl9pbmZvX2xvY2spOwogCXJldHVybiBmaTsKQEAgLTEwODAsMjEgKzEwNzcsMjEgQEAKIAkJcHJldl9maSA9IGZpOwogCQlkZWFkID0gMDsKIAkJY2hhbmdlX25leHRob3BzKGZpKSB7Ci0JCQlpZiAobmgtPm5oX2ZsYWdzJlJUTkhfRl9ERUFEKQorCQkJaWYgKG5leHRob3BfbmgtPm5oX2ZsYWdzJlJUTkhfRl9ERUFEKQogCQkJCWRlYWQrKzsKLQkJCWVsc2UgaWYgKG5oLT5uaF9kZXYgPT0gZGV2ICYmCi0JCQkJCW5oLT5uaF9zY29wZSAhPSBzY29wZSkgewotCQkJCW5oLT5uaF9mbGFncyB8PSBSVE5IX0ZfREVBRDsKKwkJCWVsc2UgaWYgKG5leHRob3BfbmgtPm5oX2RldiA9PSBkZXYgJiYKKwkJCQkgbmV4dGhvcF9uaC0+bmhfc2NvcGUgIT0gc2NvcGUpIHsKKwkJCQluZXh0aG9wX25oLT5uaF9mbGFncyB8PSBSVE5IX0ZfREVBRDsKICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRICiAJCQkJc3Bpbl9sb2NrX2JoKCZmaWJfbXVsdGlwYXRoX2xvY2spOwotCQkJCWZpLT5maWJfcG93ZXIgLT0gbmgtPm5oX3Bvd2VyOwotCQkJCW5oLT5uaF9wb3dlciA9IDA7CisJCQkJZmktPmZpYl9wb3dlciAtPSBuZXh0aG9wX25oLT5uaF9wb3dlcjsKKwkJCQluZXh0aG9wX25oLT5uaF9wb3dlciA9IDA7CiAJCQkJc3Bpbl91bmxvY2tfYmgoJmZpYl9tdWx0aXBhdGhfbG9jayk7CiAjZW5kaWYKIAkJCQlkZWFkKys7CiAJCQl9CiAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSAotCQkJaWYgKGZvcmNlID4gMSAmJiBuaC0+bmhfZGV2ID09IGRldikgeworCQkJaWYgKGZvcmNlID4gMSAmJiBuZXh0aG9wX25oLT5uaF9kZXYgPT0gZGV2KSB7CiAJCQkJZGVhZCA9IGZpLT5maWJfbmhzOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMTE0NCwxOCArMTE0MSwyMCBAQAogCQlwcmV2X2ZpID0gZmk7CiAJCWFsaXZlID0gMDsKIAkJY2hhbmdlX25leHRob3BzKGZpKSB7Ci0JCQlpZiAoIShuaC0+bmhfZmxhZ3MmUlROSF9GX0RFQUQpKSB7CisJCQlpZiAoIShuZXh0aG9wX25oLT5uaF9mbGFncyZSVE5IX0ZfREVBRCkpIHsKIAkJCQlhbGl2ZSsrOwogCQkJCWNvbnRpbnVlOwogCQkJfQotCQkJaWYgKG5oLT5uaF9kZXYgPT0gTlVMTCB8fCAhKG5oLT5uaF9kZXYtPmZsYWdzJklGRl9VUCkpCisJCQlpZiAobmV4dGhvcF9uaC0+bmhfZGV2ID09IE5VTEwgfHwKKwkJCSAgICAhKG5leHRob3BfbmgtPm5oX2Rldi0+ZmxhZ3MmSUZGX1VQKSkKIAkJCQljb250aW51ZTsKLQkJCWlmIChuaC0+bmhfZGV2ICE9IGRldiB8fCAhX19pbl9kZXZfZ2V0X3J0bmwoZGV2KSkKKwkJCWlmIChuZXh0aG9wX25oLT5uaF9kZXYgIT0gZGV2IHx8CisJCQkgICAgIV9faW5fZGV2X2dldF9ydG5sKGRldikpCiAJCQkJY29udGludWU7CiAJCQlhbGl2ZSsrOwogCQkJc3Bpbl9sb2NrX2JoKCZmaWJfbXVsdGlwYXRoX2xvY2spOwotCQkJbmgtPm5oX3Bvd2VyID0gMDsKLQkJCW5oLT5uaF9mbGFncyAmPSB+UlROSF9GX0RFQUQ7CisJCQluZXh0aG9wX25oLT5uaF9wb3dlciA9IDA7CisJCQluZXh0aG9wX25oLT5uaF9mbGFncyAmPSB+UlROSF9GX0RFQUQ7CiAJCQlzcGluX3VubG9ja19iaCgmZmliX211bHRpcGF0aF9sb2NrKTsKIAkJfSBlbmRmb3JfbmV4dGhvcHMoZmkpCiAKQEAgLTExODIsOSArMTE4MSw5IEBACiAJaWYgKGZpLT5maWJfcG93ZXIgPD0gMCkgewogCQlpbnQgcG93ZXIgPSAwOwogCQljaGFuZ2VfbmV4dGhvcHMoZmkpIHsKLQkJCWlmICghKG5oLT5uaF9mbGFncyZSVE5IX0ZfREVBRCkpIHsKLQkJCQlwb3dlciArPSBuaC0+bmhfd2VpZ2h0OwotCQkJCW5oLT5uaF9wb3dlciA9IG5oLT5uaF93ZWlnaHQ7CisJCQlpZiAoIShuZXh0aG9wX25oLT5uaF9mbGFncyZSVE5IX0ZfREVBRCkpIHsKKwkJCQlwb3dlciArPSBuZXh0aG9wX25oLT5uaF93ZWlnaHQ7CisJCQkJbmV4dGhvcF9uaC0+bmhfcG93ZXIgPSBuZXh0aG9wX25oLT5uaF93ZWlnaHQ7CiAJCQl9CiAJCX0gZW5kZm9yX25leHRob3BzKGZpKTsKIAkJZmktPmZpYl9wb3dlciA9IHBvd2VyOwpAQCAtMTIwNCw5ICsxMjAzLDEwIEBACiAJdyA9IGppZmZpZXMgJSBmaS0+ZmliX3Bvd2VyOwogCiAJY2hhbmdlX25leHRob3BzKGZpKSB7Ci0JCWlmICghKG5oLT5uaF9mbGFncyZSVE5IX0ZfREVBRCkgJiYgbmgtPm5oX3Bvd2VyKSB7Ci0JCQlpZiAoKHcgLT0gbmgtPm5oX3Bvd2VyKSA8PSAwKSB7Ci0JCQkJbmgtPm5oX3Bvd2VyLS07CisJCWlmICghKG5leHRob3BfbmgtPm5oX2ZsYWdzJlJUTkhfRl9ERUFEKSAmJgorCQkgICAgbmV4dGhvcF9uaC0+bmhfcG93ZXIpIHsKKwkJCWlmICgodyAtPSBuZXh0aG9wX25oLT5uaF9wb3dlcikgPD0gMCkgeworCQkJCW5leHRob3BfbmgtPm5oX3Bvd2VyLS07CiAJCQkJZmktPmZpYl9wb3dlci0tOwogCQkJCXJlcy0+bmhfc2VsID0gbmhzZWw7CiAJCQkJc3Bpbl91bmxvY2tfYmgoJmZpYl9tdWx0aXBhdGhfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pY21wLmMgYi9uZXQvaXB2NC9pY21wLmMKaW5kZXggZmUxMWY2MC4uNGI0YzJiYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaWNtcC5jCisrKyBiL25ldC9pcHY0L2ljbXAuYwpAQCAtMTE0LDcgKzExNCw3IEBACiAvKiBBbiBhcnJheSBvZiBlcnJubyBmb3IgZXJyb3IgbWVzc2FnZXMgZnJvbSBkZXN0IHVucmVhY2guICovCiAvKiBSRkMgMTEyMjogMy4yLjIuMSBTdGF0ZXMgdGhhdCBORVRfVU5SRUFDSCwgSE9TVF9VTlJFQUNIIGFuZCBTUl9GQUlMRUQgTVVTVCBiZSBjb25zaWRlcmVkICd0cmFuc2llbnQgZXJycycuICovCiAKLXN0cnVjdCBpY21wX2VyciBpY21wX2Vycl9jb252ZXJ0W10gPSB7Citjb25zdCBzdHJ1Y3QgaWNtcF9lcnIgaWNtcF9lcnJfY29udmVydFtdID0gewogCXsKIAkJLmVycm5vID0gRU5FVFVOUkVBQ0gsCS8qIElDTVBfTkVUX1VOUkVBQ0ggKi8KIAkJLmZhdGFsID0gMCwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lnbXAuYyBiL25ldC9pcHY0L2lnbXAuYwppbmRleCBhNDJmNjU4Li42M2JmMjk4IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pZ21wLmMKKysrIGIvbmV0L2lwdjQvaWdtcC5jCkBAIC0xNzk5LDcgKzE3OTksNyBAQAogCWltbC0+bmV4dCA9IGluZXQtPm1jX2xpc3Q7CiAJaW1sLT5zZmxpc3QgPSBOVUxMOwogCWltbC0+c2Ztb2RlID0gTUNBU1RfRVhDTFVERTsKLQlpbmV0LT5tY19saXN0ID0gaW1sOworCXJjdV9hc3NpZ25fcG9pbnRlcihpbmV0LT5tY19saXN0LCBpbWwpOwogCWlwX21jX2luY19ncm91cChpbl9kZXYsIGFkZHIpOwogCWVyciA9IDA7CiBkb25lOgpAQCAtMTgwNywyNCArMTgwNyw0NiBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyB2b2lkIGlwX3NmX3NvY2tsaXN0X3JlY2xhaW0oc3RydWN0IHJjdV9oZWFkICpycCkKK3sKKwlzdHJ1Y3QgaXBfc2Zfc29ja2xpc3QgKnBzZjsKKworCXBzZiA9IGNvbnRhaW5lcl9vZihycCwgc3RydWN0IGlwX3NmX3NvY2tsaXN0LCByY3UpOworCS8qIHNrX29tZW1fYWxsb2Mgc2hvdWxkIGhhdmUgYmVlbiBkZWNyZWFzZWQgYnkgdGhlIGNhbGxlciovCisJa2ZyZWUocHNmKTsKK30KKwogc3RhdGljIGludCBpcF9tY19sZWF2ZV9zcmMoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgaXBfbWNfc29ja2xpc3QgKmltbCwKIAkJCSAgIHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldikKIHsKKwlzdHJ1Y3QgaXBfc2Zfc29ja2xpc3QgKnBzZiA9IGltbC0+c2ZsaXN0OwogCWludCBlcnI7CiAKLQlpZiAoaW1sLT5zZmxpc3QgPT0gTlVMTCkgeworCWlmIChwc2YgPT0gTlVMTCkgewogCQkvKiBhbnktc291cmNlIGVtcHR5IGV4Y2x1ZGUgY2FzZSAqLwogCQlyZXR1cm4gaXBfbWNfZGVsX3NyYyhpbl9kZXYsICZpbWwtPm11bHRpLmltcl9tdWx0aWFkZHIuc19hZGRyLAogCQkJaW1sLT5zZm1vZGUsIDAsIE5VTEwsIDApOwogCX0KIAllcnIgPSBpcF9tY19kZWxfc3JjKGluX2RldiwgJmltbC0+bXVsdGkuaW1yX211bHRpYWRkci5zX2FkZHIsCi0JCQlpbWwtPnNmbW9kZSwgaW1sLT5zZmxpc3QtPnNsX2NvdW50LAotCQkJaW1sLT5zZmxpc3QtPnNsX2FkZHIsIDApOwotCXNvY2tfa2ZyZWVfcyhzaywgaW1sLT5zZmxpc3QsIElQX1NGTFNJWkUoaW1sLT5zZmxpc3QtPnNsX21heCkpOwotCWltbC0+c2ZsaXN0ID0gTlVMTDsKKwkJCWltbC0+c2Ztb2RlLCBwc2YtPnNsX2NvdW50LCBwc2YtPnNsX2FkZHIsIDApOworCXJjdV9hc3NpZ25fcG9pbnRlcihpbWwtPnNmbGlzdCwgTlVMTCk7CisJLyogZGVjcmVhc2UgbWVtIG5vdyB0byBhdm9pZCB0aGUgbWVtbGVhayB3YXJuaW5nICovCisJYXRvbWljX3N1YihJUF9TRkxTSVpFKHBzZi0+c2xfbWF4KSwgJnNrLT5za19vbWVtX2FsbG9jKTsKKwljYWxsX3JjdSgmcHNmLT5yY3UsIGlwX3NmX3NvY2tsaXN0X3JlY2xhaW0pOwogCXJldHVybiBlcnI7CiB9CiAKKworc3RhdGljIHZvaWQgaXBfbWNfc29ja2xpc3RfcmVjbGFpbShzdHJ1Y3QgcmN1X2hlYWQgKnJwKQoreworCXN0cnVjdCBpcF9tY19zb2NrbGlzdCAqaW1sOworCisJaW1sID0gY29udGFpbmVyX29mKHJwLCBzdHJ1Y3QgaXBfbWNfc29ja2xpc3QsIHJjdSk7CisJLyogc2tfb21lbV9hbGxvYyBzaG91bGQgaGF2ZSBiZWVuIGRlY3JlYXNlZCBieSB0aGUgY2FsbGVyKi8KKwlrZnJlZShpbWwpOworfQorCisKIC8qCiAgKglBc2sgYSBzb2NrZXQgdG8gbGVhdmUgYSBncm91cC4KICAqLwpAQCAtMTg1NCwxMiArMTg3NiwxNCBAQAogCiAJCSh2b2lkKSBpcF9tY19sZWF2ZV9zcmMoc2ssIGltbCwgaW5fZGV2KTsKIAotCQkqaW1scCA9IGltbC0+bmV4dDsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKCppbWxwLCBpbWwtPm5leHQpOwogCiAJCWlmIChpbl9kZXYpCiAJCQlpcF9tY19kZWNfZ3JvdXAoaW5fZGV2LCBncm91cCk7CiAJCXJ0bmxfdW5sb2NrKCk7Ci0JCXNvY2tfa2ZyZWVfcyhzaywgaW1sLCBzaXplb2YoKmltbCkpOworCQkvKiBkZWNyZWFzZSBtZW0gbm93IHRvIGF2b2lkIHRoZSBtZW1sZWFrIHdhcm5pbmcgKi8KKwkJYXRvbWljX3N1YihzaXplb2YoKmltbCksICZzay0+c2tfb21lbV9hbGxvYyk7CisJCWNhbGxfcmN1KCZpbWwtPnJjdSwgaXBfbWNfc29ja2xpc3RfcmVjbGFpbSk7CiAJCXJldHVybiAwOwogCX0KIAlpZiAoIWluX2RldikKQEAgLTE5NzQsOSArMTk5OCwxMiBAQAogCQlpZiAocHNsKSB7CiAJCQlmb3IgKGk9MDsgaTxwc2wtPnNsX2NvdW50OyBpKyspCiAJCQkJbmV3cHNsLT5zbF9hZGRyW2ldID0gcHNsLT5zbF9hZGRyW2ldOwotCQkJc29ja19rZnJlZV9zKHNrLCBwc2wsIElQX1NGTFNJWkUocHNsLT5zbF9tYXgpKTsKKwkJCS8qIGRlY3JlYXNlIG1lbSBub3cgdG8gYXZvaWQgdGhlIG1lbWxlYWsgd2FybmluZyAqLworCQkJYXRvbWljX3N1YihJUF9TRkxTSVpFKHBzbC0+c2xfbWF4KSwgJnNrLT5za19vbWVtX2FsbG9jKTsKKwkJCWNhbGxfcmN1KCZwc2wtPnJjdSwgaXBfc2Zfc29ja2xpc3RfcmVjbGFpbSk7CiAJCX0KLQkJcG1jLT5zZmxpc3QgPSBwc2wgPSBuZXdwc2w7CisJCXJjdV9hc3NpZ25fcG9pbnRlcihwbWMtPnNmbGlzdCwgbmV3cHNsKTsKKwkJcHNsID0gbmV3cHNsOwogCX0KIAlydiA9IDE7CS8qID4gMCBmb3IgaW5zZXJ0IGxvZ2ljIGJlbG93IGlmIHNsX2NvdW50IGlzIDAgKi8KIAlmb3IgKGk9MDsgaTxwc2wtPnNsX2NvdW50OyBpKyspIHsKQEAgLTIwNzIsMTEgKzIwOTksMTMgQEAKIAlpZiAocHNsKSB7CiAJCSh2b2lkKSBpcF9tY19kZWxfc3JjKGluX2RldiwgJm1zZi0+aW1zZl9tdWx0aWFkZHIsIHBtYy0+c2Ztb2RlLAogCQkJcHNsLT5zbF9jb3VudCwgcHNsLT5zbF9hZGRyLCAwKTsKLQkJc29ja19rZnJlZV9zKHNrLCBwc2wsIElQX1NGTFNJWkUocHNsLT5zbF9tYXgpKTsKKwkJLyogZGVjcmVhc2UgbWVtIG5vdyB0byBhdm9pZCB0aGUgbWVtbGVhayB3YXJuaW5nICovCisJCWF0b21pY19zdWIoSVBfU0ZMU0laRShwc2wtPnNsX21heCksICZzay0+c2tfb21lbV9hbGxvYyk7CisJCWNhbGxfcmN1KCZwc2wtPnJjdSwgaXBfc2Zfc29ja2xpc3RfcmVjbGFpbSk7CiAJfSBlbHNlCiAJCSh2b2lkKSBpcF9tY19kZWxfc3JjKGluX2RldiwgJm1zZi0+aW1zZl9tdWx0aWFkZHIsIHBtYy0+c2Ztb2RlLAogCQkJMCwgTlVMTCwgMCk7Ci0JcG1jLT5zZmxpc3QgPSBuZXdwc2w7CisJcmN1X2Fzc2lnbl9wb2ludGVyKHBtYy0+c2ZsaXN0LCBuZXdwc2wpOwogCXBtYy0+c2Ztb2RlID0gbXNmLT5pbXNmX2Ztb2RlOwogCWVyciA9IDA7CiBkb25lOgpAQCAtMjIwOSwzMCArMjIzOCw0MCBAQAogCXN0cnVjdCBpcF9tY19zb2NrbGlzdCAqcG1jOwogCXN0cnVjdCBpcF9zZl9zb2NrbGlzdCAqcHNsOwogCWludCBpOworCWludCByZXQ7CiAKKwlyZXQgPSAxOwogCWlmICghaXB2NF9pc19tdWx0aWNhc3QobG9jX2FkZHIpKQotCQlyZXR1cm4gMTsKKwkJZ290byBvdXQ7CiAKLQlmb3IgKHBtYz1pbmV0LT5tY19saXN0OyBwbWM7IHBtYz1wbWMtPm5leHQpIHsKKwlyY3VfcmVhZF9sb2NrKCk7CisJZm9yIChwbWM9cmN1X2RlcmVmZXJlbmNlKGluZXQtPm1jX2xpc3QpOyBwbWM7IHBtYz1yY3VfZGVyZWZlcmVuY2UocG1jLT5uZXh0KSkgewogCQlpZiAocG1jLT5tdWx0aS5pbXJfbXVsdGlhZGRyLnNfYWRkciA9PSBsb2NfYWRkciAmJgogCQkgICAgcG1jLT5tdWx0aS5pbXJfaWZpbmRleCA9PSBkaWYpCiAJCQlicmVhazsKIAl9CisJcmV0ID0gaW5ldC0+bWNfYWxsOwogCWlmICghcG1jKQotCQlyZXR1cm4gaW5ldC0+bWNfYWxsOworCQlnb3RvIHVubG9jazsKIAlwc2wgPSBwbWMtPnNmbGlzdDsKKwlyZXQgPSAocG1jLT5zZm1vZGUgPT0gTUNBU1RfRVhDTFVERSk7CiAJaWYgKCFwc2wpCi0JCXJldHVybiBwbWMtPnNmbW9kZSA9PSBNQ0FTVF9FWENMVURFOworCQlnb3RvIHVubG9jazsKIAogCWZvciAoaT0wOyBpPHBzbC0+c2xfY291bnQ7IGkrKykgewogCQlpZiAocHNsLT5zbF9hZGRyW2ldID09IHJtdF9hZGRyKQogCQkJYnJlYWs7CiAJfQorCXJldCA9IDA7CiAJaWYgKHBtYy0+c2Ztb2RlID09IE1DQVNUX0lOQ0xVREUgJiYgaSA+PSBwc2wtPnNsX2NvdW50KQotCQlyZXR1cm4gMDsKKwkJZ290byB1bmxvY2s7CiAJaWYgKHBtYy0+c2Ztb2RlID09IE1DQVNUX0VYQ0xVREUgJiYgaSA8IHBzbC0+c2xfY291bnQpCi0JCXJldHVybiAwOwotCXJldHVybiAxOworCQlnb3RvIHVubG9jazsKKwlyZXQgPSAxOwordW5sb2NrOgorCXJjdV9yZWFkX3VubG9jaygpOworb3V0OgorCXJldHVybiByZXQ7CiB9CiAKIC8qCkBAIC0yMjUxLDcgKzIyOTAsNyBAQAogCXJ0bmxfbG9jaygpOwogCXdoaWxlICgoaW1sID0gaW5ldC0+bWNfbGlzdCkgIT0gTlVMTCkgewogCQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7Ci0JCWluZXQtPm1jX2xpc3QgPSBpbWwtPm5leHQ7CisJCXJjdV9hc3NpZ25fcG9pbnRlcihpbmV0LT5tY19saXN0LCBpbWwtPm5leHQpOwogCiAJCWluX2RldiA9IGluZXRkZXZfYnlfaW5kZXgobmV0LCBpbWwtPm11bHRpLmltcl9pZmluZGV4KTsKIAkJKHZvaWQpIGlwX21jX2xlYXZlX3NyYyhzaywgaW1sLCBpbl9kZXYpOwpAQCAtMjI1OSw3ICsyMjk4LDkgQEAKIAkJCWlwX21jX2RlY19ncm91cChpbl9kZXYsIGltbC0+bXVsdGkuaW1yX211bHRpYWRkci5zX2FkZHIpOwogCQkJaW5fZGV2X3B1dChpbl9kZXYpOwogCQl9Ci0JCXNvY2tfa2ZyZWVfcyhzaywgaW1sLCBzaXplb2YoKmltbCkpOworCQkvKiBkZWNyZWFzZSBtZW0gbm93IHRvIGF2b2lkIHRoZSBtZW1sZWFrIHdhcm5pbmcgKi8KKwkJYXRvbWljX3N1YihzaXplb2YoKmltbCksICZzay0+c2tfb21lbV9hbGxvYyk7CisJCWNhbGxfcmN1KCZpbWwtPnJjdSwgaXBfbWNfc29ja2xpc3RfcmVjbGFpbSk7CiAJfQogCXJ0bmxfdW5sb2NrKCk7CiB9CkBAIC0yNjAzLDcgKzI2NDQsNyBAQAogCS5yZWxlYXNlCT0Jc2VxX3JlbGVhc2VfbmV0LAogfTsKIAotc3RhdGljIGludCBpZ21wX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBpZ21wX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZTsKIApAQCAtMjYyMSw3ICsyNjYyLDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIHZvaWQgaWdtcF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlnbXBfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewogCXByb2NfbmV0X3JlbW92ZShuZXQsICJtY2ZpbHRlciIpOwogCXByb2NfbmV0X3JlbW92ZShuZXQsICJpZ21wIik7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jIGIvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYwppbmRleCBlZTE2NDc1Li44ZGE2NDI5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCisrKyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKQEAgLTUyOSw2ICs1MjksOCBAQAogCQkJCXN5bl9hY2tfcmVjYWxjKHJlcSwgdGhyZXNoLCBtYXhfcmV0cmllcywKIAkJCQkJICAgICAgIHF1ZXVlLT5yc2txX2RlZmVyX2FjY2VwdCwKIAkJCQkJICAgICAgICZleHBpcmUsICZyZXNlbmQpOworCQkJCWlmIChyZXEtPnJza19vcHMtPnN5bl9hY2tfdGltZW91dCkKKwkJCQkJcmVxLT5yc2tfb3BzLT5zeW5fYWNrX3RpbWVvdXQocGFyZW50LCByZXEpOwogCQkJCWlmICghZXhwaXJlICYmCiAJCQkJICAgICghcmVzZW5kIHx8CiAJCQkJICAgICAhcmVxLT5yc2tfb3BzLT5ydHhfc3luX2FjayhwYXJlbnQsIHJlcSwgTlVMTCkgfHwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCmluZGV4IDg2OTY0YjMuLmI1OTQzMGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKKysrIGIvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYwpAQCAtMzIsNiArMzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2poYXNoLmg+CiAjaW5jbHVkZSA8bGludXgvcmFuZG9tLmg+CisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjaW5jbHVkZSA8bmV0L2RzdC5oPgogI2luY2x1ZGUgPG5ldC9zb2NrLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bmV0L2ljbXAuaD4KQEAgLTIwNSwxMSArMjA3LDM0IEBACiAJaWYgKChxcC0+cS5sYXN0X2luICYgSU5FVF9GUkFHX0ZJUlNUX0lOKSAmJiBxcC0+cS5mcmFnbWVudHMgIT0gTlVMTCkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqaGVhZCA9IHFwLT5xLmZyYWdtZW50czsKIAotCQkvKiBTZW5kIGFuIElDTVAgIkZyYWdtZW50IFJlYXNzZW1ibHkgVGltZW91dCIgbWVzc2FnZS4gKi8KIAkJcmN1X3JlYWRfbG9jaygpOwogCQloZWFkLT5kZXYgPSBkZXZfZ2V0X2J5X2luZGV4X3JjdShuZXQsIHFwLT5paWYpOwotCQlpZiAoaGVhZC0+ZGV2KQotCQkJaWNtcF9zZW5kKGhlYWQsIElDTVBfVElNRV9FWENFRURFRCwgSUNNUF9FWENfRlJBR1RJTUUsIDApOworCQlpZiAoIWhlYWQtPmRldikKKwkJCWdvdG8gb3V0X3JjdV91bmxvY2s7CisKKwkJLyoKKwkJICogT25seSBzZWFyY2ggcm91dGVyIHRhYmxlIGZvciB0aGUgaGVhZCBmcmFnbWVudCwKKwkJICogd2hlbiBkZWZyYWdpbmcgdGltZW91dCBhdCBQUkVfUk9VVElORyBIT09LLgorCQkgKi8KKwkJaWYgKHFwLT51c2VyID09IElQX0RFRlJBR19DT05OVFJBQ0tfSU4gJiYgIXNrYl9kc3QoaGVhZCkpIHsKKwkJCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoID0gaXBfaGRyKGhlYWQpOworCQkJaW50IGVyciA9IGlwX3JvdXRlX2lucHV0KGhlYWQsIGlwaC0+ZGFkZHIsIGlwaC0+c2FkZHIsCisJCQkJCQkgaXBoLT50b3MsIGhlYWQtPmRldik7CisJCQlpZiAodW5saWtlbHkoZXJyKSkKKwkJCQlnb3RvIG91dF9yY3VfdW5sb2NrOworCisJCQkvKgorCQkJICogT25seSBhbiBlbmQgaG9zdCBuZWVkcyB0byBzZW5kIGFuIElDTVAKKwkJCSAqICJGcmFnbWVudCBSZWFzc2VtYmx5IFRpbWVvdXQiIG1lc3NhZ2UsIHBlciBSRkM3OTIuCisJCQkgKi8KKwkJCWlmIChza2JfcnRhYmxlKGhlYWQpLT5ydF90eXBlICE9IFJUTl9MT0NBTCkKKwkJCQlnb3RvIG91dF9yY3VfdW5sb2NrOworCisJCX0KKworCQkvKiBTZW5kIGFuIElDTVAgIkZyYWdtZW50IFJlYXNzZW1ibHkgVGltZW91dCIgbWVzc2FnZS4gKi8KKwkJaWNtcF9zZW5kKGhlYWQsIElDTVBfVElNRV9FWENFRURFRCwgSUNNUF9FWENfRlJBR1RJTUUsIDApOworb3V0X3JjdV91bmxvY2s6CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCX0KIG91dDoKQEAgLTY0Niw3ICs2NzEsNyBAQAogCXsgfQogfTsKIAotc3RhdGljIGludCBpcDRfZnJhZ3NfbnNfY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBpcDRfZnJhZ3NfbnNfY3RsX3JlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKIAlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaGRyOwpAQCAtNjc2LDcgKzcwMSw3IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXN0YXRpYyB2b2lkIGlwNF9mcmFnc19uc19jdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwNF9mcmFnc19uc19jdGxfdW5yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAKQEAgLTcwNCw3ICs3MjksNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgaXB2NF9mcmFnc19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgaXB2NF9mcmFnc19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJLyoKIAkgKiBGcmFnbWVudCBjYWNoZSBsaW1pdHMuIFdlIHdpbGwgY29tbWl0IDI1NksgYXQgb25lIHRpbWUuIFNob3VsZCB3ZQpAQCAtNzI2LDcgKzc1MSw3IEBACiAJcmV0dXJuIGlwNF9mcmFnc19uc19jdGxfcmVnaXN0ZXIobmV0KTsKIH0KIAotc3RhdGljIHZvaWQgaXB2NF9mcmFnc19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwdjRfZnJhZ3NfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCWlwNF9mcmFnc19uc19jdGxfdW5yZWdpc3RlcihuZXQpOwogCWluZXRfZnJhZ3NfZXhpdF9uZXQoJm5ldC0+aXB2NC5mcmFncywgJmlwNF9mcmFncyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9ncmUuYyBiL25ldC9pcHY0L2lwX2dyZS5jCmluZGV4IGYzNmNlMTUuLmMwYzUyNzQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2dyZS5jCisrKyBiL25ldC9pcHY0L2lwX2dyZS5jCkBAIC03OTMsNyArNzkzLDcgQEAKIAkJfQogCiAJCWlmIChtdHUgPj0gSVBWNl9NSU5fTVRVICYmIG10dSA8IHNrYi0+bGVuIC0gdHVubmVsLT5obGVuICsgZ3JlX2hsZW4pIHsKLQkJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSwgZGV2KTsKKwkJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSk7CiAJCQlpcF9ydF9wdXQocnQpOwogCQkJZ290byB0eF9lcnJvcjsKIAkJfQpAQCAtMTMwNyw3ICsxMzA3LDcgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgaXBncmVfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGlwZ3JlX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgaXBncmVfbmV0ICppZ24gPSBuZXRfZ2VuZXJpYyhuZXQsIGlwZ3JlX25ldF9pZCk7CiAJaW50IGVycjsKQEAgLTEzMzQsNyArMTMzNCw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgaXBncmVfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcGdyZV9leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGlwZ3JlX25ldCAqaWduOwogCUxJU1RfSEVBRChsaXN0KTsKQEAgLTE2NjUsMTQgKzE2NjUsMTUgQEAKIAogCXByaW50ayhLRVJOX0lORk8gIkdSRSBvdmVyIElQdjQgdHVubmVsaW5nIGRyaXZlclxuIik7CiAKLQlpZiAoaW5ldF9hZGRfcHJvdG9jb2woJmlwZ3JlX3Byb3RvY29sLCBJUFBST1RPX0dSRSkgPCAwKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gImlwZ3JlIGluaXQ6IGNhbid0IGFkZCBwcm90b2NvbFxuIik7Ci0JCXJldHVybiAtRUFHQUlOOwotCX0KLQogCWVyciA9IHJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJmlwZ3JlX25ldF9vcHMpOwogCWlmIChlcnIgPCAwKQotCQlnb3RvIGdlbl9kZXZpY2VfZmFpbGVkOworCQlyZXR1cm4gZXJyOworCisJZXJyID0gaW5ldF9hZGRfcHJvdG9jb2woJmlwZ3JlX3Byb3RvY29sLCBJUFBST1RPX0dSRSk7CisJaWYgKGVyciA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaXBncmUgaW5pdDogY2FuJ3QgYWRkIHByb3RvY29sXG4iKTsKKwkJZ290byBhZGRfcHJvdG9fZmFpbGVkOworCX0KIAogCWVyciA9IHJ0bmxfbGlua19yZWdpc3RlcigmaXBncmVfbGlua19vcHMpOwogCWlmIChlcnIgPCAwKQpAQCAtMTY4OCw5ICsxNjg5LDkgQEAKIHRhcF9vcHNfZmFpbGVkOgogCXJ0bmxfbGlua191bnJlZ2lzdGVyKCZpcGdyZV9saW5rX29wcyk7CiBydG5sX2xpbmtfZmFpbGVkOgotCXVucmVnaXN0ZXJfcGVybmV0X2RldmljZSgmaXBncmVfbmV0X29wcyk7Ci1nZW5fZGV2aWNlX2ZhaWxlZDoKIAlpbmV0X2RlbF9wcm90b2NvbCgmaXBncmVfcHJvdG9jb2wsIElQUFJPVE9fR1JFKTsKK2FkZF9wcm90b19mYWlsZWQ6CisJdW5yZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZpcGdyZV9uZXRfb3BzKTsKIAlnb3RvIG91dDsKIH0KIApAQCAtMTY5OCw5ICsxNjk5LDkgQEAKIHsKIAlydG5sX2xpbmtfdW5yZWdpc3RlcigmaXBncmVfdGFwX29wcyk7CiAJcnRubF9saW5rX3VucmVnaXN0ZXIoJmlwZ3JlX2xpbmtfb3BzKTsKLQl1bnJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJmlwZ3JlX25ldF9vcHMpOwogCWlmIChpbmV0X2RlbF9wcm90b2NvbCgmaXBncmVfcHJvdG9jb2wsIElQUFJPVE9fR1JFKSA8IDApCiAJCXByaW50ayhLRVJOX0lORk8gImlwZ3JlIGNsb3NlOiBjYW4ndCByZW1vdmUgcHJvdG9jb2xcbiIpOworCXVucmVnaXN0ZXJfcGVybmV0X2RldmljZSgmaXBncmVfbmV0X29wcyk7CiB9CiAKIG1vZHVsZV9pbml0KGlwZ3JlX2luaXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKaW5kZXggY2FmYWQ5Yi4uNjQ0ZGM0MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYworKysgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCkBAIC00NTEsNyArNDUxLDggQEAKIAkJCSAgICAgKDE8PElQX1RUTCkgfCAoMTw8SVBfSERSSU5DTCkgfAogCQkJICAgICAoMTw8SVBfTVRVX0RJU0NPVkVSKSB8ICgxPDxJUF9SRUNWRVJSKSB8CiAJCQkgICAgICgxPDxJUF9ST1VURVJfQUxFUlQpIHwgKDE8PElQX0ZSRUVCSU5EKSB8Ci0JCQkgICAgICgxPDxJUF9QQVNTU0VDKSB8ICgxPDxJUF9UUkFOU1BBUkVOVCkpKSB8fAorCQkJICAgICAoMTw8SVBfUEFTU1NFQykgfCAoMTw8SVBfVFJBTlNQQVJFTlQpIHwKKwkJCSAgICAgKDE8PElQX01JTlRUTCkpKSB8fAogCSAgICBvcHRuYW1lID09IElQX01VTFRJQ0FTVF9UVEwgfHwKIAkgICAgb3B0bmFtZSA9PSBJUF9NVUxUSUNBU1RfQUxMIHx8CiAJICAgIG9wdG5hbWUgPT0gSVBfTVVMVElDQVNUX0xPT1AgfHwKQEAgLTkzNiw2ICs5MzcsMTQgQEAKIAkJaW5ldC0+dHJhbnNwYXJlbnQgPSAhIXZhbDsKIAkJYnJlYWs7CiAKKwljYXNlIElQX01JTlRUTDoKKwkJaWYgKG9wdGxlbiA8IDEpCisJCQlnb3RvIGVfaW52YWw7CisJCWlmICh2YWwgPCAwIHx8IHZhbCA+IDI1NSkKKwkJCWdvdG8gZV9pbnZhbDsKKwkJaW5ldC0+bWluX3R0bCA9IHZhbDsKKwkJYnJlYWs7CisKIAlkZWZhdWx0OgogCQllcnIgPSAtRU5PUFJPVE9PUFQ7CiAJCWJyZWFrOwpAQCAtMTE5OCw2ICsxMjA3LDkgQEAKIAljYXNlIElQX1RSQU5TUEFSRU5UOgogCQl2YWwgPSBpbmV0LT50cmFuc3BhcmVudDsKIAkJYnJlYWs7CisJY2FzZSBJUF9NSU5UVEw6CisJCXZhbCA9IGluZXQtPm1pbl90dGw7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJlbGVhc2Vfc29jayhzayk7CiAJCXJldHVybiAtRU5PUFJPVE9PUFQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGNvbXAuYyBiL25ldC9pcHY0L2lwY29tcC5jCmluZGV4IDU0NGNlMDguLjYyOTA2NzUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwY29tcC5jCisrKyBiL25ldC9pcHY0L2lwY29tcC5jCkBAIC0yNSw2ICsyNSw3IEBACiAKIHN0YXRpYyB2b2lkIGlwY29tcDRfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbmZvKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCV9fYmUzMiBzcGk7CiAJc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBpcF9jb21wX2hkciAqaXBjaCA9IChzdHJ1Y3QgaXBfY29tcF9oZHIgKikoc2tiLT5kYXRhKyhpcGgtPmlobDw8MikpOwpAQCAtMzUsNyArMzYsNyBAQAogCQlyZXR1cm47CiAKIAlzcGkgPSBodG9ubChudG9ocyhpcGNoLT5jcGkpKTsKLQl4ID0geGZybV9zdGF0ZV9sb29rdXAoJmluaXRfbmV0LCAoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwKKwl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBza2ItPm1hcmssICh4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPmRhZGRyLAogCQkJICAgICAgc3BpLCBJUFBST1RPX0NPTVAsIEFGX0lORVQpOwogCWlmICgheCkKIAkJcmV0dXJuOwpAQCAtNDcsOSArNDgsMTAgQEAKIC8qIFdlIGFsd2F5cyBob2xkIG9uZSB0dW5uZWwgdXNlciByZWZlcmVuY2UgdG8gaW5kaWNhdGUgYSB0dW5uZWwgKi8KIHN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqaXBjb21wX3R1bm5lbF9jcmVhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0geHNfbmV0KHgpOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp0OwogCi0JdCA9IHhmcm1fc3RhdGVfYWxsb2MoJmluaXRfbmV0KTsKKwl0ID0geGZybV9zdGF0ZV9hbGxvYyhuZXQpOwogCWlmICh0ID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCkBAIC02MSw2ICs2Myw3IEBACiAJdC0+cHJvcHMubW9kZSA9IHgtPnByb3BzLm1vZGU7CiAJdC0+cHJvcHMuc2FkZHIuYTQgPSB4LT5wcm9wcy5zYWRkci5hNDsKIAl0LT5wcm9wcy5mbGFncyA9IHgtPnByb3BzLmZsYWdzOworCW1lbWNweSgmdC0+bWFyaywgJngtPm1hcmssIHNpemVvZih0LT5tYXJrKSk7CiAKIAlpZiAoeGZybV9pbml0X3N0YXRlKHQpKQogCQlnb3RvIGVycm9yOwpAQCAtODIsMTAgKzg1LDEyIEBACiAgKi8KIHN0YXRpYyBpbnQgaXBjb21wX3R1bm5lbF9hdHRhY2goc3RydWN0IHhmcm1fc3RhdGUgKngpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0geHNfbmV0KHgpOwogCWludCBlcnIgPSAwOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp0OworCXUzMiBtYXJrID0geC0+bWFyay52ICYgeC0+bWFyay5tOwogCi0JdCA9IHhmcm1fc3RhdGVfbG9va3VwKCZpbml0X25ldCwgKHhmcm1fYWRkcmVzc190ICopJngtPmlkLmRhZGRyLmE0LAorCXQgPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG1hcmssICh4ZnJtX2FkZHJlc3NfdCAqKSZ4LT5pZC5kYWRkci5hNCwKIAkJCSAgICAgIHgtPnByb3BzLnNhZGRyLmE0LCBJUFBST1RPX0lQSVAsIEFGX0lORVQpOwogCWlmICghdCkgewogCQl0ID0gaXBjb21wX3R1bm5lbF9jcmVhdGUoeCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmMKaW5kZXggZWRhMDRmZS4uMmYzMDJkMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBpcC5jCisrKyBiL25ldC9pcHY0L2lwaXAuYwpAQCAtMTMwLDcgKzEzMCw2IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmZiX3R1bm5lbF9kZXY7CiB9OwogCi1zdGF0aWMgdm9pZCBpcGlwX2ZiX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgaXBpcF90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGlwaXBfdHVubmVsX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCkBAIC03MzAsNyArNzI5LDcgQEAKIAlpcGlwX3R1bm5lbF9iaW5kX2RldihkZXYpOwogfQogCi1zdGF0aWMgdm9pZCBpcGlwX2ZiX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBfX25ldF9pbml0IGlwaXBfZmJfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsICp0dW5uZWwgPSBuZXRkZXZfcHJpdihkZXYpOwogCXN0cnVjdCBpcGhkciAqaXBoID0gJnR1bm5lbC0+cGFybXMuaXBoOwpAQCAtNzczLDcgKzc3Miw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGlwaXBfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGlwaXBfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBpcGlwX25ldCAqaXBuID0gbmV0X2dlbmVyaWMobmV0LCBpcGlwX25ldF9pZCk7CiAJaW50IGVycjsKQEAgLTgwNiw3ICs4MDUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGlwaXBfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcGlwX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgaXBpcF9uZXQgKmlwbiA9IG5ldF9nZW5lcmljKG5ldCwgaXBpcF9uZXRfaWQpOwogCUxJU1RfSEVBRChsaXN0KTsKQEAgLTgzMSwxNSArODMwLDE0IEBACiAKIAlwcmludGsoYmFubmVyKTsKIAotCWlmICh4ZnJtNF90dW5uZWxfcmVnaXN0ZXIoJmlwaXBfaGFuZGxlciwgQUZfSU5FVCkpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiaXBpcCBpbml0OiBjYW4ndCByZWdpc3RlciB0dW5uZWxcbiIpOwotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0KIAllcnIgPSByZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZpcGlwX25ldF9vcHMpOwotCWlmIChlcnIpCi0JCXhmcm00X3R1bm5lbF9kZXJlZ2lzdGVyKCZpcGlwX2hhbmRsZXIsIEFGX0lORVQpOwotCisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisJZXJyID0geGZybTRfdHVubmVsX3JlZ2lzdGVyKCZpcGlwX2hhbmRsZXIsIEFGX0lORVQpOworCWlmIChlcnIgPCAwKSB7CisJCXVucmVnaXN0ZXJfcGVybmV0X2RldmljZSgmaXBpcF9uZXRfb3BzKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaXBpcCBpbml0OiBjYW4ndCByZWdpc3RlciB0dW5uZWxcbiIpOworCX0KIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcG1yLmMgYi9uZXQvaXB2NC9pcG1yLmMKaW5kZXggNTQ1OTZmNy4uODU4MmUxMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBtci5jCisrKyBiL25ldC9pcHY0L2lwbXIuYwpAQCAtMTE2Myw5ICsxMTYzLDYgQEAKIAlpbnQgY3Q7CiAJTElTVF9IRUFEKGxpc3QpOwogCi0JaWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCBuZXQpKQotCQlyZXR1cm4gTk9USUZZX0RPTkU7Ci0KIAlpZiAoZXZlbnQgIT0gTkVUREVWX1VOUkVHSVNURVIpCiAJCXJldHVybiBOT1RJRllfRE9ORTsKIAl2ID0gJm5ldC0+aXB2NC52aWZfdGFibGVbMF07CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYwppbmRleCA5MDIwM2UxLi5mMDdkNzdmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oPgorI2luY2x1ZGUgIi4uLy4uL25ldGZpbHRlci94dF9yZXBsZGF0YS5oIgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQHJlZGhhdC5jb20+Iik7CkBAIC01OCw2ICs1OSwxMiBAQAogI2RlZmluZSBBUlBfTkZfQVNTRVJUKHgpCiAjZW5kaWYKIAordm9pZCAqYXJwdF9hbGxvY19pbml0aWFsX3RhYmxlKGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqaW5mbykKK3sKKwlyZXR1cm4geHRfYWxsb2NfaW5pdGlhbF90YWJsZShhcnB0LCBBUlBUKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGFycHRfYWxsb2NfaW5pdGlhbF90YWJsZSk7CisKIHN0YXRpYyBpbmxpbmUgaW50IGFycF9kZXZhZGRyX2NvbXBhcmUoY29uc3Qgc3RydWN0IGFycHRfZGV2YWRkcl9pbmZvICphcCwKIAkJCQkgICAgICBjb25zdCBjaGFyICpoZHJfYWRkciwgaW50IGxlbikKIHsKQEAgLTIyNiw3ICsyMzMsMTQgQEAKIAlyZXR1cm4gTkZfRFJPUDsKIH0KIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgYXJwdF9lbnRyeSAqZ2V0X2VudHJ5KHZvaWQgKmJhc2UsIHVuc2lnbmVkIGludCBvZmZzZXQpCitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCAqCithcnB0X2dldF90YXJnZXRfYyhjb25zdCBzdHJ1Y3QgYXJwdF9lbnRyeSAqZSkKK3sKKwlyZXR1cm4gYXJwdF9nZXRfdGFyZ2V0KChzdHJ1Y3QgYXJwdF9lbnRyeSAqKWUpOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhcnB0X2VudHJ5ICoKK2dldF9lbnRyeShjb25zdCB2b2lkICpiYXNlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewogCXJldHVybiAoc3RydWN0IGFycHRfZW50cnkgKikoYmFzZSArIG9mZnNldCk7CiB9CkBAIC0yNzMsNyArMjg3LDcgQEAKIAogCWFycCA9IGFycF9oZHIoc2tiKTsKIAlkbyB7Ci0JCXN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCAqdDsKKwkJY29uc3Qgc3RydWN0IGFycHRfZW50cnlfdGFyZ2V0ICp0OwogCQlpbnQgaGRyX2xlbjsKIAogCQlpZiAoIWFycF9wYWNrZXRfbWF0Y2goYXJwLCBza2ItPmRldiwgaW5kZXYsIG91dGRldiwgJmUtPmFycCkpIHsKQEAgLTI4NSw3ICsyOTksNyBAQAogCQkJKDIgKiBza2ItPmRldi0+YWRkcl9sZW4pOwogCQlBRERfQ09VTlRFUihlLT5jb3VudGVycywgaGRyX2xlbiwgMSk7CiAKLQkJdCA9IGFycHRfZ2V0X3RhcmdldChlKTsKKwkJdCA9IGFycHRfZ2V0X3RhcmdldF9jKGUpOwogCiAJCS8qIFN0YW5kYXJkIHRhcmdldD8gKi8KIAkJaWYgKCF0LT51Lmtlcm5lbC50YXJnZXQtPnRhcmdldCkgewpAQCAtMzUxLDcgKzM2NSw3IEBACiAvKiBGaWd1cmVzIG91dCBmcm9tIHdoYXQgaG9vayBlYWNoIHJ1bGUgY2FuIGJlIGNhbGxlZDogcmV0dXJucyAwIGlmCiAgKiB0aGVyZSBhcmUgbG9vcHMuICBQdXRzIGhvb2sgYml0bWFzayBpbiBjb21lZnJvbS4KICAqLwotc3RhdGljIGludCBtYXJrX3NvdXJjZV9jaGFpbnMoc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCitzdGF0aWMgaW50IG1hcmtfc291cmNlX2NoYWlucyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywKIAkJCSAgICAgIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcywgdm9pZCAqZW50cnkwKQogewogCXVuc2lnbmVkIGludCBob29rOwpAQCAtMzcyLDcgKzM4Niw3IEBACiAKIAkJZm9yICg7OykgewogCQkJY29uc3Qgc3RydWN0IGFycHRfc3RhbmRhcmRfdGFyZ2V0ICp0Ci0JCQkJPSAodm9pZCAqKWFycHRfZ2V0X3RhcmdldChlKTsKKwkJCQk9ICh2b2lkICopYXJwdF9nZXRfdGFyZ2V0X2MoZSk7CiAJCQlpbnQgdmlzaXRlZCA9IGUtPmNvbWVmcm9tICYgKDEgPDwgaG9vayk7CiAKIAkJCWlmIChlLT5jb21lZnJvbSAmICgxIDw8IE5GX0FSUF9OVU1IT09LUykpIHsKQEAgLTQ1Niw3ICs0NzAsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjaGVja19lbnRyeShzdHJ1Y3QgYXJwdF9lbnRyeSAqZSwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBpbmxpbmUgaW50IGNoZWNrX2VudHJ5KGNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5ICplLCBjb25zdCBjaGFyICpuYW1lKQogewogCWNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCAqdDsKIApAQCAtNDY4LDcgKzQ4Miw3IEBACiAJaWYgKGUtPnRhcmdldF9vZmZzZXQgKyBzaXplb2Yoc3RydWN0IGFycHRfZW50cnlfdGFyZ2V0KSA+IGUtPm5leHRfb2Zmc2V0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXQgPSBhcnB0X2dldF90YXJnZXQoZSk7CisJdCA9IGFycHRfZ2V0X3RhcmdldF9jKGUpOwogCWlmIChlLT50YXJnZXRfb2Zmc2V0ICsgdC0+dS50YXJnZXRfc2l6ZSA+IGUtPm5leHRfb2Zmc2V0KQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNDk4LDggKzUxMiw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50Ci1maW5kX2NoZWNrX2VudHJ5KHN0cnVjdCBhcnB0X2VudHJ5ICplLCBjb25zdCBjaGFyICpuYW1lLCB1bnNpZ25lZCBpbnQgc2l6ZSwKLQkJIHVuc2lnbmVkIGludCAqaSkKK2ZpbmRfY2hlY2tfZW50cnkoc3RydWN0IGFycHRfZW50cnkgKmUsIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBzaXplKQogewogCXN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCAqdDsKIAlzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQ7CkBAIC01MjQsOCArNTM3LDYgQEAKIAlyZXQgPSBjaGVja190YXJnZXQoZSwgbmFtZSk7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7Ci0KLQkoKmkpKys7CiAJcmV0dXJuIDA7CiBlcnI6CiAJbW9kdWxlX3B1dCh0LT51Lmtlcm5lbC50YXJnZXQtPm1lKTsKQEAgLTUzMywxNCArNTQ0LDE0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGJvb2wgY2hlY2tfdW5kZXJmbG93KHN0cnVjdCBhcnB0X2VudHJ5ICplKQorc3RhdGljIGJvb2wgY2hlY2tfdW5kZXJmbG93KGNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5ICplKQogewogCWNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCAqdDsKIAl1bnNpZ25lZCBpbnQgdmVyZGljdDsKIAogCWlmICghdW5jb25kaXRpb25hbCgmZS0+YXJwKSkKIAkJcmV0dXJuIGZhbHNlOwotCXQgPSBhcnB0X2dldF90YXJnZXQoZSk7CisJdCA9IGFycHRfZ2V0X3RhcmdldF9jKGUpOwogCWlmIChzdHJjbXAodC0+dS51c2VyLm5hbWUsIFhUX1NUQU5EQVJEX1RBUkdFVCkgIT0gMCkKIAkJcmV0dXJuIGZhbHNlOwogCXZlcmRpY3QgPSAoKHN0cnVjdCBhcnB0X3N0YW5kYXJkX3RhcmdldCAqKXQpLT52ZXJkaWN0OwpAQCAtNTUwLDEyICs1NjEsMTEgQEAKIAogc3RhdGljIGlubGluZSBpbnQgY2hlY2tfZW50cnlfc2l6ZV9hbmRfaG9va3Moc3RydWN0IGFycHRfZW50cnkgKmUsCiAJCQkJCSAgICAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCi0JCQkJCSAgICAgdW5zaWduZWQgY2hhciAqYmFzZSwKLQkJCQkJICAgICB1bnNpZ25lZCBjaGFyICpsaW1pdCwKKwkJCQkJICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlLAorCQkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxpbWl0LAogCQkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqaG9va19lbnRyaWVzLAogCQkJCQkgICAgIGNvbnN0IHVuc2lnbmVkIGludCAqdW5kZXJmbG93cywKLQkJCQkJICAgICB1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3MsCi0JCQkJCSAgICAgdW5zaWduZWQgaW50ICppKQorCQkJCQkgICAgIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcykKIHsKIAl1bnNpZ25lZCBpbnQgaDsKIApAQCAtNTkyLDE5ICs2MDIsMTQgQEAKIAkvKiBDbGVhciBjb3VudGVycyBhbmQgY29tZWZyb20gKi8KIAllLT5jb3VudGVycyA9ICgoc3RydWN0IHh0X2NvdW50ZXJzKSB7IDAsIDAgfSk7CiAJZS0+Y29tZWZyb20gPSAwOwotCi0JKCppKSsrOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjbGVhbnVwX2VudHJ5KHN0cnVjdCBhcnB0X2VudHJ5ICplLCB1bnNpZ25lZCBpbnQgKmkpCitzdGF0aWMgaW5saW5lIHZvaWQgY2xlYW51cF9lbnRyeShzdHJ1Y3QgYXJwdF9lbnRyeSAqZSkKIHsKIAlzdHJ1Y3QgeHRfdGdkdG9yX3BhcmFtIHBhcjsKIAlzdHJ1Y3QgYXJwdF9lbnRyeV90YXJnZXQgKnQ7CiAKLQlpZiAoaSAmJiAoKmkpLS0gPT0gMCkKLQkJcmV0dXJuIDE7Ci0KIAl0ID0gYXJwdF9nZXRfdGFyZ2V0KGUpOwogCXBhci50YXJnZXQgICA9IHQtPnUua2VybmVsLnRhcmdldDsKIAlwYXIudGFyZ2luZm8gPSB0LT5kYXRhOwpAQCAtNjEyLDI2ICs2MTcsMjAgQEAKIAlpZiAocGFyLnRhcmdldC0+ZGVzdHJveSAhPSBOVUxMKQogCQlwYXIudGFyZ2V0LT5kZXN0cm95KCZwYXIpOwogCW1vZHVsZV9wdXQocGFyLnRhcmdldC0+bWUpOwotCXJldHVybiAwOwogfQogCiAvKiBDaGVja3MgYW5kIHRyYW5zbGF0ZXMgdGhlIHVzZXItc3VwcGxpZWQgdGFibGUgc2VnbWVudCAoaGVsZCBpbgogICogbmV3aW5mbykuCiAgKi8KLXN0YXRpYyBpbnQgdHJhbnNsYXRlX3RhYmxlKGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkgICB1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3MsCi0JCQkgICBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywKLQkJCSAgIHZvaWQgKmVudHJ5MCwKLQkJCSAgIHVuc2lnbmVkIGludCBzaXplLAotCQkJICAgdW5zaWduZWQgaW50IG51bWJlciwKLQkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCAqaG9va19lbnRyaWVzLAotCQkJICAgY29uc3QgdW5zaWduZWQgaW50ICp1bmRlcmZsb3dzKQorc3RhdGljIGludCB0cmFuc2xhdGVfdGFibGUoc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sIHZvaWQgKmVudHJ5MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhcnB0X3JlcGxhY2UgKnJlcGwpCiB7CisJc3RydWN0IGFycHRfZW50cnkgKml0ZXI7CiAJdW5zaWduZWQgaW50IGk7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAotCW5ld2luZm8tPnNpemUgPSBzaXplOwotCW5ld2luZm8tPm51bWJlciA9IG51bWJlcjsKKwluZXdpbmZvLT5zaXplID0gcmVwbC0+c2l6ZTsKKwluZXdpbmZvLT5udW1iZXIgPSByZXBsLT5udW1fZW50cmllczsKIAogCS8qIEluaXQgYWxsIGhvb2tzIHRvIGltcG9zc2libGUgdmFsdWUuICovCiAJZm9yIChpID0gMDsgaSA8IE5GX0FSUF9OVU1IT09LUzsgaSsrKSB7CkBAIC02NDMsNTIgKzY0Miw2MyBAQAogCWkgPSAwOwogCiAJLyogV2FsayB0aHJvdWdoIGVudHJpZXMsIGNoZWNraW5nIG9mZnNldHMuICovCi0JcmV0ID0gQVJQVF9FTlRSWV9JVEVSQVRFKGVudHJ5MCwgbmV3aW5mby0+c2l6ZSwKLQkJCQkgY2hlY2tfZW50cnlfc2l6ZV9hbmRfaG9va3MsCi0JCQkJIG5ld2luZm8sCi0JCQkJIGVudHJ5MCwKLQkJCQkgZW50cnkwICsgc2l6ZSwKLQkJCQkgaG9va19lbnRyaWVzLCB1bmRlcmZsb3dzLCB2YWxpZF9ob29rcywgJmkpOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgZW50cnkwLCBuZXdpbmZvLT5zaXplKSB7CisJCXJldCA9IGNoZWNrX2VudHJ5X3NpemVfYW5kX2hvb2tzKGl0ZXIsIG5ld2luZm8sIGVudHJ5MCwKKwkJCQkJCSBlbnRyeTAgKyByZXBsLT5zaXplLAorCQkJCQkJIHJlcGwtPmhvb2tfZW50cnksCisJCQkJCQkgcmVwbC0+dW5kZXJmbG93LAorCQkJCQkJIHJlcGwtPnZhbGlkX2hvb2tzKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJYnJlYWs7CisJCSsraTsKKwl9CiAJZHVwcmludGYoInRyYW5zbGF0ZV90YWJsZTogQVJQVF9FTlRSWV9JVEVSQVRFIGdpdmVzICVkXG4iLCByZXQpOwogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAotCWlmIChpICE9IG51bWJlcikgeworCWlmIChpICE9IHJlcGwtPm51bV9lbnRyaWVzKSB7CiAJCWR1cHJpbnRmKCJ0cmFuc2xhdGVfdGFibGU6ICV1IG5vdCAldSBlbnRyaWVzXG4iLAotCQkJIGksIG51bWJlcik7CisJCQkgaSwgcmVwbC0+bnVtX2VudHJpZXMpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBDaGVjayBob29rcyBhbGwgYXNzaWduZWQgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTkZfQVJQX05VTUhPT0tTOyBpKyspIHsKIAkJLyogT25seSBob29rcyB3aGljaCBhcmUgdmFsaWQgKi8KLQkJaWYgKCEodmFsaWRfaG9va3MgJiAoMSA8PCBpKSkpCisJCWlmICghKHJlcGwtPnZhbGlkX2hvb2tzICYgKDEgPDwgaSkpKQogCQkJY29udGludWU7CiAJCWlmIChuZXdpbmZvLT5ob29rX2VudHJ5W2ldID09IDB4RkZGRkZGRkYpIHsKIAkJCWR1cHJpbnRmKCJJbnZhbGlkIGhvb2sgZW50cnkgJXUgJXVcbiIsCi0JCQkJIGksIGhvb2tfZW50cmllc1tpXSk7CisJCQkJIGksIHJlcGwtPmhvb2tfZW50cnlbaV0pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKG5ld2luZm8tPnVuZGVyZmxvd1tpXSA9PSAweEZGRkZGRkZGKSB7CiAJCQlkdXByaW50ZigiSW52YWxpZCB1bmRlcmZsb3cgJXUgJXVcbiIsCi0JCQkJIGksIHVuZGVyZmxvd3NbaV0pOworCQkJCSBpLCByZXBsLT51bmRlcmZsb3dbaV0pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CiAKLQlpZiAoIW1hcmtfc291cmNlX2NoYWlucyhuZXdpbmZvLCB2YWxpZF9ob29rcywgZW50cnkwKSkgeworCWlmICghbWFya19zb3VyY2VfY2hhaW5zKG5ld2luZm8sIHJlcGwtPnZhbGlkX2hvb2tzLCBlbnRyeTApKSB7CiAJCWR1cHJpbnRmKCJMb29waW5nIGhvb2tcbiIpOwogCQlyZXR1cm4gLUVMT09QOwogCX0KIAogCS8qIEZpbmFsbHksIGVhY2ggc2FuaXR5IGNoZWNrIG11c3QgcGFzcyAqLwogCWkgPSAwOwotCXJldCA9IEFSUFRfRU5UUllfSVRFUkFURShlbnRyeTAsIG5ld2luZm8tPnNpemUsCi0JCQkJIGZpbmRfY2hlY2tfZW50cnksIG5hbWUsIHNpemUsICZpKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIGVudHJ5MCwgbmV3aW5mby0+c2l6ZSkgeworCQlyZXQgPSBmaW5kX2NoZWNrX2VudHJ5KGl0ZXIsIHJlcGwtPm5hbWUsIHJlcGwtPnNpemUpOworCQlpZiAocmV0ICE9IDApCisJCQlicmVhazsKKwkJKytpOworCX0KIAogCWlmIChyZXQgIT0gMCkgewotCQlBUlBUX0VOVFJZX0lURVJBVEUoZW50cnkwLCBuZXdpbmZvLT5zaXplLAotCQkJCWNsZWFudXBfZW50cnksICZpKTsKKwkJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBlbnRyeTAsIG5ld2luZm8tPnNpemUpIHsKKwkJCWlmIChpLS0gPT0gMCkKKwkJCQlicmVhazsKKwkJCWNsZWFudXBfZW50cnkoaXRlcik7CisJCX0KIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTcwMSwzMCArNzExLDEwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogR2V0cyBjb3VudGVycy4gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGFkZF9lbnRyeV90b19jb3VudGVyKGNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5ICplLAotCQkJCSAgICAgICBzdHJ1Y3QgeHRfY291bnRlcnMgdG90YWxbXSwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50ICppKQotewotCUFERF9DT1VOVEVSKHRvdGFsWyppXSwgZS0+Y291bnRlcnMuYmNudCwgZS0+Y291bnRlcnMucGNudCk7Ci0KLQkoKmkpKys7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNldF9lbnRyeV90b19jb3VudGVyKGNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5ICplLAotCQkJCSAgICAgICBzdHJ1Y3QgeHRfY291bnRlcnMgdG90YWxbXSwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50ICppKQotewotCVNFVF9DT1VOVEVSKHRvdGFsWyppXSwgZS0+Y291bnRlcnMuYmNudCwgZS0+Y291bnRlcnMucGNudCk7Ci0KLQkoKmkpKys7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkIGdldF9jb3VudGVycyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqdCwKIAkJCSBzdHJ1Y3QgeHRfY291bnRlcnMgY291bnRlcnNbXSkKIHsKKwlzdHJ1Y3QgYXJwdF9lbnRyeSAqaXRlcjsKIAl1bnNpZ25lZCBpbnQgY3B1OwogCXVuc2lnbmVkIGludCBpOwogCXVuc2lnbmVkIGludCBjdXJjcHU7CkBAIC03NDAsMzIgKzczMCwzMiBAQAogCWN1cmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAogCWkgPSAwOwotCUFSUFRfRU5UUllfSVRFUkFURSh0LT5lbnRyaWVzW2N1cmNwdV0sCi0JCQkgICB0LT5zaXplLAotCQkJICAgc2V0X2VudHJ5X3RvX2NvdW50ZXIsCi0JCQkgICBjb3VudGVycywKLQkJCSAgICZpKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIHQtPmVudHJpZXNbY3VyY3B1XSwgdC0+c2l6ZSkgeworCQlTRVRfQ09VTlRFUihjb3VudGVyc1tpXSwgaXRlci0+Y291bnRlcnMuYmNudCwKKwkJCSAgICBpdGVyLT5jb3VudGVycy5wY250KTsKKwkJKytpOworCX0KIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJaWYgKGNwdSA9PSBjdXJjcHUpCiAJCQljb250aW51ZTsKIAkJaSA9IDA7CiAJCXh0X2luZm9fd3Jsb2NrKGNwdSk7Ci0JCUFSUFRfRU5UUllfSVRFUkFURSh0LT5lbnRyaWVzW2NwdV0sCi0JCQkJICAgdC0+c2l6ZSwKLQkJCQkgICBhZGRfZW50cnlfdG9fY291bnRlciwKLQkJCQkgICBjb3VudGVycywKLQkJCQkgICAmaSk7CisJCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgdC0+ZW50cmllc1tjcHVdLCB0LT5zaXplKSB7CisJCQlBRERfQ09VTlRFUihjb3VudGVyc1tpXSwgaXRlci0+Y291bnRlcnMuYmNudCwKKwkJCQkgICAgaXRlci0+Y291bnRlcnMucGNudCk7CisJCQkrK2k7CisJCX0KIAkJeHRfaW5mb193cnVubG9jayhjcHUpOwogCX0KIAlsb2NhbF9iaF9lbmFibGUoKTsKIH0KIAotc3RhdGljIHN0cnVjdCB4dF9jb3VudGVycyAqYWxsb2NfY291bnRlcnMoc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKK3N0YXRpYyBzdHJ1Y3QgeHRfY291bnRlcnMgKmFsbG9jX2NvdW50ZXJzKGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCiB7CiAJdW5zaWduZWQgaW50IGNvdW50ZXJzaXplOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7Ci0Jc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKKwljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOwogCiAJLyogV2UgbmVlZCBhdG9taWMgc25hcHNob3Qgb2YgY291bnRlcnM6IHJlc3QgZG9lc24ndCBjaGFuZ2UKIAkgKiAob3RoZXIgdGhhbiBjb21lZnJvbSwgd2hpY2ggdXNlcnNwYWNlIGRvZXNuJ3QgY2FyZQpAQCAtNzgzLDExICs3NzMsMTEgQEAKIH0KIAogc3RhdGljIGludCBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSwKLQkJCQlzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAorCQkJCWNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAJCQkJdm9pZCBfX3VzZXIgKnVzZXJwdHIpCiB7CiAJdW5zaWduZWQgaW50IG9mZiwgbnVtOwotCXN0cnVjdCBhcnB0X2VudHJ5ICplOworCWNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5ICplOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7CiAJc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKIAlpbnQgcmV0ID0gMDsKQEAgLTgwNyw3ICs3OTcsNyBAQAogCS8qIEZJWE1FOiB1c2UgaXRlcmF0b3IgbWFjcm9zIC0tUlIgKi8KIAkvKiAuLi4gdGhlbiBnbyBiYWNrIGFuZCBmaXggY291bnRlcnMgYW5kIG5hbWVzICovCiAJZm9yIChvZmYgPSAwLCBudW0gPSAwOyBvZmYgPCB0b3RhbF9zaXplOyBvZmYgKz0gZS0+bmV4dF9vZmZzZXQsIG51bSsrKXsKLQkJc3RydWN0IGFycHRfZW50cnlfdGFyZ2V0ICp0OworCQljb25zdCBzdHJ1Y3QgYXJwdF9lbnRyeV90YXJnZXQgKnQ7CiAKIAkJZSA9IChzdHJ1Y3QgYXJwdF9lbnRyeSAqKShsb2NfY3B1X2VudHJ5ICsgb2ZmKTsKIAkJaWYgKGNvcHlfdG9fdXNlcih1c2VycHRyICsgb2ZmCkBAIC04MTgsNyArODA4LDcgQEAKIAkJCWdvdG8gZnJlZV9jb3VudGVyczsKIAkJfQogCi0JCXQgPSBhcnB0X2dldF90YXJnZXQoZSk7CisJCXQgPSBhcnB0X2dldF90YXJnZXRfYyhlKTsKIAkJaWYgKGNvcHlfdG9fdXNlcih1c2VycHRyICsgb2ZmICsgZS0+dGFyZ2V0X29mZnNldAogCQkJCSArIG9mZnNldG9mKHN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCwKIAkJCQkJICAgIHUudXNlci5uYW1lKSwKQEAgLTgzNSw3ICs4MjUsNyBAQAogfQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAotc3RhdGljIHZvaWQgY29tcGF0X3N0YW5kYXJkX2Zyb21fdXNlcih2b2lkICpkc3QsIHZvaWQgKnNyYykKK3N0YXRpYyB2b2lkIGNvbXBhdF9zdGFuZGFyZF9mcm9tX3VzZXIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiB7CiAJaW50IHYgPSAqKGNvbXBhdF9pbnRfdCAqKXNyYzsKIApAQCAtODQ0LDcgKzgzNCw3IEBACiAJbWVtY3B5KGRzdCwgJnYsIHNpemVvZih2KSk7CiB9CiAKLXN0YXRpYyBpbnQgY29tcGF0X3N0YW5kYXJkX3RvX3VzZXIodm9pZCBfX3VzZXIgKmRzdCwgdm9pZCAqc3JjKQorc3RhdGljIGludCBjb21wYXRfc3RhbmRhcmRfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiB7CiAJY29tcGF0X2ludF90IGN2ID0gKihpbnQgKilzcmM7CiAKQEAgLTg1MywxOCArODQzLDE4IEBACiAJcmV0dXJuIGNvcHlfdG9fdXNlcihkc3QsICZjdiwgc2l6ZW9mKGN2KSkgPyAtRUZBVUxUIDogMDsKIH0KIAotc3RhdGljIGludCBjb21wYXRfY2FsY19lbnRyeShzdHJ1Y3QgYXJwdF9lbnRyeSAqZSwKK3N0YXRpYyBpbnQgY29tcGF0X2NhbGNfZW50cnkoY29uc3Qgc3RydWN0IGFycHRfZW50cnkgKmUsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvLAotCQkJICAgICB2b2lkICpiYXNlLCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbykKKwkJCSAgICAgY29uc3Qgdm9pZCAqYmFzZSwgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8pCiB7Ci0Jc3RydWN0IGFycHRfZW50cnlfdGFyZ2V0ICp0OworCWNvbnN0IHN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCAqdDsKIAl1bnNpZ25lZCBpbnQgZW50cnlfb2Zmc2V0OwogCWludCBvZmYsIGksIHJldDsKIAogCW9mZiA9IHNpemVvZihzdHJ1Y3QgYXJwdF9lbnRyeSkgLSBzaXplb2Yoc3RydWN0IGNvbXBhdF9hcnB0X2VudHJ5KTsKIAllbnRyeV9vZmZzZXQgPSAodm9pZCAqKWUgLSBiYXNlOwogCi0JdCA9IGFycHRfZ2V0X3RhcmdldChlKTsKKwl0ID0gYXJwdF9nZXRfdGFyZ2V0X2MoZSk7CiAJb2ZmICs9IHh0X2NvbXBhdF90YXJnZXRfb2Zmc2V0KHQtPnUua2VybmVsLnRhcmdldCk7CiAJbmV3aW5mby0+c2l6ZSAtPSBvZmY7CiAJcmV0ID0geHRfY29tcGF0X2FkZF9vZmZzZXQoTkZQUk9UT19BUlAsIGVudHJ5X29mZnNldCwgb2ZmKTsKQEAgLTg4NSw3ICs4NzUsOSBAQAogc3RhdGljIGludCBjb21wYXRfdGFibGVfaW5mbyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbywKIAkJCSAgICAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8pCiB7CisJc3RydWN0IGFycHRfZW50cnkgKml0ZXI7CiAJdm9pZCAqbG9jX2NwdV9lbnRyeTsKKwlpbnQgcmV0OwogCiAJaWYgKCFuZXdpbmZvIHx8ICFpbmZvKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTg5NCwxMyArODg2LDE3IEBACiAJbWVtY3B5KG5ld2luZm8sIGluZm8sIG9mZnNldG9mKHN0cnVjdCB4dF90YWJsZV9pbmZvLCBlbnRyaWVzKSk7CiAJbmV3aW5mby0+aW5pdGlhbF9lbnRyaWVzID0gMDsKIAlsb2NfY3B1X2VudHJ5ID0gaW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKLQlyZXR1cm4gQVJQVF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksIGluZm8tPnNpemUsCi0JCQkJICBjb21wYXRfY2FsY19lbnRyeSwgaW5mbywgbG9jX2NwdV9lbnRyeSwKLQkJCQkgIG5ld2luZm8pOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgbG9jX2NwdV9lbnRyeSwgaW5mby0+c2l6ZSkgeworCQlyZXQgPSBjb21wYXRfY2FsY19lbnRyeShpdGVyLCBpbmZvLCBsb2NfY3B1X2VudHJ5LCBuZXdpbmZvKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7CiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbiwgaW50IGNvbXBhdCkKK3N0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpsZW4sIGludCBjb21wYXQpCiB7CiAJY2hhciBuYW1lW0FSUFRfVEFCTEVfTUFYTkFNRUxFTl07CiAJc3RydWN0IHh0X3RhYmxlICp0OwpAQCAtOTU5LDcgKzk1NSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgZ2V0X2VudHJpZXMoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgYXJwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCi0JCSAgICAgICBpbnQgKmxlbikKKwkJICAgICAgIGNvbnN0IGludCAqbGVuKQogewogCWludCByZXQ7CiAJc3RydWN0IGFycHRfZ2V0X2VudHJpZXMgZ2V0OwpAQCAtMTAxMCw2ICsxMDA2LDcgQEAKIAlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqb2xkaW5mbzsKIAlzdHJ1Y3QgeHRfY291bnRlcnMgKmNvdW50ZXJzOwogCXZvaWQgKmxvY19jcHVfb2xkX2VudHJ5OworCXN0cnVjdCBhcnB0X2VudHJ5ICppdGVyOwogCiAJcmV0ID0gMDsKIAljb3VudGVycyA9IHZtYWxsb2Nfbm9kZShudW1fY291bnRlcnMgKiBzaXplb2Yoc3RydWN0IHh0X2NvdW50ZXJzKSwKQEAgLTEwNTMsOCArMTA1MCw4IEBACiAKIAkvKiBEZWNyZWFzZSBtb2R1bGUgdXNhZ2UgY291bnRzIGFuZCBmcmVlIHJlc291cmNlICovCiAJbG9jX2NwdV9vbGRfZW50cnkgPSBvbGRpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOwotCUFSUFRfRU5UUllfSVRFUkFURShsb2NfY3B1X29sZF9lbnRyeSwgb2xkaW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSwKLQkJCSAgIE5VTEwpOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgbG9jX2NwdV9vbGRfZW50cnksIG9sZGluZm8tPnNpemUpCisJCWNsZWFudXBfZW50cnkoaXRlcik7CiAKIAl4dF9mcmVlX3RhYmxlX2luZm8ob2xkaW5mbyk7CiAJaWYgKGNvcHlfdG9fdXNlcihjb3VudGVyc19wdHIsIGNvdW50ZXJzLApAQCAtMTA3MywxMiArMTA3MCwxNCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZG9fcmVwbGFjZShzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuKQorc3RhdGljIGludCBkb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXIsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpbnQgcmV0OwogCXN0cnVjdCBhcnB0X3JlcGxhY2UgdG1wOwogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvOwogCXZvaWQgKmxvY19jcHVfZW50cnk7CisJc3RydWN0IGFycHRfZW50cnkgKml0ZXI7CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnRtcCwgdXNlciwgc2l6ZW9mKHRtcCkpICE9IDApCiAJCXJldHVybiAtRUZBVUxUOwpAQCAtMTA5OSw5ICsxMDk4LDcgQEAKIAkJZ290byBmcmVlX25ld2luZm87CiAJfQogCi0JcmV0ID0gdHJhbnNsYXRlX3RhYmxlKHRtcC5uYW1lLCB0bXAudmFsaWRfaG9va3MsCi0JCQkgICAgICBuZXdpbmZvLCBsb2NfY3B1X2VudHJ5LCB0bXAuc2l6ZSwgdG1wLm51bV9lbnRyaWVzLAotCQkJICAgICAgdG1wLmhvb2tfZW50cnksIHRtcC51bmRlcmZsb3cpOworCXJldCA9IHRyYW5zbGF0ZV90YWJsZShuZXdpbmZvLCBsb2NfY3B1X2VudHJ5LCAmdG1wKTsKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gZnJlZV9uZXdpbmZvOwogCkBAIC0xMTE0LDI3ICsxMTExLDE1IEBACiAJcmV0dXJuIDA7CiAKICBmcmVlX25ld2luZm9fdW50cmFuczoKLQlBUlBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgbmV3aW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSwgTlVMTCk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBuZXdpbmZvLT5zaXplKQorCQljbGVhbnVwX2VudHJ5KGl0ZXIpOwogIGZyZWVfbmV3aW5mbzoKIAl4dF9mcmVlX3RhYmxlX2luZm8obmV3aW5mbyk7CiAJcmV0dXJuIHJldDsKIH0KIAotLyogV2UncmUgbGF6eSwgYW5kIGFkZCB0byB0aGUgZmlyc3QgQ1BVOyBvdmVyZmxvdyB3b3JrcyBpdHMgZmV5IG1hZ2ljCi0gKiBhbmQgZXZlcnl0aGluZyBpcyBPSy4gKi8KLXN0YXRpYyBpbnQKLWFkZF9jb3VudGVyX3RvX2VudHJ5KHN0cnVjdCBhcnB0X2VudHJ5ICplLAotCQkgICAgIGNvbnN0IHN0cnVjdCB4dF9jb3VudGVycyBhZGRtZVtdLAotCQkgICAgIHVuc2lnbmVkIGludCAqaSkKLXsKLQlBRERfQ09VTlRFUihlLT5jb3VudGVycywgYWRkbWVbKmldLmJjbnQsIGFkZG1lWyppXS5wY250KTsKLQotCSgqaSkrKzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkb19hZGRfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbiwKLQkJCSAgIGludCBjb21wYXQpCitzdGF0aWMgaW50IGRvX2FkZF9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHZvaWQgX191c2VyICp1c2VyLAorCQkJICAgdW5zaWduZWQgaW50IGxlbiwgaW50IGNvbXBhdCkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgY3VyY3B1OwogCXN0cnVjdCB4dF9jb3VudGVyc19pbmZvIHRtcDsKQEAgLTExNDcsNiArMTEzMiw3IEBACiAJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGU7CiAJaW50IHJldCA9IDA7CiAJdm9pZCAqbG9jX2NwdV9lbnRyeTsKKwlzdHJ1Y3QgYXJwdF9lbnRyeSAqaXRlcjsKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJc3RydWN0IGNvbXBhdF94dF9jb3VudGVyc19pbmZvIGNvbXBhdF90bXA7CiAKQEAgLTEyMDQsMTEgKzExOTAsMTAgQEAKIAljdXJjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbY3VyY3B1XTsKIAl4dF9pbmZvX3dybG9jayhjdXJjcHUpOwotCUFSUFRfRU5UUllfSVRFUkFURShsb2NfY3B1X2VudHJ5LAotCQkJICAgcHJpdmF0ZS0+c2l6ZSwKLQkJCSAgIGFkZF9jb3VudGVyX3RvX2VudHJ5LAotCQkJICAgcGFkZGMsCi0JCQkgICAmaSk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBwcml2YXRlLT5zaXplKSB7CisJCUFERF9DT1VOVEVSKGl0ZXItPmNvdW50ZXJzLCBwYWRkY1tpXS5iY250LCBwYWRkY1tpXS5wY250KTsKKwkJKytpOworCX0KIAl4dF9pbmZvX3dydW5sb2NrKGN1cmNwdSk7CiAgdW5sb2NrX3VwX2ZyZWU6CiAJbG9jYWxfYmhfZW5hYmxlKCk7CkBAIC0xMjIxLDI4ICsxMjA2LDIyIEBACiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCi1zdGF0aWMgaW5saW5lIGludAotY29tcGF0X3JlbGVhc2VfZW50cnkoc3RydWN0IGNvbXBhdF9hcnB0X2VudHJ5ICplLCB1bnNpZ25lZCBpbnQgKmkpCitzdGF0aWMgaW5saW5lIHZvaWQgY29tcGF0X3JlbGVhc2VfZW50cnkoc3RydWN0IGNvbXBhdF9hcnB0X2VudHJ5ICplKQogewogCXN0cnVjdCBhcnB0X2VudHJ5X3RhcmdldCAqdDsKIAotCWlmIChpICYmICgqaSktLSA9PSAwKQotCQlyZXR1cm4gMTsKLQogCXQgPSBjb21wYXRfYXJwdF9nZXRfdGFyZ2V0KGUpOwogCW1vZHVsZV9wdXQodC0+dS5rZXJuZWwudGFyZ2V0LT5tZSk7Ci0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CiBjaGVja19jb21wYXRfZW50cnlfc2l6ZV9hbmRfaG9va3Moc3RydWN0IGNvbXBhdF9hcnB0X2VudHJ5ICplLAogCQkJCSAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCiAJCQkJICB1bnNpZ25lZCBpbnQgKnNpemUsCi0JCQkJICB1bnNpZ25lZCBjaGFyICpiYXNlLAotCQkJCSAgdW5zaWduZWQgY2hhciAqbGltaXQsCi0JCQkJICB1bnNpZ25lZCBpbnQgKmhvb2tfZW50cmllcywKLQkJCQkgIHVuc2lnbmVkIGludCAqdW5kZXJmbG93cywKLQkJCQkgIHVuc2lnbmVkIGludCAqaSwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJhc2UsCisJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpsaW1pdCwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGludCAqaG9va19lbnRyaWVzLAorCQkJCSAgY29uc3QgdW5zaWduZWQgaW50ICp1bmRlcmZsb3dzLAogCQkJCSAgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgYXJwdF9lbnRyeV90YXJnZXQgKnQ7CkBAIC0xMzAyLDggKzEyODEsNiBAQAogCS8qIENsZWFyIGNvdW50ZXJzIGFuZCBjb21lZnJvbSAqLwogCW1lbXNldCgmZS0+Y291bnRlcnMsIDAsIHNpemVvZihlLT5jb3VudGVycykpOwogCWUtPmNvbWVmcm9tID0gMDsKLQotCSgqaSkrKzsKIAlyZXR1cm4gMDsKIAogcmVsZWFzZV90YXJnZXQ6CkBAIC0xMzQ3LDE5ICsxMzI0LDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBjb21wYXRfY2hlY2tfZW50cnkoc3RydWN0IGFycHRfZW50cnkgKmUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IGNoZWNrX3RhcmdldChlLCBuYW1lKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OwotCi0JKCppKSsrOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHRyYW5zbGF0ZV9jb21wYXRfdGFibGUoY29uc3QgY2hhciAqbmFtZSwKIAkJCQkgIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcywKIAkJCQkgIHN0cnVjdCB4dF90YWJsZV9pbmZvICoqcGluZm8sCkBAIC0xMzcyLDggKzEzMzYsMTAgQEAKIAl1bnNpZ25lZCBpbnQgaSwgajsKIAlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywgKmluZm87CiAJdm9pZCAqcG9zLCAqZW50cnkwLCAqZW50cnkxOworCXN0cnVjdCBjb21wYXRfYXJwdF9lbnRyeSAqaXRlcjA7CisJc3RydWN0IGFycHRfZW50cnkgKml0ZXIxOwogCXVuc2lnbmVkIGludCBzaXplOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKIAlpbmZvID0gKnBpbmZvOwogCWVudHJ5MCA9ICpwZW50cnkwOwpAQCAtMTM5MCwxMyArMTM1NiwxNyBAQAogCWogPSAwOwogCXh0X2NvbXBhdF9sb2NrKE5GUFJPVE9fQVJQKTsKIAkvKiBXYWxrIHRocm91Z2ggZW50cmllcywgY2hlY2tpbmcgb2Zmc2V0cy4gKi8KLQlyZXQgPSBDT01QQVRfQVJQVF9FTlRSWV9JVEVSQVRFKGVudHJ5MCwgdG90YWxfc2l6ZSwKLQkJCQkJY2hlY2tfY29tcGF0X2VudHJ5X3NpemVfYW5kX2hvb2tzLAotCQkJCQlpbmZvLCAmc2l6ZSwgZW50cnkwLAotCQkJCQllbnRyeTAgKyB0b3RhbF9zaXplLAotCQkJCQlob29rX2VudHJpZXMsIHVuZGVyZmxvd3MsICZqLCBuYW1lKTsKLQlpZiAocmV0ICE9IDApCi0JCWdvdG8gb3V0X3VubG9jazsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIwLCBlbnRyeTAsIHRvdGFsX3NpemUpIHsKKwkJcmV0ID0gY2hlY2tfY29tcGF0X2VudHJ5X3NpemVfYW5kX2hvb2tzKGl0ZXIwLCBpbmZvLCAmc2l6ZSwKKwkJCQkJCQllbnRyeTAsCisJCQkJCQkJZW50cnkwICsgdG90YWxfc2l6ZSwKKwkJCQkJCQlob29rX2VudHJpZXMsCisJCQkJCQkJdW5kZXJmbG93cywKKwkJCQkJCQluYW1lKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBvdXRfdW5sb2NrOworCQkrK2o7CisJfQogCiAJcmV0ID0gLUVJTlZBTDsKIAlpZiAoaiAhPSBudW1iZXIpIHsKQEAgLTE0MzUsOSArMTQwNSwxMiBAQAogCWVudHJ5MSA9IG5ld2luZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJcG9zID0gZW50cnkxOwogCXNpemUgPSB0b3RhbF9zaXplOwotCXJldCA9IENPTVBBVF9BUlBUX0VOVFJZX0lURVJBVEUoZW50cnkwLCB0b3RhbF9zaXplLAotCQkJCQljb21wYXRfY29weV9lbnRyeV9mcm9tX3VzZXIsCi0JCQkJCSZwb3MsICZzaXplLCBuYW1lLCBuZXdpbmZvLCBlbnRyeTEpOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlcjAsIGVudHJ5MCwgdG90YWxfc2l6ZSkgeworCQlyZXQgPSBjb21wYXRfY29weV9lbnRyeV9mcm9tX3VzZXIoaXRlcjAsICZwb3MsICZzaXplLAorCQkJCQkJICBuYW1lLCBuZXdpbmZvLCBlbnRyeTEpOworCQlpZiAocmV0ICE9IDApCisJCQlicmVhazsKKwl9CiAJeHRfY29tcGF0X2ZsdXNoX29mZnNldHMoTkZQUk9UT19BUlApOwogCXh0X2NvbXBhdF91bmxvY2soTkZQUk9UT19BUlApOwogCWlmIChyZXQpCkBAIC0xNDQ4LDEzICsxNDIxLDMyIEBACiAJCWdvdG8gZnJlZV9uZXdpbmZvOwogCiAJaSA9IDA7Ci0JcmV0ID0gQVJQVF9FTlRSWV9JVEVSQVRFKGVudHJ5MSwgbmV3aW5mby0+c2l6ZSwgY29tcGF0X2NoZWNrX2VudHJ5LAotCQkJCSBuYW1lLCAmaSk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyMSwgZW50cnkxLCBuZXdpbmZvLT5zaXplKSB7CisJCXJldCA9IGNoZWNrX3RhcmdldChpdGVyMSwgbmFtZSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWJyZWFrOworCQkrK2k7CisJfQogCWlmIChyZXQpIHsKKwkJLyoKKwkJICogVGhlIGZpcnN0IGkgbWF0Y2hlcyBuZWVkIGNsZWFudXBfZW50cnkgKGNhbGxzIC0+ZGVzdHJveSkKKwkJICogYmVjYXVzZSB0aGV5IGhhZCBjYWxsZWQgLT5jaGVjayBhbHJlYWR5LiBUaGUgb3RoZXIgai1pCisJCSAqIGVudHJpZXMgbmVlZCBvbmx5IHJlbGVhc2UuCisJCSAqLworCQlpbnQgc2tpcCA9IGk7CiAJCWogLT0gaTsKLQkJQ09NUEFUX0FSUFRfRU5UUllfSVRFUkFURV9DT05USU5VRShlbnRyeTAsIG5ld2luZm8tPnNpemUsIGksCi0JCQkJCQkgICBjb21wYXRfcmVsZWFzZV9lbnRyeSwgJmopOwotCQlBUlBUX0VOVFJZX0lURVJBVEUoZW50cnkxLCBuZXdpbmZvLT5zaXplLCBjbGVhbnVwX2VudHJ5LCAmaSk7CisJCXh0X2VudHJ5X2ZvcmVhY2goaXRlcjAsIGVudHJ5MCwgbmV3aW5mby0+c2l6ZSkgeworCQkJaWYgKHNraXAtLSA+IDApCisJCQkJY29udGludWU7CisJCQlpZiAoai0tID09IDApCisJCQkJYnJlYWs7CisJCQljb21wYXRfcmVsZWFzZV9lbnRyeShpdGVyMCk7CisJCX0KKwkJeHRfZW50cnlfZm9yZWFjaChpdGVyMSwgZW50cnkxLCBuZXdpbmZvLT5zaXplKSB7CisJCQlpZiAoaS0tID09IDApCisJCQkJYnJlYWs7CisJCQljbGVhbnVwX2VudHJ5KGl0ZXIxKTsKKwkJfQogCQl4dF9mcmVlX3RhYmxlX2luZm8obmV3aW5mbyk7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMTQ3Miw3ICsxNDY0LDExIEBACiBmcmVlX25ld2luZm86CiAJeHRfZnJlZV90YWJsZV9pbmZvKG5ld2luZm8pOwogb3V0OgotCUNPTVBBVF9BUlBUX0VOVFJZX0lURVJBVEUoZW50cnkwLCB0b3RhbF9zaXplLCBjb21wYXRfcmVsZWFzZV9lbnRyeSwgJmopOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlcjAsIGVudHJ5MCwgdG90YWxfc2l6ZSkgeworCQlpZiAoai0tID09IDApCisJCQlicmVhazsKKwkJY29tcGF0X3JlbGVhc2VfZW50cnkoaXRlcjApOworCX0KIAlyZXR1cm4gcmV0Owogb3V0X3VubG9jazoKIAl4dF9jb21wYXRfZmx1c2hfb2Zmc2V0cyhORlBST1RPX0FSUCk7CkBAIC0xNDk5LDYgKzE0OTUsNyBAQAogCXN0cnVjdCBjb21wYXRfYXJwdF9yZXBsYWNlIHRtcDsKIAlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbzsKIAl2b2lkICpsb2NfY3B1X2VudHJ5OworCXN0cnVjdCBhcnB0X2VudHJ5ICppdGVyOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIHVzZXIsIHNpemVvZih0bXApKSAhPSAwKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTE1MzYsNyArMTUzMyw4IEBACiAJcmV0dXJuIDA7CiAKICBmcmVlX25ld2luZm9fdW50cmFuczoKLQlBUlBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgbmV3aW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSwgTlVMTCk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBuZXdpbmZvLT5zaXplKQorCQljbGVhbnVwX2VudHJ5KGl0ZXIpOwogIGZyZWVfbmV3aW5mbzoKIAl4dF9mcmVlX3RhYmxlX2luZm8obmV3aW5mbyk7CiAJcmV0dXJuIHJldDsKQEAgLTE1NzAsNyArMTU2OCw3IEBACiBzdGF0aWMgaW50IGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIoc3RydWN0IGFycHRfZW50cnkgKmUsIHZvaWQgX191c2VyICoqZHN0cHRyLAogCQkJCSAgICAgY29tcGF0X3VpbnRfdCAqc2l6ZSwKIAkJCQkgICAgIHN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnMsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCisJCQkJICAgICB1bnNpZ25lZCBpbnQgaSkKIHsKIAlzdHJ1Y3QgYXJwdF9lbnRyeV90YXJnZXQgKnQ7CiAJc3RydWN0IGNvbXBhdF9hcnB0X2VudHJ5IF9fdXNlciAqY2U7CkBAIC0xNTc4LDE0ICsxNTc2LDEyIEBACiAJY29tcGF0X3VpbnRfdCBvcmlnc2l6ZTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gLUVGQVVMVDsKIAlvcmlnc2l6ZSA9ICpzaXplOwogCWNlID0gKHN0cnVjdCBjb21wYXRfYXJwdF9lbnRyeSBfX3VzZXIgKikqZHN0cHRyOwotCWlmIChjb3B5X3RvX3VzZXIoY2UsIGUsIHNpemVvZihzdHJ1Y3QgYXJwdF9lbnRyeSkpKQotCQlnb3RvIG91dDsKLQotCWlmIChjb3B5X3RvX3VzZXIoJmNlLT5jb3VudGVycywgJmNvdW50ZXJzWyppXSwgc2l6ZW9mKGNvdW50ZXJzWyppXSkpKQotCQlnb3RvIG91dDsKKwlpZiAoY29weV90b191c2VyKGNlLCBlLCBzaXplb2Yoc3RydWN0IGFycHRfZW50cnkpKSAhPSAwIHx8CisJICAgIGNvcHlfdG9fdXNlcigmY2UtPmNvdW50ZXJzLCAmY291bnRlcnNbaV0sCisJICAgIHNpemVvZihjb3VudGVyc1tpXSkpICE9IDApCisJCXJldHVybiAtRUZBVUxUOwogCiAJKmRzdHB0ciArPSBzaXplb2Yoc3RydWN0IGNvbXBhdF9hcnB0X2VudHJ5KTsKIAkqc2l6ZSAtPSBzaXplb2Yoc3RydWN0IGFycHRfZW50cnkpIC0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfYXJwdF9lbnRyeSk7CkBAIC0xNTk1LDE4ICsxNTkxLDEyIEBACiAJdCA9IGFycHRfZ2V0X3RhcmdldChlKTsKIAlyZXQgPSB4dF9jb21wYXRfdGFyZ2V0X3RvX3VzZXIodCwgZHN0cHRyLCBzaXplKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dDsKLQlyZXQgPSAtRUZBVUxUOworCQlyZXR1cm4gcmV0OwogCW5leHRfb2Zmc2V0ID0gZS0+bmV4dF9vZmZzZXQgLSAob3JpZ3NpemUgLSAqc2l6ZSk7Ci0JaWYgKHB1dF91c2VyKHRhcmdldF9vZmZzZXQsICZjZS0+dGFyZ2V0X29mZnNldCkpCi0JCWdvdG8gb3V0OwotCWlmIChwdXRfdXNlcihuZXh0X29mZnNldCwgJmNlLT5uZXh0X29mZnNldCkpCi0JCWdvdG8gb3V0OwotCi0JKCppKSsrOworCWlmIChwdXRfdXNlcih0YXJnZXRfb2Zmc2V0LCAmY2UtPnRhcmdldF9vZmZzZXQpICE9IDAgfHwKKwkgICAgcHV0X3VzZXIobmV4dF9vZmZzZXQsICZjZS0+bmV4dF9vZmZzZXQpICE9IDApCisJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwotb3V0OgotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgY29tcGF0X2NvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLApAQCAtMTYyMCw2ICsxNjEwLDcgQEAKIAlpbnQgcmV0ID0gMDsKIAl2b2lkICpsb2NfY3B1X2VudHJ5OwogCXVuc2lnbmVkIGludCBpID0gMDsKKwlzdHJ1Y3QgYXJwdF9lbnRyeSAqaXRlcjsKIAogCWNvdW50ZXJzID0gYWxsb2NfY291bnRlcnModGFibGUpOwogCWlmIChJU19FUlIoY291bnRlcnMpKQpAQCAtMTYyOSw5ICsxNjIwLDEyIEBACiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJcG9zID0gdXNlcnB0cjsKIAlzaXplID0gdG90YWxfc2l6ZTsKLQlyZXQgPSBBUlBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgdG90YWxfc2l6ZSwKLQkJCQkgY29tcGF0X2NvcHlfZW50cnlfdG9fdXNlciwKLQkJCQkgJnBvcywgJnNpemUsIGNvdW50ZXJzLCAmaSk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCB0b3RhbF9zaXplKSB7CisJCXJldCA9IGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIoaXRlciwgJnBvcywKKwkJCQkJCSZzaXplLCBjb3VudGVycywgaSsrKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJYnJlYWs7CisJfQogCXZmcmVlKGNvdW50ZXJzKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTc5OSwxMiArMTc5Myw3IEBACiAJbG9jX2NwdV9lbnRyeSA9IG5ld2luZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJbWVtY3B5KGxvY19jcHVfZW50cnksIHJlcGwtPmVudHJpZXMsIHJlcGwtPnNpemUpOwogCi0JcmV0ID0gdHJhbnNsYXRlX3RhYmxlKHRhYmxlLT5uYW1lLCB0YWJsZS0+dmFsaWRfaG9va3MsCi0JCQkgICAgICBuZXdpbmZvLCBsb2NfY3B1X2VudHJ5LCByZXBsLT5zaXplLAotCQkJICAgICAgcmVwbC0+bnVtX2VudHJpZXMsCi0JCQkgICAgICByZXBsLT5ob29rX2VudHJ5LAotCQkJICAgICAgcmVwbC0+dW5kZXJmbG93KTsKLQorCXJldCA9IHRyYW5zbGF0ZV90YWJsZShuZXdpbmZvLCBsb2NfY3B1X2VudHJ5LCByZXBsKTsKIAlkdXByaW50ZigiYXJwdF9yZWdpc3Rlcl90YWJsZTogdHJhbnNsYXRlIHRhYmxlIGdpdmVzICVkXG4iLCByZXQpOwogCWlmIChyZXQgIT0gMCkKIAkJZ290byBvdXRfZnJlZTsKQEAgLTE4MjcsMTMgKzE4MTYsMTQgQEAKIAlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKIAl2b2lkICpsb2NfY3B1X2VudHJ5OwogCXN0cnVjdCBtb2R1bGUgKnRhYmxlX293bmVyID0gdGFibGUtPm1lOworCXN0cnVjdCBhcnB0X2VudHJ5ICppdGVyOwogCiAJcHJpdmF0ZSA9IHh0X3VucmVnaXN0ZXJfdGFibGUodGFibGUpOwogCiAJLyogRGVjcmVhc2UgbW9kdWxlIHVzYWdlIGNvdW50cyBhbmQgZnJlZSByZXNvdXJjZXMgKi8KIAlsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKLQlBUlBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgcHJpdmF0ZS0+c2l6ZSwKLQkJCSAgIGNsZWFudXBfZW50cnksIE5VTEwpOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgbG9jX2NwdV9lbnRyeSwgcHJpdmF0ZS0+c2l6ZSkKKwkJY2xlYW51cF9lbnRyeShpdGVyKTsKIAlpZiAocHJpdmF0ZS0+bnVtYmVyID4gcHJpdmF0ZS0+aW5pdGlhbF9lbnRyaWVzKQogCQltb2R1bGVfcHV0KHRhYmxlX293bmVyKTsKIAl4dF9mcmVlX3RhYmxlX2luZm8ocHJpdmF0ZSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwdGFibGVfZmlsdGVyLmMKaW5kZXggOTczMzc2MC4uYmZlMjZmMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycHRhYmxlX2ZpbHRlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnB0YWJsZV9maWx0ZXIuYwpAQCAtNiw2ICs2LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmg+CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKQEAgLTE1LDkzICsxNiwzNyBAQAogI2RlZmluZSBGSUxURVJfVkFMSURfSE9PS1MgKCgxIDw8IE5GX0FSUF9JTikgfCAoMSA8PCBORl9BUlBfT1VUKSB8IFwKIAkJCSAgICgxIDw8IE5GX0FSUF9GT1JXQVJEKSkKIAotc3RhdGljIGNvbnN0IHN0cnVjdAotewotCXN0cnVjdCBhcnB0X3JlcGxhY2UgcmVwbDsKLQlzdHJ1Y3QgYXJwdF9zdGFuZGFyZCBlbnRyaWVzWzNdOwotCXN0cnVjdCBhcnB0X2Vycm9yIHRlcm07Ci19IGluaXRpYWxfdGFibGUgX19uZXRfaW5pdGRhdGEgPSB7Ci0JLnJlcGwgPSB7Ci0JCS5uYW1lID0gImZpbHRlciIsCi0JCS52YWxpZF9ob29rcyA9IEZJTFRFUl9WQUxJRF9IT09LUywKLQkJLm51bV9lbnRyaWVzID0gNCwKLQkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGFycHRfc3RhbmRhcmQpICogMyArIHNpemVvZihzdHJ1Y3QgYXJwdF9lcnJvciksCi0JCS5ob29rX2VudHJ5ID0gewotCQkJW05GX0FSUF9JTl0gPSAwLAotCQkJW05GX0FSUF9PVVRdID0gc2l6ZW9mKHN0cnVjdCBhcnB0X3N0YW5kYXJkKSwKLQkJCVtORl9BUlBfRk9SV0FSRF0gPSAyICogc2l6ZW9mKHN0cnVjdCBhcnB0X3N0YW5kYXJkKSwKLQkJfSwKLQkJLnVuZGVyZmxvdyA9IHsKLQkJCVtORl9BUlBfSU5dID0gMCwKLQkJCVtORl9BUlBfT1VUXSA9IHNpemVvZihzdHJ1Y3QgYXJwdF9zdGFuZGFyZCksCi0JCQlbTkZfQVJQX0ZPUldBUkRdID0gMiAqIHNpemVvZihzdHJ1Y3QgYXJwdF9zdGFuZGFyZCksCi0JCX0sCi0JfSwKLQkuZW50cmllcyA9IHsKLQkJQVJQVF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIEFSUF9JTiAqLwotCQlBUlBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogQVJQX09VVCAqLwotCQlBUlBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogQVJQX0ZPUldBUkQgKi8KLQl9LAotCS50ZXJtID0gQVJQVF9FUlJPUl9JTklULAotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfZmlsdGVyID0gewogCS5uYW1lCQk9ICJmaWx0ZXIiLAogCS52YWxpZF9ob29rcwk9IEZJTFRFUl9WQUxJRF9IT09LUywKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IE5GUFJPVE9fQVJQLAorCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9GSUxURVIsCiB9OwogCiAvKiBUaGUgd29yayBjb21lcyBpbiBoZXJlIGZyb20gbmV0ZmlsdGVyLmMgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXJwdF9pbl9ob29rKHVuc2lnbmVkIGludCBob29rLAotCQkJCSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0JCQkJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0JCQkJIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQorc3RhdGljIHVuc2lnbmVkIGludAorYXJwdGFibGVfZmlsdGVyX2hvb2sodW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQogewotCXJldHVybiBhcnB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKLQkJCSAgICAgZGV2X25ldChpbiktPmlwdjQuYXJwdGFibGVfZmlsdGVyKTsKKwljb25zdCBzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KChpbiAhPSBOVUxMKSA/IGluIDogb3V0KTsKKworCXJldHVybiBhcnB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwgbmV0LT5pcHY0LmFycHRhYmxlX2ZpbHRlcik7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgYXJwdF9vdXRfaG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkJCQkgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0JCQkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCQkJCSAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCi17Ci0JcmV0dXJuIGFycHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAotCQkJICAgICBkZXZfbmV0KG91dCktPmlwdjQuYXJwdGFibGVfZmlsdGVyKTsKLX0KLQotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBhcnB0X29wc1tdIF9fcmVhZF9tb3N0bHkgPSB7Ci0JewotCQkuaG9vawkJPSBhcnB0X2luX2hvb2ssCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IE5GUFJPVE9fQVJQLAotCQkuaG9va251bQk9IE5GX0FSUF9JTiwKLQkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0ZJTFRFUiwKLQl9LAotCXsKLQkJLmhvb2sJCT0gYXJwdF9vdXRfaG9vaywKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gTkZQUk9UT19BUlAsCi0JCS5ob29rbnVtCT0gTkZfQVJQX09VVCwKLQkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0ZJTFRFUiwKLQl9LAotCXsKLQkJLmhvb2sJCT0gYXJwdF9pbl9ob29rLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBORlBST1RPX0FSUCwKLQkJLmhvb2tudW0JPSBORl9BUlBfRk9SV0FSRCwKLQkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0ZJTFRFUiwKLQl9LAotfTsKK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgKmFycGZpbHRlcl9vcHMgX19yZWFkX21vc3RseTsKIAogc3RhdGljIGludCBfX25ldF9pbml0IGFycHRhYmxlX2ZpbHRlcl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JLyogUmVnaXN0ZXIgdGFibGUgKi8KKwlzdHJ1Y3QgYXJwdF9yZXBsYWNlICpyZXBsOworCQorCXJlcGwgPSBhcnB0X2FsbG9jX2luaXRpYWxfdGFibGUoJnBhY2tldF9maWx0ZXIpOworCWlmIChyZXBsID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCW5ldC0+aXB2NC5hcnB0YWJsZV9maWx0ZXIgPQotCQlhcnB0X3JlZ2lzdGVyX3RhYmxlKG5ldCwgJnBhY2tldF9maWx0ZXIsICZpbml0aWFsX3RhYmxlLnJlcGwpOworCQlhcnB0X3JlZ2lzdGVyX3RhYmxlKG5ldCwgJnBhY2tldF9maWx0ZXIsIHJlcGwpOworCWtmcmVlKHJlcGwpOwogCWlmIChJU19FUlIobmV0LT5pcHY0LmFycHRhYmxlX2ZpbHRlcikpCiAJCXJldHVybiBQVFJfRVJSKG5ldC0+aXB2NC5hcnB0YWJsZV9maWx0ZXIpOwogCXJldHVybiAwOwpAQCAtMTI1LDkgKzcwLDExIEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhhcnB0X29wcywgQVJSQVlfU0laRShhcnB0X29wcykpOwotCWlmIChyZXQgPCAwKQorCWFycGZpbHRlcl9vcHMgPSB4dF9ob29rX2xpbmsoJnBhY2tldF9maWx0ZXIsIGFycHRhYmxlX2ZpbHRlcl9ob29rKTsKKwlpZiAoSVNfRVJSKGFycGZpbHRlcl9vcHMpKSB7CisJCXJldCA9IFBUUl9FUlIoYXJwZmlsdGVyX29wcyk7CiAJCWdvdG8gY2xlYW51cF90YWJsZTsKKwl9CiAJcmV0dXJuIHJldDsKIAogY2xlYW51cF90YWJsZToKQEAgLTEzNyw3ICs4NCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBhcnB0YWJsZV9maWx0ZXJfZmluaSh2b2lkKQogewotCW5mX3VucmVnaXN0ZXJfaG9va3MoYXJwdF9vcHMsIEFSUkFZX1NJWkUoYXJwdF9vcHMpKTsKKwl4dF9ob29rX3VubGluaygmcGFja2V0X2ZpbHRlciwgYXJwZmlsdGVyX29wcyk7CiAJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZhcnB0YWJsZV9maWx0ZXJfbmV0X29wcyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF90YWJsZXMuYwppbmRleCAzY2U1M2NmLi5iMjljNjZkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfdGFibGVzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX3RhYmxlcy5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9sb2cuaD4KKyNpbmNsdWRlICIuLi8uLi9uZXRmaWx0ZXIveHRfcmVwbGRhdGEuaCIKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiTmV0ZmlsdGVyIENvcmUgVGVhbSA8Y29yZXRlYW1AbmV0ZmlsdGVyLm9yZz4iKTsKQEAgLTY2LDYgKzY3LDEyIEBACiAjZGVmaW5lIGlubGluZQogI2VuZGlmCiAKK3ZvaWQgKmlwdF9hbGxvY19pbml0aWFsX3RhYmxlKGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqaW5mbykKK3sKKwlyZXR1cm4geHRfYWxsb2NfaW5pdGlhbF90YWJsZShpcHQsIElQVCk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpcHRfYWxsb2NfaW5pdGlhbF90YWJsZSk7CisKIC8qCiAgICBXZSBrZWVwIGEgc2V0IG9mIHJ1bGVzIGZvciBlYWNoIENQVSwgc28gd2UgY2FuIGF2b2lkIHdyaXRlLWxvY2tpbmcKICAgIHRoZW0gaW4gdGhlIHNvZnRpcnEgd2hlbiB1cGRhdGluZyB0aGUgY291bnRlcnMgYW5kIHRoZXJlZm9yZQpAQCAtMTY5LDcgKzE3Niw3IEBACiAKIC8qIFBlcmZvcm1hbmNlIGNyaXRpY2FsIC0gY2FsbGVkIGZvciBldmVyeSBwYWNrZXQgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAotZG9fbWF0Y2goc3RydWN0IGlwdF9lbnRyeV9tYXRjaCAqbSwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKK2RvX21hdGNoKGNvbnN0IHN0cnVjdCBpcHRfZW50cnlfbWF0Y2ggKm0sIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJIHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQogewogCXBhci0+bWF0Y2ggICAgID0gbS0+dS5rZXJuZWwubWF0Y2g7CkBAIC0xODQsNyArMTkxLDcgQEAKIAogLyogUGVyZm9ybWFuY2UgY3JpdGljYWwgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwdF9lbnRyeSAqCi1nZXRfZW50cnkodm9pZCAqYmFzZSwgdW5zaWduZWQgaW50IG9mZnNldCkKK2dldF9lbnRyeShjb25zdCB2b2lkICpiYXNlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewogCXJldHVybiAoc3RydWN0IGlwdF9lbnRyeSAqKShiYXNlICsgb2Zmc2V0KTsKIH0KQEAgLTE5OSw2ICsyMDYsMTMgQEAKICN1bmRlZiBGV0lOVgogfQogCisvKiBmb3IgY29uc3QtY29ycmVjdG5lc3MgKi8KK3N0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKgoraXB0X2dldF90YXJnZXRfYyhjb25zdCBzdHJ1Y3QgaXB0X2VudHJ5ICplKQoreworCXJldHVybiBpcHRfZ2V0X3RhcmdldCgoc3RydWN0IGlwdF9lbnRyeSAqKWUpOworfQorCiAjaWYgZGVmaW5lZChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0VfTU9EVUxFKQogc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGhvb2tuYW1lc1tdID0gewpAQCAtMjMzLDExICsyNDcsMTEgQEAKIAogLyogTWlsZGx5IHBlcmYgY3JpdGljYWwgKG9ubHkgaWYgcGFja2V0IHRyYWNpbmcgaXMgb24pICovCiBzdGF0aWMgaW5saW5lIGludAotZ2V0X2NoYWlubmFtZV9ydWxlbnVtKHN0cnVjdCBpcHRfZW50cnkgKnMsIHN0cnVjdCBpcHRfZW50cnkgKmUsCitnZXRfY2hhaW5uYW1lX3J1bGVudW0oY29uc3Qgc3RydWN0IGlwdF9lbnRyeSAqcywgY29uc3Qgc3RydWN0IGlwdF9lbnRyeSAqZSwKIAkJICAgICAgY29uc3QgY2hhciAqaG9va25hbWUsIGNvbnN0IGNoYXIgKipjaGFpbm5hbWUsCiAJCSAgICAgIGNvbnN0IGNoYXIgKipjb21tZW50LCB1bnNpZ25lZCBpbnQgKnJ1bGVudW0pCiB7Ci0Jc3RydWN0IGlwdF9zdGFuZGFyZF90YXJnZXQgKnQgPSAodm9pZCAqKWlwdF9nZXRfdGFyZ2V0KHMpOworCWNvbnN0IHN0cnVjdCBpcHRfc3RhbmRhcmRfdGFyZ2V0ICp0ID0gKHZvaWQgKilpcHRfZ2V0X3RhcmdldF9jKHMpOwogCiAJaWYgKHN0cmNtcCh0LT50YXJnZXQudS5rZXJuZWwudGFyZ2V0LT5uYW1lLCBJUFRfRVJST1JfVEFSR0VUKSA9PSAwKSB7CiAJCS8qIEhlYWQgb2YgdXNlciBjaGFpbjogRVJST1IgdGFyZ2V0IHdpdGggY2hhaW5uYW1lICovCkBAIC0yNjMsMTcgKzI3NywxOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB0cmFjZV9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3N0YXRpYyB2b2lkIHRyYWNlX3BhY2tldChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJIHVuc2lnbmVkIGludCBob29rLAogCQkJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKIAkJCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAogCQkJIGNvbnN0IGNoYXIgKnRhYmxlbmFtZSwKLQkJCSBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSwKLQkJCSBzdHJ1Y3QgaXB0X2VudHJ5ICplKQorCQkJIGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlLAorCQkJIGNvbnN0IHN0cnVjdCBpcHRfZW50cnkgKmUpCiB7Ci0Jdm9pZCAqdGFibGVfYmFzZTsKKwljb25zdCB2b2lkICp0YWJsZV9iYXNlOwogCWNvbnN0IHN0cnVjdCBpcHRfZW50cnkgKnJvb3Q7CiAJY29uc3QgY2hhciAqaG9va25hbWUsICpjaGFpbm5hbWUsICpjb21tZW50OworCWNvbnN0IHN0cnVjdCBpcHRfZW50cnkgKml0ZXI7CiAJdW5zaWduZWQgaW50IHJ1bGVudW0gPSAwOwogCiAJdGFibGVfYmFzZSA9IHByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKQEAgLTI4MiwxMCArMjk3LDEwIEBACiAJaG9va25hbWUgPSBjaGFpbm5hbWUgPSBob29rbmFtZXNbaG9va107CiAJY29tbWVudCA9IGNvbW1lbnRzW05GX0lQX1RSQUNFX0NPTU1FTlRfUlVMRV07CiAKLQlJUFRfRU5UUllfSVRFUkFURShyb290LAotCQkJICBwcml2YXRlLT5zaXplIC0gcHJpdmF0ZS0+aG9va19lbnRyeVtob29rXSwKLQkJCSAgZ2V0X2NoYWlubmFtZV9ydWxlbnVtLAotCQkJICBlLCBob29rbmFtZSwgJmNoYWlubmFtZSwgJmNvbW1lbnQsICZydWxlbnVtKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIHJvb3QsIHByaXZhdGUtPnNpemUgLSBwcml2YXRlLT5ob29rX2VudHJ5W2hvb2tdKQorCQlpZiAoZ2V0X2NoYWlubmFtZV9ydWxlbnVtKGl0ZXIsIGUsIGhvb2tuYW1lLAorCQkgICAgJmNoYWlubmFtZSwgJmNvbW1lbnQsICZydWxlbnVtKSAhPSAwKQorCQkJYnJlYWs7CiAKIAluZl9sb2dfcGFja2V0KEFGX0lORVQsIGhvb2ssIHNrYiwgaW4sIG91dCwgJnRyYWNlX2xvZ2luZm8sCiAJCSAgICAgICJUUkFDRTogJXM6JXM6JXM6JXUgIiwKQEAgLTMxNSw5ICszMzAsOSBAQAogCS8qIEluaXRpYWxpemluZyB2ZXJkaWN0IHRvIE5GX0RST1Aga2VlcHMgZ2NjIGhhcHB5LiAqLwogCXVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDsKIAljb25zdCBjaGFyICppbmRldiwgKm91dGRldjsKLQl2b2lkICp0YWJsZV9iYXNlOworCWNvbnN0IHZvaWQgKnRhYmxlX2Jhc2U7CiAJc3RydWN0IGlwdF9lbnRyeSAqZSwgKmJhY2s7Ci0Jc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGU7CisJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGU7CiAJc3RydWN0IHh0X21hdGNoX3BhcmFtIG10cGFyOwogCXN0cnVjdCB4dF90YXJnZXRfcGFyYW0gdGdwYXI7CiAKQEAgLTM1MCwxNyArMzY1LDIyIEBACiAJYmFjayA9IGdldF9lbnRyeSh0YWJsZV9iYXNlLCBwcml2YXRlLT51bmRlcmZsb3dbaG9va10pOwogCiAJZG8gewotCQlzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldCAqdDsKKwkJY29uc3Qgc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CisJCWNvbnN0IHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqZW1hdGNoOwogCiAJCUlQX05GX0FTU0VSVChlKTsKIAkJSVBfTkZfQVNTRVJUKGJhY2spOwogCQlpZiAoIWlwX3BhY2tldF9tYXRjaChpcCwgaW5kZXYsIG91dGRldiwKLQkJICAgICZlLT5pcCwgbXRwYXIuZnJhZ29mZikgfHwKLQkJICAgIElQVF9NQVRDSF9JVEVSQVRFKGUsIGRvX21hdGNoLCBza2IsICZtdHBhcikgIT0gMCkgeworCQkgICAgJmUtPmlwLCBtdHBhci5mcmFnb2ZmKSkgeworIG5vX21hdGNoOgogCQkJZSA9IGlwdF9uZXh0X2VudHJ5KGUpOwogCQkJY29udGludWU7CiAJCX0KIAorCQl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpCisJCQlpZiAoZG9fbWF0Y2goZW1hdGNoLCBza2IsICZtdHBhcikgIT0gMCkKKwkJCQlnb3RvIG5vX21hdGNoOworCiAJCUFERF9DT1VOVEVSKGUtPmNvdW50ZXJzLCBudG9ocyhpcC0+dG90X2xlbiksIDEpOwogCiAJCXQgPSBpcHRfZ2V0X3RhcmdldChlKTsKQEAgLTQ0Myw3ICs0NjMsNyBAQAogLyogRmlndXJlcyBvdXQgZnJvbSB3aGF0IGhvb2sgZWFjaCBydWxlIGNhbiBiZSBjYWxsZWQ6IHJldHVybnMgMCBpZgogICAgdGhlcmUgYXJlIGxvb3BzLiAgUHV0cyBob29rIGJpdG1hc2sgaW4gY29tZWZyb20uICovCiBzdGF0aWMgaW50Ci1tYXJrX3NvdXJjZV9jaGFpbnMoc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCittYXJrX3NvdXJjZV9jaGFpbnMoY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCiAJCSAgIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcywgdm9pZCAqZW50cnkwKQogewogCXVuc2lnbmVkIGludCBob29rOwpAQCAtNDYxLDggKzQ4MSw4IEBACiAJCWUtPmNvdW50ZXJzLnBjbnQgPSBwb3M7CiAKIAkJZm9yICg7OykgewotCQkJc3RydWN0IGlwdF9zdGFuZGFyZF90YXJnZXQgKnQKLQkJCQk9ICh2b2lkICopaXB0X2dldF90YXJnZXQoZSk7CisJCQljb25zdCBzdHJ1Y3QgaXB0X3N0YW5kYXJkX3RhcmdldCAqdAorCQkJCT0gKHZvaWQgKilpcHRfZ2V0X3RhcmdldF9jKGUpOwogCQkJaW50IHZpc2l0ZWQgPSBlLT5jb21lZnJvbSAmICgxIDw8IGhvb2spOwogCiAJCQlpZiAoZS0+Y29tZWZyb20gJiAoMSA8PCBORl9JTkVUX05VTUhPT0tTKSkgewpAQCAtNTUyLDI3ICs1NzIsMjMgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIGludAotY2xlYW51cF9tYXRjaChzdHJ1Y3QgaXB0X2VudHJ5X21hdGNoICptLCB1bnNpZ25lZCBpbnQgKmkpCitzdGF0aWMgdm9pZCBjbGVhbnVwX21hdGNoKHN0cnVjdCBpcHRfZW50cnlfbWF0Y2ggKm0sIHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgeHRfbXRkdG9yX3BhcmFtIHBhcjsKIAotCWlmIChpICYmICgqaSktLSA9PSAwKQotCQlyZXR1cm4gMTsKLQorCXBhci5uZXQgICAgICAgPSBuZXQ7CiAJcGFyLm1hdGNoICAgICA9IG0tPnUua2VybmVsLm1hdGNoOwogCXBhci5tYXRjaGluZm8gPSBtLT5kYXRhOwogCXBhci5mYW1pbHkgICAgPSBORlBST1RPX0lQVjQ7CiAJaWYgKHBhci5tYXRjaC0+ZGVzdHJveSAhPSBOVUxMKQogCQlwYXIubWF0Y2gtPmRlc3Ryb3koJnBhcik7CiAJbW9kdWxlX3B1dChwYXIubWF0Y2gtPm1lKTsKLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAotY2hlY2tfZW50cnkoc3RydWN0IGlwdF9lbnRyeSAqZSwgY29uc3QgY2hhciAqbmFtZSkKK2NoZWNrX2VudHJ5KGNvbnN0IHN0cnVjdCBpcHRfZW50cnkgKmUsIGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CisJY29uc3Qgc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CiAKIAlpZiAoIWlwX2NoZWNrZW50cnkoJmUtPmlwKSkgewogCQlkdXByaW50ZigiaXBfdGFibGVzOiBpcCBjaGVjayBmYWlsZWQgJXAgJXMuXG4iLCBlLCBuYW1lKTsKQEAgLTU4Myw3ICs1OTksNyBAQAogCSAgICBlLT5uZXh0X29mZnNldCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl0ID0gaXB0X2dldF90YXJnZXQoZSk7CisJdCA9IGlwdF9nZXRfdGFyZ2V0X2MoZSk7CiAJaWYgKGUtPnRhcmdldF9vZmZzZXQgKyB0LT51LnRhcmdldF9zaXplID4gZS0+bmV4dF9vZmZzZXQpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC01OTEsOCArNjA3LDcgQEAKIH0KIAogc3RhdGljIGludAotY2hlY2tfbWF0Y2goc3RydWN0IGlwdF9lbnRyeV9tYXRjaCAqbSwgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIsCi0JICAgIHVuc2lnbmVkIGludCAqaSkKK2NoZWNrX21hdGNoKHN0cnVjdCBpcHRfZW50cnlfbWF0Y2ggKm0sIHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogewogCWNvbnN0IHN0cnVjdCBpcHRfaXAgKmlwID0gcGFyLT5lbnRyeWluZm87CiAJaW50IHJldDsKQEAgLTYwNywxMyArNjIyLDExIEBACiAJCQkgcGFyLm1hdGNoLT5uYW1lKTsKIAkJcmV0dXJuIHJldDsKIAl9Ci0JKysqaTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAotZmluZF9jaGVja19tYXRjaChzdHJ1Y3QgaXB0X2VudHJ5X21hdGNoICptLCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhciwKLQkJIHVuc2lnbmVkIGludCAqaSkKK2ZpbmRfY2hlY2tfbWF0Y2goc3RydWN0IGlwdF9lbnRyeV9tYXRjaCAqbSwgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiB7CiAJc3RydWN0IHh0X21hdGNoICptYXRjaDsKIAlpbnQgcmV0OwpAQCAtNjI3LDcgKzY0MCw3IEBACiAJfQogCW0tPnUua2VybmVsLm1hdGNoID0gbWF0Y2g7CiAKLQlyZXQgPSBjaGVja19tYXRjaChtLCBwYXIsIGkpOworCXJldCA9IGNoZWNrX21hdGNoKG0sIHBhcik7CiAJaWYgKHJldCkKIAkJZ290byBlcnI7CiAKQEAgLTYzNywxMCArNjUwLDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBjaGVja190YXJnZXQoc3RydWN0IGlwdF9lbnRyeSAqZSwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBpbnQgY2hlY2tfdGFyZ2V0KHN0cnVjdCBpcHRfZW50cnkgKmUsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldCAqdCA9IGlwdF9nZXRfdGFyZ2V0KGUpOwogCXN0cnVjdCB4dF90Z2Noa19wYXJhbSBwYXIgPSB7CisJCS5uZXQgICAgICAgPSBuZXQsCiAJCS50YWJsZSAgICAgPSBuYW1lLAogCQkuZW50cnlpbmZvID0gZSwKIAkJLnRhcmdldCAgICA9IHQtPnUua2VybmVsLnRhcmdldCwKQEAgLTY2MSwyNyArNjc1LDMyIEBACiB9CiAKIHN0YXRpYyBpbnQKLWZpbmRfY2hlY2tfZW50cnkoc3RydWN0IGlwdF9lbnRyeSAqZSwgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IHNpemUsCi0JCSB1bnNpZ25lZCBpbnQgKmkpCitmaW5kX2NoZWNrX2VudHJ5KHN0cnVjdCBpcHRfZW50cnkgKmUsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSwKKwkJIHVuc2lnbmVkIGludCBzaXplKQogewogCXN0cnVjdCBpcHRfZW50cnlfdGFyZ2V0ICp0OwogCXN0cnVjdCB4dF90YXJnZXQgKnRhcmdldDsKIAlpbnQgcmV0OwogCXVuc2lnbmVkIGludCBqOwogCXN0cnVjdCB4dF9tdGNoa19wYXJhbSBtdHBhcjsKKwlzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKmVtYXRjaDsKIAogCXJldCA9IGNoZWNrX2VudHJ5KGUsIG5hbWUpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKIAlqID0gMDsKKwltdHBhci5uZXQJPSBuZXQ7CiAJbXRwYXIudGFibGUgICAgID0gbmFtZTsKIAltdHBhci5lbnRyeWluZm8gPSAmZS0+aXA7CiAJbXRwYXIuaG9va19tYXNrID0gZS0+Y29tZWZyb207CiAJbXRwYXIuZmFtaWx5ICAgID0gTkZQUk9UT19JUFY0OwotCXJldCA9IElQVF9NQVRDSF9JVEVSQVRFKGUsIGZpbmRfY2hlY2tfbWF0Y2gsICZtdHBhciwgJmopOwotCWlmIChyZXQgIT0gMCkKLQkJZ290byBjbGVhbnVwX21hdGNoZXM7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKSB7CisJCXJldCA9IGZpbmRfY2hlY2tfbWF0Y2goZW1hdGNoLCAmbXRwYXIpOworCQlpZiAocmV0ICE9IDApCisJCQlnb3RvIGNsZWFudXBfbWF0Y2hlczsKKwkJKytqOworCX0KIAogCXQgPSBpcHRfZ2V0X3RhcmdldChlKTsKIAl0YXJnZXQgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX3RhcmdldChBRl9JTkVULApAQCAtNjk1LDI3ICs3MTQsMjkgQEAKIAl9CiAJdC0+dS5rZXJuZWwudGFyZ2V0ID0gdGFyZ2V0OwogCi0JcmV0ID0gY2hlY2tfdGFyZ2V0KGUsIG5hbWUpOworCXJldCA9IGNoZWNrX3RhcmdldChlLCBuZXQsIG5hbWUpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwotCi0JKCppKSsrOwogCXJldHVybiAwOwogIGVycjoKIAltb2R1bGVfcHV0KHQtPnUua2VybmVsLnRhcmdldC0+bWUpOwogIGNsZWFudXBfbWF0Y2hlczoKLQlJUFRfTUFUQ0hfSVRFUkFURShlLCBjbGVhbnVwX21hdGNoLCAmaik7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKSB7CisJCWlmIChqLS0gPT0gMCkKKwkJCWJyZWFrOworCQljbGVhbnVwX21hdGNoKGVtYXRjaCwgbmV0KTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGJvb2wgY2hlY2tfdW5kZXJmbG93KHN0cnVjdCBpcHRfZW50cnkgKmUpCitzdGF0aWMgYm9vbCBjaGVja191bmRlcmZsb3coY29uc3Qgc3RydWN0IGlwdF9lbnRyeSAqZSkKIHsKIAljb25zdCBzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldCAqdDsKIAl1bnNpZ25lZCBpbnQgdmVyZGljdDsKIAogCWlmICghdW5jb25kaXRpb25hbCgmZS0+aXApKQogCQlyZXR1cm4gZmFsc2U7Ci0JdCA9IGlwdF9nZXRfdGFyZ2V0KGUpOworCXQgPSBpcHRfZ2V0X3RhcmdldF9jKGUpOwogCWlmIChzdHJjbXAodC0+dS51c2VyLm5hbWUsIFhUX1NUQU5EQVJEX1RBUkdFVCkgIT0gMCkKIAkJcmV0dXJuIGZhbHNlOwogCXZlcmRpY3QgPSAoKHN0cnVjdCBpcHRfc3RhbmRhcmRfdGFyZ2V0ICopdCktPnZlcmRpY3Q7CkBAIC03MjYsMTIgKzc0NywxMSBAQAogc3RhdGljIGludAogY2hlY2tfZW50cnlfc2l6ZV9hbmRfaG9va3Moc3RydWN0IGlwdF9lbnRyeSAqZSwKIAkJCSAgIHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLAotCQkJICAgdW5zaWduZWQgY2hhciAqYmFzZSwKLQkJCSAgIHVuc2lnbmVkIGNoYXIgKmxpbWl0LAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqYmFzZSwKKwkJCSAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmxpbWl0LAogCQkJICAgY29uc3QgdW5zaWduZWQgaW50ICpob29rX2VudHJpZXMsCiAJCQkgICBjb25zdCB1bnNpZ25lZCBpbnQgKnVuZGVyZmxvd3MsCi0JCQkgICB1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3MsCi0JCQkgICB1bnNpZ25lZCBpbnQgKmkpCisJCQkgICB1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3MpCiB7CiAJdW5zaWduZWQgaW50IGg7CiAKQEAgLTc2OCw1MCArNzg4LDQyIEBACiAJLyogQ2xlYXIgY291bnRlcnMgYW5kIGNvbWVmcm9tICovCiAJZS0+Y291bnRlcnMgPSAoKHN0cnVjdCB4dF9jb3VudGVycykgeyAwLCAwIH0pOwogCWUtPmNvbWVmcm9tID0gMDsKLQotCSgqaSkrKzsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotY2xlYW51cF9lbnRyeShzdHJ1Y3QgaXB0X2VudHJ5ICplLCB1bnNpZ25lZCBpbnQgKmkpCitzdGF0aWMgdm9pZAorY2xlYW51cF9lbnRyeShzdHJ1Y3QgaXB0X2VudHJ5ICplLCBzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IHh0X3RnZHRvcl9wYXJhbSBwYXI7CiAJc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7Ci0KLQlpZiAoaSAmJiAoKmkpLS0gPT0gMCkKLQkJcmV0dXJuIDE7CisJc3RydWN0IHh0X2VudHJ5X21hdGNoICplbWF0Y2g7CiAKIAkvKiBDbGVhbnVwIGFsbCBtYXRjaGVzICovCi0JSVBUX01BVENIX0lURVJBVEUoZSwgY2xlYW51cF9tYXRjaCwgTlVMTCk7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKQorCQljbGVhbnVwX21hdGNoKGVtYXRjaCwgbmV0KTsKIAl0ID0gaXB0X2dldF90YXJnZXQoZSk7CiAKKwlwYXIubmV0ICAgICAgPSBuZXQ7CiAJcGFyLnRhcmdldCAgID0gdC0+dS5rZXJuZWwudGFyZ2V0OwogCXBhci50YXJnaW5mbyA9IHQtPmRhdGE7CiAJcGFyLmZhbWlseSAgID0gTkZQUk9UT19JUFY0OwogCWlmIChwYXIudGFyZ2V0LT5kZXN0cm95ICE9IE5VTEwpCiAJCXBhci50YXJnZXQtPmRlc3Ryb3koJnBhcik7CiAJbW9kdWxlX3B1dChwYXIudGFyZ2V0LT5tZSk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qIENoZWNrcyBhbmQgdHJhbnNsYXRlcyB0aGUgdXNlci1zdXBwbGllZCB0YWJsZSBzZWdtZW50IChoZWxkIGluCiAgICBuZXdpbmZvKSAqLwogc3RhdGljIGludAotdHJhbnNsYXRlX3RhYmxlKGNvbnN0IGNoYXIgKm5hbWUsCi0JCXVuc2lnbmVkIGludCB2YWxpZF9ob29rcywKLQkJc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCi0JCXZvaWQgKmVudHJ5MCwKLQkJdW5zaWduZWQgaW50IHNpemUsCi0JCXVuc2lnbmVkIGludCBudW1iZXIsCi0JCWNvbnN0IHVuc2lnbmVkIGludCAqaG9va19lbnRyaWVzLAotCQljb25zdCB1bnNpZ25lZCBpbnQgKnVuZGVyZmxvd3MpCit0cmFuc2xhdGVfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywgdm9pZCAqZW50cnkwLAorICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpcHRfcmVwbGFjZSAqcmVwbCkKIHsKKwlzdHJ1Y3QgaXB0X2VudHJ5ICppdGVyOwogCXVuc2lnbmVkIGludCBpOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAKLQluZXdpbmZvLT5zaXplID0gc2l6ZTsKLQluZXdpbmZvLT5udW1iZXIgPSBudW1iZXI7CisJbmV3aW5mby0+c2l6ZSA9IHJlcGwtPnNpemU7CisJbmV3aW5mby0+bnVtYmVyID0gcmVwbC0+bnVtX2VudHJpZXM7CiAKIAkvKiBJbml0IGFsbCBob29rcyB0byBpbXBvc3NpYmxlIHZhbHVlLiAqLwogCWZvciAoaSA9IDA7IGkgPCBORl9JTkVUX05VTUhPT0tTOyBpKyspIHsKQEAgLTgyMiw0OSArODM0LDU4IEBACiAJZHVwcmludGYoInRyYW5zbGF0ZV90YWJsZTogc2l6ZSAldVxuIiwgbmV3aW5mby0+c2l6ZSk7CiAJaSA9IDA7CiAJLyogV2FsayB0aHJvdWdoIGVudHJpZXMsIGNoZWNraW5nIG9mZnNldHMuICovCi0JcmV0ID0gSVBUX0VOVFJZX0lURVJBVEUoZW50cnkwLCBuZXdpbmZvLT5zaXplLAotCQkJCWNoZWNrX2VudHJ5X3NpemVfYW5kX2hvb2tzLAotCQkJCW5ld2luZm8sCi0JCQkJZW50cnkwLAotCQkJCWVudHJ5MCArIHNpemUsCi0JCQkJaG9va19lbnRyaWVzLCB1bmRlcmZsb3dzLCB2YWxpZF9ob29rcywgJmkpOwotCWlmIChyZXQgIT0gMCkKLQkJcmV0dXJuIHJldDsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIGVudHJ5MCwgbmV3aW5mby0+c2l6ZSkgeworCQlyZXQgPSBjaGVja19lbnRyeV9zaXplX2FuZF9ob29rcyhpdGVyLCBuZXdpbmZvLCBlbnRyeTAsCisJCQkJCQkgZW50cnkwICsgcmVwbC0+c2l6ZSwKKwkJCQkJCSByZXBsLT5ob29rX2VudHJ5LAorCQkJCQkJIHJlcGwtPnVuZGVyZmxvdywKKwkJCQkJCSByZXBsLT52YWxpZF9ob29rcyk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJCSsraTsKKwl9CiAKLQlpZiAoaSAhPSBudW1iZXIpIHsKKwlpZiAoaSAhPSByZXBsLT5udW1fZW50cmllcykgewogCQlkdXByaW50ZigidHJhbnNsYXRlX3RhYmxlOiAldSBub3QgJXUgZW50cmllc1xuIiwKLQkJCSBpLCBudW1iZXIpOworCQkJIGksIHJlcGwtPm51bV9lbnRyaWVzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogQ2hlY2sgaG9va3MgYWxsIGFzc2lnbmVkICovCiAJZm9yIChpID0gMDsgaSA8IE5GX0lORVRfTlVNSE9PS1M7IGkrKykgewogCQkvKiBPbmx5IGhvb2tzIHdoaWNoIGFyZSB2YWxpZCAqLwotCQlpZiAoISh2YWxpZF9ob29rcyAmICgxIDw8IGkpKSkKKwkJaWYgKCEocmVwbC0+dmFsaWRfaG9va3MgJiAoMSA8PCBpKSkpCiAJCQljb250aW51ZTsKIAkJaWYgKG5ld2luZm8tPmhvb2tfZW50cnlbaV0gPT0gMHhGRkZGRkZGRikgewogCQkJZHVwcmludGYoIkludmFsaWQgaG9vayBlbnRyeSAldSAldVxuIiwKLQkJCQkgaSwgaG9va19lbnRyaWVzW2ldKTsKKwkJCQkgaSwgcmVwbC0+aG9va19lbnRyeVtpXSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlpZiAobmV3aW5mby0+dW5kZXJmbG93W2ldID09IDB4RkZGRkZGRkYpIHsKIAkJCWR1cHJpbnRmKCJJbnZhbGlkIHVuZGVyZmxvdyAldSAldVxuIiwKLQkJCQkgaSwgdW5kZXJmbG93c1tpXSk7CisJCQkJIGksIHJlcGwtPnVuZGVyZmxvd1tpXSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAotCWlmICghbWFya19zb3VyY2VfY2hhaW5zKG5ld2luZm8sIHZhbGlkX2hvb2tzLCBlbnRyeTApKQorCWlmICghbWFya19zb3VyY2VfY2hhaW5zKG5ld2luZm8sIHJlcGwtPnZhbGlkX2hvb2tzLCBlbnRyeTApKQogCQlyZXR1cm4gLUVMT09QOwogCiAJLyogRmluYWxseSwgZWFjaCBzYW5pdHkgY2hlY2sgbXVzdCBwYXNzICovCiAJaSA9IDA7Ci0JcmV0ID0gSVBUX0VOVFJZX0lURVJBVEUoZW50cnkwLCBuZXdpbmZvLT5zaXplLAotCQkJCWZpbmRfY2hlY2tfZW50cnksIG5hbWUsIHNpemUsICZpKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIGVudHJ5MCwgbmV3aW5mby0+c2l6ZSkgeworCQlyZXQgPSBmaW5kX2NoZWNrX2VudHJ5KGl0ZXIsIG5ldCwgcmVwbC0+bmFtZSwgcmVwbC0+c2l6ZSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWJyZWFrOworCQkrK2k7CisJfQogCiAJaWYgKHJldCAhPSAwKSB7Ci0JCUlQVF9FTlRSWV9JVEVSQVRFKGVudHJ5MCwgbmV3aW5mby0+c2l6ZSwKLQkJCQljbGVhbnVwX2VudHJ5LCAmaSk7CisJCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgZW50cnkwLCBuZXdpbmZvLT5zaXplKSB7CisJCQlpZiAoaS0tID09IDApCisJCQkJYnJlYWs7CisJCQljbGVhbnVwX2VudHJ5KGl0ZXIsIG5ldCk7CisJCX0KIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTg3NywzMyArODk4LDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogR2V0cyBjb3VudGVycy4gKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci1hZGRfZW50cnlfdG9fY291bnRlcihjb25zdCBzdHJ1Y3QgaXB0X2VudHJ5ICplLAotCQkgICAgIHN0cnVjdCB4dF9jb3VudGVycyB0b3RhbFtdLAotCQkgICAgIHVuc2lnbmVkIGludCAqaSkKLXsKLQlBRERfQ09VTlRFUih0b3RhbFsqaV0sIGUtPmNvdW50ZXJzLmJjbnQsIGUtPmNvdW50ZXJzLnBjbnQpOwotCi0JKCppKSsrOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotc2V0X2VudHJ5X3RvX2NvdW50ZXIoY29uc3Qgc3RydWN0IGlwdF9lbnRyeSAqZSwKLQkJICAgICBzdHJ1Y3QgaXB0X2NvdW50ZXJzIHRvdGFsW10sCi0JCSAgICAgdW5zaWduZWQgaW50ICppKQotewotCVNFVF9DT1VOVEVSKHRvdGFsWyppXSwgZS0+Y291bnRlcnMuYmNudCwgZS0+Y291bnRlcnMucGNudCk7Ci0KLQkoKmkpKys7Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyB2b2lkCiBnZXRfY291bnRlcnMoY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnQsCiAJICAgICBzdHJ1Y3QgeHRfY291bnRlcnMgY291bnRlcnNbXSkKIHsKKwlzdHJ1Y3QgaXB0X2VudHJ5ICppdGVyOwogCXVuc2lnbmVkIGludCBjcHU7CiAJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgaW50IGN1cmNwdTsKQEAgLTkxOSwzMiArOTE4LDMyIEBACiAJY3VyY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJaSA9IDA7Ci0JSVBUX0VOVFJZX0lURVJBVEUodC0+ZW50cmllc1tjdXJjcHVdLAotCQkJICB0LT5zaXplLAotCQkJICBzZXRfZW50cnlfdG9fY291bnRlciwKLQkJCSAgY291bnRlcnMsCi0JCQkgICZpKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIHQtPmVudHJpZXNbY3VyY3B1XSwgdC0+c2l6ZSkgeworCQlTRVRfQ09VTlRFUihjb3VudGVyc1tpXSwgaXRlci0+Y291bnRlcnMuYmNudCwKKwkJCSAgICBpdGVyLT5jb3VudGVycy5wY250KTsKKwkJKytpOworCX0KIAogCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJaWYgKGNwdSA9PSBjdXJjcHUpCiAJCQljb250aW51ZTsKIAkJaSA9IDA7CiAJCXh0X2luZm9fd3Jsb2NrKGNwdSk7Ci0JCUlQVF9FTlRSWV9JVEVSQVRFKHQtPmVudHJpZXNbY3B1XSwKLQkJCQkgIHQtPnNpemUsCi0JCQkJICBhZGRfZW50cnlfdG9fY291bnRlciwKLQkJCQkgIGNvdW50ZXJzLAotCQkJCSAgJmkpOworCQl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIHQtPmVudHJpZXNbY3B1XSwgdC0+c2l6ZSkgeworCQkJQUREX0NPVU5URVIoY291bnRlcnNbaV0sIGl0ZXItPmNvdW50ZXJzLmJjbnQsCisJCQkJICAgIGl0ZXItPmNvdW50ZXJzLnBjbnQpOworCQkJKytpOyAvKiBtYWNybyBkb2VzIG11bHRpIGV2YWwgb2YgaSAqLworCQl9CiAJCXh0X2luZm9fd3J1bmxvY2soY3B1KTsKIAl9CiAJbG9jYWxfYmhfZW5hYmxlKCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgeHRfY291bnRlcnMgKiBhbGxvY19jb3VudGVycyhzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKQorc3RhdGljIHN0cnVjdCB4dF9jb3VudGVycyAqYWxsb2NfY291bnRlcnMoY29uc3Qgc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKIHsKIAl1bnNpZ25lZCBpbnQgY291bnRlcnNpemU7CiAJc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKLQlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOworCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CiAKIAkvKiBXZSBuZWVkIGF0b21pYyBzbmFwc2hvdCBvZiBjb3VudGVyczogcmVzdCBkb2Vzbid0IGNoYW5nZQogCSAgIChvdGhlciB0aGFuIGNvbWVmcm9tLCB3aGljaCB1c2Vyc3BhY2UgZG9lc24ndCBjYXJlCkBAIC05NjIsMTEgKzk2MSwxMSBAQAogCiBzdGF0aWMgaW50CiBjb3B5X2VudHJpZXNfdG9fdXNlcih1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSwKLQkJICAgICBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLAorCQkgICAgIGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCiAJCSAgICAgdm9pZCBfX3VzZXIgKnVzZXJwdHIpCiB7CiAJdW5zaWduZWQgaW50IG9mZiwgbnVtOwotCXN0cnVjdCBpcHRfZW50cnkgKmU7CisJY29uc3Qgc3RydWN0IGlwdF9lbnRyeSAqZTsKIAlzdHJ1Y3QgeHRfY291bnRlcnMgKmNvdW50ZXJzOwogCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CiAJaW50IHJldCA9IDA7CkBAIC0xMDE4LDcgKzEwMTcsNyBAQAogCQkJfQogCQl9CiAKLQkJdCA9IGlwdF9nZXRfdGFyZ2V0KGUpOworCQl0ID0gaXB0X2dldF90YXJnZXRfYyhlKTsKIAkJaWYgKGNvcHlfdG9fdXNlcih1c2VycHRyICsgb2ZmICsgZS0+dGFyZ2V0X29mZnNldAogCQkJCSArIG9mZnNldG9mKHN0cnVjdCBpcHRfZW50cnlfdGFyZ2V0LAogCQkJCQkgICAgdS51c2VyLm5hbWUpLApAQCAtMTAzNSw3ICsxMDM0LDcgQEAKIH0KIAogI2lmZGVmIENPTkZJR19DT01QQVQKLXN0YXRpYyB2b2lkIGNvbXBhdF9zdGFuZGFyZF9mcm9tX3VzZXIodm9pZCAqZHN0LCB2b2lkICpzcmMpCitzdGF0aWMgdm9pZCBjb21wYXRfc3RhbmRhcmRfZnJvbV91c2VyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQogewogCWludCB2ID0gKihjb21wYXRfaW50X3QgKilzcmM7CiAKQEAgLTEwNDQsNyArMTA0Myw3IEBACiAJbWVtY3B5KGRzdCwgJnYsIHNpemVvZih2KSk7CiB9CiAKLXN0YXRpYyBpbnQgY29tcGF0X3N0YW5kYXJkX3RvX3VzZXIodm9pZCBfX3VzZXIgKmRzdCwgdm9pZCAqc3JjKQorc3RhdGljIGludCBjb21wYXRfc3RhbmRhcmRfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiB7CiAJY29tcGF0X2ludF90IGN2ID0gKihpbnQgKilzcmM7CiAKQEAgLTEwNTMsMjUgKzEwNTIsMjAgQEAKIAlyZXR1cm4gY29weV90b191c2VyKGRzdCwgJmN2LCBzaXplb2YoY3YpKSA/IC1FRkFVTFQgOiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludAotY29tcGF0X2NhbGNfbWF0Y2goc3RydWN0IGlwdF9lbnRyeV9tYXRjaCAqbSwgaW50ICpzaXplKQotewotCSpzaXplICs9IHh0X2NvbXBhdF9tYXRjaF9vZmZzZXQobS0+dS5rZXJuZWwubWF0Y2gpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGNvbXBhdF9jYWxjX2VudHJ5KHN0cnVjdCBpcHRfZW50cnkgKmUsCitzdGF0aWMgaW50IGNvbXBhdF9jYWxjX2VudHJ5KGNvbnN0IHN0cnVjdCBpcHRfZW50cnkgKmUsCiAJCQkgICAgIGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvLAotCQkJICAgICB2b2lkICpiYXNlLCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbykKKwkJCSAgICAgY29uc3Qgdm9pZCAqYmFzZSwgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8pCiB7Ci0Jc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CisJY29uc3Qgc3RydWN0IHh0X2VudHJ5X21hdGNoICplbWF0Y2g7CisJY29uc3Qgc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CiAJdW5zaWduZWQgaW50IGVudHJ5X29mZnNldDsKIAlpbnQgb2ZmLCBpLCByZXQ7CiAKIAlvZmYgPSBzaXplb2Yoc3RydWN0IGlwdF9lbnRyeSkgLSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pcHRfZW50cnkpOwogCWVudHJ5X29mZnNldCA9ICh2b2lkICopZSAtIGJhc2U7Ci0JSVBUX01BVENIX0lURVJBVEUoZSwgY29tcGF0X2NhbGNfbWF0Y2gsICZvZmYpOwotCXQgPSBpcHRfZ2V0X3RhcmdldChlKTsKKwl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpCisJCW9mZiArPSB4dF9jb21wYXRfbWF0Y2hfb2Zmc2V0KGVtYXRjaC0+dS5rZXJuZWwubWF0Y2gpOworCXQgPSBpcHRfZ2V0X3RhcmdldF9jKGUpOwogCW9mZiArPSB4dF9jb21wYXRfdGFyZ2V0X29mZnNldCh0LT51Lmtlcm5lbC50YXJnZXQpOwogCW5ld2luZm8tPnNpemUgLT0gb2ZmOwogCXJldCA9IHh0X2NvbXBhdF9hZGRfb2Zmc2V0KEFGX0lORVQsIGVudHJ5X29mZnNldCwgb2ZmKTsKQEAgLTEwOTIsNyArMTA4Niw5IEBACiBzdGF0aWMgaW50IGNvbXBhdF90YWJsZV9pbmZvKGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvLAogCQkJICAgICBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbykKIHsKKwlzdHJ1Y3QgaXB0X2VudHJ5ICppdGVyOwogCXZvaWQgKmxvY19jcHVfZW50cnk7CisJaW50IHJldDsKIAogCWlmICghbmV3aW5mbyB8fCAhaW5mbykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMTAxLDEzICsxMDk3LDE3IEBACiAJbWVtY3B5KG5ld2luZm8sIGluZm8sIG9mZnNldG9mKHN0cnVjdCB4dF90YWJsZV9pbmZvLCBlbnRyaWVzKSk7CiAJbmV3aW5mby0+aW5pdGlhbF9lbnRyaWVzID0gMDsKIAlsb2NfY3B1X2VudHJ5ID0gaW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKLQlyZXR1cm4gSVBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgaW5mby0+c2l6ZSwKLQkJCQkgY29tcGF0X2NhbGNfZW50cnksIGluZm8sIGxvY19jcHVfZW50cnksCi0JCQkJIG5ld2luZm8pOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgbG9jX2NwdV9lbnRyeSwgaW5mby0+c2l6ZSkgeworCQlyZXQgPSBjb21wYXRfY2FsY19lbnRyeShpdGVyLCBpbmZvLCBsb2NfY3B1X2VudHJ5LCBuZXdpbmZvKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisJcmV0dXJuIDA7CiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBnZXRfaW5mbyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbiwgaW50IGNvbXBhdCkKK3N0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50ICpsZW4sIGludCBjb21wYXQpCiB7CiAJY2hhciBuYW1lW0lQVF9UQUJMRV9NQVhOQU1FTEVOXTsKIAlzdHJ1Y3QgeHRfdGFibGUgKnQ7CkBAIC0xMTY3LDcgKzExNjcsOCBAQAogfQogCiBzdGF0aWMgaW50Ci1nZXRfZW50cmllcyhzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBpcHRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLCBpbnQgKmxlbikKK2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwdF9nZXRfZW50cmllcyBfX3VzZXIgKnVwdHIsCisJICAgIGNvbnN0IGludCAqbGVuKQogewogCWludCByZXQ7CiAJc3RydWN0IGlwdF9nZXRfZW50cmllcyBnZXQ7CkBAIC0xMjE1LDYgKzEyMTYsNyBAQAogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpvbGRpbmZvOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7CiAJdm9pZCAqbG9jX2NwdV9vbGRfZW50cnk7CisJc3RydWN0IGlwdF9lbnRyeSAqaXRlcjsKIAogCXJldCA9IDA7CiAJY291bnRlcnMgPSB2bWFsbG9jKG51bV9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpKTsKQEAgLTEyNTcsOCArMTI1OSw5IEBACiAKIAkvKiBEZWNyZWFzZSBtb2R1bGUgdXNhZ2UgY291bnRzIGFuZCBmcmVlIHJlc291cmNlICovCiAJbG9jX2NwdV9vbGRfZW50cnkgPSBvbGRpbmZvLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOwotCUlQVF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfb2xkX2VudHJ5LCBvbGRpbmZvLT5zaXplLCBjbGVhbnVwX2VudHJ5LAotCQkJICBOVUxMKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIGxvY19jcHVfb2xkX2VudHJ5LCBvbGRpbmZvLT5zaXplKQorCQljbGVhbnVwX2VudHJ5KGl0ZXIsIG5ldCk7CisKIAl4dF9mcmVlX3RhYmxlX2luZm8ob2xkaW5mbyk7CiAJaWYgKGNvcHlfdG9fdXNlcihjb3VudGVyc19wdHIsIGNvdW50ZXJzLAogCQkJIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpICogbnVtX2NvdW50ZXJzKSAhPSAwKQpAQCAtMTI3NywxMiArMTI4MCwxMyBAQAogfQogCiBzdGF0aWMgaW50Ci1kb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4pCitkb19yZXBsYWNlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgaXB0X3JlcGxhY2UgdG1wOwogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvOwogCXZvaWQgKmxvY19jcHVfZW50cnk7CisJc3RydWN0IGlwdF9lbnRyeSAqaXRlcjsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmdG1wLCB1c2VyLCBzaXplb2YodG1wKSkgIT0gMCkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMzAzLDkgKzEzMDcsNyBAQAogCQlnb3RvIGZyZWVfbmV3aW5mbzsKIAl9CiAKLQlyZXQgPSB0cmFuc2xhdGVfdGFibGUodG1wLm5hbWUsIHRtcC52YWxpZF9ob29rcywKLQkJCSAgICAgIG5ld2luZm8sIGxvY19jcHVfZW50cnksIHRtcC5zaXplLCB0bXAubnVtX2VudHJpZXMsCi0JCQkgICAgICB0bXAuaG9va19lbnRyeSwgdG1wLnVuZGVyZmxvdyk7CisJcmV0ID0gdHJhbnNsYXRlX3RhYmxlKG5ldCwgbmV3aW5mbywgbG9jX2NwdV9lbnRyeSwgJnRtcCk7CiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIGZyZWVfbmV3aW5mbzsKIApAQCAtMTMxOCwyNyArMTMyMCwxNiBAQAogCXJldHVybiAwOwogCiAgZnJlZV9uZXdpbmZvX3VudHJhbnM6Ci0JSVBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgbmV3aW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSwgTlVMTCk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBuZXdpbmZvLT5zaXplKQorCQljbGVhbnVwX2VudHJ5KGl0ZXIsIG5ldCk7CiAgZnJlZV9uZXdpbmZvOgogCXh0X2ZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBXZSdyZSBsYXp5LCBhbmQgYWRkIHRvIHRoZSBmaXJzdCBDUFU7IG92ZXJmbG93IHdvcmtzIGl0cyBmZXkgbWFnaWMKLSAqIGFuZCBldmVyeXRoaW5nIGlzIE9LLiAqLwogc3RhdGljIGludAotYWRkX2NvdW50ZXJfdG9fZW50cnkoc3RydWN0IGlwdF9lbnRyeSAqZSwKLQkJICAgICBjb25zdCBzdHJ1Y3QgeHRfY291bnRlcnMgYWRkbWVbXSwKLQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCi17Ci0JQUREX0NPVU5URVIoZS0+Y291bnRlcnMsIGFkZG1lWyppXS5iY250LCBhZGRtZVsqaV0ucGNudCk7Ci0KLQkoKmkpKys7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLWRvX2FkZF9jb3VudGVycyhzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgY29tcGF0KQorZG9fYWRkX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgdm9pZCBfX3VzZXIgKnVzZXIsCisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbiwgaW50IGNvbXBhdCkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgY3VyY3B1OwogCXN0cnVjdCB4dF9jb3VudGVyc19pbmZvIHRtcDsKQEAgLTEzNTEsNiArMTM0Miw3IEBACiAJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGU7CiAJaW50IHJldCA9IDA7CiAJdm9pZCAqbG9jX2NwdV9lbnRyeTsKKwlzdHJ1Y3QgaXB0X2VudHJ5ICppdGVyOwogI2lmZGVmIENPTkZJR19DT01QQVQKIAlzdHJ1Y3QgY29tcGF0X3h0X2NvdW50ZXJzX2luZm8gY29tcGF0X3RtcDsKIApAQCAtMTQwOCwxMSArMTQwMCwxMCBAQAogCWN1cmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlsb2NfY3B1X2VudHJ5ID0gcHJpdmF0ZS0+ZW50cmllc1tjdXJjcHVdOwogCXh0X2luZm9fd3Jsb2NrKGN1cmNwdSk7Ci0JSVBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwKLQkJCSAgcHJpdmF0ZS0+c2l6ZSwKLQkJCSAgYWRkX2NvdW50ZXJfdG9fZW50cnksCi0JCQkgIHBhZGRjLAotCQkJICAmaSk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBwcml2YXRlLT5zaXplKSB7CisJCUFERF9DT1VOVEVSKGl0ZXItPmNvdW50ZXJzLCBwYWRkY1tpXS5iY250LCBwYWRkY1tpXS5wY250KTsKKwkJKytpOworCX0KIAl4dF9pbmZvX3dydW5sb2NrKGN1cmNwdSk7CiAgdW5sb2NrX3VwX2ZyZWU6CiAJbG9jYWxfYmhfZW5hYmxlKCk7CkBAIC0xNDQwLDQ1ICsxNDMxLDQwIEBACiBzdGF0aWMgaW50CiBjb21wYXRfY29weV9lbnRyeV90b191c2VyKHN0cnVjdCBpcHRfZW50cnkgKmUsIHZvaWQgX191c2VyICoqZHN0cHRyLAogCQkJICB1bnNpZ25lZCBpbnQgKnNpemUsIHN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnMsCi0JCQkgIHVuc2lnbmVkIGludCAqaSkKKwkJCSAgdW5zaWduZWQgaW50IGkpCiB7CiAJc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7CiAJc3RydWN0IGNvbXBhdF9pcHRfZW50cnkgX191c2VyICpjZTsKIAl1X2ludDE2X3QgdGFyZ2V0X29mZnNldCwgbmV4dF9vZmZzZXQ7CiAJY29tcGF0X3VpbnRfdCBvcmlnc2l6ZTsKLQlpbnQgcmV0OworCWNvbnN0IHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqZW1hdGNoOworCWludCByZXQgPSAwOwogCi0JcmV0ID0gLUVGQVVMVDsKIAlvcmlnc2l6ZSA9ICpzaXplOwogCWNlID0gKHN0cnVjdCBjb21wYXRfaXB0X2VudHJ5IF9fdXNlciAqKSpkc3RwdHI7Ci0JaWYgKGNvcHlfdG9fdXNlcihjZSwgZSwgc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpKSkKLQkJZ290byBvdXQ7Ci0KLQlpZiAoY29weV90b191c2VyKCZjZS0+Y291bnRlcnMsICZjb3VudGVyc1sqaV0sIHNpemVvZihjb3VudGVyc1sqaV0pKSkKLQkJZ290byBvdXQ7CisJaWYgKGNvcHlfdG9fdXNlcihjZSwgZSwgc2l6ZW9mKHN0cnVjdCBpcHRfZW50cnkpKSAhPSAwIHx8CisJICAgIGNvcHlfdG9fdXNlcigmY2UtPmNvdW50ZXJzLCAmY291bnRlcnNbaV0sCisJICAgIHNpemVvZihjb3VudGVyc1tpXSkpICE9IDApCisJCXJldHVybiAtRUZBVUxUOwogCiAJKmRzdHB0ciArPSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pcHRfZW50cnkpOwogCSpzaXplIC09IHNpemVvZihzdHJ1Y3QgaXB0X2VudHJ5KSAtIHNpemVvZihzdHJ1Y3QgY29tcGF0X2lwdF9lbnRyeSk7CiAKLQlyZXQgPSBJUFRfTUFUQ0hfSVRFUkFURShlLCB4dF9jb21wYXRfbWF0Y2hfdG9fdXNlciwgZHN0cHRyLCBzaXplKTsKKwl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpIHsKKwkJcmV0ID0geHRfY29tcGF0X21hdGNoX3RvX3VzZXIoZW1hdGNoLCBkc3RwdHIsIHNpemUpOworCQlpZiAocmV0ICE9IDApCisJCQlyZXR1cm4gcmV0OworCX0KIAl0YXJnZXRfb2Zmc2V0ID0gZS0+dGFyZ2V0X29mZnNldCAtIChvcmlnc2l6ZSAtICpzaXplKTsKLQlpZiAocmV0KQotCQlnb3RvIG91dDsKIAl0ID0gaXB0X2dldF90YXJnZXQoZSk7CiAJcmV0ID0geHRfY29tcGF0X3RhcmdldF90b191c2VyKHQsIGRzdHB0ciwgc2l6ZSk7CiAJaWYgKHJldCkKLQkJZ290byBvdXQ7Ci0JcmV0ID0gLUVGQVVMVDsKKwkJcmV0dXJuIHJldDsKIAluZXh0X29mZnNldCA9IGUtPm5leHRfb2Zmc2V0IC0gKG9yaWdzaXplIC0gKnNpemUpOwotCWlmIChwdXRfdXNlcih0YXJnZXRfb2Zmc2V0LCAmY2UtPnRhcmdldF9vZmZzZXQpKQotCQlnb3RvIG91dDsKLQlpZiAocHV0X3VzZXIobmV4dF9vZmZzZXQsICZjZS0+bmV4dF9vZmZzZXQpKQotCQlnb3RvIG91dDsKLQotCSgqaSkrKzsKKwlpZiAocHV0X3VzZXIodGFyZ2V0X29mZnNldCwgJmNlLT50YXJnZXRfb2Zmc2V0KSAhPSAwIHx8CisJICAgIHB1dF91c2VyKG5leHRfb2Zmc2V0LCAmY2UtPm5leHRfb2Zmc2V0KSAhPSAwKQorCQlyZXR1cm4gLUVGQVVMVDsKIAlyZXR1cm4gMDsKLW91dDoKLQlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50CkBAIC0xNDg2LDcgKzE0NzIsNyBAQAogCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwKIAkJICAgICAgIGNvbnN0IHN0cnVjdCBpcHRfaXAgKmlwLAogCQkgICAgICAgdW5zaWduZWQgaW50IGhvb2ttYXNrLAotCQkgICAgICAgaW50ICpzaXplLCB1bnNpZ25lZCBpbnQgKmkpCisJCSAgICAgICBpbnQgKnNpemUpCiB7CiAJc3RydWN0IHh0X21hdGNoICptYXRjaDsKIApAQCAtMTUwMCw0NyArMTQ4NiwzMiBAQAogCX0KIAltLT51Lmtlcm5lbC5tYXRjaCA9IG1hdGNoOwogCSpzaXplICs9IHh0X2NvbXBhdF9tYXRjaF9vZmZzZXQobWF0Y2gpOwotCi0JKCppKSsrOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1jb21wYXRfcmVsZWFzZV9tYXRjaChzdHJ1Y3QgaXB0X2VudHJ5X21hdGNoICptLCB1bnNpZ25lZCBpbnQgKmkpCi17Ci0JaWYgKGkgJiYgKCppKS0tID09IDApCi0JCXJldHVybiAxOwotCi0JbW9kdWxlX3B1dChtLT51Lmtlcm5lbC5tYXRjaC0+bWUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1jb21wYXRfcmVsZWFzZV9lbnRyeShzdHJ1Y3QgY29tcGF0X2lwdF9lbnRyeSAqZSwgdW5zaWduZWQgaW50ICppKQorc3RhdGljIHZvaWQgY29tcGF0X3JlbGVhc2VfZW50cnkoc3RydWN0IGNvbXBhdF9pcHRfZW50cnkgKmUpCiB7CiAJc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKnQ7Ci0KLQlpZiAoaSAmJiAoKmkpLS0gPT0gMCkKLQkJcmV0dXJuIDE7CisJc3RydWN0IHh0X2VudHJ5X21hdGNoICplbWF0Y2g7CiAKIAkvKiBDbGVhbnVwIGFsbCBtYXRjaGVzICovCi0JQ09NUEFUX0lQVF9NQVRDSF9JVEVSQVRFKGUsIGNvbXBhdF9yZWxlYXNlX21hdGNoLCBOVUxMKTsKKwl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpCisJCW1vZHVsZV9wdXQoZW1hdGNoLT51Lmtlcm5lbC5tYXRjaC0+bWUpOwogCXQgPSBjb21wYXRfaXB0X2dldF90YXJnZXQoZSk7CiAJbW9kdWxlX3B1dCh0LT51Lmtlcm5lbC50YXJnZXQtPm1lKTsKLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAogY2hlY2tfY29tcGF0X2VudHJ5X3NpemVfYW5kX2hvb2tzKHN0cnVjdCBjb21wYXRfaXB0X2VudHJ5ICplLAogCQkJCSAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCiAJCQkJICB1bnNpZ25lZCBpbnQgKnNpemUsCi0JCQkJICB1bnNpZ25lZCBjaGFyICpiYXNlLAotCQkJCSAgdW5zaWduZWQgY2hhciAqbGltaXQsCi0JCQkJICB1bnNpZ25lZCBpbnQgKmhvb2tfZW50cmllcywKLQkJCQkgIHVuc2lnbmVkIGludCAqdW5kZXJmbG93cywKLQkJCQkgIHVuc2lnbmVkIGludCAqaSwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJhc2UsCisJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpsaW1pdCwKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGludCAqaG9va19lbnRyaWVzLAorCQkJCSAgY29uc3QgdW5zaWduZWQgaW50ICp1bmRlcmZsb3dzLAogCQkJCSAgY29uc3QgY2hhciAqbmFtZSkKIHsKKwlzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKmVtYXRjaDsKIAlzdHJ1Y3QgaXB0X2VudHJ5X3RhcmdldCAqdDsKIAlzdHJ1Y3QgeHRfdGFyZ2V0ICp0YXJnZXQ7CiAJdW5zaWduZWQgaW50IGVudHJ5X29mZnNldDsKQEAgLTE1NjksMTAgKzE1NDAsMTMgQEAKIAlvZmYgPSBzaXplb2Yoc3RydWN0IGlwdF9lbnRyeSkgLSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pcHRfZW50cnkpOwogCWVudHJ5X29mZnNldCA9ICh2b2lkICopZSAtICh2b2lkICopYmFzZTsKIAlqID0gMDsKLQlyZXQgPSBDT01QQVRfSVBUX01BVENIX0lURVJBVEUoZSwgY29tcGF0X2ZpbmRfY2FsY19tYXRjaCwgbmFtZSwKLQkJCQkgICAgICAgJmUtPmlwLCBlLT5jb21lZnJvbSwgJm9mZiwgJmopOwotCWlmIChyZXQgIT0gMCkKLQkJZ290byByZWxlYXNlX21hdGNoZXM7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKSB7CisJCXJldCA9IGNvbXBhdF9maW5kX2NhbGNfbWF0Y2goZW1hdGNoLCBuYW1lLAorCQkJCQkgICAgICZlLT5pcCwgZS0+Y29tZWZyb20sICZvZmYpOworCQlpZiAocmV0ICE9IDApCisJCQlnb3RvIHJlbGVhc2VfbWF0Y2hlczsKKwkJKytqOworCX0KIAogCXQgPSBjb21wYXRfaXB0X2dldF90YXJnZXQoZSk7CiAJdGFyZ2V0ID0gdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoeHRfZmluZF90YXJnZXQoQUZfSU5FVCwKQEAgLTE2MDQsMTQgKzE1NzgsMTYgQEAKIAkvKiBDbGVhciBjb3VudGVycyBhbmQgY29tZWZyb20gKi8KIAltZW1zZXQoJmUtPmNvdW50ZXJzLCAwLCBzaXplb2YoZS0+Y291bnRlcnMpKTsKIAllLT5jb21lZnJvbSA9IDA7Ci0KLQkoKmkpKys7CiAJcmV0dXJuIDA7CiAKIG91dDoKIAltb2R1bGVfcHV0KHQtPnUua2VybmVsLnRhcmdldC0+bWUpOwogcmVsZWFzZV9tYXRjaGVzOgotCUlQVF9NQVRDSF9JVEVSQVRFKGUsIGNvbXBhdF9yZWxlYXNlX21hdGNoLCAmaik7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKSB7CisJCWlmIChqLS0gPT0gMCkKKwkJCWJyZWFrOworCQltb2R1bGVfcHV0KGVtYXRjaC0+dS5rZXJuZWwubWF0Y2gtPm1lKTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTYyNSw2ICsxNjAxLDcgQEAKIAlzdHJ1Y3QgaXB0X2VudHJ5ICpkZTsKIAl1bnNpZ25lZCBpbnQgb3JpZ3NpemU7CiAJaW50IHJldCwgaDsKKwlzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKmVtYXRjaDsKIAogCXJldCA9IDA7CiAJb3JpZ3NpemUgPSAqc2l6ZTsKQEAgLTE2MzUsMTAgKzE2MTIsMTEgQEAKIAkqZHN0cHRyICs9IHNpemVvZihzdHJ1Y3QgaXB0X2VudHJ5KTsKIAkqc2l6ZSArPSBzaXplb2Yoc3RydWN0IGlwdF9lbnRyeSkgLSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pcHRfZW50cnkpOwogCi0JcmV0ID0gQ09NUEFUX0lQVF9NQVRDSF9JVEVSQVRFKGUsIHh0X2NvbXBhdF9tYXRjaF9mcm9tX3VzZXIsCi0JCQkJICAgICAgIGRzdHB0ciwgc2l6ZSk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKKwl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpIHsKKwkJcmV0ID0geHRfY29tcGF0X21hdGNoX2Zyb21fdXNlcihlbWF0Y2gsIGRzdHB0ciwgc2l6ZSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQogCWRlLT50YXJnZXRfb2Zmc2V0ID0gZS0+dGFyZ2V0X29mZnNldCAtIChvcmlnc2l6ZSAtICpzaXplKTsKIAl0ID0gY29tcGF0X2lwdF9nZXRfdGFyZ2V0KGUpOwogCXRhcmdldCA9IHQtPnUua2VybmVsLnRhcmdldDsKQEAgLTE2NTUsMzYgKzE2MzMsNDMgQEAKIH0KIAogc3RhdGljIGludAotY29tcGF0X2NoZWNrX2VudHJ5KHN0cnVjdCBpcHRfZW50cnkgKmUsIGNvbnN0IGNoYXIgKm5hbWUsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCitjb21wYXRfY2hlY2tfZW50cnkoc3RydWN0IGlwdF9lbnRyeSAqZSwgc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKQogeworCXN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqZW1hdGNoOwogCXN0cnVjdCB4dF9tdGNoa19wYXJhbSBtdHBhcjsKIAl1bnNpZ25lZCBpbnQgajsKLQlpbnQgcmV0OworCWludCByZXQgPSAwOwogCiAJaiA9IDA7CisJbXRwYXIubmV0CT0gbmV0OwogCW10cGFyLnRhYmxlICAgICA9IG5hbWU7CiAJbXRwYXIuZW50cnlpbmZvID0gJmUtPmlwOwogCW10cGFyLmhvb2tfbWFzayA9IGUtPmNvbWVmcm9tOwogCW10cGFyLmZhbWlseSAgICA9IE5GUFJPVE9fSVBWNDsKLQlyZXQgPSBJUFRfTUFUQ0hfSVRFUkFURShlLCBjaGVja19tYXRjaCwgJm10cGFyLCAmaik7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKSB7CisJCXJldCA9IGNoZWNrX21hdGNoKGVtYXRjaCwgJm10cGFyKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBjbGVhbnVwX21hdGNoZXM7CisJCSsrajsKKwl9CisKKwlyZXQgPSBjaGVja190YXJnZXQoZSwgbmV0LCBuYW1lKTsKIAlpZiAocmV0KQogCQlnb3RvIGNsZWFudXBfbWF0Y2hlczsKLQotCXJldCA9IGNoZWNrX3RhcmdldChlLCBuYW1lKTsKLQlpZiAocmV0KQotCQlnb3RvIGNsZWFudXBfbWF0Y2hlczsKLQotCSgqaSkrKzsKIAlyZXR1cm4gMDsKIAogIGNsZWFudXBfbWF0Y2hlczoKLQlJUFRfTUFUQ0hfSVRFUkFURShlLCBjbGVhbnVwX21hdGNoLCAmaik7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKSB7CisJCWlmIChqLS0gPT0gMCkKKwkJCWJyZWFrOworCQljbGVhbnVwX21hdGNoKGVtYXRjaCwgbmV0KTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludAotdHJhbnNsYXRlX2NvbXBhdF90YWJsZShjb25zdCBjaGFyICpuYW1lLAordHJhbnNsYXRlX2NvbXBhdF90YWJsZShzdHJ1Y3QgbmV0ICpuZXQsCisJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLAogCQkgICAgICAgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzLAogCQkgICAgICAgc3RydWN0IHh0X3RhYmxlX2luZm8gKipwaW5mbywKIAkJICAgICAgIHZvaWQgKipwZW50cnkwLApAQCAtMTY5Niw2ICsxNjgxLDggQEAKIAl1bnNpZ25lZCBpbnQgaSwgajsKIAlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywgKmluZm87CiAJdm9pZCAqcG9zLCAqZW50cnkwLCAqZW50cnkxOworCXN0cnVjdCBjb21wYXRfaXB0X2VudHJ5ICppdGVyMDsKKwlzdHJ1Y3QgaXB0X2VudHJ5ICppdGVyMTsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKIAlpbnQgcmV0OwogCkBAIC0xNzE0LDEzICsxNzAxLDE3IEBACiAJaiA9IDA7CiAJeHRfY29tcGF0X2xvY2soQUZfSU5FVCk7CiAJLyogV2FsayB0aHJvdWdoIGVudHJpZXMsIGNoZWNraW5nIG9mZnNldHMuICovCi0JcmV0ID0gQ09NUEFUX0lQVF9FTlRSWV9JVEVSQVRFKGVudHJ5MCwgdG90YWxfc2l6ZSwKLQkJCQkgICAgICAgY2hlY2tfY29tcGF0X2VudHJ5X3NpemVfYW5kX2hvb2tzLAotCQkJCSAgICAgICBpbmZvLCAmc2l6ZSwgZW50cnkwLAotCQkJCSAgICAgICBlbnRyeTAgKyB0b3RhbF9zaXplLAotCQkJCSAgICAgICBob29rX2VudHJpZXMsIHVuZGVyZmxvd3MsICZqLCBuYW1lKTsKLQlpZiAocmV0ICE9IDApCi0JCWdvdG8gb3V0X3VubG9jazsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIwLCBlbnRyeTAsIHRvdGFsX3NpemUpIHsKKwkJcmV0ID0gY2hlY2tfY29tcGF0X2VudHJ5X3NpemVfYW5kX2hvb2tzKGl0ZXIwLCBpbmZvLCAmc2l6ZSwKKwkJCQkJCQllbnRyeTAsCisJCQkJCQkJZW50cnkwICsgdG90YWxfc2l6ZSwKKwkJCQkJCQlob29rX2VudHJpZXMsCisJCQkJCQkJdW5kZXJmbG93cywKKwkJCQkJCQluYW1lKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBvdXRfdW5sb2NrOworCQkrK2o7CisJfQogCiAJcmV0ID0gLUVJTlZBTDsKIAlpZiAoaiAhPSBudW1iZXIpIHsKQEAgLTE3NTksOSArMTc1MCwxMiBAQAogCWVudHJ5MSA9IG5ld2luZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJcG9zID0gZW50cnkxOwogCXNpemUgPSB0b3RhbF9zaXplOwotCXJldCA9IENPTVBBVF9JUFRfRU5UUllfSVRFUkFURShlbnRyeTAsIHRvdGFsX3NpemUsCi0JCQkJICAgICAgIGNvbXBhdF9jb3B5X2VudHJ5X2Zyb21fdXNlciwKLQkJCQkgICAgICAgJnBvcywgJnNpemUsIG5hbWUsIG5ld2luZm8sIGVudHJ5MSk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyMCwgZW50cnkwLCB0b3RhbF9zaXplKSB7CisJCXJldCA9IGNvbXBhdF9jb3B5X2VudHJ5X2Zyb21fdXNlcihpdGVyMCwgJnBvcywgJnNpemUsCisJCQkJCQkgIG5hbWUsIG5ld2luZm8sIGVudHJ5MSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWJyZWFrOworCX0KIAl4dF9jb21wYXRfZmx1c2hfb2Zmc2V0cyhBRl9JTkVUKTsKIAl4dF9jb21wYXRfdW5sb2NrKEFGX0lORVQpOwogCWlmIChyZXQpCkBAIC0xNzcyLDEzICsxNzY2LDMyIEBACiAJCWdvdG8gZnJlZV9uZXdpbmZvOwogCiAJaSA9IDA7Ci0JcmV0ID0gSVBUX0VOVFJZX0lURVJBVEUoZW50cnkxLCBuZXdpbmZvLT5zaXplLCBjb21wYXRfY2hlY2tfZW50cnksCi0JCQkJbmFtZSwgJmkpOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlcjEsIGVudHJ5MSwgbmV3aW5mby0+c2l6ZSkgeworCQlyZXQgPSBjb21wYXRfY2hlY2tfZW50cnkoaXRlcjEsIG5ldCwgbmFtZSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWJyZWFrOworCQkrK2k7CisJfQogCWlmIChyZXQpIHsKKwkJLyoKKwkJICogVGhlIGZpcnN0IGkgbWF0Y2hlcyBuZWVkIGNsZWFudXBfZW50cnkgKGNhbGxzIC0+ZGVzdHJveSkKKwkJICogYmVjYXVzZSB0aGV5IGhhZCBjYWxsZWQgLT5jaGVjayBhbHJlYWR5LiBUaGUgb3RoZXIgai1pCisJCSAqIGVudHJpZXMgbmVlZCBvbmx5IHJlbGVhc2UuCisJCSAqLworCQlpbnQgc2tpcCA9IGk7CiAJCWogLT0gaTsKLQkJQ09NUEFUX0lQVF9FTlRSWV9JVEVSQVRFX0NPTlRJTlVFKGVudHJ5MCwgbmV3aW5mby0+c2l6ZSwgaSwKLQkJCQkJCSAgY29tcGF0X3JlbGVhc2VfZW50cnksICZqKTsKLQkJSVBUX0VOVFJZX0lURVJBVEUoZW50cnkxLCBuZXdpbmZvLT5zaXplLCBjbGVhbnVwX2VudHJ5LCAmaSk7CisJCXh0X2VudHJ5X2ZvcmVhY2goaXRlcjAsIGVudHJ5MCwgbmV3aW5mby0+c2l6ZSkgeworCQkJaWYgKHNraXAtLSA+IDApCisJCQkJY29udGludWU7CisJCQlpZiAoai0tID09IDApCisJCQkJYnJlYWs7CisJCQljb21wYXRfcmVsZWFzZV9lbnRyeShpdGVyMCk7CisJCX0KKwkJeHRfZW50cnlfZm9yZWFjaChpdGVyMSwgZW50cnkxLCBuZXdpbmZvLT5zaXplKSB7CisJCQlpZiAoaS0tID09IDApCisJCQkJYnJlYWs7CisJCQljbGVhbnVwX2VudHJ5KGl0ZXIxLCBuZXQpOworCQl9CiAJCXh0X2ZyZWVfdGFibGVfaW5mbyhuZXdpbmZvKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0xNzk2LDcgKzE4MDksMTEgQEAKIGZyZWVfbmV3aW5mbzoKIAl4dF9mcmVlX3RhYmxlX2luZm8obmV3aW5mbyk7CiBvdXQ6Ci0JQ09NUEFUX0lQVF9FTlRSWV9JVEVSQVRFKGVudHJ5MCwgdG90YWxfc2l6ZSwgY29tcGF0X3JlbGVhc2VfZW50cnksICZqKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIwLCBlbnRyeTAsIHRvdGFsX3NpemUpIHsKKwkJaWYgKGotLSA9PSAwKQorCQkJYnJlYWs7CisJCWNvbXBhdF9yZWxlYXNlX2VudHJ5KGl0ZXIwKTsKKwl9CiAJcmV0dXJuIHJldDsKIG91dF91bmxvY2s6CiAJeHRfY29tcGF0X2ZsdXNoX29mZnNldHMoQUZfSU5FVCk7CkBAIC0xODExLDYgKzE4MjgsNyBAQAogCXN0cnVjdCBjb21wYXRfaXB0X3JlcGxhY2UgdG1wOwogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvOwogCXZvaWQgKmxvY19jcHVfZW50cnk7CisJc3RydWN0IGlwdF9lbnRyeSAqaXRlcjsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmdG1wLCB1c2VyLCBzaXplb2YodG1wKSkgIT0gMCkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xODMzLDcgKzE4NTEsNyBAQAogCQlnb3RvIGZyZWVfbmV3aW5mbzsKIAl9CiAKLQlyZXQgPSB0cmFuc2xhdGVfY29tcGF0X3RhYmxlKHRtcC5uYW1lLCB0bXAudmFsaWRfaG9va3MsCisJcmV0ID0gdHJhbnNsYXRlX2NvbXBhdF90YWJsZShuZXQsIHRtcC5uYW1lLCB0bXAudmFsaWRfaG9va3MsCiAJCQkJICAgICAmbmV3aW5mbywgJmxvY19jcHVfZW50cnksIHRtcC5zaXplLAogCQkJCSAgICAgdG1wLm51bV9lbnRyaWVzLCB0bXAuaG9va19lbnRyeSwKIAkJCQkgICAgIHRtcC51bmRlcmZsb3cpOwpAQCAtMTg0OSw3ICsxODY3LDggQEAKIAlyZXR1cm4gMDsKIAogIGZyZWVfbmV3aW5mb191bnRyYW5zOgotCUlQVF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksIG5ld2luZm8tPnNpemUsIGNsZWFudXBfZW50cnksIE5VTEwpOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgbG9jX2NwdV9lbnRyeSwgbmV3aW5mby0+c2l6ZSkKKwkJY2xlYW51cF9lbnRyeShpdGVyLCBuZXQpOwogIGZyZWVfbmV3aW5mbzoKIAl4dF9mcmVlX3RhYmxlX2luZm8obmV3aW5mbyk7CiAJcmV0dXJuIHJldDsKQEAgLTE4OTgsNiArMTkxNyw3IEBACiAJaW50IHJldCA9IDA7CiAJY29uc3Qgdm9pZCAqbG9jX2NwdV9lbnRyeTsKIAl1bnNpZ25lZCBpbnQgaSA9IDA7CisJc3RydWN0IGlwdF9lbnRyeSAqaXRlcjsKIAogCWNvdW50ZXJzID0gYWxsb2NfY291bnRlcnModGFibGUpOwogCWlmIChJU19FUlIoY291bnRlcnMpKQpAQCAtMTkxMCw5ICsxOTMwLDEyIEBACiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJcG9zID0gdXNlcnB0cjsKIAlzaXplID0gdG90YWxfc2l6ZTsKLQlyZXQgPSBJUFRfRU5UUllfSVRFUkFURShsb2NfY3B1X2VudHJ5LCB0b3RhbF9zaXplLAotCQkJCWNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIsCi0JCQkJJnBvcywgJnNpemUsIGNvdW50ZXJzLCAmaSk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCB0b3RhbF9zaXplKSB7CisJCXJldCA9IGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIoaXRlciwgJnBvcywKKwkJCQkJCSZzaXplLCBjb3VudGVycywgaSsrKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJYnJlYWs7CisJfQogCiAJdmZyZWUoY291bnRlcnMpOwogCXJldHVybiByZXQ7CkBAIC0yMDg2LDExICsyMTA5LDcgQEAKIAlsb2NfY3B1X2VudHJ5ID0gbmV3aW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAltZW1jcHkobG9jX2NwdV9lbnRyeSwgcmVwbC0+ZW50cmllcywgcmVwbC0+c2l6ZSk7CiAKLQlyZXQgPSB0cmFuc2xhdGVfdGFibGUodGFibGUtPm5hbWUsIHRhYmxlLT52YWxpZF9ob29rcywKLQkJCSAgICAgIG5ld2luZm8sIGxvY19jcHVfZW50cnksIHJlcGwtPnNpemUsCi0JCQkgICAgICByZXBsLT5udW1fZW50cmllcywKLQkJCSAgICAgIHJlcGwtPmhvb2tfZW50cnksCi0JCQkgICAgICByZXBsLT51bmRlcmZsb3cpOworCXJldCA9IHRyYW5zbGF0ZV90YWJsZShuZXQsIG5ld2luZm8sIGxvY19jcHVfZW50cnksIHJlcGwpOwogCWlmIChyZXQgIT0gMCkKIAkJZ290byBvdXRfZnJlZTsKIApAQCAtMjEwOCwxNyArMjEyNywxOSBAQAogCXJldHVybiBFUlJfUFRSKHJldCk7CiB9CiAKLXZvaWQgaXB0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IHh0X3RhYmxlICp0YWJsZSkKK3ZvaWQgaXB0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKQogewogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlOwogCXZvaWQgKmxvY19jcHVfZW50cnk7CiAJc3RydWN0IG1vZHVsZSAqdGFibGVfb3duZXIgPSB0YWJsZS0+bWU7CisJc3RydWN0IGlwdF9lbnRyeSAqaXRlcjsKIAogCXByaXZhdGUgPSB4dF91bnJlZ2lzdGVyX3RhYmxlKHRhYmxlKTsKIAogCS8qIERlY3JlYXNlIG1vZHVsZSB1c2FnZSBjb3VudHMgYW5kIGZyZWUgcmVzb3VyY2VzICovCiAJbG9jX2NwdV9lbnRyeSA9IHByaXZhdGUtPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07Ci0JSVBUX0VOVFJZX0lURVJBVEUobG9jX2NwdV9lbnRyeSwgcHJpdmF0ZS0+c2l6ZSwgY2xlYW51cF9lbnRyeSwgTlVMTCk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X2VudHJ5LCBwcml2YXRlLT5zaXplKQorCQljbGVhbnVwX2VudHJ5KGl0ZXIsIG5ldCk7CiAJaWYgKHByaXZhdGUtPm51bWJlciA+IHByaXZhdGUtPmluaXRpYWxfZW50cmllcykKIAkJbW9kdWxlX3B1dCh0YWJsZV9vd25lcik7CiAJeHRfZnJlZV90YWJsZV9pbmZvKHByaXZhdGUpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKaW5kZXggNDBjYTJkMi4uMDg4NmY5NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCkBAIC01NjAsOCArNTYwLDcgQEAKIAogc3RhdGljIHZvaWQgKmNsdXN0ZXJpcF9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzLCBsb2ZmX3QgKnBvcykKIHsKLQljb25zdCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IHMtPnByaXZhdGU7Ci0Jc3RydWN0IGNsdXN0ZXJpcF9jb25maWcgKmMgPSBwZGUtPmRhdGE7CisJc3RydWN0IGNsdXN0ZXJpcF9jb25maWcgKmMgPSBzLT5wcml2YXRlOwogCXVuc2lnbmVkIGludCB3ZWlnaHQ7CiAJdV9pbnQzMl90IGxvY2FsX25vZGVzOwogCXN0cnVjdCBjbHVzdGVyaXBfc2VxX3Bvc2l0aW9uICppZHg7CkBAIC02MzIsMTAgKzYzMSw5IEBACiAKIAlpZiAoIXJldCkgewogCQlzdHJ1Y3Qgc2VxX2ZpbGUgKnNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IFBERShpbm9kZSk7Ci0JCXN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjID0gcGRlLT5kYXRhOworCQlzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYyA9IFBERShpbm9kZSktPmRhdGE7CiAKLQkJc2YtPnByaXZhdGUgPSBwZGU7CisJCXNmLT5wcml2YXRlID0gYzsKIAogCQljbHVzdGVyaXBfY29uZmlnX2dldChjKTsKIAl9CkBAIC02NDUsOCArNjQzLDcgQEAKIAogc3RhdGljIGludCBjbHVzdGVyaXBfcHJvY19yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlID0gUERFKGlub2RlKTsKLQlzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYyA9IHBkZS0+ZGF0YTsKKwlzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYyA9IFBERShpbm9kZSktPmRhdGE7CiAJaW50IHJldDsKIAogCXJldCA9IHNlcV9yZWxlYXNlKGlub2RlLCBmaWxlKTsKQEAgLTY2MCwxMCArNjU3LDkgQEAKIHN0YXRpYyBzc2l6ZV90IGNsdXN0ZXJpcF9wcm9jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqaW5wdXQsCiAJCQkJc2l6ZV90IHNpemUsIGxvZmZfdCAqb2ZzKQogeworCXN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpLT5kYXRhOwogI2RlZmluZSBQUk9DX1dSSVRFTEVOCTEwCiAJY2hhciBidWZmZXJbUFJPQ19XUklURUxFTisxXTsKLQljb25zdCBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKLQlzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqYyA9IHBkZS0+ZGF0YTsKIAl1bnNpZ25lZCBsb25nIG5vZGVudW07CiAKIAlpZiAoY29weV9mcm9tX3VzZXIoYnVmZmVyLCBpbnB1dCwgUFJPQ19XUklURUxFTikpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1VMT0cuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCmluZGV4IDM5OTA2MWMuLjA5YTVkM2YgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVUxPRy5jCkBAIC0zMzgsNyArMzM4LDcgQEAKIAljaGFyCQlwcmVmaXhbVUxPR19QUkVGSVhfTEVOXTsKIH07CiAKLXN0YXRpYyB2b2lkIHVsb2dfdGdfY29tcGF0X2Zyb21fdXNlcih2b2lkICpkc3QsIHZvaWQgKnNyYykKK3N0YXRpYyB2b2lkIHVsb2dfdGdfY29tcGF0X2Zyb21fdXNlcih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKIHsKIAljb25zdCBzdHJ1Y3QgY29tcGF0X2lwdF91bG9nX2luZm8gKmNsID0gc3JjOwogCXN0cnVjdCBpcHRfdWxvZ19pbmZvIGwgPSB7CkBAIC0zNTEsNyArMzUxLDcgQEAKIAltZW1jcHkoZHN0LCAmbCwgc2l6ZW9mKGwpKTsKIH0KIAotc3RhdGljIGludCB1bG9nX3RnX2NvbXBhdF90b191c2VyKHZvaWQgX191c2VyICpkc3QsIHZvaWQgKnNyYykKK3N0YXRpYyBpbnQgdWxvZ190Z19jb21wYXRfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiB7CiAJY29uc3Qgc3RydWN0IGlwdF91bG9nX2luZm8gKmwgPSBzcmM7CiAJc3RydWN0IGNvbXBhdF9pcHRfdWxvZ19pbmZvIGNsID0gewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfZmlsdGVyLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9maWx0ZXIuYwppbmRleCBkZjU2NmNiLi5jOGRjOTgwIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9maWx0ZXIuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9maWx0ZXIuYwpAQCAtMjMsMTA0ICsyMywzMiBAQAogCQkJICAgICgxIDw8IE5GX0lORVRfRk9SV0FSRCkgfCBcCiAJCQkgICAgKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpKQogCi1zdGF0aWMgc3RydWN0Ci17Ci0Jc3RydWN0IGlwdF9yZXBsYWNlIHJlcGw7Ci0Jc3RydWN0IGlwdF9zdGFuZGFyZCBlbnRyaWVzWzNdOwotCXN0cnVjdCBpcHRfZXJyb3IgdGVybTsKLX0gaW5pdGlhbF90YWJsZSBfX25ldF9pbml0ZGF0YSA9IHsKLQkucmVwbCA9IHsKLQkJLm5hbWUgPSAiZmlsdGVyIiwKLQkJLnZhbGlkX2hvb2tzID0gRklMVEVSX1ZBTElEX0hPT0tTLAotCQkubnVtX2VudHJpZXMgPSA0LAotCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDMgKyBzaXplb2Yoc3RydWN0IGlwdF9lcnJvciksCi0JCS5ob29rX2VudHJ5ID0gewotCQkJW05GX0lORVRfTE9DQUxfSU5dID0gMCwKLQkJCVtORl9JTkVUX0ZPUldBUkRdID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpLAotCQkJW05GX0lORVRfTE9DQUxfT1VUXSA9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDIsCi0JCX0sCi0JCS51bmRlcmZsb3cgPSB7Ci0JCQlbTkZfSU5FVF9MT0NBTF9JTl0gPSAwLAotCQkJW05GX0lORVRfRk9SV0FSRF0gPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCi0JCQlbTkZfSU5FVF9MT0NBTF9PVVRdID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpICogMiwKLQkJfSwKLQl9LAotCS5lbnRyaWVzID0gewotCQlJUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBMT0NBTF9JTiAqLwotCQlJUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBGT1JXQVJEICovCi0JCUlQVF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIExPQ0FMX09VVCAqLwotCX0sCi0JLnRlcm0gPSBJUFRfRVJST1JfSU5JVCwJCQkvKiBFUlJPUiAqLwotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfZmlsdGVyID0gewogCS5uYW1lCQk9ICJmaWx0ZXIiLAogCS52YWxpZF9ob29rcwk9IEZJTFRFUl9WQUxJRF9IT09LUywKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IE5GUFJPVE9fSVBWNCwKKwkucHJpb3JpdHkJPSBORl9JUF9QUklfRklMVEVSLAogfTsKIAotLyogVGhlIHdvcmsgY29tZXMgaW4gaGVyZSBmcm9tIG5ldGZpbHRlci5jLiAqLwogc3RhdGljIHVuc2lnbmVkIGludAotaXB0X2xvY2FsX2luX2hvb2sodW5zaWduZWQgaW50IGhvb2ssCi0JCSAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0JCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLQkJICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK2lwdGFibGVfZmlsdGVyX2hvb2sodW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCSAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKIHsKLQlyZXR1cm4gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKLQkJCSAgICBkZXZfbmV0KGluKS0+aXB2NC5pcHRhYmxlX2ZpbHRlcik7Ci19CisJY29uc3Qgc3RydWN0IG5ldCAqbmV0OwogCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1pcHRfaG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCSBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKLXsKLQlyZXR1cm4gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKLQkJCSAgICBkZXZfbmV0KGluKS0+aXB2NC5pcHRhYmxlX2ZpbHRlcik7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWlwdF9sb2NhbF9vdXRfaG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCQkgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKLXsKLQkvKiByb290IGlzIHBsYXlpbmcgd2l0aCByYXcgc29ja2V0cy4gKi8KLQlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGlwaGRyKSB8fAotCSAgICBpcF9oZHJsZW4oc2tiKSA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpKQorCWlmIChob29rID09IE5GX0lORVRfTE9DQUxfT1VUICYmCisJICAgIChza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpIHx8CisJICAgICBpcF9oZHJsZW4oc2tiKSA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkKKwkJLyogcm9vdCBpcyBwbGF5aW5nIHdpdGggcmF3IHNvY2tldHMuICovCiAJCXJldHVybiBORl9BQ0NFUFQ7Ci0JcmV0dXJuIGlwdF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCi0JCQkgICAgZGV2X25ldChvdXQpLT5pcHY0LmlwdGFibGVfZmlsdGVyKTsKKworCW5ldCA9IGRldl9uZXQoKGluICE9IE5VTEwpID8gaW4gOiBvdXQpOworCXJldHVybiBpcHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LCBuZXQtPmlwdjQuaXB0YWJsZV9maWx0ZXIpOwogfQogCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdF9vcHNbXSBfX3JlYWRfbW9zdGx5ID0gewotCXsKLQkJLmhvb2sJCT0gaXB0X2xvY2FsX2luX2hvb2ssCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKLQkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAotCQkucHJpb3JpdHkJPSBORl9JUF9QUklfRklMVEVSLAotCX0sCi0JewotCQkuaG9vawkJPSBpcHRfaG9vaywKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gTkZQUk9UT19JUFY0LAotCQkuaG9va251bQk9IE5GX0lORVRfRk9SV0FSRCwKLQkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX0ZJTFRFUiwKLQl9LAotCXsKLQkJLmhvb2sJCT0gaXB0X2xvY2FsX291dF9ob29rLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBORlBST1RPX0lQVjQsCi0JCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9PVVQsCi0JCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9GSUxURVIsCi0JfSwKLX07CitzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzICpmaWx0ZXJfb3BzIF9fcmVhZF9tb3N0bHk7CiAKIC8qIERlZmF1bHQgdG8gZm9yd2FyZCBiZWNhdXNlIEkgZ290IHRvbyBtdWNoIG1haWwgYWxyZWFkeS4gKi8KIHN0YXRpYyBpbnQgZm9yd2FyZCA9IE5GX0FDQ0VQVDsKQEAgLTEyOCw5ICs1NiwxOCBAQAogCiBzdGF0aWMgaW50IF9fbmV0X2luaXQgaXB0YWJsZV9maWx0ZXJfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewotCS8qIFJlZ2lzdGVyIHRhYmxlICovCisJc3RydWN0IGlwdF9yZXBsYWNlICpyZXBsOworCisJcmVwbCA9IGlwdF9hbGxvY19pbml0aWFsX3RhYmxlKCZwYWNrZXRfZmlsdGVyKTsKKwlpZiAocmVwbCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKiBFbnRyeSAxIGlzIHRoZSBGT1JXQVJEIGhvb2sgKi8KKwkoKHN0cnVjdCBpcHRfc3RhbmRhcmQgKilyZXBsLT5lbnRyaWVzKVsxXS50YXJnZXQudmVyZGljdCA9CisJCS1mb3J3YXJkIC0gMTsKKwogCW5ldC0+aXB2NC5pcHRhYmxlX2ZpbHRlciA9Ci0JCWlwdF9yZWdpc3Rlcl90YWJsZShuZXQsICZwYWNrZXRfZmlsdGVyLCAmaW5pdGlhbF90YWJsZS5yZXBsKTsKKwkJaXB0X3JlZ2lzdGVyX3RhYmxlKG5ldCwgJnBhY2tldF9maWx0ZXIsIHJlcGwpOworCWtmcmVlKHJlcGwpOwogCWlmIChJU19FUlIobmV0LT5pcHY0LmlwdGFibGVfZmlsdGVyKSkKIAkJcmV0dXJuIFBUUl9FUlIobmV0LT5pcHY0LmlwdGFibGVfZmlsdGVyKTsKIAlyZXR1cm4gMDsKQEAgLTEzOCw3ICs3NSw3IEBACiAKIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXB0YWJsZV9maWx0ZXJfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewotCWlwdF91bnJlZ2lzdGVyX3RhYmxlKG5ldC0+aXB2NC5pcHRhYmxlX2ZpbHRlcik7CisJaXB0X3VucmVnaXN0ZXJfdGFibGUobmV0LCBuZXQtPmlwdjQuaXB0YWJsZV9maWx0ZXIpOwogfQogCiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwdGFibGVfZmlsdGVyX25ldF9vcHMgPSB7CkBAIC0xNTUsMTcgKzkyLDE2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIEVudHJ5IDEgaXMgdGhlIEZPUldBUkQgaG9vayAqLwotCWluaXRpYWxfdGFibGUuZW50cmllc1sxXS50YXJnZXQudmVyZGljdCA9IC1mb3J3YXJkIC0gMTsKLQogCXJldCA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdGFibGVfZmlsdGVyX25ldF9vcHMpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OwogCiAJLyogUmVnaXN0ZXIgaG9va3MgKi8KLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcHRfb3BzLCBBUlJBWV9TSVpFKGlwdF9vcHMpKTsKLQlpZiAocmV0IDwgMCkKKwlmaWx0ZXJfb3BzID0geHRfaG9va19saW5rKCZwYWNrZXRfZmlsdGVyLCBpcHRhYmxlX2ZpbHRlcl9ob29rKTsKKwlpZiAoSVNfRVJSKGZpbHRlcl9vcHMpKSB7CisJCXJldCA9IFBUUl9FUlIoZmlsdGVyX29wcyk7CiAJCWdvdG8gY2xlYW51cF90YWJsZTsKKwl9CiAKIAlyZXR1cm4gcmV0OwogCkBAIC0xNzYsNyArMTEyLDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGlwdGFibGVfZmlsdGVyX2Zpbmkodm9pZCkKIHsKLQluZl91bnJlZ2lzdGVyX2hvb2tzKGlwdF9vcHMsIEFSUkFZX1NJWkUoaXB0X29wcykpOworCXh0X2hvb2tfdW5saW5rKCZwYWNrZXRfZmlsdGVyLCBmaWx0ZXJfb3BzKTsKIAl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdGFibGVfZmlsdGVyX25ldF9vcHMpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCmluZGV4IGZhZTc4YzMuLmI5YjgzNDYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX21hbmdsZS5jCkBAIC0yNywxMDEgKzI3LDE2IEBACiAJCQkgICAgKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpIHwgXAogCQkJICAgICgxIDw8IE5GX0lORVRfUE9TVF9ST1VUSU5HKSkKIAotLyogT3VjaCAtIGZpdmUgZGlmZmVyZW50IGhvb2tzPyBNYXliZSB0aGlzIHNob3VsZCBiZSBhIGNvbmZpZyBvcHRpb24uLi4uLiAtLSBCQyAqLwotc3RhdGljIGNvbnN0IHN0cnVjdAotewotCXN0cnVjdCBpcHRfcmVwbGFjZSByZXBsOwotCXN0cnVjdCBpcHRfc3RhbmRhcmQgZW50cmllc1s1XTsKLQlzdHJ1Y3QgaXB0X2Vycm9yIHRlcm07Ci19IGluaXRpYWxfdGFibGUgX19uZXRfaW5pdGRhdGEgPSB7Ci0JLnJlcGwgPSB7Ci0JCS5uYW1lID0gIm1hbmdsZSIsCi0JCS52YWxpZF9ob29rcyA9IE1BTkdMRV9WQUxJRF9IT09LUywKLQkJLm51bV9lbnRyaWVzID0gNiwKLQkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiA1ICsgc2l6ZW9mKHN0cnVjdCBpcHRfZXJyb3IpLAotCQkuaG9va19lbnRyeSA9IHsKLQkJCVtORl9JTkVUX1BSRV9ST1VUSU5HXSAJPSAwLAotCQkJW05GX0lORVRfTE9DQUxfSU5dIAk9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSwKLQkJCVtORl9JTkVUX0ZPUldBUkRdIAk9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDIsCi0JCQlbTkZfSU5FVF9MT0NBTF9PVVRdIAk9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDMsCi0JCQlbTkZfSU5FVF9QT1NUX1JPVVRJTkddIAk9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDQsCi0JCX0sCi0JCS51bmRlcmZsb3cgPSB7Ci0JCQlbTkZfSU5FVF9QUkVfUk9VVElOR10gCT0gMCwKLQkJCVtORl9JTkVUX0xPQ0FMX0lOXSAJPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCi0JCQlbTkZfSU5FVF9GT1JXQVJEXSAJPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiAyLAotCQkJW05GX0lORVRfTE9DQUxfT1VUXSAJPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiAzLAotCQkJW05GX0lORVRfUE9TVF9ST1VUSU5HXQk9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDQsCi0JCX0sCi0JfSwKLQkuZW50cmllcyA9IHsKLQkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogUFJFX1JPVVRJTkcgKi8KLQkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfSU4gKi8KLQkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogRk9SV0FSRCAqLwotCQlJUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBMT0NBTF9PVVQgKi8KLQkJSVBUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogUE9TVF9ST1VUSU5HICovCi0JfSwKLQkudGVybSA9IElQVF9FUlJPUl9JTklULAkJCS8qIEVSUk9SICovCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9tYW5nbGVyID0gewogCS5uYW1lCQk9ICJtYW5nbGUiLAogCS52YWxpZF9ob29rcwk9IE1BTkdMRV9WQUxJRF9IT09LUywKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IE5GUFJPVE9fSVBWNCwKKwkucHJpb3JpdHkJPSBORl9JUF9QUklfTUFOR0xFLAogfTsKIAotLyogVGhlIHdvcmsgY29tZXMgaW4gaGVyZSBmcm9tIG5ldGZpbHRlci5jLiAqLwogc3RhdGljIHVuc2lnbmVkIGludAotaXB0X3ByZV9yb3V0aW5nX2hvb2sodW5zaWduZWQgaW50IGhvb2ssCi0JCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0JCSAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLQkJICAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKLXsKLQlyZXR1cm4gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKLQkJCSAgICBkZXZfbmV0KGluKS0+aXB2NC5pcHRhYmxlX21hbmdsZSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWlwdF9wb3N0X3JvdXRpbmdfaG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQkgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCQkgICAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKLXsKLQlyZXR1cm4gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKLQkJCSAgICBkZXZfbmV0KG91dCktPmlwdjQuaXB0YWJsZV9tYW5nbGUpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1pcHRfbG9jYWxfaW5faG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLQkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCQkgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQotewotCXJldHVybiBpcHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAotCQkJICAgIGRldl9uZXQoaW4pLT5pcHY0LmlwdGFibGVfbWFuZ2xlKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludAotaXB0X2ZvcndhcmRfaG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCSBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKLXsKLQlyZXR1cm4gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKLQkJCSAgICBkZXZfbmV0KGluKS0+aXB2NC5pcHRhYmxlX21hbmdsZSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWlwdF9sb2NhbF9ob29rKHVuc2lnbmVkIGludCBob29rLAotCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0JCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0JCSAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQoraXB0X21hbmdsZV9vdXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCkKIHsKIAl1bnNpZ25lZCBpbnQgcmV0OwogCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoOwpAQCAtMTQxLDcgKzU2LDcgQEAKIAlkYWRkciA9IGlwaC0+ZGFkZHI7CiAJdG9zID0gaXBoLT50b3M7CiAKLQlyZXQgPSBpcHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAorCXJldCA9IGlwdF9kb190YWJsZShza2IsIE5GX0lORVRfTE9DQUxfT1VULCBOVUxMLCBvdXQsCiAJCQkgICBkZXZfbmV0KG91dCktPmlwdjQuaXB0YWJsZV9tYW5nbGUpOwogCS8qIFJlcm91dGUgZm9yIEFOWSBjaGFuZ2UuICovCiAJaWYgKHJldCAhPSBORl9EUk9QICYmIHJldCAhPSBORl9TVE9MRU4gJiYgcmV0ICE9IE5GX1FVRVVFKSB7CkBAIC0xNTgsNDkgKzczLDM2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyBpcHRfb3BzW10gX19yZWFkX21vc3RseSA9IHsKLQl7Ci0JCS5ob29rCQk9IGlwdF9wcmVfcm91dGluZ19ob29rLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBORlBST1RPX0lQVjQsCi0JCS5ob29rbnVtCT0gTkZfSU5FVF9QUkVfUk9VVElORywKLQkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX01BTkdMRSwKLQl9LAotCXsKLQkJLmhvb2sJCT0gaXB0X2xvY2FsX2luX2hvb2ssCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKLQkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX0lOLAotCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTUFOR0xFLAotCX0sCi0JewotCQkuaG9vawkJPSBpcHRfZm9yd2FyZF9ob29rLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBORlBST1RPX0lQVjQsCi0JCS5ob29rbnVtCT0gTkZfSU5FVF9GT1JXQVJELAotCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTUFOR0xFLAotCX0sCi0JewotCQkuaG9vawkJPSBpcHRfbG9jYWxfaG9vaywKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gTkZQUk9UT19JUFY0LAotCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfT1VULAotCQkucHJpb3JpdHkJPSBORl9JUF9QUklfTUFOR0xFLAotCX0sCi0JewotCQkuaG9vawkJPSBpcHRfcG9zdF9yb3V0aW5nX2hvb2ssCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKLQkJLmhvb2tudW0JPSBORl9JTkVUX1BPU1RfUk9VVElORywKLQkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX01BTkdMRSwKLQl9LAotfTsKKy8qIFRoZSB3b3JrIGNvbWVzIGluIGhlcmUgZnJvbSBuZXRmaWx0ZXIuYy4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2lwdGFibGVfbWFuZ2xlX2hvb2sodW5zaWduZWQgaW50IGhvb2ssCisJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCSAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJICAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK3sKKwlpZiAoaG9vayA9PSBORl9JTkVUX0xPQ0FMX09VVCkKKwkJcmV0dXJuIGlwdF9tYW5nbGVfb3V0KHNrYiwgb3V0KTsKKwlpZiAoaG9vayA9PSBORl9JTkVUX1BPU1RfUk9VVElORykKKwkJcmV0dXJuIGlwdF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCisJCQkJICAgIGRldl9uZXQob3V0KS0+aXB2NC5pcHRhYmxlX21hbmdsZSk7CisJLyogUFJFUk9VVElORy9JTlBVVC9GT1JXQVJEOiAqLworCXJldHVybiBpcHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAorCQkJICAgIGRldl9uZXQoaW4pLT5pcHY0LmlwdGFibGVfbWFuZ2xlKTsKK30KKworc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyAqbWFuZ2xlX29wcyBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgaW50IF9fbmV0X2luaXQgaXB0YWJsZV9tYW5nbGVfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewotCS8qIFJlZ2lzdGVyIHRhYmxlICovCisJc3RydWN0IGlwdF9yZXBsYWNlICpyZXBsOworCisJcmVwbCA9IGlwdF9hbGxvY19pbml0aWFsX3RhYmxlKCZwYWNrZXRfbWFuZ2xlcik7CisJaWYgKHJlcGwgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJbmV0LT5pcHY0LmlwdGFibGVfbWFuZ2xlID0KLQkJaXB0X3JlZ2lzdGVyX3RhYmxlKG5ldCwgJnBhY2tldF9tYW5nbGVyLCAmaW5pdGlhbF90YWJsZS5yZXBsKTsKKwkJaXB0X3JlZ2lzdGVyX3RhYmxlKG5ldCwgJnBhY2tldF9tYW5nbGVyLCByZXBsKTsKKwlrZnJlZShyZXBsKTsKIAlpZiAoSVNfRVJSKG5ldC0+aXB2NC5pcHRhYmxlX21hbmdsZSkpCiAJCXJldHVybiBQVFJfRVJSKG5ldC0+aXB2NC5pcHRhYmxlX21hbmdsZSk7CiAJcmV0dXJuIDA7CkBAIC0yMDgsNyArMTEwLDcgQEAKIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcHRhYmxlX21hbmdsZV9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JaXB0X3VucmVnaXN0ZXJfdGFibGUobmV0LT5pcHY0LmlwdGFibGVfbWFuZ2xlKTsKKwlpcHRfdW5yZWdpc3Rlcl90YWJsZShuZXQsIG5ldC0+aXB2NC5pcHRhYmxlX21hbmdsZSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXB0YWJsZV9tYW5nbGVfbmV0X29wcyA9IHsKQEAgLTIyNSw5ICsxMjcsMTEgQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qIFJlZ2lzdGVyIGhvb2tzICovCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXB0X29wcywgQVJSQVlfU0laRShpcHRfb3BzKSk7Ci0JaWYgKHJldCA8IDApCisJbWFuZ2xlX29wcyA9IHh0X2hvb2tfbGluaygmcGFja2V0X21hbmdsZXIsIGlwdGFibGVfbWFuZ2xlX2hvb2spOworCWlmIChJU19FUlIobWFuZ2xlX29wcykpIHsKKwkJcmV0ID0gUFRSX0VSUihtYW5nbGVfb3BzKTsKIAkJZ290byBjbGVhbnVwX3RhYmxlOworCX0KIAogCXJldHVybiByZXQ7CiAKQEAgLTIzOCw3ICsxNDIsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXB0YWJsZV9tYW5nbGVfZmluaSh2b2lkKQogewotCW5mX3VucmVnaXN0ZXJfaG9va3MoaXB0X29wcywgQVJSQVlfU0laRShpcHRfb3BzKSk7CisJeHRfaG9va191bmxpbmsoJnBhY2tldF9tYW5nbGVyLCBtYW5nbGVfb3BzKTsKIAl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdGFibGVfbWFuZ2xlX25ldF9vcHMpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9yYXcuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCmluZGV4IDk5M2VkYzIuLjA2ZmI5ZDEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3Jhdy5jCkBAIC05LDkwICs5LDQ0IEBACiAKICNkZWZpbmUgUkFXX1ZBTElEX0hPT0tTICgoMSA8PCBORl9JTkVUX1BSRV9ST1VUSU5HKSB8ICgxIDw8IE5GX0lORVRfTE9DQUxfT1VUKSkKIAotc3RhdGljIGNvbnN0IHN0cnVjdAotewotCXN0cnVjdCBpcHRfcmVwbGFjZSByZXBsOwotCXN0cnVjdCBpcHRfc3RhbmRhcmQgZW50cmllc1syXTsKLQlzdHJ1Y3QgaXB0X2Vycm9yIHRlcm07Ci19IGluaXRpYWxfdGFibGUgX19uZXRfaW5pdGRhdGEgPSB7Ci0JLnJlcGwgPSB7Ci0JCS5uYW1lID0gInJhdyIsCi0JCS52YWxpZF9ob29rcyA9IFJBV19WQUxJRF9IT09LUywKLQkJLm51bV9lbnRyaWVzID0gMywKLQkJLnNpemUgPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkgKiAyICsgc2l6ZW9mKHN0cnVjdCBpcHRfZXJyb3IpLAotCQkuaG9va19lbnRyeSA9IHsKLQkJCVtORl9JTkVUX1BSRV9ST1VUSU5HXSA9IDAsCi0JCQlbTkZfSU5FVF9MT0NBTF9PVVRdID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpCi0JCX0sCi0JCS51bmRlcmZsb3cgPSB7Ci0JCQlbTkZfSU5FVF9QUkVfUk9VVElOR10gPSAwLAotCQkJW05GX0lORVRfTE9DQUxfT1VUXSAgPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCkKLQkJfSwKLQl9LAotCS5lbnRyaWVzID0gewotCQlJUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBQUkVfUk9VVElORyAqLwotCQlJUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBMT0NBTF9PVVQgKi8KLQl9LAotCS50ZXJtID0gSVBUX0VSUk9SX0lOSVQsCQkJLyogRVJST1IgKi8KLX07Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgcGFja2V0X3JhdyA9IHsKIAkubmFtZSA9ICJyYXciLAogCS52YWxpZF9ob29rcyA9ICBSQVdfVkFMSURfSE9PS1MsCiAJLm1lID0gVEhJU19NT0RVTEUsCiAJLmFmID0gTkZQUk9UT19JUFY0LAorCS5wcmlvcml0eSA9IE5GX0lQX1BSSV9SQVcsCiB9OwogCiAvKiBUaGUgd29yayBjb21lcyBpbiBoZXJlIGZyb20gbmV0ZmlsdGVyLmMuICovCiBzdGF0aWMgdW5zaWduZWQgaW50Ci1pcHRfaG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCSBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK2lwdGFibGVfcmF3X2hvb2sodW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCSBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKIHsKLQlyZXR1cm4gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKLQkJCSAgICBkZXZfbmV0KGluKS0+aXB2NC5pcHRhYmxlX3Jhdyk7Ci19CisJY29uc3Qgc3RydWN0IG5ldCAqbmV0OwogCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1pcHRfbG9jYWxfaG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkgICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCSAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCSAgICAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKLXsKLQkvKiByb290IGlzIHBsYXlpbmcgd2l0aCByYXcgc29ja2V0cy4gKi8KLQlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGlwaGRyKSB8fAotCSAgICBpcF9oZHJsZW4oc2tiKSA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpKQorCWlmIChob29rID09IE5GX0lORVRfTE9DQUxfT1VUICYmIAorCSAgICAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGlwaGRyKSB8fAorCSAgICAgaXBfaGRybGVuKHNrYikgPCBzaXplb2Yoc3RydWN0IGlwaGRyKSkpCisJCS8qIHJvb3QgaXMgcGxheWluZyB3aXRoIHJhdyBzb2NrZXRzLiAqLwogCQlyZXR1cm4gTkZfQUNDRVBUOwotCXJldHVybiBpcHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAotCQkJICAgIGRldl9uZXQob3V0KS0+aXB2NC5pcHRhYmxlX3Jhdyk7CisKKwluZXQgPSBkZXZfbmV0KChpbiAhPSBOVUxMKSA/IGluIDogb3V0KTsKKwlyZXR1cm4gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwgbmV0LT5pcHY0LmlwdGFibGVfcmF3KTsKIH0KIAotLyogJ3JhdycgaXMgdGhlIHZlcnkgZmlyc3QgdGFibGUuICovCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwdF9vcHNbXSBfX3JlYWRfbW9zdGx5ID0gewotCXsKLQkJLmhvb2sgPSBpcHRfaG9vaywKLQkJLnBmID0gTkZQUk9UT19JUFY0LAotCQkuaG9va251bSA9IE5GX0lORVRfUFJFX1JPVVRJTkcsCi0JCS5wcmlvcml0eSA9IE5GX0lQX1BSSV9SQVcsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi0JewotCQkuaG9vayA9IGlwdF9sb2NhbF9ob29rLAotCQkucGYgPSBORlBST1RPX0lQVjQsCi0JCS5ob29rbnVtID0gTkZfSU5FVF9MT0NBTF9PVVQsCi0JCS5wcmlvcml0eSA9IE5GX0lQX1BSSV9SQVcsCi0JCS5vd25lciA9IFRISVNfTU9EVUxFLAotCX0sCi19Oworc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyAqcmF3dGFibGVfb3BzIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcHRhYmxlX3Jhd19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JLyogUmVnaXN0ZXIgdGFibGUgKi8KKwlzdHJ1Y3QgaXB0X3JlcGxhY2UgKnJlcGw7CisKKwlyZXBsID0gaXB0X2FsbG9jX2luaXRpYWxfdGFibGUoJnBhY2tldF9yYXcpOworCWlmIChyZXBsID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCW5ldC0+aXB2NC5pcHRhYmxlX3JhdyA9Ci0JCWlwdF9yZWdpc3Rlcl90YWJsZShuZXQsICZwYWNrZXRfcmF3LCAmaW5pdGlhbF90YWJsZS5yZXBsKTsKKwkJaXB0X3JlZ2lzdGVyX3RhYmxlKG5ldCwgJnBhY2tldF9yYXcsIHJlcGwpOworCWtmcmVlKHJlcGwpOwogCWlmIChJU19FUlIobmV0LT5pcHY0LmlwdGFibGVfcmF3KSkKIAkJcmV0dXJuIFBUUl9FUlIobmV0LT5pcHY0LmlwdGFibGVfcmF3KTsKIAlyZXR1cm4gMDsKQEAgLTEwMCw3ICs1NCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXB0YWJsZV9yYXdfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewotCWlwdF91bnJlZ2lzdGVyX3RhYmxlKG5ldC0+aXB2NC5pcHRhYmxlX3Jhdyk7CisJaXB0X3VucmVnaXN0ZXJfdGFibGUobmV0LCBuZXQtPmlwdjQuaXB0YWJsZV9yYXcpOwogfQogCiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGlwdGFibGVfcmF3X25ldF9vcHMgPSB7CkBAIC0xMTcsOSArNzEsMTEgQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qIFJlZ2lzdGVyIGhvb2tzICovCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXB0X29wcywgQVJSQVlfU0laRShpcHRfb3BzKSk7Ci0JaWYgKHJldCA8IDApCisJcmF3dGFibGVfb3BzID0geHRfaG9va19saW5rKCZwYWNrZXRfcmF3LCBpcHRhYmxlX3Jhd19ob29rKTsKKwlpZiAoSVNfRVJSKHJhd3RhYmxlX29wcykpIHsKKwkJcmV0ID0gUFRSX0VSUihyYXd0YWJsZV9vcHMpOwogCQlnb3RvIGNsZWFudXBfdGFibGU7CisJfQogCiAJcmV0dXJuIHJldDsKIApAQCAtMTMwLDcgKzg2LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGlwdGFibGVfcmF3X2Zpbmkodm9pZCkKIHsKLQluZl91bnJlZ2lzdGVyX2hvb2tzKGlwdF9vcHMsIEFSUkFZX1NJWkUoaXB0X29wcykpOworCXh0X2hvb2tfdW5saW5rKCZwYWNrZXRfcmF3LCByYXd0YWJsZV9vcHMpOwogCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXB0YWJsZV9yYXdfbmV0X29wcyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3NlY3VyaXR5LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9zZWN1cml0eS5jCmluZGV4IDNiZDNkNjMuLmNjZTJmNjQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRhYmxlX3NlY3VyaXR5LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfc2VjdXJpdHkuYwpAQCAtMjcsMTA5ICsyNyw0NCBAQAogCQkJCSgxIDw8IE5GX0lORVRfRk9SV0FSRCkgfCBcCiAJCQkJKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QKLXsKLQlzdHJ1Y3QgaXB0X3JlcGxhY2UgcmVwbDsKLQlzdHJ1Y3QgaXB0X3N0YW5kYXJkIGVudHJpZXNbM107Ci0Jc3RydWN0IGlwdF9lcnJvciB0ZXJtOwotfSBpbml0aWFsX3RhYmxlIF9fbmV0X2luaXRkYXRhID0gewotCS5yZXBsID0gewotCQkubmFtZSA9ICJzZWN1cml0eSIsCi0JCS52YWxpZF9ob29rcyA9IFNFQ1VSSVRZX1ZBTElEX0hPT0tTLAotCQkubnVtX2VudHJpZXMgPSA0LAotCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDMgKyBzaXplb2Yoc3RydWN0IGlwdF9lcnJvciksCi0JCS5ob29rX2VudHJ5ID0gewotCQkJW05GX0lORVRfTE9DQUxfSU5dIAk9IDAsCi0JCQlbTkZfSU5FVF9GT1JXQVJEXSAJPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCi0JCQlbTkZfSU5FVF9MT0NBTF9PVVRdIAk9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDIsCi0JCX0sCi0JCS51bmRlcmZsb3cgPSB7Ci0JCQlbTkZfSU5FVF9MT0NBTF9JTl0gCT0gMCwKLQkJCVtORl9JTkVUX0ZPUldBUkRdIAk9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSwKLQkJCVtORl9JTkVUX0xPQ0FMX09VVF0gCT0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpICogMiwKLQkJfSwKLQl9LAotCS5lbnRyaWVzID0gewotCQlJUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBMT0NBTF9JTiAqLwotCQlJUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBGT1JXQVJEICovCi0JCUlQVF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIExPQ0FMX09VVCAqLwotCX0sCi0JLnRlcm0gPSBJUFRfRVJST1JfSU5JVCwJCQkvKiBFUlJPUiAqLwotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCB4dF90YWJsZSBzZWN1cml0eV90YWJsZSA9IHsKIAkubmFtZQkJPSAic2VjdXJpdHkiLAogCS52YWxpZF9ob29rcwk9IFNFQ1VSSVRZX1ZBTElEX0hPT0tTLAogCS5tZQkJPSBUSElTX01PRFVMRSwKIAkuYWYJCT0gTkZQUk9UT19JUFY0LAorCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9TRUNVUklUWSwKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQKLWlwdF9sb2NhbF9pbl9ob29rKHVuc2lnbmVkIGludCBob29rLAotCQkgIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQkgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0JCSAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCitpcHRhYmxlX3NlY3VyaXR5X2hvb2sodW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKKwkJICAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJICAgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7Ci0JcmV0dXJuIGlwdF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCi0JCQkgICAgZGV2X25ldChpbiktPmlwdjQuaXB0YWJsZV9zZWN1cml0eSk7Ci19CisJY29uc3Qgc3RydWN0IG5ldCAqbmV0OwogCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1pcHRfZm9yd2FyZF9ob29rKHVuc2lnbmVkIGludCBob29rLAotCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLQkJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0JCSBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKLXsKLQlyZXR1cm4gaXB0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKLQkJCSAgICBkZXZfbmV0KGluKS0+aXB2NC5pcHRhYmxlX3NlY3VyaXR5KTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludAotaXB0X2xvY2FsX291dF9ob29rKHVuc2lnbmVkIGludCBob29rLAotCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0JCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0JCSAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQotewotCS8qIFNvbWVib2R5IGlzIHBsYXlpbmcgd2l0aCByYXcgc29ja2V0cy4gKi8KLQlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGlwaGRyKSB8fAotCSAgICBpcF9oZHJsZW4oc2tiKSA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpKQorCWlmIChob29rID09IE5GX0lORVRfTE9DQUxfT1VUICYmCisJICAgIChza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpIHx8CisJICAgICBpcF9oZHJsZW4oc2tiKSA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkKKwkJLyogU29tZWJvZHkgaXMgcGxheWluZyB3aXRoIHJhdyBzb2NrZXRzLiAqLwogCQlyZXR1cm4gTkZfQUNDRVBUOwotCXJldHVybiBpcHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAotCQkJICAgIGRldl9uZXQob3V0KS0+aXB2NC5pcHRhYmxlX3NlY3VyaXR5KTsKKworCW5ldCA9IGRldl9uZXQoKGluICE9IE5VTEwpID8gaW4gOiBvdXQpOworCXJldHVybiBpcHRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LCBuZXQtPmlwdjQuaXB0YWJsZV9zZWN1cml0eSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXB0X29wc1tdIF9fcmVhZF9tb3N0bHkgPSB7Ci0JewotCQkuaG9vawkJPSBpcHRfbG9jYWxfaW5faG9vaywKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gTkZQUk9UT19JUFY0LAotCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfSU4sCi0JCS5wcmlvcml0eQk9IE5GX0lQX1BSSV9TRUNVUklUWSwKLQl9LAotCXsKLQkJLmhvb2sJCT0gaXB0X2ZvcndhcmRfaG9vaywKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gTkZQUk9UT19JUFY0LAotCQkuaG9va251bQk9IE5GX0lORVRfRk9SV0FSRCwKLQkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX1NFQ1VSSVRZLAotCX0sCi0JewotCQkuaG9vawkJPSBpcHRfbG9jYWxfb3V0X2hvb2ssCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IE5GUFJPVE9fSVBWNCwKLQkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKLQkJLnByaW9yaXR5CT0gTkZfSVBfUFJJX1NFQ1VSSVRZLAotCX0sCi19Oworc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyAqc2VjdGJsX29wcyBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgaW50IF9fbmV0X2luaXQgaXB0YWJsZV9zZWN1cml0eV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JbmV0LT5pcHY0LmlwdGFibGVfc2VjdXJpdHkgPQotCQlpcHRfcmVnaXN0ZXJfdGFibGUobmV0LCAmc2VjdXJpdHlfdGFibGUsICZpbml0aWFsX3RhYmxlLnJlcGwpOworCXN0cnVjdCBpcHRfcmVwbGFjZSAqcmVwbDsKIAorCXJlcGwgPSBpcHRfYWxsb2NfaW5pdGlhbF90YWJsZSgmc2VjdXJpdHlfdGFibGUpOworCWlmIChyZXBsID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW5ldC0+aXB2NC5pcHRhYmxlX3NlY3VyaXR5ID0KKwkJaXB0X3JlZ2lzdGVyX3RhYmxlKG5ldCwgJnNlY3VyaXR5X3RhYmxlLCByZXBsKTsKKwlrZnJlZShyZXBsKTsKIAlpZiAoSVNfRVJSKG5ldC0+aXB2NC5pcHRhYmxlX3NlY3VyaXR5KSkKIAkJcmV0dXJuIFBUUl9FUlIobmV0LT5pcHY0LmlwdGFibGVfc2VjdXJpdHkpOwogCkBAIC0xMzgsNyArNzMsNyBAQAogCiBzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwdGFibGVfc2VjdXJpdHlfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewotCWlwdF91bnJlZ2lzdGVyX3RhYmxlKG5ldC0+aXB2NC5pcHRhYmxlX3NlY3VyaXR5KTsKKwlpcHRfdW5yZWdpc3Rlcl90YWJsZShuZXQsIG5ldC0+aXB2NC5pcHRhYmxlX3NlY3VyaXR5KTsKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcHRhYmxlX3NlY3VyaXR5X25ldF9vcHMgPSB7CkBAIC0xNTQsOSArODksMTEgQEAKICAgICAgICAgaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcHRfb3BzLCBBUlJBWV9TSVpFKGlwdF9vcHMpKTsKLQlpZiAocmV0IDwgMCkKKwlzZWN0Ymxfb3BzID0geHRfaG9va19saW5rKCZzZWN1cml0eV90YWJsZSwgaXB0YWJsZV9zZWN1cml0eV9ob29rKTsKKwlpZiAoSVNfRVJSKHNlY3RibF9vcHMpKSB7CisJCXJldCA9IFBUUl9FUlIoc2VjdGJsX29wcyk7CiAJCWdvdG8gY2xlYW51cF90YWJsZTsKKwl9CiAKIAlyZXR1cm4gcmV0OwogCkBAIC0xNjcsNyArMTA0LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGlwdGFibGVfc2VjdXJpdHlfZmluaSh2b2lkKQogewotCW5mX3VucmVnaXN0ZXJfaG9va3MoaXB0X29wcywgQVJSQVlfU0laRShpcHRfb3BzKSk7CisJeHRfaG9va191bmxpbmsoJnNlY3VyaXR5X3RhYmxlLCBzZWN0Ymxfb3BzKTsKIAl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwdGFibGVfc2VjdXJpdHlfbmV0X29wcyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2NC5jCmluZGV4IGQxZWEzOGEuLjJiYjFmODcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY0LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjQuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY0L25mX2Nvbm50cmFja19pcHY0Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmg+CkBAIC0yNjYsNyArMjY3LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaCA9IG5mX2Nvbm50cmFja19maW5kX2dldChzb2NrX25ldChzayksICZ0dXBsZSk7CisJaCA9IG5mX2Nvbm50cmFja19maW5kX2dldChzb2NrX25ldChzayksIE5GX0NUX0RFRkFVTFRfWk9ORSwgJnR1cGxlKTsKIAlpZiAoaCkgewogCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwogCQlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwppbmRleCA3YWZkMzliLi43NDA0YmRlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXAuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3R1cGxlLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja196b25lcy5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbG9nLmg+CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY3RfaWNtcF90aW1lb3V0IF9fcmVhZF9tb3N0bHkgPSAzMCpIWjsKQEAgLTExNCwxMyArMTE1LDE0IEBACiAKIC8qIFJldHVybnMgY29ubnRyYWNrIGlmIGl0IGRlYWx0IHdpdGggSUNNUCwgYW5kIGZpbGxlZCBpbiBza2IgZmllbGRzICovCiBzdGF0aWMgaW50Ci1pY21wX2Vycm9yX21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAoraWNtcF9lcnJvcl9tZXNzYWdlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsIHN0cnVjdCBza19idWZmICpza2IsCiAJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCiAJCSB1bnNpZ25lZCBpbnQgaG9va251bSkKIHsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIGlubmVydHVwbGUsIG9yaWd0dXBsZTsKIAljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX2w0cHJvdG8gKmlubmVycHJvdG87CiAJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOworCXUxNiB6b25lID0gdG1wbCA/IG5mX2N0X3pvbmUodG1wbCkgOiBORl9DVF9ERUZBVUxUX1pPTkU7CiAKIAlORl9DVF9BU1NFUlQoc2tiLT5uZmN0ID09IE5VTEwpOwogCkBAIC0xNDYsNyArMTQ4LDcgQEAKIAogCSpjdGluZm8gPSBJUF9DVF9SRUxBVEVEOwogCi0JaCA9IG5mX2Nvbm50cmFja19maW5kX2dldChuZXQsICZpbm5lcnR1cGxlKTsKKwloID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KG5ldCwgem9uZSwgJmlubmVydHVwbGUpOwogCWlmICghaCkgewogCQlwcl9kZWJ1ZygiaWNtcF9lcnJvcl9tZXNzYWdlOiBubyBtYXRjaFxuIik7CiAJCXJldHVybiAtTkZfQUNDRVBUOwpAQCAtMTYzLDcgKzE2NSw4IEBACiAKIC8qIFNtYWxsIGFuZCBtb2RpZmllZCB2ZXJzaW9uIG9mIGljbXBfcmN2ICovCiBzdGF0aWMgaW50Ci1pY21wX2Vycm9yKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCitpY21wX2Vycm9yKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsCisJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLCB1X2ludDhfdCBwZiwgdW5zaWduZWQgaW50IGhvb2tudW0pCiB7CiAJY29uc3Qgc3RydWN0IGljbXBoZHIgKmljbXBoOwpAQCAtMjA4LDcgKzIxMSw3IEBACiAJICAgIGljbXBoLT50eXBlICE9IElDTVBfUkVESVJFQ1QpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKLQlyZXR1cm4gaWNtcF9lcnJvcl9tZXNzYWdlKG5ldCwgc2tiLCBjdGluZm8sIGhvb2tudW0pOworCXJldHVybiBpY21wX2Vycm9yX21lc3NhZ2UobmV0LCB0bXBsLCBza2IsIGN0aW5mbywgaG9va251bSk7CiB9CiAKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9kZWZyYWdfaXB2NC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2RlZnJhZ19pcHY0LmMKaW5kZXggMzMxZWFkMy4uY2I3NjNhZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2RlZnJhZ19pcHY0LmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX2RlZnJhZ19pcHY0LmMKQEAgLTE3LDYgKzE3LDEwIEBACiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2JyaWRnZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY0L25mX2RlZnJhZ19pcHY0Lmg+CisjaWYgZGVmaW5lZChDT05GSUdfTkZfQ09OTlRSQUNLKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0tfTU9EVUxFKQorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja196b25lcy5oPgogCiAvKiBSZXR1cm5zIG5ldyBza19idWZmLCBvciBOVUxMICovCiBzdGF0aWMgaW50IG5mX2N0X2lwdjRfZ2F0aGVyX2ZyYWdzKHN0cnVjdCBza19idWZmICpza2IsIHVfaW50MzJfdCB1c2VyKQpAQCAtMzgsMTUgKzQyLDIyIEBACiBzdGF0aWMgZW51bSBpcF9kZWZyYWdfdXNlcnMgbmZfY3RfZGVmcmFnX3VzZXIodW5zaWduZWQgaW50IGhvb2tudW0sCiAJCQkJCSAgICAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJdTE2IHpvbmUgPSBORl9DVF9ERUZBVUxUX1pPTkU7CisKKyNpZiBkZWZpbmVkKENPTkZJR19ORl9DT05OVFJBQ0spIHx8IGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NT0RVTEUpCisJaWYgKHNrYi0+bmZjdCkKKwkJem9uZSA9IG5mX2N0X3pvbmUoKHN0cnVjdCBuZl9jb25uICopc2tiLT5uZmN0KTsKKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0JSSURHRV9ORVRGSUxURVIKIAlpZiAoc2tiLT5uZl9icmlkZ2UgJiYKIAkgICAgc2tiLT5uZl9icmlkZ2UtPm1hc2sgJiBCUk5GX05GX0JSSURHRV9QUkVST1VUSU5HKQotCQlyZXR1cm4gSVBfREVGUkFHX0NPTk5UUkFDS19CUklER0VfSU47CisJCXJldHVybiBJUF9ERUZSQUdfQ09OTlRSQUNLX0JSSURHRV9JTiArIHpvbmU7CiAjZW5kaWYKIAlpZiAoaG9va251bSA9PSBORl9JTkVUX1BSRV9ST1VUSU5HKQotCQlyZXR1cm4gSVBfREVGUkFHX0NPTk5UUkFDS19JTjsKKwkJcmV0dXJuIElQX0RFRlJBR19DT05OVFJBQ0tfSU4gKyB6b25lOwogCWVsc2UKLQkJcmV0dXJuIElQX0RFRlJBR19DT05OVFJBQ0tfT1VUOworCQlyZXR1cm4gSVBfREVGUkFHX0NPTk5UUkFDS19PVVQgKyB6b25lOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50IGlwdjRfY29ubnRyYWNrX2RlZnJhZyh1bnNpZ25lZCBpbnQgaG9va251bSwKQEAgLTU5LDcgKzcwLDcgQEAKICNpZiAhZGVmaW5lZChDT05GSUdfTkZfTkFUKSAmJiAhZGVmaW5lZChDT05GSUdfTkZfTkFUX01PRFVMRSkKIAkvKiBQcmV2aW91c2x5IHNlZW4gKGxvb3BiYWNrKT8gIElnbm9yZS4gIERvIHRoaXMgYmVmb3JlCiAJICAgZnJhZ21lbnQgY2hlY2suICovCi0JaWYgKHNrYi0+bmZjdCkKKwlpZiAoc2tiLT5uZmN0ICYmICFuZl9jdF9pc190ZW1wbGF0ZSgoc3RydWN0IG5mX2Nvbm4gKilza2ItPm5mY3QpKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKaW5kZXggMjYwNjZhMi4uNDU5NTI4MSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDRwcm90by5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3pvbmVzLmg+CiAKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobmZfbmF0X2xvY2spOwogCkBAIC02OSwxMyArNzAsMTQgQEAKIAogLyogV2Uga2VlcCBhbiBleHRyYSBoYXNoIGZvciBlYWNoIGNvbm50cmFjaywgZm9yIGZhc3Qgc2VhcmNoaW5nLiAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLWhhc2hfYnlfc3JjKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCitoYXNoX2J5X3NyYyhjb25zdCBzdHJ1Y3QgbmV0ICpuZXQsIHUxNiB6b25lLAorCSAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKIAl1bnNpZ25lZCBpbnQgaGFzaDsKIAogCS8qIE9yaWdpbmFsIHNyYywgdG8gZW5zdXJlIHdlIG1hcCBpdCBjb25zaXN0ZW50bHkgaWYgcG9zcy4gKi8KIAloYXNoID0gamhhc2hfM3dvcmRzKChfX2ZvcmNlIHUzMil0dXBsZS0+c3JjLnUzLmlwLAotCQkJICAgIChfX2ZvcmNlIHUzMil0dXBsZS0+c3JjLnUuYWxsLAorCQkJICAgIChfX2ZvcmNlIHUzMil0dXBsZS0+c3JjLnUuYWxsIF4gem9uZSwKIAkJCSAgICB0dXBsZS0+ZHN0LnByb3RvbnVtLCAwKTsKIAlyZXR1cm4gKCh1NjQpaGFzaCAqIG5ldC0+aXB2NC5uYXRfaHRhYmxlX3NpemUpID4+IDMyOwogfQpAQCAtMTM5LDEyICsxNDEsMTIgQEAKIAogLyogT25seSBjYWxsZWQgZm9yIFNSQyBtYW5pcCAqLwogc3RhdGljIGludAotZmluZF9hcHByb3ByaWF0ZV9zcmMoc3RydWN0IG5ldCAqbmV0LAorZmluZF9hcHByb3ByaWF0ZV9zcmMoc3RydWN0IG5ldCAqbmV0LCB1MTYgem9uZSwKIAkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKIAkJICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpyZXN1bHQsCiAJCSAgICAgY29uc3Qgc3RydWN0IG5mX25hdF9yYW5nZSAqcmFuZ2UpCiB7Ci0JdW5zaWduZWQgaW50IGggPSBoYXNoX2J5X3NyYyhuZXQsIHR1cGxlKTsKKwl1bnNpZ25lZCBpbnQgaCA9IGhhc2hfYnlfc3JjKG5ldCwgem9uZSwgdHVwbGUpOwogCWNvbnN0IHN0cnVjdCBuZl9jb25uX25hdCAqbmF0OwogCWNvbnN0IHN0cnVjdCBuZl9jb25uICpjdDsKIAljb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKQEAgLTE1Miw3ICsxNTQsNyBAQAogCXJjdV9yZWFkX2xvY2soKTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UobmF0LCBuLCAmbmV0LT5pcHY0Lm5hdF9ieXNvdXJjZVtoXSwgYnlzb3VyY2UpIHsKIAkJY3QgPSBuYXQtPmN0OwotCQlpZiAoc2FtZV9zcmMoY3QsIHR1cGxlKSkgeworCQlpZiAoc2FtZV9zcmMoY3QsIHR1cGxlKSAmJiBuZl9jdF96b25lKGN0KSA9PSB6b25lKSB7CiAJCQkvKiBDb3B5IHNvdXJjZSBwYXJ0IGZyb20gcmVwbHkgdHVwbGUuICovCiAJCQluZl9jdF9pbnZlcnRfdHVwbGVwcihyZXN1bHQsCiAJCQkJICAgICAgICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUpOwpAQCAtMTc1LDcgKzE3Nyw3IEBACiAgICB0aGUgaXAgd2l0aCB0aGUgbG93ZXN0IHNyYy1pcC9kc3QtaXAvcHJvdG8gdXNhZ2UuCiAqLwogc3RhdGljIHZvaWQKLWZpbmRfYmVzdF9pcHNfcHJvdG8oc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCitmaW5kX2Jlc3RfaXBzX3Byb3RvKHUxNiB6b25lLCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSwKIAkJICAgIGNvbnN0IHN0cnVjdCBuZl9uYXRfcmFuZ2UgKnJhbmdlLAogCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAogCQkgICAgZW51bSBuZl9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUpCkBAIC0yMDksNyArMjExLDcgQEAKIAltYXhpcCA9IG50b2hsKHJhbmdlLT5tYXhfaXApOwogCWogPSBqaGFzaF8yd29yZHMoKF9fZm9yY2UgdTMyKXR1cGxlLT5zcmMudTMuaXAsCiAJCQkgcmFuZ2UtPmZsYWdzICYgSVBfTkFUX1JBTkdFX1BFUlNJU1RFTlQgPwotCQkJCTAgOiAoX19mb3JjZSB1MzIpdHVwbGUtPmRzdC51My5pcCwgMCk7CisJCQkJMCA6IChfX2ZvcmNlIHUzMil0dXBsZS0+ZHN0LnUzLmlwIF4gem9uZSwgMCk7CiAJaiA9ICgodTY0KWogKiAobWF4aXAgLSBtaW5pcCArIDEpKSA+PiAzMjsKIAkqdmFyX2lwcCA9IGh0b25sKG1pbmlwICsgaik7CiB9CkBAIC0yMjksNiArMjMxLDcgQEAKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBuZl9jdF9uZXQoY3QpOwogCWNvbnN0IHN0cnVjdCBuZl9uYXRfcHJvdG9jb2wgKnByb3RvOworCXUxNiB6b25lID0gbmZfY3Rfem9uZShjdCk7CiAKIAkvKiAxKSBJZiB0aGlzIHNyY2lwL3Byb3RvL3NyYy1wcm90by1wYXJ0IGlzIGN1cnJlbnRseSBtYXBwZWQsCiAJICAgYW5kIHRoYXQgc2FtZSBtYXBwaW5nIGdpdmVzIGEgdW5pcXVlIHR1cGxlIHdpdGhpbiB0aGUgZ2l2ZW4KQEAgLTIzOSw3ICsyNDIsNyBAQAogCSAgIG1hbmlwcyBub3QgYW4gaXNzdWUuICAqLwogCWlmIChtYW5pcHR5cGUgPT0gSVBfTkFUX01BTklQX1NSQyAmJgogCSAgICAhKHJhbmdlLT5mbGFncyAmIElQX05BVF9SQU5HRV9QUk9UT19SQU5ET00pKSB7Ci0JCWlmIChmaW5kX2FwcHJvcHJpYXRlX3NyYyhuZXQsIG9yaWdfdHVwbGUsIHR1cGxlLCByYW5nZSkpIHsKKwkJaWYgKGZpbmRfYXBwcm9wcmlhdGVfc3JjKG5ldCwgem9uZSwgb3JpZ190dXBsZSwgdHVwbGUsIHJhbmdlKSkgewogCQkJcHJfZGVidWcoImdldF91bmlxdWVfdHVwbGU6IEZvdW5kIGN1cnJlbnQgc3JjIG1hcFxuIik7CiAJCQlpZiAoIW5mX25hdF91c2VkX3R1cGxlKHR1cGxlLCBjdCkpCiAJCQkJcmV0dXJuOwpAQCAtMjQ5LDcgKzI1Miw3IEBACiAJLyogMikgU2VsZWN0IHRoZSBsZWFzdC11c2VkIElQL3Byb3RvIGNvbWJpbmF0aW9uIGluIHRoZSBnaXZlbgogCSAgIHJhbmdlLiAqLwogCSp0dXBsZSA9ICpvcmlnX3R1cGxlOwotCWZpbmRfYmVzdF9pcHNfcHJvdG8odHVwbGUsIHJhbmdlLCBjdCwgbWFuaXB0eXBlKTsKKwlmaW5kX2Jlc3RfaXBzX3Byb3RvKHpvbmUsIHR1cGxlLCByYW5nZSwgY3QsIG1hbmlwdHlwZSk7CiAKIAkvKiAzKSBUaGUgcGVyLXByb3RvY29sIHBhcnQgb2YgdGhlIG1hbmlwIGlzIG1hZGUgdG8gbWFwIGludG8KIAkgICB0aGUgcmFuZ2UgdG8gbWFrZSBhIHVuaXF1ZSB0dXBsZS4gKi8KQEAgLTMyNyw3ICszMzAsOCBAQAogCWlmIChoYXZlX3RvX2hhc2gpIHsKIAkJdW5zaWduZWQgaW50IHNyY2hhc2g7CiAKLQkJc3JjaGFzaCA9IGhhc2hfYnlfc3JjKG5ldCwgJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSk7CisJCXNyY2hhc2ggPSBoYXNoX2J5X3NyYyhuZXQsIG5mX2N0X3pvbmUoY3QpLAorCQkJCSAgICAgICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUpOwogCQlzcGluX2xvY2tfYmgoJm5mX25hdF9sb2NrKTsKIAkJLyogbmZfY29ubnRyYWNrX2FsdGVyX3JlcGx5IG1pZ2h0IHJlLWFsbG9jYXRlIGV4bnRlbnNpb24gYWVyYSAqLwogCQluYXQgPSBuZmN0X25hdChjdCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2Z0cC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9mdHAuYwppbmRleCBhMWQ1ZDU4Li44NmUwZTg0ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9mdHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2Z0cC5jCkBAIC0yNyw3NiArMjcsMjkgQEAKIAogLyogRklYTUU6IFRpbWUgb3V0PyAtLVJSICovCiAKLXN0YXRpYyBpbnQKLW1hbmdsZV9yZmM5NTlfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgICAgX19iZTMyIG5ld2lwLAotCQkgICAgIHVfaW50MTZfdCBwb3J0LAotCQkgICAgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwKLQkJICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sCi0JCSAgICAgc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKQorc3RhdGljIGludCBuZl9uYXRfZnRwX2ZtdF9jbWQoZW51bSBuZl9jdF9mdHBfdHlwZSB0eXBlLAorCQkJICAgICAgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuLAorCQkJICAgICAgX19iZTMyIGFkZHIsIHUxNiBwb3J0KQogewotCWNoYXIgYnVmZmVyW3NpemVvZigibm5uLG5ubixubm4sbm5uLG5ubixubm4iKV07CisJc3dpdGNoICh0eXBlKSB7CisJY2FzZSBORl9DVF9GVFBfUE9SVDoKKwljYXNlIE5GX0NUX0ZUUF9QQVNWOgorCQlyZXR1cm4gc25wcmludGYoYnVmZmVyLCBidWZsZW4sICIldSwldSwldSwldSwldSwldSIsCisJCQkJKCh1bnNpZ25lZCBjaGFyICopJmFkZHIpWzBdLAorCQkJCSgodW5zaWduZWQgY2hhciAqKSZhZGRyKVsxXSwKKwkJCQkoKHVuc2lnbmVkIGNoYXIgKikmYWRkcilbMl0sCisJCQkJKCh1bnNpZ25lZCBjaGFyICopJmFkZHIpWzNdLAorCQkJCXBvcnQgPj4gOCwKKwkJCQlwb3J0ICYgMHhGRik7CisJY2FzZSBORl9DVF9GVFBfRVBSVDoKKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZmZlciwgYnVmbGVuLCAifDF8JXBJNHwldXwiLCAmYWRkciwgcG9ydCk7CisJY2FzZSBORl9DVF9GVFBfRVBTVjoKKwkJcmV0dXJuIHNucHJpbnRmKGJ1ZmZlciwgYnVmbGVuLCAifHx8JXV8IiwgcG9ydCk7CisJfQogCi0Jc3ByaW50ZihidWZmZXIsICIldSwldSwldSwldSwldSwldSIsCi0JCU5JUFFVQUQobmV3aXApLCBwb3J0Pj44LCBwb3J0JjB4RkYpOwotCi0JcHJfZGVidWcoImNhbGxpbmcgbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0XG4iKTsKLQotCXJldHVybiBuZl9uYXRfbWFuZ2xlX3RjcF9wYWNrZXQoc2tiLCBjdCwgY3RpbmZvLCBtYXRjaG9mZiwKLQkJCQkJbWF0Y2hsZW4sIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOworCXJldHVybiAwOwogfQogCi0vKiB8MXwxMzIuMjM1LjEuMnw2Mjc1fCAqLwotc3RhdGljIGludAotbWFuZ2xlX2VwcnRfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgIF9fYmUzMiBuZXdpcCwKLQkJICAgdV9pbnQxNl90IHBvcnQsCi0JCSAgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwKLQkJICAgdW5zaWduZWQgaW50IG1hdGNobGVuLAotCQkgICBzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCSAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKQotewotCWNoYXIgYnVmZmVyW3NpemVvZigifDF8MjU1LjI1NS4yNTUuMjU1fDY1NTM1fCIpXTsKLQotCXNwcmludGYoYnVmZmVyLCAifDF8JXUuJXUuJXUuJXV8JXV8IiwgTklQUVVBRChuZXdpcCksIHBvcnQpOwotCi0JcHJfZGVidWcoImNhbGxpbmcgbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0XG4iKTsKLQotCXJldHVybiBuZl9uYXRfbWFuZ2xlX3RjcF9wYWNrZXQoc2tiLCBjdCwgY3RpbmZvLCBtYXRjaG9mZiwKLQkJCQkJbWF0Y2hsZW4sIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlcikpOwotfQotCi0vKiB8MXwxMzIuMjM1LjEuMnw2Mjc1fCAqLwotc3RhdGljIGludAotbWFuZ2xlX2Vwc3ZfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgIF9fYmUzMiBuZXdpcCwKLQkJICAgdV9pbnQxNl90IHBvcnQsCi0JCSAgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwKLQkJICAgdW5zaWduZWQgaW50IG1hdGNobGVuLAotCQkgICBzdHJ1Y3QgbmZfY29ubiAqY3QsCi0JCSAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKQotewotCWNoYXIgYnVmZmVyW3NpemVvZigifHx8NjU1MzV8IildOwotCi0Jc3ByaW50ZihidWZmZXIsICJ8fHwldXwiLCBwb3J0KTsKLQotCXByX2RlYnVnKCJjYWxsaW5nIG5mX25hdF9tYW5nbGVfdGNwX3BhY2tldFxuIik7Ci0KLQlyZXR1cm4gbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0KHNrYiwgY3QsIGN0aW5mbywgbWF0Y2hvZmYsCi0JCQkJCW1hdGNobGVuLCBidWZmZXIsIHN0cmxlbihidWZmZXIpKTsKLX0KLQotc3RhdGljIGludCAoKm1hbmdsZVtdKShzdHJ1Y3Qgc2tfYnVmZiAqLCBfX2JlMzIsIHVfaW50MTZfdCwKLQkJICAgICAgIHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCBzdHJ1Y3QgbmZfY29ubiAqLAotCQkgICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbykKLT0gewotCVtORl9DVF9GVFBfUE9SVF0gPSBtYW5nbGVfcmZjOTU5X3BhY2tldCwKLQlbTkZfQ1RfRlRQX1BBU1ZdID0gbWFuZ2xlX3JmYzk1OV9wYWNrZXQsCi0JW05GX0NUX0ZUUF9FUFJUXSA9IG1hbmdsZV9lcHJ0X3BhY2tldCwKLQlbTkZfQ1RfRlRQX0VQU1ZdID0gbWFuZ2xlX2Vwc3ZfcGFja2V0Ci19OwotCiAvKiBTbywgdGhpcyBwYWNrZXQgaGFzIGhpdCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtYXRjaGluZyBjb2RlLgogICAgTWFuZ2xlIGl0LCBhbmQgY2hhbmdlIHRoZSBleHBlY3RhdGlvbiB0byBtYXRjaCB0aGUgbmV3IHZlcnNpb24uICovCiBzdGF0aWMgdW5zaWduZWQgaW50IG5mX25hdF9mdHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKQEAgLTExMCw2ICs2Myw4IEBACiAJdV9pbnQxNl90IHBvcnQ7CiAJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKIAlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBleHAtPm1hc3RlcjsKKwljaGFyIGJ1ZmZlcltzaXplb2YoInwxfDI1NS4yNTUuMjU1LjI1NXw2NTUzNXwiKV07CisJdW5zaWduZWQgaW50IGJ1ZmxlbjsKIAogCXByX2RlYnVnKCJGVFBfTkFUOiB0eXBlICVpLCBvZmYgJXUgbGVuICV1XG4iLCB0eXBlLCBtYXRjaG9mZiwgbWF0Y2hsZW4pOwogCkBAIC0xMzIsMTEgKzg3LDIxIEBACiAJaWYgKHBvcnQgPT0gMCkKIAkJcmV0dXJuIE5GX0RST1A7CiAKLQlpZiAoIW1hbmdsZVt0eXBlXShza2IsIG5ld2lwLCBwb3J0LCBtYXRjaG9mZiwgbWF0Y2hsZW4sIGN0LCBjdGluZm8pKSB7Ci0JCW5mX2N0X3VuZXhwZWN0X3JlbGF0ZWQoZXhwKTsKLQkJcmV0dXJuIE5GX0RST1A7Ci0JfQorCWJ1ZmxlbiA9IG5mX25hdF9mdHBfZm10X2NtZCh0eXBlLCBidWZmZXIsIHNpemVvZihidWZmZXIpLCBuZXdpcCwgcG9ydCk7CisJaWYgKCFidWZsZW4pCisJCWdvdG8gb3V0OworCisJcHJfZGVidWcoImNhbGxpbmcgbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0XG4iKTsKKworCWlmICghbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0KHNrYiwgY3QsIGN0aW5mbywgbWF0Y2hvZmYsCisJCQkJICAgICAgbWF0Y2hsZW4sIGJ1ZmZlciwgYnVmbGVuKSkKKwkJZ290byBvdXQ7CisKIAlyZXR1cm4gTkZfQUNDRVBUOworCitvdXQ6CisJbmZfY3RfdW5leHBlY3RfcmVsYXRlZChleHApOworCXJldHVybiBORl9EUk9QOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfbmF0X2Z0cF9maW5pKHZvaWQpCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9oZWxwZXIuYwppbmRleCA3ZjEwYTZiLi40YjZhZjRiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfaGVscGVyLmMKQEAgLTE0MSw2ICsxNDEsMTcgQEAKIAlyZXR1cm4gMTsKIH0KIAordm9pZCBuZl9uYXRfc2V0X3NlcV9hZGp1c3Qoc3RydWN0IG5mX2Nvbm4gKmN0LCBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgIF9fYmUzMiBzZXEsIHMxNiBvZmYpCit7CisJaWYgKCFvZmYpCisJCXJldHVybjsKKwlzZXRfYml0KElQU19TRVFfQURKVVNUX0JJVCwgJmN0LT5zdGF0dXMpOworCWFkanVzdF90Y3Bfc2VxdWVuY2UobnRvaGwoc2VxKSwgb2ZmLCBjdCwgY3RpbmZvKTsKKwluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9OQVRTRVFBREosIGN0KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9zZXRfc2VxX2FkanVzdCk7CisKIC8qIEdlbmVyaWMgZnVuY3Rpb24gZm9yIG1hbmdsaW5nIHZhcmlhYmxlLWxlbmd0aCBhZGRyZXNzIGNoYW5nZXMgaW5zaWRlCiAgKiBOQVRlZCBUQ1AgY29ubmVjdGlvbnMgKGxpa2UgdGhlIFBPUlQgWFhYLFhYWCxYWFgsWFhYLFhYWCxYWFgKICAqIGNvbW1hbmQgaW4gRlRQKS4KQEAgLTE0OSwxNCArMTYwLDEzIEBACiAgKiBza2IgZW5sYXJnZW1lbnQsIC4uLgogICoKICAqICovCi1pbnQKLW5mX25hdF9tYW5nbGVfdGNwX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkJIHN0cnVjdCBuZl9jb25uICpjdCwKLQkJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKLQkJCSB1bnNpZ25lZCBpbnQgbWF0Y2hfb2Zmc2V0LAotCQkJIHVuc2lnbmVkIGludCBtYXRjaF9sZW4sCi0JCQkgY29uc3QgY2hhciAqcmVwX2J1ZmZlciwKLQkJCSB1bnNpZ25lZCBpbnQgcmVwX2xlbikKK2ludCBfX25mX25hdF9tYW5nbGVfdGNwX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgICAgIHN0cnVjdCBuZl9jb25uICpjdCwKKwkJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hfb2Zmc2V0LAorCQkJICAgICAgIHVuc2lnbmVkIGludCBtYXRjaF9sZW4sCisJCQkgICAgICAgY29uc3QgY2hhciAqcmVwX2J1ZmZlciwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgcmVwX2xlbiwgYm9vbCBhZGp1c3QpCiB7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSBza2JfcnRhYmxlKHNrYik7CiAJc3RydWN0IGlwaGRyICppcGg7CkBAIC0yMDIsMTYgKzIxMiwxMyBAQAogCQlpbmV0X3Byb3RvX2NzdW1fcmVwbGFjZTIoJnRjcGgtPmNoZWNrLCBza2IsCiAJCQkJCSBodG9ucyhvbGRsZW4pLCBodG9ucyhkYXRhbGVuKSwgMSk7CiAKLQlpZiAocmVwX2xlbiAhPSBtYXRjaF9sZW4pIHsKLQkJc2V0X2JpdChJUFNfU0VRX0FESlVTVF9CSVQsICZjdC0+c3RhdHVzKTsKLQkJYWRqdXN0X3RjcF9zZXF1ZW5jZShudG9obCh0Y3BoLT5zZXEpLAotCQkJCSAgICAoaW50KXJlcF9sZW4gLSAoaW50KW1hdGNoX2xlbiwKLQkJCQkgICAgY3QsIGN0aW5mbyk7Ci0JCW5mX2Nvbm50cmFja19ldmVudF9jYWNoZShJUENUX05BVFNFUUFESiwgY3QpOwotCX0KKwlpZiAoYWRqdXN0ICYmIHJlcF9sZW4gIT0gbWF0Y2hfbGVuKQorCQluZl9uYXRfc2V0X3NlcV9hZGp1c3QoY3QsIGN0aW5mbywgdGNwaC0+c2VxLAorCQkJCSAgICAgIChpbnQpcmVwX2xlbiAtIChpbnQpbWF0Y2hfbGVuKTsKKwogCXJldHVybiAxOwogfQotRVhQT1JUX1NZTUJPTChuZl9uYXRfbWFuZ2xlX3RjcF9wYWNrZXQpOworRVhQT1JUX1NZTUJPTChfX25mX25hdF9tYW5nbGVfdGNwX3BhY2tldCk7CiAKIC8qIEdlbmVyaWMgZnVuY3Rpb24gZm9yIG1hbmdsaW5nIHZhcmlhYmxlLWxlbmd0aCBhZGRyZXNzIGNoYW5nZXMgaW5zaWRlCiAgKiBOQVRlZCBVRFAgY29ubmVjdGlvbnMgKGxpa2UgdGhlIENPTk5FQ1QgREFUQSBYWFhYWCBNRVNHIFhYWFhYIElOREVYIFhYWFhYCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3BwdHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHB0cC5jCmluZGV4IDllYjE3MTAuLjRjMDYwMDMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHB0cC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcHB0cC5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3pvbmVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19ncmUuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuaD4KIApAQCAtNzQsNyArNzUsNyBAQAogCiAJcHJfZGVidWcoInRyeWluZyB0byB1bmV4cGVjdCBvdGhlciBkaXI6ICIpOwogCW5mX2N0X2R1bXBfdHVwbGVfaXAoJnQpOwotCW90aGVyX2V4cCA9IG5mX2N0X2V4cGVjdF9maW5kX2dldChuZXQsICZ0KTsKKwlvdGhlcl9leHAgPSBuZl9jdF9leHBlY3RfZmluZF9nZXQobmV0LCBuZl9jdF96b25lKGN0KSwgJnQpOwogCWlmIChvdGhlcl9leHApIHsKIAkJbmZfY3RfdW5leHBlY3RfcmVsYXRlZChvdGhlcl9leHApOwogCQluZl9jdF9leHBlY3RfcHV0KG90aGVyX2V4cCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3J1bGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jCmluZGV4IDllODFlMGQuLmFiNzRjYzAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfcnVsZS5jCkBAIC0yOCwzNiArMjgsNiBAQAogCQkJICgxIDw8IE5GX0lORVRfUE9TVF9ST1VUSU5HKSB8IFwKIAkJCSAoMSA8PCBORl9JTkVUX0xPQ0FMX09VVCkpCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QKLXsKLQlzdHJ1Y3QgaXB0X3JlcGxhY2UgcmVwbDsKLQlzdHJ1Y3QgaXB0X3N0YW5kYXJkIGVudHJpZXNbM107Ci0Jc3RydWN0IGlwdF9lcnJvciB0ZXJtOwotfSBuYXRfaW5pdGlhbF90YWJsZSBfX25ldF9pbml0ZGF0YSA9IHsKLQkucmVwbCA9IHsKLQkJLm5hbWUgPSAibmF0IiwKLQkJLnZhbGlkX2hvb2tzID0gTkFUX1ZBTElEX0hPT0tTLAotCQkubnVtX2VudHJpZXMgPSA0LAotCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXB0X3N0YW5kYXJkKSAqIDMgKyBzaXplb2Yoc3RydWN0IGlwdF9lcnJvciksCi0JCS5ob29rX2VudHJ5ID0gewotCQkJW05GX0lORVRfUFJFX1JPVVRJTkddID0gMCwKLQkJCVtORl9JTkVUX1BPU1RfUk9VVElOR10gPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCi0JCQlbTkZfSU5FVF9MT0NBTF9PVVRdID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpICogMgotCQl9LAotCQkudW5kZXJmbG93ID0gewotCQkJW05GX0lORVRfUFJFX1JPVVRJTkddID0gMCwKLQkJCVtORl9JTkVUX1BPU1RfUk9VVElOR10gPSBzaXplb2Yoc3RydWN0IGlwdF9zdGFuZGFyZCksCi0JCQlbTkZfSU5FVF9MT0NBTF9PVVRdID0gc2l6ZW9mKHN0cnVjdCBpcHRfc3RhbmRhcmQpICogMgotCQl9LAotCX0sCi0JLmVudHJpZXMgPSB7Ci0JCUlQVF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIFBSRV9ST1VUSU5HICovCi0JCUlQVF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIFBPU1RfUk9VVElORyAqLwotCQlJUFRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBMT0NBTF9PVVQgKi8KLQl9LAotCS50ZXJtID0gSVBUX0VSUk9SX0lOSVQsCQkJLyogRVJST1IgKi8KLX07Ci0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeHRfdGFibGUgbmF0X3RhYmxlID0gewogCS5uYW1lCQk9ICJuYXQiLAogCS52YWxpZF9ob29rcwk9IE5BVF9WQUxJRF9IT09LUywKQEAgLTE4Niw4ICsxNTYsMTMgQEAKIAogc3RhdGljIGludCBfX25ldF9pbml0IG5mX25hdF9ydWxlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQluZXQtPmlwdjQubmF0X3RhYmxlID0gaXB0X3JlZ2lzdGVyX3RhYmxlKG5ldCwgJm5hdF90YWJsZSwKLQkJCQkJCSAmbmF0X2luaXRpYWxfdGFibGUucmVwbCk7CisJc3RydWN0IGlwdF9yZXBsYWNlICpyZXBsOworCisJcmVwbCA9IGlwdF9hbGxvY19pbml0aWFsX3RhYmxlKCZuYXRfdGFibGUpOworCWlmIChyZXBsID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW5ldC0+aXB2NC5uYXRfdGFibGUgPSBpcHRfcmVnaXN0ZXJfdGFibGUobmV0LCAmbmF0X3RhYmxlLCByZXBsKTsKKwlrZnJlZShyZXBsKTsKIAlpZiAoSVNfRVJSKG5ldC0+aXB2NC5uYXRfdGFibGUpKQogCQlyZXR1cm4gUFRSX0VSUihuZXQtPmlwdjQubmF0X3RhYmxlKTsKIAlyZXR1cm4gMDsKQEAgLTE5NSw3ICsxNzAsNyBAQAogCiBzdGF0aWMgdm9pZCBfX25ldF9leGl0IG5mX25hdF9ydWxlX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlpcHRfdW5yZWdpc3Rlcl90YWJsZShuZXQtPmlwdjQubmF0X3RhYmxlKTsKKwlpcHRfdW5yZWdpc3Rlcl90YWJsZShuZXQsIG5ldC0+aXB2NC5uYXRfdGFibGUpOwogfQogCiBzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIG5mX25hdF9ydWxlX25ldF9vcHMgPSB7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NpcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zaXAuYwppbmRleCAwN2Q2MWE1Li4xMWI1MzhkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvbmZfbmF0X3NpcC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc2lwLmMKQEAgLTEsNCArMSw0IEBACi0vKiBTSVAgZXh0ZW5zaW9uIGZvciBVRFAgTkFUIGFsdGVyYXRpb24uCisvKiBTSVAgZXh0ZW5zaW9uIGZvciBOQVQgYWx0ZXJhdGlvbi4KICAqCiAgKiAoQykgMjAwNSBieSBDaHJpc3RpYW4gSGVudHNjaGVsIDxjaGVudHNjaGVsQGFybmV0LmNvbS5hcj4KICAqIGJhc2VkIG9uIFJSJ3MgaXBfbmF0X2Z0cC5jIGFuZCBvdGhlciBtb2R1bGVzLgpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bmV0L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvdWRwLmg+CisjaW5jbHVkZSA8bGludXgvdGNwLmg+CiAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdC5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2hlbHBlci5oPgpAQCAtMjksMjUgKzMwLDQyIEBACiBNT0RVTEVfQUxJQVMoImlwX25hdF9zaXAiKTsKIAogCi1zdGF0aWMgdW5zaWduZWQgaW50IG1hbmdsZV9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbWFuZ2xlX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJCQkgIGNvbnN0IGNoYXIgKipkcHRyLCB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCiAJCQkJICB1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsIHVuc2lnbmVkIGludCBtYXRjaGxlbiwKIAkJCQkgIGNvbnN0IGNoYXIgKmJ1ZmZlciwgdW5zaWduZWQgaW50IGJ1ZmxlbikKIHsKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKIAlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKKwlzdHJ1Y3QgdGNwaGRyICp0aDsKKwl1bnNpZ25lZCBpbnQgYmFzZW9mZjsKIAotCWlmICghbmZfbmF0X21hbmdsZV91ZHBfcGFja2V0KHNrYiwgY3QsIGN0aW5mbywgbWF0Y2hvZmYsIG1hdGNobGVuLAotCQkJCSAgICAgIGJ1ZmZlciwgYnVmbGVuKSkKLQkJcmV0dXJuIDA7CisJaWYgKG5mX2N0X3Byb3RvbnVtKGN0KSA9PSBJUFBST1RPX1RDUCkgeworCQl0aCA9IChzdHJ1Y3QgdGNwaGRyICopKHNrYi0+ZGF0YSArIGlwX2hkcmxlbihza2IpKTsKKwkJYmFzZW9mZiA9IGlwX2hkcmxlbihza2IpICsgdGgtPmRvZmYgKiA0OworCQltYXRjaG9mZiArPSBkYXRhb2ZmIC0gYmFzZW9mZjsKKworCQlpZiAoIV9fbmZfbmF0X21hbmdsZV90Y3BfcGFja2V0KHNrYiwgY3QsIGN0aW5mbywKKwkJCQkJCW1hdGNob2ZmLCBtYXRjaGxlbiwKKwkJCQkJCWJ1ZmZlciwgYnVmbGVuLCBmYWxzZSkpCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UgeworCQliYXNlb2ZmID0gaXBfaGRybGVuKHNrYikgKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7CisJCW1hdGNob2ZmICs9IGRhdGFvZmYgLSBiYXNlb2ZmOworCisJCWlmICghbmZfbmF0X21hbmdsZV91ZHBfcGFja2V0KHNrYiwgY3QsIGN0aW5mbywKKwkJCQkJICAgICAgbWF0Y2hvZmYsIG1hdGNobGVuLAorCQkJCQkgICAgICBidWZmZXIsIGJ1ZmxlbikpCisJCQlyZXR1cm4gMDsKKwl9CiAKIAkvKiBSZWxvYWQgZGF0YSBwb2ludGVyIGFuZCBhZGp1c3QgZGF0YWxlbiB2YWx1ZSAqLwotCSpkcHRyID0gc2tiLT5kYXRhICsgaXBfaGRybGVuKHNrYikgKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7CisJKmRwdHIgPSBza2ItPmRhdGEgKyBkYXRhb2ZmOwogCSpkYXRhbGVuICs9IGJ1ZmxlbiAtIG1hdGNobGVuOwogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IG1hcF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsCitzdGF0aWMgaW50IG1hcF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkgICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKIAkJICAgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwgdW5zaWduZWQgaW50IG1hdGNobGVuLAogCQkgICAgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyLCBfX2JlMTYgcG9ydCkKQEAgLTc2LDExICs5NCwxMSBAQAogCiAJYnVmbGVuID0gc3ByaW50ZihidWZmZXIsICIlcEk0OiV1IiwgJm5ld2FkZHIsIG50b2hzKG5ld3BvcnQpKTsKIAotCXJldHVybiBtYW5nbGVfcGFja2V0KHNrYiwgZHB0ciwgZGF0YWxlbiwgbWF0Y2hvZmYsIG1hdGNobGVuLAorCXJldHVybiBtYW5nbGVfcGFja2V0KHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbiwgbWF0Y2hvZmYsIG1hdGNobGVuLAogCQkJICAgICBidWZmZXIsIGJ1Zmxlbik7CiB9CiAKLXN0YXRpYyBpbnQgbWFwX3NpcF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsCitzdGF0aWMgaW50IG1hcF9zaXBfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJCWNvbnN0IGNoYXIgKipkcHRyLCB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCiAJCQllbnVtIHNpcF9oZWFkZXJfdHlwZXMgdHlwZSkKIHsKQEAgLTkzLDE2ICsxMTEsMTggQEAKIAlpZiAoY3Rfc2lwX3BhcnNlX2hlYWRlcl91cmkoY3QsICpkcHRyLCBOVUxMLCAqZGF0YWxlbiwgdHlwZSwgTlVMTCwKIAkJCQkgICAgJm1hdGNob2ZmLCAmbWF0Y2hsZW4sICZhZGRyLCAmcG9ydCkgPD0gMCkKIAkJcmV0dXJuIDE7Ci0JcmV0dXJuIG1hcF9hZGRyKHNrYiwgZHB0ciwgZGF0YWxlbiwgbWF0Y2hvZmYsIG1hdGNobGVuLCAmYWRkciwgcG9ydCk7CisJcmV0dXJuIG1hcF9hZGRyKHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbiwgbWF0Y2hvZmYsIG1hdGNobGVuLAorCQkJJmFkZHIsIHBvcnQpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGlwX25hdF9zaXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXBfbmF0X3NpcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJCSAgICAgICBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuKQogewogCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOwogCXN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOwogCWVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7Ci0JdW5zaWduZWQgaW50IGRhdGFvZmYsIG1hdGNob2ZmLCBtYXRjaGxlbjsKKwl1bnNpZ25lZCBpbnQgY29mZiwgbWF0Y2hvZmYsIG1hdGNobGVuOworCWVudW0gc2lwX2hlYWRlcl90eXBlcyBoZHI7CiAJdW5pb24gbmZfaW5ldF9hZGRyIGFkZHI7CiAJX19iZTE2IHBvcnQ7CiAJaW50IHJlcXVlc3QsIGluX2hlYWRlcjsKQEAgLTExMiwxNiArMTMyLDIxIEBACiAJCWlmIChjdF9zaXBfcGFyc2VfcmVxdWVzdChjdCwgKmRwdHIsICpkYXRhbGVuLAogCQkJCQkgJm1hdGNob2ZmLCAmbWF0Y2hsZW4sCiAJCQkJCSAmYWRkciwgJnBvcnQpID4gMCAmJgotCQkgICAgIW1hcF9hZGRyKHNrYiwgZHB0ciwgZGF0YWxlbiwgbWF0Y2hvZmYsIG1hdGNobGVuLAorCQkgICAgIW1hcF9hZGRyKHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbiwgbWF0Y2hvZmYsIG1hdGNobGVuLAogCQkJICAgICAgJmFkZHIsIHBvcnQpKQogCQkJcmV0dXJuIE5GX0RST1A7CiAJCXJlcXVlc3QgPSAxOwogCX0gZWxzZQogCQlyZXF1ZXN0ID0gMDsKIAorCWlmIChuZl9jdF9wcm90b251bShjdCkgPT0gSVBQUk9UT19UQ1ApCisJCWhkciA9IFNJUF9IRFJfVklBX1RDUDsKKwllbHNlCisJCWhkciA9IFNJUF9IRFJfVklBX1VEUDsKKwogCS8qIFRyYW5zbGF0ZSB0b3Btb3N0IFZpYSBoZWFkZXIgYW5kIHBhcmFtZXRlcnMgKi8KIAlpZiAoY3Rfc2lwX3BhcnNlX2hlYWRlcl91cmkoY3QsICpkcHRyLCBOVUxMLCAqZGF0YWxlbiwKLQkJCQkgICAgU0lQX0hEUl9WSUEsIE5VTEwsICZtYXRjaG9mZiwgJm1hdGNobGVuLAorCQkJCSAgICBoZHIsIE5VTEwsICZtYXRjaG9mZiwgJm1hdGNobGVuLAogCQkJCSAgICAmYWRkciwgJnBvcnQpID4gMCkgewogCQl1bnNpZ25lZCBpbnQgbWF0Y2hlbmQsIHBvZmYsIHBsZW4sIGJ1ZmxlbiwgbjsKIAkJY2hhciBidWZmZXJbc2l6ZW9mKCJubm4ubm5uLm5ubi5ubm46bm5ubm4iKV07CkBAIC0xMzgsNyArMTYzLDcgQEAKIAkJCQlnb3RvIG5leHQ7CiAJCX0KIAotCQlpZiAoIW1hcF9hZGRyKHNrYiwgZHB0ciwgZGF0YWxlbiwgbWF0Y2hvZmYsIG1hdGNobGVuLAorCQlpZiAoIW1hcF9hZGRyKHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbiwgbWF0Y2hvZmYsIG1hdGNobGVuLAogCQkJICAgICAgJmFkZHIsIHBvcnQpKQogCQkJcmV0dXJuIE5GX0RST1A7CiAKQEAgLTE1Myw4ICsxNzgsOCBAQAogCQkgICAgYWRkci5pcCAhPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC51My5pcCkgewogCQkJYnVmbGVuID0gc3ByaW50ZihidWZmZXIsICIlcEk0IiwKIAkJCQkJJmN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LnUzLmlwKTsKLQkJCWlmICghbWFuZ2xlX3BhY2tldChza2IsIGRwdHIsIGRhdGFsZW4sIHBvZmYsIHBsZW4sCi0JCQkJCSAgIGJ1ZmZlciwgYnVmbGVuKSkKKwkJCWlmICghbWFuZ2xlX3BhY2tldChza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4sCisJCQkJCSAgIHBvZmYsIHBsZW4sIGJ1ZmZlciwgYnVmbGVuKSkKIAkJCQlyZXR1cm4gTkZfRFJPUDsKIAkJfQogCkBAIC0xNjcsOCArMTkyLDggQEAKIAkJICAgIGFkZHIuaXAgIT0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudTMuaXApIHsKIAkJCWJ1ZmxlbiA9IHNwcmludGYoYnVmZmVyLCAiJXBJNCIsCiAJCQkJCSZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51My5pcCk7Ci0JCQlpZiAoIW1hbmdsZV9wYWNrZXQoc2tiLCBkcHRyLCBkYXRhbGVuLCBwb2ZmLCBwbGVuLAotCQkJCQkgICBidWZmZXIsIGJ1ZmxlbikpCisJCQlpZiAoIW1hbmdsZV9wYWNrZXQoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLAorCQkJCQkgICBwb2ZmLCBwbGVuLCBidWZmZXIsIGJ1ZmxlbikpCiAJCQkJcmV0dXJuIE5GX0RST1A7CiAJCX0KIApAQCAtMTgxLDMxICsyMDYsNDUgQEAKIAkJICAgIGh0b25zKG4pICE9IGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuc3JjLnUudWRwLnBvcnQpIHsKIAkJCV9fYmUxNiBwID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5zcmMudS51ZHAucG9ydDsKIAkJCWJ1ZmxlbiA9IHNwcmludGYoYnVmZmVyLCAiJXUiLCBudG9ocyhwKSk7Ci0JCQlpZiAoIW1hbmdsZV9wYWNrZXQoc2tiLCBkcHRyLCBkYXRhbGVuLCBwb2ZmLCBwbGVuLAotCQkJCQkgICBidWZmZXIsIGJ1ZmxlbikpCisJCQlpZiAoIW1hbmdsZV9wYWNrZXQoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLAorCQkJCQkgICBwb2ZmLCBwbGVuLCBidWZmZXIsIGJ1ZmxlbikpCiAJCQkJcmV0dXJuIE5GX0RST1A7CiAJCX0KIAl9CiAKIG5leHQ6CiAJLyogVHJhbnNsYXRlIENvbnRhY3QgaGVhZGVycyAqLwotCWRhdGFvZmYgPSAwOworCWNvZmYgPSAwOwogCWluX2hlYWRlciA9IDA7Ci0Jd2hpbGUgKGN0X3NpcF9wYXJzZV9oZWFkZXJfdXJpKGN0LCAqZHB0ciwgJmRhdGFvZmYsICpkYXRhbGVuLAorCXdoaWxlIChjdF9zaXBfcGFyc2VfaGVhZGVyX3VyaShjdCwgKmRwdHIsICZjb2ZmLCAqZGF0YWxlbiwKIAkJCQkgICAgICAgU0lQX0hEUl9DT05UQUNULCAmaW5faGVhZGVyLAogCQkJCSAgICAgICAmbWF0Y2hvZmYsICZtYXRjaGxlbiwKIAkJCQkgICAgICAgJmFkZHIsICZwb3J0KSA+IDApIHsKLQkJaWYgKCFtYXBfYWRkcihza2IsIGRwdHIsIGRhdGFsZW4sIG1hdGNob2ZmLCBtYXRjaGxlbiwKKwkJaWYgKCFtYXBfYWRkcihza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4sIG1hdGNob2ZmLCBtYXRjaGxlbiwKIAkJCSAgICAgICZhZGRyLCBwb3J0KSkKIAkJCXJldHVybiBORl9EUk9QOwogCX0KIAotCWlmICghbWFwX3NpcF9hZGRyKHNrYiwgZHB0ciwgZGF0YWxlbiwgU0lQX0hEUl9GUk9NKSB8fAotCSAgICAhbWFwX3NpcF9hZGRyKHNrYiwgZHB0ciwgZGF0YWxlbiwgU0lQX0hEUl9UTykpCisJaWYgKCFtYXBfc2lwX2FkZHIoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLCBTSVBfSERSX0ZST00pIHx8CisJICAgICFtYXBfc2lwX2FkZHIoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLCBTSVBfSERSX1RPKSkKIAkJcmV0dXJuIE5GX0RST1A7CisKIAlyZXR1cm4gTkZfQUNDRVBUOwogfQogCitzdGF0aWMgdm9pZCBpcF9uYXRfc2lwX3NlcV9hZGp1c3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgczE2IG9mZikKK3sKKwllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKKwljb25zdCBzdHJ1Y3QgdGNwaGRyICp0aDsKKworCWlmIChuZl9jdF9wcm90b251bShjdCkgIT0gSVBQUk9UT19UQ1AgfHwgb2ZmID09IDApCisJCXJldHVybjsKKworCXRoID0gKHN0cnVjdCB0Y3BoZHIgKikoc2tiLT5kYXRhICsgaXBfaGRybGVuKHNrYikpOworCW5mX25hdF9zZXRfc2VxX2FkanVzdChjdCwgY3RpbmZvLCB0aC0+c2VxLCBvZmYpOworfQorCiAvKiBIYW5kbGVzIGV4cGVjdGVkIHNpZ25hbGxpbmcgY29ubmVjdGlvbnMgYW5kIG1lZGlhIHN0cmVhbXMgKi8KIHN0YXRpYyB2b2lkIGlwX25hdF9zaXBfZXhwZWN0ZWQoc3RydWN0IG5mX2Nvbm4gKmN0LAogCQkJCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApCkBAIC0yMzIsNyArMjcxLDcgQEAKIAl9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgaXBfbmF0X3NpcF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXBfbmF0X3NpcF9leHBlY3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkJICAgICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKIAkJCQkgICAgICBzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwLAogCQkJCSAgICAgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwKQEAgLTI3OSw4ICszMTgsOCBAQAogCWlmIChleHAtPnR1cGxlLmRzdC51My5pcCAhPSBleHAtPnNhdmVkX2lwIHx8CiAJICAgIGV4cC0+dHVwbGUuZHN0LnUudWRwLnBvcnQgIT0gZXhwLT5zYXZlZF9wcm90by51ZHAucG9ydCkgewogCQlidWZsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiVwSTQ6JXUiLCAmbmV3aXAsIHBvcnQpOwotCQlpZiAoIW1hbmdsZV9wYWNrZXQoc2tiLCBkcHRyLCBkYXRhbGVuLCBtYXRjaG9mZiwgbWF0Y2hsZW4sCi0JCQkJICAgYnVmZmVyLCBidWZsZW4pKQorCQlpZiAoIW1hbmdsZV9wYWNrZXQoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLAorCQkJCSAgIG1hdGNob2ZmLCBtYXRjaGxlbiwgYnVmZmVyLCBidWZsZW4pKQogCQkJZ290byBlcnI7CiAJfQogCXJldHVybiBORl9BQ0NFUFQ7CkBAIC0yOTAsNyArMzI5LDcgQEAKIAlyZXR1cm4gTkZfRFJPUDsKIH0KIAotc3RhdGljIGludCBtYW5nbGVfY29udGVudF9sZW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3N0YXRpYyBpbnQgbWFuZ2xlX2NvbnRlbnRfbGVuKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkJICAgICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbikKIHsKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKQEAgLTMxMiwxMiArMzUxLDEzIEBACiAJCXJldHVybiAwOwogCiAJYnVmbGVuID0gc3ByaW50ZihidWZmZXIsICIldSIsIGNfbGVuKTsKLQlyZXR1cm4gbWFuZ2xlX3BhY2tldChza2IsIGRwdHIsIGRhdGFsZW4sIG1hdGNob2ZmLCBtYXRjaGxlbiwKKwlyZXR1cm4gbWFuZ2xlX3BhY2tldChza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4sIG1hdGNob2ZmLCBtYXRjaGxlbiwKIAkJCSAgICAgYnVmZmVyLCBidWZsZW4pOwogfQogCi1zdGF0aWMgaW50IG1hbmdsZV9zZHBfcGFja2V0KHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IGNoYXIgKipkcHRyLAotCQkJICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAorc3RhdGljIGludCBtYW5nbGVfc2RwX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJCSAgICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKKwkJCSAgICAgdW5zaWduZWQgaW50IHNkcG9mZiwKIAkJCSAgICAgZW51bSBzZHBfaGVhZGVyX3R5cGVzIHR5cGUsCiAJCQkgICAgIGVudW0gc2RwX2hlYWRlcl90eXBlcyB0ZXJtLAogCQkJICAgICBjaGFyICpidWZmZXIsIGludCBidWZsZW4pCkBAIC0zMjYsMTYgKzM2NiwxNiBAQAogCXN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOwogCXVuc2lnbmVkIGludCBtYXRjaGxlbiwgbWF0Y2hvZmY7CiAKLQlpZiAoY3Rfc2lwX2dldF9zZHBfaGVhZGVyKGN0LCAqZHB0ciwgZGF0YW9mZiwgKmRhdGFsZW4sIHR5cGUsIHRlcm0sCisJaWYgKGN0X3NpcF9nZXRfc2RwX2hlYWRlcihjdCwgKmRwdHIsIHNkcG9mZiwgKmRhdGFsZW4sIHR5cGUsIHRlcm0sCiAJCQkJICAmbWF0Y2hvZmYsICZtYXRjaGxlbikgPD0gMCkKIAkJcmV0dXJuIC1FTk9FTlQ7Ci0JcmV0dXJuIG1hbmdsZV9wYWNrZXQoc2tiLCBkcHRyLCBkYXRhbGVuLCBtYXRjaG9mZiwgbWF0Y2hsZW4sCisJcmV0dXJuIG1hbmdsZV9wYWNrZXQoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLCBtYXRjaG9mZiwgbWF0Y2hsZW4sCiAJCQkgICAgIGJ1ZmZlciwgYnVmbGVuKSA/IDAgOiAtRUlOVkFMOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGlwX25hdF9zZHBfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBjaGFyICoqZHB0ciwKLQkJCQkgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCi0JCQkJICAgIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXBfbmF0X3NkcF9hZGRyKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkJCSAgICBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgc2Rwb2ZmLAogCQkJCSAgICBlbnVtIHNkcF9oZWFkZXJfdHlwZXMgdHlwZSwKIAkJCQkgICAgZW51bSBzZHBfaGVhZGVyX3R5cGVzIHRlcm0sCiAJCQkJICAgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcikKQEAgLTM0NCwxNiArMzg0LDE1IEBACiAJdW5zaWduZWQgaW50IGJ1ZmxlbjsKIAogCWJ1ZmxlbiA9IHNwcmludGYoYnVmZmVyLCAiJXBJNCIsICZhZGRyLT5pcCk7Ci0JaWYgKG1hbmdsZV9zZHBfcGFja2V0KHNrYiwgZHB0ciwgZGF0YW9mZiwgZGF0YWxlbiwgdHlwZSwgdGVybSwKKwlpZiAobWFuZ2xlX3NkcF9wYWNrZXQoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLCBzZHBvZmYsIHR5cGUsIHRlcm0sCiAJCQkgICAgICBidWZmZXIsIGJ1ZmxlbikpCiAJCXJldHVybiAwOwogCi0JcmV0dXJuIG1hbmdsZV9jb250ZW50X2xlbihza2IsIGRwdHIsIGRhdGFsZW4pOworCXJldHVybiBtYW5nbGVfY29udGVudF9sZW4oc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpcF9uYXRfc2RwX3BvcnQoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgY29uc3QgY2hhciAqKmRwdHIsCi0JCQkJICAgIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXBfbmF0X3NkcF9wb3J0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkJCSAgICBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAogCQkJCSAgICB1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsCiAJCQkJICAgIHVuc2lnbmVkIGludCBtYXRjaGxlbiwKIAkJCQkgICAgdV9pbnQxNl90IHBvcnQpCkBAIC0zNjIsMTYgKzQwMSwxNiBAQAogCXVuc2lnbmVkIGludCBidWZsZW47CiAKIAlidWZsZW4gPSBzcHJpbnRmKGJ1ZmZlciwgIiV1IiwgcG9ydCk7Ci0JaWYgKCFtYW5nbGVfcGFja2V0KHNrYiwgZHB0ciwgZGF0YWxlbiwgbWF0Y2hvZmYsIG1hdGNobGVuLAorCWlmICghbWFuZ2xlX3BhY2tldChza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4sIG1hdGNob2ZmLCBtYXRjaGxlbiwKIAkJCSAgIGJ1ZmZlciwgYnVmbGVuKSkKIAkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gbWFuZ2xlX2NvbnRlbnRfbGVuKHNrYiwgZHB0ciwgZGF0YWxlbik7CisJcmV0dXJuIG1hbmdsZV9jb250ZW50X2xlbihza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4pOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50IGlwX25hdF9zZHBfc2Vzc2lvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBjaGFyICoqZHB0ciwKLQkJCQkgICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCi0JCQkJICAgICAgIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXBfbmF0X3NkcF9zZXNzaW9uKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkJCSAgICAgICBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAorCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgc2Rwb2ZmLAogCQkJCSAgICAgICBjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpCiB7CiAJY2hhciBidWZmZXJbc2l6ZW9mKCJubm4ubm5uLm5ubi5ubm4iKV07CkBAIC0zNzksMTIgKzQxOCwxMiBAQAogCiAJLyogTWFuZ2xlIHNlc3Npb24gZGVzY3JpcHRpb24gb3duZXIgYW5kIGNvbnRhY3QgYWRkcmVzc2VzICovCiAJYnVmbGVuID0gc3ByaW50ZihidWZmZXIsICIlcEk0IiwgJmFkZHItPmlwKTsKLQlpZiAobWFuZ2xlX3NkcF9wYWNrZXQoc2tiLCBkcHRyLCBkYXRhb2ZmLCBkYXRhbGVuLAorCWlmIChtYW5nbGVfc2RwX3BhY2tldChza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4sIHNkcG9mZiwKIAkJCSAgICAgICBTRFBfSERSX09XTkVSX0lQNCwgU0RQX0hEUl9NRURJQSwKIAkJCSAgICAgICBidWZmZXIsIGJ1ZmxlbikpCiAJCXJldHVybiAwOwogCi0Jc3dpdGNoIChtYW5nbGVfc2RwX3BhY2tldChza2IsIGRwdHIsIGRhdGFvZmYsIGRhdGFsZW4sCisJc3dpdGNoIChtYW5nbGVfc2RwX3BhY2tldChza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4sIHNkcG9mZiwKIAkJCQkgIFNEUF9IRFJfQ09OTkVDVElPTl9JUDQsIFNEUF9IRFJfTUVESUEsCiAJCQkJICBidWZmZXIsIGJ1ZmxlbikpIHsKIAljYXNlIDA6CkBAIC00MDEsMTQgKzQ0MCwxMyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZXR1cm4gbWFuZ2xlX2NvbnRlbnRfbGVuKHNrYiwgZHB0ciwgZGF0YWxlbik7CisJcmV0dXJuIG1hbmdsZV9jb250ZW50X2xlbihza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4pOwogfQogCiAvKiBTbywgdGhpcyBwYWNrZXQgaGFzIGhpdCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBtYXRjaGluZyBjb2RlLgogICAgTWFuZ2xlIGl0LCBhbmQgY2hhbmdlIHRoZSBleHBlY3RhdGlvbiB0byBtYXRjaCB0aGUgbmV3IHZlcnNpb24uICovCi1zdGF0aWMgdW5zaWduZWQgaW50IGlwX25hdF9zZHBfbWVkaWEoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkgICAgIGNvbnN0IGNoYXIgKipkcHRyLAotCQkJCSAgICAgdW5zaWduZWQgaW50ICpkYXRhbGVuLAorc3RhdGljIHVuc2lnbmVkIGludCBpcF9uYXRfc2RwX21lZGlhKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkJCSAgICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKIAkJCQkgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpydHBfZXhwLAogCQkJCSAgICAgc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKnJ0Y3BfZXhwLAogCQkJCSAgICAgdW5zaWduZWQgaW50IG1lZGlhb2ZmLApAQCAtNDU2LDcgKzQ5NCw4IEBACiAKIAkvKiBVcGRhdGUgbWVkaWEgcG9ydC4gKi8KIAlpZiAocnRwX2V4cC0+dHVwbGUuZHN0LnUudWRwLnBvcnQgIT0gcnRwX2V4cC0+c2F2ZWRfcHJvdG8udWRwLnBvcnQgJiYKLQkgICAgIWlwX25hdF9zZHBfcG9ydChza2IsIGRwdHIsIGRhdGFsZW4sIG1lZGlhb2ZmLCBtZWRpYWxlbiwgcG9ydCkpCisJICAgICFpcF9uYXRfc2RwX3BvcnQoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLAorCQkJICAgICBtZWRpYW9mZiwgbWVkaWFsZW4sIHBvcnQpKQogCQlnb3RvIGVycjI7CiAKIAlyZXR1cm4gTkZfQUNDRVBUOwpAQCAtNDcxLDYgKzUxMCw3IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgbmZfbmF0X3NpcF9maW5pKHZvaWQpCiB7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX25hdF9zaXBfaG9vaywgTlVMTCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX25hdF9zaXBfc2VxX2FkanVzdF9ob29rLCBOVUxMKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3NpcF9leHBlY3RfaG9vaywgTlVMTCk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX25hdF9zZHBfYWRkcl9ob29rLCBOVUxMKTsKIAlyY3VfYXNzaWduX3BvaW50ZXIobmZfbmF0X3NkcF9wb3J0X2hvb2ssIE5VTEwpOwpAQCAtNDgyLDEyICs1MjIsMTQgQEAKIHN0YXRpYyBpbnQgX19pbml0IG5mX25hdF9zaXBfaW5pdCh2b2lkKQogewogCUJVR19PTihuZl9uYXRfc2lwX2hvb2sgIT0gTlVMTCk7CisJQlVHX09OKG5mX25hdF9zaXBfc2VxX2FkanVzdF9ob29rICE9IE5VTEwpOwogCUJVR19PTihuZl9uYXRfc2lwX2V4cGVjdF9ob29rICE9IE5VTEwpOwogCUJVR19PTihuZl9uYXRfc2RwX2FkZHJfaG9vayAhPSBOVUxMKTsKIAlCVUdfT04obmZfbmF0X3NkcF9wb3J0X2hvb2sgIT0gTlVMTCk7CiAJQlVHX09OKG5mX25hdF9zZHBfc2Vzc2lvbl9ob29rICE9IE5VTEwpOwogCUJVR19PTihuZl9uYXRfc2RwX21lZGlhX2hvb2sgIT0gTlVMTCk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX25hdF9zaXBfaG9vaywgaXBfbmF0X3NpcCk7CisJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX25hdF9zaXBfc2VxX2FkanVzdF9ob29rLCBpcF9uYXRfc2lwX3NlcV9hZGp1c3QpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfc2lwX2V4cGVjdF9ob29rLCBpcF9uYXRfc2lwX2V4cGVjdCk7CiAJcmN1X2Fzc2lnbl9wb2ludGVyKG5mX25hdF9zZHBfYWRkcl9ob29rLCBpcF9uYXRfc2RwX2FkZHIpOwogCXJjdV9hc3NpZ25fcG9pbnRlcihuZl9uYXRfc2RwX3BvcnRfaG9vaywgaXBfbmF0X3NkcF9wb3J0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9uZl9uYXRfc25tcF9iYXNpYy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMKaW5kZXggZDk1MjFmNi4uMGI5YzdjZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL25mX25hdF9zbm1wX2Jhc2ljLmMKQEAgLTEwMzgsNyArMTAzOCw3IEBACiAJdW5zaWduZWQgaW50IGNscywgY29uLCB0YWcsIHZlcnMsIHBkdXR5cGU7CiAJc3RydWN0IGFzbjFfY3R4IGN0eDsKIAlzdHJ1Y3QgYXNuMV9vY3RzdHIgY29tbTsKLQlzdHJ1Y3Qgc25tcF9vYmplY3QgKipvYmo7CisJc3RydWN0IHNubXBfb2JqZWN0ICpvYmo7CiAKIAlpZiAoZGVidWcgPiAxKQogCQloZXhfZHVtcChtc2csIGxlbik7CkBAIC0xMTQ4LDQzICsxMTQ4LDM0IEBACiAJaWYgKGNscyAhPSBBU04xX1VOSSB8fCBjb24gIT0gQVNOMV9DT04gfHwgdGFnICE9IEFTTjFfU0VRKQogCQlyZXR1cm4gMDsKIAotCW9iaiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzbm1wX29iamVjdCksIEdGUF9BVE9NSUMpOwotCWlmIChvYmogPT0gTlVMTCkgewotCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiT09NIGluIGJzYWxnKCVkKVxuIiwgX19MSU5FX18pOwotCQlyZXR1cm4gMDsKLQl9Ci0KIAl3aGlsZSAoIWFzbjFfZW9jX2RlY29kZSgmY3R4LCBlb2MpKSB7CiAJCXVuc2lnbmVkIGludCBpOwogCi0JCWlmICghc25tcF9vYmplY3RfZGVjb2RlKCZjdHgsIG9iaikpIHsKLQkJCWlmICgqb2JqKSB7Ci0JCQkJa2ZyZWUoKCpvYmopLT5pZCk7Ci0JCQkJa2ZyZWUoKm9iaik7CisJCWlmICghc25tcF9vYmplY3RfZGVjb2RlKCZjdHgsICZvYmopKSB7CisJCQlpZiAob2JqKSB7CisJCQkJa2ZyZWUob2JqLT5pZCk7CisJCQkJa2ZyZWUob2JqKTsKIAkJCX0KLQkJCWtmcmVlKG9iaik7CiAJCQlyZXR1cm4gMDsKIAkJfQogCiAJCWlmIChkZWJ1ZyA+IDEpIHsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJic2FsZzogb2JqZWN0OiAiKTsKLQkJCWZvciAoaSA9IDA7IGkgPCAoKm9iaiktPmlkX2xlbjsgaSsrKSB7CisJCQlmb3IgKGkgPSAwOyBpIDwgb2JqLT5pZF9sZW47IGkrKykgewogCQkJCWlmIChpID4gMCkKIAkJCQkJcHJpbnRrKCIuIik7Ci0JCQkJcHJpbnRrKCIlbHUiLCAoKm9iaiktPmlkW2ldKTsKKwkJCQlwcmludGsoIiVsdSIsIG9iai0+aWRbaV0pOwogCQkJfQotCQkJcHJpbnRrKCI6IHR5cGU9JXVcbiIsICgqb2JqKS0+dHlwZSk7CisJCQlwcmludGsoIjogdHlwZT0ldVxuIiwgb2JqLT50eXBlKTsKIAogCQl9CiAKLQkJaWYgKCgqb2JqKS0+dHlwZSA9PSBTTk1QX0lQQUREUikKKwkJaWYgKG9iai0+dHlwZSA9PSBTTk1QX0lQQUREUikKIAkJCW1hbmdsZV9hZGRyZXNzKGN0eC5iZWdpbiwgY3R4LnBvaW50ZXIgLSA0ICwgbWFwLCBjaGVjayk7CiAKLQkJa2ZyZWUoKCpvYmopLT5pZCk7Ci0JCWtmcmVlKCpvYmopOworCQlrZnJlZShvYmotPmlkKTsKKwkJa2ZyZWUob2JqKTsKIAl9Ci0Ja2ZyZWUob2JqKTsKIAogCWlmICghYXNuMV9lb2NfZGVjb2RlKCZjdHgsIGVvYykpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcHJvYy5jIGIvbmV0L2lwdjQvcHJvYy5jCmluZGV4IGYyNTU0MmMuLjI0MmVkMjMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Byb2MuYworKysgYi9uZXQvaXB2NC9wcm9jLmMKQEAgLTEyNyw4ICsxMjcsOCBAQAogCVNOTVBfTUlCX1NFTlRJTkVMCiB9OwogCi1zdGF0aWMgc3RydWN0IHsKLQljaGFyICpuYW1lOworc3RhdGljIGNvbnN0IHN0cnVjdCB7CisJY29uc3QgY2hhciAqbmFtZTsKIAlpbnQgaW5kZXg7CiB9IGljbXBtaWJtYXBbXSA9IHsKIAl7ICJEZXN0VW5yZWFjaHMiLCBJQ01QX0RFU1RfVU5SRUFDSCB9LApAQCAtMjgwLDcgKzI4MCw3IEBACiAKIAljb3VudCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IElDTVBNU0dfTUlCX01BWDsgaSsrKSB7Ci0JCXZhbCA9IHNubXBfZm9sZF9maWVsZCgodm9pZCAqKikgbmV0LT5taWIuaWNtcG1zZ19zdGF0aXN0aWNzLCBpKTsKKwkJdmFsID0gc25tcF9mb2xkX2ZpZWxkKCh2b2lkIF9fcGVyY3B1ICoqKSBuZXQtPm1pYi5pY21wbXNnX3N0YXRpc3RpY3MsIGkpOwogCQlpZiAodmFsKSB7CiAJCQl0eXBlW2NvdW50XSA9IGk7CiAJCQl2YWxzW2NvdW50KytdID0gdmFsOwpAQCAtMzA3LDE4ICszMDcsMTggQEAKIAlmb3IgKGk9MDsgaWNtcG1pYm1hcFtpXS5uYW1lICE9IE5VTEw7IGkrKykKIAkJc2VxX3ByaW50ZihzZXEsICIgT3V0JXMiLCBpY21wbWlibWFwW2ldLm5hbWUpOwogCXNlcV9wcmludGYoc2VxLCAiXG5JY21wOiAlbHUgJWx1IiwKLQkJc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKSBuZXQtPm1pYi5pY21wX3N0YXRpc3RpY3MsIElDTVBfTUlCX0lOTVNHUyksCi0JCXNubXBfZm9sZF9maWVsZCgodm9pZCAqKikgbmV0LT5taWIuaWNtcF9zdGF0aXN0aWNzLCBJQ01QX01JQl9JTkVSUk9SUykpOworCQlzbm1wX2ZvbGRfZmllbGQoKHZvaWQgX19wZXJjcHUgKiopIG5ldC0+bWliLmljbXBfc3RhdGlzdGljcywgSUNNUF9NSUJfSU5NU0dTKSwKKwkJc25tcF9mb2xkX2ZpZWxkKCh2b2lkIF9fcGVyY3B1ICoqKSBuZXQtPm1pYi5pY21wX3N0YXRpc3RpY3MsIElDTVBfTUlCX0lORVJST1JTKSk7CiAJZm9yIChpPTA7IGljbXBtaWJtYXBbaV0ubmFtZSAhPSBOVUxMOyBpKyspCiAJCXNlcV9wcmludGYoc2VxLCAiICVsdSIsCi0JCQlzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopIG5ldC0+bWliLmljbXBtc2dfc3RhdGlzdGljcywKKwkJCXNubXBfZm9sZF9maWVsZCgodm9pZCBfX3BlcmNwdSAqKikgbmV0LT5taWIuaWNtcG1zZ19zdGF0aXN0aWNzLAogCQkJCWljbXBtaWJtYXBbaV0uaW5kZXgpKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiAlbHUgJWx1IiwKLQkJc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKSBuZXQtPm1pYi5pY21wX3N0YXRpc3RpY3MsIElDTVBfTUlCX09VVE1TR1MpLAotCQlzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopIG5ldC0+bWliLmljbXBfc3RhdGlzdGljcywgSUNNUF9NSUJfT1VURVJST1JTKSk7CisJCXNubXBfZm9sZF9maWVsZCgodm9pZCBfX3BlcmNwdSAqKikgbmV0LT5taWIuaWNtcF9zdGF0aXN0aWNzLCBJQ01QX01JQl9PVVRNU0dTKSwKKwkJc25tcF9mb2xkX2ZpZWxkKCh2b2lkIF9fcGVyY3B1ICoqKSBuZXQtPm1pYi5pY21wX3N0YXRpc3RpY3MsIElDTVBfTUlCX09VVEVSUk9SUykpOwogCWZvciAoaT0wOyBpY21wbWlibWFwW2ldLm5hbWUgIT0gTlVMTDsgaSsrKQogCQlzZXFfcHJpbnRmKHNlcSwgIiAlbHUiLAotCQkJc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKSBuZXQtPm1pYi5pY21wbXNnX3N0YXRpc3RpY3MsCisJCQlzbm1wX2ZvbGRfZmllbGQoKHZvaWQgX19wZXJjcHUgKiopIG5ldC0+bWliLmljbXBtc2dfc3RhdGlzdGljcywKIAkJCQlpY21wbWlibWFwW2ldLmluZGV4IHwgMHgxMDApKTsKIH0KIApAQCAtMzQxLDcgKzM0MSw3IEBACiAKIAlmb3IgKGkgPSAwOyBzbm1wNF9pcHN0YXRzX2xpc3RbaV0ubmFtZSAhPSBOVUxMOyBpKyspCiAJCXNlcV9wcmludGYoc2VxLCAiICVsdSIsCi0JCQkgICBzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopbmV0LT5taWIuaXBfc3RhdGlzdGljcywKKwkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pcF9zdGF0aXN0aWNzLAogCQkJCQkgICBzbm1wNF9pcHN0YXRzX2xpc3RbaV0uZW50cnkpKTsKIAogCWljbXBfcHV0KHNlcSk7CS8qIFJGQyAyMDExIGNvbXBhdGliaWxpdHkgKi8KQEAgLTM1NiwxMSArMzU2LDExIEBACiAJCS8qIE1heENvbm4gZmllbGQgaXMgc2lnbmVkLCBSRkMgMjAxMiAqLwogCQlpZiAoc25tcDRfdGNwX2xpc3RbaV0uZW50cnkgPT0gVENQX01JQl9NQVhDT05OKQogCQkJc2VxX3ByaW50ZihzZXEsICIgJWxkIiwKLQkJCQkgICBzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopbmV0LT5taWIudGNwX3N0YXRpc3RpY3MsCisJCQkJICAgc25tcF9mb2xkX2ZpZWxkKCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnRjcF9zdGF0aXN0aWNzLAogCQkJCQkJICAgc25tcDRfdGNwX2xpc3RbaV0uZW50cnkpKTsKIAkJZWxzZQogCQkJc2VxX3ByaW50ZihzZXEsICIgJWx1IiwKLQkJCQkgICBzbm1wX2ZvbGRfZmllbGQoKHZvaWQgKiopbmV0LT5taWIudGNwX3N0YXRpc3RpY3MsCisJCQkJICAgc25tcF9mb2xkX2ZpZWxkKCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnRjcF9zdGF0aXN0aWNzLAogCQkJCQkJICAgc25tcDRfdGNwX2xpc3RbaV0uZW50cnkpKTsKIAl9CiAKQEAgLTM3MSw3ICszNzEsNyBAQAogCXNlcV9wdXRzKHNlcSwgIlxuVWRwOiIpOwogCWZvciAoaSA9IDA7IHNubXA0X3VkcF9saXN0W2ldLm5hbWUgIT0gTlVMTDsgaSsrKQogCQlzZXFfcHJpbnRmKHNlcSwgIiAlbHUiLAotCQkJICAgc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKW5ldC0+bWliLnVkcF9zdGF0aXN0aWNzLAorCQkJICAgc25tcF9mb2xkX2ZpZWxkKCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnVkcF9zdGF0aXN0aWNzLAogCQkJCQkgICBzbm1wNF91ZHBfbGlzdFtpXS5lbnRyeSkpOwogCiAJLyogdGhlIFVEUCBhbmQgVURQLUxpdGUgTUlCcyBhcmUgdGhlIHNhbWUgKi8KQEAgLTM4Miw3ICszODIsNyBAQAogCXNlcV9wdXRzKHNlcSwgIlxuVWRwTGl0ZToiKTsKIAlmb3IgKGkgPSAwOyBzbm1wNF91ZHBfbGlzdFtpXS5uYW1lICE9IE5VTEw7IGkrKykKIAkJc2VxX3ByaW50ZihzZXEsICIgJWx1IiwKLQkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCAqKiluZXQtPm1pYi51ZHBsaXRlX3N0YXRpc3RpY3MsCisJCQkgICBzbm1wX2ZvbGRfZmllbGQoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIudWRwbGl0ZV9zdGF0aXN0aWNzLAogCQkJCQkgICBzbm1wNF91ZHBfbGlzdFtpXS5lbnRyeSkpOwogCiAJc2VxX3B1dGMoc2VxLCAnXG4nKTsKQEAgLTQxOSw3ICs0MTksNyBAQAogCXNlcV9wdXRzKHNlcSwgIlxuVGNwRXh0OiIpOwogCWZvciAoaSA9IDA7IHNubXA0X25ldF9saXN0W2ldLm5hbWUgIT0gTlVMTDsgaSsrKQogCQlzZXFfcHJpbnRmKHNlcSwgIiAlbHUiLAotCQkJICAgc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKW5ldC0+bWliLm5ldF9zdGF0aXN0aWNzLAorCQkJICAgc25tcF9mb2xkX2ZpZWxkKCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLm5ldF9zdGF0aXN0aWNzLAogCQkJCQkgICBzbm1wNF9uZXRfbGlzdFtpXS5lbnRyeSkpOwogCiAJc2VxX3B1dHMoc2VxLCAiXG5JcEV4dDoiKTsKQEAgLTQyOSw3ICs0MjksNyBAQAogCXNlcV9wdXRzKHNlcSwgIlxuSXBFeHQ6Iik7CiAJZm9yIChpID0gMDsgc25tcDRfaXBleHRzdGF0c19saXN0W2ldLm5hbWUgIT0gTlVMTDsgaSsrKQogCQlzZXFfcHJpbnRmKHNlcSwgIiAlbHUiLAotCQkJICAgc25tcF9mb2xkX2ZpZWxkKCh2b2lkICoqKW5ldC0+bWliLmlwX3N0YXRpc3RpY3MsCisJCQkgICBzbm1wX2ZvbGRfZmllbGQoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaXBfc3RhdGlzdGljcywKIAkJCQkJICAgc25tcDRfaXBleHRzdGF0c19saXN0W2ldLmVudHJ5KSk7CiAKIAlzZXFfcHV0YyhzZXEsICdcbicpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggNGYxMWZhYS4uYjJiYTU1OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0xOTkwLDggKzE5OTAsMTMgQEAKIAlpZiAoc2tiLT5wcm90b2NvbCAhPSBodG9ucyhFVEhfUF9JUCkpIHsKIAkJLyogTm90IElQIChpLmUuIEFSUCkuIERvIG5vdCBjcmVhdGUgcm91dGUsIGlmIGl0IGlzCiAJCSAqIGludmFsaWQgZm9yIHByb3h5IGFycC4gRE5BVCByb3V0ZXMgYXJlIGFsd2F5cyB2YWxpZC4KKwkJICoKKwkJICogUHJveHkgYXJwIGZlYXR1cmUgaGF2ZSBiZWVuIGV4dGVuZGVkIHRvIGFsbG93LCBBUlAKKwkJICogcmVwbGllcyBiYWNrIHRvIHRoZSBzYW1lIGludGVyZmFjZSwgdG8gc3VwcG9ydAorCQkgKiBQcml2YXRlIFZMQU4gc3dpdGNoIHRlY2hub2xvZ2llcy4gU2VlIGFycC5jLgogCQkgKi8KLQkJaWYgKG91dF9kZXYgPT0gaW5fZGV2KSB7CisJCWlmIChvdXRfZGV2ID09IGluX2RldiAmJgorCQkgICAgSU5fREVWX1BST1hZX0FSUF9QVkxBTihpbl9kZXYpID09IDApIHsKIAkJCWVyciA9IC1FSU5WQUw7CiAJCQlnb3RvIGNsZWFudXA7CiAJCX0KQEAgLTMzMjksNyArMzMzNCw3IEBACiAKIAogI2lmZGVmIENPTkZJR19ORVRfQ0xTX1JPVVRFCi1zdHJ1Y3QgaXBfcnRfYWNjdCAqaXBfcnRfYWNjdCBfX3JlYWRfbW9zdGx5Oworc3RydWN0IGlwX3J0X2FjY3QgX19wZXJjcHUgKmlwX3J0X2FjY3QgX19yZWFkX21vc3RseTsKICNlbmRpZiAvKiBDT05GSUdfTkVUX0NMU19ST1VURSAqLwogCiBzdGF0aWMgX19pbml0ZGF0YSB1bnNpZ25lZCBsb25nIHJoYXNoX2VudHJpZXM7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9zeW5jb29raWVzLmMgYi9uZXQvaXB2NC9zeW5jb29raWVzLmMKaW5kZXggNjZmZDgwZS4uNWMyNGRiNCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvc3luY29va2llcy5jCisrKyBiL25ldC9pcHY0L3N5bmNvb2tpZXMuYwpAQCAtMzU4LDcgKzM1OCw4IEBACiAKIAl0Y3Bfc2VsZWN0X2luaXRpYWxfd2luZG93KHRjcF9mdWxsX3NwYWNlKHNrKSwgcmVxLT5tc3MsCiAJCQkJICAmcmVxLT5yY3Zfd25kLCAmcmVxLT53aW5kb3dfY2xhbXAsCi0JCQkJICBpcmVxLT53c2NhbGVfb2ssICZyY3Zfd3NjYWxlKTsKKwkJCQkgIGlyZXEtPndzY2FsZV9vaywgJnJjdl93c2NhbGUsCisJCQkJICBkc3RfbWV0cmljKCZydC0+dS5kc3QsIFJUQVhfSU5JVFJXTkQpKTsKIAogCWlyZXEtPnJjdl93c2NhbGUgID0gcmN2X3dzY2FsZTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvc3lzY3RsX25ldF9pcHY0LmMgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwppbmRleCA3ZTM3MTJjLi5jMWJjMDc0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYworKysgYi9uZXQvaXB2NC9zeXNjdGxfbmV0X2lwdjQuYwpAQCAtNTc2LDYgKzU3NiwyMCBAQAogCQkucHJvY19oYW5kbGVyCT0gcHJvY19kb2ludHZlYwogCX0sCiAJeworCQkucHJvY25hbWUgICAgICAgPSAidGNwX3RoaW5fbGluZWFyX3RpbWVvdXRzIiwKKwkJLmRhdGEgICAgICAgICAgID0gJnN5c2N0bF90Y3BfdGhpbl9saW5lYXJfdGltZW91dHMsCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZihpbnQpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSBwcm9jX2RvaW50dmVjCisJfSwKKyAgICAgICAgeworCQkucHJvY25hbWUgICAgICAgPSAidGNwX3RoaW5fZHVwYWNrIiwKKwkJLmRhdGEgICAgICAgICAgID0gJnN5c2N0bF90Y3BfdGhpbl9kdXBhY2ssCisJCS5tYXhsZW4gICAgICAgICA9IHNpemVvZihpbnQpLAorCQkubW9kZSAgICAgICAgICAgPSAwNjQ0LAorCQkucHJvY19oYW5kbGVyICAgPSBwcm9jX2RvaW50dmVjCisJfSwKKwl7CiAJCS5wcm9jbmFtZQk9ICJ1ZHBfbWVtIiwKIAkJLmRhdGEJCT0gJnN5c2N0bF91ZHBfbWVtLAogCQkubWF4bGVuCQk9IHNpemVvZihzeXNjdGxfdWRwX21lbSksCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3AuYyBiL25ldC9pcHY0L3RjcC5jCmluZGV4IGIwYTI2YmIuLjU5MDEwMTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcC5jCisrKyBiL25ldC9pcHY0L3RjcC5jCkBAIC01MzYsOCArNTM2LDcgQEAKIAkJdHAtPm5vbmFnbGUgJj0gflRDUF9OQUdMRV9QVVNIOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgdGNwX21hcmtfdXJnKHN0cnVjdCB0Y3Bfc29jayAqdHAsIGludCBmbGFncywKLQkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGlubGluZSB2b2lkIHRjcF9tYXJrX3VyZyhzdHJ1Y3QgdGNwX3NvY2sgKnRwLCBpbnQgZmxhZ3MpCiB7CiAJaWYgKGZsYWdzICYgTVNHX09PQikKIAkJdHAtPnNuZF91cCA9IHRwLT53cml0ZV9zZXE7CkBAIC01NDYsMTMgKzU0NSwxMyBAQAogc3RhdGljIGlubGluZSB2b2lkIHRjcF9wdXNoKHN0cnVjdCBzb2NrICpzaywgaW50IGZsYWdzLCBpbnQgbXNzX25vdywKIAkJCSAgICBpbnQgbm9uYWdsZSkKIHsKLQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKLQogCWlmICh0Y3Bfc2VuZF9oZWFkKHNrKSkgewotCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gdGNwX3dyaXRlX3F1ZXVlX3RhaWwoc2spOworCQlzdHJ1Y3QgdGNwX3NvY2sgKnRwID0gdGNwX3NrKHNrKTsKKwogCQlpZiAoIShmbGFncyAmIE1TR19NT1JFKSB8fCBmb3JjZWRfcHVzaCh0cCkpCi0JCQl0Y3BfbWFya19wdXNoKHRwLCBza2IpOwotCQl0Y3BfbWFya191cmcodHAsIGZsYWdzLCBza2IpOworCQkJdGNwX21hcmtfcHVzaCh0cCwgdGNwX3dyaXRlX3F1ZXVlX3RhaWwoc2spKTsKKworCQl0Y3BfbWFya191cmcodHAsIGZsYWdzKTsKIAkJX190Y3BfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzaywgbXNzX25vdywKIAkJCQkJICAoZmxhZ3MgJiBNU0dfTU9SRSkgPyBUQ1BfTkFHTEVfQ09SSyA6IG5vbmFnbGUpOwogCX0KQEAgLTg3NywxMiArODc2LDEyIEBACiAjZGVmaW5lIFRDUF9QQUdFKHNrKQkoc2stPnNrX3NuZG1zZ19wYWdlKQogI2RlZmluZSBUQ1BfT0ZGKHNrKQkoc2stPnNrX3NuZG1zZ19vZmYpCiAKLXN0YXRpYyBpbmxpbmUgaW50IHNlbGVjdF9zaXplKHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyBpbmxpbmUgaW50IHNlbGVjdF9zaXplKHN0cnVjdCBzb2NrICpzaywgaW50IHNnKQogewogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCWludCB0bXAgPSB0cC0+bXNzX2NhY2hlOwogCi0JaWYgKHNrLT5za19yb3V0ZV9jYXBzICYgTkVUSUZfRl9TRykgeworCWlmIChzZykgewogCQlpZiAoc2tfY2FuX2dzbyhzaykpCiAJCQl0bXAgPSAwOwogCQllbHNlIHsKQEAgLTkwNiw3ICs5MDUsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGlvdmxlbiwgZmxhZ3M7CiAJaW50IG1zc19ub3csIHNpemVfZ29hbDsKLQlpbnQgZXJyLCBjb3BpZWQ7CisJaW50IHNnLCBlcnIsIGNvcGllZDsKIAlsb25nIHRpbWVvOwogCiAJbG9ja19zb2NrKHNrKTsKQEAgLTkzNCw2ICs5MzMsOCBAQAogCWlmIChzay0+c2tfZXJyIHx8IChzay0+c2tfc2h1dGRvd24gJiBTRU5EX1NIVVRET1dOKSkKIAkJZ290byBvdXRfZXJyOwogCisJc2cgPSBzay0+c2tfcm91dGVfY2FwcyAmIE5FVElGX0ZfU0c7CisKIAl3aGlsZSAoLS1pb3ZsZW4gPj0gMCkgewogCQlpbnQgc2VnbGVuID0gaW92LT5pb3ZfbGVuOwogCQl1bnNpZ25lZCBjaGFyIF9fdXNlciAqZnJvbSA9IGlvdi0+aW92X2Jhc2U7CkBAIC05NTksOCArOTYwLDkgQEAKIAkJCQlpZiAoIXNrX3N0cmVhbV9tZW1vcnlfZnJlZShzaykpCiAJCQkJCWdvdG8gd2FpdF9mb3Jfc25kYnVmOwogCi0JCQkJc2tiID0gc2tfc3RyZWFtX2FsbG9jX3NrYihzaywgc2VsZWN0X3NpemUoc2spLAotCQkJCQkJc2stPnNrX2FsbG9jYXRpb24pOworCQkJCXNrYiA9IHNrX3N0cmVhbV9hbGxvY19za2Ioc2ssCisJCQkJCQkJICBzZWxlY3Rfc2l6ZShzaywgc2cpLAorCQkJCQkJCSAgc2stPnNrX2FsbG9jYXRpb24pOwogCQkJCWlmICghc2tiKQogCQkJCQlnb3RvIHdhaXRfZm9yX21lbW9yeTsKIApAQCAtOTk3LDkgKzk5OSw3IEBACiAJCQkJCS8qIFdlIGNhbiBleHRlbmQgdGhlIGxhc3QgcGFnZQogCQkJCQkgKiBmcmFnbWVudC4gKi8KIAkJCQkJbWVyZ2UgPSAxOwotCQkJCX0gZWxzZSBpZiAoaSA9PSBNQVhfU0tCX0ZSQUdTIHx8Ci0JCQkJCSAgICghaSAmJgotCQkJCQkgICAhKHNrLT5za19yb3V0ZV9jYXBzICYgTkVUSUZfRl9TRykpKSB7CisJCQkJfSBlbHNlIGlmIChpID09IE1BWF9TS0JfRlJBR1MgfHwgIXNnKSB7CiAJCQkJCS8qIE5lZWQgdG8gYWRkIG5ldyBmcmFnbWVudCBhbmQgY2Fubm90CiAJCQkJCSAqIGRvIHRoaXMgYmVjYXVzZSBpbnRlcmZhY2UgaXMgbm9uLVNHLAogCQkJCQkgKiBvciBiZWNhdXNlIGFsbCB0aGUgcGFnZSBzbG90cyBhcmUKQEAgLTIyMjksNiArMjIyOSwyMCBAQAogCQl9CiAJCWJyZWFrOwogCisJY2FzZSBUQ1BfVEhJTl9MSU5FQVJfVElNRU9VVFM6CisJCWlmICh2YWwgPCAwIHx8IHZhbCA+IDEpCisJCQllcnIgPSAtRUlOVkFMOworCQllbHNlCisJCQl0cC0+dGhpbl9sdG8gPSB2YWw7CisJCWJyZWFrOworCisJY2FzZSBUQ1BfVEhJTl9EVVBBQ0s6CisJCWlmICh2YWwgPCAwIHx8IHZhbCA+IDEpCisJCQllcnIgPSAtRUlOVkFMOworCQllbHNlCisJCQl0cC0+dGhpbl9kdXBhY2sgPSB2YWw7CisJCWJyZWFrOworCiAJY2FzZSBUQ1BfQ09SSzoKIAkJLyogV2hlbiBzZXQgaW5kaWNhdGVzIHRvIGFsd2F5cyBxdWV1ZSBub24tZnVsbCBmcmFtZXMuCiAJCSAqIExhdGVyIHRoZSB1c2VyIGNsZWFycyB0aGlzIG9wdGlvbiBhbmQgd2UgdHJhbnNtaXQKQEAgLTI3ODgsMTAgKzI4MDIsMTAgQEAKIAogI2lmZGVmIENPTkZJR19UQ1BfTUQ1U0lHCiBzdGF0aWMgdW5zaWduZWQgbG9uZyB0Y3BfbWQ1c2lnX3VzZXJzOwotc3RhdGljIHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKip0Y3BfbWQ1c2lnX3Bvb2w7CitzdGF0aWMgc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqIF9fcGVyY3B1ICp0Y3BfbWQ1c2lnX3Bvb2w7CiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHRjcF9tZDVzaWdfcG9vbF9sb2NrKTsKIAotc3RhdGljIHZvaWQgX190Y3BfZnJlZV9tZDVzaWdfcG9vbChzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICoqcG9vbCkKK3N0YXRpYyB2b2lkIF9fdGNwX2ZyZWVfbWQ1c2lnX3Bvb2woc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqIF9fcGVyY3B1ICpwb29sKQogewogCWludCBjcHU7CiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewpAQCAtMjgwOCw3ICsyODIyLDcgQEAKIAogdm9pZCB0Y3BfZnJlZV9tZDVzaWdfcG9vbCh2b2lkKQogewotCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKipwb29sID0gTlVMTDsKKwlzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICogX19wZXJjcHUgKnBvb2wgPSBOVUxMOwogCiAJc3Bpbl9sb2NrX2JoKCZ0Y3BfbWQ1c2lnX3Bvb2xfbG9jayk7CiAJaWYgKC0tdGNwX21kNXNpZ191c2VycyA9PSAwKSB7CkBAIC0yODIyLDEwICsyODM2LDExIEBACiAKIEVYUE9SVF9TWU1CT0wodGNwX2ZyZWVfbWQ1c2lnX3Bvb2wpOwogCi1zdGF0aWMgc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqKl9fdGNwX2FsbG9jX21kNXNpZ19wb29sKHN0cnVjdCBzb2NrICpzaykKK3N0YXRpYyBzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICogX19wZXJjcHUgKgorX190Y3BfYWxsb2NfbWQ1c2lnX3Bvb2woc3RydWN0IHNvY2sgKnNrKQogewogCWludCBjcHU7Ci0Jc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqKnBvb2w7CisJc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqIF9fcGVyY3B1ICpwb29sOwogCiAJcG9vbCA9IGFsbG9jX3BlcmNwdShzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICopOwogCWlmICghcG9vbCkKQEAgLTI4NTIsOSArMjg2Nyw5IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKip0Y3BfYWxsb2NfbWQ1c2lnX3Bvb2woc3RydWN0IHNvY2sgKnNrKQorc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqIF9fcGVyY3B1ICp0Y3BfYWxsb2NfbWQ1c2lnX3Bvb2woc3RydWN0IHNvY2sgKnNrKQogewotCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKipwb29sOworCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKiBfX3BlcmNwdSAqcG9vbDsKIAlpbnQgYWxsb2MgPSAwOwogCiByZXRyeToKQEAgLTI4NzMsNyArMjg4OCw5IEBACiAKIAlpZiAoYWxsb2MpIHsKIAkJLyogd2UgY2Fubm90IGhvbGQgc3BpbmxvY2sgaGVyZSBiZWNhdXNlIHRoaXMgbWF5IHNsZWVwLiAqLwotCQlzdHJ1Y3QgdGNwX21kNXNpZ19wb29sICoqcCA9IF9fdGNwX2FsbG9jX21kNXNpZ19wb29sKHNrKTsKKwkJc3RydWN0IHRjcF9tZDVzaWdfcG9vbCAqIF9fcGVyY3B1ICpwOworCisJCXAgPSBfX3RjcF9hbGxvY19tZDVzaWdfcG9vbChzayk7CiAJCXNwaW5fbG9ja19iaCgmdGNwX21kNXNpZ19wb29sX2xvY2spOwogCQlpZiAoIXApIHsKIAkJCXRjcF9tZDVzaWdfdXNlcnMtLTsKQEAgLTI4OTcsNyArMjkxNCw3IEBACiAKIHN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKl9fdGNwX2dldF9tZDVzaWdfcG9vbChpbnQgY3B1KQogewotCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKipwOworCXN0cnVjdCB0Y3BfbWQ1c2lnX3Bvb2wgKiBfX3BlcmNwdSAqcDsKIAlzcGluX2xvY2tfYmgoJnRjcF9tZDVzaWdfcG9vbF9sb2NrKTsKIAlwID0gdGNwX21kNXNpZ19wb29sOwogCWlmIChwKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCAzZmRkYzY5Li43ODg4NTFjIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYworKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtODksNiArODksOCBAQAogaW50IHN5c2N0bF90Y3BfZnJ0b19yZXNwb25zZSBfX3JlYWRfbW9zdGx5OwogaW50IHN5c2N0bF90Y3Bfbm9tZXRyaWNzX3NhdmUgX19yZWFkX21vc3RseTsKIAoraW50IHN5c2N0bF90Y3BfdGhpbl9kdXBhY2sgX19yZWFkX21vc3RseTsKKwogaW50IHN5c2N0bF90Y3BfbW9kZXJhdGVfcmN2YnVmIF9fcmVhZF9tb3N0bHkgPSAxOwogaW50IHN5c2N0bF90Y3BfYWJjIF9fcmVhZF9tb3N0bHk7CiAKQEAgLTI0NDcsNiArMjQ0OSwxNiBAQAogCQlyZXR1cm4gMTsKIAl9CiAKKwkvKiBJZiBhIHRoaW4gc3RyZWFtIGlzIGRldGVjdGVkLCByZXRyYW5zbWl0IGFmdGVyIGZpcnN0CisJICogcmVjZWl2ZWQgZHVwYWNrLiBFbXBsb3kgb25seSBpZiBTQUNLIGlzIHN1cHBvcnRlZCBpbiBvcmRlcgorCSAqIHRvIGF2b2lkIHBvc3NpYmxlIGNvcm5lci1jYXNlIHNlcmllcyBvZiBzcHVyaW91cyByZXRyYW5zbWlzc2lvbnMKKwkgKiBVc2Ugb25seSBpZiB0aGVyZSBhcmUgbm8gdW5zZW50IGRhdGEuCisJICovCisJaWYgKCh0cC0+dGhpbl9kdXBhY2sgfHwgc3lzY3RsX3RjcF90aGluX2R1cGFjaykgJiYKKwkgICAgdGNwX3N0cmVhbV9pc190aGluKHRwKSAmJiB0Y3BfZHVwYWNrX2hldXJpc3RpY3ModHApID4gMSAmJgorCSAgICB0Y3BfaXNfc2Fjayh0cCkgJiYgIXRjcF9zZW5kX2hlYWQoc2spKQorCQlyZXR1cm4gMTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCA2NWI4ZWJmLi5jMzU4OGI0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTc0Miw5ICs3NDIsOSBAQAogICoJVGhpcyBzdGlsbCBvcGVyYXRlcyBvbiBhIHJlcXVlc3Rfc29jayBvbmx5LCBub3Qgb24gYSBiaWcKICAqCXNvY2tldC4KICAqLwotc3RhdGljIGludCBfX3RjcF92NF9zZW5kX3N5bmFjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKLQkJCQlzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCi0JCQkJc3RydWN0IHJlcXVlc3RfdmFsdWVzICpydnApCitzdGF0aWMgaW50IHRjcF92NF9zZW5kX3N5bmFjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBkc3RfZW50cnkgKmRzdCwKKwkJCSAgICAgIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKKwkJCSAgICAgIHN0cnVjdCByZXF1ZXN0X3ZhbHVlcyAqcnZwKQogewogCWNvbnN0IHN0cnVjdCBpbmV0X3JlcXVlc3Rfc29jayAqaXJlcSA9IGluZXRfcnNrKHJlcSk7CiAJaW50IGVyciA9IC0xOwpAQCAtNzc1LDEwICs3NzUsMTEgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHRjcF92NF9zZW5kX3N5bmFjayhzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcSwKK3N0YXRpYyBpbnQgdGNwX3Y0X3J0eF9zeW5hY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCiAJCQkgICAgICBzdHJ1Y3QgcmVxdWVzdF92YWx1ZXMgKnJ2cCkKIHsKLQlyZXR1cm4gX190Y3BfdjRfc2VuZF9zeW5hY2soc2ssIE5VTEwsIHJlcSwgcnZwKTsKKwlUQ1BfSU5DX1NUQVRTX0JIKHNvY2tfbmV0KHNrKSwgVENQX01JQl9SRVRSQU5TU0VHUyk7CisJcmV0dXJuIHRjcF92NF9zZW5kX3N5bmFjayhzaywgTlVMTCwgcmVxLCBydnApOwogfQogCiAvKgpAQCAtMTE5MiwxMCArMTE5MywxMSBAQAogc3RydWN0IHJlcXVlc3Rfc29ja19vcHMgdGNwX3JlcXVlc3Rfc29ja19vcHMgX19yZWFkX21vc3RseSA9IHsKIAkuZmFtaWx5CQk9CVBGX0lORVQsCiAJLm9ial9zaXplCT0Jc2l6ZW9mKHN0cnVjdCB0Y3BfcmVxdWVzdF9zb2NrKSwKLQkucnR4X3N5bl9hY2sJPQl0Y3BfdjRfc2VuZF9zeW5hY2ssCisJLnJ0eF9zeW5fYWNrCT0JdGNwX3Y0X3J0eF9zeW5hY2ssCiAJLnNlbmRfYWNrCT0JdGNwX3Y0X3JlcXNrX3NlbmRfYWNrLAogCS5kZXN0cnVjdG9yCT0JdGNwX3Y0X3JlcXNrX2Rlc3RydWN0b3IsCiAJLnNlbmRfcmVzZXQJPQl0Y3BfdjRfc2VuZF9yZXNldCwKKwkuc3luX2Fja190aW1lb3V0ID0gCXRjcF9zeW5fYWNrX3RpbWVvdXQsCiB9OwogCiAjaWZkZWYgQ09ORklHX1RDUF9NRDVTSUcKQEAgLTEzNzMsOCArMTM3NSw4IEBACiAJfQogCXRjcF9yc2socmVxKS0+c250X2lzbiA9IGlzbjsKIAotCWlmIChfX3RjcF92NF9zZW5kX3N5bmFjayhzaywgZHN0LCByZXEsCi0JCQkJIChzdHJ1Y3QgcmVxdWVzdF92YWx1ZXMgKikmdG1wX2V4dCkgfHwKKwlpZiAodGNwX3Y0X3NlbmRfc3luYWNrKHNrLCBkc3QsIHJlcSwKKwkJCSAgICAgICAoc3RydWN0IHJlcXVlc3RfdmFsdWVzICopJnRtcF9leHQpIHx8CiAJICAgIHdhbnRfY29va2llKQogCQlnb3RvIGRyb3BfYW5kX2ZyZWU7CiAKQEAgLTE2NDksNiArMTY1MSw5IEBACiAJaWYgKCFzaykKIAkJZ290byBub190Y3Bfc29ja2V0OwogCisJaWYgKGlwaC0+dHRsIDwgaW5ldF9zayhzayktPm1pbl90dGwpCisJCWdvdG8gZGlzY2FyZF9hbmRfcmVsc2U7CisKIHByb2Nlc3M6CiAJaWYgKHNrLT5za19zdGF0ZSA9PSBUQ1BfVElNRV9XQUlUKQogCQlnb3RvIGRvX3RpbWVfd2FpdDsKQEAgLTI0MjUsMTIgKzI0MzAsMTIgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCB0Y3A0X3Byb2NfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IHRjcDRfcHJvY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJcmV0dXJuIHRjcF9wcm9jX3JlZ2lzdGVyKG5ldCwgJnRjcDRfc2VxX2FmaW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkIHRjcDRfcHJvY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IHRjcDRfcHJvY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJdGNwX3Byb2NfdW5yZWdpc3RlcihuZXQsICZ0Y3A0X3NlcV9hZmluZm8pOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IDM4M2NlMjMuLjRhMTYwNWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTE4Myw3ICsxODMsOCBAQAogICovCiB2b2lkIHRjcF9zZWxlY3RfaW5pdGlhbF93aW5kb3coaW50IF9fc3BhY2UsIF9fdTMyIG1zcywKIAkJCSAgICAgICBfX3UzMiAqcmN2X3duZCwgX191MzIgKndpbmRvd19jbGFtcCwKLQkJCSAgICAgICBpbnQgd3NjYWxlX29rLCBfX3U4ICpyY3Zfd3NjYWxlKQorCQkJICAgICAgIGludCB3c2NhbGVfb2ssIF9fdTggKnJjdl93c2NhbGUsCisJCQkgICAgICAgX191MzIgaW5pdF9yY3Zfd25kKQogewogCXVuc2lnbmVkIGludCBzcGFjZSA9IChfX3NwYWNlIDwgMCA/IDAgOiBfX3NwYWNlKTsKIApAQCAtMjMyLDcgKzIzMywxMyBAQAogCQkJaW5pdF9jd25kID0gMjsKIAkJZWxzZSBpZiAobXNzID4gMTQ2MCkKIAkJCWluaXRfY3duZCA9IDM7Ci0JCWlmICgqcmN2X3duZCA+IGluaXRfY3duZCAqIG1zcykKKwkJLyogd2hlbiBpbml0aWFsaXppbmcgdXNlIHRoZSB2YWx1ZSBmcm9tIGluaXRfcmN2X3duZAorCQkgKiByYXRoZXIgdGhhbiB0aGUgZGVmYXVsdCBmcm9tIGFib3ZlCisJCSAqLworCQlpZiAoaW5pdF9yY3Zfd25kICYmCisJCSAgICAoKnJjdl93bmQgPiBpbml0X3Jjdl93bmQgKiBtc3MpKQorCQkJKnJjdl93bmQgPSBpbml0X3Jjdl93bmQgKiBtc3M7CisJCWVsc2UgaWYgKCpyY3Zfd25kID4gaW5pdF9jd25kICogbXNzKQogCQkJKnJjdl93bmQgPSBpbml0X2N3bmQgKiBtc3M7CiAJfQogCkBAIC0xNzk0LDExICsxODAxLDYgQEAKIHZvaWQgX190Y3BfcHVzaF9wZW5kaW5nX2ZyYW1lcyhzdHJ1Y3Qgc29jayAqc2ssIHVuc2lnbmVkIGludCBjdXJfbXNzLAogCQkJICAgICAgIGludCBub25hZ2xlKQogewotCXN0cnVjdCBza19idWZmICpza2IgPSB0Y3Bfc2VuZF9oZWFkKHNrKTsKLQotCWlmICghc2tiKQotCQlyZXR1cm47Ci0KIAkvKiBJZiB3ZSBhcmUgY2xvc2VkLCB0aGUgYnl0ZXMgd2lsbCBoYXZlIHRvIHJlbWFpbiBoZXJlLgogCSAqIEluIHRpbWUgY2xvc2Vkb3duIHdpbGwgZmluaXNoLCB3ZSBlbXB0eSB0aGUgd3JpdGUgcXVldWUgYW5kCiAJICogYWxsIHdpbGwgYmUgaGFwcHkuCkBAIC0yNDIyLDcgKzI0MjQsOCBAQAogCQkJJnJlcS0+cmN2X3duZCwKIAkJCSZyZXEtPndpbmRvd19jbGFtcCwKIAkJCWlyZXEtPndzY2FsZV9vaywKLQkJCSZyY3Zfd3NjYWxlKTsKKwkJCSZyY3Zfd3NjYWxlLAorCQkJZHN0X21ldHJpYyhkc3QsIFJUQVhfSU5JVFJXTkQpKTsKIAkJaXJlcS0+cmN2X3dzY2FsZSA9IHJjdl93c2NhbGU7CiAJfQogCkBAIC0yNTQ5LDcgKzI1NTIsOCBAQAogCQkJCSAgJnRwLT5yY3Zfd25kLAogCQkJCSAgJnRwLT53aW5kb3dfY2xhbXAsCiAJCQkJICBzeXNjdGxfdGNwX3dpbmRvd19zY2FsaW5nLAotCQkJCSAgJnJjdl93c2NhbGUpOworCQkJCSAgJnJjdl93c2NhbGUsCisJCQkJICBkc3RfbWV0cmljKGRzdCwgUlRBWF9JTklUUldORCkpOwogCiAJdHAtPnJ4X29wdC5yY3Zfd3NjYWxlID0gcmN2X3dzY2FsZTsKIAl0cC0+cmN2X3NzdGhyZXNoID0gdHAtPnJjdl93bmQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfdGltZXIuYyBiL25ldC9pcHY0L3RjcF90aW1lci5jCmluZGV4IDg4MTZhMjAuLmIyZTZiYmMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF90aW1lci5jCisrKyBiL25ldC9pcHY0L3RjcF90aW1lci5jCkBAIC0yOSw2ICsyOSw3IEBACiBpbnQgc3lzY3RsX3RjcF9yZXRyaWVzMSBfX3JlYWRfbW9zdGx5ID0gVENQX1JFVFIxOwogaW50IHN5c2N0bF90Y3BfcmV0cmllczIgX19yZWFkX21vc3RseSA9IFRDUF9SRVRSMjsKIGludCBzeXNjdGxfdGNwX29ycGhhbl9yZXRyaWVzIF9fcmVhZF9tb3N0bHk7CitpbnQgc3lzY3RsX3RjcF90aGluX2xpbmVhcl90aW1lb3V0cyBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgdm9pZCB0Y3Bfd3JpdGVfdGltZXIodW5zaWduZWQgbG9uZyk7CiBzdGF0aWMgdm9pZCB0Y3BfZGVsYWNrX3RpbWVyKHVuc2lnbmVkIGxvbmcpOwpAQCAtMTMzLDcgKzEzNCw3IEBACiB9CiAKIC8qIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyBhICJ0aW1lb3V0IiB3aGljaCBpcyBlcXVpdmFsZW50IHRvIHRoZSB0aW1lb3V0IG9mIGEKLSAqIFRDUCBjb25uZWN0aW9uIGFmdGVyICJib3VuZGFyeSIgdW5zdWNlc3NmdWwsIGV4cG9uZW50aWFsbHkgYmFja2VkLW9mZgorICogVENQIGNvbm5lY3Rpb24gYWZ0ZXIgImJvdW5kYXJ5IiB1bnN1Y2Nlc3NmdWwsIGV4cG9uZW50aWFsbHkgYmFja2VkLW9mZgogICogcmV0cmFuc21pc3Npb25zIHdpdGggYW4gaW5pdGlhbCBSVE8gb2YgVENQX1JUT19NSU4uCiAgKi8KIHN0YXRpYyBib29sIHJldHJhbnNtaXRzX3RpbWVkX291dChzdHJ1Y3Qgc29jayAqc2ssCkBAIC00MTUsNyArNDE2LDI1IEBACiAJaWNzay0+aWNza19yZXRyYW5zbWl0cysrOwogCiBvdXRfcmVzZXRfdGltZXI6Ci0JaWNzay0+aWNza19ydG8gPSBtaW4oaWNzay0+aWNza19ydG8gPDwgMSwgVENQX1JUT19NQVgpOworCS8qIElmIHN0cmVhbSBpcyB0aGluLCB1c2UgbGluZWFyIHRpbWVvdXRzLiBTaW5jZSAnaWNza19iYWNrb2ZmJyBpcworCSAqIHVzZWQgdG8gcmVzZXQgdGltZXIsIHNldCB0byAwLiBSZWNhbGN1bGF0ZSAnaWNza19ydG8nIGFzIHRoaXMKKwkgKiBtaWdodCBiZSBpbmNyZWFzZWQgaWYgdGhlIHN0cmVhbSBvc2NpbGxhdGVzIGJldHdlZW4gdGhpbiBhbmQgdGhpY2ssCisJICogdGh1cyB0aGUgb2xkIHZhbHVlIG1pZ2h0IGFscmVhZHkgYmUgdG9vIGhpZ2ggY29tcGFyZWQgdG8gdGhlIHZhbHVlCisJICogc2V0IGJ5ICd0Y3Bfc2V0X3J0bycgaW4gdGNwX2lucHV0LmMgd2hpY2ggcmVzZXRzIHRoZSBydG8gd2l0aG91dAorCSAqIGJhY2tvZmYuIExpbWl0IHRvIFRDUF9USElOX0xJTkVBUl9SRVRSSUVTIGJlZm9yZSBpbml0aWF0aW5nCisJICogZXhwb25lbnRpYWwgYmFja29mZiBiZWhhdmlvdXIgdG8gYXZvaWQgY29udGludWUgaGFtbWVyaW5nCisJICogbGluZWFyLXRpbWVvdXQgcmV0cmFuc21pc3Npb25zIGludG8gYSBibGFjayBob2xlCisJICovCisJaWYgKHNrLT5za19zdGF0ZSA9PSBUQ1BfRVNUQUJMSVNIRUQgJiYKKwkgICAgKHRwLT50aGluX2x0byB8fCBzeXNjdGxfdGNwX3RoaW5fbGluZWFyX3RpbWVvdXRzKSAmJgorCSAgICB0Y3Bfc3RyZWFtX2lzX3RoaW4odHApICYmCisJICAgIGljc2stPmljc2tfcmV0cmFuc21pdHMgPD0gVENQX1RISU5fTElORUFSX1JFVFJJRVMpIHsKKwkJaWNzay0+aWNza19iYWNrb2ZmID0gMDsKKwkJaWNzay0+aWNza19ydG8gPSBtaW4oX190Y3Bfc2V0X3J0byh0cCksIFRDUF9SVE9fTUFYKTsKKwl9IGVsc2UgeworCQkvKiBVc2Ugbm9ybWFsIChleHBvbmVudGlhbCkgYmFja29mZiAqLworCQlpY3NrLT5pY3NrX3J0byA9IG1pbihpY3NrLT5pY3NrX3J0byA8PCAxLCBUQ1BfUlRPX01BWCk7CisJfQogCWluZXRfY3NrX3Jlc2V0X3htaXRfdGltZXIoc2ssIElDU0tfVElNRV9SRVRSQU5TLCBpY3NrLT5pY3NrX3J0bywgVENQX1JUT19NQVgpOwogCWlmIChyZXRyYW5zbWl0c190aW1lZF9vdXQoc2ssIHN5c2N0bF90Y3BfcmV0cmllczEgKyAxKSkKIAkJX19za19kc3RfcmVzZXQoc2spOwpAQCAtNDc0LDYgKzQ5MywxMiBAQAogCQkJCSAgIFRDUF9USU1FT1VUX0lOSVQsIFRDUF9SVE9fTUFYKTsKIH0KIAordm9pZCB0Y3Bfc3luX2Fja190aW1lb3V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHJlcXVlc3Rfc29jayAqcmVxKQoreworCU5FVF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBMSU5VWF9NSUJfVENQVElNRU9VVFMpOworfQorRVhQT1JUX1NZTUJPTCh0Y3Bfc3luX2Fja190aW1lb3V0KTsKKwogdm9pZCB0Y3Bfc2V0X2tlZXBhbGl2ZShzdHJ1Y3Qgc29jayAqc2ssIGludCB2YWwpCiB7CiAJaWYgKCgxIDw8IHNrLT5za19zdGF0ZSkgJiAoVENQRl9DTE9TRSB8IFRDUEZfTElTVEVOKSkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcC5jIGIvbmV0L2lwdjQvdWRwLmMKaW5kZXggZjAxMjZmZC4uNjA4YTU0NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdWRwLmMKKysrIGIvbmV0L2lwdjQvdWRwLmMKQEAgLTExMTcsNyArMTExNyw3IEBACiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW1zZy0+bXNnX25hbWU7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQl1bnNpZ25lZCBpbnQgdWxlbiwgY29waWVkOworCXVuc2lnbmVkIGludCB1bGVuOwogCWludCBwZWVrZWQ7CiAJaW50IGVycjsKIAlpbnQgaXNfdWRwbGl0ZSA9IElTX1VEUExJVEUoc2spOwpAQCAtMTEzOCwxMCArMTEzOCw5IEBACiAJCWdvdG8gb3V0OwogCiAJdWxlbiA9IHNrYi0+bGVuIC0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCWNvcGllZCA9IGxlbjsKLQlpZiAoY29waWVkID4gdWxlbikKLQkJY29waWVkID0gdWxlbjsKLQllbHNlIGlmIChjb3BpZWQgPCB1bGVuKQorCWlmIChsZW4gPiB1bGVuKQorCQlsZW4gPSB1bGVuOworCWVsc2UgaWYgKGxlbiA8IHVsZW4pCiAJCW1zZy0+bXNnX2ZsYWdzIHw9IE1TR19UUlVOQzsKIAogCS8qCkBAIC0xMTUwLDE0ICsxMTQ5LDE0IEBACiAJICogY292ZXJhZ2UgY2hlY2tzdW0gKFVEUC1MaXRlKSwgZG8gaXQgYmVmb3JlIHRoZSBjb3B5LgogCSAqLwogCi0JaWYgKGNvcGllZCA8IHVsZW4gfHwgVURQX1NLQl9DQihza2IpLT5wYXJ0aWFsX2NvdikgeworCWlmIChsZW4gPCB1bGVuIHx8IFVEUF9TS0JfQ0Ioc2tiKS0+cGFydGlhbF9jb3YpIHsKIAkJaWYgKHVkcF9saWJfY2hlY2tzdW1fY29tcGxldGUoc2tiKSkKIAkJCWdvdG8gY3N1bV9jb3B5X2VycjsKIAl9CiAKIAlpZiAoc2tiX2NzdW1fdW5uZWNlc3Nhcnkoc2tiKSkKIAkJZXJyID0gc2tiX2NvcHlfZGF0YWdyYW1faW92ZWMoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkciksCi0JCQkJCSAgICAgIG1zZy0+bXNnX2lvdiwgY29waWVkKTsKKwkJCQkJICAgICAgbXNnLT5tc2dfaW92LCBsZW4pOwogCWVsc2UgewogCQllcnIgPSBza2JfY29weV9hbmRfY3N1bV9kYXRhZ3JhbV9pb3ZlYyhza2IsCiAJCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLApAQCAtMTE4Niw3ICsxMTg1LDcgQEAKIAlpZiAoaW5ldC0+Y21zZ19mbGFncykKIAkJaXBfY21zZ19yZWN2KG1zZywgc2tiKTsKIAotCWVyciA9IGNvcGllZDsKKwllcnIgPSBsZW47CiAJaWYgKGZsYWdzICYgTVNHX1RSVU5DKQogCQllcnIgPSB1bGVuOwogCkBAIC0yMDI3LDEyICsyMDI2LDEyIEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgdWRwNF9wcm9jX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCB1ZHA0X3Byb2NfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCXJldHVybiB1ZHBfcHJvY19yZWdpc3RlcihuZXQsICZ1ZHA0X3NlcV9hZmluZm8pOwogfQogCi1zdGF0aWMgdm9pZCB1ZHA0X3Byb2NfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCB1ZHA0X3Byb2NfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCXVkcF9wcm9jX3VucmVnaXN0ZXIobmV0LCAmdWRwNF9zZXFfYWZpbmZvKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3VkcGxpdGUuYyBiL25ldC9pcHY0L3VkcGxpdGUuYwppbmRleCA2NmY3OTUxLi42NjEwYmY3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC91ZHBsaXRlLmMKKysrIGIvbmV0L2lwdjQvdWRwbGl0ZS5jCkBAIC04MSwxMiArODEsMTIgQEAKIAl9LAogfTsKIAotc3RhdGljIGludCB1ZHBsaXRlNF9wcm9jX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCB1ZHBsaXRlNF9wcm9jX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlyZXR1cm4gdWRwX3Byb2NfcmVnaXN0ZXIobmV0LCAmdWRwbGl0ZTRfc2VxX2FmaW5mbyk7CiB9CiAKLXN0YXRpYyB2b2lkIHVkcGxpdGU0X3Byb2NfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCB1ZHBsaXRlNF9wcm9jX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAl1ZHBfcHJvY191bnJlZ2lzdGVyKG5ldCwgJnVkcGxpdGU0X3NlcV9hZmluZm8pOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmMKaW5kZXggMTQzNzkxZC4uODhmZDhjNSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYworKysgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC0yNzgsMzEgKzI3OCwzMSBAQAogCiBzdGF0aWMgaW50IHNubXA2X2FsbG9jX2RldihzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogewotCWlmIChzbm1wX21pYl9pbml0KCh2b2lkICoqKWlkZXYtPnN0YXRzLmlwdjYsCisJaWYgKHNubXBfbWliX2luaXQoKHZvaWQgX19wZXJjcHUgKiopaWRldi0+c3RhdHMuaXB2NiwKIAkJCSAgc2l6ZW9mKHN0cnVjdCBpcHN0YXRzX21pYikpIDwgMCkKIAkJZ290byBlcnJfaXA7Ci0JaWYgKHNubXBfbWliX2luaXQoKHZvaWQgKiopaWRldi0+c3RhdHMuaWNtcHY2LAorCWlmIChzbm1wX21pYl9pbml0KCh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmljbXB2NiwKIAkJCSAgc2l6ZW9mKHN0cnVjdCBpY21wdjZfbWliKSkgPCAwKQogCQlnb3RvIGVycl9pY21wOwotCWlmIChzbm1wX21pYl9pbml0KCh2b2lkICoqKWlkZXYtPnN0YXRzLmljbXB2Nm1zZywKKwlpZiAoc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pY21wdjZtc2csCiAJCQkgIHNpemVvZihzdHJ1Y3QgaWNtcHY2bXNnX21pYikpIDwgMCkKIAkJZ290byBlcnJfaWNtcG1zZzsKIAogCXJldHVybiAwOwogCiBlcnJfaWNtcG1zZzoKLQlzbm1wX21pYl9mcmVlKCh2b2lkICoqKWlkZXYtPnN0YXRzLmljbXB2Nik7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pY21wdjYpOwogZXJyX2ljbXA6Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKilpZGV2LT5zdGF0cy5pcHY2KTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmlwdjYpOwogZXJyX2lwOgogCXJldHVybiAtRU5PTUVNOwogfQogCiBzdGF0aWMgdm9pZCBzbm1wNl9mcmVlX2RldihzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogewotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopaWRldi0+c3RhdHMuaWNtcHY2bXNnKTsKLQlzbm1wX21pYl9mcmVlKCh2b2lkICoqKWlkZXYtPnN0YXRzLmljbXB2Nik7Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKilpZGV2LT5zdGF0cy5pcHY2KTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmljbXB2Nm1zZyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pY21wdjYpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopaWRldi0+c3RhdHMuaXB2Nik7CiB9CiAKIC8qIE5vYm9keSByZWZlcnMgdG8gdGhpcyBkZXZpY2UsIHdlIG1heSBkZXN0cm95IGl0LiAqLwpAQCAtOTkyLDggKzk5Miw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGlwdjZfc2FkZHJfcHJlZmVycmVkKGludCB0eXBlKQogewotCWlmICh0eXBlICYgKElQVjZfQUREUl9NQVBQRUR8SVBWNl9BRERSX0NPTVBBVHY0fAotCQkgICAgSVBWNl9BRERSX0xPT1BCQUNLfElQVjZfQUREUl9SRVNFUlZFRCkpCisJaWYgKHR5cGUgJiAoSVBWNl9BRERSX01BUFBFRHxJUFY2X0FERFJfQ09NUEFUdjR8SVBWNl9BRERSX0xPT1BCQUNLKSkKIAkJcmV0dXJuIDE7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNjQ5LDcgKzI2NDgsOCBAQAogCiAJCXdyaXRlX2xvY2tfYmgoJmFkZHJjb25mX2hhc2hfbG9jayk7CiAJCXdoaWxlICgoaWZhID0gKmJpZmEpICE9IE5VTEwpIHsKLQkJCWlmIChpZmEtPmlkZXYgPT0gaWRldikgeworCQkJaWYgKGlmYS0+aWRldiA9PSBpZGV2ICYmCisJCQkgICAgKGhvdyB8fCAhKGlmYS0+ZmxhZ3MmSUZBX0ZfUEVSTUFORU5UKSkpIHsKIAkJCQkqYmlmYSA9IGlmYS0+bHN0X25leHQ7CiAJCQkJaWZhLT5sc3RfbmV4dCA9IE5VTEw7CiAJCQkJYWRkcmNvbmZfZGVsX3RpbWVyKGlmYSk7CkBAIC0yNjg5LDE4ICsyNjg5LDMwIEBACiAJCXdyaXRlX2xvY2tfYmgoJmlkZXYtPmxvY2spOwogCX0KICNlbmRpZgotCXdoaWxlICgoaWZhID0gaWRldi0+YWRkcl9saXN0KSAhPSBOVUxMKSB7Ci0JCWlkZXYtPmFkZHJfbGlzdCA9IGlmYS0+aWZfbmV4dDsKLQkJaWZhLT5pZl9uZXh0ID0gTlVMTDsKLQkJaWZhLT5kZWFkID0gMTsKLQkJYWRkcmNvbmZfZGVsX3RpbWVyKGlmYSk7Ci0JCXdyaXRlX3VubG9ja19iaCgmaWRldi0+bG9jayk7CisJYmlmYSA9ICZpZGV2LT5hZGRyX2xpc3Q7CisJd2hpbGUgKChpZmEgPSAqYmlmYSkgIT0gTlVMTCkgeworCQlpZiAoaG93ID09IDAgJiYgKGlmYS0+ZmxhZ3MmSUZBX0ZfUEVSTUFORU5UKSkgeworCQkJLyogUmV0YWluIHBlcm1hbmVudCBhZGRyZXNzIG9uIGFkbWluIGRvd24gKi8KKwkJCWJpZmEgPSAmaWZhLT5pZl9uZXh0OwogCi0JCV9faXB2Nl9pZmFfbm90aWZ5KFJUTV9ERUxBRERSLCBpZmEpOwotCQlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmaW5ldDZhZGRyX2NoYWluLCBORVRERVZfRE9XTiwgaWZhKTsKLQkJaW42X2lmYV9wdXQoaWZhKTsKKwkJCS8qIFJlc3RhcnQgREFEIGlmIG5lZWRlZCB3aGVuIGxpbmsgY29tZXMgYmFjayB1cCAqLworCQkJaWYgKCAhKChkZXYtPmZsYWdzJihJRkZfTk9BUlB8SUZGX0xPT1BCQUNLKSkgfHwKKwkJCSAgICAgICBpZGV2LT5jbmYuYWNjZXB0X2RhZCA8PSAwIHx8CisJCQkgICAgICAgKGlmYS0+ZmxhZ3MgJiBJRkFfRl9OT0RBRCkpKQorCQkJCWlmYS0+ZmxhZ3MgfD0gSUZBX0ZfVEVOVEFUSVZFOworCQl9IGVsc2UgeworCQkJKmJpZmEgPSBpZmEtPmlmX25leHQ7CisJCQlpZmEtPmlmX25leHQgPSBOVUxMOwogCi0JCXdyaXRlX2xvY2tfYmgoJmlkZXYtPmxvY2spOworCQkJaWZhLT5kZWFkID0gMTsKKwkJCXdyaXRlX3VubG9ja19iaCgmaWRldi0+bG9jayk7CisKKwkJCV9faXB2Nl9pZmFfbm90aWZ5KFJUTV9ERUxBRERSLCBpZmEpOworCQkJYXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oJmluZXQ2YWRkcl9jaGFpbiwgTkVUREVWX0RPV04sIGlmYSk7CisJCQlpbjZfaWZhX3B1dChpZmEpOworCisJCQl3cml0ZV9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKKwkJfQogCX0KIAl3cml0ZV91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwogCkBAIC0yNzkyLDE0ICsyODA0LDE0IEBACiAJcmVhZF9sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAlpZiAoaWZwLT5kZWFkKQogCQlnb3RvIG91dDsKLQlzcGluX2xvY2tfYmgoJmlmcC0+bG9jayk7CiAKKwlzcGluX2xvY2soJmlmcC0+bG9jayk7CiAJaWYgKGRldi0+ZmxhZ3MmKElGRl9OT0FSUHxJRkZfTE9PUEJBQ0spIHx8CiAJICAgIGlkZXYtPmNuZi5hY2NlcHRfZGFkIDwgMSB8fAogCSAgICAhKGlmcC0+ZmxhZ3MmSUZBX0ZfVEVOVEFUSVZFKSB8fAogCSAgICBpZnAtPmZsYWdzICYgSUZBX0ZfTk9EQUQpIHsKIAkJaWZwLT5mbGFncyAmPSB+KElGQV9GX1RFTlRBVElWRXxJRkFfRl9PUFRJTUlTVElDfElGQV9GX0RBREZBSUxFRCk7Ci0JCXNwaW5fdW5sb2NrX2JoKCZpZnAtPmxvY2spOworCQlzcGluX3VubG9jaygmaWZwLT5sb2NrKTsKIAkJcmVhZF91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwogCiAJCWFkZHJjb25mX2RhZF9jb21wbGV0ZWQoaWZwKTsKQEAgLTI4MDcsNyArMjgxOSw3IEBACiAJfQogCiAJaWYgKCEoaWRldi0+aWZfZmxhZ3MgJiBJRl9SRUFEWSkpIHsKLQkJc3Bpbl91bmxvY2tfYmgoJmlmcC0+bG9jayk7CisJCXNwaW5fdW5sb2NrKCZpZnAtPmxvY2spOwogCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7CiAJCS8qCiAJCSAqIElmIHRoZSBkZXZpY2UgaXMgbm90IHJlYWR5OgpAQCAtMjgyNyw3ICsyODM5LDcgQEAKIAkJaXA2X2luc19ydChpZnAtPnJ0KTsKIAogCWFkZHJjb25mX2RhZF9raWNrKGlmcCk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmlmcC0+bG9jayk7CisJc3Bpbl91bmxvY2soJmlmcC0+bG9jayk7CiBvdXQ6CiAJcmVhZF91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwogfQpAQCAtMjg0MywxNCArMjg1NSwxNSBAQAogCQlyZWFkX3VubG9ja19iaCgmaWRldi0+bG9jayk7CiAJCWdvdG8gb3V0OwogCX0KLQlzcGluX2xvY2tfYmgoJmlmcC0+bG9jayk7CisKKwlzcGluX2xvY2soJmlmcC0+bG9jayk7CiAJaWYgKGlmcC0+cHJvYmVzID09IDApIHsKIAkJLyoKIAkJICogREFEIHdhcyBzdWNjZXNzZnVsCiAJCSAqLwogCiAJCWlmcC0+ZmxhZ3MgJj0gfihJRkFfRl9URU5UQVRJVkV8SUZBX0ZfT1BUSU1JU1RJQ3xJRkFfRl9EQURGQUlMRUQpOwotCQlzcGluX3VubG9ja19iaCgmaWZwLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmlmcC0+bG9jayk7CiAJCXJlYWRfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKIAogCQlhZGRyY29uZl9kYWRfY29tcGxldGVkKGlmcCk7CkBAIC0yODYwLDcgKzI4NzMsNyBAQAogCiAJaWZwLT5wcm9iZXMtLTsKIAlhZGRyY29uZl9tb2RfdGltZXIoaWZwLCBBQ19EQUQsIGlmcC0+aWRldi0+bmRfcGFybXMtPnJldHJhbnNfdGltZSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmlmcC0+bG9jayk7CisJc3Bpbl91bmxvY2soJmlmcC0+bG9jayk7CiAJcmVhZF91bmxvY2tfYmgoJmlkZXYtPmxvY2spOwogCiAJLyogc2VuZCBhIG5laWdoYm91ciBzb2xpY2l0YXRpb24gZm9yIG91ciBhZGRyICovCkBAIC0yOTA4LDEyICsyOTIxLDEyIEBACiAKIAlyZWFkX2xvY2tfYmgoJmlkZXYtPmxvY2spOwogCWZvciAoaWZwID0gaWRldi0+YWRkcl9saXN0OyBpZnA7IGlmcCA9IGlmcC0+aWZfbmV4dCkgewotCQlzcGluX2xvY2tfYmgoJmlmcC0+bG9jayk7CisJCXNwaW5fbG9jaygmaWZwLT5sb2NrKTsKIAkJaWYgKCEoaWZwLT5mbGFncyAmIElGQV9GX1RFTlRBVElWRSkpIHsKLQkJCXNwaW5fdW5sb2NrX2JoKCZpZnAtPmxvY2spOworCQkJc3Bpbl91bmxvY2soJmlmcC0+bG9jayk7CiAJCQljb250aW51ZTsKIAkJfQotCQlzcGluX3VubG9ja19iaCgmaWZwLT5sb2NrKTsKKwkJc3Bpbl91bmxvY2soJmlmcC0+bG9jayk7CiAJCWFkZHJjb25mX2RhZF9raWNrKGlmcCk7CiAJfQogCXJlYWRfdW5sb2NrX2JoKCZpZGV2LT5sb2NrKTsKQEAgLTMwMzAsMTQgKzMwNDMsMTQgQEAKIAkucmVsZWFzZQk9IHNlcV9yZWxlYXNlX25ldCwKIH07CiAKLXN0YXRpYyBpbnQgaWY2X3Byb2NfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGlmNl9wcm9jX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgImlmX2luZXQ2IiwgU19JUlVHTywgJmlmNl9mb3BzKSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIGlmNl9wcm9jX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaWY2X3Byb2NfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewogICAgICAgIHByb2NfbmV0X3JlbW92ZShuZXQsICJpZl9pbmV0NiIpOwogfQpAQCAtMzc1NSw4ICszNzY4LDggQEAKIAkJICk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NubXA2X2ZpbGxfc3RhdHModTY0ICpzdGF0cywgdm9pZCAqKm1pYiwgaW50IGl0ZW1zLAotCQkJCSAgICAgIGludCBieXRlcykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NubXA2X2ZpbGxfc3RhdHModTY0ICpzdGF0cywgdm9pZCBfX3BlcmNwdSAqKm1pYiwKKwkJCQkgICAgICBpbnQgaXRlbXMsIGludCBieXRlcykKIHsKIAlpbnQgaTsKIAlpbnQgcGFkID0gYnl0ZXMgLSBzaXplb2YodTY0KSAqIGl0ZW1zOwpAQCAtMzc3NSwxMCArMzc4OCwxMCBAQAogewogCXN3aXRjaChhdHRydHlwZSkgewogCWNhc2UgSUZMQV9JTkVUNl9TVEFUUzoKLQkJX19zbm1wNl9maWxsX3N0YXRzKHN0YXRzLCAodm9pZCAqKilpZGV2LT5zdGF0cy5pcHY2LCBJUFNUQVRTX01JQl9NQVgsIGJ5dGVzKTsKKwkJX19zbm1wNl9maWxsX3N0YXRzKHN0YXRzLCAodm9pZCBfX3BlcmNwdSAqKilpZGV2LT5zdGF0cy5pcHY2LCBJUFNUQVRTX01JQl9NQVgsIGJ5dGVzKTsKIAkJYnJlYWs7CiAJY2FzZSBJRkxBX0lORVQ2X0lDTVA2U1RBVFM6Ci0JCV9fc25tcDZfZmlsbF9zdGF0cyhzdGF0cywgKHZvaWQgKiopaWRldi0+c3RhdHMuaWNtcHY2LCBJQ01QNl9NSUJfTUFYLCBieXRlcyk7CisJCV9fc25tcDZfZmlsbF9zdGF0cyhzdGF0cywgKHZvaWQgX19wZXJjcHUgKiopaWRldi0+c3RhdHMuaWNtcHY2LCBJQ01QNl9NSUJfTUFYLCBieXRlcyk7CiAJCWJyZWFrOwogCX0KIH0KQEAgLTQ0MTQsOCArNDQyNyw3IEBACiAKIHN0YXRpYyB2b2lkIGFkZHJjb25mX3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogewotCW5laWdoX3N5c2N0bF9yZWdpc3RlcihpZGV2LT5kZXYsIGlkZXYtPm5kX3Bhcm1zLCBORVRfSVBWNiwKLQkJCSAgICAgIE5FVF9JUFY2X05FSUdILCAiaXB2NiIsCisJbmVpZ2hfc3lzY3RsX3JlZ2lzdGVyKGlkZXYtPmRldiwgaWRldi0+bmRfcGFybXMsICJpcHY2IiwKIAkJCSAgICAgICZuZGlzY19pZmluZm9fc3lzY3RsX2NoYW5nZSk7CiAJX19hZGRyY29uZl9zeXNjdGxfcmVnaXN0ZXIoZGV2X25ldChpZGV2LT5kZXYpLCBpZGV2LT5kZXYtPm5hbWUsCiAJCQkJCWlkZXYsICZpZGV2LT5jbmYpOwpAQCAtNDQzMCw3ICs0NDQyLDcgQEAKIAogI2VuZGlmCiAKLXN0YXRpYyBpbnQgYWRkcmNvbmZfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGFkZHJjb25mX2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBpcHY2X2RldmNvbmYgKmFsbCwgKmRmbHQ7CkBAIC00NDc5LDcgKzQ0OTEsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZHJjb25mX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgYWRkcmNvbmZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogI2lmZGVmIENPTkZJR19TWVNDVEwKIAlfX2FkZHJjb25mX3N5c2N0bF91bnJlZ2lzdGVyKG5ldC0+aXB2Ni5kZXZjb25mX2RmbHQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmZfY29yZS5jIGIvbmV0L2lwdjYvYWRkcmNvbmZfY29yZS5jCmluZGV4IDNmODJlOTUuLjZiMDM4MjYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mX2NvcmUuYworKysgYi9uZXQvaXB2Ni9hZGRyY29uZl9jb3JlLmMKQEAgLTcyLDcgKzcyLDcgQEAKIAkJCQlJUFY2X0FERFJfU0NPUEVfVFlQRShJUFY2X0FERFJfU0NPUEVfR0xPQkFMKSk7CS8qIGFkZHItc2VsZWN0IDMuMyAqLwogCX0KIAotCXJldHVybiAoSVBWNl9BRERSX1JFU0VSVkVEIHwKKwlyZXR1cm4gKElQVjZfQUREUl9VTklDQVNUIHwKIAkJSVBWNl9BRERSX1NDT1BFX1RZUEUoSVBWNl9BRERSX1NDT1BFX0dMT0JBTCkpOwkvKiBhZGRyLXNlbGVjdCAzLjQgKi8KIH0KIEVYUE9SVF9TWU1CT0woX19pcHY2X2FkZHJfdHlwZSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jIGIvbmV0L2lwdjYvYWZfaW5ldDYuYwppbmRleCAxMmU2OWQzLi4zN2QxNGU3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9hZl9pbmV0Ni5jCisrKyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKQEAgLTk3MSw0MSArOTcxLDQxIEBACiAKIHN0YXRpYyBpbnQgX19uZXRfaW5pdCBpcHY2X2luaXRfbWlicyhzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JaWYgKHNubXBfbWliX2luaXQoKHZvaWQgKiopbmV0LT5taWIudWRwX3N0YXRzX2luNiwKKwlpZiAoc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi51ZHBfc3RhdHNfaW42LAogCQkJICBzaXplb2YgKHN0cnVjdCB1ZHBfbWliKSkgPCAwKQogCQlyZXR1cm4gLUVOT01FTTsKLQlpZiAoc25tcF9taWJfaW5pdCgodm9pZCAqKiluZXQtPm1pYi51ZHBsaXRlX3N0YXRzX2luNiwKKwlpZiAoc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi51ZHBsaXRlX3N0YXRzX2luNiwKIAkJCSAgc2l6ZW9mIChzdHJ1Y3QgdWRwX21pYikpIDwgMCkKIAkJZ290byBlcnJfdWRwbGl0ZV9taWI7Ci0JaWYgKHNubXBfbWliX2luaXQoKHZvaWQgKiopbmV0LT5taWIuaXB2Nl9zdGF0aXN0aWNzLAorCWlmIChzbm1wX21pYl9pbml0KCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLmlwdjZfc3RhdGlzdGljcywKIAkJCSAgc2l6ZW9mKHN0cnVjdCBpcHN0YXRzX21pYikpIDwgMCkKIAkJZ290byBlcnJfaXBfbWliOwotCWlmIChzbm1wX21pYl9pbml0KCh2b2lkICoqKW5ldC0+bWliLmljbXB2Nl9zdGF0aXN0aWNzLAorCWlmIChzbm1wX21pYl9pbml0KCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLmljbXB2Nl9zdGF0aXN0aWNzLAogCQkJICBzaXplb2Yoc3RydWN0IGljbXB2Nl9taWIpKSA8IDApCiAJCWdvdG8gZXJyX2ljbXBfbWliOwotCWlmIChzbm1wX21pYl9pbml0KCh2b2lkICoqKW5ldC0+bWliLmljbXB2Nm1zZ19zdGF0aXN0aWNzLAorCWlmIChzbm1wX21pYl9pbml0KCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLmljbXB2Nm1zZ19zdGF0aXN0aWNzLAogCQkJICBzaXplb2Yoc3RydWN0IGljbXB2Nm1zZ19taWIpKSA8IDApCiAJCWdvdG8gZXJyX2ljbXBtc2dfbWliOwogCXJldHVybiAwOwogCiBlcnJfaWNtcG1zZ19taWI6Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXQtPm1pYi5pY21wdjZfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi5pY21wdjZfc3RhdGlzdGljcyk7CiBlcnJfaWNtcF9taWI6Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXQtPm1pYi5pcHY2X3N0YXRpc3RpY3MpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaXB2Nl9zdGF0aXN0aWNzKTsKIGVycl9pcF9taWI6Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXQtPm1pYi51ZHBsaXRlX3N0YXRzX2luNik7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi51ZHBsaXRlX3N0YXRzX2luNik7CiBlcnJfdWRwbGl0ZV9taWI6Ci0Jc25tcF9taWJfZnJlZSgodm9pZCAqKiluZXQtPm1pYi51ZHBfc3RhdHNfaW42KTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnVkcF9zdGF0c19pbjYpOwogCXJldHVybiAtRU5PTUVNOwogfQogCi1zdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwdjZfY2xlYW51cF9taWJzKHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIGlwdjZfY2xlYW51cF9taWJzKHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLnVkcF9zdGF0c19pbjYpOwotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIudWRwbGl0ZV9zdGF0c19pbjYpOwotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIuaXB2Nl9zdGF0aXN0aWNzKTsKLQlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLmljbXB2Nl9zdGF0aXN0aWNzKTsKLQlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLmljbXB2Nm1zZ19zdGF0aXN0aWNzKTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnVkcF9zdGF0c19pbjYpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIudWRwbGl0ZV9zdGF0c19pbjYpOworCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaXB2Nl9zdGF0aXN0aWNzKTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLmljbXB2Nl9zdGF0aXN0aWNzKTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLmljbXB2Nm1zZ19zdGF0aXN0aWNzKTsKIH0KIAogc3RhdGljIGludCBfX25ldF9pbml0IGluZXQ2X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKQEAgLTEwNDIsNyArMTA0Miw3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgaW5ldDZfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpbmV0Nl9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAl1ZHA2X3Byb2NfZXhpdChuZXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWg2LmMgYi9uZXQvaXB2Ni9haDYuYwppbmRleCBjMmYzMDBjLi41YWM4OTAyIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9haDYuYworKysgYi9uZXQvaXB2Ni9haDYuYwpAQCAtNjE0LDcgKzYxNCw3IEBACiAJICAgIHR5cGUgIT0gSUNNUFY2X1BLVF9UT09CSUcpCiAJCXJldHVybjsKIAotCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsICh4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPmRhZGRyLCBhaC0+c3BpLCBJUFBST1RPX0FILCBBRl9JTkVUNik7CisJeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgc2tiLT5tYXJrLCAoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwgYWgtPnNwaSwgSVBQUk9UT19BSCwgQUZfSU5FVDYpOwogCWlmICgheCkKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hbnljYXN0LmMgYi9uZXQvaXB2Ni9hbnljYXN0LmMKaW5kZXggZjFjNzRjOC4uYzRmNmNhMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYW55Y2FzdC5jCisrKyBiL25ldC9pcHY2L2FueWNhc3QuYwpAQCAtNTM4LDcgKzUzOCw3IEBACiAJLnJlbGVhc2UJPQlzZXFfcmVsZWFzZV9uZXQsCiB9OwogCi1pbnQgYWM2X3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitpbnQgX19uZXRfaW5pdCBhYzZfcHJvY19pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgImFueWNhc3Q2IiwgU19JUlVHTywgJmFjNl9zZXFfZm9wcykpCiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvZXNwNi5jIGIvbmV0L2lwdjYvZXNwNi5jCmluZGV4IDY2OGE0NmIuLmVlOWI5M2IgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2VzcDYuYworKysgYi9uZXQvaXB2Ni9lc3A2LmMKQEAgLTM2NSw3ICszNjUsNyBAQAogCSAgICB0eXBlICE9IElDTVBWNl9QS1RfVE9PQklHKQogCQlyZXR1cm47CiAKLQl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCAoeGZybV9hZGRyZXNzX3QgKikmaXBoLT5kYWRkciwgZXNwaC0+c3BpLCBJUFBST1RPX0VTUCwgQUZfSU5FVDYpOworCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIHNrYi0+bWFyaywgKHhmcm1fYWRkcmVzc190ICopJmlwaC0+ZGFkZHIsIGVzcGgtPnNwaSwgSVBQUk9UT19FU1AsIEFGX0lORVQ2KTsKIAlpZiAoIXgpCiAJCXJldHVybjsKIAlwcmludGsoS0VSTl9ERUJVRyAicG10dSBkaXNjb3Zlcnkgb24gU0EgRVNQLyUwOHgvJXBJNlxuIiwKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2V4dGhkcnMuYyBiL25ldC9pcHY2L2V4dGhkcnMuYwppbmRleCA0YmFjMzYyLi4wNzRmMmMwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9leHRoZHJzLmMKKysrIGIvbmV0L2lwdjYvZXh0aGRycy5jCkBAIC00ODEsNyArNDgxLDcgQEAKIAkJCUlQNl9JTkNfU1RBVFNfQkgobmV0LCBpcDZfZHN0X2lkZXYoc2tiX2RzdChza2IpKSwKIAkJCQkJIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKIAkJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULAotCQkJCSAgICAwLCBza2ItPmRldik7CisJCQkJICAgIDApOwogCQkJa2ZyZWVfc2tiKHNrYik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L2ZpYjZfcnVsZXMuYyBiL25ldC9pcHY2L2ZpYjZfcnVsZXMuYwppbmRleCBiN2FhN2M2Li41NTE4ODJiIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9maWI2X3J1bGVzLmMKKysrIGIvbmV0L2lwdjYvZmliNl9ydWxlcy5jCkBAIC0yNjIsNyArMjYyLDcgQEAKIAkuZnJvX25ldAkJPSAmaW5pdF9uZXQsCiB9OwogCi1zdGF0aWMgaW50IGZpYjZfcnVsZXNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGZpYjZfcnVsZXNfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBmaWJfcnVsZXNfb3BzICpvcHM7CiAJaW50IGVyciA9IC1FTk9NRU07CkBAIC0yOTEsNyArMjkxLDcgQEAKIAlnb3RvIG91dDsKIH0KIAotc3RhdGljIHZvaWQgZmliNl9ydWxlc19uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGZpYjZfcnVsZXNfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewogCWZpYl9ydWxlc191bnJlZ2lzdGVyKG5ldC0+aXB2Ni5maWI2X3J1bGVzX29wcyk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pY21wLmMgYi9uZXQvaXB2Ni9pY21wLmMKaW5kZXggNGFlNjYxYi4uZWI5YWJlMiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaWNtcC5jCisrKyBiL25ldC9pcHY2L2ljbXAuYwpAQCAtNjcsMTEgKzY3LDYgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIAotREVGSU5FX1NOTVBfU1RBVChzdHJ1Y3QgaWNtcHY2X21pYiwgaWNtcHY2X3N0YXRpc3RpY3MpIF9fcmVhZF9tb3N0bHk7Ci1FWFBPUlRfU1lNQk9MKGljbXB2Nl9zdGF0aXN0aWNzKTsKLURFRklORV9TTk1QX1NUQVQoc3RydWN0IGljbXB2Nm1zZ19taWIsIGljbXB2Nm1zZ19zdGF0aXN0aWNzKSBfX3JlYWRfbW9zdGx5OwotRVhQT1JUX1NZTUJPTChpY21wdjZtc2dfc3RhdGlzdGljcyk7Ci0KIC8qCiAgKglUaGUgSUNNUCBzb2NrZXQocykuIFRoaXMgaXMgdGhlIG1vc3QgY29udmVuaWVudCB3YXkgdG8gZmxvdyBjb250cm9sCiAgKglvdXIgSUNNUCBvdXRwdXQgYXMgd2VsbCBhcyBtYWludGFpbiBhIGNsZWFuIGludGVyZmFjZSB0aHJvdWdob3V0CkBAIC0xMTksNyArMTE0LDcgQEAKICAqLwogdm9pZCBpY21wdjZfcGFyYW1fcHJvYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBjb2RlLCBpbnQgcG9zKQogewotCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BBUkFNUFJPQiwgY29kZSwgcG9zLCBza2ItPmRldik7CisJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEFSQU1QUk9CLCBjb2RlLCBwb3MpOwogCWtmcmVlX3NrYihza2IpOwogfQogCkBAIC0zMDUsOCArMzAwLDcgQEAKIC8qCiAgKglTZW5kIGFuIElDTVAgbWVzc2FnZSBpbiByZXNwb25zZSB0byBhIHBhY2tldCBpbiBlcnJvcgogICovCi12b2lkIGljbXB2Nl9zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHU4IHR5cGUsIHU4IGNvZGUsIF9fdTMyIGluZm8sCi0JCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQordm9pZCBpY21wdjZfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCB0eXBlLCB1OCBjb2RlLCBfX3UzMiBpbmZvKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCXN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYgPSBOVUxMOwpAQCAtOTUxLDcgKzk0NSw3IEBACiAJeyB9LAogfTsKIAotc3RydWN0IGN0bF90YWJsZSAqaXB2Nl9pY21wX3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0cnVjdCBjdGxfdGFibGUgKiBfX25ldF9pbml0IGlwdjZfaWNtcF9zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9maWIuYyBiL25ldC9pcHY2L2lwNl9maWIuYwppbmRleCAwZTkzY2E1Li4yZjk4NDc5IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfZmliLmMKKysrIGIvbmV0L2lwdjYvaXA2X2ZpYi5jCkBAIC05MywyOSArOTMsMjAgQEAKIAogc3RhdGljIHZvaWQgZmliNl9nY190aW1lcl9jYih1bnNpZ25lZCBsb25nIGFyZyk7CiAKLXN0YXRpYyBzdHJ1Y3QgZmliNl93YWxrZXJfdCBmaWI2X3dhbGtlcl9saXN0ID0gewotCS5wcmV2CT0gJmZpYjZfd2Fsa2VyX2xpc3QsCi0JLm5leHQJPSAmZmliNl93YWxrZXJfbGlzdCwKLX07Ci0KLSNkZWZpbmUgRk9SX1dBTEtFUlModykgZm9yICgodyk9ZmliNl93YWxrZXJfbGlzdC5uZXh0OyAodykgIT0gJmZpYjZfd2Fsa2VyX2xpc3Q7ICh3KT0odyktPm5leHQpCitzdGF0aWMgTElTVF9IRUFEKGZpYjZfd2Fsa2Vycyk7CisjZGVmaW5lIEZPUl9XQUxLRVJTKHcpIGxpc3RfZm9yX2VhY2hfZW50cnkodywgJmZpYjZfd2Fsa2VycywgbGgpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWI2X3dhbGtlcl9saW5rKHN0cnVjdCBmaWI2X3dhbGtlcl90ICp3KQogewogCXdyaXRlX2xvY2tfYmgoJmZpYjZfd2Fsa2VyX2xvY2spOwotCXctPm5leHQgPSBmaWI2X3dhbGtlcl9saXN0Lm5leHQ7Ci0Jdy0+cHJldiA9ICZmaWI2X3dhbGtlcl9saXN0OwotCXctPm5leHQtPnByZXYgPSB3OwotCXctPnByZXYtPm5leHQgPSB3OworCWxpc3RfYWRkKCZ3LT5saCwgJmZpYjZfd2Fsa2Vycyk7CiAJd3JpdGVfdW5sb2NrX2JoKCZmaWI2X3dhbGtlcl9sb2NrKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZpYjZfd2Fsa2VyX3VubGluayhzdHJ1Y3QgZmliNl93YWxrZXJfdCAqdykKIHsKIAl3cml0ZV9sb2NrX2JoKCZmaWI2X3dhbGtlcl9sb2NrKTsKLQl3LT5uZXh0LT5wcmV2ID0gdy0+cHJldjsKLQl3LT5wcmV2LT5uZXh0ID0gdy0+bmV4dDsKLQl3LT5wcmV2ID0gdy0+bmV4dCA9IHc7CisJbGlzdF9kZWwoJnctPmxoKTsKIAl3cml0ZV91bmxvY2tfYmgoJmZpYjZfd2Fsa2VyX2xvY2spOwogfQogc3RhdGljIF9faW5saW5lX18gdTMyIGZpYjZfbmV3X3Nlcm51bSh2b2lkKQpAQCAtMjM5LDcgKzIzMCw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyB2b2lkIGZpYjZfdGFibGVzX2luaXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfaW5pdCBmaWI2X3RhYmxlc19pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlmaWI2X2xpbmtfdGFibGUobmV0LCBuZXQtPmlwdjYuZmliNl9tYWluX3RibCk7CiAJZmliNl9saW5rX3RhYmxlKG5ldCwgbmV0LT5pcHY2LmZpYjZfbG9jYWxfdGJsKTsKQEAgLTI2Miw3ICsyNTMsNyBAQAogCXJldHVybiAoc3RydWN0IGRzdF9lbnRyeSAqKSBsb29rdXAobmV0LCBuZXQtPmlwdjYuZmliNl9tYWluX3RibCwgZmwsIGZsYWdzKTsKIH0KIAotc3RhdGljIHZvaWQgZmliNl90YWJsZXNfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9pbml0IGZpYjZfdGFibGVzX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCWZpYjZfbGlua190YWJsZShuZXQsIG5ldC0+aXB2Ni5maWI2X21haW5fdGJsKTsKIH0KQEAgLTMxOSwxMiArMzEwLDI2IEBACiAJdy0+cm9vdCA9ICZ0YWJsZS0+dGI2X3Jvb3Q7CiAKIAlpZiAoY2ItPmFyZ3NbNF0gPT0gMCkgeworCQl3LT5jb3VudCA9IDA7CisJCXctPnNraXAgPSAwOworCiAJCXJlYWRfbG9ja19iaCgmdGFibGUtPnRiNl9sb2NrKTsKIAkJcmVzID0gZmliNl93YWxrKHcpOwogCQlyZWFkX3VubG9ja19iaCgmdGFibGUtPnRiNl9sb2NrKTsKLQkJaWYgKHJlcyA+IDApCisJCWlmIChyZXMgPiAwKSB7CiAJCQljYi0+YXJnc1s0XSA9IDE7CisJCQljYi0+YXJnc1s1XSA9IHctPnJvb3QtPmZuX3Nlcm51bTsKKwkJfQogCX0gZWxzZSB7CisJCWlmIChjYi0+YXJnc1s1XSAhPSB3LT5yb290LT5mbl9zZXJudW0pIHsKKwkJCS8qIEJlZ2luIGF0IHRoZSByb290IGlmIHRoZSB0cmVlIGNoYW5nZWQgKi8KKwkJCWNiLT5hcmdzWzVdID0gdy0+cm9vdC0+Zm5fc2VybnVtOworCQkJdy0+c3RhdGUgPSBGV1NfSU5JVDsKKwkJCXctPm5vZGUgPSB3LT5yb290OworCQkJdy0+c2tpcCA9IHctPmNvdW50OworCQl9IGVsc2UKKwkJCXctPnNraXAgPSAwOworCiAJCXJlYWRfbG9ja19iaCgmdGFibGUtPnRiNl9sb2NrKTsKIAkJcmVzID0gZmliNl93YWxrX2NvbnRpbnVlKHcpOwogCQlyZWFkX3VubG9ja19iaCgmdGFibGUtPnRiNl9sb2NrKTsKQEAgLTEyNTAsOSArMTI1NSwxOCBAQAogCQkJdy0+bGVhZiA9IGZuLT5sZWFmOwogCQljYXNlIEZXU19DOgogCQkJaWYgKHctPmxlYWYgJiYgZm4tPmZuX2ZsYWdzJlJUTl9SVElORk8pIHsKLQkJCQlpbnQgZXJyID0gdy0+ZnVuYyh3KTsKKwkJCQlpbnQgZXJyOworCisJCQkJaWYgKHctPmNvdW50IDwgdy0+c2tpcCkgeworCQkJCQl3LT5jb3VudCsrOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQllcnIgPSB3LT5mdW5jKHcpOwogCQkJCWlmIChlcnIpCiAJCQkJCXJldHVybiBlcnI7CisKKwkJCQl3LT5jb3VudCsrOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQkJdy0+c3RhdGUgPSBGV1NfVTsKQEAgLTEzNDYsNiArMTM2MCw4IEBACiAJYy53LnJvb3QgPSByb290OwogCWMudy5mdW5jID0gZmliNl9jbGVhbl9ub2RlOwogCWMudy5wcnVuZSA9IHBydW5lOworCWMudy5jb3VudCA9IDA7CisJYy53LnNraXAgPSAwOwogCWMuZnVuYyA9IGZ1bmM7CiAJYy5hcmcgPSBhcmc7CiAJYy5uZXQgPSBuZXQ7CkBAIC0xNDY5LDcgKzE0ODUsNyBAQAogCWZpYjZfcnVuX2djKDAsIChzdHJ1Y3QgbmV0ICopYXJnKTsKIH0KIAotc3RhdGljIGludCBmaWI2X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBmaWI2X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzZXR1cF90aW1lcigmbmV0LT5pcHY2LmlwNl9maWJfdGltZXIsIGZpYjZfZ2NfdGltZXJfY2IsICh1bnNpZ25lZCBsb25nKW5ldCk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl9mbG93bGFiZWwuYyBiL25ldC9pcHY2L2lwNl9mbG93bGFiZWwuYwppbmRleCA2ZTdiZmZhLi5lNDFlYmE4IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfZmxvd2xhYmVsLmMKKysrIGIvbmV0L2lwdjYvaXA2X2Zsb3dsYWJlbC5jCkBAIC0xNTQsNyArMTU0LDcgQEAKIAl3cml0ZV91bmxvY2soJmlwNl9mbF9sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgaXA2X2ZsX3B1cmdlKHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2X2ZsX3B1cmdlKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpbnQgaTsKIApAQCAtNzM1LDcgKzczNSw3IEBACiAJLnJlbGVhc2UJPQlzZXFfcmVsZWFzZV9uZXQsCiB9OwogCi1zdGF0aWMgaW50IGlwNl9mbG93bGFiZWxfcHJvY19pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBpcDZfZmxvd2xhYmVsX3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJpcDZfZmxvd2xhYmVsIiwKIAkJCQkgIFNfSVJVR08sICZpcDZmbF9zZXFfZm9wcykpCkBAIC03NDMsNyArNzQzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXA2X2Zsb3dsYWJlbF9wcm9jX2Zpbmkoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZfZmxvd2xhYmVsX3Byb2NfZmluaShzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJcHJvY19uZXRfcmVtb3ZlKG5ldCwgImlwNl9mbG93bGFiZWwiKTsKIH0KQEAgLTc1NCwxMSArNzU0LDEwIEBACiB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaXA2X2Zsb3dsYWJlbF9wcm9jX2Zpbmkoc3RydWN0IG5ldCAqbmV0KQogewotCXJldHVybiA7CiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIGlwNl9mbG93bGFiZWxfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZfZmxvd2xhYmVsX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpcDZfZmxfcHVyZ2UobmV0KTsKIAlpcDZfZmxvd2xhYmVsX3Byb2NfZmluaShuZXQpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X2lucHV0LmMgYi9uZXQvaXB2Ni9pcDZfaW5wdXQuYwppbmRleCAyMzdlMmRiLi5lMjhmOTIwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfaW5wdXQuYworKysgYi9uZXQvaXB2Ni9pcDZfaW5wdXQuYwpAQCAtMjE2LDggKzIxNiw3IEBACiAJCQkJSVA2X0lOQ19TVEFUU19CSChuZXQsIGlkZXYsCiAJCQkJCQkgSVBTVEFUU19NSUJfSU5VTktOT1dOUFJPVE9TKTsKIAkJCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QQVJBTVBST0IsCi0JCQkJCSAgICBJQ01QVjZfVU5LX05FWFRIRFIsIG5ob2ZmLAotCQkJCQkgICAgc2tiLT5kZXYpOworCQkJCQkgICAgSUNNUFY2X1VOS19ORVhUSERSLCBuaG9mZik7CiAJCQl9CiAJCX0gZWxzZQogCQkJSVA2X0lOQ19TVEFUU19CSChuZXQsIGlkZXYsIElQU1RBVFNfTUlCX0lOREVMSVZFUlMpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X291dHB1dC5jIGIvbmV0L2lwdjYvaXA2X291dHB1dC5jCmluZGV4IGViNmQwOTcuLmRhYmYxMDggMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwNl9vdXRwdXQuYworKysgYi9uZXQvaXB2Ni9pcDZfb3V0cHV0LmMKQEAgLTI2Nyw3ICsyNjcsNyBAQAogCWlmIChuZXRfcmF0ZWxpbWl0KCkpCiAJCXByaW50ayhLRVJOX0RFQlVHICJJUHY2OiBzZW5kaW5nIHBrdF90b29fYmlnIHRvIHNlbGZcbiIpOwogCXNrYi0+ZGV2ID0gZHN0LT5kZXY7Ci0JaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1LCBza2ItPmRldik7CisJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1KTsKIAlJUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksIElQU1RBVFNfTUlCX0ZSQUdGQUlMUyk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIC1FTVNHU0laRTsKQEAgLTQwMiw2ICs0MDIsNyBAQAogCXN0cnVjdCBpcHY2aGRyICpoZHIgPSBpcHY2X2hkcihza2IpOwogCXN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0ID0gSVA2Q0Ioc2tiKTsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGRzdC0+ZGV2KTsKKwl1MzIgbXR1OwogCiAJaWYgKG5ldC0+aXB2Ni5kZXZjb25mX2FsbC0+Zm9yd2FyZGluZyA9PSAwKQogCQlnb3RvIGVycm9yOwpAQCAtNDQxLDggKzQ0Miw3IEBACiAJaWYgKGhkci0+aG9wX2xpbWl0IDw9IDEpIHsKIAkJLyogRm9yY2UgT1VUUFVUIGRldmljZSB1c2VkIGFzIHNvdXJjZSBhZGRyZXNzICovCiAJCXNrYi0+ZGV2ID0gZHN0LT5kZXY7Ci0JCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0hPUExJTUlULAotCQkJICAgIDAsIHNrYi0+ZGV2KTsKKwkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfVElNRV9FWENFRUQsIElDTVBWNl9FWENfSE9QTElNSVQsIDApOwogCQlJUDZfSU5DX1NUQVRTX0JIKG5ldCwKIAkJCQkgaXA2X2RzdF9pZGV2KGRzdCksIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKTsKIApAQCAtNTA0LDE1ICs1MDQsMTkgQEAKIAkJCWdvdG8gZXJyb3I7CiAJCWlmIChhZGRydHlwZSAmIElQVjZfQUREUl9MSU5LTE9DQUwpIHsKIAkJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X0RFU1RfVU5SRUFDSCwKLQkJCQlJQ01QVjZfTk9UX05FSUdIQk9VUiwgMCwgc2tiLT5kZXYpOworCQkJCSAgICBJQ01QVjZfTk9UX05FSUdIQk9VUiwgMCk7CiAJCQlnb3RvIGVycm9yOwogCQl9CiAJfQogCi0JaWYgKHNrYi0+bGVuID4gZHN0X210dShkc3QpKSB7CisJbXR1ID0gZHN0X210dShkc3QpOworCWlmIChtdHUgPCBJUFY2X01JTl9NVFUpCisJCW10dSA9IElQVjZfTUlOX01UVTsKKworCWlmIChza2ItPmxlbiA+IG10dSkgewogCQkvKiBBZ2FpbiwgZm9yY2UgT1VUUFVUIGRldmljZSB1c2VkIGFzIHNvdXJjZSBhZGRyZXNzICovCiAJCXNrYi0+ZGV2ID0gZHN0LT5kZXY7Ci0JCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIGRzdF9tdHUoZHN0KSwgc2tiLT5kZXYpOworCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUpOwogCQlJUDZfSU5DX1NUQVRTX0JIKG5ldCwKIAkJCQkgaXA2X2RzdF9pZGV2KGRzdCksIElQU1RBVFNfTUlCX0lOVE9PQklHRVJST1JTKTsKIAkJSVA2X0lOQ19TVEFUU19CSChuZXQsCkBAIC02MjIsMTIgKzYyNiwxMSBAQAogCW10dSA9IGlwNl9za2JfZHN0X210dShza2IpOwogCiAJLyogV2UgbXVzdCBub3QgZnJhZ21lbnQgaWYgdGhlIHNvY2tldCBpcyBzZXQgdG8gZm9yY2UgTVRVIGRpc2NvdmVyeQotCSAqIG9yIGlmIHRoZSBza2IgaXQgbm90IGdlbmVyYXRlZCBieSBhIGxvY2FsIHNvY2tldC4gIChUaGlzIGxhc3QKLQkgKiBjaGVjayBzaG91bGQgYmUgcmVkdW5kYW50LCBidXQgaXQncyBmcmVlLikKKwkgKiBvciBpZiB0aGUgc2tiIGl0IG5vdCBnZW5lcmF0ZWQgYnkgYSBsb2NhbCBzb2NrZXQuCiAJICovCiAJaWYgKCFza2ItPmxvY2FsX2RmKSB7CiAJCXNrYi0+ZGV2ID0gc2tiX2RzdChza2IpLT5kZXY7Ci0JCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSwgc2tiLT5kZXYpOworCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUpOwogCQlJUDZfSU5DX1NUQVRTKG5ldCwgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSksCiAJCQkgICAgICBJUFNUQVRTX01JQl9GUkFHRkFJTFMpOwogCQlrZnJlZV9za2Ioc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuYwppbmRleCBkNDUzZDA3Li4xMzg5ODBlIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCkBAIC03NCw3ICs3NCw2IEBACiAJCSAgICAgKGFkZHIpLT5zNl9hZGRyMzJbMl0gXiAoYWRkciktPnM2X2FkZHIzMlszXSkgJiBcCiAJCSAgICAoSEFTSF9TSVpFIC0gMSkpCiAKLXN0YXRpYyB2b2lkIGlwNl9mYl90bmxfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBpcDZfdG5sX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogc3RhdGljIHZvaWQgaXA2X3RubF9kZXZfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKQEAgLTYyMyw3ICs2MjIsNyBAQAogCQlpZiAocnQgJiYgcnQtPnJ0NmlfZGV2KQogCQkJc2tiMi0+ZGV2ID0gcnQtPnJ0NmlfZGV2OwogCi0JCWljbXB2Nl9zZW5kKHNrYjIsIHJlbF90eXBlLCByZWxfY29kZSwgcmVsX2luZm8sIHNrYjItPmRldik7CisJCWljbXB2Nl9zZW5kKHNrYjIsIHJlbF90eXBlLCByZWxfY29kZSwgcmVsX2luZm8pOwogCiAJCWlmIChydCkKIAkJCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOwpAQCAtMTAxNSw3ICsxMDE0LDcgQEAKIAkJdGVsID0gKHN0cnVjdCBpcHY2X3Rsdl90bmxfZW5jX2xpbSAqKSZza2JfbmV0d29ya19oZWFkZXIoc2tiKVtvZmZzZXRdOwogCQlpZiAodGVsLT5lbmNhcF9saW1pdCA9PSAwKSB7CiAJCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QQVJBTVBST0IsCi0JCQkJICAgIElDTVBWNl9IRFJfRklFTEQsIG9mZnNldCArIDIsIHNrYi0+ZGV2KTsKKwkJCQkgICAgSUNNUFY2X0hEUl9GSUVMRCwgb2Zmc2V0ICsgMik7CiAJCQlyZXR1cm4gLTE7CiAJCX0KIAkJZW5jYXBfbGltaXQgPSB0ZWwtPmVuY2FwX2xpbWl0IC0gMTsKQEAgLTEwMzQsNyArMTAzMyw3IEBACiAJZXJyID0gaXA2X3RubF94bWl0Mihza2IsIGRldiwgZHNmaWVsZCwgJmZsLCBlbmNhcF9saW1pdCwgJm10dSk7CiAJaWYgKGVyciAhPSAwKSB7CiAJCWlmIChlcnIgPT0gLUVNU0dTSVpFKQotCQkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1LCBkZXYpOworCQkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1KTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMTM2NCw3ICsxMzYzLDcgQEAKICAqIFJldHVybjogMAogICoqLwogCi1zdGF0aWMgdm9pZCBpcDZfZmJfdG5sX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBfX25ldF9pbml0IGlwNl9mYl90bmxfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaXA2X3RubCAqdCA9IG5ldGRldl9wcml2KGRldik7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwpAQCAtMTM4OCw3ICsxMzg3LDcgQEAKIAkucHJpb3JpdHkJPQkxLAogfTsKIAotc3RhdGljIHZvaWQgaXA2X3RubF9kZXN0cm95X3R1bm5lbHMoc3RydWN0IGlwNl90bmxfbmV0ICppcDZuKQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZfdG5sX2Rlc3Ryb3lfdHVubmVscyhzdHJ1Y3QgaXA2X3RubF9uZXQgKmlwNm4pCiB7CiAJaW50IGg7CiAJc3RydWN0IGlwNl90bmwgKnQ7CkBAIC0xNDA3LDcgKzE0MDYsNyBAQAogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX21hbnkoJmxpc3QpOwogfQogCi1zdGF0aWMgaW50IGlwNl90bmxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGlwNl90bmxfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBpcDZfdG5sX25ldCAqaXA2biA9IG5ldF9nZW5lcmljKG5ldCwgaXA2X3RubF9uZXRfaWQpOwogCWludCBlcnI7CkBAIC0xNDM2LDcgKzE0MzUsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB2b2lkIGlwNl90bmxfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZfdG5sX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgaXA2X3RubF9uZXQgKmlwNm4gPSBuZXRfZ2VuZXJpYyhuZXQsIGlwNl90bmxfbmV0X2lkKTsKIApAQCAtMTQ2MiwyNyArMTQ2MSwyOSBAQAogewogCWludCAgZXJyOwogCi0JaWYgKHhmcm02X3R1bm5lbF9yZWdpc3RlcigmaXA0aXA2X2hhbmRsZXIsIEFGX0lORVQpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaXA2X3R1bm5lbCBpbml0OiBjYW4ndCByZWdpc3RlciBpcDRpcDZcbiIpOwotCQllcnIgPSAtRUFHQUlOOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlpZiAoeGZybTZfdHVubmVsX3JlZ2lzdGVyKCZpcDZpcDZfaGFuZGxlciwgQUZfSU5FVDYpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiaXA2X3R1bm5lbCBpbml0OiBjYW4ndCByZWdpc3RlciBpcDZpcDZcbiIpOwotCQllcnIgPSAtRUFHQUlOOwotCQlnb3RvIHVucmVnX2lwNGlwNjsKLQl9Ci0KIAllcnIgPSByZWdpc3Rlcl9wZXJuZXRfZGV2aWNlKCZpcDZfdG5sX25ldF9vcHMpOwogCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycl9wZXJuZXQ7CisJCWdvdG8gb3V0X3Blcm5ldDsKKworCWVyciA9IHhmcm02X3R1bm5lbF9yZWdpc3RlcigmaXA0aXA2X2hhbmRsZXIsIEFGX0lORVQpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaXA2X3R1bm5lbCBpbml0OiBjYW4ndCByZWdpc3RlciBpcDRpcDZcbiIpOworCQlnb3RvIG91dF9pcDRpcDY7CisJfQorCisJZXJyID0geGZybTZfdHVubmVsX3JlZ2lzdGVyKCZpcDZpcDZfaGFuZGxlciwgQUZfSU5FVDYpOworCWlmIChlcnIgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaXA2X3R1bm5lbCBpbml0OiBjYW4ndCByZWdpc3RlciBpcDZpcDZcbiIpOworCQlnb3RvIG91dF9pcDZpcDY7CisJfQorCiAJcmV0dXJuIDA7Ci1lcnJfcGVybmV0OgotCXhmcm02X3R1bm5lbF9kZXJlZ2lzdGVyKCZpcDZpcDZfaGFuZGxlciwgQUZfSU5FVDYpOwotdW5yZWdfaXA0aXA2OgorCitvdXRfaXA2aXA2OgogCXhmcm02X3R1bm5lbF9kZXJlZ2lzdGVyKCZpcDRpcDZfaGFuZGxlciwgQUZfSU5FVCk7Ci1vdXQ6CitvdXRfaXA0aXA2OgorCXVucmVnaXN0ZXJfcGVybmV0X2RldmljZSgmaXA2X3RubF9uZXRfb3BzKTsKK291dF9wZXJuZXQ6CiAJcmV0dXJuIGVycjsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXBjb21wNi5jIGIvbmV0L2lwdjYvaXBjb21wNi5jCmluZGV4IDAwMmU2ZWUuLjg1Y2NjZDYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2lwY29tcDYuYworKysgYi9uZXQvaXB2Ni9pcGNvbXA2LmMKQEAgLTUzLDYgKzUzLDcgQEAKIHN0YXRpYyB2b2lkIGlwY29tcDZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LAogCQkJCXU4IHR5cGUsIHU4IGNvZGUsIGludCBvZmZzZXQsIF9fYmUzMiBpbmZvKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoc2tiLT5kZXYpOwogCV9fYmUzMiBzcGk7CiAJc3RydWN0IGlwdjZoZHIgKmlwaCA9IChzdHJ1Y3QgaXB2Nmhkciopc2tiLT5kYXRhOwogCXN0cnVjdCBpcF9jb21wX2hkciAqaXBjb21waCA9CkBAIC02Myw3ICs2NCw3IEBACiAJCXJldHVybjsKIAogCXNwaSA9IGh0b25sKG50b2hzKGlwY29tcGgtPmNwaSkpOwotCXggPSB4ZnJtX3N0YXRlX2xvb2t1cCgmaW5pdF9uZXQsICh4ZnJtX2FkZHJlc3NfdCAqKSZpcGgtPmRhZGRyLCBzcGksIElQUFJPVE9fQ09NUCwgQUZfSU5FVDYpOworCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIHNrYi0+bWFyaywgKHhmcm1fYWRkcmVzc190ICopJmlwaC0+ZGFkZHIsIHNwaSwgSVBQUk9UT19DT01QLCBBRl9JTkVUNik7CiAJaWYgKCF4KQogCQlyZXR1cm47CiAKQEAgLTc0LDE0ICs3NSwxNSBAQAogCiBzdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKmlwY29tcDZfdHVubmVsX2NyZWF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSB4c19uZXQoeCk7CiAJc3RydWN0IHhmcm1fc3RhdGUgKnQgPSBOVUxMOwogCi0JdCA9IHhmcm1fc3RhdGVfYWxsb2MoJmluaXRfbmV0KTsKKwl0ID0geGZybV9zdGF0ZV9hbGxvYyhuZXQpOwogCWlmICghdCkKIAkJZ290byBvdXQ7CiAKIAl0LT5pZC5wcm90byA9IElQUFJPVE9fSVBWNjsKLQl0LT5pZC5zcGkgPSB4ZnJtNl90dW5uZWxfYWxsb2Nfc3BpKCh4ZnJtX2FkZHJlc3NfdCAqKSZ4LT5wcm9wcy5zYWRkcik7CisJdC0+aWQuc3BpID0geGZybTZfdHVubmVsX2FsbG9jX3NwaShuZXQsICh4ZnJtX2FkZHJlc3NfdCAqKSZ4LT5wcm9wcy5zYWRkcik7CiAJaWYgKCF0LT5pZC5zcGkpCiAJCWdvdG8gZXJyb3I7CiAKQEAgLTkwLDYgKzkyLDcgQEAKIAl0LT5wcm9wcy5mYW1pbHkgPSBBRl9JTkVUNjsKIAl0LT5wcm9wcy5tb2RlID0geC0+cHJvcHMubW9kZTsKIAltZW1jcHkodC0+cHJvcHMuc2FkZHIuYTYsIHgtPnByb3BzLnNhZGRyLmE2LCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisJbWVtY3B5KCZ0LT5tYXJrLCAmeC0+bWFyaywgc2l6ZW9mKHQtPm1hcmspKTsKIAogCWlmICh4ZnJtX2luaXRfc3RhdGUodCkpCiAJCWdvdG8gZXJyb3I7CkBAIC0xMDgsMTMgKzExMSwxNSBAQAogCiBzdGF0aWMgaW50IGlwY29tcDZfdHVubmVsX2F0dGFjaChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSB4c19uZXQoeCk7CiAJaW50IGVyciA9IDA7CiAJc3RydWN0IHhmcm1fc3RhdGUgKnQgPSBOVUxMOwogCV9fYmUzMiBzcGk7CisJdTMyIG1hcmsgPSB4LT5tYXJrLm0gJiB4LT5tYXJrLnY7CiAKLQlzcGkgPSB4ZnJtNl90dW5uZWxfc3BpX2xvb2t1cCgoeGZybV9hZGRyZXNzX3QgKikmeC0+cHJvcHMuc2FkZHIpOworCXNwaSA9IHhmcm02X3R1bm5lbF9zcGlfbG9va3VwKG5ldCwgKHhmcm1fYWRkcmVzc190ICopJngtPnByb3BzLnNhZGRyKTsKIAlpZiAoc3BpKQotCQl0ID0geGZybV9zdGF0ZV9sb29rdXAoJmluaXRfbmV0LCAoeGZybV9hZGRyZXNzX3QgKikmeC0+aWQuZGFkZHIsCisJCXQgPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG1hcmssICh4ZnJtX2FkZHJlc3NfdCAqKSZ4LT5pZC5kYWRkciwKIAkJCQkJICAgICAgc3BpLCBJUFBST1RPX0lQVjYsIEFGX0lORVQ2KTsKIAlpZiAoIXQpIHsKIAkJdCA9IGlwY29tcDZfdHVubmVsX2NyZWF0ZSh4KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L21jYXN0LmMgYi9uZXQvaXB2Ni9tY2FzdC5jCmluZGV4IDFmOWM0NDQuLmJjZDk3MTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L21jYXN0LmMKKysrIGIvbmV0L2lwdjYvbWNhc3QuYwpAQCAtNzkzLDEwICs3OTMsMTAgQEAKIAl9CiAJc3Bpbl91bmxvY2tfYmgoJmltLT5tY2FfbG9jayk7CiAKLQl3cml0ZV9sb2NrX2JoKCZpZGV2LT5tY19sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmlkZXYtPm1jX2xvY2spOwogCXBtYy0+bmV4dCA9IGlkZXYtPm1jX3RvbWI7CiAJaWRldi0+bWNfdG9tYiA9IHBtYzsKLQl3cml0ZV91bmxvY2tfYmgoJmlkZXYtPm1jX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZpZGV2LT5tY19sb2NrKTsKIH0KIAogc3RhdGljIHZvaWQgbWxkX2RlbF9kZWxyZWMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgc3RydWN0IGluNl9hZGRyICpwbWNhKQpAQCAtODA0LDcgKzgwNCw3IEBACiAJc3RydWN0IGlmbWNhZGRyNiAqcG1jLCAqcG1jX3ByZXY7CiAJc3RydWN0IGlwNl9zZl9saXN0ICpwc2YsICpwc2ZfbmV4dDsKIAotCXdyaXRlX2xvY2tfYmgoJmlkZXYtPm1jX2xvY2spOworCXNwaW5fbG9ja19iaCgmaWRldi0+bWNfbG9jayk7CiAJcG1jX3ByZXYgPSBOVUxMOwogCWZvciAocG1jPWlkZXYtPm1jX3RvbWI7IHBtYzsgcG1jPXBtYy0+bmV4dCkgewogCQlpZiAoaXB2Nl9hZGRyX2VxdWFsKCZwbWMtPm1jYV9hZGRyLCBwbWNhKSkKQEAgLTgxNyw3ICs4MTcsOCBAQAogCQllbHNlCiAJCQlpZGV2LT5tY190b21iID0gcG1jLT5uZXh0OwogCX0KLQl3cml0ZV91bmxvY2tfYmgoJmlkZXYtPm1jX2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZpZGV2LT5tY19sb2NrKTsKKwogCWlmIChwbWMpIHsKIAkJZm9yIChwc2Y9cG1jLT5tY2FfdG9tYjsgcHNmOyBwc2Y9cHNmX25leHQpIHsKIAkJCXBzZl9uZXh0ID0gcHNmLT5zZl9uZXh0OwpAQCAtODMyLDEwICs4MzMsMTAgQEAKIHsKIAlzdHJ1Y3QgaWZtY2FkZHI2ICpwbWMsICpuZXh0cG1jOwogCi0Jd3JpdGVfbG9ja19iaCgmaWRldi0+bWNfbG9jayk7CisJc3Bpbl9sb2NrX2JoKCZpZGV2LT5tY19sb2NrKTsKIAlwbWMgPSBpZGV2LT5tY190b21iOwogCWlkZXYtPm1jX3RvbWIgPSBOVUxMOwotCXdyaXRlX3VubG9ja19iaCgmaWRldi0+bWNfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJmlkZXYtPm1jX2xvY2spOwogCiAJZm9yICg7IHBtYzsgcG1jID0gbmV4dHBtYykgewogCQluZXh0cG1jID0gcG1jLT5uZXh0OwpAQCAtMTY5Niw3ICsxNjk3LDcgQEAKIAlpbnQgdHlwZSwgZHR5cGU7CiAKIAlyZWFkX2xvY2tfYmgoJmlkZXYtPmxvY2spOwotCXdyaXRlX2xvY2tfYmgoJmlkZXYtPm1jX2xvY2spOworCXNwaW5fbG9jaygmaWRldi0+bWNfbG9jayk7CiAKIAkvKiBkZWxldGVkIE1DQSdzICovCiAJcG1jX3ByZXYgPSBOVUxMOwpAQCAtMTczMCw3ICsxNzMxLDcgQEAKIAkJfSBlbHNlCiAJCQlwbWNfcHJldiA9IHBtYzsKIAl9Ci0Jd3JpdGVfdW5sb2NrX2JoKCZpZGV2LT5tY19sb2NrKTsKKwlzcGluX3VubG9jaygmaWRldi0+bWNfbG9jayk7CiAKIAkvKiBjaGFuZ2UgcmVjcyAqLwogCWZvciAocG1jPWlkZXYtPm1jX2xpc3Q7IHBtYzsgcG1jPXBtYy0+bmV4dCkgewpAQCAtMjMxMSw3ICsyMzEyLDcgQEAKIHZvaWQgaXB2Nl9tY19pbml0X2RldihzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQogewogCXdyaXRlX2xvY2tfYmgoJmlkZXYtPmxvY2spOwotCXJ3bG9ja19pbml0KCZpZGV2LT5tY19sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmaWRldi0+bWNfbG9jayk7CiAJaWRldi0+bWNfZ3FfcnVubmluZyA9IDA7CiAJc2V0dXBfdGltZXIoJmlkZXYtPm1jX2dxX3RpbWVyLCBtbGRfZ3FfdGltZXJfZXhwaXJlLAogCQkJKHVuc2lnbmVkIGxvbmcpaWRldik7CkBAIC0yNjQ2LDcgKzI2NDcsNyBAQAogCS5yZWxlYXNlCT0Jc2VxX3JlbGVhc2VfbmV0LAogfTsKIAotc3RhdGljIGludCBpZ21wNl9wcm9jX2luaXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGlnbXA2X3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaW50IGVycjsKIApAQCAtMjY2NiwyMyArMjY2NywyMiBAQAogCWdvdG8gb3V0OwogfQogCi1zdGF0aWMgdm9pZCBpZ21wNl9wcm9jX2V4aXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpZ21wNl9wcm9jX2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewogCXByb2NfbmV0X3JlbW92ZShuZXQsICJtY2ZpbHRlcjYiKTsKIAlwcm9jX25ldF9yZW1vdmUobmV0LCAiaWdtcDYiKTsKIH0KICNlbHNlCi1zdGF0aWMgaW50IGlnbXA2X3Byb2NfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW5saW5lIGludCBpZ21wNl9wcm9jX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXJldHVybiAwOwogfQotc3RhdGljIHZvaWQgaWdtcDZfcHJvY19leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ21wNl9wcm9jX2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewotCTsKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IGlnbXA2X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCBpZ21wNl9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaW50IGVycjsKIApAQCAtMjcwOCw3ICsyNzA4LDcgQEAKIAlnb3RvIG91dDsKIH0KIAotc3RhdGljIHZvaWQgaWdtcDZfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpZ21wNl9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaW5ldF9jdGxfc29ja19kZXN0cm95KG5ldC0+aXB2Ni5pZ21wX3NrKTsKIAlpZ21wNl9wcm9jX2V4aXQobmV0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L21pcDYuYyBiL25ldC9pcHY2L21pcDYuYwppbmRleCBmNzk3ZThjLi4yNzk0YjYwIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9taXA2LmMKKysrIGIvbmV0L2lwdjYvbWlwNi5jCkBAIC01Niw3ICs1Niw3IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtaXA2X3BhcmFtX3Byb2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggY29kZSwgaW50IHBvcykKIHsKLQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QQVJBTVBST0IsIGNvZGUsIHBvcywgc2tiLT5kZXYpOworCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BBUkFNUFJPQiwgY29kZSwgcG9zKTsKIH0KIAogc3RhdGljIGludCBtaXA2X21oX2xlbihpbnQgdHlwZSkKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25kaXNjLmMgYi9uZXQvaXB2Ni9uZGlzYy5jCmluZGV4IGM0NTg1Mjc5Li44YmNjNGI3ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmRpc2MuYworKysgYi9uZXQvaXB2Ni9uZGlzYy5jCkBAIC0xNzcyLDcgKzE3NzIsNyBAQAogCiAjZW5kaWYKIAotc3RhdGljIGludCBuZGlzY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgbmRpc2NfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBpcHY2X3BpbmZvICpucDsKIAlzdHJ1Y3Qgc29jayAqc2s7CkBAIC0xNzk3LDcgKzE3OTcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBuZGlzY19uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IG5kaXNjX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpbmV0X2N0bF9zb2NrX2Rlc3Ryb3kobmV0LT5pcHY2Lm5kaXNjX3NrKTsKIH0KQEAgLTE4MjAsOCArMTgyMCw3IEBACiAJbmVpZ2hfdGFibGVfaW5pdCgmbmRfdGJsKTsKIAogI2lmZGVmIENPTkZJR19TWVNDVEwKLQllcnIgPSBuZWlnaF9zeXNjdGxfcmVnaXN0ZXIoTlVMTCwgJm5kX3RibC5wYXJtcywgTkVUX0lQVjYsCi0JCQkJICAgIE5FVF9JUFY2X05FSUdILCAiaXB2NiIsCisJZXJyID0gbmVpZ2hfc3lzY3RsX3JlZ2lzdGVyKE5VTEwsICZuZF90YmwucGFybXMsICJpcHY2IiwKIAkJCQkgICAgJm5kaXNjX2lmaW5mb19zeXNjdGxfY2hhbmdlKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF91bnJlZ2lzdGVyX3Blcm5ldDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2X3RhYmxlcy5jCmluZGV4IDhhN2UwZjUuLjkyMTBlMzEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZfdGFibGVzLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNl90YWJsZXMuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2xvZy5oPgorI2luY2x1ZGUgIi4uLy4uL25ldGZpbHRlci94dF9yZXBsZGF0YS5oIgogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiBNT0RVTEVfQVVUSE9SKCJOZXRmaWx0ZXIgQ29yZSBUZWFtIDxjb3JldGVhbUBuZXRmaWx0ZXIub3JnPiIpOwpAQCAtNjcsNiArNjgsMTIgQEAKICNkZWZpbmUgaW5saW5lCiAjZW5kaWYKIAordm9pZCAqaXA2dF9hbGxvY19pbml0aWFsX3RhYmxlKGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqaW5mbykKK3sKKwlyZXR1cm4geHRfYWxsb2NfaW5pdGlhbF90YWJsZShpcDZ0LCBJUDZUKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlwNnRfYWxsb2NfaW5pdGlhbF90YWJsZSk7CisKIC8qCiAgICBXZSBrZWVwIGEgc2V0IG9mIHJ1bGVzIGZvciBlYWNoIENQVSwgc28gd2UgY2FuIGF2b2lkIHdyaXRlLWxvY2tpbmcKICAgIHRoZW0gaW4gdGhlIHNvZnRpcnEgd2hlbiB1cGRhdGluZyB0aGUgY291bnRlcnMgYW5kIHRoZXJlZm9yZQpAQCAtMjAxLDcgKzIwOCw3IEBACiAKIC8qIFBlcmZvcm1hbmNlIGNyaXRpY2FsIC0gY2FsbGVkIGZvciBldmVyeSBwYWNrZXQgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAotZG9fbWF0Y2goc3RydWN0IGlwNnRfZW50cnlfbWF0Y2ggKm0sIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCitkb19tYXRjaChjb25zdCBzdHJ1Y3QgaXA2dF9lbnRyeV9tYXRjaCAqbSwgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkgc3RydWN0IHh0X21hdGNoX3BhcmFtICpwYXIpCiB7CiAJcGFyLT5tYXRjaCAgICAgPSBtLT51Lmtlcm5lbC5tYXRjaDsKQEAgLTIxNSw3ICsyMjIsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpcDZ0X2VudHJ5ICoKLWdldF9lbnRyeSh2b2lkICpiYXNlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQorZ2V0X2VudHJ5KGNvbnN0IHZvaWQgKmJhc2UsIHVuc2lnbmVkIGludCBvZmZzZXQpCiB7CiAJcmV0dXJuIChzdHJ1Y3QgaXA2dF9lbnRyeSAqKShiYXNlICsgb2Zmc2V0KTsKIH0KQEAgLTIyOSw2ICsyMzYsMTIgQEAKIAlyZXR1cm4gbWVtY21wKGlwdjYsICZ1bmNvbmQsIHNpemVvZih1bmNvbmQpKSA9PSAwOwogfQogCitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBpcDZ0X2VudHJ5X3RhcmdldCAqCitpcDZ0X2dldF90YXJnZXRfYyhjb25zdCBzdHJ1Y3QgaXA2dF9lbnRyeSAqZSkKK3sKKwlyZXR1cm4gaXA2dF9nZXRfdGFyZ2V0KChzdHJ1Y3QgaXA2dF9lbnRyeSAqKWUpOworfQorCiAjaWYgZGVmaW5lZChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9UUkFDRSkgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0VfTU9EVUxFKQogLyogVGhpcyBjcmllcyBmb3IgdW5pZmljYXRpb24hICovCkBAIC0yNjQsMTEgKzI3NywxMSBAQAogCiAvKiBNaWxkbHkgcGVyZiBjcml0aWNhbCAob25seSBpZiBwYWNrZXQgdHJhY2luZyBpcyBvbikgKi8KIHN0YXRpYyBpbmxpbmUgaW50Ci1nZXRfY2hhaW5uYW1lX3J1bGVudW0oc3RydWN0IGlwNnRfZW50cnkgKnMsIHN0cnVjdCBpcDZ0X2VudHJ5ICplLAorZ2V0X2NoYWlubmFtZV9ydWxlbnVtKGNvbnN0IHN0cnVjdCBpcDZ0X2VudHJ5ICpzLCBjb25zdCBzdHJ1Y3QgaXA2dF9lbnRyeSAqZSwKIAkJICAgICAgY29uc3QgY2hhciAqaG9va25hbWUsIGNvbnN0IGNoYXIgKipjaGFpbm5hbWUsCiAJCSAgICAgIGNvbnN0IGNoYXIgKipjb21tZW50LCB1bnNpZ25lZCBpbnQgKnJ1bGVudW0pCiB7Ci0Jc3RydWN0IGlwNnRfc3RhbmRhcmRfdGFyZ2V0ICp0ID0gKHZvaWQgKilpcDZ0X2dldF90YXJnZXQocyk7CisJY29uc3Qgc3RydWN0IGlwNnRfc3RhbmRhcmRfdGFyZ2V0ICp0ID0gKHZvaWQgKilpcDZ0X2dldF90YXJnZXRfYyhzKTsKIAogCWlmIChzdHJjbXAodC0+dGFyZ2V0LnUua2VybmVsLnRhcmdldC0+bmFtZSwgSVA2VF9FUlJPUl9UQVJHRVQpID09IDApIHsKIAkJLyogSGVhZCBvZiB1c2VyIGNoYWluOiBFUlJPUiB0YXJnZXQgd2l0aCBjaGFpbm5hbWUgKi8KQEAgLTI5NCwxNyArMzA3LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHRyYWNlX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorc3RhdGljIHZvaWQgdHJhY2VfcGFja2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiAJCQkgdW5zaWduZWQgaW50IGhvb2ssCiAJCQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAogCQkJIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCiAJCQkgY29uc3QgY2hhciAqdGFibGVuYW1lLAotCQkJIHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlLAotCQkJIHN0cnVjdCBpcDZ0X2VudHJ5ICplKQorCQkJIGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlLAorCQkJIGNvbnN0IHN0cnVjdCBpcDZ0X2VudHJ5ICplKQogewotCXZvaWQgKnRhYmxlX2Jhc2U7CisJY29uc3Qgdm9pZCAqdGFibGVfYmFzZTsKIAljb25zdCBzdHJ1Y3QgaXA2dF9lbnRyeSAqcm9vdDsKIAljb25zdCBjaGFyICpob29rbmFtZSwgKmNoYWlubmFtZSwgKmNvbW1lbnQ7CisJY29uc3Qgc3RydWN0IGlwNnRfZW50cnkgKml0ZXI7CiAJdW5zaWduZWQgaW50IHJ1bGVudW0gPSAwOwogCiAJdGFibGVfYmFzZSA9IHByaXZhdGUtPmVudHJpZXNbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKQEAgLTMxMywxMCArMzI3LDEwIEBACiAJaG9va25hbWUgPSBjaGFpbm5hbWUgPSBob29rbmFtZXNbaG9va107CiAJY29tbWVudCA9IGNvbW1lbnRzW05GX0lQNl9UUkFDRV9DT01NRU5UX1JVTEVdOwogCi0JSVA2VF9FTlRSWV9JVEVSQVRFKHJvb3QsCi0JCQkgICBwcml2YXRlLT5zaXplIC0gcHJpdmF0ZS0+aG9va19lbnRyeVtob29rXSwKLQkJCSAgIGdldF9jaGFpbm5hbWVfcnVsZW51bSwKLQkJCSAgIGUsIGhvb2tuYW1lLCAmY2hhaW5uYW1lLCAmY29tbWVudCwgJnJ1bGVudW0pOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgcm9vdCwgcHJpdmF0ZS0+c2l6ZSAtIHByaXZhdGUtPmhvb2tfZW50cnlbaG9va10pCisJCWlmIChnZXRfY2hhaW5uYW1lX3J1bGVudW0oaXRlciwgZSwgaG9va25hbWUsCisJCSAgICAmY2hhaW5uYW1lLCAmY29tbWVudCwgJnJ1bGVudW0pICE9IDApCisJCQlicmVhazsKIAogCW5mX2xvZ19wYWNrZXQoQUZfSU5FVDYsIGhvb2ssIHNrYiwgaW4sIG91dCwgJnRyYWNlX2xvZ2luZm8sCiAJCSAgICAgICJUUkFDRTogJXM6JXM6JXM6JXUgIiwKQEAgLTM0NSw5ICszNTksOSBAQAogCS8qIEluaXRpYWxpemluZyB2ZXJkaWN0IHRvIE5GX0RST1Aga2VlcHMgZ2NjIGhhcHB5LiAqLwogCXVuc2lnbmVkIGludCB2ZXJkaWN0ID0gTkZfRFJPUDsKIAljb25zdCBjaGFyICppbmRldiwgKm91dGRldjsKLQl2b2lkICp0YWJsZV9iYXNlOworCWNvbnN0IHZvaWQgKnRhYmxlX2Jhc2U7CiAJc3RydWN0IGlwNnRfZW50cnkgKmUsICpiYWNrOwotCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlOworCWNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlOwogCXN0cnVjdCB4dF9tYXRjaF9wYXJhbSBtdHBhcjsKIAlzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtIHRncGFyOwogCkBAIC0zNzgsMjIgKzM5MiwyNyBAQAogCWJhY2sgPSBnZXRfZW50cnkodGFibGVfYmFzZSwgcHJpdmF0ZS0+dW5kZXJmbG93W2hvb2tdKTsKIAogCWRvIHsKLQkJc3RydWN0IGlwNnRfZW50cnlfdGFyZ2V0ICp0OworCQljb25zdCBzdHJ1Y3QgaXA2dF9lbnRyeV90YXJnZXQgKnQ7CisJCWNvbnN0IHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqZW1hdGNoOwogCiAJCUlQX05GX0FTU0VSVChlKTsKIAkJSVBfTkZfQVNTRVJUKGJhY2spOwogCQlpZiAoIWlwNl9wYWNrZXRfbWF0Y2goc2tiLCBpbmRldiwgb3V0ZGV2LCAmZS0+aXB2NiwKLQkJICAgICZtdHBhci50aG9mZiwgJm10cGFyLmZyYWdvZmYsICZob3Rkcm9wKSB8fAotCQkgICAgSVA2VF9NQVRDSF9JVEVSQVRFKGUsIGRvX21hdGNoLCBza2IsICZtdHBhcikgIT0gMCkgeworCQkgICAgJm10cGFyLnRob2ZmLCAmbXRwYXIuZnJhZ29mZiwgJmhvdGRyb3ApKSB7Cisgbm9fbWF0Y2g6CiAJCQllID0gaXA2dF9uZXh0X2VudHJ5KGUpOwogCQkJY29udGludWU7CiAJCX0KIAorCQl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpCisJCQlpZiAoZG9fbWF0Y2goZW1hdGNoLCBza2IsICZtdHBhcikgIT0gMCkKKwkJCQlnb3RvIG5vX21hdGNoOworCiAJCUFERF9DT1VOVEVSKGUtPmNvdW50ZXJzLAogCQkJICAgIG50b2hzKGlwdjZfaGRyKHNrYiktPnBheWxvYWRfbGVuKSArCiAJCQkgICAgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSwgMSk7CiAKLQkJdCA9IGlwNnRfZ2V0X3RhcmdldChlKTsKKwkJdCA9IGlwNnRfZ2V0X3RhcmdldF9jKGUpOwogCQlJUF9ORl9BU1NFUlQodC0+dS5rZXJuZWwudGFyZ2V0KTsKIAogI2lmIGRlZmluZWQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVFJBQ0UpIHx8IFwKQEAgLTQ3NSw3ICs0OTQsNyBAQAogLyogRmlndXJlcyBvdXQgZnJvbSB3aGF0IGhvb2sgZWFjaCBydWxlIGNhbiBiZSBjYWxsZWQ6IHJldHVybnMgMCBpZgogICAgdGhlcmUgYXJlIGxvb3BzLiAgUHV0cyBob29rIGJpdG1hc2sgaW4gY29tZWZyb20uICovCiBzdGF0aWMgaW50Ci1tYXJrX3NvdXJjZV9jaGFpbnMoc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCittYXJrX3NvdXJjZV9jaGFpbnMoY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCiAJCSAgIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcywgdm9pZCAqZW50cnkwKQogewogCXVuc2lnbmVkIGludCBob29rOwpAQCAtNDkzLDggKzUxMiw4IEBACiAJCWUtPmNvdW50ZXJzLnBjbnQgPSBwb3M7CiAKIAkJZm9yICg7OykgewotCQkJc3RydWN0IGlwNnRfc3RhbmRhcmRfdGFyZ2V0ICp0Ci0JCQkJPSAodm9pZCAqKWlwNnRfZ2V0X3RhcmdldChlKTsKKwkJCWNvbnN0IHN0cnVjdCBpcDZ0X3N0YW5kYXJkX3RhcmdldCAqdAorCQkJCT0gKHZvaWQgKilpcDZ0X2dldF90YXJnZXRfYyhlKTsKIAkJCWludCB2aXNpdGVkID0gZS0+Y29tZWZyb20gJiAoMSA8PCBob29rKTsKIAogCQkJaWYgKGUtPmNvbWVmcm9tICYgKDEgPDwgTkZfSU5FVF9OVU1IT09LUykpIHsKQEAgLTU4NCwyNyArNjAzLDIzIEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQKLWNsZWFudXBfbWF0Y2goc3RydWN0IGlwNnRfZW50cnlfbWF0Y2ggKm0sIHVuc2lnbmVkIGludCAqaSkKK3N0YXRpYyB2b2lkIGNsZWFudXBfbWF0Y2goc3RydWN0IGlwNnRfZW50cnlfbWF0Y2ggKm0sIHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgeHRfbXRkdG9yX3BhcmFtIHBhcjsKIAotCWlmIChpICYmICgqaSktLSA9PSAwKQotCQlyZXR1cm4gMTsKLQorCXBhci5uZXQgICAgICAgPSBuZXQ7CiAJcGFyLm1hdGNoICAgICA9IG0tPnUua2VybmVsLm1hdGNoOwogCXBhci5tYXRjaGluZm8gPSBtLT5kYXRhOwogCXBhci5mYW1pbHkgICAgPSBORlBST1RPX0lQVjY7CiAJaWYgKHBhci5tYXRjaC0+ZGVzdHJveSAhPSBOVUxMKQogCQlwYXIubWF0Y2gtPmRlc3Ryb3koJnBhcik7CiAJbW9kdWxlX3B1dChwYXIubWF0Y2gtPm1lKTsKLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAotY2hlY2tfZW50cnkoc3RydWN0IGlwNnRfZW50cnkgKmUsIGNvbnN0IGNoYXIgKm5hbWUpCitjaGVja19lbnRyeShjb25zdCBzdHJ1Y3QgaXA2dF9lbnRyeSAqZSwgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlzdHJ1Y3QgaXA2dF9lbnRyeV90YXJnZXQgKnQ7CisJY29uc3Qgc3RydWN0IGlwNnRfZW50cnlfdGFyZ2V0ICp0OwogCiAJaWYgKCFpcDZfY2hlY2tlbnRyeSgmZS0+aXB2NikpIHsKIAkJZHVwcmludGYoImlwX3RhYmxlczogaXAgY2hlY2sgZmFpbGVkICVwICVzLlxuIiwgZSwgbmFtZSk7CkBAIC02MTUsMTUgKzYzMCwxNCBAQAogCSAgICBlLT5uZXh0X29mZnNldCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQl0ID0gaXA2dF9nZXRfdGFyZ2V0KGUpOworCXQgPSBpcDZ0X2dldF90YXJnZXRfYyhlKTsKIAlpZiAoZS0+dGFyZ2V0X29mZnNldCArIHQtPnUudGFyZ2V0X3NpemUgPiBlLT5uZXh0X29mZnNldCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjaGVja19tYXRjaChzdHJ1Y3QgaXA2dF9lbnRyeV9tYXRjaCAqbSwgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIsCi0JCSAgICAgICB1bnNpZ25lZCBpbnQgKmkpCitzdGF0aWMgaW50IGNoZWNrX21hdGNoKHN0cnVjdCBpcDZ0X2VudHJ5X21hdGNoICptLCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhcikKIHsKIAljb25zdCBzdHJ1Y3QgaXA2dF9pcDYgKmlwdjYgPSBwYXItPmVudHJ5aW5mbzsKIAlpbnQgcmV0OwpAQCAtNjM4LDEzICs2NTIsMTEgQEAKIAkJCSBwYXIubWF0Y2gtPm5hbWUpOwogCQlyZXR1cm4gcmV0OwogCX0KLQkrKyppOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50Ci1maW5kX2NoZWNrX21hdGNoKHN0cnVjdCBpcDZ0X2VudHJ5X21hdGNoICptLCBzdHJ1Y3QgeHRfbXRjaGtfcGFyYW0gKnBhciwKLQkJIHVuc2lnbmVkIGludCAqaSkKK2ZpbmRfY2hlY2tfbWF0Y2goc3RydWN0IGlwNnRfZW50cnlfbWF0Y2ggKm0sIHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogewogCXN0cnVjdCB4dF9tYXRjaCAqbWF0Y2g7CiAJaW50IHJldDsKQEAgLTY1OCw3ICs2NzAsNyBAQAogCX0KIAltLT51Lmtlcm5lbC5tYXRjaCA9IG1hdGNoOwogCi0JcmV0ID0gY2hlY2tfbWF0Y2gobSwgcGFyLCBpKTsKKwlyZXQgPSBjaGVja19tYXRjaChtLCBwYXIpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyOwogCkBAIC02NjgsMTAgKzY4MCwxMSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgY2hlY2tfdGFyZ2V0KHN0cnVjdCBpcDZ0X2VudHJ5ICplLCBjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIGludCBjaGVja190YXJnZXQoc3RydWN0IGlwNnRfZW50cnkgKmUsIHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgaXA2dF9lbnRyeV90YXJnZXQgKnQgPSBpcDZ0X2dldF90YXJnZXQoZSk7CiAJc3RydWN0IHh0X3RnY2hrX3BhcmFtIHBhciA9IHsKKwkJLm5ldCAgICAgICA9IG5ldCwKIAkJLnRhYmxlICAgICA9IG5hbWUsCiAJCS5lbnRyeWluZm8gPSBlLAogCQkudGFyZ2V0ICAgID0gdC0+dS5rZXJuZWwudGFyZ2V0LApAQCAtNjkzLDI3ICs3MDYsMzIgQEAKIH0KIAogc3RhdGljIGludAotZmluZF9jaGVja19lbnRyeShzdHJ1Y3QgaXA2dF9lbnRyeSAqZSwgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IHNpemUsCi0JCSB1bnNpZ25lZCBpbnQgKmkpCitmaW5kX2NoZWNrX2VudHJ5KHN0cnVjdCBpcDZ0X2VudHJ5ICplLCBzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsCisJCSB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKIAlzdHJ1Y3QgaXA2dF9lbnRyeV90YXJnZXQgKnQ7CiAJc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0OwogCWludCByZXQ7CiAJdW5zaWduZWQgaW50IGo7CiAJc3RydWN0IHh0X210Y2hrX3BhcmFtIG10cGFyOworCXN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqZW1hdGNoOwogCiAJcmV0ID0gY2hlY2tfZW50cnkoZSwgbmFtZSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCWogPSAwOworCW10cGFyLm5ldAk9IG5ldDsKIAltdHBhci50YWJsZSAgICAgPSBuYW1lOwogCW10cGFyLmVudHJ5aW5mbyA9ICZlLT5pcHY2OwogCW10cGFyLmhvb2tfbWFzayA9IGUtPmNvbWVmcm9tOwogCW10cGFyLmZhbWlseSAgICA9IE5GUFJPVE9fSVBWNjsKLQlyZXQgPSBJUDZUX01BVENIX0lURVJBVEUoZSwgZmluZF9jaGVja19tYXRjaCwgJm10cGFyLCAmaik7Ci0JaWYgKHJldCAhPSAwKQotCQlnb3RvIGNsZWFudXBfbWF0Y2hlczsKKwl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpIHsKKwkJcmV0ID0gZmluZF9jaGVja19tYXRjaChlbWF0Y2gsICZtdHBhcik7CisJCWlmIChyZXQgIT0gMCkKKwkJCWdvdG8gY2xlYW51cF9tYXRjaGVzOworCQkrK2o7CisJfQogCiAJdCA9IGlwNnRfZ2V0X3RhcmdldChlKTsKIAl0YXJnZXQgPSB0cnlfdGhlbl9yZXF1ZXN0X21vZHVsZSh4dF9maW5kX3RhcmdldChBRl9JTkVUNiwKQEAgLTcyNywyNyArNzQ1LDI5IEBACiAJfQogCXQtPnUua2VybmVsLnRhcmdldCA9IHRhcmdldDsKIAotCXJldCA9IGNoZWNrX3RhcmdldChlLCBuYW1lKTsKKwlyZXQgPSBjaGVja190YXJnZXQoZSwgbmV0LCBuYW1lKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKLQotCSgqaSkrKzsKIAlyZXR1cm4gMDsKICBlcnI6CiAJbW9kdWxlX3B1dCh0LT51Lmtlcm5lbC50YXJnZXQtPm1lKTsKICBjbGVhbnVwX21hdGNoZXM6Ci0JSVA2VF9NQVRDSF9JVEVSQVRFKGUsIGNsZWFudXBfbWF0Y2gsICZqKTsKKwl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpIHsKKwkJaWYgKGotLSA9PSAwKQorCQkJYnJlYWs7CisJCWNsZWFudXBfbWF0Y2goZW1hdGNoLCBuZXQpOworCX0KIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgYm9vbCBjaGVja191bmRlcmZsb3coc3RydWN0IGlwNnRfZW50cnkgKmUpCitzdGF0aWMgYm9vbCBjaGVja191bmRlcmZsb3coY29uc3Qgc3RydWN0IGlwNnRfZW50cnkgKmUpCiB7CiAJY29uc3Qgc3RydWN0IGlwNnRfZW50cnlfdGFyZ2V0ICp0OwogCXVuc2lnbmVkIGludCB2ZXJkaWN0OwogCiAJaWYgKCF1bmNvbmRpdGlvbmFsKCZlLT5pcHY2KSkKIAkJcmV0dXJuIGZhbHNlOwotCXQgPSBpcDZ0X2dldF90YXJnZXQoZSk7CisJdCA9IGlwNnRfZ2V0X3RhcmdldF9jKGUpOwogCWlmIChzdHJjbXAodC0+dS51c2VyLm5hbWUsIFhUX1NUQU5EQVJEX1RBUkdFVCkgIT0gMCkKIAkJcmV0dXJuIGZhbHNlOwogCXZlcmRpY3QgPSAoKHN0cnVjdCBpcDZ0X3N0YW5kYXJkX3RhcmdldCAqKXQpLT52ZXJkaWN0OwpAQCAtNzU4LDEyICs3NzgsMTEgQEAKIHN0YXRpYyBpbnQKIGNoZWNrX2VudHJ5X3NpemVfYW5kX2hvb2tzKHN0cnVjdCBpcDZ0X2VudHJ5ICplLAogCQkJICAgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCi0JCQkgICB1bnNpZ25lZCBjaGFyICpiYXNlLAotCQkJICAgdW5zaWduZWQgY2hhciAqbGltaXQsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlLAorCQkJICAgY29uc3QgdW5zaWduZWQgY2hhciAqbGltaXQsCiAJCQkgICBjb25zdCB1bnNpZ25lZCBpbnQgKmhvb2tfZW50cmllcywKIAkJCSAgIGNvbnN0IHVuc2lnbmVkIGludCAqdW5kZXJmbG93cywKLQkJCSAgIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcywKLQkJCSAgIHVuc2lnbmVkIGludCAqaSkKKwkJCSAgIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcykKIHsKIAl1bnNpZ25lZCBpbnQgaDsKIApAQCAtODAwLDUwICs4MTksNDEgQEAKIAkvKiBDbGVhciBjb3VudGVycyBhbmQgY29tZWZyb20gKi8KIAllLT5jb3VudGVycyA9ICgoc3RydWN0IHh0X2NvdW50ZXJzKSB7IDAsIDAgfSk7CiAJZS0+Y29tZWZyb20gPSAwOwotCi0JKCppKSsrOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1jbGVhbnVwX2VudHJ5KHN0cnVjdCBpcDZ0X2VudHJ5ICplLCB1bnNpZ25lZCBpbnQgKmkpCitzdGF0aWMgdm9pZCBjbGVhbnVwX2VudHJ5KHN0cnVjdCBpcDZ0X2VudHJ5ICplLCBzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IHh0X3RnZHRvcl9wYXJhbSBwYXI7CiAJc3RydWN0IGlwNnRfZW50cnlfdGFyZ2V0ICp0OwotCi0JaWYgKGkgJiYgKCppKS0tID09IDApCi0JCXJldHVybiAxOworCXN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqZW1hdGNoOwogCiAJLyogQ2xlYW51cCBhbGwgbWF0Y2hlcyAqLwotCUlQNlRfTUFUQ0hfSVRFUkFURShlLCBjbGVhbnVwX21hdGNoLCBOVUxMKTsKKwl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpCisJCWNsZWFudXBfbWF0Y2goZW1hdGNoLCBuZXQpOwogCXQgPSBpcDZ0X2dldF90YXJnZXQoZSk7CiAKKwlwYXIubmV0ICAgICAgPSBuZXQ7CiAJcGFyLnRhcmdldCAgID0gdC0+dS5rZXJuZWwudGFyZ2V0OwogCXBhci50YXJnaW5mbyA9IHQtPmRhdGE7CiAJcGFyLmZhbWlseSAgID0gTkZQUk9UT19JUFY2OwogCWlmIChwYXIudGFyZ2V0LT5kZXN0cm95ICE9IE5VTEwpCiAJCXBhci50YXJnZXQtPmRlc3Ryb3koJnBhcik7CiAJbW9kdWxlX3B1dChwYXIudGFyZ2V0LT5tZSk7Ci0JcmV0dXJuIDA7CiB9CiAKIC8qIENoZWNrcyBhbmQgdHJhbnNsYXRlcyB0aGUgdXNlci1zdXBwbGllZCB0YWJsZSBzZWdtZW50IChoZWxkIGluCiAgICBuZXdpbmZvKSAqLwogc3RhdGljIGludAotdHJhbnNsYXRlX3RhYmxlKGNvbnN0IGNoYXIgKm5hbWUsCi0JCXVuc2lnbmVkIGludCB2YWxpZF9ob29rcywKLQkJc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8sCi0JCXZvaWQgKmVudHJ5MCwKLQkJdW5zaWduZWQgaW50IHNpemUsCi0JCXVuc2lnbmVkIGludCBudW1iZXIsCi0JCWNvbnN0IHVuc2lnbmVkIGludCAqaG9va19lbnRyaWVzLAotCQljb25zdCB1bnNpZ25lZCBpbnQgKnVuZGVyZmxvd3MpCit0cmFuc2xhdGVfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbywgdm9pZCAqZW50cnkwLAorICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpcDZ0X3JlcGxhY2UgKnJlcGwpCiB7CisJc3RydWN0IGlwNnRfZW50cnkgKml0ZXI7CiAJdW5zaWduZWQgaW50IGk7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAotCW5ld2luZm8tPnNpemUgPSBzaXplOwotCW5ld2luZm8tPm51bWJlciA9IG51bWJlcjsKKwluZXdpbmZvLT5zaXplID0gcmVwbC0+c2l6ZTsKKwluZXdpbmZvLT5udW1iZXIgPSByZXBsLT5udW1fZW50cmllczsKIAogCS8qIEluaXQgYWxsIGhvb2tzIHRvIGltcG9zc2libGUgdmFsdWUuICovCiAJZm9yIChpID0gMDsgaSA8IE5GX0lORVRfTlVNSE9PS1M7IGkrKykgewpAQCAtODU0LDQ5ICs4NjQsNTggQEAKIAlkdXByaW50ZigidHJhbnNsYXRlX3RhYmxlOiBzaXplICV1XG4iLCBuZXdpbmZvLT5zaXplKTsKIAlpID0gMDsKIAkvKiBXYWxrIHRocm91Z2ggZW50cmllcywgY2hlY2tpbmcgb2Zmc2V0cy4gKi8KLQlyZXQgPSBJUDZUX0VOVFJZX0lURVJBVEUoZW50cnkwLCBuZXdpbmZvLT5zaXplLAotCQkJCWNoZWNrX2VudHJ5X3NpemVfYW5kX2hvb2tzLAotCQkJCW5ld2luZm8sCi0JCQkJZW50cnkwLAotCQkJCWVudHJ5MCArIHNpemUsCi0JCQkJaG9va19lbnRyaWVzLCB1bmRlcmZsb3dzLCB2YWxpZF9ob29rcywgJmkpOwotCWlmIChyZXQgIT0gMCkKLQkJcmV0dXJuIHJldDsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIGVudHJ5MCwgbmV3aW5mby0+c2l6ZSkgeworCQlyZXQgPSBjaGVja19lbnRyeV9zaXplX2FuZF9ob29rcyhpdGVyLCBuZXdpbmZvLCBlbnRyeTAsCisJCQkJCQkgZW50cnkwICsgcmVwbC0+c2l6ZSwKKwkJCQkJCSByZXBsLT5ob29rX2VudHJ5LAorCQkJCQkJIHJlcGwtPnVuZGVyZmxvdywKKwkJCQkJCSByZXBsLT52YWxpZF9ob29rcyk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJCSsraTsKKwl9CiAKLQlpZiAoaSAhPSBudW1iZXIpIHsKKwlpZiAoaSAhPSByZXBsLT5udW1fZW50cmllcykgewogCQlkdXByaW50ZigidHJhbnNsYXRlX3RhYmxlOiAldSBub3QgJXUgZW50cmllc1xuIiwKLQkJCSBpLCBudW1iZXIpOworCQkJIGksIHJlcGwtPm51bV9lbnRyaWVzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJLyogQ2hlY2sgaG9va3MgYWxsIGFzc2lnbmVkICovCiAJZm9yIChpID0gMDsgaSA8IE5GX0lORVRfTlVNSE9PS1M7IGkrKykgewogCQkvKiBPbmx5IGhvb2tzIHdoaWNoIGFyZSB2YWxpZCAqLwotCQlpZiAoISh2YWxpZF9ob29rcyAmICgxIDw8IGkpKSkKKwkJaWYgKCEocmVwbC0+dmFsaWRfaG9va3MgJiAoMSA8PCBpKSkpCiAJCQljb250aW51ZTsKIAkJaWYgKG5ld2luZm8tPmhvb2tfZW50cnlbaV0gPT0gMHhGRkZGRkZGRikgewogCQkJZHVwcmludGYoIkludmFsaWQgaG9vayBlbnRyeSAldSAldVxuIiwKLQkJCQkgaSwgaG9va19lbnRyaWVzW2ldKTsKKwkJCQkgaSwgcmVwbC0+aG9va19lbnRyeVtpXSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlpZiAobmV3aW5mby0+dW5kZXJmbG93W2ldID09IDB4RkZGRkZGRkYpIHsKIAkJCWR1cHJpbnRmKCJJbnZhbGlkIHVuZGVyZmxvdyAldSAldVxuIiwKLQkJCQkgaSwgdW5kZXJmbG93c1tpXSk7CisJCQkJIGksIHJlcGwtPnVuZGVyZmxvd1tpXSk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCX0KIAotCWlmICghbWFya19zb3VyY2VfY2hhaW5zKG5ld2luZm8sIHZhbGlkX2hvb2tzLCBlbnRyeTApKQorCWlmICghbWFya19zb3VyY2VfY2hhaW5zKG5ld2luZm8sIHJlcGwtPnZhbGlkX2hvb2tzLCBlbnRyeTApKQogCQlyZXR1cm4gLUVMT09QOwogCiAJLyogRmluYWxseSwgZWFjaCBzYW5pdHkgY2hlY2sgbXVzdCBwYXNzICovCiAJaSA9IDA7Ci0JcmV0ID0gSVA2VF9FTlRSWV9JVEVSQVRFKGVudHJ5MCwgbmV3aW5mby0+c2l6ZSwKLQkJCQlmaW5kX2NoZWNrX2VudHJ5LCBuYW1lLCBzaXplLCAmaSk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBlbnRyeTAsIG5ld2luZm8tPnNpemUpIHsKKwkJcmV0ID0gZmluZF9jaGVja19lbnRyeShpdGVyLCBuZXQsIHJlcGwtPm5hbWUsIHJlcGwtPnNpemUpOworCQlpZiAocmV0ICE9IDApCisJCQlicmVhazsKKwkJKytpOworCX0KIAogCWlmIChyZXQgIT0gMCkgewotCQlJUDZUX0VOVFJZX0lURVJBVEUoZW50cnkwLCBuZXdpbmZvLT5zaXplLAotCQkJCSAgIGNsZWFudXBfZW50cnksICZpKTsKKwkJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBlbnRyeTAsIG5ld2luZm8tPnNpemUpIHsKKwkJCWlmIChpLS0gPT0gMCkKKwkJCQlicmVhazsKKwkJCWNsZWFudXBfZW50cnkoaXRlciwgbmV0KTsKKwkJfQogCQlyZXR1cm4gcmV0OwogCX0KIApAQCAtOTA5LDMzICs5MjgsMTEgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiBHZXRzIGNvdW50ZXJzLiAqLwotc3RhdGljIGlubGluZSBpbnQKLWFkZF9lbnRyeV90b19jb3VudGVyKGNvbnN0IHN0cnVjdCBpcDZ0X2VudHJ5ICplLAotCQkgICAgIHN0cnVjdCB4dF9jb3VudGVycyB0b3RhbFtdLAotCQkgICAgIHVuc2lnbmVkIGludCAqaSkKLXsKLQlBRERfQ09VTlRFUih0b3RhbFsqaV0sIGUtPmNvdW50ZXJzLmJjbnQsIGUtPmNvdW50ZXJzLnBjbnQpOwotCi0JKCppKSsrOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotc2V0X2VudHJ5X3RvX2NvdW50ZXIoY29uc3Qgc3RydWN0IGlwNnRfZW50cnkgKmUsCi0JCSAgICAgc3RydWN0IGlwNnRfY291bnRlcnMgdG90YWxbXSwKLQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCi17Ci0JU0VUX0NPVU5URVIodG90YWxbKmldLCBlLT5jb3VudGVycy5iY250LCBlLT5jb3VudGVycy5wY250KTsKLQotCSgqaSkrKzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQKIGdldF9jb3VudGVycyhjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqdCwKIAkgICAgIHN0cnVjdCB4dF9jb3VudGVycyBjb3VudGVyc1tdKQogeworCXN0cnVjdCBpcDZ0X2VudHJ5ICppdGVyOwogCXVuc2lnbmVkIGludCBjcHU7CiAJdW5zaWduZWQgaW50IGk7CiAJdW5zaWduZWQgaW50IGN1cmNwdTsKQEAgLTk1MSwzMiArOTQ4LDMyIEBACiAJY3VyY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJaSA9IDA7Ci0JSVA2VF9FTlRSWV9JVEVSQVRFKHQtPmVudHJpZXNbY3VyY3B1XSwKLQkJCSAgIHQtPnNpemUsCi0JCQkgICBzZXRfZW50cnlfdG9fY291bnRlciwKLQkJCSAgIGNvdW50ZXJzLAotCQkJICAgJmkpOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgdC0+ZW50cmllc1tjdXJjcHVdLCB0LT5zaXplKSB7CisJCVNFVF9DT1VOVEVSKGNvdW50ZXJzW2ldLCBpdGVyLT5jb3VudGVycy5iY250LAorCQkJICAgIGl0ZXItPmNvdW50ZXJzLnBjbnQpOworCQkrK2k7CisJfQogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewogCQlpZiAoY3B1ID09IGN1cmNwdSkKIAkJCWNvbnRpbnVlOwogCQlpID0gMDsKIAkJeHRfaW5mb193cmxvY2soY3B1KTsKLQkJSVA2VF9FTlRSWV9JVEVSQVRFKHQtPmVudHJpZXNbY3B1XSwKLQkJCQkgIHQtPnNpemUsCi0JCQkJICBhZGRfZW50cnlfdG9fY291bnRlciwKLQkJCQkgIGNvdW50ZXJzLAotCQkJCSAgJmkpOworCQl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIHQtPmVudHJpZXNbY3B1XSwgdC0+c2l6ZSkgeworCQkJQUREX0NPVU5URVIoY291bnRlcnNbaV0sIGl0ZXItPmNvdW50ZXJzLmJjbnQsCisJCQkJICAgIGl0ZXItPmNvdW50ZXJzLnBjbnQpOworCQkJKytpOworCQl9CiAJCXh0X2luZm9fd3J1bmxvY2soY3B1KTsKIAl9CiAJbG9jYWxfYmhfZW5hYmxlKCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgeHRfY291bnRlcnMgKmFsbG9jX2NvdW50ZXJzKHN0cnVjdCB4dF90YWJsZSAqdGFibGUpCitzdGF0aWMgc3RydWN0IHh0X2NvdW50ZXJzICphbGxvY19jb3VudGVycyhjb25zdCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKQogewogCXVuc2lnbmVkIGludCBjb3VudGVyc2l6ZTsKIAlzdHJ1Y3QgeHRfY291bnRlcnMgKmNvdW50ZXJzOwotCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlID0gdGFibGUtPnByaXZhdGU7CisJY29uc3Qgc3RydWN0IHh0X3RhYmxlX2luZm8gKnByaXZhdGUgPSB0YWJsZS0+cHJpdmF0ZTsKIAogCS8qIFdlIG5lZWQgYXRvbWljIHNuYXBzaG90IG9mIGNvdW50ZXJzOiByZXN0IGRvZXNuJ3QgY2hhbmdlCiAJICAgKG90aGVyIHRoYW4gY29tZWZyb20sIHdoaWNoIHVzZXJzcGFjZSBkb2Vzbid0IGNhcmUKQEAgLTk5NCwxMSArOTkxLDExIEBACiAKIHN0YXRpYyBpbnQKIGNvcHlfZW50cmllc190b191c2VyKHVuc2lnbmVkIGludCB0b3RhbF9zaXplLAotCQkgICAgIHN0cnVjdCB4dF90YWJsZSAqdGFibGUsCisJCSAgICAgY29uc3Qgc3RydWN0IHh0X3RhYmxlICp0YWJsZSwKIAkJICAgICB2b2lkIF9fdXNlciAqdXNlcnB0cikKIHsKIAl1bnNpZ25lZCBpbnQgb2ZmLCBudW07Ci0Jc3RydWN0IGlwNnRfZW50cnkgKmU7CisJY29uc3Qgc3RydWN0IGlwNnRfZW50cnkgKmU7CiAJc3RydWN0IHh0X2NvdW50ZXJzICpjb3VudGVyczsKIAljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZSA9IHRhYmxlLT5wcml2YXRlOwogCWludCByZXQgPSAwOwpAQCAtMTA1MCw3ICsxMDQ3LDcgQEAKIAkJCX0KIAkJfQogCi0JCXQgPSBpcDZ0X2dldF90YXJnZXQoZSk7CisJCXQgPSBpcDZ0X2dldF90YXJnZXRfYyhlKTsKIAkJaWYgKGNvcHlfdG9fdXNlcih1c2VycHRyICsgb2ZmICsgZS0+dGFyZ2V0X29mZnNldAogCQkJCSArIG9mZnNldG9mKHN0cnVjdCBpcDZ0X2VudHJ5X3RhcmdldCwKIAkJCQkJICAgIHUudXNlci5uYW1lKSwKQEAgLTEwNjcsNyArMTA2NCw3IEBACiB9CiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCi1zdGF0aWMgdm9pZCBjb21wYXRfc3RhbmRhcmRfZnJvbV91c2VyKHZvaWQgKmRzdCwgdm9pZCAqc3JjKQorc3RhdGljIHZvaWQgY29tcGF0X3N0YW5kYXJkX2Zyb21fdXNlcih2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYykKIHsKIAlpbnQgdiA9ICooY29tcGF0X2ludF90ICopc3JjOwogCkBAIC0xMDc2LDcgKzEwNzMsNyBAQAogCW1lbWNweShkc3QsICZ2LCBzaXplb2YodikpOwogfQogCi1zdGF0aWMgaW50IGNvbXBhdF9zdGFuZGFyZF90b191c2VyKHZvaWQgX191c2VyICpkc3QsIHZvaWQgKnNyYykKK3N0YXRpYyBpbnQgY29tcGF0X3N0YW5kYXJkX3RvX3VzZXIodm9pZCBfX3VzZXIgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQogewogCWNvbXBhdF9pbnRfdCBjdiA9ICooaW50ICopc3JjOwogCkBAIC0xMDg1LDI1ICsxMDgyLDIwIEBACiAJcmV0dXJuIGNvcHlfdG9fdXNlcihkc3QsICZjdiwgc2l6ZW9mKGN2KSkgPyAtRUZBVUxUIDogMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQKLWNvbXBhdF9jYWxjX21hdGNoKHN0cnVjdCBpcDZ0X2VudHJ5X21hdGNoICptLCBpbnQgKnNpemUpCi17Ci0JKnNpemUgKz0geHRfY29tcGF0X21hdGNoX29mZnNldChtLT51Lmtlcm5lbC5tYXRjaCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgY29tcGF0X2NhbGNfZW50cnkoc3RydWN0IGlwNnRfZW50cnkgKmUsCitzdGF0aWMgaW50IGNvbXBhdF9jYWxjX2VudHJ5KGNvbnN0IHN0cnVjdCBpcDZ0X2VudHJ5ICplLAogCQkJICAgICBjb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqaW5mbywKLQkJCSAgICAgdm9pZCAqYmFzZSwgc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm8pCisJCQkgICAgIGNvbnN0IHZvaWQgKmJhc2UsIHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvKQogewotCXN0cnVjdCBpcDZ0X2VudHJ5X3RhcmdldCAqdDsKKwljb25zdCBzdHJ1Y3QgeHRfZW50cnlfbWF0Y2ggKmVtYXRjaDsKKwljb25zdCBzdHJ1Y3QgaXA2dF9lbnRyeV90YXJnZXQgKnQ7CiAJdW5zaWduZWQgaW50IGVudHJ5X29mZnNldDsKIAlpbnQgb2ZmLCBpLCByZXQ7CiAKIAlvZmYgPSBzaXplb2Yoc3RydWN0IGlwNnRfZW50cnkpIC0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfaXA2dF9lbnRyeSk7CiAJZW50cnlfb2Zmc2V0ID0gKHZvaWQgKillIC0gYmFzZTsKLQlJUDZUX01BVENIX0lURVJBVEUoZSwgY29tcGF0X2NhbGNfbWF0Y2gsICZvZmYpOwotCXQgPSBpcDZ0X2dldF90YXJnZXQoZSk7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKQorCQlvZmYgKz0geHRfY29tcGF0X21hdGNoX29mZnNldChlbWF0Y2gtPnUua2VybmVsLm1hdGNoKTsKKwl0ID0gaXA2dF9nZXRfdGFyZ2V0X2MoZSk7CiAJb2ZmICs9IHh0X2NvbXBhdF90YXJnZXRfb2Zmc2V0KHQtPnUua2VybmVsLnRhcmdldCk7CiAJbmV3aW5mby0+c2l6ZSAtPSBvZmY7CiAJcmV0ID0geHRfY29tcGF0X2FkZF9vZmZzZXQoQUZfSU5FVDYsIGVudHJ5X29mZnNldCwgb2ZmKTsKQEAgLTExMjQsNyArMTExNiw5IEBACiBzdGF0aWMgaW50IGNvbXBhdF90YWJsZV9pbmZvKGNvbnN0IHN0cnVjdCB4dF90YWJsZV9pbmZvICppbmZvLAogCQkJICAgICBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbykKIHsKKwlzdHJ1Y3QgaXA2dF9lbnRyeSAqaXRlcjsKIAl2b2lkICpsb2NfY3B1X2VudHJ5OworCWludCByZXQ7CiAKIAlpZiAoIW5ld2luZm8gfHwgIWluZm8pCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTEzMywxMyArMTEyNywxNyBAQAogCW1lbWNweShuZXdpbmZvLCBpbmZvLCBvZmZzZXRvZihzdHJ1Y3QgeHRfdGFibGVfaW5mbywgZW50cmllcykpOwogCW5ld2luZm8tPmluaXRpYWxfZW50cmllcyA9IDA7CiAJbG9jX2NwdV9lbnRyeSA9IGluZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07Ci0JcmV0dXJuIElQNlRfRU5UUllfSVRFUkFURShsb2NfY3B1X2VudHJ5LCBpbmZvLT5zaXplLAotCQkJCSAgY29tcGF0X2NhbGNfZW50cnksIGluZm8sIGxvY19jcHVfZW50cnksCi0JCQkJICBuZXdpbmZvKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIGxvY19jcHVfZW50cnksIGluZm8tPnNpemUpIHsKKwkJcmV0ID0gY29tcGF0X2NhbGNfZW50cnkoaXRlciwgaW5mbywgbG9jX2NwdV9lbnRyeSwgbmV3aW5mbyk7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQorCXJldHVybiAwOwogfQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgZ2V0X2luZm8oc3RydWN0IG5ldCAqbmV0LCB2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4sIGludCBjb21wYXQpCitzdGF0aWMgaW50IGdldF9pbmZvKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCAqbGVuLCBpbnQgY29tcGF0KQogewogCWNoYXIgbmFtZVtJUDZUX1RBQkxFX01BWE5BTUVMRU5dOwogCXN0cnVjdCB4dF90YWJsZSAqdDsKQEAgLTExOTksNyArMTE5Nyw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLWdldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLCBpbnQgKmxlbikKK2dldF9lbnRyaWVzKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMgX191c2VyICp1cHRyLAorICAgICAgICAgICAgY29uc3QgaW50ICpsZW4pCiB7CiAJaW50IHJldDsKIAlzdHJ1Y3QgaXA2dF9nZXRfZW50cmllcyBnZXQ7CkBAIC0xMjQ3LDYgKzEyNDYsNyBAQAogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpvbGRpbmZvOwogCXN0cnVjdCB4dF9jb3VudGVycyAqY291bnRlcnM7CiAJY29uc3Qgdm9pZCAqbG9jX2NwdV9vbGRfZW50cnk7CisJc3RydWN0IGlwNnRfZW50cnkgKml0ZXI7CiAKIAlyZXQgPSAwOwogCWNvdW50ZXJzID0gdm1hbGxvY19ub2RlKG51bV9jb3VudGVycyAqIHNpemVvZihzdHJ1Y3QgeHRfY291bnRlcnMpLApAQCAtMTI5MCw4ICsxMjkwLDkgQEAKIAogCS8qIERlY3JlYXNlIG1vZHVsZSB1c2FnZSBjb3VudHMgYW5kIGZyZWUgcmVzb3VyY2UgKi8KIAlsb2NfY3B1X29sZF9lbnRyeSA9IG9sZGluZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07Ci0JSVA2VF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfb2xkX2VudHJ5LCBvbGRpbmZvLT5zaXplLCBjbGVhbnVwX2VudHJ5LAotCQkJICAgTlVMTCk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyLCBsb2NfY3B1X29sZF9lbnRyeSwgb2xkaW5mby0+c2l6ZSkKKwkJY2xlYW51cF9lbnRyeShpdGVyLCBuZXQpOworCiAJeHRfZnJlZV90YWJsZV9pbmZvKG9sZGluZm8pOwogCWlmIChjb3B5X3RvX3VzZXIoY291bnRlcnNfcHRyLCBjb3VudGVycywKIAkJCSBzaXplb2Yoc3RydWN0IHh0X2NvdW50ZXJzKSAqIG51bV9jb3VudGVycykgIT0gMCkKQEAgLTEzMTAsMTIgKzEzMTEsMTMgQEAKIH0KIAogc3RhdGljIGludAotZG9fcmVwbGFjZShzdHJ1Y3QgbmV0ICpuZXQsIHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuKQorZG9fcmVwbGFjZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHZvaWQgX191c2VyICp1c2VyLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWludCByZXQ7CiAJc3RydWN0IGlwNnRfcmVwbGFjZSB0bXA7CiAJc3RydWN0IHh0X3RhYmxlX2luZm8gKm5ld2luZm87CiAJdm9pZCAqbG9jX2NwdV9lbnRyeTsKKwlzdHJ1Y3QgaXA2dF9lbnRyeSAqaXRlcjsKIAogCWlmIChjb3B5X2Zyb21fdXNlcigmdG1wLCB1c2VyLCBzaXplb2YodG1wKSkgIT0gMCkKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC0xMzM2LDkgKzEzMzgsNyBAQAogCQlnb3RvIGZyZWVfbmV3aW5mbzsKIAl9CiAKLQlyZXQgPSB0cmFuc2xhdGVfdGFibGUodG1wLm5hbWUsIHRtcC52YWxpZF9ob29rcywKLQkJCSAgICAgIG5ld2luZm8sIGxvY19jcHVfZW50cnksIHRtcC5zaXplLCB0bXAubnVtX2VudHJpZXMsCi0JCQkgICAgICB0bXAuaG9va19lbnRyeSwgdG1wLnVuZGVyZmxvdyk7CisJcmV0ID0gdHJhbnNsYXRlX3RhYmxlKG5ldCwgbmV3aW5mbywgbG9jX2NwdV9lbnRyeSwgJnRtcCk7CiAJaWYgKHJldCAhPSAwKQogCQlnb3RvIGZyZWVfbmV3aW5mbzsKIApAQCAtMTM1MSwyNyArMTM1MSwxNSBAQAogCXJldHVybiAwOwogCiAgZnJlZV9uZXdpbmZvX3VudHJhbnM6Ci0JSVA2VF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksIG5ld2luZm8tPnNpemUsIGNsZWFudXBfZW50cnksIE5VTEwpOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgbG9jX2NwdV9lbnRyeSwgbmV3aW5mby0+c2l6ZSkKKwkJY2xlYW51cF9lbnRyeShpdGVyLCBuZXQpOwogIGZyZWVfbmV3aW5mbzoKIAl4dF9mcmVlX3RhYmxlX2luZm8obmV3aW5mbyk7CiAJcmV0dXJuIHJldDsKIH0KIAotLyogV2UncmUgbGF6eSwgYW5kIGFkZCB0byB0aGUgZmlyc3QgQ1BVOyBvdmVyZmxvdyB3b3JrcyBpdHMgZmV5IG1hZ2ljCi0gKiBhbmQgZXZlcnl0aGluZyBpcyBPSy4gKi8KIHN0YXRpYyBpbnQKLWFkZF9jb3VudGVyX3RvX2VudHJ5KHN0cnVjdCBpcDZ0X2VudHJ5ICplLAotCQkgICAgIGNvbnN0IHN0cnVjdCB4dF9jb3VudGVycyBhZGRtZVtdLAotCQkgICAgIHVuc2lnbmVkIGludCAqaSkKLXsKLQlBRERfQ09VTlRFUihlLT5jb3VudGVycywgYWRkbWVbKmldLmJjbnQsIGFkZG1lWyppXS5wY250KTsKLQotCSgqaSkrKzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotZG9fYWRkX2NvdW50ZXJzKHN0cnVjdCBuZXQgKm5ldCwgdm9pZCBfX3VzZXIgKnVzZXIsIHVuc2lnbmVkIGludCBsZW4sCitkb19hZGRfY291bnRlcnMoc3RydWN0IG5ldCAqbmV0LCBjb25zdCB2b2lkIF9fdXNlciAqdXNlciwgdW5zaWduZWQgaW50IGxlbiwKIAkJaW50IGNvbXBhdCkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgY3VyY3B1OwpAQCAtMTM4NSw2ICsxMzczLDcgQEAKIAljb25zdCBzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqcHJpdmF0ZTsKIAlpbnQgcmV0ID0gMDsKIAljb25zdCB2b2lkICpsb2NfY3B1X2VudHJ5OworCXN0cnVjdCBpcDZ0X2VudHJ5ICppdGVyOwogI2lmZGVmIENPTkZJR19DT01QQVQKIAlzdHJ1Y3QgY29tcGF0X3h0X2NvdW50ZXJzX2luZm8gY29tcGF0X3RtcDsKIApAQCAtMTQ0MywxMSArMTQzMiwxMCBAQAogCWN1cmNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAl4dF9pbmZvX3dybG9jayhjdXJjcHUpOwogCWxvY19jcHVfZW50cnkgPSBwcml2YXRlLT5lbnRyaWVzW2N1cmNwdV07Ci0JSVA2VF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksCi0JCQkgIHByaXZhdGUtPnNpemUsCi0JCQkgIGFkZF9jb3VudGVyX3RvX2VudHJ5LAotCQkJICBwYWRkYywKLQkJCSAgJmkpOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgbG9jX2NwdV9lbnRyeSwgcHJpdmF0ZS0+c2l6ZSkgeworCQlBRERfQ09VTlRFUihpdGVyLT5jb3VudGVycywgcGFkZGNbaV0uYmNudCwgcGFkZGNbaV0ucGNudCk7CisJCSsraTsKKwl9CiAJeHRfaW5mb193cnVubG9jayhjdXJjcHUpOwogCiAgdW5sb2NrX3VwX2ZyZWU6CkBAIC0xNDc2LDQ1ICsxNDY0LDQwIEBACiBzdGF0aWMgaW50CiBjb21wYXRfY29weV9lbnRyeV90b191c2VyKHN0cnVjdCBpcDZ0X2VudHJ5ICplLCB2b2lkIF9fdXNlciAqKmRzdHB0ciwKIAkJCSAgdW5zaWduZWQgaW50ICpzaXplLCBzdHJ1Y3QgeHRfY291bnRlcnMgKmNvdW50ZXJzLAotCQkJICB1bnNpZ25lZCBpbnQgKmkpCisJCQkgIHVuc2lnbmVkIGludCBpKQogewogCXN0cnVjdCBpcDZ0X2VudHJ5X3RhcmdldCAqdDsKIAlzdHJ1Y3QgY29tcGF0X2lwNnRfZW50cnkgX191c2VyICpjZTsKIAl1X2ludDE2X3QgdGFyZ2V0X29mZnNldCwgbmV4dF9vZmZzZXQ7CiAJY29tcGF0X3VpbnRfdCBvcmlnc2l6ZTsKLQlpbnQgcmV0OworCWNvbnN0IHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqZW1hdGNoOworCWludCByZXQgPSAwOwogCi0JcmV0ID0gLUVGQVVMVDsKIAlvcmlnc2l6ZSA9ICpzaXplOwogCWNlID0gKHN0cnVjdCBjb21wYXRfaXA2dF9lbnRyeSBfX3VzZXIgKikqZHN0cHRyOwotCWlmIChjb3B5X3RvX3VzZXIoY2UsIGUsIHNpemVvZihzdHJ1Y3QgaXA2dF9lbnRyeSkpKQotCQlnb3RvIG91dDsKLQotCWlmIChjb3B5X3RvX3VzZXIoJmNlLT5jb3VudGVycywgJmNvdW50ZXJzWyppXSwgc2l6ZW9mKGNvdW50ZXJzWyppXSkpKQotCQlnb3RvIG91dDsKKwlpZiAoY29weV90b191c2VyKGNlLCBlLCBzaXplb2Yoc3RydWN0IGlwNnRfZW50cnkpKSAhPSAwIHx8CisJICAgIGNvcHlfdG9fdXNlcigmY2UtPmNvdW50ZXJzLCAmY291bnRlcnNbaV0sCisJICAgIHNpemVvZihjb3VudGVyc1tpXSkpICE9IDApCisJCXJldHVybiAtRUZBVUxUOwogCiAJKmRzdHB0ciArPSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pcDZ0X2VudHJ5KTsKIAkqc2l6ZSAtPSBzaXplb2Yoc3RydWN0IGlwNnRfZW50cnkpIC0gc2l6ZW9mKHN0cnVjdCBjb21wYXRfaXA2dF9lbnRyeSk7CiAKLQlyZXQgPSBJUDZUX01BVENIX0lURVJBVEUoZSwgeHRfY29tcGF0X21hdGNoX3RvX3VzZXIsIGRzdHB0ciwgc2l6ZSk7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKSB7CisJCXJldCA9IHh0X2NvbXBhdF9tYXRjaF90b191c2VyKGVtYXRjaCwgZHN0cHRyLCBzaXplKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CiAJdGFyZ2V0X29mZnNldCA9IGUtPnRhcmdldF9vZmZzZXQgLSAob3JpZ3NpemUgLSAqc2l6ZSk7Ci0JaWYgKHJldCkKLQkJZ290byBvdXQ7CiAJdCA9IGlwNnRfZ2V0X3RhcmdldChlKTsKIAlyZXQgPSB4dF9jb21wYXRfdGFyZ2V0X3RvX3VzZXIodCwgZHN0cHRyLCBzaXplKTsKIAlpZiAocmV0KQotCQlnb3RvIG91dDsKLQlyZXQgPSAtRUZBVUxUOworCQlyZXR1cm4gcmV0OwogCW5leHRfb2Zmc2V0ID0gZS0+bmV4dF9vZmZzZXQgLSAob3JpZ3NpemUgLSAqc2l6ZSk7Ci0JaWYgKHB1dF91c2VyKHRhcmdldF9vZmZzZXQsICZjZS0+dGFyZ2V0X29mZnNldCkpCi0JCWdvdG8gb3V0OwotCWlmIChwdXRfdXNlcihuZXh0X29mZnNldCwgJmNlLT5uZXh0X29mZnNldCkpCi0JCWdvdG8gb3V0OwotCi0JKCppKSsrOworCWlmIChwdXRfdXNlcih0YXJnZXRfb2Zmc2V0LCAmY2UtPnRhcmdldF9vZmZzZXQpICE9IDAgfHwKKwkgICAgcHV0X3VzZXIobmV4dF9vZmZzZXQsICZjZS0+bmV4dF9vZmZzZXQpICE9IDApCisJCXJldHVybiAtRUZBVUxUOwogCXJldHVybiAwOwotb3V0OgotCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTE1MjIsNyArMTUwNSw3IEBACiAJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLAogCQkgICAgICAgY29uc3Qgc3RydWN0IGlwNnRfaXA2ICppcHY2LAogCQkgICAgICAgdW5zaWduZWQgaW50IGhvb2ttYXNrLAotCQkgICAgICAgaW50ICpzaXplLCB1bnNpZ25lZCBpbnQgKmkpCisJCSAgICAgICBpbnQgKnNpemUpCiB7CiAJc3RydWN0IHh0X21hdGNoICptYXRjaDsKIApAQCAtMTUzNiw0NyArMTUxOSwzMiBAQAogCX0KIAltLT51Lmtlcm5lbC5tYXRjaCA9IG1hdGNoOwogCSpzaXplICs9IHh0X2NvbXBhdF9tYXRjaF9vZmZzZXQobWF0Y2gpOwotCi0JKCppKSsrOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50Ci1jb21wYXRfcmVsZWFzZV9tYXRjaChzdHJ1Y3QgaXA2dF9lbnRyeV9tYXRjaCAqbSwgdW5zaWduZWQgaW50ICppKQotewotCWlmIChpICYmICgqaSktLSA9PSAwKQotCQlyZXR1cm4gMTsKLQotCW1vZHVsZV9wdXQobS0+dS5rZXJuZWwubWF0Y2gtPm1lKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotY29tcGF0X3JlbGVhc2VfZW50cnkoc3RydWN0IGNvbXBhdF9pcDZ0X2VudHJ5ICplLCB1bnNpZ25lZCBpbnQgKmkpCitzdGF0aWMgdm9pZCBjb21wYXRfcmVsZWFzZV9lbnRyeShzdHJ1Y3QgY29tcGF0X2lwNnRfZW50cnkgKmUpCiB7CiAJc3RydWN0IGlwNnRfZW50cnlfdGFyZ2V0ICp0OwotCi0JaWYgKGkgJiYgKCppKS0tID09IDApCi0JCXJldHVybiAxOworCXN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqZW1hdGNoOwogCiAJLyogQ2xlYW51cCBhbGwgbWF0Y2hlcyAqLwotCUNPTVBBVF9JUDZUX01BVENIX0lURVJBVEUoZSwgY29tcGF0X3JlbGVhc2VfbWF0Y2gsIE5VTEwpOworCXh0X2VtYXRjaF9mb3JlYWNoKGVtYXRjaCwgZSkKKwkJbW9kdWxlX3B1dChlbWF0Y2gtPnUua2VybmVsLm1hdGNoLT5tZSk7CiAJdCA9IGNvbXBhdF9pcDZ0X2dldF90YXJnZXQoZSk7CiAJbW9kdWxlX3B1dCh0LT51Lmtlcm5lbC50YXJnZXQtPm1lKTsKLQlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludAogY2hlY2tfY29tcGF0X2VudHJ5X3NpemVfYW5kX2hvb2tzKHN0cnVjdCBjb21wYXRfaXA2dF9lbnRyeSAqZSwKIAkJCQkgIHN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLAogCQkJCSAgdW5zaWduZWQgaW50ICpzaXplLAotCQkJCSAgdW5zaWduZWQgY2hhciAqYmFzZSwKLQkJCQkgIHVuc2lnbmVkIGNoYXIgKmxpbWl0LAotCQkJCSAgdW5zaWduZWQgaW50ICpob29rX2VudHJpZXMsCi0JCQkJICB1bnNpZ25lZCBpbnQgKnVuZGVyZmxvd3MsCi0JCQkJICB1bnNpZ25lZCBpbnQgKmksCisJCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpiYXNlLAorCQkJCSAgY29uc3QgdW5zaWduZWQgY2hhciAqbGltaXQsCisJCQkJICBjb25zdCB1bnNpZ25lZCBpbnQgKmhvb2tfZW50cmllcywKKwkJCQkgIGNvbnN0IHVuc2lnbmVkIGludCAqdW5kZXJmbG93cywKIAkJCQkgIGNvbnN0IGNoYXIgKm5hbWUpCiB7CisJc3RydWN0IHh0X2VudHJ5X21hdGNoICplbWF0Y2g7CiAJc3RydWN0IGlwNnRfZW50cnlfdGFyZ2V0ICp0OwogCXN0cnVjdCB4dF90YXJnZXQgKnRhcmdldDsKIAl1bnNpZ25lZCBpbnQgZW50cnlfb2Zmc2V0OwpAQCAtMTYwNSwxMCArMTU3MywxMyBAQAogCW9mZiA9IHNpemVvZihzdHJ1Y3QgaXA2dF9lbnRyeSkgLSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pcDZ0X2VudHJ5KTsKIAllbnRyeV9vZmZzZXQgPSAodm9pZCAqKWUgLSAodm9pZCAqKWJhc2U7CiAJaiA9IDA7Ci0JcmV0ID0gQ09NUEFUX0lQNlRfTUFUQ0hfSVRFUkFURShlLCBjb21wYXRfZmluZF9jYWxjX21hdGNoLCBuYW1lLAotCQkJCQkmZS0+aXB2NiwgZS0+Y29tZWZyb20sICZvZmYsICZqKTsKLQlpZiAocmV0ICE9IDApCi0JCWdvdG8gcmVsZWFzZV9tYXRjaGVzOworCXh0X2VtYXRjaF9mb3JlYWNoKGVtYXRjaCwgZSkgeworCQlyZXQgPSBjb21wYXRfZmluZF9jYWxjX21hdGNoKGVtYXRjaCwgbmFtZSwKKwkJCQkJICAgICAmZS0+aXB2NiwgZS0+Y29tZWZyb20sICZvZmYpOworCQlpZiAocmV0ICE9IDApCisJCQlnb3RvIHJlbGVhc2VfbWF0Y2hlczsKKwkJKytqOworCX0KIAogCXQgPSBjb21wYXRfaXA2dF9nZXRfdGFyZ2V0KGUpOwogCXRhcmdldCA9IHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKHh0X2ZpbmRfdGFyZ2V0KEFGX0lORVQ2LApAQCAtMTY0MCwxNCArMTYxMSwxNiBAQAogCS8qIENsZWFyIGNvdW50ZXJzIGFuZCBjb21lZnJvbSAqLwogCW1lbXNldCgmZS0+Y291bnRlcnMsIDAsIHNpemVvZihlLT5jb3VudGVycykpOwogCWUtPmNvbWVmcm9tID0gMDsKLQotCSgqaSkrKzsKIAlyZXR1cm4gMDsKIAogb3V0OgogCW1vZHVsZV9wdXQodC0+dS5rZXJuZWwudGFyZ2V0LT5tZSk7CiByZWxlYXNlX21hdGNoZXM6Ci0JSVA2VF9NQVRDSF9JVEVSQVRFKGUsIGNvbXBhdF9yZWxlYXNlX21hdGNoLCAmaik7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKSB7CisJCWlmIChqLS0gPT0gMCkKKwkJCWJyZWFrOworCQltb2R1bGVfcHV0KGVtYXRjaC0+dS5rZXJuZWwubWF0Y2gtPm1lKTsKKwl9CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTY2MSw2ICsxNjM0LDcgQEAKIAlzdHJ1Y3QgaXA2dF9lbnRyeSAqZGU7CiAJdW5zaWduZWQgaW50IG9yaWdzaXplOwogCWludCByZXQsIGg7CisJc3RydWN0IHh0X2VudHJ5X21hdGNoICplbWF0Y2g7CiAKIAlyZXQgPSAwOwogCW9yaWdzaXplID0gKnNpemU7CkBAIC0xNjcxLDEwICsxNjQ1LDExIEBACiAJKmRzdHB0ciArPSBzaXplb2Yoc3RydWN0IGlwNnRfZW50cnkpOwogCSpzaXplICs9IHNpemVvZihzdHJ1Y3QgaXA2dF9lbnRyeSkgLSBzaXplb2Yoc3RydWN0IGNvbXBhdF9pcDZ0X2VudHJ5KTsKIAotCXJldCA9IENPTVBBVF9JUDZUX01BVENIX0lURVJBVEUoZSwgeHRfY29tcGF0X21hdGNoX2Zyb21fdXNlciwKLQkJCQkJZHN0cHRyLCBzaXplKTsKLQlpZiAocmV0KQotCQlyZXR1cm4gcmV0OworCXh0X2VtYXRjaF9mb3JlYWNoKGVtYXRjaCwgZSkgeworCQlyZXQgPSB4dF9jb21wYXRfbWF0Y2hfZnJvbV91c2VyKGVtYXRjaCwgZHN0cHRyLCBzaXplKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJcmV0dXJuIHJldDsKKwl9CiAJZGUtPnRhcmdldF9vZmZzZXQgPSBlLT50YXJnZXRfb2Zmc2V0IC0gKG9yaWdzaXplIC0gKnNpemUpOwogCXQgPSBjb21wYXRfaXA2dF9nZXRfdGFyZ2V0KGUpOwogCXRhcmdldCA9IHQtPnUua2VybmVsLnRhcmdldDsKQEAgLTE2OTAsMzYgKzE2NjUsNDQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGNvbXBhdF9jaGVja19lbnRyeShzdHJ1Y3QgaXA2dF9lbnRyeSAqZSwgY29uc3QgY2hhciAqbmFtZSwKLQkJCQkgICAgIHVuc2lnbmVkIGludCAqaSkKK3N0YXRpYyBpbnQgY29tcGF0X2NoZWNrX2VudHJ5KHN0cnVjdCBpcDZ0X2VudHJ5ICplLCBzdHJ1Y3QgbmV0ICpuZXQsCisJCQkgICAgICBjb25zdCBjaGFyICpuYW1lKQogewogCXVuc2lnbmVkIGludCBqOwotCWludCByZXQ7CisJaW50IHJldCA9IDA7CiAJc3RydWN0IHh0X210Y2hrX3BhcmFtIG10cGFyOworCXN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqZW1hdGNoOwogCiAJaiA9IDA7CisJbXRwYXIubmV0CT0gbmV0OwogCW10cGFyLnRhYmxlICAgICA9IG5hbWU7CiAJbXRwYXIuZW50cnlpbmZvID0gJmUtPmlwdjY7CiAJbXRwYXIuaG9va19tYXNrID0gZS0+Y29tZWZyb207CiAJbXRwYXIuZmFtaWx5ICAgID0gTkZQUk9UT19JUFY2OwotCXJldCA9IElQNlRfTUFUQ0hfSVRFUkFURShlLCBjaGVja19tYXRjaCwgJm10cGFyLCAmaik7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKSB7CisJCXJldCA9IGNoZWNrX21hdGNoKGVtYXRjaCwgJm10cGFyKTsKKwkJaWYgKHJldCAhPSAwKQorCQkJZ290byBjbGVhbnVwX21hdGNoZXM7CisJCSsrajsKKwl9CisKKwlyZXQgPSBjaGVja190YXJnZXQoZSwgbmV0LCBuYW1lKTsKIAlpZiAocmV0KQogCQlnb3RvIGNsZWFudXBfbWF0Y2hlczsKLQotCXJldCA9IGNoZWNrX3RhcmdldChlLCBuYW1lKTsKLQlpZiAocmV0KQotCQlnb3RvIGNsZWFudXBfbWF0Y2hlczsKLQotCSgqaSkrKzsKIAlyZXR1cm4gMDsKIAogIGNsZWFudXBfbWF0Y2hlczoKLQlJUDZUX01BVENIX0lURVJBVEUoZSwgY2xlYW51cF9tYXRjaCwgJmopOworCXh0X2VtYXRjaF9mb3JlYWNoKGVtYXRjaCwgZSkgeworCQlpZiAoai0tID09IDApCisJCQlicmVhazsKKwkJY2xlYW51cF9tYXRjaChlbWF0Y2gsIG5ldCk7CisJfQogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQKLXRyYW5zbGF0ZV9jb21wYXRfdGFibGUoY29uc3QgY2hhciAqbmFtZSwKK3RyYW5zbGF0ZV9jb21wYXRfdGFibGUoc3RydWN0IG5ldCAqbmV0LAorCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwKIAkJICAgICAgIHVuc2lnbmVkIGludCB2YWxpZF9ob29rcywKIAkJICAgICAgIHN0cnVjdCB4dF90YWJsZV9pbmZvICoqcGluZm8sCiAJCSAgICAgICB2b2lkICoqcGVudHJ5MCwKQEAgLTE3MzEsOCArMTcxNCwxMCBAQAogCXVuc2lnbmVkIGludCBpLCBqOwogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpuZXdpbmZvLCAqaW5mbzsKIAl2b2lkICpwb3MsICplbnRyeTAsICplbnRyeTE7CisJc3RydWN0IGNvbXBhdF9pcDZ0X2VudHJ5ICppdGVyMDsKKwlzdHJ1Y3QgaXA2dF9lbnRyeSAqaXRlcjE7CiAJdW5zaWduZWQgaW50IHNpemU7Ci0JaW50IHJldDsKKwlpbnQgcmV0ID0gMDsKIAogCWluZm8gPSAqcGluZm87CiAJZW50cnkwID0gKnBlbnRyeTA7CkBAIC0xNzQ5LDEzICsxNzM0LDE3IEBACiAJaiA9IDA7CiAJeHRfY29tcGF0X2xvY2soQUZfSU5FVDYpOwogCS8qIFdhbGsgdGhyb3VnaCBlbnRyaWVzLCBjaGVja2luZyBvZmZzZXRzLiAqLwotCXJldCA9IENPTVBBVF9JUDZUX0VOVFJZX0lURVJBVEUoZW50cnkwLCB0b3RhbF9zaXplLAotCQkJCQljaGVja19jb21wYXRfZW50cnlfc2l6ZV9hbmRfaG9va3MsCi0JCQkJCWluZm8sICZzaXplLCBlbnRyeTAsCi0JCQkJCWVudHJ5MCArIHRvdGFsX3NpemUsCi0JCQkJCWhvb2tfZW50cmllcywgdW5kZXJmbG93cywgJmosIG5hbWUpOwotCWlmIChyZXQgIT0gMCkKLQkJZ290byBvdXRfdW5sb2NrOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlcjAsIGVudHJ5MCwgdG90YWxfc2l6ZSkgeworCQlyZXQgPSBjaGVja19jb21wYXRfZW50cnlfc2l6ZV9hbmRfaG9va3MoaXRlcjAsIGluZm8sICZzaXplLAorCQkJCQkJCWVudHJ5MCwKKwkJCQkJCQllbnRyeTAgKyB0b3RhbF9zaXplLAorCQkJCQkJCWhvb2tfZW50cmllcywKKwkJCQkJCQl1bmRlcmZsb3dzLAorCQkJCQkJCW5hbWUpOworCQlpZiAocmV0ICE9IDApCisJCQlnb3RvIG91dF91bmxvY2s7CisJCSsrajsKKwl9CiAKIAlyZXQgPSAtRUlOVkFMOwogCWlmIChqICE9IG51bWJlcikgewpAQCAtMTc5NCw5ICsxNzgzLDEyIEBACiAJZW50cnkxID0gbmV3aW5mby0+ZW50cmllc1tyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpXTsKIAlwb3MgPSBlbnRyeTE7CiAJc2l6ZSA9IHRvdGFsX3NpemU7Ci0JcmV0ID0gQ09NUEFUX0lQNlRfRU5UUllfSVRFUkFURShlbnRyeTAsIHRvdGFsX3NpemUsCi0JCQkJCWNvbXBhdF9jb3B5X2VudHJ5X2Zyb21fdXNlciwKLQkJCQkJJnBvcywgJnNpemUsIG5hbWUsIG5ld2luZm8sIGVudHJ5MSk7CisJeHRfZW50cnlfZm9yZWFjaChpdGVyMCwgZW50cnkwLCB0b3RhbF9zaXplKSB7CisJCXJldCA9IGNvbXBhdF9jb3B5X2VudHJ5X2Zyb21fdXNlcihpdGVyMCwgJnBvcywgJnNpemUsCisJCQkJCQkgIG5hbWUsIG5ld2luZm8sIGVudHJ5MSk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWJyZWFrOworCX0KIAl4dF9jb21wYXRfZmx1c2hfb2Zmc2V0cyhBRl9JTkVUNik7CiAJeHRfY29tcGF0X3VubG9jayhBRl9JTkVUNik7CiAJaWYgKHJldCkKQEAgLTE4MDcsMTMgKzE3OTksMzIgQEAKIAkJZ290byBmcmVlX25ld2luZm87CiAKIAlpID0gMDsKLQlyZXQgPSBJUDZUX0VOVFJZX0lURVJBVEUoZW50cnkxLCBuZXdpbmZvLT5zaXplLCBjb21wYXRfY2hlY2tfZW50cnksCi0JCQkJIG5hbWUsICZpKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIxLCBlbnRyeTEsIG5ld2luZm8tPnNpemUpIHsKKwkJcmV0ID0gY29tcGF0X2NoZWNrX2VudHJ5KGl0ZXIxLCBuZXQsIG5hbWUpOworCQlpZiAocmV0ICE9IDApCisJCQlicmVhazsKKwkJKytpOworCX0KIAlpZiAocmV0KSB7CisJCS8qCisJCSAqIFRoZSBmaXJzdCBpIG1hdGNoZXMgbmVlZCBjbGVhbnVwX2VudHJ5IChjYWxscyAtPmRlc3Ryb3kpCisJCSAqIGJlY2F1c2UgdGhleSBoYWQgY2FsbGVkIC0+Y2hlY2sgYWxyZWFkeS4gVGhlIG90aGVyIGotaQorCQkgKiBlbnRyaWVzIG5lZWQgb25seSByZWxlYXNlLgorCQkgKi8KKwkJaW50IHNraXAgPSBpOwogCQlqIC09IGk7Ci0JCUNPTVBBVF9JUDZUX0VOVFJZX0lURVJBVEVfQ09OVElOVUUoZW50cnkwLCBuZXdpbmZvLT5zaXplLCBpLAotCQkJCQkJICAgY29tcGF0X3JlbGVhc2VfZW50cnksICZqKTsKLQkJSVA2VF9FTlRSWV9JVEVSQVRFKGVudHJ5MSwgbmV3aW5mby0+c2l6ZSwgY2xlYW51cF9lbnRyeSwgJmkpOworCQl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIwLCBlbnRyeTAsIG5ld2luZm8tPnNpemUpIHsKKwkJCWlmIChza2lwLS0gPiAwKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGotLSA9PSAwKQorCQkJCWJyZWFrOworCQkJY29tcGF0X3JlbGVhc2VfZW50cnkoaXRlcjApOworCQl9CisJCXh0X2VudHJ5X2ZvcmVhY2goaXRlcjEsIGVudHJ5MSwgbmV3aW5mby0+c2l6ZSkgeworCQkJaWYgKGktLSA9PSAwKQorCQkJCWJyZWFrOworCQkJY2xlYW51cF9lbnRyeShpdGVyMSwgbmV0KTsKKwkJfQogCQl4dF9mcmVlX3RhYmxlX2luZm8obmV3aW5mbyk7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMTgzMSw3ICsxODQyLDExIEBACiBmcmVlX25ld2luZm86CiAJeHRfZnJlZV90YWJsZV9pbmZvKG5ld2luZm8pOwogb3V0OgotCUNPTVBBVF9JUDZUX0VOVFJZX0lURVJBVEUoZW50cnkwLCB0b3RhbF9zaXplLCBjb21wYXRfcmVsZWFzZV9lbnRyeSwgJmopOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlcjAsIGVudHJ5MCwgdG90YWxfc2l6ZSkgeworCQlpZiAoai0tID09IDApCisJCQlicmVhazsKKwkJY29tcGF0X3JlbGVhc2VfZW50cnkoaXRlcjApOworCX0KIAlyZXR1cm4gcmV0Owogb3V0X3VubG9jazoKIAl4dF9jb21wYXRfZmx1c2hfb2Zmc2V0cyhBRl9JTkVUNik7CkBAIC0xODQ2LDYgKzE4NjEsNyBAQAogCXN0cnVjdCBjb21wYXRfaXA2dF9yZXBsYWNlIHRtcDsKIAlzdHJ1Y3QgeHRfdGFibGVfaW5mbyAqbmV3aW5mbzsKIAl2b2lkICpsb2NfY3B1X2VudHJ5OworCXN0cnVjdCBpcDZ0X2VudHJ5ICppdGVyOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIHVzZXIsIHNpemVvZih0bXApKSAhPSAwKQogCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTE4NjgsNyArMTg4NCw3IEBACiAJCWdvdG8gZnJlZV9uZXdpbmZvOwogCX0KIAotCXJldCA9IHRyYW5zbGF0ZV9jb21wYXRfdGFibGUodG1wLm5hbWUsIHRtcC52YWxpZF9ob29rcywKKwlyZXQgPSB0cmFuc2xhdGVfY29tcGF0X3RhYmxlKG5ldCwgdG1wLm5hbWUsIHRtcC52YWxpZF9ob29rcywKIAkJCQkgICAgICZuZXdpbmZvLCAmbG9jX2NwdV9lbnRyeSwgdG1wLnNpemUsCiAJCQkJICAgICB0bXAubnVtX2VudHJpZXMsIHRtcC5ob29rX2VudHJ5LAogCQkJCSAgICAgdG1wLnVuZGVyZmxvdyk7CkBAIC0xODg0LDcgKzE5MDAsOCBAQAogCXJldHVybiAwOwogCiAgZnJlZV9uZXdpbmZvX3VudHJhbnM6Ci0JSVA2VF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksIG5ld2luZm8tPnNpemUsIGNsZWFudXBfZW50cnksIE5VTEwpOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgbG9jX2NwdV9lbnRyeSwgbmV3aW5mby0+c2l6ZSkKKwkJY2xlYW51cF9lbnRyeShpdGVyLCBuZXQpOwogIGZyZWVfbmV3aW5mbzoKIAl4dF9mcmVlX3RhYmxlX2luZm8obmV3aW5mbyk7CiAJcmV0dXJuIHJldDsKQEAgLTE5MzMsNiArMTk1MCw3IEBACiAJaW50IHJldCA9IDA7CiAJY29uc3Qgdm9pZCAqbG9jX2NwdV9lbnRyeTsKIAl1bnNpZ25lZCBpbnQgaSA9IDA7CisJc3RydWN0IGlwNnRfZW50cnkgKml0ZXI7CiAKIAljb3VudGVycyA9IGFsbG9jX2NvdW50ZXJzKHRhYmxlKTsKIAlpZiAoSVNfRVJSKGNvdW50ZXJzKSkKQEAgLTE5NDUsOSArMTk2MywxMiBAQAogCWxvY19jcHVfZW50cnkgPSBwcml2YXRlLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOwogCXBvcyA9IHVzZXJwdHI7CiAJc2l6ZSA9IHRvdGFsX3NpemU7Ci0JcmV0ID0gSVA2VF9FTlRSWV9JVEVSQVRFKGxvY19jcHVfZW50cnksIHRvdGFsX3NpemUsCi0JCQkJIGNvbXBhdF9jb3B5X2VudHJ5X3RvX3VzZXIsCi0JCQkJICZwb3MsICZzaXplLCBjb3VudGVycywgJmkpOworCXh0X2VudHJ5X2ZvcmVhY2goaXRlciwgbG9jX2NwdV9lbnRyeSwgdG90YWxfc2l6ZSkgeworCQlyZXQgPSBjb21wYXRfY29weV9lbnRyeV90b191c2VyKGl0ZXIsICZwb3MsCisJCQkJCQkmc2l6ZSwgY291bnRlcnMsIGkrKyk7CisJCWlmIChyZXQgIT0gMCkKKwkJCWJyZWFrOworCX0KIAogCXZmcmVlKGNvdW50ZXJzKTsKIAlyZXR1cm4gcmV0OwpAQCAtMjEyMSwxMSArMjE0Miw3IEBACiAJbG9jX2NwdV9lbnRyeSA9IG5ld2luZm8tPmVudHJpZXNbcmF3X3NtcF9wcm9jZXNzb3JfaWQoKV07CiAJbWVtY3B5KGxvY19jcHVfZW50cnksIHJlcGwtPmVudHJpZXMsIHJlcGwtPnNpemUpOwogCi0JcmV0ID0gdHJhbnNsYXRlX3RhYmxlKHRhYmxlLT5uYW1lLCB0YWJsZS0+dmFsaWRfaG9va3MsCi0JCQkgICAgICBuZXdpbmZvLCBsb2NfY3B1X2VudHJ5LCByZXBsLT5zaXplLAotCQkJICAgICAgcmVwbC0+bnVtX2VudHJpZXMsCi0JCQkgICAgICByZXBsLT5ob29rX2VudHJ5LAotCQkJICAgICAgcmVwbC0+dW5kZXJmbG93KTsKKwlyZXQgPSB0cmFuc2xhdGVfdGFibGUobmV0LCBuZXdpbmZvLCBsb2NfY3B1X2VudHJ5LCByZXBsKTsKIAlpZiAocmV0ICE9IDApCiAJCWdvdG8gb3V0X2ZyZWU7CiAKQEAgLTIxNDIsMTcgKzIxNTksMTkgQEAKIAlyZXR1cm4gRVJSX1BUUihyZXQpOwogfQogCi12b2lkIGlwNnRfdW5yZWdpc3Rlcl90YWJsZShzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKQordm9pZCBpcDZ0X3VucmVnaXN0ZXJfdGFibGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlKQogewogCXN0cnVjdCB4dF90YWJsZV9pbmZvICpwcml2YXRlOwogCXZvaWQgKmxvY19jcHVfZW50cnk7CiAJc3RydWN0IG1vZHVsZSAqdGFibGVfb3duZXIgPSB0YWJsZS0+bWU7CisJc3RydWN0IGlwNnRfZW50cnkgKml0ZXI7CiAKIAlwcml2YXRlID0geHRfdW5yZWdpc3Rlcl90YWJsZSh0YWJsZSk7CiAKIAkvKiBEZWNyZWFzZSBtb2R1bGUgdXNhZ2UgY291bnRzIGFuZCBmcmVlIHJlc291cmNlcyAqLwogCWxvY19jcHVfZW50cnkgPSBwcml2YXRlLT5lbnRyaWVzW3Jhd19zbXBfcHJvY2Vzc29yX2lkKCldOwotCUlQNlRfRU5UUllfSVRFUkFURShsb2NfY3B1X2VudHJ5LCBwcml2YXRlLT5zaXplLCBjbGVhbnVwX2VudHJ5LCBOVUxMKTsKKwl4dF9lbnRyeV9mb3JlYWNoKGl0ZXIsIGxvY19jcHVfZW50cnksIHByaXZhdGUtPnNpemUpCisJCWNsZWFudXBfZW50cnkoaXRlciwgbmV0KTsKIAlpZiAocHJpdmF0ZS0+bnVtYmVyID4gcHJpdmF0ZS0+aW5pdGlhbF9lbnRyaWVzKQogCQltb2R1bGVfcHV0KHRhYmxlX293bmVyKTsKIAl4dF9mcmVlX3RhYmxlX2luZm8ocHJpdmF0ZSk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dF9SRUpFQ1QuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jCmluZGV4IDgzMTFjYTMuLmRkOGFmYmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0X1JFSkVDVC5jCkBAIC0xNjksNyArMTY5LDcgQEAKIAlpZiAoaG9va251bSA9PSBORl9JTkVUX0xPQ0FMX09VVCAmJiBza2JfaW4tPmRldiA9PSBOVUxMKQogCQlza2JfaW4tPmRldiA9IG5ldC0+bG9vcGJhY2tfZGV2OwogCi0JaWNtcHY2X3NlbmQoc2tiX2luLCBJQ01QVjZfREVTVF9VTlJFQUNILCBjb2RlLCAwLCBOVUxMKTsKKwlpY21wdjZfc2VuZChza2JfaW4sIElDTVBWNl9ERVNUX1VOUkVBQ0gsIGNvZGUsIDApOwogfQogCiBzdGF0aWMgdW5zaWduZWQgaW50CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfZmlsdGVyLmMKaW5kZXggYWQzNzhlZi4uMzZiNzJjYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX2ZpbHRlci5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9maWx0ZXIuYwpAQCAtMjEsOTkgKzIxLDI2IEBACiAJCQkgICAgKDEgPDwgTkZfSU5FVF9GT1JXQVJEKSB8IFwKIAkJCSAgICAoMSA8PCBORl9JTkVUX0xPQ0FMX09VVCkpCiAKLXN0YXRpYyBzdHJ1Y3QKLXsKLQlzdHJ1Y3QgaXA2dF9yZXBsYWNlIHJlcGw7Ci0Jc3RydWN0IGlwNnRfc3RhbmRhcmQgZW50cmllc1szXTsKLQlzdHJ1Y3QgaXA2dF9lcnJvciB0ZXJtOwotfSBpbml0aWFsX3RhYmxlIF9fbmV0X2luaXRkYXRhID0gewotCS5yZXBsID0gewotCQkubmFtZSA9ICJmaWx0ZXIiLAotCQkudmFsaWRfaG9va3MgPSBGSUxURVJfVkFMSURfSE9PS1MsCi0JCS5udW1fZW50cmllcyA9IDQsCi0JCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSAqIDMgKyBzaXplb2Yoc3RydWN0IGlwNnRfZXJyb3IpLAotCQkuaG9va19lbnRyeSA9IHsKLQkJCVtORl9JTkVUX0xPQ0FMX0lOXSA9IDAsCi0JCQlbTkZfSU5FVF9GT1JXQVJEXSA9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCksCi0JCQlbTkZfSU5FVF9MT0NBTF9PVVRdID0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSAqIDIKLQkJfSwKLQkJLnVuZGVyZmxvdyA9IHsKLQkJCVtORl9JTkVUX0xPQ0FMX0lOXSA9IDAsCi0JCQlbTkZfSU5FVF9GT1JXQVJEXSA9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCksCi0JCQlbTkZfSU5FVF9MT0NBTF9PVVRdID0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSAqIDIKLQkJfSwKLQl9LAotCS5lbnRyaWVzID0gewotCQlJUDZUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfSU4gKi8KLQkJSVA2VF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIEZPUldBUkQgKi8KLQkJSVA2VF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIExPQ0FMX09VVCAqLwotCX0sCi0JLnRlcm0gPSBJUDZUX0VSUk9SX0lOSVQsCQkvKiBFUlJPUiAqLwotfTsKLQogc3RhdGljIGNvbnN0IHN0cnVjdCB4dF90YWJsZSBwYWNrZXRfZmlsdGVyID0gewogCS5uYW1lCQk9ICJmaWx0ZXIiLAogCS52YWxpZF9ob29rcwk9IEZJTFRFUl9WQUxJRF9IT09LUywKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IE5GUFJPVE9fSVBWNiwKKwkucHJpb3JpdHkJPSBORl9JUDZfUFJJX0ZJTFRFUiwKIH07CiAKIC8qIFRoZSB3b3JrIGNvbWVzIGluIGhlcmUgZnJvbSBuZXRmaWx0ZXIuYy4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQKLWlwNnRfaW5faG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCQkgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK2lwNnRhYmxlX2ZpbHRlcl9ob29rKHVuc2lnbmVkIGludCBob29rLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKKwkJICAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKIHsKLQlyZXR1cm4gaXA2dF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCi0JCQkgICAgIGRldl9uZXQoaW4pLT5pcHY2LmlwNnRhYmxlX2ZpbHRlcik7CisJY29uc3Qgc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldCgoaW4gIT0gTlVMTCkgPyBpbiA6IG91dCk7CisKKwlyZXR1cm4gaXA2dF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsIG5ldC0+aXB2Ni5pcDZ0YWJsZV9maWx0ZXIpOwogfQogCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1pcDZ0X2xvY2FsX291dF9ob29rKHVuc2lnbmVkIGludCBob29rLAotCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0JCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0JCSAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQotewotI2lmIDAKLQkvKiByb290IGlzIHBsYXlpbmcgd2l0aCByYXcgc29ja2V0cy4gKi8KLQlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGlwaGRyKSB8fAotCSAgICBpcF9oZHJsZW4oc2tiKSA8IHNpemVvZihzdHJ1Y3QgaXBoZHIpKSB7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoImlwNnRfaG9vazogaGFwcHkgY3JhY2tpbmcuXG4iKTsKLQkJcmV0dXJuIE5GX0FDQ0VQVDsKLQl9Ci0jZW5kaWYKLQotCXJldHVybiBpcDZ0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKLQkJCSAgICAgZGV2X25ldChvdXQpLT5pcHY2LmlwNnRhYmxlX2ZpbHRlcik7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXA2dF9vcHNbXSBfX3JlYWRfbW9zdGx5ID0gewotCXsKLQkJLmhvb2sJCT0gaXA2dF9pbl9ob29rLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBORlBST1RPX0lQVjYsCi0JCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKLQkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9GSUxURVIsCi0JfSwKLQl7Ci0JCS5ob29rCQk9IGlwNnRfaW5faG9vaywKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gTkZQUk9UT19JUFY2LAotCQkuaG9va251bQk9IE5GX0lORVRfRk9SV0FSRCwKLQkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9GSUxURVIsCi0JfSwKLQl7Ci0JCS5ob29rCQk9IGlwNnRfbG9jYWxfb3V0X2hvb2ssCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKLQkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKLQkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9GSUxURVIsCi0JfSwKLX07CitzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzICpmaWx0ZXJfb3BzIF9fcmVhZF9tb3N0bHk7CiAKIC8qIERlZmF1bHQgdG8gZm9yd2FyZCBiZWNhdXNlIEkgZ290IHRvbyBtdWNoIG1haWwgYWxyZWFkeS4gKi8KIHN0YXRpYyBpbnQgZm9yd2FyZCA9IE5GX0FDQ0VQVDsKQEAgLTEyMSw5ICs0OCwxOCBAQAogCiBzdGF0aWMgaW50IF9fbmV0X2luaXQgaXA2dGFibGVfZmlsdGVyX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQkvKiBSZWdpc3RlciB0YWJsZSAqLworCXN0cnVjdCBpcDZ0X3JlcGxhY2UgKnJlcGw7CisKKwlyZXBsID0gaXA2dF9hbGxvY19pbml0aWFsX3RhYmxlKCZwYWNrZXRfZmlsdGVyKTsKKwlpZiAocmVwbCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwkvKiBFbnRyeSAxIGlzIHRoZSBGT1JXQVJEIGhvb2sgKi8KKwkoKHN0cnVjdCBpcDZ0X3N0YW5kYXJkICopcmVwbC0+ZW50cmllcylbMV0udGFyZ2V0LnZlcmRpY3QgPQorCQktZm9yd2FyZCAtIDE7CisKIAluZXQtPmlwdjYuaXA2dGFibGVfZmlsdGVyID0KLQkJaXA2dF9yZWdpc3Rlcl90YWJsZShuZXQsICZwYWNrZXRfZmlsdGVyLCAmaW5pdGlhbF90YWJsZS5yZXBsKTsKKwkJaXA2dF9yZWdpc3Rlcl90YWJsZShuZXQsICZwYWNrZXRfZmlsdGVyLCByZXBsKTsKKwlrZnJlZShyZXBsKTsKIAlpZiAoSVNfRVJSKG5ldC0+aXB2Ni5pcDZ0YWJsZV9maWx0ZXIpKQogCQlyZXR1cm4gUFRSX0VSUihuZXQtPmlwdjYuaXA2dGFibGVfZmlsdGVyKTsKIAlyZXR1cm4gMDsKQEAgLTEzMSw3ICs2Nyw3IEBACiAKIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2dGFibGVfZmlsdGVyX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlpcDZ0X3VucmVnaXN0ZXJfdGFibGUobmV0LT5pcHY2LmlwNnRhYmxlX2ZpbHRlcik7CisJaXA2dF91bnJlZ2lzdGVyX3RhYmxlKG5ldCwgbmV0LT5pcHY2LmlwNnRhYmxlX2ZpbHRlcik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXA2dGFibGVfZmlsdGVyX25ldF9vcHMgPSB7CkBAIC0xNDgsMTcgKzg0LDE2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIEVudHJ5IDEgaXMgdGhlIEZPUldBUkQgaG9vayAqLwotCWluaXRpYWxfdGFibGUuZW50cmllc1sxXS50YXJnZXQudmVyZGljdCA9IC1mb3J3YXJkIC0gMTsKLQogCXJldCA9IHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwNnRhYmxlX2ZpbHRlcl9uZXRfb3BzKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAogCS8qIFJlZ2lzdGVyIGhvb2tzICovCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXA2dF9vcHMsIEFSUkFZX1NJWkUoaXA2dF9vcHMpKTsKLQlpZiAocmV0IDwgMCkKKwlmaWx0ZXJfb3BzID0geHRfaG9va19saW5rKCZwYWNrZXRfZmlsdGVyLCBpcDZ0YWJsZV9maWx0ZXJfaG9vayk7CisJaWYgKElTX0VSUihmaWx0ZXJfb3BzKSkgeworCQlyZXQgPSBQVFJfRVJSKGZpbHRlcl9vcHMpOwogCQlnb3RvIGNsZWFudXBfdGFibGU7CisJfQogCiAJcmV0dXJuIHJldDsKIApAQCAtMTY5LDcgKzEwNCw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcDZ0YWJsZV9maWx0ZXJfZmluaSh2b2lkKQogewotCW5mX3VucmVnaXN0ZXJfaG9va3MoaXA2dF9vcHMsIEFSUkFZX1NJWkUoaXA2dF9vcHMpKTsKKwl4dF9ob29rX3VubGluaygmcGFja2V0X2ZpbHRlciwgZmlsdGVyX29wcyk7CiAJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZpcDZ0YWJsZV9maWx0ZXJfbmV0X29wcyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9tYW5nbGUuYwppbmRleCBhOTI5YzE5Li43ODQ0ZTU1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfbWFuZ2xlLmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX21hbmdsZS5jCkBAIC0yMSw4MCArMjEsMTcgQEAKIAkJCSAgICAoMSA8PCBORl9JTkVUX0xPQ0FMX09VVCkgfCBcCiAJCQkgICAgKDEgPDwgTkZfSU5FVF9QT1NUX1JPVVRJTkcpKQogCi1zdGF0aWMgY29uc3Qgc3RydWN0Ci17Ci0Jc3RydWN0IGlwNnRfcmVwbGFjZSByZXBsOwotCXN0cnVjdCBpcDZ0X3N0YW5kYXJkIGVudHJpZXNbNV07Ci0Jc3RydWN0IGlwNnRfZXJyb3IgdGVybTsKLX0gaW5pdGlhbF90YWJsZSBfX25ldF9pbml0ZGF0YSA9IHsKLQkucmVwbCA9IHsKLQkJLm5hbWUgPSAibWFuZ2xlIiwKLQkJLnZhbGlkX2hvb2tzID0gTUFOR0xFX1ZBTElEX0hPT0tTLAotCQkubnVtX2VudHJpZXMgPSA2LAotCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkgKiA1ICsgc2l6ZW9mKHN0cnVjdCBpcDZ0X2Vycm9yKSwKLQkJLmhvb2tfZW50cnkgPSB7Ci0JCQlbTkZfSU5FVF9QUkVfUk9VVElOR10gCT0gMCwKLQkJCVtORl9JTkVUX0xPQ0FMX0lOXQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCksCi0JCQlbTkZfSU5FVF9GT1JXQVJEXQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkgKiAyLAotCQkJW05GX0lORVRfTE9DQUxfT1VUXSAJPSBzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmQpICogMywKLQkJCVtORl9JTkVUX1BPU1RfUk9VVElOR10JPSBzaXplb2Yoc3RydWN0IGlwNnRfc3RhbmRhcmQpICogNCwKLQkJfSwKLQkJLnVuZGVyZmxvdyA9IHsKLQkJCVtORl9JTkVUX1BSRV9ST1VUSU5HXSAJPSAwLAotCQkJW05GX0lORVRfTE9DQUxfSU5dCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSwKLQkJCVtORl9JTkVUX0ZPUldBUkRdCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSAqIDIsCi0JCQlbTkZfSU5FVF9MT0NBTF9PVVRdIAk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkgKiAzLAotCQkJW05GX0lORVRfUE9TVF9ST1VUSU5HXQk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkgKiA0LAotCQl9LAotCX0sCi0JLmVudHJpZXMgPSB7Ci0JCUlQNlRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBQUkVfUk9VVElORyAqLwotCQlJUDZUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfSU4gKi8KLQkJSVA2VF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIEZPUldBUkQgKi8KLQkJSVA2VF9TVEFOREFSRF9JTklUKE5GX0FDQ0VQVCksCS8qIExPQ0FMX09VVCAqLwotCQlJUDZUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogUE9TVF9ST1VUSU5HICovCi0JfSwKLQkudGVybSA9IElQNlRfRVJST1JfSU5JVCwJCS8qIEVSUk9SICovCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9tYW5nbGVyID0gewogCS5uYW1lCQk9ICJtYW5nbGUiLAogCS52YWxpZF9ob29rcwk9IE1BTkdMRV9WQUxJRF9IT09LUywKIAkubWUJCT0gVEhJU19NT0RVTEUsCiAJLmFmCQk9IE5GUFJPVE9fSVBWNiwKKwkucHJpb3JpdHkJPSBORl9JUDZfUFJJX01BTkdMRSwKIH07CiAKLS8qIFRoZSB3b3JrIGNvbWVzIGluIGhlcmUgZnJvbSBuZXRmaWx0ZXIuYy4gKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQKLWlwNnRfaW5faG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCSBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK2lwNnRfbWFuZ2xlX291dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0KQogewotCXJldHVybiBpcDZ0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKLQkJCSAgICAgZGV2X25ldChpbiktPmlwdjYuaXA2dGFibGVfbWFuZ2xlKTsKLX0KLQotc3RhdGljIHVuc2lnbmVkIGludAotaXA2dF9wb3N0X3JvdXRpbmdfaG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCQlpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKLXsKLQlyZXR1cm4gaXA2dF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCi0JCQkgICAgIGRldl9uZXQob3V0KS0+aXB2Ni5pcDZ0YWJsZV9tYW5nbGUpOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1pcDZ0X2xvY2FsX291dF9ob29rKHVuc2lnbmVkIGludCBob29rLAotCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCi0JCSAgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0JCSAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQotewotCiAJdW5zaWduZWQgaW50IHJldDsKIAlzdHJ1Y3QgaW42X2FkZHIgc2FkZHIsIGRhZGRyOwogCXVfaW50OF90IGhvcF9saW1pdDsKQEAgLTExOSw3ICs1Niw3IEBACiAJLyogZmxvd2xhYmVsIGFuZCBwcmlvIChpbmNsdWRlcyB2ZXJzaW9uLCB3aGljaCBzaG91bGRuJ3QgY2hhbmdlIGVpdGhlciAqLwogCWZsb3dsYWJlbCA9ICooKHVfaW50MzJfdCAqKWlwdjZfaGRyKHNrYikpOwogCi0JcmV0ID0gaXA2dF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCisJcmV0ID0gaXA2dF9kb190YWJsZShza2IsIE5GX0lORVRfTE9DQUxfT1VULCBOVUxMLCBvdXQsCiAJCQkgICAgZGV2X25ldChvdXQpLT5pcHY2LmlwNnRhYmxlX21hbmdsZSk7CiAKIAlpZiAocmV0ICE9IE5GX0RST1AgJiYgcmV0ICE9IE5GX1NUT0xFTiAmJgpAQCAtMTMyLDQ5ICs2OSwzMyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXA2dF9vcHNbXSBfX3JlYWRfbW9zdGx5ID0gewotCXsKLQkJLmhvb2sJCT0gaXA2dF9pbl9ob29rLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBORlBST1RPX0lQVjYsCi0JCS5ob29rbnVtCT0gTkZfSU5FVF9QUkVfUk9VVElORywKLQkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9NQU5HTEUsCi0JfSwKLQl7Ci0JCS5ob29rCQk9IGlwNnRfaW5faG9vaywKLQkJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCQkucGYJCT0gTkZQUk9UT19JUFY2LAotCQkuaG9va251bQk9IE5GX0lORVRfTE9DQUxfSU4sCi0JCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTUFOR0xFLAotCX0sCi0JewotCQkuaG9vawkJPSBpcDZ0X2luX2hvb2ssCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKLQkJLmhvb2tudW0JPSBORl9JTkVUX0ZPUldBUkQsCi0JCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTUFOR0xFLAotCX0sCi0JewotCQkuaG9vawkJPSBpcDZ0X2xvY2FsX291dF9ob29rLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBORlBST1RPX0lQVjYsCi0JCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9PVVQsCi0JCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTUFOR0xFLAotCX0sCi0JewotCQkuaG9vawkJPSBpcDZ0X3Bvc3Rfcm91dGluZ19ob29rLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBORlBST1RPX0lQVjYsCi0JCS5ob29rbnVtCT0gTkZfSU5FVF9QT1NUX1JPVVRJTkcsCi0JCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfTUFOR0xFLAotCX0sCi19OworLyogVGhlIHdvcmsgY29tZXMgaW4gaGVyZSBmcm9tIG5ldGZpbHRlci5jLiAqLworc3RhdGljIHVuc2lnbmVkIGludAoraXA2dGFibGVfbWFuZ2xlX2hvb2sodW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkgICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQoreworCWlmIChob29rID09IE5GX0lORVRfTE9DQUxfT1VUKQorCQlyZXR1cm4gaXA2dF9tYW5nbGVfb3V0KHNrYiwgb3V0KTsKKwlpZiAoaG9vayA9PSBORl9JTkVUX1BPU1RfUk9VVElORykKKwkJcmV0dXJuIGlwNnRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAorCQkJCSAgICAgZGV2X25ldChvdXQpLT5pcHY2LmlwNnRhYmxlX21hbmdsZSk7CisJLyogSU5QVVQvRk9SV0FSRCAqLworCXJldHVybiBpcDZ0X2RvX3RhYmxlKHNrYiwgaG9vaywgaW4sIG91dCwKKwkJCSAgICAgZGV2X25ldChpbiktPmlwdjYuaXA2dGFibGVfbWFuZ2xlKTsKK30KIAorc3RhdGljIHN0cnVjdCBuZl9ob29rX29wcyAqbWFuZ2xlX29wcyBfX3JlYWRfbW9zdGx5Owogc3RhdGljIGludCBfX25ldF9pbml0IGlwNnRhYmxlX21hbmdsZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JLyogUmVnaXN0ZXIgdGFibGUgKi8KKwlzdHJ1Y3QgaXA2dF9yZXBsYWNlICpyZXBsOworCisJcmVwbCA9IGlwNnRfYWxsb2NfaW5pdGlhbF90YWJsZSgmcGFja2V0X21hbmdsZXIpOworCWlmIChyZXBsID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOwogCW5ldC0+aXB2Ni5pcDZ0YWJsZV9tYW5nbGUgPQotCQlpcDZ0X3JlZ2lzdGVyX3RhYmxlKG5ldCwgJnBhY2tldF9tYW5nbGVyLCAmaW5pdGlhbF90YWJsZS5yZXBsKTsKKwkJaXA2dF9yZWdpc3Rlcl90YWJsZShuZXQsICZwYWNrZXRfbWFuZ2xlciwgcmVwbCk7CisJa2ZyZWUocmVwbCk7CiAJaWYgKElTX0VSUihuZXQtPmlwdjYuaXA2dGFibGVfbWFuZ2xlKSkKIAkJcmV0dXJuIFBUUl9FUlIobmV0LT5pcHY2LmlwNnRhYmxlX21hbmdsZSk7CiAJcmV0dXJuIDA7CkBAIC0xODIsNyArMTAzLDcgQEAKIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZ0YWJsZV9tYW5nbGVfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewotCWlwNnRfdW5yZWdpc3Rlcl90YWJsZShuZXQtPmlwdjYuaXA2dGFibGVfbWFuZ2xlKTsKKwlpcDZ0X3VucmVnaXN0ZXJfdGFibGUobmV0LCBuZXQtPmlwdjYuaXA2dGFibGVfbWFuZ2xlKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcDZ0YWJsZV9tYW5nbGVfbmV0X29wcyA9IHsKQEAgLTE5OSw5ICsxMjAsMTEgQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qIFJlZ2lzdGVyIGhvb2tzICovCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXA2dF9vcHMsIEFSUkFZX1NJWkUoaXA2dF9vcHMpKTsKLQlpZiAocmV0IDwgMCkKKwltYW5nbGVfb3BzID0geHRfaG9va19saW5rKCZwYWNrZXRfbWFuZ2xlciwgaXA2dGFibGVfbWFuZ2xlX2hvb2spOworCWlmIChJU19FUlIobWFuZ2xlX29wcykpIHsKKwkJcmV0ID0gUFRSX0VSUihtYW5nbGVfb3BzKTsKIAkJZ290byBjbGVhbnVwX3RhYmxlOworCX0KIAogCXJldHVybiByZXQ7CiAKQEAgLTIxMiw3ICsxMzUsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXA2dGFibGVfbWFuZ2xlX2Zpbmkodm9pZCkKIHsKLQluZl91bnJlZ2lzdGVyX2hvb2tzKGlwNnRfb3BzLCBBUlJBWV9TSVpFKGlwNnRfb3BzKSk7CisJeHRfaG9va191bmxpbmsoJnBhY2tldF9tYW5nbGVyLCBtYW5nbGVfb3BzKTsKIAl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmlwNnRhYmxlX21hbmdsZV9uZXRfb3BzKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL2lwNnRhYmxlX3Jhdy5jCmluZGV4IGVkMWExMTguLmFlZjMxYTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9yYXcuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfcmF3LmMKQEAgLTgsODUgKzgsMzcgQEAKIAogI2RlZmluZSBSQVdfVkFMSURfSE9PS1MgKCgxIDw8IE5GX0lORVRfUFJFX1JPVVRJTkcpIHwgKDEgPDwgTkZfSU5FVF9MT0NBTF9PVVQpKQogCi1zdGF0aWMgY29uc3Qgc3RydWN0Ci17Ci0Jc3RydWN0IGlwNnRfcmVwbGFjZSByZXBsOwotCXN0cnVjdCBpcDZ0X3N0YW5kYXJkIGVudHJpZXNbMl07Ci0Jc3RydWN0IGlwNnRfZXJyb3IgdGVybTsKLX0gaW5pdGlhbF90YWJsZSBfX25ldF9pbml0ZGF0YSA9IHsKLQkucmVwbCA9IHsKLQkJLm5hbWUgPSAicmF3IiwKLQkJLnZhbGlkX2hvb2tzID0gUkFXX1ZBTElEX0hPT0tTLAotCQkubnVtX2VudHJpZXMgPSAzLAotCQkuc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkgKiAyICsgc2l6ZW9mKHN0cnVjdCBpcDZ0X2Vycm9yKSwKLQkJLmhvb2tfZW50cnkgPSB7Ci0JCQlbTkZfSU5FVF9QUkVfUk9VVElOR10gPSAwLAotCQkJW05GX0lORVRfTE9DQUxfT1VUXSA9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkKLQkJfSwKLQkJLnVuZGVyZmxvdyA9IHsKLQkJCVtORl9JTkVUX1BSRV9ST1VUSU5HXSA9IDAsCi0JCQlbTkZfSU5FVF9MT0NBTF9PVVRdID0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKQotCQl9LAotCX0sCi0JLmVudHJpZXMgPSB7Ci0JCUlQNlRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBQUkVfUk9VVElORyAqLwotCQlJUDZUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfT1VUICovCi0JfSwKLQkudGVybSA9IElQNlRfRVJST1JfSU5JVCwJCS8qIEVSUk9SICovCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHh0X3RhYmxlIHBhY2tldF9yYXcgPSB7CiAJLm5hbWUgPSAicmF3IiwKIAkudmFsaWRfaG9va3MgPSBSQVdfVkFMSURfSE9PS1MsCiAJLm1lID0gVEhJU19NT0RVTEUsCiAJLmFmID0gTkZQUk9UT19JUFY2LAorCS5wcmlvcml0eSA9IE5GX0lQNl9QUklfRklSU1QsCiB9OwogCiAvKiBUaGUgd29yayBjb21lcyBpbiBoZXJlIGZyb20gbmV0ZmlsdGVyLmMuICovCiBzdGF0aWMgdW5zaWduZWQgaW50Ci1pcDZ0X3ByZV9yb3V0aW5nX2hvb2sodW5zaWduZWQgaW50IGhvb2ssCi0JIHN0cnVjdCBza19idWZmICpza2IsCi0JIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbiwKLQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLQkgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCitpcDZ0YWJsZV9yYXdfaG9vayh1bnNpZ25lZCBpbnQgaG9vaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCisJCSAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7Ci0JcmV0dXJuIGlwNnRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAotCQkJICAgICBkZXZfbmV0KGluKS0+aXB2Ni5pcDZ0YWJsZV9yYXcpOworCWNvbnN0IHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoKGluICE9IE5VTEwpID8gaW4gOiBvdXQpOworCisJcmV0dXJuIGlwNnRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LCBuZXQtPmlwdjYuaXA2dGFibGVfcmF3KTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludAotaXA2dF9sb2NhbF9vdXRfaG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCSBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCSBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKLXsKLQlyZXR1cm4gaXA2dF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCi0JCQkgICAgIGRldl9uZXQob3V0KS0+aXB2Ni5pcDZ0YWJsZV9yYXcpOwotfQotCi1zdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzIGlwNnRfb3BzW10gX19yZWFkX21vc3RseSA9IHsKLQl7Ci0JICAuaG9vayA9IGlwNnRfcHJlX3JvdXRpbmdfaG9vaywKLQkgIC5wZiA9IE5GUFJPVE9fSVBWNiwKLQkgIC5ob29rbnVtID0gTkZfSU5FVF9QUkVfUk9VVElORywKLQkgIC5wcmlvcml0eSA9IE5GX0lQNl9QUklfRklSU1QsCi0JICAub3duZXIgPSBUSElTX01PRFVMRSwKLQl9LAotCXsKLQkgIC5ob29rID0gaXA2dF9sb2NhbF9vdXRfaG9vaywKLQkgIC5wZiA9IE5GUFJPVE9fSVBWNiwKLQkgIC5ob29rbnVtID0gTkZfSU5FVF9MT0NBTF9PVVQsCi0JICAucHJpb3JpdHkgPSBORl9JUDZfUFJJX0ZJUlNULAotCSAgLm93bmVyID0gVEhJU19NT0RVTEUsCi0JfSwKLX07CitzdGF0aWMgc3RydWN0IG5mX2hvb2tfb3BzICpyYXd0YWJsZV9vcHMgX19yZWFkX21vc3RseTsKIAogc3RhdGljIGludCBfX25ldF9pbml0IGlwNnRhYmxlX3Jhd19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JLyogUmVnaXN0ZXIgdGFibGUgKi8KKwlzdHJ1Y3QgaXA2dF9yZXBsYWNlICpyZXBsOworCisJcmVwbCA9IGlwNnRfYWxsb2NfaW5pdGlhbF90YWJsZSgmcGFja2V0X3Jhdyk7CisJaWYgKHJlcGwgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CiAJbmV0LT5pcHY2LmlwNnRhYmxlX3JhdyA9Ci0JCWlwNnRfcmVnaXN0ZXJfdGFibGUobmV0LCAmcGFja2V0X3JhdywgJmluaXRpYWxfdGFibGUucmVwbCk7CisJCWlwNnRfcmVnaXN0ZXJfdGFibGUobmV0LCAmcGFja2V0X3JhdywgcmVwbCk7CisJa2ZyZWUocmVwbCk7CiAJaWYgKElTX0VSUihuZXQtPmlwdjYuaXA2dGFibGVfcmF3KSkKIAkJcmV0dXJuIFBUUl9FUlIobmV0LT5pcHY2LmlwNnRhYmxlX3Jhdyk7CiAJcmV0dXJuIDA7CkBAIC05NCw3ICs0Niw3IEBACiAKIHN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2dGFibGVfcmF3X25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlpcDZ0X3VucmVnaXN0ZXJfdGFibGUobmV0LT5pcHY2LmlwNnRhYmxlX3Jhdyk7CisJaXA2dF91bnJlZ2lzdGVyX3RhYmxlKG5ldCwgbmV0LT5pcHY2LmlwNnRhYmxlX3Jhdyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgaXA2dGFibGVfcmF3X25ldF9vcHMgPSB7CkBAIC0xMTEsOSArNjMsMTEgQEAKIAkJcmV0dXJuIHJldDsKIAogCS8qIFJlZ2lzdGVyIGhvb2tzICovCi0JcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3MoaXA2dF9vcHMsIEFSUkFZX1NJWkUoaXA2dF9vcHMpKTsKLQlpZiAocmV0IDwgMCkKKwlyYXd0YWJsZV9vcHMgPSB4dF9ob29rX2xpbmsoJnBhY2tldF9yYXcsIGlwNnRhYmxlX3Jhd19ob29rKTsKKwlpZiAoSVNfRVJSKHJhd3RhYmxlX29wcykpIHsKKwkJcmV0ID0gUFRSX0VSUihyYXd0YWJsZV9vcHMpOwogCQlnb3RvIGNsZWFudXBfdGFibGU7CisJfQogCiAJcmV0dXJuIHJldDsKIApAQCAtMTI0LDcgKzc4LDcgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGlwNnRhYmxlX3Jhd19maW5pKHZvaWQpCiB7Ci0JbmZfdW5yZWdpc3Rlcl9ob29rcyhpcDZ0X29wcywgQVJSQVlfU0laRShpcDZ0X29wcykpOworCXh0X2hvb2tfdW5saW5rKCZwYWNrZXRfcmF3LCByYXd0YWJsZV9vcHMpOwogCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXA2dGFibGVfcmF3X25ldF9vcHMpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvaXA2dGFibGVfc2VjdXJpdHkuYyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jCmluZGV4IDQxYjQ0NGMuLjA4MjRkODYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9pcDZ0YWJsZV9zZWN1cml0eS5jCkBAIC0yNiwxMDYgKzI2LDM3IEBACiAJCQkJKDEgPDwgTkZfSU5FVF9GT1JXQVJEKSB8IFwKIAkJCQkoMSA8PCBORl9JTkVUX0xPQ0FMX09VVCkKIAotc3RhdGljIGNvbnN0IHN0cnVjdAotewotCXN0cnVjdCBpcDZ0X3JlcGxhY2UgcmVwbDsKLQlzdHJ1Y3QgaXA2dF9zdGFuZGFyZCBlbnRyaWVzWzNdOwotCXN0cnVjdCBpcDZ0X2Vycm9yIHRlcm07Ci19IGluaXRpYWxfdGFibGUgX19uZXRfaW5pdGRhdGEgPSB7Ci0JLnJlcGwgPSB7Ci0JCS5uYW1lID0gInNlY3VyaXR5IiwKLQkJLnZhbGlkX2hvb2tzID0gU0VDVVJJVFlfVkFMSURfSE9PS1MsCi0JCS5udW1fZW50cmllcyA9IDQsCi0JCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSAqIDMgKyBzaXplb2Yoc3RydWN0IGlwNnRfZXJyb3IpLAotCQkuaG9va19lbnRyeSA9IHsKLQkJCVtORl9JTkVUX0xPQ0FMX0lOXSAJPSAwLAotCQkJW05GX0lORVRfRk9SV0FSRF0gCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSwKLQkJCVtORl9JTkVUX0xPQ0FMX09VVF0gCT0gc2l6ZW9mKHN0cnVjdCBpcDZ0X3N0YW5kYXJkKSAqIDIsCi0JCX0sCi0JCS51bmRlcmZsb3cgPSB7Ci0JCQlbTkZfSU5FVF9MT0NBTF9JTl0gCT0gMCwKLQkJCVtORl9JTkVUX0ZPUldBUkRdIAk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCksCi0JCQlbTkZfSU5FVF9MT0NBTF9PVVRdIAk9IHNpemVvZihzdHJ1Y3QgaXA2dF9zdGFuZGFyZCkgKiAyLAotCQl9LAotCX0sCi0JLmVudHJpZXMgPSB7Ci0JCUlQNlRfU1RBTkRBUkRfSU5JVChORl9BQ0NFUFQpLAkvKiBMT0NBTF9JTiAqLwotCQlJUDZUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogRk9SV0FSRCAqLwotCQlJUDZUX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKSwJLyogTE9DQUxfT1VUICovCi0JfSwKLQkudGVybSA9IElQNlRfRVJST1JfSU5JVCwJCS8qIEVSUk9SICovCi19OwotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHh0X3RhYmxlIHNlY3VyaXR5X3RhYmxlID0gewogCS5uYW1lCQk9ICJzZWN1cml0eSIsCiAJLnZhbGlkX2hvb2tzCT0gU0VDVVJJVFlfVkFMSURfSE9PS1MsCiAJLm1lCQk9IFRISVNfTU9EVUxFLAogCS5hZgkJPSBORlBST1RPX0lQVjYsCisJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9TRUNVUklUWSwKIH07CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQKLWlwNnRfbG9jYWxfaW5faG9vayh1bnNpZ25lZCBpbnQgaG9vaywKLQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQkgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAotCQkgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKK2lwNnRhYmxlX3NlY3VyaXR5X2hvb2sodW5zaWduZWQgaW50IGhvb2ssIHN0cnVjdCBza19idWZmICpza2IsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW4sCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0LAorCQkgICAgICAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCiB7Ci0JcmV0dXJuIGlwNnRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAotCQkJICAgICBkZXZfbmV0KGluKS0+aXB2Ni5pcDZ0YWJsZV9zZWN1cml0eSk7CisJY29uc3Qgc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldCgoaW4gIT0gTlVMTCkgPyBpbiA6IG91dCk7CisKKwlyZXR1cm4gaXA2dF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsIG5ldC0+aXB2Ni5pcDZ0YWJsZV9zZWN1cml0eSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWlwNnRfZm9yd2FyZF9ob29rKHVuc2lnbmVkIGludCBob29rLAotCQkgIHN0cnVjdCBza19idWZmICpza2IsCi0JCSAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQkgIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpvdXQsCi0JCSAgaW50ICgqb2tmbikoc3RydWN0IHNrX2J1ZmYgKikpCi17Ci0JcmV0dXJuIGlwNnRfZG9fdGFibGUoc2tiLCBob29rLCBpbiwgb3V0LAotCQkJICAgICBkZXZfbmV0KGluKS0+aXB2Ni5pcDZ0YWJsZV9zZWN1cml0eSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWlwNnRfbG9jYWxfb3V0X2hvb2sodW5zaWduZWQgaW50IGhvb2ssCi0JCSAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmluLAotCQkgICAgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dCwKLQkJICAgIGludCAoKm9rZm4pKHN0cnVjdCBza19idWZmICopKQotewotCS8qIFRCRDogaGFuZGxlIHNob3J0IHBhY2tldHMgdmlhIHJhdyBzb2NrZXQgKi8KLQlyZXR1cm4gaXA2dF9kb190YWJsZShza2IsIGhvb2ssIGluLCBvdXQsCi0JCQkgICAgIGRldl9uZXQob3V0KS0+aXB2Ni5pcDZ0YWJsZV9zZWN1cml0eSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgaXA2dF9vcHNbXSBfX3JlYWRfbW9zdGx5ID0gewotCXsKLQkJLmhvb2sJCT0gaXA2dF9sb2NhbF9pbl9ob29rLAotCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JCS5wZgkJPSBORlBST1RPX0lQVjYsCi0JCS5ob29rbnVtCT0gTkZfSU5FVF9MT0NBTF9JTiwKLQkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9TRUNVUklUWSwKLQl9LAotCXsKLQkJLmhvb2sJCT0gaXA2dF9mb3J3YXJkX2hvb2ssCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKLQkJLmhvb2tudW0JPSBORl9JTkVUX0ZPUldBUkQsCi0JCS5wcmlvcml0eQk9IE5GX0lQNl9QUklfU0VDVVJJVFksCi0JfSwKLQl7Ci0JCS5ob29rCQk9IGlwNnRfbG9jYWxfb3V0X2hvb2ssCi0JCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkJLnBmCQk9IE5GUFJPVE9fSVBWNiwKLQkJLmhvb2tudW0JPSBORl9JTkVUX0xPQ0FMX09VVCwKLQkJLnByaW9yaXR5CT0gTkZfSVA2X1BSSV9TRUNVUklUWSwKLQl9LAotfTsKK3N0YXRpYyBzdHJ1Y3QgbmZfaG9va19vcHMgKnNlY3RibF9vcHMgX19yZWFkX21vc3RseTsKIAogc3RhdGljIGludCBfX25ldF9pbml0IGlwNnRhYmxlX3NlY3VyaXR5X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQluZXQtPmlwdjYuaXA2dGFibGVfc2VjdXJpdHkgPQotCQlpcDZ0X3JlZ2lzdGVyX3RhYmxlKG5ldCwgJnNlY3VyaXR5X3RhYmxlLCAmaW5pdGlhbF90YWJsZS5yZXBsKTsKKwlzdHJ1Y3QgaXA2dF9yZXBsYWNlICpyZXBsOwogCisJcmVwbCA9IGlwNnRfYWxsb2NfaW5pdGlhbF90YWJsZSgmc2VjdXJpdHlfdGFibGUpOworCWlmIChyZXBsID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCW5ldC0+aXB2Ni5pcDZ0YWJsZV9zZWN1cml0eSA9CisJCWlwNnRfcmVnaXN0ZXJfdGFibGUobmV0LCAmc2VjdXJpdHlfdGFibGUsIHJlcGwpOworCWtmcmVlKHJlcGwpOwogCWlmIChJU19FUlIobmV0LT5pcHY2LmlwNnRhYmxlX3NlY3VyaXR5KSkKIAkJcmV0dXJuIFBUUl9FUlIobmV0LT5pcHY2LmlwNnRhYmxlX3NlY3VyaXR5KTsKIApAQCAtMTM0LDcgKzY1LDcgQEAKIAogc3RhdGljIHZvaWQgX19uZXRfZXhpdCBpcDZ0YWJsZV9zZWN1cml0eV9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7Ci0JaXA2dF91bnJlZ2lzdGVyX3RhYmxlKG5ldC0+aXB2Ni5pcDZ0YWJsZV9zZWN1cml0eSk7CisJaXA2dF91bnJlZ2lzdGVyX3RhYmxlKG5ldCwgbmV0LT5pcHY2LmlwNnRhYmxlX3NlY3VyaXR5KTsKIH0KIAogc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBpcDZ0YWJsZV9zZWN1cml0eV9uZXRfb3BzID0gewpAQCAtMTUwLDkgKzgxLDExIEBACiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAKLQlyZXQgPSBuZl9yZWdpc3Rlcl9ob29rcyhpcDZ0X29wcywgQVJSQVlfU0laRShpcDZ0X29wcykpOwotCWlmIChyZXQgPCAwKQorCXNlY3RibF9vcHMgPSB4dF9ob29rX2xpbmsoJnNlY3VyaXR5X3RhYmxlLCBpcDZ0YWJsZV9zZWN1cml0eV9ob29rKTsKKwlpZiAoSVNfRVJSKHNlY3RibF9vcHMpKSB7CisJCXJldCA9IFBUUl9FUlIoc2VjdGJsX29wcyk7CiAJCWdvdG8gY2xlYW51cF90YWJsZTsKKwl9CiAKIAlyZXR1cm4gcmV0OwogCkBAIC0xNjMsNyArOTYsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaXA2dGFibGVfc2VjdXJpdHlfZmluaSh2b2lkKQogewotCW5mX3VucmVnaXN0ZXJfaG9va3MoaXA2dF9vcHMsIEFSUkFZX1NJWkUoaXA2dF9vcHMpKTsKKwl4dF9ob29rX3VubGluaygmc2VjdXJpdHlfdGFibGUsIHNlY3RibF9vcHMpOwogCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaXA2dGFibGVfc2VjdXJpdHlfbmV0X29wcyk7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2wzcHJvdG9faXB2Ni5jCmluZGV4IDA5NTZlYmEuLjk5NmMzZjQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfbDNwcm90b19pcHY2LmMKKysrIGIvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvX2lwdjYuYwpAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2w0cHJvdG8uaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sM3Byb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3pvbmVzLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY2L25mX2Nvbm50cmFja19pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9sb2cuaD4KIApAQCAtMTkxLDE1ICsxOTIsMjAgQEAKIHN0YXRpYyBlbnVtIGlwNl9kZWZyYWdfdXNlcnMgbmZfY3Q2X2RlZnJhZ191c2VyKHVuc2lnbmVkIGludCBob29rbnVtLAogCQkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwl1MTYgem9uZSA9IE5GX0NUX0RFRkFVTFRfWk9ORTsKKworCWlmIChza2ItPm5mY3QpCisJCXpvbmUgPSBuZl9jdF96b25lKChzdHJ1Y3QgbmZfY29ubiAqKXNrYi0+bmZjdCk7CisKICNpZmRlZiBDT05GSUdfQlJJREdFX05FVEZJTFRFUgogCWlmIChza2ItPm5mX2JyaWRnZSAmJgogCSAgICBza2ItPm5mX2JyaWRnZS0+bWFzayAmIEJSTkZfTkZfQlJJREdFX1BSRVJPVVRJTkcpCi0JCXJldHVybiBJUDZfREVGUkFHX0NPTk5UUkFDS19CUklER0VfSU47CisJCXJldHVybiBJUDZfREVGUkFHX0NPTk5UUkFDS19CUklER0VfSU4gKyB6b25lOwogI2VuZGlmCiAJaWYgKGhvb2tudW0gPT0gTkZfSU5FVF9QUkVfUk9VVElORykKLQkJcmV0dXJuIElQNl9ERUZSQUdfQ09OTlRSQUNLX0lOOworCQlyZXR1cm4gSVA2X0RFRlJBR19DT05OVFJBQ0tfSU4gKyB6b25lOwogCWVsc2UKLQkJcmV0dXJuIElQNl9ERUZSQUdfQ09OTlRSQUNLX09VVDsKKwkJcmV0dXJuIElQNl9ERUZSQUdfQ09OTlRSQUNLX09VVCArIHpvbmU7CiAKIH0KIApAQCAtMjEyLDcgKzIxOCw3IEBACiAJc3RydWN0IHNrX2J1ZmYgKnJlYXNtOwogCiAJLyogUHJldmlvdXNseSBzZWVuIChsb29wYmFjayk/ICAqLwotCWlmIChza2ItPm5mY3QpCisJaWYgKHNrYi0+bmZjdCAmJiAhbmZfY3RfaXNfdGVtcGxhdGUoKHN0cnVjdCBuZl9jb25uICopc2tiLT5uZmN0KSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAogCXJlYXNtID0gbmZfY3RfZnJhZzZfZ2F0aGVyKHNrYiwgbmZfY3Q2X2RlZnJhZ191c2VyKGhvb2tudW0sIHNrYikpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9faWNtcHY2LmMKaW5kZXggYzdiOGJkMS4uOWJlODE3NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19pY21wdjYuYworKysgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2ljbXB2Ni5jCkBAIC0yMyw2ICsyMyw3IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3pvbmVzLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9pcHY2L25mX2Nvbm50cmFja19pY21wdjYuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2xvZy5oPgogCkBAIC0xMjgsNyArMTI5LDcgQEAKIH0KIAogc3RhdGljIGludAotaWNtcHY2X2Vycm9yX21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LAoraWNtcHY2X2Vycm9yX21lc3NhZ2Uoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCwKIAkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgIHVuc2lnbmVkIGludCBpY21wNm9mZiwKIAkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCkBAIC0xMzcsNiArMTM4LDcgQEAKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIGludHVwbGUsIG9yaWd0dXBsZTsKIAljb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CiAJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICppbnByb3RvOworCXUxNiB6b25lID0gdG1wbCA/IG5mX2N0X3pvbmUodG1wbCkgOiBORl9DVF9ERUZBVUxUX1pPTkU7CiAKIAlORl9DVF9BU1NFUlQoc2tiLT5uZmN0ID09IE5VTEwpOwogCkBAIC0xNjMsNyArMTY1LDcgQEAKIAogCSpjdGluZm8gPSBJUF9DVF9SRUxBVEVEOwogCi0JaCA9IG5mX2Nvbm50cmFja19maW5kX2dldChuZXQsICZpbnR1cGxlKTsKKwloID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KG5ldCwgem9uZSwgJmludHVwbGUpOwogCWlmICghaCkgewogCQlwcl9kZWJ1ZygiaWNtcHY2X2Vycm9yOiBubyBtYXRjaFxuIik7CiAJCXJldHVybiAtTkZfQUNDRVBUOwpAQCAtMTc5LDcgKzE4MSw4IEBACiB9CiAKIHN0YXRpYyBpbnQKLWljbXB2Nl9lcnJvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAoraWNtcHY2X2Vycm9yKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsCisJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkgICAgIGVudW0gaXBfY29ubnRyYWNrX2luZm8gKmN0aW5mbywgdV9pbnQ4X3QgcGYsIHVuc2lnbmVkIGludCBob29rbnVtKQogewogCWNvbnN0IHN0cnVjdCBpY21wNmhkciAqaWNtcDZoOwpAQCAtMjE1LDcgKzIxOCw3IEBACiAJaWYgKGljbXA2aC0+aWNtcDZfdHlwZSA+PSAxMjgpCiAJCXJldHVybiBORl9BQ0NFUFQ7CiAKLQlyZXR1cm4gaWNtcHY2X2Vycm9yX21lc3NhZ2UobmV0LCBza2IsIGRhdGFvZmYsIGN0aW5mbywgaG9va251bSk7CisJcmV0dXJuIGljbXB2Nl9lcnJvcl9tZXNzYWdlKG5ldCwgdG1wbCwgc2tiLCBkYXRhb2ZmLCBjdGluZm8sIGhvb2tudW0pOwogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOSykgfHwgZGVmaW5lZChDT05GSUdfTkZfQ1RfTkVUTElOS19NT0RVTEUpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMgYi9uZXQvaXB2Ni9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3JlYXNtLmMKaW5kZXggNjI0YTU0OC4uZjExNzFiNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19yZWFzbS5jCisrKyBiL25ldC9pcHY2L25ldGZpbHRlci9uZl9jb25udHJhY2tfcmVhc20uYwpAQCAtNDUsOSArNDUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCi0jZGVmaW5lIE5GX0NUX0ZSQUc2X0hJR0hfVEhSRVNIIDI2MjE0NCAvKiA9PSAyNTYqMTAyNCAqLwotI2RlZmluZSBORl9DVF9GUkFHNl9MT1dfVEhSRVNIIDE5NjYwOCAgLyogPT0gMTkyKjEwMjQgKi8KLSNkZWZpbmUgTkZfQ1RfRlJBRzZfVElNRU9VVCBJUFY2X0ZSQUdfVElNRU9VVAogCiBzdHJ1Y3QgbmZfY3RfZnJhZzZfc2tiX2NiCiB7CkBAIC00NzIsNyArNDY5LDcgQEAKIAogCS8qIGFsbCBvcmlnaW5hbCBza2JzIGFyZSBsaW5rZWQgaW50byB0aGUgTkZDVF9GUkFHNl9DQihoZWFkKS5vcmlnICovCiAJZnAgPSBza2Jfc2hpbmZvKGhlYWQpLT5mcmFnX2xpc3Q7Ci0JaWYgKE5GQ1RfRlJBRzZfQ0IoZnApLT5vcmlnID09IE5VTEwpCisJaWYgKGZwICYmIE5GQ1RfRlJBRzZfQ0IoZnApLT5vcmlnID09IE5VTEwpCiAJCS8qIGF0IGFib3ZlIGNvZGUsIGhlYWQgc2tiIGlzIGRpdmlkZWQgaW50byB0d28gc2ticy4gKi8KIAkJZnAgPSBmcC0+bmV4dDsKIApAQCAtNTk4LDEyICs1OTUsNiBAQAogCWhkciA9IGlwdjZfaGRyKGNsb25lKTsKIAlmaGRyID0gKHN0cnVjdCBmcmFnX2hkciAqKXNrYl90cmFuc3BvcnRfaGVhZGVyKGNsb25lKTsKIAotCWlmICghKGZoZHItPmZyYWdfb2ZmICYgaHRvbnMoMHhGRkY5KSkpIHsKLQkJcHJfZGVidWcoIkludmFsaWQgZnJhZ21lbnQgb2Zmc2V0XG4iKTsKLQkJLyogSXQgaXMgbm90IGEgZnJhZ21lbnRlZCBmcmFtZSAqLwotCQlnb3RvIHJldF9vcmlnOwotCX0KLQogCWlmIChhdG9taWNfcmVhZCgmbmZfaW5pdF9mcmFncy5tZW0pID4gbmZfaW5pdF9mcmFncy5oaWdoX3RocmVzaCkKIAkJbmZfY3RfZnJhZzZfZXZpY3RvcigpOwogCkBAIC02NzAsOCArNjYxLDggQEAKIAluZl9mcmFncy5mcmFnX2V4cGlyZSA9IG5mX2N0X2ZyYWc2X2V4cGlyZTsKIAluZl9mcmFncy5zZWNyZXRfaW50ZXJ2YWwgPSAxMCAqIDYwICogSFo7CiAJbmZfaW5pdF9mcmFncy50aW1lb3V0ID0gSVBWNl9GUkFHX1RJTUVPVVQ7Ci0JbmZfaW5pdF9mcmFncy5oaWdoX3RocmVzaCA9IDI1NiAqIDEwMjQ7Ci0JbmZfaW5pdF9mcmFncy5sb3dfdGhyZXNoID0gMTkyICogMTAyNDsKKwluZl9pbml0X2ZyYWdzLmhpZ2hfdGhyZXNoID0gSVBWNl9GUkFHX0hJR0hfVEhSRVNIOworCW5mX2luaXRfZnJhZ3MubG93X3RocmVzaCA9IElQVjZfRlJBR19MT1dfVEhSRVNIOwogCWluZXRfZnJhZ3NfaW5pdF9uZXQoJm5mX2luaXRfZnJhZ3MpOwogCWluZXRfZnJhZ3NfaW5pdCgmbmZfZnJhZ3MpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9wcm9jLmMgYi9uZXQvaXB2Ni9wcm9jLmMKaW5kZXggYzk2MDVjMy4uNTgzNDRjMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvcHJvYy5jCisrKyBiL25ldC9pcHY2L3Byb2MuYwpAQCAtNTksNyArNTksNyBAQAogCS5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2VfbmV0LAogfTsKIAotc3RhdGljIHN0cnVjdCBzbm1wX21pYiBzbm1wNl9pcHN0YXRzX2xpc3RbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25tcF9taWIgc25tcDZfaXBzdGF0c19saXN0W10gPSB7CiAvKiBpcHY2IG1pYiBhY2NvcmRpbmcgdG8gUkZDIDI0NjUgKi8KIAlTTk1QX01JQl9JVEVNKCJJcDZJblJlY2VpdmVzIiwgSVBTVEFUU19NSUJfSU5QS1RTKSwKIAlTTk1QX01JQl9JVEVNKCJJcDZJbkhkckVycm9ycyIsIElQU1RBVFNfTUlCX0lOSERSRVJST1JTKSwKQEAgLTkyLDcgKzkyLDcgQEAKIAlTTk1QX01JQl9TRU5USU5FTAogfTsKIAotc3RhdGljIHN0cnVjdCBzbm1wX21pYiBzbm1wNl9pY21wNl9saXN0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIHNubXA2X2ljbXA2X2xpc3RbXSA9IHsKIC8qIGljbXB2NiBtaWIgYWNjb3JkaW5nIHRvIFJGQyAyNDY2ICovCiAJU05NUF9NSUJfSVRFTSgiSWNtcDZJbk1zZ3MiLCBJQ01QNl9NSUJfSU5NU0dTKSwKIAlTTk1QX01JQl9JVEVNKCJJY21wNkluRXJyb3JzIiwgSUNNUDZfTUlCX0lORVJST1JTKSwKQEAgLTEyMCw3ICsxMjAsNyBAQAogfTsKIAogCi1zdGF0aWMgc3RydWN0IHNubXBfbWliIHNubXA2X3VkcDZfbGlzdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiBzbm1wNl91ZHA2X2xpc3RbXSA9IHsKIAlTTk1QX01JQl9JVEVNKCJVZHA2SW5EYXRhZ3JhbXMiLCBVRFBfTUlCX0lOREFUQUdSQU1TKSwKIAlTTk1QX01JQl9JVEVNKCJVZHA2Tm9Qb3J0cyIsIFVEUF9NSUJfTk9QT1JUUyksCiAJU05NUF9NSUJfSVRFTSgiVWRwNkluRXJyb3JzIiwgVURQX01JQl9JTkVSUk9SUyksCkBAIC0xMjgsNyArMTI4LDcgQEAKIAlTTk1QX01JQl9TRU5USU5FTAogfTsKIAotc3RhdGljIHN0cnVjdCBzbm1wX21pYiBzbm1wNl91ZHBsaXRlNl9saXN0W10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHNubXBfbWliIHNubXA2X3VkcGxpdGU2X2xpc3RbXSA9IHsKIAlTTk1QX01JQl9JVEVNKCJVZHBMaXRlNkluRGF0YWdyYW1zIiwgVURQX01JQl9JTkRBVEFHUkFNUyksCiAJU05NUF9NSUJfSVRFTSgiVWRwTGl0ZTZOb1BvcnRzIiwgVURQX01JQl9OT1BPUlRTKSwKIAlTTk1QX01JQl9JVEVNKCJVZHBMaXRlNkluRXJyb3JzIiwgVURQX01JQl9JTkVSUk9SUyksCkBAIC0xMzYsNyArMTM2LDcgQEAKIAlTTk1QX01JQl9TRU5USU5FTAogfTsKIAotc3RhdGljIHZvaWQgc25tcDZfc2VxX3Nob3dfaWNtcHY2bXNnKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICoqbWliKQorc3RhdGljIHZvaWQgc25tcDZfc2VxX3Nob3dfaWNtcHY2bXNnKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkIF9fcGVyY3B1ICoqbWliKQogewogCWNoYXIgbmFtZVszMl07CiAJaW50IGk7CkBAIC0xNzAsOCArMTcwLDggQEAKIAlyZXR1cm47CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZAotc25tcDZfc2VxX3Nob3dfaXRlbShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqKm1pYiwgc3RydWN0IHNubXBfbWliICppdGVtbGlzdCkKK3N0YXRpYyB2b2lkIHNubXA2X3NlcV9zaG93X2l0ZW0oc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgX19wZXJjcHUgKiptaWIsCisJCQkJY29uc3Qgc3RydWN0IHNubXBfbWliICppdGVtbGlzdCkKIHsKIAlpbnQgaTsKIAlmb3IgKGk9MDsgaXRlbWxpc3RbaV0ubmFtZTsgaSsrKQpAQCAtMTgzLDE0ICsxODMsMTUgQEAKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSAoc3RydWN0IG5ldCAqKXNlcS0+cHJpdmF0ZTsKIAotCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCAodm9pZCAqKiluZXQtPm1pYi5pcHY2X3N0YXRpc3RpY3MsCisJc25tcDZfc2VxX3Nob3dfaXRlbShzZXEsICh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLmlwdjZfc3RhdGlzdGljcywKIAkJCSAgICBzbm1wNl9pcHN0YXRzX2xpc3QpOwotCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCAodm9pZCAqKiluZXQtPm1pYi5pY21wdjZfc3RhdGlzdGljcywKKwlzbm1wNl9zZXFfc2hvd19pdGVtKHNlcSwgKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaWNtcHY2X3N0YXRpc3RpY3MsCiAJCQkgICAgc25tcDZfaWNtcDZfbGlzdCk7Ci0Jc25tcDZfc2VxX3Nob3dfaWNtcHY2bXNnKHNlcSwgKHZvaWQgKiopbmV0LT5taWIuaWNtcHY2bXNnX3N0YXRpc3RpY3MpOwotCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCAodm9pZCAqKiluZXQtPm1pYi51ZHBfc3RhdHNfaW42LAorCXNubXA2X3NlcV9zaG93X2ljbXB2Nm1zZyhzZXEsCisJCQkgICAgKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIuaWNtcHY2bXNnX3N0YXRpc3RpY3MpOworCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCAodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi51ZHBfc3RhdHNfaW42LAogCQkJICAgIHNubXA2X3VkcDZfbGlzdCk7Ci0Jc25tcDZfc2VxX3Nob3dfaXRlbShzZXEsICh2b2lkICoqKW5ldC0+bWliLnVkcGxpdGVfc3RhdHNfaW42LAorCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCAodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi51ZHBsaXRlX3N0YXRzX2luNiwKIAkJCSAgICBzbm1wNl91ZHBsaXRlNl9saXN0KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTIxMyw5ICsyMTQsMTEgQEAKIAlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2ID0gKHN0cnVjdCBpbmV0Nl9kZXYgKilzZXEtPnByaXZhdGU7CiAKIAlzZXFfcHJpbnRmKHNlcSwgIiUtMzJzXHQldVxuIiwgImlmSW5kZXgiLCBpZGV2LT5kZXYtPmlmaW5kZXgpOwotCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCAodm9pZCAqKilpZGV2LT5zdGF0cy5pcHY2LCBzbm1wNl9pcHN0YXRzX2xpc3QpOwotCXNubXA2X3NlcV9zaG93X2l0ZW0oc2VxLCAodm9pZCAqKilpZGV2LT5zdGF0cy5pY21wdjYsIHNubXA2X2ljbXA2X2xpc3QpOwotCXNubXA2X3NlcV9zaG93X2ljbXB2Nm1zZyhzZXEsICh2b2lkICoqKWlkZXYtPnN0YXRzLmljbXB2Nm1zZyk7CisJc25tcDZfc2VxX3Nob3dfaXRlbShzZXEsICh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmlwdjYsCisJCQkgICAgc25tcDZfaXBzdGF0c19saXN0KTsKKwlzbm1wNl9zZXFfc2hvd19pdGVtKHNlcSwgKHZvaWQgX19wZXJjcHUgKiopaWRldi0+c3RhdHMuaWNtcHY2LAorCQkJICAgIHNubXA2X2ljbXA2X2xpc3QpOworCXNubXA2X3NlcV9zaG93X2ljbXB2Nm1zZyhzZXEsICh2b2lkIF9fcGVyY3B1ICoqKWlkZXYtPnN0YXRzLmljbXB2Nm1zZyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI1OSw3ICsyNjIsNyBAQAogCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaWRldi0+ZGV2KTsKIAlpZiAoIW5ldC0+bWliLnByb2NfbmV0X2RldnNubXA2KQogCQlyZXR1cm4gLUVOT0VOVDsKLQlpZiAoIWlkZXYgfHwgIWlkZXYtPnN0YXRzLnByb2NfZGlyX2VudHJ5KQorCWlmICghaWRldi0+c3RhdHMucHJvY19kaXJfZW50cnkpCiAJCXJldHVybiAtRUlOVkFMOwogCXJlbW92ZV9wcm9jX2VudHJ5KGlkZXYtPnN0YXRzLnByb2NfZGlyX2VudHJ5LT5uYW1lLAogCQkJICBuZXQtPm1pYi5wcm9jX25ldF9kZXZzbm1wNik7CkBAIC0yNjcsNyArMjcwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpcHY2X3Byb2NfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGlwdjZfcHJvY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJzb2Nrc3RhdDYiLCBTX0lSVUdPLAogCQkJJnNvY2tzdGF0Nl9zZXFfZm9wcykpCkBAIC0yODgsNyArMjkxLDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIHZvaWQgaXB2Nl9wcm9jX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXB2Nl9wcm9jX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlwcm9jX25ldF9yZW1vdmUobmV0LCAic29ja3N0YXQ2Iik7CiAJcHJvY19uZXRfcmVtb3ZlKG5ldCwgImRldl9zbm1wNiIpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmF3LmMgYi9uZXQvaXB2Ni9yYXcuYwppbmRleCA5MjZjZThlLi5lZDMxYzM3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yYXcuYworKysgYi9uZXQvaXB2Ni9yYXcuYwpAQCAtMTI3NSw3ICsxMjc1LDcgQEAKIAkucmVsZWFzZSA9CXNlcV9yZWxlYXNlX25ldCwKIH07CiAKLXN0YXRpYyBpbnQgcmF3Nl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgcmF3Nl9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJyYXc2IiwgU19JUlVHTywgJnJhdzZfc2VxX2ZvcHMpKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTEyODMsNyArMTI4Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJhdzZfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCByYXc2X2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlwcm9jX25ldF9yZW1vdmUobmV0LCAicmF3NiIpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvcmVhc3NlbWJseS5jIGIvbmV0L2lwdjYvcmVhc3NlbWJseS5jCmluZGV4IDJjZGRlYTMuLmE1NTUxNTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3JlYXNzZW1ibHkuYworKysgYi9uZXQvaXB2Ni9yZWFzc2VtYmx5LmMKQEAgLTIyOCw3ICsyMjgsNyBAQAogCSAgIHBvaW50ZXIgZGlyZWN0bHksIGRldmljZSBtaWdodCBhbHJlYWR5IGRpc2FwcGVhcmVkLgogCSAqLwogCWZxLT5xLmZyYWdtZW50cy0+ZGV2ID0gZGV2OwotCWljbXB2Nl9zZW5kKGZxLT5xLmZyYWdtZW50cywgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0ZSQUdUSU1FLCAwLCBkZXYpOworCWljbXB2Nl9zZW5kKGZxLT5xLmZyYWdtZW50cywgSUNNUFY2X1RJTUVfRVhDRUVELCBJQ01QVjZfRVhDX0ZSQUdUSU1FLCAwKTsKIG91dF9yY3VfdW5sb2NrOgogCXJjdV9yZWFkX3VubG9jaygpOwogb3V0OgpAQCAtMjM3LDggKzIzNyw3IEBACiB9CiAKIHN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBmcmFnX3F1ZXVlICoKLWZxX2ZpbmQoc3RydWN0IG5ldCAqbmV0LCBfX2JlMzIgaWQsIHN0cnVjdCBpbjZfYWRkciAqc3JjLCBzdHJ1Y3QgaW42X2FkZHIgKmRzdCwKLQlzdHJ1Y3QgaW5ldDZfZGV2ICppZGV2KQorZnFfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIF9fYmUzMiBpZCwgc3RydWN0IGluNl9hZGRyICpzcmMsIHN0cnVjdCBpbjZfYWRkciAqZHN0KQogewogCXN0cnVjdCBpbmV0X2ZyYWdfcXVldWUgKnE7CiAJc3RydWN0IGlwNl9jcmVhdGVfYXJnIGFyZzsKQEAgLTI1NCwxMyArMjUzLDkgQEAKIAogCXEgPSBpbmV0X2ZyYWdfZmluZCgmbmV0LT5pcHY2LmZyYWdzLCAmaXA2X2ZyYWdzLCAmYXJnLCBoYXNoKTsKIAlpZiAocSA9PSBOVUxMKQotCQlnb3RvIG9vbTsKKwkJcmV0dXJuIE5VTEw7CiAKIAlyZXR1cm4gY29udGFpbmVyX29mKHEsIHN0cnVjdCBmcmFnX3F1ZXVlLCBxKTsKLQotb29tOgotCUlQNl9JTkNfU1RBVFNfQkgobmV0LCBpZGV2LCBJUFNUQVRTX01JQl9SRUFTTUZBSUxTKTsKLQlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGludCBpcDZfZnJhZ19xdWV1ZShzdHJ1Y3QgZnJhZ19xdWV1ZSAqZnEsIHN0cnVjdCBza19idWZmICpza2IsCkBAIC02MDYsOCArNjAxLDggQEAKIAlpZiAoYXRvbWljX3JlYWQoJm5ldC0+aXB2Ni5mcmFncy5tZW0pID4gbmV0LT5pcHY2LmZyYWdzLmhpZ2hfdGhyZXNoKQogCQlpcDZfZXZpY3RvcihuZXQsIGlwNl9kc3RfaWRldihza2JfZHN0KHNrYikpKTsKIAotCWlmICgoZnEgPSBmcV9maW5kKG5ldCwgZmhkci0+aWRlbnRpZmljYXRpb24sICZoZHItPnNhZGRyLCAmaGRyLT5kYWRkciwKLQkJCSAgaXA2X2RzdF9pZGV2KHNrYl9kc3Qoc2tiKSkpKSAhPSBOVUxMKSB7CisJZnEgPSBmcV9maW5kKG5ldCwgZmhkci0+aWRlbnRpZmljYXRpb24sICZoZHItPnNhZGRyLCAmaGRyLT5kYWRkcik7CisJaWYgKGZxICE9IE5VTEwpIHsKIAkJaW50IHJldDsKIAogCQlzcGluX2xvY2soJmZxLT5xLmxvY2spOwpAQCAtNjcyLDcgKzY2Nyw3IEBACiAJeyB9CiB9OwogCi1zdGF0aWMgaW50IGlwNl9mcmFnc19uc19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGlwNl9mcmFnc19uc19zeXNjdGxfcmVnaXN0ZXIoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBjdGxfdGFibGUgKnRhYmxlOwogCXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICpoZHI7CkBAIC03MDIsNyArNjk3LDcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIHZvaWQgaXA2X2ZyYWdzX25zX3N5c2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2X2ZyYWdzX25zX3N5c2N0bF91bnJlZ2lzdGVyKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKIApAQCAtNzQ1LDEwICs3NDAsMTAgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IGlwdjZfZnJhZ3NfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGlwdjZfZnJhZ3NfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewotCW5ldC0+aXB2Ni5mcmFncy5oaWdoX3RocmVzaCA9IDI1NiAqIDEwMjQ7Ci0JbmV0LT5pcHY2LmZyYWdzLmxvd190aHJlc2ggPSAxOTIgKiAxMDI0OworCW5ldC0+aXB2Ni5mcmFncy5oaWdoX3RocmVzaCA9IElQVjZfRlJBR19ISUdIX1RIUkVTSDsKKwluZXQtPmlwdjYuZnJhZ3MubG93X3RocmVzaCA9IElQVjZfRlJBR19MT1dfVEhSRVNIOwogCW5ldC0+aXB2Ni5mcmFncy50aW1lb3V0ID0gSVBWNl9GUkFHX1RJTUVPVVQ7CiAKIAlpbmV0X2ZyYWdzX2luaXRfbmV0KCZuZXQtPmlwdjYuZnJhZ3MpOwpAQCAtNzU2LDcgKzc1MSw3IEBACiAJcmV0dXJuIGlwNl9mcmFnc19uc19zeXNjdGxfcmVnaXN0ZXIobmV0KTsKIH0KIAotc3RhdGljIHZvaWQgaXB2Nl9mcmFnc19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGlwdjZfZnJhZ3NfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCWlwNl9mcmFnc19uc19zeXNjdGxfdW5yZWdpc3RlcihuZXQpOwogCWluZXRfZnJhZ3NfZXhpdF9uZXQoJm5ldC0+aXB2Ni5mcmFncywgJmlwNl9mcmFncyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9yb3V0ZS5jIGIvbmV0L2lwdjYvcm91dGUuYwppbmRleCBjMmJkNzRjLi5iMDg4NzllIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9yb3V0ZS5jCisrKyBiL25ldC9pcHY2L3JvdXRlLmMKQEAgLTkwOSw3ICs5MDksNyBAQAogewogCXN0cnVjdCBydDZfaW5mbyAqcnQ7CiAKLQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9ERVNUX1VOUkVBQ0gsIElDTVBWNl9BRERSX1VOUkVBQ0gsIDAsIHNrYi0+ZGV2KTsKKwlpY21wdjZfc2VuZChza2IsIElDTVBWNl9ERVNUX1VOUkVBQ0gsIElDTVBWNl9BRERSX1VOUkVBQ0gsIDApOwogCiAJcnQgPSAoc3RydWN0IHJ0Nl9pbmZvICopIHNrYl9kc3Qoc2tiKTsKIAlpZiAocnQpIHsKQEAgLTE4NzMsNyArMTg3Myw3IEBACiAJc3dpdGNoIChpcHN0YXRzX21pYl9ub3JvdXRlcykgewogCWNhc2UgSVBTVEFUU19NSUJfSU5OT1JPVVRFUzoKIAkJdHlwZSA9IGlwdjZfYWRkcl90eXBlKCZpcHY2X2hkcihza2IpLT5kYWRkcik7Ci0JCWlmICh0eXBlID09IElQVjZfQUREUl9BTlkgfHwgdHlwZSA9PSBJUFY2X0FERFJfUkVTRVJWRUQpIHsKKwkJaWYgKHR5cGUgPT0gSVBWNl9BRERSX0FOWSkgewogCQkJSVA2X0lOQ19TVEFUUyhkZXZfbmV0KGRzdC0+ZGV2KSwgaXA2X2RzdF9pZGV2KGRzdCksCiAJCQkJICAgICAgSVBTVEFUU19NSUJfSU5BRERSRVJST1JTKTsKIAkJCWJyZWFrOwpAQCAtMTg4NCw3ICsxODg0LDcgQEAKIAkJCSAgICAgIGlwc3RhdHNfbWliX25vcm91dGVzKTsKIAkJYnJlYWs7CiAJfQotCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X0RFU1RfVU5SRUFDSCwgY29kZSwgMCwgc2tiLT5kZXYpOworCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X0RFU1RfVU5SRUFDSCwgY29kZSwgMCk7CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNjEyLDcgKzI2MTIsNyBAQAogCXsgfQogfTsKIAotc3RydWN0IGN0bF90YWJsZSAqaXB2Nl9yb3V0ZV9zeXNjdGxfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitzdHJ1Y3QgY3RsX3RhYmxlICogX19uZXRfaW5pdCBpcHY2X3JvdXRlX3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlICp0YWJsZTsKIApAQCAtMjYzNyw3ICsyNjM3LDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IGlwNl9yb3V0ZV9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgaXA2X3JvdXRlX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpbnQgcmV0ID0gLUVOT01FTTsKIApAQCAtMjcwMiw3ICsyNzAyLDcgQEAKIAlnb3RvIG91dDsKIH0KIAotc3RhdGljIHZvaWQgaXA2X3JvdXRlX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXA2X3JvdXRlX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKIHsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCXByb2NfbmV0X3JlbW92ZShuZXQsICJpcHY2X3JvdXRlIik7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9zaXQuYyBiL25ldC9pcHY2L3NpdC5jCmluZGV4IDk3NmU2ODIuLmIxZWVhODEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3NpdC5jCisrKyBiL25ldC9pcHY2L3NpdC5jCkBAIC02Miw3ICs2Miw2IEBACiAjZGVmaW5lIEhBU0hfU0laRSAgMTYKICNkZWZpbmUgSEFTSChhZGRyKSAoKChfX2ZvcmNlIHUzMilhZGRyXigoX19mb3JjZSB1MzIpYWRkcj4+NCkpJjB4RikKIAotc3RhdGljIHZvaWQgaXBpcDZfZmJfdHVubmVsX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgdm9pZCBpcGlwNl90dW5uZWxfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGlwaXA2X3R1bm5lbF9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIApAQCAtMzY0LDcgKzM2Myw2IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCUlOSVRfUkNVX0hFQUQoJnAtPnJjdV9oZWFkKTsKIAlwLT5uZXh0ID0gdC0+cHJsOwogCXAtPmFkZHIgPSBhLT5hZGRyOwogCXAtPmZsYWdzID0gYS0+ZmxhZ3M7CkBAIC03NDUsNyArNzQzLDcgQEAKIAkJCXNrYl9kc3Qoc2tiKS0+b3BzLT51cGRhdGVfcG10dShza2JfZHN0KHNrYiksIG10dSk7CiAKIAkJaWYgKHNrYi0+bGVuID4gbXR1KSB7Ci0JCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUsIGRldik7CisJCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUpOwogCQkJaXBfcnRfcHV0KHJ0KTsKIAkJCWdvdG8gdHhfZXJyb3I7CiAJCX0KQEAgLTExMjAsNyArMTExOCw3IEBACiAJaXBpcDZfdHVubmVsX2JpbmRfZGV2KGRldik7CiB9CiAKLXN0YXRpYyB2b2lkIGlwaXA2X2ZiX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBfX25ldF9pbml0IGlwaXA2X2ZiX3R1bm5lbF9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGlwX3R1bm5lbCAqdHVubmVsID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9ICZ0dW5uZWwtPnBhcm1zLmlwaDsKQEAgLTExNDUsNyArMTE0Myw3IEBACiAJLnByaW9yaXR5CT0JMSwKIH07CiAKLXN0YXRpYyB2b2lkIHNpdF9kZXN0cm95X3R1bm5lbHMoc3RydWN0IHNpdF9uZXQgKnNpdG4sIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IHNpdF9kZXN0cm95X3R1bm5lbHMoc3RydWN0IHNpdF9uZXQgKnNpdG4sIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCiB7CiAJaW50IHByaW87CiAKQEAgLTExNjIsNyArMTE2MCw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IHNpdF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgc2l0X2luaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3Qgc2l0X25ldCAqc2l0biA9IG5ldF9nZW5lcmljKG5ldCwgc2l0X25ldF9pZCk7CiAJaW50IGVycjsKQEAgLTExOTUsNyArMTE5Myw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHZvaWQgc2l0X2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgc2l0X2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3Qgc2l0X25ldCAqc2l0biA9IG5ldF9nZW5lcmljKG5ldCwgc2l0X25ldF9pZCk7CiAJTElTVF9IRUFEKGxpc3QpOwpAQCAtMTIyOCwxNSArMTIyNiwxNCBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiSVB2NiBvdmVyIElQdjQgdHVubmVsaW5nIGRyaXZlclxuIik7CiAKLQlpZiAoeGZybTRfdHVubmVsX3JlZ2lzdGVyKCZzaXRfaGFuZGxlciwgQUZfSU5FVDYpIDwgMCkgewotCQlwcmludGsoS0VSTl9JTkZPICJzaXQgaW5pdDogQ2FuJ3QgYWRkIHByb3RvY29sXG4iKTsKLQkJcmV0dXJuIC1FQUdBSU47Ci0JfQotCiAJZXJyID0gcmVnaXN0ZXJfcGVybmV0X2RldmljZSgmc2l0X25ldF9vcHMpOwogCWlmIChlcnIgPCAwKQotCQl4ZnJtNF90dW5uZWxfZGVyZWdpc3Rlcigmc2l0X2hhbmRsZXIsIEFGX0lORVQ2KTsKLQorCQlyZXR1cm4gZXJyOworCWVyciA9IHhmcm00X3R1bm5lbF9yZWdpc3Rlcigmc2l0X2hhbmRsZXIsIEFGX0lORVQ2KTsKKwlpZiAoZXJyIDwgMCkgeworCQl1bnJlZ2lzdGVyX3Blcm5ldF9kZXZpY2UoJnNpdF9uZXRfb3BzKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAic2l0IGluaXQ6IENhbid0IGFkZCBwcm90b2NvbFxuIik7CisJfQogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3N5bmNvb2tpZXMuYyBiL25ldC9pcHY2L3N5bmNvb2tpZXMuYwppbmRleCA3MjA4YTA2Li4zNGQxZjA2IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9zeW5jb29raWVzLmMKKysrIGIvbmV0L2lwdjYvc3luY29va2llcy5jCkBAIC0yNjksNyArMjY5LDggQEAKIAlyZXEtPndpbmRvd19jbGFtcCA9IHRwLT53aW5kb3dfY2xhbXAgPyA6ZHN0X21ldHJpYyhkc3QsIFJUQVhfV0lORE9XKTsKIAl0Y3Bfc2VsZWN0X2luaXRpYWxfd2luZG93KHRjcF9mdWxsX3NwYWNlKHNrKSwgcmVxLT5tc3MsCiAJCQkJICAmcmVxLT5yY3Zfd25kLCAmcmVxLT53aW5kb3dfY2xhbXAsCi0JCQkJICBpcmVxLT53c2NhbGVfb2ssICZyY3Zfd3NjYWxlKTsKKwkJCQkgIGlyZXEtPndzY2FsZV9vaywgJnJjdl93c2NhbGUsCisJCQkJICBkc3RfbWV0cmljKGRzdCwgUlRBWF9JTklUUldORCkpOwogCiAJaXJlcS0+cmN2X3dzY2FsZSA9IHJjdl93c2NhbGU7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3N5c2N0bF9uZXRfaXB2Ni5jIGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMKaW5kZXggYzY5MDczNi4uZjg0MWQ5MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvc3lzY3RsX25ldF9pcHY2LmMKQEAgLTU1LDcgKzU1LDcgQEAKIH07CiBFWFBPUlRfU1lNQk9MX0dQTChuZXRfaXB2Nl9jdGxfcGF0aCk7CiAKLXN0YXRpYyBpbnQgaXB2Nl9zeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IGlwdjZfc3lzY3RsX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlzdHJ1Y3QgY3RsX3RhYmxlICppcHY2X3RhYmxlOwogCXN0cnVjdCBjdGxfdGFibGUgKmlwdjZfcm91dGVfdGFibGU7CkBAIC05OCw3ICs5OCw3IEBACiAJZ290byBvdXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGlwdjZfc3lzY3RsX25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgaXB2Nl9zeXNjdGxfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBjdGxfdGFibGUgKmlwdjZfdGFibGU7CiAJc3RydWN0IGN0bF90YWJsZSAqaXB2Nl9yb3V0ZV90YWJsZTsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3RjcF9pcHY2LmMgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCmluZGV4IGZlYmZkNTkuLjY5NjNhNmIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3RjcF9pcHY2LmMKKysrIGIvbmV0L2lwdjYvdGNwX2lwdjYuYwpAQCAtNTIwLDYgKzUyMCwxMyBAQAogCXJldHVybiBlcnI7CiB9CiAKK3N0YXRpYyBpbnQgdGNwX3Y2X3J0eF9zeW5hY2soc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3QgcmVxdWVzdF9zb2NrICpyZXEsCisJCQkgICAgIHN0cnVjdCByZXF1ZXN0X3ZhbHVlcyAqcnZwKQoreworCVRDUF9JTkNfU1RBVFNfQkgoc29ja19uZXQoc2spLCBUQ1BfTUlCX1JFVFJBTlNTRUdTKTsKKwlyZXR1cm4gdGNwX3Y2X3NlbmRfc3luYWNrKHNrLCByZXEsIHJ2cCk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBzeW5fZmxvb2Rfd2FybmluZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogI2lmZGVmIENPTkZJR19TWU5fQ09PS0lFUwpAQCAtODc2LDcgKzg4Myw3IEBACiAKIAlpZiAoZ2VuaGFzaCB8fCBtZW1jbXAoaGFzaF9sb2NhdGlvbiwgbmV3aGFzaCwgMTYpICE9IDApIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiTUQ1IEhhc2ggJXMgZm9yICglcEk2LCAldSktPiglcEk2LCAldSlcbiIsCisJCQlwcmludGsoS0VSTl9JTkZPICJNRDUgSGFzaCAlcyBmb3IgWyVwSTZjXToldS0+WyVwSTZjXToldVxuIiwKIAkJCSAgICAgICBnZW5oYXNoID8gImZhaWxlZCIgOiAibWlzbWF0Y2giLAogCQkJICAgICAgICZpcDZoLT5zYWRkciwgbnRvaHModGgtPnNvdXJjZSksCiAJCQkgICAgICAgJmlwNmgtPmRhZGRyLCBudG9ocyh0aC0+ZGVzdCkpOwpAQCAtODkwLDEwICs4OTcsMTEgQEAKIHN0cnVjdCByZXF1ZXN0X3NvY2tfb3BzIHRjcDZfcmVxdWVzdF9zb2NrX29wcyBfX3JlYWRfbW9zdGx5ID0gewogCS5mYW1pbHkJCT0JQUZfSU5FVDYsCiAJLm9ial9zaXplCT0Jc2l6ZW9mKHN0cnVjdCB0Y3A2X3JlcXVlc3Rfc29jayksCi0JLnJ0eF9zeW5fYWNrCT0JdGNwX3Y2X3NlbmRfc3luYWNrLAorCS5ydHhfc3luX2Fjawk9CXRjcF92Nl9ydHhfc3luYWNrLAogCS5zZW5kX2Fjawk9CXRjcF92Nl9yZXFza19zZW5kX2FjaywKIAkuZGVzdHJ1Y3Rvcgk9CXRjcF92Nl9yZXFza19kZXN0cnVjdG9yLAotCS5zZW5kX3Jlc2V0CT0JdGNwX3Y2X3NlbmRfcmVzZXQKKwkuc2VuZF9yZXNldAk9CXRjcF92Nl9zZW5kX3Jlc2V0LAorCS5zeW5fYWNrX3RpbWVvdXQgPSAJdGNwX3N5bl9hY2tfdGltZW91dCwKIH07CiAKICNpZmRlZiBDT05GSUdfVENQX01ENVNJRwpAQCAtMjEwNSw3ICsyMTEzLDcgQEAKIAl9LAogfTsKIAotaW50IHRjcDZfcHJvY19pbml0KHN0cnVjdCBuZXQgKm5ldCkKK2ludCBfX25ldF9pbml0IHRjcDZfcHJvY19pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlyZXR1cm4gdGNwX3Byb2NfcmVnaXN0ZXIobmV0LCAmdGNwNl9zZXFfYWZpbmZvKTsKIH0KQEAgLTIxNzQsMTggKzIxODIsMTggQEAKIAkJCQlJTkVUX1BST1RPU1dfSUNTSywKIH07CiAKLXN0YXRpYyBpbnQgdGNwdjZfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IHRjcHY2X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlyZXR1cm4gaW5ldF9jdGxfc29ja19jcmVhdGUoJm5ldC0+aXB2Ni50Y3Bfc2ssIFBGX0lORVQ2LAogCQkJCSAgICBTT0NLX1JBVywgSVBQUk9UT19UQ1AsIG5ldCk7CiB9CiAKLXN0YXRpYyB2b2lkIHRjcHY2X25ldF9leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgdGNwdjZfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewogCWluZXRfY3RsX3NvY2tfZGVzdHJveShuZXQtPmlwdjYudGNwX3NrKTsKIH0KIAotc3RhdGljIHZvaWQgdGNwdjZfbmV0X2V4aXRfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqbmV0X2V4aXRfbGlzdCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgdGNwdjZfbmV0X2V4aXRfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqbmV0X2V4aXRfbGlzdCkKIHsKIAlpbmV0X3R3c2tfcHVyZ2UoJnRjcF9oYXNoaW5mbywgJnRjcF9kZWF0aF9yb3csIEFGX0lORVQ2KTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L3R1bm5lbDYuYyBiL25ldC9pcHY2L3R1bm5lbDYuYwppbmRleCA1MWUyODMyLi5lMTdiYzFkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni90dW5uZWw2LmMKKysrIGIvbmV0L2lwdjYvdHVubmVsNi5jCkBAIC05OCw3ICs5OCw3IEBACiAJCWlmICghaGFuZGxlci0+aGFuZGxlcihza2IpKQogCQkJcmV0dXJuIDA7CiAKLQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9ERVNUX1VOUkVBQ0gsIElDTVBWNl9QT1JUX1VOUkVBQ0gsIDAsIHNrYi0+ZGV2KTsKKwlpY21wdjZfc2VuZChza2IsIElDTVBWNl9ERVNUX1VOUkVBQ0gsIElDTVBWNl9QT1JUX1VOUkVBQ0gsIDApOwogCiBkcm9wOgogCWtmcmVlX3NrYihza2IpOwpAQCAtMTE2LDcgKzExNiw3IEBACiAJCWlmICghaGFuZGxlci0+aGFuZGxlcihza2IpKQogCQkJcmV0dXJuIDA7CiAKLQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9ERVNUX1VOUkVBQ0gsIElDTVBWNl9QT1JUX1VOUkVBQ0gsIDAsIHNrYi0+ZGV2KTsKKwlpY21wdjZfc2VuZChza2IsIElDTVBWNl9ERVNUX1VOUkVBQ0gsIElDTVBWNl9QT1JUX1VOUkVBQ0gsIDApOwogCiBkcm9wOgogCWtmcmVlX3NrYihza2IpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwLmMgYi9uZXQvaXB2Ni91ZHAuYwppbmRleCA2OWViZGJlLi41MmI4MzQ3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni91ZHAuYworKysgYi9uZXQvaXB2Ni91ZHAuYwpAQCAtMzIyLDcgKzMyMiw3IEBACiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCXVuc2lnbmVkIGludCB1bGVuLCBjb3BpZWQ7CisJdW5zaWduZWQgaW50IHVsZW47CiAJaW50IHBlZWtlZDsKIAlpbnQgZXJyOwogCWludCBpc191ZHBsaXRlID0gSVNfVURQTElURShzayk7CkBAIC0zNDEsMTAgKzM0MSw5IEBACiAJCWdvdG8gb3V0OwogCiAJdWxlbiA9IHNrYi0+bGVuIC0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCWNvcGllZCA9IGxlbjsKLQlpZiAoY29waWVkID4gdWxlbikKLQkJY29waWVkID0gdWxlbjsKLQllbHNlIGlmIChjb3BpZWQgPCB1bGVuKQorCWlmIChsZW4gPiB1bGVuKQorCQlsZW4gPSB1bGVuOworCWVsc2UgaWYgKGxlbiA8IHVsZW4pCiAJCW1zZy0+bXNnX2ZsYWdzIHw9IE1TR19UUlVOQzsKIAogCWlzX3VkcDQgPSAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpOwpAQCAtMzU1LDE0ICszNTQsMTQgQEAKIAkgKiBjb3ZlcmFnZSBjaGVja3N1bSAoVURQLUxpdGUpLCBkbyBpdCBiZWZvcmUgdGhlIGNvcHkuCiAJICovCiAKLQlpZiAoY29waWVkIDwgdWxlbiB8fCBVRFBfU0tCX0NCKHNrYiktPnBhcnRpYWxfY292KSB7CisJaWYgKGxlbiA8IHVsZW4gfHwgVURQX1NLQl9DQihza2IpLT5wYXJ0aWFsX2NvdikgewogCQlpZiAodWRwX2xpYl9jaGVja3N1bV9jb21wbGV0ZShza2IpKQogCQkJZ290byBjc3VtX2NvcHlfZXJyOwogCX0KIAogCWlmIChza2JfY3N1bV91bm5lY2Vzc2FyeShza2IpKQogCQllcnIgPSBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhza2IsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwKLQkJCQkJICAgICAgbXNnLT5tc2dfaW92LCBjb3BpZWQgICAgICAgKTsKKwkJCQkJICAgICAgbXNnLT5tc2dfaW92LGxlbik7CiAJZWxzZSB7CiAJCWVyciA9IHNrYl9jb3B5X2FuZF9jc3VtX2RhdGFncmFtX2lvdmVjKHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLCBtc2ctPm1zZ19pb3YpOwogCQlpZiAoZXJyID09IC1FSU5WQUwpCkBAIC00MTEsNyArNDEwLDcgQEAKIAkJCWRhdGFncmFtX3JlY3ZfY3RsKHNrLCBtc2csIHNrYik7CiAJfQogCi0JZXJyID0gY29waWVkOworCWVyciA9IGxlbjsKIAlpZiAoZmxhZ3MgJiBNU0dfVFJVTkMpCiAJCWVyciA9IHVsZW47CiAKQEAgLTY4MSwxMiArNjgwLDExIEBACiBpbnQgX191ZHA2X2xpYl9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHVkcF90YWJsZSAqdWRwdGFibGUsCiAJCSAgIGludCBwcm90bykKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKIAlzdHJ1Y3Qgc29jayAqc2s7CiAJc3RydWN0IHVkcGhkciAqdWg7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OwogCXN0cnVjdCBpbjZfYWRkciAqc2FkZHIsICpkYWRkcjsKIAl1MzIgdWxlbiA9IDA7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChza2ItPmRldik7CiAKIAlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpKQogCQlnb3RvIHNob3J0X3BhY2tldDsKQEAgLTc0NSw3ICs3NDMsNyBAQAogCQlVRFA2X0lOQ19TVEFUU19CSChuZXQsIFVEUF9NSUJfTk9QT1JUUywKIAkJCQlwcm90byA9PSBJUFBST1RPX1VEUExJVEUpOwogCi0JCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X0RFU1RfVU5SRUFDSCwgSUNNUFY2X1BPUlRfVU5SRUFDSCwgMCwgZGV2KTsKKwkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfREVTVF9VTlJFQUNILCBJQ01QVjZfUE9SVF9VTlJFQUNILCAwKTsKIAogCQlrZnJlZV9za2Ioc2tiKTsKIAkJcmV0dXJuIDA7CkBAIC0xMzk2LDcgKzEzOTQsNyBAQAogCX0sCiB9OwogCi1pbnQgdWRwNl9wcm9jX2luaXQoc3RydWN0IG5ldCAqbmV0KQoraW50IF9fbmV0X2luaXQgdWRwNl9wcm9jX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCXJldHVybiB1ZHBfcHJvY19yZWdpc3RlcihuZXQsICZ1ZHA2X3NlcV9hZmluZm8pOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdWRwbGl0ZS5jIGIvbmV0L2lwdjYvdWRwbGl0ZS5jCmluZGV4IDZlYTY5MzguLjVmNDhmYWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3VkcGxpdGUuYworKysgYi9uZXQvaXB2Ni91ZHBsaXRlLmMKQEAgLTEwNCwxMiArMTA0LDEyIEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgdWRwbGl0ZTZfcHJvY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgdWRwbGl0ZTZfcHJvY19pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJcmV0dXJuIHVkcF9wcm9jX3JlZ2lzdGVyKG5ldCwgJnVkcGxpdGU2X3NlcV9hZmluZm8pOwogfQogCi1zdGF0aWMgdm9pZCB1ZHBsaXRlNl9wcm9jX2V4aXRfbmV0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgdWRwbGl0ZTZfcHJvY19leGl0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJdWRwX3Byb2NfdW5yZWdpc3RlcihuZXQsICZ1ZHBsaXRlNl9zZXFfYWZpbmZvKTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMgYi9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jCmluZGV4IDkwODQ1ODIuLjJiYzk4ZWQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X2lucHV0LmMKKysrIGIvbmV0L2lwdjYveGZybTZfaW5wdXQuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAJCQlicmVhazsKIAkJfQogCi0JCXggPSB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCBkc3QsIHNyYywgcHJvdG8sIEFGX0lORVQ2KTsKKwkJeCA9IHhmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihuZXQsIHNrYi0+bWFyaywgZHN0LCBzcmMsIHByb3RvLCBBRl9JTkVUNik7CiAJCWlmICgheCkKIAkJCWNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9vdXRwdXQuYyBiL25ldC9pcHY2L3hmcm02X291dHB1dC5jCmluZGV4IGM0ZjRlZWYuLjBjOTIxMTIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L3hmcm02X291dHB1dC5jCisrKyBiL25ldC9pcHY2L3hmcm02X291dHB1dC5jCkBAIC0zOCw3ICszOCw3IEBACiAKIAlpZiAoIXNrYi0+bG9jYWxfZGYgJiYgc2tiLT5sZW4gPiBtdHUpIHsKIAkJc2tiLT5kZXYgPSBkc3QtPmRldjsKLQkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1LCBza2ItPmRldik7CisJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSk7CiAJCXJldCA9IC1FTVNHU0laRTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jIGIvbmV0L2lwdjYveGZybTZfdHVubmVsLmMKaW5kZXggNDM4ODMxZC4uZmE4NWE3ZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfdHVubmVsLmMKKysrIGIvbmV0L2lwdjYveGZybTZfdHVubmVsLmMKQEAgLTMwLDYgKzMwLDI1IEBACiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L2ljbXB2Ni5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KKworI2RlZmluZSBYRlJNNl9UVU5ORUxfU1BJX0JZQUREUl9IU0laRSAyNTYKKyNkZWZpbmUgWEZSTTZfVFVOTkVMX1NQSV9CWVNQSV9IU0laRSAyNTYKKworI2RlZmluZSBYRlJNNl9UVU5ORUxfU1BJX01JTgkxCisjZGVmaW5lIFhGUk02X1RVTk5FTF9TUElfTUFYCTB4ZmZmZmZmZmYKKworc3RydWN0IHhmcm02X3R1bm5lbF9uZXQgeworCXN0cnVjdCBobGlzdF9oZWFkIHNwaV9ieWFkZHJbWEZSTTZfVFVOTkVMX1NQSV9CWUFERFJfSFNJWkVdOworCXN0cnVjdCBobGlzdF9oZWFkIHNwaV9ieXNwaVtYRlJNNl9UVU5ORUxfU1BJX0JZU1BJX0hTSVpFXTsKKwl1MzIgc3BpOworfTsKKworc3RhdGljIGludCB4ZnJtNl90dW5uZWxfbmV0X2lkIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgaW5saW5lIHN0cnVjdCB4ZnJtNl90dW5uZWxfbmV0ICp4ZnJtNl90dW5uZWxfcGVybmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlyZXR1cm4gbmV0X2dlbmVyaWMobmV0LCB4ZnJtNl90dW5uZWxfbmV0X2lkKTsKK30KIAogLyoKICAqIHhmcm1fdHVubmVsX3NwaSB0aGluZ3MgYXJlIGZvciBhbGxvY2F0aW5nIHVuaXF1ZSBpZCAoInNwaSIpCkBAIC00NiwxOSArNjUsOCBAQAogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHhmcm02X3R1bm5lbF9zcGlfbG9jayk7CiAKLXN0YXRpYyB1MzIgeGZybTZfdHVubmVsX3NwaTsKLQotI2RlZmluZSBYRlJNNl9UVU5ORUxfU1BJX01JTgkxCi0jZGVmaW5lIFhGUk02X1RVTk5FTF9TUElfTUFYCTB4ZmZmZmZmZmYKLQogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICp4ZnJtNl90dW5uZWxfc3BpX2ttZW0gX19yZWFkX21vc3RseTsKIAotI2RlZmluZSBYRlJNNl9UVU5ORUxfU1BJX0JZQUREUl9IU0laRSAyNTYKLSNkZWZpbmUgWEZSTTZfVFVOTkVMX1NQSV9CWVNQSV9IU0laRSAyNTYKLQotc3RhdGljIHN0cnVjdCBobGlzdF9oZWFkIHhmcm02X3R1bm5lbF9zcGlfYnlhZGRyW1hGUk02X1RVTk5FTF9TUElfQllBRERSX0hTSVpFXTsKLXN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCB4ZnJtNl90dW5uZWxfc3BpX2J5c3BpW1hGUk02X1RVTk5FTF9TUElfQllTUElfSFNJWkVdOwotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHhmcm02X3R1bm5lbF9zcGlfaGFzaF9ieWFkZHIoeGZybV9hZGRyZXNzX3QgKmFkZHIpCiB7CiAJdW5zaWduZWQgaDsKQEAgLTc2LDUwICs4NCwxNCBAQAogCXJldHVybiBzcGkgJSBYRlJNNl9UVU5ORUxfU1BJX0JZU1BJX0hTSVpFOwogfQogCi0KLXN0YXRpYyBpbnQgeGZybTZfdHVubmVsX3NwaV9pbml0KHZvaWQpCitzdGF0aWMgc3RydWN0IHhmcm02X3R1bm5lbF9zcGkgKl9feGZybTZfdHVubmVsX3NwaV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIpCiB7Ci0JaW50IGk7Ci0KLQl4ZnJtNl90dW5uZWxfc3BpID0gMDsKLQl4ZnJtNl90dW5uZWxfc3BpX2ttZW0gPSBrbWVtX2NhY2hlX2NyZWF0ZSgieGZybTZfdHVubmVsX3NwaSIsCi0JCQkJCQkgIHNpemVvZihzdHJ1Y3QgeGZybTZfdHVubmVsX3NwaSksCi0JCQkJCQkgIDAsIFNMQUJfSFdDQUNIRV9BTElHTiwKLQkJCQkJCSAgTlVMTCk7Ci0JaWYgKCF4ZnJtNl90dW5uZWxfc3BpX2ttZW0pCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZm9yIChpID0gMDsgaSA8IFhGUk02X1RVTk5FTF9TUElfQllBRERSX0hTSVpFOyBpKyspCi0JCUlOSVRfSExJU1RfSEVBRCgmeGZybTZfdHVubmVsX3NwaV9ieWFkZHJbaV0pOwotCWZvciAoaSA9IDA7IGkgPCBYRlJNNl9UVU5ORUxfU1BJX0JZU1BJX0hTSVpFOyBpKyspCi0JCUlOSVRfSExJU1RfSEVBRCgmeGZybTZfdHVubmVsX3NwaV9ieXNwaVtpXSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHhmcm02X3R1bm5lbF9zcGlfZmluaSh2b2lkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IFhGUk02X1RVTk5FTF9TUElfQllBRERSX0hTSVpFOyBpKyspIHsKLQkJaWYgKCFobGlzdF9lbXB0eSgmeGZybTZfdHVubmVsX3NwaV9ieWFkZHJbaV0pKQotCQkJcmV0dXJuOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgWEZSTTZfVFVOTkVMX1NQSV9CWVNQSV9IU0laRTsgaSsrKSB7Ci0JCWlmICghaGxpc3RfZW1wdHkoJnhmcm02X3R1bm5lbF9zcGlfYnlzcGlbaV0pKQotCQkJcmV0dXJuOwotCX0KLQlyY3VfYmFycmllcigpOwotCWttZW1fY2FjaGVfZGVzdHJveSh4ZnJtNl90dW5uZWxfc3BpX2ttZW0pOwotCXhmcm02X3R1bm5lbF9zcGlfa21lbSA9IE5VTEw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgeGZybTZfdHVubmVsX3NwaSAqX194ZnJtNl90dW5uZWxfc3BpX2xvb2t1cCh4ZnJtX2FkZHJlc3NfdCAqc2FkZHIpCi17CisJc3RydWN0IHhmcm02X3R1bm5lbF9uZXQgKnhmcm02X3RuID0geGZybTZfdHVubmVsX3Blcm5ldChuZXQpOwogCXN0cnVjdCB4ZnJtNl90dW5uZWxfc3BpICp4NnNwaTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqcG9zOwogCiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHg2c3BpLCBwb3MsCi0JCQkgICAgICZ4ZnJtNl90dW5uZWxfc3BpX2J5YWRkclt4ZnJtNl90dW5uZWxfc3BpX2hhc2hfYnlhZGRyKHNhZGRyKV0sCisJCQkgICAgICZ4ZnJtNl90bi0+c3BpX2J5YWRkclt4ZnJtNl90dW5uZWxfc3BpX2hhc2hfYnlhZGRyKHNhZGRyKV0sCiAJCQkgICAgIGxpc3RfYnlhZGRyKSB7CiAJCWlmIChtZW1jbXAoJng2c3BpLT5hZGRyLCBzYWRkciwgc2l6ZW9mKHg2c3BpLT5hZGRyKSkgPT0gMCkKIAkJCXJldHVybiB4NnNwaTsKQEAgLTEyOCwxMyArMTAwLDEzIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLV9fYmUzMiB4ZnJtNl90dW5uZWxfc3BpX2xvb2t1cCh4ZnJtX2FkZHJlc3NfdCAqc2FkZHIpCitfX2JlMzIgeGZybTZfdHVubmVsX3NwaV9sb29rdXAoc3RydWN0IG5ldCAqbmV0LCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIpCiB7CiAJc3RydWN0IHhmcm02X3R1bm5lbF9zcGkgKng2c3BpOwogCXUzMiBzcGk7CiAKIAlyY3VfcmVhZF9sb2NrX2JoKCk7Ci0JeDZzcGkgPSBfX3hmcm02X3R1bm5lbF9zcGlfbG9va3VwKHNhZGRyKTsKKwl4NnNwaSA9IF9feGZybTZfdHVubmVsX3NwaV9sb29rdXAobmV0LCBzYWRkcik7CiAJc3BpID0geDZzcGkgPyB4NnNwaS0+c3BpIDogMDsKIAlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAlyZXR1cm4gaHRvbmwoc3BpKTsKQEAgLTE0MiwxNCArMTE0LDE1IEBACiAKIEVYUE9SVF9TWU1CT0woeGZybTZfdHVubmVsX3NwaV9sb29rdXApOwogCi1zdGF0aWMgaW50IF9feGZybTZfdHVubmVsX3NwaV9jaGVjayh1MzIgc3BpKQorc3RhdGljIGludCBfX3hmcm02X3R1bm5lbF9zcGlfY2hlY2soc3RydWN0IG5ldCAqbmV0LCB1MzIgc3BpKQogeworCXN0cnVjdCB4ZnJtNl90dW5uZWxfbmV0ICp4ZnJtNl90biA9IHhmcm02X3R1bm5lbF9wZXJuZXQobmV0KTsKIAlzdHJ1Y3QgeGZybTZfdHVubmVsX3NwaSAqeDZzcGk7CiAJaW50IGluZGV4ID0geGZybTZfdHVubmVsX3NwaV9oYXNoX2J5c3BpKHNwaSk7CiAJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKIAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHg2c3BpLCBwb3MsCi0JCQkgICAgICZ4ZnJtNl90dW5uZWxfc3BpX2J5c3BpW2luZGV4XSwKKwkJCSAgICAgJnhmcm02X3RuLT5zcGlfYnlzcGlbaW5kZXhdLAogCQkJICAgICBsaXN0X2J5c3BpKSB7CiAJCWlmICh4NnNwaS0+c3BpID09IHNwaSkKIAkJCXJldHVybiAtMTsKQEAgLTE1Nyw2MSArMTMwLDYxIEBACiAJcmV0dXJuIGluZGV4OwogfQogCi1zdGF0aWMgdTMyIF9feGZybTZfdHVubmVsX2FsbG9jX3NwaSh4ZnJtX2FkZHJlc3NfdCAqc2FkZHIpCitzdGF0aWMgdTMyIF9feGZybTZfdHVubmVsX2FsbG9jX3NwaShzdHJ1Y3QgbmV0ICpuZXQsIHhmcm1fYWRkcmVzc190ICpzYWRkcikKIHsKKwlzdHJ1Y3QgeGZybTZfdHVubmVsX25ldCAqeGZybTZfdG4gPSB4ZnJtNl90dW5uZWxfcGVybmV0KG5ldCk7CiAJdTMyIHNwaTsKIAlzdHJ1Y3QgeGZybTZfdHVubmVsX3NwaSAqeDZzcGk7CiAJaW50IGluZGV4OwogCi0JaWYgKHhmcm02X3R1bm5lbF9zcGkgPCBYRlJNNl9UVU5ORUxfU1BJX01JTiB8fAotCSAgICB4ZnJtNl90dW5uZWxfc3BpID49IFhGUk02X1RVTk5FTF9TUElfTUFYKQotCQl4ZnJtNl90dW5uZWxfc3BpID0gWEZSTTZfVFVOTkVMX1NQSV9NSU47CisJaWYgKHhmcm02X3RuLT5zcGkgPCBYRlJNNl9UVU5ORUxfU1BJX01JTiB8fAorCSAgICB4ZnJtNl90bi0+c3BpID49IFhGUk02X1RVTk5FTF9TUElfTUFYKQorCQl4ZnJtNl90bi0+c3BpID0gWEZSTTZfVFVOTkVMX1NQSV9NSU47CiAJZWxzZQotCQl4ZnJtNl90dW5uZWxfc3BpKys7CisJCXhmcm02X3RuLT5zcGkrKzsKIAotCWZvciAoc3BpID0geGZybTZfdHVubmVsX3NwaTsgc3BpIDw9IFhGUk02X1RVTk5FTF9TUElfTUFYOyBzcGkrKykgewotCQlpbmRleCA9IF9feGZybTZfdHVubmVsX3NwaV9jaGVjayhzcGkpOworCWZvciAoc3BpID0geGZybTZfdG4tPnNwaTsgc3BpIDw9IFhGUk02X1RVTk5FTF9TUElfTUFYOyBzcGkrKykgeworCQlpbmRleCA9IF9feGZybTZfdHVubmVsX3NwaV9jaGVjayhuZXQsIHNwaSk7CiAJCWlmIChpbmRleCA+PSAwKQogCQkJZ290byBhbGxvY19zcGk7CiAJfQotCWZvciAoc3BpID0gWEZSTTZfVFVOTkVMX1NQSV9NSU47IHNwaSA8IHhmcm02X3R1bm5lbF9zcGk7IHNwaSsrKSB7Ci0JCWluZGV4ID0gX194ZnJtNl90dW5uZWxfc3BpX2NoZWNrKHNwaSk7CisJZm9yIChzcGkgPSBYRlJNNl9UVU5ORUxfU1BJX01JTjsgc3BpIDwgeGZybTZfdG4tPnNwaTsgc3BpKyspIHsKKwkJaW5kZXggPSBfX3hmcm02X3R1bm5lbF9zcGlfY2hlY2sobmV0LCBzcGkpOwogCQlpZiAoaW5kZXggPj0gMCkKIAkJCWdvdG8gYWxsb2Nfc3BpOwogCX0KIAlzcGkgPSAwOwogCWdvdG8gb3V0OwogYWxsb2Nfc3BpOgotCXhmcm02X3R1bm5lbF9zcGkgPSBzcGk7CisJeGZybTZfdG4tPnNwaSA9IHNwaTsKIAl4NnNwaSA9IGttZW1fY2FjaGVfYWxsb2MoeGZybTZfdHVubmVsX3NwaV9rbWVtLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXg2c3BpKQogCQlnb3RvIG91dDsKIAotCUlOSVRfUkNVX0hFQUQoJng2c3BpLT5yY3VfaGVhZCk7CiAJbWVtY3B5KCZ4NnNwaS0+YWRkciwgc2FkZHIsIHNpemVvZih4NnNwaS0+YWRkcikpOwogCXg2c3BpLT5zcGkgPSBzcGk7CiAJYXRvbWljX3NldCgmeDZzcGktPnJlZmNudCwgMSk7CiAKLQlobGlzdF9hZGRfaGVhZF9yY3UoJng2c3BpLT5saXN0X2J5c3BpLCAmeGZybTZfdHVubmVsX3NwaV9ieXNwaVtpbmRleF0pOworCWhsaXN0X2FkZF9oZWFkX3JjdSgmeDZzcGktPmxpc3RfYnlzcGksICZ4ZnJtNl90bi0+c3BpX2J5c3BpW2luZGV4XSk7CiAKIAlpbmRleCA9IHhmcm02X3R1bm5lbF9zcGlfaGFzaF9ieWFkZHIoc2FkZHIpOwotCWhsaXN0X2FkZF9oZWFkX3JjdSgmeDZzcGktPmxpc3RfYnlhZGRyLCAmeGZybTZfdHVubmVsX3NwaV9ieWFkZHJbaW5kZXhdKTsKKwlobGlzdF9hZGRfaGVhZF9yY3UoJng2c3BpLT5saXN0X2J5YWRkciwgJnhmcm02X3RuLT5zcGlfYnlhZGRyW2luZGV4XSk7CiBvdXQ6CiAJcmV0dXJuIHNwaTsKIH0KIAotX19iZTMyIHhmcm02X3R1bm5lbF9hbGxvY19zcGkoeGZybV9hZGRyZXNzX3QgKnNhZGRyKQorX19iZTMyIHhmcm02X3R1bm5lbF9hbGxvY19zcGkoc3RydWN0IG5ldCAqbmV0LCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIpCiB7CiAJc3RydWN0IHhmcm02X3R1bm5lbF9zcGkgKng2c3BpOwogCXUzMiBzcGk7CiAKIAlzcGluX2xvY2tfYmgoJnhmcm02X3R1bm5lbF9zcGlfbG9jayk7Ci0JeDZzcGkgPSBfX3hmcm02X3R1bm5lbF9zcGlfbG9va3VwKHNhZGRyKTsKKwl4NnNwaSA9IF9feGZybTZfdHVubmVsX3NwaV9sb29rdXAobmV0LCBzYWRkcik7CiAJaWYgKHg2c3BpKSB7CiAJCWF0b21pY19pbmMoJng2c3BpLT5yZWZjbnQpOwogCQlzcGkgPSB4NnNwaS0+c3BpOwogCX0gZWxzZQotCQlzcGkgPSBfX3hmcm02X3R1bm5lbF9hbGxvY19zcGkoc2FkZHIpOworCQlzcGkgPSBfX3hmcm02X3R1bm5lbF9hbGxvY19zcGkobmV0LCBzYWRkcik7CiAJc3Bpbl91bmxvY2tfYmgoJnhmcm02X3R1bm5lbF9zcGlfbG9jayk7CiAKIAlyZXR1cm4gaHRvbmwoc3BpKTsKQEAgLTIyNSwxNSArMTk4LDE2IEBACiAJCQljb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHhmcm02X3R1bm5lbF9zcGksIHJjdV9oZWFkKSk7CiB9CiAKLXZvaWQgeGZybTZfdHVubmVsX2ZyZWVfc3BpKHhmcm1fYWRkcmVzc190ICpzYWRkcikKK3ZvaWQgeGZybTZfdHVubmVsX2ZyZWVfc3BpKHN0cnVjdCBuZXQgKm5ldCwgeGZybV9hZGRyZXNzX3QgKnNhZGRyKQogeworCXN0cnVjdCB4ZnJtNl90dW5uZWxfbmV0ICp4ZnJtNl90biA9IHhmcm02X3R1bm5lbF9wZXJuZXQobmV0KTsKIAlzdHJ1Y3QgeGZybTZfdHVubmVsX3NwaSAqeDZzcGk7CiAJc3RydWN0IGhsaXN0X25vZGUgKnBvcywgKm47CiAKIAlzcGluX2xvY2tfYmgoJnhmcm02X3R1bm5lbF9zcGlfbG9jayk7CiAKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHg2c3BpLCBwb3MsIG4sCi0JCQkJICAmeGZybTZfdHVubmVsX3NwaV9ieWFkZHJbeGZybTZfdHVubmVsX3NwaV9oYXNoX2J5YWRkcihzYWRkcildLAorCQkJCSAgJnhmcm02X3RuLT5zcGlfYnlhZGRyW3hmcm02X3R1bm5lbF9zcGlfaGFzaF9ieWFkZHIoc2FkZHIpXSwKIAkJCQkgIGxpc3RfYnlhZGRyKQogCXsKIAkJaWYgKG1lbWNtcCgmeDZzcGktPmFkZHIsIHNhZGRyLCBzaXplb2YoeDZzcGktPmFkZHIpKSA9PSAwKSB7CkBAIC0yNjMsMTAgKzIzNywxMSBAQAogCiBzdGF0aWMgaW50IHhmcm02X3R1bm5lbF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHNrYi0+ZGV2KTsKIAlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gaXB2Nl9oZHIoc2tiKTsKIAlfX2JlMzIgc3BpOwogCi0Jc3BpID0geGZybTZfdHVubmVsX3NwaV9sb29rdXAoKHhmcm1fYWRkcmVzc190ICopJmlwaC0+c2FkZHIpOworCXNwaSA9IHhmcm02X3R1bm5lbF9zcGlfbG9va3VwKG5ldCwgKHhmcm1fYWRkcmVzc190ICopJmlwaC0+c2FkZHIpOwogCXJldHVybiB4ZnJtNl9yY3Zfc3BpKHNrYiwgSVBQUk9UT19JUFY2LCBzcGkpID4gMCA/IDogMDsKIH0KIApAQCAtMzI2LDcgKzMwMSw5IEBACiAKIHN0YXRpYyB2b2lkIHhmcm02X3R1bm5lbF9kZXN0cm95KHN0cnVjdCB4ZnJtX3N0YXRlICp4KQogewotCXhmcm02X3R1bm5lbF9mcmVlX3NwaSgoeGZybV9hZGRyZXNzX3QgKikmeC0+cHJvcHMuc2FkZHIpOworCXN0cnVjdCBuZXQgKm5ldCA9IHhzX25ldCh4KTsKKworCXhmcm02X3R1bm5lbF9mcmVlX3NwaShuZXQsICh4ZnJtX2FkZHJlc3NfdCAqKSZ4LT5wcm9wcy5zYWRkcik7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV90eXBlIHhmcm02X3R1bm5lbF90eXBlID0gewpAQCAtMzUxLDM0ICszMjgsNzMgQEAKIAkucHJpb3JpdHkJPSAyLAogfTsKIAorc3RhdGljIGludCBfX25ldF9pbml0IHhmcm02X3R1bm5lbF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHhmcm02X3R1bm5lbF9uZXQgKnhmcm02X3RuID0geGZybTZfdHVubmVsX3Blcm5ldChuZXQpOworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IFhGUk02X1RVTk5FTF9TUElfQllBRERSX0hTSVpFOyBpKyspCisJCUlOSVRfSExJU1RfSEVBRCgmeGZybTZfdG4tPnNwaV9ieWFkZHJbaV0pOworCWZvciAoaSA9IDA7IGkgPCBYRlJNNl9UVU5ORUxfU1BJX0JZU1BJX0hTSVpFOyBpKyspCisJCUlOSVRfSExJU1RfSEVBRCgmeGZybTZfdG4tPnNwaV9ieXNwaVtpXSk7CisJeGZybTZfdG4tPnNwaSA9IDA7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19uZXRfZXhpdCB4ZnJtNl90dW5uZWxfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQoreworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHhmcm02X3R1bm5lbF9uZXRfb3BzID0geworCS5pbml0CT0geGZybTZfdHVubmVsX25ldF9pbml0LAorCS5leGl0CT0geGZybTZfdHVubmVsX25ldF9leGl0LAorCS5pZAk9ICZ4ZnJtNl90dW5uZWxfbmV0X2lkLAorCS5zaXplCT0gc2l6ZW9mKHN0cnVjdCB4ZnJtNl90dW5uZWxfbmV0KSwKK307CisKIHN0YXRpYyBpbnQgX19pbml0IHhmcm02X3R1bm5lbF9pbml0KHZvaWQpCiB7Ci0JaWYgKHhmcm1fcmVnaXN0ZXJfdHlwZSgmeGZybTZfdHVubmVsX3R5cGUsIEFGX0lORVQ2KSA8IDApCi0JCWdvdG8gZXJyOwotCWlmICh4ZnJtNl90dW5uZWxfcmVnaXN0ZXIoJnhmcm02X3R1bm5lbF9oYW5kbGVyLCBBRl9JTkVUNikpCi0JCWdvdG8gdW5yZWc7Ci0JaWYgKHhmcm02X3R1bm5lbF9yZWdpc3RlcigmeGZybTQ2X3R1bm5lbF9oYW5kbGVyLCBBRl9JTkVUKSkKLQkJZ290byBkZXJlZzY7Ci0JaWYgKHhmcm02X3R1bm5lbF9zcGlfaW5pdCgpIDwgMCkKLQkJZ290byBkZXJlZzQ2OworCWludCBydjsKKworCXhmcm02X3R1bm5lbF9zcGlfa21lbSA9IGttZW1fY2FjaGVfY3JlYXRlKCJ4ZnJtNl90dW5uZWxfc3BpIiwKKwkJCQkJCSAgc2l6ZW9mKHN0cnVjdCB4ZnJtNl90dW5uZWxfc3BpKSwKKwkJCQkJCSAgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLAorCQkJCQkJICBOVUxMKTsKKwlpZiAoIXhmcm02X3R1bm5lbF9zcGlfa21lbSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcnYgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZ4ZnJtNl90dW5uZWxfbmV0X29wcyk7CisJaWYgKHJ2IDwgMCkKKwkJZ290byBvdXRfcGVybmV0OworCXJ2ID0geGZybV9yZWdpc3Rlcl90eXBlKCZ4ZnJtNl90dW5uZWxfdHlwZSwgQUZfSU5FVDYpOworCWlmIChydiA8IDApCisJCWdvdG8gb3V0X3R5cGU7CisJcnYgPSB4ZnJtNl90dW5uZWxfcmVnaXN0ZXIoJnhmcm02X3R1bm5lbF9oYW5kbGVyLCBBRl9JTkVUNik7CisJaWYgKHJ2IDwgMCkKKwkJZ290byBvdXRfeGZybTY7CisJcnYgPSB4ZnJtNl90dW5uZWxfcmVnaXN0ZXIoJnhmcm00Nl90dW5uZWxfaGFuZGxlciwgQUZfSU5FVCk7CisJaWYgKHJ2IDwgMCkKKwkJZ290byBvdXRfeGZybTQ2OwogCXJldHVybiAwOwogCi1kZXJlZzQ2OgotCXhmcm02X3R1bm5lbF9kZXJlZ2lzdGVyKCZ4ZnJtNDZfdHVubmVsX2hhbmRsZXIsIEFGX0lORVQpOwotZGVyZWc2Ogorb3V0X3hmcm00NjoKIAl4ZnJtNl90dW5uZWxfZGVyZWdpc3RlcigmeGZybTZfdHVubmVsX2hhbmRsZXIsIEFGX0lORVQ2KTsKLXVucmVnOgorb3V0X3hmcm02OgogCXhmcm1fdW5yZWdpc3Rlcl90eXBlKCZ4ZnJtNl90dW5uZWxfdHlwZSwgQUZfSU5FVDYpOwotZXJyOgotCXJldHVybiAtRUFHQUlOOworb3V0X3R5cGU6CisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZ4ZnJtNl90dW5uZWxfbmV0X29wcyk7CitvdXRfcGVybmV0OgorCWttZW1fY2FjaGVfZGVzdHJveSh4ZnJtNl90dW5uZWxfc3BpX2ttZW0pOworCXJldHVybiBydjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHhmcm02X3R1bm5lbF9maW5pKHZvaWQpCiB7Ci0JeGZybTZfdHVubmVsX3NwaV9maW5pKCk7CiAJeGZybTZfdHVubmVsX2RlcmVnaXN0ZXIoJnhmcm00Nl90dW5uZWxfaGFuZGxlciwgQUZfSU5FVCk7CiAJeGZybTZfdHVubmVsX2RlcmVnaXN0ZXIoJnhmcm02X3R1bm5lbF9oYW5kbGVyLCBBRl9JTkVUNik7CiAJeGZybV91bnJlZ2lzdGVyX3R5cGUoJnhmcm02X3R1bm5lbF90eXBlLCBBRl9JTkVUNik7CisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZ4ZnJtNl90dW5uZWxfbmV0X29wcyk7CisJa21lbV9jYWNoZV9kZXN0cm95KHhmcm02X3R1bm5lbF9zcGlfa21lbSk7CiB9CiAKIG1vZHVsZV9pbml0KHhmcm02X3R1bm5lbF9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9pcHgvaXB4X3Byb2MuYyBiL25ldC9pcHgvaXB4X3Byb2MuYwppbmRleCA1NzYxNzg0Li4yNmI1YmZjIDEwMDY0NAotLS0gYS9uZXQvaXB4L2lweF9wcm9jLmMKKysrIGIvbmV0L2lweC9pcHhfcHJvYy5jCkBAIC0xMyw0NSArMTMsMTUgQEAKICNpbmNsdWRlIDxuZXQvdGNwX3N0YXRlcy5oPgogI2luY2x1ZGUgPG5ldC9pcHguaD4KIAotc3RhdGljIF9faW5saW5lX18gc3RydWN0IGlweF9pbnRlcmZhY2UgKmlweF9nZXRfaW50ZXJmYWNlX2lkeChsb2ZmX3QgcG9zKQotewotCXN0cnVjdCBpcHhfaW50ZXJmYWNlICppOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmaXB4X2ludGVyZmFjZXMsIG5vZGUpCi0JCWlmICghcG9zLS0pCi0JCQlnb3RvIG91dDsKLQlpID0gTlVMTDsKLW91dDoKLQlyZXR1cm4gaTsKLX0KLQotc3RhdGljIHN0cnVjdCBpcHhfaW50ZXJmYWNlICppcHhfaW50ZXJmYWNlc19uZXh0KHN0cnVjdCBpcHhfaW50ZXJmYWNlICppKQotewotCXN0cnVjdCBpcHhfaW50ZXJmYWNlICpyYyA9IE5VTEw7Ci0KLQlpZiAoaS0+bm9kZS5uZXh0ICE9ICZpcHhfaW50ZXJmYWNlcykKLQkJcmMgPSBsaXN0X2VudHJ5KGktPm5vZGUubmV4dCwgc3RydWN0IGlweF9pbnRlcmZhY2UsIG5vZGUpOwotCXJldHVybiByYzsKLX0KLQogc3RhdGljIHZvaWQgKmlweF9zZXFfaW50ZXJmYWNlX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIHsKLQlsb2ZmX3QgbCA9ICpwb3M7Ci0KIAlzcGluX2xvY2tfYmgoJmlweF9pbnRlcmZhY2VzX2xvY2spOwotCXJldHVybiBsID8gaXB4X2dldF9pbnRlcmZhY2VfaWR4KC0tbCkgOiBTRVFfU1RBUlRfVE9LRU47CisJcmV0dXJuIHNlcV9saXN0X3N0YXJ0X2hlYWQoJmlweF9pbnRlcmZhY2VzLCAqcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgKmlweF9zZXFfaW50ZXJmYWNlX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBpcHhfaW50ZXJmYWNlICppOwotCi0JKysqcG9zOwotCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKLQkJaSA9IGlweF9pbnRlcmZhY2VzX2hlYWQoKTsKLQllbHNlCi0JCWkgPSBpcHhfaW50ZXJmYWNlc19uZXh0KHYpOwotCXJldHVybiBpOworCXJldHVybiBzZXFfbGlzdF9uZXh0KHYsICZpcHhfaW50ZXJmYWNlcywgcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgaXB4X3NlcV9pbnRlcmZhY2Vfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKQEAgLTYzLDcgKzMzLDcgQEAKIHsKIAlzdHJ1Y3QgaXB4X2ludGVyZmFjZSAqaTsKIAotCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgeworCWlmICh2ID09ICZpcHhfaW50ZXJmYWNlcykgewogCQlzZXFfcHV0cyhzZXEsICJOZXR3b3JrICAgIE5vZGVfQWRkcmVzcyAgIFByaW1hcnkgIERldmljZSAgICAgIgogCQkJICAgICAgIkZyYW1lX1R5cGUiKTsKICNpZmRlZiBJUFhfUkVGQ05UX0RFQlVHCkBAIC03Myw3ICs0Myw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWkgPSB2OworCWkgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCBpcHhfaW50ZXJmYWNlLCBub2RlKTsKIAlzZXFfcHJpbnRmKHNlcSwgIiUwOGxYICAgIiwgKHVuc2lnbmVkIGxvbmcgaW50KW50b2hsKGktPmlmX25ldG51bSkpOwogCXNlcV9wcmludGYoc2VxLCAiJTAyWCUwMlglMDJYJTAyWCUwMlglMDJYICAgIiwKIAkJCWktPmlmX25vZGVbMF0sIGktPmlmX25vZGVbMV0sIGktPmlmX25vZGVbMl0sCkBAIC04OSw1MyArNTksMTUgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBpcHhfcm91dGUgKmlweF9yb3V0ZXNfaGVhZCh2b2lkKQotewotCXN0cnVjdCBpcHhfcm91dGUgKnJjID0gTlVMTDsKLQotCWlmICghbGlzdF9lbXB0eSgmaXB4X3JvdXRlcykpCi0JCXJjID0gbGlzdF9lbnRyeShpcHhfcm91dGVzLm5leHQsIHN0cnVjdCBpcHhfcm91dGUsIG5vZGUpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHN0cnVjdCBpcHhfcm91dGUgKmlweF9yb3V0ZXNfbmV4dChzdHJ1Y3QgaXB4X3JvdXRlICpyKQotewotCXN0cnVjdCBpcHhfcm91dGUgKnJjID0gTlVMTDsKLQotCWlmIChyLT5ub2RlLm5leHQgIT0gJmlweF9yb3V0ZXMpCi0JCXJjID0gbGlzdF9lbnRyeShyLT5ub2RlLm5leHQsIHN0cnVjdCBpcHhfcm91dGUsIG5vZGUpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIF9faW5saW5lX18gc3RydWN0IGlweF9yb3V0ZSAqaXB4X2dldF9yb3V0ZV9pZHgobG9mZl90IHBvcykKLXsKLQlzdHJ1Y3QgaXB4X3JvdXRlICpyOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShyLCAmaXB4X3JvdXRlcywgbm9kZSkKLQkJaWYgKCFwb3MtLSkKLQkJCWdvdG8gb3V0OwotCXIgPSBOVUxMOwotb3V0OgotCXJldHVybiByOwotfQotCiBzdGF0aWMgdm9pZCAqaXB4X3NlcV9yb3V0ZV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7Ci0JbG9mZl90IGwgPSAqcG9zOwogCXJlYWRfbG9ja19iaCgmaXB4X3JvdXRlc19sb2NrKTsKLQlyZXR1cm4gbCA/IGlweF9nZXRfcm91dGVfaWR4KC0tbCkgOiBTRVFfU1RBUlRfVE9LRU47CisJcmV0dXJuIHNlcV9saXN0X3N0YXJ0X2hlYWQoJmlweF9yb3V0ZXMsICpwb3MpOwogfQogCiBzdGF0aWMgdm9pZCAqaXB4X3NlcV9yb3V0ZV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgaXB4X3JvdXRlICpyOwotCi0JKysqcG9zOwotCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKLQkJciA9IGlweF9yb3V0ZXNfaGVhZCgpOwotCWVsc2UKLQkJciA9IGlweF9yb3V0ZXNfbmV4dCh2KTsKLQlyZXR1cm4gcjsKKwlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmaXB4X3JvdXRlcywgcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgaXB4X3NlcV9yb3V0ZV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpAQCAtMTQ3LDExICs3OSwxMyBAQAogewogCXN0cnVjdCBpcHhfcm91dGUgKnJ0OwogCi0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7CisJaWYgKHYgPT0gJmlweF9yb3V0ZXMpIHsKIAkJc2VxX3B1dHMoc2VxLCAiTmV0d29yayAgICBSb3V0ZXJfTmV0ICAgUm91dGVyX05vZGVcbiIpOwogCQlnb3RvIG91dDsKIAl9Ci0JcnQgPSB2OworCisJcnQgPSBsaXN0X2VudHJ5KHYsIHN0cnVjdCBpcHhfcm91dGUsIG5vZGUpOworCiAJc2VxX3ByaW50ZihzZXEsICIlMDhsWCAgICIsICh1bnNpZ25lZCBsb25nIGludCludG9obChydC0+aXJfbmV0KSk7CiAJaWYgKHJ0LT5pcl9yb3V0ZWQpCiAJCXNlcV9wcmludGYoc2VxLCAiJTA4bFggICAgICUwMlglMDJYJTAyWCUwMlglMDJYJTAyWFxuIiwKQEAgLTIyNiw5ICsxNjAsOSBAQAogCXNwaW5fdW5sb2NrX2JoKCZpLT5pZl9za2xpc3RfbG9jayk7CiAJc2sgPSBOVUxMOwogCWZvciAoOzspIHsKLQkJaSA9IGlweF9pbnRlcmZhY2VzX25leHQoaSk7Ci0JCWlmICghaSkKKwkJaWYgKGktPm5vZGUubmV4dCA9PSAmaXB4X2ludGVyZmFjZXMpCiAJCQlicmVhazsKKwkJaSA9IGxpc3RfZW50cnkoaS0+bm9kZS5uZXh0LCBzdHJ1Y3QgaXB4X2ludGVyZmFjZSwgbm9kZSk7CiAJCXNwaW5fbG9ja19iaCgmaS0+aWZfc2tsaXN0X2xvY2spOwogCQlpZiAoIWhsaXN0X2VtcHR5KCZpLT5pZl9za2xpc3QpKSB7CiAJCQlzayA9IHNrX2hlYWQoJmktPmlmX3NrbGlzdCk7CmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eS5jIGIvbmV0L2lyZGEvaXJjb21tL2lyY29tbV90dHkuYwppbmRleCA4MTE5ODRkLi44Yjg1ZDc3IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX3R0eS5jCisrKyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fdHR5LmMKQEAgLTQ5Niw5ICs0OTYsNiBAQAogCiAJSVJEQV9ERUJVRygwLCAiJXMoKVxuIiwgX19mdW5jX18gKTsKIAotCWlmICghdHR5KQotCQlyZXR1cm47Ci0KIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSQ09NTV9UVFlfTUFHSUMsIHJldHVybjspOwogCkBAIC0xMDA3LDkgKzEwMDQsNiBAQAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJDT01NX1RUWV9NQUdJQywgcmV0dXJuOyk7CiAKLQlpZiAoIXR0eSkKLQkJcmV0dXJuOwotCiAJLyogaXJjb21tX3R0eV9mbHVzaF9idWZmZXIodHR5KTsgKi8KIAlpcmNvbW1fdHR5X3NodXRkb3duKHNlbGYpOwogCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9jb21tb24uYyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2NvbW1vbi5jCmluZGV4IDMxNWVhZDMuLmU0ODZkYzggMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFuL2lybGFuX2NvbW1vbi5jCisrKyBiL25ldC9pcmRhL2lybGFuL2lybGFuX2NvbW1vbi5jCkBAIC0xMTI4LDM0ICsxMTI4LDE0IEBACiAgKi8KIHN0YXRpYyB2b2lkICppcmxhbl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewotCWludCBpID0gMTsKLQlzdHJ1Y3QgaXJsYW5fY2IgKnNlbGY7Ci0KIAlyY3VfcmVhZF9sb2NrKCk7Ci0JaWYgKCpwb3MgPT0gMCkKLQkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2VsZiwgJmlybGFucywgZGV2X2xpc3QpIHsKLQkJaWYgKCpwb3MgPT0gaSkKLQkJCXJldHVybiBzZWxmOwotCQkrK2k7Ci0JfQotCXJldHVybiBOVUxMOworCXJldHVybiBzZXFfbGlzdF9zdGFydF9oZWFkKCZpcmxhbnMsICpwb3MpOwogfQogCiAvKiBSZXR1cm4gZW50cnkgYWZ0ZXIgdiwgYW5kIGluY3JlbWVudCBwb3MgKi8KIHN0YXRpYyB2b2lkICppcmxhbl9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbnh0OwotCi0JKysqcG9zOwotCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKLQkJbnh0ID0gaXJsYW5zLm5leHQ7Ci0JZWxzZQotCQlueHQgPSAoKHN0cnVjdCBpcmxhbl9jYiAqKXYpLT5kZXZfbGlzdC5uZXh0OwotCi0JcmV0dXJuIChueHQgPT0gJmlybGFucykgPyBOVUxMCi0JCTogbGlzdF9lbnRyeShueHQsIHN0cnVjdCBpcmxhbl9jYiwgZGV2X2xpc3QpOworCXJldHVybiBzZXFfbGlzdF9uZXh0KHYsICZpcmxhbnMsIHBvcyk7CiB9CiAKIC8qIEVuZCBvZiByZWFkaW5nIC9wcm9jIGZpbGUgKi8KQEAgLTExNzAsMTAgKzExNTAsMTAgQEAKICAqLwogc3RhdGljIGludCBpcmxhbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKLQlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCisJaWYgKHYgPT0gJmlybGFucykKIAkJc2VxX3B1dHMoc2VxLCAiSXJMQU4gaW5zdGFuY2VzOlxuIik7CiAJZWxzZSB7Ci0JCXN0cnVjdCBpcmxhbl9jYiAqc2VsZiA9IHY7CisJCXN0cnVjdCBpcmxhbl9jYiAqc2VsZiA9IGxpc3RfZW50cnkodiwgc3RydWN0IGlybGFuX2NiLCBkZXZfbGlzdCk7CiAKIAkJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKIAkJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybiAtMTspOwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fZXRoLmMgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldGguYwppbmRleCBkMzQwMTEwLi45NjE2YzMyIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldGguYworKysgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9ldGguYwpAQCAtMzIxLDE0ICszMjEsMTUgQEAKIAkJLyogRW5hYmxlIHByb21pc2N1b3VzIG1vZGUgKi8KIAkJSVJEQV9XQVJOSU5HKCJQcm9taXNjdW91cyBtb2RlIG5vdCBpbXBsZW1lbnRlZCBieSBJckxBTiFcbiIpOwogCX0KLQllbHNlIGlmICgoZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkgfHwgZGV2LT5tY19jb3VudCA+IEhXX01BWF9BRERSUykgeworCWVsc2UgaWYgKChkZXYtPmZsYWdzICYgSUZGX0FMTE1VTFRJKSB8fAorCQkgbmV0ZGV2X21jX2NvdW50KGRldikgPiBIV19NQVhfQUREUlMpIHsKIAkJLyogRGlzYWJsZSBwcm9taXNjdW91cyBtb2RlLCB1c2Ugbm9ybWFsIG1vZGUuICovCiAJCUlSREFfREVCVUcoNCwgIiVzKCksIFNldHRpbmcgbXVsdGljYXN0IGZpbHRlclxuIiwgX19mdW5jX18gKTsKIAkJLyogaGFyZHdhcmVfc2V0X2ZpbHRlcihOVUxMKTsgKi8KIAogCQlpcmxhbl9zZXRfbXVsdGljYXN0X2ZpbHRlcihzZWxmLCBUUlVFKTsKIAl9Ci0JZWxzZSBpZiAoZGV2LT5tY19jb3VudCkgeworCWVsc2UgaWYgKCFuZXRkZXZfbWNfZW1wdHkoZGV2KSkgewogCQlJUkRBX0RFQlVHKDQsICIlcygpLCBTZXR0aW5nIG11bHRpY2FzdCBmaWx0ZXJcbiIsIF9fZnVuY19fICk7CiAJCS8qIFdhbGsgdGhlIGFkZHJlc3MgbGlzdCwgYW5kIGxvYWQgdGhlIGZpbHRlciAqLwogCQkvKiBoYXJkd2FyZV9zZXRfZmlsdGVyKGRldi0+bWNfbGlzdCk7ICovCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcm5ldGxpbmsuYyBiL25ldC9pcmRhL2lybmV0bGluay5jCmluZGV4IDQ3NmIzMDcuLjY5YjViNzUgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybmV0bGluay5jCisrKyBiL25ldC9pcmRhL2lybmV0bGluay5jCkBAIC0xMjQsNyArMTI0LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgc3RydWN0IG5sYV9wb2xpY3kgaXJkYV9ubF9wb2xpY3lbSVJEQV9OTF9BVFRSX01BWCArIDFdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGlyZGFfbmxfcG9saWN5W0lSREFfTkxfQVRUUl9NQVggKyAxXSA9IHsKIAlbSVJEQV9OTF9BVFRSX0lGTkFNRV0gPSB7IC50eXBlID0gTkxBX05VTF9TVFJJTkcsCiAJCQkJICAubGVuID0gSUZOQU1TSVotMSB9LAogCVtJUkRBX05MX0FUVFJfTU9ERV0gPSB7IC50eXBlID0gTkxBX1UzMiB9LApkaWZmIC0tZ2l0IGEvbmV0L2tleS9hZl9rZXkuYyBiL25ldC9rZXkvYWZfa2V5LmMKaW5kZXggNTM5ZjQzYi4uMzY4NzA3OCAxMDA2NDQKLS0tIGEvbmV0L2tleS9hZl9rZXkuYworKysgYi9uZXQva2V5L2FmX2tleS5jCkBAIC00MSwxMCArNDEsMTAgQEAKIAlzdHJ1Y3QgaGxpc3RfaGVhZCB0YWJsZTsKIAlhdG9taWNfdCBzb2Nrc19ucjsKIH07Ci1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocGZrZXlfdGFibGVfd2FpdCk7Ci1zdGF0aWMgREVGSU5FX1JXTE9DSyhwZmtleV90YWJsZV9sb2NrKTsKLXN0YXRpYyBhdG9taWNfdCBwZmtleV90YWJsZV91c2VycyA9IEFUT01JQ19JTklUKDApOworc3RhdGljIERFRklORV9NVVRFWChwZmtleV9tdXRleCk7CiAKKyNkZWZpbmUgRFVNTVlfTUFSSyAwCitzdGF0aWMgc3RydWN0IHhmcm1fbWFyayBkdW1teV9tYXJrID0gezAsIDB9Owogc3RydWN0IHBma2V5X3NvY2sgewogCS8qIHN0cnVjdCBzb2NrIG11c3QgYmUgdGhlIGZpcnN0IG1lbWJlciBvZiBzdHJ1Y3QgcGZrZXlfc29jayAqLwogCXN0cnVjdCBzb2NrCXNrOwpAQCAtMTA4LDUwICsxMDgsNiBAQAogCWF0b21pY19kZWMoJm5ldF9wZmtleS0+c29ja3NfbnIpOwogfQogCi1zdGF0aWMgdm9pZCBwZmtleV90YWJsZV9ncmFiKHZvaWQpCi17Ci0Jd3JpdGVfbG9ja19iaCgmcGZrZXlfdGFibGVfbG9jayk7Ci0KLQlpZiAoYXRvbWljX3JlYWQoJnBma2V5X3RhYmxlX3VzZXJzKSkgewotCQlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQotCQlhZGRfd2FpdF9xdWV1ZV9leGNsdXNpdmUoJnBma2V5X3RhYmxlX3dhaXQsICZ3YWl0KTsKLQkJZm9yKDs7KSB7Ci0JCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJSVVBUSUJMRSk7Ci0JCQlpZiAoYXRvbWljX3JlYWQoJnBma2V5X3RhYmxlX3VzZXJzKSA9PSAwKQotCQkJCWJyZWFrOwotCQkJd3JpdGVfdW5sb2NrX2JoKCZwZmtleV90YWJsZV9sb2NrKTsKLQkJCXNjaGVkdWxlKCk7Ci0JCQl3cml0ZV9sb2NrX2JoKCZwZmtleV90YWJsZV9sb2NrKTsKLQkJfQotCi0JCV9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQkJcmVtb3ZlX3dhaXRfcXVldWUoJnBma2V5X3RhYmxlX3dhaXQsICZ3YWl0KTsKLQl9Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgcGZrZXlfdGFibGVfdW5ncmFiKHZvaWQpCi17Ci0Jd3JpdGVfdW5sb2NrX2JoKCZwZmtleV90YWJsZV9sb2NrKTsKLQl3YWtlX3VwKCZwZmtleV90YWJsZV93YWl0KTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBwZmtleV9sb2NrX3RhYmxlKHZvaWQpCi17Ci0JLyogcmVhZF9sb2NrKCkgc3luY2hyb25pemVzIHVzIHRvIHBma2V5X3RhYmxlX2dyYWIgKi8KLQotCXJlYWRfbG9jaygmcGZrZXlfdGFibGVfbG9jayk7Ci0JYXRvbWljX2luYygmcGZrZXlfdGFibGVfdXNlcnMpOwotCXJlYWRfdW5sb2NrKCZwZmtleV90YWJsZV9sb2NrKTsKLX0KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBwZmtleV91bmxvY2tfdGFibGUodm9pZCkKLXsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmcGZrZXlfdGFibGVfdXNlcnMpKQotCQl3YWtlX3VwKCZwZmtleV90YWJsZV93YWl0KTsKLX0KLQotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwZmtleV9vcHM7CiAKIHN0YXRpYyB2b2lkIHBma2V5X2luc2VydChzdHJ1Y3Qgc29jayAqc2spCkBAIC0xNTksMTYgKzExNSwxNiBAQAogCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrKTsKIAlzdHJ1Y3QgbmV0bnNfcGZrZXkgKm5ldF9wZmtleSA9IG5ldF9nZW5lcmljKG5ldCwgcGZrZXlfbmV0X2lkKTsKIAotCXBma2V5X3RhYmxlX2dyYWIoKTsKLQlza19hZGRfbm9kZShzaywgJm5ldF9wZmtleS0+dGFibGUpOwotCXBma2V5X3RhYmxlX3VuZ3JhYigpOworCW11dGV4X2xvY2soJnBma2V5X211dGV4KTsKKwlza19hZGRfbm9kZV9yY3Uoc2ssICZuZXRfcGZrZXktPnRhYmxlKTsKKwltdXRleF91bmxvY2soJnBma2V5X211dGV4KTsKIH0KIAogc3RhdGljIHZvaWQgcGZrZXlfcmVtb3ZlKHN0cnVjdCBzb2NrICpzaykKIHsKLQlwZmtleV90YWJsZV9ncmFiKCk7Ci0Jc2tfZGVsX25vZGVfaW5pdChzayk7Ci0JcGZrZXlfdGFibGVfdW5ncmFiKCk7CisJbXV0ZXhfbG9jaygmcGZrZXlfbXV0ZXgpOworCXNrX2RlbF9ub2RlX2luaXRfcmN1KHNrKTsKKwltdXRleF91bmxvY2soJnBma2V5X211dGV4KTsKIH0KIAogc3RhdGljIHN0cnVjdCBwcm90byBrZXlfcHJvdG8gPSB7CkBAIC0yMjMsNiArMTc5LDggQEAKIAlzb2NrX29ycGhhbihzayk7CiAJc29jay0+c2sgPSBOVUxMOwogCXNrYl9xdWV1ZV9wdXJnZSgmc2stPnNrX3dyaXRlX3F1ZXVlKTsKKworCXN5bmNocm9uaXplX3JjdSgpOwogCXNvY2tfcHV0KHNrKTsKIAogCXJldHVybiAwOwpAQCAtMjc3LDggKzIzNSw4IEBACiAJaWYgKCFza2IpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcGZrZXlfbG9ja190YWJsZSgpOwotCXNrX2Zvcl9lYWNoKHNrLCBub2RlLCAmbmV0X3Bma2V5LT50YWJsZSkgeworCXJjdV9yZWFkX2xvY2soKTsKKwlza19mb3JfZWFjaF9yY3Uoc2ssIG5vZGUsICZuZXRfcGZrZXktPnRhYmxlKSB7CiAJCXN0cnVjdCBwZmtleV9zb2NrICpwZmsgPSBwZmtleV9zayhzayk7CiAJCWludCBlcnIyOwogCkBAIC0zMDksNyArMjY3LDcgQEAKIAkJaWYgKChicm9hZGNhc3RfZmxhZ3MgJiBCUk9BRENBU1RfUkVHSVNURVJFRCkgJiYgZXJyKQogCQkJZXJyID0gZXJyMjsKIAl9Ci0JcGZrZXlfdW5sb2NrX3RhYmxlKCk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAlpZiAob25lX3NrICE9IE5VTEwpCiAJCWVyciA9IHBma2V5X2Jyb2FkY2FzdF9vbmUoc2tiLCAmc2tiMiwgYWxsb2NhdGlvbiwgb25lX3NrKTsKQEAgLTY5MSw3ICs2NDksNyBAQAogCWlmICgheGFkZHIpCiAJCXJldHVybiBOVUxMOwogCi0JcmV0dXJuIHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgeGFkZHIsIHNhLT5zYWRiX3NhX3NwaSwgcHJvdG8sIGZhbWlseSk7CisJcmV0dXJuIHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgRFVNTVlfTUFSSywgeGFkZHIsIHNhLT5zYWRiX3NhX3NwaSwgcHJvdG8sIGZhbWlseSk7CiB9CiAKICNkZWZpbmUgUEZLRVlfQUxJR044KGEpICgxICsgKCgoYSkgLSAxKSB8ICg4IC0gMSkpKQpAQCAtMTM2MCw3ICsxMzE4LDcgQEAKIAl9CiAKIAlpZiAoaGRyLT5zYWRiX21zZ19zZXEpIHsKLQkJeCA9IHhmcm1fZmluZF9hY3FfYnlzZXEobmV0LCBoZHItPnNhZGJfbXNnX3NlcSk7CisJCXggPSB4ZnJtX2ZpbmRfYWNxX2J5c2VxKG5ldCwgRFVNTVlfTUFSSywgaGRyLT5zYWRiX21zZ19zZXEpOwogCQlpZiAoeCAmJiB4ZnJtX2FkZHJfY21wKCZ4LT5pZC5kYWRkciwgeGRhZGRyLCBmYW1pbHkpKSB7CiAJCQl4ZnJtX3N0YXRlX3B1dCh4KTsKIAkJCXggPSBOVUxMOwpAQCAtMTM2OCw3ICsxMzI2LDcgQEAKIAl9CiAKIAlpZiAoIXgpCi0JCXggPSB4ZnJtX2ZpbmRfYWNxKG5ldCwgbW9kZSwgcmVxaWQsIHByb3RvLCB4ZGFkZHIsIHhzYWRkciwgMSwgZmFtaWx5KTsKKwkJeCA9IHhmcm1fZmluZF9hY3EobmV0LCAmZHVtbXlfbWFyaywgbW9kZSwgcmVxaWQsIHByb3RvLCB4ZGFkZHIsIHhzYWRkciwgMSwgZmFtaWx5KTsKIAogCWlmICh4ID09IE5VTEwpCiAJCXJldHVybiAtRU5PRU5UOwpAQCAtMTQxNyw3ICsxMzc1LDcgQEAKIAlpZiAoaGRyLT5zYWRiX21zZ19zZXEgPT0gMCB8fCBoZHItPnNhZGJfbXNnX2Vycm5vID09IDApCiAJCXJldHVybiAwOwogCi0JeCA9IHhmcm1fZmluZF9hY3FfYnlzZXEobmV0LCBoZHItPnNhZGJfbXNnX3NlcSk7CisJeCA9IHhmcm1fZmluZF9hY3FfYnlzZXEobmV0LCBEVU1NWV9NQVJLLCBoZHItPnNhZGJfbXNnX3NlcSk7CiAJaWYgKHggPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKQEAgLTE3MTIsNiArMTY3MCwyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHVuaWNhc3RfZmx1c2hfcmVzcChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBzYWRiX21zZyAqaWhkcikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBzYWRiX21zZyAqaGRyOworCisJc2tiID0gYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3Qgc2FkYl9tc2cpICsgMTYsIEdGUF9BVE9NSUMpOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT0JVRlM7CisKKwloZHIgPSAoc3RydWN0IHNhZGJfbXNnICopIHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IHNhZGJfbXNnKSk7CisJbWVtY3B5KGhkciwgaWhkciwgc2l6ZW9mKHN0cnVjdCBzYWRiX21zZykpOworCWhkci0+c2FkYl9tc2dfZXJybm8gPSAodWludDhfdCkgMDsKKwloZHItPnNhZGJfbXNnX2xlbiA9IChzaXplb2Yoc3RydWN0IHNhZGJfbXNnKSAvIHNpemVvZih1aW50NjRfdCkpOworCisJcmV0dXJuIHBma2V5X2Jyb2FkY2FzdChza2IsIEdGUF9BVE9NSUMsIEJST0FEQ0FTVF9PTkUsIHNrLCBzb2NrX25ldChzaykpOworfQorCiBzdGF0aWMgaW50IGtleV9ub3RpZnlfc2FfZmx1c2goc3RydWN0IGttX2V2ZW50ICpjKQogewogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xNzQwLDcgKzE3MTUsNyBAQAogCXVuc2lnbmVkIHByb3RvOwogCXN0cnVjdCBrbV9ldmVudCBjOwogCXN0cnVjdCB4ZnJtX2F1ZGl0IGF1ZGl0X2luZm87Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBlcnIyOwogCiAJcHJvdG8gPSBwZmtleV9zYXR5cGUycHJvdG8oaGRyLT5zYWRiX21zZ19zYXR5cGUpOwogCWlmIChwcm90byA9PSAwKQpAQCAtMTc1MCw4ICsxNzI1LDEzIEBACiAJYXVkaXRfaW5mby5zZXNzaW9uaWQgPSBhdWRpdF9nZXRfc2Vzc2lvbmlkKGN1cnJlbnQpOwogCWF1ZGl0X2luZm8uc2VjaWQgPSAwOwogCWVyciA9IHhmcm1fc3RhdGVfZmx1c2gobmV0LCBwcm90bywgJmF1ZGl0X2luZm8pOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CisJZXJyMiA9IHVuaWNhc3RfZmx1c2hfcmVzcChzaywgaGRyKTsKKwlpZiAoZXJyIHx8IGVycjIpIHsKKwkJaWYgKGVyciA9PSAtRVNSQ0gpIC8qIGVtcHR5IHRhYmxlIC0gZ28gcXVpZXRseSAqLworCQkJZXJyID0gMDsKKwkJcmV0dXJuIGVyciA/IGVyciA6IGVycjI7CisJfQorCiAJYy5kYXRhLnByb3RvID0gcHJvdG87CiAJYy5zZXEgPSBoZHItPnNhZGJfbXNnX3NlcTsKIAljLnBpZCA9IGhkci0+c2FkYl9tc2dfcGlkOwpAQCAtMjM0Niw3ICsyMzI2LDcgQEAKIAkJCXJldHVybiBlcnI7CiAJfQogCi0JeHAgPSB4ZnJtX3BvbGljeV9ieXNlbF9jdHgobmV0LCBYRlJNX1BPTElDWV9UWVBFX01BSU4sCisJeHAgPSB4ZnJtX3BvbGljeV9ieXNlbF9jdHgobmV0LCBEVU1NWV9NQVJLLCBYRlJNX1BPTElDWV9UWVBFX01BSU4sCiAJCQkJICAgcG9sLT5zYWRiX3hfcG9saWN5X2RpciAtIDEsICZzZWwsIHBvbF9jdHgsCiAJCQkJICAgMSwgJmVycik7CiAJc2VjdXJpdHlfeGZybV9wb2xpY3lfZnJlZShwb2xfY3R4KTsKQEAgLTI1OTQsOCArMjU3NCw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJZGVsZXRlID0gKGhkci0+c2FkYl9tc2dfdHlwZSA9PSBTQURCX1hfU1BEREVMRVRFMik7Ci0JeHAgPSB4ZnJtX3BvbGljeV9ieWlkKG5ldCwgWEZSTV9QT0xJQ1lfVFlQRV9NQUlOLCBkaXIsCi0JCQkgICAgICBwb2wtPnNhZGJfeF9wb2xpY3lfaWQsIGRlbGV0ZSwgJmVycik7CisJeHAgPSB4ZnJtX3BvbGljeV9ieWlkKG5ldCwgRFVNTVlfTUFSSywgWEZSTV9QT0xJQ1lfVFlQRV9NQUlOLAorCQkJICAgICAgZGlyLCBwb2wtPnNhZGJfeF9wb2xpY3lfaWQsIGRlbGV0ZSwgJmVycik7CiAJaWYgKHhwID09IE5VTEwpCiAJCXJldHVybiAtRU5PRU5UOwogCkBAIC0yNzA2LDE0ICsyNjg2LDE5IEBACiAJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoc2spOwogCXN0cnVjdCBrbV9ldmVudCBjOwogCXN0cnVjdCB4ZnJtX2F1ZGl0IGF1ZGl0X2luZm87Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBlcnIyOwogCiAJYXVkaXRfaW5mby5sb2dpbnVpZCA9IGF1ZGl0X2dldF9sb2dpbnVpZChjdXJyZW50KTsKIAlhdWRpdF9pbmZvLnNlc3Npb25pZCA9IGF1ZGl0X2dldF9zZXNzaW9uaWQoY3VycmVudCk7CiAJYXVkaXRfaW5mby5zZWNpZCA9IDA7CiAJZXJyID0geGZybV9wb2xpY3lfZmx1c2gobmV0LCBYRlJNX1BPTElDWV9UWVBFX01BSU4sICZhdWRpdF9pbmZvKTsKLQlpZiAoZXJyKQorCWVycjIgPSB1bmljYXN0X2ZsdXNoX3Jlc3Aoc2ssIGhkcik7CisJaWYgKGVyciB8fCBlcnIyKSB7CisJCWlmIChlcnIgPT0gLUVTUkNIKSAvKiBlbXB0eSB0YWJsZSAtIG9sZCBzaWxlbnQgYmVoYXZpb3IgKi8KKwkJCXJldHVybiAwOwogCQlyZXR1cm4gZXJyOworCX0KKwogCWMuZGF0YS50eXBlID0gWEZSTV9QT0xJQ1lfVFlQRV9NQUlOOwogCWMuZXZlbnQgPSBYRlJNX01TR19GTFVTSFBPTElDWTsKIAljLnBpZCA9IGhkci0+c2FkYl9tc2dfcGlkOwpAQCAtMzAxOSwxMiArMzAwNCwxMSBAQAogc3RhdGljIHUzMiBnZXRfYWNxc2VxKHZvaWQpCiB7CiAJdTMyIHJlczsKLQlzdGF0aWMgdTMyIGFjcXNlcTsKLQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFjcXNlcV9sb2NrKTsKKwlzdGF0aWMgYXRvbWljX3QgYWNxc2VxOwogCi0Jc3Bpbl9sb2NrX2JoKCZhY3FzZXFfbG9jayk7Ci0JcmVzID0gKCsrYWNxc2VxID8gOiArK2FjcXNlcSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFjcXNlcV9sb2NrKTsKKwlkbyB7CisJCXJlcyA9IGF0b21pY19pbmNfcmV0dXJuKCZhY3FzZXEpOworCX0gd2hpbGUgKCFyZXMpOwogCXJldHVybiByZXM7CiB9CiAKQEAgLTM2NTUsOSArMzYzOSw4IEBACiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyBpbnQgcGZrZXlfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2KQogewotCXN0cnVjdCBzb2NrICpzOworCXN0cnVjdCBzb2NrICpzID0gc2tfZW50cnkodik7CiAKLQlzID0gKHN0cnVjdCBzb2NrICopdjsKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCiAJCXNlcV9wcmludGYoZiAsInNrICAgICAgIFJlZkNudCBSbWVtICAgV21lbSAgIFVzZXIgICBJbm9kZVxuIik7CiAJZWxzZQpAQCAtMzY3NiwxOSArMzY1OSw5IEBACiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KGYpOwogCXN0cnVjdCBuZXRuc19wZmtleSAqbmV0X3Bma2V5ID0gbmV0X2dlbmVyaWMobmV0LCBwZmtleV9uZXRfaWQpOwotCXN0cnVjdCBzb2NrICpzOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCWxvZmZfdCBwb3MgPSAqcHBvczsKIAotCXJlYWRfbG9jaygmcGZrZXlfdGFibGVfbG9jayk7Ci0JaWYgKHBvcyA9PSAwKQotCQlyZXR1cm4gU0VRX1NUQVJUX1RPS0VOOwotCi0Jc2tfZm9yX2VhY2gocywgbm9kZSwgJm5ldF9wZmtleS0+dGFibGUpCi0JCWlmIChwb3MtLSA9PSAxKQotCQkJcmV0dXJuIHM7Ci0KLQlyZXR1cm4gTlVMTDsKKwlyY3VfcmVhZF9sb2NrKCk7CisJcmV0dXJuIHNlcV9obGlzdF9zdGFydF9oZWFkX3JjdSgmbmV0X3Bma2V5LT50YWJsZSwgKnBwb3MpOwogfQogCiBzdGF0aWMgdm9pZCAqcGZrZXlfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpmLCB2b2lkICp2LCBsb2ZmX3QgKnBwb3MpCkBAIC0zNjk2LDE1ICszNjY5LDEyIEBACiAJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KGYpOwogCXN0cnVjdCBuZXRuc19wZmtleSAqbmV0X3Bma2V5ID0gbmV0X2dlbmVyaWMobmV0LCBwZmtleV9uZXRfaWQpOwogCi0JKysqcHBvczsKLQlyZXR1cm4gKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSA/Ci0JCXNrX2hlYWQoJm5ldF9wZmtleS0+dGFibGUpIDoKLQkJCXNrX25leHQoKHN0cnVjdCBzb2NrICopdik7CisJcmV0dXJuIHNlcV9obGlzdF9uZXh0X3JjdSh2LCAmbmV0X3Bma2V5LT50YWJsZSwgcHBvcyk7CiB9CiAKIHN0YXRpYyB2b2lkIHBma2V5X3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqZiwgdm9pZCAqdikKIHsKLQlyZWFkX3VubG9jaygmcGZrZXlfdGFibGVfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgcGZrZXlfc2VxX29wcyA9IHsKQEAgLTM3MzgsMTcgKzM3MDgsMTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcGZrZXlfZXhpdF9wcm9jKHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgcGZrZXlfZXhpdF9wcm9jKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlwcm9jX25ldF9yZW1vdmUobmV0LCAicGZrZXkiKTsKIH0KICNlbHNlCi1zdGF0aWMgaW50IF9fbmV0X2luaXQgcGZrZXlfaW5pdF9wcm9jKHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbmxpbmUgaW50IHBma2V5X2luaXRfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBma2V5X2V4aXRfcHJvYyhzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW5saW5lIHZvaWQgcGZrZXlfZXhpdF9wcm9jKHN0cnVjdCBuZXQgKm5ldCkKIHsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9hZl9sbGMuYyBiL25ldC9sbGMvYWZfbGxjLmMKaW5kZXggM2E2NjU0Ni4uZTM1ZDkwNyAxMDA2NDQKLS0tIGEvbmV0L2xsYy9hZl9sbGMuYworKysgYi9uZXQvbGxjL2FmX2xsYy5jCkBAIC00Nyw2ICs0NywxMCBAQAogI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pCiAjZW5kaWYKIAorLyogTWF5YmUgd2UnbGwgYWRkIHNvbWUgbW9yZSBpbiB0aGUgZnV0dXJlLiAqLworI2RlZmluZSBMTENfQ01TR19QS1RJTkZPCTEKKworCiAvKioKICAqCWxsY191aV9uZXh0X2xpbmtfbm8gLSByZXR1cm4gdGhlIG5leHQgdW51c2VkIGxpbmsgbnVtYmVyIGZvciBhIHNhcAogICoJQHNhcDogQWRkcmVzcyBvZiBzYXAgdG8gZ2V0IGxpbmsgbnVtYmVyIGZyb20uCkBAIC0xMzYsNiArMTQwLDcgQEAKIAkubmFtZQkgID0gIkxMQyIsCiAJLm93bmVyCSAgPSBUSElTX01PRFVMRSwKIAkub2JqX3NpemUgPSBzaXplb2Yoc3RydWN0IGxsY19zb2NrKSwKKwkuc2xhYl9mbGFncyA9IFNMQUJfREVTVFJPWV9CWV9SQ1UsCiB9OwogCiAvKioKQEAgLTE5MiwxMCArMTk3LDggQEAKIAkJbGxjLT5sYWRkci5sc2FwLCBsbGMtPmRhZGRyLmxzYXApOwogCWlmICghbGxjX3NlbmRfZGlzYyhzaykpCiAJCWxsY191aV93YWl0X2Zvcl9kaXNjKHNrLCBzay0+c2tfcmN2dGltZW8pOwotCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1pBUFBFRCkpIHsKLQkJbGxjX3NhcF9wdXQobGxjLT5zYXApOworCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1pBUFBFRCkpCiAJCWxsY19zYXBfcmVtb3ZlX3NvY2tldChsbGMtPnNhcCwgc2spOwotCX0KIAlyZWxlYXNlX3NvY2soc2spOwogCWlmIChsbGMtPmRldikKIAkJZGV2X3B1dChsbGMtPmRldik7CkBAIC0yNTUsNyArMjU4LDE0IEBACiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKSkKIAkJZ290byBvdXQ7CiAJcmMgPSAtRU5PREVWOwotCWxsYy0+ZGV2ID0gZGV2X2dldGZpcnN0Ynlod3R5cGUoJmluaXRfbmV0LCBhZGRyLT5zbGxjX2FycGhyZCk7CisJaWYgKHNrLT5za19ib3VuZF9kZXZfaWYpIHsKKwkJbGxjLT5kZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgc2stPnNrX2JvdW5kX2Rldl9pZik7CisJCWlmIChsbGMtPmRldiAmJiBhZGRyLT5zbGxjX2FycGhyZCAhPSBsbGMtPmRldi0+dHlwZSkgeworCQkJZGV2X3B1dChsbGMtPmRldik7CisJCQlsbGMtPmRldiA9IE5VTEw7CisJCX0KKwl9IGVsc2UKKwkJbGxjLT5kZXYgPSBkZXZfZ2V0Zmlyc3RieWh3dHlwZSgmaW5pdF9uZXQsIGFkZHItPnNsbGNfYXJwaHJkKTsKIAlpZiAoIWxsYy0+ZGV2KQogCQlnb3RvIG91dDsKIAlyYyA9IC1FVVNFUlM7CkBAIC0zMDYsNyArMzE2LDI1IEBACiAJCWdvdG8gb3V0OwogCXJjID0gLUVOT0RFVjsKIAlydG5sX2xvY2soKTsKLQlsbGMtPmRldiA9IGRldl9nZXRieWh3YWRkcigmaW5pdF9uZXQsIGFkZHItPnNsbGNfYXJwaHJkLCBhZGRyLT5zbGxjX21hYyk7CisJaWYgKHNrLT5za19ib3VuZF9kZXZfaWYpIHsKKwkJbGxjLT5kZXYgPSBkZXZfZ2V0X2J5X2luZGV4KCZpbml0X25ldCwgc2stPnNrX2JvdW5kX2Rldl9pZik7CisJCWlmIChsbGMtPmRldikgeworCQkJaWYgKCFhZGRyLT5zbGxjX2FycGhyZCkKKwkJCQlhZGRyLT5zbGxjX2FycGhyZCA9IGxsYy0+ZGV2LT50eXBlOworCQkJaWYgKGxsY19tYWNfbnVsbChhZGRyLT5zbGxjX21hYykpCisJCQkJbWVtY3B5KGFkZHItPnNsbGNfbWFjLCBsbGMtPmRldi0+ZGV2X2FkZHIsCisJCQkJICAgICAgIElGSFdBRERSTEVOKTsKKwkJCWlmIChhZGRyLT5zbGxjX2FycGhyZCAhPSBsbGMtPmRldi0+dHlwZSB8fAorCQkJICAgICFsbGNfbWFjX21hdGNoKGFkZHItPnNsbGNfbWFjLAorCQkJCQkgICBsbGMtPmRldi0+ZGV2X2FkZHIpKSB7CisJCQkJcmMgPSAtRUlOVkFMOworCQkJCWRldl9wdXQobGxjLT5kZXYpOworCQkJCWxsYy0+ZGV2ID0gTlVMTDsKKwkJCX0KKwkJfQorCX0gZWxzZQorCQlsbGMtPmRldiA9IGRldl9nZXRieWh3YWRkcigmaW5pdF9uZXQsIGFkZHItPnNsbGNfYXJwaHJkLAorCQkJCQkgICBhZGRyLT5zbGxjX21hYyk7CiAJcnRubF91bmxvY2soKTsKIAlpZiAoIWxsYy0+ZGV2KQogCQlnb3RvIG91dDsKQEAgLTMyMiw3ICszNTAsNiBAQAogCQlyYyA9IC1FQlVTWTsgLyogc29tZSBvdGhlciBuZXR3b3JrIGxheWVyIGlzIHVzaW5nIHRoZSBzYXAgKi8KIAkJaWYgKCFzYXApCiAJCQlnb3RvIG91dDsKLQkJbGxjX3NhcF9ob2xkKHNhcCk7CiAJfSBlbHNlIHsKIAkJc3RydWN0IGxsY19hZGRyIGxhZGRyLCBkYWRkcjsKIAkJc3RydWN0IHNvY2sgKmFzazsKQEAgLTU5MSw2ICs2MTgsMjAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyB2b2lkIGxsY19jbXNnX3JjdihzdHJ1Y3QgbXNnaGRyICptc2csIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2tiLT5zayk7CisKKwlpZiAobGxjLT5jbXNnX2ZsYWdzICYgTExDX0NNU0dfUEtUSU5GTykgeworCQlzdHJ1Y3QgbGxjX3BrdGluZm8gaW5mbzsKKworCQlpbmZvLmxwaV9pZmluZGV4ID0gbGxjX3NrKHNrYi0+c2spLT5kZXYtPmlmaW5kZXg7CisJCWxsY19wZHVfZGVjb2RlX2RzYXAoc2tiLCAmaW5mby5scGlfc2FwKTsKKwkJbGxjX3BkdV9kZWNvZGVfZGEoc2tiLCBpbmZvLmxwaV9tYWMpOworCQlwdXRfY21zZyhtc2csIFNPTF9MTEMsIExMQ19PUFRfUEtUSU5GTywgc2l6ZW9mKGluZm8pLCAmaW5mbyk7CisJfQorfQorCiAvKioKICAqCWxsY191aV9hY2NlcHQgLSBhY2NlcHQgYSBuZXcgaW5jb21pbmcgY29ubmVjdGlvbi4KICAqCUBzb2NrOiBTb2NrZXQgd2hpY2ggY29ubmVjdGlvbnMgYXJyaXZlIG9uLgpAQCAtODEyLDYgKzg1Myw4IEBACiAJCW1lbWNweSh1YWRkciwgbGxjX3VpX3NrYl9jYihza2IpLCBzaXplb2YoKnVhZGRyKSk7CiAJCW1zZy0+bXNnX25hbWVsZW4gPSBzaXplb2YoKnVhZGRyKTsKIAl9CisJaWYgKGxsY19zayhzayktPmNtc2dfZmxhZ3MpCisJCWxsY19jbXNnX3Jjdihtc2csIHNrYik7CiAJZ290byBvdXQ7CiB9CiAKQEAgLTEwMzAsNiArMTA3MywxMiBAQAogCQkJZ290byBvdXQ7CiAJCWxsYy0+cncgPSBvcHQ7CiAJCWJyZWFrOworCWNhc2UgTExDX09QVF9QS1RJTkZPOgorCQlpZiAob3B0KQorCQkJbGxjLT5jbXNnX2ZsYWdzIHw9IExMQ19DTVNHX1BLVElORk87CisJCWVsc2UKKwkJCWxsYy0+Y21zZ19mbGFncyAmPSB+TExDX0NNU0dfUEtUSU5GTzsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmMgPSAtRU5PUFJPVE9PUFQ7CiAJCWdvdG8gb3V0OwpAQCAtMTA4Myw2ICsxMTMyLDkgQEAKIAkJdmFsID0gbGxjLT5rOwkJCQlicmVhazsKIAljYXNlIExMQ19PUFRfUlhfV0lOOgogCQl2YWwgPSBsbGMtPnJ3OwkJCQlicmVhazsKKwljYXNlIExMQ19PUFRfUEtUSU5GTzoKKwkJdmFsID0gKGxsYy0+Y21zZ19mbGFncyAmIExMQ19DTVNHX1BLVElORk8pICE9IDA7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJjID0gLUVOT1BST1RPT1BUOwogCQlnb3RvIG91dDsKZGlmZiAtLWdpdCBhL25ldC9sbGMvbGxjX2Nvbm4uYyBiL25ldC9sbGMvbGxjX2Nvbm4uYwppbmRleCBjNmJhYjM5Li5hOGRkZTliIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19jb25uLmMKKysrIGIvbmV0L2xsYy9sbGNfY29ubi5jCkBAIC00NjgsNiArNDY4LDE5IEBACiAJcmV0dXJuIHJjOwogfQogCitzdGF0aWMgaW5saW5lIGJvb2wgbGxjX2VzdGFiX21hdGNoKGNvbnN0IHN0cnVjdCBsbGNfc2FwICpzYXAsCisJCQkJICAgY29uc3Qgc3RydWN0IGxsY19hZGRyICpkYWRkciwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgbGxjX2FkZHIgKmxhZGRyLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKwlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CisKKwlyZXR1cm4gbGxjLT5sYWRkci5sc2FwID09IGxhZGRyLT5sc2FwICYmCisJCWxsYy0+ZGFkZHIubHNhcCA9PSBkYWRkci0+bHNhcCAmJgorCQlsbGNfbWFjX21hdGNoKGxsYy0+bGFkZHIubWFjLCBsYWRkci0+bWFjKSAmJgorCQlsbGNfbWFjX21hdGNoKGxsYy0+ZGFkZHIubWFjLCBkYWRkci0+bWFjKTsKK30KKwogLyoqCiAgKglfX2xsY19sb29rdXBfZXN0YWJsaXNoZWQgLSBGaW5kcyBjb25uZWN0aW9uIGZvciB0aGUgcmVtb3RlL2xvY2FsIHNhcC9tYWMKICAqCUBzYXA6IFNBUApAQCAtNDg0LDIzICs0OTcsMzUgQEAKIAkJCQkJICAgICBzdHJ1Y3QgbGxjX2FkZHIgKmxhZGRyKQogewogCXN0cnVjdCBzb2NrICpyYzsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbm9kZTsKKwlpbnQgc2xvdCA9IGxsY19za19sYWRkcl9oYXNoZm4oc2FwLCBsYWRkcik7CisJc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmxhZGRyX2hiID0gJnNhcC0+c2tfbGFkZHJfaGFzaFtzbG90XTsKIAotCXJlYWRfbG9jaygmc2FwLT5za19saXN0LmxvY2spOwotCXNrX2Zvcl9lYWNoKHJjLCBub2RlLCAmc2FwLT5za19saXN0Lmxpc3QpIHsKLQkJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2socmMpOwotCi0JCWlmIChsbGMtPmxhZGRyLmxzYXAgPT0gbGFkZHItPmxzYXAgJiYKLQkJICAgIGxsYy0+ZGFkZHIubHNhcCA9PSBkYWRkci0+bHNhcCAmJgotCQkgICAgbGxjX21hY19tYXRjaChsbGMtPmxhZGRyLm1hYywgbGFkZHItPm1hYykgJiYKLQkJICAgIGxsY19tYWNfbWF0Y2gobGxjLT5kYWRkci5tYWMsIGRhZGRyLT5tYWMpKSB7Ci0JCQlzb2NrX2hvbGQocmMpOworCXJjdV9yZWFkX2xvY2soKTsKK2FnYWluOgorCXNrX251bGxzX2Zvcl9lYWNoX3JjdShyYywgbm9kZSwgbGFkZHJfaGIpIHsKKwkJaWYgKGxsY19lc3RhYl9tYXRjaChzYXAsIGRhZGRyLCBsYWRkciwgcmMpKSB7CisJCQkvKiBFeHRyYSBjaGVja3MgcmVxdWlyZWQgYnkgU0xBQl9ERVNUUk9ZX0JZX1JDVSAqLworCQkJaWYgKHVubGlrZWx5KCFhdG9taWNfaW5jX25vdF96ZXJvKCZyYy0+c2tfcmVmY250KSkpCisJCQkJZ290byBhZ2FpbjsKKwkJCWlmICh1bmxpa2VseShsbGNfc2socmMpLT5zYXAgIT0gc2FwIHx8CisJCQkJICAgICAhbGxjX2VzdGFiX21hdGNoKHNhcCwgZGFkZHIsIGxhZGRyLCByYykpKSB7CisJCQkJc29ja19wdXQocmMpOworCQkJCWNvbnRpbnVlOworCQkJfQogCQkJZ290byBmb3VuZDsKIAkJfQogCX0KIAlyYyA9IE5VTEw7CisJLyoKKwkgKiBpZiB0aGUgbnVsbHMgdmFsdWUgd2UgZ290IGF0IHRoZSBlbmQgb2YgdGhpcyBsb29rdXAgaXMKKwkgKiBub3QgdGhlIGV4cGVjdGVkIG9uZSwgd2UgbXVzdCByZXN0YXJ0IGxvb2t1cC4KKwkgKiBXZSBwcm9iYWJseSBtZXQgYW4gaXRlbSB0aGF0IHdhcyBtb3ZlZCB0byBhbm90aGVyIGNoYWluLgorCSAqLworCWlmICh1bmxpa2VseShnZXRfbnVsbHNfdmFsdWUobm9kZSkgIT0gc2xvdCkpCisJCWdvdG8gYWdhaW47CiBmb3VuZDoKLQlyZWFkX3VubG9jaygmc2FwLT5za19saXN0LmxvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCXJldHVybiByYzsKIH0KIApAQCAtNTE2LDYgKzU0MSw1MyBAQAogCXJldHVybiBzazsKIH0KIAorc3RhdGljIGlubGluZSBib29sIGxsY19saXN0ZW5lcl9tYXRjaChjb25zdCBzdHJ1Y3QgbGxjX3NhcCAqc2FwLAorCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBsbGNfYWRkciAqbGFkZHIsCisJCQkJICAgICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKKworCXJldHVybiBzay0+c2tfdHlwZSA9PSBTT0NLX1NUUkVBTSAmJiBzay0+c2tfc3RhdGUgPT0gVENQX0xJU1RFTiAmJgorCQlsbGMtPmxhZGRyLmxzYXAgPT0gbGFkZHItPmxzYXAgJiYKKwkJbGxjX21hY19tYXRjaChsbGMtPmxhZGRyLm1hYywgbGFkZHItPm1hYyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29jayAqX19sbGNfbG9va3VwX2xpc3RlbmVyKHN0cnVjdCBsbGNfc2FwICpzYXAsCisJCQkJCSAgc3RydWN0IGxsY19hZGRyICpsYWRkcikKK3sKKwlzdHJ1Y3Qgc29jayAqcmM7CisJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm5vZGU7CisJaW50IHNsb3QgPSBsbGNfc2tfbGFkZHJfaGFzaGZuKHNhcCwgbGFkZHIpOworCXN0cnVjdCBobGlzdF9udWxsc19oZWFkICpsYWRkcl9oYiA9ICZzYXAtPnNrX2xhZGRyX2hhc2hbc2xvdF07CisKKwlyY3VfcmVhZF9sb2NrKCk7CithZ2FpbjoKKwlza19udWxsc19mb3JfZWFjaF9yY3UocmMsIG5vZGUsIGxhZGRyX2hiKSB7CisJCWlmIChsbGNfbGlzdGVuZXJfbWF0Y2goc2FwLCBsYWRkciwgcmMpKSB7CisJCQkvKiBFeHRyYSBjaGVja3MgcmVxdWlyZWQgYnkgU0xBQl9ERVNUUk9ZX0JZX1JDVSAqLworCQkJaWYgKHVubGlrZWx5KCFhdG9taWNfaW5jX25vdF96ZXJvKCZyYy0+c2tfcmVmY250KSkpCisJCQkJZ290byBhZ2FpbjsKKwkJCWlmICh1bmxpa2VseShsbGNfc2socmMpLT5zYXAgIT0gc2FwIHx8CisJCQkJICAgICAhbGxjX2xpc3RlbmVyX21hdGNoKHNhcCwgbGFkZHIsIHJjKSkpIHsKKwkJCQlzb2NrX3B1dChyYyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlnb3RvIGZvdW5kOworCQl9CisJfQorCXJjID0gTlVMTDsKKwkvKgorCSAqIGlmIHRoZSBudWxscyB2YWx1ZSB3ZSBnb3QgYXQgdGhlIGVuZCBvZiB0aGlzIGxvb2t1cCBpcworCSAqIG5vdCB0aGUgZXhwZWN0ZWQgb25lLCB3ZSBtdXN0IHJlc3RhcnQgbG9va3VwLgorCSAqIFdlIHByb2JhYmx5IG1ldCBhbiBpdGVtIHRoYXQgd2FzIG1vdmVkIHRvIGFub3RoZXIgY2hhaW4uCisJICovCisJaWYgKHVubGlrZWx5KGdldF9udWxsc192YWx1ZShub2RlKSAhPSBzbG90KSkKKwkJZ290byBhZ2FpbjsKK2ZvdW5kOgorCXJjdV9yZWFkX3VubG9jaygpOworCXJldHVybiByYzsKK30KKwogLyoqCiAgKglsbGNfbG9va3VwX2xpc3RlbmVyIC0gRmluZHMgbGlzdGVuZXIgZm9yIGxvY2FsIE1BQyArIFNBUAogICoJQHNhcDogU0FQCkBAIC01MjksMjQgKzYwMSwxMiBAQAogc3RhdGljIHN0cnVjdCBzb2NrICpsbGNfbG9va3VwX2xpc3RlbmVyKHN0cnVjdCBsbGNfc2FwICpzYXAsCiAJCQkJCXN0cnVjdCBsbGNfYWRkciAqbGFkZHIpCiB7Ci0Jc3RydWN0IHNvY2sgKnJjOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0YXRpYyBzdHJ1Y3QgbGxjX2FkZHIgbnVsbF9hZGRyOworCXN0cnVjdCBzb2NrICpyYyA9IF9fbGxjX2xvb2t1cF9saXN0ZW5lcihzYXAsIGxhZGRyKTsKIAotCXJlYWRfbG9jaygmc2FwLT5za19saXN0LmxvY2spOwotCXNrX2Zvcl9lYWNoKHJjLCBub2RlLCAmc2FwLT5za19saXN0Lmxpc3QpIHsKLQkJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2socmMpOworCWlmICghcmMpCisJCXJjID0gX19sbGNfbG9va3VwX2xpc3RlbmVyKHNhcCwgJm51bGxfYWRkcik7CiAKLQkJaWYgKHJjLT5za190eXBlID09IFNPQ0tfU1RSRUFNICYmIHJjLT5za19zdGF0ZSA9PSBUQ1BfTElTVEVOICYmCi0JCSAgICBsbGMtPmxhZGRyLmxzYXAgPT0gbGFkZHItPmxzYXAgJiYKLQkJICAgIChsbGNfbWFjX21hdGNoKGxsYy0+bGFkZHIubWFjLCBsYWRkci0+bWFjKSB8fAotCQkgICAgIGxsY19tYWNfbnVsbChsbGMtPmxhZGRyLm1hYykpKSB7Ci0JCQlzb2NrX2hvbGQocmMpOwotCQkJZ290byBmb3VuZDsKLQkJfQotCX0KLQlyYyA9IE5VTEw7Ci1mb3VuZDoKLQlyZWFkX3VubG9jaygmc2FwLT5za19saXN0LmxvY2spOwogCXJldHVybiByYzsKIH0KIApAQCAtNjQ3LDE1ICs3MDcsMjIgQEAKICAqCUBzYXA6IFNBUAogICoJQHNrOiBzb2NrZXQKICAqCi0gKglUaGlzIGZ1bmN0aW9uIGFkZHMgYSBzb2NrZXQgdG8gc2tfbGlzdCBvZiBhIFNBUC4KKyAqCVRoaXMgZnVuY3Rpb24gYWRkcyBhIHNvY2tldCB0byB0aGUgaGFzaCB0YWJsZXMgb2YgYSBTQVAuCiAgKi8KIHZvaWQgbGxjX3NhcF9hZGRfc29ja2V0KHN0cnVjdCBsbGNfc2FwICpzYXAsIHN0cnVjdCBzb2NrICpzaykKIHsKKwlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CisJc3RydWN0IGhsaXN0X2hlYWQgKmRldl9oYiA9IGxsY19za19kZXZfaGFzaChzYXAsIGxsYy0+ZGV2LT5pZmluZGV4KTsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqbGFkZHJfaGIgPSBsbGNfc2tfbGFkZHJfaGFzaChzYXAsICZsbGMtPmxhZGRyKTsKKwogCWxsY19zYXBfaG9sZChzYXApOwotCXdyaXRlX2xvY2tfYmgoJnNhcC0+c2tfbGlzdC5sb2NrKTsKIAlsbGNfc2soc2spLT5zYXAgPSBzYXA7Ci0Jc2tfYWRkX25vZGUoc2ssICZzYXAtPnNrX2xpc3QubGlzdCk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZzYXAtPnNrX2xpc3QubG9jayk7CisKKwlzcGluX2xvY2tfYmgoJnNhcC0+c2tfbG9jayk7CisJc2FwLT5za19jb3VudCsrOworCXNrX251bGxzX2FkZF9ub2RlX3JjdShzaywgbGFkZHJfaGIpOworCWhsaXN0X2FkZF9oZWFkKCZsbGMtPmRldl9oYXNoX25vZGUsIGRldl9oYik7CisJc3Bpbl91bmxvY2tfYmgoJnNhcC0+c2tfbG9jayk7CiB9CiAKIC8qKgpAQCAtNjYzLDE0ICs3MzAsMTggQEAKICAqCUBzYXA6IFNBUAogICoJQHNrOiBzb2NrZXQKICAqCi0gKglUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYSBjb25uZWN0aW9uIGZyb20gc2tfbGlzdC5saXN0IG9mIGEgU0FQIGlmCisgKglUaGlzIGZ1bmN0aW9uIHJlbW92ZXMgYSBjb25uZWN0aW9uIGZyb20gdGhlIGhhc2ggdGFibGVzIG9mIGEgU0FQIGlmCiAgKgl0aGUgY29ubmVjdGlvbiB3YXMgaW4gdGhpcyBsaXN0LgogICovCiB2b2lkIGxsY19zYXBfcmVtb3ZlX3NvY2tldChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc29jayAqc2spCiB7Ci0Jd3JpdGVfbG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOwotCXNrX2RlbF9ub2RlX2luaXQoc2spOwotCXdyaXRlX3VubG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOworCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKKworCXNwaW5fbG9ja19iaCgmc2FwLT5za19sb2NrKTsKKwlza19udWxsc19kZWxfbm9kZV9pbml0X3JjdShzayk7CisJaGxpc3RfZGVsKCZsbGMtPmRldl9oYXNoX25vZGUpOworCXNhcC0+c2tfY291bnQtLTsKKwlzcGluX3VubG9ja19iaCgmc2FwLT5za19sb2NrKTsKIAlsbGNfc2FwX3B1dChzYXApOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19jb3JlLmMgYi9uZXQvbGxjL2xsY19jb3JlLmMKaW5kZXggZmY0YzBhYi4uNzgxNjdlOCAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfY29yZS5jCisrKyBiL25ldC9sbGMvbGxjX2NvcmUuYwpAQCAtMjMsNyArMjMsNyBAQAogI2luY2x1ZGUgPG5ldC9sbGMuaD4KIAogTElTVF9IRUFEKGxsY19zYXBfbGlzdCk7Ci1ERUZJTkVfUldMT0NLKGxsY19zYXBfbGlzdF9sb2NrKTsKK0RFRklORV9TUElOTE9DSyhsbGNfc2FwX2xpc3RfbG9jayk7CiAKIC8qKgogICoJbGxjX3NhcF9hbGxvYyAtIGFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgc2FwLgpAQCAtMzMsNDAgKzMzLDE5IEBACiBzdGF0aWMgc3RydWN0IGxsY19zYXAgKmxsY19zYXBfYWxsb2Modm9pZCkKIHsKIAlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0ga3phbGxvYyhzaXplb2YoKnNhcCksIEdGUF9BVE9NSUMpOworCWludCBpOwogCiAJaWYgKHNhcCkgewogCQkvKiBzYXAtPmxhZGRyLm1hYyAtIGxlYXZlIGFzIGEgbnVsbCwgaXQncyBmaWxsZWQgYnkgYmluZCAqLwogCQlzYXAtPnN0YXRlID0gTExDX1NBUF9TVEFURV9BQ1RJVkU7Ci0JCXJ3bG9ja19pbml0KCZzYXAtPnNrX2xpc3QubG9jayk7CisJCXNwaW5fbG9ja19pbml0KCZzYXAtPnNrX2xvY2spOworCQlmb3IgKGkgPSAwOyBpIDwgTExDX1NLX0xBRERSX0hBU0hfRU5UUklFUzsgaSsrKQorCQkJSU5JVF9ITElTVF9OVUxMU19IRUFEKCZzYXAtPnNrX2xhZGRyX2hhc2hbaV0sIGkpOwogCQlhdG9taWNfc2V0KCZzYXAtPnJlZmNudCwgMSk7CiAJfQogCXJldHVybiBzYXA7CiB9CiAKLS8qKgotICoJbGxjX2FkZF9zYXAgLSBhZGQgc2FwIHRvIHN0YXRpb24gbGlzdAotICoJQHNhcDogQWRkcmVzcyBvZiB0aGUgc2FwCi0gKgotICoJQWRkcyBhIHNhcCB0byB0aGUgTExDJ3Mgc3RhdGlvbiBzYXAgbGlzdC4KLSAqLwotc3RhdGljIHZvaWQgbGxjX2FkZF9zYXAoc3RydWN0IGxsY19zYXAgKnNhcCkKLXsKLQlsaXN0X2FkZF90YWlsKCZzYXAtPm5vZGUsICZsbGNfc2FwX2xpc3QpOwotfQotCi0vKioKLSAqCWxsY19kZWxfc2FwIC0gZGVsIHNhcCBmcm9tIHN0YXRpb24gbGlzdAotICoJQHNhcDogQWRkcmVzcyBvZiB0aGUgc2FwCi0gKgotICoJUmVtb3ZlcyBhIHNhcCB0byB0aGUgTExDJ3Mgc3RhdGlvbiBzYXAgbGlzdC4KLSAqLwotc3RhdGljIHZvaWQgbGxjX2RlbF9zYXAoc3RydWN0IGxsY19zYXAgKnNhcCkKLXsKLQl3cml0ZV9sb2NrX2JoKCZsbGNfc2FwX2xpc3RfbG9jayk7Ci0JbGlzdF9kZWwoJnNhcC0+bm9kZSk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZsbGNfc2FwX2xpc3RfbG9jayk7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgbGxjX3NhcCAqX19sbGNfc2FwX2ZpbmQodW5zaWduZWQgY2hhciBzYXBfdmFsdWUpCiB7CiAJc3RydWN0IGxsY19zYXAqIHNhcDsKQEAgLTkwLDEzICs2OSwxMyBAQAogICovCiBzdHJ1Y3QgbGxjX3NhcCAqbGxjX3NhcF9maW5kKHVuc2lnbmVkIGNoYXIgc2FwX3ZhbHVlKQogewotCXN0cnVjdCBsbGNfc2FwKiBzYXA7CisJc3RydWN0IGxsY19zYXAgKnNhcDsKIAotCXJlYWRfbG9ja19iaCgmbGxjX3NhcF9saXN0X2xvY2spOworCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAlzYXAgPSBfX2xsY19zYXBfZmluZChzYXBfdmFsdWUpOwogCWlmIChzYXApCiAJCWxsY19zYXBfaG9sZChzYXApOwotCXJlYWRfdW5sb2NrX2JoKCZsbGNfc2FwX2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJcmV0dXJuIHNhcDsKIH0KIApAQCAtMTE3LDcgKzk2LDcgQEAKIHsKIAlzdHJ1Y3QgbGxjX3NhcCAqc2FwID0gTlVMTDsKIAotCXdyaXRlX2xvY2tfYmgoJmxsY19zYXBfbGlzdF9sb2NrKTsKKwlzcGluX2xvY2tfYmgoJmxsY19zYXBfbGlzdF9sb2NrKTsKIAlpZiAoX19sbGNfc2FwX2ZpbmQobHNhcCkpIC8qIFNBUCBhbHJlYWR5IGV4aXN0cyAqLwogCQlnb3RvIG91dDsKIAlzYXAgPSBsbGNfc2FwX2FsbG9jKCk7CkBAIC0xMjUsOSArMTA0LDkgQEAKIAkJZ290byBvdXQ7CiAJc2FwLT5sYWRkci5sc2FwID0gbHNhcDsKIAlzYXAtPnJjdl9mdW5jCT0gZnVuYzsKLQlsbGNfYWRkX3NhcChzYXApOworCWxpc3RfYWRkX3RhaWxfcmN1KCZzYXAtPm5vZGUsICZsbGNfc2FwX2xpc3QpOwogb3V0OgotCXdyaXRlX3VubG9ja19iaCgmbGxjX3NhcF9saXN0X2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZsbGNfc2FwX2xpc3RfbG9jayk7CiAJcmV0dXJuIHNhcDsKIH0KIApAQCAtMTQyLDggKzEyMSwxNCBAQAogICovCiB2b2lkIGxsY19zYXBfY2xvc2Uoc3RydWN0IGxsY19zYXAgKnNhcCkKIHsKLQlXQVJOX09OKCFobGlzdF9lbXB0eSgmc2FwLT5za19saXN0Lmxpc3QpKTsKLQlsbGNfZGVsX3NhcChzYXApOworCVdBUk5fT04oc2FwLT5za19jb3VudCk7CisKKwlzcGluX2xvY2tfYmgoJmxsY19zYXBfbGlzdF9sb2NrKTsKKwlsaXN0X2RlbF9yY3UoJnNhcC0+bm9kZSk7CisJc3Bpbl91bmxvY2tfYmgoJmxsY19zYXBfbGlzdF9sb2NrKTsKKworCXN5bmNocm9uaXplX3JjdSgpOworCiAJa2ZyZWUoc2FwKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfb3V0cHV0LmMgYi9uZXQvbGxjL2xsY19vdXRwdXQuYwppbmRleCA3NTRmNGZlLi5iMzhhMTA3IDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19vdXRwdXQuYworKysgYi9uZXQvbGxjL2xsY19vdXRwdXQuYwpAQCAtMzMsNDggKzMzLDE5IEBACiBpbnQgbGxjX21hY19oZHJfaW5pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNhLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYSkKIHsKLQlpbnQgcmMgPSAwOworCWludCByYyA9IC1FSU5WQUw7CiAKIAlzd2l0Y2ggKHNrYi0+ZGV2LT50eXBlKSB7Ci0jaWZkZWYgQ09ORklHX1RSCi0JY2FzZSBBUlBIUkRfSUVFRTgwMl9UUjogewotCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7Ci0JCXN0cnVjdCB0cmhfaGRyICp0cmg7Ci0KLQkJc2tiX3B1c2goc2tiLCBzaXplb2YoKnRyaCkpOwotCQlza2JfcmVzZXRfbWFjX2hlYWRlcihza2IpOwotCQl0cmggPSB0cl9oZHIoc2tiKTsKLQkJdHJoLT5hYyA9IEFDOwotCQl0cmgtPmZjID0gTExDX0ZSQU1FOwotCQlpZiAoc2EpCi0JCQltZW1jcHkodHJoLT5zYWRkciwgc2EsIGRldi0+YWRkcl9sZW4pOwotCQllbHNlCi0JCQltZW1zZXQodHJoLT5zYWRkciwgMCwgZGV2LT5hZGRyX2xlbik7Ci0JCWlmIChkYSkgewotCQkJbWVtY3B5KHRyaC0+ZGFkZHIsIGRhLCBkZXYtPmFkZHJfbGVuKTsKLQkJCXRyX3NvdXJjZV9yb3V0ZShza2IsIHRyaCwgZGV2KTsKLQkJCXNrYl9yZXNldF9tYWNfaGVhZGVyKHNrYik7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotI2VuZGlmCisJY2FzZSBBUlBIUkRfSUVFRTgwMl9UUjoKIAljYXNlIEFSUEhSRF9FVEhFUjoKLQljYXNlIEFSUEhSRF9MT09QQkFDSzogewotCQl1bnNpZ25lZCBzaG9ydCBsZW4gPSBza2ItPmxlbjsKLQkJc3RydWN0IGV0aGhkciAqZXRoOwotCi0JCXNrYl9wdXNoKHNrYiwgc2l6ZW9mKCpldGgpKTsKLQkJc2tiX3Jlc2V0X21hY19oZWFkZXIoc2tiKTsKLQkJZXRoID0gZXRoX2hkcihza2IpOwotCQlldGgtPmhfcHJvdG8gPSBodG9ucyhsZW4pOwotCQltZW1jcHkoZXRoLT5oX2Rlc3QsIGRhLCBFVEhfQUxFTik7Ci0JCW1lbWNweShldGgtPmhfc291cmNlLCBzYSwgRVRIX0FMRU4pOworCWNhc2UgQVJQSFJEX0xPT1BCQUNLOgorCQlyYyA9IGRldl9oYXJkX2hlYWRlcihza2IsIHNrYi0+ZGV2LCBFVEhfUF84MDJfMiwgZGEsIHNhLAorCQkJCSAgICAgc2tiLT5sZW4pOworCQlpZiAocmMgPiAwKQorCQkJcmMgPSAwOwogCQlicmVhazsKLQl9CiAJZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZGV2aWNlIHR5cGUgbm90IHN1cHBvcnRlZDogJWRcbiIsCi0JCSAgICAgICBza2ItPmRldi0+dHlwZSk7Ci0JCXJjID0gLUVJTlZBTDsKKwkJV0FSTigxLCAiZGV2aWNlIHR5cGUgbm90IHN1cHBvcnRlZDogJWRcbiIsIHNrYi0+ZGV2LT50eXBlKTsKIAl9CiAJcmV0dXJuIHJjOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfcHJvYy5jIGIvbmV0L2xsYy9sbGNfcHJvYy5jCmluZGV4IGJlNDdhYzQyNy4uN2FmMWZmMiAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfcHJvYy5jCisrKyBiL25ldC9sbGMvbGxjX3Byb2MuYwpAQCAtMzIsMjEgKzMyLDIzIEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqbGxjX2dldF9za19pZHgobG9mZl90IHBvcykKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpzYXBfZW50cnk7CiAJc3RydWN0IGxsY19zYXAgKnNhcDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAlzdHJ1Y3Qgc29jayAqc2sgPSBOVUxMOworCWludCBpOwogCi0JbGlzdF9mb3JfZWFjaChzYXBfZW50cnksICZsbGNfc2FwX2xpc3QpIHsKLQkJc2FwID0gbGlzdF9lbnRyeShzYXBfZW50cnksIHN0cnVjdCBsbGNfc2FwLCBub2RlKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzYXAsICZsbGNfc2FwX2xpc3QsIG5vZGUpIHsKKwkJc3Bpbl9sb2NrX2JoKCZzYXAtPnNrX2xvY2spOworCQlmb3IgKGkgPSAwOyBpIDwgTExDX1NLX0xBRERSX0hBU0hfRU5UUklFUzsgaSsrKSB7CisJCQlzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCA9ICZzYXAtPnNrX2xhZGRyX2hhc2hbaV07CisJCQlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbm9kZTsKIAotCQlyZWFkX2xvY2tfYmgoJnNhcC0+c2tfbGlzdC5sb2NrKTsKLQkJc2tfZm9yX2VhY2goc2ssIG5vZGUsICZzYXAtPnNrX2xpc3QubGlzdCkgewotCQkJaWYgKCFwb3MpCi0JCQkJZ290byBmb3VuZDsKLQkJCS0tcG9zOworCQkJc2tfbnVsbHNfZm9yX2VhY2goc2ssIG5vZGUsIGhlYWQpIHsKKwkJCQlpZiAoIXBvcykKKwkJCQkJZ290byBmb3VuZDsgLyoga2VlcCB0aGUgbG9jayAqLworCQkJCS0tcG9zOworCQkJfQogCQl9Ci0JCXJlYWRfdW5sb2NrX2JoKCZzYXAtPnNrX2xpc3QubG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZzYXAtPnNrX2xvY2spOwogCX0KIAlzayA9IE5VTEw7CiBmb3VuZDoKQEAgLTU3LDEwICs1OSwyMyBAQAogewogCWxvZmZfdCBsID0gKnBvczsKIAotCXJlYWRfbG9ja19iaCgmbGxjX3NhcF9saXN0X2xvY2spOworCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAlyZXR1cm4gbCA/IGxsY19nZXRfc2tfaWR4KC0tbCkgOiBTRVFfU1RBUlRfVE9LRU47CiB9CiAKK3N0YXRpYyBzdHJ1Y3Qgc29jayAqbGFkZHJfaGFzaF9uZXh0KHN0cnVjdCBsbGNfc2FwICpzYXAsIGludCBidWNrZXQpCit7CisJc3RydWN0IGhsaXN0X251bGxzX25vZGUgKm5vZGU7CisJc3RydWN0IHNvY2sgKnNrID0gTlVMTDsKKworCXdoaWxlICgrK2J1Y2tldCA8IExMQ19TS19MQUREUl9IQVNIX0VOVFJJRVMpCisJCXNrX251bGxzX2Zvcl9lYWNoKHNrLCBub2RlLCAmc2FwLT5za19sYWRkcl9oYXNoW2J1Y2tldF0pCisJCQlnb3RvIG91dDsKKworb3V0OgorCXJldHVybiBzazsKK30KKwogc3RhdGljIHZvaWQgKmxsY19zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7CiAJc3RydWN0IHNvY2sqIHNrLCAqbmV4dDsKQEAgLTczLDI1ICs4OCwyMyBAQAogCQlnb3RvIG91dDsKIAl9CiAJc2sgPSB2OwotCW5leHQgPSBza19uZXh0KHNrKTsKKwluZXh0ID0gc2tfbnVsbHNfbmV4dChzayk7CiAJaWYgKG5leHQpIHsKIAkJc2sgPSBuZXh0OwogCQlnb3RvIG91dDsKIAl9CiAJbGxjID0gbGxjX3NrKHNrKTsKIAlzYXAgPSBsbGMtPnNhcDsKLQlyZWFkX3VubG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOwotCXNrID0gTlVMTDsKLQlmb3IgKDs7KSB7Ci0JCWlmIChzYXAtPm5vZGUubmV4dCA9PSAmbGxjX3NhcF9saXN0KQotCQkJYnJlYWs7Ci0JCXNhcCA9IGxpc3RfZW50cnkoc2FwLT5ub2RlLm5leHQsIHN0cnVjdCBsbGNfc2FwLCBub2RlKTsKLQkJcmVhZF9sb2NrX2JoKCZzYXAtPnNrX2xpc3QubG9jayk7Ci0JCWlmICghaGxpc3RfZW1wdHkoJnNhcC0+c2tfbGlzdC5saXN0KSkgewotCQkJc2sgPSBza19oZWFkKCZzYXAtPnNrX2xpc3QubGlzdCk7Ci0JCQlicmVhazsKLQkJfQotCQlyZWFkX3VubG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOworCXNrID0gbGFkZHJfaGFzaF9uZXh0KHNhcCwgbGxjX3NrX2xhZGRyX2hhc2hmbihzYXAsICZsbGMtPmxhZGRyKSk7CisJaWYgKHNrKQorCQlnb3RvIG91dDsKKwlzcGluX3VubG9ja19iaCgmc2FwLT5za19sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlX3JjdShzYXAsICZsbGNfc2FwX2xpc3QsIG5vZGUpIHsKKwkJc3Bpbl9sb2NrX2JoKCZzYXAtPnNrX2xvY2spOworCQlzayA9IGxhZGRyX2hhc2hfbmV4dChzYXAsIC0xKTsKKwkJaWYgKHNrKQorCQkJYnJlYWs7IC8qIGtlZXAgdGhlIGxvY2sgKi8KKwkJc3Bpbl91bmxvY2tfYmgoJnNhcC0+c2tfbG9jayk7CiAJfQogb3V0OgogCXJldHVybiBzazsKQEAgLTEwNCw5ICsxMTcsOSBAQAogCQlzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CiAJCXN0cnVjdCBsbGNfc2FwICpzYXAgPSBsbGMtPnNhcDsKIAotCQlyZWFkX3VubG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOworCQlzcGluX3VubG9ja19iaCgmc2FwLT5za19sb2NrKTsKIAl9Ci0JcmVhZF91bmxvY2tfYmgoJmxsY19zYXBfbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIH0KIAogc3RhdGljIGludCBsbGNfc2VxX3NvY2tldF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpkaWZmIC0tZ2l0IGEvbmV0L2xsYy9sbGNfc2FwLmMgYi9uZXQvbGxjL2xsY19zYXAuYwppbmRleCAwMDhkZTFmLi5hZDZlNmUxIDEwMDY0NAotLS0gYS9uZXQvbGxjL2xsY19zYXAuYworKysgYi9uZXQvbGxjL2xsY19zYXAuYwpAQCAtMjk3LDYgKzI5NywxNyBAQAogCWxsY19zYXBfc3RhdGVfcHJvY2VzcyhzYXAsIHNrYik7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBsbGNfZGdyYW1fbWF0Y2goY29uc3Qgc3RydWN0IGxsY19zYXAgKnNhcCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgbGxjX2FkZHIgKmxhZGRyLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBzb2NrICpzaykKK3sKKyAgICAgc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2soc2spOworCisgICAgIHJldHVybiBzay0+c2tfdHlwZSA9PSBTT0NLX0RHUkFNICYmCisJICBsbGMtPmxhZGRyLmxzYXAgPT0gbGFkZHItPmxzYXAgJiYKKwkgIGxsY19tYWNfbWF0Y2gobGxjLT5sYWRkci5tYWMsIGxhZGRyLT5tYWMpOworfQorCiAvKioKICAqCWxsY19sb29rdXBfZGdyYW0gLSBGaW5kcyBkZ3JhbSBzb2NrZXQgZm9yIHRoZSBsb2NhbCBzYXAvbWFjCiAgKglAc2FwOiBTQVAKQEAgLTMwOSwyNSArMzIwLDY4IEBACiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgbGxjX2FkZHIgKmxhZGRyKQogewogCXN0cnVjdCBzb2NrICpyYzsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbm9kZTsKKwlpbnQgc2xvdCA9IGxsY19za19sYWRkcl9oYXNoZm4oc2FwLCBsYWRkcik7CisJc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmxhZGRyX2hiID0gJnNhcC0+c2tfbGFkZHJfaGFzaFtzbG90XTsKIAotCXJlYWRfbG9ja19iaCgmc2FwLT5za19saXN0LmxvY2spOwotCXNrX2Zvcl9lYWNoKHJjLCBub2RlLCAmc2FwLT5za19saXN0Lmxpc3QpIHsKLQkJc3RydWN0IGxsY19zb2NrICpsbGMgPSBsbGNfc2socmMpOwotCi0JCWlmIChyYy0+c2tfdHlwZSA9PSBTT0NLX0RHUkFNICYmCi0JCSAgICBsbGMtPmxhZGRyLmxzYXAgPT0gbGFkZHItPmxzYXAgJiYKLQkJICAgIGxsY19tYWNfbWF0Y2gobGxjLT5sYWRkci5tYWMsIGxhZGRyLT5tYWMpKSB7Ci0JCQlzb2NrX2hvbGQocmMpOworCXJjdV9yZWFkX2xvY2tfYmgoKTsKK2FnYWluOgorCXNrX251bGxzX2Zvcl9lYWNoX3JjdShyYywgbm9kZSwgbGFkZHJfaGIpIHsKKwkJaWYgKGxsY19kZ3JhbV9tYXRjaChzYXAsIGxhZGRyLCByYykpIHsKKwkJCS8qIEV4dHJhIGNoZWNrcyByZXF1aXJlZCBieSBTTEFCX0RFU1RST1lfQllfUkNVICovCisJCQlpZiAodW5saWtlbHkoIWF0b21pY19pbmNfbm90X3plcm8oJnJjLT5za19yZWZjbnQpKSkKKwkJCQlnb3RvIGFnYWluOworCQkJaWYgKHVubGlrZWx5KGxsY19zayhyYyktPnNhcCAhPSBzYXAgfHwKKwkJCQkgICAgICFsbGNfZGdyYW1fbWF0Y2goc2FwLCBsYWRkciwgcmMpKSkgeworCQkJCXNvY2tfcHV0KHJjKTsKKwkJCQljb250aW51ZTsKKwkJCX0KIAkJCWdvdG8gZm91bmQ7CiAJCX0KIAl9CiAJcmMgPSBOVUxMOworCS8qCisJICogaWYgdGhlIG51bGxzIHZhbHVlIHdlIGdvdCBhdCB0aGUgZW5kIG9mIHRoaXMgbG9va3VwIGlzCisJICogbm90IHRoZSBleHBlY3RlZCBvbmUsIHdlIG11c3QgcmVzdGFydCBsb29rdXAuCisJICogV2UgcHJvYmFibHkgbWV0IGFuIGl0ZW0gdGhhdCB3YXMgbW92ZWQgdG8gYW5vdGhlciBjaGFpbi4KKwkgKi8KKwlpZiAodW5saWtlbHkoZ2V0X251bGxzX3ZhbHVlKG5vZGUpICE9IHNsb3QpKQorCQlnb3RvIGFnYWluOwogZm91bmQ6Ci0JcmVhZF91bmxvY2tfYmgoJnNhcC0+c2tfbGlzdC5sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIAlyZXR1cm4gcmM7CiB9CiAKK3N0YXRpYyBpbmxpbmUgYm9vbCBsbGNfbWNhc3RfbWF0Y2goY29uc3Qgc3RydWN0IGxsY19zYXAgKnNhcCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgbGxjX2FkZHIgKmxhZGRyLAorCQkJCSAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgY29uc3Qgc3RydWN0IHNvY2sgKnNrKQoreworICAgICBzdHJ1Y3QgbGxjX3NvY2sgKmxsYyA9IGxsY19zayhzayk7CisKKyAgICAgcmV0dXJuIHNrLT5za190eXBlID09IFNPQ0tfREdSQU0gJiYKKwkgIGxsYy0+bGFkZHIubHNhcCA9PSBsYWRkci0+bHNhcCAmJgorCSAgbGxjLT5kZXYgPT0gc2tiLT5kZXY7Cit9CisKK3N0YXRpYyB2b2lkIGxsY19kb19tY2FzdChzdHJ1Y3QgbGxjX3NhcCAqc2FwLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJIHN0cnVjdCBzb2NrICoqc3RhY2ssIGludCBjb3VudCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CisJCXNrYjEgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFza2IxKSB7CisJCQlzb2NrX3B1dChzdGFja1tpXSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWxsY19zYXBfcmN2KHNhcCwgc2tiMSwgc3RhY2tbaV0pOworCQlzb2NrX3B1dChzdGFja1tpXSk7CisJfQorfQorCiAvKioKICAqIAlsbGNfc2FwX21jYXN0IC0gRGVsaXZlciBtdWx0aWNhc3QgUERVJ3MgdG8gYWxsIG1hdGNoaW5nIGRhdGFncmFtIHNvY2tldHMuCiAgKglAc2FwOiBTQVAKQEAgLTM0MCwzMiArMzk0LDMxIEBACiAJCQkgIGNvbnN0IHN0cnVjdCBsbGNfYWRkciAqbGFkZHIsCiAJCQkgIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IHNvY2sgKnNrOworCWludCBpID0gMCwgY291bnQgPSAyNTYgLyBzaXplb2Yoc3RydWN0IHNvY2sgKik7CisJc3RydWN0IHNvY2sgKnNrLCAqc3RhY2tbY291bnRdOwogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBsbGNfc29jayAqbGxjOworCXN0cnVjdCBobGlzdF9oZWFkICpkZXZfaGIgPSBsbGNfc2tfZGV2X2hhc2goc2FwLCBza2ItPmRldi0+aWZpbmRleCk7CiAKLQlyZWFkX2xvY2tfYmgoJnNhcC0+c2tfbGlzdC5sb2NrKTsKLQlza19mb3JfZWFjaChzaywgbm9kZSwgJnNhcC0+c2tfbGlzdC5saXN0KSB7Ci0JCXN0cnVjdCBsbGNfc29jayAqbGxjID0gbGxjX3NrKHNrKTsKLQkJc3RydWN0IHNrX2J1ZmYgKnNrYjE7CisJc3Bpbl9sb2NrX2JoKCZzYXAtPnNrX2xvY2spOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGxsYywgbm9kZSwgZGV2X2hiLCBkZXZfaGFzaF9ub2RlKSB7CiAKLQkJaWYgKHNrLT5za190eXBlICE9IFNPQ0tfREdSQU0pCisJCXNrID0gJmxsYy0+c2s7CisKKwkJaWYgKCFsbGNfbWNhc3RfbWF0Y2goc2FwLCBsYWRkciwgc2tiLCBzaykpCiAJCQljb250aW51ZTsKIAotCQlpZiAobGxjLT5sYWRkci5sc2FwICE9IGxhZGRyLT5sc2FwKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGxsYy0+ZGV2ICE9IHNrYi0+ZGV2KQotCQkJY29udGludWU7Ci0KLQkJc2tiMSA9IHNrYl9jbG9uZShza2IsIEdGUF9BVE9NSUMpOwotCQlpZiAoIXNrYjEpCi0JCQlicmVhazsKLQogCQlzb2NrX2hvbGQoc2spOwotCQlsbGNfc2FwX3JjdihzYXAsIHNrYjEsIHNrKTsKLQkJc29ja19wdXQoc2spOworCQlpZiAoaSA8IGNvdW50KQorCQkJc3RhY2tbaSsrXSA9IHNrOworCQllbHNlIHsKKwkJCWxsY19kb19tY2FzdChzYXAsIHNrYiwgc3RhY2ssIGkpOworCQkJaSA9IDA7CisJCX0KIAl9Ci0JcmVhZF91bmxvY2tfYmgoJnNhcC0+c2tfbGlzdC5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmc2FwLT5za19sb2NrKTsKKworCWxsY19kb19tY2FzdChzYXAsIHNrYiwgc3RhY2ssIGkpOwogfQogCiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9LY29uZmlnIGIvbmV0L21hYzgwMjExL0tjb25maWcKaW5kZXggYTEwZDUwOC4uYTk1MmI3ZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL0tjb25maWcKKysrIGIvbmV0L21hYzgwMjExL0tjb25maWcKQEAgLTk2LDE4ICs5Niw2IEBACiAJLS0taGVscC0tLQogCSAgVGhpcyBvcHRpb24gY29sbGVjdHMgdmFyaW91cyBtYWM4MDIxMSBkZWJ1ZyBzZXR0aW5ncy4KIAotY29uZmlnIE1BQzgwMjExX0RFQlVHX1BBQ0tFVF9BTElHTk1FTlQKLQlib29sICJFbmFibGUgcGFja2V0IGFsaWdubWVudCBkZWJ1Z2dpbmciCi0JZGVwZW5kcyBvbiBNQUM4MDIxMV9ERUJVR19NRU5VCi0JLS0taGVscC0tLQotCSAgVGhpcyBvcHRpb24gaXMgcmVjb21tZW5kZWQgZm9yIGRyaXZlciBhdXRob3JzIGFuZCBzdHJvbmdseQotCSAgZGlzY291cmFnZWQgZm9yIGV2ZXJ5Ym9keSBlbHNlLCBpdCB3aWxsIHRyaWdnZXIgYSB3YXJuaW5nCi0JICB3aGVuIGEgZHJpdmVyIGhhbmRzIG1hYzgwMjExIGEgYnVmZmVyIHRoYXQgaXMgYWxpZ25lZCBpbgotCSAgYSB3YXkgdGhhdCB3aWxsIGNhdXNlIHByb2JsZW1zIHdpdGggdGhlIElQIHN0YWNrIG9uIHNvbWUKLQkgIGFyY2hpdGVjdHVyZXMuCi0KLQkgIFNheSBOIHVubGVzcyB5b3UncmUgd3JpdGluZyBhIG1hYzgwMjExIGJhc2VkIGRyaXZlci4KLQogY29uZmlnIE1BQzgwMjExX05PSU5MSU5FCiAJYm9vbCAiRG8gbm90IGlubGluZSBUWC9SWCBoYW5kbGVycyIKIAlkZXBlbmRzIG9uIE1BQzgwMjExX0RFQlVHX01FTlUKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9NYWtlZmlsZSBiL25ldC9tYWM4MDIxMS9NYWtlZmlsZQppbmRleCAyOThjZmNjLi4wNDQyMDI5IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvTWFrZWZpbGUKKysrIGIvbmV0L21hYzgwMjExL01ha2VmaWxlCkBAIC02LDEwICs2LDEwIEBACiAJc3RhX2luZm8ubyBcCiAJd2VwLm8gXAogCXdwYS5vIFwKLQlzY2FuLm8gXAorCXNjYW4ubyBvZmZjaGFubmVsLm8gXAogCWh0Lm8gYWdnLXR4Lm8gYWdnLXJ4Lm8gXAogCWlic3MubyBcCi0JbWxtZS5vIFwKKwltbG1lLm8gd29yay5vIFwKIAlpZmFjZS5vIFwKIAlyYXRlLm8gXAogCW1pY2hhZWwubyBcCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvYWdnLXJ4LmMgYi9uZXQvbWFjODAyMTEvYWdnLXJ4LmMKaW5kZXggNTFjN2RjMy4uYTk3OGU2NiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2FnZy1yeC5jCisrKyBiL25ldC9tYWM4MDIxMS9hZ2ctcnguYwpAQCAtNDEsOCArNDEsNyBAQAogCSAgICAgICBzdGEtPnN0YS5hZGRyLCB0aWQpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwogCi0JaWYgKGRydl9hbXBkdV9hY3Rpb24obG9jYWwsICZzdGEtPnNkYXRhLT52aWYsCi0JCQkgICAgIElFRUU4MDIxMV9BTVBEVV9SWF9TVE9QLAorCWlmIChkcnZfYW1wZHVfYWN0aW9uKGxvY2FsLCBzdGEtPnNkYXRhLCBJRUVFODAyMTFfQU1QRFVfUlhfU1RPUCwKIAkJCSAgICAgJnN0YS0+c3RhLCB0aWQsIE5VTEwpKQogCQlwcmludGsoS0VSTl9ERUJVRyAiSFcgcHJvYmxlbSAtIGNhbiBub3Qgc3RvcCByeCAiCiAJCQkJImFnZ3JlZ2F0aW9uIGZvciB0aWQgJWRcbiIsIHRpZCk7CkBAIC04MywxMiArODIsMTEgQEAKIHZvaWQgaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpyYSwgdTE2IHRpZCwKIAkJCQkJdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbikKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOworCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgcmEpOwogCWlmICghc3RhKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm47CkBAIC0xMzYsNyArMTM0LDcgQEAKIAogCWlmICghc2tiKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciAiCi0JCSAgICAgICAiZm9yIGFkZGJhIHJlc3AgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQkgICAgICAgImZvciBhZGRiYSByZXNwIGZyYW1lXG4iLCBzZGF0YS0+bmFtZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTE0NCwxMCArMTQyLDEwIEBACiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKIAltZW1zZXQobWdtdCwgMCwgMjQpOwogCW1lbWNweShtZ210LT5kYSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CiAJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQotCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CiAKQEAgLTI4MSw4ICsyNzksNyBAQAogCQlnb3RvIGVuZDsKIAl9CiAKLQlyZXQgPSBkcnZfYW1wZHVfYWN0aW9uKGxvY2FsLCAmc3RhLT5zZGF0YS0+dmlmLAotCQkJICAgICAgIElFRUU4MDIxMV9BTVBEVV9SWF9TVEFSVCwKKwlyZXQgPSBkcnZfYW1wZHVfYWN0aW9uKGxvY2FsLCBzdGEtPnNkYXRhLCBJRUVFODAyMTFfQU1QRFVfUlhfU1RBUlQsCiAJCQkgICAgICAgJnN0YS0+c3RhLCB0aWQsICZzdGFydF9zZXFfbnVtKTsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiUnggQS1NUERVIHJlcXVlc3Qgb24gdGlkICVkIHJlc3VsdCAlZFxuIiwgdGlkLCByZXQpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2FnZy10eC5jIGIvbmV0L21hYzgwMjExL2FnZy10eC5jCmluZGV4IDVlM2E3ZWMuLjU1MzhlMWIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9hZ2ctdHguYworKysgYi9uZXQvbWFjODAyMTEvYWdnLXR4LmMKQEAgLTU4LDE3ICs1OCwxNyBAQAogCiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciAiCi0JCQkJImZvciBhZGRiYSByZXF1ZXN0IGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJCQkiZm9yIGFkZGJhIHJlcXVlc3QgZnJhbWVcbiIsIHNkYXRhLT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIAlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKIAltZW1zZXQobWdtdCwgMCwgMjQpOwogCW1lbWNweShtZ210LT5kYSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CiAJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQotCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CiAKQEAgLTEwNCw3ICsxMDQsNyBAQAogCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKCpiYXIpICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciAiCi0JCQkiYmFyIGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJCSJiYXIgZnJhbWVcbiIsIHNkYXRhLT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIAlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CkBAIC0xMTMsNyArMTEzLDcgQEAKIAliYXItPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfQ1RMIHwKIAkJCQkJIElFRUU4MDIxMV9TVFlQRV9CQUNLX1JFUSk7CiAJbWVtY3B5KGJhci0+cmEsIHJhLCBFVEhfQUxFTik7Ci0JbWVtY3B5KGJhci0+dGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KGJhci0+dGEsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCWJhcl9jb250cm9sIHw9ICh1MTYpSUVFRTgwMjExX0JBUl9DVFJMX0FDS19QT0xJQ1lfTk9STUFMOwogCWJhcl9jb250cm9sIHw9ICh1MTYpSUVFRTgwMjExX0JBUl9DVFJMX0NCTVRJRF9DT01QUkVTU0VEX0JBOwogCWJhcl9jb250cm9sIHw9ICh1MTYpKHRpZCA8PCAxMik7CkBAIC0xNDQsNyArMTQ0LDcgQEAKIAkqc3RhdGUgPSBIVF9BR0dfU1RBVEVfUkVRX1NUT1BfQkFfTVNLIHwKIAkJKGluaXRpYXRvciA8PCBIVF9BR0dfU1RBVEVfSU5JVElBVE9SX1NISUZUKTsKIAotCXJldCA9IGRydl9hbXBkdV9hY3Rpb24obG9jYWwsICZzdGEtPnNkYXRhLT52aWYsCisJcmV0ID0gZHJ2X2FtcGR1X2FjdGlvbihsb2NhbCwgc3RhLT5zZGF0YSwKIAkJCSAgICAgICBJRUVFODAyMTFfQU1QRFVfVFhfU1RPUCwKIAkJCSAgICAgICAmc3RhLT5zdGEsIHRpZCwgTlVMTCk7CiAKQEAgLTE3OSw3ICsxNzksOCBAQAogCiAJLyogY2hlY2sgaWYgdGhlIFRJRCB3YWl0cyBmb3IgYWRkQkEgcmVzcG9uc2UgKi8KIAlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JaWYgKCgqc3RhdGUgJiAoSFRfQUREQkFfUkVRVUVTVEVEX01TSyB8IEhUX0FEREJBX1JFQ0VJVkVEX01TSykpICE9CisJaWYgKCgqc3RhdGUgJiAoSFRfQUREQkFfUkVRVUVTVEVEX01TSyB8IEhUX0FEREJBX1JFQ0VJVkVEX01TSyB8CisJCSAgICAgICBIVF9BR0dfU1RBVEVfUkVRX1NUT1BfQkFfTVNLKSkgIT0KIAkJCQkJCUhUX0FEREJBX1JFUVVFU1RFRF9NU0spIHsKIAkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJCSpzdGF0ZSA9IEhUX0FHR19TVEFURV9JRExFOwpAQCAtMjM2LDYgKzIzNywxNCBAQAogCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKHRlc3Rfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfRElTQVNTT0MpKSB7CisjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCisJCXByaW50ayhLRVJOX0RFQlVHICJEaXNhc3NvY2lhdGlvbiBpcyBpbiBwcm9ncmVzcy4gIgorCQkgICAgICAgIkRlbnlpbmcgQkEgc2Vzc2lvbiByZXF1ZXN0XG4iKTsKKyNlbmRpZgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKIAlpZiAodGVzdF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9TVVNQRU5EKSkgewogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwogCQlwcmludGsoS0VSTl9ERUJVRyAiU3VzcGVuZCBpbiBwcm9ncmVzcy4gIgpAQCAtMzAxLDEwICszMTAsOSBAQAogCSAqIGNhbGwgYmFjayByaWdodCBhd2F5LCBpdCBtdXN0IHNlZSB0aGF0IHRoZSBmbG93IGhhcyBiZWd1biAqLwogCSpzdGF0ZSB8PSBIVF9BRERCQV9SRVFVRVNURURfTVNLOwogCi0Jc3RhcnRfc2VxX251bSA9IHN0YS0+dGlkX3NlcVt0aWRdOworCXN0YXJ0X3NlcV9udW0gPSBzdGEtPnRpZF9zZXFbdGlkXSA+PiA0OwogCi0JcmV0ID0gZHJ2X2FtcGR1X2FjdGlvbihsb2NhbCwgJnNkYXRhLT52aWYsCi0JCQkgICAgICAgSUVFRTgwMjExX0FNUERVX1RYX1NUQVJULAorCXJldCA9IGRydl9hbXBkdV9hY3Rpb24obG9jYWwsIHNkYXRhLCBJRUVFODAyMTFfQU1QRFVfVFhfU1RBUlQsCiAJCQkgICAgICAgcHVic3RhLCB0aWQsICZzdGFydF9zZXFfbnVtKTsKIAogCWlmIChyZXQpIHsKQEAgLTQyMCw3ICs0MjgsNyBAQAogCWllZWU4MDIxMV9hZ2dfc3BsaWNlX2ZpbmlzaChsb2NhbCwgc3RhLCB0aWQpOwogCXNwaW5fdW5sb2NrKCZsb2NhbC0+YW1wZHVfbG9jayk7CiAKLQlkcnZfYW1wZHVfYWN0aW9uKGxvY2FsLCAmc3RhLT5zZGF0YS0+dmlmLAorCWRydl9hbXBkdV9hY3Rpb24obG9jYWwsIHN0YS0+c2RhdGEsCiAJCQkgSUVFRTgwMjExX0FNUERVX1RYX09QRVJBVElPTkFMLAogCQkJICZzdGEtPnN0YSwgdGlkLCBOVUxMKTsKIH0KQEAgLTQ0MSw3ICs0NDksNyBAQAogCX0KIAogCXJjdV9yZWFkX2xvY2soKTsKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIHJhKTsKIAlpZiAoIXN0YSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSFRfREVCVUcKQEAgLTQ4OSw3ICs0OTcsNyBAQAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5LCAiCi0JCQkgICAgICAgImRyb3BwaW5nIHN0YXJ0IEJBIHNlc3Npb24iLCBza2ItPmRldi0+bmFtZSk7CisJCQkgICAgICAgImRyb3BwaW5nIHN0YXJ0IEJBIHNlc3Npb24iLCBzZGF0YS0+bmFtZSk7CiAjZW5kaWYKIAkJcmV0dXJuOwogCX0KQEAgLTU2NCw3ICs1NzIsNyBAQAogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRyAqLwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgcmEpOworCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgcmEpOwogCWlmICghc3RhKSB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0hUX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICJDb3VsZCBub3QgZmluZCBzdGF0aW9uOiAlcE1cbiIsIHJhKTsKQEAgLTYyMSw3ICs2MjksNyBAQAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9IVF9ERUJVRwogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE5vdCBlbm91Z2ggbWVtb3J5LCAiCi0JCQkgICAgICAgImRyb3BwaW5nIHN0b3AgQkEgc2Vzc2lvbiIsIHNrYi0+ZGV2LT5uYW1lKTsKKwkJCSAgICAgICAiZHJvcHBpbmcgc3RvcCBCQSBzZXNzaW9uIiwgc2RhdGEtPm5hbWUpOwogI2VuZGlmCiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvY2ZnLmMgYi9uZXQvbWFjODAyMTEvY2ZnLmMKaW5kZXggOWFlMWE0Ny4uYjcxMTZlZiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2NmZy5jCisrKyBiL25ldC9tYWM4MDIxMS9jZmcuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBtYWM4MDIxMSBjb25maWd1cmF0aW9uIGhvb2tzIGZvciBjZmc4MDIxMQogICoKLSAqIENvcHlyaWdodCAyMDA2LCAyMDA3CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNi0yMDEwCUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CiAgKgogICogVGhpcyBmaWxlIGlzIEdQTHYyIGFzIGZvdW5kIGluIENPUFlJTkcuCiAgKi8KQEAgLTc4LDE3ICs3OCwxNSBAQAogCQkJCSAgZW51bSBubDgwMjExX2lmdHlwZSB0eXBlLCB1MzIgKmZsYWdzLAogCQkJCSAgc3RydWN0IHZpZl9wYXJhbXMgKnBhcmFtcykKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAJaW50IHJldDsKIAotCWlmIChuZXRpZl9ydW5uaW5nKGRldikpCisJaWYgKGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAogCWlmICghbmw4MDIxMV9wYXJhbXNfY2hlY2sodHlwZSwgcGFyYW1zKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7Ci0KIAlyZXQgPSBpZWVlODAyMTFfaWZfY2hhbmdlX3R5cGUoc2RhdGEsIHR5cGUpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC0xNTAsNyArMTQ4LDcgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlpZiAobWFjX2FkZHIpIHsKLQkJc3RhID0gc3RhX2luZm9fZ2V0KHNkYXRhLT5sb2NhbCwgbWFjX2FkZHIpOworCQlzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBtYWNfYWRkcik7CiAJCWlmICghc3RhKSB7CiAJCQlpZWVlODAyMTFfa2V5X2ZyZWUoa2V5KTsKIAkJCWVyciA9IC1FTk9FTlQ7CkBAIC0xODEsNyArMTc5LDcgQEAKIAlpZiAobWFjX2FkZHIpIHsKIAkJcmV0ID0gLUVOT0VOVDsKIAotCQlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEtPmxvY2FsLCBtYWNfYWRkcik7CisJCXN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1hY19hZGRyKTsKIAkJaWYgKCFzdGEpCiAJCQlnb3RvIG91dF91bmxvY2s7CiAKQEAgLTIyOCw3ICsyMjYsNyBAQAogCXJjdV9yZWFkX2xvY2soKTsKIAogCWlmIChtYWNfYWRkcikgewotCQlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEtPmxvY2FsLCBtYWNfYWRkcik7CisJCXN0YSA9IHN0YV9pbmZvX2dldF9ic3Moc2RhdGEsIG1hY19hZGRyKTsKIAkJaWYgKCFzdGEpCiAJCQlnb3RvIG91dDsKIApAQCAtNDE1LDE1ICs0MTMsMTMgQEAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2dldF9zdGF0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkJIHU4ICptYWMsIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvKQogewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCWludCByZXQgPSAtRU5PRU5UOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0JLyogWFhYOiB2ZXJpZnkgc3RhLT5kZXYgPT0gZGV2ICovCi0KLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1hYyk7CisJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWFjKTsKIAlpZiAoc3RhKSB7CiAJCXJldCA9IDA7CiAJCXN0YV9zZXRfc2luZm8oc3RhLCBzaW5mbyk7CkBAIC01MTksNiArNTE1LDggQEAKIAkJaWYgKG9sZCkKIAkJCW1lbWNweShuZXctPnRhaWwsIG9sZC0+dGFpbCwgbmV3X3RhaWxfbGVuKTsKIAorCXNkYXRhLT52aWYuYnNzX2NvbmYuZHRpbV9wZXJpb2QgPSBuZXctPmR0aW1fcGVyaW9kOworCiAJcmN1X2Fzc2lnbl9wb2ludGVyKHNkYXRhLT51LmFwLmJlYWNvbiwgbmV3KTsKIAogCXN5bmNocm9uaXplX3JjdSgpOwpAQCAtNzMyLDcgKzczMCw3IEBACiAJfSBlbHNlCiAJCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAotCWlmIChjb21wYXJlX2V0aGVyX2FkZHIobWFjLCBkZXYtPmRldl9hZGRyKSA9PSAwKQorCWlmIChjb21wYXJlX2V0aGVyX2FkZHIobWFjLCBzZGF0YS0+dmlmLmFkZHIpID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKG1hYykpCkBAIC03NTEsOSArNzQ5LDcgQEAKIAlsYXllcjJfdXBkYXRlID0gc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4gfHwKIAkJc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCi0JZXJyID0gc3RhX2luZm9faW5zZXJ0KHN0YSk7CisJZXJyID0gc3RhX2luZm9faW5zZXJ0X3JjdShzdGEpOwogCWlmIChlcnIpIHsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCXJldHVybiBlcnI7CkBAIC03NzIsMjcgKzc2OCwxMyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2lwaHlfcHJpdih3aXBoeSk7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7CiAKIAlzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CiAKLQlpZiAobWFjKSB7Ci0JCXJjdV9yZWFkX2xvY2soKTsKKwlpZiAobWFjKQorCQlyZXR1cm4gc3RhX2luZm9fZGVzdHJveV9hZGRyX2JzcyhzZGF0YSwgbWFjKTsKIAotCQkvKiBYWFg6IGdldCBzdGEgYmVsb25naW5nIHRvIGRldiAqLwotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1hYyk7Ci0JCWlmICghc3RhKSB7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCXJldHVybiAtRU5PRU5UOwotCQl9Ci0KLQkJc3RhX2luZm9fdW5saW5rKCZzdGEpOwotCQlyY3VfcmVhZF91bmxvY2soKTsKLQotCQlzdGFfaW5mb19kZXN0cm95KHN0YSk7Ci0JfSBlbHNlCi0JCXN0YV9pbmZvX2ZsdXNoKGxvY2FsLCBzZGF0YSk7Ci0KKwlzdGFfaW5mb19mbHVzaChsb2NhbCwgc2RhdGEpOwogCXJldHVybiAwOwogfQogCkBAIC04MDEsMTQgKzc4MywxNCBAQAogCQkJCSAgICB1OCAqbWFjLAogCQkJCSAgICBzdHJ1Y3Qgc3RhdGlvbl9wYXJhbWV0ZXJzICpwYXJhbXMpCiB7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2lwaHlfcHJpdih3aXBoeSk7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqdmxhbnNkYXRhOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0JLyogWFhYOiBnZXQgc3RhIGJlbG9uZ2luZyB0byBkZXYgKi8KLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG1hYyk7CisJc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgbWFjKTsKIAlpZiAoIXN0YSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC04NDcsNyArODI5LDYgQEAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX2FkZF9tcGF0aChzdHJ1Y3Qgd2lwaHkgKndpcGh5LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSB1OCAqZHN0LCB1OCAqbmV4dF9ob3ApCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSB3aXBoeV9wcml2KHdpcGh5KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAlzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKQEAgLTg1Niw3ICs4MzcsNyBAQAogCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIG5leHRfaG9wKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIG5leHRfaG9wKTsKIAlpZiAoIXN0YSkgewogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJcmV0dXJuIC1FTk9FTlQ7CkBAIC04OTUsNyArODc2LDYgQEAKIAkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgdTggKmRzdCwgdTggKm5leHRfaG9wKQogewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2lwaHlfcHJpdih3aXBoeSk7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJc3RydWN0IG1lc2hfcGF0aCAqbXBhdGg7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7CkBAIC05MDQsNyArODg0LDcgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgbmV4dF9ob3ApOworCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgbmV4dF9ob3ApOwogCWlmICghc3RhKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTEwOTIsNiArMTA3MiwxMyBAQAogCQkJcGFyYW1zLT51c2Vfc2hvcnRfcHJlYW1ibGU7CiAJCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfRVJQX1BSRUFNQkxFOwogCX0KKworCWlmICghc2RhdGEtPnZpZi5ic3NfY29uZi51c2Vfc2hvcnRfc2xvdCAmJgorCSAgICBzZGF0YS0+bG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF81R0haKSB7CisJCXNkYXRhLT52aWYuYnNzX2NvbmYudXNlX3Nob3J0X3Nsb3QgPSB0cnVlOworCQljaGFuZ2VkIHw9IEJTU19DSEFOR0VEX0VSUF9TTE9UOworCX0KKwogCWlmIChwYXJhbXMtPnVzZV9zaG9ydF9zbG90X3RpbWUgPj0gMCkgewogCQlzZGF0YS0+dmlmLmJzc19jb25mLnVzZV9zaG9ydF9zbG90ID0KIAkJCXBhcmFtcy0+dXNlX3Nob3J0X3Nsb3RfdGltZTsKQEAgLTExMzUsNiArMTEyMiwxMyBAQAogCXAuY3dfbWF4ID0gcGFyYW1zLT5jd21heDsKIAlwLmN3X21pbiA9IHBhcmFtcy0+Y3dtaW47CiAJcC50eG9wID0gcGFyYW1zLT50eG9wOworCisJLyoKKwkgKiBTZXR0aW5nIHR4IHF1ZXVlIHBhcmFtcyBkaXNhYmxlcyB1LWFwc2QgYmVjYXVzZSBpdCdzIG9ubHkKKwkgKiBjYWxsZWQgaW4gbWFzdGVyIG1vZGUuCisJICovCisJcC51YXBzZCA9IGZhbHNlOworCiAJaWYgKGRydl9jb25mX3R4KGxvY2FsLCBwYXJhbXMtPnF1ZXVlLCAmcCkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gc2V0IFRYIHF1ZXVlICIKIAkJICAgICAgICJwYXJhbWV0ZXJzIGZvciBxdWV1ZSAlZFxuIiwKQEAgLTEyMzcsNiArMTIzMSwxMyBAQAogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2lwaHlfcHJpdih3aXBoeSk7CiAJaW50IGVycjsKIAorCWlmIChjaGFuZ2VkICYgV0lQSFlfUEFSQU1fQ09WRVJBR0VfQ0xBU1MpIHsKKwkJZXJyID0gZHJ2X3NldF9jb3ZlcmFnZV9jbGFzcyhsb2NhbCwgd2lwaHktPmNvdmVyYWdlX2NsYXNzKTsKKworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKIAlpZiAoY2hhbmdlZCAmIFdJUEhZX1BBUkFNX1JUU19USFJFU0hPTEQpIHsKIAkJZXJyID0gZHJ2X3NldF9ydHNfdGhyZXNob2xkKGxvY2FsLCB3aXBoeS0+cnRzX3RocmVzaG9sZCk7CiAKQEAgLTEzMjQsNiArMTMyNSw1MCBAQAogfQogI2VuZGlmCiAKK2ludCBfX2llZWU4MDIxMV9yZXF1ZXN0X3NtcHMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICAgIGVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSBzbXBzX21vZGUpCit7CisJY29uc3QgdTggKmFwOworCWVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSBvbGRfcmVxOworCWludCBlcnI7CisKKwlvbGRfcmVxID0gc2RhdGEtPnUubWdkLnJlcV9zbXBzOworCXNkYXRhLT51Lm1nZC5yZXFfc21wcyA9IHNtcHNfbW9kZTsKKworCWlmIChvbGRfcmVxID09IHNtcHNfbW9kZSAmJgorCSAgICBzbXBzX21vZGUgIT0gSUVFRTgwMjExX1NNUFNfQVVUT01BVElDKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogSWYgbm90IGFzc29jaWF0ZWQsIG9yIGN1cnJlbnQgYXNzb2NpYXRpb24gaXMgbm90IGFuIEhUCisJICogYXNzb2NpYXRpb24sIHRoZXJlJ3Mgbm8gbmVlZCB0byBzZW5kIGFuIGFjdGlvbiBmcmFtZS4KKwkgKi8KKwlpZiAoIXNkYXRhLT51Lm1nZC5hc3NvY2lhdGVkIHx8CisJICAgIHNkYXRhLT5sb2NhbC0+b3Blcl9jaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX05PX0hUKSB7CisJCW11dGV4X2xvY2soJnNkYXRhLT5sb2NhbC0+aWZsaXN0X210eCk7CisJCWllZWU4MDIxMV9yZWNhbGNfc21wcyhzZGF0YS0+bG9jYWwsIHNkYXRhKTsKKwkJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPmlmbGlzdF9tdHgpOworCQlyZXR1cm4gMDsKKwl9CisKKwlhcCA9IHNkYXRhLT51Lm1nZC5hc3NvY2lhdGVkLT5ic3NpZDsKKworCWlmIChzbXBzX21vZGUgPT0gSUVFRTgwMjExX1NNUFNfQVVUT01BVElDKSB7CisJCWlmIChzZGF0YS0+dS5tZ2QucG93ZXJzYXZlKQorCQkJc21wc19tb2RlID0gSUVFRTgwMjExX1NNUFNfRFlOQU1JQzsKKwkJZWxzZQorCQkJc21wc19tb2RlID0gSUVFRTgwMjExX1NNUFNfT0ZGOworCX0KKworCS8qIHNlbmQgU00gUFMgZnJhbWUgdG8gQVAgKi8KKwllcnIgPSBpZWVlODAyMTFfc2VuZF9zbXBzX2FjdGlvbihzZGF0YSwgc21wc19tb2RlLAorCQkJCQkgYXAsIGFwKTsKKwlpZiAoZXJyKQorCQlzZGF0YS0+dS5tZ2QucmVxX3NtcHMgPSBvbGRfcmVxOworCisJcmV0dXJuIGVycjsKK30KKwogc3RhdGljIGludCBpZWVlODAyMTFfc2V0X3Bvd2VyX21nbXQoc3RydWN0IHdpcGh5ICp3aXBoeSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgYm9vbCBlbmFibGVkLCBpbnQgdGltZW91dCkKIHsKQEAgLTEzNDQsNiArMTM4OSwxMSBAQAogCXNkYXRhLT51Lm1nZC5wb3dlcnNhdmUgPSBlbmFibGVkOwogCWNvbmYtPmR5bmFtaWNfcHNfdGltZW91dCA9IHRpbWVvdXQ7CiAKKwkvKiBubyBjaGFuZ2UsIGJ1dCBpZiBhdXRvbWF0aWMgZm9sbG93IHBvd2Vyc2F2ZSAqLworCW11dGV4X2xvY2soJnNkYXRhLT51Lm1nZC5tdHgpOworCV9faWVlZTgwMjExX3JlcXVlc3Rfc21wcyhzZGF0YSwgc2RhdGEtPnUubWdkLnJlcV9zbXBzKTsKKwltdXRleF91bmxvY2soJnNkYXRhLT51Lm1nZC5tdHgpOworCiAJaWYgKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1BTKQogCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOwogCkBAIC0xMzU5LDM5ICsxNDA5LDUyIEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gd2Rldl9wcml2KGRldi0+aWVlZTgwMjExX3B0cik7Ci0JaW50IGksIGVyciA9IC1FSU5WQUw7Ci0JdTMyIHRhcmdldF9yYXRlOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCWludCBpOwogCi0Jc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOworCS8qCisJICogVGhpcyBfY291bGRfIGJlIHN1cHBvcnRlZCBieSBwcm92aWRpbmcgYSBob29rIGZvcgorCSAqIGRyaXZlcnMgZm9yIHRoaXMgZnVuY3Rpb24sIGJ1dCBhdCB0aGlzIHBvaW50IGl0CisJICogZG9lc24ndCBzZWVtIHdvcnRoIGJvdGhlcmluZy4KKwkgKi8KKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX0hBU19SQVRFX0NPTlRST0wpCisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCS8qIHRhcmdldF9yYXRlID0gLTEsIHJhdGUtPmZpeGVkID0gMCBtZWFucyBhdXRvIG9ubHksIHNvIHVzZSBhbGwgcmF0ZXMKLQkgKiB0YXJnZXRfcmF0ZSA9IFgsIHJhdGUtPmZpeGVkID0gMSBtZWFucyBvbmx5IHJhdGUgWAotCSAqIHRhcmdldF9yYXRlID0gWCwgcmF0ZS0+Zml4ZWQgPSAwIG1lYW5zIGFsbCByYXRlcyA8PSBYICovCi0Jc2RhdGEtPm1heF9yYXRlY3RybF9yYXRlaWR4ID0gLTE7Ci0Jc2RhdGEtPmZvcmNlX3VuaWNhc3RfcmF0ZWlkeCA9IC0xOwogCi0JaWYgKG1hc2stPmZpeGVkKQotCQl0YXJnZXRfcmF0ZSA9IG1hc2stPmZpeGVkIC8gMTAwOwotCWVsc2UgaWYgKG1hc2stPm1heHJhdGUpCi0JCXRhcmdldF9yYXRlID0gbWFzay0+bWF4cmF0ZSAvIDEwMDsKLQllbHNlCi0JCXJldHVybiAwOworCWZvciAoaSA9IDA7IGkgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBpKyspCisJCXNkYXRhLT5yY19yYXRlaWR4X21hc2tbaV0gPSBtYXNrLT5jb250cm9sW2ldLmxlZ2FjeTsKIAotCWZvciAoaT0wOyBpPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7Ci0JCXN0cnVjdCBpZWVlODAyMTFfcmF0ZSAqYnJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW2ldOwotCQlpbnQgdGhpc19yYXRlID0gYnJhdGUtPmJpdHJhdGU7CisJcmV0dXJuIDA7Cit9CiAKLQkJaWYgKHRhcmdldF9yYXRlID09IHRoaXNfcmF0ZSkgewotCQkJc2RhdGEtPm1heF9yYXRlY3RybF9yYXRlaWR4ID0gaTsKLQkJCWlmIChtYXNrLT5maXhlZCkKLQkJCQlzZGF0YS0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4ID0gaTsKLQkJCWVyciA9IDA7Ci0JCQlicmVhazsKLQkJfQotCX0KK3N0YXRpYyBpbnQgaWVlZTgwMjExX3JlbWFpbl9vbl9jaGFubmVsKHN0cnVjdCB3aXBoeSAqd2lwaHksCisJCQkJICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICAgICAgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBkdXJhdGlvbiwKKwkJCQkgICAgICAgdTY0ICpjb29raWUpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOwogCi0JcmV0dXJuIGVycjsKKwlyZXR1cm4gaWVlZTgwMjExX3drX3JlbWFpbl9vbl9jaGFubmVsKHNkYXRhLCBjaGFuLCBjaGFubmVsX3R5cGUsCisJCQkJCSAgICAgIGR1cmF0aW9uLCBjb29raWUpOworfQorCitzdGF0aWMgaW50IGllZWU4MDIxMV9jYW5jZWxfcmVtYWluX29uX2NoYW5uZWwoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCQkJICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCQkJICAgICAgdTY0IGNvb2tpZSkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGKGRldik7CisKKwlyZXR1cm4gaWVlZTgwMjExX3drX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbChzZGF0YSwgY29va2llKTsKK30KKworc3RhdGljIGludCBpZWVlODAyMTFfYWN0aW9uKHN0cnVjdCB3aXBoeSAqd2lwaHksIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJICAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJICAgIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sIHU2NCAqY29va2llKQoreworCXJldHVybiBpZWVlODAyMTFfbWdkX2FjdGlvbihJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpLCBjaGFuLAorCQkJCSAgICBjaGFubmVsX3R5cGUsIGJ1ZiwgbGVuLCBjb29raWUpOwogfQogCiBzdHJ1Y3QgY2ZnODAyMTFfb3BzIG1hYzgwMjExX2NvbmZpZ19vcHMgPSB7CkBAIC0xNDQwLDQgKzE1MDMsNyBAQAogCUNGRzgwMjExX1RFU1RNT0RFX0NNRChpZWVlODAyMTFfdGVzdG1vZGVfY21kKQogCS5zZXRfcG93ZXJfbWdtdCA9IGllZWU4MDIxMV9zZXRfcG93ZXJfbWdtdCwKIAkuc2V0X2JpdHJhdGVfbWFzayA9IGllZWU4MDIxMV9zZXRfYml0cmF0ZV9tYXNrLAorCS5yZW1haW5fb25fY2hhbm5lbCA9IGllZWU4MDIxMV9yZW1haW5fb25fY2hhbm5lbCwKKwkuY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsID0gaWVlZTgwMjExX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbCwKKwkuYWN0aW9uID0gaWVlZTgwMjExX2FjdGlvbiwKIH07CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZGVidWdmcy5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnMuYwppbmRleCBlNGI1NDA5Li42Mzc5MjliIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmcy5jCisrKyBiL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzLmMKQEAgLTE1OCw2ICsxNTgsMTMwIEBACiAJLm9wZW4gPSBtYWM4MDIxMV9vcGVuX2ZpbGVfZ2VuZXJpYwogfTsKIAorc3RhdGljIHNzaXplX3QgdWFwc2RfcXVldWVzX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHJlczsKKwljaGFyIGJ1ZlsxMF07CisKKwlyZXMgPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjB4JXhcbiIsIGxvY2FsLT51YXBzZF9xdWV1ZXMpOworCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCByZXMpOworfQorCitzdGF0aWMgc3NpemVfdCB1YXBzZF9xdWV1ZXNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBsb25nIHZhbDsKKwljaGFyIGJ1ZlsxMF07CisJc2l6ZV90IGxlbjsKKwlpbnQgcmV0OworCisJbGVuID0gbWluKGNvdW50LCBzaXplb2YoYnVmKSAtIDEpOworCWlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmLCBsZW4pKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlidWZbbGVuXSA9ICdcMCc7CisKKwlyZXQgPSBzdHJpY3Rfc3RydG91bChidWYsIDAsICZ2YWwpOworCisJaWYgKHJldCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodmFsICYgfklFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fQUNfTUFTSykKKwkJcmV0dXJuIC1FUkFOR0U7CisKKwlsb2NhbC0+dWFwc2RfcXVldWVzID0gdmFsOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1YXBzZF9xdWV1ZXNfb3BzID0geworCS5yZWFkID0gdWFwc2RfcXVldWVzX3JlYWQsCisJLndyaXRlID0gdWFwc2RfcXVldWVzX3dyaXRlLAorCS5vcGVuID0gbWFjODAyMTFfb3Blbl9maWxlX2dlbmVyaWMKK307CisKK3N0YXRpYyBzc2l6ZV90IHVhcHNkX21heF9zcF9sZW5fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAorCQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJaW50IHJlczsKKwljaGFyIGJ1ZlsxMF07CisKKwlyZXMgPSBzY25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIjB4JXhcbiIsIGxvY2FsLT51YXBzZF9tYXhfc3BfbGVuKTsKKworCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcih1c2VyX2J1ZiwgY291bnQsIHBwb3MsIGJ1ZiwgcmVzKTsKK30KKworc3RhdGljIHNzaXplX3QgdWFwc2RfbWF4X3NwX2xlbl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCQkgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsCisJCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJdW5zaWduZWQgbG9uZyB2YWw7CisJY2hhciBidWZbMTBdOworCXNpemVfdCBsZW47CisJaW50IHJldDsKKworCWxlbiA9IG1pbihjb3VudCwgc2l6ZW9mKGJ1ZikgLSAxKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyX2J1ZiwgbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJYnVmW2xlbl0gPSAnXDAnOworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWwoYnVmLCAwLCAmdmFsKTsKKworCWlmIChyZXQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHZhbCAmIH5JRUVFODAyMTFfV01NX0lFX1NUQV9RT1NJTkZPX1NQX01BU0spCisJCXJldHVybiAtRVJBTkdFOworCisJbG9jYWwtPnVhcHNkX21heF9zcF9sZW4gPSB2YWw7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVhcHNkX21heF9zcF9sZW5fb3BzID0geworCS5yZWFkID0gdWFwc2RfbWF4X3NwX2xlbl9yZWFkLAorCS53cml0ZSA9IHVhcHNkX21heF9zcF9sZW5fd3JpdGUsCisJLm9wZW4gPSBtYWM4MDIxMV9vcGVuX2ZpbGVfZ2VuZXJpYworfTsKKworc3RhdGljIHNzaXplX3QgY2hhbm5lbF90eXBlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNvbnN0IGNoYXIgKmJ1ZjsKKworCXN3aXRjaCAobG9jYWwtPmh3LmNvbmYuY2hhbm5lbF90eXBlKSB7CisJY2FzZSBOTDgwMjExX0NIQU5fTk9fSFQ6CisJCWJ1ZiA9ICJubyBodFxuIjsKKwkJYnJlYWs7CisJY2FzZSBOTDgwMjExX0NIQU5fSFQyMDoKKwkJYnVmID0gImh0MjBcbiI7CisJCWJyZWFrOworCWNhc2UgTkw4MDIxMV9DSEFOX0hUNDBNSU5VUzoKKwkJYnVmID0gImh0NDAtXG4iOworCQlicmVhazsKKwljYXNlIE5MODAyMTFfQ0hBTl9IVDQwUExVUzoKKwkJYnVmID0gImh0NDArXG4iOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlidWYgPSAiPz8/IjsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHNpbXBsZV9yZWFkX2Zyb21fYnVmZmVyKHVzZXJfYnVmLCBjb3VudCwgcHBvcywgYnVmLCBzdHJsZW4oYnVmKSk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNoYW5uZWxfdHlwZV9vcHMgPSB7CisJLnJlYWQgPSBjaGFubmVsX3R5cGVfcmVhZCwKKwkub3BlbiA9IG1hYzgwMjExX29wZW5fZmlsZV9nZW5lcmljCit9OworCiBzdGF0aWMgc3NpemVfdCBxdWV1ZXNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJfYnVmLAogCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC0zMTQsNiArNDM4LDkgQEAKIAlERUJVR0ZTX0FERChxdWV1ZXMpOwogCURFQlVHRlNfQUREX01PREUocmVzZXQsIDAyMDApOwogCURFQlVHRlNfQUREKG5vYWNrKTsKKwlERUJVR0ZTX0FERCh1YXBzZF9xdWV1ZXMpOworCURFQlVHRlNfQUREKHVhcHNkX21heF9zcF9sZW4pOworCURFQlVHRlNfQUREKGNoYW5uZWxfdHlwZSk7CiAKIAlzdGF0c2QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInN0YXRpc3RpY3MiLCBwaHlkKTsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfa2V5LmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYwppbmRleCBlMGY1MjI0Li5kMTJlNzQzIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19rZXkuYwpAQCAtNTYsNyArNTYsNyBAQAogS0VZX0NPTkZfRklMRShod19rZXlfaWR4LCBEKTsKIEtFWV9GSUxFKGZsYWdzLCBYKTsKIEtFWV9GSUxFKHR4X3J4X2NvdW50LCBEKTsKLUtFWV9SRUFEKGlmaW5kZXgsIHNkYXRhLT5kZXYtPmlmaW5kZXgsIDIwLCAiJWRcbiIpOworS0VZX1JFQUQoaWZpbmRleCwgc2RhdGEtPm5hbWUsIElGTkFNU0laICsgMiwgIiVzXG4iKTsKIEtFWV9PUFMoaWZpbmRleCk7CiAKIHN0YXRpYyBzc2l6ZV90IGtleV9hbGdvcml0aG1fcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5jIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKaW5kZXggNDcyYjIwMy4uOWFmZmUyYyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmMKQEAgLTQxLDYgKzQxLDMwIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIHNzaXplX3QgaWVlZTgwMjExX2lmX3dyaXRlKAorCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCWNvbnN0IGNoYXIgX191c2VyICp1c2VyYnVmLAorCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zLAorCXNzaXplX3QgKCp3cml0ZSkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqLCBjb25zdCBjaGFyICosIGludCkpCit7CisJdTggKmJ1ZjsKKwlzc2l6ZV90IHJldCA9IC1FTk9ERVY7CisKKwlidWYgPSBremFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoY29weV9mcm9tX3VzZXIoYnVmLCB1c2VyYnVmLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJcnRubF9sb2NrKCk7CisJaWYgKHNkYXRhLT5kZXYtPnJlZ19zdGF0ZSA9PSBORVRSRUdfUkVHSVNURVJFRCkKKwkJcmV0ID0gKCp3cml0ZSkoc2RhdGEsIGJ1ZiwgY291bnQpOworCXJ0bmxfdW5sb2NrKCk7CisKKwlyZXR1cm4gcmV0OworfQorCiAjZGVmaW5lIElFRUU4MDIxMV9JRl9GTVQobmFtZSwgZmllbGQsIGZvcm1hdF9zdHJpbmcpCQkJXAogc3RhdGljIHNzaXplX3QgaWVlZTgwMjExX2lmX2ZtdF8jI25hbWUoCQkJCQlcCiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNoYXIgKmJ1ZiwJCVwKQEAgLTcxLDcgKzk1LDcgQEAKIAlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJXBNXG4iLCBzZGF0YS0+ZmllbGQpOwkJXAogfQogCi0jZGVmaW5lIF9fSUVFRTgwMjExX0lGX0ZJTEUobmFtZSkJCQkJCVwKKyNkZWZpbmUgX19JRUVFODAyMTFfSUZfRklMRShuYW1lLCBfd3JpdGUpCQkJCVwKIHN0YXRpYyBzc2l6ZV90IGllZWU4MDIxMV9pZl9yZWFkXyMjbmFtZShzdHJ1Y3QgZmlsZSAqZmlsZSwJCVwKIAkJCQkJY2hhciBfX3VzZXIgKnVzZXJidWYsCQlcCiAJCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQlcCkBAIC04MiwyMiArMTA2LDk5IEBACiB9CQkJCQkJCQkJXAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbmFtZSMjX29wcyA9IHsJCQlcCiAJLnJlYWQgPSBpZWVlODAyMTFfaWZfcmVhZF8jI25hbWUsCQkJCVwKKwkud3JpdGUgPSAoX3dyaXRlKSwJCQkJCQlcCiAJLm9wZW4gPSBtYWM4MDIxMV9vcGVuX2ZpbGVfZ2VuZXJpYywJCQkJXAogfQogCisjZGVmaW5lIF9fSUVFRTgwMjExX0lGX0ZJTEVfVyhuYW1lKQkJCQkJXAorc3RhdGljIHNzaXplX3QgaWVlZTgwMjExX2lmX3dyaXRlXyMjbmFtZShzdHJ1Y3QgZmlsZSAqZmlsZSwJCVwKKwkJCQkJIGNvbnN0IGNoYXIgX191c2VyICp1c2VyYnVmLAlcCisJCQkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykJXAorewkJCQkJCQkJCVwKKwlyZXR1cm4gaWVlZTgwMjExX2lmX3dyaXRlKGZpbGUtPnByaXZhdGVfZGF0YSwgdXNlcmJ1ZiwgY291bnQsCVwKKwkJCQkgIHBwb3MsIGllZWU4MDIxMV9pZl9wYXJzZV8jI25hbWUpOwlcCit9CQkJCQkJCQkJXAorX19JRUVFODAyMTFfSUZfRklMRShuYW1lLCBpZWVlODAyMTFfaWZfd3JpdGVfIyNuYW1lKQorCisKICNkZWZpbmUgSUVFRTgwMjExX0lGX0ZJTEUobmFtZSwgZmllbGQsIGZvcm1hdCkJCQkJXAogCQlJRUVFODAyMTFfSUZfRk1UXyMjZm9ybWF0KG5hbWUsIGZpZWxkKQkJCVwKLQkJX19JRUVFODAyMTFfSUZfRklMRShuYW1lKQorCQlfX0lFRUU4MDIxMV9JRl9GSUxFKG5hbWUsIE5VTEwpCiAKIC8qIGNvbW1vbiBhdHRyaWJ1dGVzICovCiBJRUVFODAyMTFfSUZfRklMRShkcm9wX3VuZW5jcnlwdGVkLCBkcm9wX3VuZW5jcnlwdGVkLCBERUMpOwotSUVFRTgwMjExX0lGX0ZJTEUoZm9yY2VfdW5pY2FzdF9yYXRlaWR4LCBmb3JjZV91bmljYXN0X3JhdGVpZHgsIERFQyk7Ci1JRUVFODAyMTFfSUZfRklMRShtYXhfcmF0ZWN0cmxfcmF0ZWlkeCwgbWF4X3JhdGVjdHJsX3JhdGVpZHgsIERFQyk7CitJRUVFODAyMTFfSUZfRklMRShyY19yYXRlaWR4X21hc2tfMmdoeiwgcmNfcmF0ZWlkeF9tYXNrW0lFRUU4MDIxMV9CQU5EXzJHSFpdLAorCQkgIEhFWCk7CitJRUVFODAyMTFfSUZfRklMRShyY19yYXRlaWR4X21hc2tfNWdoeiwgcmNfcmF0ZWlkeF9tYXNrW0lFRUU4MDIxMV9CQU5EXzVHSFpdLAorCQkgIEhFWCk7CiAKIC8qIFNUQSBhdHRyaWJ1dGVzICovCiBJRUVFODAyMTFfSUZfRklMRShic3NpZCwgdS5tZ2QuYnNzaWQsIE1BQyk7CiBJRUVFODAyMTFfSUZfRklMRShhaWQsIHUubWdkLmFpZCwgREVDKTsKLUlFRUU4MDIxMV9JRl9GSUxFKGNhcGFiLCB1Lm1nZC5jYXBhYiwgSEVYKTsKKworc3RhdGljIGludCBpZWVlODAyMTFfc2V0X3NtcHMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICAgICBlbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgc21wc19tb2RlKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCWludCBlcnI7CisKKwlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfU1RBVElDX1NNUFMpICYmCisJICAgIHNtcHNfbW9kZSA9PSBJRUVFODAyMTFfU01QU19TVEFUSUMpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogYXV0byBzaG91bGQgYmUgZHluYW1pYyBpZiBpbiBQUyBtb2RlICovCisJaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfU01QUykgJiYKKwkgICAgKHNtcHNfbW9kZSA9PSBJRUVFODAyMTFfU01QU19EWU5BTUlDIHx8CisJICAgICBzbXBzX21vZGUgPT0gSUVFRTgwMjExX1NNUFNfQVVUT01BVElDKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBzdXBwb3J0ZWQgb25seSBvbiBtYW5hZ2VkIGludGVyZmFjZXMgZm9yIG5vdyAqLworCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCisJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCWVyciA9IF9faWVlZTgwMjExX3JlcXVlc3Rfc21wcyhzZGF0YSwgc21wc19tb2RlKTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpzbXBzX21vZGVzW0lFRUU4MDIxMV9TTVBTX05VTV9NT0RFU10gPSB7CisJW0lFRUU4MDIxMV9TTVBTX0FVVE9NQVRJQ10gPSAiYXV0byIsCisJW0lFRUU4MDIxMV9TTVBTX09GRl0gPSAib2ZmIiwKKwlbSUVFRTgwMjExX1NNUFNfU1RBVElDXSA9ICJzdGF0aWMiLAorCVtJRUVFODAyMTFfU01QU19EWU5BTUlDXSA9ICJkeW5hbWljIiwKK307CisKK3N0YXRpYyBzc2l6ZV90IGllZWU4MDIxMV9pZl9mbXRfc21wcyhjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgICAgIGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKK3sKKwlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCisJCXJldHVybiAtRU9QTk9UU1VQUDsKKworCXJldHVybiBzbnByaW50ZihidWYsIGJ1ZmxlbiwgInJlcXVlc3Q6ICVzXG51c2VkOiAlc1xuIiwKKwkJCXNtcHNfbW9kZXNbc2RhdGEtPnUubWdkLnJlcV9zbXBzXSwKKwkJCXNtcHNfbW9kZXNbc2RhdGEtPnUubWdkLmFwX3NtcHNdKTsKK30KKworc3RhdGljIHNzaXplX3QgaWVlZTgwMjExX2lmX3BhcnNlX3NtcHMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGJ1ZmxlbikKK3sKKwllbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgbW9kZTsKKworCWZvciAobW9kZSA9IDA7IG1vZGUgPCBJRUVFODAyMTFfU01QU19OVU1fTU9ERVM7IG1vZGUrKykgeworCQlpZiAoc3RybmNtcChidWYsIHNtcHNfbW9kZXNbbW9kZV0sIGJ1ZmxlbikgPT0gMCkgeworCQkJaW50IGVyciA9IGllZWU4MDIxMV9zZXRfc21wcyhzZGF0YSwgbW9kZSk7CisJCQlpZiAoIWVycikKKwkJCQlyZXR1cm4gYnVmbGVuOworCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitfX0lFRUU4MDIxMV9JRl9GSUxFX1coc21wcyk7CiAKIC8qIEFQIGF0dHJpYnV0ZXMgKi8KIElFRUU4MDIxMV9JRl9GSUxFKG51bV9zdGFfcHMsIHUuYXAubnVtX3N0YV9wcywgQVRPTUlDKTsKQEAgLTEwOSw3ICsyMTAsNyBAQAogCXJldHVybiBzY25wcmludGYoYnVmLCBidWZsZW4sICIldVxuIiwKIAkJCSBza2JfcXVldWVfbGVuKCZzZGF0YS0+dS5hcC5wc19iY19idWYpKTsKIH0KLV9fSUVFRTgwMjExX0lGX0ZJTEUobnVtX2J1ZmZlcmVkX211bHRpY2FzdCk7CitfX0lFRUU4MDIxMV9JRl9GSUxFKG51bV9idWZmZXJlZF9tdWx0aWNhc3QsIE5VTEwpOwogCiAvKiBXRFMgYXR0cmlidXRlcyAqLwogSUVFRTgwMjExX0lGX0ZJTEUocGVlciwgdS53ZHMucmVtb3RlX2FkZHIsIE1BQyk7CkBAIC0xNTQsNDYgKzI1NSw1MCBAQAogI2VuZGlmCiAKIAotI2RlZmluZSBERUJVR0ZTX0FERChuYW1lLCB0eXBlKSBcCisjZGVmaW5lIERFQlVHRlNfQUREKG5hbWUpIFwKIAlkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCNuYW1lLCAwNDAwLCBzZGF0YS0+ZGVidWdmcy5kaXIsIFwKIAkJCSAgICBzZGF0YSwgJm5hbWUjI19vcHMpOwogCisjZGVmaW5lIERFQlVHRlNfQUREX01PREUobmFtZSwgbW9kZSkgXAorCWRlYnVnZnNfY3JlYXRlX2ZpbGUoI25hbWUsIG1vZGUsIHNkYXRhLT5kZWJ1Z2ZzLmRpciwgXAorCQkJICAgIHNkYXRhLCAmbmFtZSMjX29wcyk7CisKIHN0YXRpYyB2b2lkIGFkZF9zdGFfZmlsZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0JREVCVUdGU19BREQoZHJvcF91bmVuY3J5cHRlZCwgc3RhKTsKLQlERUJVR0ZTX0FERChmb3JjZV91bmljYXN0X3JhdGVpZHgsIHN0YSk7Ci0JREVCVUdGU19BREQobWF4X3JhdGVjdHJsX3JhdGVpZHgsIHN0YSk7CisJREVCVUdGU19BREQoZHJvcF91bmVuY3J5cHRlZCk7CisJREVCVUdGU19BREQocmNfcmF0ZWlkeF9tYXNrXzJnaHopOworCURFQlVHRlNfQUREKHJjX3JhdGVpZHhfbWFza181Z2h6KTsKIAotCURFQlVHRlNfQUREKGJzc2lkLCBzdGEpOwotCURFQlVHRlNfQUREKGFpZCwgc3RhKTsKLQlERUJVR0ZTX0FERChjYXBhYiwgc3RhKTsKKwlERUJVR0ZTX0FERChic3NpZCk7CisJREVCVUdGU19BREQoYWlkKTsKKwlERUJVR0ZTX0FERF9NT0RFKHNtcHMsIDA2MDApOwogfQogCiBzdGF0aWMgdm9pZCBhZGRfYXBfZmlsZXMoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7Ci0JREVCVUdGU19BREQoZHJvcF91bmVuY3J5cHRlZCwgYXApOwotCURFQlVHRlNfQUREKGZvcmNlX3VuaWNhc3RfcmF0ZWlkeCwgYXApOwotCURFQlVHRlNfQUREKG1heF9yYXRlY3RybF9yYXRlaWR4LCBhcCk7CisJREVCVUdGU19BREQoZHJvcF91bmVuY3J5cHRlZCk7CisJREVCVUdGU19BREQocmNfcmF0ZWlkeF9tYXNrXzJnaHopOworCURFQlVHRlNfQUREKHJjX3JhdGVpZHhfbWFza181Z2h6KTsKIAotCURFQlVHRlNfQUREKG51bV9zdGFfcHMsIGFwKTsKLQlERUJVR0ZTX0FERChkdGltX2NvdW50LCBhcCk7Ci0JREVCVUdGU19BREQobnVtX2J1ZmZlcmVkX211bHRpY2FzdCwgYXApOworCURFQlVHRlNfQUREKG51bV9zdGFfcHMpOworCURFQlVHRlNfQUREKGR0aW1fY291bnQpOworCURFQlVHRlNfQUREKG51bV9idWZmZXJlZF9tdWx0aWNhc3QpOwogfQogCiBzdGF0aWMgdm9pZCBhZGRfd2RzX2ZpbGVzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCURFQlVHRlNfQUREKGRyb3BfdW5lbmNyeXB0ZWQsIHdkcyk7Ci0JREVCVUdGU19BREQoZm9yY2VfdW5pY2FzdF9yYXRlaWR4LCB3ZHMpOwotCURFQlVHRlNfQUREKG1heF9yYXRlY3RybF9yYXRlaWR4LCB3ZHMpOworCURFQlVHRlNfQUREKGRyb3BfdW5lbmNyeXB0ZWQpOworCURFQlVHRlNfQUREKHJjX3JhdGVpZHhfbWFza18yZ2h6KTsKKwlERUJVR0ZTX0FERChyY19yYXRlaWR4X21hc2tfNWdoeik7CiAKLQlERUJVR0ZTX0FERChwZWVyLCB3ZHMpOworCURFQlVHRlNfQUREKHBlZXIpOwogfQogCiBzdGF0aWMgdm9pZCBhZGRfdmxhbl9maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlERUJVR0ZTX0FERChkcm9wX3VuZW5jcnlwdGVkLCB2bGFuKTsKLQlERUJVR0ZTX0FERChmb3JjZV91bmljYXN0X3JhdGVpZHgsIHZsYW4pOwotCURFQlVHRlNfQUREKG1heF9yYXRlY3RybF9yYXRlaWR4LCB2bGFuKTsKKwlERUJVR0ZTX0FERChkcm9wX3VuZW5jcnlwdGVkKTsKKwlERUJVR0ZTX0FERChyY19yYXRlaWR4X21hc2tfMmdoeik7CisJREVCVUdGU19BREQocmNfcmF0ZWlkeF9tYXNrXzVnaHopOwogfQogCiBzdGF0aWMgdm9pZCBhZGRfbW9uaXRvcl9maWxlcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKQEAgLTI4MCwxNiArMzg1LDExIEBACiAJfQogfQogCi1zdGF0aWMgaW50IG5vdGlmX3JlZ2lzdGVyZWQ7Ci0KIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfYWRkX25ldGRldihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKIAljaGFyIGJ1ZlsxMCtJRk5BTVNJWl07CiAKLQlpZiAoIW5vdGlmX3JlZ2lzdGVyZWQpCi0JCXJldHVybjsKLQotCXNwcmludGYoYnVmLCAibmV0ZGV2OiVzIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJc3ByaW50ZihidWYsICJuZXRkZXY6JXMiLCBzZGF0YS0+bmFtZSk7CiAJc2RhdGEtPmRlYnVnZnMuZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKGJ1ZiwKIAkJc2RhdGEtPmxvY2FsLT5ody53aXBoeS0+ZGVidWdmc2Rpcik7CiAJYWRkX2ZpbGVzKHNkYXRhKTsKQEAgLTMwNCw1OCArNDA0LDE4IEBACiAJc2RhdGEtPmRlYnVnZnMuZGlyID0gTlVMTDsKIH0KIAotc3RhdGljIGludCBuZXRkZXZfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCi0JCQkgdW5zaWduZWQgbG9uZyBzdGF0ZSwKLQkJCSB2b2lkICpuZGV2KQordm9pZCBpZWVlODAyMTFfZGVidWdmc19yZW5hbWVfbmV0ZGV2KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZGV2OwogCXN0cnVjdCBkZW50cnkgKmRpcjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKLQljaGFyIGJ1ZlsxMCtJRk5BTVNJWl07Ci0KLQlpZiAoc3RhdGUgIT0gTkVUREVWX0NIQU5HRU5BTUUpCi0JCXJldHVybiAwOwotCi0JaWYgKCFkZXYtPmllZWU4MDIxMV9wdHIgfHwgIWRldi0+aWVlZTgwMjExX3B0ci0+d2lwaHkpCi0JCXJldHVybiAwOwotCi0JaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+d2lwaHktPnByaXZpZCAhPSBtYWM4MDIxMV93aXBoeV9wcml2aWQpCi0JCXJldHVybiAwOwotCi0Jc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCWNoYXIgYnVmWzEwICsgSUZOQU1TSVpdOwogCiAJZGlyID0gc2RhdGEtPmRlYnVnZnMuZGlyOwogCiAJaWYgKCFkaXIpCi0JCXJldHVybiAwOworCQlyZXR1cm47CiAKLQlzcHJpbnRmKGJ1ZiwgIm5ldGRldjolcyIsIGRldi0+bmFtZSk7CisJc3ByaW50ZihidWYsICJuZXRkZXY6JXMiLCBzZGF0YS0+bmFtZSk7CiAJaWYgKCFkZWJ1Z2ZzX3JlbmFtZShkaXItPmRfcGFyZW50LCBkaXIsIGRpci0+ZF9wYXJlbnQsIGJ1ZikpCiAJCXByaW50ayhLRVJOX0VSUiAibWFjODAyMTE6IGRlYnVnZnM6IGZhaWxlZCB0byByZW5hbWUgZGVidWdmcyAiCiAJCSAgICAgICAiZGlyIHRvICVzXG4iLCBidWYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbWFjODAyMTFfZGVidWdmc19uZXRkZXZfbm90aWZpZXIgPSB7Ci0JLm5vdGlmaWVyX2NhbGwgPSBuZXRkZXZfbm90aWZ5LAotfTsKLQotdm9pZCBpZWVlODAyMTFfZGVidWdmc19uZXRkZXZfaW5pdCh2b2lkKQotewotCWludCBlcnI7Ci0KLQllcnIgPSByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm1hYzgwMjExX2RlYnVnZnNfbmV0ZGV2X25vdGlmaWVyKTsKLQlpZiAoZXJyKSB7Ci0JCXByaW50ayhLRVJOX0VSUgotCQkgICAgICAgIm1hYzgwMjExOiBmYWlsZWQgdG8gaW5zdGFsbCBuZXRkZXYgbm90aWZpZXIsIgotCQkgICAgICAgIiBkaXNhYmxpbmcgcGVyLW5ldGRldiBkZWJ1Z2ZzIVxuIik7Ci0JfSBlbHNlCi0JCW5vdGlmX3JlZ2lzdGVyZWQgPSAxOwotfQotCi12b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX25ldGRldl9leGl0KHZvaWQpCi17Ci0JdW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJm1hYzgwMjExX2RlYnVnZnNfbmV0ZGV2X25vdGlmaWVyKTsKLQlub3RpZl9yZWdpc3RlcmVkID0gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9kZWJ1Z2ZzX25ldGRldi5oIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmgKaW5kZXggN2FmNzMxZi4uNzkwMjVlNyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmgKKysrIGIvbmV0L21hYzgwMjExL2RlYnVnZnNfbmV0ZGV2LmgKQEAgLTYsOCArNiw3IEBACiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfYWRkX25ldGRldihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSk7CiB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX3JlbW92ZV9uZXRkZXYoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwotdm9pZCBpZWVlODAyMTFfZGVidWdmc19uZXRkZXZfaW5pdCh2b2lkKTsKLXZvaWQgaWVlZTgwMjExX2RlYnVnZnNfbmV0ZGV2X2V4aXQodm9pZCk7Cit2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX3JlbmFtZV9uZXRkZXYoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19hZGRfbmV0ZGV2KAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQpAQCAtMTUsMTAgKzE0LDggQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19yZW1vdmVfbmV0ZGV2KAogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoge30KLXN0YXRpYyBpbmxpbmUgdm9pZCBpZWVlODAyMTFfZGVidWdmc19uZXRkZXZfaW5pdCh2b2lkKQote30KLQotc3RhdGljIGlubGluZSB2b2lkIGllZWU4MDIxMV9kZWJ1Z2ZzX25ldGRldl9leGl0KHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgaWVlZTgwMjExX2RlYnVnZnNfcmVuYW1lX25ldGRldigKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHt9CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RlYnVnZnNfc3RhLmMgYi9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYwppbmRleCAzZjQxNjA4Li5kOTI4MDBiIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYworKysgYi9uZXQvbWFjODAyMTEvZGVidWdmc19zdGEuYwpAQCAtNDQsNyArNDQsNyBAQAogCQlTVEFfT1BTKG5hbWUpCiAKIFNUQV9GSUxFKGFpZCwgc3RhLmFpZCwgRCk7Ci1TVEFfRklMRShkZXYsIHNkYXRhLT5kZXYtPm5hbWUsIFMpOworU1RBX0ZJTEUoZGV2LCBzZGF0YS0+bmFtZSwgUyk7CiBTVEFfRklMRShyeF9wYWNrZXRzLCByeF9wYWNrZXRzLCBMVSk7CiBTVEFfRklMRSh0eF9wYWNrZXRzLCB0eF9wYWNrZXRzLCBMVSk7CiBTVEFfRklMRShyeF9ieXRlcywgcnhfYnl0ZXMsIExVKTsKQEAgLTEyMCwzNiArMTIwLDM4IEBACiBzdGF0aWMgc3NpemVfdCBzdGFfYWdnX3N0YXR1c19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqdXNlcmJ1ZiwKIAkJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JY2hhciBidWZbMzAgKyBTVEFfVElEX05VTSAqIDcwXSwgKnAgPSBidWY7CisJY2hhciBidWZbNjQgKyBTVEFfVElEX05VTSAqIDQwXSwgKnAgPSBidWY7CiAJaW50IGk7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAlzcGluX2xvY2tfYmgoJnN0YS0+bG9jayk7Ci0JcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJuZXh0IGRpYWxvZ190b2tlbiBpcyAlIzAyeFxuIiwKKwlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJuZXh0IGRpYWxvZ190b2tlbjogJSMwMnhcbiIsCiAJCQlzdGEtPmFtcGR1X21sbWUuZGlhbG9nX3Rva2VuX2FsbG9jYXRvciArIDEpOworCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpICsgYnVmIC0gcCwKKwkJICAgICAgICJUSURcdFx0UlhcdERUS05cdFNTTlx0XHRUWFx0RFRLTlx0U1NOXHRwZW5kaW5nXG4iKTsKIAlmb3IgKGkgPSAwOyBpIDwgU1RBX1RJRF9OVU07IGkrKykgewotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIlRJRCAlMDJkOiIsIGkpOwotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIiBSWD0leCIsCisJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpICsgYnVmIC0gcCwgIiUwMmQiLCBpKTsKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikgKyBidWYgLSBwLCAiXHRcdCV4IiwKIAkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W2ldKTsKLQkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIvRFRLTj0lIy4yeCIsCisJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpICsgYnVmIC0gcCwgIlx0JSMuMngiLAogCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfc3RhdGVfcnhbaV0gPwogCQkJCXN0YS0+YW1wZHVfbWxtZS50aWRfcnhbaV0tPmRpYWxvZ190b2tlbiA6IDApOwotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIi9TU049JSMuM3giLAorCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJcdCUjLjN4IiwKIAkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3J4W2ldID8KIAkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldLT5zc24gOiAwKTsKIAotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIiBUWD0leCIsCisJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpICsgYnVmIC0gcCwgIlx0XHQleCIsCiAJCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFtpXSk7Ci0JCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiL0RUS049JSMuMngiLAorCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJcdCUjLjJ4IiwKIAkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3N0YXRlX3R4W2ldID8KIAkJCQlzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldLT5kaWFsb2dfdG9rZW4gOiAwKTsKLQkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIvU1NOPSUjLjN4IiwKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikgKyBidWYgLSBwLCAiXHQlIy4zeCIsCiAJCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFtpXSA/CiAJCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF90eFtpXS0+c3NuIDogMCk7Ci0JCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiL3BlbmRpbmc9JTAzZCIsCisJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpICsgYnVmIC0gcCwgIlx0JTAzZCIsCiAJCQkJc3RhLT5hbXBkdV9tbG1lLnRpZF9zdGF0ZV90eFtpXSA/CiAJCQkJc2tiX3F1ZXVlX2xlbigmc3RhLT5hbXBkdV9tbG1lLnRpZF90eFtpXS0+cGVuZGluZykgOiAwKTsKLQkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJcbiIpOworCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJcbiIpOwogCX0KIAlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIApAQCAtMTYwLDcgKzE2MiwxMiBAQAogc3RhdGljIHNzaXplX3Qgc3RhX2h0X2NhcGFfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKnVzZXJidWYsCiAJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JY2hhciBidWZbMjAwXSwgKnAgPSBidWY7CisjZGVmaW5lIFBSSU5UX0hUX0NBUChfY29uZCwgX3N0cikgXAorCWRvIHsgXAorCWlmIChfY29uZCkgXAorCQkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJcdCIgX3N0ciAiXG4iKTsgXAorCX0gd2hpbGUgKDApCisJY2hhciBidWZbNTEyXSwgKnAgPSBidWY7CiAJaW50IGk7CiAJc3RydWN0IHN0YV9pbmZvICpzdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodGMgPSAmc3RhLT5zdGEuaHRfY2FwOwpAQCAtMTY4LDE1ICsxNzUsNjQgQEAKIAlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKSArIGJ1ZiAtIHAsICJodCAlc3N1cHBvcnRlZFxuIiwKIAkJCWh0Yy0+aHRfc3VwcG9ydGVkID8gIiIgOiAibm90ICIpOwogCWlmIChodGMtPmh0X3N1cHBvcnRlZCkgewotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgImNhcDogJSMuMnhcbiIsIGh0Yy0+Y2FwKTsKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJjYXA6ICUjLjR4XG4iLCBodGMtPmNhcCk7CisKKwkJUFJJTlRfSFRfQ0FQKChodGMtPmNhcCAmIEJJVCgwKSksICJSWCBMRENQIik7CisJCVBSSU5UX0hUX0NBUCgoaHRjLT5jYXAgJiBCSVQoMSkpLCAiSFQyMC9IVDQwIik7CisJCVBSSU5UX0hUX0NBUCghKGh0Yy0+Y2FwICYgQklUKDEpKSwgIkhUMjAiKTsKKworCQlQUklOVF9IVF9DQVAoKChodGMtPmNhcCA+PiAyKSAmIDB4MykgPT0gMCwgIlN0YXRpYyBTTSBQb3dlciBTYXZlIik7CisJCVBSSU5UX0hUX0NBUCgoKGh0Yy0+Y2FwID4+IDIpICYgMHgzKSA9PSAxLCAiRHluYW1pYyBTTSBQb3dlciBTYXZlIik7CisJCVBSSU5UX0hUX0NBUCgoKGh0Yy0+Y2FwID4+IDIpICYgMHgzKSA9PSAzLCAiU00gUG93ZXIgU2F2ZSBkaXNhYmxlZCIpOworCisJCVBSSU5UX0hUX0NBUCgoaHRjLT5jYXAgJiBCSVQoNCkpLCAiUlggR3JlZW5maWVsZCIpOworCQlQUklOVF9IVF9DQVAoKGh0Yy0+Y2FwICYgQklUKDUpKSwgIlJYIEhUMjAgU0dJIik7CisJCVBSSU5UX0hUX0NBUCgoaHRjLT5jYXAgJiBCSVQoNikpLCAiUlggSFQ0MCBTR0kiKTsKKwkJUFJJTlRfSFRfQ0FQKChodGMtPmNhcCAmIEJJVCg3KSksICJUWCBTVEJDIik7CisKKwkJUFJJTlRfSFRfQ0FQKCgoaHRjLT5jYXAgPj4gOCkgJiAweDMpID09IDAsICJObyBSWCBTVEJDIik7CisJCVBSSU5UX0hUX0NBUCgoKGh0Yy0+Y2FwID4+IDgpICYgMHgzKSA9PSAxLCAiUlggU1RCQyAxLXN0cmVhbSIpOworCQlQUklOVF9IVF9DQVAoKChodGMtPmNhcCA+PiA4KSAmIDB4MykgPT0gMiwgIlJYIFNUQkMgMi1zdHJlYW1zIik7CisJCVBSSU5UX0hUX0NBUCgoKGh0Yy0+Y2FwID4+IDgpICYgMHgzKSA9PSAzLCAiUlggU1RCQyAzLXN0cmVhbXMiKTsKKworCQlQUklOVF9IVF9DQVAoKGh0Yy0+Y2FwICYgQklUKDEwKSksICJIVCBEZWxheWVkIEJsb2NrIEFjayIpOworCisJCVBSSU5UX0hUX0NBUCgoaHRjLT5jYXAgJiBCSVQoMTEpKSwgIk1heCBBTVNEVSBsZW5ndGg6ICIKKwkJCSAgICAgIjM4MzkgYnl0ZXMiKTsKKwkJUFJJTlRfSFRfQ0FQKCEoaHRjLT5jYXAgJiBCSVQoMTEpKSwgIk1heCBBTVNEVSBsZW5ndGg6ICIKKwkJCSAgICAgIjc5MzUgYnl0ZXMiKTsKKworCQkvKgorCQkgKiBGb3IgYmVhY29ucyBhbmQgcHJvYmUgcmVzcG9uc2UgdGhpcyB3b3VsZCBtZWFuIHRoZSBCU1MKKwkJICogZG9lcyBvciBkb2VzIG5vdCBhbGxvdyB0aGUgdXNhZ2Ugb2YgRFNTUy9DQ0sgSFQ0MC4KKwkJICogT3RoZXJ3aXNlIGl0IG1lYW5zIHRoZSBTVEEgZG9lcyBvciBkb2VzIG5vdCB1c2UKKwkJICogRFNTUy9DQ0sgSFQ0MC4KKwkJICovCisJCVBSSU5UX0hUX0NBUCgoaHRjLT5jYXAgJiBCSVQoMTIpKSwgIkRTU1MvQ0NLIEhUNDAiKTsKKwkJUFJJTlRfSFRfQ0FQKCEoaHRjLT5jYXAgJiBCSVQoMTIpKSwgIk5vIERTU1MvQ0NLIEhUNDAiKTsKKworCQkvKiBCSVQoMTMpIGlzIHJlc2VydmVkICovCisKKwkJUFJJTlRfSFRfQ0FQKChodGMtPmNhcCAmIEJJVCgxNCkpLCAiNDAgTUh6IEludG9sZXJhbnQiKTsKKworCQlQUklOVF9IVF9DQVAoKGh0Yy0+Y2FwICYgQklUKDE1KSksICJMLVNJRyBUWE9QIHByb3RlY3Rpb24iKTsKKwogCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgImFtcGR1IGZhY3Rvci9kZW5zaXR5OiAlZC8lZFxuIiwKIAkJCQlodGMtPmFtcGR1X2ZhY3RvciwgaHRjLT5hbXBkdV9kZW5zaXR5KTsKIAkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJNQ1MgbWFzazoiKTsKKwogCQlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX0hUX01DU19NQVNLX0xFTjsgaSsrKQogCQkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICIgJS4yeCIsCiAJCQkJCWh0Yy0+bWNzLnJ4X21hc2tbaV0pOwotCQlwICs9IHNjbnByaW50ZihwLCBzaXplb2YoYnVmKStidWYtcCwgIlxuTUNTIHJ4IGhpZ2hlc3Q6ICVkXG4iLAotCQkJCWxlMTZfdG9fY3B1KGh0Yy0+bWNzLnJ4X2hpZ2hlc3QpKTsKKwkJcCArPSBzY25wcmludGYocCwgc2l6ZW9mKGJ1ZikrYnVmLXAsICJcbiIpOworCisJCS8qIElmIG5vdCBzZXQgdGhpcyBpcyBtZWFuaW5nbGVzcyAqLworCQlpZiAobGUxNl90b19jcHUoaHRjLT5tY3MucnhfaGlnaGVzdCkpIHsKKwkJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLAorCQkJCSAgICAgICAiTUNTIHJ4IGhpZ2hlc3Q6ICVkIE1icHNcbiIsCisJCQkJICAgICAgIGxlMTZfdG9fY3B1KGh0Yy0+bWNzLnJ4X2hpZ2hlc3QpKTsKKwkJfQorCiAJCXAgKz0gc2NucHJpbnRmKHAsIHNpemVvZihidWYpK2J1Zi1wLCAiTUNTIHR4IHBhcmFtczogJXhcbiIsCiAJCQkJaHRjLT5tY3MudHhfcGFyYW1zKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oIGIvbmV0L21hYzgwMjExL2RyaXZlci1vcHMuaAppbmRleCA5MjFkZDljLi5jM2Q4NDQwIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvZHJpdmVyLW9wcy5oCisrKyBiL25ldC9tYWM4MDIxMS9kcml2ZXItb3BzLmgKQEAgLTE0LDYgKzE0LDggQEAKIHsKIAlpbnQgcmV0OwogCisJbWlnaHRfc2xlZXAoKTsKKwogCWxvY2FsLT5zdGFydGVkID0gdHJ1ZTsKIAlzbXBfbWIoKTsKIAlyZXQgPSBsb2NhbC0+b3BzLT5zdGFydCgmbG9jYWwtPmh3KTsKQEAgLTIzLDYgKzI1LDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGRydl9zdG9wKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogeworCW1pZ2h0X3NsZWVwKCk7CisKIAlsb2NhbC0+b3BzLT5zdG9wKCZsb2NhbC0+aHcpOwogCXRyYWNlX2Rydl9zdG9wKGxvY2FsKTsKIApAQCAtMzYsMzUgKzQwLDQ3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9hZGRfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKLQlpbnQgcmV0ID0gbG9jYWwtPm9wcy0+YWRkX2ludGVyZmFjZSgmbG9jYWwtPmh3LCBjb25mKTsKLQl0cmFjZV9kcnZfYWRkX2ludGVyZmFjZShsb2NhbCwgY29uZi0+bWFjX2FkZHIsIGNvbmYtPnZpZiwgcmV0KTsKKwlpbnQgcmV0OworCisJbWlnaHRfc2xlZXAoKTsKKworCXJldCA9IGxvY2FsLT5vcHMtPmFkZF9pbnRlcmZhY2UoJmxvY2FsLT5odywgdmlmKTsKKwl0cmFjZV9kcnZfYWRkX2ludGVyZmFjZShsb2NhbCwgdmlmX3RvX3NkYXRhKHZpZiksIHJldCk7CiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGRydl9yZW1vdmVfaW50ZXJmYWNlKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiAqY29uZikKKwkJCQkJc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKIHsKLQlsb2NhbC0+b3BzLT5yZW1vdmVfaW50ZXJmYWNlKCZsb2NhbC0+aHcsIGNvbmYpOwotCXRyYWNlX2Rydl9yZW1vdmVfaW50ZXJmYWNlKGxvY2FsLCBjb25mLT5tYWNfYWRkciwgY29uZi0+dmlmKTsKKwltaWdodF9zbGVlcCgpOworCisJbG9jYWwtPm9wcy0+cmVtb3ZlX2ludGVyZmFjZSgmbG9jYWwtPmh3LCB2aWYpOworCXRyYWNlX2Rydl9yZW1vdmVfaW50ZXJmYWNlKGxvY2FsLCB2aWZfdG9fc2RhdGEodmlmKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9jb25maWcoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHUzMiBjaGFuZ2VkKQogewotCWludCByZXQgPSBsb2NhbC0+b3BzLT5jb25maWcoJmxvY2FsLT5odywgY2hhbmdlZCk7CisJaW50IHJldDsKKworCW1pZ2h0X3NsZWVwKCk7CisKKwlyZXQgPSBsb2NhbC0+b3BzLT5jb25maWcoJmxvY2FsLT5odywgY2hhbmdlZCk7CiAJdHJhY2VfZHJ2X2NvbmZpZyhsb2NhbCwgY2hhbmdlZCwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJ2X2Jzc19pbmZvX2NoYW5nZWQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkJCXN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCQlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICppbmZvLAogCQkJCQl1MzIgY2hhbmdlZCkKIHsKKwltaWdodF9zbGVlcCgpOworCiAJaWYgKGxvY2FsLT5vcHMtPmJzc19pbmZvX2NoYW5nZWQpCi0JCWxvY2FsLT5vcHMtPmJzc19pbmZvX2NoYW5nZWQoJmxvY2FsLT5odywgdmlmLCBpbmZvLCBjaGFuZ2VkKTsKLQl0cmFjZV9kcnZfYnNzX2luZm9fY2hhbmdlZChsb2NhbCwgdmlmLCBpbmZvLCBjaGFuZ2VkKTsKKwkJbG9jYWwtPm9wcy0+YnNzX2luZm9fY2hhbmdlZCgmbG9jYWwtPmh3LCAmc2RhdGEtPnZpZiwgaW5mbywgY2hhbmdlZCk7CisJdHJhY2VfZHJ2X2Jzc19pbmZvX2NoYW5nZWQobG9jYWwsIHNkYXRhLCBpbmZvLCBjaGFuZ2VkKTsKIH0KIAogc3RhdGljIGlubGluZSB1NjQgZHJ2X3ByZXBhcmVfbXVsdGljYXN0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLApAQCAtMTA2LDM2ICsxMjIsNTMgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZHJ2X3NldF9rZXkoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCQkgICAgICBlbnVtIHNldF9rZXlfY21kIGNtZCwgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJCSAgICAgIGVudW0gc2V0X2tleV9jbWQgY21kLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5KQogewotCWludCByZXQgPSBsb2NhbC0+b3BzLT5zZXRfa2V5KCZsb2NhbC0+aHcsIGNtZCwgdmlmLCBzdGEsIGtleSk7Ci0JdHJhY2VfZHJ2X3NldF9rZXkobG9jYWwsIGNtZCwgdmlmLCBzdGEsIGtleSwgcmV0KTsKKwlpbnQgcmV0OworCisJbWlnaHRfc2xlZXAoKTsKKworCXJldCA9IGxvY2FsLT5vcHMtPnNldF9rZXkoJmxvY2FsLT5odywgY21kLCAmc2RhdGEtPnZpZiwgc3RhLCBrZXkpOworCXRyYWNlX2Rydl9zZXRfa2V5KGxvY2FsLCBjbWQsIHNkYXRhLCBzdGEsIGtleSwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3VwZGF0ZV90a2lwX2tleShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfa2V5X2NvbmYgKmNvbmYsCi0JCQkJICAgICAgIGNvbnN0IHU4ICphZGRyZXNzLCB1MzIgaXYzMiwKKwkJCQkgICAgICAgc3RydWN0IHN0YV9pbmZvICpzdGEsIHUzMiBpdjMyLAogCQkJCSAgICAgICB1MTYgKnBoYXNlMWtleSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqaXN0YSA9IE5VTEw7CisKKwlpZiAoc3RhKQorCQlpc3RhID0gJnN0YS0+c3RhOworCiAJaWYgKGxvY2FsLT5vcHMtPnVwZGF0ZV90a2lwX2tleSkKLQkJbG9jYWwtPm9wcy0+dXBkYXRlX3RraXBfa2V5KCZsb2NhbC0+aHcsIGNvbmYsIGFkZHJlc3MsCi0JCQkJCSAgICBpdjMyLCBwaGFzZTFrZXkpOwotCXRyYWNlX2Rydl91cGRhdGVfdGtpcF9rZXkobG9jYWwsIGNvbmYsIGFkZHJlc3MsIGl2MzIpOworCQlsb2NhbC0+b3BzLT51cGRhdGVfdGtpcF9rZXkoJmxvY2FsLT5odywgJnNkYXRhLT52aWYsIGNvbmYsCisJCQkJCSAgICBpc3RhLCBpdjMyLCBwaGFzZTFrZXkpOworCXRyYWNlX2Rydl91cGRhdGVfdGtpcF9rZXkobG9jYWwsIHNkYXRhLCBjb25mLCBpc3RhLCBpdjMyKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZHJ2X2h3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgICAgICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpCiB7Ci0JaW50IHJldCA9IGxvY2FsLT5vcHMtPmh3X3NjYW4oJmxvY2FsLT5odywgcmVxKTsKKwlpbnQgcmV0OworCisJbWlnaHRfc2xlZXAoKTsKKworCXJldCA9IGxvY2FsLT5vcHMtPmh3X3NjYW4oJmxvY2FsLT5odywgcmVxKTsKIAl0cmFjZV9kcnZfaHdfc2Nhbihsb2NhbCwgcmVxLCByZXQpOwogCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfc3dfc2Nhbl9zdGFydChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKKwltaWdodF9zbGVlcCgpOworCiAJaWYgKGxvY2FsLT5vcHMtPnN3X3NjYW5fc3RhcnQpCiAJCWxvY2FsLT5vcHMtPnN3X3NjYW5fc3RhcnQoJmxvY2FsLT5odyk7CiAJdHJhY2VfZHJ2X3N3X3NjYW5fc3RhcnQobG9jYWwpOwpAQCAtMTQzLDYgKzE3Niw4IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfc3dfc2Nhbl9jb21wbGV0ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKKwltaWdodF9zbGVlcCgpOworCiAJaWYgKGxvY2FsLT5vcHMtPnN3X3NjYW5fY29tcGxldGUpCiAJCWxvY2FsLT5vcHMtPnN3X3NjYW5fY29tcGxldGUoJmxvY2FsLT5odyk7CiAJdHJhY2VfZHJ2X3N3X3NjYW5fY29tcGxldGUobG9jYWwpOwpAQCAtMTUzLDYgKzE4OCw4IEBACiB7CiAJaW50IHJldCA9IC1FT1BOT1RTVVBQOwogCisJbWlnaHRfc2xlZXAoKTsKKwogCWlmIChsb2NhbC0+b3BzLT5nZXRfc3RhdHMpCiAJCXJldCA9IGxvY2FsLT5vcHMtPmdldF9zdGF0cygmbG9jYWwtPmh3LCBzdGF0cyk7CiAJdHJhY2VfZHJ2X2dldF9zdGF0cyhsb2NhbCwgc3RhdHMsIHJldCk7CkBAIC0xNzIsNDMgKzIwOSw5MyBAQAogCQkJCQl1MzIgdmFsdWUpCiB7CiAJaW50IHJldCA9IDA7CisKKwltaWdodF9zbGVlcCgpOworCiAJaWYgKGxvY2FsLT5vcHMtPnNldF9ydHNfdGhyZXNob2xkKQogCQlyZXQgPSBsb2NhbC0+b3BzLT5zZXRfcnRzX3RocmVzaG9sZCgmbG9jYWwtPmh3LCB2YWx1ZSk7CiAJdHJhY2VfZHJ2X3NldF9ydHNfdGhyZXNob2xkKGxvY2FsLCB2YWx1ZSwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW5saW5lIGludCBkcnZfc2V0X2NvdmVyYWdlX2NsYXNzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCQkgdTggdmFsdWUpCit7CisJaW50IHJldCA9IDA7CisJbWlnaHRfc2xlZXAoKTsKKworCWlmIChsb2NhbC0+b3BzLT5zZXRfY292ZXJhZ2VfY2xhc3MpCisJCWxvY2FsLT5vcHMtPnNldF9jb3ZlcmFnZV9jbGFzcygmbG9jYWwtPmh3LCB2YWx1ZSk7CisJZWxzZQorCQlyZXQgPSAtRU9QTk9UU1VQUDsKKworCXRyYWNlX2Rydl9zZXRfY292ZXJhZ2VfY2xhc3MobG9jYWwsIHZhbHVlLCByZXQpOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfc3RhX25vdGlmeShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKIAkJCQkgIGVudW0gc3RhX25vdGlmeV9jbWQgY21kLAogCQkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKIHsKIAlpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkKLQkJbG9jYWwtPm9wcy0+c3RhX25vdGlmeSgmbG9jYWwtPmh3LCB2aWYsIGNtZCwgc3RhKTsKLQl0cmFjZV9kcnZfc3RhX25vdGlmeShsb2NhbCwgdmlmLCBjbWQsIHN0YSk7CisJCWxvY2FsLT5vcHMtPnN0YV9ub3RpZnkoJmxvY2FsLT5odywgJnNkYXRhLT52aWYsIGNtZCwgc3RhKTsKKwl0cmFjZV9kcnZfc3RhX25vdGlmeShsb2NhbCwgc2RhdGEsIGNtZCwgc3RhKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZHJ2X3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJaW50IHJldCA9IDA7CisKKwltaWdodF9zbGVlcCgpOworCisJaWYgKGxvY2FsLT5vcHMtPnN0YV9hZGQpCisJCXJldCA9IGxvY2FsLT5vcHMtPnN0YV9hZGQoJmxvY2FsLT5odywgJnNkYXRhLT52aWYsIHN0YSk7CisJZWxzZSBpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkKKwkJbG9jYWwtPm9wcy0+c3RhX25vdGlmeSgmbG9jYWwtPmh3LCAmc2RhdGEtPnZpZiwKKwkJCQkJU1RBX05PVElGWV9BREQsIHN0YSk7CisKKwl0cmFjZV9kcnZfc3RhX2FkZChsb2NhbCwgc2RhdGEsIHN0YSwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcnZfc3RhX3JlbW92ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSkKK3sKKwltaWdodF9zbGVlcCgpOworCisJaWYgKGxvY2FsLT5vcHMtPnN0YV9yZW1vdmUpCisJCWxvY2FsLT5vcHMtPnN0YV9yZW1vdmUoJmxvY2FsLT5odywgJnNkYXRhLT52aWYsIHN0YSk7CisJZWxzZSBpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkKKwkJbG9jYWwtPm9wcy0+c3RhX25vdGlmeSgmbG9jYWwtPmh3LCAmc2RhdGEtPnZpZiwKKwkJCQkJU1RBX05PVElGWV9SRU1PVkUsIHN0YSk7CisKKwl0cmFjZV9kcnZfc3RhX3JlbW92ZShsb2NhbCwgc2RhdGEsIHN0YSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGRydl9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1MTYgcXVldWUsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqcGFyYW1zKQogewogCWludCByZXQgPSAtRU9QTk9UU1VQUDsKKworCW1pZ2h0X3NsZWVwKCk7CisKIAlpZiAobG9jYWwtPm9wcy0+Y29uZl90eCkKIAkJcmV0ID0gbG9jYWwtPm9wcy0+Y29uZl90eCgmbG9jYWwtPmh3LCBxdWV1ZSwgcGFyYW1zKTsKIAl0cmFjZV9kcnZfY29uZl90eChsb2NhbCwgcXVldWUsIHBhcmFtcywgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW5saW5lIGludCBkcnZfZ2V0X3R4X3N0YXRzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfc3RhdHMgKnN0YXRzKQotewotCWludCByZXQgPSBsb2NhbC0+b3BzLT5nZXRfdHhfc3RhdHMoJmxvY2FsLT5odywgc3RhdHMpOwotCXRyYWNlX2Rydl9nZXRfdHhfc3RhdHMobG9jYWwsIHN0YXRzLCByZXQpOwotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdTY0IGRydl9nZXRfdHNmKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewogCXU2NCByZXQgPSAtMVVMTDsKKworCW1pZ2h0X3NsZWVwKCk7CisKIAlpZiAobG9jYWwtPm9wcy0+Z2V0X3RzZikKIAkJcmV0ID0gbG9jYWwtPm9wcy0+Z2V0X3RzZigmbG9jYWwtPmh3KTsKIAl0cmFjZV9kcnZfZ2V0X3RzZihsb2NhbCwgcmV0KTsKQEAgLTIxNyw2ICszMDQsOCBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZHJ2X3NldF90c2Yoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU2NCB0c2YpCiB7CisJbWlnaHRfc2xlZXAoKTsKKwogCWlmIChsb2NhbC0+b3BzLT5zZXRfdHNmKQogCQlsb2NhbC0+b3BzLT5zZXRfdHNmKCZsb2NhbC0+aHcsIHRzZik7CiAJdHJhY2VfZHJ2X3NldF90c2YobG9jYWwsIHRzZik7CkBAIC0yMjQsNiArMzEzLDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGRydl9yZXNldF90c2Yoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CisJbWlnaHRfc2xlZXAoKTsKKwogCWlmIChsb2NhbC0+b3BzLT5yZXNldF90c2YpCiAJCWxvY2FsLT5vcHMtPnJlc2V0X3RzZigmbG9jYWwtPmh3KTsKIAl0cmFjZV9kcnZfcmVzZXRfdHNmKGxvY2FsKTsKQEAgLTIzMiw2ICszMjMsOSBAQAogc3RhdGljIGlubGluZSBpbnQgZHJ2X3R4X2xhc3RfYmVhY29uKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewogCWludCByZXQgPSAxOworCisJbWlnaHRfc2xlZXAoKTsKKwogCWlmIChsb2NhbC0+b3BzLT50eF9sYXN0X2JlYWNvbikKIAkJcmV0ID0gbG9jYWwtPm9wcy0+dHhfbGFzdF9iZWFjb24oJmxvY2FsLT5odyk7CiAJdHJhY2VfZHJ2X3R4X2xhc3RfYmVhY29uKGxvY2FsLCByZXQpOwpAQCAtMjM5LDIzICszMzMsMzQgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQgZHJ2X2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCSAgIGVudW0gaWVlZTgwMjExX2FtcGR1X21sbWVfYWN0aW9uIGFjdGlvbiwKIAkJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLCB1MTYgdGlkLAogCQkJCSAgIHUxNiAqc3NuKQogewogCWludCByZXQgPSAtRU9QTk9UU1VQUDsKIAlpZiAobG9jYWwtPm9wcy0+YW1wZHVfYWN0aW9uKQotCQlyZXQgPSBsb2NhbC0+b3BzLT5hbXBkdV9hY3Rpb24oJmxvY2FsLT5odywgdmlmLCBhY3Rpb24sCisJCXJldCA9IGxvY2FsLT5vcHMtPmFtcGR1X2FjdGlvbigmbG9jYWwtPmh3LCAmc2RhdGEtPnZpZiwgYWN0aW9uLAogCQkJCQkgICAgICAgc3RhLCB0aWQsIHNzbik7Ci0JdHJhY2VfZHJ2X2FtcGR1X2FjdGlvbihsb2NhbCwgdmlmLCBhY3Rpb24sIHN0YSwgdGlkLCBzc24sIHJldCk7CisJdHJhY2VfZHJ2X2FtcGR1X2FjdGlvbihsb2NhbCwgc2RhdGEsIGFjdGlvbiwgc3RhLCB0aWQsIHNzbiwgcmV0KTsKIAlyZXR1cm4gcmV0OwogfQogCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkcnZfcmZraWxsX3BvbGwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CisJbWlnaHRfc2xlZXAoKTsKKwogCWlmIChsb2NhbC0+b3BzLT5yZmtpbGxfcG9sbCkKIAkJbG9jYWwtPm9wcy0+cmZraWxsX3BvbGwoJmxvY2FsLT5odyk7CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkcnZfZmx1c2goc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGJvb2wgZHJvcCkKK3sKKwltaWdodF9zbGVlcCgpOworCisJdHJhY2VfZHJ2X2ZsdXNoKGxvY2FsLCBkcm9wKTsKKwlpZiAobG9jYWwtPm9wcy0+Zmx1c2gpCisJCWxvY2FsLT5vcHMtPmZsdXNoKCZsb2NhbC0+aHcsIGRyb3ApOworfQogI2VuZGlmIC8qIF9fTUFDODAyMTFfRFJJVkVSX09QUyAqLwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2RyaXZlci10cmFjZS5oIGIvbmV0L21hYzgwMjExL2RyaXZlci10cmFjZS5oCmluZGV4IGRhODQ5N2UuLjQxYmFmNzMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9kcml2ZXItdHJhY2UuaAorKysgYi9uZXQvbWFjODAyMTEvZHJpdmVyLXRyYWNlLmgKQEAgLTI1LDEwICsyNSwxMiBAQAogI2RlZmluZSBTVEFfUFJfRk1UCSIgc3RhOiVwTSIKICNkZWZpbmUgU1RBX1BSX0FSRwlfX2VudHJ5LT5zdGFfYWRkcgogCi0jZGVmaW5lIFZJRl9FTlRSWQlfX2ZpZWxkKGVudW0gbmw4MDIxMV9pZnR5cGUsIHZpZl90eXBlKSBfX2ZpZWxkKHZvaWQgKiwgdmlmKQotI2RlZmluZSBWSUZfQVNTSUdOCV9fZW50cnktPnZpZl90eXBlID0gdmlmID8gdmlmLT50eXBlIDogMDsgX19lbnRyeS0+dmlmID0gdmlmCi0jZGVmaW5lIFZJRl9QUl9GTVQJIiB2aWY6JXAoJWQpIgotI2RlZmluZSBWSUZfUFJfQVJHCV9fZW50cnktPnZpZiwgX19lbnRyeS0+dmlmX3R5cGUKKyNkZWZpbmUgVklGX0VOVFJZCV9fZmllbGQoZW51bSBubDgwMjExX2lmdHlwZSwgdmlmX3R5cGUpIF9fZmllbGQodm9pZCAqLCBzZGF0YSkgXAorCQkJX19zdHJpbmcodmlmX25hbWUsIHNkYXRhLT5kZXYgPyBzZGF0YS0+ZGV2LT5uYW1lIDogIjxub2Rldj4iKQorI2RlZmluZSBWSUZfQVNTSUdOCV9fZW50cnktPnZpZl90eXBlID0gc2RhdGEtPnZpZi50eXBlOyBfX2VudHJ5LT5zZGF0YSA9IHNkYXRhOyBcCisJCQlfX2Fzc2lnbl9zdHIodmlmX25hbWUsIHNkYXRhLT5kZXYgPyBzZGF0YS0+ZGV2LT5uYW1lIDogIjxub2Rldj4iKQorI2RlZmluZSBWSUZfUFJfRk1UCSIgdmlmOiVzKCVkKSIKKyNkZWZpbmUgVklGX1BSX0FSRwlfX2dldF9zdHIodmlmX25hbWUpLCBfX2VudHJ5LT52aWZfdHlwZQogCiBUUkFDRV9FVkVOVChkcnZfc3RhcnQsCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGludCByZXQpLApAQCAtNzAsMTEgKzcyLDEwIEBACiAKIFRSQUNFX0VWRU5UKGRydl9hZGRfaW50ZXJmYWNlLAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkgY29uc3QgdTggKmFkZHIsCi0JCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCSBpbnQgcmV0KSwKIAotCVRQX0FSR1MobG9jYWwsIGFkZHIsIHZpZiwgcmV0KSwKKwlUUF9BUkdTKGxvY2FsLCBzZGF0YSwgcmV0KSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCUxPQ0FMX0VOVFJZCkBAIC04Niw3ICs4Nyw3IEBACiAJVFBfZmFzdF9hc3NpZ24oCiAJCUxPQ0FMX0FTU0lHTjsKIAkJVklGX0FTU0lHTjsKLQkJbWVtY3B5KF9fZW50cnktPmFkZHIsIGFkZHIsIDYpOworCQltZW1jcHkoX19lbnRyeS0+YWRkciwgc2RhdGEtPnZpZi5hZGRyLCA2KTsKIAkJX19lbnRyeS0+cmV0ID0gcmV0OwogCSksCiAKQEAgLTk3LDEwICs5OCw5IEBACiApOwogCiBUUkFDRV9FVkVOVChkcnZfcmVtb3ZlX2ludGVyZmFjZSwKLQlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKLQkJIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKSwKKwlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpLAogCi0JVFBfQVJHUyhsb2NhbCwgYWRkciwgdmlmKSwKKwlUUF9BUkdTKGxvY2FsLCBzZGF0YSksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlMT0NBTF9FTlRSWQpAQCAtMTExLDcgKzExMSw3IEBACiAJVFBfZmFzdF9hc3NpZ24oCiAJCUxPQ0FMX0FTU0lHTjsKIAkJVklGX0FTU0lHTjsKLQkJbWVtY3B5KF9fZW50cnktPmFkZHIsIGFkZHIsIDYpOworCQltZW1jcHkoX19lbnRyeS0+YWRkciwgc2RhdGEtPnZpZi5hZGRyLCA2KTsKIAkpLAogCiAJVFBfcHJpbnRrKApAQCAtMTQwLDYgKzE0MCw3IEBACiAJCV9fZmllbGQodTgsIHNob3J0X2ZyYW1lX21heF90eF9jb3VudCkKIAkJX19maWVsZChpbnQsIGNlbnRlcl9mcmVxKQogCQlfX2ZpZWxkKGludCwgY2hhbm5lbF90eXBlKQorCQlfX2ZpZWxkKGludCwgc21wcykKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCkBAIC0xNTUsNiArMTU2LDcgQEAKIAkJX19lbnRyeS0+c2hvcnRfZnJhbWVfbWF4X3R4X2NvdW50ID0gbG9jYWwtPmh3LmNvbmYuc2hvcnRfZnJhbWVfbWF4X3R4X2NvdW50OwogCQlfX2VudHJ5LT5jZW50ZXJfZnJlcSA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxOwogCQlfX2VudHJ5LT5jaGFubmVsX3R5cGUgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsX3R5cGU7CisJCV9fZW50cnktPnNtcHMgPSBsb2NhbC0+aHcuY29uZi5zbXBzX21vZGU7CiAJKSwKIAogCVRQX3ByaW50aygKQEAgLTE2NSwxMSArMTY3LDExIEBACiAKIFRSQUNFX0VWRU5UKGRydl9ic3NfaW5mb19jaGFuZ2VkLAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywKIAkJIHUzMiBjaGFuZ2VkKSwKIAotCVRQX0FSR1MobG9jYWwsIHZpZiwgaW5mbywgY2hhbmdlZCksCisJVFBfQVJHUyhsb2NhbCwgc2RhdGEsIGluZm8sIGNoYW5nZWQpLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJTE9DQUxfRU5UUlkKQEAgLTI5MywxMSArMjk1LDExIEBACiAKIFRSQUNFX0VWRU5UKGRydl9zZXRfa2V5LAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkgZW51bSBzZXRfa2V5X2NtZCBjbWQsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCSBlbnVtIHNldF9rZXlfY21kIGNtZCwgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCSBzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkgc3RydWN0IGllZWU4MDIxMV9rZXlfY29uZiAqa2V5LCBpbnQgcmV0KSwKIAotCVRQX0FSR1MobG9jYWwsIGNtZCwgdmlmLCBzdGEsIGtleSwgcmV0KSwKKwlUUF9BUkdTKGxvY2FsLCBjbWQsIHNkYXRhLCBzdGEsIGtleSwgcmV0KSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCUxPQ0FMX0VOVFJZCkBAIC0zMjksMjYgKzMzMSwyOSBAQAogCiBUUkFDRV9FVkVOVChkcnZfdXBkYXRlX3RraXBfa2V5LAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCSBzdHJ1Y3QgaWVlZTgwMjExX2tleV9jb25mICpjb25mLAotCQkgY29uc3QgdTggKmFkZHJlc3MsIHUzMiBpdjMyKSwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIHUzMiBpdjMyKSwKIAotCVRQX0FSR1MobG9jYWwsIGNvbmYsIGFkZHJlc3MsIGl2MzIpLAorCVRQX0FSR1MobG9jYWwsIHNkYXRhLCBjb25mLCBzdGEsIGl2MzIpLAogCiAJVFBfU1RSVUNUX19lbnRyeSgKIAkJTE9DQUxfRU5UUlkKLQkJX19hcnJheSh1OCwgYWRkciwgNikKKwkJVklGX0VOVFJZCisJCVNUQV9FTlRSWQogCQlfX2ZpZWxkKHUzMiwgaXYzMikKIAkpLAogCiAJVFBfZmFzdF9hc3NpZ24oCiAJCUxPQ0FMX0FTU0lHTjsKLQkJbWVtY3B5KF9fZW50cnktPmFkZHIsIGFkZHJlc3MsIDYpOworCQlWSUZfQVNTSUdOOworCQlTVEFfQVNTSUdOOwogCQlfX2VudHJ5LT5pdjMyID0gaXYzMjsKIAkpLAogCiAJVFBfcHJpbnRrKAotCQlMT0NBTF9QUl9GTVQgIiBhZGRyOiVwTSBpdjMyOiUjeCIsCi0JCUxPQ0FMX1BSX0FSRywgX19lbnRyeS0+YWRkciwgX19lbnRyeS0+aXYzMgorCQlMT0NBTF9QUl9GTVQgVklGX1BSX0ZNVCBTVEFfUFJfRk1UICIgaXYzMjolI3giLAorCQlMT0NBTF9QUl9BUkcsVklGX1BSX0FSRyxTVEFfUFJfQVJHLCBfX2VudHJ5LT5pdjMyCiAJKQogKTsKIApAQCAtNDg5LDEzICs0OTQsMzYgQEAKIAkpCiApOwogCitUUkFDRV9FVkVOVChkcnZfc2V0X2NvdmVyYWdlX2NsYXNzLAorCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLCB1OCB2YWx1ZSwgaW50IHJldCksCisKKwlUUF9BUkdTKGxvY2FsLCB2YWx1ZSwgcmV0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCV9fZmllbGQodTgsIHZhbHVlKQorCQlfX2ZpZWxkKGludCwgcmV0KQorCSksCisKKwlUUF9mYXN0X2Fzc2lnbigKKwkJTE9DQUxfQVNTSUdOOworCQlfX2VudHJ5LT5yZXQgPSByZXQ7CisJCV9fZW50cnktPnZhbHVlID0gdmFsdWU7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICIgdmFsdWU6JWQgcmV0OiVkIiwKKwkJTE9DQUxfUFJfQVJHLCBfX2VudHJ5LT52YWx1ZSwgX19lbnRyeS0+cmV0CisJKQorKTsKKwogVFJBQ0VfRVZFTlQoZHJ2X3N0YV9ub3RpZnksCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCi0JCSBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCSBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCwKIAkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpLAogCi0JVFBfQVJHUyhsb2NhbCwgdmlmLCBjbWQsIHN0YSksCisJVFBfQVJHUyhsb2NhbCwgc2RhdGEsIGNtZCwgc3RhKSwKIAogCVRQX1NUUlVDVF9fZW50cnkoCiAJCUxPQ0FMX0VOVFJZCkBAIC01MTcsNiArNTQ1LDU4IEBACiAJKQogKTsKIAorVFJBQ0VfRVZFTlQoZHJ2X3N0YV9hZGQsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEsIGludCByZXQpLAorCisJVFBfQVJHUyhsb2NhbCwgc2RhdGEsIHN0YSwgcmV0KSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCVZJRl9FTlRSWQorCQlTVEFfRU5UUlkKKwkJX19maWVsZChpbnQsIHJldCkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkJVklGX0FTU0lHTjsKKwkJU1RBX0FTU0lHTjsKKwkJX19lbnRyeS0+cmV0ID0gcmV0OworCSksCisKKwlUUF9wcmludGsoCisJCUxPQ0FMX1BSX0ZNVCAgVklGX1BSX0ZNVCAgU1RBX1BSX0ZNVCAiIHJldDolZCIsCisJCUxPQ0FMX1BSX0FSRywgVklGX1BSX0FSRywgU1RBX1BSX0FSRywgX19lbnRyeS0+cmV0CisJKQorKTsKKworVFJBQ0VfRVZFTlQoZHJ2X3N0YV9yZW1vdmUsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCSBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpLAorCisJVFBfQVJHUyhsb2NhbCwgc2RhdGEsIHN0YSksCisKKwlUUF9TVFJVQ1RfX2VudHJ5KAorCQlMT0NBTF9FTlRSWQorCQlWSUZfRU5UUlkKKwkJU1RBX0VOVFJZCisJKSwKKworCVRQX2Zhc3RfYXNzaWduKAorCQlMT0NBTF9BU1NJR047CisJCVZJRl9BU1NJR047CisJCVNUQV9BU1NJR047CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICBWSUZfUFJfRk1UICBTVEFfUFJfRk1ULAorCQlMT0NBTF9QUl9BUkcsIFZJRl9QUl9BUkcsIFNUQV9QUl9BUkcKKwkpCispOworCiBUUkFDRV9FVkVOVChkcnZfY29uZl90eCwKIAlUUF9QUk9UTyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgdTE2IHF1ZXVlLAogCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJhbXMgKnBhcmFtcywKQEAgLTU1MCwyOSArNjMwLDYgQEAKIAkpCiApOwogCi1UUkFDRV9FVkVOVChkcnZfZ2V0X3R4X3N0YXRzLAotCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9zdGF0cyAqc3RhdHMsCi0JCSBpbnQgcmV0KSwKLQotCVRQX0FSR1MobG9jYWwsIHN0YXRzLCByZXQpLAotCi0JVFBfU1RSVUNUX19lbnRyeSgKLQkJTE9DQUxfRU5UUlkKLQkJX19maWVsZChpbnQsIHJldCkKLQkpLAotCi0JVFBfZmFzdF9hc3NpZ24oCi0JCUxPQ0FMX0FTU0lHTjsKLQkJX19lbnRyeS0+cmV0ID0gcmV0OwotCSksCi0KLQlUUF9wcmludGsoCi0JCUxPQ0FMX1BSX0ZNVCAiIHJldDolZCIsCi0JCUxPQ0FMX1BSX0FSRywgX19lbnRyeS0+cmV0Ci0JKQotKTsKLQogVFJBQ0VfRVZFTlQoZHJ2X2dldF90c2YsCiAJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU2NCByZXQpLAogCkBAIC02NTYsMTIgKzcxMywxMiBAQAogCiBUUkFDRV9FVkVOVChkcnZfYW1wZHVfYWN0aW9uLAogCVRQX1BST1RPKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAotCQkgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkgZW51bSBpZWVlODAyMTFfYW1wZHVfbWxtZV9hY3Rpb24gYWN0aW9uLAogCQkgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSwgdTE2IHRpZCwKIAkJIHUxNiAqc3NuLCBpbnQgcmV0KSwKIAotCVRQX0FSR1MobG9jYWwsIHZpZiwgYWN0aW9uLCBzdGEsIHRpZCwgc3NuLCByZXQpLAorCVRQX0FSR1MobG9jYWwsIHNkYXRhLCBhY3Rpb24sIHN0YSwgdGlkLCBzc24sIHJldCksCiAKIAlUUF9TVFJVQ1RfX2VudHJ5KAogCQlMT0NBTF9FTlRSWQpAQCAtNjg4LDYgKzc0NSwyNyBAQAogCQlMT0NBTF9QUl9BUkcsIFZJRl9QUl9BUkcsIFNUQV9QUl9BUkcsIF9fZW50cnktPmFjdGlvbiwgX19lbnRyeS0+dGlkLCBfX2VudHJ5LT5yZXQKIAkpCiApOworCitUUkFDRV9FVkVOVChkcnZfZmx1c2gsCisJVFBfUFJPVE8oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIGJvb2wgZHJvcCksCisKKwlUUF9BUkdTKGxvY2FsLCBkcm9wKSwKKworCVRQX1NUUlVDVF9fZW50cnkoCisJCUxPQ0FMX0VOVFJZCisJCV9fZmllbGQoYm9vbCwgZHJvcCkKKwkpLAorCisJVFBfZmFzdF9hc3NpZ24oCisJCUxPQ0FMX0FTU0lHTjsKKwkJX19lbnRyeS0+ZHJvcCA9IGRyb3A7CisJKSwKKworCVRQX3ByaW50aygKKwkJTE9DQUxfUFJfRk1UICIgZHJvcDolZCIsCisJCUxPQ0FMX1BSX0FSRywgX19lbnRyeS0+ZHJvcAorCSkKKyk7CiAjZW5kaWYgLyogIV9fTUFDODAyMTFfRFJJVkVSX1RSQUNFIHx8IFRSQUNFX0hFQURFUl9NVUxUSV9SRUFEICovCiAKICN1bmRlZiBUUkFDRV9JTkNMVURFX1BBVEgKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9odC5jIGIvbmV0L21hYzgwMjExL2h0LmMKaW5kZXggZDdkY2VlNi4uYmI2NzdhNyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2h0LmMKKysrIGIvbmV0L21hYzgwMjExL2h0LmMKQEAgLTEyNSw3ICsxMjUsNyBAQAogCiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciAiCi0JCQkJCSJmb3IgZGVsYmEgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQkJCQkiZm9yIGRlbGJhIGZyYW1lXG4iLCBzZGF0YS0+bmFtZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTEzMywxMCArMTMzLDEwIEBACiAJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKIAltZW1zZXQobWdtdCwgMCwgMjQpOwogCW1lbWNweShtZ210LT5kYSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CiAJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQotCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7CiAKQEAgLTE4NSwzICsxODUsNTAgQEAKIAkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7CiAJfQogfQorCitpbnQgaWVlZTgwMjExX3NlbmRfc21wc19hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICAgICAgZW51bSBpZWVlODAyMTFfc21wc19tb2RlIHNtcHMsIGNvbnN0IHU4ICpkYSwKKwkJCSAgICAgICBjb25zdCB1OCAqYnNzaWQpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKmFjdGlvbl9mcmFtZTsKKworCS8qIDI3ID0gaGVhZGVyICsgY2F0ZWdvcnkgKyBhY3Rpb24gKyBzbXBzIG1vZGUgKi8KKwlza2IgPSBkZXZfYWxsb2Nfc2tiKDI3ICsgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisJYWN0aW9uX2ZyYW1lID0gKHZvaWQgKilza2JfcHV0KHNrYiwgMjcpOworCW1lbWNweShhY3Rpb25fZnJhbWUtPmRhLCBkYSwgRVRIX0FMRU4pOworCW1lbWNweShhY3Rpb25fZnJhbWUtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShhY3Rpb25fZnJhbWUtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOworCWFjdGlvbl9mcmFtZS0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKKwkJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CisJYWN0aW9uX2ZyYW1lLT51LmFjdGlvbi5jYXRlZ29yeSA9IFdMQU5fQ0FURUdPUllfSFQ7CisJYWN0aW9uX2ZyYW1lLT51LmFjdGlvbi51Lmh0X3NtcHMuYWN0aW9uID0gV0xBTl9IVF9BQ1RJT05fU01QUzsKKwlzd2l0Y2ggKHNtcHMpIHsKKwljYXNlIElFRUU4MDIxMV9TTVBTX0FVVE9NQVRJQzoKKwljYXNlIElFRUU4MDIxMV9TTVBTX05VTV9NT0RFUzoKKwkJV0FSTl9PTigxKTsKKwljYXNlIElFRUU4MDIxMV9TTVBTX09GRjoKKwkJYWN0aW9uX2ZyYW1lLT51LmFjdGlvbi51Lmh0X3NtcHMuc21wc19jb250cm9sID0KKwkJCQlXTEFOX0hUX1NNUFNfQ09OVFJPTF9ESVNBQkxFRDsKKwkJYnJlYWs7CisJY2FzZSBJRUVFODAyMTFfU01QU19TVEFUSUM6CisJCWFjdGlvbl9mcmFtZS0+dS5hY3Rpb24udS5odF9zbXBzLnNtcHNfY29udHJvbCA9CisJCQkJV0xBTl9IVF9TTVBTX0NPTlRST0xfU1RBVElDOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TTVBTX0RZTkFNSUM6CisJCWFjdGlvbl9mcmFtZS0+dS5hY3Rpb24udS5odF9zbXBzLnNtcHNfY29udHJvbCA9CisJCQkJV0xBTl9IVF9TTVBTX0NPTlRST0xfRFlOQU1JQzsKKwkJYnJlYWs7CisJfQorCisJLyogd2UnbGwgZG8gbW9yZSBvbiBzdGF0dXMgb2YgdGhpcyBmcmFtZSAqLworCUlFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9SRVFfVFhfU1RBVFVTOworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pYnNzLmMgYi9uZXQvbWFjODAyMTEvaWJzcy5jCmluZGV4IDIyZjBjMmEuLmYzZTk0MjQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pYnNzLmMKKysrIGIvbmV0L21hYzgwMjExL2lic3MuYwpAQCAtMTE3LDcgKzExNyw3IEBACiAJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKIAkJCQkJICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVTUCk7CiAJbWVtc2V0KG1nbXQtPmRhLCAweGZmLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KG1nbXQtPmJzc2lkLCBpZmlic3MtPmJzc2lkLCBFVEhfQUxFTik7CiAJbWdtdC0+dS5iZWFjb24uYmVhY29uX2ludCA9IGNwdV90b19sZTE2KGJlYWNvbl9pbnQpOwogCW1nbXQtPnUuYmVhY29uLnRpbWVzdGFtcCA9IGNwdV90b19sZTY0KHRzZik7CkBAIC0xODcsMTUgKzE4NywxNyBAQAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpCiB7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqY2JzcyA9CisJCWNvbnRhaW5lcl9vZigodm9pZCAqKWJzcywgc3RydWN0IGNmZzgwMjExX2JzcywgcHJpdik7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7CiAJdTMyIGJhc2ljX3JhdGVzOwogCWludCBpLCBqOwotCXUxNiBiZWFjb25faW50ID0gYnNzLT5jYnNzLmJlYWNvbl9pbnRlcnZhbDsKKwl1MTYgYmVhY29uX2ludCA9IGNic3MtPmJlYWNvbl9pbnRlcnZhbDsKIAogCWlmIChiZWFjb25faW50IDwgMTApCiAJCWJlYWNvbl9pbnQgPSAxMDsKIAotCXNiYW5kID0gc2RhdGEtPmxvY2FsLT5ody53aXBoeS0+YmFuZHNbYnNzLT5jYnNzLmNoYW5uZWwtPmJhbmRdOworCXNiYW5kID0gc2RhdGEtPmxvY2FsLT5ody53aXBoeS0+YmFuZHNbY2Jzcy0+Y2hhbm5lbC0+YmFuZF07CiAKIAliYXNpY19yYXRlcyA9IDA7CiAKQEAgLTIxMiwxMiArMjE0LDEyIEBACiAJCX0KIAl9CiAKLQlfX2llZWU4MDIxMV9zdGFfam9pbl9pYnNzKHNkYXRhLCBic3MtPmNic3MuYnNzaWQsCisJX19pZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwgY2Jzcy0+YnNzaWQsCiAJCQkJICBiZWFjb25faW50LAotCQkJCSAgYnNzLT5jYnNzLmNoYW5uZWwsCisJCQkJICBjYnNzLT5jaGFubmVsLAogCQkJCSAgYmFzaWNfcmF0ZXMsCi0JCQkJICBic3MtPmNic3MuY2FwYWJpbGl0eSwKLQkJCQkgIGJzcy0+Y2Jzcy50c2YpOworCQkJCSAgY2Jzcy0+Y2FwYWJpbGl0eSwKKwkJCQkgIGNic3MtPnRzZik7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9ic3NfaW5mbyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKQEAgLTIyOSw2ICsyMzEsNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCWludCBmcmVxOworCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmNic3M7CiAJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWw7CkBAIC0yNTIsNyArMjU1LDcgQEAKIAogCQlyY3VfcmVhZF9sb2NrKCk7CiAKLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBtZ210LT5zYSk7CisJCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgbWdtdC0+c2EpOwogCQlpZiAoc3RhKSB7CiAJCQl1MzIgcHJldl9yYXRlczsKIApAQCAtMjY2LDE2ICsyNjksMTggQEAKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IHVwZGF0ZWQgc3VwcF9yYXRlcyBzZXQgIgogCQkJCSAgICAiZm9yICVwTSBiYXNlZCBvbiBiZWFjb24gaW5mbyAoMHglbGx4IHwgIgogCQkJCSAgICAiMHglbGx4IC0+IDB4JWxseClcbiIsCi0JCQkJICAgIHNkYXRhLT5kZXYtPm5hbWUsCisJCQkJICAgIHNkYXRhLT5uYW1lLAogCQkJCSAgICBzdGEtPnN0YS5hZGRyLAogCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBwcmV2X3JhdGVzLAogCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdXBwX3JhdGVzLAogCQkJCSAgICAodW5zaWduZWQgbG9uZyBsb25nKSBzdGEtPnN0YS5zdXBwX3JhdGVzW2JhbmRdKTsKICNlbmRpZgotCQl9IGVsc2UKLQkJCWllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEsIG1nbXQtPmJzc2lkLCBtZ210LT5zYSwgc3VwcF9yYXRlcyk7Ci0KLQkJcmN1X3JlYWRfdW5sb2NrKCk7CisJCQlyY3VfcmVhZF91bmxvY2soKTsKKwkJfSBlbHNlIHsKKwkJCXJjdV9yZWFkX3VubG9jaygpOworCQkJaWVlZTgwMjExX2lic3NfYWRkX3N0YShzZGF0YSwgbWdtdC0+YnNzaWQsIG1nbXQtPnNhLAorCQkJCQkgICAgICAgc3VwcF9yYXRlcywgR0ZQX0tFUk5FTCk7CisJCX0KIAl9CiAKIAlic3MgPSBpZWVlODAyMTFfYnNzX2luZm9fdXBkYXRlKGxvY2FsLCByeF9zdGF0dXMsIG1nbXQsIGxlbiwgZWxlbXMsCkBAIC0yODMsMjUgKzI4OCwyMyBAQAogCWlmICghYnNzKQogCQlyZXR1cm47CiAKKwljYnNzID0gY29udGFpbmVyX29mKCh2b2lkICopYnNzLCBzdHJ1Y3QgY2ZnODAyMTFfYnNzLCBwcml2KTsKKwogCS8qIHdhcyBqdXN0IHVwZGF0ZWQgaW4gaWVlZTgwMjExX2Jzc19pbmZvX3VwZGF0ZSAqLwotCWJlYWNvbl90aW1lc3RhbXAgPSBic3MtPmNic3MudHNmOworCWJlYWNvbl90aW1lc3RhbXAgPSBjYnNzLT50c2Y7CiAKIAkvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIG1lcmdlIElCU1MgKi8KIAotCS8qIG1lcmdlIG9ubHkgb24gYmVhY29ucyAoPz8/KSAqLwotCWlmICghYmVhY29uKQotCQlnb3RvIHB1dF9ic3M7Ci0KIAkvKiB3ZSB1c2UgYSBmaXhlZCBCU1NJRCAqLwotCWlmIChzZGF0YS0+dS5pYnNzLmJzc2lkKQorCWlmIChzZGF0YS0+dS5pYnNzLmZpeGVkX2Jzc2lkKQogCQlnb3RvIHB1dF9ic3M7CiAKIAkvKiBub3QgYW4gSUJTUyAqLwotCWlmICghKGJzcy0+Y2Jzcy5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX0lCU1MpKQorCWlmICghKGNic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfSUJTUykpCiAJCWdvdG8gcHV0X2JzczsKIAogCS8qIGRpZmZlcmVudCBjaGFubmVsICovCi0JaWYgKGJzcy0+Y2Jzcy5jaGFubmVsICE9IGxvY2FsLT5vcGVyX2NoYW5uZWwpCisJaWYgKGNic3MtPmNoYW5uZWwgIT0gbG9jYWwtPm9wZXJfY2hhbm5lbCkKIAkJZ290byBwdXRfYnNzOwogCiAJLyogZGlmZmVyZW50IFNTSUQgKi8KQEAgLTMxMSw3ICszMTQsNyBAQAogCQlnb3RvIHB1dF9ic3M7CiAKIAkvKiBzYW1lIEJTU0lEICovCi0JaWYgKG1lbWNtcChic3MtPmNic3MuYnNzaWQsIHNkYXRhLT51Lmlic3MuYnNzaWQsIEVUSF9BTEVOKSA9PSAwKQorCWlmIChtZW1jbXAoY2Jzcy0+YnNzaWQsIHNkYXRhLT51Lmlic3MuYnNzaWQsIEVUSF9BTEVOKSA9PSAwKQogCQlnb3RvIHB1dF9ic3M7CiAKIAlpZiAocnhfc3RhdHVzLT5mbGFnICYgUlhfRkxBR19UU0ZUKSB7CkBAIC0zNjQsMTAgKzM2NywxMSBAQAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogYmVhY29uIFRTRiBoaWdoZXIgdGhhbiAiCiAJCSAgICAgICAibG9jYWwgVFNGIC0gSUJTUyBtZXJnZSB3aXRoIEJTU0lEICVwTVxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPmJzc2lkKTsKKwkJICAgICAgIHNkYXRhLT5uYW1lLCBtZ210LT5ic3NpZCk7CiAjZW5kaWYKIAkJaWVlZTgwMjExX3N0YV9qb2luX2lic3Moc2RhdGEsIGJzcyk7Ci0JCWllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEsIG1nbXQtPmJzc2lkLCBtZ210LT5zYSwgc3VwcF9yYXRlcyk7CisJCWllZWU4MDIxMV9pYnNzX2FkZF9zdGEoc2RhdGEsIG1nbXQtPmJzc2lkLCBtZ210LT5zYSwKKwkJCQkgICAgICAgc3VwcF9yYXRlcywgR0ZQX0tFUk5FTCk7CiAJfQogCiAgcHV0X2JzczoKQEAgLTM4MCw3ICszODQsOCBAQAogICogbXVzdCBiZSBjYWxsYWJsZSBpbiBhdG9taWMgY29udGV4dC4KICAqLwogc3RydWN0IHN0YV9pbmZvICppZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQl1OCAqYnNzaWQsdTggKmFkZHIsIHUzMiBzdXBwX3JhdGVzKQorCQkJCQl1OCAqYnNzaWQsdTggKmFkZHIsIHUzMiBzdXBwX3JhdGVzLAorCQkJCQlnZnBfdCBnZnApCiB7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9pYnNzICppZmlic3MgPSAmc2RhdGEtPnUuaWJzczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKQEAgLTM5NCw3ICszOTksNyBAQAogCWlmIChsb2NhbC0+bnVtX3N0YSA+PSBJRUVFODAyMTFfSUJTU19NQVhfU1RBX0VOVFJJRVMpIHsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCXByaW50ayhLRVJOX0RFQlVHICIlczogTm8gcm9vbSBmb3IgYSBuZXcgSUJTUyBTVEEgZW50cnkgJXBNXG4iLAotCQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGFkZHIpOworCQkJICAgICAgIHNkYXRhLT5uYW1lLCBhZGRyKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCkBAIC00MDYsMTAgKzQxMSwxMCBAQAogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFkZGluZyBuZXcgSUJTUyBzdGF0aW9uICVwTSAoZGV2PSVzKVxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLCBhZGRyLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLCBhZGRyLCBzZGF0YS0+bmFtZSk7CiAjZW5kaWYKIAotCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBhZGRyLCBHRlBfQVRPTUlDKTsKKwlzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgYWRkciwgZ2ZwKTsKIAlpZiAoIXN0YSkKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTQyMSw5ICs0MjYsOSBAQAogCiAJcmF0ZV9jb250cm9sX3JhdGVfaW5pdChzdGEpOwogCisJLyogSWYgaXQgZmFpbHMsIG1heWJlIHdlIHJhY2VkIGFub3RoZXIgaW5zZXJ0aW9uPyAqLwogCWlmIChzdGFfaW5mb19pbnNlcnQoc3RhKSkKLQkJcmV0dXJuIE5VTEw7Ci0KKwkJcmV0dXJuIHN0YV9pbmZvX2dldChzZGF0YSwgYWRkcik7CiAJcmV0dXJuIHN0YTsKIH0KIApAQCAtNDQ5LDYgKzQ1NCw5IEBACiAJcmV0dXJuIGFjdGl2ZTsKIH0KIAorLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggc3RhdGUgPT0gSUVFRTgwMjExX0lCU1NfTUxNRV9KT0lORUQKKyAqLwogCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfc3RhX21lcmdlX2lic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCiB7CkBAIC00NzAsNyArNDc4LDcgQEAKIAkJcmV0dXJuOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBObyBhY3RpdmUgSUJTUyBTVEFzIC0gdHJ5aW5nIHRvIHNjYW4gZm9yIG90aGVyICIKLQkgICAgICAgIklCU1MgbmV0d29ya3Mgd2l0aCBzYW1lIFNTSUQgKG1lcmdlKVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJICAgICAgICJJQlNTIG5ldHdvcmtzIHdpdGggc2FtZSBTU0lEIChtZXJnZSlcbiIsIHNkYXRhLT5uYW1lKTsKIAogCWllZWU4MDIxMV9yZXF1ZXN0X2ludGVybmFsX3NjYW4oc2RhdGEsIGlmaWJzcy0+c3NpZCwgaWZpYnNzLT5zc2lkX2xlbik7CiB9CkBAIC00OTIsMTMgKzUwMCwxMyBAQAogCQkgKiByYW5kb20gbnVtYmVyIGdlbmVyYXRvciBnZXQgZGlmZmVyZW50IEJTU0lELiAqLwogCQlnZXRfcmFuZG9tX2J5dGVzKGJzc2lkLCBFVEhfQUxFTik7CiAJCWZvciAoaSA9IDA7IGkgPCBFVEhfQUxFTjsgaSsrKQotCQkJYnNzaWRbaV0gXj0gc2RhdGEtPmRldi0+ZGV2X2FkZHJbaV07CisJCQlic3NpZFtpXSBePSBzZGF0YS0+dmlmLmFkZHJbaV07CiAJCWJzc2lkWzBdICY9IH4weDAxOwogCQlic3NpZFswXSB8PSAweDAyOwogCX0KIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogQ3JlYXRpbmcgbmV3IElCU1MgbmV0d29yaywgQlNTSUQgJXBNXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBic3NpZCk7CisJICAgICAgIHNkYXRhLT5uYW1lLCBic3NpZCk7CiAKIAlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbaWZpYnNzLT5jaGFubmVsLT5iYW5kXTsKIApAQCAtNTE0LDExICs1MjIsMTUgQEAKIAkJCQkgIGNhcGFiaWxpdHksIDApOwogfQogCisvKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBzdGF0ZSA9PSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSAorICovCisKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zdGFfZmluZF9pYnNzKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewogCXN0cnVjdCBpZWVlODAyMTFfaWZfaWJzcyAqaWZpYnNzID0gJnNkYXRhLT51Lmlic3M7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiA9IE5VTEw7CiAJY29uc3QgdTggKmJzc2lkID0gTlVMTDsKIAlpbnQgYWN0aXZlX2lic3M7CkBAIC01MjcsNyArNTM5LDcgQEAKIAlhY3RpdmVfaWJzcyA9IGllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBzdGFfZmluZF9pYnNzIChhY3RpdmVfaWJzcz0lZClcbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGFjdGl2ZV9pYnNzKTsKKwkgICAgICAgc2RhdGEtPm5hbWUsIGFjdGl2ZV9pYnNzKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwogCiAJaWYgKGFjdGl2ZV9pYnNzKQpAQCAtNTQyLDIxICs1NTQsMjMgQEAKIAkJY2hhbiA9IGlmaWJzcy0+Y2hhbm5lbDsKIAlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcihpZmlic3MtPmJzc2lkKSkKIAkJYnNzaWQgPSBpZmlic3MtPmJzc2lkOwotCWJzcyA9ICh2b2lkICopY2ZnODAyMTFfZ2V0X2Jzcyhsb2NhbC0+aHcud2lwaHksIGNoYW4sIGJzc2lkLAotCQkJCSAgICAgICBpZmlic3MtPnNzaWQsIGlmaWJzcy0+c3NpZF9sZW4sCi0JCQkJICAgICAgIFdMQU5fQ0FQQUJJTElUWV9JQlNTIHwKLQkJCQkgICAgICAgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1ksCi0JCQkJICAgICAgIGNhcGFiaWxpdHkpOworCWNic3MgPSBjZmc4MDIxMV9nZXRfYnNzKGxvY2FsLT5ody53aXBoeSwgY2hhbiwgYnNzaWQsCisJCQkJaWZpYnNzLT5zc2lkLCBpZmlic3MtPnNzaWRfbGVuLAorCQkJCVdMQU5fQ0FQQUJJTElUWV9JQlNTIHwgV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1ksCisJCQkJY2FwYWJpbGl0eSk7CiAKLQlpZiAoYnNzKSB7CisJaWYgKGNic3MpIHsKKwkJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKKworCQlic3MgPSAodm9pZCAqKWNic3MtPnByaXY7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiAgIHN0YV9maW5kX2lic3M6IHNlbGVjdGVkICVwTSBjdXJyZW50ICIKLQkJICAgICAgICIlcE1cbiIsIGJzcy0+Y2Jzcy5ic3NpZCwgaWZpYnNzLT5ic3NpZCk7CisJCSAgICAgICAiJXBNXG4iLCBjYnNzLT5ic3NpZCwgaWZpYnNzLT5ic3NpZCk7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KIAogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNlbGVjdGVkIElCU1MgQlNTSUQgJXBNIgogCQkgICAgICAgIiBiYXNlZCBvbiBjb25maWd1cmVkIFNTSURcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBic3MtPmNic3MuYnNzaWQpOworCQkgICAgICAgc2RhdGEtPm5hbWUsIGNic3MtPmJzc2lkKTsKIAogCQlpZWVlODAyMTFfc3RhX2pvaW5faWJzcyhzZGF0YSwgYnNzKTsKIAkJaWVlZTgwMjExX3J4X2Jzc19wdXQobG9jYWwsIGJzcyk7CkBAIC01NjgsMTggKzU4MiwxNCBAQAogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHICovCiAKIAkvKiBTZWxlY3RlZCBJQlNTIG5vdCBmb3VuZCBpbiBjdXJyZW50IHNjYW4gcmVzdWx0cyAtIHRyeSB0byBzY2FuICovCi0JaWYgKGlmaWJzcy0+c3RhdGUgPT0gSUVFRTgwMjExX0lCU1NfTUxNRV9KT0lORUQgJiYKLQkgICAgIWllZWU4MDIxMV9zdGFfYWN0aXZlX2lic3Moc2RhdGEpKSB7Ci0JCW1vZF90aW1lcigmaWZpYnNzLT50aW1lciwKLQkJCSAgcm91bmRfamlmZmllcyhqaWZmaWVzICsgSUVFRTgwMjExX0lCU1NfTUVSR0VfSU5URVJWQUwpKTsKLQl9IGVsc2UgaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgaWZpYnNzLT5sYXN0X3NjYW5fY29tcGxldGVkICsKKwlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBpZmlic3MtPmxhc3Rfc2Nhbl9jb21wbGV0ZWQgKwogCQkJCQlJRUVFODAyMTFfU0NBTl9JTlRFUlZBTCkpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBUcmlnZ2VyIG5ldyBzY2FuIHRvIGZpbmQgYW4gSUJTUyB0byAiCi0JCSAgICAgICAiam9pblxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCSAgICAgICAiam9pblxuIiwgc2RhdGEtPm5hbWUpOwogCiAJCWllZWU4MDIxMV9yZXF1ZXN0X2ludGVybmFsX3NjYW4oc2RhdGEsIGlmaWJzcy0+c3NpZCwKIAkJCQkJCWlmaWJzcy0+c3NpZF9sZW4pOwotCX0gZWxzZSBpZiAoaWZpYnNzLT5zdGF0ZSAhPSBJRUVFODAyMTFfSUJTU19NTE1FX0pPSU5FRCkgeworCX0gZWxzZSB7CiAJCWludCBpbnRlcnZhbCA9IElFRUU4MDIxMV9TQ0FOX0lOVEVSVkFMOwogCiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGlmaWJzcy0+aWJzc19qb2luX3JlcSArCkBAIC01ODksNyArNTk5LDcgQEAKIAkJCQlyZXR1cm47CiAJCQl9CiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IElCU1Mgbm90IGFsbG93ZWQgb24iCi0JCQkgICAgICAgIiAlZCBNSHpcbiIsIHNkYXRhLT5kZXYtPm5hbWUsCisJCQkgICAgICAgIiAlZCBNSHpcbiIsIHNkYXRhLT5uYW1lLAogCQkJICAgICAgIGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmNlbnRlcl9mcmVxKTsKIAogCQkJLyogTm8gSUJTUyBmb3VuZCAtIGRlY3JlYXNlIHNjYW4gaW50ZXJ2YWwgYW5kIGNvbnRpbnVlCkBAIC01OTcsNyArNjA3LDYgQEAKIAkJCWludGVydmFsID0gSUVFRTgwMjExX1NDQU5fSU5URVJWQUxfU0xPVzsKIAkJfQogCi0JCWlmaWJzcy0+c3RhdGUgPSBJRUVFODAyMTFfSUJTU19NTE1FX1NFQVJDSDsKIAkJbW9kX3RpbWVyKCZpZmlic3MtPnRpbWVyLAogCQkJICByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBpbnRlcnZhbCkpOwogCX0KQEAgLTYyMyw3ICs2MzIsNyBAQAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSWCBQcm9iZVJlcSBTQT0lcE0gREE9JXBNIEJTU0lEPSVwTSIKIAkgICAgICAgIiAodHhfbGFzdF9iZWFjb249JWQpXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCBtZ210LT5zYSwgbWdtdC0+ZGEsCisJICAgICAgIHNkYXRhLT5uYW1lLCBtZ210LT5zYSwgbWdtdC0+ZGEsCiAJICAgICAgIG1nbXQtPmJzc2lkLCB0eF9sYXN0X2JlYWNvbik7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcgKi8KIApAQCAtNjQxLDcgKzY1MCw3IEBACiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0lCU1NfREVCVUcKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBJbnZhbGlkIFNTSUQgSUUgaW4gUHJvYmVSZXEgIgogCQkgICAgICAgImZyb20gJXBNXG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgbWdtdC0+c2EpOworCQkgICAgICAgc2RhdGEtPm5hbWUsIG1nbXQtPnNhKTsKICNlbmRpZgogCQlyZXR1cm47CiAJfQpAQCAtNjYxLDcgKzY3MCw3IEBACiAJbWVtY3B5KHJlc3AtPmRhLCBtZ210LT5zYSwgRVRIX0FMRU4pOwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9JQlNTX0RFQlVHCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBTZW5kaW5nIFByb2JlUmVzcCB0byAlcE1cbiIsCi0JICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHJlc3AtPmRhKTsKKwkgICAgICAgc2RhdGEtPm5hbWUsIHJlc3AtPmRhKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRyAqLwogCUlFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVDsKIAlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IpOwpAQCAtNjc1LDcgKzY4NCw3IEBACiAJc2l6ZV90IGJhc2VsZW47CiAJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7CiAKLQlpZiAobWVtY21wKG1nbXQtPmRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKQorCWlmIChtZW1jbXAobWdtdC0+ZGEsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pKQogCQlyZXR1cm47IC8qIGlnbm9yZSBQcm9iZVJlc3AgdG8gZm9yZWlnbiBhZGRyZXNzICovCiAKIAliYXNlbGVuID0gKHU4ICopIG1nbXQtPnUucHJvYmVfcmVzcC52YXJpYWJsZSAtICh1OCAqKSBtZ210OwpAQCAtNzQ4LDcgKzc1Nyw3IEBACiAJaWYgKFdBUk5fT04obG9jYWwtPnN1c3BlbmRlZCkpCiAJCXJldHVybjsKIAotCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKIAkJcmV0dXJuOwogCiAJaWYgKGxvY2FsLT5zY2FubmluZykKQEAgLTgzMSw3ICs4NDAsNyBAQAogCiAJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQkJY29udGludWU7CiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQURIT0MpCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9pZWVlODAyMTFfaS5oIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKaW5kZXggOTFkYzg2My4uMjQxNTMzZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKKysrIGIvbmV0L21hYzgwMjExL2llZWU4MDIxMV9pLmgKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwNSwgRGV2aWNlc2NhcGUgU29mdHdhcmUsIEluYy4KICAqIENvcHlyaWdodCAyMDA2LTIwMDcJSmlyaSBCZW5jIDxqYmVuY0BzdXNlLmN6PgotICogQ29weXJpZ2h0IDIwMDctMjAwOAlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDctMjAxMAlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtNTgsNiArNTgsMTUgQEAKIAogI2RlZmluZSBUVV9UT19FWFBfVElNRSh4KQkoamlmZmllcyArIHVzZWNzX3RvX2ppZmZpZXMoKHgpICogMTAyNCkpCiAKKyNkZWZpbmUgSUVFRTgwMjExX0RFRkFVTFRfVUFQU0RfUVVFVUVTIFwKKwkoSUVFRTgwMjExX1dNTV9JRV9TVEFfUU9TSU5GT19BQ19CSyB8CVwKKwkgSUVFRTgwMjExX1dNTV9JRV9TVEFfUU9TSU5GT19BQ19CRSB8CVwKKwkgSUVFRTgwMjExX1dNTV9JRV9TVEFfUU9TSU5GT19BQ19WSSB8CVwKKwkgSUVFRTgwMjExX1dNTV9JRV9TVEFfUU9TSU5GT19BQ19WTykKKworI2RlZmluZSBJRUVFODAyMTFfREVGQVVMVF9NQVhfU1BfTEVOCQlcCisJSUVFRTgwMjExX1dNTV9JRV9TVEFfUU9TSU5GT19TUF9BTEwKKwogc3RydWN0IGllZWU4MDIxMV9mcmFnbWVudF9lbnRyeSB7CiAJdW5zaWduZWQgbG9uZyBmaXJzdF9mcmFnX3RpbWU7CiAJdW5zaWduZWQgaW50IHNlcTsKQEAgLTcxLDkgKzgwLDYgQEAKIAogCiBzdHJ1Y3QgaWVlZTgwMjExX2JzcyB7Ci0JLyogWWVzLCB0aGlzIGlzIGEgaGFjayAqLwotCXN0cnVjdCBjZmc4MDIxMV9ic3MgY2JzczsKLQogCS8qIGRvbid0IHdhbnQgdG8gbG9vayB1cCBhbGwgdGhlIHRpbWUgKi8KIAlzaXplX3Qgc3NpZF9sZW47CiAJdTggc3NpZFtJRUVFODAyMTFfTUFYX1NTSURfTEVOXTsKQEAgLTgxLDYgKzg3LDcgQEAKIAl1OCBkdGltX3BlcmlvZDsKIAogCWJvb2wgd21tX3VzZWQ7CisJYm9vbCB1YXBzZF9zdXBwb3J0ZWQ7CiAKIAl1bnNpZ25lZCBsb25nIGxhc3RfcHJvYmVfcmVzcDsKIApAQCAtMTQwLDcgKzE0Nyw2IEBACiAKIHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwpAQCAtMjI4LDMxICsyMzQsNzcgQEAKIAl1OCBmbGFnczsKIH07CiAKLWVudW0gaWVlZTgwMjExX21nZF9zdGF0ZSB7Ci0JSUVFRTgwMjExX01HRF9TVEFURV9JRExFLAotCUlFRUU4MDIxMV9NR0RfU1RBVEVfUFJPQkUsCi0JSUVFRTgwMjExX01HRF9TVEFURV9BVVRILAotCUlFRUU4MDIxMV9NR0RfU1RBVEVfQVNTT0MsCitlbnVtIGllZWU4MDIxMV93b3JrX3R5cGUgeworCUlFRUU4MDIxMV9XT1JLX0FCT1JULAorCUlFRUU4MDIxMV9XT1JLX0RJUkVDVF9QUk9CRSwKKwlJRUVFODAyMTFfV09SS19BVVRILAorCUlFRUU4MDIxMV9XT1JLX0FTU09DLAorCUlFRUU4MDIxMV9XT1JLX1JFTUFJTl9PTl9DSEFOTkVMLAogfTsKIAotc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayB7CisvKioKKyAqIGVudW0gd29ya19kb25lX3Jlc3VsdCAtIGluZGljYXRlcyB3aGF0IHRvIGRvIGFmdGVyIHdvcmsgd2FzIGRvbmUKKyAqCisgKiBAV09SS19ET05FX0RFU1RST1k6IFRoaXMgd29yayBpdGVtIGlzIG5vIGxvbmdlciBuZWVkZWQsIGRlc3Ryb3kuCisgKiBAV09SS19ET05FX1JFUVVFVUU6IFRoaXMgd29yayBpdGVtIHdhcyByZXNldCB0byBiZSByZXVzZWQsIGFuZAorICoJc2hvdWxkIGJlIHJlcXVldWVkLgorICovCitlbnVtIHdvcmtfZG9uZV9yZXN1bHQgeworCVdPUktfRE9ORV9ERVNUUk9ZLAorCVdPUktfRE9ORV9SRVFVRVVFLAorfTsKKworc3RydWN0IGllZWU4MDIxMV93b3JrIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzczsKLQlpbnQgaWVfbGVuOwotCXU4IHByZXZfYnNzaWRbRVRIX0FMRU5dOwotCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07Ci0JdTggc3NpZF9sZW47CisKKwlzdHJ1Y3QgcmN1X2hlYWQgcmN1X2hlYWQ7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCWVudW0gd29ya19kb25lX3Jlc3VsdCAoKmRvbmUpKHN0cnVjdCBpZWVlODAyMTFfd29yayAqd2ssCisJCQkJICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYik7CisKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFuX3R5cGU7CisKIAl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0JZW51bSBpZWVlODAyMTFfbWdkX3N0YXRlIHN0YXRlOwotCXUxNiBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbjsKKwllbnVtIGllZWU4MDIxMV93b3JrX3R5cGUgdHlwZTsKIAotCWludCB0cmllczsKKwl1OCBmaWx0ZXJfdGFbRVRIX0FMRU5dOwogCi0JdTgga2V5W1dMQU5fS0VZX0xFTl9XRVAxMDRdOwotCXU4IGtleV9sZW4sIGtleV9pZHg7CisJYm9vbCBzdGFydGVkOwogCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJaW50IHRyaWVzOworCQkJdTE2IGFsZ29yaXRobSwgdHJhbnNhY3Rpb247CisJCQl1OCBzc2lkW0lFRUU4MDIxMV9NQVhfU1NJRF9MRU5dOworCQkJdTggc3NpZF9sZW47CisJCQl1OCBrZXlbV0xBTl9LRVlfTEVOX1dFUDEwNF07CisJCQl1OCBrZXlfbGVuLCBrZXlfaWR4OworCQkJYm9vbCBwcml2YWN5OworCQl9IHByb2JlX2F1dGg7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpic3M7CisJCQljb25zdCB1OCAqc3VwcF9yYXRlczsKKwkJCWNvbnN0IHU4ICpodF9pbmZvcm1hdGlvbl9pZTsKKwkJCWVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSBzbXBzOworCQkJaW50IHRyaWVzOworCQkJdTE2IGNhcGFiaWxpdHk7CisJCQl1OCBwcmV2X2Jzc2lkW0VUSF9BTEVOXTsKKwkJCXU4IHNzaWRbSUVFRTgwMjExX01BWF9TU0lEX0xFTl07CisJCQl1OCBzc2lkX2xlbjsKKwkJCXU4IHN1cHBfcmF0ZXNfbGVuOworCQkJYm9vbCB3bW1fdXNlZCwgdXNlXzExbiwgdWFwc2RfdXNlZDsKKwkJfSBhc3NvYzsKKwkJc3RydWN0IHsKKwkJCXUzMiBkdXJhdGlvbjsKKwkJfSByZW1haW47CisJfTsKKworCWludCBpZV9sZW47CiAJLyogbXVzdCBiZSBsYXN0ICovCi0JdTggaWVbMF07IC8qIGZvciBhdXRoIG9yIGFzc29jIGZyYW1lLCBub3QgcHJvYmUgKi8KKwl1OCBpZVswXTsKIH07CiAKIC8qIGZsYWdzIHVzZWQgaW4gc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkLmZsYWdzICovCkBAIC0yNjAsMTUgKzMxMiwxMSBAQAogCUlFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwJPSBCSVQoMCksCiAJSUVFRTgwMjExX1NUQV9DT05ORUNUSU9OX1BPTEwJPSBCSVQoMSksCiAJSUVFRTgwMjExX1NUQV9DT05UUk9MX1BPUlQJPSBCSVQoMiksCi0JSUVFRTgwMjExX1NUQV9XTU1fRU5BQkxFRAk9IEJJVCgzKSwKIAlJRUVFODAyMTFfU1RBX0RJU0FCTEVfMTFOCT0gQklUKDQpLAogCUlFRUU4MDIxMV9TVEFfQ1NBX1JFQ0VJVkVECT0gQklUKDUpLAogCUlFRUU4MDIxMV9TVEFfTUZQX0VOQUJMRUQJPSBCSVQoNiksCi19OwotCi0vKiBmbGFncyBmb3IgTUxNRSByZXF1ZXN0ICovCi1lbnVtIGllZWU4MDIxMV9zdGFfcmVxdWVzdCB7Ci0JSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwKKwlJRUVFODAyMTFfU1RBX1VBUFNEX0VOQUJMRUQJPSBCSVQoNyksCisJSUVFRTgwMjExX1NUQV9OVUxMRlVOQ19BQ0tFRAk9IEJJVCg4KSwKIH07CiAKIHN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCB7CkBAIC0yODUsMjEgKzMzMywxOCBAQAogCWludCBwcm9iZV9zZW5kX2NvdW50OwogCiAJc3RydWN0IG11dGV4IG10eDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYXNzb2NpYXRlZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICpvbGRfYXNzb2NpYXRlX3dvcms7Ci0Jc3RydWN0IGxpc3RfaGVhZCB3b3JrX2xpc3Q7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqYXNzb2NpYXRlZDsKIAogCXU4IGJzc2lkW0VUSF9BTEVOXTsKIAogCXUxNiBhaWQ7Ci0JdTE2IGNhcGFiOwogCiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBza2JfcXVldWU7CiAKIAl1bnNpZ25lZCBsb25nIHRpbWVyc19ydW5uaW5nOyAvKiB1c2VkIGZvciBxdWllc2NlL3Jlc3RhcnQgKi8KIAlib29sIHBvd2Vyc2F2ZTsgLyogcG93ZXJzYXZlIHJlcXVlc3RlZCBmb3IgdGhpcyBpZmFjZSAqLwotCi0JdW5zaWduZWQgbG9uZyByZXF1ZXN0OworCWVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSByZXFfc21wcywgLyogcmVxdWVzdGVkIHNtcHMgbW9kZSAqLworCQkJCSBhcF9zbXBzOyAvKiBzbXBzIG1vZGUgQVAgdGhpbmtzIHdlJ3JlIGluICovCiAKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAKQEAgLTQzMyw2ICs0NzgsOCBAQAogCiAJaW50IGRyb3BfdW5lbmNyeXB0ZWQ7CiAKKwljaGFyIG5hbWVbSUZOQU1TSVpdOworCiAJLyoKIAkgKiBrZWVwIHRyYWNrIG9mIHdoZXRoZXIgdGhlIEhUIG9wbW9kZSAoc3RvcmVkIGluCiAJICogdmlmLmJzc19pbmZvLmh0X29wZXJhdGlvbl9tb2RlKSBpcyB2YWxpZC4KQEAgLTQ1OCw4ICs1MDUsOCBAQAogCSAqLwogCXN0cnVjdCBpZWVlODAyMTFfaWZfYXAgKmJzczsKIAotCWludCBmb3JjZV91bmljYXN0X3JhdGVpZHg7IC8qIGZvcmNlZCBUWCByYXRlaWR4IGZvciB1bmljYXN0IGZyYW1lcyAqLwotCWludCBtYXhfcmF0ZWN0cmxfcmF0ZWlkeDsgLyogbWF4IFRYIHJhdGVpZHggZm9yIHJhdGUgY29udHJvbCAqLworCS8qIGJpdG1hcCBvZiBhbGxvd2VkIChub24tTUNTKSByYXRlIGluZGV4ZXMgZm9yIHJhdGUgY29udHJvbCAqLworCXUzMiByY19yYXRlaWR4X21hc2tbSUVFRTgwMjExX05VTV9CQU5EU107CiAKIAl1bmlvbiB7CiAJCXN0cnVjdCBpZWVlODAyMTFfaWZfYXAgYXA7CkBAIC01NjUsNiArNjEyLDE1IEBACiAJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9vcHMgKm9wczsKIAogCS8qCisJICogd29yayBzdHVmZiwgcG90ZW50aWFsbHkgb2ZmLWNoYW5uZWwgKGluIHRoZSBmdXR1cmUpCisJICovCisJc3RydWN0IG11dGV4IHdvcmtfbXR4OworCXN0cnVjdCBsaXN0X2hlYWQgd29ya19saXN0OworCXN0cnVjdCB0aW1lcl9saXN0IHdvcmtfdGltZXI7CisJc3RydWN0IHdvcmtfc3RydWN0IHdvcmtfd29yazsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHdvcmtfc2tiX3F1ZXVlOworCisJLyoKIAkgKiBwcml2YXRlIHdvcmtxdWV1ZSB0byBtYWM4MDIxMS4gbWFjODAyMTEgbWFrZXMgdGhpcyBhY2Nlc3NpYmxlCiAJICogdmlhIGllZWU4MDIxMV9xdWV1ZV93b3JrKCkKIAkgKi8KQEAgLTU4Niw2ICs2NDIsOSBAQAogCS8qIHVzZWQgZm9yIHVwbG9hZGluZyBjaGFuZ2VkIG1jIGxpc3QgKi8KIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVjb25maWdfZmlsdGVyOwogCisJLyogdXNlZCB0byByZWNvbmZpZ3VyZSBoYXJkd2FyZSBTTSBQUyAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCByZWNhbGNfc21wczsKKwogCS8qIGFnZ3JlZ2F0ZWQgbXVsdGljYXN0IGxpc3QgKi8KIAlzdHJ1Y3QgZGV2X2FkZHJfbGlzdCAqbWNfbGlzdDsKIAlpbnQgbWNfY291bnQ7CkBAIC02MzAsMTUgKzY4OSwxOCBAQAogCiAJLyogU3RhdGlvbiBkYXRhICovCiAJLyoKLQkgKiBUaGUgbG9jayBvbmx5IHByb3RlY3RzIHRoZSBsaXN0LCBoYXNoLCB0aW1lciBhbmQgY291bnRlcgotCSAqIGFnYWluc3QgbWFuaXB1bGF0aW9uLCByZWFkcyBhcmUgZG9uZSBpbiBSQ1UuIEFkZGl0aW9uYWxseSwKLQkgKiB0aGUgbG9jayBwcm90ZWN0cyBlYWNoIEJTUydzIFRJTSBiaXRtYXAuCisJICogVGhlIG11dGV4IG9ubHkgcHJvdGVjdHMgdGhlIGxpc3QgYW5kIGNvdW50ZXIsCisJICogcmVhZHMgYXJlIGRvbmUgaW4gUkNVLgorCSAqIEFkZGl0aW9uYWxseSwgdGhlIGxvY2sgcHJvdGVjdHMgdGhlIGhhc2ggdGFibGUsCisJICogdGhlIHBlbmRpbmcgbGlzdCBhbmQgZWFjaCBCU1MncyBUSU0gYml0bWFwLgogCSAqLworCXN0cnVjdCBtdXRleCBzdGFfbXR4OwogCXNwaW5sb2NrX3Qgc3RhX2xvY2s7CiAJdW5zaWduZWQgbG9uZyBudW1fc3RhOwotCXN0cnVjdCBsaXN0X2hlYWQgc3RhX2xpc3Q7CisJc3RydWN0IGxpc3RfaGVhZCBzdGFfbGlzdCwgc3RhX3BlbmRpbmdfbGlzdDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YV9oYXNoW1NUQV9IQVNIX1NJWkVdOwogCXN0cnVjdCB0aW1lcl9saXN0IHN0YV9jbGVhbnVwOworCXN0cnVjdCB3b3JrX3N0cnVjdCBzdGFfZmluaXNoX3dvcms7CiAJaW50IHN0YV9nZW5lcmF0aW9uOwogCiAJc3RydWN0IHNrX2J1ZmZfaGVhZCBwZW5kaW5nW0lFRUU4MDIxMV9NQVhfUVVFVUVTXTsKQEAgLTY4OSw2ICs3NTEsMTAgQEAKIAllbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIG9wZXJfY2hhbm5lbF90eXBlOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqb3Blcl9jaGFubmVsLCAqY3NhX2NoYW5uZWw7CiAKKwkvKiBUZW1wb3JhcnkgcmVtYWluLW9uLWNoYW5uZWwgZm9yIG9mZi1jaGFubmVsIG9wZXJhdGlvbnMgKi8KKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKnRtcF9jaGFubmVsOworCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgdG1wX2NoYW5uZWxfdHlwZTsKKwogCS8qIFNOTVAgY291bnRlcnMgKi8KIAkvKiBkb3QxMUNvdW50ZXJzVGFibGUgKi8KIAl1MzIgZG90MTFUcmFuc21pdHRlZEZyYWdtZW50Q291bnQ7CkBAIC03MDgsMTAgKzc3NCw2IEBACiAJICAgICBhc3NvY19sZWRfbmFtZVszMl0sIHJhZGlvX2xlZF9uYW1lWzMyXTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKLQlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgc3RhX2RlYnVnZnNfYWRkOwotI2VuZGlmCi0KICNpZmRlZiBDT05GSUdfTUFDODAyMTFfREVCVUdfQ09VTlRFUlMKIAkvKiBUWC9SWCBoYW5kbGVyIHN0YXRpc3RpY3MgKi8KIAl1bnNpZ25lZCBpbnQgdHhfaGFuZGxlcnNfZHJvcDsKQEAgLTc0NSw4ICs4MDcsMjIgQEAKIAlpbnQgd2lmaV93bWVfbm9hY2tfdGVzdDsKIAl1bnNpZ25lZCBpbnQgd21tX2FjbTsgLyogYml0IGZpZWxkIG9mIEFDTSBiaXRzIChCSVQoODAyLjFEIHRhZykpICovCiAKKwkvKgorCSAqIEJpdG1hc2sgb2YgZW5hYmxlZCB1LWFwc2QgcXVldWVzLAorCSAqIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fQUNfQkUgJiBjby4gTmVlZHMgYSBuZXcgYXNzb2NpYXRpb24KKwkgKiB0byB0YWtlIGVmZmVjdC4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgdWFwc2RfcXVldWVzOworCisJLyoKKwkgKiBNYXhpbXVtIG51bWJlciBvZiBidWZmZXJlZCBmcmFtZXMgQVAgY2FuIGRlbGl2ZXIgZHVyaW5nIGEKKwkgKiBzZXJ2aWNlIHBlcmlvZCwgSUVFRTgwMjExX1dNTV9JRV9TVEFfUU9TSU5GT19TUF9BTEwgb3Igc2ltaWxhci4KKwkgKiBOZWVkcyBhIG5ldyBhc3NvY2lhdGlvbiB0byB0YWtlIGVmZmVjdC4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgdWFwc2RfbWF4X3NwX2xlbjsKKwogCWJvb2wgcHNwb2xsaW5nOwotCWJvb2wgc2Nhbl9wc19lbmFibGVkOworCWJvb2wgb2ZmY2hhbm5lbF9wc19lbmFibGVkOwogCS8qCiAJICogUFMgY2FuIG9ubHkgYmUgZW5hYmxlZCB3aGVuIHdlIGhhdmUgZXhhY3RseSBvbmUgbWFuYWdlZAogCSAqIGludGVyZmFjZSAoYW5kIG1vbml0b3JzKSBpbiBQUywgdGhpcyB0aGVuIHBvaW50cyB0aGVyZS4KQEAgLTc2MCw2ICs4MzYsOCBAQAogCWludCB1c2VyX3Bvd2VyX2xldmVsOyAvKiBpbiBkQm0gKi8KIAlpbnQgcG93ZXJfY29uc3RyX2xldmVsOyAvKiBpbiBkQm0gKi8KIAorCWVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSBzbXBzX21vZGU7CisKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzdGFydF93b3JrOwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKQEAgLTg3NCw2ICs5NTIsOCBAQAogdm9pZCBpZWVlODAyMTFfY29uZmlndXJlX2ZpbHRlcihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CiB1MzIgaWVlZTgwMjExX3Jlc2V0X2VycF9pbmZvKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKTsKIAorZXh0ZXJuIGJvb2wgaWVlZTgwMjExX2Rpc2FibGVfNDBtaHpfMjRnaHo7CisKIC8qIFNUQSBjb2RlICovCiB2b2lkIGllZWU4MDIxMV9zdGFfc2V0dXBfc2RhdGEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwogaW50IGllZWU4MDIxMV9tZ2RfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKQEAgLTg4Niw2ICs5NjYsMTAgQEAKIGludCBpZWVlODAyMTFfbWdkX2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICAgc3RydWN0IGNmZzgwMjExX2Rpc2Fzc29jX3JlcXVlc3QgKnJlcSwKIAkJCSAgIHZvaWQgKmNvb2tpZSk7CitpbnQgaWVlZTgwMjExX21nZF9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sIHU2NCAqY29va2llKTsKIGllZWU4MDIxMV9yeF9yZXN1bHQgaWVlZTgwMjExX3N0YV9yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCQkgIHN0cnVjdCBza19idWZmICpza2IpOwogdm9pZCBpZWVlODAyMTFfc2VuZF9wc3BvbGwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCkBAIC05MDUsNyArOTg5LDggQEAKIGllZWU4MDIxMV9yeF9yZXN1bHQKIGllZWU4MDIxMV9pYnNzX3J4X21nbXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHN0cnVjdCBza19idWZmICpza2IpOwogc3RydWN0IHN0YV9pbmZvICppZWVlODAyMTFfaWJzc19hZGRfc3RhKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCQl1OCAqYnNzaWQsIHU4ICphZGRyLCB1MzIgc3VwcF9yYXRlcyk7CisJCQkJCXU4ICpic3NpZCwgdTggKmFkZHIsIHUzMiBzdXBwX3JhdGVzLAorCQkJCQlnZnBfdCBnZnApOwogaW50IGllZWU4MDIxMV9pYnNzX2pvaW4oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQlzdHJ1Y3QgY2ZnODAyMTFfaWJzc19wYXJhbXMgKnBhcmFtcyk7CiBpbnQgaWVlZTgwMjExX2lic3NfbGVhdmUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOwpAQCAtOTM3LDcgKzEwMjIsMTUgQEAKIHZvaWQgaWVlZTgwMjExX3J4X2Jzc19wdXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgIHN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MpOwogCisvKiBvZmYtY2hhbm5lbCBoZWxwZXJzICovCit2b2lkIGllZWU4MDIxMV9vZmZjaGFubmVsX3N0b3BfYmVhY29uaW5nKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3ZvaWQgaWVlZTgwMjExX29mZmNoYW5uZWxfc3RvcF9zdGF0aW9uKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKK3ZvaWQgaWVlZTgwMjExX29mZmNoYW5uZWxfcmV0dXJuKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSBib29sIGVuYWJsZV9iZWFjb25pbmcpOworCiAvKiBpbnRlcmZhY2UgaGFuZGxpbmcgKi8KK2ludCBpZWVlODAyMTFfaWZhY2VfaW5pdCh2b2lkKTsKK3ZvaWQgaWVlZTgwMjExX2lmYWNlX2V4aXQodm9pZCk7CiBpbnQgaWVlZTgwMjExX2lmX2FkZChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgY29uc3QgY2hhciAqbmFtZSwKIAkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqKm5ld19kZXYsIGVudW0gbmw4MDIxMV9pZnR5cGUgdHlwZSwKIAkJICAgICBzdHJ1Y3QgdmlmX3BhcmFtcyAqcGFyYW1zKTsKQEAgLTk0OCw2ICsxMDQxLDExIEBACiB1MzIgX19pZWVlODAyMTFfcmVjYWxjX2lkbGUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogdm9pZCBpZWVlODAyMTFfcmVjYWxjX2lkbGUoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogCitzdGF0aWMgaW5saW5lIGJvb2wgaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJcmV0dXJuIG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldik7Cit9CisKIC8qIHR4IGhhbmRsaW5nICovCiB2b2lkIGllZWU4MDIxMV9jbGVhcl90eF9wZW5kaW5nKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKTsKIHZvaWQgaWVlZTgwMjExX3R4X3BlbmRpbmcodW5zaWduZWQgbG9uZyBkYXRhKTsKQEAgLTk3Niw2ICsxMDc0LDkgQEAKIHZvaWQgaWVlZTgwMjExX3NlbmRfZGVsYmEoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgIGNvbnN0IHU4ICpkYSwgdTE2IHRpZCwKIAkJCSAgdTE2IGluaXRpYXRvciwgdTE2IHJlYXNvbl9jb2RlKTsKK2ludCBpZWVlODAyMTFfc2VuZF9zbXBzX2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgICBlbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgc21wcywgY29uc3QgdTggKmRhLAorCQkJICAgICAgIGNvbnN0IHU4ICpic3NpZCk7CiAKIHZvaWQgaWVlZTgwMjExX3N0YV9zdG9wX3J4X2JhX3Nlc3Npb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU4ICpkYSwKIAkJCQl1MTYgdGlkLCB1MTYgaW5pdGlhdG9yLCB1MTYgcmVhc29uKTsKQEAgLTEwODYsNiArMTE4NywyOCBAQAogdTMyIGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICAgIHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcywKIAkJCSAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpOworaW50IF9faWVlZTgwMjExX3JlcXVlc3Rfc21wcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgZW51bSBpZWVlODAyMTFfc21wc19tb2RlIHNtcHNfbW9kZSk7Cit2b2lkIGllZWU4MDIxMV9yZWNhbGNfc21wcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKmZvcnNkYXRhKTsKKworc2l6ZV90IGllZWU4MDIxMV9pZV9zcGxpdChjb25zdCB1OCAqaWVzLCBzaXplX3QgaWVsZW4sCisJCQkgIGNvbnN0IHU4ICppZHMsIGludCBuX2lkcywgc2l6ZV90IG9mZnNldCk7CitzaXplX3QgaWVlZTgwMjExX2llX3NwbGl0X3ZlbmRvcihjb25zdCB1OCAqaWVzLCBzaXplX3QgaWVsZW4sIHNpemVfdCBvZmZzZXQpOworCisvKiBpbnRlcm5hbCB3b3JrIGl0ZW1zICovCit2b2lkIGllZWU4MDIxMV93b3JrX2luaXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwordm9pZCBpZWVlODAyMTFfYWRkX3dvcmsoc3RydWN0IGllZWU4MDIxMV93b3JrICp3ayk7Cit2b2lkIGZyZWVfd29yayhzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrKTsKK3ZvaWQgaWVlZTgwMjExX3dvcmtfcHVyZ2Uoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpOworaWVlZTgwMjExX3J4X3Jlc3VsdCBpZWVlODAyMTFfd29ya19yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKK2ludCBpZWVlODAyMTFfd2tfcmVtYWluX29uX2NoYW5uZWwoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJCSAgIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJCSAgIHVuc2lnbmVkIGludCBkdXJhdGlvbiwgdTY0ICpjb29raWUpOworaW50IGllZWU4MDIxMV93a19jYW5jZWxfcmVtYWluX29uX2NoYW5uZWwoCisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIHU2NCBjb29raWUpOwogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX05PSU5MSU5FCiAjZGVmaW5lIGRlYnVnX25vaW5saW5lIG5vaW5saW5lCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvaWZhY2UuYyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCmluZGV4IDMyYWJhZTMuLjA3OTNkN2EgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9pZmFjZS5jCisrKyBiL25ldC9tYWM4MDIxMS9pZmFjZS5jCkBAIC02Miw2ICs2MiwyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGllZWU4MDIxMV9jaGFuZ2VfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBJRUVFODAyMTFfREVWX1RPX1NVQl9JRihkZXYpOworCXN0cnVjdCBzb2NrYWRkciAqc2EgPSBhZGRyOworCWludCByZXQ7CisKKwlpZiAoaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQorCQlyZXR1cm4gLUVCVVNZOworCisJcmV0ID0gZXRoX21hY19hZGRyKGRldiwgc2EpOworCisJaWYgKHJldCA9PSAwKQorCQltZW1jcHkoc2RhdGEtPnZpZi5hZGRyLCBzYS0+c2FfZGF0YSwgRVRIX0FMRU4pOworCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGlubGluZSBpbnQgaWRlbnRpY2FsX21hY19hZGRyX2FsbG93ZWQoaW50IHR5cGUxLCBpbnQgdHlwZTIpCiB7CiAJcmV0dXJuIHR5cGUxID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IgfHwKQEAgLTgyLDcgKzk5LDYgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpuc2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgY29uZjsKIAl1MzIgY2hhbmdlZCA9IDA7CiAJaW50IHJlczsKIAl1MzIgaHdfcmVjb25mX2ZsYWdzID0gMDsKQEAgLTk3LDcgKzExMyw3IEBACiAJbGlzdF9mb3JfZWFjaF9lbnRyeShuc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewogCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IG5zZGF0YS0+ZGV2OwogCi0JCWlmIChuZGV2ICE9IGRldiAmJiBuZXRpZl9ydW5uaW5nKG5kZXYpKSB7CisJCWlmIChuZGV2ICE9IGRldiAmJiBpZWVlODAyMTFfc2RhdGFfcnVubmluZyhuc2RhdGEpKSB7CiAJCQkvKgogCQkJICogQWxsb3cgb25seSBhIHNpbmdsZSBJQlNTIGludGVyZmFjZSB0byBiZSB1cCBhdCBhbnkKIAkJCSAqIHRpbWUuIFRoaXMgaXMgcmVzdHJpY3RlZCBiZWNhdXNlIGJlYWNvbiBkaXN0cmlidXRpb24KQEAgLTE4Myw3ICsxOTksNyBAQAogCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IG5zZGF0YS0+ZGV2OwogCiAJCS8qCi0JCSAqIE5vIG5lZWQgdG8gY2hlY2sgbmV0aWZfcnVubmluZyBzaW5jZSB3ZSBkbyBub3QgYWxsb3cKKwkJICogTm8gbmVlZCB0byBjaGVjayBydW5uaW5nIHNpbmNlIHdlIGRvIG5vdCBhbGxvdwogCQkgKiBpdCB0byBzdGFydCB1cCB3aXRoIHRoaXMgaW52YWxpZCBhZGRyZXNzLgogCQkgKi8KIAkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihudWxsX2FkZHIsIG5kZXYtPmRldl9hZGRyKSA9PSAwKSB7CkBAIC0yMzQsMTAgKzI1MCw3IEBACiAJCWllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKGxvY2FsKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJY29uZi52aWYgPSAmc2RhdGEtPnZpZjsKLQkJY29uZi50eXBlID0gc2RhdGEtPnZpZi50eXBlOwotCQljb25mLm1hY19hZGRyID0gZGV2LT5kZXZfYWRkcjsKLQkJcmVzID0gZHJ2X2FkZF9pbnRlcmZhY2UobG9jYWwsICZjb25mKTsKKwkJcmVzID0gZHJ2X2FkZF9pbnRlcmZhY2UobG9jYWwsICZzZGF0YS0+dmlmKTsKIAkJaWYgKHJlcykKIAkJCWdvdG8gZXJyX3N0b3A7CiAKQEAgLTMyMCw3ICszMzMsNyBAQAogCiAJcmV0dXJuIDA7CiAgZXJyX2RlbF9pbnRlcmZhY2U6Ci0JZHJ2X3JlbW92ZV9pbnRlcmZhY2UobG9jYWwsICZjb25mKTsKKwlkcnZfcmVtb3ZlX2ludGVyZmFjZShsb2NhbCwgJnNkYXRhLT52aWYpOwogIGVycl9zdG9wOgogCWlmICghbG9jYWwtPm9wZW5fY291bnQpCiAJCWRydl9zdG9wKGxvY2FsKTsKQEAgLTMzNSw3ICszNDgsNiBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX2luaXRfY29uZiBjb25mOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnRtcDsKQEAgLTM0OCw2ICszNjAsMTEgQEAKIAluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoZGV2KTsKIAogCS8qCisJICogUHVyZ2Ugd29yayBmb3IgdGhpcyBpbnRlcmZhY2UuCisJICovCisJaWVlZTgwMjExX3dvcmtfcHVyZ2Uoc2RhdGEpOworCisJLyoKIAkgKiBOb3cgZGVsZXRlIGFsbCBhY3RpdmUgYWdncmVnYXRpb24gc2Vzc2lvbnMuCiAJICovCiAJcmN1X3JlYWRfbG9jaygpOwpAQCAtNTE0LDEyICs1MzEsOSBAQAogCQkJCUJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKTsKIAkJfQogCi0JCWNvbmYudmlmID0gJnNkYXRhLT52aWY7Ci0JCWNvbmYudHlwZSA9IHNkYXRhLT52aWYudHlwZTsKLQkJY29uZi5tYWNfYWRkciA9IGRldi0+ZGV2X2FkZHI7CiAJCS8qIGRpc2FibGUgYWxsIGtleXMgZm9yIGFzIGxvbmcgYXMgdGhpcyBuZXRkZXYgaXMgZG93biAqLwogCQlpZWVlODAyMTFfZGlzYWJsZV9rZXlzKHNkYXRhKTsKLQkJZHJ2X3JlbW92ZV9pbnRlcmZhY2UobG9jYWwsICZjb25mKTsKKwkJZHJ2X3JlbW92ZV9pbnRlcmZhY2UobG9jYWwsICZzZGF0YS0+dmlmKTsKIAl9CiAKIAlzZGF0YS0+YnNzID0gTlVMTDsKQEAgLTY1OSw3ICs2NzMsNyBAQAogCS5uZG9fc3RhcnRfeG1pdAkJPSBpZWVlODAyMTFfc3ViaWZfc3RhcnRfeG1pdCwKIAkubmRvX3NldF9tdWx0aWNhc3RfbGlzdCA9IGllZWU4MDIxMV9zZXRfbXVsdGljYXN0X2xpc3QsCiAJLm5kb19jaGFuZ2VfbXR1IAk9IGllZWU4MDIxMV9jaGFuZ2VfbXR1LAotCS5uZG9fc2V0X21hY19hZGRyZXNzIAk9IGV0aF9tYWNfYWRkciwKKwkubmRvX3NldF9tYWNfYWRkcmVzcyAJPSBpZWVlODAyMTFfY2hhbmdlX21hYywKIAkubmRvX3NlbGVjdF9xdWV1ZQk9IGllZWU4MDIxMV9uZXRkZXZfc2VsZWN0X3F1ZXVlLAogfTsKIApAQCAtNjgxLDEwICs2OTUsMTQgQEAKIAogCWhkciA9ICh2b2lkICopKCh1OCAqKXNrYi0+ZGF0YSArIGxlMTZfdG9fY3B1KHJ0YXAtPml0X2xlbikpOwogCi0JaWYgKCFpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSkgeworCWlmICghaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSkgewogCQlza2ItPnByaW9yaXR5ID0gNzsKIAkJcmV0dXJuIGllZWU4MDJfMWRfdG9fYWNbc2tiLT5wcmlvcml0eV07CiAJfQorCWlmICghaWVlZTgwMjExX2lzX2RhdGFfcW9zKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJc2tiLT5wcmlvcml0eSA9IDA7CisJCXJldHVybiBpZWVlODAyXzFkX3RvX2FjW3NrYi0+cHJpb3JpdHldOworCX0KIAogCXAgPSBpZWVlODAyMTFfZ2V0X3Fvc19jdGwoaGRyKTsKIAlza2ItPnByaW9yaXR5ID0gKnAgJiBJRUVFODAyMTFfUU9TX0NUTF9UQUcxRF9NQVNLOwpAQCAtNzc5LDcgKzc5Nyw3IEBACiAJICogYW5kIGdvZXMgaW50byB0aGUgcmVxdWVzdGVkIG1vZGUuCiAJICovCiAKLQlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwlpZiAoaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQlyZXR1cm4gLUVCVVNZOwogCiAJLyogUHVyZ2UgYW5kIHJlc2V0IHR5cGUtZGVwZW5kZW50IHN0YXRlLiAqLwpAQCAtODMzLDYgKzg1MSw4IEBACiAJLyogZG9uJ3QgdXNlIElFRUU4MDIxMV9ERVZfVE9fU1VCX0lGIGJlY2F1c2UgaXQgY2hlY2tzIHRvbyBtdWNoICovCiAJc2RhdGEgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAluZGV2LT5pZWVlODAyMTFfcHRyID0gJnNkYXRhLT53ZGV2OworCW1lbWNweShzZGF0YS0+dmlmLmFkZHIsIG5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KHNkYXRhLT5uYW1lLCBuZGV2LT5uYW1lLCBJRk5BTVNJWik7CiAKIAkvKiBpbml0aWFsaXNlIHR5cGUtaW5kZXBlbmRlbnQgZGF0YSAqLwogCXNkYXRhLT53ZGV2LndpcGh5ID0gbG9jYWwtPmh3LndpcGh5OwpAQCAtODQ0LDggKzg2NCwxMiBAQAogCiAJSU5JVF9MSVNUX0hFQUQoJnNkYXRhLT5rZXlfbGlzdCk7CiAKLQlzZGF0YS0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4ID0gLTE7Ci0Jc2RhdGEtPm1heF9yYXRlY3RybF9yYXRlaWR4ID0gLTE7CisJZm9yIChpID0gMDsgaSA8IElFRUU4MDIxMV9OVU1fQkFORFM7IGkrKykgeworCQlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKKwkJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2ldOworCQlzZGF0YS0+cmNfcmF0ZWlkeF9tYXNrW2ldID0KKwkJCXNiYW5kID8gKDEgPDwgc2JhbmQtPm5fYml0cmF0ZXMpIC0gMSA6IDA7CisJfQogCiAJLyogc2V0dXAgdHlwZS1kZXBlbmRlbnQgZGF0YSAqLwogCWllZWU4MDIxMV9zZXR1cF9zZGF0YShzZGF0YSwgdHlwZSk7CkBAIC05MzgsNiArOTYyLDggQEAKIAkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpKTsKICNlbmRpZgogCisJZHJ2X2ZsdXNoKGxvY2FsLCBmYWxzZSk7CisKIAlsb2NhbC0+aHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9JRExFOwogCXJldHVybiBJRUVFODAyMTFfQ09ORl9DSEFOR0VfSURMRTsKIH0KQEAgLTk0NywxNiArOTczLDE4IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CiAJaW50IGNvdW50ID0gMDsKIAorCWlmICghbGlzdF9lbXB0eSgmbG9jYWwtPndvcmtfbGlzdCkpCisJCXJldHVybiBpZWVlODAyMTFfaWRsZV9vZmYobG9jYWwsICJ3b3JraW5nIik7CisKIAlpZiAobG9jYWwtPnNjYW5uaW5nKQogCQlyZXR1cm4gaWVlZTgwMjExX2lkbGVfb2ZmKGxvY2FsLCAic2Nhbm5pbmciKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQkJY29udGludWU7CiAJCS8qIGRvIG5vdCBjb3VudCBkaXNhYmxlZCBtYW5hZ2VkIGludGVyZmFjZXMgKi8KIAkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OICYmCi0JCSAgICAhc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQgJiYKLQkJICAgIGxpc3RfZW1wdHkoJnNkYXRhLT51Lm1nZC53b3JrX2xpc3QpKQorCQkgICAgIXNkYXRhLT51Lm1nZC5hc3NvY2lhdGVkKQogCQkJY29udGludWU7CiAJCS8qIGRvIG5vdCBjb3VudCB1bnVzZWQgSUJTUyBpbnRlcmZhY2VzICovCiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgJiYKQEAgLTk4NCwzICsxMDEyLDQxIEBACiAJaWYgKGNoZykKIAkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgY2hnKTsKIH0KKworc3RhdGljIGludCBuZXRkZXZfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkgdW5zaWduZWQgbG9uZyBzdGF0ZSwKKwkJCSB2b2lkICpuZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZGV2OworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCisJaWYgKHN0YXRlICE9IE5FVERFVl9DSEFOR0VOQU1FKQorCQlyZXR1cm4gMDsKKworCWlmICghZGV2LT5pZWVlODAyMTFfcHRyIHx8ICFkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5KQorCQlyZXR1cm4gMDsKKworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPndpcGh5LT5wcml2aWQgIT0gbWFjODAyMTFfd2lwaHlfcHJpdmlkKQorCQlyZXR1cm4gMDsKKworCXNkYXRhID0gSUVFRTgwMjExX0RFVl9UT19TVUJfSUYoZGV2KTsKKworCW1lbWNweShzZGF0YS0+bmFtZSwgZGV2LT5uYW1lLCBJRk5BTVNJWik7CisKKwlpZWVlODAyMTFfZGVidWdmc19yZW5hbWVfbmV0ZGV2KHNkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBtYWM4MDIxMV9uZXRkZXZfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBuZXRkZXZfbm90aWZ5LAorfTsKKworaW50IGllZWU4MDIxMV9pZmFjZV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmbWFjODAyMTFfbmV0ZGV2X25vdGlmaWVyKTsKK30KKwordm9pZCBpZWVlODAyMTFfaWZhY2VfZXhpdCh2b2lkKQoreworCXVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKCZtYWM4MDIxMV9uZXRkZXZfbm90aWZpZXIpOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL2tleS5jIGIvbmV0L21hYzgwMjExL2tleS5jCmluZGV4IDY1OWE0MmQuLjgxNjBkOWMgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9rZXkuYworKysgYi9uZXQvbWFjODAyMTEva2V5LmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKIAkJCQkgICAgIHUuYXApOwogCi0JcmV0ID0gZHJ2X3NldF9rZXkoa2V5LT5sb2NhbCwgU0VUX0tFWSwgJnNkYXRhLT52aWYsIHN0YSwgJmtleS0+Y29uZik7CisJcmV0ID0gZHJ2X3NldF9rZXkoa2V5LT5sb2NhbCwgU0VUX0tFWSwgc2RhdGEsIHN0YSwgJmtleS0+Y29uZik7CiAKIAlpZiAoIXJldCkgewogCQlzcGluX2xvY2tfYmgoJnRvZG9fbG9jayk7CkBAIC0xODEsNyArMTgxLDcgQEAKIAkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCiAJCQkJICAgICB1LmFwKTsKIAotCXJldCA9IGRydl9zZXRfa2V5KGtleS0+bG9jYWwsIERJU0FCTEVfS0VZLCAmc2RhdGEtPnZpZiwKKwlyZXQgPSBkcnZfc2V0X2tleShrZXktPmxvY2FsLCBESVNBQkxFX0tFWSwgc2RhdGEsCiAJCQkgIHN0YSwgJmtleS0+Y29uZik7CiAKIAlpZiAocmV0KQpAQCAtNDIxLDcgKzQyMSw3IEBACiAJCQkgKi8KIAogCQkJLyogc2FtZSBoZXJlLCB0aGUgQVAgY291bGQgYmUgdXNpbmcgUW9TICovCi0JCQlhcCA9IHN0YV9pbmZvX2dldChrZXktPmxvY2FsLCBrZXktPnNkYXRhLT51Lm1nZC5ic3NpZCk7CisJCQlhcCA9IHN0YV9pbmZvX2dldChrZXktPnNkYXRhLCBrZXktPnNkYXRhLT51Lm1nZC5ic3NpZCk7CiAJCQlpZiAoYXApIHsKIAkJCQlpZiAodGVzdF9zdGFfZmxhZ3MoYXAsIFdMQU5fU1RBX1dNRSkpCiAJCQkJCWtleS0+Y29uZi5mbGFncyB8PQpAQCAtNDQzLDcgKzQ0Myw3IEBACiAJYWRkX3RvZG8ob2xkX2tleSwgS0VZX0ZMQUdfVE9ET19ERUxFVEUpOwogCiAJYWRkX3RvZG8oa2V5LCBLRVlfRkxBR19UT0RPX0FERF9ERUJVR0ZTKTsKLQlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwlpZiAoaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQlhZGRfdG9kbyhrZXksIEtFWV9GTEFHX1RPRE9fSFdBQ0NFTF9BREQpOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2RhdGEtPmxvY2FsLT5rZXlfbG9jaywgZmxhZ3MpOwpAQCAtNTA5LDcgKzUwOSw3IEBACiB7CiAJQVNTRVJUX1JUTkwoKTsKIAotCWlmIChXQVJOX09OKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKSkKKwlpZiAoV0FSTl9PTighaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKSkKIAkJcmV0dXJuOwogCiAJaWVlZTgwMjExX3RvZG9fZm9yX2VhY2hfa2V5KHNkYXRhLCBLRVlfRkxBR19UT0RPX0hXQUNDRUxfQUREKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9rZXkuaCBiL25ldC9tYWM4MDIxMS9rZXkuaAppbmRleCBhNDlmOTNiLi5iZGMyOTY4IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEva2V5LmgKKysrIGIvbmV0L21hYzgwMjExL2tleS5oCkBAIC01OSwxMSArNTksMTcgQEAKIAlLRVlfRkxBR19UT0RPX0RFRk1HTVRLRVkJPSBCSVQoNiksCiB9OwogCitlbnVtIGllZWU4MDIxMV9pbnRlcm5hbF90a2lwX3N0YXRlIHsKKwlUS0lQX1NUQVRFX05PVF9JTklULAorCVRLSVBfU1RBVEVfUEhBU0UxX0RPTkUsCisJVEtJUF9TVEFURV9QSEFTRTFfSFdfVVBMT0FERUQsCit9OworCiBzdHJ1Y3QgdGtpcF9jdHggewogCXUzMiBpdjMyOwogCXUxNiBpdjE2OwogCXUxNiBwMWtbNV07Ci0JaW50IGluaXRpYWxpemVkOworCWVudW0gaWVlZTgwMjExX2ludGVybmFsX3RraXBfc3RhdGUgc3RhdGU7CiB9OwogCiBzdHJ1Y3QgaWVlZTgwMjExX2tleSB7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWFpbi5jIGIvbmV0L21hYzgwMjExL21haW4uYwppbmRleCAwZDJkOTQ4Li4wNmMzM2I2IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWFpbi5jCisrKyBiL25ldC9tYWM4MDIxMS9tYWluLmMKQEAgLTE3LDcgKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgotI2luY2x1ZGUgPGxpbnV4L3dpcmVsZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CiAjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcG1fcW9zX3BhcmFtcy5oPgpAQCAtMzIsNyArMzEsMTIgQEAKICNpbmNsdWRlICJsZWQuaCIKICNpbmNsdWRlICJjZmcuaCIKICNpbmNsdWRlICJkZWJ1Z2ZzLmgiCi0jaW5jbHVkZSAiZGVidWdmc19uZXRkZXYuaCIKKworCitib29sIGllZWU4MDIxMV9kaXNhYmxlXzQwbWh6XzI0Z2h6OworbW9kdWxlX3BhcmFtKGllZWU4MDIxMV9kaXNhYmxlXzQwbWh6XzI0Z2h6LCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaWVlZTgwMjExX2Rpc2FibGVfNDBtaHpfMjRnaHosCisJCSAiRGlzYWJsZSA0ME1IeiBzdXBwb3J0IGluIHRoZSAyLjRHSHogYmFuZCIpOwogCiB2b2lkIGllZWU4MDIxMV9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQogewpAQCAtMTAyLDYgKzEwNiw5IEBACiAJaWYgKHNjYW5fY2hhbikgewogCQljaGFuID0gc2Nhbl9jaGFuOwogCQljaGFubmVsX3R5cGUgPSBOTDgwMjExX0NIQU5fTk9fSFQ7CisJfSBlbHNlIGlmIChsb2NhbC0+dG1wX2NoYW5uZWwpIHsKKwkJY2hhbiA9IHNjYW5fY2hhbiA9IGxvY2FsLT50bXBfY2hhbm5lbDsKKwkJY2hhbm5lbF90eXBlID0gbG9jYWwtPnRtcF9jaGFubmVsX3R5cGU7CiAJfSBlbHNlIHsKIAkJY2hhbiA9IGxvY2FsLT5vcGVyX2NoYW5uZWw7CiAJCWNoYW5uZWxfdHlwZSA9IGxvY2FsLT5vcGVyX2NoYW5uZWxfdHlwZTsKQEAgLTExNCw2ICsxMjEsMTggQEAKIAkJY2hhbmdlZCB8PSBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTDsKIAl9CiAKKwlpZiAoIWNvbmZfaXNfaHQoJmxvY2FsLT5ody5jb25mKSkgeworCQkvKgorCQkgKiBtYWM4MDIxMS5oIGRvY3VtZW50cyB0aGF0IHRoaXMgaXMgb25seSB2YWxpZAorCQkgKiB3aGVuIHRoZSBjaGFubmVsIGlzIHNldCB0byBhbiBIVCB0eXBlLCBhbmQKKwkJICogdGhhdCBvdGhlcndpc2UgU1RBVElDIGlzIHVzZWQuCisJCSAqLworCQlsb2NhbC0+aHcuY29uZi5zbXBzX21vZGUgPSBJRUVFODAyMTFfU01QU19TVEFUSUM7CisJfSBlbHNlIGlmIChsb2NhbC0+aHcuY29uZi5zbXBzX21vZGUgIT0gbG9jYWwtPnNtcHNfbW9kZSkgeworCQlsb2NhbC0+aHcuY29uZi5zbXBzX21vZGUgPSBsb2NhbC0+c21wc19tb2RlOworCQljaGFuZ2VkIHw9IElFRUU4MDIxMV9DT05GX0NIQU5HRV9TTVBTOworCX0KKwogCWlmIChzY2FuX2NoYW4pCiAJCXBvd2VyID0gY2hhbi0+bWF4X3Bvd2VyOwogCWVsc2UKQEAgLTE3Myw3ICsxOTIsNyBAQAogCX0gZWxzZSBpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DKQogCQlzZGF0YS0+dmlmLmJzc19jb25mLmJzc2lkID0gc2RhdGEtPnUuaWJzcy5ic3NpZDsKIAllbHNlIGlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCXNkYXRhLT52aWYuYnNzX2NvbmYuYnNzaWQgPSBzZGF0YS0+ZGV2LT5kZXZfYWRkcjsKKwkJc2RhdGEtPnZpZi5ic3NfY29uZi5ic3NpZCA9IHNkYXRhLT52aWYuYWRkcjsKIAllbHNlIGlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKSB7CiAJCXNkYXRhLT52aWYuYnNzX2NvbmYuYnNzaWQgPSB6ZXJvOwogCX0gZWxzZSB7CkBAIC0xOTUsNyArMjE0LDcgQEAKIAl9CiAKIAlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKSB7Ci0JCWlmIChsb2NhbC0+cXVpZXNjaW5nIHx8ICFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpIHx8CisJCWlmIChsb2NhbC0+cXVpZXNjaW5nIHx8ICFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkgfHwKIAkJICAgIHRlc3RfYml0KFNDQU5fU1dfU0NBTk5JTkcsICZsb2NhbC0+c2Nhbm5pbmcpKSB7CiAJCQlzZGF0YS0+dmlmLmJzc19jb25mLmVuYWJsZV9iZWFjb24gPSBmYWxzZTsKIAkJfSBlbHNlIHsKQEAgLTIyMyw4ICsyNDIsNyBAQAogCQl9CiAJfQogCi0JZHJ2X2Jzc19pbmZvX2NoYW5nZWQobG9jYWwsICZzZGF0YS0+dmlmLAotCQkJICAgICAmc2RhdGEtPnZpZi5ic3NfY29uZiwgY2hhbmdlZCk7CisJZHJ2X2Jzc19pbmZvX2NoYW5nZWQobG9jYWwsIHNkYXRhLCAmc2RhdGEtPnZpZi5ic3NfY29uZiwgY2hhbmdlZCk7CiB9CiAKIHUzMiBpZWVlODAyMTFfcmVzZXRfZXJwX2luZm8oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCkBAIC0yOTksNiArMzE3LDE2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9yZXN0YXJ0X2h3KTsKIAorc3RhdGljIHZvaWQgaWVlZTgwMjExX3JlY2FsY19zbXBzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0KKwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwsIHJlY2FsY19zbXBzKTsKKworCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwlpZWVlODAyMTFfcmVjYWxjX3NtcHMobG9jYWwsIE5VTEwpOworCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworfQorCiBzdHJ1Y3QgaWVlZTgwMjExX2h3ICppZWVlODAyMTFfYWxsb2NfaHcoc2l6ZV90IHByaXZfZGF0YV9sZW4sCiAJCQkJCWNvbnN0IHN0cnVjdCBpZWVlODAyMTFfb3BzICpvcHMpCiB7CkBAIC0zMzMsOSArMzYxLDcgQEAKIAkJCVdJUEhZX0ZMQUdfNEFERFJfU1RBVElPTjsKIAl3aXBoeS0+cHJpdmlkID0gbWFjODAyMTFfd2lwaHlfcHJpdmlkOwogCi0JLyogWWVzLCBwdXR0aW5nIGNmZzgwMjExX2JzcyBpbnRvIGllZWU4MDIxMV9ic3MgaXMgYSBoYWNrICovCi0Jd2lwaHktPmJzc19wcml2X3NpemUgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9ic3MpIC0KLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGNmZzgwMjExX2Jzcyk7CisJd2lwaHktPmJzc19wcml2X3NpemUgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9ic3MpOwogCiAJbG9jYWwgPSB3aXBoeV9wcml2KHdpcGh5KTsKIApAQCAtMzU4LDYgKzM4NCw4IEBACiAJbG9jYWwtPmh3LmNvbmYubG9uZ19mcmFtZV9tYXhfdHhfY291bnQgPSB3aXBoeS0+cmV0cnlfbG9uZzsKIAlsb2NhbC0+aHcuY29uZi5zaG9ydF9mcmFtZV9tYXhfdHhfY291bnQgPSB3aXBoeS0+cmV0cnlfc2hvcnQ7CiAJbG9jYWwtPnVzZXJfcG93ZXJfbGV2ZWwgPSAtMTsKKwlsb2NhbC0+dWFwc2RfcXVldWVzID0gSUVFRTgwMjExX0RFRkFVTFRfVUFQU0RfUVVFVUVTOworCWxvY2FsLT51YXBzZF9tYXhfc3BfbGVuID0gSUVFRTgwMjExX0RFRkFVTFRfTUFYX1NQX0xFTjsKIAogCUlOSVRfTElTVF9IRUFEKCZsb2NhbC0+aW50ZXJmYWNlcyk7CiAJbXV0ZXhfaW5pdCgmbG9jYWwtPmlmbGlzdF9tdHgpOwpAQCAtMzY5LDkgKzM5NywxMyBAQAogCiAJSU5JVF9ERUxBWUVEX1dPUksoJmxvY2FsLT5zY2FuX3dvcmssIGllZWU4MDIxMV9zY2FuX3dvcmspOwogCisJaWVlZTgwMjExX3dvcmtfaW5pdChsb2NhbCk7CisKIAlJTklUX1dPUksoJmxvY2FsLT5yZXN0YXJ0X3dvcmssIGllZWU4MDIxMV9yZXN0YXJ0X3dvcmspOwogCiAJSU5JVF9XT1JLKCZsb2NhbC0+cmVjb25maWdfZmlsdGVyLCBpZWVlODAyMTFfcmVjb25maWdfZmlsdGVyKTsKKwlJTklUX1dPUksoJmxvY2FsLT5yZWNhbGNfc21wcywgaWVlZTgwMjExX3JlY2FsY19zbXBzX3dvcmspOworCWxvY2FsLT5zbXBzX21vZGUgPSBJRUVFODAyMTFfU01QU19PRkY7CiAKIAlJTklUX1dPUksoJmxvY2FsLT5keW5hbWljX3BzX2VuYWJsZV93b3JrLAogCQkgIGllZWU4MDIxMV9keW5hbWljX3BzX2VuYWJsZV93b3JrKTsKQEAgLTQ2MSw2ICs0OTMsMTAgQEAKIAllbHNlIGlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQykKIAkJbG9jYWwtPmh3LndpcGh5LT5zaWduYWxfdHlwZSA9IENGRzgwMjExX1NJR05BTF9UWVBFX1VOU1BFQzsKIAorCVdBUk4oKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19VQVBTRCkKKwkgICAgICYmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0spLAorCSAgICAgIlUtQVBTRCBub3Qgc3VwcG9ydGVkIHdpdGggSFdfUFNfTlVMTEZVTkNfU1RBQ0tcbiIpOworCiAJLyoKIAkgKiBDYWxjdWxhdGUgc2NhbiBJRSBsZW5ndGggLS0gd2UgbmVlZCB0aGlzIHRvIGFsbG9jCiAJICogbWVtb3J5IGFuZCB0byBzdWJ0cmFjdCBmcm9tIHRoZSBkcml2ZXIgbGltaXQuIEl0CkBAIC01MjIsOCArNTU4LDEyIEBACiAKIAlkZWJ1Z2ZzX2h3X2FkZChsb2NhbCk7CiAKKwkvKgorCSAqIGlmIHRoZSBkcml2ZXIgZG9lc24ndCBzcGVjaWZ5IGEgbWF4IGxpc3RlbiBpbnRlcnZhbCB3ZQorCSAqIHVzZSA1IHdoaWNoIHNob3VsZCBiZSBhIHNhZmUgZGVmYXVsdAorCSAqLwogCWlmIChsb2NhbC0+aHcubWF4X2xpc3Rlbl9pbnRlcnZhbCA9PSAwKQotCQlsb2NhbC0+aHcubWF4X2xpc3Rlbl9pbnRlcnZhbCA9IDE7CisJCWxvY2FsLT5ody5tYXhfbGlzdGVuX2ludGVydmFsID0gNTsKIAogCWxvY2FsLT5ody5jb25mLmxpc3Rlbl9pbnRlcnZhbCA9IGxvY2FsLT5ody5tYXhfbGlzdGVuX2ludGVydmFsOwogCkBAIC02NzQsMTEgKzcxNCwxOSBAQAogCiAJcmV0ID0gcmM4MDIxMV9waWRfaW5pdCgpOwogCWlmIChyZXQpCi0JCXJldHVybiByZXQ7CisJCWdvdG8gZXJyX3BpZDsKIAotCWllZWU4MDIxMV9kZWJ1Z2ZzX25ldGRldl9pbml0KCk7CisJcmV0ID0gaWVlZTgwMjExX2lmYWNlX2luaXQoKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycl9uZXRkZXY7CiAKIAlyZXR1cm4gMDsKKyBlcnJfbmV0ZGV2OgorCXJjODAyMTFfcGlkX2V4aXQoKTsKKyBlcnJfcGlkOgorCXJjODAyMTFfbWluc3RyZWxfZXhpdCgpOworCisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGllZWU4MDIxMV9leGl0KHZvaWQpCkBAIC02OTUsNyArNzQzLDcgQEAKIAlpZiAobWVzaF9hbGxvY2F0ZWQpCiAJCWllZWU4MDIxMXNfc3RvcCgpOwogCi0JaWVlZTgwMjExX2RlYnVnZnNfbmV0ZGV2X2V4aXQoKTsKKwlpZWVlODAyMTFfaWZhY2VfZXhpdCgpOwogfQogCiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoLmMgYi9uZXQvbWFjODAyMTEvbWVzaC5jCmluZGV4IDZhNDMzMTQuLjYxMDgwYzUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9tZXNoLmMKKysrIGIvbmV0L21hYzgwMjExL21lc2guYwpAQCAtNDU3LDcgKzQ1Nyw3IEBACiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRwogCXByaW50ayhLRVJOX0RFQlVHICIlczogcnVubmluZyBtZXNoIGhvdXNla2VlcGluZ1xuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSk7CisJICAgICAgIHNkYXRhLT5uYW1lKTsKICNlbmRpZgogCiAJaWVlZTgwMjExX3N0YV9leHBpcmUoc2RhdGEsIElFRUU4MDIxMV9NRVNIX1BFRVJfSU5BQ1RJVklUWV9MSU1JVCk7CkBAIC01NjUsNyArNTY1LDcgQEAKIAogCS8qIGlnbm9yZSBQcm9iZVJlc3AgdG8gZm9yZWlnbiBhZGRyZXNzICovCiAJaWYgKHN0eXBlID09IElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQICYmCi0JICAgIGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5kYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIpKQorCSAgICBjb21wYXJlX2V0aGVyX2FkZHIobWdtdC0+ZGEsIHNkYXRhLT52aWYuYWRkcikpCiAJCXJldHVybjsKIAogCWJhc2VsZW4gPSAodTggKikgbWdtdC0+dS5wcm9iZV9yZXNwLnZhcmlhYmxlIC0gKHU4ICopIG1nbXQ7CkBAIC02NDUsNyArNjQ1LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21lc2ggKmlmbXNoID0gJnNkYXRhLT51Lm1lc2g7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAotCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKIAkJcmV0dXJuOwogCiAJaWYgKGxvY2FsLT5zY2FubmluZykKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYyBiL25ldC9tYWM4MDIxMS9tZXNoX2h3bXAuYwppbmRleCBkMjhhY2I2Li5jZTg0MjM3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWVzaF9od21wLmMKKysrIGIvbmV0L21hYzgwMjExL21lc2hfaHdtcC5jCkBAIC0xMjgsOSArMTI4LDkgQEAKIAkJCQkJICBJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKIAogCW1lbWNweShtZ210LT5kYSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAkvKiBCU1NJRCA9PSBTQSAqLwotCW1lbWNweShtZ210LT5ic3NpZCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCW1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID0gTUVTSF9QQVRIX1NFTF9DQVRFR09SWTsKIAltZ210LT51LmFjdGlvbi51Lm1lc2hfYWN0aW9uLmFjdGlvbl9jb2RlID0gTUVTSF9QQVRIX1NFTF9BQ1RJT047CiAKQEAgLTIyMiw3ICsyMjIsNyBAQAogCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOwogCiAJbWVtY3B5KG1nbXQtPmRhLCByYSwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCS8qIEJTU0lEIGlzIGxlZnQgemVyb2VkLCB3aWxkY2FyZCB2YWx1ZSAqLwogCW1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ID0gTUVTSF9QQVRIX1NFTF9DQVRFR09SWTsKIAltZ210LT51LmFjdGlvbi51Lm1lc2hfYWN0aW9uLmFjdGlvbl9jb2RlID0gTUVTSF9QQVRIX1NFTF9BQ1RJT047CkBAIC0zMzUsNyArMzM1LDcgQEAKIAlib29sIHByb2Nlc3MgPSB0cnVlOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgbWdtdC0+c2EpOworCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgbWdtdC0+c2EpOwogCWlmICghc3RhKSB7CiAJCXJjdV9yZWFkX3VubG9jaygpOwogCQlyZXR1cm4gMDsKQEAgLTM3NCw3ICszNzQsNyBAQAogCQluZXdfbWV0cmljID0gTUFYX01FVFJJQzsKIAlleHBfdGltZSA9IFRVX1RPX0VYUF9USU1FKG9yaWdfbGlmZXRpbWUpOwogCi0JaWYgKG1lbWNtcChvcmlnX2FkZHIsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikgPT0gMCkgeworCWlmIChtZW1jbXAob3JpZ19hZGRyLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKSA9PSAwKSB7CiAJCS8qIFRoaXMgTVAgaXMgdGhlIG9yaWdpbmF0b3IsIHdlIGFyZSBub3QgaW50ZXJlc3RlZCBpbiB0aGlzCiAJCSAqIGZyYW1lLCBleGNlcHQgZm9yIHVwZGF0aW5nIHRyYW5zbWl0dGVyJ3MgcGF0aCBpbmZvLgogCQkgKi8KQEAgLTQ4Niw3ICs0ODYsNyBAQAogCiAJbWh3bXBfZGJnKCJyZWNlaXZlZCBQUkVRIGZyb20gJXBNXG4iLCBvcmlnX2FkZHIpOwogCi0JaWYgKG1lbWNtcCh0YXJnZXRfYWRkciwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSA9PSAwKSB7CisJaWYgKG1lbWNtcCh0YXJnZXRfYWRkciwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTikgPT0gMCkgewogCQltaHdtcF9kYmcoIlBSRVEgaXMgZm9yIHVzXG4iKTsKIAkJZm9yd2FyZCA9IGZhbHNlOwogCQlyZXBseSA9IHRydWU7CkBAIC01NzksNyArNTc5LDcgQEAKIAkgKiByZXBsaWVzCiAJICovCiAJdGFyZ2V0X2FkZHIgPSBQUkVQX0lFX1RBUkdFVF9BRERSKHByZXBfZWxlbSk7Ci0JaWYgKG1lbWNtcCh0YXJnZXRfYWRkciwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSA9PSAwKQorCWlmIChtZW1jbXAodGFyZ2V0X2FkZHIsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pID09IDApCiAJCS8qIGRlc3RpbmF0aW9uLCBubyBmb3J3YXJkaW5nIHJlcXVpcmVkICovCiAJCXJldHVybjsKIApAQCAtODkwLDcgKzg5MCw3IEBACiAJCXRhcmdldF9mbGFncyA9IE1QX0ZfUkY7CiAKIAlzcGluX3VubG9ja19iaCgmbXBhdGgtPnN0YXRlX2xvY2spOwotCW1lc2hfcGF0aF9zZWxfZnJhbWVfdHgoTVBBVEhfUFJFUSwgMCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsCisJbWVzaF9wYXRoX3NlbF9mcmFtZV90eChNUEFUSF9QUkVRLCAwLCBzZGF0YS0+dmlmLmFkZHIsCiAJCQljcHVfdG9fbGUzMihpZm1zaC0+c24pLCB0YXJnZXRfZmxhZ3MsIG1wYXRoLT5kc3QsCiAJCQljcHVfdG9fbGUzMihtcGF0aC0+c24pLCBicm9hZGNhc3RfYWRkciwgMCwKIAkJCXR0bCwgY3B1X3RvX2xlMzIobGlmZXRpbWUpLCAwLApAQCAtOTM5LDcgKzkzOSw3IEBACiAJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsCiAJCQkgICAgICAgbXBhdGgtPmV4cF90aW1lIC0KIAkJCSAgICAgICBtc2Vjc190b19qaWZmaWVzKHNkYXRhLT51Lm1lc2gubXNoY2ZnLnBhdGhfcmVmcmVzaF90aW1lKSkgJiYKLQkJICAgICFtZW1jbXAoc2RhdGEtPmRldi0+ZGV2X2FkZHIsIGhkci0+YWRkcjQsIEVUSF9BTEVOKSAmJgorCQkgICAgIW1lbWNtcChzZGF0YS0+dmlmLmFkZHIsIGhkci0+YWRkcjQsIEVUSF9BTEVOKSAmJgogCQkgICAgIShtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfUkVTT0xWSU5HKSAmJgogCQkgICAgIShtcGF0aC0+ZmxhZ3MgJiBNRVNIX1BBVEhfRklYRUQpKSB7CiAJCQltZXNoX3F1ZXVlX3ByZXEobXBhdGgsCkBAIC0xMDEwLDcgKzEwMTAsNyBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWVzaCAqaWZtc2ggPSAmc2RhdGEtPnUubWVzaDsKIAotCW1lc2hfcGF0aF9zZWxfZnJhbWVfdHgoTVBBVEhfUkFOTiwgMCwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsCisJbWVzaF9wYXRoX3NlbF9mcmFtZV90eChNUEFUSF9SQU5OLCAwLCBzZGF0YS0+dmlmLmFkZHIsCiAJCQkgICAgICAgY3B1X3RvX2xlMzIoKytpZm1zaC0+c24pLAogCQkJICAgICAgIDAsIE5VTEwsIDAsIGJyb2FkY2FzdF9hZGRyLAogCQkJICAgICAgIDAsIE1FU0hfVFRMLCAwLCAwLCAwLCBzZGF0YSk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMgYi9uZXQvbWFjODAyMTEvbWVzaF9wYXRodGJsLmMKaW5kZXggMDE5MmNmZC4uMjMxMmVmZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGF0aHRibC5jCisrKyBiL25ldC9tYWM4MDIxMS9tZXNoX3BhdGh0YmwuYwpAQCAtMjYwLDcgKzI2MCw3IEBACiAJaW50IGVyciA9IDA7CiAJdTMyIGhhc2hfaWR4OwogCi0JaWYgKG1lbWNtcChkc3QsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTikgPT0gMCkKKwlpZiAobWVtY21wKGRzdCwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTikgPT0gMCkKIAkJLyogbmV2ZXIgYWRkIG91cnNlbHZlcyBhcyBuZWlnaGJvdXJzICovCiAJCXJldHVybiAtRU5PVFNVUFA7CiAKQEAgLTM3Nyw3ICszNzcsNyBAQAogCWludCBlcnIgPSAwOwogCXUzMiBoYXNoX2lkeDsKIAotCWlmIChtZW1jbXAoZHN0LCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pID09IDApCisJaWYgKG1lbWNtcChkc3QsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pID09IDApCiAJCS8qIG5ldmVyIGFkZCBvdXJzZWx2ZXMgYXMgbmVpZ2hib3VycyAqLwogCQlyZXR1cm4gLUVOT1RTVVBQOwogCkBAIC02MDUsNyArNjA1LDcgQEAKIAlzdHJ1Y3QgbWVzaF9wYXRoICptcGF0aDsKIAl1MzIgc24gPSAwOwogCi0JaWYgKG1lbWNtcChoZHItPmFkZHI0LCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pICE9IDApIHsKKwlpZiAobWVtY21wKGhkci0+YWRkcjQsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pICE9IDApIHsKIAkJdTggKnJhLCAqZGE7CiAKIAkJZGEgPSBoZHItPmFkZHIzOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYyBiL25ldC9tYWM4MDIxMS9tZXNoX3BsaW5rLmMKaW5kZXggMGY3YzZlNi4uMWEyOWM0YSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL21lc2hfcGxpbmsuYworKysgYi9uZXQvbWFjODAyMTEvbWVzaF9wbGluay5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAlpZiAobG9jYWwtPm51bV9zdGEgPj0gTUVTSF9NQVhfUExJTktTKQogCQlyZXR1cm4gTlVMTDsKIAotCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCBod19hZGRyLCBHRlBfQVRPTUlDKTsKKwlzdGEgPSBzdGFfaW5mb19hbGxvYyhzZGF0YSwgaHdfYWRkciwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzdGEpCiAJCXJldHVybiBOVUxMOwogCkBAIC0xNjksNyArMTY5LDcgQEAKIAltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAogCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BQ1RJT04pOwogCW1lbWNweShtZ210LT5kYSwgZGEsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAkvKiBCU1NJRCBpcyBsZWZ0IHplcm9lZCwgd2lsZGNhcmQgdmFsdWUgKi8KIAltZ210LT51LmFjdGlvbi5jYXRlZ29yeSA9IE1FU0hfUExJTktfQ0FURUdPUlk7CiAJbWdtdC0+dS5hY3Rpb24udS5wbGlua19hY3Rpb24uYWN0aW9uX2NvZGUgPSBhY3Rpb247CkBAIC0yMzQsMTQgKzIzNCwxNCBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBod19hZGRyKTsKKwlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIGh3X2FkZHIpOwogCWlmICghc3RhKSB7CisJCXJjdV9yZWFkX3VubG9jaygpOworCiAJCXN0YSA9IG1lc2hfcGxpbmtfYWxsb2Moc2RhdGEsIGh3X2FkZHIsIHJhdGVzKTsKLQkJaWYgKCFzdGEpIHsKLQkJCXJjdV9yZWFkX3VubG9jaygpOworCQlpZiAoIXN0YSkKIAkJCXJldHVybjsKLQkJfQotCQlpZiAoc3RhX2luZm9faW5zZXJ0KHN0YSkpIHsKKwkJaWYgKHN0YV9pbmZvX2luc2VydF9yY3Uoc3RhKSkgewogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlyZXR1cm47CiAJCX0KQEAgLTQ1NSw3ICs0NTUsNyBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBtZ210LT5zYSk7CisJc3RhID0gc3RhX2luZm9fZ2V0KHNkYXRhLCBtZ210LT5zYSk7CiAJaWYgKCFzdGEgJiYgZnR5cGUgIT0gUExJTktfT1BFTikgewogCQltcGxfZGJnKCJNZXNoIHBsaW5rOiBjbHMgb3IgY25mIGZyb20gdW5rbm93biBwZWVyXG4iKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CkBAIC00ODUsOSArNDg1LDExIEBACiAJfSBlbHNlIGlmICghc3RhKSB7CiAJCS8qIGZ0eXBlID09IFBMSU5LX09QRU4gKi8KIAkJdTMyIHJhdGVzOworCisJCXJjdV9yZWFkX3VubG9jaygpOworCiAJCWlmICghbWVzaF9wbGlua19mcmVlX2NvdW50KHNkYXRhKSkgewogCQkJbXBsX2RiZygiTWVzaCBwbGluayBlcnJvcjogbm8gbW9yZSBmcmVlIHBsaW5rc1xuIik7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybjsKIAkJfQogCkBAIC00OTUsMTAgKzQ5Nyw5IEBACiAJCXN0YSA9IG1lc2hfcGxpbmtfYWxsb2Moc2RhdGEsIG1nbXQtPnNhLCByYXRlcyk7CiAJCWlmICghc3RhKSB7CiAJCQltcGxfZGJnKCJNZXNoIHBsaW5rIGVycm9yOiBwbGluayB0YWJsZSBmdWxsXG4iKTsKLQkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJcmV0dXJuOwogCQl9Ci0JCWlmIChzdGFfaW5mb19pbnNlcnQoc3RhKSkgeworCQlpZiAoc3RhX2luZm9faW5zZXJ0X3JjdShzdGEpKSB7CiAJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybjsKIAkJfQpAQCAtNzQzLDcgKzc0NCw3IEBACiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCS8qIHNob3VsZCBub3QgZ2V0IGhlcmUsIFBMSU5LX0JMT0NLRUQgaXMgZGVhbHQgd2l0aCBhdCB0aGUKLQkJICogYmVnZ2luaW5nIG9mIHRoZSBmdW5jdGlvbgorCQkgKiBiZWdpbm5pbmcgb2YgdGhlIGZ1bmN0aW9uCiAJCSAqLwogCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvbWxtZS5jIGIvbmV0L21hYzgwMjExL21sbWUuYwppbmRleCAwNWExOGY0Li40MTgxMmExIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvbWxtZS5jCisrKyBiL25ldC9tYWM4MDIxMS9tbG1lLmMKQEAgLTI3LDEwICsyNyw2IEBACiAjaW5jbHVkZSAicmF0ZS5oIgogI2luY2x1ZGUgImxlZC5oIgogCi0jZGVmaW5lIElFRUU4MDIxMV9BVVRIX1RJTUVPVVQgKEhaIC8gNSkKLSNkZWZpbmUgSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTIDMKLSNkZWZpbmUgSUVFRTgwMjExX0FTU09DX1RJTUVPVVQgKEhaIC8gNSkKLSNkZWZpbmUgSUVFRTgwMjExX0FTU09DX01BWF9UUklFUyAzCiAjZGVmaW5lIElFRUU4MDIxMV9NQVhfUFJPQkVfVFJJRVMgNQogCiAvKgpAQCAtNzUsMTEgKzcxLDggQEAKIAkvKiBjYWxsZXIgbXVzdCBjYWxsIGNmZzgwMjExX3NlbmRfZGlzYXNzb2MoKSAqLwogCVJYX01HTVRfQ0ZHODAyMTFfRElTQVNTT0MsCiAKLQkvKiBjYWxsZXIgbXVzdCBjYWxsIGNmZzgwMjExX2F1dGhfdGltZW91dCgpICYgZnJlZSB3b3JrICovCi0JUlhfTUdNVF9DRkc4MDIxMV9BVVRIX1RPLAotCi0JLyogY2FsbGVyIG11c3QgY2FsbCBjZmc4MDIxMV9hc3NvY190aW1lb3V0KCkgJiBmcmVlIHdvcmsgKi8KLQlSWF9NR01UX0NGRzgwMjExX0FTU09DX1RPLAorCS8qIGNhbGxlciBtdXN0IHRlbGwgY2ZnODAyMTEgYWJvdXQgaW50ZXJuYWwgZXJyb3IgKi8KKwlSWF9NR01UX0NGRzgwMjExX0FTU09DX0VSUk9SLAogfTsKIAogLyogdXRpbHMgKi8KQEAgLTEyMiwyNyArMTE1LDYgQEAKIAlyZXR1cm4gKDEgPDwgZWN3KSAtIDE7CiB9CiAKLXN0YXRpYyBpbnQgaWVlZTgwMjExX2NvbXBhdGlibGVfcmF0ZXMoc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcywKLQkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKLQkJCQkgICAgICB1MzIgKnJhdGVzKQotewotCWludCBpLCBqLCBjb3VudDsKLQkqcmF0ZXMgPSAwOwotCWNvdW50ID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgYnNzLT5zdXBwX3JhdGVzX2xlbjsgaSsrKSB7Ci0JCWludCByYXRlID0gKGJzcy0+c3VwcF9yYXRlc1tpXSAmIDB4N0YpICogNTsKLQotCQlmb3IgKGogPSAwOyBqIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGorKykKLQkJCWlmIChzYmFuZC0+Yml0cmF0ZXNbal0uYml0cmF0ZSA9PSByYXRlKSB7Ci0JCQkJKnJhdGVzIHw9IEJJVChqKTsKLQkJCQljb3VudCsrOwotCQkJCWJyZWFrOwotCQkJfQotCX0KLQotCXJldHVybiBjb3VudDsKLX0KLQogLyoKICAqIGllZWU4MDIxMV9lbmFibGVfaHQgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IGFmdGVyIHRoZSBvcGVyYXRpbmcgYmFuZAogICogaGFzIGJlZW4gZGV0ZXJtaW5lZCBhcyBodCBjb25maWd1cmF0aW9uIGRlcGVuZHMgb24gdGhlIGh3J3MKQEAgLTIwMiw3ICsxNzQsNyBAQAogCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCAwKTsKIAogCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgYnNzaWQpOworCQlzdGEgPSBzdGFfaW5mb19nZXQoc2RhdGEsIGJzc2lkKTsKIAkJaWYgKHN0YSkKIAkJCXJhdGVfY29udHJvbF9yYXRlX3VwZGF0ZShsb2NhbCwgc2JhbmQsIHN0YSwKIAkJCQkJCSBJRUVFODAyMTFfUkNfSFRfQ0hBTkdFRCk7CkBAIC0yMjgsMjA5ICsyMDAsNiBAQAogCiAvKiBmcmFtZSBzZW5kaW5nIGZ1bmN0aW9ucyAqLwogCi1zdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF9hc3NvYyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2spCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7Ci0JdTggKnBvczsKLQljb25zdCB1OCAqaWVzLCAqaHRfaWU7Ci0JaW50IGksIGxlbiwgY291bnQsIHJhdGVzX2xlbiwgc3VwcF9yYXRlc19sZW47Ci0JdTE2IGNhcGFiOwotCWludCB3bW0gPSAwOwotCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwotCXUzMiByYXRlcyA9IDA7Ci0KLQlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArCi0JCQkgICAgc2l6ZW9mKCptZ210KSArIDIwMCArIHdrLT5pZV9sZW4gKwotCQkJICAgIHdrLT5zc2lkX2xlbik7Ci0JaWYgKCFza2IpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciBhc3NvYyAiCi0JCSAgICAgICAiZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQlyZXR1cm47Ci0JfQotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKLQotCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kXTsKLQotCWNhcGFiID0gaWZtZ2QtPmNhcGFiOwotCi0JaWYgKGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgewotCQlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfMkdIWl9TSE9SVF9TTE9UX0lOQ0FQQUJMRSkpCi0JCQljYXBhYiB8PSBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FOwotCQlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfMkdIWl9TSE9SVF9QUkVBTUJMRV9JTkNBUEFCTEUpKQotCQkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1NIT1JUX1BSRUFNQkxFOwotCX0KLQotCWlmICh3ay0+YnNzLT5jYnNzLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKLQkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7Ci0JaWYgKHdrLT5ic3MtPndtbV91c2VkKQotCQl3bW0gPSAxOwotCi0JLyogZ2V0IGFsbCByYXRlcyBzdXBwb3J0ZWQgYnkgdGhlIGRldmljZSBhbmQgdGhlIEFQIGFzCi0JICogc29tZSBBUHMgZG9uJ3QgbGlrZSBnZXR0aW5nIGEgc3VwZXJzZXQgb2YgdGhlaXIgcmF0ZXMKLQkgKiBpbiB0aGUgYXNzb2NpYXRpb24gcmVxdWVzdCAoZS5nLiBELUxpbmsgREFQIDEzNTMgaW4KLQkgKiBiLW9ubHkgbW9kZSkgKi8KLQlyYXRlc19sZW4gPSBpZWVlODAyMTFfY29tcGF0aWJsZV9yYXRlcyh3ay0+YnNzLCBzYmFuZCwgJnJhdGVzKTsKLQotCWlmICgod2stPmJzcy0+Y2Jzcy5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQpICYmCi0JICAgIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1BFQ1RSVU1fTUdNVCkpCi0JCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UOwotCi0JbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKLQltZW1zZXQobWdtdCwgMCwgMjQpOwotCW1lbWNweShtZ210LT5kYSwgd2stPmJzcy0+Y2Jzcy5ic3NpZCwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQltZW1jcHkobWdtdC0+YnNzaWQsIHdrLT5ic3MtPmNic3MuYnNzaWQsIEVUSF9BTEVOKTsKLQotCWlmICghaXNfemVyb19ldGhlcl9hZGRyKHdrLT5wcmV2X2Jzc2lkKSkgewotCQlza2JfcHV0KHNrYiwgMTApOwotCQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAotCQkJCQkJICBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVEpOwotCQltZ210LT51LnJlYXNzb2NfcmVxLmNhcGFiX2luZm8gPSBjcHVfdG9fbGUxNihjYXBhYik7Ci0JCW1nbXQtPnUucmVhc3NvY19yZXEubGlzdGVuX2ludGVydmFsID0KLQkJCQljcHVfdG9fbGUxNihsb2NhbC0+aHcuY29uZi5saXN0ZW5faW50ZXJ2YWwpOwotCQltZW1jcHkobWdtdC0+dS5yZWFzc29jX3JlcS5jdXJyZW50X2FwLCB3ay0+cHJldl9ic3NpZCwKLQkJICAgICAgIEVUSF9BTEVOKTsKLQl9IGVsc2UgewotCQlza2JfcHV0KHNrYiwgNCk7Ci0JCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8Ci0JCQkJCQkgIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVEpOwotCQltZ210LT51LmFzc29jX3JlcS5jYXBhYl9pbmZvID0gY3B1X3RvX2xlMTYoY2FwYWIpOwotCQltZ210LT51LmFzc29jX3JlcS5saXN0ZW5faW50ZXJ2YWwgPQotCQkJCWNwdV90b19sZTE2KGxvY2FsLT5ody5jb25mLmxpc3Rlbl9pbnRlcnZhbCk7Ci0JfQotCi0JLyogU1NJRCAqLwotCWllcyA9IHBvcyA9IHNrYl9wdXQoc2tiLCAyICsgd2stPnNzaWRfbGVuKTsKLQkqcG9zKysgPSBXTEFOX0VJRF9TU0lEOwotCSpwb3MrKyA9IHdrLT5zc2lkX2xlbjsKLQltZW1jcHkocG9zLCB3ay0+c3NpZCwgd2stPnNzaWRfbGVuKTsKLQotCS8qIGFkZCBhbGwgcmF0ZXMgd2hpY2ggd2VyZSBtYXJrZWQgdG8gYmUgdXNlZCBhYm92ZSAqLwotCXN1cHBfcmF0ZXNfbGVuID0gcmF0ZXNfbGVuOwotCWlmIChzdXBwX3JhdGVzX2xlbiA+IDgpCi0JCXN1cHBfcmF0ZXNfbGVuID0gODsKLQotCWxlbiA9IHNiYW5kLT5uX2JpdHJhdGVzOwotCXBvcyA9IHNrYl9wdXQoc2tiLCBzdXBwX3JhdGVzX2xlbiArIDIpOwotCSpwb3MrKyA9IFdMQU5fRUlEX1NVUFBfUkFURVM7Ci0JKnBvcysrID0gc3VwcF9yYXRlc19sZW47Ci0KLQljb3VudCA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKLQkJaWYgKEJJVChpKSAmIHJhdGVzKSB7Ci0JCQlpbnQgcmF0ZSA9IHNiYW5kLT5iaXRyYXRlc1tpXS5iaXRyYXRlOwotCQkJKnBvcysrID0gKHU4KSAocmF0ZSAvIDUpOwotCQkJaWYgKCsrY291bnQgPT0gOCkKLQkJCQlicmVhazsKLQkJfQotCX0KLQotCWlmIChyYXRlc19sZW4gPiBjb3VudCkgewotCQlwb3MgPSBza2JfcHV0KHNrYiwgcmF0ZXNfbGVuIC0gY291bnQgKyAyKTsKLQkJKnBvcysrID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7Ci0JCSpwb3MrKyA9IHJhdGVzX2xlbiAtIGNvdW50OwotCi0JCWZvciAoaSsrOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgewotCQkJaWYgKEJJVChpKSAmIHJhdGVzKSB7Ci0JCQkJaW50IHJhdGUgPSBzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZTsKLQkJCQkqcG9zKysgPSAodTgpIChyYXRlIC8gNSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAoY2FwYWIgJiBXTEFOX0NBUEFCSUxJVFlfU1BFQ1RSVU1fTUdNVCkgewotCQkvKiAxLiBwb3dlciBjYXBhYmlsaXRpZXMgKi8KLQkJcG9zID0gc2tiX3B1dChza2IsIDQpOwotCQkqcG9zKysgPSBXTEFOX0VJRF9QV1JfQ0FQQUJJTElUWTsKLQkJKnBvcysrID0gMjsKLQkJKnBvcysrID0gMDsgLyogbWluIHR4IHBvd2VyICovCi0JCSpwb3MrKyA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPm1heF9wb3dlcjsgLyogbWF4IHR4IHBvd2VyICovCi0KLQkJLyogMi4gc3VwcG9ydGVkIGNoYW5uZWxzICovCi0JCS8qIFRPRE86IGdldCB0aGlzIGluIHJlZyBkb21haW4gZm9ybWF0ICovCi0JCXBvcyA9IHNrYl9wdXQoc2tiLCAyICogc2JhbmQtPm5fY2hhbm5lbHMgKyAyKTsKLQkJKnBvcysrID0gV0xBTl9FSURfU1VQUE9SVEVEX0NIQU5ORUxTOwotCQkqcG9zKysgPSAyICogc2JhbmQtPm5fY2hhbm5lbHM7Ci0JCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9jaGFubmVsczsgaSsrKSB7Ci0JCQkqcG9zKysgPSBpZWVlODAyMTFfZnJlcXVlbmN5X3RvX2NoYW5uZWwoCi0JCQkJCXNiYW5kLT5jaGFubmVsc1tpXS5jZW50ZXJfZnJlcSk7Ci0JCQkqcG9zKysgPSAxOyAvKiBvbmUgY2hhbm5lbCBpbiB0aGUgc3ViYmFuZCovCi0JCX0KLQl9Ci0KLQlpZiAod2stPmllX2xlbiAmJiB3ay0+aWUpIHsKLQkJcG9zID0gc2tiX3B1dChza2IsIHdrLT5pZV9sZW4pOwotCQltZW1jcHkocG9zLCB3ay0+aWUsIHdrLT5pZV9sZW4pOwotCX0KLQotCWlmICh3bW0gJiYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKSB7Ci0JCXBvcyA9IHNrYl9wdXQoc2tiLCA5KTsKLQkJKnBvcysrID0gV0xBTl9FSURfVkVORE9SX1NQRUNJRklDOwotCQkqcG9zKysgPSA3OyAvKiBsZW4gKi8KLQkJKnBvcysrID0gMHgwMDsgLyogTWljcm9zb2Z0IE9VSSAwMDo1MDpGMiAqLwotCQkqcG9zKysgPSAweDUwOwotCQkqcG9zKysgPSAweGYyOwotCQkqcG9zKysgPSAyOyAvKiBXTUUgKi8KLQkJKnBvcysrID0gMDsgLyogV01FIGluZm8gKi8KLQkJKnBvcysrID0gMTsgLyogV01FIHZlciAqLwotCQkqcG9zKysgPSAwOwotCX0KLQotCS8qIHdtbSBzdXBwb3J0IGlzIGEgbXVzdCB0byBIVCAqLwotCS8qCi0JICogSUVFRTgwMi4xMW4gZG9lcyBub3QgYWxsb3cgVEtJUC9XRVAgYXMgcGFpcndpc2UKLQkgKiBjaXBoZXJzIGluIEhUIG1vZGUuIFdlIHN0aWxsIGFzc29jaWF0ZSBpbiBub24taHQKLQkgKiBtb2RlICgxMWEvYi9nKSBpZiBhbnkgb25lIG9mIHRoZXNlIGNpcGhlcnMgaXMKLQkgKiBjb25maWd1cmVkIGFzIHBhaXJ3aXNlLgotCSAqLwotCWlmICh3bW0gJiYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpICYmCi0JICAgIHNiYW5kLT5odF9jYXAuaHRfc3VwcG9ydGVkICYmCi0JICAgIChodF9pZSA9IGllZWU4MDIxMV9ic3NfZ2V0X2llKCZ3ay0+YnNzLT5jYnNzLCBXTEFOX0VJRF9IVF9JTkZPUk1BVElPTikpICYmCi0JICAgIGh0X2llWzFdID49IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8pICYmCi0JICAgICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfRElTQUJMRV8xMU4pKSkgewotCQlzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0X2luZm8gPQotCQkJKHN0cnVjdCBpZWVlODAyMTFfaHRfaW5mbyAqKShodF9pZSArIDIpOwotCQl1MTYgY2FwID0gc2JhbmQtPmh0X2NhcC5jYXA7Ci0JCV9fbGUxNiB0bXA7Ci0JCXUzMiBmbGFncyA9IGxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmZsYWdzOwotCi0JCXN3aXRjaCAoaHRfaW5mby0+aHRfcGFyYW0gJiBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19PRkZTRVQpIHsKLQkJY2FzZSBJRUVFODAyMTFfSFRfUEFSQU1fQ0hBX1NFQ19BQk9WRToKLQkJCWlmIChmbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0hUNDBQTFVTKSB7Ci0JCQkJY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKLQkJCQljYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfQkVMT1c6Ci0JCQlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19IVDQwTUlOVVMpIHsKLQkJCQljYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOwotCQkJCWNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9TR0lfNDA7Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCi0JCXRtcCA9IGNwdV90b19sZTE2KGNhcCk7Ci0JCXBvcyA9IHNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApKzIpOwotCQkqcG9zKysgPSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZOwotCQkqcG9zKysgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApOwotCQltZW1zZXQocG9zLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApKTsKLQkJbWVtY3B5KHBvcywgJnRtcCwgc2l6ZW9mKHUxNikpOwotCQlwb3MgKz0gc2l6ZW9mKHUxNik7Ci0JCS8qIFRPRE86IG5lZWRzIGEgZGVmaW5lIGhlcmUgZm9yIDw8IDIgKi8KLQkJKnBvcysrID0gc2JhbmQtPmh0X2NhcC5hbXBkdV9mYWN0b3IgfAotCQkJIChzYmFuZC0+aHRfY2FwLmFtcGR1X2RlbnNpdHkgPDwgMik7Ci0JCW1lbWNweShwb3MsICZzYmFuZC0+aHRfY2FwLm1jcywgc2l6ZW9mKHNiYW5kLT5odF9jYXAubWNzKSk7Ci0JfQotCi0JSUVFRTgwMjExX1NLQl9DQihza2IpLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOwotCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYik7Ci19Ci0KLQogc3RhdGljIHZvaWQgaWVlZTgwMjExX3NlbmRfZGVhdXRoX2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJCQkgICBjb25zdCB1OCAqYnNzaWQsIHUxNiBzdHlwZSwgdTE2IHJlYXNvbiwKIAkJCQkJICAgdm9pZCAqY29va2llKQpAQCAtNDQzLDcgKzIxMiw3IEBACiAJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyBzaXplb2YoKm1nbXQpKTsKIAlpZiAoIXNrYikgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yICIKLQkJICAgICAgICJkZWF1dGgvZGlzYXNzb2MgZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQkgICAgICAgImRlYXV0aC9kaXNhc3NvYyBmcmFtZVxuIiwgc2RhdGEtPm5hbWUpOwogCQlyZXR1cm47CiAJfQogCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKQEAgLTQ1MSw3ICsyMjAsNyBAQAogCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYl9wdXQoc2tiLCAyNCk7CiAJbWVtc2V0KG1nbXQsIDAsIDI0KTsKIAltZW1jcHkobWdtdC0+ZGEsIGJzc2lkLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1nbXQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KG1nbXQtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOwogCW1nbXQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8IHN0eXBlKTsKIAlza2JfcHV0KHNrYiwgMik7CkBAIC00NzYsMzAgKzI0NSwxNSBAQAogdm9pZCBpZWVlODAyMTFfc2VuZF9wc3BvbGwoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKIHsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3BzcG9sbCAqcHNwb2xsOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0JdTE2IGZjOwogCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyBzaXplb2YoKnBzcG9sbCkpOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgIgotCQkgICAgICAgInBzcG9sbCBmcmFtZVxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJc2tiID0gaWVlZTgwMjExX3BzcG9sbF9nZXQoJmxvY2FsLT5odywgJnNkYXRhLT52aWYpOworCWlmICghc2tiKQogCQlyZXR1cm47Ci0JfQotCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKIAotCXBzcG9sbCA9IChzdHJ1Y3QgaWVlZTgwMjExX3BzcG9sbCAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpwc3BvbGwpKTsKLQltZW1zZXQocHNwb2xsLCAwLCBzaXplb2YoKnBzcG9sbCkpOwotCWZjID0gSUVFRTgwMjExX0ZUWVBFX0NUTCB8IElFRUU4MDIxMV9TVFlQRV9QU1BPTEwgfCBJRUVFODAyMTFfRkNUTF9QTTsKLQlwc3BvbGwtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihmYyk7Ci0JcHNwb2xsLT5haWQgPSBjcHVfdG9fbGUxNihpZm1nZC0+YWlkKTsKLQotCS8qIGFpZCBpbiBQUy1Qb2xsIGhhcyBpdHMgdHdvIE1TQnMgZWFjaCBzZXQgdG8gMSAqLwotCXBzcG9sbC0+YWlkIHw9IGNwdV90b19sZTE2KDEgPDwgMTUgfCAxIDw8IDE0KTsKLQotCW1lbWNweShwc3BvbGwtPmJzc2lkLCBpZm1nZC0+YnNzaWQsIEVUSF9BTEVOKTsKLQltZW1jcHkocHNwb2xsLT50YSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwlwc3BvbGwgPSAoc3RydWN0IGllZWU4MDIxMV9wc3BvbGwgKikgc2tiLT5kYXRhOworCXBzcG9sbC0+ZnJhbWVfY29udHJvbCB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9QTSk7CiAKIAlJRUVFODAyMTFfU0tCX0NCKHNrYiktPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7CiAJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiKTsKQEAgLTUxMCwzMCArMjY0LDQ3IEBACiAJCQkgICAgIGludCBwb3dlcnNhdmUpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqbnVsbGZ1bmM7CisKKwlza2IgPSBpZWVlODAyMTFfbnVsbGZ1bmNfZ2V0KCZsb2NhbC0+aHcsICZzZGF0YS0+dmlmKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuOworCisJbnVsbGZ1bmMgPSAoc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKikgc2tiLT5kYXRhOworCWlmIChwb3dlcnNhdmUpCisJCW51bGxmdW5jLT5mcmFtZV9jb250cm9sIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX1BNKTsKKworCUlFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVDsKKwlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IpOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2VuZF80YWRkcl9udWxsZnVuYyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkJICBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpudWxsZnVuYzsKIAlfX2xlMTYgZmM7CiAKIAlpZiAoV0FSTl9PTihzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikpCiAJCXJldHVybjsKIAotCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgMjQpOworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgMzApOwogCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgbnVsbGZ1bmMgIgotCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgYnVmZmVyIGZvciA0YWRkciAiCisJCSAgICAgICAibnVsbGZ1bmMgZnJhbWVcbiIsIHNkYXRhLT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KIAlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CiAKLQludWxsZnVuYyA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2JfcHV0KHNrYiwgMjQpOwotCW1lbXNldChudWxsZnVuYywgMCwgMjQpOworCW51bGxmdW5jID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopIHNrYl9wdXQoc2tiLCAzMCk7CisJbWVtc2V0KG51bGxmdW5jLCAwLCAzMCk7CiAJZmMgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfREFUQSB8IElFRUU4MDIxMV9TVFlQRV9OVUxMRlVOQyB8Ci0JCQkgSUVFRTgwMjExX0ZDVExfVE9EUyk7Ci0JaWYgKHBvd2Vyc2F2ZSkKLQkJZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfUE0pOworCQkJIElFRUU4MDIxMV9GQ1RMX0ZST01EUyB8IElFRUU4MDIxMV9GQ1RMX1RPRFMpOwogCW51bGxmdW5jLT5mcmFtZV9jb250cm9sID0gZmM7CiAJbWVtY3B5KG51bGxmdW5jLT5hZGRyMSwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG51bGxmdW5jLT5hZGRyMiwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobnVsbGZ1bmMtPmFkZHIyLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkobnVsbGZ1bmMtPmFkZHIzLCBzZGF0YS0+dS5tZ2QuYnNzaWQsIEVUSF9BTEVOKTsKKwltZW1jcHkobnVsbGZ1bmMtPmFkZHI0LCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAogCUlFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX0RPTlRfRU5DUllQVDsKIAlpZWVlODAyMTFfdHhfc2tiKHNkYXRhLCBza2IpOwpAQCAtNTQ2LDcgKzMxNyw3IEBACiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhLCB1Lm1nZC5jaHN3aXRjaF93b3JrKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAotCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKIAkJcmV0dXJuOwogCiAJbXV0ZXhfbG9jaygmaWZtZ2QtPm10eCk7CkBAIC01NTcsNyArMzI4LDcgQEAKIAlpZWVlODAyMTFfaHdfY29uZmlnKHNkYXRhLT5sb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX0NIQU5ORUwpOwogCiAJLyogWFhYOiBzaG91bGRuJ3QgcmVhbGx5IG1vZGlmeSBjZmc4MDIxMS1vd25lZCBkYXRhISAqLwotCWlmbWdkLT5hc3NvY2lhdGVkLT5jYnNzLmNoYW5uZWwgPSBzZGF0YS0+bG9jYWwtPm9wZXJfY2hhbm5lbDsKKwlpZm1nZC0+YXNzb2NpYXRlZC0+Y2hhbm5lbCA9IHNkYXRhLT5sb2NhbC0+b3Blcl9jaGFubmVsOwogCiAJaWVlZTgwMjExX3dha2VfcXVldWVzX2J5X3JlYXNvbigmc2RhdGEtPmxvY2FsLT5odywKIAkJCQkJSUVFRTgwMjExX1FVRVVFX1NUT1BfUkVBU09OX0NTQSk7CkBAIC01ODQsNiArMzU1LDggQEAKIAkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dfaWUgKnN3X2VsZW0sCiAJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcykKIHsKKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzID0KKwkJY29udGFpbmVyX29mKCh2b2lkICopYnNzLCBzdHJ1Y3QgY2ZnODAyMTFfYnNzLCBwcml2KTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKm5ld19jaDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlpbnQgbmV3X2ZyZXEgPSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koc3dfZWxlbS0+bmV3X2NoX251bSk7CkBAIC02MTcsNyArMzkwLDcgQEAKIAkJbW9kX3RpbWVyKCZpZm1nZC0+Y2hzd2l0Y2hfdGltZXIsCiAJCQkgIGppZmZpZXMgKwogCQkJICBtc2Vjc190b19qaWZmaWVzKHN3X2VsZW0tPmNvdW50ICoKLQkJCQkJICAgYnNzLT5jYnNzLmJlYWNvbl9pbnRlcnZhbCkpOworCQkJCQkgICBjYnNzLT5iZWFjb25faW50ZXJ2YWwpKTsKIAl9CiB9CiAKQEAgLTY2MSw4ICs0MzQsMTEgQEAKIAl9IGVsc2UgewogCQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLKQogCQkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAxKTsKLQkJY29uZi0+ZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfUFM7Ci0JCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7CisKKwkJaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1JFUE9SVFNfVFhfQUNLX1NUQVRVUykpIHsKKwkJCWNvbmYtPmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1BTOworCQkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKKwkJfQogCX0KIH0KIApAQCAtNjkxLDggKzQ2NywxMyBAQAogCQlyZXR1cm47CiAJfQogCisJaWYgKCFsaXN0X2VtcHR5KCZsb2NhbC0+d29ya19saXN0KSkgeworCQlsb2NhbC0+cHNfc2RhdGEgPSBOVUxMOworCQlnb3RvIGNoYW5nZTsKKwl9CisKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKLQkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKIAkJCWNvbnRpbnVlOwogCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCiAJCQljb250aW51ZTsKQEAgLTcwMSw3ICs0ODIsOCBAQAogCX0KIAogCWlmIChjb3VudCA9PSAxICYmIGZvdW5kLT51Lm1nZC5wb3dlcnNhdmUgJiYKLQkgICAgZm91bmQtPnUubWdkLmFzc29jaWF0ZWQgJiYgbGlzdF9lbXB0eSgmZm91bmQtPnUubWdkLndvcmtfbGlzdCkgJiYKKwkgICAgZm91bmQtPnUubWdkLmFzc29jaWF0ZWQgJiYKKwkgICAgZm91bmQtPnUubWdkLmFzc29jaWF0ZWQtPmJlYWNvbl9pZXMgJiYKIAkgICAgIShmb3VuZC0+dS5tZ2QuZmxhZ3MgJiAoSUVFRTgwMjExX1NUQV9CRUFDT05fUE9MTCB8CiAJCQkJICAgIElFRUU4MDIxMV9TVEFfQ09OTkVDVElPTl9QT0xMKSkpIHsKIAkJczMyIGJlYWNvbmludF91czsKQEAgLTcxNSwyMCArNDk3LDI5IEBACiAJCWlmIChiZWFjb25pbnRfdXMgPiBsYXRlbmN5KSB7CiAJCQlsb2NhbC0+cHNfc2RhdGEgPSBOVUxMOwogCQl9IGVsc2UgewotCQkJdTggZHRpbXBlciA9IGZvdW5kLT52aWYuYnNzX2NvbmYuZHRpbV9wZXJpb2Q7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwogCQkJaW50IG1heHNscCA9IDE7CisJCQl1OCBkdGltcGVyOwogCi0JCQlpZiAoZHRpbXBlciA+IDEpCisJCQlic3MgPSAodm9pZCAqKWZvdW5kLT51Lm1nZC5hc3NvY2lhdGVkLT5wcml2OworCQkJZHRpbXBlciA9IGJzcy0+ZHRpbV9wZXJpb2Q7CisKKwkJCS8qIElmIHRoZSBUSU0gSUUgaXMgaW52YWxpZCwgcHJldGVuZCB0aGUgdmFsdWUgaXMgMSAqLworCQkJaWYgKCFkdGltcGVyKQorCQkJCWR0aW1wZXIgPSAxOworCQkJZWxzZSBpZiAoZHRpbXBlciA+IDEpCiAJCQkJbWF4c2xwID0gbWluX3QoaW50LCBkdGltcGVyLAogCQkJCQkJICAgIGxhdGVuY3kgLyBiZWFjb25pbnRfdXMpOwogCiAJCQlsb2NhbC0+aHcuY29uZi5tYXhfc2xlZXBfcGVyaW9kID0gbWF4c2xwOworCQkJbG9jYWwtPmh3LmNvbmYucHNfZHRpbV9wZXJpb2QgPSBkdGltcGVyOwogCQkJbG9jYWwtPnBzX3NkYXRhID0gZm91bmQ7CiAJCX0KIAl9IGVsc2UgewogCQlsb2NhbC0+cHNfc2RhdGEgPSBOVUxMOwogCX0KIAorIGNoYW5nZToKIAlpZWVlODAyMTFfY2hhbmdlX3BzKGxvY2FsKTsKIH0KIApAQCAtNzUzLDYgKzU0NCw3IEBACiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsLAogCQkJICAgICBkeW5hbWljX3BzX2VuYWJsZV93b3JrKTsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IGxvY2FsLT5wc19zZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAogCS8qIGNhbiBvbmx5IGhhcHBlbiB3aGVuIFBTIHdhcyBqdXN0IGRpc2FibGVkIGFueXdheSAqLwogCWlmICghc2RhdGEpCkBAIC03NjEsMTEgKzU1MywxNiBAQAogCWlmIChsb2NhbC0+aHcuY29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKQogCQlyZXR1cm47CiAKLQlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLKQorCWlmICgobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLKSAmJgorCSAgICAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX05VTExGVU5DX0FDS0VEKSkpCiAJCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMSk7CiAKLQlsb2NhbC0+aHcuY29uZi5mbGFncyB8PSBJRUVFODAyMTFfQ09ORl9QUzsKLQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOworCWlmICghKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19SRVBPUlRTX1RYX0FDS19TVEFUVVMpIHx8CisJICAgIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX05VTExGVU5DX0FDS0VEKSkgeworCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfTlVMTEZVTkNfQUNLRUQ7CisJCWxvY2FsLT5ody5jb25mLmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1BTOworCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOworCX0KIH0KIAogdm9pZCBpZWVlODAyMTFfZHluYW1pY19wc190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCkBAIC03ODYsOSArNTgzLDkgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyBwYXJhbXM7CiAJc2l6ZV90IGxlZnQ7CiAJaW50IGNvdW50OwotCXU4ICpwb3M7CisJdTggKnBvcywgdWFwc2RfcXVldWVzID0gMDsKIAotCWlmICghKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfV01NX0VOQUJMRUQpKQorCWlmIChsb2NhbC0+aHcucXVldWVzIDwgNCkKIAkJcmV0dXJuOwogCiAJaWYgKCF3bW1fcGFyYW0pCkBAIC03OTYsNiArNTkzLDEwIEBACiAKIAlpZiAod21tX3BhcmFtX2xlbiA8IDggfHwgd21tX3BhcmFtWzVdIC8qIHZlcnNpb24gKi8gIT0gMSkKIAkJcmV0dXJuOworCisJaWYgKGlmbWdkLT5mbGFncyAmIElFRUU4MDIxMV9TVEFfVUFQU0RfRU5BQkxFRCkKKwkJdWFwc2RfcXVldWVzID0gbG9jYWwtPnVhcHNkX3F1ZXVlczsKKwogCWNvdW50ID0gd21tX3BhcmFtWzZdICYgMHgwZjsKIAlpZiAoY291bnQgPT0gaWZtZ2QtPndtbV9sYXN0X3BhcmFtX3NldCkKIAkJcmV0dXJuOwpAQCAtODEwLDYgKzYxMSw3IEBACiAJZm9yICg7IGxlZnQgPj0gNDsgbGVmdCAtPSA0LCBwb3MgKz0gNCkgewogCQlpbnQgYWNpID0gKHBvc1swXSA+PiA1KSAmIDB4MDM7CiAJCWludCBhY20gPSAocG9zWzBdID4+IDQpICYgMHgwMTsKKwkJYm9vbCB1YXBzZCA9IGZhbHNlOwogCQlpbnQgcXVldWU7CiAKIAkJc3dpdGNoIChhY2kpIHsKQEAgLTgxNywyMiArNjE5LDMwIEBACiAJCQlxdWV1ZSA9IDM7CiAJCQlpZiAoYWNtKQogCQkJCWxvY2FsLT53bW1fYWNtIHw9IEJJVCgxKSB8IEJJVCgyKTsgLyogQksvLSAqLworCQkJaWYgKHVhcHNkX3F1ZXVlcyAmIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fQUNfQkspCisJCQkJdWFwc2QgPSB0cnVlOwogCQkJYnJlYWs7CiAJCWNhc2UgMjogLyogQUNfVkkgKi8KIAkJCXF1ZXVlID0gMTsKIAkJCWlmIChhY20pCiAJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDQpIHwgQklUKDUpOyAvKiBDTC9WSSAqLworCQkJaWYgKHVhcHNkX3F1ZXVlcyAmIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fQUNfVkkpCisJCQkJdWFwc2QgPSB0cnVlOwogCQkJYnJlYWs7CiAJCWNhc2UgMzogLyogQUNfVk8gKi8KIAkJCXF1ZXVlID0gMDsKIAkJCWlmIChhY20pCiAJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDYpIHwgQklUKDcpOyAvKiBWTy9OQyAqLworCQkJaWYgKHVhcHNkX3F1ZXVlcyAmIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fQUNfVk8pCisJCQkJdWFwc2QgPSB0cnVlOwogCQkJYnJlYWs7CiAJCWNhc2UgMDogLyogQUNfQkUgKi8KIAkJZGVmYXVsdDoKIAkJCXF1ZXVlID0gMjsKIAkJCWlmIChhY20pCiAJCQkJbG9jYWwtPndtbV9hY20gfD0gQklUKDApIHwgQklUKDMpOyAvKiBCRS9FRSAqLworCQkJaWYgKHVhcHNkX3F1ZXVlcyAmIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fQUNfQkUpCisJCQkJdWFwc2QgPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtODQwLDExICs2NTAsMTQgQEAKIAkJcGFyYW1zLmN3X21heCA9IGVjdzJjdygocG9zWzFdICYgMHhmMCkgPj4gNCk7CiAJCXBhcmFtcy5jd19taW4gPSBlY3cyY3cocG9zWzFdICYgMHgwZik7CiAJCXBhcmFtcy50eG9wID0gZ2V0X3VuYWxpZ25lZF9sZTE2KHBvcyArIDIpOworCQlwYXJhbXMudWFwc2QgPSB1YXBzZDsKKwogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogV01NIHF1ZXVlPSVkIGFjaT0lZCBhY209JWQgYWlmcz0lZCAiCi0JCSAgICAgICAiY1dtaW49JWQgY1dtYXg9JWQgdHhvcD0lZFxuIiwKKwkJICAgICAgICJjV21pbj0lZCBjV21heD0lZCB0eG9wPSVkIHVhcHNkPSVkXG4iLAogCQkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLCBxdWV1ZSwgYWNpLCBhY20sCi0JCSAgICAgICBwYXJhbXMuYWlmcywgcGFyYW1zLmN3X21pbiwgcGFyYW1zLmN3X21heCwgcGFyYW1zLnR4b3ApOworCQkgICAgICAgcGFyYW1zLmFpZnMsIHBhcmFtcy5jd19taW4sIHBhcmFtcy5jd19tYXgsIHBhcmFtcy50eG9wLAorCQkgICAgICAgcGFyYW1zLnVhcHNkKTsKICNlbmRpZgogCQlpZiAoZHJ2X2NvbmZfdHgobG9jYWwsIHF1ZXVlLCAmcGFyYW1zKSAmJiBsb2NhbC0+b3BzLT5jb25mX3R4KQogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gc2V0IFRYIHF1ZXVlICIKQEAgLTg3MSw2ICs2ODQsOCBAQAogCX0KIAogCXVzZV9zaG9ydF9zbG90ID0gISEoY2FwYWIgJiBXTEFOX0NBUEFCSUxJVFlfU0hPUlRfU0xPVF9USU1FKTsKKwlpZiAoc2RhdGEtPmxvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfNUdIWikKKwkJdXNlX3Nob3J0X3Nsb3QgPSB0cnVlOwogCiAJaWYgKHVzZV9wcm90ZWN0aW9uICE9IGJzc19jb25mLT51c2VfY3RzX3Byb3QpIHsKIAkJYnNzX2NvbmYtPnVzZV9jdHNfcHJvdCA9IHVzZV9wcm90ZWN0aW9uOwpAQCAtODkxLDI1ICs3MDYsMjMgQEAKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2ssCisJCQkJICAgICBzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzLAogCQkJCSAgICAgdTMyIGJzc19pbmZvX2NoYW5nZWQpCiB7CisJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcyA9ICh2b2lkICopY2Jzcy0+cHJpdjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzID0gd2stPmJzczsKIAogCWJzc19pbmZvX2NoYW5nZWQgfD0gQlNTX0NIQU5HRURfQVNTT0M7CiAJLyogc2V0IHRpbWluZyBpbmZvcm1hdGlvbiAqLwotCXNkYXRhLT52aWYuYnNzX2NvbmYuYmVhY29uX2ludCA9IGJzcy0+Y2Jzcy5iZWFjb25faW50ZXJ2YWw7Ci0Jc2RhdGEtPnZpZi5ic3NfY29uZi50aW1lc3RhbXAgPSBic3MtPmNic3MudHNmOwotCXNkYXRhLT52aWYuYnNzX2NvbmYuZHRpbV9wZXJpb2QgPSBic3MtPmR0aW1fcGVyaW9kOworCXNkYXRhLT52aWYuYnNzX2NvbmYuYmVhY29uX2ludCA9IGNic3MtPmJlYWNvbl9pbnRlcnZhbDsKKwlzZGF0YS0+dmlmLmJzc19jb25mLnRpbWVzdGFtcCA9IGNic3MtPnRzZjsKIAogCWJzc19pbmZvX2NoYW5nZWQgfD0gQlNTX0NIQU5HRURfQkVBQ09OX0lOVDsKIAlic3NfaW5mb19jaGFuZ2VkIHw9IGllZWU4MDIxMV9oYW5kbGVfYnNzX2NhcGFiaWxpdHkoc2RhdGEsCi0JCWJzcy0+Y2Jzcy5jYXBhYmlsaXR5LCBic3MtPmhhc19lcnBfdmFsdWUsIGJzcy0+ZXJwX3ZhbHVlKTsKKwkJY2Jzcy0+Y2FwYWJpbGl0eSwgYnNzLT5oYXNfZXJwX3ZhbHVlLCBic3MtPmVycF92YWx1ZSk7CiAKLQlzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZCA9IGJzczsKLQlzZGF0YS0+dS5tZ2Qub2xkX2Fzc29jaWF0ZV93b3JrID0gd2s7Ci0JbWVtY3B5KHNkYXRhLT51Lm1nZC5ic3NpZCwgYnNzLT5jYnNzLmJzc2lkLCBFVEhfQUxFTik7CisJc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQgPSBjYnNzOworCW1lbWNweShzZGF0YS0+dS5tZ2QuYnNzaWQsIGNic3MtPmJzc2lkLCBFVEhfQUxFTik7CiAKIAkvKiBqdXN0IHRvIGJlIHN1cmUgKi8KIAlzZGF0YS0+dS5tZ2QuZmxhZ3MgJj0gfihJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCB8CkBAIC05NDAsOTkgKzc1MywxNCBAQAogCiAJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwogCWllZWU4MDIxMV9yZWNhbGNfcHMobG9jYWwsIC0xKTsKKwlpZWVlODAyMTFfcmVjYWxjX3NtcHMobG9jYWwsIHNkYXRhKTsKIAltdXRleF91bmxvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAogCW5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CiAJbmV0aWZfY2Fycmllcl9vbihzZGF0YS0+ZGV2KTsKIH0KIAotc3RhdGljIGVudW0gcnhfbWdtdF9hY3Rpb24gX19tdXN0X2NoZWNrCi1pZWVlODAyMTFfZGlyZWN0X3Byb2JlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2spCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0KLQl3ay0+dHJpZXMrKzsKLQlpZiAod2stPnRyaWVzID4gSUVFRTgwMjExX0FVVEhfTUFYX1RSSUVTKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlyZWN0IHByb2JlIHRvIEFQICVwTSB0aW1lZCBvdXRcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCB3ay0+YnNzLT5jYnNzLmJzc2lkKTsKLQotCQkvKgotCQkgKiBNb3N0IGxpa2VseSBBUCBpcyBub3QgaW4gdGhlIHJhbmdlIHNvIHJlbW92ZSB0aGUKLQkJICogYnNzIHN0cnVjdCBmb3IgdGhhdCBBUC4KLQkJICovCi0JCWNmZzgwMjExX3VubGlua19ic3MobG9jYWwtPmh3LndpcGh5LCAmd2stPmJzcy0+Y2Jzcyk7Ci0KLQkJLyoKLQkJICogV2UgbWlnaHQgaGF2ZSBhIHBlbmRpbmcgc2NhbiB3aGljaCBoYWQgbm8gY2hhbmNlIHRvIHJ1biB5ZXQKLQkJICogZHVlIHRvIHdvcmsgbmVlZGluZyB0byBiZSBkb25lLiBIZW5jZSwgcXVldWUgdGhlIFNUQXMgd29yawotCQkgKiBhZ2FpbiBmb3IgdGhhdC4KLQkJICovCi0JCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZpZm1nZC0+d29yayk7Ci0JCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FVVEhfVE87Ci0JfQotCi0JcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXJlY3QgcHJvYmUgdG8gQVAgJXBNICh0cnkgJWQpXG4iLAotCQkJc2RhdGEtPmRldi0+bmFtZSwgd2stPmJzcy0+Y2Jzcy5ic3NpZCwKLQkJCXdrLT50cmllcyk7Ci0KLQkvKgotCSAqIERpcmVjdCBwcm9iZSBpcyBzZW50IHRvIGJyb2FkY2FzdCBhZGRyZXNzIGFzIHNvbWUgQVBzCi0JICogd2lsbCBub3QgYW5zd2VyIHRvIGRpcmVjdCBwYWNrZXQgaW4gdW5hc3NvY2lhdGVkIHN0YXRlLgotCSAqLwotCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgTlVMTCwgd2stPnNzaWQsIHdrLT5zc2lkX2xlbiwgTlVMTCwgMCk7Ci0KLQl3ay0+dGltZW91dCA9IGppZmZpZXMgKyBJRUVFODAyMTFfQVVUSF9USU1FT1VUOwotCXJ1bl9hZ2FpbihpZm1nZCwgd2stPnRpbWVvdXQpOwotCi0JcmV0dXJuIFJYX01HTVRfTk9ORTsKLX0KLQotCi1zdGF0aWMgZW51bSByeF9tZ210X2FjdGlvbiBfX211c3RfY2hlY2sKLWllZWU4MDIxMV9hdXRoZW50aWNhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCSAgICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aykKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQotCXdrLT50cmllcysrOwotCWlmICh3ay0+dHJpZXMgPiBJRUVFODAyMTFfQVVUSF9NQVhfVFJJRVMpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRoZW50aWNhdGlvbiB3aXRoIEFQICVwTSIKLQkJICAgICAgICIgdGltZWQgb3V0XG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgd2stPmJzcy0+Y2Jzcy5ic3NpZCk7Ci0KLQkJLyoKLQkJICogTW9zdCBsaWtlbHkgQVAgaXMgbm90IGluIHRoZSByYW5nZSBzbyByZW1vdmUgdGhlCi0JCSAqIGJzcyBzdHJ1Y3QgZm9yIHRoYXQgQVAuCi0JCSAqLwotCQljZmc4MDIxMV91bmxpbmtfYnNzKGxvY2FsLT5ody53aXBoeSwgJndrLT5ic3MtPmNic3MpOwotCi0JCS8qCi0JCSAqIFdlIG1pZ2h0IGhhdmUgYSBwZW5kaW5nIHNjYW4gd2hpY2ggaGFkIG5vIGNoYW5jZSB0byBydW4geWV0Ci0JCSAqIGR1ZSB0byB3b3JrIG5lZWRpbmcgdG8gYmUgZG9uZS4gSGVuY2UsIHF1ZXVlIHRoZSBTVEFzIHdvcmsKLQkJICogYWdhaW4gZm9yIHRoYXQuCi0JCSAqLwotCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmaWZtZ2QtPndvcmspOwotCQlyZXR1cm4gUlhfTUdNVF9DRkc4MDIxMV9BVVRIX1RPOwotCX0KLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogYXV0aGVudGljYXRlIHdpdGggQVAgJXBNICh0cnkgJWQpXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCB3ay0+YnNzLT5jYnNzLmJzc2lkLCB3ay0+dHJpZXMpOwotCi0JaWVlZTgwMjExX3NlbmRfYXV0aChzZGF0YSwgMSwgd2stPmF1dGhfYWxnLCB3ay0+aWUsIHdrLT5pZV9sZW4sCi0JCQkgICAgd2stPmJzcy0+Y2Jzcy5ic3NpZCwgTlVMTCwgMCwgMCk7Ci0Jd2stPmF1dGhfdHJhbnNhY3Rpb24gPSAyOwotCi0Jd2stPnRpbWVvdXQgPSBqaWZmaWVzICsgSUVFRTgwMjExX0FVVEhfVElNRU9VVDsKLQlydW5fYWdhaW4oaWZtZ2QsIHdrLT50aW1lb3V0KTsKLQotCXJldHVybiBSWF9NR01UX05PTkU7Ci19Ci0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkJICAgYm9vbCBkZWF1dGgpCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwpAQCAtMTA0NSwyMSArNzczLDExIEBACiAJaWYgKFdBUk5fT04oIWlmbWdkLT5hc3NvY2lhdGVkKSkKIAkJcmV0dXJuOwogCi0JbWVtY3B5KGJzc2lkLCBpZm1nZC0+YXNzb2NpYXRlZC0+Y2Jzcy5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShic3NpZCwgaWZtZ2QtPmFzc29jaWF0ZWQtPmJzc2lkLCBFVEhfQUxFTik7CiAKIAlpZm1nZC0+YXNzb2NpYXRlZCA9IE5VTEw7CiAJbWVtc2V0KGlmbWdkLT5ic3NpZCwgMCwgRVRIX0FMRU4pOwogCi0JaWYgKGRlYXV0aCkgewotCQlrZnJlZShpZm1nZC0+b2xkX2Fzc29jaWF0ZV93b3JrKTsKLQkJaWZtZ2QtPm9sZF9hc3NvY2lhdGVfd29yayA9IE5VTEw7Ci0JfSBlbHNlIHsKLQkJc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2sgPSBpZm1nZC0+b2xkX2Fzc29jaWF0ZV93b3JrOwotCi0JCXdrLT5zdGF0ZSA9IElFRUU4MDIxMV9NR0RfU1RBVEVfSURMRTsKLQkJbGlzdF9hZGQoJndrLT5saXN0LCAmaWZtZ2QtPndvcmtfbGlzdCk7Ci0JfQotCiAJLyoKIAkgKiB3ZSBuZWVkIHRvIGNvbW1pdCB0aGUgYXNzb2NpYXRlZCA9IE5VTEwgY2hhbmdlIGJlY2F1c2UgdGhlCiAJICogc2NhbiBjb2RlIHVzZXMgdGhhdCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGlmYWNlIHNob3VsZApAQCAtMTA3OCw5ICs3OTYsMTEgQEAKIAluZXRpZl9jYXJyaWVyX29mZihzZGF0YS0+ZGV2KTsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGJzc2lkKTsKLQlpZiAoc3RhKQorCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgYnNzaWQpOworCWlmIChzdGEpIHsKKwkJc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0RJU0FTU09DKTsKIAkJaWVlZTgwMjExX3N0YV90ZWFyX2Rvd25fQkFfc2Vzc2lvbnMoc3RhKTsKKwl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAljaGFuZ2VkIHw9IGllZWU4MDIxMV9yZXNldF9lcnBfaW5mbyhzZGF0YSk7CkBAIC0xMTEzLDU3ICs4MzMsNyBAQAogCWNoYW5nZWQgfD0gQlNTX0NIQU5HRURfQlNTSUQ7CiAJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsIGNoYW5nZWQpOwogCi0JcmN1X3JlYWRfbG9jaygpOwotCi0Jc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBic3NpZCk7Ci0JaWYgKCFzdGEpIHsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlzdGFfaW5mb191bmxpbmsoJnN0YSk7Ci0KLQlyY3VfcmVhZF91bmxvY2soKTsKLQotCXN0YV9pbmZvX2Rlc3Ryb3koc3RhKTsKLX0KLQotc3RhdGljIGVudW0gcnhfbWdtdF9hY3Rpb24gX19tdXN0X2NoZWNrCi1pZWVlODAyMTFfYXNzb2NpYXRlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAotCQkgICAgc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2spCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0KLQl3ay0+dHJpZXMrKzsKLQlpZiAod2stPnRyaWVzID4gSUVFRTgwMjExX0FTU09DX01BWF9UUklFUykgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGFzc29jaWF0aW9uIHdpdGggQVAgJXBNIgotCQkgICAgICAgIiB0aW1lZCBvdXRcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCB3ay0+YnNzLT5jYnNzLmJzc2lkKTsKLQotCQkvKgotCQkgKiBNb3N0IGxpa2VseSBBUCBpcyBub3QgaW4gdGhlIHJhbmdlIHNvIHJlbW92ZSB0aGUKLQkJICogYnNzIHN0cnVjdCBmb3IgdGhhdCBBUC4KLQkJICovCi0JCWNmZzgwMjExX3VubGlua19ic3MobG9jYWwtPmh3LndpcGh5LCAmd2stPmJzcy0+Y2Jzcyk7Ci0KLQkJLyoKLQkJICogV2UgbWlnaHQgaGF2ZSBhIHBlbmRpbmcgc2NhbiB3aGljaCBoYWQgbm8gY2hhbmNlIHRvIHJ1biB5ZXQKLQkJICogZHVlIHRvIHdvcmsgbmVlZGluZyB0byBiZSBkb25lLiBIZW5jZSwgcXVldWUgdGhlIFNUQXMgd29yawotCQkgKiBhZ2FpbiBmb3IgdGhhdC4KLQkJICovCi0JCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZpZm1nZC0+d29yayk7Ci0JCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FTU09DX1RPOwotCX0KLQotCXByaW50ayhLRVJOX0RFQlVHICIlczogYXNzb2NpYXRlIHdpdGggQVAgJXBNICh0cnkgJWQpXG4iLAotCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCB3ay0+YnNzLT5jYnNzLmJzc2lkLCB3ay0+dHJpZXMpOwotCWllZWU4MDIxMV9zZW5kX2Fzc29jKHNkYXRhLCB3ayk7Ci0KLQl3ay0+dGltZW91dCA9IGppZmZpZXMgKyBJRUVFODAyMTFfQVNTT0NfVElNRU9VVDsKLQlydW5fYWdhaW4oaWZtZ2QsIHdrLT50aW1lb3V0KTsKLQotCXJldHVybiBSWF9NR01UX05PTkU7CisJc3RhX2luZm9fZGVzdHJveV9hZGRyKHNkYXRhLCBic3NpZCk7CiB9CiAKIHZvaWQgaWVlZTgwMjExX3N0YV9yeF9ub3RpZnkoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCkBAIC0xMTg5LDggKzg1OSw4IEBACiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJY29uc3QgdTggKnNzaWQ7CiAKLQlzc2lkID0gaWVlZTgwMjExX2Jzc19nZXRfaWUoJmlmbWdkLT5hc3NvY2lhdGVkLT5jYnNzLCBXTEFOX0VJRF9TU0lEKTsKLQlpZWVlODAyMTFfc2VuZF9wcm9iZV9yZXEoc2RhdGEsIGlmbWdkLT5hc3NvY2lhdGVkLT5jYnNzLmJzc2lkLAorCXNzaWQgPSBpZWVlODAyMTFfYnNzX2dldF9pZShpZm1nZC0+YXNzb2NpYXRlZCwgV0xBTl9FSURfU1NJRCk7CisJaWVlZTgwMjExX3NlbmRfcHJvYmVfcmVxKHNkYXRhLCBpZm1nZC0+YXNzb2NpYXRlZC0+YnNzaWQsCiAJCQkJIHNzaWQgKyAyLCBzc2lkWzFdLCBOVUxMLCAwKTsKIAogCWlmbWdkLT5wcm9iZV9zZW5kX2NvdW50Kys7CkBAIC0xMjA0LDEyICs4NzQsMTUgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlib29sIGFscmVhZHkgPSBmYWxzZTsKIAotCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKKwlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKIAkJcmV0dXJuOwogCiAJaWYgKHNkYXRhLT5sb2NhbC0+c2Nhbm5pbmcpCiAJCXJldHVybjsKIAorCWlmIChzZGF0YS0+bG9jYWwtPnRtcF9jaGFubmVsKQorCQlyZXR1cm47CisKIAltdXRleF9sb2NrKCZpZm1nZC0+bXR4KTsKIAogCWlmICghaWZtZ2QtPmFzc29jaWF0ZWQpCkBAIC0xMjE4LDcgKzg5MSw3IEBACiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKIAlpZiAoYmVhY29uICYmIG5ldF9yYXRlbGltaXQoKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZXRlY3RlZCBiZWFjb24gbG9zcyBmcm9tIEFQICIKLQkJICAgICAgICItIHNlbmRpbmcgcHJvYmUgcmVxdWVzdFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CisJCSAgICAgICAiLSBzZW5kaW5nIHByb2JlIHJlcXVlc3RcbiIsIHNkYXRhLT5uYW1lKTsKICNlbmRpZgogCiAJLyoKQEAgLTEyNzEsODggKzk0NCw4IEBACiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9iZWFjb25fbG9zcyk7CiAKLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoX2NvbXBsZXRlZChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrKQotewotCXdrLT5zdGF0ZSA9IElFRUU4MDIxMV9NR0RfU1RBVEVfSURMRTsKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGF1dGhlbnRpY2F0ZWRcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotfQotCi0KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrLAotCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LAotCQkJCSAgICAgc2l6ZV90IGxlbikKLXsKLQl1OCAqcG9zOwotCXN0cnVjdCBpZWVlODAyXzExX2VsZW1zIGVsZW1zOwotCi0JcG9zID0gbWdtdC0+dS5hdXRoLnZhcmlhYmxlOwotCWllZWU4MDJfMTFfcGFyc2VfZWxlbXMocG9zLCBsZW4gLSAocG9zIC0gKHU4ICopIG1nbXQpLCAmZWxlbXMpOwotCWlmICghZWxlbXMuY2hhbGxlbmdlKQotCQlyZXR1cm47Ci0JaWVlZTgwMjExX3NlbmRfYXV0aChzZGF0YSwgMywgd2stPmF1dGhfYWxnLAotCQkJICAgIGVsZW1zLmNoYWxsZW5nZSAtIDIsIGVsZW1zLmNoYWxsZW5nZV9sZW4gKyAyLAotCQkJICAgIHdrLT5ic3MtPmNic3MuYnNzaWQsCi0JCQkgICAgd2stPmtleSwgd2stPmtleV9sZW4sIHdrLT5rZXlfaWR4KTsKLQl3ay0+YXV0aF90cmFuc2FjdGlvbiA9IDQ7Ci19Ci0KLXN0YXRpYyBlbnVtIHJ4X21nbXRfYWN0aW9uIF9fbXVzdF9jaGVjawotaWVlZTgwMjExX3J4X21nbXRfYXV0aChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrLAotCQkgICAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuKQotewotCXUxNiBhdXRoX2FsZywgYXV0aF90cmFuc2FjdGlvbiwgc3RhdHVzX2NvZGU7Ci0KLQlpZiAod2stPnN0YXRlICE9IElFRUU4MDIxMV9NR0RfU1RBVEVfQVVUSCkKLQkJcmV0dXJuIFJYX01HTVRfTk9ORTsKLQotCWlmIChsZW4gPCAyNCArIDYpCi0JCXJldHVybiBSWF9NR01UX05PTkU7Ci0KLQlpZiAobWVtY21wKHdrLT5ic3MtPmNic3MuYnNzaWQsIG1nbXQtPnNhLCBFVEhfQUxFTikgIT0gMCkKLQkJcmV0dXJuIFJYX01HTVRfTk9ORTsKLQotCWlmIChtZW1jbXAod2stPmJzcy0+Y2Jzcy5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQotCQlyZXR1cm4gUlhfTUdNVF9OT05FOwotCi0JYXV0aF9hbGcgPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguYXV0aF9hbGcpOwotCWF1dGhfdHJhbnNhY3Rpb24gPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguYXV0aF90cmFuc2FjdGlvbik7Ci0Jc3RhdHVzX2NvZGUgPSBsZTE2X3RvX2NwdShtZ210LT51LmF1dGguc3RhdHVzX2NvZGUpOwotCi0JaWYgKGF1dGhfYWxnICE9IHdrLT5hdXRoX2FsZyB8fAotCSAgICBhdXRoX3RyYW5zYWN0aW9uICE9IHdrLT5hdXRoX3RyYW5zYWN0aW9uKQotCQlyZXR1cm4gUlhfTUdNVF9OT05FOwotCi0JaWYgKHN0YXR1c19jb2RlICE9IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKLQkJbGlzdF9kZWwoJndrLT5saXN0KTsKLQkJa2ZyZWUod2spOwotCQlyZXR1cm4gUlhfTUdNVF9DRkc4MDIxMV9BVVRIOwotCX0KLQotCXN3aXRjaCAod2stPmF1dGhfYWxnKSB7Ci0JY2FzZSBXTEFOX0FVVEhfT1BFTjoKLQljYXNlIFdMQU5fQVVUSF9MRUFQOgotCWNhc2UgV0xBTl9BVVRIX0ZUOgotCQlpZWVlODAyMTFfYXV0aF9jb21wbGV0ZWQoc2RhdGEsIHdrKTsKLQkJcmV0dXJuIFJYX01HTVRfQ0ZHODAyMTFfQVVUSDsKLQljYXNlIFdMQU5fQVVUSF9TSEFSRURfS0VZOgotCQlpZiAod2stPmF1dGhfdHJhbnNhY3Rpb24gPT0gNCkgewotCQkJaWVlZTgwMjExX2F1dGhfY29tcGxldGVkKHNkYXRhLCB3ayk7Ci0JCQlyZXR1cm4gUlhfTUdNVF9DRkc4MDIxMV9BVVRIOwotCQl9IGVsc2UKLQkJCWllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZShzZGF0YSwgd2ssIG1nbXQsIGxlbik7Ci0JCWJyZWFrOwotCX0KLQotCXJldHVybiBSWF9NR01UX05PTkU7Ci19Ci0KLQogc3RhdGljIGVudW0gcnhfbWdtdF9hY3Rpb24gX19tdXN0X2NoZWNrCiBpZWVlODAyMTFfcnhfbWdtdF9kZWF1dGgoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2ssCiAJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuKQogewogCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwpAQCAtMTM2NCwyMyArOTU3LDE1IEBACiAKIAlBU1NFUlRfTUdEX01UWChpZm1nZCk7CiAKLQlpZiAod2spCi0JCWJzc2lkID0gd2stPmJzcy0+Y2Jzcy5ic3NpZDsKLQllbHNlCi0JCWJzc2lkID0gaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MuYnNzaWQ7CisJYnNzaWQgPSBpZm1nZC0+YXNzb2NpYXRlZC0+YnNzaWQ7CiAKIAlyZWFzb25fY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuZGVhdXRoLnJlYXNvbl9jb2RlKTsKIAogCXByaW50ayhLRVJOX0RFQlVHICIlczogZGVhdXRoZW50aWNhdGVkIGZyb20gJXBNIChSZWFzb246ICV1KVxuIiwKLQkJCXNkYXRhLT5kZXYtPm5hbWUsIGJzc2lkLCByZWFzb25fY29kZSk7CisJCQlzZGF0YS0+bmFtZSwgYnNzaWQsIHJlYXNvbl9jb2RlKTsKIAotCWlmICghd2spIHsKLQkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSwgdHJ1ZSk7Ci0JCWllZWU4MDIxMV9yZWNhbGNfaWRsZShzZGF0YS0+bG9jYWwpOwotCX0gZWxzZSB7Ci0JCWxpc3RfZGVsKCZ3ay0+bGlzdCk7Ci0JCWtmcmVlKHdrKTsKLQl9CisJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSk7CisJaWVlZTgwMjExX3JlY2FsY19pZGxlKHNkYXRhLT5sb2NhbCk7CiAKIAlyZXR1cm4gUlhfTUdNVF9DRkc4MDIxMV9ERUFVVEg7CiB9CkBAIC0xNDAxLDEyMyArOTg2LDcyIEBACiAJaWYgKFdBUk5fT04oIWlmbWdkLT5hc3NvY2lhdGVkKSkKIAkJcmV0dXJuIFJYX01HTVRfTk9ORTsKIAotCWlmIChXQVJOX09OKG1lbWNtcChpZm1nZC0+YXNzb2NpYXRlZC0+Y2Jzcy5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSkpCisJaWYgKFdBUk5fT04obWVtY21wKGlmbWdkLT5hc3NvY2lhdGVkLT5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSkpCiAJCXJldHVybiBSWF9NR01UX05PTkU7CiAKIAlyZWFzb25fY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuZGlzYXNzb2MucmVhc29uX2NvZGUpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkaXNhc3NvY2lhdGVkIGZyb20gJXBNIChSZWFzb246ICV1KVxuIiwKLQkJCXNkYXRhLT5kZXYtPm5hbWUsIG1nbXQtPnNhLCByZWFzb25fY29kZSk7CisJCQlzZGF0YS0+bmFtZSwgbWdtdC0+c2EsIHJlYXNvbl9jb2RlKTsKIAotCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIGZhbHNlKTsKKwlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhKTsKIAlpZWVlODAyMTFfcmVjYWxjX2lkbGUoc2RhdGEtPmxvY2FsKTsKIAlyZXR1cm4gUlhfTUdNVF9DRkc4MDIxMV9ESVNBU1NPQzsKIH0KIAogCi1zdGF0aWMgZW51bSByeF9tZ210X2FjdGlvbiBfX211c3RfY2hlY2sKLWllZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCi0JCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrLAotCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQsIHNpemVfdCBsZW4sCi0JCQkgICAgIGJvb2wgcmVhc3NvYykKK3N0YXRpYyBib29sIGllZWU4MDIxMV9hc3NvY19zdWNjZXNzKHN0cnVjdCBpZWVlODAyMTFfd29yayAqd2ssCisJCQkJICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbikKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHdrLT5zZGF0YTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzID0gd2stPmFzc29jLmJzczsKKwl1OCAqcG9zOwogCXUzMiByYXRlcywgYmFzaWNfcmF0ZXM7Ci0JdTE2IGNhcGFiX2luZm8sIHN0YXR1c19jb2RlLCBhaWQ7CisJdTE2IGNhcGFiX2luZm8sIGFpZDsKIAlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiA9ICZzZGF0YS0+dmlmLmJzc19jb25mOwotCXU4ICpwb3M7CiAJdTMyIGNoYW5nZWQgPSAwOwotCWludCBpLCBqOwotCWJvb2wgaGF2ZV9oaWdoZXJfdGhhbl8xMW1iaXQgPSBmYWxzZSwgbmV3c3RhID0gZmFsc2U7CisJaW50IGksIGosIGVycjsKKwlib29sIGhhdmVfaGlnaGVyX3RoYW5fMTFtYml0ID0gZmFsc2U7CiAJdTE2IGFwX2h0X2NhcF9mbGFnczsKIAotCS8qCi0JICogQXNzb2NSZXNwIGFuZCBSZWFzc29jUmVzcCBoYXZlIGlkZW50aWNhbCBzdHJ1Y3R1cmUsIHNvIHByb2Nlc3MgYm90aAotCSAqIG9mIHRoZW0gaW4gdGhpcyBmdW5jdGlvbi4KLQkgKi8KKwkvKiBBc3NvY1Jlc3AgYW5kIFJlYXNzb2NSZXNwIGhhdmUgaWRlbnRpY2FsIHN0cnVjdHVyZSAqLwogCi0JaWYgKGxlbiA8IDI0ICsgNikKLQkJcmV0dXJuIFJYX01HTVRfTk9ORTsKLQotCWlmIChtZW1jbXAod2stPmJzcy0+Y2Jzcy5ic3NpZCwgbWdtdC0+c2EsIEVUSF9BTEVOKSAhPSAwKQotCQlyZXR1cm4gUlhfTUdNVF9OT05FOwotCi0JY2FwYWJfaW5mbyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXNzb2NfcmVzcC5jYXBhYl9pbmZvKTsKLQlzdGF0dXNfY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXNzb2NfcmVzcC5zdGF0dXNfY29kZSk7CiAJYWlkID0gbGUxNl90b19jcHUobWdtdC0+dS5hc3NvY19yZXNwLmFpZCk7CisJY2FwYWJfaW5mbyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXNzb2NfcmVzcC5jYXBhYl9pbmZvKTsKIAotCXByaW50ayhLRVJOX0RFQlVHICIlczogUlggJXNzc29jUmVzcCBmcm9tICVwTSAoY2FwYWI9MHgleCAiCi0JICAgICAgICJzdGF0dXM9JWQgYWlkPSVkKVxuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgcmVhc3NvYyA/ICJSZWEiIDogIkEiLCBtZ210LT5zYSwKLQkgICAgICAgY2FwYWJfaW5mbywgc3RhdHVzX2NvZGUsICh1MTYpKGFpZCAmIH4oQklUKDE1KSB8IEJJVCgxNCkpKSk7CisJaWYgKChhaWQgJiAoQklUKDE1KSB8IEJJVCgxNCkpKSAhPSAoQklUKDE1KSB8IEJJVCgxNCkpKQorCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGludmFsaWQgYWlkIHZhbHVlICVkOyBiaXRzIDE1OjE0IG5vdCAiCisJCSAgICAgICAic2V0XG4iLCBzZGF0YS0+bmFtZSwgYWlkKTsKKwlhaWQgJj0gfihCSVQoMTUpIHwgQklUKDE0KSk7CiAKIAlwb3MgPSBtZ210LT51LmFzc29jX3Jlc3AudmFyaWFibGU7CiAJaWVlZTgwMl8xMV9wYXJzZV9lbGVtcyhwb3MsIGxlbiAtIChwb3MgLSAodTggKikgbWdtdCksICZlbGVtcyk7CiAKLQlpZiAoc3RhdHVzX2NvZGUgPT0gV0xBTl9TVEFUVVNfQVNTT0NfUkVKRUNURURfVEVNUE9SQVJJTFkgJiYKLQkgICAgZWxlbXMudGltZW91dF9pbnQgJiYgZWxlbXMudGltZW91dF9pbnRfbGVuID09IDUgJiYKLQkgICAgZWxlbXMudGltZW91dF9pbnRbMF0gPT0gV0xBTl9USU1FT1VUX0FTU09DX0NPTUVCQUNLKSB7Ci0JCXUzMiB0dSwgbXM7Ci0JCXR1ID0gZ2V0X3VuYWxpZ25lZF9sZTMyKGVsZW1zLnRpbWVvdXRfaW50ICsgMSk7Ci0JCW1zID0gdHUgKiAxMDI0IC8gMTAwMDsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBUCByZWplY3RlZCBhc3NvY2lhdGlvbiB0ZW1wb3JhcmlseTsgIgotCQkgICAgICAgImNvbWViYWNrIGR1cmF0aW9uICV1IFRVICgldSBtcylcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lLCB0dSwgbXMpOwotCQl3ay0+dGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKG1zKTsKLQkJaWYgKG1zID4gSUVFRTgwMjExX0FTU09DX1RJTUVPVVQpCi0JCQlydW5fYWdhaW4oaWZtZ2QsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKG1zKSk7Ci0JCXJldHVybiBSWF9NR01UX05PTkU7Ci0JfQotCi0JaWYgKHN0YXR1c19jb2RlICE9IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBUCBkZW5pZWQgYXNzb2NpYXRpb24gKGNvZGU9JWQpXG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgc3RhdHVzX2NvZGUpOwotCQl3ay0+c3RhdGUgPSBJRUVFODAyMTFfTUdEX1NUQVRFX0lETEU7Ci0JCXJldHVybiBSWF9NR01UX0NGRzgwMjExX0FTU09DOwotCX0KLQotCWlmICgoYWlkICYgKEJJVCgxNSkgfCBCSVQoMTQpKSkgIT0gKEJJVCgxNSkgfCBCSVQoMTQpKSkKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBpbnZhbGlkIGFpZCB2YWx1ZSAlZDsgYml0cyAxNToxNCBub3QgIgotCQkgICAgICAgInNldFxuIiwgc2RhdGEtPmRldi0+bmFtZSwgYWlkKTsKLQlhaWQgJj0gfihCSVQoMTUpIHwgQklUKDE0KSk7Ci0KIAlpZiAoIWVsZW1zLnN1cHBfcmF0ZXMpIHsKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBubyBTdXBwUmF0ZXMgZWxlbWVudCBpbiBBc3NvY1Jlc3BcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJcmV0dXJuIFJYX01HTVRfTk9ORTsKKwkJICAgICAgIHNkYXRhLT5uYW1lKTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXByaW50ayhLRVJOX0RFQlVHICIlczogYXNzb2NpYXRlZFxuIiwgc2RhdGEtPmRldi0+bmFtZSk7CiAJaWZtZ2QtPmFpZCA9IGFpZDsKIAotCXJjdV9yZWFkX2xvY2soKTsKLQotCS8qIEFkZCBTVEEgZW50cnkgZm9yIHRoZSBBUCAqLwotCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgd2stPmJzcy0+Y2Jzcy5ic3NpZCk7CisJc3RhID0gc3RhX2luZm9fYWxsb2Moc2RhdGEsIGNic3MtPmJzc2lkLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXN0YSkgewotCQluZXdzdGEgPSB0cnVlOwotCi0JCXJjdV9yZWFkX3VubG9jaygpOwotCi0JCXN0YSA9IHN0YV9pbmZvX2FsbG9jKHNkYXRhLCB3ay0+YnNzLT5jYnNzLmJzc2lkLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFzdGEpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jIFNUQSBlbnRyeSBmb3IiCi0JCQkgICAgICAgIiB0aGUgQVBcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOwotCQkJcmV0dXJuIFJYX01HTVRfTk9ORTsKLQkJfQotCi0JCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9BVVRIIHwgV0xBTl9TVEFfQVNTT0MgfAotCQkJCSAgIFdMQU5fU1RBX0FTU09DX0FQKTsKLQkJaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9DT05UUk9MX1BPUlQpKQotCQkJc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX0FVVEhPUklaRUQpOwotCi0JCXJjdV9yZWFkX2xvY2soKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2MgU1RBIGVudHJ5IGZvciIKKwkJICAgICAgICIgdGhlIEFQXG4iLCBzZGF0YS0+bmFtZSk7CisJCXJldHVybiBmYWxzZTsKIAl9CiAKKwlzZXRfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfQVVUSCB8IFdMQU5fU1RBX0FTU09DIHwKKwkJCSAgIFdMQU5fU1RBX0FTU09DX0FQKTsKKwlpZiAoIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0NPTlRST0xfUE9SVCkpCisJCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9BVVRIT1JJWkVEKTsKKwogCXJhdGVzID0gMDsKIAliYXNpY19yYXRlcyA9IDA7CiAJc2JhbmQgPSBsb2NhbC0+aHcud2lwaHktPmJhbmRzW2xvY2FsLT5ody5jb25mLmNoYW5uZWwtPmJhbmRdOwpAQCAtMTU4MCw0MCArMTExNCw0MCBAQAogCWlmIChlbGVtcy53bW1fcGFyYW0pCiAJCXNldF9zdGFfZmxhZ3Moc3RhLCBXTEFOX1NUQV9XTUUpOwogCi0JaWYgKG5ld3N0YSkgewotCQlpbnQgZXJyID0gc3RhX2luZm9faW5zZXJ0KHN0YSk7Ci0JCWlmIChlcnIpIHsKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGluc2VydCBTVEEgZW50cnkgZm9yIgotCQkJICAgICAgICIgdGhlIEFQIChlcnJvciAlZClcbiIsIHNkYXRhLT5kZXYtPm5hbWUsIGVycik7Ci0JCQlyY3VfcmVhZF91bmxvY2soKTsKLQkJCXJldHVybiBSWF9NR01UX05PTkU7Ci0JCX0KKwllcnIgPSBzdGFfaW5mb19pbnNlcnQoc3RhKTsKKwlzdGEgPSBOVUxMOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gaW5zZXJ0IFNUQSBlbnRyeSBmb3IiCisJCSAgICAgICAiIHRoZSBBUCAoZXJyb3IgJWQpXG4iLCBzZGF0YS0+bmFtZSwgZXJyKTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAotCXJjdV9yZWFkX3VubG9jaygpOwotCiAJaWYgKGVsZW1zLndtbV9wYXJhbSkKIAkJaWVlZTgwMjExX3N0YV93bW1fcGFyYW1zKGxvY2FsLCBpZm1nZCwgZWxlbXMud21tX3BhcmFtLAogCQkJCQkgZWxlbXMud21tX3BhcmFtX2xlbik7CiAJZWxzZQogCQlpZWVlODAyMTFfc2V0X3dtbV9kZWZhdWx0KHNkYXRhKTsKIAorCWxvY2FsLT5vcGVyX2NoYW5uZWwgPSB3ay0+Y2hhbjsKKwogCWlmIChlbGVtcy5odF9pbmZvX2VsZW0gJiYgZWxlbXMud21tX3BhcmFtICYmCi0JICAgIChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEKSAmJgorCSAgICAoc2RhdGEtPmxvY2FsLT5ody5xdWV1ZXMgPj0gNCkgJiYKIAkgICAgIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0RJU0FCTEVfMTFOKSkKIAkJY2hhbmdlZCB8PSBpZWVlODAyMTFfZW5hYmxlX2h0KHNkYXRhLCBlbGVtcy5odF9pbmZvX2VsZW0sCi0JCQkJCSAgICAgICB3ay0+YnNzLT5jYnNzLmJzc2lkLAotCQkJCQkgICAgICAgYXBfaHRfY2FwX2ZsYWdzKTsKLQotICAgICAgICAvKiBkZWxldGUgd29yayBpdGVtIC0tIG11c3QgYmUgYmVmb3JlIHNldF9hc3NvY2lhdGVkIGZvciBQUyAqLwotCWxpc3RfZGVsKCZ3ay0+bGlzdCk7CisJCQkJCSAgICAgICBjYnNzLT5ic3NpZCwgYXBfaHRfY2FwX2ZsYWdzKTsKIAogCS8qIHNldCBBSUQgYW5kIGFzc29jIGNhcGFiaWxpdHksCiAJICogaWVlZTgwMjExX3NldF9hc3NvY2lhdGVkKCkgd2lsbCB0ZWxsIHRoZSBkcml2ZXIgKi8KIAlic3NfY29uZi0+YWlkID0gYWlkOwogCWJzc19jb25mLT5hc3NvY19jYXBhYmlsaXR5ID0gY2FwYWJfaW5mbzsKLQkvKiB0aGlzIHdpbGwgdGFrZSBvd25lcnNoaXAgb2Ygd2sgKi8KLQlpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoc2RhdGEsIHdrLCBjaGFuZ2VkKTsKKwlpZWVlODAyMTFfc2V0X2Fzc29jaWF0ZWQoc2RhdGEsIGNic3MsIGNoYW5nZWQpOworCisJLyoKKwkgKiBJZiB3ZSdyZSB1c2luZyA0LWFkZHIgbW9kZSwgbGV0IHRoZSBBUCBrbm93IHRoYXQgd2UncmUKKwkgKiBkb2luZyBzbywgc28gdGhhdCBpdCBjYW4gY3JlYXRlIHRoZSBTVEEgVkxBTiBvbiBpdHMgc2lkZQorCSAqLworCWlmIChpZm1nZC0+dXNlXzRhZGRyKQorCQlpZWVlODAyMTFfc2VuZF80YWRkcl9udWxsZnVuYyhsb2NhbCwgc2RhdGEpOwogCiAJLyoKIAkgKiBTdGFydCB0aW1lciB0byBwcm9iZSB0aGUgY29ubmVjdGlvbiB0byB0aGUgQVAgbm93LgpAQCAtMTYyMiw3ICsxMTU2LDcgQEAKIAlpZWVlODAyMTFfc3RhX3J4X25vdGlmeShzZGF0YSwgKHN0cnVjdCBpZWVlODAyMTFfaGRyICopbWdtdCk7CiAJbW9kX2JlYWNvbl90aW1lcihzZGF0YSk7CiAKLQlyZXR1cm4gUlhfTUdNVF9DRkc4MDIxMV9BU1NPQzsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogCkBAIC0xNjM3LDYgKzExNzEsMTMgQEAKIAlpbnQgZnJlcTsKIAlzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzOwogCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbDsKKwlib29sIG5lZWRfcHMgPSBmYWxzZTsKKworCWlmIChzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZCkgeworCQlic3MgPSAodm9pZCAqKXNkYXRhLT51Lm1nZC5hc3NvY2lhdGVkLT5wcml2OworCQkvKiBub3QgcHJldmlvdXNseSBzZXQgc28gd2UgbWF5IG5lZWQgdG8gcmVjYWxjICovCisJCW5lZWRfcHMgPSAhYnNzLT5kdGltX3BlcmlvZDsKKwl9CiAKIAlpZiAoZWxlbXMtPmRzX3BhcmFtcyAmJiBlbGVtcy0+ZHNfcGFyYW1zX2xlbiA9PSAxKQogCQlmcmVxID0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KGVsZW1zLT5kc19wYXJhbXNbMF0pOwpAQCAtMTY1Niw4ICsxMTk3LDE0IEBACiAJaWYgKCFzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZCkKIAkJcmV0dXJuOwogCisJaWYgKG5lZWRfcHMpIHsKKwkJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCQlpZWVlODAyMTFfcmVjYWxjX3BzKGxvY2FsLCAtMSk7CisJCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCX0KKwogCWlmIChlbGVtcy0+Y2hfc3dpdGNoX2VsZW0gJiYgKGVsZW1zLT5jaF9zd2l0Y2hfZWxlbV9sZW4gPT0gMykgJiYKLQkgICAgKG1lbWNtcChtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQtPmNic3MuYnNzaWQsCisJICAgIChtZW1jbXAobWdtdC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5hc3NvY2lhdGVkLT5ic3NpZCwKIAkJCQkJCQlFVEhfQUxFTikgPT0gMCkpIHsKIAkJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsX3N3X2llICpzd19lbGVtID0KIAkJCShzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWxfc3dfaWUgKillbGVtcy0+Y2hfc3dpdGNoX2VsZW07CkBAIC0xNjY3LDE5ICsxMjE0LDE5IEBACiAKIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKLQkJCQkJIHN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLAotCQkJCQkgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKKwkJCQkJIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHZvaWQgKilza2ItPmRhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZDsKLQlzaXplX3QgYmFzZWxlbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqcnhfc3RhdHVzID0gKHZvaWQgKikgc2tiLT5jYjsKKwlzaXplX3QgYmFzZWxlbiwgbGVuID0gc2tiLT5sZW47CiAJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7CiAKIAlpZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAKIAlBU1NFUlRfTUdEX01UWChpZm1nZCk7CiAKLQlpZiAobWVtY21wKG1nbXQtPmRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pKQorCWlmIChtZW1jbXAobWdtdC0+ZGEsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pKQogCQlyZXR1cm47IC8qIGlnbm9yZSBQcm9iZVJlc3AgdG8gZm9yZWlnbiBhZGRyZXNzICovCiAKIAliYXNlbGVuID0gKHU4ICopIG1nbXQtPnUucHJvYmVfcmVzcC52YXJpYWJsZSAtICh1OCAqKSBtZ210OwpAQCAtMTY5MSwxNyArMTIzOCw4IEBACiAKIAlpZWVlODAyMTFfcnhfYnNzX2luZm8oc2RhdGEsIG1nbXQsIGxlbiwgcnhfc3RhdHVzLCAmZWxlbXMsIGZhbHNlKTsKIAotCS8qIGRpcmVjdCBwcm9iZSBtYXkgYmUgcGFydCBvZiB0aGUgYXNzb2NpYXRpb24gZmxvdyAqLwotCWlmICh3ayAmJiB3ay0+c3RhdGUgPT0gSUVFRTgwMjExX01HRF9TVEFURV9QUk9CRSkgewotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpcmVjdCBwcm9iZSByZXNwb25kZWRcbiIsCi0JCSAgICAgICBzZGF0YS0+ZGV2LT5uYW1lKTsKLQkJd2stPnRyaWVzID0gMDsKLQkJd2stPnN0YXRlID0gSUVFRTgwMjExX01HRF9TVEFURV9BVVRIOwotCQlXQVJOX09OKGllZWU4MDIxMV9hdXRoZW50aWNhdGUoc2RhdGEsIHdrKSAhPSBSWF9NR01UX05PTkUpOwotCX0KLQogCWlmIChpZm1nZC0+YXNzb2NpYXRlZCAmJgotCSAgICBtZW1jbXAobWdtdC0+YnNzaWQsIGlmbWdkLT5hc3NvY2lhdGVkLT5jYnNzLmJzc2lkLCBFVEhfQUxFTikgPT0gMCAmJgorCSAgICBtZW1jbXAobWdtdC0+YnNzaWQsIGlmbWdkLT5hc3NvY2lhdGVkLT5ic3NpZCwgRVRIX0FMRU4pID09IDAgJiYKIAkgICAgaWZtZ2QtPmZsYWdzICYgKElFRUU4MDIxMV9TVEFfQkVBQ09OX1BPTEwgfAogCQkJICAgIElFRUU4MDIxMV9TVEFfQ09OTkVDVElPTl9QT0xMKSkgewogCQlpZm1nZC0+ZmxhZ3MgJj0gfihJRUVFODAyMTFfU1RBX0NPTk5FQ1RJT05fUE9MTCB8CkBAIC0xNzc0LDcgKzEzMTIsNyBAQAogCWlmICghaWZtZ2QtPmFzc29jaWF0ZWQpCiAJCXJldHVybjsKIAotCWJzc2lkID0gaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MuYnNzaWQ7CisJYnNzaWQgPSBpZm1nZC0+YXNzb2NpYXRlZC0+YnNzaWQ7CiAKIAkvKgogCSAqIEFuZCBpbiB0aGVvcnkgZXZlbiBmcmFtZXMgZnJvbSBhIGRpZmZlcmVudCBBUCB3ZSB3ZXJlIGp1c3QKQEAgLTE3ODcsNyArMTMyNSw3IEBACiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkgewogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBjYW5jZWxsaW5nIHByb2JlcmVxIHBvbGwgZHVlICIKLQkJCSAgICAgICAidG8gYSByZWNlaXZlZCBiZWFjb25cbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQkJICAgICAgICJ0byBhIHJlY2VpdmVkIGJlYWNvblxuIiwgc2RhdGEtPm5hbWUpOwogCQl9CiAjZW5kaWYKIAkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0JFQUNPTl9QT0xMOwpAQCAtMTg2NSw3ICsxNDAzLDcgQEAKIAogCQlyY3VfcmVhZF9sb2NrKCk7CiAKLQkJc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBic3NpZCk7CisJCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgYnNzaWQpOwogCQlpZiAoV0FSTl9PTighc3RhKSkgewogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlyZXR1cm47CkBAIC0xOTEzLDkgKzE0NTEsNiBAQAogCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgewogCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1A6CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfQkVBQ09OOgotCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FVVEg6Ci0JY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUDoKLQljYXNlIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1A6CiAJY2FzZSBJRUVFODAyMTFfU1RZUEVfREVBVVRIOgogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RJU0FTU09DOgogCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FDVElPTjoKQEAgLTE5MzMsNyArMTQ2OCw2IEBACiAJc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1czsKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2s7CiAJZW51bSByeF9tZ210X2FjdGlvbiBybWEgPSBSWF9NR01UX05PTkU7CiAJdTE2IGZjOwogCkBAIC0xOTQ0LDIwICsxNDc4LDE3IEBACiAJbXV0ZXhfbG9jaygmaWZtZ2QtPm10eCk7CiAKIAlpZiAoaWZtZ2QtPmFzc29jaWF0ZWQgJiYKLQkgICAgbWVtY21wKGlmbWdkLT5hc3NvY2lhdGVkLT5jYnNzLmJzc2lkLCBtZ210LT5ic3NpZCwKLQkJCQkJCQlFVEhfQUxFTikgPT0gMCkgeworCSAgICBtZW1jbXAoaWZtZ2QtPmFzc29jaWF0ZWQtPmJzc2lkLCBtZ210LT5ic3NpZCwgRVRIX0FMRU4pID09IDApIHsKIAkJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7CiAJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0JFQUNPTjoKIAkJCWllZWU4MDIxMV9yeF9tZ210X2JlYWNvbihzZGF0YSwgbWdtdCwgc2tiLT5sZW4sCiAJCQkJCQkgcnhfc3RhdHVzKTsKIAkJCWJyZWFrOwogCQljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgotCQkJaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcChzZGF0YSwgTlVMTCwgbWdtdCwKLQkJCQkJCSAgICAgc2tiLT5sZW4sIHJ4X3N0YXR1cyk7CisJCQlpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKHNkYXRhLCBza2IpOwogCQkJYnJlYWs7CiAJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSDoKLQkJCXJtYSA9IGllZWU4MDIxMV9yeF9tZ210X2RlYXV0aChzZGF0YSwgTlVMTCwKLQkJCQkJCSAgICAgICBtZ210LCBza2ItPmxlbik7CisJCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9kZWF1dGgoc2RhdGEsIG1nbXQsIHNrYi0+bGVuKTsKIAkJCWJyZWFrOwogCQljYXNlIElFRUU4MDIxMV9TVFlQRV9ESVNBU1NPQzoKIAkJCXJtYSA9IGllZWU4MDIxMV9yeF9tZ210X2Rpc2Fzc29jKHNkYXRhLCBtZ210LCBza2ItPmxlbik7CkBAIC0xOTY4LDcgKzE0OTksNyBAQAogCiAJCQlpZWVlODAyMTFfc3RhX3Byb2Nlc3NfY2hhbnN3aXRjaChzZGF0YSwKIAkJCQkJJm1nbXQtPnUuYWN0aW9uLnUuY2hhbl9zd2l0Y2guc3dfZWxlbSwKLQkJCQkJaWZtZ2QtPmFzc29jaWF0ZWQpOworCQkJCQkodm9pZCAqKWlmbWdkLT5hc3NvY2lhdGVkLT5wcml2KTsKIAkJCWJyZWFrOwogCQl9CiAJCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CkBAIC0xOTg5LDU4ICsxNTIwLDExIEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWxpc3RfZm9yX2VhY2hfZW50cnkod2ssICZpZm1nZC0+d29ya19saXN0LCBsaXN0KSB7Ci0JCWlmIChtZW1jbXAod2stPmJzcy0+Y2Jzcy5ic3NpZCwgbWdtdC0+YnNzaWQsIEVUSF9BTEVOKSAhPSAwKQotCQkJY29udGludWU7Ci0KLQkJc3dpdGNoIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSB7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX1BST0JFX1JFU1A6Ci0JCQlpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKHNkYXRhLCB3aywgbWdtdCwgc2tiLT5sZW4sCi0JCQkJCQkgICAgIHJ4X3N0YXR1cyk7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVVUSDoKLQkJCXJtYSA9IGllZWU4MDIxMV9yeF9tZ210X2F1dGgoc2RhdGEsIHdrLCBtZ210LCBza2ItPmxlbik7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVTUDoKLQkJCXJtYSA9IGllZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3Aoc2RhdGEsIHdrLCBtZ210LAotCQkJCQkJCSAgIHNrYi0+bGVuLCBmYWxzZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQOgotCQkJcm1hID0gaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcChzZGF0YSwgd2ssIG1nbXQsCi0JCQkJCQkJICAgc2tiLT5sZW4sIHRydWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX1NUWVBFX0RFQVVUSDoKLQkJCXJtYSA9IGllZWU4MDIxMV9yeF9tZ210X2RlYXV0aChzZGF0YSwgd2ssIG1nbXQsCi0JCQkJCQkgICAgICAgc2tiLT5sZW4pOwotCQkJYnJlYWs7Ci0JCX0KLQkJLyoKLQkJICogV2UndmUgcHJvY2Vzc2VkIHRoaXMgZnJhbWUgZm9yIHRoYXQgd29yaywgc28gaXQgY2FuJ3QKLQkJICogYmVsb25nIHRvIGFub3RoZXIgd29yayBzdHJ1Y3QuCi0JCSAqIE5COiB0aGlzIGlzIGFsc28gcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzIGJlY2F1c2UgdGhlCi0JCSAqIGNhbGxlZCBmdW5jdGlvbnMgY2FuIGZyZWUgJ3drJywgYW5kIGZvciAncm1hJyEKLQkJICovCi0JCWJyZWFrOwotCX0KLQogCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CiAKLQlzd2l0Y2ggKHJtYSkgewotCWNhc2UgUlhfTUdNVF9OT05FOgotCQkvKiBubyBhY3Rpb24gKi8KLQkJYnJlYWs7Ci0JY2FzZSBSWF9NR01UX0NGRzgwMjExX0FVVEg6Ci0JCWNmZzgwMjExX3NlbmRfcnhfYXV0aChzZGF0YS0+ZGV2LCAodTggKikgbWdtdCwgc2tiLT5sZW4pOwotCQlicmVhazsKLQljYXNlIFJYX01HTVRfQ0ZHODAyMTFfQVNTT0M6Ci0JCWNmZzgwMjExX3NlbmRfcnhfYXNzb2Moc2RhdGEtPmRldiwgKHU4ICopIG1nbXQsIHNrYi0+bGVuKTsKLQkJYnJlYWs7Ci0JY2FzZSBSWF9NR01UX0NGRzgwMjExX0RFQVVUSDoKKwlpZiAoc2tiLT5sZW4gPj0gMjQgKyAyIC8qIG1nbXQgKyBkZWF1dGggcmVhc29uICovICYmCisJICAgIChmYyAmIElFRUU4MDIxMV9GQ1RMX1NUWVBFKSA9PSBJRUVFODAyMTFfU1RZUEVfREVBVVRIKQogCQljZmc4MDIxMV9zZW5kX2RlYXV0aChzZGF0YS0+ZGV2LCAodTggKiltZ210LCBza2ItPmxlbik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVdBUk4oMSwgInVuZXhwZWN0ZWQ6ICVkIiwgcm1hKTsKLQl9CiAKICBvdXQ6CiAJa2ZyZWVfc2tiKHNrYik7CkBAIC0yMDY4LDEyICsxNTUyLDggQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOwogCXN0cnVjdCBza19idWZmICpza2I7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ2Rfd29yayAqd2ssICp0bXA7Ci0JTElTVF9IRUFEKGZyZWVfd29yayk7Ci0JZW51bSByeF9tZ210X2FjdGlvbiBybWE7Ci0JYm9vbCBhbnlidXN5ID0gZmFsc2U7CiAKLQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCXJldHVybjsKIAogCWlmIChsb2NhbC0+c2Nhbm5pbmcpCkBAIC0yMTA0LDcgKzE1ODQsNyBAQAogCSAgICBpZm1nZC0+YXNzb2NpYXRlZCkgewogCQl1OCBic3NpZFtFVEhfQUxFTl07CiAKLQkJbWVtY3B5KGJzc2lkLCBpZm1nZC0+YXNzb2NpYXRlZC0+Y2Jzcy5ic3NpZCwgRVRIX0FMRU4pOworCQltZW1jcHkoYnNzaWQsIGlmbWdkLT5hc3NvY2lhdGVkLT5ic3NpZCwgRVRIX0FMRU4pOwogCQlpZiAodGltZV9pc19hZnRlcl9qaWZmaWVzKGlmbWdkLT5wcm9iZV90aW1lb3V0KSkKIAkJCXJ1bl9hZ2FpbihpZm1nZCwgaWZtZ2QtPnByb2JlX3RpbWVvdXQpOwogCkBAIC0yMTI2LDcgKzE2MDYsNyBAQAogCQkJcHJpbnRrKEtFUk5fREVCVUcgIk5vIHByb2JlIHJlc3BvbnNlIGZyb20gQVAgJXBNIgogCQkJCSIgYWZ0ZXIgJWRtcywgZGlzY29ubmVjdGluZy5cbiIsCiAJCQkJYnNzaWQsICgxMDAwICogSUVFRTgwMjExX1BST0JFX1dBSVQpL0haKTsKLQkJCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUpOworCQkJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSk7CiAJCQlpZWVlODAyMTFfcmVjYWxjX2lkbGUobG9jYWwpOwogCQkJbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKIAkJCS8qCkBAIC0yMTQxLDg3ICsxNjIxLDcgQEAKIAkJfQogCX0KIAotCi0JaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3aywgdG1wLCAmaWZtZ2QtPndvcmtfbGlzdCwgbGlzdCkgewotCQlpZiAodGltZV9pc19hZnRlcl9qaWZmaWVzKHdrLT50aW1lb3V0KSkgewotCQkJLyoKLQkJCSAqIFRoaXMgd29yayBpdGVtIGlzbid0IHN1cHBvc2VkIHRvIGJlIHdvcmtlZCBvbgotCQkJICogcmlnaHQgbm93LCBidXQgdGFrZSBjYXJlIHRvIGFkanVzdCB0aGUgdGltZXIKLQkJCSAqIHByb3Blcmx5LgotCQkJICovCi0JCQlydW5fYWdhaW4oaWZtZ2QsIHdrLT50aW1lb3V0KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJc3dpdGNoICh3ay0+c3RhdGUpIHsKLQkJZGVmYXVsdDoKLQkJCVdBUk5fT04oMSk7Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBJRUVFODAyMTFfTUdEX1NUQVRFX0lETEU6Ci0JCQkvKiBub3RoaW5nICovCi0JCQlybWEgPSBSWF9NR01UX05PTkU7Ci0JCQlicmVhazsKLQkJY2FzZSBJRUVFODAyMTFfTUdEX1NUQVRFX1BST0JFOgotCQkJcm1hID0gaWVlZTgwMjExX2RpcmVjdF9wcm9iZShzZGF0YSwgd2spOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX01HRF9TVEFURV9BVVRIOgotCQkJcm1hID0gaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzZGF0YSwgd2spOwotCQkJYnJlYWs7Ci0JCWNhc2UgSUVFRTgwMjExX01HRF9TVEFURV9BU1NPQzoKLQkJCXJtYSA9IGllZWU4MDIxMV9hc3NvY2lhdGUoc2RhdGEsIHdrKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJc3dpdGNoIChybWEpIHsKLQkJY2FzZSBSWF9NR01UX05PTkU6Ci0JCQkvKiBubyBhY3Rpb24gcmVxdWlyZWQgKi8KLQkJCWJyZWFrOwotCQljYXNlIFJYX01HTVRfQ0ZHODAyMTFfQVVUSF9UTzoKLQkJY2FzZSBSWF9NR01UX0NGRzgwMjExX0FTU09DX1RPOgotCQkJbGlzdF9kZWwoJndrLT5saXN0KTsKLQkJCWxpc3RfYWRkKCZ3ay0+bGlzdCwgJmZyZWVfd29yayk7Ci0JCQl3ay0+dHJpZXMgPSBybWE7IC8qIHNtYWxsIGFidXNlIGJ1dCBvbmx5IGxvY2FsICovCi0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCVdBUk4oMSwgInVuZXhwZWN0ZWQ6ICVkIiwgcm1hKTsKLQkJfQotCX0KLQotCWxpc3RfZm9yX2VhY2hfZW50cnkod2ssICZpZm1nZC0+d29ya19saXN0LCBsaXN0KSB7Ci0JCWlmICh3ay0+c3RhdGUgIT0gSUVFRTgwMjExX01HRF9TVEFURV9JRExFKSB7Ci0JCQlhbnlidXN5ID0gdHJ1ZTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICghYW55YnVzeSAmJgotCSAgICB0ZXN0X2FuZF9jbGVhcl9iaXQoSUVFRTgwMjExX1NUQV9SRVFfU0NBTiwgJmlmbWdkLT5yZXF1ZXN0KSkKLQkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yaygmbG9jYWwtPmh3LAotCQkJCQkgICAgICZsb2NhbC0+c2Nhbl93b3JrLAotCQkJCQkgICAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoMCkpOwotCiAJbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3aywgdG1wLCAmZnJlZV93b3JrLCBsaXN0KSB7Ci0JCXN3aXRjaCAod2stPnRyaWVzKSB7Ci0JCWNhc2UgUlhfTUdNVF9DRkc4MDIxMV9BVVRIX1RPOgotCQkJY2ZnODAyMTFfc2VuZF9hdXRoX3RpbWVvdXQoc2RhdGEtPmRldiwKLQkJCQkJCSAgIHdrLT5ic3MtPmNic3MuYnNzaWQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgUlhfTUdNVF9DRkc4MDIxMV9BU1NPQ19UTzoKLQkJCWNmZzgwMjExX3NlbmRfYXNzb2NfdGltZW91dChzZGF0YS0+ZGV2LAotCQkJCQkJICAgIHdrLT5ic3MtPmNic3MuYnNzaWQpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlXQVJOKDEsICJ1bmV4cGVjdGVkOiAlZCIsIHdrLT50cmllcyk7Ci0JCX0KLQotCQlsaXN0X2RlbCgmd2stPmxpc3QpOwotCQlrZnJlZSh3ayk7Ci0JfQotCi0JaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKIH0KIAogc3RhdGljIHZvaWQgaWVlZTgwMjExX3N0YV9iY25fbW9uX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKQEAgLTIzMzAsMTQgKzE3MzAsMTQgQEAKIAkJICAgICh1bnNpZ25lZCBsb25nKSBzZGF0YSk7CiAJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmaWZtZ2QtPnNrYl9xdWV1ZSk7CiAKLQlJTklUX0xJU1RfSEVBRCgmaWZtZ2QtPndvcmtfbGlzdCk7Ci0KLQlpZm1nZC0+Y2FwYWIgPSBXTEFOX0NBUEFCSUxJVFlfRVNTOwogCWlmbWdkLT5mbGFncyA9IDA7Ci0JaWYgKHNkYXRhLT5sb2NhbC0+aHcucXVldWVzID49IDQpCi0JCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX1dNTV9FTkFCTEVEOwogCiAJbXV0ZXhfaW5pdCgmaWZtZ2QtPm10eCk7CisKKwlpZiAoc2RhdGEtPmxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19TVVBQT1JUU19EWU5BTUlDX1NNUFMpCisJCWlmbWdkLT5yZXFfc21wcyA9IElFRUU4MDIxMV9TTVBTX0FVVE9NQVRJQzsKKwllbHNlCisJCWlmbWdkLT5yZXFfc21wcyA9IElFRUU4MDIxMV9TTVBTX09GRjsKIH0KIAogLyogc2NhbiBmaW5pc2hlZCBub3RpZmljYXRpb24gKi8KQEAgLTIzNjgsMTIgKzE3NjgsMzQgQEAKIH0KIAogLyogY29uZmlnIGhvb2tzICovCitzdGF0aWMgZW51bSB3b3JrX2RvbmVfcmVzdWx0CitpZWVlODAyMTFfcHJvYmVfYXV0aF9kb25lKHN0cnVjdCBpZWVlODAyMTFfd29yayAqd2ssCisJCQkgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJaWYgKCFza2IpIHsKKwkJY2ZnODAyMTFfc2VuZF9hdXRoX3RpbWVvdXQod2stPnNkYXRhLT5kZXYsIHdrLT5maWx0ZXJfdGEpOworCQlyZXR1cm4gV09SS19ET05FX0RFU1RST1k7CisJfQorCisJaWYgKHdrLT50eXBlID09IElFRUU4MDIxMV9XT1JLX0FVVEgpIHsKKwkJY2ZnODAyMTFfc2VuZF9yeF9hdXRoKHdrLT5zZGF0YS0+ZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJcmV0dXJuIFdPUktfRE9ORV9ERVNUUk9ZOworCX0KKworCW11dGV4X2xvY2soJndrLT5zZGF0YS0+dS5tZ2QubXR4KTsKKwlpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKHdrLT5zZGF0YSwgc2tiKTsKKwltdXRleF91bmxvY2soJndrLT5zZGF0YS0+dS5tZ2QubXR4KTsKKworCXdrLT50eXBlID0gSUVFRTgwMjExX1dPUktfQVVUSDsKKwl3ay0+cHJvYmVfYXV0aC50cmllcyA9IDA7CisJcmV0dXJuIFdPUktfRE9ORV9SRVFVRVVFOworfQorCiBpbnQgaWVlZTgwMjExX21nZF9hdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkgICAgICAgc3RydWN0IGNmZzgwMjExX2F1dGhfcmVxdWVzdCAqcmVxKQogewotCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOwogCWNvbnN0IHU4ICpzc2lkOwotCXN0cnVjdCBpZWVlODAyMTFfbWdkX3dvcmsgKndrOworCXN0cnVjdCBpZWVlODAyMTFfd29yayAqd2s7CiAJdTE2IGF1dGhfYWxnOwogCiAJc3dpdGNoIChyZXEtPmF1dGhfdHlwZSkgewpAQCAtMjM5Nyw3ICsxODE5LDcgQEAKIAlpZiAoIXdrKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXdrLT5ic3MgPSAodm9pZCAqKXJlcS0+YnNzOworCW1lbWNweSh3ay0+ZmlsdGVyX3RhLCByZXEtPmJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKIAogCWlmIChyZXEtPmllICYmIHJlcS0+aWVfbGVuKSB7CiAJCW1lbWNweSh3ay0+aWUsIHJlcS0+aWUsIHJlcS0+aWVfbGVuKTsKQEAgLTI0MDUsNjggKzE4MjcsODMgQEAKIAl9CiAKIAlpZiAocmVxLT5rZXkgJiYgcmVxLT5rZXlfbGVuKSB7Ci0JCXdrLT5rZXlfbGVuID0gcmVxLT5rZXlfbGVuOwotCQl3ay0+a2V5X2lkeCA9IHJlcS0+a2V5X2lkeDsKLQkJbWVtY3B5KHdrLT5rZXksIHJlcS0+a2V5LCByZXEtPmtleV9sZW4pOworCQl3ay0+cHJvYmVfYXV0aC5rZXlfbGVuID0gcmVxLT5rZXlfbGVuOworCQl3ay0+cHJvYmVfYXV0aC5rZXlfaWR4ID0gcmVxLT5rZXlfaWR4OworCQltZW1jcHkod2stPnByb2JlX2F1dGgua2V5LCByZXEtPmtleSwgcmVxLT5rZXlfbGVuKTsKIAl9CiAKIAlzc2lkID0gaWVlZTgwMjExX2Jzc19nZXRfaWUocmVxLT5ic3MsIFdMQU5fRUlEX1NTSUQpOwotCW1lbWNweSh3ay0+c3NpZCwgc3NpZCArIDIsIHNzaWRbMV0pOwotCXdrLT5zc2lkX2xlbiA9IHNzaWRbMV07CisJbWVtY3B5KHdrLT5wcm9iZV9hdXRoLnNzaWQsIHNzaWQgKyAyLCBzc2lkWzFdKTsKKwl3ay0+cHJvYmVfYXV0aC5zc2lkX2xlbiA9IHNzaWRbMV07CiAKLQl3ay0+c3RhdGUgPSBJRUVFODAyMTFfTUdEX1NUQVRFX1BST0JFOwotCXdrLT5hdXRoX2FsZyA9IGF1dGhfYWxnOwotCXdrLT50aW1lb3V0ID0gamlmZmllczsgLyogcnVuIHJpZ2h0IGF3YXkgKi8KKwl3ay0+cHJvYmVfYXV0aC5hbGdvcml0aG0gPSBhdXRoX2FsZzsKKwl3ay0+cHJvYmVfYXV0aC5wcml2YWN5ID0gcmVxLT5ic3MtPmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWTsKIAotCS8qCi0JICogWFhYOiBpZiBzdGlsbCBhc3NvY2lhdGVkIG5lZWQgdG8gdGVsbCBBUCB0aGF0IHdlJ3JlIGdvaW5nCi0JICoJdG8gc2xlZXAgYW5kIHRoZW4gY2hhbmdlIGNoYW5uZWwgZXRjLgotCSAqLwotCXNkYXRhLT5sb2NhbC0+b3Blcl9jaGFubmVsID0gcmVxLT5ic3MtPmNoYW5uZWw7Ci0JaWVlZTgwMjExX2h3X2NvbmZpZyhzZGF0YS0+bG9jYWwsIDApOworCS8qIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHByb2JlLCBkb24ndCBwcm9iZSBhZ2FpbiAqLworCWlmIChyZXEtPmJzcy0+cHJvYmVyZXNwX2llcykKKwkJd2stPnR5cGUgPSBJRUVFODAyMTFfV09SS19BVVRIOworCWVsc2UKKwkJd2stPnR5cGUgPSBJRUVFODAyMTFfV09SS19ESVJFQ1RfUFJPQkU7CisJd2stPmNoYW4gPSByZXEtPmJzcy0+Y2hhbm5lbDsKKwl3ay0+c2RhdGEgPSBzZGF0YTsKKwl3ay0+ZG9uZSA9IGllZWU4MDIxMV9wcm9iZV9hdXRoX2RvbmU7CiAKLQltdXRleF9sb2NrKCZpZm1nZC0+bXR4KTsKLQlsaXN0X2FkZCgmd2stPmxpc3QsICZzZGF0YS0+dS5tZ2Qud29ya19saXN0KTsKLQltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOwotCi0JaWVlZTgwMjExX3F1ZXVlX3dvcmsoJnNkYXRhLT5sb2NhbC0+aHcsICZzZGF0YS0+dS5tZ2Qud29yayk7CisJaWVlZTgwMjExX2FkZF93b3JrKHdrKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGVudW0gd29ya19kb25lX3Jlc3VsdCBpZWVlODAyMTFfYXNzb2NfZG9uZShzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrLAorCQkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKwl1MTYgc3RhdHVzOworCisJaWYgKCFza2IpIHsKKwkJY2ZnODAyMTFfc2VuZF9hc3NvY190aW1lb3V0KHdrLT5zZGF0YS0+ZGV2LCB3ay0+ZmlsdGVyX3RhKTsKKwkJcmV0dXJuIFdPUktfRE9ORV9ERVNUUk9ZOworCX0KKworCW1nbXQgPSAodm9pZCAqKXNrYi0+ZGF0YTsKKwlzdGF0dXMgPSBsZTE2X3RvX2NwdShtZ210LT51LmFzc29jX3Jlc3Auc3RhdHVzX2NvZGUpOworCisJaWYgKHN0YXR1cyA9PSBXTEFOX1NUQVRVU19TVUNDRVNTKSB7CisJCW11dGV4X2xvY2soJndrLT5zZGF0YS0+dS5tZ2QubXR4KTsKKwkJaWYgKCFpZWVlODAyMTFfYXNzb2Nfc3VjY2Vzcyh3aywgbWdtdCwgc2tiLT5sZW4pKSB7CisJCQltdXRleF91bmxvY2soJndrLT5zZGF0YS0+dS5tZ2QubXR4KTsKKwkJCS8qIG9vcHMgLS0gaW50ZXJuYWwgZXJyb3IgLS0gc2VuZCB0aW1lb3V0IGZvciBub3cgKi8KKwkJCWNmZzgwMjExX3NlbmRfYXNzb2NfdGltZW91dCh3ay0+c2RhdGEtPmRldiwKKwkJCQkJCSAgICB3ay0+ZmlsdGVyX3RhKTsKKwkJCXJldHVybiBXT1JLX0RPTkVfREVTVFJPWTsKKwkJfQorCQltdXRleF91bmxvY2soJndrLT5zZGF0YS0+dS5tZ2QubXR4KTsKKwl9CisKKwljZmc4MDIxMV9zZW5kX3J4X2Fzc29jKHdrLT5zZGF0YS0+ZGV2LCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwlyZXR1cm4gV09SS19ET05FX0RFU1RST1k7Cit9CisKIGludCBpZWVlODAyMTFfbWdkX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJc3RydWN0IGNmZzgwMjExX2Fzc29jX3JlcXVlc3QgKnJlcSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3aywgKmZvdW5kID0gTlVMTDsKLQlpbnQgaSwgZXJyOworCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MgPSAodm9pZCAqKXJlcS0+YnNzLT5wcml2OworCXN0cnVjdCBpZWVlODAyMTFfd29yayAqd2s7CisJY29uc3QgdTggKnNzaWQ7CisJaW50IGk7CiAKIAltdXRleF9sb2NrKCZpZm1nZC0+bXR4KTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkod2ssICZpZm1nZC0+d29ya19saXN0LCBsaXN0KSB7Ci0JCWlmICgmd2stPmJzcy0+Y2JzcyA9PSByZXEtPmJzcyAmJgotCQkgICAgd2stPnN0YXRlID09IElFRUU4MDIxMV9NR0RfU1RBVEVfSURMRSkgewotCQkJZm91bmQgPSB3azsKLQkJCWJyZWFrOwotCQl9CisJaWYgKGlmbWdkLT5hc3NvY2lhdGVkKSB7CisJCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CisJCXJldHVybiAtRUFMUkVBRFk7CiAJfQorCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CiAKLQlpZiAoIWZvdW5kKSB7Ci0JCWVyciA9IC1FTk9MSU5LOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlsaXN0X2RlbCgmZm91bmQtPmxpc3QpOwotCi0Jd2sgPSBrcmVhbGxvYyhmb3VuZCwgc2l6ZW9mKCp3aykgKyByZXEtPmllX2xlbiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF3aykgewotCQlsaXN0X2FkZCgmZm91bmQtPmxpc3QsICZpZm1nZC0+d29ya19saXN0KTsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbGlzdF9hZGQoJndrLT5saXN0LCAmaWZtZ2QtPndvcmtfbGlzdCk7CisJd2sgPSBremFsbG9jKHNpemVvZigqd2spICsgcmVxLT5pZV9sZW4sIEdGUF9LRVJORUwpOworCWlmICghd2spCisJCXJldHVybiAtRU5PTUVNOwogCiAJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0RJU0FCTEVfMTFOOworCWlmbWdkLT5mbGFncyAmPSB+SUVFRTgwMjExX1NUQV9OVUxMRlVOQ19BQ0tFRDsKIAogCWZvciAoaSA9IDA7IGkgPCByZXEtPmNyeXB0by5uX2NpcGhlcnNfcGFpcndpc2U7IGkrKykKIAkJaWYgKHJlcS0+Y3J5cHRvLmNpcGhlcnNfcGFpcndpc2VbaV0gPT0gV0xBTl9DSVBIRVJfU1VJVEVfV0VQNDAgfHwKQEAgLTI0NzQsOCArMTkxMSw2IEBACiAJCSAgICByZXEtPmNyeXB0by5jaXBoZXJzX3BhaXJ3aXNlW2ldID09IFdMQU5fQ0lQSEVSX1NVSVRFX1dFUDEwNCkKIAkJCWlmbWdkLT5mbGFncyB8PSBJRUVFODAyMTFfU1RBX0RJU0FCTEVfMTFOOwogCi0Jc2RhdGEtPmxvY2FsLT5vcGVyX2NoYW5uZWwgPSByZXEtPmJzcy0+Y2hhbm5lbDsKLQlpZWVlODAyMTFfaHdfY29uZmlnKHNkYXRhLT5sb2NhbCwgMCk7CiAKIAlpZiAocmVxLT5pZSAmJiByZXEtPmllX2xlbikgewogCQltZW1jcHkod2stPmllLCByZXEtPmllLCByZXEtPmllX2xlbik7CkBAIC0yNDgzLDEyICsxOTE4LDU1IEBACiAJfSBlbHNlCiAJCXdrLT5pZV9sZW4gPSAwOwogCi0JaWYgKHJlcS0+cHJldl9ic3NpZCkKLQkJbWVtY3B5KHdrLT5wcmV2X2Jzc2lkLCByZXEtPnByZXZfYnNzaWQsIEVUSF9BTEVOKTsKKwl3ay0+YXNzb2MuYnNzID0gcmVxLT5ic3M7CiAKLQl3ay0+c3RhdGUgPSBJRUVFODAyMTFfTUdEX1NUQVRFX0FTU09DOwotCXdrLT50cmllcyA9IDA7Ci0Jd2stPnRpbWVvdXQgPSBqaWZmaWVzOyAvKiBydW4gcmlnaHQgYXdheSAqLworCW1lbWNweSh3ay0+ZmlsdGVyX3RhLCByZXEtPmJzcy0+YnNzaWQsIEVUSF9BTEVOKTsKKworCS8qIG5ldyBhc3NvY2lhdGlvbiBhbHdheXMgdXNlcyByZXF1ZXN0ZWQgc21wcyBtb2RlICovCisJaWYgKGlmbWdkLT5yZXFfc21wcyA9PSBJRUVFODAyMTFfU01QU19BVVRPTUFUSUMpIHsKKwkJaWYgKGlmbWdkLT5wb3dlcnNhdmUpCisJCQlpZm1nZC0+YXBfc21wcyA9IElFRUU4MDIxMV9TTVBTX0RZTkFNSUM7CisJCWVsc2UKKwkJCWlmbWdkLT5hcF9zbXBzID0gSUVFRTgwMjExX1NNUFNfT0ZGOworCX0gZWxzZQorCQlpZm1nZC0+YXBfc21wcyA9IGlmbWdkLT5yZXFfc21wczsKKworCXdrLT5hc3NvYy5zbXBzID0gaWZtZ2QtPmFwX3NtcHM7CisJLyoKKwkgKiBJRUVFODAyLjExbiBkb2VzIG5vdCBhbGxvdyBUS0lQL1dFUCBhcyBwYWlyd2lzZSBjaXBoZXJzIGluIEhUIG1vZGUuCisJICogV2Ugc3RpbGwgYXNzb2NpYXRlIGluIG5vbi1IVCBtb2RlICgxMWEvYi9nKSBpZiBhbnkgb25lIG9mIHRoZXNlCisJICogY2lwaGVycyBpcyBjb25maWd1cmVkIGFzIHBhaXJ3aXNlLgorCSAqIFdlIGNhbiBzZXQgdGhpcyB0byB0cnVlIGZvciBub24tMTFuIGhhcmR3YXJlLCB0aGF0J2xsIGJlIGNoZWNrZWQKKwkgKiBzZXBhcmF0ZWx5IGFsb25nIHdpdGggdGhlIHBlZXIgY2FwYWJpbGl0aWVzLgorCSAqLworCXdrLT5hc3NvYy51c2VfMTFuID0gIShpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX0RJU0FCTEVfMTFOKTsKKwl3ay0+YXNzb2MuY2FwYWJpbGl0eSA9IHJlcS0+YnNzLT5jYXBhYmlsaXR5OworCXdrLT5hc3NvYy53bW1fdXNlZCA9IGJzcy0+d21tX3VzZWQ7CisJd2stPmFzc29jLnN1cHBfcmF0ZXMgPSBic3MtPnN1cHBfcmF0ZXM7CisJd2stPmFzc29jLnN1cHBfcmF0ZXNfbGVuID0gYnNzLT5zdXBwX3JhdGVzX2xlbjsKKwl3ay0+YXNzb2MuaHRfaW5mb3JtYXRpb25faWUgPQorCQlpZWVlODAyMTFfYnNzX2dldF9pZShyZXEtPmJzcywgV0xBTl9FSURfSFRfSU5GT1JNQVRJT04pOworCisJaWYgKGJzcy0+d21tX3VzZWQgJiYgYnNzLT51YXBzZF9zdXBwb3J0ZWQgJiYKKwkgICAgKHNkYXRhLT5sb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfVUFQU0QpKSB7CisJCXdrLT5hc3NvYy51YXBzZF91c2VkID0gdHJ1ZTsKKwkJaWZtZ2QtPmZsYWdzIHw9IElFRUU4MDIxMV9TVEFfVUFQU0RfRU5BQkxFRDsKKwl9IGVsc2UgeworCQl3ay0+YXNzb2MudWFwc2RfdXNlZCA9IGZhbHNlOworCQlpZm1nZC0+ZmxhZ3MgJj0gfklFRUU4MDIxMV9TVEFfVUFQU0RfRU5BQkxFRDsKKwl9CisKKwlzc2lkID0gaWVlZTgwMjExX2Jzc19nZXRfaWUocmVxLT5ic3MsIFdMQU5fRUlEX1NTSUQpOworCW1lbWNweSh3ay0+YXNzb2Muc3NpZCwgc3NpZCArIDIsIHNzaWRbMV0pOworCXdrLT5hc3NvYy5zc2lkX2xlbiA9IHNzaWRbMV07CisKKwlpZiAocmVxLT5wcmV2X2Jzc2lkKQorCQltZW1jcHkod2stPmFzc29jLnByZXZfYnNzaWQsIHJlcS0+cHJldl9ic3NpZCwgRVRIX0FMRU4pOworCisJd2stPnR5cGUgPSBJRUVFODAyMTFfV09SS19BU1NPQzsKKwl3ay0+Y2hhbiA9IHJlcS0+YnNzLT5jaGFubmVsOworCXdrLT5zZGF0YSA9IHNkYXRhOworCXdrLT5kb25lID0gaWVlZTgwMjExX2Fzc29jX2RvbmU7CiAKIAlpZiAocmVxLT51c2VfbWZwKSB7CiAJCWlmbWdkLT5tZnAgPSBJRUVFODAyMTFfTUZQX1JFUVVJUkVEOwpAQCAtMjUwMyw2OSArMTk4MSw2NSBAQAogCWVsc2UKIAkJaWZtZ2QtPmZsYWdzICY9IH5JRUVFODAyMTFfU1RBX0NPTlRST0xfUE9SVDsKIAotCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZzZGF0YS0+bG9jYWwtPmh3LCAmc2RhdGEtPnUubWdkLndvcmspOwotCi0JZXJyID0gMDsKLQotIG91dDoKLQltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOwotCXJldHVybiBlcnI7CisJaWVlZTgwMjExX2FkZF93b3JrKHdrKTsKKwlyZXR1cm4gMDsKIH0KIAogaW50IGllZWU4MDIxMV9tZ2RfZGVhdXRoKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJIHN0cnVjdCBjZmc4MDIxMV9kZWF1dGhfcmVxdWVzdCAqcmVxLAogCQkJIHZvaWQgKmNvb2tpZSkKIHsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkID0gJnNkYXRhLT51Lm1nZDsKLQlzdHJ1Y3QgaWVlZTgwMjExX21nZF93b3JrICp3azsKLQljb25zdCB1OCAqYnNzaWQgPSBOVUxMOwotCWJvb2wgbm90X2F1dGhfeWV0ID0gZmFsc2U7CisJc3RydWN0IGllZWU4MDIxMV93b3JrICp3azsKKwljb25zdCB1OCAqYnNzaWQgPSByZXEtPmJzcy0+YnNzaWQ7CiAKIAltdXRleF9sb2NrKCZpZm1nZC0+bXR4KTsKIAotCWlmIChpZm1nZC0+YXNzb2NpYXRlZCAmJiAmaWZtZ2QtPmFzc29jaWF0ZWQtPmNic3MgPT0gcmVxLT5ic3MpIHsKKwlpZiAoaWZtZ2QtPmFzc29jaWF0ZWQgPT0gcmVxLT5ic3MpIHsKIAkJYnNzaWQgPSByZXEtPmJzcy0+YnNzaWQ7Ci0JCWllZWU4MDIxMV9zZXRfZGlzYXNzb2Moc2RhdGEsIHRydWUpOwotCX0gZWxzZSBsaXN0X2Zvcl9lYWNoX2VudHJ5KHdrLCAmaWZtZ2QtPndvcmtfbGlzdCwgbGlzdCkgewotCQlpZiAoJndrLT5ic3MtPmNic3MgPT0gcmVxLT5ic3MpIHsKLQkJCWJzc2lkID0gcmVxLT5ic3MtPmJzc2lkOwotCQkJaWYgKHdrLT5zdGF0ZSA9PSBJRUVFODAyMTFfTUdEX1NUQVRFX1BST0JFKQotCQkJCW5vdF9hdXRoX3lldCA9IHRydWU7Ci0JCQlsaXN0X2RlbCgmd2stPmxpc3QpOwotCQkJa2ZyZWUod2spOworCQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhKTsKKwkJbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKKwl9IGVsc2UgeworCQlib29sIG5vdF9hdXRoX3lldCA9IGZhbHNlOworCisJCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CisKKwkJbXV0ZXhfbG9jaygmbG9jYWwtPndvcmtfbXR4KTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3aywgJmxvY2FsLT53b3JrX2xpc3QsIGxpc3QpIHsKKwkJCWlmICh3ay0+c2RhdGEgIT0gc2RhdGEpCisJCQkJY29udGludWU7CisKKwkJCWlmICh3ay0+dHlwZSAhPSBJRUVFODAyMTFfV09SS19ESVJFQ1RfUFJPQkUgJiYKKwkJCSAgICB3ay0+dHlwZSAhPSBJRUVFODAyMTFfV09SS19BVVRIKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAobWVtY21wKHJlcS0+YnNzLT5ic3NpZCwgd2stPmZpbHRlcl90YSwgRVRIX0FMRU4pKQorCQkJCWNvbnRpbnVlOworCisJCQlub3RfYXV0aF95ZXQgPSB3ay0+dHlwZSA9PSBJRUVFODAyMTFfV09SS19ESVJFQ1RfUFJPQkU7CisJCQlsaXN0X2RlbF9yY3UoJndrLT5saXN0KTsKKwkJCWZyZWVfd29yayh3ayk7CiAJCQlicmVhazsKIAkJfQorCQltdXRleF91bmxvY2soJmxvY2FsLT53b3JrX210eCk7CisKKwkJLyoKKwkJICogSWYgc29tZWJvZHkgcmVxdWVzdHMgYXV0aGVudGljYXRpb24gYW5kIHdlIGhhdmVuJ3QKKwkJICogc2VudCBvdXQgYW4gYXV0aCBmcmFtZSB5ZXQgdGhlcmUncyBubyBuZWVkIHRvIHNlbmQKKwkJICogb3V0IGEgZGVhdXRoIGZyYW1lIGVpdGhlci4gSWYgdGhlIHN0YXRlIHdhcyBQUk9CRSwKKwkJICogdGhlbiB0aGlzIGlzIHRoZSBjYXNlLiBJZiBpdCdzIEFVVEggd2UgaGF2ZSBzZW50IGEKKwkJICogZnJhbWUsIGFuZCBpZiBpdCdzIElETEUgd2UgaGF2ZSBjb21wbGV0ZWQgdGhlIGF1dGgKKwkJICogcHJvY2VzcyBhbHJlYWR5LgorCQkgKi8KKwkJaWYgKG5vdF9hdXRoX3lldCkgeworCQkJX19jZmc4MDIxMV9hdXRoX2NhbmNlbGVkKHNkYXRhLT5kZXYsIGJzc2lkKTsKKwkJCXJldHVybiAwOworCQl9CiAJfQogCi0JLyoKLQkgKiBJZiBzb21lYm9keSByZXF1ZXN0cyBhdXRoZW50aWNhdGlvbiBhbmQgd2UgaGF2ZW4ndAotCSAqIHNlbnQgb3V0IGFuIGF1dGggZnJhbWUgeWV0IHRoZXJlJ3Mgbm8gbmVlZCB0byBzZW5kCi0JICogb3V0IGEgZGVhdXRoIGZyYW1lIGVpdGhlci4gSWYgdGhlIHN0YXRlIHdhcyBQUk9CRSwKLQkgKiB0aGVuIHRoaXMgaXMgdGhlIGNhc2UuIElmIGl0J3MgQVVUSCB3ZSBoYXZlIHNlbnQgYQotCSAqIGZyYW1lLCBhbmQgaWYgaXQncyBJRExFIHdlIGhhdmUgY29tcGxldGVkIHRoZSBhdXRoCi0JICogcHJvY2VzcyBhbHJlYWR5LgotCSAqLwotCWlmIChub3RfYXV0aF95ZXQpIHsKLQkJbXV0ZXhfdW5sb2NrKCZpZm1nZC0+bXR4KTsKLQkJX19jZmc4MDIxMV9hdXRoX2NhbmNlbGVkKHNkYXRhLT5kZXYsIGJzc2lkKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyoKLQkgKiBjZmc4MDIxMSBzaG91bGQgY2F0Y2ggdGhpcyAuLi4gYnV0IGl0J3MgcmFjeSBzaW5jZQotCSAqIHdlIGNhbiByZWNlaXZlIGEgZGVhdXRoIGZyYW1lLCBwcm9jZXNzIGl0LCBoYW5kIGl0Ci0JICogdG8gY2ZnODAyMTEgd2hpbGUgdGhhdCdzIGluIGEgbG9ja2VkIHNlY3Rpb24gYWxyZWFkeQotCSAqIHRyeWluZyB0byB0ZWxsIHVzIHRoYXQgdGhlIHVzZXIgd2FudHMgdG8gZGlzY29ubmVjdC4KLQkgKi8KLQlpZiAoIWJzc2lkKSB7Ci0JCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7Ci0JCXJldHVybiAtRU5PTElOSzsKLQl9Ci0KLQltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOwotCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkZWF1dGhlbnRpY2F0aW5nIGZyb20gJXBNIGJ5IGxvY2FsIGNob2ljZSAocmVhc29uPSVkKVxuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgYnNzaWQsIHJlcS0+cmVhc29uX2NvZGUpOworCSAgICAgICBzZGF0YS0+bmFtZSwgYnNzaWQsIHJlcS0+cmVhc29uX2NvZGUpOwogCiAJaWVlZTgwMjExX3NlbmRfZGVhdXRoX2Rpc2Fzc29jKHNkYXRhLCBic3NpZCwKIAkJCUlFRUU4MDIxMV9TVFlQRV9ERUFVVEgsIHJlcS0+cmVhc29uX2NvZGUsCkBAIC0yNTkwLDE1ICsyMDY0LDE1IEBACiAJICogdG8gY2ZnODAyMTEgd2hpbGUgdGhhdCdzIGluIGEgbG9ja2VkIHNlY3Rpb24gYWxyZWFkeQogCSAqIHRyeWluZyB0byB0ZWxsIHVzIHRoYXQgdGhlIHVzZXIgd2FudHMgdG8gZGlzY29ubmVjdC4KIAkgKi8KLQlpZiAoJmlmbWdkLT5hc3NvY2lhdGVkLT5jYnNzICE9IHJlcS0+YnNzKSB7CisJaWYgKGlmbWdkLT5hc3NvY2lhdGVkICE9IHJlcS0+YnNzKSB7CiAJCW11dGV4X3VubG9jaygmaWZtZ2QtPm10eCk7CiAJCXJldHVybiAtRU5PTElOSzsKIAl9CiAKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpc2Fzc29jaWF0aW5nIGZyb20gJXBNIGJ5IGxvY2FsIGNob2ljZSAocmVhc29uPSVkKVxuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgcmVxLT5ic3MtPmJzc2lkLCByZXEtPnJlYXNvbl9jb2RlKTsKKwkgICAgICAgc2RhdGEtPm5hbWUsIHJlcS0+YnNzLT5ic3NpZCwgcmVxLT5yZWFzb25fY29kZSk7CiAKLQlpZWVlODAyMTFfc2V0X2Rpc2Fzc29jKHNkYXRhLCBmYWxzZSk7CisJaWVlZTgwMjExX3NldF9kaXNhc3NvYyhzZGF0YSk7CiAKIAltdXRleF91bmxvY2soJmlmbWdkLT5tdHgpOwogCkBAIC0yNjEwLDMgKzIwODQsMzggQEAKIAogCXJldHVybiAwOwogfQorCitpbnQgaWVlZTgwMjExX21nZF9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCQkJIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sIHU2NCAqY29va2llKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCXN0cnVjdCBza19idWZmICpza2I7CisKKwkvKiBDaGVjayB0aGF0IHdlIGFyZSBvbiB0aGUgcmVxdWVzdGVkIGNoYW5uZWwgZm9yIHRyYW5zbWlzc2lvbiAqLworCWlmICgoY2hhbiAhPSBsb2NhbC0+dG1wX2NoYW5uZWwgfHwKKwkgICAgIGNoYW5uZWxfdHlwZSAhPSBsb2NhbC0+dG1wX2NoYW5uZWxfdHlwZSkgJiYKKwkgICAgKGNoYW4gIT0gbG9jYWwtPm9wZXJfY2hhbm5lbCB8fAorCSAgICAgY2hhbm5lbF90eXBlICE9IGxvY2FsLT5vcGVyX2NoYW5uZWxfdHlwZSkpCisJCXJldHVybiAtRUJVU1k7CisKKwlza2IgPSBkZXZfYWxsb2Nfc2tiKGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSArIGxlbik7CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCW1lbWNweShza2JfcHV0KHNrYiwgbGVuKSwgYnVmLCBsZW4pOworCisJaWYgKCEoaWZtZ2QtPmZsYWdzICYgSUVFRTgwMjExX1NUQV9NRlBfRU5BQkxFRCkpCisJCUlFRUU4MDIxMV9TS0JfQ0Ioc2tiKS0+ZmxhZ3MgfD0KKwkJCUlFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7CisJSUVFRTgwMjExX1NLQl9DQihza2IpLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfTkw4MDIxMV9GUkFNRV9UWCB8CisJCUlFRUU4MDIxMV9UWF9DVExfUkVRX1RYX1NUQVRVUzsKKwlza2ItPmRldiA9IHNkYXRhLT5kZXY7CisJaWVlZTgwMjExX3R4X3NrYihzZGF0YSwgc2tiKTsKKworCSpjb29raWUgPSAodW5zaWduZWQgbG9uZykgc2tiOworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL29mZmNoYW5uZWwuYyBiL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzM2YjE5MQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9tYWM4MDIxMS9vZmZjaGFubmVsLmMKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBPZmYtY2hhbm5lbCBvcGVyYXRpb24gaGVscGVycworICoKKyAqIENvcHlyaWdodCAyMDAzLCBKb3VuaSBNYWxpbmVuIDxqa21hbGluZUBjYy5odXQuZmk+CisgKiBDb3B5cmlnaHQgMjAwNCwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDUsIERldmljZXNjYXBlIFNvZnR3YXJlLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA3CUppcmkgQmVuYyA8amJlbmNAc3VzZS5jej4KKyAqIENvcHlyaWdodCAyMDA3LCBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KKyAqIENvcHlyaWdodCAyMDA5CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5oPgorI2luY2x1ZGUgImllZWU4MDIxMV9pLmgiCisKKy8qCisgKiBpbmZvcm0gQVAgdGhhdCB3ZSB3aWxsIGdvIHRvIHNsZWVwIHNvIHRoYXQgaXQgd2lsbCBidWZmZXIgdGhlIGZyYW1lcworICogd2hpbGUgd2Ugc2NhbgorICovCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfb2ZmY2hhbm5lbF9wc19lbmFibGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisKKwlsb2NhbC0+b2ZmY2hhbm5lbF9wc19lbmFibGVkID0gZmFsc2U7CisKKwkvKiBGSVhNRTogd2hhdCB0byBkbyB3aGVuIGxvY2FsLT5wc3BvbGxpbmcgaXMgdHJ1ZT8gKi8KKworCWRlbF90aW1lcl9zeW5jKCZsb2NhbC0+ZHluYW1pY19wc190aW1lcik7CisJY2FuY2VsX3dvcmtfc3luYygmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOworCisJaWYgKGxvY2FsLT5ody5jb25mLmZsYWdzICYgSUVFRTgwMjExX0NPTkZfUFMpIHsKKwkJbG9jYWwtPm9mZmNoYW5uZWxfcHNfZW5hYmxlZCA9IHRydWU7CisJCWxvY2FsLT5ody5jb25mLmZsYWdzICY9IH5JRUVFODAyMTFfQ09ORl9QUzsKKwkJaWVlZTgwMjExX2h3X2NvbmZpZyhsb2NhbCwgSUVFRTgwMjExX0NPTkZfQ0hBTkdFX1BTKTsKKwl9CisKKwlpZiAoIShsb2NhbC0+b2ZmY2hhbm5lbF9wc19lbmFibGVkKSB8fAorCSAgICAhKGxvY2FsLT5ody5mbGFncyAmIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSykpCisJCS8qCisJCSAqIElmIHBvd2VyIHNhdmUgd2FzIGVuYWJsZWQsIG5vIG5lZWQgdG8gc2VuZCBhIG51bGxmdW5jCisJCSAqIGZyYW1lIGJlY2F1c2UgQVAga25vd3MgdGhhdCB3ZSBhcmUgc2xlZXBpbmcuIEJ1dCBpZiB0aGUKKwkJICogaGFyZHdhcmUgaXMgY3JlYXRpbmcgdGhlIG51bGxmdW5jIGZyYW1lIGZvciBwb3dlciBzYXZlCisJCSAqIHN0YXR1cyAoaWUuIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSyBpcyBub3QKKwkJICogZW5hYmxlZCkgYW5kIHBvd2VyIHNhdmUgd2FzIGVuYWJsZWQsIHRoZSBmaXJtd2FyZSBqdXN0CisJCSAqIHNlbnQgYSBudWxsIGZyYW1lIHdpdGggcG93ZXIgc2F2ZSBkaXNhYmxlZC4gU28gd2UgbmVlZAorCQkgKiB0byBzZW5kIGEgbmV3IG51bGxmdW5jIGZyYW1lIHRvIGluZm9ybSB0aGUgQVAgdGhhdCB3ZQorCQkgKiBhcmUgYWdhaW4gc2xlZXBpbmcuCisJCSAqLworCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDEpOworfQorCisvKiBpbmZvcm0gQVAgdGhhdCB3ZSBhcmUgYXdha2UgYWdhaW4sIHVubGVzcyBwb3dlciBzYXZlIGlzIGVuYWJsZWQgKi8KK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9vZmZjaGFubmVsX3BzX2Rpc2FibGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisKKwlpZiAoIWxvY2FsLT5wc19zZGF0YSkKKwkJaWVlZTgwMjExX3NlbmRfbnVsbGZ1bmMobG9jYWwsIHNkYXRhLCAwKTsKKwllbHNlIGlmIChsb2NhbC0+b2ZmY2hhbm5lbF9wc19lbmFibGVkKSB7CisJCS8qCisJCSAqIEluICFJRUVFODAyMTFfSFdfUFNfTlVMTEZVTkNfU1RBQ0sgY2FzZSB0aGUgaGFyZHdhcmUKKwkJICogd2lsbCBzZW5kIGEgbnVsbGZ1bmMgZnJhbWUgd2l0aCB0aGUgcG93ZXJzYXZlIGJpdCBzZXQKKwkJICogZXZlbiB0aG91Z2ggdGhlIEFQIGFscmVhZHkga25vd3MgdGhhdCB3ZSBhcmUgc2xlZXBpbmcuCisJCSAqIFRoaXMgY291bGQgYmUgYXZvaWRlZCBieSBzZW5kaW5nIGEgbnVsbCBmcmFtZSB3aXRoIHBvd2VyCisJCSAqIHNhdmUgYml0IGRpc2FibGVkIGJlZm9yZSBlbmFibGluZyB0aGUgcG93ZXIgc2F2ZSwgYnV0CisJCSAqIHRoaXMgZG9lc24ndCBnYWluIGFueXRoaW5nLgorCQkgKgorCQkgKiBXaGVuIElFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSyBpcyBlbmFibGVkLCBubyBuZWVkCisJCSAqIHRvIHNlbmQgYSBudWxsZnVuYyBmcmFtZSBiZWNhdXNlIEFQIGFscmVhZHkga25vd3MgdGhhdAorCQkgKiB3ZSBhcmUgc2xlZXBpbmcsIGxldCdzIGp1c3QgZW5hYmxlIHBvd2VyIHNhdmUgbW9kZSBpbgorCQkgKiBoYXJkd2FyZS4KKwkJICovCisJCWxvY2FsLT5ody5jb25mLmZsYWdzIHw9IElFRUU4MDIxMV9DT05GX1BTOworCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOworCX0gZWxzZSBpZiAobG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0ID4gMCkgeworCQkvKgorCQkgKiBJZiBJRUVFODAyMTFfQ09ORl9QUyB3YXMgbm90IHNldCBhbmQgdGhlIGR5bmFtaWNfcHNfdGltZXIKKwkJICogaGFkIGJlZW4gcnVubmluZyBiZWZvcmUgbGVhdmluZyB0aGUgb3BlcmF0aW5nIGNoYW5uZWwsCisJCSAqIHJlc3RhcnQgdGhlIHRpbWVyIG5vdyBhbmQgc2VuZCBhIG51bGxmdW5jIGZyYW1lIHRvIGluZm9ybQorCQkgKiB0aGUgQVAgdGhhdCB3ZSBhcmUgYXdha2UuCisJCSAqLworCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDApOworCQltb2RfdGltZXIoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyLCBqaWZmaWVzICsKKwkJCSAgbXNlY3NfdG9famlmZmllcyhsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQpKTsKKwl9Cit9CisKK3ZvaWQgaWVlZTgwMjExX29mZmNoYW5uZWxfc3RvcF9iZWFjb25pbmcoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7CisKKwltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CisJCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQorCQkJY29udGludWU7CisKKwkJLyogZGlzYWJsZSBiZWFjb25pbmcgKi8KKwkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8CisJCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVCkKKwkJCWllZWU4MDIxMV9ic3NfaW5mb19jaGFuZ2Vfbm90aWZ5KAorCQkJCXNkYXRhLCBCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCk7CisKKwkJLyoKKwkJICogb25seSBoYW5kbGUgbm9uLVNUQSBpbnRlcmZhY2VzIGhlcmUsIFNUQSBpbnRlcmZhY2VzCisJCSAqIGFyZSBoYW5kbGVkIGluIGllZWU4MDIxMV9vZmZjaGFubmVsX3N0b3Bfc3RhdGlvbigpLAorCQkgKiBlLmcuLCBmcm9tIHRoZSBiYWNrZ3JvdW5kIHNjYW4gc3RhdGUgbWFjaGluZS4KKwkJICoKKwkJICogSW4gYWRkaXRpb24sIGRvIG5vdCBzdG9wIG1vbml0b3IgaW50ZXJmYWNlIHRvIGFsbG93IGl0IHRvIGJlCisJCSAqIHVzZWQgZnJvbSB1c2VyIHNwYWNlIGNvbnRyb2xsZWQgb2ZmLWNoYW5uZWwgb3BlcmF0aW9ucy4KKwkJICovCisJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCQkgICAgc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX01PTklUT1IpCisJCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7CisJfQorCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworfQorCit2b2lkIGllZWU4MDIxMV9vZmZjaGFubmVsX3N0b3Bfc3RhdGlvbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKworCS8qCisJICogbm90aWZ5IHRoZSBBUCBhYm91dCB1cyBsZWF2aW5nIHRoZSBjaGFubmVsIGFuZCBzdG9wIGFsbCBTVEEgaW50ZXJmYWNlcworCSAqLworCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCisJCQljb250aW51ZTsKKworCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKKwkJCWlmIChzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZCkKKwkJCQlpZWVlODAyMTFfb2ZmY2hhbm5lbF9wc19lbmFibGUoc2RhdGEpOworCQl9CisJfQorCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworfQorCit2b2lkIGllZWU4MDIxMV9vZmZjaGFubmVsX3JldHVybihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkgYm9vbCBlbmFibGVfYmVhY29uaW5nKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCisJbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgeworCQlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFRlbGwgQVAgd2UncmUgYmFjayAqLworCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJCWlmIChzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZCkKKwkJCQlpZWVlODAyMTFfb2ZmY2hhbm5lbF9wc19kaXNhYmxlKHNkYXRhKTsKKwkJfQorCisJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKKwkJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKKworCQkvKiByZS1lbmFibGUgYmVhY29uaW5nICovCisJCWlmIChlbmFibGVfYmVhY29uaW5nICYmCisJCSAgICAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJCSAgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FESE9DIHx8CisJCSAgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpKQorCQkJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoCisJCQkJc2RhdGEsIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7Cit9CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcG0uYyBiL25ldC9tYWM4MDIxMS9wbS5jCmluZGV4IGU1MzVmMWMuLjBlNjQ0ODQgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9wbS5jCisrKyBiL25ldC9tYWM4MDIxMS9wbS5jCkBAIC0xMCw5ICsxMCw3IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBod190b19sb2NhbChodyk7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9pbml0X2NvbmYgY29uZjsKIAlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWVlZTgwMjExX3NjYW5fY2FuY2VsKGxvY2FsKTsKIApAQCAtNTYsMjIgKzU0LDIxIEBACiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKIAkvKiByZW1vdmUgU1RBcyAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZsb2NhbC0+c3RhX210eCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShzdGEsICZsb2NhbC0+c3RhX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGxvY2FsLT5vcHMtPnN0YV9ub3RpZnkpIHsKKwkJaWYgKHN0YS0+dXBsb2FkZWQpIHsKIAkJCXNkYXRhID0gc3RhLT5zZGF0YTsKIAkJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKIAkJCQlzZGF0YSA9IGNvbnRhaW5lcl9vZihzZGF0YS0+YnNzLAogCQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCiAJCQkJCSAgICAgdS5hcCk7CiAKLQkJCWRydl9zdGFfbm90aWZ5KGxvY2FsLCAmc2RhdGEtPnZpZiwgU1RBX05PVElGWV9SRU1PVkUsCi0JCQkJICAgICAgICZzdGEtPnN0YSk7CisJCQlkcnZfc3RhX3JlbW92ZShsb2NhbCwgc2RhdGEsICZzdGEtPnN0YSk7CiAJCX0KIAogCQltZXNoX3BsaW5rX3F1aWVzY2Uoc3RhKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c3RhX210eCk7CiAKIAkvKiByZW1vdmUgYWxsIGludGVyZmFjZXMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKQEAgLTkzLDE3ICs5MCwxNCBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQkJY29udGludWU7CiAKIAkJLyogZGlzYWJsZSBiZWFjb25pbmcgKi8KIAkJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoc2RhdGEsCiAJCQlCU1NfQ0hBTkdFRF9CRUFDT05fRU5BQkxFRCk7CiAKLQkJY29uZi52aWYgPSAmc2RhdGEtPnZpZjsKLQkJY29uZi50eXBlID0gc2RhdGEtPnZpZi50eXBlOwotCQljb25mLm1hY19hZGRyID0gc2RhdGEtPmRldi0+ZGV2X2FkZHI7Ci0JCWRydl9yZW1vdmVfaW50ZXJmYWNlKGxvY2FsLCAmY29uZik7CisJCWRydl9yZW1vdmVfaW50ZXJmYWNlKGxvY2FsLCAmc2RhdGEtPnZpZik7CiAJfQogCiAJLyogc3RvcCBoYXJkd2FyZSAtIHRoaXMgbXVzdCBzdG9wIFJYICovCmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmF0ZS5jIGIvbmV0L21hYzgwMjExL3JhdGUuYwppbmRleCAxMmEyYmZmLi4wYjI5OWQyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcmF0ZS5jCisrKyBiL25ldC9tYWM4MDIxMS9yYXRlLmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogfTsKICNlbmRpZgogCi1zdHJ1Y3QgcmF0ZV9jb250cm9sX3JlZiAqcmF0ZV9jb250cm9sX2FsbG9jKGNvbnN0IGNoYXIgKm5hbWUsCitzdGF0aWMgc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJhdGVfY29udHJvbF9hbGxvYyhjb25zdCBjaGFyICpuYW1lLAogCQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CiAJc3RydWN0IGRlbnRyeSAqZGVidWdmc2RpciA9IE5VTEw7CkBAIC0yMDcsNiArMjA3LDI3IEBACiAJcmV0dXJuICgoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX05PX0FDSykgfHwgIWllZWU4MDIxMV9pc19kYXRhKGZjKSk7CiB9CiAKK3N0YXRpYyB2b2lkIHJjX3NlbmRfbG93X2Jyb2FkY2FzdChzOCAqaWR4LCB1MzIgYmFzaWNfcmF0ZXMsIHU4IG1heF9yYXRlX2lkeCkKK3sKKwl1OCBpOworCisJaWYgKGJhc2ljX3JhdGVzID09IDApCisJCXJldHVybjsgLyogYXNzdW1lIGJhc2ljIHJhdGVzIHVua25vd24gYW5kIGFjY2VwdCByYXRlICovCisJaWYgKCppZHggPCAwKQorCQlyZXR1cm47CisJaWYgKGJhc2ljX3JhdGVzICYgKDEgPDwgKmlkeCkpCisJCXJldHVybjsgLyogc2VsZWN0ZWQgcmF0ZSBpcyBhIGJhc2ljIHJhdGUgKi8KKworCWZvciAoaSA9ICppZHggKyAxOyBpIDw9IG1heF9yYXRlX2lkeDsgaSsrKSB7CisJCWlmIChiYXNpY19yYXRlcyAmICgxIDw8IGkpKSB7CisJCQkqaWR4ID0gaTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCS8qIGNvdWxkIG5vdCBmaW5kIGEgYmFzaWMgcmF0ZTsgdXNlIG9yaWdpbmFsIHNlbGVjdGlvbiAqLworfQorCiBib29sIHJhdGVfY29udHJvbF9zZW5kX2xvdyhzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhLAogCQkJICAgdm9pZCAqcHJpdl9zdGEsCiAJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX3R4X3JhdGVfY29udHJvbCAqdHhyYykKQEAgLTIxOCwxMiArMjM5LDQ4IEBACiAJCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQgPQogCQkJKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9OT19BQ0spID8KIAkJCTEgOiB0eHJjLT5ody0+bWF4X3JhdGVfdHJpZXM7CisJCWlmICghc3RhICYmIHR4cmMtPmFwKQorCQkJcmNfc2VuZF9sb3dfYnJvYWRjYXN0KCZpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCwKKwkJCQkJICAgICAgdHhyYy0+YnNzX2NvbmYtPmJhc2ljX3JhdGVzLAorCQkJCQkgICAgICB0eHJjLT5zYmFuZC0+bl9iaXRyYXRlcyk7CiAJCXJldHVybiB0cnVlOwogCX0KIAlyZXR1cm4gZmFsc2U7CiB9CiBFWFBPUlRfU1lNQk9MKHJhdGVfY29udHJvbF9zZW5kX2xvdyk7CiAKK3N0YXRpYyB2b2lkIHJhdGVfaWR4X21hdGNoX21hc2soc3RydWN0IGllZWU4MDIxMV90eF9yYXRlICpyYXRlLAorCQkJCWludCBuX2JpdHJhdGVzLCB1MzIgbWFzaykKK3sKKwlpbnQgajsKKworCS8qIFNlZSB3aGV0aGVyIHRoZSBzZWxlY3RlZCByYXRlIG9yIGFueXRoaW5nIGJlbG93IGl0IGlzIGFsbG93ZWQuICovCisJZm9yIChqID0gcmF0ZS0+aWR4OyBqID49IDA7IGotLSkgeworCQlpZiAobWFzayAmICgxIDw8IGopKSB7CisJCQkvKiBPa2F5LCBmb3VuZCBhIHN1aXRhYmxlIHJhdGUuIFVzZSBpdC4gKi8KKwkJCXJhdGUtPmlkeCA9IGo7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBUcnkgdG8gZmluZCBhIGhpZ2hlciByYXRlIHRoYXQgd291bGQgYmUgYWxsb3dlZCAqLworCWZvciAoaiA9IHJhdGUtPmlkeCArIDE7IGogPCBuX2JpdHJhdGVzOyBqKyspIHsKKwkJaWYgKG1hc2sgJiAoMSA8PCBqKSkgeworCQkJLyogT2theSwgZm91bmQgYSBzdWl0YWJsZSByYXRlLiBVc2UgaXQuICovCisJCQlyYXRlLT5pZHggPSBqOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyoKKwkgKiBVaC4uIE5vIHN1aXRhYmxlIHJhdGUgZXhpc3RzLiBUaGlzIHNob3VsZCBub3QgcmVhbGx5IGhhcHBlbiB3aXRoCisJICogc2FuZSBUWCByYXRlIG1hc2sgY29uZmlndXJhdGlvbnMuIEhvd2V2ZXIsIHNob3VsZCBzb21lb25lIG1hbmFnZSB0bworCSAqIGNvbmZpZ3VyZSBzdXBwb3J0ZWQgcmF0ZXMgYW5kIFRYIHJhdGUgbWFzayBpbiBpbmNvbXBhdGlibGUgd2F5LAorCSAqIGFsbG93IHRoZSBmcmFtZSB0byBiZSB0cmFuc21pdHRlZCB3aXRoIHdoYXRldmVyIHRoZSByYXRlIGNvbnRyb2wKKwkgKiBzZWxlY3RlZC4KKwkgKi8KK30KKwogdm9pZCByYXRlX2NvbnRyb2xfZ2V0X3JhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKIAkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sICp0eHJjKQpAQCAtMjMzLDYgKzI5MCw3IEBACiAJc3RydWN0IGllZWU4MDIxMV9zdGEgKmlzdGEgPSBOVUxMOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHhyYy0+c2tiKTsKIAlpbnQgaTsKKwl1MzIgbWFzazsKIAogCWlmIChzdGEpIHsKIAkJaXN0YSA9ICZzdGEtPnN0YTsKQEAgLTI0OCwyMyArMzA2LDMxIEBACiAJaWYgKHNkYXRhLT5sb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfSEFTX1JBVEVfQ09OVFJPTCkKIAkJcmV0dXJuOwogCi0JaWYgKHN0YSAmJiBzZGF0YS0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4ID4gLTEpIHsKLQkJaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHggPSBzZGF0YS0+Zm9yY2VfdW5pY2FzdF9yYXRlaWR4OwotCX0gZWxzZSB7Ci0JCXJlZi0+b3BzLT5nZXRfcmF0ZShyZWYtPnByaXYsIGlzdGEsIHByaXZfc3RhLCB0eHJjKTsKLQkJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX1JDQUxHTzsKLQl9CisJcmVmLT5vcHMtPmdldF9yYXRlKHJlZi0+cHJpdiwgaXN0YSwgcHJpdl9zdGEsIHR4cmMpOwogCiAJLyoKLQkgKiB0cnkgdG8gZW5mb3JjZSB0aGUgbWF4aW11bSByYXRlIHRoZSB1c2VyIHdhbnRlZAorCSAqIFRyeSB0byBlbmZvcmNlIHRoZSByYXRlaWR4IG1hc2sgdGhlIHVzZXIgd2FudGVkLiBza2lwIHRoaXMgaWYgdGhlCisJICogZGVmYXVsdCBtYXNrIChhbGxvdyBhbGwgcmF0ZXMpIGlzIHVzZWQgdG8gc2F2ZSBzb21lIHByb2Nlc3NpbmcgZm9yCisJICogdGhlIGNvbW1vbiBjYXNlLgogCSAqLwotCWlmIChzZGF0YS0+bWF4X3JhdGVjdHJsX3JhdGVpZHggPiAtMSkKKwltYXNrID0gc2RhdGEtPnJjX3JhdGVpZHhfbWFza1tpbmZvLT5iYW5kXTsKKwlpZiAobWFzayAhPSAoMSA8PCB0eHJjLT5zYmFuZC0+bl9iaXRyYXRlcykgLSAxKSB7CisJCWlmIChzdGEpIHsKKwkJCS8qIEZpbHRlciBvdXQgcmF0ZXMgdGhhdCB0aGUgU1RBIGRvZXMgbm90IHN1cHBvcnQgKi8KKwkJCW1hc2sgJj0gc3RhLT5zdGEuc3VwcF9yYXRlc1tpbmZvLT5iYW5kXTsKKwkJfQorCQkvKgorCQkgKiBNYWtlIHN1cmUgdGhlIHJhdGUgaW5kZXggc2VsZWN0ZWQgZm9yIGVhY2ggVFggcmF0ZSBpcworCQkgKiBpbmNsdWRlZCBpbiB0aGUgY29uZmlndXJlZCBtYXNrIGFuZCBjaGFuZ2UgdGhlIHJhdGUgaW5kZXhlcworCQkgKiBpZiBuZWVkZWQuCisJCSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX1RYX01BWF9SQVRFUzsgaSsrKSB7CisJCQkvKiBSYXRlIG1hc2tpbmcgc3VwcG9ydHMgb25seSBsZWdhY3kgcmF0ZXMgZm9yIG5vdyAqLwogCQkJaWYgKGluZm8tPmNvbnRyb2wucmF0ZXNbaV0uZmxhZ3MgJiBJRUVFODAyMTFfVFhfUkNfTUNTKQogCQkJCWNvbnRpbnVlOwotCQkJaW5mby0+Y29udHJvbC5yYXRlc1tpXS5pZHggPQotCQkJCW1pbl90KHM4LCBpbmZvLT5jb250cm9sLnJhdGVzW2ldLmlkeCwKLQkJCQkgICAgICBzZGF0YS0+bWF4X3JhdGVjdHJsX3JhdGVpZHgpOworCQkJcmF0ZV9pZHhfbWF0Y2hfbWFzaygmaW5mby0+Y29udHJvbC5yYXRlc1tpXSwKKwkJCQkJICAgIHR4cmMtPnNiYW5kLT5uX2JpdHJhdGVzLCBtYXNrKTsKKwkJfQogCX0KIAogCUJVR19PTihpbmZvLT5jb250cm9sLnJhdGVzWzBdLmlkeCA8IDApOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3JhdGUuaCBiL25ldC9tYWM4MDIxMS9yYXRlLmgKaW5kZXggY2I5YmQxZi4uYjYxMDhiYyAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3JhdGUuaAorKysgYi9uZXQvbWFjODAyMTEvcmF0ZS5oCkBAIC0yNiwxMCArMjYsNiBAQAogCXN0cnVjdCBrcmVmIGtyZWY7CiB9OwogCi0vKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIHJhdGUgY29udHJvbCBhbGdvcml0aG0uIElmIGBuYW1lJyBpcyBOVUxMLCBnZXQgdGhlCi0gKiBmaXJzdCBhdmFpbGFibGUgYWxnb3JpdGhtLiAqLwotc3RydWN0IHJhdGVfY29udHJvbF9yZWYgKnJhdGVfY29udHJvbF9hbGxvYyhjb25zdCBjaGFyICpuYW1lLAotCQkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpOwogdm9pZCByYXRlX2NvbnRyb2xfZ2V0X3JhdGUoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCiAJCQkgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKIAkJCSAgIHN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sICp0eHJjKTsKQEAgLTQ0LDEwICs0MCwxMSBAQAogCXN0cnVjdCByYXRlX2NvbnRyb2xfcmVmICpyZWYgPSBsb2NhbC0+cmF0ZV9jdHJsOwogCXN0cnVjdCBpZWVlODAyMTFfc3RhICppc3RhID0gJnN0YS0+c3RhOwogCXZvaWQgKnByaXZfc3RhID0gc3RhLT5yYXRlX2N0cmxfcHJpdjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKLQlpZiAobGlrZWx5KGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0lOVEZMX1JDQUxHTykpCi0JCXJlZi0+b3BzLT50eF9zdGF0dXMocmVmLT5wcml2LCBzYmFuZCwgaXN0YSwgcHJpdl9zdGEsIHNrYik7CisJaWYgKCFyZWYpCisJCXJldHVybjsKKworCXJlZi0+b3BzLT50eF9zdGF0dXMocmVmLT5wcml2LCBzYmFuZCwgaXN0YSwgcHJpdl9zdGEsIHNrYik7CiB9CiAKIApAQCAtMTE1LDcgKzExMiw4IEBACiAjZW5kaWYKIH0KIAotLyogZnVuY3Rpb25zIGZvciByYXRlIGNvbnRyb2wgcmVsYXRlZCB0byBhIGRldmljZSAqLworLyogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSByYXRlIGNvbnRyb2wgYWxnb3JpdGhtLiBJZiBgbmFtZScgaXMgTlVMTCwgZ2V0IHRoZQorICogZmlyc3QgYXZhaWxhYmxlIGFsZ29yaXRobS4gKi8KIGludCBpZWVlODAyMTFfaW5pdF9yYXRlX2N0cmxfYWxnKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJCSBjb25zdCBjaGFyICpuYW1lKTsKIHZvaWQgcmF0ZV9jb250cm9sX2RlaW5pdGlhbGl6ZShzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCk7CmRpZmYgLS1naXQgYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfYWxnby5jIGIvbmV0L21hYzgwMjExL3JjODAyMTFfcGlkX2FsZ28uYwppbmRleCAyOWJjNGM1Li4yNjUyYTM3IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcmM4MDIxMV9waWRfYWxnby5jCisrKyBiL25ldC9tYWM4MDIxMS9yYzgwMjExX3BpZF9hbGdvLmMKQEAgLTE1Nyw5ICsxNTcsNyBAQAogCiAJLyogSW4gY2FzZSBub3RoaW5nIGhhcHBlbmVkIGR1cmluZyB0aGUgcHJldmlvdXMgY29udHJvbCBpbnRlcnZhbCwgdHVybgogCSAqIHRoZSBzaGFycGVuaW5nIGZhY3RvciBvbi4gKi8KLQlwZXJpb2QgPSAoSFogKiBwaW5mby0+c2FtcGxpbmdfcGVyaW9kICsgNTAwKSAvIDEwMDA7Ci0JaWYgKCFwZXJpb2QpCi0JCXBlcmlvZCA9IDE7CisJcGVyaW9kID0gbXNlY3NfdG9famlmZmllcyhwaW5mby0+c2FtcGxpbmdfcGVyaW9kKTsKIAlpZiAoamlmZmllcyAtIHNwaW5mby0+bGFzdF9zYW1wbGUgPiAyICogcGVyaW9kKQogCQlzcGluZm8tPnNoYXJwX2NudCA9IHBpbmZvLT5zaGFycGVuX2R1cmF0aW9uOwogCkBAIC0yNTIsOSArMjUwLDcgQEAKIAl9CiAKIAkvKiBVcGRhdGUgUElEIGNvbnRyb2xsZXIgc3RhdGUuICovCi0JcGVyaW9kID0gKEhaICogcGluZm8tPnNhbXBsaW5nX3BlcmlvZCArIDUwMCkgLyAxMDAwOwotCWlmICghcGVyaW9kKQotCQlwZXJpb2QgPSAxOworCXBlcmlvZCA9IG1zZWNzX3RvX2ppZmZpZXMocGluZm8tPnNhbXBsaW5nX3BlcmlvZCk7CiAJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgc3BpbmZvLT5sYXN0X3NhbXBsZSArIHBlcmlvZCkpCiAJCXJhdGVfY29udHJvbF9waWRfc2FtcGxlKHBpbmZvLCBzYmFuZCwgc3RhLCBzcGluZm8pOwogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3J4LmMgYi9uZXQvbWFjODAyMTEvcnguYwppbmRleCA4MmEzMGMxLi5iNWM0OGRlIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvcnguYworKysgYi9uZXQvbWFjODAyMTEvcnguYwpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAyMDAyLTIwMDUsIEluc3RhbnQ4MDIgTmV0d29ya3MsIEluYy4KICAqIENvcHlyaWdodCAyMDA1LTIwMDYsIERldmljZXNjYXBlIFNvZnR3YXJlLCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwNi0yMDA3CUppcmkgQmVuYyA8amJlbmNAc3VzZS5jej4KLSAqIENvcHlyaWdodCAyMDA3CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwNy0yMDEwCUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC0yODMsMTUgKzI4MywxNSBAQAogCXNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF84MDJfMik7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7Ci0JCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKLQkJCWNvbnRpbnVlOwotCiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChzZGF0YS0+dS5tbnRyX2ZsYWdzICYgTU9OSVRPUl9GTEFHX0NPT0tfRlJBTUVTKQogCQkJY29udGludWU7CiAKKwkJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCisJCQljb250aW51ZTsKKwogCQlpZiAocHJldl9kZXYpIHsKIAkJCXNrYjIgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKIAkJCWlmIChza2IyKSB7CkBAIC0zNjEsNyArMzYxLDkgQEAKICAqIGJvdW5kYXJ5LiBJbiB0aGUgY2FzZSBvZiByZWd1bGFyIGZyYW1lcywgdGhpcyBzaW1wbHkgbWVhbnMgYWxpZ25pbmcgdGhlCiAgKiBwYXlsb2FkIHRvIGEgZm91ci1ieXRlIGJvdW5kYXJ5IChiZWNhdXNlIGVpdGhlciB0aGUgSVAgaGVhZGVyIGlzIGRpcmVjdGx5CiAgKiBjb250YWluZWQsIG9yIElWL1JGQzEwNDIgaGVhZGVycyB0aGF0IGhhdmUgYSBsZW5ndGggZGl2aXNpYmxlIGJ5IGZvdXIgYXJlCi0gKiBpbiBmcm9udCBvZiBpdCkuCisgKiBpbiBmcm9udCBvZiBpdCkuICBJZiB0aGUgcGF5bG9hZCBkYXRhIGlzIG5vdCBwcm9wZXJseSBhbGlnbmVkIGFuZCB0aGUKKyAqIGFyY2hpdGVjdHVyZSBkb2Vzbid0IHN1cHBvcnQgZWZmaWNpZW50IHVuYWxpZ25lZCBvcGVyYXRpb25zLCBtYWM4MDIxMQorICogd2lsbCBhbGlnbiB0aGUgZGF0YS4KICAqCiAgKiBXaXRoIEEtTVNEVSBmcmFtZXMsIGhvd2V2ZXIsIHRoZSBwYXlsb2FkIGRhdGEgYWRkcmVzcyBtdXN0IHlpZWxkIHR3byBtb2R1bG8KICAqIGZvdXIgYmVjYXVzZSB0aGVyZSBhcmUgMTQtYnl0ZSA4MDIuMyBoZWFkZXJzIHdpdGhpbiB0aGUgQS1NU0RVIGZyYW1lcyB0aGF0CkBAIC0zNzUsMjUgKzM3NywxMCBAQAogICovCiBzdGF0aWMgdm9pZCBpZWVlODAyMTFfdmVyaWZ5X2FsaWdubWVudChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewotCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC0+c2tiLT5kYXRhOwotCWludCBoZHJsZW47Ci0KLSNpZm5kZWYgQ09ORklHX01BQzgwMjExX0RFQlVHX1BBQ0tFVF9BTElHTk1FTlQKLQlyZXR1cm47CisjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKKwlXQVJOX09OQ0UoKHVuc2lnbmVkIGxvbmcpcngtPnNrYi0+ZGF0YSAmIDEsCisJCSAgInVuYWxpZ25lZCBwYWNrZXQgYXQgMHglcFxuIiwgcngtPnNrYi0+ZGF0YSk7CiAjZW5kaWYKLQotCWlmIChXQVJOX09OQ0UoKHVuc2lnbmVkIGxvbmcpcngtPnNrYi0+ZGF0YSAmIDEsCi0JCSAgICAgICJ1bmFsaWduZWQgcGFja2V0IGF0IDB4JXBcbiIsIHJ4LT5za2ItPmRhdGEpKQotCQlyZXR1cm47Ci0KLQlpZiAoIWllZWU4MDIxMV9pc19kYXRhX3ByZXNlbnQoaGRyLT5mcmFtZV9jb250cm9sKSkKLQkJcmV0dXJuOwotCi0JaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwotCWlmIChyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfQU1TRFUpCi0JCWhkcmxlbiArPSBFVEhfSExFTjsKLQlXQVJOX09OQ0UoKCh1bnNpZ25lZCBsb25nKShyeC0+c2tiLT5kYXRhICsgaGRybGVuKSkgJiAzLAotCQkgICJ1bmFsaWduZWQgSVAgcGF5bG9hZCBhdCAweCVwXG4iLCByeC0+c2tiLT5kYXRhICsgaGRybGVuKTsKIH0KIAogCkBAIC00NzYsNyArNDYzLDcgQEAKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopcngtPnNrYi0+ZGF0YTsKIAl1bnNpZ25lZCBpbnQgaGRybGVuID0gaWVlZTgwMjExX2hkcmxlbihoZHItPmZyYW1lX2NvbnRyb2wpOwotCWNoYXIgKmRldl9hZGRyID0gcngtPnNkYXRhLT5kZXYtPmRldl9hZGRyOworCWNoYXIgKmRldl9hZGRyID0gcngtPnNkYXRhLT52aWYuYWRkcjsKIAogCWlmIChpZWVlODAyMTFfaXNfZGF0YShoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCWlmIChpc19tdWx0aWNhc3RfZXRoZXJfYWRkcihoZHItPmFkZHIxKSkgewpAQCAtMTAyMSwxMCArMTAwOCwxMCBAQAogCiAJYXRvbWljX2luYygmc2RhdGEtPmJzcy0+bnVtX3N0YV9wcyk7CiAJc2V0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1BTX1NUQSk7Ci0JZHJ2X3N0YV9ub3RpZnkobG9jYWwsICZzZGF0YS0+dmlmLCBTVEFfTk9USUZZX1NMRUVQLCAmc3RhLT5zdGEpOworCWRydl9zdGFfbm90aWZ5KGxvY2FsLCBzZGF0YSwgU1RBX05PVElGWV9TTEVFUCwgJnN0YS0+c3RhKTsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRwogCXByaW50ayhLRVJOX0RFQlVHICIlczogU1RBICVwTSBhaWQgJWQgZW50ZXJzIHBvd2VyIHNhdmUgbW9kZVxuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgc3RhLT5zdGEuYWRkciwgc3RhLT5zdGEuYWlkKTsKKwkgICAgICAgc2RhdGEtPm5hbWUsIHN0YS0+c3RhLmFkZHIsIHN0YS0+c3RhLmFpZCk7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcgKi8KIH0KIApAQCAtMTAzOCwxMyArMTAyNSwxMyBAQAogCiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNUQSAlcE0gYWlkICVkIGV4aXRzIHBvd2VyIHNhdmUgbW9kZVxuIiwKLQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgc3RhLT5zdGEuYWRkciwgc3RhLT5zdGEuYWlkKTsKKwkgICAgICAgc2RhdGEtPm5hbWUsIHN0YS0+c3RhLmFkZHIsIHN0YS0+c3RhLmFpZCk7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfUFNfREVCVUcgKi8KIAogCWlmICh0ZXN0X3N0YV9mbGFncyhzdGEsIFdMQU5fU1RBX1BTX0RSSVZFUikpIHsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRwogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNUQSAlcE0gYWlkICVkIGRyaXZlci1wcy1ibG9ja2VkXG4iLAotCQkgICAgICAgc2RhdGEtPmRldi0+bmFtZSwgc3RhLT5zdGEuYWRkciwgc3RhLT5zdGEuYWlkKTsKKwkJICAgICAgIHNkYXRhLT5uYW1lLCBzdGEtPnN0YS5hZGRyLCBzdGEtPnN0YS5haWQpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX1BTX0RFQlVHICovCiAJCXJldHVybjsKIAl9CkBAIC0xMTI0LDYgKzExMTEsMTggQEAKIAlpZiAoaWVlZTgwMjExX2lzX251bGxmdW5jKGhkci0+ZnJhbWVfY29udHJvbCkgfHwKIAkgICAgaWVlZTgwMjExX2lzX3Fvc19udWxsZnVuYyhoZHItPmZyYW1lX2NvbnRyb2wpKSB7CiAJCUk4MDJfREVCVUdfSU5DKHJ4LT5sb2NhbC0+cnhfaGFuZGxlcnNfZHJvcF9udWxsZnVuYyk7CisKKwkJLyoKKwkJICogSWYgd2UgcmVjZWl2ZSBhIDQtYWRkciBudWxsZnVuYyBmcmFtZSBmcm9tIGEgU1RBCisJCSAqIHRoYXQgd2FzIG5vdCBtb3ZlZCB0byBhIDQtYWRkciBTVEEgdmxhbiB5ZXQsIGRyb3AKKwkJICogdGhlIGZyYW1lIHRvIHRoZSBtb25pdG9yIGludGVyZmFjZSwgdG8gbWFrZSBzdXJlCisJCSAqIHRoYXQgaG9zdGFwZCBzZWVzIGl0CisJCSAqLworCQlpZiAoaWVlZTgwMjExX2hhc19hNChoZHItPmZyYW1lX2NvbnRyb2wpICYmCisJCSAgICAocngtPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUCB8fAorCQkgICAgIChyeC0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4gJiYKKwkJICAgICAgIXJ4LT5zZGF0YS0+dS52bGFuLnN0YSkpKQorCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAkJLyoKIAkJICogVXBkYXRlIGNvdW50ZXIgYW5kIGZyZWUgcGFja2V0IGhlcmUgdG8gYXZvaWQKIAkJICogY291bnRpbmcgdGhpcyBhcyBhIGRyb3BwZWQgcGFja2VkLgpAQCAtMTE1Niw3ICsxMTU1LDcgQEAKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBSWCByZWFzc2VtYmx5IHJlbW92ZWQgb2xkZXN0ICIKIAkJICAgICAgICJmcmFnbWVudCBlbnRyeSAoaWR4PSVkIGFnZT0lbHUgc2VxPSVkIGxhc3RfZnJhZz0lZCAiCiAJCSAgICAgICAiYWRkcjE9JXBNIGFkZHIyPSVwTVxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIGlkeCwKKwkJICAgICAgIHNkYXRhLT5uYW1lLCBpZHgsCiAJCSAgICAgICBqaWZmaWVzIC0gZW50cnktPmZpcnN0X2ZyYWdfdGltZSwgZW50cnktPnNlcSwKIAkJICAgICAgIGVudHJ5LT5sYXN0X2ZyYWcsIGhkci0+YWRkcjEsIGhkci0+YWRkcjIpOwogI2VuZGlmCkBAIC0xMzk4LDYgKzEzOTcsMjEgQEAKIAkJICAgICBpZWVlODAyMTFfaXNfZGF0YShmYykgJiYKIAkJICAgICAocngtPmtleSB8fCByeC0+c2RhdGEtPmRyb3BfdW5lbmNyeXB0ZWQpKSkKIAkJcmV0dXJuIC1FQUNDRVM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAoraWVlZTgwMjExX2Ryb3BfdW5lbmNyeXB0ZWRfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQoreworCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC0+c2tiLT5kYXRhOworCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKKwlpbnQgcmVzOworCisJcmVzID0gaWVlZTgwMjExX2Ryb3BfdW5lbmNyeXB0ZWQocngsIGZjKTsKKwlpZiAodW5saWtlbHkocmVzKSkKKwkJcmV0dXJuIHJlczsKKwogCWlmIChyeC0+c3RhICYmIHRlc3Rfc3RhX2ZsYWdzKHJ4LT5zdGEsIFdMQU5fU1RBX01GUCkpIHsKIAkJaWYgKHVubGlrZWx5KGllZWU4MDIxMV9pc191bmljYXN0X3JvYnVzdF9tZ210X2ZyYW1lKHJ4LT5za2IpICYmCiAJCQkgICAgIHJ4LT5rZXkpKQpAQCAtMTQyNCw3ICsxNDM4LDYgQEAKIF9faWVlZTgwMjExX2RhdGFfdG9fODAyMyhzdHJ1Y3QgaWVlZTgwMjExX3J4X2RhdGEgKnJ4KQogewogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gcngtPnNkYXRhOwotCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBzZGF0YS0+ZGV2OwogCXN0cnVjdCBpZWVlODAyMTFfaGRyICpoZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilyeC0+c2tiLT5kYXRhOwogCiAJaWYgKGllZWU4MDIxMV9oYXNfYTQoaGRyLT5mcmFtZV9jb250cm9sKSAmJgpAQCAtMTQzNiw3ICsxNDQ5LDcgQEAKIAkgICAgIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJiBzZGF0YS0+dS5tZ2QudXNlXzRhZGRyKSkpCiAJCXJldHVybiAtMTsKIAotCXJldHVybiBpZWVlODAyMTFfZGF0YV90b184MDIzKHJ4LT5za2IsIGRldi0+ZGV2X2FkZHIsIHNkYXRhLT52aWYudHlwZSk7CisJcmV0dXJuIGllZWU4MDIxMV9kYXRhX3RvXzgwMjMocngtPnNrYiwgc2RhdGEtPnZpZi5hZGRyLCBzZGF0YS0+dmlmLnR5cGUpOwogfQogCiAvKgpAQCAtMTQ1Myw3ICsxNDY2LDcgQEAKIAkgKiBvZiB3aGV0aGVyIHRoZSBmcmFtZSB3YXMgZW5jcnlwdGVkIG9yIG5vdC4KIAkgKi8KIAlpZiAoZWhkci0+aF9wcm90byA9PSBodG9ucyhFVEhfUF9QQUUpICYmCi0JICAgIChjb21wYXJlX2V0aGVyX2FkZHIoZWhkci0+aF9kZXN0LCByeC0+c2RhdGEtPmRldi0+ZGV2X2FkZHIpID09IDAgfHwKKwkgICAgKGNvbXBhcmVfZXRoZXJfYWRkcihlaGRyLT5oX2Rlc3QsIHJ4LT5zZGF0YS0+dmlmLmFkZHIpID09IDAgfHwKIAkgICAgIGNvbXBhcmVfZXRoZXJfYWRkcihlaGRyLT5oX2Rlc3QsIHBhZV9ncm91cF9hZGRyKSA9PSAwKSkKIAkJcmV0dXJuIHRydWU7CiAKQEAgLTE0NzIsNyArMTQ4NSw2IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSByeC0+c2RhdGE7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNkYXRhLT5kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSByeC0+bG9jYWw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiwgKnhtaXRfc2tiOwogCXN0cnVjdCBldGhoZHIgKmVoZHIgPSAoc3RydWN0IGV0aGhkciAqKSByeC0+c2tiLT5kYXRhOwogCXN0cnVjdCBzdGFfaW5mbyAqZHN0YTsKQEAgLTE0OTUsOCArMTUwNyw4IEBACiAJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gY2xvbmUgIgogCQkJCSAgICAgICAibXVsdGljYXN0IGZyYW1lXG4iLCBkZXYtPm5hbWUpOwogCQl9IGVsc2UgewotCQkJZHN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgc2tiLT5kYXRhKTsKLQkJCWlmIChkc3RhICYmIGRzdGEtPnNkYXRhLT5kZXYgPT0gZGV2KSB7CisJCQlkc3RhID0gc3RhX2luZm9fZ2V0KHNkYXRhLCBza2ItPmRhdGEpOworCQkJaWYgKGRzdGEpIHsKIAkJCQkvKgogCQkJCSAqIFRoZSBkZXN0aW5hdGlvbiBzdGF0aW9uIGlzIGFzc29jaWF0ZWQgdG8KIAkJCQkgKiB0aGlzIEFQIChpbiB0aGlzIFZMQU4pLCBzbyBzZW5kIHRoZSBmcmFtZQpAQCAtMTUxMiw3ICsxNTI0LDcgQEAKIAlpZiAoc2tiKSB7CiAJCWludCBhbGlnbiBfX21heWJlX3VudXNlZDsKIAotI2lmIGRlZmluZWQoQ09ORklHX01BQzgwMjExX0RFQlVHX1BBQ0tFVF9BTElHTk1FTlQpIHx8ICFkZWZpbmVkKENPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTKQorI2lmbmRlZiBDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUwogCQkvKgogCQkgKiAnYWxpZ24nIHdpbGwgb25seSB0YWtlIHRoZSB2YWx1ZXMgMCBvciAyIGhlcmUKIAkJICogc2luY2UgYWxsIGZyYW1lcyBhcmUgcmVxdWlyZWQgdG8gYmUgYWxpZ25lZApAQCAtMTU1NiwxNiArMTU2OCwxMCBAQAogaWVlZTgwMjExX3J4X2hfYW1zZHUoc3RydWN0IGllZWU4MDIxMV9yeF9kYXRhICpyeCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcngtPnNkYXRhLT5kZXY7Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSByeC0+bG9jYWw7Ci0JdTE2IGV0aGVydHlwZTsKLQl1OCAqcGF5bG9hZDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtPnNrYiwgKmZyYW1lID0gTlVMTDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gcngtPnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCV9fbGUxNiBmYyA9IGhkci0+ZnJhbWVfY29udHJvbDsKLQljb25zdCBzdHJ1Y3QgZXRoaGRyICpldGg7Ci0JaW50IHJlbWFpbmluZywgZXJyOwotCXU4IGRzdFtFVEhfQUxFTl07Ci0JdTggc3JjW0VUSF9BTEVOXTsKKwlzdHJ1Y3Qgc2tfYnVmZl9oZWFkIGZyYW1lX2xpc3Q7CiAKIAlpZiAodW5saWtlbHkoIWllZWU4MDIxMV9pc19kYXRhKGZjKSkpCiAJCXJldHVybiBSWF9DT05USU5VRTsKQEAgLTE1NzYsOTQgKzE1ODIsMzQgQEAKIAlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfQU1TRFUpKQogCQlyZXR1cm4gUlhfQ09OVElOVUU7CiAKLQllcnIgPSBfX2llZWU4MDIxMV9kYXRhX3RvXzgwMjMocngpOwotCWlmICh1bmxpa2VseShlcnIpKQorCWlmIChpZWVlODAyMTFfaGFzX2E0KGhkci0+ZnJhbWVfY29udHJvbCkgJiYKKwkgICAgcngtPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCisJICAgICFyeC0+c2RhdGEtPnUudmxhbi5zdGEpCisJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOworCisJaWYgKGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmCisJICAgICgocngtPnNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCisJICAgICAgcngtPnNkYXRhLT51LnZsYW4uc3RhKSB8fAorCSAgICAgKHJ4LT5zZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCSAgICAgIHJ4LT5zZGF0YS0+dS5tZ2QudXNlXzRhZGRyKSkpCiAJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwogCiAJc2tiLT5kZXYgPSBkZXY7CisJX19za2JfcXVldWVfaGVhZF9pbml0KCZmcmFtZV9saXN0KTsKIAotCWRldi0+c3RhdHMucnhfcGFja2V0cysrOwotCWRldi0+c3RhdHMucnhfYnl0ZXMgKz0gc2tiLT5sZW47CisJaWVlZTgwMjExX2Ftc2R1X3RvXzgwMjNzKHNrYiwgJmZyYW1lX2xpc3QsIGRldi0+ZGV2X2FkZHIsCisJCQkJIHJ4LT5zZGF0YS0+dmlmLnR5cGUsCisJCQkJIHJ4LT5sb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwogCi0JLyogc2tpcCB0aGUgd3JhcHBpbmcgaGVhZGVyICovCi0JZXRoID0gKHN0cnVjdCBldGhoZHIgKikgc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOwotCWlmICghZXRoKQotCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKLQotCXdoaWxlIChza2IgIT0gZnJhbWUpIHsKLQkJdTggcGFkZGluZzsKLQkJX19iZTE2IGxlbiA9IGV0aC0+aF9wcm90bzsKLQkJdW5zaWduZWQgaW50IHN1YmZyYW1lX2xlbiA9IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArIG50b2hzKGxlbik7Ci0KLQkJcmVtYWluaW5nID0gc2tiLT5sZW47Ci0JCW1lbWNweShkc3QsIGV0aC0+aF9kZXN0LCBFVEhfQUxFTik7Ci0JCW1lbWNweShzcmMsIGV0aC0+aF9zb3VyY2UsIEVUSF9BTEVOKTsKLQotCQlwYWRkaW5nID0gKCg0IC0gc3ViZnJhbWVfbGVuKSAmIDB4Myk7Ci0JCS8qIHRoZSBsYXN0IE1TRFUgaGFzIG5vIHBhZGRpbmcgKi8KLQkJaWYgKHN1YmZyYW1lX2xlbiA+IHJlbWFpbmluZykKLQkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwotCi0JCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKLQkJLyogaWYgbGFzdCBzdWJmcmFtZSByZXVzZSBza2IgKi8KLQkJaWYgKHJlbWFpbmluZyA8PSBzdWJmcmFtZV9sZW4gKyBwYWRkaW5nKQotCQkJZnJhbWUgPSBza2I7Ci0JCWVsc2UgewotCQkJLyoKLQkJCSAqIEFsbG9jYXRlIGFuZCByZXNlcnZlIHR3byBieXRlcyBtb3JlIGZvciBwYXlsb2FkCi0JCQkgKiBhbGlnbm1lbnQgc2luY2Ugc2l6ZW9mKHN0cnVjdCBldGhoZHIpIGlzIDE0LgotCQkJICovCi0JCQlmcmFtZSA9IGRldl9hbGxvY19za2IoCi0JCQkJQUxJR04obG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tLCA0KSArCi0JCQkJc3ViZnJhbWVfbGVuICsgMik7Ci0KLQkJCWlmIChmcmFtZSA9PSBOVUxMKQotCQkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwotCi0JCQlza2JfcmVzZXJ2ZShmcmFtZSwKLQkJCQkgICAgQUxJR04obG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tLCA0KSArCi0JCQkJICAgIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArIDIpOwotCQkJbWVtY3B5KHNrYl9wdXQoZnJhbWUsIG50b2hzKGxlbikpLCBza2ItPmRhdGEsCi0JCQkJbnRvaHMobGVuKSk7Ci0KLQkJCWV0aCA9IChzdHJ1Y3QgZXRoaGRyICopIHNrYl9wdWxsKHNrYiwgbnRvaHMobGVuKSArCi0JCQkJCQkJcGFkZGluZyk7Ci0JCQlpZiAoIWV0aCkgewotCQkJCWRldl9rZnJlZV9za2IoZnJhbWUpOwotCQkJCXJldHVybiBSWF9EUk9QX1VOVVNBQkxFOwotCQkJfQotCQl9Ci0KLQkJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKGZyYW1lKTsKLQkJZnJhbWUtPmRldiA9IGRldjsKLQkJZnJhbWUtPnByaW9yaXR5ID0gc2tiLT5wcmlvcml0eTsKLQkJcngtPnNrYiA9IGZyYW1lOwotCi0JCXBheWxvYWQgPSBmcmFtZS0+ZGF0YTsKLQkJZXRoZXJ0eXBlID0gKHBheWxvYWRbNl0gPDwgOCkgfCBwYXlsb2FkWzddOwotCi0JCWlmIChsaWtlbHkoKGNvbXBhcmVfZXRoZXJfYWRkcihwYXlsb2FkLCByZmMxMDQyX2hlYWRlcikgPT0gMCAmJgotCQkJICAgIGV0aGVydHlwZSAhPSBFVEhfUF9BQVJQICYmIGV0aGVydHlwZSAhPSBFVEhfUF9JUFgpIHx8Ci0JCQkgICBjb21wYXJlX2V0aGVyX2FkZHIocGF5bG9hZCwKLQkJCQkJICAgICAgYnJpZGdlX3R1bm5lbF9oZWFkZXIpID09IDApKSB7Ci0JCQkvKiByZW1vdmUgUkZDMTA0MiBvciBCcmlkZ2UtVHVubmVsCi0JCQkgKiBlbmNhcHN1bGF0aW9uIGFuZCByZXBsYWNlIEV0aGVyVHlwZSAqLwotCQkJc2tiX3B1bGwoZnJhbWUsIDYpOwotCQkJbWVtY3B5KHNrYl9wdXNoKGZyYW1lLCBFVEhfQUxFTiksIHNyYywgRVRIX0FMRU4pOwotCQkJbWVtY3B5KHNrYl9wdXNoKGZyYW1lLCBFVEhfQUxFTiksIGRzdCwgRVRIX0FMRU4pOwotCQl9IGVsc2UgewotCQkJbWVtY3B5KHNrYl9wdXNoKGZyYW1lLCBzaXplb2YoX19iZTE2KSksCi0JCQkgICAgICAgJmxlbiwgc2l6ZW9mKF9fYmUxNikpOwotCQkJbWVtY3B5KHNrYl9wdXNoKGZyYW1lLCBFVEhfQUxFTiksIHNyYywgRVRIX0FMRU4pOwotCQkJbWVtY3B5KHNrYl9wdXNoKGZyYW1lLCBFVEhfQUxFTiksIGRzdCwgRVRIX0FMRU4pOwotCQl9CisJd2hpbGUgKCFza2JfcXVldWVfZW1wdHkoJmZyYW1lX2xpc3QpKSB7CisJCXJ4LT5za2IgPSBfX3NrYl9kZXF1ZXVlKCZmcmFtZV9saXN0KTsKIAogCQlpZiAoIWllZWU4MDIxMV9mcmFtZV9hbGxvd2VkKHJ4LCBmYykpIHsKLQkJCWlmIChza2IgPT0gZnJhbWUpIC8qIGxhc3QgZnJhbWUgKi8KLQkJCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKLQkJCWRldl9rZnJlZV9za2IoZnJhbWUpOworCQkJZGV2X2tmcmVlX3NrYihyeC0+c2tiKTsKIAkJCWNvbnRpbnVlOwogCQl9CisJCWRldi0+c3RhdHMucnhfcGFja2V0cysrOworCQlkZXYtPnN0YXRzLnJ4X2J5dGVzICs9IHJ4LT5za2ItPmxlbjsKIAogCQlpZWVlODAyMTFfZGVsaXZlcl9za2IocngpOwogCX0KQEAgLTE3MjEsNyArMTY2Nyw3IEBACiAKIAkvKiBGcmFtZSBoYXMgcmVhY2hlZCBkZXN0aW5hdGlvbi4gIERvbid0IGZvcndhcmQgKi8KIAlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci0+YWRkcjEpICYmCi0JICAgIGNvbXBhcmVfZXRoZXJfYWRkcihzZGF0YS0+ZGV2LT5kZXZfYWRkciwgaGRyLT5hZGRyMykgPT0gMCkKKwkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHNkYXRhLT52aWYuYWRkciwgaGRyLT5hZGRyMykgPT0gMCkKIAkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCiAJbWVzaF9oZHItPnR0bC0tOwpAQCAtMTczOCwxMCArMTY4NCwxMCBAQAogCiAJCQlpZiAoIWZ3ZF9za2IgJiYgbmV0X3JhdGVsaW1pdCgpKQogCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGNsb25lIG1lc2ggZnJhbWVcbiIsCi0JCQkJCQkgICBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJCQkJCSAgIHNkYXRhLT5uYW1lKTsKIAogCQkJZndkX2hkciA9ICAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgZndkX3NrYi0+ZGF0YTsKLQkJCW1lbWNweShmd2RfaGRyLT5hZGRyMiwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJCW1lbWNweShmd2RfaGRyLT5hZGRyMiwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJCQlpbmZvID0gSUVFRTgwMjExX1NLQl9DQihmd2Rfc2tiKTsKIAkJCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKIAkJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ORUVEX1RYUFJPQ0VTU0lORzsKQEAgLTE3ODgsNiArMTczNCw3IEBACiBpZWVlODAyMTFfcnhfaF9kYXRhKHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSByeC0+c2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSByeC0+bG9jYWw7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNkYXRhLT5kZXY7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXJ4LT5za2ItPmRhdGE7CiAJX19sZTE2IGZjID0gaGRyLT5mcmFtZV9jb250cm9sOwpAQCAtMTgxOSw2ICsxNzY2LDEzIEBACiAJZGV2LT5zdGF0cy5yeF9wYWNrZXRzKys7CiAJZGV2LT5zdGF0cy5yeF9ieXRlcyArPSByeC0+c2tiLT5sZW47CiAKKwlpZiAoaWVlZTgwMjExX2lzX2RhdGEoaGRyLT5mcmFtZV9jb250cm9sKSAmJgorCSAgICAhaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIoaGRyLT5hZGRyMSkgJiYKKwkgICAgbG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0ID4gMCAmJiBsb2NhbC0+cHNfc2RhdGEpIHsKKwkJCW1vZF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsIGppZmZpZXMgKworCQkJIG1zZWNzX3RvX2ppZmZpZXMobG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0KSk7CisJfQorCiAJaWVlZTgwMjExX2RlbGl2ZXJfc2tiKHJ4KTsKIAogCXJldHVybiBSWF9RVUVVRUQ7CkBAIC0xODcyLDcgKzE4MjYsNyBAQAogCXN0cnVjdCBza19idWZmICpza2I7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICpyZXNwOwogCi0JaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihtZ210LT5kYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIpICE9IDApIHsKKwlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKG1nbXQtPmRhLCBzZGF0YS0+dmlmLmFkZHIpICE9IDApIHsKIAkJLyogTm90IHRvIG93biB1bmljYXN0IGFkZHJlc3MgKi8KIAkJcmV0dXJuOwogCX0KQEAgLTE4OTYsNyArMTg1MCw3IEBACiAJcmVzcCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKIAltZW1zZXQocmVzcCwgMCwgMjQpOwogCW1lbWNweShyZXNwLT5kYSwgbWdtdC0+c2EsIEVUSF9BTEVOKTsKLQltZW1jcHkocmVzcC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KHJlc3AtPnNhLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAltZW1jcHkocmVzcC0+YnNzaWQsIHNkYXRhLT51Lm1nZC5ic3NpZCwgRVRIX0FMRU4pOwogCXJlc3AtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CiAJCQkJCSAgSUVFRTgwMjExX1NUWVBFX0FDVElPTik7CkBAIC0xOTE2LDIzICsxODcwLDI1IEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSByeC0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSByeC0+c2RhdGE7CiAJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSByeC0+c2tiLT5kYXRhOworCXN0cnVjdCBza19idWZmICpuc2tiOworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpzdGF0dXM7CiAJaW50IGxlbiA9IHJ4LT5za2ItPmxlbjsKIAogCWlmICghaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LT5mcmFtZV9jb250cm9sKSkKIAkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCi0JaWYgKCFyeC0+c3RhKQotCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCS8qIGRyb3AgdG9vIHNtYWxsIGZyYW1lcyAqLworCWlmIChsZW4gPCBJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFKQorCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKKworCWlmICghcngtPnN0YSAmJiBtZ210LT51LmFjdGlvbi5jYXRlZ29yeSAhPSBXTEFOX0NBVEVHT1JZX1BVQkxJQykKKwkJcmV0dXJuIFJYX0RST1BfVU5VU0FCTEU7CiAKIAlpZiAoIShyeC0+ZmxhZ3MgJiBJRUVFODAyMTFfUlhfUkFfTUFUQ0gpKQotCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIAotCWlmIChpZWVlODAyMTFfZHJvcF91bmVuY3J5cHRlZChyeCwgbWdtdC0+ZnJhbWVfY29udHJvbCkpCi0JCXJldHVybiBSWF9EUk9QX01PTklUT1I7Ci0KLQkvKiBhbGwgY2F0ZWdvcmllcyB3ZSBjdXJyZW50bHkgaGFuZGxlIGhhdmUgYWN0aW9uX2NvZGUgKi8KLQlpZiAobGVuIDwgSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArIDEpCi0JCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJaWYgKGllZWU4MDIxMV9kcm9wX3VuZW5jcnlwdGVkX21nbXQocngpKQorCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKIAogCXN3aXRjaCAobWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkpIHsKIAljYXNlIFdMQU5fQ0FURUdPUllfQkFDSzoKQEAgLTE5NDUsNyArMTkwMSwxMSBAQAogCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKIAkJICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOICYmCiAJCSAgICBzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVApCi0JCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCQkJYnJlYWs7CisKKwkJLyogdmVyaWZ5IGFjdGlvbl9jb2RlIGlzIHByZXNlbnQgKi8KKwkJaWYgKGxlbiA8IElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgKyAxKQorCQkJYnJlYWs7CiAKIAkJc3dpdGNoIChtZ210LT51LmFjdGlvbi51LmFkZGJhX3JlcS5hY3Rpb25fY29kZSkgewogCQljYXNlIFdMQU5fQUNUSU9OX0FEREJBX1JFUToKQEAgLTE5NTMsNDUgKzE5MTMsNDkgQEAKIAkJCQkgICBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5hZGRiYV9yZXEpKSkKIAkJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCQkJaWVlZTgwMjExX3Byb2Nlc3NfYWRkYmFfcmVxdWVzdChsb2NhbCwgcngtPnN0YSwgbWdtdCwgbGVuKTsKLQkJCWJyZWFrOworCQkJZ290byBoYW5kbGVkOwogCQljYXNlIFdMQU5fQUNUSU9OX0FEREJBX1JFU1A6CiAJCQlpZiAobGVuIDwgKElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgKwogCQkJCSAgIHNpemVvZihtZ210LT51LmFjdGlvbi51LmFkZGJhX3Jlc3ApKSkKLQkJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCQkJCWJyZWFrOwogCQkJaWVlZTgwMjExX3Byb2Nlc3NfYWRkYmFfcmVzcChsb2NhbCwgcngtPnN0YSwgbWdtdCwgbGVuKTsKLQkJCWJyZWFrOworCQkJZ290byBoYW5kbGVkOwogCQljYXNlIFdMQU5fQUNUSU9OX0RFTEJBOgogCQkJaWYgKGxlbiA8IChJRUVFODAyMTFfTUlOX0FDVElPTl9TSVpFICsKIAkJCQkgICBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5kZWxiYSkpKQotCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJCQkJYnJlYWs7CiAJCQlpZWVlODAyMTFfcHJvY2Vzc19kZWxiYShzZGF0YSwgcngtPnN0YSwgbWdtdCwgbGVuKTsKLQkJCWJyZWFrOworCQkJZ290byBoYW5kbGVkOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgV0xBTl9DQVRFR09SWV9TUEVDVFJVTV9NR01UOgogCQlpZiAobG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZCAhPSBJRUVFODAyMTFfQkFORF81R0haKQotCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJCWJyZWFrOwogCiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKLQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJCQlicmVhazsKKworCQkvKiB2ZXJpZnkgYWN0aW9uX2NvZGUgaXMgcHJlc2VudCAqLworCQlpZiAobGVuIDwgSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArIDEpCisJCQlicmVhazsKIAogCQlzd2l0Y2ggKG1nbXQtPnUuYWN0aW9uLnUubWVhc3VyZW1lbnQuYWN0aW9uX2NvZGUpIHsKIAkJY2FzZSBXTEFOX0FDVElPTl9TUENUX01TUl9SRVE6CiAJCQlpZiAobGVuIDwgKElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgKwogCQkJCSAgIHNpemVvZihtZ210LT51LmFjdGlvbi51Lm1lYXN1cmVtZW50KSkpCi0JCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJCQlicmVhazsKIAkJCWllZWU4MDIxMV9wcm9jZXNzX21lYXN1cmVtZW50X3JlcShzZGF0YSwgbWdtdCwgbGVuKTsKLQkJCWJyZWFrOworCQkJZ290byBoYW5kbGVkOwogCQljYXNlIFdMQU5fQUNUSU9OX1NQQ1RfQ0hMX1NXSVRDSDoKIAkJCWlmIChsZW4gPCAoSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArCiAJCQkJICAgc2l6ZW9mKG1nbXQtPnUuYWN0aW9uLnUuY2hhbl9zd2l0Y2gpKSkKLQkJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCQkJCWJyZWFrOwogCiAJCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJCQlicmVhazsKIAogCQkJaWYgKG1lbWNtcChtZ210LT5ic3NpZCwgc2RhdGEtPnUubWdkLmJzc2lkLCBFVEhfQUxFTikpCi0JCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJCQlicmVhazsKIAogCQkJcmV0dXJuIGllZWU4MDIxMV9zdGFfcnhfbWdtdChzZGF0YSwgcngtPnNrYik7CiAJCX0KQEAgLTE5OTksMzAgKzE5NjMsNjQgQEAKIAljYXNlIFdMQU5fQ0FURUdPUllfU0FfUVVFUlk6CiAJCWlmIChsZW4gPCAoSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSArCiAJCQkgICBzaXplb2YobWdtdC0+dS5hY3Rpb24udS5zYV9xdWVyeSkpKQotCQkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKKwkJCWJyZWFrOworCiAJCXN3aXRjaCAobWdtdC0+dS5hY3Rpb24udS5zYV9xdWVyeS5hY3Rpb24pIHsKIAkJY2FzZSBXTEFOX0FDVElPTl9TQV9RVUVSWV9SRVFVRVNUOgogCQkJaWYgKHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQotCQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJCQkJYnJlYWs7CiAJCQlpZWVlODAyMTFfcHJvY2Vzc19zYV9xdWVyeV9yZXEoc2RhdGEsIG1nbXQsIGxlbik7Ci0JCQlicmVhazsKLQkJY2FzZSBXTEFOX0FDVElPTl9TQV9RVUVSWV9SRVNQT05TRToKLQkJCS8qCi0JCQkgKiBTQSBRdWVyeSByZXNwb25zZSBpcyBjdXJyZW50bHkgb25seSB1c2VkIGluIEFQIG1vZGUKLQkJCSAqIGFuZCBpdCBpcyBwcm9jZXNzZWQgaW4gdXNlciBzcGFjZS4KLQkJCSAqLwotCQkJcmV0dXJuIFJYX0NPTlRJTlVFOworCQkJZ290byBoYW5kbGVkOwogCQl9CiAJCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCS8qIGRvIG5vdCBwcm9jZXNzIHJlamVjdGVkIGFjdGlvbiBmcmFtZXMgKi8KLQkJaWYgKG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ICYgMHg4MCkKLQkJCXJldHVybiBSWF9EUk9QX01PTklUT1I7Ci0KLQkJcmV0dXJuIFJYX0NPTlRJTlVFOwogCX0KIAotCXJ4LT5zdGEtPnJ4X3BhY2tldHMrKzsKKwkvKgorCSAqIEZvciBBUCBtb2RlLCBob3N0YXBkIGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBhbnkgYWN0aW9uCisJICogZnJhbWVzIHRoYXQgd2UgZGlkbid0IGhhbmRsZSwgaW5jbHVkaW5nIHJldHVybmluZyB1bmtub3duCisJICogb25lcy4gRm9yIGFsbCBvdGhlciBtb2RlcyB3ZSB3aWxsIHJldHVybiB0aGVtIHRvIHRoZSBzZW5kZXIsCisJICogc2V0dGluZyB0aGUgMHg4MCBiaXQgaW4gdGhlIGFjdGlvbiBjYXRlZ29yeSwgYXMgcmVxdWlyZWQgYnkKKwkgKiA4MDIuMTEtMjAwNyA3LjMuMS4xMS4KKwkgKi8KKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8CisJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCisJLyoKKwkgKiBHZXR0aW5nIGhlcmUgbWVhbnMgdGhlIGtlcm5lbCBkb2Vzbid0IGtub3cgaG93IHRvIGhhbmRsZQorCSAqIGl0LCBidXQgbWF5YmUgdXNlcnNwYWNlIGRvZXMgLi4uIGluY2x1ZGUgcmV0dXJuZWQgZnJhbWVzCisJICogc28gdXNlcnNwYWNlIGNhbiByZWdpc3RlciBmb3IgdGhvc2UgdG8ga25vdyB3aGV0aGVyIG9uZXMKKwkgKiBpdCB0cmFuc21pdHRlZCB3ZXJlIHByb2Nlc3NlZCBvciByZXR1cm5lZC4KKwkgKi8KKwlzdGF0dXMgPSBJRUVFODAyMTFfU0tCX1JYQ0IocngtPnNrYik7CisKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkgICAgY2ZnODAyMTFfcnhfYWN0aW9uKHJ4LT5zZGF0YS0+ZGV2LCBzdGF0dXMtPmZyZXEsCisJCQkgICAgICAgcngtPnNrYi0+ZGF0YSwgcngtPnNrYi0+bGVuLAorCQkJICAgICAgIEdGUF9BVE9NSUMpKQorCQlnb3RvIGhhbmRsZWQ7CisKKwkvKiBkbyBub3QgcmV0dXJuIHJlamVjdGVkIGFjdGlvbiBmcmFtZXMgKi8KKwlpZiAobWdtdC0+dS5hY3Rpb24uY2F0ZWdvcnkgJiAweDgwKQorCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKKworCW5za2IgPSBza2JfY29weV9leHBhbmQocngtPnNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tLCAwLAorCQkJICAgICAgIEdGUF9BVE9NSUMpOworCWlmIChuc2tiKSB7CisJCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCA9ICh2b2lkICopbnNrYi0+ZGF0YTsKKworCQltZ210LT51LmFjdGlvbi5jYXRlZ29yeSB8PSAweDgwOworCQltZW1jcHkobWdtdC0+ZGEsIG1nbXQtPnNhLCBFVEhfQUxFTik7CisJCW1lbWNweShtZ210LT5zYSwgcngtPnNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOworCisJCW1lbXNldChuc2tiLT5jYiwgMCwgc2l6ZW9mKG5za2ItPmNiKSk7CisKKwkJaWVlZTgwMjExX3R4X3NrYihyeC0+c2RhdGEsIG5za2IpOworCX0KKworIGhhbmRsZWQ6CisJaWYgKHJ4LT5zdGEpCisJCXJ4LT5zdGEtPnJ4X3BhY2tldHMrKzsKIAlkZXZfa2ZyZWVfc2tiKHJ4LT5za2IpOwogCXJldHVybiBSWF9RVUVVRUQ7CiB9CkBAIC0yMDMxLDEzICsyMDI5LDE3IEBACiBpZWVlODAyMTFfcnhfaF9tZ210KHN0cnVjdCBpZWVlODAyMTFfcnhfZGF0YSAqcngpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSByeC0+c2RhdGE7Ci0Jc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSByeC0+c2tiLT5kYXRhOworCWllZWU4MDIxMV9yeF9yZXN1bHQgcnhzOwogCiAJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX1JBX01BVENIKSkKIAkJcmV0dXJuIFJYX0RST1BfTU9OSVRPUjsKIAotCWlmIChpZWVlODAyMTFfZHJvcF91bmVuY3J5cHRlZChyeCwgbWdtdC0+ZnJhbWVfY29udHJvbCkpCi0JCXJldHVybiBSWF9EUk9QX01PTklUT1I7CisJaWYgKGllZWU4MDIxMV9kcm9wX3VuZW5jcnlwdGVkX21nbXQocngpKQorCQlyZXR1cm4gUlhfRFJPUF9VTlVTQUJMRTsKKworCXJ4cyA9IGllZWU4MDIxMV93b3JrX3J4X21nbXQocngtPnNkYXRhLCByeC0+c2tiKTsKKwlpZiAocnhzICE9IFJYX0NPTlRJTlVFKQorCQlyZXR1cm4gcnhzOwogCiAJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpCiAJCXJldHVybiBpZWVlODAyMTFfbWVzaF9yeF9tZ210KHNkYXRhLCByeC0+c2tiKTsKQEAgLTIxNDMsNyArMjE0NSw3IEBACiAJc2tiLT5wcm90b2NvbCA9IGh0b25zKEVUSF9QXzgwMl8yKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKLQkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUiB8fApAQCAtMjI4MCw3ICsyMjgyLDcgQEAKIAkJaWYgKCFic3NpZCAmJiAhc2RhdGEtPnUubWdkLnVzZV80YWRkcikKIAkJCXJldHVybiAwOwogCQlpZiAoIW11bHRpY2FzdCAmJgotCQkgICAgY29tcGFyZV9ldGhlcl9hZGRyKHNkYXRhLT5kZXYtPmRldl9hZGRyLCBoZHItPmFkZHIxKSAhPSAwKSB7CisJCSAgICBjb21wYXJlX2V0aGVyX2FkZHIoc2RhdGEtPnZpZi5hZGRyLCBoZHItPmFkZHIxKSAhPSAwKSB7CiAJCQlpZiAoIShzZGF0YS0+ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSkKIAkJCQlyZXR1cm4gMDsKIAkJCXJ4LT5mbGFncyAmPSB+SUVFRTgwMjExX1JYX1JBX01BVENIOwpAQCAtMjI5Nyw3ICsyMjk5LDcgQEAKIAkJCQlyZXR1cm4gMDsKIAkJCXJ4LT5mbGFncyAmPSB+SUVFRTgwMjExX1JYX1JBX01BVENIOwogCQl9IGVsc2UgaWYgKCFtdWx0aWNhc3QgJiYKLQkJCSAgIGNvbXBhcmVfZXRoZXJfYWRkcihzZGF0YS0+ZGV2LT5kZXZfYWRkciwKKwkJCSAgIGNvbXBhcmVfZXRoZXJfYWRkcihzZGF0YS0+dmlmLmFkZHIsCiAJCQkJCSAgICAgIGhkci0+YWRkcjEpICE9IDApIHsKIAkJCWlmICghKHNkYXRhLT5kZXYtPmZsYWdzICYgSUZGX1BST01JU0MpKQogCQkJCXJldHVybiAwOwpAQCAtMjMwOCwxMyArMjMxMCwxMyBAQAogCQkJCXJhdGVfaWR4ID0gMDsgLyogVE9ETzogSFQgcmF0ZXMgKi8KIAkJCWVsc2UKIAkJCQlyYXRlX2lkeCA9IHN0YXR1cy0+cmF0ZV9pZHg7Ci0JCQlyeC0+c3RhID0gaWVlZTgwMjExX2lic3NfYWRkX3N0YShzZGF0YSwgYnNzaWQsIGhkci0+YWRkcjIsCi0JCQkJQklUKHJhdGVfaWR4KSk7CisJCQlyeC0+c3RhID0gaWVlZTgwMjExX2lic3NfYWRkX3N0YShzZGF0YSwgYnNzaWQsCisJCQkJCWhkci0+YWRkcjIsIEJJVChyYXRlX2lkeCksIEdGUF9BVE9NSUMpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgTkw4MDIxMV9JRlRZUEVfTUVTSF9QT0lOVDoKIAkJaWYgKCFtdWx0aWNhc3QgJiYKLQkJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihzZGF0YS0+ZGV2LT5kZXZfYWRkciwKKwkJICAgIGNvbXBhcmVfZXRoZXJfYWRkcihzZGF0YS0+dmlmLmFkZHIsCiAJCQkJICAgICAgIGhkci0+YWRkcjEpICE9IDApIHsKIAkJCWlmICghKHNkYXRhLT5kZXYtPmZsYWdzICYgSUZGX1BST01JU0MpKQogCQkJCXJldHVybiAwOwpAQCAtMjMyNSwxMSArMjMyNywxMSBAQAogCWNhc2UgTkw4MDIxMV9JRlRZUEVfQVBfVkxBTjoKIAljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgogCQlpZiAoIWJzc2lkKSB7Ci0JCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKHNkYXRhLT5kZXYtPmRldl9hZGRyLAorCQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihzZGF0YS0+dmlmLmFkZHIsCiAJCQkJCSAgICAgICBoZHItPmFkZHIxKSkKIAkJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIGlmICghaWVlZTgwMjExX2Jzc2lkX21hdGNoKGJzc2lkLAotCQkJCQlzZGF0YS0+ZGV2LT5kZXZfYWRkcikpIHsKKwkJCQkJc2RhdGEtPnZpZi5hZGRyKSkgewogCQkJaWYgKCEocngtPmZsYWdzICYgSUVFRTgwMjExX1JYX0lOX1NDQU4pKQogCQkJCXJldHVybiAwOwogCQkJcngtPmZsYWdzICY9IH5JRUVFODAyMTFfUlhfUkFfTUFUQ0g7CkBAIC0yMzY4LDYgKzIzNzAsOCBAQAogCWludCBwcmVwYXJlczsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpwcmV2ID0gTlVMTDsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX25ldzsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwgKnRtcDsKKwlib29sIGZvdW5kX3N0YSA9IGZhbHNlOwogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCW1lbXNldCgmcngsIDAsIHNpemVvZihyeCkpOwpAQCAtMjM4NCw2OCArMjM4OCw4NyBAQAogCWllZWU4MDIxMV9wYXJzZV9xb3MoJnJ4KTsKIAlpZWVlODAyMTFfdmVyaWZ5X2FsaWdubWVudCgmcngpOwogCi0Jcnguc3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHItPmFkZHIyKTsKLQlpZiAocnguc3RhKQotCQlyeC5zZGF0YSA9IHJ4LnN0YS0+c2RhdGE7CisJaWYgKGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKKwkJZm9yX2VhY2hfc3RhX2luZm8obG9jYWwsIGhkci0+YWRkcjIsIHN0YSwgdG1wKSB7CisJCQlyeC5zdGEgPSBzdGE7CisJCQlmb3VuZF9zdGEgPSB0cnVlOworCQkJcnguc2RhdGEgPSBzdGEtPnNkYXRhOwogCi0JaWYgKHJ4LnNkYXRhICYmIGllZWU4MDIxMV9pc19kYXRhKGhkci0+ZnJhbWVfY29udHJvbCkpIHsKLQkJcnguZmxhZ3MgfD0gSUVFRTgwMjExX1JYX1JBX01BVENIOwotCQlwcmVwYXJlcyA9IHByZXBhcmVfZm9yX2hhbmRsZXJzKHJ4LnNkYXRhLCAmcngsIGhkcik7Ci0JCWlmIChwcmVwYXJlcykgeworCQkJcnguZmxhZ3MgfD0gSUVFRTgwMjExX1JYX1JBX01BVENIOworCQkJcHJlcGFyZXMgPSBwcmVwYXJlX2Zvcl9oYW5kbGVycyhyeC5zZGF0YSwgJnJ4LCBoZHIpOworCQkJaWYgKHByZXBhcmVzKSB7CisJCQkJaWYgKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfTU1JQ19FUlJPUikgeworCQkJCQlpZiAocnguZmxhZ3MgJiBJRUVFODAyMTFfUlhfUkFfTUFUQ0gpCisJCQkJCQlpZWVlODAyMTFfcnhfbWljaGFlbF9taWNfcmVwb3J0KGhkciwgJnJ4KTsKKwkJCQl9IGVsc2UKKwkJCQkJcHJldiA9IHJ4LnNkYXRhOworCQkJfQorCQl9CisJfQorCWlmICghZm91bmRfc3RhKSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQorCQkJCWNvbnRpbnVlOworCisJCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IgfHwKKwkJCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKKwkJCQljb250aW51ZTsKKworCQkJLyoKKwkJCSAqIGZyYW1lIGlzIGRlc3RpbmVkIGZvciB0aGlzIGludGVyZmFjZSwgYnV0IGlmIGl0J3MKKwkJCSAqIG5vdCBhbHNvIGZvciB0aGUgcHJldmlvdXMgb25lIHdlIGhhbmRsZSB0aGF0IGFmdGVyCisJCQkgKiB0aGUgbG9vcCB0byBhdm9pZCBjb3B5aW5nIHRoZSBTS0Igb25jZSB0b28gbXVjaAorCQkJICovCisKKwkJCWlmICghcHJldikgeworCQkJCXByZXYgPSBzZGF0YTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJcnguc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhwcmV2LCBoZHItPmFkZHIyKTsKKworCQkJcnguZmxhZ3MgfD0gSUVFRTgwMjExX1JYX1JBX01BVENIOworCQkJcHJlcGFyZXMgPSBwcmVwYXJlX2Zvcl9oYW5kbGVycyhwcmV2LCAmcngsIGhkcik7CisKKwkJCWlmICghcHJlcGFyZXMpCisJCQkJZ290byBuZXh0OworCiAJCQlpZiAoc3RhdHVzLT5mbGFnICYgUlhfRkxBR19NTUlDX0VSUk9SKSB7CisJCQkJcnguc2RhdGEgPSBwcmV2OwogCQkJCWlmIChyeC5mbGFncyAmIElFRUU4MDIxMV9SWF9SQV9NQVRDSCkKLQkJCQkJaWVlZTgwMjExX3J4X21pY2hhZWxfbWljX3JlcG9ydChoZHIsICZyeCk7Ci0JCQl9IGVsc2UKLQkJCQlwcmV2ID0gcnguc2RhdGE7Ci0JCX0KLQl9IGVsc2UgbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCi0JCQljb250aW51ZTsKKwkJCQkJaWVlZTgwMjExX3J4X21pY2hhZWxfbWljX3JlcG9ydChoZHIsCisJCQkJCQkJCQkmcngpOworCQkJCWdvdG8gbmV4dDsKKwkJCX0KIAotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01PTklUT1IgfHwKLQkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQotCQkJY29udGludWU7CisJCQkvKgorCQkJICogZnJhbWUgd2FzIGRlc3RpbmVkIGZvciB0aGUgcHJldmlvdXMgaW50ZXJmYWNlCisJCQkgKiBzbyBpbnZva2UgUlggaGFuZGxlcnMgZm9yIGl0CisJCQkgKi8KIAotCQlyeC5mbGFncyB8PSBJRUVFODAyMTFfUlhfUkFfTUFUQ0g7Ci0JCXByZXBhcmVzID0gcHJlcGFyZV9mb3JfaGFuZGxlcnMoc2RhdGEsICZyeCwgaGRyKTsKLQotCQlpZiAoIXByZXBhcmVzKQotCQkJY29udGludWU7Ci0KLQkJaWYgKHN0YXR1cy0+ZmxhZyAmIFJYX0ZMQUdfTU1JQ19FUlJPUikgewotCQkJcnguc2RhdGEgPSBzZGF0YTsKLQkJCWlmIChyeC5mbGFncyAmIElFRUU4MDIxMV9SWF9SQV9NQVRDSCkKLQkJCQlpZWVlODAyMTFfcnhfbWljaGFlbF9taWNfcmVwb3J0KGhkciwgJnJ4KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJLyoKLQkJICogZnJhbWUgaXMgZGVzdGluZWQgZm9yIHRoaXMgaW50ZXJmYWNlLCBidXQgaWYgaXQncyBub3QKLQkJICogYWxzbyBmb3IgdGhlIHByZXZpb3VzIG9uZSB3ZSBoYW5kbGUgdGhhdCBhZnRlciB0aGUKLQkJICogbG9vcCB0byBhdm9pZCBjb3B5aW5nIHRoZSBTS0Igb25jZSB0b28gbXVjaAotCQkgKi8KLQotCQlpZiAoIXByZXYpIHsKKwkJCXNrYl9uZXcgPSBza2JfY29weShza2IsIEdGUF9BVE9NSUMpOworCQkJaWYgKCFza2JfbmV3KSB7CisJCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKKwkJCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gY29weSAiCisJCQkJCSAgICAgICAibXVsdGljYXN0IGZyYW1lIGZvciAlc1xuIiwKKwkJCQkJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwKKwkJCQkJICAgICAgIHByZXYtPm5hbWUpOworCQkJCWdvdG8gbmV4dDsKKwkJCX0KKwkJCWllZWU4MDIxMV9pbnZva2VfcnhfaGFuZGxlcnMocHJldiwgJnJ4LCBza2JfbmV3LCByYXRlKTsKK25leHQ6CiAJCQlwcmV2ID0gc2RhdGE7Ci0JCQljb250aW51ZTsKIAkJfQogCi0JCS8qCi0JCSAqIGZyYW1lIHdhcyBkZXN0aW5lZCBmb3IgdGhlIHByZXZpb3VzIGludGVyZmFjZQotCQkgKiBzbyBpbnZva2UgUlggaGFuZGxlcnMgZm9yIGl0Ci0JCSAqLworCQlpZiAocHJldikgeworCQkJcnguc3RhID0gc3RhX2luZm9fZ2V0X2JzcyhwcmV2LCBoZHItPmFkZHIyKTsKIAotCQlza2JfbmV3ID0gc2tiX2NvcHkoc2tiLCBHRlBfQVRPTUlDKTsKLQkJaWYgKCFza2JfbmV3KSB7Ci0JCQlpZiAobmV0X3JhdGVsaW1pdCgpKQotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGNvcHkgIgotCQkJCSAgICAgICAibXVsdGljYXN0IGZyYW1lIGZvciAlc1xuIiwKLQkJCQkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLAotCQkJCSAgICAgICBwcmV2LT5kZXYtPm5hbWUpOwotCQkJY29udGludWU7CisJCQlyeC5mbGFncyB8PSBJRUVFODAyMTFfUlhfUkFfTUFUQ0g7CisJCQlwcmVwYXJlcyA9IHByZXBhcmVfZm9yX2hhbmRsZXJzKHByZXYsICZyeCwgaGRyKTsKKworCQkJaWYgKCFwcmVwYXJlcykKKwkJCQlwcmV2ID0gTlVMTDsKIAkJfQotCQlpZWVlODAyMTFfaW52b2tlX3J4X2hhbmRsZXJzKHByZXYsICZyeCwgc2tiX25ldywgcmF0ZSk7Ci0JCXByZXYgPSBzZGF0YTsKIAl9CiAJaWYgKHByZXYpCiAJCWllZWU4MDIxMV9pbnZva2VfcnhfaGFuZGxlcnMocHJldiwgJnJ4LCBza2IsIHJhdGUpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3NjYW4uYyBiL25ldC9tYWM4MDIxMS9zY2FuLmMKaW5kZXggYmMxN2NmNy4uYjgyMmRjZSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3NjYW4uYworKysgYi9uZXQvbWFjODAyMTEvc2Nhbi5jCkBAIC0xMiw3ICsxMiw2IEBACiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KICNpbmNsdWRlIDxuZXQvbWFjODAyMTEuaD4KQEAgLTI5LDE2ICsyOCwxOSBAQAogaWVlZTgwMjExX3J4X2Jzc19nZXQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsIHU4ICpic3NpZCwgaW50IGZyZXEsCiAJCSAgICAgdTggKnNzaWQsIHU4IHNzaWRfbGVuKQogewotCXJldHVybiAodm9pZCAqKWNmZzgwMjExX2dldF9ic3MobG9jYWwtPmh3LndpcGh5LAotCQkJCQlpZWVlODAyMTFfZ2V0X2NoYW5uZWwobG9jYWwtPmh3LndpcGh5LAotCQkJCQkJCSAgICAgIGZyZXEpLAotCQkJCQlic3NpZCwgc3NpZCwgc3NpZF9sZW4sCi0JCQkJCTAsIDApOworCXN0cnVjdCBjZmc4MDIxMV9ic3MgKmNic3M7CisKKwljYnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyhsb2NhbC0+aHcud2lwaHksCisJCQkJaWVlZTgwMjExX2dldF9jaGFubmVsKGxvY2FsLT5ody53aXBoeSwgZnJlcSksCisJCQkJYnNzaWQsIHNzaWQsIHNzaWRfbGVuLCAwLCAwKTsKKwlpZiAoIWNic3MpCisJCXJldHVybiBOVUxMOworCXJldHVybiAodm9pZCAqKWNic3MtPnByaXY7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9yeF9ic3NfZnJlZShzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzKQogewotCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3MgPSAodm9pZCAqKWNic3M7CisJc3RydWN0IGllZWU4MDIxMV9ic3MgKmJzcyA9ICh2b2lkICopY2Jzcy0+cHJpdjsKIAogCWtmcmVlKGJzc19tZXNoX2lkKGJzcykpOwogCWtmcmVlKGJzc19tZXNoX2NmZyhic3MpKTsKQEAgLTQ3LDcgKzQ5LDI2IEBACiB2b2lkIGllZWU4MDIxMV9yeF9ic3NfcHV0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAogCQkJICBzdHJ1Y3QgaWVlZTgwMjExX2JzcyAqYnNzKQogewotCWNmZzgwMjExX3B1dF9ic3MoKHN0cnVjdCBjZmc4MDIxMV9ic3MgKilic3MpOworCWlmICghYnNzKQorCQlyZXR1cm47CisJY2ZnODAyMTFfcHV0X2Jzcyhjb250YWluZXJfb2YoKHZvaWQgKilic3MsIHN0cnVjdCBjZmc4MDIxMV9ic3MsIHByaXYpKTsKK30KKworc3RhdGljIGJvb2wgaXNfdWFwc2Rfc3VwcG9ydGVkKHN0cnVjdCBpZWVlODAyXzExX2VsZW1zICplbGVtcykKK3sKKwl1OCBxb3NfaW5mbzsKKworCWlmIChlbGVtcy0+d21tX2luZm8gJiYgZWxlbXMtPndtbV9pbmZvX2xlbiA9PSA3CisJICAgICYmIGVsZW1zLT53bW1faW5mb1s1XSA9PSAxKQorCQlxb3NfaW5mbyA9IGVsZW1zLT53bW1faW5mb1s2XTsKKwllbHNlIGlmIChlbGVtcy0+d21tX3BhcmFtICYmIGVsZW1zLT53bW1fcGFyYW1fbGVuID09IDI0CisJCSAmJiBlbGVtcy0+d21tX3BhcmFtWzVdID09IDEpCisJCXFvc19pbmZvID0gZWxlbXMtPndtbV9wYXJhbVs2XTsKKwllbHNlCisJCS8qIG5vIHZhbGlkIHdtbSBpbmZvcm1hdGlvbiBvciBwYXJhbWV0ZXIgZWxlbWVudCBmb3VuZCAqLworCQlyZXR1cm4gZmFsc2U7CisKKwlyZXR1cm4gcW9zX2luZm8gJiBJRUVFODAyMTFfV01NX0lFX0FQX1FPU0lORk9fVUFQU0Q7CiB9CiAKIHN0cnVjdCBpZWVlODAyMTFfYnNzICoKQEAgLTU5LDYgKzgwLDcgQEAKIAkJCSAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFubmVsLAogCQkJICBib29sIGJlYWNvbikKIHsKKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzOwogCXN0cnVjdCBpZWVlODAyMTFfYnNzICpic3M7CiAJaW50IGNsZW47CiAJczMyIHNpZ25hbCA9IDA7CkBAIC02OCwxMyArOTAsMTQgQEAKIAllbHNlIGlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU0lHTkFMX1VOU1BFQykKIAkJc2lnbmFsID0gKHJ4X3N0YXR1cy0+c2lnbmFsICogMTAwKSAvIGxvY2FsLT5ody5tYXhfc2lnbmFsOwogCi0JYnNzID0gKHZvaWQgKiljZmc4MDIxMV9pbmZvcm1fYnNzX2ZyYW1lKGxvY2FsLT5ody53aXBoeSwgY2hhbm5lbCwKLQkJCQkJCW1nbXQsIGxlbiwgc2lnbmFsLCBHRlBfQVRPTUlDKTsKKwljYnNzID0gY2ZnODAyMTFfaW5mb3JtX2Jzc19mcmFtZShsb2NhbC0+aHcud2lwaHksIGNoYW5uZWwsCisJCQkJCSBtZ210LCBsZW4sIHNpZ25hbCwgR0ZQX0FUT01JQyk7CiAKLQlpZiAoIWJzcykKKwlpZiAoIWNic3MpCiAJCXJldHVybiBOVUxMOwogCi0JYnNzLT5jYnNzLmZyZWVfcHJpdiA9IGllZWU4MDIxMV9yeF9ic3NfZnJlZTsKKwljYnNzLT5mcmVlX3ByaXYgPSBpZWVlODAyMTFfcnhfYnNzX2ZyZWU7CisJYnNzID0gKHZvaWQgKiljYnNzLT5wcml2OwogCiAJLyogc2F2ZSB0aGUgRVJQIHZhbHVlIHNvIHRoYXQgaXQgaXMgYXZhaWxhYmxlIGF0IGFzc29jaWF0aW9uIHRpbWUgKi8KIAlpZiAoZWxlbXMtPmVycF9pbmZvICYmIGVsZW1zLT5lcnBfaW5mb19sZW4gPj0gMSkgewpAQCAtODgsMTAgKzExMSw2IEBACiAJCWJzcy0+ZHRpbV9wZXJpb2QgPSB0aW1faWUtPmR0aW1fcGVyaW9kOwogCX0KIAotCS8qIHNldCBkZWZhdWx0IHZhbHVlIGZvciBidWdneSBBUC9ubyBUSU0gZWxlbWVudCAqLwotCWlmIChic3MtPmR0aW1fcGVyaW9kID09IDApCi0JCWJzcy0+ZHRpbV9wZXJpb2QgPSAxOwotCiAJYnNzLT5zdXBwX3JhdGVzX2xlbiA9IDA7CiAJaWYgKGVsZW1zLT5zdXBwX3JhdGVzKSB7CiAJCWNsZW4gPSBJRUVFODAyMTFfTUFYX1NVUFBfUkFURVMgLSBic3MtPnN1cHBfcmF0ZXNfbGVuOwpAQCAtMTExLDYgKzEzMCw3IEBACiAJfQogCiAJYnNzLT53bW1fdXNlZCA9IGVsZW1zLT53bW1fcGFyYW0gfHwgZWxlbXMtPndtbV9pbmZvOworCWJzcy0+dWFwc2Rfc3VwcG9ydGVkID0gaXNfdWFwc2Rfc3VwcG9ydGVkKGVsZW1zKTsKIAogCWlmICghYmVhY29uKQogCQlic3MtPmxhc3RfcHJvYmVfcmVzcCA9IGppZmZpZXM7CkBAIC0xNDcsNyArMTY3LDcgQEAKIAlwcmVzcCA9IGllZWU4MDIxMV9pc19wcm9iZV9yZXNwKGZjKTsKIAlpZiAocHJlc3ApIHsKIAkJLyogaWdub3JlIFByb2JlUmVzcCB0byBmb3JlaWduIGFkZHJlc3MgKi8KLQkJaWYgKG1lbWNtcChtZ210LT5kYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKSkKKwkJaWYgKG1lbWNtcChtZ210LT5kYSwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTikpCiAJCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOwogCiAJCXByZXNwID0gdHJ1ZTsKQEAgLTIyMCw4MiArMjQwLDkgQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyoKLSAqIGluZm9ybSBBUCB0aGF0IHdlIHdpbGwgZ28gdG8gc2xlZXAgc28gdGhhdCBpdCB3aWxsIGJ1ZmZlciB0aGUgZnJhbWVzCi0gKiB3aGlsZSB3ZSBzY2FuCi0gKi8KLXN0YXRpYyB2b2lkIGllZWU4MDIxMV9zY2FuX3BzX2VuYWJsZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQotCWxvY2FsLT5zY2FuX3BzX2VuYWJsZWQgPSBmYWxzZTsKLQotCS8qIEZJWE1FOiB3aGF0IHRvIGRvIHdoZW4gbG9jYWwtPnBzcG9sbGluZyBpcyB0cnVlPyAqLwotCi0JZGVsX3RpbWVyX3N5bmMoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyKTsKLQljYW5jZWxfd29ya19zeW5jKCZsb2NhbC0+ZHluYW1pY19wc19lbmFibGVfd29yayk7Ci0KLQlpZiAobG9jYWwtPmh3LmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfQ09ORl9QUykgewotCQlsb2NhbC0+c2Nhbl9wc19lbmFibGVkID0gdHJ1ZTsKLQkJbG9jYWwtPmh3LmNvbmYuZmxhZ3MgJj0gfklFRUU4MDIxMV9DT05GX1BTOwotCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfUFMpOwotCX0KLQotCWlmICghKGxvY2FsLT5zY2FuX3BzX2VuYWJsZWQpIHx8Ci0JICAgICEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLKSkKLQkJLyoKLQkJICogSWYgcG93ZXIgc2F2ZSB3YXMgZW5hYmxlZCwgbm8gbmVlZCB0byBzZW5kIGEgbnVsbGZ1bmMKLQkJICogZnJhbWUgYmVjYXVzZSBBUCBrbm93cyB0aGF0IHdlIGFyZSBzbGVlcGluZy4gQnV0IGlmIHRoZQotCQkgKiBoYXJkd2FyZSBpcyBjcmVhdGluZyB0aGUgbnVsbGZ1bmMgZnJhbWUgZm9yIHBvd2VyIHNhdmUKLQkJICogc3RhdHVzIChpZS4gSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIGlzIG5vdAotCQkgKiBlbmFibGVkKSBhbmQgcG93ZXIgc2F2ZSB3YXMgZW5hYmxlZCwgdGhlIGZpcm13YXJlIGp1c3QKLQkJICogc2VudCBhIG51bGwgZnJhbWUgd2l0aCBwb3dlciBzYXZlIGRpc2FibGVkLiBTbyB3ZSBuZWVkCi0JCSAqIHRvIHNlbmQgYSBuZXcgbnVsbGZ1bmMgZnJhbWUgdG8gaW5mb3JtIHRoZSBBUCB0aGF0IHdlCi0JCSAqIGFyZSBhZ2FpbiBzbGVlcGluZy4KLQkJICovCi0JCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMSk7Ci19Ci0KLS8qIGluZm9ybSBBUCB0aGF0IHdlIGFyZSBhd2FrZSBhZ2FpbiwgdW5sZXNzIHBvd2VyIHNhdmUgaXMgZW5hYmxlZCAqLwotc3RhdGljIHZvaWQgaWVlZTgwMjExX3NjYW5fcHNfZGlzYWJsZShzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKLQotCWlmICghbG9jYWwtPnBzX3NkYXRhKQotCQlpZWVlODAyMTFfc2VuZF9udWxsZnVuYyhsb2NhbCwgc2RhdGEsIDApOwotCWVsc2UgaWYgKGxvY2FsLT5zY2FuX3BzX2VuYWJsZWQpIHsKLQkJLyoKLQkJICogSW4gIUlFRUU4MDIxMV9IV19QU19OVUxMRlVOQ19TVEFDSyBjYXNlIHRoZSBoYXJkd2FyZQotCQkgKiB3aWxsIHNlbmQgYSBudWxsZnVuYyBmcmFtZSB3aXRoIHRoZSBwb3dlcnNhdmUgYml0IHNldAotCQkgKiBldmVuIHRob3VnaCB0aGUgQVAgYWxyZWFkeSBrbm93cyB0aGF0IHdlIGFyZSBzbGVlcGluZy4KLQkJICogVGhpcyBjb3VsZCBiZSBhdm9pZGVkIGJ5IHNlbmRpbmcgYSBudWxsIGZyYW1lIHdpdGggcG93ZXIKLQkJICogc2F2ZSBiaXQgZGlzYWJsZWQgYmVmb3JlIGVuYWJsaW5nIHRoZSBwb3dlciBzYXZlLCBidXQKLQkJICogdGhpcyBkb2Vzbid0IGdhaW4gYW55dGhpbmcuCi0JCSAqCi0JCSAqIFdoZW4gSUVFRTgwMjExX0hXX1BTX05VTExGVU5DX1NUQUNLIGlzIGVuYWJsZWQsIG5vIG5lZWQKLQkJICogdG8gc2VuZCBhIG51bGxmdW5jIGZyYW1lIGJlY2F1c2UgQVAgYWxyZWFkeSBrbm93cyB0aGF0Ci0JCSAqIHdlIGFyZSBzbGVlcGluZywgbGV0J3MganVzdCBlbmFibGUgcG93ZXIgc2F2ZSBtb2RlIGluCi0JCSAqIGhhcmR3YXJlLgotCQkgKi8KLQkJbG9jYWwtPmh3LmNvbmYuZmxhZ3MgfD0gSUVFRTgwMjExX0NPTkZfUFM7Ci0JCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIElFRUU4MDIxMV9DT05GX0NIQU5HRV9QUyk7Ci0JfSBlbHNlIGlmIChsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQgPiAwKSB7Ci0JCS8qCi0JCSAqIElmIElFRUU4MDIxMV9DT05GX1BTIHdhcyBub3Qgc2V0IGFuZCB0aGUgZHluYW1pY19wc190aW1lcgotCQkgKiBoYWQgYmVlbiBydW5uaW5nIGJlZm9yZSBsZWF2aW5nIHRoZSBvcGVyYXRpbmcgY2hhbm5lbCwKLQkJICogcmVzdGFydCB0aGUgdGltZXIgbm93IGFuZCBzZW5kIGEgbnVsbGZ1bmMgZnJhbWUgdG8gaW5mb3JtCi0JCSAqIHRoZSBBUCB0aGF0IHdlIGFyZSBhd2FrZS4KLQkJICovCi0JCWllZWU4MDIxMV9zZW5kX251bGxmdW5jKGxvY2FsLCBzZGF0YSwgMCk7Ci0JCW1vZF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsIGppZmZpZXMgKwotCQkJICBtc2Vjc190b19qaWZmaWVzKGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCkpOwotCX0KLX0KLQogdm9pZCBpZWVlODAyMTFfc2Nhbl9jb21wbGV0ZWQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIGJvb2wgYWJvcnRlZCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IGh3X3RvX2xvY2FsKGh3KTsKLQlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKIAlib29sIHdhc19od19zY2FuOwogCiAJbXV0ZXhfbG9jaygmbG9jYWwtPnNjYW5fbXR4KTsKQEAgLTM0NCw0MSArMjkxLDE5IEBACiAKIAlkcnZfc3dfc2Nhbl9jb21wbGV0ZShsb2NhbCk7CiAKLQltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7Ci0JCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIFRlbGwgQVAgd2UncmUgYmFjayAqLwotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJCWlmIChzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZCkgewotCQkJCWllZWU4MDIxMV9zY2FuX3BzX2Rpc2FibGUoc2RhdGEpOwotCQkJCW5ldGlmX3R4X3dha2VfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKLQkJCX0KLQkJfSBlbHNlCi0JCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7Ci0KLQkJLyogcmUtZW5hYmxlIGJlYWNvbmluZyAqLwotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQIHx8Ci0JCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQURIT0MgfHwKLQkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKQotCQkJaWVlZTgwMjExX2Jzc19pbmZvX2NoYW5nZV9ub3RpZnkoCi0JCQkJc2RhdGEsIEJTU19DSEFOR0VEX0JFQUNPTl9FTkFCTEVEKTsKLQl9Ci0JbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CisJaWVlZTgwMjExX29mZmNoYW5uZWxfcmV0dXJuKGxvY2FsLCB0cnVlKTsKIAogIGRvbmU6CiAJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKIAlpZWVlODAyMTFfbWxtZV9ub3RpZnlfc2Nhbl9jb21wbGV0ZWQobG9jYWwpOwogCWllZWU4MDIxMV9pYnNzX25vdGlmeV9zY2FuX2NvbXBsZXRlZChsb2NhbCk7CiAJaWVlZTgwMjExX21lc2hfbm90aWZ5X3NjYW5fY29tcGxldGVkKGxvY2FsKTsKKwlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmbG9jYWwtPndvcmtfd29yayk7CiB9CiBFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9zY2FuX2NvbXBsZXRlZCk7CiAKIHN0YXRpYyBpbnQgaWVlZTgwMjExX3N0YXJ0X3N3X3NjYW4oc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7Ci0Jc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGE7Ci0KIAkvKgogCSAqIEhhcmR3YXJlL2RyaXZlciBkb2Vzbid0IHN1cHBvcnQgaHdfc2Nhbiwgc28gdXNlIHNvZnR3YXJlCiAJICogc2Nhbm5pbmcgaW5zdGVhZC4gRmlyc3Qgc2VuZCBhIG51bGxmdW5jIGZyYW1lIHdpdGggcG93ZXIgc2F2ZQpAQCAtMzk0LDMzICszMTksMTUgQEAKIAkgKi8KIAlkcnZfc3dfc2Nhbl9zdGFydChsb2NhbCk7CiAKLQltdXRleF9sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7Ci0JCWlmICghbmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIGRpc2FibGUgYmVhY29uaW5nICovCi0JCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVAgfHwKLQkJICAgIHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQyB8fAotCQkgICAgc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQpCi0JCQlpZWVlODAyMTFfYnNzX2luZm9fY2hhbmdlX25vdGlmeSgKLQkJCQlzZGF0YSwgQlNTX0NIQU5HRURfQkVBQ09OX0VOQUJMRUQpOwotCi0JCS8qCi0JCSAqIG9ubHkgaGFuZGxlIG5vbi1TVEEgaW50ZXJmYWNlcyBoZXJlLCBTVEEgaW50ZXJmYWNlcwotCQkgKiBhcmUgaGFuZGxlZCBpbiB0aGUgc2NhbiBzdGF0ZSBtYWNoaW5lCi0JCSAqLwotCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pCi0JCQluZXRpZl90eF9zdG9wX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7Ci0JfQotCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCWllZWU4MDIxMV9vZmZjaGFubmVsX3N0b3BfYmVhY29uaW5nKGxvY2FsKTsKIAogCWxvY2FsLT5uZXh0X3NjYW5fc3RhdGUgPSBTQ0FOX0RFQ0lTSU9OOwogCWxvY2FsLT5zY2FuX2NoYW5uZWxfaWR4ID0gMDsKIAorCWRydl9mbHVzaChsb2NhbCwgZmFsc2UpOworCiAJaWVlZTgwMjExX2NvbmZpZ3VyZV9maWx0ZXIobG9jYWwpOwogCi0JLyogVE9ETzogc3RhcnQgc2NhbiBhcyBzb29uIGFzIGFsbCBudWxsZnVuYyBmcmFtZXMgYXJlIEFDS2VkICovCiAJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yaygmbG9jYWwtPmh3LAogCQkJCSAgICAgJmxvY2FsLT5zY2FuX3dvcmssCiAJCQkJICAgICBJRUVFODAyMTFfQ0hBTk5FTF9USU1FKTsKQEAgLTQzMywxNyArMzQwLDEzIEBACiAJCQkJICBzdHJ1Y3QgY2ZnODAyMTFfc2Nhbl9yZXF1ZXN0ICpyZXEpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7Ci0Jc3RydWN0IGllZWU4MDIxMV9pZl9tYW5hZ2VkICppZm1nZCA9ICZzZGF0YS0+dS5tZ2Q7CiAJaW50IHJjOwogCiAJaWYgKGxvY2FsLT5zY2FuX3JlcSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCWlmIChyZXEgIT0gbG9jYWwtPmludF9zY2FuX3JlcSAmJgotCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgotCSAgICAhbGlzdF9lbXB0eSgmaWZtZ2QtPndvcmtfbGlzdCkpIHsKLQkJLyogYWN0dWFsbHkgd2FpdCBmb3IgdGhlIHdvcmsgaXQncyBkb2luZyB0byBmaW5pc2gvdGltZSBvdXQgKi8KLQkJc2V0X2JpdChJRUVFODAyMTFfU1RBX1JFUV9TQ0FOLCAmaWZtZ2QtPnJlcXVlc3QpOworCWlmICghbGlzdF9lbXB0eSgmbG9jYWwtPndvcmtfbGlzdCkpIHsKKwkJLyogd2FpdCBmb3IgdGhlIHdvcmsgdG8gZmluaXNoL3RpbWUgb3V0ICovCiAJCWxvY2FsLT5zY2FuX3JlcSA9IHJlcTsKIAkJbG9jYWwtPnNjYW5fc2RhdGEgPSBzZGF0YTsKIAkJcmV0dXJuIDA7CkBAIC00NjgsNiArMzcxLDE0IEBACiAJCWxvY2FsLT5od19zY2FuX3JlcS0+aWUgPSBpZXM7CiAKIAkJbG9jYWwtPmh3X3NjYW5fYmFuZCA9IDA7CisKKwkJLyoKKwkJICogQWZ0ZXIgYWxsb2NhdGluZyBsb2NhbC0+aHdfc2Nhbl9yZXEsIHdlIG11c3QKKwkJICogZ28gdGhyb3VnaCB1bnRpbCBpZWVlODAyMTFfcHJlcF9od19zY2FuKCksIHNvCisJCSAqIGFueXRoaW5nIHRoYXQgbWlnaHQgYmUgY2hhbmdlZCBoZXJlIGFuZCBsZWF2ZQorCQkgKiB0aGlzIGZ1bmN0aW9uIGVhcmx5IG11c3Qgbm90IGdvIGFmdGVyIHRoaXMKKwkJICogYWxsb2NhdGlvbi4KKwkJICovCiAJfQogCiAJbG9jYWwtPnNjYW5fcmVxID0gcmVxOwpAQCAtNDc3LDE1ICszODgsMTYgQEAKIAkJX19zZXRfYml0KFNDQU5fSFdfU0NBTk5JTkcsICZsb2NhbC0+c2Nhbm5pbmcpOwogCWVsc2UKIAkJX19zZXRfYml0KFNDQU5fU1dfU0NBTk5JTkcsICZsb2NhbC0+c2Nhbm5pbmcpOworCiAJLyoKIAkgKiBLaWNraW5nIG9mZiB0aGUgc2NhbiBuZWVkIG5vdCBiZSBwcm90ZWN0ZWQsCiAJICogb25seSB0aGUgc2NhbiB2YXJpYWJsZSBzdHVmZiwgc2luY2Ugbm93CiAJICogbG9jYWwtPnNjYW5fcmVxIGlzIGFzc2lnbmVkIGFuZCBvdGhlciBjYWxsZXJzCiAJICogd2lsbCBhYm9ydCB0aGVpciBzY2FuIGF0dGVtcHRzLgogCSAqCi0JICogVGhpcyBhdm9pZHMgZ2V0dGluZyBhIHNjYW5fbXR4IC0+IGlmbGlzdF9tdHgKLQkgKiBkZXBlbmRlbmN5LCBzbyB0aGF0IHRoZSBzY2FuIGNvbXBsZXRlZCBjYWxscwotCSAqIGhhdmUgbW9yZSBsb2NraW5nIGZyZWVkb20uCisJICogVGhpcyBhdm9pZHMgdG9vIG1hbnkgbG9ja2luZyBkZXBlbmRlbmNpZXMKKwkgKiBzbyB0aGF0IHRoZSBzY2FuIGNvbXBsZXRlZCBjYWxscyBoYXZlIG1vcmUKKwkgKiBsb2NraW5nIGZyZWVkb20uCiAJICovCiAKIAlpZWVlODAyMTFfcmVjYWxjX2lkbGUobG9jYWwpOwpAQCAtNTI4LDcgKzQ0MCw3IEBACiAJLyogY2hlY2sgaWYgYXQgbGVhc3Qgb25lIFNUQSBpbnRlcmZhY2UgaXMgYXNzb2NpYXRlZCAqLwogCW11dGV4X2xvY2soJmxvY2FsLT5pZmxpc3RfbXR4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKLQkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQlpZiAoIWllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKIAkJCWNvbnRpbnVlOwogCiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikgewpAQCAtNTY2LDU2ICs0NzgsMzUgQEAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zY2FuX3N0YXRlX2xlYXZlX29wZXJfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQkJCSAgICB1bnNpZ25lZCBsb25nICpuZXh0X2RlbGF5KQogewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCi0JLyoKLQkgKiBub3RpZnkgdGhlIEFQIGFib3V0IHVzIGxlYXZpbmcgdGhlIGNoYW5uZWwgYW5kIHN0b3AgYWxsIFNUQSBpbnRlcmZhY2VzCi0JICovCi0JbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCi0JCQljb250aW51ZTsKLQotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKLQkJCW5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhzZGF0YS0+ZGV2KTsKLQkJCWlmIChzZGF0YS0+dS5tZ2QuYXNzb2NpYXRlZCkKLQkJCQlpZWVlODAyMTFfc2Nhbl9wc19lbmFibGUoc2RhdGEpOwotCQl9Ci0JfQotCW11dGV4X3VubG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOworCWllZWU4MDIxMV9vZmZjaGFubmVsX3N0b3Bfc3RhdGlvbihsb2NhbCk7CiAKIAlfX3NldF9iaXQoU0NBTl9PRkZfQ0hBTk5FTCwgJmxvY2FsLT5zY2FubmluZyk7CiAKKwkvKgorCSAqIFdoYXQgaWYgdGhlIG51bGxmdW5jIGZyYW1lcyBkaWRuJ3QgYXJyaXZlPworCSAqLworCWRydl9mbHVzaChsb2NhbCwgZmFsc2UpOworCWlmIChsb2NhbC0+b3BzLT5mbHVzaCkKKwkJKm5leHRfZGVsYXkgPSAwOworCWVsc2UKKwkJKm5leHRfZGVsYXkgPSBIWiAvIDEwOworCiAJLyogYWR2YW5jZSB0byB0aGUgbmV4dCBjaGFubmVsIHRvIGJlIHNjYW5uZWQgKi8KLQkqbmV4dF9kZWxheSA9IEhaIC8gMTA7CiAJbG9jYWwtPm5leHRfc2Nhbl9zdGF0ZSA9IFNDQU5fU0VUX0NIQU5ORUw7CiB9CiAKIHN0YXRpYyB2b2lkIGllZWU4MDIxMV9zY2FuX3N0YXRlX2VudGVyX29wZXJfY2hhbm5lbChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKIAkJCQkJCSAgICB1bnNpZ25lZCBsb25nICpuZXh0X2RlbGF5KQogewotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gbG9jYWwtPnNjYW5fc2RhdGE7Ci0KIAkvKiBzd2l0Y2ggYmFjayB0byB0aGUgb3BlcmF0aW5nIGNoYW5uZWwgKi8KIAlsb2NhbC0+c2Nhbl9jaGFubmVsID0gTlVMTDsKIAlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCBJRUVFODAyMTFfQ09ORl9DSEFOR0VfQ0hBTk5FTCk7CiAKIAkvKgotCSAqIG5vdGlmeSB0aGUgQVAgYWJvdXQgdXMgYmVpbmcgYmFjayBhbmQgcmVzdGFydCBhbGwgU1RBIGludGVyZmFjZXMKKwkgKiBPbmx5IHJlLWVuYWJsZSBzdGF0aW9uIG1vZGUgaW50ZXJmYWNlIG5vdzsgYmVhY29uaW5nIHdpbGwgYmUKKwkgKiByZS1lbmFibGVkIG9uY2UgdGhlIGZ1bGwgc2NhbiBoYXMgYmVlbiBjb21wbGV0ZWQuCiAJICovCi0JbXV0ZXhfbG9jaygmbG9jYWwtPmlmbGlzdF9tdHgpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewotCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCi0JCQljb250aW51ZTsKLQotCQkvKiBUZWxsIEFQIHdlJ3JlIGJhY2sgKi8KLQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7Ci0JCQlpZiAoc2RhdGEtPnUubWdkLmFzc29jaWF0ZWQpCi0JCQkJaWVlZTgwMjExX3NjYW5fcHNfZGlzYWJsZShzZGF0YSk7Ci0JCQluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMoc2RhdGEtPmRldik7Ci0JCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZsb2NhbC0+aWZsaXN0X210eCk7CisJaWVlZTgwMjExX29mZmNoYW5uZWxfcmV0dXJuKGxvY2FsLCBmYWxzZSk7CiAKIAlfX2NsZWFyX2JpdChTQ0FOX09GRl9DSEFOTkVMLCAmbG9jYWwtPnNjYW5uaW5nKTsKIApAQCAtNzI5LDcgKzYyMCw3IEBACiAJLyoKIAkgKiBBdm9pZCByZS1zY2hlZHVsaW5nIHdoZW4gdGhlIHNkYXRhIGlzIGdvaW5nIGF3YXkuCiAJICovCi0JaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKSB7CisJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpIHsKIAkJaWVlZTgwMjExX3NjYW5fY29tcGxldGVkKCZsb2NhbC0+aHcsIHRydWUpOwogCQlyZXR1cm47CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3NwZWN0bWdtdC5jIGIvbmV0L21hYzgwMjExL3NwZWN0bWdtdC5jCmluZGV4IGFhNzQzYTguLjc3MzNmNjYgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zcGVjdG1nbXQuYworKysgYi9uZXQvbWFjODAyMTEvc3BlY3RtZ210LmMKQEAgLTM1LDcgKzM1LDcgQEAKIAogCWlmICghc2tiKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yICIKLQkJCQkibWVhc3VyZW1lbnQgcmVwb3J0IGZyYW1lXG4iLCBzZGF0YS0+ZGV2LT5uYW1lKTsKKwkJCQkibWVhc3VyZW1lbnQgcmVwb3J0IGZyYW1lXG4iLCBzZGF0YS0+bmFtZSk7CiAJCXJldHVybjsKIAl9CiAKQEAgLTQzLDcgKzQzLDcgQEAKIAltc3JfcmVwb3J0ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKXNrYl9wdXQoc2tiLCAyNCk7CiAJbWVtc2V0KG1zcl9yZXBvcnQsIDAsIDI0KTsKIAltZW1jcHkobXNyX3JlcG9ydC0+ZGEsIGRhLCBFVEhfQUxFTik7Ci0JbWVtY3B5KG1zcl9yZXBvcnQtPnNhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCW1lbWNweShtc3JfcmVwb3J0LT5zYSwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CiAJbWVtY3B5KG1zcl9yZXBvcnQtPmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pOwogCW1zcl9yZXBvcnQtPmZyYW1lX2NvbnRyb2wgPSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRlRZUEVfTUdNVCB8CiAJCQkJCQlJRUVFODAyMTFfU1RZUEVfQUNUSU9OKTsKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS9zdGFfaW5mby5jIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKaW5kZXggNzFmMzcwZC4uMjExYzQ3NSAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKKysrIGIvbmV0L21hYzgwMjExL3N0YV9pbmZvLmMKQEAgLTMyLDQ5ICszMiwzMyBAQAogICogZm9yIGZhc3RlciBsb29rdXAgYW5kIGEgbGlzdCBmb3IgaXRlcmF0aW9uLiBUaGV5IGFyZSBtYW5hZ2VkIHVzaW5nCiAgKiBSQ1UsIGkuZS4gYWNjZXNzIHRvIHRoZSBsaXN0IGFuZCBoYXNoIHRhYmxlIGlzIHByb3RlY3RlZCBieSBSQ1UuCiAgKgotICogVXBvbiBhbGxvY2F0aW5nIGEgU1RBIGluZm8gc3RydWN0dXJlIHdpdGggc3RhX2luZm9fYWxsb2MoKSwgdGhlIGNhbGxlciBvd25zCi0gKiB0aGF0IHN0cnVjdHVyZS4gSXQgbXVzdCB0aGVuIGVpdGhlciBkZXN0cm95IGl0IHVzaW5nIHN0YV9pbmZvX2Rlc3Ryb3koKQotICogKHdoaWNoIGlzIHByZXR0eSB1c2VsZXNzKSBvciBpbnNlcnQgaXQgaW50byB0aGUgaGFzaCB0YWJsZSB1c2luZwotICogc3RhX2luZm9faW5zZXJ0KCkgd2hpY2ggZGVtb3RlcyB0aGUgcmVmZXJlbmNlIGZyb20gb3duZXJzaGlwIHRvIGEgcmVndWxhcgotICogUkNVLXByb3RlY3RlZCByZWZlcmVuY2U7IGlmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aG91dCBwcm90ZWN0aW9uIGJ5IGFuCi0gKiBSQ1UgY3JpdGljYWwgc2VjdGlvbiB0aGUgcmVmZXJlbmNlIGlzIGluc3RhbnRseSBpbnZhbGlkYXRlZC4gTm90ZSB0aGF0IHRoZQotICogY2FsbGVyIG1heSBub3QgZG8gbXVjaCB3aXRoIHRoZSBTVEEgaW5mbyBiZWZvcmUgaW5zZXJ0aW5nIGl0LCBpbiBwYXJ0aWN1bGFyLAotICogaXQgbWF5IG5vdCBzdGFydCBhbnkgbWVzaCBwZWVyIGxpbmsgbWFuYWdlbWVudCBvciBhZGQgZW5jcnlwdGlvbiBrZXlzLgorICogVXBvbiBhbGxvY2F0aW5nIGEgU1RBIGluZm8gc3RydWN0dXJlIHdpdGggc3RhX2luZm9fYWxsb2MoKSwgdGhlIGNhbGxlcgorICogb3ducyB0aGF0IHN0cnVjdHVyZS4gSXQgbXVzdCB0aGVuIGluc2VydCBpdCBpbnRvIHRoZSBoYXNoIHRhYmxlIHVzaW5nCisgKiBlaXRoZXIgc3RhX2luZm9faW5zZXJ0KCkgb3Igc3RhX2luZm9faW5zZXJ0X3JjdSgpOyBvbmx5IGluIHRoZSBsYXR0ZXIKKyAqIGNhc2UgKHdoaWNoIGFjcXVpcmVzIGFuIHJjdSByZWFkIHNlY3Rpb24gYnV0IG11c3Qgbm90IGJlIGNhbGxlZCBmcm9tCisgKiB3aXRoaW4gb25lKSB3aWxsIHRoZSBwb2ludGVyIHN0aWxsIGJlIHZhbGlkIGFmdGVyIHRoZSBjYWxsLiBOb3RlIHRoYXQKKyAqIHRoZSBjYWxsZXIgbWF5IG5vdCBkbyBtdWNoIHdpdGggdGhlIFNUQSBpbmZvIGJlZm9yZSBpbnNlcnRpbmcgaXQsIGluCisgKiBwYXJ0aWN1bGFyLCBpdCBtYXkgbm90IHN0YXJ0IGFueSBtZXNoIHBlZXIgbGluayBtYW5hZ2VtZW50IG9yIGFkZAorICogZW5jcnlwdGlvbiBrZXlzLgogICoKICAqIFdoZW4gdGhlIGluc2VydGlvbiBmYWlscyAoc3RhX2luZm9faW5zZXJ0KCkpIHJldHVybnMgbm9uLXplcm8pLCB0aGUKICAqIHN0cnVjdHVyZSB3aWxsIGhhdmUgYmVlbiBmcmVlZCBieSBzdGFfaW5mb19pbnNlcnQoKSEKICAqCi0gKiBzdGEgZW50cmllcyBhcmUgYWRkZWQgYnkgbWFjODAyMTEgd2hlbiB5b3UgZXN0YWJsaXNoIGEgbGluayB3aXRoIGEKKyAqIFN0YXRpb24gZW50cmllcyBhcmUgYWRkZWQgYnkgbWFjODAyMTEgd2hlbiB5b3UgZXN0YWJsaXNoIGEgbGluayB3aXRoIGEKICAqIHBlZXIuIFRoaXMgbWVhbnMgZGlmZmVyZW50IHRoaW5ncyBmb3IgdGhlIGRpZmZlcmVudCB0eXBlIG9mIGludGVyZmFjZXMKICAqIHdlIHN1cHBvcnQuIEZvciBhIHJlZ3VsYXIgc3RhdGlvbiB0aGlzIG1lYW4gd2UgYWRkIHRoZSBBUCBzdGEgd2hlbiB3ZQogICogcmVjZWl2ZSBhbiBhc3NvY2F0aW9uIHJlc3BvbnNlIGZyb20gdGhlIEFQLiBGb3IgSUJTUyB0aGlzIG9jY3VycyB3aGVuCi0gKiB3ZSByZWNlaXZlIGEgcHJvYmUgcmVzcG9uc2Ugb3IgYSBiZWFjb24gZnJvbSB0YXJnZXQgSUJTUyBuZXR3b3JrLiBGb3IKLSAqIFdEUyB3ZSBhZGQgdGhlIHN0YSBmb3IgdGhlIHBlZXIgaW1lZGlhdGVseSB1cG9uIGRldmljZSBvcGVuLiBXaGVuIHVzaW5nCi0gKiBBUCBtb2RlIHdlIGFkZCBzdGF0aW9ucyBmb3IgZWFjaCByZXNwZWN0aXZlIHN0YXRpb24gdXBvbiByZXF1ZXN0IGZyb20KLSAqIHVzZXJzcGFjZSB0aHJvdWdoIG5sODAyMTEuCisgKiBnZXQgdG8ga25vdyBhYm91dCBhIHBlZXIgb24gdGhlIHNhbWUgSUJTUy4gRm9yIFdEUyB3ZSBhZGQgdGhlIHN0YSBmb3IKKyAqIHRoZSBwZWVyIGltZWRpYXRlbHkgdXBvbiBkZXZpY2Ugb3Blbi4gV2hlbiB1c2luZyBBUCBtb2RlIHdlIGFkZCBzdGF0aW9ucworICogZm9yIGVhY2ggcmVzcGVjdGl2ZSBzdGF0aW9uIHVwb24gcmVxdWVzdCBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIG5sODAyMTEuCiAgKgotICogQmVjYXVzZSB0aGVyZSBhcmUgZGVidWdmcyBlbnRyaWVzIGZvciBlYWNoIHN0YXRpb24sIGFuZCBhZGRpbmcgdGhvc2UKLSAqIG11c3QgYmUgYWJsZSB0byBzbGVlcCwgaXQgaXMgYWxzbyBwb3NzaWJsZSB0byAicGluIiBhIHN0YXRpb24gZW50cnksCi0gKiB0aGF0IG1lYW5zIGl0IGNhbiBiZSByZW1vdmVkIGZyb20gdGhlIGhhc2ggdGFibGUgYnV0IG5vdCBiZSBmcmVlZC4KLSAqIFNlZSB0aGUgY29tbWVudCBpbiBfX3N0YV9pbmZvX3VubGluaygpIGZvciBtb3JlIGluZm9ybWF0aW9uLCB0aGlzIGlzCi0gKiBhbiBpbnRlcm5hbCBjYXBhYmlsaXR5IG9ubHkuCisgKiBJbiBvcmRlciB0byByZW1vdmUgYSBTVEEgaW5mbyBzdHJ1Y3R1cmUsIHZhcmlvdXMgc3RhX2luZm9fZGVzdHJveV8qKCkKKyAqIGNhbGxzIGFyZSBhdmFpbGFibGUuCiAgKgotICogSW4gb3JkZXIgdG8gcmVtb3ZlIGEgU1RBIGluZm8gc3RydWN0dXJlLCB0aGUgY2FsbGVyIG5lZWRzIHRvIGZpcnN0Ci0gKiB1bmxpbmsgaXQgKHN0YV9pbmZvX3VubGluaygpKSBmcm9tIHRoZSBsaXN0IGFuZCBoYXNoIHRhYmxlcyBhbmQKLSAqIHRoZW4gZGVzdHJveSBpdDsgc3RhX2luZm9fZGVzdHJveSgpIHdpbGwgd2FpdCBmb3IgYW4gUkNVIGdyYWNlIHBlcmlvZAotICogdG8gZWxhcHNlIGJlZm9yZSBhY3R1YWxseSBmcmVlaW5nIGl0LiBEdWUgdG8gdGhlIHBpbm5pbmcgYW5kIHRoZQotICogcG9zc2liaWxpdHkgb2YgbXVsdGlwbGUgY2FsbGVycyB0cnlpbmcgdG8gcmVtb3ZlIHRoZSBzYW1lIFNUQSBpbmZvIGF0Ci0gKiB0aGUgc2FtZSB0aW1lLCBzdGFfaW5mb191bmxpbmsoKSBjYW4gY2xlYXIgdGhlIFNUQSBpbmZvIHBvaW50ZXIgaXQgaXMKLSAqIHBhc3NlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBTVEEgaW5mbyBpcyBvd25lZCBieSBzb21lYm9keSBlbHNlIG5vdy4KLSAqCi0gKiBJZiBzdGFfaW5mb191bmxpbmsoKSBkaWQgbm90IGNsZWFyIHRoZSBwb2ludGVyIHRoZW4gdGhlIGNhbGxlciBvd25zCi0gKiB0aGUgU1RBIGluZm8gc3RydWN0dXJlIG5vdyBhbmQgaXMgcmVzcG9uc2libGUgb2YgZGVzdHJveWluZyBpdCB3aXRoCi0gKiBhIGNhbGwgdG8gc3RhX2luZm9fZGVzdHJveSgpLgotICoKLSAqIEluIGFsbCBvdGhlciBjYXNlcywgdGhlcmUgaXMgbm8gY29uY2VwdCBvZiBvd25lcnNoaXAgb24gYSBTVEEgZW50cnksCi0gKiBlYWNoIHN0cnVjdHVyZSBpcyBvd25lZCBieSB0aGUgZ2xvYmFsIGhhc2ggdGFibGUvbGlzdCB1bnRpbCBpdCBpcwotICogcmVtb3ZlZC4gQWxsIHVzZXJzIG9mIHRoZSBzdHJ1Y3R1cmUgbmVlZCB0byBiZSBSQ1UgcHJvdGVjdGVkIHNvIHRoYXQKLSAqIHRoZSBzdHJ1Y3R1cmUgd29uJ3QgYmUgZnJlZWQgYmVmb3JlIHRoZXkgYXJlIGRvbmUgdXNpbmcgaXQuCisgKiBUaGVyZSBpcyBubyBjb25jZXB0IG9mIG93bmVyc2hpcCBvbiBhIFNUQSBlbnRyeSwgZWFjaCBzdHJ1Y3R1cmUgaXMKKyAqIG93bmVkIGJ5IHRoZSBnbG9iYWwgaGFzaCB0YWJsZS9saXN0IHVudGlsIGl0IGlzIHJlbW92ZWQuIEFsbCB1c2VycyBvZgorICogdGhlIHN0cnVjdHVyZSBuZWVkIHRvIGJlIFJDVSBwcm90ZWN0ZWQgc28gdGhhdCB0aGUgc3RydWN0dXJlIHdvbid0IGJlCisgKiBmcmVlZCBiZWZvcmUgdGhleSBhcmUgZG9uZSB1c2luZyBpdC4KICAqLwogCiAvKiBDYWxsZXIgbXVzdCBob2xkIGxvY2FsLT5zdGFfbG9jayAqLwpAQCAtMTAzLDEzICs4NywzNyBAQAogfQogCiAvKiBwcm90ZWN0ZWQgYnkgUkNVICovCi1zdHJ1Y3Qgc3RhX2luZm8gKnN0YV9pbmZvX2dldChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgY29uc3QgdTggKmFkZHIpCitzdHJ1Y3Qgc3RhX2luZm8gKnN0YV9pbmZvX2dldChzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgICAgIGNvbnN0IHU4ICphZGRyKQogeworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhOwogCiAJc3RhID0gcmN1X2RlcmVmZXJlbmNlKGxvY2FsLT5zdGFfaGFzaFtTVEFfSEFTSChhZGRyKV0pOwogCXdoaWxlIChzdGEpIHsKLQkJaWYgKG1lbWNtcChzdGEtPnN0YS5hZGRyLCBhZGRyLCBFVEhfQUxFTikgPT0gMCkKKwkJaWYgKHN0YS0+c2RhdGEgPT0gc2RhdGEgJiYKKwkJICAgIG1lbWNtcChzdGEtPnN0YS5hZGRyLCBhZGRyLCBFVEhfQUxFTikgPT0gMCkKKwkJCWJyZWFrOworCQlzdGEgPSByY3VfZGVyZWZlcmVuY2Uoc3RhLT5obmV4dCk7CisJfQorCXJldHVybiBzdGE7Cit9CisKKy8qCisgKiBHZXQgc3RhIGluZm8gZWl0aGVyIGZyb20gdGhlIHNwZWNpZmllZCBpbnRlcmZhY2UKKyAqIG9yIGZyb20gb25lIG9mIGl0cyB2bGFucworICovCitzdHJ1Y3Qgc3RhX2luZm8gKnN0YV9pbmZvX2dldF9ic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkJICBjb25zdCB1OCAqYWRkcikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKworCXN0YSA9IHJjdV9kZXJlZmVyZW5jZShsb2NhbC0+c3RhX2hhc2hbU1RBX0hBU0goYWRkcildKTsKKwl3aGlsZSAoc3RhKSB7CisJCWlmICgoc3RhLT5zZGF0YSA9PSBzZGF0YSB8fAorCQkgICAgIHN0YS0+c2RhdGEtPmJzcyA9PSBzZGF0YS0+YnNzKSAmJgorCQkgICAgbWVtY21wKHN0YS0+c3RhLmFkZHIsIGFkZHIsIEVUSF9BTEVOKSA9PSAwKQogCQkJYnJlYWs7CiAJCXN0YSA9IHJjdV9kZXJlZmVyZW5jZShzdGEtPmhuZXh0KTsKIAl9CkBAIC0xNjEsMTAxICsxNjksNiBAQAogCWtmcmVlKHN0YSk7CiB9CiAKLXZvaWQgc3RhX2luZm9fZGVzdHJveShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDsKLQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWludCBpOwotCi0JbWlnaHRfc2xlZXAoKTsKLQotCWlmICghc3RhKQotCQlyZXR1cm47Ci0KLQlsb2NhbCA9IHN0YS0+bG9jYWw7Ci0KLQljYW5jZWxfd29ya19zeW5jKCZzdGEtPmRydl91bmJsb2NrX3drKTsKLQotCXJhdGVfY29udHJvbF9yZW1vdmVfc3RhX2RlYnVnZnMoc3RhKTsKLQlpZWVlODAyMTFfc3RhX2RlYnVnZnNfcmVtb3ZlKHN0YSk7Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAotCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnN0YS0+c2RhdGEtPnZpZikpCi0JCW1lc2hfcGxpbmtfZGVhY3RpdmF0ZShzdGEpOwotI2VuZGlmCi0KLQkvKgotCSAqIFdlIGhhdmUgb25seSB1bmxpbmtlZCB0aGUga2V5LCBhbmQgYWN0dWFsbHkgZGVzdHJveWluZyBpdAotCSAqIG1heSBtZWFuIGl0IGlzIHJlbW92ZWQgZnJvbSBoYXJkd2FyZSB3aGljaCByZXF1aXJlcyB0aGF0Ci0JICogdGhlIGtleS0+c3RhIHBvaW50ZXIgaXMgc3RpbGwgdmFsaWQsIHNvIGZsdXNoIHRoZSBrZXkgdG9kbwotCSAqIGxpc3QgaGVyZS4KLQkgKgotCSAqIGllZWU4MDIxMV9rZXlfdG9kbygpIHdpbGwgc3luY2hyb25pemVfcmN1KCkgc28gYWZ0ZXIgdGhpcwotCSAqIG5vdGhpbmcgY2FuIHJlZmVyZW5jZSB0aGlzIHN0YSBzdHJ1Y3QgYW55IG1vcmUuCi0JICovCi0JaWVlZTgwMjExX2tleV90b2RvKCk7Ci0KLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAotCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnN0YS0+c2RhdGEtPnZpZikpCi0JCWRlbF90aW1lcl9zeW5jKCZzdGEtPnBsaW5rX3RpbWVyKTsKLSNlbmRpZgotCi0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmc3RhLT5wc190eF9idWYpKSAhPSBOVUxMKSB7Ci0JCWxvY2FsLT50b3RhbF9wc19idWZmZXJlZC0tOwotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCX0KLQotCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJnN0YS0+dHhfZmlsdGVyZWQpKSAhPSBOVUxMKQotCQlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwotCi0JZm9yIChpID0gMDsgaSA8ICBTVEFfVElEX05VTTsgaSsrKSB7Ci0JCXN0cnVjdCB0aWRfYW1wZHVfcnggKnRpZF9yeDsKLQkJc3RydWN0IHRpZF9hbXBkdV90eCAqdGlkX3R4OwotCi0JCXNwaW5fbG9ja19iaCgmc3RhLT5sb2NrKTsKLQkJdGlkX3J4ID0gc3RhLT5hbXBkdV9tbG1lLnRpZF9yeFtpXTsKLQkJLyogTWFrZSBzdXJlIHRpbWVyIHdvbid0IGZyZWUgdGhlIHRpZF9yeCBzdHJ1Y3QsIHNlZSBiZWxvdyAqLwotCQlpZiAodGlkX3J4KQotCQkJdGlkX3J4LT5zaHV0ZG93biA9IHRydWU7Ci0KLQkJc3Bpbl91bmxvY2tfYmgoJnN0YS0+bG9jayk7Ci0KLQkJLyoKLQkJICogT3V0c2lkZSBzcGlubG9jayAtIHNodXRkb3duIGlzIHRydWUgbm93IHNvIHRoYXQgdGhlIHRpbWVyCi0JCSAqIHdvbid0IGZyZWUgdGlkX3J4LCB3ZSBoYXZlIHRvIGRvIHRoYXQgbm93LiBDYW4ndCBsZXQgdGhlCi0JCSAqIHRpbWVyIGRvIGl0IGJlY2F1c2Ugd2UgaGF2ZSB0byBzeW5jIHRoZSB0aW1lciBvdXRzaWRlIHRoZQotCQkgKiBsb2NrIHRoYXQgaXQgdGFrZXMgaXRzZWxmLgotCQkgKi8KLQkJaWYgKHRpZF9yeCkgewotCQkJZGVsX3RpbWVyX3N5bmMoJnRpZF9yeC0+c2Vzc2lvbl90aW1lcik7Ci0JCQlrZnJlZSh0aWRfcngpOwotCQl9Ci0KLQkJLyoKLQkJICogTm8gbmVlZCB0byBkbyBzdWNoIGNvbXBsaWNhdGlvbnMgZm9yIFRYIGFnZyBzZXNzaW9ucywgdGhlCi0JCSAqIHBhdGggbGVhZGluZyB0byBmcmVlaW5nIHRoZSB0aWRfdHggc3RydWN0IGdvZXMgdmlhIGEgY2FsbAotCQkgKiBmcm9tIHRoZSBkcml2ZXIsIGFuZCB0aHVzIG5lZWRzIHRvIGxvb2sgdXAgdGhlIHN0YSBzdHJ1Y3QKLQkJICogYWdhaW4sIHdoaWNoIGNhbm5vdCBiZSBmb3VuZCB3aGVuIHdlIGdldCBoZXJlLiBIZW5jZSwgd2UKLQkJICoganVzdCBuZWVkIHRvIGRlbGV0ZSB0aGUgdGltZXIgYW5kIGZyZWUgdGhlIGFnZ3JlZ2F0aW9uCi0JCSAqIGluZm87IHdlIHdvbid0IGJlIHRlbGxpbmcgdGhlIHBlZXIgYWJvdXQgaXQgdGhlbiBidXQgdGhhdAotCQkgKiBkb2Vzbid0IG1hdHRlciBpZiB3ZSdyZSBub3QgdGFsa2luZyB0byBpdCBhZ2FpbiBhbnl3YXkuCi0JCSAqLwotCQl0aWRfdHggPSBzdGEtPmFtcGR1X21sbWUudGlkX3R4W2ldOwotCQlpZiAodGlkX3R4KSB7Ci0JCQlkZWxfdGltZXJfc3luYygmdGlkX3R4LT5hZGRiYV9yZXNwX3RpbWVyKTsKLQkJCS8qCi0JCQkgKiBTVEEgcmVtb3ZlZCB3aGlsZSBhZ2dyZWdhdGlvbiBzZXNzaW9uIGJlaW5nCi0JCQkgKiBzdGFydGVkPyBCaXQgb2RkLCBidXQgcHVyZ2UgZnJhbWVzIGFueXdheS4KLQkJCSAqLwotCQkJc2tiX3F1ZXVlX3B1cmdlKCZ0aWRfdHgtPnBlbmRpbmcpOwotCQkJa2ZyZWUodGlkX3R4KTsKLQkJfQotCX0KLQotCV9fc3RhX2luZm9fZnJlZShsb2NhbCwgc3RhKTsKLX0KLQotCiAvKiBDYWxsZXIgbXVzdCBob2xkIGxvY2FsLT5zdGFfbG9jayAqLwogc3RhdGljIHZvaWQgc3RhX2luZm9faGFzaF9hZGQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCiAJCQkgICAgICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKQEAgLTM1Miw3ICsyNjUsOTMgQEAKIAlyZXR1cm4gc3RhOwogfQogCi1pbnQgc3RhX2luZm9faW5zZXJ0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKQorc3RhdGljIGludCBzdGFfaW5mb19maW5pc2hfaW5zZXJ0KHN0cnVjdCBzdGFfaW5mbyAqc3RhLCBib29sIGFzeW5jKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHN0YS0+c2RhdGE7CisJc3RydWN0IHN0YXRpb25faW5mbyBzaW5mbzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBlcnIgPSAwOworCisJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZsb2NhbC0+c3RhX210eCkpOworCisJLyogbm90aWZ5IGRyaXZlciAqLworCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKKwkJc2RhdGEgPSBjb250YWluZXJfb2Yoc2RhdGEtPmJzcywKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCisJCQkJICAgICB1LmFwKTsKKwllcnIgPSBkcnZfc3RhX2FkZChsb2NhbCwgc2RhdGEsICZzdGEtPnN0YSk7CisJaWYgKGVycikgeworCQlpZiAoIWFzeW5jKQorCQkJcmV0dXJuIGVycjsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWRkIElCU1MgU1RBICVwTSB0byBkcml2ZXIgKCVkKSIKKwkJCQkgICIgLSBrZWVwaW5nIGl0IGFueXdheS5cbiIsCisJCSAgICAgICBzZGF0YS0+bmFtZSwgc3RhLT5zdGEuYWRkciwgZXJyKTsKKwl9IGVsc2UgeworCQlzdGEtPnVwbG9hZGVkID0gdHJ1ZTsKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRworCQlpZiAoYXN5bmMpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEZpbmlzaGVkIGFkZGluZyBJQlNTIFNUQSAlcE1cbiIsCisJCQkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLCBzdGEtPnN0YS5hZGRyKTsKKyNlbmRpZgorCX0KKworCXNkYXRhID0gc3RhLT5zZGF0YTsKKworCWlmICghYXN5bmMpIHsKKwkJbG9jYWwtPm51bV9zdGErKzsKKwkJbG9jYWwtPnN0YV9nZW5lcmF0aW9uKys7CisJCXNtcF9tYigpOworCisJCS8qIG1ha2UgdGhlIHN0YXRpb24gdmlzaWJsZSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJCXN0YV9pbmZvX2hhc2hfYWRkKGxvY2FsLCBzdGEpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKwl9CisKKwlsaXN0X2FkZCgmc3RhLT5saXN0LCAmbG9jYWwtPnN0YV9saXN0KTsKKworCWllZWU4MDIxMV9zdGFfZGVidWdmc19hZGQoc3RhKTsKKwlyYXRlX2NvbnRyb2xfYWRkX3N0YV9kZWJ1Z2ZzKHN0YSk7CisKKwlzaW5mby5maWxsZWQgPSAwOworCXNpbmZvLmdlbmVyYXRpb24gPSBsb2NhbC0+c3RhX2dlbmVyYXRpb247CisJY2ZnODAyMTFfbmV3X3N0YShzZGF0YS0+ZGV2LCBzdGEtPnN0YS5hZGRyLCAmc2luZm8sIEdGUF9LRVJORUwpOworCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3RhX2luZm9fZmluaXNoX3BlbmRpbmcoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCit7CisJc3RydWN0IHN0YV9pbmZvICpzdGE7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJmxvY2FsLT5zdGFfcGVuZGluZ19saXN0KSkgeworCQlzdGEgPSBsaXN0X2ZpcnN0X2VudHJ5KCZsb2NhbC0+c3RhX3BlbmRpbmdfbGlzdCwKKwkJCQkgICAgICAgc3RydWN0IHN0YV9pbmZvLCBsaXN0KTsKKwkJbGlzdF9kZWwoJnN0YS0+bGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCisJCXN0YV9pbmZvX2ZpbmlzaF9pbnNlcnQoc3RhLCB0cnVlKTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgdm9pZCBzdGFfaW5mb19maW5pc2hfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9sb2NhbCwgc3RhX2ZpbmlzaF93b3JrKTsKKworCW11dGV4X2xvY2soJmxvY2FsLT5zdGFfbXR4KTsKKwlzdGFfaW5mb19maW5pc2hfcGVuZGluZyhsb2NhbCk7CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c3RhX210eCk7Cit9CisKK2ludCBzdGFfaW5mb19pbnNlcnRfcmN1KHN0cnVjdCBzdGFfaW5mbyAqc3RhKSBfX2FjcXVpcmVzKFJDVSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHN0YS0+bG9jYWw7CiAJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBzdGEtPnNkYXRhOwpAQCAtMzY0LDM4ICszNjMsODkgQEAKIAkgKiBzb21ldGhpbmcgaW5zZXJ0cyBhIFNUQSAob24gb25lIENQVSkgd2l0aG91dCBob2xkaW5nIHRoZSBSVE5MCiAJICogYW5kIGFub3RoZXIgQ1BVIHR1cm5zIG9mZiB0aGUgbmV0IGRldmljZS4KIAkgKi8KLQlpZiAodW5saWtlbHkoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpKSB7CisJaWYgKHVubGlrZWx5KCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpKSB7CiAJCWVyciA9IC1FTkVURE9XTjsKKwkJcmN1X3JlYWRfbG9jaygpOwogCQlnb3RvIG91dF9mcmVlOwogCX0KIAotCWlmIChXQVJOX09OKGNvbXBhcmVfZXRoZXJfYWRkcihzdGEtPnN0YS5hZGRyLCBzZGF0YS0+ZGV2LT5kZXZfYWRkcikgPT0gMCB8fAorCWlmIChXQVJOX09OKGNvbXBhcmVfZXRoZXJfYWRkcihzdGEtPnN0YS5hZGRyLCBzZGF0YS0+dmlmLmFkZHIpID09IDAgfHwKIAkJICAgIGlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHN0YS0+c3RhLmFkZHIpKSkgewogCQllcnIgPSAtRUlOVkFMOworCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWdvdG8gb3V0X2ZyZWU7CiAJfQogCisJLyoKKwkgKiBJbiBhZC1ob2MgbW9kZSwgd2Ugc29tZXRpbWVzIG5lZWQgdG8gaW5zZXJ0IHN0YXRpb25zCisJICogZnJvbSB0YXNrbGV0IGNvbnRleHQgZnJvbSB0aGUgUlggcGF0aC4gVG8gYXZvaWQgcmFjZXMsCisJICogYWx3YXlzIGRvIHNvIGluIHRoYXQgY2FzZSAtLSBzZWUgdGhlIGNvbW1lbnQgYmVsb3cuCisJICovCisJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BREhPQykgeworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJCS8qIGNoZWNrIGlmIFNUQSBleGlzdHMgYWxyZWFkeSAqLworCQlpZiAoc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgc3RhLT5zdGEuYWRkcikpIHsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCQkJcmN1X3JlYWRfbG9jaygpOworCQkJZXJyID0gLUVFWElTVDsKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCX0KKworCQlsb2NhbC0+bnVtX3N0YSsrOworCQlsb2NhbC0+c3RhX2dlbmVyYXRpb24rKzsKKwkJc21wX21iKCk7CisJCXN0YV9pbmZvX2hhc2hfYWRkKGxvY2FsLCBzdGEpOworCisJCWxpc3RfYWRkX3RhaWwoJnN0YS0+bGlzdCwgJmxvY2FsLT5zdGFfcGVuZGluZ19saXN0KTsKKworCQlyY3VfcmVhZF9sb2NrKCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBZGRlZCBJQlNTIFNUQSAlcE1cbiIsCisJCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksIHN0YS0+c3RhLmFkZHIpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHICovCisKKwkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmxvY2FsLT5zdGFfZmluaXNoX3dvcmspOworCisJCXJldHVybiAwOworCX0KKworCS8qCisJICogT24gZmlyc3QgZ2xhbmNlLCB0aGlzIHdpbGwgbG9vayByYWN5LCBiZWNhdXNlIHRoZSBjb2RlCisJICogYmVsb3cgdGhpcyBwb2ludCwgd2hpY2ggaW5zZXJ0cyBhIHN0YXRpb24gd2l0aCBzbGVlcGluZywKKwkgKiB1bmxvY2tzIHRoZSBzdGFfbG9jayBiZXR3ZWVuIGNoZWNraW5nIGV4aXN0ZW5jZSBpbiB0aGUKKwkgKiBoYXNoIHRhYmxlIGFuZCBpbnNlcnRpbmcgaW50byBpdC4KKwkgKgorCSAqIEhvd2V2ZXIsIGl0IGlzIG5vdCByYWN5IGFnYWluc3QgaXRzZWxmIGJlY2F1c2UgaXQga2VlcHMKKwkgKiB0aGUgbXV0ZXggbG9ja2VkLiBJdCBzdGlsbCBzZWVtcyB0byByYWNlIGFnYWluc3QgdGhlCisJICogYWJvdmUgY29kZSB0aGF0IGF0b21pY2FsbHkgaW5zZXJ0cyB0aGUgc3RhdGlvbi4uLiBUaGF0LAorCSAqIGhvd2V2ZXIsIGlzIG5vdCB0cnVlIGJlY2F1c2UgdGhlIGFib3ZlIGNvZGUgY2FuIG9ubHkKKwkgKiBiZSBpbnZva2VkIGZvciBJQlNTIGludGVyZmFjZXMsIGFuZCB0aGUgYmVsb3cgY29kZSB3aWxsCisJICogbm90IGJlIC0tIGFuZCB0aGUgdHdvIGRvIG5vdCByYWNlIGFnYWluc3QgZWFjaCBvdGhlciBhcworCSAqIHRoZSBoYXNoIHRhYmxlIGFsc28ga2V5cyBvZmYgdGhlIGludGVyZmFjZS4KKwkgKi8KKworCW1pZ2h0X3NsZWVwKCk7CisKKwltdXRleF9sb2NrKCZsb2NhbC0+c3RhX210eCk7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CiAJLyogY2hlY2sgaWYgU1RBIGV4aXN0cyBhbHJlYWR5ICovCi0JaWYgKHN0YV9pbmZvX2dldChsb2NhbCwgc3RhLT5zdGEuYWRkcikpIHsKKwlpZiAoc3RhX2luZm9fZ2V0X2JzcyhzZGF0YSwgc3RhLT5zdGEuYWRkcikpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJCXJjdV9yZWFkX2xvY2soKTsKIAkJZXJyID0gLUVFWElTVDsKIAkJZ290byBvdXRfZnJlZTsKIAl9Ci0JbGlzdF9hZGQoJnN0YS0+bGlzdCwgJmxvY2FsLT5zdGFfbGlzdCk7Ci0JbG9jYWwtPnN0YV9nZW5lcmF0aW9uKys7Ci0JbG9jYWwtPm51bV9zdGErKzsKLQlzdGFfaW5mb19oYXNoX2FkZChsb2NhbCwgc3RhKTsKIAotCS8qIG5vdGlmeSBkcml2ZXIgKi8KLQlpZiAobG9jYWwtPm9wcy0+c3RhX25vdGlmeSkgewotCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCi0JCQlzZGF0YSA9IGNvbnRhaW5lcl9vZihzZGF0YS0+YnNzLAotCQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCi0JCQkJCSAgICAgdS5hcCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CiAKLQkJZHJ2X3N0YV9ub3RpZnkobG9jYWwsICZzZGF0YS0+dmlmLCBTVEFfTk9USUZZX0FERCwgJnN0YS0+c3RhKTsKLQkJc2RhdGEgPSBzdGEtPnNkYXRhOworCWVyciA9IHN0YV9pbmZvX2ZpbmlzaF9pbnNlcnQoc3RhLCBmYWxzZSk7CisJaWYgKGVycikgeworCQltdXRleF91bmxvY2soJmxvY2FsLT5zdGFfbXR4KTsKKwkJcmN1X3JlYWRfbG9jaygpOworCQlnb3RvIG91dF9mcmVlOwogCX0KIAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCkBAIC00MDMsMTggKzQ1Myw5IEBACiAJICAgICAgIHdpcGh5X25hbWUobG9jYWwtPmh3LndpcGh5KSwgc3RhLT5zdGEuYWRkcik7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcgKi8KIAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOwotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKLQkvKgotCSAqIERlYnVnZnMgZW50cnkgYWRkaW5nIG1pZ2h0IHNsZWVwLCBzbyBzY2hlZHVsZSBwcm9jZXNzCi0JICogY29udGV4dCB0YXNrIGZvciBhZGRpbmcgZW50cnkgZm9yIFNUQXMgdGhhdCBkbyBub3QgeWV0Ci0JICogaGF2ZSBvbmUuCi0JICogTk9URTogZHVlIHRvIGF1dG8tZnJlZWluZyBzZW1hbnRpY3MgdGhpcyBtYXkgb25seSBiZSBkb25lCi0JICogICAgICAgaWYgdGhlIGluc2VydGlvbiBpcyBzdWNjZXNzZnVsIQotCSAqLwotCXNjaGVkdWxlX3dvcmsoJmxvY2FsLT5zdGFfZGVidWdmc19hZGQpOwotI2VuZGlmCisJLyogbW92ZSByZWZlcmVuY2UgdG8gcmN1LXByb3RlY3RlZCAqLworCXJjdV9yZWFkX2xvY2soKTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5zdGFfbXR4KTsKIAogCWlmIChpZWVlODAyMTFfdmlmX2lzX21lc2goJnNkYXRhLT52aWYpKQogCQltZXNoX2FjY2VwdF9wbGlua3NfdXBkYXRlKHNkYXRhKTsKQEAgLTQyNiw2ICs0NjcsMTUgQEAKIAlyZXR1cm4gZXJyOwogfQogCitpbnQgc3RhX2luZm9faW5zZXJ0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKQoreworCWludCBlcnIgPSBzdGFfaW5mb19pbnNlcnRfcmN1KHN0YSk7CisKKwlyY3VfcmVhZF91bmxvY2soKTsKKworCXJldHVybiBlcnI7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2Jzc190aW1fc2V0KHN0cnVjdCBpZWVlODAyMTFfaWZfYXAgKmJzcywgdTE2IGFpZCkKIHsKIAkvKgpAQCAtNDk0LDEwOCArNTQ0LDYgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdGEtPmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZCBfX3N0YV9pbmZvX3VubGluayhzdHJ1Y3Qgc3RhX2luZm8gKipzdGEpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSAoKnN0YSktPmxvY2FsOwotCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gKCpzdGEpLT5zZGF0YTsKLQkvKgotCSAqIHB1bGwgY2FsbGVyJ3MgcmVmZXJlbmNlIGlmIHdlJ3JlIGFscmVhZHkgZ29uZS4KLQkgKi8KLQlpZiAoc3RhX2luZm9faGFzaF9kZWwobG9jYWwsICpzdGEpKSB7Ci0JCSpzdGEgPSBOVUxMOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKCgqc3RhKS0+a2V5KSB7Ci0JCWllZWU4MDIxMV9rZXlfZnJlZSgoKnN0YSktPmtleSk7Ci0JCVdBUk5fT04oKCpzdGEpLT5rZXkpOwotCX0KLQotCWxpc3RfZGVsKCYoKnN0YSktPmxpc3QpOwotCSgqc3RhKS0+ZGVhZCA9IHRydWU7Ci0KLQlpZiAodGVzdF9hbmRfY2xlYXJfc3RhX2ZsYWdzKCpzdGEsCi0JCQkJV0xBTl9TVEFfUFNfU1RBIHwgV0xBTl9TVEFfUFNfRFJJVkVSKSkgewotCQlCVUdfT04oIXNkYXRhLT5ic3MpOwotCi0JCWF0b21pY19kZWMoJnNkYXRhLT5ic3MtPm51bV9zdGFfcHMpOwotCQlfX3N0YV9pbmZvX2NsZWFyX3RpbV9iaXQoc2RhdGEtPmJzcywgKnN0YSk7Ci0JfQotCi0JbG9jYWwtPm51bV9zdGEtLTsKLQlsb2NhbC0+c3RhX2dlbmVyYXRpb24rKzsKLQotCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKLQkJcmN1X2Fzc2lnbl9wb2ludGVyKHNkYXRhLT51LnZsYW4uc3RhLCBOVUxMKTsKLQotCWlmIChsb2NhbC0+b3BzLT5zdGFfbm90aWZ5KSB7Ci0JCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikKLQkJCXNkYXRhID0gY29udGFpbmVyX29mKHNkYXRhLT5ic3MsCi0JCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKLQkJCQkJICAgICB1LmFwKTsKLQotCQlkcnZfc3RhX25vdGlmeShsb2NhbCwgJnNkYXRhLT52aWYsIFNUQV9OT1RJRllfUkVNT1ZFLAotCQkJICAgICAgICYoKnN0YSktPnN0YSk7Ci0JCXNkYXRhID0gKCpzdGEpLT5zZGF0YTsKLQl9Ci0KLQlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzZGF0YS0+dmlmKSkgewotCQltZXNoX2FjY2VwdF9wbGlua3NfdXBkYXRlKHNkYXRhKTsKLSNpZmRlZiBDT05GSUdfTUFDODAyMTFfTUVTSAotCQlkZWxfdGltZXIoJigqc3RhKS0+cGxpbmtfdGltZXIpOwotI2VuZGlmCi0JfQotCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJlbW92ZWQgU1RBICVwTVxuIiwKLQkgICAgICAgd2lwaHlfbmFtZShsb2NhbC0+aHcud2lwaHkpLCAoKnN0YSktPnN0YS5hZGRyKTsKLSNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRyAqLwotCi0JLyoKLQkgKiBGaW5hbGx5LCBwdWxsIGNhbGxlcidzIHJlZmVyZW5jZSBpZiB0aGUgU1RBIGlzIHBpbm5lZCBieSB0aGUKLQkgKiB0YXNrIHRoYXQgaXMgYWRkaW5nIHRoZSBkZWJ1Z2ZzIGVudHJpZXMuIEluIHRoYXQgY2FzZSwgd2UKLQkgKiBsZWF2ZSB0aGUgU1RBICJ0byBiZSBmcmVlZCIuCi0JICoKLQkgKiBUaGUgcnVsZXMgYXJlIG5vdCB0cml2aWFsLCBidXQgbm90IHRvbyBjb21wbGV4IGVpdGhlcjoKLQkgKiAgKDEpIHBpbl9zdGF0dXMgaXMgb25seSBtb2RpZmllZCB1bmRlciB0aGUgc3RhX2xvY2sKLQkgKiAgKDIpIFNUQXMgbWF5IG9ubHkgYmUgcGlubmVkIHVuZGVyIHRoZSBSVE5MIHNvIHRoYXQKLQkgKglzdGFfaW5mb19mbHVzaCgpIGlzIGd1YXJhbnRlZWQgdG8gYWN0dWFsbHkgZGVzdHJveQotCSAqCWFsbCBTVEFzIHRoYXQgYXJlIGFjdGl2ZSBmb3IgYSBnaXZlbiBpbnRlcmZhY2UsIHRoaXMKLQkgKglpcyByZXF1aXJlZCBmb3IgY29ycmVjdG5lc3MgYmVjYXVzZSBvdGhlcndpc2Ugd2UKLQkgKgljb3VsZCBub3RpZnkgYSBkcml2ZXIgdGhhdCBhbiBpbnRlcmZhY2UgaXMgZ29pbmcKLQkgKglhd2F5IGFuZCBvbmx5IGFmdGVyIHRoYXQgKCEpIG5vdGlmeSBpdCBhYm91dCBhIFNUQQotCSAqCW9uIHRoYXQgaW50ZXJmYWNlIGdvaW5nIGF3YXkuCi0JICogICgzKSBzdGFfaW5mb19kZWJ1Z2ZzX2FkZF93b3JrKCkgd2lsbCBzZXQgdGhlIHN0YXR1cwotCSAqCXRvIFBJTk5FRCB3aGVuIGl0IGZvdW5kIGFuIGl0ZW0gdGhhdCBuZWVkcyBhIG5ldwotCSAqCWRlYnVnZnMgZGlyZWN0b3J5IGNyZWF0ZWQuIEluIHRoYXQgY2FzZSwgdGhhdCBpdGVtCi0JICoJbXVzdCBub3QgYmUgZnJlZWQgYWx0aG91Z2ggYWxsICpSQ1UqIHVzZXJzIGFyZSBkb25lCi0JICoJd2l0aCBpdC4gSGVuY2UsIHdlIHRlbGwgdGhlIGNhbGxlciBvZiBfdW5saW5rKCkKLQkgKgl0aGF0IHRoZSBpdGVtIGlzIGFscmVhZHkgZ29uZSAoYXMgY2FuIGhhcHBlbiB3aGVuCi0JICoJdHdvIHRhc2tzIHRyeSB0byB1bmxpbmsvZGVzdHJveSBhdCB0aGUgc2FtZSB0aW1lKQotCSAqICAoNCkgV2Ugc2V0IHRoZSBwaW5fc3RhdHVzIHRvIERFU1RST1kgaGVyZSB3aGVuIHdlCi0JICoJZmluZCBzdWNoIGFuIGl0ZW0uCi0JICogICg1KSBzdGFfaW5mb19kZWJ1Z2ZzX2FkZF93b3JrKCkgd2lsbCByZXNldCB0aGUgcGluX3N0YXR1cwotCSAqCWZyb20gUElOTkVEIHRvIE5PUk1BTCB3aGVuIGl0IGlzIGRvbmUgd2l0aCB0aGUgaXRlbSwKLQkgKglidXQgd2lsbCBjaGVjayBmb3IgREVTVFJPWSBiZWZvcmUgcmVzZXR0aW5nIGl0IGluCi0JICoJd2hpY2ggY2FzZSBpdCB3aWxsIGZyZWUgdGhlIGl0ZW0uCi0JICovCi0JaWYgKCgqc3RhKS0+cGluX3N0YXR1cyA9PSBTVEFfSU5GT19QSU5fU1RBVF9QSU5ORUQpIHsKLQkJKCpzdGEpLT5waW5fc3RhdHVzID0gU1RBX0lORk9fUElOX1NUQVRfREVTVFJPWTsKLQkJKnN0YSA9IE5VTEw7Ci0JCXJldHVybjsKLQl9Ci19Ci0KLXZvaWQgc3RhX2luZm9fdW5saW5rKHN0cnVjdCBzdGFfaW5mbyAqKnN0YSkKLXsKLQlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9ICgqc3RhKS0+bG9jYWw7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKLQlfX3N0YV9pbmZvX3VubGluayhzdGEpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOwotfQotCiBzdGF0aWMgaW50IHN0YV9pbmZvX2J1ZmZlcl9leHBpcmVkKHN0cnVjdCBzdGFfaW5mbyAqc3RhLAogCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC02NTIsNiArNjAwLDE3OCBAQAogCX0KIH0KIAorc3RhdGljIGludCBfX211c3RfY2hlY2sgX19zdGFfaW5mb19kZXN0cm95KHN0cnVjdCBzdGFfaW5mbyAqc3RhKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXN0cnVjdCBza19idWZmICpza2I7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcmV0LCBpOworCisJbWlnaHRfc2xlZXAoKTsKKworCWlmICghc3RhKQorCQlyZXR1cm4gLUVOT0VOVDsKKworCWxvY2FsID0gc3RhLT5sb2NhbDsKKwlzZGF0YSA9IHN0YS0+c2RhdGE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJcmV0ID0gc3RhX2luZm9faGFzaF9kZWwobG9jYWwsIHN0YSk7CisJLyogdGhpcyBtaWdodCBzdGlsbCBiZSB0aGUgcGVuZGluZyBsaXN0IC4uLiB3aGljaCBpcyBmaW5lICovCisJaWYgKCFyZXQpCisJCWxpc3RfZGVsKCZzdGEtPmxpc3QpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwlpZiAoc3RhLT5rZXkpIHsKKwkJaWVlZTgwMjExX2tleV9mcmVlKHN0YS0+a2V5KTsKKwkJLyoKKwkJICogV2UgaGF2ZSBvbmx5IHVubGlua2VkIHRoZSBrZXksIGFuZCBhY3R1YWxseSBkZXN0cm95aW5nIGl0CisJCSAqIG1heSBtZWFuIGl0IGlzIHJlbW92ZWQgZnJvbSBoYXJkd2FyZSB3aGljaCByZXF1aXJlcyB0aGF0CisJCSAqIHRoZSBrZXktPnN0YSBwb2ludGVyIGlzIHN0aWxsIHZhbGlkLCBzbyBmbHVzaCB0aGUga2V5IHRvZG8KKwkJICogbGlzdCBoZXJlLgorCQkgKgorCQkgKiBpZWVlODAyMTFfa2V5X3RvZG8oKSB3aWxsIHN5bmNocm9uaXplX3JjdSgpIHNvIGFmdGVyIHRoaXMKKwkJICogbm90aGluZyBjYW4gcmVmZXJlbmNlIHRoaXMgc3RhIHN0cnVjdCBhbnkgbW9yZS4KKwkJICovCisJCWllZWU4MDIxMV9rZXlfdG9kbygpOworCisJCVdBUk5fT04oc3RhLT5rZXkpOworCX0KKworCXN0YS0+ZGVhZCA9IHRydWU7CisKKwlpZiAodGVzdF9hbmRfY2xlYXJfc3RhX2ZsYWdzKHN0YSwKKwkJCQlXTEFOX1NUQV9QU19TVEEgfCBXTEFOX1NUQV9QU19EUklWRVIpKSB7CisJCUJVR19PTighc2RhdGEtPmJzcyk7CisKKwkJYXRvbWljX2RlYygmc2RhdGEtPmJzcy0+bnVtX3N0YV9wcyk7CisJCV9fc3RhX2luZm9fY2xlYXJfdGltX2JpdChzZGF0YS0+YnNzLCBzdGEpOworCX0KKworCWxvY2FsLT5udW1fc3RhLS07CisJbG9jYWwtPnN0YV9nZW5lcmF0aW9uKys7CisKKwlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCXJjdV9hc3NpZ25fcG9pbnRlcihzZGF0YS0+dS52bGFuLnN0YSwgTlVMTCk7CisKKwlpZiAoc3RhLT51cGxvYWRlZCkgeworCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCQlzZGF0YSA9IGNvbnRhaW5lcl9vZihzZGF0YS0+YnNzLAorCQkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsCisJCQkJCSAgICAgdS5hcCk7CisJCWRydl9zdGFfcmVtb3ZlKGxvY2FsLCBzZGF0YSwgJnN0YS0+c3RhKTsKKwkJc2RhdGEgPSBzdGEtPnNkYXRhOworCX0KKworI2lmZGVmIENPTkZJR19NQUM4MDIxMV9NRVNICisJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc2RhdGEtPnZpZikpIHsKKwkJbWVzaF9hY2NlcHRfcGxpbmtzX3VwZGF0ZShzZGF0YSk7CisJCWRlbF90aW1lcigmc3RhLT5wbGlua190aW1lcik7CisJfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9ERUJVRworCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVtb3ZlZCBTVEEgJXBNXG4iLAorCSAgICAgICB3aXBoeV9uYW1lKGxvY2FsLT5ody53aXBoeSksIHN0YS0+c3RhLmFkZHIpOworI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHICovCisJY2FuY2VsX3dvcmtfc3luYygmc3RhLT5kcnZfdW5ibG9ja193ayk7CisKKwlyYXRlX2NvbnRyb2xfcmVtb3ZlX3N0YV9kZWJ1Z2ZzKHN0YSk7CisJaWVlZTgwMjExX3N0YV9kZWJ1Z2ZzX3JlbW92ZShzdGEpOworCisjaWZkZWYgQ09ORklHX01BQzgwMjExX01FU0gKKwlpZiAoaWVlZTgwMjExX3ZpZl9pc19tZXNoKCZzdGEtPnNkYXRhLT52aWYpKSB7CisJCW1lc2hfcGxpbmtfZGVhY3RpdmF0ZShzdGEpOworCQlkZWxfdGltZXJfc3luYygmc3RhLT5wbGlua190aW1lcik7CisJfQorI2VuZGlmCisKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZzdGEtPnBzX3R4X2J1ZikpICE9IE5VTEwpIHsKKwkJbG9jYWwtPnRvdGFsX3BzX2J1ZmZlcmVkLS07CisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisJfQorCisJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmc3RhLT50eF9maWx0ZXJlZCkpICE9IE5VTEwpCisJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CisKKwlmb3IgKGkgPSAwOyBpIDwgIFNUQV9USURfTlVNOyBpKyspIHsKKwkJc3RydWN0IHRpZF9hbXBkdV9yeCAqdGlkX3J4OworCQlzdHJ1Y3QgdGlkX2FtcGR1X3R4ICp0aWRfdHg7CisKKwkJc3Bpbl9sb2NrX2JoKCZzdGEtPmxvY2spOworCQl0aWRfcnggPSBzdGEtPmFtcGR1X21sbWUudGlkX3J4W2ldOworCQkvKiBNYWtlIHN1cmUgdGltZXIgd29uJ3QgZnJlZSB0aGUgdGlkX3J4IHN0cnVjdCwgc2VlIGJlbG93ICovCisJCWlmICh0aWRfcngpCisJCQl0aWRfcngtPnNodXRkb3duID0gdHJ1ZTsKKworCQlzcGluX3VubG9ja19iaCgmc3RhLT5sb2NrKTsKKworCQkvKgorCQkgKiBPdXRzaWRlIHNwaW5sb2NrIC0gc2h1dGRvd24gaXMgdHJ1ZSBub3cgc28gdGhhdCB0aGUgdGltZXIKKwkJICogd29uJ3QgZnJlZSB0aWRfcngsIHdlIGhhdmUgdG8gZG8gdGhhdCBub3cuIENhbid0IGxldCB0aGUKKwkJICogdGltZXIgZG8gaXQgYmVjYXVzZSB3ZSBoYXZlIHRvIHN5bmMgdGhlIHRpbWVyIG91dHNpZGUgdGhlCisJCSAqIGxvY2sgdGhhdCBpdCB0YWtlcyBpdHNlbGYuCisJCSAqLworCQlpZiAodGlkX3J4KSB7CisJCQlkZWxfdGltZXJfc3luYygmdGlkX3J4LT5zZXNzaW9uX3RpbWVyKTsKKwkJCWtmcmVlKHRpZF9yeCk7CisJCX0KKworCQkvKgorCQkgKiBObyBuZWVkIHRvIGRvIHN1Y2ggY29tcGxpY2F0aW9ucyBmb3IgVFggYWdnIHNlc3Npb25zLCB0aGUKKwkJICogcGF0aCBsZWFkaW5nIHRvIGZyZWVpbmcgdGhlIHRpZF90eCBzdHJ1Y3QgZ29lcyB2aWEgYSBjYWxsCisJCSAqIGZyb20gdGhlIGRyaXZlciwgYW5kIHRodXMgbmVlZHMgdG8gbG9vayB1cCB0aGUgc3RhIHN0cnVjdAorCQkgKiBhZ2Fpbiwgd2hpY2ggY2Fubm90IGJlIGZvdW5kIHdoZW4gd2UgZ2V0IGhlcmUuIEhlbmNlLCB3ZQorCQkgKiBqdXN0IG5lZWQgdG8gZGVsZXRlIHRoZSB0aW1lciBhbmQgZnJlZSB0aGUgYWdncmVnYXRpb24KKwkJICogaW5mbzsgd2Ugd29uJ3QgYmUgdGVsbGluZyB0aGUgcGVlciBhYm91dCBpdCB0aGVuIGJ1dCB0aGF0CisJCSAqIGRvZXNuJ3QgbWF0dGVyIGlmIHdlJ3JlIG5vdCB0YWxraW5nIHRvIGl0IGFnYWluIGFueXdheS4KKwkJICovCisJCXRpZF90eCA9IHN0YS0+YW1wZHVfbWxtZS50aWRfdHhbaV07CisJCWlmICh0aWRfdHgpIHsKKwkJCWRlbF90aW1lcl9zeW5jKCZ0aWRfdHgtPmFkZGJhX3Jlc3BfdGltZXIpOworCQkJLyoKKwkJCSAqIFNUQSByZW1vdmVkIHdoaWxlIGFnZ3JlZ2F0aW9uIHNlc3Npb24gYmVpbmcKKwkJCSAqIHN0YXJ0ZWQ/IEJpdCBvZGQsIGJ1dCBwdXJnZSBmcmFtZXMgYW55d2F5LgorCQkJICovCisJCQlza2JfcXVldWVfcHVyZ2UoJnRpZF90eC0+cGVuZGluZyk7CisJCQlrZnJlZSh0aWRfdHgpOworCQl9CisJfQorCisJX19zdGFfaW5mb19mcmVlKGxvY2FsLCBzdGEpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzdGFfaW5mb19kZXN0cm95X2FkZHIoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsIGNvbnN0IHU4ICphZGRyKQoreworCXN0cnVjdCBzdGFfaW5mbyAqc3RhOworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZzZGF0YS0+bG9jYWwtPnN0YV9tdHgpOworCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgYWRkcik7CisJcmV0ID0gX19zdGFfaW5mb19kZXN0cm95KHN0YSk7CisJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+bG9jYWwtPnN0YV9tdHgpOworCisJcmV0dXJuIHJldDsKK30KKworaW50IHN0YV9pbmZvX2Rlc3Ryb3lfYWRkcl9ic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICAgICBjb25zdCB1OCAqYWRkcikKK3sKKwlzdHJ1Y3Qgc3RhX2luZm8gKnN0YTsKKwlpbnQgcmV0OworCisJbXV0ZXhfbG9jaygmc2RhdGEtPmxvY2FsLT5zdGFfbXR4KTsKKwlzdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBhZGRyKTsKKwlyZXQgPSBfX3N0YV9pbmZvX2Rlc3Ryb3koc3RhKTsKKwltdXRleF91bmxvY2soJnNkYXRhLT5sb2NhbC0+c3RhX210eCk7CisKKwlyZXR1cm4gcmV0OworfQogCiBzdGF0aWMgdm9pZCBzdGFfaW5mb19jbGVhbnVwKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKQEAgLTY3MSw5MCArNzkxLDE4IEBACiAJYWRkX3RpbWVyKCZsb2NhbC0+c3RhX2NsZWFudXApOwogfQogCi0jaWZkZWYgQ09ORklHX01BQzgwMjExX0RFQlVHRlMKLS8qCi0gKiBTZWUgY29tbWVudCBpbiBfX3N0YV9pbmZvX3VubGluaywKLSAqIGNhbGxlciBtdXN0IGhvbGQgbG9jYWwtPnN0YV9sb2NrLgotICovCi1zdGF0aWMgdm9pZCBfX3N0YV9pbmZvX3BpbihzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkKLXsKLQlXQVJOX09OKHN0YS0+cGluX3N0YXR1cyAhPSBTVEFfSU5GT19QSU5fU1RBVF9OT1JNQUwpOwotCXN0YS0+cGluX3N0YXR1cyA9IFNUQV9JTkZPX1BJTl9TVEFUX1BJTk5FRDsKLX0KLQotLyoKLSAqIFNlZSBjb21tZW50IGluIF9fc3RhX2luZm9fdW5saW5rLCByZXR1cm5zIHN0YSBpZiBpdAotICogbmVlZHMgdG8gYmUgZGVzdHJveWVkLgotICovCi1zdGF0aWMgc3RydWN0IHN0YV9pbmZvICpfX3N0YV9pbmZvX3VucGluKHN0cnVjdCBzdGFfaW5mbyAqc3RhKQotewotCXN0cnVjdCBzdGFfaW5mbyAqcmV0ID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnN0YS0+bG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7Ci0JV0FSTl9PTihzdGEtPnBpbl9zdGF0dXMgIT0gU1RBX0lORk9fUElOX1NUQVRfREVTVFJPWSAmJgotCQlzdGEtPnBpbl9zdGF0dXMgIT0gU1RBX0lORk9fUElOX1NUQVRfUElOTkVEKTsKLQlpZiAoc3RhLT5waW5fc3RhdHVzID09IFNUQV9JTkZPX1BJTl9TVEFUX0RFU1RST1kpCi0JCXJldCA9IHN0YTsKLQlzdGEtPnBpbl9zdGF0dXMgPSBTVEFfSU5GT19QSU5fU1RBVF9OT1JNQUw7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc3RhLT5sb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHN0YV9pbmZvX2RlYnVnZnNfYWRkX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpZWVlODAyMTFfbG9jYWwsIHN0YV9kZWJ1Z2ZzX2FkZCk7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGEsICp0bXA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCS8qIFdlIG5lZWQgdG8ga2VlcCB0aGUgUlROTCBhY3Jvc3MgdGhlIHdob2xlIHBpbm5lZCBzdGF0dXMuICovCi0JcnRubF9sb2NrKCk7Ci0Jd2hpbGUgKDEpIHsKLQkJc3RhID0gTlVMTDsKLQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkodG1wLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7Ci0JCQkvKgotCQkJICogZGVidWdmcy5hZGRfaGFzX3J1biB3aWxsIGJlIHNldCBieQotCQkJICogaWVlZTgwMjExX3N0YV9kZWJ1Z2ZzX2FkZCByZWdhcmRsZXNzCi0JCQkgKiBvZiB3aGF0IGVsc2UgaXQgZG9lcy4KLQkJCSAqLwotCQkJaWYgKCF0bXAtPmRlYnVnZnMuYWRkX2hhc19ydW4pIHsKLQkJCQlzdGEgPSB0bXA7Ci0JCQkJX19zdGFfaW5mb19waW4oc3RhKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKLQotCQlpZiAoIXN0YSkKLQkJCWJyZWFrOwotCi0JCWllZWU4MDIxMV9zdGFfZGVidWdmc19hZGQoc3RhKTsKLQkJcmF0ZV9jb250cm9sX2FkZF9zdGFfZGVidWdmcyhzdGEpOwotCi0JCXN0YSA9IF9fc3RhX2luZm9fdW5waW4oc3RhKTsKLQkJc3RhX2luZm9fZGVzdHJveShzdGEpOwotCX0KLQlydG5sX3VubG9jaygpOwotfQotI2VuZGlmCi0KIHZvaWQgc3RhX2luZm9faW5pdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKIHsKIAlzcGluX2xvY2tfaW5pdCgmbG9jYWwtPnN0YV9sb2NrKTsKKwltdXRleF9pbml0KCZsb2NhbC0+c3RhX210eCk7CiAJSU5JVF9MSVNUX0hFQUQoJmxvY2FsLT5zdGFfbGlzdCk7CisJSU5JVF9MSVNUX0hFQUQoJmxvY2FsLT5zdGFfcGVuZGluZ19saXN0KTsKKwlJTklUX1dPUksoJmxvY2FsLT5zdGFfZmluaXNoX3dvcmssIHN0YV9pbmZvX2ZpbmlzaF93b3JrKTsKIAogCXNldHVwX3RpbWVyKCZsb2NhbC0+c3RhX2NsZWFudXAsIHN0YV9pbmZvX2NsZWFudXAsCiAJCSAgICAodW5zaWduZWQgbG9uZylsb2NhbCk7CiAJbG9jYWwtPnN0YV9jbGVhbnVwLmV4cGlyZXMgPQogCQlyb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBTVEFfSU5GT19DTEVBTlVQX0lOVEVSVkFMKTsKLQotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCi0JSU5JVF9XT1JLKCZsb2NhbC0+c3RhX2RlYnVnZnNfYWRkLCBzdGFfaW5mb19kZWJ1Z2ZzX2FkZF93b3JrKTsKLSNlbmRpZgogfQogCiBpbnQgc3RhX2luZm9fc3RhcnQoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCkBAIC03NjYsMTYgKzgxNCw2IEBACiB2b2lkIHN0YV9pbmZvX3N0b3Aoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CiAJZGVsX3RpbWVyKCZsb2NhbC0+c3RhX2NsZWFudXApOwotI2lmZGVmIENPTkZJR19NQUM4MDIxMV9ERUJVR0ZTCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhlIGRlYnVnZnMgYWRkaW5nIHdvcmsgaXNuJ3QgcGVuZGluZyBhZnRlciB0aGlzCi0JICogYmVjYXVzZSB3ZSdyZSBhYm91dCB0byBiZSBkZXN0cm95ZWQuIEl0IGRvZXNuJ3QgbWF0dGVyCi0JICogd2hldGhlciBpdCByYW4gb3Igbm90IHNpbmNlIHdlJ3JlIGdvaW5nIHRvIGZsdXNoIGFsbCBTVEFzCi0JICogYW55d2F5LgotCSAqLwotCWNhbmNlbF93b3JrX3N5bmMoJmxvY2FsLT5zdGFfZGVidWdmc19hZGQpOwotI2VuZGlmCi0KIAlzdGFfaW5mb19mbHVzaChsb2NhbCwgTlVMTCk7CiB9CiAKQEAgLTc5MSwyNiArODI5LDE5IEBACiAJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQogewogCXN0cnVjdCBzdGFfaW5mbyAqc3RhLCAqdG1wOwotCUxJU1RfSEVBRCh0bXBfbGlzdCk7CiAJaW50IHJldCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW1pZ2h0X3NsZWVwKCk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0YSwgdG1wLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7Ci0JCWlmICghc2RhdGEgfHwgc2RhdGEgPT0gc3RhLT5zZGF0YSkgewotCQkJX19zdGFfaW5mb191bmxpbmsoJnN0YSk7Ci0JCQlpZiAoc3RhKSB7Ci0JCQkJbGlzdF9hZGRfdGFpbCgmc3RhLT5saXN0LCAmdG1wX2xpc3QpOwotCQkJCXJldCsrOwotCQkJfQotCQl9Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOworCW11dGV4X2xvY2soJmxvY2FsLT5zdGFfbXR4KTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzdGEsIHRtcCwgJnRtcF9saXN0LCBsaXN0KQotCQlzdGFfaW5mb19kZXN0cm95KHN0YSk7CisJc3RhX2luZm9fZmluaXNoX3BlbmRpbmcobG9jYWwpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0YSwgdG1wLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7CisJCWlmICghc2RhdGEgfHwgc2RhdGEgPT0gc3RhLT5zZGF0YSkKKwkJCVdBUk5fT04oX19zdGFfaW5mb19kZXN0cm95KHN0YSkpOworCX0KKwltdXRleF91bmxvY2soJmxvY2FsLT5zdGFfbXR4KTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC04MjAsMzQgKzg1MSwyOCBAQAogewogCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOwogCXN0cnVjdCBzdGFfaW5mbyAqc3RhLCAqdG1wOwotCUxJU1RfSEVBRCh0bXBfbGlzdCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKwltdXRleF9sb2NrKCZsb2NhbC0+c3RhX210eCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0YSwgdG1wLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KQogCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBzdGEtPmxhc3RfcnggKyBleHBfdGltZSkpIHsKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfSUJTU19ERUJVRwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBleHBpcmluZyBpbmFjdGl2ZSBTVEEgJXBNXG4iLAotCQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHN0YS0+c3RhLmFkZHIpOworCQkJICAgICAgIHNkYXRhLT5uYW1lLCBzdGEtPnN0YS5hZGRyKTsKICNlbmRpZgotCQkJX19zdGFfaW5mb191bmxpbmsoJnN0YSk7Ci0JCQlpZiAoc3RhKQotCQkJCWxpc3RfYWRkKCZzdGEtPmxpc3QsICZ0bXBfbGlzdCk7CisJCQlXQVJOX09OKF9fc3RhX2luZm9fZGVzdHJveShzdGEpKTsKIAkJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN0YSwgdG1wLCAmdG1wX2xpc3QsIGxpc3QpCi0JCXN0YV9pbmZvX2Rlc3Ryb3koc3RhKTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5zdGFfbXR4KTsKIH0KIAogc3RydWN0IGllZWU4MDIxMV9zdGEgKmllZWU4MDIxMV9maW5kX3N0YV9ieV9odyhzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKIAkJCQkJICAgICAgIGNvbnN0IHU4ICphZGRyKQogewotCXN0cnVjdCBzdGFfaW5mbyAqc3RhID0gc3RhX2luZm9fZ2V0KGh3X3RvX2xvY2FsKGh3KSwgYWRkcik7CisJc3RydWN0IHN0YV9pbmZvICpzdGEsICpueHQ7CiAKLQlpZiAoIXN0YSkKLQkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuICZzdGEtPnN0YTsKKwkvKiBKdXN0IHJldHVybiBhIHJhbmRvbSBzdGF0aW9uIC4uLiBmaXJzdCBpbiBsaXN0IC4uLiAqLworCWZvcl9lYWNoX3N0YV9pbmZvKGh3X3RvX2xvY2FsKGh3KSwgYWRkciwgc3RhLCBueHQpCisJCXJldHVybiAmc3RhLT5zdGE7CisJcmV0dXJuIE5VTEw7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZWVlODAyMTFfZmluZF9zdGFfYnlfaHcpOwogCkBAIC04NzIsNyArODk3LDcgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKIAlpbnQgc2VudCwgYnVmZmVyZWQ7CiAKLQlkcnZfc3RhX25vdGlmeShsb2NhbCwgJnNkYXRhLT52aWYsIFNUQV9OT1RJRllfQVdBS0UsICZzdGEtPnN0YSk7CisJZHJ2X3N0YV9ub3RpZnkobG9jYWwsIHNkYXRhLCBTVEFfTk9USUZZX0FXQUtFLCAmc3RhLT5zdGEpOwogCiAJaWYgKCFza2JfcXVldWVfZW1wdHkoJnN0YS0+cHNfdHhfYnVmKSkKIAkJc3RhX2luZm9fY2xlYXJfdGltX2JpdChzdGEpOwpAQCAtODg1LDcgKzkxMCw3IEBACiAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRwogCXByaW50ayhLRVJOX0RFQlVHICIlczogU1RBICVwTSBhaWQgJWQgc2VuZGluZyAlZCBmaWx0ZXJlZC8lZCBQUyBmcmFtZXMgIgotCSAgICAgICAic2luY2UgU1RBIG5vdCBzbGVlcGluZyBhbnltb3JlXG4iLCBzZGF0YS0+ZGV2LT5uYW1lLAorCSAgICAgICAic2luY2UgU1RBIG5vdCBzbGVlcGluZyBhbnltb3JlXG4iLCBzZGF0YS0+bmFtZSwKIAkgICAgICAgc3RhLT5zdGEuYWRkciwgc3RhLT5zdGEuYWlkLCBzZW50IC0gYnVmZmVyZWQsIGJ1ZmZlcmVkKTsKICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRyAqLwogfQpAQCAtOTQ0LDcgKzk2OSw3IEBACiAJCSAqLwogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNUQSAlcE0gc2VudCBQUyBQb2xsIGV2ZW4gIgogCQkgICAgICAgInRob3VnaCB0aGVyZSBhcmUgbm8gYnVmZmVyZWQgZnJhbWVzIGZvciBpdFxuIiwKLQkJICAgICAgIHNkYXRhLT5kZXYtPm5hbWUsIHN0YS0+c3RhLmFkZHIpOworCQkgICAgICAgc2RhdGEtPm5hbWUsIHN0YS0+c3RhLmFkZHIpOwogI2VuZGlmIC8qIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX1BTX0RFQlVHICovCiAJfQogfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YV9pbmZvLmggYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaAppbmRleCBiNDgxMGY2Li44MjJkODQ1IDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvc3RhX2luZm8uaAorKysgYi9uZXQvbWFjODAyMTEvc3RhX2luZm8uaApAQCAtNDIsNiArNDIsOSBAQAogICoJYmUgaW4gdGhlIHF1ZXVlcwogICogQFdMQU5fU1RBX1BTUE9MTDogU3RhdGlvbiBzZW50IFBTLXBvbGwgd2hpbGUgZHJpdmVyIHdhcyBrZWVwaW5nCiAgKglzdGF0aW9uIGluIHBvd2VyLXNhdmUgbW9kZSwgcmVwbHkgd2hlbiB0aGUgZHJpdmVyIHVuYmxvY2tzLgorICogQFdMQU5fU1RBX0RJU0FTU09DOiBEaXNhc3NvY2lhdGlvbiBpbiBwcm9ncmVzcy4KKyAqCVRoaXMgaXMgdXNlZCB0byByZWplY3QgVFggQkEgc2Vzc2lvbiByZXF1ZXN0cyB3aGVuIGRpc2Fzc29jaWF0aW9uCisgKglpcyBpbiBwcm9ncmVzcy4KICAqLwogZW51bSBpZWVlODAyMTFfc3RhX2luZm9fZmxhZ3MgewogCVdMQU5fU1RBX0FVVEgJCT0gMTw8MCwKQEAgLTU3LDYgKzYwLDcgQEAKIAlXTEFOX1NUQV9TVVNQRU5ECT0gMTw8MTEsCiAJV0xBTl9TVEFfUFNfRFJJVkVSCT0gMTw8MTIsCiAJV0xBTl9TVEFfUFNQT0xMCQk9IDE8PDEzLAorCVdMQU5fU1RBX0RJU0FTU09DICAgICAgID0gMTw8MTQsCiB9OwogCiAjZGVmaW5lIFNUQV9USURfTlVNIDE2CkBAIC0xNjIsMTEgKzE2Niw2IEBACiB9OwogCiAKLS8qIHNlZSBfX3N0YV9pbmZvX3VubGluayAqLwotI2RlZmluZSBTVEFfSU5GT19QSU5fU1RBVF9OT1JNQUwJMAotI2RlZmluZSBTVEFfSU5GT19QSU5fU1RBVF9QSU5ORUQJMQotI2RlZmluZSBTVEFfSU5GT19QSU5fU1RBVF9ERVNUUk9ZCTIKLQogLyoqCiAgKiBzdHJ1Y3Qgc3RhX2luZm8gLSBTVEEgaW5mb3JtYXRpb24KICAqCkBAIC0xODcsNyArMTg2LDYgQEAKICAqIEBmbGFnbG9jazogc3BpbmxvY2sgZm9yIGZsYWdzIGFjY2Vzc2VzCiAgKiBAZHJ2X3VuYmxvY2tfd2s6IHVzZWQgZm9yIGRyaXZlciBQUyB1bmJsb2NraW5nCiAgKiBAbGlzdGVuX2ludGVydmFsOiBsaXN0ZW4gaW50ZXJ2YWwgb2YgdGhpcyBzdGF0aW9uLCB3aGVuIHdlJ3JlIGFjdGluZyBhcyBBUAotICogQHBpbl9zdGF0dXM6IHVzZWQgaW50ZXJuYWxseSBmb3IgcGlubmluZyBhIFNUQSBzdHJ1Y3QgaW50byBtZW1vcnkKICAqIEBmbGFnczogU1RBIGZsYWdzLCBzZWUgJmVudW0gaWVlZTgwMjExX3N0YV9pbmZvX2ZsYWdzCiAgKiBAcHNfdHhfYnVmOiBidWZmZXIgb2YgZnJhbWVzIHRvIHRyYW5zbWl0IHRvIHRoaXMgc3RhdGlvbgogICoJd2hlbiBpdCBsZWF2ZXMgcG93ZXIgc2F2aW5nIHN0YXRlCkBAIC0yMjYsNiArMjI0LDcgQEAKICAqIEBkZWJ1Z2ZzOiBkZWJ1ZyBmaWxlc3lzdGVtIGluZm8KICAqIEBzdGE6IHN0YXRpb24gaW5mb3JtYXRpb24gd2Ugc2hhcmUgd2l0aCB0aGUgZHJpdmVyCiAgKiBAZGVhZDogc2V0IHRvIHRydWUgd2hlbiBzdGEgaXMgdW5saW5rZWQKKyAqIEB1cGxvYWRlZDogc2V0IHRvIHRydWUgd2hlbiBzdGEgaXMgdXBsb2FkZWQgdG8gdGhlIGRyaXZlcgogICovCiBzdHJ1Y3Qgc3RhX2luZm8gewogCS8qIEdlbmVyYWwgaW5mb3JtYXRpb24sIG1vc3RseSBzdGF0aWMgKi8KQEAgLTI0NSwxMSArMjQ0LDcgQEAKIAogCWJvb2wgZGVhZDsKIAotCS8qCi0JICogZm9yIHVzZSBieSB0aGUgaW50ZXJuYWwgbGlmZXRpbWUgbWFuYWdlbWVudCwKLQkgKiBzZWUgX19zdGFfaW5mb191bmxpbmsKLQkgKi8KLQl1OCBwaW5fc3RhdHVzOworCWJvb2wgdXBsb2FkZWQ7CiAKIAkvKgogCSAqIGZyZXF1ZW50bHkgdXBkYXRlZCwgbG9ja2VkIHdpdGggb3duIHNwaW5sb2NrIChmbGFnbG9jayksCkBAIC00MDMsOSArMzk4LDM3IEBACiAjZGVmaW5lIFNUQV9JTkZPX0NMRUFOVVBfSU5URVJWQUwgKDEwICogSFopCiAKIC8qCi0gKiBHZXQgYSBTVEEgaW5mbywgbXVzdCBoYXZlIGJlIHVuZGVyIFJDVSByZWFkIGxvY2suCisgKiBHZXQgYSBTVEEgaW5mbywgbXVzdCBiZSB1bmRlciBSQ1UgcmVhZCBsb2NrLgogICovCi1zdHJ1Y3Qgc3RhX2luZm8gKnN0YV9pbmZvX2dldChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwgY29uc3QgdTggKmFkZHIpOworc3RydWN0IHN0YV9pbmZvICpzdGFfaW5mb19nZXQoc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICAgICBjb25zdCB1OCAqYWRkcik7CisKK3N0cnVjdCBzdGFfaW5mbyAqc3RhX2luZm9fZ2V0X2JzcyhzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCQkgIGNvbnN0IHU4ICphZGRyKTsKKworc3RhdGljIGlubGluZQordm9pZCBmb3JfZWFjaF9zdGFfaW5mb190eXBlX2NoZWNrKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLAorCQkJCSAgY29uc3QgdTggKmFkZHIsCisJCQkJICBzdHJ1Y3Qgc3RhX2luZm8gKnN0YSwKKwkJCQkgIHN0cnVjdCBzdGFfaW5mbyAqbnh0KQoreworfQorCisjZGVmaW5lIGZvcl9lYWNoX3N0YV9pbmZvKGxvY2FsLCBfYWRkciwgc3RhLCBueHQpIAkJCVwKKwlmb3IgKAkvKiBpbml0aWFsaXNlIGxvb3AgKi8JCQkJCVwKKwkJc3RhID0gcmN1X2RlcmVmZXJlbmNlKGxvY2FsLT5zdGFfaGFzaFtTVEFfSEFTSChfYWRkcildKSxcCisJCW54dCA9IHN0YSA/IHJjdV9kZXJlZmVyZW5jZShzdGEtPmhuZXh0KSA6IE5VTEw7CQlcCisJCS8qIHR5cGVjaGVjayAqLwkJCQkJCVwKKwkJZm9yX2VhY2hfc3RhX2luZm9fdHlwZV9jaGVjayhsb2NhbCwgKF9hZGRyKSwgc3RhLCBueHQpLAlcCisJCS8qIGNvbnRpbnVlIGNvbmRpdGlvbiAqLwkJCQlcCisJCXN0YTsJCQkJCQkJXAorCQkvKiBhZHZhbmNlIGxvb3AgKi8JCQkJCVwKKwkJc3RhID0gbnh0LAkJCQkJCVwKKwkJbnh0ID0gc3RhID8gcmN1X2RlcmVmZXJlbmNlKHN0YS0+aG5leHQpIDogTlVMTAkJXAorCSAgICAgKQkJCQkJCQkJXAorCS8qIGNvbXBhcmUgYWRkcmVzcyBhbmQgcnVuIGNvZGUgb25seSBpZiBpdCBtYXRjaGVzICovCQlcCisJaWYgKG1lbWNtcChzdGEtPnN0YS5hZGRyLCAoX2FkZHIpLCBFVEhfQUxFTikgPT0gMCkKKwogLyoKICAqIEdldCBTVEEgaW5mbyBieSBpbmRleCwgQlJPS0VOIQogICovCkBAIC00MjEsMTggKzQ0NCwxOSBAQAogICogSW5zZXJ0IFNUQSBpbmZvIGludG8gaGFzaCB0YWJsZS9saXN0LCByZXR1cm5zIHplcm8gb3IgYQogICogLUVFWElTVCBpZiAoaWYgdGhlIHNhbWUgTUFDIGFkZHJlc3MgaXMgYWxyZWFkeSBwcmVzZW50KS4KICAqCi0gKiBDYWxsaW5nIHRoaXMgd2l0aG91dCBSQ1UgcHJvdGVjdGlvbiBtYWtlcyB0aGUgY2FsbGVyCi0gKiByZWxpbnF1aXNoIGl0cyByZWZlcmVuY2UgdG8gQHN0YS4KKyAqIENhbGxpbmcgdGhlIG5vbi1yY3UgdmVyc2lvbiBtYWtlcyB0aGUgY2FsbGVyIHJlbGlucXVpc2gsCisgKiB0aGUgX3JjdSB2ZXJzaW9uIGNhbGxzIHJlYWRfbG9ja19yY3UoKSBhbmQgbXVzdCBiZSBjYWxsZWQKKyAqIHdpdGhvdXQgaXQgaGVsZC4KICAqLwogaW50IHN0YV9pbmZvX2luc2VydChzdHJ1Y3Qgc3RhX2luZm8gKnN0YSk7Ci0vKgotICogVW5saW5rIGEgU1RBIGluZm8gZnJvbSB0aGUgaGFzaCB0YWJsZS9saXN0LgotICogVGhpcyBjYW4gTlVMTCB0aGUgU1RBIHBvaW50ZXIgaWYgc29tZWJvZHkgZWxzZQotICogaGFzIGFscmVhZHkgdW5saW5rZWQgaXQuCi0gKi8KLXZvaWQgc3RhX2luZm9fdW5saW5rKHN0cnVjdCBzdGFfaW5mbyAqKnN0YSk7CitpbnQgc3RhX2luZm9faW5zZXJ0X3JjdShzdHJ1Y3Qgc3RhX2luZm8gKnN0YSkgX19hY3F1aXJlcyhSQ1UpOworaW50IHN0YV9pbmZvX2luc2VydF9hdG9taWMoc3RydWN0IHN0YV9pbmZvICpzdGEpOwogCi12b2lkIHN0YV9pbmZvX2Rlc3Ryb3koc3RydWN0IHN0YV9pbmZvICpzdGEpOworaW50IHN0YV9pbmZvX2Rlc3Ryb3lfYWRkcihzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSwKKwkJCSAgY29uc3QgdTggKmFkZHIpOworaW50IHN0YV9pbmZvX2Rlc3Ryb3lfYWRkcl9ic3Moc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEsCisJCQkgICAgICBjb25zdCB1OCAqYWRkcik7CisKIHZvaWQgc3RhX2luZm9fc2V0X3RpbV9iaXQoc3RydWN0IHN0YV9pbmZvICpzdGEpOwogdm9pZCBzdGFfaW5mb19jbGVhcl90aW1fYml0KHN0cnVjdCBzdGFfaW5mbyAqc3RhKTsKIApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3N0YXR1cy5jIGIvbmV0L21hYzgwMjExL3N0YXR1cy5jCmluZGV4IGQ3OGYzNmMuLjU2ZDViOWEgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS9zdGF0dXMuYworKysgYi9uZXQvbWFjODAyMTEvc3RhdHVzLmMKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgMjAwMi0yMDA1LCBJbnN0YW50ODAyIE5ldHdvcmtzLCBJbmMuCiAgKiBDb3B5cmlnaHQgMjAwNS0yMDA2LCBEZXZpY2VzY2FwZSBTb2Z0d2FyZSwgSW5jLgogICogQ29weXJpZ2h0IDIwMDYtMjAwNwlKaXJpIEJlbmMgPGpiZW5jQHN1c2UuY3o+Ci0gKiBDb3B5cmlnaHQgMjAwOC0yMDA5CUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CisgKiBDb3B5cmlnaHQgMjAwOC0yMDEwCUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCkBAIC00NSwyOSArNDUsMTkgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHNrYik7CiAKIAkvKgotCSAqIFhYWDogVGhpcyBpcyB0ZW1wb3JhcnkhCi0JICoKLQkgKglUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgd2hlbiB3ZSBnZXQgaGVyZSwgdGhlIGRyaXZlciB3aWxsCi0JICoJcXVpdGUgbGlrZWx5IGhhdmUgcHJldHR5IG11Y2ggb3ZlcndyaXR0ZW4gaW5mby0+Y29udHJvbCBieQotCSAqCXVzaW5nIGluZm8tPmRyaXZlcl9kYXRhIG9yIGluZm8tPnJhdGVfZHJpdmVyX2RhdGEuIFRodXMsCi0JICoJd2hlbiBwYXNzaW5nIG91dCB0aGUgZnJhbWUgdG8gdGhlIGRyaXZlciBhZ2Fpbiwgd2Ugd291bGQgYmUKLQkgKglwYXNzaW5nIGNvbXBsZXRlbHkgYm9ndXMgZGF0YSBzaW5jZSB0aGUgZHJpdmVyIHdvdWxkIHRoZW4KLQkgKglleHBlY3QgYSBwcm9wZXJseSBmaWxsZWQgaW5mby0+Y29udHJvbC4gSW4gbWFjODAyMTEgaXRzZWxmCi0JICoJdGhlIHNhbWUgcHJvYmxlbSBvY2N1cnMsIHNpbmNlIHdlIG5lZWQgaW5mby0+Y29udHJvbC52aWYKLQkgKglpbnRlcm5hbGx5LgotCSAqCi0JICoJVG8gZml4IHRoaXMsIHdlIHNob3VsZCBzZW5kIHRoZSBmcmFtZSB0aHJvdWdoIFRYIHByb2Nlc3NpbmcKLQkgKglhZ2Fpbi4gSG93ZXZlciwgaXQncyBub3QgdGhhdCBzaW1wbGUsIHNpbmNlIHRoZSBmcmFtZSB3aWxsCi0JICoJaGF2ZSBiZWVuIHNvZnR3YXJlLWVuY3J5cHRlZCAoaWYgYXBwbGljYWJsZSkgYWxyZWFkeSwgYW5kCi0JICoJZW5jcnlwdGluZyBpdCBhZ2FpbiBkb2Vzbid0IGRvIG11Y2ggZ29vZC4gU28gdG8gcHJvcGVybHkgZG8KLQkgKgl0aGF0LCB3ZSBub3Qgb25seSBoYXZlIHRvIHNraXAgdGhlIGFjdHVhbCAncmF3JyBlbmNyeXB0aW9uCi0JICoJKGtleSBzZWxlY3Rpb24gZXRjLiBzdGlsbCBoYXMgdG8gYmUgZG9uZSEpIGJ1dCBhbHNvIHRoZQotCSAqCXNlcXVlbmNlIG51bWJlciBhc3NpZ25tZW50IHNpbmNlIHRoYXQgaW1wYWN0cyB0aGUgY3J5cHRvCi0JICoJZW5jYXBzdWxhdGlvbiwgb2YgY291cnNlLgotCSAqCi0JICoJSGVuY2UsIGZvciBub3csIGZpeCB0aGUgYnVnIGJ5IGp1c3QgZHJvcHBpbmcgdGhlIGZyYW1lLgorCSAqIFRoaXMgc2tiICdzdXJ2aXZlZCcgYSByb3VuZC10cmlwIHRocm91Z2ggdGhlIGRyaXZlciwgYW5kCisJICogaG9wZWZ1bGx5IHRoZSBkcml2ZXIgZGlkbid0IG1hbmdsZSBpdCB0b28gYmFkbHkuIEhvd2V2ZXIsCisJICogd2UgY2FuIGRlZmluaXRlbHkgbm90IHJlbHkgb24gdGhlIHRoZSBjb250cm9sIGluZm9ybWF0aW9uCisJICogYmVpbmcgY29ycmVjdC4gQ2xlYXIgaXQgc28gd2UgZG9uJ3QgZ2V0IGp1bmsgdGhlcmUsIGFuZAorCSAqIGluZGljYXRlIHRoYXQgaXQgbmVlZHMgbmV3IHByb2Nlc3NpbmcsIGJ1dCBtdXN0IG5vdCBiZQorCSAqIG1vZGlmaWVkL2VuY3J5cHRlZCBhZ2Fpbi4KIAkgKi8KLQlnb3RvIGRyb3A7CisJbWVtc2V0KCZpbmZvLT5jb250cm9sLCAwLCBzaXplb2YoaW5mby0+Y29udHJvbCkpOworCisJaW5mby0+Y29udHJvbC5qaWZmaWVzID0gamlmZmllczsKKwlpbmZvLT5jb250cm9sLnZpZiA9ICZzdGEtPnNkYXRhLT52aWY7CisJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0lOVEZMX05FRURfVFhQUk9DRVNTSU5HIHwKKwkJICAgICAgIElFRUU4MDIxMV9UWF9JTlRGTF9SRVRSQU5TTUlTU0lPTjsKIAogCXN0YS0+dHhfZmlsdGVyZWRfY291bnQrKzsKIApAQCAtMTIyLDcgKzExMiw2IEBACiAJCXJldHVybjsKIAl9CiAKLSBkcm9wOgogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCiAJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBkcm9wcGVkIFRYIGZpbHRlcmVkIGZyYW1lLCAiCkBAIC0xMzQsNiArMTIzLDQwIEBACiAJZGV2X2tmcmVlX3NrYihza2IpOwogfQogCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfZnJhbWVfYWNrZWQoc3RydWN0IHN0YV9pbmZvICpzdGEsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210ID0gKHZvaWQgKikgc2tiLT5kYXRhOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc3RhLT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHN0YS0+c2RhdGE7CisKKwlpZiAoaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LT5mcmFtZV9jb250cm9sKSAmJgorCSAgICBzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTiAmJgorCSAgICBtZ210LT51LmFjdGlvbi5jYXRlZ29yeSA9PSBXTEFOX0NBVEVHT1JZX0hUICYmCisJICAgIG1nbXQtPnUuYWN0aW9uLnUuaHRfc21wcy5hY3Rpb24gPT0gV0xBTl9IVF9BQ1RJT05fU01QUykgeworCQkvKgorCQkgKiBUaGlzIHVwZGF0ZSBsb29rcyByYWN5LCBidXQgaXNuJ3QgLS0gaWYgd2UgY29tZQorCQkgKiBoZXJlIHdlJ3ZlIGRlZmluaXRlbHkgZ290IGEgc3RhdGlvbiB0aGF0IHdlJ3JlCisJCSAqIHRhbGtpbmcgdG8sIGFuZCBvbiBhIG1hbmFnZWQgaW50ZXJmYWNlIHRoYXQgY2FuCisJCSAqIG9ubHkgYmUgdGhlIEFQLiBBbmQgdGhlIG9ubHkgb3RoZXIgcGxhY2UgdXBkYXRpbmcKKwkJICogdGhpcyB2YXJpYWJsZSBpcyBiZWZvcmUgd2UncmUgYXNzb2NpYXRlZC4KKwkJICovCisJCXN3aXRjaCAobWdtdC0+dS5hY3Rpb24udS5odF9zbXBzLnNtcHNfY29udHJvbCkgeworCQljYXNlIFdMQU5fSFRfU01QU19DT05UUk9MX0RZTkFNSUM6CisJCQlzdGEtPnNkYXRhLT51Lm1nZC5hcF9zbXBzID0gSUVFRTgwMjExX1NNUFNfRFlOQU1JQzsKKwkJCWJyZWFrOworCQljYXNlIFdMQU5fSFRfU01QU19DT05UUk9MX1NUQVRJQzoKKwkJCXN0YS0+c2RhdGEtPnUubWdkLmFwX3NtcHMgPSBJRUVFODAyMTFfU01QU19TVEFUSUM7CisJCQlicmVhazsKKwkJY2FzZSBXTEFOX0hUX1NNUFNfQ09OVFJPTF9ESVNBQkxFRDoKKwkJZGVmYXVsdDogLyogc2hvdWxkbid0IGhhcHBlbiBzaW5jZSB3ZSBkb24ndCBzZW5kIHRoYXQgKi8KKwkJCXN0YS0+c2RhdGEtPnUubWdkLmFwX3NtcHMgPSBJRUVFODAyMTFfU01QU19PRkY7CisJCQlicmVhazsKKwkJfQorCisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZsb2NhbC0+cmVjYWxjX3NtcHMpOworCX0KK30KKwogdm9pZCBpZWVlODAyMTFfdHhfc3RhdHVzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBza19idWZmICpza2IyOwpAQCAtMTQ2LDcgKzE2OSw3IEBACiAJc3RydWN0IGllZWU4MDIxMV90eF9zdGF0dXNfcnRhcF9oZHIgKnJ0aGRyOwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwogCXN0cnVjdCBuZXRfZGV2aWNlICpwcmV2X2RldiA9IE5VTEw7Ci0Jc3RydWN0IHN0YV9pbmZvICpzdGE7CisJc3RydWN0IHN0YV9pbmZvICpzdGEsICp0bXA7CiAJaW50IHJldHJ5X2NvdW50ID0gLTEsIGk7CiAJYm9vbCBpbmplY3RlZDsKIApAQCAtMTY1LDEwICsxODgsMTMgQEAKIAlyY3VfcmVhZF9sb2NrKCk7CiAKIAlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbaW5mby0+YmFuZF07CisJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7CiAKLQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci0+YWRkcjEpOworCWZvcl9lYWNoX3N0YV9pbmZvKGxvY2FsLCBoZHItPmFkZHIxLCBzdGEsIHRtcCkgeworCQkvKiBza2lwIHdyb25nIHZpcnR1YWwgaW50ZXJmYWNlICovCisJCWlmIChtZW1jbXAoaGRyLT5hZGRyMiwgc3RhLT5zZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKSkKKwkJCWNvbnRpbnVlOwogCi0JaWYgKHN0YSkgewogCQlpZiAoIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FDSykgJiYKIAkJICAgIHRlc3Rfc3RhX2ZsYWdzKHN0YSwgV0xBTl9TVEFfUFNfU1RBKSkgewogCQkJLyoKQEAgLTE4MCw4ICsyMDYsNiBAQAogCQkJcmV0dXJuOwogCQl9CiAKLQkJZmMgPSBoZHItPmZyYW1lX2NvbnRyb2w7Ci0KIAkJaWYgKChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FNUERVX05PX0JBQ0spICYmCiAJCSAgICAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkpIHsKIAkJCXUxNiB0aWQsIHNzbjsKQEAgLTIwOCw2ICsyMzIsMTAgQEAKIAkJcmF0ZV9jb250cm9sX3R4X3N0YXR1cyhsb2NhbCwgc2JhbmQsIHN0YSwgc2tiKTsKIAkJaWYgKGllZWU4MDIxMV92aWZfaXNfbWVzaCgmc3RhLT5zZGF0YS0+dmlmKSkKIAkJCWllZWU4MDIxMXNfdXBkYXRlX21ldHJpYyhsb2NhbCwgc3RhLCBza2IpOworCisJCWlmICghKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkgJiYKKwkJICAgIChpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9TVEFUX0FDSykpCisJCQlpZWVlODAyMTFfZnJhbWVfYWNrZWQoc3RhLCBza2IpOwogCX0KIAogCXJjdV9yZWFkX3VubG9jaygpOwpAQCAtMjQ2LDYgKzI3NCwyNSBAQAogCQkJbG9jYWwtPmRvdDExRmFpbGVkQ291bnQrKzsKIAl9CiAKKwlpZiAoaWVlZTgwMjExX2lzX251bGxmdW5jKGZjKSAmJiBpZWVlODAyMTFfaGFzX3BtKGZjKSAmJgorCSAgICAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1JFUE9SVFNfVFhfQUNLX1NUQVRVUykgJiYKKwkgICAgIShpbmZvLT5mbGFncyAmIElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQpICYmCisJICAgIGxvY2FsLT5wc19zZGF0YSAmJiAhKGxvY2FsLT5zY2FubmluZykpIHsKKwkJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQUNLKSB7CisJCQlsb2NhbC0+cHNfc2RhdGEtPnUubWdkLmZsYWdzIHw9CisJCQkJCUlFRUU4MDIxMV9TVEFfTlVMTEZVTkNfQUNLRUQ7CisJCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LAorCQkJCQkmbG9jYWwtPmR5bmFtaWNfcHNfZW5hYmxlX3dvcmspOworCQl9IGVsc2UKKwkJCW1vZF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsIGppZmZpZXMgKworCQkJCQltc2Vjc190b19qaWZmaWVzKDEwKSk7CisJfQorCisJaWYgKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0lOVEZMX05MODAyMTFfRlJBTUVfVFgpCisJCWNmZzgwMjExX2FjdGlvbl90eF9zdGF0dXMoCisJCQlza2ItPmRldiwgKHVuc2lnbmVkIGxvbmcpIHNrYiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKKwkJCSEhKGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX1NUQVRfQUNLKSwgR0ZQX0FUT01JQyk7CisKIAkvKiB0aGlzIHdhcyBhIHRyYW5zbWl0dGVkIGZyYW1lLCBidXQgbm93IHdlIHdhbnQgdG8gcmV1c2UgaXQgKi8KIAlza2Jfb3JwaGFuKHNrYik7CiAKQEAgLTMxMSw3ICszNTgsNyBAQAogCXJjdV9yZWFkX2xvY2soKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShzZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLCBsaXN0KSB7CiAJCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfTU9OSVRPUikgewotCQkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQkJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCQkJY29udGludWU7CiAKIAkJCWlmICgoc2RhdGEtPnUubW50cl9mbGFncyAmIE1PTklUT1JfRkxBR19DT09LX0ZSQU1FUykgJiYKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS90a2lwLmMgYi9uZXQvbWFjODAyMTEvdGtpcC5jCmluZGV4IDQ5MjFkNzIuLjdlZjQ5MWUgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS90a2lwLmMKKysrIGIvbmV0L21hYzgwMjExL3RraXAuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJCXAxa1szXSArPSB0a2lwUyhwMWtbMl0gXiBnZXRfdW5hbGlnbmVkX2xlMTYodGsgKyAxMiArIGopKTsKIAkJcDFrWzRdICs9IHRraXBTKHAxa1szXSBeIGdldF91bmFsaWduZWRfbGUxNih0ayArIDAgKyBqKSkgKyBpOwogCX0KLQljdHgtPmluaXRpYWxpemVkID0gMTsKKwljdHgtPnN0YXRlID0gVEtJUF9TVEFURV9QSEFTRTFfRE9ORTsKIH0KIAogc3RhdGljIHZvaWQgdGtpcF9taXhpbmdfcGhhc2UyKGNvbnN0IHU4ICp0aywgc3RydWN0IHRraXBfY3R4ICpjdHgsCkBAIC0xODMsNyArMTgzLDcgQEAKIAkvKiBVcGRhdGUgdGhlIHAxayBvbmx5IHdoZW4gdGhlIGl2MTYgaW4gdGhlIHBhY2tldCB3cmFwcyBhcm91bmQsIHRoaXMKIAkgKiBtaWdodCBvY2N1ciBhZnRlciB0aGUgd3JhcCBhcm91bmQgb2YgaXYxNiBpbiB0aGUga2V5IGluIGNhc2Ugb2YKIAkgKiBmcmFnbWVudGVkIHBhY2tldHMuICovCi0JaWYgKGl2MTYgPT0gMCB8fCAhY3R4LT5pbml0aWFsaXplZCkKKwlpZiAoaXYxNiA9PSAwIHx8IGN0eC0+c3RhdGUgPT0gVEtJUF9TVEFURV9OT1RfSU5JVCkKIAkJdGtpcF9taXhpbmdfcGhhc2UxKHRrLCBjdHgsIGhkci0+YWRkcjIsIGl2MzIpOwogCiAJaWYgKHR5cGUgPT0gSUVFRTgwMjExX1RLSVBfUDFfS0VZKSB7CkBAIC0xOTUsMTEgKzE5NSwxMyBAQAogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZ2V0X3RraXBfa2V5KTsKIAotLyogRW5jcnlwdCBwYWNrZXQgcGF5bG9hZCB3aXRoIFRLSVAgdXNpbmcgQGtleS4gQHBvcyBpcyBhIHBvaW50ZXIgdG8gdGhlCisvKgorICogRW5jcnlwdCBwYWNrZXQgcGF5bG9hZCB3aXRoIFRLSVAgdXNpbmcgQGtleS4gQHBvcyBpcyBhIHBvaW50ZXIgdG8gdGhlCiAgKiBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciBjb250YWluaW5nIHBheWxvYWQuIFRoaXMgcGF5bG9hZCBtdXN0IGluY2x1ZGUKLSAqIGhlYWRyb29tIG9mIGVpZ2h0IG9jdGV0cyBmb3IgSVYgYW5kIEV4dC4gSVYgYW5kIHRhaWxkcm9vbSBvZiBmb3VyIG9jdGV0cwotICogZm9yIElDVi4gQHBheWxvYWRfbGVuIGlzIHRoZSBsZW5ndGggb2YgcGF5bG9hZCAoX25vdF8gaW5jbHVkaW5nIGV4dHJhCi0gKiBoZWFkcm9vbSBhbmQgdGFpbHJvb20pLiBAdGEgaXMgdGhlIHRyYW5zbWl0dGVyIGFkZHJlc3Nlcy4gKi8KKyAqIHRoZSBJVi9FeHQuSVYgYW5kIHNwYWNlIGZvciAodGFpbGRyb29tKSBmb3VyIG9jdGV0cyBmb3IgSUNWLgorICogQHBheWxvYWRfbGVuIGlzIHRoZSBsZW5ndGggb2YgcGF5bG9hZCAoX25vdF8gaW5jbHVkaW5nIElWL0lDViBsZW5ndGgpLgorICogQHRhIGlzIHRoZSB0cmFuc21pdHRlciBhZGRyZXNzZXMuCisgKi8KIHZvaWQgaWVlZTgwMjExX3RraXBfZW5jcnlwdF9kYXRhKHN0cnVjdCBjcnlwdG9fYmxrY2lwaGVyICp0Zm0sCiAJCQkJIHN0cnVjdCBpZWVlODAyMTFfa2V5ICprZXksCiAJCQkJIHU4ICpwb3MsIHNpemVfdCBwYXlsb2FkX2xlbiwgdTggKnRhKQpAQCAtMjA5LDEyICsyMTEsMTEgQEAKIAljb25zdCB1OCAqdGsgPSAma2V5LT5jb25mLmtleVtOTDgwMjExX1RLSVBfREFUQV9PRkZTRVRfRU5DUl9LRVldOwogCiAJLyogQ2FsY3VsYXRlIHBlci1wYWNrZXQga2V5ICovCi0JaWYgKGN0eC0+aXYxNiA9PSAwIHx8ICFjdHgtPmluaXRpYWxpemVkKQorCWlmIChjdHgtPml2MTYgPT0gMCB8fCBjdHgtPnN0YXRlID09IFRLSVBfU1RBVEVfTk9UX0lOSVQpCiAJCXRraXBfbWl4aW5nX3BoYXNlMSh0aywgY3R4LCB0YSwgY3R4LT5pdjMyKTsKIAogCXRraXBfbWl4aW5nX3BoYXNlMih0aywgY3R4LCBjdHgtPml2MTYsIHJjNGtleSk7CiAKLQlwb3MgPSBpZWVlODAyMTFfdGtpcF9hZGRfaXYocG9zLCBrZXksIGtleS0+dS50a2lwLnR4Lml2MTYpOwogCWllZWU4MDIxMV93ZXBfZW5jcnlwdF9kYXRhKHRmbSwgcmM0a2V5LCAxNiwgcG9zLCBwYXlsb2FkX2xlbik7CiB9CiAKQEAgLTI1OSw3ICsyNjAsNyBAQAogCWlmICgoa2V5aWQgPj4gNikgIT0ga2V5LT5jb25mLmtleWlkeCkKIAkJcmV0dXJuIFRLSVBfREVDUllQVF9JTlZBTElEX0tFWUlEWDsKIAotCWlmIChrZXktPnUudGtpcC5yeFtxdWV1ZV0uaW5pdGlhbGl6ZWQgJiYKKwlpZiAoa2V5LT51LnRraXAucnhbcXVldWVdLnN0YXRlICE9IFRLSVBfU1RBVEVfTk9UX0lOSVQgJiYKIAkgICAgKGl2MzIgPCBrZXktPnUudGtpcC5yeFtxdWV1ZV0uaXYzMiB8fAogCSAgICAgKGl2MzIgPT0ga2V5LT51LnRraXAucnhbcXVldWVdLml2MzIgJiYKIAkgICAgICBpdjE2IDw9IGtleS0+dS50a2lwLnJ4W3F1ZXVlXS5pdjE2KSkpIHsKQEAgLTI3NSwxMSArMjc2LDExIEBACiAKIAlpZiAob25seV9pdikgewogCQlyZXMgPSBUS0lQX0RFQ1JZUFRfT0s7Ci0JCWtleS0+dS50a2lwLnJ4W3F1ZXVlXS5pbml0aWFsaXplZCA9IDE7CisJCWtleS0+dS50a2lwLnJ4W3F1ZXVlXS5zdGF0ZSA9IFRLSVBfU1RBVEVfUEhBU0UxX0hXX1VQTE9BREVEOwogCQlnb3RvIGRvbmU7CiAJfQogCi0JaWYgKCFrZXktPnUudGtpcC5yeFtxdWV1ZV0uaW5pdGlhbGl6ZWQgfHwKKwlpZiAoa2V5LT51LnRraXAucnhbcXVldWVdLnN0YXRlID09IFRLSVBfU1RBVEVfTk9UX0lOSVQgfHwKIAkgICAga2V5LT51LnRraXAucnhbcXVldWVdLml2MzIgIT0gaXYzMikgewogCQkvKiBJVjE2IHdyYXBwZWQgYXJvdW5kIC0gcGVyZm9ybSBUS0lQIHBoYXNlIDEgKi8KIAkJdGtpcF9taXhpbmdfcGhhc2UxKHRrLCAma2V5LT51LnRraXAucnhbcXVldWVdLCB0YSwgaXYzMik7CkBAIC0yOTksMTggKzMwMCwxOCBAQAogCQkJcHJpbnRrKCJcbiIpOwogCQl9CiAjZW5kaWYKLQkJaWYgKGtleS0+bG9jYWwtPm9wcy0+dXBkYXRlX3RraXBfa2V5ICYmCi0JCQlrZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpIHsKLQkJCXN0YXRpYyBjb25zdCB1OCBiY2FzdFtFVEhfQUxFTl0gPQotCQkJCXsweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmLCAweGZmfTsKLQkJCWNvbnN0IHU4ICpzdGFfYWRkciA9IGtleS0+c3RhLT5zdGEuYWRkcjsKKwl9CisJaWYgKGtleS0+bG9jYWwtPm9wcy0+dXBkYXRlX3RraXBfa2V5ICYmCisJICAgIGtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSAmJgorCSAgICBrZXktPnUudGtpcC5yeFtxdWV1ZV0uc3RhdGUgIT0gVEtJUF9TVEFURV9QSEFTRTFfSFdfVVBMT0FERUQpIHsKKwkJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSBrZXktPnNkYXRhOwogCi0JCQlpZiAoaXNfbXVsdGljYXN0X2V0aGVyX2FkZHIocmEpKQotCQkJCXN0YV9hZGRyID0gYmNhc3Q7Ci0KLQkJCWRydl91cGRhdGVfdGtpcF9rZXkoa2V5LT5sb2NhbCwgJmtleS0+Y29uZiwgc3RhX2FkZHIsCi0JCQkJCSAgICBpdjMyLCBrZXktPnUudGtpcC5yeFtxdWV1ZV0ucDFrKTsKLQkJfQorCQlpZiAoc2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pCisJCQlzZGF0YSA9IGNvbnRhaW5lcl9vZihrZXktPnNkYXRhLT5ic3MsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEsIHUuYXApOworCQlkcnZfdXBkYXRlX3RraXBfa2V5KGtleS0+bG9jYWwsIHNkYXRhLCAma2V5LT5jb25mLCBrZXktPnN0YSwKKwkJCQlpdjMyLCBrZXktPnUudGtpcC5yeFtxdWV1ZV0ucDFrKTsKKwkJa2V5LT51LnRraXAucnhbcXVldWVdLnN0YXRlID0gVEtJUF9TVEFURV9QSEFTRTFfSFdfVVBMT0FERUQ7CiAJfQogCiAJdGtpcF9taXhpbmdfcGhhc2UyKHRrLCAma2V5LT51LnRraXAucnhbcXVldWVdLCBpdjE2LCByYzRrZXkpOwpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3R4LmMgYi9uZXQvbWFjODAyMTEvdHguYwppbmRleCBhYzIxMGI1Li5jYmU1M2VkIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvdHguYworKysgYi9uZXQvbWFjODAyMTEvdHguYwpAQCAtMTgwLDYgKzE4MCw3MSBAQAogfQogCiAvKiB0eCBoYW5kbGVycyAqLworc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKK2llZWU4MDIxMV90eF9oX2R5bmFtaWNfcHMoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHR4LT5sb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2lmX21hbmFnZWQgKmlmbWdkOworCisJLyogZHJpdmVyIGRvZXNuJ3Qgc3VwcG9ydCBwb3dlciBzYXZlICovCisJaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX1BTKSkKKwkJcmV0dXJuIFRYX0NPTlRJTlVFOworCisJLyogaGFyZHdhcmUgZG9lcyBkeW5hbWljIHBvd2VyIHNhdmUgKi8KKwlpZiAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX1NVUFBPUlRTX0RZTkFNSUNfUFMpCisJCXJldHVybiBUWF9DT05USU5VRTsKKworCS8qIGR5bmFtaWMgcG93ZXIgc2F2ZSBkaXNhYmxlZCAqLworCWlmIChsb2NhbC0+aHcuY29uZi5keW5hbWljX3BzX3RpbWVvdXQgPD0gMCkKKwkJcmV0dXJuIFRYX0NPTlRJTlVFOworCisJLyogd2UgYXJlIHNjYW5uaW5nLCBkb24ndCBlbmFibGUgcG93ZXIgc2F2ZSAqLworCWlmIChsb2NhbC0+c2Nhbm5pbmcpCisJCXJldHVybiBUWF9DT05USU5VRTsKKworCWlmICghbG9jYWwtPnBzX3NkYXRhKQorCQlyZXR1cm4gVFhfQ09OVElOVUU7CisKKwkvKiBObyBwb2ludCBpZiB3ZSdyZSBnb2luZyB0byBzdXNwZW5kICovCisJaWYgKGxvY2FsLT5xdWllc2NpbmcpCisJCXJldHVybiBUWF9DT05USU5VRTsKKworCS8qIGR5bmFtaWMgcHMgaXMgc3VwcG9ydGVkIG9ubHkgaW4gbWFuYWdlZCBtb2RlICovCisJaWYgKHR4LT5zZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJcmV0dXJuIFRYX0NPTlRJTlVFOworCisJaWZtZ2QgPSAmdHgtPnNkYXRhLT51Lm1nZDsKKworCS8qCisJICogRG9uJ3Qgd2FrZXVwIGZyb20gcG93ZXIgc2F2ZSBpZiB1LWFwc2QgaXMgZW5hYmxlZCwgdm9pcCBhYyBoYXMKKwkgKiB1LWFwc2QgZW5hYmxlZCBhbmQgdGhlIGZyYW1lIGlzIGluIHZvaXAgY2xhc3MuIFRoaXMgZWZmZWN0aXZlbHkKKwkgKiBtZWFucyB0aGF0IGV2ZW4gaWYgYWxsIGFjY2VzcyBjYXRlZ29yaWVzIGhhdmUgdS1hcHNkIGVuYWJsZWQsIGluCisJICogcHJhY3Rpc2UgdS1hcHNkIGlzIG9ubHkgdXNlZCB3aXRoIHRoZSB2b2lwIGFjLiBUaGlzIGlzIGEKKwkgKiB3b3JrYXJvdW5kIGZvciB0aGUgY2FzZSB3aGVuIHJlY2VpdmVkIHZvaXAgY2xhc3MgcGFja2V0cyBkbyBub3QKKwkgKiBoYXZlIGNvcnJlY3QgcW9zIHRhZyBmb3Igc29tZSByZWFzb24sIGR1ZSB0aGUgbmV0d29yayBvciB0aGUKKwkgKiBwZWVyIGFwcGxpY2F0aW9uLgorCSAqCisJICogTm90ZTogbG9jYWwtPnVhcHNkX3F1ZXVlcyBhY2Nlc3MgaXMgcmFjeSBoZXJlLiBJZiB0aGUgdmFsdWUgaXMKKwkgKiBjaGFuZ2VkIHZpYSBkZWJ1Z2ZzLCB1c2VyIG5lZWRzIHRvIHJlYXNzb2NpYXRlIG1hbnVhbGx5IHRvIGhhdmUKKwkgKiBldmVyeXRoaW5nIGluIHN5bmMuCisJICovCisJaWYgKChpZm1nZC0+ZmxhZ3MgJiBJRUVFODAyMTFfU1RBX1VBUFNEX0VOQUJMRUQpCisJICAgICYmIChsb2NhbC0+dWFwc2RfcXVldWVzICYgSUVFRTgwMjExX1dNTV9JRV9TVEFfUU9TSU5GT19BQ19WTykKKwkgICAgJiYgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHR4LT5za2IpID09IDApCisJCXJldHVybiBUWF9DT05USU5VRTsKKworCWlmIChsb2NhbC0+aHcuY29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7CisJCWllZWU4MDIxMV9zdG9wX3F1ZXVlc19ieV9yZWFzb24oJmxvY2FsLT5odywKKwkJCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QUyk7CisJCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsCisJCQkJICAgICAmbG9jYWwtPmR5bmFtaWNfcHNfZGlzYWJsZV93b3JrKTsKKwl9CisKKwltb2RfdGltZXIoJmxvY2FsLT5keW5hbWljX3BzX3RpbWVyLCBqaWZmaWVzICsKKwkJICBtc2Vjc190b19qaWZmaWVzKGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCkpOworCisJcmV0dXJuIFRYX0NPTlRJTlVFOworfQogCiBzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQogaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2Moc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKQEAgLTIyMyw3ICsyODgsNyBAQAogI2lmZGVmIENPTkZJR19NQUM4MDIxMV9WRVJCT1NFX0RFQlVHCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRyb3BwZWQgZGF0YSBmcmFtZSB0byBub3QgIgogCQkJICAgICAgICJhc3NvY2lhdGVkIHN0YXRpb24gJXBNXG4iLAotCQkJICAgICAgIHR4LT5kZXYtPm5hbWUsIGhkci0+YWRkcjEpOworCQkJICAgICAgIHR4LT5zZGF0YS0+bmFtZSwgaGRyLT5hZGRyMSk7CiAjZW5kaWYgLyogQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcgKi8KIAkJCUk4MDJfREVCVUdfSU5DKHR4LT5sb2NhbC0+dHhfaGFuZGxlcnNfZHJvcF9ub3RfYXNzb2MpOwogCQkJcmV0dXJuIFRYX0RST1A7CkBAIC0zMzEsNyArMzk2LDcgQEAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRwogCQlpZiAobmV0X3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBCQyBUWCBidWZmZXIgZnVsbCAtIGRyb3BwaW5nIHRoZSBvbGRlc3QgZnJhbWVcbiIsCi0JCQkgICAgICAgdHgtPmRldi0+bmFtZSk7CisJCQkgICAgICAgdHgtPnNkYXRhLT5uYW1lKTsKICNlbmRpZgogCQlkZXZfa2ZyZWVfc2tiKHNrYl9kZXF1ZXVlKCZ0eC0+c2RhdGEtPmJzcy0+cHNfYmNfYnVmKSk7CiAJfSBlbHNlCkBAIC0zOTEsNyArNDU2LDcgQEAKIAkJCWlmIChuZXRfcmF0ZWxpbWl0KCkpIHsKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNUQSAlcE0gVFggIgogCQkJCSAgICAgICAiYnVmZmVyIGZ1bGwgLSBkcm9wcGluZyBvbGRlc3QgZnJhbWVcbiIsCi0JCQkJICAgICAgIHR4LT5kZXYtPm5hbWUsIHN0YS0+c3RhLmFkZHIpOworCQkJCSAgICAgICB0eC0+c2RhdGEtPm5hbWUsIHN0YS0+c3RhLmFkZHIpOwogCQkJfQogI2VuZGlmCiAJCQlkZXZfa2ZyZWVfc2tiKG9sZCk7CkBAIC00MTYsNyArNDgxLDcgQEAKICNpZmRlZiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRwogCWVsc2UgaWYgKHVubGlrZWx5KHN0YWZsYWdzICYgV0xBTl9TVEFfUFNfU1RBKSkgewogCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFNUQSAlcE0gaW4gUFMgbW9kZSwgYnV0IHBzcG9sbCAiCi0JCSAgICAgICAic2V0IC0+IHNlbmQgZnJhbWVcbiIsIHR4LT5kZXYtPm5hbWUsCisJCSAgICAgICAic2V0IC0+IHNlbmQgZnJhbWVcbiIsIHR4LT5zZGF0YS0+bmFtZSwKIAkJICAgICAgIHN0YS0+c3RhLmFkZHIpOwogCX0KICNlbmRpZiAvKiBDT05GSUdfTUFDODAyMTFfVkVSQk9TRV9QU19ERUJVRyAqLwpAQCAtNDY0LDYgKzUyOSw4IEBACiAJCXR4LT5rZXkgPSBOVUxMOwogCiAJaWYgKHR4LT5rZXkpIHsKKwkJYm9vbCBza2lwX2h3ID0gZmFsc2U7CisKIAkJdHgtPmtleS0+dHhfcnhfY291bnQrKzsKIAkJLyogVE9ETzogYWRkIHRocmVzaG9sZCBzdHVmZiBhZ2FpbiAqLwogCkBAIC00ODAsMTYgKzU0NywzMiBAQAogCQkJICAgICFpZWVlODAyMTFfdXNlX21mcChoZHItPmZyYW1lX2NvbnRyb2wsIHR4LT5zdGEsCiAJCQkJCSAgICAgICB0eC0+c2tiKSkKIAkJCQl0eC0+a2V5ID0gTlVMTDsKKwkJCWVsc2UKKwkJCQlza2lwX2h3ID0gKHR4LT5rZXktPmNvbmYuZmxhZ3MgJgorCQkJCQkgICBJRUVFODAyMTFfS0VZX0ZMQUdfU1dfTUdNVCkgJiYKKwkJCQkJaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKTsKIAkJCWJyZWFrOwogCQljYXNlIEFMR19BRVNfQ01BQzoKIAkJCWlmICghaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKSkKIAkJCQl0eC0+a2V5ID0gTlVMTDsKIAkJCWJyZWFrOwogCQl9CisKKwkJaWYgKCFza2lwX2h3ICYmIHR4LT5rZXkgJiYKKwkJICAgIHR4LT5rZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpCisJCQlpbmZvLT5jb250cm9sLmh3X2tleSA9ICZ0eC0+a2V5LT5jb25mOwogCX0KIAotCWlmICghdHgtPmtleSB8fCAhKHR4LT5rZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpKQotCQlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOworCXJldHVybiBUWF9DT05USU5VRTsKK30KKworc3RhdGljIGllZWU4MDIxMV90eF9yZXN1bHQgZGVidWdfbm9pbmxpbmUKK2llZWU4MDIxMV90eF9oX3N0YShzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQoreworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtPnNrYik7CisKKwlpZiAodHgtPnN0YSAmJiB0eC0+c3RhLT51cGxvYWRlZCkKKwkJaW5mby0+Y29udHJvbC5zdGEgPSAmdHgtPnN0YS0+c3RhOwogCiAJcmV0dXJuIFRYX0NPTlRJTlVFOwogfQpAQCAtNTE5LDcgKzYwMiwxMiBAQAogCXR4cmMuYnNzX2NvbmYgPSAmdHgtPnNkYXRhLT52aWYuYnNzX2NvbmY7CiAJdHhyYy5za2IgPSB0eC0+c2tiOwogCXR4cmMucmVwb3J0ZWRfcmF0ZS5pZHggPSAtMTsKLQl0eHJjLm1heF9yYXRlX2lkeCA9IHR4LT5zZGF0YS0+bWF4X3JhdGVjdHJsX3JhdGVpZHg7CisJdHhyYy5yYXRlX2lkeF9tYXNrID0gdHgtPnNkYXRhLT5yY19yYXRlaWR4X21hc2tbdHgtPmNoYW5uZWwtPmJhbmRdOworCWlmICh0eHJjLnJhdGVfaWR4X21hc2sgPT0gKDEgPDwgc2JhbmQtPm5fYml0cmF0ZXMpIC0gMSkKKwkJdHhyYy5tYXhfcmF0ZV9pZHggPSAtMTsKKwllbHNlCisJCXR4cmMubWF4X3JhdGVfaWR4ID0gZmxzKHR4cmMucmF0ZV9pZHhfbWFzaykgLSAxOworCXR4cmMuYXAgPSB0eC0+c2RhdGEtPnZpZi50eXBlID09IE5MODAyMTFfSUZUWVBFX0FQOwogCiAJLyogc2V0IHVwIFJUUyBwcm90ZWN0aW9uIGlmIGRlc2lyZWQgKi8KIAlpZiAobGVuID4gdHgtPmxvY2FsLT5ody53aXBoeS0+cnRzX3RocmVzaG9sZCkgewpAQCAtNTQ5LDcgKzYzNyw3IEBACiAJCSAiJXM6IERyb3BwZWQgZGF0YSBmcmFtZSBhcyBubyB1c2FibGUgYml0cmF0ZSBmb3VuZCB3aGlsZSAiCiAJCSAic2Nhbm5pbmcgYW5kIGFzc29jaWF0ZWQuIFRhcmdldCBzdGF0aW9uOiAiCiAJCSAiJXBNIG9uICVkIEdIeiBiYW5kXG4iLAotCQkgdHgtPmRldi0+bmFtZSwgaGRyLT5hZGRyMSwKKwkJIHR4LT5zZGF0YS0+bmFtZSwgaGRyLT5hZGRyMSwKIAkJIHR4LT5jaGFubmVsLT5iYW5kID8gNSA6IDIpKQogCQlyZXR1cm4gVFhfRFJPUDsKIApAQCAtNjY0LDE3ICs3NTIsNiBAQAogfQogCiBzdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQotaWVlZTgwMjExX3R4X2hfbWlzYyhzdHJ1Y3QgaWVlZTgwMjExX3R4X2RhdGEgKnR4KQotewotCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0IodHgtPnNrYik7Ci0KLQlpZiAodHgtPnN0YSkKLQkJaW5mby0+Y29udHJvbC5zdGEgPSAmdHgtPnN0YS0+c3RhOwotCi0JcmV0dXJuIFRYX0NPTlRJTlVFOwotfQotCi1zdGF0aWMgaWVlZTgwMjExX3R4X3Jlc3VsdCBkZWJ1Z19ub2lubGluZQogaWVlZTgwMjExX3R4X2hfc2VxdWVuY2Uoc3RydWN0IGllZWU4MDIxMV90eF9kYXRhICp0eCkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmluZm8gPSBJRUVFODAyMTFfU0tCX0NCKHR4LT5za2IpOwpAQCAtOTMzLDcgKzEwMTAsOCBAQAogCQkoc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKikgc2tiLT5kYXRhOwogCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOwogCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKLQlpbnQgcmV0ID0gaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX2luaXQoJml0ZXJhdG9yLCBydGhkciwgc2tiLT5sZW4pOworCWludCByZXQgPSBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3JfaW5pdCgmaXRlcmF0b3IsIHJ0aGRyLCBza2ItPmxlbiwKKwkJCQkJCSAgIE5VTEwpOwogCiAJc2JhbmQgPSB0eC0+bG9jYWwtPmh3LndpcGh5LT5iYW5kc1t0eC0+Y2hhbm5lbC0+YmFuZF07CiAKQEAgLTk2OSw3ICsxMDQ3LDcgQEAKIAkJCQkgKiBiZWNhdXNlIGl0IHdpbGwgYmUgcmVjb21wdXRlZCBhbmQgYWRkZWQKIAkJCQkgKiBvbiB0cmFuc21pc3Npb24KIAkJCQkgKi8KLQkJCQlpZiAoc2tiLT5sZW4gPCAoaXRlcmF0b3IubWF4X2xlbmd0aCArIEZDU19MRU4pKQorCQkJCWlmIChza2ItPmxlbiA8IChpdGVyYXRvci5fbWF4X2xlbmd0aCArIEZDU19MRU4pKQogCQkJCQlyZXR1cm4gZmFsc2U7CiAKIAkJCQlza2JfdHJpbShza2IsIHNrYi0+bGVuIC0gRkNTX0xFTik7CkBAIC05OTYsMTAgKzEwNzQsMTAgQEAKIAogCS8qCiAJICogcmVtb3ZlIHRoZSByYWRpb3RhcCBoZWFkZXIKLQkgKiBpdGVyYXRvci0+bWF4X2xlbmd0aCB3YXMgc2FuaXR5LWNoZWNrZWQgYWdhaW5zdAorCSAqIGl0ZXJhdG9yLT5fbWF4X2xlbmd0aCB3YXMgc2FuaXR5LWNoZWNrZWQgYWdhaW5zdAogCSAqIHNrYi0+bGVuIGJ5IGl0ZXJhdG9yIGluaXQKIAkgKi8KLQlza2JfcHVsbChza2IsIGl0ZXJhdG9yLm1heF9sZW5ndGgpOworCXNrYl9wdWxsKHNrYiwgaXRlcmF0b3IuX21heF9sZW5ndGgpOwogCiAJcmV0dXJuIHRydWU7CiB9CkBAIC0xMDIxLDcgKzEwOTksNiBAQAogCiAJbWVtc2V0KHR4LCAwLCBzaXplb2YoKnR4KSk7CiAJdHgtPnNrYiA9IHNrYjsKLQl0eC0+ZGV2ID0gc2RhdGEtPmRldjsgLyogdXNlIG9yaWdpbmFsIGludGVyZmFjZSAqLwogCXR4LT5sb2NhbCA9IGxvY2FsOwogCXR4LT5zZGF0YSA9IHNkYXRhOwogCXR4LT5jaGFubmVsID0gbG9jYWwtPmh3LmNvbmYuY2hhbm5lbDsKQEAgLTEwMzIsNyArMTEwOSw3IEBACiAJdHgtPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9GUkFHTUVOVEVEOwogCiAJLyogcHJvY2VzcyBhbmQgcmVtb3ZlIHRoZSBpbmplY3Rpb24gcmFkaW90YXAgaGVhZGVyICovCi0JaWYgKHVubGlrZWx5KGluZm8tPmZsYWdzICYgSUVFRTgwMjExX1RYX0NUTF9JTkpFQ1RFRCkpIHsKKwlpZiAodW5saWtlbHkoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfSU5URkxfSEFTX1JBRElPVEFQKSkgewogCQlpZiAoIV9faWVlZTgwMjExX3BhcnNlX3R4X3JhZGlvdGFwKHR4LCBza2IpKQogCQkJcmV0dXJuIFRYX0RST1A7CiAKQEAgLTEwNDEsNiArMTExOCw3IEBACiAJCSAqIHRoZSByYWRpb3RhcCBoZWFkZXIgdGhhdCB3YXMgcHJlc2VudCBhbmQgcHJlLWZpbGxlZAogCQkgKiAndHgnIHdpdGggdHggY29udHJvbCBpbmZvcm1hdGlvbi4KIAkJICovCisJCWluZm8tPmZsYWdzICY9IH5JRUVFODAyMTFfVFhfSU5URkxfSEFTX1JBRElPVEFQOwogCX0KIAogCS8qCkBAIC0xMDUyLDEwICsxMTMwLDE1IEBACiAKIAloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKikgc2tiLT5kYXRhOwogCi0JaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQorCWlmIChzZGF0YS0+dmlmLnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTikgewogCQl0eC0+c3RhID0gcmN1X2RlcmVmZXJlbmNlKHNkYXRhLT51LnZsYW4uc3RhKTsKKwkJaWYgKCF0eC0+c3RhICYmIHNkYXRhLT5kZXYtPmllZWU4MDIxMV9wdHItPnVzZV80YWRkcikKKwkJCXJldHVybiBUWF9EUk9QOworCX0gZWxzZSBpZiAoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfQ1RMX0lOSkVDVEVEKSB7CisJCXR4LT5zdGEgPSBzdGFfaW5mb19nZXRfYnNzKHNkYXRhLCBoZHItPmFkZHIxKTsKKwl9CiAJaWYgKCF0eC0+c3RhKQotCQl0eC0+c3RhID0gc3RhX2luZm9fZ2V0KGxvY2FsLCBoZHItPmFkZHIxKTsKKwkJdHgtPnN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgaGRyLT5hZGRyMSk7CiAKIAlpZiAodHgtPnN0YSAmJiBpZWVlODAyMTFfaXNfZGF0YV9xb3MoaGRyLT5mcmFtZV9jb250cm9sKSAmJgogCSAgICAobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXX0FNUERVX0FHR1JFR0FUSU9OKSkgewpAQCAtMTIwNyw2ICsxMjkwLDcgQEAKIHN0YXRpYyBpbnQgaW52b2tlX3R4X2hhbmRsZXJzKHN0cnVjdCBpZWVlODAyMTFfdHhfZGF0YSAqdHgpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHR4LT5za2I7CisJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCWllZWU4MDIxMV90eF9yZXN1bHQgcmVzID0gVFhfRFJPUDsKIAogI2RlZmluZSBDQUxMX1RYSCh0eGgpIFwKQEAgLTEyMTYsMTMgKzEzMDAsMTggQEAKIAkJCWdvdG8gdHhoX2RvbmU7CVwKIAl9IHdoaWxlICgwKQogCisJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfZHluYW1pY19wcyk7CiAJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfY2hlY2tfYXNzb2MpOwogCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX3BzX2J1Zik7CiAJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfc2VsZWN0X2tleSk7Ci0JQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfbWljaGFlbF9taWNfYWRkKTsKKwlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9zdGEpOwogCWlmICghKHR4LT5sb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfSEFTX1JBVEVfQ09OVFJPTCkpCiAJCUNBTExfVFhIKGllZWU4MDIxMV90eF9oX3JhdGVfY3RybCk7Ci0JQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfbWlzYyk7CisKKwlpZiAodW5saWtlbHkoaW5mby0+ZmxhZ3MgJiBJRUVFODAyMTFfVFhfSU5URkxfUkVUUkFOU01JU1NJT04pKQorCQlnb3RvIHR4aF9kb25lOworCisJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfbWljaGFlbF9taWNfYWRkKTsKIAlDQUxMX1RYSChpZWVlODAyMTFfdHhfaF9zZXF1ZW5jZSk7CiAJQ0FMTF9UWEgoaWVlZTgwMjExX3R4X2hfZnJhZ21lbnQpOwogCS8qIGhhbmRsZXJzIGFmdGVyIGZyYWdtZW50IG11c3QgYmUgYXdhcmUgb2YgdHggaW5mbyBmcmFnbWVudGF0aW9uISAqLwpAQCAtMTM5OCwzNCArMTQ4Nyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBib29sIG5lZWRfZHluYW1pY19wcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKLXsKLQkvKiBkcml2ZXIgZG9lc24ndCBzdXBwb3J0IHBvd2VyIHNhdmUgKi8KLQlpZiAoIShsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfUFMpKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkvKiBoYXJkd2FyZSBkb2VzIGR5bmFtaWMgcG93ZXIgc2F2ZSAqLwotCWlmIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1VQUE9SVFNfRFlOQU1JQ19QUykKLQkJcmV0dXJuIGZhbHNlOwotCi0JLyogZHluYW1pYyBwb3dlciBzYXZlIGRpc2FibGVkICovCi0JaWYgKGxvY2FsLT5ody5jb25mLmR5bmFtaWNfcHNfdGltZW91dCA8PSAwKQotCQlyZXR1cm4gZmFsc2U7Ci0KLQkvKiB3ZSBhcmUgc2Nhbm5pbmcsIGRvbid0IGVuYWJsZSBwb3dlciBzYXZlICovCi0JaWYgKGxvY2FsLT5zY2FubmluZykKLQkJcmV0dXJuIGZhbHNlOwotCi0JaWYgKCFsb2NhbC0+cHNfc2RhdGEpCi0JCXJldHVybiBmYWxzZTsKLQotCS8qIE5vIHBvaW50IGlmIHdlJ3JlIGdvaW5nIHRvIHN1c3BlbmQgKi8KLQlpZiAobG9jYWwtPnF1aWVzY2luZykKLQkJcmV0dXJuIGZhbHNlOwotCi0JcmV0dXJuIHRydWU7Ci19Ci0KIHN0YXRpYyB2b2lkIGllZWU4MDIxMV94bWl0KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAogCQkJICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKQEAgLTE0MzYsMjUgKzE0OTcsMTQgQEAKIAlpbnQgaGVhZHJvb207CiAJYm9vbCBtYXlfZW5jcnlwdDsKIAotCWlmIChuZWVkX2R5bmFtaWNfcHMobG9jYWwpKSB7Ci0JCWlmIChsb2NhbC0+aHcuY29uZi5mbGFncyAmIElFRUU4MDIxMV9DT05GX1BTKSB7Ci0JCQlpZWVlODAyMTFfc3RvcF9xdWV1ZXNfYnlfcmVhc29uKCZsb2NhbC0+aHcsCi0JCQkJCUlFRUU4MDIxMV9RVUVVRV9TVE9QX1JFQVNPTl9QUyk7Ci0JCQlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LAotCQkJCQkmbG9jYWwtPmR5bmFtaWNfcHNfZGlzYWJsZV93b3JrKTsKLQkJfQotCi0JCW1vZF90aW1lcigmbG9jYWwtPmR5bmFtaWNfcHNfdGltZXIsIGppZmZpZXMgKwotCQkgICAgICAgIG1zZWNzX3RvX2ppZmZpZXMobG9jYWwtPmh3LmNvbmYuZHluYW1pY19wc190aW1lb3V0KSk7Ci0JfQotCiAJcmN1X3JlYWRfbG9jaygpOwogCiAJaWYgKHVubGlrZWx5KHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9NT05JVE9SKSkgewogCQlpbnQgaGRybGVuOwogCQl1MTYgbGVuX3J0aGRyOwogCi0JCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQ7CisJCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfSU5KRUNURUQgfAorCQkJICAgICAgIElFRUU4MDIxMV9UWF9JTlRGTF9IQVNfUkFESU9UQVA7CiAKIAkJbGVuX3J0aGRyID0gaWVlZTgwMjExX2dldF9yYWRpb3RhcF9sZW4oc2tiLT5kYXRhKTsKIAkJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopKHNrYi0+ZGF0YSArIGxlbl9ydGhkcik7CkBAIC0xNDc0LDExICsxNTI0LDExIEBACiAKIAkJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHRtcF9zZGF0YSwgJmxvY2FsLT5pbnRlcmZhY2VzLAogCQkJCQkJbGlzdCkgewotCQkJCWlmICghbmV0aWZfcnVubmluZyh0bXBfc2RhdGEtPmRldikpCisJCQkJaWYgKCFpZWVlODAyMTFfc2RhdGFfcnVubmluZyh0bXBfc2RhdGEpKQogCQkJCQljb250aW51ZTsKIAkJCQlpZiAodG1wX3NkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCkKIAkJCQkJY29udGludWU7Ci0JCQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcih0bXBfc2RhdGEtPmRldi0+ZGV2X2FkZHIsCisJCQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcih0bXBfc2RhdGEtPnZpZi5hZGRyLAogCQkJCQkJICAgICAgIGhkci0+YWRkcjIpID09IDApIHsKIAkJCQkJc2RhdGEgPSB0bXBfc2RhdGE7CiAJCQkJCWJyZWFrOwpAQCAtMTY0Miw3ICsxNjkyLDcgQEAKIAkJCWZjIHw9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GQ1RMX0ZST01EUyB8IElFRUU4MDIxMV9GQ1RMX1RPRFMpOwogCQkJLyogUkEgVEEgREEgU0EgKi8KIAkJCW1lbWNweShoZHIuYWRkcjEsIHN0YS0+c3RhLmFkZHIsIEVUSF9BTEVOKTsKLQkJCW1lbWNweShoZHIuYWRkcjIsIGRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwkJCW1lbWNweShoZHIuYWRkcjIsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCQkJbWVtY3B5KGhkci5hZGRyMywgc2tiLT5kYXRhLCBFVEhfQUxFTik7CiAJCQltZW1jcHkoaGRyLmFkZHI0LCBza2ItPmRhdGEgKyBFVEhfQUxFTiwgRVRIX0FMRU4pOwogCQkJaGRybGVuID0gMzA7CkBAIC0xNjU2LDcgKzE3MDYsNyBAQAogCQlmYyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GUk9NRFMpOwogCQkvKiBEQSBCU1NJRCBTQSAqLwogCQltZW1jcHkoaGRyLmFkZHIxLCBza2ItPmRhdGEsIEVUSF9BTEVOKTsKLQkJbWVtY3B5KGhkci5hZGRyMiwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCQltZW1jcHkoaGRyLmFkZHIyLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAkJbWVtY3B5KGhkci5hZGRyMywgc2tiLT5kYXRhICsgRVRIX0FMRU4sIEVUSF9BTEVOKTsKIAkJaGRybGVuID0gMjQ7CiAJCWJyZWFrOwpAQCAtMTY2NCw3ICsxNzE0LDcgQEAKIAkJZmMgfD0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZDVExfRlJPTURTIHwgSUVFRTgwMjExX0ZDVExfVE9EUyk7CiAJCS8qIFJBIFRBIERBIFNBICovCiAJCW1lbWNweShoZHIuYWRkcjEsIHNkYXRhLT51Lndkcy5yZW1vdGVfYWRkciwgRVRIX0FMRU4pOwotCQltZW1jcHkoaGRyLmFkZHIyLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJCW1lbWNweShoZHIuYWRkcjIsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCQltZW1jcHkoaGRyLmFkZHIzLCBza2ItPmRhdGEsIEVUSF9BTEVOKTsKIAkJbWVtY3B5KGhkci5hZGRyNCwgc2tiLT5kYXRhICsgRVRIX0FMRU4sIEVUSF9BTEVOKTsKIAkJaGRybGVuID0gMzA7CkBAIC0xNjc4LDggKzE3MjgsOCBAQAogCQkJZ290byBmYWlsOwogCQl9CiAKLQkJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyLAotCQkJCQkgIHNrYi0+ZGF0YSArIEVUSF9BTEVOKSA9PSAwKSB7CisJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoc2RhdGEtPnZpZi5hZGRyLAorCQkJCSAgICAgICBza2ItPmRhdGEgKyBFVEhfQUxFTikgPT0gMCkgewogCQkJaGRybGVuID0gaWVlZTgwMjExX2ZpbGxfbWVzaF9hZGRyZXNzZXMoJmhkciwgJmZjLAogCQkJCQlza2ItPmRhdGEsIHNrYi0+ZGF0YSArIEVUSF9BTEVOKTsKIAkJCW1lc2hoZHJsZW4gPSBpZWVlODAyMTFfbmV3X21lc2hfaGVhZGVyKCZtZXNoX2hkciwKQEAgLTE3MDksNyArMTc1OSw3IEBACiAJCQkJfQogCQkJfQogCQkJaGRybGVuID0gaWVlZTgwMjExX2ZpbGxfbWVzaF9hZGRyZXNzZXMoJmhkciwgJmZjLAotCQkJCQltZXNoX2RhLCBkZXYtPmRldl9hZGRyKTsKKwkJCQkJbWVzaF9kYSwgc2RhdGEtPnZpZi5hZGRyKTsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogCQkJaWYgKGlzX21lc2hfbWNhc3QpCiAJCQkJbWVzaGhkcmxlbiA9CkBAIC0xNzM0LDcgKzE3ODQsNyBAQAogCQlpZiAoc2RhdGEtPnUubWdkLnVzZV80YWRkciAmJiBldGhlcnR5cGUgIT0gRVRIX1BfUEFFKSB7CiAJCQlmYyB8PSBjcHVfdG9fbGUxNihJRUVFODAyMTFfRkNUTF9GUk9NRFMgfCBJRUVFODAyMTFfRkNUTF9UT0RTKTsKIAkJCS8qIFJBIFRBIERBIFNBICovCi0JCQltZW1jcHkoaGRyLmFkZHIyLCBkZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJCQltZW1jcHkoaGRyLmFkZHIyLCBzZGF0YS0+dmlmLmFkZHIsIEVUSF9BTEVOKTsKIAkJCW1lbWNweShoZHIuYWRkcjMsIHNrYi0+ZGF0YSwgRVRIX0FMRU4pOwogCQkJbWVtY3B5KGhkci5hZGRyNCwgc2tiLT5kYXRhICsgRVRIX0FMRU4sIEVUSF9BTEVOKTsKIAkJCWhkcmxlbiA9IDMwOwpAQCAtMTc2NSw5ICsxODE1LDggQEAKIAkgKi8KIAlpZiAoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci5hZGRyMSkpIHsKIAkJcmN1X3JlYWRfbG9jaygpOwotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIGhkci5hZGRyMSk7Ci0JCS8qIFhYWDogaW4gdGhlIGZ1dHVyZSwgdXNlIHNkYXRhIHRvIGxvb2sgdXAgdGhlIHN0YSAqLwotCQlpZiAoc3RhICYmIHN0YS0+c2RhdGEgPT0gc2RhdGEpCisJCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgaGRyLmFkZHIxKTsKKwkJaWYgKHN0YSkKIAkJCXN0YV9mbGFncyA9IGdldF9zdGFfZmxhZ3Moc3RhKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQpAQCAtMTc4Niw3ICsxODM1LDcgQEAKIAkJdW5saWtlbHkoIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKGhkci5hZGRyMSkgJiYKIAkJICAgICAgIShzdGFfZmxhZ3MgJiBXTEFOX1NUQV9BVVRIT1JJWkVEKSAmJgogCQkgICAgICAhKGV0aGVydHlwZSA9PSBFVEhfUF9QQUUgJiYKLQkJICAgICAgIGNvbXBhcmVfZXRoZXJfYWRkcihkZXYtPmRldl9hZGRyLAorCQkgICAgICAgY29tcGFyZV9ldGhlcl9hZGRyKHNkYXRhLT52aWYuYWRkciwKIAkJCQkJICBza2ItPmRhdGEgKyBFVEhfQUxFTikgPT0gMCkpKSB7CiAjaWZkZWYgQ09ORklHX01BQzgwMjExX1ZFUkJPU0VfREVCVUcKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKQEAgLTE5MjYsNyArMTk3NSw3IEBACiAJCWllZWU4MDIxMV90eChzZGF0YSwgc2tiLCB0cnVlKTsKIAl9IGVsc2UgewogCQloZHIgPSAoc3RydWN0IGllZWU4MDIxMV9oZHIgKilza2ItPmRhdGE7Ci0JCXN0YSA9IHN0YV9pbmZvX2dldChsb2NhbCwgaGRyLT5hZGRyMSk7CisJCXN0YSA9IHN0YV9pbmZvX2dldChzZGF0YSwgaGRyLT5hZGRyMSk7CiAKIAkJcmV0ID0gX19pZWVlODAyMTFfdHgobG9jYWwsICZza2IsIHN0YSwgdHJ1ZSk7CiAJCWlmIChyZXQgIT0gSUVFRTgwMjExX1RYX09LKQpAQCAtMjA2Miw2ICsyMTExLDcgQEAKIAlzdHJ1Y3QgYmVhY29uX2RhdGEgKmJlYWNvbjsKIAlzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZDsKIAllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQgPSBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kOworCXN0cnVjdCBpZWVlODAyMTFfdHhfcmF0ZV9jb250cm9sIHR4cmM7CiAKIAlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbYmFuZF07CiAKQEAgLTIxNTAsOCArMjIwMCw4IEBACiAJCW1nbXQtPmZyYW1lX2NvbnRyb2wgPQogCQkgICAgY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfCBJRUVFODAyMTFfU1RZUEVfQkVBQ09OKTsKIAkJbWVtc2V0KG1nbXQtPmRhLCAweGZmLCBFVEhfQUxFTik7Ci0JCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKLQkJbWVtY3B5KG1nbXQtPmJzc2lkLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pOworCQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOworCQltZW1jcHkobWdtdC0+YnNzaWQsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCQltZ210LT51LmJlYWNvbi5iZWFjb25faW50ID0KIAkJCWNwdV90b19sZTE2KHNkYXRhLT52aWYuYnNzX2NvbmYuYmVhY29uX2ludCk7CiAJCW1nbXQtPnUuYmVhY29uLmNhcGFiX2luZm8gPSAweDA7IC8qIDB4MCBmb3IgTVBzICovCkBAIC0yMTY5LDIxICsyMjE5LDI1IEBACiAJaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAogCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9JTlRGTF9ET05UX0VOQ1JZUFQ7CisJaW5mby0+ZmxhZ3MgfD0gSUVFRTgwMjExX1RYX0NUTF9OT19BQ0s7CiAJaW5mby0+YmFuZCA9IGJhbmQ7Ci0JLyoKLQkgKiBYWFg6IEZvciBub3csIGFsd2F5cyB1c2UgdGhlIGxvd2VzdCByYXRlCi0JICovCi0JaW5mby0+Y29udHJvbC5yYXRlc1swXS5pZHggPSAwOwotCWluZm8tPmNvbnRyb2wucmF0ZXNbMF0uY291bnQgPSAxOwotCWluZm8tPmNvbnRyb2wucmF0ZXNbMV0uaWR4ID0gLTE7Ci0JaW5mby0+Y29udHJvbC5yYXRlc1syXS5pZHggPSAtMTsKLQlpbmZvLT5jb250cm9sLnJhdGVzWzNdLmlkeCA9IC0xOwotCWluZm8tPmNvbnRyb2wucmF0ZXNbNF0uaWR4ID0gLTE7Ci0JQlVJTERfQlVHX09OKElFRUU4MDIxMV9UWF9NQVhfUkFURVMgIT0gNSk7CisKKwltZW1zZXQoJnR4cmMsIDAsIHNpemVvZih0eHJjKSk7CisJdHhyYy5odyA9IGh3OworCXR4cmMuc2JhbmQgPSBzYmFuZDsKKwl0eHJjLmJzc19jb25mID0gJnNkYXRhLT52aWYuYnNzX2NvbmY7CisJdHhyYy5za2IgPSBza2I7CisJdHhyYy5yZXBvcnRlZF9yYXRlLmlkeCA9IC0xOworCXR4cmMucmF0ZV9pZHhfbWFzayA9IHNkYXRhLT5yY19yYXRlaWR4X21hc2tbYmFuZF07CisJaWYgKHR4cmMucmF0ZV9pZHhfbWFzayA9PSAoMSA8PCBzYmFuZC0+bl9iaXRyYXRlcykgLSAxKQorCQl0eHJjLm1heF9yYXRlX2lkeCA9IC0xOworCWVsc2UKKwkJdHhyYy5tYXhfcmF0ZV9pZHggPSBmbHModHhyYy5yYXRlX2lkeF9tYXNrKSAtIDE7CisJdHhyYy5hcCA9IHRydWU7CisJcmF0ZV9jb250cm9sX2dldF9yYXRlKHNkYXRhLCBOVUxMLCAmdHhyYyk7CiAKIAlpbmZvLT5jb250cm9sLnZpZiA9IHZpZjsKIAotCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfTk9fQUNLOwogCWluZm8tPmZsYWdzIHw9IElFRUU4MDIxMV9UWF9DVExfQ0xFQVJfUFNfRklMVDsKIAlpbmZvLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfQ1RMX0FTU0lHTl9TRVE7CiAgb3V0OgpAQCAtMjE5Miw2ICsyMjQ2LDEzNCBAQAogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfYmVhY29uX2dldF90aW0pOwogCitzdHJ1Y3Qgc2tfYnVmZiAqaWVlZTgwMjExX3BzcG9sbF9nZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2Q7CisJc3RydWN0IGllZWU4MDIxMV9wc3BvbGwgKnBzcG9sbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCisJaWYgKFdBUk5fT04odmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pKQorCQlyZXR1cm4gTlVMTDsKKworCXNkYXRhID0gdmlmX3RvX3NkYXRhKHZpZik7CisJaWZtZ2QgPSAmc2RhdGEtPnUubWdkOworCWxvY2FsID0gc2RhdGEtPmxvY2FsOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyBzaXplb2YoKnBzcG9sbCkpOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgIgorCQkgICAgICAgInBzcG9sbCB0ZW1wbGF0ZVxuIiwgc2RhdGEtPm5hbWUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCisJcHNwb2xsID0gKHN0cnVjdCBpZWVlODAyMTFfcHNwb2xsICopIHNrYl9wdXQoc2tiLCBzaXplb2YoKnBzcG9sbCkpOworCW1lbXNldChwc3BvbGwsIDAsIHNpemVvZigqcHNwb2xsKSk7CisJcHNwb2xsLT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX0NUTCB8CisJCQkJCSAgICBJRUVFODAyMTFfU1RZUEVfUFNQT0xMKTsKKwlwc3BvbGwtPmFpZCA9IGNwdV90b19sZTE2KGlmbWdkLT5haWQpOworCisJLyogYWlkIGluIFBTLVBvbGwgaGFzIGl0cyB0d28gTVNCcyBlYWNoIHNldCB0byAxICovCisJcHNwb2xsLT5haWQgfD0gY3B1X3RvX2xlMTYoMSA8PCAxNSB8IDEgPDwgMTQpOworCisJbWVtY3B5KHBzcG9sbC0+YnNzaWQsIGlmbWdkLT5ic3NpZCwgRVRIX0FMRU4pOworCW1lbWNweShwc3BvbGwtPnRhLCB2aWYtPmFkZHIsIEVUSF9BTEVOKTsKKworCXJldHVybiBza2I7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9wc3BvbGxfZ2V0KTsKKworc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9udWxsZnVuY19nZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IGllZWU4MDIxMV9oZHJfM2FkZHIgKm51bGxmdW5jOworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2Q7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWw7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKworCWlmIChXQVJOX09OKHZpZi0+dHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlzZGF0YSA9IHZpZl90b19zZGF0YSh2aWYpOworCWlmbWdkID0gJnNkYXRhLT51Lm1nZDsKKwlsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKworCXNrYiA9IGRldl9hbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsgc2l6ZW9mKCpudWxsZnVuYykpOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgbnVsbGZ1bmMgIgorCQkgICAgICAgInRlbXBsYXRlXG4iLCBzZGF0YS0+bmFtZSk7CisJCXJldHVybiBOVUxMOworCX0KKwlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CisKKwludWxsZnVuYyA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKSBza2JfcHV0KHNrYiwKKwkJCQkJCQkgIHNpemVvZigqbnVsbGZ1bmMpKTsKKwltZW1zZXQobnVsbGZ1bmMsIDAsIHNpemVvZigqbnVsbGZ1bmMpKTsKKwludWxsZnVuYy0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9EQVRBIHwKKwkJCQkJICAgICAgSUVFRTgwMjExX1NUWVBFX05VTExGVU5DIHwKKwkJCQkJICAgICAgSUVFRTgwMjExX0ZDVExfVE9EUyk7CisJbWVtY3B5KG51bGxmdW5jLT5hZGRyMSwgaWZtZ2QtPmJzc2lkLCBFVEhfQUxFTik7CisJbWVtY3B5KG51bGxmdW5jLT5hZGRyMiwgdmlmLT5hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG51bGxmdW5jLT5hZGRyMywgaWZtZ2QtPmJzc2lkLCBFVEhfQUxFTik7CisKKwlyZXR1cm4gc2tiOworfQorRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfbnVsbGZ1bmNfZ2V0KTsKKworc3RydWN0IHNrX2J1ZmYgKmllZWU4MDIxMV9wcm9iZXJlcV9nZXQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYsCisJCQkJICAgICAgIGNvbnN0IHU4ICpzc2lkLCBzaXplX3Qgc3NpZF9sZW4sCisJCQkJICAgICAgIGNvbnN0IHU4ICppZSwgc2l6ZV90IGllX2xlbikKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqaGRyOworCXN0cnVjdCBza19idWZmICpza2I7CisJc2l6ZV90IGllX3NzaWRfbGVuOworCXU4ICpwb3M7CisKKwlzZGF0YSA9IHZpZl90b19zZGF0YSh2aWYpOworCWxvY2FsID0gc2RhdGEtPmxvY2FsOworCWllX3NzaWRfbGVuID0gMiArIHNzaWRfbGVuOworCisJc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyBzaXplb2YoKmhkcikgKworCQkJICAgIGllX3NzaWRfbGVuICsgaWVfbGVuKTsKKwlpZiAoIXNrYikgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGZhaWxlZCB0byBhbGxvY2F0ZSBidWZmZXIgZm9yIHByb2JlICIKKwkJICAgICAgICJyZXF1ZXN0IHRlbXBsYXRlXG4iLCBzZGF0YS0+bmFtZSk7CisJCXJldHVybiBOVUxMOworCX0KKworCXNrYl9yZXNlcnZlKHNrYiwgbG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tKTsKKworCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkcl8zYWRkciAqKSBza2JfcHV0KHNrYiwgc2l6ZW9mKCpoZHIpKTsKKwltZW1zZXQoaGRyLCAwLCBzaXplb2YoKmhkcikpOworCWhkci0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKKwkJCQkJIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVEpOworCW1lbXNldChoZHItPmFkZHIxLCAweGZmLCBFVEhfQUxFTik7CisJbWVtY3B5KGhkci0+YWRkcjIsIHZpZi0+YWRkciwgRVRIX0FMRU4pOworCW1lbXNldChoZHItPmFkZHIzLCAweGZmLCBFVEhfQUxFTik7CisKKwlwb3MgPSBza2JfcHV0KHNrYiwgaWVfc3NpZF9sZW4pOworCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7CisJKnBvcysrID0gc3NpZF9sZW47CisJaWYgKHNzaWQpCisJCW1lbWNweShwb3MsIHNzaWQsIHNzaWRfbGVuKTsKKwlwb3MgKz0gc3NpZF9sZW47CisKKwlpZiAoaWUpIHsKKwkJcG9zID0gc2tiX3B1dChza2IsIGllX2xlbik7CisJCW1lbWNweShwb3MsIGllLCBpZV9sZW4pOworCX0KKworCXJldHVybiBza2I7Cit9CitFWFBPUlRfU1lNQk9MKGllZWU4MDIxMV9wcm9iZXJlcV9nZXQpOworCiB2b2lkIGllZWU4MDIxMV9ydHNfZ2V0KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAogCQkgICAgICAgY29uc3Qgdm9pZCAqZnJhbWUsIHNpemVfdCBmcmFtZV9sZW4sCiAJCSAgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X2luZm8gKmZyYW1lX3R4Y3RsLApkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3V0aWwuYyBiL25ldC9tYWM4MDIxMS91dGlsLmMKaW5kZXggMzg0ODE0MC4uYzQ1MzIyNiAxMDA2NDQKLS0tIGEvbmV0L21hYzgwMjExL3V0aWwuYworKysgYi9uZXQvbWFjODAyMTEvdXRpbC5jCkBAIC0xOCw3ICsxOCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KLSNpbmNsdWRlIDxsaW51eC93aXJlbGVzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CiAjaW5jbHVkZSA8bmV0L25ldF9uYW1lc3BhY2UuaD4KQEAgLTQ4MCw4ICs0NzksOCBAQAogCQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6CiAJCQlicmVhazsKIAkJfQotCQlpZiAobmV0aWZfcnVubmluZyhzZGF0YS0+ZGV2KSkKLQkJCWl0ZXJhdG9yKGRhdGEsIHNkYXRhLT5kZXYtPmRldl9hZGRyLAorCQlpZiAoaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQorCQkJaXRlcmF0b3IoZGF0YSwgc2RhdGEtPnZpZi5hZGRyLAogCQkJCSAmc2RhdGEtPnZpZik7CiAJfQogCkBAIC01MTQsOCArNTEzLDggQEAKIAkJY2FzZSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UOgogCQkJYnJlYWs7CiAJCX0KLQkJaWYgKG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCi0JCQlpdGVyYXRvcihkYXRhLCBzZGF0YS0+ZGV2LT5kZXZfYWRkciwKKwkJaWYgKGllZWU4MDIxMV9zZGF0YV9ydW5uaW5nKHNkYXRhKSkKKwkJCWl0ZXJhdG9yKGRhdGEsIHNkYXRhLT52aWYuYWRkciwKIAkJCQkgJnNkYXRhLT52aWYpOwogCX0KIApAQCAtNzkzLDYgKzc5Miw4IEBACiAJCQlicmVhazsKIAkJfQogCisJCXFwYXJhbS51YXBzZCA9IGZhbHNlOworCiAJCWRydl9jb25mX3R4KGxvY2FsLCBxdWV1ZSwgJnFwYXJhbSk7CiAJfQogfQpAQCAtODYwLDcgKzg2MSw3IEBACiAJCQkgICAgc2l6ZW9mKCptZ210KSArIDYgKyBleHRyYV9sZW4pOwogCWlmICghc2tiKSB7CiAJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgYXV0aCAiCi0JCSAgICAgICAiZnJhbWVcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+bmFtZSk7CiAJCXJldHVybjsKIAl9CiAJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOwpAQCAtODcwLDcgKzg3MSw3IEBACiAJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKIAkJCQkJICBJRUVFODAyMTFfU1RZUEVfQVVUSCk7CiAJbWVtY3B5KG1nbXQtPmRhLCBic3NpZCwgRVRIX0FMRU4pOwotCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPmRldi0+ZGV2X2FkZHIsIEVUSF9BTEVOKTsKKwltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT52aWYuYWRkciwgRVRIX0FMRU4pOwogCW1lbWNweShtZ210LT5ic3NpZCwgYnNzaWQsIEVUSF9BTEVOKTsKIAltZ210LT51LmF1dGguYXV0aF9hbGcgPSBjcHVfdG9fbGUxNihhdXRoX2FsZyk7CiAJbWdtdC0+dS5hdXRoLmF1dGhfdHJhbnNhY3Rpb24gPSBjcHVfdG9fbGUxNih0cmFuc2FjdGlvbik7CkBAIC04OTMsNDMgKzg5NCw4NyBAQAogCQkJICAgICBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9zdXBwb3J0ZWRfYmFuZCAqc2JhbmQ7Ci0JdTggKnBvcywgKnN1cHBfcmF0ZXNfbGVuLCAqZXN1cHBfcmF0ZXNfbGVuID0gTlVMTDsKLQlpbnQgaTsKKwl1OCAqcG9zOworCXNpemVfdCBvZmZzZXQgPSAwLCBub2Zmc2V0OworCWludCBzdXBwX3JhdGVzX2xlbiwgaTsKIAogCXNiYW5kID0gbG9jYWwtPmh3LndpcGh5LT5iYW5kc1tiYW5kXTsKIAogCXBvcyA9IGJ1ZmZlcjsKIAorCXN1cHBfcmF0ZXNfbGVuID0gbWluX3QoaW50LCBzYmFuZC0+bl9iaXRyYXRlcywgOCk7CisKIAkqcG9zKysgPSBXTEFOX0VJRF9TVVBQX1JBVEVTOwotCXN1cHBfcmF0ZXNfbGVuID0gcG9zOwotCSpwb3MrKyA9IDA7CisJKnBvcysrID0gc3VwcF9yYXRlc19sZW47CiAKLQlmb3IgKGkgPSAwOyBpIDwgc2JhbmQtPm5fYml0cmF0ZXM7IGkrKykgewotCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnJhdGUgPSAmc2JhbmQtPmJpdHJhdGVzW2ldOworCWZvciAoaSA9IDA7IGkgPCBzdXBwX3JhdGVzX2xlbjsgaSsrKSB7CisJCWludCByYXRlID0gc2JhbmQtPmJpdHJhdGVzW2ldLmJpdHJhdGU7CisJCSpwb3MrKyA9ICh1OCkgKHJhdGUgLyA1KTsKKwl9CiAKLQkJaWYgKGVzdXBwX3JhdGVzX2xlbikgewotCQkJKmVzdXBwX3JhdGVzX2xlbiArPSAxOwotCQl9IGVsc2UgaWYgKCpzdXBwX3JhdGVzX2xlbiA9PSA4KSB7Ci0JCQkqcG9zKysgPSBXTEFOX0VJRF9FWFRfU1VQUF9SQVRFUzsKLQkJCWVzdXBwX3JhdGVzX2xlbiA9IHBvczsKLQkJCSpwb3MrKyA9IDE7Ci0JCX0gZWxzZQotCQkJKnN1cHBfcmF0ZXNfbGVuICs9IDE7CisJLyogaW5zZXJ0ICJyZXF1ZXN0IGluZm9ybWF0aW9uIiBpZiBpbiBjdXN0b20gSUVzICovCisJaWYgKGllICYmIGllX2xlbikgeworCQlzdGF0aWMgY29uc3QgdTggYmVmb3JlX2V4dHJhdGVzW10gPSB7CisJCQlXTEFOX0VJRF9TU0lELAorCQkJV0xBTl9FSURfU1VQUF9SQVRFUywKKwkJCVdMQU5fRUlEX1JFUVVFU1QsCisJCX07CisJCW5vZmZzZXQgPSBpZWVlODAyMTFfaWVfc3BsaXQoaWUsIGllX2xlbiwKKwkJCQkJICAgICBiZWZvcmVfZXh0cmF0ZXMsCisJCQkJCSAgICAgQVJSQVlfU0laRShiZWZvcmVfZXh0cmF0ZXMpLAorCQkJCQkgICAgIG9mZnNldCk7CisJCW1lbWNweShwb3MsIGllICsgb2Zmc2V0LCBub2Zmc2V0IC0gb2Zmc2V0KTsKKwkJcG9zICs9IG5vZmZzZXQgLSBvZmZzZXQ7CisJCW9mZnNldCA9IG5vZmZzZXQ7CisJfQogCi0JCSpwb3MrKyA9IHJhdGUtPmJpdHJhdGUgLyA1OworCWlmIChzYmFuZC0+bl9iaXRyYXRlcyA+IGkpIHsKKwkJKnBvcysrID0gV0xBTl9FSURfRVhUX1NVUFBfUkFURVM7CisJCSpwb3MrKyA9IHNiYW5kLT5uX2JpdHJhdGVzIC0gaTsKKworCQlmb3IgKDsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKKwkJCWludCByYXRlID0gc2JhbmQtPmJpdHJhdGVzW2ldLmJpdHJhdGU7CisJCQkqcG9zKysgPSAodTgpIChyYXRlIC8gNSk7CisJCX0KKwl9CisKKwkvKiBpbnNlcnQgY3VzdG9tIElFcyB0aGF0IGdvIGJlZm9yZSBIVCAqLworCWlmIChpZSAmJiBpZV9sZW4pIHsKKwkJc3RhdGljIGNvbnN0IHU4IGJlZm9yZV9odFtdID0geworCQkJV0xBTl9FSURfU1NJRCwKKwkJCVdMQU5fRUlEX1NVUFBfUkFURVMsCisJCQlXTEFOX0VJRF9SRVFVRVNULAorCQkJV0xBTl9FSURfRVhUX1NVUFBfUkFURVMsCisJCQlXTEFOX0VJRF9EU19QQVJBTVMsCisJCQlXTEFOX0VJRF9TVVBQT1JURURfUkVHVUxBVE9SWV9DTEFTU0VTLAorCQl9OworCQlub2Zmc2V0ID0gaWVlZTgwMjExX2llX3NwbGl0KGllLCBpZV9sZW4sCisJCQkJCSAgICAgYmVmb3JlX2h0LCBBUlJBWV9TSVpFKGJlZm9yZV9odCksCisJCQkJCSAgICAgb2Zmc2V0KTsKKwkJbWVtY3B5KHBvcywgaWUgKyBvZmZzZXQsIG5vZmZzZXQgLSBvZmZzZXQpOworCQlwb3MgKz0gbm9mZnNldCAtIG9mZnNldDsKKwkJb2Zmc2V0ID0gbm9mZnNldDsKIAl9CiAKIAlpZiAoc2JhbmQtPmh0X2NhcC5odF9zdXBwb3J0ZWQpIHsKLQkJX19sZTE2IHRtcCA9IGNwdV90b19sZTE2KHNiYW5kLT5odF9jYXAuY2FwKTsKKwkJdTE2IGNhcCA9IHNiYW5kLT5odF9jYXAuY2FwOworCQlfX2xlMTYgdG1wOworCisJCWlmIChpZWVlODAyMTFfZGlzYWJsZV80MG1oel8yNGdoeiAmJgorCQkgICAgc2JhbmQtPmJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikgeworCQkJY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NVUF9XSURUSF8yMF80MDsKKwkJCWNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9TR0lfNDA7CisJCX0KIAogCQkqcG9zKysgPSBXTEFOX0VJRF9IVF9DQVBBQklMSVRZOwogCQkqcG9zKysgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApOwogCQltZW1zZXQocG9zLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApKTsKKwkJdG1wID0gY3B1X3RvX2xlMTYoY2FwKTsKIAkJbWVtY3B5KHBvcywgJnRtcCwgc2l6ZW9mKHUxNikpOwogCQlwb3MgKz0gc2l6ZW9mKHUxNik7Ci0JCS8qIFRPRE86IG5lZWRzIGEgZGVmaW5lIGhlcmUgZm9yIDw8IDIgKi8KIAkJKnBvcysrID0gc2JhbmQtPmh0X2NhcC5hbXBkdV9mYWN0b3IgfAotCQkJIChzYmFuZC0+aHRfY2FwLmFtcGR1X2RlbnNpdHkgPDwgMik7CisJCQkgKHNiYW5kLT5odF9jYXAuYW1wZHVfZGVuc2l0eSA8PAorCQkJCUlFRUU4MDIxMV9IVF9BTVBEVV9QQVJNX0RFTlNJVFlfU0hJRlQpOwogCQltZW1jcHkocG9zLCAmc2JhbmQtPmh0X2NhcC5tY3MsIHNpemVvZihzYmFuZC0+aHRfY2FwLm1jcykpOwogCQlwb3MgKz0gc2l6ZW9mKHNiYW5kLT5odF9jYXAubWNzKTsKIAkJcG9zICs9IDIgKyA0ICsgMTsgLyogZXh0IGluZm8sIEJGIGNhcCwgYW50c2VsICovCkBAIC05NDAsOSArOTg1LDExIEBACiAJICogdGhhdCBjYWxjdWxhdGVzIGxvY2FsLT5zY2FuX2llc19sZW4uCiAJICovCiAKLQlpZiAoaWUpIHsKLQkJbWVtY3B5KHBvcywgaWUsIGllX2xlbik7Ci0JCXBvcyArPSBpZV9sZW47CisJLyogYWRkIGFueSByZW1haW5pbmcgY3VzdG9tIElFcyAqLworCWlmIChpZSAmJiBpZV9sZW4pIHsKKwkJbm9mZnNldCA9IGllX2xlbjsKKwkJbWVtY3B5KHBvcywgaWUgKyBvZmZzZXQsIG5vZmZzZXQgLSBvZmZzZXQpOworCQlwb3MgKz0gbm9mZnNldCAtIG9mZnNldDsKIAl9CiAKIAlyZXR1cm4gcG9zIC0gYnVmZmVyOwpAQCAtOTU1LDQwICsxMDAyLDMzIEBACiAJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7Ci0JdTggKnBvczsKKwlzaXplX3QgYnVmX2xlbjsKKwl1OCAqYnVmOwogCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20gKyBzaXplb2YoKm1nbXQpICsgMjAwICsKLQkJCSAgICBpZV9sZW4pOwotCWlmICghc2tiKSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgcHJvYmUgIgotCQkgICAgICAgInJlcXVlc3RcbiIsIHNkYXRhLT5kZXYtPm5hbWUpOworCS8qIEZJWE1FOiBjb21lIHVwIHdpdGggYSBwcm9wZXIgdmFsdWUgKi8KKwlidWYgPSBrbWFsbG9jKDIwMCArIGllX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBmYWlsZWQgdG8gYWxsb2NhdGUgdGVtcG9yYXJ5IElFICIKKwkJICAgICAgICJidWZmZXJcbiIsIHNkYXRhLT5uYW1lKTsKIAkJcmV0dXJuOwogCX0KLQlza2JfcmVzZXJ2ZShza2IsIGxvY2FsLT5ody5leHRyYV90eF9oZWFkcm9vbSk7CiAKLQltZ210ID0gKHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqKSBza2JfcHV0KHNrYiwgMjQpOwotCW1lbXNldChtZ210LCAwLCAyNCk7Ci0JbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKLQkJCQkJICBJRUVFODAyMTFfU1RZUEVfUFJPQkVfUkVRKTsKLQltZW1jcHkobWdtdC0+c2EsIHNkYXRhLT5kZXYtPmRldl9hZGRyLCBFVEhfQUxFTik7CisJYnVmX2xlbiA9IGllZWU4MDIxMV9idWlsZF9wcmVxX2llcyhsb2NhbCwgYnVmLCBpZSwgaWVfbGVuLAorCQkJCQkgICBsb2NhbC0+aHcuY29uZi5jaGFubmVsLT5iYW5kKTsKKworCXNrYiA9IGllZWU4MDIxMV9wcm9iZXJlcV9nZXQoJmxvY2FsLT5odywgJnNkYXRhLT52aWYsCisJCQkJICAgICBzc2lkLCBzc2lkX2xlbiwKKwkJCQkgICAgIGJ1ZiwgYnVmX2xlbik7CisKIAlpZiAoZHN0KSB7CisJCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKIAkJbWVtY3B5KG1nbXQtPmRhLCBkc3QsIEVUSF9BTEVOKTsKIAkJbWVtY3B5KG1nbXQtPmJzc2lkLCBkc3QsIEVUSF9BTEVOKTsKLQl9IGVsc2UgewotCQltZW1zZXQobWdtdC0+ZGEsIDB4ZmYsIEVUSF9BTEVOKTsKLQkJbWVtc2V0KG1nbXQtPmJzc2lkLCAweGZmLCBFVEhfQUxFTik7CiAJfQotCXBvcyA9IHNrYl9wdXQoc2tiLCAyICsgc3NpZF9sZW4pOwotCSpwb3MrKyA9IFdMQU5fRUlEX1NTSUQ7Ci0JKnBvcysrID0gc3NpZF9sZW47Ci0JbWVtY3B5KHBvcywgc3NpZCwgc3NpZF9sZW4pOwotCXBvcyArPSBzc2lkX2xlbjsKLQotCXNrYl9wdXQoc2tiLCBpZWVlODAyMTFfYnVpbGRfcHJlcV9pZXMobG9jYWwsIHBvcywgaWUsIGllX2xlbiwKLQkJCQkJICAgICAgbG9jYWwtPmh3LmNvbmYuY2hhbm5lbC0+YmFuZCkpOwogCiAJSUVFRTgwMjExX1NLQl9DQihza2IpLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOwogCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYik7CisJa2ZyZWUoYnVmKTsKIH0KIAogdTMyIGllZWU4MDIxMV9zdGFfZ2V0X3JhdGVzKHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsLApAQCAtMTAzMiwxOCArMTA3MiwxNiBAQAogCWllZWU4MDIxMV9sZWRfcmFkaW8obG9jYWwsIGZhbHNlKTsKIAogCWNhbmNlbF93b3JrX3N5bmMoJmxvY2FsLT5yZWNvbmZpZ19maWx0ZXIpOwotCWRydl9zdG9wKGxvY2FsKTsKIAogCWZsdXNoX3dvcmtxdWV1ZShsb2NhbC0+d29ya3F1ZXVlKTsKKwlkcnZfc3RvcChsb2NhbCk7CiB9CiAKIGludCBpZWVlODAyMTFfcmVjb25maWcoc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9odyAqaHcgPSAmbG9jYWwtPmh3OwogCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOwotCXN0cnVjdCBpZWVlODAyMTFfaWZfaW5pdF9jb25mIGNvbmY7CiAJc3RydWN0IHN0YV9pbmZvICpzdGE7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmVzOwogCiAJaWYgKGxvY2FsLT5zdXNwZW5kZWQpCkBAIC0xMDYxLDcgKzEwOTksNyBAQAogCQlpZiAocmVzKSB7CiAJCQlXQVJOKGxvY2FsLT5zdXNwZW5kZWQsICJIYXJ3YXJlIGJlY2FtZSB1bmF2YWlsYWJsZSAiCiAJCQkgICAgICJ1cG9uIHJlc3VtZS4gVGhpcyBpcyBjb3VsZCBiZSBhIHNvZnR3YXJlIGlzc3VlIgotCQkJICAgICAicHJpb3IgdG8gc3VzcGVuZCBvciBhIGhhcndhcmUgaXNzdWVcbiIpOworCQkJICAgICAicHJpb3IgdG8gc3VzcGVuZCBvciBhIGhhcmR3YXJlIGlzc3VlXG4iKTsKIAkJCXJldHVybiByZXM7CiAJCX0KIApAQCAtMTA3MiwyOSArMTExMCwyNCBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewogCQlpZiAoc2RhdGEtPnZpZi50eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4gJiYKIAkJICAgIHNkYXRhLT52aWYudHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NT05JVE9SICYmCi0JCSAgICBuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKSB7Ci0JCQljb25mLnZpZiA9ICZzZGF0YS0+dmlmOwotCQkJY29uZi50eXBlID0gc2RhdGEtPnZpZi50eXBlOwotCQkJY29uZi5tYWNfYWRkciA9IHNkYXRhLT5kZXYtPmRldl9hZGRyOwotCQkJcmVzID0gZHJ2X2FkZF9pbnRlcmZhY2UobG9jYWwsICZjb25mKTsKLQkJfQorCQkgICAgaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQorCQkJcmVzID0gZHJ2X2FkZF9pbnRlcmZhY2UobG9jYWwsICZzZGF0YS0+dmlmKTsKIAl9CiAKIAkvKiBhZGQgU1RBcyBiYWNrICovCi0JaWYgKGxvY2FsLT5vcHMtPnN0YV9ub3RpZnkpIHsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmxvY2FsLT5zdGFfbG9jaywgZmxhZ3MpOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgeworCW11dGV4X2xvY2soJmxvY2FsLT5zdGFfbXR4KTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN0YSwgJmxvY2FsLT5zdGFfbGlzdCwgbGlzdCkgeworCQlpZiAoc3RhLT51cGxvYWRlZCkgewogCQkJc2RhdGEgPSBzdGEtPnNkYXRhOwogCQkJaWYgKHNkYXRhLT52aWYudHlwZSA9PSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKQogCQkJCXNkYXRhID0gY29udGFpbmVyX29mKHNkYXRhLT5ic3MsCiAJCQkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSwKIAkJCQkJICAgICB1LmFwKTsKIAotCQkJZHJ2X3N0YV9ub3RpZnkobG9jYWwsICZzZGF0YS0+dmlmLCBTVEFfTk9USUZZX0FERCwKLQkJCQkgICAgICAgJnN0YS0+c3RhKTsKKwkJCVdBUk5fT04oZHJ2X3N0YV9hZGQobG9jYWwsIHNkYXRhLCAmc3RhLT5zdGEpKTsKIAkJfQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKIAl9CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+c3RhX210eCk7CiAKIAkvKiBDbGVhciBTdXNwZW5kIHN0YXRlIHNvIHRoYXQgQUREQkEgcmVxdWVzdHMgY2FuIGJlIHByb2Nlc3NlZCAqLwogCkBAIC0xMTE5LDcgKzExNTIsNyBAQAogCS8qIEZpbmFsbHkgYWxzbyByZWNvbmZpZ3VyZSBhbGwgdGhlIEJTUyBpbmZvcm1hdGlvbiAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkgewogCQl1MzIgY2hhbmdlZCA9IH4wOwotCQlpZiAoIW5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCWlmICghaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcoc2RhdGEpKQogCQkJY29udGludWU7CiAJCXN3aXRjaCAoc2RhdGEtPnZpZi50eXBlKSB7CiAJCWNhc2UgTkw4MDIxMV9JRlRZUEVfU1RBVElPTjoKQEAgLTExNDUsOSArMTE3OCwxNyBAQAogCQl9CiAJfQogCisJcmN1X3JlYWRfbG9jaygpOworCWlmIChody0+ZmxhZ3MgJiBJRUVFODAyMTFfSFdfQU1QRFVfQUdHUkVHQVRJT04pIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KSB7CisJCQlpZWVlODAyMTFfc3RhX3RlYXJfZG93bl9CQV9zZXNzaW9ucyhzdGEpOworCQl9CisJfQorCXJjdV9yZWFkX3VubG9jaygpOworCiAJLyogYWRkIGJhY2sga2V5cyAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc2RhdGEsICZsb2NhbC0+aW50ZXJmYWNlcywgbGlzdCkKLQkJaWYgKG5ldGlmX3J1bm5pbmcoc2RhdGEtPmRldikpCisJCWlmIChpZWVlODAyMTFfc2RhdGFfcnVubmluZyhzZGF0YSkpCiAJCQlpZWVlODAyMTFfZW5hYmxlX2tleXMoc2RhdGEpOwogCiAJaWVlZTgwMjExX3dha2VfcXVldWVzX2J5X3JlYXNvbihodywKQEAgLTExODQsMTMgKzEyMjUsMTQzIEBACiAKIAlhZGRfdGltZXIoJmxvY2FsLT5zdGFfY2xlYW51cCk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmbG9jYWwtPnN0YV9sb2NrLCBmbGFncyk7CisJbXV0ZXhfbG9jaygmbG9jYWwtPnN0YV9tdHgpOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoc3RhLCAmbG9jYWwtPnN0YV9saXN0LCBsaXN0KQogCQltZXNoX3BsaW5rX3Jlc3RhcnQoc3RhKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsb2NhbC0+c3RhX2xvY2ssIGZsYWdzKTsKKwltdXRleF91bmxvY2soJmxvY2FsLT5zdGFfbXR4KTsKICNlbHNlCiAJV0FSTl9PTigxKTsKICNlbmRpZgogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGNoZWNrX21nZF9zbXBzKHN0cnVjdCBpZWVlODAyMTFfaWZfbWFuYWdlZCAqaWZtZ2QsCisJCQkgIGVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSAqc21wc19tb2RlKQoreworCWlmIChpZm1nZC0+YXNzb2NpYXRlZCkgeworCQkqc21wc19tb2RlID0gaWZtZ2QtPmFwX3NtcHM7CisKKwkJaWYgKCpzbXBzX21vZGUgPT0gSUVFRTgwMjExX1NNUFNfQVVUT01BVElDKSB7CisJCQlpZiAoaWZtZ2QtPnBvd2Vyc2F2ZSkKKwkJCQkqc21wc19tb2RlID0gSUVFRTgwMjExX1NNUFNfRFlOQU1JQzsKKwkJCWVsc2UKKwkJCQkqc21wc19tb2RlID0gSUVFRTgwMjExX1NNUFNfT0ZGOworCQl9CisKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIG11c3QgaG9sZCBpZmxpc3RfbXR4ICovCit2b2lkIGllZWU4MDIxMV9yZWNhbGNfc21wcyhzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCSAgIHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKmZvcnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhOworCWVudW0gaWVlZTgwMjExX3NtcHNfbW9kZSBzbXBzX21vZGUgPSBJRUVFODAyMTFfU01QU19PRkY7CisJaW50IGNvdW50ID0gMDsKKworCWlmIChmb3JzZGF0YSkKKwkJV0FSTl9PTighbXV0ZXhfaXNfbG9ja2VkKCZmb3JzZGF0YS0+dS5tZ2QubXR4KSk7CisKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmxvY2FsLT5pZmxpc3RfbXR4KSk7CisKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgaW1wcm92ZWQgdG8gaGFuZGxlIG11bHRpcGxlCisJICogaW50ZXJmYWNlcyBiZXR0ZXIsIGJ1dCByaWdodCBub3cgaXQgbWFrZXMgYW55CisJICogbm9uLXN0YXRpb24gaW50ZXJmYWNlcyBmb3JjZSBTTSBQUyB0byBiZSB0dXJuZWQKKwkgKiBvZmYuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBzdGF0aW9uIGludGVyZmFjZXMgaXQKKwkgKiBjb3VsZCBhbHNvIHVzZSB0aGUgYmVzdCBwb3NzaWJsZSBtb2RlLCBlLmcuIGlmCisJICogb25lIGlzIGluIHN0YXRpYyBhbmQgdGhlIG90aGVyIGluIGR5bmFtaWMgdGhlbgorCSAqIGR5bmFtaWMgaXMgb2suCisJICovCisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkYXRhLCAmbG9jYWwtPmludGVyZmFjZXMsIGxpc3QpIHsKKwkJaWYgKCFuZXRpZl9ydW5uaW5nKHNkYXRhLT5kZXYpKQorCQkJY29udGludWU7CisJCWlmIChzZGF0YS0+dmlmLnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJCWdvdG8gc2V0OworCQlpZiAoc2RhdGEgIT0gZm9yc2RhdGEpIHsKKwkJCS8qCisJCQkgKiBUaGlzIG5lc3RlZCBpcyBvayAtLSB3ZSBhcmUgaG9sZGluZyB0aGUgaWZsaXN0X210eAorCQkJICogc28gY2FuJ3QgZ2V0IGhlcmUgdHdpY2Ugb3Igc28uIEJ1dCBpdCdzIHJlcXVpcmVkCisJCQkgKiBzaW5jZSBub3JtYWxseSB3ZSBhY3F1aXJlIGl0IGZpcnN0IGFuZCB0aGVuIHRoZQorCQkJICogaWZsaXN0X210eC4KKwkJCSAqLworCQkJbXV0ZXhfbG9ja19uZXN0ZWQoJnNkYXRhLT51Lm1nZC5tdHgsIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKKwkJCWNvdW50ICs9IGNoZWNrX21nZF9zbXBzKCZzZGF0YS0+dS5tZ2QsICZzbXBzX21vZGUpOworCQkJbXV0ZXhfdW5sb2NrKCZzZGF0YS0+dS5tZ2QubXR4KTsKKwkJfSBlbHNlCisJCQljb3VudCArPSBjaGVja19tZ2Rfc21wcygmc2RhdGEtPnUubWdkLCAmc21wc19tb2RlKTsKKworCQlpZiAoY291bnQgPiAxKSB7CisJCQlzbXBzX21vZGUgPSBJRUVFODAyMTFfU01QU19PRkY7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChzbXBzX21vZGUgPT0gbG9jYWwtPnNtcHNfbW9kZSkKKwkJcmV0dXJuOworCisgc2V0OgorCWxvY2FsLT5zbXBzX21vZGUgPSBzbXBzX21vZGU7CisJLyogY2hhbmdlZCBmbGFnIGlzIGF1dG8tZGV0ZWN0ZWQgZm9yIHRoaXMgKi8KKwlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCAwKTsKK30KKworc3RhdGljIGJvb2wgaWVlZTgwMjExX2lkX2luX2xpc3QoY29uc3QgdTggKmlkcywgaW50IG5faWRzLCB1OCBpZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBuX2lkczsgaSsrKQorCQlpZiAoaWRzW2ldID09IGlkKQorCQkJcmV0dXJuIHRydWU7CisJcmV0dXJuIGZhbHNlOworfQorCisvKioKKyAqIGllZWU4MDIxMV9pZV9zcGxpdCAtIHNwbGl0IGFuIElFIGJ1ZmZlciBhY2NvcmRpbmcgdG8gb3JkZXJpbmcKKyAqCisgKiBAaWVzOiB0aGUgSUUgYnVmZmVyCisgKiBAaWVsZW46IHRoZSBsZW5ndGggb2YgdGhlIElFIGJ1ZmZlcgorICogQGlkczogYW4gYXJyYXkgd2l0aCBlbGVtZW50IElEcyB0aGF0IGFyZSBhbGxvd2VkIGJlZm9yZQorICoJdGhlIHNwbGl0CisgKiBAbl9pZHM6IHRoZSBzaXplIG9mIHRoZSBlbGVtZW50IElEIGFycmF5CisgKiBAb2Zmc2V0OiBvZmZzZXQgd2hlcmUgdG8gc3RhcnQgc3BsaXR0aW5nIGluIHRoZSBidWZmZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNwbGl0cyBhbiBJRSBidWZmZXIgYnkgdXBkYXRpbmcgdGhlIEBvZmZzZXQKKyAqIHZhcmlhYmxlIHRvIHBvaW50IHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgYnVmZmVyIHNob3VsZCBiZQorICogc3BsaXQuCisgKgorICogSXQgYXNzdW1lcyB0aGF0IHRoZSBnaXZlbiBJRSBidWZmZXIgaXMgd2VsbC1mb3JtZWQsIHRoaXMKKyAqIGhhcyB0byBiZSBndWFyYW50ZWVkIGJ5IHRoZSBjYWxsZXIhCisgKgorICogSXQgYWxzbyBhc3N1bWVzIHRoYXQgdGhlIElFcyBpbiB0aGUgYnVmZmVyIGFyZSBvcmRlcmVkCisgKiBjb3JyZWN0bHksIGlmIG5vdCB0aGUgcmVzdWx0IG9mIHVzaW5nIHRoaXMgZnVuY3Rpb24gd2lsbCBub3QKKyAqIGJlIG9yZGVyZWQgY29ycmVjdGx5IGVpdGhlciwgaS5lLiBpdCBkb2VzIG5vIHJlb3JkZXJpbmcuCisgKgorICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIG9mZnNldCB3aGVyZSB0aGUgbmV4dCBwYXJ0IG9mIHRoZQorICogYnVmZmVyIHN0YXJ0cywgd2hpY2ggbWF5IGJlIEBpZWxlbiBpZiB0aGUgZW50aXJlIChyZW1haW5kZXIpCisgKiBvZiB0aGUgYnVmZmVyIHNob3VsZCBiZSB1c2VkLgorICovCitzaXplX3QgaWVlZTgwMjExX2llX3NwbGl0KGNvbnN0IHU4ICppZXMsIHNpemVfdCBpZWxlbiwKKwkJCSAgY29uc3QgdTggKmlkcywgaW50IG5faWRzLCBzaXplX3Qgb2Zmc2V0KQoreworCXNpemVfdCBwb3MgPSBvZmZzZXQ7CisKKwl3aGlsZSAocG9zIDwgaWVsZW4gJiYgaWVlZTgwMjExX2lkX2luX2xpc3QoaWRzLCBuX2lkcywgaWVzW3Bvc10pKQorCQlwb3MgKz0gMiArIGllc1twb3MgKyAxXTsKKworCXJldHVybiBwb3M7Cit9CisKK3NpemVfdCBpZWVlODAyMTFfaWVfc3BsaXRfdmVuZG9yKGNvbnN0IHU4ICppZXMsIHNpemVfdCBpZWxlbiwgc2l6ZV90IG9mZnNldCkKK3sKKwlzaXplX3QgcG9zID0gb2Zmc2V0OworCisJd2hpbGUgKHBvcyA8IGllbGVuICYmIGllc1twb3NdICE9IFdMQU5fRUlEX1ZFTkRPUl9TUEVDSUZJQykKKwkJcG9zICs9IDIgKyBpZXNbcG9zICsgMV07CisKKwlyZXR1cm4gcG9zOworfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dlcC5jIGIvbmV0L21hYzgwMjExL3dlcC5jCmluZGV4IDI0NzEyM2YuLjVkNzQ1ZjIgMTAwNjQ0Ci0tLSBhL25ldC9tYWM4MDIxMS93ZXAuYworKysgYi9uZXQvbWFjODAyMTEvd2VwLmMKQEAgLTMwNSwyMCArMzA1LDE5IEBACiB7CiAJc3RydWN0IGllZWU4MDIxMV90eF9pbmZvICppbmZvID0gSUVFRTgwMjExX1NLQl9DQihza2IpOwogCi0JaWYgKCEodHgtPmtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkpIHsKKwlpZiAoIWluZm8tPmNvbnRyb2wuaHdfa2V5KSB7CiAJCWlmIChpZWVlODAyMTFfd2VwX2VuY3J5cHQodHgtPmxvY2FsLCBza2IsIHR4LT5rZXktPmNvbmYua2V5LAogCQkJCQkgIHR4LT5rZXktPmNvbmYua2V5bGVuLAogCQkJCQkgIHR4LT5rZXktPmNvbmYua2V5aWR4KSkKIAkJCXJldHVybiAtMTsKLQl9IGVsc2UgewotCQlpbmZvLT5jb250cm9sLmh3X2tleSA9ICZ0eC0+a2V5LT5jb25mOwotCQlpZiAodHgtPmtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVikgewotCQkJaWYgKCFpZWVlODAyMTFfd2VwX2FkZF9pdih0eC0+bG9jYWwsIHNrYiwKLQkJCQkJCSAgdHgtPmtleS0+Y29uZi5rZXlsZW4sCi0JCQkJCQkgIHR4LT5rZXktPmNvbmYua2V5aWR4KSkKLQkJCQlyZXR1cm4gLTE7Ci0JCX0KKwl9IGVsc2UgaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5LT5mbGFncyAmCisJCQlJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfSVYpIHsKKwkJaWYgKCFpZWVlODAyMTFfd2VwX2FkZF9pdih0eC0+bG9jYWwsIHNrYiwKKwkJCQkJICB0eC0+a2V5LT5jb25mLmtleWxlbiwKKwkJCQkJICB0eC0+a2V5LT5jb25mLmtleWlkeCkpCisJCQlyZXR1cm4gLTE7CiAJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93bWUuYyBiL25ldC9tYWM4MDIxMS93bWUuYwppbmRleCA3OWQ4ODdkLi4zNGU2ZDAyIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd21lLmMKKysrIGIvbmV0L21hYzgwMjExL3dtZS5jCkBAIC05Niw3ICs5Niw3IEBACiAJfQogCiAJaWYgKCFzdGEgJiYgcmEgJiYgIWlzX211bHRpY2FzdF9ldGhlcl9hZGRyKHJhKSkgewotCQlzdGEgPSBzdGFfaW5mb19nZXQobG9jYWwsIHJhKTsKKwkJc3RhID0gc3RhX2luZm9fZ2V0KHNkYXRhLCByYSk7CiAJCWlmIChzdGEpCiAJCQlzdGFfZmxhZ3MgPSBnZXRfc3RhX2ZsYWdzKHN0YSk7CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L21hYzgwMjExL3dvcmsuYyBiL25ldC9tYWM4MDIxMS93b3JrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUxZWEzMAotLS0gL2Rldi9udWxsCisrKyBiL25ldC9tYWM4MDIxMS93b3JrLmMKQEAgLTAsMCArMSwxMTAwIEBACisvKgorICogbWFjODAyMTEgd29yayBpbXBsZW1lbnRhdGlvbgorICoKKyAqIENvcHlyaWdodCAyMDAzLTIwMDgsIEpvdW5pIE1hbGluZW4gPGpAdzEuZmk+CisgKiBDb3B5cmlnaHQgMjAwNCwgSW5zdGFudDgwMiBOZXR3b3JrcywgSW5jLgorICogQ29weXJpZ2h0IDIwMDUsIERldmljZXNjYXBlIFNvZnR3YXJlLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNi0yMDA3CUppcmkgQmVuYyA8amJlbmNAc3VzZS5jej4KKyAqIENvcHlyaWdodCAyMDA3LCBNaWNoYWVsIFd1IDxmbGFtaW5naWNlQHNvdXJtaWxrLm5ldD4KKyAqIENvcHlyaWdodCAyMDA5LCBKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9za2J1ZmYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9hcnAuaD4KKyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NyYzMyLmg+CisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisjaW5jbHVkZSAiaWVlZTgwMjExX2kuaCIKKyNpbmNsdWRlICJyYXRlLmgiCisKKyNkZWZpbmUgSUVFRTgwMjExX0FVVEhfVElNRU9VVCAoSFogLyA1KQorI2RlZmluZSBJRUVFODAyMTFfQVVUSF9NQVhfVFJJRVMgMworI2RlZmluZSBJRUVFODAyMTFfQVNTT0NfVElNRU9VVCAoSFogLyA1KQorI2RlZmluZSBJRUVFODAyMTFfQVNTT0NfTUFYX1RSSUVTIDMKKyNkZWZpbmUgSUVFRTgwMjExX01BWF9QUk9CRV9UUklFUyA1CisKK2VudW0gd29ya19hY3Rpb24geworCVdPUktfQUNUX05PTkUsCisJV09SS19BQ1RfVElNRU9VVCwKKwlXT1JLX0FDVF9ET05FLAorfTsKKworCisvKiB1dGlscyAqLworc3RhdGljIGlubGluZSB2b2lkIEFTU0VSVF9XT1JLX01UWChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCkKK3sKKwlXQVJOX09OKCFtdXRleF9pc19sb2NrZWQoJmxvY2FsLT53b3JrX210eCkpOworfQorCisvKgorICogV2UgY2FuIGhhdmUgbXVsdGlwbGUgd29yayBpdGVtcyAoYW5kIGNvbm5lY3Rpb24gcHJvYmluZykKKyAqIHNjaGVkdWxpbmcgdGhpcyB0aW1lciwgYnV0IHdlIG5lZWQgdG8gdGFrZSBjYXJlIHRvIG9ubHkKKyAqIHJlc2NoZWR1bGUgaXQgd2hlbiBpdCBzaG91bGQgZmlyZSBfZWFybGllcl8gdGhhbiBpdCB3YXMKKyAqIGFza2VkIGZvciBiZWZvcmUsIG9yIGlmIGl0J3Mgbm90IHBlbmRpbmcgcmlnaHQgbm93LiBUaGlzCisgKiBmdW5jdGlvbiBlbnN1cmVzIHRoYXQuIE5vdGUgdGhhdCBpdCB0aGVuIGlzIHJlcXVpcmVkIHRvCisgKiBydW4gdGhpcyBmdW5jdGlvbiBmb3IgYWxsIHRpbWVvdXRzIGFmdGVyIHRoZSBmaXJzdCBvbmUKKyAqIGhhcyBoYXBwZW5lZCAtLSB0aGUgd29yayB0aGF0IHJ1bnMgZnJvbSB0aGlzIHRpbWVyIHdpbGwKKyAqIGRvIHRoYXQuCisgKi8KK3N0YXRpYyB2b2lkIHJ1bl9hZ2FpbihzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0KQoreworCUFTU0VSVF9XT1JLX01UWChsb2NhbCk7CisKKwlpZiAoIXRpbWVyX3BlbmRpbmcoJmxvY2FsLT53b3JrX3RpbWVyKSB8fAorCSAgICB0aW1lX2JlZm9yZSh0aW1lb3V0LCBsb2NhbC0+d29ya190aW1lci5leHBpcmVzKSkKKwkJbW9kX3RpbWVyKCZsb2NhbC0+d29ya190aW1lciwgdGltZW91dCk7Cit9CisKK3N0YXRpYyB2b2lkIHdvcmtfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQoreworCXN0cnVjdCBpZWVlODAyMTFfd29yayAqd2sgPQorCQljb250YWluZXJfb2YoaGVhZCwgc3RydWN0IGllZWU4MDIxMV93b3JrLCByY3VfaGVhZCk7CisKKwlrZnJlZSh3ayk7Cit9CisKK3ZvaWQgZnJlZV93b3JrKHN0cnVjdCBpZWVlODAyMTFfd29yayAqd2spCit7CisJY2FsbF9yY3UoJndrLT5yY3VfaGVhZCwgd29ya19mcmVlX3JjdSk7Cit9CisKK3N0YXRpYyBpbnQgaWVlZTgwMjExX2NvbXBhdGlibGVfcmF0ZXMoY29uc3QgdTggKnN1cHBfcmF0ZXMsIGludCBzdXBwX3JhdGVzX2xlbiwKKwkJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCwKKwkJCQkgICAgICB1MzIgKnJhdGVzKQoreworCWludCBpLCBqLCBjb3VudDsKKwkqcmF0ZXMgPSAwOworCWNvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgc3VwcF9yYXRlc19sZW47IGkrKykgeworCQlpbnQgcmF0ZSA9IChzdXBwX3JhdGVzW2ldICYgMHg3RikgKiA1OworCisJCWZvciAoaiA9IDA7IGogPCBzYmFuZC0+bl9iaXRyYXRlczsgaisrKQorCQkJaWYgKHNiYW5kLT5iaXRyYXRlc1tqXS5iaXRyYXRlID09IHJhdGUpIHsKKwkJCQkqcmF0ZXMgfD0gQklUKGopOworCQkJCWNvdW50Kys7CisJCQkJYnJlYWs7CisJCQl9CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCisvKiBmcmFtZSBzZW5kaW5nIGZ1bmN0aW9ucyAqLworCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfYWRkX2h0X2llKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU4ICpodF9pbmZvX2llLAorCQkJCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbm5lbCwKKwkJCQllbnVtIGllZWU4MDIxMV9zbXBzX21vZGUgc21wcykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKmh0X2luZm87CisJdTggKnBvczsKKwl1MzIgZmxhZ3MgPSBjaGFubmVsLT5mbGFnczsKKwl1MTYgY2FwID0gc2JhbmQtPmh0X2NhcC5jYXA7CisJX19sZTE2IHRtcDsKKworCWlmICghc2JhbmQtPmh0X2NhcC5odF9zdXBwb3J0ZWQpCisJCXJldHVybjsKKworCWlmICghaHRfaW5mb19pZSkKKwkJcmV0dXJuOworCisJaWYgKGh0X2luZm9faWVbMV0gPCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9pbmZvKSkKKwkJcmV0dXJuOworCisJaHRfaW5mbyA9IChzdHJ1Y3QgaWVlZTgwMjExX2h0X2luZm8gKikoaHRfaW5mb19pZSArIDIpOworCisJLyogZGV0ZXJtaW5lIGNhcGFiaWxpdHkgZmxhZ3MgKi8KKworCWlmIChpZWVlODAyMTFfZGlzYWJsZV80MG1oel8yNGdoeiAmJgorCSAgICBzYmFuZC0+YmFuZCA9PSBJRUVFODAyMTFfQkFORF8yR0haKSB7CisJCWNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7CisJCWNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9TR0lfNDA7CisJfQorCisJc3dpdGNoIChodF9pbmZvLT5odF9wYXJhbSAmIElFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX09GRlNFVCkgeworCWNhc2UgSUVFRTgwMjExX0hUX1BBUkFNX0NIQV9TRUNfQUJPVkU6CisJCWlmIChmbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0hUNDBQTFVTKSB7CisJCQljYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwOworCQkJY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NHSV80MDsKKwkJfQorCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9IVF9QQVJBTV9DSEFfU0VDX0JFTE9XOgorCQlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19IVDQwTUlOVVMpIHsKKwkJCWNhcCAmPSB+SUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDA7CisJCQljYXAgJj0gfklFRUU4MDIxMV9IVF9DQVBfU0dJXzQwOworCQl9CisJCWJyZWFrOworCX0KKworCS8qIHNldCBTTSBQUyBtb2RlIHByb3Blcmx5ICovCisJY2FwICY9IH5JRUVFODAyMTFfSFRfQ0FQX1NNX1BTOworCXN3aXRjaCAoc21wcykgeworCWNhc2UgSUVFRTgwMjExX1NNUFNfQVVUT01BVElDOgorCWNhc2UgSUVFRTgwMjExX1NNUFNfTlVNX01PREVTOgorCQlXQVJOX09OKDEpOworCWNhc2UgSUVFRTgwMjExX1NNUFNfT0ZGOgorCQljYXAgfD0gV0xBTl9IVF9DQVBfU01fUFNfRElTQUJMRUQgPDwKKwkJCUlFRUU4MDIxMV9IVF9DQVBfU01fUFNfU0hJRlQ7CisJCWJyZWFrOworCWNhc2UgSUVFRTgwMjExX1NNUFNfU1RBVElDOgorCQljYXAgfD0gV0xBTl9IVF9DQVBfU01fUFNfU1RBVElDIDw8CisJCQlJRUVFODAyMTFfSFRfQ0FQX1NNX1BTX1NISUZUOworCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9TTVBTX0RZTkFNSUM6CisJCWNhcCB8PSBXTEFOX0hUX0NBUF9TTV9QU19EWU5BTUlDIDw8CisJCQlJRUVFODAyMTFfSFRfQ0FQX1NNX1BTX1NISUZUOworCQlicmVhazsKKwl9CisKKwkvKiByZXNlcnZlIGFuZCBmaWxsIElFICovCisKKwlwb3MgPSBza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKSArIDIpOworCSpwb3MrKyA9IFdMQU5fRUlEX0hUX0NBUEFCSUxJVFk7CisJKnBvcysrID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKTsKKwltZW1zZXQocG9zLCAwLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9odF9jYXApKTsKKworCS8qIGNhcGFiaWxpdHkgZmxhZ3MgKi8KKwl0bXAgPSBjcHVfdG9fbGUxNihjYXApOworCW1lbWNweShwb3MsICZ0bXAsIHNpemVvZih1MTYpKTsKKwlwb3MgKz0gc2l6ZW9mKHUxNik7CisKKwkvKiBBTVBEVSBwYXJhbWV0ZXJzICovCisJKnBvcysrID0gc2JhbmQtPmh0X2NhcC5hbXBkdV9mYWN0b3IgfAorCQkgKHNiYW5kLT5odF9jYXAuYW1wZHVfZGVuc2l0eSA8PAorCQkJSUVFRTgwMjExX0hUX0FNUERVX1BBUk1fREVOU0lUWV9TSElGVCk7CisKKwkvKiBNQ1Mgc2V0ICovCisJbWVtY3B5KHBvcywgJnNiYW5kLT5odF9jYXAubWNzLCBzaXplb2Yoc2JhbmQtPmh0X2NhcC5tY3MpKTsKKwlwb3MgKz0gc2l6ZW9mKHNiYW5kLT5odF9jYXAubWNzKTsKKworCS8qIGV4dGVuZGVkIGNhcGFiaWxpdGllcyAqLworCXBvcyArPSBzaXplb2YoX19sZTE2KTsKKworCS8qIEJGIGNhcGFiaWxpdGllcyAqLworCXBvcyArPSBzaXplb2YoX19sZTMyKTsKKworCS8qIGFudGVubmEgc2VsZWN0aW9uICovCisJcG9zICs9IHNpemVvZih1OCk7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9zZW5kX2Fzc29jKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBza19idWZmICpza2I7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXU4ICpwb3MsIHFvc19pbmZvOworCWNvbnN0IHU4ICppZXM7CisJc2l6ZV90IG9mZnNldCA9IDAsIG5vZmZzZXQ7CisJaW50IGksIGxlbiwgY291bnQsIHJhdGVzX2xlbiwgc3VwcF9yYXRlc19sZW47CisJdTE2IGNhcGFiOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCXUzMiByYXRlcyA9IDA7CisKKwlzYmFuZCA9IGxvY2FsLT5ody53aXBoeS0+YmFuZHNbd2stPmNoYW4tPmJhbmRdOworCisJLyoKKwkgKiBHZXQgYWxsIHJhdGVzIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGFuZCB0aGUgQVAgYXMKKwkgKiBzb21lIEFQcyBkb24ndCBsaWtlIGdldHRpbmcgYSBzdXBlcnNldCBvZiB0aGVpciByYXRlcworCSAqIGluIHRoZSBhc3NvY2lhdGlvbiByZXF1ZXN0IChlLmcuIEQtTGluayBEQVAgMTM1MyBpbgorCSAqIGItb25seSBtb2RlKS4uLgorCSAqLworCXJhdGVzX2xlbiA9IGllZWU4MDIxMV9jb21wYXRpYmxlX3JhdGVzKHdrLT5hc3NvYy5zdXBwX3JhdGVzLAorCQkJCQkgICAgICAgd2stPmFzc29jLnN1cHBfcmF0ZXNfbGVuLAorCQkJCQkgICAgICAgc2JhbmQsICZyYXRlcyk7CisKKwlza2IgPSBhbGxvY19za2IobG9jYWwtPmh3LmV4dHJhX3R4X2hlYWRyb29tICsKKwkJCXNpemVvZigqbWdtdCkgKyAvKiBiaXQgdG9vIG11Y2ggYnV0IGRvZXNuJ3QgbWF0dGVyICovCisJCQkyICsgd2stPmFzc29jLnNzaWRfbGVuICsgLyogU1NJRCAqLworCQkJNCArIHJhdGVzX2xlbiArIC8qIChleHRlbmRlZCkgcmF0ZXMgKi8KKwkJCTQgKyAvKiBwb3dlciBjYXBhYmlsaXR5ICovCisJCQkyICsgMiAqIHNiYW5kLT5uX2NoYW5uZWxzICsgLyogc3VwcG9ydGVkIGNoYW5uZWxzICovCisJCQkyICsgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfaHRfY2FwKSArIC8qIEhUICovCisJCQl3ay0+aWVfbGVuICsgLyogZXh0cmEgSUVzICovCisJCQk5LCAvKiBXTU0gKi8KKwkJCUdGUF9LRVJORUwpOworCWlmICghc2tiKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogZmFpbGVkIHRvIGFsbG9jYXRlIGJ1ZmZlciBmb3IgYXNzb2MgIgorCQkgICAgICAgImZyYW1lXG4iLCBzZGF0YS0+bmFtZSk7CisJCXJldHVybjsKKwl9CisJc2tiX3Jlc2VydmUoc2tiLCBsb2NhbC0+aHcuZXh0cmFfdHhfaGVhZHJvb20pOworCisJY2FwYWIgPSBXTEFOX0NBUEFCSUxJVFlfRVNTOworCisJaWYgKHNiYW5kLT5iYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopIHsKKwkJaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXXzJHSFpfU0hPUlRfU0xPVF9JTkNBUEFCTEUpKQorCQkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1NIT1JUX1NMT1RfVElNRTsKKwkJaWYgKCEobG9jYWwtPmh3LmZsYWdzICYgSUVFRTgwMjExX0hXXzJHSFpfU0hPUlRfUFJFQU1CTEVfSU5DQVBBQkxFKSkKKwkJCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9TSE9SVF9QUkVBTUJMRTsKKwl9CisKKwlpZiAod2stPmFzc29jLmNhcGFiaWxpdHkgJiBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSkKKwkJY2FwYWIgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CisKKwlpZiAoKHdrLT5hc3NvYy5jYXBhYmlsaXR5ICYgV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQpICYmCisJICAgIChsb2NhbC0+aHcuZmxhZ3MgJiBJRUVFODAyMTFfSFdfU1BFQ1RSVU1fTUdNVCkpCisJCWNhcGFiIHw9IFdMQU5fQ0FQQUJJTElUWV9TUEVDVFJVTV9NR01UOworCisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiX3B1dChza2IsIDI0KTsKKwltZW1zZXQobWdtdCwgMCwgMjQpOworCW1lbWNweShtZ210LT5kYSwgd2stPmZpbHRlcl90YSwgRVRIX0FMRU4pOworCW1lbWNweShtZ210LT5zYSwgc2RhdGEtPnZpZi5hZGRyLCBFVEhfQUxFTik7CisJbWVtY3B5KG1nbXQtPmJzc2lkLCB3ay0+ZmlsdGVyX3RhLCBFVEhfQUxFTik7CisKKwlpZiAoIWlzX3plcm9fZXRoZXJfYWRkcih3ay0+YXNzb2MucHJldl9ic3NpZCkpIHsKKwkJc2tiX3B1dChza2IsIDEwKTsKKwkJbWdtdC0+ZnJhbWVfY29udHJvbCA9IGNwdV90b19sZTE2KElFRUU4MDIxMV9GVFlQRV9NR01UIHwKKwkJCQkJCSAgSUVFRTgwMjExX1NUWVBFX1JFQVNTT0NfUkVRKTsKKwkJbWdtdC0+dS5yZWFzc29jX3JlcS5jYXBhYl9pbmZvID0gY3B1X3RvX2xlMTYoY2FwYWIpOworCQltZ210LT51LnJlYXNzb2NfcmVxLmxpc3Rlbl9pbnRlcnZhbCA9CisJCQkJY3B1X3RvX2xlMTYobG9jYWwtPmh3LmNvbmYubGlzdGVuX2ludGVydmFsKTsKKwkJbWVtY3B5KG1nbXQtPnUucmVhc3NvY19yZXEuY3VycmVudF9hcCwgd2stPmFzc29jLnByZXZfYnNzaWQsCisJCSAgICAgICBFVEhfQUxFTik7CisJfSBlbHNlIHsKKwkJc2tiX3B1dChza2IsIDQpOworCQltZ210LT5mcmFtZV9jb250cm9sID0gY3B1X3RvX2xlMTYoSUVFRTgwMjExX0ZUWVBFX01HTVQgfAorCQkJCQkJICBJRUVFODAyMTFfU1RZUEVfQVNTT0NfUkVRKTsKKwkJbWdtdC0+dS5hc3NvY19yZXEuY2FwYWJfaW5mbyA9IGNwdV90b19sZTE2KGNhcGFiKTsKKwkJbWdtdC0+dS5hc3NvY19yZXEubGlzdGVuX2ludGVydmFsID0KKwkJCQljcHVfdG9fbGUxNihsb2NhbC0+aHcuY29uZi5saXN0ZW5faW50ZXJ2YWwpOworCX0KKworCS8qIFNTSUQgKi8KKwlpZXMgPSBwb3MgPSBza2JfcHV0KHNrYiwgMiArIHdrLT5hc3NvYy5zc2lkX2xlbik7CisJKnBvcysrID0gV0xBTl9FSURfU1NJRDsKKwkqcG9zKysgPSB3ay0+YXNzb2Muc3NpZF9sZW47CisJbWVtY3B5KHBvcywgd2stPmFzc29jLnNzaWQsIHdrLT5hc3NvYy5zc2lkX2xlbik7CisKKwkvKiBhZGQgYWxsIHJhdGVzIHdoaWNoIHdlcmUgbWFya2VkIHRvIGJlIHVzZWQgYWJvdmUgKi8KKwlzdXBwX3JhdGVzX2xlbiA9IHJhdGVzX2xlbjsKKwlpZiAoc3VwcF9yYXRlc19sZW4gPiA4KQorCQlzdXBwX3JhdGVzX2xlbiA9IDg7CisKKwlsZW4gPSBzYmFuZC0+bl9iaXRyYXRlczsKKwlwb3MgPSBza2JfcHV0KHNrYiwgc3VwcF9yYXRlc19sZW4gKyAyKTsKKwkqcG9zKysgPSBXTEFOX0VJRF9TVVBQX1JBVEVTOworCSpwb3MrKyA9IHN1cHBfcmF0ZXNfbGVuOworCisJY291bnQgPSAwOworCWZvciAoaSA9IDA7IGkgPCBzYmFuZC0+bl9iaXRyYXRlczsgaSsrKSB7CisJCWlmIChCSVQoaSkgJiByYXRlcykgeworCQkJaW50IHJhdGUgPSBzYmFuZC0+Yml0cmF0ZXNbaV0uYml0cmF0ZTsKKwkJCSpwb3MrKyA9ICh1OCkgKHJhdGUgLyA1KTsKKwkJCWlmICgrK2NvdW50ID09IDgpCisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAocmF0ZXNfbGVuID4gY291bnQpIHsKKwkJcG9zID0gc2tiX3B1dChza2IsIHJhdGVzX2xlbiAtIGNvdW50ICsgMik7CisJCSpwb3MrKyA9IFdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTOworCQkqcG9zKysgPSByYXRlc19sZW4gLSBjb3VudDsKKworCQlmb3IgKGkrKzsgaSA8IHNiYW5kLT5uX2JpdHJhdGVzOyBpKyspIHsKKwkJCWlmIChCSVQoaSkgJiByYXRlcykgeworCQkJCWludCByYXRlID0gc2JhbmQtPmJpdHJhdGVzW2ldLmJpdHJhdGU7CisJCQkJKnBvcysrID0gKHU4KSAocmF0ZSAvIDUpOworCQkJfQorCQl9CisJfQorCisJaWYgKGNhcGFiICYgV0xBTl9DQVBBQklMSVRZX1NQRUNUUlVNX01HTVQpIHsKKwkJLyogMS4gcG93ZXIgY2FwYWJpbGl0aWVzICovCisJCXBvcyA9IHNrYl9wdXQoc2tiLCA0KTsKKwkJKnBvcysrID0gV0xBTl9FSURfUFdSX0NBUEFCSUxJVFk7CisJCSpwb3MrKyA9IDI7CisJCSpwb3MrKyA9IDA7IC8qIG1pbiB0eCBwb3dlciAqLworCQkqcG9zKysgPSB3ay0+Y2hhbi0+bWF4X3Bvd2VyOyAvKiBtYXggdHggcG93ZXIgKi8KKworCQkvKiAyLiBzdXBwb3J0ZWQgY2hhbm5lbHMgKi8KKwkJLyogVE9ETzogZ2V0IHRoaXMgaW4gcmVnIGRvbWFpbiBmb3JtYXQgKi8KKwkJcG9zID0gc2tiX3B1dChza2IsIDIgKiBzYmFuZC0+bl9jaGFubmVscyArIDIpOworCQkqcG9zKysgPSBXTEFOX0VJRF9TVVBQT1JURURfQ0hBTk5FTFM7CisJCSpwb3MrKyA9IDIgKiBzYmFuZC0+bl9jaGFubmVsczsKKwkJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2NoYW5uZWxzOyBpKyspIHsKKwkJCSpwb3MrKyA9IGllZWU4MDIxMV9mcmVxdWVuY3lfdG9fY2hhbm5lbCgKKwkJCQkJc2JhbmQtPmNoYW5uZWxzW2ldLmNlbnRlcl9mcmVxKTsKKwkJCSpwb3MrKyA9IDE7IC8qIG9uZSBjaGFubmVsIGluIHRoZSBzdWJiYW5kKi8KKwkJfQorCX0KKworCS8qIGlmIHByZXNlbnQsIGFkZCBhbnkgY3VzdG9tIElFcyB0aGF0IGdvIGJlZm9yZSBIVCAqLworCWlmICh3ay0+aWVfbGVuICYmIHdrLT5pZSkgeworCQlzdGF0aWMgY29uc3QgdTggYmVmb3JlX2h0W10gPSB7CisJCQlXTEFOX0VJRF9TU0lELAorCQkJV0xBTl9FSURfU1VQUF9SQVRFUywKKwkJCVdMQU5fRUlEX0VYVF9TVVBQX1JBVEVTLAorCQkJV0xBTl9FSURfUFdSX0NBUEFCSUxJVFksCisJCQlXTEFOX0VJRF9TVVBQT1JURURfQ0hBTk5FTFMsCisJCQlXTEFOX0VJRF9SU04sCisJCQlXTEFOX0VJRF9RT1NfQ0FQQSwKKwkJCVdMQU5fRUlEX1JSTV9FTkFCTEVEX0NBUEFCSUxJVElFUywKKwkJCVdMQU5fRUlEX01PQklMSVRZX0RPTUFJTiwKKwkJCVdMQU5fRUlEX1NVUFBPUlRFRF9SRUdVTEFUT1JZX0NMQVNTRVMsCisJCX07CisJCW5vZmZzZXQgPSBpZWVlODAyMTFfaWVfc3BsaXQod2stPmllLCB3ay0+aWVfbGVuLAorCQkJCQkgICAgIGJlZm9yZV9odCwgQVJSQVlfU0laRShiZWZvcmVfaHQpLAorCQkJCQkgICAgIG9mZnNldCk7CisJCXBvcyA9IHNrYl9wdXQoc2tiLCBub2Zmc2V0IC0gb2Zmc2V0KTsKKwkJbWVtY3B5KHBvcywgd2stPmllICsgb2Zmc2V0LCBub2Zmc2V0IC0gb2Zmc2V0KTsKKwkJb2Zmc2V0ID0gbm9mZnNldDsKKwl9CisKKwlpZiAod2stPmFzc29jLnVzZV8xMW4gJiYgd2stPmFzc29jLndtbV91c2VkICYmCisJICAgIGxvY2FsLT5ody5xdWV1ZXMgPj0gNCkKKwkJaWVlZTgwMjExX2FkZF9odF9pZShza2IsIHdrLT5hc3NvYy5odF9pbmZvcm1hdGlvbl9pZSwKKwkJCQkgICAgc2JhbmQsIHdrLT5jaGFuLCB3ay0+YXNzb2Muc21wcyk7CisKKwkvKiBpZiBwcmVzZW50LCBhZGQgYW55IGN1c3RvbSBub24tdmVuZG9yIElFcyB0aGF0IGdvIGFmdGVyIEhUICovCisJaWYgKHdrLT5pZV9sZW4gJiYgd2stPmllKSB7CisJCW5vZmZzZXQgPSBpZWVlODAyMTFfaWVfc3BsaXRfdmVuZG9yKHdrLT5pZSwgd2stPmllX2xlbiwKKwkJCQkJCSAgICBvZmZzZXQpOworCQlwb3MgPSBza2JfcHV0KHNrYiwgbm9mZnNldCAtIG9mZnNldCk7CisJCW1lbWNweShwb3MsIHdrLT5pZSArIG9mZnNldCwgbm9mZnNldCAtIG9mZnNldCk7CisJCW9mZnNldCA9IG5vZmZzZXQ7CisJfQorCisJaWYgKHdrLT5hc3NvYy53bW1fdXNlZCAmJiBsb2NhbC0+aHcucXVldWVzID49IDQpIHsKKwkJaWYgKHdrLT5hc3NvYy51YXBzZF91c2VkKSB7CisJCQlxb3NfaW5mbyA9IGxvY2FsLT51YXBzZF9xdWV1ZXM7CisJCQlxb3NfaW5mbyB8PSAobG9jYWwtPnVhcHNkX21heF9zcF9sZW4gPDwKKwkJCQkgICAgIElFRUU4MDIxMV9XTU1fSUVfU1RBX1FPU0lORk9fU1BfU0hJRlQpOworCQl9IGVsc2UgeworCQkJcW9zX2luZm8gPSAwOworCQl9CisKKwkJcG9zID0gc2tiX3B1dChza2IsIDkpOworCQkqcG9zKysgPSBXTEFOX0VJRF9WRU5ET1JfU1BFQ0lGSUM7CisJCSpwb3MrKyA9IDc7IC8qIGxlbiAqLworCQkqcG9zKysgPSAweDAwOyAvKiBNaWNyb3NvZnQgT1VJIDAwOjUwOkYyICovCisJCSpwb3MrKyA9IDB4NTA7CisJCSpwb3MrKyA9IDB4ZjI7CisJCSpwb3MrKyA9IDI7IC8qIFdNRSAqLworCQkqcG9zKysgPSAwOyAvKiBXTUUgaW5mbyAqLworCQkqcG9zKysgPSAxOyAvKiBXTUUgdmVyICovCisJCSpwb3MrKyA9IHFvc19pbmZvOworCX0KKworCS8qIGFkZCBhbnkgcmVtYWluaW5nIGN1c3RvbSAoaS5lLiB2ZW5kb3Igc3BlY2lmaWMgaGVyZSkgSUVzICovCisJaWYgKHdrLT5pZV9sZW4gJiYgd2stPmllKSB7CisJCW5vZmZzZXQgPSB3ay0+aWVfbGVuOworCQlwb3MgPSBza2JfcHV0KHNrYiwgbm9mZnNldCAtIG9mZnNldCk7CisJCW1lbWNweShwb3MsIHdrLT5pZSArIG9mZnNldCwgbm9mZnNldCAtIG9mZnNldCk7CisJfQorCisJSUVFRTgwMjExX1NLQl9DQihza2IpLT5mbGFncyB8PSBJRUVFODAyMTFfVFhfSU5URkxfRE9OVF9FTkNSWVBUOworCWllZWU4MDIxMV90eF9za2Ioc2RhdGEsIHNrYik7Cit9CisKK3N0YXRpYyB2b2lkIGllZWU4MDIxMV9yZW1vdmVfYXV0aF9ic3Moc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwsCisJCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV93b3JrICp3aykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfYnNzICpjYnNzOworCXUxNiBjYXBhX3ZhbCA9IFdMQU5fQ0FQQUJJTElUWV9FU1M7CisKKwlpZiAod2stPnByb2JlX2F1dGgucHJpdmFjeSkKKwkJY2FwYV92YWwgfD0gV0xBTl9DQVBBQklMSVRZX1BSSVZBQ1k7CisKKwljYnNzID0gY2ZnODAyMTFfZ2V0X2Jzcyhsb2NhbC0+aHcud2lwaHksIHdrLT5jaGFuLCB3ay0+ZmlsdGVyX3RhLAorCQkJCXdrLT5wcm9iZV9hdXRoLnNzaWQsIHdrLT5wcm9iZV9hdXRoLnNzaWRfbGVuLAorCQkJCVdMQU5fQ0FQQUJJTElUWV9FU1MgfCBXTEFOX0NBUEFCSUxJVFlfUFJJVkFDWSwKKwkJCQljYXBhX3ZhbCk7CisJaWYgKCFjYnNzKQorCQlyZXR1cm47CisKKwljZmc4MDIxMV91bmxpbmtfYnNzKGxvY2FsLT5ody53aXBoeSwgY2Jzcyk7CisJY2ZnODAyMTFfcHV0X2JzcyhjYnNzKTsKK30KKworc3RhdGljIGVudW0gd29ya19hY3Rpb24gX19tdXN0X2NoZWNrCitpZWVlODAyMTFfZGlyZWN0X3Byb2JlKHN0cnVjdCBpZWVlODAyMTFfd29yayAqd2spCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSB3ay0+c2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisKKwl3ay0+cHJvYmVfYXV0aC50cmllcysrOworCWlmICh3ay0+cHJvYmVfYXV0aC50cmllcyA+IElFRUU4MDIxMV9BVVRIX01BWF9UUklFUykgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGRpcmVjdCBwcm9iZSB0byAlcE0gdGltZWQgb3V0XG4iLAorCQkgICAgICAgc2RhdGEtPm5hbWUsIHdrLT5maWx0ZXJfdGEpOworCisJCS8qCisJCSAqIE1vc3QgbGlrZWx5IEFQIGlzIG5vdCBpbiB0aGUgcmFuZ2Ugc28gcmVtb3ZlIHRoZQorCQkgKiBic3Mgc3RydWN0IGZvciB0aGF0IEFQLgorCQkgKi8KKwkJaWVlZTgwMjExX3JlbW92ZV9hdXRoX2Jzcyhsb2NhbCwgd2spOworCisJCXJldHVybiBXT1JLX0FDVF9USU1FT1VUOworCX0KKworCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlyZWN0IHByb2JlIHRvICVwTSAodHJ5ICVkKVxuIiwKKwkJCXNkYXRhLT5uYW1lLCB3ay0+ZmlsdGVyX3RhLCB3ay0+cHJvYmVfYXV0aC50cmllcyk7CisKKwkvKgorCSAqIERpcmVjdCBwcm9iZSBpcyBzZW50IHRvIGJyb2FkY2FzdCBhZGRyZXNzIGFzIHNvbWUgQVBzCisJICogd2lsbCBub3QgYW5zd2VyIHRvIGRpcmVjdCBwYWNrZXQgaW4gdW5hc3NvY2lhdGVkIHN0YXRlLgorCSAqLworCWllZWU4MDIxMV9zZW5kX3Byb2JlX3JlcShzZGF0YSwgTlVMTCwgd2stPnByb2JlX2F1dGguc3NpZCwKKwkJCQkgd2stPnByb2JlX2F1dGguc3NpZF9sZW4sIE5VTEwsIDApOworCisJd2stPnRpbWVvdXQgPSBqaWZmaWVzICsgSUVFRTgwMjExX0FVVEhfVElNRU9VVDsKKwlydW5fYWdhaW4obG9jYWwsIHdrLT50aW1lb3V0KTsKKworCXJldHVybiBXT1JLX0FDVF9OT05FOworfQorCisKK3N0YXRpYyBlbnVtIHdvcmtfYWN0aW9uIF9fbXVzdF9jaGVjaworaWVlZTgwMjExX2F1dGhlbnRpY2F0ZShzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gd2stPnNkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCisJd2stPnByb2JlX2F1dGgudHJpZXMrKzsKKwlpZiAod2stPnByb2JlX2F1dGgudHJpZXMgPiBJRUVFODAyMTFfQVVUSF9NQVhfVFJJRVMpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRoZW50aWNhdGlvbiB3aXRoICVwTSIKKwkJICAgICAgICIgdGltZWQgb3V0XG4iLCBzZGF0YS0+bmFtZSwgd2stPmZpbHRlcl90YSk7CisKKwkJLyoKKwkJICogTW9zdCBsaWtlbHkgQVAgaXMgbm90IGluIHRoZSByYW5nZSBzbyByZW1vdmUgdGhlCisJCSAqIGJzcyBzdHJ1Y3QgZm9yIHRoYXQgQVAuCisJCSAqLworCQlpZWVlODAyMTFfcmVtb3ZlX2F1dGhfYnNzKGxvY2FsLCB3ayk7CisKKwkJcmV0dXJuIFdPUktfQUNUX1RJTUVPVVQ7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRoZW50aWNhdGUgd2l0aCAlcE0gKHRyeSAlZClcbiIsCisJICAgICAgIHNkYXRhLT5uYW1lLCB3ay0+ZmlsdGVyX3RhLCB3ay0+cHJvYmVfYXV0aC50cmllcyk7CisKKwlpZWVlODAyMTFfc2VuZF9hdXRoKHNkYXRhLCAxLCB3ay0+cHJvYmVfYXV0aC5hbGdvcml0aG0sIHdrLT5pZSwKKwkJCSAgICB3ay0+aWVfbGVuLCB3ay0+ZmlsdGVyX3RhLCBOVUxMLCAwLCAwKTsKKwl3ay0+cHJvYmVfYXV0aC50cmFuc2FjdGlvbiA9IDI7CisKKwl3ay0+dGltZW91dCA9IGppZmZpZXMgKyBJRUVFODAyMTFfQVVUSF9USU1FT1VUOworCXJ1bl9hZ2Fpbihsb2NhbCwgd2stPnRpbWVvdXQpOworCisJcmV0dXJuIFdPUktfQUNUX05PTkU7Cit9CisKK3N0YXRpYyBlbnVtIHdvcmtfYWN0aW9uIF9fbXVzdF9jaGVjaworaWVlZTgwMjExX2Fzc29jaWF0ZShzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrKQoreworCXN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhID0gd2stPnNkYXRhOworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCisJd2stPmFzc29jLnRyaWVzKys7CisJaWYgKHdrLT5hc3NvYy50cmllcyA+IElFRUU4MDIxMV9BU1NPQ19NQVhfVFJJRVMpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGlvbiB3aXRoICVwTSIKKwkJICAgICAgICIgdGltZWQgb3V0XG4iLAorCQkgICAgICAgc2RhdGEtPm5hbWUsIHdrLT5maWx0ZXJfdGEpOworCisJCS8qCisJCSAqIE1vc3QgbGlrZWx5IEFQIGlzIG5vdCBpbiB0aGUgcmFuZ2Ugc28gcmVtb3ZlIHRoZQorCQkgKiBic3Mgc3RydWN0IGZvciB0aGF0IEFQLgorCQkgKi8KKwkJaWYgKHdrLT5hc3NvYy5ic3MpCisJCQljZmc4MDIxMV91bmxpbmtfYnNzKGxvY2FsLT5ody53aXBoeSwgd2stPmFzc29jLmJzcyk7CisKKwkJcmV0dXJuIFdPUktfQUNUX1RJTUVPVVQ7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGUgd2l0aCAlcE0gKHRyeSAlZClcbiIsCisJICAgICAgIHNkYXRhLT5uYW1lLCB3ay0+ZmlsdGVyX3RhLCB3ay0+YXNzb2MudHJpZXMpOworCWllZWU4MDIxMV9zZW5kX2Fzc29jKHNkYXRhLCB3ayk7CisKKwl3ay0+dGltZW91dCA9IGppZmZpZXMgKyBJRUVFODAyMTFfQVNTT0NfVElNRU9VVDsKKwlydW5fYWdhaW4obG9jYWwsIHdrLT50aW1lb3V0KTsKKworCXJldHVybiBXT1JLX0FDVF9OT05FOworfQorCitzdGF0aWMgZW51bSB3b3JrX2FjdGlvbiBfX211c3RfY2hlY2sKK2llZWU4MDIxMV9yZW1haW5fb25fY2hhbm5lbF90aW1lb3V0KHN0cnVjdCBpZWVlODAyMTFfd29yayAqd2spCit7CisJLyoKKwkgKiBGaXJzdCB0aW1lIHdlIHJ1biwgZG8gbm90aGluZyAtLSB0aGUgZ2VuZXJpYyBjb2RlIHdpbGwKKwkgKiBoYXZlIHN3aXRjaGVkIHRvIHRoZSByaWdodCBjaGFubmVsIGV0Yy4KKwkgKi8KKwlpZiAoIXdrLT5zdGFydGVkKSB7CisJCXdrLT50aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMod2stPnJlbWFpbi5kdXJhdGlvbik7CisKKwkJY2ZnODAyMTFfcmVhZHlfb25fY2hhbm5lbCh3ay0+c2RhdGEtPmRldiwgKHVuc2lnbmVkIGxvbmcpIHdrLAorCQkJCQkgIHdrLT5jaGFuLCB3ay0+Y2hhbl90eXBlLAorCQkJCQkgIHdrLT5yZW1haW4uZHVyYXRpb24sIEdGUF9LRVJORUwpOworCisJCXJldHVybiBXT1JLX0FDVF9OT05FOworCX0KKworCXJldHVybiBXT1JLX0FDVF9USU1FT1VUOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfYXV0aF9jaGFsbGVuZ2Uoc3RydWN0IGllZWU4MDIxMV93b3JrICp3aywKKwkJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwKKwkJCQkgICAgIHNpemVfdCBsZW4pCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSB3ay0+c2RhdGE7CisJdTggKnBvczsKKwlzdHJ1Y3QgaWVlZTgwMl8xMV9lbGVtcyBlbGVtczsKKworCXBvcyA9IG1nbXQtPnUuYXV0aC52YXJpYWJsZTsKKwlpZWVlODAyXzExX3BhcnNlX2VsZW1zKHBvcywgbGVuIC0gKHBvcyAtICh1OCAqKSBtZ210KSwgJmVsZW1zKTsKKwlpZiAoIWVsZW1zLmNoYWxsZW5nZSkKKwkJcmV0dXJuOworCWllZWU4MDIxMV9zZW5kX2F1dGgoc2RhdGEsIDMsIHdrLT5wcm9iZV9hdXRoLmFsZ29yaXRobSwKKwkJCSAgICBlbGVtcy5jaGFsbGVuZ2UgLSAyLCBlbGVtcy5jaGFsbGVuZ2VfbGVuICsgMiwKKwkJCSAgICB3ay0+ZmlsdGVyX3RhLCB3ay0+cHJvYmVfYXV0aC5rZXksCisJCQkgICAgd2stPnByb2JlX2F1dGgua2V5X2xlbiwgd2stPnByb2JlX2F1dGgua2V5X2lkeCk7CisJd2stPnByb2JlX2F1dGgudHJhbnNhY3Rpb24gPSA0OworfQorCitzdGF0aWMgZW51bSB3b3JrX2FjdGlvbiBfX211c3RfY2hlY2sKK2llZWU4MDIxMV9yeF9tZ210X2F1dGgoc3RydWN0IGllZWU4MDIxMV93b3JrICp3aywKKwkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbikKK3sKKwl1MTYgYXV0aF9hbGcsIGF1dGhfdHJhbnNhY3Rpb24sIHN0YXR1c19jb2RlOworCisJaWYgKHdrLT50eXBlICE9IElFRUU4MDIxMV9XT1JLX0FVVEgpCisJCXJldHVybiBXT1JLX0FDVF9OT05FOworCisJaWYgKGxlbiA8IDI0ICsgNikKKwkJcmV0dXJuIFdPUktfQUNUX05PTkU7CisKKwlhdXRoX2FsZyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX2FsZyk7CisJYXV0aF90cmFuc2FjdGlvbiA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5hdXRoX3RyYW5zYWN0aW9uKTsKKwlzdGF0dXNfY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXV0aC5zdGF0dXNfY29kZSk7CisKKwlpZiAoYXV0aF9hbGcgIT0gd2stPnByb2JlX2F1dGguYWxnb3JpdGhtIHx8CisJICAgIGF1dGhfdHJhbnNhY3Rpb24gIT0gd2stPnByb2JlX2F1dGgudHJhbnNhY3Rpb24pCisJCXJldHVybiBXT1JLX0FDVF9OT05FOworCisJaWYgKHN0YXR1c19jb2RlICE9IFdMQU5fU1RBVFVTX1NVQ0NFU1MpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlcE0gZGVuaWVkIGF1dGhlbnRpY2F0aW9uIChzdGF0dXMgJWQpXG4iLAorCQkgICAgICAgd2stPnNkYXRhLT5uYW1lLCBtZ210LT5zYSwgc3RhdHVzX2NvZGUpOworCQlyZXR1cm4gV09SS19BQ1RfRE9ORTsKKwl9CisKKwlzd2l0Y2ggKHdrLT5wcm9iZV9hdXRoLmFsZ29yaXRobSkgeworCWNhc2UgV0xBTl9BVVRIX09QRU46CisJY2FzZSBXTEFOX0FVVEhfTEVBUDoKKwljYXNlIFdMQU5fQVVUSF9GVDoKKwkJYnJlYWs7CisJY2FzZSBXTEFOX0FVVEhfU0hBUkVEX0tFWToKKwkJaWYgKHdrLT5wcm9iZV9hdXRoLnRyYW5zYWN0aW9uICE9IDQpIHsKKwkJCWllZWU4MDIxMV9hdXRoX2NoYWxsZW5nZSh3aywgbWdtdCwgbGVuKTsKKwkJCS8qIG5lZWQgYW5vdGhlciBmcmFtZSAqLworCQkJcmV0dXJuIFdPUktfQUNUX05PTkU7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJV0FSTl9PTigxKTsKKwkJcmV0dXJuIFdPUktfQUNUX05PTkU7CisJfQorCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhdXRoZW50aWNhdGVkXG4iLCB3ay0+c2RhdGEtPm5hbWUpOworCXJldHVybiBXT1JLX0FDVF9ET05FOworfQorCitzdGF0aWMgZW51bSB3b3JrX2FjdGlvbiBfX211c3RfY2hlY2sKK2llZWU4MDIxMV9yeF9tZ210X2Fzc29jX3Jlc3Aoc3RydWN0IGllZWU4MDIxMV93b3JrICp3aywKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210LCBzaXplX3QgbGVuLAorCQkJICAgICBib29sIHJlYXNzb2MpCit7CisJc3RydWN0IGllZWU4MDIxMV9zdWJfaWZfZGF0YSAqc2RhdGEgPSB3ay0+c2RhdGE7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJdTE2IGNhcGFiX2luZm8sIHN0YXR1c19jb2RlLCBhaWQ7CisJc3RydWN0IGllZWU4MDJfMTFfZWxlbXMgZWxlbXM7CisJdTggKnBvczsKKworCS8qCisJICogQXNzb2NSZXNwIGFuZCBSZWFzc29jUmVzcCBoYXZlIGlkZW50aWNhbCBzdHJ1Y3R1cmUsIHNvIHByb2Nlc3MgYm90aAorCSAqIG9mIHRoZW0gaW4gdGhpcyBmdW5jdGlvbi4KKwkgKi8KKworCWlmIChsZW4gPCAyNCArIDYpCisJCXJldHVybiBXT1JLX0FDVF9OT05FOworCisJY2FwYWJfaW5mbyA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXNzb2NfcmVzcC5jYXBhYl9pbmZvKTsKKwlzdGF0dXNfY29kZSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUuYXNzb2NfcmVzcC5zdGF0dXNfY29kZSk7CisJYWlkID0gbGUxNl90b19jcHUobWdtdC0+dS5hc3NvY19yZXNwLmFpZCk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAiJXM6IFJYICVzc3NvY1Jlc3AgZnJvbSAlcE0gKGNhcGFiPTB4JXggIgorCSAgICAgICAic3RhdHVzPSVkIGFpZD0lZClcbiIsCisJICAgICAgIHNkYXRhLT5uYW1lLCByZWFzc29jID8gIlJlYSIgOiAiQSIsIG1nbXQtPnNhLAorCSAgICAgICBjYXBhYl9pbmZvLCBzdGF0dXNfY29kZSwgKHUxNikoYWlkICYgfihCSVQoMTUpIHwgQklUKDE0KSkpKTsKKworCXBvcyA9IG1nbXQtPnUuYXNzb2NfcmVzcC52YXJpYWJsZTsKKwlpZWVlODAyXzExX3BhcnNlX2VsZW1zKHBvcywgbGVuIC0gKHBvcyAtICh1OCAqKSBtZ210KSwgJmVsZW1zKTsKKworCWlmIChzdGF0dXNfY29kZSA9PSBXTEFOX1NUQVRVU19BU1NPQ19SRUpFQ1RFRF9URU1QT1JBUklMWSAmJgorCSAgICBlbGVtcy50aW1lb3V0X2ludCAmJiBlbGVtcy50aW1lb3V0X2ludF9sZW4gPT0gNSAmJgorCSAgICBlbGVtcy50aW1lb3V0X2ludFswXSA9PSBXTEFOX1RJTUVPVVRfQVNTT0NfQ09NRUJBQ0spIHsKKwkJdTMyIHR1LCBtczsKKwkJdHUgPSBnZXRfdW5hbGlnbmVkX2xlMzIoZWxlbXMudGltZW91dF9pbnQgKyAxKTsKKwkJbXMgPSB0dSAqIDEwMjQgLyAxMDAwOworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6ICVwTSByZWplY3RlZCBhc3NvY2lhdGlvbiB0ZW1wb3JhcmlseTsgIgorCQkgICAgICAgImNvbWViYWNrIGR1cmF0aW9uICV1IFRVICgldSBtcylcbiIsCisJCSAgICAgICBzZGF0YS0+bmFtZSwgbWdtdC0+c2EsIHR1LCBtcyk7CisJCXdrLT50aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMobXMpOworCQlpZiAobXMgPiBJRUVFODAyMTFfQVNTT0NfVElNRU9VVCkKKwkJCXJ1bl9hZ2Fpbihsb2NhbCwgd2stPnRpbWVvdXQpOworCQlyZXR1cm4gV09SS19BQ1RfTk9ORTsKKwl9CisKKwlpZiAoc3RhdHVzX2NvZGUgIT0gV0xBTl9TVEFUVVNfU1VDQ0VTUykKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAlcE0gZGVuaWVkIGFzc29jaWF0aW9uIChjb2RlPSVkKVxuIiwKKwkJICAgICAgIHNkYXRhLT5uYW1lLCBtZ210LT5zYSwgc3RhdHVzX2NvZGUpOworCWVsc2UKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBhc3NvY2lhdGVkXG4iLCBzZGF0YS0+bmFtZSk7CisKKwlyZXR1cm4gV09SS19BQ1RfRE9ORTsKK30KKworc3RhdGljIGVudW0gd29ya19hY3Rpb24gX19tdXN0X2NoZWNrCitpZWVlODAyMTFfcnhfbWdtdF9wcm9iZV9yZXNwKHN0cnVjdCBpZWVlODAyMTFfd29yayAqd2ssCisJCQkgICAgIHN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdCwgc2l6ZV90IGxlbiwKKwkJCSAgICAgc3RydWN0IGllZWU4MDIxMV9yeF9zdGF0dXMgKnJ4X3N0YXR1cykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX3N1Yl9pZl9kYXRhICpzZGF0YSA9IHdrLT5zZGF0YTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCA9IHNkYXRhLT5sb2NhbDsKKwlzaXplX3QgYmFzZWxlbjsKKworCUFTU0VSVF9XT1JLX01UWChsb2NhbCk7CisKKwliYXNlbGVuID0gKHU4ICopIG1nbXQtPnUucHJvYmVfcmVzcC52YXJpYWJsZSAtICh1OCAqKSBtZ210OworCWlmIChiYXNlbGVuID4gbGVuKQorCQlyZXR1cm4gV09SS19BQ1RfTk9ORTsKKworCXByaW50ayhLRVJOX0RFQlVHICIlczogZGlyZWN0IHByb2JlIHJlc3BvbmRlZFxuIiwgc2RhdGEtPm5hbWUpOworCXJldHVybiBXT1JLX0FDVF9ET05FOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfd29ya19yeF9xdWV1ZWRfbWdtdChzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbCwKKwkJCQkJICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfcnhfc3RhdHVzICpyeF9zdGF0dXM7CisJc3RydWN0IGllZWU4MDIxMV9tZ210ICptZ210OworCXN0cnVjdCBpZWVlODAyMTFfd29yayAqd2s7CisJZW51bSB3b3JrX2FjdGlvbiBybWEgPSBXT1JLX0FDVF9OT05FOworCXUxNiBmYzsKKworCXJ4X3N0YXR1cyA9IChzdHJ1Y3QgaWVlZTgwMjExX3J4X3N0YXR1cyAqKSBza2ItPmNiOworCW1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopIHNrYi0+ZGF0YTsKKwlmYyA9IGxlMTZfdG9fY3B1KG1nbXQtPmZyYW1lX2NvbnRyb2wpOworCisJbXV0ZXhfbG9jaygmbG9jYWwtPndvcmtfbXR4KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkod2ssICZsb2NhbC0+d29ya19saXN0LCBsaXN0KSB7CisJCWNvbnN0IHU4ICpic3NpZCA9IE5VTEw7CisKKwkJc3dpdGNoICh3ay0+dHlwZSkgeworCQljYXNlIElFRUU4MDIxMV9XT1JLX0RJUkVDVF9QUk9CRToKKwkJY2FzZSBJRUVFODAyMTFfV09SS19BVVRIOgorCQljYXNlIElFRUU4MDIxMV9XT1JLX0FTU09DOgorCQkJYnNzaWQgPSB3ay0+ZmlsdGVyX3RhOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qCisJCSAqIEJlZm9yZSBxdWV1aW5nLCB3ZSBhbHJlYWR5IHZlcmlmaWVkIG1nbXQtPnNhLAorCQkgKiBzbyB0aGlzIGlzIG5lZWRlZCBqdXN0IGZvciBtYXRjaGluZy4KKwkJICovCisJCWlmIChjb21wYXJlX2V0aGVyX2FkZHIoYnNzaWQsIG1nbXQtPmJzc2lkKSkKKwkJCWNvbnRpbnVlOworCisJCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgeworCQljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgorCQkJcm1hID0gaWVlZTgwMjExX3J4X21nbXRfcHJvYmVfcmVzcCh3aywgbWdtdCwgc2tiLT5sZW4sCisJCQkJCQkJICAgcnhfc3RhdHVzKTsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgorCQkJcm1hID0gaWVlZTgwMjExX3J4X21nbXRfYXV0aCh3aywgbWdtdCwgc2tiLT5sZW4pOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX1NUWVBFX0FTU09DX1JFU1A6CisJCQlybWEgPSBpZWVlODAyMTFfcnhfbWdtdF9hc3NvY19yZXNwKHdrLCBtZ210LAorCQkJCQkJCSAgIHNrYi0+bGVuLCBmYWxzZSk7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfU1RZUEVfUkVBU1NPQ19SRVNQOgorCQkJcm1hID0gaWVlZTgwMjExX3J4X21nbXRfYXNzb2NfcmVzcCh3aywgbWdtdCwKKwkJCQkJCQkgICBza2ItPmxlbiwgdHJ1ZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVdBUk5fT04oMSk7CisJCX0KKwkJLyoKKwkJICogV2UndmUgcHJvY2Vzc2VkIHRoaXMgZnJhbWUgZm9yIHRoYXQgd29yaywgc28gaXQgY2FuJ3QKKwkJICogYmVsb25nIHRvIGFub3RoZXIgd29yayBzdHJ1Y3QuCisJCSAqIE5COiB0aGlzIGlzIGFsc28gcmVxdWlyZWQgZm9yIGNvcnJlY3RuZXNzIGZvciAncm1hJyEKKwkJICovCisJCWJyZWFrOworCX0KKworCXN3aXRjaCAocm1hKSB7CisJY2FzZSBXT1JLX0FDVF9OT05FOgorCQlicmVhazsKKwljYXNlIFdPUktfQUNUX0RPTkU6CisJCWxpc3RfZGVsX3JjdSgmd2stPmxpc3QpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlXQVJOKDEsICJ1bmV4cGVjdGVkOiAlZCIsIHJtYSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+d29ya19tdHgpOworCisJaWYgKHJtYSAhPSBXT1JLX0FDVF9ET05FKQorCQlnb3RvIG91dDsKKworCXN3aXRjaCAod2stPmRvbmUod2ssIHNrYikpIHsKKwljYXNlIFdPUktfRE9ORV9ERVNUUk9ZOgorCQlmcmVlX3dvcmsod2spOworCQlicmVhazsKKwljYXNlIFdPUktfRE9ORV9SRVFVRVVFOgorCQlzeW5jaHJvbml6ZV9yY3UoKTsKKwkJd2stPnN0YXJ0ZWQgPSBmYWxzZTsgLyogcmVzdGFydCAqLworCQltdXRleF9sb2NrKCZsb2NhbC0+d29ya19tdHgpOworCQlsaXN0X2FkZF90YWlsKCZ3ay0+bGlzdCwgJmxvY2FsLT53b3JrX2xpc3QpOworCQltdXRleF91bmxvY2soJmxvY2FsLT53b3JrX210eCk7CisJfQorCisgb3V0OgorCWtmcmVlX3NrYihza2IpOworfQorCitzdGF0aWMgdm9pZCBpZWVlODAyMTFfd29ya190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSAodm9pZCAqKSBkYXRhOworCisJaWYgKGxvY2FsLT5xdWllc2NpbmcpCisJCXJldHVybjsKKworCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZsb2NhbC0+d29ya193b3JrKTsKK30KKworc3RhdGljIHZvaWQgaWVlZTgwMjExX3dvcmtfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPQorCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGllZWU4MDIxMV9sb2NhbCwgd29ya193b3JrKTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBpZWVlODAyMTFfd29yayAqd2ssICp0bXA7CisJTElTVF9IRUFEKGZyZWVfd29yayk7CisJZW51bSB3b3JrX2FjdGlvbiBybWE7CisJYm9vbCByZW1haW5fb2ZmX2NoYW5uZWwgPSBmYWxzZTsKKworCWlmIChsb2NhbC0+c2Nhbm5pbmcpCisJCXJldHVybjsKKworCS8qCisJICogaWVlZTgwMjExX3F1ZXVlX3dvcmsoKSBzaG91bGQgaGF2ZSBwaWNrZWQgdXAgbW9zdCBjYXNlcywKKwkgKiBoZXJlIHdlJ2xsIHBpY2sgdGhlIHRoZSByZXN0LgorCSAqLworCWlmIChXQVJOKGxvY2FsLT5zdXNwZW5kZWQsICJ3b3JrIHNjaGVkdWxlZCB3aGlsZSBnb2luZyB0byBzdXNwZW5kXG4iKSkKKwkJcmV0dXJuOworCisJLyogZmlyc3QgcHJvY2VzcyBmcmFtZXMgdG8gYXZvaWQgdGltaW5nIG91dCB3aGlsZSBhIGZyYW1lIGlzIHBlbmRpbmcgKi8KKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZsb2NhbC0+d29ya19za2JfcXVldWUpKSkKKwkJaWVlZTgwMjExX3dvcmtfcnhfcXVldWVkX21nbXQobG9jYWwsIHNrYik7CisKKwlpZWVlODAyMTFfcmVjYWxjX2lkbGUobG9jYWwpOworCisJbXV0ZXhfbG9jaygmbG9jYWwtPndvcmtfbXR4KTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3aywgdG1wLCAmbG9jYWwtPndvcmtfbGlzdCwgbGlzdCkgeworCQlib29sIHN0YXJ0ZWQgPSB3ay0+c3RhcnRlZDsKKworCQkvKiBtYXJrIHdvcmsgYXMgc3RhcnRlZCBpZiBpdCdzIG9uIHRoZSBjdXJyZW50IG9mZi1jaGFubmVsICovCisJCWlmICghc3RhcnRlZCAmJiBsb2NhbC0+dG1wX2NoYW5uZWwgJiYKKwkJICAgIHdrLT5jaGFuID09IGxvY2FsLT50bXBfY2hhbm5lbCAmJgorCQkgICAgd2stPmNoYW5fdHlwZSA9PSBsb2NhbC0+dG1wX2NoYW5uZWxfdHlwZSkgeworCQkJc3RhcnRlZCA9IHRydWU7CisJCQl3ay0+dGltZW91dCA9IGppZmZpZXM7CisJCX0KKworCQlpZiAoIXN0YXJ0ZWQgJiYgIWxvY2FsLT50bXBfY2hhbm5lbCkgeworCQkJLyoKKwkJCSAqIFRPRE86IGNvdWxkIG9wdGltaXplIHRoaXMgYnkgbGVhdmluZyB0aGUKKwkJCSAqCSBzdGF0aW9uIHZpZnMgaW4gYXdha2UgbW9kZSBpZiB0aGV5CisJCQkgKgkgaGFwcGVuIHRvIGJlIG9uIHRoZSBzYW1lIGNoYW5uZWwgYXMKKwkJCSAqCSB0aGUgcmVxdWVzdGVkIGNoYW5uZWwKKwkJCSAqLworCQkJaWVlZTgwMjExX29mZmNoYW5uZWxfc3RvcF9iZWFjb25pbmcobG9jYWwpOworCQkJaWVlZTgwMjExX29mZmNoYW5uZWxfc3RvcF9zdGF0aW9uKGxvY2FsKTsKKworCQkJbG9jYWwtPnRtcF9jaGFubmVsID0gd2stPmNoYW47CisJCQlsb2NhbC0+dG1wX2NoYW5uZWxfdHlwZSA9IHdrLT5jaGFuX3R5cGU7CisJCQlpZWVlODAyMTFfaHdfY29uZmlnKGxvY2FsLCAwKTsKKwkJCXN0YXJ0ZWQgPSB0cnVlOworCQkJd2stPnRpbWVvdXQgPSBqaWZmaWVzOworCQl9CisKKwkJLyogZG9uJ3QgdHJ5IHRvIHdvcmsgd2l0aCBpdGVtcyB0aGF0IGFyZW4ndCBzdGFydGVkICovCisJCWlmICghc3RhcnRlZCkKKwkJCWNvbnRpbnVlOworCisJCWlmICh0aW1lX2lzX2FmdGVyX2ppZmZpZXMod2stPnRpbWVvdXQpKSB7CisJCQkvKgorCQkJICogVGhpcyB3b3JrIGl0ZW0gaXNuJ3Qgc3VwcG9zZWQgdG8gYmUgd29ya2VkIG9uCisJCQkgKiByaWdodCBub3csIGJ1dCB0YWtlIGNhcmUgdG8gYWRqdXN0IHRoZSB0aW1lcgorCQkJICogcHJvcGVybHkuCisJCQkgKi8KKwkJCXJ1bl9hZ2Fpbihsb2NhbCwgd2stPnRpbWVvdXQpOworCQkJY29udGludWU7CisJCX0KKworCQlzd2l0Y2ggKHdrLT50eXBlKSB7CisJCWRlZmF1bHQ6CisJCQlXQVJOX09OKDEpOworCQkJLyogbm90aGluZyAqLworCQkJcm1hID0gV09SS19BQ1RfTk9ORTsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9XT1JLX0FCT1JUOgorCQkJcm1hID0gV09SS19BQ1RfVElNRU9VVDsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9XT1JLX0RJUkVDVF9QUk9CRToKKwkJCXJtYSA9IGllZWU4MDIxMV9kaXJlY3RfcHJvYmUod2spOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX1dPUktfQVVUSDoKKwkJCXJtYSA9IGllZWU4MDIxMV9hdXRoZW50aWNhdGUod2spOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX1dPUktfQVNTT0M6CisJCQlybWEgPSBpZWVlODAyMTFfYXNzb2NpYXRlKHdrKTsKKwkJCWJyZWFrOworCQljYXNlIElFRUU4MDIxMV9XT1JLX1JFTUFJTl9PTl9DSEFOTkVMOgorCQkJcm1hID0gaWVlZTgwMjExX3JlbWFpbl9vbl9jaGFubmVsX3RpbWVvdXQod2spOworCQkJYnJlYWs7CisJCX0KKworCQl3ay0+c3RhcnRlZCA9IHN0YXJ0ZWQ7CisKKwkJc3dpdGNoIChybWEpIHsKKwkJY2FzZSBXT1JLX0FDVF9OT05FOgorCQkJLyogbWlnaHQgaGF2ZSBjaGFuZ2VkIHRoZSB0aW1lb3V0ICovCisJCQlydW5fYWdhaW4obG9jYWwsIHdrLT50aW1lb3V0KTsKKwkJCWJyZWFrOworCQljYXNlIFdPUktfQUNUX1RJTUVPVVQ6CisJCQlsaXN0X2RlbF9yY3UoJndrLT5saXN0KTsKKwkJCXN5bmNocm9uaXplX3JjdSgpOworCQkJbGlzdF9hZGQoJndrLT5saXN0LCAmZnJlZV93b3JrKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJV0FSTigxLCAidW5leHBlY3RlZDogJWQiLCBybWEpOworCQl9CisJfQorCisJbGlzdF9mb3JfZWFjaF9lbnRyeSh3aywgJmxvY2FsLT53b3JrX2xpc3QsIGxpc3QpIHsKKwkJaWYgKCF3ay0+c3RhcnRlZCkKKwkJCWNvbnRpbnVlOworCQlpZiAod2stPmNoYW4gIT0gbG9jYWwtPnRtcF9jaGFubmVsKQorCQkJY29udGludWU7CisJCWlmICh3ay0+Y2hhbl90eXBlICE9IGxvY2FsLT50bXBfY2hhbm5lbF90eXBlKQorCQkJY29udGludWU7CisJCXJlbWFpbl9vZmZfY2hhbm5lbCA9IHRydWU7CisJfQorCisJaWYgKCFyZW1haW5fb2ZmX2NoYW5uZWwgJiYgbG9jYWwtPnRtcF9jaGFubmVsKSB7CisJCWxvY2FsLT50bXBfY2hhbm5lbCA9IE5VTEw7CisJCWllZWU4MDIxMV9od19jb25maWcobG9jYWwsIDApOworCQlpZWVlODAyMTFfb2ZmY2hhbm5lbF9yZXR1cm4obG9jYWwsIHRydWUpOworCQkvKiBnaXZlIGNvbm5lY3Rpb24gc29tZSB0aW1lIHRvIGJyZWF0aGUgKi8KKwkJcnVuX2FnYWluKGxvY2FsLCBqaWZmaWVzICsgSFovMik7CisJfQorCisJaWYgKGxpc3RfZW1wdHkoJmxvY2FsLT53b3JrX2xpc3QpICYmIGxvY2FsLT5zY2FuX3JlcSkKKwkJaWVlZTgwMjExX3F1ZXVlX2RlbGF5ZWRfd29yaygmbG9jYWwtPmh3LAorCQkJCQkgICAgICZsb2NhbC0+c2Nhbl93b3JrLAorCQkJCQkgICAgIHJvdW5kX2ppZmZpZXNfcmVsYXRpdmUoMCkpOworCisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+d29ya19tdHgpOworCisJaWVlZTgwMjExX3JlY2FsY19pZGxlKGxvY2FsKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3aywgdG1wLCAmZnJlZV93b3JrLCBsaXN0KSB7CisJCXdrLT5kb25lKHdrLCBOVUxMKTsKKwkJbGlzdF9kZWwoJndrLT5saXN0KTsKKwkJa2ZyZWUod2spOworCX0KK30KKwordm9pZCBpZWVlODAyMTFfYWRkX3dvcmsoc3RydWN0IGllZWU4MDIxMV93b3JrICp3aykKK3sKKwlzdHJ1Y3QgaWVlZTgwMjExX2xvY2FsICpsb2NhbDsKKworCWlmIChXQVJOX09OKCF3ay0+Y2hhbikpCisJCXJldHVybjsKKworCWlmIChXQVJOX09OKCF3ay0+c2RhdGEpKQorCQlyZXR1cm47CisKKwlpZiAoV0FSTl9PTighd2stPmRvbmUpKQorCQlyZXR1cm47CisKKwlpZiAoV0FSTl9PTighaWVlZTgwMjExX3NkYXRhX3J1bm5pbmcod2stPnNkYXRhKSkpCisJCXJldHVybjsKKworCXdrLT5zdGFydGVkID0gZmFsc2U7CisKKwlsb2NhbCA9IHdrLT5zZGF0YS0+bG9jYWw7CisJbXV0ZXhfbG9jaygmbG9jYWwtPndvcmtfbXR4KTsKKwlsaXN0X2FkZF90YWlsKCZ3ay0+bGlzdCwgJmxvY2FsLT53b3JrX2xpc3QpOworCW11dGV4X3VubG9jaygmbG9jYWwtPndvcmtfbXR4KTsKKworCWllZWU4MDIxMV9xdWV1ZV93b3JrKCZsb2NhbC0+aHcsICZsb2NhbC0+d29ya193b3JrKTsKK30KKwordm9pZCBpZWVlODAyMTFfd29ya19pbml0KHN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsKQoreworCW11dGV4X2luaXQoJmxvY2FsLT53b3JrX210eCk7CisJSU5JVF9MSVNUX0hFQUQoJmxvY2FsLT53b3JrX2xpc3QpOworCXNldHVwX3RpbWVyKCZsb2NhbC0+d29ya190aW1lciwgaWVlZTgwMjExX3dvcmtfdGltZXIsCisJCSAgICAodW5zaWduZWQgbG9uZylsb2NhbCk7CisJSU5JVF9XT1JLKCZsb2NhbC0+d29ya193b3JrLCBpZWVlODAyMTFfd29ya193b3JrKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZsb2NhbC0+d29ya19za2JfcXVldWUpOworfQorCit2b2lkIGllZWU4MDIxMV93b3JrX3B1cmdlKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfd29yayAqd2s7CisKKwltdXRleF9sb2NrKCZsb2NhbC0+d29ya19tdHgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkod2ssICZsb2NhbC0+d29ya19saXN0LCBsaXN0KSB7CisJCWlmICh3ay0+c2RhdGEgIT0gc2RhdGEpCisJCQljb250aW51ZTsKKwkJd2stPnR5cGUgPSBJRUVFODAyMTFfV09SS19BQk9SVDsKKwkJd2stPnN0YXJ0ZWQgPSB0cnVlOworCQl3ay0+dGltZW91dCA9IGppZmZpZXM7CisJfQorCW11dGV4X3VubG9jaygmbG9jYWwtPndvcmtfbXR4KTsKKworCS8qIHJ1biBjbGVhbnVwcyBldGMuICovCisJaWVlZTgwMjExX3dvcmtfd29yaygmbG9jYWwtPndvcmtfd29yayk7CisKKwltdXRleF9sb2NrKCZsb2NhbC0+d29ya19tdHgpOworCWxpc3RfZm9yX2VhY2hfZW50cnkod2ssICZsb2NhbC0+d29ya19saXN0LCBsaXN0KSB7CisJCWlmICh3ay0+c2RhdGEgIT0gc2RhdGEpCisJCQljb250aW51ZTsKKwkJV0FSTl9PTigxKTsKKwkJYnJlYWs7CisJfQorCW11dGV4X3VubG9jaygmbG9jYWwtPndvcmtfbXR4KTsKK30KKworaWVlZTgwMjExX3J4X3Jlc3VsdCBpZWVlODAyMTFfd29ya19yeF9tZ210KHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0cnVjdCBpZWVlODAyMTFfbG9jYWwgKmxvY2FsID0gc2RhdGEtPmxvY2FsOworCXN0cnVjdCBpZWVlODAyMTFfbWdtdCAqbWdtdDsKKwlzdHJ1Y3QgaWVlZTgwMjExX3dvcmsgKndrOworCXUxNiBmYzsKKworCWlmIChza2ItPmxlbiA8IDI0KQorCQlyZXR1cm4gUlhfRFJPUF9NT05JVE9SOworCisJbWdtdCA9IChzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgc2tiLT5kYXRhOworCWZjID0gbGUxNl90b19jcHUobWdtdC0+ZnJhbWVfY29udHJvbCk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdSh3aywgJmxvY2FsLT53b3JrX2xpc3QsIGxpc3QpIHsKKwkJaWYgKHNkYXRhICE9IHdrLT5zZGF0YSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKHdrLT5maWx0ZXJfdGEsIG1nbXQtPnNhKSkKKwkJCWNvbnRpbnVlOworCQlpZiAoY29tcGFyZV9ldGhlcl9hZGRyKHdrLT5maWx0ZXJfdGEsIG1nbXQtPmJzc2lkKSkKKwkJCWNvbnRpbnVlOworCisJCXN3aXRjaCAoZmMgJiBJRUVFODAyMTFfRkNUTF9TVFlQRSkgeworCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BVVRIOgorCQljYXNlIElFRUU4MDIxMV9TVFlQRV9QUk9CRV9SRVNQOgorCQljYXNlIElFRUU4MDIxMV9TVFlQRV9BU1NPQ19SRVNQOgorCQljYXNlIElFRUU4MDIxMV9TVFlQRV9SRUFTU09DX1JFU1A6CisJCQlza2JfcXVldWVfdGFpbCgmbG9jYWwtPndvcmtfc2tiX3F1ZXVlLCBza2IpOworCQkJaWVlZTgwMjExX3F1ZXVlX3dvcmsoJmxvY2FsLT5odywgJmxvY2FsLT53b3JrX3dvcmspOworCQkJcmV0dXJuIFJYX1FVRVVFRDsKKwkJfQorCX0KKworCXJldHVybiBSWF9DT05USU5VRTsKK30KKworc3RhdGljIGVudW0gd29ya19kb25lX3Jlc3VsdCBpZWVlODAyMTFfcmVtYWluX2RvbmUoc3RydWN0IGllZWU4MDIxMV93b3JrICp3aywKKwkJCQkJCSAgIHN0cnVjdCBza19idWZmICpza2IpCit7CisJLyoKKwkgKiBXZSBhcmUgZG9uZSBzZXJ2aW5nIHRoZSByZW1haW4tb24tY2hhbm5lbCBjb21tYW5kLgorCSAqLworCWNmZzgwMjExX3JlbWFpbl9vbl9jaGFubmVsX2V4cGlyZWQod2stPnNkYXRhLT5kZXYsICh1bnNpZ25lZCBsb25nKSB3aywKKwkJCQkJICAgd2stPmNoYW4sIHdrLT5jaGFuX3R5cGUsCisJCQkJCSAgIEdGUF9LRVJORUwpOworCisJcmV0dXJuIFdPUktfRE9ORV9ERVNUUk9ZOworfQorCitpbnQgaWVlZTgwMjExX3drX3JlbWFpbl9vbl9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCSAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCQkgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCQkgICB1bnNpZ25lZCBpbnQgZHVyYXRpb24sIHU2NCAqY29va2llKQoreworCXN0cnVjdCBpZWVlODAyMTFfd29yayAqd2s7CisKKwl3ayA9IGt6YWxsb2Moc2l6ZW9mKCp3ayksIEdGUF9LRVJORUwpOworCWlmICghd2spCisJCXJldHVybiAtRU5PTUVNOworCisJd2stPnR5cGUgPSBJRUVFODAyMTFfV09SS19SRU1BSU5fT05fQ0hBTk5FTDsKKwl3ay0+Y2hhbiA9IGNoYW47CisJd2stPmNoYW5fdHlwZSA9IGNoYW5uZWxfdHlwZTsKKwl3ay0+c2RhdGEgPSBzZGF0YTsKKwl3ay0+ZG9uZSA9IGllZWU4MDIxMV9yZW1haW5fZG9uZTsKKworCXdrLT5yZW1haW4uZHVyYXRpb24gPSBkdXJhdGlvbjsKKworCSpjb29raWUgPSAodW5zaWduZWQgbG9uZykgd2s7CisKKwlpZWVlODAyMTFfYWRkX3dvcmsod2spOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBpZWVlODAyMTFfd2tfY2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsKHN0cnVjdCBpZWVlODAyMTFfc3ViX2lmX2RhdGEgKnNkYXRhLAorCQkJCQkgIHU2NCBjb29raWUpCit7CisJc3RydWN0IGllZWU4MDIxMV9sb2NhbCAqbG9jYWwgPSBzZGF0YS0+bG9jYWw7CisJc3RydWN0IGllZWU4MDIxMV93b3JrICp3aywgKnRtcDsKKwlib29sIGZvdW5kID0gZmFsc2U7CisKKwltdXRleF9sb2NrKCZsb2NhbC0+d29ya19tdHgpOworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh3aywgdG1wLCAmbG9jYWwtPndvcmtfbGlzdCwgbGlzdCkgeworCQlpZiAoKHVuc2lnbmVkIGxvbmcpIHdrID09IGNvb2tpZSkgeworCQkJd2stPnRpbWVvdXQgPSBqaWZmaWVzOworCQkJZm91bmQgPSB0cnVlOworCQkJYnJlYWs7CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZsb2NhbC0+d29ya19tdHgpOworCisJaWYgKCFmb3VuZCkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwlpZWVlODAyMTFfcXVldWVfd29yaygmbG9jYWwtPmh3LCAmbG9jYWwtPndvcmtfd29yayk7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL25ldC9tYWM4MDIxMS93cGEuYyBiL25ldC9tYWM4MDIxMS93cGEuYwppbmRleCA1MzMyMDE0Li5mNDk3MWNkIDEwMDY0NAotLS0gYS9uZXQvbWFjODAyMTEvd3BhLmMKKysrIGIvbmV0L21hYzgwMjExL3dwYS5jCkBAIC0zMSw4ICszMSw4IEBACiAJdW5zaWduZWQgaW50IGhkcmxlbjsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCXN0cnVjdCBza19idWZmICpza2IgPSB0eC0+c2tiOworCXN0cnVjdCBpZWVlODAyMTFfdHhfaW5mbyAqaW5mbyA9IElFRUU4MDIxMV9TS0JfQ0Ioc2tiKTsKIAlpbnQgYXV0aGVudGljYXRvcjsKLQlpbnQgd3BhX3Rlc3QgPSAwOwogCWludCB0YWlsOwogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwpAQCAtNDcsMTYgKzQ3LDE1IEBACiAJZGF0YSA9IHNrYi0+ZGF0YSArIGhkcmxlbjsKIAlkYXRhX2xlbiA9IHNrYi0+bGVuIC0gaGRybGVuOwogCi0JaWYgKCh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSAmJgorCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSAmJgogCSAgICAhKHR4LT5mbGFncyAmIElFRUU4MDIxMV9UWF9GUkFHTUVOVEVEKSAmJgotCSAgICAhKHR4LT5rZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfR0VORVJBVEVfTU1JQykgJiYKLQkgICAgIXdwYV90ZXN0KSB7Ci0JCS8qIGh3YWNjZWwgLSB3aXRoIG5vIG5lZWQgZm9yIHByZWFsbG9jYXRlZCByb29tIGZvciBNTUlDICovCisJICAgICEodHgtPmtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9NTUlDKSkgeworCQkvKiBod2FjY2VsIC0gd2l0aCBubyBuZWVkIGZvciBTVy1nZW5lcmF0ZWQgTU1JQyAqLwogCQlyZXR1cm4gVFhfQ09OVElOVUU7CiAJfQogCiAJdGFpbCA9IE1JQ0hBRUxfTUlDX0xFTjsKLQlpZiAoISh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSkKKwlpZiAoIWluZm8tPmNvbnRyb2wuaHdfa2V5KQogCQl0YWlsICs9IFRLSVBfSUNWX0xFTjsKIAogCWlmIChXQVJOX09OKHNrYl90YWlscm9vbShza2IpIDwgdGFpbCB8fApAQCAtMTQ3LDE3ICsxNDYsMTYgQEAKIAlpbnQgbGVuLCB0YWlsOwogCXU4ICpwb3M7CiAKLQlpZiAoKHR4LT5rZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpICYmCi0JICAgICEodHgtPmtleS0+Y29uZi5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVikpIHsKLQkJLyogaHdhY2NlbCAtIHdpdGggbm8gbmVlZCBmb3IgcHJlYWxsb2NhdGVkIHJvb20gZm9yIElWL0lDViAqLwotCQlpbmZvLT5jb250cm9sLmh3X2tleSA9ICZ0eC0+a2V5LT5jb25mOworCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSAmJgorCSAgICAhKGluZm8tPmNvbnRyb2wuaHdfa2V5LT5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVikpIHsKKwkJLyogaHdhY2NlbCAtIHdpdGggbm8gbmVlZCBmb3Igc29mdHdhcmUtZ2VuZXJhdGVkIElWICovCiAJCXJldHVybiAwOwogCX0KIAogCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAlsZW4gPSBza2ItPmxlbiAtIGhkcmxlbjsKIAotCWlmICh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKQorCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSkKIAkJdGFpbCA9IDA7CiAJZWxzZQogCQl0YWlsID0gVEtJUF9JQ1ZfTEVOOwpAQCAtMTc1LDEzICsxNzMsMTEgQEAKIAlpZiAoa2V5LT51LnRraXAudHguaXYxNiA9PSAwKQogCQlrZXktPnUudGtpcC50eC5pdjMyKys7CiAKLQlpZiAodHgtPmtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkgewotCQkvKiBod2FjY2VsIC0gd2l0aCBwcmVhbGxvY2F0ZWQgcm9vbSBmb3IgSVYgKi8KLQkJaWVlZTgwMjExX3RraXBfYWRkX2l2KHBvcywga2V5LCBrZXktPnUudGtpcC50eC5pdjE2KTsKKwlwb3MgPSBpZWVlODAyMTFfdGtpcF9hZGRfaXYocG9zLCBrZXksIGtleS0+dS50a2lwLnR4Lml2MTYpOwogCi0JCWluZm8tPmNvbnRyb2wuaHdfa2V5ID0gJnR4LT5rZXktPmNvbmY7CisJLyogaHdhY2NlbCAtIHdpdGggc29mdHdhcmUgSVYgKi8KKwlpZiAoaW5mby0+Y29udHJvbC5od19rZXkpCiAJCXJldHVybiAwOwotCX0KIAogCS8qIEFkZCByb29tIGZvciBJQ1YgKi8KIAlza2JfcHV0KHNrYiwgVEtJUF9JQ1ZfTEVOKTsKQEAgLTM2MywyNCArMzU5LDIwIEBACiAJaW50IGhkcmxlbiwgbGVuLCB0YWlsOwogCXU4ICpwb3MsICpwbjsKIAlpbnQgaTsKLQlib29sIHNraXBfaHc7CiAKLQlza2lwX2h3ID0gKHR4LT5rZXktPmNvbmYuZmxhZ3MgJiBJRUVFODAyMTFfS0VZX0ZMQUdfU1dfTUdNVCkgJiYKLQkJaWVlZTgwMjExX2lzX21nbXQoaGRyLT5mcmFtZV9jb250cm9sKTsKLQotCWlmICgodHgtPmtleS0+ZmxhZ3MgJiBLRVlfRkxBR19VUExPQURFRF9UT19IQVJEV0FSRSkgJiYKLQkgICAgISh0eC0+a2V5LT5jb25mLmZsYWdzICYgSUVFRTgwMjExX0tFWV9GTEFHX0dFTkVSQVRFX0lWKSAmJgotCSAgICAhc2tpcF9odykgewotCQkvKiBod2FjY2VsIC0gd2l0aCBubyBuZWVkIGZvciBwcmVhbGxvY2F0ZWQgcm9vbSBmb3IgQ0NNUAotCQkgKiBoZWFkZXIgb3IgTUlDIGZpZWxkcyAqLwotCQlpbmZvLT5jb250cm9sLmh3X2tleSA9ICZ0eC0+a2V5LT5jb25mOworCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSAmJgorCSAgICAhKGluZm8tPmNvbnRyb2wuaHdfa2V5LT5mbGFncyAmIElFRUU4MDIxMV9LRVlfRkxBR19HRU5FUkFURV9JVikpIHsKKwkJLyoKKwkJICogaHdhY2NlbCBoYXMgbm8gbmVlZCBmb3IgcHJlYWxsb2NhdGVkIHJvb20gZm9yIENDTVAKKwkJICogaGVhZGVyIG9yIE1JQyBmaWVsZHMKKwkJICovCiAJCXJldHVybiAwOwogCX0KIAogCWhkcmxlbiA9IGllZWU4MDIxMV9oZHJsZW4oaGRyLT5mcmFtZV9jb250cm9sKTsKIAlsZW4gPSBza2ItPmxlbiAtIGhkcmxlbjsKIAotCWlmIChrZXktPmZsYWdzICYgS0VZX0ZMQUdfVVBMT0FERURfVE9fSEFSRFdBUkUpCisJaWYgKGluZm8tPmNvbnRyb2wuaHdfa2V5KQogCQl0YWlsID0gMDsKIAllbHNlCiAJCXRhaWwgPSBDQ01QX01JQ19MRU47CkBAIC00MDUsMTEgKzM5Nyw5IEBACiAKIAljY21wX3BuMmhkcihwb3MsIHBuLCBrZXktPmNvbmYua2V5aWR4KTsKIAotCWlmICgoa2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSAmJiAhc2tpcF9odykgewotCQkvKiBod2FjY2VsIC0gd2l0aCBwcmVhbGxvY2F0ZWQgcm9vbSBmb3IgQ0NNUCBoZWFkZXIgKi8KLQkJaW5mby0+Y29udHJvbC5od19rZXkgPSAmdHgtPmtleS0+Y29uZjsKKwkvKiBod2FjY2VsIC0gd2l0aCBzb2Z0d2FyZSBDQ01QIGhlYWRlciAqLworCWlmIChpbmZvLT5jb250cm9sLmh3X2tleSkKIAkJcmV0dXJuIDA7Ci0JfQogCiAJcG9zICs9IENDTVBfSERSX0xFTjsKIAljY21wX3NwZWNpYWxfYmxvY2tzKHNrYiwgcG4sIGtleS0+dS5jY21wLnR4X2NyeXB0b19idWYsIDApOwpAQCAtNTI1LDExICs1MTUsOCBAQAogCXU4ICpwbiwgYWFkWzIwXTsKIAlpbnQgaTsKIAotCWlmICh0eC0+a2V5LT5mbGFncyAmIEtFWV9GTEFHX1VQTE9BREVEX1RPX0hBUkRXQVJFKSB7Ci0JCS8qIGh3YWNjZWwgKi8KLQkJaW5mby0+Y29udHJvbC5od19rZXkgPSAmdHgtPmtleS0+Y29uZjsKKwlpZiAoaW5mby0+Y29udHJvbC5od19rZXkpCiAJCXJldHVybiAwOwotCX0KIAogCWlmIChXQVJOX09OKHNrYl90YWlscm9vbShza2IpIDwgc2l6ZW9mKCptbWllKSkpCiAJCXJldHVybiBUWF9EUk9QOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9LY29uZmlnIGIvbmV0L25ldGZpbHRlci9LY29uZmlnCmluZGV4IDYzNGQxNGEuLjE4ZDc3YjUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvS2NvbmZpZworKysgYi9uZXQvbmV0ZmlsdGVyL0tjb25maWcKQEAgLTgzLDYgKzgzLDE5IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5ICdOJy4KIAorY29uZmlnIE5GX0NPTk5UUkFDS19aT05FUworCWJvb2wgICdDb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzJworCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisJZGVwZW5kcyBvbiBORVRGSUxURVJfWFRfVEFSR0VUX0NUCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBjb25uZWN0aW9uIHRyYWNraW5nIHpvbmVzLgorCSAgTm9ybWFsbHksIGVhY2ggY29ubmVjdGlvbiBuZWVkcyB0byBoYXZlIGEgdW5pcXVlIHN5c3RlbSB3aWRlCisJICBpZGVudGl0eS4gQ29ubmVjdGlvbiB0cmFja2luZyB6b25lcyBhbGxvdyB0byBoYXZlIG11bHRpcGxlCisJICBjb25uZWN0aW9ucyB1c2luZyB0aGUgc2FtZSBpZGVudGl0eSwgYXMgbG9uZyBhcyB0aGV5IGFyZQorCSAgY29udGFpbmVkIGluIGRpZmZlcmVudCB6b25lcy4KKworCSAgSWYgdW5zdXJlLCBzYXkgYE4nLgorCiBjb25maWcgTkZfQ09OTlRSQUNLX0VWRU5UUwogCWJvb2wgIkNvbm5lY3Rpb24gdHJhY2tpbmcgZXZlbnRzIgogCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECkBAIC0zNDEsNiArMzU0LDE4IEBACiAKIAkgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9DVAorCXRyaXN0YXRlICciQ1QiIHRhcmdldCBzdXBwb3J0JworCWRlcGVuZHMgb24gTkZfQ09OTlRSQUNLCisJZGVwZW5kcyBvbiBJUF9ORl9SQVcgfHwgSVA2X05GX1JBVworCWRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VECisJaGVscAorCSAgVGhpcyBvcHRpb25zIGFkZHMgYSBgQ1QnIHRhcmdldCwgd2hpY2ggYWxsb3dzIHRvIHNwZWNpZnkgaW5pdGlhbAorCSAgY29ubmVjdGlvbiB0cmFja2luZyBwYXJhbWV0ZXJzIGxpa2UgZXZlbnRzIHRvIGJlIGRlbGl2ZXJlZCBhbmQKKwkgIHRoZSBoZWxwZXIgdG8gYmUgdXNlZC4KKworCSAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1AKIAl0cmlzdGF0ZSAnIkRTQ1AiIGFuZCAiVE9TIiB0YXJnZXQgc3VwcG9ydCcKIAlkZXBlbmRzIG9uIElQX05GX01BTkdMRSB8fCBJUDZfTkZfTUFOR0xFCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlIGIvbmV0L25ldGZpbHRlci9NYWtlZmlsZQppbmRleCA0OWY2MmVlLi5mODczNjQ0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL01ha2VmaWxlCisrKyBiL25ldC9uZXRmaWx0ZXIvTWFrZWZpbGUKQEAgLTQ0LDYgKzQ0LDcgQEAKIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NMQVNTSUZZKSArPSB4dF9DTEFTU0lGWS5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DT05OTUFSSykgKz0geHRfQ09OTk1BUksubwogb2JqLSQoQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfQ09OTlNFQ01BUkspICs9IHh0X0NPTk5TRUNNQVJLLm8KK29iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0NUKSArPSB4dF9DVC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9EU0NQKSArPSB4dF9EU0NQLm8KIG9iai0kKENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0hMKSArPSB4dF9ITC5vCiBvYmotJChDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9MRUQpICs9IHh0X0xFRC5vCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnCmluZGV4IGYyZDc2MjMuLjcxMmNjYWQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnCkBAIC02OCw2ICs2OCwxMCBAQAogCSAgZWFjaCBoYXNoIGVudHJ5IHVzZXMgOCBieXRlcywgc28geW91IGNhbiBlc3RpbWF0ZSBob3cgbXVjaCBtZW1vcnkgaXMKIAkgIG5lZWRlZCBmb3IgeW91ciBib3guCiAKKwkgIFlvdSBjYW4gb3ZlcndyaXRlIHRoaXMgbnVtYmVyIHNldHRpbmcgY29ubl90YWJfYml0cyBtb2R1bGUgcGFyYW1ldGVyCisJICBvciBieSBhcHBlbmRpbmcgaXBfdnMuY29ubl90YWJfYml0cz0/IHRvIHRoZSBrZXJuZWwgY29tbWFuZCBsaW5lCisJICBpZiBJUCBWUyB3YXMgY29tcGlsZWQgYnVpbHQtaW4uCisKIGNvbW1lbnQgIklQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnQiCiAKIGNvbmZpZwlJUF9WU19QUk9UT19UQ1AKQEAgLTEwMCw2ICsxMDQsMTMgQEAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgQUggKEF1dGhlbnRpY2F0aW9uCiAJICBIZWFkZXIpIHRyYW5zcG9ydCBwcm90b2NvbC4gU2F5IFkgaWYgdW5zdXJlLgogCitjb25maWcgIElQX1ZTX1BST1RPX1NDVFAKKwlib29sICJTQ1RQIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnQiCisJc2VsZWN0IExJQkNSQzMyQworCS0tLWhlbHAtLS0KKwkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgbG9hZCBiYWxhbmNpbmcgU0NUUCB0cmFuc3BvcnQKKwkgIHByb3RvY29sLiBTYXkgWSBpZiB1bnN1cmUuCisKIGNvbW1lbnQgIklQVlMgc2NoZWR1bGVyIgogCiBjb25maWcJSVBfVlNfUlIKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZSBiL25ldC9uZXRmaWx0ZXIvaXB2cy9NYWtlZmlsZQppbmRleCA3M2E0NmZlLi5lM2JhZWZkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlCkBAIC03LDYgKzcsNyBAQAogaXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19UQ1ApICs9IGlwX3ZzX3Byb3RvX3RjcC5vCiBpcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX1VEUCkgKz0gaXBfdnNfcHJvdG9fdWRwLm8KIGlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fQUhfRVNQKSArPSBpcF92c19wcm90b19haF9lc3AubworaXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19TQ1RQKSArPSBpcF92c19wcm90b19zY3RwLm8KIAogaXBfdnMtb2JqcyA6PQlpcF92c19jb25uLm8gaXBfdnNfY29yZS5vIGlwX3ZzX2N0bC5vIGlwX3ZzX3NjaGVkLm8JICAgXAogCQlpcF92c194bWl0Lm8gaXBfdnNfYXBwLm8gaXBfdnNfc3luYy5vCSAgIAkJICAgXApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMKaW5kZXggMjdjMzBjZi4uNjBiYjQxYSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYworKysgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jCkBAIC00MCw2ICs0MCwyMSBAQAogI2luY2x1ZGUgPG5ldC9pcF92cy5oPgogCiAKKyNpZm5kZWYgQ09ORklHX0lQX1ZTX1RBQl9CSVRTCisjZGVmaW5lIENPTkZJR19JUF9WU19UQUJfQklUUwkxMgorI2VuZGlmCisKKy8qCisgKiBDb25uZWN0aW9uIGhhc2ggc2l6ZS4gRGVmYXVsdCBpcyB3aGF0IHdhcyBzZWxlY3RlZCBhdCBjb21waWxlIHRpbWUuCisqLworaW50IGlwX3ZzX2Nvbm5fdGFiX2JpdHMgPSBDT05GSUdfSVBfVlNfVEFCX0JJVFM7Cittb2R1bGVfcGFyYW1fbmFtZWQoY29ubl90YWJfYml0cywgaXBfdnNfY29ubl90YWJfYml0cywgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY29ubl90YWJfYml0cywgIlNldCBjb25uZWN0aW9ucycgaGFzaCBzaXplIik7CisKKy8qIHNpemUgYW5kIG1hc2sgdmFsdWVzICovCitpbnQgaXBfdnNfY29ubl90YWJfc2l6ZTsKK2ludCBpcF92c19jb25uX3RhYl9tYXNrOworCiAvKgogICogIENvbm5lY3Rpb24gaGFzaCB0YWJsZTogZm9yIGlucHV0IGFuZCBvdXRwdXQgcGFja2V0cyBsb29rdXBzIG9mIElQVlMKICAqLwpAQCAtMTI1LDExICsxNDAsMTEgQEAKIAlpZiAoYWYgPT0gQUZfSU5FVDYpCiAJCXJldHVybiBqaGFzaF8zd29yZHMoamhhc2goYWRkciwgMTYsIGlwX3ZzX2Nvbm5fcm5kKSwKIAkJCQkgICAgKF9fZm9yY2UgdTMyKXBvcnQsIHByb3RvLCBpcF92c19jb25uX3JuZCkKLQkJCSYgSVBfVlNfQ09OTl9UQUJfTUFTSzsKKwkJCSYgaXBfdnNfY29ubl90YWJfbWFzazsKICNlbmRpZgogCXJldHVybiBqaGFzaF8zd29yZHMoKF9fZm9yY2UgdTMyKWFkZHItPmlwLCAoX19mb3JjZSB1MzIpcG9ydCwgcHJvdG8sCiAJCQkgICAgaXBfdnNfY29ubl9ybmQpCi0JCSYgSVBfVlNfQ09OTl9UQUJfTUFTSzsKKwkJJiBpcF92c19jb25uX3RhYl9tYXNrOwogfQogCiAKQEAgLTc2MCw3ICs3NzUsNyBAQAogCWludCBpZHg7CiAJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwOwogCi0JZm9yKGlkeCA9IDA7IGlkeCA8IElQX1ZTX0NPTk5fVEFCX1NJWkU7IGlkeCsrKSB7CisJZm9yIChpZHggPSAwOyBpZHggPCBpcF92c19jb25uX3RhYl9zaXplOyBpZHgrKykgewogCQljdF9yZWFkX2xvY2tfYmgoaWR4KTsKIAkJbGlzdF9mb3JfZWFjaF9lbnRyeShjcCwgJmlwX3ZzX2Nvbm5fdGFiW2lkeF0sIGNfbGlzdCkgewogCQkJaWYgKHBvcy0tID09IDApIHsKQEAgLTc5Nyw3ICs4MTIsNyBAQAogCWlkeCA9IGwgLSBpcF92c19jb25uX3RhYjsKIAljdF9yZWFkX3VubG9ja19iaChpZHgpOwogCi0Jd2hpbGUgKCsraWR4IDwgSVBfVlNfQ09OTl9UQUJfU0laRSkgeworCXdoaWxlICgrK2lkeCA8IGlwX3ZzX2Nvbm5fdGFiX3NpemUpIHsKIAkJY3RfcmVhZF9sb2NrX2JoKGlkeCk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkoY3AsICZpcF92c19jb25uX3RhYltpZHhdLCBjX2xpc3QpIHsKIAkJCXNlcS0+cHJpdmF0ZSA9ICZpcF92c19jb25uX3RhYltpZHhdOwpAQCAtOTc2LDggKzk5MSw4IEBACiAJLyoKIAkgKiBSYW5kb21seSBzY2FuIDEvMzIgb2YgdGhlIHdob2xlIHRhYmxlIGV2ZXJ5IHNlY29uZAogCSAqLwotCWZvciAoaWR4ID0gMDsgaWR4IDwgKElQX1ZTX0NPTk5fVEFCX1NJWkU+PjUpOyBpZHgrKykgewotCQl1bnNpZ25lZCBoYXNoID0gbmV0X3JhbmRvbSgpICYgSVBfVlNfQ09OTl9UQUJfTUFTSzsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IChpcF92c19jb25uX3RhYl9zaXplPj41KTsgaWR4KyspIHsKKwkJdW5zaWduZWQgaGFzaCA9IG5ldF9yYW5kb20oKSAmIGlwX3ZzX2Nvbm5fdGFiX21hc2s7CiAKIAkJLyoKIAkJICogIExvY2sgaXMgYWN0dWFsbHkgbmVlZGVkIGluIHRoaXMgbG9vcC4KQEAgLTEwMjksNyArMTA0NCw3IEBACiAJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwOwogCiAgIGZsdXNoX2FnYWluOgotCWZvciAoaWR4PTA7IGlkeDxJUF9WU19DT05OX1RBQl9TSVpFOyBpZHgrKykgeworCWZvciAoaWR4ID0gMDsgaWR4IDwgaXBfdnNfY29ubl90YWJfc2l6ZTsgaWR4KyspIHsKIAkJLyoKIAkJICogIExvY2sgaXMgYWN0dWFsbHkgbmVlZGVkIGluIHRoaXMgbG9vcC4KIAkJICovCkBAIC0xMDYwLDEwICsxMDc1LDE1IEBACiB7CiAJaW50IGlkeDsKIAorCS8qIENvbXB1dGUgc2l6ZSBhbmQgbWFzayAqLworCWlwX3ZzX2Nvbm5fdGFiX3NpemUgPSAxIDw8IGlwX3ZzX2Nvbm5fdGFiX2JpdHM7CisJaXBfdnNfY29ubl90YWJfbWFzayA9IGlwX3ZzX2Nvbm5fdGFiX3NpemUgLSAxOworCiAJLyoKIAkgKiBBbGxvY2F0ZSB0aGUgY29ubmVjdGlvbiBoYXNoIHRhYmxlIGFuZCBpbml0aWFsaXplIGl0cyBsaXN0IGhlYWRzCiAJICovCi0JaXBfdnNfY29ubl90YWIgPSB2bWFsbG9jKElQX1ZTX0NPTk5fVEFCX1NJWkUqc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpKTsKKwlpcF92c19jb25uX3RhYiA9IHZtYWxsb2MoaXBfdnNfY29ubl90YWJfc2l6ZSAqCisJCQkJIHNpemVvZihzdHJ1Y3QgbGlzdF9oZWFkKSk7CiAJaWYgKCFpcF92c19jb25uX3RhYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTEwNzgsMTIgKzEwOTgsMTIgQEAKIAogCXByX2luZm8oIkNvbm5lY3Rpb24gaGFzaCB0YWJsZSBjb25maWd1cmVkICIKIAkJIihzaXplPSVkLCBtZW1vcnk9JWxkS2J5dGVzKVxuIiwKLQkJSVBfVlNfQ09OTl9UQUJfU0laRSwKLQkJKGxvbmcpKElQX1ZTX0NPTk5fVEFCX1NJWkUqc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpKS8xMDI0KTsKKwkJaXBfdnNfY29ubl90YWJfc2l6ZSwKKwkJKGxvbmcpKGlwX3ZzX2Nvbm5fdGFiX3NpemUqc2l6ZW9mKHN0cnVjdCBsaXN0X2hlYWQpKS8xMDI0KTsKIAlJUF9WU19EQkcoMCwgIkVhY2ggY29ubmVjdGlvbiBlbnRyeSBuZWVkcyAlWmQgYnl0ZXMgYXQgbGVhc3RcbiIsCiAJCSAgc2l6ZW9mKHN0cnVjdCBpcF92c19jb25uKSk7CiAKLQlmb3IgKGlkeCA9IDA7IGlkeCA8IElQX1ZTX0NPTk5fVEFCX1NJWkU7IGlkeCsrKSB7CisJZm9yIChpZHggPSAwOyBpZHggPCBpcF92c19jb25uX3RhYl9zaXplOyBpZHgrKykgewogCQlJTklUX0xJU1RfSEVBRCgmaXBfdnNfY29ubl90YWJbaWR4XSk7CiAJfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYwppbmRleCA4NDdmZmNhLi40NDU5MDg4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pcC5oPgogI2luY2x1ZGUgPGxpbnV4L3RjcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjdHAuaD4KICNpbmNsdWRlIDxsaW51eC9pY21wLmg+CiAKICNpbmNsdWRlIDxuZXQvaXAuaD4KQEAgLTgxLDYgKzgyLDggQEAKIAkJcmV0dXJuICJVRFAiOwogCWNhc2UgSVBQUk9UT19UQ1A6CiAJCXJldHVybiAiVENQIjsKKwljYXNlIElQUFJPVE9fU0NUUDoKKwkJcmV0dXJuICJTQ1RQIjsKIAljYXNlIElQUFJPVE9fSUNNUDoKIAkJcmV0dXJuICJJQ01QIjsKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgpAQCAtNTEyLDggKzUxNSw3IEBACiAJICovCiAjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKIAlpZiAoc3ZjLT5hZiA9PSBBRl9JTkVUNikKLQkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfREVTVF9VTlJFQUNILCBJQ01QVjZfUE9SVF9VTlJFQUNILCAwLAotCQkJICAgIHNrYi0+ZGV2KTsKKwkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfREVTVF9VTlJFQUNILCBJQ01QVjZfUE9SVF9VTlJFQUNILCAwKTsKIAllbHNlCiAjZW5kaWYKIAkJaWNtcF9zZW5kKHNrYiwgSUNNUF9ERVNUX1VOUkVBQ0gsIElDTVBfUE9SVF9VTlJFQUNILCAwKTsKQEAgLTU4OSw4ICs1OTEsOSBAQAogCQlpcF9zZW5kX2NoZWNrKGNpcGgpOwogCX0KIAotCS8qIHRoZSBUQ1AvVURQIHBvcnQgKi8KLQlpZiAoSVBQUk9UT19UQ1AgPT0gY2lwaC0+cHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2lwaC0+cHJvdG9jb2wpIHsKKwkvKiB0aGUgVENQL1VEUC9TQ1RQIHBvcnQgKi8KKwlpZiAoSVBQUk9UT19UQ1AgPT0gY2lwaC0+cHJvdG9jb2wgfHwgSVBQUk9UT19VRFAgPT0gY2lwaC0+cHJvdG9jb2wgfHwKKwkgICAgSVBQUk9UT19TQ1RQID09IGNpcGgtPnByb3RvY29sKSB7CiAJCV9fYmUxNiAqcG9ydHMgPSAodm9pZCAqKWNpcGggKyBjaXBoLT5paGwqNDsKIAogCQlpZiAoaW5vdXQpCkBAIC02MzAsOCArNjMzLDkgQEAKIAkJY2lwaC0+c2FkZHIgPSBjcC0+ZGFkZHIuaW42OwogCX0KIAotCS8qIHRoZSBUQ1AvVURQIHBvcnQgKi8KLQlpZiAoSVBQUk9UT19UQ1AgPT0gY2lwaC0+bmV4dGhkciB8fCBJUFBST1RPX1VEUCA9PSBjaXBoLT5uZXh0aGRyKSB7CisJLyogdGhlIFRDUC9VRFAvU0NUUCBwb3J0ICovCisJaWYgKElQUFJPVE9fVENQID09IGNpcGgtPm5leHRoZHIgfHwgSVBQUk9UT19VRFAgPT0gY2lwaC0+bmV4dGhkciB8fAorCSAgICBJUFBST1RPX1NDVFAgPT0gY2lwaC0+bmV4dGhkcikgewogCQlfX2JlMTYgKnBvcnRzID0gKHZvaWQgKiljaXBoICsgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKIAogCQlpZiAoaW5vdXQpCkBAIC02NzksNyArNjgzLDggQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKElQUFJPVE9fVENQID09IHByb3RvY29sIHx8IElQUFJPVE9fVURQID09IHByb3RvY29sKQorCWlmIChJUFBST1RPX1RDUCA9PSBwcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBwcm90b2NvbCB8fAorCSAgICBJUFBST1RPX1NDVFAgPT0gcHJvdG9jb2wpCiAJCW9mZnNldCArPSAyICogc2l6ZW9mKF9fdTE2KTsKIAlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHNrYiwgb2Zmc2V0KSkKIAkJZ290byBvdXQ7CkBAIC04NTcsNiArODYyLDIxIEBACiB9CiAjZW5kaWYKIAorLyoKKyAqIENoZWNrIGlmIHNjdHAgY2h1bmMgaXMgQUJPUlQgY2h1bmsKKyAqLworc3RhdGljIGlubGluZSBpbnQgaXNfc2N0cF9hYm9ydChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgbmhfbGVuKQoreworCXNjdHBfY2h1bmtoZHJfdCAqc2NoLCBzY2h1bms7CisJc2NoID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgbmhfbGVuICsgc2l6ZW9mKHNjdHBfc2N0cGhkcl90KSwKKwkJCXNpemVvZihzY2h1bmspLCAmc2NodW5rKTsKKwlpZiAoc2NoID09IE5VTEwpCisJCXJldHVybiAwOworCWlmIChzY2gtPnR5cGUgPT0gU0NUUF9DSURfQUJPUlQpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiBzdGF0aWMgaW5saW5lIGludCBpc190Y3BfcmVzZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oX2xlbikKIHsKIAlzdHJ1Y3QgdGNwaGRyIF90Y3BoLCAqdGg7CkBAIC05OTksNyArMTAxOSw4IEBACiAJaWYgKHVubGlrZWx5KCFjcCkpIHsKIAkJaWYgKHN5c2N0bF9pcF92c19uYXRfaWNtcF9zZW5kICYmCiAJCSAgICAocHAtPnByb3RvY29sID09IElQUFJPVE9fVENQIHx8Ci0JCSAgICAgcHAtPnByb3RvY29sID09IElQUFJPVE9fVURQKSkgeworCQkgICAgIHBwLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCB8fAorCQkgICAgIHBwLT5wcm90b2NvbCA9PSBJUFBST1RPX1NDVFApKSB7CiAJCQlfX2JlMTYgX3BvcnRzWzJdLCAqcHB0cjsKIAogCQkJcHB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGlwaC5sZW4sCkBAIC0xMDE0LDE0ICsxMDM1LDE5IEBACiAJCQkJICogZXhpc3RpbmcgZW50cnkgaWYgaXQgaXMgbm90IFJTVAogCQkJCSAqIHBhY2tldCBvciBub3QgVENQIHBhY2tldC4KIAkJCQkgKi8KLQkJCQlpZiAoaXBoLnByb3RvY29sICE9IElQUFJPVE9fVENQCi0JCQkJICAgIHx8ICFpc190Y3BfcmVzZXQoc2tiLCBpcGgubGVuKSkgeworCQkJCWlmICgoaXBoLnByb3RvY29sICE9IElQUFJPVE9fVENQICYmCisJCQkJICAgICBpcGgucHJvdG9jb2wgIT0gSVBQUk9UT19TQ1RQKQorCQkJCSAgICAgfHwgKChpcGgucHJvdG9jb2wgPT0gSVBQUk9UT19UQ1AKKwkJCQkJICAmJiAhaXNfdGNwX3Jlc2V0KHNrYiwgaXBoLmxlbikpCisJCQkJCSB8fCAoaXBoLnByb3RvY29sID09IElQUFJPVE9fU0NUUAorCQkJCQkJJiYgIWlzX3NjdHBfYWJvcnQoc2tiLAorCQkJCQkJCWlwaC5sZW4pKSkpIHsKICNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgogCQkJCQlpZiAoYWYgPT0gQUZfSU5FVDYpCiAJCQkJCQlpY21wdjZfc2VuZChza2IsCiAJCQkJCQkJICAgIElDTVBWNl9ERVNUX1VOUkVBQ0gsCiAJCQkJCQkJICAgIElDTVBWNl9QT1JUX1VOUkVBQ0gsCi0JCQkJCQkJICAgIDAsIHNrYi0+ZGV2KTsKKwkJCQkJCQkgICAgMCk7CiAJCQkJCWVsc2UKICNlbmRpZgogCQkJCQkJaWNtcF9zZW5kKHNrYiwKQEAgLTEyMzUsNyArMTI2MSw4IEBACiAKIAkvKiBkbyB0aGUgc3RhdGlzdGljcyBhbmQgcHV0IGl0IGJhY2sgKi8KIAlpcF92c19pbl9zdGF0cyhjcCwgc2tiKTsKLQlpZiAoSVBQUk9UT19UQ1AgPT0gY2loLT5uZXh0aGRyIHx8IElQUFJPVE9fVURQID09IGNpaC0+bmV4dGhkcikKKwlpZiAoSVBQUk9UT19UQ1AgPT0gY2loLT5uZXh0aGRyIHx8IElQUFJPVE9fVURQID09IGNpaC0+bmV4dGhkciB8fAorCSAgICBJUFBST1RPX1NDVFAgPT0gY2loLT5uZXh0aGRyKQogCQlvZmZzZXQgKz0gMiAqIHNpemVvZihfX3UxNik7CiAJdmVyZGljdCA9IGlwX3ZzX2ljbXBfeG1pdF92Nihza2IsIGNwLCBwcCwgb2Zmc2V0KTsKIAkvKiBkbyBub3QgdG91Y2ggc2tiIGFueW1vcmUgKi8KQEAgLTEzNTgsNiArMTM4NSwyMSBAQAogCSAqIGVuY29yYWdlIHRoZSBzdGFuZGJ5IHNlcnZlcnMgdG8gdXBkYXRlIHRoZSBjb25uZWN0aW9ucyB0aW1lb3V0CiAJICovCiAJcGt0cyA9IGF0b21pY19hZGRfcmV0dXJuKDEsICZjcC0+aW5fcGt0cyk7CisJaWYgKGFmID09IEFGX0lORVQgJiYgKGlwX3ZzX3N5bmNfc3RhdGUgJiBJUF9WU19TVEFURV9NQVNURVIpICYmCisJICAgIGNwLT5wcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHsKKwkJaWYgKChjcC0+c3RhdGUgPT0gSVBfVlNfU0NUUF9TX0VTVEFCTElTSEVEICYmCisJCQkoYXRvbWljX3JlYWQoJmNwLT5pbl9wa3RzKSAlCisJCQkgc3lzY3RsX2lwX3ZzX3N5bmNfdGhyZXNob2xkWzFdCisJCQkgPT0gc3lzY3RsX2lwX3ZzX3N5bmNfdGhyZXNob2xkWzBdKSkgfHwKKwkJCQkoY3AtPm9sZF9zdGF0ZSAhPSBjcC0+c3RhdGUgJiYKKwkJCQkgKChjcC0+c3RhdGUgPT0gSVBfVlNfU0NUUF9TX0NMT1NFRCkgfHwKKwkJCQkgIChjcC0+c3RhdGUgPT0gSVBfVlNfU0NUUF9TX1NIVVRfQUNLX0NMSSkgfHwKKwkJCQkgIChjcC0+c3RhdGUgPT0gSVBfVlNfU0NUUF9TX1NIVVRfQUNLX1NFUikpKSkgeworCQkJaXBfdnNfc3luY19jb25uKGNwKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCiAJaWYgKGFmID09IEFGX0lORVQgJiYKIAkgICAgKGlwX3ZzX3N5bmNfc3RhdGUgJiBJUF9WU19TVEFURV9NQVNURVIpICYmCiAJICAgICgoKGNwLT5wcm90b2NvbCAhPSBJUFBST1RPX1RDUCB8fApAQCAtMTM3MCw2ICsxNDEyLDcgQEAKIAkgICAgICAgKGNwLT5zdGF0ZSA9PSBJUF9WU19UQ1BfU19DTE9TRV9XQUlUKSB8fAogCSAgICAgICAoY3AtPnN0YXRlID09IElQX1ZTX1RDUF9TX1RJTUVfV0FJVCkpKSkpCiAJCWlwX3ZzX3N5bmNfY29ubihjcCk7CitvdXQ6CiAJY3AtPm9sZF9zdGF0ZSA9IGNwLT5zdGF0ZTsKIAogCWlwX3ZzX2Nvbm5fcHV0KGNwKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYwppbmRleCBjMzdhYzJkLi43ZWU5YzM0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jCkBAIC0xODQzLDcgKzE4NDMsNyBAQAogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgewogCQlzZXFfcHJpbnRmKHNlcSwKIAkJCSJJUCBWaXJ0dWFsIFNlcnZlciB2ZXJzaW9uICVkLiVkLiVkIChzaXplPSVkKVxuIiwKLQkJCU5WRVJTSU9OKElQX1ZTX1ZFUlNJT05fQ09ERSksIElQX1ZTX0NPTk5fVEFCX1NJWkUpOworCQkJTlZFUlNJT04oSVBfVlNfVkVSU0lPTl9DT0RFKSwgaXBfdnNfY29ubl90YWJfc2l6ZSk7CiAJCXNlcV9wdXRzKHNlcSwKIAkJCSAiUHJvdCBMb2NhbEFkZHJlc3M6UG9ydCBTY2hlZHVsZXIgRmxhZ3NcbiIpOwogCQlzZXFfcHV0cyhzZXEsCkBAIC0yMTMyLDggKzIxMzIsOSBAQAogCQl9CiAJfQogCi0JLyogQ2hlY2sgZm9yIHZhbGlkIHByb3RvY29sOiBUQ1Agb3IgVURQLCBldmVuIGZvciBmd21hcmshPTAgKi8KLQlpZiAodXN2Yy5wcm90b2NvbCAhPSBJUFBST1RPX1RDUCAmJiB1c3ZjLnByb3RvY29sICE9IElQUFJPVE9fVURQKSB7CisJLyogQ2hlY2sgZm9yIHZhbGlkIHByb3RvY29sOiBUQ1Agb3IgVURQIG9yIFNDVFAsIGV2ZW4gZm9yIGZ3bWFyayE9MCAqLworCWlmICh1c3ZjLnByb3RvY29sICE9IElQUFJPVE9fVENQICYmIHVzdmMucHJvdG9jb2wgIT0gSVBQUk9UT19VRFAgJiYKKwkgICAgdXN2Yy5wcm90b2NvbCAhPSBJUFBST1RPX1NDVFApIHsKIAkJcHJfZXJyKCJzZXRfY3RsOiBpbnZhbGlkIHByb3RvY29sOiAlZCAlcEk0OiVkICVzXG4iLAogCQkgICAgICAgdXN2Yy5wcm90b2NvbCwgJnVzdmMuYWRkci5pcCwKIAkJICAgICAgIG50b2hzKHVzdmMucG9ydCksIHVzdmMuc2NoZWRfbmFtZSk7CkBAIC0yMzg2LDcgKzIzODcsNyBAQAogCQljaGFyIGJ1Zls2NF07CiAKIAkJc3ByaW50ZihidWYsICJJUCBWaXJ0dWFsIFNlcnZlciB2ZXJzaW9uICVkLiVkLiVkIChzaXplPSVkKSIsCi0JCQlOVkVSU0lPTihJUF9WU19WRVJTSU9OX0NPREUpLCBJUF9WU19DT05OX1RBQl9TSVpFKTsKKwkJCU5WRVJTSU9OKElQX1ZTX1ZFUlNJT05fQ09ERSksIGlwX3ZzX2Nvbm5fdGFiX3NpemUpOwogCQlpZiAoY29weV90b191c2VyKHVzZXIsIGJ1Ziwgc3RybGVuKGJ1ZikrMSkgIT0gMCkgewogCQkJcmV0ID0gLUVGQVVMVDsKIAkJCWdvdG8gb3V0OwpAQCAtMjM5OSw3ICsyNDAwLDcgQEAKIAl7CiAJCXN0cnVjdCBpcF92c19nZXRpbmZvIGluZm87CiAJCWluZm8udmVyc2lvbiA9IElQX1ZTX1ZFUlNJT05fQ09ERTsKLQkJaW5mby5zaXplID0gSVBfVlNfQ09OTl9UQUJfU0laRTsKKwkJaW5mby5zaXplID0gaXBfdnNfY29ubl90YWJfc2l6ZTsKIAkJaW5mby5udW1fc2VydmljZXMgPSBpcF92c19udW1fc2VydmljZXM7CiAJCWlmIChjb3B5X3RvX3VzZXIodXNlciwgJmluZm8sIHNpemVvZihpbmZvKSkgIT0gMCkKIAkJCXJldCA9IC1FRkFVTFQ7CkBAIC0zMjQzLDcgKzMyNDQsNyBAQAogCWNhc2UgSVBWU19DTURfR0VUX0lORk86CiAJCU5MQV9QVVRfVTMyKG1zZywgSVBWU19JTkZPX0FUVFJfVkVSU0lPTiwgSVBfVlNfVkVSU0lPTl9DT0RFKTsKIAkJTkxBX1BVVF9VMzIobXNnLCBJUFZTX0lORk9fQVRUUl9DT05OX1RBQl9TSVpFLAotCQkJICAgIElQX1ZTX0NPTk5fVEFCX1NJWkUpOworCQkJICAgIGlwX3ZzX2Nvbm5fdGFiX3NpemUpOwogCQlicmVhazsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19mdHAuYwppbmRleCAzM2UyYzc5Li43M2YzOGVhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfZnRwLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Z0cC5jCkBAIC0yMDgsNyArMjA4LDcgQEAKIAkJICovCiAJCWZyb20uaXAgPSBuX2NwLT52YWRkci5pcDsKIAkJcG9ydCA9IG5fY3AtPnZwb3J0OwotCQlzcHJpbnRmKGJ1ZiwgIiVkLCVkLCVkLCVkLCVkLCVkIiwgTklQUVVBRChmcm9tLmlwKSwKKwkJc3ByaW50ZihidWYsICIldSwldSwldSwldSwldSwldSIsIE5JUFFVQUQoZnJvbS5pcCksCiAJCQkobnRvaHMocG9ydCk+PjgpJjI1NSwgbnRvaHMocG9ydCkmMjU1KTsKIAkJYnVmX2xlbiA9IHN0cmxlbihidWYpOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfbGJsY3IuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jCmluZGV4IGY3NDc2YjkuLmNhYTU4ZmEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19sYmxjci5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KIAogLyogZm9yIHN5c2N0bCAqLwogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC04NSwyNSArODYsMjUgQEAKIC8qCiAgKiAgICAgIElQVlMgZGVzdGluYXRpb24gc2V0IHN0cnVjdHVyZSBhbmQgb3BlcmF0aW9ucwogICovCi1zdHJ1Y3QgaXBfdnNfZGVzdF9saXN0IHsKLQlzdHJ1Y3QgaXBfdnNfZGVzdF9saXN0ICAqbmV4dDsgICAgICAgICAgLyogbGlzdCBsaW5rICovCitzdHJ1Y3QgaXBfdnNfZGVzdF9zZXRfZWxlbSB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OyAgICAgICAgICAvKiBsaXN0IGxpbmsgKi8KIAlzdHJ1Y3QgaXBfdnNfZGVzdCAgICAgICAqZGVzdDsgICAgICAgICAgLyogZGVzdGluYXRpb24gc2VydmVyICovCiB9OwogCiBzdHJ1Y3QgaXBfdnNfZGVzdF9zZXQgewogCWF0b21pY190ICAgICAgICAgICAgICAgIHNpemU7ICAgICAgICAgICAvKiBzZXQgc2l6ZSAqLwogCXVuc2lnbmVkIGxvbmcgICAgICAgICAgIGxhc3Rtb2Q7ICAgICAgICAvKiBsYXN0IG1vZGlmaWVkIHRpbWUgKi8KLQlzdHJ1Y3QgaXBfdnNfZGVzdF9saXN0ICAqbGlzdDsgICAgICAgICAgLyogZGVzdGluYXRpb24gbGlzdCAqLworCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsgICAgICAgICAgIC8qIGRlc3RpbmF0aW9uIGxpc3QgKi8KIAlyd2xvY2tfdAkgICAgICAgIGxvY2s7ICAgICAgICAgICAvKiBsb2NrIGZvciB0aGlzIGxpc3QgKi8KIH07CiAKIAotc3RhdGljIHN0cnVjdCBpcF92c19kZXN0X2xpc3QgKgorc3RhdGljIHN0cnVjdCBpcF92c19kZXN0X3NldF9lbGVtICoKIGlwX3ZzX2Rlc3Rfc2V0X2luc2VydChzdHJ1Y3QgaXBfdnNfZGVzdF9zZXQgKnNldCwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpCiB7Ci0Jc3RydWN0IGlwX3ZzX2Rlc3RfbGlzdCAqZTsKKwlzdHJ1Y3QgaXBfdnNfZGVzdF9zZXRfZWxlbSAqZTsKIAotCWZvciAoZT1zZXQtPmxpc3Q7IGUhPU5VTEw7IGU9ZS0+bmV4dCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJnNldC0+bGlzdCwgbGlzdCkgewogCQlpZiAoZS0+ZGVzdCA9PSBkZXN0KQogCQkJLyogYWxyZWFkeSBleGlzdGVkICovCiAJCQlyZXR1cm4gTlVMTDsKQEAgLTExOCw5ICsxMTksNyBAQAogCWF0b21pY19pbmMoJmRlc3QtPnJlZmNudCk7CiAJZS0+ZGVzdCA9IGRlc3Q7CiAKLQkvKiBsaW5rIGl0IHRvIHRoZSBsaXN0ICovCi0JZS0+bmV4dCA9IHNldC0+bGlzdDsKLQlzZXQtPmxpc3QgPSBlOworCWxpc3RfYWRkKCZlLT5saXN0LCAmc2V0LT5saXN0KTsKIAlhdG9taWNfaW5jKCZzZXQtPnNpemUpOwogCiAJc2V0LT5sYXN0bW9kID0gamlmZmllczsKQEAgLTEzMCwzNCArMTI5LDMzIEBACiBzdGF0aWMgdm9pZAogaXBfdnNfZGVzdF9zZXRfZXJhc2Uoc3RydWN0IGlwX3ZzX2Rlc3Rfc2V0ICpzZXQsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KQogewotCXN0cnVjdCBpcF92c19kZXN0X2xpc3QgKmUsICoqZXA7CisJc3RydWN0IGlwX3ZzX2Rlc3Rfc2V0X2VsZW0gKmU7CiAKLQlmb3IgKGVwPSZzZXQtPmxpc3QsIGU9KmVwOyBlIT1OVUxMOyBlPSplcCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJnNldC0+bGlzdCwgbGlzdCkgewogCQlpZiAoZS0+ZGVzdCA9PSBkZXN0KSB7CiAJCQkvKiBISVQgKi8KLQkJCSplcCA9IGUtPm5leHQ7CiAJCQlhdG9taWNfZGVjKCZzZXQtPnNpemUpOwogCQkJc2V0LT5sYXN0bW9kID0gamlmZmllczsKIAkJCWF0b21pY19kZWMoJmUtPmRlc3QtPnJlZmNudCk7CisJCQlsaXN0X2RlbCgmZS0+bGlzdCk7CiAJCQlrZnJlZShlKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWVwID0gJmUtPm5leHQ7CiAJfQogfQogCiBzdGF0aWMgdm9pZCBpcF92c19kZXN0X3NldF9lcmFzZWFsbChzdHJ1Y3QgaXBfdnNfZGVzdF9zZXQgKnNldCkKIHsKLQlzdHJ1Y3QgaXBfdnNfZGVzdF9saXN0ICplLCAqKmVwOworCXN0cnVjdCBpcF92c19kZXN0X3NldF9lbGVtICplLCAqZXA7CiAKIAl3cml0ZV9sb2NrKCZzZXQtPmxvY2spOwotCWZvciAoZXA9JnNldC0+bGlzdCwgZT0qZXA7IGUhPU5VTEw7IGU9KmVwKSB7Ci0JCSplcCA9IGUtPm5leHQ7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGUsIGVwLCAmc2V0LT5saXN0LCBsaXN0KSB7CiAJCS8qCiAJCSAqIFdlIGRvbid0IGtmcmVlIGRlc3QgYmVjYXVzZSBpdCBpcyByZWZlcmVkIGVpdGhlcgogCQkgKiBieSBpdHMgc2VydmljZSBvciBieSB0aGUgdHJhc2ggZGVzdCBsaXN0LgogCQkgKi8KIAkJYXRvbWljX2RlYygmZS0+ZGVzdC0+cmVmY250KTsKKwkJbGlzdF9kZWwoJmUtPmxpc3QpOwogCQlrZnJlZShlKTsKIAl9CiAJd3JpdGVfdW5sb2NrKCZzZXQtPmxvY2spOwpAQCAtMTY2LDcgKzE2NCw3IEBACiAvKiBnZXQgd2VpZ2h0ZWQgbGVhc3QtY29ubmVjdGlvbiBub2RlIGluIHRoZSBkZXN0aW5hdGlvbiBzZXQgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX2Rlc3QgKmlwX3ZzX2Rlc3Rfc2V0X21pbihzdHJ1Y3QgaXBfdnNfZGVzdF9zZXQgKnNldCkKIHsKLQlyZWdpc3RlciBzdHJ1Y3QgaXBfdnNfZGVzdF9saXN0ICplOworCXJlZ2lzdGVyIHN0cnVjdCBpcF92c19kZXN0X3NldF9lbGVtICplOwogCXN0cnVjdCBpcF92c19kZXN0ICpkZXN0LCAqbGVhc3Q7CiAJaW50IGxvaCwgZG9oOwogCkBAIC0xNzQsNyArMTcyLDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKiBzZWxlY3QgdGhlIGZpcnN0IGRlc3RpbmF0aW9uIHNlcnZlciwgd2hvc2Ugd2VpZ2h0ID4gMCAqLwotCWZvciAoZT1zZXQtPmxpc3Q7IGUhPU5VTEw7IGU9ZS0+bmV4dCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJnNldC0+bGlzdCwgbGlzdCkgewogCQlsZWFzdCA9IGUtPmRlc3Q7CiAJCWlmIChsZWFzdC0+ZmxhZ3MgJiBJUF9WU19ERVNUX0ZfT1ZFUkxPQUQpCiAJCQljb250aW51ZTsKQEAgLTE5MCw3ICsxODgsNyBAQAogCiAJLyogZmluZCB0aGUgZGVzdGluYXRpb24gd2l0aCB0aGUgd2VpZ2h0ZWQgbGVhc3QgbG9hZCAqLwogICBuZXh0c3RhZ2U6Ci0JZm9yIChlPWUtPm5leHQ7IGUhPU5VTEw7IGU9ZS0+bmV4dCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJnNldC0+bGlzdCwgbGlzdCkgewogCQlkZXN0ID0gZS0+ZGVzdDsKIAkJaWYgKGRlc3QtPmZsYWdzICYgSVBfVlNfREVTVF9GX09WRVJMT0FEKQogCQkJY29udGludWU7CkBAIC0yMjAsNyArMjE4LDcgQEAKIC8qIGdldCB3ZWlnaHRlZCBtb3N0LWNvbm5lY3Rpb24gbm9kZSBpbiB0aGUgZGVzdGluYXRpb24gc2V0ICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19kZXN0ICppcF92c19kZXN0X3NldF9tYXgoc3RydWN0IGlwX3ZzX2Rlc3Rfc2V0ICpzZXQpCiB7Ci0JcmVnaXN0ZXIgc3RydWN0IGlwX3ZzX2Rlc3RfbGlzdCAqZTsKKwlyZWdpc3RlciBzdHJ1Y3QgaXBfdnNfZGVzdF9zZXRfZWxlbSAqZTsKIAlzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgKm1vc3Q7CiAJaW50IG1vaCwgZG9oOwogCkBAIC0yMjgsNyArMjI2LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKiBzZWxlY3QgdGhlIGZpcnN0IGRlc3RpbmF0aW9uIHNlcnZlciwgd2hvc2Ugd2VpZ2h0ID4gMCAqLwotCWZvciAoZT1zZXQtPmxpc3Q7IGUhPU5VTEw7IGU9ZS0+bmV4dCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJnNldC0+bGlzdCwgbGlzdCkgewogCQltb3N0ID0gZS0+ZGVzdDsKIAkJaWYgKGF0b21pY19yZWFkKCZtb3N0LT53ZWlnaHQpID4gMCkgewogCQkJbW9oID0gYXRvbWljX3JlYWQoJm1vc3QtPmFjdGl2ZWNvbm5zKSAqIDUwCkBAIC0yNDAsNyArMjM4LDcgQEAKIAogCS8qIGZpbmQgdGhlIGRlc3RpbmF0aW9uIHdpdGggdGhlIHdlaWdodGVkIG1vc3QgbG9hZCAqLwogICBuZXh0c3RhZ2U6Ci0JZm9yIChlPWUtPm5leHQ7IGUhPU5VTEw7IGU9ZS0+bmV4dCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnkoZSwgJnNldC0+bGlzdCwgbGlzdCkgewogCQlkZXN0ID0gZS0+ZGVzdDsKIAkJZG9oID0gYXRvbWljX3JlYWQoJmRlc3QtPmFjdGl2ZWNvbm5zKSAqIDUwCiAJCQkrIGF0b21pY19yZWFkKCZkZXN0LT5pbmFjdGNvbm5zKTsKQEAgLTM4OSw3ICszODcsNyBAQAogCiAJCS8qIGluaXRpbGl6ZSBpdHMgZGVzdCBzZXQgKi8KIAkJYXRvbWljX3NldCgmKGVuLT5zZXQuc2l6ZSksIDApOwotCQllbi0+c2V0Lmxpc3QgPSBOVUxMOworCQlJTklUX0xJU1RfSEVBRCgmZW4tPnNldC5saXN0KTsKIAkJcndsb2NrX2luaXQoJmVuLT5zZXQubG9jayk7CiAKIAkJaXBfdnNfbGJsY3JfaGFzaCh0YmwsIGVuKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90by5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMKaW5kZXggM2U3NjcxNi4uMGU1ODQ1NSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvLmMKQEAgLTI1Nyw2ICsyNTcsOSBAQAogI2lmZGVmIENPTkZJR19JUF9WU19QUk9UT19VRFAKIAlSRUdJU1RFUl9QUk9UT0NPTCgmaXBfdnNfcHJvdG9jb2xfdWRwKTsKICNlbmRpZgorI2lmZGVmIENPTkZJR19JUF9WU19QUk9UT19TQ1RQCisJUkVHSVNURVJfUFJPVE9DT0woJmlwX3ZzX3Byb3RvY29sX3NjdHApOworI2VuZGlmCiAjaWZkZWYgQ09ORklHX0lQX1ZTX1BST1RPX0FICiAJUkVHSVNURVJfUFJPVE9DT0woJmlwX3ZzX3Byb3RvY29sX2FoKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3Byb3RvX3NjdHAuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzlhM2Y3YQotLS0gL2Rldi9udWxsCisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19wcm90b19zY3RwLmMKQEAgLTAsMCArMSwxMTgzIEBACisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9zY3RwLmg+CisjaW5jbHVkZSA8bmV0L2lwLmg+CisjaW5jbHVkZSA8bmV0L2lwNl9jaGVja3N1bS5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bmV0L3NjdHAvY2hlY2tzdW0uaD4KKyNpbmNsdWRlIDxuZXQvaXBfdnMuaD4KKworCitzdGF0aWMgc3RydWN0IGlwX3ZzX2Nvbm4gKgorc2N0cF9jb25uX2luX2dldChpbnQgYWYsCisJCSBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKKwkJIGNvbnN0IHN0cnVjdCBpcF92c19pcGhkciAqaXBoLAorCQkgdW5zaWduZWQgaW50IHByb3RvX29mZiwKKwkJIGludCBpbnZlcnNlKQoreworCV9fYmUxNiBfcG9ydHNbMl0sICpwcHRyOworCisJcHB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHByb3RvX29mZiwgc2l6ZW9mKF9wb3J0cyksIF9wb3J0cyk7CisJaWYgKHBwdHIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAobGlrZWx5KCFpbnZlcnNlKSkgCisJCXJldHVybiBpcF92c19jb25uX2luX2dldChhZiwgaXBoLT5wcm90b2NvbCwKKwkJCQkJICZpcGgtPnNhZGRyLCBwcHRyWzBdLAorCQkJCQkgJmlwaC0+ZGFkZHIsIHBwdHJbMV0pOworCWVsc2UgCisJCXJldHVybiBpcF92c19jb25uX2luX2dldChhZiwgaXBoLT5wcm90b2NvbCwKKwkJCQkJICZpcGgtPmRhZGRyLCBwcHRyWzFdLAorCQkJCQkgJmlwaC0+c2FkZHIsIHBwdHJbMF0pOworfQorCitzdGF0aWMgc3RydWN0IGlwX3ZzX2Nvbm4gKgorc2N0cF9jb25uX291dF9nZXQoaW50IGFmLAorCQkgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCisJCSAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKKwkJICBjb25zdCBzdHJ1Y3QgaXBfdnNfaXBoZHIgKmlwaCwKKwkJICB1bnNpZ25lZCBpbnQgcHJvdG9fb2ZmLAorCQkgIGludCBpbnZlcnNlKQoreworCV9fYmUxNiBfcG9ydHNbMl0sICpwcHRyOworCisJcHB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHByb3RvX29mZiwgc2l6ZW9mKF9wb3J0cyksIF9wb3J0cyk7CisJaWYgKHBwdHIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAobGlrZWx5KCFpbnZlcnNlKSkgCisJCXJldHVybiBpcF92c19jb25uX291dF9nZXQoYWYsIGlwaC0+cHJvdG9jb2wsCisJCQkJCSAgJmlwaC0+c2FkZHIsIHBwdHJbMF0sCisJCQkJCSAgJmlwaC0+ZGFkZHIsIHBwdHJbMV0pOworCWVsc2UgCisJCXJldHVybiBpcF92c19jb25uX291dF9nZXQoYWYsIGlwaC0+cHJvdG9jb2wsCisJCQkJCSAgJmlwaC0+ZGFkZHIsIHBwdHJbMV0sCisJCQkJCSAgJmlwaC0+c2FkZHIsIHBwdHJbMF0pOworfQorCitzdGF0aWMgaW50CitzY3RwX2Nvbm5fc2NoZWR1bGUoaW50IGFmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLAorCQkgICBpbnQgKnZlcmRpY3QsIHN0cnVjdCBpcF92c19jb25uICoqY3BwKQoreworCXN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmM7CisJc2N0cF9jaHVua2hkcl90IF9zY2h1bmtoLCAqc2NoOworCXNjdHBfc2N0cGhkcl90ICpzaCwgX3NjdHBoOworCXN0cnVjdCBpcF92c19pcGhkciBpcGg7CisKKwlpcF92c19maWxsX2lwaGRyKGFmLCBza2JfbmV0d29ya19oZWFkZXIoc2tiKSwgJmlwaCk7CisKKwlzaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGlwaC5sZW4sIHNpemVvZihfc2N0cGgpLCAmX3NjdHBoKTsKKwlpZiAoc2ggPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlzY2ggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBpcGgubGVuICsgc2l6ZW9mKHNjdHBfc2N0cGhkcl90KSwKKwkJCQkgc2l6ZW9mKF9zY2h1bmtoKSwgJl9zY2h1bmtoKTsKKwlpZiAoc2NoID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKChzY2gtPnR5cGUgPT0gU0NUUF9DSURfSU5JVCkgJiYKKwkgICAgKHN2YyA9IGlwX3ZzX3NlcnZpY2VfZ2V0KGFmLCBza2ItPm1hcmssIGlwaC5wcm90b2NvbCwKKwkJCQkgICAgICZpcGguZGFkZHIsIHNoLT5kZXN0KSkpIHsKKwkJaWYgKGlwX3ZzX3RvZHJvcCgpKSB7CisJCQkvKgorCQkJICogSXQgc2VlbXMgdGhhdCB3ZSBhcmUgdmVyeSBsb2FkZWQuCisJCQkgKiBXZSBoYXZlIHRvIGRyb3AgdGhpcyBwYWNrZXQgOigKKwkJCSAqLworCQkJaXBfdnNfc2VydmljZV9wdXQoc3ZjKTsKKwkJCSp2ZXJkaWN0ID0gTkZfRFJPUDsKKwkJCXJldHVybiAwOworCQl9CisJCS8qCisJCSAqIExldCB0aGUgdmlydHVhbCBzZXJ2ZXIgc2VsZWN0IGEgcmVhbCBzZXJ2ZXIgZm9yIHRoZQorCQkgKiBpbmNvbWluZyBjb25uZWN0aW9uLCBhbmQgY3JlYXRlIGEgY29ubmVjdGlvbiBlbnRyeS4KKwkJICovCisJCSpjcHAgPSBpcF92c19zY2hlZHVsZShzdmMsIHNrYik7CisJCWlmICghKmNwcCkgeworCQkJKnZlcmRpY3QgPSBpcF92c19sZWF2ZShzdmMsIHNrYiwgcHApOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaXBfdnNfc2VydmljZV9wdXQoc3ZjKTsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludAorc2N0cF9zbmF0X2hhbmRsZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJICBzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApCit7CisJc2N0cF9zY3RwaGRyX3QgKnNjdHBoOworCXVuc2lnbmVkIGludCBzY3RwaG9mZjsKKwlfX2JlMzIgY3JjMzI7CisKKyNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgorCWlmIChjcC0+YWYgPT0gQUZfSU5FVDYpCisJCXNjdHBob2ZmID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKKwllbHNlCisjZW5kaWYKKwkJc2N0cGhvZmYgPSBpcF9oZHJsZW4oc2tiKTsKKworCS8qIGNzdW1fY2hlY2sgcmVxdWlyZXMgdW5zaGFyZWQgc2tiICovCisJaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIHNjdHBob2ZmICsgc2l6ZW9mKCpzY3RwaCkpKQorCQlyZXR1cm4gMDsKKworCWlmICh1bmxpa2VseShjcC0+YXBwICE9IE5VTEwpKSB7CisJCS8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqLworCQlpZiAocHAtPmNzdW1fY2hlY2sgJiYgIXBwLT5jc3VtX2NoZWNrKGNwLT5hZiwgc2tiLCBwcCkpCisJCQlyZXR1cm4gMDsKKworCQkvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi8KKwkJaWYgKCFpcF92c19hcHBfcGt0X291dChjcCwgc2tiKSkKKwkJCXJldHVybiAwOworCX0KKworCXNjdHBoID0gKHZvaWQgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBzY3RwaG9mZjsKKwlzY3RwaC0+c291cmNlID0gY3AtPnZwb3J0OworCisJLyogQ2FsY3VsYXRlIHRoZSBjaGVja3N1bSAqLworCWNyYzMyID0gc2N0cF9zdGFydF9ja3N1bSgodTggKikgc2N0cGgsIHNrYl9oZWFkbGVuKHNrYikgLSBzY3RwaG9mZik7CisJZm9yIChza2IgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdfbGlzdDsgc2tiOyBza2IgPSBza2ItPm5leHQpCisJCWNyYzMyID0gc2N0cF91cGRhdGVfY2tzdW0oKHU4ICopIHNrYi0+ZGF0YSwgc2tiX2hlYWRsZW4oc2tiKSwKKwkJCQkgICAgICAgICAgY3JjMzIpOworCWNyYzMyID0gc2N0cF9lbmRfY2tzdW0oY3JjMzIpOworCXNjdHBoLT5jaGVja3N1bSA9IGNyYzMyOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfZG5hdF9oYW5kbGVyKHN0cnVjdCBza19idWZmICpza2IsCisJCSAgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKQoreworCisJc2N0cF9zY3RwaGRyX3QgKnNjdHBoOworCXVuc2lnbmVkIGludCBzY3RwaG9mZjsKKwlfX2JlMzIgY3JjMzI7CisKKyNpZmRlZiBDT05GSUdfSVBfVlNfSVBWNgorCWlmIChjcC0+YWYgPT0gQUZfSU5FVDYpCisJCXNjdHBob2ZmID0gc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKKwllbHNlCisjZW5kaWYKKwkJc2N0cGhvZmYgPSBpcF9oZHJsZW4oc2tiKTsKKworCS8qIGNzdW1fY2hlY2sgcmVxdWlyZXMgdW5zaGFyZWQgc2tiICovCisJaWYgKCFza2JfbWFrZV93cml0YWJsZShza2IsIHNjdHBob2ZmICsgc2l6ZW9mKCpzY3RwaCkpKQorCQlyZXR1cm4gMDsKKworCWlmICh1bmxpa2VseShjcC0+YXBwICE9IE5VTEwpKSB7CisJCS8qIFNvbWUgY2hlY2tzIGJlZm9yZSBtYW5nbGluZyAqLworCQlpZiAocHAtPmNzdW1fY2hlY2sgJiYgIXBwLT5jc3VtX2NoZWNrKGNwLT5hZiwgc2tiLCBwcCkpCisJCQlyZXR1cm4gMDsKKworCQkvKiBDYWxsIGFwcGxpY2F0aW9uIGhlbHBlciBpZiBuZWVkZWQgKi8KKwkJaWYgKCFpcF92c19hcHBfcGt0X291dChjcCwgc2tiKSkKKwkJCXJldHVybiAwOworCX0KKworCXNjdHBoID0gKHZvaWQgKikgc2tiX25ldHdvcmtfaGVhZGVyKHNrYikgKyBzY3RwaG9mZjsKKwlzY3RwaC0+ZGVzdCA9IGNwLT5kcG9ydDsKKworCS8qIENhbGN1bGF0ZSB0aGUgY2hlY2tzdW0gKi8KKwljcmMzMiA9IHNjdHBfc3RhcnRfY2tzdW0oKHU4ICopIHNjdHBoLCBza2JfaGVhZGxlbihza2IpIC0gc2N0cGhvZmYpOworCWZvciAoc2tiID0gc2tiX3NoaW5mbyhza2IpLT5mcmFnX2xpc3Q7IHNrYjsgc2tiID0gc2tiLT5uZXh0KQorCQljcmMzMiA9IHNjdHBfdXBkYXRlX2Nrc3VtKCh1OCAqKSBza2ItPmRhdGEsIHNrYl9oZWFkbGVuKHNrYiksCisJCQkJCSAgY3JjMzIpOworCWNyYzMyID0gc2N0cF9lbmRfY2tzdW0oY3JjMzIpOworCXNjdHBoLT5jaGVja3N1bSA9IGNyYzMyOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfY3N1bV9jaGVjayhpbnQgYWYsIHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHApCit7CisJc3RydWN0IHNrX2J1ZmYgKmxpc3QgPSBza2Jfc2hpbmZvKHNrYiktPmZyYWdfbGlzdDsKKwl1bnNpZ25lZCBpbnQgc2N0cGhvZmY7CisJc3RydWN0IHNjdHBoZHIgKnNoLCBfc2N0cGg7CisJX19sZTMyIGNtcDsKKwlfX2xlMzIgdmFsOworCV9fdTMyIHRtcDsKKworI2lmZGVmIENPTkZJR19JUF9WU19JUFY2CisJaWYgKGFmID09IEFGX0lORVQ2KQorCQlzY3RwaG9mZiA9IHNpemVvZihzdHJ1Y3QgaXB2Nmhkcik7CisJZWxzZQorI2VuZGlmCisJCXNjdHBob2ZmID0gaXBfaGRybGVuKHNrYik7CisKKwlzaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHNjdHBob2ZmLCBzaXplb2YoX3NjdHBoKSwgJl9zY3RwaCk7CisJaWYgKHNoID09IE5VTEwpCisJCXJldHVybiAwOworCisJY21wID0gc2gtPmNoZWNrc3VtOworCisJdG1wID0gc2N0cF9zdGFydF9ja3N1bSgoX191OCAqKSBzaCwgc2tiX2hlYWRsZW4oc2tiKSk7CisJZm9yICg7IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KQorCQl0bXAgPSBzY3RwX3VwZGF0ZV9ja3N1bSgoX191OCAqKSBsaXN0LT5kYXRhLAorCQkJCQlza2JfaGVhZGxlbihsaXN0KSwgdG1wKTsKKworCXZhbCA9IHNjdHBfZW5kX2Nrc3VtKHRtcCk7CisKKwlpZiAodmFsICE9IGNtcCkgeworCQkvKiBDUkMgZmFpbHVyZSwgZHVtcCBpdC4gKi8KKwkJSVBfVlNfREJHX1JMX1BLVCgwLCBwcCwgc2tiLCAwLAorCQkJCSJGYWlsZWQgY2hlY2tzdW0gZm9yIik7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gMTsKK30KKworc3RydWN0IGlwdnNfc2N0cF9uZXh0c3RhdGUgeworCWludCBuZXh0X3N0YXRlOworfTsKK2VudW0gaXB2c19zY3RwX2V2ZW50X3QgeworCUlQX1ZTX1NDVFBfRVZFX0RBVEFfQ0xJLAorCUlQX1ZTX1NDVFBfRVZFX0RBVEFfU0VSLAorCUlQX1ZTX1NDVFBfRVZFX0lOSVRfQ0xJLAorCUlQX1ZTX1NDVFBfRVZFX0lOSVRfU0VSLAorCUlQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX0NMSSwKKwlJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19TRVIsCisJSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0VDSE9fQ0xJLAorCUlQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX1NFUiwKKwlJUF9WU19TQ1RQX0VWRV9DT09LSUVfQUNLX0NMSSwKKwlJUF9WU19TQ1RQX0VWRV9DT09LSUVfQUNLX1NFUiwKKwlJUF9WU19TQ1RQX0VWRV9BQk9SVF9DTEksCisJSVBfVlNfU0NUUF9FVkVfX0FCT1JUX1NFUiwKKwlJUF9WU19TQ1RQX0VWRV9TSFVUX0NMSSwKKwlJUF9WU19TQ1RQX0VWRV9TSFVUX1NFUiwKKwlJUF9WU19TQ1RQX0VWRV9TSFVUX0FDS19DTEksCisJSVBfVlNfU0NUUF9FVkVfU0hVVF9BQ0tfU0VSLAorCUlQX1ZTX1NDVFBfRVZFX1NIVVRfQ09NX0NMSSwKKwlJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9TRVIsCisJSVBfVlNfU0NUUF9FVkVfTEFTVAorfTsKKworc3RhdGljIGVudW0gaXB2c19zY3RwX2V2ZW50X3Qgc2N0cF9ldmVudHNbMjU1XSA9IHsKKwlJUF9WU19TQ1RQX0VWRV9EQVRBX0NMSSwKKwlJUF9WU19TQ1RQX0VWRV9JTklUX0NMSSwKKwlJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19DTEksCisJSVBfVlNfU0NUUF9FVkVfREFUQV9DTEksCisJSVBfVlNfU0NUUF9FVkVfREFUQV9DTEksCisJSVBfVlNfU0NUUF9FVkVfREFUQV9DTEksCisJSVBfVlNfU0NUUF9FVkVfQUJPUlRfQ0xJLAorCUlQX1ZTX1NDVFBfRVZFX1NIVVRfQ0xJLAorCUlQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX0NMSSwKKwlJUF9WU19TQ1RQX0VWRV9EQVRBX0NMSSwKKwlJUF9WU19TQ1RQX0VWRV9DT09LSUVfRUNIT19DTEksCisJSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19DTEksCisJSVBfVlNfU0NUUF9FVkVfREFUQV9DTEksCisJSVBfVlNfU0NUUF9FVkVfREFUQV9DTEksCisJSVBfVlNfU0NUUF9FVkVfU0hVVF9DT01fQ0xJLAorfTsKKworc3RhdGljIHN0cnVjdCBpcHZzX3NjdHBfbmV4dHN0YXRlCisgc2N0cF9zdGF0ZXNfdGFibGVbSVBfVlNfU0NUUF9TX0xBU1RdW0lQX1ZTX1NDVFBfRVZFX0xBU1RdID0geworCS8qCisJICogU1RBVEUgOiBJUF9WU19TQ1RQX1NfTk9ORQorCSAqLworCS8qbmV4dCBzdGF0ZSAqLy8qZXZlbnQgKi8KKwl7e0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfREFUQV9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfREFUQV9TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19JTklUX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0lOSVRfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0VDSE9fQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfQUNLX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfQUNLX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9BQk9SVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQUJPUlRfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0FDS19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DT01fQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ09NX1NFUiAqLyB9LAorCSB9LAorCS8qCisJICogU1RBVEUgOiBJUF9WU19TQ1RQX1NfSU5JVF9DTEkKKwkgKiBDaWVudCBzZW50IElOSVQgYW5kIGlzIHdhaXRpbmcgZm9yIHJlcGx5IGZyb20gc2VydmVyKEluIEVDSE9fV0FJVCkKKwkgKi8KKwl7e0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfREFUQV9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfREFUQV9TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19JTklUX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0lOSVRfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0lOSVRfQUNLX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfRUNIT19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19JTklUX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9FQ0hPX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfQUNLX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0lOSVRfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9BQ0tfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0FCT1JUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9BQk9SVF9TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9BQ0tfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DT01fU0VSICovIH0KKwkgfSwKKwkvKgorCSAqIFN0YXRlIDogSVBfVlNfU0NUUF9TX0lOSVRfU0VSCisJICogU2VydmVyIHNlbnQgSU5JVCBhbmQgd2FpdGluZyBmb3IgSU5JVCBBQ0sgZnJvbSB0aGUgY2xpZW50CisJICovCisJe3tJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0RBVEFfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0RBVEFfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9DTEkgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19JTklUX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0lOSVRfQUNLX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9BQ0tfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9TRVIgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0VDSE9fQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0lOSVRfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9BQ0tfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9BQ0tfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0FCT1JUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9BQk9SVF9TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9BQ0tfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DT01fU0VSICovIH0KKwkgfSwKKwkvKgorCSAqIFN0YXRlIDogSVBfVlNfU0NUUF9TX0lOSVRfQUNLX0NMSQorCSAqIENsaWVudCBzZW50IElOSVQgQUNLIGFuZCB3YWl0aW5nIGZvciBFQ0hPIGZyb20gdGhlIHNlcnZlcgorCSAqLworCXt7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9EQVRBX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9EQVRBX1NFUiAqLyB9LAorCSAvKgorCSAgKiBXZSBoYXZlIGdvdCBhbiBJTklUIGZyb20gY2xpZW50LiBGcm9tIHRoZSBzcGVjLuKAnFVwb24gcmVjZWlwdCBvZgorCSAgKiBhbiBJTklUIGluIHRoZSBDT09LSUUtV0FJVCBzdGF0ZSwgYW4gZW5kcG9pbnQgTVVTVCByZXNwb25kIHdpdGgKKwkgICogYW4gSU5JVCBBQ0sgdXNpbmcgdGhlIHNhbWUgcGFyYW1ldGVycyBpdCBzZW50IGluIGl0cyAgb3JpZ2luYWwKKwkgICogSU5JVCBjaHVuayAoaW5jbHVkaW5nIGl0cyBJbml0aWF0ZSBUYWcsIHVuY2hhbmdlZOKAnSkuCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0lOSVRfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9TRVIgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9TRVIgKi8gfSwKKwkgLyoKKwkgICogSU5JVF9BQ0sgaGFzIGJlZW4gcmVzZW50IGJ5IHRoZSBjbGllbnQsIGxldCB1cyBzdGF5IGlzIGluCisJICAqIHRoZSBzYW1lIHN0YXRlCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0lOSVRfQUNLX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19DTEkgKi8gfSwKKwkgLyoKKwkgICogSU5JVF9BQ0sgc2VudCBieSB0aGUgc2VydmVyLCBjbG9zZSB0aGUgY29ubmVjdGlvbgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9BQ0tfU0VSICovIH0sCisJIC8qCisJICAqIEVDSE8gYnkgY2xpZW50LCBpdCBzaG91bGQgbm90IGhhcHBlbiwgY2xvc2UgdGhlIGNvbm5lY3Rpb24KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX0NMSSAqLyB9LAorCSAvKgorCSAgKiBFQ0hPIGJ5IHNlcnZlciwgdGhpcyBpcyB3aGF0IHdlIGFyZSBleHBlY3RpbmcsIG1vdmUgdG8gRUNIT19TRVIKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfRUNIT19TRVIgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0VDSE9fU0VSICovIH0sCisJIC8qCisJICAqIENPT0tJRSBBQ0sgZnJvbSBjbGllbnQsIGl0IHNob3VsZCBub3QgaGFwcGVuLCBjbG9zZSB0aGUgY29ubmVjdGlvbgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19DTEkgKi8gfSwKKwkgLyoKKwkgICogVW5leHBlY3RlZCBDT09LSUUgQUNLIGZyb20gc2VydmVyLCBzdGF0eSBpbiB0aGUgc2FtZSBzdGF0ZQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19JTklUX0FDS19DTEkgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQUJPUlRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0FCT1JUX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9BQ0tfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ09NX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9TRVIgKi8gfQorCSB9LAorCS8qCisJICogU3RhdGUgOiBJUF9WU19TQ1RQX1NfSU5JVF9BQ0tfU0VSCisJICogU2VydmVyIHNlbnQgSU5JVCBBQ0sgYW5kIHdhaXRpbmcgZm9yIEVDSE8gZnJvbSB0aGUgY2xpZW50CisJICovCisJe3tJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0RBVEFfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0RBVEFfU0VSICovIH0sCisJIC8qCisJICAqIFdlIGhhdmUgZ290IGFuIElOSVQgZnJvbSBjbGllbnQuIEZyb20gdGhlIHNwZWMu4oCcVXBvbiByZWNlaXB0IG9mCisJICAqIGFuIElOSVQgaW4gdGhlIENPT0tJRS1XQUlUIHN0YXRlLCBhbiBlbmRwb2ludCBNVVNUIHJlc3BvbmQgd2l0aAorCSAgKiBhbiBJTklUIEFDSyB1c2luZyB0aGUgc2FtZSBwYXJhbWV0ZXJzIGl0IHNlbnQgaW4gaXRzICBvcmlnaW5hbAorCSAgKiBJTklUIGNodW5rIChpbmNsdWRpbmcgaXRzIEluaXRpYXRlIFRhZywgdW5jaGFuZ2Vk4oCdKS4KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9DTEkgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19JTklUX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX1NFUiAqLyB9LAorCSAvKgorCSAgKiBVbmV4cGVjdGVkIElOSVRfQUNLIGJ5IHRoZSBjbGllbnQsIGxldCB1cyBjbG9zZSB0aGUgY29ubmVjdGlvbgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9BQ0tfQ0xJICovIH0sCisJIC8qCisJICAqIElOSVRfQUNLIHJlc2VudCBieSB0aGUgc2VydmVyLCBsZXQgdXMgbW92ZSB0byBzYW1lIHN0YXRlCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0lOSVRfQUNLX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19TRVIgKi8gfSwKKwkgLyoKKwkgICogQ2xpZW50IHNlbmQgdGhlIEVDSE8sIHRoaXMgaXMgd2hhdCB3ZSBhcmUgZXhwZWN0aW5nLAorCSAgKiBtb3ZlIHRvIEVDSE9fQ0xJCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0VDSE9fQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX0NMSSAqLyB9LAorCSAvKgorCSAgKiBFQ0hPIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlciwgTm90IHN1cmUgd2hhdCB0byBkbywKKwkgICogbGV0IHVzIGNsb3NlIGl0CisJICAqLworCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfRUNIT19TRVIgKi8gfSwKKwkgLyoKKwkgICogQ09PS0lFIEFDSyBmcm9tIGNsaWVudCwgbGV0IHVzIHN0YXkgaW4gdGhlIHNhbWUgc3RhdGUKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9BQ0tfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9BQ0tfQ0xJICovIH0sCisJIC8qCisJICAqIENPT0tJRSBBQ0sgZnJvbSBzZXJ2ZXIsIGhtbS4uLiB0aGlzIHNob3VsZCBub3QgaGFwcGVuLCBsZXRzIGNsb3NlCisJICAqIHRoZSBjb25uZWN0aW9uLgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQUJPUlRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0FCT1JUX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9BQ0tfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ09NX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9TRVIgKi8gfQorCSB9LAorCS8qCisJICogU3RhdGUgOiBJUF9WU19TQ1RQX1NfRUNIT19DTEkKKwkgKiBDaWVudCAgc2VudCBFQ0hPIGFuZCB3YWl0aW5nIENPT0tFSSBBQ0sgZnJvbSB0aGUgU2VydmVyCisJICovCisJe3tJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0RBVEFfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0RBVEFfU0VSICovIH0sCisJIC8qCisJICAqIFdlIGhhdmUgZ290IGFuIElOSVQgZnJvbSBjbGllbnQuIEZyb20gdGhlIHNwZWMu4oCcVXBvbiByZWNlaXB0IG9mCisJICAqIGFuIElOSVQgaW4gdGhlIENPT0tJRS1XQUlUIHN0YXRlLCBhbiBlbmRwb2ludCBNVVNUIHJlc3BvbmQgd2l0aAorCSAgKiBhbiBJTklUIEFDSyB1c2luZyB0aGUgc2FtZSBwYXJhbWV0ZXJzIGl0IHNlbnQgaW4gaXRzICBvcmlnaW5hbAorCSAgKiBJTklUIGNodW5rIChpbmNsdWRpbmcgaXRzIEluaXRpYXRlIFRhZywgdW5jaGFuZ2Vk4oCdKS4KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9DTEkgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19JTklUX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX1NFUiAqLyB9LAorCSAvKgorCSAgKiBJTklUX0FDSyBoYXMgYmVlbiBieSB0aGUgY2xpZW50LCBsZXQgdXMgY2xvc2UgdGhlIGNvbm5lY3Rpb24KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX0NMSSAqLyB9LAorCSAvKgorCSAgKiBJTklUX0FDSyBzZW50IGJ5IHRoZSBzZXJ2ZXIsIFVuZXhwZWN0ZWQgSU5JVCBBQ0ssIHNwZWMgc2F5cywKKwkgICog4oCcSWYgYW4gSU5JVCBBQ0sgaXMgcmVjZWl2ZWQgYnkgYW4gZW5kcG9pbnQgaW4gYW55IHN0YXRlIG90aGVyCisJICAqIHRoYW4gdGhlIENPT0tJRS1XQUlUIHN0YXRlLCB0aGUgZW5kcG9pbnQgc2hvdWxkIGRpc2NhcmQgdGhlCisJICAqIElOSVQgQUNLIGNodW5r4oCdLiBTdGF5IGluIHRoZSBzYW1lIHN0YXRlCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0VDSE9fQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX1NFUiAqLyB9LAorCSAvKgorCSAgKiBDbGllbnQgcmVzZW50IHRoZSBFQ0hPLCBsZXQgdXMgc3RheSBpbiB0aGUgc2FtZSBzdGF0ZQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19FQ0hPX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfRUNIT19DTEkgKi8gfSwKKwkgLyoKKwkgICogRUNITyByZWNlaXZlZCBmcm9tIHRoZSBzZXJ2ZXIsIE5vdCBzdXJlIHdoYXQgdG8gZG8sCisJICAqIGxldCB1cyBjbG9zZSBpdAorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0VDSE9fU0VSICovIH0sCisJIC8qCisJICAqIENPT0tJRSBBQ0sgZnJvbSBjbGllbnQsIHRoaXMgc2hvdWQgbm90IGhhcHBlbiwgbGV0J3MgY2xvc2UgdGhlCisJICAqIGNvbm5lY3Rpb24KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9BQ0tfQ0xJICovIH0sCisJIC8qCisJICAqIENPT0tJRSBBQ0sgZnJvbSBzZXJ2ZXIsIHRoaXMgaXMgd2hhdCB3ZSBhcmUgYXdhaXRpbmcsbGV0cyBtb3ZlIHRvCisJICAqIEVTVEFCTElTSEVELgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19FU1RBQkxJU0hFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfQUNLX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9BQk9SVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQUJPUlRfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0FDS19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DT01fQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ09NX1NFUiAqLyB9CisJIH0sCisJLyoKKwkgKiBTdGF0ZSA6IElQX1ZTX1NDVFBfU19FQ0hPX1NFUgorCSAqIFNlcnZlciBzZW50IEVDSE8gYW5kIHdhaXRpbmcgQ09PS0VJIEFDSyBmcm9tIHRoZSBjbGllbnQKKwkgKi8KKwl7e0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfREFUQV9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfREFUQV9TRVIgKi8gfSwKKwkgLyoKKwkgICogV2UgaGF2ZSBnb3QgYW4gSU5JVCBmcm9tIGNsaWVudC4gRnJvbSB0aGUgc3BlYy7igJxVcG9uIHJlY2VpcHQgb2YKKwkgICogYW4gSU5JVCBpbiB0aGUgQ09PS0lFLVdBSVQgc3RhdGUsIGFuIGVuZHBvaW50IE1VU1QgcmVzcG9uZCB3aXRoCisJICAqIGFuIElOSVQgQUNLIHVzaW5nIHRoZSBzYW1lIHBhcmFtZXRlcnMgaXQgc2VudCBpbiBpdHMgIG9yaWdpbmFsCisJICAqIElOSVQgY2h1bmsgKGluY2x1ZGluZyBpdHMgSW5pdGlhdGUgVGFnLCB1bmNoYW5nZWTigJ0pLgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19JTklUX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0lOSVRfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfU0VSICovIH0sCisJIC8qCisJICAqIElOSVRfQUNLIHNlbnQgYnkgdGhlIHNlcnZlciwgVW5leHBlY3RlZCBJTklUIEFDSywgc3BlYyBzYXlzLAorCSAgKiDigJxJZiBhbiBJTklUIEFDSyBpcyByZWNlaXZlZCBieSBhbiBlbmRwb2ludCBpbiBhbnkgc3RhdGUgb3RoZXIKKwkgICogdGhhbiB0aGUgQ09PS0lFLVdBSVQgc3RhdGUsIHRoZSBlbmRwb2ludCBzaG91bGQgZGlzY2FyZCB0aGUKKwkgICogSU5JVCBBQ0sgY2h1bmvigJ0uIFN0YXkgaW4gdGhlIHNhbWUgc3RhdGUKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfRUNIT19TRVIgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9BQ0tfQ0xJICovIH0sCisJIC8qCisJICAqIElOSVRfQUNLIGhhcyBiZWVuIGJ5IHRoZSBzZXJ2ZXIsIGxldCB1cyBjbG9zZSB0aGUgY29ubmVjdGlvbgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9BQ0tfU0VSICovIH0sCisJIC8qCisJICAqIENsaWVudCBzZW50IHRoZSBFQ0hPLCBub3Qgc3VyZSB3aGF0IHRvIGRvLCBsZXQncyBjbG9zZSB0aGUKKwkgICogY29ubmVjdGlvbi4KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX0NMSSAqLyB9LAorCSAvKgorCSAgKiBFQ0hPIHJlc2VudCBieSB0aGUgc2VydmVyLCBzdGF5IGluIHRoZSBzYW1lIHN0YXRlCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0VDSE9fU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX1NFUiAqLyB9LAorCSAvKgorCSAgKiBDT09LSUUgQUNLIGZyb20gY2xpZW50LCB0aGlzIGlzIHdoYXQgd2UgYXJlIGV4cGVjdGluZywgbGV0J3MgbW92ZQorCSAgKiB0byBFU1RBQkxJU0hFRC4KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfRVNUQUJMSVNIRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19DTEkgKi8gfSwKKwkgLyoKKwkgICogQ09PS0lFIEFDSyBmcm9tIHNlcnZlciwgdGhpcyBzaG91bGQgbm90IGhhcHBlbiwgbGV0cyBjbG9zZSB0aGUKKwkgICogY29ubmVjdGlvbi4KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9BQ0tfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0FCT1JUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9BQk9SVF9TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9BQ0tfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DT01fU0VSICovIH0KKwkgfSwKKwkvKgorCSAqIFN0YXRlIDogSVBfVlNfU0NUUF9TX0VTVEFCTElTSEVECisJICogQXNzb2NpYXRpb24gZXN0YWJsaXNoZWQKKwkgKi8KKwl7e0lQX1ZTX1NDVFBfU19FU1RBQkxJU0hFRCAvKiBJUF9WU19TQ1RQX0VWRV9EQVRBX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0VTVEFCTElTSEVEIC8qIElQX1ZTX1NDVFBfRVZFX0RBVEFfU0VSICovIH0sCisJIC8qCisJICAqIFdlIGhhdmUgZ290IGFuIElOSVQgZnJvbSBjbGllbnQuIEZyb20gdGhlIHNwZWMu4oCcVXBvbiByZWNlaXB0IG9mCisJICAqIGFuIElOSVQgaW4gdGhlIENPT0tJRS1XQUlUIHN0YXRlLCBhbiBlbmRwb2ludCBNVVNUIHJlc3BvbmQgd2l0aAorCSAgKiBhbiBJTklUIEFDSyB1c2luZyB0aGUgc2FtZSBwYXJhbWV0ZXJzIGl0IHNlbnQgaW4gaXRzICBvcmlnaW5hbAorCSAgKiBJTklUIGNodW5rIChpbmNsdWRpbmcgaXRzIEluaXRpYXRlIFRhZywgdW5jaGFuZ2Vk4oCdKS4KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9DTEkgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19JTklUX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX1NFUiAqLyB9LAorCSAvKgorCSAgKiBJTklUX0FDSyBzZW50IGJ5IHRoZSBzZXJ2ZXIsIFVuZXhwZWN0ZWQgSU5JVCBBQ0ssIHNwZWMgc2F5cywKKwkgICog4oCcSWYgYW4gSU5JVCBBQ0sgaXMgcmVjZWl2ZWQgYnkgYW4gZW5kcG9pbnQgaW4gYW55IHN0YXRlIG90aGVyCisJICAqIHRoYW4gdGhlIENPT0tJRS1XQUlUIHN0YXRlLCB0aGUgZW5kcG9pbnQgc2hvdWxkIGRpc2NhcmQgdGhlCisJICAqIElOSVQgQUNLIGNodW5r4oCdLiBTdGF5IGluIHRoZSBzYW1lIHN0YXRlCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0VTVEFCTElTSEVEIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0VTVEFCTElTSEVEIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX1NFUiAqLyB9LAorCSAvKgorCSAgKiBDbGllbnQgc2VudCBFQ0hPLCBTcGVjKHNlYyA1LjIuNCkgc2F5cyBpdCBtYXkgYmUgaGFuZGxlZCBieSB0aGUKKwkgICogcGVlciBhbmQgcGVlciBzaGFsbCBtb3ZlIHRvIHRoZSBFU1RBQklTSEVELiBpZiBpdCBkb2Vzbid0IGhhbmRsZQorCSAgKiBpdCB3aWxsIHNlbmQgRVJST1IgY2h1bmsuIFNvLCBzdGF5IGluIHRoZSBzYW1lIHN0YXRlCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0VTVEFCTElTSEVEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0VTVEFCTElTSEVEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX1NFUiAqLyB9LAorCSAvKgorCSAgKiBDT09LSUUgQUNLIGZyb20gY2xpZW50LCBub3Qgc3VyZSB3aGF0IHRvIGRvIHN0YXkgaW4gdGhlIHNhbWUgc3RhdGUKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfRVNUQUJMSVNIRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19FU1RBQkxJU0hFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfQUNLX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9BQk9SVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQUJPUlRfU0VSICovIH0sCisJIC8qCisJICAqIFNIVVRET1dOIGZyb20gdGhlIGNsaWVudCwgbW92ZSB0byBTSFVERE9XTl9DTEkKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfU0hVVF9DTEkgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DTEkgKi8gfSwKKwkgLyoKKwkgICogU0hVVERPV04gZnJvbSB0aGUgc2VydmVyLCBtb3ZlIHRvIFNIVVRET1dOX1NFUgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19TSFVUX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX1NFUiAqLyB9LAorCSAvKgorCSAgKiBjbGllbnQgc2VudCBTSFVEVERPV05fQUNLLCB0aGlzIHNob3VsZCBub3QgaGFwcGVuLCBsZXQncyBjbG9zZQorCSAgKiB0aGUgY29ubmVjdGlvbgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9BQ0tfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DT01fU0VSICovIH0KKwkgfSwKKwkvKgorCSAqIFN0YXRlIDogSVBfVlNfU0NUUF9TX1NIVVRfQ0xJCisJICogU0hVVERPV04gc2VudCBmcm9tIHRoZSBjbGllbnQsIHdhaXRpbmYgZm9yIFNIVVQgQUNLIGZyb20gdGhlIHNlcnZlcgorCSAqLworCS8qCisJICogV2UgcmVjaWV2ZWQgdGhlIGRhdGEgY2h1Y2ssIGtlZXAgdGhlIHN0YXRlIHVuY2hhbmdlZC4gSSBhc3N1bWUKKwkgKiB0aGF0IHN0aWxsIGRhdGEgY2h1bmNrcyAgY2FuIGJlIHJlY2VpdmVkIGJ5IGJvdGggdGhlIHBlZXJzIGluCisJICogU0hVRE9XTiBzdGF0ZQorCSAqLworCisJe3tJUF9WU19TQ1RQX1NfU0hVVF9DTEkgLyogSVBfVlNfU0NUUF9FVkVfREFUQV9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19TSFVUX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9EQVRBX1NFUiAqLyB9LAorCSAvKgorCSAgKiBXZSBoYXZlIGdvdCBhbiBJTklUIGZyb20gY2xpZW50LiBGcm9tIHRoZSBzcGVjLuKAnFVwb24gcmVjZWlwdCBvZgorCSAgKiBhbiBJTklUIGluIHRoZSBDT09LSUUtV0FJVCBzdGF0ZSwgYW4gZW5kcG9pbnQgTVVTVCByZXNwb25kIHdpdGgKKwkgICogYW4gSU5JVCBBQ0sgdXNpbmcgdGhlIHNhbWUgcGFyYW1ldGVycyBpdCBzZW50IGluIGl0cyAgb3JpZ2luYWwKKwkgICogSU5JVCBjaHVuayAoaW5jbHVkaW5nIGl0cyBJbml0aWF0ZSBUYWcsIHVuY2hhbmdlZOKAnSkuCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0lOSVRfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9TRVIgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9TRVIgKi8gfSwKKwkgLyoKKwkgICogSU5JVF9BQ0sgc2VudCBieSB0aGUgc2VydmVyLCBVbmV4cGVjdGVkIElOSVQgQUNLLCBzcGVjIHNheXMsCisJICAqIOKAnElmIGFuIElOSVQgQUNLIGlzIHJlY2VpdmVkIGJ5IGFuIGVuZHBvaW50IGluIGFueSBzdGF0ZSBvdGhlcgorCSAgKiB0aGFuIHRoZSBDT09LSUUtV0FJVCBzdGF0ZSwgdGhlIGVuZHBvaW50IHNob3VsZCBkaXNjYXJkIHRoZQorCSAgKiBJTklUIEFDSyBjaHVua+KAnS4gU3RheSBpbiB0aGUgc2FtZSBzdGF0ZQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19TSFVUX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19TSFVUX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19TRVIgKi8gfSwKKwkgLyoKKwkgICogQ2xpZW50IHNlbnQgRUNITywgU3BlYyhzZWMgNS4yLjQpIHNheXMgaXQgbWF5IGJlIGhhbmRsZWQgYnkgdGhlCisJICAqIHBlZXIgYW5kIHBlZXIgc2hhbGwgbW92ZSB0byB0aGUgRVNUQUJJU0hFRC4gaWYgaXQgZG9lc24ndCBoYW5kbGUKKwkgICogaXQgd2lsbCBzZW5kIEVSUk9SIGNodW5rLiBTbywgc3RheSBpbiB0aGUgc2FtZSBzdGF0ZQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19FU1RBQkxJU0hFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfRUNIT19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19FU1RBQkxJU0hFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfRUNIT19TRVIgKi8gfSwKKwkgLyoKKwkgICogQ09PS0lFIEFDSyBmcm9tIGNsaWVudCwgbm90IHN1cmUgd2hhdCB0byBkbyBzdGF5IGluIHRoZSBzYW1lIHN0YXRlCisJICAqLworCSB7SVBfVlNfU0NUUF9TX1NIVVRfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9BQ0tfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfU0hVVF9DTEkgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQUJPUlRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0FCT1JUX1NFUiAqLyB9LAorCSAvKgorCSAgKiBTSFVURE9XTiByZXNlbnQgZnJvbSB0aGUgY2xpZW50LCBtb3ZlIHRvIFNIVURET1dOX0NMSQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19TSFVUX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NMSSAqLyB9LAorCSAvKgorCSAgKiBTSFVURE9XTiBmcm9tIHRoZSBzZXJ2ZXIsIG1vdmUgdG8gU0hVVERPV05fU0VSCisJICAqLworCSB7SVBfVlNfU0NUUF9TX1NIVVRfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfU0VSICovIH0sCisJIC8qCisJICAqIGNsaWVudCBzZW50IFNIVURURE9XTl9BQ0ssIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGxldCdzIGNsb3NlCisJICAqIHRoZSBjb25uZWN0aW9uCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0FDS19DTEkgKi8gfSwKKwkgLyoKKwkgICogU2VydmVyIHNlbnQgU0hVVERPV04gQUNLLCB0aGlzIGlzIHdoYXQgd2UgYXJlIGV4cGVjdGluZywgbGV0J3MgbW92ZQorCSAgKiB0byBTSFVET1dOX0FDS19TRVIKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX1NFUiAqLyB9LAorCSAvKgorCSAgKiBTSFVURE9XTiBDT00gZnJvbSBjbGllbnQsIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGxldCdzIGNsb3NlIHRoZQorCSAgKiBjb25uZWN0aW9uCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DT01fU0VSICovIH0KKwkgfSwKKwkvKgorCSAqIFN0YXRlIDogSVBfVlNfU0NUUF9TX1NIVVRfU0VSCisJICogU0hVVERPV04gc2VudCBmcm9tIHRoZSBzZXJ2ZXIsIHdhaXRpbmYgZm9yIFNIVVRET1dOIEFDSyBmcm9tIGNsaWVudAorCSAqLworCS8qCisJICogV2UgcmVjaWV2ZWQgdGhlIGRhdGEgY2h1Y2ssIGtlZXAgdGhlIHN0YXRlIHVuY2hhbmdlZC4gSSBhc3N1bWUKKwkgKiB0aGF0IHN0aWxsIGRhdGEgY2h1bmNrcyAgY2FuIGJlIHJlY2VpdmVkIGJ5IGJvdGggdGhlIHBlZXJzIGluCisJICogU0hVRE9XTiBzdGF0ZQorCSAqLworCisJe3tJUF9WU19TQ1RQX1NfU0hVVF9TRVIgLyogSVBfVlNfU0NUUF9FVkVfREFUQV9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19TSFVUX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9EQVRBX1NFUiAqLyB9LAorCSAvKgorCSAgKiBXZSBoYXZlIGdvdCBhbiBJTklUIGZyb20gY2xpZW50LiBGcm9tIHRoZSBzcGVjLuKAnFVwb24gcmVjZWlwdCBvZgorCSAgKiBhbiBJTklUIGluIHRoZSBDT09LSUUtV0FJVCBzdGF0ZSwgYW4gZW5kcG9pbnQgTVVTVCByZXNwb25kIHdpdGgKKwkgICogYW4gSU5JVCBBQ0sgdXNpbmcgdGhlIHNhbWUgcGFyYW1ldGVycyBpdCBzZW50IGluIGl0cyAgb3JpZ2luYWwKKwkgICogSU5JVCBjaHVuayAoaW5jbHVkaW5nIGl0cyBJbml0aWF0ZSBUYWcsIHVuY2hhbmdlZOKAnSkuCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0lOSVRfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9TRVIgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9TRVIgKi8gfSwKKwkgLyoKKwkgICogSU5JVF9BQ0sgc2VudCBieSB0aGUgc2VydmVyLCBVbmV4cGVjdGVkIElOSVQgQUNLLCBzcGVjIHNheXMsCisJICAqIOKAnElmIGFuIElOSVQgQUNLIGlzIHJlY2VpdmVkIGJ5IGFuIGVuZHBvaW50IGluIGFueSBzdGF0ZSBvdGhlcgorCSAgKiB0aGFuIHRoZSBDT09LSUUtV0FJVCBzdGF0ZSwgdGhlIGVuZHBvaW50IHNob3VsZCBkaXNjYXJkIHRoZQorCSAgKiBJTklUIEFDSyBjaHVua+KAnS4gU3RheSBpbiB0aGUgc2FtZSBzdGF0ZQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19TSFVUX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19TSFVUX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19TRVIgKi8gfSwKKwkgLyoKKwkgICogQ2xpZW50IHNlbnQgRUNITywgU3BlYyhzZWMgNS4yLjQpIHNheXMgaXQgbWF5IGJlIGhhbmRsZWQgYnkgdGhlCisJICAqIHBlZXIgYW5kIHBlZXIgc2hhbGwgbW92ZSB0byB0aGUgRVNUQUJJU0hFRC4gaWYgaXQgZG9lc24ndCBoYW5kbGUKKwkgICogaXQgd2lsbCBzZW5kIEVSUk9SIGNodW5rLiBTbywgc3RheSBpbiB0aGUgc2FtZSBzdGF0ZQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19FU1RBQkxJU0hFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfRUNIT19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19FU1RBQkxJU0hFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfRUNIT19TRVIgKi8gfSwKKwkgLyoKKwkgICogQ09PS0lFIEFDSyBmcm9tIGNsaWVudCwgbm90IHN1cmUgd2hhdCB0byBkbyBzdGF5IGluIHRoZSBzYW1lIHN0YXRlCisJICAqLworCSB7SVBfVlNfU0NUUF9TX1NIVVRfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9BQ0tfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfU0hVVF9TRVIgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQUJPUlRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0FCT1JUX1NFUiAqLyB9LAorCSAvKgorCSAgKiBTSFVURE9XTiByZXNlbnQgZnJvbSB0aGUgY2xpZW50LCBtb3ZlIHRvIFNIVURET1dOX0NMSQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19TSFVUX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NMSSAqLyB9LAorCSAvKgorCSAgKiBTSFVURE9XTiByZXNlbnQgZnJvbSB0aGUgc2VydmVyLCBtb3ZlIHRvIFNIVVRET1dOX1NFUgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19TSFVUX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX1NFUiAqLyB9LAorCSAvKgorCSAgKiBjbGllbnQgc2VudCBTSFVEVERPV05fQUNLLCB0aGlzIGlzIHdoYXQgd2UgYXJlIGV4cGVjdGluZywgbGV0J3MKKwkgICogbW92ZSB0byBTSFVUX0FDS19DTEkKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX0NMSSAqLyB9LAorCSAvKgorCSAgKiBTZXJ2ZXIgc2VudCBTSFVURE9XTiBBQ0ssIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGxldCdzIGNsb3NlIHRoZQorCSAgKiBjb25uZWN0aW9uCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0FDS19TRVIgKi8gfSwKKwkgLyoKKwkgICogU0hVVERPV04gQ09NIGZyb20gY2xpZW50LCB0aGlzIHNob3VsZCBub3QgaGFwcGVuLCBsZXQncyBjbG9zZSB0aGUKKwkgICogY29ubmVjdGlvbgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DT01fQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ09NX1NFUiAqLyB9CisJIH0sCisKKwkvKgorCSAqIFN0YXRlIDogSVBfVlNfU0NUUF9TX1NIVVRfQUNLX0NMSQorCSAqIFNIVVRET1dOIEFDSyBmcm9tIHRoZSBjbGllbnQsIGF3YWl0aW5nIGZvciBTSFVURE9XTiBDT00gZnJvbSBzZXJ2ZXIKKwkgKi8KKwkvKgorCSAqIFdlIHJlY2lldmVkIHRoZSBkYXRhIGNodWNrLCBrZWVwIHRoZSBzdGF0ZSB1bmNoYW5nZWQuIEkgYXNzdW1lCisJICogdGhhdCBzdGlsbCBkYXRhIGNodW5ja3MgIGNhbiBiZSByZWNlaXZlZCBieSBib3RoIHRoZSBwZWVycyBpbgorCSAqIFNIVURPV04gc3RhdGUKKwkgKi8KKworCXt7SVBfVlNfU0NUUF9TX1NIVVRfQUNLX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9EQVRBX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX1NIVVRfQUNLX0NMSSAvKiBJUF9WU19TQ1RQX0VWRV9EQVRBX1NFUiAqLyB9LAorCSAvKgorCSAgKiBXZSBoYXZlIGdvdCBhbiBJTklUIGZyb20gY2xpZW50LiBGcm9tIHRoZSBzcGVjLuKAnFVwb24gcmVjZWlwdCBvZgorCSAgKiBhbiBJTklUIGluIHRoZSBDT09LSUUtV0FJVCBzdGF0ZSwgYW4gZW5kcG9pbnQgTVVTVCByZXNwb25kIHdpdGgKKwkgICogYW4gSU5JVCBBQ0sgdXNpbmcgdGhlIHNhbWUgcGFyYW1ldGVycyBpdCBzZW50IGluIGl0cyAgb3JpZ2luYWwKKwkgICogSU5JVCBjaHVuayAoaW5jbHVkaW5nIGl0cyBJbml0aWF0ZSBUYWcsIHVuY2hhbmdlZOKAnSkuCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0lOSVRfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9TRVIgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9TRVIgKi8gfSwKKwkgLyoKKwkgICogSU5JVF9BQ0sgc2VudCBieSB0aGUgc2VydmVyLCBVbmV4cGVjdGVkIElOSVQgQUNLLCBzcGVjIHNheXMsCisJICAqIOKAnElmIGFuIElOSVQgQUNLIGlzIHJlY2VpdmVkIGJ5IGFuIGVuZHBvaW50IGluIGFueSBzdGF0ZSBvdGhlcgorCSAgKiB0aGFuIHRoZSBDT09LSUUtV0FJVCBzdGF0ZSwgdGhlIGVuZHBvaW50IHNob3VsZCBkaXNjYXJkIHRoZQorCSAgKiBJTklUIEFDSyBjaHVua+KAnS4gU3RheSBpbiB0aGUgc2FtZSBzdGF0ZQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19TSFVUX0FDS19DTEkgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9BQ0tfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0lOSVRfQUNLX1NFUiAqLyB9LAorCSAvKgorCSAgKiBDbGllbnQgc2VudCBFQ0hPLCBTcGVjKHNlYyA1LjIuNCkgc2F5cyBpdCBtYXkgYmUgaGFuZGxlZCBieSB0aGUKKwkgICogcGVlciBhbmQgcGVlciBzaGFsbCBtb3ZlIHRvIHRoZSBFU1RBQklTSEVELiBpZiBpdCBkb2Vzbid0IGhhbmRsZQorCSAgKiBpdCB3aWxsIHNlbmQgRVJST1IgY2h1bmsuIFNvLCBzdGF5IGluIHRoZSBzYW1lIHN0YXRlCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0VTVEFCTElTSEVEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0VTVEFCTElTSEVEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX1NFUiAqLyB9LAorCSAvKgorCSAgKiBDT09LSUUgQUNLIGZyb20gY2xpZW50LCBub3Qgc3VyZSB3aGF0IHRvIGRvIHN0YXkgaW4gdGhlIHNhbWUgc3RhdGUKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9BQ0tfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9BQ0tfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0FCT1JUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9BQk9SVF9TRVIgKi8gfSwKKwkgLyoKKwkgICogU0hVVERPV04gc2VudCBmcm9tIHRoZSBjbGllbnQsIG1vdmUgdG8gU0hVRERPV05fQ0xJCisJICAqLworCSB7SVBfVlNfU0NUUF9TX1NIVVRfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ0xJICovIH0sCisJIC8qCisJICAqIFNIVVRET1dOIHNlbnQgZnJvbSB0aGUgc2VydmVyLCBtb3ZlIHRvIFNIVVRET1dOX1NFUgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19TSFVUX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX1NFUiAqLyB9LAorCSAvKgorCSAgKiBjbGllbnQgcmVzZW50IFNIVURURE9XTl9BQ0ssIGxldCdzIHN0YXkgaW4gdGhlIHNhbWUgc3RhdGUKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfQ0xJIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX0NMSSAqLyB9LAorCSAvKgorCSAgKiBTZXJ2ZXIgc2VudCBTSFVURE9XTiBBQ0ssIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGxldCdzIGNsb3NlIHRoZQorCSAgKiBjb25uZWN0aW9uCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0FDS19TRVIgKi8gfSwKKwkgLyoKKwkgICogU0hVVERPV04gQ09NIGZyb20gY2xpZW50LCB0aGlzIHNob3VsZCBub3QgaGFwcGVuLCBsZXQncyBjbG9zZSB0aGUKKwkgICogY29ubmVjdGlvbgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DT01fQ0xJICovIH0sCisJIC8qCisJICAqIFNIVVRET1dOIENPTVBMRVRFIGZyb20gc2VydmVyIHRoaXMgaXMgd2hhdCB3ZSBhcmUgZXhwZWN0aW5nLgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DT01fU0VSICovIH0KKwkgfSwKKworCS8qCisJICogU3RhdGUgOiBJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfU0VSCisJICogU0hVVERPV04gQUNLIGZyb20gdGhlIHNlcnZlciwgYXdhaXRpbmcgZm9yIFNIVVRET1dOIENPTSBmcm9tIGNsaWVudAorCSAqLworCS8qCisJICogV2UgcmVjaWV2ZWQgdGhlIGRhdGEgY2h1Y2ssIGtlZXAgdGhlIHN0YXRlIHVuY2hhbmdlZC4gSSBhc3N1bWUKKwkgKiB0aGF0IHN0aWxsIGRhdGEgY2h1bmNrcyAgY2FuIGJlIHJlY2VpdmVkIGJ5IGJvdGggdGhlIHBlZXJzIGluCisJICogU0hVRE9XTiBzdGF0ZQorCSAqLworCisJe3tJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0RBVEFfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX0RBVEFfU0VSICovIH0sCisJIC8qCisJICAqIFdlIGhhdmUgZ290IGFuIElOSVQgZnJvbSBjbGllbnQuIEZyb20gdGhlIHNwZWMu4oCcVXBvbiByZWNlaXB0IG9mCisJICAqIGFuIElOSVQgaW4gdGhlIENPT0tJRS1XQUlUIHN0YXRlLCBhbiBlbmRwb2ludCBNVVNUIHJlc3BvbmQgd2l0aAorCSAgKiBhbiBJTklUIEFDSyB1c2luZyB0aGUgc2FtZSBwYXJhbWV0ZXJzIGl0IHNlbnQgaW4gaXRzICBvcmlnaW5hbAorCSAgKiBJTklUIGNodW5rIChpbmNsdWRpbmcgaXRzIEluaXRpYXRlIFRhZywgdW5jaGFuZ2Vk4oCdKS4KKwkgICovCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9DTEkgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19JTklUX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX1NFUiAqLyB9LAorCSAvKgorCSAgKiBJTklUX0FDSyBzZW50IGJ5IHRoZSBzZXJ2ZXIsIFVuZXhwZWN0ZWQgSU5JVCBBQ0ssIHNwZWMgc2F5cywKKwkgICog4oCcSWYgYW4gSU5JVCBBQ0sgaXMgcmVjZWl2ZWQgYnkgYW4gZW5kcG9pbnQgaW4gYW55IHN0YXRlIG90aGVyCisJICAqIHRoYW4gdGhlIENPT0tJRS1XQUlUIHN0YXRlLCB0aGUgZW5kcG9pbnQgc2hvdWxkIGRpc2NhcmQgdGhlCisJICAqIElOSVQgQUNLIGNodW5r4oCdLiBTdGF5IGluIHRoZSBzYW1lIHN0YXRlCisJICAqLworCSB7SVBfVlNfU0NUUF9TX1NIVVRfQUNLX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19TSFVUX0FDS19TRVIgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9BQ0tfU0VSICovIH0sCisJIC8qCisJICAqIENsaWVudCBzZW50IEVDSE8sIFNwZWMoc2VjIDUuMi40KSBzYXlzIGl0IG1heSBiZSBoYW5kbGVkIGJ5IHRoZQorCSAgKiBwZWVyIGFuZCBwZWVyIHNoYWxsIG1vdmUgdG8gdGhlIEVTVEFCSVNIRUQuIGlmIGl0IGRvZXNuJ3QgaGFuZGxlCisJICAqIGl0IHdpbGwgc2VuZCBFUlJPUiBjaHVuay4gU28sIHN0YXkgaW4gdGhlIHNhbWUgc3RhdGUKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfRVNUQUJMSVNIRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0VDSE9fQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfRVNUQUJMSVNIRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0VDSE9fU0VSICovIH0sCisJIC8qCisJICAqIENPT0tJRSBBQ0sgZnJvbSBjbGllbnQsIG5vdCBzdXJlIHdoYXQgdG8gZG8gc3RheSBpbiB0aGUgc2FtZSBzdGF0ZQorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19TSFVUX0FDS19TRVIgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19TSFVUX0FDS19TRVIgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQUJPUlRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0FCT1JUX1NFUiAqLyB9LAorCSAvKgorCSAgKiBTSFVURE9XTiBzZW50IGZyb20gdGhlIGNsaWVudCwgbW92ZSB0byBTSFVERE9XTl9DTEkKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfU0hVVF9DTEkgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DTEkgKi8gfSwKKwkgLyoKKwkgICogU0hVVERPV04gc2VudCBmcm9tIHRoZSBzZXJ2ZXIsIG1vdmUgdG8gU0hVVERPV05fU0VSCisJICAqLworCSB7SVBfVlNfU0NUUF9TX1NIVVRfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfU0VSICovIH0sCisJIC8qCisJICAqIGNsaWVudCBzZW50IFNIVURURE9XTl9BQ0ssIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gbGV0J3MgY2xvc2UKKwkgICogdGhlIGNvbm5lY3Rpb24uCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0FDS19DTEkgKi8gfSwKKwkgLyoKKwkgICogU2VydmVyIHJlc2VudCBTSFVURE9XTiBBQ0ssIHN0YXkgaW4gdGhlIHNhbWUgc3RhdGUKKwkgICovCisJIHtJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfU0VSIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQUNLX1NFUiAqLyB9LAorCSAvKgorCSAgKiBTSFVURE9XTiBDT00gZnJvbSBjbGllbnQsIHRoaXMgd2hhdCB3ZSBhcmUgZXhwZWN0aW5nLCBsZXQncyBjbG9zZQorCSAgKiB0aGUgY29ubmVjdGlvbgorCSAgKi8KKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9DT01fQ0xJICovIH0sCisJIC8qCisJICAqIFNIVVRET1dOIENPTVBMRVRFIGZyb20gc2VydmVyIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uCisJICAqLworCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9TRVIgKi8gfQorCSB9LAorCS8qCisJICogU3RhdGUgOiBJUF9WU19TQ1RQX1NfQ0xPU0VECisJICovCisJe3tJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0RBVEFfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0RBVEFfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfSU5JVF9DTEkgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19JTklUX1NFUiAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9JTklUX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfSU5JVF9BQ0tfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0NPT0tJRV9FQ0hPX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9DT09LSUVfRUNIT19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQ09PS0lFX0FDS19TRVIgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfQUJPUlRfQ0xJICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX0FCT1JUX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX1NFUiAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0FDS19DTEkgKi8gfSwKKwkge0lQX1ZTX1NDVFBfU19DTE9TRUQgLyogSVBfVlNfU0NUUF9FVkVfU0hVVF9BQ0tfU0VSICovIH0sCisJIHtJUF9WU19TQ1RQX1NfQ0xPU0VEIC8qIElQX1ZTX1NDVFBfRVZFX1NIVVRfQ09NX0NMSSAqLyB9LAorCSB7SVBfVlNfU0NUUF9TX0NMT1NFRCAvKiBJUF9WU19TQ1RQX0VWRV9TSFVUX0NPTV9TRVIgKi8gfQorCSB9Cit9OworCisvKgorICogICAgICBUaW1lb3V0IHRhYmxlW3N0YXRlXQorICovCitzdGF0aWMgaW50IHNjdHBfdGltZW91dHNbSVBfVlNfU0NUUF9TX0xBU1QgKyAxXSA9IHsKKwlbSVBfVlNfU0NUUF9TX05PTkVdICAgICAgICAgPSAgICAgMiAqIEhaLAorCVtJUF9WU19TQ1RQX1NfSU5JVF9DTEldICAgICA9ICAgICAxICogNjAgKiBIWiwKKwlbSVBfVlNfU0NUUF9TX0lOSVRfU0VSXSAgICAgPSAgICAgMSAqIDYwICogSFosCisJW0lQX1ZTX1NDVFBfU19JTklUX0FDS19DTEldID0gICAgIDEgKiA2MCAqIEhaLAorCVtJUF9WU19TQ1RQX1NfSU5JVF9BQ0tfU0VSXSA9ICAgICAxICogNjAgKiBIWiwKKwlbSVBfVlNfU0NUUF9TX0VDSE9fQ0xJXSAgICAgPSAgICAgMSAqIDYwICogSFosCisJW0lQX1ZTX1NDVFBfU19FQ0hPX1NFUl0gICAgID0gICAgIDEgKiA2MCAqIEhaLAorCVtJUF9WU19TQ1RQX1NfRVNUQUJMSVNIRURdICA9ICAgIDE1ICogNjAgKiBIWiwKKwlbSVBfVlNfU0NUUF9TX1NIVVRfQ0xJXSAgICAgPSAgICAgMSAqIDYwICogSFosCisJW0lQX1ZTX1NDVFBfU19TSFVUX1NFUl0gICAgID0gICAgIDEgKiA2MCAqIEhaLAorCVtJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfQ0xJXSA9ICAgICAxICogNjAgKiBIWiwKKwlbSVBfVlNfU0NUUF9TX1NIVVRfQUNLX1NFUl0gPSAgICAgMSAqIDYwICogSFosCisJW0lQX1ZTX1NDVFBfU19DTE9TRURdICAgICAgID0gICAgMTAgKiBIWiwKKwlbSVBfVlNfU0NUUF9TX0xBU1RdICAgICAgICAgPSAgICAgMiAqIEhaLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnNjdHBfc3RhdGVfbmFtZV90YWJsZVtJUF9WU19TQ1RQX1NfTEFTVCArIDFdID0geworCVtJUF9WU19TQ1RQX1NfTk9ORV0gICAgICAgICA9ICAgICJOT05FIiwKKwlbSVBfVlNfU0NUUF9TX0lOSVRfQ0xJXSAgICAgPSAgICAiSU5JVF9DTEkiLAorCVtJUF9WU19TQ1RQX1NfSU5JVF9TRVJdICAgICA9ICAgICJJTklUX1NFUiIsCisJW0lQX1ZTX1NDVFBfU19JTklUX0FDS19DTEldID0gICAgIklOSVRfQUNLX0NMSSIsCisJW0lQX1ZTX1NDVFBfU19JTklUX0FDS19TRVJdID0gICAgIklOSVRfQUNLX1NFUiIsCisJW0lQX1ZTX1NDVFBfU19FQ0hPX0NMSV0gICAgID0gICAgIkNPT0tJRV9FQ0hPX0NMSSIsCisJW0lQX1ZTX1NDVFBfU19FQ0hPX1NFUl0gICAgID0gICAgIkNPT0tJRV9FQ0hPX1NFUiIsCisJW0lQX1ZTX1NDVFBfU19FU1RBQkxJU0hFRF0gID0gICAgIkVTVEFCSVNIRUQiLAorCVtJUF9WU19TQ1RQX1NfU0hVVF9DTEldICAgICA9ICAgICJTSFVURE9XTl9DTEkiLAorCVtJUF9WU19TQ1RQX1NfU0hVVF9TRVJdICAgICA9ICAgICJTSFVURE9XTl9TRVIiLAorCVtJUF9WU19TQ1RQX1NfU0hVVF9BQ0tfQ0xJXSA9ICAgICJTSFVURE9XTl9BQ0tfQ0xJIiwKKwlbSVBfVlNfU0NUUF9TX1NIVVRfQUNLX1NFUl0gPSAgICAiU0hVVERPV05fQUNLX1NFUiIsCisJW0lQX1ZTX1NDVFBfU19DTE9TRURdICAgICAgID0gICAgIkNMT1NFRCIsCisJW0lQX1ZTX1NDVFBfU19MQVNUXSAgICAgICAgID0gICAgIkJVRyEiCit9OworCisKK3N0YXRpYyBjb25zdCBjaGFyICpzY3RwX3N0YXRlX25hbWUoaW50IHN0YXRlKQoreworCWlmIChzdGF0ZSA+PSBJUF9WU19TQ1RQX1NfTEFTVCkKKwkJcmV0dXJuICJFUlIhIjsKKwlpZiAoc2N0cF9zdGF0ZV9uYW1lX3RhYmxlW3N0YXRlXSkKKwkJcmV0dXJuIHNjdHBfc3RhdGVfbmFtZV90YWJsZVtzdGF0ZV07CisJcmV0dXJuICI/IjsKK30KKworc3RhdGljIHZvaWQgc2N0cF90aW1lb3V0X2NoYW5nZShzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBpbnQgZmxhZ3MpCit7Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfc2V0X3N0YXRlX3RpbWVvdXQoc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwgY2hhciAqc25hbWUsIGludCB0bykKK3sKKworcmV0dXJuIGlwX3ZzX3NldF9zdGF0ZV90aW1lb3V0KHBwLT50aW1lb3V0X3RhYmxlLCBJUF9WU19TQ1RQX1NfTEFTVCwKKwkJCQlzY3RwX3N0YXRlX25hbWVfdGFibGUsIHNuYW1lLCB0byk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitzZXRfc2N0cF9zdGF0ZShzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsCisJCWludCBkaXJlY3Rpb24sIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCit7CisJc2N0cF9jaHVua2hkcl90IF9zY3RwY2gsICpzY2g7CisJdW5zaWduZWQgY2hhciBjaHVua190eXBlOworCWludCBldmVudCwgbmV4dF9zdGF0ZTsKKwlpbnQgaWhsOworCisjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjYKKwlpaGwgPSBjcC0+YWYgPT0gQUZfSU5FVCA/IGlwX2hkcmxlbihza2IpIDogc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKTsKKyNlbHNlCisJaWhsID0gaXBfaGRybGVuKHNrYik7CisjZW5kaWYKKworCXNjaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGlobCArIHNpemVvZihzY3RwX3NjdHBoZHJfdCksCisJCQkJc2l6ZW9mKF9zY3RwY2gpLCAmX3NjdHBjaCk7CisJaWYgKHNjaCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWNodW5rX3R5cGUgPSBzY2gtPnR5cGU7CisJLyoKKwkgKiBTZWN0aW9uIDM6IE11bHRpcGxlIGNodW5rcyBjYW4gYmUgYnVuZGxlZCBpbnRvIG9uZSBTQ1RQIHBhY2tldAorCSAqIHVwIHRvIHRoZSBNVFUgc2l6ZSwgZXhjZXB0IGZvciB0aGUgSU5JVCwgSU5JVCBBQ0ssIGFuZAorCSAqIFNIVVRET1dOIENPTVBMRVRFIGNodW5rcy4gVGhlc2UgY2h1bmtzIE1VU1QgTk9UIGJlIGJ1bmRsZWQgd2l0aAorCSAqIGFueSBvdGhlciBjaHVuayBpbiBhIHBhY2tldC4KKwkgKgorCSAqIFNlY3Rpb24gMy4zLjc6IERBVEEgY2h1bmtzIE1VU1QgTk9UIGJlIGJ1bmRsZWQgd2l0aCBBQk9SVC4gQ29udHJvbAorCSAqIGNodW5rcyAoZXhjZXB0IGZvciBJTklULCBJTklUIEFDSywgYW5kIFNIVVRET1dOIENPTVBMRVRFKSBNQVkgYmUKKwkgKiBidW5kbGVkIHdpdGggYW4gQUJPUlQsIGJ1dCB0aGV5IE1VU1QgYmUgcGxhY2VkIGJlZm9yZSB0aGUgQUJPUlQKKwkgKiBpbiB0aGUgU0NUUCBwYWNrZXQgb3IgdGhleSB3aWxsIGJlIGlnbm9yZWQgYnkgdGhlIHJlY2VpdmVyLgorCSAqLworCWlmICgoc2NoLT50eXBlID09IFNDVFBfQ0lEX0NPT0tJRV9FQ0hPKSB8fAorCSAgICAoc2NoLT50eXBlID09IFNDVFBfQ0lEX0NPT0tJRV9BQ0spKSB7CisJCXNjaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIChpaGwgKyBzaXplb2Yoc2N0cF9zY3RwaGRyX3QpICsKKwkJCQlzY2gtPmxlbmd0aCksIHNpemVvZihfc2N0cGNoKSwgJl9zY3RwY2gpOworCQlpZiAoc2NoKSB7CisJCQlpZiAoc2NoLT50eXBlID09IFNDVFBfQ0lEX0FCT1JUKQorCQkJCWNodW5rX3R5cGUgPSBzY2gtPnR5cGU7CisJCX0KKwl9CisKKwlldmVudCA9IHNjdHBfZXZlbnRzW2NodW5rX3R5cGVdOworCisJLyoKKwkgKiAgSWYgdGhlIGRpcmVjdGlvbiBpcyBJUF9WU19ESVJfT1VUUFVULCB0aGlzIGV2ZW50IGlzIGZyb20gc2VydmVyCisJICovCisJaWYgKGRpcmVjdGlvbiA9PSBJUF9WU19ESVJfT1VUUFVUKQorCQlldmVudCsrOworCS8qCisJICogZ2V0IG5leHQgc3RhdGUKKwkgKi8KKwluZXh0X3N0YXRlID0gc2N0cF9zdGF0ZXNfdGFibGVbY3AtPnN0YXRlXVtldmVudF0ubmV4dF9zdGF0ZTsKKworCWlmIChuZXh0X3N0YXRlICE9IGNwLT5zdGF0ZSkgeworCQlzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCA9IGNwLT5kZXN0OworCisJCUlQX1ZTX0RCR19CVUYoOCwgIiVzICVzICAlczolZC0+IgorCQkJCSIlczolZCBzdGF0ZTogJXMtPiVzIGNvbm4tPnJlZmNudDolZFxuIiwKKwkJCQlwcC0+bmFtZSwKKwkJCQkoKGRpcmVjdGlvbiA9PSBJUF9WU19ESVJfT1VUUFVUKSA/CisJCQkJICJvdXRwdXQgIiA6ICJpbnB1dCAiKSwKKwkJCQlJUF9WU19EQkdfQUREUihjcC0+YWYsICZjcC0+ZGFkZHIpLAorCQkJCW50b2hzKGNwLT5kcG9ydCksCisJCQkJSVBfVlNfREJHX0FERFIoY3AtPmFmLCAmY3AtPmNhZGRyKSwKKwkJCQludG9ocyhjcC0+Y3BvcnQpLAorCQkJCXNjdHBfc3RhdGVfbmFtZShjcC0+c3RhdGUpLAorCQkJCXNjdHBfc3RhdGVfbmFtZShuZXh0X3N0YXRlKSwKKwkJCQlhdG9taWNfcmVhZCgmY3AtPnJlZmNudCkpOworCQlpZiAoZGVzdCkgeworCQkJaWYgKCEoY3AtPmZsYWdzICYgSVBfVlNfQ09OTl9GX0lOQUNUSVZFKSAmJgorCQkJCShuZXh0X3N0YXRlICE9IElQX1ZTX1NDVFBfU19FU1RBQkxJU0hFRCkpIHsKKwkJCQlhdG9taWNfZGVjKCZkZXN0LT5hY3RpdmVjb25ucyk7CisJCQkJYXRvbWljX2luYygmZGVzdC0+aW5hY3Rjb25ucyk7CisJCQkJY3AtPmZsYWdzIHw9IElQX1ZTX0NPTk5fRl9JTkFDVElWRTsKKwkJCX0gZWxzZSBpZiAoKGNwLT5mbGFncyAmIElQX1ZTX0NPTk5fRl9JTkFDVElWRSkgJiYKKwkJCQkgICAobmV4dF9zdGF0ZSA9PSBJUF9WU19TQ1RQX1NfRVNUQUJMSVNIRUQpKSB7CisJCQkJYXRvbWljX2luYygmZGVzdC0+YWN0aXZlY29ubnMpOworCQkJCWF0b21pY19kZWMoJmRlc3QtPmluYWN0Y29ubnMpOworCQkJCWNwLT5mbGFncyAmPSB+SVBfVlNfQ09OTl9GX0lOQUNUSVZFOworCQkJfQorCQl9CisJfQorCisJIGNwLT50aW1lb3V0ID0gcHAtPnRpbWVvdXRfdGFibGVbY3AtPnN0YXRlID0gbmV4dF9zdGF0ZV07CisKKwkgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfc3RhdGVfdHJhbnNpdGlvbihzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBkaXJlY3Rpb24sCisJCWNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHApCit7CisJaW50IHJldCA9IDA7CisKKwlzcGluX2xvY2soJmNwLT5sb2NrKTsKKwlyZXQgPSBzZXRfc2N0cF9zdGF0ZShwcCwgY3AsIGRpcmVjdGlvbiwgc2tiKTsKKwlzcGluX3VubG9jaygmY3AtPmxvY2spOworCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqICAgICAgSGFzaCB0YWJsZSBmb3IgU0NUUCBhcHBsaWNhdGlvbiBpbmNhcm5hdGlvbnMKKyAqLworI2RlZmluZSBTQ1RQX0FQUF9UQUJfQklUUyAgICAgICAgNAorI2RlZmluZSBTQ1RQX0FQUF9UQUJfU0laRSAgICAgICAgKDEgPDwgU0NUUF9BUFBfVEFCX0JJVFMpCisjZGVmaW5lIFNDVFBfQVBQX1RBQl9NQVNLICAgICAgICAoU0NUUF9BUFBfVEFCX1NJWkUgLSAxKQorCitzdGF0aWMgc3RydWN0IGxpc3RfaGVhZCBzY3RwX2FwcHNbU0NUUF9BUFBfVEFCX1NJWkVdOworc3RhdGljIERFRklORV9TUElOTE9DSyhzY3RwX2FwcF9sb2NrKTsKKworc3RhdGljIGlubGluZSBfX3UxNiBzY3RwX2FwcF9oYXNoa2V5KF9fYmUxNiBwb3J0KQoreworCXJldHVybiAoKChfX2ZvcmNlIHUxNilwb3J0ID4+IFNDVFBfQVBQX1RBQl9CSVRTKSBeIChfX2ZvcmNlIHUxNilwb3J0KQorCQkmIFNDVFBfQVBQX1RBQl9NQVNLOworfQorCitzdGF0aWMgaW50IHNjdHBfcmVnaXN0ZXJfYXBwKHN0cnVjdCBpcF92c19hcHAgKmluYykKK3sKKwlzdHJ1Y3QgaXBfdnNfYXBwICppOworCV9fdTE2IGhhc2g7CisJX19iZTE2IHBvcnQgPSBpbmMtPnBvcnQ7CisJaW50IHJldCA9IDA7CisKKwloYXNoID0gc2N0cF9hcHBfaGFzaGtleShwb3J0KTsKKworCXNwaW5fbG9ja19iaCgmc2N0cF9hcHBfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShpLCAmc2N0cF9hcHBzW2hhc2hdLCBwX2xpc3QpIHsKKwkJaWYgKGktPnBvcnQgPT0gcG9ydCkgeworCQkJcmV0ID0gLUVFWElTVDsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCWxpc3RfYWRkKCZpbmMtPnBfbGlzdCwgJnNjdHBfYXBwc1toYXNoXSk7CisJYXRvbWljX2luYygmaXBfdnNfcHJvdG9jb2xfc2N0cC5hcHBjbnQpOworb3V0OgorCXNwaW5fdW5sb2NrX2JoKCZzY3RwX2FwcF9sb2NrKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHNjdHBfdW5yZWdpc3Rlcl9hcHAoc3RydWN0IGlwX3ZzX2FwcCAqaW5jKQoreworCXNwaW5fbG9ja19iaCgmc2N0cF9hcHBfbG9jayk7CisJYXRvbWljX2RlYygmaXBfdnNfcHJvdG9jb2xfc2N0cC5hcHBjbnQpOworCWxpc3RfZGVsKCZpbmMtPnBfbGlzdCk7CisJc3Bpbl91bmxvY2tfYmgoJnNjdHBfYXBwX2xvY2spOworfQorCitzdGF0aWMgaW50IHNjdHBfYXBwX2Nvbm5fYmluZChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApCit7CisJaW50IGhhc2g7CisJc3RydWN0IGlwX3ZzX2FwcCAqaW5jOworCWludCByZXN1bHQgPSAwOworCisJLyogRGVmYXVsdCBiaW5kaW5nOiBiaW5kIGFwcCBvbmx5IGZvciBOQVQgKi8KKwlpZiAoSVBfVlNfRldEX01FVEhPRChjcCkgIT0gSVBfVlNfQ09OTl9GX01BU1EpCisJCXJldHVybiAwOworCS8qIExvb2t1cCBhcHBsaWNhdGlvbiBpbmNhcm5hdGlvbnMgYW5kIGJpbmQgdGhlIHJpZ2h0IG9uZSAqLworCWhhc2ggPSBzY3RwX2FwcF9oYXNoa2V5KGNwLT52cG9ydCk7CisKKwlzcGluX2xvY2soJnNjdHBfYXBwX2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaW5jLCAmc2N0cF9hcHBzW2hhc2hdLCBwX2xpc3QpIHsKKwkJaWYgKGluYy0+cG9ydCA9PSBjcC0+dnBvcnQpIHsKKwkJCWlmICh1bmxpa2VseSghaXBfdnNfYXBwX2luY19nZXQoaW5jKSkpCisJCQkJYnJlYWs7CisJCQlzcGluX3VubG9jaygmc2N0cF9hcHBfbG9jayk7CisKKwkJCUlQX1ZTX0RCR19CVUYoOSwgIiVzOiBCaW5kaW5nIGNvbm4gJXM6JXUtPiIKKwkJCQkJIiVzOiV1IHRvIGFwcCAlcyBvbiBwb3J0ICV1XG4iLAorCQkJCQlfX2Z1bmNfXywKKwkJCQkJSVBfVlNfREJHX0FERFIoY3AtPmFmLCAmY3AtPmNhZGRyKSwKKwkJCQkJbnRvaHMoY3AtPmNwb3J0KSwKKwkJCQkJSVBfVlNfREJHX0FERFIoY3AtPmFmLCAmY3AtPnZhZGRyKSwKKwkJCQkJbnRvaHMoY3AtPnZwb3J0KSwKKwkJCQkJaW5jLT5uYW1lLCBudG9ocyhpbmMtPnBvcnQpKTsKKwkJCWNwLT5hcHAgPSBpbmM7CisJCQlpZiAoaW5jLT5pbml0X2Nvbm4pCisJCQkJcmVzdWx0ID0gaW5jLT5pbml0X2Nvbm4oaW5jLCBjcCk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmc2N0cF9hcHBfbG9jayk7CitvdXQ6CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgaXBfdnNfc2N0cF9pbml0KHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHApCit7CisJSVBfVlNfSU5JVF9IQVNIX1RBQkxFKHNjdHBfYXBwcyk7CisJcHAtPnRpbWVvdXRfdGFibGUgPSBzY3RwX3RpbWVvdXRzOworfQorCisKK3N0YXRpYyB2b2lkIGlwX3ZzX3NjdHBfZXhpdChzdHJ1Y3QgaXBfdnNfcHJvdG9jb2wgKnBwKQoreworCit9CisKK3N0cnVjdCBpcF92c19wcm90b2NvbCBpcF92c19wcm90b2NvbF9zY3RwID0geworCS5uYW1lID0gIlNDVFAiLAorCS5wcm90b2NvbCA9IElQUFJPVE9fU0NUUCwKKwkubnVtX3N0YXRlcyA9IElQX1ZTX1NDVFBfU19MQVNULAorCS5kb250X2RlZnJhZyA9IDAsCisJLmFwcGNudCA9IEFUT01JQ19JTklUKDApLAorCS5pbml0ID0gaXBfdnNfc2N0cF9pbml0LAorCS5leGl0ID0gaXBfdnNfc2N0cF9leGl0LAorCS5yZWdpc3Rlcl9hcHAgPSBzY3RwX3JlZ2lzdGVyX2FwcCwKKwkudW5yZWdpc3Rlcl9hcHAgPSBzY3RwX3VucmVnaXN0ZXJfYXBwLAorCS5jb25uX3NjaGVkdWxlID0gc2N0cF9jb25uX3NjaGVkdWxlLAorCS5jb25uX2luX2dldCA9IHNjdHBfY29ubl9pbl9nZXQsCisJLmNvbm5fb3V0X2dldCA9IHNjdHBfY29ubl9vdXRfZ2V0LAorCS5zbmF0X2hhbmRsZXIgPSBzY3RwX3NuYXRfaGFuZGxlciwKKwkuZG5hdF9oYW5kbGVyID0gc2N0cF9kbmF0X2hhbmRsZXIsCisJLmNzdW1fY2hlY2sgPSBzY3RwX2NzdW1fY2hlY2ssCisJLnN0YXRlX25hbWUgPSBzY3RwX3N0YXRlX25hbWUsCisJLnN0YXRlX3RyYW5zaXRpb24gPSBzY3RwX3N0YXRlX3RyYW5zaXRpb24sCisJLmFwcF9jb25uX2JpbmQgPSBzY3RwX2FwcF9jb25uX2JpbmQsCisJLmRlYnVnX3BhY2tldCA9IGlwX3ZzX3RjcHVkcF9kZWJ1Z19wYWNrZXQsCisJLnRpbWVvdXRfY2hhbmdlID0gc2N0cF90aW1lb3V0X2NoYW5nZSwKKwkuc2V0X3N0YXRlX3RpbWVvdXQgPSBzY3RwX3NldF9zdGF0ZV90aW1lb3V0LAorfTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCmluZGV4IGUxNzdmMGQuLjhmYjBhZTYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwpAQCAtNDAwLDYgKzQwMCwxMSBAQAogCQkJCQlmbGFncyB8PSBJUF9WU19DT05OX0ZfSU5BQ1RJVkU7CiAJCQkJZWxzZQogCQkJCQlmbGFncyAmPSB+SVBfVlNfQ09OTl9GX0lOQUNUSVZFOworCQkJfSBlbHNlIGlmIChzLT5wcm90b2NvbCA9PSBJUFBST1RPX1NDVFApIHsKKwkJCQlpZiAoc3RhdGUgIT0gSVBfVlNfU0NUUF9TX0VTVEFCTElTSEVEKQorCQkJCQlmbGFncyB8PSBJUF9WU19DT05OX0ZfSU5BQ1RJVkU7CisJCQkJZWxzZQorCQkJCQlmbGFncyAmPSB+SVBfVlNfQ09OTl9GX0lOQUNUSVZFOwogCQkJfQogCQkJY3AgPSBpcF92c19jb25uX25ldyhBRl9JTkVULCBzLT5wcm90b2NvbCwKIAkJCQkJICAgICh1bmlvbiBuZl9pbmV0X2FkZHIgKikmcy0+Y2FkZHIsCkBAIC00MzQsNiArNDM5LDE1IEBACiAJCQkJYXRvbWljX2RlYygmZGVzdC0+aW5hY3Rjb25ucyk7CiAJCQkJY3AtPmZsYWdzICY9IH5JUF9WU19DT05OX0ZfSU5BQ1RJVkU7CiAJCQl9CisJCX0gZWxzZSBpZiAoKGNwLT5kZXN0KSAmJiAoY3AtPnByb3RvY29sID09IElQUFJPVE9fU0NUUCkgJiYKKwkJCSAgIChjcC0+c3RhdGUgIT0gc3RhdGUpKSB7CisJCQlkZXN0ID0gY3AtPmRlc3Q7CisJCQlpZiAoIShjcC0+ZmxhZ3MgJiBJUF9WU19DT05OX0ZfSU5BQ1RJVkUpICYmCisJCQkgICAgIChzdGF0ZSAhPSBJUF9WU19TQ1RQX1NfRVNUQUJMSVNIRUQpKSB7CisJCQkgICAgYXRvbWljX2RlYygmZGVzdC0+YWN0aXZlY29ubnMpOworCQkJICAgIGF0b21pY19pbmMoJmRlc3QtPmluYWN0Y29ubnMpOworCQkJICAgIGNwLT5mbGFncyAmPSB+SVBfVlNfQ09OTl9GX0lOQUNUSVZFOworCQkJfQogCQl9CiAKIAkJaWYgKG9wdCkKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfeG1pdC5jCmluZGV4IDMwYjMxODkuLjIyM2I1MDEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c194bWl0LmMKKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3htaXQuYwpAQCAtMzExLDcgKzMxMSw3IEBACiAJbXR1ID0gZHN0X210dSgmcnQtPnUuZHN0KTsKIAlpZiAoc2tiLT5sZW4gPiBtdHUpIHsKIAkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7Ci0JCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSwgc2tiLT5kZXYpOworCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUpOwogCQlJUF9WU19EQkdfUkwoIiVzKCk6IGZyYWcgbmVlZGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gdHhfZXJyb3I7CiAJfQpAQCAtNDU0LDcgKzQ1NCw3IEBACiAJbXR1ID0gZHN0X210dSgmcnQtPnUuZHN0KTsKIAlpZiAoc2tiLT5sZW4gPiBtdHUpIHsKIAkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7Ci0JCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSwgc2tiLT5kZXYpOworCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUpOwogCQlJUF9WU19EQkdfUkxfUEtUKDAsIHBwLCBza2IsIDAsCiAJCQkJICJpcF92c19uYXRfeG1pdF92NigpOiBmcmFnIG5lZWRlZCBmb3IiKTsKIAkJZ290byB0eF9lcnJvcjsKQEAgLTY3Miw3ICs2NzIsNyBAQAogCQlza2JfZHN0KHNrYiktPm9wcy0+dXBkYXRlX3BtdHUoc2tiX2RzdChza2IpLCBtdHUpOwogCiAJaWYgKG10dSA8IG50b2hzKG9sZF9pcGgtPnBheWxvYWRfbGVuKSArIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpIHsKLQkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1LCBza2ItPmRldik7CisJCWljbXB2Nl9zZW5kKHNrYiwgSUNNUFY2X1BLVF9UT09CSUcsIDAsIG10dSk7CiAJCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOwogCQlJUF9WU19EQkdfUkwoIiVzKCk6IGZyYWcgbmVlZGVkXG4iLCBfX2Z1bmNfXyk7CiAJCWdvdG8gdHhfZXJyb3I7CkBAIC04MTQsNyArODE0LDcgQEAKIAkvKiBNVFUgY2hlY2tpbmcgKi8KIAltdHUgPSBkc3RfbXR1KCZydC0+dS5kc3QpOwogCWlmIChza2ItPmxlbiA+IG10dSkgewotCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUsIHNrYi0+ZGV2KTsKKwkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1KTsKIAkJZHN0X3JlbGVhc2UoJnJ0LT51LmRzdCk7CiAJCUlQX1ZTX0RCR19STCgiJXMoKTogZnJhZyBuZWVkZWRcbiIsIF9fZnVuY19fKTsKIAkJZ290byB0eF9lcnJvcjsKQEAgLTk2NSw3ICs5NjUsNyBAQAogCW10dSA9IGRzdF9tdHUoJnJ0LT51LmRzdCk7CiAJaWYgKHNrYi0+bGVuID4gbXR1KSB7CiAJCWRzdF9yZWxlYXNlKCZydC0+dS5kc3QpOwotCQlpY21wdjZfc2VuZChza2IsIElDTVBWNl9QS1RfVE9PQklHLCAwLCBtdHUsIHNrYi0+ZGV2KTsKKwkJaWNtcHY2X3NlbmQoc2tiLCBJQ01QVjZfUEtUX1RPT0JJRywgMCwgbXR1KTsKIAkJSVBfVlNfREJHX1JMKCIlcygpOiBmcmFnIG5lZWRlZFxuIiwgX19mdW5jX18pOwogCQlnb3RvIHR4X2Vycm9yOwogCX0KZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuYwppbmRleCA0ZDc5ZTNjLi4wYzliYmU5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5jCkBAIC00Miw2ICs0Miw3IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYWNjdC5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2VjYWNoZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3pvbmVzLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9uYXQuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmg+CiAKQEAgLTY4LDcgKzY5LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbmZfY29ubnRyYWNrX2hhc2hfcm5kOwogCiBzdGF0aWMgdV9pbnQzMl90IF9faGFzaF9jb25udHJhY2soY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCi0JCQkJICB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IHJuZCkKKwkJCQkgIHUxNiB6b25lLCB1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IHJuZCkKIHsKIAl1bnNpZ25lZCBpbnQgbjsKIAl1X2ludDMyX3QgaDsKQEAgLTc5LDE2ICs4MCwxNiBAQAogCSAqLwogCW4gPSAoc2l6ZW9mKHR1cGxlLT5zcmMpICsgc2l6ZW9mKHR1cGxlLT5kc3QudTMpKSAvIHNpemVvZih1MzIpOwogCWggPSBqaGFzaDIoKHUzMiAqKXR1cGxlLCBuLAotCQkgICBybmQgXiAoKChfX2ZvcmNlIF9fdTE2KXR1cGxlLT5kc3QudS5hbGwgPDwgMTYpIHwKLQkJCSAgdHVwbGUtPmRzdC5wcm90b251bSkpOworCQkgICB6b25lIF4gcm5kIF4gKCgoX19mb3JjZSBfX3UxNil0dXBsZS0+ZHN0LnUuYWxsIDw8IDE2KSB8CisJCQkJIHR1cGxlLT5kc3QucHJvdG9udW0pKTsKIAogCXJldHVybiAoKHU2NCloICogc2l6ZSkgPj4gMzI7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdV9pbnQzMl90IGhhc2hfY29ubnRyYWNrKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwKK3N0YXRpYyBpbmxpbmUgdV9pbnQzMl90IGhhc2hfY29ubnRyYWNrKGNvbnN0IHN0cnVjdCBuZXQgKm5ldCwgdTE2IHpvbmUsCiAJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewotCXJldHVybiBfX2hhc2hfY29ubnRyYWNrKHR1cGxlLCBuZXQtPmN0Lmh0YWJsZV9zaXplLAorCXJldHVybiBfX2hhc2hfY29ubnRyYWNrKHR1cGxlLCB6b25lLCBuZXQtPmN0Lmh0YWJsZV9zaXplLAogCQkJCW5mX2Nvbm50cmFja19oYXNoX3JuZCk7CiB9CiAKQEAgLTI5MiwxMSArMjkzLDEyIEBACiAgKiAtIENhbGxlciBtdXN0IGxvY2sgbmZfY29ubnRyYWNrX2xvY2sgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgogICovCiBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKgotX19uZl9jb25udHJhY2tfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQorX19uZl9jb25udHJhY2tfZmluZChzdHJ1Y3QgbmV0ICpuZXQsIHUxNiB6b25lLAorCQkgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUpCiB7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwogCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuOwotCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9jb25udHJhY2sobmV0LCB0dXBsZSk7CisJdW5zaWduZWQgaW50IGhhc2ggPSBoYXNoX2Nvbm50cmFjayhuZXQsIHpvbmUsIHR1cGxlKTsKIAogCS8qIERpc2FibGUgQkhzIHRoZSBlbnRpcmUgdGltZSBzaW5jZSB3ZSBub3JtYWxseSBuZWVkIHRvIGRpc2FibGUgdGhlbQogCSAqIGF0IGxlYXN0IG9uY2UgZm9yIHRoZSBzdGF0cyBhbnl3YXkuCkBAIC0zMDQsNyArMzA2LDggQEAKIAlsb2NhbF9iaF9kaXNhYmxlKCk7CiBiZWdpbjoKIAlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UoaCwgbiwgJm5ldC0+Y3QuaGFzaFtoYXNoXSwgaG5ub2RlKSB7Ci0JCWlmIChuZl9jdF90dXBsZV9lcXVhbCh0dXBsZSwgJmgtPnR1cGxlKSkgeworCQlpZiAobmZfY3RfdHVwbGVfZXF1YWwodHVwbGUsICZoLT50dXBsZSkgJiYKKwkJICAgIG5mX2N0X3pvbmUobmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKSkgPT0gem9uZSkgewogCQkJTkZfQ1RfU1RBVF9JTkMobmV0LCBmb3VuZCk7CiAJCQlsb2NhbF9iaF9lbmFibGUoKTsKIAkJCXJldHVybiBoOwpAQCAtMzI2LDIxICszMjksMjMgQEAKIAogLyogRmluZCBhIGNvbm5lY3Rpb24gY29ycmVzcG9uZGluZyB0byBhIHR1cGxlLiAqLwogc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICoKLW5mX2Nvbm50cmFja19maW5kX2dldChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQorbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgdTE2IHpvbmUsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiBiZWdpbjoKLQloID0gX19uZl9jb25udHJhY2tfZmluZChuZXQsIHR1cGxlKTsKKwloID0gX19uZl9jb25udHJhY2tfZmluZChuZXQsIHpvbmUsIHR1cGxlKTsKIAlpZiAoaCkgewogCQljdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCk7CiAJCWlmICh1bmxpa2VseShuZl9jdF9pc19keWluZyhjdCkgfHwKIAkJCSAgICAgIWF0b21pY19pbmNfbm90X3plcm8oJmN0LT5jdF9nZW5lcmFsLnVzZSkpKQogCQkJaCA9IE5VTEw7CiAJCWVsc2UgewotCQkJaWYgKHVubGlrZWx5KCFuZl9jdF90dXBsZV9lcXVhbCh0dXBsZSwgJmgtPnR1cGxlKSkpIHsKKwkJCWlmICh1bmxpa2VseSghbmZfY3RfdHVwbGVfZXF1YWwodHVwbGUsICZoLT50dXBsZSkgfHwKKwkJCQkgICAgIG5mX2N0X3pvbmUoY3QpICE9IHpvbmUpKSB7CiAJCQkJbmZfY3RfcHV0KGN0KTsKIAkJCQlnb3RvIGJlZ2luOwogCQkJfQpAQCAtMzY4LDkgKzM3MywxMSBAQAogewogCXN0cnVjdCBuZXQgKm5ldCA9IG5mX2N0X25ldChjdCk7CiAJdW5zaWduZWQgaW50IGhhc2gsIHJlcGxfaGFzaDsKKwl1MTYgem9uZTsKIAotCWhhc2ggPSBoYXNoX2Nvbm50cmFjayhuZXQsICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUpOwotCXJlcGxfaGFzaCA9IGhhc2hfY29ubnRyYWNrKG5ldCwgJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZSk7CisJem9uZSA9IG5mX2N0X3pvbmUoY3QpOworCWhhc2ggPSBoYXNoX2Nvbm50cmFjayhuZXQsIHpvbmUsICZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9PUklHSU5BTF0udHVwbGUpOworCXJlcGxfaGFzaCA9IGhhc2hfY29ubnRyYWNrKG5ldCwgem9uZSwgJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZSk7CiAKIAlfX25mX2Nvbm50cmFja19oYXNoX2luc2VydChjdCwgaGFzaCwgcmVwbF9oYXNoKTsKIH0KQEAgLTM4Nyw2ICszOTQsNyBAQAogCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuOwogCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOwogCXN0cnVjdCBuZXQgKm5ldDsKKwl1MTYgem9uZTsKIAogCWN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7CiAJbmV0ID0gbmZfY3RfbmV0KGN0KTsKQEAgLTM5OCw4ICs0MDYsOSBAQAogCWlmIChDVElORk8yRElSKGN0aW5mbykgIT0gSVBfQ1RfRElSX09SSUdJTkFMKQogCQlyZXR1cm4gTkZfQUNDRVBUOwogCi0JaGFzaCA9IGhhc2hfY29ubnRyYWNrKG5ldCwgJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSk7Ci0JcmVwbF9oYXNoID0gaGFzaF9jb25udHJhY2sobmV0LCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlKTsKKwl6b25lID0gbmZfY3Rfem9uZShjdCk7CisJaGFzaCA9IGhhc2hfY29ubnRyYWNrKG5ldCwgem9uZSwgJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSk7CisJcmVwbF9oYXNoID0gaGFzaF9jb25udHJhY2sobmV0LCB6b25lLCAmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlKTsKIAogCS8qIFdlJ3JlIG5vdCBpbiBoYXNoIHRhYmxlLCBhbmQgd2UgcmVmdXNlIHRvIHNldCB1cCByZWxhdGVkCiAJICAgY29ubmVjdGlvbnMgZm9yIHVuY29uZmlybWVkIGNvbm5zLiAgQnV0IHBhY2tldCBjb3BpZXMgYW5kCkBAIC00MTgsMTEgKzQyNywxMyBAQAogCSAgIG5vdCBpbiB0aGUgaGFzaC4gIElmIHRoZXJlIGlzLCB3ZSBsb3N0IHJhY2UuICovCiAJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkoaCwgbiwgJm5ldC0+Y3QuaGFzaFtoYXNoXSwgaG5ub2RlKQogCQlpZiAobmZfY3RfdHVwbGVfZXF1YWwoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX09SSUdJTkFMXS50dXBsZSwKLQkJCQkgICAgICAmaC0+dHVwbGUpKQorCQkJCSAgICAgICZoLT50dXBsZSkgJiYKKwkJICAgIHpvbmUgPT0gbmZfY3Rfem9uZShuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpKSkKIAkJCWdvdG8gb3V0OwogCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5KGgsIG4sICZuZXQtPmN0Lmhhc2hbcmVwbF9oYXNoXSwgaG5ub2RlKQogCQlpZiAobmZfY3RfdHVwbGVfZXF1YWwoJmN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZSwKLQkJCQkgICAgICAmaC0+dHVwbGUpKQorCQkJCSAgICAgICZoLT50dXBsZSkgJiYKKwkJICAgIHpvbmUgPT0gbmZfY3Rfem9uZShuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpKSkKIAkJCWdvdG8gb3V0OwogCiAJLyogUmVtb3ZlIGZyb20gdW5jb25maXJtZWQgbGlzdCAqLwpAQCAtNDY5LDE1ICs0ODAsMTkgQEAKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBuZl9jdF9uZXQoaWdub3JlZF9jb25udHJhY2spOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjsKLQl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfY29ubnRyYWNrKG5ldCwgdHVwbGUpOworCXN0cnVjdCBuZl9jb25uICpjdDsKKwl1MTYgem9uZSA9IG5mX2N0X3pvbmUoaWdub3JlZF9jb25udHJhY2spOworCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9jb25udHJhY2sobmV0LCB6b25lLCB0dXBsZSk7CiAKIAkvKiBEaXNhYmxlIEJIcyB0aGUgZW50aXJlIHRpbWUgc2luY2Ugd2UgbmVlZCB0byBkaXNhYmxlIHRoZW0gYXQKIAkgKiBsZWFzdCBvbmNlIGZvciB0aGUgc3RhdHMgYW55d2F5LgogCSAqLwogCXJjdV9yZWFkX2xvY2tfYmgoKTsKIAlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UoaCwgbiwgJm5ldC0+Y3QuaGFzaFtoYXNoXSwgaG5ub2RlKSB7Ci0JCWlmIChuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpICE9IGlnbm9yZWRfY29ubnRyYWNrICYmCi0JCSAgICBuZl9jdF90dXBsZV9lcXVhbCh0dXBsZSwgJmgtPnR1cGxlKSkgeworCQljdCA9IG5mX2N0X3R1cGxlaGFzaF90b19jdHJhY2soaCk7CisJCWlmIChjdCAhPSBpZ25vcmVkX2Nvbm50cmFjayAmJgorCQkgICAgbmZfY3RfdHVwbGVfZXF1YWwodHVwbGUsICZoLT50dXBsZSkgJiYKKwkJICAgIG5mX2N0X3pvbmUoY3QpID09IHpvbmUpIHsKIAkJCU5GX0NUX1NUQVRfSU5DKG5ldCwgZm91bmQpOwogCQkJcmN1X3JlYWRfdW5sb2NrX2JoKCk7CiAJCQlyZXR1cm4gMTsKQEAgLTU0MCw3ICs1NTUsNyBAQAogCXJldHVybiBkcm9wcGVkOwogfQogCi1zdHJ1Y3QgbmZfY29ubiAqbmZfY29ubnRyYWNrX2FsbG9jKHN0cnVjdCBuZXQgKm5ldCwKK3N0cnVjdCBuZl9jb25uICpuZl9jb25udHJhY2tfYWxsb2Moc3RydWN0IG5ldCAqbmV0LCB1MTYgem9uZSwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICpvcmlnLAogCQkJCSAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnJlcGwsCiAJCQkJICAgZ2ZwX3QgZ2ZwKQpAQCAtNTU4LDcgKzU3Myw3IEBACiAKIAlpZiAobmZfY29ubnRyYWNrX21heCAmJgogCSAgICB1bmxpa2VseShhdG9taWNfcmVhZCgmbmV0LT5jdC5jb3VudCkgPiBuZl9jb25udHJhY2tfbWF4KSkgewotCQl1bnNpZ25lZCBpbnQgaGFzaCA9IGhhc2hfY29ubnRyYWNrKG5ldCwgb3JpZyk7CisJCXVuc2lnbmVkIGludCBoYXNoID0gaGFzaF9jb25udHJhY2sobmV0LCB6b25lLCBvcmlnKTsKIAkJaWYgKCFlYXJseV9kcm9wKG5ldCwgaGFzaCkpIHsKIAkJCWF0b21pY19kZWMoJm5ldC0+Y3QuY291bnQpOwogCQkJaWYgKG5ldF9yYXRlbGltaXQoKSkKQEAgLTU5NSwxMyArNjEwLDI4IEBACiAjaWZkZWYgQ09ORklHX05FVF9OUwogCWN0LT5jdF9uZXQgPSBuZXQ7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTCisJaWYgKHpvbmUpIHsKKwkJc3RydWN0IG5mX2Nvbm50cmFja196b25lICpuZl9jdF96b25lOwogCisJCW5mX2N0X3pvbmUgPSBuZl9jdF9leHRfYWRkKGN0LCBORl9DVF9FWFRfWk9ORSwgR0ZQX0FUT01JQyk7CisJCWlmICghbmZfY3Rfem9uZSkKKwkJCWdvdG8gb3V0X2ZyZWU7CisJCW5mX2N0X3pvbmUtPmlkID0gem9uZTsKKwl9CisjZW5kaWYKIAkvKgogCSAqIGNoYW5nZXMgdG8gbG9va3VwIGtleXMgbXVzdCBiZSBkb25lIGJlZm9yZSBzZXR0aW5nIHJlZmNudCB0byAxCiAJICovCiAJc21wX3dtYigpOwogCWF0b21pY19zZXQoJmN0LT5jdF9nZW5lcmFsLnVzZSwgMSk7CiAJcmV0dXJuIGN0OworCisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19aT05FUworb3V0X2ZyZWU6CisJa21lbV9jYWNoZV9mcmVlKG5ldC0+Y3QubmZfY29ubnRyYWNrX2NhY2hlcCwgY3QpOworCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworI2VuZGlmCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfYWxsb2MpOwogCkBAIC02MTksNyArNjQ5LDcgQEAKIC8qIEFsbG9jYXRlIGEgbmV3IGNvbm50cmFjazogd2UgcmV0dXJuIC1FTk9NRU0gaWYgY2xhc3NpZmljYXRpb24KICAgIGZhaWxlZCBkdWUgdG8gc3RyZXNzLiAgT3RoZXJ3aXNlIGl0IHJlYWxseSBpcyB1bmNsYXNzaWZpYWJsZS4gKi8KIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKgotaW5pdF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LAoraW5pdF9jb25udHJhY2soc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmZfY29ubiAqdG1wbCwKIAkgICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCiAJICAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfbDNwcm90byAqbDNwcm90bywKIAkgICAgICAgc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpsNHByb3RvLApAQCAtNjI5LDE0ICs2NTksMTYgQEAKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAJc3RydWN0IG5mX2Nvbm5faGVscCAqaGVscDsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHJlcGxfdHVwbGU7CisJc3RydWN0IG5mX2Nvbm50cmFja19lY2FjaGUgKmVjYWNoZTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwOworCXUxNiB6b25lID0gdG1wbCA/IG5mX2N0X3pvbmUodG1wbCkgOiBORl9DVF9ERUZBVUxUX1pPTkU7CiAKIAlpZiAoIW5mX2N0X2ludmVydF90dXBsZSgmcmVwbF90dXBsZSwgdHVwbGUsIGwzcHJvdG8sIGw0cHJvdG8pKSB7CiAJCXByX2RlYnVnKCJDYW4ndCBpbnZlcnQgdHVwbGUuXG4iKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JY3QgPSBuZl9jb25udHJhY2tfYWxsb2MobmV0LCB0dXBsZSwgJnJlcGxfdHVwbGUsIEdGUF9BVE9NSUMpOworCWN0ID0gbmZfY29ubnRyYWNrX2FsbG9jKG5ldCwgem9uZSwgdHVwbGUsICZyZXBsX3R1cGxlLCBHRlBfQVRPTUlDKTsKIAlpZiAoSVNfRVJSKGN0KSkgewogCQlwcl9kZWJ1ZygiQ2FuJ3QgYWxsb2NhdGUgY29ubnRyYWNrLlxuIik7CiAJCXJldHVybiAoc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICopY3Q7CkBAIC02NDksMTAgKzY4MSwxNCBAQAogCX0KIAogCW5mX2N0X2FjY3RfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7Ci0JbmZfY3RfZWNhY2hlX2V4dF9hZGQoY3QsIEdGUF9BVE9NSUMpOworCisJZWNhY2hlID0gdG1wbCA/IG5mX2N0X2VjYWNoZV9maW5kKHRtcGwpIDogTlVMTDsKKwluZl9jdF9lY2FjaGVfZXh0X2FkZChjdCwgZWNhY2hlID8gZWNhY2hlLT5jdG1hc2sgOiAwLAorCQkJCSBlY2FjaGUgPyBlY2FjaGUtPmV4cG1hc2sgOiAwLAorCQkJICAgICBHRlBfQVRPTUlDKTsKIAogCXNwaW5fbG9ja19iaCgmbmZfY29ubnRyYWNrX2xvY2spOwotCWV4cCA9IG5mX2N0X2ZpbmRfZXhwZWN0YXRpb24obmV0LCB0dXBsZSk7CisJZXhwID0gbmZfY3RfZmluZF9leHBlY3RhdGlvbihuZXQsIHpvbmUsIHR1cGxlKTsKIAlpZiAoZXhwKSB7CiAJCXByX2RlYnVnKCJjb25udHJhY2s6IGV4cGVjdGF0aW9uIGFycml2ZXMgY3Q9JXAgZXhwPSVwXG4iLAogCQkJIGN0LCBleHApOwpAQCAtNjc0LDcgKzcxMCw3IEBACiAJCW5mX2Nvbm50cmFja19nZXQoJmN0LT5tYXN0ZXItPmN0X2dlbmVyYWwpOwogCQlORl9DVF9TVEFUX0lOQyhuZXQsIGV4cGVjdF9uZXcpOwogCX0gZWxzZSB7Ci0JCV9fbmZfY3RfdHJ5X2Fzc2lnbl9oZWxwZXIoY3QsIEdGUF9BVE9NSUMpOworCQlfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKGN0LCB0bXBsLCBHRlBfQVRPTUlDKTsKIAkJTkZfQ1RfU1RBVF9JTkMobmV0LCBuZXcpOwogCX0KIApAQCAtNjk1LDcgKzczMSw3IEBACiAKIC8qIE9uIHN1Y2Nlc3MsIHJldHVybnMgY29ubnRyYWNrIHB0ciwgc2V0cyBza2ItPm5mY3QgYW5kIGN0aW5mbyAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgbmZfY29ubiAqCi1yZXNvbHZlX25vcm1hbF9jdChzdHJ1Y3QgbmV0ICpuZXQsCityZXNvbHZlX25vcm1hbF9jdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uICp0bXBsLAogCQkgIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCSAgdV9pbnQxNl90IGwzbnVtLApAQCAtNzA4LDYgKzc0NCw3IEBACiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CiAJc3RydWN0IG5mX2Nvbm4gKmN0OworCXUxNiB6b25lID0gdG1wbCA/IG5mX2N0X3pvbmUodG1wbCkgOiBORl9DVF9ERUZBVUxUX1pPTkU7CiAKIAlpZiAoIW5mX2N0X2dldF90dXBsZShza2IsIHNrYl9uZXR3b3JrX29mZnNldChza2IpLAogCQkJICAgICBkYXRhb2ZmLCBsM251bSwgcHJvdG9udW0sICZ0dXBsZSwgbDNwcm90bywKQEAgLTcxNyw5ICs3NTQsMTAgQEAKIAl9CiAKIAkvKiBsb29rIGZvciB0dXBsZSBtYXRjaCAqLwotCWggPSBuZl9jb25udHJhY2tfZmluZF9nZXQobmV0LCAmdHVwbGUpOworCWggPSBuZl9jb25udHJhY2tfZmluZF9nZXQobmV0LCB6b25lLCAmdHVwbGUpOwogCWlmICghaCkgewotCQloID0gaW5pdF9jb25udHJhY2sobmV0LCAmdHVwbGUsIGwzcHJvdG8sIGw0cHJvdG8sIHNrYiwgZGF0YW9mZik7CisJCWggPSBpbml0X2Nvbm50cmFjayhuZXQsIHRtcGwsICZ0dXBsZSwgbDNwcm90bywgbDRwcm90bywKKwkJCQkgICBza2IsIGRhdGFvZmYpOwogCQlpZiAoIWgpCiAJCQlyZXR1cm4gTlVMTDsKIAkJaWYgKElTX0VSUihoKSkKQEAgLTc1Niw3ICs3OTQsNyBAQAogbmZfY29ubnRyYWNrX2luKHN0cnVjdCBuZXQgKm5ldCwgdV9pbnQ4X3QgcGYsIHVuc2lnbmVkIGludCBob29rbnVtLAogCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBuZl9jb25uICpjdDsKKwlzdHJ1Y3QgbmZfY29ubiAqY3QsICp0bXBsID0gTlVMTDsKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2wzcHJvdG8gKmwzcHJvdG87CiAJc3RydWN0IG5mX2Nvbm50cmFja19sNHByb3RvICpsNHByb3RvOwpAQCAtNzY1LDEwICs4MDMsMTQgQEAKIAlpbnQgc2V0X3JlcGx5ID0gMDsKIAlpbnQgcmV0OwogCi0JLyogUHJldmlvdXNseSBzZWVuIChsb29wYmFjayBvciB1bnRyYWNrZWQpPyAgSWdub3JlLiAqLwogCWlmIChza2ItPm5mY3QpIHsKLQkJTkZfQ1RfU1RBVF9JTkNfQVRPTUlDKG5ldCwgaWdub3JlKTsKLQkJcmV0dXJuIE5GX0FDQ0VQVDsKKwkJLyogUHJldmlvdXNseSBzZWVuIChsb29wYmFjayBvciB1bnRyYWNrZWQpPyAgSWdub3JlLiAqLworCQl0bXBsID0gKHN0cnVjdCBuZl9jb25uICopc2tiLT5uZmN0OworCQlpZiAoIW5mX2N0X2lzX3RlbXBsYXRlKHRtcGwpKSB7CisJCQlORl9DVF9TVEFUX0lOQ19BVE9NSUMobmV0LCBpZ25vcmUpOworCQkJcmV0dXJuIE5GX0FDQ0VQVDsKKwkJfQorCQlza2ItPm5mY3QgPSBOVUxMOwogCX0KIAogCS8qIHJjdV9yZWFkX2xvY2soKWVkIGJ5IG5mX2hvb2tfc2xvdyAqLwpAQCAtNzc5LDcgKzgyMSw4IEBACiAJCXByX2RlYnVnKCJub3QgcHJlcGFyZWQgdG8gdHJhY2sgeWV0IG9yIGVycm9yIG9jY3VyZWRcbiIpOwogCQlORl9DVF9TVEFUX0lOQ19BVE9NSUMobmV0LCBlcnJvcik7CiAJCU5GX0NUX1NUQVRfSU5DX0FUT01JQyhuZXQsIGludmFsaWQpOwotCQlyZXR1cm4gLXJldDsKKwkJcmV0ID0gLXJldDsKKwkJZ290byBvdXQ7CiAJfQogCiAJbDRwcm90byA9IF9fbmZfY3RfbDRwcm90b19maW5kKHBmLCBwcm90b251bSk7CkBAIC03ODgsMjYgKzgzMSwzMCBAQAogCSAqIGludmVyc2Ugb2YgdGhlIHJldHVybiBjb2RlIHRlbGxzIHRvIHRoZSBuZXRmaWx0ZXIKIAkgKiBjb3JlIHdoYXQgdG8gZG8gd2l0aCB0aGUgcGFja2V0LiAqLwogCWlmIChsNHByb3RvLT5lcnJvciAhPSBOVUxMKSB7Ci0JCXJldCA9IGw0cHJvdG8tPmVycm9yKG5ldCwgc2tiLCBkYXRhb2ZmLCAmY3RpbmZvLCBwZiwgaG9va251bSk7CisJCXJldCA9IGw0cHJvdG8tPmVycm9yKG5ldCwgdG1wbCwgc2tiLCBkYXRhb2ZmLCAmY3RpbmZvLAorCQkJCSAgICAgcGYsIGhvb2tudW0pOwogCQlpZiAocmV0IDw9IDApIHsKIAkJCU5GX0NUX1NUQVRfSU5DX0FUT01JQyhuZXQsIGVycm9yKTsKIAkJCU5GX0NUX1NUQVRfSU5DX0FUT01JQyhuZXQsIGludmFsaWQpOwotCQkJcmV0dXJuIC1yZXQ7CisJCQlyZXQgPSAtcmV0OworCQkJZ290byBvdXQ7CiAJCX0KIAl9CiAKLQljdCA9IHJlc29sdmVfbm9ybWFsX2N0KG5ldCwgc2tiLCBkYXRhb2ZmLCBwZiwgcHJvdG9udW0sCisJY3QgPSByZXNvbHZlX25vcm1hbF9jdChuZXQsIHRtcGwsIHNrYiwgZGF0YW9mZiwgcGYsIHByb3RvbnVtLAogCQkJICAgICAgIGwzcHJvdG8sIGw0cHJvdG8sICZzZXRfcmVwbHksICZjdGluZm8pOwogCWlmICghY3QpIHsKIAkJLyogTm90IHZhbGlkIHBhcnQgb2YgYSBjb25uZWN0aW9uICovCiAJCU5GX0NUX1NUQVRfSU5DX0FUT01JQyhuZXQsIGludmFsaWQpOwotCQlyZXR1cm4gTkZfQUNDRVBUOworCQlyZXQgPSBORl9BQ0NFUFQ7CisJCWdvdG8gb3V0OwogCX0KIAogCWlmIChJU19FUlIoY3QpKSB7CiAJCS8qIFRvbyBzdHJlc3NlZCB0byBkZWFsLiAqLwogCQlORl9DVF9TVEFUX0lOQ19BVE9NSUMobmV0LCBkcm9wKTsKLQkJcmV0dXJuIE5GX0RST1A7CisJCXJldCA9IE5GX0RST1A7CisJCWdvdG8gb3V0OwogCX0KIAogCU5GX0NUX0FTU0VSVChza2ItPm5mY3QpOwpAQCAtODIyLDExICs4NjksMTUgQEAKIAkJTkZfQ1RfU1RBVF9JTkNfQVRPTUlDKG5ldCwgaW52YWxpZCk7CiAJCWlmIChyZXQgPT0gLU5GX0RST1ApCiAJCQlORl9DVF9TVEFUX0lOQ19BVE9NSUMobmV0LCBkcm9wKTsKLQkJcmV0dXJuIC1yZXQ7CisJCXJldCA9IC1yZXQ7CisJCWdvdG8gb3V0OwogCX0KIAogCWlmIChzZXRfcmVwbHkgJiYgIXRlc3RfYW5kX3NldF9iaXQoSVBTX1NFRU5fUkVQTFlfQklULCAmY3QtPnN0YXR1cykpCi0JCW5mX2Nvbm50cmFja19ldmVudF9jYWNoZShJUENUX1NUQVRVUywgY3QpOworCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9SRVBMWSwgY3QpOworb3V0OgorCWlmICh0bXBsKQorCQluZl9jdF9wdXQodG1wbCk7CiAKIAlyZXR1cm4gcmV0OwogfQpAQCAtODY1LDcgKzkxNiw3IEBACiAJCXJldHVybjsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKGN0LCBHRlBfQVRPTUlDKTsKKwlfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKGN0LCBOVUxMLCBHRlBfQVRPTUlDKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2Nvbm50cmFja19hbHRlcl9yZXBseSk7CkBAIC05MzksNiArOTkwLDE0IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX25mX2N0X2tpbGxfYWNjdCk7CiAKKyNpZmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTCitzdGF0aWMgc3RydWN0IG5mX2N0X2V4dF90eXBlIG5mX2N0X3pvbmVfZXh0ZW5kIF9fcmVhZF9tb3N0bHkgPSB7CisJLmxlbgk9IHNpemVvZihzdHJ1Y3QgbmZfY29ubnRyYWNrX3pvbmUpLAorCS5hbGlnbgk9IF9fYWxpZ25vZl9fKHN0cnVjdCBuZl9jb25udHJhY2tfem9uZSksCisJLmlkCT0gTkZfQ1RfRVhUX1pPTkUsCit9OworI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LKSB8fCBkZWZpbmVkKENPTkZJR19ORl9DVF9ORVRMSU5LX01PRFVMRSkKIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaD4KQEAgLTExMjAsNiArMTE3OSw5IEBACiAKIAluZl9jb25udHJhY2tfaGVscGVyX2ZpbmkoKTsKIAluZl9jb25udHJhY2tfcHJvdG9fZmluaSgpOworI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfWk9ORVMKKwluZl9jdF9leHRlbmRfdW5yZWdpc3RlcigmbmZfY3Rfem9uZV9leHRlbmQpOworI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIG5mX2Nvbm50cmFja19jbGVhbnVwX25ldChzdHJ1Y3QgbmV0ICpuZXQpCkBAIC0xMTk1LDYgKzEyNTcsNyBAQAogCXVuc2lnbmVkIGludCBoYXNoc2l6ZSwgb2xkX3NpemU7CiAJc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhhc2gsICpvbGRfaGFzaDsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CisJc3RydWN0IG5mX2Nvbm4gKmN0OwogCiAJaWYgKGN1cnJlbnQtPm5zcHJveHktPm5ldF9ucyAhPSAmaW5pdF9uZXQpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKQEAgLTEyMjEsOCArMTI4NCwxMCBAQAogCQl3aGlsZSAoIWhsaXN0X251bGxzX2VtcHR5KCZpbml0X25ldC5jdC5oYXNoW2ldKSkgewogCQkJaCA9IGhsaXN0X251bGxzX2VudHJ5KGluaXRfbmV0LmN0Lmhhc2hbaV0uZmlyc3QsCiAJCQkJCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCwgaG5ub2RlKTsKKwkJCWN0ID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKIAkJCWhsaXN0X251bGxzX2RlbF9yY3UoJmgtPmhubm9kZSk7Ci0JCQlidWNrZXQgPSBfX2hhc2hfY29ubnRyYWNrKCZoLT50dXBsZSwgaGFzaHNpemUsCisJCQlidWNrZXQgPSBfX2hhc2hfY29ubnRyYWNrKCZoLT50dXBsZSwgbmZfY3Rfem9uZShjdCksCisJCQkJCQkgIGhhc2hzaXplLAogCQkJCQkJICBuZl9jb25udHJhY2tfaGFzaF9ybmQpOwogCQkJaGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KCZoLT5obm5vZGUsICZoYXNoW2J1Y2tldF0pOwogCQl9CkBAIC0xMjgwLDYgKzEzNDUsMTEgQEAKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfaGVscGVyOwogCisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19aT05FUworCXJldCA9IG5mX2N0X2V4dGVuZF9yZWdpc3RlcigmbmZfY3Rfem9uZV9leHRlbmQpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycl9leHRlbmQ7CisjZW5kaWYKIAkvKiBTZXQgdXAgZmFrZSBjb25udHJhY2s6IHRvIG5ldmVyIGJlIGRlbGV0ZWQsIG5vdCBpbiBhbnkgaGFzaGVzICovCiAjaWZkZWYgQ09ORklHX05FVF9OUwogCW5mX2Nvbm50cmFja191bnRyYWNrZWQuY3RfbmV0ID0gJmluaXRfbmV0OwpAQCAtMTI5MCw2ICsxMzYwLDEwIEBACiAKIAlyZXR1cm4gMDsKIAorI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfWk9ORVMKK2Vycl9leHRlbmQ6CisJbmZfY29ubnRyYWNrX2hlbHBlcl9maW5pKCk7CisjZW5kaWYKIGVycl9oZWxwZXI6CiAJbmZfY29ubnRyYWNrX3Byb3RvX2ZpbmkoKTsKIGVycl9wcm90bzoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKaW5kZXggMmYyNWZmNi4uYWNiMjljYyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0LmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3pvbmVzLmg+CiAKIHVuc2lnbmVkIGludCBuZl9jdF9leHBlY3RfaHNpemUgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5mX2N0X2V4cGVjdF9oc2l6ZSk7CkBAIC04NCw3ICs4NSw4IEBACiB9CiAKIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICoKLV9fbmZfY3RfZXhwZWN0X2ZpbmQoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK19fbmZfY3RfZXhwZWN0X2ZpbmQoc3RydWN0IG5ldCAqbmV0LCB1MTYgem9uZSwKKwkJICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICppOwogCXN0cnVjdCBobGlzdF9ub2RlICpuOwpAQCAtOTUsNyArOTcsOCBAQAogCiAJaCA9IG5mX2N0X2V4cGVjdF9kc3RfaGFzaCh0dXBsZSk7CiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGksIG4sICZuZXQtPmN0LmV4cGVjdF9oYXNoW2hdLCBobm9kZSkgewotCQlpZiAobmZfY3RfdHVwbGVfbWFza19jbXAodHVwbGUsICZpLT50dXBsZSwgJmktPm1hc2spKQorCQlpZiAobmZfY3RfdHVwbGVfbWFza19jbXAodHVwbGUsICZpLT50dXBsZSwgJmktPm1hc2spICYmCisJCSAgICBuZl9jdF96b25lKGktPm1hc3RlcikgPT0gem9uZSkKIAkJCXJldHVybiBpOwogCX0KIAlyZXR1cm4gTlVMTDsKQEAgLTEwNCwxMiArMTA3LDEzIEBACiAKIC8qIEp1c3QgZmluZCBhIGV4cGVjdGF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gYSB0dXBsZS4gKi8KIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICoKLW5mX2N0X2V4cGVjdF9maW5kX2dldChzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQorbmZfY3RfZXhwZWN0X2ZpbmRfZ2V0KHN0cnVjdCBuZXQgKm5ldCwgdTE2IHpvbmUsCisJCSAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICppOwogCiAJcmN1X3JlYWRfbG9jaygpOwotCWkgPSBfX25mX2N0X2V4cGVjdF9maW5kKG5ldCwgdHVwbGUpOworCWkgPSBfX25mX2N0X2V4cGVjdF9maW5kKG5ldCwgem9uZSwgdHVwbGUpOwogCWlmIChpICYmICFhdG9taWNfaW5jX25vdF96ZXJvKCZpLT51c2UpKQogCQlpID0gTlVMTDsKIAlyY3VfcmVhZF91bmxvY2soKTsKQEAgLTEyMSw3ICsxMjUsOCBAQAogLyogSWYgYW4gZXhwZWN0YXRpb24gZm9yIHRoaXMgY29ubmVjdGlvbiBpcyBmb3VuZCwgaXQgZ2V0cyBkZWxldGUgZnJvbQogICogZ2xvYmFsIGxpc3QgdGhlbiByZXR1cm5lZC4gKi8KIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICoKLW5mX2N0X2ZpbmRfZXhwZWN0YXRpb24oc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKK25mX2N0X2ZpbmRfZXhwZWN0YXRpb24oc3RydWN0IG5ldCAqbmV0LCB1MTYgem9uZSwKKwkJICAgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICppLCAqZXhwID0gTlVMTDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbjsKQEAgLTEzMyw3ICsxMzgsOCBAQAogCWggPSBuZl9jdF9leHBlY3RfZHN0X2hhc2godHVwbGUpOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGksIG4sICZuZXQtPmN0LmV4cGVjdF9oYXNoW2hdLCBobm9kZSkgewogCQlpZiAoIShpLT5mbGFncyAmIE5GX0NUX0VYUEVDVF9JTkFDVElWRSkgJiYKLQkJICAgIG5mX2N0X3R1cGxlX21hc2tfY21wKHR1cGxlLCAmaS0+dHVwbGUsICZpLT5tYXNrKSkgeworCQkgICAgbmZfY3RfdHVwbGVfbWFza19jbXAodHVwbGUsICZpLT50dXBsZSwgJmktPm1hc2spICYmCisJCSAgICBuZl9jdF96b25lKGktPm1hc3RlcikgPT0gem9uZSkgewogCQkJZXhwID0gaTsKIAkJCWJyZWFrOwogCQl9CkBAIC0yMDQsNyArMjEwLDggQEAKIHsKIAlyZXR1cm4gYS0+bWFzdGVyID09IGItPm1hc3RlciAmJiBhLT5jbGFzcyA9PSBiLT5jbGFzcyAmJgogCQluZl9jdF90dXBsZV9lcXVhbCgmYS0+dHVwbGUsICZiLT50dXBsZSkgJiYKLQkJbmZfY3RfdHVwbGVfbWFza19lcXVhbCgmYS0+bWFzaywgJmItPm1hc2spOworCQluZl9jdF90dXBsZV9tYXNrX2VxdWFsKCZhLT5tYXNrLCAmYi0+bWFzaykgJiYKKwkJbmZfY3Rfem9uZShhLT5tYXN0ZXIpID09IG5mX2N0X3pvbmUoYi0+bWFzdGVyKTsKIH0KIAogLyogR2VuZXJhbGx5IGEgYmFkIGlkZWEgdG8gY2FsbCB0aGlzOiBjb3VsZCBoYXZlIG1hdGNoZWQgYWxyZWFkeS4gKi8KQEAgLTIzMiw3ICsyMzksNiBAQAogCiAJbmV3LT5tYXN0ZXIgPSBtZTsKIAlhdG9taWNfc2V0KCZuZXctPnVzZSwgMSk7Ci0JSU5JVF9SQ1VfSEVBRCgmbmV3LT5yY3UpOwogCXJldHVybiBuZXc7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9leHBlY3RfYWxsb2MpOwpAQCAtNTAwLDYgKzUwNiw3IEBACiBzdGF0aWMgaW50IGV4cF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpCiB7CiAJc3RydWN0IG5mX2Nvbm50cmFja19leHBlY3QgKmV4cGVjdDsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyOwogCXN0cnVjdCBobGlzdF9ub2RlICpuID0gdjsKIAljaGFyICpkZWxpbSA9ICIiOwogCkBAIC01MjUsNiArNTMyLDE0IEBACiAJaWYgKGV4cGVjdC0+ZmxhZ3MgJiBORl9DVF9FWFBFQ1RfSU5BQ1RJVkUpCiAJCXNlcV9wcmludGYocywgIiVzSU5BQ1RJVkUiLCBkZWxpbSk7CiAKKwloZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UobmZjdF9oZWxwKGV4cGVjdC0+bWFzdGVyKS0+aGVscGVyKTsKKwlpZiAoaGVscGVyKSB7CisJCXNlcV9wcmludGYocywgIiVzJXMiLCBleHBlY3QtPmZsYWdzID8gIiAiIDogIiIsIGhlbHBlci0+bmFtZSk7CisJCWlmIChoZWxwZXItPmV4cGVjdF9wb2xpY3lbZXhwZWN0LT5jbGFzc10ubmFtZSkKKwkJCXNlcV9wcmludGYocywgIi8lcyIsCisJCQkJICAgaGVscGVyLT5leHBlY3RfcG9saWN5W2V4cGVjdC0+Y2xhc3NdLm5hbWUpOworCX0KKwogCXJldHVybiBzZXFfcHV0YyhzLCAnXG4nKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXh0ZW5kLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYwppbmRleCBmZWY5NWJlLi5mZGM4ZmI0IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuYwpAQCAtNTksNyArNTksNiBAQAogCWlmICghKmV4dCkKIAkJcmV0dXJuIE5VTEw7CiAKLQlJTklUX1JDVV9IRUFEKCYoKmV4dCktPnJjdSk7CiAJKCpleHQpLT5vZmZzZXRbaWRdID0gb2ZmOwogCSgqZXh0KS0+bGVuID0gbGVuOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oMzIzX21haW4uYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCmluZGV4IDY2MzY5NDkuLmExYzhkZDkgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjNfbWFpbi5jCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZWNhY2hlLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2gzMjMuaD4KIAogLyogUGFyYW1ldGVycyAqLwpAQCAtMTIxNiw3ICsxMjE3LDcgQEAKIAl0dXBsZS5kc3QudS50Y3AucG9ydCA9IHBvcnQ7CiAJdHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19UQ1A7CiAKLQlleHAgPSBfX25mX2N0X2V4cGVjdF9maW5kKG5ldCwgJnR1cGxlKTsKKwlleHAgPSBfX25mX2N0X2V4cGVjdF9maW5kKG5ldCwgbmZfY3Rfem9uZShjdCksICZ0dXBsZSk7CiAJaWYgKGV4cCAmJiBleHAtPm1hc3RlciA9PSBjdCkKIAkJcmV0dXJuIGV4cDsKIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKaW5kZXggNGIxYTU2Yi4uNDUwOWZhNiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmMKQEAgLTY1LDcgKzY1LDcgQEAKIH0KIAogc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKgotX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRfYnluYW1lKGNvbnN0IGNoYXIgKm5hbWUpCitfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZChjb25zdCBjaGFyICpuYW1lLCB1MTYgbDNudW0sIHU4IHByb3RvbnVtKQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoOwogCXN0cnVjdCBobGlzdF9ub2RlICpuOwpAQCAtNzMsMTMgKzczLDM0IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgbmZfY3RfaGVscGVyX2hzaXplOyBpKyspIHsKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGgsIG4sICZuZl9jdF9oZWxwZXJfaGFzaFtpXSwgaG5vZGUpIHsKLQkJCWlmICghc3RyY21wKGgtPm5hbWUsIG5hbWUpKQorCQkJaWYgKCFzdHJjbXAoaC0+bmFtZSwgbmFtZSkgJiYKKwkJCSAgICBoLT50dXBsZS5zcmMubDNudW0gPT0gbDNudW0gJiYKKwkJCSAgICBoLT50dXBsZS5kc3QucHJvdG9udW0gPT0gcHJvdG9udW0pCiAJCQkJcmV0dXJuIGg7CiAJCX0KIAl9CiAJcmV0dXJuIE5VTEw7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZF9ieW5hbWUpOworRVhQT1JUX1NZTUJPTF9HUEwoX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQpOworCitzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqCituZl9jb25udHJhY2tfaGVscGVyX3RyeV9tb2R1bGVfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsIHUxNiBsM251bSwgdTggcHJvdG9udW0pCit7CisJc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmg7CisKKwloID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQobmFtZSwgbDNudW0sIHByb3RvbnVtKTsKKyNpZmRlZiBDT05GSUdfTU9EVUxFUworCWlmIChoID09IE5VTEwpIHsKKwkJaWYgKHJlcXVlc3RfbW9kdWxlKCJuZmN0LWhlbHBlci0lcyIsIG5hbWUpID09IDApCisJCQloID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQobmFtZSwgbDNudW0sIHByb3RvbnVtKTsKKwl9CisjZW5kaWYKKwlpZiAoaCAhPSBOVUxMICYmICF0cnlfbW9kdWxlX2dldChoLT5tZSkpCisJCWggPSBOVUxMOworCisJcmV0dXJuIGg7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChuZl9jb25udHJhY2tfaGVscGVyX3RyeV9tb2R1bGVfZ2V0KTsKIAogc3RydWN0IG5mX2Nvbm5faGVscCAqbmZfY3RfaGVscGVyX2V4dF9hZGQoc3RydWN0IG5mX2Nvbm4gKmN0LCBnZnBfdCBnZnApCiB7CkBAIC05NCwxMyArMTE1LDIyIEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9jdF9oZWxwZXJfZXh0X2FkZCk7CiAKLWludCBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKHN0cnVjdCBuZl9jb25uICpjdCwgZ2ZwX3QgZmxhZ3MpCitpbnQgX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihzdHJ1Y3QgbmZfY29ubiAqY3QsIHN0cnVjdCBuZl9jb25uICp0bXBsLAorCQkJICAgICAgZ2ZwX3QgZmxhZ3MpCiB7CisJc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmhlbHBlciA9IE5VTEw7CisJc3RydWN0IG5mX2Nvbm5faGVscCAqaGVscDsKIAlpbnQgcmV0ID0gMDsKLQlzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciAqaGVscGVyOwotCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHAgPSBuZmN0X2hlbHAoY3QpOwogCi0JaGVscGVyID0gX19uZl9jdF9oZWxwZXJfZmluZCgmY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlKTsKKwlpZiAodG1wbCAhPSBOVUxMKSB7CisJCWhlbHAgPSBuZmN0X2hlbHAodG1wbCk7CisJCWlmIChoZWxwICE9IE5VTEwpCisJCQloZWxwZXIgPSBoZWxwLT5oZWxwZXI7CisJfQorCisJaGVscCA9IG5mY3RfaGVscChjdCk7CisJaWYgKGhlbHBlciA9PSBOVUxMKQorCQloZWxwZXIgPSBfX25mX2N0X2hlbHBlcl9maW5kKCZjdC0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUpOwogCWlmIChoZWxwZXIgPT0gTlVMTCkgewogCQlpZiAoaGVscCkKIAkJCXJjdV9hc3NpZ25fcG9pbnRlcihoZWxwLT5oZWxwZXIsIE5VTEwpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfbmV0bGluay5jCmluZGV4IDBmZmU2ODkuLjJiMmFmNjMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX25ldGxpbmsuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bmV0L3NvY2suaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFjay5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvcmUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHBlY3QuaD4KQEAgLTM4LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19sNHByb3RvLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19hY2N0Lmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaD4KICNpZmRlZiBDT05GSUdfTkZfTkFUX05FRURFRAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX25hdF9wcm90b2NvbC5oPgpAQCAtMzc4LDYgKzM4MCw5IEBACiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCW5sYV9uZXN0X2VuZChza2IsIG5lc3RfcGFybXMpOwogCisJaWYgKG5mX2N0X3pvbmUoY3QpKQorCQlOTEFfUFVUX0JFMTYoc2tiLCBDVEFfWk9ORSwgaHRvbnMobmZfY3Rfem9uZShjdCkpKTsKKwogCWlmIChjdG5ldGxpbmtfZHVtcF9zdGF0dXMoc2tiLCBjdCkgPCAwIHx8CiAJICAgIGN0bmV0bGlua19kdW1wX3RpbWVvdXQoc2tiLCBjdCkgPCAwIHx8CiAJICAgIGN0bmV0bGlua19kdW1wX2NvdW50ZXJzKHNrYiwgY3QsIElQX0NUX0RJUl9PUklHSU5BTCkgPCAwIHx8CkBAIC00NTYsNiArNDYxLDcgQEAKIHN0YXRpYyBpbnQKIGN0bmV0bGlua19jb25udHJhY2tfZXZlbnQodW5zaWduZWQgaW50IGV2ZW50cywgc3RydWN0IG5mX2N0X2V2ZW50ICppdGVtKQogeworCXN0cnVjdCBuZXQgKm5ldDsKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKIAlzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnOwogCXN0cnVjdCBubGF0dHIgKm5lc3RfcGFybXM7CkBAIC00ODIsNyArNDg4LDggQEAKIAl9IGVsc2UKIAkJcmV0dXJuIDA7CiAKLQlpZiAoIWl0ZW0tPnJlcG9ydCAmJiAhbmZuZXRsaW5rX2hhc19saXN0ZW5lcnMoZ3JvdXApKQorCW5ldCA9IG5mX2N0X25ldChjdCk7CisJaWYgKCFpdGVtLT5yZXBvcnQgJiYgIW5mbmV0bGlua19oYXNfbGlzdGVuZXJzKG5ldCwgZ3JvdXApKQogCQlyZXR1cm4gMDsKIAogCXNrYiA9IG5sbXNnX25ldyhjdG5ldGxpbmtfbmxtc2dfc2l6ZShjdCksIEdGUF9BVE9NSUMpOwpAQCAtNTE0LDYgKzUyMSw5IEBACiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCW5sYV9uZXN0X2VuZChza2IsIG5lc3RfcGFybXMpOwogCisJaWYgKG5mX2N0X3pvbmUoY3QpKQorCQlOTEFfUFVUX0JFMTYoc2tiLCBDVEFfWk9ORSwgaHRvbnMobmZfY3Rfem9uZShjdCkpKTsKKwogCWlmIChjdG5ldGxpbmtfZHVtcF9pZChza2IsIGN0KSA8IDApCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCkBAIC01NTksNyArNTY5LDggQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCW5sbXNnX2VuZChza2IsIG5saCk7Ci0JZXJyID0gbmZuZXRsaW5rX3NlbmQoc2tiLCBpdGVtLT5waWQsIGdyb3VwLCBpdGVtLT5yZXBvcnQsIEdGUF9BVE9NSUMpOworCWVyciA9IG5mbmV0bGlua19zZW5kKHNrYiwgbmV0LCBpdGVtLT5waWQsIGdyb3VwLCBpdGVtLT5yZXBvcnQsCisJCQkgICAgIEdGUF9BVE9NSUMpOwogCWlmIChlcnIgPT0gLUVOT0JVRlMgfHwgZXJyID09IC1FQUdBSU4pCiAJCXJldHVybiAtRU5PQlVGUzsKIApAQCAtNTcxLDcgKzU4Miw3IEBACiBubG1zZ19mYWlsdXJlOgogCWtmcmVlX3NrYihza2IpOwogZXJyb3V0OgotCW5mbmV0bGlua19zZXRfZXJyKDAsIGdyb3VwLCAtRU5PQlVGUyk7CisJbmZuZXRsaW5rX3NldF9lcnIobmV0LCAwLCBncm91cCwgLUVOT0JVRlMpOwogCXJldHVybiAwOwogfQogI2VuZGlmIC8qIENPTkZJR19ORl9DT05OVFJBQ0tfRVZFTlRTICovCkBAIC01ODYsNiArNTk3LDcgQEAKIHN0YXRpYyBpbnQKIGN0bmV0bGlua19kdW1wX3RhYmxlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYikKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAlzdHJ1Y3QgbmZfY29ubiAqY3QsICpsYXN0OwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqaDsKIAlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjsKQEAgLTU5NCw5ICs2MDYsOSBAQAogCiAJcmN1X3JlYWRfbG9jaygpOwogCWxhc3QgPSAoc3RydWN0IG5mX2Nvbm4gKiljYi0+YXJnc1sxXTsKLQlmb3IgKDsgY2ItPmFyZ3NbMF0gPCBpbml0X25ldC5jdC5odGFibGVfc2l6ZTsgY2ItPmFyZ3NbMF0rKykgeworCWZvciAoOyBjYi0+YXJnc1swXSA8IG5ldC0+Y3QuaHRhYmxlX3NpemU7IGNiLT5hcmdzWzBdKyspIHsKIHJlc3RhcnQ6Ci0JCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBuLCAmaW5pdF9uZXQuY3QuaGFzaFtjYi0+YXJnc1swXV0sCisJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShoLCBuLCAmbmV0LT5jdC5oYXNoW2NiLT5hcmdzWzBdXSwKIAkJCQkJIGhubm9kZSkgewogCQkJaWYgKE5GX0NUX0RJUkVDVElPTihoKSAhPSBJUF9DVF9ESVJfT1JJR0lOQUwpCiAJCQkJY29udGludWU7CkBAIC03MDMsNiArNzE1LDExIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHR1cGxlX25sYV9wb2xpY3lbQ1RBX1RVUExFX01BWCsxXSA9IHsKKwlbQ1RBX1RVUExFX0lQXQkJPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorCVtDVEFfVFVQTEVfUFJPVE9dCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKK307CisKIHN0YXRpYyBpbnQKIGN0bmV0bGlua19wYXJzZV90dXBsZShjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sCiAJCSAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLApAQCAtNzEzLDcgKzczMCw3IEBACiAKIAltZW1zZXQodHVwbGUsIDAsIHNpemVvZigqdHVwbGUpKTsKIAotCW5sYV9wYXJzZV9uZXN0ZWQodGIsIENUQV9UVVBMRV9NQVgsIGNkYVt0eXBlXSwgTlVMTCk7CisJbmxhX3BhcnNlX25lc3RlZCh0YiwgQ1RBX1RVUExFX01BWCwgY2RhW3R5cGVdLCB0dXBsZV9ubGFfcG9saWN5KTsKIAogCWlmICghdGJbQ1RBX1RVUExFX0lQXSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NDAsMTIgKzc1NywzMSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50CitjdG5ldGxpbmtfcGFyc2Vfem9uZShjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLCB1MTYgKnpvbmUpCit7CisJaWYgKGF0dHIpCisjaWZkZWYgQ09ORklHX05GX0NPTk5UUkFDS19aT05FUworCQkqem9uZSA9IG50b2hzKG5sYV9nZXRfYmUxNihhdHRyKSk7CisjZWxzZQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisjZW5kaWYKKwllbHNlCisJCSp6b25lID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgaGVscF9ubGFfcG9saWN5W0NUQV9IRUxQX01BWCsxXSA9IHsKKwlbQ1RBX0hFTFBfTkFNRV0JCT0geyAudHlwZSA9IE5MQV9OVUxfU1RSSU5HIH0sCit9OworCiBzdGF0aWMgaW5saW5lIGludAogY3RuZXRsaW5rX3BhcnNlX2hlbHAoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgY2hhciAqKmhlbHBlcl9uYW1lKQogewogCXN0cnVjdCBubGF0dHIgKnRiW0NUQV9IRUxQX01BWCsxXTsKIAotCW5sYV9wYXJzZV9uZXN0ZWQodGIsIENUQV9IRUxQX01BWCwgYXR0ciwgTlVMTCk7CisJbmxhX3BhcnNlX25lc3RlZCh0YiwgQ1RBX0hFTFBfTUFYLCBhdHRyLCBoZWxwX25sYV9wb2xpY3kpOwogCiAJaWYgKCF0YltDVEFfSEVMUF9OQU1FXSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC03NTYsMTEgKzc5MiwxOCBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgY3RfbmxhX3BvbGljeVtDVEFfTUFYKzFdID0geworCVtDVEFfVFVQTEVfT1JJR10JPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorCVtDVEFfVFVQTEVfUkVQTFldCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKIAlbQ1RBX1NUQVRVU10gCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisJW0NUQV9QUk9UT0lORk9dCQk9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCisJW0NUQV9IRUxQXQkJPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorCVtDVEFfTkFUX1NSQ10JCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKIAlbQ1RBX1RJTUVPVVRdIAkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAogCVtDVEFfTUFSS10JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKLQlbQ1RBX1VTRV0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKIAlbQ1RBX0lEXQkJPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtDVEFfTkFUX0RTVF0JCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKKwlbQ1RBX1RVUExFX01BU1RFUl0JPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorCVtDVEFfWk9ORV0JCT0geyAudHlwZSA9IE5MQV9VMTYgfSwKIH07CiAKIHN0YXRpYyBpbnQKQEAgLTc2OCwxMiArODExLDE4IEBACiAJCQljb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwKIAkJCWNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChjdG5sKTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlX2hhc2ggKmg7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTsKIAlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAJc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEobmxoKTsKIAl1X2ludDhfdCB1MyA9IG5mbXNnLT5uZmdlbl9mYW1pbHk7Ci0JaW50IGVyciA9IDA7CisJdTE2IHpvbmU7CisJaW50IGVycjsKKworCWVyciA9IGN0bmV0bGlua19wYXJzZV96b25lKGNkYVtDVEFfWk9ORV0sICZ6b25lKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKIAogCWlmIChjZGFbQ1RBX1RVUExFX09SSUddKQogCQllcnIgPSBjdG5ldGxpbmtfcGFyc2VfdHVwbGUoY2RhLCAmdHVwbGUsIENUQV9UVVBMRV9PUklHLCB1Myk7CkBAIC03ODEsNyArODMwLDcgQEAKIAkJZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlKGNkYSwgJnR1cGxlLCBDVEFfVFVQTEVfUkVQTFksIHUzKTsKIAllbHNlIHsKIAkJLyogRmx1c2ggdGhlIHdob2xlIHRhYmxlICovCi0JCW5mX2Nvbm50cmFja19mbHVzaF9yZXBvcnQoJmluaXRfbmV0LAorCQluZl9jb25udHJhY2tfZmx1c2hfcmVwb3J0KG5ldCwKIAkJCQkJIE5FVExJTktfQ0Ioc2tiKS5waWQsCiAJCQkJCSBubG1zZ19yZXBvcnQobmxoKSk7CiAJCXJldHVybiAwOwpAQCAtNzkwLDcgKzgzOSw3IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQloID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KCZpbml0X25ldCwgJnR1cGxlKTsKKwloID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KG5ldCwgem9uZSwgJnR1cGxlKTsKIAlpZiAoIWgpCiAJCXJldHVybiAtRU5PRU5UOwogCkBAIC04MjgsMTggKzg3NywyNCBAQAogCQkJY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsCiAJCQljb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gc29ja19uZXQoY3RubCk7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7CiAJc3RydWN0IG5mX2Nvbm4gKmN0OwogCXN0cnVjdCBza19idWZmICpza2IyID0gTlVMTDsKIAlzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gbmxtc2dfZGF0YShubGgpOwogCXVfaW50OF90IHUzID0gbmZtc2ctPm5mZ2VuX2ZhbWlseTsKLQlpbnQgZXJyID0gMDsKKwl1MTYgem9uZTsKKwlpbnQgZXJyOwogCiAJaWYgKG5saC0+bmxtc2dfZmxhZ3MgJiBOTE1fRl9EVU1QKQogCQlyZXR1cm4gbmV0bGlua19kdW1wX3N0YXJ0KGN0bmwsIHNrYiwgbmxoLCBjdG5ldGxpbmtfZHVtcF90YWJsZSwKIAkJCQkJICBjdG5ldGxpbmtfZG9uZSk7CiAKKwllcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX1pPTkVdLCAmem9uZSk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CisKIAlpZiAoY2RhW0NUQV9UVVBMRV9PUklHXSkKIAkJZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlKGNkYSwgJnR1cGxlLCBDVEFfVFVQTEVfT1JJRywgdTMpOwogCWVsc2UgaWYgKGNkYVtDVEFfVFVQTEVfUkVQTFldKQpAQCAtODUwLDcgKzkwNSw3IEBACiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKLQloID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KCZpbml0X25ldCwgJnR1cGxlKTsKKwloID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KG5ldCwgem9uZSwgJnR1cGxlKTsKIAlpZiAoIWgpCiAJCXJldHVybiAtRU5PRU5UOwogCkBAIC05OTQsNyArMTA0OSw4IEBACiAJCXJldHVybiAwOwogCX0KIAotCWhlbHBlciA9IF9fbmZfY29ubnRyYWNrX2hlbHBlcl9maW5kX2J5bmFtZShoZWxwbmFtZSk7CisJaGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoaGVscG5hbWUsIG5mX2N0X2wzbnVtKGN0KSwKKwkJCQkJICAgIG5mX2N0X3Byb3RvbnVtKGN0KSk7CiAJaWYgKGhlbHBlciA9PSBOVUxMKSB7CiAjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkJc3Bpbl91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKQEAgLTEwMDUsNyArMTA2MSw4IEBACiAJCX0KIAogCQlzcGluX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQkJaGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRfYnluYW1lKGhlbHBuYW1lKTsKKwkJaGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoaGVscG5hbWUsIG5mX2N0X2wzbnVtKGN0KSwKKwkJCQkJCSAgICBuZl9jdF9wcm90b251bShjdCkpOwogCQlpZiAoaGVscGVyKQogCQkJcmV0dXJuIC1FQUdBSU47CiAjZW5kaWYKQEAgLTEwMjAsOSArMTA3Nyw4IEBACiAJCS8qIG5lZWQgdG8gemVybyBkYXRhIG9mIG9sZCBoZWxwZXIgKi8KIAkJbWVtc2V0KCZoZWxwLT5oZWxwLCAwLCBzaXplb2YoaGVscC0+aGVscCkpOwogCX0gZWxzZSB7Ci0JCWhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7Ci0JCWlmIChoZWxwID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKKwkJLyogd2UgY2Fubm90IHNldCBhIGhlbHBlciBmb3IgYW4gZXhpc3RpbmcgY29ubnRyYWNrICovCisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CiAKIAlyY3VfYXNzaWduX3BvaW50ZXIoaGVscC0+aGVscGVyLCBoZWxwZXIpOwpAQCAtMTA0NCw2ICsxMTAwLDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBwcm90b2luZm9fcG9saWN5W0NUQV9QUk9UT0lORk9fTUFYKzFdID0geworCVtDVEFfUFJPVE9JTkZPX1RDUF0JPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorCVtDVEFfUFJPVE9JTkZPX0RDQ1BdCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKKwlbQ1RBX1BST1RPSU5GT19TQ1RQXQk9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCit9OworCiBzdGF0aWMgaW5saW5lIGludAogY3RuZXRsaW5rX2NoYW5nZV9wcm90b2luZm8oc3RydWN0IG5mX2Nvbm4gKmN0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10pCiB7CkBAIC0xMDUyLDcgKzExMTQsNyBAQAogCXN0cnVjdCBuZl9jb25udHJhY2tfbDRwcm90byAqbDRwcm90bzsKIAlpbnQgZXJyID0gMDsKIAotCW5sYV9wYXJzZV9uZXN0ZWQodGIsIENUQV9QUk9UT0lORk9fTUFYLCBhdHRyLCBOVUxMKTsKKwlubGFfcGFyc2VfbmVzdGVkKHRiLCBDVEFfUFJPVE9JTkZPX01BWCwgYXR0ciwgcHJvdG9pbmZvX3BvbGljeSk7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAJbDRwcm90byA9IF9fbmZfY3RfbDRwcm90b19maW5kKG5mX2N0X2wzbnVtKGN0KSwgbmZfY3RfcHJvdG9udW0oY3QpKTsKQEAgLTEwNjQsMTIgKzExMjYsMTggQEAKIH0KIAogI2lmZGVmIENPTkZJR19ORl9OQVRfTkVFREVECitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmF0X3NlcV9wb2xpY3lbQ1RBX05BVF9TRVFfTUFYKzFdID0geworCVtDVEFfTkFUX1NFUV9DT1JSRUNUSU9OX1BPU10JPSB7IC50eXBlID0gTkxBX1UzMiB9LAorCVtDVEFfTkFUX1NFUV9PRkZTRVRfQkVGT1JFXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisJW0NUQV9OQVRfU0VRX09GRlNFVF9BRlRFUl0JPSB7IC50eXBlID0gTkxBX1UzMiB9LAorfTsKKwogc3RhdGljIGlubGluZSBpbnQKIGNoYW5nZV9uYXRfc2VxX2FkaihzdHJ1Y3QgbmZfbmF0X3NlcSAqbmF0c2VxLCBjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgYXR0cikKIHsKIAlzdHJ1Y3QgbmxhdHRyICpjZGFbQ1RBX05BVF9TRVFfTUFYKzFdOwogCi0JbmxhX3BhcnNlX25lc3RlZChjZGEsIENUQV9OQVRfU0VRX01BWCwgYXR0ciwgTlVMTCk7CisJbmxhX3BhcnNlX25lc3RlZChjZGEsIENUQV9OQVRfU0VRX01BWCwgYXR0ciwgbmF0X3NlcV9wb2xpY3kpOwogCiAJaWYgKCFjZGFbQ1RBX05BVF9TRVFfQ09SUkVDVElPTl9QT1NdKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTExNzUsNyArMTI0Myw4IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbmZfY29ubiAqCi1jdG5ldGxpbmtfY3JlYXRlX2Nvbm50cmFjayhjb25zdCBzdHJ1Y3QgbmxhdHRyICogY29uc3QgY2RhW10sCitjdG5ldGxpbmtfY3JlYXRlX2Nvbm50cmFjayhzdHJ1Y3QgbmV0ICpuZXQsIHUxNiB6b25lLAorCQkJICAgY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLAogCQkJICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqb3R1cGxlLAogCQkJICAgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqcnR1cGxlLAogCQkJICAgdTggdTMpCkBAIC0xMTg0LDcgKzEyNTMsNyBAQAogCWludCBlcnIgPSAtRUlOVkFMOwogCXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7CiAKLQljdCA9IG5mX2Nvbm50cmFja19hbGxvYygmaW5pdF9uZXQsIG90dXBsZSwgcnR1cGxlLCBHRlBfQVRPTUlDKTsKKwljdCA9IG5mX2Nvbm50cmFja19hbGxvYyhuZXQsIHpvbmUsIG90dXBsZSwgcnR1cGxlLCBHRlBfQVRPTUlDKTsKIAlpZiAoSVNfRVJSKGN0KSkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAKQEAgLTExOTMsNyArMTI2Miw2IEBACiAJY3QtPnRpbWVvdXQuZXhwaXJlcyA9IG50b2hsKG5sYV9nZXRfYmUzMihjZGFbQ1RBX1RJTUVPVVRdKSk7CiAKIAljdC0+dGltZW91dC5leHBpcmVzID0gamlmZmllcyArIGN0LT50aW1lb3V0LmV4cGlyZXMgKiBIWjsKLQljdC0+c3RhdHVzIHw9IElQU19DT05GSVJNRUQ7CiAKIAlyY3VfcmVhZF9sb2NrKCk7CiAgCWlmIChjZGFbQ1RBX0hFTFBdKSB7CkBAIC0xMjAzLDcgKzEyNzEsOCBAQAogIAkJaWYgKGVyciA8IDApCiAJCQlnb3RvIGVycjI7CiAKLQkJaGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmRfYnluYW1lKGhlbHBuYW1lKTsKKwkJaGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoaGVscG5hbWUsIG5mX2N0X2wzbnVtKGN0KSwKKwkJCQkJCSAgICBuZl9jdF9wcm90b251bShjdCkpOwogCQlpZiAoaGVscGVyID09IE5VTEwpIHsKIAkJCXJjdV9yZWFkX3VubG9jaygpOwogI2lmZGVmIENPTkZJR19NT0RVTEVTCkBAIC0xMjEzLDcgKzEyODIsOSBAQAogCQkJfQogCiAJCQlyY3VfcmVhZF9sb2NrKCk7Ci0JCQloZWxwZXIgPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZF9ieW5hbWUoaGVscG5hbWUpOworCQkJaGVscGVyID0gX19uZl9jb25udHJhY2tfaGVscGVyX2ZpbmQoaGVscG5hbWUsCisJCQkJCQkJICAgIG5mX2N0X2wzbnVtKGN0KSwKKwkJCQkJCQkgICAgbmZfY3RfcHJvdG9udW0oY3QpKTsKIAkJCWlmIChoZWxwZXIpIHsKIAkJCQllcnIgPSAtRUFHQUlOOwogCQkJCWdvdG8gZXJyMjsKQEAgLTEyMzYsMTMgKzEzMDcsNyBAQAogCQl9CiAJfSBlbHNlIHsKIAkJLyogdHJ5IGFuIGltcGxpY2l0IGhlbHBlciBhc3NpZ25hdGlvbiAqLwotCQllcnIgPSBfX25mX2N0X3RyeV9hc3NpZ25faGVscGVyKGN0LCBHRlBfQVRPTUlDKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIGVycjI7Ci0JfQotCi0JaWYgKGNkYVtDVEFfU1RBVFVTXSkgewotCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX3N0YXR1cyhjdCwgY2RhKTsKKwkJZXJyID0gX19uZl9jdF90cnlfYXNzaWduX2hlbHBlcihjdCwgTlVMTCwgR0ZQX0FUT01JQyk7CiAJCWlmIChlcnIgPCAwKQogCQkJZ290byBlcnIyOwogCX0KQEAgLTEyNTMsNiArMTMxOCwxNyBAQAogCQkJZ290byBlcnIyOwogCX0KIAorCW5mX2N0X2FjY3RfZXh0X2FkZChjdCwgR0ZQX0FUT01JQyk7CisJbmZfY3RfZWNhY2hlX2V4dF9hZGQoY3QsIDAsIDAsIEdGUF9BVE9NSUMpOworCS8qIHdlIG11c3QgYWRkIGNvbm50cmFjayBleHRlbnNpb25zIGJlZm9yZSBjb25maXJtYXRpb24uICovCisJY3QtPnN0YXR1cyB8PSBJUFNfQ09ORklSTUVEOworCisJaWYgKGNkYVtDVEFfU1RBVFVTXSkgeworCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX3N0YXR1cyhjdCwgY2RhKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIGVycjI7CisJfQorCiAjaWZkZWYgQ09ORklHX05GX05BVF9ORUVERUQKIAlpZiAoY2RhW0NUQV9OQVRfU0VRX0FESl9PUklHXSB8fCBjZGFbQ1RBX05BVF9TRVFfQURKX1JFUExZXSkgewogCQllcnIgPSBjdG5ldGxpbmtfY2hhbmdlX25hdF9zZXFfYWRqKGN0LCBjZGEpOwpAQCAtMTI2Nyw5ICsxMzQzLDYgQEAKIAkJCWdvdG8gZXJyMjsKIAl9CiAKLQluZl9jdF9hY2N0X2V4dF9hZGQoY3QsIEdGUF9BVE9NSUMpOwotCW5mX2N0X2VjYWNoZV9leHRfYWRkKGN0LCBHRlBfQVRPTUlDKTsKLQogI2lmIGRlZmluZWQoQ09ORklHX05GX0NPTk5UUkFDS19NQVJLKQogCWlmIChjZGFbQ1RBX01BUktdKQogCQljdC0+bWFyayA9IG50b2hsKG5sYV9nZXRfYmUzMihjZGFbQ1RBX01BUktdKSk7CkBAIC0xMjg1LDcgKzEzNTgsNyBAQAogCQlpZiAoZXJyIDwgMCkKIAkJCWdvdG8gZXJyMjsKIAotCQltYXN0ZXJfaCA9IG5mX2Nvbm50cmFja19maW5kX2dldCgmaW5pdF9uZXQsICZtYXN0ZXIpOworCQltYXN0ZXJfaCA9IG5mX2Nvbm50cmFja19maW5kX2dldChuZXQsIHpvbmUsICZtYXN0ZXIpOwogCQlpZiAobWFzdGVyX2ggPT0gTlVMTCkgewogCQkJZXJyID0gLUVOT0VOVDsKIAkJCWdvdG8gZXJyMjsKQEAgLTEzMTMsMTEgKzEzODYsMTcgQEAKIAkJCWNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkJY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KGN0bmwpOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgb3R1cGxlLCBydHVwbGU7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoID0gTlVMTDsKIAlzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnID0gbmxtc2dfZGF0YShubGgpOwogCXVfaW50OF90IHUzID0gbmZtc2ctPm5mZ2VuX2ZhbWlseTsKLQlpbnQgZXJyID0gMDsKKwl1MTYgem9uZTsKKwlpbnQgZXJyOworCisJZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9aT05FXSwgJnpvbmUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKGNkYVtDVEFfVFVQTEVfT1JJR10pIHsKIAkJZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlKGNkYSwgJm90dXBsZSwgQ1RBX1RVUExFX09SSUcsIHUzKTsKQEAgLTEzMzMsOSArMTQxMiw5IEBACiAKIAlzcGluX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKIAlpZiAoY2RhW0NUQV9UVVBMRV9PUklHXSkKLQkJaCA9IF9fbmZfY29ubnRyYWNrX2ZpbmQoJmluaXRfbmV0LCAmb3R1cGxlKTsKKwkJaCA9IF9fbmZfY29ubnRyYWNrX2ZpbmQobmV0LCB6b25lLCAmb3R1cGxlKTsKIAllbHNlIGlmIChjZGFbQ1RBX1RVUExFX1JFUExZXSkKLQkJaCA9IF9fbmZfY29ubnRyYWNrX2ZpbmQoJmluaXRfbmV0LCAmcnR1cGxlKTsKKwkJaCA9IF9fbmZfY29ubnRyYWNrX2ZpbmQobmV0LCB6b25lLCAmcnR1cGxlKTsKIAogCWlmIChoID09IE5VTEwpIHsKIAkJZXJyID0gLUVOT0VOVDsKQEAgLTEzNDMsNyArMTQyMiw3IEBACiAJCQlzdHJ1Y3QgbmZfY29ubiAqY3Q7CiAJCQllbnVtIGlwX2Nvbm50cmFja19ldmVudHMgZXZlbnRzOwogCi0JCQljdCA9IGN0bmV0bGlua19jcmVhdGVfY29ubnRyYWNrKGNkYSwgJm90dXBsZSwKKwkJCWN0ID0gY3RuZXRsaW5rX2NyZWF0ZV9jb25udHJhY2sobmV0LCB6b25lLCBjZGEsICZvdHVwbGUsCiAJCQkJCQkJJnJ0dXBsZSwgdTMpOwogCQkJaWYgKElTX0VSUihjdCkpIHsKIAkJCQllcnIgPSBQVFJfRVJSKGN0KTsKQEAgLTEzNTcsNyArMTQzNiw4IEBACiAJCQllbHNlCiAJCQkJZXZlbnRzID0gSVBDVF9ORVc7CiAKLQkJCW5mX2Nvbm50cmFja19ldmVudG1hc2tfcmVwb3J0KCgxIDw8IElQQ1RfU1RBVFVTKSB8CisJCQluZl9jb25udHJhY2tfZXZlbnRtYXNrX3JlcG9ydCgoMSA8PCBJUENUX1JFUExZKSB8CisJCQkJCQkgICAgICAoMSA8PCBJUENUX0FTU1VSRUQpIHwKIAkJCQkJCSAgICAgICgxIDw8IElQQ1RfSEVMUEVSKSB8CiAJCQkJCQkgICAgICAoMSA8PCBJUENUX1BST1RPSU5GTykgfAogCQkJCQkJICAgICAgKDEgPDwgSVBDVF9OQVRTRVFBREopIHwKQEAgLTEzODIsNyArMTQ2Miw4IEBACiAJCWlmIChlcnIgPT0gMCkgewogCQkJbmZfY29ubnRyYWNrX2dldCgmY3QtPmN0X2dlbmVyYWwpOwogCQkJc3Bpbl91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQkJCW5mX2Nvbm50cmFja19ldmVudG1hc2tfcmVwb3J0KCgxIDw8IElQQ1RfU1RBVFVTKSB8CisJCQluZl9jb25udHJhY2tfZXZlbnRtYXNrX3JlcG9ydCgoMSA8PCBJUENUX1JFUExZKSB8CisJCQkJCQkgICAgICAoMSA8PCBJUENUX0FTU1VSRUQpIHwKIAkJCQkJCSAgICAgICgxIDw8IElQQ1RfSEVMUEVSKSB8CiAJCQkJCQkgICAgICAoMSA8PCBJUENUX1BST1RPSU5GTykgfAogCQkJCQkJICAgICAgKDEgPDwgSVBDVF9OQVRTRVFBREopIHwKQEAgLTE0NjksNiArMTU1MCw3IEBACiAJCQkgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHApCiB7CiAJc3RydWN0IG5mX2Nvbm4gKm1hc3RlciA9IGV4cC0+bWFzdGVyOworCXN0cnVjdCBuZl9jb25udHJhY2tfaGVscGVyICpoZWxwZXI7CiAJbG9uZyB0aW1lb3V0ID0gKGV4cC0+dGltZW91dC5leHBpcmVzIC0gamlmZmllcykgLyBIWjsKIAogCWlmICh0aW1lb3V0IDwgMCkKQEAgLTE0ODUsNiArMTU2Nyw5IEBACiAKIAlOTEFfUFVUX0JFMzIoc2tiLCBDVEFfRVhQRUNUX1RJTUVPVVQsIGh0b25sKHRpbWVvdXQpKTsKIAlOTEFfUFVUX0JFMzIoc2tiLCBDVEFfRVhQRUNUX0lELCBodG9ubCgodW5zaWduZWQgbG9uZylleHApKTsKKwloZWxwZXIgPSByY3VfZGVyZWZlcmVuY2UobmZjdF9oZWxwKG1hc3RlciktPmhlbHBlcik7CisJaWYgKGhlbHBlcikKKwkJTkxBX1BVVF9TVFJJTkcoc2tiLCBDVEFfRVhQRUNUX0hFTFBfTkFNRSwgaGVscGVyLT5uYW1lKTsKIAogCXJldHVybiAwOwogCkBAIC0xNTI2LDkgKzE2MTEsMTAgQEAKIHN0YXRpYyBpbnQKIGN0bmV0bGlua19leHBlY3RfZXZlbnQodW5zaWduZWQgaW50IGV2ZW50cywgc3RydWN0IG5mX2V4cF9ldmVudCAqaXRlbSkKIHsKKwlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwID0gaXRlbS0+ZXhwOworCXN0cnVjdCBuZXQgKm5ldCA9IG5mX2N0X2V4cF9uZXQoZXhwKTsKIAlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKIAlzdHJ1Y3QgbmZnZW5tc2cgKm5mbXNnOwotCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAgPSBpdGVtLT5leHA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAl1bnNpZ25lZCBpbnQgdHlwZTsKIAlpbnQgZmxhZ3MgPSAwOwpAQCAtMTU0MCw3ICsxNjI2LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIWl0ZW0tPnJlcG9ydCAmJgotCSAgICAhbmZuZXRsaW5rX2hhc19saXN0ZW5lcnMoTkZOTEdSUF9DT05OVFJBQ0tfRVhQX05FVykpCisJICAgICFuZm5ldGxpbmtfaGFzX2xpc3RlbmVycyhuZXQsIE5GTkxHUlBfQ09OTlRSQUNLX0VYUF9ORVcpKQogCQlyZXR1cm4gMDsKIAogCXNrYiA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9BVE9NSUMpOwpAQCAtMTU2Myw3ICsxNjQ5LDcgQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCW5sbXNnX2VuZChza2IsIG5saCk7Ci0JbmZuZXRsaW5rX3NlbmQoc2tiLCBpdGVtLT5waWQsIE5GTkxHUlBfQ09OTlRSQUNLX0VYUF9ORVcsCisJbmZuZXRsaW5rX3NlbmQoc2tiLCBuZXQsIGl0ZW0tPnBpZCwgTkZOTEdSUF9DT05OVFJBQ0tfRVhQX05FVywKIAkJICAgICAgIGl0ZW0tPnJlcG9ydCwgR0ZQX0FUT01JQyk7CiAJcmV0dXJuIDA7CiAKQEAgLTE1NzMsNyArMTY1OSw3IEBACiBubG1zZ19mYWlsdXJlOgogCWtmcmVlX3NrYihza2IpOwogZXJyb3V0OgotCW5mbmV0bGlua19zZXRfZXJyKDAsIDAsIC1FTk9CVUZTKTsKKwluZm5ldGxpbmtfc2V0X2VycihuZXQsIDAsIDAsIC1FTk9CVUZTKTsKIAlyZXR1cm4gMDsKIH0KICNlbmRpZgpAQCAtMTU4Nyw3ICsxNjczLDcgQEAKIHN0YXRpYyBpbnQKIGN0bmV0bGlua19leHBfZHVtcF90YWJsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gJmluaXRfbmV0OworCXN0cnVjdCBuZXQgKm5ldCA9IHNvY2tfbmV0KHNrYi0+c2spOwogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsICpsYXN0OwogCXN0cnVjdCBuZmdlbm1zZyAqbmZtc2cgPSBubG1zZ19kYXRhKGNiLT5ubGgpOwogCXN0cnVjdCBobGlzdF9ub2RlICpuOwpAQCAtMTYzMSw4ICsxNzE3LDEyIEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBleHBfbmxhX3BvbGljeVtDVEFfRVhQRUNUX01BWCsxXSA9IHsKKwlbQ1RBX0VYUEVDVF9NQVNURVJdCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKKwlbQ1RBX0VYUEVDVF9UVVBMRV0JPSB7IC50eXBlID0gTkxBX05FU1RFRCB9LAorCVtDVEFfRVhQRUNUX01BU0tdCT0geyAudHlwZSA9IE5MQV9ORVNURUQgfSwKIAlbQ1RBX0VYUEVDVF9USU1FT1VUXQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiAJW0NUQV9FWFBFQ1RfSURdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisJW0NUQV9FWFBFQ1RfSEVMUF9OQU1FXQk9IHsgLnR5cGUgPSBOTEFfTlVMX1NUUklORyB9LAogfTsKIAogc3RhdGljIGludApAQCAtMTY0MCwxMiArMTczMCwxNCBAQAogCQkgICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChjdG5sKTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlOwogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjI7CiAJc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEobmxoKTsKIAl1X2ludDhfdCB1MyA9IG5mbXNnLT5uZmdlbl9mYW1pbHk7Ci0JaW50IGVyciA9IDA7CisJdTE2IHpvbmU7CisJaW50IGVycjsKIAogCWlmIChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfRFVNUCkgewogCQlyZXR1cm4gbmV0bGlua19kdW1wX3N0YXJ0KGN0bmwsIHNrYiwgbmxoLApAQCAtMTY1Myw2ICsxNzQ1LDEwIEBACiAJCQkJCSAgY3RuZXRsaW5rX2V4cF9kb25lKTsKIAl9CiAKKwllcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX0VYUEVDVF9aT05FXSwgJnpvbmUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCiAJaWYgKGNkYVtDVEFfRVhQRUNUX01BU1RFUl0pCiAJCWVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZShjZGEsICZ0dXBsZSwgQ1RBX0VYUEVDVF9NQVNURVIsIHUzKTsKIAllbHNlCkBAIC0xNjYxLDcgKzE3NTcsNyBAQAogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gZXJyOwogCi0JZXhwID0gbmZfY3RfZXhwZWN0X2ZpbmRfZ2V0KCZpbml0X25ldCwgJnR1cGxlKTsKKwlleHAgPSBuZl9jdF9leHBlY3RfZmluZF9nZXQobmV0LCB6b25lLCAmdHVwbGUpOwogCWlmICghZXhwKQogCQlyZXR1cm4gLUVOT0VOVDsKIApAQCAtMTcwMSwyMyArMTc5NywyOCBAQAogCQkgICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChjdG5sKTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwOwogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGU7Ci0Jc3RydWN0IG5mX2Nvbm50cmFja19oZWxwZXIgKmg7CiAJc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEobmxoKTsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbiwgKm5leHQ7CiAJdV9pbnQ4X3QgdTMgPSBuZm1zZy0+bmZnZW5fZmFtaWx5OwogCXVuc2lnbmVkIGludCBpOworCXUxNiB6b25lOwogCWludCBlcnI7CiAKIAlpZiAoY2RhW0NUQV9FWFBFQ1RfVFVQTEVdKSB7CiAJCS8qIGRlbGV0ZSBhIHNpbmdsZSBleHBlY3QgYnkgdHVwbGUgKi8KKwkJZXJyID0gY3RuZXRsaW5rX3BhcnNlX3pvbmUoY2RhW0NUQV9FWFBFQ1RfWk9ORV0sICZ6b25lKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCiAJCWVyciA9IGN0bmV0bGlua19wYXJzZV90dXBsZShjZGEsICZ0dXBsZSwgQ1RBX0VYUEVDVF9UVVBMRSwgdTMpOwogCQlpZiAoZXJyIDwgMCkKIAkJCXJldHVybiBlcnI7CiAKIAkJLyogYnVtcCB1c2FnZSBjb3VudCB0byAyICovCi0JCWV4cCA9IG5mX2N0X2V4cGVjdF9maW5kX2dldCgmaW5pdF9uZXQsICZ0dXBsZSk7CisJCWV4cCA9IG5mX2N0X2V4cGVjdF9maW5kX2dldChuZXQsIHpvbmUsICZ0dXBsZSk7CiAJCWlmICghZXhwKQogCQkJcmV0dXJuIC1FTk9FTlQ7CiAKQEAgLTE3NDAsMTggKzE4NDEsMTMgQEAKIAogCQkvKiBkZWxldGUgYWxsIGV4cGVjdGF0aW9ucyBmb3IgdGhpcyBoZWxwZXIgKi8KIAkJc3Bpbl9sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7Ci0JCWggPSBfX25mX2Nvbm50cmFja19oZWxwZXJfZmluZF9ieW5hbWUobmFtZSk7Ci0JCWlmICghaCkgewotCQkJc3Bpbl91bmxvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQkJCXJldHVybiAtRU9QTk9UU1VQUDsKLQkJfQogCQlmb3IgKGkgPSAwOyBpIDwgbmZfY3RfZXhwZWN0X2hzaXplOyBpKyspIHsKIAkJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZXhwLCBuLCBuZXh0LAotCQkJCQkJICAmaW5pdF9uZXQuY3QuZXhwZWN0X2hhc2hbaV0sCisJCQkJCQkgICZuZXQtPmN0LmV4cGVjdF9oYXNoW2ldLAogCQkJCQkJICBobm9kZSkgewogCQkJCW1faGVscCA9IG5mY3RfaGVscChleHAtPm1hc3Rlcik7Ci0JCQkJaWYgKG1faGVscC0+aGVscGVyID09IGgKLQkJCQkgICAgJiYgZGVsX3RpbWVyKCZleHAtPnRpbWVvdXQpKSB7CisJCQkJaWYgKCFzdHJjbXAobV9oZWxwLT5oZWxwZXItPm5hbWUsIG5hbWUpICYmCisJCQkJICAgIGRlbF90aW1lcigmZXhwLT50aW1lb3V0KSkgewogCQkJCQluZl9jdF91bmxpbmtfZXhwZWN0KGV4cCk7CiAJCQkJCW5mX2N0X2V4cGVjdF9wdXQoZXhwKTsKIAkJCQl9CkBAIC0xNzYzLDcgKzE4NTksNyBAQAogCQlzcGluX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKIAkJZm9yIChpID0gMDsgaSA8IG5mX2N0X2V4cGVjdF9oc2l6ZTsgaSsrKSB7CiAJCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGV4cCwgbiwgbmV4dCwKLQkJCQkJCSAgJmluaXRfbmV0LmN0LmV4cGVjdF9oYXNoW2ldLAorCQkJCQkJICAmbmV0LT5jdC5leHBlY3RfaGFzaFtpXSwKIAkJCQkJCSAgaG5vZGUpIHsKIAkJCQlpZiAoZGVsX3RpbWVyKCZleHAtPnRpbWVvdXQpKSB7CiAJCQkJCW5mX2N0X3VubGlua19leHBlY3QoZXhwKTsKQEAgLTE3ODQsNyArMTg4MCw5IEBACiB9CiAKIHN0YXRpYyBpbnQKLWN0bmV0bGlua19jcmVhdGVfZXhwZWN0KGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSwgdV9pbnQ4X3QgdTMsCitjdG5ldGxpbmtfY3JlYXRlX2V4cGVjdChzdHJ1Y3QgbmV0ICpuZXQsIHUxNiB6b25lLAorCQkJY29uc3Qgc3RydWN0IG5sYXR0ciAqIGNvbnN0IGNkYVtdLAorCQkJdV9pbnQ4X3QgdTMsCiAJCQl1MzIgcGlkLCBpbnQgcmVwb3J0KQogewogCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdHVwbGUsIG1hc2ssIG1hc3Rlcl90dXBsZTsKQEAgLTE4MDYsNyArMTkwNCw3IEBACiAJCXJldHVybiBlcnI7CiAKIAkvKiBMb29rIGZvciBtYXN0ZXIgY29ubnRyYWNrIG9mIHRoaXMgZXhwZWN0YXRpb24gKi8KLQloID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KCZpbml0X25ldCwgJm1hc3Rlcl90dXBsZSk7CisJaCA9IG5mX2Nvbm50cmFja19maW5kX2dldChuZXQsIHpvbmUsICZtYXN0ZXJfdHVwbGUpOwogCWlmICghaCkKIAkJcmV0dXJuIC1FTk9FTlQ7CiAJY3QgPSBuZl9jdF90dXBsZWhhc2hfdG9fY3RyYWNrKGgpOwpAQCAtMTg0NiwyOSArMTk0NCwzNSBAQAogCQkgICAgIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLAogCQkgICAgIGNvbnN0IHN0cnVjdCBubGF0dHIgKiBjb25zdCBjZGFbXSkKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChjdG5sKTsKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX3R1cGxlIHR1cGxlOwogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CiAJc3RydWN0IG5mZ2VubXNnICpuZm1zZyA9IG5sbXNnX2RhdGEobmxoKTsKIAl1X2ludDhfdCB1MyA9IG5mbXNnLT5uZmdlbl9mYW1pbHk7Ci0JaW50IGVyciA9IDA7CisJdTE2IHpvbmU7CisJaW50IGVycjsKIAogCWlmICghY2RhW0NUQV9FWFBFQ1RfVFVQTEVdCiAJICAgIHx8ICFjZGFbQ1RBX0VYUEVDVF9NQVNLXQogCSAgICB8fCAhY2RhW0NUQV9FWFBFQ1RfTUFTVEVSXSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwllcnIgPSBjdG5ldGxpbmtfcGFyc2Vfem9uZShjZGFbQ1RBX0VYUEVDVF9aT05FXSwgJnpvbmUpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCiAJZXJyID0gY3RuZXRsaW5rX3BhcnNlX3R1cGxlKGNkYSwgJnR1cGxlLCBDVEFfRVhQRUNUX1RVUExFLCB1Myk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7CiAKIAlzcGluX2xvY2tfYmgoJm5mX2Nvbm50cmFja19sb2NrKTsKLQlleHAgPSBfX25mX2N0X2V4cGVjdF9maW5kKCZpbml0X25ldCwgJnR1cGxlKTsKKwlleHAgPSBfX25mX2N0X2V4cGVjdF9maW5kKG5ldCwgem9uZSwgJnR1cGxlKTsKIAogCWlmICghZXhwKSB7CiAJCXNwaW5fdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CiAJCWVyciA9IC1FTk9FTlQ7CiAJCWlmIChubGgtPm5sbXNnX2ZsYWdzICYgTkxNX0ZfQ1JFQVRFKSB7Ci0JCQllcnIgPSBjdG5ldGxpbmtfY3JlYXRlX2V4cGVjdChjZGEsCisJCQllcnIgPSBjdG5ldGxpbmtfY3JlYXRlX2V4cGVjdChuZXQsIHpvbmUsIGNkYSwKIAkJCQkJCSAgICAgIHUzLAogCQkJCQkJICAgICAgTkVUTElOS19DQihza2IpLnBpZCwKIAkJCQkJCSAgICAgIG5sbXNnX3JlcG9ydChubGgpKTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3BwdHAuYwppbmRleCAzODA3YWM3Li4wODg5NDQ4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcHRwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfem9uZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2dyZS5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHB0cC5oPgogCkBAIC0xMjMsNyArMTI0LDcgQEAKIAkJcHJfZGVidWcoInRyeWluZyB0byB1bmV4cGVjdCBvdGhlciBkaXI6ICIpOwogCQluZl9jdF9kdW1wX3R1cGxlKCZpbnZfdCk7CiAKLQkJZXhwX290aGVyID0gbmZfY3RfZXhwZWN0X2ZpbmRfZ2V0KG5ldCwgJmludl90KTsKKwkJZXhwX290aGVyID0gbmZfY3RfZXhwZWN0X2ZpbmRfZ2V0KG5ldCwgbmZfY3Rfem9uZShjdCksICZpbnZfdCk7CiAJCWlmIChleHBfb3RoZXIpIHsKIAkJCS8qIGRlbGV0ZSBvdGhlciBleHBlY3RhdGlvbi4gICovCiAJCQlwcl9kZWJ1ZygiZm91bmRcbiIpOwpAQCAtMTM2LDE3ICsxMzcsMTggQEAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAotc3RhdGljIGludCBkZXN0cm95X3NpYmxpbmdfb3JfZXhwKHN0cnVjdCBuZXQgKm5ldCwKK3N0YXRpYyBpbnQgZGVzdHJveV9zaWJsaW5nX29yX2V4cChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCQkgIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnQpCiB7CiAJY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZV9oYXNoICpoOwogCXN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHA7CiAJc3RydWN0IG5mX2Nvbm4gKnNpYmxpbmc7CisJdTE2IHpvbmUgPSBuZl9jdF96b25lKGN0KTsKIAogCXByX2RlYnVnKCJ0cnlpbmcgdG8gdGltZW91dCBjdCBvciBleHAgZm9yIHR1cGxlICIpOwogCW5mX2N0X2R1bXBfdHVwbGUodCk7CiAKLQloID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KG5ldCwgdCk7CisJaCA9IG5mX2Nvbm50cmFja19maW5kX2dldChuZXQsIHpvbmUsIHQpOwogCWlmIChoKSAgewogCQlzaWJsaW5nID0gbmZfY3RfdHVwbGVoYXNoX3RvX2N0cmFjayhoKTsKIAkJcHJfZGVidWcoInNldHRpbmcgdGltZW91dCBvZiBjb25udHJhY2sgJXAgdG8gMFxuIiwgc2libGluZyk7CkBAIC0xNTcsNyArMTU5LDcgQEAKIAkJbmZfY3RfcHV0KHNpYmxpbmcpOwogCQlyZXR1cm4gMTsKIAl9IGVsc2UgewotCQlleHAgPSBuZl9jdF9leHBlY3RfZmluZF9nZXQobmV0LCB0KTsKKwkJZXhwID0gbmZfY3RfZXhwZWN0X2ZpbmRfZ2V0KG5ldCwgem9uZSwgdCk7CiAJCWlmIChleHApIHsKIAkJCXByX2RlYnVnKCJ1bmV4cGVjdF9yZWxhdGVkIG9mIGV4cGVjdCAlcFxuIiwgZXhwKTsKIAkJCW5mX2N0X3VuZXhwZWN0X3JlbGF0ZWQoZXhwKTsKQEAgLTE4Miw3ICsxODQsNyBAQAogCXQuZHN0LnByb3RvbnVtID0gSVBQUk9UT19HUkU7CiAJdC5zcmMudS5ncmUua2V5ID0gaGVscC0+aGVscC5jdF9wcHRwX2luZm8ucG5zX2NhbGxfaWQ7CiAJdC5kc3QudS5ncmUua2V5ID0gaGVscC0+aGVscC5jdF9wcHRwX2luZm8ucGFjX2NhbGxfaWQ7Ci0JaWYgKCFkZXN0cm95X3NpYmxpbmdfb3JfZXhwKG5ldCwgJnQpKQorCWlmICghZGVzdHJveV9zaWJsaW5nX29yX2V4cChuZXQsIGN0LCAmdCkpCiAJCXByX2RlYnVnKCJmYWlsZWQgdG8gdGltZW91dCBvcmlnaW5hbCBwbnMtPnBhYyBjdC9leHBcbiIpOwogCiAJLyogdHJ5IHJlcGx5IChwYWMtPnBucykgdHVwbGUgKi8KQEAgLTE5MCw3ICsxOTIsNyBAQAogCXQuZHN0LnByb3RvbnVtID0gSVBQUk9UT19HUkU7CiAJdC5zcmMudS5ncmUua2V5ID0gaGVscC0+aGVscC5jdF9wcHRwX2luZm8ucGFjX2NhbGxfaWQ7CiAJdC5kc3QudS5ncmUua2V5ID0gaGVscC0+aGVscC5jdF9wcHRwX2luZm8ucG5zX2NhbGxfaWQ7Ci0JaWYgKCFkZXN0cm95X3NpYmxpbmdfb3JfZXhwKG5ldCwgJnQpKQorCWlmICghZGVzdHJveV9zaWJsaW5nX29yX2V4cChuZXQsIGN0LCAmdCkpCiAJCXByX2RlYnVnKCJmYWlsZWQgdG8gdGltZW91dCByZXBseSBwYWMtPnBucyBjdC9leHBcbiIpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19kY2NwLmMKaW5kZXggZGQzNzU1MC4uOWEyODE1NSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZGNjcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX2RjY3AuYwpAQCAtNTYxLDggKzU2MSw5IEBACiAJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KIAotc3RhdGljIGludCBkY2NwX2Vycm9yKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gKmN0aW5mbywKK3N0YXRpYyBpbnQgZGNjcF9lcnJvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uICp0bXBsLAorCQkgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKKwkJICAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLAogCQkgICAgICB1X2ludDhfdCBwZiwgdW5zaWduZWQgaW50IGhvb2tudW0pCiB7CiAJc3RydWN0IGRjY3BfaGRyIF9kaCwgKmRoOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fZ3JlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19ncmUuYwppbmRleCBjOTljZmJhLi5kODk5YjFhIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19ncmUuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19ncmUuYwpAQCAtMjQxLDcgKzI0MSw3IEBACiAJCQkJICAgY3QtPnByb3RvLmdyZS5zdHJlYW1fdGltZW91dCk7CiAJCS8qIEFsc28sIG1vcmUgbGlrZWx5IHRvIGJlIGltcG9ydGFudCwgYW5kIG5vdCBhIHByb2JlLiAqLwogCQlzZXRfYml0KElQU19BU1NVUkVEX0JJVCwgJmN0LT5zdGF0dXMpOwotCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9TVEFUVVMsIGN0KTsKKwkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfQVNTVVJFRCwgY3QpOwogCX0gZWxzZQogCQluZl9jdF9yZWZyZXNoX2FjY3QoY3QsIGN0aW5mbywgc2tiLAogCQkJCSAgIGN0LT5wcm90by5ncmUudGltZW91dCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b19zY3RwLmMKaW5kZXggZjlkOTMwZi4uYjY4ZmYxNSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fc2N0cC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwpAQCAtMzc3LDcgKzM3Nyw3IEBACiAJICAgIG5ld19zdGF0ZSA9PSBTQ1RQX0NPTk5UUkFDS19FU1RBQkxJU0hFRCkgewogCQlwcl9kZWJ1ZygiU2V0dGluZyBhc3N1cmVkIGJpdFxuIik7CiAJCXNldF9iaXQoSVBTX0FTU1VSRURfQklULCAmY3QtPnN0YXR1cyk7Ci0JCW5mX2Nvbm50cmFja19ldmVudF9jYWNoZShJUENUX1NUQVRVUywgY3QpOworCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9BU1NVUkVELCBjdCk7CiAJfQogCiAJcmV0dXJuIE5GX0FDQ0VQVDsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3RjcC5jIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKaW5kZXggM2M5NjQzNy4uOWRkOGNkNCAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdGNwLmMKQEAgLTc2MCw3ICs3NjAsNyBAQAogfTsKIAogLyogUHJvdGVjdCBjb25udHJhY2sgYWdhaXN0IGJyb2tlbiBwYWNrZXRzLiBDb2RlIHRha2VuIGZyb20gaXB0X3VuY2xlYW4uYy4gICovCi1zdGF0aWMgaW50IHRjcF9lcnJvcihzdHJ1Y3QgbmV0ICpuZXQsCitzdGF0aWMgaW50IHRjcF9lcnJvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uICp0bXBsLAogCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCiAJCSAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCSAgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyAqY3RpbmZvLApAQCAtMTA0NSw3ICsxMDQ1LDcgQEAKIAkJICAgYWZ0ZXIgU1lOX1JFQ1Ygb3IgYSB2YWxpZCBhbnN3ZXIgZm9yIGEgcGlja2VkIHVwCiAJCSAgIGNvbm5lY3Rpb24uICovCiAJCXNldF9iaXQoSVBTX0FTU1VSRURfQklULCAmY3QtPnN0YXR1cyk7Ci0JCW5mX2Nvbm50cmFja19ldmVudF9jYWNoZShJUENUX1NUQVRVUywgY3QpOworCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9BU1NVUkVELCBjdCk7CiAJfQogCW5mX2N0X3JlZnJlc2hfYWNjdChjdCwgY3RpbmZvLCBza2IsIHRpbWVvdXQpOwogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCmluZGV4IDVjNTUxOGIuLjgyODkwODggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcC5jCkBAIC03Nyw3ICs3Nyw3IEBACiAJCW5mX2N0X3JlZnJlc2hfYWNjdChjdCwgY3RpbmZvLCBza2IsIG5mX2N0X3VkcF90aW1lb3V0X3N0cmVhbSk7CiAJCS8qIEFsc28sIG1vcmUgbGlrZWx5IHRvIGJlIGltcG9ydGFudCwgYW5kIG5vdCBhIHByb2JlICovCiAJCWlmICghdGVzdF9hbmRfc2V0X2JpdChJUFNfQVNTVVJFRF9CSVQsICZjdC0+c3RhdHVzKSkKLQkJCW5mX2Nvbm50cmFja19ldmVudF9jYWNoZShJUENUX1NUQVRVUywgY3QpOworCQkJbmZfY29ubnRyYWNrX2V2ZW50X2NhY2hlKElQQ1RfQVNTVVJFRCwgY3QpOwogCX0gZWxzZQogCQluZl9jdF9yZWZyZXNoX2FjY3QoY3QsIGN0aW5mbywgc2tiLCBuZl9jdF91ZHBfdGltZW91dCk7CiAKQEAgLTkxLDggKzkxLDggQEAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludCB1ZHBfZXJyb3Ioc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKLQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCitzdGF0aWMgaW50IHVkcF9lcnJvcihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZl9jb25uICp0bXBsLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCiAJCSAgICAgdV9pbnQ4X3QgcGYsCiAJCSAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pCiB7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHBsaXRlLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19wcm90b191ZHBsaXRlLmMKaW5kZXggNDU4NjU1Yi4uMjYzYjVhNyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfcHJvdG9fdWRwbGl0ZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3Byb3RvX3VkcGxpdGUuYwpAQCAtNzUsNyArNzUsNyBAQAogCQkJCSAgIG5mX2N0X3VkcGxpdGVfdGltZW91dF9zdHJlYW0pOwogCQkvKiBBbHNvLCBtb3JlIGxpa2VseSB0byBiZSBpbXBvcnRhbnQsIGFuZCBub3QgYSBwcm9iZSAqLwogCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoSVBTX0FTU1VSRURfQklULCAmY3QtPnN0YXR1cykpCi0JCQluZl9jb25udHJhY2tfZXZlbnRfY2FjaGUoSVBDVF9TVEFUVVMsIGN0KTsKKwkJCW5mX2Nvbm50cmFja19ldmVudF9jYWNoZShJUENUX0FTU1VSRUQsIGN0KTsKIAl9IGVsc2UKIAkJbmZfY3RfcmVmcmVzaF9hY2N0KGN0LCBjdGluZm8sIHNrYiwgbmZfY3RfdWRwbGl0ZV90aW1lb3V0KTsKIApAQCAtODksNyArODksNyBAQAogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW50IHVkcGxpdGVfZXJyb3Ioc3RydWN0IG5ldCAqbmV0LAorc3RhdGljIGludCB1ZHBsaXRlX2Vycm9yKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mX2Nvbm4gKnRtcGwsCiAJCQkgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCSB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvICpjdGluZm8sCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jCmluZGV4IDAyMzk2NmIuLmM2Y2QxYjggMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NpcC5jCkBAIC0xNiwxMiArMTYsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9pbmV0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW4uaD4KICNpbmNsdWRlIDxsaW51eC91ZHAuaD4KKyNpbmNsdWRlIDxsaW51eC90Y3AuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KIAogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4cGVjdC5oPgogI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2hlbHBlci5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3pvbmVzLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zaXAuaD4KIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpAQCAtNTAsMTIgKzUyLDE2IEBACiBNT0RVTEVfUEFSTV9ERVNDKHNpcF9kaXJlY3RfbWVkaWEsICJFeHBlY3QgTWVkaWEgc3RyZWFtcyBiZXR3ZWVuIHNpZ25hbGxpbmcgIgogCQkJCSAgICJlbmRwb2ludHMgb25seSAoZGVmYXVsdCAxKSIpOwogCi11bnNpZ25lZCBpbnQgKCpuZl9uYXRfc2lwX2hvb2spKHN0cnVjdCBza19idWZmICpza2IsCit1bnNpZ25lZCBpbnQgKCpuZl9uYXRfc2lwX2hvb2spKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkJCWNvbnN0IGNoYXIgKipkcHRyLAogCQkJCXVuc2lnbmVkIGludCAqZGF0YWxlbikgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9zaXBfaG9vayk7CiAKK3ZvaWQgKCpuZl9uYXRfc2lwX3NlcV9hZGp1c3RfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgczE2IG9mZikgX19yZWFkX21vc3RseTsKK0VYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9zaXBfc2VxX2FkanVzdF9ob29rKTsKKwogdW5zaWduZWQgaW50ICgqbmZfbmF0X3NpcF9leHBlY3RfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkJICAgICAgIGNvbnN0IGNoYXIgKipkcHRyLAogCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCiAJCQkJICAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpleHAsCkBAIC02MywxNyArNjksMTcgQEAKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IG1hdGNobGVuKSBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3NpcF9leHBlY3RfaG9vayk7CiAKLXVuc2lnbmVkIGludCAoKm5mX25hdF9zZHBfYWRkcl9ob29rKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAordW5zaWduZWQgaW50ICgqbmZfbmF0X3NkcF9hZGRyX2hvb2spKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAogCQkJCSAgICAgY29uc3QgY2hhciAqKmRwdHIsCi0JCQkJICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJCQkgICAgIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKKwkJCQkgICAgIHVuc2lnbmVkIGludCBzZHBvZmYsCiAJCQkJICAgICBlbnVtIHNkcF9oZWFkZXJfdHlwZXMgdHlwZSwKIAkJCQkgICAgIGVudW0gc2RwX2hlYWRlcl90eXBlcyB0ZXJtLAogCQkJCSAgICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyKQogCQkJCSAgICAgX19yZWFkX21vc3RseTsKIEVYUE9SVF9TWU1CT0xfR1BMKG5mX25hdF9zZHBfYWRkcl9ob29rKTsKIAotdW5zaWduZWQgaW50ICgqbmZfbmF0X3NkcF9wb3J0X2hvb2spKHN0cnVjdCBza19idWZmICpza2IsCit1bnNpZ25lZCBpbnQgKCpuZl9uYXRfc2RwX3BvcnRfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkJICAgICBjb25zdCBjaGFyICoqZHB0ciwKIAkJCQkgICAgIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKIAkJCQkgICAgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwKQEAgLTgyLDE0ICs4OCwxNSBAQAogRVhQT1JUX1NZTUJPTF9HUEwobmZfbmF0X3NkcF9wb3J0X2hvb2spOwogCiB1bnNpZ25lZCBpbnQgKCpuZl9uYXRfc2RwX3Nlc3Npb25faG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJY29uc3QgY2hhciAqKmRwdHIsCiAJCQkJCXVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkJCQljb25zdCBjaGFyICoqZHB0ciwKIAkJCQkJdW5zaWduZWQgaW50ICpkYXRhbGVuLAorCQkJCQl1bnNpZ25lZCBpbnQgc2Rwb2ZmLAogCQkJCQljb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpCiAJCQkJCV9fcmVhZF9tb3N0bHk7CiBFWFBPUlRfU1lNQk9MX0dQTChuZl9uYXRfc2RwX3Nlc3Npb25faG9vayk7CiAKLXVuc2lnbmVkIGludCAoKm5mX25hdF9zZHBfbWVkaWFfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3Vuc2lnbmVkIGludCAoKm5mX25hdF9zZHBfbWVkaWFfaG9vaykoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkJICAgICAgY29uc3QgY2hhciAqKmRwdHIsCiAJCQkJICAgICAgdW5zaWduZWQgaW50ICpkYXRhbGVuLAogCQkJCSAgICAgIHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0ICpydHBfZXhwLApAQCAtMjM2LDEyICsyNDMsMTMgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBGaW5kIFNJUCBVUkkgKi8KLQlsaW1pdCAtPSBzdHJsZW4oInNpcDoiKTsKLQlmb3IgKDsgZHB0ciA8IGxpbWl0OyBkcHRyKyspIHsKKwlmb3IgKDsgZHB0ciA8IGxpbWl0IC0gc3RybGVuKCJzaXA6Iik7IGRwdHIrKykgewogCQlpZiAoKmRwdHIgPT0gJ1xyJyB8fCAqZHB0ciA9PSAnXG4nKQogCQkJcmV0dXJuIC0xOwotCQlpZiAoc3RybmljbXAoZHB0ciwgInNpcDoiLCBzdHJsZW4oInNpcDoiKSkgPT0gMCkKKwkJaWYgKHN0cm5pY21wKGRwdHIsICJzaXA6Iiwgc3RybGVuKCJzaXA6IikpID09IDApIHsKKwkJCWRwdHIgKz0gc3RybGVuKCJzaXA6Iik7CiAJCQlicmVhazsKKwkJfQogCX0KIAlpZiAoIXNrcF9lcGFkZHJfbGVuKGN0LCBkcHRyLCBsaW1pdCwgJnNoaWZ0KSkKIAkJcmV0dXJuIDA7CkBAIC0yNzYsNyArMjg0LDcgQEAKICAqIHRhYnMsIHNwYWNlcyBhbmQgY29udGludWF0aW9uIGxpbmVzLCB3aGljaCBhcmUgdHJlYXRlZCBhcyBhIHNpbmdsZSB3aGl0ZXNwYWNlCiAgKiBjaGFyYWN0ZXIuCiAgKgotICogU29tZSBoZWFkZXJzIG1heSBhcHBlYXIgbXVsdGlwbGUgdGltZXMuIEEgY29tbWEgc2VwZXJhdGVkIGxpc3Qgb2YgdmFsdWVzIGlzCisgKiBTb21lIGhlYWRlcnMgbWF5IGFwcGVhciBtdWx0aXBsZSB0aW1lcy4gQSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB2YWx1ZXMgaXMKICAqIGVxdWl2YWxlbnQgdG8gbXVsdGlwbGUgaGVhZGVycy4KICAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCBzaXBfaGVhZGVyIGN0X3NpcF9oZHJzW10gPSB7CkBAIC0yODQsNyArMjkyLDggQEAKIAlbU0lQX0hEUl9GUk9NXQkJCT0gU0lQX0hEUigiRnJvbSIsICJmIiwgInNpcDoiLCBza3BfZXBhZGRyX2xlbiksCiAJW1NJUF9IRFJfVE9dCQkJPSBTSVBfSERSKCJUbyIsICJ0IiwgInNpcDoiLCBza3BfZXBhZGRyX2xlbiksCiAJW1NJUF9IRFJfQ09OVEFDVF0JCT0gU0lQX0hEUigiQ29udGFjdCIsICJtIiwgInNpcDoiLCBza3BfZXBhZGRyX2xlbiksCi0JW1NJUF9IRFJfVklBXQkJCT0gU0lQX0hEUigiVmlhIiwgInYiLCAiVURQICIsIGVwYWRkcl9sZW4pLAorCVtTSVBfSERSX1ZJQV9VRFBdCQk9IFNJUF9IRFIoIlZpYSIsICJ2IiwgIlVEUCAiLCBlcGFkZHJfbGVuKSwKKwlbU0lQX0hEUl9WSUFfVENQXQkJPSBTSVBfSERSKCJWaWEiLCAidiIsICJUQ1AgIiwgZXBhZGRyX2xlbiksCiAJW1NJUF9IRFJfRVhQSVJFU10JCT0gU0lQX0hEUigiRXhwaXJlcyIsIE5VTEwsIE5VTEwsIGRpZ2l0c19sZW4pLAogCVtTSVBfSERSX0NPTlRFTlRfTEVOR1RIXQk9IFNJUF9IRFIoIkNvbnRlbnQtTGVuZ3RoIiwgImwiLCBOVUxMLCBkaWdpdHNfbGVuKSwKIH07CkBAIC00MTIsNyArNDIxLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGN0X3NpcF9nZXRfaGVhZGVyKTsKIAotLyogR2V0IG5leHQgaGVhZGVyIGZpZWxkIGluIGEgbGlzdCBvZiBjb21tYSBzZXBlcmF0ZWQgdmFsdWVzICovCisvKiBHZXQgbmV4dCBoZWFkZXIgZmllbGQgaW4gYSBsaXN0IG9mIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMgKi8KIHN0YXRpYyBpbnQgY3Rfc2lwX25leHRfaGVhZGVyKGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwgY29uc3QgY2hhciAqZHB0ciwKIAkJCSAgICAgIHVuc2lnbmVkIGludCBkYXRhb2ZmLCB1bnNpZ25lZCBpbnQgZGF0YWxlbiwKIAkJCSAgICAgIGVudW0gc2lwX2hlYWRlcl90eXBlcyB0eXBlLApAQCAtNTE2LDYgKzUyNSwzMyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3Rfc2lwX3BhcnNlX2hlYWRlcl91cmkpOwogCitzdGF0aWMgaW50IGN0X3NpcF9wYXJzZV9wYXJhbShjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsCisJCQkgICAgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdW5zaWduZWQgaW50IGRhdGFsZW4sCisJCQkgICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgdW5zaWduZWQgaW50ICptYXRjaG9mZiwgdW5zaWduZWQgaW50ICptYXRjaGxlbikKK3sKKwljb25zdCBjaGFyICpsaW1pdCA9IGRwdHIgKyBkYXRhbGVuOworCWNvbnN0IGNoYXIgKnN0YXJ0OworCWNvbnN0IGNoYXIgKmVuZDsKKworCWxpbWl0ID0gY3Rfc2lwX2hlYWRlcl9zZWFyY2goZHB0ciArIGRhdGFvZmYsIGxpbWl0LCAiLCIsIHN0cmxlbigiLCIpKTsKKwlpZiAoIWxpbWl0KQorCQlsaW1pdCA9IGRwdHIgKyBkYXRhbGVuOworCisJc3RhcnQgPSBjdF9zaXBfaGVhZGVyX3NlYXJjaChkcHRyICsgZGF0YW9mZiwgbGltaXQsIG5hbWUsIHN0cmxlbihuYW1lKSk7CisJaWYgKCFzdGFydCkKKwkJcmV0dXJuIDA7CisJc3RhcnQgKz0gc3RybGVuKG5hbWUpOworCisJZW5kID0gY3Rfc2lwX2hlYWRlcl9zZWFyY2goc3RhcnQsIGxpbWl0LCAiOyIsIHN0cmxlbigiOyIpKTsKKwlpZiAoIWVuZCkKKwkJZW5kID0gbGltaXQ7CisKKwkqbWF0Y2hvZmYgPSBzdGFydCAtIGRwdHI7CisJKm1hdGNobGVuID0gZW5kIC0gc3RhcnQ7CisJcmV0dXJuIDE7Cit9CisKIC8qIFBhcnNlIGFkZHJlc3MgZnJvbSBoZWFkZXIgcGFyYW1ldGVyIGFuZCByZXR1cm4gYWRkcmVzcywgb2Zmc2V0IGFuZCBsZW5ndGggKi8KIGludCBjdF9zaXBfcGFyc2VfYWRkcmVzc19wYXJhbShjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsCiAJCQkgICAgICAgdW5zaWduZWQgaW50IGRhdGFvZmYsIHVuc2lnbmVkIGludCBkYXRhbGVuLApAQCAtNTc0LDYgKzYxMCwyOSBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoY3Rfc2lwX3BhcnNlX251bWVyaWNhbF9wYXJhbSk7CiAKK3N0YXRpYyBpbnQgY3Rfc2lwX3BhcnNlX3RyYW5zcG9ydChzdHJ1Y3QgbmZfY29ubiAqY3QsIGNvbnN0IGNoYXIgKmRwdHIsCisJCQkJICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgdW5zaWduZWQgaW50IGRhdGFsZW4sCisJCQkJICB1OCAqcHJvdG8pCit7CisJdW5zaWduZWQgaW50IG1hdGNob2ZmLCBtYXRjaGxlbjsKKworCWlmIChjdF9zaXBfcGFyc2VfcGFyYW0oY3QsIGRwdHIsIGRhdGFvZmYsIGRhdGFsZW4sICJ0cmFuc3BvcnQ9IiwKKwkJCSAgICAgICAmbWF0Y2hvZmYsICZtYXRjaGxlbikpIHsKKwkJaWYgKCFzdHJuaWNtcChkcHRyICsgbWF0Y2hvZmYsICJUQ1AiLCBzdHJsZW4oIlRDUCIpKSkKKwkJCSpwcm90byA9IElQUFJPVE9fVENQOworCQllbHNlIGlmICghc3RybmljbXAoZHB0ciArIG1hdGNob2ZmLCAiVURQIiwgc3RybGVuKCJVRFAiKSkpCisJCQkqcHJvdG8gPSBJUFBST1RPX1VEUDsKKwkJZWxzZQorCQkJcmV0dXJuIDA7CisKKwkJaWYgKCpwcm90byAhPSBuZl9jdF9wcm90b251bShjdCkpCisJCQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJKnByb3RvID0gbmZfY3RfcHJvdG9udW0oY3QpOworCisJcmV0dXJuIDE7Cit9CisKIC8qIFNEUCBoZWFkZXIgcGFyc2luZzogYSBTRFAgc2Vzc2lvbiBkZXNjcmlwdGlvbiBjb250YWlucyBhbiBvcmRlcmVkIHNldCBvZgogICogaGVhZGVycywgc3RhcnRpbmcgd2l0aCBhIHNlY3Rpb24gY29udGFpbmluZyBnZW5lcmFsIHNlc3Npb24gcGFyYW1ldGVycywKICAqIG9wdGlvbmFsbHkgZm9sbG93ZWQgYnkgbXVsdGlwbGUgbWVkaWEgZGVzY3JpcHRpb25zLgpAQCAtNjgyLDcgKzc0MSw3IEBACiAKIHN0YXRpYyBpbnQgcmVmcmVzaF9zaWduYWxsaW5nX2V4cGVjdGF0aW9uKHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCQkJICB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIsCi0JCQkJCSAgX19iZTE2IHBvcnQsCisJCQkJCSAgdTggcHJvdG8sIF9fYmUxNiBwb3J0LAogCQkJCQkgIHVuc2lnbmVkIGludCBleHBpcmVzKQogewogCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHAgPSBuZmN0X2hlbHAoY3QpOwpAQCAtNjk0LDYgKzc1Myw3IEBACiAJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShleHAsIG4sIG5leHQsICZoZWxwLT5leHBlY3RhdGlvbnMsIGxub2RlKSB7CiAJCWlmIChleHAtPmNsYXNzICE9IFNJUF9FWFBFQ1RfU0lHTkFMTElORyB8fAogCQkgICAgIW5mX2luZXRfYWRkcl9jbXAoJmV4cC0+dHVwbGUuZHN0LnUzLCBhZGRyKSB8fAorCQkgICAgZXhwLT50dXBsZS5kc3QucHJvdG9udW0gIT0gcHJvdG8gfHwKIAkJICAgIGV4cC0+dHVwbGUuZHN0LnUudWRwLnBvcnQgIT0gcG9ydCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoIWRlbF90aW1lcigmZXhwLT50aW1lb3V0KSkKQEAgLTcyOCw3ICs3ODgsNyBAQAogCXNwaW5fdW5sb2NrX2JoKCZuZl9jb25udHJhY2tfbG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgc2V0X2V4cGVjdGVkX3J0cF9ydGNwKHN0cnVjdCBza19idWZmICpza2IsCitzdGF0aWMgaW50IHNldF9leHBlY3RlZF9ydHBfcnRjcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJCQkgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKIAkJCQkgdW5pb24gbmZfaW5ldF9hZGRyICpkYWRkciwgX19iZTE2IHBvcnQsCiAJCQkJIGVudW0gc2lwX2V4cGVjdGF0aW9uX2NsYXNzZXMgY2xhc3MsCkBAIC03NzcsNyArODM3LDcgQEAKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlkbyB7Ci0JCWV4cCA9IF9fbmZfY3RfZXhwZWN0X2ZpbmQobmV0LCAmdHVwbGUpOworCQlleHAgPSBfX25mX2N0X2V4cGVjdF9maW5kKG5ldCwgbmZfY3Rfem9uZShjdCksICZ0dXBsZSk7CiAKIAkJaWYgKCFleHAgfHwgZXhwLT5tYXN0ZXIgPT0gY3QgfHwKIAkJICAgIG5mY3RfaGVscChleHAtPm1hc3RlciktPmhlbHBlciAhPSBuZmN0X2hlbHAoY3QpLT5oZWxwZXIgfHwKQEAgLTgwNSw3ICs4NjUsNyBAQAogCWlmIChkaXJlY3RfcnRwKSB7CiAJCW5mX25hdF9zZHBfcG9ydCA9IHJjdV9kZXJlZmVyZW5jZShuZl9uYXRfc2RwX3BvcnRfaG9vayk7CiAJCWlmIChuZl9uYXRfc2RwX3BvcnQgJiYKLQkJICAgICFuZl9uYXRfc2RwX3BvcnQoc2tiLCBkcHRyLCBkYXRhbGVuLAorCQkgICAgIW5mX25hdF9zZHBfcG9ydChza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4sCiAJCQkJICAgICBtZWRpYW9mZiwgbWVkaWFsZW4sIG50b2hzKHJ0cF9wb3J0KSkpCiAJCQlnb3RvIGVycjE7CiAJfQpAQCAtODI3LDcgKzg4Nyw4IEBACiAKIAluZl9uYXRfc2RwX21lZGlhID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF9zZHBfbWVkaWFfaG9vayk7CiAJaWYgKG5mX25hdF9zZHBfbWVkaWEgJiYgY3QtPnN0YXR1cyAmIElQU19OQVRfTUFTSyAmJiAhZGlyZWN0X3J0cCkKLQkJcmV0ID0gbmZfbmF0X3NkcF9tZWRpYShza2IsIGRwdHIsIGRhdGFsZW4sIHJ0cF9leHAsIHJ0Y3BfZXhwLAorCQlyZXQgPSBuZl9uYXRfc2RwX21lZGlhKHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbiwKKwkJCQkgICAgICAgcnRwX2V4cCwgcnRjcF9leHAsCiAJCQkJICAgICAgIG1lZGlhb2ZmLCBtZWRpYWxlbiwgZGFkZHIpOwogCWVsc2UgewogCQlpZiAobmZfY3RfZXhwZWN0X3JlbGF0ZWQocnRwX2V4cCkgPT0gMCkgewpAQCAtODQ3LDYgKzkwOCw3IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkcF9tZWRpYV90eXBlIHNkcF9tZWRpYV90eXBlc1tdID0gewogCVNEUF9NRURJQV9UWVBFKCJhdWRpbyAiLCBTSVBfRVhQRUNUX0FVRElPKSwKIAlTRFBfTUVESUFfVFlQRSgidmlkZW8gIiwgU0lQX0VYUEVDVF9WSURFTyksCisJU0RQX01FRElBX1RZUEUoImltYWdlICIsIFNJUF9FWFBFQ1RfSU1BR0UpLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBzZHBfbWVkaWFfdHlwZSAqc2RwX21lZGlhX3R5cGUoY29uc3QgY2hhciAqZHB0ciwKQEAgLTg2NiwxMyArOTI4LDEyIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY2Vzc19zZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3N0YXRpYyBpbnQgcHJvY2Vzc19zZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCSAgICAgICBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAogCQkgICAgICAgdW5zaWduZWQgaW50IGNzZXEpCiB7CiAJZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm87CiAJc3RydWN0IG5mX2Nvbm4gKmN0ID0gbmZfY3RfZ2V0KHNrYiwgJmN0aW5mbyk7Ci0Jc3RydWN0IG5mX2Nvbm5faGVscCAqaGVscCA9IG5mY3RfaGVscChjdCk7CiAJdW5zaWduZWQgaW50IG1hdGNob2ZmLCBtYXRjaGxlbjsKIAl1bnNpZ25lZCBpbnQgbWVkaWFvZmYsIG1lZGlhbGVuOwogCXVuc2lnbmVkIGludCBzZHBvZmY7CkBAIC05NDEsNyArMTAwMiw3IEBACiAJCWVsc2UKIAkJCXJldHVybiBORl9EUk9QOwogCi0JCXJldCA9IHNldF9leHBlY3RlZF9ydHBfcnRjcChza2IsIGRwdHIsIGRhdGFsZW4sCisJCXJldCA9IHNldF9leHBlY3RlZF9ydHBfcnRjcChza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4sCiAJCQkJCSAgICAmcnRwX2FkZHIsIGh0b25zKHBvcnQpLCB0LT5jbGFzcywKIAkJCQkJICAgIG1lZGlhb2ZmLCBtZWRpYWxlbik7CiAJCWlmIChyZXQgIT0gTkZfQUNDRVBUKQpAQCAtOTQ5LDggKzEwMTAsOSBAQAogCiAJCS8qIFVwZGF0ZSBtZWRpYSBjb25uZWN0aW9uIGFkZHJlc3MgaWYgcHJlc2VudCAqLwogCQlpZiAobWFkZHJfbGVuICYmIG5mX25hdF9zZHBfYWRkciAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKSB7Ci0JCQlyZXQgPSBuZl9uYXRfc2RwX2FkZHIoc2tiLCBkcHRyLCBtZWRpYW9mZiwgZGF0YWxlbiwKLQkJCQkJICAgICAgY19oZHIsIFNEUF9IRFJfTUVESUEsICZydHBfYWRkcik7CisJCQlyZXQgPSBuZl9uYXRfc2RwX2FkZHIoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLAorCQkJCQkgICAgICBtZWRpYW9mZiwgY19oZHIsIFNEUF9IRFJfTUVESUEsCisJCQkJCSAgICAgICZydHBfYWRkcik7CiAJCQlpZiAocmV0ICE9IE5GX0FDQ0VQVCkKIAkJCQlyZXR1cm4gcmV0OwogCQl9CkBAIC05NjAsMTQgKzEwMjIsMTIgQEAKIAkvKiBVcGRhdGUgc2Vzc2lvbiBjb25uZWN0aW9uIGFuZCBvd25lciBhZGRyZXNzZXMgKi8KIAluZl9uYXRfc2RwX3Nlc3Npb24gPSByY3VfZGVyZWZlcmVuY2UobmZfbmF0X3NkcF9zZXNzaW9uX2hvb2spOwogCWlmIChuZl9uYXRfc2RwX3Nlc3Npb24gJiYgY3QtPnN0YXR1cyAmIElQU19OQVRfTUFTSykKLQkJcmV0ID0gbmZfbmF0X3NkcF9zZXNzaW9uKHNrYiwgZHB0ciwgc2Rwb2ZmLCBkYXRhbGVuLCAmcnRwX2FkZHIpOwotCi0JaWYgKHJldCA9PSBORl9BQ0NFUFQgJiYgaSA+IDApCi0JCWhlbHAtPmhlbHAuY3Rfc2lwX2luZm8uaW52aXRlX2NzZXEgPSBjc2VxOworCQlyZXQgPSBuZl9uYXRfc2RwX3Nlc3Npb24oc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLCBzZHBvZmYsCisJCQkJCSAmcnRwX2FkZHIpOwogCiAJcmV0dXJuIHJldDsKIH0KLXN0YXRpYyBpbnQgcHJvY2Vzc19pbnZpdGVfcmVzcG9uc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3N0YXRpYyBpbnQgcHJvY2Vzc19pbnZpdGVfcmVzcG9uc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkJICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKIAkJCQkgICB1bnNpZ25lZCBpbnQgY3NlcSwgdW5zaWduZWQgaW50IGNvZGUpCiB7CkBAIC05NzcsMTMgKzEwMzcsMTMgQEAKIAogCWlmICgoY29kZSA+PSAxMDAgJiYgY29kZSA8PSAxOTkpIHx8CiAJICAgIChjb2RlID49IDIwMCAmJiBjb2RlIDw9IDI5OSkpCi0JCXJldHVybiBwcm9jZXNzX3NkcChza2IsIGRwdHIsIGRhdGFsZW4sIGNzZXEpOworCQlyZXR1cm4gcHJvY2Vzc19zZHAoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuLCBjc2VxKTsKIAllbHNlIGlmIChoZWxwLT5oZWxwLmN0X3NpcF9pbmZvLmludml0ZV9jc2VxID09IGNzZXEpCiAJCWZsdXNoX2V4cGVjdGF0aW9ucyhjdCwgdHJ1ZSk7CiAJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KIAotc3RhdGljIGludCBwcm9jZXNzX3VwZGF0ZV9yZXNwb25zZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorc3RhdGljIGludCBwcm9jZXNzX3VwZGF0ZV9yZXNwb25zZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJCQkgICBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAogCQkJCSAgIHVuc2lnbmVkIGludCBjc2VxLCB1bnNpZ25lZCBpbnQgY29kZSkKIHsKQEAgLTk5MywxMyArMTA1MywxMyBAQAogCiAJaWYgKChjb2RlID49IDEwMCAmJiBjb2RlIDw9IDE5OSkgfHwKIAkgICAgKGNvZGUgPj0gMjAwICYmIGNvZGUgPD0gMjk5KSkKLQkJcmV0dXJuIHByb2Nlc3Nfc2RwKHNrYiwgZHB0ciwgZGF0YWxlbiwgY3NlcSk7CisJCXJldHVybiBwcm9jZXNzX3NkcChza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4sIGNzZXEpOwogCWVsc2UgaWYgKGhlbHAtPmhlbHAuY3Rfc2lwX2luZm8uaW52aXRlX2NzZXEgPT0gY3NlcSkKIAkJZmx1c2hfZXhwZWN0YXRpb25zKGN0LCB0cnVlKTsKIAlyZXR1cm4gTkZfQUNDRVBUOwogfQogCi1zdGF0aWMgaW50IHByb2Nlc3NfcHJhY2tfcmVzcG9uc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3N0YXRpYyBpbnQgcHJvY2Vzc19wcmFja19yZXNwb25zZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJCQkgIGNvbnN0IGNoYXIgKipkcHRyLCB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCiAJCQkJICB1bnNpZ25lZCBpbnQgY3NlcSwgdW5zaWduZWQgaW50IGNvZGUpCiB7CkBAIC0xMDA5LDEzICsxMDY5LDI5IEBACiAKIAlpZiAoKGNvZGUgPj0gMTAwICYmIGNvZGUgPD0gMTk5KSB8fAogCSAgICAoY29kZSA+PSAyMDAgJiYgY29kZSA8PSAyOTkpKQotCQlyZXR1cm4gcHJvY2Vzc19zZHAoc2tiLCBkcHRyLCBkYXRhbGVuLCBjc2VxKTsKKwkJcmV0dXJuIHByb2Nlc3Nfc2RwKHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbiwgY3NlcSk7CiAJZWxzZSBpZiAoaGVscC0+aGVscC5jdF9zaXBfaW5mby5pbnZpdGVfY3NlcSA9PSBjc2VxKQogCQlmbHVzaF9leHBlY3RhdGlvbnMoY3QsIHRydWUpOwogCXJldHVybiBORl9BQ0NFUFQ7CiB9CiAKLXN0YXRpYyBpbnQgcHJvY2Vzc19ieWVfcmVxdWVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorc3RhdGljIGludCBwcm9jZXNzX2ludml0ZV9yZXF1ZXN0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBkYXRhb2ZmLAorCQkJCSAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbiwKKwkJCQkgIHVuc2lnbmVkIGludCBjc2VxKQoreworCWVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvOworCXN0cnVjdCBuZl9jb25uICpjdCA9IG5mX2N0X2dldChza2IsICZjdGluZm8pOworCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHAgPSBuZmN0X2hlbHAoY3QpOworCXVuc2lnbmVkIGludCByZXQ7CisKKwlmbHVzaF9leHBlY3RhdGlvbnMoY3QsIHRydWUpOworCXJldCA9IHByb2Nlc3Nfc2RwKHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbiwgY3NlcSk7CisJaWYgKHJldCA9PSBORl9BQ0NFUFQpCisJCWhlbHAtPmhlbHAuY3Rfc2lwX2luZm8uaW52aXRlX2NzZXEgPSBjc2VxOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcHJvY2Vzc19ieWVfcmVxdWVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgZGF0YW9mZiwKIAkJCSAgICAgICBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAogCQkJICAgICAgIHVuc2lnbmVkIGludCBjc2VxKQogewpAQCAtMTAzMCw3ICsxMTA2LDcgQEAKICAqIHNpZ25hbGxpbmcgY29ubmVjdGlvbnMuIFRoZSBleHBlY3RhdGlvbiBpcyBtYXJrZWQgaW5hY3RpdmUgYW5kIGlzIGFjdGl2YXRlZAogICogd2hlbiByZWNlaXZpbmcgYSByZXNwb25zZSBpbmRpY2F0aW5nIHN1Y2Nlc3MgZnJvbSB0aGUgcmVnaXN0cmFyLgogICovCi1zdGF0aWMgaW50IHByb2Nlc3NfcmVnaXN0ZXJfcmVxdWVzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorc3RhdGljIGludCBwcm9jZXNzX3JlZ2lzdGVyX3JlcXVlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkJICAgIGNvbnN0IGNoYXIgKipkcHRyLCB1bnNpZ25lZCBpbnQgKmRhdGFsZW4sCiAJCQkJICAgIHVuc2lnbmVkIGludCBjc2VxKQogewpAQCAtMTA0Miw2ICsxMTE4LDcgQEAKIAlzdHJ1Y3QgbmZfY29ubnRyYWNrX2V4cGVjdCAqZXhwOwogCXVuaW9uIG5mX2luZXRfYWRkciAqc2FkZHIsIGRhZGRyOwogCV9fYmUxNiBwb3J0OworCXU4IHByb3RvOwogCXVuc2lnbmVkIGludCBleHBpcmVzID0gMDsKIAlpbnQgcmV0OwogCXR5cGVvZihuZl9uYXRfc2lwX2V4cGVjdF9ob29rKSBuZl9uYXRfc2lwX2V4cGVjdDsKQEAgLTEwNzQsNiArMTE1MSwxMCBAQAogCWlmICghbmZfaW5ldF9hZGRyX2NtcCgmY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLnNyYy51MywgJmRhZGRyKSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAorCWlmIChjdF9zaXBfcGFyc2VfdHJhbnNwb3J0KGN0LCAqZHB0ciwgbWF0Y2hvZmYgKyBtYXRjaGxlbiwgKmRhdGFsZW4sCisJCQkJICAgJnByb3RvKSA9PSAwKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCiAJaWYgKGN0X3NpcF9wYXJzZV9udW1lcmljYWxfcGFyYW0oY3QsICpkcHRyLAogCQkJCQkgbWF0Y2hvZmYgKyBtYXRjaGxlbiwgKmRhdGFsZW4sCiAJCQkJCSAiZXhwaXJlcz0iLCBOVUxMLCBOVUxMLCAmZXhwaXJlcykgPCAwKQpAQCAtMTA5MywxNCArMTE3NCwxNCBAQAogCQlzYWRkciA9ICZjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLnNyYy51MzsKIAogCW5mX2N0X2V4cGVjdF9pbml0KGV4cCwgU0lQX0VYUEVDVF9TSUdOQUxMSU5HLCBuZl9jdF9sM251bShjdCksCi0JCQkgIHNhZGRyLCAmZGFkZHIsIElQUFJPVE9fVURQLCBOVUxMLCAmcG9ydCk7CisJCQkgIHNhZGRyLCAmZGFkZHIsIHByb3RvLCBOVUxMLCAmcG9ydCk7CiAJZXhwLT50aW1lb3V0LmV4cGlyZXMgPSBzaXBfdGltZW91dCAqIEhaOwogCWV4cC0+aGVscGVyID0gbmZjdF9oZWxwKGN0KS0+aGVscGVyOwogCWV4cC0+ZmxhZ3MgPSBORl9DVF9FWFBFQ1RfUEVSTUFORU5UIHwgTkZfQ1RfRVhQRUNUX0lOQUNUSVZFOwogCiAJbmZfbmF0X3NpcF9leHBlY3QgPSByY3VfZGVyZWZlcmVuY2UobmZfbmF0X3NpcF9leHBlY3RfaG9vayk7CiAJaWYgKG5mX25hdF9zaXBfZXhwZWN0ICYmIGN0LT5zdGF0dXMgJiBJUFNfTkFUX01BU0spCi0JCXJldCA9IG5mX25hdF9zaXBfZXhwZWN0KHNrYiwgZHB0ciwgZGF0YWxlbiwgZXhwLAorCQlyZXQgPSBuZl9uYXRfc2lwX2V4cGVjdChza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4sIGV4cCwKIAkJCQkJbWF0Y2hvZmYsIG1hdGNobGVuKTsKIAllbHNlIHsKIAkJaWYgKG5mX2N0X2V4cGVjdF9yZWxhdGVkKGV4cCkgIT0gMCkKQEAgLTExMTYsNyArMTE5Nyw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBwcm9jZXNzX3JlZ2lzdGVyX3Jlc3BvbnNlKHN0cnVjdCBza19idWZmICpza2IsCitzdGF0aWMgaW50IHByb2Nlc3NfcmVnaXN0ZXJfcmVzcG9uc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkJICAgICBjb25zdCBjaGFyICoqZHB0ciwgdW5zaWduZWQgaW50ICpkYXRhbGVuLAogCQkJCSAgICAgdW5zaWduZWQgaW50IGNzZXEsIHVuc2lnbmVkIGludCBjb2RlKQogewpAQCAtMTEyNiw3ICsxMjA3LDggQEAKIAllbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwogCXVuaW9uIG5mX2luZXRfYWRkciBhZGRyOwogCV9fYmUxNiBwb3J0OwotCXVuc2lnbmVkIGludCBtYXRjaG9mZiwgbWF0Y2hsZW4sIGRhdGFvZmYgPSAwOworCXU4IHByb3RvOworCXVuc2lnbmVkIGludCBtYXRjaG9mZiwgbWF0Y2hsZW4sIGNvZmYgPSAwOwogCXVuc2lnbmVkIGludCBleHBpcmVzID0gMDsKIAlpbnQgaW5fY29udGFjdCA9IDAsIHJldDsKIApAQCAtMTE1Myw3ICsxMjM1LDcgQEAKIAl3aGlsZSAoMSkgewogCQl1bnNpZ25lZCBpbnQgY19leHBpcmVzID0gZXhwaXJlczsKIAotCQlyZXQgPSBjdF9zaXBfcGFyc2VfaGVhZGVyX3VyaShjdCwgKmRwdHIsICZkYXRhb2ZmLCAqZGF0YWxlbiwKKwkJcmV0ID0gY3Rfc2lwX3BhcnNlX2hlYWRlcl91cmkoY3QsICpkcHRyLCAmY29mZiwgKmRhdGFsZW4sCiAJCQkJCSAgICAgIFNJUF9IRFJfQ09OVEFDVCwgJmluX2NvbnRhY3QsCiAJCQkJCSAgICAgICZtYXRjaG9mZiwgJm1hdGNobGVuLAogCQkJCQkgICAgICAmYWRkciwgJnBvcnQpOwpAQCAtMTE2Niw2ICsxMjQ4LDEwIEBACiAJCWlmICghbmZfaW5ldF9hZGRyX2NtcCgmY3QtPnR1cGxlaGFzaFtkaXJdLnR1cGxlLmRzdC51MywgJmFkZHIpKQogCQkJY29udGludWU7CiAKKwkJaWYgKGN0X3NpcF9wYXJzZV90cmFuc3BvcnQoY3QsICpkcHRyLCBtYXRjaG9mZiArIG1hdGNobGVuLAorCQkJCQkgICAqZGF0YWxlbiwgJnByb3RvKSA9PSAwKQorCQkJY29udGludWU7CisKIAkJcmV0ID0gY3Rfc2lwX3BhcnNlX251bWVyaWNhbF9wYXJhbShjdCwgKmRwdHIsCiAJCQkJCQkgICBtYXRjaG9mZiArIG1hdGNobGVuLAogCQkJCQkJICAgKmRhdGFsZW4sICJleHBpcmVzPSIsCkBAIC0xMTc0LDcgKzEyNjAsOCBAQAogCQkJcmV0dXJuIE5GX0RST1A7CiAJCWlmIChjX2V4cGlyZXMgPT0gMCkKIAkJCWJyZWFrOwotCQlpZiAocmVmcmVzaF9zaWduYWxsaW5nX2V4cGVjdGF0aW9uKGN0LCAmYWRkciwgcG9ydCwgY19leHBpcmVzKSkKKwkJaWYgKHJlZnJlc2hfc2lnbmFsbGluZ19leHBlY3RhdGlvbihjdCwgJmFkZHIsIHByb3RvLCBwb3J0LAorCQkJCQkJICAgY19leHBpcmVzKSkKIAkJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQogCkBAIC0xMTg0LDcgKzEyNzEsNyBAQAogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNpcF9oYW5kbGVyIHNpcF9oYW5kbGVyc1tdID0gewotCVNJUF9IQU5ETEVSKCJJTlZJVEUiLCBwcm9jZXNzX3NkcCwgcHJvY2Vzc19pbnZpdGVfcmVzcG9uc2UpLAorCVNJUF9IQU5ETEVSKCJJTlZJVEUiLCBwcm9jZXNzX2ludml0ZV9yZXF1ZXN0LCBwcm9jZXNzX2ludml0ZV9yZXNwb25zZSksCiAJU0lQX0hBTkRMRVIoIlVQREFURSIsIHByb2Nlc3Nfc2RwLCBwcm9jZXNzX3VwZGF0ZV9yZXNwb25zZSksCiAJU0lQX0hBTkRMRVIoIkFDSyIsIHByb2Nlc3Nfc2RwLCBOVUxMKSwKIAlTSVBfSEFORExFUigiUFJBQ0siLCBwcm9jZXNzX3NkcCwgcHJvY2Vzc19wcmFja19yZXNwb25zZSksCkBAIC0xMTkyLDEzICsxMjc5LDEzIEBACiAJU0lQX0hBTkRMRVIoIlJFR0lTVEVSIiwgcHJvY2Vzc19yZWdpc3Rlcl9yZXF1ZXN0LCBwcm9jZXNzX3JlZ2lzdGVyX3Jlc3BvbnNlKSwKIH07CiAKLXN0YXRpYyBpbnQgcHJvY2Vzc19zaXBfcmVzcG9uc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwKK3N0YXRpYyBpbnQgcHJvY2Vzc19zaXBfcmVzcG9uc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkJY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbikKIHsKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKIAlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBuZl9jdF9nZXQoc2tiLCAmY3RpbmZvKTsKLQl1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsIG1hdGNobGVuOwotCXVuc2lnbmVkIGludCBjb2RlLCBjc2VxLCBkYXRhb2ZmLCBpOworCXVuc2lnbmVkIGludCBtYXRjaG9mZiwgbWF0Y2hsZW4sIG1hdGNoZW5kOworCXVuc2lnbmVkIGludCBjb2RlLCBjc2VxLCBpOwogCiAJaWYgKCpkYXRhbGVuIDwgc3RybGVuKCJTSVAvMi4wIDIwMCIpKQogCQlyZXR1cm4gTkZfQUNDRVBUOwpAQCAtMTIxMiw3ICsxMjk5LDcgQEAKIAljc2VxID0gc2ltcGxlX3N0cnRvdWwoKmRwdHIgKyBtYXRjaG9mZiwgTlVMTCwgMTApOwogCWlmICghY3NlcSkKIAkJcmV0dXJuIE5GX0RST1A7Ci0JZGF0YW9mZiA9IG1hdGNob2ZmICsgbWF0Y2hsZW4gKyAxOworCW1hdGNoZW5kID0gbWF0Y2hvZmYgKyBtYXRjaGxlbiArIDE7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzaXBfaGFuZGxlcnMpOyBpKyspIHsKIAkJY29uc3Qgc3RydWN0IHNpcF9oYW5kbGVyICpoYW5kbGVyOwpAQCAtMTIyMCwxNSArMTMwNywxNiBAQAogCQloYW5kbGVyID0gJnNpcF9oYW5kbGVyc1tpXTsKIAkJaWYgKGhhbmRsZXItPnJlc3BvbnNlID09IE5VTEwpCiAJCQljb250aW51ZTsKLQkJaWYgKCpkYXRhbGVuIDwgZGF0YW9mZiArIGhhbmRsZXItPmxlbiB8fAotCQkgICAgc3RybmljbXAoKmRwdHIgKyBkYXRhb2ZmLCBoYW5kbGVyLT5tZXRob2QsIGhhbmRsZXItPmxlbikpCisJCWlmICgqZGF0YWxlbiA8IG1hdGNoZW5kICsgaGFuZGxlci0+bGVuIHx8CisJCSAgICBzdHJuaWNtcCgqZHB0ciArIG1hdGNoZW5kLCBoYW5kbGVyLT5tZXRob2QsIGhhbmRsZXItPmxlbikpCiAJCQljb250aW51ZTsKLQkJcmV0dXJuIGhhbmRsZXItPnJlc3BvbnNlKHNrYiwgZHB0ciwgZGF0YWxlbiwgY3NlcSwgY29kZSk7CisJCXJldHVybiBoYW5kbGVyLT5yZXNwb25zZShza2IsIGRhdGFvZmYsIGRwdHIsIGRhdGFsZW4sCisJCQkJCSBjc2VxLCBjb2RlKTsKIAl9CiAJcmV0dXJuIE5GX0FDQ0VQVDsKIH0KIAotc3RhdGljIGludCBwcm9jZXNzX3NpcF9yZXF1ZXN0KHN0cnVjdCBza19idWZmICpza2IsCitzdGF0aWMgaW50IHByb2Nlc3Nfc2lwX3JlcXVlc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGRhdGFvZmYsCiAJCQkgICAgICAgY29uc3QgY2hhciAqKmRwdHIsIHVuc2lnbmVkIGludCAqZGF0YWxlbikKIHsKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKQEAgLTEyNTMsMjAgKzEzNDEsMTEyIEBACiAJCWlmICghY3NlcSkKIAkJCXJldHVybiBORl9EUk9QOwogCi0JCXJldHVybiBoYW5kbGVyLT5yZXF1ZXN0KHNrYiwgZHB0ciwgZGF0YWxlbiwgY3NlcSk7CisJCXJldHVybiBoYW5kbGVyLT5yZXF1ZXN0KHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbiwgY3NlcSk7CiAJfQogCXJldHVybiBORl9BQ0NFUFQ7CiB9CiAKLXN0YXRpYyBpbnQgc2lwX2hlbHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJICAgIHVuc2lnbmVkIGludCBwcm90b2ZmLAotCQkgICAgc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkgICAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pCitzdGF0aWMgaW50IHByb2Nlc3Nfc2lwX21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmZfY29ubiAqY3QsCisJCQkgICB1bnNpZ25lZCBpbnQgZGF0YW9mZiwgY29uc3QgY2hhciAqKmRwdHIsCisJCQkgICB1bnNpZ25lZCBpbnQgKmRhdGFsZW4pCit7CisJdHlwZW9mKG5mX25hdF9zaXBfaG9vaykgbmZfbmF0X3NpcDsKKwlpbnQgcmV0OworCisJaWYgKHN0cm5pY21wKCpkcHRyLCAiU0lQLzIuMCAiLCBzdHJsZW4oIlNJUC8yLjAgIikpICE9IDApCisJCXJldCA9IHByb2Nlc3Nfc2lwX3JlcXVlc3Qoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuKTsKKwllbHNlCisJCXJldCA9IHByb2Nlc3Nfc2lwX3Jlc3BvbnNlKHNrYiwgZGF0YW9mZiwgZHB0ciwgZGF0YWxlbik7CisKKwlpZiAocmV0ID09IE5GX0FDQ0VQVCAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKSB7CisJCW5mX25hdF9zaXAgPSByY3VfZGVyZWZlcmVuY2UobmZfbmF0X3NpcF9ob29rKTsKKwkJaWYgKG5mX25hdF9zaXAgJiYgIW5mX25hdF9zaXAoc2tiLCBkYXRhb2ZmLCBkcHRyLCBkYXRhbGVuKSkKKwkJCXJldCA9IE5GX0RST1A7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzaXBfaGVscF90Y3Aoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsCisJCQlzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKQoreworCXN0cnVjdCB0Y3BoZHIgKnRoLCBfdGNwaDsKKwl1bnNpZ25lZCBpbnQgZGF0YW9mZiwgZGF0YWxlbjsKKwl1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsIG1hdGNobGVuLCBjbGVuOworCXVuc2lnbmVkIGludCBtc2dsZW4sIG9yaWdsZW47CisJY29uc3QgY2hhciAqZHB0ciwgKmVuZDsKKwlzMTYgZGlmZiwgdGRpZmYgPSAwOworCWludCByZXQ7CisJdHlwZW9mKG5mX25hdF9zaXBfc2VxX2FkanVzdF9ob29rKSBuZl9uYXRfc2lwX3NlcV9hZGp1c3Q7CisKKwlpZiAoY3RpbmZvICE9IElQX0NUX0VTVEFCTElTSEVEICYmCisJICAgIGN0aW5mbyAhPSBJUF9DVF9FU1RBQkxJU0hFRCArIElQX0NUX0lTX1JFUExZKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCisJLyogTm8gRGF0YSA/ICovCisJdGggPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwcm90b2ZmLCBzaXplb2YoX3RjcGgpLCAmX3RjcGgpOworCWlmICh0aCA9PSBOVUxMKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCWRhdGFvZmYgPSBwcm90b2ZmICsgdGgtPmRvZmYgKiA0OworCWlmIChkYXRhb2ZmID49IHNrYi0+bGVuKQorCQlyZXR1cm4gTkZfQUNDRVBUOworCisJbmZfY3RfcmVmcmVzaChjdCwgc2tiLCBzaXBfdGltZW91dCAqIEhaKTsKKworCWlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpIHsKKwkJcHJfZGVidWcoIkNvcHkgb2Ygc2tidWZmIG5vdCBzdXBwb3J0ZWQgeWV0LlxuIik7CisJCXJldHVybiBORl9BQ0NFUFQ7CisJfQorCisJZHB0ciA9IHNrYi0+ZGF0YSArIGRhdGFvZmY7CisJZGF0YWxlbiA9IHNrYi0+bGVuIC0gZGF0YW9mZjsKKwlpZiAoZGF0YWxlbiA8IHN0cmxlbigiU0lQLzIuMCAyMDAiKSkKKwkJcmV0dXJuIE5GX0FDQ0VQVDsKKworCXdoaWxlICgxKSB7CisJCWlmIChjdF9zaXBfZ2V0X2hlYWRlcihjdCwgZHB0ciwgMCwgZGF0YWxlbiwKKwkJCQkgICAgICBTSVBfSERSX0NPTlRFTlRfTEVOR1RILAorCQkJCSAgICAgICZtYXRjaG9mZiwgJm1hdGNobGVuKSA8PSAwKQorCQkJYnJlYWs7CisKKwkJY2xlbiA9IHNpbXBsZV9zdHJ0b3VsKGRwdHIgKyBtYXRjaG9mZiwgKGNoYXIgKiopJmVuZCwgMTApOworCQlpZiAoZHB0ciArIG1hdGNob2ZmID09IGVuZCkKKwkJCWJyZWFrOworCisJCWlmIChlbmQgKyBzdHJsZW4oIlxyXG5cclxuIikgPiBkcHRyICsgZGF0YWxlbikKKwkJCWJyZWFrOworCQlpZiAoZW5kWzBdICE9ICdccicgfHwgZW5kWzFdICE9ICdcbicgfHwKKwkJICAgIGVuZFsyXSAhPSAnXHInIHx8IGVuZFszXSAhPSAnXG4nKQorCQkJYnJlYWs7CisJCWVuZCArPSBzdHJsZW4oIlxyXG5cclxuIikgKyBjbGVuOworCisJCW1zZ2xlbiA9IG9yaWdsZW4gPSBlbmQgLSBkcHRyOworCisJCXJldCA9IHByb2Nlc3Nfc2lwX21zZyhza2IsIGN0LCBkYXRhb2ZmLCAmZHB0ciwgJm1zZ2xlbik7CisJCWlmIChyZXQgIT0gTkZfQUNDRVBUKQorCQkJYnJlYWs7CisJCWRpZmYgICAgID0gbXNnbGVuIC0gb3JpZ2xlbjsKKwkJdGRpZmYgICArPSBkaWZmOworCisJCWRhdGFvZmYgKz0gbXNnbGVuOworCQlkcHRyICAgICs9IG1zZ2xlbjsKKwkJZGF0YWxlbiAgPSBkYXRhbGVuICsgZGlmZiAtIG1zZ2xlbjsKKwl9CisKKwlpZiAocmV0ID09IE5GX0FDQ0VQVCAmJiBjdC0+c3RhdHVzICYgSVBTX05BVF9NQVNLKSB7CisJCW5mX25hdF9zaXBfc2VxX2FkanVzdCA9IHJjdV9kZXJlZmVyZW5jZShuZl9uYXRfc2lwX3NlcV9hZGp1c3RfaG9vayk7CisJCWlmIChuZl9uYXRfc2lwX3NlcV9hZGp1c3QpCisJCQluZl9uYXRfc2lwX3NlcV9hZGp1c3Qoc2tiLCB0ZGlmZik7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzaXBfaGVscF91ZHAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IHByb3RvZmYsCisJCQlzdHJ1Y3QgbmZfY29ubiAqY3QsIGVudW0gaXBfY29ubnRyYWNrX2luZm8gY3RpbmZvKQogewogCXVuc2lnbmVkIGludCBkYXRhb2ZmLCBkYXRhbGVuOwogCWNvbnN0IGNoYXIgKmRwdHI7Ci0JaW50IHJldDsKLQl0eXBlb2YobmZfbmF0X3NpcF9ob29rKSBuZl9uYXRfc2lwOwogCiAJLyogTm8gRGF0YSA/ICovCiAJZGF0YW9mZiA9IHByb3RvZmYgKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7CkBAIC0xMjc1LDQ3ICsxNDU1LDQzIEBACiAKIAluZl9jdF9yZWZyZXNoKGN0LCBza2IsIHNpcF90aW1lb3V0ICogSFopOwogCi0JaWYgKCFza2JfaXNfbm9ubGluZWFyKHNrYikpCi0JCWRwdHIgPSBza2ItPmRhdGEgKyBkYXRhb2ZmOwotCWVsc2UgeworCWlmIChza2JfaXNfbm9ubGluZWFyKHNrYikpIHsKIAkJcHJfZGVidWcoIkNvcHkgb2Ygc2tidWZmIG5vdCBzdXBwb3J0ZWQgeWV0LlxuIik7CiAJCXJldHVybiBORl9BQ0NFUFQ7CiAJfQogCisJZHB0ciA9IHNrYi0+ZGF0YSArIGRhdGFvZmY7CiAJZGF0YWxlbiA9IHNrYi0+bGVuIC0gZGF0YW9mZjsKIAlpZiAoZGF0YWxlbiA8IHN0cmxlbigiU0lQLzIuMCAyMDAiKSkKIAkJcmV0dXJuIE5GX0FDQ0VQVDsKIAotCWlmIChzdHJuaWNtcChkcHRyLCAiU0lQLzIuMCAiLCBzdHJsZW4oIlNJUC8yLjAgIikpICE9IDApCi0JCXJldCA9IHByb2Nlc3Nfc2lwX3JlcXVlc3Qoc2tiLCAmZHB0ciwgJmRhdGFsZW4pOwotCWVsc2UKLQkJcmV0ID0gcHJvY2Vzc19zaXBfcmVzcG9uc2Uoc2tiLCAmZHB0ciwgJmRhdGFsZW4pOwotCi0JaWYgKHJldCA9PSBORl9BQ0NFUFQgJiYgY3QtPnN0YXR1cyAmIElQU19OQVRfTUFTSykgewotCQluZl9uYXRfc2lwID0gcmN1X2RlcmVmZXJlbmNlKG5mX25hdF9zaXBfaG9vayk7Ci0JCWlmIChuZl9uYXRfc2lwICYmICFuZl9uYXRfc2lwKHNrYiwgJmRwdHIsICZkYXRhbGVuKSkKLQkJCXJldCA9IE5GX0RST1A7Ci0JfQotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gcHJvY2Vzc19zaXBfbXNnKHNrYiwgY3QsIGRhdGFvZmYsICZkcHRyLCAmZGF0YWxlbik7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzaXBbTUFYX1BPUlRTXVsyXSBfX3JlYWRfbW9zdGx5Owotc3RhdGljIGNoYXIgc2lwX25hbWVzW01BWF9QT1JUU11bMl1bc2l6ZW9mKCJzaXAtNjU1MzUiKV0gX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3QgbmZfY29ubnRyYWNrX2hlbHBlciBzaXBbTUFYX1BPUlRTXVs0XSBfX3JlYWRfbW9zdGx5Oworc3RhdGljIGNoYXIgc2lwX25hbWVzW01BWF9QT1JUU11bNF1bc2l6ZW9mKCJzaXAtNjU1MzUiKV0gX19yZWFkX21vc3RseTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfZXhwZWN0X3BvbGljeSBzaXBfZXhwX3BvbGljeVtTSVBfRVhQRUNUX01BWCArIDFdID0gewogCVtTSVBfRVhQRUNUX1NJR05BTExJTkddID0geworCQkubmFtZQkJPSAic2lnbmFsbGluZyIsCiAJCS5tYXhfZXhwZWN0ZWQJPSAxLAogCQkudGltZW91dAk9IDMgKiA2MCwKIAl9LAogCVtTSVBfRVhQRUNUX0FVRElPXSA9IHsKKwkJLm5hbWUJCT0gImF1ZGlvIiwKIAkJLm1heF9leHBlY3RlZAk9IDIgKiBJUF9DVF9ESVJfTUFYLAogCQkudGltZW91dAk9IDMgKiA2MCwKIAl9LAogCVtTSVBfRVhQRUNUX1ZJREVPXSA9IHsKKwkJLm5hbWUJCT0gInZpZGVvIiwKIAkJLm1heF9leHBlY3RlZAk9IDIgKiBJUF9DVF9ESVJfTUFYLAogCQkudGltZW91dAk9IDMgKiA2MCwKIAl9LAorCVtTSVBfRVhQRUNUX0lNQUdFXSA9IHsKKwkJLm5hbWUJCT0gImltYWdlIiwKKwkJLm1heF9leHBlY3RlZAk9IElQX0NUX0RJUl9NQVgsCisJCS50aW1lb3V0CT0gMyAqIDYwLAorCX0sCiB9OwogCiBzdGF0aWMgdm9pZCBuZl9jb25udHJhY2tfc2lwX2Zpbmkodm9pZCkKQEAgLTEzMjMsNyArMTQ5OSw3IEBACiAJaW50IGksIGo7CiAKIAlmb3IgKGkgPSAwOyBpIDwgcG9ydHNfYzsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUoc2lwW2ldKTsgaisrKSB7CiAJCQlpZiAoc2lwW2ldW2pdLm1lID09IE5VTEwpCiAJCQkJY29udGludWU7CiAJCQluZl9jb25udHJhY2tfaGVscGVyX3VucmVnaXN0ZXIoJnNpcFtpXVtqXSk7CkBAIC0xMzQzLDE0ICsxNTE5LDI0IEBACiAJCW1lbXNldCgmc2lwW2ldLCAwLCBzaXplb2Yoc2lwW2ldKSk7CiAKIAkJc2lwW2ldWzBdLnR1cGxlLnNyYy5sM251bSA9IEFGX0lORVQ7Ci0JCXNpcFtpXVsxXS50dXBsZS5zcmMubDNudW0gPSBBRl9JTkVUNjsKLQkJZm9yIChqID0gMDsgaiA8IDI7IGorKykgewotCQkJc2lwW2ldW2pdLnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVURQOworCQlzaXBbaV1bMF0udHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19VRFA7CisJCXNpcFtpXVswXS5oZWxwID0gc2lwX2hlbHBfdWRwOworCQlzaXBbaV1bMV0udHVwbGUuc3JjLmwzbnVtID0gQUZfSU5FVDsKKwkJc2lwW2ldWzFdLnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVENQOworCQlzaXBbaV1bMV0uaGVscCA9IHNpcF9oZWxwX3RjcDsKKworCQlzaXBbaV1bMl0udHVwbGUuc3JjLmwzbnVtID0gQUZfSU5FVDY7CisJCXNpcFtpXVsyXS50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1VEUDsKKwkJc2lwW2ldWzJdLmhlbHAgPSBzaXBfaGVscF91ZHA7CisJCXNpcFtpXVszXS50dXBsZS5zcmMubDNudW0gPSBBRl9JTkVUNjsKKwkJc2lwW2ldWzNdLnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVENQOworCQlzaXBbaV1bM10uaGVscCA9IHNpcF9oZWxwX3RjcDsKKworCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShzaXBbaV0pOyBqKyspIHsKIAkJCXNpcFtpXVtqXS50dXBsZS5zcmMudS51ZHAucG9ydCA9IGh0b25zKHBvcnRzW2ldKTsKIAkJCXNpcFtpXVtqXS5leHBlY3RfcG9saWN5ID0gc2lwX2V4cF9wb2xpY3k7CiAJCQlzaXBbaV1bal0uZXhwZWN0X2NsYXNzX21heCA9IFNJUF9FWFBFQ1RfTUFYOwogCQkJc2lwW2ldW2pdLm1lID0gVEhJU19NT0RVTEU7Ci0JCQlzaXBbaV1bal0uaGVscCA9IHNpcF9oZWxwOwogCiAJCQl0bXBuYW1lID0gJnNpcF9uYW1lc1tpXVtqXVswXTsKIAkJCWlmIChwb3J0c1tpXSA9PSBTSVBfUE9SVCkKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYwppbmRleCBlMzEwZjE1Li4yNGE0MmVmIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfZXhwZWN0Lmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfaGVscGVyLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfYWNjdC5oPgorI2luY2x1ZGUgPG5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3pvbmVzLmg+CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApAQCAtMTcxLDYgKzE3MiwxMSBAQAogCQlnb3RvIHJlbGVhc2U7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19ORl9DT05OVFJBQ0tfWk9ORVMKKwlpZiAoc2VxX3ByaW50ZihzLCAiem9uZT0ldSAiLCBuZl9jdF96b25lKGN0KSkpCisJCWdvdG8gcmVsZWFzZTsKKyNlbmRpZgorCiAJaWYgKHNlcV9wcmludGYocywgInVzZT0ldVxuIiwgYXRvbWljX3JlYWQoJmN0LT5jdF9nZW5lcmFsLnVzZSkpKQogCQlnb3RvIHJlbGVhc2U7CiAKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYyBiL25ldC9uZXRmaWx0ZXIvbmZfcXVldWUuYwppbmRleCAzYTZmZDc3Li5iYTA5NWZkIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mX3F1ZXVlLmMKKysrIGIvbmV0L25ldGZpbHRlci9uZl9xdWV1ZS5jCkBAIC0yNjUsNyArMjY1LDYgQEAKIAkJbG9jYWxfYmhfZGlzYWJsZSgpOwogCQllbnRyeS0+b2tmbihza2IpOwogCQlsb2NhbF9iaF9lbmFibGUoKTsKLQljYXNlIE5GX1NUT0xFTjoKIAkJYnJlYWs7CiAJY2FzZSBORl9RVUVVRToKIAkJaWYgKCFfX25mX3F1ZXVlKHNrYiwgZWxlbSwgZW50cnktPnBmLCBlbnRyeS0+aG9vaywKQEAgLTI3Myw2ICsyNzIsNyBAQAogCQkJCXZlcmRpY3QgPj4gTkZfVkVSRElDVF9CSVRTKSkKIAkJCWdvdG8gbmV4dF9ob29rOwogCQlicmVhazsKKwljYXNlIE5GX1NUT0xFTjoKIAlkZWZhdWx0OgogCQlrZnJlZV9za2Ioc2tiKTsKIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jIGIvbmV0L25ldGZpbHRlci9uZm5ldGxpbmsuYwppbmRleCBlZWRjMGMxLi44ZWIwY2MyIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGluay5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmMKQEAgLTQwLDcgKzQwLDYgQEAKIAogc3RhdGljIGNoYXIgX19pbml0ZGF0YSBuZnZlcnNpb25bXSA9ICIwLjMwIjsKIAotc3RhdGljIHN0cnVjdCBzb2NrICpuZm5sID0gTlVMTDsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZuZXRsaW5rX3N1YnN5c3RlbSAqc3Vic3lzX3RhYmxlW05GTkxfU1VCU1lTX0NPVU5UXTsKIHN0YXRpYyBERUZJTkVfTVVURVgobmZubF9tdXRleCk7CiAKQEAgLTEwMSwzNCArMTAwLDM1IEBACiAJcmV0dXJuICZzcy0+Y2JbY2JfaWRdOwogfQogCi1pbnQgbmZuZXRsaW5rX2hhc19saXN0ZW5lcnModW5zaWduZWQgaW50IGdyb3VwKQoraW50IG5mbmV0bGlua19oYXNfbGlzdGVuZXJzKHN0cnVjdCBuZXQgKm5ldCwgdW5zaWduZWQgaW50IGdyb3VwKQogewotCXJldHVybiBuZXRsaW5rX2hhc19saXN0ZW5lcnMobmZubCwgZ3JvdXApOworCXJldHVybiBuZXRsaW5rX2hhc19saXN0ZW5lcnMobmV0LT5uZm5sLCBncm91cCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZm5ldGxpbmtfaGFzX2xpc3RlbmVycyk7CiAKLWludCBuZm5ldGxpbmtfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLAoraW50IG5mbmV0bGlua19zZW5kKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCwgdTMyIHBpZCwKIAkJICAgdW5zaWduZWQgZ3JvdXAsIGludCBlY2hvLCBnZnBfdCBmbGFncykKIHsKLQlyZXR1cm4gbmxtc2dfbm90aWZ5KG5mbmwsIHNrYiwgcGlkLCBncm91cCwgZWNobywgZmxhZ3MpOworCXJldHVybiBubG1zZ19ub3RpZnkobmV0LT5uZm5sLCBza2IsIHBpZCwgZ3JvdXAsIGVjaG8sIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mbmV0bGlua19zZW5kKTsKIAotdm9pZCBuZm5ldGxpbmtfc2V0X2Vycih1MzIgcGlkLCB1MzIgZ3JvdXAsIGludCBlcnJvcikKK3ZvaWQgbmZuZXRsaW5rX3NldF9lcnIoc3RydWN0IG5ldCAqbmV0LCB1MzIgcGlkLCB1MzIgZ3JvdXAsIGludCBlcnJvcikKIHsKLQluZXRsaW5rX3NldF9lcnIobmZubCwgcGlkLCBncm91cCwgZXJyb3IpOworCW5ldGxpbmtfc2V0X2VycihuZXQtPm5mbmwsIHBpZCwgZ3JvdXAsIGVycm9yKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKG5mbmV0bGlua19zZXRfZXJyKTsKIAotaW50IG5mbmV0bGlua191bmljYXN0KHN0cnVjdCBza19idWZmICpza2IsIHVfaW50MzJfdCBwaWQsIGludCBmbGFncykKK2ludCBuZm5ldGxpbmtfdW5pY2FzdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsIHVfaW50MzJfdCBwaWQsIGludCBmbGFncykKIHsKLQlyZXR1cm4gbmV0bGlua191bmljYXN0KG5mbmwsIHNrYiwgcGlkLCBmbGFncyk7CisJcmV0dXJuIG5ldGxpbmtfdW5pY2FzdChuZXQtPm5mbmwsIHNrYiwgcGlkLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChuZm5ldGxpbmtfdW5pY2FzdCk7CiAKIC8qIFByb2Nlc3Mgb25lIGNvbXBsZXRlIG5mbmV0bGluayBtZXNzYWdlLiAqLwogc3RhdGljIGludCBuZm5ldGxpbmtfcmN2X21zZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCkKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBzb2NrX25ldChza2ItPnNrKTsKIAljb25zdCBzdHJ1Y3QgbmZubF9jYWxsYmFjayAqbmM7CiAJY29uc3Qgc3RydWN0IG5mbmV0bGlua19zdWJzeXN0ZW0gKnNzOwogCWludCB0eXBlLCBlcnI7CkBAIC0xNzAsNyArMTcwLDcgQEAKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCi0JCWVyciA9IG5jLT5jYWxsKG5mbmwsIHNrYiwgbmxoLCAoY29uc3Qgc3RydWN0IG5sYXR0ciAqKiljZGEpOworCQllcnIgPSBuYy0+Y2FsbChuZXQtPm5mbmwsIHNrYiwgbmxoLCAoY29uc3Qgc3RydWN0IG5sYXR0ciAqKiljZGEpOwogCQlpZiAoZXJyID09IC1FQUdBSU4pCiAJCQlnb3RvIHJlcGxheTsKIAkJcmV0dXJuIGVycjsKQEAgLTE4NCwyNiArMTg0LDQ1IEBACiAJbmZubF91bmxvY2soKTsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IG5mbmV0bGlua19leGl0KHZvaWQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgbmZuZXRsaW5rX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlwcmludGsoIlJlbW92aW5nIG5ldGZpbHRlciBORVRMSU5LIGxheWVyLlxuIik7Ci0JbmV0bGlua19rZXJuZWxfcmVsZWFzZShuZm5sKTsKLQlyZXR1cm47CisJc3RydWN0IHNvY2sgKm5mbmw7CisKKwluZm5sID0gbmV0bGlua19rZXJuZWxfY3JlYXRlKG5ldCwgTkVUTElOS19ORVRGSUxURVIsIE5GTkxHUlBfTUFYLAorCQkJCSAgICAgbmZuZXRsaW5rX3JjdiwgTlVMTCwgVEhJU19NT0RVTEUpOworCWlmICghbmZubCkKKwkJcmV0dXJuIC1FTk9NRU07CisJbmV0LT5uZm5sX3N0YXNoID0gbmZubDsKKwlyY3VfYXNzaWduX3BvaW50ZXIobmV0LT5uZm5sLCBuZm5sKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBuZm5ldGxpbmtfbmV0X2V4aXRfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqbmV0X2V4aXRfbGlzdCkKK3sKKwlzdHJ1Y3QgbmV0ICpuZXQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5ldCwgbmV0X2V4aXRfbGlzdCwgZXhpdF9saXN0KQorCQlyY3VfYXNzaWduX3BvaW50ZXIobmV0LT5uZm5sLCBOVUxMKTsKKwlzeW5jaHJvbml6ZV9uZXQoKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG5ldCwgbmV0X2V4aXRfbGlzdCwgZXhpdF9saXN0KQorCQluZXRsaW5rX2tlcm5lbF9yZWxlYXNlKG5ldC0+bmZubF9zdGFzaCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGVybmV0X29wZXJhdGlvbnMgbmZuZXRsaW5rX25ldF9vcHMgPSB7CisJLmluaXQJCT0gbmZuZXRsaW5rX25ldF9pbml0LAorCS5leGl0X2JhdGNoCT0gbmZuZXRsaW5rX25ldF9leGl0X2JhdGNoLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgbmZuZXRsaW5rX2luaXQodm9pZCkKIHsKIAlwcmludGsoIk5ldGZpbHRlciBtZXNzYWdlcyB2aWEgTkVUTElOSyB2JXMuXG4iLCBuZnZlcnNpb24pOwotCi0JbmZubCA9IG5ldGxpbmtfa2VybmVsX2NyZWF0ZSgmaW5pdF9uZXQsIE5FVExJTktfTkVURklMVEVSLCBORk5MR1JQX01BWCwKLQkJCQkgICAgIG5mbmV0bGlua19yY3YsIE5VTEwsIFRISVNfTU9EVUxFKTsKLQlpZiAoIW5mbmwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjYW5ub3QgaW5pdGlhbGl6ZSBuZm5ldGxpbmshXG4iKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJm5mbmV0bGlua19uZXRfb3BzKTsKIH0KIAorc3RhdGljIHZvaWQgX19leGl0IG5mbmV0bGlua19leGl0KHZvaWQpCit7CisJcHJpbnRrKCJSZW1vdmluZyBuZXRmaWx0ZXIgTkVUTElOSyBsYXllci5cbiIpOworCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmbmZuZXRsaW5rX25ldF9vcHMpOworfQogbW9kdWxlX2luaXQobmZuZXRsaW5rX2luaXQpOwogbW9kdWxlX2V4aXQobmZuZXRsaW5rX2V4aXQpOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfbG9nLmMgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwppbmRleCA5ZGUwNDcwLi5kOWI4ZmI4IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYworKysgYi9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19sb2cuYwpAQCAtMzIzLDcgKzMyMyw4IEBACiAJCQkgIE5MTVNHX0RPTkUsCiAJCQkgIHNpemVvZihzdHJ1Y3QgbmZnZW5tc2cpKTsKIAotCXN0YXR1cyA9IG5mbmV0bGlua191bmljYXN0KGluc3QtPnNrYiwgaW5zdC0+cGVlcl9waWQsIE1TR19ET05UV0FJVCk7CisJc3RhdHVzID0gbmZuZXRsaW5rX3VuaWNhc3QoaW5zdC0+c2tiLCAmaW5pdF9uZXQsIGluc3QtPnBlZXJfcGlkLAorCQkJCSAgIE1TR19ET05UV0FJVCk7CiAKIAlpbnN0LT5xbGVuID0gMDsKIAlpbnN0LT5za2IgPSBOVUxMOwpAQCAtNzY3LDcgKzc2OCw3IEBACiAJCQl9CiAKIAkJCWluc3RhbmNlX2Rlc3Ryb3koaW5zdCk7Ci0JCQlnb3RvIG91dDsKKwkJCWdvdG8gb3V0X3B1dDsKIAkJZGVmYXVsdDoKIAkJCXJldCA9IC1FTk9UU1VQUDsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZm5ldGxpbmtfcXVldWUuYyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKaW5kZXggN2UzZmE0MTA2Li43YmE0YWJjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL25mbmV0bGlua19xdWV1ZS5jCisrKyBiL25ldC9uZXRmaWx0ZXIvbmZuZXRsaW5rX3F1ZXVlLmMKQEAgLTExMiw3ICsxMTIsNiBAQAogCWluc3QtPmNvcHlfbW9kZSA9IE5GUU5MX0NPUFlfTk9ORTsKIAlzcGluX2xvY2tfaW5pdCgmaW5zdC0+bG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmluc3QtPnF1ZXVlX2xpc3QpOwotCUlOSVRfUkNVX0hFQUQoJmluc3QtPnJjdSk7CiAKIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KFRISVNfTU9EVUxFKSkgewogCQllcnIgPSAtRUFHQUlOOwpAQCAtNDE0LDEzICs0MTMsMTMgQEAKIAkJcXVldWUtPnF1ZXVlX2Ryb3BwZWQrKzsKIAkJaWYgKG5ldF9yYXRlbGltaXQoKSkKIAkJCSAgcHJpbnRrKEtFUk5fV0FSTklORyAibmZfcXVldWU6IGZ1bGwgYXQgJWQgZW50cmllcywgIgotCQkJCSAiZHJvcHBpbmcgcGFja2V0cyhzKS4gRHJvcHBlZDogJWRcbiIsCi0JCQkJIHF1ZXVlLT5xdWV1ZV90b3RhbCwgcXVldWUtPnF1ZXVlX2Ryb3BwZWQpOworCQkJCSAiZHJvcHBpbmcgcGFja2V0cyhzKS5cbiIsCisJCQkJIHF1ZXVlLT5xdWV1ZV90b3RhbCk7CiAJCWdvdG8gZXJyX291dF9mcmVlX25za2I7CiAJfQogCiAJLyogbmZuZXRsaW5rX3VuaWNhc3Qgd2lsbCBlaXRoZXIgZnJlZSB0aGUgbnNrYiBvciBhZGQgaXQgdG8gYSBzb2NrZXQgKi8KLQllcnIgPSBuZm5ldGxpbmtfdW5pY2FzdChuc2tiLCBxdWV1ZS0+cGVlcl9waWQsIE1TR19ET05UV0FJVCk7CisJZXJyID0gbmZuZXRsaW5rX3VuaWNhc3QobnNrYiwgJmluaXRfbmV0LCBxdWV1ZS0+cGVlcl9waWQsIE1TR19ET05UV0FJVCk7CiAJaWYgKGVyciA8IDApIHsKIAkJcXVldWUtPnF1ZXVlX3VzZXJfZHJvcHBlZCsrOwogCQlnb3RvIGVycl9vdXRfdW5sb2NrOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jIGIvbmV0L25ldGZpbHRlci94X3RhYmxlcy5jCmluZGV4IGYwMTk1NWMuLjBhMTJjZWQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveF90YWJsZXMuYworKysgYi9uZXQvbmV0ZmlsdGVyL3hfdGFibGVzLmMKQEAgLTI2LDcgKzI2LDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9hcnAuaD4KLQorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY2L2lwNl90YWJsZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaD4KIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQG5ldGZpbHRlci5vcmc+Iik7CkBAIC0zNyw3ICszOSw3IEBACiBzdHJ1Y3QgY29tcGF0X2RlbHRhIHsKIAlzdHJ1Y3QgY29tcGF0X2RlbHRhICpuZXh0OwogCXVuc2lnbmVkIGludCBvZmZzZXQ7Ci0Jc2hvcnQgZGVsdGE7CisJaW50IGRlbHRhOwogfTsKIAogc3RydWN0IHh0X2FmIHsKQEAgLTM2NCw4ICszNjYsMTAgQEAKIAkJICogZWJ0X2Ftb25nIGlzIGV4ZW1wdCBmcm9tIGNlbnRyYWxpemVkIG1hdGNoc2l6ZSBjaGVja2luZwogCQkgKiBiZWNhdXNlIGl0IHVzZXMgYSBkeW5hbWljLXNpemUgZGF0YSBzZXQuCiAJCSAqLwotCQlwcl9lcnIoIiVzX3RhYmxlczogJXMgbWF0Y2g6IGludmFsaWQgc2l6ZSAlWnUgIT0gJXVcbiIsCisJCXByX2VycigiJXNfdGFibGVzOiAlcy4ldSBtYXRjaDogaW52YWxpZCBzaXplICIKKwkJICAgICAgICIldSAoa2VybmVsKSAhPSAodXNlcikgJXVcbiIsCiAJCSAgICAgICB4dF9wcmVmaXhbcGFyLT5mYW1pbHldLCBwYXItPm1hdGNoLT5uYW1lLAorCQkgICAgICAgcGFyLT5tYXRjaC0+cmV2aXNpb24sCiAJCSAgICAgICBYVF9BTElHTihwYXItPm1hdGNoLT5tYXRjaHNpemUpLCBzaXplKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNDM1LDEwICs0MzksMTAgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHh0X2NvbXBhdF9mbHVzaF9vZmZzZXRzKTsKIAotc2hvcnQgeHRfY29tcGF0X2NhbGNfanVtcCh1X2ludDhfdCBhZiwgdW5zaWduZWQgaW50IG9mZnNldCkKK2ludCB4dF9jb21wYXRfY2FsY19qdW1wKHVfaW50OF90IGFmLCB1bnNpZ25lZCBpbnQgb2Zmc2V0KQogewogCXN0cnVjdCBjb21wYXRfZGVsdGEgKnRtcDsKLQlzaG9ydCBkZWx0YTsKKwlpbnQgZGVsdGE7CiAKIAlmb3IgKHRtcCA9IHh0W2FmXS5jb21wYXRfb2Zmc2V0cywgZGVsdGEgPSAwOyB0bXA7IHRtcCA9IHRtcC0+bmV4dCkKIAkJaWYgKHRtcC0+b2Zmc2V0IDwgb2Zmc2V0KQpAQCAtNDgxLDggKzQ4NSw4IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh4dF9jb21wYXRfbWF0Y2hfZnJvbV91c2VyKTsKIAotaW50IHh0X2NvbXBhdF9tYXRjaF90b191c2VyKHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqbSwgdm9pZCBfX3VzZXIgKipkc3RwdHIsCi0JCQkgICAgdW5zaWduZWQgaW50ICpzaXplKQoraW50IHh0X2NvbXBhdF9tYXRjaF90b191c2VyKGNvbnN0IHN0cnVjdCB4dF9lbnRyeV9tYXRjaCAqbSwKKwkJCSAgICB2b2lkIF9fdXNlciAqKmRzdHB0ciwgdW5zaWduZWQgaW50ICpzaXplKQogewogCWNvbnN0IHN0cnVjdCB4dF9tYXRjaCAqbWF0Y2ggPSBtLT51Lmtlcm5lbC5tYXRjaDsKIAlzdHJ1Y3QgY29tcGF0X3h0X2VudHJ5X21hdGNoIF9fdXNlciAqY20gPSAqZHN0cHRyOwpAQCAtNTE0LDggKzUxOCwxMCBAQAogCQkgICAgdW5zaWduZWQgaW50IHNpemUsIHVfaW50OF90IHByb3RvLCBib29sIGludl9wcm90bykKIHsKIAlpZiAoWFRfQUxJR04ocGFyLT50YXJnZXQtPnRhcmdldHNpemUpICE9IHNpemUpIHsKLQkJcHJfZXJyKCIlc190YWJsZXM6ICVzIHRhcmdldDogaW52YWxpZCBzaXplICVadSAhPSAldVxuIiwKKwkJcHJfZXJyKCIlc190YWJsZXM6ICVzLiV1IHRhcmdldDogaW52YWxpZCBzaXplICIKKwkJICAgICAgICIldSAoa2VybmVsKSAhPSAodXNlcikgJXVcbiIsCiAJCSAgICAgICB4dF9wcmVmaXhbcGFyLT5mYW1pbHldLCBwYXItPnRhcmdldC0+bmFtZSwKKwkJICAgICAgIHBhci0+dGFyZ2V0LT5yZXZpc2lvbiwKIAkJICAgICAgIFhUX0FMSUdOKHBhci0+dGFyZ2V0LT50YXJnZXRzaXplKSwgc2l6ZSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTU4Miw4ICs1ODgsOCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoeHRfY29tcGF0X3RhcmdldF9mcm9tX3VzZXIpOwogCi1pbnQgeHRfY29tcGF0X3RhcmdldF90b191c2VyKHN0cnVjdCB4dF9lbnRyeV90YXJnZXQgKnQsIHZvaWQgX191c2VyICoqZHN0cHRyLAotCQkJICAgICB1bnNpZ25lZCBpbnQgKnNpemUpCitpbnQgeHRfY29tcGF0X3RhcmdldF90b191c2VyKGNvbnN0IHN0cnVjdCB4dF9lbnRyeV90YXJnZXQgKnQsCisJCQkgICAgIHZvaWQgX191c2VyICoqZHN0cHRyLCB1bnNpZ25lZCBpbnQgKnNpemUpCiB7CiAJY29uc3Qgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0ID0gdC0+dS5rZXJuZWwudGFyZ2V0OwogCXN0cnVjdCBjb21wYXRfeHRfZW50cnlfdGFyZ2V0IF9fdXNlciAqY3QgPSAqZHN0cHRyOwpAQCAtMTA5MSw2ICsxMDk3LDYwIEBACiAKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCisvKioKKyAqIHh0X2hvb2tfbGluayAtIHNldCB1cCBob29rcyBmb3IgYSBuZXcgdGFibGUKKyAqIEB0YWJsZToJdGFibGUgd2l0aCBtZXRhZGF0YSBuZWVkZWQgdG8gc2V0IHVwIGhvb2tzCisgKiBAZm46CQlIb29rIGZ1bmN0aW9uCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHRha2UgY2FyZSBvZiBjcmVhdGluZyBhbmQgcmVnaXN0ZXJpbmcgdGhlIG5lY2Vzc2FyeQorICogTmV0ZmlsdGVyIGhvb2tzIGZvciBYVCB0YWJsZXMuCisgKi8KK3N0cnVjdCBuZl9ob29rX29wcyAqeHRfaG9va19saW5rKGNvbnN0IHN0cnVjdCB4dF90YWJsZSAqdGFibGUsIG5mX2hvb2tmbiAqZm4pCit7CisJdW5zaWduZWQgaW50IGhvb2tfbWFzayA9IHRhYmxlLT52YWxpZF9ob29rczsKKwl1aW50OF90IGksIG51bV9ob29rcyA9IGh3ZWlnaHQzMihob29rX21hc2spOworCXVpbnQ4X3QgaG9va251bTsKKwlzdHJ1Y3QgbmZfaG9va19vcHMgKm9wczsKKwlpbnQgcmV0OworCisJb3BzID0ga21hbGxvYyhzaXplb2YoKm9wcykgKiBudW1faG9va3MsIEdGUF9LRVJORUwpOworCWlmIChvcHMgPT0gTlVMTCkKKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisKKwlmb3IgKGkgPSAwLCBob29rbnVtID0gMDsgaSA8IG51bV9ob29rcyAmJiBob29rX21hc2sgIT0gMDsKKwkgICAgIGhvb2tfbWFzayA+Pj0gMSwgKytob29rbnVtKSB7CisJCWlmICghKGhvb2tfbWFzayAmIDEpKQorCQkJY29udGludWU7CisJCW9wc1tpXS5ob29rICAgICA9IGZuOworCQlvcHNbaV0ub3duZXIgICAgPSB0YWJsZS0+bWU7CisJCW9wc1tpXS5wZiAgICAgICA9IHRhYmxlLT5hZjsKKwkJb3BzW2ldLmhvb2tudW0gID0gaG9va251bTsKKwkJb3BzW2ldLnByaW9yaXR5ID0gdGFibGUtPnByaW9yaXR5OworCQkrK2k7CisJfQorCisJcmV0ID0gbmZfcmVnaXN0ZXJfaG9va3Mob3BzLCBudW1faG9va3MpOworCWlmIChyZXQgPCAwKSB7CisJCWtmcmVlKG9wcyk7CisJCXJldHVybiBFUlJfUFRSKHJldCk7CisJfQorCisJcmV0dXJuIG9wczsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHh0X2hvb2tfbGluayk7CisKKy8qKgorICogeHRfaG9va191bmxpbmsgLSByZW1vdmUgaG9va3MgZm9yIGEgdGFibGUKKyAqIEBvcHM6CW5mX2hvb2tfb3BzIGFycmF5IGFzIHJldHVybmVkIGJ5IG5mX2hvb2tfbGluaworICogQGhvb2tfbWFzazoJdGhlIHZlcnkgc2FtZSBtYXNrIHRoYXQgd2FzIHBhc3NlZCB0byBuZl9ob29rX2xpbmsKKyAqLwordm9pZCB4dF9ob29rX3VubGluayhjb25zdCBzdHJ1Y3QgeHRfdGFibGUgKnRhYmxlLCBzdHJ1Y3QgbmZfaG9va19vcHMgKm9wcykKK3sKKwluZl91bnJlZ2lzdGVyX2hvb2tzKG9wcywgaHdlaWdodDMyKHRhYmxlLT52YWxpZF9ob29rcykpOworCWtmcmVlKG9wcyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh4dF9ob29rX3VubGluayk7CisKIGludCB4dF9wcm90b19pbml0KHN0cnVjdCBuZXQgKm5ldCwgdV9pbnQ4X3QgYWYpCiB7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfQ1QuYyBiL25ldC9uZXRmaWx0ZXIveHRfQ1QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWM1MGZhCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci94dF9DVC5jCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDEwIFBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlbGludXguaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X0NULmg+CisjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19oZWxwZXIuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19lY2FjaGUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja196b25lcy5oPgorCitzdGF0aWMgdW5zaWduZWQgaW50IHh0X2N0X3RhcmdldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCSBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtICpwYXIpCit7CisJY29uc3Qgc3RydWN0IHh0X2N0X3RhcmdldF9pbmZvICppbmZvID0gcGFyLT50YXJnaW5mbzsKKwlzdHJ1Y3QgbmZfY29ubiAqY3QgPSBpbmZvLT5jdDsKKworCS8qIFByZXZpb3VzbHkgc2VlbiAobG9vcGJhY2spPyBJZ25vcmUuICovCisJaWYgKHNrYi0+bmZjdCAhPSBOVUxMKQorCQlyZXR1cm4gWFRfQ09OVElOVUU7CisKKwlhdG9taWNfaW5jKCZjdC0+Y3RfZ2VuZXJhbC51c2UpOworCXNrYi0+bmZjdCA9ICZjdC0+Y3RfZ2VuZXJhbDsKKwlza2ItPm5mY3RpbmZvID0gSVBfQ1RfTkVXOworCisJcmV0dXJuIFhUX0NPTlRJTlVFOworfQorCitzdGF0aWMgdTggeHRfY3RfZmluZF9wcm90byhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcikKK3sKKwlpZiAocGFyLT5mYW1pbHkgPT0gQUZfSU5FVCkgeworCQljb25zdCBzdHJ1Y3QgaXB0X2VudHJ5ICplID0gcGFyLT5lbnRyeWluZm87CisKKwkJaWYgKGUtPmlwLmludmZsYWdzICYgSVBUX0lOVl9QUk9UTykKKwkJCXJldHVybiAwOworCQlyZXR1cm4gZS0+aXAucHJvdG87CisJfSBlbHNlIGlmIChwYXItPmZhbWlseSA9PSBBRl9JTkVUNikgeworCQljb25zdCBzdHJ1Y3QgaXA2dF9lbnRyeSAqZSA9IHBhci0+ZW50cnlpbmZvOworCisJCWlmIChlLT5pcHY2LmludmZsYWdzICYgSVA2VF9JTlZfUFJPVE8pCisJCQlyZXR1cm4gMDsKKwkJcmV0dXJuIGUtPmlwdjYucHJvdG87CisJfSBlbHNlCisJCXJldHVybiAwOworfQorCitzdGF0aWMgYm9vbCB4dF9jdF90Z19jaGVjayhjb25zdCBzdHJ1Y3QgeHRfdGdjaGtfcGFyYW0gKnBhcikKK3sKKwlzdHJ1Y3QgeHRfY3RfdGFyZ2V0X2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOworCXN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgdDsKKwlzdHJ1Y3QgbmZfY29ubl9oZWxwICpoZWxwOworCXN0cnVjdCBuZl9jb25uICpjdDsKKwl1OCBwcm90bzsKKworCWlmIChpbmZvLT5mbGFncyAmIH5YVF9DVF9OT1RSQUNLKQorCQlyZXR1cm4gZmFsc2U7CisKKwlpZiAoaW5mby0+ZmxhZ3MgJiBYVF9DVF9OT1RSQUNLKSB7CisJCWN0ID0gJm5mX2Nvbm50cmFja191bnRyYWNrZWQ7CisJCWF0b21pY19pbmMoJmN0LT5jdF9nZW5lcmFsLnVzZSk7CisJCWdvdG8gb3V0OworCX0KKworI2lmbmRlZiBDT05GSUdfTkZfQ09OTlRSQUNLX1pPTkVTCisJaWYgKGluZm8tPnpvbmUpCisJCWdvdG8gZXJyMTsKKyNlbmRpZgorCisJaWYgKG5mX2N0X2wzcHJvdG9fdHJ5X21vZHVsZV9nZXQocGFyLT5mYW1pbHkpIDwgMCkKKwkJZ290byBlcnIxOworCisJbWVtc2V0KCZ0LCAwLCBzaXplb2YodCkpOworCWN0ID0gbmZfY29ubnRyYWNrX2FsbG9jKHBhci0+bmV0LCBpbmZvLT56b25lLCAmdCwgJnQsIEdGUF9LRVJORUwpOworCWlmIChJU19FUlIoY3QpKQorCQlnb3RvIGVycjI7CisKKwlpZiAoKGluZm8tPmN0X2V2ZW50cyB8fCBpbmZvLT5leHBfZXZlbnRzKSAmJgorCSAgICAhbmZfY3RfZWNhY2hlX2V4dF9hZGQoY3QsIGluZm8tPmN0X2V2ZW50cywgaW5mby0+ZXhwX2V2ZW50cywKKwkJCQkgIEdGUF9LRVJORUwpKQorCQlnb3RvIGVycjM7CisKKwlpZiAoaW5mby0+aGVscGVyWzBdKSB7CisJCXByb3RvID0geHRfY3RfZmluZF9wcm90byhwYXIpOworCQlpZiAoIXByb3RvKQorCQkJZ290byBlcnIzOworCisJCWhlbHAgPSBuZl9jdF9oZWxwZXJfZXh0X2FkZChjdCwgR0ZQX0tFUk5FTCk7CisJCWlmIChoZWxwID09IE5VTEwpCisJCQlnb3RvIGVycjM7CisKKwkJaGVscC0+aGVscGVyID0gbmZfY29ubnRyYWNrX2hlbHBlcl90cnlfbW9kdWxlX2dldChpbmZvLT5oZWxwZXIsCisJCQkJCQkJCSAgcGFyLT5mYW1pbHksCisJCQkJCQkJCSAgcHJvdG8pOworCQlpZiAoaGVscC0+aGVscGVyID09IE5VTEwpCisJCQlnb3RvIGVycjM7CisJfQorCisJX19zZXRfYml0KElQU19URU1QTEFURV9CSVQsICZjdC0+c3RhdHVzKTsKKwlfX3NldF9iaXQoSVBTX0NPTkZJUk1FRF9CSVQsICZjdC0+c3RhdHVzKTsKK291dDoKKwlpbmZvLT5jdCA9IGN0OworCXJldHVybiB0cnVlOworCitlcnIzOgorCW5mX2Nvbm50cmFja19mcmVlKGN0KTsKK2VycjI6CisJbmZfY3RfbDNwcm90b19tb2R1bGVfcHV0KHBhci0+ZmFtaWx5KTsKK2VycjE6CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgdm9pZCB4dF9jdF90Z19kZXN0cm95KGNvbnN0IHN0cnVjdCB4dF90Z2R0b3JfcGFyYW0gKnBhcikKK3sKKwlzdHJ1Y3QgeHRfY3RfdGFyZ2V0X2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOworCXN0cnVjdCBuZl9jb25uICpjdCA9IGluZm8tPmN0OworCXN0cnVjdCBuZl9jb25uX2hlbHAgKmhlbHA7CisKKwlpZiAoY3QgIT0gJm5mX2Nvbm50cmFja191bnRyYWNrZWQpIHsKKwkJaGVscCA9IG5mY3RfaGVscChjdCk7CisJCWlmIChoZWxwKQorCQkJbW9kdWxlX3B1dChoZWxwLT5oZWxwZXItPm1lKTsKKworCQluZl9jdF9sM3Byb3RvX21vZHVsZV9wdXQocGFyLT5mYW1pbHkpOworCX0KKwluZl9jdF9wdXQoaW5mby0+Y3QpOworfQorCitzdGF0aWMgc3RydWN0IHh0X3RhcmdldCB4dF9jdF90ZyBfX3JlYWRfbW9zdGx5ID0geworCS5uYW1lCQk9ICJDVCIsCisJLmZhbWlseQkJPSBORlBST1RPX1VOU1BFQywKKwkudGFyZ2V0c2l6ZQk9IFhUX0FMSUdOKHNpemVvZihzdHJ1Y3QgeHRfY3RfdGFyZ2V0X2luZm8pKSwKKwkuY2hlY2tlbnRyeQk9IHh0X2N0X3RnX2NoZWNrLAorCS5kZXN0cm95CT0geHRfY3RfdGdfZGVzdHJveSwKKwkudGFyZ2V0CQk9IHh0X2N0X3RhcmdldCwKKwkudGFibGUJCT0gInJhdyIsCisJLm1lCQk9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGludCBfX2luaXQgeHRfY3RfdGdfaW5pdCh2b2lkKQoreworCXJldHVybiB4dF9yZWdpc3Rlcl90YXJnZXQoJnh0X2N0X3RnKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHh0X2N0X3RnX2V4aXQodm9pZCkKK3sKKwl4dF91bnJlZ2lzdGVyX3RhcmdldCgmeHRfY3RfdGcpOworfQorCittb2R1bGVfaW5pdCh4dF9jdF90Z19pbml0KTsKK21vZHVsZV9leGl0KHh0X2N0X3RnX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlh0YWJsZXM6IGNvbm5lY3Rpb24gdHJhY2tpbmcgdGFyZ2V0Iik7CitNT0RVTEVfQUxJQVMoImlwdF9DVCIpOworTU9EVUxFX0FMSUFTKCJpcDZ0X0NUIik7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X05GUVVFVUUuYyBiL25ldC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5jCmluZGV4IGYyOGY2YTUuLjEyZGNkNzAgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5jCkBAIC0yOCw2ICsyOCw3IEBACiBNT0RVTEVfQUxJQVMoImFycHRfTkZRVUVVRSIpOwogCiBzdGF0aWMgdTMyIGpoYXNoX2luaXR2YWwgX19yZWFkX21vc3RseTsKK3N0YXRpYyBib29sIHJuZF9pbml0ZWQgX19yZWFkX21vc3RseTsKIAogc3RhdGljIHVuc2lnbmVkIGludAogbmZxdWV1ZV90ZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfdGFyZ2V0X3BhcmFtICpwYXIpCkBAIC05MCw2ICs5MSwxMCBAQAogCWNvbnN0IHN0cnVjdCB4dF9ORlFfaW5mb192MSAqaW5mbyA9IHBhci0+dGFyZ2luZm87CiAJdTMyIG1heGlkOwogCisJaWYgKHVubGlrZWx5KCFybmRfaW5pdGVkKSkgeworCQlnZXRfcmFuZG9tX2J5dGVzKCZqaGFzaF9pbml0dmFsLCBzaXplb2Yoamhhc2hfaW5pdHZhbCkpOworCQlybmRfaW5pdGVkID0gdHJ1ZTsKKwl9CiAJaWYgKGluZm8tPnF1ZXVlc190b3RhbCA9PSAwKSB7CiAJCXByX2VycigiTkZRVUVVRTogbnVtYmVyIG9mIHRvdGFsIHF1ZXVlcyBpcyAwXG4iKTsKIAkJcmV0dXJuIGZhbHNlOwpAQCAtMTM1LDcgKzE0MCw2IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IG5mcXVldWVfdGdfaW5pdCh2b2lkKQogewotCWdldF9yYW5kb21fYnl0ZXMoJmpoYXNoX2luaXR2YWwsIHNpemVvZihqaGFzaF9pbml0dmFsKSk7CiAJcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldHMobmZxdWV1ZV90Z19yZWcsIEFSUkFZX1NJWkUobmZxdWV1ZV90Z19yZWcpKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9SQVRFRVNULmMgYi9uZXQvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuYwppbmRleCBkODBiODE5Li44N2FlOTdlIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X1JBVEVFU1QuYwpAQCAtMjMsNiArMjMsNyBAQAogI2RlZmluZSBSQVRFRVNUX0hTSVpFCTE2CiBzdGF0aWMgc3RydWN0IGhsaXN0X2hlYWQgcmF0ZWVzdF9oYXNoW1JBVEVFU1RfSFNJWkVdIF9fcmVhZF9tb3N0bHk7CiBzdGF0aWMgdW5zaWduZWQgaW50IGpoYXNoX3JuZCBfX3JlYWRfbW9zdGx5Oworc3RhdGljIGJvb2wgcm5kX2luaXRlZCBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgdW5zaWduZWQgaW50IHh0X3JhdGVlc3RfaGFzaChjb25zdCBjaGFyICpuYW1lKQogewpAQCAtOTMsNiArOTQsMTEgQEAKIAkJc3RydWN0IGduZXRfZXN0aW1hdG9yCWVzdDsKIAl9IGNmZzsKIAorCWlmICh1bmxpa2VseSghcm5kX2luaXRlZCkpIHsKKwkJZ2V0X3JhbmRvbV9ieXRlcygmamhhc2hfcm5kLCBzaXplb2Yoamhhc2hfcm5kKSk7CisJCXJuZF9pbml0ZWQgPSB0cnVlOworCX0KKwogCWVzdCA9IHh0X3JhdGVlc3RfbG9va3VwKGluZm8tPm5hbWUpOwogCWlmIChlc3QpIHsKIAkJLyoKQEAgLTE2NCw3ICsxNzAsNiBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhdGVlc3RfaGFzaCk7IGkrKykKIAkJSU5JVF9ITElTVF9IRUFEKCZyYXRlZXN0X2hhc2hbaV0pOwogCi0JZ2V0X3JhbmRvbV9ieXRlcygmamhhc2hfcm5kLCBzaXplb2Yoamhhc2hfcm5kKSk7CiAJcmV0dXJuIHh0X3JlZ2lzdGVyX3RhcmdldCgmeHRfcmF0ZWVzdF90Z19yZWcpOwogfQogCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X1RDUE1TUy5jIGIvbmV0L25ldGZpbHRlci94dF9UQ1BNU1MuYwppbmRleCBlZGE2NGMxLi4wZTM1N2FjIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X1RDUE1TUy5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfVENQTVNTLmMKQEAgLTYwLDE3ICs2MCw5IEBACiAJdGNwbGVuID0gc2tiLT5sZW4gLSB0Y3Bob2ZmOwogCXRjcGggPSAoc3RydWN0IHRjcGhkciAqKShza2JfbmV0d29ya19oZWFkZXIoc2tiKSArIHRjcGhvZmYpOwogCi0JLyogU2luY2UgaXQgcGFzc2VkIGZsYWdzIHRlc3QgaW4gdGNwIG1hdGNoLCB3ZSBrbm93IGl0IGlzIGlzCi0JICAgbm90IGEgZnJhZ21lbnQsIGFuZCBoYXMgZGF0YSA+PSB0Y3AgaGVhZGVyIGxlbmd0aC4gIFNZTgotCSAgIHBhY2tldHMgc2hvdWxkIG5vdCBjb250YWluIGRhdGE6IGlmIHRoZXkgZGlkLCB0aGVuIHdlIHJpc2sKLQkgICBydW5uaW5nIG92ZXIgTVRVLCBzZW5kaW5nIEZyYWcgTmVlZGVkIGFuZCBicmVha2luZyB0aGluZ3MKLQkgICBiYWRseS4gLS1SUiAqLwotCWlmICh0Y3BsZW4gIT0gdGNwaC0+ZG9mZio0KSB7Ci0JCWlmIChuZXRfcmF0ZWxpbWl0KCkpCi0JCQlwcmludGsoS0VSTl9FUlIgInh0X1RDUE1TUzogYmFkIGxlbmd0aCAoJXUgYnl0ZXMpXG4iLAotCQkJICAgICAgIHNrYi0+bGVuKTsKKwkvKiBIZWFkZXIgY2Fubm90IGJlIGxhcmdlciB0aGFuIHRoZSBwYWNrZXQgKi8KKwlpZiAodGNwbGVuIDwgdGNwaC0+ZG9mZio0KQogCQlyZXR1cm4gLTE7Ci0JfQogCiAJaWYgKGluZm8tPm1zcyA9PSBYVF9UQ1BNU1NfQ0xBTVBfUE1UVSkgewogCQlpZiAoZHN0X210dShza2JfZHN0KHNrYikpIDw9IG1pbmxlbikgewpAQCAtMTE1LDYgKzEwNywxMiBAQAogCQl9CiAJfQogCisJLyogVGhlcmUgaXMgZGF0YSBhZnRlciB0aGUgaGVhZGVyIHNvIHRoZSBvcHRpb24gY2FuJ3QgYmUgYWRkZWQKKwkgICB3aXRob3V0IG1vdmluZyBpdCwgYW5kIGRvaW5nIHNvIG1heSBtYWtlIHRoZSBTWU4gcGFja2V0CisJICAgaXRzZWxmIHRvbyBsYXJnZS4gQWNjZXB0IHRoZSBwYWNrZXQgdW5tb2RpZmllZCBpbnN0ZWFkLiAqLworCWlmICh0Y3BsZW4gPiB0Y3BoLT5kb2ZmKjQpCisJCXJldHVybiAwOworCiAJLyoKIAkgKiBNU1MgT3B0aW9uIG5vdCBmb3VuZCA/ISBhZGQgaXQuLgogCSAqLwpAQCAtMjQxLDYgKzIzOSw3IEBACiB7CiAJY29uc3Qgc3RydWN0IHh0X3RjcG1zc19pbmZvICppbmZvID0gcGFyLT50YXJnaW5mbzsKIAljb25zdCBzdHJ1Y3QgaXB0X2VudHJ5ICplID0gcGFyLT5lbnRyeWluZm87CisJY29uc3Qgc3RydWN0IHh0X2VudHJ5X21hdGNoICplbWF0Y2g7CiAKIAlpZiAoaW5mby0+bXNzID09IFhUX1RDUE1TU19DTEFNUF9QTVRVICYmCiAJICAgIChwYXItPmhvb2tfbWFzayAmIH4oKDEgPDwgTkZfSU5FVF9GT1JXQVJEKSB8CkBAIC0yNTAsOCArMjQ5LDkgQEAKIAkJICAgICAgICJGT1JXQVJELCBPVVRQVVQgYW5kIFBPU1RST1VUSU5HIGhvb2tzXG4iKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQlpZiAoSVBUX01BVENIX0lURVJBVEUoZSwgZmluZF9zeW5fbWF0Y2gpKQotCQlyZXR1cm4gdHJ1ZTsKKwl4dF9lbWF0Y2hfZm9yZWFjaChlbWF0Y2gsIGUpCisJCWlmIChmaW5kX3N5bl9tYXRjaChlbWF0Y2gpKQorCQkJcmV0dXJuIHRydWU7CiAJcHJpbnRrKCJ4dF9UQ1BNU1M6IE9ubHkgd29ya3Mgb24gVENQIFNZTiBwYWNrZXRzXG4iKTsKIAlyZXR1cm4gZmFsc2U7CiB9CkBAIC0yNjEsNiArMjYxLDcgQEAKIHsKIAljb25zdCBzdHJ1Y3QgeHRfdGNwbXNzX2luZm8gKmluZm8gPSBwYXItPnRhcmdpbmZvOwogCWNvbnN0IHN0cnVjdCBpcDZ0X2VudHJ5ICplID0gcGFyLT5lbnRyeWluZm87CisJY29uc3Qgc3RydWN0IHh0X2VudHJ5X21hdGNoICplbWF0Y2g7CiAKIAlpZiAoaW5mby0+bXNzID09IFhUX1RDUE1TU19DTEFNUF9QTVRVICYmCiAJICAgIChwYXItPmhvb2tfbWFzayAmIH4oKDEgPDwgTkZfSU5FVF9GT1JXQVJEKSB8CkBAIC0yNzAsOCArMjcxLDkgQEAKIAkJICAgICAgICJGT1JXQVJELCBPVVRQVVQgYW5kIFBPU1RST1VUSU5HIGhvb2tzXG4iKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQlpZiAoSVA2VF9NQVRDSF9JVEVSQVRFKGUsIGZpbmRfc3luX21hdGNoKSkKLQkJcmV0dXJuIHRydWU7CisJeHRfZW1hdGNoX2ZvcmVhY2goZW1hdGNoLCBlKQorCQlpZiAoZmluZF9zeW5fbWF0Y2goZW1hdGNoKSkKKwkJCXJldHVybiB0cnVlOwogCXByaW50aygieHRfVENQTVNTOiBPbmx5IHdvcmtzIG9uIFRDUCBTWU4gcGFja2V0c1xuIik7CiAJcmV0dXJuIGZhbHNlOwogfQpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9jb25ubGltaXQuYyBiL25ldC9uZXRmaWx0ZXIveHRfY29ubmxpbWl0LmMKaW5kZXggMzhmMDNmNy4uMjY5OTdjZSAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9jb25ubGltaXQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X2Nvbm5saW1pdC5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2suaD4KICNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmg+CiAjaW5jbHVkZSA8bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGUuaD4KKyNpbmNsdWRlIDxuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja196b25lcy5oPgogCiAvKiB3ZSB3aWxsIHNhdmUgdGhlIHR1cGxlcyBvZiBhbGwgY29ubmVjdGlvbnMgd2UgY2FyZSBhYm91dCAqLwogc3RydWN0IHh0X2Nvbm5saW1pdF9jb25uIHsKQEAgLTQwLDE1ICs0MSwxMSBAQAogCXNwaW5sb2NrX3QgbG9jazsKIH07CiAKLXN0YXRpYyB1X2ludDMyX3QgY29ubmxpbWl0X3JuZDsKLXN0YXRpYyBib29sIGNvbm5saW1pdF9ybmRfaW5pdGVkOworc3RhdGljIHVfaW50MzJfdCBjb25ubGltaXRfcm5kIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgYm9vbCBjb25ubGltaXRfcm5kX2luaXRlZCBfX3JlYWRfbW9zdGx5OwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjb25ubGltaXRfaXBoYXNoKF9fYmUzMiBhZGRyKQogewotCWlmICh1bmxpa2VseSghY29ubmxpbWl0X3JuZF9pbml0ZWQpKSB7Ci0JCWdldF9yYW5kb21fYnl0ZXMoJmNvbm5saW1pdF9ybmQsIHNpemVvZihjb25ubGltaXRfcm5kKSk7Ci0JCWNvbm5saW1pdF9ybmRfaW5pdGVkID0gdHJ1ZTsKLQl9CiAJcmV0dXJuIGpoYXNoXzF3b3JkKChfX2ZvcmNlIF9fdTMyKWFkZHIsIGNvbm5saW1pdF9ybmQpICYgMHhGRjsKIH0KIApAQCAtNTksMTEgKzU2LDYgQEAKIAl1bmlvbiBuZl9pbmV0X2FkZHIgcmVzOwogCXVuc2lnbmVkIGludCBpOwogCi0JaWYgKHVubGlrZWx5KCFjb25ubGltaXRfcm5kX2luaXRlZCkpIHsKLQkJZ2V0X3JhbmRvbV9ieXRlcygmY29ubmxpbWl0X3JuZCwgc2l6ZW9mKGNvbm5saW1pdF9ybmQpKTsKLQkJY29ubmxpbWl0X3JuZF9pbml0ZWQgPSB0cnVlOwotCX0KLQogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkZHItPmlwNik7ICsraSkKIAkJcmVzLmlwNltpXSA9IGFkZHItPmlwNltpXSAmIG1hc2stPmlwNltpXTsKIApAQCAtOTksNyArOTEsOCBAQAogCX0KIH0KIAotc3RhdGljIGludCBjb3VudF90aGVtKHN0cnVjdCB4dF9jb25ubGltaXRfZGF0YSAqZGF0YSwKK3N0YXRpYyBpbnQgY291bnRfdGhlbShzdHJ1Y3QgbmV0ICpuZXQsCisJCSAgICAgIHN0cnVjdCB4dF9jb25ubGltaXRfZGF0YSAqZGF0YSwKIAkJICAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSAqdHVwbGUsCiAJCSAgICAgIGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkciwKIAkJICAgICAgY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICptYXNrLApAQCAtMTIyLDcgKzExNSw4IEBACiAKIAkvKiBjaGVjayB0aGUgc2F2ZWQgY29ubmVjdGlvbnMgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY29ubiwgdG1wLCBoYXNoLCBsaXN0KSB7Ci0JCWZvdW5kICAgID0gbmZfY29ubnRyYWNrX2ZpbmRfZ2V0KCZpbml0X25ldCwgJmNvbm4tPnR1cGxlKTsKKwkJZm91bmQgICAgPSBuZl9jb25udHJhY2tfZmluZF9nZXQobmV0LCBORl9DVF9ERUZBVUxUX1pPTkUsCisJCQkJCQkgJmNvbm4tPnR1cGxlKTsKIAkJZm91bmRfY3QgPSBOVUxMOwogCiAJCWlmIChmb3VuZCAhPSBOVUxMKQpAQCAtMTgwLDYgKzE3NCw3IEBACiBzdGF0aWMgYm9vbAogY29ubmxpbWl0X210KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCB4dF9tYXRjaF9wYXJhbSAqcGFyKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQocGFyLT5pbiA/IHBhci0+aW4gOiBwYXItPm91dCk7CiAJY29uc3Qgc3RydWN0IHh0X2Nvbm5saW1pdF9pbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87CiAJdW5pb24gbmZfaW5ldF9hZGRyIGFkZHI7CiAJc3RydWN0IG5mX2Nvbm50cmFja190dXBsZSB0dXBsZTsKQEAgLTIwNCw3ICsxOTksNyBAQAogCX0KIAogCXNwaW5fbG9ja19iaCgmaW5mby0+ZGF0YS0+bG9jayk7Ci0JY29ubmVjdGlvbnMgPSBjb3VudF90aGVtKGluZm8tPmRhdGEsIHR1cGxlX3B0ciwgJmFkZHIsCisJY29ubmVjdGlvbnMgPSBjb3VudF90aGVtKG5ldCwgaW5mby0+ZGF0YSwgdHVwbGVfcHRyLCAmYWRkciwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgJmluZm8tPm1hc2ssIHBhci0+ZmFtaWx5KTsKIAlzcGluX3VubG9ja19iaCgmaW5mby0+ZGF0YS0+bG9jayk7CiAKQEAgLTIyNiw2ICsyMjEsMTAgQEAKIAlzdHJ1Y3QgeHRfY29ubmxpbWl0X2luZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKIAl1bnNpZ25lZCBpbnQgaTsKIAorCWlmICh1bmxpa2VseSghY29ubmxpbWl0X3JuZF9pbml0ZWQpKSB7CisJCWdldF9yYW5kb21fYnl0ZXMoJmNvbm5saW1pdF9ybmQsIHNpemVvZihjb25ubGltaXRfcm5kKSk7CisJCWNvbm5saW1pdF9ybmRfaW5pdGVkID0gdHJ1ZTsKKwl9CiAJaWYgKG5mX2N0X2wzcHJvdG9fdHJ5X21vZHVsZV9nZXQocGFyLT5mYW1pbHkpIDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjYW5ub3QgbG9hZCBjb25udHJhY2sgc3VwcG9ydCBmb3IgIgogCQkgICAgICAgImFkZHJlc3MgZmFtaWx5ICV1XG4iLCBwYXItPmZhbWlseSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jIGIvbmV0L25ldGZpbHRlci94dF9oYXNobGltaXQuYwppbmRleCBkZDE2ZTQwLi45ZTljNDg5IDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X2hhc2hsaW1pdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfaGFzaGxpbWl0LmMKQEAgLTEsNiArMSw2IEBACiAvKgogICoJeHRfaGFzaGxpbWl0IC0gTmV0ZmlsdGVyIG1vZHVsZSB0byBsaW1pdCB0aGUgbnVtYmVyIG9mIHBhY2tldHMgcGVyIHRpbWUKLSAqCXNlcGVyYXRlbHkgZm9yIGVhY2ggaGFzaGJ1Y2tldCAoc291cmNlaXAvc291cmNlcG9ydC9kc3RpcC9kc3Rwb3J0KQorICoJc2VwYXJhdGVseSBmb3IgZWFjaCBoYXNoYnVja2V0IChzb3VyY2VpcC9zb3VyY2Vwb3J0L2RzdGlwL2RzdHBvcnQpCiAgKgogICoJKEMpIDIwMDMtMjAwNCBieSBIYXJhbGQgV2VsdGUgPGxhZm9yZ2VAbmV0ZmlsdGVyLm9yZz4KICAqCUNvcHlyaWdodCDCqSBDQyBDb21wdXRlciBDb25zdWx0YW50cyBHbWJILCAyMDA3IC0gMjAwOApAQCAtMjYsNiArMjYsNyBAQAogI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQvbmV0X25hbWVzcGFjZS5oPgorI2luY2x1ZGUgPG5ldC9uZXRucy9nZW5lcmljLmg+CiAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaD4KQEAgLTQwLDkgKzQxLDE5IEBACiBNT0RVTEVfQUxJQVMoImlwdF9oYXNobGltaXQiKTsKIE1PRFVMRV9BTElBUygiaXA2dF9oYXNobGltaXQiKTsKIAorc3RydWN0IGhhc2hsaW1pdF9uZXQgeworCXN0cnVjdCBobGlzdF9oZWFkCWh0YWJsZXM7CisJc3RydWN0IHByb2NfZGlyX2VudHJ5CSppcHRfaGFzaGxpbWl0OworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqaXA2dF9oYXNobGltaXQ7Cit9OworCitzdGF0aWMgaW50IGhhc2hsaW1pdF9uZXRfaWQ7CitzdGF0aWMgaW5saW5lIHN0cnVjdCBoYXNobGltaXRfbmV0ICpoYXNobGltaXRfcGVybmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlyZXR1cm4gbmV0X2dlbmVyaWMobmV0LCBoYXNobGltaXRfbmV0X2lkKTsKK30KKwogLyogbmVlZCB0byBkZWNsYXJlIHRoaXMgYXQgdGhlIHRvcCAqLwotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqaGFzaGxpbWl0X3Byb2NkaXI0Owotc3RhdGljIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqaGFzaGxpbWl0X3Byb2NkaXI2Owogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGxfZmlsZV9vcHM7CiAKIC8qIGhhc2ggdGFibGUgY3JhcCAqLwpAQCAtNzksMjcgKzkwLDI2IEBACiAKIHN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlIHsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSBub2RlOwkJLyogZ2xvYmFsIGxpc3Qgb2YgYWxsIGh0YWJsZXMgKi8KLQlhdG9taWNfdCB1c2U7CisJaW50IHVzZTsKIAl1X2ludDhfdCBmYW1pbHk7CisJYm9vbCBybmRfaW5pdGlhbGl6ZWQ7CiAKIAlzdHJ1Y3QgaGFzaGxpbWl0X2NmZzEgY2ZnOwkvKiBjb25maWcgKi8KIAogCS8qIHVzZWQgaW50ZXJuYWxseSAqLwogCXNwaW5sb2NrX3QgbG9jazsJCS8qIGxvY2sgZm9yIGxpc3RfaGVhZCAqLwogCXVfaW50MzJfdCBybmQ7CQkJLyogcmFuZG9tIHNlZWQgZm9yIGhhc2ggKi8KLQlpbnQgcm5kX2luaXRpYWxpemVkOwogCXVuc2lnbmVkIGludCBjb3VudDsJCS8qIG51bWJlciBlbnRyaWVzIGluIHRhYmxlICovCiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CS8qIHRpbWVyIGZvciBnYyAqLwogCiAJLyogc2VxX2ZpbGUgc3R1ZmYgKi8KIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZTsKKwlzdHJ1Y3QgbmV0ICpuZXQ7CiAKIAlzdHJ1Y3QgaGxpc3RfaGVhZCBoYXNoWzBdOwkvKiBoYXNodGFibGUgaXRzZWxmICovCiB9OwogCi1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGhhc2hsaW1pdF9sb2NrKTsJLyogcHJvdGVjdHMgaHRhYmxlcyBsaXN0ICovCi1zdGF0aWMgREVGSU5FX01VVEVYKGhsaW1pdF9tdXRleCk7CS8qIGFkZGl0aW9uYWwgY2hlY2tlbnRyeSBwcm90ZWN0aW9uICovCi1zdGF0aWMgSExJU1RfSEVBRChoYXNobGltaXRfaHRhYmxlcyk7CitzdGF0aWMgREVGSU5FX01VVEVYKGhhc2hsaW1pdF9tdXRleCk7CS8qIHByb3RlY3RzIGh0YWJsZXMgbGlzdCAqLwogc3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpoYXNobGltaXRfY2FjaGVwIF9fcmVhZF9tb3N0bHk7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBkc3RfY21wKGNvbnN0IHN0cnVjdCBkc3RoYXNoX2VudCAqZW50LApAQCAtMTUwLDcgKzE2MCw3IEBACiAJICogdGhlIGZpcnN0IGhhc2h0YWJsZSBlbnRyeSAqLwogCWlmICghaHQtPnJuZF9pbml0aWFsaXplZCkgewogCQlnZXRfcmFuZG9tX2J5dGVzKCZodC0+cm5kLCBzaXplb2YoaHQtPnJuZCkpOwotCQlodC0+cm5kX2luaXRpYWxpemVkID0gMTsKKwkJaHQtPnJuZF9pbml0aWFsaXplZCA9IHRydWU7CiAJfQogCiAJaWYgKGh0LT5jZmcubWF4ICYmIGh0LT5jb3VudCA+PSBodC0+Y2ZnLm1heCkgewpAQCAtMTg1LDggKzE5NSw5IEBACiB9CiBzdGF0aWMgdm9pZCBodGFibGVfZ2ModW5zaWduZWQgbG9uZyBodGxvbmcpOwogCi1zdGF0aWMgaW50IGh0YWJsZV9jcmVhdGVfdjAoc3RydWN0IHh0X2hhc2hsaW1pdF9pbmZvICptaW5mbywgdV9pbnQ4X3QgZmFtaWx5KQorc3RhdGljIGludCBodGFibGVfY3JlYXRlX3YwKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHh0X2hhc2hsaW1pdF9pbmZvICptaW5mbywgdV9pbnQ4X3QgZmFtaWx5KQogeworCXN0cnVjdCBoYXNobGltaXRfbmV0ICpoYXNobGltaXRfbmV0ID0gaGFzaGxpbWl0X3Blcm5ldChuZXQpOwogCXN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlICpoaW5mbzsKIAl1bnNpZ25lZCBpbnQgc2l6ZTsKIAl1bnNpZ25lZCBpbnQgaTsKQEAgLTIzMiwzMyArMjQzLDM0IEBACiAJZm9yIChpID0gMDsgaSA8IGhpbmZvLT5jZmcuc2l6ZTsgaSsrKQogCQlJTklUX0hMSVNUX0hFQUQoJmhpbmZvLT5oYXNoW2ldKTsKIAotCWF0b21pY19zZXQoJmhpbmZvLT51c2UsIDEpOworCWhpbmZvLT51c2UgPSAxOwogCWhpbmZvLT5jb3VudCA9IDA7CiAJaGluZm8tPmZhbWlseSA9IGZhbWlseTsKLQloaW5mby0+cm5kX2luaXRpYWxpemVkID0gMDsKKwloaW5mby0+cm5kX2luaXRpYWxpemVkID0gZmFsc2U7CiAJc3Bpbl9sb2NrX2luaXQoJmhpbmZvLT5sb2NrKTsKIAloaW5mby0+cGRlID0gcHJvY19jcmVhdGVfZGF0YShtaW5mby0+bmFtZSwgMCwKIAkJKGZhbWlseSA9PSBORlBST1RPX0lQVjQpID8KLQkJaGFzaGxpbWl0X3Byb2NkaXI0IDogaGFzaGxpbWl0X3Byb2NkaXI2LAorCQloYXNobGltaXRfbmV0LT5pcHRfaGFzaGxpbWl0IDogaGFzaGxpbWl0X25ldC0+aXA2dF9oYXNobGltaXQsCiAJCSZkbF9maWxlX29wcywgaGluZm8pOwogCWlmICghaGluZm8tPnBkZSkgewogCQl2ZnJlZShoaW5mbyk7CiAJCXJldHVybiAtMTsKIAl9CisJaGluZm8tPm5ldCA9IG5ldDsKIAogCXNldHVwX3RpbWVyKCZoaW5mby0+dGltZXIsIGh0YWJsZV9nYywgKHVuc2lnbmVkIGxvbmcgKWhpbmZvKTsKIAloaW5mby0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGhpbmZvLT5jZmcuZ2NfaW50ZXJ2YWwpOwogCWFkZF90aW1lcigmaGluZm8tPnRpbWVyKTsKIAotCXNwaW5fbG9ja19iaCgmaGFzaGxpbWl0X2xvY2spOwotCWhsaXN0X2FkZF9oZWFkKCZoaW5mby0+bm9kZSwgJmhhc2hsaW1pdF9odGFibGVzKTsKLQlzcGluX3VubG9ja19iaCgmaGFzaGxpbWl0X2xvY2spOworCWhsaXN0X2FkZF9oZWFkKCZoaW5mby0+bm9kZSwgJmhhc2hsaW1pdF9uZXQtPmh0YWJsZXMpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaHRhYmxlX2NyZWF0ZShzdHJ1Y3QgeHRfaGFzaGxpbWl0X210aW5mbzEgKm1pbmZvLCB1X2ludDhfdCBmYW1pbHkpCitzdGF0aWMgaW50IGh0YWJsZV9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeHRfaGFzaGxpbWl0X210aW5mbzEgKm1pbmZvLAorCQkJIHVfaW50OF90IGZhbWlseSkKIHsKKwlzdHJ1Y3QgaGFzaGxpbWl0X25ldCAqaGFzaGxpbWl0X25ldCA9IGhhc2hsaW1pdF9wZXJuZXQobmV0KTsKIAlzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaGluZm87CiAJdW5zaWduZWQgaW50IHNpemU7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0yOTMsMjggKzMwNSwyNyBAQAogCWZvciAoaSA9IDA7IGkgPCBoaW5mby0+Y2ZnLnNpemU7IGkrKykKIAkJSU5JVF9ITElTVF9IRUFEKCZoaW5mby0+aGFzaFtpXSk7CiAKLQlhdG9taWNfc2V0KCZoaW5mby0+dXNlLCAxKTsKKwloaW5mby0+dXNlID0gMTsKIAloaW5mby0+Y291bnQgPSAwOwogCWhpbmZvLT5mYW1pbHkgPSBmYW1pbHk7Ci0JaGluZm8tPnJuZF9pbml0aWFsaXplZCA9IDA7CisJaGluZm8tPnJuZF9pbml0aWFsaXplZCA9IGZhbHNlOwogCXNwaW5fbG9ja19pbml0KCZoaW5mby0+bG9jayk7CiAKIAloaW5mby0+cGRlID0gcHJvY19jcmVhdGVfZGF0YShtaW5mby0+bmFtZSwgMCwKIAkJKGZhbWlseSA9PSBORlBST1RPX0lQVjQpID8KLQkJaGFzaGxpbWl0X3Byb2NkaXI0IDogaGFzaGxpbWl0X3Byb2NkaXI2LAorCQloYXNobGltaXRfbmV0LT5pcHRfaGFzaGxpbWl0IDogaGFzaGxpbWl0X25ldC0+aXA2dF9oYXNobGltaXQsCiAJCSZkbF9maWxlX29wcywgaGluZm8pOwogCWlmIChoaW5mby0+cGRlID09IE5VTEwpIHsKIAkJdmZyZWUoaGluZm8pOwogCQlyZXR1cm4gLTE7CiAJfQorCWhpbmZvLT5uZXQgPSBuZXQ7CiAKIAlzZXR1cF90aW1lcigmaGluZm8tPnRpbWVyLCBodGFibGVfZ2MsICh1bnNpZ25lZCBsb25nKWhpbmZvKTsKIAloaW5mby0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGhpbmZvLT5jZmcuZ2NfaW50ZXJ2YWwpOwogCWFkZF90aW1lcigmaGluZm8tPnRpbWVyKTsKIAotCXNwaW5fbG9ja19iaCgmaGFzaGxpbWl0X2xvY2spOwotCWhsaXN0X2FkZF9oZWFkKCZoaW5mby0+bm9kZSwgJmhhc2hsaW1pdF9odGFibGVzKTsKLQlzcGluX3VubG9ja19iaCgmaGFzaGxpbWl0X2xvY2spOworCWhsaXN0X2FkZF9oZWFkKCZoaW5mby0+bm9kZSwgJmhhc2hsaW1pdF9uZXQtPmh0YWJsZXMpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zNjQsNDMgKzM3NSw0NiBAQAogCiBzdGF0aWMgdm9pZCBodGFibGVfZGVzdHJveShzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaGluZm8pCiB7CisJc3RydWN0IGhhc2hsaW1pdF9uZXQgKmhhc2hsaW1pdF9uZXQgPSBoYXNobGltaXRfcGVybmV0KGhpbmZvLT5uZXQpOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50OworCiAJZGVsX3RpbWVyX3N5bmMoJmhpbmZvLT50aW1lcik7CiAKLQkvKiByZW1vdmUgcHJvYyBlbnRyeSAqLwotCXJlbW92ZV9wcm9jX2VudHJ5KGhpbmZvLT5wZGUtPm5hbWUsCi0JCQkgIGhpbmZvLT5mYW1pbHkgPT0gTkZQUk9UT19JUFY0ID8gaGFzaGxpbWl0X3Byb2NkaXI0IDoKLQkJCQkJCSAgICAgaGFzaGxpbWl0X3Byb2NkaXI2KTsKKwlpZiAoaGluZm8tPmZhbWlseSA9PSBORlBST1RPX0lQVjQpCisJCXBhcmVudCA9IGhhc2hsaW1pdF9uZXQtPmlwdF9oYXNobGltaXQ7CisJZWxzZQorCQlwYXJlbnQgPSBoYXNobGltaXRfbmV0LT5pcDZ0X2hhc2hsaW1pdDsKKwlyZW1vdmVfcHJvY19lbnRyeShoaW5mby0+cGRlLT5uYW1lLCBwYXJlbnQpOwogCWh0YWJsZV9zZWxlY3RpdmVfY2xlYW51cChoaW5mbywgc2VsZWN0X2FsbCk7CiAJdmZyZWUoaGluZm8pOwogfQogCi1zdGF0aWMgc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKmh0YWJsZV9maW5kX2dldChjb25zdCBjaGFyICpuYW1lLAorc3RhdGljIHN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlICpodGFibGVfZmluZF9nZXQoc3RydWN0IG5ldCAqbmV0LAorCQkJCQkJICAgY29uc3QgY2hhciAqbmFtZSwKIAkJCQkJCSAgIHVfaW50OF90IGZhbWlseSkKIHsKKwlzdHJ1Y3QgaGFzaGxpbWl0X25ldCAqaGFzaGxpbWl0X25ldCA9IGhhc2hsaW1pdF9wZXJuZXQobmV0KTsKIAlzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaGluZm87CiAJc3RydWN0IGhsaXN0X25vZGUgKnBvczsKIAotCXNwaW5fbG9ja19iaCgmaGFzaGxpbWl0X2xvY2spOwotCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGhpbmZvLCBwb3MsICZoYXNobGltaXRfaHRhYmxlcywgbm9kZSkgeworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGhpbmZvLCBwb3MsICZoYXNobGltaXRfbmV0LT5odGFibGVzLCBub2RlKSB7CiAJCWlmICghc3RyY21wKG5hbWUsIGhpbmZvLT5wZGUtPm5hbWUpICYmCiAJCSAgICBoaW5mby0+ZmFtaWx5ID09IGZhbWlseSkgewotCQkJYXRvbWljX2luYygmaGluZm8tPnVzZSk7Ci0JCQlzcGluX3VubG9ja19iaCgmaGFzaGxpbWl0X2xvY2spOworCQkJaGluZm8tPnVzZSsrOwogCQkJcmV0dXJuIGhpbmZvOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrX2JoKCZoYXNobGltaXRfbG9jayk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIGh0YWJsZV9wdXQoc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKmhpbmZvKQogewotCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZoaW5mby0+dXNlKSkgewotCQlzcGluX2xvY2tfYmgoJmhhc2hsaW1pdF9sb2NrKTsKKwltdXRleF9sb2NrKCZoYXNobGltaXRfbXV0ZXgpOworCWlmICgtLWhpbmZvLT51c2UgPT0gMCkgewogCQlobGlzdF9kZWwoJmhpbmZvLT5ub2RlKTsKLQkJc3Bpbl91bmxvY2tfYmgoJmhhc2hsaW1pdF9sb2NrKTsKIAkJaHRhYmxlX2Rlc3Ryb3koaGluZm8pOwogCX0KKwltdXRleF91bmxvY2soJmhhc2hsaW1pdF9tdXRleCk7CiB9CiAKIC8qIFRoZSBhbGdvcml0aG0gdXNlZCBpcyB0aGUgU2ltcGxlIFRva2VuIEJ1Y2tldCBGaWx0ZXIgKFRCRikKQEAgLTY2NSw2ICs2NzksNyBAQAogCiBzdGF0aWMgYm9vbCBoYXNobGltaXRfbXRfY2hlY2tfdjAoY29uc3Qgc3RydWN0IHh0X210Y2hrX3BhcmFtICpwYXIpCiB7CisJc3RydWN0IG5ldCAqbmV0ID0gcGFyLT5uZXQ7CiAJc3RydWN0IHh0X2hhc2hsaW1pdF9pbmZvICpyID0gcGFyLT5tYXRjaGluZm87CiAKIAkvKiBDaGVjayBmb3Igb3ZlcmZsb3cuICovCkBAIC02ODcsMjUgKzcwMiwyMCBAQAogCWlmIChyLT5uYW1lW3NpemVvZihyLT5uYW1lKSAtIDFdICE9ICdcMCcpCiAJCXJldHVybiBmYWxzZTsKIAotCS8qIFRoaXMgaXMgdGhlIGJlc3Qgd2UndmUgZ290OiBXZSBjYW5ub3QgcmVsZWFzZSBhbmQgcmUtZ3JhYiBsb2NrLAotCSAqIHNpbmNlIGNoZWNrZW50cnkoKSBpcyBjYWxsZWQgYmVmb3JlIHhfdGFibGVzLmMgZ3JhYnMgeHRfbXV0ZXguCi0JICogV2UgYWxzbyBjYW5ub3QgZ3JhYiB0aGUgaGFzaHRhYmxlIHNwaW5sb2NrLCBzaW5jZSBodGFibGVfY3JlYXRlIHdpbGwKLQkgKiBjYWxsIHZtYWxsb2MsIGFuZCB0aGF0IGNhbiBzbGVlcC4gIEFuZCB3ZSBjYW5ub3QganVzdCByZS1zZWFyY2gKLQkgKiB0aGUgbGlzdCBvZiBodGFibGUncyBpbiBodGFibGVfY3JlYXRlKCksIHNpbmNlIHRoZW4gd2Ugd291bGQKLQkgKiBjcmVhdGUgZHVwbGljYXRlIHByb2MgZmlsZXMuIC1IVyAqLwotCW11dGV4X2xvY2soJmhsaW1pdF9tdXRleCk7Ci0Jci0+aGluZm8gPSBodGFibGVfZmluZF9nZXQoci0+bmFtZSwgcGFyLT5tYXRjaC0+ZmFtaWx5KTsKLQlpZiAoIXItPmhpbmZvICYmIGh0YWJsZV9jcmVhdGVfdjAociwgcGFyLT5tYXRjaC0+ZmFtaWx5KSAhPSAwKSB7Ci0JCW11dGV4X3VubG9jaygmaGxpbWl0X211dGV4KTsKKwltdXRleF9sb2NrKCZoYXNobGltaXRfbXV0ZXgpOworCXItPmhpbmZvID0gaHRhYmxlX2ZpbmRfZ2V0KG5ldCwgci0+bmFtZSwgcGFyLT5tYXRjaC0+ZmFtaWx5KTsKKwlpZiAoIXItPmhpbmZvICYmIGh0YWJsZV9jcmVhdGVfdjAobmV0LCByLCBwYXItPm1hdGNoLT5mYW1pbHkpICE9IDApIHsKKwkJbXV0ZXhfdW5sb2NrKCZoYXNobGltaXRfbXV0ZXgpOwogCQlyZXR1cm4gZmFsc2U7CiAJfQotCW11dGV4X3VubG9jaygmaGxpbWl0X211dGV4KTsKKwltdXRleF91bmxvY2soJmhhc2hsaW1pdF9tdXRleCk7CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KIAogc3RhdGljIGJvb2wgaGFzaGxpbWl0X210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogeworCXN0cnVjdCBuZXQgKm5ldCA9IHBhci0+bmV0OwogCXN0cnVjdCB4dF9oYXNobGltaXRfbXRpbmZvMSAqaW5mbyA9IHBhci0+bWF0Y2hpbmZvOwogCiAJLyogQ2hlY2sgZm9yIG92ZXJmbG93LiAqLwpAQCAtNzI4LDE5ICs3MzgsMTMgQEAKIAkJCXJldHVybiBmYWxzZTsKIAl9CiAKLQkvKiBUaGlzIGlzIHRoZSBiZXN0IHdlJ3ZlIGdvdDogV2UgY2Fubm90IHJlbGVhc2UgYW5kIHJlLWdyYWIgbG9jaywKLQkgKiBzaW5jZSBjaGVja2VudHJ5KCkgaXMgY2FsbGVkIGJlZm9yZSB4X3RhYmxlcy5jIGdyYWJzIHh0X211dGV4LgotCSAqIFdlIGFsc28gY2Fubm90IGdyYWIgdGhlIGhhc2h0YWJsZSBzcGlubG9jaywgc2luY2UgaHRhYmxlX2NyZWF0ZSB3aWxsCi0JICogY2FsbCB2bWFsbG9jLCBhbmQgdGhhdCBjYW4gc2xlZXAuICBBbmQgd2UgY2Fubm90IGp1c3QgcmUtc2VhcmNoCi0JICogdGhlIGxpc3Qgb2YgaHRhYmxlJ3MgaW4gaHRhYmxlX2NyZWF0ZSgpLCBzaW5jZSB0aGVuIHdlIHdvdWxkCi0JICogY3JlYXRlIGR1cGxpY2F0ZSBwcm9jIGZpbGVzLiAtSFcgKi8KLQltdXRleF9sb2NrKCZobGltaXRfbXV0ZXgpOwotCWluZm8tPmhpbmZvID0gaHRhYmxlX2ZpbmRfZ2V0KGluZm8tPm5hbWUsIHBhci0+bWF0Y2gtPmZhbWlseSk7Ci0JaWYgKCFpbmZvLT5oaW5mbyAmJiBodGFibGVfY3JlYXRlKGluZm8sIHBhci0+bWF0Y2gtPmZhbWlseSkgIT0gMCkgewotCQltdXRleF91bmxvY2soJmhsaW1pdF9tdXRleCk7CisJbXV0ZXhfbG9jaygmaGFzaGxpbWl0X211dGV4KTsKKwlpbmZvLT5oaW5mbyA9IGh0YWJsZV9maW5kX2dldChuZXQsIGluZm8tPm5hbWUsIHBhci0+bWF0Y2gtPmZhbWlseSk7CisJaWYgKCFpbmZvLT5oaW5mbyAmJiBodGFibGVfY3JlYXRlKG5ldCwgaW5mbywgcGFyLT5tYXRjaC0+ZmFtaWx5KSAhPSAwKSB7CisJCW11dGV4X3VubG9jaygmaGFzaGxpbWl0X211dGV4KTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KLQltdXRleF91bmxvY2soJmhsaW1pdF9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZoYXNobGltaXRfbXV0ZXgpOwogCXJldHVybiB0cnVlOwogfQogCkBAIC03NjcsNyArNzcxLDcgQEAKIAljb21wYXRfdXB0cl90IG1hc3RlcjsKIH07CiAKLXN0YXRpYyB2b2lkIGhhc2hsaW1pdF9tdF9jb21wYXRfZnJvbV91c2VyKHZvaWQgKmRzdCwgdm9pZCAqc3JjKQorc3RhdGljIHZvaWQgaGFzaGxpbWl0X210X2NvbXBhdF9mcm9tX3VzZXIodm9pZCAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiB7CiAJaW50IG9mZiA9IG9mZnNldG9mKHN0cnVjdCBjb21wYXRfeHRfaGFzaGxpbWl0X2luZm8sIGhpbmZvKTsKIApAQCAtNzc1LDcgKzc3OSw3IEBACiAJbWVtc2V0KGRzdCArIG9mZiwgMCwgc2l6ZW9mKHN0cnVjdCBjb21wYXRfeHRfaGFzaGxpbWl0X2luZm8pIC0gb2ZmKTsKIH0KIAotc3RhdGljIGludCBoYXNobGltaXRfbXRfY29tcGF0X3RvX3VzZXIodm9pZCBfX3VzZXIgKmRzdCwgdm9pZCAqc3JjKQorc3RhdGljIGludCBoYXNobGltaXRfbXRfY29tcGF0X3RvX3VzZXIodm9pZCBfX3VzZXIgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQogewogCWludCBvZmYgPSBvZmZzZXRvZihzdHJ1Y3QgY29tcGF0X3h0X2hhc2hsaW1pdF9pbmZvLCBoaW5mbyk7CiAKQEAgLTg0MSw4ICs4NDUsNyBAQAogc3RhdGljIHZvaWQgKmRsX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIGxvZmZfdCAqcG9zKQogCV9fYWNxdWlyZXMoaHRhYmxlLT5sb2NrKQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlID0gcy0+cHJpdmF0ZTsKLQlzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaHRhYmxlID0gcGRlLT5kYXRhOworCXN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlICpodGFibGUgPSBzLT5wcml2YXRlOwogCXVuc2lnbmVkIGludCAqYnVja2V0OwogCiAJc3Bpbl9sb2NrX2JoKCZodGFibGUtPmxvY2spOwpAQCAtODU5LDggKzg2Miw3IEBACiAKIHN0YXRpYyB2b2lkICpkbF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlID0gcy0+cHJpdmF0ZTsKLQlzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaHRhYmxlID0gcGRlLT5kYXRhOworCXN0cnVjdCB4dF9oYXNobGltaXRfaHRhYmxlICpodGFibGUgPSBzLT5wcml2YXRlOwogCXVuc2lnbmVkIGludCAqYnVja2V0ID0gKHVuc2lnbmVkIGludCAqKXY7CiAKIAkqcG9zID0gKysoKmJ1Y2tldCk7CkBAIC04NzQsOCArODc2LDcgQEAKIHN0YXRpYyB2b2lkIGRsX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKIAlfX3JlbGVhc2VzKGh0YWJsZS0+bG9jaykKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IHMtPnByaXZhdGU7Ci0Jc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKmh0YWJsZSA9IHBkZS0+ZGF0YTsKKwlzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaHRhYmxlID0gcy0+cHJpdmF0ZTsKIAl1bnNpZ25lZCBpbnQgKmJ1Y2tldCA9ICh1bnNpZ25lZCBpbnQgKil2OwogCiAJa2ZyZWUoYnVja2V0KTsKQEAgLTkxNyw4ICs5MTgsNyBAQAogCiBzdGF0aWMgaW50IGRsX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqcywgdm9pZCAqdikKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IHMtPnByaXZhdGU7Ci0Jc3RydWN0IHh0X2hhc2hsaW1pdF9odGFibGUgKmh0YWJsZSA9IHBkZS0+ZGF0YTsKKwlzdHJ1Y3QgeHRfaGFzaGxpbWl0X2h0YWJsZSAqaHRhYmxlID0gcy0+cHJpdmF0ZTsKIAl1bnNpZ25lZCBpbnQgKmJ1Y2tldCA9ICh1bnNpZ25lZCBpbnQgKil2OwogCXN0cnVjdCBkc3RoYXNoX2VudCAqZW50OwogCXN0cnVjdCBobGlzdF9ub2RlICpwb3M7CkBAIC05NDQsNyArOTQ0LDcgQEAKIAogCWlmICghcmV0KSB7CiAJCXN0cnVjdCBzZXFfZmlsZSAqc2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JCXNmLT5wcml2YXRlID0gUERFKGlub2RlKTsKKwkJc2YtPnByaXZhdGUgPSBQREUoaW5vZGUpLT5kYXRhOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtOTU3LDEwICs5NTcsNjEgQEAKIAkucmVsZWFzZSA9IHNlcV9yZWxlYXNlCiB9OwogCitzdGF0aWMgaW50IF9fbmV0X2luaXQgaGFzaGxpbWl0X3Byb2NfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQoreworCXN0cnVjdCBoYXNobGltaXRfbmV0ICpoYXNobGltaXRfbmV0ID0gaGFzaGxpbWl0X3Blcm5ldChuZXQpOworCisJaGFzaGxpbWl0X25ldC0+aXB0X2hhc2hsaW1pdCA9IHByb2NfbWtkaXIoImlwdF9oYXNobGltaXQiLCBuZXQtPnByb2NfbmV0KTsKKwlpZiAoIWhhc2hsaW1pdF9uZXQtPmlwdF9oYXNobGltaXQpCisJCXJldHVybiAtRU5PTUVNOworI2lmIGRlZmluZWQoQ09ORklHX0lQNl9ORl9JUFRBQkxFUykgfHwgZGVmaW5lZChDT05GSUdfSVA2X05GX0lQVEFCTEVTX01PRFVMRSkKKwloYXNobGltaXRfbmV0LT5pcDZ0X2hhc2hsaW1pdCA9IHByb2NfbWtkaXIoImlwNnRfaGFzaGxpbWl0IiwgbmV0LT5wcm9jX25ldCk7CisJaWYgKCFoYXNobGltaXRfbmV0LT5pcDZ0X2hhc2hsaW1pdCkgeworCQlwcm9jX25ldF9yZW1vdmUobmV0LCAiaXB0X2hhc2hsaW1pdCIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19uZXRfZXhpdCBoYXNobGltaXRfcHJvY19uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJcHJvY19uZXRfcmVtb3ZlKG5ldCwgImlwdF9oYXNobGltaXQiKTsKKyNpZiBkZWZpbmVkKENPTkZJR19JUDZfTkZfSVBUQUJMRVMpIHx8IGRlZmluZWQoQ09ORklHX0lQNl9ORl9JUFRBQkxFU19NT0RVTEUpCisJcHJvY19uZXRfcmVtb3ZlKG5ldCwgImlwNnRfaGFzaGxpbWl0Iik7CisjZW5kaWYKK30KKworc3RhdGljIGludCBfX25ldF9pbml0IGhhc2hsaW1pdF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IGhhc2hsaW1pdF9uZXQgKmhhc2hsaW1pdF9uZXQgPSBoYXNobGltaXRfcGVybmV0KG5ldCk7CisKKwlJTklUX0hMSVNUX0hFQUQoJmhhc2hsaW1pdF9uZXQtPmh0YWJsZXMpOworCXJldHVybiBoYXNobGltaXRfcHJvY19uZXRfaW5pdChuZXQpOworfQorCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IGhhc2hsaW1pdF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IGhhc2hsaW1pdF9uZXQgKmhhc2hsaW1pdF9uZXQgPSBoYXNobGltaXRfcGVybmV0KG5ldCk7CisKKwlCVUdfT04oIWhsaXN0X2VtcHR5KCZoYXNobGltaXRfbmV0LT5odGFibGVzKSk7CisJaGFzaGxpbWl0X3Byb2NfbmV0X2V4aXQobmV0KTsKK30KKworc3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBoYXNobGltaXRfbmV0X29wcyA9IHsKKwkuaW5pdAk9IGhhc2hsaW1pdF9uZXRfaW5pdCwKKwkuZXhpdAk9IGhhc2hsaW1pdF9uZXRfZXhpdCwKKwkuaWQJPSAmaGFzaGxpbWl0X25ldF9pZCwKKwkuc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaGFzaGxpbWl0X25ldCksCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBoYXNobGltaXRfbXRfaW5pdCh2b2lkKQogewogCWludCBlcnI7CiAKKwllcnIgPSByZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZoYXNobGltaXRfbmV0X29wcyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiBlcnI7CiAJZXJyID0geHRfcmVnaXN0ZXJfbWF0Y2hlcyhoYXNobGltaXRfbXRfcmVnLAogCSAgICAgIEFSUkFZX1NJWkUoaGFzaGxpbWl0X210X3JlZykpOwogCWlmIChlcnIgPCAwKQpAQCAtOTc0LDQxICsxMDI1LDIxIEBACiAJCXByaW50ayhLRVJOX0VSUiAieHRfaGFzaGxpbWl0OiB1bmFibGUgdG8gY3JlYXRlIHNsYWIgY2FjaGVcbiIpOwogCQlnb3RvIGVycjI7CiAJfQotCWhhc2hsaW1pdF9wcm9jZGlyNCA9IHByb2NfbWtkaXIoImlwdF9oYXNobGltaXQiLCBpbml0X25ldC5wcm9jX25ldCk7Ci0JaWYgKCFoYXNobGltaXRfcHJvY2RpcjQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ4dF9oYXNobGltaXQ6IHVuYWJsZSB0byBjcmVhdGUgcHJvYyBkaXIgIgotCQkJCSJlbnRyeVxuIik7Ci0JCWdvdG8gZXJyMzsKLQl9Ci0JZXJyID0gMDsKLSNpZiBkZWZpbmVkKENPTkZJR19JUDZfTkZfSVBUQUJMRVMpIHx8IGRlZmluZWQoQ09ORklHX0lQNl9ORl9JUFRBQkxFU19NT0RVTEUpCi0JaGFzaGxpbWl0X3Byb2NkaXI2ID0gcHJvY19ta2RpcigiaXA2dF9oYXNobGltaXQiLCBpbml0X25ldC5wcm9jX25ldCk7Ci0JaWYgKCFoYXNobGltaXRfcHJvY2RpcjYpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ4dF9oYXNobGltaXQ6IHVuYWJsZSB0byBjcmVhdGUgcHJvYyBkaXIgIgotCQkJCSJlbnRyeVxuIik7Ci0JCWVyciA9IC1FTk9NRU07Ci0JfQotI2VuZGlmCi0JaWYgKCFlcnIpCi0JCXJldHVybiAwOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJpcHRfaGFzaGxpbWl0IiwgaW5pdF9uZXQucHJvY19uZXQpOwotZXJyMzoKLQlrbWVtX2NhY2hlX2Rlc3Ryb3koaGFzaGxpbWl0X2NhY2hlcCk7CisJcmV0dXJuIDA7CisKIGVycjI6CiAJeHRfdW5yZWdpc3Rlcl9tYXRjaGVzKGhhc2hsaW1pdF9tdF9yZWcsIEFSUkFZX1NJWkUoaGFzaGxpbWl0X210X3JlZykpOwogZXJyMToKKwl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJmhhc2hsaW1pdF9uZXRfb3BzKTsKIAlyZXR1cm4gZXJyOwogCiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBoYXNobGltaXRfbXRfZXhpdCh2b2lkKQogewotCXJlbW92ZV9wcm9jX2VudHJ5KCJpcHRfaGFzaGxpbWl0IiwgaW5pdF9uZXQucHJvY19uZXQpOwotI2lmIGRlZmluZWQoQ09ORklHX0lQNl9ORl9JUFRBQkxFUykgfHwgZGVmaW5lZChDT05GSUdfSVA2X05GX0lQVEFCTEVTX01PRFVMRSkKLQlyZW1vdmVfcHJvY19lbnRyeSgiaXA2dF9oYXNobGltaXQiLCBpbml0X25ldC5wcm9jX25ldCk7Ci0jZW5kaWYKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koaGFzaGxpbWl0X2NhY2hlcCk7CiAJeHRfdW5yZWdpc3Rlcl9tYXRjaGVzKGhhc2hsaW1pdF9tdF9yZWcsIEFSUkFZX1NJWkUoaGFzaGxpbWl0X210X3JlZykpOworCXVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmaGFzaGxpbWl0X25ldF9vcHMpOwogfQogCiBtb2R1bGVfaW5pdChoYXNobGltaXRfbXRfaW5pdCk7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMgYi9uZXQvbmV0ZmlsdGVyL3h0X2xpbWl0LmMKaW5kZXggMjc3M2JlNi4uYTBjYTUzMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9saW1pdC5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfbGltaXQuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAKIC8qIFRvIGtlZXAgdGhlIGZ1bGwgInByZXYiIHRpbWVzdGFtcCwgdGhlIHVwcGVyIDMyIGJpdHMgYXJlIHN0b3JlZCBpbiB0aGUKICAqIG1hc3RlciBwb2ludGVyLCB3aGljaCBkb2VzIG5vdCBuZWVkIHRvIGJlIHByZXNlcnZlZC4gKi8KLXN0YXRpYyB2b2lkIGxpbWl0X210X2NvbXBhdF9mcm9tX3VzZXIodm9pZCAqZHN0LCB2b2lkICpzcmMpCitzdGF0aWMgdm9pZCBsaW1pdF9tdF9jb21wYXRfZnJvbV91c2VyKHZvaWQgKmRzdCwgY29uc3Qgdm9pZCAqc3JjKQogewogCWNvbnN0IHN0cnVjdCBjb21wYXRfeHRfcmF0ZWluZm8gKmNtID0gc3JjOwogCXN0cnVjdCB4dF9yYXRlaW5mbyBtID0gewpAQCAtMTYyLDcgKzE2Miw3IEBACiAJbWVtY3B5KGRzdCwgJm0sIHNpemVvZihtKSk7CiB9CiAKLXN0YXRpYyBpbnQgbGltaXRfbXRfY29tcGF0X3RvX3VzZXIodm9pZCBfX3VzZXIgKmRzdCwgdm9pZCAqc3JjKQorc3RhdGljIGludCBsaW1pdF9tdF9jb21wYXRfdG9fdXNlcih2b2lkIF9fdXNlciAqZHN0LCBjb25zdCB2b2lkICpzcmMpCiB7CiAJY29uc3Qgc3RydWN0IHh0X3JhdGVpbmZvICptID0gc3JjOwogCXN0cnVjdCBjb21wYXRfeHRfcmF0ZWluZm8gY20gPSB7CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL3h0X29zZi5jIGIvbmV0L25ldGZpbHRlci94dF9vc2YuYwppbmRleCA0ZDFhNDFiLi40MTY5ZTIwIDEwMDY0NAotLS0gYS9uZXQvbmV0ZmlsdGVyL3h0X29zZi5jCisrKyBiL25ldC9uZXRmaWx0ZXIveHRfb3NmLmMKQEAgLTMzNCw3ICszMzQsNyBAQAogCQkJaWYgKGluZm8tPmZsYWdzICYgWFRfT1NGX0xPRykKIAkJCQluZl9sb2dfcGFja2V0KHAtPmZhbWlseSwgcC0+aG9va251bSwgc2tiLAogCQkJCQlwLT5pbiwgcC0+b3V0LCBOVUxMLAotCQkJCQkiJXMgWyVzOiVzXSA6ICVwaTQ6JWQgLT4gJXBpNDolZCBob3BzPSVkXG4iLAorCQkJCQkiJXMgWyVzOiVzXSA6ICVwSTQ6JWQgLT4gJXBJNDolZCBob3BzPSVkXG4iLAogCQkJCQlmLT5nZW5yZSwgZi0+dmVyc2lvbiwgZi0+c3VidHlwZSwKIAkJCQkJJmlwLT5zYWRkciwgbnRvaHModGNwLT5zb3VyY2UpLAogCQkJCQkmaXAtPmRhZGRyLCBudG9ocyh0Y3AtPmRlc3QpLApAQCAtMzQ5LDcgKzM0OSw3IEBACiAKIAlpZiAoIWZjb3VudCAmJiAoaW5mby0+ZmxhZ3MgJiBYVF9PU0ZfTE9HKSkKIAkJbmZfbG9nX3BhY2tldChwLT5mYW1pbHksIHAtPmhvb2tudW0sIHNrYiwgcC0+aW4sIHAtPm91dCwgTlVMTCwKLQkJCSJSZW1vdGUgT1MgaXMgbm90IGtub3duOiAlcGk0OiV1IC0+ICVwaTQ6JXVcbiIsCisJCQkiUmVtb3RlIE9TIGlzIG5vdCBrbm93bjogJXBJNDoldSAtPiAlcEk0OiV1XG4iLAogCQkJCSZpcC0+c2FkZHIsIG50b2hzKHRjcC0+c291cmNlKSwKIAkJCQkmaXAtPmRhZGRyLCBudG9ocyh0Y3AtPmRlc3QpKTsKIApkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuYyBiL25ldC9uZXRmaWx0ZXIveHRfcmVjZW50LmMKaW5kZXggZmM3MGE0OS4uNzA3M2RiYiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci94dF9yZWNlbnQuYworKysgYi9uZXQvbmV0ZmlsdGVyL3h0X3JlY2VudC5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvaW5ldC5oPgogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CisjaW5jbHVkZSA8bmV0L25ldG5zL2dlbmVyaWMuaD4KIAogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgogI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9yZWNlbnQuaD4KQEAgLTUyLDcgKzUzLDcgQEAKIG1vZHVsZV9wYXJhbShpcF9saXN0X3VpZCwgdWludCwgMDQwMCk7CiBtb2R1bGVfcGFyYW0oaXBfbGlzdF9naWQsIHVpbnQsIDA0MDApOwogTU9EVUxFX1BBUk1fREVTQyhpcF9saXN0X3RvdCwgIm51bWJlciBvZiBJUHMgdG8gcmVtZW1iZXIgcGVyIGxpc3QiKTsKLU1PRFVMRV9QQVJNX0RFU0MoaXBfcGt0X2xpc3RfdG90LCAibnVtYmVyIG9mIHBhY2tldHMgcGVyIElQIHRvIHJlbWVtYmVyIChtYXguIDI1NSkiKTsKK01PRFVMRV9QQVJNX0RFU0MoaXBfcGt0X2xpc3RfdG90LCAibnVtYmVyIG9mIHBhY2tldHMgcGVyIElQIGFkZHJlc3MgdG8gcmVtZW1iZXIgKG1heC4gMjU1KSIpOwogTU9EVUxFX1BBUk1fREVTQyhpcF9saXN0X2hhc2hfc2l6ZSwgInNpemUgb2YgaGFzaCB0YWJsZSB1c2VkIHRvIGxvb2sgdXAgSVBzIik7CiBNT0RVTEVfUEFSTV9ERVNDKGlwX2xpc3RfcGVybXMsICJwZXJtaXNzaW9ucyBvbiAvcHJvYy9uZXQveHRfcmVjZW50LyogZmlsZXMiKTsKIE1PRFVMRV9QQVJNX0RFU0MoaXBfbGlzdF91aWQsIm93bmVyIG9mIC9wcm9jL25ldC94dF9yZWNlbnQvKiBmaWxlcyIpOwpAQCAtNzgsMzcgKzc5LDQwIEBACiAJc3RydWN0IGxpc3RfaGVhZAlpcGhhc2hbMF07CiB9OwogCi1zdGF0aWMgTElTVF9IRUFEKHRhYmxlcyk7CitzdHJ1Y3QgcmVjZW50X25ldCB7CisJc3RydWN0IGxpc3RfaGVhZAl0YWJsZXM7CisjaWZkZWYgQ09ORklHX1BST0NfRlMKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkJKnh0X3JlY2VudDsKKyNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVF9QUk9DX0NPTVBBVAorCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeQkqaXB0X3JlY2VudDsKKyNlbmRpZgorI2VuZGlmCit9OworCitzdGF0aWMgaW50IHJlY2VudF9uZXRfaWQ7CitzdGF0aWMgaW5saW5lIHN0cnVjdCByZWNlbnRfbmV0ICpyZWNlbnRfcGVybmV0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlyZXR1cm4gbmV0X2dlbmVyaWMobmV0LCByZWNlbnRfbmV0X2lkKTsKK30KKwogc3RhdGljIERFRklORV9TUElOTE9DSyhyZWNlbnRfbG9jayk7CiBzdGF0aWMgREVGSU5FX01VVEVYKHJlY2VudF9tdXRleCk7CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotI2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UX1BST0NfQ09NUEFUCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX29sZF9kaXI7Ci0jZW5kaWYKLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnJlY2VudF9wcm9jX2RpcjsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJlY2VudF9vbGRfZm9wcywgcmVjZW50X210X2ZvcHM7CiAjZW5kaWYKIAotc3RhdGljIHVfaW50MzJfdCBoYXNoX3JuZDsKLXN0YXRpYyBib29sIGhhc2hfcm5kX2luaXR0ZWQ7CitzdGF0aWMgdV9pbnQzMl90IGhhc2hfcm5kIF9fcmVhZF9tb3N0bHk7CitzdGF0aWMgYm9vbCBoYXNoX3JuZF9pbml0ZWQgX19yZWFkX21vc3RseTsKIAotc3RhdGljIHVuc2lnbmVkIGludCByZWNlbnRfZW50cnlfaGFzaDQoY29uc3QgdW5pb24gbmZfaW5ldF9hZGRyICphZGRyKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgcmVjZW50X2VudHJ5X2hhc2g0KGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcikKIHsKLQlpZiAoIWhhc2hfcm5kX2luaXR0ZWQpIHsKLQkJZ2V0X3JhbmRvbV9ieXRlcygmaGFzaF9ybmQsIHNpemVvZihoYXNoX3JuZCkpOwotCQloYXNoX3JuZF9pbml0dGVkID0gdHJ1ZTsKLQl9CiAJcmV0dXJuIGpoYXNoXzF3b3JkKChfX2ZvcmNlIHUzMilhZGRyLT5pcCwgaGFzaF9ybmQpICYKIAkgICAgICAgKGlwX2xpc3RfaGFzaF9zaXplIC0gMSk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVjZW50X2VudHJ5X2hhc2g2KGNvbnN0IHVuaW9uIG5mX2luZXRfYWRkciAqYWRkcikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHJlY2VudF9lbnRyeV9oYXNoNihjb25zdCB1bmlvbiBuZl9pbmV0X2FkZHIgKmFkZHIpCiB7Ci0JaWYgKCFoYXNoX3JuZF9pbml0dGVkKSB7Ci0JCWdldF9yYW5kb21fYnl0ZXMoJmhhc2hfcm5kLCBzaXplb2YoaGFzaF9ybmQpKTsKLQkJaGFzaF9ybmRfaW5pdHRlZCA9IHRydWU7Ci0JfQogCXJldHVybiBqaGFzaDIoKHUzMiAqKWFkZHItPmlwNiwgQVJSQVlfU0laRShhZGRyLT5pcDYpLCBoYXNoX3JuZCkgJgogCSAgICAgICAoaXBfbGlzdF9oYXNoX3NpemUgLSAxKTsKIH0KQEAgLTE3MywxOCArMTc3LDE5IEBACiAKIHN0YXRpYyB2b2lkIHJlY2VudF9lbnRyeV91cGRhdGUoc3RydWN0IHJlY2VudF90YWJsZSAqdCwgc3RydWN0IHJlY2VudF9lbnRyeSAqZSkKIHsKKwllLT5pbmRleCAlPSBpcF9wa3RfbGlzdF90b3Q7CiAJZS0+c3RhbXBzW2UtPmluZGV4KytdID0gamlmZmllczsKIAlpZiAoZS0+aW5kZXggPiBlLT5uc3RhbXBzKQogCQllLT5uc3RhbXBzID0gZS0+aW5kZXg7Ci0JZS0+aW5kZXggJT0gaXBfcGt0X2xpc3RfdG90OwogCWxpc3RfbW92ZV90YWlsKCZlLT5scnVfbGlzdCwgJnQtPmxydV9saXN0KTsKIH0KIAotc3RhdGljIHN0cnVjdCByZWNlbnRfdGFibGUgKnJlY2VudF90YWJsZV9sb29rdXAoY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBzdHJ1Y3QgcmVjZW50X3RhYmxlICpyZWNlbnRfdGFibGVfbG9va3VwKHN0cnVjdCByZWNlbnRfbmV0ICpyZWNlbnRfbmV0LAorCQkJCQkJY29uc3QgY2hhciAqbmFtZSkKIHsKIAlzdHJ1Y3QgcmVjZW50X3RhYmxlICp0OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeSh0LCAmdGFibGVzLCBsaXN0KQorCWxpc3RfZm9yX2VhY2hfZW50cnkodCwgJnJlY2VudF9uZXQtPnRhYmxlcywgbGlzdCkKIAkJaWYgKCFzdHJjbXAodC0+bmFtZSwgbmFtZSkpCiAJCQlyZXR1cm4gdDsKIAlyZXR1cm4gTlVMTDsKQEAgLTIwMyw2ICsyMDgsOCBAQAogc3RhdGljIGJvb2wKIHJlY2VudF9tdChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgeHRfbWF0Y2hfcGFyYW0gKnBhcikKIHsKKwlzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KHBhci0+aW4gPyBwYXItPmluIDogcGFyLT5vdXQpOworCXN0cnVjdCByZWNlbnRfbmV0ICpyZWNlbnRfbmV0ID0gcmVjZW50X3Blcm5ldChuZXQpOwogCWNvbnN0IHN0cnVjdCB4dF9yZWNlbnRfbXRpbmZvICppbmZvID0gcGFyLT5tYXRjaGluZm87CiAJc3RydWN0IHJlY2VudF90YWJsZSAqdDsKIAlzdHJ1Y3QgcmVjZW50X2VudHJ5ICplOwpAQCAtMjM1LDcgKzI0Miw3IEBACiAJCXR0bCsrOwogCiAJc3Bpbl9sb2NrX2JoKCZyZWNlbnRfbG9jayk7Ci0JdCA9IHJlY2VudF90YWJsZV9sb29rdXAoaW5mby0+bmFtZSk7CisJdCA9IHJlY2VudF90YWJsZV9sb29rdXAocmVjZW50X25ldCwgaW5mby0+bmFtZSk7CiAJZSA9IHJlY2VudF9lbnRyeV9sb29rdXAodCwgJmFkZHIsIHBhci0+bWF0Y2gtPmZhbWlseSwKIAkJCQkoaW5mby0+Y2hlY2tfc2V0ICYgWFRfUkVDRU5UX1RUTCkgPyB0dGwgOiAwKTsKIAlpZiAoZSA9PSBOVUxMKSB7CkBAIC0yNjAsNyArMjY3LDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IGUtPm5zdGFtcHM7IGkrKykgewogCQkJaWYgKGluZm8tPnNlY29uZHMgJiYgdGltZV9hZnRlcih0aW1lLCBlLT5zdGFtcHNbaV0pKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKCsraGl0cyA+PSBpbmZvLT5oaXRfY291bnQpIHsKKwkJCWlmIChpbmZvLT5oaXRfY291bnQgJiYgKytoaXRzID49IGluZm8tPmhpdF9jb3VudCkgewogCQkJCXJldCA9ICFyZXQ7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0yNzksNiArMjg2LDcgQEAKIAogc3RhdGljIGJvb2wgcmVjZW50X210X2NoZWNrKGNvbnN0IHN0cnVjdCB4dF9tdGNoa19wYXJhbSAqcGFyKQogeworCXN0cnVjdCByZWNlbnRfbmV0ICpyZWNlbnRfbmV0ID0gcmVjZW50X3Blcm5ldChwYXItPm5ldCk7CiAJY29uc3Qgc3RydWN0IHh0X3JlY2VudF9tdGluZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKIAlzdHJ1Y3QgcmVjZW50X3RhYmxlICp0OwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCkBAIC0yODcsNiArMjk1LDEwIEBACiAJdW5zaWduZWQgaTsKIAlib29sIHJldCA9IGZhbHNlOwogCisJaWYgKHVubGlrZWx5KCFoYXNoX3JuZF9pbml0ZWQpKSB7CisJCWdldF9yYW5kb21fYnl0ZXMoJmhhc2hfcm5kLCBzaXplb2YoaGFzaF9ybmQpKTsKKwkJaGFzaF9ybmRfaW5pdGVkID0gdHJ1ZTsKKwl9CiAJaWYgKGh3ZWlnaHQ4KGluZm8tPmNoZWNrX3NldCAmCiAJCSAgICAgKFhUX1JFQ0VOVF9TRVQgfCBYVF9SRUNFTlRfUkVNT1ZFIHwKIAkJICAgICAgWFRfUkVDRU5UX0NIRUNLIHwgWFRfUkVDRU5UX1VQREFURSkpICE9IDEpCkBAIC0yOTQsMTQgKzMwNiwxOCBAQAogCWlmICgoaW5mby0+Y2hlY2tfc2V0ICYgKFhUX1JFQ0VOVF9TRVQgfCBYVF9SRUNFTlRfUkVNT1ZFKSkgJiYKIAkgICAgKGluZm8tPnNlY29uZHMgfHwgaW5mby0+aGl0X2NvdW50KSkKIAkJcmV0dXJuIGZhbHNlOwotCWlmIChpbmZvLT5oaXRfY291bnQgPiBpcF9wa3RfbGlzdF90b3QpCisJaWYgKGluZm8tPmhpdF9jb3VudCA+IGlwX3BrdF9saXN0X3RvdCkgeworCQlwcl9pbmZvKEtCVUlMRF9NT0ROQU1FICI6IGhpdGNvdW50ICgldSkgaXMgbGFyZ2VyIHRoYW4gIgorCQkJInBhY2tldHMgdG8gYmUgcmVtZW1iZXJlZCAoJXUpXG4iLAorCQkJaW5mby0+aGl0X2NvdW50LCBpcF9wa3RfbGlzdF90b3QpOwogCQlyZXR1cm4gZmFsc2U7CisJfQogCWlmIChpbmZvLT5uYW1lWzBdID09ICdcMCcgfHwKIAkgICAgc3RybmxlbihpbmZvLT5uYW1lLCBYVF9SRUNFTlRfTkFNRV9MRU4pID09IFhUX1JFQ0VOVF9OQU1FX0xFTikKIAkJcmV0dXJuIGZhbHNlOwogCiAJbXV0ZXhfbG9jaygmcmVjZW50X211dGV4KTsKLQl0ID0gcmVjZW50X3RhYmxlX2xvb2t1cChpbmZvLT5uYW1lKTsKKwl0ID0gcmVjZW50X3RhYmxlX2xvb2t1cChyZWNlbnRfbmV0LCBpbmZvLT5uYW1lKTsKIAlpZiAodCAhPSBOVUxMKSB7CiAJCXQtPnJlZmNudCsrOwogCQlyZXQgPSB0cnVlOwpAQCAtMzE4LDcgKzMzNCw3IEBACiAJZm9yIChpID0gMDsgaSA8IGlwX2xpc3RfaGFzaF9zaXplOyBpKyspCiAJCUlOSVRfTElTVF9IRUFEKCZ0LT5pcGhhc2hbaV0pOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCi0JcGRlID0gcHJvY19jcmVhdGVfZGF0YSh0LT5uYW1lLCBpcF9saXN0X3Blcm1zLCByZWNlbnRfcHJvY19kaXIsCisJcGRlID0gcHJvY19jcmVhdGVfZGF0YSh0LT5uYW1lLCBpcF9saXN0X3Blcm1zLCByZWNlbnRfbmV0LT54dF9yZWNlbnQsCiAJCSAgJnJlY2VudF9tdF9mb3BzLCB0KTsKIAlpZiAocGRlID09IE5VTEwpIHsKIAkJa2ZyZWUodCk7CkBAIC0zMjcsMTAgKzM0MywxMCBAQAogCXBkZS0+dWlkID0gaXBfbGlzdF91aWQ7CiAJcGRlLT5naWQgPSBpcF9saXN0X2dpZDsKICNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVF9QUk9DX0NPTVBBVAotCXBkZSA9IHByb2NfY3JlYXRlX2RhdGEodC0+bmFtZSwgaXBfbGlzdF9wZXJtcywgcHJvY19vbGRfZGlyLAorCXBkZSA9IHByb2NfY3JlYXRlX2RhdGEodC0+bmFtZSwgaXBfbGlzdF9wZXJtcywgcmVjZW50X25ldC0+aXB0X3JlY2VudCwKIAkJICAgICAgJnJlY2VudF9vbGRfZm9wcywgdCk7CiAJaWYgKHBkZSA9PSBOVUxMKSB7Ci0JCXJlbW92ZV9wcm9jX2VudHJ5KHQtPm5hbWUsIHByb2Nfb2xkX2Rpcik7CisJCXJlbW92ZV9wcm9jX2VudHJ5KHQtPm5hbWUsIHJlY2VudF9uZXQtPnh0X3JlY2VudCk7CiAJCWtmcmVlKHQpOwogCQlnb3RvIG91dDsKIAl9CkBAIC0zMzksNyArMzU1LDcgQEAKICNlbmRpZgogI2VuZGlmCiAJc3Bpbl9sb2NrX2JoKCZyZWNlbnRfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmdC0+bGlzdCwgJnRhYmxlcyk7CisJbGlzdF9hZGRfdGFpbCgmdC0+bGlzdCwgJnJlY2VudF9uZXQtPnRhYmxlcyk7CiAJc3Bpbl91bmxvY2tfYmgoJnJlY2VudF9sb2NrKTsKIAlyZXQgPSB0cnVlOwogb3V0OgpAQCAtMzQ5LDIwICszNjUsMjEgQEAKIAogc3RhdGljIHZvaWQgcmVjZW50X210X2Rlc3Ryb3koY29uc3Qgc3RydWN0IHh0X210ZHRvcl9wYXJhbSAqcGFyKQogeworCXN0cnVjdCByZWNlbnRfbmV0ICpyZWNlbnRfbmV0ID0gcmVjZW50X3Blcm5ldChwYXItPm5ldCk7CiAJY29uc3Qgc3RydWN0IHh0X3JlY2VudF9tdGluZm8gKmluZm8gPSBwYXItPm1hdGNoaW5mbzsKIAlzdHJ1Y3QgcmVjZW50X3RhYmxlICp0OwogCiAJbXV0ZXhfbG9jaygmcmVjZW50X211dGV4KTsKLQl0ID0gcmVjZW50X3RhYmxlX2xvb2t1cChpbmZvLT5uYW1lKTsKKwl0ID0gcmVjZW50X3RhYmxlX2xvb2t1cChyZWNlbnRfbmV0LCBpbmZvLT5uYW1lKTsKIAlpZiAoLS10LT5yZWZjbnQgPT0gMCkgewogCQlzcGluX2xvY2tfYmgoJnJlY2VudF9sb2NrKTsKIAkJbGlzdF9kZWwoJnQtPmxpc3QpOwogCQlzcGluX3VubG9ja19iaCgmcmVjZW50X2xvY2spOwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCiAjaWZkZWYgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlRfUFJPQ19DT01QQVQKLQkJcmVtb3ZlX3Byb2NfZW50cnkodC0+bmFtZSwgcHJvY19vbGRfZGlyKTsKKwkJcmVtb3ZlX3Byb2NfZW50cnkodC0+bmFtZSwgcmVjZW50X25ldC0+aXB0X3JlY2VudCk7CiAjZW5kaWYKLQkJcmVtb3ZlX3Byb2NfZW50cnkodC0+bmFtZSwgcmVjZW50X3Byb2NfZGlyKTsKKwkJcmVtb3ZlX3Byb2NfZW50cnkodC0+bmFtZSwgcmVjZW50X25ldC0+eHRfcmVjZW50KTsKICNlbmRpZgogCQlyZWNlbnRfdGFibGVfZmx1c2godCk7CiAJCWtmcmVlKHQpOwpAQCAtNjExLDggKzYyOCw2NSBAQAogCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKIAkub3duZXIgICA9IFRISVNfTU9EVUxFLAogfTsKKworc3RhdGljIGludCBfX25ldF9pbml0IHJlY2VudF9wcm9jX25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3sKKwlzdHJ1Y3QgcmVjZW50X25ldCAqcmVjZW50X25ldCA9IHJlY2VudF9wZXJuZXQobmV0KTsKKworCXJlY2VudF9uZXQtPnh0X3JlY2VudCA9IHByb2NfbWtkaXIoInh0X3JlY2VudCIsIG5ldC0+cHJvY19uZXQpOworCWlmICghcmVjZW50X25ldC0+eHRfcmVjZW50KQorCQlyZXR1cm4gLUVOT01FTTsKKyNpZmRlZiBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQ0VOVF9QUk9DX0NPTVBBVAorCXJlY2VudF9uZXQtPmlwdF9yZWNlbnQgPSBwcm9jX21rZGlyKCJpcHRfcmVjZW50IiwgbmV0LT5wcm9jX25ldCk7CisJaWYgKCFyZWNlbnRfbmV0LT5pcHRfcmVjZW50KSB7CisJCXByb2NfbmV0X3JlbW92ZShuZXQsICJ4dF9yZWNlbnQiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorI2VuZGlmCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIF9fbmV0X2V4aXQgcmVjZW50X3Byb2NfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQoreworI2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UX1BST0NfQ09NUEFUCisJcHJvY19uZXRfcmVtb3ZlKG5ldCwgImlwdF9yZWNlbnQiKTsKKyNlbmRpZgorCXByb2NfbmV0X3JlbW92ZShuZXQsICJ4dF9yZWNlbnQiKTsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCByZWNlbnRfcHJvY19uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWNlbnRfcHJvY19uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCit7Cit9CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAorc3RhdGljIGludCBfX25ldF9pbml0IHJlY2VudF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCit7CisJc3RydWN0IHJlY2VudF9uZXQgKnJlY2VudF9uZXQgPSByZWNlbnRfcGVybmV0KG5ldCk7CisKKwlJTklUX0xJU1RfSEVBRCgmcmVjZW50X25ldC0+dGFibGVzKTsKKwlyZXR1cm4gcmVjZW50X3Byb2NfbmV0X2luaXQobmV0KTsKK30KKworc3RhdGljIHZvaWQgX19uZXRfZXhpdCByZWNlbnRfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQoreworCXN0cnVjdCByZWNlbnRfbmV0ICpyZWNlbnRfbmV0ID0gcmVjZW50X3Blcm5ldChuZXQpOworCisJQlVHX09OKCFsaXN0X2VtcHR5KCZyZWNlbnRfbmV0LT50YWJsZXMpKTsKKwlyZWNlbnRfcHJvY19uZXRfZXhpdChuZXQpOworfQorCitzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIHJlY2VudF9uZXRfb3BzID0geworCS5pbml0CT0gcmVjZW50X25ldF9pbml0LAorCS5leGl0CT0gcmVjZW50X25ldF9leGl0LAorCS5pZAk9ICZyZWNlbnRfbmV0X2lkLAorCS5zaXplCT0gc2l6ZW9mKHN0cnVjdCByZWNlbnRfbmV0KSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgeHRfbWF0Y2ggcmVjZW50X210X3JlZ1tdIF9fcmVhZF9tb3N0bHkgPSB7CiAJewogCQkubmFtZSAgICAgICA9ICJyZWNlbnQiLApAQCAtNjQ0LDM5ICs3MTgsMTkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaXBfbGlzdF9oYXNoX3NpemUgPSAxIDw8IGZscyhpcF9saXN0X3RvdCk7CiAKLQllcnIgPSB4dF9yZWdpc3Rlcl9tYXRjaGVzKHJlY2VudF9tdF9yZWcsIEFSUkFZX1NJWkUocmVjZW50X210X3JlZykpOwotI2lmZGVmIENPTkZJR19QUk9DX0ZTCisJZXJyID0gcmVnaXN0ZXJfcGVybmV0X3N1YnN5cygmcmVjZW50X25ldF9vcHMpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7Ci0JcmVjZW50X3Byb2NfZGlyID0gcHJvY19ta2RpcigieHRfcmVjZW50IiwgaW5pdF9uZXQucHJvY19uZXQpOwotCWlmIChyZWNlbnRfcHJvY19kaXIgPT0gTlVMTCkgewotCQl4dF91bnJlZ2lzdGVyX21hdGNoZXMocmVjZW50X210X3JlZywgQVJSQVlfU0laRShyZWNlbnRfbXRfcmVnKSk7Ci0JCWVyciA9IC1FTk9NRU07Ci0JfQotI2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UX1BST0NfQ09NUEFUCi0JaWYgKGVyciA8IDApCi0JCXJldHVybiBlcnI7Ci0JcHJvY19vbGRfZGlyID0gcHJvY19ta2RpcigiaXB0X3JlY2VudCIsIGluaXRfbmV0LnByb2NfbmV0KTsKLQlpZiAocHJvY19vbGRfZGlyID09IE5VTEwpIHsKLQkJcmVtb3ZlX3Byb2NfZW50cnkoInh0X3JlY2VudCIsIGluaXRfbmV0LnByb2NfbmV0KTsKLQkJeHRfdW5yZWdpc3Rlcl9tYXRjaGVzKHJlY2VudF9tdF9yZWcsIEFSUkFZX1NJWkUocmVjZW50X210X3JlZykpOwotCQllcnIgPSAtRU5PTUVNOwotCX0KLSNlbmRpZgotI2VuZGlmCisJZXJyID0geHRfcmVnaXN0ZXJfbWF0Y2hlcyhyZWNlbnRfbXRfcmVnLCBBUlJBWV9TSVpFKHJlY2VudF9tdF9yZWcpKTsKKwlpZiAoZXJyKQorCQl1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoJnJlY2VudF9uZXRfb3BzKTsKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgcmVjZW50X210X2V4aXQodm9pZCkKIHsKLQlCVUdfT04oIWxpc3RfZW1wdHkoJnRhYmxlcykpOwogCXh0X3VucmVnaXN0ZXJfbWF0Y2hlcyhyZWNlbnRfbXRfcmVnLCBBUlJBWV9TSVpFKHJlY2VudF9tdF9yZWcpKTsKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotI2lmZGVmIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUkVDRU5UX1BST0NfQ09NUEFUCi0JcmVtb3ZlX3Byb2NfZW50cnkoImlwdF9yZWNlbnQiLCBpbml0X25ldC5wcm9jX25ldCk7Ci0jZW5kaWYKLQlyZW1vdmVfcHJvY19lbnRyeSgieHRfcmVjZW50IiwgaW5pdF9uZXQucHJvY19uZXQpOwotI2VuZGlmCisJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZyZWNlbnRfbmV0X29wcyk7CiB9CiAKIG1vZHVsZV9pbml0KHJlY2VudF9tdF9pbml0KTsKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIveHRfcmVwbGRhdGEuaCBiL25ldC9uZXRmaWx0ZXIveHRfcmVwbGRhdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWZlNGU1Ci0tLSAvZGV2L251bGwKKysrIGIvbmV0L25ldGZpbHRlci94dF9yZXBsZGF0YS5oCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBUb2RheSdzIGhhY2s6IHF1YW50dW0gdHVubmVsaW5nIGluIHN0cnVjdHMKKyAqCisgKiAnZW50cmllcycgYW5kICd0ZXJtJyBhcmUgbmV2ZXIgYW55d2hlcmUgcmVmZXJlbmNlZCBieSB3b3JkIGluIGNvZGUuIEluIGZhY3QsCisgKiB0aGV5IHNlcnZlIGFzIHRoZSBoYW5naW5nLW9mZiBkYXRhIGFjY2Vzc2VkIHRocm91Z2ggcmVwbC5kYXRhW10uCisgKi8KKworI2RlZmluZSB4dF9hbGxvY19pbml0aWFsX3RhYmxlKHR5cGUsIHR5cDIpICh7IFwKKwl1bnNpZ25lZCBpbnQgaG9va19tYXNrID0gaW5mby0+dmFsaWRfaG9va3M7IFwKKwl1bnNpZ25lZCBpbnQgbmhvb2tzID0gaHdlaWdodDMyKGhvb2tfbWFzayk7IFwKKwl1bnNpZ25lZCBpbnQgYnl0ZXMgPSAwLCBob29rbnVtID0gMCwgaSA9IDA7IFwKKwlzdHJ1Y3QgeyBcCisJCXN0cnVjdCB0eXBlIyNfcmVwbGFjZSByZXBsOyBcCisJCXN0cnVjdCB0eXBlIyNfc3RhbmRhcmQgZW50cmllc1tuaG9va3NdOyBcCisJCXN0cnVjdCB0eXBlIyNfZXJyb3IgdGVybTsgXAorCX0gKnRibCA9IGt6YWxsb2Moc2l6ZW9mKCp0YmwpLCBHRlBfS0VSTkVMKTsgXAorCWlmICh0YmwgPT0gTlVMTCkgXAorCQlyZXR1cm4gTlVMTDsgXAorCXN0cm5jcHkodGJsLT5yZXBsLm5hbWUsIGluZm8tPm5hbWUsIHNpemVvZih0YmwtPnJlcGwubmFtZSkpOyBcCisJdGJsLT50ZXJtID0gKHN0cnVjdCB0eXBlIyNfZXJyb3IpdHlwMiMjX0VSUk9SX0lOSVQ7ICBcCisJdGJsLT5yZXBsLnZhbGlkX2hvb2tzID0gaG9va19tYXNrOyBcCisJdGJsLT5yZXBsLm51bV9lbnRyaWVzID0gbmhvb2tzICsgMTsgXAorCXRibC0+cmVwbC5zaXplID0gbmhvb2tzICogc2l6ZW9mKHN0cnVjdCB0eXBlIyNfc3RhbmRhcmQpICsgXAorCSAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCB0eXBlIyNfZXJyb3IpOyBcCisJZm9yICg7IGhvb2tfbWFzayAhPSAwOyBob29rX21hc2sgPj49IDEsICsraG9va251bSkgeyBcCisJCWlmICghKGhvb2tfbWFzayAmIDEpKSBcCisJCQljb250aW51ZTsgXAorCQl0YmwtPnJlcGwuaG9va19lbnRyeVtob29rbnVtXSA9IGJ5dGVzOyBcCisJCXRibC0+cmVwbC51bmRlcmZsb3dbaG9va251bV0gID0gYnl0ZXM7IFwKKwkJdGJsLT5lbnRyaWVzW2krK10gPSAoc3RydWN0IHR5cGUjI19zdGFuZGFyZCkgXAorCQkJdHlwMiMjX1NUQU5EQVJEX0lOSVQoTkZfQUNDRVBUKTsgXAorCQlieXRlcyArPSBzaXplb2Yoc3RydWN0IHR5cGUjI19zdGFuZGFyZCk7IFwKKwl9IFwKKwl0Ymw7IFwKK30pCmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfZG9tYWluaGFzaC5jIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guYwppbmRleCBjNWQ5Zjk3Li4wYmZlYWFiOCAxMDA2NDQKLS0tIGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guYworKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfZG9tYWluaGFzaC5jCkBAIC0zMTUsNyArMzE1LDYgQEAKIAkJZW50cnlfb2xkID0gbmV0bGJsX2RvbWhzaF9zZWFyY2hfZGVmKGVudHJ5LT5kb21haW4pOwogCWlmIChlbnRyeV9vbGQgPT0gTlVMTCkgewogCQllbnRyeS0+dmFsaWQgPSAxOwotCQlJTklUX1JDVV9IRUFEKCZlbnRyeS0+cmN1KTsKIAogCQlpZiAoZW50cnktPmRvbWFpbiAhPSBOVUxMKSB7CiAJCQl1MzIgYmt0ID0gbmV0bGJsX2RvbWhzaF9oYXNoKGVudHJ5LT5kb21haW4pOwpkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jCmluZGV4IDk4ZWQyMmUuLjg1MmQ5ZDcgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYworKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdW5sYWJlbGVkLmMKQEAgLTMyNyw3ICszMjcsNiBAQAogCWVudHJ5LT5saXN0LmFkZHIgPSBhZGRyLT5zX2FkZHIgJiBtYXNrLT5zX2FkZHI7CiAJZW50cnktPmxpc3QubWFzayA9IG1hc2stPnNfYWRkcjsKIAllbnRyeS0+bGlzdC52YWxpZCA9IDE7Ci0JSU5JVF9SQ1VfSEVBRCgmZW50cnktPnJjdSk7CiAJZW50cnktPnNlY2lkID0gc2VjaWQ7CiAKIAlzcGluX2xvY2soJm5ldGxibF91bmxoc2hfbG9jayk7CkBAIC0zNzMsNyArMzcyLDYgQEAKIAllbnRyeS0+bGlzdC5hZGRyLnM2X2FkZHIzMlszXSAmPSBtYXNrLT5zNl9hZGRyMzJbM107CiAJaXB2Nl9hZGRyX2NvcHkoJmVudHJ5LT5saXN0Lm1hc2ssIG1hc2spOwogCWVudHJ5LT5saXN0LnZhbGlkID0gMTsKLQlJTklUX1JDVV9IRUFEKCZlbnRyeS0+cmN1KTsKIAllbnRyeS0+c2VjaWQgPSBzZWNpZDsKIAogCXNwaW5fbG9jaygmbmV0bGJsX3VubGhzaF9sb2NrKTsKQEAgLTQxMCw3ICs0MDgsNiBAQAogCUlOSVRfTElTVF9IRUFEKCZpZmFjZS0+YWRkcjRfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmlmYWNlLT5hZGRyNl9saXN0KTsKIAlpZmFjZS0+dmFsaWQgPSAxOwotCUlOSVRfUkNVX0hFQUQoJmlmYWNlLT5yY3UpOwogCiAJc3Bpbl9sb2NrKCZuZXRsYmxfdW5saHNoX2xvY2spOwogCWlmIChpZmluZGV4ID4gMCkgewpkaWZmIC0tZ2l0IGEvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jIGIvbmV0L25ldGxpbmsvYWZfbmV0bGluay5jCmluZGV4IDRjNTk3MmIuLjMyMGQwNDIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2FmX25ldGxpbmsuYworKysgYi9uZXQvbmV0bGluay9hZl9uZXRsaW5rLmMKQEAgLTE5NzgsMTIgKzE5NzgsMTIgQEAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCiAJCXNlcV9wdXRzKHNlcSwKIAkJCSAic2sgICAgICAgRXRoIFBpZCAgICBHcm91cHMgICAiCi0JCQkgIlJtZW0gICAgIFdtZW0gICAgIER1bXAgICAgIExvY2tzICAgICBEcm9wc1xuIik7CisJCQkgIlJtZW0gICAgIFdtZW0gICAgIER1bXAgICAgIExvY2tzICAgICBEcm9wcyAgICAgSW5vZGVcbiIpOwogCWVsc2UgewogCQlzdHJ1Y3Qgc29jayAqcyA9IHY7CiAJCXN0cnVjdCBuZXRsaW5rX3NvY2sgKm5sayA9IG5sa19zayhzKTsKIAotCQlzZXFfcHJpbnRmKHNlcSwgIiVwICUtM2QgJS02ZCAlMDh4ICUtOGQgJS04ZCAlcCAlLThkICUtOGRcbiIsCisJCXNlcV9wcmludGYoc2VxLCAiJXAgJS0zZCAlLTZkICUwOHggJS04ZCAlLThkICVwICUtOGQgJS04ZCAlLThsdVxuIiwKIAkJCSAgIHMsCiAJCQkgICBzLT5za19wcm90b2NvbCwKIAkJCSAgIG5say0+cGlkLApAQCAtMTk5Miw3ICsxOTkyLDggQEAKIAkJCSAgIHNrX3dtZW1fYWxsb2NfZ2V0KHMpLAogCQkJICAgbmxrLT5jYiwKIAkJCSAgIGF0b21pY19yZWFkKCZzLT5za19yZWZjbnQpLAotCQkJICAgYXRvbWljX3JlYWQoJnMtPnNrX2Ryb3BzKQorCQkJICAgYXRvbWljX3JlYWQoJnMtPnNrX2Ryb3BzKSwKKwkJCSAgIHNvY2tfaV9pbm8ocykKIAkJCSk7CiAKIAl9CmRpZmYgLS1naXQgYS9uZXQvbmV0bGluay9nZW5ldGxpbmsuYyBiL25ldC9uZXRsaW5rL2dlbmV0bGluay5jCmluZGV4IGQwN2VjZGEuLmE0YjZlMTQgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsaW5rL2dlbmV0bGluay5jCisrKyBiL25ldC9uZXRsaW5rL2dlbmV0bGluay5jCkBAIC02ODEsOSArNjgxLDcgQEAKIAlpbnQgY2hhaW5zX3RvX3NraXAgPSBjYi0+YXJnc1swXTsKIAlpbnQgZmFtc190b19za2lwID0gY2ItPmFyZ3NbMV07CiAKLQlmb3IgKGkgPSAwOyBpIDwgR0VOTF9GQU1fVEFCX1NJWkU7IGkrKykgewotCQlpZiAoaSA8IGNoYWluc190b19za2lwKQotCQkJY29udGludWU7CisJZm9yIChpID0gY2hhaW5zX3RvX3NraXA7IGkgPCBHRU5MX0ZBTV9UQUJfU0laRTsgaSsrKSB7CiAJCW4gPSAwOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ0LCBnZW5sX2ZhbWlseV9jaGFpbihpKSwgZmFtaWx5X2xpc3QpIHsKIAkJCWlmICghcnQtPm5ldG5zb2sgJiYgIW5ldF9lcShuZXQsICZpbml0X25ldCkpCmRpZmYgLS1naXQgYS9uZXQvbmV0cm9tL2FmX25ldHJvbS5jIGIvbmV0L25ldHJvbS9hZl9uZXRyb20uYwppbmRleCA3MTYwNGM2Li5hMjQ5MTI3IDEwMDY0NAotLS0gYS9uZXQvbmV0cm9tL2FmX25ldHJvbS5jCisrKyBiL25ldC9uZXRyb20vYWZfbmV0cm9tLmMKQEAgLTEyNjcsMjggKzEyNjcsMTMgQEAKIAogc3RhdGljIHZvaWQgKm5yX2luZm9fc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBzb2NrICpzOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCWludCBpID0gMTsKLQogCXNwaW5fbG9ja19iaCgmbnJfbGlzdF9sb2NrKTsKLQlpZiAoKnBvcyA9PSAwKQotCQlyZXR1cm4gU0VRX1NUQVJUX1RPS0VOOwotCi0Jc2tfZm9yX2VhY2gocywgbm9kZSwgJm5yX2xpc3QpIHsKLQkJaWYgKGkgPT0gKnBvcykKLQkJCXJldHVybiBzOwotCQkrK2k7Ci0JfQotCXJldHVybiBOVUxMOworCXJldHVybiBzZXFfaGxpc3Rfc3RhcnRfaGVhZCgmbnJfbGlzdCwgKnBvcyk7CiB9CiAKIHN0YXRpYyB2b2lkICpucl9pbmZvX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCSsrKnBvczsKLQotCXJldHVybiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pID8gc2tfaGVhZCgmbnJfbGlzdCkKLQkJOiBza19uZXh0KChzdHJ1Y3Qgc29jayAqKXYpOworCXJldHVybiBzZXFfaGxpc3RfbmV4dCh2LCAmbnJfbGlzdCwgcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgbnJfaW5mb19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpAQCAtMTI5OCw3ICsxMjgzLDcgQEAKIAogc3RhdGljIGludCBucl9pbmZvX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7Ci0Jc3RydWN0IHNvY2sgKnMgPSB2OworCXN0cnVjdCBzb2NrICpzID0gc2tfZW50cnkodik7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbnJfc29jayAqbnI7CiAJY29uc3QgY2hhciAqZGV2bmFtZTsKZGlmZiAtLWdpdCBhL25ldC9uZXRyb20vbnJfcm91dGUuYyBiL25ldC9uZXRyb20vbnJfcm91dGUuYwppbmRleCBlMmUyZDMzLi41Y2M2NDgwIDEwMDY0NAotLS0gYS9uZXQvbmV0cm9tL25yX3JvdXRlLmMKKysrIGIvbmV0L25ldHJvbS9ucl9yb3V0ZS5jCkBAIC04NjMsMzMgKzg2MywxMyBAQAogCiBzdGF0aWMgdm9pZCAqbnJfbm9kZV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IG5yX25vZGUgKm5yX25vZGU7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0JaW50IGkgPSAxOwotCiAJc3Bpbl9sb2NrX2JoKCZucl9ub2RlX2xpc3RfbG9jayk7Ci0JaWYgKCpwb3MgPT0gMCkKLQkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKLQotCW5yX25vZGVfZm9yX2VhY2gobnJfbm9kZSwgbm9kZSwgJm5yX25vZGVfbGlzdCkgewotCQlpZiAoaSA9PSAqcG9zKQotCQkJcmV0dXJuIG5yX25vZGU7Ci0JCSsraTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gc2VxX2hsaXN0X3N0YXJ0X2hlYWQoJm5yX25vZGVfbGlzdCwgKnBvcyk7CiB9CiAKIHN0YXRpYyB2b2lkICpucl9ub2RlX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCSsrKnBvczsKLQotCW5vZGUgPSAodiA9PSBTRVFfU1RBUlRfVE9LRU4pCi0JCT8gbnJfbm9kZV9saXN0LmZpcnN0Ci0JCTogKChzdHJ1Y3QgbnJfbm9kZSAqKXYpLT5ub2RlX25vZGUubmV4dDsKLQotCXJldHVybiBobGlzdF9lbnRyeShub2RlLCBzdHJ1Y3QgbnJfbm9kZSwgbm9kZV9ub2RlKTsKKwlyZXR1cm4gc2VxX2hsaXN0X25leHQodiwgJm5yX25vZGVfbGlzdCwgcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgbnJfbm9kZV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpAQCAtOTA2LDcgKzg4Niw5IEBACiAJCXNlcV9wdXRzKHNlcSwKIAkJCSAiY2FsbHNpZ24gIG1uZW1vbmljIHcgbiBxdWFsIG9icyBuZWlnaCBxdWFsIG9icyBuZWlnaCBxdWFsIG9icyBuZWlnaFxuIik7CiAJZWxzZSB7Ci0JCXN0cnVjdCBucl9ub2RlICpucl9ub2RlID0gdjsKKwkJc3RydWN0IG5yX25vZGUgKm5yX25vZGUgPSBobGlzdF9lbnRyeSh2LCBzdHJ1Y3QgbnJfbm9kZSwKKwkJCQkJCSAgICAgIG5vZGVfbm9kZSk7CisKIAkJbnJfbm9kZV9sb2NrKG5yX25vZGUpOwogCQlzZXFfcHJpbnRmKHNlcSwgIiUtOXMgJS03cyAgJWQgJWQiLAogCQkJYXgyYXNjKGJ1ZiwgJm5yX25vZGUtPmNhbGxzaWduKSwKQEAgLTk0OSwzMSArOTMxLDEzIEBACiAKIHN0YXRpYyB2b2lkICpucl9uZWlnaF9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IG5yX25laWdoICpucl9uZWlnaDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQlpbnQgaSA9IDE7Ci0KIAlzcGluX2xvY2tfYmgoJm5yX25laWdoX2xpc3RfbG9jayk7Ci0JaWYgKCpwb3MgPT0gMCkKLQkJcmV0dXJuIFNFUV9TVEFSVF9UT0tFTjsKLQotCW5yX25laWdoX2Zvcl9lYWNoKG5yX25laWdoLCBub2RlLCAmbnJfbmVpZ2hfbGlzdCkgewotCQlpZiAoaSA9PSAqcG9zKQotCQkJcmV0dXJuIG5yX25laWdoOwotCX0KLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gc2VxX2hsaXN0X3N0YXJ0X2hlYWQoJm5yX25laWdoX2xpc3QsICpwb3MpOwogfQogCiBzdGF0aWMgdm9pZCAqbnJfbmVpZ2hfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0JKysqcG9zOwotCi0Jbm9kZSA9ICh2ID09IFNFUV9TVEFSVF9UT0tFTikKLQkJPyBucl9uZWlnaF9saXN0LmZpcnN0Ci0JCTogKChzdHJ1Y3QgbnJfbmVpZ2ggKil2KS0+bmVpZ2hfbm9kZS5uZXh0OwotCi0JcmV0dXJuIGhsaXN0X2VudHJ5KG5vZGUsIHN0cnVjdCBucl9uZWlnaCwgbmVpZ2hfbm9kZSk7CisJcmV0dXJuIHNlcV9obGlzdF9uZXh0KHYsICZucl9uZWlnaF9saXN0LCBwb3MpOwogfQogCiBzdGF0aWMgdm9pZCBucl9uZWlnaF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpAQCAtOTg5LDggKzk1Myw5IEBACiAJaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQogCQlzZXFfcHV0cyhzZXEsICJhZGRyICBjYWxsc2lnbiAgZGV2ICBxdWFsIGxvY2sgY291bnQgZmFpbGVkIGRpZ2lwZWF0ZXJzXG4iKTsKIAllbHNlIHsKLQkJc3RydWN0IG5yX25laWdoICpucl9uZWlnaCA9IHY7CisJCXN0cnVjdCBucl9uZWlnaCAqbnJfbmVpZ2g7CiAKKwkJbnJfbmVpZ2ggPSBobGlzdF9lbnRyeSh2LCBzdHJ1Y3QgbnJfbmVpZ2gsIG5laWdoX25vZGUpOwogCQlzZXFfcHJpbnRmKHNlcSwgIiUwNWQgJS05cyAlLTRzICAlM2QgICAgJWQgICAlM2QgICAgJTNkIiwKIAkJCW5yX25laWdoLT5udW1iZXIsCiAJCQlheDJhc2MoYnVmLCAmbnJfbmVpZ2gtPmNhbGxzaWduKSwKZGlmZiAtLWdpdCBhL25ldC9wYWNrZXQvS2NvbmZpZyBiL25ldC9wYWNrZXQvS2NvbmZpZwppbmRleCAzNGZmOTNmLi4wMDYwZTNiIDEwMDY0NAotLS0gYS9uZXQvcGFja2V0L0tjb25maWcKKysrIGIvbmV0L3BhY2tldC9LY29uZmlnCkBAIC0xNCwxMyArMTQsMyBAQAogCSAgYmUgY2FsbGVkIGFmX3BhY2tldC4KIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KLQotY29uZmlnIFBBQ0tFVF9NTUFQCi0JYm9vbCAiUGFja2V0IHNvY2tldDogbW1hcHBlZCBJTyIKLQlkZXBlbmRzIG9uIFBBQ0tFVAotCWhlbHAKLQkgIElmIHlvdSBzYXkgWSBoZXJlLCB0aGUgUGFja2V0IHByb3RvY29sIGRyaXZlciB3aWxsIHVzZSBhbiBJTwotCSAgbWVjaGFuaXNtIHRoYXQgcmVzdWx0cyBpbiBmYXN0ZXIgY29tbXVuaWNhdGlvbi4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQpkaWZmIC0tZ2l0IGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYyBiL25ldC9wYWNrZXQvYWZfcGFja2V0LmMKaW5kZXggOTM5NDcxZS4uMDMxYTVlNiAxMDA2NDQKLS0tIGEvbmV0L3BhY2tldC9hZl9wYWNrZXQuYworKysgYi9uZXQvcGFja2V0L2FmX3BhY2tldC5jCkBAIC04MCw2ICs4MCw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdmxhbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpcnRpb19uZXQuaD4KIAogI2lmZGVmIENPTkZJR19JTkVUCiAjaW5jbHVkZSA8bmV0L2luZXRfY29tbW9uLmg+CkBAIC0xNTYsNyArMTU3LDYgQEAKIAl1bnNpZ25lZCBjaGFyCW1yX2FkZHJlc3NbTUFYX0FERFJfTEVOXTsKIH07CiAKLSNpZmRlZiBDT05GSUdfUEFDS0VUX01NQVAKIHN0YXRpYyBpbnQgcGFja2V0X3NldF9yaW5nKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHRwYWNrZXRfcmVxICpyZXEsCiAJCWludCBjbG9zaW5nLCBpbnQgdHhfcmluZyk7CiAKQEAgLTE3Niw3ICsxNzYsNiBAQAogCiBzdHJ1Y3QgcGFja2V0X3NvY2s7CiBzdGF0aWMgaW50IHRwYWNrZXRfc25kKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHN0cnVjdCBtc2doZHIgKm1zZyk7Ci0jZW5kaWYKIAogc3RhdGljIHZvaWQgcGFja2V0X2ZsdXNoX21jbGlzdChzdHJ1Y3Qgc29jayAqc2spOwogCkBAIC0xODQsMjYgKzE4MywyMyBAQAogCS8qIHN0cnVjdCBzb2NrIGhhcyB0byBiZSB0aGUgZmlyc3QgbWVtYmVyIG9mIHBhY2tldF9zb2NrICovCiAJc3RydWN0IHNvY2sJCXNrOwogCXN0cnVjdCB0cGFja2V0X3N0YXRzCXN0YXRzOwotI2lmZGVmIENPTkZJR19QQUNLRVRfTU1BUAogCXN0cnVjdCBwYWNrZXRfcmluZ19idWZmZXIJcnhfcmluZzsKIAlzdHJ1Y3QgcGFja2V0X3JpbmdfYnVmZmVyCXR4X3Jpbmc7CiAJaW50CQkJY29weV90aHJlc2g7Ci0jZW5kaWYKIAlzcGlubG9ja190CQliaW5kX2xvY2s7CiAJc3RydWN0IG11dGV4CQlwZ192ZWNfbG9jazsKIAl1bnNpZ25lZCBpbnQJCXJ1bm5pbmc6MSwJLyogcHJvdF9ob29rIGlzIGF0dGFjaGVkKi8KIAkJCQlhdXhkYXRhOjEsCi0JCQkJb3JpZ2RldjoxOworCQkJCW9yaWdkZXY6MSwKKwkJCQloYXNfdm5ldF9oZHI6MTsKIAlpbnQJCQlpZmluZGV4OwkvKiBib3VuZCBkZXZpY2UJCSovCiAJX19iZTE2CQkJbnVtOwogCXN0cnVjdCBwYWNrZXRfbWNsaXN0CSptY2xpc3Q7Ci0jaWZkZWYgQ09ORklHX1BBQ0tFVF9NTUFQCiAJYXRvbWljX3QJCW1hcHBlZDsKIAllbnVtIHRwYWNrZXRfdmVyc2lvbnMJdHBfdmVyc2lvbjsKIAl1bnNpZ25lZCBpbnQJCXRwX2hkcmxlbjsKIAl1bnNpZ25lZCBpbnQJCXRwX3Jlc2VydmU7CiAJdW5zaWduZWQgaW50CQl0cF9sb3NzOjE7Ci0jZW5kaWYKIAlzdHJ1Y3QgcGFja2V0X3R5cGUJcHJvdF9ob29rIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiB9OwogCkBAIC0yMTcsOCArMjEzLDYgQEAKIAogI2RlZmluZSBQQUNLRVRfU0tCX0NCKF9fc2tiKQkoKHN0cnVjdCBwYWNrZXRfc2tiX2NiICopKChfX3NrYiktPmNiKSkKIAotI2lmZGVmIENPTkZJR19QQUNLRVRfTU1BUAotCiBzdGF0aWMgdm9pZCBfX3BhY2tldF9zZXRfc3RhdHVzKHN0cnVjdCBwYWNrZXRfc29jayAqcG8sIHZvaWQgKmZyYW1lLCBpbnQgc3RhdHVzKQogewogCXVuaW9uIHsKQEAgLTMxMyw4ICszMDcsNiBAQAogCWJ1ZmYtPmhlYWQgPSBidWZmLT5oZWFkICE9IGJ1ZmYtPmZyYW1lX21heCA/IGJ1ZmYtPmhlYWQrMSA6IDA7CiB9CiAKLSNlbmRpZgotCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWNrZXRfc29jayAqcGt0X3NrKHN0cnVjdCBzb2NrICpzaykKIHsKIAlyZXR1cm4gKHN0cnVjdCBwYWNrZXRfc29jayAqKXNrOwpAQCAtNjM4LDcgKzYzMCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfUEFDS0VUX01NQVAKIHN0YXRpYyBpbnQgdHBhY2tldF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJICAgICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcHQsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldikKIHsKQEAgLTEwNTQsNyArMTA0NSwzMCBAQAogCW11dGV4X3VubG9jaygmcG8tPnBnX3ZlY19sb2NrKTsKIAlyZXR1cm4gZXJyOwogfQotI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKnBhY2tldF9hbGxvY19za2Ioc3RydWN0IHNvY2sgKnNrLCBzaXplX3QgcHJlcGFkLAorCQkJCQkgICAgICAgc2l6ZV90IHJlc2VydmUsIHNpemVfdCBsZW4sCisJCQkJCSAgICAgICBzaXplX3QgbGluZWFyLCBpbnQgbm9ibG9jaywKKwkJCQkJICAgICAgIGludCAqZXJyKQoreworCXN0cnVjdCBza19idWZmICpza2I7CisKKwkvKiBVbmRlciBhIHBhZ2U/ICBEb24ndCBib3RoZXIgd2l0aCBwYWdlZCBza2IuICovCisJaWYgKHByZXBhZCArIGxlbiA8IFBBR0VfU0laRSB8fCAhbGluZWFyKQorCQlsaW5lYXIgPSBsZW47CisKKwlza2IgPSBzb2NrX2FsbG9jX3NlbmRfcHNrYihzaywgcHJlcGFkICsgbGluZWFyLCBsZW4gLSBsaW5lYXIsIG5vYmxvY2ssCisJCQkJICAgZXJyKTsKKwlpZiAoIXNrYikKKwkJcmV0dXJuIE5VTEw7CisKKwlza2JfcmVzZXJ2ZShza2IsIHJlc2VydmUpOworCXNrYl9wdXQoc2tiLCBsaW5lYXIpOworCXNrYi0+ZGF0YV9sZW4gPSBsZW4gLSBsaW5lYXI7CisJc2tiLT5sZW4gKz0gbGVuIC0gbGluZWFyOworCisJcmV0dXJuIHNrYjsKK30KIAogc3RhdGljIGludCBwYWNrZXRfc25kKHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkgIHN0cnVjdCBtc2doZHIgKm1zZywgc2l6ZV90IGxlbikKQEAgLTEwNjYsMTQgKzEwODAsMTcgQEAKIAlfX2JlMTYgcHJvdG87CiAJdW5zaWduZWQgY2hhciAqYWRkcjsKIAlpbnQgaWZpbmRleCwgZXJyLCByZXNlcnZlID0gMDsKKwlzdHJ1Y3QgdmlydGlvX25ldF9oZHIgdm5ldF9oZHIgPSB7IDAgfTsKKwlpbnQgb2Zmc2V0ID0gMDsKKwlpbnQgdm5ldF9oZHJfbGVuOworCXN0cnVjdCBwYWNrZXRfc29jayAqcG8gPSBwa3Rfc2soc2spOworCXVuc2lnbmVkIHNob3J0IGdzb190eXBlID0gMDsKIAogCS8qCiAJICoJR2V0IGFuZCB2ZXJpZnkgdGhlIGFkZHJlc3MuCiAJICovCiAKIAlpZiAoc2FkZHIgPT0gTlVMTCkgewotCQlzdHJ1Y3QgcGFja2V0X3NvY2sgKnBvID0gcGt0X3NrKHNrKTsKLQogCQlpZmluZGV4CT0gcG8tPmlmaW5kZXg7CiAJCXByb3RvCT0gcG8tPm51bTsKIAkJYWRkcgk9IE5VTEw7CkBAIC0xMTAwLDI1ICsxMTE3LDc0IEBACiAJaWYgKCEoZGV2LT5mbGFncyAmIElGRl9VUCkpCiAJCWdvdG8gb3V0X3VubG9jazsKIAorCWlmIChwby0+aGFzX3ZuZXRfaGRyKSB7CisJCXZuZXRfaGRyX2xlbiA9IHNpemVvZih2bmV0X2hkcik7CisKKwkJZXJyID0gLUVJTlZBTDsKKwkJaWYgKGxlbiA8IHZuZXRfaGRyX2xlbikKKwkJCWdvdG8gb3V0X3VubG9jazsKKworCQlsZW4gLT0gdm5ldF9oZHJfbGVuOworCisJCWVyciA9IG1lbWNweV9mcm9taW92ZWMoKHZvaWQgKikmdm5ldF9oZHIsIG1zZy0+bXNnX2lvdiwKKwkJCQkgICAgICAgdm5ldF9oZHJfbGVuKTsKKwkJaWYgKGVyciA8IDApCisJCQlnb3RvIG91dF91bmxvY2s7CisKKwkJaWYgKCh2bmV0X2hkci5mbGFncyAmIFZJUlRJT19ORVRfSERSX0ZfTkVFRFNfQ1NVTSkgJiYKKwkJICAgICh2bmV0X2hkci5jc3VtX3N0YXJ0ICsgdm5ldF9oZHIuY3N1bV9vZmZzZXQgKyAyID4KKwkJICAgICAgdm5ldF9oZHIuaGRyX2xlbikpCisJCQl2bmV0X2hkci5oZHJfbGVuID0gdm5ldF9oZHIuY3N1bV9zdGFydCArCisJCQkJCQkgdm5ldF9oZHIuY3N1bV9vZmZzZXQgKyAyOworCisJCWVyciA9IC1FSU5WQUw7CisJCWlmICh2bmV0X2hkci5oZHJfbGVuID4gbGVuKQorCQkJZ290byBvdXRfdW5sb2NrOworCisJCWlmICh2bmV0X2hkci5nc29fdHlwZSAhPSBWSVJUSU9fTkVUX0hEUl9HU09fTk9ORSkgeworCQkJc3dpdGNoICh2bmV0X2hkci5nc29fdHlwZSAmIH5WSVJUSU9fTkVUX0hEUl9HU09fRUNOKSB7CisJCQljYXNlIFZJUlRJT19ORVRfSERSX0dTT19UQ1BWNDoKKwkJCQlnc29fdHlwZSA9IFNLQl9HU09fVENQVjQ7CisJCQkJYnJlYWs7CisJCQljYXNlIFZJUlRJT19ORVRfSERSX0dTT19UQ1BWNjoKKwkJCQlnc29fdHlwZSA9IFNLQl9HU09fVENQVjY7CisJCQkJYnJlYWs7CisJCQljYXNlIFZJUlRJT19ORVRfSERSX0dTT19VRFA6CisJCQkJZ3NvX3R5cGUgPSBTS0JfR1NPX1VEUDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJZ290byBvdXRfdW5sb2NrOworCQkJfQorCisJCQlpZiAodm5ldF9oZHIuZ3NvX3R5cGUgJiBWSVJUSU9fTkVUX0hEUl9HU09fRUNOKQorCQkJCWdzb190eXBlIHw9IFNLQl9HU09fVENQX0VDTjsKKworCQkJaWYgKHZuZXRfaGRyLmdzb19zaXplID09IDApCisJCQkJZ290byBvdXRfdW5sb2NrOworCisJCX0KKwl9CisKIAllcnIgPSAtRU1TR1NJWkU7Ci0JaWYgKGxlbiA+IGRldi0+bXR1K3Jlc2VydmUpCisJaWYgKCFnc29fdHlwZSAmJiAobGVuID4gZGV2LT5tdHUrcmVzZXJ2ZSkpCiAJCWdvdG8gb3V0X3VubG9jazsKIAotCXNrYiA9IHNvY2tfYWxsb2Nfc2VuZF9za2Ioc2ssIGxlbiArIExMX0FMTE9DQVRFRF9TUEFDRShkZXYpLAotCQkJCW1zZy0+bXNnX2ZsYWdzICYgTVNHX0RPTlRXQUlULCAmZXJyKTsKKwllcnIgPSAtRU5PQlVGUzsKKwlza2IgPSBwYWNrZXRfYWxsb2Nfc2tiKHNrLCBMTF9BTExPQ0FURURfU1BBQ0UoZGV2KSwKKwkJCSAgICAgICBMTF9SRVNFUlZFRF9TUEFDRShkZXYpLCBsZW4sIHZuZXRfaGRyLmhkcl9sZW4sCisJCQkgICAgICAgbXNnLT5tc2dfZmxhZ3MgJiBNU0dfRE9OVFdBSVQsICZlcnIpOwogCWlmIChza2IgPT0gTlVMTCkKIAkJZ290byBvdXRfdW5sb2NrOwogCi0Jc2tiX3Jlc2VydmUoc2tiLCBMTF9SRVNFUlZFRF9TUEFDRShkZXYpKTsKLQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoc2tiKTsKKwlza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgcmVzZXJ2ZSk7CiAKIAllcnIgPSAtRUlOVkFMOwogCWlmIChzb2NrLT50eXBlID09IFNPQ0tfREdSQU0gJiYKLQkgICAgZGV2X2hhcmRfaGVhZGVyKHNrYiwgZGV2LCBudG9ocyhwcm90byksIGFkZHIsIE5VTEwsIGxlbikgPCAwKQorCSAgICAob2Zmc2V0ID0gZGV2X2hhcmRfaGVhZGVyKHNrYiwgZGV2LCBudG9ocyhwcm90byksIGFkZHIsIE5VTEwsIGxlbikpIDwgMCkKIAkJZ290byBvdXRfZnJlZTsKIAogCS8qIFJldHVybnMgLUVGQVVMVCBvbiBlcnJvciAqLwotCWVyciA9IG1lbWNweV9mcm9taW92ZWMoc2tiX3B1dChza2IsIGxlbiksIG1zZy0+bXNnX2lvdiwgbGVuKTsKKwllcnIgPSBza2JfY29weV9kYXRhZ3JhbV9mcm9tX2lvdmVjKHNrYiwgb2Zmc2V0LCBtc2ctPm1zZ19pb3YsIDAsIGxlbik7CiAJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZTsKIApAQCAtMTEyNyw2ICsxMTkzLDI1IEBACiAJc2tiLT5wcmlvcml0eSA9IHNrLT5za19wcmlvcml0eTsKIAlza2ItPm1hcmsgPSBzay0+c2tfbWFyazsKIAorCWlmIChwby0+aGFzX3ZuZXRfaGRyKSB7CisJCWlmICh2bmV0X2hkci5mbGFncyAmIFZJUlRJT19ORVRfSERSX0ZfTkVFRFNfQ1NVTSkgeworCQkJaWYgKCFza2JfcGFydGlhbF9jc3VtX3NldChza2IsIHZuZXRfaGRyLmNzdW1fc3RhcnQsCisJCQkJCQkgIHZuZXRfaGRyLmNzdW1fb2Zmc2V0KSkgeworCQkJCWVyciA9IC1FSU5WQUw7CisJCQkJZ290byBvdXRfZnJlZTsKKwkJCX0KKwkJfQorCisJCXNrYl9zaGluZm8oc2tiKS0+Z3NvX3NpemUgPSB2bmV0X2hkci5nc29fc2l6ZTsKKwkJc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSA9IGdzb190eXBlOworCisJCS8qIEhlYWRlciBtdXN0IGJlIGNoZWNrZWQsIGFuZCBnc29fc2VncyBjb21wdXRlZC4gKi8KKwkJc2tiX3NoaW5mbyhza2IpLT5nc29fdHlwZSB8PSBTS0JfR1NPX0RPREdZOworCQlza2Jfc2hpbmZvKHNrYiktPmdzb19zZWdzID0gMDsKKworCQlsZW4gKz0gdm5ldF9oZHJfbGVuOworCX0KKwogCS8qCiAJICoJTm93IHNlbmQgaXQKIAkgKi8KQEAgLTExNTEsMTMgKzEyMzYsMTEgQEAKIHN0YXRpYyBpbnQgcGFja2V0X3NlbmRtc2coc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLAogCQlzdHJ1Y3QgbXNnaGRyICptc2csIHNpemVfdCBsZW4pCiB7Ci0jaWZkZWYgQ09ORklHX1BBQ0tFVF9NTUFQCiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHBhY2tldF9zb2NrICpwbyA9IHBrdF9zayhzayk7CiAJaWYgKHBvLT50eF9yaW5nLnBnX3ZlYykKIAkJcmV0dXJuIHRwYWNrZXRfc25kKHBvLCBtc2cpOwogCWVsc2UKLSNlbmRpZgogCQlyZXR1cm4gcGFja2V0X3NuZChzb2NrLCBtc2csIGxlbik7CiB9CiAKQEAgLTExNzEsOSArMTI1NCw3IEBACiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHBhY2tldF9zb2NrICpwbzsKIAlzdHJ1Y3QgbmV0ICpuZXQ7Ci0jaWZkZWYgQ09ORklHX1BBQ0tFVF9NTUFQCiAJc3RydWN0IHRwYWNrZXRfcmVxIHJlcTsKLSNlbmRpZgogCiAJaWYgKCFzaykKIAkJcmV0dXJuIDA7CkBAIC0xMTgxLDI4ICsxMjYyLDI1IEBACiAJbmV0ID0gc29ja19uZXQoc2spOwogCXBvID0gcGt0X3NrKHNrKTsKIAotCXdyaXRlX2xvY2tfYmgoJm5ldC0+cGFja2V0LnNrbGlzdF9sb2NrKTsKLQlza19kZWxfbm9kZV9pbml0KHNrKTsKKwlzcGluX2xvY2tfYmgoJm5ldC0+cGFja2V0LnNrbGlzdF9sb2NrKTsKKwlza19kZWxfbm9kZV9pbml0X3JjdShzayk7CiAJc29ja19wcm90X2ludXNlX2FkZChuZXQsIHNrLT5za19wcm90LCAtMSk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZuZXQtPnBhY2tldC5za2xpc3RfbG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJm5ldC0+cGFja2V0LnNrbGlzdF9sb2NrKTsKIAotCS8qCi0JICoJVW5ob29rIHBhY2tldCByZWNlaXZlIGhhbmRsZXIuCi0JICovCi0KKwlzcGluX2xvY2soJnBvLT5iaW5kX2xvY2spOwogCWlmIChwby0+cnVubmluZykgewogCQkvKgotCQkgKglSZW1vdmUgdGhlIHByb3RvY29sIGhvb2sKKwkJICogUmVtb3ZlIGZyb20gcHJvdG9jb2wgdGFibGUKIAkJICovCi0JCWRldl9yZW1vdmVfcGFjaygmcG8tPnByb3RfaG9vayk7CiAJCXBvLT5ydW5uaW5nID0gMDsKIAkJcG8tPm51bSA9IDA7CisJCV9fZGV2X3JlbW92ZV9wYWNrKCZwby0+cHJvdF9ob29rKTsKIAkJX19zb2NrX3B1dChzayk7CiAJfQorCXNwaW5fdW5sb2NrKCZwby0+YmluZF9sb2NrKTsKIAogCXBhY2tldF9mbHVzaF9tY2xpc3Qoc2spOwogCi0jaWZkZWYgQ09ORklHX1BBQ0tFVF9NTUFQCiAJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKIAogCWlmIChwby0+cnhfcmluZy5wZ192ZWMpCkBAIC0xMjEwLDEyICsxMjg4LDExIEBACiAKIAlpZiAocG8tPnR4X3JpbmcucGdfdmVjKQogCQlwYWNrZXRfc2V0X3Jpbmcoc2ssICZyZXEsIDEsIDEpOwotI2VuZGlmCiAKKwlzeW5jaHJvbml6ZV9uZXQoKTsKIAkvKgogCSAqCU5vdyB0aGUgc29ja2V0IGlzIGRlYWQuIE5vIG1vcmUgaW5wdXQgd2lsbCBhcHBlYXIuCiAJICovCi0KIAlzb2NrX29ycGhhbihzayk7CiAJc29jay0+c2sgPSBOVUxMOwogCkBAIC0xMzk5LDEwICsxNDc2LDExIEBACiAJCXBvLT5ydW5uaW5nID0gMTsKIAl9CiAKLQl3cml0ZV9sb2NrX2JoKCZuZXQtPnBhY2tldC5za2xpc3RfbG9jayk7Ci0Jc2tfYWRkX25vZGUoc2ssICZuZXQtPnBhY2tldC5za2xpc3QpOworCXNwaW5fbG9ja19iaCgmbmV0LT5wYWNrZXQuc2tsaXN0X2xvY2spOworCXNrX2FkZF9ub2RlX3JjdShzaywgJm5ldC0+cGFja2V0LnNrbGlzdCk7CiAJc29ja19wcm90X2ludXNlX2FkZChuZXQsICZwYWNrZXRfcHJvdG8sIDEpOwotCXdyaXRlX3VubG9ja19iaCgmbmV0LT5wYWNrZXQuc2tsaXN0X2xvY2spOworCXNwaW5fdW5sb2NrX2JoKCZuZXQtPnBhY2tldC5za2xpc3RfbG9jayk7CisKIAlyZXR1cm4gMDsKIG91dDoKIAlyZXR1cm4gZXJyOwpAQCAtMTQyMCw2ICsxNDk4LDcgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBjb3BpZWQsIGVycjsKIAlzdHJ1Y3Qgc29ja2FkZHJfbGwgKnNsbDsKKwlpbnQgdm5ldF9oZHJfbGVuID0gMDsKIAogCWVyciA9IC1FSU5WQUw7CiAJaWYgKGZsYWdzICYgfihNU0dfUEVFS3xNU0dfRE9OVFdBSVR8TVNHX1RSVU5DfE1TR19DTVNHX0NPTVBBVCkpCkBAIC0xNDUxLDYgKzE1MzAsNDggQEAKIAlpZiAoc2tiID09IE5VTEwpCiAJCWdvdG8gb3V0OwogCisJaWYgKHBrdF9zayhzayktPmhhc192bmV0X2hkcikgeworCQlzdHJ1Y3QgdmlydGlvX25ldF9oZHIgdm5ldF9oZHIgPSB7IDAgfTsKKworCQllcnIgPSAtRUlOVkFMOworCQl2bmV0X2hkcl9sZW4gPSBzaXplb2Yodm5ldF9oZHIpOworCQlpZiAoKGxlbiAtPSB2bmV0X2hkcl9sZW4pIDwgMCkKKwkJCWdvdG8gb3V0X2ZyZWU7CisKKwkJaWYgKHNrYl9pc19nc28oc2tiKSkgeworCQkJc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2luZm8gPSBza2Jfc2hpbmZvKHNrYik7CisKKwkJCS8qIFRoaXMgaXMgYSBoaW50IGFzIHRvIGhvdyBtdWNoIHNob3VsZCBiZSBsaW5lYXIuICovCisJCQl2bmV0X2hkci5oZHJfbGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKKwkJCXZuZXRfaGRyLmdzb19zaXplID0gc2luZm8tPmdzb19zaXplOworCQkJaWYgKHNpbmZvLT5nc29fdHlwZSAmIFNLQl9HU09fVENQVjQpCisJCQkJdm5ldF9oZHIuZ3NvX3R5cGUgPSBWSVJUSU9fTkVUX0hEUl9HU09fVENQVjQ7CisJCQllbHNlIGlmIChzaW5mby0+Z3NvX3R5cGUgJiBTS0JfR1NPX1RDUFY2KQorCQkJCXZuZXRfaGRyLmdzb190eXBlID0gVklSVElPX05FVF9IRFJfR1NPX1RDUFY2OworCQkJZWxzZSBpZiAoc2luZm8tPmdzb190eXBlICYgU0tCX0dTT19VRFApCisJCQkJdm5ldF9oZHIuZ3NvX3R5cGUgPSBWSVJUSU9fTkVUX0hEUl9HU09fVURQOworCQkJZWxzZSBpZiAoc2luZm8tPmdzb190eXBlICYgU0tCX0dTT19GQ09FKQorCQkJCWdvdG8gb3V0X2ZyZWU7CisJCQllbHNlCisJCQkJQlVHKCk7CisJCQlpZiAoc2luZm8tPmdzb190eXBlICYgU0tCX0dTT19UQ1BfRUNOKQorCQkJCXZuZXRfaGRyLmdzb190eXBlIHw9IFZJUlRJT19ORVRfSERSX0dTT19FQ047CisJCX0gZWxzZQorCQkJdm5ldF9oZHIuZ3NvX3R5cGUgPSBWSVJUSU9fTkVUX0hEUl9HU09fTk9ORTsKKworCQlpZiAoc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fUEFSVElBTCkgeworCQkJdm5ldF9oZHIuZmxhZ3MgPSBWSVJUSU9fTkVUX0hEUl9GX05FRURTX0NTVU07CisJCQl2bmV0X2hkci5jc3VtX3N0YXJ0ID0gc2tiLT5jc3VtX3N0YXJ0IC0KKwkJCQkJCQlza2JfaGVhZHJvb20oc2tiKTsKKwkJCXZuZXRfaGRyLmNzdW1fb2Zmc2V0ID0gc2tiLT5jc3VtX29mZnNldDsKKwkJfSAvKiBlbHNlIGV2ZXJ5dGhpbmcgaXMgemVybyAqLworCisJCWVyciA9IG1lbWNweV90b2lvdmVjKG1zZy0+bXNnX2lvdiwgKHZvaWQgKikmdm5ldF9oZHIsCisJCQkJICAgICB2bmV0X2hkcl9sZW4pOworCQlpZiAoZXJyIDwgMCkKKwkJCWdvdG8gb3V0X2ZyZWU7CisJfQorCiAJLyoKIAkgKglJZiB0aGUgYWRkcmVzcyBsZW5ndGggZmllbGQgaXMgdGhlcmUgdG8gYmUgZmlsbGVkIGluLCB3ZSBmaWxsCiAJICoJaXQgaW4gbm93LgpAQCAtMTUwMiw3ICsxNjIzLDcgQEAKIAkgKglGcmVlIG9yIHJldHVybiB0aGUgYnVmZmVyIGFzIGFwcHJvcHJpYXRlLiBBZ2FpbiB0aGlzCiAJICoJaGlkZXMgYWxsIHRoZSByYWNlcyBhbmQgcmUtZW50cmFuY3kgaXNzdWVzIGZyb20gdXMuCiAJICovCi0JZXJyID0gKGZsYWdzJk1TR19UUlVOQykgPyBza2ItPmxlbiA6IGNvcGllZDsKKwllcnIgPSB2bmV0X2hkcl9sZW4gKyAoKGZsYWdzJk1TR19UUlVOQykgPyBza2ItPmxlbiA6IGNvcGllZCk7CiAKIG91dF9mcmVlOgogCXNrYl9mcmVlX2RhdGFncmFtKHNrLCBza2IpOwpAQCAtMTYxMyw3ICsxNzM0LDcgQEAKIAkJZ290byBkb25lOwogCiAJZXJyID0gLUVJTlZBTDsKLQlpZiAobXJlcS0+bXJfYWxlbiA+IGRldi0+YWRkcl9sZW4pCisJaWYgKG1yZXEtPm1yX2FsZW4gIT0gZGV2LT5hZGRyX2xlbikKIAkJZ290byBkb25lOwogCiAJZXJyID0gLUVOT0JVRlM7CkBAIC0xNzMyLDcgKzE4NTMsNiBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotI2lmZGVmIENPTkZJR19QQUNLRVRfTU1BUAogCWNhc2UgUEFDS0VUX1JYX1JJTkc6CiAJY2FzZSBQQUNLRVRfVFhfUklORzoKIAl7CkBAIC0xNzQwLDYgKzE4NjAsOCBAQAogCiAJCWlmIChvcHRsZW4gPCBzaXplb2YocmVxKSkKIAkJCXJldHVybiAtRUlOVkFMOworCQlpZiAocGt0X3NrKHNrKS0+aGFzX3ZuZXRfaGRyKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChjb3B5X2Zyb21fdXNlcigmcmVxLCBvcHR2YWwsIHNpemVvZihyZXEpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlyZXR1cm4gcGFja2V0X3NldF9yaW5nKHNrLCAmcmVxLCAwLCBvcHRuYW1lID09IFBBQ0tFVF9UWF9SSU5HKTsKQEAgLTE4MDEsNyArMTkyMyw2IEBACiAJCXBvLT50cF9sb3NzID0gISF2YWw7CiAJCXJldHVybiAwOwogCX0KLSNlbmRpZgogCWNhc2UgUEFDS0VUX0FVWERBVEE6CiAJewogCQlpbnQgdmFsOwpAQCAtMTgyNiw2ICsxOTQ3LDIyIEBACiAJCXBvLT5vcmlnZGV2ID0gISF2YWw7CiAJCXJldHVybiAwOwogCX0KKwljYXNlIFBBQ0tFVF9WTkVUX0hEUjoKKwl7CisJCWludCB2YWw7CisKKwkJaWYgKHNvY2stPnR5cGUgIT0gU09DS19SQVcpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKHBvLT5yeF9yaW5nLnBnX3ZlYyB8fCBwby0+dHhfcmluZy5wZ192ZWMpCisJCQlyZXR1cm4gLUVCVVNZOworCQlpZiAob3B0bGVuIDwgc2l6ZW9mKHZhbCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2YWwsIG9wdHZhbCwgc2l6ZW9mKHZhbCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcG8tPmhhc192bmV0X2hkciA9ICEhdmFsOworCQlyZXR1cm4gMDsKKwl9CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FTk9QUk9UT09QVDsKIAl9CkBAIC0xODc2LDcgKzIwMTMsMTMgQEAKIAogCQlkYXRhID0gJnZhbDsKIAkJYnJlYWs7Ci0jaWZkZWYgQ09ORklHX1BBQ0tFVF9NTUFQCisJY2FzZSBQQUNLRVRfVk5FVF9IRFI6CisJCWlmIChsZW4gPiBzaXplb2YoaW50KSkKKwkJCWxlbiA9IHNpemVvZihpbnQpOworCQl2YWwgPSBwby0+aGFzX3ZuZXRfaGRyOworCisJCWRhdGEgPSAmdmFsOworCQlicmVhazsKIAljYXNlIFBBQ0tFVF9WRVJTSU9OOgogCQlpZiAobGVuID4gc2l6ZW9mKGludCkpCiAJCQlsZW4gPSBzaXplb2YoaW50KTsKQEAgLTE5MTIsNyArMjA1NSw2IEBACiAJCXZhbCA9IHBvLT50cF9sb3NzOwogCQlkYXRhID0gJnZhbDsKIAkJYnJlYWs7Ci0jZW5kaWYKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVOT1BST1RPT1BUOwogCX0KQEAgLTE5MzIsOCArMjA3NCw4IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGRhdGE7CiAJc3RydWN0IG5ldCAqbmV0ID0gZGV2X25ldChkZXYpOwogCi0JcmVhZF9sb2NrKCZuZXQtPnBhY2tldC5za2xpc3RfbG9jayk7Ci0Jc2tfZm9yX2VhY2goc2ssIG5vZGUsICZuZXQtPnBhY2tldC5za2xpc3QpIHsKKwlyY3VfcmVhZF9sb2NrKCk7CisJc2tfZm9yX2VhY2hfcmN1KHNrLCBub2RlLCAmbmV0LT5wYWNrZXQuc2tsaXN0KSB7CiAJCXN0cnVjdCBwYWNrZXRfc29jayAqcG8gPSBwa3Rfc2soc2spOwogCiAJCXN3aXRjaCAobXNnKSB7CkBAIC0xOTYxLDE4ICsyMTAzLDE5IEBACiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBORVRERVZfVVA6Ci0JCQlzcGluX2xvY2soJnBvLT5iaW5kX2xvY2spOwotCQkJaWYgKGRldi0+aWZpbmRleCA9PSBwby0+aWZpbmRleCAmJiBwby0+bnVtICYmCi0JCQkgICAgIXBvLT5ydW5uaW5nKSB7Ci0JCQkJZGV2X2FkZF9wYWNrKCZwby0+cHJvdF9ob29rKTsKLQkJCQlzb2NrX2hvbGQoc2spOwotCQkJCXBvLT5ydW5uaW5nID0gMTsKKwkJCWlmIChkZXYtPmlmaW5kZXggPT0gcG8tPmlmaW5kZXgpIHsKKwkJCQlzcGluX2xvY2soJnBvLT5iaW5kX2xvY2spOworCQkJCWlmIChwby0+bnVtICYmICFwby0+cnVubmluZykgeworCQkJCQlkZXZfYWRkX3BhY2soJnBvLT5wcm90X2hvb2spOworCQkJCQlzb2NrX2hvbGQoc2spOworCQkJCQlwby0+cnVubmluZyA9IDE7CisJCQkJfQorCQkJCXNwaW5fdW5sb2NrKCZwby0+YmluZF9sb2NrKTsKIAkJCX0KLQkJCXNwaW5fdW5sb2NrKCZwby0+YmluZF9sb2NrKTsKIAkJCWJyZWFrOwogCQl9CiAJfQotCXJlYWRfdW5sb2NrKCZuZXQtPnBhY2tldC5za2xpc3RfbG9jayk7CisJcmN1X3JlYWRfdW5sb2NrKCk7CiAJcmV0dXJuIE5PVElGWV9ET05FOwogfQogCkBAIC0yMDMyLDExICsyMTc1LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2lmbmRlZiBDT05GSUdfUEFDS0VUX01NQVAKLSNkZWZpbmUgcGFja2V0X21tYXAgc29ja19ub19tbWFwCi0jZGVmaW5lIHBhY2tldF9wb2xsIGRhdGFncmFtX3BvbGwKLSNlbHNlCi0KIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGFja2V0X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQgKnNvY2ssCiAJCQkJcG9sbF90YWJsZSAqd2FpdCkKIHsKQEAgLTIzMTgsOCArMjQ1Niw2IEBACiAJbXV0ZXhfdW5sb2NrKCZwby0+cGdfdmVjX2xvY2spOwogCXJldHVybiBlcnI7CiB9Ci0jZW5kaWYKLQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHByb3RvX29wcyBwYWNrZXRfb3BzX3Nwa3QgPSB7CiAJLmZhbWlseSA9CVBGX1BBQ0tFVCwKQEAgLTIzNzQsNDAgKzI1MTAsMjYgQEAKIH07CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jayAqcGFja2V0X3NlcV9pZHgoc3RydWN0IG5ldCAqbmV0LCBsb2ZmX3Qgb2ZmKQotewotCXN0cnVjdCBzb2NrICpzOwotCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCi0Jc2tfZm9yX2VhY2gocywgbm9kZSwgJm5ldC0+cGFja2V0LnNrbGlzdCkgewotCQlpZiAoIW9mZi0tKQotCQkJcmV0dXJuIHM7Ci0JfQotCXJldHVybiBOVUxMOwotfQogCiBzdGF0aWMgdm9pZCAqcGFja2V0X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCi0JX19hY3F1aXJlcyhzZXFfZmlsZV9uZXQoc2VxKS0+cGFja2V0LnNrbGlzdF9sb2NrKQorCV9fYWNxdWlyZXMoUkNVKQogewogCXN0cnVjdCBuZXQgKm5ldCA9IHNlcV9maWxlX25ldChzZXEpOwotCXJlYWRfbG9jaygmbmV0LT5wYWNrZXQuc2tsaXN0X2xvY2spOwotCXJldHVybiAqcG9zID8gcGFja2V0X3NlcV9pZHgobmV0LCAqcG9zIC0gMSkgOiBTRVFfU1RBUlRfVE9LRU47CisKKwlyY3VfcmVhZF9sb2NrKCk7CisJcmV0dXJuIHNlcV9obGlzdF9zdGFydF9oZWFkX3JjdSgmbmV0LT5wYWNrZXQuc2tsaXN0LCAqcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgKnBhY2tldF9zZXFfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7CiAJc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7Ci0JKysqcG9zOwotCXJldHVybiAgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKQotCQk/IHNrX2hlYWQoJm5ldC0+cGFja2V0LnNrbGlzdCkKLQkJOiBza19uZXh0KChzdHJ1Y3Qgc29jayAqKXYpIDsKKwlyZXR1cm4gc2VxX2hsaXN0X25leHRfcmN1KHYsICZuZXQtPnBhY2tldC5za2xpc3QsIHBvcyk7CiB9CiAKIHN0YXRpYyB2b2lkIHBhY2tldF9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKLQlfX3JlbGVhc2VzKHNlcV9maWxlX25ldChzZXEpLT5wYWNrZXQuc2tsaXN0X2xvY2spCisJX19yZWxlYXNlcyhSQ1UpCiB7Ci0Jc3RydWN0IG5ldCAqbmV0ID0gc2VxX2ZpbGVfbmV0KHNlcSk7Ci0JcmVhZF91bmxvY2soJm5ldC0+cGFja2V0LnNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIH0KIAogc3RhdGljIGludCBwYWNrZXRfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCkBAIC0yNDE1LDcgKzI1MzcsNyBAQAogCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikKIAkJc2VxX3B1dHMoc2VxLCAic2sgICAgICAgUmVmQ250IFR5cGUgUHJvdG8gIElmYWNlIFIgUm1lbSAgIFVzZXIgICBJbm9kZVxuIik7CiAJZWxzZSB7Ci0JCXN0cnVjdCBzb2NrICpzID0gdjsKKwkJc3RydWN0IHNvY2sgKnMgPSBza19lbnRyeSh2KTsKIAkJY29uc3Qgc3RydWN0IHBhY2tldF9zb2NrICpwbyA9IHBrdF9zayhzKTsKIAogCQlzZXFfcHJpbnRmKHNlcSwKQEAgLTI0NTcsOSArMjU3OSw5IEBACiAKICNlbmRpZgogCi1zdGF0aWMgaW50IHBhY2tldF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgaW50IF9fbmV0X2luaXQgcGFja2V0X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKLQlyd2xvY2tfaW5pdCgmbmV0LT5wYWNrZXQuc2tsaXN0X2xvY2spOworCXNwaW5fbG9ja19pbml0KCZuZXQtPnBhY2tldC5za2xpc3RfbG9jayk7CiAJSU5JVF9ITElTVF9IRUFEKCZuZXQtPnBhY2tldC5za2xpc3QpOwogCiAJaWYgKCFwcm9jX25ldF9mb3BzX2NyZWF0ZShuZXQsICJwYWNrZXQiLCAwLCAmcGFja2V0X3NlcV9mb3BzKSkKQEAgLTI0NjgsNyArMjU5MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHBhY2tldF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IHBhY2tldF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJcHJvY19uZXRfcmVtb3ZlKG5ldCwgInBhY2tldCIpOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9kYXRhZ3JhbS5jIGIvbmV0L3Bob25ldC9kYXRhZ3JhbS5jCmluZGV4IDY3ZjA3MmUuLjM4NzE5N2IgMTAwNjQ0Ci0tLSBhL25ldC9waG9uZXQvZGF0YWdyYW0uYworKysgYi9uZXQvcGhvbmV0L2RhdGFncmFtLmMKQEAgLTc1LDcgKzc1LDggQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBlcnI7CiAKLQlpZiAobXNnLT5tc2dfZmxhZ3MgJiBNU0dfT09CKQorCWlmIChtc2ctPm1zZ19mbGFncyAmIH4oTVNHX0RPTlRXQUlUfE1TR19FT1J8TVNHX05PU0lHTkFMfAorCQkJCU1TR19DTVNHX0NPTVBBVCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCWlmIChtc2ctPm1zZ19uYW1lID09IE5VTEwpCkBAIC0xMTksNyArMTIwLDggQEAKIAlpbnQgcnZhbCA9IC1FT1BOT1RTVVBQOwogCWludCBjb3B5bGVuOwogCi0JaWYgKGZsYWdzICYgTVNHX09PQikKKwlpZiAoZmxhZ3MgJiB+KE1TR19QRUVLfE1TR19UUlVOQ3xNU0dfRE9OVFdBSVR8TVNHX05PU0lHTkFMfAorCQkJTVNHX0NNU0dfQ09NUEFUKSkKIAkJZ290byBvdXRfbm9mcmVlOwogCiAJaWYgKGFkZHJfbGVuKQpkaWZmIC0tZ2l0IGEvbmV0L3Bob25ldC9wZXAtZ3Bycy5jIGIvbmV0L3Bob25ldC9wZXAtZ3Bycy5jCmluZGV4IGQxODM1MDkuLmQwMTIwODkgMTAwNjQ0Ci0tLSBhL25ldC9waG9uZXQvcGVwLWdwcnMuYworKysgYi9uZXQvcGhvbmV0L3BlcC1ncHJzLmMKQEAgLTk2LDExICs5NiwxMSBAQAogCQlnb3RvIGRyb3A7CiAJfQogCi0JaWYgKGxpa2VseShza2JfaGVhZHJvb20oc2tiKSAmIDMpKSB7CisJaWYgKHNrYl9oZWFkcm9vbShza2IpICYgMykgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqcnNrYiwgKmZzOwogCQlpbnQgZmxlbiA9IDA7CiAKLQkJLyogUGhvbmV0IFBpcGUgZGF0YSBoZWFkZXIgaXMgbWlzYWxpZ25lZCAoMyBieXRlcyksCisJCS8qIFBob25ldCBQaXBlIGRhdGEgaGVhZGVyIG1heSBiZSBtaXNhbGlnbmVkICgzIGJ5dGVzKSwKIAkJICogc28gd3JhcCB0aGUgSVAgcGFja2V0IGFzIGEgc2luZ2xlIGZyYWdtZW50IG9mIGFuIGhlYWQtbGVzcwogCQkgKiBzb2NrZXQgYnVmZmVyLiBUaGUgbmV0d29yayBzdGFjayB3aWxsIHB1bGwgd2hhdCBpdCBuZWVkcywKIAkJICogYnV0IGF0IGxlYXN0LCB0aGUgd2hvbGUgSVAgcGF5bG9hZCBpcyBub3QgbWVtY3B5J2QuICovCmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BlcC5jIGIvbmV0L3Bob25ldC9wZXAuYwppbmRleCBiNjM1NmYzLi4zNjBjZjM3IDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L3BlcC5jCisrKyBiL25ldC9waG9uZXQvcGVwLmMKQEAgLTM1NCw2ICszNTQsOSBAQAogCQlxdWV1ZSA9ICZwbi0+Y3RybHJlcV9xdWV1ZTsKIAkJZ290byBxdWV1ZTsKIAorCWNhc2UgUE5TX1BJUEVfQUxJR05FRF9EQVRBOgorCQlfX3NrYl9wdWxsKHNrYiwgMSk7CisJCS8qIGZhbGwgdGhyb3VnaCAqLwogCWNhc2UgUE5TX1BJUEVfREFUQToKIAkJX19za2JfcHVsbChza2IsIDMpOyAvKiBQaXBlIGRhdGEgaGVhZGVyICovCiAJCWlmICghcG5fZmxvd19zYWZlKHBuLT5yeF9mYykpIHsKQEAgLTQ0MSw2ICs0NDQsNyBAQAogCXN0cnVjdCBzb2NrYWRkcl9wbiBkc3Q7CiAJdTE2IHBlZXJfdHlwZTsKIAl1OCBwaXBlX2hhbmRsZSwgZW5hYmxlZCwgbl9zYjsKKwl1OCBhbGlnbmVkID0gMDsKIAogCWlmICghcHNrYl9wdWxsKHNrYiwgc2l6ZW9mKCpoZHIpICsgNCkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNDc5LDYgKzQ4Myw5IEBACiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlwZWVyX3R5cGUgPSAocGVlcl90eXBlICYgMHhmZjAwKSB8IGRhdGFbMF07CiAJCQlicmVhazsKKwkJY2FzZSBQTl9QSVBFX1NCX0FMSUdORURfREFUQToKKwkJCWFsaWduZWQgPSBkYXRhWzBdICE9IDA7CisJCQlicmVhazsKIAkJfQogCQluX3NiLS07CiAJfQpAQCAtNTEwLDYgKzUxNyw3IEBACiAJbmV3cG4tPnJ4X2NyZWRpdHMgPSAwOwogCW5ld3BuLT5yeF9mYyA9IG5ld3BuLT50eF9mYyA9IFBOX0xFR0FDWV9GTE9XX0NPTlRST0w7CiAJbmV3cG4tPmluaXRfZW5hYmxlID0gZW5hYmxlZDsKKwluZXdwbi0+YWxpZ25lZCA9IGFsaWduZWQ7CiAKIAlCVUdfT04oIXNrYl9xdWV1ZV9lbXB0eSgmbmV3c2stPnNrX3JlY2VpdmVfcXVldWUpKTsKIAlza2JfcXVldWVfaGVhZCgmbmV3c2stPnNrX3JlY2VpdmVfcXVldWUsIHNrYik7CkBAIC04MjksMTEgKzgzNywxNSBAQAogCQlyZXR1cm4gLUVOT0JVRlM7CiAJfQogCi0Jc2tiX3B1c2goc2tiLCAzKTsKKwlza2JfcHVzaChza2IsIDMgKyBwbi0+YWxpZ25lZCk7CiAJc2tiX3Jlc2V0X3RyYW5zcG9ydF9oZWFkZXIoc2tiKTsKIAlwaCA9IHBucF9oZHIoc2tiKTsKIAlwaC0+dXRpZCA9IDA7Ci0JcGgtPm1lc3NhZ2VfaWQgPSBQTlNfUElQRV9EQVRBOworCWlmIChwbi0+YWxpZ25lZCkgeworCQlwaC0+bWVzc2FnZV9pZCA9IFBOU19QSVBFX0FMSUdORURfREFUQTsKKwkJcGgtPmRhdGFbMF0gPSAwOyAvKiBwYWRkaW5nICovCisJfSBlbHNlCisJCXBoLT5tZXNzYWdlX2lkID0gUE5TX1BJUEVfREFUQTsKIAlwaC0+cGlwZV9oYW5kbGUgPSBwbi0+cGlwZV9oYW5kbGU7CiAKIAlyZXR1cm4gcG5fc2tiX3NlbmQoc2ssIHNrYiwgJnBpcGVfc3J2KTsKQEAgLTg0OCw3ICs4NjAsOSBAQAogCWludCBmbGFncyA9IG1zZy0+bXNnX2ZsYWdzOwogCWludCBlcnIsIGRvbmU7CiAKLQlpZiAobXNnLT5tc2dfZmxhZ3MgJiBNU0dfT09CIHx8ICEobXNnLT5tc2dfZmxhZ3MgJiBNU0dfRU9SKSkKKwlpZiAoKG1zZy0+bXNnX2ZsYWdzICYgfihNU0dfRE9OVFdBSVR8TVNHX0VPUnxNU0dfTk9TSUdOQUx8CisJCQkJTVNHX0NNU0dfQ09NUEFUKSkgfHwKKwkJCSEobXNnLT5tc2dfZmxhZ3MgJiBNU0dfRU9SKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCiAJc2tiID0gc29ja19hbGxvY19zZW5kX3NrYihzaywgTUFYX1BOUElQRV9IRUFERVIgKyBsZW4sCkBAIC05MjcsNiArOTQxLDkgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqcnNrYiwgKmZzOwogCWludCBmbGVuID0gMDsKIAorCWlmIChwZXBfc2soc2spLT5hbGlnbmVkKQorCQlyZXR1cm4gcGlwZV9za2Jfc2VuZChzaywgc2tiKTsKKwogCXJza2IgPSBhbGxvY19za2IoTUFYX1BOUElQRV9IRUFERVIsIEdGUF9BVE9NSUMpOwogCWlmICghcnNrYikgewogCQlrZnJlZV9za2Ioc2tiKTsKQEAgLTk2Niw2ICs5ODMsMTAgQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCWludCBlcnI7CiAKKwlpZiAoZmxhZ3MgJiB+KE1TR19PT0J8TVNHX1BFRUt8TVNHX1RSVU5DfE1TR19ET05UV0FJVHxNU0dfV0FJVEFMTHwKKwkJCU1TR19OT1NJR05BTHxNU0dfQ01TR19DT01QQVQpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKIAlpZiAodW5saWtlbHkoMSA8PCBzay0+c2tfc3RhdGUgJiAoVENQRl9MSVNURU4gfCBUQ1BGX0NMT1NFKSkpCiAJCXJldHVybiAtRU5PVENPTk47CiAKQEAgLTk3Myw2ICs5OTQsOCBAQAogCQkvKiBEZXF1ZXVlIGFuZCBhY2tub3dsZWRnZSBjb250cm9sIHJlcXVlc3QgKi8KIAkJc3RydWN0IHBlcF9zb2NrICpwbiA9IHBlcF9zayhzayk7CiAKKwkJaWYgKGZsYWdzICYgTVNHX1BFRUspCisJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJCXNrYiA9IHNrYl9kZXF1ZXVlKCZwbi0+Y3RybHJlcV9xdWV1ZSk7CiAJCWlmIChza2IpIHsKIAkJCXBlcF9jdHJscmVxX2Vycm9yKHNrLCBza2IsIFBOX1BJUEVfTk9fRVJST1IsCmRpZmYgLS1naXQgYS9uZXQvcGhvbmV0L3BuX2Rldi5jIGIvbmV0L3Bob25ldC9wbl9kZXYuYwppbmRleCBiYzRhMzNiLi5jNTk3Y2M1IDEwMDY0NAotLS0gYS9uZXQvcGhvbmV0L3BuX2Rldi5jCisrKyBiL25ldC9waG9uZXQvcG5fZGV2LmMKQEAgLTMxMSw3ICszMTEsNyBAQAogfTsKIAogLyogUGVyLW5hbWVzcGFjZSBQaG9uZXQgZGV2aWNlcyBoYW5kbGluZyAqLwotc3RhdGljIGludCBwaG9uZXRfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IHBob25ldF9pbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IHBob25ldF9uZXQgKnBubiA9IG5ldF9nZW5lcmljKG5ldCwgcGhvbmV0X25ldF9pZCk7CiAKQEAgLTMyNCw3ICszMjQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBwaG9uZXRfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIHZvaWQgX19uZXRfZXhpdCBwaG9uZXRfZXhpdF9uZXQoc3RydWN0IG5ldCAqbmV0KQogewogCXN0cnVjdCBwaG9uZXRfbmV0ICpwbm4gPSBuZXRfZ2VuZXJpYyhuZXQsIHBob25ldF9uZXRfaWQpOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcF9jb25uZWN0LmMgYi9uZXQvcmRzL3RjcF9jb25uZWN0LmMKaW5kZXggMjExNTIyZi4uMDU2MjU2MiAxMDA2NDQKLS0tIGEvbmV0L3Jkcy90Y3BfY29ubmVjdC5jCisrKyBiL25ldC9yZHMvdGNwX2Nvbm5lY3QuYwpAQCAtOTAsOCArOTAsOCBAQAogCiAJcmV0ID0gc29jay0+b3BzLT5iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3JjLCBzaXplb2Yoc3JjKSk7CiAJaWYgKHJldCkgewotCQlyZHNkZWJ1ZygiYmluZCBmYWlsZWQgd2l0aCAlZCBhdCBhZGRyZXNzICV1LiV1LiV1LiV1XG4iLAotCQkgICAgIHJldCwgTklQUVVBRChjb25uLT5jX2xhZGRyKSk7CisJCXJkc2RlYnVnKCJiaW5kIGZhaWxlZCB3aXRoICVkIGF0IGFkZHJlc3MgJXBJNFxuIiwKKwkJCSByZXQsICZjb25uLT5jX2xhZGRyKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xMDgsOCArMTA4LDcgQEAKIAkJCQkgT19OT05CTE9DSyk7CiAJc29jayA9IE5VTEw7CiAKLQlyZHNkZWJ1ZygiY29ubmVjdCB0byBhZGRyZXNzICV1LiV1LiV1LiV1IHJldHVybmVkICVkXG4iLAotCQkgTklQUVVBRChjb25uLT5jX2ZhZGRyKSwgcmV0KTsKKwlyZHNkZWJ1ZygiY29ubmVjdCB0byBhZGRyZXNzICVwSTQgcmV0dXJuZWQgJWRcbiIsICZjb25uLT5jX2ZhZGRyLCByZXQpOwogCWlmIChyZXQgPT0gLUVJTlBST0dSRVNTKQogCQlyZXQgPSAwOwogCmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcF9saXN0ZW4uYyBiL25ldC9yZHMvdGNwX2xpc3Rlbi5jCmluZGV4IDQ1NDc0YTQuLjUzY2IxYjUgMTAwNjQ0Ci0tLSBhL25ldC9yZHMvdGNwX2xpc3Rlbi5jCisrKyBiL25ldC9yZHMvdGNwX2xpc3Rlbi5jCkBAIC02Niw5ICs2Niw5IEBACiAKIAlpbmV0ID0gaW5ldF9zayhuZXdfc29jay0+c2spOwogCi0JcmRzZGVidWcoImFjY2VwdGVkIHRjcCAldS4ldS4ldS4ldToldSAtPiAldS4ldS4ldS4ldToldVxuIiwKLQkJICBOSVBRVUFEKGluZXQtPmluZXRfc2FkZHIpLCBudG9ocyhpbmV0LT5pbmV0X3Nwb3J0KSwKLQkJICBOSVBRVUFEKGluZXQtPmluZXRfZGFkZHIpLCBudG9ocyhpbmV0LT5pbmV0X2Rwb3J0KSk7CisJcmRzZGVidWcoImFjY2VwdGVkIHRjcCAlcEk0OiV1IC0+ICVwSTQ6JXVcbiIsCisJCSAmaW5ldC0+aW5ldF9zYWRkciwgbnRvaHMoaW5ldC0+aW5ldF9zcG9ydCksCisJCSAmaW5ldC0+aW5ldF9kYWRkciwgbnRvaHMoaW5ldC0+aW5ldF9kcG9ydCkpOwogCiAJY29ubiA9IHJkc19jb25uX2NyZWF0ZShpbmV0LT5pbmV0X3NhZGRyLCBpbmV0LT5pbmV0X2RhZGRyLAogCQkJICAgICAgICZyZHNfdGNwX3RyYW5zcG9ydCwgR0ZQX0tFUk5FTCk7CmRpZmYgLS1naXQgYS9uZXQvcmRzL3RjcF9zZW5kLmMgYi9uZXQvcmRzL3RjcF9zZW5kLmMKaW5kZXggYWI1NDVlMC4uMzRmZGNjMCAxMDA2NDQKLS0tIGEvbmV0L3Jkcy90Y3Bfc2VuZC5jCisrKyBiL25ldC9yZHMvdGNwX3NlbmQuYwpAQCAtMTkzLDkgKzE5Myw5IEBACiAJCQlyZHNfdGNwX3N0YXRzX2luYyhzX3RjcF9zbmRidWZfZnVsbCk7CiAJCQlyZXQgPSAwOwogCQl9IGVsc2UgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUkRTL3RjcDogc2VuZCB0byAldS4ldS4ldS4ldSAiCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRFMvdGNwOiBzZW5kIHRvICVwSTQgIgogCQkJICAgICAgICJyZXR1cm5lZCAlZCwgZGlzY29ubmVjdGluZyBhbmQgcmVjb25uZWN0aW5nXG4iLAotCQkJICAgICAgIE5JUFFVQUQoY29ubi0+Y19mYWRkciksIHJldCk7CisJCQkgICAgICAgJmNvbm4tPmNfZmFkZHIsIHJldCk7CiAJCQlyZHNfY29ubl9kcm9wKGNvbm4pOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvbmV0L3Jvc2UvYWZfcm9zZS5jIGIvbmV0L3Jvc2UvYWZfcm9zZS5jCmluZGV4IDhmZWI5ZTUuLmU5MGI5YjYgMTAwNjQ0Ci0tLSBhL25ldC9yb3NlL2FmX3Jvc2UuYworKysgYi9uZXQvcm9zZS9hZl9yb3NlLmMKQEAgLTE0MDQsMjkgKzE0MDQsMTMgQEAKIHN0YXRpYyB2b2lkICpyb3NlX2luZm9fc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogCV9fYWNxdWlyZXMocm9zZV9saXN0X2xvY2spCiB7Ci0JaW50IGk7Ci0Jc3RydWN0IHNvY2sgKnM7Ci0Jc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7Ci0KIAlzcGluX2xvY2tfYmgoJnJvc2VfbGlzdF9sb2NrKTsKLQlpZiAoKnBvcyA9PSAwKQotCQlyZXR1cm4gU0VRX1NUQVJUX1RPS0VOOwotCi0JaSA9IDE7Ci0Jc2tfZm9yX2VhY2gocywgbm9kZSwgJnJvc2VfbGlzdCkgewotCQlpZiAoaSA9PSAqcG9zKQotCQkJcmV0dXJuIHM7Ci0JCSsraTsKLQl9Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIHNlcV9obGlzdF9zdGFydF9oZWFkKCZyb3NlX2xpc3QsICpwb3MpOwogfQogCiBzdGF0aWMgdm9pZCAqcm9zZV9pbmZvX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQogewotCSsrKnBvczsKLQotCXJldHVybiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pID8gc2tfaGVhZCgmcm9zZV9saXN0KQotCQk6IHNrX25leHQoKHN0cnVjdCBzb2NrICopdik7CisJcmV0dXJuIHNlcV9obGlzdF9uZXh0KHYsICZyb3NlX2xpc3QsIHBvcyk7CiB9CiAKIHN0YXRpYyB2b2lkIHJvc2VfaW5mb19zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpAQCAtMTQ0NCw3ICsxNDI4LDcgQEAKIAkJCSAiZGVzdF9hZGRyICBkZXN0X2NhbGwgc3JjX2FkZHIgICBzcmNfY2FsbCAgZGV2ICAgbGNpIG5laWdoIHN0IHZzIHZyIHZhICAgdCAgdDEgIHQyICB0MyAgaGIgICAgaWRsZSBTbmQtUSBSY3YtUSBpbm9kZVxuIik7CiAKIAllbHNlIHsKLQkJc3RydWN0IHNvY2sgKnMgPSB2OworCQlzdHJ1Y3Qgc29jayAqcyA9IHNrX2VudHJ5KHYpOwogCQlzdHJ1Y3Qgcm9zZV9zb2NrICpyb3NlID0gcm9zZV9zayhzKTsKIAkJY29uc3QgY2hhciAqZGV2bmFtZSwgKmNhbGxzaWduOwogCQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gcm9zZS0+ZGV2aWNlOwpkaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL3NjaF9hcGkuYyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKaW5kZXggNzVmZDFjNi4uNmNkNDkxMCAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9hcGkuYworKysgYi9uZXQvc2NoZWQvc2NoX2FwaS5jCkBAIC0xNzA3LDYgKzE3MDcsNyBAQAogewogCXJlZ2lzdGVyX3FkaXNjKCZwZmlmb19xZGlzY19vcHMpOwogCXJlZ2lzdGVyX3FkaXNjKCZiZmlmb19xZGlzY19vcHMpOworCXJlZ2lzdGVyX3FkaXNjKCZwZmlmb19oZWFkX2Ryb3BfcWRpc2Nfb3BzKTsKIAlyZWdpc3Rlcl9xZGlzYygmbXFfcWRpc2Nfb3BzKTsKIAlwcm9jX25ldF9mb3BzX2NyZWF0ZSgmaW5pdF9uZXQsICJwc2NoZWQiLCAwLCAmcHNjaGVkX2ZvcHMpOwogCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2ZpZm8uYyBiL25ldC9zY2hlZC9zY2hfZmlmby5jCmluZGV4IDY5MTg4ZTguLjRiMGE2Y2MgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfZmlmby5jCisrKyBiL25ldC9zY2hlZC9zY2hfZmlmby5jCkBAIC00Myw2ICs0MywyNiBAQAogCXJldHVybiBxZGlzY19yZXNoYXBlX2ZhaWwoc2tiLCBzY2gpOwogfQogCitzdGF0aWMgaW50IHBmaWZvX3RhaWxfZW5xdWV1ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgUWRpc2MqIHNjaCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2hlYWQ7CisJc3RydWN0IGZpZm9fc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKKworCWlmIChsaWtlbHkoc2tiX3F1ZXVlX2xlbigmc2NoLT5xKSA8IHEtPmxpbWl0KSkKKwkJcmV0dXJuIHFkaXNjX2VucXVldWVfdGFpbChza2IsIHNjaCk7CisKKwkvKiBxdWV1ZSBmdWxsLCByZW1vdmUgb25lIHNrYiB0byBmdWxmaWxsIHRoZSBsaW1pdCAqLworCXNrYl9oZWFkID0gcWRpc2NfZGVxdWV1ZV9oZWFkKHNjaCk7CisJc2NoLT5ic3RhdHMuYnl0ZXMgLT0gcWRpc2NfcGt0X2xlbihza2JfaGVhZCk7CisJc2NoLT5ic3RhdHMucGFja2V0cy0tOworCXNjaC0+cXN0YXRzLmRyb3BzKys7CisJa2ZyZWVfc2tiKHNrYl9oZWFkKTsKKworCXFkaXNjX2VucXVldWVfdGFpbChza2IsIHNjaCk7CisKKwlyZXR1cm4gTkVUX1hNSVRfQ047Cit9CisKIHN0YXRpYyBpbnQgZmlmb19pbml0KHN0cnVjdCBRZGlzYyAqc2NoLCBzdHJ1Y3QgbmxhdHRyICpvcHQpCiB7CiAJc3RydWN0IGZpZm9fc2NoZWRfZGF0YSAqcSA9IHFkaXNjX3ByaXYoc2NoKTsKQEAgLTEwOCw2ICsxMjgsMjAgQEAKIH07CiBFWFBPUlRfU1lNQk9MKGJmaWZvX3FkaXNjX29wcyk7CiAKK3N0cnVjdCBRZGlzY19vcHMgcGZpZm9faGVhZF9kcm9wX3FkaXNjX29wcyBfX3JlYWRfbW9zdGx5ID0geworCS5pZAkJPQkicGZpZm9faGVhZF9kcm9wIiwKKwkucHJpdl9zaXplCT0Jc2l6ZW9mKHN0cnVjdCBmaWZvX3NjaGVkX2RhdGEpLAorCS5lbnF1ZXVlCT0JcGZpZm9fdGFpbF9lbnF1ZXVlLAorCS5kZXF1ZXVlCT0JcWRpc2NfZGVxdWV1ZV9oZWFkLAorCS5wZWVrCQk9CXFkaXNjX3BlZWtfaGVhZCwKKwkuZHJvcAkJPQlxZGlzY19xdWV1ZV9kcm9wX2hlYWQsCisJLmluaXQJCT0JZmlmb19pbml0LAorCS5yZXNldAkJPQlxZGlzY19yZXNldF9xdWV1ZSwKKwkuY2hhbmdlCQk9CWZpZm9faW5pdCwKKwkuZHVtcAkJPQlmaWZvX2R1bXAsCisJLm93bmVyCQk9CVRISVNfTU9EVUxFLAorfTsKKwogLyogUGFzcyBzaXplIGNoYW5nZSBtZXNzYWdlIGRvd24gdG8gZW1iZWRkZWQgRklGTyAqLwogaW50IGZpZm9fc2V0X2xpbWl0KHN0cnVjdCBRZGlzYyAqcSwgdW5zaWduZWQgaW50IGxpbWl0KQogewpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvYmluZF9hZGRyLmMgYi9uZXQvc2N0cC9iaW5kX2FkZHIuYwppbmRleCAxM2E2ZmJhLi5iZWYxMzM3IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9iaW5kX2FkZHIuYworKysgYi9uZXQvc2N0cC9iaW5kX2FkZHIuYwpAQCAtMTg2LDcgKzE4Niw2IEBACiAJYWRkci0+dmFsaWQgPSAxOwogCiAJSU5JVF9MSVNUX0hFQUQoJmFkZHItPmxpc3QpOwotCUlOSVRfUkNVX0hFQUQoJmFkZHItPnJjdSk7CiAKIAkvKiBXZSBhbHdheXMgaG9sZCBhIHNvY2tldCBsb2NrIHdoZW4gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLAogCSAqIGFuZCB0aGF0IGFjdHMgYXMgYSB3cml0ZXIgc3luY2hyb25pemluZyBsb2NrLgpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaXB2Ni5jIGIvbmV0L3NjdHAvaXB2Ni5jCmluZGV4IGNjNTBmYmUuLjFkN2FjNzAgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL2lwdjYuYworKysgYi9uZXQvc2N0cC9pcHY2LmMKQEAgLTM4MSw3ICszODEsNiBAQAogCQkJYWRkci0+YS52Ni5zaW42X3Njb3BlX2lkID0gZGV2LT5pZmluZGV4OwogCQkJYWRkci0+dmFsaWQgPSAxOwogCQkJSU5JVF9MSVNUX0hFQUQoJmFkZHItPmxpc3QpOwotCQkJSU5JVF9SQ1VfSEVBRCgmYWRkci0+cmN1KTsKIAkJCWxpc3RfYWRkX3RhaWwoJmFkZHItPmxpc3QsIGFkZHJsaXN0KTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL25ldC9zY3RwL3Byb2MuYyBiL25ldC9zY3RwL3Byb2MuYwppbmRleCBkMDkzY2JmLi43ODRiY2M5IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9wcm9jLmMKKysrIGIvbmV0L3NjdHAvcHJvYy5jCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSA8bmV0L3NjdHAvc2N0cC5oPgogI2luY2x1ZGUgPG5ldC9pcC5oPiAvKiBmb3Igc25tcF9mb2xkX2ZpZWxkICovCiAKLXN0YXRpYyBzdHJ1Y3Qgc25tcF9taWIgc2N0cF9zbm1wX2xpc3RbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc25tcF9taWIgc2N0cF9zbm1wX2xpc3RbXSA9IHsKIAlTTk1QX01JQl9JVEVNKCJTY3RwQ3VyckVzdGFiIiwgU0NUUF9NSUJfQ1VSUkVTVEFCKSwKIAlTTk1QX01JQl9JVEVNKCJTY3RwQWN0aXZlRXN0YWJzIiwgU0NUUF9NSUJfQUNUSVZFRVNUQUJTKSwKIAlTTk1QX01JQl9JVEVNKCJTY3RwUGFzc2l2ZUVzdGFicyIsIFNDVFBfTUlCX1BBU1NJVkVFU1RBQlMpLApAQCAtODMsNyArODMsNyBAQAogCiAJZm9yIChpID0gMDsgc2N0cF9zbm1wX2xpc3RbaV0ubmFtZSAhPSBOVUxMOyBpKyspCiAJCXNlcV9wcmludGYoc2VxLCAiJS0zMnNcdCVsZFxuIiwgc2N0cF9zbm1wX2xpc3RbaV0ubmFtZSwKLQkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCAqKilzY3RwX3N0YXRpc3RpY3MsCisJCQkgICBzbm1wX2ZvbGRfZmllbGQoKHZvaWQgX19wZXJjcHUgKiopc2N0cF9zdGF0aXN0aWNzLAogCQkJCSAgICAgIHNjdHBfc25tcF9saXN0W2ldLmVudHJ5KSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3Byb3RvY29sLmMgYi9uZXQvc2N0cC9wcm90b2NvbC5jCmluZGV4IGEzYzg5ODguLmU3NzE2OTAgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3Byb3RvY29sLmMKKysrIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwpAQCAtMTg4LDcgKzE4OCw2IEBACiAJCQlhZGRyLT5hLnY0LnNpbl9hZGRyLnNfYWRkciA9IGlmYS0+aWZhX2xvY2FsOwogCQkJYWRkci0+dmFsaWQgPSAxOwogCQkJSU5JVF9MSVNUX0hFQUQoJmFkZHItPmxpc3QpOwotCQkJSU5JVF9SQ1VfSEVBRCgmYWRkci0+cmN1KTsKIAkJCWxpc3RfYWRkX3RhaWwoJmFkZHItPmxpc3QsIGFkZHJsaXN0KTsKIAkJfQogCX0KQEAgLTk5NiwxMiArOTk1LDEzIEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGluaXRfc2N0cF9taWJzKHZvaWQpCiB7Ci0JcmV0dXJuIHNubXBfbWliX2luaXQoKHZvaWQqKilzY3RwX3N0YXRpc3RpY3MsIHNpemVvZihzdHJ1Y3Qgc2N0cF9taWIpKTsKKwlyZXR1cm4gc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKilzY3RwX3N0YXRpc3RpY3MsCisJCQkgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9taWIpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNsZWFudXBfc2N0cF9taWJzKHZvaWQpCiB7Ci0Jc25tcF9taWJfZnJlZSgodm9pZCoqKXNjdHBfc3RhdGlzdGljcyk7CisJc25tcF9taWJfZnJlZSgodm9pZCBfX3BlcmNwdSAqKilzY3RwX3N0YXRpc3RpY3MpOwogfQogCiBzdGF0aWMgdm9pZCBzY3RwX3Y0X3BmX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYyBiL25ldC9zY3RwL3NtX3NpZGVlZmZlY3QuYwppbmRleCA0ZTRjYTY1Li41MDA4ODZiIDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zbV9zaWRlZWZmZWN0LmMKKysrIGIvbmV0L3NjdHAvc21fc2lkZWVmZmVjdC5jCkBAIC00NzUsNyArNDc1LDcgQEAKIAkgKiB1c2VkIHRvIHByb3ZpZGUgYW4gdXBwZXIgYm91bmQgdG8gdGhpcyBkb3VibGluZyBvcGVyYXRpb24uCiAJICoKIAkgKiBTcGVjaWFsIENhc2U6ICB0aGUgZmlyc3QgSEIgZG9lc24ndCB0cmlnZ2VyIGV4cG9uZW50aWFsIGJhY2tvZmYuCi0JICogVGhlIGZpcnN0IHVuYWNrbm93bGVnZWQgSEIgdHJpZ2dlcnMgaXQuICBXZSBkbyB0aGlzIHdpdGggYSBmbGFnCisJICogVGhlIGZpcnN0IHVuYWNrbm93bGVkZ2VkIEhCIHRyaWdnZXJzIGl0LiAgV2UgZG8gdGhpcyB3aXRoIGEgZmxhZwogCSAqIHRoYXQgaW5kaWNhdGVzIHRoYXQgd2UgaGF2ZSBhbiBvdXRzdGFuZGluZyBIQi4KIAkgKi8KIAlpZiAoIWlzX2hiIHx8IHRyYW5zcG9ydC0+aGJfc2VudCkgewpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvc29ja2V0LmMgYi9uZXQvc2N0cC9zb2NrZXQuYwppbmRleCA2N2ZkYWM5Li5mNmQxZTU5IDEwMDY0NAotLS0gYS9uZXQvc2N0cC9zb2NrZXQuYworKysgYi9uZXQvc2N0cC9zb2NrZXQuYwpAQCAtNjM1OSw3ICs2MzU5LDcgQEAKIAkJICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQogewogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKLQlzdHJ1Y3QgaW5ldF9zb2NrICpuZXdpbmV0ID0gaW5ldF9zayhuZXdzayk7CisJc3RydWN0IGluZXRfc29jayAqbmV3aW5ldDsKIAogCW5ld3NrLT5za190eXBlID0gc2stPnNrX3R5cGU7CiAJbmV3c2stPnNrX2JvdW5kX2Rldl9pZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2FkZHIuYyBiL25ldC9zdW5ycGMvYWRkci5jCmluZGV4IDZkY2RkMjUuLmY4NDVkOWQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvYWRkci5jCisrKyBiL25ldC9zdW5ycGMvYWRkci5jCkBAIC03MSw4ICs3MSw5IEBACiAJaWYgKHVubGlrZWx5KGxlbiA9PSAwKSkKIAkJcmV0dXJuIGxlbjsKIAotCWlmICghKGlwdjZfYWRkcl90eXBlKCZzaW42LT5zaW42X2FkZHIpICYgSVBWNl9BRERSX0xJTktMT0NBTCkgJiYKLQkgICAgIShpcHY2X2FkZHJfdHlwZSgmc2luNi0+c2luNl9hZGRyKSAmIElQVjZfQUREUl9TSVRFTE9DQUwpKQorCWlmICghKGlwdjZfYWRkcl90eXBlKCZzaW42LT5zaW42X2FkZHIpICYgSVBWNl9BRERSX0xJTktMT0NBTCkpCisJCXJldHVybiBsZW47CisJaWYgKHNpbjYtPnNpbjZfc2NvcGVfaWQgPT0gMCkKIAkJcmV0dXJuIGxlbjsKIAogCXJjID0gc25wcmludGYoc2NvcGVidWYsIHNpemVvZihzY29wZWJ1ZiksICIlYyV1IiwKQEAgLTE2NSw4ICsxNjYsNyBAQAogCWlmICgqZGVsaW0gIT0gSVBWNl9TQ09QRV9ERUxJTUlURVIpCiAJCXJldHVybiAwOwogCi0JaWYgKCEoaXB2Nl9hZGRyX3R5cGUoJnNpbjYtPnNpbjZfYWRkcikgJiBJUFY2X0FERFJfTElOS0xPQ0FMKSAmJgotCSAgICAhKGlwdjZfYWRkcl90eXBlKCZzaW42LT5zaW42X2FkZHIpICYgSVBWNl9BRERSX1NJVEVMT0NBTCkpCisJaWYgKCEoaXB2Nl9hZGRyX3R5cGUoJnNpbjYtPnNpbjZfYWRkcikgJiBJUFY2X0FERFJfTElOS0xPQ0FMKSkKIAkJcmV0dXJuIDA7CiAKIAlsZW4gPSAoYnVmICsgYnVmbGVuKSAtIGRlbGltIC0gMTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYwppbmRleCBmN2E3ZjgzLi4wY2ZjY2MyYSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYwpAQCAtMjA2LDggKzIwNiwxNCBAQAogCWN0eC0+Z2Nfd2luID0gd2luZG93X3NpemU7CiAJLyogZ3NzZCBzaWduYWxzIGFuIGVycm9yIGJ5IHBhc3NpbmcgY3R4LT5nY193aW4gPSAwOiAqLwogCWlmIChjdHgtPmdjX3dpbiA9PSAwKSB7Ci0JCS8qIGluIHdoaWNoIGNhc2UsIHAgcG9pbnRzIHRvICBhbiBlcnJvciBjb2RlIHdoaWNoIHdlIGlnbm9yZSAqLwotCQlwID0gRVJSX1BUUigtRUFDQ0VTKTsKKwkJLyoKKwkJICogaW4gd2hpY2ggY2FzZSwgcCBwb2ludHMgdG8gYW4gZXJyb3IgY29kZS4gQW55dGhpbmcgb3RoZXIKKwkJICogdGhhbiAtRUtFWUVYUElSRUQgZ2V0cyBjb252ZXJ0ZWQgdG8gLUVBQ0NFUy4KKwkJICovCisJCXAgPSBzaW1wbGVfZ2V0X2J5dGVzKHAsIGVuZCwgJnJldCwgc2l6ZW9mKHJldCkpOworCQlpZiAoIUlTX0VSUihwKSkKKwkJCXAgPSAocmV0ID09IC1FS0VZRVhQSVJFRCkgPyBFUlJfUFRSKC1FS0VZRVhQSVJFRCkgOgorCQkJCQkJICAgIEVSUl9QVFIoLUVBQ0NFUyk7CiAJCWdvdG8gZXJyOwogCX0KIAkvKiBjb3B5IHRoZSBvcGFxdWUgd2lyZSBjb250ZXh0ICovCkBAIC02NDYsNiArNjUyLDcgQEAKIAkJZXJyID0gUFRSX0VSUihwKTsKIAkJc3dpdGNoIChlcnIpIHsKIAkJY2FzZSAtRUFDQ0VTOgorCQljYXNlIC1FS0VZRVhQSVJFRDoKIAkJCWdzc19tc2ctPm1zZy5lcnJubyA9IGVycjsKIAkJCWVyciA9IG1sZW47CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvcnBjX3BpcGUuYyBiL25ldC9zdW5ycGMvcnBjX3BpcGUuYwppbmRleCA0OTI3OGY4Li44ZDYzZjhmIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3JwY19waXBlLmMKKysrIGIvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCkBAIC03OCw3ICs3OCw3IEBACiB9CiAKIC8qKgotICogcnBjX3F1ZXVlX3VwY2FsbAorICogcnBjX3F1ZXVlX3VwY2FsbCAtIHF1ZXVlIGFuIHVwY2FsbCBtZXNzYWdlIHRvIHVzZXJzcGFjZQogICogQGlub2RlOiBpbm9kZSBvZiB1cGNhbGwgcGlwZSBvbiB3aGljaCB0byBxdWV1ZSBnaXZlbiBtZXNzYWdlCiAgKiBAbXNnOiBtZXNzYWdlIHRvIHF1ZXVlCiAgKgpAQCAtOTk5LDE5ICs5OTksMTQgQEAKIAlpbm9kZSA9IHJwY19nZXRfaW5vZGUoc2IsIFNfSUZESVIgfCAwNzU1KTsKIAlpZiAoIWlub2RlKQogCQlyZXR1cm4gLUVOT01FTTsKLQlyb290ID0gZF9hbGxvY19yb290KGlub2RlKTsKKwlzYi0+c19yb290ID0gcm9vdCA9IGRfYWxsb2Nfcm9vdChpbm9kZSk7CiAJaWYgKCFyb290KSB7CiAJCWlwdXQoaW5vZGUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJaWYgKHJwY19wb3B1bGF0ZShyb290LCBmaWxlcywgUlBDQVVUSF9sb2NrZCwgUlBDQVVUSF9Sb290RU9GLCBOVUxMKSkKLQkJZ290byBvdXQ7Ci0Jc2ItPnNfcm9vdCA9IHJvb3Q7CisJCXJldHVybiAtRU5PTUVNOwogCXJldHVybiAwOwotb3V0OgotCWRfZ2Vub2NpZGUocm9vdCk7Ci0JZHB1dChyb290KTsKLQlyZXR1cm4gLUVOT01FTTsKIH0KIAogc3RhdGljIGludApkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9zdmMuYyBiL25ldC9zdW5ycGMvc3ZjLmMKaW5kZXggNTM4Y2E0My4uODQyMGE0MiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmMuYworKysgYi9uZXQvc3VucnBjL3N2Yy5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAkJcmV0dXJuIFNWQ19QT09MX1BFUk5PREU7CiAJfQogCi0Jbm9kZSA9IGFueV9vbmxpbmVfbm9kZShub2RlX29ubGluZV9tYXApOworCW5vZGUgPSBmaXJzdF9vbmxpbmVfbm9kZTsKIAlpZiAobnJfY3B1c19ub2RlKG5vZGUpID4gMikgewogCQkvKgogCQkgKiBOb24tdHJpdmlhbCBTTVAsIG9yIENPTkZJR19OVU1BIG9uCkBAIC01MDYsNiArNTA2LDEwIEBACiB7CiAJdW5zaWduZWQgaW50IHBhZ2VzLCBhcmdoaTsKIAorCS8qIGJjX3hwcnQgdXNlcyBmb3JlIGNoYW5uZWwgYWxsb2NhdGVkIGJ1ZmZlcnMgKi8KKwlpZiAoc3ZjX2lzX2JhY2tjaGFubmVsKHJxc3RwKSkKKwkJcmV0dXJuIDE7CisKIAlwYWdlcyA9IHNpemUgLyBQQUdFX1NJWkUgKyAxOyAvKiBleHRyYSBwYWdlIGFzIHdlIGhvbGQgYm90aCByZXF1ZXN0IGFuZCByZXBseS4KIAkJCQkgICAgICAgKiBXZSBhc3N1bWUgb25lIGlzIGF0IG1vc3Qgb25lIHBhZ2UKIAkJCQkgICAgICAgKi8KZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjX3hwcnQuYyBiL25ldC9zdW5ycGMvc3ZjX3hwcnQuYwppbmRleCA3ZDFmOWU5Li44ZjBmMWZiIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y194cHJ0LmMKKysrIGIvbmV0L3N1bnJwYy9zdmNfeHBydC5jCkBAIC0xNzMsMTEgKzE3MywxMyBAQAogCQkuc2luX2FkZHIuc19hZGRyCT0gaHRvbmwoSU5BRERSX0FOWSksCiAJCS5zaW5fcG9ydAkJPSBodG9ucyhwb3J0KSwKIAl9OworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNiA9IHsKIAkJLnNpbjZfZmFtaWx5CQk9IEFGX0lORVQ2LAogCQkuc2luNl9hZGRyCQk9IElONkFERFJfQU5ZX0lOSVQsCiAJCS5zaW42X3BvcnQJCT0gaHRvbnMocG9ydCksCiAJfTsKKyNlbmRpZgkvKiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkgKi8KIAlzdHJ1Y3Qgc29ja2FkZHIgKnNhcDsKIAlzaXplX3QgbGVuOwogCkBAIC0xODYsMTAgKzE4OCwxMiBAQAogCQlzYXAgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjsKIAkJbGVuID0gc2l6ZW9mKHNpbik7CiAJCWJyZWFrOworI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQogCWNhc2UgUEZfSU5FVDY6CiAJCXNhcCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNjsKIAkJbGVuID0gc2l6ZW9mKHNpbjYpOwogCQlicmVhazsKKyNlbmRpZgkvKiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkgKi8KIAlkZWZhdWx0OgogCQlyZXR1cm4gRVJSX1BUUigtRUFGTk9TVVBQT1JUKTsKIAl9CkBAIC0yMzEsNyArMjM1LDEwIEBACiAgZXJyOgogCXNwaW5fdW5sb2NrKCZzdmNfeHBydF9jbGFzc19sb2NrKTsKIAlkcHJpbnRrKCJzdmM6IHRyYW5zcG9ydCAlcyBub3QgZm91bmRcbiIsIHhwcnRfbmFtZSk7Ci0JcmV0dXJuIC1FTk9FTlQ7CisKKwkvKiBUaGlzIGVycm5vIGlzIGV4cG9zZWQgdG8gdXNlciBzcGFjZS4gIFByb3ZpZGUgYSByZWFzb25hYmxlCisJICogcGVycm9yIG1zZyBmb3IgYSBiYWQgdHJhbnNwb3J0LiAqLworCXJldHVybiAtRVBST1RPTk9TVVBQT1JUOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoc3ZjX2NyZWF0ZV94cHJ0KTsKIApAQCAtNjk5LDggKzcwNiwxMCBAQAogCXNwaW5fdW5sb2NrX2JoKCZwb29sLT5zcF9sb2NrKTsKIAogCWxlbiA9IDA7Ci0JaWYgKHRlc3RfYml0KFhQVF9MSVNURU5FUiwgJnhwcnQtPnhwdF9mbGFncykgJiYKLQkgICAgIXRlc3RfYml0KFhQVF9DTE9TRSwgJnhwcnQtPnhwdF9mbGFncykpIHsKKwlpZiAodGVzdF9iaXQoWFBUX0NMT1NFLCAmeHBydC0+eHB0X2ZsYWdzKSkgeworCQlkcHJpbnRrKCJzdmNfcmVjdjogZm91bmQgWFBUX0NMT1NFXG4iKTsKKwkJc3ZjX2RlbGV0ZV94cHJ0KHhwcnQpOworCX0gZWxzZSBpZiAodGVzdF9iaXQoWFBUX0xJU1RFTkVSLCAmeHBydC0+eHB0X2ZsYWdzKSkgewogCQlzdHJ1Y3Qgc3ZjX3hwcnQgKm5ld3hwdDsKIAkJbmV3eHB0ID0geHBydC0+eHB0X29wcy0+eHBvX2FjY2VwdCh4cHJ0KTsKIAkJaWYgKG5ld3hwdCkgewpAQCAtNzI2LDcgKzczNSw3IEBACiAJCQlzdmNfeHBydF9yZWNlaXZlZChuZXd4cHQpOwogCQl9CiAJCXN2Y194cHJ0X3JlY2VpdmVkKHhwcnQpOwotCX0gZWxzZSBpZiAoIXRlc3RfYml0KFhQVF9DTE9TRSwgJnhwcnQtPnhwdF9mbGFncykpIHsKKwl9IGVsc2UgewogCQlkcHJpbnRrKCJzdmM6IHNlcnZlciAlcCwgcG9vbCAldSwgdHJhbnNwb3J0ICVwLCBpbnVzZT0lZFxuIiwKIAkJCXJxc3RwLCBwb29sLT5zcF9pZCwgeHBydCwKIAkJCWF0b21pY19yZWFkKCZ4cHJ0LT54cHRfcmVmLnJlZmNvdW50KSk7CkBAIC03MzksMTEgKzc0OCw2IEBACiAJCWRwcmludGsoInN2YzogZ290IGxlbj0lZFxuIiwgbGVuKTsKIAl9CiAKLQlpZiAodGVzdF9iaXQoWFBUX0NMT1NFLCAmeHBydC0+eHB0X2ZsYWdzKSkgewotCQlkcHJpbnRrKCJzdmNfcmVjdjogZm91bmQgWFBUX0NMT1NFXG4iKTsKLQkJc3ZjX2RlbGV0ZV94cHJ0KHhwcnQpOwotCX0KLQogCS8qIE5vIGRhdGEsIGluY29tcGxldGUgKFRDUCkgcmVhZCwgb3IgYWNjZXB0KCkgKi8KIAlpZiAobGVuID09IDAgfHwgbGVuID09IC1FQUdBSU4pIHsKIAkJcnFzdHAtPnJxX3Jlcy5sZW4gPSAwOwpAQCAtODg5LDExICs4OTMsOCBAQAogCWlmICh0ZXN0X2JpdChYUFRfVEVNUCwgJnhwcnQtPnhwdF9mbGFncykpCiAJCXNlcnYtPnN2X3RtcGNudC0tOwogCi0JZm9yIChkciA9IHN2Y19kZWZlcnJlZF9kZXF1ZXVlKHhwcnQpOyBkcjsKLQkgICAgIGRyID0gc3ZjX2RlZmVycmVkX2RlcXVldWUoeHBydCkpIHsKLQkJc3ZjX3hwcnRfcHV0KHhwcnQpOworCXdoaWxlICgoZHIgPSBzdmNfZGVmZXJyZWRfZGVxdWV1ZSh4cHJ0KSkgIT0gTlVMTCkKIAkJa2ZyZWUoZHIpOwotCX0KIAogCXN2Y194cHJ0X3B1dCh4cHJ0KTsKIAlzcGluX3VubG9ja19iaCgmc2Vydi0+c3ZfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jIGIvbmV0L3N1bnJwYy9zdmNhdXRoX3VuaXguYwppbmRleCBkOGMwNDExLi5hZmRjYjA0IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jCisrKyBiL25ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMKQEAgLTE1LDYgKzE1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNkZWZpbmUgUlBDREJHX0ZBQ0lMSVRZCVJQQ0RCR19BVVRICiAKKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvY2xudC5oPgogCiAvKgogICogQVVUSFVOSVggYW5kIEFVVEhOVUxMIGNyZWRlbnRpYWxzIGFyZSBib3RoIGhhbmRsZWQgaGVyZS4KQEAgLTE4NywxMCArMTg4LDEzIEBACiAJICogZm9yIHNjcmF0Y2g6ICovCiAJY2hhciAqYnVmID0gbWVzZzsKIAlpbnQgbGVuOwotCWludCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2LCBiNywgYjg7Ci0JY2hhciBjOwogCWNoYXIgY2xhc3NbOF07Ci0Jc3RydWN0IGluNl9hZGRyIGFkZHI7CisJdW5pb24geworCQlzdHJ1Y3Qgc29ja2FkZHIJCXNhOworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4JczQ7CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYJczY7CisJfSBhZGRyZXNzOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjsKIAlpbnQgZXJyOwogCiAJc3RydWN0IGlwX21hcCAqaXBtcDsKQEAgLTIwOSwyNCArMjEzLDI0IEBACiAJbGVuID0gcXdvcmRfZ2V0KCZtZXNnLCBidWYsIG1sZW4pOwogCWlmIChsZW4gPD0gMCkgcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoc3NjYW5mKGJ1ZiwgIiV1LiV1LiV1LiV1JWMiLCAmYjEsICZiMiwgJmIzLCAmYjQsICZjKSA9PSA0KSB7Ci0JCWFkZHIuczZfYWRkcjMyWzBdID0gMDsKLQkJYWRkci5zNl9hZGRyMzJbMV0gPSAwOwotCQlhZGRyLnM2X2FkZHIzMlsyXSA9IGh0b25sKDB4ZmZmZik7Ci0JCWFkZHIuczZfYWRkcjMyWzNdID0KLQkJCWh0b25sKCgoKCgoYjE8PDgpfGIyKTw8OCl8YjMpPDw4KXxiNCk7Ci0gICAgICAgfSBlbHNlIGlmIChzc2NhbmYoYnVmLCAiJTA0eDolMDR4OiUwNHg6JTA0eDolMDR4OiUwNHg6JTA0eDolMDR4JWMiLAotCQkJJmIxLCAmYjIsICZiMywgJmI0LCAmYjUsICZiNiwgJmI3LCAmYjgsICZjKSA9PSA4KSB7Ci0JCWFkZHIuczZfYWRkcjE2WzBdID0gaHRvbnMoYjEpOwotCQlhZGRyLnM2X2FkZHIxNlsxXSA9IGh0b25zKGIyKTsKLQkJYWRkci5zNl9hZGRyMTZbMl0gPSBodG9ucyhiMyk7Ci0JCWFkZHIuczZfYWRkcjE2WzNdID0gaHRvbnMoYjQpOwotCQlhZGRyLnM2X2FkZHIxNls0XSA9IGh0b25zKGI1KTsKLQkJYWRkci5zNl9hZGRyMTZbNV0gPSBodG9ucyhiNik7Ci0JCWFkZHIuczZfYWRkcjE2WzZdID0gaHRvbnMoYjcpOwotCQlhZGRyLnM2X2FkZHIxNls3XSA9IGh0b25zKGI4KTsKLSAgICAgICB9IGVsc2UKKwlpZiAocnBjX3B0b24oYnVmLCBsZW4sICZhZGRyZXNzLnNhLCBzaXplb2YoYWRkcmVzcykpID09IDApCiAJCXJldHVybiAtRUlOVkFMOworCXN3aXRjaCAoYWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKKwljYXNlIEFGX0lORVQ6CisJCS8qIEZvcm0gYSBtYXBwZWQgSVB2NCBhZGRyZXNzIGluIHNpbjYgKi8KKwkJbWVtc2V0KCZzaW42LCAwLCBzaXplb2Yoc2luNikpOworCQlzaW42LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisJCXNpbjYuc2luNl9hZGRyLnM2X2FkZHIzMlsyXSA9IGh0b25sKDB4ZmZmZik7CisJCXNpbjYuc2luNl9hZGRyLnM2X2FkZHIzMlszXSA9IGFkZHJlc3MuczQuc2luX2FkZHIuc19hZGRyOworCQlicmVhazsKKyNpZiBkZWZpbmVkKENPTkZJR19JUFY2KSB8fCBkZWZpbmVkKENPTkZJR19JUFY2X01PRFVMRSkKKwljYXNlIEFGX0lORVQ2OgorCQltZW1jcHkoJnNpbjYsICZhZGRyZXNzLnM2LCBzaXplb2Yoc2luNikpOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWV4cGlyeSA9IGdldF9leHBpcnkoJm1lc2cpOwogCWlmIChleHBpcnkgPT0wKQpAQCAtMjQzLDcgKzI0Nyw4IEBACiAJfSBlbHNlCiAJCWRvbSA9IE5VTEw7CiAKLQlpcG1wID0gaXBfbWFwX2xvb2t1cChjbGFzcywgJmFkZHIpOworCS8qIElQdjYgc2NvcGUgSURzIGFyZSBpZ25vcmVkIGZvciBub3cgKi8KKwlpcG1wID0gaXBfbWFwX2xvb2t1cChjbGFzcywgJnNpbjYuc2luNl9hZGRyKTsKIAlpZiAoaXBtcCkgewogCQllcnIgPSBpcF9tYXBfdXBkYXRlKGlwbXAsCiAJCQkgICAgIGNvbnRhaW5lcl9vZihkb20sIHN0cnVjdCB1bml4X2RvbWFpbiwgaCksCkBAIC02MTksNyArNjI0LDcgQEAKIAllbHNlCiAJCWdsZW4gPSAwOwogCi0Jc2VxX3ByaW50ZihtLCAiJWQgJWQ6IiwgdWctPnVpZCwgZ2xlbik7CisJc2VxX3ByaW50ZihtLCAiJXUgJWQ6IiwgdWctPnVpZCwgZ2xlbik7CiAJZm9yIChpID0gMDsgaSA8IGdsZW47IGkrKykKIAkJc2VxX3ByaW50ZihtLCAiICVkIiwgR1JPVVBfQVQodWctPmdpLCBpKSk7CiAJc2VxX3ByaW50ZihtLCAiXG4iKTsKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKaW5kZXggODcwOTI5ZS4uYTI5ZjI1OSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMKKysrIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKQEAgLTk2OCw2ICs5NjgsNyBAQAogCXJldHVybiBsZW47CiAgZXJyX2RlbGV0ZToKIAlzZXRfYml0KFhQVF9DTE9TRSwgJnN2c2stPnNrX3hwcnQueHB0X2ZsYWdzKTsKKwlzdmNfeHBydF9yZWNlaXZlZCgmc3Zzay0+c2tfeHBydCk7CiAgZXJyX2FnYWluOgogCXJldHVybiAtRUFHQUlOOwogfQpAQCAtMTM1Nyw3ICsxMzU4LDcgQEAKIAogCWlmICghc28pCiAJCXJldHVybiBlcnI7Ci0JaWYgKHNvLT5zay0+c2tfZmFtaWx5ICE9IEFGX0lORVQpCisJaWYgKChzby0+c2stPnNrX2ZhbWlseSAhPSBQRl9JTkVUKSAmJiAoc28tPnNrLT5za19mYW1pbHkgIT0gUEZfSU5FVDYpKQogCQllcnIgPSAgLUVBRk5PU1VQUE9SVDsKIAllbHNlIGlmIChzby0+c2stPnNrX3Byb3RvY29sICE9IElQUFJPVE9fVENQICYmCiAJICAgIHNvLT5zay0+c2tfcHJvdG9jb2wgIT0gSVBQUk9UT19VRFApCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRzb2NrLmMgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKaW5kZXggM2Q3MzllNS4uNzEyNDEyOSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0c29jay5jCisrKyBiL25ldC9zdW5ycGMveHBydHNvY2suYwpAQCAtMTkxMiw2ICsxOTEyLDExIEBACiAJY2FzZSAtRUFMUkVBRFk6CiAJCXhwcnRfY2xlYXJfY29ubmVjdGluZyh4cHJ0KTsKIAkJcmV0dXJuOworCWNhc2UgLUVJTlZBTDoKKwkJLyogSGFwcGVucywgZm9yIGluc3RhbmNlLCBpZiB0aGUgdXNlciBzcGVjaWZpZWQgYSBsaW5rCisJCSAqIGxvY2FsIElQdjYgYWRkcmVzcyB3aXRob3V0IGEgc2NvcGUtaWQuCisJCSAqLworCQlnb3RvIG91dDsKIAl9CiBvdXRfZWFnYWluOgogCXN0YXR1cyA9IC1FQUdBSU47CkBAIC0yMTAwLDcgKzIxMDUsNyBAQAogICogd2UgYWxsb2NhdGUgcGFnZXMgaW5zdGVhZCBkb2luZyBhIGttYWxsb2MgbGlrZSBycGNfbWFsbG9jIGlzIGJlY2F1c2Ugd2Ugd2FudAogICogdG8gdXNlIHRoZSBzZXJ2ZXIgc2lkZSBzZW5kIHJvdXRpbmVzLgogICovCi12b2lkICpiY19tYWxsb2Moc3RydWN0IHJwY190YXNrICp0YXNrLCBzaXplX3Qgc2l6ZSkKK3N0YXRpYyB2b2lkICpiY19tYWxsb2Moc3RydWN0IHJwY190YXNrICp0YXNrLCBzaXplX3Qgc2l6ZSkKIHsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzdHJ1Y3QgcnBjX2J1ZmZlciAqYnVmOwpAQCAtMjEyMCw3ICsyMTI1LDcgQEAKIC8qCiAgKiBGcmVlIHRoZSBzcGFjZSBhbGxvY2F0ZWQgaW4gdGhlIGJjX2FsbG9jIHJvdXRpbmUKICAqLwotdm9pZCBiY19mcmVlKHZvaWQgKmJ1ZmZlcikKK3N0YXRpYyB2b2lkIGJjX2ZyZWUodm9pZCAqYnVmZmVyKQogewogCXN0cnVjdCBycGNfYnVmZmVyICpidWY7CiAKZGlmZiAtLWdpdCBhL25ldC9zeXNjdGxfbmV0LmMgYi9uZXQvc3lzY3RsX25ldC5jCmluZGV4IDBiMTVkNzIuLjUzMTk2MDAgMTAwNjQ0Ci0tLSBhL25ldC9zeXNjdGxfbmV0LmMKKysrIGIvbmV0L3N5c2N0bF9uZXQuYwpAQCAtNzEsNyArNzEsNyBAQAogCS5wZXJtaXNzaW9ucyA9IG5ldF9jdGxfcm9faGVhZGVyX3Blcm1zLAogfTsKIAotc3RhdGljIGludCBzeXNjdGxfbmV0X2luaXQoc3RydWN0IG5ldCAqbmV0KQorc3RhdGljIGludCBfX25ldF9pbml0IHN5c2N0bF9uZXRfaW5pdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc2V0dXBfc3lzY3RsX3NldCgmbmV0LT5zeXNjdGxzLAogCQkJICZuZXRfc3lzY3RsX3JvX3Jvb3QuZGVmYXVsdF9zZXQsCkBAIC03OSw3ICs3OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHN5c2N0bF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IHN5c2N0bF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJV0FSTl9PTighbGlzdF9lbXB0eSgmbmV0LT5zeXNjdGxzLmxpc3QpKTsKIAlyZXR1cm47CmRpZmYgLS1naXQgYS9uZXQvdGlwYy9LY29uZmlnIGIvbmV0L3RpcGMvS2NvbmZpZwppbmRleCAzYjMwZDExLi5iNzRmNzhkIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9LY29uZmlnCisrKyBiL25ldC90aXBjL0tjb25maWcKQEAgLTEwLDcgKzEwLDcgQEAKIAkgIHNwZWNpYWxseSBkZXNpZ25lZCBmb3IgaW50cmEgY2x1c3RlciBjb21tdW5pY2F0aW9uLiBUaGlzIHByb3RvY29sCiAJICBvcmlnaW5hdGVzIGZyb20gRXJpY3Nzb24gd2hlcmUgaXQgaGFzIGJlZW4gdXNlZCBpbiBjYXJyaWVyIGdyYWRlCiAJICBjbHVzdGVyIGFwcGxpY2F0aW9ucyBmb3IgbWFueSB5ZWFycy4KLQkKKwogCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgVElQQywgc2VlIGh0dHA6Ly90aXBjLnNvdXJjZWZvcmdlLm5ldC4KIAogCSAgVGhpcyBwcm90b2NvbCBzdXBwb3J0IGlzIGFsc28gYXZhaWxhYmxlIGFzIGEgbW9kdWxlICggPSBjb2RlIHdoaWNoCkBAIC0yMyw5MSArMjMsNzYgQEAKIGlmIFRJUEMKIAogY29uZmlnIFRJUENfQURWQU5DRUQKLQlib29sICJUSVBDOiBBZHZhbmNlZCBjb25maWd1cmF0aW9uIgorCWJvb2wgIkFkdmFuY2VkIFRJUEMgY29uZmlndXJhdGlvbiIKIAlkZWZhdWx0IG4KIAloZWxwCi0JICBTYXlpbmcgWSBoZXJlIHdpbGwgb3BlbiBzb21lIGFkdmFuY2VkIGNvbmZpZ3VyYXRpb24KLSAgICAgICAgICBmb3IgVElQQy4gTW9zdCB1c2VycyBkbyBub3QgbmVlZCB0byBib3RoZXIsIHNvIGlmCi0gICAgICAgICAgdW5zdXJlLCBqdXN0IHNheSBOLgorCSAgU2F5aW5nIFkgaGVyZSB3aWxsIG9wZW4gc29tZSBhZHZhbmNlZCBjb25maWd1cmF0aW9uIGZvciBUSVBDLgorCSAgTW9zdCB1c2VycyBkbyBub3QgbmVlZCB0byBib3RoZXI7IGlmIHVuc3VyZSwganVzdCBzYXkgTi4KIAogY29uZmlnIFRJUENfWk9ORVMKLQlpbnQgIk1heGltdW0gbnVtYmVyIG9mIHpvbmVzIGluIG5ldHdvcmsiCisJaW50ICJNYXhpbXVtIG51bWJlciBvZiB6b25lcyBpbiBhIG5ldHdvcmsiCiAJZGVwZW5kcyBvbiBUSVBDX0FEVkFOQ0VECisJcmFuZ2UgMSAyNTUKIAlkZWZhdWx0ICIzIgogCWhlbHAKLQkgTWF4IG51bWJlciBvZiB6b25lcyBpbnNpZGUgVElQQyBuZXR3b3JrLiBNYXggc3VwcG9ydGVkIHZhbHVlIAotICAgICAgICAgaXMgMjU1IHpvbmVzLCBtaW5pbXVtIGlzIDEKKwkgIFNwZWNpZmllcyBob3cgbWFueSB6b25lcyBjYW4gYmUgc3VwcG9ydGVkIGluIGEgVElQQyBuZXR3b3JrLgorCSAgQ2FuIHJhbmdlIGZyb20gMSB0byAyNTUgem9uZXM7IGRlZmF1bHQgaXMgMy4KIAotCSBEZWZhdWx0IGlzIDMgem9uZXMgaW4gYSBuZXR3b3JrOyBzZXR0aW5nIHRoaXMgdG8gaGlnaGVyCi0JIGFsbG93cyBtb3JlIHpvbmVzIGJ1dCBtaWdodCB1c2UgbW9yZSBtZW1vcnkuCisJICBTZXR0aW5nIHRoaXMgdG8gYSBzbWFsbGVyIHZhbHVlIHNhdmVzIHNvbWUgbWVtb3J5OworCSAgc2V0dGluZyBpdCB0byBhIGhpZ2hlciB2YWx1ZSBhbGxvd3MgZm9yIG1vcmUgem9uZXMuCiAKIGNvbmZpZyBUSVBDX0NMVVNURVJTCiAJaW50ICJNYXhpbXVtIG51bWJlciBvZiBjbHVzdGVycyBpbiBhIHpvbmUiCiAJZGVwZW5kcyBvbiBUSVBDX0FEVkFOQ0VECisJcmFuZ2UgMSAxCiAJZGVmYXVsdCAiMSIKIAloZWxwCi0gICAgICAgICAgKioqT25seSAxIChvbmUgY2x1c3RlciBpbiBhIHpvbmUpIGlzIHN1cHBvcnRlZCBieSBjdXJyZW50IGNvZGUuCi0gICAgICAgICAgQW55IHZhbHVlIHNldCBoZXJlIHdpbGwgYmUgb3ZlcnJpZGRlbi4qKioKKwkgIFNwZWNpZmllcyBob3cgbWFueSBjbHVzdGVycyBjYW4gYmUgc3VwcG9ydGVkIGluIGEgVElQQyB6b25lLgogCi0gICAgICAgICAgKE1heCBudW1iZXIgb2YgY2x1c3RlcnMgaW5zaWRlIFRJUEMgem9uZS4gTWF4IHN1cHBvcnRlZCAKLSAgICAgICAgICB2YWx1ZSBpcyA0MDk1IGNsdXN0ZXJzLCBtaW5pbXVtIGlzIDEuCi0KLQkgIERlZmF1bHQgaXMgMTsgc2V0dGluZyB0aGlzIHRvIHNtYWxsZXIgdmFsdWUgbWlnaHQgc2F2ZSAKLSAgICAgICAgICBzb21lIG1lbW9yeSwgc2V0dGluZyBpdCB0byBoaWdoZXIKLQkgIGFsbG93cyBtb3JlIGNsdXN0ZXJzIGFuZCBtaWdodCBjb25zdW1lIG1vcmUgbWVtb3J5LikKKwkgICoqKiBDdXJyZW50bHkgVElQQyBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIGNsdXN0ZXIgcGVyIHpvbmUuICoqKgogCiBjb25maWcgVElQQ19OT0RFUwotCWludCAiTWF4aW11bSBudW1iZXIgb2Ygbm9kZXMgaW4gY2x1c3RlciIKKwlpbnQgIk1heGltdW0gbnVtYmVyIG9mIG5vZGVzIGluIGEgY2x1c3RlciIKIAlkZXBlbmRzIG9uIFRJUENfQURWQU5DRUQKKwlyYW5nZSA4IDIwNDcKIAlkZWZhdWx0ICIyNTUiCiAJaGVscAotCSAgTWF4aW11bSBudW1iZXIgb2Ygbm9kZXMgaW5zaWRlIGEgVElQQyBjbHVzdGVyLiBNYXhpbXVtIAotICAgICAgICAgIHN1cHBvcnRlZCB2YWx1ZSBpcyAyMDQ3IG5vZGVzLCBtaW5pbXVtIGlzIDguIAorCSAgU3BlY2lmaWVzIGhvdyBtYW55IG5vZGVzIGNhbiBiZSBzdXBwb3J0ZWQgaW4gYSBUSVBDIGNsdXN0ZXIuCisJICBDYW4gcmFuZ2UgZnJvbSA4IHRvIDIwNDcgbm9kZXM7IGRlZmF1bHQgaXMgMjU1LgogCi0JICBTZXR0aW5nIHRoaXMgdG8gYSBzbWFsbGVyIHZhbHVlIHNhdmVzIHNvbWUgbWVtb3J5LCAKLQkgIHNldHRpbmcgaXQgdG8gaGlnaGVyIGFsbG93cyBtb3JlIG5vZGVzLgotCi1jb25maWcgVElQQ19TTEFWRV9OT0RFUwotCWludCAiTWF4aW11bSBudW1iZXIgb2Ygc2xhdmUgbm9kZXMgaW4gY2x1c3RlciIKLQlkZXBlbmRzIG9uIFRJUENfQURWQU5DRUQKLQlkZWZhdWx0ICIwIgotCWhlbHAKLSAgICAgICAgICAqKipUaGlzIGNhcGFiaWxpdHkgaXMgbm90IHN1cHBvcnRlZCBieSBjdXJyZW50IGNvZGUuKioqCi0JICAKLQkgIE1heGltdW0gbnVtYmVyIG9mIHNsYXZlIG5vZGVzIGluc2lkZSBhIFRJUEMgY2x1c3Rlci4gTWF4aW11bSAKLSAgICAgICAgICBzdXBwb3J0ZWQgdmFsdWUgaXMgMjA0NyBub2RlcywgbWluaW11bSBpcyAwLiAKLQotCSAgU2V0dGluZyB0aGlzIHRvIGEgc21hbGxlciB2YWx1ZSBzYXZlcyBzb21lIG1lbW9yeSwgCi0JICBzZXR0aW5nIGl0IHRvIGhpZ2hlciBhbGxvd3MgbW9yZSBub2Rlcy4KKwkgIFNldHRpbmcgdGhpcyB0byBhIHNtYWxsZXIgdmFsdWUgc2F2ZXMgc29tZSBtZW1vcnk7CisJICBzZXR0aW5nIGl0IHRvIGhpZ2hlciBhbGxvd3MgZm9yIG1vcmUgbm9kZXMuCiAKIGNvbmZpZyBUSVBDX1BPUlRTCiAJaW50ICJNYXhpbXVtIG51bWJlciBvZiBwb3J0cyBpbiBhIG5vZGUiCiAJZGVwZW5kcyBvbiBUSVBDX0FEVkFOQ0VECisJcmFuZ2UgMTI3IDY1NTM1CiAJZGVmYXVsdCAiODE5MSIKIAloZWxwCi0JICBNYXhpbXVtIG51bWJlciBvZiBwb3J0cyB3aXRoaW4gYSBub2RlLiBNYXhpbXVtIAotICAgICAgICAgIHN1cHBvcnRlZCB2YWx1ZSBpcyA2NDUzNSBub2RlcywgbWluaW11bSBpcyAxMjcuIAorCSAgU3BlY2lmaWVzIGhvdyBtYW55IHBvcnRzIGNhbiBiZSBzdXBwb3J0ZWQgYnkgYSBub2RlLgorCSAgQ2FuIHJhbmdlIGZyb20gMTI3IHRvIDY1NTM1IHBvcnRzOyBkZWZhdWx0IGlzIDgxOTEuCiAKIAkgIFNldHRpbmcgdGhpcyB0byBhIHNtYWxsZXIgdmFsdWUgc2F2ZXMgc29tZSBtZW1vcnksIAotCSAgc2V0dGluZyBpdCB0byBoaWdoZXIgYWxsb3dzIG1vcmUgcG9ydHMuCisJICBzZXR0aW5nIGl0IHRvIGhpZ2hlciBhbGxvd3MgZm9yIG1vcmUgcG9ydHMuCiAKIGNvbmZpZyBUSVBDX0xPRwogCWludCAiU2l6ZSBvZiBsb2cgYnVmZmVyIgogCWRlcGVuZHMgb24gVElQQ19BRFZBTkNFRAotCWRlZmF1bHQgMAorCXJhbmdlIDAgMzI3NjgKKwlkZWZhdWx0ICIwIgogCWhlbHAKLSAJICBTaXplIChpbiBieXRlcykgb2YgVElQQydzIGludGVybmFsIGxvZyBidWZmZXIsIHdoaWNoIHJlY29yZHMgdGhlCi0JICBvY2N1cnJlbmNlIG9mIHNpZ25pZmljYW50IGV2ZW50cy4gIE1heGltdW0gc3VwcG9ydGVkIHZhbHVlCi0JICBpcyAzMjc2OCBieXRlcywgbWluaW11bSBpcyAwLgorCSAgU2l6ZSAoaW4gYnl0ZXMpIG9mIFRJUEMncyBpbnRlcm5hbCBsb2cgYnVmZmVyLCB3aGljaCByZWNvcmRzIHRoZQorCSAgb2NjdXJyZW5jZSBvZiBzaWduaWZpY2FudCBldmVudHMuICBDYW4gcmFuZ2UgZnJvbSAwIHRvIDMyNzY4IGJ5dGVzOworCSAgZGVmYXVsdCBpcyAwLgogCiAJICBUaGVyZSBpcyBubyBuZWVkIHRvIGVuYWJsZSB0aGUgbG9nIGJ1ZmZlciB1bmxlc3MgdGhlIG5vZGUgd2lsbCBiZQogCSAgbWFuYWdlZCByZW1vdGVseSB2aWEgVElQQy4KIAogY29uZmlnIFRJUENfREVCVUcKLQlib29sICJFbmFibGUgZGVidWdnaW5nIHN1cHBvcnQiCisJYm9vbCAiRW5hYmxlIGRlYnVnIG1lc3NhZ2VzIgogCWRlZmF1bHQgbgogCWhlbHAKLSAJICBUaGlzIHdpbGwgZW5hYmxlIGRlYnVnZ2luZyBvZiBUSVBDLgorCSAgVGhpcyBlbmFibGVzIGRlYnVnZ2luZyBvZiBUSVBDLgogCiAJICBPbmx5IHNheSBZIGhlcmUgaWYgeW91IGFyZSBoYXZpbmcgdHJvdWJsZSB3aXRoIFRJUEMuICBJdCB3aWxsCiAJICBlbmFibGUgdGhlIGRpc3BsYXkgb2YgZGV0YWlsZWQgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBpcyBnb2luZyBvbi4KZGlmZiAtLWdpdCBhL25ldC90aXBjL2NvcmUuYyBiL25ldC90aXBjL2NvcmUuYwppbmRleCAzMjU2YmQ3Li41MmM1NzFmIDEwMDY0NAotLS0gYS9uZXQvdGlwYy9jb3JlLmMKKysrIGIvbmV0L3RpcGMvY29yZS5jCkBAIC0xODksMTEgKzE4OSwxMSBAQAogCXRpcGNfcmVtb3RlX21hbmFnZW1lbnQgPSAxOwogCXRpcGNfbWF4X3B1YmxpY2F0aW9ucyA9IDEwMDAwOwogCXRpcGNfbWF4X3N1YnNjcmlwdGlvbnMgPSAyMDAwOwotCXRpcGNfbWF4X3BvcnRzID0gZGVsaW1pdChDT05GSUdfVElQQ19QT1JUUywgMTI3LCA2NTUzNik7Ci0JdGlwY19tYXhfem9uZXMgPSBkZWxpbWl0KENPTkZJR19USVBDX1pPTkVTLCAxLCAyNTUpOwotCXRpcGNfbWF4X2NsdXN0ZXJzID0gZGVsaW1pdChDT05GSUdfVElQQ19DTFVTVEVSUywgMSwgMSk7Ci0JdGlwY19tYXhfbm9kZXMgPSBkZWxpbWl0KENPTkZJR19USVBDX05PREVTLCA4LCAyMDQ3KTsKLQl0aXBjX21heF9zbGF2ZXMgPSBkZWxpbWl0KENPTkZJR19USVBDX1NMQVZFX05PREVTLCAwLCAyMDQ3KTsKKwl0aXBjX21heF9wb3J0cyA9IENPTkZJR19USVBDX1BPUlRTOworCXRpcGNfbWF4X3pvbmVzID0gQ09ORklHX1RJUENfWk9ORVM7CisJdGlwY19tYXhfY2x1c3RlcnMgPSBDT05GSUdfVElQQ19DTFVTVEVSUzsKKwl0aXBjX21heF9ub2RlcyA9IENPTkZJR19USVBDX05PREVTOworCXRpcGNfbWF4X3NsYXZlcyA9IENPTkZJR19USVBDX1NMQVZFX05PREVTOwogCXRpcGNfbmV0X2lkID0gNDcxMTsKIAogCWlmICgocmVzID0gdGlwY19jb3JlX3N0YXJ0KCkpKQpkaWZmIC0tZ2l0IGEvbmV0L3VuaXgvYWZfdW5peC5jIGIvbmV0L3VuaXgvYWZfdW5peC5jCmluZGV4IGYyNTUxMTkuLjNkOTEyMmUgMTAwNjQ0Ci0tLSBhL25ldC91bml4L2FmX3VuaXguYworKysgYi9uZXQvdW5peC9hZl91bml4LmMKQEAgLTE0NCw3ICsxNDQsNyBAQAogLyoKICAqICBTTVAgbG9ja2luZyBzdHJhdGVneToKICAqICAgIGhhc2ggdGFibGUgaXMgcHJvdGVjdGVkIHdpdGggc3BpbmxvY2sgdW5peF90YWJsZV9sb2NrCi0gKiAgICBlYWNoIHNvY2tldCBzdGF0ZSBpcyBwcm90ZWN0ZWQgYnkgc2VwYXJhdGUgcndsb2NrLgorICogICAgZWFjaCBzb2NrZXQgc3RhdGUgaXMgcHJvdGVjdGVkIGJ5IHNlcGFyYXRlIHNwaW4gbG9jay4KICAqLwogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHVuaXhfaGFzaF9mb2xkKF9fd3N1bSBuKQpAQCAtMjIyNCw3ICsyMjI0LDcgQEAKIH07CiAKIAotc3RhdGljIGludCB1bml4X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyBpbnQgX19uZXRfaW5pdCB1bml4X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAlpbnQgZXJyb3IgPSAtRU5PTUVNOwogCkBAIC0yMjQzLDcgKzIyNDMsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotc3RhdGljIHZvaWQgdW5peF9uZXRfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCitzdGF0aWMgdm9pZCBfX25ldF9leGl0IHVuaXhfbmV0X2V4aXQoc3RydWN0IG5ldCAqbmV0KQogewogCXVuaXhfc3lzY3RsX3VucmVnaXN0ZXIobmV0KTsKIAlwcm9jX25ldF9yZW1vdmUobmV0LCAidW5peCIpOwpkaWZmIC0tZ2l0IGEvbmV0L3VuaXgvc3lzY3RsX25ldF91bml4LmMgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYwppbmRleCA3MDhmNWRmLi5kMDk1YzdiIDEwMDY0NAotLS0gYS9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYworKysgYi9uZXQvdW5peC9zeXNjdGxfbmV0X3VuaXguYwpAQCAtMzEsNyArMzEsNyBAQAogCXsgfSwKIH07CiAKLWludCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCitpbnQgX19uZXRfaW5pdCB1bml4X3N5c2N0bF9yZWdpc3RlcihzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAKZGlmZiAtLWdpdCBhL25ldC93aW1heC9vcC1tc2cuYyBiL25ldC93aW1heC9vcC1tc2cuYwppbmRleCBkM2JmYjZlLi43NzE4NjU3IDEwMDY0NAotLS0gYS9uZXQvd2ltYXgvb3AtbXNnLmMKKysrIGIvbmV0L3dpbWF4L29wLW1zZy5jCkBAIC0zMjAsOCArMzIwLDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKHdpbWF4X21zZyk7CiAKIAotc3RhdGljIGNvbnN0Ci1zdHJ1Y3QgbmxhX3BvbGljeSB3aW1heF9nbmxfbXNnX3BvbGljeVtXSU1BWF9HTkxfQVRUUl9NQVggKyAxXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB3aW1heF9nbmxfbXNnX3BvbGljeVtXSU1BWF9HTkxfQVRUUl9NQVggKyAxXSA9IHsKIAlbV0lNQVhfR05MX01TR19JRklEWF0gPSB7CiAJCS50eXBlID0gTkxBX1UzMiwKIAl9LApkaWZmIC0tZ2l0IGEvbmV0L3dpbWF4L29wLXJlc2V0LmMgYi9uZXQvd2ltYXgvb3AtcmVzZXQuYwppbmRleCAzNWYzNzAwLi40ZGM4MmE1IDEwMDY0NAotLS0gYS9uZXQvd2ltYXgvb3AtcmVzZXQuYworKysgYi9uZXQvd2ltYXgvb3AtcmVzZXQuYwpAQCAtOTEsOCArOTEsNyBAQAogRVhQT1JUX1NZTUJPTCh3aW1heF9yZXNldCk7CiAKIAotc3RhdGljIGNvbnN0Ci1zdHJ1Y3QgbmxhX3BvbGljeSB3aW1heF9nbmxfcmVzZXRfcG9saWN5W1dJTUFYX0dOTF9BVFRSX01BWCArIDFdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHdpbWF4X2dubF9yZXNldF9wb2xpY3lbV0lNQVhfR05MX0FUVFJfTUFYICsgMV0gPSB7CiAJW1dJTUFYX0dOTF9SRVNFVF9JRklEWF0gPSB7CiAJCS50eXBlID0gTkxBX1UzMiwKIAl9LApkaWZmIC0tZ2l0IGEvbmV0L3dpbWF4L29wLXJma2lsbC5jIGIvbmV0L3dpbWF4L29wLXJma2lsbC5jCmluZGV4IGFlNzUyYTYuLmU5NzhjNzEgMTAwNjQ0Ci0tLSBhL25ldC93aW1heC9vcC1yZmtpbGwuYworKysgYi9uZXQvd2ltYXgvb3AtcmZraWxsLmMKQEAgLTQxMCw4ICs0MTAsNyBAQAogICoganVzdCBxdWVyeSkuCiAgKi8KIAotc3RhdGljIGNvbnN0Ci1zdHJ1Y3QgbmxhX3BvbGljeSB3aW1heF9nbmxfcmZraWxsX3BvbGljeVtXSU1BWF9HTkxfQVRUUl9NQVggKyAxXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB3aW1heF9nbmxfcmZraWxsX3BvbGljeVtXSU1BWF9HTkxfQVRUUl9NQVggKyAxXSA9IHsKIAlbV0lNQVhfR05MX1JGS0lMTF9JRklEWF0gPSB7CiAJCS50eXBlID0gTkxBX1UzMiwKIAl9LApkaWZmIC0tZ2l0IGEvbmV0L3dpbWF4L29wLXN0YXRlLWdldC5jIGIvbmV0L3dpbWF4L29wLXN0YXRlLWdldC5jCmluZGV4IGE3NmI4ZmMuLjExYWQzMzUgMTAwNjQ0Ci0tLSBhL25ldC93aW1heC9vcC1zdGF0ZS1nZXQuYworKysgYi9uZXQvd2ltYXgvb3Atc3RhdGUtZ2V0LmMKQEAgLTMzLDggKzMzLDcgQEAKICNpbmNsdWRlICJkZWJ1Zy1sZXZlbHMuaCIKIAogCi1zdGF0aWMgY29uc3QKLXN0cnVjdCBubGFfcG9saWN5IHdpbWF4X2dubF9zdGF0ZV9nZXRfcG9saWN5W1dJTUFYX0dOTF9BVFRSX01BWCArIDFdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHdpbWF4X2dubF9zdGF0ZV9nZXRfcG9saWN5W1dJTUFYX0dOTF9BVFRSX01BWCArIDFdID0gewogCVtXSU1BWF9HTkxfU1RHRVRfSUZJRFhdID0gewogCQkudHlwZSA9IE5MQV9VMzIsCiAJfSwKZGlmZiAtLWdpdCBhL25ldC93aW1heC9zdGFjay5jIGIvbmV0L3dpbWF4L3N0YWNrLmMKaW5kZXggYzg4NjY0MS4uODEzZTFlYSAxMDA2NDQKLS0tIGEvbmV0L3dpbWF4L3N0YWNrLmMKKysrIGIvbmV0L3dpbWF4L3N0YWNrLmMKQEAgLTc1LDggKzc1LDcgQEAKICAqIGNsb3NlIHRvIHdoZXJlIHRoZSBkYXRhIGlzIGdlbmVyYXRlZC4KICAqLwogLyoKLXN0YXRpYyBjb25zdAotc3RydWN0IG5sYV9wb2xpY3kgd2ltYXhfZ25sX3JlX3N0YXR1c19jaGFuZ2VbV0lNQVhfR05MX0FUVFJfTUFYICsgMV0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgd2ltYXhfZ25sX3JlX3N0YXR1c19jaGFuZ2VbV0lNQVhfR05MX0FUVFJfTUFYICsgMV0gPSB7CiAJW1dJTUFYX0dOTF9TVENIX1NUQVRFX09MRF0gPSB7IC50eXBlID0gTkxBX1U4IH0sCiAJW1dJTUFYX0dOTF9TVENIX1NUQVRFX05FV10gPSB7IC50eXBlID0gTkxBX1U4IH0sCiB9OwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzLy5naXRpZ25vcmUgYi9uZXQvd2lyZWxlc3MvLmdpdGlnbm9yZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzM0NTFiCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3dpcmVsZXNzLy5naXRpZ25vcmUKQEAgLTAsMCArMSBAQAorcmVnZGIuYwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL0tjb25maWcgYi9uZXQvd2lyZWxlc3MvS2NvbmZpZwppbmRleCA5MGU5M2E1Li5kMGVlMjkwIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvS2NvbmZpZworKysgYi9uZXQvd2lyZWxlc3MvS2NvbmZpZwpAQCAtOTQsMjAgKzk0LDIxIEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBXSVJFTEVTU19PTERfUkVHVUxBVE9SWQotCWJvb2wgIk9sZCB3aXJlbGVzcyBzdGF0aWMgcmVndWxhdG9yeSBkZWZpbml0aW9ucyIKK2NvbmZpZyBDRkc4MDIxMV9JTlRFUk5BTF9SRUdEQgorCWJvb2wgInVzZSBzdGF0aWNhbGx5IGNvbXBpbGVkIHJlZ3VsYXRvcnkgcnVsZXMgZGF0YWJhc2UiIGlmIEVNQkVEREVECiAJZGVmYXVsdCBuCiAJZGVwZW5kcyBvbiBDRkc4MDIxMQogCS0tLWhlbHAtLS0KLQkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG9sZCBzdGF0aWMgcmVndWxhdG9yeSBpbmZvcm1hdGlvbgotCSAgYW5kIHVzZXMgaXQgd2l0aGluIHRoZSBuZXcgZnJhbWV3b3JrLiBUaGlzIG9wdGlvbiBpcyBhdmFpbGFibGUKLQkgIGZvciBoaXN0b3JpY2FsIHJlYXNvbnMgYW5kIGl0IGlzIGFkdmlzZWQgdG8gbGVhdmUgaXQgb2ZmLgorCSAgVGhpcyBvcHRpb24gZ2VuZXJhdGVzIGFuIGludGVybmFsIGRhdGEgc3RydWN0dXJlIHJlcHJlc2VudGluZworCSAgdGhlIHdpcmVsZXNzIHJlZ3VsYXRvcnkgcnVsZXMgZGVzY3JpYmVkIGluIG5ldC93aXJlbGVzcy9kYi50eHQKKwkgIGFuZCBpbmNsdWRlcyBjb2RlIHRvIHF1ZXJ5IHRoYXQgZGF0YWJhc2UuICBUaGlzIGlzIGFuIGFsdGVybmF0aXZlCisJICB0byB1c2luZyBDUkRBIGZvciBkZWZpbmluZyByZWd1bGF0b3J5IHJ1bGVzIGZvciB0aGUga2VybmVsLgogCiAJICBGb3IgZGV0YWlscyBzZWU6CiAKIAkgIGh0dHA6Ly93aXJlbGVzcy5rZXJuZWwub3JnL2VuL2RldmVsb3BlcnMvUmVndWxhdG9yeQogCi0JICBTYXkgTiBhbmQgaWYgeW91IHNheSBZLCBwbGVhc2UgdGVsbCB1cyB3aHkuIFRoZSBkZWZhdWx0IGlzIE4uCisJICBNb3N0IGRpc3RyaWJ1dGlvbnMgaGF2ZSBhIENSREEgcGFja2FnZS4gIFNvIGlmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBDRkc4MDIxMV9XRVhUCiAJYm9vbCAiY2ZnODAyMTEgd2lyZWxlc3MgZXh0ZW5zaW9ucyBjb21wYXRpYmlsaXR5IgpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL01ha2VmaWxlIGIvbmV0L3dpcmVsZXNzL01ha2VmaWxlCmluZGV4IGYwN2M4ZGMuLmU3N2U1MDggMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9NYWtlZmlsZQorKysgYi9uZXQvd2lyZWxlc3MvTWFrZWZpbGUKQEAgLTEzLDUgKzEzLDExIEBACiBjZmc4MDIxMS15ICs9IG1sbWUubyBpYnNzLm8gc21lLm8gY2hhbi5vIGV0aHRvb2wubwogY2ZnODAyMTEtJChDT05GSUdfQ0ZHODAyMTFfREVCVUdGUykgKz0gZGVidWdmcy5vCiBjZmc4MDIxMS0kKENPTkZJR19DRkc4MDIxMV9XRVhUKSArPSB3ZXh0LWNvbXBhdC5vIHdleHQtc21lLm8KK2NmZzgwMjExLSQoQ09ORklHX0NGRzgwMjExX0lOVEVSTkFMX1JFR0RCKSArPSByZWdkYi5vCiAKIGNjZmxhZ3MteSArPSAtRF9fQ0hFQ0tfRU5ESUFOX18KKworJChvYmopL3JlZ2RiLmM6ICQoc3JjKS9kYi50eHQgJChzcmMpL2dlbnJlZ2RiLmF3aworCUAkKEFXSykgLWYgJChzcmN0cmVlKS8kKHNyYykvZ2VucmVnZGIuYXdrIDwgJDwgPiAkQAorCitjbGVhbi1maWxlcyA6PSByZWdkYi5jCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY2hhbi5jIGIvbmV0L3dpcmVsZXNzL2NoYW4uYwppbmRleCBhNDZhYzZjLi5iZjE3MzdmIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY2hhbi5jCisrKyBiL25ldC93aXJlbGVzcy9jaGFuLmMKQEAgLTQxLDEyICs0MSw0NSBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKK3N0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqCityZGV2X2ZyZXFfdG9fY2hhbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCSAgaW50IGZyZXEsIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlKQoreworCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbjsKKwlzdHJ1Y3QgaWVlZTgwMjExX3N0YV9odF9jYXAgKmh0X2NhcDsKKworCWNoYW4gPSBpZWVlODAyMTFfZ2V0X2NoYW5uZWwoJnJkZXYtPndpcGh5LCBmcmVxKTsKKworCS8qIFByaW1hcnkgY2hhbm5lbCBub3QgYWxsb3dlZCAqLworCWlmICghY2hhbiB8fCBjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX0RJU0FCTEVEKQorCQlyZXR1cm4gTlVMTDsKKworCWlmIChjaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUyAmJgorCSAgICBjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0hUNDBNSU5VUykKKwkJcmV0dXJuIE5VTEw7CisJZWxzZSBpZiAoY2hhbm5lbF90eXBlID09IE5MODAyMTFfQ0hBTl9IVDQwUExVUyAmJgorCQkgY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19IVDQwUExVUykKKwkJcmV0dXJuIE5VTEw7CisKKwlodF9jYXAgPSAmcmRldi0+d2lwaHkuYmFuZHNbY2hhbi0+YmFuZF0tPmh0X2NhcDsKKworCWlmIChjaGFubmVsX3R5cGUgIT0gTkw4MDIxMV9DSEFOX05PX0hUKSB7CisJCWlmICghaHRfY2FwLT5odF9zdXBwb3J0ZWQpCisJCQlyZXR1cm4gTlVMTDsKKworCQlpZiAoIShodF9jYXAtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfU1VQX1dJRFRIXzIwXzQwKSB8fAorCQkgICAgaHRfY2FwLT5jYXAgJiBJRUVFODAyMTFfSFRfQ0FQXzQwTUhaX0lOVE9MRVJBTlQpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gY2hhbjsKK30KKwogaW50IHJkZXZfc2V0X2ZyZXEoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAogCQkgIHN0cnVjdCB3aXJlbGVzc19kZXYgKmZvcl93ZGV2LAogCQkgIGludCBmcmVxLCBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSkKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47Ci0Jc3RydWN0IGllZWU4MDIxMV9zdGFfaHRfY2FwICpodF9jYXA7CiAJaW50IHJlc3VsdDsKIAogCWlmIChyZGV2X2ZpeGVkX2NoYW5uZWwocmRldiwgZm9yX3dkZXYpKQpAQCAtNTUsMzAgKzg4LDEwIEBACiAJaWYgKCFyZGV2LT5vcHMtPnNldF9jaGFubmVsKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQljaGFuID0gaWVlZTgwMjExX2dldF9jaGFubmVsKCZyZGV2LT53aXBoeSwgZnJlcSk7Ci0KLQkvKiBQcmltYXJ5IGNoYW5uZWwgbm90IGFsbG93ZWQgKi8KLQlpZiAoIWNoYW4gfHwgY2hhbi0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9ESVNBQkxFRCkKKwljaGFuID0gcmRldl9mcmVxX3RvX2NoYW4ocmRldiwgZnJlcSwgY2hhbm5lbF90eXBlKTsKKwlpZiAoIWNoYW4pCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGNoYW5uZWxfdHlwZSA9PSBOTDgwMjExX0NIQU5fSFQ0ME1JTlVTICYmCi0JICAgIGNoYW4tPmZsYWdzICYgSUVFRTgwMjExX0NIQU5fTk9fSFQ0ME1JTlVTKQotCQlyZXR1cm4gLUVJTlZBTDsKLQllbHNlIGlmIChjaGFubmVsX3R5cGUgPT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTICYmCi0JCSBjaGFuLT5mbGFncyAmIElFRUU4MDIxMV9DSEFOX05PX0hUNDBQTFVTKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWh0X2NhcCA9ICZyZGV2LT53aXBoeS5iYW5kc1tjaGFuLT5iYW5kXS0+aHRfY2FwOwotCi0JaWYgKGNoYW5uZWxfdHlwZSAhPSBOTDgwMjExX0NIQU5fTk9fSFQpIHsKLQkJaWYgKCFodF9jYXAtPmh0X3N1cHBvcnRlZCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICghKGh0X2NhcC0+Y2FwICYgSUVFRTgwMjExX0hUX0NBUF9TVVBfV0lEVEhfMjBfNDApIHx8Ci0JCSAgICBodF9jYXAtPmNhcCAmIElFRUU4MDIxMV9IVF9DQVBfNDBNSFpfSU5UT0xFUkFOVCkKLQkJCXJldHVybiAtRUlOVkFMOwotCX0KLQogCXJlc3VsdCA9IHJkZXYtPm9wcy0+c2V0X2NoYW5uZWwoJnJkZXYtPndpcGh5LCBjaGFuLCBjaGFubmVsX3R5cGUpOwogCWlmIChyZXN1bHQpCiAJCXJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvY29yZS5jIGIvbmV0L3dpcmVsZXNzL2NvcmUuYwppbmRleCA5MmI4MTI0Li43ZmRiOTQwIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvY29yZS5jCisrKyBiL25ldC93aXJlbGVzcy9jb3JlLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogVGhpcyBpcyB0aGUgbGludXggd2lyZWxlc3MgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UuCiAgKgotICogQ29weXJpZ2h0IDIwMDYtMjAwOQkJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA2LTIwMTAJCUpvaGFubmVzIEJlcmcgPGpvaGFubmVzQHNpcHNvbHV0aW9ucy5uZXQ+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2lmLmg+CkBAIC0zMSwxNSArMzEsMTAgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigid2lyZWxlc3MgY29uZmlndXJhdGlvbiBzdXBwb3J0Iik7CiAKLS8qIFJDVSBtaWdodCBiZSBhcHByb3ByaWF0ZSBoZXJlIHNpbmNlIHdlIHVzdWFsbHkKLSAqIG9ubHkgcmVhZCB0aGUgbGlzdCwgYW5kIHRoYXQgY2FuIGhhcHBlbiBxdWl0ZQotICogb2Z0ZW4gYmVjYXVzZSB3ZSBuZWVkIHRvIGRvIGl0IGZvciBlYWNoIGNvbW1hbmQgKi8KKy8qIFJDVS1wcm90ZWN0ZWQgKGFuZCBjZmc4MDIxMV9tdXRleCBmb3Igd3JpdGVycykgKi8KIExJU1RfSEVBRChjZmc4MDIxMV9yZGV2X2xpc3QpOwogaW50IGNmZzgwMjExX3JkZXZfbGlzdF9nZW5lcmF0aW9uOwogCi0vKgotICogVGhpcyBpcyB1c2VkIHRvIHByb3RlY3QgdGhlIGNmZzgwMjExX3JkZXZfbGlzdAotICovCiBERUZJTkVfTVVURVgoY2ZnODAyMTFfbXV0ZXgpOwogCiAvKiBmb3IgZGVidWdmcyAqLwpAQCAtNDAyLDYgKzM5Nyw3IEBACiAJcmRldi0+d2lwaHkucmV0cnlfbG9uZyA9IDQ7CiAJcmRldi0+d2lwaHkuZnJhZ190aHJlc2hvbGQgPSAodTMyKSAtMTsKIAlyZGV2LT53aXBoeS5ydHNfdGhyZXNob2xkID0gKHUzMikgLTE7CisJcmRldi0+d2lwaHkuY292ZXJhZ2VfY2xhc3MgPSAwOwogCiAJcmV0dXJuICZyZGV2LT53aXBoeTsKIH0KQEAgLTQxNyw2ICs0MTMsMTggQEAKIAlpbnQgaTsKIAl1MTYgaWZtb2RlcyA9IHdpcGh5LT5pbnRlcmZhY2VfbW9kZXM7CiAKKwlpZiAoV0FSTl9PTih3aXBoeS0+YWRkcmVzc2VzICYmICF3aXBoeS0+bl9hZGRyZXNzZXMpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChXQVJOX09OKHdpcGh5LT5hZGRyZXNzZXMgJiYKKwkJICAgICFpc196ZXJvX2V0aGVyX2FkZHIod2lwaHktPnBlcm1fYWRkcikgJiYKKwkJICAgIG1lbWNtcCh3aXBoeS0+cGVybV9hZGRyLCB3aXBoeS0+YWRkcmVzc2VzWzBdLmFkZHIsCisJCQkgICBFVEhfQUxFTikpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICh3aXBoeS0+YWRkcmVzc2VzKQorCQltZW1jcHkod2lwaHktPnBlcm1fYWRkciwgd2lwaHktPmFkZHJlc3Nlc1swXS5hZGRyLCBFVEhfQUxFTik7CisKIAkvKiBzYW5pdHkgY2hlY2sgaWZtb2RlcyAqLwogCVdBUk5fT04oIWlmbW9kZXMpOwogCWlmbW9kZXMgJj0gKCgxIDw8IF9fTkw4MDIxMV9JRlRZUEVfQUZURVJfTEFTVCkgLSAxKSAmIH4xOwpAQCAtNDc2LDcgKzQ4NCw3IEBACiAJLyogc2V0IHVwIHJlZ3VsYXRvcnkgaW5mbyAqLwogCXdpcGh5X3VwZGF0ZV9yZWd1bGF0b3J5KHdpcGh5LCBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRSk7CiAKLQlsaXN0X2FkZCgmcmRldi0+bGlzdCwgJmNmZzgwMjExX3JkZXZfbGlzdCk7CisJbGlzdF9hZGRfcmN1KCZyZGV2LT5saXN0LCAmY2ZnODAyMTFfcmRldl9saXN0KTsKIAljZmc4MDIxMV9yZGV2X2xpc3RfZ2VuZXJhdGlvbisrOwogCiAJbXV0ZXhfdW5sb2NrKCZjZmc4MDIxMV9tdXRleCk7CkBAIC01NTMsNyArNTYxLDggQEAKIAkgKiBpdCBpbXBvc3NpYmxlIHRvIGZpbmQgZnJvbSB1c2Vyc3BhY2UuCiAJICovCiAJZGVidWdmc19yZW1vdmVfcmVjdXJzaXZlKHJkZXYtPndpcGh5LmRlYnVnZnNkaXIpOwotCWxpc3RfZGVsKCZyZGV2LT5saXN0KTsKKwlsaXN0X2RlbF9yY3UoJnJkZXYtPmxpc3QpOworCXN5bmNocm9uaXplX3JjdSgpOwogCiAJLyoKIAkgKiBUcnkgdG8gZ3JhYiByZGV2LT5tdHguIElmIGEgY29tbWFuZCBpcyBzdGlsbCBpbiBwcm9ncmVzcywKQEAgLTY2OCw4ICs2NzcsMTEgQEAKIAkJSU5JVF9XT1JLKCZ3ZGV2LT5jbGVhbnVwX3dvcmssIHdkZXZfY2xlYW51cF93b3JrKTsKIAkJSU5JVF9MSVNUX0hFQUQoJndkZXYtPmV2ZW50X2xpc3QpOwogCQlzcGluX2xvY2tfaW5pdCgmd2Rldi0+ZXZlbnRfbG9jayk7CisJCUlOSVRfTElTVF9IRUFEKCZ3ZGV2LT5hY3Rpb25fcmVnaXN0cmF0aW9ucyk7CisJCXNwaW5fbG9ja19pbml0KCZ3ZGV2LT5hY3Rpb25fcmVnaXN0cmF0aW9uc19sb2NrKTsKKwogCQltdXRleF9sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7Ci0JCWxpc3RfYWRkKCZ3ZGV2LT5saXN0LCAmcmRldi0+bmV0ZGV2X2xpc3QpOworCQlsaXN0X2FkZF9yY3UoJndkZXYtPmxpc3QsICZyZGV2LT5uZXRkZXZfbGlzdCk7CiAJCXJkZXYtPmRldmxpc3RfZ2VuZXJhdGlvbisrOwogCQkvKiBjYW4gb25seSBjaGFuZ2UgbmV0bnMgd2l0aCB3aXBoeSAqLwogCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTkVUTlNfTE9DQUw7CkBAIC02ODYsMTkgKzY5OCwyMSBAQAogCQl3ZGV2LT53ZXh0LmRlZmF1bHRfa2V5ID0gLTE7CiAJCXdkZXYtPndleHQuZGVmYXVsdF9tZ210X2tleSA9IC0xOwogCQl3ZGV2LT53ZXh0LmNvbm5lY3QuYXV0aF90eXBlID0gTkw4MDIxMV9BVVRIVFlQRV9BVVRPTUFUSUM7CisjZW5kaWYKKwogCQlpZiAod2Rldi0+d2lwaHktPmZsYWdzICYgV0lQSFlfRkxBR19QU19PTl9CWV9ERUZBVUxUKQotCQkJd2Rldi0+d2V4dC5wcyA9IHRydWU7CisJCQl3ZGV2LT5wcyA9IHRydWU7CiAJCWVsc2UKLQkJCXdkZXYtPndleHQucHMgPSBmYWxzZTsKLQkJd2Rldi0+d2V4dC5wc190aW1lb3V0ID0gMTAwOworCQkJd2Rldi0+cHMgPSBmYWxzZTsKKwkJd2Rldi0+cHNfdGltZW91dCA9IDEwMDsKIAkJaWYgKHJkZXYtPm9wcy0+c2V0X3Bvd2VyX21nbXQpCiAJCQlpZiAocmRldi0+b3BzLT5zZXRfcG93ZXJfbWdtdCh3ZGV2LT53aXBoeSwgZGV2LAotCQkJCQkJICAgICAgd2Rldi0+d2V4dC5wcywKLQkJCQkJCSAgICAgIHdkZXYtPndleHQucHNfdGltZW91dCkpIHsKKwkJCQkJCSAgICAgIHdkZXYtPnBzLAorCQkJCQkJICAgICAgd2Rldi0+cHNfdGltZW91dCkpIHsKIAkJCQkvKiBhc3N1bWUgdGhpcyBtZWFucyBpdCdzIG9mZiAqLwotCQkJCXdkZXYtPndleHQucHMgPSBmYWxzZTsKKwkJCQl3ZGV2LT5wcyA9IGZhbHNlOwogCQkJfQotI2VuZGlmCisKIAkJaWYgKCFkZXYtPmV0aHRvb2xfb3BzKQogCQkJZGV2LT5ldGh0b29sX29wcyA9ICZjZmc4MDIxMV9ldGh0b29sX29wczsKIApAQCAtNzgxLDEzICs3OTUsMjIgQEAKIAkJICovCiAJCWlmICghbGlzdF9lbXB0eSgmd2Rldi0+bGlzdCkpIHsKIAkJCXN5c2ZzX3JlbW92ZV9saW5rKCZkZXYtPmRldi5rb2JqLCAicGh5ODAyMTEiKTsKLQkJCWxpc3RfZGVsX2luaXQoJndkZXYtPmxpc3QpOworCQkJbGlzdF9kZWxfcmN1KCZ3ZGV2LT5saXN0KTsKIAkJCXJkZXYtPmRldmxpc3RfZ2VuZXJhdGlvbisrOworCQkJY2ZnODAyMTFfbWxtZV9wdXJnZV9hY3Rpb25zKHdkZXYpOwogI2lmZGVmIENPTkZJR19DRkc4MDIxMV9XRVhUCiAJCQlrZnJlZSh3ZGV2LT53ZXh0LmtleXMpOwogI2VuZGlmCiAJCX0KIAkJbXV0ZXhfdW5sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7CisJCS8qCisJCSAqIHN5bmNocm9uaXNlIChzbyB0aGF0IHdlIHdvbid0IGZpbmQgdGhpcyBuZXRkZXYKKwkJICogZnJvbSBvdGhlciBjb2RlIGFueSBtb3JlKSBhbmQgdGhlbiBjbGVhciB0aGUgbGlzdAorCQkgKiBoZWFkIHNvIHRoYXQgdGhlIGFib3ZlIGNvZGUgY2FuIHNhZmVseSBjaGVjayBmb3IKKwkJICogIWxpc3RfZW1wdHkoKSB0byBhdm9pZCBkb3VibGUtY2xlYW51cC4KKwkJICovCisJCXN5bmNocm9uaXplX3JjdSgpOworCQlJTklUX0xJU1RfSEVBRCgmd2Rldi0+bGlzdCk7CiAJCWJyZWFrOwogCWNhc2UgTkVUREVWX1BSRV9VUDoKIAkJaWYgKCEod2Rldi0+d2lwaHktPmludGVyZmFjZV9tb2RlcyAmIEJJVCh3ZGV2LT5pZnR5cGUpKSkKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9jb3JlLmggYi9uZXQvd2lyZWxlc3MvY29yZS5oCmluZGV4IDRlZjNlZmMuLmQ1MmRhOTEgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9jb3JlLmgKKysrIGIvbmV0L3dpcmVsZXNzL2NvcmUuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBXaXJlbGVzcyBjb25maWd1cmF0aW9uIGludGVyZmFjZSBpbnRlcm5hbHMuCiAgKgotICogQ29weXJpZ2h0IDIwMDYtMjAwOQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICogQ29weXJpZ2h0IDIwMDYtMjAxMAlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgogICovCiAjaWZuZGVmIF9fTkVUX1dJUkVMRVNTX0NPUkVfSAogI2RlZmluZSBfX05FVF9XSVJFTEVTU19DT1JFX0gKQEAgLTQ4LDYgKzQ4LDcgQEAKIAogCS8qIGFzc29jaWF0ZSBuZXRkZXYgbGlzdCAqLwogCXN0cnVjdCBtdXRleCBkZXZsaXN0X210eDsKKwkvKiBwcm90ZWN0ZWQgYnkgZGV2bGlzdF9tdHggb3IgUkNVICovCiAJc3RydWN0IGxpc3RfaGVhZCBuZXRkZXZfbGlzdDsKIAlpbnQgZGV2bGlzdF9nZW5lcmF0aW9uOwogCWludCBvcGVuY291bnQ7IC8qIGFsc28gcHJvdGVjdGVkIGJ5IGRldmxpc3RfbXR4ICovCkBAIC0xMTEsNyArMTEyLDggQEAKIAl1bnNpZ25lZCBsb25nIHRzOwogCXN0cnVjdCBrcmVmIHJlZjsKIAlhdG9taWNfdCBob2xkOwotCWJvb2wgaWVzX2FsbG9jYXRlZDsKKwlib29sIGJlYWNvbl9pZXNfYWxsb2NhdGVkOworCWJvb2wgcHJvYmVyZXNwX2llc19hbGxvY2F0ZWQ7CiAKIAkvKiBtdXN0IGJlIGxhc3QgYmVjYXVzZSBvZiBwcml2IG1lbWJlciAqLwogCXN0cnVjdCBjZmc4MDIxMV9ic3MgcHViOwpAQCAtMzI3LDYgKzMyOSwxNSBAQAogCQkJICAgICAgIGNvbnN0IHU4ICpyZXNwX2llLCBzaXplX3QgcmVzcF9pZV9sZW4sCiAJCQkgICAgICAgdTE2IHN0YXR1cywgYm9vbCB3ZXh0ZXYsCiAJCQkgICAgICAgc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzKTsKK2ludCBjZmc4MDIxMV9tbG1lX3JlZ2lzdGVyX2FjdGlvbihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCB1MzIgc25kX3BpZCwKKwkJCQkgIGNvbnN0IHU4ICptYXRjaF9kYXRhLCBpbnQgbWF0Y2hfbGVuKTsKK3ZvaWQgY2ZnODAyMTFfbWxtZV91bnJlZ2lzdGVyX2FjdGlvbnMoc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiwgdTMyIG5scGlkKTsKK3ZvaWQgY2ZnODAyMTFfbWxtZV9wdXJnZV9hY3Rpb25zKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpOworaW50IGNmZzgwMjExX21sbWVfYWN0aW9uKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAorCQkJIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCSBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCSBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLCB1NjQgKmNvb2tpZSk7CiAKIC8qIFNNRSAqLwogaW50IF9fY2ZnODAyMTFfY29ubmVjdChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCkBAIC0zNzQsMTAgKzM4NSwxNSBAQAogc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICoKIHJkZXZfZml4ZWRfY2hhbm5lbChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCiAJCSAgIHN0cnVjdCB3aXJlbGVzc19kZXYgKmZvcl93ZGV2KTsKK3N0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqCityZGV2X2ZyZXFfdG9fY2hhbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCSAgaW50IGZyZXEsIGVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlKTsKIGludCByZGV2X3NldF9mcmVxKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKIAkJICBzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICpmb3Jfd2RldiwKIAkJICBpbnQgZnJlcSwgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUpOwogCit1MTYgY2ZnODAyMTFfY2FsY3VsYXRlX2JpdHJhdGUoc3RydWN0IHJhdGVfaW5mbyAqcmF0ZSk7CisKICNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfREVWRUxPUEVSX1dBUk5JTkdTCiAjZGVmaW5lIENGRzgwMjExX0RFVl9XQVJOX09OKGNvbmQpCVdBUk5fT04oY29uZCkKICNlbHNlCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvZGIudHh0IGIvbmV0L3dpcmVsZXNzL2RiLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmZjM2EwCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3dpcmVsZXNzL2RiLnR4dApAQCAtMCwwICsxLDE3IEBACisjCisjIFRoaXMgZmlsZSBpcyBhIHBsYWNlaG9sZGVyIHRvIHByZXZlbnQgYWNjaWRlbnRhbCBidWlsZCBicmVha2FnZSBpZiBzb21lb25lCisjIGVuYWJsZXMgQ09ORklHX0NGRzgwMjExX0lOVEVSTkFMX1JFR0RCLiAgQWxtb3N0IG5vIG9uZSBhY3R1YWxseSBuZWVkcyB0bworIyBlbmFibGUgdGhhdCBidWlsZCBvcHRpb24uCisjCisjIFlvdSBzaG91bGQgYmUgdXNpbmcgQ1JEQSBpbnN0ZWFkLiAgSXQgaXMgZXZlbiBiZXR0ZXIgaWYgeW91IHVzZSB0aGUgQ1JEQQorIyBwYWNrYWdlIHByb3ZpZGVkIGJ5IHlvdXIgZGlzdHJpYnV0aW9uLCBzaW5jZSB0aGV5IHdpbGwgcHJvYmFibHkga2VlcCBpdAorIyB1cC10by1kYXRlIG9uIHlvdXIgYmVoYWxmLgorIworIyBJZiB5b3UgX3JlYWxseV8gaW50ZW5kIHRvIHVzZSBDT05GSUdfQ0ZHODAyMTFfSU5URVJOQUxfUkVHREIgdGhlbiB5b3Ugd2lsbAorIyBuZWVkIHRvIHJlcGxhY2UgdGhpcyBmaWxlIHdpdGggb25lIGNvbnRhaW5pbmcgYXBwcm9wcmlhdGVseSBmb3JtYXR0ZWQKKyMgcmVndWxhdG9yeSBydWxlcyB0aGF0IGNvdmVyIHRoZSByZWd1bGF0b3J5IGRvbWFpbnMgeW91IHdpbGwgYmUgdXNpbmcuICBZb3VyCisjIGJlc3Qgb3B0aW9uIGlzIHRvIGV4dHJhY3QgdGhlIGRiLnR4dCBmaWxlIGZyb20gdGhlIHdpcmVsZXNzLXJlZ2RiIGdpdAorIyByZXBvc2l0b3J5OgorIworIyAgIGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9saW52aWxsZS93aXJlbGVzcy1yZWdkYi5naXQKKyMKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9nZW5yZWdkYi5hd2sgYi9uZXQvd2lyZWxlc3MvZ2VucmVnZGIuYXdrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjYzllNjkKLS0tIC9kZXYvbnVsbAorKysgYi9uZXQvd2lyZWxlc3MvZ2VucmVnZGIuYXdrCkBAIC0wLDAgKzEsMTE4IEBACisjIS91c3IvYmluL2F3ayAtZgorIworIyBnZW5yZWdkYi5hd2sgLS0gZ2VuZXJhdGUgcmVnZGIuYyBmcm9tIGRiLnR4dAorIworIyBBY3R1YWxseSwgaXQgcmVhZHMgZnJvbSBzdGRpbiAocHJlc3VtZWQgdG8gYmUgZGIudHh0KSBhbmQgd3JpdGVzCisjIHRvIHN0ZG91dCAocHJlc3VtZWQgdG8gYmUgcmVnZGIuYyksIGJ1dCBjbG9zZSBlbm91Z2guLi4KKyMKKyMgQ29weXJpZ2h0IDIwMDkgSm9obiBXLiBMaW52aWxsZSA8bGludmlsbGVAdHV4ZHJpdmVyLmNvbT4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisjCisKK0JFR0lOIHsKKwlhY3RpdmUgPSAwCisJcnVsZXMgPSAwOworCXByaW50ICIvKiIKKwlwcmludCAiICogRE8gTk9UIEVESVQgLS0gZmlsZSBnZW5lcmF0ZWQgZnJvbSBkYXRhIGluIGRiLnR4dCIKKwlwcmludCAiICovIgorCXByaW50ICIiCisJcHJpbnQgIiNpbmNsdWRlIDxsaW51eC9ubDgwMjExLmg+IgorCXByaW50ICIjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+IgorCXByaW50ICIiCisJcmVnZGIgPSAiY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ19yZWdkYltdID0ge1xuIgorfQorCisvXlsgXHRdKiMvIHsKKwkjIElnbm9yZQorfQorCishYWN0aXZlICYmIC9eWyBcdF0qJC8geworCSMgSWdub3JlCit9CisKKyFhY3RpdmUgJiYgL2NvdW50cnkvIHsKKwljb3VudHJ5PSQyCisJc3ViKC86LywgIiIsIGNvdW50cnkpCisJcHJpbnRmICJzdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gcmVnZG9tXyVzID0ge1xuIiwgY291bnRyeQorCXByaW50ZiAiXHQuYWxwaGEyID0gXCIlc1wiLFxuIiwgY291bnRyeQorCXByaW50ZiAiXHQucmVnX3J1bGVzID0ge1xuIgorCWFjdGl2ZSA9IDEKKwlyZWdkYiA9IHJlZ2RiICJcdCZyZWdkb21fIiBjb3VudHJ5ICIsXG4iCit9CisKK2FjdGl2ZSAmJiAvXlsgXHRdKlwoLyB7CisJc3RhcnQgPSAkMQorCXN1YigvXCgvLCAiIiwgc3RhcnQpCisJZW5kID0gJDMKKwlidyA9ICQ1CisJc3ViKC9cKSwvLCAiIiwgYncpCisJZ2FpbiA9ICQ2CisJc3ViKC9cKC8sICIiLCBnYWluKQorCXN1YigvLC8sICIiLCBnYWluKQorCXBvd2VyID0gJDcKKwlzdWIoL1wpLywgIiIsIHBvd2VyKQorCXN1YigvLC8sICIiLCBwb3dlcikKKwkjIHBvd2VyIG1pZ2h0IGJlIGluIG1XLi4uCisJdW5pdHMgPSAkOAorCXN1YigvXCkvLCAiIiwgdW5pdHMpCisJc3ViKC8sLywgIiIsIHVuaXRzKQorCWlmICh1bml0cyA9PSAibVciKSB7CisJCWlmIChwb3dlciA9PSAxMDApIHsKKwkJCXBvd2VyID0gMjAKKwkJfSBlbHNlIGlmIChwb3dlciA9PSAyMDApIHsKKwkJCXBvd2VyID0gMjMKKwkJfSBlbHNlIGlmIChwb3dlciA9PSA1MDApIHsKKwkJCXBvd2VyID0gMjcKKwkJfSBlbHNlIGlmIChwb3dlciA9PSAxMDAwKSB7CisJCQlwb3dlciA9IDMwCisJCX0gZWxzZSB7CisJCQlwcmludCAiVW5rbm93biBwb3dlciB2YWx1ZSBpbiBkYXRhYmFzZSEiCisJCX0KKwl9CisJZmxhZ3N0ciA9ICIiCisJZm9yIChpPTg7IGk8PU5GOyBpKyspCisJCWZsYWdzdHIgPSBmbGFnc3RyICRpCisJc3BsaXQoZmxhZ3N0ciwgZmxhZ2FycmF5LCAiLCIpCisJZmxhZ3MgPSAiIgorCWZvciAoYXJnIGluIGZsYWdhcnJheSkgeworCQlpZiAoZmxhZ2FycmF5W2FyZ10gPT0gIk5PLU9GRE0iKSB7CisJCQlmbGFncyA9IGZsYWdzICJcblx0XHRcdE5MODAyMTFfUlJGX05PX09GRE0gfCAiCisJCX0gZWxzZSBpZiAoZmxhZ2FycmF5W2FyZ10gPT0gIk5PLUNDSyIpIHsKKwkJCWZsYWdzID0gZmxhZ3MgIlxuXHRcdFx0Tkw4MDIxMV9SUkZfTk9fQ0NLIHwgIgorCQl9IGVsc2UgaWYgKGZsYWdhcnJheVthcmddID09ICJOTy1JTkRPT1IiKSB7CisJCQlmbGFncyA9IGZsYWdzICJcblx0XHRcdE5MODAyMTFfUlJGX05PX0lORE9PUiB8ICIKKwkJfSBlbHNlIGlmIChmbGFnYXJyYXlbYXJnXSA9PSAiTk8tT1VURE9PUiIpIHsKKwkJCWZsYWdzID0gZmxhZ3MgIlxuXHRcdFx0Tkw4MDIxMV9SUkZfTk9fT1VURE9PUiB8ICIKKwkJfSBlbHNlIGlmIChmbGFnYXJyYXlbYXJnXSA9PSAiREZTIikgeworCQkJZmxhZ3MgPSBmbGFncyAiXG5cdFx0XHROTDgwMjExX1JSRl9ERlMgfCAiCisJCX0gZWxzZSBpZiAoZmxhZ2FycmF5W2FyZ10gPT0gIlBUUC1PTkxZIikgeworCQkJZmxhZ3MgPSBmbGFncyAiXG5cdFx0XHROTDgwMjExX1JSRl9QVFBfT05MWSB8ICIKKwkJfSBlbHNlIGlmIChmbGFnYXJyYXlbYXJnXSA9PSAiUFRNUC1PTkxZIikgeworCQkJZmxhZ3MgPSBmbGFncyAiXG5cdFx0XHROTDgwMjExX1JSRl9QVE1QX09OTFkgfCAiCisJCX0gZWxzZSBpZiAoZmxhZ2FycmF5W2FyZ10gPT0gIlBBU1NJVkUtU0NBTiIpIHsKKwkJCWZsYWdzID0gZmxhZ3MgIlxuXHRcdFx0Tkw4MDIxMV9SUkZfUEFTU0lWRV9TQ0FOIHwgIgorCQl9IGVsc2UgaWYgKGZsYWdhcnJheVthcmddID09ICJOTy1JQlNTIikgeworCQkJZmxhZ3MgPSBmbGFncyAiXG5cdFx0XHROTDgwMjExX1JSRl9OT19JQlNTIHwgIgorCQl9CisJfQorCWZsYWdzID0gZmxhZ3MgIjAiCisJcHJpbnRmICJcdFx0UkVHX1JVTEUoJWQsICVkLCAlZCwgJWQsICVkLCAlcyksXG4iLCBzdGFydCwgZW5kLCBidywgZ2FpbiwgcG93ZXIsIGZsYWdzCisJcnVsZXMrKworfQorCithY3RpdmUgJiYgL15bIFx0XSokLyB7CisJYWN0aXZlID0gMAorCXByaW50ZiAiXHR9LFxuIgorCXByaW50ZiAiXHQubl9yZWdfcnVsZXMgPSAlZFxuIiwgcnVsZXMKKwlwcmludGYgIn07XG5cbiIKKwlydWxlcyA9IDA7Cit9CisKK0VORCB7CisJcHJpbnQgcmVnZGIgIn07IgorCXByaW50ICIiCisJcHJpbnQgImludCByZWdfcmVnZGJfc2l6ZSA9IEFSUkFZX1NJWkUocmVnX3JlZ2RiKTsiCit9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfY2NtcC5jIGIvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X2NjbXAuYwppbmRleCAyMzAxZGMxLi5iN2ZhMzFkIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfY2NtcC5jCisrKyBiL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF9jY21wLmMKQEAgLTIzNyw3ICsyMzcsNiBAQAogCQlyZXR1cm4gLTE7CiAKIAlwb3MgPSBza2ItPmRhdGEgKyBoZHJfbGVuICsgQ0NNUF9IRFJfTEVOOwotCW1pYyA9IHNrYl9wdXQoc2tiLCBDQ01QX01JQ19MRU4pOwogCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKXNrYi0+ZGF0YTsKIAljY21wX2luaXRfYmxvY2tzKGtleS0+dGZtLCBoZHIsIGtleS0+dHhfcG4sIGRhdGFfbGVuLCBiMCwgYiwgczApOwogCkBAIC0yNTcsNiArMjU2LDcgQEAKIAkJcG9zICs9IGxlbjsKIAl9CiAKKwltaWMgPSBza2JfcHV0KHNrYiwgQ0NNUF9NSUNfTEVOKTsKIAlmb3IgKGkgPSAwOyBpIDwgQ0NNUF9NSUNfTEVOOyBpKyspCiAJCW1pY1tpXSA9IGJbaV0gXiBzMFtpXTsKIApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X3RraXAuYyBiL25ldC93aXJlbGVzcy9saWI4MDIxMV9jcnlwdF90a2lwLmMKaW5kZXggYzM2Mjg3My4uOGNiZGIzMiAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL2xpYjgwMjExX2NyeXB0X3RraXAuYworKysgYi9uZXQvd2lyZWxlc3MvbGliODAyMTFfY3J5cHRfdGtpcC5jCkBAIC0zNiw2ICszNiw4IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oImxpYjgwMjExIGNyeXB0OiBUS0lQIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKyNkZWZpbmUgVEtJUF9IRFJfTEVOIDgKKwogc3RydWN0IGxpYjgwMjExX3RraXBfZGF0YSB7CiAjZGVmaW5lIFRLSVBfS0VZX0xFTiAzMgogCXU4IGtleVtUS0lQX0tFWV9MRU5dOwpAQCAtMzE0LDEzICszMTYsMTIgQEAKIAkJCSAgICAgIHU4ICogcmM0a2V5LCBpbnQga2V5bGVuLCB2b2lkICpwcml2KQogewogCXN0cnVjdCBsaWI4MDIxMV90a2lwX2RhdGEgKnRrZXkgPSBwcml2OwotCWludCBsZW47CiAJdTggKnBvczsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciAqaGRyOwogCiAJaGRyID0gKHN0cnVjdCBpZWVlODAyMTFfaGRyICopc2tiLT5kYXRhOwogCi0JaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgOCB8fCBza2ItPmxlbiA8IGhkcl9sZW4pCisJaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgVEtJUF9IRFJfTEVOIHx8IHNrYi0+bGVuIDwgaGRyX2xlbikKIAkJcmV0dXJuIC0xOwogCiAJaWYgKHJjNGtleSA9PSBOVUxMIHx8IGtleWxlbiA8IDE2KQpAQCAtMzMzLDkgKzMzNCw4IEBACiAJfQogCXRraXBfbWl4aW5nX3BoYXNlMihyYzRrZXksIHRrZXktPmtleSwgdGtleS0+dHhfdHRhaywgdGtleS0+dHhfaXYxNik7CiAKLQlsZW4gPSBza2ItPmxlbiAtIGhkcl9sZW47Ci0JcG9zID0gc2tiX3B1c2goc2tiLCA4KTsKLQltZW1tb3ZlKHBvcywgcG9zICsgOCwgaGRyX2xlbik7CisJcG9zID0gc2tiX3B1c2goc2tiLCBUS0lQX0hEUl9MRU4pOworCW1lbW1vdmUocG9zLCBwb3MgKyBUS0lQX0hEUl9MRU4sIGhkcl9sZW4pOwogCXBvcyArPSBoZHJfbGVuOwogCiAJKnBvcysrID0gKnJjNGtleTsKQEAgLTM1Myw3ICszNTMsNyBAQAogCQl0a2V5LT50eF9pdjMyKys7CiAJfQogCi0JcmV0dXJuIDg7CisJcmV0dXJuIFRLSVBfSERSX0xFTjsKIH0KIAogc3RhdGljIGludCBsaWI4MDIxMV90a2lwX2VuY3J5cHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGhkcl9sZW4sIHZvaWQgKnByaXYpCkBAIC0zODQsOSArMzg0LDggQEAKIAlpZiAoKGxpYjgwMjExX3RraXBfaGRyKHNrYiwgaGRyX2xlbiwgcmM0a2V5LCAxNiwgcHJpdikpIDwgMCkKIAkJcmV0dXJuIC0xOwogCi0JaWN2ID0gc2tiX3B1dChza2IsIDQpOwotCiAJY3JjID0gfmNyYzMyX2xlKH4wLCBwb3MsIGxlbik7CisJaWN2ID0gc2tiX3B1dChza2IsIDQpOwogCWljdlswXSA9IGNyYzsKIAlpY3ZbMV0gPSBjcmMgPj4gODsKIAlpY3ZbMl0gPSBjcmMgPj4gMTY7CkBAIC00MzQsNyArNDMzLDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCWlmIChza2ItPmxlbiA8IGhkcl9sZW4gKyA4ICsgNCkKKwlpZiAoc2tiLT5sZW4gPCBoZHJfbGVuICsgVEtJUF9IRFJfTEVOICsgNCkKIAkJcmV0dXJuIC0xOwogCiAJcG9zID0gc2tiLT5kYXRhICsgaGRyX2xlbjsKQEAgLTQ2Miw3ICs0NjEsNyBAQAogCX0KIAlpdjE2ID0gKHBvc1swXSA8PCA4KSB8IHBvc1syXTsKIAlpdjMyID0gcG9zWzRdIHwgKHBvc1s1XSA8PCA4KSB8IChwb3NbNl0gPDwgMTYpIHwgKHBvc1s3XSA8PCAyNCk7Ci0JcG9zICs9IDg7CisJcG9zICs9IFRLSVBfSERSX0xFTjsKIAogCWlmICh0a2lwX3JlcGxheV9jaGVjayhpdjMyLCBpdjE2LCB0a2V5LT5yeF9pdjMyLCB0a2V5LT5yeF9pdjE2KSkgewogI2lmZGVmIENPTkZJR19MSUI4MDIxMV9ERUJVRwpAQCAtNTIzLDggKzUyMiw4IEBACiAJdGtleS0+cnhfaXYxNl9uZXcgPSBpdjE2OwogCiAJLyogUmVtb3ZlIElWIGFuZCBJQ1YgKi8KLQltZW1tb3ZlKHNrYi0+ZGF0YSArIDgsIHNrYi0+ZGF0YSwgaGRyX2xlbik7Ci0Jc2tiX3B1bGwoc2tiLCA4KTsKKwltZW1tb3ZlKHNrYi0+ZGF0YSArIFRLSVBfSERSX0xFTiwgc2tiLT5kYXRhLCBoZHJfbGVuKTsKKwlza2JfcHVsbChza2IsIFRLSVBfSERSX0xFTik7CiAJc2tiX3RyaW0oc2tiLCBza2ItPmxlbiAtIDQpOwogCiAJcmV0dXJuIGtleWlkeDsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9tbG1lLmMgYi9uZXQvd2lyZWxlc3MvbWxtZS5jCmluZGV4IDgyZTYwMDIuLjYyYmM4ODUgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9tbG1lLmMKKysrIGIvbmV0L3dpcmVsZXNzL21sbWUuYwpAQCAtMTQ4LDIyICsxNDgsMjMgQEAKIAlzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQgPSAoc3RydWN0IGllZWU4MDIxMV9tZ210ICopYnVmOwogCWNvbnN0IHU4ICpic3NpZCA9IG1nbXQtPmJzc2lkOwogCWludCBpOworCWJvb2wgZm91bmQgPSBmYWxzZTsKIAogCUFTU0VSVF9XREVWX0xPQ0sod2Rldik7CiAKLQlubDgwMjExX3NlbmRfZGVhdXRoKHJkZXYsIGRldiwgYnVmLCBsZW4sIEdGUF9LRVJORUwpOwotCiAJaWYgKHdkZXYtPmN1cnJlbnRfYnNzICYmCiAJICAgIG1lbWNtcCh3ZGV2LT5jdXJyZW50X2Jzcy0+cHViLmJzc2lkLCBic3NpZCwgRVRIX0FMRU4pID09IDApIHsKIAkJY2ZnODAyMTFfdW5ob2xkX2Jzcyh3ZGV2LT5jdXJyZW50X2Jzcyk7CiAJCWNmZzgwMjExX3B1dF9ic3MoJndkZXYtPmN1cnJlbnRfYnNzLT5wdWIpOwogCQl3ZGV2LT5jdXJyZW50X2JzcyA9IE5VTEw7CisJCWZvdW5kID0gdHJ1ZTsKIAl9IGVsc2UgZm9yIChpID0gMDsgaSA8IE1BWF9BVVRIX0JTU0VTOyBpKyspIHsKIAkJaWYgKHdkZXYtPmF1dGhfYnNzZXNbaV0gJiYKIAkJICAgIG1lbWNtcCh3ZGV2LT5hdXRoX2Jzc2VzW2ldLT5wdWIuYnNzaWQsIGJzc2lkLCBFVEhfQUxFTikgPT0gMCkgewogCQkJY2ZnODAyMTFfdW5ob2xkX2Jzcyh3ZGV2LT5hdXRoX2Jzc2VzW2ldKTsKIAkJCWNmZzgwMjExX3B1dF9ic3MoJndkZXYtPmF1dGhfYnNzZXNbaV0tPnB1Yik7CiAJCQl3ZGV2LT5hdXRoX2Jzc2VzW2ldID0gTlVMTDsKKwkJCWZvdW5kID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQl9CiAJCWlmICh3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldICYmCkBAIC0xNzEsMTAgKzE3MiwxNiBAQAogCQkJY2ZnODAyMTFfdW5ob2xkX2Jzcyh3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldKTsKIAkJCWNmZzgwMjExX3B1dF9ic3MoJndkZXYtPmF1dGh0cnlfYnNzZXNbaV0tPnB1Yik7CiAJCQl3ZGV2LT5hdXRodHJ5X2Jzc2VzW2ldID0gTlVMTDsKKwkJCWZvdW5kID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQl9CiAJfQogCisJaWYgKCFmb3VuZCkKKwkJcmV0dXJuOworCisJbmw4MDIxMV9zZW5kX2RlYXV0aChyZGV2LCBkZXYsIGJ1ZiwgbGVuLCBHRlBfS0VSTkVMKTsKKwogCWlmICh3ZGV2LT5zbWVfc3RhdGUgPT0gQ0ZHODAyMTFfU01FX0NPTk5FQ1RFRCkgewogCQl1MTYgcmVhc29uX2NvZGU7CiAJCWJvb2wgZnJvbV9hcDsKQEAgLTY4NCwzICs2OTEsMjA2IEBACiAJCX0KIAl9CiB9CisKK3ZvaWQgY2ZnODAyMTFfcmVhZHlfb25fY2hhbm5lbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1NjQgY29va2llLAorCQkJICAgICAgIHN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCSAgICAgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgZHVyYXRpb24sIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gZGV2LT5pZWVlODAyMTFfcHRyLT53aXBoeTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCisJbmw4MDIxMV9zZW5kX3JlbWFpbl9vbl9jaGFubmVsKHJkZXYsIGRldiwgY29va2llLCBjaGFuLCBjaGFubmVsX3R5cGUsCisJCQkJICAgICAgIGR1cmF0aW9uLCBnZnApOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9yZWFkeV9vbl9jaGFubmVsKTsKKwordm9pZCBjZmc4MDIxMV9yZW1haW5fb25fY2hhbm5lbF9leHBpcmVkKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCisJCQkJCXU2NCBjb29raWUsCisJCQkJCXN0cnVjdCBpZWVlODAyMTFfY2hhbm5lbCAqY2hhbiwKKwkJCQkJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUsCisJCQkJCWdmcF90IGdmcCkKK3sKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gZGV2LT5pZWVlODAyMTFfcHRyLT53aXBoeTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCisJbmw4MDIxMV9zZW5kX3JlbWFpbl9vbl9jaGFubmVsX2NhbmNlbChyZGV2LCBkZXYsIGNvb2tpZSwgY2hhbiwKKwkJCQkJICAgICAgY2hhbm5lbF90eXBlLCBnZnApOworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9yZW1haW5fb25fY2hhbm5lbF9leHBpcmVkKTsKKwordm9pZCBjZmc4MDIxMV9uZXdfc3RhKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICptYWNfYWRkciwKKwkJICAgICAgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8sIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gZGV2LT5pZWVlODAyMTFfcHRyLT53aXBoeTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYgPSB3aXBoeV90b19kZXYod2lwaHkpOworCisJbmw4MDIxMV9zZW5kX3N0YV9ldmVudChyZGV2LCBkZXYsIG1hY19hZGRyLCBzaW5mbywgZ2ZwKTsKK30KK0VYUE9SVF9TWU1CT0woY2ZnODAyMTFfbmV3X3N0YSk7CisKK3N0cnVjdCBjZmc4MDIxMV9hY3Rpb25fcmVnaXN0cmF0aW9uIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisKKwl1MzIgbmxwaWQ7CisKKwlpbnQgbWF0Y2hfbGVuOworCisJdTggbWF0Y2hbXTsKK307CisKK2ludCBjZmc4MDIxMV9tbG1lX3JlZ2lzdGVyX2FjdGlvbihzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2LCB1MzIgc25kX3BpZCwKKwkJCQkgIGNvbnN0IHU4ICptYXRjaF9kYXRhLCBpbnQgbWF0Y2hfbGVuKQoreworCXN0cnVjdCBjZmc4MDIxMV9hY3Rpb25fcmVnaXN0cmF0aW9uICpyZWcsICpucmVnOworCWludCBlcnIgPSAwOworCisJbnJlZyA9IGt6YWxsb2Moc2l6ZW9mKCpyZWcpICsgbWF0Y2hfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5yZWcpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2JoKCZ3ZGV2LT5hY3Rpb25fcmVnaXN0cmF0aW9uc19sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVnLCAmd2Rldi0+YWN0aW9uX3JlZ2lzdHJhdGlvbnMsIGxpc3QpIHsKKwkJaW50IG1sZW4gPSBtaW4obWF0Y2hfbGVuLCByZWctPm1hdGNoX2xlbik7CisKKwkJaWYgKG1lbWNtcChyZWctPm1hdGNoLCBtYXRjaF9kYXRhLCBtbGVuKSA9PSAwKSB7CisJCQllcnIgPSAtRUFMUkVBRFk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmIChlcnIpIHsKKwkJa2ZyZWUobnJlZyk7CisJCWdvdG8gb3V0OworCX0KKworCW1lbWNweShucmVnLT5tYXRjaCwgbWF0Y2hfZGF0YSwgbWF0Y2hfbGVuKTsKKwlucmVnLT5tYXRjaF9sZW4gPSBtYXRjaF9sZW47CisJbnJlZy0+bmxwaWQgPSBzbmRfcGlkOworCWxpc3RfYWRkKCZucmVnLT5saXN0LCAmd2Rldi0+YWN0aW9uX3JlZ2lzdHJhdGlvbnMpOworCisgb3V0OgorCXNwaW5fdW5sb2NrX2JoKCZ3ZGV2LT5hY3Rpb25fcmVnaXN0cmF0aW9uc19sb2NrKTsKKwlyZXR1cm4gZXJyOworfQorCit2b2lkIGNmZzgwMjExX21sbWVfdW5yZWdpc3Rlcl9hY3Rpb25zKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYsIHUzMiBubHBpZCkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfYWN0aW9uX3JlZ2lzdHJhdGlvbiAqcmVnLCAqdG1wOworCisJc3Bpbl9sb2NrX2JoKCZ3ZGV2LT5hY3Rpb25fcmVnaXN0cmF0aW9uc19sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShyZWcsIHRtcCwgJndkZXYtPmFjdGlvbl9yZWdpc3RyYXRpb25zLCBsaXN0KSB7CisJCWlmIChyZWctPm5scGlkID09IG5scGlkKSB7CisJCQlsaXN0X2RlbCgmcmVnLT5saXN0KTsKKwkJCWtmcmVlKHJlZyk7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19iaCgmd2Rldi0+YWN0aW9uX3JlZ2lzdHJhdGlvbnNfbG9jayk7Cit9CisKK3ZvaWQgY2ZnODAyMTFfbWxtZV9wdXJnZV9hY3Rpb25zKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpCit7CisJc3RydWN0IGNmZzgwMjExX2FjdGlvbl9yZWdpc3RyYXRpb24gKnJlZywgKnRtcDsKKworCXNwaW5fbG9ja19iaCgmd2Rldi0+YWN0aW9uX3JlZ2lzdHJhdGlvbnNfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVnLCB0bXAsICZ3ZGV2LT5hY3Rpb25fcmVnaXN0cmF0aW9ucywgbGlzdCkgeworCQlsaXN0X2RlbCgmcmVnLT5saXN0KTsKKwkJa2ZyZWUocmVnKTsKKwl9CisKKwlzcGluX3VubG9ja19iaCgmd2Rldi0+YWN0aW9uX3JlZ2lzdHJhdGlvbnNfbG9jayk7Cit9CisKK2ludCBjZmc4MDIxMV9tbG1lX2FjdGlvbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJCQkgZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUsCisJCQkgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbiwgdTY0ICpjb29raWUpCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwljb25zdCBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKm1nbXQ7CisKKwlpZiAocmRldi0+b3BzLT5hY3Rpb24gPT0gTlVMTCkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWlmIChsZW4gPCAyNCArIDEpCisJCXJldHVybiAtRUlOVkFMOworCisJbWdtdCA9IChjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX21nbXQgKikgYnVmOworCWlmICghaWVlZTgwMjExX2lzX2FjdGlvbihtZ210LT5mcmFtZV9jb250cm9sKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKG1nbXQtPnUuYWN0aW9uLmNhdGVnb3J5ICE9IFdMQU5fQ0FURUdPUllfUFVCTElDKSB7CisJCS8qIFZlcmlmeSB0aGF0IHdlIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGRlc3RpbmF0aW9uIEFQICovCisJCWlmICghd2Rldi0+Y3VycmVudF9ic3MgfHwKKwkJICAgIG1lbWNtcCh3ZGV2LT5jdXJyZW50X2Jzcy0+cHViLmJzc2lkLCBtZ210LT5ic3NpZCwKKwkJCSAgIEVUSF9BTEVOKSAhPSAwIHx8CisJCSAgICBtZW1jbXAod2Rldi0+Y3VycmVudF9ic3MtPnB1Yi5ic3NpZCwgbWdtdC0+ZGEsCisJCQkgICBFVEhfQUxFTikgIT0gMCkKKwkJCXJldHVybiAtRU5PVENPTk47CisJfQorCisJaWYgKG1lbWNtcChtZ210LT5zYSwgZGV2LT5kZXZfYWRkciwgRVRIX0FMRU4pICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJLyogVHJhbnNtaXQgdGhlIEFjdGlvbiBmcmFtZSBhcyByZXF1ZXN0ZWQgYnkgdXNlciBzcGFjZSAqLworCXJldHVybiByZGV2LT5vcHMtPmFjdGlvbigmcmRldi0+d2lwaHksIGRldiwgY2hhbiwgY2hhbm5lbF90eXBlLAorCQkJCSBidWYsIGxlbiwgY29va2llKTsKK30KKworYm9vbCBjZmc4MDIxMV9yeF9hY3Rpb24oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZyZXEsIGNvbnN0IHU4ICpidWYsCisJCQlzaXplX3QgbGVuLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gd2Rldi0+d2lwaHk7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdpcGh5KTsKKwlzdHJ1Y3QgY2ZnODAyMTFfYWN0aW9uX3JlZ2lzdHJhdGlvbiAqcmVnOworCWNvbnN0IHU4ICphY3Rpb25fZGF0YTsKKwlpbnQgYWN0aW9uX2RhdGFfbGVuOworCWJvb2wgcmVzdWx0ID0gZmFsc2U7CisKKwkvKiBmcmFtZSBsZW5ndGggLSBtaW4gc2l6ZSBleGNsdWRpbmcgY2F0ZWdvcnkgKi8KKwlhY3Rpb25fZGF0YV9sZW4gPSBsZW4gLSAoSUVFRTgwMjExX01JTl9BQ1RJT05fU0laRSAtIDEpOworCisJLyogYWN0aW9uIGRhdGEgc3RhcnRzIHdpdGggY2F0ZWdvcnkgKi8KKwlhY3Rpb25fZGF0YSA9IGJ1ZiArIElFRUU4MDIxMV9NSU5fQUNUSU9OX1NJWkUgLSAxOworCisJc3Bpbl9sb2NrX2JoKCZ3ZGV2LT5hY3Rpb25fcmVnaXN0cmF0aW9uc19sb2NrKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkocmVnLCAmd2Rldi0+YWN0aW9uX3JlZ2lzdHJhdGlvbnMsIGxpc3QpIHsKKwkJaWYgKHJlZy0+bWF0Y2hfbGVuID4gYWN0aW9uX2RhdGFfbGVuKQorCQkJY29udGludWU7CisKKwkJaWYgKG1lbWNtcChyZWctPm1hdGNoLCBhY3Rpb25fZGF0YSwgcmVnLT5tYXRjaF9sZW4pKQorCQkJY29udGludWU7CisKKwkJLyogZm91bmQgbWF0Y2ghICovCisKKwkJLyogSW5kaWNhdGUgdGhlIHJlY2VpdmVkIEFjdGlvbiBmcmFtZSB0byB1c2VyIHNwYWNlICovCisJCWlmIChubDgwMjExX3NlbmRfYWN0aW9uKHJkZXYsIGRldiwgcmVnLT5ubHBpZCwgZnJlcSwKKwkJCQkJYnVmLCBsZW4sIGdmcCkpCisJCQljb250aW51ZTsKKworCQlyZXN1bHQgPSB0cnVlOworCQlicmVhazsKKwl9CisKKwlzcGluX3VubG9ja19iaCgmd2Rldi0+YWN0aW9uX3JlZ2lzdHJhdGlvbnNfbG9jayk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9yeF9hY3Rpb24pOworCit2b2lkIGNmZzgwMjExX2FjdGlvbl90eF9zdGF0dXMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTY0IGNvb2tpZSwKKwkJCSAgICAgICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLCBib29sIGFjaywgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJc3RydWN0IHdpcGh5ICp3aXBoeSA9IHdkZXYtPndpcGh5OworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3aXBoeSk7CisKKwkvKiBJbmRpY2F0ZSBUWCBzdGF0dXMgb2YgdGhlIEFjdGlvbiBmcmFtZSB0byB1c2VyIHNwYWNlICovCisJbmw4MDIxMV9zZW5kX2FjdGlvbl90eF9zdGF0dXMocmRldiwgZGV2LCBjb29raWUsIGJ1ZiwgbGVuLCBhY2ssIGdmcCk7Cit9CitFWFBPUlRfU1lNQk9MKGNmZzgwMjExX2FjdGlvbl90eF9zdGF0dXMpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYyBiL25ldC93aXJlbGVzcy9ubDgwMjExLmMKaW5kZXggYTYwMjg0My4uZTQ0N2RiMCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuYworKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFRoaXMgaXMgdGhlIG5ldyBuZXRsaW5rLWJhc2VkIHdpcmVsZXNzIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlLgogICoKLSAqIENvcHlyaWdodCAyMDA2LTIwMDkJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KKyAqIENvcHlyaWdodCAyMDA2LTIwMTAJSm9oYW5uZXMgQmVyZyA8am9oYW5uZXNAc2lwc29sdXRpb25zLm5ldD4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvaWYuaD4KQEAgLTU4LDcgKzU4LDcgQEAKIH0KIAogLyogcG9saWN5IGZvciB0aGUgYXR0cmlidXRlcyAqLwotc3RhdGljIHN0cnVjdCBubGFfcG9saWN5IG5sODAyMTFfcG9saWN5W05MODAyMTFfQVRUUl9NQVgrMV0gX19yZWFkX21vc3RseSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBubDgwMjExX3BvbGljeVtOTDgwMjExX0FUVFJfTUFYKzFdID0gewogCVtOTDgwMjExX0FUVFJfV0lQSFldID0geyAudHlwZSA9IE5MQV9VMzIgfSwKIAlbTkw4MDIxMV9BVFRSX1dJUEhZX05BTUVdID0geyAudHlwZSA9IE5MQV9OVUxfU1RSSU5HLAogCQkJCSAgICAgIC5sZW4gPSAyMC0xIH0sCkBAIC02OSw2ICs2OSw3IEBACiAJW05MODAyMTFfQVRUUl9XSVBIWV9SRVRSWV9MT05HXSA9IHsgLnR5cGUgPSBOTEFfVTggfSwKIAlbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSQUdfVEhSRVNIT0xEXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiAJW05MODAyMTFfQVRUUl9XSVBIWV9SVFNfVEhSRVNIT0xEXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisJW05MODAyMTFfQVRUUl9XSVBIWV9DT1ZFUkFHRV9DTEFTU10gPSB7IC50eXBlID0gTkxBX1U4IH0sCiAKIAlbTkw4MDIxMV9BVFRSX0lGVFlQRV0gPSB7IC50eXBlID0gTkxBX1UzMiB9LAogCVtOTDgwMjExX0FUVFJfSUZJTkRFWF0gPSB7IC50eXBlID0gTkxBX1UzMiB9LApAQCAtMTQxLDExICsxNDIsMTcgQEAKIAlbTkw4MDIxMV9BVFRSXzRBRERSXSA9IHsgLnR5cGUgPSBOTEFfVTggfSwKIAlbTkw4MDIxMV9BVFRSX1BNS0lEXSA9IHsgLnR5cGUgPSBOTEFfQklOQVJZLAogCQkJCSAubGVuID0gV0xBTl9QTUtJRF9MRU4gfSwKKwlbTkw4MDIxMV9BVFRSX0RVUkFUSU9OXSA9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCisJW05MODAyMTFfQVRUUl9DT09LSUVdID0geyAudHlwZSA9IE5MQV9VNjQgfSwKKwlbTkw4MDIxMV9BVFRSX1RYX1JBVEVTXSA9IHsgLnR5cGUgPSBOTEFfTkVTVEVEIH0sCisJW05MODAyMTFfQVRUUl9GUkFNRV0gPSB7IC50eXBlID0gTkxBX0JJTkFSWSwKKwkJCQkgLmxlbiA9IElFRUU4MDIxMV9NQVhfREFUQV9MRU4gfSwKKwlbTkw4MDIxMV9BVFRSX0ZSQU1FX01BVENIXSA9IHsgLnR5cGUgPSBOTEFfQklOQVJZLCB9LAorCVtOTDgwMjExX0FUVFJfUFNfU1RBVEVdID0geyAudHlwZSA9IE5MQV9VMzIgfSwKIH07CiAKIC8qIHBvbGljeSBmb3IgdGhlIGF0dHJpYnV0ZXMgKi8KLXN0YXRpYyBzdHJ1Y3QgbmxhX3BvbGljeQotbmw4MDIxMV9rZXlfcG9saWN5W05MODAyMTFfS0VZX01BWCArIDFdIF9fcmVhZF9tb3N0bHkgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9rZXlfcG9saWN5W05MODAyMTFfS0VZX01BWCArIDFdID0gewogCVtOTDgwMjExX0tFWV9EQVRBXSA9IHsgLnR5cGUgPSBOTEFfQklOQVJZLCAubGVuID0gV0xBTl9NQVhfS0VZX0xFTiB9LAogCVtOTDgwMjExX0tFWV9JRFhdID0geyAudHlwZSA9IE5MQV9VOCB9LAogCVtOTDgwMjExX0tFWV9DSVBIRVJdID0geyAudHlwZSA9IE5MQV9VMzIgfSwKQEAgLTQ0Miw2ICs0NDksOCBAQAogCQkgICAgZGV2LT53aXBoeS5mcmFnX3RocmVzaG9sZCk7CiAJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFlfUlRTX1RIUkVTSE9MRCwKIAkJICAgIGRldi0+d2lwaHkucnRzX3RocmVzaG9sZCk7CisJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQVRUUl9XSVBIWV9DT1ZFUkFHRV9DTEFTUywKKwkJICAgIGRldi0+d2lwaHkuY292ZXJhZ2VfY2xhc3MpOwogCiAJTkxBX1BVVF9VOChtc2csIE5MODAyMTFfQVRUUl9NQVhfTlVNX1NDQU5fU1NJRFMsCiAJCSAgIGRldi0+d2lwaHkubWF4X3NjYW5fc3NpZHMpOwpAQCAtNTY5LDYgKzU3OCw5IEBACiAJQ01EKHNldF9wbWtzYSwgU0VUX1BNS1NBKTsKIAlDTUQoZGVsX3Bta3NhLCBERUxfUE1LU0EpOwogCUNNRChmbHVzaF9wbWtzYSwgRkxVU0hfUE1LU0EpOworCUNNRChyZW1haW5fb25fY2hhbm5lbCwgUkVNQUlOX09OX0NIQU5ORUwpOworCUNNRChzZXRfYml0cmF0ZV9tYXNrLCBTRVRfVFhfQklUUkFURV9NQVNLKTsKKwlDTUQoYWN0aW9uLCBBQ1RJT04pOwogCWlmIChkZXYtPndpcGh5LmZsYWdzICYgV0lQSFlfRkxBR19ORVROU19PSykgewogCQlpKys7CiAJCU5MQV9QVVRfVTMyKG1zZywgaSwgTkw4MDIxMV9DTURfU0VUX1dJUEhZX05FVE5TKTsKQEAgLTY4MSw2ICs2OTMsNyBAQAogCXUzMiBjaGFuZ2VkOwogCXU4IHJldHJ5X3Nob3J0ID0gMCwgcmV0cnlfbG9uZyA9IDA7CiAJdTMyIGZyYWdfdGhyZXNob2xkID0gMCwgcnRzX3RocmVzaG9sZCA9IDA7CisJdTggY292ZXJhZ2VfY2xhc3MgPSAwOwogCiAJcnRubF9sb2NrKCk7CiAKQEAgLTgwMyw5ICs4MTYsMTYgQEAKIAkJY2hhbmdlZCB8PSBXSVBIWV9QQVJBTV9SVFNfVEhSRVNIT0xEOwogCX0KIAorCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfQ09WRVJBR0VfQ0xBU1NdKSB7CisJCWNvdmVyYWdlX2NsYXNzID0gbmxhX2dldF91OCgKKwkJCWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9DT1ZFUkFHRV9DTEFTU10pOworCQljaGFuZ2VkIHw9IFdJUEhZX1BBUkFNX0NPVkVSQUdFX0NMQVNTOworCX0KKwogCWlmIChjaGFuZ2VkKSB7CiAJCXU4IG9sZF9yZXRyeV9zaG9ydCwgb2xkX3JldHJ5X2xvbmc7CiAJCXUzMiBvbGRfZnJhZ190aHJlc2hvbGQsIG9sZF9ydHNfdGhyZXNob2xkOworCQl1OCBvbGRfY292ZXJhZ2VfY2xhc3M7CiAKIAkJaWYgKCFyZGV2LT5vcHMtPnNldF93aXBoeV9wYXJhbXMpIHsKIAkJCXJlc3VsdCA9IC1FT1BOT1RTVVBQOwpAQCAtODE2LDYgKzgzNiw3IEBACiAJCW9sZF9yZXRyeV9sb25nID0gcmRldi0+d2lwaHkucmV0cnlfbG9uZzsKIAkJb2xkX2ZyYWdfdGhyZXNob2xkID0gcmRldi0+d2lwaHkuZnJhZ190aHJlc2hvbGQ7CiAJCW9sZF9ydHNfdGhyZXNob2xkID0gcmRldi0+d2lwaHkucnRzX3RocmVzaG9sZDsKKwkJb2xkX2NvdmVyYWdlX2NsYXNzID0gcmRldi0+d2lwaHkuY292ZXJhZ2VfY2xhc3M7CiAKIAkJaWYgKGNoYW5nZWQgJiBXSVBIWV9QQVJBTV9SRVRSWV9TSE9SVCkKIAkJCXJkZXYtPndpcGh5LnJldHJ5X3Nob3J0ID0gcmV0cnlfc2hvcnQ7CkBAIC04MjUsNiArODQ2LDggQEAKIAkJCXJkZXYtPndpcGh5LmZyYWdfdGhyZXNob2xkID0gZnJhZ190aHJlc2hvbGQ7CiAJCWlmIChjaGFuZ2VkICYgV0lQSFlfUEFSQU1fUlRTX1RIUkVTSE9MRCkKIAkJCXJkZXYtPndpcGh5LnJ0c190aHJlc2hvbGQgPSBydHNfdGhyZXNob2xkOworCQlpZiAoY2hhbmdlZCAmIFdJUEhZX1BBUkFNX0NPVkVSQUdFX0NMQVNTKQorCQkJcmRldi0+d2lwaHkuY292ZXJhZ2VfY2xhc3MgPSBjb3ZlcmFnZV9jbGFzczsKIAogCQlyZXN1bHQgPSByZGV2LT5vcHMtPnNldF93aXBoeV9wYXJhbXMoJnJkZXYtPndpcGh5LCBjaGFuZ2VkKTsKIAkJaWYgKHJlc3VsdCkgewpAQCAtODMyLDYgKzg1NSw3IEBACiAJCQlyZGV2LT53aXBoeS5yZXRyeV9sb25nID0gb2xkX3JldHJ5X2xvbmc7CiAJCQlyZGV2LT53aXBoeS5mcmFnX3RocmVzaG9sZCA9IG9sZF9mcmFnX3RocmVzaG9sZDsKIAkJCXJkZXYtPndpcGh5LnJ0c190aHJlc2hvbGQgPSBvbGRfcnRzX3RocmVzaG9sZDsKKwkJCXJkZXYtPndpcGh5LmNvdmVyYWdlX2NsYXNzID0gb2xkX2NvdmVyYWdlX2NsYXNzOwogCQl9CiAJfQogCkBAIC0xNjM3LDQyICsxNjYxLDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUxNiBubDgwMjExX2NhbGN1bGF0ZV9iaXRyYXRlKHN0cnVjdCByYXRlX2luZm8gKnJhdGUpCi17Ci0JaW50IG1vZHVsYXRpb24sIHN0cmVhbXMsIGJpdHJhdGU7Ci0KLQlpZiAoIShyYXRlLT5mbGFncyAmIFJBVEVfSU5GT19GTEFHU19NQ1MpKQotCQlyZXR1cm4gcmF0ZS0+bGVnYWN5OwotCi0JLyogdGhlIGZvcm11bGEgYmVsb3cgZG9lcyBvbmx5IHdvcmsgZm9yIE1DUyB2YWx1ZXMgc21hbGxlciB0aGFuIDMyICovCi0JaWYgKHJhdGUtPm1jcyA+PSAzMikKLQkJcmV0dXJuIDA7Ci0KLQltb2R1bGF0aW9uID0gcmF0ZS0+bWNzICYgNzsKLQlzdHJlYW1zID0gKHJhdGUtPm1jcyA+PiAzKSArIDE7Ci0KLQliaXRyYXRlID0gKHJhdGUtPmZsYWdzICYgUkFURV9JTkZPX0ZMQUdTXzQwX01IWl9XSURUSCkgPwotCQkJMTM1MDAwMDAgOiA2NTAwMDAwOwotCi0JaWYgKG1vZHVsYXRpb24gPCA0KQotCQliaXRyYXRlICo9IChtb2R1bGF0aW9uICsgMSk7Ci0JZWxzZSBpZiAobW9kdWxhdGlvbiA9PSA0KQotCQliaXRyYXRlICo9IChtb2R1bGF0aW9uICsgMik7Ci0JZWxzZQotCQliaXRyYXRlICo9IChtb2R1bGF0aW9uICsgMyk7Ci0KLQliaXRyYXRlICo9IHN0cmVhbXM7Ci0KLQlpZiAocmF0ZS0+ZmxhZ3MgJiBSQVRFX0lORk9fRkxBR1NfU0hPUlRfR0kpCi0JCWJpdHJhdGUgPSAoYml0cmF0ZSAvIDkpICogMTA7Ci0KLQkvKiBkbyBOT1Qgcm91bmQgZG93biBoZXJlICovCi0JcmV0dXJuIChiaXRyYXRlICsgNTAwMDApIC8gMTAwMDAwOwotfQotCiBzdGF0aWMgaW50IG5sODAyMTFfc2VuZF9zdGF0aW9uKHN0cnVjdCBza19idWZmICptc2csIHUzMiBwaWQsIHUzMiBzZXEsCiAJCQkJaW50IGZsYWdzLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJCXU4ICptYWNfYWRkciwgc3RydWN0IHN0YXRpb25faW5mbyAqc2luZm8pCisJCQkJY29uc3QgdTggKm1hY19hZGRyLCBzdHJ1Y3Qgc3RhdGlvbl9pbmZvICpzaW5mbykKIHsKIAl2b2lkICpoZHI7CiAJc3RydWN0IG5sYXR0ciAqc2luZm9hdHRyLCAqdHhyYXRlOwpAQCAtMTcxNiw4ICsxNzA3LDggQEAKIAkJaWYgKCF0eHJhdGUpCiAJCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCQkvKiBubDgwMjExX2NhbGN1bGF0ZV9iaXRyYXRlIHdpbGwgcmV0dXJuIDAgZm9yIG1jcyA+PSAzMiAqLwotCQliaXRyYXRlID0gbmw4MDIxMV9jYWxjdWxhdGVfYml0cmF0ZSgmc2luZm8tPnR4cmF0ZSk7CisJCS8qIGNmZzgwMjExX2NhbGN1bGF0ZV9iaXRyYXRlIHdpbGwgcmV0dXJuIDAgZm9yIG1jcyA+PSAzMiAqLworCQliaXRyYXRlID0gY2ZnODAyMTFfY2FsY3VsYXRlX2JpdHJhdGUoJnNpbmZvLT50eHJhdGUpOwogCQlpZiAoYml0cmF0ZSA+IDApCiAJCQlOTEFfUFVUX1UxNihtc2csIE5MODAyMTFfUkFURV9JTkZPX0JJVFJBVEUsIGJpdHJhdGUpOwogCkBAIC0yMDIzLDYgKzIwMTQsOSBAQAogCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9TVVBQT1JURURfUkFURVNdKQogCQlyZXR1cm4gLUVJTlZBTDsKIAorCWlmICghaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9BSURdKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCW1hY19hZGRyID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX01BQ10pOwogCXBhcmFtcy5zdXBwb3J0ZWRfcmF0ZXMgPQogCQlubGFfZGF0YShpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1RBX1NVUFBPUlRFRF9SQVRFU10pOwpAQCAtMjAzMSwxMSArMjAyNSw5IEBACiAJcGFyYW1zLmxpc3Rlbl9pbnRlcnZhbCA9CiAJCW5sYV9nZXRfdTE2KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9TVEFfTElTVEVOX0lOVEVSVkFMXSk7CiAKLQlpZiAoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1NUQV9BSURdKSB7Ci0JCXBhcmFtcy5haWQgPSBubGFfZ2V0X3UxNihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0pOwotCQlpZiAoIXBhcmFtcy5haWQgfHwgcGFyYW1zLmFpZCA+IElFRUU4MDIxMV9NQVhfQUlEKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCXBhcmFtcy5haWQgPSBubGFfZ2V0X3UxNihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfU1RBX0FJRF0pOworCWlmICghcGFyYW1zLmFpZCB8fCBwYXJhbXMuYWlkID4gSUVFRTgwMjExX01BWF9BSUQpCisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9IVF9DQVBBQklMSVRZXSkKIAkJcGFyYW1zLmh0X2NhcGEgPQpAQCAtMjA1MCw2ICsyMDQyLDEyIEBACiAJaWYgKGVycikKIAkJZ290byBvdXRfcnRubDsKIAorCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUCAmJgorCSAgICBkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9BUF9WTEFOKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKwogCWVyciA9IGdldF92bGFuKGluZm8sIHJkZXYsICZwYXJhbXMudmxhbik7CiAJaWYgKGVycikKIAkJZ290byBvdXQ7CkBAIC0yMDU3LDM1ICsyMDU1LDYgQEAKIAkvKiB2YWxpZGF0ZSBzZXR0aW5ncyAqLwogCWVyciA9IDA7CiAKLQlzd2l0Y2ggKGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlKSB7Ci0JY2FzZSBOTDgwMjExX0lGVFlQRV9BUDoKLQljYXNlIE5MODAyMTFfSUZUWVBFX0FQX1ZMQU46Ci0JCS8qIGFsbCBvayBidXQgbXVzdCBoYXZlIEFJRCAqLwotCQlpZiAoIXBhcmFtcy5haWQpCi0JCQllcnIgPSAtRUlOVkFMOwotCQlicmVhazsKLQljYXNlIE5MODAyMTFfSUZUWVBFX01FU0hfUE9JTlQ6Ci0JCS8qIGRpc2FsbG93IHRoaW5ncyBtZXNoIGRvZXNuJ3Qgc3VwcG9ydCAqLwotCQlpZiAocGFyYW1zLnZsYW4pCi0JCQllcnIgPSAtRUlOVkFMOwotCQlpZiAocGFyYW1zLmFpZCkKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCWlmIChwYXJhbXMuaHRfY2FwYSkKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCWlmIChwYXJhbXMubGlzdGVuX2ludGVydmFsID49IDApCi0JCQllcnIgPSAtRUlOVkFMOwotCQlpZiAocGFyYW1zLnN1cHBvcnRlZF9yYXRlcykKLQkJCWVyciA9IC1FSU5WQUw7Ci0JCWlmIChwYXJhbXMuc3RhX2ZsYWdzX21hc2spCi0JCQllcnIgPSAtRUlOVkFMOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQllcnIgPSAtRUlOVkFMOwotCX0KLQotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwotCiAJaWYgKCFyZGV2LT5vcHMtPmFkZF9zdGF0aW9uKSB7CiAJCWVyciA9IC1FT1BOT1RTVVBQOwogCQlnb3RvIG91dDsKQEAgLTIxMjYsOCArMjA5NSw3IEBACiAJCWdvdG8gb3V0X3J0bmw7CiAKIAlpZiAoZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVAgJiYKLQkgICAgZGV2LT5pZWVlODAyMTFfcHRyLT5pZnR5cGUgIT0gTkw4MDIxMV9JRlRZUEVfQVBfVkxBTiAmJgotCSAgICBkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9NRVNIX1BPSU5UKSB7CisJICAgIGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX0FQX1ZMQU4pIHsKIAkJZXJyID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjUxNCw4ICsyNDgyLDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kKLQlyZWdfcnVsZV9wb2xpY3lbTkw4MDIxMV9SRUdfUlVMRV9BVFRSX01BWCArIDFdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IHJlZ19ydWxlX3BvbGljeVtOTDgwMjExX1JFR19SVUxFX0FUVFJfTUFYICsgMV0gPSB7CiAJW05MODAyMTFfQVRUUl9SRUdfUlVMRV9GTEFHU10JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKIAlbTkw4MDIxMV9BVFRSX0ZSRVFfUkFOR0VfU1RBUlRdCQk9IHsgLnR5cGUgPSBOTEFfVTMyIH0sCiAJW05MODAyMTFfQVRUUl9GUkVRX1JBTkdFX0VORF0JCT0geyAudHlwZSA9IE5MQV9VMzIgfSwKQEAgLTI1ODMsMTIgKzI1NTAsNiBAQAogCiAJZGF0YSA9IG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9SRUdfQUxQSEEyXSk7CiAKLSNpZmRlZiBDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlkKLQkvKiBXZSBpZ25vcmUgd29ybGQgcmVnZG9tIHJlcXVlc3RzIHdpdGggdGhlIG9sZCByZWdkb20gc2V0dXAgKi8KLQlpZiAoaXNfd29ybGRfcmVnZG9tKGRhdGEpKQotCQlyZXR1cm4gLUVJTlZBTDsKLSNlbmRpZgotCiAJciA9IHJlZ3VsYXRvcnlfaGludF91c2VyKGRhdGEpOwogCiAJcmV0dXJuIHI7CkBAIC0yNjkwLDggKzI2NTEsNyBAQAogCX0gXAogfSB3aGlsZSAoMCk7XAogCi1zdGF0aWMgc3RydWN0IG5sYV9wb2xpY3kKLW5sODAyMTFfbWVzaGNvbmZfcGFyYW1zX3BvbGljeVtOTDgwMjExX01FU0hDT05GX0FUVFJfTUFYKzFdIF9fcmVhZF9tb3N0bHkgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgbmw4MDIxMV9tZXNoY29uZl9wYXJhbXNfcG9saWN5W05MODAyMTFfTUVTSENPTkZfQVRUUl9NQVgrMV0gPSB7CiAJW05MODAyMTFfTUVTSENPTkZfUkVUUllfVElNRU9VVF0gPSB7IC50eXBlID0gTkxBX1UxNiB9LAogCVtOTDgwMjExX01FU0hDT05GX0NPTkZJUk1fVElNRU9VVF0gPSB7IC50eXBlID0gTkxBX1UxNiB9LAogCVtOTDgwMjExX01FU0hDT05GX0hPTERJTkdfVElNRU9VVF0gPSB7IC50eXBlID0gTkxBX1UxNiB9LApAQCAtMzE4Miw2ICszMTQyLDEwIEBACiAJCU5MQV9QVVQobXNnLCBOTDgwMjExX0JTU19JTkZPUk1BVElPTl9FTEVNRU5UUywKIAkJCXJlcy0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzLAogCQkJcmVzLT5pbmZvcm1hdGlvbl9lbGVtZW50cyk7CisJaWYgKHJlcy0+YmVhY29uX2llcyAmJiByZXMtPmxlbl9iZWFjb25faWVzICYmCisJICAgIHJlcy0+YmVhY29uX2llcyAhPSByZXMtPmluZm9ybWF0aW9uX2VsZW1lbnRzKQorCQlOTEFfUFVUKG1zZywgTkw4MDIxMV9CU1NfQkVBQ09OX0lFUywKKwkJCXJlcy0+bGVuX2JlYWNvbl9pZXMsIHJlcy0+YmVhY29uX2llcyk7CiAJaWYgKHJlcy0+dHNmKQogCQlOTEFfUFVUX1U2NChtc2csIE5MODAyMTFfQlNTX1RTRiwgcmVzLT50c2YpOwogCWlmIChyZXMtPmJlYWNvbl9pbnRlcnZhbCkKQEAgLTM1ODYsNiArMzU1MCw3IEBACiB7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKIAlzdHJ1Y3QgY2ZnODAyMTFfY3J5cHRvX3NldHRpbmdzIGNyeXB0bzsKIAlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sICpmaXhlZGNoYW47CiAJY29uc3QgdTggKmJzc2lkLCAqc3NpZCwgKmllID0gTlVMTCwgKnByZXZfYnNzaWQgPSBOVUxMOwpAQCAtMzYzMSw3ICszNTk2LDggQEAKIAl9CiAKIAltdXRleF9sb2NrKCZyZGV2LT5kZXZsaXN0X210eCk7Ci0JZml4ZWRjaGFuID0gcmRldl9maXhlZF9jaGFubmVsKHJkZXYsIE5VTEwpOworCXdkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CisJZml4ZWRjaGFuID0gcmRldl9maXhlZF9jaGFubmVsKHJkZXYsIHdkZXYpOwogCWlmIChmaXhlZGNoYW4gJiYgY2hhbiAhPSBmaXhlZGNoYW4pIHsKIAkJZXJyID0gLUVCVVNZOwogCQltdXRleF91bmxvY2soJnJkZXYtPmRldmxpc3RfbXR4KTsKQEAgLTQzMjIsNiArNDI4OCw0OTYgQEAKIAogfQogCitzdGF0aWMgaW50IG5sODAyMTFfcmVtYWluX29uX2NoYW5uZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuOworCXN0cnVjdCBza19idWZmICptc2c7CisJdm9pZCAqaGRyOworCXU2NCBjb29raWU7CisJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUgPSBOTDgwMjExX0NIQU5fTk9fSFQ7CisJdTMyIGZyZXEsIGR1cmF0aW9uOworCWludCBlcnI7CisKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSB8fAorCSAgICAhaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0RVUkFUSU9OXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkdXJhdGlvbiA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9EVVJBVElPTl0pOworCisJLyoKKwkgKiBXZSBzaG91bGQgYmUgb24gdGhhdCBjaGFubmVsIGZvciBhdCBsZWFzdCBvbmUgamlmZmllLAorCSAqIGFuZCBtb3JlIHRoYW4gNSBzZWNvbmRzIHNlZW1zIGV4Y2Vzc2l2ZS4KKwkgKi8KKwlpZiAoIWR1cmF0aW9uIHx8ICFtc2Vjc190b19qaWZmaWVzKGR1cmF0aW9uKSB8fCBkdXJhdGlvbiA+IDUwMDApCisJCXJldHVybiAtRUlOVkFMOworCisJcnRubF9sb2NrKCk7CisKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIHVubG9ja19ydG5sOworCisJaWYgKCFyZGV2LT5vcHMtPnJlbWFpbl9vbl9jaGFubmVsKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKworCWlmIChpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfQ0hBTk5FTF9UWVBFXSkgeworCQljaGFubmVsX3R5cGUgPSBubGFfZ2V0X3UzMigKKwkJCWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEVdKTsKKwkJaWYgKGNoYW5uZWxfdHlwZSAhPSBOTDgwMjExX0NIQU5fTk9fSFQgJiYKKwkJICAgIGNoYW5uZWxfdHlwZSAhPSBOTDgwMjExX0NIQU5fSFQyMCAmJgorCQkgICAgY2hhbm5lbF90eXBlICE9IE5MODAyMTFfQ0hBTl9IVDQwUExVUyAmJgorCQkgICAgY2hhbm5lbF90eXBlICE9IE5MODAyMTFfQ0hBTl9IVDQwTUlOVVMpCisJCQllcnIgPSAtRUlOVkFMOworCQkJZ290byBvdXQ7CisJfQorCisJZnJlcSA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9GUkVRXSk7CisJY2hhbiA9IHJkZXZfZnJlcV90b19jaGFuKHJkZXYsIGZyZXEsIGNoYW5uZWxfdHlwZSk7CisJaWYgKGNoYW4gPT0gTlVMTCkgeworCQllcnIgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zZykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIGluZm8tPnNuZF9waWQsIGluZm8tPnNuZF9zZXEsIDAsCisJCQkgICAgIE5MODAyMTFfQ01EX1JFTUFJTl9PTl9DSEFOTkVMKTsKKworCWlmIChJU19FUlIoaGRyKSkgeworCQllcnIgPSBQVFJfRVJSKGhkcik7CisJCWdvdG8gZnJlZV9tc2c7CisJfQorCisJZXJyID0gcmRldi0+b3BzLT5yZW1haW5fb25fY2hhbm5lbCgmcmRldi0+d2lwaHksIGRldiwgY2hhbiwKKwkJCQkJICAgY2hhbm5lbF90eXBlLCBkdXJhdGlvbiwgJmNvb2tpZSk7CisKKwlpZiAoZXJyKQorCQlnb3RvIGZyZWVfbXNnOworCisJTkxBX1BVVF9VNjQobXNnLCBOTDgwMjExX0FUVFJfQ09PS0lFLCBjb29raWUpOworCisJZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCWVyciA9IGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTsKKwlnb3RvIG91dDsKKworIG5sYV9wdXRfZmFpbHVyZToKKwllcnIgPSAtRU5PQlVGUzsKKyBmcmVlX21zZzoKKwlubG1zZ19mcmVlKG1zZyk7Cisgb3V0OgorCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworCWRldl9wdXQoZGV2KTsKKyB1bmxvY2tfcnRubDoKKwlydG5sX3VubG9jaygpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV9jYW5jZWxfcmVtYWluX29uX2NoYW5uZWwoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkJICAgIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCit7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJdTY0IGNvb2tpZTsKKwlpbnQgZXJyOworCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfQ09PS0lFXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlydG5sX2xvY2soKTsKKworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOworCWlmIChlcnIpCisJCWdvdG8gdW5sb2NrX3J0bmw7CisKKwlpZiAoIXJkZXYtPm9wcy0+Y2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkgeworCQllcnIgPSAtRU5FVERPV047CisJCWdvdG8gb3V0OworCX0KKworCWNvb2tpZSA9IG5sYV9nZXRfdTY0KGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9DT09LSUVdKTsKKworCWVyciA9IHJkZXYtPm9wcy0+Y2FuY2VsX3JlbWFpbl9vbl9jaGFubmVsKCZyZGV2LT53aXBoeSwgZGV2LCBjb29raWUpOworCisgb3V0OgorCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworCWRldl9wdXQoZGV2KTsKKyB1bmxvY2tfcnRubDoKKwlydG5sX3VubG9jaygpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB1MzIgcmF0ZXNldF90b19tYXNrKHN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kLAorCQkJICAgdTggKnJhdGVzLCB1OCByYXRlc19sZW4pCit7CisJdTggaTsKKwl1MzIgbWFzayA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgcmF0ZXNfbGVuOyBpKyspIHsKKwkJaW50IHJhdGUgPSAocmF0ZXNbaV0gJiAweDdmKSAqIDU7CisJCWludCByaWR4OworCQlmb3IgKHJpZHggPSAwOyByaWR4IDwgc2JhbmQtPm5fYml0cmF0ZXM7IHJpZHgrKykgeworCQkJc3RydWN0IGllZWU4MDIxMV9yYXRlICpzcmF0ZSA9CisJCQkJJnNiYW5kLT5iaXRyYXRlc1tyaWR4XTsKKwkJCWlmIChyYXRlID09IHNyYXRlLT5iaXRyYXRlKSB7CisJCQkJbWFzayB8PSAxIDw8IHJpZHg7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKHJpZHggPT0gc2JhbmQtPm5fYml0cmF0ZXMpCisJCQlyZXR1cm4gMDsgLyogcmF0ZSBub3QgZm91bmQgKi8KKwl9CisKKwlyZXR1cm4gbWFzazsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IG5sODAyMTFfdHhhdHRyX3BvbGljeVtOTDgwMjExX1RYUkFURV9NQVggKyAxXSA9IHsKKwlbTkw4MDIxMV9UWFJBVEVfTEVHQUNZXSA9IHsgLnR5cGUgPSBOTEFfQklOQVJZLAorCQkJCSAgICAubGVuID0gTkw4MDIxMV9NQVhfU1VQUF9SQVRFUyB9LAorfTsKKworc3RhdGljIGludCBubDgwMjExX3NldF90eF9iaXRyYXRlX21hc2soc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgICAgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgbmxhdHRyICp0YltOTDgwMjExX1RYUkFURV9NQVggKyAxXTsKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJc3RydWN0IGNmZzgwMjExX2JpdHJhdGVfbWFzayBtYXNrOworCWludCBlcnIsIHJlbSwgaTsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBubGF0dHIgKnR4X3JhdGVzOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9UWF9SQVRFU10gPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlydG5sX2xvY2soKTsKKworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOworCWlmIChlcnIpCisJCWdvdG8gdW5sb2NrX3J0bmw7CisKKwlpZiAoIXJkZXYtPm9wcy0+c2V0X2JpdHJhdGVfbWFzaykgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byB1bmxvY2s7CisJfQorCisJbWVtc2V0KCZtYXNrLCAwLCBzaXplb2YobWFzaykpOworCS8qIERlZmF1bHQgdG8gYWxsIHJhdGVzIGVuYWJsZWQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgSUVFRTgwMjExX05VTV9CQU5EUzsgaSsrKSB7CisJCXNiYW5kID0gcmRldi0+d2lwaHkuYmFuZHNbaV07CisJCW1hc2suY29udHJvbFtpXS5sZWdhY3kgPQorCQkJc2JhbmQgPyAoMSA8PCBzYmFuZC0+bl9iaXRyYXRlcykgLSAxIDogMDsKKwl9CisKKwkvKgorCSAqIFRoZSBuZXN0ZWQgYXR0cmlidXRlIHVzZXMgZW51bSBubDgwMjExX2JhbmQgYXMgdGhlIGluZGV4LiBUaGlzIG1hcHMKKwkgKiBkaXJlY3RseSB0byB0aGUgZW51bSBpZWVlODAyMTFfYmFuZCB2YWx1ZXMgdXNlZCBpbiBjZmc4MDIxMS4KKwkgKi8KKwlubGFfZm9yX2VhY2hfbmVzdGVkKHR4X3JhdGVzLCBpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfVFhfUkFURVNdLCByZW0pCisJeworCQllbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQgPSBubGFfdHlwZSh0eF9yYXRlcyk7CisJCWlmIChiYW5kIDwgMCB8fCBiYW5kID49IElFRUU4MDIxMV9OVU1fQkFORFMpIHsKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIHVubG9jazsKKwkJfQorCQlzYmFuZCA9IHJkZXYtPndpcGh5LmJhbmRzW2JhbmRdOworCQlpZiAoc2JhbmQgPT0gTlVMTCkgeworCQkJZXJyID0gLUVJTlZBTDsKKwkJCWdvdG8gdW5sb2NrOworCQl9CisJCW5sYV9wYXJzZSh0YiwgTkw4MDIxMV9UWFJBVEVfTUFYLCBubGFfZGF0YSh0eF9yYXRlcyksCisJCQkgIG5sYV9sZW4odHhfcmF0ZXMpLCBubDgwMjExX3R4YXR0cl9wb2xpY3kpOworCQlpZiAodGJbTkw4MDIxMV9UWFJBVEVfTEVHQUNZXSkgeworCQkJbWFzay5jb250cm9sW2JhbmRdLmxlZ2FjeSA9IHJhdGVzZXRfdG9fbWFzaygKKwkJCQlzYmFuZCwKKwkJCQlubGFfZGF0YSh0YltOTDgwMjExX1RYUkFURV9MRUdBQ1ldKSwKKwkJCQlubGFfbGVuKHRiW05MODAyMTFfVFhSQVRFX0xFR0FDWV0pKTsKKwkJCWlmIChtYXNrLmNvbnRyb2xbYmFuZF0ubGVnYWN5ID09IDApIHsKKwkJCQllcnIgPSAtRUlOVkFMOworCQkJCWdvdG8gdW5sb2NrOworCQkJfQorCQl9CisJfQorCisJZXJyID0gcmRldi0+b3BzLT5zZXRfYml0cmF0ZV9tYXNrKCZyZGV2LT53aXBoeSwgZGV2LCBOVUxMLCAmbWFzayk7CisKKyB1bmxvY2s6CisJZGV2X3B1dChkZXYpOworCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworIHVubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBubDgwMjExX3JlZ2lzdGVyX2FjdGlvbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCWludCBlcnI7CisKKwlpZiAoIWluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9GUkFNRV9NQVRDSF0pCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FX01BVENIXSkgPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJ0bmxfbG9jaygpOworCisJZXJyID0gZ2V0X3JkZXZfZGV2X2J5X2luZm9faWZpbmRleChpbmZvLCAmcmRldiwgJmRldik7CisJaWYgKGVycikKKwkJZ290byB1bmxvY2tfcnRubDsKKworCWlmIChkZXYtPmllZWU4MDIxMV9wdHItPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBub3QgbXVjaCBwb2ludCBpbiByZWdpc3RlcmluZyBpZiB3ZSBjYW4ndCByZXBseSAqLworCWlmICghcmRldi0+b3BzLT5hY3Rpb24pIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWVyciA9IGNmZzgwMjExX21sbWVfcmVnaXN0ZXJfYWN0aW9uKGRldi0+aWVlZTgwMjExX3B0ciwgaW5mby0+c25kX3BpZCwKKwkJCW5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9GUkFNRV9NQVRDSF0pLAorCQkJbmxhX2xlbihpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVfTUFUQ0hdKSk7Cisgb3V0OgorCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworCWRldl9wdXQoZGV2KTsKKyB1bmxvY2tfcnRubDoKKwlydG5sX3VubG9jaygpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV9hY3Rpb24oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW47CisJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUgPSBOTDgwMjExX0NIQU5fTk9fSFQ7CisJdTMyIGZyZXE7CisJaW50IGVycjsKKwl2b2lkICpoZHI7CisJdTY0IGNvb2tpZTsKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfRlJBTUVdIHx8CisJICAgICFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfV0lQSFlfRlJFUV0pCisJCXJldHVybiAtRUlOVkFMOworCisJcnRubF9sb2NrKCk7CisKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIHVubG9ja19ydG5sOworCisJaWYgKCFyZGV2LT5vcHMtPmFjdGlvbikgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGRldi0+aWVlZTgwMjExX3B0ci0+aWZ0eXBlICE9IE5MODAyMTFfSUZUWVBFX1NUQVRJT04pIHsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CisJCWdvdG8gb3V0OworCX0KKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKSB7CisJCWVyciA9IC1FTkVURE9XTjsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9XSVBIWV9DSEFOTkVMX1RZUEVdKSB7CisJCWNoYW5uZWxfdHlwZSA9IG5sYV9nZXRfdTMyKAorCQkJaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRV0pOworCQlpZiAoY2hhbm5lbF90eXBlICE9IE5MODAyMTFfQ0hBTl9OT19IVCAmJgorCQkgICAgY2hhbm5lbF90eXBlICE9IE5MODAyMTFfQ0hBTl9IVDIwICYmCisJCSAgICBjaGFubmVsX3R5cGUgIT0gTkw4MDIxMV9DSEFOX0hUNDBQTFVTICYmCisJCSAgICBjaGFubmVsX3R5cGUgIT0gTkw4MDIxMV9DSEFOX0hUNDBNSU5VUykKKwkJCWVyciA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwl9CisKKwlmcmVxID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVFdKTsKKwljaGFuID0gcmRldl9mcmVxX3RvX2NoYW4ocmRldiwgZnJlcSwgY2hhbm5lbF90eXBlKTsKKwlpZiAoY2hhbiA9PSBOVUxMKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19ERUZBVUxUX1NJWkUsIEdGUF9LRVJORUwpOworCWlmICghbXNnKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gb3V0OworCX0KKworCWhkciA9IG5sODAyMTFoZHJfcHV0KG1zZywgaW5mby0+c25kX3BpZCwgaW5mby0+c25kX3NlcSwgMCwKKwkJCSAgICAgTkw4MDIxMV9DTURfQUNUSU9OKTsKKworCWlmIChJU19FUlIoaGRyKSkgeworCQllcnIgPSBQVFJfRVJSKGhkcik7CisJCWdvdG8gZnJlZV9tc2c7CisJfQorCWVyciA9IGNmZzgwMjExX21sbWVfYWN0aW9uKHJkZXYsIGRldiwgY2hhbiwgY2hhbm5lbF90eXBlLAorCQkJCSAgIG5sYV9kYXRhKGluZm8tPmF0dHJzW05MODAyMTFfQVRUUl9GUkFNRV0pLAorCQkJCSAgIG5sYV9sZW4oaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX0ZSQU1FXSksCisJCQkJICAgJmNvb2tpZSk7CisJaWYgKGVycikKKwkJZ290byBmcmVlX21zZzsKKworCU5MQV9QVVRfVTY0KG1zZywgTkw4MDIxMV9BVFRSX0NPT0tJRSwgY29va2llKTsKKworCWdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKwllcnIgPSBnZW5sbXNnX3JlcGx5KG1zZywgaW5mbyk7CisJZ290byBvdXQ7CisKKyBubGFfcHV0X2ZhaWx1cmU6CisJZXJyID0gLUVOT0JVRlM7CisgZnJlZV9tc2c6CisJbmxtc2dfZnJlZShtc2cpOworIG91dDoKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKKwlkZXZfcHV0KGRldik7Cit1bmxvY2tfcnRubDoKKwlydG5sX3VubG9jaygpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV9zZXRfcG93ZXJfc2F2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKKwlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CisJdTggcHNfc3RhdGU7CisJYm9vbCBzdGF0ZTsKKwlpbnQgZXJyOworCisJaWYgKCFpbmZvLT5hdHRyc1tOTDgwMjExX0FUVFJfUFNfU1RBVEVdKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWdvdG8gb3V0OworCX0KKworCXBzX3N0YXRlID0gbmxhX2dldF91MzIoaW5mby0+YXR0cnNbTkw4MDIxMV9BVFRSX1BTX1NUQVRFXSk7CisKKwlpZiAocHNfc3RhdGUgIT0gTkw4MDIxMV9QU19ESVNBQkxFRCAmJiBwc19zdGF0ZSAhPSBOTDgwMjExX1BTX0VOQUJMRUQpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJcnRubF9sb2NrKCk7CisKKwllcnIgPSBnZXRfcmRldl9kZXZfYnlfaW5mb19pZmluZGV4KGluZm8sICZyZGV2LCAmZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIHVubG9ja19yZGV2OworCisJd2RldiA9IGRldi0+aWVlZTgwMjExX3B0cjsKKworCWlmICghcmRldi0+b3BzLT5zZXRfcG93ZXJfbWdtdCkgeworCQllcnIgPSAtRU9QTk9UU1VQUDsKKwkJZ290byB1bmxvY2tfcmRldjsKKwl9CisKKwlzdGF0ZSA9IChwc19zdGF0ZSA9PSBOTDgwMjExX1BTX0VOQUJMRUQpID8gdHJ1ZSA6IGZhbHNlOworCisJaWYgKHN0YXRlID09IHdkZXYtPnBzKQorCQlnb3RvIHVubG9ja19yZGV2OworCisJd2Rldi0+cHMgPSBzdGF0ZTsKKworCWlmIChyZGV2LT5vcHMtPnNldF9wb3dlcl9tZ210KHdkZXYtPndpcGh5LCBkZXYsIHdkZXYtPnBzLAorCQkJCSAgICAgIHdkZXYtPnBzX3RpbWVvdXQpKQorCQkvKiBhc3N1bWUgdGhpcyBtZWFucyBpdCdzIG9mZiAqLworCQl3ZGV2LT5wcyA9IGZhbHNlOworCit1bmxvY2tfcmRldjoKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKKwlkZXZfcHV0KGRldik7CisJcnRubF91bmxvY2soKTsKKworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgbmw4MDIxMV9nZXRfcG93ZXJfc2F2ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQoreworCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldjsKKwllbnVtIG5sODAyMTFfcHNfc3RhdGUgcHNfc3RhdGU7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OworCXN0cnVjdCBza19idWZmICptc2c7CisJdm9pZCAqaGRyOworCWludCBlcnI7CisKKwlydG5sX2xvY2soKTsKKworCWVyciA9IGdldF9yZGV2X2Rldl9ieV9pbmZvX2lmaW5kZXgoaW5mbywgJnJkZXYsICZkZXYpOworCWlmIChlcnIpCisJCWdvdG8gdW5sb2NrX3J0bmw7CisKKwl3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOworCisJaWYgKCFyZGV2LT5vcHMtPnNldF9wb3dlcl9tZ210KSB7CisJCWVyciA9IC1FT1BOT1RTVVBQOworCQlnb3RvIG91dDsKKwl9CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1zZykgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIGluZm8tPnNuZF9waWQsIGluZm8tPnNuZF9zZXEsIDAsCisJCQkgICAgIE5MODAyMTFfQ01EX0dFVF9QT1dFUl9TQVZFKTsKKwlpZiAoIWhkcikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZyZWVfbXNnOworCX0KKworCWlmICh3ZGV2LT5wcykKKwkJcHNfc3RhdGUgPSBOTDgwMjExX1BTX0VOQUJMRUQ7CisJZWxzZQorCQlwc19zdGF0ZSA9IE5MODAyMTFfUFNfRElTQUJMRUQ7CisKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9QU19TVEFURSwgcHNfc3RhdGUpOworCisJZ2VubG1zZ19lbmQobXNnLCBoZHIpOworCWVyciA9IGdlbmxtc2dfcmVwbHkobXNnLCBpbmZvKTsKKwlnb3RvIG91dDsKKworbmxhX3B1dF9mYWlsdXJlOgorCWVyciA9IC1FTk9CVUZTOworCitmcmVlX21zZzoKKwlubG1zZ19mcmVlKG1zZyk7CisKK291dDoKKwljZmc4MDIxMV91bmxvY2tfcmRldihyZGV2KTsKKwlkZXZfcHV0KGRldik7CisKK3VubG9ja19ydG5sOgorCXJ0bmxfdW5sb2NrKCk7CisKKwlyZXR1cm4gZXJyOworfQorCiBzdGF0aWMgc3RydWN0IGdlbmxfb3BzIG5sODAyMTFfb3BzW10gPSB7CiAJewogCQkuY21kID0gTkw4MDIxMV9DTURfR0VUX1dJUEhZLApAQCAtNDU4NCw4ICs1MDQwLDUwIEBACiAJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKIAkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAogCX0sCi0KKwl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9SRU1BSU5fT05fQ0hBTk5FTCwKKwkJLmRvaXQgPSBubDgwMjExX3JlbWFpbl9vbl9jaGFubmVsLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKKwl9LAorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX0NBTkNFTF9SRU1BSU5fT05fQ0hBTk5FTCwKKwkJLmRvaXQgPSBubDgwMjExX2NhbmNlbF9yZW1haW5fb25fY2hhbm5lbCwKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJfSwKKwl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9TRVRfVFhfQklUUkFURV9NQVNLLAorCQkuZG9pdCA9IG5sODAyMTFfc2V0X3R4X2JpdHJhdGVfbWFzaywKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkuZmxhZ3MgPSBHRU5MX0FETUlOX1BFUk0sCisJfSwKKwl7CisJCS5jbWQgPSBOTDgwMjExX0NNRF9SRUdJU1RFUl9BQ1RJT04sCisJCS5kb2l0ID0gbmw4MDIxMV9yZWdpc3Rlcl9hY3Rpb24sCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfQUNUSU9OLAorCQkuZG9pdCA9IG5sODAyMTFfYWN0aW9uLAorCQkucG9saWN5ID0gbmw4MDIxMV9wb2xpY3ksCisJCS5mbGFncyA9IEdFTkxfQURNSU5fUEVSTSwKKwl9LAorCXsKKwkJLmNtZCA9IE5MODAyMTFfQ01EX1NFVF9QT1dFUl9TQVZFLAorCQkuZG9pdCA9IG5sODAyMTFfc2V0X3Bvd2VyX3NhdmUsCisJCS5wb2xpY3kgPSBubDgwMjExX3BvbGljeSwKKwkJLmZsYWdzID0gR0VOTF9BRE1JTl9QRVJNLAorCX0sCisJeworCQkuY21kID0gTkw4MDIxMV9DTURfR0VUX1BPV0VSX1NBVkUsCisJCS5kb2l0ID0gbmw4MDIxMV9nZXRfcG93ZXJfc2F2ZSwKKwkJLnBvbGljeSA9IG5sODAyMTFfcG9saWN5LAorCQkvKiBjYW4gYmUgcmV0cmlldmVkIGJ5IHVucHJpdmlsZWdlZCB1c2VycyAqLworCX0sCiB9OworCiBzdGF0aWMgc3RydWN0IGdlbmxfbXVsdGljYXN0X2dyb3VwIG5sODAyMTFfbWxtZV9tY2dycCA9IHsKIAkubmFtZSA9ICJtbG1lIiwKIH07CkBAIC01MTczLDYgKzU2NzEsMTkzIEBACiAJbmxtc2dfZnJlZShtc2cpOwogfQogCitzdGF0aWMgdm9pZCBubDgwMjExX3NlbmRfcmVtYWluX29uX2NoYW5fZXZlbnQoCisJaW50IGNtZCwgc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU2NCBjb29raWUsCisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLAorCXVuc2lnbmVkIGludCBkdXJhdGlvbiwgZ2ZwX3QgZ2ZwKQoreworCXN0cnVjdCBza19idWZmICptc2c7CisJdm9pZCAqaGRyOworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgZ2ZwKTsKKwlpZiAoIW1zZykKKwkJcmV0dXJuOworCisJaGRyID0gbmw4MDIxMWhkcl9wdXQobXNnLCAwLCAwLCAwLCBjbWQpOworCWlmICghaGRyKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZLCByZGV2LT53aXBoeV9pZHgpOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0lGSU5ERVgsIG5ldGRldi0+aWZpbmRleCk7CisJTkxBX1BVVF9VMzIobXNnLCBOTDgwMjExX0FUVFJfV0lQSFlfRlJFUSwgY2hhbi0+Y2VudGVyX2ZyZXEpOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZX0NIQU5ORUxfVFlQRSwgY2hhbm5lbF90eXBlKTsKKwlOTEFfUFVUX1U2NChtc2csIE5MODAyMTFfQVRUUl9DT09LSUUsIGNvb2tpZSk7CisKKwlpZiAoY21kID09IE5MODAyMTFfQ01EX1JFTUFJTl9PTl9DSEFOTkVMKQorCQlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9EVVJBVElPTiwgZHVyYXRpb24pOworCisJaWYgKGdlbmxtc2dfZW5kKG1zZywgaGRyKSA8IDApIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm47CisJfQorCisJZ2VubG1zZ19tdWx0aWNhc3RfbmV0bnMod2lwaHlfbmV0KCZyZGV2LT53aXBoeSksIG1zZywgMCwKKwkJCQlubDgwMjExX21sbWVfbWNncnAuaWQsIGdmcCk7CisJcmV0dXJuOworCisgbmxhX3B1dF9mYWlsdXJlOgorCWdlbmxtc2dfY2FuY2VsKG1zZywgaGRyKTsKKwlubG1zZ19mcmVlKG1zZyk7Cit9CisKK3ZvaWQgbmw4MDIxMV9zZW5kX3JlbWFpbl9vbl9jaGFubmVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTY0IGNvb2tpZSwKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJCSAgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCQkgICAgdW5zaWduZWQgaW50IGR1cmF0aW9uLCBnZnBfdCBnZnApCit7CisJbmw4MDIxMV9zZW5kX3JlbWFpbl9vbl9jaGFuX2V2ZW50KE5MODAyMTFfQ01EX1JFTUFJTl9PTl9DSEFOTkVMLAorCQkJCQkgIHJkZXYsIG5ldGRldiwgY29va2llLCBjaGFuLAorCQkJCQkgIGNoYW5uZWxfdHlwZSwgZHVyYXRpb24sIGdmcCk7Cit9CisKK3ZvaWQgbmw4MDIxMV9zZW5kX3JlbWFpbl9vbl9jaGFubmVsX2NhbmNlbCgKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJdTY0IGNvb2tpZSwgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCWVudW0gbmw4MDIxMV9jaGFubmVsX3R5cGUgY2hhbm5lbF90eXBlLCBnZnBfdCBnZnApCit7CisJbmw4MDIxMV9zZW5kX3JlbWFpbl9vbl9jaGFuX2V2ZW50KE5MODAyMTFfQ01EX0NBTkNFTF9SRU1BSU5fT05fQ0hBTk5FTCwKKwkJCQkJICByZGV2LCBuZXRkZXYsIGNvb2tpZSwgY2hhbiwKKwkJCQkJICBjaGFubmVsX3R5cGUsIDAsIGdmcCk7Cit9CisKK3ZvaWQgbmw4MDIxMV9zZW5kX3N0YV9ldmVudChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKm1hY19hZGRyLAorCQkJICAgIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvLCBnZnBfdCBnZnApCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKworCW1zZyA9IG5sbXNnX25ldyhOTE1TR19HT09EU0laRSwgZ2ZwKTsKKwlpZiAoIW1zZykKKwkJcmV0dXJuOworCisJaWYgKG5sODAyMTFfc2VuZF9zdGF0aW9uKG1zZywgMCwgMCwgMCwgZGV2LCBtYWNfYWRkciwgc2luZm8pIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybjsKKwl9CisKKwlnZW5sbXNnX211bHRpY2FzdF9uZXRucyh3aXBoeV9uZXQoJnJkZXYtPndpcGh5KSwgbXNnLCAwLAorCQkJCW5sODAyMTFfbWxtZV9tY2dycC5pZCwgZ2ZwKTsKK30KKworaW50IG5sODAyMTFfc2VuZF9hY3Rpb24oc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIG5scGlkLAorCQkJaW50IGZyZXEsIGNvbnN0IHU4ICpidWYsIHNpemVfdCBsZW4sIGdmcF90IGdmcCkKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqbXNnOworCXZvaWQgKmhkcjsKKwlpbnQgZXJyOworCisJbXNnID0gbmxtc2dfbmV3KE5MTVNHX0RFRkFVTFRfU0laRSwgZ2ZwKTsKKwlpZiAoIW1zZykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIDAsIDAsIDAsIE5MODAyMTFfQ01EX0FDVElPTik7CisJaWYgKCFoZHIpIHsKKwkJbmxtc2dfZnJlZShtc2cpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9XSVBIWSwgcmRldi0+d2lwaHlfaWR4KTsKKwlOTEFfUFVUX1UzMihtc2csIE5MODAyMTFfQVRUUl9JRklOREVYLCBuZXRkZXYtPmlmaW5kZXgpOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZX0ZSRVEsIGZyZXEpOworCU5MQV9QVVQobXNnLCBOTDgwMjExX0FUVFJfRlJBTUUsIGxlbiwgYnVmKTsKKworCWVyciA9IGdlbmxtc2dfZW5kKG1zZywgaGRyKTsKKwlpZiAoZXJyIDwgMCkgeworCQlubG1zZ19mcmVlKG1zZyk7CisJCXJldHVybiBlcnI7CisJfQorCisJZXJyID0gZ2VubG1zZ191bmljYXN0KHdpcGh5X25ldCgmcmRldi0+d2lwaHkpLCBtc2csIG5scGlkKTsKKwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKKworIG5sYV9wdXRfZmFpbHVyZToKKwlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CisJbmxtc2dfZnJlZShtc2cpOworCXJldHVybiAtRU5PQlVGUzsKK30KKwordm9pZCBubDgwMjExX3NlbmRfYWN0aW9uX3R4X3N0YXR1cyhzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTY0IGNvb2tpZSwKKwkJCQkgICBjb25zdCB1OCAqYnVmLCBzaXplX3QgbGVuLCBib29sIGFjaywKKwkJCQkgICBnZnBfdCBnZnApCit7CisJc3RydWN0IHNrX2J1ZmYgKm1zZzsKKwl2b2lkICpoZHI7CisKKwltc2cgPSBubG1zZ19uZXcoTkxNU0dfREVGQVVMVF9TSVpFLCBnZnApOworCWlmICghbXNnKQorCQlyZXR1cm47CisKKwloZHIgPSBubDgwMjExaGRyX3B1dChtc2csIDAsIDAsIDAsIE5MODAyMTFfQ01EX0FDVElPTl9UWF9TVEFUVVMpOworCWlmICghaGRyKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX1dJUEhZLCByZGV2LT53aXBoeV9pZHgpOworCU5MQV9QVVRfVTMyKG1zZywgTkw4MDIxMV9BVFRSX0lGSU5ERVgsIG5ldGRldi0+aWZpbmRleCk7CisJTkxBX1BVVChtc2csIE5MODAyMTFfQVRUUl9GUkFNRSwgbGVuLCBidWYpOworCU5MQV9QVVRfVTY0KG1zZywgTkw4MDIxMV9BVFRSX0NPT0tJRSwgY29va2llKTsKKwlpZiAoYWNrKQorCQlOTEFfUFVUX0ZMQUcobXNnLCBOTDgwMjExX0FUVFJfQUNLKTsKKworCWlmIChnZW5sbXNnX2VuZChtc2csIGhkcikgPCAwKSB7CisJCW5sbXNnX2ZyZWUobXNnKTsKKwkJcmV0dXJuOworCX0KKworCWdlbmxtc2dfbXVsdGljYXN0KG1zZywgMCwgbmw4MDIxMV9tbG1lX21jZ3JwLmlkLCBnZnApOworCXJldHVybjsKKworIG5sYV9wdXRfZmFpbHVyZToKKwlnZW5sbXNnX2NhbmNlbChtc2csIGhkcik7CisJbmxtc2dfZnJlZShtc2cpOworfQorCitzdGF0aWMgaW50IG5sODAyMTFfbmV0bGlua19ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICogbmIsCisJCQkJICB1bnNpZ25lZCBsb25nIHN0YXRlLAorCQkJCSAgdm9pZCAqX25vdGlmeSkKK3sKKwlzdHJ1Y3QgbmV0bGlua19ub3RpZnkgKm5vdGlmeSA9IF9ub3RpZnk7CisJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2OworCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXY7CisKKwlpZiAoc3RhdGUgIT0gTkVUTElOS19VUkVMRUFTRSkKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCisJcmN1X3JlYWRfbG9jaygpOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocmRldiwgJmNmZzgwMjExX3JkZXZfbGlzdCwgbGlzdCkKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uod2RldiwgJnJkZXYtPm5ldGRldl9saXN0LCBsaXN0KQorCQkJY2ZnODAyMTFfbWxtZV91bnJlZ2lzdGVyX2FjdGlvbnMod2Rldiwgbm90aWZ5LT5waWQpOworCisJcmN1X3JlYWRfdW5sb2NrKCk7CisKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbmw4MDIxMV9uZXRsaW5rX25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0gbmw4MDIxMV9uZXRsaW5rX25vdGlmeSwKK307CisKIC8qIGluaXRpYWxpc2F0aW9uL2V4aXQgZnVuY3Rpb25zICovCiAKIGludCBubDgwMjExX2luaXQodm9pZCkKQEAgLTUyMDYsNiArNTg5MSwxMCBAQAogCQlnb3RvIGVycl9vdXQ7CiAjZW5kaWYKIAorCWVyciA9IG5ldGxpbmtfcmVnaXN0ZXJfbm90aWZpZXIoJm5sODAyMTFfbmV0bGlua19ub3RpZmllcik7CisJaWYgKGVycikKKwkJZ290byBlcnJfb3V0OworCiAJcmV0dXJuIDA7CiAgZXJyX291dDoKIAlnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KCZubDgwMjExX2ZhbSk7CkBAIC01MjE0LDUgKzU5MDMsNiBAQAogCiB2b2lkIG5sODAyMTFfZXhpdCh2b2lkKQogeworCW5ldGxpbmtfdW5yZWdpc3Rlcl9ub3RpZmllcigmbmw4MDIxMV9uZXRsaW5rX25vdGlmaWVyKTsKIAlnZW5sX3VucmVnaXN0ZXJfZmFtaWx5KCZubDgwMjExX2ZhbSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oIGIvbmV0L3dpcmVsZXNzL25sODAyMTEuaAppbmRleCA0NGNjMmE3Li40Y2E1MTExMCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL25sODAyMTEuaAorKysgYi9uZXQvd2lyZWxlc3Mvbmw4MDIxMS5oCkBAIC01OSw0ICs1OSwyNyBAQAogCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBjb25zdCB1OCAqYnNzaWQsCiAJCQkgICAgIGdmcF90IGdmcCk7CiAKK3ZvaWQgbmw4MDIxMV9zZW5kX3JlbWFpbl9vbl9jaGFubmVsKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwKKwkJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICAgdTY0IGNvb2tpZSwKKwkJCQkgICAgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuLAorCQkJCSAgICBlbnVtIG5sODAyMTFfY2hhbm5lbF90eXBlIGNoYW5uZWxfdHlwZSwKKwkJCQkgICAgdW5zaWduZWQgaW50IGR1cmF0aW9uLCBnZnBfdCBnZnApOwordm9pZCBubDgwMjExX3NlbmRfcmVtYWluX29uX2NoYW5uZWxfY2FuY2VsKAorCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiwgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwl1NjQgY29va2llLCBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW4sCisJZW51bSBubDgwMjExX2NoYW5uZWxfdHlwZSBjaGFubmVsX3R5cGUsIGdmcF90IGdmcCk7CisKK3ZvaWQgbmw4MDIxMV9zZW5kX3N0YV9ldmVudChzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQkgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKm1hY19hZGRyLAorCQkJICAgIHN0cnVjdCBzdGF0aW9uX2luZm8gKnNpbmZvLCBnZnBfdCBnZnApOworCitpbnQgbmw4MDIxMV9zZW5kX2FjdGlvbihzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXYsCisJCQlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgbmxwaWQsIGludCBmcmVxLAorCQkJY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbiwgZ2ZwX3QgZ2ZwKTsKK3ZvaWQgbmw4MDIxMV9zZW5kX2FjdGlvbl90eF9zdGF0dXMoc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2LAorCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHU2NCBjb29raWUsCisJCQkJICAgY29uc3QgdTggKmJ1Ziwgc2l6ZV90IGxlbiwgYm9vbCBhY2ssCisJCQkJICAgZ2ZwX3QgZ2ZwKTsKKwogI2VuZGlmIC8qIF9fTkVUX1dJUkVMRVNTX05MODAyMTFfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JhZGlvdGFwLmMgYi9uZXQvd2lyZWxlc3MvcmFkaW90YXAuYwppbmRleCBmNTkxODcxLi4xMzMyYzQ0IDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmFkaW90YXAuYworKysgYi9uZXQvd2lyZWxlc3MvcmFkaW90YXAuYwpAQCAtMiw2ICsyLDE2IEBACiAgKiBSYWRpb3RhcCBwYXJzZXIKICAqCiAgKiBDb3B5cmlnaHQgMjAwNwkJQW5keSBHcmVlbiA8YW5keUB3YXJtY2F0LmNvbT4KKyAqIENvcHlyaWdodCAyMDA5CQlKb2hhbm5lcyBCZXJnIDxqb2hhbm5lc0BzaXBzb2x1dGlvbnMubmV0PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogQWx0ZXJuYXRpdmVseSwgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEJTRAorICogbGljZW5zZS4KKyAqCisgKiBTZWUgQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAKICNpbmNsdWRlIDxuZXQvY2ZnODAyMTEuaD4KQEAgLTEwLDYgKzIwLDM1IEBACiAKIC8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgYW5kIHJlbGF0ZWQgZGVmcyBhcmUgaW4gaW5jbHVkZS9uZXQvY2ZnODAyMTEuaCAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHJhZGlvdGFwX2FsaWduX3NpemUgcnRhcF9uYW1lc3BhY2Vfc2l6ZXNbXSA9IHsKKwlbSUVFRTgwMjExX1JBRElPVEFQX1RTRlRdID0geyAuYWxpZ24gPSA4LCAuc2l6ZSA9IDgsIH0sCisJW0lFRUU4MDIxMV9SQURJT1RBUF9GTEFHU10gPSB7IC5hbGlnbiA9IDEsIC5zaXplID0gMSwgfSwKKwlbSUVFRTgwMjExX1JBRElPVEFQX1JBVEVdID0geyAuYWxpZ24gPSAxLCAuc2l6ZSA9IDEsIH0sCisJW0lFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMXSA9IHsgLmFsaWduID0gMiwgLnNpemUgPSA0LCB9LAorCVtJRUVFODAyMTFfUkFESU9UQVBfRkhTU10gPSB7IC5hbGlnbiA9IDIsIC5zaXplID0gMiwgfSwKKwlbSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlRTSUdOQUxdID0geyAuYWxpZ24gPSAxLCAuc2l6ZSA9IDEsIH0sCisJW0lFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UTk9JU0VdID0geyAuYWxpZ24gPSAxLCAuc2l6ZSA9IDEsIH0sCisJW0lFRUU4MDIxMV9SQURJT1RBUF9MT0NLX1FVQUxJVFldID0geyAuYWxpZ24gPSAyLCAuc2l6ZSA9IDIsIH0sCisJW0lFRUU4MDIxMV9SQURJT1RBUF9UWF9BVFRFTlVBVElPTl0gPSB7IC5hbGlnbiA9IDIsIC5zaXplID0gMiwgfSwKKwlbSUVFRTgwMjExX1JBRElPVEFQX0RCX1RYX0FUVEVOVUFUSU9OXSA9IHsgLmFsaWduID0gMiwgLnNpemUgPSAyLCB9LAorCVtJRUVFODAyMTFfUkFESU9UQVBfREJNX1RYX1BPV0VSXSA9IHsgLmFsaWduID0gMSwgLnNpemUgPSAxLCB9LAorCVtJRUVFODAyMTFfUkFESU9UQVBfQU5URU5OQV0gPSB7IC5hbGlnbiA9IDEsIC5zaXplID0gMSwgfSwKKwlbSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVFNJR05BTF0gPSB7IC5hbGlnbiA9IDEsIC5zaXplID0gMSwgfSwKKwlbSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVE5PSVNFXSA9IHsgLmFsaWduID0gMSwgLnNpemUgPSAxLCB9LAorCVtJRUVFODAyMTFfUkFESU9UQVBfUlhfRkxBR1NdID0geyAuYWxpZ24gPSAyLCAuc2l6ZSA9IDIsIH0sCisJW0lFRUU4MDIxMV9SQURJT1RBUF9UWF9GTEFHU10gPSB7IC5hbGlnbiA9IDIsIC5zaXplID0gMiwgfSwKKwlbSUVFRTgwMjExX1JBRElPVEFQX1JUU19SRVRSSUVTXSA9IHsgLmFsaWduID0gMSwgLnNpemUgPSAxLCB9LAorCVtJRUVFODAyMTFfUkFESU9UQVBfREFUQV9SRVRSSUVTXSA9IHsgLmFsaWduID0gMSwgLnNpemUgPSAxLCB9LAorCS8qCisJICogYWRkIG1vcmUgaGVyZSBhcyB0aGV5IGFyZSBkZWZpbmVkIGluIHJhZGlvdGFwLmgKKwkgKi8KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX25hbWVzcGFjZSByYWRpb3RhcF9ucyA9IHsKKwkubl9iaXRzID0gc2l6ZW9mKHJ0YXBfbmFtZXNwYWNlX3NpemVzKSAvIHNpemVvZihydGFwX25hbWVzcGFjZV9zaXplc1swXSksCisJLmFsaWduX3NpemUgPSBydGFwX25hbWVzcGFjZV9zaXplcywKK307CisKIC8qKgogICogaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX2luaXQgLSByYWRpb3RhcCBwYXJzZXIgaXRlcmF0b3IgaW5pdGlhbGl6YXRpb24KICAqIEBpdGVyYXRvcjogcmFkaW90YXBfaXRlcmF0b3IgdG8gaW5pdGlhbGl6ZQpAQCAtNTAsOSArODksOSBAQAogICovCiAKIGludCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3JfaW5pdCgKLSAgICBzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yICppdGVyYXRvciwKLSAgICBzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqcmFkaW90YXBfaGVhZGVyLAotICAgIGludCBtYXhfbGVuZ3RoKQorCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgKml0ZXJhdG9yLAorCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICpyYWRpb3RhcF9oZWFkZXIsCisJaW50IG1heF9sZW5ndGgsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfdmVuZG9yX25hbWVzcGFjZXMgKnZucykKIHsKIAkvKiBMaW51eCBvbmx5IHN1cHBvcnRzIHZlcnNpb24gMCByYWRpb3RhcCBmb3JtYXQgKi8KIAlpZiAocmFkaW90YXBfaGVhZGVyLT5pdF92ZXJzaW9uKQpAQCAtNjIsMTkgKzEwMSwyNCBAQAogCWlmIChtYXhfbGVuZ3RoIDwgZ2V0X3VuYWxpZ25lZF9sZTE2KCZyYWRpb3RhcF9oZWFkZXItPml0X2xlbikpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaXRlcmF0b3ItPnJ0aGVhZGVyID0gcmFkaW90YXBfaGVhZGVyOwotCWl0ZXJhdG9yLT5tYXhfbGVuZ3RoID0gZ2V0X3VuYWxpZ25lZF9sZTE2KCZyYWRpb3RhcF9oZWFkZXItPml0X2xlbik7Ci0JaXRlcmF0b3ItPmFyZ19pbmRleCA9IDA7Ci0JaXRlcmF0b3ItPmJpdG1hcF9zaGlmdGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCZyYWRpb3RhcF9oZWFkZXItPml0X3ByZXNlbnQpOwotCWl0ZXJhdG9yLT5hcmcgPSAodTggKilyYWRpb3RhcF9oZWFkZXIgKyBzaXplb2YoKnJhZGlvdGFwX2hlYWRlcik7Ci0JaXRlcmF0b3ItPnRoaXNfYXJnID0gTlVMTDsKKwlpdGVyYXRvci0+X3J0aGVhZGVyID0gcmFkaW90YXBfaGVhZGVyOworCWl0ZXJhdG9yLT5fbWF4X2xlbmd0aCA9IGdldF91bmFsaWduZWRfbGUxNigmcmFkaW90YXBfaGVhZGVyLT5pdF9sZW4pOworCWl0ZXJhdG9yLT5fYXJnX2luZGV4ID0gMDsKKwlpdGVyYXRvci0+X2JpdG1hcF9zaGlmdGVyID0gZ2V0X3VuYWxpZ25lZF9sZTMyKCZyYWRpb3RhcF9oZWFkZXItPml0X3ByZXNlbnQpOworCWl0ZXJhdG9yLT5fYXJnID0gKHVpbnQ4X3QgKilyYWRpb3RhcF9oZWFkZXIgKyBzaXplb2YoKnJhZGlvdGFwX2hlYWRlcik7CisJaXRlcmF0b3ItPl9yZXNldF9vbl9leHQgPSAwOworCWl0ZXJhdG9yLT5fbmV4dF9iaXRtYXAgPSAmcmFkaW90YXBfaGVhZGVyLT5pdF9wcmVzZW50OworCWl0ZXJhdG9yLT5fbmV4dF9iaXRtYXArKzsKKwlpdGVyYXRvci0+X3ZucyA9IHZuczsKKwlpdGVyYXRvci0+Y3VycmVudF9uYW1lc3BhY2UgPSAmcmFkaW90YXBfbnM7CisJaXRlcmF0b3ItPmlzX3JhZGlvdGFwX25zID0gMTsKIAogCS8qIGZpbmQgcGF5bG9hZCBzdGFydCBhbGxvd2luZyBmb3IgZXh0ZW5kZWQgYml0bWFwKHMpICovCiAKLQlpZiAodW5saWtlbHkoaXRlcmF0b3ItPmJpdG1hcF9zaGlmdGVyICYgKDE8PElFRUU4MDIxMV9SQURJT1RBUF9FWFQpKSkgewotCQl3aGlsZSAoZ2V0X3VuYWxpZ25lZF9sZTMyKGl0ZXJhdG9yLT5hcmcpICYKLQkJICAgICAgICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9FWFQpKSB7Ci0JCQlpdGVyYXRvci0+YXJnICs9IHNpemVvZih1MzIpOworCWlmIChpdGVyYXRvci0+X2JpdG1hcF9zaGlmdGVyICYgKDE8PElFRUU4MDIxMV9SQURJT1RBUF9FWFQpKSB7CisJCXdoaWxlIChnZXRfdW5hbGlnbmVkX2xlMzIoaXRlcmF0b3ItPl9hcmcpICYKKwkJCQkJKDEgPDwgSUVFRTgwMjExX1JBRElPVEFQX0VYVCkpIHsKKwkJCWl0ZXJhdG9yLT5fYXJnICs9IHNpemVvZih1aW50MzJfdCk7CiAKIAkJCS8qCiAJCQkgKiBjaGVjayBmb3IgaW5zYW5pdHkgd2hlcmUgdGhlIHByZXNlbnQgYml0bWFwcwpAQCAtODIsMTIgKzEyNiwxMyBAQAogCQkJICogc3RhdGVkIHJhZGlvdGFwIGhlYWRlciBsZW5ndGgKIAkJCSAqLwogCi0JCQlpZiAoKCh1bG9uZylpdGVyYXRvci0+YXJnIC0KLQkJCSAgICAgKHVsb25nKWl0ZXJhdG9yLT5ydGhlYWRlcikgPiBpdGVyYXRvci0+bWF4X2xlbmd0aCkKKwkJCWlmICgodW5zaWduZWQgbG9uZylpdGVyYXRvci0+X2FyZyAtCisJCQkgICAgKHVuc2lnbmVkIGxvbmcpaXRlcmF0b3ItPl9ydGhlYWRlciA+CisJCQkgICAgKHVuc2lnbmVkIGxvbmcpaXRlcmF0b3ItPl9tYXhfbGVuZ3RoKQogCQkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJaXRlcmF0b3ItPmFyZyArPSBzaXplb2YodTMyKTsKKwkJaXRlcmF0b3ItPl9hcmcgKz0gc2l6ZW9mKHVpbnQzMl90KTsKIAogCQkvKgogCQkgKiBubyBuZWVkIHRvIGNoZWNrIGFnYWluIGZvciBibG93aW5nIHBhc3Qgc3RhdGVkIHJhZGlvdGFwCkBAIC05NiwxMiArMTQxLDM2IEBACiAJCSAqLwogCX0KIAorCWl0ZXJhdG9yLT50aGlzX2FyZyA9IGl0ZXJhdG9yLT5fYXJnOworCiAJLyogd2UgYXJlIGFsbCBpbml0aWFsaXplZCBoYXBwaWx5ICovCiAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX2luaXQpOwogCitzdGF0aWMgdm9pZCBmaW5kX25zKHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgKml0ZXJhdG9yLAorCQkgICAgdWludDMyX3Qgb3VpLCB1aW50OF90IHN1Ym5zKQoreworCWludCBpOworCisJaXRlcmF0b3ItPmN1cnJlbnRfbmFtZXNwYWNlID0gTlVMTDsKKworCWlmICghaXRlcmF0b3ItPl92bnMpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBpdGVyYXRvci0+X3Zucy0+bl9uczsgaSsrKSB7CisJCWlmIChpdGVyYXRvci0+X3Zucy0+bnNbaV0ub3VpICE9IG91aSkKKwkJCWNvbnRpbnVlOworCQlpZiAoaXRlcmF0b3ItPl92bnMtPm5zW2ldLnN1Ym5zICE9IHN1Ym5zKQorCQkJY29udGludWU7CisKKwkJaXRlcmF0b3ItPmN1cnJlbnRfbmFtZXNwYWNlID0gJml0ZXJhdG9yLT5fdm5zLT5uc1tpXTsKKwkJYnJlYWs7CisJfQorfQorCisKIAogLyoqCiAgKiBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3JfbmV4dCAtIHJldHVybiBuZXh0IHJhZGlvdGFwIHBhcnNlciBpdGVyYXRvciBhcmcKQEAgLTEyNyw5OSArMTk2LDgwIEBACiAgKi8KIAogaW50IGllZWU4MDIxMV9yYWRpb3RhcF9pdGVyYXRvcl9uZXh0KAotICAgIHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgKml0ZXJhdG9yKQorCXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaXRlcmF0b3IgKml0ZXJhdG9yKQogewotCi0JLyoKLQkgKiBzbWFsbCBsZW5ndGggbG9va3VwIHRhYmxlIGZvciBhbGwgcmFkaW90YXAgdHlwZXMgd2UgaGVhcmQgb2YKLQkgKiBzdGFydGluZyBmcm9tIGIwIGluIHRoZSBiaXRtYXAsIHNvIHdlIGNhbiB3YWxrIHRoZSBwYXlsb2FkCi0JICogYXJlYSBvZiB0aGUgcmFkaW90YXAgaGVhZGVyCi0JICoKLQkgKiBUaGVyZSBpcyBhIHJlcXVpcmVtZW50IHRvIHBhZCBhcmdzLCBzbyB0aGF0IGFyZ3MKLQkgKiBvZiBhIGdpdmVuIGxlbmd0aCBtdXN0IGJlZ2luIGF0IGEgYm91bmRhcnkgb2YgdGhhdCBsZW5ndGgKLQkgKiAtLSBidXQgbm90ZSB0aGF0IGNvbXBvdW5kIGFyZ3MgYXJlIGFsbG93ZWQgKGVnLCAyIHggdTE2Ci0JICogZm9yIElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMKSBzbyB0b3RhbCBhcmcgbGVuZ3RoIGlzIG5vdAotCSAqIGEgcmVsaWFibGUgaW5kaWNhdG9yIG9mIGFsaWdubWVudCByZXF1aXJlbWVudC4KLQkgKgotCSAqIHVwcGVyIG55YmJsZTogY29udGVudCBhbGlnbm1lbnQgZm9yIGFyZwotCSAqIGxvd2VyIG55YmJsZTogY29udGVudCBsZW5ndGggZm9yIGFyZwotCSAqLwotCi0Jc3RhdGljIGNvbnN0IHU4IHJ0X3NpemVzW10gPSB7Ci0JCVtJRUVFODAyMTFfUkFESU9UQVBfVFNGVF0gPSAweDg4LAotCQlbSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTXSA9IDB4MTEsCi0JCVtJRUVFODAyMTFfUkFESU9UQVBfUkFURV0gPSAweDExLAotCQlbSUVFRTgwMjExX1JBRElPVEFQX0NIQU5ORUxdID0gMHgyNCwKLQkJW0lFRUU4MDIxMV9SQURJT1RBUF9GSFNTXSA9IDB4MjIsCi0JCVtJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTF0gPSAweDExLAotCQlbSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlROT0lTRV0gPSAweDExLAotCQlbSUVFRTgwMjExX1JBRElPVEFQX0xPQ0tfUVVBTElUWV0gPSAweDIyLAotCQlbSUVFRTgwMjExX1JBRElPVEFQX1RYX0FUVEVOVUFUSU9OXSA9IDB4MjIsCi0JCVtJRUVFODAyMTFfUkFESU9UQVBfREJfVFhfQVRURU5VQVRJT05dID0gMHgyMiwKLQkJW0lFRUU4MDIxMV9SQURJT1RBUF9EQk1fVFhfUE9XRVJdID0gMHgxMSwKLQkJW0lFRUU4MDIxMV9SQURJT1RBUF9BTlRFTk5BXSA9IDB4MTEsCi0JCVtJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UU0lHTkFMXSA9IDB4MTEsCi0JCVtJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UTk9JU0VdID0gMHgxMSwKLQkJW0lFRUU4MDIxMV9SQURJT1RBUF9SWF9GTEFHU10gPSAweDIyLAotCQlbSUVFRTgwMjExX1JBRElPVEFQX1RYX0ZMQUdTXSA9IDB4MjIsCi0JCVtJRUVFODAyMTFfUkFESU9UQVBfUlRTX1JFVFJJRVNdID0gMHgxMSwKLQkJW0lFRUU4MDIxMV9SQURJT1RBUF9EQVRBX1JFVFJJRVNdID0gMHgxMSwKLQkJLyoKLQkJICogYWRkIG1vcmUgaGVyZSBhcyB0aGV5IGFyZSBkZWZpbmVkIGluCi0JCSAqIGluY2x1ZGUvbmV0L2llZWU4MDIxMV9yYWRpb3RhcC5oCi0JCSAqLwotCX07Ci0KLQkvKgotCSAqIGZvciBldmVyeSByYWRpb3RhcCBlbnRyeSB3ZSBjYW4gYXQKLQkgKiBsZWFzdCBza2lwIChieSBrbm93aW5nIHRoZSBsZW5ndGgpLi4uCi0JICovCi0KLQl3aGlsZSAoaXRlcmF0b3ItPmFyZ19pbmRleCA8IHNpemVvZihydF9zaXplcykpIHsKKwl3aGlsZSAoMSkgewogCQlpbnQgaGl0ID0gMDsKLQkJaW50IHBhZDsKKwkJaW50IHBhZCwgYWxpZ24sIHNpemUsIHN1Ym5zLCB2bnNsZW47CisJCXVpbnQzMl90IG91aTsKIAotCQlpZiAoIShpdGVyYXRvci0+Yml0bWFwX3NoaWZ0ZXIgJiAxKSkKKwkJLyogaWYgbm8gbW9yZSBFWFQgYml0cywgdGhhdCdzIGl0ICovCisJCWlmICgoaXRlcmF0b3ItPl9hcmdfaW5kZXggJSAzMikgPT0gSUVFRTgwMjExX1JBRElPVEFQX0VYVCAmJgorCQkgICAgIShpdGVyYXRvci0+X2JpdG1hcF9zaGlmdGVyICYgMSkpCisJCQlyZXR1cm4gLUVOT0VOVDsKKworCQlpZiAoIShpdGVyYXRvci0+X2JpdG1hcF9zaGlmdGVyICYgMSkpCiAJCQlnb3RvIG5leHRfZW50cnk7IC8qIGFyZyBub3QgcHJlc2VudCAqLwogCisJCS8qIGdldCBhbGlnbm1lbnQvc2l6ZSBvZiBkYXRhICovCisJCXN3aXRjaCAoaXRlcmF0b3ItPl9hcmdfaW5kZXggJSAzMikgeworCQljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9SQURJT1RBUF9OQU1FU1BBQ0U6CisJCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0VYVDoKKwkJCWFsaWduID0gMTsKKwkJCXNpemUgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX1ZFTkRPUl9OQU1FU1BBQ0U6CisJCQlhbGlnbiA9IDI7CisJCQlzaXplID0gNjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJaWYgKCFpdGVyYXRvci0+Y3VycmVudF9uYW1lc3BhY2UgfHwKKwkJCSAgICBpdGVyYXRvci0+X2FyZ19pbmRleCA+PSBpdGVyYXRvci0+Y3VycmVudF9uYW1lc3BhY2UtPm5fYml0cykgeworCQkJCWlmIChpdGVyYXRvci0+Y3VycmVudF9uYW1lc3BhY2UgPT0gJnJhZGlvdGFwX25zKQorCQkJCQlyZXR1cm4gLUVOT0VOVDsKKwkJCQlhbGlnbiA9IDA7CisJCQl9IGVsc2UgeworCQkJCWFsaWduID0gaXRlcmF0b3ItPmN1cnJlbnRfbmFtZXNwYWNlLT5hbGlnbl9zaXplW2l0ZXJhdG9yLT5fYXJnX2luZGV4XS5hbGlnbjsKKwkJCQlzaXplID0gaXRlcmF0b3ItPmN1cnJlbnRfbmFtZXNwYWNlLT5hbGlnbl9zaXplW2l0ZXJhdG9yLT5fYXJnX2luZGV4XS5zaXplOworCQkJfQorCQkJaWYgKCFhbGlnbikgeworCQkJCS8qIHNraXAgYWxsIHN1YnNlcXVlbnQgZGF0YSAqLworCQkJCWl0ZXJhdG9yLT5fYXJnID0gaXRlcmF0b3ItPl9uZXh0X25zX2RhdGE7CisJCQkJLyogZ2l2ZSB1cCBvbiB0aGlzIG5hbWVzcGFjZSAqLworCQkJCWl0ZXJhdG9yLT5jdXJyZW50X25hbWVzcGFjZSA9IE5VTEw7CisJCQkJZ290byBuZXh0X2VudHJ5OworCQkJfQorCQkJYnJlYWs7CisJCX0KKwogCQkvKgogCQkgKiBhcmcgaXMgcHJlc2VudCwgYWNjb3VudCBmb3IgYWxpZ25tZW50IHBhZGRpbmcKLQkJICogIDgtYml0IGFyZ3MgY2FuIGJlIGF0IGFueSBhbGlnbm1lbnQKLQkJICogMTYtYml0IGFyZ3MgbXVzdCBzdGFydCBvbiAxNi1iaXQgYm91bmRhcnkKLQkJICogMzItYml0IGFyZ3MgbXVzdCBzdGFydCBvbiAzMi1iaXQgYm91bmRhcnkKLQkJICogNjQtYml0IGFyZ3MgbXVzdCBzdGFydCBvbiA2NC1iaXQgYm91bmRhcnkKIAkJICoKLQkJICogbm90ZSB0aGF0IHRvdGFsIGFyZyBzaXplIGNhbiBkaWZmZXIgZnJvbSBhbGlnbm1lbnQgb2YKLQkJICogZWxlbWVudHMgaW5zaWRlIGFyZywgc28gd2UgdXNlIHVwcGVyIG55YmJsZSBvZiBsZW5ndGgKLQkJICogdGFibGUgdG8gYmFzZSBhbGlnbm1lbnQgb24KLQkJICoKLQkJICogYWxzbyBub3RlOiB0aGVzZSBhbGlnbm1lbnRzIGFyZSAqKiByZWxhdGl2ZSB0byB0aGUKLQkJICogc3RhcnQgb2YgdGhlIHJhZGlvdGFwIGhlYWRlciAqKi4gIFRoZXJlIGlzIG5vIGd1YXJhbnRlZQorCQkgKiBOb3RlIHRoYXQgdGhlc2UgYWxpZ25tZW50cyBhcmUgcmVsYXRpdmUgdG8gdGhlIHN0YXJ0CisJCSAqIG9mIHRoZSByYWRpb3RhcCBoZWFkZXIuICBUaGVyZSBpcyBubyBndWFyYW50ZWUKIAkJICogdGhhdCB0aGUgcmFkaW90YXAgaGVhZGVyIGl0c2VsZiBpcyBhbGlnbmVkIG9uIGFueQogCQkgKiBraW5kIG9mIGJvdW5kYXJ5LgogCQkgKgotCQkgKiB0aGUgYWJvdmUgaXMgd2h5IGdldF91bmFsaWduZWQoKSBpcyB1c2VkIHRvIGRlcmVmZXJlbmNlCi0JCSAqIG11bHRpYnl0ZSBlbGVtZW50cyBmcm9tIHRoZSByYWRpb3RhcCBhcmVhCisJCSAqIFRoZSBhYm92ZSBpcyB3aHkgZ2V0X3VuYWxpZ25lZCgpIGlzIHVzZWQgdG8gZGVyZWZlcmVuY2UKKwkJICogbXVsdGlieXRlIGVsZW1lbnRzIGZyb20gdGhlIHJhZGlvdGFwIGFyZWEuCiAJCSAqLwogCi0JCXBhZCA9ICgoKHVsb25nKWl0ZXJhdG9yLT5hcmcpIC0KLQkJCSgodWxvbmcpaXRlcmF0b3ItPnJ0aGVhZGVyKSkgJgotCQkJKChydF9zaXplc1tpdGVyYXRvci0+YXJnX2luZGV4XSA+PiA0KSAtIDEpOworCQlwYWQgPSAoKHVuc2lnbmVkIGxvbmcpaXRlcmF0b3ItPl9hcmcgLQorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpaXRlcmF0b3ItPl9ydGhlYWRlcikgJiAoYWxpZ24gLSAxKTsKIAogCQlpZiAocGFkKQotCQkJaXRlcmF0b3ItPmFyZyArPQotCQkJCShydF9zaXplc1tpdGVyYXRvci0+YXJnX2luZGV4XSA+PiA0KSAtIHBhZDsKKwkJCWl0ZXJhdG9yLT5fYXJnICs9IGFsaWduIC0gcGFkOwogCiAJCS8qCiAJCSAqIHRoaXMgaXMgd2hhdCB3ZSB3aWxsIHJldHVybiB0byB1c2VyLCBidXQgd2UgbmVlZCB0bwogCQkgKiBtb3ZlIG9uIGZpcnN0IHNvIG5leHQgY2FsbCBoYXMgc29tZXRoaW5nIGZyZXNoIHRvIHRlc3QKIAkJICovCi0JCWl0ZXJhdG9yLT50aGlzX2FyZ19pbmRleCA9IGl0ZXJhdG9yLT5hcmdfaW5kZXg7Ci0JCWl0ZXJhdG9yLT50aGlzX2FyZyA9IGl0ZXJhdG9yLT5hcmc7Ci0JCWhpdCA9IDE7CisJCWl0ZXJhdG9yLT50aGlzX2FyZ19pbmRleCA9IGl0ZXJhdG9yLT5fYXJnX2luZGV4OworCQlpdGVyYXRvci0+dGhpc19hcmcgPSBpdGVyYXRvci0+X2FyZzsKKwkJaXRlcmF0b3ItPnRoaXNfYXJnX3NpemUgPSBzaXplOwogCiAJCS8qIGludGVybmFsbHkgbW92ZSBvbiB0aGUgc2l6ZSBvZiB0aGlzIGFyZyAqLwotCQlpdGVyYXRvci0+YXJnICs9IHJ0X3NpemVzW2l0ZXJhdG9yLT5hcmdfaW5kZXhdICYgMHgwZjsKKwkJaXRlcmF0b3ItPl9hcmcgKz0gc2l6ZTsKIAogCQkvKgogCQkgKiBjaGVjayBmb3IgaW5zYW5pdHkgd2hlcmUgd2UgYXJlIGdpdmVuIGEgYml0bWFwIHRoYXQKQEAgLTIyOCwzMiArMjc4LDczIEBACiAJCSAqIG1heF9sZW5ndGggb24gdGhlIGxhc3QgYXJnLCBuZXZlciBleGNlZWRpbmcgaXQuCiAJCSAqLwogCi0JCWlmICgoKHVsb25nKWl0ZXJhdG9yLT5hcmcgLSAodWxvbmcpaXRlcmF0b3ItPnJ0aGVhZGVyKSA+Ci0JCSAgICBpdGVyYXRvci0+bWF4X2xlbmd0aCkKKwkJaWYgKCh1bnNpZ25lZCBsb25nKWl0ZXJhdG9yLT5fYXJnIC0KKwkJICAgICh1bnNpZ25lZCBsb25nKWl0ZXJhdG9yLT5fcnRoZWFkZXIgPgorCQkgICAgKHVuc2lnbmVkIGxvbmcpaXRlcmF0b3ItPl9tYXhfbGVuZ3RoKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQluZXh0X2VudHJ5OgotCQlpdGVyYXRvci0+YXJnX2luZGV4Kys7Ci0JCWlmICh1bmxpa2VseSgoaXRlcmF0b3ItPmFyZ19pbmRleCAmIDMxKSA9PSAwKSkgewotCQkJLyogY29tcGxldGVkIGN1cnJlbnQgdTMyIGJpdG1hcCAqLwotCQkJaWYgKGl0ZXJhdG9yLT5iaXRtYXBfc2hpZnRlciAmIDEpIHsKLQkJCQkvKiBiMzEgd2FzIHNldCwgdGhlcmUgaXMgbW9yZSAqLwotCQkJCS8qIG1vdmUgdG8gbmV4dCB1MzIgYml0bWFwICovCi0JCQkJaXRlcmF0b3ItPmJpdG1hcF9zaGlmdGVyID0KLQkJCQkgICAgZ2V0X3VuYWxpZ25lZF9sZTMyKGl0ZXJhdG9yLT5uZXh0X2JpdG1hcCk7Ci0JCQkJaXRlcmF0b3ItPm5leHRfYml0bWFwKys7Ci0JCQl9IGVsc2UKLQkJCQkvKiBubyBtb3JlIGJpdG1hcHM6IGVuZCAqLwotCQkJCWl0ZXJhdG9yLT5hcmdfaW5kZXggPSBzaXplb2YocnRfc2l6ZXMpOwotCQl9IGVsc2UgLyoganVzdCB0cnkgdGhlIG5leHQgYml0ICovCi0JCQlpdGVyYXRvci0+Yml0bWFwX3NoaWZ0ZXIgPj49IDE7CisJCS8qIHRoZXNlIHNwZWNpYWwgb25lcyBhcmUgdmFsaWQgaW4gZWFjaCBiaXRtYXAgd29yZCAqLworCQlzd2l0Y2ggKGl0ZXJhdG9yLT5fYXJnX2luZGV4ICUgMzIpIHsKKwkJY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfVkVORE9SX05BTUVTUEFDRToKKwkJCWl0ZXJhdG9yLT5fYml0bWFwX3NoaWZ0ZXIgPj49IDE7CisJCQlpdGVyYXRvci0+X2FyZ19pbmRleCsrOworCisJCQlpdGVyYXRvci0+X3Jlc2V0X29uX2V4dCA9IDE7CisKKwkJCXZuc2xlbiA9IGdldF91bmFsaWduZWRfbGUxNihpdGVyYXRvci0+dGhpc19hcmcgKyA0KTsKKwkJCWl0ZXJhdG9yLT5fbmV4dF9uc19kYXRhID0gaXRlcmF0b3ItPl9hcmcgKyB2bnNsZW47CisJCQlvdWkgPSAoKml0ZXJhdG9yLT50aGlzX2FyZyA8PCAxNikgfAorCQkJCSgqKGl0ZXJhdG9yLT50aGlzX2FyZyArIDEpIDw8IDgpIHwKKwkJCQkqKGl0ZXJhdG9yLT50aGlzX2FyZyArIDIpOworCQkJc3VibnMgPSAqKGl0ZXJhdG9yLT50aGlzX2FyZyArIDMpOworCisJCQlmaW5kX25zKGl0ZXJhdG9yLCBvdWksIHN1Ym5zKTsKKworCQkJaXRlcmF0b3ItPmlzX3JhZGlvdGFwX25zID0gMDsKKwkJCS8qIGFsbG93IHBhcnNlcnMgdG8gc2hvdyB0aGlzIGluZm9ybWF0aW9uICovCisJCQlpdGVyYXRvci0+dGhpc19hcmdfaW5kZXggPQorCQkJCUlFRUU4MDIxMV9SQURJT1RBUF9WRU5ET1JfTkFNRVNQQUNFOworCQkJaXRlcmF0b3ItPnRoaXNfYXJnX3NpemUgKz0gdm5zbGVuOworCQkJaWYgKCh1bnNpZ25lZCBsb25nKWl0ZXJhdG9yLT50aGlzX2FyZyArCisJCQkgICAgaXRlcmF0b3ItPnRoaXNfYXJnX3NpemUgLQorCQkJICAgICh1bnNpZ25lZCBsb25nKWl0ZXJhdG9yLT5fcnRoZWFkZXIgPgorCQkJICAgICh1bnNpZ25lZCBsb25nKSh1bnNpZ25lZCBsb25nKWl0ZXJhdG9yLT5fbWF4X2xlbmd0aCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWhpdCA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfUkFESU9UQVBfTkFNRVNQQUNFOgorCQkJaXRlcmF0b3ItPl9iaXRtYXBfc2hpZnRlciA+Pj0gMTsKKwkJCWl0ZXJhdG9yLT5fYXJnX2luZGV4Kys7CisKKwkJCWl0ZXJhdG9yLT5fcmVzZXRfb25fZXh0ID0gMTsKKwkJCWl0ZXJhdG9yLT5jdXJyZW50X25hbWVzcGFjZSA9ICZyYWRpb3RhcF9uczsKKwkJCWl0ZXJhdG9yLT5pc19yYWRpb3RhcF9ucyA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfRVhUOgorCQkJLyoKKwkJCSAqIGJpdCAzMSB3YXMgc2V0LCB0aGVyZSBpcyBtb3JlCisJCQkgKiAtLSBtb3ZlIHRvIG5leHQgdTMyIGJpdG1hcAorCQkJICovCisJCQlpdGVyYXRvci0+X2JpdG1hcF9zaGlmdGVyID0KKwkJCQlnZXRfdW5hbGlnbmVkX2xlMzIoaXRlcmF0b3ItPl9uZXh0X2JpdG1hcCk7CisJCQlpdGVyYXRvci0+X25leHRfYml0bWFwKys7CisJCQlpZiAoaXRlcmF0b3ItPl9yZXNldF9vbl9leHQpCisJCQkJaXRlcmF0b3ItPl9hcmdfaW5kZXggPSAwOworCQkJZWxzZQorCQkJCWl0ZXJhdG9yLT5fYXJnX2luZGV4Kys7CisJCQlpdGVyYXRvci0+X3Jlc2V0X29uX2V4dCA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCS8qIHdlJ3ZlIGdvdCBhIGhpdCEgKi8KKwkJCWhpdCA9IDE7CisgbmV4dF9lbnRyeToKKwkJCWl0ZXJhdG9yLT5fYml0bWFwX3NoaWZ0ZXIgPj49IDE7CisJCQlpdGVyYXRvci0+X2FyZ19pbmRleCsrOworCQl9CiAKIAkJLyogaWYgd2UgZm91bmQgYSB2YWxpZCBhcmcgZWFybGllciwgcmV0dXJuIGl0IG5vdyAqLwogCQlpZiAoaGl0KQogCQkJcmV0dXJuIDA7CiAJfQotCi0JLyogd2UgZG9uJ3Qga25vdyBob3cgdG8gaGFuZGxlIGFueSBtb3JlIGFyZ3MsIHdlJ3JlIGRvbmUgKi8KLQlyZXR1cm4gLUVOT0VOVDsKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX3JhZGlvdGFwX2l0ZXJhdG9yX25leHQpOwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZy5jIGIvbmV0L3dpcmVsZXNzL3JlZy5jCmluZGV4IDdhMDc1NGMuLmVkODljNTkgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9yZWcuYworKysgYi9uZXQvd2lyZWxlc3MvcmVnLmMKQEAgLTQwLDggKzQwLDE4IEBACiAjaW5jbHVkZSA8bmV0L2NmZzgwMjExLmg+CiAjaW5jbHVkZSAiY29yZS5oIgogI2luY2x1ZGUgInJlZy5oIgorI2luY2x1ZGUgInJlZ2RiLmgiCiAjaW5jbHVkZSAibmw4MDIxMS5oIgogCisjaWZkZWYgQ09ORklHX0NGRzgwMjExX1JFR19ERUJVRworI2RlZmluZSBSRUdfREJHX1BSSU5UKGZvcm1hdCwgYXJncy4uLikgXAorCWRvIHsgXAorCQlwcmludGsoS0VSTl9ERUJVRyBmb3JtYXQgLCAjIyBhcmdzKTsgXAorCX0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBSRUdfREJHX1BSSU5UKGFyZ3MuLi4pCisjZW5kaWYKKwogLyogUmVjZWlwdCBvZiBpbmZvcm1hdGlvbiBmcm9tIGxhc3QgcmVndWxhdG9yeSByZXF1ZXN0ICovCiBzdGF0aWMgc3RydWN0IHJlZ3VsYXRvcnlfcmVxdWVzdCAqbGFzdF9yZXF1ZXN0OwogCkBAIC0xMjQsODIgKzEzNCwxMSBAQAogCSZ3b3JsZF9yZWdkb207CiAKIHN0YXRpYyBjaGFyICppZWVlODAyMTFfcmVnZG9tID0gIjAwIjsKK3N0YXRpYyBjaGFyIHVzZXJfYWxwaGEyWzJdOwogCiBtb2R1bGVfcGFyYW0oaWVlZTgwMjExX3JlZ2RvbSwgY2hhcnAsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpZWVlODAyMTFfcmVnZG9tLCAiSUVFRSA4MDIuMTEgcmVndWxhdG9yeSBkb21haW4gY29kZSIpOwogCi0jaWZkZWYgQ09ORklHX1dJUkVMRVNTX09MRF9SRUdVTEFUT1JZCi0vKgotICogV2UgYXNzdW1lIDQwIE1IeiBiYW5kd2lkdGggZm9yIHRoZSBvbGQgcmVndWxhdG9yeSB3b3JrLgotICogV2UgbWFrZSBlbXBoYXNpcyB3ZSBhcmUgdXNpbmcgdGhlIGV4YWN0IHNhbWUgZnJlcXVlbmNpZXMKLSAqIGFzIGJlZm9yZQotICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiB1c19yZWdkb20gPSB7Ci0JLm5fcmVnX3J1bGVzID0gNiwKLQkuYWxwaGEyID0gICJVUyIsCi0JLnJlZ19ydWxlcyA9IHsKLQkJLyogSUVFRSA4MDIuMTFiL2csIGNoYW5uZWxzIDEuLjExICovCi0JCVJFR19SVUxFKDI0MTItMTAsIDI0NjIrMTAsIDQwLCA2LCAyNywgMCksCi0JCS8qIElFRUUgODAyLjExYSwgY2hhbm5lbCAzNi4uNDggKi8KLQkJUkVHX1JVTEUoNTE4MC0xMCwgNTI0MCsxMCwgNDAsIDYsIDE3LCAwKSwKLQkJLyogSUVFRSA4MDIuMTFhLCBjaGFubmVscyA0OC4uNjQgKi8KLQkJUkVHX1JVTEUoNTI2MC0xMCwgNTMyMCsxMCwgNDAsIDYsIDIwLCBOTDgwMjExX1JSRl9ERlMpLAotCQkvKiBJRUVFIDgwMi4xMWEsIGNoYW5uZWxzIDEwMC4uMTI0ICovCi0JCVJFR19SVUxFKDU1MDAtMTAsIDU1OTArMTAsIDQwLCA2LCAyMCwgTkw4MDIxMV9SUkZfREZTKSwKLQkJLyogSUVFRSA4MDIuMTFhLCBjaGFubmVscyAxMzIuLjE0NCAqLwotCQlSRUdfUlVMRSg1NjYwLTEwLCA1NzAwKzEwLCA0MCwgNiwgMjAsIE5MODAyMTFfUlJGX0RGUyksCi0JCS8qIElFRUUgODAyLjExYSwgY2hhbm5lbHMgMTQ5Li4xNjUsIG91dGRvb3IgKi8KLQkJUkVHX1JVTEUoNTc0NS0xMCwgNTgyNSsxMCwgNDAsIDYsIDMwLCAwKSwKLQl9Ci19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4ganBfcmVnZG9tID0gewotCS5uX3JlZ19ydWxlcyA9IDYsCi0JLmFscGhhMiA9ICAiSlAiLAotCS5yZWdfcnVsZXMgPSB7Ci0JCS8qIElFRUUgODAyLjExYi9nLCBjaGFubmVscyAxLi4xMSAqLwotCQlSRUdfUlVMRSgyNDEyLTEwLCAyNDYyKzEwLCA0MCwgNiwgMjAsIDApLAotCQkvKiBJRUVFIDgwMi4xMWIvZywgY2hhbm5lbHMgMTIuLjEzICovCi0JCVJFR19SVUxFKDI0NjctMTAsIDI0NzIrMTAsIDIwLCA2LCAyMCwgMCksCi0JCS8qIElFRUUgODAyLjExYi9nLCBjaGFubmVsIDE0ICovCi0JCVJFR19SVUxFKDI0ODQtMTAsIDI0ODQrMTAsIDIwLCA2LCAyMCwgTkw4MDIxMV9SUkZfTk9fT0ZETSksCi0JCS8qIElFRUUgODAyLjExYSwgY2hhbm5lbHMgMzYuLjQ4ICovCi0JCVJFR19SVUxFKDUxODAtMTAsIDUyNDArMTAsIDQwLCA2LCAyMCwgMCksCi0JCS8qIElFRUUgODAyLjExYSwgY2hhbm5lbHMgNTIuLjY0ICovCi0JCVJFR19SVUxFKDUyNjAtMTAsIDUzMjArMTAsIDQwLCA2LCAyMCwgTkw4MDIxMV9SUkZfREZTKSwKLQkJLyogSUVFRSA4MDIuMTFhLCBjaGFubmVscyAxMDAuLjE0NCAqLwotCQlSRUdfUlVMRSg1NTAwLTEwLCA1NzAwKzEwLCA0MCwgNiwgMjMsIE5MODAyMTFfUlJGX0RGUyksCi0JfQotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpzdGF0aWNfcmVnZG9tKGNoYXIgKmFscGhhMikKLXsKLQlpZiAoYWxwaGEyWzBdID09ICdVJyAmJiBhbHBoYTJbMV0gPT0gJ1MnKQotCQlyZXR1cm4gJnVzX3JlZ2RvbTsKLQlpZiAoYWxwaGEyWzBdID09ICdKJyAmJiBhbHBoYTJbMV0gPT0gJ1AnKQotCQlyZXR1cm4gJmpwX3JlZ2RvbTsKLQkvKiBVc2Ugd29ybGQgcm9hbWluZyBydWxlcyBmb3IgIkVVIiwgc2luY2UgaXQgd2FzIGEgcHNldWRvCi0JICAgZG9tYWluIGFueXdheS4uLiAqLwotCWlmIChhbHBoYTJbMF0gPT0gJ0UnICYmIGFscGhhMlsxXSA9PSAnVScpCi0JCXJldHVybiAmd29ybGRfcmVnZG9tOwotCS8qIERlZmF1bHQsIHdvcmxkIHJvYW1pbmcgcnVsZXMgKi8KLQlyZXR1cm4gJndvcmxkX3JlZ2RvbTsKLX0KLQotc3RhdGljIGJvb2wgaXNfb2xkX3N0YXRpY19yZWdkb20oY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJkKQotewotCWlmIChyZCA9PSAmdXNfcmVnZG9tIHx8IHJkID09ICZqcF9yZWdkb20gfHwgcmQgPT0gJndvcmxkX3JlZ2RvbSkKLQkJcmV0dXJuIHRydWU7Ci0JcmV0dXJuIGZhbHNlOwotfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc19vbGRfc3RhdGljX3JlZ2RvbShjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQpCi17Ci0JcmV0dXJuIGZhbHNlOwotfQotI2VuZGlmCi0KIHN0YXRpYyB2b2lkIHJlc2V0X3JlZ2RvbWFpbnModm9pZCkKIHsKIAkvKiBhdm9pZCBmcmVlaW5nIHN0YXRpYyBpbmZvcm1hdGlvbiBvciBmcmVlaW5nIHNvbWV0aGluZyB0d2ljZSAqLwpAQCAtMjA5LDggKzE0OCw2IEBACiAJCWNmZzgwMjExX3dvcmxkX3JlZ2RvbSA9IE5VTEw7CiAJaWYgKGNmZzgwMjExX3JlZ2RvbWFpbiA9PSAmd29ybGRfcmVnZG9tKQogCQljZmc4MDIxMV9yZWdkb21haW4gPSBOVUxMOwotCWlmIChpc19vbGRfc3RhdGljX3JlZ2RvbShjZmc4MDIxMV9yZWdkb21haW4pKQotCQljZmc4MDIxMV9yZWdkb21haW4gPSBOVUxMOwogCiAJa2ZyZWUoY2ZnODAyMTFfcmVnZG9tYWluKTsKIAlrZnJlZShjZmc4MDIxMV93b3JsZF9yZWdkb20pOwpAQCAtMzE2LDYgKzI1MywyNyBAQAogCXJldHVybiB0cnVlOwogfQogCisvKgorICogVGhlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9VU0VSIHJlZ2RvbSBhbHBoYTIgaXMgY2FjaGVkLCB0aGlzIGxldHMKKyAqIHlvdSBrbm93IGlmIGEgdmFsaWQgcmVndWxhdG9yeSBoaW50IHdpdGggTkw4MDIxMV9SRUdET01fU0VUX0JZX1VTRVIKKyAqIGhhcyBldmVyIGJlZW4gaXNzdWVkLgorICovCitzdGF0aWMgYm9vbCBpc191c2VyX3JlZ2RvbV9zYXZlZCh2b2lkKQoreworCWlmICh1c2VyX2FscGhhMlswXSA9PSAnOScgJiYgdXNlcl9hbHBoYTJbMV0gPT0gJzcnKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBUaGlzIHdvdWxkIGluZGljYXRlIGEgbWlzdGFrZSBvbiB0aGUgZGVzaWduICovCisJaWYgKFdBUk4oKCFpc193b3JsZF9yZWdkb20odXNlcl9hbHBoYTIpICYmCisJCSAgIWlzX2FuX2FscGhhMih1c2VyX2FscGhhMikpLAorCQkgIlVuZXhwZWN0ZWQgdXNlciBhbHBoYTI6ICVjJWNcbiIsCisJCSB1c2VyX2FscGhhMlswXSwKKwkgICAgICAgICB1c2VyX2FscGhhMlsxXSkpCisJCXJldHVybiBmYWxzZTsKKworCXJldHVybiB0cnVlOworfQorCiAvKioKICAqIGNvdW50cnlfaWVfaW50ZWdyaXR5X2NoYW5nZXMgLSB0ZWxscyB1cyBpZiB0aGUgY291bnRyeSBJRSBoYXMgY2hhbmdlZAogICogQGNoZWNrc3VtOiBjaGVja3N1bSBvZiBjb3VudHJ5IElFIG9mIGZpZWxkcyB3ZSBhcmUgaW50ZXJlc3RlZCBpbgpAQCAtMzM1LDYgKzI5Myw5OCBAQAogCXJldHVybiBmYWxzZTsKIH0KIAorc3RhdGljIGludCByZWdfY29weV9yZWdkKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICoqZHN0X3JlZ2QsCisJCQkgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnNyY19yZWdkKQoreworCXN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluICpyZWdkOworCWludCBzaXplX29mX3JlZ2QgPSAwOworCXVuc2lnbmVkIGludCBpOworCisJc2l6ZV9vZl9yZWdkID0gc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluKSArCisJICAoKHNyY19yZWdkLT5uX3JlZ19ydWxlcyArIDEpICogc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUpKTsKKworCXJlZ2QgPSBremFsbG9jKHNpemVfb2ZfcmVnZCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFyZWdkKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbWNweShyZWdkLCBzcmNfcmVnZCwgc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmVnZG9tYWluKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3JjX3JlZ2QtPm5fcmVnX3J1bGVzOyBpKyspCisJCW1lbWNweSgmcmVnZC0+cmVnX3J1bGVzW2ldLCAmc3JjX3JlZ2QtPnJlZ19ydWxlc1tpXSwKKwkJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX3JlZ19ydWxlKSk7CisKKwkqZHN0X3JlZ2QgPSByZWdkOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX0NGRzgwMjExX0lOVEVSTkFMX1JFR0RCCitzdHJ1Y3QgcmVnX3JlZ2RiX3NlYXJjaF9yZXF1ZXN0IHsKKwljaGFyIGFscGhhMlsyXTsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCitzdGF0aWMgTElTVF9IRUFEKHJlZ19yZWdkYl9zZWFyY2hfbGlzdCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHJlZ19yZWdkYl9zZWFyY2hfbG9jayk7CisKK3N0YXRpYyB2b2lkIHJlZ19yZWdkYl9zZWFyY2goc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCByZWdfcmVnZGJfc2VhcmNoX3JlcXVlc3QgKnJlcXVlc3Q7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKmN1cmRvbSwgKnJlZ2RvbTsKKwlpbnQgaSwgcjsKKworCXNwaW5fbG9jaygmcmVnX3JlZ2RiX3NlYXJjaF9sb2NrKTsKKwl3aGlsZSAoIWxpc3RfZW1wdHkoJnJlZ19yZWdkYl9zZWFyY2hfbGlzdCkpIHsKKwkJcmVxdWVzdCA9IGxpc3RfZmlyc3RfZW50cnkoJnJlZ19yZWdkYl9zZWFyY2hfbGlzdCwKKwkJCQkJICAgc3RydWN0IHJlZ19yZWdkYl9zZWFyY2hfcmVxdWVzdCwKKwkJCQkJICAgbGlzdCk7CisJCWxpc3RfZGVsKCZyZXF1ZXN0LT5saXN0KTsKKworCQlmb3IgKGk9MDsgaTxyZWdfcmVnZGJfc2l6ZTsgaSsrKSB7CisJCQljdXJkb20gPSByZWdfcmVnZGJbaV07CisKKwkJCWlmICghbWVtY21wKHJlcXVlc3QtPmFscGhhMiwgY3VyZG9tLT5hbHBoYTIsIDIpKSB7CisJCQkJciA9IHJlZ19jb3B5X3JlZ2QoJnJlZ2RvbSwgY3VyZG9tKTsKKwkJCQlpZiAocikKKwkJCQkJYnJlYWs7CisJCQkJc3Bpbl91bmxvY2soJnJlZ19yZWdkYl9zZWFyY2hfbG9jayk7CisJCQkJbXV0ZXhfbG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCQkJCXNldF9yZWdkb20ocmVnZG9tKTsKKwkJCQltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKKwkJCQlzcGluX2xvY2soJnJlZ19yZWdkYl9zZWFyY2hfbG9jayk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlrZnJlZShyZXF1ZXN0KTsKKwl9CisJc3Bpbl91bmxvY2soJnJlZ19yZWdkYl9zZWFyY2hfbG9jayk7Cit9CisKK3N0YXRpYyBERUNMQVJFX1dPUksocmVnX3JlZ2RiX3dvcmssIHJlZ19yZWdkYl9zZWFyY2gpOworCitzdGF0aWMgdm9pZCByZWdfcmVnZGJfcXVlcnkoY29uc3QgY2hhciAqYWxwaGEyKQoreworCXN0cnVjdCByZWdfcmVnZGJfc2VhcmNoX3JlcXVlc3QgKnJlcXVlc3Q7CisKKwlpZiAoIWFscGhhMikKKwkJcmV0dXJuOworCisJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZWdfcmVnZGJfc2VhcmNoX3JlcXVlc3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcXVlc3QpCisJCXJldHVybjsKKworCW1lbWNweShyZXF1ZXN0LT5hbHBoYTIsIGFscGhhMiwgMik7CisKKwlzcGluX2xvY2soJnJlZ19yZWdkYl9zZWFyY2hfbG9jayk7CisJbGlzdF9hZGRfdGFpbCgmcmVxdWVzdC0+bGlzdCwgJnJlZ19yZWdkYl9zZWFyY2hfbGlzdCk7CisJc3Bpbl91bmxvY2soJnJlZ19yZWdkYl9zZWFyY2hfbG9jayk7CisKKwlzY2hlZHVsZV93b3JrKCZyZWdfcmVnZGJfd29yayk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIHJlZ19yZWdkYl9xdWVyeShjb25zdCBjaGFyICphbHBoYTIpIHt9CisjZW5kaWYgLyogQ09ORklHX0NGRzgwMjExX0lOVEVSTkFMX1JFR0RCICovCisKIC8qCiAgKiBUaGlzIGxldHMgdXMga2VlcCByZWd1bGF0b3J5IGNvZGUgd2hpY2ggaXMgdXBkYXRlZCBvbiBhIHJlZ3VsYXRvcnkKICAqIGJhc2lzIGluIHVzZXJzcGFjZS4KQEAgLTM1NCw2ICs0MDQsOSBAQAogCQlwcmludGsoS0VSTl9JTkZPICJjZmc4MDIxMTogQ2FsbGluZyBDUkRBIHRvIHVwZGF0ZSB3b3JsZCAiCiAJCQkicmVndWxhdG9yeSBkb21haW5cbiIpOwogCisJLyogcXVlcnkgaW50ZXJuYWwgcmVndWxhdG9yeSBkYXRhYmFzZSAoaWYgaXQgZXhpc3RzKSAqLworCXJlZ19yZWdkYl9xdWVyeShhbHBoYTIpOworCiAJY291bnRyeV9lbnZbOF0gPSBhbHBoYTJbMF07CiAJY291bnRyeV9lbnZbOV0gPSBhbHBoYTJbMV07CiAKQEAgLTQ1NCwxMiArNTA3LDIxMiBAQAogfQogCiAvKgorICogVGhpcyBpcyBhIHdvcmsgYXJvdW5kIGZvciBzYW5pdHkgY2hlY2tpbmcgaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KCkncworICogd29yay4gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KCkgY2FuIGZvciBleGFtcGxlIGN1cnJlbnRseSBwcm92aWRlIGEKKyAqIDIgR0h6IGNoYW5uZWwgd2hlbiBpbiBmYWN0IGEgNSBHSHogY2hhbm5lbCB3YXMgZGVzaXJlZC4gQW4gZXhhbXBsZSB3b3VsZCBiZQorICogYW4gQVAgcHJvdmlkaW5nIGNoYW5uZWwgOCBvbiBhIGNvdW50cnkgSUUgdHJpcGxldCB3aGVuIGl0IHNlbnQgdGhpcyBvbiB0aGUKKyAqIDUgR0h6IGJhbmQsIHRoYXQgY2hhbm5lbCBpcyBkZXNpZ25lZCB0byBiZSBjaGFubmVsIDggb24gNSBHSHosIG5vdCBhIDIgR0h6CisgKiBjaGFubmVsLgorICoKKyAqIFRoaXMgY2FuIGJlIHJlbW92ZWQgb25jZSBpZWVlODAyMTFfY2hhbm5lbF90b19mcmVxdWVuY3koKSB0YWtlcyBpbiBhIGJhbmQuCisgKi8KK3N0YXRpYyBib29sIGNoYW5faW5fYmFuZChpbnQgY2hhbiwgZW51bSBpZWVlODAyMTFfYmFuZCBiYW5kKQoreworCWludCBjZW50ZXJfZnJlcSA9IGllZWU4MDIxMV9jaGFubmVsX3RvX2ZyZXF1ZW5jeShjaGFuKTsKKworCXN3aXRjaCAoYmFuZCkgeworCWNhc2UgSUVFRTgwMjExX0JBTkRfMkdIWjoKKwkJaWYgKGNlbnRlcl9mcmVxIDw9IDI0ODQpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGZhbHNlOworCWNhc2UgSUVFRTgwMjExX0JBTkRfNUdIWjoKKwkJaWYgKGNlbnRlcl9mcmVxID49IDUwMDUpCisJCQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIGZhbHNlOworCWRlZmF1bHQ6CisJCXJldHVybiBmYWxzZTsKKwl9Cit9CisKKy8qCisgKiBTb21lIEFQcyBtYXkgc2VuZCBhIGNvdW50cnkgSUUgdHJpcGxldCBmb3IgZWFjaCBjaGFubmVsIHRoZXkKKyAqIHN1cHBvcnQgYW5kIHdoaWxlIHRoaXMgaXMgY29tcGxldGVseSBvdmVya2lsbCBhbmQgc2lsbHkgd2Ugc3RpbGwKKyAqIG5lZWQgdG8gc3VwcG9ydCBpdC4gV2UgYXZvaWQgbWFraW5nIGEgc2luZ2xlIHJ1bGUgZm9yIGVhY2ggY2hhbm5lbAorICogdGhvdWdoIGFuZCB0byBoZWxwIHVzIHdpdGggdGhpcyB3ZSB1c2UgdGhpcyBoZWxwZXIgdG8gZmluZCB0aGUKKyAqIGFjdHVhbCBzdWJiYW5kIGVuZCBjaGFubmVsLiBUaGVzZSB0eXBlIG9mIGNvdW50cnkgSUUgdHJpcGxldAorICogc2NlbmVyaW9zIGFyZSBoYW5kbGVkIHRoZW4sIGFsbCB5aWVsZGluZyB0d28gcmVndWxhb3RyeSBydWxlcyBmcm9tCisgKiBwYXJzaW5nIGEgY291bnRyeSBJRToKKyAqCisgKiBbMV0KKyAqIFsyXQorICogWzM2XQorICogWzQwXQorICoKKyAqIFsxXQorICogWzItNF0KKyAqIFs1LTEyXQorICogWzM2XQorICogWzQwLTQ0XQorICoKKyAqIFsxLTRdCisgKiBbNS03XQorICogWzM2LTQ0XQorICogWzQ4LTY0XQorICoKKyAqIFszNi0zNl0KKyAqIFs0MC00MF0KKyAqIFs0NC00NF0KKyAqIFs0OC00OF0KKyAqIFs1Mi01Ml0KKyAqIFs1Ni01Nl0KKyAqIFs2MC02MF0KKyAqIFs2NC02NF0KKyAqIFsxMDAtMTAwXQorICogWzEwNC0xMDRdCisgKiBbMTA4LTEwOF0KKyAqIFsxMTItMTEyXQorICogWzExNi0xMTZdCisgKiBbMTIwLTEyMF0KKyAqIFsxMjQtMTI0XQorICogWzEyOC0xMjhdCisgKiBbMTMyLTEzMl0KKyAqIFsxMzYtMTM2XQorICogWzE0MC0xNDBdCisgKgorICogUmV0dXJucyAwIGlmIHRoZSBJRSBoYXMgYmVlbiBmb3VuZCB0byBiZSBpbnZhbGlkIGluIHRoZSBtaWRkbGUKKyAqIHNvbWV3aGVyZS4KKyAqLworc3RhdGljIGludCBtYXhfc3ViYmFuZF9jaGFuKGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJCSAgICBpbnQgb3JpZ19jdXJfY2hhbiwKKwkJCSAgICBpbnQgb3JpZ19lbmRfY2hhbm5lbCwKKwkJCSAgICBzOCBvcmlnX21heF9wb3dlciwKKwkJCSAgICB1OCAqKmNvdW50cnlfaWUsCisJCQkgICAgdTggKmNvdW50cnlfaWVfbGVuKQoreworCXU4ICp0cmlwbGV0c19zdGFydCA9ICpjb3VudHJ5X2llOworCXU4IGxlbl9hdF90cmlwbGV0ID0gKmNvdW50cnlfaWVfbGVuOworCWludCBlbmRfc3ViYmFuZF9jaGFuID0gb3JpZ19lbmRfY2hhbm5lbDsKKworCS8qCisJICogV2UnbGwgZGVhbCB3aXRoIHBhZGRpbmcgZm9yIHRoZSBjYWxsZXIgdW5sZXNzCisJICogaXRzIG5vdCBpbW1lZGlhdGUgYW5kIHdlIGRvbid0IHByb2Nlc3MgYW55IGNoYW5uZWxzCisJICovCisJaWYgKCpjb3VudHJ5X2llX2xlbiA9PSAxKSB7CisJCSpjb3VudHJ5X2llICs9IDE7CisJCSpjb3VudHJ5X2llX2xlbiAtPSAxOworCQlyZXR1cm4gb3JpZ19lbmRfY2hhbm5lbDsKKwl9CisKKwkvKiBNb3ZlIHRvIHRoZSBuZXh0IHRyaXBsZXQgYW5kIHRoZW4gc3RhcnQgc2VhcmNoICovCisJKmNvdW50cnlfaWUgKz0gMzsKKwkqY291bnRyeV9pZV9sZW4gLT0gMzsKKworCWlmICghY2hhbl9pbl9iYW5kKG9yaWdfY3VyX2NoYW4sIGJhbmQpKQorCQlyZXR1cm4gMDsKKworCXdoaWxlICgqY291bnRyeV9pZV9sZW4gPj0gMykgeworCQlpbnQgZW5kX2NoYW5uZWwgPSAwOworCQlzdHJ1Y3QgaWVlZTgwMjExX2NvdW50cnlfaWVfdHJpcGxldCAqdHJpcGxldCA9CisJCQkoc3RydWN0IGllZWU4MDIxMV9jb3VudHJ5X2llX3RyaXBsZXQgKikgKmNvdW50cnlfaWU7CisJCWludCBjdXJfY2hhbm5lbCA9IDAsIG5leHRfZXhwZWN0ZWRfY2hhbjsKKworCQkvKiBtZWFucyBsYXN0IHRyaXBsZXQgaXMgY29tcGxldGVseSB1bnJlbGF0ZWQgdG8gdGhpcyBvbmUgKi8KKwkJaWYgKHRyaXBsZXQtPmV4dC5yZWdfZXh0ZW5zaW9uX2lkID49CisJCQkJSUVFRTgwMjExX0NPVU5UUllfRVhURU5TSU9OX0lEKSB7CisJCQkqY291bnRyeV9pZSAtPSAzOworCQkJKmNvdW50cnlfaWVfbGVuICs9IDM7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh0cmlwbGV0LT5jaGFucy5maXJzdF9jaGFubmVsID09IDApIHsKKwkJCSpjb3VudHJ5X2llICs9IDE7CisJCQkqY291bnRyeV9pZV9sZW4gLT0gMTsKKwkJCWlmICgqY291bnRyeV9pZV9sZW4gIT0gMCkKKwkJCQlyZXR1cm4gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHRyaXBsZXQtPmNoYW5zLm51bV9jaGFubmVscyA9PSAwKQorCQkJcmV0dXJuIDA7CisKKwkJLyogTW9uaXRvbmljYWxseSBpbmNyZWFzaW5nIGNoYW5uZWwgb3JkZXIgKi8KKwkJaWYgKHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwgPD0gZW5kX3N1YmJhbmRfY2hhbikKKwkJCXJldHVybiAwOworCisJCWlmICghY2hhbl9pbl9iYW5kKHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwsIGJhbmQpKQorCQkJcmV0dXJuIDA7CisKKwkJLyogMiBHSHogKi8KKwkJaWYgKHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwgPD0gMTQpIHsKKwkJCWVuZF9jaGFubmVsID0gdHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCArCisJCQkJdHJpcGxldC0+Y2hhbnMubnVtX2NoYW5uZWxzIC0gMTsKKwkJfQorCQllbHNlIHsKKwkJCWVuZF9jaGFubmVsID0gIHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwgKworCQkJCSg0ICogKHRyaXBsZXQtPmNoYW5zLm51bV9jaGFubmVscyAtIDEpKTsKKwkJfQorCisJCWlmICghY2hhbl9pbl9iYW5kKGVuZF9jaGFubmVsLCBiYW5kKSkKKwkJCXJldHVybiAwOworCisJCWlmIChvcmlnX21heF9wb3dlciAhPSB0cmlwbGV0LT5jaGFucy5tYXhfcG93ZXIpIHsKKwkJCSpjb3VudHJ5X2llIC09IDM7CisJCQkqY291bnRyeV9pZV9sZW4gKz0gMzsKKwkJCWJyZWFrOworCQl9CisKKwkJY3VyX2NoYW5uZWwgPSB0cmlwbGV0LT5jaGFucy5maXJzdF9jaGFubmVsOworCisJCS8qIFRoZSBrZXkgaXMgZmluZGluZyB0aGUgcmlnaHQgbmV4dCBleHBlY3RlZCBjaGFubmVsICovCisJCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCisJCQluZXh0X2V4cGVjdGVkX2NoYW4gPSBlbmRfc3ViYmFuZF9jaGFuICsgMTsKKwkJIGVsc2UKKwkJCW5leHRfZXhwZWN0ZWRfY2hhbiA9IGVuZF9zdWJiYW5kX2NoYW4gKyA0OworCisJCWlmIChjdXJfY2hhbm5lbCAhPSBuZXh0X2V4cGVjdGVkX2NoYW4pIHsKKwkJCSpjb3VudHJ5X2llIC09IDM7CisJCQkqY291bnRyeV9pZV9sZW4gKz0gMzsKKwkJCWJyZWFrOworCQl9CisKKwkJZW5kX3N1YmJhbmRfY2hhbiA9IGVuZF9jaGFubmVsOworCisJCS8qIE1vdmUgdG8gdGhlIG5leHQgb25lICovCisJCSpjb3VudHJ5X2llICs9IDM7CisJCSpjb3VudHJ5X2llX2xlbiAtPSAzOworCisJCS8qCisJCSAqIFBhZGRpbmcgbmVlZHMgdG8gYmUgZGVhbHQgd2l0aCBpZiB3ZSBwcm9jZXNzZWQKKwkJICogc29tZSBjaGFubmVscy4KKwkJICovCisJCWlmICgqY291bnRyeV9pZV9sZW4gPT0gMSkgeworCQkJKmNvdW50cnlfaWUgKz0gMTsKKwkJCSpjb3VudHJ5X2llX2xlbiAtPSAxOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBJZiBzZWVuLCB0aGUgSUUgaXMgaW52YWxpZCAqLworCQlpZiAoKmNvdW50cnlfaWVfbGVuID09IDIpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoZW5kX3N1YmJhbmRfY2hhbiA9PSBvcmlnX2VuZF9jaGFubmVsKSB7CisJCSpjb3VudHJ5X2llID0gdHJpcGxldHNfc3RhcnQ7CisJCSpjb3VudHJ5X2llX2xlbiA9IGxlbl9hdF90cmlwbGV0OworCQlyZXR1cm4gb3JpZ19lbmRfY2hhbm5lbDsKKwl9CisKKwlyZXR1cm4gZW5kX3N1YmJhbmRfY2hhbjsKK30KKworLyoKICAqIENvbnZlcnRzIGEgY291bnRyeSBJRSB0byBhIHJlZ3VsYXRvcnkgZG9tYWluLiBBIHJlZ3VsYXRvcnkgZG9tYWluCiAgKiBzdHJ1Y3R1cmUgaGFzIGEgbG90IG9mIGluZm9ybWF0aW9uIHdoaWNoIHRoZSBJRSBkb2Vzbid0IHlldCBoYXZlLAogICogc28gZm9yIHRoZSBvdGhlciB2YWx1ZXMgd2UgdXNlIHVwcGVyIG1heCB2YWx1ZXMgYXMgd2Ugd2lsbCBpbnRlcnNlY3QKICAqIHdpdGggb3VyIHVzZXJzcGFjZSByZWd1bGF0b3J5IGFnZW50IHRvIGdldCBsb3dlciBib3VuZHMuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqY291bnRyeV9pZV8yX3JkKAorCQkJCWVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKIAkJCQl1OCAqY291bnRyeV9pZSwKIAkJCQl1OCBjb3VudHJ5X2llX2xlbiwKIAkJCQl1MzIgKmNoZWNrc3VtKQpAQCAtNTIxLDEwICs3NzQsMjkgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKKwkJLyoKKwkJICogQVBzIGNhbiBhZGQgcGFkZGluZyB0byBtYWtlIGxlbmd0aCBkaXZpc2libGUKKwkJICogYnkgdHdvLCByZXF1aXJlZCBieSB0aGUgc3BlYy4KKwkJICovCisJCWlmICh0cmlwbGV0LT5jaGFucy5maXJzdF9jaGFubmVsID09IDApIHsKKwkJCWNvdW50cnlfaWUrKzsKKwkJCWNvdW50cnlfaWVfbGVuLS07CisJCQkvKiBUaGlzIGlzIGV4cGVjdGVkIHRvIGJlIGF0IHRoZSB2ZXJ5IGVuZCBvbmx5ICovCisJCQlpZiAoY291bnRyeV9pZV9sZW4gIT0gMCkKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKHRyaXBsZXQtPmNoYW5zLm51bV9jaGFubmVscyA9PSAwKQorCQkJcmV0dXJuIE5VTEw7CisKKwkJaWYgKCFjaGFuX2luX2JhbmQodHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCwgYmFuZCkpCisJCQlyZXR1cm4gTlVMTDsKKwogCQkvKiAyIEdIeiAqLwotCQlpZiAodHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCA8PSAxNCkKKwkJaWYgKGJhbmQgPT0gSUVFRTgwMjExX0JBTkRfMkdIWikKIAkJCWVuZF9jaGFubmVsID0gdHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCArCi0JCQkJdHJpcGxldC0+Y2hhbnMubnVtX2NoYW5uZWxzOworCQkJCXRyaXBsZXQtPmNoYW5zLm51bV9jaGFubmVscyAtIDE7CiAJCWVsc2UKIAkJCS8qCiAJCQkgKiA1IEdIeiAtLSBGb3IgZXhhbXBsZSBpbiBjb3VudHJ5IElFcyBpZiB0aGUgZmlyc3QKQEAgLTUzOSw2ICs4MTEsMjQgQEAKIAkJCQkoNCAqICh0cmlwbGV0LT5jaGFucy5udW1fY2hhbm5lbHMgLSAxKSk7CiAKIAkJY3VyX2NoYW5uZWwgPSB0cmlwbGV0LT5jaGFucy5maXJzdF9jaGFubmVsOworCisJCS8qCisJCSAqIEVuaGFuY2VtZW50IGZvciBBUHMgdGhhdCBzZW5kIGEgdHJpcGxldCBmb3IgZXZlcnkgY2hhbm5lbAorCQkgKiBvciBmb3Igd2hhdGV2ZXIgcmVhc29uIHNlbmRzIHRyaXBsZXRzIHdpdGggbXVsdGlwbGUgY2hhbm5lbHMKKwkJICogc2VwYXJhdGVkIHdoZW4gaW4gZmFjdCB0aGV5IHNob3VsZCBiZSB0b2dldGhlci4KKwkJICovCisJCWVuZF9jaGFubmVsID0gbWF4X3N1YmJhbmRfY2hhbihiYW5kLAorCQkJCQkgICAgICAgY3VyX2NoYW5uZWwsCisJCQkJCSAgICAgICBlbmRfY2hhbm5lbCwKKwkJCQkJICAgICAgIHRyaXBsZXQtPmNoYW5zLm1heF9wb3dlciwKKwkJCQkJICAgICAgICZjb3VudHJ5X2llLAorCQkJCQkgICAgICAgJmNvdW50cnlfaWVfbGVuKTsKKwkJaWYgKCFlbmRfY2hhbm5lbCkKKwkJCXJldHVybiBOVUxMOworCisJCWlmICghY2hhbl9pbl9iYW5kKGVuZF9jaGFubmVsLCBiYW5kKSkKKwkJCXJldHVybiBOVUxMOworCiAJCWN1cl9zdWJfbWF4X2NoYW5uZWwgPSBlbmRfY2hhbm5lbDsKIAogCQkvKiBCYXNpYyBzYW5pdHkgY2hlY2sgKi8KQEAgLTU2OSwxMCArODU5LDEzIEBACiAKIAkJbGFzdF9zdWJfbWF4X2NoYW5uZWwgPSBjdXJfc3ViX21heF9jaGFubmVsOwogCi0JCWNvdW50cnlfaWUgKz0gMzsKLQkJY291bnRyeV9pZV9sZW4gLT0gMzsKIAkJbnVtX3J1bGVzKys7CiAKKwkJaWYgKGNvdW50cnlfaWVfbGVuID49IDMpIHsKKwkJCWNvdW50cnlfaWUgKz0gMzsKKwkJCWNvdW50cnlfaWVfbGVuIC09IDM7CisJCX0KKwogCQkvKgogCQkgKiBOb3RlOiB0aGlzIGlzIG5vdCBhIElFRUUgcmVxdWlyZW1lbnQgYnV0CiAJCSAqIHNpbXBseSBhIG1lbW9yeSByZXF1aXJlbWVudApAQCAtNjE1LDYgKzkwOCwxMiBAQAogCQkJY29udGludWU7CiAJCX0KIAorCQlpZiAodHJpcGxldC0+Y2hhbnMuZmlyc3RfY2hhbm5lbCA9PSAwKSB7CisJCQljb3VudHJ5X2llKys7CisJCQljb3VudHJ5X2llX2xlbi0tOworCQkJYnJlYWs7CisJCX0KKwogCQlyZWdfcnVsZSA9ICZyZC0+cmVnX3J1bGVzW2ldOwogCQlmcmVxX3JhbmdlID0gJnJlZ19ydWxlLT5mcmVxX3JhbmdlOwogCQlwb3dlcl9ydWxlID0gJnJlZ19ydWxlLT5wb3dlcl9ydWxlOwpAQCAtNjIyLDEzICs5MjEsMjAgQEAKIAkJcmVnX3J1bGUtPmZsYWdzID0gZmxhZ3M7CiAKIAkJLyogMiBHSHogKi8KLQkJaWYgKHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwgPD0gMTQpCisJCWlmIChiYW5kID09IElFRUU4MDIxMV9CQU5EXzJHSFopCiAJCQllbmRfY2hhbm5lbCA9IHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwgKwotCQkJCXRyaXBsZXQtPmNoYW5zLm51bV9jaGFubmVsczsKKwkJCQl0cmlwbGV0LT5jaGFucy5udW1fY2hhbm5lbHMgLTE7CiAJCWVsc2UKIAkJCWVuZF9jaGFubmVsID0gIHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwgKwogCQkJCSg0ICogKHRyaXBsZXQtPmNoYW5zLm51bV9jaGFubmVscyAtIDEpKTsKIAorCQllbmRfY2hhbm5lbCA9IG1heF9zdWJiYW5kX2NoYW4oYmFuZCwKKwkJCQkJICAgICAgIHRyaXBsZXQtPmNoYW5zLmZpcnN0X2NoYW5uZWwsCisJCQkJCSAgICAgICBlbmRfY2hhbm5lbCwKKwkJCQkJICAgICAgIHRyaXBsZXQtPmNoYW5zLm1heF9wb3dlciwKKwkJCQkJICAgICAgICZjb3VudHJ5X2llLAorCQkJCQkgICAgICAgJmNvdW50cnlfaWVfbGVuKTsKKwogCQkvKgogCQkgKiBUaGUgKzEwIGlzIHNpbmNlIHRoZSByZWd1bGF0b3J5IGRvbWFpbiBleHBlY3RzCiAJCSAqIHRoZSBhY3R1YWwgYmFuZCBlZGdlLCBub3QgdGhlIGNlbnRlciBvZiBmcmVxIGZvcgpAQCAtNjQ5LDEyICs5NTUsMTUgQEAKIAkJICovCiAJCWZyZXFfcmFuZ2UtPm1heF9iYW5kd2lkdGhfa2h6ID0gTUhaX1RPX0tIWig0MCk7CiAJCXBvd2VyX3J1bGUtPm1heF9hbnRlbm5hX2dhaW4gPSBEQklfVE9fTUJJKDEwMCk7Ci0JCXBvd2VyX3J1bGUtPm1heF9laXJwID0gREJNX1RPX01CTSgxMDApOworCQlwb3dlcl9ydWxlLT5tYXhfZWlycCA9IERCTV9UT19NQk0odHJpcGxldC0+Y2hhbnMubWF4X3Bvd2VyKTsKIAotCQljb3VudHJ5X2llICs9IDM7Ci0JCWNvdW50cnlfaWVfbGVuIC09IDM7CiAJCWkrKzsKIAorCQlpZiAoY291bnRyeV9pZV9sZW4gPj0gMykgeworCQkJY291bnRyeV9pZSArPSAzOworCQkJY291bnRyeV9pZV9sZW4gLT0gMzsKKwkJfQorCiAJCUJVR19PTihpID4gTkw4MDIxMV9NQVhfU1VQUF9SRUdfUlVMRVMpOwogCX0KIApAQCAtOTUwLDI1ICsxMjU5LDIxIEBACiAJCWlmIChyID09IC1FUkFOR0UgJiYKIAkJICAgIGxhc3RfcmVxdWVzdC0+aW5pdGlhdG9yID09CiAJCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkgewotI2lmZGVmIENPTkZJR19DRkc4MDIxMV9SRUdfREVCVUcKLQkJCXByaW50ayhLRVJOX0RFQlVHICJjZmc4MDIxMTogTGVhdmluZyBjaGFubmVsICVkIE1IeiAiCisJCQlSRUdfREJHX1BSSU5UKCJjZmc4MDIxMTogTGVhdmluZyBjaGFubmVsICVkIE1IeiAiCiAJCQkJImludGFjdCBvbiAlcyAtIG5vIHJ1bGUgZm91bmQgaW4gYmFuZCBvbiAiCiAJCQkJIkNvdW50cnkgSUVcbiIsCi0JCQkJY2hhbi0+Y2VudGVyX2ZyZXEsIHdpcGh5X25hbWUod2lwaHkpKTsKLSNlbmRpZgorCQkJY2hhbi0+Y2VudGVyX2ZyZXEsIHdpcGh5X25hbWUod2lwaHkpKTsKIAkJfSBlbHNlIHsKIAkJLyoKIAkJICogSW4gdGhpcyBjYXNlIHdlIGtub3cgdGhlIGNvdW50cnkgSUUgaGFzIGF0IGxlYXN0IG9uZSByZWcgcnVsZQogCQkgKiBmb3IgdGhlIGJhbmQgc28gd2UgcmVzcGVjdCBpdHMgYmFuZCBkZWZpbml0aW9ucwogCQkgKi8KLSNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHCiAJCQlpZiAobGFzdF9yZXF1ZXN0LT5pbml0aWF0b3IgPT0KIAkJCSAgICBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09VTlRSWV9JRSkKLQkJCQlwcmludGsoS0VSTl9ERUJVRyAiY2ZnODAyMTE6IERpc2FibGluZyAiCisJCQkJUkVHX0RCR19QUklOVCgiY2ZnODAyMTE6IERpc2FibGluZyAiCiAJCQkJCSJjaGFubmVsICVkIE1IeiBvbiAlcyBkdWUgdG8gIgogCQkJCQkiQ291bnRyeSBJRVxuIiwKIAkJCQkJY2hhbi0+Y2VudGVyX2ZyZXEsIHdpcGh5X25hbWUod2lwaHkpKTsKLSNlbmRpZgogCQkJZmxhZ3MgfD0gSUVFRTgwMjExX0NIQU5fRElTQUJMRUQ7CiAJCQljaGFuLT5mbGFncyA9IGZsYWdzOwogCQl9CkBAIC0xMzQyLDMwICsxNjQ3LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0wod2lwaHlfYXBwbHlfY3VzdG9tX3JlZ3VsYXRvcnkpOwogCi1zdGF0aWMgaW50IHJlZ19jb3B5X3JlZ2QoY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKipkc3RfcmVnZCwKLQkJCSBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqc3JjX3JlZ2QpCi17Ci0Jc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4gKnJlZ2Q7Ci0JaW50IHNpemVfb2ZfcmVnZCA9IDA7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlzaXplX29mX3JlZ2QgPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4pICsKLQkgICgoc3JjX3JlZ2QtPm5fcmVnX3J1bGVzICsgMSkgKiBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yZWdfcnVsZSkpOwotCi0JcmVnZCA9IGt6YWxsb2Moc2l6ZV9vZl9yZWdkLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXJlZ2QpCi0JCXJldHVybiAtRU5PTUVNOwotCi0JbWVtY3B5KHJlZ2QsIHNyY19yZWdkLCBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9yZWdkb21haW4pKTsKLQotCWZvciAoaSA9IDA7IGkgPCBzcmNfcmVnZC0+bl9yZWdfcnVsZXM7IGkrKykKLQkJbWVtY3B5KCZyZWdkLT5yZWdfcnVsZXNbaV0sICZzcmNfcmVnZC0+cmVnX3J1bGVzW2ldLAotCQkJc2l6ZW9mKHN0cnVjdCBpZWVlODAyMTFfcmVnX3J1bGUpKTsKLQotCSpkc3RfcmVnZCA9IHJlZ2Q7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBSZXR1cm4gdmFsdWUgd2hpY2ggY2FuIGJlIHVzZWQgYnkgaWdub3JlX3JlcXVlc3QoKSB0byBpbmRpY2F0ZQogICogaXQgaGFzIGJlZW4gZGV0ZXJtaW5lZCB3ZSBzaG91bGQgaW50ZXJzZWN0IHR3byByZWd1bGF0b3J5IGRvbWFpbnMKQEAgLTEzODcsNyArMTY2OCw3IEBACiAKIAlzd2l0Y2ggKHBlbmRpbmdfcmVxdWVzdC0+aW5pdGlhdG9yKSB7CiAJY2FzZSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRToKLQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiAwOwogCWNhc2UgTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPVU5UUllfSUU6CiAKIAkJbGFzdF93aXBoeSA9IHdpcGh5X2lkeF90b193aXBoeShsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCk7CkBAIC0xNDE4LDggKzE2OTksNiBAQAogCQlyZXR1cm4gUkVHX0lOVEVSU0VDVDsKIAljYXNlIE5MODAyMTFfUkVHRE9NX1NFVF9CWV9EUklWRVI6CiAJCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfQ09SRSkgewotCQkJaWYgKGlzX29sZF9zdGF0aWNfcmVnZG9tKGNmZzgwMjExX3JlZ2RvbWFpbikpCi0JCQkJcmV0dXJuIDA7CiAJCQlpZiAocmVnZG9tX2NoYW5nZXMocGVuZGluZ19yZXF1ZXN0LT5hbHBoYTIpKQogCQkJCXJldHVybiAwOwogCQkJcmV0dXJuIC1FQUxSRUFEWTsKQEAgLTE0NTYsOCArMTczNSw3IEBACiAJCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KIAotCQlpZiAoIWlzX29sZF9zdGF0aWNfcmVnZG9tKGNmZzgwMjExX3JlZ2RvbWFpbikgJiYKLQkJICAgICFyZWdkb21fY2hhbmdlcyhwZW5kaW5nX3JlcXVlc3QtPmFscGhhMikpCisJCWlmICghcmVnZG9tX2NoYW5nZXMocGVuZGluZ19yZXF1ZXN0LT5hbHBoYTIpKQogCQkJcmV0dXJuIC1FQUxSRUFEWTsKIAogCQlyZXR1cm4gMDsKQEAgLTE1MjksNiArMTgwNywxMSBAQAogCiAJcGVuZGluZ19yZXF1ZXN0ID0gTlVMTDsKIAorCWlmIChsYXN0X3JlcXVlc3QtPmluaXRpYXRvciA9PSBOTDgwMjExX1JFR0RPTV9TRVRfQllfVVNFUikgeworCQl1c2VyX2FscGhhMlswXSA9IGxhc3RfcmVxdWVzdC0+YWxwaGEyWzBdOworCQl1c2VyX2FscGhhMlsxXSA9IGxhc3RfcmVxdWVzdC0+YWxwaGEyWzFdOworCX0KKwogCS8qIFdoZW4gciA9PSBSRUdfSU5URVJTRUNUIHdlIGRvIG5lZWQgdG8gY2FsbCBDUkRBICovCiAJaWYgKHIgPCAwKSB7CiAJCS8qCkBAIC0xNjQ4LDEyICsxOTMxLDE2IEBACiAJc2NoZWR1bGVfd29yaygmcmVnX3dvcmspOwogfQogCi0vKiBDb3JlIHJlZ3VsYXRvcnkgaGludCAtLSBoYXBwZW5zIG9uY2UgZHVyaW5nIGNmZzgwMjExX2luaXQoKSAqLworLyoKKyAqIENvcmUgcmVndWxhdG9yeSBoaW50IC0tIGhhcHBlbnMgZHVyaW5nIGNmZzgwMjExX2luaXQoKQorICogYW5kIHdoZW4gd2UgcmVzdG9yZSByZWd1bGF0b3J5IHNldHRpbmdzLgorICovCiBzdGF0aWMgaW50IHJlZ3VsYXRvcnlfaGludF9jb3JlKGNvbnN0IGNoYXIgKmFscGhhMikKIHsKIAlzdHJ1Y3QgcmVndWxhdG9yeV9yZXF1ZXN0ICpyZXF1ZXN0OwogCi0JQlVHX09OKGxhc3RfcmVxdWVzdCk7CisJa2ZyZWUobGFzdF9yZXF1ZXN0KTsKKwlsYXN0X3JlcXVlc3QgPSBOVUxMOwogCiAJcmVxdWVzdCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCByZWd1bGF0b3J5X3JlcXVlc3QpLAogCQkJICBHRlBfS0VSTkVMKTsKQEAgLTE2NjQsMTQgKzE5NTEsMTIgQEAKIAlyZXF1ZXN0LT5hbHBoYTJbMV0gPSBhbHBoYTJbMV07CiAJcmVxdWVzdC0+aW5pdGlhdG9yID0gTkw4MDIxMV9SRUdET01fU0VUX0JZX0NPUkU7CiAKLQlxdWV1ZV9yZWd1bGF0b3J5X3JlcXVlc3QocmVxdWVzdCk7Ci0KIAkvKgogCSAqIFRoaXMgZW5zdXJlcyBsYXN0X3JlcXVlc3QgaXMgcG9wdWxhdGVkIG9uY2UgbW9kdWxlcwogCSAqIGNvbWUgc3dpbmdpbmcgaW4gYW5kIGNhbGxpbmcgcmVndWxhdG9yeSBoaW50cyBhbmQKIAkgKiB3aXBoeV9hcHBseV9jdXN0b21fcmVndWxhdG9yeSgpLgogCSAqLwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJcmVnX3Byb2Nlc3NfaGludChyZXF1ZXN0KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTc1OCw4ICsyMDQzLDkgQEAKICAqIHRoZXJlZm9yZSBjYW5ub3QgaXRlcmF0ZSBvdmVyIHRoZSByZGV2IGxpc3QgaGVyZS4KICAqLwogdm9pZCByZWd1bGF0b3J5X2hpbnRfMTFkKHN0cnVjdCB3aXBoeSAqd2lwaHksCi0JCQl1OCAqY291bnRyeV9pZSwKLQkJCXU4IGNvdW50cnlfaWVfbGVuKQorCQkJIGVudW0gaWVlZTgwMjExX2JhbmQgYmFuZCwKKwkJCSB1OCAqY291bnRyeV9pZSwKKwkJCSB1OCBjb3VudHJ5X2llX2xlbikKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmQgPSBOVUxMOwogCWNoYXIgYWxwaGEyWzJdOwpAQCAtMTgwNSw5ICsyMDkxLDExIEBACiAJICAgIHdpcGh5X2lkeF92YWxpZChsYXN0X3JlcXVlc3QtPndpcGh5X2lkeCkpKQogCQlnb3RvIG91dDsKIAotCXJkID0gY291bnRyeV9pZV8yX3JkKGNvdW50cnlfaWUsIGNvdW50cnlfaWVfbGVuLCAmY2hlY2tzdW0pOwotCWlmICghcmQpCisJcmQgPSBjb3VudHJ5X2llXzJfcmQoYmFuZCwgY291bnRyeV9pZSwgY291bnRyeV9pZV9sZW4sICZjaGVja3N1bSk7CisJaWYgKCFyZCkgeworCQlSRUdfREJHX1BSSU5UKCJjZmc4MDIxMTogSWdub3JpbmcgYm9ndXMgY291bnRyeSBJRVxuIik7CiAJCWdvdG8gb3V0OworCX0KIAogCS8qCiAJICogVGhpcyB3aWxsIG5vdCBoYXBwZW4gcmlnaHQgbm93IGJ1dCB3ZSBsZWF2ZSBpdCBoZXJlIGZvciB0aGUKQEAgLTE4NTAsNiArMjEzOCwxMjMgQEAKIAltdXRleF91bmxvY2soJnJlZ19tdXRleCk7CiB9CiAKK3N0YXRpYyB2b2lkIHJlc3RvcmVfYWxwaGEyKGNoYXIgKmFscGhhMiwgYm9vbCByZXNldF91c2VyKQoreworCS8qIGluZGljYXRlcyB0aGVyZSBpcyBubyBhbHBoYTIgdG8gY29uc2lkZXIgZm9yIHJlc3RvcmF0aW9uICovCisJYWxwaGEyWzBdID0gJzknOworCWFscGhhMlsxXSA9ICc3JzsKKworCS8qIFRoZSB1c2VyIHNldHRpbmcgaGFzIHByZWNlZGVuY2Ugb3ZlciB0aGUgbW9kdWxlIHBhcmFtZXRlciAqLworCWlmIChpc191c2VyX3JlZ2RvbV9zYXZlZCgpKSB7CisJCS8qIFVubGVzcyB3ZSdyZSBhc2tlZCB0byBpZ25vcmUgaXQgYW5kIHJlc2V0IGl0ICovCisJCWlmIChyZXNldF91c2VyKSB7CisJCQlSRUdfREJHX1BSSU5UKCJjZmc4MDIxMTogUmVzdG9yaW5nIHJlZ3VsYXRvcnkgc2V0dGluZ3MgIgorCQkJICAgICAgICJpbmNsdWRpbmcgdXNlciBwcmVmZXJlbmNlXG4iKTsKKwkJCXVzZXJfYWxwaGEyWzBdID0gJzknOworCQkJdXNlcl9hbHBoYTJbMV0gPSAnNyc7CisKKwkJCS8qCisJCQkgKiBJZiB3ZSdyZSBpZ25vcmluZyB1c2VyIHNldHRpbmdzLCB3ZSBzdGlsbCBuZWVkIHRvCisJCQkgKiBjaGVjayB0aGUgbW9kdWxlIHBhcmFtZXRlciB0byBlbnN1cmUgd2UgcHV0IHRoaW5ncworCQkJICogYmFjayBhcyB0aGV5IHdlcmUgZm9yIGEgZnVsbCByZXN0b3JlLgorCQkJICovCisJCQlpZiAoIWlzX3dvcmxkX3JlZ2RvbShpZWVlODAyMTFfcmVnZG9tKSkgeworCQkJCVJFR19EQkdfUFJJTlQoImNmZzgwMjExOiBLZWVwaW5nIHByZWZlcmVuY2Ugb24gIgorCQkJCSAgICAgICAibW9kdWxlIHBhcmFtZXRlciBpZWVlODAyMTFfcmVnZG9tOiAlYyVjXG4iLAorCQkJCSAgICAgICBpZWVlODAyMTFfcmVnZG9tWzBdLAorCQkJCSAgICAgICBpZWVlODAyMTFfcmVnZG9tWzFdKTsKKwkJCQlhbHBoYTJbMF0gPSBpZWVlODAyMTFfcmVnZG9tWzBdOworCQkJCWFscGhhMlsxXSA9IGllZWU4MDIxMV9yZWdkb21bMV07CisJCQl9CisJCX0gZWxzZSB7CisJCQlSRUdfREJHX1BSSU5UKCJjZmc4MDIxMTogUmVzdG9yaW5nIHJlZ3VsYXRvcnkgc2V0dGluZ3MgIgorCQkJICAgICAgICJ3aGlsZSBwcmVzZXJ2aW5nIHVzZXIgcHJlZmVyZW5jZSBmb3I6ICVjJWNcbiIsCisJCQkgICAgICAgdXNlcl9hbHBoYTJbMF0sCisJCQkgICAgICAgdXNlcl9hbHBoYTJbMV0pOworCQkJYWxwaGEyWzBdID0gdXNlcl9hbHBoYTJbMF07CisJCQlhbHBoYTJbMV0gPSB1c2VyX2FscGhhMlsxXTsKKwkJfQorCX0gZWxzZSBpZiAoIWlzX3dvcmxkX3JlZ2RvbShpZWVlODAyMTFfcmVnZG9tKSkgeworCQlSRUdfREJHX1BSSU5UKCJjZmc4MDIxMTogS2VlcGluZyBwcmVmZXJlbmNlIG9uICIKKwkJICAgICAgICJtb2R1bGUgcGFyYW1ldGVyIGllZWU4MDIxMV9yZWdkb206ICVjJWNcbiIsCisJCSAgICAgICBpZWVlODAyMTFfcmVnZG9tWzBdLAorCQkgICAgICAgaWVlZTgwMjExX3JlZ2RvbVsxXSk7CisJCWFscGhhMlswXSA9IGllZWU4MDIxMV9yZWdkb21bMF07CisJCWFscGhhMlsxXSA9IGllZWU4MDIxMV9yZWdkb21bMV07CisJfSBlbHNlCisJCVJFR19EQkdfUFJJTlQoImNmZzgwMjExOiBSZXN0b3JpbmcgcmVndWxhdG9yeSBzZXR0aW5nc1xuIik7Cit9CisKKy8qCisgKiBSZXN0b3JpbmcgcmVndWxhdG9yeSBzZXR0aW5ncyBpbnZvbHZlcyBpbmdvcmluZyBhbnkKKyAqIHBvc3NpYmx5IHN0YWxlIGNvdW50cnkgSUUgaW5mb3JtYXRpb24gYW5kIHVzZXIgcmVndWxhdG9yeQorICogc2V0dGluZ3MgaWYgc28gZGVzaXJlZCwgdGhpcyBpbmNsdWRlcyBhbnkgYmVhY29uIGhpbnRzCisgKiBsZWFybmVkIGFzIHdlIGNvdWxkIGhhdmUgdHJhdmVsZWQgb3V0c2lkZSB0byBhbm90aGVyIGNvdW50cnkKKyAqIGFmdGVyIGRpc2Nvbm5lY3Rpb24uIFRvIHJlc3RvcmUgcmVndWxhdG9yeSBzZXR0aW5ncyB3ZSBkbworICogZXhhY3RseSB3aGF0IHdlIGRpZCBhdCBib290dXA6CisgKgorICogICAtIHNlbmQgYSBjb3JlIHJlZ3VsYXRvcnkgaGludAorICogICAtIHNlbmQgYSB1c2VyIHJlZ3VsYXRvcnkgaGludCBpZiBhcHBsaWNhYmxlCisgKgorICogRGV2aWNlIGRyaXZlcnMgdGhhdCBzZW5kIGEgcmVndWxhdG9yeSBoaW50IGZvciBhIHNwZWNpZmljIGNvdW50cnkKKyAqIGtlZXAgdGhlaXIgb3duIHJlZ3VsYXRvcnkgZG9tYWluIG9uIHdpcGh5LT5yZWdkIHNvIHRoYXQgZG9lcyBkb2VzCisgKiBub3QgbmVlZCB0byBiZSByZW1lbWJlcmVkLgorICovCitzdGF0aWMgdm9pZCByZXN0b3JlX3JlZ3VsYXRvcnlfc2V0dGluZ3MoYm9vbCByZXNldF91c2VyKQoreworCWNoYXIgYWxwaGEyWzJdOworCXN0cnVjdCByZWdfYmVhY29uICpyZWdfYmVhY29uLCAqYnRtcDsKKworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKwltdXRleF9sb2NrKCZyZWdfbXV0ZXgpOworCisJcmVzZXRfcmVnZG9tYWlucygpOworCXJlc3RvcmVfYWxwaGEyKGFscGhhMiwgcmVzZXRfdXNlcik7CisKKwkvKiBDbGVhciBiZWFjb24gaGludHMgKi8KKwlzcGluX2xvY2tfYmgoJnJlZ19wZW5kaW5nX2JlYWNvbnNfbG9jayk7CisJaWYgKCFsaXN0X2VtcHR5KCZyZWdfcGVuZGluZ19iZWFjb25zKSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVnX2JlYWNvbiwgYnRtcCwKKwkJCQkJICZyZWdfcGVuZGluZ19iZWFjb25zLCBsaXN0KSB7CisJCQlsaXN0X2RlbCgmcmVnX2JlYWNvbi0+bGlzdCk7CisJCQlrZnJlZShyZWdfYmVhY29uKTsKKwkJfQorCX0KKwlzcGluX3VubG9ja19iaCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKKworCWlmICghbGlzdF9lbXB0eSgmcmVnX2JlYWNvbl9saXN0KSkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocmVnX2JlYWNvbiwgYnRtcCwKKwkJCQkJICZyZWdfYmVhY29uX2xpc3QsIGxpc3QpIHsKKwkJCWxpc3RfZGVsKCZyZWdfYmVhY29uLT5saXN0KTsKKwkJCWtmcmVlKHJlZ19iZWFjb24pOworCQl9CisJfQorCisJLyogRmlyc3QgcmVzdG9yZSB0byB0aGUgYmFzaWMgcmVndWxhdG9yeSBzZXR0aW5ncyAqLworCWNmZzgwMjExX3JlZ2RvbWFpbiA9IGNmZzgwMjExX3dvcmxkX3JlZ2RvbTsKKworCW11dGV4X3VubG9jaygmcmVnX211dGV4KTsKKwltdXRleF91bmxvY2soJmNmZzgwMjExX211dGV4KTsKKworCXJlZ3VsYXRvcnlfaGludF9jb3JlKGNmZzgwMjExX3JlZ2RvbWFpbi0+YWxwaGEyKTsKKworCS8qCisJICogVGhpcyByZXN0b3JlcyB0aGUgaWVlZTgwMjExX3JlZ2RvbSBtb2R1bGUgcGFyYW1ldGVyCisJICogcHJlZmVyZW5jZSBvciB0aGUgbGFzdCB1c2VyIHJlcXVlc3RlZCByZWd1bGF0b3J5CisJICogc2V0dGluZ3MsIHVzZXIgcmVndWxhdG9yeSBzZXR0aW5ncyB0YWtlcyBwcmVjZWRlbmNlLgorCSAqLworCWlmIChpc19hbl9hbHBoYTIoYWxwaGEyKSkKKwkJcmVndWxhdG9yeV9oaW50X3VzZXIodXNlcl9hbHBoYTIpOworfQorCisKK3ZvaWQgcmVndWxhdG9yeV9oaW50X2Rpc2Nvbm5lY3Qodm9pZCkKK3sKKwlSRUdfREJHX1BSSU5UKCJjZmc4MDIxMTogQWxsIGRldmljZXMgYXJlIGRpc2Nvbm5lY3RlZCwgZ29pbmcgdG8gIgorCQkgICAgICAicmVzdG9yZSByZWd1bGF0b3J5IHNldHRpbmdzXG4iKTsKKwlyZXN0b3JlX3JlZ3VsYXRvcnlfc2V0dGluZ3MoZmFsc2UpOworfQorCiBzdGF0aWMgYm9vbCBmcmVxX2lzX2NoYW5fMTJfMTNfMTQodTE2IGZyZXEpCiB7CiAJaWYgKGZyZXEgPT0gaWVlZTgwMjExX2NoYW5uZWxfdG9fZnJlcXVlbmN5KDEyKSB8fApAQCAtMTg3NSwxMyArMjI4MCwxMiBAQAogCWlmICghcmVnX2JlYWNvbikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLSNpZmRlZiBDT05GSUdfQ0ZHODAyMTFfUkVHX0RFQlVHCi0JcHJpbnRrKEtFUk5fREVCVUcgImNmZzgwMjExOiBGb3VuZCBuZXcgYmVhY29uIG9uICIKLQkJImZyZXF1ZW5jeTogJWQgTUh6IChDaCAlZCkgb24gJXNcbiIsCi0JCWJlYWNvbl9jaGFuLT5jZW50ZXJfZnJlcSwKLQkJaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGJlYWNvbl9jaGFuLT5jZW50ZXJfZnJlcSksCi0JCXdpcGh5X25hbWUod2lwaHkpKTsKLSNlbmRpZgorCVJFR19EQkdfUFJJTlQoImNmZzgwMjExOiBGb3VuZCBuZXcgYmVhY29uIG9uICIKKwkJICAgICAgImZyZXF1ZW5jeTogJWQgTUh6IChDaCAlZCkgb24gJXNcbiIsCisJCSAgICAgIGJlYWNvbl9jaGFuLT5jZW50ZXJfZnJlcSwKKwkJICAgICAgaWVlZTgwMjExX2ZyZXF1ZW5jeV90b19jaGFubmVsKGJlYWNvbl9jaGFuLT5jZW50ZXJfZnJlcSksCisJCSAgICAgIHdpcGh5X25hbWUod2lwaHkpKTsKKwogCW1lbWNweSgmcmVnX2JlYWNvbi0+Y2hhbiwgYmVhY29uX2NoYW4sCiAJCXNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX2NoYW5uZWwpKTsKIApAQCAtMjAzOSw4ICsyNDQzLDcgQEAKIAkJICogSWYgc29tZW9uZSBlbHNlIGFza2VkIHVzIHRvIGNoYW5nZSB0aGUgcmQgbGV0cyBvbmx5IGJvdGhlcgogCQkgKiBjaGVja2luZyBpZiB0aGUgYWxwaGEyIGNoYW5nZXMgaWYgQ1JEQSB3YXMgYWxyZWFkeSBjYWxsZWQKIAkJICovCi0JCWlmICghaXNfb2xkX3N0YXRpY19yZWdkb20oY2ZnODAyMTFfcmVnZG9tYWluKSAmJgotCQkgICAgIXJlZ2RvbV9jaGFuZ2VzKHJkLT5hbHBoYTIpKQorCQlpZiAoIXJlZ2RvbV9jaGFuZ2VzKHJkLT5hbHBoYTIpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC0yMjM5LDE1ICsyNjQyLDExIEBACiAJc3Bpbl9sb2NrX2luaXQoJnJlZ19yZXF1ZXN0c19sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmcmVnX3BlbmRpbmdfYmVhY29uc19sb2NrKTsKIAotI2lmZGVmIENPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWQotCWNmZzgwMjExX3JlZ2RvbWFpbiA9IHN0YXRpY19yZWdkb20oaWVlZTgwMjExX3JlZ2RvbSk7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJjZmc4MDIxMTogVXNpbmcgc3RhdGljIHJlZ3VsYXRvcnkgZG9tYWluIGluZm9cbiIpOwotCXByaW50X3JlZ2RvbWFpbl9pbmZvKGNmZzgwMjExX3JlZ2RvbWFpbik7Ci0jZWxzZQogCWNmZzgwMjExX3JlZ2RvbWFpbiA9IGNmZzgwMjExX3dvcmxkX3JlZ2RvbTsKIAotI2VuZGlmCisJdXNlcl9hbHBoYTJbMF0gPSAnOSc7CisJdXNlcl9hbHBoYTJbMV0gPSAnNyc7CisKIAkvKiBXZSBhbHdheXMgdHJ5IHRvIGdldCBhbiB1cGRhdGUgZm9yIHRoZSBzdGF0aWMgcmVnZG9tYWluICovCiAJZXJyID0gcmVndWxhdG9yeV9oaW50X2NvcmUoY2ZnODAyMTFfcmVnZG9tYWluLT5hbHBoYTIpOwogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9yZWcuaCBiL25ldC93aXJlbGVzcy9yZWcuaAppbmRleCAzMzYyYzdjLi5iMjYyMjRhIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvcmVnLmgKKysrIGIvbmV0L3dpcmVsZXNzL3JlZy5oCkBAIC00MSwxNSArNDEsNDQgQEAKICAqIHJlZ3VsYXRvcnlfaGludF8xMWQgLSBoaW50cyBhIGNvdW50cnkgSUUgYXMgYSByZWd1bGF0b3J5IGRvbWFpbgogICogQHdpcGh5OiB0aGUgd2lyZWxlc3MgZGV2aWNlIGdpdmluZyB0aGUgaGludCAodXNlZCBvbmx5IGZvciByZXBvcnRpbmcKICAqCWNvbmZsaWN0cykKKyAqIEBiYW5kOiB0aGUgYmFuZCBvbiB3aGljaCB0aGUgY291bnRyeSBJRSB3YXMgcmVjZWl2ZWQgb24uIFRoaXMgZGV0ZXJtaW5lcworICoJdGhlIGJhbmQgd2UnbGwgcHJvY2VzcyB0aGUgY291bnRyeSBJRSBjaGFubmVsIHRyaXBsZXRzIGZvci4KICAqIEBjb3VudHJ5X2llOiBwb2ludGVyIHRvIHRoZSBjb3VudHJ5IElFCiAgKiBAY291bnRyeV9pZV9sZW46IGxlbmd0aCBvZiB0aGUgY291bnRyeSBJRQogICoKICAqIFdlIHdpbGwgaW50ZXJzZWN0IHRoZSByZCB3aXRoIHRoZSB3aGF0IENSREEgdGVsbHMgdXMgc2hvdWxkIGFwcGx5CiAgKiBmb3IgdGhlIGFscGhhMiB0aGlzIGNvdW50cnkgSUUgYmVsb25ncyB0bywgdGhpcyBwcmV2ZW50cyBBUHMgZnJvbQogICogc2VuZGluZyB1cyBpbmNvcnJlY3Qgb3Igb3V0ZGF0ZWQgaW5mb3JtYXRpb24gYWdhaW5zdCBhIGNvdW50cnkuCisgKgorICogVGhlIEFQIGlzIGV4cGVjdGVkIHRvIHByb3ZpZGUgQ291bnRyeSBJRSBjaGFubmVsIHRyaXBsZXRzIGZvciB0aGUKKyAqIGJhbmQgaXQgaXMgb24uIEl0IGlzIHRlY2huaWNhbGx5IHBvc3NpYmxlIGZvciBBUHMgdG8gc2VuZCBjaGFubmVsCisgKiBjb3VudHJ5IElFIHRyaXBsZXRzIGV2ZW4gZm9yIGNoYW5uZWxzIG91dHNpZGUgb2YgdGhlIGJhbmQgdGhleSBhcmUKKyAqIGluIGJ1dCBmb3IgdGhhdCB0aGV5IHdvdWxkIGhhdmUgdG8gdXNlIHRoZSByZWd1bGF0b3J5IGV4dGVuc2lvbgorICogaW4gY29tYmluYXRpb24gd2l0aCBhIHRyaXBsZXQgYnV0IHRoaXMgYmVoYXZpb3VyIGlzIGN1cnJlbnRseQorICogbm90IG9ic2VydmVkLiBGb3IgdGhpcyByZWFzb24gaWYgYSB0cmlwbGV0IGlzIHNlZW4gd2l0aCBjaGFubmVsCisgKiBpbmZvcm1hdGlvbiBmb3IgYSBiYW5kIHRoZSBCU1MgaXMgbm90IHByZXNlbnQgaW4gaXQgd2lsbCBiZSBpZ25vcmVkLgogICovCiB2b2lkIHJlZ3VsYXRvcnlfaGludF8xMWQoc3RydWN0IHdpcGh5ICp3aXBoeSwKKwkJCSBlbnVtIGllZWU4MDIxMV9iYW5kIGJhbmQsCiAJCQkgdTggKmNvdW50cnlfaWUsCiAJCQkgdTggY291bnRyeV9pZV9sZW4pOwogCisvKioKKyAqIHJlZ3VsYXRvcnlfaGludF9kaXNjb25uZWN0IC0gaW5mb3JtcyBhbGwgZGV2aWNlcyBoYXZlIGJlZW4gZGlzY29ubmV0ZWQKKyAqCisgKiBSZWd1bG90b3J5IHJ1bGVzIGNhbiBiZSBlbmhhbmNlZCBmdXJ0aGVyIHVwb24gc2Nhbm5pbmcgYW5kIHVwb24KKyAqIGNvbm5lY3Rpb24gdG8gYW4gQVAuIFRoZXNlIHJ1bGVzIGJlY29tZSBzdGFsZSBpZiB3ZSBkaXNjb25uZWN0CisgKiBhbmQgZ28gdG8gYW5vdGhlciBjb3VudHJ5LCB3aGV0aGVyIG9yIG5vdCB3ZSBzdXNwZW5kIGFuZCByZXN1bWUuCisgKiBJZiB3ZSBzdXNwZW5kLCBnbyB0byBhbm90aGVyIGNvdW50cnkgYW5kIHJlc3VtZSB3ZSdsbCBhdXRvbWF0aWNhbGx5CisgKiBnZXQgZGlzY29ubmVjdGVkIHNob3J0bHkgYWZ0ZXIgcmVzdW1pbmcgYW5kIHRoaW5ncyB3aWxsIGJlIHJlc2V0IGFzIHdlbGwuCisgKiBUaGlzIHJvdXRpbmUgaXMgYSBoZWxwZXIgdG8gcmVzdG9yZSByZWd1bGF0b3J5IHNldHRpbmdzIHRvIGhvdyB0aGV5IHdlcmUKKyAqIHByaW9yIHRvIG91ciBmaXJzdCBjb25uZWN0IGF0dGVtcHQuIFRoaXMgaW5jbHVkZXMgaWdub3JpbmcgY291bnRyeSBJRSBhbmQKKyAqIGJlYWNvbiByZWd1bGF0b3J5IGhpbnRzLiBUaGUgaWVlZTgwMjExX3JlZ2RvbSBtb2R1bGUgcGFyYW1ldGVyIHdpbGwgYWx3YXlzCisgKiBiZSByZXNwZWN0ZWQgYnV0IGlmIGEgdXNlciBoYWQgc2V0IHRoZSByZWd1bGF0b3J5IGRvbWFpbiB0aGF0IHdpbGwgdGFrZQorICogcHJlY2VkZW5jZS4KKyAqCisgKiBNdXN0IGJlIGNhbGxlZCBmcm9tIHByb2Nlc3MgY29udGV4dC4KKyAqLwordm9pZCByZWd1bGF0b3J5X2hpbnRfZGlzY29ubmVjdCh2b2lkKTsKKwogI2VuZGlmICAvKiBfX05FVF9XSVJFTEVTU19SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3JlZ2RiLmggYi9uZXQvd2lyZWxlc3MvcmVnZGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTgyMjJjCi0tLSAvZGV2L251bGwKKysrIGIvbmV0L3dpcmVsZXNzL3JlZ2RiLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIF9fUkVHREJfSF9fCisjZGVmaW5lIF9fUkVHREJfSF9fCisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3JlZ2RvbWFpbiAqcmVnX3JlZ2RiW107CitleHRlcm4gaW50IHJlZ19yZWdkYl9zaXplOworCisjZW5kaWYgLyogX19SRUdEQl9IX18gKi8KZGlmZiAtLWdpdCBhL25ldC93aXJlbGVzcy9zY2FuLmMgYi9uZXQvd2lyZWxlc3Mvc2Nhbi5jCmluZGV4IDBjMmNiYmUuLjk3OGNhYzMgMTAwNjQ0Ci0tLSBhL25ldC93aXJlbGVzcy9zY2FuLmMKKysrIGIvbmV0L3dpcmVsZXNzL3NjYW4uYwpAQCAtMTAwLDggKzEwMCwxMCBAQAogCWlmIChic3MtPnB1Yi5mcmVlX3ByaXYpCiAJCWJzcy0+cHViLmZyZWVfcHJpdigmYnNzLT5wdWIpOwogCi0JaWYgKGJzcy0+aWVzX2FsbG9jYXRlZCkKLQkJa2ZyZWUoYnNzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMpOworCWlmIChic3MtPmJlYWNvbl9pZXNfYWxsb2NhdGVkKQorCQlrZnJlZShic3MtPnB1Yi5iZWFjb25faWVzKTsKKwlpZiAoYnNzLT5wcm9iZXJlc3BfaWVzX2FsbG9jYXRlZCkKKwkJa2ZyZWUoYnNzLT5wdWIucHJvYmVyZXNwX2llcyk7CiAKIAlCVUdfT04oYXRvbWljX3JlYWQoJmJzcy0+aG9sZCkpOwogCkBAIC0xNDEsOSArMTQzLDkgQEAKIAkJZGV2LT5ic3NfZ2VuZXJhdGlvbisrOwogfQogCi1zdGF0aWMgdTggKmZpbmRfaWUodTggbnVtLCB1OCAqaWVzLCBpbnQgbGVuKQorY29uc3QgdTggKmNmZzgwMjExX2ZpbmRfaWUodTggZWlkLCBjb25zdCB1OCAqaWVzLCBpbnQgbGVuKQogewotCXdoaWxlIChsZW4gPiAyICYmIGllc1swXSAhPSBudW0pIHsKKwl3aGlsZSAobGVuID4gMiAmJiBpZXNbMF0gIT0gZWlkKSB7CiAJCWxlbiAtPSBpZXNbMV0gKyAyOwogCQlpZXMgKz0gaWVzWzFdICsgMjsKIAl9CkBAIC0xNTMsMTEgKzE1NSwxMiBAQAogCQlyZXR1cm4gTlVMTDsKIAlyZXR1cm4gaWVzOwogfQorRVhQT1JUX1NZTUJPTChjZmc4MDIxMV9maW5kX2llKTsKIAogc3RhdGljIGludCBjbXBfaWVzKHU4IG51bSwgdTggKmllczEsIHNpemVfdCBsZW4xLCB1OCAqaWVzMiwgc2l6ZV90IGxlbjIpCiB7Ci0JY29uc3QgdTggKmllMSA9IGZpbmRfaWUobnVtLCBpZXMxLCBsZW4xKTsKLQljb25zdCB1OCAqaWUyID0gZmluZF9pZShudW0sIGllczIsIGxlbjIpOworCWNvbnN0IHU4ICppZTEgPSBjZmc4MDIxMV9maW5kX2llKG51bSwgaWVzMSwgbGVuMSk7CisJY29uc3QgdTggKmllMiA9IGNmZzgwMjExX2ZpbmRfaWUobnVtLCBpZXMyLCBsZW4yKTsKIAlpbnQgcjsKIAogCWlmICghaWUxICYmICFpZTIpCkBAIC0xODMsOSArMTg2LDkgQEAKIAlpZiAoIXNzaWQpCiAJCXJldHVybiB0cnVlOwogCi0Jc3NpZGllID0gZmluZF9pZShXTEFOX0VJRF9TU0lELAotCQkJIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAotCQkJIGEtPmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7CisJc3NpZGllID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9TU0lELAorCQkJCSAgYS0+aW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkJICBhLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOwogCWlmICghc3NpZGllKQogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKHNzaWRpZVsxXSAhPSBzc2lkX2xlbikKQEAgLTIwMiw5ICsyMDUsOSBAQAogCWlmICghaXNfemVyb19ldGhlcl9hZGRyKGEtPmJzc2lkKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaWUgPSBmaW5kX2llKFdMQU5fRUlEX01FU0hfSUQsCi0JCSAgICAgYS0+aW5mb3JtYXRpb25fZWxlbWVudHMsCi0JCSAgICAgYS0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwlpZSA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfTUVTSF9JRCwKKwkJCSAgICAgIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJICAgICAgYS0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKIAlpZiAoIWllKQogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKGllWzFdICE9IG1lc2hpZGxlbikKQEAgLTIxMiw5ICsyMTUsOSBAQAogCWlmIChtZW1jbXAoaWUgKyAyLCBtZXNoaWQsIG1lc2hpZGxlbikpCiAJCXJldHVybiBmYWxzZTsKIAotCWllID0gZmluZF9pZShXTEFOX0VJRF9NRVNIX0NPTkZJRywKLQkJICAgICBhLT5pbmZvcm1hdGlvbl9lbGVtZW50cywKLQkJICAgICBhLT5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOworCWllID0gY2ZnODAyMTFfZmluZF9pZShXTEFOX0VJRF9NRVNIX0NPTkZJRywKKwkJCSAgICAgIGEtPmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJICAgICAgYS0+bGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKIAlpZiAoIWllKQogCQlyZXR1cm4gZmFsc2U7CiAJaWYgKGllWzFdICE9IHNpemVvZihzdHJ1Y3QgaWVlZTgwMjExX21lc2hjb25mX2llKSkKQEAgLTM3NSw4ICszNzgsNyBAQAogCiBzdGF0aWMgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqCiBjZmc4MDIxMV9ic3NfdXBkYXRlKHN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqZGV2LAotCQkgICAgc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqcmVzLAotCQkgICAgYm9vbCBvdmVyd3JpdGUpCisJCSAgICBzdHJ1Y3QgY2ZnODAyMTFfaW50ZXJuYWxfYnNzICpyZXMpCiB7CiAJc3RydWN0IGNmZzgwMjExX2ludGVybmFsX2JzcyAqZm91bmQgPSBOVUxMOwogCWNvbnN0IHU4ICptZXNoaWQsICptZXNoY2ZnOwpAQCAtMzk0LDExICszOTYsMTIgQEAKIAogCWlmIChpc196ZXJvX2V0aGVyX2FkZHIocmVzLT5wdWIuYnNzaWQpKSB7CiAJCS8qIG11c3QgYmUgbWVzaCwgdmVyaWZ5ICovCi0JCW1lc2hpZCA9IGZpbmRfaWUoV0xBTl9FSURfTUVTSF9JRCwgcmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMsCi0JCQkJIHJlcy0+cHViLmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyk7Ci0JCW1lc2hjZmcgPSBmaW5kX2llKFdMQU5fRUlEX01FU0hfQ09ORklHLAotCQkJCSAgcmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMsCi0JCQkJICByZXMtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOworCQltZXNoaWQgPSBjZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX01FU0hfSUQsCisJCQkJCSAgcmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMsCisJCQkJCSAgcmVzLT5wdWIubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzKTsKKwkJbWVzaGNmZyA9IGNmZzgwMjExX2ZpbmRfaWUoV0xBTl9FSURfTUVTSF9DT05GSUcsCisJCQkJCSAgIHJlcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzLAorCQkJCQkgICByZXMtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMpOwogCQlpZiAoIW1lc2hpZCB8fCAhbWVzaGNmZyB8fAogCQkgICAgbWVzaGNmZ1sxXSAhPSBzaXplb2Yoc3RydWN0IGllZWU4MDIxMV9tZXNoY29uZl9pZSkpIHsKIAkJCS8qIGJvZ3VzIG1lc2ggKi8KQEAgLTQxOCwyOCArNDIxLDY0IEBACiAJCWZvdW5kLT5wdWIuY2FwYWJpbGl0eSA9IHJlcy0+cHViLmNhcGFiaWxpdHk7CiAJCWZvdW5kLT50cyA9IHJlcy0+dHM7CiAKLQkJLyogb3ZlcndyaXRlIElFcyAqLwotCQlpZiAob3ZlcndyaXRlKSB7CisJCS8qIFVwZGF0ZSBJRXMgKi8KKwkJaWYgKHJlcy0+cHViLnByb2JlcmVzcF9pZXMpIHsKIAkJCXNpemVfdCB1c2VkID0gZGV2LT53aXBoeS5ic3NfcHJpdl9zaXplICsgc2l6ZW9mKCpyZXMpOwotCQkJc2l6ZV90IGllbGVuID0gcmVzLT5wdWIubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzOworCQkJc2l6ZV90IGllbGVuID0gcmVzLT5wdWIubGVuX3Byb2JlcmVzcF9pZXM7CiAKLQkJCWlmICghZm91bmQtPmllc19hbGxvY2F0ZWQgJiYga3NpemUoZm91bmQpID49IHVzZWQgKyBpZWxlbikgewotCQkJCW1lbWNweShmb3VuZC0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzLAotCQkJCSAgICAgICByZXMtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50cywgaWVsZW4pOwotCQkJCWZvdW5kLT5wdWIubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzID0gaWVsZW47CisJCQlpZiAoZm91bmQtPnB1Yi5wcm9iZXJlc3BfaWVzICYmCisJCQkgICAgIWZvdW5kLT5wcm9iZXJlc3BfaWVzX2FsbG9jYXRlZCAmJgorCQkJICAgIGtzaXplKGZvdW5kKSA+PSB1c2VkICsgaWVsZW4pIHsKKwkJCQltZW1jcHkoZm91bmQtPnB1Yi5wcm9iZXJlc3BfaWVzLAorCQkJCSAgICAgICByZXMtPnB1Yi5wcm9iZXJlc3BfaWVzLCBpZWxlbik7CisJCQkJZm91bmQtPnB1Yi5sZW5fcHJvYmVyZXNwX2llcyA9IGllbGVuOwogCQkJfSBlbHNlIHsKLQkJCQl1OCAqaWVzID0gZm91bmQtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50czsKKwkJCQl1OCAqaWVzID0gZm91bmQtPnB1Yi5wcm9iZXJlc3BfaWVzOwogCi0JCQkJaWYgKGZvdW5kLT5pZXNfYWxsb2NhdGVkKQorCQkJCWlmIChmb3VuZC0+cHJvYmVyZXNwX2llc19hbGxvY2F0ZWQpCiAJCQkJCWllcyA9IGtyZWFsbG9jKGllcywgaWVsZW4sIEdGUF9BVE9NSUMpOwogCQkJCWVsc2UKIAkJCQkJaWVzID0ga21hbGxvYyhpZWxlbiwgR0ZQX0FUT01JQyk7CiAKIAkJCQlpZiAoaWVzKSB7Ci0JCQkJCW1lbWNweShpZXMsIHJlcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzLCBpZWxlbik7Ci0JCQkJCWZvdW5kLT5pZXNfYWxsb2NhdGVkID0gdHJ1ZTsKLQkJCQkJZm91bmQtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50cyA9IGllczsKLQkJCQkJZm91bmQtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMgPSBpZWxlbjsKKwkJCQkJbWVtY3B5KGllcywgcmVzLT5wdWIucHJvYmVyZXNwX2llcywKKwkJCQkJICAgICAgIGllbGVuKTsKKwkJCQkJZm91bmQtPnByb2JlcmVzcF9pZXNfYWxsb2NhdGVkID0gdHJ1ZTsKKwkJCQkJZm91bmQtPnB1Yi5wcm9iZXJlc3BfaWVzID0gaWVzOworCQkJCQlmb3VuZC0+cHViLmxlbl9wcm9iZXJlc3BfaWVzID0gaWVsZW47CisJCQkJfQorCQkJfQorCisJCQkvKiBPdmVycmlkZSBwb3NzaWJsZSBlYXJsaWVyIEJlYWNvbiBmcmFtZSBJRXMgKi8KKwkJCWZvdW5kLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMgPQorCQkJCWZvdW5kLT5wdWIucHJvYmVyZXNwX2llczsKKwkJCWZvdW5kLT5wdWIubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzID0KKwkJCQlmb3VuZC0+cHViLmxlbl9wcm9iZXJlc3BfaWVzOworCQl9CisJCWlmIChyZXMtPnB1Yi5iZWFjb25faWVzKSB7CisJCQlzaXplX3QgdXNlZCA9IGRldi0+d2lwaHkuYnNzX3ByaXZfc2l6ZSArIHNpemVvZigqcmVzKTsKKwkJCXNpemVfdCBpZWxlbiA9IHJlcy0+cHViLmxlbl9iZWFjb25faWVzOworCisJCQlpZiAoZm91bmQtPnB1Yi5iZWFjb25faWVzICYmCisJCQkgICAgIWZvdW5kLT5iZWFjb25faWVzX2FsbG9jYXRlZCAmJgorCQkJICAgIGtzaXplKGZvdW5kKSA+PSB1c2VkICsgaWVsZW4pIHsKKwkJCQltZW1jcHkoZm91bmQtPnB1Yi5iZWFjb25faWVzLAorCQkJCSAgICAgICByZXMtPnB1Yi5iZWFjb25faWVzLCBpZWxlbik7CisJCQkJZm91bmQtPnB1Yi5sZW5fYmVhY29uX2llcyA9IGllbGVuOworCQkJfSBlbHNlIHsKKwkJCQl1OCAqaWVzID0gZm91bmQtPnB1Yi5iZWFjb25faWVzOworCisJCQkJaWYgKGZvdW5kLT5iZWFjb25faWVzX2FsbG9jYXRlZCkKKwkJCQkJaWVzID0ga3JlYWxsb2MoaWVzLCBpZWxlbiwgR0ZQX0FUT01JQyk7CisJCQkJZWxzZQorCQkJCQlpZXMgPSBrbWFsbG9jKGllbGVuLCBHRlBfQVRPTUlDKTsKKworCQkJCWlmIChpZXMpIHsKKwkJCQkJbWVtY3B5KGllcywgcmVzLT5wdWIuYmVhY29uX2llcywKKwkJCQkJICAgICAgIGllbGVuKTsKKwkJCQkJZm91bmQtPmJlYWNvbl9pZXNfYWxsb2NhdGVkID0gdHJ1ZTsKKwkJCQkJZm91bmQtPnB1Yi5iZWFjb25faWVzID0gaWVzOworCQkJCQlmb3VuZC0+cHViLmxlbl9iZWFjb25faWVzID0gaWVsZW47CiAJCQkJfQogCQkJfQogCQl9CkBAIC00ODksMTQgKzUyOCwyNiBAQAogCXJlcy0+cHViLnRzZiA9IHRpbWVzdGFtcDsKIAlyZXMtPnB1Yi5iZWFjb25faW50ZXJ2YWwgPSBiZWFjb25faW50ZXJ2YWw7CiAJcmVzLT5wdWIuY2FwYWJpbGl0eSA9IGNhcGFiaWxpdHk7Ci0JLyogcG9pbnQgdG8gYWZ0ZXIgdGhlIHByaXZhdGUgYXJlYSAqLwotCXJlcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzID0gKHU4ICopcmVzICsgc2l6ZW9mKCpyZXMpICsgcHJpdnN6OwotCW1lbWNweShyZXMtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50cywgaWUsIGllbGVuKTsKLQlyZXMtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMgPSBpZWxlbjsKKwkvKgorCSAqIFNpbmNlIHdlIGRvIG5vdCBrbm93IGhlcmUgd2hldGhlciB0aGUgSUVzIGFyZSBmcm9tIGEgQmVhY29uIG9yIFByb2JlCisJICogUmVzcG9uc2UgZnJhbWUsIHdlIG5lZWQgdG8gcGljayBvbmUgb2YgdGhlIG9wdGlvbnMgYW5kIG9ubHkgdXNlIGl0CisJICogd2l0aCB0aGUgZHJpdmVyIHRoYXQgZG9lcyBub3QgcHJvdmlkZSB0aGUgZnVsbCBCZWFjb24vUHJvYmUgUmVzcG9uc2UKKwkgKiBmcmFtZS4gVXNlIEJlYWNvbiBmcmFtZSBwb2ludGVyIHRvIGF2b2lkIGluZGljYXRpbmcgdGhhdCB0aGlzIHNob3VsZAorCSAqIG92ZXJyaWRlIHRoZSBpbmZvcm1hdGlvbl9lbGVtZW50cyBwb2ludGVyIHNob3VsZCB3ZSBoYXZlIHJlY2VpdmVkIGFuCisJICogZWFybGllciBpbmRpY2F0aW9uIG9mIFByb2JlIFJlc3BvbnNlIGRhdGEuCisJICoKKwkgKiBUaGUgaW5pdGlhbCBidWZmZXIgZm9yIHRoZSBJRXMgaXMgYWxsb2NhdGVkIHdpdGggdGhlIEJTUyBlbnRyeSBhbmQKKwkgKiBpcyBsb2NhdGVkIGFmdGVyIHRoZSBwcml2YXRlIGFyZWEuCisJICovCisJcmVzLT5wdWIuYmVhY29uX2llcyA9ICh1OCAqKXJlcyArIHNpemVvZigqcmVzKSArIHByaXZzejsKKwltZW1jcHkocmVzLT5wdWIuYmVhY29uX2llcywgaWUsIGllbGVuKTsKKwlyZXMtPnB1Yi5sZW5fYmVhY29uX2llcyA9IGllbGVuOworCXJlcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzID0gcmVzLT5wdWIuYmVhY29uX2llczsKKwlyZXMtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMgPSByZXMtPnB1Yi5sZW5fYmVhY29uX2llczsKIAogCWtyZWZfaW5pdCgmcmVzLT5yZWYpOwogCi0JcmVzID0gY2ZnODAyMTFfYnNzX3VwZGF0ZSh3aXBoeV90b19kZXYod2lwaHkpLCByZXMsIDApOworCXJlcyA9IGNmZzgwMjExX2Jzc191cGRhdGUod2lwaHlfdG9fZGV2KHdpcGh5KSwgcmVzKTsKIAlpZiAoIXJlcykKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTUxNyw3ICs1NjgsNiBAQAogCXN0cnVjdCBjZmc4MDIxMV9pbnRlcm5hbF9ic3MgKnJlczsKIAlzaXplX3QgaWVsZW4gPSBsZW4gLSBvZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsCiAJCQkJICAgICAgdS5wcm9iZV9yZXNwLnZhcmlhYmxlKTsKLQlib29sIG92ZXJ3cml0ZTsKIAlzaXplX3QgcHJpdnN6ID0gd2lwaHktPmJzc19wcml2X3NpemU7CiAKIAlpZiAoV0FSTl9PTih3aXBoeS0+c2lnbmFsX3R5cGUgPT0gTkw4MDIxMV9CU1NfU0lHTkFMX1VOU1BFQyAmJgpAQCAtNTM4LDE2ICs1ODgsMjggQEAKIAlyZXMtPnB1Yi50c2YgPSBsZTY0X3RvX2NwdShtZ210LT51LnByb2JlX3Jlc3AudGltZXN0YW1wKTsKIAlyZXMtPnB1Yi5iZWFjb25faW50ZXJ2YWwgPSBsZTE2X3RvX2NwdShtZ210LT51LnByb2JlX3Jlc3AuYmVhY29uX2ludCk7CiAJcmVzLT5wdWIuY2FwYWJpbGl0eSA9IGxlMTZfdG9fY3B1KG1nbXQtPnUucHJvYmVfcmVzcC5jYXBhYl9pbmZvKTsKLQkvKiBwb2ludCB0byBhZnRlciB0aGUgcHJpdmF0ZSBhcmVhICovCi0JcmVzLT5wdWIuaW5mb3JtYXRpb25fZWxlbWVudHMgPSAodTggKilyZXMgKyBzaXplb2YoKnJlcykgKyBwcml2c3o7Ci0JbWVtY3B5KHJlcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzLCBtZ210LT51LnByb2JlX3Jlc3AudmFyaWFibGUsIGllbGVuKTsKLQlyZXMtPnB1Yi5sZW5faW5mb3JtYXRpb25fZWxlbWVudHMgPSBpZWxlbjsKKwkvKgorCSAqIFRoZSBpbml0aWFsIGJ1ZmZlciBmb3IgdGhlIElFcyBpcyBhbGxvY2F0ZWQgd2l0aCB0aGUgQlNTIGVudHJ5IGFuZAorCSAqIGlzIGxvY2F0ZWQgYWZ0ZXIgdGhlIHByaXZhdGUgYXJlYS4KKwkgKi8KKwlpZiAoaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AobWdtdC0+ZnJhbWVfY29udHJvbCkpIHsKKwkJcmVzLT5wdWIucHJvYmVyZXNwX2llcyA9ICh1OCAqKSByZXMgKyBzaXplb2YoKnJlcykgKyBwcml2c3o7CisJCW1lbWNweShyZXMtPnB1Yi5wcm9iZXJlc3BfaWVzLCBtZ210LT51LnByb2JlX3Jlc3AudmFyaWFibGUsCisJCSAgICAgICBpZWxlbik7CisJCXJlcy0+cHViLmxlbl9wcm9iZXJlc3BfaWVzID0gaWVsZW47CisJCXJlcy0+cHViLmluZm9ybWF0aW9uX2VsZW1lbnRzID0gcmVzLT5wdWIucHJvYmVyZXNwX2llczsKKwkJcmVzLT5wdWIubGVuX2luZm9ybWF0aW9uX2VsZW1lbnRzID0gcmVzLT5wdWIubGVuX3Byb2JlcmVzcF9pZXM7CisJfSBlbHNlIHsKKwkJcmVzLT5wdWIuYmVhY29uX2llcyA9ICh1OCAqKSByZXMgKyBzaXplb2YoKnJlcykgKyBwcml2c3o7CisJCW1lbWNweShyZXMtPnB1Yi5iZWFjb25faWVzLCBtZ210LT51LmJlYWNvbi52YXJpYWJsZSwgaWVsZW4pOworCQlyZXMtPnB1Yi5sZW5fYmVhY29uX2llcyA9IGllbGVuOworCQlyZXMtPnB1Yi5pbmZvcm1hdGlvbl9lbGVtZW50cyA9IHJlcy0+cHViLmJlYWNvbl9pZXM7CisJCXJlcy0+cHViLmxlbl9pbmZvcm1hdGlvbl9lbGVtZW50cyA9IHJlcy0+cHViLmxlbl9iZWFjb25faWVzOworCX0KIAogCWtyZWZfaW5pdCgmcmVzLT5yZWYpOwogCi0Jb3ZlcndyaXRlID0gaWVlZTgwMjExX2lzX3Byb2JlX3Jlc3AobWdtdC0+ZnJhbWVfY29udHJvbCk7Ci0KLQlyZXMgPSBjZmc4MDIxMV9ic3NfdXBkYXRlKHdpcGh5X3RvX2Rldih3aXBoeSksIHJlcywgb3ZlcndyaXRlKTsKKwlyZXMgPSBjZmc4MDIxMV9ic3NfdXBkYXRlKHdpcGh5X3RvX2Rldih3aXBoeSksIHJlcyk7CiAJaWYgKCFyZXMpCiAJCXJldHVybiBOVUxMOwogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvc21lLmMgYi9uZXQvd2lyZWxlc3Mvc21lLmMKaW5kZXggZGMwZmM0OS4uMTdmZGUwZCAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3NtZS5jCisrKyBiL25ldC93aXJlbGVzcy9zbWUuYwpAQCAtMzQsNiArMzQsNDQgQEAKIAlib29sIGF1dG9fYXV0aCwgcHJldl9ic3NpZF92YWxpZDsKIH07CiAKK2Jvb2wgY2ZnODAyMTFfaXNfYWxsX2lkbGUodm9pZCkKK3sKKwlzdHJ1Y3QgY2ZnODAyMTFfcmVnaXN0ZXJlZF9kZXZpY2UgKnJkZXY7CisJc3RydWN0IHdpcmVsZXNzX2RldiAqd2RldjsKKwlib29sIGlzX2FsbF9pZGxlID0gdHJ1ZTsKKworCW11dGV4X2xvY2soJmNmZzgwMjExX211dGV4KTsKKworCS8qCisJICogQWxsIGRldmljZXMgbXVzdCBiZSBpZGxlIGFzIG90aGVyd2lzZSBpZiB5b3UgYXJlIGFjdGl2ZWx5CisJICogc2Nhbm5pbmcgc29tZSBuZXcgYmVhY29uIGhpbnRzIGNvdWxkIGJlIGxlYXJuZWQgYW5kIHdvdWxkCisJICogY291bnQgYXMgbmV3IHJlZ3VsYXRvcnkgaGludHMuCisJICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShyZGV2LCAmY2ZnODAyMTFfcmRldl9saXN0LCBsaXN0KSB7CisJCWNmZzgwMjExX2xvY2tfcmRldihyZGV2KTsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh3ZGV2LCAmcmRldi0+bmV0ZGV2X2xpc3QsIGxpc3QpIHsKKwkJCXdkZXZfbG9jayh3ZGV2KTsKKwkJCWlmICh3ZGV2LT5zbWVfc3RhdGUgIT0gQ0ZHODAyMTFfU01FX0lETEUpCisJCQkJaXNfYWxsX2lkbGUgPSBmYWxzZTsKKwkJCXdkZXZfdW5sb2NrKHdkZXYpOworCQl9CisJCWNmZzgwMjExX3VubG9ja19yZGV2KHJkZXYpOworCX0KKworCW11dGV4X3VubG9jaygmY2ZnODAyMTFfbXV0ZXgpOworCisJcmV0dXJuIGlzX2FsbF9pZGxlOworfQorCitzdGF0aWMgdm9pZCBkaXNjb25uZWN0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCWlmICghY2ZnODAyMTFfaXNfYWxsX2lkbGUoKSkKKwkJcmV0dXJuOworCisJcmVndWxhdG9yeV9oaW50X2Rpc2Nvbm5lY3QoKTsKK30KKworc3RhdGljIERFQ0xBUkVfV09SSyhjZmc4MDIxMV9kaXNjb25uZWN0X3dvcmssIGRpc2Nvbm5lY3Rfd29yayk7CiAKIHN0YXRpYyBpbnQgY2ZnODAyMTFfY29ubl9zY2FuKHN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYpCiB7CkBAIC00NTQsNiArNDkyLDcgQEAKIAkgKiAtIGFuZCBjb3VudHJ5X2llWzFdIHdoaWNoIGlzIHRoZSBJRSBsZW5ndGgKIAkgKi8KIAlyZWd1bGF0b3J5X2hpbnRfMTFkKHdkZXYtPndpcGh5LAorCQkJICAgIGJzcy0+Y2hhbm5lbC0+YmFuZCwKIAkJCSAgICBjb3VudHJ5X2llICsgMiwKIAkJCSAgICBjb3VudHJ5X2llWzFdKTsKIH0KQEAgLTY1Nyw2ICs2OTYsOCBAQAogCXdpcmVsZXNzX3NlbmRfZXZlbnQoZGV2LCBTSU9DR0lXQVAsICZ3cnF1LCBOVUxMKTsKIAl3ZGV2LT53ZXh0LmNvbm5lY3Quc3NpZF9sZW4gPSAwOwogI2VuZGlmCisKKwlzY2hlZHVsZV93b3JrKCZjZmc4MDIxMV9kaXNjb25uZWN0X3dvcmspOwogfQogCiB2b2lkIGNmZzgwMjExX2Rpc2Nvbm5lY3RlZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgcmVhc29uLApkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3N5c2ZzLmMgYi9uZXQvd2lyZWxlc3Mvc3lzZnMuYwppbmRleCBlZmUzYzVjLi45ZjJjZWYzIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvc3lzZnMuYworKysgYi9uZXQvd2lyZWxlc3Mvc3lzZnMuYwpAQCAtMzMsMTAgKzMzLDMwIEBACiAKIFNIT1dfRk1UKGluZGV4LCAiJWQiLCB3aXBoeV9pZHgpOwogU0hPV19GTVQobWFjYWRkcmVzcywgIiVwTSIsIHdpcGh5LnBlcm1fYWRkcik7CitTSE9XX0ZNVChhZGRyZXNzX21hc2ssICIlcE0iLCB3aXBoeS5hZGRyX21hc2spOworCitzdGF0aWMgc3NpemVfdCBhZGRyZXNzZXNfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgd2lwaHkgKndpcGh5ID0gJmRldl90b19yZGV2KGRldiktPndpcGh5OworCWNoYXIgKnN0YXJ0ID0gYnVmOworCWludCBpOworCisJaWYgKCF3aXBoeS0+YWRkcmVzc2VzKQorCQlyZXR1cm4gc3ByaW50ZihidWYsICIlcE1cbiIsIHdpcGh5LT5wZXJtX2FkZHIpOworCisJZm9yIChpID0gMDsgaSA8IHdpcGh5LT5uX2FkZHJlc3NlczsgaSsrKQorCQlidWYgKz0gc3ByaW50ZihidWYsICIlcE1cbiIsICZ3aXBoeS0+YWRkcmVzc2VzW2ldLmFkZHIpOworCisJcmV0dXJuIGJ1ZiAtIHN0YXJ0OworfQogCiBzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgaWVlZTgwMjExX2Rldl9hdHRyc1tdID0gewogCV9fQVRUUl9STyhpbmRleCksCiAJX19BVFRSX1JPKG1hY2FkZHJlc3MpLAorCV9fQVRUUl9STyhhZGRyZXNzX21hc2spLAorCV9fQVRUUl9STyhhZGRyZXNzZXMpLAogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3MvdXRpbC5jIGIvbmV0L3dpcmVsZXNzL3V0aWwuYwppbmRleCA1OTM2MWZkLi5iZTJhYjhjIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3MvdXRpbC5jCisrKyBiL25ldC93aXJlbGVzcy91dGlsLmMKQEAgLTIyNyw4ICsyMjcsMTEgQEAKIAlpZiAoaWVlZTgwMjExX2lzX2RhdGEoZmMpKSB7CiAJCWlmIChpZWVlODAyMTFfaGFzX2E0KGZjKSkKIAkJCWhkcmxlbiA9IDMwOwotCQlpZiAoaWVlZTgwMjExX2lzX2RhdGFfcW9zKGZjKSkKKwkJaWYgKGllZWU4MDIxMV9pc19kYXRhX3FvcyhmYykpIHsKIAkJCWhkcmxlbiArPSBJRUVFODAyMTFfUU9TX0NUTF9MRU47CisJCQlpZiAoaWVlZTgwMjExX2hhc19vcmRlcihmYykpCisJCQkJaGRybGVuICs9IElFRUU4MDIxMV9IVF9DVExfTEVOOworCQl9CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMjg1LDcgKzI4OCw3IEBACiAJfQogfQogCi1pbnQgaWVlZTgwMjExX2RhdGFfdG9fODAyMyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCAqYWRkciwKK2ludCBpZWVlODAyMTFfZGF0YV90b184MDIzKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU4ICphZGRyLAogCQkJICAgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUpCiB7CiAJc3RydWN0IGllZWU4MDIxMV9oZHIgKmhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX2hkciAqKSBza2ItPmRhdGE7CkBAIC0zODMsNyArMzg2LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woaWVlZTgwMjExX2RhdGFfdG9fODAyMyk7CiAKLWludCBpZWVlODAyMTFfZGF0YV9mcm9tXzgwMjMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKmFkZHIsCitpbnQgaWVlZTgwMjExX2RhdGFfZnJvbV84MDIzKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU4ICphZGRyLAogCQkJICAgICBlbnVtIG5sODAyMTFfaWZ0eXBlIGlmdHlwZSwgdTggKmJzc2lkLCBib29sIHFvcykKIHsKIAlzdHJ1Y3QgaWVlZTgwMjExX2hkciBoZHI7CkBAIC00OTcsNiArNTAwLDEwMSBAQAogfQogRVhQT1JUX1NZTUJPTChpZWVlODAyMTFfZGF0YV9mcm9tXzgwMjMpOwogCisKK3ZvaWQgaWVlZTgwMjExX2Ftc2R1X3RvXzgwMjNzKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsCisJCQkgICAgICBjb25zdCB1OCAqYWRkciwgZW51bSBubDgwMjExX2lmdHlwZSBpZnR5cGUsCisJCQkgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgZXh0cmFfaGVhZHJvb20pCit7CisJc3RydWN0IHNrX2J1ZmYgKmZyYW1lID0gTlVMTDsKKwl1MTYgZXRoZXJ0eXBlOworCXU4ICpwYXlsb2FkOworCWNvbnN0IHN0cnVjdCBldGhoZHIgKmV0aDsKKwlpbnQgcmVtYWluaW5nLCBlcnI7CisJdTggZHN0W0VUSF9BTEVOXSwgc3JjW0VUSF9BTEVOXTsKKworCWVyciA9IGllZWU4MDIxMV9kYXRhX3RvXzgwMjMoc2tiLCBhZGRyLCBpZnR5cGUpOworCWlmIChlcnIpCisJCWdvdG8gb3V0OworCisJLyogc2tpcCB0aGUgd3JhcHBpbmcgaGVhZGVyICovCisJZXRoID0gKHN0cnVjdCBldGhoZHIgKikgc2tiX3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGV0aGhkcikpOworCWlmICghZXRoKQorCQlnb3RvIG91dDsKKworCXdoaWxlIChza2IgIT0gZnJhbWUpIHsKKwkJdTggcGFkZGluZzsKKwkJX19iZTE2IGxlbiA9IGV0aC0+aF9wcm90bzsKKwkJdW5zaWduZWQgaW50IHN1YmZyYW1lX2xlbiA9IHNpemVvZihzdHJ1Y3QgZXRoaGRyKSArIG50b2hzKGxlbik7CisKKwkJcmVtYWluaW5nID0gc2tiLT5sZW47CisJCW1lbWNweShkc3QsIGV0aC0+aF9kZXN0LCBFVEhfQUxFTik7CisJCW1lbWNweShzcmMsIGV0aC0+aF9zb3VyY2UsIEVUSF9BTEVOKTsKKworCQlwYWRkaW5nID0gKDQgLSBzdWJmcmFtZV9sZW4pICYgMHgzOworCQkvKiB0aGUgbGFzdCBNU0RVIGhhcyBubyBwYWRkaW5nICovCisJCWlmIChzdWJmcmFtZV9sZW4gPiByZW1haW5pbmcpCisJCQlnb3RvIHB1cmdlOworCisJCXNrYl9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBldGhoZHIpKTsKKwkJLyogcmV1c2Ugc2tiIGZvciB0aGUgbGFzdCBzdWJmcmFtZSAqLworCQlpZiAocmVtYWluaW5nIDw9IHN1YmZyYW1lX2xlbiArIHBhZGRpbmcpCisJCQlmcmFtZSA9IHNrYjsKKwkJZWxzZSB7CisJCQl1bnNpZ25lZCBpbnQgaGxlbiA9IEFMSUdOKGV4dHJhX2hlYWRyb29tLCA0KTsKKwkJCS8qCisJCQkgKiBBbGxvY2F0ZSBhbmQgcmVzZXJ2ZSB0d28gYnl0ZXMgbW9yZSBmb3IgcGF5bG9hZAorCQkJICogYWxpZ25tZW50IHNpbmNlIHNpemVvZihzdHJ1Y3QgZXRoaGRyKSBpcyAxNC4KKwkJCSAqLworCQkJZnJhbWUgPSBkZXZfYWxsb2Nfc2tiKGhsZW4gKyBzdWJmcmFtZV9sZW4gKyAyKTsKKwkJCWlmICghZnJhbWUpCisJCQkJZ290byBwdXJnZTsKKworCQkJc2tiX3Jlc2VydmUoZnJhbWUsIGhsZW4gKyBzaXplb2Yoc3RydWN0IGV0aGhkcikgKyAyKTsKKwkJCW1lbWNweShza2JfcHV0KGZyYW1lLCBudG9ocyhsZW4pKSwgc2tiLT5kYXRhLAorCQkJCW50b2hzKGxlbikpOworCisJCQlldGggPSAoc3RydWN0IGV0aGhkciAqKXNrYl9wdWxsKHNrYiwgbnRvaHMobGVuKSArCisJCQkJCQkJcGFkZGluZyk7CisJCQlpZiAoIWV0aCkgeworCQkJCWRldl9rZnJlZV9za2IoZnJhbWUpOworCQkJCWdvdG8gcHVyZ2U7CisJCQl9CisJCX0KKworCQlza2JfcmVzZXRfbmV0d29ya19oZWFkZXIoZnJhbWUpOworCQlmcmFtZS0+ZGV2ID0gc2tiLT5kZXY7CisJCWZyYW1lLT5wcmlvcml0eSA9IHNrYi0+cHJpb3JpdHk7CisKKwkJcGF5bG9hZCA9IGZyYW1lLT5kYXRhOworCQlldGhlcnR5cGUgPSAocGF5bG9hZFs2XSA8PCA4KSB8IHBheWxvYWRbN107CisKKwkJaWYgKGxpa2VseSgoY29tcGFyZV9ldGhlcl9hZGRyKHBheWxvYWQsIHJmYzEwNDJfaGVhZGVyKSA9PSAwICYmCisJCQkgICAgZXRoZXJ0eXBlICE9IEVUSF9QX0FBUlAgJiYgZXRoZXJ0eXBlICE9IEVUSF9QX0lQWCkgfHwKKwkJCSAgIGNvbXBhcmVfZXRoZXJfYWRkcihwYXlsb2FkLAorCQkJCQkgICAgICBicmlkZ2VfdHVubmVsX2hlYWRlcikgPT0gMCkpIHsKKwkJCS8qIHJlbW92ZSBSRkMxMDQyIG9yIEJyaWRnZS1UdW5uZWwKKwkJCSAqIGVuY2Fwc3VsYXRpb24gYW5kIHJlcGxhY2UgRXRoZXJUeXBlICovCisJCQlza2JfcHVsbChmcmFtZSwgNik7CisJCQltZW1jcHkoc2tiX3B1c2goZnJhbWUsIEVUSF9BTEVOKSwgc3JjLCBFVEhfQUxFTik7CisJCQltZW1jcHkoc2tiX3B1c2goZnJhbWUsIEVUSF9BTEVOKSwgZHN0LCBFVEhfQUxFTik7CisJCX0gZWxzZSB7CisJCQltZW1jcHkoc2tiX3B1c2goZnJhbWUsIHNpemVvZihfX2JlMTYpKSwgJmxlbiwKKwkJCQlzaXplb2YoX19iZTE2KSk7CisJCQltZW1jcHkoc2tiX3B1c2goZnJhbWUsIEVUSF9BTEVOKSwgc3JjLCBFVEhfQUxFTik7CisJCQltZW1jcHkoc2tiX3B1c2goZnJhbWUsIEVUSF9BTEVOKSwgZHN0LCBFVEhfQUxFTik7CisJCX0KKwkJX19za2JfcXVldWVfdGFpbChsaXN0LCBmcmFtZSk7CisJfQorCisJcmV0dXJuOworCisgcHVyZ2U6CisJX19za2JfcXVldWVfcHVyZ2UobGlzdCk7Cisgb3V0OgorCWRldl9rZnJlZV9za2Ioc2tiKTsKK30KK0VYUE9SVF9TWU1CT0woaWVlZTgwMjExX2Ftc2R1X3RvXzgwMjNzKTsKKwogLyogR2l2ZW4gYSBkYXRhIGZyYW1lIGRldGVybWluZSB0aGUgODAyLjFwLzFkIHRhZyB0byB1c2UuICovCiB1bnNpZ25lZCBpbnQgY2ZnODAyMTFfY2xhc3NpZnk4MDIxZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewpAQCAtNzIwLDMgKzgxOCwzNiBAQAogCiAJcmV0dXJuIGVycjsKIH0KKwordTE2IGNmZzgwMjExX2NhbGN1bGF0ZV9iaXRyYXRlKHN0cnVjdCByYXRlX2luZm8gKnJhdGUpCit7CisJaW50IG1vZHVsYXRpb24sIHN0cmVhbXMsIGJpdHJhdGU7CisKKwlpZiAoIShyYXRlLT5mbGFncyAmIFJBVEVfSU5GT19GTEFHU19NQ1MpKQorCQlyZXR1cm4gcmF0ZS0+bGVnYWN5OworCisJLyogdGhlIGZvcm11bGEgYmVsb3cgZG9lcyBvbmx5IHdvcmsgZm9yIE1DUyB2YWx1ZXMgc21hbGxlciB0aGFuIDMyICovCisJaWYgKHJhdGUtPm1jcyA+PSAzMikKKwkJcmV0dXJuIDA7CisKKwltb2R1bGF0aW9uID0gcmF0ZS0+bWNzICYgNzsKKwlzdHJlYW1zID0gKHJhdGUtPm1jcyA+PiAzKSArIDE7CisKKwliaXRyYXRlID0gKHJhdGUtPmZsYWdzICYgUkFURV9JTkZPX0ZMQUdTXzQwX01IWl9XSURUSCkgPworCQkJMTM1MDAwMDAgOiA2NTAwMDAwOworCisJaWYgKG1vZHVsYXRpb24gPCA0KQorCQliaXRyYXRlICo9IChtb2R1bGF0aW9uICsgMSk7CisJZWxzZSBpZiAobW9kdWxhdGlvbiA9PSA0KQorCQliaXRyYXRlICo9IChtb2R1bGF0aW9uICsgMik7CisJZWxzZQorCQliaXRyYXRlICo9IChtb2R1bGF0aW9uICsgMyk7CisKKwliaXRyYXRlICo9IHN0cmVhbXM7CisKKwlpZiAocmF0ZS0+ZmxhZ3MgJiBSQVRFX0lORk9fRkxBR1NfU0hPUlRfR0kpCisJCWJpdHJhdGUgPSAoYml0cmF0ZSAvIDkpICogMTA7CisKKwkvKiBkbyBOT1Qgcm91bmQgZG93biBoZXJlICovCisJcmV0dXJuIChiaXRyYXRlICsgNTAwMDApIC8gMTAwMDAwOworfQpkaWZmIC0tZ2l0IGEvbmV0L3dpcmVsZXNzL3dleHQtY29tcGF0LmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwppbmRleCA1NGZhY2UzLi45YWI1MTgzIDEwMDY0NAotLS0gYS9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYworKysgYi9uZXQvd2lyZWxlc3Mvd2V4dC1jb21wYXQuYwpAQCAtMTA5OSw4ICsxMDk5LDggQEAKIHsKIAlzdHJ1Y3Qgd2lyZWxlc3NfZGV2ICp3ZGV2ID0gZGV2LT5pZWVlODAyMTFfcHRyOwogCXN0cnVjdCBjZmc4MDIxMV9yZWdpc3RlcmVkX2RldmljZSAqcmRldiA9IHdpcGh5X3RvX2Rldih3ZGV2LT53aXBoeSk7Ci0JYm9vbCBwcyA9IHdkZXYtPndleHQucHM7Ci0JaW50IHRpbWVvdXQgPSB3ZGV2LT53ZXh0LnBzX3RpbWVvdXQ7CisJYm9vbCBwcyA9IHdkZXYtPnBzOworCWludCB0aW1lb3V0ID0gd2Rldi0+cHNfdGltZW91dDsKIAlpbnQgZXJyOwogCiAJaWYgKHdkZXYtPmlmdHlwZSAhPSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQpAQCAtMTEzMyw4ICsxMTMzLDggQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0Jd2Rldi0+d2V4dC5wcyA9IHBzOwotCXdkZXYtPndleHQucHNfdGltZW91dCA9IHRpbWVvdXQ7CisJd2Rldi0+cHMgPSBwczsKKwl3ZGV2LT5wc190aW1lb3V0ID0gdGltZW91dDsKIAogCXJldHVybiAwOwogCkBAIC0xMTQ3LDcgKzExNDcsNyBAQAogewogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CiAKLQl3cnEtPmRpc2FibGVkID0gIXdkZXYtPndleHQucHM7CisJd3JxLT5kaXNhYmxlZCA9ICF3ZGV2LT5wczsKIAogCXJldHVybiAwOwogfQpAQCAtMTIwNCwyMSArMTIwNCw0NyBAQAogCXN0cnVjdCB3aXJlbGVzc19kZXYgKndkZXYgPSBkZXYtPmllZWU4MDIxMV9wdHI7CiAJc3RydWN0IGNmZzgwMjExX3JlZ2lzdGVyZWRfZGV2aWNlICpyZGV2ID0gd2lwaHlfdG9fZGV2KHdkZXYtPndpcGh5KTsKIAlzdHJ1Y3QgY2ZnODAyMTFfYml0cmF0ZV9tYXNrIG1hc2s7CisJdTMyIGZpeGVkLCBtYXhyYXRlOworCXN0cnVjdCBpZWVlODAyMTFfc3VwcG9ydGVkX2JhbmQgKnNiYW5kOworCWludCBiYW5kLCByaWR4OworCWJvb2wgbWF0Y2ggPSBmYWxzZTsKIAogCWlmICghcmRldi0+b3BzLT5zZXRfYml0cmF0ZV9tYXNrKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQltYXNrLmZpeGVkID0gMDsKLQltYXNrLm1heHJhdGUgPSAwOworCW1lbXNldCgmbWFzaywgMCwgc2l6ZW9mKG1hc2spKTsKKwlmaXhlZCA9IDA7CisJbWF4cmF0ZSA9ICh1MzIpLTE7CiAKIAlpZiAocmF0ZS0+dmFsdWUgPCAwKSB7CiAJCS8qIG5vdGhpbmcgKi8KIAl9IGVsc2UgaWYgKHJhdGUtPmZpeGVkKSB7Ci0JCW1hc2suZml4ZWQgPSByYXRlLT52YWx1ZSAvIDEwMDA7IC8qIGticHMgKi8KKwkJZml4ZWQgPSByYXRlLT52YWx1ZSAvIDEwMDAwMDsKIAl9IGVsc2UgewotCQltYXNrLm1heHJhdGUgPSByYXRlLT52YWx1ZSAvIDEwMDA7IC8qIGticHMgKi8KKwkJbWF4cmF0ZSA9IHJhdGUtPnZhbHVlIC8gMTAwMDAwOwogCX0KIAorCWZvciAoYmFuZCA9IDA7IGJhbmQgPCBJRUVFODAyMTFfTlVNX0JBTkRTOyBiYW5kKyspIHsKKwkJc2JhbmQgPSB3ZGV2LT53aXBoeS0+YmFuZHNbYmFuZF07CisJCWlmIChzYmFuZCA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWZvciAocmlkeCA9IDA7IHJpZHggPCBzYmFuZC0+bl9iaXRyYXRlczsgcmlkeCsrKSB7CisJCQlzdHJ1Y3QgaWVlZTgwMjExX3JhdGUgKnNyYXRlID0gJnNiYW5kLT5iaXRyYXRlc1tyaWR4XTsKKwkJCWlmIChmaXhlZCA9PSBzcmF0ZS0+Yml0cmF0ZSkgeworCQkJCW1hc2suY29udHJvbFtiYW5kXS5sZWdhY3kgPSAxIDw8IHJpZHg7CisJCQkJbWF0Y2ggPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHNyYXRlLT5iaXRyYXRlIDw9IG1heHJhdGUpIHsKKwkJCQltYXNrLmNvbnRyb2xbYmFuZF0ubGVnYWN5IHw9IDEgPDwgcmlkeDsKKwkJCQltYXRjaCA9IHRydWU7CisJCQl9CisJCX0KKwl9CisKKwlpZiAoIW1hdGNoKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCXJldHVybiByZGV2LT5vcHMtPnNldF9iaXRyYXRlX21hc2sod2Rldi0+d2lwaHksIGRldiwgTlVMTCwgJm1hc2spOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoY2ZnODAyMTFfd2V4dF9zaXdyYXRlKTsKQEAgLTEyNTcsMTAgKzEyODMsNyBAQAogCWlmICghKHNpbmZvLmZpbGxlZCAmIFNUQVRJT05fSU5GT19UWF9CSVRSQVRFKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmF0ZS0+dmFsdWUgPSAwOwotCi0JaWYgKCEoc2luZm8udHhyYXRlLmZsYWdzICYgUkFURV9JTkZPX0ZMQUdTX01DUykpCi0JCXJhdGUtPnZhbHVlID0gMTAwMDAwICogc2luZm8udHhyYXRlLmxlZ2FjeTsKKwlyYXRlLT52YWx1ZSA9IDEwMDAwMCAqIGNmZzgwMjExX2NhbGN1bGF0ZV9iaXRyYXRlKCZzaW5mby50eHJhdGUpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmMgYi9uZXQvd2lyZWxlc3Mvd2V4dC1wcm9jLmMKaW5kZXggMjczYTdmNy4uOGJhZmEzMSAxMDA2NDQKLS0tIGEvbmV0L3dpcmVsZXNzL3dleHQtcHJvYy5jCisrKyBiL25ldC93aXJlbGVzcy93ZXh0LXByb2MuYwpAQCAtMTQwLDcgKzE0MCw3IEBACiAJLnJlbGVhc2UgPSBzZXFfcmVsZWFzZV9uZXQsCiB9OwogCi1pbnQgd2V4dF9wcm9jX2luaXQoc3RydWN0IG5ldCAqbmV0KQoraW50IF9fbmV0X2luaXQgd2V4dF9wcm9jX2luaXQoc3RydWN0IG5ldCAqbmV0KQogewogCS8qIENyZWF0ZSAvcHJvYy9uZXQvd2lyZWxlc3MgZW50cnkgKi8KIAlpZiAoIXByb2NfbmV0X2ZvcHNfY3JlYXRlKG5ldCwgIndpcmVsZXNzIiwgU19JUlVHTywgJndpcmVsZXNzX3NlcV9mb3BzKSkKQEAgLTE0OSw3ICsxNDksNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIHdleHRfcHJvY19leGl0KHN0cnVjdCBuZXQgKm5ldCkKK3ZvaWQgX19uZXRfZXhpdCB3ZXh0X3Byb2NfZXhpdChzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJcHJvY19uZXRfcmVtb3ZlKG5ldCwgIndpcmVsZXNzIik7CiB9CmRpZmYgLS1naXQgYS9uZXQveDI1L2FmX3gyNS5jIGIvbmV0L3gyNS9hZl94MjUuYwppbmRleCBlMzIxOWU0Li45Nzk2ZjNlIDEwMDY0NAotLS0gYS9uZXQveDI1L2FmX3gyNS5jCisrKyBiL25ldC94MjUvYWZfeDI1LmMKQEAgLTU1LDYgKzU1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogCiAjaW5jbHVkZSA8bmV0L3gyNS5oPgogI2luY2x1ZGUgPG5ldC9jb21wYXQuaD4KQEAgLTUxMiwxNSArNTEzLDIwIEBACiB7CiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCB4MjVfc29jayAqeDI1OwotCWludCByYyA9IC1FU09DS1ROT1NVUFBPUlQ7CisJaW50IHJjID0gLUVBRk5PU1VQUE9SVDsKIAogCWlmICghbmV0X2VxKG5ldCwgJmluaXRfbmV0KSkKLQkJcmV0dXJuIC1FQUZOT1NVUFBPUlQ7Ci0KLQlpZiAoc29jay0+dHlwZSAhPSBTT0NLX1NFUVBBQ0tFVCB8fCBwcm90b2NvbCkKIAkJZ290byBvdXQ7CiAKLQlyYyA9IC1FTk9NRU07CisJcmMgPSAtRVNPQ0tUTk9TVVBQT1JUOworCWlmIChzb2NrLT50eXBlICE9IFNPQ0tfU0VRUEFDS0VUKQorCQlnb3RvIG91dDsKKworCXJjID0gLUVJTlZBTDsKKwlpZiAocHJvdG9jb2wpCisJCWdvdG8gb3V0OworCisJcmMgPSAtRU5PQlVGUzsKIAlpZiAoKHNrID0geDI1X2FsbG9jX3NvY2tldChuZXQpKSA9PSBOVUxMKQogCQlnb3RvIG91dDsKIApAQCAtNjQzLDcgKzY0OSw3IEBACiB7CiAJc3RydWN0IHNvY2sgKnNrID0gc29jay0+c2s7CiAJc3RydWN0IHNvY2thZGRyX3gyNSAqYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHJfeDI1ICopdWFkZHI7Ci0JaW50IHJjID0gMDsKKwlpbnQgbGVuLCBpLCByYyA9IDA7CiAKIAlsb2NrX2tlcm5lbCgpOwogCWlmICghc29ja19mbGFnKHNrLCBTT0NLX1pBUFBFRCkgfHwKQEAgLTY1Myw2ICs2NTksMTQgQEAKIAkJZ290byBvdXQ7CiAJfQogCisJbGVuID0gc3RybGVuKGFkZHItPnN4MjVfYWRkci54MjVfYWRkcik7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWlmICghaXNkaWdpdChhZGRyLT5zeDI1X2FkZHIueDI1X2FkZHJbaV0pKSB7CisJCQlyYyA9IC1FSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwogCXgyNV9zayhzayktPnNvdXJjZV9hZGRyID0gYWRkci0+c3gyNV9hZGRyOwogCXgyNV9pbnNlcnRfc29ja2V0KHNrKTsKIAlzb2NrX3Jlc2V0X2ZsYWcoc2ssIFNPQ0tfWkFQUEVEKTsKZGlmZiAtLWdpdCBhL25ldC94MjUveDI1X3Byb2MuYyBiL25ldC94MjUveDI1X3Byb2MuYwppbmRleCAwYTA0ZTYyLi43ZmYzNzM3IDEwMDY0NAotLS0gYS9uZXQveDI1L3gyNV9wcm9jLmMKKysrIGIvbmV0L3gyNS94MjVfcHJvYy5jCkBAIC0yNSw0OSArMjUsMTcgQEAKICNpbmNsdWRlIDxuZXQveDI1Lmg+CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIF9faW5saW5lX18gc3RydWN0IHgyNV9yb3V0ZSAqeDI1X2dldF9yb3V0ZV9pZHgobG9mZl90IHBvcykKLXsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpyb3V0ZV9lbnRyeTsKLQlzdHJ1Y3QgeDI1X3JvdXRlICpydCA9IE5VTEw7Ci0KLQlsaXN0X2Zvcl9lYWNoKHJvdXRlX2VudHJ5LCAmeDI1X3JvdXRlX2xpc3QpIHsKLQkJcnQgPSBsaXN0X2VudHJ5KHJvdXRlX2VudHJ5LCBzdHJ1Y3QgeDI1X3JvdXRlLCBub2RlKTsKLQkJaWYgKCFwb3MtLSkKLQkJCWdvdG8gZm91bmQ7Ci0JfQotCXJ0ID0gTlVMTDsKLWZvdW5kOgotCXJldHVybiBydDsKLX0KIAogc3RhdGljIHZvaWQgKngyNV9zZXFfcm91dGVfc3RhcnQoc3RydWN0IHNlcV9maWxlICpzZXEsIGxvZmZfdCAqcG9zKQogCV9fYWNxdWlyZXMoeDI1X3JvdXRlX2xpc3RfbG9jaykKIHsKLQlsb2ZmX3QgbCA9ICpwb3M7Ci0KIAlyZWFkX2xvY2tfYmgoJngyNV9yb3V0ZV9saXN0X2xvY2spOwotCXJldHVybiBsID8geDI1X2dldF9yb3V0ZV9pZHgoLS1sKSA6IFNFUV9TVEFSVF9UT0tFTjsKKwlyZXR1cm4gc2VxX2xpc3Rfc3RhcnRfaGVhZCgmeDI1X3JvdXRlX2xpc3QsICpwb3MpOwogfQogCiBzdGF0aWMgdm9pZCAqeDI1X3NlcV9yb3V0ZV9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgeDI1X3JvdXRlICpydDsKLQotCSsrKnBvczsKLQlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKLQkJcnQgPSBOVUxMOwotCQlpZiAoIWxpc3RfZW1wdHkoJngyNV9yb3V0ZV9saXN0KSkKLQkJCXJ0ID0gbGlzdF9lbnRyeSh4MjVfcm91dGVfbGlzdC5uZXh0LAotCQkJCQlzdHJ1Y3QgeDI1X3JvdXRlLCBub2RlKTsKLQkJZ290byBvdXQ7Ci0JfQotCXJ0ID0gdjsKLQlpZiAocnQtPm5vZGUubmV4dCAhPSAmeDI1X3JvdXRlX2xpc3QpCi0JCXJ0ID0gbGlzdF9lbnRyeShydC0+bm9kZS5uZXh0LCBzdHJ1Y3QgeDI1X3JvdXRlLCBub2RlKTsKLQllbHNlCi0JCXJ0ID0gTlVMTDsKLW91dDoKLQlyZXR1cm4gcnQ7CisJcmV0dXJuIHNlcV9saXN0X25leHQodiwgJngyNV9yb3V0ZV9saXN0LCBwb3MpOwogfQogCiBzdGF0aWMgdm9pZCB4MjVfc2VxX3JvdXRlX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCkBAIC03OCw5ICs0Niw5IEBACiAKIHN0YXRpYyBpbnQgeDI1X3NlcV9yb3V0ZV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQogewotCXN0cnVjdCB4MjVfcm91dGUgKnJ0OworCXN0cnVjdCB4MjVfcm91dGUgKnJ0ID0gbGlzdF9lbnRyeSh2LCBzdHJ1Y3QgeDI1X3JvdXRlLCBub2RlKTsKIAotCWlmICh2ID09IFNFUV9TVEFSVF9UT0tFTikgeworCWlmICh2ID09ICZ4MjVfcm91dGVfbGlzdCkgewogCQlzZXFfcHV0cyhzZXEsICJBZGRyZXNzICAgICAgICAgIERpZ2l0cyAgRGV2aWNlXG4iKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtOTMsNDAgKzYxLDE2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBzb2NrICp4MjVfZ2V0X3NvY2tldF9pZHgobG9mZl90IHBvcykKLXsKLQlzdHJ1Y3Qgc29jayAqczsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKLQotCXNrX2Zvcl9lYWNoKHMsIG5vZGUsICZ4MjVfbGlzdCkKLQkJaWYgKCFwb3MtLSkKLQkJCWdvdG8gZm91bmQ7Ci0JcyA9IE5VTEw7Ci1mb3VuZDoKLQlyZXR1cm4gczsKLX0KLQogc3RhdGljIHZvaWQgKngyNV9zZXFfc29ja2V0X3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKIAlfX2FjcXVpcmVzKHgyNV9saXN0X2xvY2spCiB7Ci0JbG9mZl90IGwgPSAqcG9zOwotCiAJcmVhZF9sb2NrX2JoKCZ4MjVfbGlzdF9sb2NrKTsKLQlyZXR1cm4gbCA/IHgyNV9nZXRfc29ja2V0X2lkeCgtLWwpIDogU0VRX1NUQVJUX1RPS0VOOworCXJldHVybiBzZXFfaGxpc3Rfc3RhcnRfaGVhZCgmeDI1X2xpc3QsICpwb3MpOwogfQogCiBzdGF0aWMgdm9pZCAqeDI1X3NlcV9zb2NrZXRfbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdiwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IHNvY2sgKnM7Ci0KLQkrKypwb3M7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7Ci0JCXMgPSBza19oZWFkKCZ4MjVfbGlzdCk7Ci0JCWdvdG8gb3V0OwotCX0KLQlzID0gc2tfbmV4dCh2KTsKLW91dDoKLQlyZXR1cm4gczsKKwlyZXR1cm4gc2VxX2hsaXN0X25leHQodiwgJngyNV9saXN0LCBwb3MpOwogfQogCiBzdGF0aWMgdm9pZCB4MjVfc2VxX3NvY2tldF9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KQpAQCAtMTQ4LDcgKzkyLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcyA9IHY7CisJcyA9IHNrX2VudHJ5KHYpOwogCXgyNSA9IHgyNV9zayhzKTsKIAogCWlmICgheDI1LT5uZWlnaGJvdXIgfHwgKGRldiA9IHgyNS0+bmVpZ2hib3VyLT5kZXYpID09IE5VTEwpCkBAIC0xNzAsNTEgKzExNCwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgeDI1X2ZvcndhcmQgKngyNV9nZXRfZm9yd2FyZF9pZHgobG9mZl90IHBvcykKLXsKLQlzdHJ1Y3QgeDI1X2ZvcndhcmQgKmY7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7Ci0KLQlsaXN0X2Zvcl9lYWNoKGVudHJ5LCAmeDI1X2ZvcndhcmRfbGlzdCkgewotCQlmID0gbGlzdF9lbnRyeShlbnRyeSwgc3RydWN0IHgyNV9mb3J3YXJkLCBub2RlKTsKLQkJaWYgKCFwb3MtLSkKLQkJCWdvdG8gZm91bmQ7Ci0JfQotCi0JZiA9IE5VTEw7Ci1mb3VuZDoKLQlyZXR1cm4gZjsKLX0KLQogc3RhdGljIHZvaWQgKngyNV9zZXFfZm9yd2FyZF9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCiAJX19hY3F1aXJlcyh4MjVfZm9yd2FyZF9saXN0X2xvY2spCiB7Ci0JbG9mZl90IGwgPSAqcG9zOwotCiAJcmVhZF9sb2NrX2JoKCZ4MjVfZm9yd2FyZF9saXN0X2xvY2spOwotCXJldHVybiBsID8geDI1X2dldF9mb3J3YXJkX2lkeCgtLWwpIDogU0VRX1NUQVJUX1RPS0VOOworCXJldHVybiBzZXFfbGlzdF9zdGFydF9oZWFkKCZ4MjVfZm9yd2FyZF9saXN0LCAqcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgKngyNV9zZXFfZm9yd2FyZF9uZXh0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgeDI1X2ZvcndhcmQgKmY7Ci0KLQkrKypwb3M7Ci0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7Ci0JCWYgPSBOVUxMOwotCQlpZiAoIWxpc3RfZW1wdHkoJngyNV9mb3J3YXJkX2xpc3QpKQotCQkJZiA9IGxpc3RfZW50cnkoeDI1X2ZvcndhcmRfbGlzdC5uZXh0LAotCQkJCQlzdHJ1Y3QgeDI1X2ZvcndhcmQsIG5vZGUpOwotCQlnb3RvIG91dDsKLQl9Ci0JZiA9IHY7Ci0JaWYgKGYtPm5vZGUubmV4dCAhPSAmeDI1X2ZvcndhcmRfbGlzdCkKLQkJZiA9IGxpc3RfZW50cnkoZi0+bm9kZS5uZXh0LCBzdHJ1Y3QgeDI1X2ZvcndhcmQsIG5vZGUpOwotCWVsc2UKLQkJZiA9IE5VTEw7Ci1vdXQ6Ci0JcmV0dXJuIGY7Ci0KKwlyZXR1cm4gc2VxX2xpc3RfbmV4dCh2LCAmeDI1X2ZvcndhcmRfbGlzdCwgcG9zKTsKIH0KIAogc3RhdGljIHZvaWQgeDI1X3NlcV9mb3J3YXJkX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCkBAIC0yMjUsOSArMTM0LDkgQEAKIAogc3RhdGljIGludCB4MjVfc2VxX2ZvcndhcmRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKIHsKLQlzdHJ1Y3QgeDI1X2ZvcndhcmQgKmY7CisJc3RydWN0IHgyNV9mb3J3YXJkICpmID0gbGlzdF9lbnRyeSh2LCBzdHJ1Y3QgeDI1X2ZvcndhcmQsIG5vZGUpOwogCi0JaWYgKHYgPT0gU0VRX1NUQVJUX1RPS0VOKSB7CisJaWYgKHYgPT0gJngyNV9mb3J3YXJkX2xpc3QpIHsKIAkJc2VxX3ByaW50ZihzZXEsICJsY2kgZGV2MSAgICAgICBkZXYyXG4iKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjM2LDcgKzE0NSw2IEBACiAKIAlzZXFfcHJpbnRmKHNlcSwgIiVkICUtMTBzICUtMTBzXG4iLAogCQkJZi0+bGNpLCBmLT5kZXYxLT5uYW1lLCBmLT5kZXYyLT5uYW1lKTsKLQogb3V0OgogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pbnB1dC5jIGIvbmV0L3hmcm0veGZybV9pbnB1dC5jCmluZGV4IGUwMDA5YzEuLjQ1ZjFjOTggMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1faW5wdXQuYworKysgYi9uZXQveGZybS94ZnJtX2lucHV0LmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogCQkJZ290byBkcm9wOwogCQl9CiAKLQkJeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgZGFkZHIsIHNwaSwgbmV4dGhkciwgZmFtaWx5KTsKKwkJeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgc2tiLT5tYXJrLCBkYWRkciwgc3BpLCBuZXh0aGRyLCBmYW1pbHkpOwogCQlpZiAoeCA9PSBOVUxMKSB7CiAJCQlYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5OT1NUQVRFUyk7CiAJCQl4ZnJtX2F1ZGl0X3N0YXRlX25vdGZvdW5kKHNrYiwgZmFtaWx5LCBzcGksIHNlcSk7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwY29tcC5jIGIvbmV0L3hmcm0veGZybV9pcGNvbXAuYwppbmRleCA0MmNkMTgzLi4wZmM1ZmY2IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2lwY29tcC5jCisrKyBiL25ldC94ZnJtL3hmcm1faXBjb21wLmMKQEAgLTMwLDEyICszMCwxMiBAQAogCiBzdHJ1Y3QgaXBjb21wX3RmbXMgewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgY3J5cHRvX2NvbXAgKip0Zm1zOworCXN0cnVjdCBjcnlwdG9fY29tcCAqIF9fcGVyY3B1ICp0Zm1zOwogCWludCB1c2VyczsKIH07CiAKIHN0YXRpYyBERUZJTkVfTVVURVgoaXBjb21wX3Jlc291cmNlX211dGV4KTsKLXN0YXRpYyB2b2lkICoqaXBjb21wX3NjcmF0Y2hlczsKK3N0YXRpYyB2b2lkICogX19wZXJjcHUgKmlwY29tcF9zY3JhdGNoZXM7CiBzdGF0aWMgaW50IGlwY29tcF9zY3JhdGNoX3VzZXJzOwogc3RhdGljIExJU1RfSEVBRChpcGNvbXBfdGZtc19saXN0KTsKIApAQCAtMjAwLDcgKzIwMCw3IEBACiBzdGF0aWMgdm9pZCBpcGNvbXBfZnJlZV9zY3JhdGNoZXModm9pZCkKIHsKIAlpbnQgaTsKLQl2b2lkICoqc2NyYXRjaGVzOworCXZvaWQgKiBfX3BlcmNwdSAqc2NyYXRjaGVzOwogCiAJaWYgKC0taXBjb21wX3NjcmF0Y2hfdXNlcnMpCiAJCXJldHVybjsKQEAgLTIxNSwxMCArMjE1LDEwIEBACiAJZnJlZV9wZXJjcHUoc2NyYXRjaGVzKTsKIH0KIAotc3RhdGljIHZvaWQgKippcGNvbXBfYWxsb2Nfc2NyYXRjaGVzKHZvaWQpCitzdGF0aWMgdm9pZCAqIF9fcGVyY3B1ICppcGNvbXBfYWxsb2Nfc2NyYXRjaGVzKHZvaWQpCiB7CiAJaW50IGk7Ci0Jdm9pZCAqKnNjcmF0Y2hlczsKKwl2b2lkICogX19wZXJjcHUgKnNjcmF0Y2hlczsKIAogCWlmIChpcGNvbXBfc2NyYXRjaF91c2VycysrKQogCQlyZXR1cm4gaXBjb21wX3NjcmF0Y2hlczsKQEAgLTIzOSw3ICsyMzksNyBAQAogCXJldHVybiBzY3JhdGNoZXM7CiB9CiAKLXN0YXRpYyB2b2lkIGlwY29tcF9mcmVlX3RmbXMoc3RydWN0IGNyeXB0b19jb21wICoqdGZtcykKK3N0YXRpYyB2b2lkIGlwY29tcF9mcmVlX3RmbXMoc3RydWN0IGNyeXB0b19jb21wICogX19wZXJjcHUgKnRmbXMpCiB7CiAJc3RydWN0IGlwY29tcF90Zm1zICpwb3M7CiAJaW50IGNwdTsKQEAgLTI2NywxMCArMjY3LDEwIEBACiAJZnJlZV9wZXJjcHUodGZtcyk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3J5cHRvX2NvbXAgKippcGNvbXBfYWxsb2NfdGZtcyhjb25zdCBjaGFyICphbGdfbmFtZSkKK3N0YXRpYyBzdHJ1Y3QgY3J5cHRvX2NvbXAgKiBfX3BlcmNwdSAqaXBjb21wX2FsbG9jX3RmbXMoY29uc3QgY2hhciAqYWxnX25hbWUpCiB7CiAJc3RydWN0IGlwY29tcF90Zm1zICpwb3M7Ci0Jc3RydWN0IGNyeXB0b19jb21wICoqdGZtczsKKwlzdHJ1Y3QgY3J5cHRvX2NvbXAgKiBfX3BlcmNwdSAqdGZtczsKIAlpbnQgY3B1OwogCiAJLyogVGhpcyBjYW4gYmUgYW55IHZhbGlkIENQVSBJRCBzbyB3ZSBkb24ndCBuZWVkIGxvY2tpbmcuICovCmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3BvbGljeS5jIGIvbmV0L3hmcm0veGZybV9wb2xpY3kuYwppbmRleCAwZWNiMTZhLi4zNGE1ZWY4IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX3BvbGljeS5jCisrKyBiL25ldC94ZnJtL3hmcm1fcG9saWN5LmMKQEAgLTU1Niw2ICs1NTYsNyBAQAogCXN0cnVjdCBobGlzdF9oZWFkICpjaGFpbjsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZW50cnksICpuZXdwb3M7CiAJc3RydWN0IGRzdF9lbnRyeSAqZ2NfbGlzdDsKKwl1MzIgbWFyayA9IHBvbGljeS0+bWFyay52ICYgcG9saWN5LT5tYXJrLm07CiAKIAl3cml0ZV9sb2NrX2JoKCZ4ZnJtX3BvbGljeV9sb2NrKTsKIAljaGFpbiA9IHBvbGljeV9oYXNoX2J5c2VsKG5ldCwgJnBvbGljeS0+c2VsZWN0b3IsIHBvbGljeS0+ZmFtaWx5LCBkaXIpOwpAQCAtNTY0LDYgKzU2NSw3IEBACiAJaGxpc3RfZm9yX2VhY2hfZW50cnkocG9sLCBlbnRyeSwgY2hhaW4sIGJ5ZHN0KSB7CiAJCWlmIChwb2wtPnR5cGUgPT0gcG9saWN5LT50eXBlICYmCiAJCSAgICAhc2VsZWN0b3JfY21wKCZwb2wtPnNlbGVjdG9yLCAmcG9saWN5LT5zZWxlY3RvcikgJiYKKwkJICAgIChtYXJrICYgcG9sLT5tYXJrLm0pID09IHBvbC0+bWFyay52ICYmCiAJCSAgICB4ZnJtX3NlY19jdHhfbWF0Y2gocG9sLT5zZWN1cml0eSwgcG9saWN5LT5zZWN1cml0eSkgJiYKIAkJICAgICFXQVJOX09OKGRlbHBvbCkpIHsKIAkJCWlmIChleGNsKSB7CkBAIC02MzUsOCArNjM3LDggQEAKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9wb2xpY3lfaW5zZXJ0KTsKIAotc3RydWN0IHhmcm1fcG9saWN5ICp4ZnJtX3BvbGljeV9ieXNlbF9jdHgoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLCBpbnQgZGlyLAotCQkJCQkgIHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsCitzdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2J5c2VsX2N0eChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLCB1OCB0eXBlLAorCQkJCQkgIGludCBkaXIsIHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsCiAJCQkJCSAgc3RydWN0IHhmcm1fc2VjX2N0eCAqY3R4LCBpbnQgZGVsZXRlLAogCQkJCQkgIGludCAqZXJyKQogewpAQCAtNjUwLDYgKzY1Miw3IEBACiAJcmV0ID0gTlVMTDsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeShwb2wsIGVudHJ5LCBjaGFpbiwgYnlkc3QpIHsKIAkJaWYgKHBvbC0+dHlwZSA9PSB0eXBlICYmCisJCSAgICAobWFyayAmIHBvbC0+bWFyay5tKSA9PSBwb2wtPm1hcmsudiAmJgogCQkgICAgIXNlbGVjdG9yX2NtcChzZWwsICZwb2wtPnNlbGVjdG9yKSAmJgogCQkgICAgeGZybV9zZWNfY3R4X21hdGNoKGN0eCwgcG9sLT5zZWN1cml0eSkpIHsKIAkJCXhmcm1fcG9sX2hvbGQocG9sKTsKQEAgLTY3Niw4ICs2NzksOCBAQAogfQogRVhQT1JUX1NZTUJPTCh4ZnJtX3BvbGljeV9ieXNlbF9jdHgpOwogCi1zdHJ1Y3QgeGZybV9wb2xpY3kgKnhmcm1fcG9saWN5X2J5aWQoc3RydWN0IG5ldCAqbmV0LCB1OCB0eXBlLCBpbnQgZGlyLCB1MzIgaWQsCi0JCQkJICAgICBpbnQgZGVsZXRlLCBpbnQgKmVycikKK3N0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfYnlpZChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLCB1OCB0eXBlLAorCQkJCSAgICAgaW50IGRpciwgdTMyIGlkLCBpbnQgZGVsZXRlLCBpbnQgKmVycikKIHsKIAlzdHJ1Y3QgeGZybV9wb2xpY3kgKnBvbCwgKnJldDsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqY2hhaW47CkBAIC02OTIsNyArNjk1LDggQEAKIAljaGFpbiA9IG5ldC0+eGZybS5wb2xpY3lfYnlpZHggKyBpZHhfaGFzaChuZXQsIGlkKTsKIAlyZXQgPSBOVUxMOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvbCwgZW50cnksIGNoYWluLCBieWlkeCkgewotCQlpZiAocG9sLT50eXBlID09IHR5cGUgJiYgcG9sLT5pbmRleCA9PSBpZCkgeworCQlpZiAocG9sLT50eXBlID09IHR5cGUgJiYgcG9sLT5pbmRleCA9PSBpZCAmJgorCQkgICAgKG1hcmsgJiBwb2wtPm1hcmsubSkgPT0gcG9sLT5tYXJrLnYpIHsKIAkJCXhmcm1fcG9sX2hvbGQocG9sKTsKIAkJCWlmIChkZWxldGUpIHsKIAkJCQkqZXJyID0gc2VjdXJpdHlfeGZybV9wb2xpY3lfZGVsZXRlKApAQCAtNzcxLDcgKzc3NSw4IEBACiAKIGludCB4ZnJtX3BvbGljeV9mbHVzaChzdHJ1Y3QgbmV0ICpuZXQsIHU4IHR5cGUsIHN0cnVjdCB4ZnJtX2F1ZGl0ICphdWRpdF9pbmZvKQogewotCWludCBkaXIsIGVyciA9IDA7CisJaW50IGRpciwgZXJyID0gMCwgY250ID0gMDsKKwlzdHJ1Y3QgeGZybV9wb2xpY3kgKmRwOwogCiAJd3JpdGVfbG9ja19iaCgmeGZybV9wb2xpY3lfbG9jayk7CiAKQEAgLTc4OSw4ICs3OTQsMTAgQEAKIAkJCQkgICAgICZuZXQtPnhmcm0ucG9saWN5X2luZXhhY3RbZGlyXSwgYnlkc3QpIHsKIAkJCWlmIChwb2wtPnR5cGUgIT0gdHlwZSkKIAkJCQljb250aW51ZTsKLQkJCV9feGZybV9wb2xpY3lfdW5saW5rKHBvbCwgZGlyKTsKKwkJCWRwID0gX194ZnJtX3BvbGljeV91bmxpbmsocG9sLCBkaXIpOwogCQkJd3JpdGVfdW5sb2NrX2JoKCZ4ZnJtX3BvbGljeV9sb2NrKTsKKwkJCWlmIChkcCkKKwkJCQljbnQrKzsKIAogCQkJeGZybV9hdWRpdF9wb2xpY3lfZGVsZXRlKHBvbCwgMSwgYXVkaXRfaW5mby0+bG9naW51aWQsCiAJCQkJCQkgYXVkaXRfaW5mby0+c2Vzc2lvbmlkLApAQCAtODA5LDggKzgxNiwxMCBAQAogCQkJCQkgICAgIGJ5ZHN0KSB7CiAJCQkJaWYgKHBvbC0+dHlwZSAhPSB0eXBlKQogCQkJCQljb250aW51ZTsKLQkJCQlfX3hmcm1fcG9saWN5X3VubGluayhwb2wsIGRpcik7CisJCQkJZHAgPSBfX3hmcm1fcG9saWN5X3VubGluayhwb2wsIGRpcik7CiAJCQkJd3JpdGVfdW5sb2NrX2JoKCZ4ZnJtX3BvbGljeV9sb2NrKTsKKwkJCQlpZiAoZHApCisJCQkJCWNudCsrOwogCiAJCQkJeGZybV9hdWRpdF9wb2xpY3lfZGVsZXRlKHBvbCwgMSwKIAkJCQkJCQkgYXVkaXRfaW5mby0+bG9naW51aWQsCkBAIC04MjQsNiArODMzLDggQEAKIAkJfQogCiAJfQorCWlmICghY250KQorCQllcnIgPSAtRVNSQ0g7CiAJYXRvbWljX2luYygmZmxvd19jYWNoZV9nZW5pZCk7CiBvdXQ6CiAJd3JpdGVfdW5sb2NrX2JoKCZ4ZnJtX3BvbGljeV9sb2NrKTsKQEAgLTkwOSw2ICs5MjAsNyBAQAogCWludCBtYXRjaCwgcmV0ID0gLUVTUkNIOwogCiAJaWYgKHBvbC0+ZmFtaWx5ICE9IGZhbWlseSB8fAorCSAgICAoZmwtPm1hcmsgJiBwb2wtPm1hcmsubSkgIT0gcG9sLT5tYXJrLnYgfHwKIAkgICAgcG9sLT50eXBlICE9IHR5cGUpCiAJCXJldHVybiByZXQ7CiAKQEAgLTEwMzMsNiArMTA0NSwxMCBAQAogCQlpbnQgZXJyID0gMDsKIAogCQlpZiAobWF0Y2gpIHsKKwkJCWlmICgoc2stPnNrX21hcmsgJiBwb2wtPm1hcmsubSkgIT0gcG9sLT5tYXJrLnYpIHsKKwkJCQlwb2wgPSBOVUxMOworCQkJCWdvdG8gb3V0OworCQkJfQogCQkJZXJyID0gc2VjdXJpdHlfeGZybV9wb2xpY3lfbG9va3VwKHBvbC0+c2VjdXJpdHksCiAJCQkJCQkgICAgICBmbC0+c2VjaWQsCiAJCQkJCQkgICAgICBwb2xpY3lfdG9fZmxvd19kaXIoZGlyKSk7CkBAIC0xMDQ1LDYgKzEwNjEsNyBAQAogCQl9IGVsc2UKIAkJCXBvbCA9IE5VTEw7CiAJfQorb3V0OgogCXJlYWRfdW5sb2NrX2JoKCZ4ZnJtX3BvbGljeV9sb2NrKTsKIAlyZXR1cm4gcG9sOwogfQpAQCAtMTEzNyw2ICsxMTU0LDcgQEAKIAkJfQogCQluZXdwLT5sZnQgPSBvbGQtPmxmdDsKIAkJbmV3cC0+Y3VybGZ0ID0gb2xkLT5jdXJsZnQ7CisJCW5ld3AtPm1hcmsgPSBvbGQtPm1hcms7CiAJCW5ld3AtPmFjdGlvbiA9IG9sZC0+YWN0aW9uOwogCQluZXdwLT5mbGFncyA9IG9sZC0+ZmxhZ3M7CiAJCW5ld3AtPnhmcm1fbnIgPSBvbGQtPnhmcm1fbnI7CkBAIC0yMDQ1LDggKzIwNjMsNyBAQAogCWludCByZXM7CiAKIAlpZiAoeGZybV9kZWNvZGVfc2Vzc2lvbihza2IsICZmbCwgZmFtaWx5KSA8IDApIHsKLQkJLyogWFhYOiB3ZSBzaG91bGQgaGF2ZSBzb21ldGhpbmcgbGlrZSBGV0RIRFJFUlJPUiBoZXJlLiAqLwotCQlYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNSU5IRFJFUlJPUik7CisJCVhGUk1fSU5DX1NUQVRTKG5ldCwgTElOVVhfTUlCX1hGUk1GV0RIRFJFUlJPUik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtMjQyMSwxOSArMjQzOCwxOSBAQAogewogCWludCBydjsKIAotCWlmIChzbm1wX21pYl9pbml0KCh2b2lkICoqKW5ldC0+bWliLnhmcm1fc3RhdGlzdGljcywKKwlpZiAoc25tcF9taWJfaW5pdCgodm9pZCBfX3BlcmNwdSAqKiluZXQtPm1pYi54ZnJtX3N0YXRpc3RpY3MsCiAJCQkgIHNpemVvZihzdHJ1Y3QgbGludXhfeGZybV9taWIpKSA8IDApCiAJCXJldHVybiAtRU5PTUVNOwogCXJ2ID0geGZybV9wcm9jX2luaXQobmV0KTsKIAlpZiAocnYgPCAwKQotCQlzbm1wX21pYl9mcmVlKCh2b2lkICoqKW5ldC0+bWliLnhmcm1fc3RhdGlzdGljcyk7CisJCXNubXBfbWliX2ZyZWUoKHZvaWQgX19wZXJjcHUgKiopbmV0LT5taWIueGZybV9zdGF0aXN0aWNzKTsKIAlyZXR1cm4gcnY7CiB9CiAKIHN0YXRpYyB2b2lkIHhmcm1fc3RhdGlzdGljc19maW5pKHN0cnVjdCBuZXQgKm5ldCkKIHsKIAl4ZnJtX3Byb2NfZmluaShuZXQpOwotCXNubXBfbWliX2ZyZWUoKHZvaWQgKiopbmV0LT5taWIueGZybV9zdGF0aXN0aWNzKTsKKwlzbm1wX21pYl9mcmVlKCh2b2lkIF9fcGVyY3B1ICoqKW5ldC0+bWliLnhmcm1fc3RhdGlzdGljcyk7CiB9CiAjZWxzZQogc3RhdGljIGludCBfX25ldF9pbml0IHhmcm1fc3RhdGlzdGljc19pbml0KHN0cnVjdCBuZXQgKm5ldCkKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fcHJvYy5jIGIvbmV0L3hmcm0veGZybV9wcm9jLmMKaW5kZXggZmVmOGRiNS4uNThkOWFlMCAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9wcm9jLmMKKysrIGIvbmV0L3hmcm0veGZybV9wcm9jLmMKQEAgLTE1LDcgKzE1LDcgQEAKICNpbmNsdWRlIDxuZXQvc25tcC5oPgogI2luY2x1ZGUgPG5ldC94ZnJtLmg+CiAKLXN0YXRpYyBzdHJ1Y3Qgc25tcF9taWIgeGZybV9taWJfbGlzdFtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBzbm1wX21pYiB4ZnJtX21pYl9saXN0W10gPSB7CiAJU05NUF9NSUJfSVRFTSgiWGZybUluRXJyb3IiLCBMSU5VWF9NSUJfWEZSTUlORVJST1IpLAogCVNOTVBfTUlCX0lURU0oIlhmcm1JbkJ1ZmZlckVycm9yIiwgTElOVVhfTUlCX1hGUk1JTkJVRkZFUkVSUk9SKSwKIAlTTk1QX01JQl9JVEVNKCJYZnJtSW5IZHJFcnJvciIsIExJTlVYX01JQl9YRlJNSU5IRFJFUlJPUiksCkBAIC00MSw2ICs0MSw3IEBACiAJU05NUF9NSUJfSVRFTSgiWGZybU91dFBvbEJsb2NrIiwgTElOVVhfTUlCX1hGUk1PVVRQT0xCTE9DSyksCiAJU05NUF9NSUJfSVRFTSgiWGZybU91dFBvbERlYWQiLCBMSU5VWF9NSUJfWEZSTU9VVFBPTERFQUQpLAogCVNOTVBfTUlCX0lURU0oIlhmcm1PdXRQb2xFcnJvciIsIExJTlVYX01JQl9YRlJNT1VUUE9MRVJST1IpLAorCVNOTVBfTUlCX0lURU0oIlhmcm1Gd2RIZHJFcnJvciIsIExJTlVYX01JQl9YRlJNRldESERSRVJST1IpLAogCVNOTVBfTUlCX1NFTlRJTkVMCiB9OwogCkBAIC01MCw3ICs1MSw4IEBACiAJaW50IGk7CiAJZm9yIChpPTA7IHhmcm1fbWliX2xpc3RbaV0ubmFtZTsgaSsrKQogCQlzZXFfcHJpbnRmKHNlcSwgIiUtMjRzXHQlbHVcbiIsIHhmcm1fbWliX2xpc3RbaV0ubmFtZSwKLQkJCSAgIHNubXBfZm9sZF9maWVsZCgodm9pZCAqKiluZXQtPm1pYi54ZnJtX3N0YXRpc3RpY3MsCisJCQkgICBzbm1wX2ZvbGRfZmllbGQoKHZvaWQgX19wZXJjcHUgKiopCisJCQkJCSAgIG5ldC0+bWliLnhmcm1fc3RhdGlzdGljcywKIAkJCQkJICAgeGZybV9taWJfbGlzdFtpXS5lbnRyeSkpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jIGIvbmV0L3hmcm0veGZybV9zdGF0ZS5jCmluZGV4IGY0NDVlYTEuLjE3ZDViOTYgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1fc3RhdGUuYworKysgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKQEAgLTYwMywxMyArNjAzLDE0IEBACiAKIGludCB4ZnJtX3N0YXRlX2ZsdXNoKHN0cnVjdCBuZXQgKm5ldCwgdTggcHJvdG8sIHN0cnVjdCB4ZnJtX2F1ZGl0ICphdWRpdF9pbmZvKQogewotCWludCBpLCBlcnIgPSAwOworCWludCBpLCBlcnIgPSAwLCBjbnQgPSAwOwogCiAJc3Bpbl9sb2NrX2JoKCZ4ZnJtX3N0YXRlX2xvY2spOwogCWVyciA9IHhmcm1fc3RhdGVfZmx1c2hfc2VjY3R4X2NoZWNrKG5ldCwgcHJvdG8sIGF1ZGl0X2luZm8pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCisJZXJyID0gLUVTUkNIOwogCWZvciAoaSA9IDA7IGkgPD0gbmV0LT54ZnJtLnN0YXRlX2htYXNrOyBpKyspIHsKIAkJc3RydWN0IGhsaXN0X25vZGUgKmVudHJ5OwogCQlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKQEAgLTYyNiwxMyArNjI3LDE2IEBACiAJCQkJCQkJYXVkaXRfaW5mby0+c2Vzc2lvbmlkLAogCQkJCQkJCWF1ZGl0X2luZm8tPnNlY2lkKTsKIAkJCQl4ZnJtX3N0YXRlX3B1dCh4KTsKKwkJCQlpZiAoIWVycikKKwkJCQkJY250Kys7CiAKIAkJCQlzcGluX2xvY2tfYmgoJnhmcm1fc3RhdGVfbG9jayk7CiAJCQkJZ290byByZXN0YXJ0OwogCQkJfQogCQl9CiAJfQotCWVyciA9IDA7CisJaWYgKGNudCkKKwkJZXJyID0gMDsKIAogb3V0OgogCXNwaW5fdW5sb2NrX2JoKCZ4ZnJtX3N0YXRlX2xvY2spOwpAQCAtNjY1LDcgKzY2OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHhmcm1fYWRkcmVzc190ICpkYWRkciwgX19iZTMyIHNwaSwgdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKK3N0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIF9fYmUzMiBzcGksIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCiB7CiAJdW5zaWduZWQgaW50IGggPSB4ZnJtX3NwaV9oYXNoKG5ldCwgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7CiAJc3RydWN0IHhmcm1fc3RhdGUgKng7CkBAIC02NzgsNiArNjgyLDggQEAKIAkJICAgIHhmcm1fYWRkcl9jbXAoJngtPmlkLmRhZGRyLCBkYWRkciwgZmFtaWx5KSkKIAkJCWNvbnRpbnVlOwogCisJCWlmICgobWFyayAmIHgtPm1hcmsubSkgIT0geC0+bWFyay52KQorCQkJY29udGludWU7CiAJCXhmcm1fc3RhdGVfaG9sZCh4KTsKIAkJcmV0dXJuIHg7CiAJfQpAQCAtNjg1LDcgKzY5MSw3IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIHhmcm1fYWRkcmVzc190ICpzYWRkciwgdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKK3N0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCB4ZnJtX2FkZHJlc3NfdCAqc2FkZHIsIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCiB7CiAJdW5zaWduZWQgaW50IGggPSB4ZnJtX3NyY19oYXNoKG5ldCwgZGFkZHIsIHNhZGRyLCBmYW1pbHkpOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4OwpAQCAtNjk4LDYgKzcwNCw4IEBACiAJCSAgICB4ZnJtX2FkZHJfY21wKCZ4LT5wcm9wcy5zYWRkciwgc2FkZHIsIGZhbWlseSkpCiAJCQljb250aW51ZTsKIAorCQlpZiAoKG1hcmsgJiB4LT5tYXJrLm0pICE9IHgtPm1hcmsudikKKwkJCWNvbnRpbnVlOwogCQl4ZnJtX3N0YXRlX2hvbGQoeCk7CiAJCXJldHVybiB4OwogCX0KQEAgLTcwOSwxMiArNzE3LDE0IEBACiBfX3hmcm1fc3RhdGVfbG9jYXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgdXNlX3NwaSwgaW50IGZhbWlseSkKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSB4c19uZXQoeCk7CisJdTMyIG1hcmsgPSB4LT5tYXJrLnYgJiB4LT5tYXJrLm07CiAKIAlpZiAodXNlX3NwaSkKLQkJcmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXAobmV0LCAmeC0+aWQuZGFkZHIsIHgtPmlkLnNwaSwKLQkJCQkJICAgeC0+aWQucHJvdG8sIGZhbWlseSk7CisJCXJldHVybiBfX3hmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgJngtPmlkLmRhZGRyLAorCQkJCQkgICB4LT5pZC5zcGksIHgtPmlkLnByb3RvLCBmYW1pbHkpOwogCWVsc2UKLQkJcmV0dXJuIF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKG5ldCwgJngtPmlkLmRhZGRyLAorCQlyZXR1cm4gX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCBtYXJrLAorCQkJCQkJICAmeC0+aWQuZGFkZHIsCiAJCQkJCQkgICZ4LT5wcm9wcy5zYWRkciwKIAkJCQkJCSAgeC0+aWQucHJvdG8sIGZhbWlseSk7CiB9CkBAIC03NzksNiArNzg5LDcgQEAKIAlpbnQgYWNxdWlyZV9pbl9wcm9ncmVzcyA9IDA7CiAJaW50IGVycm9yID0gMDsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqYmVzdCA9IE5VTEw7CisJdTMyIG1hcmsgPSBwb2wtPm1hcmsudiAmIHBvbC0+bWFyay5tOwogCiAJdG9fcHV0ID0gTlVMTDsKIApAQCAtNzg3LDYgKzc5OCw3IEBACiAJaGxpc3RfZm9yX2VhY2hfZW50cnkoeCwgZW50cnksIG5ldC0+eGZybS5zdGF0ZV9ieWRzdCtoLCBieWRzdCkgewogCQlpZiAoeC0+cHJvcHMuZmFtaWx5ID09IGZhbWlseSAmJgogCQkgICAgeC0+cHJvcHMucmVxaWQgPT0gdG1wbC0+cmVxaWQgJiYKKwkJICAgIChtYXJrICYgeC0+bWFyay5tKSA9PSB4LT5tYXJrLnYgJiYKIAkJICAgICEoeC0+cHJvcHMuZmxhZ3MgJiBYRlJNX1NUQVRFX1dJTERSRUNWKSAmJgogCQkgICAgeGZybV9zdGF0ZV9hZGRyX2NoZWNrKHgsIGRhZGRyLCBzYWRkciwgZmFtaWx5KSAmJgogCQkgICAgdG1wbC0+bW9kZSA9PSB4LT5wcm9wcy5tb2RlICYmCkBAIC04MDIsNiArODE0LDcgQEAKIAlobGlzdF9mb3JfZWFjaF9lbnRyeSh4LCBlbnRyeSwgbmV0LT54ZnJtLnN0YXRlX2J5ZHN0K2hfd2lsZGNhcmQsIGJ5ZHN0KSB7CiAJCWlmICh4LT5wcm9wcy5mYW1pbHkgPT0gZmFtaWx5ICYmCiAJCSAgICB4LT5wcm9wcy5yZXFpZCA9PSB0bXBsLT5yZXFpZCAmJgorCQkgICAgKG1hcmsgJiB4LT5tYXJrLm0pID09IHgtPm1hcmsudiAmJgogCQkgICAgISh4LT5wcm9wcy5mbGFncyAmIFhGUk1fU1RBVEVfV0lMRFJFQ1YpICYmCiAJCSAgICB4ZnJtX3N0YXRlX2FkZHJfY2hlY2soeCwgZGFkZHIsIHNhZGRyLCBmYW1pbHkpICYmCiAJCSAgICB0bXBsLT5tb2RlID09IHgtPnByb3BzLm1vZGUgJiYKQEAgLTgxNSw3ICs4MjgsNyBAQAogCXggPSBiZXN0OwogCWlmICgheCAmJiAhZXJyb3IgJiYgIWFjcXVpcmVfaW5fcHJvZ3Jlc3MpIHsKIAkJaWYgKHRtcGwtPmlkLnNwaSAmJgotCQkgICAgKHgwID0gX194ZnJtX3N0YXRlX2xvb2t1cChuZXQsIGRhZGRyLCB0bXBsLT5pZC5zcGksCisJCSAgICAoeDAgPSBfX3hmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgZGFkZHIsIHRtcGwtPmlkLnNwaSwKIAkJCQkJICAgICAgdG1wbC0+aWQucHJvdG8sIGZhbWlseSkpICE9IE5VTEwpIHsKIAkJCXRvX3B1dCA9IHgwOwogCQkJZXJyb3IgPSAtRUVYSVNUOwpAQCAtODI5LDYgKzg0Miw3IEBACiAJCS8qIEluaXRpYWxpemUgdGVtcG9yYXJ5IHNlbGVjdG9yIG1hdGNoaW5nIG9ubHkKIAkJICogdG8gY3VycmVudCBzZXNzaW9uLiAqLwogCQl4ZnJtX2luaXRfdGVtcHNlbCh4LCBmbCwgdG1wbCwgZGFkZHIsIHNhZGRyLCBmYW1pbHkpOworCQltZW1jcHkoJngtPm1hcmssICZwb2wtPm1hcmssIHNpemVvZih4LT5tYXJrKSk7CiAKIAkJZXJyb3IgPSBzZWN1cml0eV94ZnJtX3N0YXRlX2FsbG9jX2FjcXVpcmUoeCwgcG9sLT5zZWN1cml0eSwgZmwtPnNlY2lkKTsKIAkJaWYgKGVycm9yKSB7CkBAIC04NzEsNyArODg1LDcgQEAKIH0KIAogc3RydWN0IHhmcm1fc3RhdGUgKgoteGZybV9zdGF0ZW9ubHlfZmluZChzdHJ1Y3QgbmV0ICpuZXQsCit4ZnJtX3N0YXRlb25seV9maW5kKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssCiAJCSAgICB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIHhmcm1fYWRkcmVzc190ICpzYWRkciwKIAkJICAgIHVuc2lnbmVkIHNob3J0IGZhbWlseSwgdTggbW9kZSwgdTggcHJvdG8sIHUzMiByZXFpZCkKIHsKQEAgLTg4NCw2ICs4OTgsNyBAQAogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHgsIGVudHJ5LCBuZXQtPnhmcm0uc3RhdGVfYnlkc3QraCwgYnlkc3QpIHsKIAkJaWYgKHgtPnByb3BzLmZhbWlseSA9PSBmYW1pbHkgJiYKIAkJICAgIHgtPnByb3BzLnJlcWlkID09IHJlcWlkICYmCisJCSAgICAobWFyayAmIHgtPm1hcmsubSkgPT0geC0+bWFyay52ICYmCiAJCSAgICAhKHgtPnByb3BzLmZsYWdzICYgWEZSTV9TVEFURV9XSUxEUkVDVikgJiYKIAkJICAgIHhmcm1fc3RhdGVfYWRkcl9jaGVjayh4LCBkYWRkciwgc2FkZHIsIGZhbWlseSkgJiYKIAkJICAgIG1vZGUgPT0geC0+cHJvcHMubW9kZSAmJgpAQCAtOTQ2LDExICs5NjEsMTMgQEAKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZW50cnk7CiAJdW5zaWduZWQgaW50IGg7CisJdTMyIG1hcmsgPSB4bmV3LT5tYXJrLnYgJiB4bmV3LT5tYXJrLm07CiAKIAloID0geGZybV9kc3RfaGFzaChuZXQsICZ4bmV3LT5pZC5kYWRkciwgJnhuZXctPnByb3BzLnNhZGRyLCByZXFpZCwgZmFtaWx5KTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeSh4LCBlbnRyeSwgbmV0LT54ZnJtLnN0YXRlX2J5ZHN0K2gsIGJ5ZHN0KSB7CiAJCWlmICh4LT5wcm9wcy5mYW1pbHkJPT0gZmFtaWx5ICYmCiAJCSAgICB4LT5wcm9wcy5yZXFpZAk9PSByZXFpZCAmJgorCQkgICAgKG1hcmsgJiB4LT5tYXJrLm0pID09IHgtPm1hcmsudiAmJgogCQkgICAgIXhmcm1fYWRkcl9jbXAoJngtPmlkLmRhZGRyLCAmeG5ldy0+aWQuZGFkZHIsIGZhbWlseSkgJiYKIAkJICAgICF4ZnJtX2FkZHJfY21wKCZ4LT5wcm9wcy5zYWRkciwgJnhuZXctPnByb3BzLnNhZGRyLCBmYW1pbHkpKQogCQkJeC0+Z2VuaWQgPSB4ZnJtX3N0YXRlX2dlbmlkOwpAQCAtOTY3LDExICs5ODQsMTIgQEAKIEVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9pbnNlcnQpOwogCiAvKiB4ZnJtX3N0YXRlX2xvY2sgaXMgaGVsZCAqLwotc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX2ZpbmRfYWNxX2NvcmUoc3RydWN0IG5ldCAqbmV0LCB1bnNpZ25lZCBzaG9ydCBmYW1pbHksIHU4IG1vZGUsIHUzMiByZXFpZCwgdTggcHJvdG8sIHhmcm1fYWRkcmVzc190ICpkYWRkciwgeGZybV9hZGRyZXNzX3QgKnNhZGRyLCBpbnQgY3JlYXRlKQorc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX2ZpbmRfYWNxX2NvcmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9tYXJrICptLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHksIHU4IG1vZGUsIHUzMiByZXFpZCwgdTggcHJvdG8sIHhmcm1fYWRkcmVzc190ICpkYWRkciwgeGZybV9hZGRyZXNzX3QgKnNhZGRyLCBpbnQgY3JlYXRlKQogewogCXVuc2lnbmVkIGludCBoID0geGZybV9kc3RfaGFzaChuZXQsIGRhZGRyLCBzYWRkciwgcmVxaWQsIGZhbWlseSk7CiAJc3RydWN0IGhsaXN0X25vZGUgKmVudHJ5OwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4OworCXUzMiBtYXJrID0gbS0+diAmIG0tPm07CiAKIAlobGlzdF9mb3JfZWFjaF9lbnRyeSh4LCBlbnRyeSwgbmV0LT54ZnJtLnN0YXRlX2J5ZHN0K2gsIGJ5ZHN0KSB7CiAJCWlmICh4LT5wcm9wcy5yZXFpZCAgIT0gcmVxaWQgfHwKQEAgLTk4MCw2ICs5OTgsNyBAQAogCQkgICAgeC0+a20uc3RhdGUgICAgICE9IFhGUk1fU1RBVEVfQUNRIHx8CiAJCSAgICB4LT5pZC5zcGkgICAgICAgIT0gMCB8fAogCQkgICAgeC0+aWQucHJvdG8JICAgICE9IHByb3RvIHx8CisJCSAgICAobWFyayAmIHgtPm1hcmsubSkgIT0geC0+bWFyay52IHx8CiAJCSAgICB4ZnJtX2FkZHJfY21wKCZ4LT5pZC5kYWRkciwgZGFkZHIsIGZhbWlseSkgfHwKIAkJICAgIHhmcm1fYWRkcl9jbXAoJngtPnByb3BzLnNhZGRyLCBzYWRkciwgZmFtaWx5KSkKIAkJCWNvbnRpbnVlOwpAQCAtMTAyMiw2ICsxMDQxLDggQEAKIAkJeC0+cHJvcHMuZmFtaWx5ID0gZmFtaWx5OwogCQl4LT5wcm9wcy5tb2RlID0gbW9kZTsKIAkJeC0+cHJvcHMucmVxaWQgPSByZXFpZDsKKwkJeC0+bWFyay52ID0gbS0+djsKKwkJeC0+bWFyay5tID0gbS0+bTsKIAkJeC0+bGZ0LmhhcmRfYWRkX2V4cGlyZXNfc2Vjb25kcyA9IG5ldC0+eGZybS5zeXNjdGxfYWNxX2V4cGlyZXM7CiAJCXhmcm1fc3RhdGVfaG9sZCh4KTsKIAkJdGFza2xldF9ocnRpbWVyX3N0YXJ0KCZ4LT5tdGltZXIsIGt0aW1lX3NldChuZXQtPnhmcm0uc3lzY3RsX2FjcV9leHBpcmVzLCAwKSwgSFJUSU1FUl9NT0RFX1JFTCk7CkBAIC0xMDM4LDcgKzEwNTksNyBAQAogCXJldHVybiB4OwogfQogCi1zdGF0aWMgc3RydWN0IHhmcm1fc3RhdGUgKl9feGZybV9maW5kX2FjcV9ieXNlcShzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBzZXEpOworc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fZmluZF9hY3FfYnlzZXEoc3RydWN0IG5ldCAqbmV0LCB1MzIgbWFyaywgdTMyIHNlcSk7CiAKIGludCB4ZnJtX3N0YXRlX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCkKIHsKQEAgLTEwNDYsNiArMTA2Nyw3IEBACiAJc3RydWN0IHhmcm1fc3RhdGUgKngxLCAqdG9fcHV0OwogCWludCBmYW1pbHk7CiAJaW50IGVycjsKKwl1MzIgbWFyayA9IHgtPm1hcmsudiAmIHgtPm1hcmsubTsKIAlpbnQgdXNlX3NwaSA9IHhmcm1faWRfcHJvdG9fbWF0Y2goeC0+aWQucHJvdG8sIElQU0VDX1BST1RPX0FOWSk7CiAKIAlmYW1pbHkgPSB4LT5wcm9wcy5mYW1pbHk7CkBAIC0xMDYzLDcgKzEwODUsNyBAQAogCX0KIAogCWlmICh1c2Vfc3BpICYmIHgtPmttLnNlcSkgewotCQl4MSA9IF9feGZybV9maW5kX2FjcV9ieXNlcShuZXQsIHgtPmttLnNlcSk7CisJCXgxID0gX194ZnJtX2ZpbmRfYWNxX2J5c2VxKG5ldCwgbWFyaywgeC0+a20uc2VxKTsKIAkJaWYgKHgxICYmICgoeDEtPmlkLnByb3RvICE9IHgtPmlkLnByb3RvKSB8fAogCQkgICAgeGZybV9hZGRyX2NtcCgmeDEtPmlkLmRhZGRyLCAmeC0+aWQuZGFkZHIsIGZhbWlseSkpKSB7CiAJCQl0b19wdXQgPSB4MTsKQEAgLTEwNzIsOCArMTA5NCw4IEBACiAJfQogCiAJaWYgKHVzZV9zcGkgJiYgIXgxKQotCQl4MSA9IF9fZmluZF9hY3FfY29yZShuZXQsIGZhbWlseSwgeC0+cHJvcHMubW9kZSwgeC0+cHJvcHMucmVxaWQsCi0JCQkJICAgICB4LT5pZC5wcm90bywKKwkJeDEgPSBfX2ZpbmRfYWNxX2NvcmUobmV0LCAmeC0+bWFyaywgZmFtaWx5LCB4LT5wcm9wcy5tb2RlLAorCQkJCSAgICAgeC0+cHJvcHMucmVxaWQsIHgtPmlkLnByb3RvLAogCQkJCSAgICAgJngtPmlkLmRhZGRyLCAmeC0+cHJvcHMuc2FkZHIsIDApOwogCiAJX194ZnJtX3N0YXRlX2J1bXBfZ2VuaWRzKHgpOwpAQCAtMTE0Nyw2ICsxMTY5LDggQEAKIAkJCWdvdG8gZXJyb3I7CiAJfQogCisJbWVtY3B5KCZ4LT5tYXJrLCAmb3JpZy0+bWFyaywgc2l6ZW9mKHgtPm1hcmspKTsKKwogCWVyciA9IHhmcm1faW5pdF9zdGF0ZSh4KTsKIAlpZiAoZXJyKQogCQlnb3RvIGVycm9yOwpAQCAtMTMzOCw0MSArMTM2Miw0MSBAQAogRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2NoZWNrX2V4cGlyZSk7CiAKIHN0cnVjdCB4ZnJtX3N0YXRlICoKLXhmcm1fc3RhdGVfbG9va3VwKHN0cnVjdCBuZXQgKm5ldCwgeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBfX2JlMzIgc3BpLCB1OCBwcm90bywKLQkJICB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCit4ZnJtX3N0YXRlX2xvb2t1cChzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIF9fYmUzMiBzcGksCisJCSAgdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKIHsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIAogCXNwaW5fbG9ja19iaCgmeGZybV9zdGF0ZV9sb2NrKTsKLQl4ID0gX194ZnJtX3N0YXRlX2xvb2t1cChuZXQsIGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHkpOworCXggPSBfX3hmcm1fc3RhdGVfbG9va3VwKG5ldCwgbWFyaywgZGFkZHIsIHNwaSwgcHJvdG8sIGZhbWlseSk7CiAJc3Bpbl91bmxvY2tfYmgoJnhmcm1fc3RhdGVfbG9jayk7CiAJcmV0dXJuIHg7CiB9CiBFWFBPUlRfU1lNQk9MKHhmcm1fc3RhdGVfbG9va3VwKTsKIAogc3RydWN0IHhmcm1fc3RhdGUgKgoteGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKHN0cnVjdCBuZXQgKm5ldCwKK3hmcm1fc3RhdGVfbG9va3VwX2J5YWRkcihzdHJ1Y3QgbmV0ICpuZXQsIHUzMiBtYXJrLAogCQkJIHhmcm1fYWRkcmVzc190ICpkYWRkciwgeGZybV9hZGRyZXNzX3QgKnNhZGRyLAogCQkJIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCiB7CiAJc3RydWN0IHhmcm1fc3RhdGUgKng7CiAKIAlzcGluX2xvY2tfYmgoJnhmcm1fc3RhdGVfbG9jayk7Ci0JeCA9IF9feGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKG5ldCwgZGFkZHIsIHNhZGRyLCBwcm90bywgZmFtaWx5KTsKKwl4ID0gX194ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCBtYXJrLCBkYWRkciwgc2FkZHIsIHByb3RvLCBmYW1pbHkpOwogCXNwaW5fdW5sb2NrX2JoKCZ4ZnJtX3N0YXRlX2xvY2spOwogCXJldHVybiB4OwogfQogRVhQT1JUX1NZTUJPTCh4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIpOwogCiBzdHJ1Y3QgeGZybV9zdGF0ZSAqCi14ZnJtX2ZpbmRfYWNxKHN0cnVjdCBuZXQgKm5ldCwgdTggbW9kZSwgdTMyIHJlcWlkLCB1OCBwcm90bywKK3hmcm1fZmluZF9hY3Eoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9tYXJrICptYXJrLCB1OCBtb2RlLCB1MzIgcmVxaWQsIHU4IHByb3RvLAogCSAgICAgIHhmcm1fYWRkcmVzc190ICpkYWRkciwgeGZybV9hZGRyZXNzX3QgKnNhZGRyLAogCSAgICAgIGludCBjcmVhdGUsIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKIHsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIAogCXNwaW5fbG9ja19iaCgmeGZybV9zdGF0ZV9sb2NrKTsKLQl4ID0gX19maW5kX2FjcV9jb3JlKG5ldCwgZmFtaWx5LCBtb2RlLCByZXFpZCwgcHJvdG8sIGRhZGRyLCBzYWRkciwgY3JlYXRlKTsKKwl4ID0gX19maW5kX2FjcV9jb3JlKG5ldCwgbWFyaywgZmFtaWx5LCBtb2RlLCByZXFpZCwgcHJvdG8sIGRhZGRyLCBzYWRkciwgY3JlYXRlKTsKIAlzcGluX3VubG9ja19iaCgmeGZybV9zdGF0ZV9sb2NrKTsKIAogCXJldHVybiB4OwpAQCAtMTQxOSw3ICsxNDQzLDcgQEAKIAogLyogU2lsbHkgZW5vdWdoLCBidXQgSSdtIGxhenkgdG8gYnVpbGQgcmVzb2x1dGlvbiBsaXN0ICovCiAKLXN0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX2ZpbmRfYWNxX2J5c2VxKHN0cnVjdCBuZXQgKm5ldCwgdTMyIHNlcSkKK3N0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX2ZpbmRfYWNxX2J5c2VxKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssIHUzMiBzZXEpCiB7CiAJaW50IGk7CiAKQEAgLTE0MjksNiArMTQ1Myw3IEBACiAKIAkJaGxpc3RfZm9yX2VhY2hfZW50cnkoeCwgZW50cnksIG5ldC0+eGZybS5zdGF0ZV9ieWRzdCtpLCBieWRzdCkgewogCQkJaWYgKHgtPmttLnNlcSA9PSBzZXEgJiYKKwkJCSAgICAobWFyayAmIHgtPm1hcmsubSkgPT0geC0+bWFyay52ICYmCiAJCQkgICAgeC0+a20uc3RhdGUgPT0gWEZSTV9TVEFURV9BQ1EpIHsKIAkJCQl4ZnJtX3N0YXRlX2hvbGQoeCk7CiAJCQkJcmV0dXJuIHg7CkBAIC0xNDM4LDEyICsxNDYzLDEyIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2ZpbmRfYWNxX2J5c2VxKHN0cnVjdCBuZXQgKm5ldCwgdTMyIHNlcSkKK3N0cnVjdCB4ZnJtX3N0YXRlICp4ZnJtX2ZpbmRfYWNxX2J5c2VxKHN0cnVjdCBuZXQgKm5ldCwgdTMyIG1hcmssIHUzMiBzZXEpCiB7CiAJc3RydWN0IHhmcm1fc3RhdGUgKng7CiAKIAlzcGluX2xvY2tfYmgoJnhmcm1fc3RhdGVfbG9jayk7Ci0JeCA9IF9feGZybV9maW5kX2FjcV9ieXNlcShuZXQsIHNlcSk7CisJeCA9IF9feGZybV9maW5kX2FjcV9ieXNlcShuZXQsIG1hcmssIHNlcSk7CiAJc3Bpbl91bmxvY2tfYmgoJnhmcm1fc3RhdGVfbG9jayk7CiAJcmV0dXJuIHg7CiB9CkBAIC0xNDUyLDEyICsxNDc3LDEyIEBACiB1MzIgeGZybV9nZXRfYWNxc2VxKHZvaWQpCiB7CiAJdTMyIHJlczsKLQlzdGF0aWMgdTMyIGFjcXNlcTsKLQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGFjcXNlcV9sb2NrKTsKKwlzdGF0aWMgYXRvbWljX3QgYWNxc2VxOwogCi0Jc3Bpbl9sb2NrX2JoKCZhY3FzZXFfbG9jayk7Ci0JcmVzID0gKCsrYWNxc2VxID8gOiArK2FjcXNlcSk7Ci0Jc3Bpbl91bmxvY2tfYmgoJmFjcXNlcV9sb2NrKTsKKwlkbyB7CisJCXJlcyA9IGF0b21pY19pbmNfcmV0dXJuKCZhY3FzZXEpOworCX0gd2hpbGUgKCFyZXMpOworCiAJcmV0dXJuIHJlczsKIH0KIEVYUE9SVF9TWU1CT0woeGZybV9nZXRfYWNxc2VxKTsKQEAgLTE0NzAsNiArMTQ5NSw3IEBACiAJaW50IGVyciA9IC1FTk9FTlQ7CiAJX19iZTMyIG1pbnNwaSA9IGh0b25sKGxvdyk7CiAJX19iZTMyIG1heHNwaSA9IGh0b25sKGhpZ2gpOworCXUzMiBtYXJrID0geC0+bWFyay52ICYgeC0+bWFyay5tOwogCiAJc3Bpbl9sb2NrX2JoKCZ4LT5sb2NrKTsKIAlpZiAoeC0+a20uc3RhdGUgPT0gWEZSTV9TVEFURV9ERUFEKQpAQCAtMTQ4Miw3ICsxNTA4LDcgQEAKIAllcnIgPSAtRU5PRU5UOwogCiAJaWYgKG1pbnNwaSA9PSBtYXhzcGkpIHsKLQkJeDAgPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsICZ4LT5pZC5kYWRkciwgbWluc3BpLCB4LT5pZC5wcm90bywgeC0+cHJvcHMuZmFtaWx5KTsKKwkJeDAgPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG1hcmssICZ4LT5pZC5kYWRkciwgbWluc3BpLCB4LT5pZC5wcm90bywgeC0+cHJvcHMuZmFtaWx5KTsKIAkJaWYgKHgwKSB7CiAJCQl4ZnJtX3N0YXRlX3B1dCh4MCk7CiAJCQlnb3RvIHVubG9jazsKQEAgLTE0OTIsNyArMTUxOCw3IEBACiAJCXUzMiBzcGkgPSAwOwogCQlmb3IgKGg9MDsgaDxoaWdoLWxvdysxOyBoKyspIHsKIAkJCXNwaSA9IGxvdyArIG5ldF9yYW5kb20oKSUoaGlnaC1sb3crMSk7Ci0JCQl4MCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgJngtPmlkLmRhZGRyLCBodG9ubChzcGkpLCB4LT5pZC5wcm90bywgeC0+cHJvcHMuZmFtaWx5KTsKKwkJCXgwID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCAmeC0+aWQuZGFkZHIsIGh0b25sKHNwaSksIHgtPmlkLnByb3RvLCB4LT5wcm9wcy5mYW1pbHkpOwogCQkJaWYgKHgwID09IE5VTEwpIHsKIAkJCQl4LT5pZC5zcGkgPSBodG9ubChzcGkpOwogCQkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9zeXNjdGwuYyBiL25ldC94ZnJtL3hmcm1fc3lzY3RsLmMKaW5kZXggMmUyMjFmMi4uMmM0ZDZjZCAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9zeXNjdGwuYworKysgYi9uZXQveGZybS94ZnJtX3N5c2N0bC5jCkBAIC0yLDcgKzIsNyBAQAogI2luY2x1ZGUgPG5ldC9uZXRfbmFtZXNwYWNlLmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KIAotc3RhdGljIHZvaWQgX194ZnJtX3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKK3N0YXRpYyB2b2lkIF9fbmV0X2luaXQgX194ZnJtX3N5c2N0bF9pbml0KHN0cnVjdCBuZXQgKm5ldCkKIHsKIAluZXQtPnhmcm0uc3lzY3RsX2FldmVudF9ldGltZSA9IFhGUk1fQUVfRVRJTUU7CiAJbmV0LT54ZnJtLnN5c2N0bF9hZXZlbnRfcnNlcXRoID0gWEZSTV9BRV9TRVFUX1NJWkU7CkBAIC02NCw3ICs2NCw3IEBACiAJcmV0dXJuIC1FTk9NRU07CiB9CiAKLXZvaWQgeGZybV9zeXNjdGxfZmluaShzdHJ1Y3QgbmV0ICpuZXQpCit2b2lkIF9fbmV0X2V4aXQgeGZybV9zeXNjdGxfZmluaShzdHJ1Y3QgbmV0ICpuZXQpCiB7CiAJc3RydWN0IGN0bF90YWJsZSAqdGFibGU7CiAKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1fdXNlci5jIGIvbmV0L3hmcm0veGZybV91c2VyLmMKaW5kZXggZDVhNzEyOS4uNjEwNmI3MiAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV91c2VyLmMKKysrIGIvbmV0L3hmcm0veGZybV91c2VyLmMKQEAgLTQ0Niw2ICs0NDYsOCBAQAogCQkJZ290byBlcnJvcjsKIAl9CiAKKwl4ZnJtX21hcmtfZ2V0KGF0dHJzLCAmeC0+bWFyayk7CisKIAllcnIgPSB4ZnJtX2luaXRfc3RhdGUoeCk7CiAJaWYgKGVycikKIAkJZ290byBlcnJvcjsKQEAgLTUyNiwxMSArNTI4LDEzIEBACiAJCQkJCQkgaW50ICplcnJwKQogewogCXN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gTlVMTDsKKwlzdHJ1Y3QgeGZybV9tYXJrIG07CiAJaW50IGVycjsKKwl1MzIgbWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsICZtKTsKIAogCWlmICh4ZnJtX2lkX3Byb3RvX21hdGNoKHAtPnByb3RvLCBJUFNFQ19QUk9UT19BTlkpKSB7CiAJCWVyciA9IC1FU1JDSDsKLQkJeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgJnAtPmRhZGRyLCBwLT5zcGksIHAtPnByb3RvLCBwLT5mYW1pbHkpOworCQl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCBtYXJrLCAmcC0+ZGFkZHIsIHAtPnNwaSwgcC0+cHJvdG8sIHAtPmZhbWlseSk7CiAJfSBlbHNlIHsKIAkJeGZybV9hZGRyZXNzX3QgKnNhZGRyID0gTlVMTDsKIApAQCAtNTQxLDcgKzU0NSw4IEBACiAJCX0KIAogCQllcnIgPSAtRVNSQ0g7Ci0JCXggPSB4ZnJtX3N0YXRlX2xvb2t1cF9ieWFkZHIobmV0LCAmcC0+ZGFkZHIsIHNhZGRyLAorCQl4ID0geGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKG5ldCwgbWFyaywKKwkJCQkJICAgICAmcC0+ZGFkZHIsIHNhZGRyLAogCQkJCQkgICAgIHAtPnByb3RvLCBwLT5mYW1pbHkpOwogCX0KIApAQCAtNjgzLDYgKzY4OCw5IEBACiAJaWYgKHgtPmVuY2FwKQogCQlOTEFfUFVUKHNrYiwgWEZSTUFfRU5DQVAsIHNpemVvZigqeC0+ZW5jYXApLCB4LT5lbmNhcCk7CiAKKwlpZiAoeGZybV9tYXJrX3B1dChza2IsICZ4LT5tYXJrKSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKIAlpZiAoeC0+c2VjdXJpdHkgJiYgY29weV9zZWNfY3R4KHgtPnNlY3VyaXR5LCBza2IpIDwgMCkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKQEAgLTk0Nyw2ICs5NTUsOCBAQAogCXhmcm1fYWRkcmVzc190ICpkYWRkcjsKIAlpbnQgZmFtaWx5OwogCWludCBlcnI7CisJdTMyIG1hcms7CisJc3RydWN0IHhmcm1fbWFyayBtOwogCiAJcCA9IG5sbXNnX2RhdGEobmxoKTsKIAllcnIgPSB2ZXJpZnlfdXNlcnNwaV9pbmZvKHApOwpAQCAtOTU3LDggKzk2NywxMCBAQAogCWRhZGRyID0gJnAtPmluZm8uaWQuZGFkZHI7CiAKIAl4ID0gTlVMTDsKKworCW1hcmsgPSB4ZnJtX21hcmtfZ2V0KGF0dHJzLCAmbSk7CiAJaWYgKHAtPmluZm8uc2VxKSB7Ci0JCXggPSB4ZnJtX2ZpbmRfYWNxX2J5c2VxKG5ldCwgcC0+aW5mby5zZXEpOworCQl4ID0geGZybV9maW5kX2FjcV9ieXNlcShuZXQsIG1hcmssIHAtPmluZm8uc2VxKTsKIAkJaWYgKHggJiYgeGZybV9hZGRyX2NtcCgmeC0+aWQuZGFkZHIsIGRhZGRyLCBmYW1pbHkpKSB7CiAJCQl4ZnJtX3N0YXRlX3B1dCh4KTsKIAkJCXggPSBOVUxMOwpAQCAtOTY2LDcgKzk3OCw3IEBACiAJfQogCiAJaWYgKCF4KQotCQl4ID0geGZybV9maW5kX2FjcShuZXQsIHAtPmluZm8ubW9kZSwgcC0+aW5mby5yZXFpZCwKKwkJeCA9IHhmcm1fZmluZF9hY3EobmV0LCAmbSwgcC0+aW5mby5tb2RlLCBwLT5pbmZvLnJlcWlkLAogCQkJCSAgcC0+aW5mby5pZC5wcm90bywgZGFkZHIsCiAJCQkJICAmcC0+aW5mby5zYWRkciwgMSwKIAkJCQkgIGZhbWlseSk7CkBAIC0xMjIwLDYgKzEyMzIsOCBAQAogCWlmIChlcnIpCiAJCWdvdG8gZXJyb3I7CiAKKwl4ZnJtX21hcmtfZ2V0KGF0dHJzLCAmeHAtPm1hcmspOworCiAJcmV0dXJuIHhwOwogIGVycm9yOgogCSplcnJwID0gZXJyOwpAQCAtMTM2NiwxMCArMTM4MCwxMyBAQAogCQlnb3RvIG5sbXNnX2ZhaWx1cmU7CiAJaWYgKGNvcHlfdG9fdXNlcl9wb2xpY3lfdHlwZSh4cC0+dHlwZSwgc2tiKSA8IDApCiAJCWdvdG8gbmxtc2dfZmFpbHVyZTsKKwlpZiAoeGZybV9tYXJrX3B1dChza2IsICZ4cC0+bWFyaykpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCiAJbmxtc2dfZW5kKHNrYiwgbmxoKTsKIAlyZXR1cm4gMDsKIAorbmxhX3B1dF9mYWlsdXJlOgogbmxtc2dfZmFpbHVyZToKIAlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwogCXJldHVybiAtRU1TR1NJWkU7CkBAIC0xNDQxLDYgKzE0NTgsOCBAQAogCWludCBlcnI7CiAJc3RydWN0IGttX2V2ZW50IGM7CiAJaW50IGRlbGV0ZTsKKwlzdHJ1Y3QgeGZybV9tYXJrIG07CisJdTMyIG1hcmsgPSB4ZnJtX21hcmtfZ2V0KGF0dHJzLCAmbSk7CiAKIAlwID0gbmxtc2dfZGF0YShubGgpOwogCWRlbGV0ZSA9IG5saC0+bmxtc2dfdHlwZSA9PSBYRlJNX01TR19ERUxQT0xJQ1k7CkBAIC0xNDU0LDcgKzE0NzMsNyBAQAogCQlyZXR1cm4gZXJyOwogCiAJaWYgKHAtPmluZGV4KQotCQl4cCA9IHhmcm1fcG9saWN5X2J5aWQobmV0LCB0eXBlLCBwLT5kaXIsIHAtPmluZGV4LCBkZWxldGUsICZlcnIpOworCQl4cCA9IHhmcm1fcG9saWN5X2J5aWQobmV0LCBtYXJrLCB0eXBlLCBwLT5kaXIsIHAtPmluZGV4LCBkZWxldGUsICZlcnIpOwogCWVsc2UgewogCQlzdHJ1Y3QgbmxhdHRyICpydCA9IGF0dHJzW1hGUk1BX1NFQ19DVFhdOwogCQlzdHJ1Y3QgeGZybV9zZWNfY3R4ICpjdHg7CkBAIC0xNDcxLDggKzE0OTAsOCBAQAogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9Ci0JCXhwID0geGZybV9wb2xpY3lfYnlzZWxfY3R4KG5ldCwgdHlwZSwgcC0+ZGlyLCAmcC0+c2VsLCBjdHgsCi0JCQkJCSAgIGRlbGV0ZSwgJmVycik7CisJCXhwID0geGZybV9wb2xpY3lfYnlzZWxfY3R4KG5ldCwgbWFyaywgdHlwZSwgcC0+ZGlyLCAmcC0+c2VsLAorCQkJCQkgICBjdHgsIGRlbGV0ZSwgJmVycik7CiAJCXNlY3VyaXR5X3hmcm1fcG9saWN5X2ZyZWUoY3R4KTsKIAl9CiAJaWYgKHhwID09IE5VTEwpCkBAIC0xNTI0LDggKzE1NDMsMTEgQEAKIAlhdWRpdF9pbmZvLnNlc3Npb25pZCA9IE5FVExJTktfQ0Ioc2tiKS5zZXNzaW9uaWQ7CiAJYXVkaXRfaW5mby5zZWNpZCA9IE5FVExJTktfQ0Ioc2tiKS5zaWQ7CiAJZXJyID0geGZybV9zdGF0ZV9mbHVzaChuZXQsIHAtPnByb3RvLCAmYXVkaXRfaW5mbyk7Ci0JaWYgKGVycikKKwlpZiAoZXJyKSB7CisJCWlmIChlcnIgPT0gLUVTUkNIKSAvKiBlbXB0eSB0YWJsZSAqLworCQkJcmV0dXJuIDA7CiAJCXJldHVybiBlcnI7CisJfQogCWMuZGF0YS5wcm90byA9IHAtPnByb3RvOwogCWMuZXZlbnQgPSBubGgtPm5sbXNnX3R5cGU7CiAJYy5zZXEgPSBubGgtPm5sbXNnX3NlcTsKQEAgLTE1NDEsNiArMTU2Myw3IEBACiAJcmV0dXJuIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgeGZybV9hZXZlbnRfaWQpKQogCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV9yZXBsYXlfc3RhdGUpKQogCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV9saWZldGltZV9jdXIpKQorCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV9tYXJrKSkKIAkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KSAvKiBYRlJNX0FFX1JUSFIgKi8KIAkgICAgICAgKyBubGFfdG90YWxfc2l6ZSg0KTsgLyogWEZSTV9BRV9FVEhSICovCiB9CkBAIC0xNTczLDYgKzE1OTYsOSBAQAogCQlOTEFfUFVUX1UzMihza2IsIFhGUk1BX0VUSU1FUl9USFJFU0gsCiAJCQkgICAgeC0+cmVwbGF5X21heGFnZSAqIDEwIC8gSFopOwogCisJaWYgKHhmcm1fbWFya19wdXQoc2tiLCAmeC0+bWFyaykpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCiAJcmV0dXJuIG5sbXNnX2VuZChza2IsIG5saCk7CiAKIG5sYV9wdXRfZmFpbHVyZToKQEAgLTE1ODgsNiArMTYxNCw4IEBACiAJc3RydWN0IHNrX2J1ZmYgKnJfc2tiOwogCWludCBlcnI7CiAJc3RydWN0IGttX2V2ZW50IGM7CisJdTMyIG1hcms7CisJc3RydWN0IHhmcm1fbWFyayBtOwogCXN0cnVjdCB4ZnJtX2FldmVudF9pZCAqcCA9IG5sbXNnX2RhdGEobmxoKTsKIAlzdHJ1Y3QgeGZybV91c2Vyc2FfaWQgKmlkID0gJnAtPnNhX2lkOwogCkBAIC0xNTk1LDcgKzE2MjMsOSBAQAogCWlmIChyX3NrYiA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsICZpZC0+ZGFkZHIsIGlkLT5zcGksIGlkLT5wcm90bywgaWQtPmZhbWlseSk7CisJbWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsICZtKTsKKworCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG1hcmssICZpZC0+ZGFkZHIsIGlkLT5zcGksIGlkLT5wcm90bywgaWQtPmZhbWlseSk7CiAJaWYgKHggPT0gTlVMTCkgewogCQlrZnJlZV9za2Iocl9za2IpOwogCQlyZXR1cm4gLUVTUkNIOwpAQCAtMTYyNiw2ICsxNjU2LDggQEAKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIAlzdHJ1Y3Qga21fZXZlbnQgYzsKIAlpbnQgZXJyID0gLSBFSU5WQUw7CisJdTMyIG1hcmsgPSAwOworCXN0cnVjdCB4ZnJtX21hcmsgbTsKIAlzdHJ1Y3QgeGZybV9hZXZlbnRfaWQgKnAgPSBubG1zZ19kYXRhKG5saCk7CiAJc3RydWN0IG5sYXR0ciAqcnAgPSBhdHRyc1tYRlJNQV9SRVBMQVlfVkFMXTsKIAlzdHJ1Y3QgbmxhdHRyICpsdCA9IGF0dHJzW1hGUk1BX0xUSU1FX1ZBTF07CkBAIC0xNjM3LDcgKzE2NjksOSBAQAogCWlmICghKG5saC0+bmxtc2dfZmxhZ3MmTkxNX0ZfUkVQTEFDRSkpCiAJCXJldHVybiBlcnI7CiAKLQl4ID0geGZybV9zdGF0ZV9sb29rdXAobmV0LCAmcC0+c2FfaWQuZGFkZHIsIHAtPnNhX2lkLnNwaSwgcC0+c2FfaWQucHJvdG8sIHAtPnNhX2lkLmZhbWlseSk7CisJbWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsICZtKTsKKworCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG1hcmssICZwLT5zYV9pZC5kYWRkciwgcC0+c2FfaWQuc3BpLCBwLT5zYV9pZC5wcm90bywgcC0+c2FfaWQuZmFtaWx5KTsKIAlpZiAoeCA9PSBOVUxMKQogCQlyZXR1cm4gLUVTUkNIOwogCkBAIC0xNjc2LDggKzE3MTAsMTIgQEAKIAlhdWRpdF9pbmZvLnNlc3Npb25pZCA9IE5FVExJTktfQ0Ioc2tiKS5zZXNzaW9uaWQ7CiAJYXVkaXRfaW5mby5zZWNpZCA9IE5FVExJTktfQ0Ioc2tiKS5zaWQ7CiAJZXJyID0geGZybV9wb2xpY3lfZmx1c2gobmV0LCB0eXBlLCAmYXVkaXRfaW5mbyk7Ci0JaWYgKGVycikKKwlpZiAoZXJyKSB7CisJCWlmIChlcnIgPT0gLUVTUkNIKSAvKiBlbXB0eSB0YWJsZSAqLworCQkJcmV0dXJuIDA7CiAJCXJldHVybiBlcnI7CisJfQorCiAJYy5kYXRhLnR5cGUgPSB0eXBlOwogCWMuZXZlbnQgPSBubGgtPm5sbXNnX3R5cGU7CiAJYy5zZXEgPSBubGgtPm5sbXNnX3NlcTsKQEAgLTE2OTYsMTMgKzE3MzQsMTUgQEAKIAlzdHJ1Y3QgeGZybV91c2VycG9saWN5X2luZm8gKnAgPSAmdXAtPnBvbDsKIAl1OCB0eXBlID0gWEZSTV9QT0xJQ1lfVFlQRV9NQUlOOwogCWludCBlcnIgPSAtRU5PRU5UOworCXN0cnVjdCB4ZnJtX21hcmsgbTsKKwl1MzIgbWFyayA9IHhmcm1fbWFya19nZXQoYXR0cnMsICZtKTsKIAogCWVyciA9IGNvcHlfZnJvbV91c2VyX3BvbGljeV90eXBlKCZ0eXBlLCBhdHRycyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAogCWlmIChwLT5pbmRleCkKLQkJeHAgPSB4ZnJtX3BvbGljeV9ieWlkKG5ldCwgdHlwZSwgcC0+ZGlyLCBwLT5pbmRleCwgMCwgJmVycik7CisJCXhwID0geGZybV9wb2xpY3lfYnlpZChuZXQsIG1hcmssIHR5cGUsIHAtPmRpciwgcC0+aW5kZXgsIDAsICZlcnIpOwogCWVsc2UgewogCQlzdHJ1Y3QgbmxhdHRyICpydCA9IGF0dHJzW1hGUk1BX1NFQ19DVFhdOwogCQlzdHJ1Y3QgeGZybV9zZWNfY3R4ICpjdHg7CkBAIC0xNzE5LDcgKzE3NTksOCBAQAogCQkJaWYgKGVycikKIAkJCQlyZXR1cm4gZXJyOwogCQl9Ci0JCXhwID0geGZybV9wb2xpY3lfYnlzZWxfY3R4KG5ldCwgdHlwZSwgcC0+ZGlyLCAmcC0+c2VsLCBjdHgsIDAsICZlcnIpOworCQl4cCA9IHhmcm1fcG9saWN5X2J5c2VsX2N0eChuZXQsIG1hcmssIHR5cGUsIHAtPmRpciwKKwkJCQkJICAgJnAtPnNlbCwgY3R4LCAwLCAmZXJyKTsKIAkJc2VjdXJpdHlfeGZybV9wb2xpY3lfZnJlZShjdHgpOwogCX0KIAlpZiAoeHAgPT0gTlVMTCkKQEAgLTE3NTksOCArMTgwMCwxMCBAQAogCWludCBlcnI7CiAJc3RydWN0IHhmcm1fdXNlcl9leHBpcmUgKnVlID0gbmxtc2dfZGF0YShubGgpOwogCXN0cnVjdCB4ZnJtX3VzZXJzYV9pbmZvICpwID0gJnVlLT5zdGF0ZTsKKwlzdHJ1Y3QgeGZybV9tYXJrIG07CisJdTMyIG1hcmsgPSB4ZnJtX21hcmtfZ2V0KGF0dHJzLCAmbSk7OwogCi0JeCA9IHhmcm1fc3RhdGVfbG9va3VwKG5ldCwgJnAtPmlkLmRhZGRyLCBwLT5pZC5zcGksIHAtPmlkLnByb3RvLCBwLT5mYW1pbHkpOworCXggPSB4ZnJtX3N0YXRlX2xvb2t1cChuZXQsIG1hcmssICZwLT5pZC5kYWRkciwgcC0+aWQuc3BpLCBwLT5pZC5wcm90bywgcC0+ZmFtaWx5KTsKIAogCWVyciA9IC1FTk9FTlQ7CiAJaWYgKHggPT0gTlVMTCkKQEAgLTE3OTQsNiArMTgzNyw3IEBACiAJc3RydWN0IHhmcm1fdXNlcl90bXBsICp1dDsKIAlpbnQgaTsKIAlzdHJ1Y3QgbmxhdHRyICpydCA9IGF0dHJzW1hGUk1BX1RNUExdOworCXN0cnVjdCB4ZnJtX21hcmsgbWFyazsKIAogCXN0cnVjdCB4ZnJtX3VzZXJfYWNxdWlyZSAqdWEgPSBubG1zZ19kYXRhKG5saCk7CiAJc3RydWN0IHhmcm1fc3RhdGUgKnggPSB4ZnJtX3N0YXRlX2FsbG9jKG5ldCk7CkBAIC0xODAyLDYgKzE4NDYsOCBAQAogCWlmICgheCkKIAkJZ290byBub21lbTsKIAorCXhmcm1fbWFya19nZXQoYXR0cnMsICZtYXJrKTsKKwogCWVyciA9IHZlcmlmeV9uZXdwb2xpY3lfaW5mbygmdWEtPnBvbGljeSk7CiAJaWYgKGVycikKIAkJZ290byBiYWRfcG9saWN5OwpAQCAtMTgxNCw3ICsxODYwLDggQEAKIAltZW1jcHkoJngtPmlkLCAmdWEtPmlkLCBzaXplb2YodWEtPmlkKSk7CiAJbWVtY3B5KCZ4LT5wcm9wcy5zYWRkciwgJnVhLT5zYWRkciwgc2l6ZW9mKHVhLT5zYWRkcikpOwogCW1lbWNweSgmeC0+c2VsLCAmdWEtPnNlbCwgc2l6ZW9mKHVhLT5zZWwpKTsKLQorCXhwLT5tYXJrLm0gPSB4LT5tYXJrLm0gPSBtYXJrLm07CisJeHAtPm1hcmsudiA9IHgtPm1hcmsudiA9IG1hcmsudjsKIAl1dCA9IG5sYV9kYXRhKHJ0KTsKIAkvKiBleHRyYWN0IHRoZSB0ZW1wbGF0ZXMgYW5kIGZvciBlYWNoIGNhbGwga21fa2V5ICovCiAJZm9yIChpID0gMDsgaSA8IHhwLT54ZnJtX25yOyBpKyssIHV0KyspIHsKQEAgLTIwNTQsNiArMjEwMSwxMCBAQAogI3VuZGVmIFhNU0dTSVpFCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSB4ZnJtYV9wb2xpY3lbWEZSTUFfTUFYKzFdID0geworCVtYRlJNQV9TQV0JCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJzYV9pbmZvKX0sCisJW1hGUk1BX1BPTElDWV0JCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJwb2xpY3lfaW5mbyl9LAorCVtYRlJNQV9MQVNUVVNFRF0JPSB7IC50eXBlID0gTkxBX1U2NH0sCisJW1hGUk1BX0FMR19BVVRIX1RSVU5DXQk9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgeGZybV9hbGdvX2F1dGgpfSwKIAlbWEZSTUFfQUxHX0FFQURdCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB4ZnJtX2FsZ29fYWVhZCkgfSwKIAlbWEZSTUFfQUxHX0FVVEhdCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB4ZnJtX2FsZ28pIH0sCiAJW1hGUk1BX0FMR19DUllQVF0JPSB7IC5sZW4gPSBzaXplb2Yoc3RydWN0IHhmcm1fYWxnbykgfSwKQEAgLTIwNzAsNiArMjEyMSw3IEBACiAJW1hGUk1BX1BPTElDWV9UWVBFXQk9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgeGZybV91c2VycG9saWN5X3R5cGUpfSwKIAlbWEZSTUFfTUlHUkFURV0JCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB4ZnJtX3VzZXJfbWlncmF0ZSkgfSwKIAlbWEZSTUFfS01BRERSRVNTXQk9IHsgLmxlbiA9IHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX2ttYWRkcmVzcykgfSwKKwlbWEZSTUFfTUFSS10JCT0geyAubGVuID0gc2l6ZW9mKHN0cnVjdCB4ZnJtX21hcmspIH0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHhmcm1fbGluayB7CkBAIC0yMTQ5LDcgKzIyMDEsOCBAQAogCiBzdGF0aWMgaW5saW5lIHNpemVfdCB4ZnJtX2V4cGlyZV9tc2dzaXplKHZvaWQpCiB7Ci0JcmV0dXJuIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX2V4cGlyZSkpOworCXJldHVybiBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHhmcm1fdXNlcl9leHBpcmUpKQorCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV9tYXJrKSk7CiB9CiAKIHN0YXRpYyBpbnQgYnVpbGRfZXhwaXJlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qga21fZXZlbnQgKmMpCkBAIC0yMTY1LDcgKzIyMTgsMTMgQEAKIAljb3B5X3RvX3VzZXJfc3RhdGUoeCwgJnVlLT5zdGF0ZSk7CiAJdWUtPmhhcmQgPSAoYy0+ZGF0YS5oYXJkICE9IDApID8gMSA6IDA7CiAKKwlpZiAoeGZybV9tYXJrX3B1dChza2IsICZ4LT5tYXJrKSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CisKIAlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKKworbmxhX3B1dF9mYWlsdXJlOgorCXJldHVybiAtRU1TR1NJWkU7CiB9CiAKIHN0YXRpYyBpbnQgeGZybV9leHBfc3RhdGVfbm90aWZ5KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qga21fZXZlbnQgKmMpCkBAIC0yMTc3LDggKzIyMzYsMTAgQEAKIAlpZiAoc2tiID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKGJ1aWxkX2V4cGlyZShza2IsIHgsIGMpIDwgMCkKLQkJQlVHKCk7CisJaWYgKGJ1aWxkX2V4cGlyZShza2IsIHgsIGMpIDwgMCkgeworCQlrZnJlZV9za2Ioc2tiKTsKKwkJcmV0dXJuIC1FTVNHU0laRTsKKwl9CiAKIAlyZXR1cm4gbmxtc2dfbXVsdGljYXN0KG5ldC0+eGZybS5ubHNrLCBza2IsIDAsIFhGUk1OTEdSUF9FWFBJUkUsIEdGUF9BVE9NSUMpOwogfQpAQCAtMjI2Niw2ICsyMzI3LDcgQEAKIAlpZiAoYy0+ZXZlbnQgPT0gWEZSTV9NU0dfREVMU0EpIHsKIAkJbGVuICs9IG5sYV90b3RhbF9zaXplKGhlYWRsZW4pOwogCQloZWFkbGVuID0gc2l6ZW9mKCppZCk7CisJCWxlbiArPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHhmcm1fbWFyaykpOwogCX0KIAlsZW4gKz0gTkxNU0dfQUxJR04oaGVhZGxlbik7CiAKQEAgLTIzMzYsNiArMjM5OCw3IEBACiB7CiAJcmV0dXJuIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX2FjcXVpcmUpKQogCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX3RtcGwpICogeHAtPnhmcm1fbnIpCisJICAgICAgICsgbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCB4ZnJtX21hcmspKQogCSAgICAgICArIG5sYV90b3RhbF9zaXplKHhmcm1fdXNlcl9zZWNfY3R4X3NpemUoeC0+c2VjdXJpdHkpKQogCSAgICAgICArIHVzZXJwb2xpY3lfdHlwZV9hdHRyc2l6ZSgpOwogfQpAQCAtMjM2OCw5ICsyNDMxLDEyIEBACiAJCWdvdG8gbmxtc2dfZmFpbHVyZTsKIAlpZiAoY29weV90b191c2VyX3BvbGljeV90eXBlKHhwLT50eXBlLCBza2IpIDwgMCkKIAkJZ290byBubG1zZ19mYWlsdXJlOworCWlmICh4ZnJtX21hcmtfcHV0KHNrYiwgJnhwLT5tYXJrKSkKKwkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIAlyZXR1cm4gbmxtc2dfZW5kKHNrYiwgbmxoKTsKIAorbmxhX3B1dF9mYWlsdXJlOgogbmxtc2dfZmFpbHVyZToKIAlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwogCXJldHVybiAtRU1TR1NJWkU7CkBAIC0yNDU3LDYgKzI1MjMsNyBAQAogCXJldHVybiBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHhmcm1fdXNlcl9wb2xleHBpcmUpKQogCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV91c2VyX3RtcGwpICogeHAtPnhmcm1fbnIpCiAJICAgICAgICsgbmxhX3RvdGFsX3NpemUoeGZybV91c2VyX3NlY19jdHhfc2l6ZSh4cC0+c2VjdXJpdHkpKQorCSAgICAgICArIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgeGZybV9tYXJrKSkKIAkgICAgICAgKyB1c2VycG9saWN5X3R5cGVfYXR0cnNpemUoKTsKIH0KIApAQCAtMjQ3OSwxMCArMjU0NiwxMyBAQAogCQlnb3RvIG5sbXNnX2ZhaWx1cmU7CiAJaWYgKGNvcHlfdG9fdXNlcl9wb2xpY3lfdHlwZSh4cC0+dHlwZSwgc2tiKSA8IDApCiAJCWdvdG8gbmxtc2dfZmFpbHVyZTsKKwlpZiAoeGZybV9tYXJrX3B1dChza2IsICZ4cC0+bWFyaykpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCXVwZS0+aGFyZCA9ICEhaGFyZDsKIAogCXJldHVybiBubG1zZ19lbmQoc2tiLCBubGgpOwogCitubGFfcHV0X2ZhaWx1cmU6CiBubG1zZ19mYWlsdXJlOgogCW5sbXNnX2NhbmNlbChza2IsIG5saCk7CiAJcmV0dXJuIC1FTVNHU0laRTsKQEAgLTI1MTksNiArMjU4OSw3IEBACiAJCWhlYWRsZW4gPSBzaXplb2YoKmlkKTsKIAl9CiAJbGVuICs9IHVzZXJwb2xpY3lfdHlwZV9hdHRyc2l6ZSgpOworCWxlbiArPSBubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IHhmcm1fbWFyaykpOwogCWxlbiArPSBOTE1TR19BTElHTihoZWFkbGVuKTsKIAogCXNrYiA9IG5sbXNnX25ldyhsZW4sIEdGUF9BVE9NSUMpOwpAQCAtMjU1NCwxMCArMjYyNSwxNCBAQAogCWlmIChjb3B5X3RvX3VzZXJfcG9saWN5X3R5cGUoeHAtPnR5cGUsIHNrYikgPCAwKQogCQlnb3RvIG5sbXNnX2ZhaWx1cmU7CiAKKwlpZiAoeGZybV9tYXJrX3B1dChza2IsICZ4cC0+bWFyaykpCisJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOworCiAJbmxtc2dfZW5kKHNrYiwgbmxoKTsKIAogCXJldHVybiBubG1zZ19tdWx0aWNhc3QobmV0LT54ZnJtLm5sc2ssIHNrYiwgMCwgWEZSTU5MR1JQX1BPTElDWSwgR0ZQX0FUT01JQyk7CiAKK25sYV9wdXRfZmFpbHVyZToKIG5sbXNnX2ZhaWx1cmU6CiAJa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvc2FtcGxlcy9rb2JqZWN0L2tvYmplY3QtZXhhbXBsZS5jIGIvc2FtcGxlcy9rb2JqZWN0L2tvYmplY3QtZXhhbXBsZS5jCmluZGV4IDhkOWI1NWEuLjg2ZWEwYzMgMTAwNjQ0Ci0tLSBhL3NhbXBsZXMva29iamVjdC9rb2JqZWN0LWV4YW1wbGUuYworKysgYi9zYW1wbGVzL2tvYmplY3Qva29iamVjdC1leGFtcGxlLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKIAlfX0FUVFIoZm9vLCAwNjY2LCBmb29fc2hvdywgZm9vX3N0b3JlKTsKIAogLyoKLSAqIE1vcmUgY29tcGxleCBmdW5jdGlvbiB3aGVyZSB3ZSBkZXRlcm1pbmUgd2hpY2ggdmFyaWJsZSBpcyBiZWluZyBhY2Nlc3NlZCBieQorICogTW9yZSBjb21wbGV4IGZ1bmN0aW9uIHdoZXJlIHdlIGRldGVybWluZSB3aGljaCB2YXJpYWJsZSBpcyBiZWluZyBhY2Nlc3NlZCBieQogICogbG9va2luZyBhdCB0aGUgYXR0cmlidXRlIGZvciB0aGUgImJheiIgYW5kICJiYXIiIGZpbGVzLgogICovCiBzdGF0aWMgc3NpemVfdCBiX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTc5LDcgKzc5LDcgQEAKIAogCiAvKgotICogQ3JlYXRlIGEgZ3JvdXAgb2YgYXR0cmlidXRlcyBzbyB0aGF0IHdlIGNhbiBjcmVhdGUgYW5kIGRlc3RvcnkgdGhlbSBhbGwKKyAqIENyZWF0ZSBhIGdyb3VwIG9mIGF0dHJpYnV0ZXMgc28gdGhhdCB3ZSBjYW4gY3JlYXRlIGFuZCBkZXN0cm95IHRoZW0gYWxsCiAgKiBhdCBvbmNlLgogICovCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cnNbXSA9IHsKZGlmZiAtLWdpdCBhL3NhbXBsZXMva29iamVjdC9rc2V0LWV4YW1wbGUuYyBiL3NhbXBsZXMva29iamVjdC9rc2V0LWV4YW1wbGUuYwppbmRleCA0NWI3ZDU2Li4zYjEyNmQxIDEwMDY0NAotLS0gYS9zYW1wbGVzL2tvYmplY3Qva3NldC1leGFtcGxlLmMKKysrIGIvc2FtcGxlcy9rb2JqZWN0L2tzZXQtZXhhbXBsZS5jCkBAIC04Nyw3ICs4Nyw3IEBACiB9CiAKIC8qIE91ciBjdXN0b20gc3lzZnNfb3BzIHRoYXQgd2Ugd2lsbCBhc3NvY2lhdGUgd2l0aCBvdXIga3R5cGUgbGF0ZXIgb24gKi8KLXN0YXRpYyBzdHJ1Y3Qgc3lzZnNfb3BzIGZvb19zeXNmc19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHN5c2ZzX29wcyBmb29fc3lzZnNfb3BzID0gewogCS5zaG93ID0gZm9vX2F0dHJfc2hvdywKIAkuc3RvcmUgPSBmb29fYXR0cl9zdG9yZSwKIH07CkBAIC0xMjcsNyArMTI3LDcgQEAKIAlfX0FUVFIoZm9vLCAwNjY2LCBmb29fc2hvdywgZm9vX3N0b3JlKTsKIAogLyoKLSAqIE1vcmUgY29tcGxleCBmdW5jdGlvbiB3aGVyZSB3ZSBkZXRlcm1pbmUgd2hpY2ggdmFyaWJsZSBpcyBiZWluZyBhY2Nlc3NlZCBieQorICogTW9yZSBjb21wbGV4IGZ1bmN0aW9uIHdoZXJlIHdlIGRldGVybWluZSB3aGljaCB2YXJpYWJsZSBpcyBiZWluZyBhY2Nlc3NlZCBieQogICogbG9va2luZyBhdCB0aGUgYXR0cmlidXRlIGZvciB0aGUgImJheiIgYW5kICJiYXIiIGZpbGVzLgogICovCiBzdGF0aWMgc3NpemVfdCBiX3Nob3coc3RydWN0IGZvb19vYmogKmZvb19vYmosIHN0cnVjdCBmb29fYXR0cmlidXRlICphdHRyLApAQCAtMTYxLDcgKzE2MSw3IEBACiAJX19BVFRSKGJhciwgMDY2NiwgYl9zaG93LCBiX3N0b3JlKTsKIAogLyoKLSAqIENyZWF0ZSBhIGdyb3VwIG9mIGF0dHJpYnV0ZXMgc28gdGhhdCB3ZSBjYW4gY3JlYXRlIGFuZCBkZXN0b3J5IHRoZW0gYWxsCisgKiBDcmVhdGUgYSBncm91cCBvZiBhdHRyaWJ1dGVzIHNvIHRoYXQgd2UgY2FuIGNyZWF0ZSBhbmQgZGVzdHJveSB0aGVtIGFsbAogICogYXQgb25jZS4KICAqLwogc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZvb19kZWZhdWx0X2F0dHJzW10gPSB7CmRpZmYgLS1naXQgYS9zY3JpcHRzL2NoZWNrcGF0Y2gucGwgYi9zY3JpcHRzL2NoZWNrcGF0Y2gucGwKaW5kZXggMzI1N2QzZC4uYTRkNzQzNCAxMDA3NTUKLS0tIGEvc2NyaXB0cy9jaGVja3BhdGNoLnBsCisrKyBiL3NjcmlwdHMvY2hlY2twYXRjaC5wbApAQCAtMTQ1LDExICsxNDUsMTQgQEAKIAkJCV9fa3Byb2Jlc3wKIAkJCV9fcmVmCiAJCX14OworCisjIE5vdGVzIHRvICRBdHRyaWJ1dGU6CisjIFdlIG5lZWQgXGIgYWZ0ZXIgJ2luaXQnIG90aGVyd2lzZSAnaW5pdGNvbnN0JyB3aWxsIGNhdXNlIGEgZmFsc2UgcG9zaXRpdmUgaW4gYSBjaGVjawogb3VyICRBdHRyaWJ1dGUJPSBxcnsKIAkJCWNvbnN0fAogCQkJX19yZWFkX21vc3RseXwKIAkJCV9fa3Byb2Jlc3wKLQkJCV9fKD86bWVtfGNwdXxkZXZ8KSg/OmluaXRkYXRhfGluaXQpfAorCQkJX18oPzptZW18Y3B1fGRldnwpKD86aW5pdGRhdGF8aW5pdGNvbnN0fGluaXRcYil8CiAJCQlfX19fY2FjaGVsaW5lX2FsaWduZWR8CiAJCQlfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wfAogCQkJX19fX2NhY2hlbGluZV9pbnRlcm5vZGVhbGlnbmVkX2luX3NtcHwKQEAgLTE4OSw2ICsxOTIsMTQgQEAKIAlhdG9taWNfdAogKX07CiAKK291ciAkbG9nRnVuY3Rpb25zID0gcXJ7KD94OgorCXByaW50a3wKKwlwcl8oZGVidWd8ZGJnfHZkYmd8ZGV2ZWx8aW5mb3x3YXJuaW5nfGVycnxub3RpY2V8YWxlcnR8Y3JpdHxlbWVyZ3xjb250KXwKKwlkZXZfKHByaW50a3xkYmd8dmRiZ3xpbmZvfHdhcm58ZXJyfG5vdGljZXxhbGVydHxjcml0fGVtZXJnfFdBUk4pfAorCVdBUk58CisJcGFuaWMKKyl9OworCiBvdXIgQHR5cGVMaXN0ID0gKAogCXFye3ZvaWR9LAogCXFyeyg/OnVuc2lnbmVkXHMrKT9jaGFyfSwKQEAgLTEzNzcsMTIgKzEzODgsMTcgQEAKICM4MCBjb2x1bW4gbGltaXQKIAkJaWYgKCRsaW5lID1+IC9eXCsvICYmICRwcmV2cmF3bGluZSAhfiAvXC9cKlwqLyAmJgogCQkgICAgJHJhd2xpbmUgIX4gL14uXHMqXCpccypcQCRJZGVudFxzLyAmJgotCQkgICAgJGxpbmUgIX4gL15cK1xzKnByaW50a1xzKlwoXHMqKD86S0VSTl9cUytccyopPyJbWFx0XSoiXHMqKD86LHxcKVxzKjspXHMqJC8gJiYKKwkJICAgICRsaW5lICF+IC9eXCtccyokbG9nRnVuY3Rpb25zXHMqXChccyooPzpLRVJOX1xTK1xzKik/IltYXHRdKiJccyooPzosfFwpXHMqOylccyokLyAmJgogCQkgICAgJGxlbmd0aCA+IDgwKQogCQl7CiAJCQlXQVJOKCJsaW5lIG92ZXIgODAgY2hhcmFjdGVyc1xuIiAuICRoZXJlY3Vycik7CiAJCX0KIAorIyBjaGVjayBmb3Igc3BhY2VzIGJlZm9yZSBhIHF1b3RlZCBuZXdsaW5lCisJCWlmICgkcmF3bGluZSA9fiAvXi4qXCIuKlxzXFxuLykgeworCQkJV0FSTigidW5uZWNlc3Nhcnkgd2hpdGVzcGFjZSBiZWZvcmUgYSBxdW90ZWQgbmV3bGluZVxuIiAuICRoZXJlY3Vycik7CisJCX0KKwogIyBjaGVjayBmb3IgYWRkaW5nIGxpbmVzIHdpdGhvdXQgYSBuZXdsaW5lLgogCQlpZiAoJGxpbmUgPX4gL15cKy8gJiYgZGVmaW5lZCAkbGluZXNbJGxpbmVucl0gJiYgJGxpbmVzWyRsaW5lbnJdID1+IC9eXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZS8pIHsKIAkJCVdBUk4oImFkZGluZyBhIGxpbmUgd2l0aG91dCBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG4iIC4gJGhlcmVjdXJyKTsKQEAgLTE0MTEsNiArMTQyNywxMiBAQAogCQkJRVJST1IoImNvZGUgaW5kZW50IHNob3VsZCB1c2UgdGFicyB3aGVyZSBwb3NzaWJsZVxuIiAuICRoZXJldmV0KTsKIAkJfQogCisjIGNoZWNrIGZvciBzcGFjZSBiZWZvcmUgdGFicy4KKwkJaWYgKCRyYXdsaW5lID1+IC9eXCsvICYmICRyYXdsaW5lID1+IC8gXHQvKSB7CisJCQlteSAkaGVyZXZldCA9ICIkaGVyZVxuIiAuIGNhdF92ZXQoJHJhd2xpbmUpIC4gIlxuIjsKKwkJCVdBUk4oInBsZWFzZSwgbm8gc3BhY2UgYmVmb3JlIHRhYnNcbiIgLiAkaGVyZXZldCk7CisJCX0KKwogIyBjaGVjayB3ZSBhcmUgaW4gYSB2YWxpZCBDIHNvdXJjZSBmaWxlIGlmIG5vdCB0aGVuIGlnbm9yZSB0aGlzIGh1bmsKIAkJbmV4dCBpZiAoJHJlYWxmaWxlICF+IC9cLihofGMpJC8pOwogCkBAIC0yMTgyLDggKzIyMDQsMTAgQEAKIAkJCQkjIEZpbmQgb3V0IGhvdyBsb25nIHRoZSBjb25kaXRpb25hbCBhY3R1YWxseSBpcy4KIAkJCQlteSBAbmV3bGluZXMgPSAoJGMgPX4gL1xuL2dzKTsKIAkJCQlteSAkY29uZF9saW5lcyA9IDEgKyAkI25ld2xpbmVzOworCQkJCW15ICRzdGF0X3JlYWwgPSAnJzsKIAotCQkJCW15ICRzdGF0X3JlYWwgPSByYXdfbGluZSgkbGluZW5yLCAkY29uZF9saW5lcyk7CisJCQkJJHN0YXRfcmVhbCA9IHJhd19saW5lKCRsaW5lbnIsICRjb25kX2xpbmVzKQorCQkJCQkJCS4gIlxuIiBpZiAoJGNvbmRfbGluZXMpOwogCQkJCWlmIChkZWZpbmVkKCRzdGF0X3JlYWwpICYmICRjb25kX2xpbmVzID4gMSkgewogCQkJCQkkc3RhdF9yZWFsID0gIlsuLi5dXG4kc3RhdF9yZWFsIjsKIAkJCQl9CkBAIC0yMzQ4LDYgKzIzNzIsOCBAQAogCQkJCURFQ0xBUkVfUEVSX0NQVXwKIAkJCQlERUZJTkVfUEVSX0NQVXwKIAkJCQlfX3R5cGVvZl9fXCh8CisJCQkJdW5pb258CisJCQkJc3RydWN0fAogCQkJCVwuJElkZW50XHMqPVxzKnwKIAkJCQleXCJ8XCIkCiAJCQl9eDsKQEAgLTI1NzIsNiArMjU5OCwxMSBAQAogCQkJV0FSTigicGxhaW4gaW5saW5lIGlzIHByZWZlcnJlZCBvdmVyICQxXG4iIC4gJGhlcmVjdXJyKTsKIAkJfQogCisjIGNoZWNrIGZvciBzaXplb2YoJikKKwkJaWYgKCRsaW5lID1+IC9cYnNpemVvZlxzKlwoXHMqXCYvKSB7CisJCQlXQVJOKCJzaXplb2YoJiBzaG91bGQgYmUgYXZvaWRlZFxuIiAuICRoZXJlY3Vycik7CisJCX0KKwogIyBjaGVjayBmb3IgbmV3IGV4dGVybnMgaW4gLmMgZmlsZXMuCiAJCWlmICgkcmVhbGZpbGUgPX4gL1wuYyQvICYmIGRlZmluZWQgJHN0YXQgJiYKIAkJICAgICRzdGF0ID1+IC9eLlxzKig/OmV4dGVyblxzKyk/JFR5cGVccysoJElkZW50KShccyopXCgvcykKQEAgLTI2MzQsOSArMjY2NSw0NiBAQAogCQlpZiAoJGxpbmUgPX4gL14uXHMqX19pbml0Y2FsbFxzKlwoLykgewogCQkJV0FSTigicGxlYXNlIHVzZSBkZXZpY2VfaW5pdGNhbGwoKSBpbnN0ZWFkIG9mIF9faW5pdGNhbGwoKVxuIiAuICRoZXJlY3Vycik7CiAJCX0KLSMgY2hlY2sgZm9yIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMsIGVuc3VyZSB0aGV5IGFyZSBjb25zdC4KKyMgY2hlY2sgZm9yIHZhcmlvdXMgb3BzIHN0cnVjdHMsIGVuc3VyZSB0aGV5IGFyZSBjb25zdC4KKwkJbXkgJHN0cnVjdF9vcHMgPSBxcnthY3BpX2RvY2tfb3BzfAorCQkJCWFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9uc3wKKwkJCQliYWNrbGlnaHRfb3BzfAorCQkJCWJsb2NrX2RldmljZV9vcGVyYXRpb25zfAorCQkJCWRlbnRyeV9vcGVyYXRpb25zfAorCQkJCWRldl9wbV9vcHN8CisJCQkJZG1hX21hcF9vcHN8CisJCQkJZXh0ZW50X2lvX29wc3wKKwkJCQlmaWxlX2xvY2tfb3BlcmF0aW9uc3wKKwkJCQlmaWxlX29wZXJhdGlvbnN8CisJCQkJaHZfb3BzfAorCQkJCWlkZV9kbWFfb3BzfAorCQkJCWludGVsX2R2b19kZXZfb3BzfAorCQkJCWl0ZW1fb3BlcmF0aW9uc3wKKwkJCQlpd2xfb3BzfAorCQkJCWtnZGJfYXJjaHwKKwkJCQlrZ2RiX2lvfAorCQkJCWtzZXRfdWV2ZW50X29wc3wKKwkJCQlsb2NrX21hbmFnZXJfb3BlcmF0aW9uc3wKKwkJCQltaWNyb2NvZGVfb3BzfAorCQkJCW10cnJfb3BzfAorCQkJCW5laWdoX29wc3wKKwkJCQlubG1zdmNfYmluZGluZ3wKKwkJCQlwY2lfcmF3X29wc3wKKwkJCQlwaXBlX2J1Zl9vcGVyYXRpb25zfAorCQkJCXBsYXRmb3JtX2hpYmVybmF0aW9uX29wc3wKKwkJCQlwbGF0Zm9ybV9zdXNwZW5kX29wc3wKKwkJCQlwcm90b19vcHN8CisJCQkJcnBjX3BpcGVfb3BzfAorCQkJCXNlcV9vcGVyYXRpb25zfAorCQkJCXNuZF9hYzk3X2J1aWxkX29wc3wKKwkJCQlzb2NfcGNtY2lhX3NvY2tldF9vcHN8CisJCQkJc3RhY2t0cmFjZV9vcHN8CisJCQkJc3lzZnNfb3BzfAorCQkJCXR0eV9vcGVyYXRpb25zfAorCQkJCXVzYl9tb25fb3BlcmF0aW9uc3wKKwkJCQl3ZF9vcHN9eDsKIAkJaWYgKCRsaW5lICF+IC9cYmNvbnN0XGIvICYmCi0JCSAgICAkbGluZSA9fiAvXGJzdHJ1Y3RccysoZmlsZV9vcGVyYXRpb25zfHNlcV9vcGVyYXRpb25zKVxiLykgeworCQkgICAgJGxpbmUgPX4gL1xic3RydWN0XHMrKCRzdHJ1Y3Rfb3BzKVxiLykgewogCQkJV0FSTigic3RydWN0ICQxIHNob3VsZCBub3JtYWxseSBiZSBjb25zdFxuIiAuCiAJCQkJJGhlcmVjdXJyKTsKIAkJfQpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbCBiL3NjcmlwdHMvZ2V0X21haW50YWluZXIucGwKaW5kZXggMmYzMjMwZC4uZjc2ZjNkMSAxMDA3NTUKLS0tIGEvc2NyaXB0cy9nZXRfbWFpbnRhaW5lci5wbAorKysgYi9zY3JpcHRzL2dldF9tYWludGFpbmVyLnBsCkBAIC00MSw2ICs0MSw4IEBACiBteSAkc3Vic3lzdGVtID0gMDsKIG15ICRzdGF0dXMgPSAwOwogbXkgJGtleXdvcmRzID0gMTsKK215ICRzZWN0aW9ucyA9IDA7CitteSAkZmlsZV9lbWFpbHMgPSAwOwogbXkgJGZyb21fZmlsZW5hbWUgPSAwOwogbXkgJHBhdHRlcm5fZGVwdGggPSAwOwogbXkgJHZlcnNpb24gPSAwOwpAQCAtMTIwLDkgKzEyMiwxMSBAQAogCQknd2ViIScgPT4gXCR3ZWIsCiAJCSdwYXR0ZXJuLWRlcHRoPWknID0+IFwkcGF0dGVybl9kZXB0aCwKIAkJJ2t8a2V5d29yZHMhJyA9PiBcJGtleXdvcmRzLAorCQknc2VjdGlvbnMhJyA9PiBcJHNlY3Rpb25zLAorCQknZmV8ZmlsZS1lbWFpbHMhJyA9PiBcJGZpbGVfZW1haWxzLAogCQknZnxmaWxlJyA9PiBcJGZyb21fZmlsZW5hbWUsCiAJCSd2fHZlcnNpb24nID0+IFwkdmVyc2lvbiwKLQkJJ2h8aGVscCcgPT4gXCRoZWxwLAorCQknaHxoZWxwfHVzYWdlJyA9PiBcJGhlbHAsCiAJCSkpIHsKICAgICBkaWUgIiRQOiBpbnZhbGlkIGFyZ3VtZW50IC0gdXNlIC0taGVscCBpZiBuZWNlc3NhcnlcbiI7CiB9CkBAIC0xMzcsOSArMTQxLDkgQEAKICAgICBleGl0IDA7CiB9CiAKLWlmICgkI0FSR1YgPCAwKSB7Ci0gICAgdXNhZ2UoKTsKLSAgICBkaWUgIiRQOiBhcmd1bWVudCBtaXNzaW5nOiBwYXRjaGZpbGUgb3IgLWYgZmlsZSBwbGVhc2VcbiI7CitpZiAoLXQgU1RESU4gJiYgIUBBUkdWKSB7CisgICAgIyBXZSdyZSB0YWxraW5nIHRvIGEgdGVybWluYWwsIGJ1dCBoYXZlIG5vIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuCisgICAgZGllICIkUDogbWlzc2luZyBwYXRjaGZpbGUgb3IgLWYgZmlsZSAtIHVzZSAtLWhlbHAgaWYgbmVjZXNzYXJ5XG4iOwogfQogCiBpZiAoJG91dHB1dF9zZXBhcmF0b3IgbmUgIiwgIikgewpAQCAtMTUwLDE2ICsxNTQsMjQgQEAKICAgICAkb3V0cHV0X3JvbGVzID0gMTsKIH0KIAotbXkgJHNlbGVjdGlvbnMgPSAkZW1haWwgKyAkc2NtICsgJHN0YXR1cyArICRzdWJzeXN0ZW0gKyAkd2ViOwotaWYgKCRzZWxlY3Rpb25zID09IDApIHsKLSAgICB1c2FnZSgpOwotICAgIGRpZSAiJFA6ICBNaXNzaW5nIHJlcXVpcmVkIG9wdGlvbjogZW1haWwsIHNjbSwgc3RhdHVzLCBzdWJzeXN0ZW0gb3Igd2ViXG4iOworaWYgKCRzZWN0aW9ucykgeworICAgICRlbWFpbCA9IDA7CisgICAgJGVtYWlsX2xpc3QgPSAwOworICAgICRzY20gPSAwOworICAgICRzdGF0dXMgPSAwOworICAgICRzdWJzeXN0ZW0gPSAwOworICAgICR3ZWIgPSAwOworICAgICRrZXl3b3JkcyA9IDA7Cit9IGVsc2UgeworICAgIG15ICRzZWxlY3Rpb25zID0gJGVtYWlsICsgJHNjbSArICRzdGF0dXMgKyAkc3Vic3lzdGVtICsgJHdlYjsKKyAgICBpZiAoJHNlbGVjdGlvbnMgPT0gMCkgeworCWRpZSAiJFA6ICBNaXNzaW5nIHJlcXVpcmVkIG9wdGlvbjogZW1haWwsIHNjbSwgc3RhdHVzLCBzdWJzeXN0ZW0gb3Igd2ViXG4iOworICAgIH0KIH0KIAogaWYgKCRlbWFpbCAmJgogICAgICgkZW1haWxfbWFpbnRhaW5lciArICRlbWFpbF9saXN0ICsgJGVtYWlsX3N1YnNjcmliZXJfbGlzdCArCiAgICAgICRlbWFpbF9naXQgKyAkZW1haWxfZ2l0X3Blbmd1aW5fY2hpZWZzICsgJGVtYWlsX2dpdF9ibGFtZSkgPT0gMCkgewotICAgIHVzYWdlKCk7CiAgICAgZGllICIkUDogUGxlYXNlIHNlbGVjdCBhdCBsZWFzdCAxIGVtYWlsIG9wdGlvblxuIjsKIH0KIApAQCAtMTczLDggKzE4NSw5IEBACiBteSBAdHlwZXZhbHVlID0gKCk7CiBteSAla2V5d29yZF9oYXNoOwogCi1vcGVuKE1BSU5ULCAiPCR7bGtfcGF0aH1NQUlOVEFJTkVSUyIpIHx8IGRpZSAiJFA6IENhbid0IG9wZW4gTUFJTlRBSU5FUlNcbiI7Ci13aGlsZSAoPE1BSU5UPikgeworb3BlbiAobXkgJG1haW50LCAnPCcsICIke2xrX3BhdGh9TUFJTlRBSU5FUlMiKQorICAgIG9yIGRpZSAiJFA6IENhbid0IG9wZW4gTUFJTlRBSU5FUlM6ICQhXG4iOword2hpbGUgKDwkbWFpbnQ+KSB7CiAgICAgbXkgJGxpbmUgPSAkXzsKIAogICAgIGlmICgkbGluZSA9fiBtL14oXEMpOlxzKiguKikvKSB7CkBAIC0xOTksMTMgKzIxMiwxNCBAQAogCXB1c2goQHR5cGV2YWx1ZSwgJGxpbmUpOwogICAgIH0KIH0KLWNsb3NlKE1BSU5UKTsKK2Nsb3NlKCRtYWludCk7CiAKIG15ICVtYWlsbWFwOwogCiBpZiAoJGVtYWlsX3JlbW92ZV9kdXBsaWNhdGVzKSB7Ci0gICAgb3BlbihNQUlMTUFQLCAiPCR7bGtfcGF0aH0ubWFpbG1hcCIpIHx8IHdhcm4gIiRQOiBDYW4ndCBvcGVuIC5tYWlsbWFwXG4iOwotICAgIHdoaWxlICg8TUFJTE1BUD4pIHsKKyAgICBvcGVuKG15ICRtYWlsbWFwLCAnPCcsICIke2xrX3BhdGh9Lm1haWxtYXAiKQorCW9yIHdhcm4gIiRQOiBDYW4ndCBvcGVuIC5tYWlsbWFwOiAkIVxuIjsKKyAgICB3aGlsZSAoPCRtYWlsbWFwPikgewogCW15ICRsaW5lID0gJF87CiAKIAluZXh0IGlmICgkbGluZSA9fiBtL15ccyojLyk7CkBAIC0yMjQsNyArMjM4LDcgQEAKIAkgICAgJG1haWxtYXB7JG5hbWV9ID0gXEBhcnI7CiAJfQogICAgIH0KLSAgICBjbG9zZShNQUlMTUFQKTsKKyAgICBjbG9zZSgkbWFpbG1hcCk7CiB9CiAKICMjIHVzZSB0aGUgZmlsZW5hbWVzIG9uIHRoZSBjb21tYW5kIGxpbmUgb3IgZmluZCB0aGUgZmlsZW5hbWVzIGluIHRoZSBwYXRjaGZpbGVzCkBAIC0yMzIsMzEgKzI0Niw0NyBAQAogbXkgQGZpbGVzID0gKCk7CiBteSBAcmFuZ2UgPSAoKTsKIG15IEBrZXl3b3JkX3R2aSA9ICgpOworbXkgQGZpbGVfZW1haWxzID0gKCk7CisKK2lmICghQEFSR1YpIHsKKyAgICBwdXNoKEBBUkdWLCAiJlNURElOIik7Cit9CiAKIGZvcmVhY2ggbXkgJGZpbGUgKEBBUkdWKSB7Ci0gICAgIyNpZiAkZmlsZSBpcyBhIGRpcmVjdG9yeSBhbmQgaXQgbGFja3MgYSB0cmFpbGluZyBzbGFzaCwgYWRkIG9uZQotICAgIGlmICgoLWQgJGZpbGUpKSB7Ci0JJGZpbGUgPX4gc0AoW14vXSkkQCQxL0A7Ci0gICAgfSBlbHNpZiAoISgtZiAkZmlsZSkpIHsKLQlkaWUgIiRQOiBmaWxlICcke2ZpbGV9JyBub3QgZm91bmRcbiI7CisgICAgaWYgKCRmaWxlIG5lICImU1RESU4iKSB7CisJIyNpZiAkZmlsZSBpcyBhIGRpcmVjdG9yeSBhbmQgaXQgbGFja3MgYSB0cmFpbGluZyBzbGFzaCwgYWRkIG9uZQorCWlmICgoLWQgJGZpbGUpKSB7CisJICAgICRmaWxlID1+IHNAKFteL10pJEAkMS9AOworCX0gZWxzaWYgKCEoLWYgJGZpbGUpKSB7CisJICAgIGRpZSAiJFA6IGZpbGUgJyR7ZmlsZX0nIG5vdCBmb3VuZFxuIjsKKwl9CiAgICAgfQogICAgIGlmICgkZnJvbV9maWxlbmFtZSkgewogCXB1c2goQGZpbGVzLCAkZmlsZSk7Ci0JaWYgKC1mICRmaWxlICYmICRrZXl3b3JkcykgewotCSAgICBvcGVuKEZJTEUsICI8JGZpbGUiKSBvciBkaWUgIiRQOiBDYW4ndCBvcGVuICR7ZmlsZX1cbiI7Ci0JICAgIG15ICR0ZXh0ID0gZG8geyBsb2NhbCgkLykgOyA8RklMRT4gfTsKLQkgICAgZm9yZWFjaCBteSAkbGluZSAoa2V5cyAla2V5d29yZF9oYXNoKSB7Ci0JCWlmICgkdGV4dCA9fiBtLyRrZXl3b3JkX2hhc2h7JGxpbmV9L3gpIHsKLQkJICAgIHB1c2goQGtleXdvcmRfdHZpLCAkbGluZSk7CisJaWYgKC1mICRmaWxlICYmICgka2V5d29yZHMgfHwgJGZpbGVfZW1haWxzKSkgeworCSAgICBvcGVuKG15ICRmLCAnPCcsICRmaWxlKQorCQlvciBkaWUgIiRQOiBDYW4ndCBvcGVuICRmaWxlOiAkIVxuIjsKKwkgICAgbXkgJHRleHQgPSBkbyB7IGxvY2FsKCQvKSA7IDwkZj4gfTsKKwkgICAgY2xvc2UoJGYpOworCSAgICBpZiAoJGtleXdvcmRzKSB7CisJCWZvcmVhY2ggbXkgJGxpbmUgKGtleXMgJWtleXdvcmRfaGFzaCkgeworCQkgICAgaWYgKCR0ZXh0ID1+IG0vJGtleXdvcmRfaGFzaHskbGluZX0veCkgeworCQkJcHVzaChAa2V5d29yZF90dmksICRsaW5lKTsKKwkJICAgIH0KIAkJfQogCSAgICB9Ci0JICAgIGNsb3NlKEZJTEUpOworCSAgICBpZiAoJGZpbGVfZW1haWxzKSB7CisJCW15IEBwb3NzX2FkZHIgPSAkdGV4dCA9fiBtJFtBLVphLXrDgC3Dv1wiXCcgXCxcLlwrLV0qXHMqW1wsXSpccypbXChcPFx7XXswLDF9W0EtWmEtejAtOV9cLlwrLV0rXEBbQS1aYS16MC05XC4tXStcLltBLVphLXowLTldK1tcKVw+XH1dezAsMX0kZzsKKwkJcHVzaChAZmlsZV9lbWFpbHMsIGNsZWFuX2ZpbGVfZW1haWxzKEBwb3NzX2FkZHIpKTsKKwkgICAgfQogCX0KICAgICB9IGVsc2UgewogCW15ICRmaWxlX2NudCA9IEBmaWxlczsKIAlteSAkbGFzdGZpbGU7Ci0Jb3BlbihQQVRDSCwgIjwkZmlsZSIpIG9yIGRpZSAiJFA6IENhbid0IG9wZW4gJHtmaWxlfVxuIjsKLQl3aGlsZSAoPFBBVENIPikgeworCisJb3BlbihteSAkcGF0Y2gsICc8JywgJGZpbGUpCisJICAgIG9yIGRpZSAiJFA6IENhbid0IG9wZW4gJGZpbGU6ICQhXG4iOworCXdoaWxlICg8JHBhdGNoPikgewogCSAgICBteSAkcGF0Y2hfbGluZSA9ICRfOwogCSAgICBpZiAobS9eXCtcK1wrXHMrKFxTKykvKSB7CiAJCW15ICRmaWxlbmFtZSA9ICQxOwpAQCAtMjc2LDcgKzMwNiw4IEBACiAJCX0KIAkgICAgfQogCX0KLQljbG9zZShQQVRDSCk7CisJY2xvc2UoJHBhdGNoKTsKKwogCWlmICgkZmlsZV9jbnQgPT0gQGZpbGVzKSB7CiAJICAgIHdhcm4gIiRQOiBmaWxlICcke2ZpbGV9JyBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHBhdGNoLiAgIgogCQkuICJBZGQgLWYgdG8gb3B0aW9ucz9cbiI7CkBAIC0yODUsNiArMzE2LDggQEAKICAgICB9CiB9CiAKK0BmaWxlX2VtYWlscyA9IHVuaXEoQGZpbGVfZW1haWxzKTsKKwogbXkgQGVtYWlsX3RvID0gKCk7CiBteSBAbGlzdF90byA9ICgpOwogbXkgQHNjbSA9ICgpOwpAQCAtMzE0LDYgKzM0Nyw3IEBACiAJCWlmICgkdHlwZSBlcSAnWCcpIHsKIAkJICAgIGlmIChmaWxlX21hdGNoX3BhdHRlcm4oJGZpbGUsICR2YWx1ZSkpIHsKIAkJCSRleGNsdWRlID0gMTsKKwkJCWxhc3Q7CiAJCSAgICB9CiAJCX0KIAkgICAgfQpAQCAtMzQwLDEyICszNzQsMjggQEAKIAkgICAgfQogCX0KIAotCSR0dmkgKz0gKCRlbmQgLSAkc3RhcnQpOwotCisJJHR2aSA9ICRlbmQgKyAxOwogICAgIH0KIAogICAgIGZvcmVhY2ggbXkgJGxpbmUgKHNvcnQgeyRoYXNoeyRifSA8PT4gJGhhc2h7JGF9fSBrZXlzICVoYXNoKSB7CiAJYWRkX2NhdGVnb3JpZXMoJGxpbmUpOworCSAgICBpZiAoJHNlY3Rpb25zKSB7CisJCW15ICRpOworCQlteSAkc3RhcnQgPSBmaW5kX3N0YXJ0aW5nX2luZGV4KCRsaW5lKTsKKwkJbXkgJGVuZCA9IGZpbmRfZW5kaW5nX2luZGV4KCRsaW5lKTsKKwkJZm9yICgkaSA9ICRzdGFydDsgJGkgPCAkZW5kOyAkaSsrKSB7CisJCSAgICBteSAkbGluZSA9ICR0eXBldmFsdWVbJGldOworCQkgICAgaWYgKCRsaW5lID1+IC9eW0ZYXTovKSB7CQkjI1Jlc3RvcmUgZmlsZSBwYXR0ZXJucworCQkJJGxpbmUgPX4gcy8oW15cXF0pXC4oW15cKl0pLyQxXD8kMi9nOworCQkJJGxpbmUgPX4gcy8oW15cXF0pXC4kLyQxXD8vZzsJIyNDb252ZXJ0IC4gYmFjayB0byA/CisJCQkkbGluZSA9fiBzL1xcXC4vXC4vZzsgICAgICAgCSMjQ29udmVydCBcLiB0byAuCisJCQkkbGluZSA9fiBzL1wuXCovXCovZzsgICAgICAgCSMjQ29udmVydCAuKiB0byAqCisJCSAgICB9CisJCSAgICAkbGluZSA9fiBzL14oW0EtWl0pOi8kMTpcdC9nOworCQkgICAgcHJpbnQoIiRsaW5lXG4iKTsKKwkJfQorCQlwcmludCgiXG4iKTsKKwkgICAgfQogICAgIH0KIAogICAgIGlmICgkZW1haWwgJiYgJGVtYWlsX2dpdCkgewpAQCAtMzc3LDYgKzQyNywxNCBAQAogCSAgICB9CiAJfQogICAgIH0KKworICAgIGZvcmVhY2ggbXkgJGVtYWlsIChAZmlsZV9lbWFpbHMpIHsKKwlteSAoJG5hbWUsICRhZGRyZXNzKSA9IHBhcnNlX2VtYWlsKCRlbWFpbCk7CisKKwlteSAkdG1wX2VtYWlsID0gZm9ybWF0X2VtYWlsKCRuYW1lLCAkYWRkcmVzcywgJGVtYWlsX3VzZW5hbWUpOworCXB1c2hfZW1haWxfYWRkcmVzcygkdG1wX2VtYWlsLCAnJyk7CisJYWRkX3JvbGUoJHRtcF9lbWFpbCwgJ2luIGZpbGUnKTsKKyAgICB9CiB9CiAKIGlmICgkZW1haWwgfHwgJGVtYWlsX2xpc3QpIHsKQEAgLTQ1Myw2ICs1MTEsNyBAQAogICAgIC0tcmVtb3ZlLWR1cGxpY2F0ZXMgPT4gbWluaW1pemUgZHVwbGljYXRlIGVtYWlsIG5hbWVzL2FkZHJlc3NlcwogICAgIC0tcm9sZXMgPT4gc2hvdyByb2xlcyAoc3RhdHVzOnN1YnN5c3RlbSwgZ2l0LXNpZ25lciwgbGlzdCwgZXRjLi4uKQogICAgIC0tcm9sZXN0YXRzID0+IHNob3cgcm9sZXMgYW5kIHN0YXRpc3RpY3MgKGNvbW1pdHMvdG90YWxfY29tbWl0cywgJSkKKyAgICAtLWZpbGUtZW1haWxzID0+IGFkZCBlbWFpbCBhZGRyZXNzZXMgZm91bmQgaW4gLWYgZmlsZSAoZGVmYXVsdDogMCAob2ZmKSkKICAgLS1zY20gPT4gcHJpbnQgU0NNIHRyZWUocykgaWYgYW55CiAgIC0tc3RhdHVzID0+IHByaW50IHN0YXR1cyBpZiBhbnkKICAgLS1zdWJzeXN0ZW0gPT4gcHJpbnQgc3Vic3lzdGVtIG5hbWUgaWYgYW55CkBAIC00NjYsNiArNTI1LDcgQEAKIE90aGVyIG9wdGlvbnM6CiAgIC0tcGF0dGVybi1kZXB0aCA9PiBOdW1iZXIgb2YgcGF0dGVybiBkaXJlY3RvcnkgdHJhdmVyc2FscyAoZGVmYXVsdDogMCAoYWxsKSkKICAgLS1rZXl3b3JkcyA9PiBzY2FuIHBhdGNoIGZvciBrZXl3b3JkcyAoZGVmYXVsdDogMSAob24pKQorICAtLXNlY3Rpb25zID0+IHByaW50IHRoZSBlbnRpcmUgc3Vic3lzdGVtIHNlY3Rpb25zIHdpdGggcGF0dGVybiBtYXRjaGVzCiAgIC0tdmVyc2lvbiA9PiBzaG93IHZlcnNpb24KICAgLS1oZWxwID0+IHNob3cgdGhpcyBoZWxwIGluZm9ybWF0aW9uCiAKQEAgLTU0NSw3ICs2MDUsNyBAQAogICAgICRuYW1lID1+IHMvXlwifFwiJC8vZzsKICAgICAkYWRkcmVzcyA9fiBzL15ccyt8XHMrJC8vZzsKIAotICAgIGlmICgkbmFtZSA9fiAvW15hLXowLTkgXC5cLV0vaSkgeyAgICAjI2hhcyAibXVzdCBxdW90ZSIgY2hhcnMKKyAgICBpZiAoJG5hbWUgPX4gL1teXHcgXC1dL2kpIHsgIAkgIyNoYXMgIm11c3QgcXVvdGUiIGNoYXJzCiAJJG5hbWUgPX4gcy8oPzwhXFwpIi9cXCIvZzsgICAgICAgIyNlc2NhcGUgcXVvdGVzCiAJJG5hbWUgPSAiXCIkbmFtZVwiIjsKICAgICB9CkBAIC01NjIsNyArNjIyLDcgQEAKICAgICAkbmFtZSA9fiBzL15cInxcIiQvL2c7CiAgICAgJGFkZHJlc3MgPX4gcy9eXHMrfFxzKyQvL2c7CiAKLSAgICBpZiAoJG5hbWUgPX4gL1teYS16MC05IFwuXC1dL2kpIHsgICAgIyNoYXMgIm11c3QgcXVvdGUiIGNoYXJzCisgICAgaWYgKCRuYW1lID1+IC9bXlx3IFwtXS9pKSB7ICAgICAgICAgICMjaGFzICJtdXN0IHF1b3RlIiBjaGFycwogCSRuYW1lID1+IHMvKD88IVxcKSIvXFwiL2c7ICAgICAgICMjZXNjYXBlIHF1b3RlcwogCSRuYW1lID0gIlwiJG5hbWVcIiI7CiAgICAgfQpAQCAtODExLDcgKzg3MSw5IEBACiAgICAgZm9yZWFjaCBteSAkZW50cnkgKEBlbWFpbF90bykgewogCWlmICgkZW1haWxfcmVtb3ZlX2R1cGxpY2F0ZXMpIHsKIAkgICAgbXkgKCRlbnRyeV9uYW1lLCAkZW50cnlfYWRkcmVzcykgPSBwYXJzZV9lbWFpbCgkZW50cnktPlswXSk7Ci0JICAgIGlmICgkbmFtZSBlcSAkZW50cnlfbmFtZSB8fCAkYWRkcmVzcyBlcSAkZW50cnlfYWRkcmVzcykgeworCSAgICBpZiAoKCRuYW1lIGVxICRlbnRyeV9uYW1lIHx8ICRhZGRyZXNzIGVxICRlbnRyeV9hZGRyZXNzKQorCQkmJiAoJHJvbGUgZXEgIiIgfHwgISgkZW50cnktPlsxXSA9fiBtLyRyb2xlLykpCisJICAgICkgewogCQlpZiAoJGVudHJ5LT5bMV0gZXEgIiIpIHsKIAkJICAgICRlbnRyeS0+WzFdID0gIiRyb2xlIjsKIAkJfSBlbHNlIHsKQEAgLTgxOSw3ICs4ODEsOSBAQAogCQl9CiAJICAgIH0KIAl9IGVsc2UgewotCSAgICBpZiAoJGVtYWlsIGVxICRlbnRyeS0+WzBdKSB7CisJICAgIGlmICgkZW1haWwgZXEgJGVudHJ5LT5bMF0KKwkJJiYgKCRyb2xlIGVxICIiIHx8ICEoJGVudHJ5LT5bMV0gPX4gbS8kcm9sZS8pKQorCSAgICApIHsKIAkJaWYgKCRlbnRyeS0+WzFdIGVxICIiKSB7CiAJCSAgICAkZW50cnktPlsxXSA9ICIkcm9sZSI7CiAJCX0gZWxzZSB7CkBAIC0xMDk5LDYgKzExNjMsNTEgQEAKICAgICByZXR1cm4gQHBhcm1zOwogfQogCitzdWIgY2xlYW5fZmlsZV9lbWFpbHMgeworICAgIG15IChAZmlsZV9lbWFpbHMpID0gQF87CisgICAgbXkgQGZtdF9lbWFpbHMgPSAoKTsKKworICAgIGZvcmVhY2ggbXkgJGVtYWlsIChAZmlsZV9lbWFpbHMpIHsKKwkkZW1haWwgPX4gcy9bXChcPFx7XXswLDF9KFtBLVphLXowLTlfXC5cKy1dK1xAW0EtWmEtejAtOVwuLV0rKVtcKVw+XH1dezAsMX0vXDwkMVw+L2c7CisJbXkgKCRuYW1lLCAkYWRkcmVzcykgPSBwYXJzZV9lbWFpbCgkZW1haWwpOworCWlmICgkbmFtZSBlcSAnIlssXC5dIicpIHsKKwkgICAgJG5hbWUgPSAiIjsKKwl9CisKKwlteSBAbncgPSBzcGxpdCgvW15BLVphLXrDgC3Dv1wnXCxcLlwrLV0vLCAkbmFtZSk7CisJaWYgKEBudyA+IDIpIHsKKwkgICAgbXkgJGZpcnN0ID0gJG53W0BudyAtIDNdOworCSAgICBteSAkbWlkZGxlID0gJG53W0BudyAtIDJdOworCSAgICBteSAkbGFzdCA9ICRud1tAbncgLSAxXTsKKworCSAgICBpZiAoKChsZW5ndGgoJGZpcnN0KSA9PSAxICYmICRmaXJzdCA9fiBtL1tBLVphLXpdLykgfHwKKwkJIChsZW5ndGgoJGZpcnN0KSA9PSAyICYmIHN1YnN0cigkZmlyc3QsIC0xKSBlcSAiLiIpKSB8fAorCQkobGVuZ3RoKCRtaWRkbGUpID09IDEgfHwKKwkJIChsZW5ndGgoJG1pZGRsZSkgPT0gMiAmJiBzdWJzdHIoJG1pZGRsZSwgLTEpIGVxICIuIikpKSB7CisJCSRuYW1lID0gIiRmaXJzdCAkbWlkZGxlICRsYXN0IjsKKwkgICAgfSBlbHNlIHsKKwkJJG5hbWUgPSAiJG1pZGRsZSAkbGFzdCI7CisJICAgIH0KKwl9CisKKwlpZiAoc3Vic3RyKCRuYW1lLCAtMSkgPX4gL1ssXC5dLykgeworCSAgICAkbmFtZSA9IHN1YnN0cigkbmFtZSwgMCwgbGVuZ3RoKCRuYW1lKSAtIDEpOworCX0gZWxzaWYgKHN1YnN0cigkbmFtZSwgLTIpID1+IC9bLFwuXSIvKSB7CisJICAgICRuYW1lID0gc3Vic3RyKCRuYW1lLCAwLCBsZW5ndGgoJG5hbWUpIC0gMikgLiAnIic7CisJfQorCisJaWYgKHN1YnN0cigkbmFtZSwgMCwgMSkgPX4gL1ssXC5dLykgeworCSAgICAkbmFtZSA9IHN1YnN0cigkbmFtZSwgMSwgbGVuZ3RoKCRuYW1lKSAtIDEpOworCX0gZWxzaWYgKHN1YnN0cigkbmFtZSwgMCwgMikgPX4gLyJbLFwuXS8pIHsKKwkgICAgJG5hbWUgPSAnIicgLiBzdWJzdHIoJG5hbWUsIDIsIGxlbmd0aCgkbmFtZSkgLSAyKTsKKwl9CisKKwlteSAkZm10X2VtYWlsID0gZm9ybWF0X2VtYWlsKCRuYW1lLCAkYWRkcmVzcywgJGVtYWlsX3VzZW5hbWUpOworCXB1c2goQGZtdF9lbWFpbHMsICRmbXRfZW1haWwpOworICAgIH0KKyAgICByZXR1cm4gQGZtdF9lbWFpbHM7Cit9CisKIHN1YiBtZXJnZV9lbWFpbCB7CiAgICAgbXkgQGxpbmVzOwogICAgIG15ICVzYXc7CkBAIC0xMTgzLDcgKzEyOTIsNyBAQAogCiAjICAgdmFsaWQ6IHJldHVybnMgdHJ1ZSBpZiB0aGUgcGFyYW1ldGVyIGlzIGFuIFJGQzgyMiB2YWxpZCBhZGRyZXNzCiAjCi1zdWIgcmZjODIyX3ZhbGlkICgkKSB7CitzdWIgcmZjODIyX3ZhbGlkIHsKICAgICBteSAkcyA9IHJmYzgyMl9zdHJpcF9jb21tZW50cyhzaGlmdCk7CiAKICAgICBpZiAoISRyZmM4MjJyZSkgewpAQCAtMTIwMyw3ICsxMzEyLDcgQEAKICMgICAgICAgICAgICAgIGZyb20gc3VjY2VzcyB3aXRoIG5vIGFkZHJlc3NlcyBmb3VuZCwgYmVjYXVzZSBhbiBlbXB0eSBzdHJpbmcgaXMKICMgICAgICAgICAgICAgIGEgdmFsaWQgbGlzdC4KIAotc3ViIHJmYzgyMl92YWxpZGxpc3QgKCQpIHsKK3N1YiByZmM4MjJfdmFsaWRsaXN0IHsKICAgICBteSAkcyA9IHJmYzgyMl9zdHJpcF9jb21tZW50cyhzaGlmdCk7CiAKICAgICBpZiAoISRyZmM4MjJyZSkgewpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9nZnAtdHJhbnNsYXRlIGIvc2NyaXB0cy9nZnAtdHJhbnNsYXRlCmluZGV4IDA3M2NiNmQuLmQ4MWI5NjggMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvZ2ZwLXRyYW5zbGF0ZQorKysgYi9zY3JpcHRzL2dmcC10cmFuc2xhdGUKQEAgLTE5LDcgKzE5LDcgQEAKIAlleGl0IDAKIH0KIAotIyBQYXJzZSBjb21tYW5kLWxpbmUgYXJndWVtZW50cworIyBQYXJzZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzCiB3aGlsZSBbICQjIC1ndCAwIF07IGRvCiAJY2FzZSAkMSBpbgogCQktLXNvdXJjZSkKZGlmZiAtLWdpdCBhL3NjcmlwdHMva2VybmVsLWRvYyBiL3NjcmlwdHMva2VybmVsLWRvYwppbmRleCAyMDhhZDNiLi5jNzg2NWMzIDEwMDc1NQotLS0gYS9zY3JpcHRzL2tlcm5lbC1kb2MKKysrIGIvc2NyaXB0cy9rZXJuZWwtZG9jCkBAIC0yMTAzLDcgKzIxMDMsNyBAQAogCQkkc2VjdGlvbiA9ICRuZXdzZWN0aW9uOwogCSAgICB9IGVsc2lmICgvJGRvY19lbmQvKSB7CiAKLQkJaWYgKCRjb250ZW50cyBuZSAiIikgeworCQlpZiAoKCRjb250ZW50cyBuZSAiIikgJiYgKCRjb250ZW50cyBuZSAiXG4iKSkgewogCQkgICAgZHVtcF9zZWN0aW9uKCRmaWxlLCAkc2VjdGlvbiwgeG1sX2VzY2FwZSgkY29udGVudHMpKTsKIAkJICAgICRzZWN0aW9uID0gJHNlY3Rpb25fZGVmYXVsdDsKIAkJICAgICRjb250ZW50cyA9ICIiOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvY2FwYWJpbGl0eS5jIGIvc2VjdXJpdHkvY2FwYWJpbGl0eS5jCmluZGV4IDVjNzAwZTEuLjQ4NzUxNDIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2NhcGFiaWxpdHkuYworKysgYi9zZWN1cml0eS9jYXBhYmlsaXR5LmMKQEAgLTkwNiwxMCArOTA2LDYgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfQVVESVQgKi8KIAotc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgZGVmYXVsdF9zZWN1cml0eV9vcHMgPSB7Ci0JLm5hbWUJPSAiZGVmYXVsdCIsCi19OwotCiAjZGVmaW5lIHNldF90b19jYXBfaWZfbnVsbChvcHMsIGZ1bmN0aW9uKQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlpZiAoIW9wcy0+ZnVuY3Rpb24pIHsJCQkJCVwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2NvbW1vbmNhcC5jIGIvc2VjdXJpdHkvY29tbW9uY2FwLmMKaW5kZXggZjgwMGZkYi4uNjE2Njk3MyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvY29tbW9uY2FwLmMKKysrIGIvc2VjdXJpdHkvY29tbW9uY2FwLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L3ByY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJlYml0cy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2xvZy5oPgogCiAvKgogICogSWYgYSBub24tcm9vdCB1c2VyIGV4ZWN1dGVzIGEgc2V0dWlkLXJvb3QgYmluYXJ5IGluCkBAIC04ODgsMTMgKzg4OSwxNyBAQAogLyoqCiAgKiBjYXBfc3lzbG9nIC0gRGV0ZXJtaW5lIHdoZXRoZXIgc3lzbG9nIGZ1bmN0aW9uIGlzIHBlcm1pdHRlZAogICogQHR5cGU6IEZ1bmN0aW9uIHJlcXVlc3RlZAorICogQGZyb21fZmlsZTogV2hldGhlciB0aGlzIHJlcXVlc3QgY2FtZSBmcm9tIGFuIG9wZW4gZmlsZSAoaS5lLiAvcHJvYykKICAqCiAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgY3VycmVudCBwcm9jZXNzIGlzIHBlcm1pdHRlZCB0byB1c2UgYSBwYXJ0aWN1bGFyCiAgKiBzeXNsb2cgZnVuY3Rpb24sIHJldHVybmluZyAwIGlmIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCwgLXZlIGlmIG5vdC4KICAqLwotaW50IGNhcF9zeXNsb2coaW50IHR5cGUpCitpbnQgY2FwX3N5c2xvZyhpbnQgdHlwZSwgYm9vbCBmcm9tX2ZpbGUpCiB7Ci0JaWYgKCh0eXBlICE9IDMgJiYgdHlwZSAhPSAxMCkgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCisJaWYgKHR5cGUgIT0gU1lTTE9HX0FDVElPTl9PUEVOICYmIGZyb21fZmlsZSkKKwkJcmV0dXJuIDA7CisJaWYgKCh0eXBlICE9IFNZU0xPR19BQ1RJT05fUkVBRF9BTEwgJiYKKwkgICAgIHR5cGUgIT0gU1lTTE9HX0FDVElPTl9TSVpFX0JVRkZFUikgJiYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCiAJCXJldHVybiAtRVBFUk07CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWN1cml0eS5jIGIvc2VjdXJpdHkvc2VjdXJpdHkuYwppbmRleCAxMjJiNzQ4Li42ODdjNmZkIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWN1cml0eS5jCisrKyBiL3NlY3VyaXR5L3NlY3VyaXR5LmMKQEAgLTIzLDEwICsyMywxMiBAQAogCUNPTkZJR19ERUZBVUxUX1NFQ1VSSVRZOwogCiAvKiB0aGluZ3MgdGhhdCBsaXZlIGluIGNhcGFiaWxpdHkuYyAqLwotZXh0ZXJuIHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zIGRlZmF1bHRfc2VjdXJpdHlfb3BzOwogZXh0ZXJuIHZvaWQgc2VjdXJpdHlfZml4dXBfb3BzKHN0cnVjdCBzZWN1cml0eV9vcGVyYXRpb25zICpvcHMpOwogCi1zdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyAqc2VjdXJpdHlfb3BzOwkvKiBJbml0aWFsaXplZCB0byBOVUxMICovCitzdGF0aWMgc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgKnNlY3VyaXR5X29wczsKK3N0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyBkZWZhdWx0X3NlY3VyaXR5X29wcyA9IHsKKwkubmFtZQk9ICJkZWZhdWx0IiwKK307CiAKIHN0YXRpYyBpbmxpbmUgaW50IHZlcmlmeShzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyAqb3BzKQogewpAQCAtNjMsNiArNjUsMTEgQEAKIAlyZXR1cm4gMDsKIH0KIAordm9pZCByZXNldF9zZWN1cml0eV9vcHModm9pZCkKK3sKKwlzZWN1cml0eV9vcHMgPSAmZGVmYXVsdF9zZWN1cml0eV9vcHM7Cit9CisKIC8qIFNhdmUgdXNlciBjaG9zZW4gTFNNICovCiBzdGF0aWMgaW50IF9faW5pdCBjaG9vc2VfbHNtKGNoYXIgKnN0cikKIHsKQEAgLTIwMyw5ICsyMTAsOSBAQAogCXJldHVybiBzZWN1cml0eV9vcHMtPnF1b3RhX29uKGRlbnRyeSk7CiB9CiAKLWludCBzZWN1cml0eV9zeXNsb2coaW50IHR5cGUpCitpbnQgc2VjdXJpdHlfc3lzbG9nKGludCB0eXBlLCBib29sIGZyb21fZmlsZSkKIHsKLQlyZXR1cm4gc2VjdXJpdHlfb3BzLT5zeXNsb2codHlwZSk7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+c3lzbG9nKHR5cGUsIGZyb21fZmlsZSk7CiB9CiAKIGludCBzZWN1cml0eV9zZXR0aW1lKHN0cnVjdCB0aW1lc3BlYyAqdHMsIHN0cnVjdCB0aW1lem9uZSAqdHopCkBAIC0zODksNDIgKzM5Niw0MiBAQAogRVhQT1JUX1NZTUJPTChzZWN1cml0eV9pbm9kZV9pbml0X3NlY3VyaXR5KTsKIAogI2lmZGVmIENPTkZJR19TRUNVUklUWV9QQVRICi1pbnQgc2VjdXJpdHlfcGF0aF9ta25vZChzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSwKK2ludCBzZWN1cml0eV9wYXRoX21rbm9kKHN0cnVjdCBwYXRoICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUsCiAJCQl1bnNpZ25lZCBpbnQgZGV2KQogewotCWlmICh1bmxpa2VseShJU19QUklWQVRFKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZSkpKQorCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpci0+ZGVudHJ5LT5kX2lub2RlKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBzZWN1cml0eV9vcHMtPnBhdGhfbWtub2QocGF0aCwgZGVudHJ5LCBtb2RlLCBkZXYpOworCXJldHVybiBzZWN1cml0eV9vcHMtPnBhdGhfbWtub2QoZGlyLCBkZW50cnksIG1vZGUsIGRldik7CiB9CiBFWFBPUlRfU1lNQk9MKHNlY3VyaXR5X3BhdGhfbWtub2QpOwogCi1pbnQgc2VjdXJpdHlfcGF0aF9ta2RpcihzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKK2ludCBzZWN1cml0eV9wYXRoX21rZGlyKHN0cnVjdCBwYXRoICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCiB7Ci0JaWYgKHVubGlrZWx5KElTX1BSSVZBVEUocGF0aC0+ZGVudHJ5LT5kX2lub2RlKSkpCisJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyLT5kZW50cnktPmRfaW5vZGUpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIHNlY3VyaXR5X29wcy0+cGF0aF9ta2RpcihwYXRoLCBkZW50cnksIG1vZGUpOworCXJldHVybiBzZWN1cml0eV9vcHMtPnBhdGhfbWtkaXIoZGlyLCBkZW50cnksIG1vZGUpOwogfQogCi1pbnQgc2VjdXJpdHlfcGF0aF9ybWRpcihzdHJ1Y3QgcGF0aCAqcGF0aCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoraW50IHNlY3VyaXR5X3BhdGhfcm1kaXIoc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCWlmICh1bmxpa2VseShJU19QUklWQVRFKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZSkpKQorCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpci0+ZGVudHJ5LT5kX2lub2RlKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBzZWN1cml0eV9vcHMtPnBhdGhfcm1kaXIocGF0aCwgZGVudHJ5KTsKKwlyZXR1cm4gc2VjdXJpdHlfb3BzLT5wYXRoX3JtZGlyKGRpciwgZGVudHJ5KTsKIH0KIAotaW50IHNlY3VyaXR5X3BhdGhfdW5saW5rKHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCitpbnQgc2VjdXJpdHlfcGF0aF91bmxpbmsoc3RydWN0IHBhdGggKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQogewotCWlmICh1bmxpa2VseShJU19QUklWQVRFKHBhdGgtPmRlbnRyeS0+ZF9pbm9kZSkpKQorCWlmICh1bmxpa2VseShJU19QUklWQVRFKGRpci0+ZGVudHJ5LT5kX2lub2RlKSkpCiAJCXJldHVybiAwOwotCXJldHVybiBzZWN1cml0eV9vcHMtPnBhdGhfdW5saW5rKHBhdGgsIGRlbnRyeSk7CisJcmV0dXJuIHNlY3VyaXR5X29wcy0+cGF0aF91bmxpbmsoZGlyLCBkZW50cnkpOwogfQogCi1pbnQgc2VjdXJpdHlfcGF0aF9zeW1saW5rKHN0cnVjdCBwYXRoICpwYXRoLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCitpbnQgc2VjdXJpdHlfcGF0aF9zeW1saW5rKHN0cnVjdCBwYXRoICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSAgY29uc3QgY2hhciAqb2xkX25hbWUpCiB7Ci0JaWYgKHVubGlrZWx5KElTX1BSSVZBVEUocGF0aC0+ZGVudHJ5LT5kX2lub2RlKSkpCisJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoZGlyLT5kZW50cnktPmRfaW5vZGUpKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIHNlY3VyaXR5X29wcy0+cGF0aF9zeW1saW5rKHBhdGgsIGRlbnRyeSwgb2xkX25hbWUpOworCXJldHVybiBzZWN1cml0eV9vcHMtPnBhdGhfc3ltbGluayhkaXIsIGRlbnRyeSwgb2xkX25hbWUpOwogfQogCiBpbnQgc2VjdXJpdHlfcGF0aF9saW5rKHN0cnVjdCBkZW50cnkgKm9sZF9kZW50cnksIHN0cnVjdCBwYXRoICpuZXdfZGlyLApAQCAtNjMwLDE0ICs2MzcsMTQgQEAKIGludCBzZWN1cml0eV9pbm9kZV9nZXRzZWN1cml0eShjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICoqYnVmZmVyLCBib29sIGFsbG9jKQogewogCWlmICh1bmxpa2VseShJU19QUklWQVRFKGlub2RlKSkpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfZ2V0c2VjdXJpdHkoaW5vZGUsIG5hbWUsIGJ1ZmZlciwgYWxsb2MpOwogfQogCiBpbnQgc2VjdXJpdHlfaW5vZGVfc2V0c2VjdXJpdHkoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7CiAJaWYgKHVubGlrZWx5KElTX1BSSVZBVEUoaW5vZGUpKSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRU9QTk9UU1VQUDsKIAlyZXR1cm4gc2VjdXJpdHlfb3BzLT5pbm9kZV9zZXRzZWN1cml0eShpbm9kZSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKIH0KIApkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9hdmMuYyBiL3NlY3VyaXR5L3NlbGludXgvYXZjLmMKaW5kZXggZjJkZGUyNi4uOTg5ZmVmOCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9hdmMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2F2Yy5jCkBAIC0zMzcsNyArMzM3LDcgQEAKICAqIExvb2sgdXAgYW4gQVZDIGVudHJ5IHRoYXQgaXMgdmFsaWQgZm9yIHRoZQogICogKEBzc2lkLCBAdHNpZCksIGludGVycHJldGluZyB0aGUgcGVybWlzc2lvbnMKICAqIGJhc2VkIG9uIEB0Y2xhc3MuICBJZiBhIHZhbGlkIEFWQyBlbnRyeSBleGlzdHMsCi0gKiB0aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJuIHRoZSBhdmNfbm9kZS4KKyAqIHRoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBhdmNfbm9kZS4KICAqIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIE5VTEwuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgYXZjX25vZGUgKmF2Y19sb29rdXAodTMyIHNzaWQsIHUzMiB0c2lkLCB1MTYgdGNsYXNzKQpAQCAtNDg5LDE3ICs0ODksMTQgQEAKIAlzdHJ1Y3QgY29tbW9uX2F1ZGl0X2RhdGEgc3RhY2tfZGF0YTsKIAl1MzIgZGVuaWVkLCBhdWRpdGVkOwogCWRlbmllZCA9IHJlcXVlc3RlZCAmIH5hdmQtPmFsbG93ZWQ7Ci0JaWYgKGRlbmllZCkgewotCQlhdWRpdGVkID0gZGVuaWVkOwotCQlpZiAoIShhdWRpdGVkICYgYXZkLT5hdWRpdGRlbnkpKQotCQkJcmV0dXJuOwotCX0gZWxzZSBpZiAocmVzdWx0KSB7CisJaWYgKGRlbmllZCkKKwkJYXVkaXRlZCA9IGRlbmllZCAmIGF2ZC0+YXVkaXRkZW55OworCWVsc2UgaWYgKHJlc3VsdCkKIAkJYXVkaXRlZCA9IGRlbmllZCA9IHJlcXVlc3RlZDsKLQl9IGVsc2UgewotCQlhdWRpdGVkID0gcmVxdWVzdGVkOwotCQlpZiAoIShhdWRpdGVkICYgYXZkLT5hdWRpdGFsbG93KSkKLQkJCXJldHVybjsKLQl9CisJZWxzZQorCQlhdWRpdGVkID0gcmVxdWVzdGVkICYgYXZkLT5hdWRpdGFsbG93OworCWlmICghYXVkaXRlZCkKKwkJcmV0dXJuOwogCWlmICghYSkgewogCQlhID0gJnN0YWNrX2RhdGE7CiAJCW1lbXNldChhLCAwLCBzaXplb2YoKmEpKTsKQEAgLTUyNiw3ICs1MjMsNyBAQAogICogQHBlcm1zOiBwZXJtaXNzaW9ucwogICoKICAqIFJlZ2lzdGVyIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGV2ZW50cyBpbiB0aGUgc2V0IEBldmVudHMKLSAqIHJlbGF0ZWQgdG8gdGhlIFNJRCBwYWlyIChAc3NpZCwgQHRzaWQpIGFuZAorICogcmVsYXRlZCB0byB0aGUgU0lEIHBhaXIgKEBzc2lkLCBAdHNpZCkgCiAgKiBhbmQgdGhlIHBlcm1pc3Npb25zIEBwZXJtcywgaW50ZXJwcmV0aW5nCiAgKiBAcGVybXMgYmFzZWQgb24gQHRjbGFzcy4gIFJldHVybnMgJTAgb24gc3VjY2VzcyBvcgogICogLSVFTk9NRU0gaWYgaW5zdWZmaWNpZW50IG1lbW9yeSBleGlzdHMgdG8gYWRkIHRoZSBjYWxsYmFjay4KQEAgLTU3MSw3ICs1NjgsNyBAQAogICoKICAqIGlmIGEgdmFsaWQgQVZDIGVudHJ5IGRvZXNuJ3QgZXhpc3QsdGhpcyBmdW5jdGlvbiByZXR1cm5zIC1FTk9FTlQuCiAgKiBpZiBrbWFsbG9jKCkgY2FsbGVkIGludGVybmFsIHJldHVybnMgTlVMTCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIC1FTk9NRU0uCi0gKiBvdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gdXBkYXRlIHRoZSBBVkMgZW50cnkuIFRoZSBvcmlnaW5hbCBBVkMtZW50cnkgb2JqZWN0CisgKiBvdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgQVZDIGVudHJ5LiBUaGUgb3JpZ2luYWwgQVZDLWVudHJ5IG9iamVjdAogICogd2lsbCByZWxlYXNlIGxhdGVyIGJ5IFJDVS4KICAqLwogc3RhdGljIGludCBhdmNfdXBkYXRlX25vZGUodTMyIGV2ZW50LCB1MzIgcGVybXMsIHUzMiBzc2lkLCB1MzIgdHNpZCwgdTE2IHRjbGFzcywKQEAgLTc0Niw5ICs3NDMsNyBAQAogCQllbHNlCiAJCQlhdmQgPSAmYXZkX2VudHJ5OwogCi0JCXJjID0gc2VjdXJpdHlfY29tcHV0ZV9hdihzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcXVlc3RlZCwgYXZkKTsKLQkJaWYgKHJjKQotCQkJZ290byBvdXQ7CisJCXNlY3VyaXR5X2NvbXB1dGVfYXYoc3NpZCwgdHNpZCwgdGNsYXNzLCBhdmQpOwogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCW5vZGUgPSBhdmNfaW5zZXJ0KHNzaWQsIHRzaWQsIHRjbGFzcywgYXZkKTsKIAl9IGVsc2UgewpAQCAtNzcwLDcgKzc2NSw2IEBACiAJfQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7Ci1vdXQ6CiAJcmV0dXJuIHJjOwogfQogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKaW5kZXggOWEyZWU4NC4uNWZlZWNiNCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYwpAQCAtNzYsNiArNzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlbGludXguaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4LXRpbWVycy5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2xvZy5oPgogCiAjaW5jbHVkZSAiYXZjLmgiCiAjaW5jbHVkZSAib2Jqc2VjLmgiCkBAIC0xMjUsMTMgKzEyNiw2IEBACiBpbnQgc2VsaW51eF9lbmFibGVkID0gMTsKICNlbmRpZgogCi0KLS8qCi0gKiBNaW5pbWFsIHN1cHBvcnQgZm9yIGEgc2Vjb25kYXJ5IHNlY3VyaXR5IG1vZHVsZSwKLSAqIGp1c3QgdG8gYWxsb3cgdGhlIHVzZSBvZiB0aGUgY2FwYWJpbGl0eSBtb2R1bGUuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyAqc2Vjb25kYXJ5X29wczsKLQogLyogTGlzdHMgb2YgaW5vZGUgYW5kIHN1cGVyYmxvY2sgc2VjdXJpdHkgc3RydWN0dXJlcyBpbml0aWFsaXplZAogICAgYmVmb3JlIHRoZSBwb2xpY3kgd2FzIGxvYWRlZC4gKi8KIHN0YXRpYyBMSVNUX0hFQUQoc3VwZXJibG9ja19zZWN1cml0eV9oZWFkKTsKQEAgLTIwNDksMjkgKzIwNDMsMzAgQEAKIAlyZXR1cm4gZGVudHJ5X2hhc19wZXJtKGNyZWQsIE5VTEwsIGRlbnRyeSwgRklMRV9fUVVPVEFPTik7CiB9CiAKLXN0YXRpYyBpbnQgc2VsaW51eF9zeXNsb2coaW50IHR5cGUpCitzdGF0aWMgaW50IHNlbGludXhfc3lzbG9nKGludCB0eXBlLCBib29sIGZyb21fZmlsZSkKIHsKIAlpbnQgcmM7CiAKLQlyYyA9IGNhcF9zeXNsb2codHlwZSk7CisJcmMgPSBjYXBfc3lzbG9nKHR5cGUsIGZyb21fZmlsZSk7CiAJaWYgKHJjKQogCQlyZXR1cm4gcmM7CiAKIAlzd2l0Y2ggKHR5cGUpIHsKLQljYXNlIDM6CQkvKiBSZWFkIGxhc3Qga2VybmVsIG1lc3NhZ2VzICovCi0JY2FzZSAxMDoJLyogUmV0dXJuIHNpemUgb2YgdGhlIGxvZyBidWZmZXIgKi8KKwljYXNlIFNZU0xPR19BQ1RJT05fUkVBRF9BTEw6CS8qIFJlYWQgbGFzdCBrZXJuZWwgbWVzc2FnZXMgKi8KKwljYXNlIFNZU0xPR19BQ1RJT05fU0laRV9CVUZGRVI6CS8qIFJldHVybiBzaXplIG9mIHRoZSBsb2cgYnVmZmVyICovCiAJCXJjID0gdGFza19oYXNfc3lzdGVtKGN1cnJlbnQsIFNZU1RFTV9fU1lTTE9HX1JFQUQpOwogCQlicmVhazsKLQljYXNlIDY6CQkvKiBEaXNhYmxlIGxvZ2dpbmcgdG8gY29uc29sZSAqLwotCWNhc2UgNzoJCS8qIEVuYWJsZSBsb2dnaW5nIHRvIGNvbnNvbGUgKi8KLQljYXNlIDg6CQkvKiBTZXQgbGV2ZWwgb2YgbWVzc2FnZXMgcHJpbnRlZCB0byBjb25zb2xlICovCisJY2FzZSBTWVNMT0dfQUNUSU9OX0NPTlNPTEVfT0ZGOgkvKiBEaXNhYmxlIGxvZ2dpbmcgdG8gY29uc29sZSAqLworCWNhc2UgU1lTTE9HX0FDVElPTl9DT05TT0xFX09OOgkvKiBFbmFibGUgbG9nZ2luZyB0byBjb25zb2xlICovCisJLyogU2V0IGxldmVsIG9mIG1lc3NhZ2VzIHByaW50ZWQgdG8gY29uc29sZSAqLworCWNhc2UgU1lTTE9HX0FDVElPTl9DT05TT0xFX0xFVkVMOgogCQlyYyA9IHRhc2tfaGFzX3N5c3RlbShjdXJyZW50LCBTWVNURU1fX1NZU0xPR19DT05TT0xFKTsKIAkJYnJlYWs7Ci0JY2FzZSAwOgkJLyogQ2xvc2UgbG9nICovCi0JY2FzZSAxOgkJLyogT3BlbiBsb2cgKi8KLQljYXNlIDI6CQkvKiBSZWFkIGZyb20gbG9nICovCi0JY2FzZSA0OgkJLyogUmVhZC9jbGVhciBsYXN0IGtlcm5lbCBtZXNzYWdlcyAqLwotCWNhc2UgNToJCS8qIENsZWFyIHJpbmcgYnVmZmVyICovCisJY2FzZSBTWVNMT0dfQUNUSU9OX0NMT1NFOgkvKiBDbG9zZSBsb2cgKi8KKwljYXNlIFNZU0xPR19BQ1RJT05fT1BFTjoJLyogT3BlbiBsb2cgKi8KKwljYXNlIFNZU0xPR19BQ1RJT05fUkVBRDoJLyogUmVhZCBmcm9tIGxvZyAqLworCWNhc2UgU1lTTE9HX0FDVElPTl9SRUFEX0NMRUFSOgkvKiBSZWFkL2NsZWFyIGxhc3Qga2VybmVsIG1lc3NhZ2VzICovCisJY2FzZSBTWVNMT0dfQUNUSU9OX0NMRUFSOgkvKiBDbGVhciByaW5nIGJ1ZmZlciAqLwogCWRlZmF1bHQ6CiAJCXJjID0gdGFza19oYXNfc3lzdGVtKGN1cnJlbnQsIFNZU1RFTV9fU1lTTE9HX01PRCk7CiAJCWJyZWFrOwpAQCAtMzMzNCw3ICszMzI5LDcgQEAKIAogCWlmIChyZXQgPT0gMCkKIAkJdHNlYy0+Y3JlYXRlX3NpZCA9IGlzZWMtPnNpZDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHNlbGludXhfa2VybmVsX21vZHVsZV9yZXF1ZXN0KGNoYXIgKmttb2RfbmFtZSkKQEAgLTU2NzIsOSArNTY2Nyw2IEBACiAJCQkJCSAgICAwLCBTTEFCX1BBTklDLCBOVUxMKTsKIAlhdmNfaW5pdCgpOwogCi0Jc2Vjb25kYXJ5X29wcyA9IHNlY3VyaXR5X29wczsKLQlpZiAoIXNlY29uZGFyeV9vcHMpCi0JCXBhbmljKCJTRUxpbnV4OiBObyBpbml0aWFsIHNlY3VyaXR5IG9wZXJhdGlvbnNcbiIpOwogCWlmIChyZWdpc3Rlcl9zZWN1cml0eSgmc2VsaW51eF9vcHMpKQogCQlwYW5pYygiU0VMaW51eDogVW5hYmxlIHRvIHJlZ2lzdGVyIHdpdGgga2VybmVsLlxuIik7CiAKQEAgLTU4MzUsOCArNTgyNyw3IEBACiAJc2VsaW51eF9kaXNhYmxlZCA9IDE7CiAJc2VsaW51eF9lbmFibGVkID0gMDsKIAotCS8qIFJlc2V0IHNlY3VyaXR5X29wcyB0byB0aGUgc2Vjb25kYXJ5IG1vZHVsZSwgZHVtbXkgb3IgY2FwYWJpbGl0eS4gKi8KLQlzZWN1cml0eV9vcHMgPSBzZWNvbmRhcnlfb3BzOworCXJlc2V0X3NlY3VyaXR5X29wcygpOwogCiAJLyogVHJ5IHRvIGRlc3Ryb3kgdGhlIGF2YyBub2RlIGNhY2hlICovCiAJYXZjX2Rpc2FibGUoKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvaW5jbHVkZS9zZWN1cml0eS5oIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgKaW5kZXggMjU1MzI2Ni4uMWY3YzI0OSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9pbmNsdWRlL3NlY3VyaXR5LmgKQEAgLTU3LDcgKzU3LDYgQEAKIHN0cnVjdCBuZXRsYmxfbHNtX3NlY2F0dHI7CiAKIGV4dGVybiBpbnQgc2VsaW51eF9lbmFibGVkOwotZXh0ZXJuIGludCBzZWxpbnV4X21sc19lbmFibGVkOwogCiAvKiBQb2xpY3kgY2FwYWJpbGl0aWVzICovCiBlbnVtIHsKQEAgLTgwLDYgKzc5LDggQEAKIC8qIGxpbWl0YXRpb24gb2YgYm91bmRhcnkgZGVwdGggICovCiAjZGVmaW5lIFBPTElDWURCX0JPVU5EU19NQVhERVBUSAk0CiAKK2ludCBzZWN1cml0eV9tbHNfZW5hYmxlZCh2b2lkKTsKKwogaW50IHNlY3VyaXR5X2xvYWRfcG9saWN5KHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOwogCiBpbnQgc2VjdXJpdHlfcG9saWN5Y2FwX3N1cHBvcnRlZCh1bnNpZ25lZCBpbnQgcmVxX2NhcCk7CkBAIC05NiwxMyArOTcsMTEgQEAKIC8qIGRlZmluaXRpb25zIG9mIGF2X2RlY2lzaW9uLmZsYWdzICovCiAjZGVmaW5lIEFWRF9GTEFHU19QRVJNSVNTSVZFCTB4MDAwMQogCi1pbnQgc2VjdXJpdHlfY29tcHV0ZV9hdih1MzIgc3NpZCwgdTMyIHRzaWQsCi0JCQl1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLAotCQkJc3RydWN0IGF2X2RlY2lzaW9uICphdmQpOwordm9pZCBzZWN1cml0eV9jb21wdXRlX2F2KHUzMiBzc2lkLCB1MzIgdHNpZCwKKwkJCSB1MTYgdGNsYXNzLCBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCk7CiAKLWludCBzZWN1cml0eV9jb21wdXRlX2F2X3VzZXIodTMyIHNzaWQsIHUzMiB0c2lkLAotCQkJICAgICB1MTYgdGNsYXNzLCB1MzIgcmVxdWVzdGVkLAotCQkJICAgICBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCk7Cit2b2lkIHNlY3VyaXR5X2NvbXB1dGVfYXZfdXNlcih1MzIgc3NpZCwgdTMyIHRzaWQsCisJCQkgICAgIHUxNiB0Y2xhc3MsIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKTsKIAogaW50IHNlY3VyaXR5X3RyYW5zaXRpb25fc2lkKHUzMiBzc2lkLCB1MzIgdHNpZCwKIAkJCSAgICB1MTYgdGNsYXNzLCB1MzIgKm91dF9zaWQpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKaW5kZXggZmFiMzZmZC4uY2QxOTFiYiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCkBAIC0yODIsNyArMjgyLDggQEAKIAljaGFyIHRtcGJ1ZltUTVBCVUZMRU5dOwogCXNzaXplX3QgbGVuZ3RoOwogCi0JbGVuZ3RoID0gc2NucHJpbnRmKHRtcGJ1ZiwgVE1QQlVGTEVOLCAiJWQiLCBzZWxpbnV4X21sc19lbmFibGVkKTsKKwlsZW5ndGggPSBzY25wcmludGYodG1wYnVmLCBUTVBCVUZMRU4sICIlZCIsCisJCQkgICBzZWN1cml0eV9tbHNfZW5hYmxlZCgpKTsKIAlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcHBvcywgdG1wYnVmLCBsZW5ndGgpOwogfQogCkBAIC00OTQsNyArNDk1LDYgQEAKIAljaGFyICpzY29uLCAqdGNvbjsKIAl1MzIgc3NpZCwgdHNpZDsKIAl1MTYgdGNsYXNzOwotCXUzMiByZXE7CiAJc3RydWN0IGF2X2RlY2lzaW9uIGF2ZDsKIAlzc2l6ZV90IGxlbmd0aDsKIApAQCAtNTEyLDcgKzUxMiw3IEBACiAJCWdvdG8gb3V0OwogCiAJbGVuZ3RoID0gLUVJTlZBTDsKLQlpZiAoc3NjYW5mKGJ1ZiwgIiVzICVzICVodSAleCIsIHNjb24sIHRjb24sICZ0Y2xhc3MsICZyZXEpICE9IDQpCisJaWYgKHNzY2FuZihidWYsICIlcyAlcyAlaHUiLCBzY29uLCB0Y29uLCAmdGNsYXNzKSAhPSAzKQogCQlnb3RvIG91dDI7CiAKIAlsZW5ndGggPSBzZWN1cml0eV9jb250ZXh0X3RvX3NpZChzY29uLCBzdHJsZW4oc2NvbikrMSwgJnNzaWQpOwpAQCAtNTIyLDkgKzUyMiw3IEBACiAJaWYgKGxlbmd0aCA8IDApCiAJCWdvdG8gb3V0MjsKIAotCWxlbmd0aCA9IHNlY3VyaXR5X2NvbXB1dGVfYXZfdXNlcihzc2lkLCB0c2lkLCB0Y2xhc3MsIHJlcSwgJmF2ZCk7Ci0JaWYgKGxlbmd0aCA8IDApCi0JCWdvdG8gb3V0MjsKKwlzZWN1cml0eV9jb21wdXRlX2F2X3VzZXIoc3NpZCwgdHNpZCwgdGNsYXNzLCAmYXZkKTsKIAogCWxlbmd0aCA9IHNjbnByaW50ZihidWYsIFNJTVBMRV9UUkFOU0FDVElPTl9MSU1JVCwKIAkJCSAgIiV4ICV4ICV4ICV4ICV1ICV4IiwKQEAgLTk3OSw2ICs5NzcsOCBAQAogCXUzMiBzaWQ7CiAKIAkvKiByZW1vdmUgYW55IGV4aXN0aW5nIGZpbGVzICovCisJZm9yIChpID0gMDsgaSA8IGJvb2xfbnVtOyBpKyspCisJCWtmcmVlKGJvb2xfcGVuZGluZ19uYW1lc1tpXSk7CiAJa2ZyZWUoYm9vbF9wZW5kaW5nX25hbWVzKTsKIAlrZnJlZShib29sX3BlbmRpbmdfdmFsdWVzKTsKIAlib29sX3BlbmRpbmdfbmFtZXMgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9jb250ZXh0LmggYi9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbnRleHQuaAppbmRleCBkOWRkN2EyLi40NWU4ZmIwIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbnRleHQuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL2NvbnRleHQuaApAQCAtNDEsOSArNDEsNiBAQAogewogCWludCByYzsKIAotCWlmICghc2VsaW51eF9tbHNfZW5hYmxlZCkKLQkJcmV0dXJuIDA7Ci0KIAlkc3QtPnJhbmdlLmxldmVsWzBdLnNlbnMgPSBzcmMtPnJhbmdlLmxldmVsWzBdLnNlbnM7CiAJcmMgPSBlYml0bWFwX2NweSgmZHN0LT5yYW5nZS5sZXZlbFswXS5jYXQsICZzcmMtPnJhbmdlLmxldmVsWzBdLmNhdCk7CiAJaWYgKHJjKQpAQCAtNjQsOSArNjEsNiBAQAogewogCWludCByYzsKIAotCWlmICghc2VsaW51eF9tbHNfZW5hYmxlZCkKLQkJcmV0dXJuIDA7Ci0KIAlkc3QtPnJhbmdlLmxldmVsWzBdLnNlbnMgPSBzcmMtPnJhbmdlLmxldmVsWzBdLnNlbnM7CiAJcmMgPSBlYml0bWFwX2NweSgmZHN0LT5yYW5nZS5sZXZlbFswXS5jYXQsICZzcmMtPnJhbmdlLmxldmVsWzBdLmNhdCk7CiAJaWYgKHJjKQpAQCAtODIsOSArNzYsNiBAQAogCiBzdGF0aWMgaW5saW5lIGludCBtbHNfY29udGV4dF9jbXAoc3RydWN0IGNvbnRleHQgKmMxLCBzdHJ1Y3QgY29udGV4dCAqYzIpCiB7Ci0JaWYgKCFzZWxpbnV4X21sc19lbmFibGVkKQotCQlyZXR1cm4gMTsKLQogCXJldHVybiAoKGMxLT5yYW5nZS5sZXZlbFswXS5zZW5zID09IGMyLT5yYW5nZS5sZXZlbFswXS5zZW5zKSAmJgogCQllYml0bWFwX2NtcCgmYzEtPnJhbmdlLmxldmVsWzBdLmNhdCwgJmMyLT5yYW5nZS5sZXZlbFswXS5jYXQpICYmCiAJCShjMS0+cmFuZ2UubGV2ZWxbMV0uc2VucyA9PSBjMi0+cmFuZ2UubGV2ZWxbMV0uc2VucykgJiYKQEAgLTkzLDkgKzg0LDYgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIG1sc19jb250ZXh0X2Rlc3Ryb3koc3RydWN0IGNvbnRleHQgKmMpCiB7Ci0JaWYgKCFzZWxpbnV4X21sc19lbmFibGVkKQotCQlyZXR1cm47Ci0KIAllYml0bWFwX2Rlc3Ryb3koJmMtPnJhbmdlLmxldmVsWzBdLmNhdCk7CiAJZWJpdG1hcF9kZXN0cm95KCZjLT5yYW5nZS5sZXZlbFsxXS5jYXQpOwogCW1sc19jb250ZXh0X2luaXQoYyk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuYwppbmRleCAzZjJiMjcwLi4zNzJiNzczIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmMKQEAgLTM5LDcgKzM5LDcgQEAKIAlzdHJ1Y3QgZWJpdG1hcCAqZTsKIAlzdHJ1Y3QgZWJpdG1hcF9ub2RlICpub2RlOwogCi0JaWYgKCFzZWxpbnV4X21sc19lbmFibGVkKQorCWlmICghcG9saWN5ZGIubWxzX2VuYWJsZWQpCiAJCXJldHVybiAwOwogCiAJbGVuID0gMTsgLyogZm9yIHRoZSBiZWdpbm5pbmcgIjoiICovCkBAIC05Myw3ICs5Myw3IEBACiAJc3RydWN0IGViaXRtYXAgKmU7CiAJc3RydWN0IGViaXRtYXBfbm9kZSAqbm9kZTsKIAotCWlmICghc2VsaW51eF9tbHNfZW5hYmxlZCkKKwlpZiAoIXBvbGljeWRiLm1sc19lbmFibGVkKQogCQlyZXR1cm47CiAKIAlzY29udGV4dHAgPSAqc2NvbnRleHQ7CkBAIC0yMDAsNyArMjAwLDcgQEAKIHsKIAlzdHJ1Y3QgdXNlcl9kYXR1bSAqdXNyZGF0dW07CiAKLQlpZiAoIXNlbGludXhfbWxzX2VuYWJsZWQpCisJaWYgKCFwLT5tbHNfZW5hYmxlZCkKIAkJcmV0dXJuIDE7CiAKIAlpZiAoIW1sc19yYW5nZV9pc3ZhbGlkKHAsICZjLT5yYW5nZSkpCkBAIC0yNTMsNyArMjUzLDcgQEAKIAlzdHJ1Y3QgY2F0X2RhdHVtICpjYXRkYXR1bSwgKnJuZ2RhdHVtOwogCWludCBsLCByYyA9IC1FSU5WQUw7CiAKLQlpZiAoIXNlbGludXhfbWxzX2VuYWJsZWQpIHsKKwlpZiAoIXBvbC0+bWxzX2VuYWJsZWQpIHsKIAkJaWYgKGRlZl9zaWQgIT0gU0VDU0lEX05VTEwgJiYgb2xkYykKIAkJCSpzY29udGV4dCArPSBzdHJsZW4oKnNjb250ZXh0KSsxOwogCQlyZXR1cm4gMDsKQEAgLTM4Nyw3ICszODcsNyBAQAogCWNoYXIgKnRtcHN0ciwgKmZyZWVzdHI7CiAJaW50IHJjOwogCi0JaWYgKCFzZWxpbnV4X21sc19lbmFibGVkKQorCWlmICghcG9saWN5ZGIubWxzX2VuYWJsZWQpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogd2UgbmVlZCBmcmVlc3RyIGJlY2F1c2UgbWxzX2NvbnRleHRfdG9fc2lkIHdpbGwgY2hhbmdlCkBAIC00MDcsNyArNDA3LDcgQEAKIC8qCiAgKiBDb3BpZXMgdGhlIE1MUyByYW5nZSBgcmFuZ2UnIGludG8gYGNvbnRleHQnLgogICovCi1zdGF0aWMgaW5saW5lIGludCBtbHNfcmFuZ2Vfc2V0KHN0cnVjdCBjb250ZXh0ICpjb250ZXh0LAoraW50IG1sc19yYW5nZV9zZXQoc3RydWN0IGNvbnRleHQgKmNvbnRleHQsCiAJCQkJc3RydWN0IG1sc19yYW5nZSAqcmFuZ2UpCiB7CiAJaW50IGwsIHJjID0gMDsKQEAgLTQyNyw3ICs0MjcsNyBAQAogaW50IG1sc19zZXR1cF91c2VyX3JhbmdlKHN0cnVjdCBjb250ZXh0ICpmcm9tY29uLCBzdHJ1Y3QgdXNlcl9kYXR1bSAqdXNlciwKIAkJCSBzdHJ1Y3QgY29udGV4dCAqdXNlcmNvbikKIHsKLQlpZiAoc2VsaW51eF9tbHNfZW5hYmxlZCkgeworCWlmIChwb2xpY3lkYi5tbHNfZW5hYmxlZCkgewogCQlzdHJ1Y3QgbWxzX2xldmVsICpmcm9tY29uX3NlbiA9ICYoZnJvbWNvbi0+cmFuZ2UubGV2ZWxbMF0pOwogCQlzdHJ1Y3QgbWxzX2xldmVsICpmcm9tY29uX2NsciA9ICYoZnJvbWNvbi0+cmFuZ2UubGV2ZWxbMV0pOwogCQlzdHJ1Y3QgbWxzX2xldmVsICp1c2VyX2xvdyA9ICYodXNlci0+cmFuZ2UubGV2ZWxbMF0pOwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJc3RydWN0IGViaXRtYXBfbm9kZSAqbm9kZTsKIAlpbnQgbCwgaTsKIAotCWlmICghc2VsaW51eF9tbHNfZW5hYmxlZCkKKwlpZiAoIXBvbGljeWRiLm1sc19lbmFibGVkKQogCQlyZXR1cm4gMDsKIAogCWZvciAobCA9IDA7IGwgPCAyOyBsKyspIHsKQEAgLTUxMywyMyArNTEzLDIxIEBACiAJCSAgICB1MzIgc3BlY2lmaWVkLAogCQkgICAgc3RydWN0IGNvbnRleHQgKm5ld2NvbnRleHQpCiB7Ci0Jc3RydWN0IHJhbmdlX3RyYW5zICpydHI7CisJc3RydWN0IHJhbmdlX3RyYW5zIHJ0cjsKKwlzdHJ1Y3QgbWxzX3JhbmdlICpyOwogCi0JaWYgKCFzZWxpbnV4X21sc19lbmFibGVkKQorCWlmICghcG9saWN5ZGIubWxzX2VuYWJsZWQpCiAJCXJldHVybiAwOwogCiAJc3dpdGNoIChzcGVjaWZpZWQpIHsKIAljYXNlIEFWVEFCX1RSQU5TSVRJT046CiAJCS8qIExvb2sgZm9yIGEgcmFuZ2UgdHJhbnNpdGlvbiBydWxlLiAqLwotCQlmb3IgKHJ0ciA9IHBvbGljeWRiLnJhbmdlX3RyOyBydHI7IHJ0ciA9IHJ0ci0+bmV4dCkgewotCQkJaWYgKHJ0ci0+c291cmNlX3R5cGUgPT0gc2NvbnRleHQtPnR5cGUgJiYKLQkJCSAgICBydHItPnRhcmdldF90eXBlID09IHRjb250ZXh0LT50eXBlICYmCi0JCQkgICAgcnRyLT50YXJnZXRfY2xhc3MgPT0gdGNsYXNzKSB7Ci0JCQkJLyogU2V0IHRoZSByYW5nZSBmcm9tIHRoZSBydWxlICovCi0JCQkJcmV0dXJuIG1sc19yYW5nZV9zZXQobmV3Y29udGV4dCwKLQkJCQkJCSAgICAgJnJ0ci0+dGFyZ2V0X3JhbmdlKTsKLQkJCX0KLQkJfQorCQlydHIuc291cmNlX3R5cGUgPSBzY29udGV4dC0+dHlwZTsKKwkJcnRyLnRhcmdldF90eXBlID0gdGNvbnRleHQtPnR5cGU7CisJCXJ0ci50YXJnZXRfY2xhc3MgPSB0Y2xhc3M7CisJCXIgPSBoYXNodGFiX3NlYXJjaChwb2xpY3lkYi5yYW5nZV90ciwgJnJ0cik7CisJCWlmIChyKQorCQkJcmV0dXJuIG1sc19yYW5nZV9zZXQobmV3Y29udGV4dCwgcik7CiAJCS8qIEZhbGx0aHJvdWdoICovCiAJY2FzZSBBVlRBQl9DSEFOR0U6CiAJCWlmICh0Y2xhc3MgPT0gcG9saWN5ZGIucHJvY2Vzc19jbGFzcykKQEAgLTU0MSw4ICs1MzksOCBAQAogCWNhc2UgQVZUQUJfTUVNQkVSOgogCQkvKiBVc2UgdGhlIHByb2Nlc3MgZWZmZWN0aXZlIE1MUyBhdHRyaWJ1dGVzLiAqLwogCQlyZXR1cm4gbWxzX2NvbnRleHRfY3B5X2xvdyhuZXdjb250ZXh0LCBzY29udGV4dCk7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBmYWxsIHRocm91Z2ggKi8KIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC01NjEsNyArNTU5LDcgQEAKIHZvaWQgbWxzX2V4cG9ydF9uZXRsYmxfbHZsKHN0cnVjdCBjb250ZXh0ICpjb250ZXh0LAogCQkJICAgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKIHsKLQlpZiAoIXNlbGludXhfbWxzX2VuYWJsZWQpCisJaWYgKCFwb2xpY3lkYi5tbHNfZW5hYmxlZCkKIAkJcmV0dXJuOwogCiAJc2VjYXR0ci0+YXR0ci5tbHMubHZsID0gY29udGV4dC0+cmFuZ2UubGV2ZWxbMF0uc2VucyAtIDE7CkBAIC01ODEsNyArNTc5LDcgQEAKIHZvaWQgbWxzX2ltcG9ydF9uZXRsYmxfbHZsKHN0cnVjdCBjb250ZXh0ICpjb250ZXh0LAogCQkJICAgc3RydWN0IG5ldGxibF9sc21fc2VjYXR0ciAqc2VjYXR0cikKIHsKLQlpZiAoIXNlbGludXhfbWxzX2VuYWJsZWQpCisJaWYgKCFwb2xpY3lkYi5tbHNfZW5hYmxlZCkKIAkJcmV0dXJuOwogCiAJY29udGV4dC0+cmFuZ2UubGV2ZWxbMF0uc2VucyA9IHNlY2F0dHItPmF0dHIubWxzLmx2bCArIDE7CkBAIC02MDMsNyArNjAxLDcgQEAKIHsKIAlpbnQgcmM7CiAKLQlpZiAoIXNlbGludXhfbWxzX2VuYWJsZWQpCisJaWYgKCFwb2xpY3lkYi5tbHNfZW5hYmxlZCkKIAkJcmV0dXJuIDA7CiAKIAlyYyA9IGViaXRtYXBfbmV0bGJsX2V4cG9ydCgmY29udGV4dC0+cmFuZ2UubGV2ZWxbMF0uY2F0LApAQCAtNjMxLDcgKzYyOSw3IEBACiB7CiAJaW50IHJjOwogCi0JaWYgKCFzZWxpbnV4X21sc19lbmFibGVkKQorCWlmICghcG9saWN5ZGIubWxzX2VuYWJsZWQpCiAJCXJldHVybiAwOwogCiAJcmMgPSBlYml0bWFwX25ldGxibF9pbXBvcnQoJmNvbnRleHQtPnJhbmdlLmxldmVsWzBdLmNhdCwKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmggYi9zZWN1cml0eS9zZWxpbnV4L3NzL21scy5oCmluZGV4IDEyNzY3MTUuLmNkOTE1MjYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHMuaApAQCAtMzksNiArMzksOCBAQAogCiBpbnQgbWxzX2Zyb21fc3RyaW5nKGNoYXIgKnN0ciwgc3RydWN0IGNvbnRleHQgKmNvbnRleHQsIGdmcF90IGdmcF9tYXNrKTsKIAoraW50IG1sc19yYW5nZV9zZXQoc3RydWN0IGNvbnRleHQgKmNvbnRleHQsIHN0cnVjdCBtbHNfcmFuZ2UgKnJhbmdlKTsKKwogaW50IG1sc19jb252ZXJ0X2NvbnRleHQoc3RydWN0IHBvbGljeWRiICpvbGRwLAogCQkJc3RydWN0IHBvbGljeWRiICpuZXdwLAogCQkJc3RydWN0IGNvbnRleHQgKmNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHNfdHlwZXMuaCBiL3NlY3VyaXR5L3NlbGludXgvc3MvbWxzX3R5cGVzLmgKaW5kZXggYjZlOTQzYS4uMDNiZWQ1MiAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9tbHNfdHlwZXMuaAorKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL21sc190eXBlcy5oCkBAIC0xNSw2ICsxNSw3IEBACiAjZGVmaW5lIF9TU19NTFNfVFlQRVNfSF8KIAogI2luY2x1ZGUgInNlY3VyaXR5LmgiCisjaW5jbHVkZSAiZWJpdG1hcC5oIgogCiBzdHJ1Y3QgbWxzX2xldmVsIHsKIAl1MzIgc2VuczsJCS8qIHNlbnNpdGl2aXR5ICovCkBAIC0yNywxOCArMjgsMTIgQEAKIAogc3RhdGljIGlubGluZSBpbnQgbWxzX2xldmVsX2VxKHN0cnVjdCBtbHNfbGV2ZWwgKmwxLCBzdHJ1Y3QgbWxzX2xldmVsICpsMikKIHsKLQlpZiAoIXNlbGludXhfbWxzX2VuYWJsZWQpCi0JCXJldHVybiAxOwotCiAJcmV0dXJuICgobDEtPnNlbnMgPT0gbDItPnNlbnMpICYmCiAJCWViaXRtYXBfY21wKCZsMS0+Y2F0LCAmbDItPmNhdCkpOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBtbHNfbGV2ZWxfZG9tKHN0cnVjdCBtbHNfbGV2ZWwgKmwxLCBzdHJ1Y3QgbWxzX2xldmVsICpsMikKIHsKLQlpZiAoIXNlbGludXhfbWxzX2VuYWJsZWQpCi0JCXJldHVybiAxOwotCiAJcmV0dXJuICgobDEtPnNlbnMgPj0gbDItPnNlbnMpICYmCiAJCWViaXRtYXBfY29udGFpbnMoJmwxLT5jYXQsICZsMi0+Y2F0KSk7CiB9CmRpZmYgLS1naXQgYS9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmMKaW5kZXggZjAzNjY3Mi4uMjNjNmU1MyAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5jCisrKyBiL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuYwpAQCAtNTIsOCArNTIsNiBAQAogfTsKICNlbmRpZgogCi1pbnQgc2VsaW51eF9tbHNfZW5hYmxlZDsKLQogc3RhdGljIHVuc2lnbmVkIGludCBzeW10YWJfc2l6ZXNbU1lNX05VTV0gPSB7CiAJMiwKIAkzMiwKQEAgLTE3Nyw2ICsxNzUsMjEgQEAKIAlnb3RvIG91dDsKIH0KIAorc3RhdGljIHUzMiByYW5nZXRyX2hhc2goc3RydWN0IGhhc2h0YWIgKmgsIGNvbnN0IHZvaWQgKmspCit7CisJY29uc3Qgc3RydWN0IHJhbmdlX3RyYW5zICprZXkgPSBrOworCXJldHVybiAoa2V5LT5zb3VyY2VfdHlwZSArIChrZXktPnRhcmdldF90eXBlIDw8IDMpICsKKwkJKGtleS0+dGFyZ2V0X2NsYXNzIDw8IDUpKSAmIChoLT5zaXplIC0gMSk7Cit9CisKK3N0YXRpYyBpbnQgcmFuZ2V0cl9jbXAoc3RydWN0IGhhc2h0YWIgKmgsIGNvbnN0IHZvaWQgKmsxLCBjb25zdCB2b2lkICprMikKK3sKKwljb25zdCBzdHJ1Y3QgcmFuZ2VfdHJhbnMgKmtleTEgPSBrMSwgKmtleTIgPSBrMjsKKwlyZXR1cm4gKGtleTEtPnNvdXJjZV90eXBlICE9IGtleTItPnNvdXJjZV90eXBlIHx8CisJCWtleTEtPnRhcmdldF90eXBlICE9IGtleTItPnRhcmdldF90eXBlIHx8CisJCWtleTEtPnRhcmdldF9jbGFzcyAhPSBrZXkyLT50YXJnZXRfY2xhc3MpOworfQorCiAvKgogICogSW5pdGlhbGl6ZSBhIHBvbGljeSBkYXRhYmFzZSBzdHJ1Y3R1cmUuCiAgKi8KQEAgLTIwNCw2ICsyMTcsMTAgQEAKIAlpZiAocmMpCiAJCWdvdG8gb3V0X2ZyZWVfc3ltdGFiOwogCisJcC0+cmFuZ2VfdHIgPSBoYXNodGFiX2NyZWF0ZShyYW5nZXRyX2hhc2gsIHJhbmdldHJfY21wLCAyNTYpOworCWlmICghcC0+cmFuZ2VfdHIpCisJCWdvdG8gb3V0X2ZyZWVfc3ltdGFiOworCiAJZWJpdG1hcF9pbml0KCZwLT5wb2xpY3ljYXBzKTsKIAllYml0bWFwX2luaXQoJnAtPnBlcm1pc3NpdmVfbWFwKTsKIApAQCAtNDA4LDYgKzQyNSwyMCBAQAogCQkgICAgICAgaW5mby5zbG90c191c2VkLCBoLT5zaXplLCBpbmZvLm1heF9jaGFpbl9sZW4pOwogCX0KIH0KKworc3RhdGljIHZvaWQgcmFuZ2V0cl9oYXNoX2V2YWwoc3RydWN0IGhhc2h0YWIgKmgpCit7CisJc3RydWN0IGhhc2h0YWJfaW5mbyBpbmZvOworCisJaGFzaHRhYl9zdGF0KGgsICZpbmZvKTsKKwlwcmludGsoS0VSTl9ERUJVRyAiU0VMaW51eDogcmFuZ2V0cjogICVkIGVudHJpZXMgYW5kICVkLyVkIGJ1Y2tldHMgdXNlZCwgIgorCSAgICAgICAibG9uZ2VzdCBjaGFpbiBsZW5ndGggJWRcbiIsIGgtPm5lbCwKKwkgICAgICAgaW5mby5zbG90c191c2VkLCBoLT5zaXplLCBpbmZvLm1heF9jaGFpbl9sZW4pOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCByYW5nZXRyX2hhc2hfZXZhbChzdHJ1Y3QgaGFzaHRhYiAqaCkKK3sKK30KICNlbmRpZgogCiAvKgpAQCAtNDIyLDcgKzQ1Myw3IEBACiAKIAlwcmludGsoS0VSTl9ERUJVRyAiU0VMaW51eDogICVkIHVzZXJzLCAlZCByb2xlcywgJWQgdHlwZXMsICVkIGJvb2xzIiwKIAkgICAgICAgcC0+cF91c2Vycy5ucHJpbSwgcC0+cF9yb2xlcy5ucHJpbSwgcC0+cF90eXBlcy5ucHJpbSwgcC0+cF9ib29scy5ucHJpbSk7Ci0JaWYgKHNlbGludXhfbWxzX2VuYWJsZWQpCisJaWYgKHAtPm1sc19lbmFibGVkKQogCQlwcmludGsoIiwgJWQgc2VucywgJWQgY2F0cyIsIHAtPnBfbGV2ZWxzLm5wcmltLAogCQkgICAgICAgcC0+cF9jYXRzLm5wcmltKTsKIAlwcmludGsoIlxuIik7CkBAIC02MTIsNiArNjQzLDE3IEBACiAJY2F0X2Rlc3Ryb3ksCiB9OwogCitzdGF0aWMgaW50IHJhbmdlX3RyX2Rlc3Ryb3kodm9pZCAqa2V5LCB2b2lkICpkYXR1bSwgdm9pZCAqcCkKK3sKKwlzdHJ1Y3QgbWxzX3JhbmdlICpydCA9IGRhdHVtOworCWtmcmVlKGtleSk7CisJZWJpdG1hcF9kZXN0cm95KCZydC0+bGV2ZWxbMF0uY2F0KTsKKwllYml0bWFwX2Rlc3Ryb3koJnJ0LT5sZXZlbFsxXS5jYXQpOworCWtmcmVlKGRhdHVtKTsKKwljb25kX3Jlc2NoZWQoKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgb2NvbnRleHRfZGVzdHJveShzdHJ1Y3Qgb2NvbnRleHQgKmMsIGludCBpKQogewogCWNvbnRleHRfZGVzdHJveSgmYy0+Y29udGV4dFswXSk7CkBAIC02MzIsNyArNjc0LDYgQEAKIAlpbnQgaTsKIAlzdHJ1Y3Qgcm9sZV9hbGxvdyAqcmEsICpscmEgPSBOVUxMOwogCXN0cnVjdCByb2xlX3RyYW5zICp0ciwgKmx0ciA9IE5VTEw7Ci0Jc3RydWN0IHJhbmdlX3RyYW5zICpydCwgKmxydCA9IE5VTEw7CiAKIAlmb3IgKGkgPSAwOyBpIDwgU1lNX05VTTsgaSsrKSB7CiAJCWNvbmRfcmVzY2hlZCgpOwpAQCAtNjkzLDIwICs3MzQsOCBAQAogCX0KIAlrZnJlZShscmEpOwogCi0JZm9yIChydCA9IHAtPnJhbmdlX3RyOyBydDsgcnQgPSBydC0+bmV4dCkgewotCQljb25kX3Jlc2NoZWQoKTsKLQkJaWYgKGxydCkgewotCQkJZWJpdG1hcF9kZXN0cm95KCZscnQtPnRhcmdldF9yYW5nZS5sZXZlbFswXS5jYXQpOwotCQkJZWJpdG1hcF9kZXN0cm95KCZscnQtPnRhcmdldF9yYW5nZS5sZXZlbFsxXS5jYXQpOwotCQkJa2ZyZWUobHJ0KTsKLQkJfQotCQlscnQgPSBydDsKLQl9Ci0JaWYgKGxydCkgewotCQllYml0bWFwX2Rlc3Ryb3koJmxydC0+dGFyZ2V0X3JhbmdlLmxldmVsWzBdLmNhdCk7Ci0JCWViaXRtYXBfZGVzdHJveSgmbHJ0LT50YXJnZXRfcmFuZ2UubGV2ZWxbMV0uY2F0KTsKLQkJa2ZyZWUobHJ0KTsKLQl9CisJaGFzaHRhYl9tYXAocC0+cmFuZ2VfdHIsIHJhbmdlX3RyX2Rlc3Ryb3ksIE5VTEwpOworCWhhc2h0YWJfZGVzdHJveShwLT5yYW5nZV90cik7CiAKIAlpZiAocC0+dHlwZV9hdHRyX21hcCkgewogCQlmb3IgKGkgPSAwOyBpIDwgcC0+cF90eXBlcy5ucHJpbTsgaSsrKQpAQCAtMTY4NiwxMiArMTcxNSwxMSBAQAogCWludCBpLCBqLCByYzsKIAlfX2xlMzIgYnVmWzRdOwogCXUzMiBub2RlYnVmWzhdOwotCXUzMiBsZW4sIGxlbjIsIGNvbmZpZywgbnByaW0sIG5lbCwgbmVsMjsKKwl1MzIgbGVuLCBsZW4yLCBucHJpbSwgbmVsLCBuZWwyOwogCWNoYXIgKnBvbGljeWRiX3N0cjsKIAlzdHJ1Y3QgcG9saWN5ZGJfY29tcGF0X2luZm8gKmluZm87Ci0Jc3RydWN0IHJhbmdlX3RyYW5zICpydCwgKmxydDsKLQotCWNvbmZpZyA9IDA7CisJc3RydWN0IHJhbmdlX3RyYW5zICpydDsKKwlzdHJ1Y3QgbWxzX3JhbmdlICpyOwogCiAJcmMgPSBwb2xpY3lkYl9pbml0KHApOwogCWlmIChyYykKQEAgLTE3NDAsNyArMTc2OCw3IEBACiAJa2ZyZWUocG9saWN5ZGJfc3RyKTsKIAlwb2xpY3lkYl9zdHIgPSBOVUxMOwogCi0JLyogUmVhZCB0aGUgdmVyc2lvbiwgY29uZmlnLCBhbmQgdGFibGUgc2l6ZXMuICovCisJLyogUmVhZCB0aGUgdmVyc2lvbiBhbmQgdGFibGUgc2l6ZXMuICovCiAJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIHNpemVvZih1MzIpKjQpOwogCWlmIChyYyA8IDApCiAJCWdvdG8gYmFkOwpAQCAtMTc1NSwxMyArMTc4Myw3IEBACiAJfQogCiAJaWYgKChsZTMyX3RvX2NwdShidWZbMV0pICYgUE9MSUNZREJfQ09ORklHX01MUykpIHsKLQkJaWYgKHNzX2luaXRpYWxpemVkICYmICFzZWxpbnV4X21sc19lbmFibGVkKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IENhbm5vdCBzd2l0Y2ggYmV0d2VlbiBub24tTUxTIgotCQkJCSIgYW5kIE1MUyBwb2xpY2llc1xuIik7Ci0JCQlnb3RvIGJhZDsKLQkJfQotCQlzZWxpbnV4X21sc19lbmFibGVkID0gMTsKLQkJY29uZmlnIHw9IFBPTElDWURCX0NPTkZJR19NTFM7CisJCXAtPm1sc19lbmFibGVkID0gMTsKIAogCQlpZiAocC0+cG9saWN5dmVycyA8IFBPTElDWURCX1ZFUlNJT05fTUxTKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IHNlY3VyaXR5IHBvbGljeWRiIHZlcnNpb24gJWQgIgpAQCAtMTc2OSwxMiArMTc5MSw2IEBACiAJCQkJcC0+cG9saWN5dmVycyk7CiAJCQlnb3RvIGJhZDsKIAkJfQotCX0gZWxzZSB7Ci0JCWlmIChzc19pbml0aWFsaXplZCAmJiBzZWxpbnV4X21sc19lbmFibGVkKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6IENhbm5vdCBzd2l0Y2ggYmV0d2VlbiBNTFMgYW5kIgotCQkJCSIgbm9uLU1MUyBwb2xpY2llc1xuIik7Ci0JCQlnb3RvIGJhZDsKLQkJfQogCX0KIAlwLT5yZWplY3RfdW5rbm93biA9ICEhKGxlMzJfdG9fY3B1KGJ1ZlsxXSkgJiBSRUpFQ1RfVU5LTk9XTik7CiAJcC0+YWxsb3dfdW5rbm93biA9ICEhKGxlMzJfdG9fY3B1KGJ1ZlsxXSkgJiBBTExPV19VTktOT1dOKTsKQEAgLTIxMjIsNDQgKzIxMzgsNjEgQEAKIAkJaWYgKHJjIDwgMCkKIAkJCWdvdG8gYmFkOwogCQluZWwgPSBsZTMyX3RvX2NwdShidWZbMF0pOwotCQlscnQgPSBOVUxMOwogCQlmb3IgKGkgPSAwOyBpIDwgbmVsOyBpKyspIHsKIAkJCXJ0ID0ga3phbGxvYyhzaXplb2YoKnJ0KSwgR0ZQX0tFUk5FTCk7CiAJCQlpZiAoIXJ0KSB7CiAJCQkJcmMgPSAtRU5PTUVNOwogCQkJCWdvdG8gYmFkOwogCQkJfQotCQkJaWYgKGxydCkKLQkJCQlscnQtPm5leHQgPSBydDsKLQkJCWVsc2UKLQkJCQlwLT5yYW5nZV90ciA9IHJ0OwogCQkJcmMgPSBuZXh0X2VudHJ5KGJ1ZiwgZnAsIChzaXplb2YodTMyKSAqIDIpKTsKLQkJCWlmIChyYyA8IDApCisJCQlpZiAocmMgPCAwKSB7CisJCQkJa2ZyZWUocnQpOwogCQkJCWdvdG8gYmFkOworCQkJfQogCQkJcnQtPnNvdXJjZV90eXBlID0gbGUzMl90b19jcHUoYnVmWzBdKTsKIAkJCXJ0LT50YXJnZXRfdHlwZSA9IGxlMzJfdG9fY3B1KGJ1ZlsxXSk7CiAJCQlpZiAobmV3X3JhbmdldHIpIHsKIAkJCQlyYyA9IG5leHRfZW50cnkoYnVmLCBmcCwgc2l6ZW9mKHUzMikpOwotCQkJCWlmIChyYyA8IDApCisJCQkJaWYgKHJjIDwgMCkgeworCQkJCQlrZnJlZShydCk7CiAJCQkJCWdvdG8gYmFkOworCQkJCX0KIAkJCQlydC0+dGFyZ2V0X2NsYXNzID0gbGUzMl90b19jcHUoYnVmWzBdKTsKIAkJCX0gZWxzZQogCQkJCXJ0LT50YXJnZXRfY2xhc3MgPSBwLT5wcm9jZXNzX2NsYXNzOwogCQkJaWYgKCFwb2xpY3lkYl90eXBlX2lzdmFsaWQocCwgcnQtPnNvdXJjZV90eXBlKSB8fAogCQkJICAgICFwb2xpY3lkYl90eXBlX2lzdmFsaWQocCwgcnQtPnRhcmdldF90eXBlKSB8fAogCQkJICAgICFwb2xpY3lkYl9jbGFzc19pc3ZhbGlkKHAsIHJ0LT50YXJnZXRfY2xhc3MpKSB7CisJCQkJa2ZyZWUocnQpOwogCQkJCXJjID0gLUVJTlZBTDsKIAkJCQlnb3RvIGJhZDsKIAkJCX0KLQkJCXJjID0gbWxzX3JlYWRfcmFuZ2VfaGVscGVyKCZydC0+dGFyZ2V0X3JhbmdlLCBmcCk7Ci0JCQlpZiAocmMpCi0JCQkJZ290byBiYWQ7Ci0JCQlpZiAoIW1sc19yYW5nZV9pc3ZhbGlkKHAsICZydC0+dGFyZ2V0X3JhbmdlKSkgewotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlNFTGludXg6ICByYW5nZXRyYW5zOiAgaW52YWxpZCByYW5nZVxuIik7CisJCQlyID0ga3phbGxvYyhzaXplb2YoKnIpLCBHRlBfS0VSTkVMKTsKKwkJCWlmICghcikgeworCQkJCWtmcmVlKHJ0KTsKKwkJCQlyYyA9IC1FTk9NRU07CiAJCQkJZ290byBiYWQ7CiAJCQl9Ci0JCQlscnQgPSBydDsKKwkJCXJjID0gbWxzX3JlYWRfcmFuZ2VfaGVscGVyKHIsIGZwKTsKKwkJCWlmIChyYykgeworCQkJCWtmcmVlKHJ0KTsKKwkJCQlrZnJlZShyKTsKKwkJCQlnb3RvIGJhZDsKKwkJCX0KKwkJCWlmICghbWxzX3JhbmdlX2lzdmFsaWQocCwgcikpIHsKKwkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJTRUxpbnV4OiAgcmFuZ2V0cmFuczogIGludmFsaWQgcmFuZ2VcbiIpOworCQkJCWtmcmVlKHJ0KTsKKwkJCQlrZnJlZShyKTsKKwkJCQlnb3RvIGJhZDsKKwkJCX0KKwkJCXJjID0gaGFzaHRhYl9pbnNlcnQocC0+cmFuZ2VfdHIsIHJ0LCByKTsKKwkJCWlmIChyYykgeworCQkJCWtmcmVlKHJ0KTsKKwkJCQlrZnJlZShyKTsKKwkJCQlnb3RvIGJhZDsKKwkJCX0KIAkJfQorCQlyYW5nZXRyX2hhc2hfZXZhbChwLT5yYW5nZV90cik7CiAJfQogCiAJcC0+dHlwZV9hdHRyX21hcCA9IGttYWxsb2MocC0+cF90eXBlcy5ucHJpbSpzaXplb2Yoc3RydWN0IGViaXRtYXApLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuaCBiL3NlY3VyaXR5L3NlbGludXgvc3MvcG9saWN5ZGIuaAppbmRleCBjZGNjNTcwLi4yNmQ5YWRmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9zZWxpbnV4L3NzL3BvbGljeWRiLmgKKysrIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9wb2xpY3lkYi5oCkBAIC0yNyw2ICsyNyw4IEBACiAjaW5jbHVkZSAic3ltdGFiLmgiCiAjaW5jbHVkZSAiYXZ0YWIuaCIKICNpbmNsdWRlICJzaWR0YWIuaCIKKyNpbmNsdWRlICJlYml0bWFwLmgiCisjaW5jbHVkZSAibWxzX3R5cGVzLmgiCiAjaW5jbHVkZSAiY29udGV4dC5oIgogI2luY2x1ZGUgImNvbnN0cmFpbnQuaCIKIApAQCAtMTEzLDggKzExNSw2IEBACiAJdTMyIHNvdXJjZV90eXBlOwogCXUzMiB0YXJnZXRfdHlwZTsKIAl1MzIgdGFyZ2V0X2NsYXNzOwotCXN0cnVjdCBtbHNfcmFuZ2UgdGFyZ2V0X3JhbmdlOwotCXN0cnVjdCByYW5nZV90cmFucyAqbmV4dDsKIH07CiAKIC8qIEJvb2xlYW4gZGF0YSB0eXBlICovCkBAIC0xODcsNiArMTg3LDggQEAKIAogLyogVGhlIHBvbGljeSBkYXRhYmFzZSAqLwogc3RydWN0IHBvbGljeWRiIHsKKwlpbnQgbWxzX2VuYWJsZWQ7CisKIAkvKiBzeW1ib2wgdGFibGVzICovCiAJc3RydWN0IHN5bXRhYiBzeW10YWJbU1lNX05VTV07CiAjZGVmaW5lIHBfY29tbW9ucyBzeW10YWJbU1lNX0NPTU1PTlNdCkBAIC0yNDAsOCArMjQyLDggQEAKIAkgICBmaXhlZCBsYWJlbGluZyBiZWhhdmlvci4gKi8KIAlzdHJ1Y3QgZ2VuZnMgKmdlbmZzOwogCi0JLyogcmFuZ2UgdHJhbnNpdGlvbnMgKi8KLQlzdHJ1Y3QgcmFuZ2VfdHJhbnMgKnJhbmdlX3RyOworCS8qIHJhbmdlIHRyYW5zaXRpb25zIHRhYmxlIChyYW5nZV90cmFuc19rZXkgLT4gbWxzX3JhbmdlKSAqLworCXN0cnVjdCBoYXNodGFiICpyYW5nZV90cjsKIAogCS8qIHR5cGUgLT4gYXR0cmlidXRlIHJldmVyc2UgbWFwcGluZyAqLwogCXN0cnVjdCBlYml0bWFwICp0eXBlX2F0dHJfbWFwOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9zcy9zZXJ2aWNlcy5jCmluZGV4IGIzZWZhZTIuLmNmMjdiM2UgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvc3Mvc2VydmljZXMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NzL3NlcnZpY2VzLmMKQEAgLTI2LDYgKzI2LDEwIEBACiAgKgogICogIEFkZGVkIHN1cHBvcnQgZm9yIGJvdW5kcyBkb21haW4gYW5kIGF1ZGl0IG1lc3NhZ2VkIG9uIG1hc2tlZCBwZXJtaXNzaW9ucwogICoKKyAqIFVwZGF0ZWQ6IEd1aWRvIFRyZW50YWxhbmNpYSA8Z3VpZG9AdHJlbnRhbGFuY2lhLmNvbT4KKyAqCisgKiAgQWRkZWQgc3VwcG9ydCBmb3IgcnVudGltZSBzd2l0Y2hpbmcgb2YgdGhlIHBvbGljeSB0eXBlCisgKgogICogQ29weXJpZ2h0IChDKSAyMDA4LCAyMDA5IE5FQyBDb3Jwb3JhdGlvbgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55LCBMLlAuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBUcnVzdGVkIENvbXB1dGVyIFNvbHV0aW9ucywgSW5jLgpAQCAtODcsMTEgKzkxLDEwIEBACiBzdGF0aWMgaW50IGNvbnRleHRfc3RydWN0X3RvX3N0cmluZyhzdHJ1Y3QgY29udGV4dCAqY29udGV4dCwgY2hhciAqKnNjb250ZXh0LAogCQkJCSAgICB1MzIgKnNjb250ZXh0X2xlbik7CiAKLXN0YXRpYyBpbnQgY29udGV4dF9zdHJ1Y3RfY29tcHV0ZV9hdihzdHJ1Y3QgY29udGV4dCAqc2NvbnRleHQsCi0JCQkJICAgICBzdHJ1Y3QgY29udGV4dCAqdGNvbnRleHQsCi0JCQkJICAgICB1MTYgdGNsYXNzLAotCQkJCSAgICAgdTMyIHJlcXVlc3RlZCwKLQkJCQkgICAgIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKTsKK3N0YXRpYyB2b2lkIGNvbnRleHRfc3RydWN0X2NvbXB1dGVfYXYoc3RydWN0IGNvbnRleHQgKnNjb250ZXh0LAorCQkJCSAgICAgIHN0cnVjdCBjb250ZXh0ICp0Y29udGV4dCwKKwkJCQkgICAgICB1MTYgdGNsYXNzLAorCQkJCSAgICAgIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKTsKIAogc3RydWN0IHNlbGludXhfbWFwcGluZyB7CiAJdTE2IHZhbHVlOyAvKiBwb2xpY3kgdmFsdWUgKi8KQEAgLTE5NiwyMyArMTk5LDYgQEAKIAlyZXR1cm4gdGNsYXNzOwogfQogCi1zdGF0aWMgdTMyIHVubWFwX3Blcm0odTE2IHRjbGFzcywgdTMyIHRwZXJtKQotewotCWlmICh0Y2xhc3MgPCBjdXJyZW50X21hcHBpbmdfc2l6ZSkgewotCQl1bnNpZ25lZCBpOwotCQl1MzIga3Blcm0gPSAwOwotCi0JCWZvciAoaSA9IDA7IGkgPCBjdXJyZW50X21hcHBpbmdbdGNsYXNzXS5udW1fcGVybXM7IGkrKykKLQkJCWlmICh0cGVybSAmICgxPDxpKSkgewotCQkJCWtwZXJtIHw9IGN1cnJlbnRfbWFwcGluZ1t0Y2xhc3NdLnBlcm1zW2ldOwotCQkJCXRwZXJtICY9IH4oMTw8aSk7Ci0JCQl9Ci0JCXJldHVybiBrcGVybTsKLQl9Ci0KLQlyZXR1cm4gdHBlcm07Ci19Ci0KIHN0YXRpYyB2b2lkIG1hcF9kZWNpc2lvbih1MTYgdGNsYXNzLCBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCwKIAkJCSBpbnQgYWxsb3dfdW5rbm93bikKIHsKQEAgLTI1MCw2ICsyMzYsMTAgQEAKIAl9CiB9CiAKK2ludCBzZWN1cml0eV9tbHNfZW5hYmxlZCh2b2lkKQoreworCXJldHVybiBwb2xpY3lkYi5tbHNfZW5hYmxlZDsKK30KIAogLyoKICAqIFJldHVybiB0aGUgYm9vbGVhbiB2YWx1ZSBvZiBhIGNvbnN0cmFpbnQgZXhwcmVzc2lvbgpAQCAtNDY1LDcgKzQ1NSw4IEBACiAJY2hhciAqc2NvbnRleHRfbmFtZSA9IE5VTEw7CiAJY2hhciAqdGNvbnRleHRfbmFtZSA9IE5VTEw7CiAJY2hhciAqcGVybWlzc2lvbl9uYW1lc1szMl07Ci0JaW50IGluZGV4LCBsZW5ndGg7CisJaW50IGluZGV4OworCXUzMiBsZW5ndGg7CiAJYm9vbCBuZWVkX2NvbW1hID0gZmFsc2U7CiAKIAlpZiAoIXBlcm1pc3Npb25zKQpAQCAtNTMyLDcgKzUyMyw2IEBACiBzdGF0aWMgdm9pZCB0eXBlX2F0dHJpYnV0ZV9ib3VuZHNfYXYoc3RydWN0IGNvbnRleHQgKnNjb250ZXh0LAogCQkJCSAgICAgc3RydWN0IGNvbnRleHQgKnRjb250ZXh0LAogCQkJCSAgICAgdTE2IHRjbGFzcywKLQkJCQkgICAgIHUzMiByZXF1ZXN0ZWQsCiAJCQkJICAgICBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCkKIHsKIAlzdHJ1Y3QgY29udGV4dCBsb19zY29udGV4dDsKQEAgLTU1Myw3ICs1NDMsNiBAQAogCQljb250ZXh0X3N0cnVjdF9jb21wdXRlX2F2KCZsb19zY29udGV4dCwKIAkJCQkJICB0Y29udGV4dCwKIAkJCQkJICB0Y2xhc3MsCi0JCQkJCSAgcmVxdWVzdGVkLAogCQkJCQkgICZsb19hdmQpOwogCQlpZiAoKGxvX2F2ZC5hbGxvd2VkICYgYXZkLT5hbGxvd2VkKSA9PSBhdmQtPmFsbG93ZWQpCiAJCQlyZXR1cm47CQkvKiBubyBtYXNrZWQgcGVybWlzc2lvbiAqLwpAQCAtNTY5LDcgKzU1OCw2IEBACiAJCWNvbnRleHRfc3RydWN0X2NvbXB1dGVfYXYoc2NvbnRleHQsCiAJCQkJCSAgJmxvX3Rjb250ZXh0LAogCQkJCQkgIHRjbGFzcywKLQkJCQkJICByZXF1ZXN0ZWQsCiAJCQkJCSAgJmxvX2F2ZCk7CiAJCWlmICgobG9fYXZkLmFsbG93ZWQgJiBhdmQtPmFsbG93ZWQpID09IGF2ZC0+YWxsb3dlZCkKIAkJCXJldHVybjsJCS8qIG5vIG1hc2tlZCBwZXJtaXNzaW9uICovCkBAIC01ODYsNyArNTc0LDYgQEAKIAkJY29udGV4dF9zdHJ1Y3RfY29tcHV0ZV9hdigmbG9fc2NvbnRleHQsCiAJCQkJCSAgJmxvX3Rjb250ZXh0LAogCQkJCQkgIHRjbGFzcywKLQkJCQkJICByZXF1ZXN0ZWQsCiAJCQkJCSAgJmxvX2F2ZCk7CiAJCWlmICgobG9fYXZkLmFsbG93ZWQgJiBhdmQtPmFsbG93ZWQpID09IGF2ZC0+YWxsb3dlZCkKIAkJCXJldHVybjsJCS8qIG5vIG1hc2tlZCBwZXJtaXNzaW9uICovCkBAIC02MDcsMTEgKzU5NCwxMCBAQAogICogQ29tcHV0ZSBhY2Nlc3MgdmVjdG9ycyBiYXNlZCBvbiBhIGNvbnRleHQgc3RydWN0dXJlIHBhaXIgZm9yCiAgKiB0aGUgcGVybWlzc2lvbnMgaW4gYSBwYXJ0aWN1bGFyIGNsYXNzLgogICovCi1zdGF0aWMgaW50IGNvbnRleHRfc3RydWN0X2NvbXB1dGVfYXYoc3RydWN0IGNvbnRleHQgKnNjb250ZXh0LAotCQkJCSAgICAgc3RydWN0IGNvbnRleHQgKnRjb250ZXh0LAotCQkJCSAgICAgdTE2IHRjbGFzcywKLQkJCQkgICAgIHUzMiByZXF1ZXN0ZWQsCi0JCQkJICAgICBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCkKK3N0YXRpYyB2b2lkIGNvbnRleHRfc3RydWN0X2NvbXB1dGVfYXYoc3RydWN0IGNvbnRleHQgKnNjb250ZXh0LAorCQkJCSAgICAgIHN0cnVjdCBjb250ZXh0ICp0Y29udGV4dCwKKwkJCQkgICAgICB1MTYgdGNsYXNzLAorCQkJCSAgICAgIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKQogewogCXN0cnVjdCBjb25zdHJhaW50X25vZGUgKmNvbnN0cmFpbnQ7CiAJc3RydWN0IHJvbGVfYWxsb3cgKnJhOwpAQCAtNjIyLDE5ICs2MDgsMTQgQEAKIAlzdHJ1Y3QgZWJpdG1hcF9ub2RlICpzbm9kZSwgKnRub2RlOwogCXVuc2lnbmVkIGludCBpLCBqOwogCi0JLyoKLQkgKiBJbml0aWFsaXplIHRoZSBhY2Nlc3MgdmVjdG9ycyB0byB0aGUgZGVmYXVsdCB2YWx1ZXMuCi0JICovCiAJYXZkLT5hbGxvd2VkID0gMDsKIAlhdmQtPmF1ZGl0YWxsb3cgPSAwOwogCWF2ZC0+YXVkaXRkZW55ID0gMHhmZmZmZmZmZjsKLQlhdmQtPnNlcW5vID0gbGF0ZXN0X2dyYW50aW5nOwotCWF2ZC0+ZmxhZ3MgPSAwOwogCiAJaWYgKHVubGlrZWx5KCF0Y2xhc3MgfHwgdGNsYXNzID4gcG9saWN5ZGIucF9jbGFzc2VzLm5wcmltKSkgewogCQlpZiAocHJpbnRrX3JhdGVsaW1pdCgpKQogCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0VMaW51eDogIEludmFsaWQgY2xhc3MgJWh1XG4iLCB0Y2xhc3MpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkJcmV0dXJuOwogCX0KIAogCXRjbGFzc19kYXR1bSA9IHBvbGljeWRiLmNsYXNzX3ZhbF90b19zdHJ1Y3RbdGNsYXNzIC0gMV07CkBAIC03MDUsOSArNjg2LDcgQEAKIAkgKiBwZXJtaXNzaW9uIGFuZCBub3RpY2UgaXQgdG8gdXNlcnNwYWNlIHZpYSBhdWRpdC4KIAkgKi8KIAl0eXBlX2F0dHJpYnV0ZV9ib3VuZHNfYXYoc2NvbnRleHQsIHRjb250ZXh0LAotCQkJCSB0Y2xhc3MsIHJlcXVlc3RlZCwgYXZkKTsKLQotCXJldHVybiAwOworCQkJCSB0Y2xhc3MsIGF2ZCk7CiB9CiAKIHN0YXRpYyBpbnQgc2VjdXJpdHlfdmFsaWR0cmFuc19oYW5kbGVfZmFpbChzdHJ1Y3QgY29udGV4dCAqb2NvbnRleHQsCkBAIC04NjQsNyArODQzLDcgQEAKIAlpZiAocmMpIHsKIAkJY2hhciAqb2xkX25hbWUgPSBOVUxMOwogCQljaGFyICpuZXdfbmFtZSA9IE5VTEw7Ci0JCWludCBsZW5ndGg7CisJCXUzMiBsZW5ndGg7CiAKIAkJaWYgKCFjb250ZXh0X3N0cnVjdF90b19zdHJpbmcob2xkX2NvbnRleHQsCiAJCQkJCSAgICAgICZvbGRfbmFtZSwgJmxlbmd0aCkgJiYKQEAgLTg4NiwxMTAgKzg2NSwxMTYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLQotc3RhdGljIGludCBzZWN1cml0eV9jb21wdXRlX2F2X2NvcmUodTMyIHNzaWQsCi0JCQkJICAgIHUzMiB0c2lkLAotCQkJCSAgICB1MTYgdGNsYXNzLAotCQkJCSAgICB1MzIgcmVxdWVzdGVkLAotCQkJCSAgICBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCkKK3N0YXRpYyB2b2lkIGF2ZF9pbml0KHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKQogewotCXN0cnVjdCBjb250ZXh0ICpzY29udGV4dCA9IE5VTEwsICp0Y29udGV4dCA9IE5VTEw7Ci0JaW50IHJjID0gMDsKLQotCXNjb250ZXh0ID0gc2lkdGFiX3NlYXJjaCgmc2lkdGFiLCBzc2lkKTsKLQlpZiAoIXNjb250ZXh0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogJXM6ICB1bnJlY29nbml6ZWQgU0lEICVkXG4iLAotCQkgICAgICAgX19mdW5jX18sIHNzaWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JdGNvbnRleHQgPSBzaWR0YWJfc2VhcmNoKCZzaWR0YWIsIHRzaWQpOwotCWlmICghdGNvbnRleHQpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAlczogIHVucmVjb2duaXplZCBTSUQgJWRcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgdHNpZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJjID0gY29udGV4dF9zdHJ1Y3RfY29tcHV0ZV9hdihzY29udGV4dCwgdGNvbnRleHQsIHRjbGFzcywKLQkJCQkgICAgICAgcmVxdWVzdGVkLCBhdmQpOwotCi0JLyogcGVybWlzc2l2ZSBkb21haW4/ICovCi0JaWYgKGViaXRtYXBfZ2V0X2JpdCgmcG9saWN5ZGIucGVybWlzc2l2ZV9tYXAsIHNjb250ZXh0LT50eXBlKSkKLQkJYXZkLT5mbGFncyB8PSBBVkRfRkxBR1NfUEVSTUlTU0lWRTsKLQotCXJldHVybiByYzsKKwlhdmQtPmFsbG93ZWQgPSAwOworCWF2ZC0+YXVkaXRhbGxvdyA9IDA7CisJYXZkLT5hdWRpdGRlbnkgPSAweGZmZmZmZmZmOworCWF2ZC0+c2Vxbm8gPSBsYXRlc3RfZ3JhbnRpbmc7CisJYXZkLT5mbGFncyA9IDA7CiB9CiAKKwogLyoqCiAgKiBzZWN1cml0eV9jb21wdXRlX2F2IC0gQ29tcHV0ZSBhY2Nlc3MgdmVjdG9yIGRlY2lzaW9ucy4KICAqIEBzc2lkOiBzb3VyY2Ugc2VjdXJpdHkgaWRlbnRpZmllcgogICogQHRzaWQ6IHRhcmdldCBzZWN1cml0eSBpZGVudGlmaWVyCiAgKiBAdGNsYXNzOiB0YXJnZXQgc2VjdXJpdHkgY2xhc3MKLSAqIEByZXF1ZXN0ZWQ6IHJlcXVlc3RlZCBwZXJtaXNzaW9ucwogICogQGF2ZDogYWNjZXNzIHZlY3RvciBkZWNpc2lvbnMKICAqCiAgKiBDb21wdXRlIGEgc2V0IG9mIGFjY2VzcyB2ZWN0b3IgZGVjaXNpb25zIGJhc2VkIG9uIHRoZQogICogU0lEIHBhaXIgKEBzc2lkLCBAdHNpZCkgZm9yIHRoZSBwZXJtaXNzaW9ucyBpbiBAdGNsYXNzLgotICogUmV0dXJuIC0lRUlOVkFMIGlmIGFueSBvZiB0aGUgcGFyYW1ldGVycyBhcmUgaW52YWxpZCBvciAlMAotICogaWYgdGhlIGFjY2VzcyB2ZWN0b3IgZGVjaXNpb25zIHdlcmUgY29tcHV0ZWQgc3VjY2Vzc2Z1bGx5LgogICovCi1pbnQgc2VjdXJpdHlfY29tcHV0ZV9hdih1MzIgc3NpZCwKLQkJCXUzMiB0c2lkLAotCQkJdTE2IG9yaWdfdGNsYXNzLAotCQkJdTMyIG9yaWdfcmVxdWVzdGVkLAotCQkJc3RydWN0IGF2X2RlY2lzaW9uICphdmQpCit2b2lkIHNlY3VyaXR5X2NvbXB1dGVfYXYodTMyIHNzaWQsCisJCQkgdTMyIHRzaWQsCisJCQkgdTE2IG9yaWdfdGNsYXNzLAorCQkJIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKQogewogCXUxNiB0Y2xhc3M7Ci0JdTMyIHJlcXVlc3RlZDsKLQlpbnQgcmM7CisJc3RydWN0IGNvbnRleHQgKnNjb250ZXh0ID0gTlVMTCwgKnRjb250ZXh0ID0gTlVMTDsKIAogCXJlYWRfbG9jaygmcG9saWN5X3J3bG9jayk7Ci0KKwlhdmRfaW5pdChhdmQpOwogCWlmICghc3NfaW5pdGlhbGl6ZWQpCiAJCWdvdG8gYWxsb3c7CiAKLQlyZXF1ZXN0ZWQgPSB1bm1hcF9wZXJtKG9yaWdfdGNsYXNzLCBvcmlnX3JlcXVlc3RlZCk7CisJc2NvbnRleHQgPSBzaWR0YWJfc2VhcmNoKCZzaWR0YWIsIHNzaWQpOworCWlmICghc2NvbnRleHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAlczogIHVucmVjb2duaXplZCBTSUQgJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgc3NpZCk7CisJCWdvdG8gb3V0OworCX0KKworCS8qIHBlcm1pc3NpdmUgZG9tYWluPyAqLworCWlmIChlYml0bWFwX2dldF9iaXQoJnBvbGljeWRiLnBlcm1pc3NpdmVfbWFwLCBzY29udGV4dC0+dHlwZSkpCisJCWF2ZC0+ZmxhZ3MgfD0gQVZEX0ZMQUdTX1BFUk1JU1NJVkU7CisKKwl0Y29udGV4dCA9IHNpZHRhYl9zZWFyY2goJnNpZHRhYiwgdHNpZCk7CisJaWYgKCF0Y29udGV4dCkgeworCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICVzOiAgdW5yZWNvZ25pemVkIFNJRCAlZFxuIiwKKwkJICAgICAgIF9fZnVuY19fLCB0c2lkKTsKKwkJZ290byBvdXQ7CisJfQorCiAJdGNsYXNzID0gdW5tYXBfY2xhc3Mob3JpZ190Y2xhc3MpOwogCWlmICh1bmxpa2VseShvcmlnX3RjbGFzcyAmJiAhdGNsYXNzKSkgewogCQlpZiAocG9saWN5ZGIuYWxsb3dfdW5rbm93bikKIAkJCWdvdG8gYWxsb3c7Ci0JCXJjID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQotCXJjID0gc2VjdXJpdHlfY29tcHV0ZV9hdl9jb3JlKHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCBhdmQpOworCWNvbnRleHRfc3RydWN0X2NvbXB1dGVfYXYoc2NvbnRleHQsIHRjb250ZXh0LCB0Y2xhc3MsIGF2ZCk7CiAJbWFwX2RlY2lzaW9uKG9yaWdfdGNsYXNzLCBhdmQsIHBvbGljeWRiLmFsbG93X3Vua25vd24pOwogb3V0OgogCXJlYWRfdW5sb2NrKCZwb2xpY3lfcndsb2NrKTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuOwogYWxsb3c6CiAJYXZkLT5hbGxvd2VkID0gMHhmZmZmZmZmZjsKLQlhdmQtPmF1ZGl0YWxsb3cgPSAwOwotCWF2ZC0+YXVkaXRkZW55ID0gMHhmZmZmZmZmZjsKLQlhdmQtPnNlcW5vID0gbGF0ZXN0X2dyYW50aW5nOwotCWF2ZC0+ZmxhZ3MgPSAwOwotCXJjID0gMDsKIAlnb3RvIG91dDsKIH0KIAotaW50IHNlY3VyaXR5X2NvbXB1dGVfYXZfdXNlcih1MzIgc3NpZCwKLQkJCSAgICAgdTMyIHRzaWQsCi0JCQkgICAgIHUxNiB0Y2xhc3MsCi0JCQkgICAgIHUzMiByZXF1ZXN0ZWQsCi0JCQkgICAgIHN0cnVjdCBhdl9kZWNpc2lvbiAqYXZkKQordm9pZCBzZWN1cml0eV9jb21wdXRlX2F2X3VzZXIodTMyIHNzaWQsCisJCQkgICAgICB1MzIgdHNpZCwKKwkJCSAgICAgIHUxNiB0Y2xhc3MsCisJCQkgICAgICBzdHJ1Y3QgYXZfZGVjaXNpb24gKmF2ZCkKIHsKLQlpbnQgcmM7Ci0KLQlpZiAoIXNzX2luaXRpYWxpemVkKSB7Ci0JCWF2ZC0+YWxsb3dlZCA9IDB4ZmZmZmZmZmY7Ci0JCWF2ZC0+YXVkaXRhbGxvdyA9IDA7Ci0JCWF2ZC0+YXVkaXRkZW55ID0gMHhmZmZmZmZmZjsKLQkJYXZkLT5zZXFubyA9IGxhdGVzdF9ncmFudGluZzsKLQkJcmV0dXJuIDA7Ci0JfQorCXN0cnVjdCBjb250ZXh0ICpzY29udGV4dCA9IE5VTEwsICp0Y29udGV4dCA9IE5VTEw7CiAKIAlyZWFkX2xvY2soJnBvbGljeV9yd2xvY2spOwotCXJjID0gc2VjdXJpdHlfY29tcHV0ZV9hdl9jb3JlKHNzaWQsIHRzaWQsIHRjbGFzcywgcmVxdWVzdGVkLCBhdmQpOworCWF2ZF9pbml0KGF2ZCk7CisJaWYgKCFzc19pbml0aWFsaXplZCkKKwkJZ290byBhbGxvdzsKKworCXNjb250ZXh0ID0gc2lkdGFiX3NlYXJjaCgmc2lkdGFiLCBzc2lkKTsKKwlpZiAoIXNjb250ZXh0KSB7CisJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogJXM6ICB1bnJlY29nbml6ZWQgU0lEICVkXG4iLAorCQkgICAgICAgX19mdW5jX18sIHNzaWQpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBwZXJtaXNzaXZlIGRvbWFpbj8gKi8KKwlpZiAoZWJpdG1hcF9nZXRfYml0KCZwb2xpY3lkYi5wZXJtaXNzaXZlX21hcCwgc2NvbnRleHQtPnR5cGUpKQorCQlhdmQtPmZsYWdzIHw9IEFWRF9GTEFHU19QRVJNSVNTSVZFOworCisJdGNvbnRleHQgPSBzaWR0YWJfc2VhcmNoKCZzaWR0YWIsIHRzaWQpOworCWlmICghdGNvbnRleHQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJTRUxpbnV4OiAlczogIHVucmVjb2duaXplZCBTSUQgJWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXywgdHNpZCk7CisJCWdvdG8gb3V0OworCX0KKworCWlmICh1bmxpa2VseSghdGNsYXNzKSkgeworCQlpZiAocG9saWN5ZGIuYWxsb3dfdW5rbm93bikKKwkJCWdvdG8gYWxsb3c7CisJCWdvdG8gb3V0OworCX0KKworCWNvbnRleHRfc3RydWN0X2NvbXB1dGVfYXYoc2NvbnRleHQsIHRjb250ZXh0LCB0Y2xhc3MsIGF2ZCk7Cisgb3V0OgogCXJlYWRfdW5sb2NrKCZwb2xpY3lfcndsb2NrKTsKLQlyZXR1cm4gcmM7CisJcmV0dXJuOworYWxsb3c6CisJYXZkLT5hbGxvd2VkID0gMHhmZmZmZmZmZjsKKwlnb3RvIG91dDsKIH0KIAogLyoKQEAgLTE1NjUsNyArMTU1MCwxMCBAQAogewogCXN0cnVjdCBzaWR0YWIgKnMgPSBhcmc7CiAKLQlyZXR1cm4gc2lkdGFiX2luc2VydChzLCBzaWQsIGNvbnRleHQpOworCWlmIChzaWQgPiBTRUNJTklUU0lEX05VTSkKKwkJcmV0dXJuIHNpZHRhYl9pbnNlcnQocywgc2lkLCBjb250ZXh0KTsKKwllbHNlCisJCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBjb252ZXJ0X2NvbnRleHRfaGFuZGxlX2ludmFsaWRfY29udGV4dChzdHJ1Y3QgY29udGV4dCAqY29udGV4dCkKQEAgLTE2MDYsMTIgKzE1OTQsMTcgQEAKIHsKIAlzdHJ1Y3QgY29udmVydF9jb250ZXh0X2FyZ3MgKmFyZ3M7CiAJc3RydWN0IGNvbnRleHQgb2xkYzsKKwlzdHJ1Y3Qgb2NvbnRleHQgKm9jOworCXN0cnVjdCBtbHNfcmFuZ2UgKnJhbmdlOwogCXN0cnVjdCByb2xlX2RhdHVtICpyb2xlOwogCXN0cnVjdCB0eXBlX2RhdHVtICp0eXBkYXR1bTsKIAlzdHJ1Y3QgdXNlcl9kYXR1bSAqdXNyZGF0dW07CiAJY2hhciAqczsKIAl1MzIgbGVuOwotCWludCByYzsKKwlpbnQgcmMgPSAwOworCisJaWYgKGtleSA8PSBTRUNJTklUU0lEX05VTSkKKwkJZ290byBvdXQ7CiAKIAlhcmdzID0gcDsKIApAQCAtMTY3Myw5ICsxNjY2LDM5IEBACiAJCWdvdG8gYmFkOwogCWMtPnR5cGUgPSB0eXBkYXR1bS0+dmFsdWU7CiAKLQlyYyA9IG1sc19jb252ZXJ0X2NvbnRleHQoYXJncy0+b2xkcCwgYXJncy0+bmV3cCwgYyk7Ci0JaWYgKHJjKQotCQlnb3RvIGJhZDsKKwkvKiBDb252ZXJ0IHRoZSBNTFMgZmllbGRzIGlmIGRlYWxpbmcgd2l0aCBNTFMgcG9saWNpZXMgKi8KKwlpZiAoYXJncy0+b2xkcC0+bWxzX2VuYWJsZWQgJiYgYXJncy0+bmV3cC0+bWxzX2VuYWJsZWQpIHsKKwkJcmMgPSBtbHNfY29udmVydF9jb250ZXh0KGFyZ3MtPm9sZHAsIGFyZ3MtPm5ld3AsIGMpOworCQlpZiAocmMpCisJCQlnb3RvIGJhZDsKKwl9IGVsc2UgaWYgKGFyZ3MtPm9sZHAtPm1sc19lbmFibGVkICYmICFhcmdzLT5uZXdwLT5tbHNfZW5hYmxlZCkgeworCQkvKgorCQkgKiBTd2l0Y2hpbmcgYmV0d2VlbiBNTFMgYW5kIG5vbi1NTFMgcG9saWN5OgorCQkgKiBmcmVlIGFueSBzdG9yYWdlIHVzZWQgYnkgdGhlIE1MUyBmaWVsZHMgaW4gdGhlCisJCSAqIGNvbnRleHQgZm9yIGFsbCBleGlzdGluZyBlbnRyaWVzIGluIHRoZSBzaWR0YWIuCisJCSAqLworCQltbHNfY29udGV4dF9kZXN0cm95KGMpOworCX0gZWxzZSBpZiAoIWFyZ3MtPm9sZHAtPm1sc19lbmFibGVkICYmIGFyZ3MtPm5ld3AtPm1sc19lbmFibGVkKSB7CisJCS8qCisJCSAqIFN3aXRjaGluZyBiZXR3ZWVuIG5vbi1NTFMgYW5kIE1MUyBwb2xpY3k6CisJCSAqIGVuc3VyZSB0aGF0IHRoZSBNTFMgZmllbGRzIG9mIHRoZSBjb250ZXh0IGZvciBhbGwKKwkJICogZXhpc3RpbmcgZW50cmllcyBpbiB0aGUgc2lkdGFiIGFyZSBmaWxsZWQgaW4gd2l0aCBhCisJCSAqIHN1aXRhYmxlIGRlZmF1bHQgdmFsdWUsIGxpa2VseSB0YWtlbiBmcm9tIG9uZSBvZiB0aGUKKwkJICogaW5pdGlhbCBTSURzLgorCQkgKi8KKwkJb2MgPSBhcmdzLT5uZXdwLT5vY29udGV4dHNbT0NPTl9JU0lEXTsKKwkJd2hpbGUgKG9jICYmIG9jLT5zaWRbMF0gIT0gU0VDSU5JVFNJRF9VTkxBQkVMRUQpCisJCQlvYyA9IG9jLT5uZXh0OworCQlpZiAoIW9jKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIlNFTGludXg6ICB1bmFibGUgdG8gbG9vayB1cCIKKwkJCQkiIHRoZSBpbml0aWFsIFNJRHMgbGlzdFxuIik7CisJCQlnb3RvIGJhZDsKKwkJfQorCQlyYW5nZSA9ICZvYy0+Y29udGV4dFswXS5yYW5nZTsKKwkJcmMgPSBtbHNfcmFuZ2Vfc2V0KGMsIHJhbmdlKTsKKwkJaWYgKHJjKQorCQkJZ290byBiYWQ7CisJfQogCiAJLyogQ2hlY2sgdGhlIHZhbGlkaXR5IG9mIHRoZSBuZXcgY29udGV4dC4gKi8KIAlpZiAoIXBvbGljeWRiX2NvbnRleHRfaXN2YWxpZChhcmdzLT5uZXdwLCBjKSkgewpAQCAtMTc3MSw5ICsxNzk0LDE3IEBACiAJaWYgKHBvbGljeWRiX3JlYWQoJm5ld3BvbGljeWRiLCBmcCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKHNpZHRhYl9pbml0KCZuZXdzaWR0YWIpKSB7CisJLyogSWYgc3dpdGNoaW5nIGJldHdlZW4gZGlmZmVyZW50IHBvbGljeSB0eXBlcywgbG9nIE1MUyBzdGF0dXMgKi8KKwlpZiAocG9saWN5ZGIubWxzX2VuYWJsZWQgJiYgIW5ld3BvbGljeWRiLm1sc19lbmFibGVkKQorCQlwcmludGsoS0VSTl9JTkZPICJTRUxpbnV4OiBEaXNhYmxpbmcgTUxTIHN1cHBvcnQuLi5cbiIpOworCWVsc2UgaWYgKCFwb2xpY3lkYi5tbHNfZW5hYmxlZCAmJiBuZXdwb2xpY3lkYi5tbHNfZW5hYmxlZCkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiU0VMaW51eDogRW5hYmxpbmcgTUxTIHN1cHBvcnQuLi5cbiIpOworCisJcmMgPSBwb2xpY3lkYl9sb2FkX2lzaWRzKCZuZXdwb2xpY3lkYiwgJm5ld3NpZHRhYik7CisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogIHVuYWJsZSB0byBsb2FkIHRoZSBpbml0aWFsIFNJRHNcbiIpOwogCQlwb2xpY3lkYl9kZXN0cm95KCZuZXdwb2xpY3lkYik7Ci0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gcmM7CiAJfQogCiAJaWYgKHNlbGludXhfc2V0X21hcHBpbmcoJm5ld3BvbGljeWRiLCBzZWNjbGFzc19tYXAsCkBAIC0xODAwLDggKzE4MzEsMTIgQEAKIAlhcmdzLm9sZHAgPSAmcG9saWN5ZGI7CiAJYXJncy5uZXdwID0gJm5ld3BvbGljeWRiOwogCXJjID0gc2lkdGFiX21hcCgmbmV3c2lkdGFiLCBjb252ZXJ0X2NvbnRleHQsICZhcmdzKTsKLQlpZiAocmMpCisJaWYgKHJjKSB7CisJCXByaW50ayhLRVJOX0VSUiAiU0VMaW51eDogIHVuYWJsZSB0byBjb252ZXJ0IHRoZSBpbnRlcm5hbCIKKwkJCSIgcmVwcmVzZW50YXRpb24gb2YgY29udGV4dHMgaW4gdGhlIG5ldyBTSUQiCisJCQkiIHRhYmxlXG4iKTsKIAkJZ290byBlcnI7CisJfQogCiAJLyogU2F2ZSB0aGUgb2xkIHBvbGljeWRiIGFuZCBTSUQgdGFibGUgdG8gZnJlZSBsYXRlci4gKi8KIAltZW1jcHkoJm9sZHBvbGljeWRiLCAmcG9saWN5ZGIsIHNpemVvZiBwb2xpY3lkYik7CkBAIC0yMzk3LDcgKzI0MzIsNyBAQAogCXUzMiBsZW47CiAJaW50IHJjID0gMDsKIAotCWlmICghc3NfaW5pdGlhbGl6ZWQgfHwgIXNlbGludXhfbWxzX2VuYWJsZWQpIHsKKwlpZiAoIXNzX2luaXRpYWxpemVkIHx8ICFwb2xpY3lkYi5tbHNfZW5hYmxlZCkgewogCQkqbmV3X3NpZCA9IHNpZDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMjQ5OCw3ICsyNTMzLDcgQEAKIAkvKiB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHNzX2luaXRpYWxpemVkIGhlcmUgc2luY2UgdGhlIG9ubHkgd2F5IGJvdGgKIAkgKiBubGJsX3NpZCBhbmQgeGZybV9zaWQgYXJlIG5vdCBlcXVhbCB0byBTRUNTSURfTlVMTCB3b3VsZCBiZSBpZiB0aGUKIAkgKiBzZWN1cml0eSBzZXJ2ZXIgd2FzIGluaXRpYWxpemVkIGFuZCBzc19pbml0aWFsaXplZCB3YXMgdHJ1ZSAqLwotCWlmICghc2VsaW51eF9tbHNfZW5hYmxlZCkgeworCWlmICghcG9saWN5ZGIubWxzX2VuYWJsZWQpIHsKIAkJKnBlZXJfc2lkID0gU0VDU0lEX05VTEw7CiAJCXJldHVybiAwOwogCX0KQEAgLTI1NTUsNyArMjU5MCw3IEBACiAJcmVhZF9sb2NrKCZwb2xpY3lfcndsb2NrKTsKIAogCSpuY2xhc3NlcyA9IHBvbGljeWRiLnBfY2xhc3Nlcy5ucHJpbTsKLQkqY2xhc3NlcyA9IGtjYWxsb2MoKm5jbGFzc2VzLCBzaXplb2YoKmNsYXNzZXMpLCBHRlBfQVRPTUlDKTsKKwkqY2xhc3NlcyA9IGtjYWxsb2MoKm5jbGFzc2VzLCBzaXplb2YoKipjbGFzc2VzKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCEqY2xhc3NlcykKIAkJZ290byBvdXQ7CiAKQEAgLTI2MDIsNyArMjYzNyw3IEBACiAJfQogCiAJKm5wZXJtcyA9IG1hdGNoLT5wZXJtaXNzaW9ucy5ucHJpbTsKLQkqcGVybXMgPSBrY2FsbG9jKCpucGVybXMsIHNpemVvZigqcGVybXMpLCBHRlBfQVRPTUlDKTsKKwkqcGVybXMgPSBrY2FsbG9jKCpucGVybXMsIHNpemVvZigqKnBlcm1zKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCEqcGVybXMpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9zZWN1cml0eS9zbWFjay9zbWFja19sc20uYyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCmluZGV4IDUyOWM5Y2EuLjUyMjVlNjYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCisrKyBiL3NlY3VyaXR5L3NtYWNrL3NtYWNrX2xzbS5jCkBAIC0xNTcsMTIgKzE1NywxMiBAQAogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBlcnJvciBjb2RlIG90aGVyd2lzZS4KICAqLwotc3RhdGljIGludCBzbWFja19zeXNsb2coaW50IHR5cGUpCitzdGF0aWMgaW50IHNtYWNrX3N5c2xvZyhpbnQgdHlwZSwgYm9vbCBmcm9tX2ZpbGUpCiB7CiAJaW50IHJjOwogCWNoYXIgKnNwID0gY3VycmVudF9zZWN1cml0eSgpOwogCi0JcmMgPSBjYXBfc3lzbG9nKHR5cGUpOworCXJjID0gY2FwX3N5c2xvZyh0eXBlLCBmcm9tX2ZpbGUpOwogCWlmIChyYyAhPSAwKQogCQlyZXR1cm4gcmM7CiAKQEAgLTM4Nyw3ICszODcsNyBAQAogCXN0cnVjdCBzbWtfYXVkaXRfaW5mbyBhZDsKIAogCXNta19hZF9pbml0KCZhZCwgX19mdW5jX18sIExTTV9BVURJVF9EQVRBX0ZTKTsKLQlzbWtfYWRfc2V0ZmllbGRfdV9mc19wYXRoX2RlbnRyeSgmYWQsIG1udC0+bW50X21vdW50cG9pbnQpOworCXNta19hZF9zZXRmaWVsZF91X2ZzX3BhdGhfZGVudHJ5KCZhZCwgbW50LT5tbnRfcm9vdCk7CiAJc21rX2FkX3NldGZpZWxkX3VfZnNfcGF0aF9tbnQoJmFkLCBtbnQpOwogCiAJc2JwID0gbW50LT5tbnRfc2ItPnNfc2VjdXJpdHk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vTWFrZWZpbGUgYi9zZWN1cml0eS90b21veW8vTWFrZWZpbGUKaW5kZXggMTBjY2Q2OC4uNjBhOWUyMCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvdG9tb3lvL01ha2VmaWxlCisrKyBiL3NlY3VyaXR5L3RvbW95by9NYWtlZmlsZQpAQCAtMSArMSBAQAotb2JqLXkgPSBjb21tb24ubyByZWFscGF0aC5vIHRvbW95by5vIGRvbWFpbi5vIGZpbGUubworb2JqLXkgPSBjb21tb24ubyByZWFscGF0aC5vIHRvbW95by5vIGRvbWFpbi5vIGZpbGUubyBnYy5vCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vY29tbW9uLmMgYi9zZWN1cml0eS90b21veW8vY29tbW9uLmMKaW5kZXggZTBkMDM1NC4uZmY1MWYxMCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5jCisrKyBiL3NlY3VyaXR5L3RvbW95by9jb21tb24uYwpAQCAtMTIsOSArMTIsMTAgQEAKICNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+Ci0jaW5jbHVkZSAicmVhbHBhdGguaCIKICNpbmNsdWRlICJjb21tb24uaCIKLSNpbmNsdWRlICJ0b21veW8uaCIKKworLyogTG9jayBmb3IgcHJvdGVjdGluZyBwb2xpY3kuICovCitERUZJTkVfTVVURVgodG9tb3lvX3BvbGljeV9sb2NrKTsKIAogLyogSGFzIGxvYWRpbmcgcG9saWN5IGRvbmU/ICovCiBib29sIHRvbW95b19wb2xpY3lfbG9hZGVkOwpAQCAtMTc4LDE0ICsxNzksMTIgQEAKICAqICAgICAgICAgICAgICAgIDEgPSBtdXN0IC8gLTEgPSBtdXN0IG5vdCAvIDAgPSBkb24ndCBjYXJlCiAgKiBAZW5kX3R5cGU6ICAgICBTaG91bGQgdGhlIHBhdGhuYW1lIGVuZCB3aXRoICcvJz8KICAqICAgICAgICAgICAgICAgIDEgPSBtdXN0IC8gLTEgPSBtdXN0IG5vdCAvIDAgPSBkb24ndCBjYXJlCi0gKiBAZnVuY3Rpb246ICAgICBUaGUgbmFtZSBvZiBmdW5jdGlvbiBjYWxsaW5nIG1lLgogICoKICAqIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGZpbGVuYW1lIGZvbGxvd3MgdGhlIG5hbWluZyBydWxlcy4KICAqIFJldHVybnMgdHJ1ZSBpZiBAZmlsZW5hbWUgZm9sbG93cyB0aGUgbmFtaW5nIHJ1bGVzLCBmYWxzZSBvdGhlcndpc2UuCiAgKi8KIGJvb2wgdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3Qgczggc3RhcnRfdHlwZSwKLQkJCSAgICBjb25zdCBzOCBwYXR0ZXJuX3R5cGUsIGNvbnN0IHM4IGVuZF90eXBlLAotCQkJICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uKQorCQkJICAgIGNvbnN0IHM4IHBhdHRlcm5fdHlwZSwgY29uc3QgczggZW5kX3R5cGUpCiB7CiAJY29uc3QgY2hhciAqY29uc3Qgc3RhcnQgPSBmaWxlbmFtZTsKIAlib29sIGluX3JlcGV0aXRpb24gPSBmYWxzZTsKQEAgLTE5Myw3ICsxOTIsNiBAQAogCXVuc2lnbmVkIGNoYXIgYzsKIAl1bnNpZ25lZCBjaGFyIGQ7CiAJdW5zaWduZWQgY2hhciBlOwotCWNvbnN0IGNoYXIgKm9yaWdpbmFsX2ZpbGVuYW1lID0gZmlsZW5hbWU7CiAKIAlpZiAoIWZpbGVuYW1lKQogCQlnb3RvIG91dDsKQEAgLTI4MiwyNSArMjgwLDIwIEBACiAJCWdvdG8gb3V0OwogCXJldHVybiB0cnVlOwogIG91dDoKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEludmFsaWQgcGF0aG5hbWUgJyVzJ1xuIiwgZnVuY3Rpb24sCi0JICAgICAgIG9yaWdpbmFsX2ZpbGVuYW1lKTsKIAlyZXR1cm4gZmFsc2U7CiB9CiAKIC8qKgogICogdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluIC0gQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gZG9tYWlubmFtZSBmb2xsb3dzIHRoZSBuYW1pbmcgcnVsZXMuCiAgKiBAZG9tYWlubmFtZTogICBUaGUgZG9tYWlubmFtZSB0byBjaGVjay4KLSAqIEBmdW5jdGlvbjogICAgIFRoZSBuYW1lIG9mIGZ1bmN0aW9uIGNhbGxpbmcgbWUuCiAgKgogICogUmV0dXJucyB0cnVlIGlmIEBkb21haW5uYW1lIGZvbGxvd3MgdGhlIG5hbWluZyBydWxlcywgZmFsc2Ugb3RoZXJ3aXNlLgogICovCi1ib29sIHRvbW95b19pc19jb3JyZWN0X2RvbWFpbihjb25zdCB1bnNpZ25lZCBjaGFyICpkb21haW5uYW1lLAotCQkJICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb24pCitib29sIHRvbW95b19pc19jb3JyZWN0X2RvbWFpbihjb25zdCB1bnNpZ25lZCBjaGFyICpkb21haW5uYW1lKQogewogCXVuc2lnbmVkIGNoYXIgYzsKIAl1bnNpZ25lZCBjaGFyIGQ7CiAJdW5zaWduZWQgY2hhciBlOwotCWNvbnN0IGNoYXIgKm9yZ19kb21haW5uYW1lID0gZG9tYWlubmFtZTsKIAogCWlmICghZG9tYWlubmFtZSB8fCBzdHJuY21wKGRvbWFpbm5hbWUsIFRPTU9ZT19ST09UX05BTUUsCiAJCQkJICAgVE9NT1lPX1JPT1RfTkFNRV9MRU4pKQpAQCAtMzQzLDggKzMzNiw2IEBACiAJfSB3aGlsZSAoKmRvbWFpbm5hbWUpOwogCXJldHVybiB0cnVlOwogIG91dDoKLQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEludmFsaWQgZG9tYWlubmFtZSAnJXMnXG4iLCBmdW5jdGlvbiwKLQkgICAgICAgb3JnX2RvbWFpbm5hbWUpOwogCXJldHVybiBmYWxzZTsKIH0KIApAQCAtMzY1LDEwICszNTYsOSBAQAogICoKICAqIEBkb21haW5uYW1lOiBUaGUgZG9tYWlubmFtZSB0byBmaW5kLgogICoKLSAqIENhbGxlciBtdXN0IGNhbGwgZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7IG9yCi0gKiBkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7IC4KLSAqCiAgKiBSZXR1cm5zIHBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iIGlmIGZvdW5kLCBOVUxMIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICp0b21veW9fZmluZF9kb21haW4oY29uc3QgY2hhciAqZG9tYWlubmFtZSkKIHsKQEAgLTM3Nyw3ICszNjcsNyBAQAogCiAJbmFtZS5uYW1lID0gZG9tYWlubmFtZTsKIAl0b21veW9fZmlsbF9wYXRoX2luZm8oJm5hbWUpOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CiAJCWlmICghZG9tYWluLT5pc19kZWxldGVkICYmCiAJCSAgICAhdG9tb3lvX3BhdGhjbXAoJm5hbWUsIGRvbWFpbi0+ZG9tYWlubmFtZSkpCiAJCQlyZXR1cm4gZG9tYWluOwpAQCAtNzQ4LDcgKzczOCw3IEBACiAgKgogICogUmV0dXJucyB0aGUgdG9tb3lvX3JlYWxwYXRoKCkgb2YgY3VycmVudCBwcm9jZXNzIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgogICoKLSAqIFRoaXMgZnVuY3Rpb24gdXNlcyB0b21veW9fYWxsb2MoKSwgc28gdGhlIGNhbGxlciBtdXN0IGNhbGwgdG9tb3lvX2ZyZWUoKQorICogVGhpcyBmdW5jdGlvbiB1c2VzIGt6YWxsb2MoKSwgc28gdGhlIGNhbGxlciBtdXN0IGNhbGwga2ZyZWUoKQogICogaWYgdGhpcyBmdW5jdGlvbiBkaWRuJ3QgcmV0dXJuIE5VTEwuCiAgKi8KIHN0YXRpYyBjb25zdCBjaGFyICp0b21veW9fZ2V0X2V4ZSh2b2lkKQpAQCAtODI5LDYgKzgxOSw4IEBACiAgKiBAZG9tYWluOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KICAqCiAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGRvbWFpbiBpcyBub3QgZXhjZWVkZWQgcXVvdGEsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBib29sIHRvbW95b19kb21haW5fcXVvdGFfaXNfb2soc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIGNvbnN0IGRvbWFpbikKIHsKQEAgLTgzNyw2MSArODI5LDI5IEBACiAKIAlpZiAoIWRvbWFpbikKIAkJcmV0dXJuIHRydWU7Ci0JZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKLQkJaWYgKHB0ci0+dHlwZSAmIFRPTU9ZT19BQ0xfREVMRVRFRCkKLQkJCWNvbnRpbnVlOwotCQlzd2l0Y2ggKHRvbW95b19hY2xfdHlwZTIocHRyKSkgewotCQkJc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkICphY2wxOwotCQkJc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkICphY2wyOwotCQkJdTE2IHBlcm07Ci0JCWNhc2UgVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMOgotCQkJYWNsMSA9IGNvbnRhaW5lcl9vZihwdHIsCi0JCQkJICAgIHN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCwKLQkJCQkJICAgIGhlYWQpOwotCQkJcGVybSA9IGFjbDEtPnBlcm07Ci0JCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX0VYRUNVVEVfQUNMKSkKLQkJCQljb3VudCsrOwotCQkJaWYgKHBlcm0gJgotCQkJICAgICgoMSA8PCBUT01PWU9fVFlQRV9SRUFEX0FDTCkgfAotCQkJICAgICAoMSA8PCBUT01PWU9fVFlQRV9XUklURV9BQ0wpKSkKLQkJCQljb3VudCsrOwotCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9DUkVBVEVfQUNMKSkKLQkJCQljb3VudCsrOwotCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9VTkxJTktfQUNMKSkKLQkJCQljb3VudCsrOwotCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9NS0RJUl9BQ0wpKQotCQkJCWNvdW50Kys7Ci0JCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JNRElSX0FDTCkpCi0JCQkJY291bnQrKzsKLQkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfTUtGSUZPX0FDTCkpCi0JCQkJY291bnQrKzsKLQkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfTUtTT0NLX0FDTCkpCi0JCQkJY291bnQrKzsKLQkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfTUtCTE9DS19BQ0wpKQotCQkJCWNvdW50Kys7Ci0JCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX01LQ0hBUl9BQ0wpKQotCQkJCWNvdW50Kys7Ci0JCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1RSVU5DQVRFX0FDTCkpCi0JCQkJY291bnQrKzsKLQkJCWlmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfU1lNTElOS19BQ0wpKQotCQkJCWNvdW50Kys7Ci0JCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFV1JJVEVfQUNMKSkKLQkJCQljb3VudCsrOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQlzd2l0Y2ggKHB0ci0+dHlwZSkgeworCQkJc3RydWN0IHRvbW95b19wYXRoX2FjbCAqYWNsOworCQkJdTMyIHBlcm07CisJCQl1OCBpOworCQljYXNlIFRPTU9ZT19UWVBFX1BBVEhfQUNMOgorCQkJYWNsID0gY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19wYXRoX2FjbCwgaGVhZCk7CisJCQlwZXJtID0gYWNsLT5wZXJtIHwgKCgodTMyKSBhY2wtPnBlcm1faGlnaCkgPDwgMTYpOworCQkJZm9yIChpID0gMDsgaSA8IFRPTU9ZT19NQVhfUEFUSF9PUEVSQVRJT047IGkrKykKKwkJCQlpZiAocGVybSAmICgxIDw8IGkpKQorCQkJCQljb3VudCsrOworCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFKSkKKwkJCQljb3VudCAtPSAyOwogCQkJYnJlYWs7Ci0JCWNhc2UgVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMOgotCQkJYWNsMiA9IGNvbnRhaW5lcl9vZihwdHIsCi0JCQkJICAgIHN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCwKLQkJCQkJICAgIGhlYWQpOwotCQkJcGVybSA9IGFjbDItPnBlcm07Ci0JCQlpZiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX0xJTktfQUNMKSkKLQkJCQljb3VudCsrOwotCQkJaWYgKHBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9SRU5BTUVfQUNMKSkKLQkJCQljb3VudCsrOworCQljYXNlIFRPTU9ZT19UWVBFX1BBVEgyX0FDTDoKKwkJCXBlcm0gPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX3BhdGgyX2FjbCwgaGVhZCkKKwkJCQktPnBlcm07CisJCQlmb3IgKGkgPSAwOyBpIDwgVE9NT1lPX01BWF9QQVRIMl9PUEVSQVRJT047IGkrKykKKwkJCQlpZiAocGVybSAmICgxIDw8IGkpKQorCQkJCQljb3VudCsrOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOwogCWlmIChjb3VudCA8IHRvbW95b19jaGVja19mbGFncyhkb21haW4sIFRPTU9ZT19NQVhfQUNDRVBUX0VOVFJZKSkKIAkJcmV0dXJuIHRydWU7CiAJaWYgKCFkb21haW4tPnF1b3RhX3dhcm5lZCkgewpAQCAtOTIzLDkgKzg4MywxMSBAQAogCXB0ciA9IHRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXTsKIAlpZiAocHRyKQogCQlnb3RvIG9rOwotCXB0ciA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqcHRyKSk7Ci0JaWYgKCFwdHIpCisJcHRyID0ga21hbGxvYyhzaXplb2YoKnB0ciksIEdGUF9LRVJORUwpOworCWlmICghdG9tb3lvX21lbW9yeV9vayhwdHIpKSB7CisJCWtmcmVlKHB0cik7CiAJCWdvdG8gb2s7CisJfQogCWZvciAoaSA9IDA7IGkgPCBUT01PWU9fTUFYX0NPTlRST0xfSU5ERVg7IGkrKykKIAkJcHRyLT52YWx1ZVtpXSA9IHRvbW95b19jb250cm9sX2FycmF5W2ldLmN1cnJlbnRfdmFsdWU7CiAJbWIoKTsgLyogQXZvaWQgb3V0LW9mLW9yZGVyIGV4ZWN1dGlvbi4gKi8KQEAgLTk2Niw3ICs5MjgsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAkqY3AgPSAnXDAnOwogCWlmICghc3RyY21wKGRhdGEsICJDT01NRU5UIikpIHsKLQkJcHJvZmlsZS0+Y29tbWVudCA9IHRvbW95b19zYXZlX25hbWUoY3AgKyAxKTsKKwkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKm9sZF9jb21tZW50ID0gcHJvZmlsZS0+Y29tbWVudDsKKwkJcHJvZmlsZS0+Y29tbWVudCA9IHRvbW95b19nZXRfbmFtZShjcCArIDEpOworCQl0b21veW9fcHV0X25hbWUob2xkX2NvbW1lbnQpOwogCQlyZXR1cm4gMDsKIAl9CiAJZm9yIChpID0gMDsgaSA8IFRPTU9ZT19NQVhfQ09OVFJPTF9JTkRFWDsgaSsrKSB7CkBAIC0xMDYxLDI3ICsxMDI1LDYgQEAKIH0KIAogLyoKLSAqIHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSBpcyBhIHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkIGZvciBob2xkaW5nIGxpc3Qgb2YKLSAqIGRvbWFpbm5hbWVzIG9yIHByb2dyYW1zIHdoaWNoIGFyZSBwZXJtaXR0ZWQgdG8gbW9kaWZ5IGNvbmZpZ3VyYXRpb24gdmlhCi0gKiAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KLSAqIEl0IGhhcyBmb2xsb3dpbmcgZmllbGRzLgotICoKLSAqICAoMSkgImxpc3QiIHdoaWNoIGlzIGxpbmtlZCB0byB0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCAuCi0gKiAgKDIpICJtYW5hZ2VyIiBpcyBhIGRvbWFpbm5hbWUgb3IgYSBwcm9ncmFtJ3MgcGF0aG5hbWUuCi0gKiAgKDMpICJpc19kb21haW4iIGlzIGEgYm9vbCB3aGljaCBpcyB0cnVlIGlmICJtYW5hZ2VyIiBpcyBhIGRvbWFpbm5hbWUsIGZhbHNlCi0gKiAgICAgIG90aGVyd2lzZS4KLSAqICAoNCkgImlzX2RlbGV0ZWQiIGlzIGEgYm9vbCB3aGljaCBpcyB0cnVlIGlmIG1hcmtlZCBhcyBkZWxldGVkLCBmYWxzZQotICogICAgICBvdGhlcndpc2UuCi0gKi8KLXN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQkvKiBBIHBhdGggdG8gcHJvZ3JhbSBvciBhIGRvbWFpbm5hbWUuICovCi0JY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKm1hbmFnZXI7Ci0JYm9vbCBpc19kb21haW47ICAvKiBUcnVlIGlmIG1hbmFnZXIgaXMgYSBkb21haW5uYW1lLiAqLwotCWJvb2wgaXNfZGVsZXRlZDsgLyogVHJ1ZSBpZiB0aGlzIGVudHJ5IGlzIGRlbGV0ZWQuICovCi19OwotCi0vKgogICogdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QgaXMgdXNlZCBmb3IgaG9sZGluZyBsaXN0IG9mIGRvbWFpbm5hbWVzIG9yCiAgKiBwcm9ncmFtcyB3aGljaCBhcmUgcGVybWl0dGVkIHRvIG1vZGlmeSBjb25maWd1cmF0aW9uIHZpYQogICogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCkBAIC0xMTExLDggKzEwNTQsNyBAQAogICoKICAqICMgY2F0IC9zeXMva2VybmVsL3NlY3VyaXR5L3RvbW95by9tYW5hZ2VyCiAgKi8KLXN0YXRpYyBMSVNUX0hFQUQodG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QpOwotc3RhdGljIERFQ0xBUkVfUldTRU0odG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CitMSVNUX0hFQUQodG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QpOwogCiAvKioKICAqIHRvbW95b191cGRhdGVfbWFuYWdlcl9lbnRyeSAtIEFkZCBhIG1hbmFnZXIgZW50cnkuCkBAIC0xMTIxLDQ4ICsxMDYzLDUwIEBACiAgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgaW50IHRvbW95b191cGRhdGVfbWFuYWdlcl9lbnRyeShjb25zdCBjaGFyICptYW5hZ2VyLAogCQkJCSAgICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKIHsKLQlzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSAqZW50cnkgPSBOVUxMOwogCXN0cnVjdCB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgKnB0cjsKIAljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfbWFuYWdlcjsKLQlpbnQgZXJyb3IgPSAtRU5PTUVNOworCWludCBlcnJvciA9IGlzX2RlbGV0ZSA/IC1FTk9FTlQgOiAtRU5PTUVNOwogCWJvb2wgaXNfZG9tYWluID0gZmFsc2U7CiAKIAlpZiAodG9tb3lvX2lzX2RvbWFpbl9kZWYobWFuYWdlcikpIHsKLQkJaWYgKCF0b21veW9faXNfY29ycmVjdF9kb21haW4obWFuYWdlciwgX19mdW5jX18pKQorCQlpZiAoIXRvbW95b19pc19jb3JyZWN0X2RvbWFpbihtYW5hZ2VyKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCQlpc19kb21haW4gPSB0cnVlOwogCX0gZWxzZSB7Ci0JCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChtYW5hZ2VyLCAxLCAtMSwgLTEsIF9fZnVuY19fKSkKKwkJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKG1hbmFnZXIsIDEsIC0xLCAtMSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0Jc2F2ZWRfbWFuYWdlciA9IHRvbW95b19zYXZlX25hbWUobWFuYWdlcik7CisJc2F2ZWRfbWFuYWdlciA9IHRvbW95b19nZXRfbmFtZShtYW5hZ2VyKTsKIAlpZiAoIXNhdmVkX21hbmFnZXIpCiAJCXJldHVybiAtRU5PTUVNOwotCWRvd25fd3JpdGUoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QsIGxpc3QpIHsKKwlpZiAoIWlzX2RlbGV0ZSkKKwkJZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwltdXRleF9sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0LCBsaXN0KSB7CiAJCWlmIChwdHItPm1hbmFnZXIgIT0gc2F2ZWRfbWFuYWdlcikKIAkJCWNvbnRpbnVlOwogCQlwdHItPmlzX2RlbGV0ZWQgPSBpc19kZWxldGU7CiAJCWVycm9yID0gMDsKLQkJZ290byBvdXQ7CisJCWJyZWFrOwogCX0KLQlpZiAoaXNfZGVsZXRlKSB7Ci0JCWVycm9yID0gLUVOT0VOVDsKLQkJZ290byBvdXQ7CisJaWYgKCFpc19kZWxldGUgJiYgZXJyb3IgJiYgdG9tb3lvX21lbW9yeV9vayhlbnRyeSkpIHsKKwkJZW50cnktPm1hbmFnZXIgPSBzYXZlZF9tYW5hZ2VyOworCQlzYXZlZF9tYW5hZ2VyID0gTlVMTDsKKwkJZW50cnktPmlzX2RvbWFpbiA9IGlzX2RvbWFpbjsKKwkJbGlzdF9hZGRfdGFpbF9yY3UoJmVudHJ5LT5saXN0LCAmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QpOworCQllbnRyeSA9IE5VTEw7CisJCWVycm9yID0gMDsKIAl9Ci0JbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKLQlpZiAoIW5ld19lbnRyeSkKLQkJZ290byBvdXQ7Ci0JbmV3X2VudHJ5LT5tYW5hZ2VyID0gc2F2ZWRfbWFuYWdlcjsKLQluZXdfZW50cnktPmlzX2RvbWFpbiA9IGlzX2RvbWFpbjsKLQlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCk7Ci0JZXJyb3IgPSAwOwotIG91dDoKLQl1cF93cml0ZSgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOworCXRvbW95b19wdXRfbmFtZShzYXZlZF9tYW5hZ2VyKTsKKwlrZnJlZShlbnRyeSk7CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0xMTcyLDYgKzExMTYsOCBAQAogICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX21hbmFnZXJfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQogewpAQCAtMTE5MSw2ICsxMTM3LDggQEAKICAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCiAgKgogICogUmV0dXJucyAwLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX3JlYWRfbWFuYWdlcl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCiB7CkBAIC0xMTk5LDcgKzExNDcsNiBAQAogCiAJaWYgKGhlYWQtPnJlYWRfZW9mKQogCQlyZXR1cm4gMDsKLQlkb3duX3JlYWQoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLAogCQkJICAgICAmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QpIHsKIAkJc3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSAqcHRyOwpAQCAtMTIxMSw3ICsxMTU4LDYgQEAKIAkJaWYgKCFkb25lKQogCQkJYnJlYWs7CiAJfQotCXVwX3JlYWQoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOwogCWhlYWQtPnJlYWRfZW9mID0gZG9uZTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEyMjEsNiArMTE2Nyw4IEBACiAgKgogICogUmV0dXJucyB0cnVlIGlmIHRoZSBjdXJyZW50IHByb2Nlc3MgaXMgcGVybWl0dGVkIHRvIG1vZGlmeSBwb2xpY3kKICAqIHZpYSAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgYm9vbCB0b21veW9faXNfcG9saWN5X21hbmFnZXIodm9pZCkKIHsKQEAgLTEyMzQsMjkgKzExODIsMjUgQEAKIAkJcmV0dXJuIHRydWU7CiAJaWYgKCF0b21veW9fbWFuYWdlX2J5X25vbl9yb290ICYmICh0YXNrLT5jcmVkLT51aWQgfHwgdGFzay0+Y3JlZC0+ZXVpZCkpCiAJCXJldHVybiBmYWxzZTsKLQlkb3duX3JlYWQoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCwgbGlzdCkgewogCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCAmJiBwdHItPmlzX2RvbWFpbgogCQkgICAgJiYgIXRvbW95b19wYXRoY21wKGRvbWFpbm5hbWUsIHB0ci0+bWFuYWdlcikpIHsKIAkJCWZvdW5kID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQl9CiAJfQotCXVwX3JlYWQoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOwogCWlmIChmb3VuZCkKIAkJcmV0dXJuIHRydWU7CiAJZXhlID0gdG9tb3lvX2dldF9leGUoKTsKIAlpZiAoIWV4ZSkKIAkJcmV0dXJuIGZhbHNlOwotCWRvd25fcmVhZCgmdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0LCBsaXN0KSB7CiAJCWlmICghcHRyLT5pc19kZWxldGVkICYmICFwdHItPmlzX2RvbWFpbgogCQkgICAgJiYgIXN0cmNtcChleGUsIHB0ci0+bWFuYWdlci0+bmFtZSkpIHsKIAkJCWZvdW5kID0gdHJ1ZTsKIAkJCWJyZWFrOwogCQl9CiAJfQotCXVwX3JlYWQoJnRvbW95b19wb2xpY3lfbWFuYWdlcl9saXN0X2xvY2spOwogCWlmICghZm91bmQpIHsgLyogUmVkdWNlIGVycm9yIG1lc3NhZ2VzLiAqLwogCQlzdGF0aWMgcGlkX3QgbGFzdF9waWQ7CiAJCWNvbnN0IHBpZF90IHBpZCA9IGN1cnJlbnQtPnBpZDsKQEAgLTEyNjYsNyArMTIxMCw3IEBACiAJCQlsYXN0X3BpZCA9IHBpZDsKIAkJfQogCX0KLQl0b21veW9fZnJlZShleGUpOworCWtmcmVlKGV4ZSk7CiAJcmV0dXJuIGZvdW5kOwogfQogCkBAIC0xMjc3LDYgKzEyMjEsOCBAQAogICogQGRhdGE6IFN0cmluZyB0byBwYXJzZS4KICAqCiAgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBib29sIHRvbW95b19pc19zZWxlY3Rfb25lKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLAogCQkJCSBjb25zdCBjaGFyICpkYXRhKQpAQCAtMTI4NiwxNyArMTIzMiwxNiBAQAogCiAJaWYgKHNzY2FuZihkYXRhLCAicGlkPSV1IiwgJnBpZCkgPT0gMSkgewogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CisJCXJjdV9yZWFkX2xvY2soKTsKIAkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJcCA9IGZpbmRfdGFza19ieV92cGlkKHBpZCk7CiAJCWlmIChwKQogCQkJZG9tYWluID0gdG9tb3lvX3JlYWxfZG9tYWluKHApOwogCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCX0gZWxzZSBpZiAoIXN0cm5jbXAoZGF0YSwgImRvbWFpbj0iLCA3KSkgewotCQlpZiAodG9tb3lvX2lzX2RvbWFpbl9kZWYoZGF0YSArIDcpKSB7Ci0JCQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkJaWYgKHRvbW95b19pc19kb21haW5fZGVmKGRhdGEgKyA3KSkKIAkJCWRvbWFpbiA9IHRvbW95b19maW5kX2RvbWFpbihkYXRhICsgNyk7Ci0JCQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7Ci0JCX0KIAl9IGVsc2UKIAkJcmV0dXJuIGZhbHNlOwogCWhlYWQtPndyaXRlX3ZhcjEgPSBkb21haW47CkBAIC0xMzEwLDEzICsxMjU1LDExIEBACiAJaWYgKGRvbWFpbikgewogCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkOwogCQloZWFkLT5yZWFkX3ZhcjEgPSBOVUxMOwotCQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGQsICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKIAkJCWlmIChkID09IGRvbWFpbikKIAkJCQlicmVhazsKIAkJCWhlYWQtPnJlYWRfdmFyMSA9ICZkLT5saXN0OwogCQl9Ci0JCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKIAkJaGVhZC0+cmVhZF92YXIyID0gTlVMTDsKIAkJaGVhZC0+cmVhZF9iaXQgPSAwOwogCQloZWFkLT5yZWFkX3N0ZXAgPSAwOwpAQCAtMTMzMiw2ICsxMjc1LDggQEAKICAqIEBkb21haW5uYW1lOiBUaGUgbmFtZSBvZiBkb21haW4uCiAgKgogICogUmV0dXJucyAwLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX2RlbGV0ZV9kb21haW4oY2hhciAqZG9tYWlubmFtZSkKIHsKQEAgLTEzNDAsOSArMTI4NSw5IEBACiAKIAluYW1lLm5hbWUgPSBkb21haW5uYW1lOwogCXRvbW95b19maWxsX3BhdGhfaW5mbygmbmFtZSk7Ci0JZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCW11dGV4X2xvY2soJnRvbW95b19wb2xpY3lfbG9jayk7CiAJLyogSXMgdGhlcmUgYW4gYWN0aXZlIGRvbWFpbj8gKi8KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgewogCQkvKiBOZXZlciBkZWxldGUgdG9tb3lvX2tlcm5lbF9kb21haW4gKi8KIAkJaWYgKGRvbWFpbiA9PSAmdG9tb3lvX2tlcm5lbF9kb21haW4pCiAJCQljb250aW51ZTsKQEAgLTEzNTIsNyArMTI5Nyw3IEBACiAJCWRvbWFpbi0+aXNfZGVsZXRlZCA9IHRydWU7CiAJCWJyZWFrOwogCX0KLQl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOworCW11dGV4X3VubG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTM2Miw2ICsxMzA3LDggQEAKICAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgaW50IHRvbW95b193cml0ZV9kb21haW5fcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQogewpAQCAtMTM4NCwxMSArMTMzMSw5IEBACiAJCWRvbWFpbiA9IE5VTEw7CiAJCWlmIChpc19kZWxldGUpCiAJCQl0b21veW9fZGVsZXRlX2RvbWFpbihkYXRhKTsKLQkJZWxzZSBpZiAoaXNfc2VsZWN0KSB7Ci0JCQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwkJZWxzZSBpZiAoaXNfc2VsZWN0KQogCQkJZG9tYWluID0gdG9tb3lvX2ZpbmRfZG9tYWluKGRhdGEpOwotCQkJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOwotCQl9IGVsc2UKKwkJZWxzZQogCQkJZG9tYWluID0gdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19kb21haW4oZGF0YSwgMCk7CiAJCWhlYWQtPndyaXRlX3ZhcjEgPSBkb21haW47CiAJCXJldHVybiAwOwpAQCAtMTQwMyw0MyArMTM0OCwzOSBAQAogCQlyZXR1cm4gMDsKIAl9CiAJaWYgKCFzdHJjbXAoZGF0YSwgVE9NT1lPX0tFWVdPUkRfSUdOT1JFX0dMT0JBTF9BTExPV19SRUFEKSkgewotCQl0b21veW9fc2V0X2RvbWFpbl9mbGFnKGRvbWFpbiwgaXNfZGVsZXRlLAotCQkJICAgICAgIFRPTU9ZT19ET01BSU5fRkxBR1NfSUdOT1JFX0dMT0JBTF9BTExPV19SRUFEKTsKKwkJZG9tYWluLT5pZ25vcmVfZ2xvYmFsX2FsbG93X3JlYWQgPSAhaXNfZGVsZXRlOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIHRvbW95b193cml0ZV9maWxlX3BvbGljeShkYXRhLCBkb21haW4sIGlzX2RlbGV0ZSk7CiB9CiAKIC8qKgotICogdG9tb3lvX3ByaW50X3NpbmdsZV9wYXRoX2FjbCAtIFByaW50IGEgc2luZ2xlIHBhdGggQUNMIGVudHJ5LgorICogdG9tb3lvX3ByaW50X3BhdGhfYWNsIC0gUHJpbnQgYSBzaW5nbGUgcGF0aCBBQ0wgZW50cnkuCiAgKgogICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KLSAqIEBwdHI6ICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQiLgorICogQHB0cjogIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fcGF0aF9hY2wiLgogICoKICAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBib29sIHRvbW95b19wcmludF9zaW5nbGVfcGF0aF9hY2woc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCi0JCQkJCSBzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQgKgotCQkJCQkgcHRyKQorc3RhdGljIGJvb2wgdG9tb3lvX3ByaW50X3BhdGhfYWNsKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLAorCQkJCSAgc3RydWN0IHRvbW95b19wYXRoX2FjbCAqcHRyKQogewogCWludCBwb3M7CiAJdTggYml0OwogCWNvbnN0IGNoYXIgKmF0bWFyayA9ICIiOwogCWNvbnN0IGNoYXIgKmZpbGVuYW1lOwotCWNvbnN0IHUxNiBwZXJtID0gcHRyLT5wZXJtOworCWNvbnN0IHUzMiBwZXJtID0gcHRyLT5wZXJtIHwgKCgodTMyKSBwdHItPnBlcm1faGlnaCkgPDwgMTYpOwogCiAJZmlsZW5hbWUgPSBwdHItPmZpbGVuYW1lLT5uYW1lOwotCWZvciAoYml0ID0gaGVhZC0+cmVhZF9iaXQ7IGJpdCA8IFRPTU9ZT19NQVhfU0lOR0xFX1BBVEhfT1BFUkFUSU9OOwotCSAgICAgYml0KyspIHsKKwlmb3IgKGJpdCA9IGhlYWQtPnJlYWRfYml0OyBiaXQgPCBUT01PWU9fTUFYX1BBVEhfT1BFUkFUSU9OOyBiaXQrKykgewogCQljb25zdCBjaGFyICptc2c7CiAJCWlmICghKHBlcm0gJiAoMSA8PCBiaXQpKSkKIAkJCWNvbnRpbnVlOwogCQkvKiBQcmludCAicmVhZC93cml0ZSIgaW5zdGVhZCBvZiAicmVhZCIgYW5kICJ3cml0ZSIuICovCi0JCWlmICgoYml0ID09IFRPTU9ZT19UWVBFX1JFQURfQUNMIHx8Ci0JCSAgICAgYml0ID09IFRPTU9ZT19UWVBFX1dSSVRFX0FDTCkKLQkJICAgICYmIChwZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wpKSkKKwkJaWYgKChiaXQgPT0gVE9NT1lPX1RZUEVfUkVBRCB8fCBiaXQgPT0gVE9NT1lPX1RZUEVfV1JJVEUpCisJCSAgICAmJiAocGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEUpKSkKIAkJCWNvbnRpbnVlOwotCQltc2cgPSB0b21veW9fc3Aya2V5d29yZChiaXQpOworCQltc2cgPSB0b21veW9fcGF0aDJrZXl3b3JkKGJpdCk7CiAJCXBvcyA9IGhlYWQtPnJlYWRfYXZhaWw7CiAJCWlmICghdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiYWxsb3dfJXMgJXMlc1xuIiwgbXNnLAogCQkJCSAgICAgIGF0bWFyaywgZmlsZW5hbWUpKQpAQCAtMTQ1NCwxNiArMTM5NSwxNSBAQAogfQogCiAvKioKLSAqIHRvbW95b19wcmludF9kb3VibGVfcGF0aF9hY2wgLSBQcmludCBhIGRvdWJsZSBwYXRoIEFDTCBlbnRyeS4KKyAqIHRvbW95b19wcmludF9wYXRoMl9hY2wgLSBQcmludCBhIGRvdWJsZSBwYXRoIEFDTCBlbnRyeS4KICAqCiAgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgotICogQHB0cjogIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCIuCisgKiBAcHRyOiAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19wYXRoMl9hY2wiLgogICoKICAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCiAgKi8KLXN0YXRpYyBib29sIHRvbW95b19wcmludF9kb3VibGVfcGF0aF9hY2woc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQsCi0JCQkJCSBzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQgKgotCQkJCQkgcHRyKQorc3RhdGljIGJvb2wgdG9tb3lvX3ByaW50X3BhdGgyX2FjbChzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCwKKwkJCQkgICBzdHJ1Y3QgdG9tb3lvX3BhdGgyX2FjbCAqcHRyKQogewogCWludCBwb3M7CiAJY29uc3QgY2hhciAqYXRtYXJrMSA9ICIiOwpAQCAtMTQ3NSwxMiArMTQxNSwxMSBAQAogCiAJZmlsZW5hbWUxID0gcHRyLT5maWxlbmFtZTEtPm5hbWU7CiAJZmlsZW5hbWUyID0gcHRyLT5maWxlbmFtZTItPm5hbWU7Ci0JZm9yIChiaXQgPSBoZWFkLT5yZWFkX2JpdDsgYml0IDwgVE9NT1lPX01BWF9ET1VCTEVfUEFUSF9PUEVSQVRJT047Ci0JICAgICBiaXQrKykgeworCWZvciAoYml0ID0gaGVhZC0+cmVhZF9iaXQ7IGJpdCA8IFRPTU9ZT19NQVhfUEFUSDJfT1BFUkFUSU9OOyBiaXQrKykgewogCQljb25zdCBjaGFyICptc2c7CiAJCWlmICghKHBlcm0gJiAoMSA8PCBiaXQpKSkKIAkJCWNvbnRpbnVlOwotCQltc2cgPSB0b21veW9fZHAya2V5d29yZChiaXQpOworCQltc2cgPSB0b21veW9fcGF0aDIya2V5d29yZChiaXQpOwogCQlwb3MgPSBoZWFkLT5yZWFkX2F2YWlsOwogCQlpZiAoIXRvbW95b19pb19wcmludGYoaGVhZCwgImFsbG93XyVzICVzJXMgJXMlc1xuIiwgbXNnLAogCQkJCSAgICAgIGF0bWFyazEsIGZpbGVuYW1lMSwgYXRtYXJrMiwgZmlsZW5hbWUyKSkKQEAgLTE1MDUsMjMgKzE0NDQsMTcgQEAKIHN0YXRpYyBib29sIHRvbW95b19wcmludF9lbnRyeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCwKIAkJCSAgICAgICBzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHIpCiB7Ci0JY29uc3QgdTggYWNsX3R5cGUgPSB0b21veW9fYWNsX3R5cGUyKHB0cik7CisJY29uc3QgdTggYWNsX3R5cGUgPSBwdHItPnR5cGU7CiAKLQlpZiAoYWNsX3R5cGUgJiBUT01PWU9fQUNMX0RFTEVURUQpCi0JCXJldHVybiB0cnVlOwotCWlmIChhY2xfdHlwZSA9PSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0wpIHsKLQkJc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkICphY2wKLQkJCT0gY29udGFpbmVyX29mKHB0ciwKLQkJCQkgICAgICAgc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkLAotCQkJCSAgICAgICBoZWFkKTsKLQkJcmV0dXJuIHRvbW95b19wcmludF9zaW5nbGVfcGF0aF9hY2woaGVhZCwgYWNsKTsKKwlpZiAoYWNsX3R5cGUgPT0gVE9NT1lPX1RZUEVfUEFUSF9BQ0wpIHsKKwkJc3RydWN0IHRvbW95b19wYXRoX2FjbCAqYWNsCisJCQk9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fcGF0aF9hY2wsIGhlYWQpOworCQlyZXR1cm4gdG9tb3lvX3ByaW50X3BhdGhfYWNsKGhlYWQsIGFjbCk7CiAJfQotCWlmIChhY2xfdHlwZSA9PSBUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0wpIHsKLQkJc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkICphY2wKLQkJCT0gY29udGFpbmVyX29mKHB0ciwKLQkJCQkgICAgICAgc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkLAotCQkJCSAgICAgICBoZWFkKTsKLQkJcmV0dXJuIHRvbW95b19wcmludF9kb3VibGVfcGF0aF9hY2woaGVhZCwgYWNsKTsKKwlpZiAoYWNsX3R5cGUgPT0gVE9NT1lPX1RZUEVfUEFUSDJfQUNMKSB7CisJCXN0cnVjdCB0b21veW9fcGF0aDJfYWNsICphY2wKKwkJCT0gY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19wYXRoMl9hY2wsIGhlYWQpOworCQlyZXR1cm4gdG9tb3lvX3ByaW50X3BhdGgyX2FjbChoZWFkLCBhY2wpOwogCX0KIAlCVUcoKTsgLyogVGhpcyBtdXN0IG5vdCBoYXBwZW4uICovCiAJcmV0dXJuIGZhbHNlOwpAQCAtMTUzMyw2ICsxNDY2LDggQEAKICAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCiAgKgogICogUmV0dXJucyAwLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX3JlYWRfZG9tYWluX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKIHsKQEAgLTE1NDQsNyArMTQ3OSw2IEBACiAJCXJldHVybiAwOwogCWlmIChoZWFkLT5yZWFkX3N0ZXAgPT0gMCkKIAkJaGVhZC0+cmVhZF9zdGVwID0gMTsKLQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShkcG9zLCBoZWFkLT5yZWFkX3ZhcjEsICZ0b21veW9fZG9tYWluX2xpc3QpIHsKIAkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOwogCQljb25zdCBjaGFyICpxdW90YV9leGNlZWRlZCA9ICIiOwpAQCAtMTU1OCwxMCArMTQ5Miw5IEBACiAJCS8qIFByaW50IGRvbWFpbm5hbWUgYW5kIGZsYWdzLiAqLwogCQlpZiAoZG9tYWluLT5xdW90YV93YXJuZWQpCiAJCQlxdW90YV9leGNlZWRlZCA9ICJxdW90YV9leGNlZWRlZFxuIjsKLQkJaWYgKGRvbWFpbi0+ZmxhZ3MgJiBUT01PWU9fRE9NQUlOX0ZMQUdTX1RSQU5TSVRJT05fRkFJTEVEKQorCQlpZiAoZG9tYWluLT50cmFuc2l0aW9uX2ZhaWxlZCkKIAkJCXRyYW5zaXRpb25fZmFpbGVkID0gInRyYW5zaXRpb25fZmFpbGVkXG4iOwotCQlpZiAoZG9tYWluLT5mbGFncyAmCi0JCSAgICBUT01PWU9fRE9NQUlOX0ZMQUdTX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCkKKwkJaWYgKGRvbWFpbi0+aWdub3JlX2dsb2JhbF9hbGxvd19yZWFkKQogCQkJaWdub3JlX2dsb2JhbF9hbGxvd19yZWFkCiAJCQkJPSBUT01PWU9fS0VZV09SRF9JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQgIlxuIjsKIAkJZG9uZSA9IHRvbW95b19pb19wcmludGYoaGVhZCwgIiVzXG4iIFRPTU9ZT19LRVlXT1JEX1VTRV9QUk9GSUxFCkBAIC0xNTc3LDcgKzE1MTAsNiBAQAogCQlpZiAoaGVhZC0+cmVhZF9zdGVwID09IDMpCiAJCQlnb3RvIHRhaWxfbWFyazsKIAkJLyogUHJpbnQgQUNMIGVudHJpZXMgaW4gdGhlIGRvbWFpbi4gKi8KLQkJZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CiAJCWxpc3RfZm9yX2VhY2hfY29va2llKGFwb3MsIGhlYWQtPnJlYWRfdmFyMiwKIAkJCQkgICAgICZkb21haW4tPmFjbF9pbmZvX2xpc3QpIHsKIAkJCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKnB0cgpAQCAtMTU4Nyw3ICsxNTE5LDYgQEAKIAkJCWlmICghZG9uZSkKIAkJCQlicmVhazsKIAkJfQotCQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7CiAJCWlmICghZG9uZSkKIAkJCWJyZWFrOwogCQloZWFkLT5yZWFkX3N0ZXAgPSAzOwpAQCAtMTU5OSw3ICsxNTMwLDYgQEAKIAkJaWYgKGhlYWQtPnJlYWRfc2luZ2xlX2RvbWFpbikKIAkJCWJyZWFrOwogCX0KLQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CiAJaGVhZC0+cmVhZF9lb2YgPSBkb25lOwogCXJldHVybiAwOwogfQpAQCAtMTYxNSw2ICsxNTQ1LDggQEAKICAqCiAgKiAgICAgKCBlY2hvICJzZWxlY3QgIiAkZG9tYWlubmFtZTsgZWNobyAidXNlX3Byb2ZpbGUgIiAkcHJvZmlsZSApIHwKICAqICAgICAvdXNyL2xpYi9jY3MvbG9hZHBvbGljeSAtZAorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbl9wcm9maWxlKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQogewpAQCAtMTYyNiw5ICsxNTU4LDcgQEAKIAlpZiAoIWNwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAkqY3AgPSAnXDAnOwotCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOwogCWRvbWFpbiA9IHRvbW95b19maW5kX2RvbWFpbihjcCArIDEpOwotCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKIAlpZiAoc3RyaWN0X3N0cnRvdWwoZGF0YSwgMTAsICZwcm9maWxlKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGRvbWFpbiAmJiBwcm9maWxlIDwgVE9NT1lPX01BWF9QUk9GSUxFUwpAQCAtMTY1MCw2ICsxNTgwLDggQEAKICAqICAgICBhd2sgJyB7IGlmICggZG9tYWlubmFtZSA9PSAiIiApIHsgaWYgKCAkMSA9PSAiPGtlcm5lbD4iICkKICAqICAgICBkb21haW5uYW1lID0gJDA7IH0gZWxzZSBpZiAoICQxID09ICJ1c2VfcHJvZmlsZSIgKSB7CiAgKiAgICAgcHJpbnQgJDIgIiAiIGRvbWFpbm5hbWU7IGRvbWFpbm5hbWUgPSAiIjsgfSB9IDsgJworICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX3JlYWRfZG9tYWluX3Byb2ZpbGUoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCiB7CkBAIC0xNjU4LDcgKzE1OTAsNiBAQAogCiAJaWYgKGhlYWQtPnJlYWRfZW9mKQogCQlyZXR1cm4gMDsKLQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGhlYWQtPnJlYWRfdmFyMSwgJnRvbW95b19kb21haW5fbGlzdCkgewogCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CiAJCWRvbWFpbiA9IGxpc3RfZW50cnkocG9zLCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvLCBsaXN0KTsKQEAgLTE2NjksNyArMTYwMCw2IEBACiAJCWlmICghZG9uZSkKIAkJCWJyZWFrOwogCX0KLQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CiAJaGVhZC0+cmVhZF9lb2YgPSBkb25lOwogCXJldHVybiAwOwogfQpAQCAtMTcwNywxMSArMTYzNywxMyBAQAogCQljb25zdCBpbnQgcGlkID0gaGVhZC0+cmVhZF9zdGVwOwogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAJCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IE5VTEw7CisJCXJjdV9yZWFkX2xvY2soKTsKIAkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAkJcCA9IGZpbmRfdGFza19ieV92cGlkKHBpZCk7CiAJCWlmIChwKQogCQkJZG9tYWluID0gdG9tb3lvX3JlYWxfZG9tYWluKHApOwogCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisJCXJjdV9yZWFkX3VubG9jaygpOwogCQlpZiAoZG9tYWluKQogCQkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiJWQgJXUgJXMiLCBwaWQsIGRvbWFpbi0+cHJvZmlsZSwKIAkJCQkJIGRvbWFpbi0+ZG9tYWlubmFtZS0+bmFtZSk7CkBAIC0xNzI2LDYgKzE2NTgsOCBAQAogICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX2V4Y2VwdGlvbl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCiB7CkBAIC0xNzYwLDYgKzE2OTQsOCBAQAogICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVJTlZBTCBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogc3RhdGljIGludCB0b21veW9fcmVhZF9leGNlcHRpb25fcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQogewpAQCAtMTg4OSwxNSArMTgyNSwxMyBAQAogCXRvbW95b19wb2xpY3lfbG9hZGVkID0gdHJ1ZTsKIAl7IC8qIENoZWNrIGFsbCBwcm9maWxlcyBjdXJyZW50bHkgYXNzaWduZWQgdG8gZG9tYWlucyBhcmUgZGVmaW5lZC4gKi8KIAkJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluOwotCQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShkb21haW4sICZ0b21veW9fZG9tYWluX2xpc3QsIGxpc3QpIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7CiAJCQljb25zdCB1OCBwcm9maWxlID0gZG9tYWluLT5wcm9maWxlOwogCQkJaWYgKHRvbW95b19wcm9maWxlX3B0cltwcm9maWxlXSkKIAkJCQljb250aW51ZTsKIAkJCXBhbmljKCJQcm9maWxlICV1ICh1c2VkIGJ5ICclcycpIG5vdCBkZWZpbmVkLlxuIiwKIAkJCSAgICAgIHByb2ZpbGUsIGRvbWFpbi0+ZG9tYWlubmFtZS0+bmFtZSk7CiAJCX0KLQkJdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOwogCX0KIH0KIApAQCAtMTk0NSwxMCArMTg3OSwxMiBAQAogICogQGZpbGU6IFBvaW50ZXIgdG8gInN0cnVjdCBmaWxlIi4KICAqCiAgKiBBc3NvY2lhdGVzIHBvbGljeSBoYW5kbGVyIGFuZCByZXR1cm5zIDAgb24gc3VjY2VzcywgLUVOT01FTSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGFjcXVpcmVzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogc3RhdGljIGludCB0b21veW9fb3Blbl9jb250cm9sKGNvbnN0IHU4IHR5cGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkID0gdG9tb3lvX2FsbG9jKHNpemVvZigqaGVhZCkpOworCXN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkID0ga3phbGxvYyhzaXplb2YoKmhlYWQpLCBHRlBfS0VSTkVMKTsKIAogCWlmICghaGVhZCkKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMDA5LDkgKzE5NDUsOSBAQAogCX0gZWxzZSB7CiAJCWlmICghaGVhZC0+cmVhZGJ1Zl9zaXplKQogCQkJaGVhZC0+cmVhZGJ1Zl9zaXplID0gNDA5NiAqIDI7Ci0JCWhlYWQtPnJlYWRfYnVmID0gdG9tb3lvX2FsbG9jKGhlYWQtPnJlYWRidWZfc2l6ZSk7CisJCWhlYWQtPnJlYWRfYnVmID0ga3phbGxvYyhoZWFkLT5yZWFkYnVmX3NpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoIWhlYWQtPnJlYWRfYnVmKSB7Ci0JCQl0b21veW9fZnJlZShoZWFkKTsKKwkJCWtmcmVlKGhlYWQpOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAl9CkBAIC0yMDIzLDEzICsxOTU5LDE0IEBACiAJCWhlYWQtPndyaXRlID0gTlVMTDsKIAl9IGVsc2UgaWYgKGhlYWQtPndyaXRlKSB7CiAJCWhlYWQtPndyaXRlYnVmX3NpemUgPSA0MDk2ICogMjsKLQkJaGVhZC0+d3JpdGVfYnVmID0gdG9tb3lvX2FsbG9jKGhlYWQtPndyaXRlYnVmX3NpemUpOworCQloZWFkLT53cml0ZV9idWYgPSBremFsbG9jKGhlYWQtPndyaXRlYnVmX3NpemUsIEdGUF9LRVJORUwpOwogCQlpZiAoIWhlYWQtPndyaXRlX2J1ZikgewotCQkJdG9tb3lvX2ZyZWUoaGVhZC0+cmVhZF9idWYpOwotCQkJdG9tb3lvX2ZyZWUoaGVhZCk7CisJCQlrZnJlZShoZWFkLT5yZWFkX2J1Zik7CisJCQlrZnJlZShoZWFkKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJfQorCWhlYWQtPnJlYWRlcl9pZHggPSB0b21veW9fcmVhZF9sb2NrKCk7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaGVhZDsKIAkvKgogCSAqIENhbGwgdGhlIGhhbmRsZXIgbm93IGlmIHRoZSBmaWxlIGlzCkBAIC0yMDUxLDYgKzE5ODgsOCBAQAogICogQGJ1ZmZlcl9sZW46IFNpemUgb2YgQGJ1ZmZlci4KICAqCiAgKiBSZXR1cm5zIGJ5dGVzIHJlYWQgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX3JlYWRfY29udHJvbChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkJCSAgICAgICBjb25zdCBpbnQgYnVmZmVyX2xlbikKQEAgLTIwOTQsNiArMjAzMyw4IEBACiAgKiBAYnVmZmVyX2xlbjogU2l6ZSBvZiBAYnVmZmVyLgogICoKICAqIFJldHVybnMgQGJ1ZmZlcl9sZW4gb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX3dyaXRlX2NvbnRyb2woc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJCQkJY29uc3QgaW50IGJ1ZmZlcl9sZW4pCkBAIC0yMTQ0LDUyICsyMDg1LDI5IEBACiAgKiBAZmlsZTogUG9pbnRlciB0byAic3RydWN0IGZpbGUiLgogICoKICAqIFJlbGVhc2VzIG1lbW9yeSBhbmQgcmV0dXJucyAwLgorICoKKyAqIENhbGxlciBsb29zZXMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgaW50IHRvbW95b19jbG9zZV9jb250cm9sKHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWNvbnN0IGJvb2wgaXNfd3JpdGUgPSAhIWhlYWQtPndyaXRlX2J1ZjsKIAorCXRvbW95b19yZWFkX3VubG9jayhoZWFkLT5yZWFkZXJfaWR4KTsKIAkvKiBSZWxlYXNlIG1lbW9yeSB1c2VkIGZvciBwb2xpY3kgSS9PLiAqLwotCXRvbW95b19mcmVlKGhlYWQtPnJlYWRfYnVmKTsKKwlrZnJlZShoZWFkLT5yZWFkX2J1Zik7CiAJaGVhZC0+cmVhZF9idWYgPSBOVUxMOwotCXRvbW95b19mcmVlKGhlYWQtPndyaXRlX2J1Zik7CisJa2ZyZWUoaGVhZC0+d3JpdGVfYnVmKTsKIAloZWFkLT53cml0ZV9idWYgPSBOVUxMOwotCXRvbW95b19mcmVlKGhlYWQpOworCWtmcmVlKGhlYWQpOwogCWhlYWQgPSBOVUxMOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IE5VTEw7CisJaWYgKGlzX3dyaXRlKQorCQl0b21veW9fcnVuX2djKCk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qKgotICogdG9tb3lvX2FsbG9jX2FjbF9lbGVtZW50IC0gQWxsb2NhdGUgcGVybWFuZW50IG1lbW9yeSBmb3IgQUNMIGVudHJ5LgotICoKLSAqIEBhY2xfdHlwZTogIFR5cGUgb2YgQUNMIGVudHJ5LgotICoKLSAqIFJldHVybnMgcG9pbnRlciB0byB0aGUgQUNMIGVudHJ5IG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgotICovCi12b2lkICp0b21veW9fYWxsb2NfYWNsX2VsZW1lbnQoY29uc3QgdTggYWNsX3R5cGUpCi17Ci0JaW50IGxlbjsKLQlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7Ci0KLQlzd2l0Y2ggKGFjbF90eXBlKSB7Ci0JY2FzZSBUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0w6Ci0JCWxlbiA9IHNpemVvZihzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQpOwotCQlicmVhazsKLQljYXNlIFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTDoKLQkJbGVuID0gc2l6ZW9mKHN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBOVUxMOwotCX0KLQlwdHIgPSB0b21veW9fYWxsb2NfZWxlbWVudChsZW4pOwotCWlmICghcHRyKQotCQlyZXR1cm4gTlVMTDsKLQlwdHItPnR5cGUgPSBhY2xfdHlwZTsKLQlyZXR1cm4gcHRyOwotfQotCi0vKioKICAqIHRvbW95b19vcGVuIC0gb3BlbigpIGZvciAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KICAqCiAgKiBAaW5vZGU6IFBvaW50ZXIgdG8gInN0cnVjdCBpbm9kZSIuCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vY29tbW9uLmggYi9zZWN1cml0eS90b21veW8vY29tbW9uLmgKaW5kZXggOTIxNjlkMi4uNjdiZDIyZCAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oCisrKyBiL3NlY3VyaXR5L3RvbW95by9jb21tb24uaApAQCAtMSwxMiArMSw5IEBACiAvKgogICogc2VjdXJpdHkvdG9tb3lvL2NvbW1vbi5oCiAgKgotICogQ29tbW9uIGZ1bmN0aW9ucyBmb3IgVE9NT1lPLgorICogSGVhZGVyIGZpbGUgZm9yIFRPTU9ZTy4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOSAgTlRUIERBVEEgQ09SUE9SQVRJT04KLSAqCi0gKiBWZXJzaW9uOiAyLjIuMCAgIDIwMDkvMDQvMDEKLSAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCAgTlRUIERBVEEgQ09SUE9SQVRJT04KICAqLwogCiAjaWZuZGVmIF9TRUNVUklUWV9UT01PWU9fQ09NTU9OX0gKQEAgLTIyLDkgKzE5LDExOSBAQAogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvbW91bnQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvY3JlZC5oPgorc3RydWN0IGxpbnV4X2JpbnBybTsKIAotc3RydWN0IGRlbnRyeTsKLXN0cnVjdCB2ZnNtb3VudDsKKy8qKioqKioqKioqIENvbnN0YW50cyBkZWZpbml0aW9ucy4gKioqKioqKioqKi8KKworLyoKKyAqIFRPTU9ZTyB1c2VzIHRoaXMgaGFzaCBvbmx5IHdoZW4gYXBwZW5kaW5nIGEgc3RyaW5nIGludG8gdGhlIHN0cmluZworICogdGFibGUuIEZyZXF1ZW5jeSBvZiBhcHBlbmRpbmcgc3RyaW5ncyBpcyB2ZXJ5IGxvdy4gU28gd2UgZG9uJ3QgbmVlZAorICogbGFyZ2UgKGUuZy4gNjRrKSBoYXNoIHNpemUuIDI1NiB3aWxsIGJlIHN1ZmZpY2llbnQuCisgKi8KKyNkZWZpbmUgVE9NT1lPX0hBU0hfQklUUyAgOAorI2RlZmluZSBUT01PWU9fTUFYX0hBU0ggKDF1PDxUT01PWU9fSEFTSF9CSVRTKQorCisvKgorICogVGhpcyBpcyB0aGUgbWF4IGxlbmd0aCBvZiBhIHRva2VuLgorICoKKyAqIEEgdG9rZW4gY29uc2lzdHMgb2Ygb25seSBBU0NJSSBwcmludGFibGUgY2hhcmFjdGVycy4KKyAqIE5vbiBwcmludGFibGUgY2hhcmFjdGVycyBpbiBhIHRva2VuIGlzIHJlcHJlc2VudGVkIGluIFxvb28gc3R5bGUKKyAqIG9jdGFsIHN0cmluZy4gVGh1cywgXCBpdHNlbGYgaXMgcmVwcmVzZW50ZWQgYXMgXFwuCisgKi8KKyNkZWZpbmUgVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gNDAwMAorCisvKiBQcm9maWxlIG51bWJlciBpcyBhbiBpbnRlZ2VyIGJldHdlZW4gMCBhbmQgMjU1LiAqLworI2RlZmluZSBUT01PWU9fTUFYX1BST0ZJTEVTIDI1NgorCisvKiBLZXl3b3JkcyBmb3IgQUNMcy4gKi8KKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfQUxJQVMgICAgICAgICAgICAgICAgICAgICAiYWxpYXMgIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9BTExPV19SRUFEICAgICAgICAgICAgICAgICJhbGxvd19yZWFkICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfREVMRVRFICAgICAgICAgICAgICAgICAgICAiZGVsZXRlICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfREVOWV9SRVdSSVRFICAgICAgICAgICAgICAiZGVueV9yZXdyaXRlICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfRklMRV9QQVRURVJOICAgICAgICAgICAgICAiZmlsZV9wYXR0ZXJuICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfSU5JVElBTElaRV9ET01BSU4gICAgICAgICAiaW5pdGlhbGl6ZV9kb21haW4gIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9LRUVQX0RPTUFJTiAgICAgICAgICAgICAgICJrZWVwX2RvbWFpbiAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX05PX0lOSVRJQUxJWkVfRE9NQUlOICAgICAgIm5vX2luaXRpYWxpemVfZG9tYWluICIKKyNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfTk9fS0VFUF9ET01BSU4gICAgICAgICAgICAibm9fa2VlcF9kb21haW4gIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICJzZWxlY3QgIgorI2RlZmluZSBUT01PWU9fS0VZV09SRF9VU0VfUFJPRklMRSAgICAgICAgICAgICAgICJ1c2VfcHJvZmlsZSAiCisjZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCAgImlnbm9yZV9nbG9iYWxfYWxsb3dfcmVhZCIKKy8qIEEgZG9tYWluIGRlZmluaXRpb24gc3RhcnRzIHdpdGggPGtlcm5lbD4uICovCisjZGVmaW5lIFRPTU9ZT19ST09UX05BTUUgICAgICAgICAgICAgICAgICAgICAgICAgIjxrZXJuZWw+IgorI2RlZmluZSBUT01PWU9fUk9PVF9OQU1FX0xFTiAgICAgICAgICAgICAgICAgICAgIChzaXplb2YoVE9NT1lPX1JPT1RfTkFNRSkgLSAxKQorCisvKiBJbmRleCBudW1iZXJzIGZvciBBY2Nlc3MgQ29udHJvbHMuICovCitlbnVtIHRvbW95b19tYWNfaW5kZXggeworCVRPTU9ZT19NQUNfRk9SX0ZJTEUsICAvKiBkb21haW5fcG9saWN5LmNvbmYgKi8KKwlUT01PWU9fTUFYX0FDQ0VQVF9FTlRSWSwKKwlUT01PWU9fVkVSQk9TRSwKKwlUT01PWU9fTUFYX0NPTlRST0xfSU5ERVgKK307CisKKy8qIEluZGV4IG51bWJlcnMgZm9yIEFjY2VzcyBDb250cm9scy4gKi8KK2VudW0gdG9tb3lvX2FjbF9lbnRyeV90eXBlX2luZGV4IHsKKwlUT01PWU9fVFlQRV9QQVRIX0FDTCwKKwlUT01PWU9fVFlQRV9QQVRIMl9BQ0wsCit9OworCisvKiBJbmRleCBudW1iZXJzIGZvciBGaWxlIENvbnRyb2xzLiAqLworCisvKgorICogVFlQRV9SRUFEX1dSSVRFX0FDTCBpcyBzcGVjaWFsLiBUWVBFX1JFQURfV1JJVEVfQUNMIGlzIGF1dG9tYXRpY2FsbHkgc2V0CisgKiBpZiBib3RoIFRZUEVfUkVBRF9BQ0wgYW5kIFRZUEVfV1JJVEVfQUNMIGFyZSBzZXQuIEJvdGggVFlQRV9SRUFEX0FDTCBhbmQKKyAqIFRZUEVfV1JJVEVfQUNMIGFyZSBhdXRvbWF0aWNhbGx5IHNldCBpZiBUWVBFX1JFQURfV1JJVEVfQUNMIGlzIHNldC4KKyAqIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIGVpdGhlciBUWVBFX1JFQURfQUNMIG9yCisgKiBUWVBFX1dSSVRFX0FDTCBpcyBjbGVhcmVkLiBCb3RoIFRZUEVfUkVBRF9BQ0wgYW5kIFRZUEVfV1JJVEVfQUNMIGFyZQorICogYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgY2xlYXJlZC4KKyAqLworCitlbnVtIHRvbW95b19wYXRoX2FjbF9pbmRleCB7CisJVE9NT1lPX1RZUEVfUkVBRF9XUklURSwKKwlUT01PWU9fVFlQRV9FWEVDVVRFLAorCVRPTU9ZT19UWVBFX1JFQUQsCisJVE9NT1lPX1RZUEVfV1JJVEUsCisJVE9NT1lPX1RZUEVfQ1JFQVRFLAorCVRPTU9ZT19UWVBFX1VOTElOSywKKwlUT01PWU9fVFlQRV9NS0RJUiwKKwlUT01PWU9fVFlQRV9STURJUiwKKwlUT01PWU9fVFlQRV9NS0ZJRk8sCisJVE9NT1lPX1RZUEVfTUtTT0NLLAorCVRPTU9ZT19UWVBFX01LQkxPQ0ssCisJVE9NT1lPX1RZUEVfTUtDSEFSLAorCVRPTU9ZT19UWVBFX1RSVU5DQVRFLAorCVRPTU9ZT19UWVBFX1NZTUxJTkssCisJVE9NT1lPX1RZUEVfUkVXUklURSwKKwlUT01PWU9fVFlQRV9JT0NUTCwKKwlUT01PWU9fVFlQRV9DSE1PRCwKKwlUT01PWU9fVFlQRV9DSE9XTiwKKwlUT01PWU9fVFlQRV9DSEdSUCwKKwlUT01PWU9fVFlQRV9DSFJPT1QsCisJVE9NT1lPX1RZUEVfTU9VTlQsCisJVE9NT1lPX1RZUEVfVU1PVU5ULAorCVRPTU9ZT19NQVhfUEFUSF9PUEVSQVRJT04KK307CisKK2VudW0gdG9tb3lvX3BhdGgyX2FjbF9pbmRleCB7CisJVE9NT1lPX1RZUEVfTElOSywKKwlUT01PWU9fVFlQRV9SRU5BTUUsCisJVE9NT1lPX1RZUEVfUElWT1RfUk9PVCwKKwlUT01PWU9fTUFYX1BBVEgyX09QRVJBVElPTgorfTsKKworZW51bSB0b21veW9fc2VjdXJpdHlmc19pbnRlcmZhY2VfaW5kZXggeworCVRPTU9ZT19ET01BSU5QT0xJQ1ksCisJVE9NT1lPX0VYQ0VQVElPTlBPTElDWSwKKwlUT01PWU9fRE9NQUlOX1NUQVRVUywKKwlUT01PWU9fUFJPQ0VTU19TVEFUVVMsCisJVE9NT1lPX01FTUlORk8sCisJVE9NT1lPX1NFTEZET01BSU4sCisJVE9NT1lPX1ZFUlNJT04sCisJVE9NT1lPX1BST0ZJTEUsCisJVE9NT1lPX01BTkFHRVIKK307CisKKy8qKioqKioqKioqIFN0cnVjdHVyZSBkZWZpbml0aW9ucy4gKioqKioqKioqKi8KIAogLyoKICAqIHRvbW95b19wYWdlX2J1ZmZlciBpcyBhIHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkIGZvciBob2xkaW5nIGEgcGF0aG5hbWUKQEAgLTY2LDEzICsxNzMsMTQgQEAKIH07CiAKIC8qCi0gKiBUaGlzIGlzIHRoZSBtYXggbGVuZ3RoIG9mIGEgdG9rZW4uCi0gKgotICogQSB0b2tlbiBjb25zaXN0cyBvZiBvbmx5IEFTQ0lJIHByaW50YWJsZSBjaGFyYWN0ZXJzLgotICogTm9uIHByaW50YWJsZSBjaGFyYWN0ZXJzIGluIGEgdG9rZW4gaXMgcmVwcmVzZW50ZWQgaW4gXG9vbyBzdHlsZQotICogb2N0YWwgc3RyaW5nLiBUaHVzLCBcIGl0c2VsZiBpcyByZXByZXNlbnRlZCBhcyBcXC4KKyAqIHRvbW95b19uYW1lX2VudHJ5IGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGxpbmtpbmcKKyAqICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgaW50byB0b21veW9fbmFtZV9saXN0IC4KICAqLwotI2RlZmluZSBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTiA0MDAwCitzdHJ1Y3QgdG9tb3lvX25hbWVfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlhdG9taWNfdCB1c2VyczsKKwlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBlbnRyeTsKK307CiAKIC8qCiAgKiB0b21veW9fcGF0aF9pbmZvX3dpdGhfZGF0YSBpcyBhIHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkIGZvciBob2xkaW5nIGEKQEAgLTg5LDcgKzE5Nyw3IEBACiAgKiAic3RydWN0IHRvbW95b19wYXRoX2luZm9fd2l0aF9kYXRhIi4KICAqLwogc3RydWN0IHRvbW95b19wYXRoX2luZm9fd2l0aF9kYXRhIHsKLQkvKiBLZWVwICJoZWFkIiBmaXJzdCwgZm9yIHRoaXMgcG9pbnRlciBpcyBwYXNzZWQgdG8gdG9tb3lvX2ZyZWUoKS4gKi8KKwkvKiBLZWVwICJoZWFkIiBmaXJzdCwgZm9yIHRoaXMgcG9pbnRlciBpcyBwYXNzZWQgdG8ga2ZyZWUoKS4gKi8KIAlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyBoZWFkOwogCWNoYXIgYmFycmllcjFbMTZdOyAvKiBTYWZlZ3VhcmQgZm9yIG92ZXJydW4uICovCiAJY2hhciBib2R5W1RPTU9ZT19NQVhfUEFUSE5BTUVfTEVOXTsKQEAgLTEwMSwzMCArMjA5LDE5IEBACiAgKgogICogICgxKSAibGlzdCIgd2hpY2ggaXMgbGlua2VkIHRvIHRoZSAtPmFjbF9pbmZvX2xpc3Qgb2YKICAqICAgICAgInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iCi0gKiAgKDIpICJ0eXBlIiB3aGljaCB0ZWxscwotICogICAgICAoYSkgdHlwZSAmIDB4N0YgOiB0eXBlIG9mIHRoZSBlbnRyeSAoZWl0aGVyCi0gKiAgICAgICAgICAic3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkIiBvcgotICogICAgICAgICAgInN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCIpCi0gKiAgICAgIChiKSB0eXBlICYgMHg4MCA6IHdoZXRoZXIgdGhlIGVudHJ5IGlzIG1hcmtlZCBhcyAiZGVsZXRlZCIuCisgKiAgKDIpICJ0eXBlIiB3aGljaCB0ZWxscyB0eXBlIG9mIHRoZSBlbnRyeSAoZWl0aGVyCisgKiAgICAgICJzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsIiBvciAic3RydWN0IHRvbW95b19wYXRoMl9hY2wiKS4KICAqCiAgKiBQYWNraW5nICJzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvIiBhbGxvd3MKLSAqICJzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQiIHRvIGVtYmVkICJ1MTYiIGFuZAotICogInN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCIgdG8gZW1iZWQgInU4IgorICogInN0cnVjdCB0b21veW9fcGF0aF9hY2wiIHRvIGVtYmVkICJ1OCIgKyAidTE2IiBhbmQKKyAqICJzdHJ1Y3QgdG9tb3lvX3BhdGgyX2FjbCIgdG8gZW1iZWQgInU4IgogICogd2l0aG91dCBlbmxhcmdpbmcgdGhlaXIgc3RydWN0dXJlIHNpemUuCiAgKi8KIHN0cnVjdCB0b21veW9fYWNsX2luZm8gewogCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQkvKgotCSAqIFR5cGUgb2YgdGhpcyBBQ0wgZW50cnkuCi0JICoKLQkgKiBNU0IgaXMgaXNfZGVsZXRlZCBmbGFnLgotCSAqLwogCXU4IHR5cGU7CiB9IF9fcGFja2VkOwogCi0vKiBUaGlzIEFDTCBlbnRyeSBpcyBkZWxldGVkLiAgICAgICAgICAgKi8KLSNkZWZpbmUgVE9NT1lPX0FDTF9ERUxFVEVEICAgICAgICAweDgwCi0KIC8qCiAgKiB0b21veW9fZG9tYWluX2luZm8gaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZyBwZXJtaXNzaW9ucwogICogKGUuZy4gImFsbG93X3JlYWQgL2xpYi9saWJjLTIuNS5zbyIpIGdpdmVuIHRvIGVhY2ggZG9tYWluLgpAQCAtMTM4LDcgKzIzNSwxNyBAQAogICogICAgICAiZGVsZXRlZCIsIGZhbHNlIG90aGVyd2lzZS4KICAqICAoNikgInF1b3RhX3dhcm5lZCIgaXMgYSBib29sIHdoaWNoIGlzIHVzZWQgZm9yIHN1cHByZXNzaW5nIHdhcm5pbmcgbWVzc2FnZQogICogICAgICB3aGVuIGxlYXJuaW5nIG1vZGUgbGVhcm5lZCB0b28gbXVjaCBlbnRyaWVzLgotICogICg3KSAiZmxhZ3MiIHdoaWNoIHJlbWVtYmVycyB0aGlzIGRvbWFpbidzIGF0dHJpYnV0ZXMuCisgKiAgKDcpICJpZ25vcmVfZ2xvYmFsX2FsbG93X3JlYWQiIGlzIGEgYm9vbCB3aGljaCBpcyB0cnVlIGlmIHRoaXMgZG9tYWluCisgKiAgICAgIHNob3VsZCBpZ25vcmUgImFsbG93X3JlYWQiIGRpcmVjdGl2ZSBpbiBleGNlcHRpb24gcG9saWN5LgorICogICg4KSAidHJhbnNpdGlvbl9mYWlsZWQiIGlzIGEgYm9vbCB3aGljaCBpcyBzZXQgdG8gdHJ1ZSB3aGVuIHRoaXMgZG9tYWluIHdhcworICogICAgICB1bmFibGUgdG8gY3JlYXRlIGEgbmV3IGRvbWFpbiBhdCB0b21veW9fZmluZF9uZXh0X2RvbWFpbigpIGJlY2F1c2UgdGhlCisgKiAgICAgIG5hbWUgb2YgdGhlIGRvbWFpbiB0byBiZSBjcmVhdGVkIHdhcyB0b28gbG9uZyBvciBpdCBjb3VsZCBub3QgYWxsb2NhdGUKKyAqICAgICAgbWVtb3J5LiBJZiBzZXQgdG8gdHJ1ZSwgbW9yZSB0aGFuIG9uZSBwcm9jZXNzIGNvbnRpbnVlZCBleGVjdmUoKQorICogICAgICB3aXRob3V0IGRvbWFpbiB0cmFuc2l0aW9uLgorICogICg5KSAidXNlcnMiIGlzIGFuIGF0b21pY190IHRoYXQgaG9sZHMgaG93IG1hbnkgInN0cnVjdCBjcmVkIi0+c2VjdXJpdHkKKyAqICAgICAgYXJlIHJlZmVycmluZyB0aGlzICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4gSWYgaXNfZGVsZXRlZCA9PSB0cnVlCisgKiAgICAgIGFuZCB1c2VycyA9PSAwLCB0aGlzIHN0cnVjdCB3aWxsIGJlIGtmcmVlKClkIHVwb24gbmV4dCBnYXJiYWdlCisgKiAgICAgIGNvbGxlY3Rpb24uCiAgKgogICogQSBkb21haW4ncyBsaWZlY3ljbGUgaXMgYW4gYW5hbG9neSBvZiBmaWxlcyBvbiAvIGRpcmVjdG9yeS4KICAqIE11bHRpcGxlIGRvbWFpbnMgd2l0aCB0aGUgc2FtZSBkb21haW5uYW1lIGNhbm5vdCBiZSBjcmVhdGVkIChhcyB3aXRoCkBAIC0xNTUsMjUgKzI2MiwxMyBAQAogCXU4IHByb2ZpbGU7ICAgICAgICAvKiBQcm9maWxlIG51bWJlciB0byB1c2UuICovCiAJYm9vbCBpc19kZWxldGVkOyAgIC8qIERlbGV0ZSBmbGFnLiAgICAgICAgICAgKi8KIAlib29sIHF1b3RhX3dhcm5lZDsgLyogUXVvdGEgd2Fybm5pbmcgZmxhZy4gICAqLwotCS8qIERPTUFJTl9GTEFHU18qLiBVc2UgdG9tb3lvX3NldF9kb21haW5fZmxhZygpIHRvIG1vZGlmeS4gKi8KLQl1OCBmbGFnczsKKwlib29sIGlnbm9yZV9nbG9iYWxfYWxsb3dfcmVhZDsgLyogSWdub3JlICJhbGxvd19yZWFkIiBmbGFnLiAqLworCWJvb2wgdHJhbnNpdGlvbl9mYWlsZWQ7IC8qIERvbWFpbiB0cmFuc2l0aW9uIGZhaWxlZCBmbGFnLiAqLworCWF0b21pY190IHVzZXJzOyAvKiBOdW1iZXIgb2YgcmVmZXJyaW5nIGNyZWRlbnRpYWxzLiAqLwogfTsKIAotLyogUHJvZmlsZSBudW1iZXIgaXMgYW4gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDI1NS4gKi8KLSNkZWZpbmUgVE9NT1lPX01BWF9QUk9GSUxFUyAyNTYKLQotLyogSWdub3JlICJhbGxvd19yZWFkIiBkaXJlY3RpdmUgaW4gZXhjZXB0aW9uIHBvbGljeS4gKi8KLSNkZWZpbmUgVE9NT1lPX0RPTUFJTl9GTEFHU19JR05PUkVfR0xPQkFMX0FMTE9XX1JFQUQgMQogLyoKLSAqIFRoaXMgZG9tYWluIHdhcyB1bmFibGUgdG8gY3JlYXRlIGEgbmV3IGRvbWFpbiBhdCB0b21veW9fZmluZF9uZXh0X2RvbWFpbigpCi0gKiBiZWNhdXNlIHRoZSBuYW1lIG9mIHRoZSBkb21haW4gdG8gYmUgY3JlYXRlZCB3YXMgdG9vIGxvbmcgb3IKLSAqIGl0IGNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkuCi0gKiBNb3JlIHRoYW4gb25lIHByb2Nlc3MgY29udGludWVkIGV4ZWN2ZSgpIHdpdGhvdXQgZG9tYWluIHRyYW5zaXRpb24uCi0gKi8KLSNkZWZpbmUgVE9NT1lPX0RPTUFJTl9GTEFHU19UUkFOU0lUSU9OX0ZBSUxFRCAgICAgICAgMgotCi0vKgotICogdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZyBhbgorICogdG9tb3lvX3BhdGhfYWNsIGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcgYW4KICAqIGVudHJ5IHdpdGggb25lIHBhdGhuYW1lIG9wZXJhdGlvbiAoZS5nLiBvcGVuKCksIG1rZGlyKCkpLgogICogSXQgaGFzIGZvbGxvd2luZyBmaWVsZHMuCiAgKgpAQCAtMTg0LDE4ICsyNzksMjEgQEAKICAqIERpcmVjdGl2ZXMgaGVsZCBieSB0aGlzIHN0cnVjdHVyZSBhcmUgImFsbG93X3JlYWQvd3JpdGUiLCAiYWxsb3dfZXhlY3V0ZSIsCiAgKiAiYWxsb3dfcmVhZCIsICJhbGxvd193cml0ZSIsICJhbGxvd19jcmVhdGUiLCAiYWxsb3dfdW5saW5rIiwgImFsbG93X21rZGlyIiwKICAqICJhbGxvd19ybWRpciIsICJhbGxvd19ta2ZpZm8iLCAiYWxsb3dfbWtzb2NrIiwgImFsbG93X21rYmxvY2siLAotICogImFsbG93X21rY2hhciIsICJhbGxvd190cnVuY2F0ZSIsICJhbGxvd19zeW1saW5rIiBhbmQgImFsbG93X3Jld3JpdGUiLgorICogImFsbG93X21rY2hhciIsICJhbGxvd190cnVuY2F0ZSIsICJhbGxvd19zeW1saW5rIiwgImFsbG93X3Jld3JpdGUiLAorICogImFsbG93X2NobW9kIiwgImFsbG93X2Nob3duIiwgImFsbG93X2NoZ3JwIiwgImFsbG93X2Nocm9vdCIsICJhbGxvd19tb3VudCIKKyAqIGFuZCAiYWxsb3dfdW5tb3VudCIuCiAgKi8KLXN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCB7Ci0Jc3RydWN0IHRvbW95b19hY2xfaW5mbyBoZWFkOyAvKiB0eXBlID0gVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMICovCitzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsIHsKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvIGhlYWQ7IC8qIHR5cGUgPSBUT01PWU9fVFlQRV9QQVRIX0FDTCAqLworCXU4IHBlcm1faGlnaDsKIAl1MTYgcGVybTsKIAkvKiBQb2ludGVyIHRvIHNpbmdsZSBwYXRobmFtZS4gKi8KIAljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWU7CiB9OwogCiAvKgotICogdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZyBhbgotICogZW50cnkgd2l0aCB0d28gcGF0aG5hbWVzIG9wZXJhdGlvbiAoaS5lLiBsaW5rKCkgYW5kIHJlbmFtZSgpKS4KKyAqIHRvbW95b19wYXRoMl9hY2wgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZyBhbgorICogZW50cnkgd2l0aCB0d28gcGF0aG5hbWVzIG9wZXJhdGlvbiAoaS5lLiBsaW5rKCksIHJlbmFtZSgpIGFuZCBwaXZvdF9yb290KCkpLgogICogSXQgaGFzIGZvbGxvd2luZyBmaWVsZHMuCiAgKgogICogICgxKSAiaGVhZCIgd2hpY2ggaXMgYSAic3RydWN0IHRvbW95b19hY2xfaW5mbyIuCkBAIC0yMDMsMTAgKzMwMSwxMSBAQAogICogICgzKSAiZmlsZW5hbWUxIiBpcyB0aGUgc291cmNlL29sZCBwYXRobmFtZS4KICAqICAoNCkgImZpbGVuYW1lMiIgaXMgdGhlIGRlc3RpbmF0aW9uL25ldyBwYXRobmFtZS4KICAqCi0gKiBEaXJlY3RpdmVzIGhlbGQgYnkgdGhpcyBzdHJ1Y3R1cmUgYXJlICJhbGxvd19yZW5hbWUiIGFuZCAiYWxsb3dfbGluayIuCisgKiBEaXJlY3RpdmVzIGhlbGQgYnkgdGhpcyBzdHJ1Y3R1cmUgYXJlICJhbGxvd19yZW5hbWUiLCAiYWxsb3dfbGluayIgYW5kCisgKiAiYWxsb3dfcGl2b3Rfcm9vdCIuCiAgKi8KLXN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCB7Ci0Jc3RydWN0IHRvbW95b19hY2xfaW5mbyBoZWFkOyAvKiB0eXBlID0gVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMICovCitzdHJ1Y3QgdG9tb3lvX3BhdGgyX2FjbCB7CisJc3RydWN0IHRvbW95b19hY2xfaW5mbyBoZWFkOyAvKiB0eXBlID0gVE9NT1lPX1RZUEVfUEFUSDJfQUNMICovCiAJdTggcGVybTsKIAkvKiBQb2ludGVyIHRvIHNpbmdsZSBwYXRobmFtZS4gKi8KIAljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUxOwpAQCAtMjE0LDI5ICszMTMsNiBAQAogCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZTI7CiB9OwogCi0vKiBLZXl3b3JkcyBmb3IgQUNMcy4gKi8KLSNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfQUxJQVMgICAgICAgICAgICAgICAgICAgICAiYWxpYXMgIgotI2RlZmluZSBUT01PWU9fS0VZV09SRF9BTExPV19SRUFEICAgICAgICAgICAgICAgICJhbGxvd19yZWFkICIKLSNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfREVMRVRFICAgICAgICAgICAgICAgICAgICAiZGVsZXRlICIKLSNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfREVOWV9SRVdSSVRFICAgICAgICAgICAgICAiZGVueV9yZXdyaXRlICIKLSNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfRklMRV9QQVRURVJOICAgICAgICAgICAgICAiZmlsZV9wYXR0ZXJuICIKLSNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfSU5JVElBTElaRV9ET01BSU4gICAgICAgICAiaW5pdGlhbGl6ZV9kb21haW4gIgotI2RlZmluZSBUT01PWU9fS0VZV09SRF9LRUVQX0RPTUFJTiAgICAgICAgICAgICAgICJrZWVwX2RvbWFpbiAiCi0jZGVmaW5lIFRPTU9ZT19LRVlXT1JEX05PX0lOSVRJQUxJWkVfRE9NQUlOICAgICAgIm5vX2luaXRpYWxpemVfZG9tYWluICIKLSNkZWZpbmUgVE9NT1lPX0tFWVdPUkRfTk9fS0VFUF9ET01BSU4gICAgICAgICAgICAibm9fa2VlcF9kb21haW4gIgotI2RlZmluZSBUT01PWU9fS0VZV09SRF9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICJzZWxlY3QgIgotI2RlZmluZSBUT01PWU9fS0VZV09SRF9VU0VfUFJPRklMRSAgICAgICAgICAgICAgICJ1c2VfcHJvZmlsZSAiCi0jZGVmaW5lIFRPTU9ZT19LRVlXT1JEX0lHTk9SRV9HTE9CQUxfQUxMT1dfUkVBRCAgImlnbm9yZV9nbG9iYWxfYWxsb3dfcmVhZCIKLS8qIEEgZG9tYWluIGRlZmluaXRpb24gc3RhcnRzIHdpdGggPGtlcm5lbD4uICovCi0jZGVmaW5lIFRPTU9ZT19ST09UX05BTUUgICAgICAgICAgICAgICAgICAgICAgICAgIjxrZXJuZWw+IgotI2RlZmluZSBUT01PWU9fUk9PVF9OQU1FX0xFTiAgICAgICAgICAgICAgICAgICAgIChzaXplb2YoVE9NT1lPX1JPT1RfTkFNRSkgLSAxKQotCi0vKiBJbmRleCBudW1iZXJzIGZvciBBY2Nlc3MgQ29udHJvbHMuICovCi0jZGVmaW5lIFRPTU9ZT19NQUNfRk9SX0ZJTEUgICAgICAgICAgICAgICAgICAwICAvKiBkb21haW5fcG9saWN5LmNvbmYgKi8KLSNkZWZpbmUgVE9NT1lPX01BWF9BQ0NFUFRfRU5UUlkgICAgICAgICAgICAgIDEKLSNkZWZpbmUgVE9NT1lPX1ZFUkJPU0UgICAgICAgICAgICAgICAgICAgICAgIDIKLSNkZWZpbmUgVE9NT1lPX01BWF9DT05UUk9MX0lOREVYICAgICAgICAgICAgIDMKLQogLyoKICAqIHRvbW95b19pb19idWZmZXIgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgcmVhZGluZyBhbmQgbW9kaWZ5aW5nCiAgKiBjb25maWd1cmF0aW9uIHZpYSAvc3lzL2tlcm5lbC9zZWN1cml0eS90b21veW8vIGludGVyZmFjZS4KQEAgLTI2NSw2ICszNDEsOCBAQAogCWludCAoKndyaXRlKSAoc3RydWN0IHRvbW95b19pb19idWZmZXIgKik7CiAJLyogRXhjbHVzaXZlIGxvY2sgZm9yIHRoaXMgc3RydWN0dXJlLiAgICovCiAJc3RydWN0IG11dGV4IGlvX3NlbTsKKwkvKiBJbmRleCByZXR1cm5lZCBieSB0b21veW9fcmVhZF9sb2NrKCkuICovCisJaW50IHJlYWRlcl9pZHg7CiAJLyogVGhlIHBvc2l0aW9uIGN1cnJlbnRseSByZWFkaW5nIGZyb20uICovCiAJc3RydWN0IGxpc3RfaGVhZCAqcmVhZF92YXIxOwogCS8qIEV4dHJhIHZhcmlhYmxlcyBmb3IgcmVhZGluZy4gICAgICAgICAqLwpAQCAtMjkzLDE4ICszNzEsMTU5IEBACiAJaW50IHdyaXRlYnVmX3NpemU7CiB9OwogCisvKgorICogdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZworICogImFsbG93X3JlYWQiIGVudHJpZXMuCisgKiBJdCBoYXMgZm9sbG93aW5nIGZpZWxkcy4KKyAqCisgKiAgKDEpICJsaXN0IiB3aGljaCBpcyBsaW5rZWQgdG8gdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QgLgorICogICgyKSAiZmlsZW5hbWUiIGlzIGEgcGF0aG5hbWUgd2hpY2ggaXMgYWxsb3dlZCB0byBvcGVuKE9fUkRPTkxZKS4KKyAqICAoMykgImlzX2RlbGV0ZWQiIGlzIGEgYm9vbCB3aGljaCBpcyB0cnVlIGlmIG1hcmtlZCBhcyBkZWxldGVkLCBmYWxzZQorICogICAgICBvdGhlcndpc2UuCisgKi8KK3N0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZTsKKwlib29sIGlzX2RlbGV0ZWQ7Cit9OworCisvKgorICogdG9tb3lvX3BhdHRlcm5fZW50cnkgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZworICogInRvbW95b19wYXR0ZXJuX2xpc3QiIGVudHJpZXMuCisgKiBJdCBoYXMgZm9sbG93aW5nIGZpZWxkcy4KKyAqCisgKiAgKDEpICJsaXN0IiB3aGljaCBpcyBsaW5rZWQgdG8gdG9tb3lvX3BhdHRlcm5fbGlzdCAuCisgKiAgKDIpICJwYXR0ZXJuIiBpcyBhIHBhdGhuYW1lIHBhdHRlcm4gd2hpY2ggaXMgdXNlZCBmb3IgY29udmVydGluZyBwYXRobmFtZXMKKyAqICAgICAgdG8gcGF0aG5hbWUgcGF0dGVybnMgZHVyaW5nIGxlYXJuaW5nIG1vZGUuCisgKiAgKDMpICJpc19kZWxldGVkIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiBtYXJrZWQgYXMgZGVsZXRlZCwgZmFsc2UKKyAqICAgICAgb3RoZXJ3aXNlLgorICovCitzdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcGF0dGVybjsKKwlib29sIGlzX2RlbGV0ZWQ7Cit9OworCisvKgorICogdG9tb3lvX25vX3Jld3JpdGVfZW50cnkgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZworICogImRlbnlfcmV3cml0ZSIgZW50cmllcy4KKyAqIEl0IGhhcyBmb2xsb3dpbmcgZmllbGRzLgorICoKKyAqICAoMSkgImxpc3QiIHdoaWNoIGlzIGxpbmtlZCB0byB0b21veW9fbm9fcmV3cml0ZV9saXN0IC4KKyAqICAoMikgInBhdHRlcm4iIGlzIGEgcGF0aG5hbWUgd2hpY2ggaXMgYnkgZGVmYXVsdCBub3QgcGVybWl0dGVkIHRvIG1vZGlmeQorICogICAgICBhbHJlYWR5IGV4aXN0aW5nIGNvbnRlbnQuCisgKiAgKDMpICJpc19kZWxldGVkIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiBtYXJrZWQgYXMgZGVsZXRlZCwgZmFsc2UKKyAqICAgICAgb3RoZXJ3aXNlLgorICovCitzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcGF0dGVybjsKKwlib29sIGlzX2RlbGV0ZWQ7Cit9OworCisvKgorICogdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSBpcyBhIHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkIGZvciBob2xkaW5nCisgKiAiaW5pdGlhbGl6ZV9kb21haW4iIGFuZCAibm9faW5pdGlhbGl6ZV9kb21haW4iIGVudHJpZXMuCisgKiBJdCBoYXMgZm9sbG93aW5nIGZpZWxkcy4KKyAqCisgKiAgKDEpICJsaXN0IiB3aGljaCBpcyBsaW5rZWQgdG8gdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0IC4KKyAqICAoMikgImRvbWFpbm5hbWUiIHdoaWNoIGlzICJhIGRvbWFpbm5hbWUiIG9yICJ0aGUgbGFzdCBjb21wb25lbnQgb2YgYQorICogICAgICBkb21haW5uYW1lIi4gVGhpcyBmaWVsZCBpcyBOVUxMIGlmICJmcm9tIiBjbGF1c2UgaXMgbm90IHNwZWNpZmllZC4KKyAqICAoMykgInByb2dyYW0iIHdoaWNoIGlzIGEgcHJvZ3JhbSdzIHBhdGhuYW1lLgorICogICg0KSAiaXNfZGVsZXRlZCIgaXMgYSBib29sIHdoaWNoIGlzIHRydWUgaWYgbWFya2VkIGFzIGRlbGV0ZWQsIGZhbHNlCisgKiAgICAgIG90aGVyd2lzZS4KKyAqICAoNSkgImlzX25vdCIgaXMgYSBib29sIHdoaWNoIGlzIHRydWUgaWYgIm5vX2luaXRpYWxpemVfZG9tYWluIiwgZmFsc2UKKyAqICAgICAgb3RoZXJ3aXNlLgorICogICg2KSAiaXNfbGFzdF9uYW1lIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiAiZG9tYWlubmFtZSIgaXMgInRoZSBsYXN0CisgKiAgICAgIGNvbXBvbmVudCBvZiBhIGRvbWFpbm5hbWUiLCBmYWxzZSBvdGhlcndpc2UuCisgKi8KK3N0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmRvbWFpbm5hbWU7ICAgIC8qIFRoaXMgbWF5IGJlIE5VTEwgKi8KKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcHJvZ3JhbTsKKwlib29sIGlzX2RlbGV0ZWQ7CisJYm9vbCBpc19ub3Q7ICAgICAgIC8qIFRydWUgaWYgdGhpcyBlbnRyeSBpcyAibm9faW5pdGlhbGl6ZV9kb21haW4iLiAgKi8KKwkvKiBUcnVlIGlmIHRoZSBkb21haW5uYW1lIGlzIHRvbW95b19nZXRfbGFzdF9uYW1lKCkuICovCisJYm9vbCBpc19sYXN0X25hbWU7Cit9OworCisvKgorICogdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZworICogImtlZXBfZG9tYWluIiBhbmQgIm5vX2tlZXBfZG9tYWluIiBlbnRyaWVzLgorICogSXQgaGFzIGZvbGxvd2luZyBmaWVsZHMuCisgKgorICogICgxKSAibGlzdCIgd2hpY2ggaXMgbGlua2VkIHRvIHRvbW95b19kb21haW5fa2VlcGVyX2xpc3QgLgorICogICgyKSAiZG9tYWlubmFtZSIgd2hpY2ggaXMgImEgZG9tYWlubmFtZSIgb3IgInRoZSBsYXN0IGNvbXBvbmVudCBvZiBhCisgKiAgICAgIGRvbWFpbm5hbWUiLgorICogICgzKSAicHJvZ3JhbSIgd2hpY2ggaXMgYSBwcm9ncmFtJ3MgcGF0aG5hbWUuCisgKiAgICAgIFRoaXMgZmllbGQgaXMgTlVMTCBpZiAiZnJvbSIgY2xhdXNlIGlzIG5vdCBzcGVjaWZpZWQuCisgKiAgKDQpICJpc19kZWxldGVkIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiBtYXJrZWQgYXMgZGVsZXRlZCwgZmFsc2UKKyAqICAgICAgb3RoZXJ3aXNlLgorICogICg1KSAiaXNfbm90IiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiAibm9faW5pdGlhbGl6ZV9kb21haW4iLCBmYWxzZQorICogICAgICBvdGhlcndpc2UuCisgKiAgKDYpICJpc19sYXN0X25hbWUiIGlzIGEgYm9vbCB3aGljaCBpcyB0cnVlIGlmICJkb21haW5uYW1lIiBpcyAidGhlIGxhc3QKKyAqICAgICAgY29tcG9uZW50IG9mIGEgZG9tYWlubmFtZSIsIGZhbHNlIG90aGVyd2lzZS4KKyAqLworc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmRvbWFpbm5hbWU7CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnByb2dyYW07ICAgICAgIC8qIFRoaXMgbWF5IGJlIE5VTEwgKi8KKwlib29sIGlzX2RlbGV0ZWQ7CisJYm9vbCBpc19ub3Q7ICAgICAgIC8qIFRydWUgaWYgdGhpcyBlbnRyeSBpcyAibm9fa2VlcF9kb21haW4iLiAgICAgICAgKi8KKwkvKiBUcnVlIGlmIHRoZSBkb21haW5uYW1lIGlzIHRvbW95b19nZXRfbGFzdF9uYW1lKCkuICovCisJYm9vbCBpc19sYXN0X25hbWU7Cit9OworCisvKgorICogdG9tb3lvX2FsaWFzX2VudHJ5IGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcgImFsaWFzIiBlbnRyaWVzLgorICogSXQgaGFzIGZvbGxvd2luZyBmaWVsZHMuCisgKgorICogICgxKSAibGlzdCIgd2hpY2ggaXMgbGlua2VkIHRvIHRvbW95b19hbGlhc19saXN0IC4KKyAqICAoMikgIm9yaWdpbmFsX25hbWUiIHdoaWNoIGlzIGEgZGVyZWZlcmVuY2VkIHBhdGhuYW1lLgorICogICgzKSAiYWxpYXNlZF9uYW1lIiB3aGljaCBpcyBhIHN5bWxpbmsncyBwYXRobmFtZS4KKyAqICAoNCkgImlzX2RlbGV0ZWQiIGlzIGEgYm9vbCB3aGljaCBpcyB0cnVlIGlmIG1hcmtlZCBhcyBkZWxldGVkLCBmYWxzZQorICogICAgICBvdGhlcndpc2UuCisgKi8KK3N0cnVjdCB0b21veW9fYWxpYXNfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqb3JpZ2luYWxfbmFtZTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqYWxpYXNlZF9uYW1lOworCWJvb2wgaXNfZGVsZXRlZDsKK307CisKKy8qCisgKiB0b21veW9fcG9saWN5X21hbmFnZXJfZW50cnkgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZyBsaXN0IG9mCisgKiBkb21haW5uYW1lcyBvciBwcm9ncmFtcyB3aGljaCBhcmUgcGVybWl0dGVkIHRvIG1vZGlmeSBjb25maWd1cmF0aW9uIHZpYQorICogL3N5cy9rZXJuZWwvc2VjdXJpdHkvdG9tb3lvLyBpbnRlcmZhY2UuCisgKiBJdCBoYXMgZm9sbG93aW5nIGZpZWxkcy4KKyAqCisgKiAgKDEpICJsaXN0IiB3aGljaCBpcyBsaW5rZWQgdG8gdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3QgLgorICogICgyKSAibWFuYWdlciIgaXMgYSBkb21haW5uYW1lIG9yIGEgcHJvZ3JhbSdzIHBhdGhuYW1lLgorICogICgzKSAiaXNfZG9tYWluIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiAibWFuYWdlciIgaXMgYSBkb21haW5uYW1lLCBmYWxzZQorICogICAgICBvdGhlcndpc2UuCisgKiAgKDQpICJpc19kZWxldGVkIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiBtYXJrZWQgYXMgZGVsZXRlZCwgZmFsc2UKKyAqICAgICAgb3RoZXJ3aXNlLgorICovCitzdHJ1Y3QgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2VudHJ5IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJLyogQSBwYXRoIHRvIHByb2dyYW0gb3IgYSBkb21haW5uYW1lLiAqLworCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICptYW5hZ2VyOworCWJvb2wgaXNfZG9tYWluOyAgLyogVHJ1ZSBpZiBtYW5hZ2VyIGlzIGEgZG9tYWlubmFtZS4gKi8KKwlib29sIGlzX2RlbGV0ZWQ7IC8qIFRydWUgaWYgdGhpcyBlbnRyeSBpcyBkZWxldGVkLiAqLworfTsKKworLyoqKioqKioqKiogRnVuY3Rpb24gcHJvdG90eXBlcy4gKioqKioqKioqKi8KKwogLyogQ2hlY2sgd2hldGhlciB0aGUgZG9tYWluIGhhcyB0b28gbWFueSBBQ0wgZW50cmllcyB0byBob2xkLiAqLwogYm9vbCB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKiBjb25zdCBkb21haW4pOwogLyogVHJhbnNhY3Rpb25hbCBzcHJpbnRmKCkgZm9yIHBvbGljeSBkdW1wLiAqLwogYm9vbCB0b21veW9faW9fcHJpbnRmKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIAlfX2F0dHJpYnV0ZV9fICgoZm9ybWF0KHByaW50ZiwgMiwgMykpKTsKIC8qIENoZWNrIHdoZXRoZXIgdGhlIGRvbWFpbm5hbWUgaXMgY29ycmVjdC4gKi8KLWJvb2wgdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRvbWFpbm5hbWUsCi0JCQkgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbik7Citib29sIHRvbW95b19pc19jb3JyZWN0X2RvbWFpbihjb25zdCB1bnNpZ25lZCBjaGFyICpkb21haW5uYW1lKTsKIC8qIENoZWNrIHdoZXRoZXIgdGhlIHRva2VuIGlzIGNvcnJlY3QuICovCiBib29sIHRvbW95b19pc19jb3JyZWN0X3BhdGgoY29uc3QgY2hhciAqZmlsZW5hbWUsIGNvbnN0IHM4IHN0YXJ0X3R5cGUsCi0JCQkgICAgY29uc3QgczggcGF0dGVybl90eXBlLCBjb25zdCBzOCBlbmRfdHlwZSwKLQkJCSAgICBjb25zdCBjaGFyICpmdW5jdGlvbik7CisJCQkgICAgY29uc3QgczggcGF0dGVybl90eXBlLCBjb25zdCBzOCBlbmRfdHlwZSk7CiAvKiBDaGVjayB3aGV0aGVyIHRoZSB0b2tlbiBjYW4gYmUgYSBkb21haW5uYW1lLiAqLwogYm9vbCB0b21veW9faXNfZG9tYWluX2RlZihjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIpOwogLyogQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gZmlsZW5hbWUgbWF0Y2hlcyB0aGUgZ2l2ZW4gcGF0dGVybi4gKi8KQEAgLTMyOCwxMyArNTQ3LDEzIEBACiAvKiBXcml0ZSBkb21haW4gcG9saWN5IHZpb2xhdGlvbiB3YXJuaW5nIG1lc3NhZ2UgdG8gY29uc29sZT8gKi8KIGJvb2wgdG9tb3lvX3ZlcmJvc2VfbW9kZShjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4pOwogLyogQ29udmVydCBkb3VibGUgcGF0aCBvcGVyYXRpb24gdG8gb3BlcmF0aW9uIG5hbWUuICovCi1jb25zdCBjaGFyICp0b21veW9fZHAya2V5d29yZChjb25zdCB1OCBvcGVyYXRpb24pOworY29uc3QgY2hhciAqdG9tb3lvX3BhdGgyMmtleXdvcmQoY29uc3QgdTggb3BlcmF0aW9uKTsKIC8qIEdldCB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIGdpdmVuIGRvbWFpbm5hbWUuICovCiBjb25zdCBjaGFyICp0b21veW9fZ2V0X2xhc3RfbmFtZShjb25zdCBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4pOwogLyogR2V0IHdhcm5pbmcgbWVzc2FnZS4gKi8KIGNvbnN0IGNoYXIgKnRvbW95b19nZXRfbXNnKGNvbnN0IGJvb2wgaXNfZW5mb3JjZSk7CiAvKiBDb252ZXJ0IHNpbmdsZSBwYXRoIG9wZXJhdGlvbiB0byBvcGVyYXRpb24gbmFtZS4gKi8KLWNvbnN0IGNoYXIgKnRvbW95b19zcDJrZXl3b3JkKGNvbnN0IHU4IG9wZXJhdGlvbik7Citjb25zdCBjaGFyICp0b21veW9fcGF0aDJrZXl3b3JkKGNvbnN0IHU4IG9wZXJhdGlvbik7CiAvKiBDcmVhdGUgImFsaWFzIiBlbnRyeSBpbiBleGNlcHRpb24gcG9saWN5LiAqLwogaW50IHRvbW95b193cml0ZV9hbGlhc19wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpOwogLyoKQEAgLTM3MCwxNSArNTg5LDEwMSBAQAogLyogQ2hlY2sgbW9kZSBmb3Igc3BlY2lmaWVkIGZ1bmN0aW9uYWxpdHkuICovCiB1bnNpZ25lZCBpbnQgdG9tb3lvX2NoZWNrX2ZsYWdzKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKIAkJCQljb25zdCB1OCBpbmRleCk7Ci0vKiBBbGxvY2F0ZSBtZW1vcnkgZm9yIHN0cnVjdHVyZXMuICovCi12b2lkICp0b21veW9fYWxsb2NfYWNsX2VsZW1lbnQoY29uc3QgdTggYWNsX3R5cGUpOwogLyogRmlsbCBpbiAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIG1lbWJlcnMuICovCiB2b2lkIHRvbW95b19maWxsX3BhdGhfaW5mbyhzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcHRyKTsKIC8qIFJ1biBwb2xpY3kgbG9hZGVyIHdoZW4gL3NiaW4vaW5pdCBzdGFydHMuICovCiB2b2lkIHRvbW95b19sb2FkX3BvbGljeShjb25zdCBjaGFyICpmaWxlbmFtZSk7Ci0vKiBDaGFuZ2UgInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLT5mbGFncy4gKi8KLXZvaWQgdG9tb3lvX3NldF9kb21haW5fZmxhZyhzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCi0JCQkgICAgY29uc3QgYm9vbCBpc19kZWxldGUsIGNvbnN0IHU4IGZsYWdzKTsKKworLyogQ29udmVydCBiaW5hcnkgc3RyaW5nIHRvIGFzY2lpIHN0cmluZy4gKi8KK2ludCB0b21veW9fZW5jb2RlKGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmxlbiwgY29uc3QgY2hhciAqc3RyKTsKKworLyogUmV0dXJucyByZWFscGF0aCgzKSBvZiB0aGUgZ2l2ZW4gcGF0aG5hbWUgYnV0IGlnbm9yZXMgY2hyb290J2VkIHJvb3QuICovCitpbnQgdG9tb3lvX3JlYWxwYXRoX2Zyb21fcGF0aDIoc3RydWN0IHBhdGggKnBhdGgsIGNoYXIgKm5ld25hbWUsCisJCQkgICAgICAgaW50IG5ld25hbWVfbGVuKTsKKworLyoKKyAqIFJldHVybnMgcmVhbHBhdGgoMykgb2YgdGhlIGdpdmVuIHBhdGhuYW1lIGJ1dCBpZ25vcmVzIGNocm9vdCdlZCByb290LgorICogVGhlc2UgZnVuY3Rpb25zIHVzZSBremFsbG9jKCksIHNvIHRoZSBjYWxsZXIgbXVzdCBjYWxsIGtmcmVlKCkKKyAqIGlmIHRoZXNlIGZ1bmN0aW9ucyBkaWRuJ3QgcmV0dXJuIE5VTEwuCisgKi8KK2NoYXIgKnRvbW95b19yZWFscGF0aChjb25zdCBjaGFyICpwYXRobmFtZSk7CisvKgorICogU2FtZSB3aXRoIHRvbW95b19yZWFscGF0aCgpIGV4Y2VwdCB0aGF0IGl0IGRvZXNuJ3QgZm9sbG93IHRoZSBmaW5hbCBzeW1saW5rLgorICovCitjaGFyICp0b21veW9fcmVhbHBhdGhfbm9mb2xsb3coY29uc3QgY2hhciAqcGF0aG5hbWUpOworLyogU2FtZSB3aXRoIHRvbW95b19yZWFscGF0aCgpIGV4Y2VwdCB0aGF0IHRoZSBwYXRobmFtZSBpcyBhbHJlYWR5IHNvbHZlZC4gKi8KK2NoYXIgKnRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgoc3RydWN0IHBhdGggKnBhdGgpOworCisvKiBDaGVjayBtZW1vcnkgcXVvdGEuICovCitib29sIHRvbW95b19tZW1vcnlfb2sodm9pZCAqcHRyKTsKKworLyoKKyAqIEtlZXAgdGhlIGdpdmVuIG5hbWUgb24gdGhlIFJBTS4KKyAqIFRoZSBSQU0gaXMgc2hhcmVkLCBzbyBORVZFUiB0cnkgdG8gbW9kaWZ5IG9yIGtmcmVlKCkgdGhlIHJldHVybmVkIG5hbWUuCisgKi8KK2NvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICp0b21veW9fZ2V0X25hbWUoY29uc3QgY2hhciAqbmFtZSk7CisKKy8qIENoZWNrIGZvciBtZW1vcnkgdXNhZ2UuICovCitpbnQgdG9tb3lvX3JlYWRfbWVtb3J5X2NvdW50ZXIoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworCisvKiBTZXQgbWVtb3J5IHF1b3RhLiAqLworaW50IHRvbW95b193cml0ZV9tZW1vcnlfcXVvdGEoc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpOworCisvKiBJbml0aWFsaXplIHJlYWxwYXRoIHJlbGF0ZWQgY29kZS4gKi8KK3ZvaWQgX19pbml0IHRvbW95b19yZWFscGF0aF9pbml0KHZvaWQpOworaW50IHRvbW95b19jaGVja19leGVjX3Blcm0oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lKTsKK2ludCB0b21veW9fY2hlY2tfb3Blbl9wZXJtaXNzaW9uKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCQkgc3RydWN0IHBhdGggKnBhdGgsIGNvbnN0IGludCBmbGFnKTsKK2ludCB0b21veW9fcGF0aF9wZXJtKGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgpOworaW50IHRvbW95b19wYXRoMl9wZXJtKGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgxLAorCQkgICAgICBzdHJ1Y3QgcGF0aCAqcGF0aDIpOworaW50IHRvbW95b19jaGVja19yZXdyaXRlX3Blcm1pc3Npb24oc3RydWN0IGZpbGUgKmZpbHApOworaW50IHRvbW95b19maW5kX25leHRfZG9tYWluKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pOworCisvKiBSdW4gZ2FyYmFnZSBjb2xsZWN0b3IuICovCit2b2lkIHRvbW95b19ydW5fZ2Modm9pZCk7CisKK3ZvaWQgdG9tb3lvX21lbW9yeV9mcmVlKHZvaWQgKnB0cik7CisKKy8qKioqKioqKioqIEV4dGVybmFsIHZhcmlhYmxlIGRlZmluaXRpb25zLiAqKioqKioqKioqLworCisvKiBMb2NrIGZvciBHQy4gKi8KK2V4dGVybiBzdHJ1Y3Qgc3JjdV9zdHJ1Y3QgdG9tb3lvX3NzOworCisvKiBUaGUgbGlzdCBmb3IgInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLiAqLworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX2RvbWFpbl9saXN0OworCitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3Q7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCB0b21veW9fZG9tYWluX2tlZXBlcl9saXN0OworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX2FsaWFzX2xpc3Q7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdDsKK2V4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHRvbW95b19wYXR0ZXJuX2xpc3Q7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCB0b21veW9fbm9fcmV3cml0ZV9saXN0OworZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX3BvbGljeV9tYW5hZ2VyX2xpc3Q7CitleHRlcm4gc3RydWN0IGxpc3RfaGVhZCB0b21veW9fbmFtZV9saXN0W1RPTU9ZT19NQVhfSEFTSF07CitleHRlcm4gc3RydWN0IG11dGV4IHRvbW95b19uYW1lX2xpc3RfbG9jazsKKworLyogTG9jayBmb3IgcHJvdGVjdGluZyBwb2xpY3kuICovCitleHRlcm4gc3RydWN0IG11dGV4IHRvbW95b19wb2xpY3lfbG9jazsKKworLyogSGFzIC9zYmluL2luaXQgc3RhcnRlZD8gKi8KK2V4dGVybiBib29sIHRvbW95b19wb2xpY3lfbG9hZGVkOworCisvKiBUaGUga2VybmVsJ3MgZG9tYWluLiAqLworZXh0ZXJuIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gdG9tb3lvX2tlcm5lbF9kb21haW47CisKKy8qKioqKioqKioqIElubGluZWQgZnVuY3Rpb25zLiAqKioqKioqKioqLworCitzdGF0aWMgaW5saW5lIGludCB0b21veW9fcmVhZF9sb2NrKHZvaWQpCit7CisJcmV0dXJuIHNyY3VfcmVhZF9sb2NrKCZ0b21veW9fc3MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdG9tb3lvX3JlYWRfdW5sb2NrKGludCBpZHgpCit7CisJc3JjdV9yZWFkX3VubG9jaygmdG9tb3lvX3NzLCBpZHgpOworfQogCiAvKiBzdHJjbXAoKSBmb3IgInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIiBzdHJ1Y3R1cmUuICovCiBzdGF0aWMgaW5saW5lIGJvb2wgdG9tb3lvX3BhdGhjbXAoY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmEsCkBAIC0zODcsMTggKzY5Miw2IEBACiAJcmV0dXJuIGEtPmhhc2ggIT0gYi0+aGFzaCB8fCBzdHJjbXAoYS0+bmFtZSwgYi0+bmFtZSk7CiB9CiAKLS8qIEdldCB0eXBlIG9mIGFuIEFDTCBlbnRyeS4gKi8KLXN0YXRpYyBpbmxpbmUgdTggdG9tb3lvX2FjbF90eXBlMShzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHIpCi17Ci0JcmV0dXJuIHB0ci0+dHlwZSAmIH5UT01PWU9fQUNMX0RFTEVURUQ7Ci19Ci0KLS8qIEdldCB0eXBlIG9mIGFuIEFDTCBlbnRyeS4gKi8KLXN0YXRpYyBpbmxpbmUgdTggdG9tb3lvX2FjbF90eXBlMihzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHIpCi17Ci0JcmV0dXJuIHB0ci0+dHlwZTsKLX0KLQogLyoqCiAgKiB0b21veW9faXNfdmFsaWQgLSBDaGVjayB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgaXMgYSB2YWxpZCBjaGFyLgogICoKQEAgLTQyMywxOCArNzE2LDI1IEBACiAJcmV0dXJuIGMgJiYgKGMgPD0gJyAnIHx8IGMgPj0gMTI3KTsKIH0KIAotLyogVGhlIGxpc3QgZm9yICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4gKi8KLWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIHRvbW95b19kb21haW5fbGlzdDsKLWV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIHRvbW95b19kb21haW5fbGlzdF9sb2NrOworc3RhdGljIGlubGluZSB2b2lkIHRvbW95b19wdXRfbmFtZShjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqbmFtZSkKK3sKKwlpZiAobmFtZSkgeworCQlzdHJ1Y3QgdG9tb3lvX25hbWVfZW50cnkgKnB0ciA9CisJCQljb250YWluZXJfb2YobmFtZSwgc3RydWN0IHRvbW95b19uYW1lX2VudHJ5LCBlbnRyeSk7CisJCWF0b21pY19kZWMoJnB0ci0+dXNlcnMpOworCX0KK30KIAotLyogTG9jayBmb3IgZG9tYWluLT5hY2xfaW5mb19saXN0LiAqLwotZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2s7CitzdGF0aWMgaW5saW5lIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKnRvbW95b19kb21haW4odm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudF9jcmVkKCktPnNlY3VyaXR5OworfQogCi0vKiBIYXMgL3NiaW4vaW5pdCBzdGFydGVkPyAqLwotZXh0ZXJuIGJvb2wgdG9tb3lvX3BvbGljeV9sb2FkZWQ7Ci0KLS8qIFRoZSBrZXJuZWwncyBkb21haW4uICovCi1leHRlcm4gc3RydWN0IHRvbW95b19kb21haW5faW5mbyB0b21veW9fa2VybmVsX2RvbWFpbjsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX3JlYWxfZG9tYWluKHN0cnVjdCB0YXNrX3N0cnVjdAorCQkJCQkJCSAgICAqdGFzaykKK3sKKwlyZXR1cm4gdGFza19jcmVkX3h4eCh0YXNrLCBzZWN1cml0eSk7Cit9CiAKIC8qKgogICogbGlzdF9mb3JfZWFjaF9jb29raWUgLSBpdGVyYXRlIG92ZXIgYSBsaXN0IHdpdGggY29va2llLgpAQCAtNDQyLDE2ICs3NDIsMTYgQEAKICAqIEBjb29raWU6ICAgICB0aGUgJnN0cnVjdCBsaXN0X2hlYWQgdG8gdXNlIGFzIGEgY29va2llLgogICogQGhlYWQ6ICAgICAgIHRoZSBoZWFkIGZvciB5b3VyIGxpc3QuCiAgKgotICogU2FtZSB3aXRoIGxpc3RfZm9yX2VhY2goKSBleGNlcHQgdGhhdCB0aGlzIHByaW1pdGl2ZSB1c2VzIEBjb29raWUKKyAqIFNhbWUgd2l0aCBsaXN0X2Zvcl9lYWNoX3JjdSgpIGV4Y2VwdCB0aGF0IHRoaXMgcHJpbWl0aXZlIHVzZXMgQGNvb2tpZQogICogc28gdGhhdCB3ZSBjYW4gY29udGludWUgaXRlcmF0aW9uLgogICogQGNvb2tpZSBtdXN0IGJlIE5VTEwgd2hlbiBpdGVyYXRpb24gc3RhcnRzLCBhbmQgQGNvb2tpZSB3aWxsIGJlY29tZQogICogTlVMTCB3aGVuIGl0ZXJhdGlvbiBmaW5pc2hlcy4KICAqLwotI2RlZmluZSBsaXN0X2Zvcl9lYWNoX2Nvb2tpZShwb3MsIGNvb2tpZSwgaGVhZCkgICAgICAgICAgICAgICAgICAgICAgIFwKLQlmb3IgKCh7IGlmICghY29va2llKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCQkgICAgIGNvb2tpZSA9IGhlYWQ7IH0pLCAgICAgICAgICAgICAgIFwKLQkgICAgIHBvcyA9IChjb29raWUpLT5uZXh0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkgICAgIHByZWZldGNoKHBvcy0+bmV4dCksIHBvcyAhPSAoaGVhZCkgfHwgKChjb29raWUpID0gTlVMTCk7IFwKLQkgICAgIChjb29raWUpID0gcG9zLCBwb3MgPSBwb3MtPm5leHQpCisjZGVmaW5lIGxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgY29va2llLCBoZWFkKQkJCQlcCisJZm9yICgoeyBpZiAoIWNvb2tpZSkJCQkJCQlcCisJCQkJICAgICBjb29raWUgPSBoZWFkOyB9KSwJCQlcCisJCSAgICAgcG9zID0gcmN1X2RlcmVmZXJlbmNlKChjb29raWUpLT5uZXh0KTsJCVwKKwkgICAgIHByZWZldGNoKHBvcy0+bmV4dCksIHBvcyAhPSAoaGVhZCkgfHwgKChjb29raWUpID0gTlVMTCk7CVwKKwkgICAgIChjb29raWUpID0gcG9zLCBwb3MgPSByY3VfZGVyZWZlcmVuY2UocG9zLT5uZXh0KSkKIAogI2VuZGlmIC8qICFkZWZpbmVkKF9TRUNVUklUWV9UT01PWU9fQ09NTU9OX0gpICovCmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vZG9tYWluLmMgYi9zZWN1cml0eS90b21veW8vZG9tYWluLmMKaW5kZXggZmNmNTJhYy4uNjZjYWFhMSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvdG9tb3lvL2RvbWFpbi5jCisrKyBiL3NlY3VyaXR5L3RvbW95by9kb21haW4uYwpAQCAtMTAsOCArMTAsNiBAQAogICovCiAKICNpbmNsdWRlICJjb21tb24uaCIKLSNpbmNsdWRlICJ0b21veW8uaCIKLSNpbmNsdWRlICJyZWFscGF0aC5oIgogI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KIAogLyogVmFyaWFibGVzIGRlZmluaXRpb25zLiovCkBAIC01OCw5OSArNTYsNiBAQAogICogZXhjZXB0aW9ucy4KICAqLwogTElTVF9IRUFEKHRvbW95b19kb21haW5fbGlzdCk7Ci1ERUNMQVJFX1JXU0VNKHRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKLQotLyoKLSAqIHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZwotICogImluaXRpYWxpemVfZG9tYWluIiBhbmQgIm5vX2luaXRpYWxpemVfZG9tYWluIiBlbnRyaWVzLgotICogSXQgaGFzIGZvbGxvd2luZyBmaWVsZHMuCi0gKgotICogICgxKSAibGlzdCIgd2hpY2ggaXMgbGlua2VkIHRvIHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCAuCi0gKiAgKDIpICJkb21haW5uYW1lIiB3aGljaCBpcyAiYSBkb21haW5uYW1lIiBvciAidGhlIGxhc3QgY29tcG9uZW50IG9mIGEKLSAqICAgICAgZG9tYWlubmFtZSIuIFRoaXMgZmllbGQgaXMgTlVMTCBpZiAiZnJvbSIgY2xhdXNlIGlzIG5vdCBzcGVjaWZpZWQuCi0gKiAgKDMpICJwcm9ncmFtIiB3aGljaCBpcyBhIHByb2dyYW0ncyBwYXRobmFtZS4KLSAqICAoNCkgImlzX2RlbGV0ZWQiIGlzIGEgYm9vbCB3aGljaCBpcyB0cnVlIGlmIG1hcmtlZCBhcyBkZWxldGVkLCBmYWxzZQotICogICAgICBvdGhlcndpc2UuCi0gKiAgKDUpICJpc19ub3QiIGlzIGEgYm9vbCB3aGljaCBpcyB0cnVlIGlmICJub19pbml0aWFsaXplX2RvbWFpbiIsIGZhbHNlCi0gKiAgICAgIG90aGVyd2lzZS4KLSAqICAoNikgImlzX2xhc3RfbmFtZSIgaXMgYSBib29sIHdoaWNoIGlzIHRydWUgaWYgImRvbWFpbm5hbWUiIGlzICJ0aGUgbGFzdAotICogICAgICBjb21wb25lbnQgb2YgYSBkb21haW5uYW1lIiwgZmFsc2Ugb3RoZXJ3aXNlLgotICovCi1zdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpkb21haW5uYW1lOyAgICAvKiBUaGlzIG1heSBiZSBOVUxMICovCi0JY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnByb2dyYW07Ci0JYm9vbCBpc19kZWxldGVkOwotCWJvb2wgaXNfbm90OyAgICAgICAvKiBUcnVlIGlmIHRoaXMgZW50cnkgaXMgIm5vX2luaXRpYWxpemVfZG9tYWluIi4gICovCi0JLyogVHJ1ZSBpZiB0aGUgZG9tYWlubmFtZSBpcyB0b21veW9fZ2V0X2xhc3RfbmFtZSgpLiAqLwotCWJvb2wgaXNfbGFzdF9uYW1lOwotfTsKLQotLyoKLSAqIHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5IGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGhvbGRpbmcKLSAqICJrZWVwX2RvbWFpbiIgYW5kICJub19rZWVwX2RvbWFpbiIgZW50cmllcy4KLSAqIEl0IGhhcyBmb2xsb3dpbmcgZmllbGRzLgotICoKLSAqICAoMSkgImxpc3QiIHdoaWNoIGlzIGxpbmtlZCB0byB0b21veW9fZG9tYWluX2tlZXBlcl9saXN0IC4KLSAqICAoMikgImRvbWFpbm5hbWUiIHdoaWNoIGlzICJhIGRvbWFpbm5hbWUiIG9yICJ0aGUgbGFzdCBjb21wb25lbnQgb2YgYQotICogICAgICBkb21haW5uYW1lIi4KLSAqICAoMykgInByb2dyYW0iIHdoaWNoIGlzIGEgcHJvZ3JhbSdzIHBhdGhuYW1lLgotICogICAgICBUaGlzIGZpZWxkIGlzIE5VTEwgaWYgImZyb20iIGNsYXVzZSBpcyBub3Qgc3BlY2lmaWVkLgotICogICg0KSAiaXNfZGVsZXRlZCIgaXMgYSBib29sIHdoaWNoIGlzIHRydWUgaWYgbWFya2VkIGFzIGRlbGV0ZWQsIGZhbHNlCi0gKiAgICAgIG90aGVyd2lzZS4KLSAqICAoNSkgImlzX25vdCIgaXMgYSBib29sIHdoaWNoIGlzIHRydWUgaWYgIm5vX2luaXRpYWxpemVfZG9tYWluIiwgZmFsc2UKLSAqICAgICAgb3RoZXJ3aXNlLgotICogICg2KSAiaXNfbGFzdF9uYW1lIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiAiZG9tYWlubmFtZSIgaXMgInRoZSBsYXN0Ci0gKiAgICAgIGNvbXBvbmVudCBvZiBhIGRvbWFpbm5hbWUiLCBmYWxzZSBvdGhlcndpc2UuCi0gKi8KLXN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpkb21haW5uYW1lOwotCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpwcm9ncmFtOyAgICAgICAvKiBUaGlzIG1heSBiZSBOVUxMICovCi0JYm9vbCBpc19kZWxldGVkOwotCWJvb2wgaXNfbm90OyAgICAgICAvKiBUcnVlIGlmIHRoaXMgZW50cnkgaXMgIm5vX2tlZXBfZG9tYWluIi4gICAgICAgICovCi0JLyogVHJ1ZSBpZiB0aGUgZG9tYWlubmFtZSBpcyB0b21veW9fZ2V0X2xhc3RfbmFtZSgpLiAqLwotCWJvb2wgaXNfbGFzdF9uYW1lOwotfTsKLQotLyoKLSAqIHRvbW95b19hbGlhc19lbnRyeSBpcyBhIHN0cnVjdHVyZSB3aGljaCBpcyB1c2VkIGZvciBob2xkaW5nICJhbGlhcyIgZW50cmllcy4KLSAqIEl0IGhhcyBmb2xsb3dpbmcgZmllbGRzLgotICoKLSAqICAoMSkgImxpc3QiIHdoaWNoIGlzIGxpbmtlZCB0byB0b21veW9fYWxpYXNfbGlzdCAuCi0gKiAgKDIpICJvcmlnaW5hbF9uYW1lIiB3aGljaCBpcyBhIGRlcmVmZXJlbmNlZCBwYXRobmFtZS4KLSAqICAoMykgImFsaWFzZWRfbmFtZSIgd2hpY2ggaXMgYSBzeW1saW5rJ3MgcGF0aG5hbWUuCi0gKiAgKDQpICJpc19kZWxldGVkIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiBtYXJrZWQgYXMgZGVsZXRlZCwgZmFsc2UKLSAqICAgICAgb3RoZXJ3aXNlLgotICovCi1zdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKm9yaWdpbmFsX25hbWU7Ci0JY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmFsaWFzZWRfbmFtZTsKLQlib29sIGlzX2RlbGV0ZWQ7Ci19OwotCi0vKioKLSAqIHRvbW95b19zZXRfZG9tYWluX2ZsYWcgLSBTZXQgb3IgY2xlYXIgZG9tYWluJ3MgYXR0cmlidXRlIGZsYWdzLgotICoKLSAqIEBkb21haW46ICAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgotICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgotICogQGZsYWdzOiAgICAgRmxhZ3MgdG8gc2V0IG9yIGNsZWFyLgotICoKLSAqIFJldHVybnMgbm90aGluZy4KLSAqLwotdm9pZCB0b21veW9fc2V0X2RvbWFpbl9mbGFnKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKLQkJCSAgICBjb25zdCBib29sIGlzX2RlbGV0ZSwgY29uc3QgdTggZmxhZ3MpCi17Ci0JLyogV2UgbmVlZCB0byBzZXJpYWxpemUgYmVjYXVzZSB0aGlzIGlzIGJpdGZpZWxkIG9wZXJhdGlvbi4gKi8KLQlzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGxvY2spOwotCXNwaW5fbG9jaygmbG9jayk7Ci0JaWYgKCFpc19kZWxldGUpCi0JCWRvbWFpbi0+ZmxhZ3MgfD0gZmxhZ3M7Ci0JZWxzZQotCQlkb21haW4tPmZsYWdzICY9IH5mbGFnczsKLQlzcGluX3VubG9jaygmbG9jayk7Ci19CiAKIC8qKgogICogdG9tb3lvX2dldF9sYXN0X25hbWUgLSBHZXQgbGFzdCBjb21wb25lbnQgb2YgYSBkb21haW5uYW1lLgpAQCAtMjA1LDggKzExMCw3IEBACiAgKiB3aWxsIGNhdXNlICIvdXNyL3NiaW4vaHR0cGQiIHRvIGJlbG9uZyB0byAiPGtlcm5lbD4gL3Vzci9zYmluL2h0dHBkIiBkb21haW4KICAqIHVubGVzcyBleGVjdXRlZCBmcm9tICI8a2VybmVsPiAvZXRjL3JjLmQvaW5pdC5kL2h0dHBkIiBkb21haW4uCiAgKi8KLXN0YXRpYyBMSVNUX0hFQUQodG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0KTsKLXN0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdF9sb2NrKTsKK0xJU1RfSEVBRCh0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QpOwogCiAvKioKICAqIHRvbW95b191cGRhdGVfZG9tYWluX2luaXRpYWxpemVyX2VudHJ5IC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSIgbGlzdC4KQEAgLTIxNyw1OSArMTIxLDY1IEBACiAgKiBAaXNfZGVsZXRlOiAgVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogc3RhdGljIGludCB0b21veW9fdXBkYXRlX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeShjb25zdCBjaGFyICpkb21haW5uYW1lLAogCQkJCQkJICBjb25zdCBjaGFyICpwcm9ncmFtLAogCQkJCQkJICBjb25zdCBib29sIGlzX25vdCwKIAkJCQkJCSAgY29uc3QgYm9vbCBpc19kZWxldGUpCiB7Ci0Jc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgKm5ld19lbnRyeTsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9lbnRyeSAqZW50cnkgPSBOVUxMOwogCXN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5ICpwdHI7Ci0JY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX3Byb2dyYW07CisJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX3Byb2dyYW0gPSBOVUxMOwogCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9kb21haW5uYW1lID0gTlVMTDsKLQlpbnQgZXJyb3IgPSAtRU5PTUVNOworCWludCBlcnJvciA9IGlzX2RlbGV0ZSA/IC1FTk9FTlQgOiAtRU5PTUVNOwogCWJvb2wgaXNfbGFzdF9uYW1lID0gZmFsc2U7CiAKLQlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgocHJvZ3JhbSwgMSwgLTEsIC0xLCBfX2Z1bmNfXykpCisJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKHByb2dyYW0sIDEsIC0xLCAtMSkpCiAJCXJldHVybiAtRUlOVkFMOyAvKiBObyBwYXR0ZXJucyBhbGxvd2VkLiAqLwogCWlmIChkb21haW5uYW1lKSB7CiAJCWlmICghdG9tb3lvX2lzX2RvbWFpbl9kZWYoZG9tYWlubmFtZSkgJiYKLQkJICAgIHRvbW95b19pc19jb3JyZWN0X3BhdGgoZG9tYWlubmFtZSwgMSwgLTEsIC0xLCBfX2Z1bmNfXykpCisJCSAgICB0b21veW9faXNfY29ycmVjdF9wYXRoKGRvbWFpbm5hbWUsIDEsIC0xLCAtMSkpCiAJCQlpc19sYXN0X25hbWUgPSB0cnVlOwotCQllbHNlIGlmICghdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKGRvbWFpbm5hbWUsIF9fZnVuY19fKSkKKwkJZWxzZSBpZiAoIXRvbW95b19pc19jb3JyZWN0X2RvbWFpbihkb21haW5uYW1lKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQlzYXZlZF9kb21haW5uYW1lID0gdG9tb3lvX3NhdmVfbmFtZShkb21haW5uYW1lKTsKKwkJc2F2ZWRfZG9tYWlubmFtZSA9IHRvbW95b19nZXRfbmFtZShkb21haW5uYW1lKTsKIAkJaWYgKCFzYXZlZF9kb21haW5uYW1lKQotCQkJcmV0dXJuIC1FTk9NRU07CisJCQlnb3RvIG91dDsKIAl9Ci0Jc2F2ZWRfcHJvZ3JhbSA9IHRvbW95b19zYXZlX25hbWUocHJvZ3JhbSk7CisJc2F2ZWRfcHJvZ3JhbSA9IHRvbW95b19nZXRfbmFtZShwcm9ncmFtKTsKIAlpZiAoIXNhdmVkX3Byb2dyYW0pCi0JCXJldHVybiAtRU5PTUVNOwotCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCwgbGlzdCkgeworCQlnb3RvIG91dDsKKwlpZiAoIWlzX2RlbGV0ZSkKKwkJZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwltdXRleF9sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCwgbGlzdCkgewogCQlpZiAocHRyLT5pc19ub3QgIT0gaXNfbm90IHx8CiAJCSAgICBwdHItPmRvbWFpbm5hbWUgIT0gc2F2ZWRfZG9tYWlubmFtZSB8fAogCQkgICAgcHRyLT5wcm9ncmFtICE9IHNhdmVkX3Byb2dyYW0pCiAJCQljb250aW51ZTsKIAkJcHRyLT5pc19kZWxldGVkID0gaXNfZGVsZXRlOwogCQllcnJvciA9IDA7Ci0JCWdvdG8gb3V0OworCQlicmVhazsKIAl9Ci0JaWYgKGlzX2RlbGV0ZSkgewotCQllcnJvciA9IC1FTk9FTlQ7Ci0JCWdvdG8gb3V0OworCWlmICghaXNfZGVsZXRlICYmIGVycm9yICYmIHRvbW95b19tZW1vcnlfb2soZW50cnkpKSB7CisJCWVudHJ5LT5kb21haW5uYW1lID0gc2F2ZWRfZG9tYWlubmFtZTsKKwkJc2F2ZWRfZG9tYWlubmFtZSA9IE5VTEw7CisJCWVudHJ5LT5wcm9ncmFtID0gc2F2ZWRfcHJvZ3JhbTsKKwkJc2F2ZWRfcHJvZ3JhbSA9IE5VTEw7CisJCWVudHJ5LT5pc19ub3QgPSBpc19ub3Q7CisJCWVudHJ5LT5pc19sYXN0X25hbWUgPSBpc19sYXN0X25hbWU7CisJCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+bGlzdCwKKwkJCQkgICZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QpOworCQllbnRyeSA9IE5VTEw7CisJCWVycm9yID0gMDsKIAl9Ci0JbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKLQlpZiAoIW5ld19lbnRyeSkKLQkJZ290byBvdXQ7Ci0JbmV3X2VudHJ5LT5kb21haW5uYW1lID0gc2F2ZWRfZG9tYWlubmFtZTsKLQluZXdfZW50cnktPnByb2dyYW0gPSBzYXZlZF9wcm9ncmFtOwotCW5ld19lbnRyeS0+aXNfbm90ID0gaXNfbm90OwotCW5ld19lbnRyeS0+aXNfbGFzdF9uYW1lID0gaXNfbGFzdF9uYW1lOwotCWxpc3RfYWRkX3RhaWwoJm5ld19lbnRyeS0+bGlzdCwgJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdCk7Ci0JZXJyb3IgPSAwOworCW11dGV4X3VubG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKICBvdXQ6Ci0JdXBfd3JpdGUoJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdF9sb2NrKTsKKwl0b21veW9fcHV0X25hbWUoc2F2ZWRfZG9tYWlubmFtZSk7CisJdG9tb3lvX3B1dF9uYW1lKHNhdmVkX3Byb2dyYW0pOworCWtmcmVlKGVudHJ5KTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTI3OSwxMyArMTg5LDE0IEBACiAgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgogICoKICAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogYm9vbCB0b21veW9fcmVhZF9kb21haW5faW5pdGlhbGl6ZXJfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAlib29sIGRvbmUgPSB0cnVlOwogCi0JZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsCiAJCQkgICAgICZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QpIHsKIAkJY29uc3QgY2hhciAqbm87CkBAIC0zMDgsNyArMjE5LDYgQEAKIAkJaWYgKCFkb25lKQogCQkJYnJlYWs7CiAJfQotCXVwX3JlYWQoJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdF9sb2NrKTsKIAlyZXR1cm4gZG9uZTsKIH0KIApAQCAtMzIwLDYgKzIzMCw4IEBACiAgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBpbnQgdG9tb3lvX3dyaXRlX2RvbWFpbl9pbml0aWFsaXplcl9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19ub3QsCiAJCQkJCSAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQpAQCAtMzQ1LDYgKzI1Nyw4IEBACiAgKgogICogUmV0dXJucyB0cnVlIGlmIGV4ZWN1dGluZyBAcHJvZ3JhbSByZWluaXRpYWxpemVzIGRvbWFpbiB0cmFuc2l0aW9uLAogICogZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBib29sIHRvbW95b19pc19kb21haW5faW5pdGlhbGl6ZXIoY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgogCQkJCQkgZG9tYWlubmFtZSwKQEAgLTM1NSw4ICsyNjksNyBAQAogCXN0cnVjdCB0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2VudHJ5ICpwdHI7CiAJYm9vbCBmbGFnID0gZmFsc2U7CiAKLQlkb3duX3JlYWQoJnRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgICZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fZG9tYWluX2luaXRpYWxpemVyX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKIAkJCWNvbnRpbnVlOwogCQlpZiAocHRyLT5kb21haW5uYW1lKSB7CkBAIC0zNzYsNyArMjg5LDYgQEAKIAkJfQogCQlmbGFnID0gdHJ1ZTsKIAl9Ci0JdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0X2xvY2spOwogCXJldHVybiBmbGFnOwogfQogCkBAIC00MTgsOCArMzMwLDcgQEAKICAqICI8a2VybmVsPiAvdXNyL3NiaW4vc3NoZCAvYmluL2Jhc2ggL3Vzci9iaW4vcGFzc3dkIiBkb21haW4sIHVubGVzcwogICogZXhwbGljaXRseSBzcGVjaWZpZWQgYnkgImluaXRpYWxpemVfZG9tYWluIi4KICAqLwotc3RhdGljIExJU1RfSEVBRCh0b21veW9fZG9tYWluX2tlZXBlcl9saXN0KTsKLXN0YXRpYyBERUNMQVJFX1JXU0VNKHRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CitMSVNUX0hFQUQodG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdCk7CiAKIC8qKgogICogdG9tb3lvX3VwZGF0ZV9kb21haW5fa2VlcGVyX2VudHJ5IC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkiIGxpc3QuCkBAIC00MzAsNTkgKzM0MSw2NCBAQAogICogQGlzX2RlbGV0ZTogIFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9kb21haW5fa2VlcGVyX2VudHJ5KGNvbnN0IGNoYXIgKmRvbWFpbm5hbWUsCiAJCQkJCSAgICAgY29uc3QgY2hhciAqcHJvZ3JhbSwKIAkJCQkJICAgICBjb25zdCBib29sIGlzX25vdCwKIAkJCQkJICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKIHsKLQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgKm5ld19lbnRyeTsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgKmVudHJ5ID0gTlVMTDsKIAlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgKnB0cjsKLQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZG9tYWlubmFtZTsKKwljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZG9tYWlubmFtZSA9IE5VTEw7CiAJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX3Byb2dyYW0gPSBOVUxMOwotCWludCBlcnJvciA9IC1FTk9NRU07CisJaW50IGVycm9yID0gaXNfZGVsZXRlID8gLUVOT0VOVCA6IC1FTk9NRU07CiAJYm9vbCBpc19sYXN0X25hbWUgPSBmYWxzZTsKIAogCWlmICghdG9tb3lvX2lzX2RvbWFpbl9kZWYoZG9tYWlubmFtZSkgJiYKLQkgICAgdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChkb21haW5uYW1lLCAxLCAtMSwgLTEsIF9fZnVuY19fKSkKKwkgICAgdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChkb21haW5uYW1lLCAxLCAtMSwgLTEpKQogCQlpc19sYXN0X25hbWUgPSB0cnVlOwotCWVsc2UgaWYgKCF0b21veW9faXNfY29ycmVjdF9kb21haW4oZG9tYWlubmFtZSwgX19mdW5jX18pKQorCWVsc2UgaWYgKCF0b21veW9faXNfY29ycmVjdF9kb21haW4oZG9tYWlubmFtZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChwcm9ncmFtKSB7Ci0JCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChwcm9ncmFtLCAxLCAtMSwgLTEsIF9fZnVuY19fKSkKKwkJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKHByb2dyYW0sIDEsIC0xLCAtMSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJc2F2ZWRfcHJvZ3JhbSA9IHRvbW95b19zYXZlX25hbWUocHJvZ3JhbSk7CisJCXNhdmVkX3Byb2dyYW0gPSB0b21veW9fZ2V0X25hbWUocHJvZ3JhbSk7CiAJCWlmICghc2F2ZWRfcHJvZ3JhbSkKLQkJCXJldHVybiAtRU5PTUVNOworCQkJZ290byBvdXQ7CiAJfQotCXNhdmVkX2RvbWFpbm5hbWUgPSB0b21veW9fc2F2ZV9uYW1lKGRvbWFpbm5hbWUpOworCXNhdmVkX2RvbWFpbm5hbWUgPSB0b21veW9fZ2V0X25hbWUoZG9tYWlubmFtZSk7CiAJaWYgKCFzYXZlZF9kb21haW5uYW1lKQotCQlyZXR1cm4gLUVOT01FTTsKLQlkb3duX3dyaXRlKCZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdCwgbGlzdCkgeworCQlnb3RvIG91dDsKKwlpZiAoIWlzX2RlbGV0ZSkKKwkJZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwltdXRleF9sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHB0ci0+aXNfbm90ICE9IGlzX25vdCB8fAogCQkgICAgcHRyLT5kb21haW5uYW1lICE9IHNhdmVkX2RvbWFpbm5hbWUgfHwKIAkJICAgIHB0ci0+cHJvZ3JhbSAhPSBzYXZlZF9wcm9ncmFtKQogCQkJY29udGludWU7CiAJCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKIAkJZXJyb3IgPSAwOwotCQlnb3RvIG91dDsKKwkJYnJlYWs7CiAJfQotCWlmIChpc19kZWxldGUpIHsKLQkJZXJyb3IgPSAtRU5PRU5UOwotCQlnb3RvIG91dDsKKwlpZiAoIWlzX2RlbGV0ZSAmJiBlcnJvciAmJiB0b21veW9fbWVtb3J5X29rKGVudHJ5KSkgeworCQllbnRyeS0+ZG9tYWlubmFtZSA9IHNhdmVkX2RvbWFpbm5hbWU7CisJCXNhdmVkX2RvbWFpbm5hbWUgPSBOVUxMOworCQllbnRyeS0+cHJvZ3JhbSA9IHNhdmVkX3Byb2dyYW07CisJCXNhdmVkX3Byb2dyYW0gPSBOVUxMOworCQllbnRyeS0+aXNfbm90ID0gaXNfbm90OworCQllbnRyeS0+aXNfbGFzdF9uYW1lID0gaXNfbGFzdF9uYW1lOworCQlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmxpc3QsICZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0KTsKKwkJZW50cnkgPSBOVUxMOworCQllcnJvciA9IDA7CiAJfQotCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7Ci0JaWYgKCFuZXdfZW50cnkpCi0JCWdvdG8gb3V0OwotCW5ld19lbnRyeS0+ZG9tYWlubmFtZSA9IHNhdmVkX2RvbWFpbm5hbWU7Ci0JbmV3X2VudHJ5LT5wcm9ncmFtID0gc2F2ZWRfcHJvZ3JhbTsKLQluZXdfZW50cnktPmlzX25vdCA9IGlzX25vdDsKLQluZXdfZW50cnktPmlzX2xhc3RfbmFtZSA9IGlzX2xhc3RfbmFtZTsKLQlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0KTsKLQllcnJvciA9IDA7CisJbXV0ZXhfdW5sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOwogIG91dDoKLQl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdF9sb2NrKTsKKwl0b21veW9fcHV0X25hbWUoc2F2ZWRfZG9tYWlubmFtZSk7CisJdG9tb3lvX3B1dF9uYW1lKHNhdmVkX3Byb2dyYW0pOworCWtmcmVlKGVudHJ5KTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTQ5Myw2ICs0MDksNyBAQAogICogQGlzX25vdDogICAgVHJ1ZSBpZiBpdCBpcyAibm9fa2VlcF9kb21haW4iIGVudHJ5LgogICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgogICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIGludCB0b21veW9fd3JpdGVfZG9tYWluX2tlZXBlcl9wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19ub3QsCiAJCQkJICAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpCkBAIC01MTMsMTMgKzQzMCwxNCBAQAogICogQGhlYWQ6IFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9faW9fYnVmZmVyIi4KICAqCiAgKiBSZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIGJvb2wgdG9tb3lvX3JlYWRfZG9tYWluX2tlZXBlcl9wb2xpY3koc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCWJvb2wgZG9uZSA9IHRydWU7CiAKLQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsCiAJCQkgICAgICZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0KSB7CiAJCXN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSAqcHRyOwpAQCAtNTQyLDcgKzQ2MCw2IEBACiAJCWlmICghZG9uZSkKIAkJCWJyZWFrOwogCX0KLQl1cF9yZWFkKCZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0X2xvY2spOwogCXJldHVybiBkb25lOwogfQogCkBAIC01NTUsNiArNDcyLDggQEAKICAqCiAgKiBSZXR1cm5zIHRydWUgaWYgZXhlY3V0aW5nIEBwcm9ncmFtIHN1cHJlc3NlcyBkb21haW4gdHJhbnNpdGlvbiwKICAqIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgYm9vbCB0b21veW9faXNfZG9tYWluX2tlZXBlcihjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZG9tYWlubmFtZSwKIAkJCQkgICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnByb2dyYW0sCkBAIC01NjMsOCArNDgyLDcgQEAKIAlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9rZWVwZXJfZW50cnkgKnB0cjsKIAlib29sIGZsYWcgPSBmYWxzZTsKIAotCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9rZWVwZXJfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3QsIGxpc3QpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fZG9tYWluX2tlZXBlcl9saXN0LCBsaXN0KSB7CiAJCWlmIChwdHItPmlzX2RlbGV0ZWQpCiAJCQljb250aW51ZTsKIAkJaWYgKCFwdHItPmlzX2xhc3RfbmFtZSkgewpAQCAtNTgyLDcgKzUwMCw2IEBACiAJCX0KIAkJZmxhZyA9IHRydWU7CiAJfQotCXVwX3JlYWQoJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3RfbG9jayk7CiAJcmV0dXJuIGZsYWc7CiB9CiAKQEAgLTYxNiw4ICs1MzMsNyBAQAogICogL2Jpbi9idXN5Ym94IGFuZCBkb21haW5uYW1lIHdoaWNoIHRoZSBjdXJyZW50IHByb2Nlc3Mgd2lsbCBiZWxvbmcgdG8gYWZ0ZXIKICAqIGV4ZWN2ZSgpIHN1Y2NlZWRzIGlzIGNhbGN1bGF0ZWQgdXNpbmcgL2Jpbi9jYXQgcmF0aGVyIHRoYW4gL2Jpbi9idXN5Ym94IC4KICAqLwotc3RhdGljIExJU1RfSEVBRCh0b21veW9fYWxpYXNfbGlzdCk7Ci1zdGF0aWMgREVDTEFSRV9SV1NFTSh0b21veW9fYWxpYXNfbGlzdF9sb2NrKTsKK0xJU1RfSEVBRCh0b21veW9fYWxpYXNfbGlzdCk7CiAKIC8qKgogICogdG9tb3lvX3VwZGF0ZV9hbGlhc19lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19hbGlhc19lbnRyeSIgbGlzdC4KQEAgLTYyNyw0NiArNTQzLDUxIEBACiAgKiBAaXNfZGVsZXRlOiAgICAgVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogc3RhdGljIGludCB0b21veW9fdXBkYXRlX2FsaWFzX2VudHJ5KGNvbnN0IGNoYXIgKm9yaWdpbmFsX25hbWUsCiAJCQkJICAgICBjb25zdCBjaGFyICphbGlhc2VkX25hbWUsCiAJCQkJICAgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKIHsKLQlzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5ICpuZXdfZW50cnk7CisJc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSAqZW50cnkgPSBOVUxMOwogCXN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkgKnB0cjsKIAljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfb3JpZ2luYWxfbmFtZTsKIAljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfYWxpYXNlZF9uYW1lOwotCWludCBlcnJvciA9IC1FTk9NRU07CisJaW50IGVycm9yID0gaXNfZGVsZXRlID8gLUVOT0VOVCA6IC1FTk9NRU07CiAKLQlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgob3JpZ2luYWxfbmFtZSwgMSwgLTEsIC0xLCBfX2Z1bmNfXykgfHwKLQkgICAgIXRvbW95b19pc19jb3JyZWN0X3BhdGgoYWxpYXNlZF9uYW1lLCAxLCAtMSwgLTEsIF9fZnVuY19fKSkKKwlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgob3JpZ2luYWxfbmFtZSwgMSwgLTEsIC0xKSB8fAorCSAgICAhdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChhbGlhc2VkX25hbWUsIDEsIC0xLCAtMSkpCiAJCXJldHVybiAtRUlOVkFMOyAvKiBObyBwYXR0ZXJucyBhbGxvd2VkLiAqLwotCXNhdmVkX29yaWdpbmFsX25hbWUgPSB0b21veW9fc2F2ZV9uYW1lKG9yaWdpbmFsX25hbWUpOwotCXNhdmVkX2FsaWFzZWRfbmFtZSA9IHRvbW95b19zYXZlX25hbWUoYWxpYXNlZF9uYW1lKTsKKwlzYXZlZF9vcmlnaW5hbF9uYW1lID0gdG9tb3lvX2dldF9uYW1lKG9yaWdpbmFsX25hbWUpOworCXNhdmVkX2FsaWFzZWRfbmFtZSA9IHRvbW95b19nZXRfbmFtZShhbGlhc2VkX25hbWUpOwogCWlmICghc2F2ZWRfb3JpZ2luYWxfbmFtZSB8fCAhc2F2ZWRfYWxpYXNlZF9uYW1lKQotCQlyZXR1cm4gLUVOT01FTTsKLQlkb3duX3dyaXRlKCZ0b21veW9fYWxpYXNfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19hbGlhc19saXN0LCBsaXN0KSB7CisJCWdvdG8gb3V0OworCWlmICghaXNfZGVsZXRlKQorCQllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCW11dGV4X2xvY2soJnRvbW95b19wb2xpY3lfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX2FsaWFzX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHB0ci0+b3JpZ2luYWxfbmFtZSAhPSBzYXZlZF9vcmlnaW5hbF9uYW1lIHx8CiAJCSAgICBwdHItPmFsaWFzZWRfbmFtZSAhPSBzYXZlZF9hbGlhc2VkX25hbWUpCiAJCQljb250aW51ZTsKIAkJcHRyLT5pc19kZWxldGVkID0gaXNfZGVsZXRlOwogCQllcnJvciA9IDA7Ci0JCWdvdG8gb3V0OworCQlicmVhazsKIAl9Ci0JaWYgKGlzX2RlbGV0ZSkgewotCQllcnJvciA9IC1FTk9FTlQ7Ci0JCWdvdG8gb3V0OworCWlmICghaXNfZGVsZXRlICYmIGVycm9yICYmIHRvbW95b19tZW1vcnlfb2soZW50cnkpKSB7CisJCWVudHJ5LT5vcmlnaW5hbF9uYW1lID0gc2F2ZWRfb3JpZ2luYWxfbmFtZTsKKwkJc2F2ZWRfb3JpZ2luYWxfbmFtZSA9IE5VTEw7CisJCWVudHJ5LT5hbGlhc2VkX25hbWUgPSBzYXZlZF9hbGlhc2VkX25hbWU7CisJCXNhdmVkX2FsaWFzZWRfbmFtZSA9IE5VTEw7CisJCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+bGlzdCwgJnRvbW95b19hbGlhc19saXN0KTsKKwkJZW50cnkgPSBOVUxMOworCQllcnJvciA9IDA7CiAJfQotCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7Ci0JaWYgKCFuZXdfZW50cnkpCi0JCWdvdG8gb3V0OwotCW5ld19lbnRyeS0+b3JpZ2luYWxfbmFtZSA9IHNhdmVkX29yaWdpbmFsX25hbWU7Ci0JbmV3X2VudHJ5LT5hbGlhc2VkX25hbWUgPSBzYXZlZF9hbGlhc2VkX25hbWU7Ci0JbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5saXN0LCAmdG9tb3lvX2FsaWFzX2xpc3QpOwotCWVycm9yID0gMDsKKwltdXRleF91bmxvY2soJnRvbW95b19wb2xpY3lfbG9jayk7CiAgb3V0OgotCXVwX3dyaXRlKCZ0b21veW9fYWxpYXNfbGlzdF9sb2NrKTsKKwl0b21veW9fcHV0X25hbWUoc2F2ZWRfb3JpZ2luYWxfbmFtZSk7CisJdG9tb3lvX3B1dF9uYW1lKHNhdmVkX2FsaWFzZWRfbmFtZSk7CisJa2ZyZWUoZW50cnkpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNjc2LDEzICs1OTcsMTQgQEAKICAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCiAgKgogICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBib29sIHRvbW95b19yZWFkX2FsaWFzX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJYm9vbCBkb25lID0gdHJ1ZTsKIAotCWRvd25fcmVhZCgmdG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsICZ0b21veW9fYWxpYXNfbGlzdCkgewogCQlzdHJ1Y3QgdG9tb3lvX2FsaWFzX2VudHJ5ICpwdHI7CiAKQEAgLTY5NSw3ICs2MTcsNiBAQAogCQlpZiAoIWRvbmUpCiAJCQlicmVhazsKIAl9Ci0JdXBfcmVhZCgmdG9tb3lvX2FsaWFzX2xpc3RfbG9jayk7CiAJcmV0dXJuIGRvbmU7CiB9CiAKQEAgLTcwNiw2ICs2MjcsOCBAQAogICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogaW50IHRvbW95b193cml0ZV9hbGlhc19wb2xpY3koY2hhciAqZGF0YSwgY29uc3QgYm9vbCBpc19kZWxldGUpCiB7CkBAIC03MjQsNjMgKzY0Nyw0NiBAQAogICogQHByb2ZpbGU6ICAgIFByb2ZpbGUgbnVtYmVyIHRvIGFzc2lnbiBpZiB0aGUgZG9tYWluIHdhcyBuZXdseSBjcmVhdGVkLgogICoKICAqIFJldHVybnMgcG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIgb24gc3VjY2VzcywgTlVMTCBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX2ZpbmRfb3JfYXNzaWduX25ld19kb21haW4oY29uc3QgY2hhciAqCiAJCQkJCQkJICAgIGRvbWFpbm5hbWUsCiAJCQkJCQkJICAgIGNvbnN0IHU4IHByb2ZpbGUpCiB7Ci0Jc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gTlVMTDsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICplbnRyeTsKKwlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CiAJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX2RvbWFpbm5hbWU7CisJYm9vbCBmb3VuZCA9IGZhbHNlOwogCi0JZG93bl93cml0ZSgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOwotCWRvbWFpbiA9IHRvbW95b19maW5kX2RvbWFpbihkb21haW5uYW1lKTsKLQlpZiAoZG9tYWluKQotCQlnb3RvIG91dDsKLQlpZiAoIXRvbW95b19pc19jb3JyZWN0X2RvbWFpbihkb21haW5uYW1lLCBfX2Z1bmNfXykpCi0JCWdvdG8gb3V0OwotCXNhdmVkX2RvbWFpbm5hbWUgPSB0b21veW9fc2F2ZV9uYW1lKGRvbWFpbm5hbWUpOworCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfZG9tYWluKGRvbWFpbm5hbWUpKQorCQlyZXR1cm4gTlVMTDsKKwlzYXZlZF9kb21haW5uYW1lID0gdG9tb3lvX2dldF9uYW1lKGRvbWFpbm5hbWUpOwogCWlmICghc2F2ZWRfZG9tYWlubmFtZSkKLQkJZ290byBvdXQ7Ci0JLyogQ2FuIEkgcmV1c2UgbWVtb3J5IG9mIGRlbGV0ZWQgZG9tYWluPyAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoZG9tYWluLCAmdG9tb3lvX2RvbWFpbl9saXN0LCBsaXN0KSB7Ci0JCXN0cnVjdCB0YXNrX3N0cnVjdCAqcDsKLQkJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOwotCQlib29sIGZsYWc7Ci0JCWlmICghZG9tYWluLT5pc19kZWxldGVkIHx8Ci0JCSAgICBkb21haW4tPmRvbWFpbm5hbWUgIT0gc2F2ZWRfZG9tYWlubmFtZSkKKwkJcmV0dXJuIE5VTEw7CisJZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwltdXRleF9sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCQlpZiAoZG9tYWluLT5pc19kZWxldGVkIHx8CisJCSAgICB0b21veW9fcGF0aGNtcChzYXZlZF9kb21haW5uYW1lLCBkb21haW4tPmRvbWFpbm5hbWUpKQogCQkJY29udGludWU7Ci0JCWZsYWcgPSBmYWxzZTsKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKLQkJZm9yX2VhY2hfcHJvY2VzcyhwKSB7Ci0JCQlpZiAodG9tb3lvX3JlYWxfZG9tYWluKHApICE9IGRvbWFpbikKLQkJCQljb250aW51ZTsKLQkJCWZsYWcgPSB0cnVlOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOwotCQlpZiAoZmxhZykKLQkJCWNvbnRpbnVlOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgewotCQkJcHRyLT50eXBlIHw9IFRPTU9ZT19BQ0xfREVMRVRFRDsKLQkJfQotCQl0b21veW9fc2V0X2RvbWFpbl9mbGFnKGRvbWFpbiwgdHJ1ZSwgZG9tYWluLT5mbGFncyk7Ci0JCWRvbWFpbi0+cHJvZmlsZSA9IHByb2ZpbGU7Ci0JCWRvbWFpbi0+cXVvdGFfd2FybmVkID0gZmFsc2U7Ci0JCW1iKCk7IC8qIEF2b2lkIG91dC1vZi1vcmRlciBleGVjdXRpb24uICovCi0JCWRvbWFpbi0+aXNfZGVsZXRlZCA9IGZhbHNlOwotCQlnb3RvIG91dDsKKwkJZm91bmQgPSB0cnVlOworCQlicmVhazsKIAl9Ci0JLyogTm8gbWVtb3J5IHJldXNhYmxlLiBDcmVhdGUgdXNpbmcgbmV3IG1lbW9yeS4gKi8KLQlkb21haW4gPSB0b21veW9fYWxsb2NfZWxlbWVudChzaXplb2YoKmRvbWFpbikpOwotCWlmIChkb21haW4pIHsKLQkJSU5JVF9MSVNUX0hFQUQoJmRvbWFpbi0+YWNsX2luZm9fbGlzdCk7Ci0JCWRvbWFpbi0+ZG9tYWlubmFtZSA9IHNhdmVkX2RvbWFpbm5hbWU7Ci0JCWRvbWFpbi0+cHJvZmlsZSA9IHByb2ZpbGU7Ci0JCWxpc3RfYWRkX3RhaWwoJmRvbWFpbi0+bGlzdCwgJnRvbW95b19kb21haW5fbGlzdCk7CisJaWYgKCFmb3VuZCAmJiB0b21veW9fbWVtb3J5X29rKGVudHJ5KSkgeworCQlJTklUX0xJU1RfSEVBRCgmZW50cnktPmFjbF9pbmZvX2xpc3QpOworCQllbnRyeS0+ZG9tYWlubmFtZSA9IHNhdmVkX2RvbWFpbm5hbWU7CisJCXNhdmVkX2RvbWFpbm5hbWUgPSBOVUxMOworCQllbnRyeS0+cHJvZmlsZSA9IHByb2ZpbGU7CisJCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+bGlzdCwgJnRvbW95b19kb21haW5fbGlzdCk7CisJCWRvbWFpbiA9IGVudHJ5OworCQllbnRyeSA9IE5VTEw7CisJCWZvdW5kID0gdHJ1ZTsKIAl9Ci0gb3V0OgotCXVwX3dyaXRlKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7Ci0JcmV0dXJuIGRvbWFpbjsKKwltdXRleF91bmxvY2soJnRvbW95b19wb2xpY3lfbG9jayk7CisJdG9tb3lvX3B1dF9uYW1lKHNhdmVkX2RvbWFpbm5hbWUpOworCWtmcmVlKGVudHJ5KTsKKwlyZXR1cm4gZm91bmQgPyBkb21haW4gOiBOVUxMOwogfQogCiAvKioKQEAgLTc4OSw2ICs2OTUsOCBAQAogICogQGJwcm06IFBvaW50ZXIgdG8gInN0cnVjdCBsaW51eF9iaW5wcm0iLgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogaW50IHRvbW95b19maW5kX25leHRfZG9tYWluKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiB7CkBAIC03OTYsNyArNzA0LDcgQEAKIAkgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgc2l6ZSBvZiBidWZmZXIgcmV0dXJuZWQgYnkKIAkgKiB0b21veW9fcmVhbHBhdGgoKSA9IFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOLgogCSAqLwotCXN0cnVjdCB0b21veW9fcGFnZV9idWZmZXIgKnRtcCA9IHRvbW95b19hbGxvYyhzaXplb2YoKnRtcCkpOworCXN0cnVjdCB0b21veW9fcGFnZV9idWZmZXIgKnRtcCA9IGt6YWxsb2Moc2l6ZW9mKCp0bXApLCBHRlBfS0VSTkVMKTsKIAlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpvbGRfZG9tYWluID0gdG9tb3lvX2RvbWFpbigpOwogCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IE5VTEw7CiAJY29uc3QgY2hhciAqb2xkX2RvbWFpbl9uYW1lID0gb2xkX2RvbWFpbi0+ZG9tYWlubmFtZS0+bmFtZTsKQEAgLTg0OSw4ICs3NTcsNyBAQAogCWlmICh0b21veW9fcGF0aGNtcCgmciwgJnMpKSB7CiAJCXN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkgKnB0cjsKIAkJLyogSXMgdGhpcyBwcm9ncmFtIGFsbG93ZWQgdG8gYmUgY2FsbGVkIHZpYSBzeW1ib2xpYyBsaW5rcz8gKi8KLQkJZG93bl9yZWFkKCZ0b21veW9fYWxpYXNfbGlzdF9sb2NrKTsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fYWxpYXNfbGlzdCwgbGlzdCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fYWxpYXNfbGlzdCwgbGlzdCkgewogCQkJaWYgKHB0ci0+aXNfZGVsZXRlZCB8fAogCQkJICAgIHRvbW95b19wYXRoY21wKCZyLCBwdHItPm9yaWdpbmFsX25hbWUpIHx8CiAJCQkgICAgdG9tb3lvX3BhdGhjbXAoJnMsIHB0ci0+YWxpYXNlZF9uYW1lKSkKQEAgLTg2MSw3ICs3NjgsNiBAQAogCQkJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZyKTsKIAkJCWJyZWFrOwogCQl9Ci0JCXVwX3JlYWQoJnRvbW95b19hbGlhc19saXN0X2xvY2spOwogCX0KIAogCS8qIENoZWNrIGV4ZWN1dGUgcGVybWlzc2lvbi4gKi8KQEAgLTg5Miw5ICs3OTgsNyBAQAogCX0KIAlpZiAoZG9tYWluIHx8IHN0cmxlbihuZXdfZG9tYWluX25hbWUpID49IFRPTU9ZT19NQVhfUEFUSE5BTUVfTEVOKQogCQlnb3RvIGRvbmU7Ci0JZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2xpc3RfbG9jayk7CiAJZG9tYWluID0gdG9tb3lvX2ZpbmRfZG9tYWluKG5ld19kb21haW5fbmFtZSk7Ci0JdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9saXN0X2xvY2spOwogCWlmIChkb21haW4pCiAJCWdvdG8gZG9uZTsKIAlpZiAoaXNfZW5mb3JjZSkKQEAgLTkwOSwxNCArODEzLDE1IEBACiAJaWYgKGlzX2VuZm9yY2UpCiAJCXJldHZhbCA9IC1FUEVSTTsKIAllbHNlCi0JCXRvbW95b19zZXRfZG9tYWluX2ZsYWcob2xkX2RvbWFpbiwgZmFsc2UsCi0JCQkJICAgICAgIFRPTU9ZT19ET01BSU5fRkxBR1NfVFJBTlNJVElPTl9GQUlMRUQpOworCQlvbGRfZG9tYWluLT50cmFuc2l0aW9uX2ZhaWxlZCA9IHRydWU7CiAgb3V0OgogCWlmICghZG9tYWluKQogCQlkb21haW4gPSBvbGRfZG9tYWluOworCS8qIFVwZGF0ZSByZWZlcmVuY2UgY291bnQgb24gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLiAqLworCWF0b21pY19pbmMoJmRvbWFpbi0+dXNlcnMpOwogCWJwcm0tPmNyZWQtPnNlY3VyaXR5ID0gZG9tYWluOwotCXRvbW95b19mcmVlKHJlYWxfcHJvZ3JhbV9uYW1lKTsKLQl0b21veW9fZnJlZShzeW1saW5rX3Byb2dyYW1fbmFtZSk7Ci0JdG9tb3lvX2ZyZWUodG1wKTsKKwlrZnJlZShyZWFsX3Byb2dyYW1fbmFtZSk7CisJa2ZyZWUoc3ltbGlua19wcm9ncmFtX25hbWUpOworCWtmcmVlKHRtcCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9maWxlLmMgYi9zZWN1cml0eS90b21veW8vZmlsZS5jCmluZGV4IDlhNmM1ODguLjFiMjQzMDQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3RvbW95by9maWxlLmMKKysrIGIvc2VjdXJpdHkvdG9tb3lvL2ZpbGUuYwpAQCAtMTAsMTA4ICsxMCw2NCBAQAogICovCiAKICNpbmNsdWRlICJjb21tb24uaCIKLSNpbmNsdWRlICJ0b21veW8uaCIKLSNpbmNsdWRlICJyZWFscGF0aC5oIgotCi0vKgotICogdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZwotICogImFsbG93X3JlYWQiIGVudHJpZXMuCi0gKiBJdCBoYXMgZm9sbG93aW5nIGZpZWxkcy4KLSAqCi0gKiAgKDEpICJsaXN0IiB3aGljaCBpcyBsaW5rZWQgdG8gdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QgLgotICogICgyKSAiZmlsZW5hbWUiIGlzIGEgcGF0aG5hbWUgd2hpY2ggaXMgYWxsb3dlZCB0byBvcGVuKE9fUkRPTkxZKS4KLSAqICAoMykgImlzX2RlbGV0ZWQiIGlzIGEgYm9vbCB3aGljaCBpcyB0cnVlIGlmIG1hcmtlZCBhcyBkZWxldGVkLCBmYWxzZQotICogICAgICBvdGhlcndpc2UuCi0gKi8KLXN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZTsKLQlib29sIGlzX2RlbGV0ZWQ7Ci19OwotCi0vKgotICogdG9tb3lvX3BhdHRlcm5fZW50cnkgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZwotICogInRvbW95b19wYXR0ZXJuX2xpc3QiIGVudHJpZXMuCi0gKiBJdCBoYXMgZm9sbG93aW5nIGZpZWxkcy4KLSAqCi0gKiAgKDEpICJsaXN0IiB3aGljaCBpcyBsaW5rZWQgdG8gdG9tb3lvX3BhdHRlcm5fbGlzdCAuCi0gKiAgKDIpICJwYXR0ZXJuIiBpcyBhIHBhdGhuYW1lIHBhdHRlcm4gd2hpY2ggaXMgdXNlZCBmb3IgY29udmVydGluZyBwYXRobmFtZXMKLSAqICAgICAgdG8gcGF0aG5hbWUgcGF0dGVybnMgZHVyaW5nIGxlYXJuaW5nIG1vZGUuCi0gKiAgKDMpICJpc19kZWxldGVkIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiBtYXJrZWQgYXMgZGVsZXRlZCwgZmFsc2UKLSAqICAgICAgb3RoZXJ3aXNlLgotICovCi1zdHJ1Y3QgdG9tb3lvX3BhdHRlcm5fZW50cnkgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcGF0dGVybjsKLQlib29sIGlzX2RlbGV0ZWQ7Ci19OwotCi0vKgotICogdG9tb3lvX25vX3Jld3JpdGVfZW50cnkgaXMgYSBzdHJ1Y3R1cmUgd2hpY2ggaXMgdXNlZCBmb3IgaG9sZGluZwotICogImRlbnlfcmV3cml0ZSIgZW50cmllcy4KLSAqIEl0IGhhcyBmb2xsb3dpbmcgZmllbGRzLgotICoKLSAqICAoMSkgImxpc3QiIHdoaWNoIGlzIGxpbmtlZCB0byB0b21veW9fbm9fcmV3cml0ZV9saXN0IC4KLSAqICAoMikgInBhdHRlcm4iIGlzIGEgcGF0aG5hbWUgd2hpY2ggaXMgYnkgZGVmYXVsdCBub3QgcGVybWl0dGVkIHRvIG1vZGlmeQotICogICAgICBhbHJlYWR5IGV4aXN0aW5nIGNvbnRlbnQuCi0gKiAgKDMpICJpc19kZWxldGVkIiBpcyBhIGJvb2wgd2hpY2ggaXMgdHJ1ZSBpZiBtYXJrZWQgYXMgZGVsZXRlZCwgZmFsc2UKLSAqICAgICAgb3RoZXJ3aXNlLgotICovCi1zdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkgewotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqcGF0dGVybjsKLQlib29sIGlzX2RlbGV0ZWQ7Ci19OwogCiAvKiBLZXl3b3JkIGFycmF5IGZvciBzaW5nbGUgcGF0aCBvcGVyYXRpb25zLiAqLwotc3RhdGljIGNvbnN0IGNoYXIgKnRvbW95b19zcF9rZXl3b3JkW1RPTU9ZT19NQVhfU0lOR0xFX1BBVEhfT1BFUkFUSU9OXSA9IHsKLQlbVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0xdID0gInJlYWQvd3JpdGUiLAotCVtUT01PWU9fVFlQRV9FWEVDVVRFX0FDTF0gICAgPSAiZXhlY3V0ZSIsCi0JW1RPTU9ZT19UWVBFX1JFQURfQUNMXSAgICAgICA9ICJyZWFkIiwKLQlbVE9NT1lPX1RZUEVfV1JJVEVfQUNMXSAgICAgID0gIndyaXRlIiwKLQlbVE9NT1lPX1RZUEVfQ1JFQVRFX0FDTF0gICAgID0gImNyZWF0ZSIsCi0JW1RPTU9ZT19UWVBFX1VOTElOS19BQ0xdICAgICA9ICJ1bmxpbmsiLAotCVtUT01PWU9fVFlQRV9NS0RJUl9BQ0xdICAgICAgPSAibWtkaXIiLAotCVtUT01PWU9fVFlQRV9STURJUl9BQ0xdICAgICAgPSAicm1kaXIiLAotCVtUT01PWU9fVFlQRV9NS0ZJRk9fQUNMXSAgICAgPSAibWtmaWZvIiwKLQlbVE9NT1lPX1RZUEVfTUtTT0NLX0FDTF0gICAgID0gIm1rc29jayIsCi0JW1RPTU9ZT19UWVBFX01LQkxPQ0tfQUNMXSAgICA9ICJta2Jsb2NrIiwKLQlbVE9NT1lPX1RZUEVfTUtDSEFSX0FDTF0gICAgID0gIm1rY2hhciIsCi0JW1RPTU9ZT19UWVBFX1RSVU5DQVRFX0FDTF0gICA9ICJ0cnVuY2F0ZSIsCi0JW1RPTU9ZT19UWVBFX1NZTUxJTktfQUNMXSAgICA9ICJzeW1saW5rIiwKLQlbVE9NT1lPX1RZUEVfUkVXUklURV9BQ0xdICAgID0gInJld3JpdGUiLAorc3RhdGljIGNvbnN0IGNoYXIgKnRvbW95b19wYXRoX2tleXdvcmRbVE9NT1lPX01BWF9QQVRIX09QRVJBVElPTl0gPSB7CisJW1RPTU9ZT19UWVBFX1JFQURfV1JJVEVdID0gInJlYWQvd3JpdGUiLAorCVtUT01PWU9fVFlQRV9FWEVDVVRFXSAgICA9ICJleGVjdXRlIiwKKwlbVE9NT1lPX1RZUEVfUkVBRF0gICAgICAgPSAicmVhZCIsCisJW1RPTU9ZT19UWVBFX1dSSVRFXSAgICAgID0gIndyaXRlIiwKKwlbVE9NT1lPX1RZUEVfQ1JFQVRFXSAgICAgPSAiY3JlYXRlIiwKKwlbVE9NT1lPX1RZUEVfVU5MSU5LXSAgICAgPSAidW5saW5rIiwKKwlbVE9NT1lPX1RZUEVfTUtESVJdICAgICAgPSAibWtkaXIiLAorCVtUT01PWU9fVFlQRV9STURJUl0gICAgICA9ICJybWRpciIsCisJW1RPTU9ZT19UWVBFX01LRklGT10gICAgID0gIm1rZmlmbyIsCisJW1RPTU9ZT19UWVBFX01LU09DS10gICAgID0gIm1rc29jayIsCisJW1RPTU9ZT19UWVBFX01LQkxPQ0tdICAgID0gIm1rYmxvY2siLAorCVtUT01PWU9fVFlQRV9NS0NIQVJdICAgICA9ICJta2NoYXIiLAorCVtUT01PWU9fVFlQRV9UUlVOQ0FURV0gICA9ICJ0cnVuY2F0ZSIsCisJW1RPTU9ZT19UWVBFX1NZTUxJTktdICAgID0gInN5bWxpbmsiLAorCVtUT01PWU9fVFlQRV9SRVdSSVRFXSAgICA9ICJyZXdyaXRlIiwKKwlbVE9NT1lPX1RZUEVfSU9DVExdICAgICAgPSAiaW9jdGwiLAorCVtUT01PWU9fVFlQRV9DSE1PRF0gICAgICA9ICJjaG1vZCIsCisJW1RPTU9ZT19UWVBFX0NIT1dOXSAgICAgID0gImNob3duIiwKKwlbVE9NT1lPX1RZUEVfQ0hHUlBdICAgICAgPSAiY2hncnAiLAorCVtUT01PWU9fVFlQRV9DSFJPT1RdICAgICA9ICJjaHJvb3QiLAorCVtUT01PWU9fVFlQRV9NT1VOVF0gICAgICA9ICJtb3VudCIsCisJW1RPTU9ZT19UWVBFX1VNT1VOVF0gICAgID0gInVubW91bnQiLAogfTsKIAogLyogS2V5d29yZCBhcnJheSBmb3IgZG91YmxlIHBhdGggb3BlcmF0aW9ucy4gKi8KLXN0YXRpYyBjb25zdCBjaGFyICp0b21veW9fZHBfa2V5d29yZFtUT01PWU9fTUFYX0RPVUJMRV9QQVRIX09QRVJBVElPTl0gPSB7Ci0JW1RPTU9ZT19UWVBFX0xJTktfQUNMXSAgICA9ICJsaW5rIiwKLQlbVE9NT1lPX1RZUEVfUkVOQU1FX0FDTF0gID0gInJlbmFtZSIsCitzdGF0aWMgY29uc3QgY2hhciAqdG9tb3lvX3BhdGgyX2tleXdvcmRbVE9NT1lPX01BWF9QQVRIMl9PUEVSQVRJT05dID0geworCVtUT01PWU9fVFlQRV9MSU5LXSAgICA9ICJsaW5rIiwKKwlbVE9NT1lPX1RZUEVfUkVOQU1FXSAgPSAicmVuYW1lIiwKKwlbVE9NT1lPX1RZUEVfUElWT1RfUk9PVF0gPSAicGl2b3Rfcm9vdCIsCiB9OwogCiAvKioKLSAqIHRvbW95b19zcDJrZXl3b3JkIC0gR2V0IHRoZSBuYW1lIG9mIHNpbmdsZSBwYXRoIG9wZXJhdGlvbi4KKyAqIHRvbW95b19wYXRoMmtleXdvcmQgLSBHZXQgdGhlIG5hbWUgb2Ygc2luZ2xlIHBhdGggb3BlcmF0aW9uLgogICoKICAqIEBvcGVyYXRpb246IFR5cGUgb2Ygb3BlcmF0aW9uLgogICoKICAqIFJldHVybnMgdGhlIG5hbWUgb2Ygc2luZ2xlIHBhdGggb3BlcmF0aW9uLgogICovCi1jb25zdCBjaGFyICp0b21veW9fc3Aya2V5d29yZChjb25zdCB1OCBvcGVyYXRpb24pCitjb25zdCBjaGFyICp0b21veW9fcGF0aDJrZXl3b3JkKGNvbnN0IHU4IG9wZXJhdGlvbikKIHsKLQlyZXR1cm4gKG9wZXJhdGlvbiA8IFRPTU9ZT19NQVhfU0lOR0xFX1BBVEhfT1BFUkFUSU9OKQotCQk/IHRvbW95b19zcF9rZXl3b3JkW29wZXJhdGlvbl0gOiBOVUxMOworCXJldHVybiAob3BlcmF0aW9uIDwgVE9NT1lPX01BWF9QQVRIX09QRVJBVElPTikKKwkJPyB0b21veW9fcGF0aF9rZXl3b3JkW29wZXJhdGlvbl0gOiBOVUxMOwogfQogCiAvKioKLSAqIHRvbW95b19kcDJrZXl3b3JkIC0gR2V0IHRoZSBuYW1lIG9mIGRvdWJsZSBwYXRoIG9wZXJhdGlvbi4KKyAqIHRvbW95b19wYXRoMjJrZXl3b3JkIC0gR2V0IHRoZSBuYW1lIG9mIGRvdWJsZSBwYXRoIG9wZXJhdGlvbi4KICAqCiAgKiBAb3BlcmF0aW9uOiBUeXBlIG9mIG9wZXJhdGlvbi4KICAqCiAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIGRvdWJsZSBwYXRoIG9wZXJhdGlvbi4KICAqLwotY29uc3QgY2hhciAqdG9tb3lvX2RwMmtleXdvcmQoY29uc3QgdTggb3BlcmF0aW9uKQorY29uc3QgY2hhciAqdG9tb3lvX3BhdGgyMmtleXdvcmQoY29uc3QgdTggb3BlcmF0aW9uKQogewotCXJldHVybiAob3BlcmF0aW9uIDwgVE9NT1lPX01BWF9ET1VCTEVfUEFUSF9PUEVSQVRJT04pCi0JCT8gdG9tb3lvX2RwX2tleXdvcmRbb3BlcmF0aW9uXSA6IE5VTEw7CisJcmV0dXJuIChvcGVyYXRpb24gPCBUT01PWU9fTUFYX1BBVEgyX09QRVJBVElPTikKKwkJPyB0b21veW9fcGF0aDJfa2V5d29yZFtvcGVyYXRpb25dIDogTlVMTDsKIH0KIAogLyoqCkBAIC0xNDIsNyArOTgsOCBAQAogc3RhdGljIHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICp0b21veW9fZ2V0X3BhdGgoc3RydWN0IHBhdGggKnBhdGgpCiB7CiAJaW50IGVycm9yOwotCXN0cnVjdCB0b21veW9fcGF0aF9pbmZvX3dpdGhfZGF0YSAqYnVmID0gdG9tb3lvX2FsbG9jKHNpemVvZigqYnVmKSk7CisJc3RydWN0IHRvbW95b19wYXRoX2luZm9fd2l0aF9kYXRhICpidWYgPSBremFsbG9jKHNpemVvZigqYnVmKSwKKwkJCQkJCQkgR0ZQX0tFUk5FTCk7CiAKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIE5VTEw7CkBAIC0xNTQsMjAgKzExMSwxNyBAQAogCQl0b21veW9fZmlsbF9wYXRoX2luZm8oJmJ1Zi0+aGVhZCk7CiAJCXJldHVybiAmYnVmLT5oZWFkOwogCX0KLQl0b21veW9fZnJlZShidWYpOworCWtmcmVlKGJ1Zik7CiAJcmV0dXJuIE5VTEw7CiB9CiAKLS8qIExvY2sgZm9yIGRvbWFpbi0+YWNsX2luZm9fbGlzdC4gKi8KLURFQ0xBUkVfUldTRU0odG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOwotCi1zdGF0aWMgaW50IHRvbW95b191cGRhdGVfZG91YmxlX3BhdGhfYWNsKGNvbnN0IHU4IHR5cGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lMSwKLQkJCQkJIGNvbnN0IGNoYXIgKmZpbGVuYW1lMiwKLQkJCQkJIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKgotCQkJCQkgY29uc3QgZG9tYWluLCBjb25zdCBib29sIGlzX2RlbGV0ZSk7Ci1zdGF0aWMgaW50IHRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsKGNvbnN0IHU4IHR5cGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotCQkJCQkgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqCi0JCQkJCSBjb25zdCBkb21haW4sIGNvbnN0IGJvb2wgaXNfZGVsZXRlKTsKK3N0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9wYXRoMl9hY2woY29uc3QgdTggdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUxLAorCQkJCSAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lMiwKKwkJCQkgICBzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpjb25zdCBkb21haW4sCisJCQkJICAgY29uc3QgYm9vbCBpc19kZWxldGUpOworc3RhdGljIGludCB0b21veW9fdXBkYXRlX3BhdGhfYWNsKGNvbnN0IHU4IHR5cGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCSAgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqY29uc3QgZG9tYWluLAorCQkJCSAgY29uc3QgYm9vbCBpc19kZWxldGUpOwogCiAvKgogICogdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QgaXMgdXNlZCBmb3IgaG9sZGluZyBsaXN0IG9mIHBhdGhuYW1lcyB3aGljaApAQCAtMTk0LDggKzE0OCw3IEBACiAgKiBnaXZlbiAiYWxsb3dfcmVhZCAvbGliL2xpYmMtMi41LnNvIiB0byB0aGUgZG9tYWluIHdoaWNoIGN1cnJlbnQgcHJvY2VzcwogICogYmVsb25ncyB0by4KICAqLwotc3RhdGljIExJU1RfSEVBRCh0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCk7Ci1zdGF0aWMgREVDTEFSRV9SV1NFTSh0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdF9sb2NrKTsKK0xJU1RfSEVBRCh0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCk7CiAKIC8qKgogICogdG9tb3lvX3VwZGF0ZV9nbG9iYWxseV9yZWFkYWJsZV9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9maWxlX2VudHJ5IiBsaXN0LgpAQCAtMjA0LDQwICsxNTcsNDIgQEAKICAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9nbG9iYWxseV9yZWFkYWJsZV9lbnRyeShjb25zdCBjaGFyICpmaWxlbmFtZSwKIAkJCQkJCSBjb25zdCBib29sIGlzX2RlbGV0ZSkKIHsKLQlzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgKm5ld19lbnRyeTsKKwlzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgKmVudHJ5ID0gTlVMTDsKIAlzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgKnB0cjsKIAljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZmlsZW5hbWU7Ci0JaW50IGVycm9yID0gLUVOT01FTTsKKwlpbnQgZXJyb3IgPSBpc19kZWxldGUgPyAtRU5PRU5UIDogLUVOT01FTTsKIAotCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChmaWxlbmFtZSwgMSwgMCwgLTEsIF9fZnVuY19fKSkKKwlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgoZmlsZW5hbWUsIDEsIDAsIC0xKSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0Jc2F2ZWRfZmlsZW5hbWUgPSB0b21veW9fc2F2ZV9uYW1lKGZpbGVuYW1lKTsKKwlzYXZlZF9maWxlbmFtZSA9IHRvbW95b19nZXRfbmFtZShmaWxlbmFtZSk7CiAJaWYgKCFzYXZlZF9maWxlbmFtZSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JZG93bl93cml0ZSgmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCwgbGlzdCkgeworCWlmICghaXNfZGVsZXRlKQorCQllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCW11dGV4X2xvY2soJnRvbW95b19wb2xpY3lfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHB0ci0+ZmlsZW5hbWUgIT0gc2F2ZWRfZmlsZW5hbWUpCiAJCQljb250aW51ZTsKIAkJcHRyLT5pc19kZWxldGVkID0gaXNfZGVsZXRlOwogCQllcnJvciA9IDA7Ci0JCWdvdG8gb3V0OworCQlicmVhazsKIAl9Ci0JaWYgKGlzX2RlbGV0ZSkgewotCQllcnJvciA9IC1FTk9FTlQ7Ci0JCWdvdG8gb3V0OworCWlmICghaXNfZGVsZXRlICYmIGVycm9yICYmIHRvbW95b19tZW1vcnlfb2soZW50cnkpKSB7CisJCWVudHJ5LT5maWxlbmFtZSA9IHNhdmVkX2ZpbGVuYW1lOworCQlzYXZlZF9maWxlbmFtZSA9IE5VTEw7CisJCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+bGlzdCwgJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0KTsKKwkJZW50cnkgPSBOVUxMOworCQllcnJvciA9IDA7CiAJfQotCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7Ci0JaWYgKCFuZXdfZW50cnkpCi0JCWdvdG8gb3V0OwotCW5ld19lbnRyeS0+ZmlsZW5hbWUgPSBzYXZlZF9maWxlbmFtZTsKLQlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCk7Ci0JZXJyb3IgPSAwOwotIG91dDoKLQl1cF93cml0ZSgmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOworCXRvbW95b19wdXRfbmFtZShzYXZlZF9maWxlbmFtZSk7CisJa2ZyZWUoZW50cnkpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMjQ3LDIxICsyMDIsMjIgQEAKICAqIEBmaWxlbmFtZTogVGhlIGZpbGVuYW1lIHRvIGNoZWNrLgogICoKICAqIFJldHVybnMgdHJ1ZSBpZiBhbnkgZG9tYWluIGNhbiBvcGVuIEBmaWxlbmFtZSBmb3IgcmVhZGluZywgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBib29sIHRvbW95b19pc19nbG9iYWxseV9yZWFkYWJsZV9maWxlKGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKIAkJCQkJICAgICBmaWxlbmFtZSkKIHsKIAlzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgKnB0cjsKIAlib29sIGZvdW5kID0gZmFsc2U7Ci0JZG93bl9yZWFkKCZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19nbG9iYWxseV9yZWFkYWJsZV9saXN0LCBsaXN0KSB7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCwgbGlzdCkgewogCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCAmJgogCQkgICAgdG9tb3lvX3BhdGhfbWF0Y2hlc19wYXR0ZXJuKGZpbGVuYW1lLCBwdHItPmZpbGVuYW1lKSkgewogCQkJZm91bmQgPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JdXBfcmVhZCgmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7CiAJcmV0dXJuIGZvdW5kOwogfQogCkBAIC0yNzIsNiArMjI4LDggQEAKICAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIGludCB0b21veW9fd3JpdGVfZ2xvYmFsbHlfcmVhZGFibGVfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQogewpAQCAtMjg0LDEzICsyNDIsMTQgQEAKICAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCiAgKgogICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBib29sIHRvbW95b19yZWFkX2dsb2JhbGx5X3JlYWRhYmxlX3BvbGljeShzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CiAJYm9vbCBkb25lID0gdHJ1ZTsKIAotCWRvd25fcmVhZCgmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsCiAJCQkgICAgICZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCkgewogCQlzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgKnB0cjsKQEAgLTMwNCw3ICsyNjMsNiBAQAogCQlpZiAoIWRvbmUpCiAJCQlicmVhazsKIAl9Ci0JdXBfcmVhZCgmdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2xpc3RfbG9jayk7CiAJcmV0dXJuIGRvbmU7CiB9CiAKQEAgLTMzNyw4ICsyOTUsNyBAQAogICogd2hpY2ggcHJldGVuZHMgYXMgaWYgL3Byb2Mvc2VsZi8gaXMgbm90IGEgc3ltbGluazsgc28gdGhhdCB3ZSBjYW4gZm9yYmlkCiAgKiBjdXJyZW50IHByb2Nlc3MgZnJvbSBhY2Nlc3Npbmcgb3RoZXIgcHJvY2VzcydzIGluZm9ybWF0aW9uLgogICovCi1zdGF0aWMgTElTVF9IRUFEKHRvbW95b19wYXR0ZXJuX2xpc3QpOwotc3RhdGljIERFQ0xBUkVfUldTRU0odG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKK0xJU1RfSEVBRCh0b21veW9fcGF0dGVybl9saXN0KTsKIAogLyoqCiAgKiB0b21veW9fdXBkYXRlX2ZpbGVfcGF0dGVybl9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5IiBsaXN0LgpAQCAtMzQ3LDQwICszMDQsNDMgQEAKICAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9maWxlX3BhdHRlcm5fZW50cnkoY29uc3QgY2hhciAqcGF0dGVybiwKIAkJCQkJICAgIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQogewotCXN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSAqbmV3X2VudHJ5OworCXN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSAqZW50cnkgPSBOVUxMOwogCXN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSAqcHRyOwogCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9wYXR0ZXJuOwotCWludCBlcnJvciA9IC1FTk9NRU07CisJaW50IGVycm9yID0gaXNfZGVsZXRlID8gLUVOT0VOVCA6IC1FTk9NRU07CiAKLQlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgocGF0dGVybiwgMCwgMSwgMCwgX19mdW5jX18pKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlzYXZlZF9wYXR0ZXJuID0gdG9tb3lvX3NhdmVfbmFtZShwYXR0ZXJuKTsKKwlzYXZlZF9wYXR0ZXJuID0gdG9tb3lvX2dldF9uYW1lKHBhdHRlcm4pOwogCWlmICghc2F2ZWRfcGF0dGVybikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZG93bl93cml0ZSgmdG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19wYXR0ZXJuX2xpc3QsIGxpc3QpIHsKKwkJcmV0dXJuIGVycm9yOworCWlmICghc2F2ZWRfcGF0dGVybi0+aXNfcGF0dGVybmVkKQorCQlnb3RvIG91dDsKKwlpZiAoIWlzX2RlbGV0ZSkKKwkJZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwltdXRleF9sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19wYXR0ZXJuX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHNhdmVkX3BhdHRlcm4gIT0gcHRyLT5wYXR0ZXJuKQogCQkJY29udGludWU7CiAJCXB0ci0+aXNfZGVsZXRlZCA9IGlzX2RlbGV0ZTsKIAkJZXJyb3IgPSAwOwotCQlnb3RvIG91dDsKKwkJYnJlYWs7CiAJfQotCWlmIChpc19kZWxldGUpIHsKLQkJZXJyb3IgPSAtRU5PRU5UOwotCQlnb3RvIG91dDsKKwlpZiAoIWlzX2RlbGV0ZSAmJiBlcnJvciAmJiB0b21veW9fbWVtb3J5X29rKGVudHJ5KSkgeworCQllbnRyeS0+cGF0dGVybiA9IHNhdmVkX3BhdHRlcm47CisJCXNhdmVkX3BhdHRlcm4gPSBOVUxMOworCQlsaXN0X2FkZF90YWlsX3JjdSgmZW50cnktPmxpc3QsICZ0b21veW9fcGF0dGVybl9saXN0KTsKKwkJZW50cnkgPSBOVUxMOworCQllcnJvciA9IDA7CiAJfQotCW5ld19lbnRyeSA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqbmV3X2VudHJ5KSk7Ci0JaWYgKCFuZXdfZW50cnkpCi0JCWdvdG8gb3V0OwotCW5ld19lbnRyeS0+cGF0dGVybiA9IHNhdmVkX3BhdHRlcm47Ci0JbGlzdF9hZGRfdGFpbCgmbmV3X2VudHJ5LT5saXN0LCAmdG9tb3lvX3BhdHRlcm5fbGlzdCk7Ci0JZXJyb3IgPSAwOworCW11dGV4X3VubG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKICBvdXQ6Ci0JdXBfd3JpdGUoJnRvbW95b19wYXR0ZXJuX2xpc3RfbG9jayk7CisJa2ZyZWUoZW50cnkpOworCXRvbW95b19wdXRfbmFtZShzYXZlZF9wYXR0ZXJuKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTM5MCw2ICszNTAsOCBAQAogICogQGZpbGVuYW1lOiBUaGUgZmlsZW5hbWUgdG8gZmluZCBwYXR0ZXJuZWQgcGF0aG5hbWUuCiAgKgogICogUmV0dXJucyBwb2ludGVyIHRvIHBhdGhuYW1lIHBhdHRlcm4gaWYgbWF0Y2hlZCwgQGZpbGVuYW1lIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgogdG9tb3lvX2dldF9maWxlX3BhdHRlcm4oY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lKQpAQCAtMzk3LDggKzM1OSw3IEBACiAJc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5ICpwdHI7CiAJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnBhdHRlcm4gPSBOVUxMOwogCi0JZG93bl9yZWFkKCZ0b21veW9fcGF0dGVybl9saXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX3BhdHRlcm5fbGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19wYXR0ZXJuX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoIXRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihmaWxlbmFtZSwgcHRyLT5wYXR0ZXJuKSkKQEAgLTQxMSw3ICszNzIsNiBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JdXBfcmVhZCgmdG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKIAlpZiAocGF0dGVybikKIAkJZmlsZW5hbWUgPSBwYXR0ZXJuOwogCXJldHVybiBmaWxlbmFtZTsKQEAgLTQyNCw2ICszODQsOCBAQAogICogQGlzX2RlbGV0ZTogVHJ1ZSBpZiBpdCBpcyBhIGRlbGV0ZSByZXF1ZXN0LgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogaW50IHRvbW95b193cml0ZV9wYXR0ZXJuX3BvbGljeShjaGFyICpkYXRhLCBjb25zdCBib29sIGlzX2RlbGV0ZSkKIHsKQEAgLTQzNiwxMyArMzk4LDE0IEBACiAgKiBAaGVhZDogUG9pbnRlciB0byAic3RydWN0IHRvbW95b19pb19idWZmZXIiLgogICoKICAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogYm9vbCB0b21veW9fcmVhZF9maWxlX3BhdHRlcm4oc3RydWN0IHRvbW95b19pb19idWZmZXIgKmhlYWQpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCWJvb2wgZG9uZSA9IHRydWU7CiAKLQlkb3duX3JlYWQoJnRvbW95b19wYXR0ZXJuX2xpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9jb29raWUocG9zLCBoZWFkLT5yZWFkX3ZhcjIsICZ0b21veW9fcGF0dGVybl9saXN0KSB7CiAJCXN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSAqcHRyOwogCQlwdHIgPSBsaXN0X2VudHJ5KHBvcywgc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5LCBsaXN0KTsKQEAgLTQ1Myw3ICs0MTYsNiBAQAogCQlpZiAoIWRvbmUpCiAJCQlicmVhazsKIAl9Ci0JdXBfcmVhZCgmdG9tb3lvX3BhdHRlcm5fbGlzdF9sb2NrKTsKIAlyZXR1cm4gZG9uZTsKIH0KIApAQCAtNDg2LDggKzQ0OCw3IEBACiAgKiAiIChkZWxldGVkKSIgc3VmZml4IGlmIHRoZSBmaWxlIGlzIGFscmVhZHkgdW5saW5rKCllZDsgc28gdGhhdCB3ZSBkb24ndAogICogbmVlZCB0byB3b3JyeSB3aGV0aGVyIHRoZSBmaWxlIGlzIGFscmVhZHkgdW5saW5rKCllZCBvciBub3QuCiAgKi8KLXN0YXRpYyBMSVNUX0hFQUQodG9tb3lvX25vX3Jld3JpdGVfbGlzdCk7Ci1zdGF0aWMgREVDTEFSRV9SV1NFTSh0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOworTElTVF9IRUFEKHRvbW95b19ub19yZXdyaXRlX2xpc3QpOwogCiAvKioKICAqIHRvbW95b191cGRhdGVfbm9fcmV3cml0ZV9lbnRyeSAtIFVwZGF0ZSAic3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5IiBsaXN0LgpAQCAtNDk2LDM5ICs0NTcsNDIgQEAKICAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9ub19yZXdyaXRlX2VudHJ5KGNvbnN0IGNoYXIgKnBhdHRlcm4sCiAJCQkJCSAgY29uc3QgYm9vbCBpc19kZWxldGUpCiB7Ci0Jc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5ICpuZXdfZW50cnksICpwdHI7CisJc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5ICplbnRyeSA9IE5VTEw7CisJc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5ICpwdHI7CiAJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnNhdmVkX3BhdHRlcm47Ci0JaW50IGVycm9yID0gLUVOT01FTTsKKwlpbnQgZXJyb3IgPSBpc19kZWxldGUgPyAtRU5PRU5UIDogLUVOT01FTTsKIAotCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChwYXR0ZXJuLCAwLCAwLCAwLCBfX2Z1bmNfXykpCisJaWYgKCF0b21veW9faXNfY29ycmVjdF9wYXRoKHBhdHRlcm4sIDAsIDAsIDApKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlzYXZlZF9wYXR0ZXJuID0gdG9tb3lvX3NhdmVfbmFtZShwYXR0ZXJuKTsKKwlzYXZlZF9wYXR0ZXJuID0gdG9tb3lvX2dldF9uYW1lKHBhdHRlcm4pOwogCWlmICghc2F2ZWRfcGF0dGVybikKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZG93bl93cml0ZSgmdG9tb3lvX25vX3Jld3JpdGVfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJnRvbW95b19ub19yZXdyaXRlX2xpc3QsIGxpc3QpIHsKKwkJcmV0dXJuIGVycm9yOworCWlmICghaXNfZGVsZXRlKQorCQllbnRyeSA9IGttYWxsb2Moc2l6ZW9mKCplbnRyeSksIEdGUF9LRVJORUwpOworCW11dGV4X2xvY2soJnRvbW95b19wb2xpY3lfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX25vX3Jld3JpdGVfbGlzdCwgbGlzdCkgewogCQlpZiAocHRyLT5wYXR0ZXJuICE9IHNhdmVkX3BhdHRlcm4pCiAJCQljb250aW51ZTsKIAkJcHRyLT5pc19kZWxldGVkID0gaXNfZGVsZXRlOwogCQllcnJvciA9IDA7Ci0JCWdvdG8gb3V0OworCQlicmVhazsKIAl9Ci0JaWYgKGlzX2RlbGV0ZSkgewotCQllcnJvciA9IC1FTk9FTlQ7Ci0JCWdvdG8gb3V0OworCWlmICghaXNfZGVsZXRlICYmIGVycm9yICYmIHRvbW95b19tZW1vcnlfb2soZW50cnkpKSB7CisJCWVudHJ5LT5wYXR0ZXJuID0gc2F2ZWRfcGF0dGVybjsKKwkJc2F2ZWRfcGF0dGVybiA9IE5VTEw7CisJCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+bGlzdCwgJnRvbW95b19ub19yZXdyaXRlX2xpc3QpOworCQllbnRyeSA9IE5VTEw7CisJCWVycm9yID0gMDsKIAl9Ci0JbmV3X2VudHJ5ID0gdG9tb3lvX2FsbG9jX2VsZW1lbnQoc2l6ZW9mKCpuZXdfZW50cnkpKTsKLQlpZiAoIW5ld19lbnRyeSkKLQkJZ290byBvdXQ7Ci0JbmV3X2VudHJ5LT5wYXR0ZXJuID0gc2F2ZWRfcGF0dGVybjsKLQlsaXN0X2FkZF90YWlsKCZuZXdfZW50cnktPmxpc3QsICZ0b21veW9fbm9fcmV3cml0ZV9saXN0KTsKLQllcnJvciA9IDA7Ci0gb3V0OgotCXVwX3dyaXRlKCZ0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOworCW11dGV4X3VubG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKKwl0b21veW9fcHV0X25hbWUoc2F2ZWRfcGF0dGVybik7CisJa2ZyZWUoZW50cnkpOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNTM5LDE0ICs1MDMsMTUgQEAKICAqCiAgKiBSZXR1cm5zIHRydWUgaWYgQGZpbGVuYW1lIGlzIHNwZWNpZmllZCBieSAiZGVueV9yZXdyaXRlIiBkaXJlY3RpdmUsCiAgKiBmYWxzZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogc3RhdGljIGJvb2wgdG9tb3lvX2lzX25vX3Jld3JpdGVfZmlsZShjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUpCiB7CiAJc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5ICpwdHI7CiAJYm9vbCBmb3VuZCA9IGZhbHNlOwogCi0JZG93bl9yZWFkKCZ0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmdG9tb3lvX25vX3Jld3JpdGVfbGlzdCwgbGlzdCkgeworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19ub19yZXdyaXRlX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHB0ci0+aXNfZGVsZXRlZCkKIAkJCWNvbnRpbnVlOwogCQlpZiAoIXRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihmaWxlbmFtZSwgcHRyLT5wYXR0ZXJuKSkKQEAgLTU1NCw3ICs1MTksNiBAQAogCQlmb3VuZCA9IHRydWU7CiAJCWJyZWFrOwogCX0KLQl1cF9yZWFkKCZ0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOwogCXJldHVybiBmb3VuZDsKIH0KIApAQCAtNTY1LDYgKzUyOSw4IEBACiAgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBpbnQgdG9tb3lvX3dyaXRlX25vX3Jld3JpdGVfcG9saWN5KGNoYXIgKmRhdGEsIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQogewpAQCAtNTc3LDEzICs1NDMsMTQgQEAKICAqIEBoZWFkOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciIuCiAgKgogICogUmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBib29sIHRvbW95b19yZWFkX25vX3Jld3JpdGVfcG9saWN5KHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIAlib29sIGRvbmUgPSB0cnVlOwogCi0JZG93bl9yZWFkKCZ0b21veW9fbm9fcmV3cml0ZV9saXN0X2xvY2spOwogCWxpc3RfZm9yX2VhY2hfY29va2llKHBvcywgaGVhZC0+cmVhZF92YXIyLCAmdG9tb3lvX25vX3Jld3JpdGVfbGlzdCkgewogCQlzdHJ1Y3QgdG9tb3lvX25vX3Jld3JpdGVfZW50cnkgKnB0cjsKIAkJcHRyID0gbGlzdF9lbnRyeShwb3MsIHN0cnVjdCB0b21veW9fbm9fcmV3cml0ZV9lbnRyeSwgbGlzdCk7CkBAIC01OTQsNyArNTYxLDYgQEAKIAkJaWYgKCFkb25lKQogCQkJYnJlYWs7CiAJfQotCXVwX3JlYWQoJnRvbW95b19ub19yZXdyaXRlX2xpc3RfbG9jayk7CiAJcmV0dXJuIGRvbmU7CiB9CiAKQEAgLTYxMiw2ICs1NzgsOCBAQAogICogQ3VycmVudCBwb2xpY3kgc3ludGF4IHVzZXMgImFsbG93X3JlYWQvd3JpdGUiIGluc3RlYWQgb2YgIjYiLAogICogImFsbG93X3JlYWQiIGluc3RlYWQgb2YgIjQiLCAiYWxsb3dfd3JpdGUiIGluc3RlYWQgb2YgIjIiLAogICogImFsbG93X2V4ZWN1dGUiIGluc3RlYWQgb2YgIjEiLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9maWxlX2FjbChjb25zdCBjaGFyICpmaWxlbmFtZSwgdTggcGVybSwKIAkJCQkgIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKiBjb25zdCBkb21haW4sCkBAIC02MjksMTkgKzU5NywxOSBAQAogCQkgKi8KIAkJcmV0dXJuIDA7CiAJaWYgKHBlcm0gJiA0KQotCQl0b21veW9fdXBkYXRlX3NpbmdsZV9wYXRoX2FjbChUT01PWU9fVFlQRV9SRUFEX0FDTCwgZmlsZW5hbWUsCi0JCQkJCSAgICAgIGRvbWFpbiwgaXNfZGVsZXRlKTsKKwkJdG9tb3lvX3VwZGF0ZV9wYXRoX2FjbChUT01PWU9fVFlQRV9SRUFELCBmaWxlbmFtZSwgZG9tYWluLAorCQkJCSAgICAgICBpc19kZWxldGUpOwogCWlmIChwZXJtICYgMikKLQkJdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2woVE9NT1lPX1RZUEVfV1JJVEVfQUNMLCBmaWxlbmFtZSwKLQkJCQkJICAgICAgZG9tYWluLCBpc19kZWxldGUpOworCQl0b21veW9fdXBkYXRlX3BhdGhfYWNsKFRPTU9ZT19UWVBFX1dSSVRFLCBmaWxlbmFtZSwgZG9tYWluLAorCQkJCSAgICAgICBpc19kZWxldGUpOwogCWlmIChwZXJtICYgMSkKLQkJdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2woVE9NT1lPX1RZUEVfRVhFQ1VURV9BQ0wsCi0JCQkJCSAgICAgIGZpbGVuYW1lLCBkb21haW4sIGlzX2RlbGV0ZSk7CisJCXRvbW95b191cGRhdGVfcGF0aF9hY2woVE9NT1lPX1RZUEVfRVhFQ1VURSwgZmlsZW5hbWUsIGRvbWFpbiwKKwkJCQkgICAgICAgaXNfZGVsZXRlKTsKIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsMiAtIENoZWNrIHBlcm1pc3Npb24gZm9yIHNpbmdsZSBwYXRoIG9wZXJhdGlvbi4KKyAqIHRvbW95b19wYXRoX2FjbDIgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBzaW5nbGUgcGF0aCBvcGVyYXRpb24uCiAgKgogICogQGRvbWFpbjogICAgICAgICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCiAgKiBAZmlsZW5hbWU6ICAgICAgICBGaWxlbmFtZSB0byBjaGVjay4KQEAgLTY0OSwyNiArNjE3LDI4IEBACiAgKiBAbWF5X3VzZV9wYXR0ZXJuOiBUcnVlIGlmIHBhdHRlcm5lZCBBQ0wgaXMgcGVybWl0dGVkLgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRVBFUk0gb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KLXN0YXRpYyBpbnQgdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX2FjbDIoY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqCi0JCQkJCSBkb21haW4sCi0JCQkJCSBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCi0JCQkJCSBmaWxlbmFtZSwKLQkJCQkJIGNvbnN0IHUxNiBwZXJtLAotCQkJCQkgY29uc3QgYm9vbCBtYXlfdXNlX3BhdHRlcm4pCitzdGF0aWMgaW50IHRvbW95b19wYXRoX2FjbDIoY29uc3Qgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAorCQkJICAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKKwkJCSAgICBjb25zdCB1MzIgcGVybSwgY29uc3QgYm9vbCBtYXlfdXNlX3BhdHRlcm4pCiB7CiAJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOwogCWludCBlcnJvciA9IC1FUEVSTTsKIAotCWRvd25fcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkocHRyLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7Ci0JCXN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCAqYWNsOwotCQlpZiAodG9tb3lvX2FjbF90eXBlMihwdHIpICE9IFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTCkKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IHRvbW95b19wYXRoX2FjbCAqYWNsOworCQlpZiAocHRyLT50eXBlICE9IFRPTU9ZT19UWVBFX1BBVEhfQUNMKQogCQkJY29udGludWU7Ci0JCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCwKLQkJCQkgICBoZWFkKTsKLQkJaWYgKCEoYWNsLT5wZXJtICYgcGVybSkpCi0JCQljb250aW51ZTsKKwkJYWNsID0gY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19wYXRoX2FjbCwgaGVhZCk7CisJCWlmIChwZXJtIDw9IDB4RkZGRikgeworCQkJaWYgKCEoYWNsLT5wZXJtICYgcGVybSkpCisJCQkJY29udGludWU7CisJCX0gZWxzZSB7CisJCQlpZiAoIShhY2wtPnBlcm1faGlnaCAmIChwZXJtID4+IDE2KSkpCisJCQkJY29udGludWU7CisJCX0KIAkJaWYgKG1heV91c2VfcGF0dGVybiB8fCAhYWNsLT5maWxlbmFtZS0+aXNfcGF0dGVybmVkKSB7CiAJCQlpZiAoIXRvbW95b19wYXRoX21hdGNoZXNfcGF0dGVybihmaWxlbmFtZSwKIAkJCQkJCQkgYWNsLT5maWxlbmFtZSkpCkBAIC02NzksNyArNjQ5LDYgQEAKIAkJZXJyb3IgPSAwOwogCQlicmVhazsKIAl9Ci0JdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtNjkxLDI3ICs2NjAsMjggQEAKICAqIEBvcGVyYXRpb246IE1vZGUgKCJyZWFkIiBvciAid3JpdGUiIG9yICJyZWFkL3dyaXRlIiBvciAiZXhlY3V0ZSIpLgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCAtRVBFUk0gb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIHN0YXRpYyBpbnQgdG9tb3lvX2NoZWNrX2ZpbGVfYWNsKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKIAkJCQkgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lLAogCQkJCSBjb25zdCB1OCBvcGVyYXRpb24pCiB7Ci0JdTE2IHBlcm0gPSAwOworCXUzMiBwZXJtID0gMDsKIAogCWlmICghdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSkpCiAJCXJldHVybiAwOwogCWlmIChvcGVyYXRpb24gPT0gNikKLQkJcGVybSA9IDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0w7CisJCXBlcm0gPSAxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEU7CiAJZWxzZSBpZiAob3BlcmF0aW9uID09IDQpCi0JCXBlcm0gPSAxIDw8IFRPTU9ZT19UWVBFX1JFQURfQUNMOworCQlwZXJtID0gMSA8PCBUT01PWU9fVFlQRV9SRUFEOwogCWVsc2UgaWYgKG9wZXJhdGlvbiA9PSAyKQotCQlwZXJtID0gMSA8PCBUT01PWU9fVFlQRV9XUklURV9BQ0w7CisJCXBlcm0gPSAxIDw8IFRPTU9ZT19UWVBFX1dSSVRFOwogCWVsc2UgaWYgKG9wZXJhdGlvbiA9PSAxKQotCQlwZXJtID0gMSA8PCBUT01PWU9fVFlQRV9FWEVDVVRFX0FDTDsKKwkJcGVybSA9IDEgPDwgVE9NT1lPX1RZUEVfRVhFQ1VURTsKIAllbHNlCiAJCUJVRygpOwotCXJldHVybiB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsMihkb21haW4sIGZpbGVuYW1lLCBwZXJtLAotCQkJCQkgICAgIG9wZXJhdGlvbiAhPSAxKTsKKwlyZXR1cm4gdG9tb3lvX3BhdGhfYWNsMihkb21haW4sIGZpbGVuYW1lLCBwZXJtLCBvcGVyYXRpb24gIT0gMSk7CiB9CiAKIC8qKgpAQCAtNzI0LDYgKzY5NCw4IEBACiAgKiBAbW9kZTogICAgICBBY2Nlc3MgY29udHJvbCBtb2RlLgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwogc3RhdGljIGludCB0b21veW9fY2hlY2tfZmlsZV9wZXJtMihzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICogY29uc3QgZG9tYWluLAogCQkJCSAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSwKQEAgLTczNywxOCArNzA5LDE3IEBACiAJaWYgKCFmaWxlbmFtZSkKIAkJcmV0dXJuIDA7CiAJZXJyb3IgPSB0b21veW9fY2hlY2tfZmlsZV9hY2woZG9tYWluLCBmaWxlbmFtZSwgcGVybSk7Ci0JaWYgKGVycm9yICYmIHBlcm0gPT0gNCAmJgotCSAgICAoZG9tYWluLT5mbGFncyAmIFRPTU9ZT19ET01BSU5fRkxBR1NfSUdOT1JFX0dMT0JBTF9BTExPV19SRUFEKSA9PSAwCisJaWYgKGVycm9yICYmIHBlcm0gPT0gNCAmJiAhZG9tYWluLT5pZ25vcmVfZ2xvYmFsX2FsbG93X3JlYWQKIAkgICAgJiYgdG9tb3lvX2lzX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGUoZmlsZW5hbWUpKQogCQllcnJvciA9IDA7CiAJaWYgKHBlcm0gPT0gNikKLQkJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQoVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wpOworCQltc2cgPSB0b21veW9fcGF0aDJrZXl3b3JkKFRPTU9ZT19UWVBFX1JFQURfV1JJVEUpOwogCWVsc2UgaWYgKHBlcm0gPT0gNCkKLQkJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQoVE9NT1lPX1RZUEVfUkVBRF9BQ0wpOworCQltc2cgPSB0b21veW9fcGF0aDJrZXl3b3JkKFRPTU9ZT19UWVBFX1JFQUQpOwogCWVsc2UgaWYgKHBlcm0gPT0gMikKLQkJbXNnID0gdG9tb3lvX3NwMmtleXdvcmQoVE9NT1lPX1RZUEVfV1JJVEVfQUNMKTsKKwkJbXNnID0gdG9tb3lvX3BhdGgya2V5d29yZChUT01PWU9fVFlQRV9XUklURSk7CiAJZWxzZSBpZiAocGVybSA9PSAxKQotCQltc2cgPSB0b21veW9fc3Aya2V5d29yZChUT01PWU9fVFlQRV9FWEVDVVRFX0FDTCk7CisJCW1zZyA9IHRvbW95b19wYXRoMmtleXdvcmQoVE9NT1lPX1RZUEVfRVhFQ1VURSk7CiAJZWxzZQogCQlCVUcoKTsKIAlpZiAoIWVycm9yKQpAQCAtNzc3LDYgKzc0OCw4IEBACiAgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCiBpbnQgdG9tb3lvX3dyaXRlX2ZpbGVfcG9saWN5KGNoYXIgKmRhdGEsIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKIAkJCSAgICAgY29uc3QgYm9vbCBpc19kZWxldGUpCkBAIC03OTUsMjggKzc2OCwyOCBAQAogCWlmIChzdHJuY21wKGRhdGEsICJhbGxvd18iLCA2KSkKIAkJZ290byBvdXQ7CiAJZGF0YSArPSA2OwotCWZvciAodHlwZSA9IDA7IHR5cGUgPCBUT01PWU9fTUFYX1NJTkdMRV9QQVRIX09QRVJBVElPTjsgdHlwZSsrKSB7Ci0JCWlmIChzdHJjbXAoZGF0YSwgdG9tb3lvX3NwX2tleXdvcmRbdHlwZV0pKQorCWZvciAodHlwZSA9IDA7IHR5cGUgPCBUT01PWU9fTUFYX1BBVEhfT1BFUkFUSU9OOyB0eXBlKyspIHsKKwkJaWYgKHN0cmNtcChkYXRhLCB0b21veW9fcGF0aF9rZXl3b3JkW3R5cGVdKSkKIAkJCWNvbnRpbnVlOwotCQlyZXR1cm4gdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2wodHlwZSwgZmlsZW5hbWUsCi0JCQkJCQkgICAgIGRvbWFpbiwgaXNfZGVsZXRlKTsKKwkJcmV0dXJuIHRvbW95b191cGRhdGVfcGF0aF9hY2wodHlwZSwgZmlsZW5hbWUsIGRvbWFpbiwKKwkJCQkJICAgICAgaXNfZGVsZXRlKTsKIAl9CiAJZmlsZW5hbWUyID0gc3RyY2hyKGZpbGVuYW1lLCAnICcpOwogCWlmICghZmlsZW5hbWUyKQogCQlnb3RvIG91dDsKIAkqZmlsZW5hbWUyKysgPSAnXDAnOwotCWZvciAodHlwZSA9IDA7IHR5cGUgPCBUT01PWU9fTUFYX0RPVUJMRV9QQVRIX09QRVJBVElPTjsgdHlwZSsrKSB7Ci0JCWlmIChzdHJjbXAoZGF0YSwgdG9tb3lvX2RwX2tleXdvcmRbdHlwZV0pKQorCWZvciAodHlwZSA9IDA7IHR5cGUgPCBUT01PWU9fTUFYX1BBVEgyX09QRVJBVElPTjsgdHlwZSsrKSB7CisJCWlmIChzdHJjbXAoZGF0YSwgdG9tb3lvX3BhdGgyX2tleXdvcmRbdHlwZV0pKQogCQkJY29udGludWU7Ci0JCXJldHVybiB0b21veW9fdXBkYXRlX2RvdWJsZV9wYXRoX2FjbCh0eXBlLCBmaWxlbmFtZSwgZmlsZW5hbWUyLAotCQkJCQkJICAgICBkb21haW4sIGlzX2RlbGV0ZSk7CisJCXJldHVybiB0b21veW9fdXBkYXRlX3BhdGgyX2FjbCh0eXBlLCBmaWxlbmFtZSwgZmlsZW5hbWUyLAorCQkJCQkgICAgICAgZG9tYWluLCBpc19kZWxldGUpOwogCX0KICBvdXQ6CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIC8qKgotICogdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2wgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCIgbGlzdC4KKyAqIHRvbW95b191cGRhdGVfcGF0aF9hY2wgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fcGF0aF9hY2wiIGxpc3QuCiAgKgogICogQHR5cGU6ICAgICAgVHlwZSBvZiBvcGVyYXRpb24uCiAgKiBAZmlsZW5hbWU6ICBGaWxlbmFtZS4KQEAgLTgyNCw4NSArNzk3LDgyIEBACiAgKiBAaXNfZGVsZXRlOiBUcnVlIGlmIGl0IGlzIGEgZGVsZXRlIHJlcXVlc3QuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCi1zdGF0aWMgaW50IHRvbW95b191cGRhdGVfc2luZ2xlX3BhdGhfYWNsKGNvbnN0IHU4IHR5cGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAotCQkJCQkgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqCi0JCQkJCSBjb25zdCBkb21haW4sIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQorc3RhdGljIGludCB0b21veW9fdXBkYXRlX3BhdGhfYWNsKGNvbnN0IHU4IHR5cGUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorCQkJCSAgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqY29uc3QgZG9tYWluLAorCQkJCSAgY29uc3QgYm9vbCBpc19kZWxldGUpCiB7Ci0Jc3RhdGljIGNvbnN0IHUxNiByd19tYXNrID0KLQkJKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9BQ0wpIHwgKDEgPDwgVE9NT1lPX1RZUEVfV1JJVEVfQUNMKTsKKwlzdGF0aWMgY29uc3QgdTMyIHJ3X21hc2sgPQorCQkoMSA8PCBUT01PWU9fVFlQRV9SRUFEKSB8ICgxIDw8IFRPTU9ZT19UWVBFX1dSSVRFKTsKIAljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZmlsZW5hbWU7CiAJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOwotCXN0cnVjdCB0b21veW9fc2luZ2xlX3BhdGhfYWNsX3JlY29yZCAqYWNsOwotCWludCBlcnJvciA9IC1FTk9NRU07Ci0JY29uc3QgdTE2IHBlcm0gPSAxIDw8IHR5cGU7CisJc3RydWN0IHRvbW95b19wYXRoX2FjbCAqZW50cnkgPSBOVUxMOworCWludCBlcnJvciA9IGlzX2RlbGV0ZSA/IC1FTk9FTlQgOiAtRU5PTUVNOworCWNvbnN0IHUzMiBwZXJtID0gMSA8PCB0eXBlOwogCiAJaWYgKCFkb21haW4pCiAJCXJldHVybiAtRUlOVkFMOwotCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChmaWxlbmFtZSwgMCwgMCwgMCwgX19mdW5jX18pKQorCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChmaWxlbmFtZSwgMCwgMCwgMCkpCiAJCXJldHVybiAtRUlOVkFMOwotCXNhdmVkX2ZpbGVuYW1lID0gdG9tb3lvX3NhdmVfbmFtZShmaWxlbmFtZSk7CisJc2F2ZWRfZmlsZW5hbWUgPSB0b21veW9fZ2V0X25hbWUoZmlsZW5hbWUpOwogCWlmICghc2F2ZWRfZmlsZW5hbWUpCiAJCXJldHVybiAtRU5PTUVNOwotCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKLQlpZiAoaXNfZGVsZXRlKQotCQlnb3RvIGRlbGV0ZTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgewotCQlpZiAodG9tb3lvX2FjbF90eXBlMShwdHIpICE9IFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTCkKKwlpZiAoIWlzX2RlbGV0ZSkKKwkJZW50cnkgPSBrbWFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwltdXRleF9sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsICphY2wgPQorCQkJY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19wYXRoX2FjbCwgaGVhZCk7CisJCWlmIChwdHItPnR5cGUgIT0gVE9NT1lPX1RZUEVfUEFUSF9BQ0wpCiAJCQljb250aW51ZTsKLQkJYWNsID0gY29udGFpbmVyX29mKHB0ciwgc3RydWN0IHRvbW95b19zaW5nbGVfcGF0aF9hY2xfcmVjb3JkLAotCQkJCSAgIGhlYWQpOwogCQlpZiAoYWNsLT5maWxlbmFtZSAhPSBzYXZlZF9maWxlbmFtZSkKIAkJCWNvbnRpbnVlOwotCQkvKiBTcGVjaWFsIGNhc2UuIENsZWFyIGFsbCBiaXRzIGlmIG1hcmtlZCBhcyBkZWxldGVkLiAqLwotCQlpZiAocHRyLT50eXBlICYgVE9NT1lPX0FDTF9ERUxFVEVEKQotCQkJYWNsLT5wZXJtID0gMDsKLQkJYWNsLT5wZXJtIHw9IHBlcm07Ci0JCWlmICgoYWNsLT5wZXJtICYgcndfbWFzaykgPT0gcndfbWFzaykKLQkJCWFjbC0+cGVybSB8PSAxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMOwotCQllbHNlIGlmIChhY2wtPnBlcm0gJiAoMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTCkpCi0JCQlhY2wtPnBlcm0gfD0gcndfbWFzazsKLQkJcHRyLT50eXBlICY9IH5UT01PWU9fQUNMX0RFTEVURUQ7Ci0JCWVycm9yID0gMDsKLQkJZ290byBvdXQ7Ci0JfQotCS8qIE5vdCBmb3VuZC4gQXBwZW5kIGl0IHRvIHRoZSB0YWlsLiAqLwotCWFjbCA9IHRvbW95b19hbGxvY19hY2xfZWxlbWVudChUT01PWU9fVFlQRV9TSU5HTEVfUEFUSF9BQ0wpOwotCWlmICghYWNsKQotCQlnb3RvIG91dDsKLQlhY2wtPnBlcm0gPSBwZXJtOwotCWlmIChwZXJtID09ICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMKSkKLQkJYWNsLT5wZXJtIHw9IHJ3X21hc2s7Ci0JYWNsLT5maWxlbmFtZSA9IHNhdmVkX2ZpbGVuYW1lOwotCWxpc3RfYWRkX3RhaWwoJmFjbC0+aGVhZC5saXN0LCAmZG9tYWluLT5hY2xfaW5mb19saXN0KTsKLQllcnJvciA9IDA7Ci0JZ290byBvdXQ7Ci0gZGVsZXRlOgotCWVycm9yID0gLUVOT0VOVDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgewotCQlpZiAodG9tb3lvX2FjbF90eXBlMihwdHIpICE9IFRPTU9ZT19UWVBFX1NJTkdMRV9QQVRIX0FDTCkKLQkJCWNvbnRpbnVlOwotCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX3NpbmdsZV9wYXRoX2FjbF9yZWNvcmQsCi0JCQkJICAgaGVhZCk7Ci0JCWlmIChhY2wtPmZpbGVuYW1lICE9IHNhdmVkX2ZpbGVuYW1lKQotCQkJY29udGludWU7Ci0JCWFjbC0+cGVybSAmPSB+cGVybTsKLQkJaWYgKChhY2wtPnBlcm0gJiByd19tYXNrKSAhPSByd19tYXNrKQotCQkJYWNsLT5wZXJtICY9IH4oMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFX0FDTCk7Ci0JCWVsc2UgaWYgKCEoYWNsLT5wZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURV9BQ0wpKSkKLQkJCWFjbC0+cGVybSAmPSB+cndfbWFzazsKLQkJaWYgKCFhY2wtPnBlcm0pCi0JCQlwdHItPnR5cGUgfD0gVE9NT1lPX0FDTF9ERUxFVEVEOworCQlpZiAoaXNfZGVsZXRlKSB7CisJCQlpZiAocGVybSA8PSAweEZGRkYpCisJCQkJYWNsLT5wZXJtICY9IH5wZXJtOworCQkJZWxzZQorCQkJCWFjbC0+cGVybV9oaWdoICY9IH4ocGVybSA+PiAxNik7CisJCQlpZiAoKGFjbC0+cGVybSAmIHJ3X21hc2spICE9IHJ3X21hc2spCisJCQkJYWNsLT5wZXJtICY9IH4oMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFKTsKKwkJCWVsc2UgaWYgKCEoYWNsLT5wZXJtICYgKDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURSkpKQorCQkJCWFjbC0+cGVybSAmPSB+cndfbWFzazsKKwkJfSBlbHNlIHsKKwkJCWlmIChwZXJtIDw9IDB4RkZGRikKKwkJCQlhY2wtPnBlcm0gfD0gcGVybTsKKwkJCWVsc2UKKwkJCQlhY2wtPnBlcm1faGlnaCB8PSAocGVybSA+PiAxNik7CisJCQlpZiAoKGFjbC0+cGVybSAmIHJ3X21hc2spID09IHJ3X21hc2spCisJCQkJYWNsLT5wZXJtIHw9IDEgPDwgVE9NT1lPX1RZUEVfUkVBRF9XUklURTsKKwkJCWVsc2UgaWYgKGFjbC0+cGVybSAmICgxIDw8IFRPTU9ZT19UWVBFX1JFQURfV1JJVEUpKQorCQkJCWFjbC0+cGVybSB8PSByd19tYXNrOworCQl9CiAJCWVycm9yID0gMDsKIAkJYnJlYWs7CiAJfQotIG91dDoKLQl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCWlmICghaXNfZGVsZXRlICYmIGVycm9yICYmIHRvbW95b19tZW1vcnlfb2soZW50cnkpKSB7CisJCWVudHJ5LT5oZWFkLnR5cGUgPSBUT01PWU9fVFlQRV9QQVRIX0FDTDsKKwkJaWYgKHBlcm0gPD0gMHhGRkZGKQorCQkJZW50cnktPnBlcm0gPSBwZXJtOworCQllbHNlCisJCQllbnRyeS0+cGVybV9oaWdoID0gKHBlcm0gPj4gMTYpOworCQlpZiAocGVybSA9PSAoMSA8PCBUT01PWU9fVFlQRV9SRUFEX1dSSVRFKSkKKwkJCWVudHJ5LT5wZXJtIHw9IHJ3X21hc2s7CisJCWVudHJ5LT5maWxlbmFtZSA9IHNhdmVkX2ZpbGVuYW1lOworCQlzYXZlZF9maWxlbmFtZSA9IE5VTEw7CisJCWxpc3RfYWRkX3RhaWxfcmN1KCZlbnRyeS0+aGVhZC5saXN0LCAmZG9tYWluLT5hY2xfaW5mb19saXN0KTsKKwkJZW50cnkgPSBOVUxMOworCQllcnJvciA9IDA7CisJfQorCW11dGV4X3VubG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKKwlrZnJlZShlbnRyeSk7CisJdG9tb3lvX3B1dF9uYW1lKHNhdmVkX2ZpbGVuYW1lKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qKgotICogdG9tb3lvX3VwZGF0ZV9kb3VibGVfcGF0aF9hY2wgLSBVcGRhdGUgInN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCIgbGlzdC4KKyAqIHRvbW95b191cGRhdGVfcGF0aDJfYWNsIC0gVXBkYXRlICJzdHJ1Y3QgdG9tb3lvX3BhdGgyX2FjbCIgbGlzdC4KICAqCiAgKiBAdHlwZTogICAgICBUeXBlIG9mIG9wZXJhdGlvbi4KICAqIEBmaWxlbmFtZTE6IEZpcnN0IGZpbGVuYW1lLgpAQCAtOTExLDk4ICs4ODEsODggQEAKICAqIEBpc19kZWxldGU6IFRydWUgaWYgaXQgaXMgYSBkZWxldGUgcmVxdWVzdC4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KLXN0YXRpYyBpbnQgdG9tb3lvX3VwZGF0ZV9kb3VibGVfcGF0aF9hY2woY29uc3QgdTggdHlwZSwgY29uc3QgY2hhciAqZmlsZW5hbWUxLAotCQkJCQkgY29uc3QgY2hhciAqZmlsZW5hbWUyLAotCQkJCQkgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqCi0JCQkJCSBjb25zdCBkb21haW4sIGNvbnN0IGJvb2wgaXNfZGVsZXRlKQorc3RhdGljIGludCB0b21veW9fdXBkYXRlX3BhdGgyX2FjbChjb25zdCB1OCB0eXBlLCBjb25zdCBjaGFyICpmaWxlbmFtZTEsCisJCQkJICAgY29uc3QgY2hhciAqZmlsZW5hbWUyLAorCQkJCSAgIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmNvbnN0IGRvbWFpbiwKKwkJCQkgICBjb25zdCBib29sIGlzX2RlbGV0ZSkKIHsKIAljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqc2F2ZWRfZmlsZW5hbWUxOwogCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpzYXZlZF9maWxlbmFtZTI7CiAJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqcHRyOwotCXN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCAqYWNsOwotCWludCBlcnJvciA9IC1FTk9NRU07CisJc3RydWN0IHRvbW95b19wYXRoMl9hY2wgKmVudHJ5ID0gTlVMTDsKKwlpbnQgZXJyb3IgPSBpc19kZWxldGUgPyAtRU5PRU5UIDogLUVOT01FTTsKIAljb25zdCB1OCBwZXJtID0gMSA8PCB0eXBlOwogCiAJaWYgKCFkb21haW4pCiAJCXJldHVybiAtRUlOVkFMOwotCWlmICghdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChmaWxlbmFtZTEsIDAsIDAsIDAsIF9fZnVuY19fKSB8fAotCSAgICAhdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChmaWxlbmFtZTIsIDAsIDAsIDAsIF9fZnVuY19fKSkKKwlpZiAoIXRvbW95b19pc19jb3JyZWN0X3BhdGgoZmlsZW5hbWUxLCAwLCAwLCAwKSB8fAorCSAgICAhdG9tb3lvX2lzX2NvcnJlY3RfcGF0aChmaWxlbmFtZTIsIDAsIDAsIDApKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlzYXZlZF9maWxlbmFtZTEgPSB0b21veW9fc2F2ZV9uYW1lKGZpbGVuYW1lMSk7Ci0Jc2F2ZWRfZmlsZW5hbWUyID0gdG9tb3lvX3NhdmVfbmFtZShmaWxlbmFtZTIpOworCXNhdmVkX2ZpbGVuYW1lMSA9IHRvbW95b19nZXRfbmFtZShmaWxlbmFtZTEpOworCXNhdmVkX2ZpbGVuYW1lMiA9IHRvbW95b19nZXRfbmFtZShmaWxlbmFtZTIpOwogCWlmICghc2F2ZWRfZmlsZW5hbWUxIHx8ICFzYXZlZF9maWxlbmFtZTIpCi0JCXJldHVybiAtRU5PTUVNOwotCWRvd25fd3JpdGUoJnRvbW95b19kb21haW5fYWNsX2luZm9fbGlzdF9sb2NrKTsKLQlpZiAoaXNfZGVsZXRlKQotCQlnb3RvIGRlbGV0ZTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgewotCQlpZiAodG9tb3lvX2FjbF90eXBlMShwdHIpICE9IFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCkKKwkJZ290byBvdXQ7CisJaWYgKCFpc19kZWxldGUpCisJCWVudHJ5ID0ga21hbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CisJbXV0ZXhfbG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKKwkJc3RydWN0IHRvbW95b19wYXRoMl9hY2wgKmFjbCA9CisJCQljb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX3BhdGgyX2FjbCwgaGVhZCk7CisJCWlmIChwdHItPnR5cGUgIT0gVE9NT1lPX1RZUEVfUEFUSDJfQUNMKQogCQkJY29udGludWU7Ci0JCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fZG91YmxlX3BhdGhfYWNsX3JlY29yZCwKLQkJCQkgICBoZWFkKTsKIAkJaWYgKGFjbC0+ZmlsZW5hbWUxICE9IHNhdmVkX2ZpbGVuYW1lMSB8fAogCQkgICAgYWNsLT5maWxlbmFtZTIgIT0gc2F2ZWRfZmlsZW5hbWUyKQogCQkJY29udGludWU7Ci0JCS8qIFNwZWNpYWwgY2FzZS4gQ2xlYXIgYWxsIGJpdHMgaWYgbWFya2VkIGFzIGRlbGV0ZWQuICovCi0JCWlmIChwdHItPnR5cGUgJiBUT01PWU9fQUNMX0RFTEVURUQpCi0JCQlhY2wtPnBlcm0gPSAwOwotCQlhY2wtPnBlcm0gfD0gcGVybTsKLQkJcHRyLT50eXBlICY9IH5UT01PWU9fQUNMX0RFTEVURUQ7Ci0JCWVycm9yID0gMDsKLQkJZ290byBvdXQ7Ci0JfQotCS8qIE5vdCBmb3VuZC4gQXBwZW5kIGl0IHRvIHRoZSB0YWlsLiAqLwotCWFjbCA9IHRvbW95b19hbGxvY19hY2xfZWxlbWVudChUT01PWU9fVFlQRV9ET1VCTEVfUEFUSF9BQ0wpOwotCWlmICghYWNsKQotCQlnb3RvIG91dDsKLQlhY2wtPnBlcm0gPSBwZXJtOwotCWFjbC0+ZmlsZW5hbWUxID0gc2F2ZWRfZmlsZW5hbWUxOwotCWFjbC0+ZmlsZW5hbWUyID0gc2F2ZWRfZmlsZW5hbWUyOwotCWxpc3RfYWRkX3RhaWwoJmFjbC0+aGVhZC5saXN0LCAmZG9tYWluLT5hY2xfaW5mb19saXN0KTsKLQllcnJvciA9IDA7Ci0JZ290byBvdXQ7Ci0gZGVsZXRlOgotCWVycm9yID0gLUVOT0VOVDsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgewotCQlpZiAodG9tb3lvX2FjbF90eXBlMihwdHIpICE9IFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCkKLQkJCWNvbnRpbnVlOwotCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQsCi0JCQkJICAgaGVhZCk7Ci0JCWlmIChhY2wtPmZpbGVuYW1lMSAhPSBzYXZlZF9maWxlbmFtZTEgfHwKLQkJICAgIGFjbC0+ZmlsZW5hbWUyICE9IHNhdmVkX2ZpbGVuYW1lMikKLQkJCWNvbnRpbnVlOwotCQlhY2wtPnBlcm0gJj0gfnBlcm07Ci0JCWlmICghYWNsLT5wZXJtKQotCQkJcHRyLT50eXBlIHw9IFRPTU9ZT19BQ0xfREVMRVRFRDsKKwkJaWYgKGlzX2RlbGV0ZSkKKwkJCWFjbC0+cGVybSAmPSB+cGVybTsKKwkJZWxzZQorCQkJYWNsLT5wZXJtIHw9IHBlcm07CiAJCWVycm9yID0gMDsKIAkJYnJlYWs7CiAJfQorCWlmICghaXNfZGVsZXRlICYmIGVycm9yICYmIHRvbW95b19tZW1vcnlfb2soZW50cnkpKSB7CisJCWVudHJ5LT5oZWFkLnR5cGUgPSBUT01PWU9fVFlQRV9QQVRIMl9BQ0w7CisJCWVudHJ5LT5wZXJtID0gcGVybTsKKwkJZW50cnktPmZpbGVuYW1lMSA9IHNhdmVkX2ZpbGVuYW1lMTsKKwkJc2F2ZWRfZmlsZW5hbWUxID0gTlVMTDsKKwkJZW50cnktPmZpbGVuYW1lMiA9IHNhdmVkX2ZpbGVuYW1lMjsKKwkJc2F2ZWRfZmlsZW5hbWUyID0gTlVMTDsKKwkJbGlzdF9hZGRfdGFpbF9yY3UoJmVudHJ5LT5oZWFkLmxpc3QsICZkb21haW4tPmFjbF9pbmZvX2xpc3QpOworCQllbnRyeSA9IE5VTEw7CisJCWVycm9yID0gMDsKKwl9CisJbXV0ZXhfdW5sb2NrKCZ0b21veW9fcG9saWN5X2xvY2spOwogIG91dDoKLQl1cF93cml0ZSgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOworCXRvbW95b19wdXRfbmFtZShzYXZlZF9maWxlbmFtZTEpOworCXRvbW95b19wdXRfbmFtZShzYXZlZF9maWxlbmFtZTIpOworCWtmcmVlKGVudHJ5KTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qKgotICogdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX2FjbCAtIENoZWNrIHBlcm1pc3Npb24gZm9yIHNpbmdsZSBwYXRoIG9wZXJhdGlvbi4KKyAqIHRvbW95b19wYXRoX2FjbCAtIENoZWNrIHBlcm1pc3Npb24gZm9yIHNpbmdsZSBwYXRoIG9wZXJhdGlvbi4KICAqCiAgKiBAZG9tYWluOiAgIFBvaW50ZXIgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iLgogICogQHR5cGU6ICAgICBUeXBlIG9mIG9wZXJhdGlvbi4KICAqIEBmaWxlbmFtZTogRmlsZW5hbWUgdG8gY2hlY2suCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KKyAqCisgKiBDYWxsZXIgaG9sZHMgdG9tb3lvX3JlYWRfbG9jaygpLgogICovCi1zdGF0aWMgaW50IHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9hY2woc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAotCQkJCQljb25zdCB1OCB0eXBlLAotCQkJCQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUpCitzdGF0aWMgaW50IHRvbW95b19wYXRoX2FjbChzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sIGNvbnN0IHU4IHR5cGUsCisJCQkgICBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUpCiB7CiAJaWYgKCF0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKSkKIAkJcmV0dXJuIDA7Ci0JcmV0dXJuIHRvbW95b19jaGVja19zaW5nbGVfcGF0aF9hY2wyKGRvbWFpbiwgZmlsZW5hbWUsIDEgPDwgdHlwZSwgMSk7CisJcmV0dXJuIHRvbW95b19wYXRoX2FjbDIoZG9tYWluLCBmaWxlbmFtZSwgMSA8PCB0eXBlLCAxKTsKIH0KIAogLyoqCi0gKiB0b21veW9fY2hlY2tfZG91YmxlX3BhdGhfYWNsIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgZG91YmxlIHBhdGggb3BlcmF0aW9uLgorICogdG9tb3lvX3BhdGgyX2FjbCAtIENoZWNrIHBlcm1pc3Npb24gZm9yIGRvdWJsZSBwYXRoIG9wZXJhdGlvbi4KICAqCiAgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KICAqIEB0eXBlOiAgICAgIFR5cGUgb2Ygb3BlcmF0aW9uLgpAQCAtMTAxMCwxMyArOTcwLDEzIEBACiAgKiBAZmlsZW5hbWUyOiBTZWNvbmQgZmlsZW5hbWUgdG8gY2hlY2suCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIC1FUEVSTSBvdGhlcndpc2UuCisgKgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19yZWFkX2xvY2soKS4KICAqLwotc3RhdGljIGludCB0b21veW9fY2hlY2tfZG91YmxlX3BhdGhfYWNsKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKLQkJCQkJY29uc3QgdTggdHlwZSwKLQkJCQkJY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKgotCQkJCQlmaWxlbmFtZTEsCi0JCQkJCWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICoKLQkJCQkJZmlsZW5hbWUyKQorc3RhdGljIGludCB0b21veW9fcGF0aDJfYWNsKGNvbnN0IHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKKwkJCSAgICBjb25zdCB1OCB0eXBlLAorCQkJICAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZTEsCisJCQkgICAgY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmZpbGVuYW1lMikKIHsKIAlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICpwdHI7CiAJY29uc3QgdTggcGVybSA9IDEgPDwgdHlwZTsKQEAgLTEwMjQsMTMgKzk4NCwxMSBAQAogCiAJaWYgKCF0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKSkKIAkJcmV0dXJuIDA7Ci0JZG93bl9yZWFkKCZ0b21veW9fZG9tYWluX2FjbF9pbmZvX2xpc3RfbG9jayk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShwdHIsICZkb21haW4tPmFjbF9pbmZvX2xpc3QsIGxpc3QpIHsKLQkJc3RydWN0IHRvbW95b19kb3VibGVfcGF0aF9hY2xfcmVjb3JkICphY2w7Ci0JCWlmICh0b21veW9fYWNsX3R5cGUyKHB0cikgIT0gVE9NT1lPX1RZUEVfRE9VQkxFX1BBVEhfQUNMKQorCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJmRvbWFpbi0+YWNsX2luZm9fbGlzdCwgbGlzdCkgeworCQlzdHJ1Y3QgdG9tb3lvX3BhdGgyX2FjbCAqYWNsOworCQlpZiAocHRyLT50eXBlICE9IFRPTU9ZT19UWVBFX1BBVEgyX0FDTCkKIAkJCWNvbnRpbnVlOwotCQlhY2wgPSBjb250YWluZXJfb2YocHRyLCBzdHJ1Y3QgdG9tb3lvX2RvdWJsZV9wYXRoX2FjbF9yZWNvcmQsCi0JCQkJICAgaGVhZCk7CisJCWFjbCA9IGNvbnRhaW5lcl9vZihwdHIsIHN0cnVjdCB0b21veW9fcGF0aDJfYWNsLCBoZWFkKTsKIAkJaWYgKCEoYWNsLT5wZXJtICYgcGVybSkpCiAJCQljb250aW51ZTsKIAkJaWYgKCF0b21veW9fcGF0aF9tYXRjaGVzX3BhdHRlcm4oZmlsZW5hbWUxLCBhY2wtPmZpbGVuYW1lMSkpCkBAIC0xMDQwLDEyICs5OTgsMTEgQEAKIAkJZXJyb3IgPSAwOwogCQlicmVhazsKIAl9Ci0JdXBfcmVhZCgmdG9tb3lvX2RvbWFpbl9hY2xfaW5mb19saXN0X2xvY2spOwogCXJldHVybiBlcnJvcjsKIH0KIAogLyoqCi0gKiB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfcGVybWlzc2lvbjIgLSBDaGVjayBwZXJtaXNzaW9uIGZvciBzaW5nbGUgcGF0aCBvcGVyYXRpb24uCisgKiB0b21veW9fcGF0aF9wZXJtaXNzaW9uMiAtIENoZWNrIHBlcm1pc3Npb24gZm9yIHNpbmdsZSBwYXRoIG9wZXJhdGlvbi4KICAqCiAgKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KICAqIEBvcGVyYXRpb246IFR5cGUgb2Ygb3BlcmF0aW9uLgpAQCAtMTA1MywxMSArMTAxMCwxMyBAQAogICogQG1vZGU6ICAgICAgQWNjZXNzIGNvbnRyb2wgbW9kZS4KICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KLXN0YXRpYyBpbnQgdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX3Blcm1pc3Npb24yKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKgotCQkJCQkJY29uc3QgZG9tYWluLCB1OCBvcGVyYXRpb24sCi0JCQkJCQljb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqCi0JCQkJCQlmaWxlbmFtZSwgY29uc3QgdTggbW9kZSkKK3N0YXRpYyBpbnQgdG9tb3lvX3BhdGhfcGVybWlzc2lvbjIoc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqY29uc3QgZG9tYWluLAorCQkJCSAgIHU4IG9wZXJhdGlvbiwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUsCisJCQkJICAgY29uc3QgdTggbW9kZSkKIHsKIAljb25zdCBjaGFyICptc2c7CiAJaW50IGVycm9yOwpAQCAtMTA2Niw4ICsxMDI1LDggQEAKIAlpZiAoIW1vZGUpCiAJCXJldHVybiAwOwogIG5leHQ6Ci0JZXJyb3IgPSB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfYWNsKGRvbWFpbiwgb3BlcmF0aW9uLCBmaWxlbmFtZSk7Ci0JbXNnID0gdG9tb3lvX3NwMmtleXdvcmQob3BlcmF0aW9uKTsKKwllcnJvciA9IHRvbW95b19wYXRoX2FjbChkb21haW4sIG9wZXJhdGlvbiwgZmlsZW5hbWUpOworCW1zZyA9IHRvbW95b19wYXRoMmtleXdvcmQob3BlcmF0aW9uKTsKIAlpZiAoIWVycm9yKQogCQlnb3RvIG9rOwogCWlmICh0b21veW9fdmVyYm9zZV9tb2RlKGRvbWFpbikpCkBAIC0xMDc2LDcgKzEwMzUsNyBAQAogCQkgICAgICAgdG9tb3lvX2dldF9sYXN0X25hbWUoZG9tYWluKSk7CiAJaWYgKG1vZGUgPT0gMSAmJiB0b21veW9fZG9tYWluX3F1b3RhX2lzX29rKGRvbWFpbikpIHsKIAkJY29uc3QgY2hhciAqbmFtZSA9IHRvbW95b19nZXRfZmlsZV9wYXR0ZXJuKGZpbGVuYW1lKS0+bmFtZTsKLQkJdG9tb3lvX3VwZGF0ZV9zaW5nbGVfcGF0aF9hY2wob3BlcmF0aW9uLCBuYW1lLCBkb21haW4sIGZhbHNlKTsKKwkJdG9tb3lvX3VwZGF0ZV9wYXRoX2FjbChvcGVyYXRpb24sIG5hbWUsIGRvbWFpbiwgZmFsc2UpOwogCX0KIAlpZiAoIWlzX2VuZm9yY2UpCiAJCWVycm9yID0gMDsKQEAgLTEwODYsOSArMTA0NSw5IEBACiAJICogd2UgbmVlZCB0byBjaGVjayAiYWxsb3dfcmV3cml0ZSIgcGVybWlzc2lvbiBpZiB0aGUgZmlsZW5hbWUgaXMKIAkgKiBzcGVjaWZpZWQgYnkgImRlbnlfcmV3cml0ZSIga2V5d29yZC4KIAkgKi8KLQlpZiAoIWVycm9yICYmIG9wZXJhdGlvbiA9PSBUT01PWU9fVFlQRV9UUlVOQ0FURV9BQ0wgJiYKKwlpZiAoIWVycm9yICYmIG9wZXJhdGlvbiA9PSBUT01PWU9fVFlQRV9UUlVOQ0FURSAmJgogCSAgICB0b21veW9faXNfbm9fcmV3cml0ZV9maWxlKGZpbGVuYW1lKSkgewotCQlvcGVyYXRpb24gPSBUT01PWU9fVFlQRV9SRVdSSVRFX0FDTDsKKwkJb3BlcmF0aW9uID0gVE9NT1lPX1RZUEVfUkVXUklURTsKIAkJZ290byBuZXh0OwogCX0KIAlyZXR1cm4gZXJyb3I7CkBAIC0xMTAxLDYgKzEwNjAsOCBAQAogICogQGZpbGVuYW1lOiBDaGVjayBwZXJtaXNzaW9uIGZvciAiZXhlY3V0ZSIuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZldmFsdWUgb3RoZXJ3aXNlLgorICoKKyAqIENhbGxlciBob2xkcyB0b21veW9fcmVhZF9sb2NrKCkuCiAgKi8KIGludCB0b21veW9fY2hlY2tfZXhlY19wZXJtKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKIAkJCSAgIGNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICpmaWxlbmFtZSkKQEAgLTExMjksNiArMTA5MCw3IEBACiAJc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmJ1ZjsKIAljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CiAJY29uc3QgYm9vbCBpc19lbmZvcmNlID0gKG1vZGUgPT0gMyk7CisJaW50IGlkeDsKIAogCWlmICghbW9kZSB8fCAhcGF0aC0+bW50KQogCQlyZXR1cm4gMDsKQEAgLTExNDAsNiArMTEwMiw3IEBACiAJCSAqIGRvbid0IGNhbGwgbWUuCiAJCSAqLwogCQlyZXR1cm4gMDsKKwlpZHggPSB0b21veW9fcmVhZF9sb2NrKCk7CiAJYnVmID0gdG9tb3lvX2dldF9wYXRoKHBhdGgpOwogCWlmICghYnVmKQogCQlnb3RvIG91dDsKQEAgLTExNTIsNDkgKzExMTUsNTAgQEAKIAlpZiAoKGFjY19tb2RlICYgTUFZX1dSSVRFKSAmJgogCSAgICAoKGZsYWcgJiBPX1RSVU5DKSB8fCAhKGZsYWcgJiBPX0FQUEVORCkpICYmCiAJICAgICh0b21veW9faXNfbm9fcmV3cml0ZV9maWxlKGJ1ZikpKSB7Ci0JCWVycm9yID0gdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX3Blcm1pc3Npb24yKGRvbWFpbiwKLQkJCQkJCSAgICAgVE9NT1lPX1RZUEVfUkVXUklURV9BQ0wsCi0JCQkJCQkJICAgICBidWYsIG1vZGUpOworCQllcnJvciA9IHRvbW95b19wYXRoX3Blcm1pc3Npb24yKGRvbWFpbiwgVE9NT1lPX1RZUEVfUkVXUklURSwKKwkJCQkJCWJ1ZiwgbW9kZSk7CiAJfQogCWlmICghZXJyb3IpCiAJCWVycm9yID0gdG9tb3lvX2NoZWNrX2ZpbGVfcGVybTIoZG9tYWluLCBidWYsIGFjY19tb2RlLCAib3BlbiIsCiAJCQkJCQltb2RlKTsKIAlpZiAoIWVycm9yICYmIChmbGFnICYgT19UUlVOQykpCi0JCWVycm9yID0gdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX3Blcm1pc3Npb24yKGRvbWFpbiwKLQkJCQkJCSAgICAgVE9NT1lPX1RZUEVfVFJVTkNBVEVfQUNMLAotCQkJCQkJCSAgICAgYnVmLCBtb2RlKTsKKwkJZXJyb3IgPSB0b21veW9fcGF0aF9wZXJtaXNzaW9uMihkb21haW4sIFRPTU9ZT19UWVBFX1RSVU5DQVRFLAorCQkJCQkJYnVmLCBtb2RlKTsKICBvdXQ6Ci0JdG9tb3lvX2ZyZWUoYnVmKTsKKwlrZnJlZShidWYpOworCXRvbW95b19yZWFkX3VubG9jayhpZHgpOwogCWlmICghaXNfZW5mb3JjZSkKIAkJZXJyb3IgPSAwOwogCXJldHVybiBlcnJvcjsKIH0KIAogLyoqCi0gKiB0b21veW9fY2hlY2tfMXBhdGhfcGVybSAtIENoZWNrIHBlcm1pc3Npb24gZm9yICJjcmVhdGUiLCAidW5saW5rIiwgIm1rZGlyIiwgInJtZGlyIiwgIm1rZmlmbyIsICJta3NvY2siLCAibWtibG9jayIsICJta2NoYXIiLCAidHJ1bmNhdGUiIGFuZCAic3ltbGluayIuCisgKiB0b21veW9fcGF0aF9wZXJtIC0gQ2hlY2sgcGVybWlzc2lvbiBmb3IgImNyZWF0ZSIsICJ1bmxpbmsiLCAibWtkaXIiLCAicm1kaXIiLCAibWtmaWZvIiwgIm1rc29jayIsICJta2Jsb2NrIiwgIm1rY2hhciIsICJ0cnVuY2F0ZSIsICJzeW1saW5rIiwgImlvY3RsIiwgImNobW9kIiwgImNob3duIiwgImNoZ3JwIiwgImNocm9vdCIsICJtb3VudCIgYW5kICJ1bm1vdW50Ii4KICAqCi0gKiBAZG9tYWluOiAgICBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KICAqIEBvcGVyYXRpb246IFR5cGUgb2Ygb3BlcmF0aW9uLgogICogQHBhdGg6ICAgICAgUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCiAgKi8KLWludCB0b21veW9fY2hlY2tfMXBhdGhfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCi0JCQkgICAgY29uc3QgdTggb3BlcmF0aW9uLCBzdHJ1Y3QgcGF0aCAqcGF0aCkKK2ludCB0b21veW9fcGF0aF9wZXJtKGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgpCiB7CiAJaW50IGVycm9yID0gLUVOT01FTTsKIAlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqYnVmOworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IHRvbW95b19kb21haW4oKTsKIAljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CiAJY29uc3QgYm9vbCBpc19lbmZvcmNlID0gKG1vZGUgPT0gMyk7CisJaW50IGlkeDsKIAogCWlmICghbW9kZSB8fCAhcGF0aC0+bW50KQogCQlyZXR1cm4gMDsKKwlpZHggPSB0b21veW9fcmVhZF9sb2NrKCk7CiAJYnVmID0gdG9tb3lvX2dldF9wYXRoKHBhdGgpOwogCWlmICghYnVmKQogCQlnb3RvIG91dDsKIAlzd2l0Y2ggKG9wZXJhdGlvbikgewotCWNhc2UgVE9NT1lPX1RZUEVfTUtESVJfQUNMOgotCWNhc2UgVE9NT1lPX1RZUEVfUk1ESVJfQUNMOgorCWNhc2UgVE9NT1lPX1RZUEVfTUtESVI6CisJY2FzZSBUT01PWU9fVFlQRV9STURJUjoKKwljYXNlIFRPTU9ZT19UWVBFX0NIUk9PVDoKIAkJaWYgKCFidWYtPmlzX2RpcikgewogCQkJLyoKIAkJCSAqIHRvbW95b19nZXRfcGF0aCgpIHJlc2VydmVzIHNwYWNlIGZvciBhcHBlbmRpbmcgIi8uIgpAQCAtMTIwMywxMCArMTE2NywxMCBAQAogCQkJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKGJ1Zik7CiAJCX0KIAl9Ci0JZXJyb3IgPSB0b21veW9fY2hlY2tfc2luZ2xlX3BhdGhfcGVybWlzc2lvbjIoZG9tYWluLCBvcGVyYXRpb24sIGJ1ZiwKLQkJCQkJCSAgICAgbW9kZSk7CisJZXJyb3IgPSB0b21veW9fcGF0aF9wZXJtaXNzaW9uMihkb21haW4sIG9wZXJhdGlvbiwgYnVmLCBtb2RlKTsKICBvdXQ6Ci0JdG9tb3lvX2ZyZWUoYnVmKTsKKwlrZnJlZShidWYpOworCXRvbW95b19yZWFkX3VubG9jayhpZHgpOwogCWlmICghaXNfZW5mb3JjZSkKIAkJZXJyb3IgPSAwOwogCXJldHVybiBlcnJvcjsKQEAgLTEyMTUsMjEgKzExNzksMjMgQEAKIC8qKgogICogdG9tb3lvX2NoZWNrX3Jld3JpdGVfcGVybWlzc2lvbiAtIENoZWNrIHBlcm1pc3Npb24gZm9yICJyZXdyaXRlIi4KICAqCi0gKiBAZG9tYWluOiBQb2ludGVyIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIi4KICAqIEBmaWxwOiBQb2ludGVyIHRvICJzdHJ1Y3QgZmlsZSIuCiAgKgogICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4KICAqLwotaW50IHRvbW95b19jaGVja19yZXdyaXRlX3Blcm1pc3Npb24oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAotCQkJCSAgICBzdHJ1Y3QgZmlsZSAqZmlscCkKK2ludCB0b21veW9fY2hlY2tfcmV3cml0ZV9wZXJtaXNzaW9uKHN0cnVjdCBmaWxlICpmaWxwKQogewogCWludCBlcnJvciA9IC1FTk9NRU07CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gdG9tb3lvX2RvbWFpbigpOwogCWNvbnN0IHU4IG1vZGUgPSB0b21veW9fY2hlY2tfZmxhZ3MoZG9tYWluLCBUT01PWU9fTUFDX0ZPUl9GSUxFKTsKIAljb25zdCBib29sIGlzX2VuZm9yY2UgPSAobW9kZSA9PSAzKTsKIAlzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqYnVmOworCWludCBpZHg7CiAKIAlpZiAoIW1vZGUgfHwgIWZpbHAtPmZfcGF0aC5tbnQpCiAJCXJldHVybiAwOworCisJaWR4ID0gdG9tb3lvX3JlYWRfbG9jaygpOwogCWJ1ZiA9IHRvbW95b19nZXRfcGF0aCgmZmlscC0+Zl9wYXRoKTsKIAlpZiAoIWJ1ZikKIAkJZ290byBvdXQ7CkBAIC0xMjM3LDM4ICsxMjAzLDM4IEBACiAJCWVycm9yID0gMDsKIAkJZ290byBvdXQ7CiAJfQotCWVycm9yID0gdG9tb3lvX2NoZWNrX3NpbmdsZV9wYXRoX3Blcm1pc3Npb24yKGRvbWFpbiwKLQkJCQkJCSAgICAgVE9NT1lPX1RZUEVfUkVXUklURV9BQ0wsCi0JCQkJCQkgICAgIGJ1ZiwgbW9kZSk7CisJZXJyb3IgPSB0b21veW9fcGF0aF9wZXJtaXNzaW9uMihkb21haW4sIFRPTU9ZT19UWVBFX1JFV1JJVEUsIGJ1ZiwgbW9kZSk7CiAgb3V0OgotCXRvbW95b19mcmVlKGJ1Zik7CisJa2ZyZWUoYnVmKTsKKwl0b21veW9fcmVhZF91bmxvY2soaWR4KTsKIAlpZiAoIWlzX2VuZm9yY2UpCiAJCWVycm9yID0gMDsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qKgotICogdG9tb3lvX2NoZWNrXzJwYXRoX3Blcm0gLSBDaGVjayBwZXJtaXNzaW9uIGZvciAicmVuYW1lIiBhbmQgImxpbmsiLgorICogdG9tb3lvX3BhdGgyX3Blcm0gLSBDaGVjayBwZXJtaXNzaW9uIGZvciAicmVuYW1lIiwgImxpbmsiIGFuZCAicGl2b3Rfcm9vdCIuCiAgKgotICogQGRvbWFpbjogICAgUG9pbnRlciB0byAic3RydWN0IHRvbW95b19kb21haW5faW5mbyIuCiAgKiBAb3BlcmF0aW9uOiBUeXBlIG9mIG9wZXJhdGlvbi4KICAqIEBwYXRoMTogICAgICBQb2ludGVyIHRvICJzdHJ1Y3QgcGF0aCIuCiAgKiBAcGF0aDI6ICAgICAgUG9pbnRlciB0byAic3RydWN0IHBhdGgiLgogICoKICAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuCiAgKi8KLWludCB0b21veW9fY2hlY2tfMnBhdGhfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICogY29uc3QgZG9tYWluLAotCQkJICAgIGNvbnN0IHU4IG9wZXJhdGlvbiwgc3RydWN0IHBhdGggKnBhdGgxLAotCQkJICAgIHN0cnVjdCBwYXRoICpwYXRoMikKK2ludCB0b21veW9fcGF0aDJfcGVybShjb25zdCB1OCBvcGVyYXRpb24sIHN0cnVjdCBwYXRoICpwYXRoMSwKKwkJICAgICAgc3RydWN0IHBhdGggKnBhdGgyKQogewogCWludCBlcnJvciA9IC1FTk9NRU07CiAJc3RydWN0IHRvbW95b19wYXRoX2luZm8gKmJ1ZjEsICpidWYyOworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IHRvbW95b19kb21haW4oKTsKIAljb25zdCB1OCBtb2RlID0gdG9tb3lvX2NoZWNrX2ZsYWdzKGRvbWFpbiwgVE9NT1lPX01BQ19GT1JfRklMRSk7CiAJY29uc3QgYm9vbCBpc19lbmZvcmNlID0gKG1vZGUgPT0gMyk7CiAJY29uc3QgY2hhciAqbXNnOworCWludCBpZHg7CiAKIAlpZiAoIW1vZGUgfHwgIXBhdGgxLT5tbnQgfHwgIXBhdGgyLT5tbnQpCiAJCXJldHVybiAwOworCWlkeCA9IHRvbW95b19yZWFkX2xvY2soKTsKIAlidWYxID0gdG9tb3lvX2dldF9wYXRoKHBhdGgxKTsKIAlidWYyID0gdG9tb3lvX2dldF9wYXRoKHBhdGgyKTsKIAlpZiAoIWJ1ZjEgfHwgIWJ1ZjIpCkBAIC0xMjg5LDggKzEyNTUsOCBAQAogCQkJfQogCQl9CiAJfQotCWVycm9yID0gdG9tb3lvX2NoZWNrX2RvdWJsZV9wYXRoX2FjbChkb21haW4sIG9wZXJhdGlvbiwgYnVmMSwgYnVmMik7Ci0JbXNnID0gdG9tb3lvX2RwMmtleXdvcmQob3BlcmF0aW9uKTsKKwllcnJvciA9IHRvbW95b19wYXRoMl9hY2woZG9tYWluLCBvcGVyYXRpb24sIGJ1ZjEsIGJ1ZjIpOworCW1zZyA9IHRvbW95b19wYXRoMjJrZXl3b3JkKG9wZXJhdGlvbik7CiAJaWYgKCFlcnJvcikKIAkJZ290byBvdXQ7CiAJaWYgKHRvbW95b192ZXJib3NlX21vZGUoZG9tYWluKSkKQEAgLTEzMDEsMTIgKzEyNjcsMTMgQEAKIAlpZiAobW9kZSA9PSAxICYmIHRvbW95b19kb21haW5fcXVvdGFfaXNfb2soZG9tYWluKSkgewogCQljb25zdCBjaGFyICpuYW1lMSA9IHRvbW95b19nZXRfZmlsZV9wYXR0ZXJuKGJ1ZjEpLT5uYW1lOwogCQljb25zdCBjaGFyICpuYW1lMiA9IHRvbW95b19nZXRfZmlsZV9wYXR0ZXJuKGJ1ZjIpLT5uYW1lOwotCQl0b21veW9fdXBkYXRlX2RvdWJsZV9wYXRoX2FjbChvcGVyYXRpb24sIG5hbWUxLCBuYW1lMiwgZG9tYWluLAotCQkJCQkgICAgICBmYWxzZSk7CisJCXRvbW95b191cGRhdGVfcGF0aDJfYWNsKG9wZXJhdGlvbiwgbmFtZTEsIG5hbWUyLCBkb21haW4sCisJCQkJCWZhbHNlKTsKIAl9CiAgb3V0OgotCXRvbW95b19mcmVlKGJ1ZjEpOwotCXRvbW95b19mcmVlKGJ1ZjIpOworCWtmcmVlKGJ1ZjEpOworCWtmcmVlKGJ1ZjIpOworCXRvbW95b19yZWFkX3VubG9jayhpZHgpOwogCWlmICghaXNfZW5mb3JjZSkKIAkJZXJyb3IgPSAwOwogCXJldHVybiBlcnJvcjsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9nYy5jIGIvc2VjdXJpdHkvdG9tb3lvL2djLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY0NTUyNQotLS0gL2Rldi9udWxsCisrKyBiL3NlY3VyaXR5L3RvbW95by9nYy5jCkBAIC0wLDAgKzEsMzcwIEBACisvKgorICogc2VjdXJpdHkvdG9tb3lvL2djLmMKKyAqCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgRG9tYWluLUJhc2VkIE1hbmRhdG9yeSBBY2Nlc3MgQ29udHJvbC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAxMCAgTlRUIERBVEEgQ09SUE9SQVRJT04KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbW1vbi5oIgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KKworZW51bSB0b21veW9fZ2NfaWQgeworCVRPTU9ZT19JRF9ET01BSU5fSU5JVElBTElaRVIsCisJVE9NT1lPX0lEX0RPTUFJTl9LRUVQRVIsCisJVE9NT1lPX0lEX0FMSUFTLAorCVRPTU9ZT19JRF9HTE9CQUxMWV9SRUFEQUJMRSwKKwlUT01PWU9fSURfUEFUVEVSTiwKKwlUT01PWU9fSURfTk9fUkVXUklURSwKKwlUT01PWU9fSURfTUFOQUdFUiwKKwlUT01PWU9fSURfTkFNRSwKKwlUT01PWU9fSURfQUNMLAorCVRPTU9ZT19JRF9ET01BSU4KK307CisKK3N0cnVjdCB0b21veW9fZ2NfZW50cnkgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwlpbnQgdHlwZTsKKwl2b2lkICplbGVtZW50OworfTsKK3N0YXRpYyBMSVNUX0hFQUQodG9tb3lvX2djX3F1ZXVlKTsKK3N0YXRpYyBERUZJTkVfTVVURVgodG9tb3lvX2djX211dGV4KTsKKworLyogQ2FsbGVyIGhvbGRzIHRvbW95b19wb2xpY3lfbG9jayBtdXRleC4gKi8KK3N0YXRpYyBib29sIHRvbW95b19hZGRfdG9fZ2MoY29uc3QgaW50IHR5cGUsIHZvaWQgKmVsZW1lbnQpCit7CisJc3RydWN0IHRvbW95b19nY19lbnRyeSAqZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfQVRPTUlDKTsKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm4gZmFsc2U7CisJZW50cnktPnR5cGUgPSB0eXBlOworCWVudHJ5LT5lbGVtZW50ID0gZWxlbWVudDsKKwlsaXN0X2FkZCgmZW50cnktPmxpc3QsICZ0b21veW9fZ2NfcXVldWUpOworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCB0b21veW9fZGVsX2FsbG93X3JlYWQKKyhzdHJ1Y3QgdG9tb3lvX2dsb2JhbGx5X3JlYWRhYmxlX2ZpbGVfZW50cnkgKnB0cikKK3sKKwl0b21veW9fcHV0X25hbWUocHRyLT5maWxlbmFtZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRvbW95b19kZWxfZmlsZV9wYXR0ZXJuKHN0cnVjdCB0b21veW9fcGF0dGVybl9lbnRyeSAqcHRyKQoreworCXRvbW95b19wdXRfbmFtZShwdHItPnBhdHRlcm4pOworfQorCitzdGF0aWMgdm9pZCB0b21veW9fZGVsX25vX3Jld3JpdGUoc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5ICpwdHIpCit7CisJdG9tb3lvX3B1dF9uYW1lKHB0ci0+cGF0dGVybik7Cit9CisKK3N0YXRpYyB2b2lkIHRvbW95b19kZWxfZG9tYWluX2luaXRpYWxpemVyCisoc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgKnB0cikKK3sKKwl0b21veW9fcHV0X25hbWUocHRyLT5kb21haW5uYW1lKTsKKwl0b21veW9fcHV0X25hbWUocHRyLT5wcm9ncmFtKTsKK30KKworc3RhdGljIHZvaWQgdG9tb3lvX2RlbF9kb21haW5fa2VlcGVyKHN0cnVjdCB0b21veW9fZG9tYWluX2tlZXBlcl9lbnRyeSAqcHRyKQoreworCXRvbW95b19wdXRfbmFtZShwdHItPmRvbWFpbm5hbWUpOworCXRvbW95b19wdXRfbmFtZShwdHItPnByb2dyYW0pOworfQorCitzdGF0aWMgdm9pZCB0b21veW9fZGVsX2FsaWFzKHN0cnVjdCB0b21veW9fYWxpYXNfZW50cnkgKnB0cikKK3sKKwl0b21veW9fcHV0X25hbWUocHRyLT5vcmlnaW5hbF9uYW1lKTsKKwl0b21veW9fcHV0X25hbWUocHRyLT5hbGlhc2VkX25hbWUpOworfQorCitzdGF0aWMgdm9pZCB0b21veW9fZGVsX21hbmFnZXIoc3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSAqcHRyKQoreworCXRvbW95b19wdXRfbmFtZShwdHItPm1hbmFnZXIpOworfQorCitzdGF0aWMgdm9pZCB0b21veW9fZGVsX2FjbChzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICphY2wpCit7CisJc3dpdGNoIChhY2wtPnR5cGUpIHsKKwljYXNlIFRPTU9ZT19UWVBFX1BBVEhfQUNMOgorCQl7CisJCQlzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsICplbnRyeQorCQkJCT0gY29udGFpbmVyX29mKGFjbCwgdHlwZW9mKCplbnRyeSksIGhlYWQpOworCQkJdG9tb3lvX3B1dF9uYW1lKGVudHJ5LT5maWxlbmFtZSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBUT01PWU9fVFlQRV9QQVRIMl9BQ0w6CisJCXsKKwkJCXN0cnVjdCB0b21veW9fcGF0aDJfYWNsICplbnRyeQorCQkJCT0gY29udGFpbmVyX29mKGFjbCwgdHlwZW9mKCplbnRyeSksIGhlYWQpOworCQkJdG9tb3lvX3B1dF9uYW1lKGVudHJ5LT5maWxlbmFtZTEpOworCQkJdG9tb3lvX3B1dF9uYW1lKGVudHJ5LT5maWxlbmFtZTIpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVua25vd24gdHlwZVxuIik7CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIGJvb2wgdG9tb3lvX2RlbF9kb21haW4oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluKQoreworCXN0cnVjdCB0b21veW9fYWNsX2luZm8gKmFjbDsKKwlzdHJ1Y3QgdG9tb3lvX2FjbF9pbmZvICp0bXA7CisJLyoKKwkgKiBTaW5jZSB3ZSBkb24ndCBwcm90ZWN0IHdob2xlIGV4ZWN2ZSgpIG9wZXJhdGlvbiB1c2luZyBTUkNVLAorCSAqIHdlIG5lZWQgdG8gcmVjaGVjayBkb21haW4tPnVzZXJzIGF0IHRoaXMgcG9pbnQuCisJICoKKwkgKiAoMSkgUmVhZGVyIHN0YXJ0cyBTUkNVIHNlY3Rpb24gdXBvbiBleGVjdmUoKS4KKwkgKiAoMikgUmVhZGVyIHRyYXZlcnNlcyB0b21veW9fZG9tYWluX2xpc3QgYW5kIGZpbmRzIHRoaXMgZG9tYWluLgorCSAqICgzKSBXcml0ZXIgbWFya3MgdGhpcyBkb21haW4gYXMgZGVsZXRlZC4KKwkgKiAoNCkgR2FyYmFnZSBjb2xsZWN0b3IgcmVtb3ZlcyB0aGlzIGRvbWFpbiBmcm9tIHRvbW95b19kb21haW5fbGlzdAorCSAqICAgICBiZWNhdXNlIHRoaXMgZG9tYWluIGlzIG1hcmtlZCBhcyBkZWxldGVkIGFuZCB1c2VkIGJ5IG5vYm9keS4KKwkgKiAoNSkgUmVhZGVyIHNhdmVzIHJlZmVyZW5jZSB0byB0aGlzIGRvbWFpbiBpbnRvCisJICogICAgICJzdHJ1Y3QgbGludXhfYmlucHJtIi0+Y3JlZC0+c2VjdXJpdHkgLgorCSAqICg2KSBSZWFkZXIgZmluaXNoZXMgU1JDVSBzZWN0aW9uLCBhbHRob3VnaCBleGVjdmUoKSBvcGVyYXRpb24gaGFzCisJICogICAgIG5vdCBmaW5pc2hlZCB5ZXQuCisJICogKDcpIEdhcmJhZ2UgY29sbGVjdG9yIHdhaXRzIGZvciBTUkNVIHN5bmNocm9uaXphdGlvbi4KKwkgKiAoOCkgR2FyYmFnZSBjb2xsZWN0b3Iga2ZyZWUoKSB0aGlzIGRvbWFpbiBiZWNhdXNlIHRoaXMgZG9tYWluIGlzCisJICogICAgIHVzZWQgYnkgbm9ib2R5LgorCSAqICg5KSBSZWFkZXIgZmluaXNoZXMgZXhlY3ZlKCkgb3BlcmF0aW9uIGFuZCByZXN0b3JlcyB0aGlzIGRvbWFpbiBmcm9tCisJICogICAgICJzdHJ1Y3QgbGludXhfYmlucHJtIi0+Y3JlZC0+c2VjdXJpdHkuCisJICoKKwkgKiBCeSB1cGRhdGluZyBkb21haW4tPnVzZXJzIGF0ICg1KSwgd2UgY2FuIHNvbHZlIHRoaXMgcmFjZSBwcm9ibGVtCisJICogYnkgcmVjaGVja2luZyBkb21haW4tPnVzZXJzIGF0ICg4KS4KKwkgKi8KKwlpZiAoYXRvbWljX3JlYWQoJmRvbWFpbi0+dXNlcnMpKQorCQlyZXR1cm4gZmFsc2U7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGFjbCwgdG1wLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LCBsaXN0KSB7CisJCXRvbW95b19kZWxfYWNsKGFjbCk7CisJCXRvbW95b19tZW1vcnlfZnJlZShhY2wpOworCX0KKwl0b21veW9fcHV0X25hbWUoZG9tYWluLT5kb21haW5uYW1lKTsKKwlyZXR1cm4gdHJ1ZTsKK30KKworCitzdGF0aWMgdm9pZCB0b21veW9fZGVsX25hbWUoY29uc3Qgc3RydWN0IHRvbW95b19uYW1lX2VudHJ5ICpwdHIpCit7Cit9CisKK3N0YXRpYyB2b2lkIHRvbW95b19jb2xsZWN0X2VudHJ5KHZvaWQpCit7CisJbXV0ZXhfbG9jaygmdG9tb3lvX3BvbGljeV9sb2NrKTsKKwl7CisJCXN0cnVjdCB0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfZmlsZV9lbnRyeSAqcHRyOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fZ2xvYmFsbHlfcmVhZGFibGVfbGlzdCwKKwkJCQkJbGlzdCkgeworCQkJaWYgKCFwdHItPmlzX2RlbGV0ZWQpCisJCQkJY29udGludWU7CisJCQlpZiAodG9tb3lvX2FkZF90b19nYyhUT01PWU9fSURfR0xPQkFMTFlfUkVBREFCTEUsIHB0cikpCisJCQkJbGlzdF9kZWxfcmN1KCZwdHItPmxpc3QpOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJfQorCXsKKwkJc3RydWN0IHRvbW95b19wYXR0ZXJuX2VudHJ5ICpwdHI7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19wYXR0ZXJuX2xpc3QsIGxpc3QpIHsKKwkJCWlmICghcHRyLT5pc19kZWxldGVkKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHRvbW95b19hZGRfdG9fZ2MoVE9NT1lPX0lEX1BBVFRFUk4sIHB0cikpCisJCQkJbGlzdF9kZWxfcmN1KCZwdHItPmxpc3QpOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJfQorCXsKKwkJc3RydWN0IHRvbW95b19ub19yZXdyaXRlX2VudHJ5ICpwdHI7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19ub19yZXdyaXRlX2xpc3QsIGxpc3QpIHsKKwkJCWlmICghcHRyLT5pc19kZWxldGVkKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHRvbW95b19hZGRfdG9fZ2MoVE9NT1lPX0lEX05PX1JFV1JJVEUsIHB0cikpCisJCQkJbGlzdF9kZWxfcmN1KCZwdHItPmxpc3QpOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJfQorCXsKKwkJc3RydWN0IHRvbW95b19kb21haW5faW5pdGlhbGl6ZXJfZW50cnkgKnB0cjsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX2RvbWFpbl9pbml0aWFsaXplcl9saXN0LAorCQkJCQlsaXN0KSB7CisJCQlpZiAoIXB0ci0+aXNfZGVsZXRlZCkKKwkJCQljb250aW51ZTsKKwkJCWlmICh0b21veW9fYWRkX3RvX2djKFRPTU9ZT19JRF9ET01BSU5fSU5JVElBTElaRVIsIHB0cikpCisJCQkJbGlzdF9kZWxfcmN1KCZwdHItPmxpc3QpOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJfQorCXsKKwkJc3RydWN0IHRvbW95b19kb21haW5fa2VlcGVyX2VudHJ5ICpwdHI7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KHB0ciwgJnRvbW95b19kb21haW5fa2VlcGVyX2xpc3QsIGxpc3QpIHsKKwkJCWlmICghcHRyLT5pc19kZWxldGVkKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKHRvbW95b19hZGRfdG9fZ2MoVE9NT1lPX0lEX0RPTUFJTl9LRUVQRVIsIHB0cikpCisJCQkJbGlzdF9kZWxfcmN1KCZwdHItPmxpc3QpOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJfQorCXsKKwkJc3RydWN0IHRvbW95b19hbGlhc19lbnRyeSAqcHRyOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fYWxpYXNfbGlzdCwgbGlzdCkgeworCQkJaWYgKCFwdHItPmlzX2RlbGV0ZWQpCisJCQkJY29udGludWU7CisJCQlpZiAodG9tb3lvX2FkZF90b19nYyhUT01PWU9fSURfQUxJQVMsIHB0cikpCisJCQkJbGlzdF9kZWxfcmN1KCZwdHItPmxpc3QpOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJfQorCXsKKwkJc3RydWN0IHRvbW95b19wb2xpY3lfbWFuYWdlcl9lbnRyeSAqcHRyOworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShwdHIsICZ0b21veW9fcG9saWN5X21hbmFnZXJfbGlzdCwKKwkJCQkJbGlzdCkgeworCQkJaWYgKCFwdHItPmlzX2RlbGV0ZWQpCisJCQkJY29udGludWU7CisJCQlpZiAodG9tb3lvX2FkZF90b19nYyhUT01PWU9fSURfTUFOQUdFUiwgcHRyKSkKKwkJCQlsaXN0X2RlbF9yY3UoJnB0ci0+bGlzdCk7CisJCQllbHNlCisJCQkJYnJlYWs7CisJCX0KKwl9CisJeworCQlzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW47CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGRvbWFpbiwgJnRvbW95b19kb21haW5fbGlzdCwgbGlzdCkgeworCQkJc3RydWN0IHRvbW95b19hY2xfaW5mbyAqYWNsOworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UoYWNsLCAmZG9tYWluLT5hY2xfaW5mb19saXN0LAorCQkJCQkJbGlzdCkgeworCQkJCXN3aXRjaCAoYWNsLT50eXBlKSB7CisJCQkJY2FzZSBUT01PWU9fVFlQRV9QQVRIX0FDTDoKKwkJCQkJaWYgKGNvbnRhaW5lcl9vZihhY2wsCisJCQkJCSBzdHJ1Y3QgdG9tb3lvX3BhdGhfYWNsLAorCQkJCQkJCSBoZWFkKS0+cGVybSB8fAorCQkJCQkgICAgY29udGFpbmVyX29mKGFjbCwKKwkJCQkJIHN0cnVjdCB0b21veW9fcGF0aF9hY2wsCisJCQkJCQkJIGhlYWQpLT5wZXJtX2hpZ2gpCisJCQkJCQljb250aW51ZTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBUT01PWU9fVFlQRV9QQVRIMl9BQ0w6CisJCQkJCWlmIChjb250YWluZXJfb2YoYWNsLAorCQkJCQkgc3RydWN0IHRvbW95b19wYXRoMl9hY2wsCisJCQkJCQkJIGhlYWQpLT5wZXJtKQorCQkJCQkJY29udGludWU7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlpZiAodG9tb3lvX2FkZF90b19nYyhUT01PWU9fSURfQUNMLCBhY2wpKQorCQkJCQlsaXN0X2RlbF9yY3UoJmFjbC0+bGlzdCk7CisJCQkJZWxzZQorCQkJCQlicmVhazsKKwkJCX0KKwkJCWlmICghZG9tYWluLT5pc19kZWxldGVkIHx8IGF0b21pY19yZWFkKCZkb21haW4tPnVzZXJzKSkKKwkJCQljb250aW51ZTsKKwkJCS8qCisJCQkgKiBOb2JvZHkgaXMgcmVmZXJyaW5nIHRoaXMgZG9tYWluLiBCdXQgc29tZWJvZHkgbWF5CisJCQkgKiByZWZlciB0aGlzIGRvbWFpbiBhZnRlciBzdWNjZXNzZnVsIGV4ZWN2ZSgpLgorCQkJICogV2UgcmVjaGVjayBkb21haW4tPnVzZXJzIGFmdGVyIFNSQ1Ugc3luY2hyb25pemF0aW9uLgorCQkJICovCisJCQlpZiAodG9tb3lvX2FkZF90b19nYyhUT01PWU9fSURfRE9NQUlOLCBkb21haW4pKQorCQkJCWxpc3RfZGVsX3JjdSgmZG9tYWluLT5saXN0KTsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJfQorCX0KKwltdXRleF91bmxvY2soJnRvbW95b19wb2xpY3lfbG9jayk7CisJbXV0ZXhfbG9jaygmdG9tb3lvX25hbWVfbGlzdF9sb2NrKTsKKwl7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgVE9NT1lPX01BWF9IQVNIOyBpKyspIHsKKwkJCXN0cnVjdCB0b21veW9fbmFtZV9lbnRyeSAqcHRyOworCQkJbGlzdF9mb3JfZWFjaF9lbnRyeV9yY3UocHRyLCAmdG9tb3lvX25hbWVfbGlzdFtpXSwKKwkJCQkJCWxpc3QpIHsKKwkJCQlpZiAoYXRvbWljX3JlYWQoJnB0ci0+dXNlcnMpKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAodG9tb3lvX2FkZF90b19nYyhUT01PWU9fSURfTkFNRSwgcHRyKSkKKwkJCQkJbGlzdF9kZWxfcmN1KCZwdHItPmxpc3QpOworCQkJCWVsc2UgeworCQkJCQlpID0gVE9NT1lPX01BWF9IQVNIOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJbXV0ZXhfdW5sb2NrKCZ0b21veW9fbmFtZV9saXN0X2xvY2spOworfQorCitzdGF0aWMgdm9pZCB0b21veW9fa2ZyZWVfZW50cnkodm9pZCkKK3sKKwlzdHJ1Y3QgdG9tb3lvX2djX2VudHJ5ICpwOworCXN0cnVjdCB0b21veW9fZ2NfZW50cnkgKnRtcDsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwLCB0bXAsICZ0b21veW9fZ2NfcXVldWUsIGxpc3QpIHsKKwkJc3dpdGNoIChwLT50eXBlKSB7CisJCWNhc2UgVE9NT1lPX0lEX0RPTUFJTl9JTklUSUFMSVpFUjoKKwkJCXRvbW95b19kZWxfZG9tYWluX2luaXRpYWxpemVyKHAtPmVsZW1lbnQpOworCQkJYnJlYWs7CisJCWNhc2UgVE9NT1lPX0lEX0RPTUFJTl9LRUVQRVI6CisJCQl0b21veW9fZGVsX2RvbWFpbl9rZWVwZXIocC0+ZWxlbWVudCk7CisJCQlicmVhazsKKwkJY2FzZSBUT01PWU9fSURfQUxJQVM6CisJCQl0b21veW9fZGVsX2FsaWFzKHAtPmVsZW1lbnQpOworCQkJYnJlYWs7CisJCWNhc2UgVE9NT1lPX0lEX0dMT0JBTExZX1JFQURBQkxFOgorCQkJdG9tb3lvX2RlbF9hbGxvd19yZWFkKHAtPmVsZW1lbnQpOworCQkJYnJlYWs7CisJCWNhc2UgVE9NT1lPX0lEX1BBVFRFUk46CisJCQl0b21veW9fZGVsX2ZpbGVfcGF0dGVybihwLT5lbGVtZW50KTsKKwkJCWJyZWFrOworCQljYXNlIFRPTU9ZT19JRF9OT19SRVdSSVRFOgorCQkJdG9tb3lvX2RlbF9ub19yZXdyaXRlKHAtPmVsZW1lbnQpOworCQkJYnJlYWs7CisJCWNhc2UgVE9NT1lPX0lEX01BTkFHRVI6CisJCQl0b21veW9fZGVsX21hbmFnZXIocC0+ZWxlbWVudCk7CisJCQlicmVhazsKKwkJY2FzZSBUT01PWU9fSURfTkFNRToKKwkJCXRvbW95b19kZWxfbmFtZShwLT5lbGVtZW50KTsKKwkJCWJyZWFrOworCQljYXNlIFRPTU9ZT19JRF9BQ0w6CisJCQl0b21veW9fZGVsX2FjbChwLT5lbGVtZW50KTsKKwkJCWJyZWFrOworCQljYXNlIFRPTU9ZT19JRF9ET01BSU46CisJCQlpZiAoIXRvbW95b19kZWxfZG9tYWluKHAtPmVsZW1lbnQpKQorCQkJCWNvbnRpbnVlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmtub3duIHR5cGVcbiIpOworCQkJYnJlYWs7CisJCX0KKwkJdG9tb3lvX21lbW9yeV9mcmVlKHAtPmVsZW1lbnQpOworCQlsaXN0X2RlbCgmcC0+bGlzdCk7CisJCWtmcmVlKHApOworCX0KK30KKworc3RhdGljIGludCB0b21veW9fZ2NfdGhyZWFkKHZvaWQgKnVudXNlZCkKK3sKKwlkYWVtb25pemUoIkdDIGZvciBUT01PWU8iKTsKKwlpZiAobXV0ZXhfdHJ5bG9jaygmdG9tb3lvX2djX211dGV4KSkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJCXRvbW95b19jb2xsZWN0X2VudHJ5KCk7CisJCQlpZiAobGlzdF9lbXB0eSgmdG9tb3lvX2djX3F1ZXVlKSkKKwkJCQlicmVhazsKKwkJCXN5bmNocm9uaXplX3NyY3UoJnRvbW95b19zcyk7CisJCQl0b21veW9fa2ZyZWVfZW50cnkoKTsKKwkJfQorCQltdXRleF91bmxvY2soJnRvbW95b19nY19tdXRleCk7CisJfQorCWRvX2V4aXQoMCk7Cit9CisKK3ZvaWQgdG9tb3lvX3J1bl9nYyh2b2lkKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGt0aHJlYWRfY3JlYXRlKHRvbW95b19nY190aHJlYWQsIE5VTEwsCisJCQkJCQkgICJHQyBmb3IgVE9NT1lPIik7CisJaWYgKCFJU19FUlIodGFzaykpCisJCXdha2VfdXBfcHJvY2Vzcyh0YXNrKTsKK30KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5jIGIvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmMKaW5kZXggMTgzNjlkNDkuLmNmN2Q2MWYgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5jCisrKyBiL3NlY3VyaXR5L3RvbW95by9yZWFscGF0aC5jCkBAIC0xNCw5ICsxNCw4IEBACiAjaW5jbHVkZSA8bGludXgvbW50X25hbWVzcGFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzX3N0cnVjdC5oPgogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KLQorI2luY2x1ZGUgPGxpbnV4L21hZ2ljLmg+CiAjaW5jbHVkZSAiY29tbW9uLmgiCi0jaW5jbHVkZSAicmVhbHBhdGguaCIKIAogLyoqCiAgKiB0b21veW9fZW5jb2RlOiBDb252ZXJ0IGJpbmFyeSBzdHJpbmcgdG8gYXNjaWkgc3RyaW5nLgpAQCAtODksMzAgKzg4LDE1IEBACiAJCXNwID0gZGVudHJ5LT5kX29wLT5kX2RuYW1lKGRlbnRyeSwgbmV3bmFtZSArIG9mZnNldCwKIAkJCQkJICAgbmV3bmFtZV9sZW4gLSBvZmZzZXQpOwogCX0gZWxzZSB7Ci0JCS8qIFRha2VuIGZyb20gZF9uYW1lc3BhY2VfcGF0aCgpLiAqLwotCQlzdHJ1Y3QgcGF0aCByb290OwotCQlzdHJ1Y3QgcGF0aCBuc19yb290ID0geyB9OwotCQlzdHJ1Y3QgcGF0aCB0bXA7CisJCXN0cnVjdCBwYXRoIG5zX3Jvb3QgPSB7Lm1udCA9IE5VTEwsIC5kZW50cnkgPSBOVUxMfTsKIAotCQlyZWFkX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKLQkJcm9vdCA9IGN1cnJlbnQtPmZzLT5yb290OwotCQlwYXRoX2dldCgmcm9vdCk7Ci0JCXJlYWRfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7Ci0JCXNwaW5fbG9jaygmdmZzbW91bnRfbG9jayk7Ci0JCWlmIChyb290Lm1udCAmJiByb290Lm1udC0+bW50X25zKQotCQkJbnNfcm9vdC5tbnQgPSBtbnRnZXQocm9vdC5tbnQtPm1udF9ucy0+cm9vdCk7Ci0JCWlmIChuc19yb290Lm1udCkKLQkJCW5zX3Jvb3QuZGVudHJ5ID0gZGdldChuc19yb290Lm1udC0+bW50X3Jvb3QpOwotCQlzcGluX3VubG9jaygmdmZzbW91bnRfbG9jayk7CiAJCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwotCQl0bXAgPSBuc19yb290OwotCQlzcCA9IF9fZF9wYXRoKHBhdGgsICZ0bXAsIG5ld25hbWUsIG5ld25hbWVfbGVuKTsKKwkJLyogZ28gdG8gd2hhdGV2ZXIgbmFtZXNwYWNlIHJvb3Qgd2UgYXJlIHVuZGVyICovCisJCXNwID0gX19kX3BhdGgocGF0aCwgJm5zX3Jvb3QsIG5ld25hbWUsIG5ld25hbWVfbGVuKTsKIAkJc3Bpbl91bmxvY2soJmRjYWNoZV9sb2NrKTsKLQkJcGF0aF9wdXQoJnJvb3QpOwotCQlwYXRoX3B1dCgmbnNfcm9vdCk7CiAJCS8qIFByZXBlbmQgIi9wcm9jIiBwcmVmaXggaWYgdXNpbmcgaW50ZXJuYWwgcHJvYyB2ZnMgbW91bnQuICovCi0JCWlmICghSVNfRVJSKHNwKSAmJiAocGF0aC0+bW50LT5tbnRfcGFyZW50ID09IHBhdGgtPm1udCkgJiYKLQkJICAgIChzdHJjbXAocGF0aC0+bW50LT5tbnRfc2ItPnNfdHlwZS0+bmFtZSwgInByb2MiKSA9PSAwKSkgeworCQlpZiAoIUlTX0VSUihzcCkgJiYgKHBhdGgtPm1udC0+bW50X2ZsYWdzICYgTU5UX0lOVEVSTkFMKSAmJgorCQkgICAgKHBhdGgtPm1udC0+bW50X3NiLT5zX21hZ2ljID09IFBST0NfU1VQRVJfTUFHSUMpKSB7CiAJCQlzcCAtPSA1OwogCQkJaWYgKHNwID49IG5ld25hbWUpCiAJCQkJbWVtY3B5KHNwLCAiL3Byb2MiLCA1KTsKQEAgLTE0OSwxMiArMTMzLDEyIEBACiAgKgogICogUmV0dXJucyB0aGUgcmVhbHBhdGggb2YgdGhlIGdpdmVuIEBwYXRoIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgogICoKLSAqIFRoZXNlIGZ1bmN0aW9ucyB1c2UgdG9tb3lvX2FsbG9jKCksIHNvIHRoZSBjYWxsZXIgbXVzdCBjYWxsIHRvbW95b19mcmVlKCkKKyAqIFRoZXNlIGZ1bmN0aW9ucyB1c2Uga3phbGxvYygpLCBzbyB0aGUgY2FsbGVyIG11c3QgY2FsbCBrZnJlZSgpCiAgKiBpZiB0aGVzZSBmdW5jdGlvbnMgZGlkbid0IHJldHVybiBOVUxMLgogICovCiBjaGFyICp0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoKHN0cnVjdCBwYXRoICpwYXRoKQogewotCWNoYXIgKmJ1ZiA9IHRvbW95b19hbGxvYyhzaXplb2Yoc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlcikpOworCWNoYXIgKmJ1ZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0b21veW9fcGFnZV9idWZmZXIpLCBHRlBfS0VSTkVMKTsKIAogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IHRvbW95b19wYWdlX2J1ZmZlcikKIAkJICAgICA8PSBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTiAtIDEpOwpAQCAtMTYzLDcgKzE0Nyw3IEBACiAJaWYgKHRvbW95b19yZWFscGF0aF9mcm9tX3BhdGgyKHBhdGgsIGJ1ZiwKIAkJCQkgICAgICAgVE9NT1lPX01BWF9QQVRITkFNRV9MRU4gLSAxKSA9PSAwKQogCQlyZXR1cm4gYnVmOwotCXRvbW95b19mcmVlKGJ1Zik7CisJa2ZyZWUoYnVmKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtMjA2LDk4ICsxOTAsNDcgQEAKIH0KIAogLyogTWVtb3J5IGFsbG9jYXRlZCBmb3Igbm9uLXN0cmluZyBkYXRhLiAqLwotc3RhdGljIHVuc2lnbmVkIGludCB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3JfZWxlbWVudHM7Ci0vKiBRdW90YSBmb3IgaG9sZGluZyBub24tc3RyaW5nIGRhdGEuICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHRvbW95b19xdW90YV9mb3JfZWxlbWVudHM7CitzdGF0aWMgYXRvbWljX3QgdG9tb3lvX3BvbGljeV9tZW1vcnlfc2l6ZTsKKy8qIFF1b3RhIGZvciBob2xkaW5nIHBvbGljeS4gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgdG9tb3lvX3F1b3RhX2Zvcl9wb2xpY3k7CiAKIC8qKgotICogdG9tb3lvX2FsbG9jX2VsZW1lbnQgLSBBbGxvY2F0ZSBwZXJtYW5lbnQgbWVtb3J5IGZvciBzdHJ1Y3R1cmVzLgorICogdG9tb3lvX21lbW9yeV9vayAtIENoZWNrIG1lbW9yeSBxdW90YS4KICAqCi0gKiBAc2l6ZTogU2l6ZSBpbiBieXRlcy4KKyAqIEBwdHI6IFBvaW50ZXIgdG8gYWxsb2NhdGVkIG1lbW9yeS4KICAqCi0gKiBSZXR1cm5zIHBvaW50ZXIgdG8gYWxsb2NhdGVkIG1lbW9yeSBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KKyAqIFJldHVybnMgdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UuCiAgKgotICogTWVtb3J5IGhhcyB0byBiZSB6ZXJvZWQuCi0gKiBUaGUgUkFNIGlzIGNodW5rZWQsIHNvIE5FVkVSIHRyeSB0byBrZnJlZSgpIHRoZSByZXR1cm5lZCBwb2ludGVyLgorICogQ2FsbGVyIGhvbGRzIHRvbW95b19wb2xpY3lfbG9jay4KKyAqIE1lbW9yeSBwb2ludGVkIGJ5IEBwdHIgd2lsbCBiZSB6ZXJvZWQgb24gc3VjY2Vzcy4KICAqLwotdm9pZCAqdG9tb3lvX2FsbG9jX2VsZW1lbnQoY29uc3QgdW5zaWduZWQgaW50IHNpemUpCitib29sIHRvbW95b19tZW1vcnlfb2sodm9pZCAqcHRyKQogewotCXN0YXRpYyBjaGFyICpidWY7Ci0Jc3RhdGljIERFRklORV9NVVRFWChsb2NrKTsKLQlzdGF0aWMgdW5zaWduZWQgaW50IGJ1Zl91c2VkX2xlbiA9IFBBVEhfTUFYOwotCWNoYXIgKnB0ciA9IE5VTEw7Ci0JLypBc3N1bWVzIHNpemVvZih2b2lkICopID49IHNpemVvZihsb25nKSBpcyB0cnVlLiAqLwotCWNvbnN0IHVuc2lnbmVkIGludCB3b3JkX2FsaWduZWRfc2l6ZQotCQk9IHJvdW5kdXAoc2l6ZSwgbWF4KHNpemVvZih2b2lkICopLCBzaXplb2YobG9uZykpKTsKLQlpZiAod29yZF9hbGlnbmVkX3NpemUgPiBQQVRIX01BWCkKLQkJcmV0dXJuIE5VTEw7Ci0JbXV0ZXhfbG9jaygmbG9jayk7Ci0JaWYgKGJ1Zl91c2VkX2xlbiArIHdvcmRfYWxpZ25lZF9zaXplID4gUEFUSF9NQVgpIHsKLQkJaWYgKCF0b21veW9fcXVvdGFfZm9yX2VsZW1lbnRzIHx8Ci0JCSAgICB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3JfZWxlbWVudHMKLQkJICAgICsgUEFUSF9NQVggPD0gdG9tb3lvX3F1b3RhX2Zvcl9lbGVtZW50cykKLQkJCXB0ciA9IGt6YWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpOwotCQlpZiAoIXB0cikgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiRVJST1I6IE91dCBvZiBtZW1vcnkgIgotCQkJICAgICAgICJmb3IgdG9tb3lvX2FsbG9jX2VsZW1lbnQoKS5cbiIpOwotCQkJaWYgKCF0b21veW9fcG9saWN5X2xvYWRlZCkKLQkJCQlwYW5pYygiTUFDIEluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOwotCQl9IGVsc2UgewotCQkJYnVmID0gcHRyOwotCQkJdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX2VsZW1lbnRzICs9IFBBVEhfTUFYOwotCQkJYnVmX3VzZWRfbGVuID0gd29yZF9hbGlnbmVkX3NpemU7Ci0JCQlwdHIgPSBidWY7Ci0JCX0KLQl9IGVsc2UgaWYgKHdvcmRfYWxpZ25lZF9zaXplKSB7Ci0JCWludCBpOwotCQlwdHIgPSBidWYgKyBidWZfdXNlZF9sZW47Ci0JCWJ1Zl91c2VkX2xlbiArPSB3b3JkX2FsaWduZWRfc2l6ZTsKLQkJZm9yIChpID0gMDsgaSA8IHdvcmRfYWxpZ25lZF9zaXplOyBpKyspIHsKLQkJCWlmICghcHRyW2ldKQotCQkJCWNvbnRpbnVlOwotCQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HOiBSZXNlcnZlZCBtZW1vcnkgd2FzIHRhaW50ZWQhICIKLQkJCSAgICAgICAiVGhlIHN5c3RlbSBtaWdodCBnbyB3cm9uZy5cbiIpOwotCQkJcHRyW2ldID0gJ1wwJzsKLQkJfQorCWludCBhbGxvY2F0ZWRfbGVuID0gcHRyID8ga3NpemUocHRyKSA6IDA7CisJYXRvbWljX2FkZChhbGxvY2F0ZWRfbGVuLCAmdG9tb3lvX3BvbGljeV9tZW1vcnlfc2l6ZSk7CisJaWYgKHB0ciAmJiAoIXRvbW95b19xdW90YV9mb3JfcG9saWN5IHx8CisJCSAgICBhdG9taWNfcmVhZCgmdG9tb3lvX3BvbGljeV9tZW1vcnlfc2l6ZSkKKwkJICAgIDw9IHRvbW95b19xdW90YV9mb3JfcG9saWN5KSkgeworCQltZW1zZXQocHRyLCAwLCBhbGxvY2F0ZWRfbGVuKTsKKwkJcmV0dXJuIHRydWU7CiAJfQotCW11dGV4X3VubG9jaygmbG9jayk7Ci0JcmV0dXJuIHB0cjsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJFUlJPUjogT3V0IG9mIG1lbW9yeSAiCisJICAgICAgICJmb3IgdG9tb3lvX2FsbG9jX2VsZW1lbnQoKS5cbiIpOworCWlmICghdG9tb3lvX3BvbGljeV9sb2FkZWQpCisJCXBhbmljKCJNQUMgSW5pdGlhbGl6YXRpb24gZmFpbGVkLlxuIik7CisJcmV0dXJuIGZhbHNlOwogfQogCi0vKiBNZW1vcnkgYWxsb2NhdGVkIGZvciBzdHJpbmcgZGF0YSBpbiBieXRlcy4gKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX3NhdmVuYW1lOwotLyogUXVvdGEgZm9yIGhvbGRpbmcgc3RyaW5nIGRhdGEgaW4gYnl0ZXMuICovCi1zdGF0aWMgdW5zaWduZWQgaW50IHRvbW95b19xdW90YV9mb3Jfc2F2ZW5hbWU7Ci0KLS8qCi0gKiBUT01PWU8gdXNlcyB0aGlzIGhhc2ggb25seSB3aGVuIGFwcGVuZGluZyBhIHN0cmluZyBpbnRvIHRoZSBzdHJpbmcKLSAqIHRhYmxlLiBGcmVxdWVuY3kgb2YgYXBwZW5kaW5nIHN0cmluZ3MgaXMgdmVyeSBsb3cuIFNvIHdlIGRvbid0IG5lZWQKLSAqIGxhcmdlIChlLmcuIDY0aykgaGFzaCBzaXplLiAyNTYgd2lsbCBiZSBzdWZmaWNpZW50LgotICovCi0jZGVmaW5lIFRPTU9ZT19IQVNIX0JJVFMgIDgKLSNkZWZpbmUgVE9NT1lPX01BWF9IQVNIICgxdTw8VE9NT1lPX0hBU0hfQklUUykKLQotLyoKLSAqIHRvbW95b19uYW1lX2VudHJ5IGlzIGEgc3RydWN0dXJlIHdoaWNoIGlzIHVzZWQgZm9yIGxpbmtpbmcKLSAqICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIgaW50byB0b21veW9fbmFtZV9saXN0IC4KKy8qKgorICogdG9tb3lvX21lbW9yeV9mcmVlIC0gRnJlZSBtZW1vcnkgZm9yIGVsZW1lbnRzLgogICoKLSAqIFNpbmNlIHRvbW95b19uYW1lX2xpc3QgbWFuYWdlcyBhIGxpc3Qgb2Ygc3RyaW5ncyB3aGljaCBhcmUgc2hhcmVkIGJ5Ci0gKiBtdWx0aXBsZSBwcm9jZXNzZXMgKHdoZXJlYXMgInN0cnVjdCB0b21veW9fcGF0aF9pbmZvIiBpbnNpZGUKLSAqICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mb193aXRoX2RhdGEiIGlzIG5vdCBzaGFyZWQpLCBhIHJlZmVyZW5jZSBjb3VudGVyIHdpbGwKLSAqIGJlIGFkZGVkIHRvICJzdHJ1Y3QgdG9tb3lvX25hbWVfZW50cnkiIHJhdGhlciB0aGFuICJzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyIKLSAqIHdoZW4gVE9NT1lPIHN0YXJ0cyBzdXBwb3J0aW5nIGdhcmJhZ2UgY29sbGVjdG9yLgorICogQHB0cjogIFBvaW50ZXIgdG8gYWxsb2NhdGVkIG1lbW9yeS4KICAqLwotc3RydWN0IHRvbW95b19uYW1lX2VudHJ5IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0Jc3RydWN0IHRvbW95b19wYXRoX2luZm8gZW50cnk7Ci19OwotCi0vKiBTdHJ1Y3R1cmUgZm9yIGF2YWlsYWJsZSBtZW1vcnkgcmVnaW9uLiAqLwotc3RydWN0IHRvbW95b19mcmVlX21lbW9yeV9ibG9ja19saXN0IHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Ci0JY2hhciAqcHRyOyAgICAgICAgICAgICAvKiBQb2ludGVyIHRvIGEgZnJlZSBhcmVhLiAqLwotCWludCBsZW47ICAgICAgICAgICAgICAgLyogTGVuZ3RoIG9mIHRoZSBhcmVhLiAgICAgKi8KLX07Cit2b2lkIHRvbW95b19tZW1vcnlfZnJlZSh2b2lkICpwdHIpCit7CisJYXRvbWljX3N1Yihrc2l6ZShwdHIpLCAmdG9tb3lvX3BvbGljeV9tZW1vcnlfc2l6ZSk7CisJa2ZyZWUocHRyKTsKK30KIAogLyoKICAqIHRvbW95b19uYW1lX2xpc3QgaXMgdXNlZCBmb3IgaG9sZGluZyBzdHJpbmcgZGF0YSB1c2VkIGJ5IFRPTU9ZTy4KQEAgLTMwNSw4NyArMjM4LDU4IEBACiAgKiAiL2xpYi9saWJjLTIuNS5zbyIpLCBUT01PWU8gc2hhcmVzIHN0cmluZyBkYXRhIGluIHRoZSBmb3JtIG9mCiAgKiAiY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKiIuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIHRvbW95b19uYW1lX2xpc3RbVE9NT1lPX01BWF9IQVNIXTsKK3N0cnVjdCBsaXN0X2hlYWQgdG9tb3lvX25hbWVfbGlzdFtUT01PWU9fTUFYX0hBU0hdOworLyogTG9jayBmb3IgcHJvdGVjdGluZyB0b21veW9fbmFtZV9saXN0IC4gKi8KK0RFRklORV9NVVRFWCh0b21veW9fbmFtZV9saXN0X2xvY2spOwogCiAvKioKLSAqIHRvbW95b19zYXZlX25hbWUgLSBBbGxvY2F0ZSBwZXJtYW5lbnQgbWVtb3J5IGZvciBzdHJpbmcgZGF0YS4KKyAqIHRvbW95b19nZXRfbmFtZSAtIEFsbG9jYXRlIHBlcm1hbmVudCBtZW1vcnkgZm9yIHN0cmluZyBkYXRhLgogICoKICAqIEBuYW1lOiBUaGUgc3RyaW5nIHRvIHN0b3JlIGludG8gdGhlIHBlcm1lcm5lbnQgbWVtb3J5LgogICoKICAqIFJldHVybnMgcG9pbnRlciB0byAic3RydWN0IHRvbW95b19wYXRoX2luZm8iIG9uIHN1Y2Nlc3MsIE5VTEwgb3RoZXJ3aXNlLgotICoKLSAqIFRoZSBSQU0gaXMgc2hhcmVkLCBzbyBORVZFUiB0cnkgdG8gbW9kaWZ5IG9yIGtmcmVlKCkgdGhlIHJldHVybmVkIG5hbWUuCiAgKi8KLWNvbnN0IHN0cnVjdCB0b21veW9fcGF0aF9pbmZvICp0b21veW9fc2F2ZV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCitjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqdG9tb3lvX2dldF9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jc3RhdGljIExJU1RfSEVBRChmbWJfbGlzdCk7Ci0Jc3RhdGljIERFRklORV9NVVRFWChsb2NrKTsKIAlzdHJ1Y3QgdG9tb3lvX25hbWVfZW50cnkgKnB0cjsKIAl1bnNpZ25lZCBpbnQgaGFzaDsKLQkvKiBmbWIgY29udGFpbnMgYXZhaWxhYmxlIHNpemUgaW4gYnl0ZXMuCi0JICAgZm1iIGlzIHJlbW92ZWQgZnJvbSB0aGUgZm1iX2xpc3Qgd2hlbiBmbWItPmxlbiBiZWNvbWVzIDAuICovCi0Jc3RydWN0IHRvbW95b19mcmVlX21lbW9yeV9ibG9ja19saXN0ICpmbWI7CiAJaW50IGxlbjsKLQljaGFyICpjcDsKKwlpbnQgYWxsb2NhdGVkX2xlbjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOwogCiAJaWYgKCFuYW1lKQogCQlyZXR1cm4gTlVMTDsKIAlsZW4gPSBzdHJsZW4obmFtZSkgKyAxOwotCWlmIChsZW4gPiBUT01PWU9fTUFYX1BBVEhOQU1FX0xFTikgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJFUlJPUjogTmFtZSB0b28gbG9uZyAiCi0JCSAgICAgICAiZm9yIHRvbW95b19zYXZlX25hbWUoKS5cbiIpOwotCQlyZXR1cm4gTlVMTDsKLQl9CiAJaGFzaCA9IGZ1bGxfbmFtZV9oYXNoKChjb25zdCB1bnNpZ25lZCBjaGFyICopIG5hbWUsIGxlbiAtIDEpOwogCWhlYWQgPSAmdG9tb3lvX25hbWVfbGlzdFtoYXNoX2xvbmcoaGFzaCwgVE9NT1lPX0hBU0hfQklUUyldOwotCi0JbXV0ZXhfbG9jaygmbG9jayk7CisJbXV0ZXhfbG9jaygmdG9tb3lvX25hbWVfbGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHB0ciwgaGVhZCwgbGlzdCkgewotCQlpZiAoaGFzaCA9PSBwdHItPmVudHJ5Lmhhc2ggJiYgIXN0cmNtcChuYW1lLCBwdHItPmVudHJ5Lm5hbWUpKQotCQkJZ290byBvdXQ7CisJCWlmIChoYXNoICE9IHB0ci0+ZW50cnkuaGFzaCB8fCBzdHJjbXAobmFtZSwgcHRyLT5lbnRyeS5uYW1lKSkKKwkJCWNvbnRpbnVlOworCQlhdG9taWNfaW5jKCZwdHItPnVzZXJzKTsKKwkJZ290byBvdXQ7CiAJfQotCWxpc3RfZm9yX2VhY2hfZW50cnkoZm1iLCAmZm1iX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGxlbiA8PSBmbWItPmxlbikKLQkJCWdvdG8gcmVhZHk7Ci0JfQotCWlmICghdG9tb3lvX3F1b3RhX2Zvcl9zYXZlbmFtZSB8fAotCSAgICB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3Jfc2F2ZW5hbWUgKyBQQVRIX01BWAotCSAgICA8PSB0b21veW9fcXVvdGFfZm9yX3NhdmVuYW1lKQotCQljcCA9IGt6YWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpOwotCWVsc2UKLQkJY3AgPSBOVUxMOwotCWZtYiA9IGt6YWxsb2Moc2l6ZW9mKCpmbWIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNwIHx8ICFmbWIpIHsKLQkJa2ZyZWUoY3ApOwotCQlrZnJlZShmbWIpOworCXB0ciA9IGt6YWxsb2Moc2l6ZW9mKCpwdHIpICsgbGVuLCBHRlBfS0VSTkVMKTsKKwlhbGxvY2F0ZWRfbGVuID0gcHRyID8ga3NpemUocHRyKSA6IDA7CisJaWYgKCFwdHIgfHwgKHRvbW95b19xdW90YV9mb3JfcG9saWN5ICYmCisJCSAgICAgYXRvbWljX3JlYWQoJnRvbW95b19wb2xpY3lfbWVtb3J5X3NpemUpICsgYWxsb2NhdGVkX2xlbgorCQkgICAgID4gdG9tb3lvX3F1b3RhX2Zvcl9wb2xpY3kpKSB7CisJCWtmcmVlKHB0cik7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkVSUk9SOiBPdXQgb2YgbWVtb3J5ICIKLQkJICAgICAgICJmb3IgdG9tb3lvX3NhdmVfbmFtZSgpLlxuIik7CisJCSAgICAgICAiZm9yIHRvbW95b19nZXRfbmFtZSgpLlxuIik7CiAJCWlmICghdG9tb3lvX3BvbGljeV9sb2FkZWQpCiAJCQlwYW5pYygiTUFDIEluaXRpYWxpemF0aW9uIGZhaWxlZC5cbiIpOwogCQlwdHIgPSBOVUxMOwogCQlnb3RvIG91dDsKIAl9Ci0JdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX3NhdmVuYW1lICs9IFBBVEhfTUFYOwotCWxpc3RfYWRkKCZmbWItPmxpc3QsICZmbWJfbGlzdCk7Ci0JZm1iLT5wdHIgPSBjcDsKLQlmbWItPmxlbiA9IFBBVEhfTUFYOwotIHJlYWR5OgotCXB0ciA9IHRvbW95b19hbGxvY19lbGVtZW50KHNpemVvZigqcHRyKSk7Ci0JaWYgKCFwdHIpCi0JCWdvdG8gb3V0OwotCXB0ci0+ZW50cnkubmFtZSA9IGZtYi0+cHRyOwotCW1lbW1vdmUoZm1iLT5wdHIsIG5hbWUsIGxlbik7CisJYXRvbWljX2FkZChhbGxvY2F0ZWRfbGVuLCAmdG9tb3lvX3BvbGljeV9tZW1vcnlfc2l6ZSk7CisJcHRyLT5lbnRyeS5uYW1lID0gKChjaGFyICopIHB0cikgKyBzaXplb2YoKnB0cik7CisJbWVtbW92ZSgoY2hhciAqKSBwdHItPmVudHJ5Lm5hbWUsIG5hbWUsIGxlbik7CisJYXRvbWljX3NldCgmcHRyLT51c2VycywgMSk7CiAJdG9tb3lvX2ZpbGxfcGF0aF9pbmZvKCZwdHItPmVudHJ5KTsKLQlmbWItPnB0ciArPSBsZW47Ci0JZm1iLT5sZW4gLT0gbGVuOwogCWxpc3RfYWRkX3RhaWwoJnB0ci0+bGlzdCwgaGVhZCk7Ci0JaWYgKGZtYi0+bGVuID09IDApIHsKLQkJbGlzdF9kZWwoJmZtYi0+bGlzdCk7Ci0JCWtmcmVlKGZtYik7Ci0JfQogIG91dDoKLQltdXRleF91bmxvY2soJmxvY2spOworCW11dGV4X3VubG9jaygmdG9tb3lvX25hbWVfbGlzdF9sb2NrKTsKIAlyZXR1cm4gcHRyID8gJnB0ci0+ZW50cnkgOiBOVUxMOwogfQogCkBAIC00MDAsNDUgKzMwNCwxNCBAQAogCWZvciAoaSA9IDA7IGkgPCBUT01PWU9fTUFYX0hBU0g7IGkrKykKIAkJSU5JVF9MSVNUX0hFQUQoJnRvbW95b19uYW1lX2xpc3RbaV0pOwogCUlOSVRfTElTVF9IRUFEKCZ0b21veW9fa2VybmVsX2RvbWFpbi5hY2xfaW5mb19saXN0KTsKLQl0b21veW9fa2VybmVsX2RvbWFpbi5kb21haW5uYW1lID0gdG9tb3lvX3NhdmVfbmFtZShUT01PWU9fUk9PVF9OQU1FKTsKLQlsaXN0X2FkZF90YWlsKCZ0b21veW9fa2VybmVsX2RvbWFpbi5saXN0LCAmdG9tb3lvX2RvbWFpbl9saXN0KTsKLQlkb3duX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKKwl0b21veW9fa2VybmVsX2RvbWFpbi5kb21haW5uYW1lID0gdG9tb3lvX2dldF9uYW1lKFRPTU9ZT19ST09UX05BTUUpOworCS8qCisJICogdG9tb3lvX3JlYWRfbG9jaygpIGlzIG5vdCBuZWVkZWQgYmVjYXVzZSB0aGlzIGZ1bmN0aW9uIGlzCisJICogY2FsbGVkIGJlZm9yZSB0aGUgZmlyc3QgImRlbGV0ZSIgcmVxdWVzdC4KKwkgKi8KKwlsaXN0X2FkZF90YWlsX3JjdSgmdG9tb3lvX2tlcm5lbF9kb21haW4ubGlzdCwgJnRvbW95b19kb21haW5fbGlzdCk7CiAJaWYgKHRvbW95b19maW5kX2RvbWFpbihUT01PWU9fUk9PVF9OQU1FKSAhPSAmdG9tb3lvX2tlcm5lbF9kb21haW4pCiAJCXBhbmljKCJDYW4ndCByZWdpc3RlciB0b21veW9fa2VybmVsX2RvbWFpbiIpOwotCXVwX3JlYWQoJnRvbW95b19kb21haW5fbGlzdF9sb2NrKTsKLX0KLQotLyogTWVtb3J5IGFsbG9jYXRlZCBmb3IgdGVtcG9yYXJ5IHB1cnBvc2UuICovCi1zdGF0aWMgYXRvbWljX3QgdG9tb3lvX2R5bmFtaWNfbWVtb3J5X3NpemU7Ci0KLS8qKgotICogdG9tb3lvX2FsbG9jIC0gQWxsb2NhdGUgbWVtb3J5IGZvciB0ZW1wb3JhcnkgcHVycG9zZS4KLSAqCi0gKiBAc2l6ZTogU2l6ZSBpbiBieXRlcy4KLSAqCi0gKiBSZXR1cm5zIHBvaW50ZXIgdG8gYWxsb2NhdGVkIG1lbW9yeSBvbiBzdWNjZXNzLCBOVUxMIG90aGVyd2lzZS4KLSAqLwotdm9pZCAqdG9tb3lvX2FsbG9jKGNvbnN0IHNpemVfdCBzaXplKQotewotCXZvaWQgKnAgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmIChwKQotCQlhdG9taWNfYWRkKGtzaXplKHApLCAmdG9tb3lvX2R5bmFtaWNfbWVtb3J5X3NpemUpOwotCXJldHVybiBwOwotfQotCi0vKioKLSAqIHRvbW95b19mcmVlIC0gUmVsZWFzZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRvbW95b19hbGxvYygpLgotICoKLSAqIEBwOiBQb2ludGVyIHJldHVybmVkIGJ5IHRvbW95b19hbGxvYygpLiBNYXkgYmUgTlVMTC4KLSAqCi0gKiBSZXR1cm5zIG5vdGhpbmcuCi0gKi8KLXZvaWQgdG9tb3lvX2ZyZWUoY29uc3Qgdm9pZCAqcCkKLXsKLQlpZiAocCkgewotCQlhdG9taWNfc3ViKGtzaXplKHApLCAmdG9tb3lvX2R5bmFtaWNfbWVtb3J5X3NpemUpOwotCQlrZnJlZShwKTsKLQl9CiB9CiAKIC8qKgpAQCAtNDUxLDMyICszMjQsMTkgQEAKIGludCB0b21veW9fcmVhZF9tZW1vcnlfY291bnRlcihzdHJ1Y3QgdG9tb3lvX2lvX2J1ZmZlciAqaGVhZCkKIHsKIAlpZiAoIWhlYWQtPnJlYWRfZW9mKSB7Ci0JCWNvbnN0IHVuc2lnbmVkIGludCBzaGFyZWQKLQkJCT0gdG9tb3lvX2FsbG9jYXRlZF9tZW1vcnlfZm9yX3NhdmVuYW1lOwotCQljb25zdCB1bnNpZ25lZCBpbnQgcHJpdmF0ZQotCQkJPSB0b21veW9fYWxsb2NhdGVkX21lbW9yeV9mb3JfZWxlbWVudHM7Ci0JCWNvbnN0IHVuc2lnbmVkIGludCBkeW5hbWljCi0JCQk9IGF0b21pY19yZWFkKCZ0b21veW9fZHluYW1pY19tZW1vcnlfc2l6ZSk7CisJCWNvbnN0IHVuc2lnbmVkIGludCBwb2xpY3kKKwkJCT0gYXRvbWljX3JlYWQoJnRvbW95b19wb2xpY3lfbWVtb3J5X3NpemUpOwogCQljaGFyIGJ1ZmZlcls2NF07CiAKIAkJbWVtc2V0KGJ1ZmZlciwgMCwgc2l6ZW9mKGJ1ZmZlcikpOwotCQlpZiAodG9tb3lvX3F1b3RhX2Zvcl9zYXZlbmFtZSkKKwkJaWYgKHRvbW95b19xdW90YV9mb3JfcG9saWN5KQogCQkJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEsCiAJCQkJICIgICAoUXVvdGE6ICUxMHUpIiwKLQkJCQkgdG9tb3lvX3F1b3RhX2Zvcl9zYXZlbmFtZSk7CisJCQkJIHRvbW95b19xdW90YV9mb3JfcG9saWN5KTsKIAkJZWxzZQogCQkJYnVmZmVyWzBdID0gJ1wwJzsKLQkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiU2hhcmVkOiAgJTEwdSVzXG4iLCBzaGFyZWQsIGJ1ZmZlcik7Ci0JCWlmICh0b21veW9fcXVvdGFfZm9yX2VsZW1lbnRzKQotCQkJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSAtIDEsCi0JCQkJICIgICAoUXVvdGE6ICUxMHUpIiwKLQkJCQkgdG9tb3lvX3F1b3RhX2Zvcl9lbGVtZW50cyk7Ci0JCWVsc2UKLQkJCWJ1ZmZlclswXSA9ICdcMCc7Ci0JCXRvbW95b19pb19wcmludGYoaGVhZCwgIlByaXZhdGU6ICUxMHUlc1xuIiwgcHJpdmF0ZSwgYnVmZmVyKTsKLQkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiRHluYW1pYzogJTEwdVxuIiwgZHluYW1pYyk7Ci0JCXRvbW95b19pb19wcmludGYoaGVhZCwgIlRvdGFsOiAgICUxMHVcbiIsCi0JCQkJIHNoYXJlZCArIHByaXZhdGUgKyBkeW5hbWljKTsKKwkJdG9tb3lvX2lvX3ByaW50ZihoZWFkLCAiUG9saWN5OiAgJTEwdSVzXG4iLCBwb2xpY3ksIGJ1ZmZlcik7CisJCXRvbW95b19pb19wcmludGYoaGVhZCwgIlRvdGFsOiAgICUxMHVcbiIsIHBvbGljeSk7CiAJCWhlYWQtPnJlYWRfZW9mID0gdHJ1ZTsKIAl9CiAJcmV0dXJuIDA7CkBAIC00OTQsOSArMzU0LDcgQEAKIAljaGFyICpkYXRhID0gaGVhZC0+d3JpdGVfYnVmOwogCXVuc2lnbmVkIGludCBzaXplOwogCi0JaWYgKHNzY2FuZihkYXRhLCAiU2hhcmVkOiAldSIsICZzaXplKSA9PSAxKQotCQl0b21veW9fcXVvdGFfZm9yX3NhdmVuYW1lID0gc2l6ZTsKLQllbHNlIGlmIChzc2NhbmYoZGF0YSwgIlByaXZhdGU6ICV1IiwgJnNpemUpID09IDEpCi0JCXRvbW95b19xdW90YV9mb3JfZWxlbWVudHMgPSBzaXplOworCWlmIChzc2NhbmYoZGF0YSwgIlBvbGljeTogJXUiLCAmc2l6ZSkgPT0gMSkKKwkJdG9tb3lvX3F1b3RhX2Zvcl9wb2xpY3kgPSBzaXplOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvdG9tb3lvL3JlYWxwYXRoLmggYi9zZWN1cml0eS90b21veW8vcmVhbHBhdGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzgyMTdhMy4uMDAwMDAwMAotLS0gYS9zZWN1cml0eS90b21veW8vcmVhbHBhdGguaAorKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLS8qCi0gKiBzZWN1cml0eS90b21veW8vcmVhbHBhdGguaAotICoKLSAqIEdldCB0aGUgY2Fub25pY2FsaXplZCBhYnNvbHV0ZSBwYXRobmFtZXMuIFRoZSBiYXNpcyBmb3IgVE9NT1lPLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5ICBOVFQgREFUQSBDT1JQT1JBVElPTgotICoKLSAqIFZlcnNpb246IDIuMi4wICAgMjAwOS8wNC8wMQotICoKLSAqLwotCi0jaWZuZGVmIF9TRUNVUklUWV9UT01PWU9fUkVBTFBBVEhfSAotI2RlZmluZSBfU0VDVVJJVFlfVE9NT1lPX1JFQUxQQVRIX0gKLQotc3RydWN0IHBhdGg7Ci1zdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbzsKLXN0cnVjdCB0b21veW9faW9fYnVmZmVyOwotCi0vKiBDb252ZXJ0IGJpbmFyeSBzdHJpbmcgdG8gYXNjaWkgc3RyaW5nLiAqLwotaW50IHRvbW95b19lbmNvZGUoY2hhciAqYnVmZmVyLCBpbnQgYnVmbGVuLCBjb25zdCBjaGFyICpzdHIpOwotCi0vKiBSZXR1cm5zIHJlYWxwYXRoKDMpIG9mIHRoZSBnaXZlbiBwYXRobmFtZSBidXQgaWdub3JlcyBjaHJvb3QnZWQgcm9vdC4gKi8KLWludCB0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoMihzdHJ1Y3QgcGF0aCAqcGF0aCwgY2hhciAqbmV3bmFtZSwKLQkJCSAgICAgICBpbnQgbmV3bmFtZV9sZW4pOwotCi0vKgotICogUmV0dXJucyByZWFscGF0aCgzKSBvZiB0aGUgZ2l2ZW4gcGF0aG5hbWUgYnV0IGlnbm9yZXMgY2hyb290J2VkIHJvb3QuCi0gKiBUaGVzZSBmdW5jdGlvbnMgdXNlIHRvbW95b19hbGxvYygpLCBzbyB0aGUgY2FsbGVyIG11c3QgY2FsbCB0b21veW9fZnJlZSgpCi0gKiBpZiB0aGVzZSBmdW5jdGlvbnMgZGlkbid0IHJldHVybiBOVUxMLgotICovCi1jaGFyICp0b21veW9fcmVhbHBhdGgoY29uc3QgY2hhciAqcGF0aG5hbWUpOwotLyoKLSAqIFNhbWUgd2l0aCB0b21veW9fcmVhbHBhdGgoKSBleGNlcHQgdGhhdCBpdCBkb2Vzbid0IGZvbGxvdyB0aGUgZmluYWwgc3ltbGluay4KLSAqLwotY2hhciAqdG9tb3lvX3JlYWxwYXRoX25vZm9sbG93KGNvbnN0IGNoYXIgKnBhdGhuYW1lKTsKLS8qIFNhbWUgd2l0aCB0b21veW9fcmVhbHBhdGgoKSBleGNlcHQgdGhhdCB0aGUgcGF0aG5hbWUgaXMgYWxyZWFkeSBzb2x2ZWQuICovCi1jaGFyICp0b21veW9fcmVhbHBhdGhfZnJvbV9wYXRoKHN0cnVjdCBwYXRoICpwYXRoKTsKLQotLyoKLSAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgQUNMIGVudHJ5LgotICogVGhlIFJBTSBpcyBjaHVua2VkLCBzbyBORVZFUiB0cnkgdG8ga2ZyZWUoKSB0aGUgcmV0dXJuZWQgcG9pbnRlci4KLSAqLwotdm9pZCAqdG9tb3lvX2FsbG9jX2VsZW1lbnQoY29uc3QgdW5zaWduZWQgaW50IHNpemUpOwotCi0vKgotICogS2VlcCB0aGUgZ2l2ZW4gbmFtZSBvbiB0aGUgUkFNLgotICogVGhlIFJBTSBpcyBzaGFyZWQsIHNvIE5FVkVSIHRyeSB0byBtb2RpZnkgb3Iga2ZyZWUoKSB0aGUgcmV0dXJuZWQgbmFtZS4KLSAqLwotY29uc3Qgc3RydWN0IHRvbW95b19wYXRoX2luZm8gKnRvbW95b19zYXZlX25hbWUoY29uc3QgY2hhciAqbmFtZSk7Ci0KLS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGVtcG9yYXJ5IHVzZSAoZS5nLiBwZXJtaXNzaW9uIGNoZWNrcykuICovCi12b2lkICp0b21veW9fYWxsb2MoY29uc3Qgc2l6ZV90IHNpemUpOwotCi0vKiBGcmVlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdG9tb3lvX2FsbG9jKCkuICovCi12b2lkIHRvbW95b19mcmVlKGNvbnN0IHZvaWQgKnApOwotCi0vKiBDaGVjayBmb3IgbWVtb3J5IHVzYWdlLiAqLwotaW50IHRvbW95b19yZWFkX21lbW9yeV9jb3VudGVyKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKLQotLyogU2V0IG1lbW9yeSBxdW90YS4gKi8KLWludCB0b21veW9fd3JpdGVfbWVtb3J5X3F1b3RhKHN0cnVjdCB0b21veW9faW9fYnVmZmVyICpoZWFkKTsKLQotLyogSW5pdGlhbGl6ZSByZWFscGF0aCByZWxhdGVkIGNvZGUuICovCi12b2lkIF9faW5pdCB0b21veW9fcmVhbHBhdGhfaW5pdCh2b2lkKTsKLQotI2VuZGlmIC8qICFkZWZpbmVkKF9TRUNVUklUWV9UT01PWU9fUkVBTFBBVEhfSCkgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3RvbW95by90b21veW8uYyBiL3NlY3VyaXR5L3RvbW95by90b21veW8uYwppbmRleCAyYWNlZWJmLi5kZWRkOTdkIDEwMDY0NAotLS0gYS9zZWN1cml0eS90b21veW8vdG9tb3lvLmMKKysrIGIvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5jCkBAIC0xMSw4ICsxMSw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgImNvbW1vbi5oIgotI2luY2x1ZGUgInRvbW95by5oIgotI2luY2x1ZGUgInJlYWxwYXRoLmgiCiAKIHN0YXRpYyBpbnQgdG9tb3lvX2NyZWRfYWxsb2NfYmxhbmsoc3RydWN0IGNyZWQgKm5ldywgZ2ZwX3QgZ2ZwKQogewpAQCAtMjMsMjEgKzIxLDIzIEBACiBzdGF0aWMgaW50IHRvbW95b19jcmVkX3ByZXBhcmUoc3RydWN0IGNyZWQgKm5ldywgY29uc3Qgc3RydWN0IGNyZWQgKm9sZCwKIAkJCSAgICAgICBnZnBfdCBnZnApCiB7Ci0JLyoKLQkgKiBTaW5jZSAic3RydWN0IHRvbW95b19kb21haW5faW5mbyAqIiBpcyBhIHNoYXJhYmxlIHBvaW50ZXIsCi0JICogd2UgZG9uJ3QgbmVlZCB0byBkdXBsaWNhdGUuCi0JICovCi0JbmV3LT5zZWN1cml0eSA9IG9sZC0+c2VjdXJpdHk7CisJc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluID0gb2xkLT5zZWN1cml0eTsKKwluZXctPnNlY3VyaXR5ID0gZG9tYWluOworCWlmIChkb21haW4pCisJCWF0b21pY19pbmMoJmRvbWFpbi0+dXNlcnMpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB0b21veW9fY3JlZF90cmFuc2ZlcihzdHJ1Y3QgY3JlZCAqbmV3LCBjb25zdCBzdHJ1Y3QgY3JlZCAqb2xkKQogewotCS8qCi0JICogU2luY2UgInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKiIgaXMgYSBzaGFyYWJsZSBwb2ludGVyLAotCSAqIHdlIGRvbid0IG5lZWQgdG8gZHVwbGljYXRlLgotCSAqLwotCW5ldy0+c2VjdXJpdHkgPSBvbGQtPnNlY3VyaXR5OworCXRvbW95b19jcmVkX3ByZXBhcmUobmV3LCBvbGQsIDApOworfQorCitzdGF0aWMgdm9pZCB0b21veW9fY3JlZF9mcmVlKHN0cnVjdCBjcmVkICpjcmVkKQoreworCXN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiA9IGNyZWQtPnNlY3VyaXR5OworCWlmIChkb21haW4pCisJCWF0b21pY19kZWMoJmRvbWFpbi0+dXNlcnMpOwogfQogCiBzdGF0aWMgaW50IHRvbW95b19icHJtX3NldF9jcmVkcyhzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQpAQCAtNjEsNiArNjEsMTQgQEAKIAlpZiAoIXRvbW95b19wb2xpY3lfbG9hZGVkKQogCQl0b21veW9fbG9hZF9wb2xpY3koYnBybS0+ZmlsZW5hbWUpOwogCS8qCisJICogUmVsZWFzZSByZWZlcmVuY2UgdG8gInN0cnVjdCB0b21veW9fZG9tYWluX2luZm8iIHN0b3JlZCBpbnNpZGUKKwkgKiAiYnBybS0+Y3JlZC0+c2VjdXJpdHkiLiBOZXcgcmVmZXJlbmNlIHRvICJzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvIgorCSAqIHN0b3JlZCBpbnNpZGUgImJwcm0tPmNyZWQtPnNlY3VyaXR5IiB3aWxsIGJlIGFjcXVpcmVkIGxhdGVyIGluc2lkZQorCSAqIHRvbW95b19maW5kX25leHRfZG9tYWluKCkuCisJICovCisJYXRvbWljX2RlYygmKChzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICopCisJCSAgICAgYnBybS0+Y3JlZC0+c2VjdXJpdHkpLT51c2Vycyk7CisJLyoKIAkgKiBUZWxsIHRvbW95b19icHJtX2NoZWNrX3NlY3VyaXR5KCkgaXMgY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZSBvZiBhbgogCSAqIGV4ZWN2ZSBvcGVyYXRpb24uCiAJICovCkBAIC03Niw4ICs4NCwxMiBAQAogCSAqIEV4ZWN1dGUgcGVybWlzc2lvbiBpcyBjaGVja2VkIGFnYWluc3QgcGF0aG5hbWUgcGFzc2VkIHRvIGRvX2V4ZWN2ZSgpCiAJICogdXNpbmcgY3VycmVudCBkb21haW4uCiAJICovCi0JaWYgKCFkb21haW4pCi0JCXJldHVybiB0b21veW9fZmluZF9uZXh0X2RvbWFpbihicHJtKTsKKwlpZiAoIWRvbWFpbikgeworCQljb25zdCBpbnQgaWR4ID0gdG9tb3lvX3JlYWRfbG9jaygpOworCQljb25zdCBpbnQgZXJyID0gdG9tb3lvX2ZpbmRfbmV4dF9kb21haW4oYnBybSk7CisJCXRvbW95b19yZWFkX3VubG9jayhpZHgpOworCQlyZXR1cm4gZXJyOworCX0KIAkvKgogCSAqIFJlYWQgcGVybWlzc2lvbiBpcyBjaGVja2VkIGFnYWluc3QgaW50ZXJwcmV0ZXJzIHVzaW5nIG5leHQgZG9tYWluLgogCSAqLwpAQCAtODcsNjcgKzk5LDU2IEBACiBzdGF0aWMgaW50IHRvbW95b19wYXRoX3RydW5jYXRlKHN0cnVjdCBwYXRoICpwYXRoLCBsb2ZmX3QgbGVuZ3RoLAogCQkJCXVuc2lnbmVkIGludCB0aW1lX2F0dHJzKQogewotCXJldHVybiB0b21veW9fY2hlY2tfMXBhdGhfcGVybSh0b21veW9fZG9tYWluKCksCi0JCQkJICAgICAgIFRPTU9ZT19UWVBFX1RSVU5DQVRFX0FDTCwKLQkJCQkgICAgICAgcGF0aCk7CisJcmV0dXJuIHRvbW95b19wYXRoX3Blcm0oVE9NT1lPX1RZUEVfVFJVTkNBVEUsIHBhdGgpOwogfQogCiBzdGF0aWMgaW50IHRvbW95b19wYXRoX3VubGluayhzdHJ1Y3QgcGF0aCAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJc3RydWN0IHBhdGggcGF0aCA9IHsgcGFyZW50LT5tbnQsIGRlbnRyeSB9OwotCXJldHVybiB0b21veW9fY2hlY2tfMXBhdGhfcGVybSh0b21veW9fZG9tYWluKCksCi0JCQkJICAgICAgIFRPTU9ZT19UWVBFX1VOTElOS19BQ0wsCi0JCQkJICAgICAgICZwYXRoKTsKKwlyZXR1cm4gdG9tb3lvX3BhdGhfcGVybShUT01PWU9fVFlQRV9VTkxJTkssICZwYXRoKTsKIH0KIAogc3RhdGljIGludCB0b21veW9fcGF0aF9ta2RpcihzdHJ1Y3QgcGF0aCAqcGFyZW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkgICAgIGludCBtb2RlKQogewogCXN0cnVjdCBwYXRoIHBhdGggPSB7IHBhcmVudC0+bW50LCBkZW50cnkgfTsKLQlyZXR1cm4gdG9tb3lvX2NoZWNrXzFwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAotCQkJCSAgICAgICBUT01PWU9fVFlQRV9NS0RJUl9BQ0wsCi0JCQkJICAgICAgICZwYXRoKTsKKwlyZXR1cm4gdG9tb3lvX3BhdGhfcGVybShUT01PWU9fVFlQRV9NS0RJUiwgJnBhdGgpOwogfQogCiBzdGF0aWMgaW50IHRvbW95b19wYXRoX3JtZGlyKHN0cnVjdCBwYXRoICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKIHsKIAlzdHJ1Y3QgcGF0aCBwYXRoID0geyBwYXJlbnQtPm1udCwgZGVudHJ5IH07Ci0JcmV0dXJuIHRvbW95b19jaGVja18xcGF0aF9wZXJtKHRvbW95b19kb21haW4oKSwKLQkJCQkgICAgICAgVE9NT1lPX1RZUEVfUk1ESVJfQUNMLAotCQkJCSAgICAgICAmcGF0aCk7CisJcmV0dXJuIHRvbW95b19wYXRoX3Blcm0oVE9NT1lPX1RZUEVfUk1ESVIsICZwYXRoKTsKIH0KIAogc3RhdGljIGludCB0b21veW9fcGF0aF9zeW1saW5rKHN0cnVjdCBwYXRoICpwYXJlbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSAgICAgICBjb25zdCBjaGFyICpvbGRfbmFtZSkKIHsKIAlzdHJ1Y3QgcGF0aCBwYXRoID0geyBwYXJlbnQtPm1udCwgZGVudHJ5IH07Ci0JcmV0dXJuIHRvbW95b19jaGVja18xcGF0aF9wZXJtKHRvbW95b19kb21haW4oKSwKLQkJCQkgICAgICAgVE9NT1lPX1RZUEVfU1lNTElOS19BQ0wsCi0JCQkJICAgICAgICZwYXRoKTsKKwlyZXR1cm4gdG9tb3lvX3BhdGhfcGVybShUT01PWU9fVFlQRV9TWU1MSU5LLCAmcGF0aCk7CiB9CiAKIHN0YXRpYyBpbnQgdG9tb3lvX3BhdGhfbWtub2Qoc3RydWN0IHBhdGggKnBhcmVudCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJICAgICBpbnQgbW9kZSwgdW5zaWduZWQgaW50IGRldikKIHsKIAlzdHJ1Y3QgcGF0aCBwYXRoID0geyBwYXJlbnQtPm1udCwgZGVudHJ5IH07Ci0JaW50IHR5cGUgPSBUT01PWU9fVFlQRV9DUkVBVEVfQUNMOworCWludCB0eXBlID0gVE9NT1lPX1RZUEVfQ1JFQVRFOwogCiAJc3dpdGNoIChtb2RlICYgU19JRk1UKSB7CiAJY2FzZSBTX0lGQ0hSOgotCQl0eXBlID0gVE9NT1lPX1RZUEVfTUtDSEFSX0FDTDsKKwkJdHlwZSA9IFRPTU9ZT19UWVBFX01LQ0hBUjsKIAkJYnJlYWs7CiAJY2FzZSBTX0lGQkxLOgotCQl0eXBlID0gVE9NT1lPX1RZUEVfTUtCTE9DS19BQ0w7CisJCXR5cGUgPSBUT01PWU9fVFlQRV9NS0JMT0NLOwogCQlicmVhazsKIAljYXNlIFNfSUZJRk86Ci0JCXR5cGUgPSBUT01PWU9fVFlQRV9NS0ZJRk9fQUNMOworCQl0eXBlID0gVE9NT1lPX1RZUEVfTUtGSUZPOwogCQlicmVhazsKIAljYXNlIFNfSUZTT0NLOgotCQl0eXBlID0gVE9NT1lPX1RZUEVfTUtTT0NLX0FDTDsKKwkJdHlwZSA9IFRPTU9ZT19UWVBFX01LU09DSzsKIAkJYnJlYWs7CiAJfQotCXJldHVybiB0b21veW9fY2hlY2tfMXBhdGhfcGVybSh0b21veW9fZG9tYWluKCksCi0JCQkJICAgICAgIHR5cGUsICZwYXRoKTsKKwlyZXR1cm4gdG9tb3lvX3BhdGhfcGVybSh0eXBlLCAmcGF0aCk7CiB9CiAKIHN0YXRpYyBpbnQgdG9tb3lvX3BhdGhfbGluayhzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LCBzdHJ1Y3QgcGF0aCAqbmV3X2RpciwKQEAgLTE1NSw5ICsxNTYsNyBAQAogewogCXN0cnVjdCBwYXRoIHBhdGgxID0geyBuZXdfZGlyLT5tbnQsIG9sZF9kZW50cnkgfTsKIAlzdHJ1Y3QgcGF0aCBwYXRoMiA9IHsgbmV3X2Rpci0+bW50LCBuZXdfZGVudHJ5IH07Ci0JcmV0dXJuIHRvbW95b19jaGVja18ycGF0aF9wZXJtKHRvbW95b19kb21haW4oKSwKLQkJCQkgICAgICAgVE9NT1lPX1RZUEVfTElOS19BQ0wsCi0JCQkJICAgICAgICZwYXRoMSwgJnBhdGgyKTsKKwlyZXR1cm4gdG9tb3lvX3BhdGgyX3Blcm0oVE9NT1lPX1RZUEVfTElOSywgJnBhdGgxLCAmcGF0aDIpOwogfQogCiBzdGF0aWMgaW50IHRvbW95b19wYXRoX3JlbmFtZShzdHJ1Y3QgcGF0aCAqb2xkX3BhcmVudCwKQEAgLTE2NywxNiArMTY2LDE0IEBACiB7CiAJc3RydWN0IHBhdGggcGF0aDEgPSB7IG9sZF9wYXJlbnQtPm1udCwgb2xkX2RlbnRyeSB9OwogCXN0cnVjdCBwYXRoIHBhdGgyID0geyBuZXdfcGFyZW50LT5tbnQsIG5ld19kZW50cnkgfTsKLQlyZXR1cm4gdG9tb3lvX2NoZWNrXzJwYXRoX3Blcm0odG9tb3lvX2RvbWFpbigpLAotCQkJCSAgICAgICBUT01PWU9fVFlQRV9SRU5BTUVfQUNMLAotCQkJCSAgICAgICAmcGF0aDEsICZwYXRoMik7CisJcmV0dXJuIHRvbW95b19wYXRoMl9wZXJtKFRPTU9ZT19UWVBFX1JFTkFNRSwgJnBhdGgxLCAmcGF0aDIpOwogfQogCiBzdGF0aWMgaW50IHRvbW95b19maWxlX2ZjbnRsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJICAgICB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlpZiAoY21kID09IEZfU0VURkwgJiYgKChhcmcgXiBmaWxlLT5mX2ZsYWdzKSAmIE9fQVBQRU5EKSkKLQkJcmV0dXJuIHRvbW95b19jaGVja19yZXdyaXRlX3Blcm1pc3Npb24odG9tb3lvX2RvbWFpbigpLCBmaWxlKTsKKwkJcmV0dXJuIHRvbW95b19jaGVja19yZXdyaXRlX3Blcm1pc3Npb24oZmlsZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE4OSw2ICsxODYsNTEgQEAKIAlyZXR1cm4gdG9tb3lvX2NoZWNrX29wZW5fcGVybWlzc2lvbih0b21veW9fZG9tYWluKCksICZmLT5mX3BhdGgsIGZsYWdzKTsKIH0KIAorc3RhdGljIGludCB0b21veW9fZmlsZV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJcmV0dXJuIHRvbW95b19wYXRoX3Blcm0oVE9NT1lPX1RZUEVfSU9DVEwsICZmaWxlLT5mX3BhdGgpOworfQorCitzdGF0aWMgaW50IHRvbW95b19wYXRoX2NobW9kKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IHZmc21vdW50ICptbnQsCisJCQkgICAgIG1vZGVfdCBtb2RlKQoreworCXN0cnVjdCBwYXRoIHBhdGggPSB7IG1udCwgZGVudHJ5IH07CisJcmV0dXJuIHRvbW95b19wYXRoX3Blcm0oVE9NT1lPX1RZUEVfQ0hNT0QsICZwYXRoKTsKK30KKworc3RhdGljIGludCB0b21veW9fcGF0aF9jaG93bihzdHJ1Y3QgcGF0aCAqcGF0aCwgdWlkX3QgdWlkLCBnaWRfdCBnaWQpCit7CisJaW50IGVycm9yID0gMDsKKwlpZiAodWlkICE9ICh1aWRfdCkgLTEpCisJCWVycm9yID0gdG9tb3lvX3BhdGhfcGVybShUT01PWU9fVFlQRV9DSE9XTiwgcGF0aCk7CisJaWYgKCFlcnJvciAmJiBnaWQgIT0gKGdpZF90KSAtMSkKKwkJZXJyb3IgPSB0b21veW9fcGF0aF9wZXJtKFRPTU9ZT19UWVBFX0NIR1JQLCBwYXRoKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX3BhdGhfY2hyb290KHN0cnVjdCBwYXRoICpwYXRoKQoreworCXJldHVybiB0b21veW9fcGF0aF9wZXJtKFRPTU9ZT19UWVBFX0NIUk9PVCwgcGF0aCk7Cit9CisKK3N0YXRpYyBpbnQgdG9tb3lvX3NiX21vdW50KGNoYXIgKmRldl9uYW1lLCBzdHJ1Y3QgcGF0aCAqcGF0aCwKKwkJCSAgIGNoYXIgKnR5cGUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIHRvbW95b19wYXRoX3Blcm0oVE9NT1lPX1RZUEVfTU9VTlQsIHBhdGgpOworfQorCitzdGF0aWMgaW50IHRvbW95b19zYl91bW91bnQoc3RydWN0IHZmc21vdW50ICptbnQsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgcGF0aCBwYXRoID0geyBtbnQsIG1udC0+bW50X3Jvb3QgfTsKKwlyZXR1cm4gdG9tb3lvX3BhdGhfcGVybShUT01PWU9fVFlQRV9VTU9VTlQsICZwYXRoKTsKK30KKworc3RhdGljIGludCB0b21veW9fc2JfcGl2b3Ryb290KHN0cnVjdCBwYXRoICpvbGRfcGF0aCwgc3RydWN0IHBhdGggKm5ld19wYXRoKQoreworCXJldHVybiB0b21veW9fcGF0aDJfcGVybShUT01PWU9fVFlQRV9QSVZPVF9ST09ULCBuZXdfcGF0aCwgb2xkX3BhdGgpOworfQorCiAvKgogICogdG9tb3lvX3NlY3VyaXR5X29wcyBpcyBhICJzdHJ1Y3Qgc2VjdXJpdHlfb3BlcmF0aW9ucyIgd2hpY2ggaXMgdXNlZCBmb3IKICAqIHJlZ2lzdGVyaW5nIFRPTU9ZTy4KQEAgLTE5OCw2ICsyNDAsNyBAQAogCS5jcmVkX2FsbG9jX2JsYW5rICAgID0gdG9tb3lvX2NyZWRfYWxsb2NfYmxhbmssCiAJLmNyZWRfcHJlcGFyZSAgICAgICAgPSB0b21veW9fY3JlZF9wcmVwYXJlLAogCS5jcmVkX3RyYW5zZmVyCSAgICAgPSB0b21veW9fY3JlZF90cmFuc2ZlciwKKwkuY3JlZF9mcmVlICAgICAgICAgICA9IHRvbW95b19jcmVkX2ZyZWUsCiAJLmJwcm1fc2V0X2NyZWRzICAgICAgPSB0b21veW9fYnBybV9zZXRfY3JlZHMsCiAJLmJwcm1fY2hlY2tfc2VjdXJpdHkgPSB0b21veW9fYnBybV9jaGVja19zZWN1cml0eSwKIAkuZmlsZV9mY250bCAgICAgICAgICA9IHRvbW95b19maWxlX2ZjbnRsLApAQCAtMjEwLDggKzI1MywxOCBAQAogCS5wYXRoX21rbm9kICAgICAgICAgID0gdG9tb3lvX3BhdGhfbWtub2QsCiAJLnBhdGhfbGluayAgICAgICAgICAgPSB0b21veW9fcGF0aF9saW5rLAogCS5wYXRoX3JlbmFtZSAgICAgICAgID0gdG9tb3lvX3BhdGhfcmVuYW1lLAorCS5maWxlX2lvY3RsICAgICAgICAgID0gdG9tb3lvX2ZpbGVfaW9jdGwsCisJLnBhdGhfY2htb2QgICAgICAgICAgPSB0b21veW9fcGF0aF9jaG1vZCwKKwkucGF0aF9jaG93biAgICAgICAgICA9IHRvbW95b19wYXRoX2Nob3duLAorCS5wYXRoX2Nocm9vdCAgICAgICAgID0gdG9tb3lvX3BhdGhfY2hyb290LAorCS5zYl9tb3VudCAgICAgICAgICAgID0gdG9tb3lvX3NiX21vdW50LAorCS5zYl91bW91bnQgICAgICAgICAgID0gdG9tb3lvX3NiX3Vtb3VudCwKKwkuc2JfcGl2b3Ryb290ICAgICAgICA9IHRvbW95b19zYl9waXZvdHJvb3QsCiB9OwogCisvKiBMb2NrIGZvciBHQy4gKi8KK3N0cnVjdCBzcmN1X3N0cnVjdCB0b21veW9fc3M7CisKIHN0YXRpYyBpbnQgX19pbml0IHRvbW95b19pbml0KHZvaWQpCiB7CiAJc3RydWN0IGNyZWQgKmNyZWQgPSAoc3RydWN0IGNyZWQgKikgY3VycmVudF9jcmVkKCk7CkBAIC0yMTksNyArMjcyLDggQEAKIAlpZiAoIXNlY3VyaXR5X21vZHVsZV9lbmFibGUoJnRvbW95b19zZWN1cml0eV9vcHMpKQogCQlyZXR1cm4gMDsKIAkvKiByZWdpc3RlciBvdXJzZWx2ZXMgd2l0aCB0aGUgc2VjdXJpdHkgZnJhbWV3b3JrICovCi0JaWYgKHJlZ2lzdGVyX3NlY3VyaXR5KCZ0b21veW9fc2VjdXJpdHlfb3BzKSkKKwlpZiAocmVnaXN0ZXJfc2VjdXJpdHkoJnRvbW95b19zZWN1cml0eV9vcHMpIHx8CisJICAgIGluaXRfc3JjdV9zdHJ1Y3QoJnRvbW95b19zcykpCiAJCXBhbmljKCJGYWlsdXJlIHJlZ2lzdGVyaW5nIFRPTU9ZTyBMaW51eCIpOwogCXByaW50ayhLRVJOX0lORk8gIlRPTU9ZTyBMaW51eCBpbml0aWFsaXplZFxuIik7CiAJY3JlZC0+c2VjdXJpdHkgPSAmdG9tb3lvX2tlcm5lbF9kb21haW47CmRpZmYgLS1naXQgYS9zZWN1cml0eS90b21veW8vdG9tb3lvLmggYi9zZWN1cml0eS90b21veW8vdG9tb3lvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkNzU4MzIuLjAwMDAwMDAKLS0tIGEvc2VjdXJpdHkvdG9tb3lvL3RvbW95by5oCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyoKLSAqIHNlY3VyaXR5L3RvbW95by90b21veW8uaAotICoKLSAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBEb21haW4tQmFzZWQgTWFuZGF0b3J5IEFjY2VzcyBDb250cm9sLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA5ICBOVFQgREFUQSBDT1JQT1JBVElPTgotICoKLSAqIFZlcnNpb246IDIuMi4wICAgMjAwOS8wNC8wMQotICoKLSAqLwotCi0jaWZuZGVmIF9TRUNVUklUWV9UT01PWU9fVE9NT1lPX0gKLSNkZWZpbmUgX1NFQ1VSSVRZX1RPTU9ZT19UT01PWU9fSAotCi1zdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbzsKLXN0cnVjdCBwYXRoOwotc3RydWN0IGlub2RlOwotc3RydWN0IGxpbnV4X2JpbnBybTsKLXN0cnVjdCBwdF9yZWdzOwotCi1pbnQgdG9tb3lvX2NoZWNrX2V4ZWNfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCi0JCQkgICBjb25zdCBzdHJ1Y3QgdG9tb3lvX3BhdGhfaW5mbyAqZmlsZW5hbWUpOwotaW50IHRvbW95b19jaGVja19vcGVuX3Blcm1pc3Npb24oc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqZG9tYWluLAotCQkJCSBzdHJ1Y3QgcGF0aCAqcGF0aCwgY29uc3QgaW50IGZsYWcpOwotaW50IHRvbW95b19jaGVja18xcGF0aF9wZXJtKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKLQkJCSAgICBjb25zdCB1OCBvcGVyYXRpb24sIHN0cnVjdCBwYXRoICpwYXRoKTsKLWludCB0b21veW9fY2hlY2tfMnBhdGhfcGVybShzdHJ1Y3QgdG9tb3lvX2RvbWFpbl9pbmZvICpkb21haW4sCi0JCQkgICAgY29uc3QgdTggb3BlcmF0aW9uLCBzdHJ1Y3QgcGF0aCAqcGF0aDEsCi0JCQkgICAgc3RydWN0IHBhdGggKnBhdGgyKTsKLWludCB0b21veW9fY2hlY2tfcmV3cml0ZV9wZXJtaXNzaW9uKHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gKmRvbWFpbiwKLQkJCQkgICAgc3RydWN0IGZpbGUgKmZpbHApOwotaW50IHRvbW95b19maW5kX25leHRfZG9tYWluKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pOwotCi0vKiBJbmRleCBudW1iZXJzIGZvciBBY2Nlc3MgQ29udHJvbHMuICovCi0KLSNkZWZpbmUgVE9NT1lPX1RZUEVfU0lOR0xFX1BBVEhfQUNMICAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIFRPTU9ZT19UWVBFX0RPVUJMRV9QQVRIX0FDTCAgICAgICAgICAgICAgICAgMQotCi0vKiBJbmRleCBudW1iZXJzIGZvciBGaWxlIENvbnRyb2xzLiAqLwotCi0vKgotICogVFlQRV9SRUFEX1dSSVRFX0FDTCBpcyBzcGVjaWFsLiBUWVBFX1JFQURfV1JJVEVfQUNMIGlzIGF1dG9tYXRpY2FsbHkgc2V0Ci0gKiBpZiBib3RoIFRZUEVfUkVBRF9BQ0wgYW5kIFRZUEVfV1JJVEVfQUNMIGFyZSBzZXQuIEJvdGggVFlQRV9SRUFEX0FDTCBhbmQKLSAqIFRZUEVfV1JJVEVfQUNMIGFyZSBhdXRvbWF0aWNhbGx5IHNldCBpZiBUWVBFX1JFQURfV1JJVEVfQUNMIGlzIHNldC4KLSAqIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIGVpdGhlciBUWVBFX1JFQURfQUNMIG9yCi0gKiBUWVBFX1dSSVRFX0FDTCBpcyBjbGVhcmVkLiBCb3RoIFRZUEVfUkVBRF9BQ0wgYW5kIFRZUEVfV1JJVEVfQUNMIGFyZQotICogYXV0b21hdGljYWxseSBjbGVhcmVkIGlmIFRZUEVfUkVBRF9XUklURV9BQ0wgaXMgY2xlYXJlZC4KLSAqLwotCi0jZGVmaW5lIFRPTU9ZT19UWVBFX1JFQURfV1JJVEVfQUNMICAgIDAKLSNkZWZpbmUgVE9NT1lPX1RZUEVfRVhFQ1VURV9BQ0wgICAgICAgMQotI2RlZmluZSBUT01PWU9fVFlQRV9SRUFEX0FDTCAgICAgICAgICAyCi0jZGVmaW5lIFRPTU9ZT19UWVBFX1dSSVRFX0FDTCAgICAgICAgIDMKLSNkZWZpbmUgVE9NT1lPX1RZUEVfQ1JFQVRFX0FDTCAgICAgICAgNAotI2RlZmluZSBUT01PWU9fVFlQRV9VTkxJTktfQUNMICAgICAgICA1Ci0jZGVmaW5lIFRPTU9ZT19UWVBFX01LRElSX0FDTCAgICAgICAgIDYKLSNkZWZpbmUgVE9NT1lPX1RZUEVfUk1ESVJfQUNMICAgICAgICAgNwotI2RlZmluZSBUT01PWU9fVFlQRV9NS0ZJRk9fQUNMICAgICAgICA4Ci0jZGVmaW5lIFRPTU9ZT19UWVBFX01LU09DS19BQ0wgICAgICAgIDkKLSNkZWZpbmUgVE9NT1lPX1RZUEVfTUtCTE9DS19BQ0wgICAgICAxMAotI2RlZmluZSBUT01PWU9fVFlQRV9NS0NIQVJfQUNMICAgICAgIDExCi0jZGVmaW5lIFRPTU9ZT19UWVBFX1RSVU5DQVRFX0FDTCAgICAgMTIKLSNkZWZpbmUgVE9NT1lPX1RZUEVfU1lNTElOS19BQ0wgICAgICAxMwotI2RlZmluZSBUT01PWU9fVFlQRV9SRVdSSVRFX0FDTCAgICAgIDE0Ci0jZGVmaW5lIFRPTU9ZT19NQVhfU0lOR0xFX1BBVEhfT1BFUkFUSU9OIDE1Ci0KLSNkZWZpbmUgVE9NT1lPX1RZUEVfTElOS19BQ0wgICAgICAgICAwCi0jZGVmaW5lIFRPTU9ZT19UWVBFX1JFTkFNRV9BQ0wgICAgICAgMQotI2RlZmluZSBUT01PWU9fTUFYX0RPVUJMRV9QQVRIX09QRVJBVElPTiAyCi0KLSNkZWZpbmUgVE9NT1lPX0RPTUFJTlBPTElDWSAgICAgICAgICAwCi0jZGVmaW5lIFRPTU9ZT19FWENFUFRJT05QT0xJQ1kgICAgICAgMQotI2RlZmluZSBUT01PWU9fRE9NQUlOX1NUQVRVUyAgICAgICAgIDIKLSNkZWZpbmUgVE9NT1lPX1BST0NFU1NfU1RBVFVTICAgICAgICAzCi0jZGVmaW5lIFRPTU9ZT19NRU1JTkZPICAgICAgICAgICAgICAgNAotI2RlZmluZSBUT01PWU9fU0VMRkRPTUFJTiAgICAgICAgICAgIDUKLSNkZWZpbmUgVE9NT1lPX1ZFUlNJT04gICAgICAgICAgICAgICA2Ci0jZGVmaW5lIFRPTU9ZT19QUk9GSUxFICAgICAgICAgICAgICAgNwotI2RlZmluZSBUT01PWU9fTUFOQUdFUiAgICAgICAgICAgICAgIDgKLQotZXh0ZXJuIHN0cnVjdCB0b21veW9fZG9tYWluX2luZm8gdG9tb3lvX2tlcm5lbF9kb21haW47Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX2RvbWFpbih2b2lkKQotewotCXJldHVybiBjdXJyZW50X2NyZWQoKS0+c2VjdXJpdHk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RydWN0IHRvbW95b19kb21haW5faW5mbyAqdG9tb3lvX3JlYWxfZG9tYWluKHN0cnVjdCB0YXNrX3N0cnVjdAotCQkJCQkJCSAgICAqdGFzaykKLXsKLQlyZXR1cm4gdGFza19jcmVkX3h4eCh0YXNrLCBzZWN1cml0eSk7Ci19Ci0KLSNlbmRpZiAvKiAhZGVmaW5lZChfU0VDVVJJVFlfVE9NT1lPX1RPTU9ZT19IKSAqLwpkaWZmIC0tZ2l0IGEvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jIGIvc291bmQvYXJtL3B4YTJ4eC1hYzk3LWxpYi5jCmluZGV4IDZmZGNhOTcuLjg4ZWVjMzggMTAwNjQ0Ci0tLSBhL3NvdW5kL2FybS9weGEyeHgtYWM5Ny1saWIuYworKysgYi9zb3VuZC9hcm0vcHhhMnh4LWFjOTctbGliLmMKQEAgLTIyLDcgKzIyLDYgQEAKIAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxtYWNoL3JlZ3MtYWM5Ny5oPgotI2luY2x1ZGUgPG1hY2gvcHhhMnh4LWdwaW8uaD4KICNpbmNsdWRlIDxtYWNoL2F1ZGlvLmg+CiAKIHN0YXRpYyBERUZJTkVfTVVURVgoY2FyX211dGV4KTsKQEAgLTMyLDYgKzMxLDggQEAKIHN0YXRpYyBzdHJ1Y3QgY2xrICphYzk3Y29uZl9jbGs7CiBzdGF0aWMgaW50IHJlc2V0X2dwaW87CiAKK2V4dGVybiB2b2lkIHB4YTI3eF9hc3NlcnRfYWM5N3Jlc2V0KGludCByZXNldF9ncGlvLCBpbnQgb24pOworCiAvKgogICogQmV3YXJlIFBYQTI3eCBidWdzOgogICoKQEAgLTQyLDQ1ICs0Myw2IEBACiAgKiAxIGppZmZ5IHRpbWVvdXQgaWYgaW50ZXJydXB0IG5ldmVyIGNvbWVzKS4KICAqLwogCi1lbnVtIHsKLQlSRVNFVEdQSU9fRk9SQ0VfSElHSCwKLQlSRVNFVEdQSU9fRk9SQ0VfTE9XLAotCVJFU0VUR1BJT19OT1JNQUxfQUxURlVOQwotfTsKLQotLyoqCi0gKiBzZXRfcmVzZXRncGlvX21vZGUgLSBjb21wdXRlcyBhbmQgc2V0cyB0aGUgQUM5N19SRVNFVCBncGlvIG1vZGUgb24gUFhBCi0gKiBAbW9kZTogY2hvc2VuIGFjdGlvbgotICoKLSAqIEFzIHRoZSBQWEEyN3ggQ1BVcyBzdWZmZXIgZnJvbSBhIEFDOTcgYnVnLCBhIG1hbnVhbCBjb250cm9sIG9mIHRoZSByZXNldCBsaW5lCi0gKiBtdXN0IGJlIGRvbmUgdG8gaW5zdXJlIHByb3BlciB3b3JrIG9mIEFDOTcgcmVzZXQgbGluZS4gIFRoaXMgZnVuY3Rpb24KLSAqIGNvbXB1dGVzIHRoZSBjb3JyZWN0IGdwaW9fbW9kZSBmb3IgZnVydGhlciB1c2UgYnkgcmVzZXQgZnVuY3Rpb25zLCBhbmQKLSAqIGFwcGxpZWQgdGhlIGNoYW5nZSB0aHJvdWdoIHB4YV9ncGlvX21vZGUuCi0gKi8KLXN0YXRpYyB2b2lkIHNldF9yZXNldGdwaW9fbW9kZShpbnQgcmVzZXRncGlvX2FjdGlvbikKLXsKLQlpbnQgbW9kZSA9IDA7Ci0KLQlpZiAocmVzZXRfZ3BpbykKLQkJc3dpdGNoIChyZXNldGdwaW9fYWN0aW9uKSB7Ci0JCWNhc2UgUkVTRVRHUElPX05PUk1BTF9BTFRGVU5DOgotCQkJaWYgKHJlc2V0X2dwaW8gPT0gMTEzKQotCQkJCW1vZGUgPSAxMTMgfCBHUElPX0FMVF9GTl8yX09VVDsKLQkJCWlmIChyZXNldF9ncGlvID09IDk1KQotCQkJCW1vZGUgPSA5NSB8IEdQSU9fQUxUX0ZOXzFfT1VUOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkVTRVRHUElPX0ZPUkNFX0xPVzoKLQkJCW1vZGUgPSByZXNldF9ncGlvIHwgR1BJT19PVVQgfCBHUElPX0RGTFRfTE9XOwotCQkJYnJlYWs7Ci0JCWNhc2UgUkVTRVRHUElPX0ZPUkNFX0hJR0g6Ci0JCQltb2RlID0gcmVzZXRfZ3BpbyB8IEdQSU9fT1VUIHwgR1BJT19ERkxUX0hJR0g7Ci0JCQlicmVhazsKLQkJfTsKLQotCWlmIChtb2RlKQotCQlweGFfZ3Bpb19tb2RlKG1vZGUpOwotfQotCiB1bnNpZ25lZCBzaG9ydCBweGEyeHhfYWM5N19yZWFkKHN0cnVjdCBzbmRfYWM5NyAqYWM5NywgdW5zaWduZWQgc2hvcnQgcmVnKQogewogCXVuc2lnbmVkIHNob3J0IHZhbCA9IC0xOwpAQCAtMTc0LDEyICsxMzYsMTEgQEAKIHsKIAlnc3JfYml0cyA9IDA7CiAKLQkvKiB3YXJtIHJlc2V0IGJyb2tlbiBvbiBCdWx2ZXJkZSwKLQkgICBzbyBtYW51YWxseSBrZWVwIEFDOTcgcmVzZXQgaGlnaCAqLwotCXNldF9yZXNldGdwaW9fbW9kZShSRVNFVEdQSU9fRk9SQ0VfSElHSCk7CisJLyogd2FybSByZXNldCBicm9rZW4gb24gQnVsdmVyZGUsIHNvIG1hbnVhbGx5IGtlZXAgQUM5NyByZXNldCBoaWdoICovCisJcHhhMjd4X2Fzc2VydF9hYzk3cmVzZXQocmVzZXRfZ3BpbywgMSk7CiAJdWRlbGF5KDEwKTsKIAlHQ1IgfD0gR0NSX1dBUk1fUlNUOwotCXNldF9yZXNldGdwaW9fbW9kZShSRVNFVEdQSU9fTk9STUFMX0FMVEZVTkMpOworCXB4YTI3eF9hc3NlcnRfYWM5N3Jlc2V0KHJlc2V0X2dwaW8sIDApOwogCXVkZWxheSg1MDApOwogfQogCkBAIC0zNDUsMTYgKzMwNiw2IEBACiAKIGludCBweGEyeHhfYWM5N19od19yZXN1bWUodm9pZCkKIHsKLQlpZiAoY3B1X2lzX3B4YTI1eCgpIHx8IGNwdV9pc19weGEyN3goKSkgewotCQlweGFfZ3Bpb19tb2RlKEdQSU8zMV9TWU5DX0FDOTdfTUQpOwotCQlweGFfZ3Bpb19tb2RlKEdQSU8zMF9TREFUQV9PVVRfQUM5N19NRCk7Ci0JCXB4YV9ncGlvX21vZGUoR1BJTzI4X0JJVENMS19BQzk3X01EKTsKLQkJcHhhX2dwaW9fbW9kZShHUElPMjlfU0RBVEFfSU5fQUM5N19NRCk7Ci0JfQotCWlmIChjcHVfaXNfcHhhMjd4KCkpIHsKLQkJLyogVXNlIEdQSU8gMTEzIG9yIDk1IGFzIEFDOTcgUmVzZXQgb24gQnVsdmVyZGUgKi8KLQkJc2V0X3Jlc2V0Z3Bpb19tb2RlKFJFU0VUR1BJT19OT1JNQUxfQUxURlVOQyk7Ci0JfQogCWNsa19lbmFibGUoYWM5N19jbGspOwogCXJldHVybiAwOwogfQpAQCAtMzg2LDE2ICszMzcsOSBAQAogCQkJcmVzZXRfZ3BpbyA9IDExMzsKIAl9CiAKLQlpZiAoY3B1X2lzX3B4YTI1eCgpIHx8IGNwdV9pc19weGEyN3goKSkgewotCQlweGFfZ3Bpb19tb2RlKEdQSU8zMV9TWU5DX0FDOTdfTUQpOwotCQlweGFfZ3Bpb19tb2RlKEdQSU8zMF9TREFUQV9PVVRfQUM5N19NRCk7Ci0JCXB4YV9ncGlvX21vZGUoR1BJTzI4X0JJVENMS19BQzk3X01EKTsKLQkJcHhhX2dwaW9fbW9kZShHUElPMjlfU0RBVEFfSU5fQUM5N19NRCk7Ci0JfQotCiAJaWYgKGNwdV9pc19weGEyN3goKSkgewogCQkvKiBVc2UgR1BJTyAxMTMgYXMgQUM5NyBSZXNldCBvbiBCdWx2ZXJkZSAqLwotCQlzZXRfcmVzZXRncGlvX21vZGUoUkVTRVRHUElPX05PUk1BTF9BTFRGVU5DKTsKKwkJcHhhMjd4X2Fzc2VydF9hYzk3cmVzZXQocmVzZXRfZ3BpbywgMCk7CiAJCWFjOTdjb25mX2NsayA9IGNsa19nZXQoJmRldi0+ZGV2LCAiQUM5N0NPTkZDTEsiKTsKIAkJaWYgKElTX0VSUihhYzk3Y29uZl9jbGspKSB7CiAJCQlyZXQgPSBQVFJfRVJSKGFjOTdjb25mX2Nsayk7CmRpZmYgLS1naXQgYS9zb3VuZC9jb3JlL3RpbWVyLmMgYi9zb3VuZC9jb3JlL3RpbWVyLmMKaW5kZXggOGY4YjE3YS4uNzM5NDM2NSAxMDA2NDQKLS0tIGEvc291bmQvY29yZS90aW1lci5jCisrKyBiL3NvdW5kL2NvcmUvdGltZXIuYwpAQCAtMzkzLDcgKzM5Myw3IEBACiAJICAgIGV2ZW50ID09IFNORFJWX1RJTUVSX0VWRU5UX0NPTlRJTlVFKQogCQlyZXNvbHV0aW9uID0gc25kX3RpbWVyX3Jlc29sdXRpb24odGkpOwogCWlmICh0aS0+Y2NhbGxiYWNrKQotCQl0aS0+Y2NhbGxiYWNrKHRpLCBTTkRSVl9USU1FUl9FVkVOVF9TVEFSVCwgJnRzdGFtcCwgcmVzb2x1dGlvbik7CisJCXRpLT5jY2FsbGJhY2sodGksIGV2ZW50LCAmdHN0YW1wLCByZXNvbHV0aW9uKTsKIAlpZiAodGktPmZsYWdzICYgU05EUlZfVElNRVJfSUZMR19TTEFWRSkKIAkJcmV0dXJuOwogCXRpbWVyID0gdGktPnRpbWVyOwpkaWZmIC0tZ2l0IGEvc291bmQvaXNhL29wdGk5eHgvbWlyby5jIGIvc291bmQvaXNhL29wdGk5eHgvbWlyby5jCmluZGV4IGI4NjVlNDUuLjU5MTM3MTcgMTAwNjQ0Ci0tLSBhL3NvdW5kL2lzYS9vcHRpOXh4L21pcm8uYworKysgYi9zb3VuZC9pc2Evb3B0aTl4eC9taXJvLmMKQEAgLTE1NTgsNyArMTU1OCw3IEBACiAKIAllcnIgPSBwbnBfYWN0aXZhdGVfZGV2KGRldm1jKTsKIAlpZiAoZXJyIDwgMCkgewotCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJPUEwgc3ludGcgcG5wIGNvbmZpZ3VyZSBmYWlsdXJlOiAlZFxuIiwKKwkJc25kX3ByaW50ayhLRVJOX0VSUiAiTUMgcG5wIGNvbmZpZ3VyZSBmYWlsdXJlOiAlZFxuIiwKIAkJCQkgICAgZXJyKTsKIAkJcmV0dXJuIGVycjsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jIGIvc291bmQvaXNhL29wdGk5eHgvb3B0aTkyeC1hZDE4NDguYwppbmRleCBhNGFmNTNiLi5iZWNkOTBkIDEwMDY0NAotLS0gYS9zb3VuZC9pc2Evb3B0aTl4eC9vcHRpOTJ4LWFkMTg0OC5jCisrKyBiL3NvdW5kL2lzYS9vcHRpOXh4L29wdGk5MngtYWQxODQ4LmMKQEAgLTE0NCwxMiArMTQ0LDggQEAKIAogCXNwaW5sb2NrX3QgbG9jazsKIAorCWxvbmcgd3NzX2Jhc2U7CiAJaW50IGlycTsKLQotI2lmZGVmIENPTkZJR19QTlAKLQlzdHJ1Y3QgcG5wX2RldiAqZGV2OwotCXN0cnVjdCBwbnBfZGV2ICpkZXZtcHU7Ci0jZW5kaWYJLyogQ09ORklHX1BOUCAqLwogfTsKIAogc3RhdGljIGludCBzbmRfb3B0aTl4eF9wbnBfaXNfcHJvYmVkOwpAQCAtMTU5LDEyICsxNTUsMTcgQEAKIHN0YXRpYyBzdHJ1Y3QgcG5wX2NhcmRfZGV2aWNlX2lkIHNuZF9vcHRpOXh4X3BucGlkc1tdID0gewogI2lmbmRlZiBPUFRpOTNYCiAJLyogT1BUaSA4MkM5MjQgKi8KLQl7IC5pZCA9ICJPUFQwOTI0IiwgLmRldnMgPSB7IHsgIk9QVDAwMDAiIH0sIHsgIk9QVDAwMDIiIH0gfSwgLmRyaXZlcl9kYXRhID0gMHgwOTI0IH0sCisJeyAuaWQgPSAiT1BUMDkyNCIsCisJICAuZGV2cyA9IHsgeyAiT1BUMDAwMCIgfSwgeyAiT1BUMDAwMiIgfSwgeyAiT1BUMDAwNSIgfSB9LAorCSAgLmRyaXZlcl9kYXRhID0gMHgwOTI0IH0sCiAJLyogT1BUaSA4MkM5MjUgKi8KLQl7IC5pZCA9ICJPUFQwOTI1IiwgLmRldnMgPSB7IHsgIk9QVDkyNTAiIH0sIHsgIk9QVDAwMDIiIH0gfSwgLmRyaXZlcl9kYXRhID0gMHgwOTI1IH0sCisJeyAuaWQgPSAiT1BUMDkyNSIsCisJICAuZGV2cyA9IHsgeyAiT1BUOTI1MCIgfSwgeyAiT1BUMDAwMiIgfSwgeyAiT1BUMDAwNSIgfSB9LAorCSAgLmRyaXZlcl9kYXRhID0gMHgwOTI1IH0sCiAjZWxzZQogCS8qIE9QVGkgODJDOTMxLzMgKi8KLQl7IC5pZCA9ICJPUFQwOTMxIiwgLmRldnMgPSB7IHsgIk9QVDkzMTAiIH0sIHsgIk9QVDAwMDIiIH0gfSwgLmRyaXZlcl9kYXRhID0gMHgwOTMxIH0sCisJeyAuaWQgPSAiT1BUMDkzMSIsIC5kZXZzID0geyB7ICJPUFQ5MzEwIiB9LCB7ICJPUFQwMDAyIiB9IH0sCisJICAuZHJpdmVyX2RhdGEgPSAweDA5MzEgfSwKICNlbmRpZgkvKiBPUFRpOTNYICovCiAJeyAuaWQgPSAiIiB9CiB9OwpAQCAtMjA3LDI0ICsyMDgsMzQgQEAKIAljaGlwLT5oYXJkd2FyZSA9IGhhcmR3YXJlOwogCXN0cmNweShjaGlwLT5uYW1lLCBzbmRfb3B0aTl4eF9uYW1lc1toYXJkd2FyZV0pOwogCi0JY2hpcC0+bWNfYmFzZV9zaXplID0gb3B0aTl4eF9tY19zaXplW2hhcmR3YXJlXTsgIAotCiAJc3Bpbl9sb2NrX2luaXQoJmNoaXAtPmxvY2spOwogCiAJY2hpcC0+aXJxID0gLTE7CiAKKyNpZm5kZWYgT1BUaTkzWAorI2lmZGVmIENPTkZJR19QTlAKKwlpZiAoaXNhcG5wICYmIGNoaXAtPm1jX2Jhc2UpCisJCS8qIFBuUCByZXNvdXJjZSBnaXZlcyB0aGUgbGVhc3QgMTAgYml0cyAqLworCQljaGlwLT5tY19iYXNlIHw9IDB4YzAwOworI2VuZGlmCS8qIENPTkZJR19QTlAgKi8KKwllbHNlIHsKKwkJY2hpcC0+bWNfYmFzZSA9IDB4ZjhjOworCQljaGlwLT5tY19iYXNlX3NpemUgPSBvcHRpOXh4X21jX3NpemVbaGFyZHdhcmVdOworCX0KKyNlbHNlCisJCWNoaXAtPm1jX2Jhc2Vfc2l6ZSA9IG9wdGk5eHhfbWNfc2l6ZVtoYXJkd2FyZV07CisjZW5kaWYKKwogCXN3aXRjaCAoaGFyZHdhcmUpIHsKICNpZm5kZWYgT1BUaTkzWAogCWNhc2UgT1BUaTlYWF9IV184MkM5Mjg6CiAJY2FzZSBPUFRpOVhYX0hXXzgyQzkyOToKLQkJY2hpcC0+bWNfYmFzZSA9IDB4ZjhjOwogCQljaGlwLT5wYXNzd29yZCA9IChoYXJkd2FyZSA9PSBPUFRpOVhYX0hXXzgyQzkyOCkgPyAweGUyIDogMHhlMzsKIAkJY2hpcC0+cHdkX3JlZyA9IDM7CiAJCWJyZWFrOwogCiAJY2FzZSBPUFRpOVhYX0hXXzgyQzkyNDoKIAljYXNlIE9QVGk5WFhfSFdfODJDOTI1OgotCQljaGlwLT5tY19iYXNlID0gMHhmOGM7CiAJCWNoaXAtPnBhc3N3b3JkID0gMHhlNTsKIAkJY2hpcC0+cHdkX3JlZyA9IDM7CiAJCWJyZWFrOwpAQCAtMjkyLDcgKzMwMyw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY2hpcC0+bG9jaywgZmxhZ3MpOwogCXJldHVybiByZXR2YWw7CiB9Ci0JCisKIHN0YXRpYyB2b2lkIHNuZF9vcHRpOXh4X3dyaXRlKHN0cnVjdCBzbmRfb3B0aTl4eCAqY2hpcCwgdW5zaWduZWQgY2hhciByZWcsCiAJCQkgICAgICB1bnNpZ25lZCBjaGFyIHZhbHVlKQogewpAQCAtMzQxLDcgKzM1Miw3IEBACiAKIAogc3RhdGljIGludCBfX2RldmluaXQgc25kX29wdGk5eHhfY29uZmlndXJlKHN0cnVjdCBzbmRfb3B0aTl4eCAqY2hpcCwKLQkJCQkJICAgbG9uZyB3c3NfYmFzZSwKKwkJCQkJICAgbG9uZyBwb3J0LAogCQkJCQkgICBpbnQgaXJxLCBpbnQgZG1hMSwgaW50IGRtYTIsCiAJCQkJCSAgIGxvbmcgbXB1X3BvcnQsIGludCBtcHVfaXJxKQogewpAQCAtMzU0LDE2ICszNjUsMjMgQEAKIAlzd2l0Y2ggKGNoaXAtPmhhcmR3YXJlKSB7CiAjaWZuZGVmIE9QVGk5M1gKIAljYXNlIE9QVGk5WFhfSFdfODJDOTI0OgorCQkvKiBvcHRpIDkyOSBtb2RlICg/KSwgT1BMMyBjbG9jayBvdXRwdXQsIGF1ZGlvIGVuYWJsZSAqLwogCQlzbmRfb3B0aTl4eF93cml0ZV9tYXNrKGNoaXAsIE9QVGk5WFhfTUNfUkVHKDQpLCAweGYwLCAweGZjKTsKKwkJLyogZW5hYmxlIHdhdmUgYXVkaW8gKi8KIAkJc25kX29wdGk5eHhfd3JpdGVfbWFzayhjaGlwLCBPUFRpOVhYX01DX1JFRyg2KSwgMHgwMiwgMHgwMik7CiAKIAljYXNlIE9QVGk5WFhfSFdfODJDOTI1OgorCQkvKiBlbmFibGUgV1NTIG1vZGUgKi8KIAkJc25kX29wdGk5eHhfd3JpdGVfbWFzayhjaGlwLCBPUFRpOVhYX01DX1JFRygxKSwgMHg4MCwgMHg4MCk7CisJCS8qIE9QTDMgRk0gc3ludGhlc2lzICovCiAJCXNuZF9vcHRpOXh4X3dyaXRlX21hc2soY2hpcCwgT1BUaTlYWF9NQ19SRUcoMiksIDB4MDAsIDB4MjApOworCQkvKiBkaXNhYmxlIFNvdW5kIEJsYXN0ZXIgSVJRIGFuZCBETUEgKi8KIAkJc25kX29wdGk5eHhfd3JpdGVfbWFzayhjaGlwLCBPUFRpOVhYX01DX1JFRygzKSwgMHhmMCwgMHhmZik7CiAjaWZkZWYgQ1M0MjMxCisJCS8qIGNzNDIzMS80MjQ4IGZpeCBlbmFibGVkICovCiAJCXNuZF9vcHRpOXh4X3dyaXRlX21hc2soY2hpcCwgT1BUaTlYWF9NQ19SRUcoNSksIDB4MDIsIDB4MDIpOwogI2Vsc2UKKwkJLyogY3M0MjMxLzQyNDggZml4IGRpc2FibGVkICovCiAJCXNuZF9vcHRpOXh4X3dyaXRlX21hc2soY2hpcCwgT1BUaTlYWF9NQ19SRUcoNSksIDB4MDAsIDB4MDIpOwogI2VuZGlmCS8qIENTNDIzMSAqLwogCQlicmVhazsKQEAgLTQxMSwyMSArNDI5LDI2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXN3aXRjaCAod3NzX2Jhc2UpIHsKLQljYXNlIDB4NTMwOgorCS8qIFBuUCByZXNvdXJjZSBzYXlzIGl0IGRlY29kZXMgb25seSAxMCBiaXRzIG9mIGFkZHJlc3MgKi8KKwlzd2l0Y2ggKHBvcnQgJiAweDNmZikgeworCWNhc2UgMHgxMzA6CisJCWNoaXAtPndzc19iYXNlID0gMHg1MzA7CiAJCXdzc19iYXNlX2JpdHMgPSAweDAwOwogCQlicmVhazsKLQljYXNlIDB4NjA0OgorCWNhc2UgMHgyMDQ6CisJCWNoaXAtPndzc19iYXNlID0gMHg2MDQ7CiAJCXdzc19iYXNlX2JpdHMgPSAweDAzOwogCQlicmVhazsKLQljYXNlIDB4ZTgwOgorCWNhc2UgMHgyODA6CisJCWNoaXAtPndzc19iYXNlID0gMHhlODA7CiAJCXdzc19iYXNlX2JpdHMgPSAweDAxOwogCQlicmVhazsKLQljYXNlIDB4ZjQwOgorCWNhc2UgMHgzNDA6CisJCWNoaXAtPndzc19iYXNlID0gMHhmNDA7CiAJCXdzc19iYXNlX2JpdHMgPSAweDAyOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiV1NTIHBvcnQgMHglbHggbm90IHZhbGlkXG4iLCB3c3NfYmFzZSk7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJXU1MgcG9ydCAweCVseCBub3QgdmFsaWRcbiIsIHBvcnQpOwogCQlnb3RvIF9fc2tpcF9iYXNlOwogCX0KIAlzbmRfb3B0aTl4eF93cml0ZV9tYXNrKGNoaXAsIE9QVGk5WFhfTUNfUkVHKDEpLCB3c3NfYmFzZV9iaXRzIDw8IDQsIDB4MzApOwpAQCAtNDg3LDcgKzUxMCw3IEBACiAjZW5kaWYJLyogQ1M0MjMxIHx8IE9QVGk5M1ggKi8KIAogI2lmbmRlZiBPUFRpOTNYCi0JIG91dGIoaXJxX2JpdHMgPDwgMyB8IGRtYV9iaXRzLCB3c3NfYmFzZSk7CisJIG91dGIoaXJxX2JpdHMgPDwgMyB8IGRtYV9iaXRzLCBjaGlwLT53c3NfYmFzZSk7CiAjZWxzZSAvKiBPUFRpOTNYICovCiAJc25kX29wdGk5eHhfd3JpdGUoY2hpcCwgT1BUaTlYWF9NQ19SRUcoMyksIChpcnFfYml0cyA8PCAzIHwgZG1hX2JpdHMpKTsKICNlbmRpZiAvKiBPUFRpOTNYICovCkBAIC03MjksMTUgKzc1MiwxNSBAQAogewogCXN0cnVjdCBwbnBfZGV2ICpwZGV2OwogCWludCBlcnI7CisJc3RydWN0IHBucF9kZXYgKmRldm1wdTsKKyNpZm5kZWYgT1BUaTkzWAorCXN0cnVjdCBwbnBfZGV2ICpkZXZtYzsKKyNlbmRpZgogCi0JY2hpcC0+ZGV2ID0gcG5wX3JlcXVlc3RfY2FyZF9kZXZpY2UoY2FyZCwgcGlkLT5kZXZzWzBdLmlkLCBOVUxMKTsKLQlpZiAoY2hpcC0+ZGV2ID09IE5VTEwpCisJcGRldiA9IHBucF9yZXF1ZXN0X2NhcmRfZGV2aWNlKGNhcmQsIHBpZC0+ZGV2c1swXS5pZCwgTlVMTCk7CisJaWYgKHBkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCWNoaXAtPmRldm1wdSA9IHBucF9yZXF1ZXN0X2NhcmRfZGV2aWNlKGNhcmQsIHBpZC0+ZGV2c1sxXS5pZCwgTlVMTCk7Ci0KLQlwZGV2ID0gY2hpcC0+ZGV2OwotCiAJZXJyID0gcG5wX2FjdGl2YXRlX2RldihwZGV2KTsKIAlpZiAoZXJyIDwgMCkgewogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJBVURJTyBwbnAgY29uZmlndXJlIGZhaWx1cmU6ICVkXG4iLCBlcnIpOwpAQCAtNzUwLDkgKzc3MywyNCBAQAogCWNoaXAtPm1jX2luZGlyX2luZGV4ID0gcG5wX3BvcnRfc3RhcnQocGRldiwgMykgKyAyOwogCWNoaXAtPm1jX2luZGlyX3NpemUgPSBwbnBfcG9ydF9sZW4ocGRldiwgMykgLSAyOwogI2Vsc2UKLQlpZiAocGlkLT5kcml2ZXJfZGF0YSAhPSAweDA5MjQpCi0JCXBvcnQgPSBwbnBfcG9ydF9zdGFydChwZGV2LCAxKTsKKwlkZXZtYyA9IHBucF9yZXF1ZXN0X2NhcmRfZGV2aWNlKGNhcmQsIHBpZC0+ZGV2c1syXS5pZCwgTlVMTCk7CisJaWYgKGRldm1jID09IE5VTEwpCisJCXJldHVybiAtRUJVU1k7CisKKwllcnIgPSBwbnBfYWN0aXZhdGVfZGV2KGRldm1jKTsKKwlpZiAoZXJyIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJNQyBwbnAgY29uZmlndXJlIGZhaWx1cmU6ICVkXG4iLCBlcnIpOworCQlyZXR1cm4gZXJyOworCX0KKworCXBvcnQgPSBwbnBfcG9ydF9zdGFydChwZGV2LCAxKTsKIAlmbV9wb3J0ID0gcG5wX3BvcnRfc3RhcnQocGRldiwgMikgKyA4OworCS8qCisJICogVGhlIE1DKDApIGlzIG5ldmVyIGFjY2Vzc2VkIGFuZCBjYXJkIGRvZXMgbm90CisJICogaW5jbHVkZSBpdCBpbiB0aGUgUG5QIHJlc291cmNlIHJhbmdlLiBPUFRJOTN4IGluY2x1ZGUgaXQuCisJICovCisJY2hpcC0+bWNfYmFzZSA9IHBucF9wb3J0X3N0YXJ0KGRldm1jLCAwKSAtIDE7CisJY2hpcC0+bWNfYmFzZV9zaXplID0gcG5wX3BvcnRfbGVuKGRldm1jLCAwKSArIDE7CiAjZW5kaWYJLyogT1BUaTkzWCAqLwogCWlycSA9IHBucF9pcnEocGRldiwgMCk7CiAJZG1hMSA9IHBucF9kbWEocGRldiwgMCk7CkBAIC03NjAsMTYgKzc5OCwxNiBAQAogCWRtYTIgPSBwbnBfZG1hKHBkZXYsIDEpOwogI2VuZGlmCS8qIENTNDIzMSB8fCBPUFRpOTNYICovCiAKLQlwZGV2ID0gY2hpcC0+ZGV2bXB1OwotCWlmIChwZGV2ICYmIG1wdV9wb3J0ID4gMCkgewotCQllcnIgPSBwbnBfYWN0aXZhdGVfZGV2KHBkZXYpOworCWRldm1wdSA9IHBucF9yZXF1ZXN0X2NhcmRfZGV2aWNlKGNhcmQsIHBpZC0+ZGV2c1sxXS5pZCwgTlVMTCk7CisKKwlpZiAoZGV2bXB1ICYmIG1wdV9wb3J0ID4gMCkgeworCQllcnIgPSBwbnBfYWN0aXZhdGVfZGV2KGRldm1wdSk7CiAJCWlmIChlcnIgPCAwKSB7Ci0JCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJBVURJTyBwbnAgY29uZmlndXJlIGZhaWx1cmVcbiIpOworCQkJc25kX3ByaW50ayhLRVJOX0VSUiAiTVBVNDAxIHBucCBjb25maWd1cmUgZmFpbHVyZVxuIik7CiAJCQltcHVfcG9ydCA9IC0xOwotCQkJY2hpcC0+ZGV2bXB1ID0gTlVMTDsKIAkJfSBlbHNlIHsKLQkJCW1wdV9wb3J0ID0gcG5wX3BvcnRfc3RhcnQocGRldiwgMCk7Ci0JCQltcHVfaXJxID0gcG5wX2lycShwZGV2LCAwKTsKKwkJCW1wdV9wb3J0ID0gcG5wX3BvcnRfc3RhcnQoZGV2bXB1LCAwKTsKKwkJCW1wdV9pcnEgPSBwbnBfaXJxKGRldm1wdSwgMCk7CiAJCX0KIAl9CiAJcmV0dXJuIHBpZC0+ZHJpdmVyX2RhdGE7CkBAIC04MjQsNyArODYyLDcgQEAKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAotCWVycm9yID0gc25kX3dzc19jcmVhdGUoY2FyZCwgcG9ydCArIDQsIC0xLCBpcnEsIGRtYTEsIHhkbWEyLAorCWVycm9yID0gc25kX3dzc19jcmVhdGUoY2FyZCwgY2hpcC0+d3NzX2Jhc2UgKyA0LCAtMSwgaXJxLCBkbWExLCB4ZG1hMiwKICNpZmRlZiBPUFRpOTNYCiAJCQkgICAgICAgV1NTX0hXX09QVEk5M1gsIFdTU19IV1NIQVJFX0lSUSwKICNlbHNlCkBAIC04NjUsMTAgKzkwMywxMSBAQAogCXNwcmludGYoY2FyZC0+c2hvcnRuYW1lLCAiT1BUaSAlcyIsIGNhcmQtPmRyaXZlcik7CiAjaWYgZGVmaW5lZChDUzQyMzEpIHx8IGRlZmluZWQoT1BUaTkzWCkKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMsICVzIGF0IDB4JWx4LCBpcnEgJWQsIGRtYSAlZCYlZCIsCi0JCWNhcmQtPnNob3J0bmFtZSwgcGNtLT5uYW1lLCBwb3J0ICsgNCwgaXJxLCBkbWExLCB4ZG1hMik7CisJCWNhcmQtPnNob3J0bmFtZSwgcGNtLT5uYW1lLAorCQljaGlwLT53c3NfYmFzZSArIDQsIGlycSwgZG1hMSwgeGRtYTIpOwogI2Vsc2UKIAlzcHJpbnRmKGNhcmQtPmxvbmduYW1lLCAiJXMsICVzIGF0IDB4JWx4LCBpcnEgJWQsIGRtYSAlZCIsCi0JCWNhcmQtPnNob3J0bmFtZSwgcGNtLT5uYW1lLCBwb3J0ICsgNCwgaXJxLCBkbWExKTsKKwkJY2FyZC0+c2hvcnRuYW1lLCBwY20tPm5hbWUsIGNoaXAtPndzc19iYXNlICsgNCwgaXJxLCBkbWExKTsKICNlbmRpZgkvKiBDUzQyMzEgfHwgT1BUaTkzWCAqLwogCiAJaWYgKG1wdV9wb3J0IDw9IDAgfHwgbXB1X3BvcnQgPT0gU05EUlZfQVVUT19QT1JUKQpAQCAtMTA2Miw5ICsxMTAxLDYgQEAKIAkJc25kX2NhcmRfZnJlZShjYXJkKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KLQlpZiAoaHcgPD0gT1BUaTlYWF9IV184MkM5MzApCi0JCWNoaXAtPm1jX2Jhc2UgLT0gMHg4MDsKLQogCWVycm9yID0gc25kX29wdGk5eHhfcmVhZF9jaGVjayhjaGlwKTsKIAlpZiAoZXJyb3IpIHsKIAkJc25kX3ByaW50ayhLRVJOX0VSUiAiT1BUSSBjaGlwIG5vdCBmb3VuZFxuIik7CmRpZmYgLS1naXQgYS9zb3VuZC9pc2Evc2IvamF6ejE2LmMgYi9zb3VuZC9pc2Evc2IvamF6ejE2LmMKaW5kZXggOGQyMWEzZi4uOGNjYmNkZCAxMDA2NDQKLS0tIGEvc291bmQvaXNhL3NiL2phenoxNi5jCisrKyBiL3NvdW5kL2lzYS9zYi9qYXp6MTYuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGxpbnV4L2lzYS5oPgogI2luY2x1ZGUgPHNvdW5kL2NvcmUuaD4KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9jb3Byb2MuaCBiL3NvdW5kL29zcy9jb3Byb2MuaAppbmRleCA3MzA2MzQ2Li43YmVjMjFiIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvY29wcm9jLmgKKysrIGIvc291bmQvb3NzL2NvcHJvYy5oCkBAIC00LDcgKzQsNyBAQAogICovCiAKIC8qCi0gKiBDb3Byb2Nlc3NvciBhY2Nlc3MgdHlwZXMgCisgKiBDb3Byb2Nlc3NvciBhY2Nlc3MgdHlwZXMKICAqLwogI2RlZmluZSBDT1BSX0NVU1RPTQkJMHgwMDAxCS8qIEN1c3RvbSBhcHBsaWNhdGlvbnMgKi8KICNkZWZpbmUgQ09QUl9NSURJCQkweDAwMDIJLyogTUlESSAoTVBVLTQwMSkgZW11bGF0aW9uICovCmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvdl9taWRpLmggYi9zb3VuZC9vc3Mvdl9taWRpLmgKaW5kZXggMWI4NmNiNC4uMDhlMjE4NSAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3ZfbWlkaS5oCisrKyBiL3NvdW5kL29zcy92X21pZGkuaApAQCAtMiw5ICsyLDkgQEAKIAkgICBpbnQgZGV2OwogCiAJLyogU3RhdGUgdmFyaWFibGVzICovCi0gCSAgIGludCBvcGVuZWQ7CisJICAgaW50IG9wZW5lZDsKIAkgICBzcGlubG9ja190IGxvY2s7Ci0JCisKIAkvKiBNSURJIGZpZWxkcyAqLwogCSAgIGludCBteV9taWRpZGV2OwogCSAgIGludCBwYWlyX21pZGlkZXY7CkBAIC0xMiw0ICsxMiwzIEBACiAJICAgaW50IGludHJfYWN0aXZlOwogCSAgIHZvaWQgKCptaWRpX2lucHV0X2ludHIpIChpbnQgZGV2LCB1bnNpZ25lZCBjaGFyIGRhdGEpOwogCX0gdm1pZGlfZGV2YzsKLQpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2hkYS9LY29uZmlnIGIvc291bmQvcGNpL2hkYS9LY29uZmlnCmluZGV4IDU1NmNmZjkuLjU2NzM0OGIgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvS2NvbmZpZworKysgYi9zb3VuZC9wY2kvaGRhL0tjb25maWcKQEAgLTE1Nyw3ICsxNTcsNyBAQAogCiBjb25maWcgU05EX0hEQV9FTEQKIAlkZWZfYm9vbCB5Ci0JZGVwZW5kcyBvbiBTTkRfSERBX0NPREVDX0lOVEVMSERNSQorCWRlcGVuZHMgb24gU05EX0hEQV9DT0RFQ19JTlRFTEhETUkgfHwgU05EX0hEQV9DT0RFQ19OVkhETUkKIAogY29uZmlnIFNORF9IREFfQ09ERUNfQ0lSUlVTCiAJYm9vbCAiQnVpbGQgQ2lycnVzIExvZ2ljIGNvZGVjIHN1cHBvcnQiCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL01ha2VmaWxlIGIvc291bmQvcGNpL2hkYS9NYWtlZmlsZQppbmRleCAzMTVhMWM0Li4yNGJjMTk1IDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL01ha2VmaWxlCisrKyBiL3NvdW5kL3BjaS9oZGEvTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiBzbmQtaGRhLWNvZGVjLXkgOj0gaGRhX2NvZGVjLm8KIHNuZC1oZGEtY29kZWMtJChDT05GSUdfU05EX0hEQV9HRU5FUklDKSArPSBoZGFfZ2VuZXJpYy5vCiBzbmQtaGRhLWNvZGVjLSQoQ09ORklHX1BST0NfRlMpICs9IGhkYV9wcm9jLm8KLSMgc25kLWhkYS1jb2RlYy0kKENPTkZJR19TTkRfSERBX0VMRCkgKz0gaGRhX2VsZC5vCitzbmQtaGRhLWNvZGVjLSQoQ09ORklHX1NORF9IREFfRUxEKSArPSBoZGFfZWxkLm8KIHNuZC1oZGEtY29kZWMtJChDT05GSUdfU05EX0hEQV9IV0RFUCkgKz0gaGRhX2h3ZGVwLm8KIHNuZC1oZGEtY29kZWMtJChDT05GSUdfU05EX0hEQV9JTlBVVF9CRUVQKSArPSBoZGFfYmVlcC5vCiAKQEAgLTE4LDcgKzE4LDcgQEAKIHNuZC1oZGEtY29kZWMtY29uZXhhbnQtb2JqcyA6PQlwYXRjaF9jb25leGFudC5vCiBzbmQtaGRhLWNvZGVjLXZpYS1vYmpzIDo9CXBhdGNoX3ZpYS5vCiBzbmQtaGRhLWNvZGVjLW52aGRtaS1vYmpzIDo9CXBhdGNoX252aGRtaS5vCi1zbmQtaGRhLWNvZGVjLWludGVsaGRtaS1vYmpzIDo9CXBhdGNoX2ludGVsaGRtaS5vIGhkYV9lbGQubworc25kLWhkYS1jb2RlYy1pbnRlbGhkbWktb2JqcyA6PQlwYXRjaF9pbnRlbGhkbWkubwogCiAjIGNvbW1vbiBkcml2ZXIKIG9iai0kKENPTkZJR19TTkRfSERBX0lOVEVMKSA6PSBzbmQtaGRhLWNvZGVjLm8KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMgYi9zb3VuZC9wY2kvaGRhL2hkYV9jb2RlYy5jCmluZGV4IDc2ZDNjNGMuLjViZDdjZjQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvaGRhX2NvZGVjLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfY29kZWMuYwpAQCAtOTc4LDggKzk3OCw5IEBACiAgKgogICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KICAqLwotaW50IC8qX19kZXZpbml0Ki8gc25kX2hkYV9jb2RlY19uZXcoc3RydWN0IGhkYV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGNvZGVjX2FkZHIsCi0JCQkJICAgIHN0cnVjdCBoZGFfY29kZWMgKipjb2RlY3ApCitpbnQgLypfX2RldmluaXQqLyBzbmRfaGRhX2NvZGVjX25ldyhzdHJ1Y3QgaGRhX2J1cyAqYnVzLAorCQkJCXVuc2lnbmVkIGludCBjb2RlY19hZGRyLAorCQkJCXN0cnVjdCBoZGFfY29kZWMgKipjb2RlY3ApCiB7CiAJc3RydWN0IGhkYV9jb2RlYyAqY29kZWM7CiAJY2hhciBjb21wb25lbnRbMzFdOwpAQCAtMTE4Niw3ICsxMTg3LDcgQEAKICAqLwogCiAvKiBGSVhNRTogbW9yZSBiZXR0ZXIgaGFzaCBrZXk/ICovCi0jZGVmaW5lIEhEQV9IQVNIX0tFWShuaWQsZGlyLGlkeCkgKHUzMikoKG5pZCkgKyAoKGlkeCkgPDwgMTYpICsgKChkaXIpIDw8IDI0KSkKKyNkZWZpbmUgSERBX0hBU0hfS0VZKG5pZCwgZGlyLCBpZHgpICh1MzIpKChuaWQpICsgKChpZHgpIDw8IDE2KSArICgoZGlyKSA8PCAyNCkpCiAjZGVmaW5lIEhEQV9IQVNIX1BJTkNBUF9LRVkobmlkKSAodTMyKSgobmlkKSArICgweDAyIDw8IDI0KSkKICNkZWZpbmUgSERBX0hBU0hfUEFSUENNX0tFWShuaWQpICh1MzIpKChuaWQpICsgKDB4MDMgPDwgMjQpKQogI2RlZmluZSBIREFfSEFTSF9QQVJTVFJfS0VZKG5pZCkgKHUzMikoKG5pZCkgKyAoMHgwNCA8PCAyNCkpCkBAIC0xMzU2LDcgKzEzNTcsOCBAQAogCWlmICghY29kZWMtPm5vX3RyaWdnZXJfc2Vuc2UpIHsKIAkJcGluY2FwID0gc25kX2hkYV9xdWVyeV9waW5fY2Fwcyhjb2RlYywgbmlkKTsKIAkJaWYgKHBpbmNhcCAmIEFDX1BJTkNBUF9UUklHX1JFUSkgLyogbmVlZCB0cmlnZ2VyPyAqLwotCQkJc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsIEFDX1ZFUkJfU0VUX1BJTl9TRU5TRSwgMCk7CisJCQlzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKKwkJCQkJQUNfVkVSQl9TRVRfUElOX1NFTlNFLCAwKTsKIAl9CiAJcmV0dXJuIHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLAogCQkJCSAgQUNfVkVSQl9HRVRfUElOX1NFTlNFLCAwKTsKQEAgLTEzNzIsOCArMTM3NCw4IEBACiAgKi8KIGludCBzbmRfaGRhX2phY2tfZGV0ZWN0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQogewotICAgICAgICB1MzIgc2Vuc2UgPSBzbmRfaGRhX3Bpbl9zZW5zZShjb2RlYywgbmlkKTsKLSAgICAgICAgcmV0dXJuICEhKHNlbnNlICYgQUNfUElOU0VOU0VfUFJFU0VOQ0UpOworCXUzMiBzZW5zZSA9IHNuZF9oZGFfcGluX3NlbnNlKGNvZGVjLCBuaWQpOworCXJldHVybiAhIShzZW5zZSAmIEFDX1BJTlNFTlNFX1BSRVNFTkNFKTsKIH0KIEVYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfamFja19kZXRlY3QpOwogCkBAIC0xOTUyLDcgKzE5NTQsNyBAQAogCWVyciA9IHNuZF9oZGFfY3RsX2FkZChjb2RlYywgMCwga2N0bCk7CiAJaWYgKGVyciA8IDApCiAJCXJldHVybiBlcnI7Ci0JCisKIAlmb3IgKHMgPSBzbGF2ZXM7ICpzOyBzKyspIHsKIAkJc3RydWN0IHNuZF9rY29udHJvbCAqc2N0bDsKIAkJaW50IGkgPSAwOwpAQCAtMjQzOSwyNyArMjQ0MSwyNyBAQAogCXsKIAkJLmFjY2VzcyA9IFNORFJWX0NUTF9FTEVNX0FDQ0VTU19SRUFELAogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoIiIsUExBWUJBQ0ssQ09OX01BU0spLAorCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIiwgUExBWUJBQ0ssIENPTl9NQVNLKSwKIAkJLmluZm8gPSBzbmRfaGRhX3NwZGlmX21hc2tfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfc3BkaWZfY21hc2tfZ2V0LAogCX0sCiAJewogCQkuYWNjZXNzID0gU05EUlZfQ1RMX0VMRU1fQUNDRVNTX1JFQUQsCiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIixQTEFZQkFDSyxQUk9fTUFTSyksCisJCS5uYW1lID0gU05EUlZfQ1RMX05BTUVfSUVDOTU4KCIiLCBQTEFZQkFDSywgUFJPX01BU0spLAogCQkuaW5mbyA9IHNuZF9oZGFfc3BkaWZfbWFza19pbmZvLAogCQkuZ2V0ID0gc25kX2hkYV9zcGRpZl9wbWFza19nZXQsCiAJfSwKIAl7CiAJCS5pZmFjZSA9IFNORFJWX0NUTF9FTEVNX0lGQUNFX01JWEVSLAotCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIixQTEFZQkFDSyxERUZBVUxUKSwKKwkJLm5hbWUgPSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoIiIsIFBMQVlCQUNLLCBERUZBVUxUKSwKIAkJLmluZm8gPSBzbmRfaGRhX3NwZGlmX21hc2tfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfc3BkaWZfZGVmYXVsdF9nZXQsCiAJCS5wdXQgPSBzbmRfaGRhX3NwZGlmX2RlZmF1bHRfcHV0LAogCX0sCiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoIiIsUExBWUJBQ0ssU1dJVENIKSwKKwkJLm5hbWUgPSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoIiIsIFBMQVlCQUNLLCBTV0lUQ0gpLAogCQkuaW5mbyA9IHNuZF9oZGFfc3BkaWZfb3V0X3N3aXRjaF9pbmZvLAogCQkuZ2V0ID0gc25kX2hkYV9zcGRpZl9vdXRfc3dpdGNoX2dldCwKIAkJLnB1dCA9IHNuZF9oZGFfc3BkaWZfb3V0X3N3aXRjaF9wdXQsCkBAIC0yNjEwLDcgKzI2MTIsNyBAQAogc3RhdGljIHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IGRpZ19pbl9jdGxzW10gPSB7CiAJewogCQkuaWZhY2UgPSBTTkRSVl9DVExfRUxFTV9JRkFDRV9NSVhFUiwKLQkJLm5hbWUgPSBTTkRSVl9DVExfTkFNRV9JRUM5NTgoIiIsQ0FQVFVSRSxTV0lUQ0gpLAorCQkubmFtZSA9IFNORFJWX0NUTF9OQU1FX0lFQzk1OCgiIiwgQ0FQVFVSRSwgU1dJVENIKSwKIAkJLmluZm8gPSBzbmRfaGRhX3NwZGlmX2luX3N3aXRjaF9pbmZvLAogCQkuZ2V0ID0gc25kX2hkYV9zcGRpZl9pbl9zd2l0Y2hfZ2V0LAogCQkucHV0ID0gc25kX2hkYV9zcGRpZl9pbl9zd2l0Y2hfcHV0LApAQCAtMjYxOCw3ICsyNjIwLDcgQEAKIAl7CiAJCS5hY2Nlc3MgPSBTTkRSVl9DVExfRUxFTV9BQ0NFU1NfUkVBRCwKIAkJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsCi0JCS5uYW1lID0gU05EUlZfQ1RMX05BTUVfSUVDOTU4KCIiLENBUFRVUkUsREVGQVVMVCksCisJCS5uYW1lID0gU05EUlZfQ1RMX05BTUVfSUVDOTU4KCIiLCBDQVBUVVJFLCBERUZBVUxUKSwKIAkJLmluZm8gPSBzbmRfaGRhX3NwZGlmX21hc2tfaW5mbywKIAkJLmdldCA9IHNuZF9oZGFfc3BkaWZfaW5fc3RhdHVzX2dldCwKIAl9LApAQCAtMjg4Myw3ICsyODg1LDcgQEAKIAkJaW50IGVyciA9IHNuZF9oZGFfY29kZWNfYnVpbGRfY29udHJvbHMoY29kZWMpOwogCQlpZiAoZXJyIDwgMCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJoZGFfY29kZWM6IGNhbm5vdCBidWlsZCBjb250cm9scyIKLQkJCSAgICAgICAiZm9yICMlZCAoZXJyb3IgJWQpXG4iLCBjb2RlYy0+YWRkciwgZXJyKTsgCisJCQkgICAgICAgImZvciAjJWQgKGVycm9yICVkKVxuIiwgY29kZWMtPmFkZHIsIGVycik7CiAJCQllcnIgPSBzbmRfaGRhX2NvZGVjX3Jlc2V0KGNvZGVjKTsKIAkJCWlmIChlcnIgPCAwKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSCkBAIC0yOTc5LDggKzI5ODEsMTIgQEAKIAl2YWwgfD0gY2hhbm5lbHMgLSAxOwogCiAJc3dpdGNoIChzbmRfcGNtX2Zvcm1hdF93aWR0aChmb3JtYXQpKSB7Ci0JY2FzZSA4OiAgdmFsIHw9IDB4MDA7IGJyZWFrOwotCWNhc2UgMTY6IHZhbCB8PSAweDEwOyBicmVhazsKKwljYXNlIDg6CisJCXZhbCB8PSAweDAwOworCQlicmVhazsKKwljYXNlIDE2OgorCQl2YWwgfD0gMHgxMDsKKwkJYnJlYWs7CiAJY2FzZSAyMDoKIAljYXNlIDI0OgogCWNhc2UgMzI6CkBAIC0zMjk4LDcgKzMzMDQsOCBAQAogCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoYXVkaW9faWR4W3R5cGVdW2ldLCBidXMtPnBjbV9kZXZfYml0cykpCiAJCQlyZXR1cm4gYXVkaW9faWR4W3R5cGVdW2ldOwogCi0Jc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIlRvbyBtYW55ICVzIGRldmljZXNcbiIsIHNuZF9oZGFfcGNtX3R5cGVfbmFtZVt0eXBlXSk7CisJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcgIlRvbyBtYW55ICVzIGRldmljZXNcbiIsCisJCXNuZF9oZGFfcGNtX3R5cGVfbmFtZVt0eXBlXSk7CiAJcmV0dXJuIC1FQUdBSU47CiB9CiAKQEAgLTMzMzYsNyArMzM0Myw3IEBACiAJCWVyciA9IGNvZGVjLT5wYXRjaF9vcHMuYnVpbGRfcGNtcyhjb2RlYyk7CiAJCWlmIChlcnIgPCAwKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgImhkYV9jb2RlYzogY2Fubm90IGJ1aWxkIFBDTXMiCi0JCQkgICAgICAgImZvciAjJWQgKGVycm9yICVkKVxuIiwgY29kZWMtPmFkZHIsIGVycik7IAorCQkJICAgICAgICJmb3IgIyVkIChlcnJvciAlZClcbiIsIGNvZGVjLT5hZGRyLCBlcnIpOwogCQkJZXJyID0gc25kX2hkYV9jb2RlY19yZXNldChjb2RlYyk7CiAJCQlpZiAoZXJyIDwgMCkgewogCQkJCXByaW50ayhLRVJOX0VSUgpAQCAtMzQ2Niw4ICszNDczLDggQEAKIAogLyoqCiAgKiBzbmRfaGRhX2NoZWNrX2JvYXJkX2NvZGVjX3NpZF9jb25maWcgLSBjb21wYXJlIHRoZSBjdXJyZW50IGNvZGVjCi0JCQkJICAgICAgICAgIHN1YnN5c3RlbSBJRCB3aXRoIHRoZQotCQkJCQkgIGNvbmZpZyB0YWJsZQorCQkJCQlzdWJzeXN0ZW0gSUQgd2l0aCB0aGUKKwkJCQkJY29uZmlnIHRhYmxlCiAKIAkgICBUaGlzIGlzIGltcG9ydGFudCBmb3IgR2F0ZXdheSBub3RlYm9va3Mgd2l0aCBTQjQ1MCBIREEgQXVkaW8KIAkgICB3aGVyZSB0aGUgdmVuZG9yIElEIG9mIHRoZSBQQ0kgZGV2aWNlIGlzOgpAQCAtMzYwNyw3ICszNjE0LDcgQEAKICAqCiAgKiBJbmNyZW1lbnQgdGhlIHBvd2VyLXVwIGNvdW50ZXIgYW5kIHBvd2VyIHVwIHRoZSBoYXJkd2FyZSByZWFsbHkgd2hlbgogICogbm90IHR1cm5lZCBvbiB5ZXQuCi0gKi8gCisgKi8KIHZvaWQgc25kX2hkYV9wb3dlcl91cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgaGRhX2J1cyAqYnVzID0gY29kZWMtPmJ1czsKQEAgLTM2MzYsNyArMzY0Myw3IEBACiAgKgogICogRGVjcmVtZW50IHRoZSBwb3dlci11cCBjb3VudGVyIGFuZCBzY2hlZHVsZXMgdGhlIHBvd2VyLW9mZiB3b3JrIGlmCiAgKiB0aGUgY291bnRlciByZWFyY2hlcyB0byB6ZXJvLgotICovIAorICovCiB2b2lkIHNuZF9oZGFfcG93ZXJfZG93bihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAktLWNvZGVjLT5wb3dlcl9jb3VudDsKQEAgLTM2NjIsNyArMzY2OSw3IEBACiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byBiZSBzZXQgb3IgY2FsbGVkIGZyb20gdGhlIGNoZWNrX3Bvd2VyX3N0YXR1cwogICogcGF0Y2ggb3BzLgotICovIAorICovCiBpbnQgc25kX2hkYV9jaGVja19hbXBfbGlzdF9wb3dlcihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkgc3RydWN0IGhkYV9sb29wYmFja19jaGVjayAqY2hlY2ssCiAJCQkJIGhkYV9uaWRfdCBuaWQpCkBAIC0zODMwLDcgKzM4MzcsNyBAQAogewogCS8qIHR1cm4gb2ZmIFNQRElGIG9uY2U7IG90aGVyd2lzZSB0aGUgSUVDOTU4IGJpdHMgd29uJ3QgYmUgdXBkYXRlZCAqLwogCWlmIChjb2RlYy0+c3BkaWZfc3RhdHVzX3Jlc2V0ICYmIChjb2RlYy0+c3BkaWZfY3RscyAmIEFDX0RJRzFfRU5BQkxFKSkKLQkJc2V0X2RpZ19vdXRfY29udmVydChjb2RlYywgbmlkLCAKKwkJc2V0X2RpZ19vdXRfY29udmVydChjb2RlYywgbmlkLAogCQkJCSAgICBjb2RlYy0+c3BkaWZfY3RscyAmIH5BQ19ESUcxX0VOQUJMRSAmIDB4ZmYsCiAJCQkJICAgIC0xKTsKIAlzbmRfaGRhX2NvZGVjX3NldHVwX3N0cmVhbShjb2RlYywgbmlkLCBzdHJlYW1fdGFnLCAwLCBmb3JtYXQpOwpAQCAtNDA4OSwxMyArNDA5NiwxMyBAQAogLyoKICAqIFNvcnQgYW4gYXNzb2NpYXRlZCBncm91cCBvZiBwaW5zIGFjY29yZGluZyB0byB0aGVpciBzZXF1ZW5jZSBudW1iZXJzLgogICovCi1zdGF0aWMgdm9pZCBzb3J0X3BpbnNfYnlfc2VxdWVuY2UoaGRhX25pZF90ICogcGlucywgc2hvcnQgKiBzZXF1ZW5jZXMsCitzdGF0aWMgdm9pZCBzb3J0X3BpbnNfYnlfc2VxdWVuY2UoaGRhX25pZF90ICpwaW5zLCBzaG9ydCAqc2VxdWVuY2VzLAogCQkJCSAgaW50IG51bV9waW5zKQogewogCWludCBpLCBqOwogCXNob3J0IHNlcTsKIAloZGFfbmlkX3QgbmlkOwotCQorCiAJZm9yIChpID0gMDsgaSA8IG51bV9waW5zOyBpKyspIHsKIAkJZm9yIChqID0gaSArIDE7IGogPCBudW1fcGluczsgaisrKSB7CiAJCQlpZiAoc2VxdWVuY2VzW2ldID4gc2VxdWVuY2VzW2pdKSB7CkBAIC00MTIzLDcgKzQxMzAsNyBAQAogICogaXMgZGV0ZWN0ZWQsIG9uZSBvZiBzcGVha2VyIG9mIEhQIHBpbnMgaXMgYXNzaWduZWQgYXMgdGhlIHByaW1hcnkKICAqIG91dHB1dCwgaS5lLiB0byBsaW5lX291dF9waW5zWzBdLiAgU28sIGxpbmVfb3V0cyBpcyBhbHdheXMgcG9zaXRpdmUKICAqIGlmIGFueSBhbmFsb2cgb3V0cHV0IGV4aXN0cy4KLSAqIAorICoKICAqIFRoZSBhbmFsb2cgaW5wdXQgcGlucyBhcmUgYXNzaWduZWQgdG8gaW5wdXRfcGlucyBhcnJheS4KICAqIFRoZSBkaWdpdGFsIGlucHV0L291dHB1dCBwaW5zIGFyZSBhc3NpZ25lZCB0byBkaWdfaW5fcGluIGFuZCBkaWdfb3V0X3BpbiwKICAqIHJlc3BlY3RpdmVseS4KQEAgLTQxODYsOSArNDE5Myw5IEBACiAJCWNhc2UgQUNfSkFDS19TUEVBS0VSOgogCQkJc2VxID0gZ2V0X2RlZmNmZ19zZXF1ZW5jZShkZWZfY29uZik7CiAJCQlhc3NvYyA9IGdldF9kZWZjZmdfYXNzb2NpYXRpb24oZGVmX2NvbmYpOwotCQkJaWYgKCEgYXNzb2MpCisJCQlpZiAoIWFzc29jKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKCEgYXNzb2Nfc3BlYWtlcikKKwkJCWlmICghYXNzb2Nfc3BlYWtlcikKIAkJCQlhc3NvY19zcGVha2VyID0gYXNzb2M7CiAJCQllbHNlIGlmIChhc3NvY19zcGVha2VyICE9IGFzc29jKQogCQkJCWNvbnRpbnVlOwpAQCAtNDI4Niw3ICs0MjkzLDcgQEAKIAkJCSAgICAgIGNmZy0+c3BlYWtlcl9vdXRzKTsKIAlzb3J0X3BpbnNfYnlfc2VxdWVuY2UoY2ZnLT5ocF9waW5zLCBzZXF1ZW5jZXNfaHAsCiAJCQkgICAgICBjZmctPmhwX291dHMpOwotCQorCiAJLyogaWYgd2UgaGF2ZSBvbmx5IG9uZSBtaWMsIG1ha2UgaXQgQVVUT19QSU5fTUlDICovCiAJaWYgKCFjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fTUlDXSAmJgogCSAgICBjZmctPmlucHV0X3BpbnNbQVVUT19QSU5fRlJPTlRfTUlDXSkgewpAQCAtNDQzNiw3ICs0NDQzLDcgQEAKIC8qKgogICogc25kX2FycmF5X25ldyAtIGdldCBhIG5ldyBlbGVtZW50IGZyb20gdGhlIGdpdmVuIGFycmF5CiAgKiBAYXJyYXk6IHRoZSBhcnJheSBvYmplY3QKLSAqIAorICoKICAqIEdldCBhIG5ldyBlbGVtZW50IGZyb20gdGhlIGdpdmVuIGFycmF5LiAgSWYgaXQgZXhjZWVkcyB0aGUKICAqIHByZS1hbGxvY2F0ZWQgYXJyYXkgc2l6ZSwgcmUtYWxsb2NhdGUgdGhlIGFycmF5LgogICoKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9oZGEvaGRhX2VsZC5jIGIvc291bmQvcGNpL2hkYS9oZGFfZWxkLmMKaW5kZXggNDIyOGYyZi4uZGNkMjI0NCAxMDA2NDQKLS0tIGEvc291bmQvcGNpL2hkYS9oZGFfZWxkLmMKKysrIGIvc291bmQvcGNpL2hkYS9oZGFfZWxkLmMKQEAgLTMzMSw2ICszMzEsNyBAQAogCXJldHVybiBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwgQUNfVkVSQl9HRVRfSERNSV9ESVBfU0laRSwKIAkJCQkJCSBBQ19ESVBTSVpFX0VMRF9CVUYpOwogfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkbWlfZ2V0X2VsZF9zaXplKTsKIAogaW50IHNuZF9oZG1pX2dldF9lbGQoc3RydWN0IGhkbWlfZWxkICplbGQsCiAJCSAgICAgc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCkBAIC0zNjYsNiArMzY3LDcgQEAKIAlrZnJlZShidWYpOwogCXJldHVybiByZXQ7CiB9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfaGRtaV9nZXRfZWxkKTsKIAogc3RhdGljIHZvaWQgaGRtaV9zaG93X3Nob3J0X2F1ZGlvX2Rlc2Moc3RydWN0IGNlYV9zYWQgKmEpCiB7CkBAIC00MDQsNiArNDA2LDcgQEAKIAl9CiAJYnVmW2pdID0gJ1wwJzsJLyogbmVjZXNzYXJ5IHdoZW4gaiA9PSAwICovCiB9CitFWFBPUlRfU1lNQk9MX0hEQShzbmRfcHJpbnRfY2hhbm5lbF9hbGxvY2F0aW9uKTsKIAogdm9pZCBzbmRfaGRtaV9zaG93X2VsZChzdHJ1Y3QgaGRtaV9lbGQgKmUpCiB7CkBAIC00MjIsNiArNDI1LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZS0+c2FkX2NvdW50OyBpKyspCiAJCWhkbWlfc2hvd19zaG9ydF9hdWRpb19kZXNjKGUtPnNhZCArIGkpOwogfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkbWlfc2hvd19lbGQpOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIApAQCAtNTgwLDYgKzU4NCw3IEBACiAKIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfSERBKHNuZF9oZGFfZWxkX3Byb2NfbmV3KTsKIAogdm9pZCBzbmRfaGRhX2VsZF9wcm9jX2ZyZWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIHN0cnVjdCBoZG1pX2VsZCAqZWxkKQogewpAQCAtNTg4LDUgKzU5Myw2IEBACiAJCWVsZC0+cHJvY19lbnRyeSA9IE5VTEw7CiAJfQogfQorRVhQT1JUX1NZTUJPTF9IREEoc25kX2hkYV9lbGRfcHJvY19mcmVlKTsKIAogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jIGIvc291bmQvcGNpL2hkYS9oZGFfaW50ZWwuYwppbmRleCBkNWM5M2FkLi40M2I3Y2ZiIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL2hkYV9pbnRlbC5jCisrKyBiL3NvdW5kL3BjaS9oZGEvaGRhX2ludGVsLmMKQEAgLTI2Nyw3ICsyNjcsOCBAQAogI2RlZmluZSBSSVJCX0lOVF9NQVNLCQkweDA1CiAKIC8qIFNUQVRFU1RTIGludCBtYXNrOiBTMyxTRDIsU0QxLFNEMCAqLwotI2RlZmluZSBBWlhfTUFYX0NPREVDUwkJNAorI2RlZmluZSBBWlhfTUFYX0NPREVDUwkJOAorI2RlZmluZSBBWlhfREVGQVVMVF9DT0RFQ1MJNAogI2RlZmluZSBTVEFURVNUU19JTlRfTUFTSwkoKDEgPDwgQVpYX01BWF9DT0RFQ1MpIC0gMSkKIAogLyogU0RfQ1RMIGJpdHMgKi8KQEAgLTEzNjcsNiArMTM2OCw3IEBACiAKIC8qIG51bWJlciBvZiBjb2RlYyBzbG90cyBmb3IgZWFjaCBjaGlwc2V0OiAwID0gZGVmYXVsdCBzbG90cyAoaS5lLiA0KSAqLwogc3RhdGljIHVuc2lnbmVkIGludCBhenhfbWF4X2NvZGVjc1tBWlhfTlVNX0RSSVZFUlNdIF9fZGV2aW5pdGRhdGEgPSB7CisJW0FaWF9EUklWRVJfTlZJRElBXSA9IDgsCiAJW0FaWF9EUklWRVJfVEVSQV0gPSAxLAogfTsKIApAQCAtMTM5OSw3ICsxNDAxLDcgQEAKIAljb2RlY3MgPSAwOwogCW1heF9zbG90cyA9IGF6eF9tYXhfY29kZWNzW2NoaXAtPmRyaXZlcl90eXBlXTsKIAlpZiAoIW1heF9zbG90cykKLQkJbWF4X3Nsb3RzID0gQVpYX01BWF9DT0RFQ1M7CisJCW1heF9zbG90cyA9IEFaWF9ERUZBVUxUX0NPREVDUzsKIAogCS8qIEZpcnN0IHRyeSB0byBwcm9iZSBhbGwgZ2l2ZW4gY29kZWMgc2xvdHMgKi8KIAlmb3IgKGMgPSAwOyBjIDwgbWF4X3Nsb3RzOyBjKyspIHsKQEAgLTIyNjMsMTAgKzIyNjUsMTIgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjaV9xdWlyayBwb3NpdGlvbl9maXhfbGlzdFtdIF9fZGV2aW5pdGRhdGEgPSB7CiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDFjYywgIkRlbGwgRDgyMCIsIFBPU19GSVhfTFBJQiksCiAJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDFkZSwgIkRlbGwgUHJlY2lzaW9uIDM5MCIsIFBPU19GSVhfTFBJQiksCisJU05EX1BDSV9RVUlSSygweDEwMjgsIDB4MDFmNiwgIkRlbGwgTGF0aXR1ZGUgMTMxTCIsIFBPU19GSVhfTFBJQiksCiAJU05EX1BDSV9RVUlSSygweDEwM2MsIDB4MzA2ZCwgIkhQIGR2MyIsIFBPU19GSVhfTFBJQiksCiAJU05EX1BDSV9RVUlSSygweDExMDYsIDB4MzI4OCwgIkFTVVMgTTJWLU1YIFNFIiwgUE9TX0ZJWF9MUElCKSwKIAlTTkRfUENJX1FVSVJLKDB4MTA0MywgMHg4MTNkLCAiQVNVUyBQNUFEMiIsIFBPU19GSVhfTFBJQiksCiAJU05EX1BDSV9RVUlSSygweDE0NjIsIDB4MTAwMiwgIk1TSSBXaW5kIFUxMTUiLCBQT1NfRklYX0xQSUIpLAorCVNORF9QQ0lfUVVJUksoMHgxNTY1LCAweDgyMGYsICJCaW9zdGFyIE1pY3JvdGVjaCIsIFBPU19GSVhfTFBJQiksCiAJe30KIH07CiAKQEAgLTIzNTQsNiArMjM1OCw3IEBACiBzdGF0aWMgc3RydWN0IHNuZF9wY2lfcXVpcmsgbXNpX2JsYWNrX2xpc3RbXSBfX2RldmluaXRkYXRhID0gewogCVNORF9QQ0lfUVVJUksoMHgxMDQzLCAweDgxZjIsICJBU1VTIiwgMCksIC8qIEF0aGxvbjY0IFgyICsgbnZpZGlhICovCiAJU05EX1BDSV9RVUlSSygweDEwNDMsIDB4ODFmNiwgIkFTVVMiLCAwKSwgLyogbnZpZGlhICovCisJU05EX1BDSV9RVUlSSygweDE4NDksIDB4MDg4OCwgIkFTUm9jayIsIDApLCAvKiBBdGhsb242NCBYMiArIG52aWRpYSAqLwogCXt9CiB9OwogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaGRtaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMmJhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9zb3VuZC9wY2kvaGRhL3BhdGNoX2hkbWkuYwpAQCAtMCwwICsxLDg0OSBAQAorLyoKKyAqCisgKiAgcGF0Y2hfaGRtaS5jIC0gcm91dGluZXMgZm9yIEhETUkvRGlzcGxheVBvcnQgY29kZWNzCisgKgorICogIENvcHlyaWdodChjKSAyMDA4LTIwMTAgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIEF1dGhvcnM6CisgKgkJCVd1IEZlbmdndWFuZyA8d2ZnQGxpbnV4LmludGVsLmNvbT4KKyAqCisgKiAgTWFpbnRhaW5lZCBieToKKyAqCQkJV3UgRmVuZ2d1YW5nIDx3ZmdAbGludXguaW50ZWwuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlCisgKiAgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisgKiAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkKKyAqICBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiAgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3LCBVU0EuCisgKi8KKworCitzdHJ1Y3QgaGRtaV9zcGVjIHsKKwlpbnQgbnVtX2N2dHM7CisJaW50IG51bV9waW5zOworCWhkYV9uaWRfdCBjdnRbTUFYX0hETUlfQ1ZUUysxXTsgIC8qIGF1ZGlvIHNvdXJjZXMgKi8KKwloZGFfbmlkX3QgcGluW01BWF9IRE1JX1BJTlMrMV07ICAvKiBhdWRpbyBzaW5rcyAqLworCisJLyoKKwkgKiBzb3VyY2UgY29ubmVjdGlvbiBmb3IgZWFjaCBwaW4KKwkgKi8KKwloZGFfbmlkX3QgcGluX2N2dFtNQVhfSERNSV9QSU5TKzFdOworCisJLyoKKwkgKiBIRE1JIHNpbmsgYXR0YWNoZWQgdG8gZWFjaCBwaW4KKwkgKi8KKwlzdHJ1Y3QgaGRtaV9lbGQgc2lua19lbGRbTUFYX0hETUlfUElOU107CisKKwkvKgorCSAqIGV4cG9ydCBvbmUgcGNtIHBlciBwaXBlCisJICovCisJc3RydWN0IGhkYV9wY20JcGNtX3JlY1tNQVhfSERNSV9DVlRTXTsKKworCS8qCisJICogbnZoZG1pIHNwZWNpZmljCisJICovCisJc3RydWN0IGhkYV9tdWx0aV9vdXQgbXVsdGlvdXQ7CisJdW5zaWduZWQgaW50IGNvZGVjX3R5cGU7Cit9OworCisKK3N0cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSB7CisJdTggdHlwZTsgLyogMHg4NCAqLworCXU4IHZlcjsgIC8qIDB4MDEgKi8KKwl1OCBsZW47ICAvKiAweDBhICovCisKKwl1OCBjaGVja3N1bTsJLyogUEIwICovCisJdTggQ0MwMl9DVDQ3OwkvKiBDQyBpbiBiaXRzIDA6MiwgQ1QgaW4gNDo3ICovCisJdTggU1MwMV9TRjI0OworCXU4IENYVDA0OworCXU4IENBOworCXU4IExGRVBCTDAxX0xTVjM2X0RNX0lOSDc7CisJdTggcmVzZXJ2ZWRbNV07CS8qIFBCNiAtIFBCMTAgKi8KK307CisKKy8qCisgKiBDRUEgc3BlYWtlciBwbGFjZW1lbnQ6CisgKgorICogICAgICAgIEZMSCAgICAgICBGQ0ggICAgICAgIEZSSAorICogIEZMVyAgICBGTCAgRkxDICAgRkMgICBGUkMgICBGUiAgIEZSVworICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExGRQorICogICAgICAgICAgICAgICAgICAgICBUQworICoKKyAqICAgICAgICAgIFJMICBSTEMgICBSQyAgIFJSQyAgIFJSCisgKgorICogVGhlIExlZnQvUmlnaHQgU3Vycm91bmQgY2hhbm5lbCBfbm90aW9uc18gTFMvUlMgaW4gU01QVEUgMzIwTSBjb3JyZXNwb25kcyB0bworICogQ0VBIFJML1JSOyBUaGUgU01QVEUgY2hhbm5lbCBfYXNzaWdubWVudF8gQy9MRkUgaXMgc3dhcHBlZCB0byBDRUEgTEZFL0ZDLgorICovCitlbnVtIGNlYV9zcGVha2VyX3BsYWNlbWVudCB7CisJRkwgID0gKDEgPDwgIDApLAkvKiBGcm9udCBMZWZ0ICAgICAgICAgICAqLworCUZDICA9ICgxIDw8ICAxKSwJLyogRnJvbnQgQ2VudGVyICAgICAgICAgKi8KKwlGUiAgPSAoMSA8PCAgMiksCS8qIEZyb250IFJpZ2h0ICAgICAgICAgICovCisJRkxDID0gKDEgPDwgIDMpLAkvKiBGcm9udCBMZWZ0IENlbnRlciAgICAqLworCUZSQyA9ICgxIDw8ICA0KSwJLyogRnJvbnQgUmlnaHQgQ2VudGVyICAgKi8KKwlSTCAgPSAoMSA8PCAgNSksCS8qIFJlYXIgTGVmdCAgICAgICAgICAgICovCisJUkMgID0gKDEgPDwgIDYpLAkvKiBSZWFyIENlbnRlciAgICAgICAgICAqLworCVJSICA9ICgxIDw8ICA3KSwJLyogUmVhciBSaWdodCAgICAgICAgICAgKi8KKwlSTEMgPSAoMSA8PCAgOCksCS8qIFJlYXIgTGVmdCBDZW50ZXIgICAgICovCisJUlJDID0gKDEgPDwgIDkpLAkvKiBSZWFyIFJpZ2h0IENlbnRlciAgICAqLworCUxGRSA9ICgxIDw8IDEwKSwJLyogTG93IEZyZXF1ZW5jeSBFZmZlY3QgKi8KKwlGTFcgPSAoMSA8PCAxMSksCS8qIEZyb250IExlZnQgV2lkZSAgICAgICovCisJRlJXID0gKDEgPDwgMTIpLAkvKiBGcm9udCBSaWdodCBXaWRlICAgICAqLworCUZMSCA9ICgxIDw8IDEzKSwJLyogRnJvbnQgTGVmdCBIaWdoICAgICAgKi8KKwlGQ0ggPSAoMSA8PCAxNCksCS8qIEZyb250IENlbnRlciBIaWdoICAgICovCisJRlJIID0gKDEgPDwgMTUpLAkvKiBGcm9udCBSaWdodCBIaWdoICAgICAqLworCVRDICA9ICgxIDw8IDE2KSwJLyogVG9wIENlbnRlciAgICAgICAgICAgKi8KK307CisKKy8qCisgKiBFTEQgU0EgYml0cyBpbiB0aGUgQ0VBIFNwZWFrZXIgQWxsb2NhdGlvbiBkYXRhIGJsb2NrCisgKi8KK3N0YXRpYyBpbnQgZWxkX3NwZWFrZXJfYWxsb2NhdGlvbl9iaXRzW10gPSB7CisJWzBdID0gRkwgfCBGUiwKKwlbMV0gPSBMRkUsCisJWzJdID0gRkMsCisJWzNdID0gUkwgfCBSUiwKKwlbNF0gPSBSQywKKwlbNV0gPSBGTEMgfCBGUkMsCisJWzZdID0gUkxDIHwgUlJDLAorCS8qIHRoZSBmb2xsb3dpbmcgYXJlIG5vdCBkZWZpbmVkIGluIEVMRCB5ZXQgKi8KKwlbN10gPSBGTFcgfCBGUlcsCisJWzhdID0gRkxIIHwgRlJILAorCVs5XSA9IFRDLAorCVsxMF0gPSBGQ0gsCit9OworCitzdHJ1Y3QgY2VhX2NoYW5uZWxfc3BlYWtlcl9hbGxvY2F0aW9uIHsKKwlpbnQgY2FfaW5kZXg7CisJaW50IHNwZWFrZXJzWzhdOworCisJLyogZGVyaXZlZCB2YWx1ZXMsIGp1c3QgZm9yIGNvbnZlbmllbmNlICovCisJaW50IGNoYW5uZWxzOworCWludCBzcGtfbWFzazsKK307CisKKy8qCisgKiBBTFNBIHNlcXVlbmNlIGlzOgorICoKKyAqICAgICAgIHN1cnJvdW5kNDAgICBzdXJyb3VuZDQxICAgc3Vycm91bmQ1MCAgIHN1cnJvdW5kNTEgICBzdXJyb3VuZDcxCisgKiBjaDAgICBmcm9udCBsZWZ0ICAgPSAgICAgICAgICAgID0gICAgICAgICAgICA9ICAgICAgICAgICAgPQorICogY2gxICAgZnJvbnQgcmlnaHQgID0gICAgICAgICAgICA9ICAgICAgICAgICAgPSAgICAgICAgICAgID0KKyAqIGNoMiAgIHJlYXIgbGVmdCAgICA9ICAgICAgICAgICAgPSAgICAgICAgICAgID0gICAgICAgICAgICA9CisgKiBjaDMgICByZWFyIHJpZ2h0ICAgPSAgICAgICAgICAgID0gICAgICAgICAgICA9ICAgICAgICAgICAgPQorICogY2g0ICAgICAgICAgICAgICAgIExGRSAgICAgICAgICBjZW50ZXIgICAgICAgY2VudGVyICAgICAgIGNlbnRlcgorICogY2g1ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEZFICAgICAgICAgIExGRQorICogY2g2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZGUgbGVmdAorICogY2g3ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZGUgcmlnaHQKKyAqCisgKiBzdXJyb3VuZDcxID0ge0ZMLCBGUiwgUkxDLCBSUkMsIEZDLCBMRkUsIFJMLCBSUn0KKyAqLworc3RhdGljIGludCBoZG1pX2NoYW5uZWxfbWFwcGluZ1sweDMyXVs4XSA9IHsKKwkvKiBzdGVyZW8gKi8KKwlbMHgwMF0gPSB7IDB4MDAsIDB4MTEsIDB4ZjIsIDB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcgfSwKKwkvKiAyLjEgKi8KKwlbMHgwMV0gPSB7IDB4MDAsIDB4MTEsIDB4MjIsIDB4ZjMsIDB4ZjQsIDB4ZjUsIDB4ZjYsIDB4ZjcgfSwKKwkvKiBEb2xieSBTdXJyb3VuZCAqLworCVsweDAyXSA9IHsgMHgwMCwgMHgxMSwgMHgyMywgMHhmMiwgMHhmNCwgMHhmNSwgMHhmNiwgMHhmNyB9LAorCS8qIHN1cnJvdW5kNDAgKi8KKwlbMHgwOF0gPSB7IDB4MDAsIDB4MTEsIDB4MjQsIDB4MzUsIDB4ZjMsIDB4ZjIsIDB4ZjYsIDB4ZjcgfSwKKwkvKiA0Y2ggKi8KKwlbMHgwM10gPSB7IDB4MDAsIDB4MTEsIDB4MjMsIDB4MzIsIDB4NDQsIDB4ZjUsIDB4ZjYsIDB4ZjcgfSwKKwkvKiBzdXJyb3VuZDQxICovCisJWzB4MDldID0geyAweDAwLCAweDExLCAweDI0LCAweDM0LCAweDQzLCAweGYyLCAweGY2LCAweGY3IH0sCisJLyogc3Vycm91bmQ1MCAqLworCVsweDBhXSA9IHsgMHgwMCwgMHgxMSwgMHgyNCwgMHgzNSwgMHg0MywgMHhmMiwgMHhmNiwgMHhmNyB9LAorCS8qIHN1cnJvdW5kNTEgKi8KKwlbMHgwYl0gPSB7IDB4MDAsIDB4MTEsIDB4MjQsIDB4MzUsIDB4NDMsIDB4NTIsIDB4ZjYsIDB4ZjcgfSwKKwkvKiA3LjEgKi8KKwlbMHgxM10gPSB7IDB4MDAsIDB4MTEsIDB4MjYsIDB4MzcsIDB4NDMsIDB4NTIsIDB4NjQsIDB4NzUgfSwKK307CisKKy8qCisgKiBUaGlzIGlzIGFuIG9yZGVyZWQgbGlzdCEKKyAqCisgKiBUaGUgcHJlY2VkaW5nIG9uZXMgaGF2ZSBiZXR0ZXIgY2hhbmNlcyB0byBiZSBzZWxlY3RlZCBieQorICogaGRtaV9zZXR1cF9jaGFubmVsX2FsbG9jYXRpb24oKS4KKyAqLworc3RhdGljIHN0cnVjdCBjZWFfY2hhbm5lbF9zcGVha2VyX2FsbG9jYXRpb24gY2hhbm5lbF9hbGxvY2F0aW9uc1tdID0geworLyoJCQkgIGNoYW5uZWw6ICAgNyAgICAgNiAgICA1ICAgIDQgICAgMyAgICAgMiAgICAxICAgIDAgICovCit7IC5jYV9pbmRleCA9IDB4MDAsICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgICAwLCAgIDAsICAgMCwgICAgMCwgIEZSLCAgRkwgfSB9LAorCQkJCSAvKiAyLjEgKi8KK3sgLmNhX2luZGV4ID0gMHgwMSwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgIDAsICAgMCwgICAwLCAgTEZFLCAgRlIsICBGTCB9IH0sCisJCQkJIC8qIERvbGJ5IFN1cnJvdW5kICovCit7IC5jYV9pbmRleCA9IDB4MDIsICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgICAwLCAgIDAsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAorCQkJCSAvKiBzdXJyb3VuZDQwICovCit7IC5jYV9pbmRleCA9IDB4MDgsICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgIFJSLCAgUkwsICAgMCwgICAgMCwgIEZSLCAgRkwgfSB9LAorCQkJCSAvKiBzdXJyb3VuZDQxICovCit7IC5jYV9pbmRleCA9IDB4MDksICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgIFJSLCAgUkwsICAgMCwgIExGRSwgIEZSLCAgRkwgfSB9LAorCQkJCSAvKiBzdXJyb3VuZDUwICovCit7IC5jYV9pbmRleCA9IDB4MGEsICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgIFJSLCAgUkwsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAorCQkJCSAvKiBzdXJyb3VuZDUxICovCit7IC5jYV9pbmRleCA9IDB4MGIsICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgIFJSLCAgUkwsICBGQywgIExGRSwgIEZSLCAgRkwgfSB9LAorCQkJCSAvKiA2LjEgKi8KK3sgLmNhX2luZGV4ID0gMHgwZiwgIC5zcGVha2VycyA9IHsgICAwLCAgIFJDLCAgUlIsICBSTCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCisJCQkJIC8qIHN1cnJvdW5kNzEgKi8KK3sgLmNhX2luZGV4ID0gMHgxMywgIC5zcGVha2VycyA9IHsgUlJDLCAgUkxDLCAgUlIsICBSTCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCisKK3sgLmNhX2luZGV4ID0gMHgwMywgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgIDAsICAgMCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MDQsICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgICAwLCAgUkMsICAgMCwgICAgMCwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDA1LCAgLnNwZWFrZXJzID0geyAgIDAsICAgIDAsICAgMCwgIFJDLCAgIDAsICBMRkUsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgwNiwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgIDAsICBSQywgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MDcsICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgICAwLCAgUkMsICBGQywgIExGRSwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDBjLCAgLnNwZWFrZXJzID0geyAgIDAsICAgUkMsICBSUiwgIFJMLCAgIDAsICAgIDAsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgwZCwgIC5zcGVha2VycyA9IHsgICAwLCAgIFJDLCAgUlIsICBSTCwgICAwLCAgTEZFLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MGUsICAuc3BlYWtlcnMgPSB7ICAgMCwgICBSQywgIFJSLCAgUkwsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDEwLCAgLnNwZWFrZXJzID0geyBSUkMsICBSTEMsICBSUiwgIFJMLCAgIDAsICAgIDAsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgxMSwgIC5zcGVha2VycyA9IHsgUlJDLCAgUkxDLCAgUlIsICBSTCwgICAwLCAgTEZFLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MTIsICAuc3BlYWtlcnMgPSB7IFJSQywgIFJMQywgIFJSLCAgUkwsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDE0LCAgLnNwZWFrZXJzID0geyBGUkMsICBGTEMsICAgMCwgICAwLCAgIDAsICAgIDAsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgxNSwgIC5zcGVha2VycyA9IHsgRlJDLCAgRkxDLCAgIDAsICAgMCwgICAwLCAgTEZFLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MTYsICAuc3BlYWtlcnMgPSB7IEZSQywgIEZMQywgICAwLCAgIDAsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDE3LCAgLnNwZWFrZXJzID0geyBGUkMsICBGTEMsICAgMCwgICAwLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgxOCwgIC5zcGVha2VycyA9IHsgRlJDLCAgRkxDLCAgIDAsICBSQywgICAwLCAgICAwLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MTksICAuc3BlYWtlcnMgPSB7IEZSQywgIEZMQywgICAwLCAgUkMsICAgMCwgIExGRSwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDFhLCAgLnNwZWFrZXJzID0geyBGUkMsICBGTEMsICAgMCwgIFJDLCAgRkMsICAgIDAsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgxYiwgIC5zcGVha2VycyA9IHsgRlJDLCAgRkxDLCAgIDAsICBSQywgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MWMsICAuc3BlYWtlcnMgPSB7IEZSQywgIEZMQywgIFJSLCAgUkwsICAgMCwgICAgMCwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDFkLCAgLnNwZWFrZXJzID0geyBGUkMsICBGTEMsICBSUiwgIFJMLCAgIDAsICBMRkUsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgxZSwgIC5zcGVha2VycyA9IHsgRlJDLCAgRkxDLCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MWYsICAuc3BlYWtlcnMgPSB7IEZSQywgIEZMQywgIFJSLCAgUkwsICBGQywgIExGRSwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDIwLCAgLnNwZWFrZXJzID0geyAgIDAsICBGQ0gsICBSUiwgIFJMLCAgRkMsICAgIDAsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgyMSwgIC5zcGVha2VycyA9IHsgICAwLCAgRkNILCAgUlIsICBSTCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MjIsICAuc3BlYWtlcnMgPSB7ICBUQywgICAgMCwgIFJSLCAgUkwsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDIzLCAgLnNwZWFrZXJzID0geyAgVEMsICAgIDAsICBSUiwgIFJMLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgyNCwgIC5zcGVha2VycyA9IHsgRlJILCAgRkxILCAgUlIsICBSTCwgICAwLCAgICAwLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MjUsICAuc3BlYWtlcnMgPSB7IEZSSCwgIEZMSCwgIFJSLCAgUkwsICAgMCwgIExGRSwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDI2LCAgLnNwZWFrZXJzID0geyBGUlcsICBGTFcsICBSUiwgIFJMLCAgIDAsICAgIDAsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgyNywgIC5zcGVha2VycyA9IHsgRlJXLCAgRkxXLCAgUlIsICBSTCwgICAwLCAgTEZFLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MjgsICAuc3BlYWtlcnMgPSB7ICBUQywgICBSQywgIFJSLCAgUkwsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDI5LCAgLnNwZWFrZXJzID0geyAgVEMsICAgUkMsICBSUiwgIFJMLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgyYSwgIC5zcGVha2VycyA9IHsgRkNILCAgIFJDLCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MmIsICAuc3BlYWtlcnMgPSB7IEZDSCwgICBSQywgIFJSLCAgUkwsICBGQywgIExGRSwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDJjLCAgLnNwZWFrZXJzID0geyAgVEMsICBGQ0gsICBSUiwgIFJMLCAgRkMsICAgIDAsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgyZCwgIC5zcGVha2VycyA9IHsgIFRDLCAgRkNILCAgUlIsICBSTCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MmUsICAuc3BlYWtlcnMgPSB7IEZSSCwgIEZMSCwgIFJSLCAgUkwsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAoreyAuY2FfaW5kZXggPSAweDJmLCAgLnNwZWFrZXJzID0geyBGUkgsICBGTEgsICBSUiwgIFJMLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKK3sgLmNhX2luZGV4ID0gMHgzMCwgIC5zcGVha2VycyA9IHsgRlJXLCAgRkxXLCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCit7IC5jYV9pbmRleCA9IDB4MzEsICAuc3BlYWtlcnMgPSB7IEZSVywgIEZMVywgIFJSLCAgUkwsICBGQywgIExGRSwgIEZSLCAgRkwgfSB9LAorfTsKKworCisvKgorICogSERNSSByb3V0aW5lcworICovCisKK3N0YXRpYyBpbnQgaGRhX25vZGVfaW5kZXgoaGRhX25pZF90ICpuaWRzLCBoZGFfbmlkX3QgbmlkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgbmlkc1tpXTsgaSsrKQorCQlpZiAobmlkc1tpXSA9PSBuaWQpCisJCQlyZXR1cm4gaTsKKworCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJIRE1JOiBuaWQgJWQgbm90IHJlZ2lzdGVyZWRcbiIsIG5pZCk7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyB2b2lkIGhkbWlfZ2V0X3Nob3dfZWxkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluX25pZCwKKwkJCSAgICAgIHN0cnVjdCBoZG1pX2VsZCAqZWxkKQoreworCWlmICghc25kX2hkbWlfZ2V0X2VsZChlbGQsIGNvZGVjLCBwaW5fbmlkKSkKKwkJc25kX2hkbWlfc2hvd19lbGQoZWxkKTsKK30KKworI2lmZGVmIEJFX1BBUkFOT0lECitzdGF0aWMgdm9pZCBoZG1pX2dldF9kaXBfaW5kZXgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkLAorCQkJCWludCAqcGFja2V0X2luZGV4LCBpbnQgKmJ5dGVfaW5kZXgpCit7CisJaW50IHZhbDsKKworCXZhbCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgcGluX25pZCwgMCwKKwkJCQkgQUNfVkVSQl9HRVRfSERNSV9ESVBfSU5ERVgsIDApOworCisJKnBhY2tldF9pbmRleCA9IHZhbCA+PiA1OworCSpieXRlX2luZGV4ID0gdmFsICYgMHgxZjsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZCBoZG1pX3NldF9kaXBfaW5kZXgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkLAorCQkJCWludCBwYWNrZXRfaW5kZXgsIGludCBieXRlX2luZGV4KQoreworCWludCB2YWw7CisKKwl2YWwgPSAocGFja2V0X2luZGV4IDw8IDUpIHwgKGJ5dGVfaW5kZXggJiAweDFmKTsKKworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsIEFDX1ZFUkJfU0VUX0hETUlfRElQX0lOREVYLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBoZG1pX3dyaXRlX2RpcF9ieXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluX25pZCwKKwkJCQl1bnNpZ25lZCBjaGFyIHZhbCkKK3sKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLCBBQ19WRVJCX1NFVF9IRE1JX0RJUF9EQVRBLCB2YWwpOworfQorCitzdGF0aWMgdm9pZCBoZG1pX2VuYWJsZV9vdXRwdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkKQoreworCS8qIFVubXV0ZSAqLworCWlmIChnZXRfd2NhcHMoY29kZWMsIHBpbl9uaWQpICYgQUNfV0NBUF9PVVRfQU1QKQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAorCQkJCUFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFKTsKKwkvKiBFbmFibGUgcGluIG91dCAqLworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCisJCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUKTsKK30KKworc3RhdGljIGludCBoZG1pX2dldF9jaGFubmVsX2NvdW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkKQoreworCXJldHVybiAxICsgc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBuaWQsIDAsCisJCQkJCUFDX1ZFUkJfR0VUX0NWVF9DSEFOX0NPVU5ULCAwKTsKK30KKworc3RhdGljIHZvaWQgaGRtaV9zZXRfY2hhbm5lbF9jb3VudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkgICBoZGFfbmlkX3QgbmlkLCBpbnQgY2hzKQoreworCWlmIChjaHMgIT0gaGRtaV9nZXRfY2hhbm5lbF9jb3VudChjb2RlYywgbmlkKSkKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbmlkLCAwLAorCQkJCSAgICBBQ19WRVJCX1NFVF9DVlRfQ0hBTl9DT1VOVCwgY2hzIC0gMSk7Cit9CisKKworLyoKKyAqIENoYW5uZWwgbWFwcGluZyByb3V0aW5lcworICovCisKKy8qCisgKiBDb21wdXRlIGRlcml2ZWQgdmFsdWVzIGluIGNoYW5uZWxfYWxsb2NhdGlvbnNbXS4KKyAqLworc3RhdGljIHZvaWQgaW5pdF9jaGFubmVsX2FsbG9jYXRpb25zKHZvaWQpCit7CisJaW50IGksIGo7CisJc3RydWN0IGNlYV9jaGFubmVsX3NwZWFrZXJfYWxsb2NhdGlvbiAqcDsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNoYW5uZWxfYWxsb2NhdGlvbnMpOyBpKyspIHsKKwkJcCA9IGNoYW5uZWxfYWxsb2NhdGlvbnMgKyBpOworCQlwLT5jaGFubmVscyA9IDA7CisJCXAtPnNwa19tYXNrID0gMDsKKwkJZm9yIChqID0gMDsgaiA8IEFSUkFZX1NJWkUocC0+c3BlYWtlcnMpOyBqKyspCisJCQlpZiAocC0+c3BlYWtlcnNbal0pIHsKKwkJCQlwLT5jaGFubmVscysrOworCQkJCXAtPnNwa19tYXNrIHw9IHAtPnNwZWFrZXJzW2pdOworCQkJfQorCX0KK30KKworLyoKKyAqIFRoZSB0cmFuc2Zvcm1hdGlvbiB0YWtlcyB0d28gc3RlcHM6CisgKgorICoJZWxkLT5zcGtfYWxsb2MgPT4gKGVsZF9zcGVha2VyX2FsbG9jYXRpb25fYml0c1tdKSA9PiBzcGtfbWFzaworICoJICAgICAgc3BrX21hc2sgPT4gKGNoYW5uZWxfYWxsb2NhdGlvbnNbXSkgICAgICAgICA9PiBhaS0+Q0EKKyAqCisgKiBUT0RPOiBpdCBjb3VsZCBzZWxlY3QgdGhlIHdyb25nIENBIGZyb20gbXVsdGlwbGUgY2FuZGlkYXRlcy4KKyovCitzdGF0aWMgaW50IGhkbWlfc2V0dXBfY2hhbm5lbF9hbGxvY2F0aW9uKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJCQkgc3RydWN0IGhkbWlfYXVkaW9faW5mb2ZyYW1lICphaSkKK3sKKwlzdHJ1Y3QgaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGhkbWlfZWxkICplbGQ7CisJaW50IGk7CisJaW50IHNwa19tYXNrID0gMDsKKwlpbnQgY2hhbm5lbHMgPSAxICsgKGFpLT5DQzAyX0NUNDcgJiAweDcpOworCWNoYXIgYnVmW1NORF9QUklOVF9DSEFOTkVMX0FMTE9DQVRJT05fQURWSVNFRF9CVUZTSVpFXTsKKworCS8qCisJICogQ0EgZGVmYXVsdHMgdG8gMCBmb3IgYmFzaWMgc3RlcmVvIGF1ZGlvCisJICovCisJaWYgKGNoYW5uZWxzIDw9IDIpCisJCXJldHVybiAwOworCisJaSA9IGhkYV9ub2RlX2luZGV4KHNwZWMtPnBpbl9jdnQsIG5pZCk7CisJaWYgKGkgPCAwKQorCQlyZXR1cm4gMDsKKwllbGQgPSAmc3BlYy0+c2lua19lbGRbaV07CisKKwkvKgorCSAqIEhETUkgc2luaydzIEVMRCBpbmZvIGNhbm5vdCBhbHdheXMgYmUgcmV0cmlldmVkIGZvciBub3csIGUuZy4KKwkgKiBpbiBjb25zb2xlIG9yIGZvciBhdWRpbyBkZXZpY2VzLiBBc3N1bWUgdGhlIGhpZ2hlc3Qgc3BlYWtlcnMKKwkgKiBjb25maWd1cmF0aW9uLCB0byBfbm90XyBwcm9oaWJpdCBtdWx0aS1jaGFubmVsIGF1ZGlvIHBsYXliYWNrLgorCSAqLworCWlmICghZWxkLT5zcGtfYWxsb2MpCisJCWVsZC0+c3BrX2FsbG9jID0gMHhmZmZmOworCisJLyoKKwkgKiBleHBhbmQgRUxEJ3Mgc3BlYWtlciBhbGxvY2F0aW9uIG1hc2sKKwkgKgorCSAqIEVMRCB0ZWxscyB0aGUgc3BlYWtlciBtYXNrIGluIGEgY29tcGFjdChwYWlyZWQpIGZvcm0sCisJICogZXhwYW5kIEVMRCdzIG5vdGlvbnMgdG8gbWF0Y2ggdGhlIG9uZXMgdXNlZCBieSBBdWRpbyBJbmZvRnJhbWUuCisJICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZWxkX3NwZWFrZXJfYWxsb2NhdGlvbl9iaXRzKTsgaSsrKSB7CisJCWlmIChlbGQtPnNwa19hbGxvYyAmICgxIDw8IGkpKQorCQkJc3BrX21hc2sgfD0gZWxkX3NwZWFrZXJfYWxsb2NhdGlvbl9iaXRzW2ldOworCX0KKworCS8qIHNlYXJjaCBmb3IgdGhlIGZpcnN0IHdvcmtpbmcgbWF0Y2ggaW4gdGhlIENBIHRhYmxlICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2hhbm5lbF9hbGxvY2F0aW9ucyk7IGkrKykgeworCQlpZiAoY2hhbm5lbHMgPT0gY2hhbm5lbF9hbGxvY2F0aW9uc1tpXS5jaGFubmVscyAmJgorCQkgICAgKHNwa19tYXNrICYgY2hhbm5lbF9hbGxvY2F0aW9uc1tpXS5zcGtfbWFzaykgPT0KKwkJCQljaGFubmVsX2FsbG9jYXRpb25zW2ldLnNwa19tYXNrKSB7CisJCQlhaS0+Q0EgPSBjaGFubmVsX2FsbG9jYXRpb25zW2ldLmNhX2luZGV4OworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlzbmRfcHJpbnRfY2hhbm5lbF9hbGxvY2F0aW9uKGVsZC0+c3BrX2FsbG9jLCBidWYsIHNpemVvZihidWYpKTsKKwlzbmRfcHJpbnRkZCgiSERNSTogc2VsZWN0IENBIDB4JXggZm9yICVkLWNoYW5uZWwgYWxsb2NhdGlvbjogJXNcbiIsCisJCSAgICBhaS0+Q0EsIGNoYW5uZWxzLCBidWYpOworCisJcmV0dXJuIGFpLT5DQTsKK30KKworc3RhdGljIHZvaWQgaGRtaV9kZWJ1Z19jaGFubmVsX21hcHBpbmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgICAgIGhkYV9uaWRfdCBwaW5fbmlkKQoreworI2lmZGVmIENPTkZJR19TTkRfREVCVUdfVkVSQk9TRQorCWludCBpOworCWludCBzbG90OworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlzbG90ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBwaW5fbmlkLCAwLAorCQkJCQkJQUNfVkVSQl9HRVRfSERNSV9DSEFOX1NMT1QsIGkpOworCQlwcmludGsoS0VSTl9ERUJVRyAiSERNSTogQVNQIGNoYW5uZWwgJWQgPT4gc2xvdCAlZFxuIiwKKwkJCQkJCXNsb3QgPj4gNCwgc2xvdCAmIDB4Zik7CisJfQorI2VuZGlmCit9CisKKworc3RhdGljIHZvaWQgaGRtaV9zZXR1cF9jaGFubmVsX21hcHBpbmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgICAgIGhkYV9uaWRfdCBwaW5fbmlkLAorCQkJCSAgICAgICBzdHJ1Y3QgaGRtaV9hdWRpb19pbmZvZnJhbWUgKmFpKQoreworCWludCBpOworCWludCBjYSA9IGFpLT5DQTsKKwlpbnQgZXJyOworCisJaWYgKGhkbWlfY2hhbm5lbF9tYXBwaW5nW2NhXVsxXSA9PSAwKSB7CisJCWZvciAoaSA9IDA7IGkgPCBjaGFubmVsX2FsbG9jYXRpb25zW2NhXS5jaGFubmVsczsgaSsrKQorCQkJaGRtaV9jaGFubmVsX21hcHBpbmdbY2FdW2ldID0gaSB8IChpIDw8IDQpOworCQlmb3IgKDsgaSA8IDg7IGkrKykKKwkJCWhkbWlfY2hhbm5lbF9tYXBwaW5nW2NhXVtpXSA9IDB4ZiB8IChpIDw8IDQpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJZXJyID0gc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKKwkJCQkJICBBQ19WRVJCX1NFVF9IRE1JX0NIQU5fU0xPVCwKKwkJCQkJICBoZG1pX2NoYW5uZWxfbWFwcGluZ1tjYV1baV0pOworCQlpZiAoZXJyKSB7CisJCQlzbmRfcHJpbnRkZChLRVJOX05PVElDRQorCQkJCSAgICAiSERNSTogY2hhbm5lbCBtYXBwaW5nIGZhaWxlZFxuIik7CisJCQlicmVhazsKKwkJfQorCX0KKworCWhkbWlfZGVidWdfY2hhbm5lbF9tYXBwaW5nKGNvZGVjLCBwaW5fbmlkKTsKK30KKworCisvKgorICogQXVkaW8gSW5mb0ZyYW1lIHJvdXRpbmVzCisgKi8KKworLyoKKyAqIEVuYWJsZSBBdWRpbyBJbmZvRnJhbWUgVHJhbnNtaXNzaW9uCisgKi8KK3N0YXRpYyB2b2lkIGhkbWlfc3RhcnRfaW5mb2ZyYW1lX3RyYW5zKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgICBoZGFfbmlkX3QgcGluX25pZCkKK3sKKwloZG1pX3NldF9kaXBfaW5kZXgoY29kZWMsIHBpbl9uaWQsIDB4MCwgMHgwKTsKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLCBBQ19WRVJCX1NFVF9IRE1JX0RJUF9YTUlULAorCQkJCQkJQUNfRElQWE1JVF9CRVNUKTsKK30KKworLyoKKyAqIERpc2FibGUgQXVkaW8gSW5mb0ZyYW1lIFRyYW5zbWlzc2lvbgorICovCitzdGF0aWMgdm9pZCBoZG1pX3N0b3BfaW5mb2ZyYW1lX3RyYW5zKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCSAgICAgIGhkYV9uaWRfdCBwaW5fbmlkKQoreworCWhkbWlfc2V0X2RpcF9pbmRleChjb2RlYywgcGluX25pZCwgMHgwLCAweDApOworCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsIEFDX1ZFUkJfU0VUX0hETUlfRElQX1hNSVQsCisJCQkJCQlBQ19ESVBYTUlUX0RJU0FCTEUpOworfQorCitzdGF0aWMgdm9pZCBoZG1pX2RlYnVnX2RpcF9zaXplKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluX25pZCkKK3sKKyNpZmRlZiBDT05GSUdfU05EX0RFQlVHX1ZFUkJPU0UKKwlpbnQgaTsKKwlpbnQgc2l6ZTsKKworCXNpemUgPSBzbmRfaGRtaV9nZXRfZWxkX3NpemUoY29kZWMsIHBpbl9uaWQpOworCXByaW50ayhLRVJOX0RFQlVHICJIRE1JOiBFTEQgYnVmIHNpemUgaXMgJWRcbiIsIHNpemUpOworCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQlzaXplID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBwaW5fbmlkLCAwLAorCQkJCQkJQUNfVkVSQl9HRVRfSERNSV9ESVBfU0laRSwgaSk7CisJCXByaW50ayhLRVJOX0RFQlVHICJIRE1JOiBESVAgR1BbJWRdIGJ1ZiBzaXplIGlzICVkXG4iLCBpLCBzaXplKTsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgaGRtaV9jbGVhcl9kaXBfYnVmZmVycyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbl9uaWQpCit7CisjaWZkZWYgQkVfUEFSQU5PSUQKKwlpbnQgaSwgajsKKwlpbnQgc2l6ZTsKKwlpbnQgcGksIGJpOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJc2l6ZSA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgcGluX25pZCwgMCwKKwkJCQkJCUFDX1ZFUkJfR0VUX0hETUlfRElQX1NJWkUsIGkpOworCQlpZiAoc2l6ZSA9PSAwKQorCQkJY29udGludWU7CisKKwkJaGRtaV9zZXRfZGlwX2luZGV4KGNvZGVjLCBwaW5fbmlkLCBpLCAweDApOworCQlmb3IgKGogPSAxOyBqIDwgMTAwMDsgaisrKSB7CisJCQloZG1pX3dyaXRlX2RpcF9ieXRlKGNvZGVjLCBwaW5fbmlkLCAweDApOworCQkJaGRtaV9nZXRfZGlwX2luZGV4KGNvZGVjLCBwaW5fbmlkLCAmcGksICZiaSk7CisJCQlpZiAocGkgIT0gaSkKKwkJCQlzbmRfcHJpbnRkKEtFUk5fSU5GTyAiZGlwIGluZGV4ICVkOiAlZCAhPSAlZFxuIiwKKwkJCQkJCWJpLCBwaSwgaSk7CisJCQlpZiAoYmkgPT0gMCkgLyogYnl0ZSBpbmRleCB3cmFwcGVkIGFyb3VuZCAqLworCQkJCWJyZWFrOworCQl9CisJCXNuZF9wcmludGQoS0VSTl9JTkZPCisJCQkiSERNSTogRElQIEdQWyVkXSBidWYgcmVwb3J0ZWQgc2l6ZT0lZCwgd3JpdHRlbj0lZFxuIiwKKwkJCWksIHNpemUsIGopOworCX0KKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBoZG1pX2NoZWNrc3VtX2F1ZGlvX2luZm9mcmFtZShzdHJ1Y3QgaGRtaV9hdWRpb19pbmZvZnJhbWUgKmFpKQoreworCXU4ICpieXRlcyA9ICh1OCAqKWFpOworCXU4IHN1bSA9IDA7CisJaW50IGk7CisKKwlhaS0+Y2hlY2tzdW0gPSAwOworCisJZm9yIChpID0gMDsgaSA8IHNpemVvZigqYWkpOyBpKyspCisJCXN1bSArPSBieXRlc1tpXTsKKworCWFpLT5jaGVja3N1bSA9IC1zdW07Cit9CisKK3N0YXRpYyB2b2lkIGhkbWlfZmlsbF9hdWRpb19pbmZvZnJhbWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCisJCQkJICAgICAgaGRhX25pZF90IHBpbl9uaWQsCisJCQkJICAgICAgc3RydWN0IGhkbWlfYXVkaW9faW5mb2ZyYW1lICphaSkKK3sKKwl1OCAqYnl0ZXMgPSAodTggKilhaTsKKwlpbnQgaTsKKworCWhkbWlfZGVidWdfZGlwX3NpemUoY29kZWMsIHBpbl9uaWQpOworCWhkbWlfY2xlYXJfZGlwX2J1ZmZlcnMoY29kZWMsIHBpbl9uaWQpOyAvKiBiZSBwYXJhbm9pZCAqLworCisJaGRtaV9jaGVja3N1bV9hdWRpb19pbmZvZnJhbWUoYWkpOworCisJaGRtaV9zZXRfZGlwX2luZGV4KGNvZGVjLCBwaW5fbmlkLCAweDAsIDB4MCk7CisJZm9yIChpID0gMDsgaSA8IHNpemVvZigqYWkpOyBpKyspCisJCWhkbWlfd3JpdGVfZGlwX2J5dGUoY29kZWMsIHBpbl9uaWQsIGJ5dGVzW2ldKTsKK30KKworc3RhdGljIGJvb2wgaGRtaV9pbmZvZnJhbWVfdXB0b2RhdGUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkLAorCQkJCSAgICBzdHJ1Y3QgaGRtaV9hdWRpb19pbmZvZnJhbWUgKmFpKQoreworCXU4ICpieXRlcyA9ICh1OCAqKWFpOworCXU4IHZhbDsKKwlpbnQgaTsKKworCWlmIChzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIHBpbl9uaWQsIDAsIEFDX1ZFUkJfR0VUX0hETUlfRElQX1hNSVQsIDApCisJCQkJCQkJICAgICE9IEFDX0RJUFhNSVRfQkVTVCkKKwkJcmV0dXJuIGZhbHNlOworCisJaGRtaV9zZXRfZGlwX2luZGV4KGNvZGVjLCBwaW5fbmlkLCAweDAsIDB4MCk7CisJZm9yIChpID0gMDsgaSA8IHNpemVvZigqYWkpOyBpKyspIHsKKwkJdmFsID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBwaW5fbmlkLCAwLAorCQkJCQkgQUNfVkVSQl9HRVRfSERNSV9ESVBfREFUQSwgMCk7CisJCWlmICh2YWwgIT0gYnl0ZXNbaV0pCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGhkbWlfc2V0dXBfYXVkaW9faW5mb2ZyYW1lKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgbmlkLAorCQkJCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaGRhX25pZF90IHBpbl9uaWQ7CisJaW50IGk7CisJc3RydWN0IGhkbWlfYXVkaW9faW5mb2ZyYW1lIGFpID0geworCQkudHlwZQkJPSAweDg0LAorCQkudmVyCQk9IDB4MDEsCisJCS5sZW4JCT0gMHgwYSwKKwkJLkNDMDJfQ1Q0Nwk9IHN1YnN0cmVhbS0+cnVudGltZS0+Y2hhbm5lbHMgLSAxLAorCX07CisKKwloZG1pX3NldHVwX2NoYW5uZWxfYWxsb2NhdGlvbihjb2RlYywgbmlkLCAmYWkpOworCisJZm9yIChpID0gMDsgaSA8IHNwZWMtPm51bV9waW5zOyBpKyspIHsKKwkJaWYgKHNwZWMtPnBpbl9jdnRbaV0gIT0gbmlkKQorCQkJY29udGludWU7CisJCWlmICghc3BlYy0+c2lua19lbGRbaV0ubW9uaXRvcl9wcmVzZW50KQorCQkJY29udGludWU7CisKKwkJcGluX25pZCA9IHNwZWMtPnBpbltpXTsKKwkJaWYgKCFoZG1pX2luZm9mcmFtZV91cHRvZGF0ZShjb2RlYywgcGluX25pZCwgJmFpKSkgeworCQkJc25kX3ByaW50ZGQoImhkbWlfc2V0dXBfYXVkaW9faW5mb2ZyYW1lOiAiCisJCQkJICAgICJjdnQ9JWQgcGluPSVkIGNoYW5uZWxzPSVkXG4iLAorCQkJCSAgICBuaWQsIHBpbl9uaWQsCisJCQkJICAgIHN1YnN0cmVhbS0+cnVudGltZS0+Y2hhbm5lbHMpOworCQkJaGRtaV9zZXR1cF9jaGFubmVsX21hcHBpbmcoY29kZWMsIHBpbl9uaWQsICZhaSk7CisJCQloZG1pX3N0b3BfaW5mb2ZyYW1lX3RyYW5zKGNvZGVjLCBwaW5fbmlkKTsKKwkJCWhkbWlfZmlsbF9hdWRpb19pbmZvZnJhbWUoY29kZWMsIHBpbl9uaWQsICZhaSk7CisJCQloZG1pX3N0YXJ0X2luZm9mcmFtZV90cmFucyhjb2RlYywgcGluX25pZCk7CisJCX0KKwl9Cit9CisKKworLyoKKyAqIFVuc29saWNpdGVkIGV2ZW50cworICovCisKK3N0YXRpYyB2b2lkIGhkbWlfaW50cmluc2ljX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQoreworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgdGFnID0gcmVzID4+IEFDX1VOU09MX1JFU19UQUdfU0hJRlQ7CisJaW50IHBpbmQgPSAhIShyZXMgJiBBQ19VTlNPTF9SRVNfUEQpOworCWludCBlbGR2ID0gISEocmVzICYgQUNfVU5TT0xfUkVTX0VMRFYpOworCWludCBpbmRleDsKKworCXByaW50ayhLRVJOX0lORk8KKwkJIkhETUkgaG90IHBsdWcgZXZlbnQ6IFBpbj0lZCBQcmVzZW5jZV9EZXRlY3Q9JWQgRUxEX1ZhbGlkPSVkXG4iLAorCQl0YWcsIHBpbmQsIGVsZHYpOworCisJaW5kZXggPSBoZGFfbm9kZV9pbmRleChzcGVjLT5waW4sIHRhZyk7CisJaWYgKGluZGV4IDwgMCkKKwkJcmV0dXJuOworCisJc3BlYy0+c2lua19lbGRbaW5kZXhdLm1vbml0b3JfcHJlc2VudCA9IHBpbmQ7CisJc3BlYy0+c2lua19lbGRbaW5kZXhdLmVsZF92YWxpZCA9IGVsZHY7CisKKwlpZiAocGluZCAmJiBlbGR2KSB7CisJCWhkbWlfZ2V0X3Nob3dfZWxkKGNvZGVjLCBzcGVjLT5waW5baW5kZXhdLAorCQkJCSAgJnNwZWMtPnNpbmtfZWxkW2luZGV4XSk7CisJCS8qIFRPRE86IGRvIHJlYWwgdGhpbmdzIGFib3V0IEVMRCAqLworCX0KK30KKworc3RhdGljIHZvaWQgaGRtaV9ub25faW50cmluc2ljX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQoreworCWludCB0YWcgPSByZXMgPj4gQUNfVU5TT0xfUkVTX1RBR19TSElGVDsKKwlpbnQgc3VidGFnID0gKHJlcyAmIEFDX1VOU09MX1JFU19TVUJUQUcpID4+IEFDX1VOU09MX1JFU19TVUJUQUdfU0hJRlQ7CisJaW50IGNwX3N0YXRlID0gISEocmVzICYgQUNfVU5TT0xfUkVTX0NQX1NUQVRFKTsKKwlpbnQgY3BfcmVhZHkgPSAhIShyZXMgJiBBQ19VTlNPTF9SRVNfQ1BfUkVBRFkpOworCisJcHJpbnRrKEtFUk5fSU5GTworCQkiSERNSSBDUCBldmVudDogUElOPSVkIFNVQlRBRz0weCV4IENQX1NUQVRFPSVkIENQX1JFQURZPSVkXG4iLAorCQl0YWcsCisJCXN1YnRhZywKKwkJY3Bfc3RhdGUsCisJCWNwX3JlYWR5KTsKKworCS8qIFRPRE8gKi8KKwlpZiAoY3Bfc3RhdGUpCisJCTsKKwlpZiAoY3BfcmVhZHkpCisJCTsKK30KKworCitzdGF0aWMgdm9pZCBoZG1pX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQoreworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgdGFnID0gcmVzID4+IEFDX1VOU09MX1JFU19UQUdfU0hJRlQ7CisJaW50IHN1YnRhZyA9IChyZXMgJiBBQ19VTlNPTF9SRVNfU1VCVEFHKSA+PiBBQ19VTlNPTF9SRVNfU1VCVEFHX1NISUZUOworCisJaWYgKGhkYV9ub2RlX2luZGV4KHNwZWMtPnBpbiwgdGFnKSA8IDApIHsKKwkJc25kX3ByaW50ZChLRVJOX0lORk8gIlVuZXhwZWN0ZWQgSERNSSBldmVudCB0YWcgMHgleFxuIiwgdGFnKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzdWJ0YWcgPT0gMCkKKwkJaGRtaV9pbnRyaW5zaWNfZXZlbnQoY29kZWMsIHJlcyk7CisJZWxzZQorCQloZG1pX25vbl9pbnRyaW5zaWNfZXZlbnQoY29kZWMsIHJlcyk7Cit9CisKKy8qCisgKiBDYWxsYmFja3MKKyAqLworCitzdGF0aWMgdm9pZCBoZG1pX3NldHVwX3N0cmVhbShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKKwkJCSAgICAgIHUzMiBzdHJlYW1fdGFnLCBpbnQgZm9ybWF0KQoreworCWludCB0YWc7CisJaW50IGZtdDsKKworCXRhZyA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLCBBQ19WRVJCX0dFVF9DT05WLCAwKSA+PiA0OworCWZtdCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLCBBQ19WRVJCX0dFVF9TVFJFQU1fRk9STUFULCAwKTsKKworCXNuZF9wcmludGRkKCJoZG1pX3NldHVwX3N0cmVhbTogIgorCQkgICAgIk5JRD0weCV4LCAlc3N0cmVhbT0weCV4LCAlc2Zvcm1hdD0weCV4XG4iLAorCQkgICAgbmlkLAorCQkgICAgdGFnID09IHN0cmVhbV90YWcgPyAiIiA6ICJuZXctIiwKKwkJICAgIHN0cmVhbV90YWcsCisJCSAgICBmbXQgPT0gZm9ybWF0ID8gIiIgOiAibmV3LSIsCisJCSAgICBmb3JtYXQpOworCisJaWYgKHRhZyAhPSBzdHJlYW1fdGFnKQorCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCisJCQkJICAgIEFDX1ZFUkJfU0VUX0NIQU5ORUxfU1RSRUFNSUQsCisJCQkJICAgIHN0cmVhbV90YWcgPDwgNCk7CisJaWYgKGZtdCAhPSBmb3JtYXQpCisJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKKwkJCQkgICAgQUNfVkVSQl9TRVRfU1RSRUFNX0ZPUk1BVCwgZm9ybWF0KTsKK30KKworLyoKKyAqIEhEQS9IRE1JIGF1dG8gcGFyc2luZworICovCisKK3N0YXRpYyBpbnQgaGRtaV9yZWFkX3Bpbl9jb25uKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluX25pZCkKK3sKKwlzdHJ1Y3QgaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaGRhX25pZF90IGNvbm5fbGlzdFtIREFfTUFYX0NPTk5FQ1RJT05TXTsKKwlpbnQgY29ubl9sZW4sIGN1cnI7CisJaW50IGluZGV4OworCisJaWYgKCEoZ2V0X3djYXBzKGNvZGVjLCBwaW5fbmlkKSAmIEFDX1dDQVBfQ09OTl9MSVNUKSkgeworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORworCQkJICAgIkhETUk6IHBpbiAlZCB3Y2FwcyAlI3ggIgorCQkJICAgImRvZXMgbm90IHN1cHBvcnQgY29ubmVjdGlvbiBsaXN0XG4iLAorCQkJICAgcGluX25pZCwgZ2V0X3djYXBzKGNvZGVjLCBwaW5fbmlkKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWNvbm5fbGVuID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIHBpbl9uaWQsIGNvbm5fbGlzdCwKKwkJCQkJICAgSERBX01BWF9DT05ORUNUSU9OUyk7CisJaWYgKGNvbm5fbGVuID4gMSkKKwkJY3VyciA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgcGluX25pZCwgMCwKKwkJCQkJICBBQ19WRVJCX0dFVF9DT05ORUNUX1NFTCwgMCk7CisJZWxzZQorCQljdXJyID0gMDsKKworCWluZGV4ID0gaGRhX25vZGVfaW5kZXgoc3BlYy0+cGluLCBwaW5fbmlkKTsKKwlpZiAoaW5kZXggPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXNwZWMtPnBpbl9jdnRbaW5kZXhdID0gY29ubl9saXN0W2N1cnJdOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGhkbWlfcHJlc2VudF9zZW5zZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbl9uaWQsCisJCQkgICAgICAgc3RydWN0IGhkbWlfZWxkICplbGQpCit7CisJaW50IHByZXNlbnQgPSBzbmRfaGRhX3Bpbl9zZW5zZShjb2RlYywgcGluX25pZCk7CisKKwllbGQtPm1vbml0b3JfcHJlc2VudAk9ICEhKHByZXNlbnQgJiBBQ19QSU5TRU5TRV9QUkVTRU5DRSk7CisJZWxkLT5lbGRfdmFsaWQJCT0gISEocHJlc2VudCAmIEFDX1BJTlNFTlNFX0VMRFYpOworCisJaWYgKHByZXNlbnQgJiBBQ19QSU5TRU5TRV9FTERWKQorCQloZG1pX2dldF9zaG93X2VsZChjb2RlYywgcGluX25pZCwgZWxkKTsKK30KKworc3RhdGljIGludCBoZG1pX2FkZF9waW4oc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkKQoreworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKworCWlmIChzcGVjLT5udW1fcGlucyA+PSBNQVhfSERNSV9QSU5TKSB7CisJCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCisJCQkgICAiSERNSTogbm8gc3BhY2UgZm9yIHBpbiAlZFxuIiwgcGluX25pZCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWhkbWlfcHJlc2VudF9zZW5zZShjb2RlYywgcGluX25pZCwgJnNwZWMtPnNpbmtfZWxkW3NwZWMtPm51bV9waW5zXSk7CisKKwlzcGVjLT5waW5bc3BlYy0+bnVtX3BpbnNdID0gcGluX25pZDsKKwlzcGVjLT5udW1fcGlucysrOworCisJLyoKKwkgKiBJdCBpcyBhc3N1bWVkIHRoYXQgY29udmVydGVyIG5vZGVzIGNvbWUgZmlyc3QgaW4gdGhlIG5vZGUgbGlzdCBhbmQKKwkgKiBoZW5jZSBoYXZlIGJlZW4gcmVnaXN0ZXJlZCBhbmQgdXNhYmxlIG5vdy4KKwkgKi8KKwlyZXR1cm4gaGRtaV9yZWFkX3Bpbl9jb25uKGNvZGVjLCBwaW5fbmlkKTsKK30KKworc3RhdGljIGludCBoZG1pX2FkZF9jdnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCit7CisJc3RydWN0IGhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCisJaWYgKHNwZWMtPm51bV9jdnRzID49IE1BWF9IRE1JX0NWVFMpIHsKKwkJc25kX3ByaW50ayhLRVJOX1dBUk5JTkcKKwkJCSAgICJIRE1JOiBubyBzcGFjZSBmb3IgY29udmVydGVyICVkXG4iLCBuaWQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzcGVjLT5jdnRbc3BlYy0+bnVtX2N2dHNdID0gbmlkOworCXNwZWMtPm51bV9jdnRzKys7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoZG1pX3BhcnNlX2NvZGVjKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCWhkYV9uaWRfdCBuaWQ7CisJaW50IGksIG5vZGVzOworCisJbm9kZXMgPSBzbmRfaGRhX2dldF9zdWJfbm9kZXMoY29kZWMsIGNvZGVjLT5hZmcsICZuaWQpOworCWlmICghbmlkIHx8IG5vZGVzIDwgMCkgeworCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORyAiSERNSTogZmFpbGVkIHRvIGdldCBhZmcgc3ViIG5vZGVzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZm9yIChpID0gMDsgaSA8IG5vZGVzOyBpKyssIG5pZCsrKSB7CisJCXVuc2lnbmVkIGludCBjYXBzOworCQl1bnNpZ25lZCBpbnQgdHlwZTsKKworCQljYXBzID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9BVURJT19XSURHRVRfQ0FQKTsKKwkJdHlwZSA9IGdldF93Y2Fwc190eXBlKGNhcHMpOworCisJCWlmICghKGNhcHMgJiBBQ19XQ0FQX0RJR0lUQUwpKQorCQkJY29udGludWU7CisKKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgQUNfV0lEX0FVRF9PVVQ6CisJCQlpZiAoaGRtaV9hZGRfY3Z0KGNvZGVjLCBuaWQpIDwgMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCWJyZWFrOworCQljYXNlIEFDX1dJRF9QSU46CisJCQljYXBzID0gc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBuaWQsIEFDX1BBUl9QSU5fQ0FQKTsKKwkJCWlmICghKGNhcHMgJiAoQUNfUElOQ0FQX0hETUkgfCBBQ19QSU5DQVBfRFApKSkKKwkJCQljb250aW51ZTsKKwkJCWlmIChoZG1pX2FkZF9waW4oY29kZWMsIG5pZCkgPCAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwkvKgorCSAqIEc0NS9JYmV4UGVhayBkb24ndCBzdXBwb3J0IEVQU1M6IHRoZSB1bnNvbGljaXRlZCBwaW4gaG90IHBsdWcgZXZlbnQKKwkgKiBjYW4gYmUgbG9zdCBhbmQgcHJlc2VuY2Ugc2Vuc2UgdmVyYiB3aWxsIGJlY29tZSBpbmFjY3VyYXRlIGlmIHRoZQorCSAqIEhEQSBsaW5rIGlzIHBvd2VyZWQgb2ZmIGF0IGhvdCBwbHVnIG9yIGh3IGluaXRpYWxpemF0aW9uIHRpbWUuCisJICovCisjaWZkZWYgQ09ORklHX1NORF9IREFfUE9XRVJfU0FWRQorCWlmICghKHNuZF9oZGFfcGFyYW1fcmVhZChjb2RlYywgY29kZWMtPmFmZywgQUNfUEFSX1BPV0VSX1NUQVRFKSAmCisJICAgICAgQUNfUFdSU1RfRVBTUykpCisJCWNvZGVjLT5idXMtPnBvd2VyX2tlZXBfbGlua19vbiA9IDE7CisjZW5kaWYKKworCXJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2ludGVsaGRtaS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9pbnRlbGhkbWkuYwppbmRleCA5MThmNDAzLi44OGQwMzUxIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX2ludGVsaGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfaW50ZWxoZG1pLmMKQEAgLTQwLDgxNCArNDAsMTkgQEAKICAqCiAgKiBUaGUgSERBIGNvcnJlc3BvbmRlbmNlIG9mIHBpcGVzL3BvcnRzIGFyZSBjb252ZXJ0ZXIvcGluIG5vZGVzLgogICovCi0jZGVmaW5lIElOVEVMX0hETUlfQ1ZUUwkyCi0jZGVmaW5lIElOVEVMX0hETUlfUElOUwkzCisjZGVmaW5lIE1BWF9IRE1JX0NWVFMJMgorI2RlZmluZSBNQVhfSERNSV9QSU5TCTMKIAotc3RhdGljIGNoYXIgKmludGVsX2hkbWlfcGNtX25hbWVzW0lOVEVMX0hETUlfQ1ZUU10gPSB7CisjaW5jbHVkZSAicGF0Y2hfaGRtaS5jIgorCitzdGF0aWMgY2hhciAqaW50ZWxfaGRtaV9wY21fbmFtZXNbTUFYX0hETUlfQ1ZUU10gPSB7CiAJIklOVEVMIEhETUkgMCIsCiAJIklOVEVMIEhETUkgMSIsCiB9OwogCi1zdHJ1Y3QgaW50ZWxfaGRtaV9zcGVjIHsKLQlpbnQgbnVtX2N2dHM7Ci0JaW50IG51bV9waW5zOwotCWhkYV9uaWRfdCBjdnRbSU5URUxfSERNSV9DVlRTKzFdOyAgLyogYXVkaW8gc291cmNlcyAqLwotCWhkYV9uaWRfdCBwaW5bSU5URUxfSERNSV9QSU5TKzFdOyAgLyogYXVkaW8gc2lua3MgKi8KLQotCS8qCi0JICogc291cmNlIGNvbm5lY3Rpb24gZm9yIGVhY2ggcGluCi0JICovCi0JaGRhX25pZF90IHBpbl9jdnRbSU5URUxfSERNSV9QSU5TKzFdOwotCi0JLyoKLQkgKiBIRE1JIHNpbmsgYXR0YWNoZWQgdG8gZWFjaCBwaW4KLQkgKi8KLQlzdHJ1Y3QgaGRtaV9lbGQgc2lua19lbGRbSU5URUxfSERNSV9QSU5TXTsKLQotCS8qCi0JICogZXhwb3J0IG9uZSBwY20gcGVyIHBpcGUKLQkgKi8KLQlzdHJ1Y3QgaGRhX3BjbQlwY21fcmVjW0lOVEVMX0hETUlfQ1ZUU107Ci19OwotCi1zdHJ1Y3QgaGRtaV9hdWRpb19pbmZvZnJhbWUgewotCXU4IHR5cGU7IC8qIDB4ODQgKi8KLQl1OCB2ZXI7ICAvKiAweDAxICovCi0JdTggbGVuOyAgLyogMHgwYSAqLwotCi0JdTggY2hlY2tzdW07CS8qIFBCMCAqLwotCXU4IENDMDJfQ1Q0NzsJLyogQ0MgaW4gYml0cyAwOjIsIENUIGluIDQ6NyAqLwotCXU4IFNTMDFfU0YyNDsKLQl1OCBDWFQwNDsKLQl1OCBDQTsKLQl1OCBMRkVQQkwwMV9MU1YzNl9ETV9JTkg3OwotCXU4IHJlc2VydmVkWzVdOwkvKiBQQjYgLSBQQjEwICovCi19OwotCiAvKgotICogQ0VBIHNwZWFrZXIgcGxhY2VtZW50OgotICoKLSAqICAgICAgICBGTEggICAgICAgRkNIICAgICAgICBGUkgKLSAqICBGTFcgICAgRkwgIEZMQyAgIEZDICAgRlJDICAgRlIgICBGUlcKLSAqCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRkUKLSAqICAgICAgICAgICAgICAgICAgICAgVEMKLSAqCi0gKiAgICAgICAgICBSTCAgUkxDICAgUkMgICBSUkMgICBSUgotICoKLSAqIFRoZSBMZWZ0L1JpZ2h0IFN1cnJvdW5kIGNoYW5uZWwgX25vdGlvbnNfIExTL1JTIGluIFNNUFRFIDMyME0gY29ycmVzcG9uZHMgdG8KLSAqIENFQSBSTC9SUjsgVGhlIFNNUFRFIGNoYW5uZWwgX2Fzc2lnbm1lbnRfIEMvTEZFIGlzIHN3YXBwZWQgdG8gQ0VBIExGRS9GQy4KKyAqIEhETUkgY2FsbGJhY2tzCiAgKi8KLWVudW0gY2VhX3NwZWFrZXJfcGxhY2VtZW50IHsKLQlGTCAgPSAoMSA8PCAgMCksCS8qIEZyb250IExlZnQgICAgICAgICAgICovCi0JRkMgID0gKDEgPDwgIDEpLAkvKiBGcm9udCBDZW50ZXIgICAgICAgICAqLwotCUZSICA9ICgxIDw8ICAyKSwJLyogRnJvbnQgUmlnaHQgICAgICAgICAgKi8KLQlGTEMgPSAoMSA8PCAgMyksCS8qIEZyb250IExlZnQgQ2VudGVyICAgICovCi0JRlJDID0gKDEgPDwgIDQpLAkvKiBGcm9udCBSaWdodCBDZW50ZXIgICAqLwotCVJMICA9ICgxIDw8ICA1KSwJLyogUmVhciBMZWZ0ICAgICAgICAgICAgKi8KLQlSQyAgPSAoMSA8PCAgNiksCS8qIFJlYXIgQ2VudGVyICAgICAgICAgICovCi0JUlIgID0gKDEgPDwgIDcpLAkvKiBSZWFyIFJpZ2h0ICAgICAgICAgICAqLwotCVJMQyA9ICgxIDw8ICA4KSwJLyogUmVhciBMZWZ0IENlbnRlciAgICAgKi8KLQlSUkMgPSAoMSA8PCAgOSksCS8qIFJlYXIgUmlnaHQgQ2VudGVyICAgICovCi0JTEZFID0gKDEgPDwgMTApLAkvKiBMb3cgRnJlcXVlbmN5IEVmZmVjdCAqLwotCUZMVyA9ICgxIDw8IDExKSwJLyogRnJvbnQgTGVmdCBXaWRlICAgICAgKi8KLQlGUlcgPSAoMSA8PCAxMiksCS8qIEZyb250IFJpZ2h0IFdpZGUgICAgICovCi0JRkxIID0gKDEgPDwgMTMpLAkvKiBGcm9udCBMZWZ0IEhpZ2ggICAgICAqLwotCUZDSCA9ICgxIDw8IDE0KSwJLyogRnJvbnQgQ2VudGVyIEhpZ2ggICAgKi8KLQlGUkggPSAoMSA8PCAxNSksCS8qIEZyb250IFJpZ2h0IEhpZ2ggICAgICovCi0JVEMgID0gKDEgPDwgMTYpLAkvKiBUb3AgQ2VudGVyICAgICAgICAgICAqLwotfTsKLQotLyoKLSAqIEVMRCBTQSBiaXRzIGluIHRoZSBDRUEgU3BlYWtlciBBbGxvY2F0aW9uIGRhdGEgYmxvY2sKLSAqLwotc3RhdGljIGludCBlbGRfc3BlYWtlcl9hbGxvY2F0aW9uX2JpdHNbXSA9IHsKLQlbMF0gPSBGTCB8IEZSLAotCVsxXSA9IExGRSwKLQlbMl0gPSBGQywKLQlbM10gPSBSTCB8IFJSLAotCVs0XSA9IFJDLAotCVs1XSA9IEZMQyB8IEZSQywKLQlbNl0gPSBSTEMgfCBSUkMsCi0JLyogdGhlIGZvbGxvd2luZyBhcmUgbm90IGRlZmluZWQgaW4gRUxEIHlldCAqLwotCVs3XSA9IEZMVyB8IEZSVywKLQlbOF0gPSBGTEggfCBGUkgsCi0JWzldID0gVEMsCi0JWzEwXSA9IEZDSCwKLX07Ci0KLXN0cnVjdCBjZWFfY2hhbm5lbF9zcGVha2VyX2FsbG9jYXRpb24gewotCWludCBjYV9pbmRleDsKLQlpbnQgc3BlYWtlcnNbOF07Ci0KLQkvKiBkZXJpdmVkIHZhbHVlcywganVzdCBmb3IgY29udmVuaWVuY2UgKi8KLQlpbnQgY2hhbm5lbHM7Ci0JaW50IHNwa19tYXNrOwotfTsKLQotLyoKLSAqIEFMU0Egc2VxdWVuY2UgaXM6Ci0gKgotICogICAgICAgc3Vycm91bmQ0MCAgIHN1cnJvdW5kNDEgICBzdXJyb3VuZDUwICAgc3Vycm91bmQ1MSAgIHN1cnJvdW5kNzEKLSAqIGNoMCAgIGZyb250IGxlZnQgICA9ICAgICAgICAgICAgPSAgICAgICAgICAgID0gICAgICAgICAgICA9Ci0gKiBjaDEgICBmcm9udCByaWdodCAgPSAgICAgICAgICAgID0gICAgICAgICAgICA9ICAgICAgICAgICAgPQotICogY2gyICAgcmVhciBsZWZ0ICAgID0gICAgICAgICAgICA9ICAgICAgICAgICAgPSAgICAgICAgICAgID0KLSAqIGNoMyAgIHJlYXIgcmlnaHQgICA9ICAgICAgICAgICAgPSAgICAgICAgICAgID0gICAgICAgICAgICA9Ci0gKiBjaDQgICAgICAgICAgICAgICAgTEZFICAgICAgICAgIGNlbnRlciAgICAgICBjZW50ZXIgICAgICAgY2VudGVyCi0gKiBjaDUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRkUgICAgICAgICAgTEZFCi0gKiBjaDYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZSBsZWZ0Ci0gKiBjaDcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZSByaWdodAotICoKLSAqIHN1cnJvdW5kNzEgPSB7RkwsIEZSLCBSTEMsIFJSQywgRkMsIExGRSwgUkwsIFJSfQotICovCi1zdGF0aWMgaW50IGhkbWlfY2hhbm5lbF9tYXBwaW5nWzB4MzJdWzhdID0gewotCS8qIHN0ZXJlbyAqLwotCVsweDAwXSA9IHsgMHgwMCwgMHgxMSwgMHhmMiwgMHhmMywgMHhmNCwgMHhmNSwgMHhmNiwgMHhmNyB9LAotCS8qIDIuMSAqLwotCVsweDAxXSA9IHsgMHgwMCwgMHgxMSwgMHgyMiwgMHhmMywgMHhmNCwgMHhmNSwgMHhmNiwgMHhmNyB9LAotCS8qIERvbGJ5IFN1cnJvdW5kICovCi0JWzB4MDJdID0geyAweDAwLCAweDExLCAweDIzLCAweGYyLCAweGY0LCAweGY1LCAweGY2LCAweGY3IH0sCi0JLyogc3Vycm91bmQ0MCAqLwotCVsweDA4XSA9IHsgMHgwMCwgMHgxMSwgMHgyNCwgMHgzNSwgMHhmMywgMHhmMiwgMHhmNiwgMHhmNyB9LAotCS8qIDRjaCAqLwotCVsweDAzXSA9IHsgMHgwMCwgMHgxMSwgMHgyMywgMHgzMiwgMHg0NCwgMHhmNSwgMHhmNiwgMHhmNyB9LAotCS8qIHN1cnJvdW5kNDEgKi8KLQlbMHgwOV0gPSB7IDB4MDAsIDB4MTEsIDB4MjQsIDB4MzQsIDB4NDMsIDB4ZjIsIDB4ZjYsIDB4ZjcgfSwKLQkvKiBzdXJyb3VuZDUwICovCi0JWzB4MGFdID0geyAweDAwLCAweDExLCAweDI0LCAweDM1LCAweDQzLCAweGYyLCAweGY2LCAweGY3IH0sCi0JLyogc3Vycm91bmQ1MSAqLwotCVsweDBiXSA9IHsgMHgwMCwgMHgxMSwgMHgyNCwgMHgzNSwgMHg0MywgMHg1MiwgMHhmNiwgMHhmNyB9LAotCS8qIDcuMSAqLwotCVsweDEzXSA9IHsgMHgwMCwgMHgxMSwgMHgyNiwgMHgzNywgMHg0MywgMHg1MiwgMHg2NCwgMHg3NSB9LAotfTsKLQotLyoKLSAqIFRoaXMgaXMgYW4gb3JkZXJlZCBsaXN0IQotICoKLSAqIFRoZSBwcmVjZWRpbmcgb25lcyBoYXZlIGJldHRlciBjaGFuY2VzIHRvIGJlIHNlbGVjdGVkIGJ5Ci0gKiBoZG1pX3NldHVwX2NoYW5uZWxfYWxsb2NhdGlvbigpLgotICovCi1zdGF0aWMgc3RydWN0IGNlYV9jaGFubmVsX3NwZWFrZXJfYWxsb2NhdGlvbiBjaGFubmVsX2FsbG9jYXRpb25zW10gPSB7Ci0vKiAJCQkgIGNoYW5uZWw6ICAgNyAgICAgNiAgICA1ICAgIDQgICAgMyAgICAgMiAgICAxICAgIDAgICovCi17IC5jYV9pbmRleCA9IDB4MDAsICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgICAwLCAgIDAsICAgMCwgICAgMCwgIEZSLCAgRkwgfSB9LAotCQkJCSAvKiAyLjEgKi8KLXsgLmNhX2luZGV4ID0gMHgwMSwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgIDAsICAgMCwgICAwLCAgTEZFLCAgRlIsICBGTCB9IH0sCi0JCQkJIC8qIERvbGJ5IFN1cnJvdW5kICovCi17IC5jYV9pbmRleCA9IDB4MDIsICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgICAwLCAgIDAsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAotCQkJCSAvKiBzdXJyb3VuZDQwICovCi17IC5jYV9pbmRleCA9IDB4MDgsICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgIFJSLCAgUkwsICAgMCwgICAgMCwgIEZSLCAgRkwgfSB9LAotCQkJCSAvKiBzdXJyb3VuZDQxICovCi17IC5jYV9pbmRleCA9IDB4MDksICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgIFJSLCAgUkwsICAgMCwgIExGRSwgIEZSLCAgRkwgfSB9LAotCQkJCSAvKiBzdXJyb3VuZDUwICovCi17IC5jYV9pbmRleCA9IDB4MGEsICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgIFJSLCAgUkwsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAotCQkJCSAvKiBzdXJyb3VuZDUxICovCi17IC5jYV9pbmRleCA9IDB4MGIsICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgIFJSLCAgUkwsICBGQywgIExGRSwgIEZSLCAgRkwgfSB9LAotCQkJCSAvKiA2LjEgKi8KLXsgLmNhX2luZGV4ID0gMHgwZiwgIC5zcGVha2VycyA9IHsgICAwLCAgIFJDLCAgUlIsICBSTCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCi0JCQkJIC8qIHN1cnJvdW5kNzEgKi8KLXsgLmNhX2luZGV4ID0gMHgxMywgIC5zcGVha2VycyA9IHsgUlJDLCAgUkxDLCAgUlIsICBSTCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCi0KLXsgLmNhX2luZGV4ID0gMHgwMywgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgIDAsICAgMCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MDQsICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgICAwLCAgUkMsICAgMCwgICAgMCwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDA1LCAgLnNwZWFrZXJzID0geyAgIDAsICAgIDAsICAgMCwgIFJDLCAgIDAsICBMRkUsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgwNiwgIC5zcGVha2VycyA9IHsgICAwLCAgICAwLCAgIDAsICBSQywgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MDcsICAuc3BlYWtlcnMgPSB7ICAgMCwgICAgMCwgICAwLCAgUkMsICBGQywgIExGRSwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDBjLCAgLnNwZWFrZXJzID0geyAgIDAsICAgUkMsICBSUiwgIFJMLCAgIDAsICAgIDAsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgwZCwgIC5zcGVha2VycyA9IHsgICAwLCAgIFJDLCAgUlIsICBSTCwgICAwLCAgTEZFLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MGUsICAuc3BlYWtlcnMgPSB7ICAgMCwgICBSQywgIFJSLCAgUkwsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDEwLCAgLnNwZWFrZXJzID0geyBSUkMsICBSTEMsICBSUiwgIFJMLCAgIDAsICAgIDAsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgxMSwgIC5zcGVha2VycyA9IHsgUlJDLCAgUkxDLCAgUlIsICBSTCwgICAwLCAgTEZFLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MTIsICAuc3BlYWtlcnMgPSB7IFJSQywgIFJMQywgIFJSLCAgUkwsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDE0LCAgLnNwZWFrZXJzID0geyBGUkMsICBGTEMsICAgMCwgICAwLCAgIDAsICAgIDAsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgxNSwgIC5zcGVha2VycyA9IHsgRlJDLCAgRkxDLCAgIDAsICAgMCwgICAwLCAgTEZFLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MTYsICAuc3BlYWtlcnMgPSB7IEZSQywgIEZMQywgICAwLCAgIDAsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDE3LCAgLnNwZWFrZXJzID0geyBGUkMsICBGTEMsICAgMCwgICAwLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgxOCwgIC5zcGVha2VycyA9IHsgRlJDLCAgRkxDLCAgIDAsICBSQywgICAwLCAgICAwLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MTksICAuc3BlYWtlcnMgPSB7IEZSQywgIEZMQywgICAwLCAgUkMsICAgMCwgIExGRSwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDFhLCAgLnNwZWFrZXJzID0geyBGUkMsICBGTEMsICAgMCwgIFJDLCAgRkMsICAgIDAsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgxYiwgIC5zcGVha2VycyA9IHsgRlJDLCAgRkxDLCAgIDAsICBSQywgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MWMsICAuc3BlYWtlcnMgPSB7IEZSQywgIEZMQywgIFJSLCAgUkwsICAgMCwgICAgMCwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDFkLCAgLnNwZWFrZXJzID0geyBGUkMsICBGTEMsICBSUiwgIFJMLCAgIDAsICBMRkUsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgxZSwgIC5zcGVha2VycyA9IHsgRlJDLCAgRkxDLCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MWYsICAuc3BlYWtlcnMgPSB7IEZSQywgIEZMQywgIFJSLCAgUkwsICBGQywgIExGRSwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDIwLCAgLnNwZWFrZXJzID0geyAgIDAsICBGQ0gsICBSUiwgIFJMLCAgRkMsICAgIDAsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgyMSwgIC5zcGVha2VycyA9IHsgICAwLCAgRkNILCAgUlIsICBSTCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MjIsICAuc3BlYWtlcnMgPSB7ICBUQywgICAgMCwgIFJSLCAgUkwsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDIzLCAgLnNwZWFrZXJzID0geyAgVEMsICAgIDAsICBSUiwgIFJMLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgyNCwgIC5zcGVha2VycyA9IHsgRlJILCAgRkxILCAgUlIsICBSTCwgICAwLCAgICAwLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MjUsICAuc3BlYWtlcnMgPSB7IEZSSCwgIEZMSCwgIFJSLCAgUkwsICAgMCwgIExGRSwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDI2LCAgLnNwZWFrZXJzID0geyBGUlcsICBGTFcsICBSUiwgIFJMLCAgIDAsICAgIDAsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgyNywgIC5zcGVha2VycyA9IHsgRlJXLCAgRkxXLCAgUlIsICBSTCwgICAwLCAgTEZFLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MjgsICAuc3BlYWtlcnMgPSB7ICBUQywgICBSQywgIFJSLCAgUkwsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDI5LCAgLnNwZWFrZXJzID0geyAgVEMsICAgUkMsICBSUiwgIFJMLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgyYSwgIC5zcGVha2VycyA9IHsgRkNILCAgIFJDLCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MmIsICAuc3BlYWtlcnMgPSB7IEZDSCwgICBSQywgIFJSLCAgUkwsICBGQywgIExGRSwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDJjLCAgLnNwZWFrZXJzID0geyAgVEMsICBGQ0gsICBSUiwgIFJMLCAgRkMsICAgIDAsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgyZCwgIC5zcGVha2VycyA9IHsgIFRDLCAgRkNILCAgUlIsICBSTCwgIEZDLCAgTEZFLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MmUsICAuc3BlYWtlcnMgPSB7IEZSSCwgIEZMSCwgIFJSLCAgUkwsICBGQywgICAgMCwgIEZSLCAgRkwgfSB9LAoteyAuY2FfaW5kZXggPSAweDJmLCAgLnNwZWFrZXJzID0geyBGUkgsICBGTEgsICBSUiwgIFJMLCAgRkMsICBMRkUsICBGUiwgIEZMIH0gfSwKLXsgLmNhX2luZGV4ID0gMHgzMCwgIC5zcGVha2VycyA9IHsgRlJXLCAgRkxXLCAgUlIsICBSTCwgIEZDLCAgICAwLCAgRlIsICBGTCB9IH0sCi17IC5jYV9pbmRleCA9IDB4MzEsICAuc3BlYWtlcnMgPSB7IEZSVywgIEZMVywgIFJSLCAgUkwsICBGQywgIExGRSwgIEZSLCAgRkwgfSB9LAotfTsKLQotLyoKLSAqIEhEQS9IRE1JIGF1dG8gcGFyc2luZwotICovCi0KLXN0YXRpYyBpbnQgaGRhX25vZGVfaW5kZXgoaGRhX25pZF90ICpuaWRzLCBoZGFfbmlkX3QgbmlkKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgbmlkc1tpXTsgaSsrKQotCQlpZiAobmlkc1tpXSA9PSBuaWQpCi0JCQlyZXR1cm4gaTsKLQotCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJIRE1JOiBuaWQgJWQgbm90IHJlZ2lzdGVyZWRcbiIsIG5pZCk7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLXN0YXRpYyBpbnQgaW50ZWxfaGRtaV9yZWFkX3Bpbl9jb25uKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluX25pZCkKLXsKLQlzdHJ1Y3QgaW50ZWxfaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaGRhX25pZF90IGNvbm5fbGlzdFtIREFfTUFYX0NPTk5FQ1RJT05TXTsKLQlpbnQgY29ubl9sZW4sIGN1cnI7Ci0JaW50IGluZGV4OwotCi0JaWYgKCEoZ2V0X3djYXBzKGNvZGVjLCBwaW5fbmlkKSAmIEFDX1dDQVBfQ09OTl9MSVNUKSkgewotCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgIkhETUk6IHBpbiAlZCB3Y2FwcyAlI3ggIgotCQkJICAgImRvZXMgbm90IHN1cHBvcnQgY29ubmVjdGlvbiBsaXN0XG4iLAotCQkJICAgcGluX25pZCwgZ2V0X3djYXBzKGNvZGVjLCBwaW5fbmlkKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCWNvbm5fbGVuID0gc25kX2hkYV9nZXRfY29ubmVjdGlvbnMoY29kZWMsIHBpbl9uaWQsIGNvbm5fbGlzdCwKLQkJCQkJICAgSERBX01BWF9DT05ORUNUSU9OUyk7Ci0JaWYgKGNvbm5fbGVuID4gMSkKLQkJY3VyciA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgcGluX25pZCwgMCwKLQkJCQkJICBBQ19WRVJCX0dFVF9DT05ORUNUX1NFTCwgMCk7Ci0JZWxzZQotCQljdXJyID0gMDsKLQotCWluZGV4ID0gaGRhX25vZGVfaW5kZXgoc3BlYy0+cGluLCBwaW5fbmlkKTsKLQlpZiAoaW5kZXggPCAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXNwZWMtPnBpbl9jdnRbaW5kZXhdID0gY29ubl9saXN0W2N1cnJdOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGhkbWlfZ2V0X3Nob3dfZWxkKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluX25pZCwKLQkJCSAgICAgIHN0cnVjdCBoZG1pX2VsZCAqZWxkKQotewotCWlmICghc25kX2hkbWlfZ2V0X2VsZChlbGQsIGNvZGVjLCBwaW5fbmlkKSkKLQkJc25kX2hkbWlfc2hvd19lbGQoZWxkKTsKLX0KLQotc3RhdGljIHZvaWQgaGRtaV9wcmVzZW50X3NlbnNlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluX25pZCwKLQkJCSAgICAgICBzdHJ1Y3QgaGRtaV9lbGQgKmVsZCkKLXsKLQlpbnQgcHJlc2VudCA9IHNuZF9oZGFfcGluX3NlbnNlKGNvZGVjLCBwaW5fbmlkKTsKLQotCWVsZC0+bW9uaXRvcl9wcmVzZW50CT0gISEocHJlc2VudCAmIEFDX1BJTlNFTlNFX1BSRVNFTkNFKTsKLQllbGQtPmVsZF92YWxpZAkJPSAhIShwcmVzZW50ICYgQUNfUElOU0VOU0VfRUxEVik7Ci0KLQlpZiAocHJlc2VudCAmIEFDX1BJTlNFTlNFX0VMRFYpCi0JCWhkbWlfZ2V0X3Nob3dfZWxkKGNvZGVjLCBwaW5fbmlkLCBlbGQpOwotfQotCi1zdGF0aWMgaW50IGludGVsX2hkbWlfYWRkX3BpbihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IHBpbl9uaWQpCi17Ci0Jc3RydWN0IGludGVsX2hkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCi0JaWYgKHNwZWMtPm51bV9waW5zID49IElOVEVMX0hETUlfUElOUykgewotCQlzbmRfcHJpbnRrKEtFUk5fV0FSTklORwotCQkJICAgIkhETUk6IG5vIHNwYWNlIGZvciBwaW4gJWQgXG4iLCBwaW5fbmlkKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaGRtaV9wcmVzZW50X3NlbnNlKGNvZGVjLCBwaW5fbmlkLCAmc3BlYy0+c2lua19lbGRbc3BlYy0+bnVtX3BpbnNdKTsKLQotCXNwZWMtPnBpbltzcGVjLT5udW1fcGluc10gPSBwaW5fbmlkOwotCXNwZWMtPm51bV9waW5zKys7Ci0KLQkvKgotCSAqIEl0IGlzIGFzc3VtZWQgdGhhdCBjb252ZXJ0ZXIgbm9kZXMgY29tZSBmaXJzdCBpbiB0aGUgbm9kZSBsaXN0IGFuZAotCSAqIGhlbmNlIGhhdmUgYmVlbiByZWdpc3RlcmVkIGFuZCB1c2FibGUgbm93LgotCSAqLwotCXJldHVybiBpbnRlbF9oZG1pX3JlYWRfcGluX2Nvbm4oY29kZWMsIHBpbl9uaWQpOwotfQotCi1zdGF0aWMgaW50IGludGVsX2hkbWlfYWRkX2N2dChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCkKLXsKLQlzdHJ1Y3QgaW50ZWxfaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0KLQlpZiAoc3BlYy0+bnVtX2N2dHMgPj0gSU5URUxfSERNSV9DVlRTKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HCi0JCQkgICAiSERNSTogbm8gc3BhY2UgZm9yIGNvbnZlcnRlciAlZCBcbiIsIG5pZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXNwZWMtPmN2dFtzcGVjLT5udW1fY3Z0c10gPSBuaWQ7Ci0Jc3BlYy0+bnVtX2N2dHMrKzsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGludGVsX2hkbWlfcGFyc2VfY29kZWMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCi17Ci0JaGRhX25pZF90IG5pZDsKLQlpbnQgaSwgbm9kZXM7Ci0KLQlub2RlcyA9IHNuZF9oZGFfZ2V0X3N1Yl9ub2Rlcyhjb2RlYywgY29kZWMtPmFmZywgJm5pZCk7Ci0JaWYgKCFuaWQgfHwgbm9kZXMgPCAwKSB7Ci0JCXNuZF9wcmludGsoS0VSTl9XQVJOSU5HICJIRE1JOiBmYWlsZWQgdG8gZ2V0IGFmZyBzdWIgbm9kZXNcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbm9kZXM7IGkrKywgbmlkKyspIHsKLQkJdW5zaWduZWQgaW50IGNhcHM7Ci0JCXVuc2lnbmVkIGludCB0eXBlOwotCi0JCWNhcHMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwgQUNfUEFSX0FVRElPX1dJREdFVF9DQVApOwotCQl0eXBlID0gZ2V0X3djYXBzX3R5cGUoY2Fwcyk7Ci0KLQkJaWYgKCEoY2FwcyAmIEFDX1dDQVBfRElHSVRBTCkpCi0JCQljb250aW51ZTsKLQotCQlzd2l0Y2ggKHR5cGUpIHsKLQkJY2FzZSBBQ19XSURfQVVEX09VVDoKLQkJCWlmIChpbnRlbF9oZG1pX2FkZF9jdnQoY29kZWMsIG5pZCkgPCAwKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJYnJlYWs7Ci0JCWNhc2UgQUNfV0lEX1BJTjoKLQkJCWNhcHMgPSBzbmRfaGRhX3BhcmFtX3JlYWQoY29kZWMsIG5pZCwgQUNfUEFSX1BJTl9DQVApOwotCQkJaWYgKCEoY2FwcyAmIChBQ19QSU5DQVBfSERNSSB8IEFDX1BJTkNBUF9EUCkpKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKGludGVsX2hkbWlfYWRkX3Bpbihjb2RlYywgbmlkKSA8IDApCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCX0KLQotCS8qCi0JICogRzQ1L0liZXhQZWFrIGRvbid0IHN1cHBvcnQgRVBTUzogdGhlIHVuc29saWNpdGVkIHBpbiBob3QgcGx1ZyBldmVudAotCSAqIGNhbiBiZSBsb3N0IGFuZCBwcmVzZW5jZSBzZW5zZSB2ZXJiIHdpbGwgYmVjb21lIGluYWNjdXJhdGUgaWYgdGhlCi0JICogSERBIGxpbmsgaXMgcG93ZXJlZCBvZmYgYXQgaG90IHBsdWcgb3IgaHcgaW5pdGlhbGl6YXRpb24gdGltZS4KLQkgKi8KLSNpZmRlZiBDT05GSUdfU05EX0hEQV9QT1dFUl9TQVZFCi0JaWYgKCEoc25kX2hkYV9wYXJhbV9yZWFkKGNvZGVjLCBjb2RlYy0+YWZnLCBBQ19QQVJfUE9XRVJfU1RBVEUpICYKLQkgICAgICBBQ19QV1JTVF9FUFNTKSkKLQkJY29kZWMtPmJ1cy0+cG93ZXJfa2VlcF9saW5rX29uID0gMTsKLSNlbmRpZgotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBIRE1JIHJvdXRpbmVzCi0gKi8KLQotI2lmZGVmIEJFX1BBUkFOT0lECi1zdGF0aWMgdm9pZCBoZG1pX2dldF9kaXBfaW5kZXgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkLAotCQkJCWludCAqcGFja2V0X2luZGV4LCBpbnQgKmJ5dGVfaW5kZXgpCi17Ci0JaW50IHZhbDsKLQotCXZhbCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgcGluX25pZCwgMCwKLQkJCQkgQUNfVkVSQl9HRVRfSERNSV9ESVBfSU5ERVgsIDApOwotCi0JKnBhY2tldF9pbmRleCA9IHZhbCA+PiA1OwotCSpieXRlX2luZGV4ID0gdmFsICYgMHgxZjsKLX0KLSNlbmRpZgotCi1zdGF0aWMgdm9pZCBoZG1pX3NldF9kaXBfaW5kZXgoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkLAotCQkJCWludCBwYWNrZXRfaW5kZXgsIGludCBieXRlX2luZGV4KQotewotCWludCB2YWw7Ci0KLQl2YWwgPSAocGFja2V0X2luZGV4IDw8IDUpIHwgKGJ5dGVfaW5kZXggJiAweDFmKTsKLQotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsIEFDX1ZFUkJfU0VUX0hETUlfRElQX0lOREVYLCB2YWwpOwotfQotCi1zdGF0aWMgdm9pZCBoZG1pX3dyaXRlX2RpcF9ieXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluX25pZCwKLQkJCQl1bnNpZ25lZCBjaGFyIHZhbCkKLXsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLCBBQ19WRVJCX1NFVF9IRE1JX0RJUF9EQVRBLCB2YWwpOwotfQotCi1zdGF0aWMgdm9pZCBoZG1pX2VuYWJsZV9vdXRwdXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkKQotewotCS8qIFVubXV0ZSAqLwotCWlmIChnZXRfd2NhcHMoY29kZWMsIHBpbl9uaWQpICYgQUNfV0NBUF9PVVRfQU1QKQotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJCUFDX1ZFUkJfU0VUX0FNUF9HQUlOX01VVEUsIEFNUF9PVVRfVU5NVVRFKTsKLQkvKiBFbmFibGUgcGluIG91dCAqLwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkgICAgQUNfVkVSQl9TRVRfUElOX1dJREdFVF9DT05UUk9MLCBQSU5fT1VUKTsKLX0KLQotLyoKLSAqIEVuYWJsZSBBdWRpbyBJbmZvRnJhbWUgVHJhbnNtaXNzaW9uCi0gKi8KLXN0YXRpYyB2b2lkIGhkbWlfc3RhcnRfaW5mb2ZyYW1lX3RyYW5zKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCSAgICAgICBoZGFfbmlkX3QgcGluX25pZCkKLXsKLQloZG1pX3NldF9kaXBfaW5kZXgoY29kZWMsIHBpbl9uaWQsIDB4MCwgMHgwKTsKLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBwaW5fbmlkLCAwLCBBQ19WRVJCX1NFVF9IRE1JX0RJUF9YTUlULAotCQkJCQkJQUNfRElQWE1JVF9CRVNUKTsKLX0KLQotLyoKLSAqIERpc2FibGUgQXVkaW8gSW5mb0ZyYW1lIFRyYW5zbWlzc2lvbgotICovCi1zdGF0aWMgdm9pZCBoZG1pX3N0b3BfaW5mb2ZyYW1lX3RyYW5zKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCSAgICAgIGhkYV9uaWRfdCBwaW5fbmlkKQotewotCWhkbWlfc2V0X2RpcF9pbmRleChjb2RlYywgcGluX25pZCwgMHgwLCAweDApOwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHBpbl9uaWQsIDAsIEFDX1ZFUkJfU0VUX0hETUlfRElQX1hNSVQsCi0JCQkJCQlBQ19ESVBYTUlUX0RJU0FCTEUpOwotfQotCi1zdGF0aWMgaW50IGhkbWlfZ2V0X2NoYW5uZWxfY291bnQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBuaWQpCi17Ci0JcmV0dXJuIDEgKyBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIG5pZCwgMCwKLQkJCQkJQUNfVkVSQl9HRVRfQ1ZUX0NIQU5fQ09VTlQsIDApOwotfQotCi1zdGF0aWMgdm9pZCBoZG1pX3NldF9jaGFubmVsX2NvdW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAotCQkJCSAgIGhkYV9uaWRfdCBuaWQsIGludCBjaHMpCi17Ci0JaWYgKGNocyAhPSBoZG1pX2dldF9jaGFubmVsX2NvdW50KGNvZGVjLCBuaWQpKQotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX0NWVF9DSEFOX0NPVU5ULCBjaHMgLSAxKTsKLX0KLQotc3RhdGljIHZvaWQgaGRtaV9kZWJ1Z19jaGFubmVsX21hcHBpbmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJICAgICAgIGhkYV9uaWRfdCBwaW5fbmlkKQotewotI2lmZGVmIENPTkZJR19TTkRfREVCVUdfVkVSQk9TRQotCWludCBpOwotCWludCBzbG90OwotCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQlzbG90ID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJCQkJQUNfVkVSQl9HRVRfSERNSV9DSEFOX1NMT1QsIGkpOwotCQlwcmludGsoS0VSTl9ERUJVRyAiSERNSTogQVNQIGNoYW5uZWwgJWQgPT4gc2xvdCAlZFxuIiwKLQkJCQkJCXNsb3QgPj4gNCwgc2xvdCAmIDB4Zik7Ci0JfQotI2VuZGlmCi19Ci0KLQotLyoKLSAqIEF1ZGlvIEluZm9GcmFtZSByb3V0aW5lcwotICovCi0KLXN0YXRpYyB2b2lkIGhkbWlfZGVidWdfZGlwX3NpemUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsIGhkYV9uaWRfdCBwaW5fbmlkKQotewotI2lmZGVmIENPTkZJR19TTkRfREVCVUdfVkVSQk9TRQotCWludCBpOwotCWludCBzaXplOwotCi0Jc2l6ZSA9IHNuZF9oZG1pX2dldF9lbGRfc2l6ZShjb2RlYywgcGluX25pZCk7Ci0JcHJpbnRrKEtFUk5fREVCVUcgIkhETUk6IEVMRCBidWYgc2l6ZSBpcyAlZFxuIiwgc2l6ZSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7Ci0JCXNpemUgPSBzbmRfaGRhX2NvZGVjX3JlYWQoY29kZWMsIHBpbl9uaWQsIDAsCi0JCQkJCQlBQ19WRVJCX0dFVF9IRE1JX0RJUF9TSVpFLCBpKTsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkhETUk6IERJUCBHUFslZF0gYnVmIHNpemUgaXMgJWRcbiIsIGksIHNpemUpOwotCX0KLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZCBoZG1pX2NsZWFyX2RpcF9idWZmZXJzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluX25pZCkKLXsKLSNpZmRlZiBCRV9QQVJBTk9JRAotCWludCBpLCBqOwotCWludCBzaXplOwotCWludCBwaSwgYmk7Ci0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQlzaXplID0gc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBwaW5fbmlkLCAwLAotCQkJCQkJQUNfVkVSQl9HRVRfSERNSV9ESVBfU0laRSwgaSk7Ci0JCWlmIChzaXplID09IDApCi0JCQljb250aW51ZTsKLQotCQloZG1pX3NldF9kaXBfaW5kZXgoY29kZWMsIHBpbl9uaWQsIGksIDB4MCk7Ci0JCWZvciAoaiA9IDE7IGogPCAxMDAwOyBqKyspIHsKLQkJCWhkbWlfd3JpdGVfZGlwX2J5dGUoY29kZWMsIHBpbl9uaWQsIDB4MCk7Ci0JCQloZG1pX2dldF9kaXBfaW5kZXgoY29kZWMsIHBpbl9uaWQsICZwaSwgJmJpKTsKLQkJCWlmIChwaSAhPSBpKQotCQkJCXNuZF9wcmludGQoS0VSTl9JTkZPICJkaXAgaW5kZXggJWQ6ICVkICE9ICVkXG4iLAotCQkJCQkJYmksIHBpLCBpKTsKLQkJCWlmIChiaSA9PSAwKSAvKiBieXRlIGluZGV4IHdyYXBwZWQgYXJvdW5kICovCi0JCQkJYnJlYWs7Ci0JCX0KLQkJc25kX3ByaW50ZChLRVJOX0lORk8KLQkJCSJIRE1JOiBESVAgR1BbJWRdIGJ1ZiByZXBvcnRlZCBzaXplPSVkLCB3cml0dGVuPSVkXG4iLAotCQkJaSwgc2l6ZSwgaik7Ci0JfQotI2VuZGlmCi19Ci0KLXN0YXRpYyB2b2lkIGhkbWlfY2hlY2tzdW1fYXVkaW9faW5mb2ZyYW1lKHN0cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSAqYWkpCi17Ci0JdTggKmJ5dGVzID0gKHU4ICopYWk7Ci0JdTggc3VtID0gMDsKLQlpbnQgaTsKLQotCWFpLT5jaGVja3N1bSA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKCphaSk7IGkrKykKLQkJc3VtICs9IGJ5dGVzW2ldOwotCi0JYWktPmNoZWNrc3VtID0gLSBzdW07Ci19Ci0KLXN0YXRpYyB2b2lkIGhkbWlfZmlsbF9hdWRpb19pbmZvZnJhbWUoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJICAgICAgaGRhX25pZF90IHBpbl9uaWQsCi0JCQkJICAgICAgc3RydWN0IGhkbWlfYXVkaW9faW5mb2ZyYW1lICphaSkKLXsKLQl1OCAqYnl0ZXMgPSAodTggKilhaTsKLQlpbnQgaTsKLQotCWhkbWlfZGVidWdfZGlwX3NpemUoY29kZWMsIHBpbl9uaWQpOwotCWhkbWlfY2xlYXJfZGlwX2J1ZmZlcnMoY29kZWMsIHBpbl9uaWQpOyAvKiBiZSBwYXJhbm9pZCAqLwotCi0JaGRtaV9jaGVja3N1bV9hdWRpb19pbmZvZnJhbWUoYWkpOwotCi0JaGRtaV9zZXRfZGlwX2luZGV4KGNvZGVjLCBwaW5fbmlkLCAweDAsIDB4MCk7Ci0JZm9yIChpID0gMDsgaSA8IHNpemVvZigqYWkpOyBpKyspCi0JCWhkbWlfd3JpdGVfZGlwX2J5dGUoY29kZWMsIHBpbl9uaWQsIGJ5dGVzW2ldKTsKLX0KLQotLyoKLSAqIENvbXB1dGUgZGVyaXZlZCB2YWx1ZXMgaW4gY2hhbm5lbF9hbGxvY2F0aW9uc1tdLgotICovCi1zdGF0aWMgdm9pZCBpbml0X2NoYW5uZWxfYWxsb2NhdGlvbnModm9pZCkKLXsKLQlpbnQgaSwgajsKLQlzdHJ1Y3QgY2VhX2NoYW5uZWxfc3BlYWtlcl9hbGxvY2F0aW9uICpwOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2hhbm5lbF9hbGxvY2F0aW9ucyk7IGkrKykgewotCQlwID0gY2hhbm5lbF9hbGxvY2F0aW9ucyArIGk7Ci0JCXAtPmNoYW5uZWxzID0gMDsKLQkJcC0+c3BrX21hc2sgPSAwOwotCQlmb3IgKGogPSAwOyBqIDwgQVJSQVlfU0laRShwLT5zcGVha2Vycyk7IGorKykKLQkJCWlmIChwLT5zcGVha2Vyc1tqXSkgewotCQkJCXAtPmNoYW5uZWxzKys7Ci0JCQkJcC0+c3BrX21hc2sgfD0gcC0+c3BlYWtlcnNbal07Ci0JCQl9Ci0JfQotfQotCi0vKgotICogVGhlIHRyYW5zZm9ybWF0aW9uIHRha2VzIHR3byBzdGVwczoKLSAqCi0gKiAJZWxkLT5zcGtfYWxsb2MgPT4gKGVsZF9zcGVha2VyX2FsbG9jYXRpb25fYml0c1tdKSA9PiBzcGtfbWFzawotICogCSAgICAgIHNwa19tYXNrID0+IChjaGFubmVsX2FsbG9jYXRpb25zW10pICAgICAgICAgPT4gYWktPkNBCi0gKgotICogVE9ETzogaXQgY291bGQgc2VsZWN0IHRoZSB3cm9uZyBDQSBmcm9tIG11bHRpcGxlIGNhbmRpZGF0ZXMuCi0qLwotc3RhdGljIGludCBoZG1pX3NldHVwX2NoYW5uZWxfYWxsb2NhdGlvbihzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKLQkJCQkJIHN0cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSAqYWkpCi17Ci0Jc3RydWN0IGludGVsX2hkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCXN0cnVjdCBoZG1pX2VsZCAqZWxkOwotCWludCBpOwotCWludCBzcGtfbWFzayA9IDA7Ci0JaW50IGNoYW5uZWxzID0gMSArIChhaS0+Q0MwMl9DVDQ3ICYgMHg3KTsKLQljaGFyIGJ1ZltTTkRfUFJJTlRfQ0hBTk5FTF9BTExPQ0FUSU9OX0FEVklTRURfQlVGU0laRV07Ci0KLQkvKgotCSAqIENBIGRlZmF1bHRzIHRvIDAgZm9yIGJhc2ljIHN0ZXJlbyBhdWRpbwotCSAqLwotCWlmIChjaGFubmVscyA8PSAyKQotCQlyZXR1cm4gMDsKLQotCWkgPSBoZGFfbm9kZV9pbmRleChzcGVjLT5waW5fY3Z0LCBuaWQpOwotCWlmIChpIDwgMCkKLQkJcmV0dXJuIDA7Ci0JZWxkID0gJnNwZWMtPnNpbmtfZWxkW2ldOwotCi0JLyoKLQkgKiBIRE1JIHNpbmsncyBFTEQgaW5mbyBjYW5ub3QgYWx3YXlzIGJlIHJldHJpZXZlZCBmb3Igbm93LCBlLmcuCi0JICogaW4gY29uc29sZSBvciBmb3IgYXVkaW8gZGV2aWNlcy4gQXNzdW1lIHRoZSBoaWdoZXN0IHNwZWFrZXJzCi0JICogY29uZmlndXJhdGlvbiwgdG8gX25vdF8gcHJvaGliaXQgbXVsdGktY2hhbm5lbCBhdWRpbyBwbGF5YmFjay4KLQkgKi8KLQlpZiAoIWVsZC0+c3BrX2FsbG9jKQotCQllbGQtPnNwa19hbGxvYyA9IDB4ZmZmZjsKLQotCS8qCi0JICogZXhwYW5kIEVMRCdzIHNwZWFrZXIgYWxsb2NhdGlvbiBtYXNrCi0JICoKLQkgKiBFTEQgdGVsbHMgdGhlIHNwZWFrZXIgbWFzayBpbiBhIGNvbXBhY3QocGFpcmVkKSBmb3JtLAotCSAqIGV4cGFuZCBFTEQncyBub3Rpb25zIHRvIG1hdGNoIHRoZSBvbmVzIHVzZWQgYnkgQXVkaW8gSW5mb0ZyYW1lLgotCSAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGVsZF9zcGVha2VyX2FsbG9jYXRpb25fYml0cyk7IGkrKykgewotCQlpZiAoZWxkLT5zcGtfYWxsb2MgJiAoMSA8PCBpKSkKLQkJCXNwa19tYXNrIHw9IGVsZF9zcGVha2VyX2FsbG9jYXRpb25fYml0c1tpXTsKLQl9Ci0KLQkvKiBzZWFyY2ggZm9yIHRoZSBmaXJzdCB3b3JraW5nIG1hdGNoIGluIHRoZSBDQSB0YWJsZSAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNoYW5uZWxfYWxsb2NhdGlvbnMpOyBpKyspIHsKLQkJaWYgKGNoYW5uZWxzID09IGNoYW5uZWxfYWxsb2NhdGlvbnNbaV0uY2hhbm5lbHMgJiYKLQkJICAgIChzcGtfbWFzayAmIGNoYW5uZWxfYWxsb2NhdGlvbnNbaV0uc3BrX21hc2spID09Ci0JCQkJY2hhbm5lbF9hbGxvY2F0aW9uc1tpXS5zcGtfbWFzaykgewotCQkJYWktPkNBID0gY2hhbm5lbF9hbGxvY2F0aW9uc1tpXS5jYV9pbmRleDsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0Jc25kX3ByaW50X2NoYW5uZWxfYWxsb2NhdGlvbihlbGQtPnNwa19hbGxvYywgYnVmLCBzaXplb2YoYnVmKSk7Ci0Jc25kX3ByaW50ZGQoS0VSTl9JTkZPCi0JCQkiSERNSTogc2VsZWN0IENBIDB4JXggZm9yICVkLWNoYW5uZWwgYWxsb2NhdGlvbjogJXNcbiIsCi0JCQlhaS0+Q0EsIGNoYW5uZWxzLCBidWYpOwotCi0JcmV0dXJuIGFpLT5DQTsKLX0KLQotc3RhdGljIHZvaWQgaGRtaV9zZXR1cF9jaGFubmVsX21hcHBpbmcoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCi0JCQkJICAgICAgIGhkYV9uaWRfdCBwaW5fbmlkLAotCQkJCSAgICAgICBzdHJ1Y3QgaGRtaV9hdWRpb19pbmZvZnJhbWUgKmFpKQotewotCWludCBpOwotCWludCBjYSA9IGFpLT5DQTsKLQlpbnQgZXJyOwotCi0JaWYgKGhkbWlfY2hhbm5lbF9tYXBwaW5nW2NhXVsxXSA9PSAwKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBjaGFubmVsX2FsbG9jYXRpb25zW2NhXS5jaGFubmVsczsgaSsrKQotCQkJaGRtaV9jaGFubmVsX21hcHBpbmdbY2FdW2ldID0gaSB8IChpIDw8IDQpOwotCQlmb3IgKDsgaSA8IDg7IGkrKykKLQkJCWhkbWlfY2hhbm5lbF9tYXBwaW5nW2NhXVtpXSA9IDB4ZiB8IChpIDw8IDQpOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKLQkJZXJyID0gc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgcGluX25pZCwgMCwKLQkJCQkJICBBQ19WRVJCX1NFVF9IRE1JX0NIQU5fU0xPVCwKLQkJCQkJICBoZG1pX2NoYW5uZWxfbWFwcGluZ1tjYV1baV0pOwotCQlpZiAoZXJyKSB7Ci0JCQlzbmRfcHJpbnRkZChLRVJOX0lORk8gIkhETUk6IGNoYW5uZWwgbWFwcGluZyBmYWlsZWRcbiIpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQloZG1pX2RlYnVnX2NoYW5uZWxfbWFwcGluZyhjb2RlYywgcGluX25pZCk7Ci19Ci0KLXN0YXRpYyBib29sIGhkbWlfaW5mb2ZyYW1lX3VwdG9kYXRlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCBoZGFfbmlkX3QgcGluX25pZCwKLQkJCQkgICAgc3RydWN0IGhkbWlfYXVkaW9faW5mb2ZyYW1lICphaSkKLXsKLQl1OCAqYnl0ZXMgPSAodTggKilhaTsKLQl1OCB2YWw7Ci0JaW50IGk7Ci0KLQlpZiAoc25kX2hkYV9jb2RlY19yZWFkKGNvZGVjLCBwaW5fbmlkLCAwLCBBQ19WRVJCX0dFVF9IRE1JX0RJUF9YTUlULCAwKQotCQkJCQkJCSAgICAhPSBBQ19ESVBYTUlUX0JFU1QpCi0JCXJldHVybiBmYWxzZTsKLQotCWhkbWlfc2V0X2RpcF9pbmRleChjb2RlYywgcGluX25pZCwgMHgwLCAweDApOwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoKmFpKTsgaSsrKSB7Ci0JCXZhbCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgcGluX25pZCwgMCwKLQkJCQkJIEFDX1ZFUkJfR0VUX0hETUlfRElQX0RBVEEsIDApOwotCQlpZiAodmFsICE9IGJ5dGVzW2ldKQotCQkJcmV0dXJuIGZhbHNlOwotCX0KLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBoZG1pX3NldHVwX2F1ZGlvX2luZm9mcmFtZShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKLQkJCQkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCi17Ci0Jc3RydWN0IGludGVsX2hkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCWhkYV9uaWRfdCBwaW5fbmlkOwotCWludCBpOwotCXN0cnVjdCBoZG1pX2F1ZGlvX2luZm9mcmFtZSBhaSA9IHsKLQkJLnR5cGUJCT0gMHg4NCwKLQkJLnZlcgkJPSAweDAxLAotCQkubGVuCQk9IDB4MGEsCi0JCS5DQzAyX0NUNDcJPSBzdWJzdHJlYW0tPnJ1bnRpbWUtPmNoYW5uZWxzIC0gMSwKLQl9OwotCi0JaGRtaV9zZXR1cF9jaGFubmVsX2FsbG9jYXRpb24oY29kZWMsIG5pZCwgJmFpKTsKLQotCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fcGluczsgaSsrKSB7Ci0JCWlmIChzcGVjLT5waW5fY3Z0W2ldICE9IG5pZCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoIXNwZWMtPnNpbmtfZWxkW2ldLm1vbml0b3JfcHJlc2VudCkKLQkJCWNvbnRpbnVlOwotCi0JCXBpbl9uaWQgPSBzcGVjLT5waW5baV07Ci0JCWlmICghaGRtaV9pbmZvZnJhbWVfdXB0b2RhdGUoY29kZWMsIHBpbl9uaWQsICZhaSkpIHsKLQkJCWhkbWlfc2V0dXBfY2hhbm5lbF9tYXBwaW5nKGNvZGVjLCBwaW5fbmlkLCAmYWkpOwotCQkJaGRtaV9zdG9wX2luZm9mcmFtZV90cmFucyhjb2RlYywgcGluX25pZCk7Ci0JCQloZG1pX2ZpbGxfYXVkaW9faW5mb2ZyYW1lKGNvZGVjLCBwaW5fbmlkLCAmYWkpOwotCQkJaGRtaV9zdGFydF9pbmZvZnJhbWVfdHJhbnMoY29kZWMsIHBpbl9uaWQpOwotCQl9Ci0JfQotfQotCi0KLS8qCi0gKiBVbnNvbGljaXRlZCBldmVudHMKLSAqLwotCi1zdGF0aWMgdm9pZCBoZG1pX2ludHJpbnNpY19ldmVudChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgdW5zaWduZWQgaW50IHJlcykKLXsKLQlzdHJ1Y3QgaW50ZWxfaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0JaW50IHRhZyA9IHJlcyA+PiBBQ19VTlNPTF9SRVNfVEFHX1NISUZUOwotCWludCBwaW5kID0gISEocmVzICYgQUNfVU5TT0xfUkVTX1BEKTsKLQlpbnQgZWxkdiA9ICEhKHJlcyAmIEFDX1VOU09MX1JFU19FTERWKTsKLQlpbnQgaW5kZXg7Ci0KLQlwcmludGsoS0VSTl9JTkZPCi0JCSJIRE1JIGhvdCBwbHVnIGV2ZW50OiBQaW49JWQgUHJlc2VuY2VfRGV0ZWN0PSVkIEVMRF9WYWxpZD0lZFxuIiwKLQkJdGFnLCBwaW5kLCBlbGR2KTsKLQotCWluZGV4ID0gaGRhX25vZGVfaW5kZXgoc3BlYy0+cGluLCB0YWcpOwotCWlmIChpbmRleCA8IDApCi0JCXJldHVybjsKLQotCXNwZWMtPnNpbmtfZWxkW2luZGV4XS5tb25pdG9yX3ByZXNlbnQgPSBwaW5kOwotCXNwZWMtPnNpbmtfZWxkW2luZGV4XS5lbGRfdmFsaWQgPSBlbGR2OwotCi0JaWYgKHBpbmQgJiYgZWxkdikgewotCQloZG1pX2dldF9zaG93X2VsZChjb2RlYywgc3BlYy0+cGluW2luZGV4XSwgJnNwZWMtPnNpbmtfZWxkW2luZGV4XSk7Ci0JCS8qIFRPRE86IGRvIHJlYWwgdGhpbmdzIGFib3V0IEVMRCAqLwotCX0KLX0KLQotc3RhdGljIHZvaWQgaGRtaV9ub25faW50cmluc2ljX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQotewotCWludCB0YWcgPSByZXMgPj4gQUNfVU5TT0xfUkVTX1RBR19TSElGVDsKLQlpbnQgc3VidGFnID0gKHJlcyAmIEFDX1VOU09MX1JFU19TVUJUQUcpID4+IEFDX1VOU09MX1JFU19TVUJUQUdfU0hJRlQ7Ci0JaW50IGNwX3N0YXRlID0gISEocmVzICYgQUNfVU5TT0xfUkVTX0NQX1NUQVRFKTsKLQlpbnQgY3BfcmVhZHkgPSAhIShyZXMgJiBBQ19VTlNPTF9SRVNfQ1BfUkVBRFkpOwotCi0JcHJpbnRrKEtFUk5fSU5GTwotCQkiSERNSSBDUCBldmVudDogUElOPSVkIFNVQlRBRz0weCV4IENQX1NUQVRFPSVkIENQX1JFQURZPSVkXG4iLAotCQl0YWcsCi0JCXN1YnRhZywKLQkJY3Bfc3RhdGUsCi0JCWNwX3JlYWR5KTsKLQotCS8qIFRPRE8gKi8KLQlpZiAoY3Bfc3RhdGUpCi0JCTsKLQlpZiAoY3BfcmVhZHkpCi0JCTsKLX0KLQotCi1zdGF0aWMgdm9pZCBpbnRlbF9oZG1pX3Vuc29sX2V2ZW50KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLCB1bnNpZ25lZCBpbnQgcmVzKQotewotCXN0cnVjdCBpbnRlbF9oZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQlpbnQgdGFnID0gcmVzID4+IEFDX1VOU09MX1JFU19UQUdfU0hJRlQ7Ci0JaW50IHN1YnRhZyA9IChyZXMgJiBBQ19VTlNPTF9SRVNfU1VCVEFHKSA+PiBBQ19VTlNPTF9SRVNfU1VCVEFHX1NISUZUOwotCi0JaWYgKGhkYV9ub2RlX2luZGV4KHNwZWMtPnBpbiwgdGFnKSA8IDApIHsKLQkJc25kX3ByaW50ZChLRVJOX0lORk8gIlVuZXhwZWN0ZWQgSERNSSBldmVudCB0YWcgMHgleFxuIiwgdGFnKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChzdWJ0YWcgPT0gMCkKLQkJaGRtaV9pbnRyaW5zaWNfZXZlbnQoY29kZWMsIHJlcyk7Ci0JZWxzZQotCQloZG1pX25vbl9pbnRyaW5zaWNfZXZlbnQoY29kZWMsIHJlcyk7Ci19Ci0KLS8qCi0gKiBDYWxsYmFja3MKLSAqLwotCi1zdGF0aWMgdm9pZCBoZG1pX3NldHVwX3N0cmVhbShzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywgaGRhX25pZF90IG5pZCwKLQkJCSAgICAgIHUzMiBzdHJlYW1fdGFnLCBpbnQgZm9ybWF0KQotewotCWludCB0YWc7Ci0JaW50IGZtdDsKLQotCXRhZyA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLCBBQ19WRVJCX0dFVF9DT05WLCAwKSA+PiA0OwotCWZtdCA9IHNuZF9oZGFfY29kZWNfcmVhZChjb2RlYywgbmlkLCAwLCBBQ19WRVJCX0dFVF9TVFJFQU1fRk9STUFULCAwKTsKLQotCXNuZF9wcmludGRkKCJoZG1pX3NldHVwX3N0cmVhbTogIgotCQkgICAgIk5JRD0weCV4LCAlc3N0cmVhbT0weCV4LCAlc2Zvcm1hdD0weCV4XG4iLAotCQkgICAgbmlkLAotCQkgICAgdGFnID09IHN0cmVhbV90YWcgPyAiIiA6ICJuZXctIiwKLQkJICAgIHN0cmVhbV90YWcsCi0JCSAgICBmbXQgPT0gZm9ybWF0ID8gIiIgOiAibmV3LSIsCi0JCSAgICBmb3JtYXQpOwotCi0JaWYgKHRhZyAhPSBzdHJlYW1fdGFnKQotCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBuaWQsIDAsCi0JCQkJICAgIEFDX1ZFUkJfU0VUX0NIQU5ORUxfU1RSRUFNSUQsIHN0cmVhbV90YWcgPDwgNCk7Ci0JaWYgKGZtdCAhPSBmb3JtYXQpCi0JCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG5pZCwgMCwKLQkJCQkgICAgQUNfVkVSQl9TRVRfU1RSRUFNX0ZPUk1BVCwgZm9ybWF0KTsKLX0KIAogc3RhdGljIGludCBpbnRlbF9oZG1pX3BsYXliYWNrX3BjbV9wcmVwYXJlKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCiAJCQkJCSAgIHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLApAQCAtODgyLDcgKzg3LDcgQEAKIAogc3RhdGljIGludCBpbnRlbF9oZG1pX2J1aWxkX3BjbXMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RydWN0IGludGVsX2hkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlzdHJ1Y3QgaGRhX3BjbSAqaW5mbyA9IHNwZWMtPnBjbV9yZWM7CiAJaW50IGk7CiAKQEAgLTkwOCw3ICsxMTMsNyBAQAogCiBzdGF0aWMgaW50IGludGVsX2hkbWlfYnVpbGRfY29udHJvbHMoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RydWN0IGludGVsX2hkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgZXJyOwogCWludCBpOwogCkBAIC05MjMsNyArMTI4LDcgQEAKIAogc3RhdGljIGludCBpbnRlbF9oZG1pX2luaXQoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RydWN0IGludGVsX2hkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IHNwZWMtPnBpbltpXTsgaSsrKSB7CkBAIC05MzcsNyArMTQyLDcgQEAKIAogc3RhdGljIHZvaWQgaW50ZWxfaGRtaV9mcmVlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXN0cnVjdCBpbnRlbF9oZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3QgaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX3BpbnM7IGkrKykKQEAgLTk1MSwxMiArMTU2LDEyIEBACiAJLmZyZWUJCQk9IGludGVsX2hkbWlfZnJlZSwKIAkuYnVpbGRfcGNtcwkJPSBpbnRlbF9oZG1pX2J1aWxkX3BjbXMsCiAJLmJ1aWxkX2NvbnRyb2xzIAk9IGludGVsX2hkbWlfYnVpbGRfY29udHJvbHMsCi0JLnVuc29sX2V2ZW50CQk9IGludGVsX2hkbWlfdW5zb2xfZXZlbnQsCisJLnVuc29sX2V2ZW50CQk9IGhkbWlfdW5zb2xfZXZlbnQsCiB9OwogCiBzdGF0aWMgaW50IHBhdGNoX2ludGVsX2hkbWkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RydWN0IGludGVsX2hkbWlfc3BlYyAqc3BlYzsKKwlzdHJ1Y3QgaGRtaV9zcGVjICpzcGVjOwogCWludCBpOwogCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CkBAIC05NjQsNyArMTY5LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAljb2RlYy0+c3BlYyA9IHNwZWM7Ci0JaWYgKGludGVsX2hkbWlfcGFyc2VfY29kZWMoY29kZWMpIDwgMCkgeworCWlmIChoZG1pX3BhcnNlX2NvZGVjKGNvZGVjKSA8IDApIHsKIAkJY29kZWMtPnNwZWMgPSBOVUxMOwogCQlrZnJlZShzcGVjKTsKIAkJcmV0dXJuIC1FSU5WQUw7CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jIGIvc291bmQvcGNpL2hkYS9wYXRjaF9udmhkbWkuYwppbmRleCA2YWZkYWIwLi43MDY2OWEyIDEwMDY0NAotLS0gYS9zb3VuZC9wY2kvaGRhL3BhdGNoX252aGRtaS5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfbnZoZG1pLmMKQEAgLTI5LDEzICsyOSwyMyBAQAogI2luY2x1ZGUgImhkYV9jb2RlYy5oIgogI2luY2x1ZGUgImhkYV9sb2NhbC5oIgogCisjZGVmaW5lIE1BWF9IRE1JX0NWVFMJMQorI2RlZmluZSBNQVhfSERNSV9QSU5TCTEKKworI2luY2x1ZGUgInBhdGNoX2hkbWkuYyIKKworc3RhdGljIGNoYXIgKm52aGRtaV9wY21fbmFtZXNbTUFYX0hETUlfQ1ZUU10gPSB7CisJIk5WSURJQSBIRE1JIiwKK307CisKIC8qIGRlZmluZSBiZWxvdyB0byByZXN0cmljdCB0aGUgc3VwcG9ydGVkIHJhdGVzIGFuZCBmb3JtYXRzICovCiAvKiAjZGVmaW5lIExJTUlURURfUkFURV9GTVRfU1VQUE9SVCAqLwogCi1zdHJ1Y3QgbnZoZG1pX3NwZWMgewotCXN0cnVjdCBoZGFfbXVsdGlfb3V0IG11bHRpb3V0OwotCi0Jc3RydWN0IGhkYV9wY20gcGNtX3JlYzsKK2VudW0gSERBQ29kZWMgeworCUhEQV9DT0RFQ19OVklESUFfTUNQN1gsCisJSERBX0NPREVDX05WSURJQV9NQ1A4OSwKKwlIREFfQ09ERUNfTlZJRElBX0dUMjFYLAorCUhEQV9DT0RFQ19JTlZBTElECiB9OwogCiAjZGVmaW5lIE52X1ZFUkJfU0VUX0NoYW5uZWxfQWxsb2NhdGlvbiAgICAgICAgICAweEY3OQpAQCAtNDMsMTUgKzUzLDE4IEBACiAjZGVmaW5lIE52X1ZFUkJfU0VUX0F1ZGlvX1Byb3RlY3Rpb25fT24gICAgICAgICAweEY5OAogI2RlZmluZSBOdl9WRVJCX1NFVF9BdWRpb19Qcm90ZWN0aW9uX09mZiAgICAgICAgMHhGOTkKIAotI2RlZmluZSBOdl9NYXN0ZXJfQ29udmVydF9uaWQgICAweDA0Ci0jZGVmaW5lIE52X01hc3Rlcl9QaW5fbmlkICAgICAgIDB4MDUKKyNkZWZpbmUgbnZoZG1pX21hc3Rlcl9jb25fbmlkXzd4CTB4MDQKKyNkZWZpbmUgbnZoZG1pX21hc3Rlcl9waW5fbmlkXzd4CTB4MDUKIAotc3RhdGljIGhkYV9uaWRfdCBudmhkbWlfY29udmVydF9uaWRzWzRdID0geworI2RlZmluZSBudmhkbWlfbWFzdGVyX2Nvbl9uaWRfODkJMHgwNAorI2RlZmluZSBudmhkbWlfbWFzdGVyX3Bpbl9uaWRfODkJMHgwNQorCitzdGF0aWMgaGRhX25pZF90IG52aGRtaV9jb25fbmlkc183eFs0XSA9IHsKIAkvKmZyb250LCByZWFyLCBjbGZlLCByZWFyX3N1cnIgKi8KIAkweDYsIDB4OCwgMHhhLCAweGMsCiB9OwogCi1zdGF0aWMgc3RydWN0IGhkYV92ZXJiIG52aGRtaV9iYXNpY19pbml0W10gPSB7CitzdGF0aWMgc3RydWN0IGhkYV92ZXJiIG52aGRtaV9iYXNpY19pbml0Xzd4W10gPSB7CiAJLyogc2V0IGF1ZGlvIHByb3RlY3Qgb24gKi8KIAl7IDB4MSwgTnZfVkVSQl9TRVRfQXVkaW9fUHJvdGVjdGlvbl9PbiwgMHgxfSwKIAkvKiBlbmFibGUgZGlnaXRhbCBvdXRwdXQgb24gcGluIHdpZGdldCAqLwpAQCAtODQsMjIgKzk3LDYwIEBACiAgKi8KIHN0YXRpYyBpbnQgbnZoZG1pX2J1aWxkX2NvbnRyb2xzKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXN0cnVjdCBudmhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlpbnQgZXJyOworCWludCBpOwogCi0JZXJyID0gc25kX2hkYV9jcmVhdGVfc3BkaWZfb3V0X2N0bHMoY29kZWMsIHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkKTsKLQlpZiAoZXJyIDwgMCkKLQkJcmV0dXJuIGVycjsKKwlpZiAoKHNwZWMtPmNvZGVjX3R5cGUgPT0gSERBX0NPREVDX05WSURJQV9NQ1A4OSkKKwl8fCAoc3BlYy0+Y29kZWNfdHlwZSA9PSBIREFfQ09ERUNfTlZJRElBX0dUMjFYKSkgeworCQlmb3IgKGkgPSAwOyBpIDwgY29kZWMtPm51bV9wY21zOyBpKyspIHsKKwkJCWVyciA9IHNuZF9oZGFfY3JlYXRlX3NwZGlmX291dF9jdGxzKGNvZGVjLAorCQkJCQkJCSAgICBzcGVjLT5jdnRbaV0pOworCQkJaWYgKGVyciA8IDApCisJCQkJcmV0dXJuIGVycjsKKwkJfQorCX0gZWxzZSB7CisJCWVyciA9IHNuZF9oZGFfY3JlYXRlX3NwZGlmX291dF9jdGxzKGNvZGVjLAorCQkJCQkJICAgIHNwZWMtPm11bHRpb3V0LmRpZ19vdXRfbmlkKTsKKwkJaWYgKGVyciA8IDApCisJCQlyZXR1cm4gZXJyOworCX0KIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG52aGRtaV9pbml0KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXNuZF9oZGFfc2VxdWVuY2Vfd3JpdGUoY29kZWMsIG52aGRtaV9iYXNpY19pbml0KTsKKwlzdHJ1Y3QgaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJaW50IGk7CisJaWYgKChzcGVjLT5jb2RlY190eXBlID09IEhEQV9DT0RFQ19OVklESUFfTUNQODkpCisJfHwgKHNwZWMtPmNvZGVjX3R5cGUgPT0gSERBX0NPREVDX05WSURJQV9HVDIxWCkpIHsKKwkJZm9yIChpID0gMDsgc3BlYy0+cGluW2ldOyBpKyspIHsKKwkJCWhkbWlfZW5hYmxlX291dHB1dChjb2RlYywgc3BlYy0+cGluW2ldKTsKKwkJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIHNwZWMtPnBpbltpXSwgMCwKKwkJCQkJICAgIEFDX1ZFUkJfU0VUX1VOU09MSUNJVEVEX0VOQUJMRSwKKwkJCQkJICAgIEFDX1VTUlNQX0VOIHwgc3BlYy0+cGluW2ldKTsKKwkJfQorCX0gZWxzZSB7CisJCXNuZF9oZGFfc2VxdWVuY2Vfd3JpdGUoY29kZWMsIG52aGRtaV9iYXNpY19pbml0Xzd4KTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIG52aGRtaV9mcmVlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlpbnQgaTsKKworCWlmICgoc3BlYy0+Y29kZWNfdHlwZSA9PSBIREFfQ09ERUNfTlZJRElBX01DUDg5KQorCXx8IChzcGVjLT5jb2RlY190eXBlID09IEhEQV9DT0RFQ19OVklESUFfR1QyMVgpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBzcGVjLT5udW1fcGluczsgaSsrKQorCQkJc25kX2hkYV9lbGRfcHJvY19mcmVlKGNvZGVjLCAmc3BlYy0+c2lua19lbGRbaV0pOworCX0KKworCWtmcmVlKHNwZWMpOworfQorCiAvKgogICogRGlnaXRhbCBvdXQKICAqLwpAQCAtMTA3LDI1ICsxNTgsMjUgQEAKIAkJCQkJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewotCXN0cnVjdCBudmhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlyZXR1cm4gc25kX2hkYV9tdWx0aV9vdXRfZGlnX29wZW4oY29kZWMsICZzcGVjLT5tdWx0aW91dCk7CiB9CiAKLXN0YXRpYyBpbnQgbnZoZG1pX2RpZ19wbGF5YmFja19wY21fY2xvc2VfOGNoKHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCitzdGF0aWMgaW50IG52aGRtaV9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlXzhjaF83eChzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAogCQkJCQlzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKIAkJCQkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7Ci0Jc3RydWN0IG52aGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwogCWludCBpOwogCi0Jc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgTnZfTWFzdGVyX0NvbnZlcnRfbmlkLAorCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIG52aGRtaV9tYXN0ZXJfY29uX25pZF83eCwKIAkJCTAsIEFDX1ZFUkJfU0VUX0NIQU5ORUxfU1RSRUFNSUQsIDApOwogCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKIAkJLyogc2V0IHRoZSBzdHJlYW0gaWQgKi8KLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbnZoZG1pX2NvbnZlcnRfbmlkc1tpXSwgMCwKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbnZoZG1pX2Nvbl9uaWRzXzd4W2ldLCAwLAogCQkJCUFDX1ZFUkJfU0VUX0NIQU5ORUxfU1RSRUFNSUQsIDApOwogCQkvKiBzZXQgdGhlIHN0cmVhbSBmb3JtYXQgKi8KLQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbnZoZG1pX2NvbnZlcnRfbmlkc1tpXSwgMCwKKwkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbnZoZG1pX2Nvbl9uaWRzXzd4W2ldLCAwLAogCQkJCUFDX1ZFUkJfU0VUX1NUUkVBTV9GT1JNQVQsIDApOwogCX0KIApAQCAtMTM2LDEwICsxODcsMjUgQEAKIAkJCQkJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtKQogewotCXN0cnVjdCBudmhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKIAlyZXR1cm4gc25kX2hkYV9tdWx0aV9vdXRfZGlnX2Nsb3NlKGNvZGVjLCAmc3BlYy0+bXVsdGlvdXQpOwogfQogCitzdGF0aWMgaW50IG52aGRtaV9kaWdfcGxheWJhY2tfcGNtX3ByZXBhcmVfOGNoXzg5KHN0cnVjdCBoZGFfcGNtX3N0cmVhbSAqaGluZm8sCisJCQkJCXN0cnVjdCBoZGFfY29kZWMgKmNvZGVjLAorCQkJCQl1bnNpZ25lZCBpbnQgc3RyZWFtX3RhZywKKwkJCQkJdW5zaWduZWQgaW50IGZvcm1hdCwKKwkJCQkJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJaGRtaV9zZXRfY2hhbm5lbF9jb3VudChjb2RlYywgaGluZm8tPm5pZCwKKwkJCSAgICAgICBzdWJzdHJlYW0tPnJ1bnRpbWUtPmNoYW5uZWxzKTsKKworCWhkbWlfc2V0dXBfYXVkaW9faW5mb2ZyYW1lKGNvZGVjLCBoaW5mby0+bmlkLCBzdWJzdHJlYW0pOworCisJaGRtaV9zZXR1cF9zdHJlYW0oY29kZWMsIGhpbmZvLT5uaWQsIHN0cmVhbV90YWcsIGZvcm1hdCk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgbnZoZG1pX2RpZ19wbGF5YmFja19wY21fcHJlcGFyZV84Y2goc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKIAkJCQkJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJCXVuc2lnbmVkIGludCBzdHJlYW1fdGFnLApAQCAtMTgxLDI5ICsyNDcsMjkgQEAKIAkvKiB0dXJuIG9mZiBTUERJRiBvbmNlOyBvdGhlcndpc2UgdGhlIElFQzk1OCBiaXRzIHdvbid0IGJlIHVwZGF0ZWQgKi8KIAlpZiAoY29kZWMtPnNwZGlmX3N0YXR1c19yZXNldCAmJiAoY29kZWMtPnNwZGlmX2N0bHMgJiBBQ19ESUcxX0VOQUJMRSkpCiAJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsCi0JCQkJTnZfTWFzdGVyX0NvbnZlcnRfbmlkLAorCQkJCW52aGRtaV9tYXN0ZXJfY29uX25pZF83eCwKIAkJCQkwLAogCQkJCUFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8xLAogCQkJCWNvZGVjLT5zcGRpZl9jdGxzICYgfkFDX0RJRzFfRU5BQkxFICYgMHhmZik7CiAKIAkvKiBzZXQgdGhlIHN0cmVhbSBpZCAqLwotCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsIE52X01hc3Rlcl9Db252ZXJ0X25pZCwgMCwKKwlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBudmhkbWlfbWFzdGVyX2Nvbl9uaWRfN3gsIDAsCiAJCQlBQ19WRVJCX1NFVF9DSEFOTkVMX1NUUkVBTUlELCAoc3RyZWFtX3RhZyA8PCA0KSB8IDB4MCk7CiAKIAkvKiBzZXQgdGhlIHN0cmVhbSBmb3JtYXQgKi8KLQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLCBOdl9NYXN0ZXJfQ29udmVydF9uaWQsIDAsCisJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywgbnZoZG1pX21hc3Rlcl9jb25fbmlkXzd4LCAwLAogCQkJQUNfVkVSQl9TRVRfU1RSRUFNX0ZPUk1BVCwgZm9ybWF0KTsKIAogCS8qIHR1cm4gb24gYWdhaW4gKGlmIG5lZWRlZCkgKi8KIAkvKiBlbmFibGUgYW5kIHNldCB0aGUgY2hhbm5lbCBzdGF0dXMgYXVkaW8vZGF0YSBmbGFnICovCiAJaWYgKGNvZGVjLT5zcGRpZl9zdGF0dXNfcmVzZXQgJiYgKGNvZGVjLT5zcGRpZl9jdGxzICYgQUNfRElHMV9FTkFCTEUpKSB7CiAJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsCi0JCQkJTnZfTWFzdGVyX0NvbnZlcnRfbmlkLAorCQkJCW52aGRtaV9tYXN0ZXJfY29uX25pZF83eCwKIAkJCQkwLAogCQkJCUFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8xLAogCQkJCWNvZGVjLT5zcGRpZl9jdGxzICYgMHhmZik7CiAJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsCi0JCQkJTnZfTWFzdGVyX0NvbnZlcnRfbmlkLAorCQkJCW52aGRtaV9tYXN0ZXJfY29uX25pZF83eCwKIAkJCQkwLAogCQkJCUFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8yLCBkYXRhRENDMik7CiAJfQpAQCAtMjIwLDE5ICsyODYsMTkgQEAKIAkJaWYgKGNvZGVjLT5zcGRpZl9zdGF0dXNfcmVzZXQgJiYKIAkJKGNvZGVjLT5zcGRpZl9jdGxzICYgQUNfRElHMV9FTkFCTEUpKQogCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywKLQkJCQludmhkbWlfY29udmVydF9uaWRzW2ldLAorCQkJCW52aGRtaV9jb25fbmlkc183eFtpXSwKIAkJCQkwLAogCQkJCUFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8xLAogCQkJCWNvZGVjLT5zcGRpZl9jdGxzICYgfkFDX0RJRzFfRU5BQkxFICYgMHhmZik7CiAJCS8qIHNldCB0aGUgc3RyZWFtIGlkICovCiAJCXNuZF9oZGFfY29kZWNfd3JpdGUoY29kZWMsCi0JCQkJbnZoZG1pX2NvbnZlcnRfbmlkc1tpXSwKKwkJCQludmhkbWlfY29uX25pZHNfN3hbaV0sCiAJCQkJMCwKIAkJCQlBQ19WRVJCX1NFVF9DSEFOTkVMX1NUUkVBTUlELAogCQkJCShzdHJlYW1fdGFnIDw8IDQpIHwgY2hhbm5lbF9pZCk7CiAJCS8qIHNldCB0aGUgc3RyZWFtIGZvcm1hdCAqLwogCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLAotCQkJCW52aGRtaV9jb252ZXJ0X25pZHNbaV0sCisJCQkJbnZoZG1pX2Nvbl9uaWRzXzd4W2ldLAogCQkJCTAsCiAJCQkJQUNfVkVSQl9TRVRfU1RSRUFNX0ZPUk1BVCwKIAkJCQlmb3JtYXQpOwpAQCAtMjQxLDEyICszMDcsMTIgQEAKIAkJaWYgKGNvZGVjLT5zcGRpZl9zdGF0dXNfcmVzZXQgJiYKIAkJKGNvZGVjLT5zcGRpZl9jdGxzICYgQUNfRElHMV9FTkFCTEUpKSB7CiAJCQlzbmRfaGRhX2NvZGVjX3dyaXRlKGNvZGVjLAotCQkJCQludmhkbWlfY29udmVydF9uaWRzW2ldLAorCQkJCQludmhkbWlfY29uX25pZHNfN3hbaV0sCiAJCQkJCTAsCiAJCQkJCUFDX1ZFUkJfU0VUX0RJR0lfQ09OVkVSVF8xLAogCQkJCQljb2RlYy0+c3BkaWZfY3RscyAmIDB4ZmYpOwogCQkJc25kX2hkYV9jb2RlY193cml0ZShjb2RlYywKLQkJCQkJbnZoZG1pX2NvbnZlcnRfbmlkc1tpXSwKKwkJCQkJbnZoZG1pX2Nvbl9uaWRzXzd4W2ldLAogCQkJCQkwLAogCQkJCQlBQ19WRVJCX1NFVF9ESUdJX0NPTlZFUlRfMiwgZGF0YURDQzIpOwogCQl9CkBAIC0yNjEsMjggKzMyNyw0NyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG52aGRtaV9wbGF5YmFja19wY21fY2xlYW51cChzdHJ1Y3QgaGRhX3BjbV9zdHJlYW0gKmhpbmZvLAorCQkJCQkgICBzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYywKKwkJCQkJICAgc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgbnZoZG1pX2RpZ19wbGF5YmFja19wY21fcHJlcGFyZV8yY2goc3RydWN0IGhkYV9wY21fc3RyZWFtICpoaW5mbywKIAkJCQkJc3RydWN0IGhkYV9jb2RlYyAqY29kZWMsCiAJCQkJCXVuc2lnbmVkIGludCBzdHJlYW1fdGFnLAogCQkJCQl1bnNpZ25lZCBpbnQgZm9ybWF0LAogCQkJCQlzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKIHsKLQlzdHJ1Y3QgbnZoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3QgaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CiAJcmV0dXJuIHNuZF9oZGFfbXVsdGlfb3V0X2RpZ19wcmVwYXJlKGNvZGVjLCAmc3BlYy0+bXVsdGlvdXQsIHN0cmVhbV90YWcsCiAJCQkJCWZvcm1hdCwgc3Vic3RyZWFtKTsKIH0KIAotc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBudmhkbWlfcGNtX2RpZ2l0YWxfcGxheWJhY2tfOGNoID0geworc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBudmhkbWlfcGNtX2RpZ2l0YWxfcGxheWJhY2tfOGNoXzg5ID0geworCS5zdWJzdHJlYW1zID0gMSwKKwkuY2hhbm5lbHNfbWluID0gMiwKKwkucmF0ZXMgPSBTVVBQT1JURURfUkFURVMsCisJLm1heGJwcyA9IFNVUFBPUlRFRF9NQVhCUFMsCisJLmZvcm1hdHMgPSBTVVBQT1JURURfRk9STUFUUywKKwkub3BzID0geworCQkucHJlcGFyZSA9IG52aGRtaV9kaWdfcGxheWJhY2tfcGNtX3ByZXBhcmVfOGNoXzg5LAorCQkuY2xlYW51cCA9IG52aGRtaV9wbGF5YmFja19wY21fY2xlYW51cCwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBoZGFfcGNtX3N0cmVhbSBudmhkbWlfcGNtX2RpZ2l0YWxfcGxheWJhY2tfOGNoXzd4ID0gewogCS5zdWJzdHJlYW1zID0gMSwKIAkuY2hhbm5lbHNfbWluID0gMiwKIAkuY2hhbm5lbHNfbWF4ID0gOCwKLQkubmlkID0gTnZfTWFzdGVyX0NvbnZlcnRfbmlkLAorCS5uaWQgPSBudmhkbWlfbWFzdGVyX2Nvbl9uaWRfN3gsCiAJLnJhdGVzID0gU1VQUE9SVEVEX1JBVEVTLAogCS5tYXhicHMgPSBTVVBQT1JURURfTUFYQlBTLAogCS5mb3JtYXRzID0gU1VQUE9SVEVEX0ZPUk1BVFMsCiAJLm9wcyA9IHsKIAkJLm9wZW4gPSBudmhkbWlfZGlnX3BsYXliYWNrX3BjbV9vcGVuLAotCQkuY2xvc2UgPSBudmhkbWlfZGlnX3BsYXliYWNrX3BjbV9jbG9zZV84Y2gsCisJCS5jbG9zZSA9IG52aGRtaV9kaWdfcGxheWJhY2tfcGNtX2Nsb3NlXzhjaF83eCwKIAkJLnByZXBhcmUgPSBudmhkbWlfZGlnX3BsYXliYWNrX3BjbV9wcmVwYXJlXzhjaAogCX0sCiB9OwpAQCAtMjkxLDcgKzM3Niw3IEBACiAJLnN1YnN0cmVhbXMgPSAxLAogCS5jaGFubmVsc19taW4gPSAyLAogCS5jaGFubmVsc19tYXggPSAyLAotCS5uaWQgPSBOdl9NYXN0ZXJfQ29udmVydF9uaWQsCisJLm5pZCA9IG52aGRtaV9tYXN0ZXJfY29uX25pZF83eCwKIAkucmF0ZXMgPSBTVVBQT1JURURfUkFURVMsCiAJLm1heGJwcyA9IFNVUFBPUlRFRF9NQVhCUFMsCiAJLmZvcm1hdHMgPSBTVVBQT1JURURfRk9STUFUUywKQEAgLTMwMiwxMCArMzg3LDM2IEBACiAJfSwKIH07CiAKLXN0YXRpYyBpbnQgbnZoZG1pX2J1aWxkX3BjbXNfOGNoKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIGludCBudmhkbWlfYnVpbGRfcGNtc184Y2hfODkoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7Ci0Jc3RydWN0IG52aGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7Ci0Jc3RydWN0IGhkYV9wY20gKmluZm8gPSAmc3BlYy0+cGNtX3JlYzsKKwlzdHJ1Y3QgaGRtaV9zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3RydWN0IGhkYV9wY20gKmluZm8gPSBzcGVjLT5wY21fcmVjOworCWludCBpOworCisJY29kZWMtPm51bV9wY21zID0gc3BlYy0+bnVtX2N2dHM7CisJY29kZWMtPnBjbV9pbmZvID0gaW5mbzsKKworCWZvciAoaSA9IDA7IGkgPCBjb2RlYy0+bnVtX3BjbXM7IGkrKywgaW5mbysrKSB7CisJCXVuc2lnbmVkIGludCBjaGFuczsKKworCQljaGFucyA9IGdldF93Y2Fwcyhjb2RlYywgc3BlYy0+Y3Z0W2ldKTsKKwkJY2hhbnMgPSBnZXRfd2NhcHNfY2hhbm5lbHMoY2hhbnMpOworCisJCWluZm8tPm5hbWUgPSBudmhkbWlfcGNtX25hbWVzW2ldOworCQlpbmZvLT5wY21fdHlwZSA9IEhEQV9QQ01fVFlQRV9IRE1JOworCQlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10KKwkJCQkJPSBudmhkbWlfcGNtX2RpZ2l0YWxfcGxheWJhY2tfOGNoXzg5OworCQlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10ubmlkID0gc3BlYy0+Y3Z0W2ldOworCQlpbmZvLT5zdHJlYW1bU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDS10uY2hhbm5lbHNfbWF4ID0gY2hhbnM7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbnZoZG1pX2J1aWxkX3BjbXNfOGNoXzd4KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQoreworCXN0cnVjdCBoZG1pX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzdHJ1Y3QgaGRhX3BjbSAqaW5mbyA9IHNwZWMtPnBjbV9yZWM7CiAKIAljb2RlYy0+bnVtX3BjbXMgPSAxOwogCWNvZGVjLT5wY21faW5mbyA9IGluZm87CkBAIC0zMTMsMTUgKzQyNCwxNSBAQAogCWluZm8tPm5hbWUgPSAiTlZJRElBIEhETUkiOwogCWluZm8tPnBjbV90eXBlID0gSERBX1BDTV9UWVBFX0hETUk7CiAJaW5mby0+c3RyZWFtW1NORFJWX1BDTV9TVFJFQU1fUExBWUJBQ0tdCi0JCQkJCT0gbnZoZG1pX3BjbV9kaWdpdGFsX3BsYXliYWNrXzhjaDsKKwkJCQkJPSBudmhkbWlfcGNtX2RpZ2l0YWxfcGxheWJhY2tfOGNoXzd4OwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgbnZoZG1pX2J1aWxkX3BjbXNfMmNoKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXN0cnVjdCBudmhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOwotCXN0cnVjdCBoZGFfcGNtICppbmZvID0gJnNwZWMtPnBjbV9yZWM7CisJc3RydWN0IGhkbWlfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXN0cnVjdCBoZGFfcGNtICppbmZvID0gc3BlYy0+cGNtX3JlYzsKIAogCWNvZGVjLT5udW1fcGNtcyA9IDE7CiAJY29kZWMtPnBjbV9pbmZvID0gaW5mbzsKQEAgLTMzNCwxNCArNDQ1LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG52aGRtaV9mcmVlKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQotewotCWtmcmVlKGNvZGVjLT5zcGVjKTsKLX0KLQotc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfb3BzIG52aGRtaV9wYXRjaF9vcHNfOGNoID0geworc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfb3BzIG52aGRtaV9wYXRjaF9vcHNfOGNoXzg5ID0gewogCS5idWlsZF9jb250cm9scyA9IG52aGRtaV9idWlsZF9jb250cm9scywKLQkuYnVpbGRfcGNtcyA9IG52aGRtaV9idWlsZF9wY21zXzhjaCwKKwkuYnVpbGRfcGNtcyA9IG52aGRtaV9idWlsZF9wY21zXzhjaF84OSwKKwkuaW5pdCA9IG52aGRtaV9pbml0LAorCS5mcmVlID0gbnZoZG1pX2ZyZWUsCisJLnVuc29sX2V2ZW50ID0gaGRtaV91bnNvbF9ldmVudCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX29wcyBudmhkbWlfcGF0Y2hfb3BzXzhjaF83eCA9IHsKKwkuYnVpbGRfY29udHJvbHMgPSBudmhkbWlfYnVpbGRfY29udHJvbHMsCisJLmJ1aWxkX3BjbXMgPSBudmhkbWlfYnVpbGRfcGNtc184Y2hfN3gsCiAJLmluaXQgPSBudmhkbWlfaW5pdCwKIAkuZnJlZSA9IG52aGRtaV9mcmVlLAogfTsKQEAgLTM1Myw5ICs0NjcsMzYgQEAKIAkuZnJlZSA9IG52aGRtaV9mcmVlLAogfTsKIAotc3RhdGljIGludCBwYXRjaF9udmhkbWlfOGNoKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQorc3RhdGljIGludCBwYXRjaF9udmhkbWlfOGNoXzg5KHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXN0cnVjdCBudmhkbWlfc3BlYyAqc3BlYzsKKwlzdHJ1Y3QgaGRtaV9zcGVjICpzcGVjOworCWludCBpOworCisJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHNwZWMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwljb2RlYy0+c3BlYyA9IHNwZWM7CisJc3BlYy0+Y29kZWNfdHlwZSA9IEhEQV9DT0RFQ19OVklESUFfTUNQODk7CisKKwlpZiAoaGRtaV9wYXJzZV9jb2RlYyhjb2RlYykgPCAwKSB7CisJCWNvZGVjLT5zcGVjID0gTlVMTDsKKwkJa2ZyZWUoc3BlYyk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljb2RlYy0+cGF0Y2hfb3BzID0gbnZoZG1pX3BhdGNoX29wc184Y2hfODk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc3BlYy0+bnVtX3BpbnM7IGkrKykKKwkJc25kX2hkYV9lbGRfcHJvY19uZXcoY29kZWMsICZzcGVjLT5zaW5rX2VsZFtpXSwgaSk7CisKKwlpbml0X2NoYW5uZWxfYWxsb2NhdGlvbnMoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhdGNoX252aGRtaV84Y2hfN3goc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCit7CisJc3RydWN0IGhkbWlfc3BlYyAqc3BlYzsKIAogCXNwZWMgPSBremFsbG9jKHNpemVvZigqc3BlYyksIEdGUF9LRVJORUwpOwogCWlmIChzcGVjID09IE5VTEwpCkBAIC0zNjUsMTYgKzUwNiwxNyBAQAogCiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSAwOyAgLyogbm8gYW5hbG9nICovCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gODsKLQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IE52X01hc3Rlcl9Db252ZXJ0X25pZDsKKwlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IG52aGRtaV9tYXN0ZXJfY29uX25pZF83eDsKKwlzcGVjLT5jb2RlY190eXBlID0gSERBX0NPREVDX05WSURJQV9NQ1A3WDsKIAotCWNvZGVjLT5wYXRjaF9vcHMgPSBudmhkbWlfcGF0Y2hfb3BzXzhjaDsKKwljb2RlYy0+cGF0Y2hfb3BzID0gbnZoZG1pX3BhdGNoX29wc184Y2hfN3g7CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwYXRjaF9udmhkbWlfMmNoKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewotCXN0cnVjdCBudmhkbWlfc3BlYyAqc3BlYzsKKwlzdHJ1Y3QgaGRtaV9zcGVjICpzcGVjOwogCiAJc3BlYyA9IGt6YWxsb2Moc2l6ZW9mKCpzcGVjKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHNwZWMgPT0gTlVMTCkKQEAgLTM4NCw3ICs1MjYsOCBAQAogCiAJc3BlYy0+bXVsdGlvdXQubnVtX2RhY3MgPSAwOyAgLyogbm8gYW5hbG9nICovCiAJc3BlYy0+bXVsdGlvdXQubWF4X2NoYW5uZWxzID0gMjsKLQlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IE52X01hc3Rlcl9Db252ZXJ0X25pZDsKKwlzcGVjLT5tdWx0aW91dC5kaWdfb3V0X25pZCA9IG52aGRtaV9tYXN0ZXJfY29uX25pZF83eDsKKwlzcGVjLT5jb2RlY190eXBlID0gSERBX0NPREVDX05WSURJQV9NQ1A3WDsKIAogCWNvZGVjLT5wYXRjaF9vcHMgPSBudmhkbWlfcGF0Y2hfb3BzXzJjaDsKIApAQCAtMzk1LDEzICs1MzgsMjQgQEAKICAqIHBhdGNoIGVudHJpZXMKICAqLwogc3RhdGljIHN0cnVjdCBoZGFfY29kZWNfcHJlc2V0IHNuZF9oZGFfcHJlc2V0X252aGRtaVtdID0gewotCXsgLmlkID0gMHgxMGRlMDAwMiwgLm5hbWUgPSAiTUNQNzggSERNSSIsIC5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2ggfSwKLQl7IC5pZCA9IDB4MTBkZTAwMDMsIC5uYW1lID0gIk1DUDc4IEhETUkiLCAucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoIH0sCi0JeyAuaWQgPSAweDEwZGUwMDA1LCAubmFtZSA9ICJNQ1A3OCBIRE1JIiwgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaCB9LAotCXsgLmlkID0gMHgxMGRlMDAwNiwgLm5hbWUgPSAiTUNQNzggSERNSSIsIC5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2ggfSwKLQl7IC5pZCA9IDB4MTBkZTAwMDcsIC5uYW1lID0gIk1DUDdBIEhETUkiLCAucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoIH0sCiAJeyAuaWQgPSAweDEwZGUwMDY3LCAubmFtZSA9ICJNQ1A2NyBIRE1JIiwgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzJjaCB9LAogCXsgLmlkID0gMHgxMGRlODAwMSwgLm5hbWUgPSAiTUNQNzMgSERNSSIsIC5wYXRjaCA9IHBhdGNoX252aGRtaV8yY2ggfSwKKwl7IC5pZCA9IDB4MTBkZTAwMDIsIC5uYW1lID0gIk1DUDc3Lzc4IEhETUkiLAorCSAgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaF83eCB9LAorCXsgLmlkID0gMHgxMGRlMDAwMywgLm5hbWUgPSAiTUNQNzcvNzggSERNSSIsCisJICAucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoXzd4IH0sCisJeyAuaWQgPSAweDEwZGUwMDA1LCAubmFtZSA9ICJNQ1A3Ny83OCBIRE1JIiwKKwkgIC5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2hfN3ggfSwKKwl7IC5pZCA9IDB4MTBkZTAwMDYsIC5uYW1lID0gIk1DUDc3Lzc4IEhETUkiLAorCSAgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaF83eCB9LAorCXsgLmlkID0gMHgxMGRlMDAwNywgLm5hbWUgPSAiTUNQNzkvN0EgSERNSSIsCisJICAucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoXzd4IH0sCisJeyAuaWQgPSAweDEwZGUwMDBjLCAubmFtZSA9ICJNQ1A4OSBIRE1JIiwKKwkgIC5wYXRjaCA9IHBhdGNoX252aGRtaV84Y2hfODkgfSwKKwl7IC5pZCA9IDB4MTBkZTAwMGIsIC5uYW1lID0gIkdUMjF4IEhETUkiLAorCSAgLnBhdGNoID0gcGF0Y2hfbnZoZG1pXzhjaF84OSB9LAorCXsgLmlkID0gMHgxMGRlMDAwZCwgLm5hbWUgPSAiR1QyNDAgSERNSSIsCisJICAucGF0Y2ggPSBwYXRjaF9udmhkbWlfOGNoXzg5IH0sCiAJe30gLyogdGVybWluYXRvciAqLwogfTsKIApAQCAtNDEyLDkgKzU2NiwxMiBAQAogTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDA3Iik7CiBNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwNjciKTsKIE1PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlODAwMSIpOworTU9EVUxFX0FMSUFTKCJzbmQtaGRhLWNvZGVjLWlkOjEwZGUwMDBjIik7CitNT0RVTEVfQUxJQVMoInNuZC1oZGEtY29kZWMtaWQ6MTBkZTAwMGIiKTsKK01PRFVMRV9BTElBUygic25kLWhkYS1jb2RlYy1pZDoxMGRlMDAwZCIpOwogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIk52aWRpYSBIRE1JIEhELWF1ZGlvIGNvZGVjIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIk5WSURJQSBIRE1JIEhELWF1ZGlvIGNvZGVjIik7CiAKIHN0YXRpYyBzdHJ1Y3QgaGRhX2NvZGVjX3ByZXNldF9saXN0IG52aGRtaV9saXN0ID0gewogCS5wcmVzZXQgPSBzbmRfaGRhX3ByZXNldF9udmhkbWksCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvaGRhL3BhdGNoX3JlYWx0ZWsuYyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCmluZGV4IGU4Y2JlMjEuLjVkMmZiYjggMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCisrKyBiL3NvdW5kL3BjaS9oZGEvcGF0Y2hfcmVhbHRlay5jCkBAIC00OTE1LDcgKzQ5MTUsNyBAQAogc3RhdGljIHZvaWQgZml4dXBfc2luZ2xlX2FkYyhzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKLQloZGFfbmlkX3QgcGluOworCWhkYV9uaWRfdCBwaW4gPSAwOwogCWludCBpOwogCiAJLyogc2VhcmNoIGZvciB0aGUgaW5wdXQgcGluOyB0aGVyZSBtdXN0IGJlIG9ubHkgb25lICovCkBAIC0xMzU2MSw2ICsxMzU2MSw4IEBACiBzdGF0aWMgdm9pZCBhbGMyNjlfcXVhbnRhX2ZsMV9zZXR1cChzdHJ1Y3QgaGRhX2NvZGVjICpjb2RlYykKIHsKIAlzdHJ1Y3QgYWxjX3NwZWMgKnNwZWMgPSBjb2RlYy0+c3BlYzsKKwlzcGVjLT5hdXRvY2ZnLmhwX3BpbnNbMF0gPSAweDE1OworCXNwZWMtPmF1dG9jZmcuc3BlYWtlcl9waW5zWzBdID0gMHgxNDsKIAlzcGVjLT5leHRfbWljLnBpbiA9IDB4MTg7CiAJc3BlYy0+ZXh0X21pYy5tdXhfaWR4ID0gMDsKIAlzcGVjLT5pbnRfbWljLnBpbiA9IDB4MTk7CkBAIC0xMzY1Niw2ICsxMzY1OCw4IEBACiBzdGF0aWMgdm9pZCBhbGMyNjlfbGFwdG9wX2RtaWNfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNTsKKwlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CiAJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OwogCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CiAJc3BlYy0+aW50X21pYy5waW4gPSAweDEyOwpAQCAtMTM2NjYsNiArMTM2NzAsOCBAQAogc3RhdGljIHZvaWQgYWxjMjY5dmJfbGFwdG9wX2RtaWNfc2V0dXAoc3RydWN0IGhkYV9jb2RlYyAqY29kZWMpCiB7CiAJc3RydWN0IGFsY19zcGVjICpzcGVjID0gY29kZWMtPnNwZWM7CisJc3BlYy0+YXV0b2NmZy5ocF9waW5zWzBdID0gMHgxNTsKKwlzcGVjLT5hdXRvY2ZnLnNwZWFrZXJfcGluc1swXSA9IDB4MTQ7CiAJc3BlYy0+ZXh0X21pYy5waW4gPSAweDE4OwogCXNwZWMtPmV4dF9taWMubXV4X2lkeCA9IDA7CiAJc3BlYy0+aW50X21pYy5waW4gPSAweDEyOwpAQCAtMTM2NzYsNiArMTM2ODIsOCBAQAogc3RhdGljIHZvaWQgYWxjMjY5X2xhcHRvcF9hbWljX3NldHVwKHN0cnVjdCBoZGFfY29kZWMgKmNvZGVjKQogewogCXN0cnVjdCBhbGNfc3BlYyAqc3BlYyA9IGNvZGVjLT5zcGVjOworCXNwZWMtPmF1dG9jZmcuaHBfcGluc1swXSA9IDB4MTU7CisJc3BlYy0+YXV0b2NmZy5zcGVha2VyX3BpbnNbMF0gPSAweDE0OwogCXNwZWMtPmV4dF9taWMucGluID0gMHgxODsKIAlzcGVjLT5leHRfbWljLm11eF9pZHggPSAwOwogCXNwZWMtPmludF9taWMucGluID0gMHgxOTsKZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfd204N3g2LmMgYi9zb3VuZC9wY2kvb3h5Z2VuL3hvbmFyX3dtODd4Ni5jCmluZGV4IDc3NTRkYjEuLmRiYzRiODkgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9veHlnZW4veG9uYXJfd204N3g2LmMKKysrIGIvc291bmQvcGNpL294eWdlbi94b25hcl93bTg3eDYuYwpAQCAtNjgsNyArNjgsNyBAQAogCQkJIE9YWUdFTl9TUElfQ0VOX0xBVENIX0NMT0NLX0xPLAogCQkJIChyZWcgPDwgOSkgfCB2YWx1ZSk7CiAJaWYgKHJlZyA8IEFSUkFZX1NJWkUoZGF0YS0+d204Nzc2X3JlZ3MpKSB7Ci0JCWlmIChyZWcgPj0gV004Nzc2X0hQTFZPTCB8fCByZWcgPD0gV004Nzc2X0RBQ01BU1RFUikKKwkJaWYgKHJlZyA+PSBXTTg3NzZfSFBMVk9MICYmIHJlZyA8PSBXTTg3NzZfREFDTUFTVEVSKQogCQkJdmFsdWUgJj0gfldNODc3Nl9VUERBVEU7CiAJCWRhdGEtPndtODc3Nl9yZWdzW3JlZ10gPSB2YWx1ZTsKIAl9CmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMgYi9zb3VuZC9wY2kvcmlwdGlkZS9yaXB0aWRlLmMKaW5kZXggOTYwYTIyNy4uYWQ0NDYyNiAxMDA2NDQKLS0tIGEvc291bmQvcGNpL3JpcHRpZGUvcmlwdGlkZS5jCisrKyBiL3NvdW5kL3BjaS9yaXB0aWRlL3JpcHRpZGUuYwpAQCAtMTk3NCw5ICsxOTc0LDkgQEAKIAl9CiAJc25kX2lwcmludGYoYnVmZmVyLCAiUGF0aHM6XG4iKTsKIAlpID0gZ2V0cGF0aHMoY2lmLCBwKTsKLQl3aGlsZSAoaS0tKSB7Ci0JCXNuZF9pcHJpbnRmKGJ1ZmZlciwgIiV4LT4leCAiLCBwW2kgLSAxXSwgcFtpXSk7Ci0JCWktLTsKKwl3aGlsZSAoaSA+PSAyKSB7CisJCWkgLT0gMjsKKwkJc25kX2lwcmludGYoYnVmZmVyLCAiJXgtPiV4ICIsIHBbaV0sIHBbaSArIDFdKTsKIAl9CiAJc25kX2lwcmludGYoYnVmZmVyLCAiXG4iKTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMgYi9zb3VuZC9wY2kvcm1lOTY1Mi9oZHNwbS5jCmluZGV4IDNkNzJjMWUuLjU0N2I3MTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9ybWU5NjUyL2hkc3BtLmMKKysrIGIvc291bmQvcGNpL3JtZTk2NTIvaGRzcG0uYwpAQCAtMjQ3OSw3ICsyNDc5LDcgQEAKICAgIG9uIE1BRElDQVJEIAogICAtIHBsYXliYWNrIG1peGVyIG1hdHJpeDogW2NoYW5uZWxvdXQrNjRdIFtvdXRwdXRdIFt2YWx1ZV0KICAgLSBpbnB1dCh0aHJ1KSBtaXhlciBtYXRyaXg6IFtjaGFubmVsaW5dIFtvdXRwdXRdIFt2YWx1ZV0KLSAgKGJldHRlciBkbyAyIGtvbnRyb2xzIGZvciBzZXBlcmF0aW9uID8pCisgIChiZXR0ZXIgZG8gMiBrb250cm9scyBmb3Igc2VwYXJhdGlvbiA/KQogKi8KIAogI2RlZmluZSBIRFNQTV9NSVhFUih4bmFtZSwgeGluZGV4KSBcCmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5jIGIvc291bmQvc29jL2NvZGVjcy9hazQxMDQuYwppbmRleCBiOWVmN2U0Li5iNjhkOTlmIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL2FrNDEwNC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvYWs0MTA0LmMKQEAgLTkwLDEyICs5MCwxMCBAQAogCWlmIChyZWcgPj0gY29kZWMtPnJlZ19jYWNoZV9zaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXJlZyAmPSBBSzQxMDRfUkVHX01BU0s7Ci0JcmVnIHw9IEFLNDEwNF9XUklURTsKLQogCS8qIG9ubHkgd3JpdGUgdG8gdGhlIGhhcmR3YXJlIGlmIHZhbHVlIGhhcyBjaGFuZ2VkICovCiAJaWYgKGNhY2hlW3JlZ10gIT0gdmFsdWUpIHsKLQkJdTggdG1wWzJdID0geyByZWcsIHZhbHVlIH07CisJCXU4IHRtcFsyXSA9IHsgKHJlZyAmIEFLNDEwNF9SRUdfTUFTSykgfCBBSzQxMDRfV1JJVEUsIHZhbHVlIH07CisKIAkJaWYgKHNwaV93cml0ZShzcGksIHRtcCwgc2l6ZW9mKHRtcCkpKSB7CiAJCQlkZXZfZXJyKCZzcGktPmRldiwgIlNQSSB3cml0ZSBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIC1FSU87CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3VkYTEzODAuYyBiL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM4MC5jCmluZGV4IGEyNzYzYzIuLjljZDBhNjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM4MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3MvdWRhMTM4MC5jCkBAIC0xMzcsNyArMTM3LDcgQEAKIHsKIAlpbnQgYml0LCByZWc7CiAKLQlmb3JfZWFjaF9iaXQoYml0LCAmdWRhMTM4MF9jYWNoZV9kaXJ0eSwgVURBMTM4MF9DQUNIRVJFR05VTSAtIDB4MTApIHsKKwlmb3JfZWFjaF9zZXRfYml0KGJpdCwgJnVkYTEzODBfY2FjaGVfZGlydHksIFVEQTEzODBfQ0FDSEVSRUdOVU0gLSAweDEwKSB7CiAJCXJlZyA9IDB4MTAgKyBiaXQ7CiAJCXByX2RlYnVnKCJ1ZGExMzgwOiBmbHVzaCByZWcgJXggdmFsICV4OlxuIiwgcmVnLAogCQkJCXVkYTEzODBfcmVhZF9yZWdfY2FjaGUodWRhMTM4MF9jb2RlYywgcmVnKSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jIGIvc291bmQvc29jL2NvZGVjcy93bTgzNTAuYwppbmRleCA3MThlZjkxLi5kZjJjNmQ5IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODM1MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204MzUwLmMKQEAgLTEzNDksNyArMTM0OSw3IEBACiAJaW50IG1hc2s7CiAJc3RydWN0IHdtODM1MF9qYWNrX2RhdGEgKmphY2sgPSBOVUxMOwogCi0Jc3dpdGNoIChpcnEpIHsKKwlzd2l0Y2ggKGlycSAtIHdtODM1MC0+aXJxX2Jhc2UpIHsKIAljYXNlIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9MOgogCQlqYWNrID0gJnByaXYtPmhwbDsKIAkJbWFzayA9IFdNODM1MF9KQUNLX0xfTFZMOwpAQCAtMTQyNCw3ICsxNDI0LDcgQEAKIAl3bTgzNTBfc2V0X2JpdHMod204MzUwLCBXTTgzNTBfSkFDS19ERVRFQ1QsIGVuYSk7CiAKIAkvKiBTeW5jIHN0YXR1cyAqLwotCXdtODM1MF9ocF9qYWNrX2hhbmRsZXIoaXJxLCBwcml2KTsKKwl3bTgzNTBfaHBfamFja19oYW5kbGVyKGlycSArIHdtODM1MC0+aXJxX2Jhc2UsIHByaXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTIxLDggKzE1MjEsOCBAQAogCQkJICBXTTgzNTBfSkRMX0VOQSB8IFdNODM1MF9KRFJfRU5BKTsKIAl3bTgzNTBfY2xlYXJfYml0cyh3bTgzNTAsIFdNODM1MF9QT1dFUl9NR01UXzQsIFdNODM1MF9UT0NMS19FTkEpOwogCi0Jd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX0wpOwotCXdtODM1MF9mcmVlX2lycSh3bTgzNTAsIFdNODM1MF9JUlFfQ09ERUNfSkNLX0RFVF9SKTsKKwl3bTgzNTBfZnJlZV9pcnEod204MzUwLCBXTTgzNTBfSVJRX0NPREVDX0pDS19ERVRfTCwgcHJpdik7CisJd204MzUwX2ZyZWVfaXJxKHdtODM1MCwgV004MzUwX0lSUV9DT0RFQ19KQ0tfREVUX1IsIHByaXYpOwogCiAJcHJpdi0+aHBsLmphY2sgPSBOVUxMOwogCXByaXYtPmhwci5qYWNrID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkwLmMgYi9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jCmluZGV4IGE1NGRjNzdiLi4wNTZiNzg3IDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvY29kZWNzL3dtODk5MC5jCisrKyBiL3NvdW5kL3NvYy9jb2RlY3Mvd204OTkwLmMKQEAgLTk5MCw3ICs5OTAsNyBAQAogCQlyZWcgPSBzbmRfc29jX3JlYWQoY29kZWMsIFdNODk5MF9DTE9DS0lOR18yKTsKIAkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkwX0NMT0NLSU5HXzIsIHJlZyB8IFdNODk5MF9TWVNDTEtfU1JDKTsKIAotCQkvKiBzZXQgdXAgTiAsIGZyYWN0aW9uYWwgbW9kZSBhbmQgcHJlLWRpdmlzb3IgaWYgbmVjY2Vzc2FyeSAqLworCQkvKiBzZXQgdXAgTiAsIGZyYWN0aW9uYWwgbW9kZSBhbmQgcHJlLWRpdmlzb3IgaWYgbmVjZXNzYXJ5ICovCiAJCXNuZF9zb2Nfd3JpdGUoY29kZWMsIFdNODk5MF9QTEwxLCBwbGxfZGl2Lm4gfCBXTTg5OTBfU0RNIHwKIAkJCShwbGxfZGl2LmRpdjI/V004OTkwX1BSRVNDQUxFOjApKTsKIAkJc25kX3NvY193cml0ZShjb2RlYywgV004OTkwX1BMTDIsICh1OCkocGxsX2Rpdi5rPj44KSk7CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMgYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmMKaW5kZXggZDI5NzI1Ni4uZTgxNGE5NSAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5jCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuYwpAQCAtMzksNiArMzksMTQgQEAKIAogI2RlZmluZSBPTUFQX01DQlNQX1JBVEVTCShTTkRSVl9QQ01fUkFURV84MDAwXzk2MDAwKQogCisjZGVmaW5lIE9NQVBfTUNCU1BfU09DX1NJTkdMRV9TMTZfRVhUKHhuYW1lLCB4bWluLCB4bWF4LCBcCisJeGhhbmRsZXJfZ2V0LCB4aGFuZGxlcl9wdXQpIFwKK3sJLmlmYWNlID0gU05EUlZfQ1RMX0VMRU1fSUZBQ0VfTUlYRVIsIC5uYW1lID0geG5hbWUsIFwKKwkuaW5mbyA9IG9tYXBfbWNic3Bfc3RfaW5mb192b2xzdywgXAorCS5nZXQgPSB4aGFuZGxlcl9nZXQsIC5wdXQgPSB4aGFuZGxlcl9wdXQsIFwKKwkucHJpdmF0ZV92YWx1ZSA9ICh1bnNpZ25lZCBsb25nKSAmKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCkgXAorCXsubWluID0geG1pbiwgLm1heCA9IHhtYXh9IH0KKwogc3RydWN0IG9tYXBfbWNic3BfZGF0YSB7CiAJdW5zaWduZWQgaW50CQkJYnVzX2lkOwogCXN0cnVjdCBvbWFwX21jYnNwX3JlZ19jZmcJcmVnczsKQEAgLTgyLDExICs5MCwxMSBAQAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgb21hcDFfbWNic3BfcG9ydFtdWzJdID0ge307CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0WFgpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDM0WFgpCisjaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMikgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMykKIHN0YXRpYyBjb25zdCBpbnQgb21hcDI0eHhfZG1hX3JlcXNbXVsyXSA9IHsKIAl7IE9NQVAyNFhYX0RNQV9NQ0JTUDFfVFgsIE9NQVAyNFhYX0RNQV9NQ0JTUDFfUlggfSwKIAl7IE9NQVAyNFhYX0RNQV9NQ0JTUDJfVFgsIE9NQVAyNFhYX0RNQV9NQ0JTUDJfUlggfSwKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDI0MzApIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiAJeyBPTUFQMjRYWF9ETUFfTUNCU1AzX1RYLCBPTUFQMjRYWF9ETUFfTUNCU1AzX1JYIH0sCiAJeyBPTUFQMjRYWF9ETUFfTUNCU1A0X1RYLCBPTUFQMjRYWF9ETUFfTUNCU1A0X1JYIH0sCiAJeyBPTUFQMjRYWF9ETUFfTUNCU1A1X1RYLCBPTUFQMjRYWF9ETUFfTUNCU1A1X1JYIH0sCkBAIC0xMjQsNyArMTMyLDcgQEAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIG9tYXAyNDMwX21jYnNwX3BvcnRbXVsyXSA9IHt9OwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzNFhYKQorI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfT01BUDMpCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBvbWFwMzR4eF9tY2JzcF9wb3J0W11bMl0gPSB7CiAJeyBPTUFQMzRYWF9NQ0JTUDFfQkFTRSArIE9NQVBfTUNCU1BfUkVHX0RYUiwKIAkgIE9NQVAzNFhYX01DQlNQMV9CQVNFICsgT01BUF9NQ0JTUF9SRUdfRFJSIH0sCkBAIC02MzksNiArNjQ3LDEzNiBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChvbWFwX21jYnNwX2RhaSk7CiAKK2ludCBvbWFwX21jYnNwX3N0X2luZm9fdm9sc3coc3RydWN0IHNuZF9rY29udHJvbCAqa2NvbnRyb2wsCisJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX2luZm8gKnVpbmZvKQoreworCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWMgPQorCQkoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisJaW50IG1heCA9IG1jLT5tYXg7CisJaW50IG1pbiA9IG1jLT5taW47CisKKwl1aW5mby0+dHlwZSA9IFNORFJWX0NUTF9FTEVNX1RZUEVfSU5URUdFUjsKKwl1aW5mby0+Y291bnQgPSAxOworCXVpbmZvLT52YWx1ZS5pbnRlZ2VyLm1pbiA9IG1pbjsKKwl1aW5mby0+dmFsdWUuaW50ZWdlci5tYXggPSBtYXg7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgT01BUF9NQ0JTUF9TVF9TRVRfQ0hBTk5FTF9WT0xVTUUoaWQsIGNoYW5uZWwpCQkJXAorc3RhdGljIGludAkJCQkJCQkJXAorb21hcF9tY2JzcCMjaWQjI19zZXRfc3RfY2gjI2NoYW5uZWwjI192b2x1bWUoc3RydWN0IHNuZF9rY29udHJvbCAqa2MsCVwKKwkJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWMpCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IHNvY19taXhlcl9jb250cm9sICptYyA9CQkJCQlcCisJCShzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKilrYy0+cHJpdmF0ZV92YWx1ZTsJCVwKKwlpbnQgbWF4ID0gbWMtPm1heDsJCQkJCQlcCisJaW50IG1pbiA9IG1jLT5taW47CQkJCQkJXAorCWludCB2YWwgPSB1Yy0+dmFsdWUuaW50ZWdlci52YWx1ZVswXTsJCQkJXAorCQkJCQkJCQkJXAorCWlmICh2YWwgPCBtaW4gfHwgdmFsID4gbWF4KQkJCQkJXAorCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCisJCQkJCQkJCQlcCisJLyogT01BUCBNY0JTUCBpbXBsZW1lbnRhdGlvbiB1c2VzIGluZGV4IHZhbHVlcyAwLi40ICovCQlcCisJcmV0dXJuIG9tYXBfc3Rfc2V0X2NoZ2FpbigoaWQpLTEsIGNoYW5uZWwsIHZhbCk7CQlcCit9CisKKyNkZWZpbmUgT01BUF9NQ0JTUF9TVF9HRVRfQ0hBTk5FTF9WT0xVTUUoaWQsIGNoYW5uZWwpCQkJXAorc3RhdGljIGludAkJCQkJCQkJXAorb21hcF9tY2JzcCMjaWQjI19nZXRfc3RfY2gjI2NoYW5uZWwjI192b2x1bWUoc3RydWN0IHNuZF9rY29udHJvbCAqa2MsCVwKKwkJCQkJc3RydWN0IHNuZF9jdGxfZWxlbV92YWx1ZSAqdWMpCVwKK3sJCQkJCQkJCQlcCisJczE2IGNoZ2FpbjsJCQkJCQkJXAorCQkJCQkJCQkJXAorCWlmIChvbWFwX3N0X2dldF9jaGdhaW4oKGlkKS0xLCBjaGFubmVsLCAmY2hnYWluKSkJCVwKKwkJcmV0dXJuIC1FQUdBSU47CQkJCQkJXAorCQkJCQkJCQkJXAorCXVjLT52YWx1ZS5pbnRlZ2VyLnZhbHVlWzBdID0gY2hnYWluOwkJCQlcCisJcmV0dXJuIDA7CQkJCQkJCVwKK30KKworT01BUF9NQ0JTUF9TVF9TRVRfQ0hBTk5FTF9WT0xVTUUoMiwgMCkKK09NQVBfTUNCU1BfU1RfU0VUX0NIQU5ORUxfVk9MVU1FKDIsIDEpCitPTUFQX01DQlNQX1NUX1NFVF9DSEFOTkVMX1ZPTFVNRSgzLCAwKQorT01BUF9NQ0JTUF9TVF9TRVRfQ0hBTk5FTF9WT0xVTUUoMywgMSkKK09NQVBfTUNCU1BfU1RfR0VUX0NIQU5ORUxfVk9MVU1FKDIsIDApCitPTUFQX01DQlNQX1NUX0dFVF9DSEFOTkVMX1ZPTFVNRSgyLCAxKQorT01BUF9NQ0JTUF9TVF9HRVRfQ0hBTk5FTF9WT0xVTUUoMywgMCkKK09NQVBfTUNCU1BfU1RfR0VUX0NIQU5ORUxfVk9MVU1FKDMsIDEpCisKK3N0YXRpYyBpbnQgb21hcF9tY2JzcF9zdF9wdXRfbW9kZShzdHJ1Y3Qgc25kX2tjb250cm9sICprY29udHJvbCwKKwkJCQlzdHJ1Y3Qgc25kX2N0bF9lbGVtX3ZhbHVlICp1Y29udHJvbCkKK3sKKwlzdHJ1Y3Qgc29jX21peGVyX2NvbnRyb2wgKm1jID0KKwkJKHN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqKWtjb250cm9sLT5wcml2YXRlX3ZhbHVlOworCXU4IHZhbHVlID0gdWNvbnRyb2wtPnZhbHVlLmludGVnZXIudmFsdWVbMF07CisKKwlpZiAodmFsdWUgPT0gb21hcF9zdF9pc19lbmFibGVkKG1jLT5yZWcpKQorCQlyZXR1cm4gMDsKKworCWlmICh2YWx1ZSkKKwkJb21hcF9zdF9lbmFibGUobWMtPnJlZyk7CisJZWxzZQorCQlvbWFwX3N0X2Rpc2FibGUobWMtPnJlZyk7CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCBvbWFwX21jYnNwX3N0X2dldF9tb2RlKHN0cnVjdCBzbmRfa2NvbnRyb2wgKmtjb250cm9sLAorCQkJCXN0cnVjdCBzbmRfY3RsX2VsZW1fdmFsdWUgKnVjb250cm9sKQoreworCXN0cnVjdCBzb2NfbWl4ZXJfY29udHJvbCAqbWMgPQorCQkoc3RydWN0IHNvY19taXhlcl9jb250cm9sICopa2NvbnRyb2wtPnByaXZhdGVfdmFsdWU7CisKKwl1Y29udHJvbC0+dmFsdWUuaW50ZWdlci52YWx1ZVswXSA9IG9tYXBfc3RfaXNfZW5hYmxlZChtYy0+cmVnKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IG9tYXBfbWNic3AyX3N0X2NvbnRyb2xzW10gPSB7CisJU09DX1NJTkdMRV9FWFQoIk1jQlNQMiBTaWRldG9uZSBTd2l0Y2giLCAxLCAwLCAxLCAwLAorCQkJb21hcF9tY2JzcF9zdF9nZXRfbW9kZSwgb21hcF9tY2JzcF9zdF9wdXRfbW9kZSksCisJT01BUF9NQ0JTUF9TT0NfU0lOR0xFX1MxNl9FWFQoIk1jQlNQMiBTaWRldG9uZSBDaGFubmVsIDAgVm9sdW1lIiwKKwkJCQkgICAgICAtMzI3NjgsIDMyNzY3LAorCQkJCSAgICAgIG9tYXBfbWNic3AyX2dldF9zdF9jaDBfdm9sdW1lLAorCQkJCSAgICAgIG9tYXBfbWNic3AyX3NldF9zdF9jaDBfdm9sdW1lKSwKKwlPTUFQX01DQlNQX1NPQ19TSU5HTEVfUzE2X0VYVCgiTWNCU1AyIFNpZGV0b25lIENoYW5uZWwgMSBWb2x1bWUiLAorCQkJCSAgICAgIC0zMjc2OCwgMzI3NjcsCisJCQkJICAgICAgb21hcF9tY2JzcDJfZ2V0X3N0X2NoMV92b2x1bWUsCisJCQkJICAgICAgb21hcF9tY2JzcDJfc2V0X3N0X2NoMV92b2x1bWUpLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBzbmRfa2NvbnRyb2xfbmV3IG9tYXBfbWNic3AzX3N0X2NvbnRyb2xzW10gPSB7CisJU09DX1NJTkdMRV9FWFQoIk1jQlNQMyBTaWRldG9uZSBTd2l0Y2giLCAyLCAwLCAxLCAwLAorCQkJb21hcF9tY2JzcF9zdF9nZXRfbW9kZSwgb21hcF9tY2JzcF9zdF9wdXRfbW9kZSksCisJT01BUF9NQ0JTUF9TT0NfU0lOR0xFX1MxNl9FWFQoIk1jQlNQMyBTaWRldG9uZSBDaGFubmVsIDAgVm9sdW1lIiwKKwkJCQkgICAgICAtMzI3NjgsIDMyNzY3LAorCQkJCSAgICAgIG9tYXBfbWNic3AzX2dldF9zdF9jaDBfdm9sdW1lLAorCQkJCSAgICAgIG9tYXBfbWNic3AzX3NldF9zdF9jaDBfdm9sdW1lKSwKKwlPTUFQX01DQlNQX1NPQ19TSU5HTEVfUzE2X0VYVCgiTWNCU1AzIFNpZGV0b25lIENoYW5uZWwgMSBWb2x1bWUiLAorCQkJCSAgICAgIC0zMjc2OCwgMzI3NjcsCisJCQkJICAgICAgb21hcF9tY2JzcDNfZ2V0X3N0X2NoMV92b2x1bWUsCisJCQkJICAgICAgb21hcF9tY2JzcDNfc2V0X3N0X2NoMV92b2x1bWUpLAorfTsKKworaW50IG9tYXBfbWNic3Bfc3RfYWRkX2NvbnRyb2xzKHN0cnVjdCBzbmRfc29jX2NvZGVjICpjb2RlYywgaW50IG1jYnNwX2lkKQoreworCWlmICghY3B1X2lzX29tYXAzNHh4KCkpCisJCXJldHVybiAtRU5PREVWOworCisJc3dpdGNoIChtY2JzcF9pZCkgeworCWNhc2UgMTogLyogTWNCU1AgMiAqLworCQlyZXR1cm4gc25kX3NvY19hZGRfY29udHJvbHMoY29kZWMsIG9tYXBfbWNic3AyX3N0X2NvbnRyb2xzLAorCQkJCQlBUlJBWV9TSVpFKG9tYXBfbWNic3AyX3N0X2NvbnRyb2xzKSk7CisJY2FzZSAyOiAvKiBNY0JTUCAzICovCisJCXJldHVybiBzbmRfc29jX2FkZF9jb250cm9scyhjb2RlYywgb21hcF9tY2JzcDNfc3RfY29udHJvbHMsCisJCQkJCUFSUkFZX1NJWkUob21hcF9tY2JzcDNfc3RfY29udHJvbHMpKTsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG9tYXBfbWNic3Bfc3RfYWRkX2NvbnRyb2xzKTsKKwogc3RhdGljIGludCBfX2luaXQgc25kX29tYXBfbWNic3BfaW5pdCh2b2lkKQogewogCXJldHVybiBzbmRfc29jX3JlZ2lzdGVyX2RhaXMob21hcF9tY2JzcF9kYWksCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmggYi9zb3VuZC9zb2Mvb21hcC9vbWFwLW1jYnNwLmgKaW5kZXggNjQ3ZDJmOS4uNmMzNjNlNSAxMDA2NDQKLS0tIGEvc291bmQvc29jL29tYXAvb21hcC1tY2JzcC5oCisrKyBiL3NvdW5kL3NvYy9vbWFwL29tYXAtbWNic3AuaApAQCAtNTAsMTEgKzUwLDEzIEBACiAjdW5kZWYgIE5VTV9MSU5LUwogI2RlZmluZSBOVU1fTElOS1MJMwogI2VuZGlmCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMjQzMCkgfHwgZGVmaW5lZChDT05GSUdfQVJDSF9PTUFQMzRYWCkKKyNpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyNDMwKSB8fCBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAzKQogI3VuZGVmICBOVU1fTElOS1MKICNkZWZpbmUgTlVNX0xJTktTCTUKICNlbmRpZgogCiBleHRlcm4gc3RydWN0IHNuZF9zb2NfZGFpIG9tYXBfbWNic3BfZGFpW05VTV9MSU5LU107CiAKK2ludCBvbWFwX21jYnNwX3N0X2FkZF9jb250cm9scyhzdHJ1Y3Qgc25kX3NvY19jb2RlYyAqY29kZWMsIGludCBtY2JzcF9pZCk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3B4YS9weGEtc3NwLmMgYi9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYwppbmRleCBlNjkzOTdmLi45ZTk1ZTUxIDEwMDY0NAotLS0gYS9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYworKysgYi9zb3VuZC9zb2MvcHhhL3B4YS1zc3AuYwpAQCAtNDIsMTEgKzQyLDE0IEBACiAgKiBTU1AgYXVkaW8gcHJpdmF0ZSBkYXRhCiAgKi8KIHN0cnVjdCBzc3BfcHJpdiB7Ci0Jc3RydWN0IHNzcF9kZXYgZGV2OworCXN0cnVjdCBzc3BfZGV2aWNlICpzc3A7CiAJdW5zaWduZWQgaW50IHN5c2NsazsKIAlpbnQgZGFpX2ZtdDsKICNpZmRlZiBDT05GSUdfUE0KLQlzdHJ1Y3Qgc3NwX3N0YXRlIHN0YXRlOworCXVpbnQzMl90CWNyMDsKKwl1aW50MzJfdAljcjE7CisJdWludDMyX3QJdG87CisJdWludDMyX3QJcHNwOwogI2VuZGlmCiB9OwogCkBAIC02MSw2ICs2NCwyMiBAQAogCQkgc3NwX3JlYWRfcmVnKHNzcCwgU1NBQ0QpKTsKIH0KIAorc3RhdGljIHZvaWQgc3NwX2VuYWJsZShzdHJ1Y3Qgc3NwX2RldmljZSAqc3NwKQoreworCXVpbnQzMl90IHNzY3IwOworCisJc3NjcjAgPSBfX3Jhd19yZWFkbChzc3AtPm1taW9fYmFzZSArIFNTQ1IwKSB8IFNTQ1IwX1NTRTsKKwlfX3Jhd193cml0ZWwoc3NjcjAsIHNzcC0+bW1pb19iYXNlICsgU1NDUjApOworfQorCitzdGF0aWMgdm9pZCBzc3BfZGlzYWJsZShzdHJ1Y3Qgc3NwX2RldmljZSAqc3NwKQoreworCXVpbnQzMl90IHNzY3IwOworCisJc3NjcjAgPSBfX3Jhd19yZWFkbChzc3AtPm1taW9fYmFzZSArIFNTQ1IwKSAmIH5TU0NSMF9TU0U7CisJX19yYXdfd3JpdGVsKHNzY3IwLCBzc3AtPm1taW9fYmFzZSArIFNTQ1IwKTsKK30KKwogc3RydWN0IHB4YTJ4eF9wY21fZG1hX2RhdGEgewogCXN0cnVjdCBweGEyeHhfcGNtX2RtYV9wYXJhbXMgcGFyYW1zOwogCWNoYXIgbmFtZVsyMF07CkBAIC05NCwxMyArMTEzLDEyIEBACiAJc3RydWN0IHNuZF9zb2NfcGNtX3J1bnRpbWUgKnJ0ZCA9IHN1YnN0cmVhbS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSA9IHJ0ZC0+ZGFpLT5jcHVfZGFpOwogCXN0cnVjdCBzc3BfcHJpdiAqcHJpdiA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3Qgc3NwX2RldmljZSAqc3NwID0gcHJpdi0+c3NwOwogCWludCByZXQgPSAwOwogCiAJaWYgKCFjcHVfZGFpLT5hY3RpdmUpIHsKLQkJcHJpdi0+ZGV2LnBvcnQgPSBjcHVfZGFpLT5pZCArIDE7Ci0JCXByaXYtPmRldi5pcnEgPSBOT19JUlE7Ci0JCWNsa19lbmFibGUocHJpdi0+ZGV2LnNzcC0+Y2xrKTsKLQkJc3NwX2Rpc2FibGUoJnByaXYtPmRldik7CisJCWNsa19lbmFibGUoc3NwLT5jbGspOworCQlzc3BfZGlzYWJsZShzc3ApOwogCX0KIAogCWlmIChjcHVfZGFpLT5kbWFfZGF0YSkgewpAQCAtMTE2LDEwICsxMzQsMTEgQEAKIAlzdHJ1Y3Qgc25kX3NvY19wY21fcnVudGltZSAqcnRkID0gc3Vic3RyZWFtLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CiAJc3RydWN0IHNzcF9wcml2ICpwcml2ID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzc3BfZGV2aWNlICpzc3AgPSBwcml2LT5zc3A7CiAKIAlpZiAoIWNwdV9kYWktPmFjdGl2ZSkgewotCQlzc3BfZGlzYWJsZSgmcHJpdi0+ZGV2KTsKLQkJY2xrX2Rpc2FibGUocHJpdi0+ZGV2LnNzcC0+Y2xrKTsKKwkJc3NwX2Rpc2FibGUoc3NwKTsKKwkJY2xrX2Rpc2FibGUoc3NwLT5jbGspOwogCX0KIAogCWlmIChjcHVfZGFpLT5kbWFfZGF0YSkgewpAQCAtMTMzLDI3ICsxNTIsMzkgQEAKIHN0YXRpYyBpbnQgcHhhX3NzcF9zdXNwZW5kKHN0cnVjdCBzbmRfc29jX2RhaSAqY3B1X2RhaSkKIHsKIAlzdHJ1Y3Qgc3NwX3ByaXYgKnByaXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNzcF9kZXZpY2UgKnNzcCA9IHByaXYtPnNzcDsKIAogCWlmICghY3B1X2RhaS0+YWN0aXZlKQotCQljbGtfZW5hYmxlKHByaXYtPmRldi5zc3AtPmNsayk7CisJCWNsa19lbmFibGUoc3NwLT5jbGspOwogCi0Jc3NwX3NhdmVfc3RhdGUoJnByaXYtPmRldiwgJnByaXYtPnN0YXRlKTsKLQljbGtfZGlzYWJsZShwcml2LT5kZXYuc3NwLT5jbGspOworCXByaXYtPmNyMCA9IF9fcmF3X3JlYWRsKHNzcC0+bW1pb19iYXNlICsgU1NDUjApOworCXByaXYtPmNyMSA9IF9fcmF3X3JlYWRsKHNzcC0+bW1pb19iYXNlICsgU1NDUjEpOworCXByaXYtPnRvICA9IF9fcmF3X3JlYWRsKHNzcC0+bW1pb19iYXNlICsgU1NUTyk7CisJcHJpdi0+cHNwID0gX19yYXdfcmVhZGwoc3NwLT5tbWlvX2Jhc2UgKyBTU1BTUCk7CiAKKwlzc3BfZGlzYWJsZShzc3ApOworCWNsa19kaXNhYmxlKHNzcC0+Y2xrKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBweGFfc3NwX3Jlc3VtZShzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkpCiB7CiAJc3RydWN0IHNzcF9wcml2ICpwcml2ID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzc3BfZGV2aWNlICpzc3AgPSBwcml2LT5zc3A7CisJdWludDMyX3Qgc3NzciA9IFNTU1JfUk9SIHwgU1NTUl9UVVIgfCBTU1NSX0JDRTsKIAotCWNsa19lbmFibGUocHJpdi0+ZGV2LnNzcC0+Y2xrKTsKLQlzc3BfcmVzdG9yZV9zdGF0ZSgmcHJpdi0+ZGV2LCAmcHJpdi0+c3RhdGUpOworCWNsa19lbmFibGUoc3NwLT5jbGspOworCisJX19yYXdfd3JpdGVsKHNzc3IsIHNzcC0+bW1pb19iYXNlICsgU1NTUik7CisJX19yYXdfd3JpdGVsKHByaXYtPmNyMCAmIH5TU0NSMF9TU0UsIHNzcC0+bW1pb19iYXNlICsgU1NDUjApOworCV9fcmF3X3dyaXRlbChwcml2LT5jcjEsIHNzcC0+bW1pb19iYXNlICsgU1NDUjEpOworCV9fcmF3X3dyaXRlbChwcml2LT50bywgIHNzcC0+bW1pb19iYXNlICsgU1NUTyk7CisJX19yYXdfd3JpdGVsKHByaXYtPnBzcCwgc3NwLT5tbWlvX2Jhc2UgKyBTU1BTUCk7CiAKIAlpZiAoY3B1X2RhaS0+YWN0aXZlKQotCQlzc3BfZW5hYmxlKCZwcml2LT5kZXYpOworCQlzc3BfZW5hYmxlKHNzcCk7CiAJZWxzZQotCQljbGtfZGlzYWJsZShwcml2LT5kZXYuc3NwLT5jbGspOworCQljbGtfZGlzYWJsZShzc3AtPmNsayk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIwMyw3ICsyMzQsNyBAQAogCWludCBjbGtfaWQsIHVuc2lnbmVkIGludCBmcmVxLCBpbnQgZGlyKQogewogCXN0cnVjdCBzc3BfcHJpdiAqcHJpdiA9IGNwdV9kYWktPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3Qgc3NwX2RldmljZSAqc3NwID0gcHJpdi0+ZGV2LnNzcDsKKwlzdHJ1Y3Qgc3NwX2RldmljZSAqc3NwID0gcHJpdi0+c3NwOwogCWludCB2YWw7CiAKIAl1MzIgc3NjcjAgPSBzc3BfcmVhZF9yZWcoc3NwLCBTU0NSMCkgJgpAQCAtMjQ0LDExICsyNzUsMTEgQEAKIAkvKiBUaGUgU1NQIGNsb2NrIG11c3QgYmUgZGlzYWJsZWQgd2hlbiBjaGFuZ2luZyBTU1AgY2xvY2sgbW9kZQogCSAqIG9uIFBYQTJ4eC4gIE9uIFBYQTN4eCBpdCBtdXN0IGJlIGVuYWJsZWQgd2hlbiBkb2luZyBzby4gKi8KIAlpZiAoIWNwdV9pc19weGEzeHgoKSkKLQkJY2xrX2Rpc2FibGUocHJpdi0+ZGV2LnNzcC0+Y2xrKTsKKwkJY2xrX2Rpc2FibGUoc3NwLT5jbGspOwogCXZhbCA9IHNzcF9yZWFkX3JlZyhzc3AsIFNTQ1IwKSB8IHNzY3IwOwogCXNzcF93cml0ZV9yZWcoc3NwLCBTU0NSMCwgdmFsKTsKIAlpZiAoIWNwdV9pc19weGEzeHgoKSkKLQkJY2xrX2VuYWJsZShwcml2LT5kZXYuc3NwLT5jbGspOworCQljbGtfZW5hYmxlKHNzcC0+Y2xrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMjYwLDcgKzI5MSw3IEBACiAJaW50IGRpdl9pZCwgaW50IGRpdikKIHsKIAlzdHJ1Y3Qgc3NwX3ByaXYgKnByaXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNzcF9kZXZpY2UgKnNzcCA9IHByaXYtPmRldi5zc3A7CisJc3RydWN0IHNzcF9kZXZpY2UgKnNzcCA9IHByaXYtPnNzcDsKIAlpbnQgdmFsOwogCiAJc3dpdGNoIChkaXZfaWQpIHsKQEAgLTMxMSw3ICszNDIsNyBAQAogCWludCBzb3VyY2UsIHVuc2lnbmVkIGludCBmcmVxX2luLCB1bnNpZ25lZCBpbnQgZnJlcV9vdXQpCiB7CiAJc3RydWN0IHNzcF9wcml2ICpwcml2ID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzc3BfZGV2aWNlICpzc3AgPSBwcml2LT5kZXYuc3NwOworCXN0cnVjdCBzc3BfZGV2aWNlICpzc3AgPSBwcml2LT5zc3A7CiAJdTMyIHNzYWNkID0gc3NwX3JlYWRfcmVnKHNzcCwgU1NBQ0QpICYgfjB4NzA7CiAKICNpZiBkZWZpbmVkKENPTkZJR19QWEEzeHgpCkBAIC0zODAsNyArNDExLDcgQEAKIAl1bnNpZ25lZCBpbnQgdHhfbWFzaywgdW5zaWduZWQgaW50IHJ4X21hc2ssIGludCBzbG90cywgaW50IHNsb3Rfd2lkdGgpCiB7CiAJc3RydWN0IHNzcF9wcml2ICpwcml2ID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzc3BfZGV2aWNlICpzc3AgPSBwcml2LT5kZXYuc3NwOworCXN0cnVjdCBzc3BfZGV2aWNlICpzc3AgPSBwcml2LT5zc3A7CiAJdTMyIHNzY3IwOwogCiAJc3NjcjAgPSBzc3BfcmVhZF9yZWcoc3NwLCBTU0NSMCk7CkBAIC00MTUsNyArNDQ2LDcgQEAKIAlpbnQgdHJpc3RhdGUpCiB7CiAJc3RydWN0IHNzcF9wcml2ICpwcml2ID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzc3BfZGV2aWNlICpzc3AgPSBwcml2LT5kZXYuc3NwOworCXN0cnVjdCBzc3BfZGV2aWNlICpzc3AgPSBwcml2LT5zc3A7CiAJdTMyIHNzY3IxOwogCiAJc3NjcjEgPSBzc3BfcmVhZF9yZWcoc3NwLCBTU0NSMSk7CkBAIC00MzcsNyArNDY4LDcgQEAKIAkJdW5zaWduZWQgaW50IGZtdCkKIHsKIAlzdHJ1Y3Qgc3NwX3ByaXYgKnByaXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNzcF9kZXZpY2UgKnNzcCA9IHByaXYtPmRldi5zc3A7CisJc3RydWN0IHNzcF9kZXZpY2UgKnNzcCA9IHByaXYtPnNzcDsKIAl1MzIgc3NjcjA7CiAJdTMyIHNzY3IxOwogCXUzMiBzc3BzcDsKQEAgLTUzMiw3ICs1NjMsNyBAQAogCXN0cnVjdCBzbmRfc29jX3BjbV9ydW50aW1lICpydGQgPSBzdWJzdHJlYW0tPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgc25kX3NvY19kYWkgKmNwdV9kYWkgPSBydGQtPmRhaS0+Y3B1X2RhaTsKIAlzdHJ1Y3Qgc3NwX3ByaXYgKnByaXYgPSBjcHVfZGFpLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNzcF9kZXZpY2UgKnNzcCA9IHByaXYtPmRldi5zc3A7CisJc3RydWN0IHNzcF9kZXZpY2UgKnNzcCA9IHByaXYtPnNzcDsKIAlpbnQgY2huID0gcGFyYW1zX2NoYW5uZWxzKHBhcmFtcyk7CiAJdTMyIHNzY3IwOwogCXUzMiBzc3BzcDsKQEAgLTY0MiwxMiArNjczLDEyIEBACiAJc3RydWN0IHNuZF9zb2NfZGFpICpjcHVfZGFpID0gcnRkLT5kYWktPmNwdV9kYWk7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IHNzcF9wcml2ICpwcml2ID0gY3B1X2RhaS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCBzc3BfZGV2aWNlICpzc3AgPSBwcml2LT5kZXYuc3NwOworCXN0cnVjdCBzc3BfZGV2aWNlICpzc3AgPSBwcml2LT5zc3A7CiAJaW50IHZhbDsKIAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9SRVNVTUU6Ci0JCXNzcF9lbmFibGUoJnByaXYtPmRldik7CisJCXNzcF9lbmFibGUoc3NwKTsKIAkJYnJlYWs7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9QQVVTRV9SRUxFQVNFOgogCQl2YWwgPSBzc3BfcmVhZF9yZWcoc3NwLCBTU0NSMSk7CkBAIC02NjYsNyArNjk3LDcgQEAKIAkJZWxzZQogCQkJdmFsIHw9IFNTQ1IxX1JTUkU7CiAJCXNzcF93cml0ZV9yZWcoc3NwLCBTU0NSMSwgdmFsKTsKLQkJc3NwX2VuYWJsZSgmcHJpdi0+ZGV2KTsKKwkJc3NwX2VuYWJsZShzc3ApOwogCQlicmVhazsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6CiAJCXZhbCA9IHNzcF9yZWFkX3JlZyhzc3AsIFNTQ1IxKTsKQEAgLTY3Nyw3ICs3MDgsNyBAQAogCQlzc3Bfd3JpdGVfcmVnKHNzcCwgU1NDUjEsIHZhbCk7CiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfU1VTUEVORDoKLQkJc3NwX2Rpc2FibGUoJnByaXYtPmRldik7CisJCXNzcF9kaXNhYmxlKHNzcCk7CiAJCWJyZWFrOwogCWNhc2UgU05EUlZfUENNX1RSSUdHRVJfUEFVU0VfUFVTSDoKIAkJdmFsID0gc3NwX3JlYWRfcmVnKHNzcCwgU1NDUjEpOwpAQCAtNzA3LDggKzczOCw4IEBACiAJaWYgKCFwcml2KQogCQlyZXR1cm4gLUVOT01FTTsKIAotCXByaXYtPmRldi5zc3AgPSBzc3BfcmVxdWVzdChkYWktPmlkICsgMSwgIlNvQyBhdWRpbyIpOwotCWlmIChwcml2LT5kZXYuc3NwID09IE5VTEwpIHsKKwlwcml2LT5zc3AgPSBzc3BfcmVxdWVzdChkYWktPmlkICsgMSwgIlNvQyBhdWRpbyIpOworCWlmIChwcml2LT5zc3AgPT0gTlVMTCkgewogCQlyZXQgPSAtRU5PREVWOwogCQlnb3RvIGVycl9wcml2OwogCX0KQEAgLTcyNyw3ICs3NTgsNyBAQAogCQkJICAgICAgc3RydWN0IHNuZF9zb2NfZGFpICpkYWkpCiB7CiAJc3RydWN0IHNzcF9wcml2ICpwcml2ID0gZGFpLT5wcml2YXRlX2RhdGE7Ci0Jc3NwX2ZyZWUocHJpdi0+ZGV2LnNzcCk7CisJc3NwX2ZyZWUocHJpdi0+c3NwKTsKIH0KIAogI2RlZmluZSBQWEFfU1NQX1JBVEVTIChTTkRSVl9QQ01fUkFURV84MDAwIHwgU05EUlZfUENNX1JBVEVfMTEwMjUgfFwKZGlmZiAtLWdpdCBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMgYi9zb3VuZC9zb2MvczNjMjR4eC9zM2M2NHh4LWkycy5jCmluZGV4IDkzZWQzYWEuLmE3MmMyNTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zM2MyNHh4L3MzYzY0eHgtaTJzLmMKKysrIGIvc291bmQvc29jL3MzYzI0eHgvczNjNjR4eC1pMnMuYwpAQCAtMjIsOCArMjIsOCBAQAogI2luY2x1ZGUgPHNvdW5kL3NvYy5oPgogCiAjaW5jbHVkZSA8cGxhdC9yZWdzLXMzYzI0MTItaWlzLmg+Ci0jaW5jbHVkZSA8cGxhdC9ncGlvLWJhbmstZC5oPgotI2luY2x1ZGUgPHBsYXQvZ3Bpby1iYW5rLWUuaD4KKyNpbmNsdWRlIDxtYWNoL2dwaW8tYmFuay1kLmg+CisjaW5jbHVkZSA8bWFjaC9ncGlvLWJhbmstZS5oPgogI2luY2x1ZGUgPHBsYXQvZ3Bpby1jZmcuaD4KIAogI2luY2x1ZGUgPG1hY2gvbWFwLmg+CmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc2gvc2l1LmggYi9zb3VuZC9zb2Mvc2gvc2l1LmgKaW5kZXggOWNjMDRhYi4uYzBiZmFiOCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL3NpdS5oCisrKyBiL3NvdW5kL3NvYy9zaC9zaXUuaApAQCAtNzIsNyArNzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKLSNpbmNsdWRlIDxhc20vZG1hLXNoLmg+CisjaW5jbHVkZSA8YXNtL2RtYWVuZ2luZS5oPgogCiAjaW5jbHVkZSA8c291bmQvY29yZS5oPgogI2luY2x1ZGUgPHNvdW5kL3BjbS5oPgpkaWZmIC0tZ2l0IGEvc291bmQvc29jL3NoL3NpdV9wY20uYyBiL3NvdW5kL3NvYy9zaC9zaXVfcGNtLmMKaW5kZXggYzVlZmMzMC4uYmE3ZjhkMCAxMDA2NDQKLS0tIGEvc291bmQvc29jL3NoL3NpdV9wY20uYworKysgYi9zb3VuZC9zb2Mvc2gvc2l1X3BjbS5jCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8c291bmQvcGNtX3BhcmFtcy5oPgogI2luY2x1ZGUgPHNvdW5kL3NvYy1kYWkuaD4KIAotI2luY2x1ZGUgPGFzbS9kbWEtc2guaD4KKyNpbmNsdWRlIDxhc20vZG1hZW5naW5lLmg+CiAjaW5jbHVkZSA8YXNtL3NpdS5oPgogCiAjaW5jbHVkZSAic2l1LmgiCmRpZmYgLS1naXQgYS9zb3VuZC9zb2Mvc29jLWNvcmUuYyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCmluZGV4IGEwM2JhYzkuLmM4YjA1NTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvYy9zb2MtY29yZS5jCisrKyBiL3NvdW5kL3NvYy9zb2MtY29yZS5jCkBAIC00MjcsMjQgKzQyNywyNCBAQAogCWlmICghcnVudGltZS0+aHcucmF0ZXMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJhc29jOiAlcyA8LT4gJXMgTm8gbWF0Y2hpbmcgcmF0ZXNcbiIsCiAJCQljb2RlY19kYWktPm5hbWUsIGNwdV9kYWktPm5hbWUpOwotCQlnb3RvIG1hY2hpbmVfZXJyOworCQlnb3RvIGNvbmZpZ19lcnI7CiAJfQogCWlmICghcnVudGltZS0+aHcuZm9ybWF0cykgewogCQlwcmludGsoS0VSTl9FUlIgImFzb2M6ICVzIDwtPiAlcyBObyBtYXRjaGluZyBmb3JtYXRzXG4iLAogCQkJY29kZWNfZGFpLT5uYW1lLCBjcHVfZGFpLT5uYW1lKTsKLQkJZ290byBtYWNoaW5lX2VycjsKKwkJZ290byBjb25maWdfZXJyOwogCX0KIAlpZiAoIXJ1bnRpbWUtPmh3LmNoYW5uZWxzX21pbiB8fCAhcnVudGltZS0+aHcuY2hhbm5lbHNfbWF4KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYXNvYzogJXMgPC0+ICVzIE5vIG1hdGNoaW5nIGNoYW5uZWxzXG4iLAogCQkJY29kZWNfZGFpLT5uYW1lLCBjcHVfZGFpLT5uYW1lKTsKLQkJZ290byBtYWNoaW5lX2VycjsKKwkJZ290byBjb25maWdfZXJyOwogCX0KIAogCS8qIFN5bW1ldHJ5IG9ubHkgYXBwbGllcyBpZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhY3RpdmUgc3RyZWFtLiAqLwogCWlmIChjcHVfZGFpLT5hY3RpdmUgfHwgY29kZWNfZGFpLT5hY3RpdmUpIHsKIAkJcmV0ID0gc29jX3BjbV9hcHBseV9zeW1tZXRyeShzdWJzdHJlYW0pOwogCQlpZiAocmV0ICE9IDApCi0JCQlnb3RvIG1hY2hpbmVfZXJyOworCQkJZ290byBjb25maWdfZXJyOwogCX0KIAogCXByX2RlYnVnKCJhc29jOiAlcyA8LT4gJXMgaW5mbzpcbiIsIGNvZGVjX2RhaS0+bmFtZSwgY3B1X2RhaS0+bmFtZSk7CkBAIC00NjQsMTAgKzQ2NCwxNCBAQAogCW11dGV4X3VubG9jaygmcGNtX211dGV4KTsKIAlyZXR1cm4gMDsKIAotbWFjaGluZV9lcnI6Citjb25maWdfZXJyOgogCWlmIChtYWNoaW5lLT5vcHMgJiYgbWFjaGluZS0+b3BzLT5zaHV0ZG93bikKIAkJbWFjaGluZS0+b3BzLT5zaHV0ZG93bihzdWJzdHJlYW0pOwogCittYWNoaW5lX2VycjoKKwlpZiAoY29kZWNfZGFpLT5vcHMtPnNodXRkb3duKQorCQljb2RlY19kYWktPm9wcy0+c2h1dGRvd24oc3Vic3RyZWFtLCBjb2RlY19kYWkpOworCiBjb2RlY19kYWlfZXJyOgogCWlmIChwbGF0Zm9ybS0+cGNtX29wcy0+Y2xvc2UpCiAJCXBsYXRmb3JtLT5wY21fb3BzLT5jbG9zZShzdWJzdHJlYW0pOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL0tjb25maWcgYi9zb3VuZC91c2IvS2NvbmZpZwppbmRleCA4YzI5MjU4Li5jNTcwYWUzIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvS2NvbmZpZworKysgYi9zb3VuZC91c2IvS2NvbmZpZwpAQCAtMjIsMTMgKzIyLDEzIEBACiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtdXNiLWF1ZGlvLgogCiBjb25maWcgU05EX1VTQl9VQTEwMQotCXRyaXN0YXRlICJFZGlyb2wgVUEtMTAxIGRyaXZlciAoRVhQRVJJTUVOVEFMKSIKKwl0cmlzdGF0ZSAiRWRpcm9sIFVBLTEwMS9VQS0xMDAwIGRyaXZlciAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBTTkRfUENNCiAJc2VsZWN0IFNORF9SQVdNSURJCiAJaGVscAotCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBFZGlyb2wgVUEtMTAxIGF1ZGlvL01JREkKLQkgIGludGVyZmFjZS4KKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgRWRpcm9sIFVBLTEwMSBhbmQgVUEtMTAwMAorCSAgYXVkaW8vTUlESSBpbnRlcmZhY2VzLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBzbmQtdWExMDEuCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvY2FpYXEvbWlkaS5oIGIvc291bmQvdXNiL2NhaWFxL21pZGkuaAppbmRleCA5ZDE2ZGIwLi4zODBmOTg0IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvY2FpYXEvbWlkaS5oCisrKyBiL3NvdW5kL3VzYi9jYWlhcS9taWRpLmgKQEAgLTMsNiArMyw2IEBACiAKIGludCBzbmRfdXNiX2NhaWFxX21pZGlfaW5pdChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2KTsKIHZvaWQgc25kX3VzYl9jYWlhcV9taWRpX2hhbmRsZV9pbnB1dChzdHJ1Y3Qgc25kX3VzYl9jYWlhcWRldiAqZGV2LCBpbnQgcG9ydCwgY29uc3QgY2hhciAqYnVmLCBpbnQgbGVuKTsKLXZvaWQgc25kX3VzYl9jYWlhcV9taWRpX291dHB1dF9kb25lKHN0cnVjdCB1cmIqIHVyYik7Cit2b2lkIHNuZF91c2JfY2FpYXFfbWlkaV9vdXRwdXRfZG9uZShzdHJ1Y3QgdXJiICp1cmIpOwogCiAjZW5kaWYgLyogQ0FJQVFfTUlESV9IICovCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdWExMDEuYyBiL3NvdW5kL3VzYi91YTEwMS5jCmluZGV4IDRmNGNjZGYuLjNkNDU4ZDMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91YTEwMS5jCisrKyBiL3NvdW5kL3VzYi91YTEwMS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIEVkaXJvbCBVQS0xMDEgZHJpdmVyCisgKiBFZGlyb2wgVUEtMTAxL1VBLTEwMDAgZHJpdmVyCiAgKiBDb3B5cmlnaHQgKGMpIENsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPgogICoKICAqIFRoaXMgZHJpdmVyIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTI1LDEzICsyNSwxMCBAQAogI2luY2x1ZGUgPHNvdW5kL3BjbV9wYXJhbXMuaD4KICNpbmNsdWRlICJ1c2JhdWRpby5oIgogCi1NT0RVTEVfREVTQ1JJUFRJT04oIkVkaXJvbCBVQS0xMDEgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkVkaXJvbCBVQS0xMDEvMTAwMCBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkNsZW1lbnMgTGFkaXNjaCA8Y2xlbWVuc0BsYWRpc2NoLmRlPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwotTU9EVUxFX1NVUFBPUlRFRF9ERVZJQ0UoInt7RWRpcm9sLFVBLTEwMX19Iik7Ci0KLS8qIEkgdXNlIG15IFVBLTFBIGZvciB0ZXN0aW5nIGJlY2F1c2UgSSBkb24ndCBoYXZlIGEgVUEtMTAxIC4uLiAqLwotI2RlZmluZSBVQTFBX0hBQ0sKK01PRFVMRV9TVVBQT1JURURfREVWSUNFKCJ7e0VkaXJvbCxVQS0xMDF9LHtFZGlyb2wsVUEtMTAwMH19Iik7CiAKIC8qCiAgKiBTaG91bGQgbm90IGJlIGxvd2VyIHRoYW4gdGhlIG1pbmltdW0gc2NoZWR1bGluZyBkZWxheSBvZiB0aGUgaG9zdApAQCAtMTMyLDkgKzEyOSw2IEBACiAJCQlkbWFfYWRkcl90IGRtYTsKIAkJfSBidWZmZXJzW01BWF9NRU1PUllfQlVGRkVSU107CiAJfSBjYXB0dXJlLCBwbGF5YmFjazsKLQotCXVuc2lnbmVkIGludCBmcHNbMTBdOwotCXVuc2lnbmVkIGludCBmcmFtZV9jb3VudGVyOwogfTsKIAogc3RhdGljIERFRklORV9NVVRFWChkZXZpY2VzX211dGV4KTsKQEAgLTQyNCwxNiArNDE4LDYgQEAKIAlpZiAoZG9fcGVyaW9kX2VsYXBzZWQpCiAJCXNuZF9wY21fcGVyaW9kX2VsYXBzZWQoc3RyZWFtLT5zdWJzdHJlYW0pOwogCi0JLyogZm9yIGRlYnVnZ2luZzogbWVhc3VyZSB0aGUgc2FtcGxlIHJhdGUgcmVsYXRpdmUgdG8gdGhlIFVTQiBjbG9jayAqLwotCXVhLT5mcHNbdWEtPmZyYW1lX2NvdW50ZXIrKyAvIHVhLT5wYWNrZXRzX3Blcl9zZWNvbmRdICs9IGZyYW1lczsKLQlpZiAodWEtPmZyYW1lX2NvdW50ZXIgPj0gQVJSQVlfU0laRSh1YS0+ZnBzKSAqIHVhLT5wYWNrZXRzX3Blcl9zZWNvbmQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgImNhcHR1cmUgcmF0ZToiKTsKLQkJZm9yIChmcmFtZXMgPSAwOyBmcmFtZXMgPCBBUlJBWV9TSVpFKHVhLT5mcHMpOyArK2ZyYW1lcykKLQkJCXByaW50ayhLRVJOX0NPTlQgIiAldSIsIHVhLT5mcHNbZnJhbWVzXSk7Ci0JCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci0JCW1lbXNldCh1YS0+ZnBzLCAwLCBzaXplb2YodWEtPmZwcykpOwotCQl1YS0+ZnJhbWVfY291bnRlciA9IDA7Ci0JfQogCXJldHVybjsKIAogc3RyZWFtX3N0b3BwZWQ6CkBAIC0xMjAwLDEzICsxMTg0LDMwIEBACiAJCS50eXBlID0gUVVJUktfTUlESV9GSVhFRF9FTkRQT0lOVCwKIAkJLmRhdGEgPSAmbWlkaV9lcAogCX07CisJc3RhdGljIGNvbnN0IGludCBpbnRmX251bWJlcnNbMl1bM10gPSB7CisJCXsJLyogVUEtMTAxICovCisJCQlbSU5URl9QTEFZQkFDS10gPSAwLAorCQkJW0lOVEZfQ0FQVFVSRV0gPSAxLAorCQkJW0lOVEZfTUlESV0gPSAyLAorCQl9LAorCQl7CS8qIFVBLTEwMDAgKi8KKwkJCVtJTlRGX0NBUFRVUkVdID0gMSwKKwkJCVtJTlRGX1BMQVlCQUNLXSA9IDIsCisJCQlbSU5URl9NSURJXSA9IDMsCisJCX0sCisJfTsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CiAJc3RydWN0IHVhMTAxICp1YTsKIAl1bnNpZ25lZCBpbnQgY2FyZF9pbmRleCwgaTsKKwlpbnQgaXNfdWExMDAwOworCWNvbnN0IGNoYXIgKm5hbWU7CiAJY2hhciB1c2JfcGF0aFszMl07CiAJaW50IGVycjsKIAotCWlmIChpbnRlcmZhY2UtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciAhPSAwKQorCWlzX3VhMTAwMCA9IHVzYl9pZC0+aWRQcm9kdWN0ID09IDB4MDA0NDsKKworCWlmIChpbnRlcmZhY2UtPmFsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciAhPQorCSAgICBpbnRmX251bWJlcnNbaXNfdWExMDAwXVswXSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAltdXRleF9sb2NrKCZkZXZpY2VzX211dGV4KTsKQEAgLTEyMzksMjAgKzEyNDAsMTMgQEAKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1YS0+cmF0ZV9mZWVkYmFja193YWl0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1YS0+YWxzYV9wbGF5YmFja193YWl0KTsKIAotI2lmZGVmIFVBMUFfSEFDSwotCWlmICh1YS0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PSBjcHVfdG9fbGUxNigweDAwMTgpKSB7Ci0JCXVhLT5pbnRmWzJdID0gaW50ZXJmYWNlOwotCQl1YS0+aW50ZlswXSA9IHVzYl9pZm51bV90b19pZih1YS0+ZGV2LCAxKTsKLQkJdWEtPmludGZbMV0gPSB1c2JfaWZudW1fdG9faWYodWEtPmRldiwgMik7Ci0JCXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZ1YTEwMV9kcml2ZXIsIHVhLT5pbnRmWzBdLCB1YSk7Ci0JCXVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlKCZ1YTEwMV9kcml2ZXIsIHVhLT5pbnRmWzFdLCB1YSk7Ci0JfSBlbHNlIHsKLSNlbmRpZgogCXVhLT5pbnRmWzBdID0gaW50ZXJmYWNlOwogCWZvciAoaSA9IDE7IGkgPCBBUlJBWV9TSVpFKHVhLT5pbnRmKTsgKytpKSB7Ci0JCXVhLT5pbnRmW2ldID0gdXNiX2lmbnVtX3RvX2lmKHVhLT5kZXYsIGkpOworCQl1YS0+aW50ZltpXSA9IHVzYl9pZm51bV90b19pZih1YS0+ZGV2LAorCQkJCQkgICAgICBpbnRmX251bWJlcnNbaXNfdWExMDAwXVtpXSk7CiAJCWlmICghdWEtPmludGZbaV0pIHsKLQkJCWRldl9lcnIoJnVhLT5kZXYtPmRldiwgImludGVyZmFjZSAldSBub3QgZm91bmRcbiIsIGkpOworCQkJZGV2X2VycigmdWEtPmRldi0+ZGV2LCAiaW50ZXJmYWNlICV1IG5vdCBmb3VuZFxuIiwKKwkJCQlpbnRmX251bWJlcnNbaXNfdWExMDAwXVtpXSk7CiAJCQllcnIgPSAtRU5YSU87CiAJCQlnb3RvIHByb2JlX2Vycm9yOwogCQl9CkBAIC0xMjY0LDM5ICsxMjU4LDE5IEBACiAJCQlnb3RvIHByb2JlX2Vycm9yOwogCQl9CiAJfQotI2lmZGVmIFVBMUFfSEFDSwotCX0KLSNlbmRpZgogCiAJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmaW50ZXJmYWNlLT5kZXYpOwogCi0jaWZkZWYgVUExQV9IQUNLCi0JaWYgKHVhLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ID09IGNwdV90b19sZTE2KDB4MDAxOCkpIHsKLQkJdWEtPmZvcm1hdF9iaXQgPSBTTkRSVl9QQ01fRk1UQklUX1MxNl9MRTsKLQkJdWEtPnJhdGUgPSA0NDEwMDsKLQkJdWEtPnBhY2tldHNfcGVyX3NlY29uZCA9IDEwMDA7Ci0JCXVhLT5jYXB0dXJlLmNoYW5uZWxzID0gMjsKLQkJdWEtPnBsYXliYWNrLmNoYW5uZWxzID0gMjsKLQkJdWEtPmNhcHR1cmUuZnJhbWVfYnl0ZXMgPSA0OwotCQl1YS0+cGxheWJhY2suZnJhbWVfYnl0ZXMgPSA0OwotCQl1YS0+Y2FwdHVyZS51c2JfcGlwZSA9IHVzYl9yY3Zpc29jcGlwZSh1YS0+ZGV2LCAyKTsKLQkJdWEtPnBsYXliYWNrLnVzYl9waXBlID0gdXNiX3NuZGlzb2NwaXBlKHVhLT5kZXYsIDEpOwotCQl1YS0+Y2FwdHVyZS5tYXhfcGFja2V0X2J5dGVzID0gMTkyOwotCQl1YS0+cGxheWJhY2subWF4X3BhY2tldF9ieXRlcyA9IDE5MjsKLQl9IGVsc2UgewotI2VuZGlmCiAJZXJyID0gZGV0ZWN0X3VzYl9mb3JtYXQodWEpOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIHByb2JlX2Vycm9yOwotI2lmZGVmIFVBMUFfSEFDSwotCX0KLSNlbmRpZgogCisJbmFtZSA9IHVzYl9pZC0+aWRQcm9kdWN0ID09IDB4MDA0NCA/ICJVQS0xMDAwIiA6ICJVQS0xMDEiOwogCXN0cmNweShjYXJkLT5kcml2ZXIsICJVQS0xMDEiKTsKLQlzdHJjcHkoY2FyZC0+c2hvcnRuYW1lLCAiVUEtMTAxIik7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgbmFtZSk7CiAJdXNiX21ha2VfcGF0aCh1YS0+ZGV2LCB1c2JfcGF0aCwgc2l6ZW9mKHVzYl9wYXRoKSk7CiAJc25wcmludGYodWEtPmNhcmQtPmxvbmduYW1lLCBzaXplb2YodWEtPmNhcmQtPmxvbmduYW1lKSwKLQkJICJFRElST0wgVUEtMTAxIChzZXJpYWwgJXMpLCAldSBIeiBhdCAlcywgJXMgc3BlZWQiLAorCQkgIkVESVJPTCAlcyAoc2VyaWFsICVzKSwgJXUgSHogYXQgJXMsICVzIHNwZWVkIiwgbmFtZSwKIAkJIHVhLT5kZXYtPnNlcmlhbCA/IHVhLT5kZXYtPnNlcmlhbCA6ICI/IiwgdWEtPnJhdGUsIHVzYl9wYXRoLAogCQkgdWEtPmRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0ggPyAiaGlnaCIgOiAiZnVsbCIpOwogCkBAIC0xMzE0LDI0ICsxMjg4LDE4IEBACiAJaWYgKGVyciA8IDApCiAJCWdvdG8gcHJvYmVfZXJyb3I7CiAKLQllcnIgPSBzbmRfcGNtX25ldyhjYXJkLCAiVUEtMTAxIiwgMCwgMSwgMSwgJnVhLT5wY20pOworCWVyciA9IHNuZF9wY21fbmV3KGNhcmQsIG5hbWUsIDAsIDEsIDEsICZ1YS0+cGNtKTsKIAlpZiAoZXJyIDwgMCkKIAkJZ290byBwcm9iZV9lcnJvcjsKIAl1YS0+cGNtLT5wcml2YXRlX2RhdGEgPSB1YTsKLQlzdHJjcHkodWEtPnBjbS0+bmFtZSwgIlVBLTEwMSIpOworCXN0cmNweSh1YS0+cGNtLT5uYW1lLCBuYW1lKTsKIAlzbmRfcGNtX3NldF9vcHModWEtPnBjbSwgU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSywgJnBsYXliYWNrX3BjbV9vcHMpOwogCXNuZF9wY21fc2V0X29wcyh1YS0+cGNtLCBTTkRSVl9QQ01fU1RSRUFNX0NBUFRVUkUsICZjYXB0dXJlX3BjbV9vcHMpOwogCi0jaWZkZWYgVUExQV9IQUNLCi0JaWYgKHVhLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0ICE9IGNwdV90b19sZTE2KDB4MDAxOCkpIHsKLSNlbmRpZgogCWVyciA9IHNuZF91c2JtaWRpX2NyZWF0ZShjYXJkLCB1YS0+aW50ZltJTlRGX01JREldLAogCQkJCSAmdWEtPm1pZGlfbGlzdCwgJm1pZGlfcXVpcmspOwogCWlmIChlcnIgPCAwKQogCQlnb3RvIHByb2JlX2Vycm9yOwotI2lmZGVmIFVBMUFfSEFDSwotCX0KLSNlbmRpZgogCiAJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CiAJaWYgKGVyciA8IDApCkBAIC0xMzg2LDExICsxMzU0LDkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHVhMTAxX2lkc1tdID0gewotI2lmZGVmIFVBMUFfSEFDSwotCXsgVVNCX0RFVklDRSgweDA1ODIsIDB4MDAxOCkgfSwKLSNlbmRpZgotCXsgVVNCX0RFVklDRSgweDA1ODIsIDB4MDA3ZCkgfSwKLQl7IFVTQl9ERVZJQ0UoMHgwNTgyLCAweDAwOGQpIH0sCisJeyBVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDQ0KSB9LCAvKiBVQS0xMDAwIGhpZ2ggc3BlZWQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwNTgyLCAweDAwN2QpIH0sIC8qIFVBLTEwMSBoaWdoIHNwZWVkICovCisJeyBVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDhkKSB9LCAvKiBVQS0xMDEgZnVsbCBzcGVlZCAqLwogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB1YTEwMV9pZHMpOwpkaWZmIC0tZ2l0IGEvc291bmQvdXNiL3VzYmF1ZGlvLmMgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwppbmRleCBjNTM5ZjdmLi4xMWIwODI2IDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNiYXVkaW8uYworKysgYi9zb3VuZC91c2IvdXNiYXVkaW8uYwpAQCAtMjQ4Myw3ICsyNDgzLDYgQEAKIAkJCQkgICBzYW1wbGVfd2lkdGgsIHNhbXBsZV9ieXRlcyk7CiAJCX0KIAkJLyogY2hlY2sgdGhlIGZvcm1hdCBieXRlIHNpemUgKi8KLQkJcHJpbnRrKCIgWFhYWFggU0FNUExFIEJZVEVTICVkXG4iLCBzYW1wbGVfYnl0ZXMpOwogCQlzd2l0Y2ggKHNhbXBsZV9ieXRlcykgewogCQljYXNlIDE6CiAJCQlwY21fZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TODsKQEAgLTI1ODEsNiArMjU4MCw5IEBACiAJCQkgICAgIGNoaXAtPnVzYl9pZCA9PSBVU0JfSUQoMHgwZDhjLCAweDAxMDIpKSAmJgogCQkJICAgIGZwLT5hbHRzZXR0aW5nID09IDUgJiYgZnAtPm1heHBhY2tzaXplID09IDM5MikKIAkJCQlyYXRlID0gOTYwMDA7CisJCQkvKiBDcmVhdGl2ZSBWRjA0NzAgTGl2ZSBDYW0gcmVwb3J0cyAxNiBrSHogaW5zdGVhZCBvZiA4a0h6ICovCisJCQlpZiAocmF0ZSA9PSAxNjAwMCAmJiBjaGlwLT51c2JfaWQgPT0gVVNCX0lEKDB4MDQxZSwgMHg0MDY4KSkKKwkJCQlyYXRlID0gODAwMDsKIAkJCWZwLT5yYXRlX3RhYmxlW2ZwLT5ucl9yYXRlc10gPSByYXRlOwogCQkJaWYgKCFmcC0+cmF0ZV9taW4gfHwgcmF0ZSA8IGZwLT5yYXRlX21pbikKIAkJCQlmcC0+cmF0ZV9taW4gPSByYXRlOwpAQCAtMzM4Niw1OCArMzM4OCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBDcmVhdGUgYSBzdHJlYW0gZm9yIGFuIEVkaXJvbCBVQS0xMDAwIGludGVyZmFjZS4KLSAqLwotc3RhdGljIGludCBjcmVhdGVfdWExMDAwX3F1aXJrKHN0cnVjdCBzbmRfdXNiX2F1ZGlvICpjaGlwLAotCQkJICAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSwKLQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlyayAqcXVpcmspCi17Ci0Jc3RhdGljIGNvbnN0IHN0cnVjdCBhdWRpb2Zvcm1hdCB1YTEwMDBfZm9ybWF0ID0gewotCQkuZm9ybWF0ID0gU05EUlZfUENNX0ZPUk1BVF9TMzJfTEUsCi0JCS5mbXRfdHlwZSA9IFVBQ19GT1JNQVRfVFlQRV9JLAotCQkuYWx0c2V0dGluZyA9IDEsCi0JCS5hbHRzZXRfaWR4ID0gMSwKLQkJLmF0dHJpYnV0ZXMgPSAwLAotCQkucmF0ZXMgPSBTTkRSVl9QQ01fUkFURV9DT05USU5VT1VTLAotCX07Ci0Jc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0czsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yICphbHRzZDsKLQlzdHJ1Y3QgYXVkaW9mb3JtYXQgKmZwOwotCWludCBzdHJlYW0sIGVycjsKLQotCWlmIChpZmFjZS0+bnVtX2FsdHNldHRpbmcgIT0gMikKLQkJcmV0dXJuIC1FTlhJTzsKLQlhbHRzID0gJmlmYWNlLT5hbHRzZXR0aW5nWzFdOwotCWFsdHNkID0gZ2V0X2lmYWNlX2Rlc2MoYWx0cyk7Ci0JaWYgKGFsdHMtPmV4dHJhbGVuICE9IDExIHx8IGFsdHMtPmV4dHJhWzFdICE9IFVTQl9EVF9DU19JTlRFUkZBQ0UgfHwKLQkgICAgYWx0c2QtPmJOdW1FbmRwb2ludHMgIT0gMSkKLQkJcmV0dXJuIC1FTlhJTzsKLQotCWZwID0ga21lbWR1cCgmdWExMDAwX2Zvcm1hdCwgc2l6ZW9mKCpmcCksIEdGUF9LRVJORUwpOwotCWlmICghZnApCi0JCXJldHVybiAtRU5PTUVNOwotCi0JZnAtPmNoYW5uZWxzID0gYWx0cy0+ZXh0cmFbNF07Ci0JZnAtPmlmYWNlID0gYWx0c2QtPmJJbnRlcmZhY2VOdW1iZXI7Ci0JZnAtPmVuZHBvaW50ID0gZ2V0X2VuZHBvaW50KGFsdHMsIDApLT5iRW5kcG9pbnRBZGRyZXNzOwotCWZwLT5lcF9hdHRyID0gZ2V0X2VuZHBvaW50KGFsdHMsIDApLT5ibUF0dHJpYnV0ZXM7Ci0JZnAtPmRhdGFpbnRlcnZhbCA9IHBhcnNlX2RhdGFpbnRlcnZhbChjaGlwLCBhbHRzKTsKLQlmcC0+bWF4cGFja3NpemUgPSBsZTE2X3RvX2NwdShnZXRfZW5kcG9pbnQoYWx0cywgMCktPndNYXhQYWNrZXRTaXplKTsKLQlmcC0+cmF0ZV9tYXggPSBmcC0+cmF0ZV9taW4gPSBjb21iaW5lX3RyaXBsZSgmYWx0cy0+ZXh0cmFbOF0pOwotCi0Jc3RyZWFtID0gKGZwLT5lbmRwb2ludCAmIFVTQl9ESVJfSU4pCi0JCT8gU05EUlZfUENNX1NUUkVBTV9DQVBUVVJFIDogU05EUlZfUENNX1NUUkVBTV9QTEFZQkFDSzsKLQllcnIgPSBhZGRfYXVkaW9fZW5kcG9pbnQoY2hpcCwgc3RyZWFtLCBmcCk7Ci0JaWYgKGVyciA8IDApIHsKLQkJa2ZyZWUoZnApOwotCQlyZXR1cm4gZXJyOwotCX0KLQkvKiBGSVhNRTogcGxheWJhY2sgbXVzdCBiZSBzeW5jaHJvbml6ZWQgdG8gY2FwdHVyZSAqLwotCXVzYl9zZXRfaW50ZXJmYWNlKGNoaXAtPmRldiwgZnAtPmlmYWNlLCAwKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBzbmRfdXNiX2NyZWF0ZV9xdWlyayhzdHJ1Y3Qgc25kX3VzYl9hdWRpbyAqY2hpcCwKIAkJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsCiAJCQkJY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmsgKnF1aXJrKTsKQEAgLTM2ODYsNyArMzYzNiw2IEBACiAJCVtRVUlSS19NSURJX0NNRV0gPSBjcmVhdGVfYW55X21pZGlfcXVpcmssCiAJCVtRVUlSS19BVURJT19TVEFOREFSRF9JTlRFUkZBQ0VdID0gY3JlYXRlX3N0YW5kYXJkX2F1ZGlvX3F1aXJrLAogCQlbUVVJUktfQVVESU9fRklYRURfRU5EUE9JTlRdID0gY3JlYXRlX2ZpeGVkX3N0cmVhbV9xdWlyaywKLQkJW1FVSVJLX0FVRElPX0VESVJPTF9VQTEwMDBdID0gY3JlYXRlX3VhMTAwMF9xdWlyaywKIAkJW1FVSVJLX0FVRElPX0VESVJPTF9VQVhYXSA9IGNyZWF0ZV91YXh4X3F1aXJrLAogCQlbUVVJUktfQVVESU9fQUxJR05fVFJBTlNGRVJdID0gY3JlYXRlX2FsaWduX3RyYW5zZmVyX3F1aXJrCiAJfTsKZGlmZiAtLWdpdCBhL3NvdW5kL3VzYi91c2JhdWRpby5oIGIvc291bmQvdXNiL3VzYmF1ZGlvLmgKaW5kZXggNmIwMTZkNC4uNDJjMjk5YyAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYmF1ZGlvLmgKKysrIGIvc291bmQvdXNiL3VzYmF1ZGlvLmgKQEAgLTc1LDcgKzc1LDYgQEAKIAlRVUlSS19NSURJX1VTMTIyTCwKIAlRVUlSS19BVURJT19TVEFOREFSRF9JTlRFUkZBQ0UsCiAJUVVJUktfQVVESU9fRklYRURfRU5EUE9JTlQsCi0JUVVJUktfQVVESU9fRURJUk9MX1VBMTAwMCwKIAlRVUlSS19BVURJT19FRElST0xfVUFYWCwKIAlRVUlSS19BVURJT19BTElHTl9UUkFOU0ZFUiwKIApAQCAtMTEyLDcgKzExMSw3IEBACiAKIC8qIGZvciBRVUlSS19BVURJTy9NSURJX1NUQU5EQVJEX0lOVEVSRkFDRSwgZGF0YSBpcyBOVUxMICovCiAKLS8qIGZvciBRVUlSS19BVURJT19FRElST0xfVUE3MDBfVUEyNS9VQTEwMDAsIGRhdGEgaXMgTlVMTCAqLworLyogZm9yIFFVSVJLX0FVRElPX0VESVJPTF9VQVhYLCBkYXRhIGlzIE5VTEwgKi8KIAogLyogZm9yIFFVSVJLX0lHTk9SRV9JTlRFUkZBQ0UsIGRhdGEgaXMgTlVMTCAqLwogCmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNicXVpcmtzLmggYi9zb3VuZC91c2IvdXNicXVpcmtzLmgKaW5kZXggZjA2ZmFmNy4uMmI0MjZjMSAxMDA2NDQKLS0tIGEvc291bmQvdXNiL3VzYnF1aXJrcy5oCisrKyBiL3NvdW5kL3VzYi91c2JxdWlya3MuaApAQCAtMTAxNiwzNiArMTAxNiw2IEBACiAJfQogfSwKIHsKLQlVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDQ0KSwKLQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJiAoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKLQkJLnZlbmRvcl9uYW1lID0gIlJvbGFuZCIsCi0JCS5wcm9kdWN0X25hbWUgPSAiVUEtMTAwMCIsCi0JCS5pZm51bSA9IFFVSVJLX0FOWV9JTlRFUkZBQ0UsCi0JCS50eXBlID0gUVVJUktfQ09NUE9TSVRFLAotCQkuZGF0YSA9IChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9hdWRpb19xdWlya1tdKSB7Ci0JCQl7Ci0JCQkJLmlmbnVtID0gMSwKLQkJCQkudHlwZSA9IFFVSVJLX0FVRElPX0VESVJPTF9VQTEwMDAKLQkJCX0sCi0JCQl7Ci0JCQkJLmlmbnVtID0gMiwKLQkJCQkudHlwZSA9IFFVSVJLX0FVRElPX0VESVJPTF9VQTEwMDAKLQkJCX0sCi0JCQl7Ci0JCQkJLmlmbnVtID0gMywKLQkJCQkudHlwZSA9IFFVSVJLX01JRElfRklYRURfRU5EUE9JTlQsCi0JCQkJLmRhdGEgPSAmIChjb25zdCBzdHJ1Y3Qgc25kX3VzYl9taWRpX2VuZHBvaW50X2luZm8pIHsKLQkJCQkJLm91dF9jYWJsZXMgPSAweDAwMDMsCi0JCQkJCS5pbl9jYWJsZXMgID0gMHgwMDAzCi0JCQkJfQotCQkJfSwKLQkJCXsKLQkJCQkuaWZudW0gPSAtMQotCQkJfQotCQl9Ci0JfQotfSwKLXsKIAkvKiBoYXMgSUQgMHgwMDQ5IHdoZW4gbm90IGluICJBZHZhbmNlZCBEcml2ZXIiIG1vZGUgKi8KIAlVU0JfREVWSUNFKDB4MDU4MiwgMHgwMDQ3KSwKIAkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJiAoY29uc3Qgc3RydWN0IHNuZF91c2JfYXVkaW9fcXVpcmspIHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXByb2JlLnR4dCBiL3Rvb2xzL3BlcmYvRG9jdW1lbnRhdGlvbi9wZXJmLXByb2JlLnR4dAppbmRleCAyZGUzNDA3Li4zNDIwMmIxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL0RvY3VtZW50YXRpb24vcGVyZi1wcm9iZS50eHQKKysrIGIvdG9vbHMvcGVyZi9Eb2N1bWVudGF0aW9uL3BlcmYtcHJvYmUudHh0CkBAIC00MSw3ICs0MSw4IEBACiAKIC1kOjoKIC0tZGVsPTo6Ci0JRGVsZXRlIGEgcHJvYmUgZXZlbnQuCisJRGVsZXRlIHByb2JlIGV2ZW50cy4gVGhpcyBhY2NlcHRzIGdsb2Igd2lsZGNhcmRzKCcqJywgJz8nKSBhbmQgY2hhcmFjdGVyCisJY2xhc3NlcyhlLmcuIFthLXpdLCBbIUEtWl0pLgogCiAtbDo6CiAtLWxpc3Q6OgpAQCAtNTAsMTcgKzUxLDI5IEBACiAtTDo6CiAtLWxpbmU9OjoKIAlTaG93IHNvdXJjZSBjb2RlIGxpbmVzIHdoaWNoIGNhbiBiZSBwcm9iZWQuIFRoaXMgbmVlZHMgYW4gYXJndW1lbnQKLQl3aGljaCBzcGVjaWZpZXMgYSByYW5nZSBvZiB0aGUgc291cmNlIGNvZGUuCisJd2hpY2ggc3BlY2lmaWVzIGEgcmFuZ2Ugb2YgdGhlIHNvdXJjZSBjb2RlLiAoc2VlIExJTkUgU1lOVEFYIGZvciBkZXRhaWwpCisKKy1mOjoKKy0tZm9yY2U6OgorCUZvcmNpYmx5IGFkZCBldmVudHMgd2l0aCBleGlzdGluZyBuYW1lLgogCiBQUk9CRSBTWU5UQVgKIC0tLS0tLS0tLS0tLQogUHJvYmUgcG9pbnRzIGFyZSBkZWZpbmVkIGJ5IGZvbGxvd2luZyBzeW50YXguCiAKLSAiW0VWRU5UPV1GVU5DWytPRkZTfDpSTE58JXJldHVybl1bQFNSQ118U1JDOkFMTiBbQVJHIC4uLl0iCisgICAgMSkgRGVmaW5lIGV2ZW50IGJhc2VkIG9uIGZ1bmN0aW9uIG5hbWUKKyAgICAgW0VWRU5UPV1GVU5DW0BTUkNdWzpSTE58K09GRlN8JXJldHVybnw7UFROXSBbQVJHIC4uLl0KKworICAgIDIpIERlZmluZSBldmVudCBiYXNlZCBvbiBzb3VyY2UgZmlsZSB3aXRoIGxpbmUgbnVtYmVyCisgICAgIFtFVkVOVD1dU1JDOkFMTiBbQVJHIC4uLl0KKworICAgIDMpIERlZmluZSBldmVudCBiYXNlZCBvbiBzb3VyY2UgZmlsZSB3aXRoIGxhenkgcGF0dGVybgorICAgICBbRVZFTlQ9XVNSQztQVE4gW0FSRyAuLi5dCisKIAogJ0VWRU5UJyBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgbmV3IGV2ZW50LCBpZiBvbWl0dGVkLCBpdCB3aWxsIGJlIHNldCB0aGUgbmFtZSBvZiB0aGUgcHJvYmVkIGZ1bmN0aW9uLiBDdXJyZW50bHksIGV2ZW50IGdyb3VwIG5hbWUgaXMgc2V0IGFzICdwcm9iZScuCi0nRlVOQycgc3BlY2lmaWVzIGEgcHJvYmVkIGZ1bmN0aW9uIG5hbWUsIGFuZCBpdCBtYXkgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyBvcHRpb25zOyAnK09GRlMnIGlzIHRoZSBvZmZzZXQgZnJvbSBmdW5jdGlvbiBlbnRyeSBhZGRyZXNzIGluIGJ5dGVzLCAnUkxOJyBpcyB0aGUgcmVsYXRpdmUtbGluZSBudW1iZXIgZnJvbSBmdW5jdGlvbiBlbnRyeSBsaW5lLCBhbmQgJyVyZXR1cm4nIG1lYW5zIHRoYXQgaXQgcHJvYmVzIGZ1bmN0aW9uIHJldHVybi4gSW4gYWRkaXRpb24sICdTUkMnIHNwZWNpZmllcyBhIHNvdXJjZSBmaWxlIHdoaWNoIGhhcyB0aGF0IGZ1bmN0aW9uLgotSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBzcGVjaWZ5IGEgcHJvYmUgcG9pbnQgYnkgdGhlIHNvdXJjZSBsaW5lIG51bWJlciBieSB1c2luZyAnU1JDOkFMTicgc3ludGF4LCB3aGVyZSAnU1JDJyBpcyB0aGUgc291cmNlIGZpbGUgcGF0aCBhbmQgJ0FMTicgaXMgdGhlIGxpbmUgbnVtYmVyLgorJ0ZVTkMnIHNwZWNpZmllcyBhIHByb2JlZCBmdW5jdGlvbiBuYW1lLCBhbmQgaXQgbWF5IGhhdmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgb3B0aW9uczsgJytPRkZTJyBpcyB0aGUgb2Zmc2V0IGZyb20gZnVuY3Rpb24gZW50cnkgYWRkcmVzcyBpbiBieXRlcywgJzpSTE4nIGlzIHRoZSByZWxhdGl2ZS1saW5lIG51bWJlciBmcm9tIGZ1bmN0aW9uIGVudHJ5IGxpbmUsIGFuZCAnJXJldHVybicgbWVhbnMgdGhhdCBpdCBwcm9iZXMgZnVuY3Rpb24gcmV0dXJuLiBBbmQgJztQVE4nIG1lYW5zIGxhenkgbWF0Y2hpbmcgcGF0dGVybiAoc2VlIExBWlkgTUFUQ0hJTkcpLiBOb3RlIHRoYXQgJztQVE4nIG11c3QgYmUgdGhlIGVuZCBvZiB0aGUgcHJvYmUgcG9pbnQgZGVmaW5pdGlvbi4gIEluIGFkZGl0aW9uLCAnQFNSQycgc3BlY2lmaWVzIGEgc291cmNlIGZpbGUgd2hpY2ggaGFzIHRoYXQgZnVuY3Rpb24uCitJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHNwZWNpZnkgYSBwcm9iZSBwb2ludCBieSB0aGUgc291cmNlIGxpbmUgbnVtYmVyIG9yIGxhenkgbWF0Y2hpbmcgYnkgdXNpbmcgJ1NSQzpBTE4nIG9yICdTUkM7UFROJyBzeW50YXgsIHdoZXJlICdTUkMnIGlzIHRoZSBzb3VyY2UgZmlsZSBwYXRoLCAnOkFMTicgaXMgdGhlIGxpbmUgbnVtYmVyIGFuZCAnO1BUTicgaXMgdGhlIGxhenkgbWF0Y2hpbmcgcGF0dGVybi4KICdBUkcnIHNwZWNpZmllcyB0aGUgYXJndW1lbnRzIG9mIHRoaXMgcHJvYmUgcG9pbnQuIFlvdSBjYW4gdXNlIHRoZSBuYW1lIG9mIGxvY2FsIHZhcmlhYmxlLCBvciBrcHJvYmUtdHJhY2VyIGFyZ3VtZW50IGZvcm1hdCAoZS5nLiAkcmV0dmFsLCAlYXgsIGV0YykuCiAKIExJTkUgU1lOVEFYCkBAIC03Niw2ICs4OSw0MSBAQAogbWFueSBsaW5lcyB0byBzaG93IGJ5IHVzaW5nICdOVU0nLgogU28sICJzb3VyY2UuYzoxMDAtMTIwIiBzaG93cyBsaW5lcyBiZXR3ZWVuIDEwMHRoIHRvIGwyMHRoIGluIHNvdXJjZS5jIGZpbGUuIEFuZCAiZnVuYzoxMCsyMCIgc2hvd3MgMjAgbGluZXMgZnJvbSAxMHRoIGxpbmUgb2YgZnVuYyBmdW5jdGlvbi4KIAorTEFaWSBNQVRDSElORworLS0tLS0tLS0tLS0tLQorIFRoZSBsYXp5IGxpbmUgbWF0Y2hpbmcgaXMgc2ltaWxhciB0byBnbG9iIG1hdGNoaW5nIGJ1dCBpZ25vcmluZyBzcGFjZXMgaW4gYm90aCBvZiBwYXR0ZXJuIGFuZCB0YXJnZXQuIFNvIHRoaXMgYWNjZXB0cyB3aWxkY2FyZHMoJyonLCAnPycpIGFuZCBjaGFyYWN0ZXIgY2xhc3NlcyhlLmcuIFthLXpdLCBbIUEtWl0pLgorCitlLmcuCisgJ2E9KicgY2FuIG1hdGNoZXMgJ2E9YicsICdhID0gYicsICdhID09IGInIGFuZCBzbyBvbi4KKworVGhpcyBwcm92aWRlcyBzb21lIHNvcnQgb2YgZmxleGliaWxpdHkgYW5kIHJvYnVzdG5lc3MgdG8gcHJvYmUgcG9pbnQgZGVmaW5pdGlvbnMgYWdhaW5zdCBtaW5vciBjb2RlIGNoYW5nZXMuIEZvciBleGFtcGxlLCBhY3R1YWwgMTB0aCBsaW5lIG9mIHNjaGVkdWxlKCkgY2FuIGJlIG1vdmVkIGVhc2lseSBieSBtb2RpZnlpbmcgc2NoZWR1bGUoKSwgYnV0IHRoZSBzYW1lIGxpbmUgbWF0Y2hpbmcgJ3JxPWNwdV9ycSonIG1heSBzdGlsbCBleGlzdCBpbiB0aGUgZnVuY3Rpb24uKQorCisKK0VYQU1QTEVTCistLS0tLS0tLQorRGlzcGxheSB3aGljaCBsaW5lcyBpbiBzY2hlZHVsZSgpIGNhbiBiZSBwcm9iZWQ6CisKKyAuL3BlcmYgcHJvYmUgLS1saW5lIHNjaGVkdWxlCisKK0FkZCBhIHByb2JlIG9uIHNjaGVkdWxlKCkgZnVuY3Rpb24gMTJ0aCBsaW5lIHdpdGggcmVjb3JkaW5nIGNwdSBsb2NhbCB2YXJpYWJsZToKKworIC4vcGVyZiBwcm9iZSBzY2hlZHVsZToxMiBjcHUKKyBvcgorIC4vcGVyZiBwcm9iZSAtLWFkZD0nc2NoZWR1bGU6MTIgY3B1JworCisgdGhpcyB3aWxsIGFkZCBvbmUgb3IgbW9yZSBwcm9iZXMgd2hpY2ggaGFzIHRoZSBuYW1lIHN0YXJ0IHdpdGggInNjaGVkdWxlIi4KKworIEFkZCBwcm9iZXMgb24gbGluZXMgaW4gc2NoZWR1bGUoKSBmdW5jdGlvbiB3aGljaCBjYWxscyB1cGRhdGVfcnFfY2xvY2soKS4KKworIC4vcGVyZiBwcm9iZSAnc2NoZWR1bGU7dXBkYXRlX3JxX2Nsb2NrKicKKyBvcgorIC4vcGVyZiBwcm9iZSAtLWFkZD0nc2NoZWR1bGU7dXBkYXRlX3JxX2Nsb2NrKicKKworRGVsZXRlIGFsbCBwcm9iZXMgb24gc2NoZWR1bGUoKS4KKworIC4vcGVyZiBwcm9iZSAtLWRlbD0nc2NoZWR1bGUqJworCisKIFNFRSBBTFNPCiAtLS0tLS0tLQogbGlua3BlcmY6cGVyZi10cmFjZVsxXSwgbGlua3BlcmY6cGVyZi1yZWNvcmRbMV0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUgYi90b29scy9wZXJmL01ha2VmaWxlCmluZGV4IDU0YTViNTAuLjJkNTM3MzggMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvTWFrZWZpbGUKKysrIGIvdG9vbHMvcGVyZi9NYWtlZmlsZQpAQCAtNTAwLDEyICs1MDAsMTIgQEAKIAltc2cgOj0gJChlcnJvciBObyBsaWJlbGYuaC9saWJlbGYgZm91bmQsIHBsZWFzZSBpbnN0YWxsIGxpYmVsZi1kZXYvZWxmdXRpbHMtbGliZWxmLWRldmVsIGFuZCBnbGliYy1kZXZbZWxdKTsKIGVuZGlmCiAKLWlmbmVxICgkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpZm5kZWYgX01JUFNfU1pMT05HJzsgZWNobyAnXCNkZWZpbmUgX01JUFNfU1pMT05HIDAnOyBlY2hvICdcI2VuZGlmJzsgZWNobyAnXCNpbmNsdWRlIDxkd2FyZi5oPic7IGVjaG8gJ1wjaW5jbHVkZSA8bGliZHdhcmYuaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IER3YXJmX0RlYnVnIGRiZzsgRHdhcmZfRXJyb3IgZXJyOyBEd2FyZl9SYW5nZXMgKnJuZzsgZHdhcmZfaW5pdCgwLCBEV19ETENfUkVBRCwgMCwgMCwgJmRiZywgJmVycik7IGR3YXJmX2dldF9yYW5nZXMoZGJnLCAwLCAmcm5nLCAwLCAwLCAmZXJyKTsgcmV0dXJuIChsb25nKWRiZzsgfScpIHwgJChDQykgLXggYyAtICQoQUxMX0NGTEFHUykgLURfTEFSR0VGSUxFNjRfU09VUkNFIC1EX0ZJTEVfT0ZGU0VUX0JJVFM9NjQgLUkvdXNyL2luY2x1ZGUvbGliZHdhcmYgLWxkd2FyZiAtbGVsZiAtbyAkKEJJVEJVQ0tFVCkgJChBTExfTERGTEFHUykgJChFWFRMSUJTKSAiJChRVUlFVF9TVERFUlIpIiAmJiBlY2hvIHkiKSwgeSkKLQltc2cgOj0gJCh3YXJuaW5nIE5vIGxpYmR3YXJmLmggZm91bmQgb3Igb2xkIGxpYmR3YXJmLmggZm91bmQsIGRpc2FibGVzIGR3YXJmIHN1cHBvcnQuIFBsZWFzZSBpbnN0YWxsIGxpYmR3YXJmLWRldi9saWJkd2FyZi1kZXZlbCA+PSAyMDA4MTIzMSk7Ci0JQkFTSUNfQ0ZMQUdTICs9IC1ETk9fTElCRFdBUkYKK2lmbmVxICgkKHNoZWxsIHNoIC1jICIoZWNobyAnXCNpbmNsdWRlIDxkd2FyZi5oPic7IGVjaG8gJ1wjaW5jbHVkZSA8bGliZHcuaD4nOyBlY2hvICdpbnQgbWFpbih2b2lkKSB7IER3YXJmICpkYmc7IGRiZyA9IGR3YXJmX2JlZ2luKDAsIERXQVJGX0NfUkVBRCk7IHJldHVybiAobG9uZylkYmc7IH0nKSB8ICQoQ0MpIC14IGMgLSAkKEFMTF9DRkxBR1MpIC1EX0xBUkdFRklMRTY0X1NPVVJDRSAtRF9GSUxFX09GRlNFVF9CSVRTPTY0IC1JL3Vzci9pbmNsdWRlL2VsZnV0aWxzIC1sZHcgLWxlbGYgLW8gJChCSVRCVUNLRVQpICQoQUxMX0xERkxBR1MpICQoRVhUTElCUykgIiQoUVVJRVRfU1RERVJSKSIgJiYgZWNobyB5IiksIHkpCisJbXNnIDo9ICQod2FybmluZyBObyBsaWJkdy5oIGZvdW5kIG9yIG9sZCBsaWJkdy5oIGZvdW5kLCBkaXNhYmxlcyBkd2FyZiBzdXBwb3J0LiBQbGVhc2UgaW5zdGFsbCBlbGZ1dGlscy1kZXZlbC9lbGZ1dGlscy1kZXYpOworCUJBU0lDX0NGTEFHUyArPSAtRE5PX0RXQVJGX1NVUFBPUlQKIGVsc2UKLQlCQVNJQ19DRkxBR1MgKz0gLUkvdXNyL2luY2x1ZGUvbGliZHdhcmYKLQlFWFRMSUJTICs9IC1sZWxmIC1sZHdhcmYKKwlCQVNJQ19DRkxBR1MgKz0gLUkvdXNyL2luY2x1ZGUvZWxmdXRpbHMKKwlFWFRMSUJTICs9IC1sZWxmIC1sZHcKIAlMSUJfT0JKUyArPSB1dGlsL3Byb2JlLWZpbmRlci5vCiBlbmRpZgogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL2J1aWx0aW4tcHJvYmUuYyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCmluZGV4IGFkNDdiZDQuLmMzMGEzMzUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCisrKyBiL3Rvb2xzL3BlcmYvYnVpbHRpbi1wcm9iZS5jCkBAIC0xMjgsNyArMTI4LDcgQEAKIAkJICAgIHBwLT5mdW5jdGlvbik7CiB9CiAKLSNpZm5kZWYgTk9fTElCRFdBUkYKKyNpZm5kZWYgTk9fRFdBUkZfU1VQUE9SVAogc3RhdGljIGludCBvcGVuX3ZtbGludXgodm9pZCkKIHsKIAlpZiAobWFwX19sb2FkKHNlc3Npb24ua21hcHNbTUFQX19GVU5DVElPTl0sIE5VTEwpIDwgMCkgewpAQCAtMTU2LDE0ICsxNTYsMTYgQEAKIAkicGVyZiBwcm9iZSBbPG9wdGlvbnM+XSAtLWFkZCAnUFJPQkVERUYnIFstLWFkZCAnUFJPQkVERUYnIC4uLl0iLAogCSJwZXJmIHByb2JlIFs8b3B0aW9ucz5dIC0tZGVsICdbR1JPVVA6XUVWRU5UJyAuLi4iLAogCSJwZXJmIHByb2JlIC0tbGlzdCIsCisjaWZuZGVmIE5PX0RXQVJGX1NVUFBPUlQKIAkicGVyZiBwcm9iZSAtLWxpbmUgJ0xJTkVERVNDJyIsCisjZW5kaWYKIAlOVUxMCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9wdGlvbiBvcHRpb25zW10gPSB7CiAJT1BUX0JPT0xFQU4oJ3YnLCAidmVyYm9zZSIsICZ2ZXJib3NlLAogCQkgICAgImJlIG1vcmUgdmVyYm9zZSAoc2hvdyBwYXJzZWQgYXJndW1lbnRzLCBldGMpIiksCi0jaWZuZGVmIE5PX0xJQkRXQVJGCisjaWZuZGVmIE5PX0RXQVJGX1NVUFBPUlQKIAlPUFRfU1RSSU5HKCdrJywgInZtbGludXgiLCAmc3ltYm9sX2NvbmYudm1saW51eF9uYW1lLAogCQkgICAiZmlsZSIsICJ2bWxpbnV4IHBhdGhuYW1lIiksCiAjZW5kaWYKQEAgLTE3MiwzMCArMTc0LDMyIEBACiAJT1BUX0NBTExCQUNLKCdkJywgImRlbCIsIE5VTEwsICJbR1JPVVA6XUVWRU5UIiwgImRlbGV0ZSBhIHByb2JlIGV2ZW50LiIsCiAJCW9wdF9kZWxfcHJvYmVfZXZlbnQpLAogCU9QVF9DQUxMQkFDSygnYScsICJhZGQiLCBOVUxMLAotI2lmZGVmIE5PX0xJQkRXQVJGCi0JCSJbRVZFTlQ9XUZVTkNbK09GRlN8JXJldHVybl0gW0FSRyAuLi5dIiwKKyNpZmRlZiBOT19EV0FSRl9TVVBQT1JUCisJCSJbRVZFTlQ9XUZVTkNbK09GRnwlcmV0dXJuXSBbQVJHIC4uLl0iLAogI2Vsc2UKLQkJIltFVkVOVD1dRlVOQ1srT0ZGU3wlcmV0dXJufDpSTE5dW0BTUkNdfFNSQzpBTE4gW0FSRyAuLi5dIiwKKwkJIltFVkVOVD1dRlVOQ1tAU1JDXVsrT0ZGfCVyZXR1cm58OlJMfDtQVF18U1JDOkFMfFNSQztQVCIKKwkJIiBbQVJHIC4uLl0iLAogI2VuZGlmCiAJCSJwcm9iZSBwb2ludCBkZWZpbml0aW9uLCB3aGVyZVxuIgogCQkiXHRcdEdST1VQOlx0R3JvdXAgbmFtZSAob3B0aW9uYWwpXG4iCiAJCSJcdFx0RVZFTlQ6XHRFdmVudCBuYW1lXG4iCiAJCSJcdFx0RlVOQzpcdEZ1bmN0aW9uIG5hbWVcbiIKLQkJIlx0XHRPRkZTOlx0T2Zmc2V0IGZyb20gZnVuY3Rpb24gZW50cnkgKGluIGJ5dGUpXG4iCisJCSJcdFx0T0ZGOlx0T2Zmc2V0IGZyb20gZnVuY3Rpb24gZW50cnkgKGluIGJ5dGUpXG4iCiAJCSJcdFx0JXJldHVybjpcdFB1dCB0aGUgcHJvYmUgYXQgZnVuY3Rpb24gcmV0dXJuXG4iCi0jaWZkZWYgTk9fTElCRFdBUkYKKyNpZmRlZiBOT19EV0FSRl9TVVBQT1JUCiAJCSJcdFx0QVJHOlx0UHJvYmUgYXJndW1lbnQgKG9ubHkgXG4iCiAjZWxzZQogCQkiXHRcdFNSQzpcdFNvdXJjZSBjb2RlIHBhdGhcbiIKLQkJIlx0XHRSTE46XHRSZWxhdGl2ZSBsaW5lIG51bWJlciBmcm9tIGZ1bmN0aW9uIGVudHJ5LlxuIgotCQkiXHRcdEFMTjpcdEFic29sdXRlIGxpbmUgbnVtYmVyIGluIGZpbGUuXG4iCisJCSJcdFx0Ukw6XHRSZWxhdGl2ZSBsaW5lIG51bWJlciBmcm9tIGZ1bmN0aW9uIGVudHJ5LlxuIgorCQkiXHRcdEFMOlx0QWJzb2x1dGUgbGluZSBudW1iZXIgaW4gZmlsZS5cbiIKKwkJIlx0XHRQVDpcdExhenkgZXhwcmVzc2lvbiBvZiBsaW5lIGNvZGUuXG4iCiAJCSJcdFx0QVJHOlx0UHJvYmUgYXJndW1lbnQgKGxvY2FsIHZhcmlhYmxlIG5hbWUgb3JcbiIKICNlbmRpZgogCQkiXHRcdFx0a3Byb2JlLXRyYWNlciBhcmd1bWVudCBmb3JtYXQuKVxuIiwKIAkJb3B0X2FkZF9wcm9iZV9ldmVudCksCiAJT1BUX0JPT0xFQU4oJ2YnLCAiZm9yY2UiLCAmc2Vzc2lvbi5mb3JjZV9hZGQsICJmb3JjaWJseSBhZGQgZXZlbnRzIgogCQkgICAgIiB3aXRoIGV4aXN0aW5nIG5hbWUiKSwKLSNpZm5kZWYgTk9fTElCRFdBUkYKKyNpZm5kZWYgTk9fRFdBUkZfU1VQUE9SVAogCU9QVF9DQUxMQkFDSygnTCcsICJsaW5lIiwgTlVMTCwKIAkJICAgICAiRlVOQ1s6UkxOWytOVU18OlJMTjJdXXxTUkM6QUxOWytOVU18OkFMTjJdIiwKIAkJICAgICAiU2hvdyBzb3VyY2UgY29kZSBsaW5lcy4iLCBvcHRfc2hvd19saW5lcyksCkBAIC0yMjMsNyArMjI3LDcgQEAKIGludCBjbWRfcHJvYmUoaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpwcmVmaXggX191c2VkKQogewogCWludCBpLCByZXQ7Ci0jaWZuZGVmIE5PX0xJQkRXQVJGCisjaWZuZGVmIE5PX0RXQVJGX1NVUFBPUlQKIAlpbnQgZmQ7CiAjZW5kaWYKIAlzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwOwpAQCAtMjU5LDcgKzI2Myw3IEBACiAJCXJldHVybiAwOwogCX0KIAotI2lmbmRlZiBOT19MSUJEV0FSRgorI2lmbmRlZiBOT19EV0FSRl9TVVBQT1JUCiAJaWYgKHNlc3Npb24uc2hvd19saW5lcykgewogCQlpZiAoc2Vzc2lvbi5ucl9wcm9iZSAhPSAwIHx8IHNlc3Npb24uZGVsbGlzdCkgewogCQkJcHJfd2FybmluZygiICBFcnJvcjogRG9uJ3QgdXNlIC0tbGluZSB3aXRoIgpAQCAtMjkwLDkgKzI5NCw5IEBACiAJaW5pdF92bWxpbnV4KCk7CiAKIAlpZiAoc2Vzc2lvbi5uZWVkX2R3YXJmKQotI2lmZGVmIE5PX0xJQkRXQVJGCisjaWZkZWYgTk9fRFdBUkZfU1VQUE9SVAogCQlkaWUoIkRlYnVnaW5mby1hbmFseXNpcyBpcyBub3Qgc3VwcG9ydGVkIik7Ci0jZWxzZQkvKiAhTk9fTElCRFdBUkYgKi8KKyNlbHNlCS8qICFOT19EV0FSRl9TVVBQT1JUICovCiAJCXByX2RlYnVnKCJTb21lIHByb2JlcyByZXF1aXJlIGRlYnVnaW5mby5cbiIpOwogCiAJZmQgPSBvcGVuX3ZtbGludXgoKTsKQEAgLTMxMiw3ICszMTYsNyBAQAogCQkJY29udGludWU7CiAKIAkJbHNlZWsoZmQsIFNFRUtfU0VULCAwKTsKLQkJcmV0ID0gZmluZF9wcm9iZXBvaW50KGZkLCBwcCk7CisJCXJldCA9IGZpbmRfcHJvYmVfcG9pbnQoZmQsIHBwKTsKIAkJaWYgKHJldCA+IDApCiAJCQljb250aW51ZTsKIAkJaWYgKHJldCA9PSAwKSB7CS8qIE5vIGVycm9yIGJ1dCBmYWlsZWQgdG8gZmluZCBwcm9iZSBwb2ludC4gKi8KQEAgLTMzMyw3ICszMzcsNyBAQAogCWNsb3NlKGZkKTsKIAogZW5kX2R3YXJmOgotI2VuZGlmIC8qICFOT19MSUJEV0FSRiAqLworI2VuZGlmIC8qICFOT19EV0FSRl9TVVBQT1JUICovCiAKIAkvKiBTeW50aGVzaXplIHByb2JlcyB3aXRob3V0IGR3YXJmICovCiAJZm9yIChpID0gMDsgaSA8IHNlc3Npb24ubnJfcHJvYmU7IGkrKykgewpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi9wZXJmLmMgYi90b29scy9wZXJmL3BlcmYuYwppbmRleCA1N2NiMTA3Li5jZDMyYzIwIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3BlcmYuYworKysgYi90b29scy9wZXJmL3BlcmYuYwpAQCAtNDQ1LDcgKzQ0NSw3IEBACiAKIAkvKgogCSAqIFdlIHVzZSBQQVRIIHRvIGZpbmQgcGVyZiBjb21tYW5kcywgYnV0IHdlIHByZXBlbmQgc29tZSBoaWdoZXIKLQkgKiBwcmVjaWRlbmNlIHBhdGhzOiB0aGUgIi0tZXhlYy1wYXRoIiBvcHRpb24sIHRoZSBQRVJGX0VYRUNfUEFUSAorCSAqIHByZWNlZGVuY2UgcGF0aHM6IHRoZSAiLS1leGVjLXBhdGgiIG9wdGlvbiwgdGhlIFBFUkZfRVhFQ19QQVRICiAJICogZW52aXJvbm1lbnQsIGFuZCB0aGUgJChwZXJmZXhlY2RpcikgZnJvbSB0aGUgTWFrZWZpbGUgYXQgYnVpbGQKIAkgKiB0aW1lLgogCSAqLwpkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL2hpc3QuYyBiL3Rvb2xzL3BlcmYvdXRpbC9oaXN0LmMKaW5kZXggZThkYWY1Yy4uNDQ0MDhjMiAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2hpc3QuYworKysgYi90b29scy9wZXJmL3V0aWwvaGlzdC5jCkBAIC0zMjEsNyArMzIxLDcgQEAKIAkJCW5ld19kZXB0aF9tYXNrICY9IH4oMSA8PCAoZGVwdGggLSAxKSk7CiAKIAkJLyoKLQkJICogQnV0IHdlIGtlZXAgdGhlIG9sZGVyIGRlcHRoIG1hc2sgZm9yIHRoZSBsaW5lIHNlcGVyYXRvcgorCQkgKiBCdXQgd2Uga2VlcCB0aGUgb2xkZXIgZGVwdGggbWFzayBmb3IgdGhlIGxpbmUgc2VwYXJhdG9yCiAJCSAqIHRvIGtlZXAgdGhlIGxldmVsIGxpbmsgdW50aWwgd2UgcmVhY2ggdGhlIGxhc3QgY2hpbGQKIAkJICovCiAJCXJldCArPSBpcGNoYWluX19mcHJpbnRmX2dyYXBoX2xpbmUoZnAsIGRlcHRoLCBkZXB0aF9tYXNrLApkaWZmIC0tZ2l0IGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWV2ZW50LmMgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYwppbmRleCA4ZjA1Njg4Li5jOTcxZTgxIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYworKysgYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZXZlbnQuYwpAQCAtMTE5LDE0ICsxMTksMTQgQEAKIAljaGFyIGMsIG5jID0gMDsKIAkvKgogCSAqIDxTeW50YXg+Ci0JICogcGVyZiBwcm9iZSBbRVZFTlQ9XVNSQzpMTgotCSAqIHBlcmYgcHJvYmUgW0VWRU5UPV1GVU5DWytPRkZTfCVyZXR1cm5dW0BTUkNdCisJICogcGVyZiBwcm9iZSBbRVZFTlQ9XVNSQ1s6TE58O1BUTl0KKwkgKiBwZXJmIHByb2JlIFtFVkVOVD1dRlVOQ1tAU1JDXVsrT0ZGU3wlcmV0dXJufDpMTnw7UEFUXQogCSAqCiAJICogVE9ETzpHcm91cCBuYW1lIHN1cHBvcnQKIAkgKi8KIAotCXB0ciA9IHN0cmNocihhcmcsICc9Jyk7Ci0JaWYgKHB0cikgewkvKiBFdmVudCBuYW1lICovCisJcHRyID0gc3RycGJyayhhcmcsICI7PUArJSIpOworCWlmIChwdHIgJiYgKnB0ciA9PSAnPScpIHsJLyogRXZlbnQgbmFtZSAqLwogCQkqcHRyID0gJ1wwJzsKIAkJdG1wID0gcHRyICsgMTsKIAkJcHRyID0gc3RyY2hyKGFyZywgJzonKTsKQEAgLTEzOSw3ICsxMzksNyBAQAogCQlhcmcgPSB0bXA7CiAJfQogCi0JcHRyID0gc3RycGJyayhhcmcsICI6K0AlIik7CisJcHRyID0gc3RycGJyayhhcmcsICI7OitAJSIpOwogCWlmIChwdHIpIHsKIAkJbmMgPSAqcHRyOwogCQkqcHRyKysgPSAnXDAnOwpAQCAtMTU2LDcgKzE1NiwxMSBAQAogCXdoaWxlIChwdHIpIHsKIAkJYXJnID0gcHRyOwogCQljID0gbmM7Ci0JCXB0ciA9IHN0cnBicmsoYXJnLCAiOitAJSIpOworCQlpZiAoYyA9PSAnOycpIHsJLyogTGF6eSBwYXR0ZXJuIG11c3QgYmUgdGhlIGxhc3QgcGFydCAqLworCQkJcHAtPmxhenlfbGluZSA9IHN0cmR1cChhcmcpOworCQkJYnJlYWs7CisJCX0KKwkJcHRyID0gc3RycGJyayhhcmcsICI7OitAJSIpOwogCQlpZiAocHRyKSB7CiAJCQluYyA9ICpwdHI7CiAJCQkqcHRyKysgPSAnXDAnOwpAQCAtMTY1LDEzICsxNjksMTMgQEAKIAkJY2FzZSAnOic6CS8qIExpbmUgbnVtYmVyICovCiAJCQlwcC0+bGluZSA9IHN0cnRvdWwoYXJnLCAmdG1wLCAwKTsKIAkJCWlmICgqdG1wICE9ICdcMCcpCi0JCQkJc2VtYW50aWNfZXJyb3IoIlRoZXJlIGlzIG5vbi1kaWdpdCBjaGFyYWN0b3IiCi0JCQkJCQkiIGluIGxpbmUgbnVtYmVyLiIpOworCQkJCXNlbWFudGljX2Vycm9yKCJUaGVyZSBpcyBub24tZGlnaXQgY2hhciIKKwkJCQkJICAgICAgICIgaW4gbGluZSBudW1iZXIuIik7CiAJCQlicmVhazsKIAkJY2FzZSAnKyc6CS8qIEJ5dGUgb2Zmc2V0IGZyb20gYSBzeW1ib2wgKi8KIAkJCXBwLT5vZmZzZXQgPSBzdHJ0b3VsKGFyZywgJnRtcCwgMCk7CiAJCQlpZiAoKnRtcCAhPSAnXDAnKQotCQkJCXNlbWFudGljX2Vycm9yKCJUaGVyZSBpcyBub24tZGlnaXQgY2hhcmFjdG9yIgorCQkJCXNlbWFudGljX2Vycm9yKCJUaGVyZSBpcyBub24tZGlnaXQgY2hhcmFjdGVyIgogCQkJCQkJIiBpbiBvZmZzZXQuIik7CiAJCQlicmVhazsKIAkJY2FzZSAnQCc6CS8qIEZpbGUgbmFtZSAqLwpAQCAtMTc5LDkgKzE4Myw2IEBACiAJCQkJc2VtYW50aWNfZXJyb3IoIlNSQ0BTUkMgaXMgbm90IGFsbG93ZWQuIik7CiAJCQlwcC0+ZmlsZSA9IHN0cmR1cChhcmcpOwogCQkJRElFX0lGKHBwLT5maWxlID09IE5VTEwpOwotCQkJaWYgKHB0cikKLQkJCQlzZW1hbnRpY19lcnJvcigiQFNSQyBtdXN0IGJlIHRoZSBsYXN0ICIKLQkJCQkJICAgICAgICJvcHRpb24uIik7CiAJCQlicmVhazsKIAkJY2FzZSAnJSc6CS8qIFByb2JlIHBsYWNlcyAqLwogCQkJaWYgKHN0cmNtcChhcmcsICJyZXR1cm4iKSA9PSAwKSB7CkBAIC0xOTYsMTEgKzE5NywxOCBAQAogCX0KIAogCS8qIEV4Y2x1c2lvbiBjaGVjayAqLworCWlmIChwcC0+bGF6eV9saW5lICYmIHBwLT5saW5lKQorCQlzZW1hbnRpY19lcnJvcigiTGF6eSBwYXR0ZXJuIGNhbid0IGJlIHVzZWQgd2l0aCBsaW5lIG51bWJlci4iKTsKKworCWlmIChwcC0+bGF6eV9saW5lICYmIHBwLT5vZmZzZXQpCisJCXNlbWFudGljX2Vycm9yKCJMYXp5IHBhdHRlcm4gY2FuJ3QgYmUgdXNlZCB3aXRoIG9mZnNldC4iKTsKKwogCWlmIChwcC0+bGluZSAmJiBwcC0+b2Zmc2V0KQogCQlzZW1hbnRpY19lcnJvcigiT2Zmc2V0IGNhbid0IGJlIHVzZWQgd2l0aCBsaW5lIG51bWJlci4iKTsKIAotCWlmICghcHAtPmxpbmUgJiYgcHAtPmZpbGUgJiYgIXBwLT5mdW5jdGlvbikKLQkJc2VtYW50aWNfZXJyb3IoIkZpbGUgYWx3YXlzIHJlcXVpcmVzIGxpbmUgbnVtYmVyLiIpOworCWlmICghcHAtPmxpbmUgJiYgIXBwLT5sYXp5X2xpbmUgJiYgcHAtPmZpbGUgJiYgIXBwLT5mdW5jdGlvbikKKwkJc2VtYW50aWNfZXJyb3IoIkZpbGUgYWx3YXlzIHJlcXVpcmVzIGxpbmUgbnVtYmVyIG9yICIKKwkJCSAgICAgICAibGF6eSBwYXR0ZXJuLiIpOwogCiAJaWYgKHBwLT5vZmZzZXQgJiYgIXBwLT5mdW5jdGlvbikKIAkJc2VtYW50aWNfZXJyb3IoIk9mZnNldCByZXF1aXJlcyBhbiBlbnRyeSBmdW5jdGlvbi4iKTsKQEAgLTIwOCwxMSArMjE2LDEzIEBACiAJaWYgKHBwLT5yZXRwcm9iZSAmJiAhcHAtPmZ1bmN0aW9uKQogCQlzZW1hbnRpY19lcnJvcigiUmV0dXJuIHByb2JlIHJlcXVpcmVzIGFuIGVudHJ5IGZ1bmN0aW9uLiIpOwogCi0JaWYgKChwcC0+b2Zmc2V0IHx8IHBwLT5saW5lKSAmJiBwcC0+cmV0cHJvYmUpCi0JCXNlbWFudGljX2Vycm9yKCJPZmZzZXQvTGluZSBjYW4ndCBiZSB1c2VkIHdpdGggcmV0dXJuIHByb2JlLiIpOworCWlmICgocHAtPm9mZnNldCB8fCBwcC0+bGluZSB8fCBwcC0+bGF6eV9saW5lKSAmJiBwcC0+cmV0cHJvYmUpCisJCXNlbWFudGljX2Vycm9yKCJPZmZzZXQvTGluZS9MYXp5IHBhdHRlcm4gY2FuJ3QgYmUgdXNlZCB3aXRoICIKKwkJCSAgICAgICAicmV0dXJuIHByb2JlLiIpOwogCi0JcHJfZGVidWcoInN5bWJvbDolcyBmaWxlOiVzIGxpbmU6JWQgb2Zmc2V0OiVkLCByZXR1cm46JWRcbiIsCi0JCSBwcC0+ZnVuY3Rpb24sIHBwLT5maWxlLCBwcC0+bGluZSwgcHAtPm9mZnNldCwgcHAtPnJldHByb2JlKTsKKwlwcl9kZWJ1Zygic3ltYm9sOiVzIGZpbGU6JXMgbGluZTolZCBvZmZzZXQ6JWQgcmV0dXJuOiVkIGxhenk6JXNcbiIsCisJCSBwcC0+ZnVuY3Rpb24sIHBwLT5maWxlLCBwcC0+bGluZSwgcHAtPm9mZnNldCwgcHAtPnJldHByb2JlLAorCQkgcHAtPmxhenlfbGluZSk7CiB9CiAKIC8qIFBhcnNlIHBlcmYtcHJvYmUgZXZlbnQgZGVmaW5pdGlvbiAqLwpAQCAtNDU4LDYgKzQ2OCw4IEBACiAJCWZyZWUocHAtPmZ1bmN0aW9uKTsKIAlpZiAocHAtPmZpbGUpCiAJCWZyZWUocHAtPmZpbGUpOworCWlmIChwcC0+bGF6eV9saW5lKQorCQlmcmVlKHBwLT5sYXp5X2xpbmUpOwogCWZvciAoaSA9IDA7IGkgPCBwcC0+bnJfYXJnczsgaSsrKQogCQlmcmVlKHBwLT5hcmdzW2ldKTsKIAlpZiAocHAtPmFyZ3MpCkBAIC03MTksNiArNzMxLDcgQEAKIH0KIAogI2RlZmluZSBMSU5FQlVGX1NJWkUgMjU2CisjZGVmaW5lIE5SX0FERElUSU9OQUxfTElORVMgMgogCiBzdGF0aWMgdm9pZCBzaG93X29uZV9saW5lKEZJTEUgKmZwLCB1bnNpZ25lZCBpbnQgbCwgYm9vbCBza2lwLCBib29sIHNob3dfbnVtKQogewpAQCAtNzc5LDUgKzc5MiwxMSBAQAogCQkJc2hvd19vbmVfbGluZShmcCwgKGwrKykgLSBsci0+b2Zmc2V0LCBmYWxzZSwgZmFsc2UpOwogCQlzaG93X29uZV9saW5lKGZwLCAobCsrKSAtIGxyLT5vZmZzZXQsIGZhbHNlLCB0cnVlKTsKIAl9CisKKwlpZiAobHItPmVuZCA9PSBJTlRfTUFYKQorCQlsci0+ZW5kID0gbCArIE5SX0FERElUSU9OQUxfTElORVM7CisJd2hpbGUgKGwgPCBsci0+ZW5kICYmICFmZW9mKGZwKSkKKwkJc2hvd19vbmVfbGluZShmcCwgKGwrKykgLSBsci0+b2Zmc2V0LCBmYWxzZSwgZmFsc2UpOworCiAJZmNsb3NlKGZwKTsKIH0KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuYwppbmRleCAxYjIxMjRkLi5lNzdkYzg4IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5jCkBAIC0zMiwyMSArMzIsMTMgQEAKICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogCisjaW5jbHVkZSAic3RyaW5nLmgiCiAjaW5jbHVkZSAiZXZlbnQuaCIKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgInV0aWwuaCIKICNpbmNsdWRlICJwcm9iZS1maW5kZXIuaCIKIAogCi0vKiBEd2FyZl9EaWUgTGlua2FnZSB0byBwYXJlbnQgRGllICovCi1zdHJ1Y3QgZGllX2xpbmsgewotCXN0cnVjdCBkaWVfbGluayAqcGFyZW50OwkvKiBQYXJlbnQgZGllICovCi0JRHdhcmZfRGllIGRpZTsJCQkvKiBDdXJyZW50IGRpZSAqLwotfTsKLQotc3RhdGljIER3YXJmX0RlYnVnIF9fZHdfZGVidWc7Ci1zdGF0aWMgRHdhcmZfRXJyb3IgX19kd19lcnJvcjsKLQogLyoKICAqIEdlbmVyaWMgZHdhcmYgYW5hbHlzaXMgaGVscGVycwogICovCkBAIC0xMTMsMjgxICsxMDUsMTkwIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIEZpbmQgdGhlIGZpbGVubyBvZiB0aGUgdGFyZ2V0IGZpbGUuICovCi1zdGF0aWMgRHdhcmZfVW5zaWduZWQgY3VfZmluZF9maWxlbm8oRHdhcmZfRGllIGN1X2RpZSwgY29uc3QgY2hhciAqZm5hbWUpCisvKiBMaW5lIG51bWJlciBsaXN0IG9wZXJhdGlvbnMgKi8KKworLyogQWRkIGEgbGluZSB0byBsaW5lIG51bWJlciBsaXN0ICovCitzdGF0aWMgdm9pZCBsaW5lX2xpc3RfX2FkZF9saW5lKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHVuc2lnbmVkIGludCBsaW5lKQogewotCUR3YXJmX1NpZ25lZCBjbnQsIGk7Ci0JRHdhcmZfVW5zaWduZWQgZm91bmQgPSAwOwotCWNoYXIgKipzcmNzOworCXN0cnVjdCBsaW5lX25vZGUgKmxuOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisKKwkvKiBSZXZlcnNlIHNlYXJjaCwgYmVjYXVzZSBuZXcgbGluZSB3aWxsIGJlIHRoZSBsYXN0IG9uZSAqLworCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShsbiwgaGVhZCwgbGlzdCkgeworCQlpZiAobG4tPmxpbmUgPCBsaW5lKSB7CisJCQlwID0gJmxuLT5saXN0OworCQkJZ290byBmb3VuZDsKKwkJfSBlbHNlIGlmIChsbi0+bGluZSA9PSBsaW5lKQkvKiBBbHJlYWR5IGV4aXN0ICovCisJCQlyZXR1cm4gOworCX0KKwkvKiBMaXN0IGlzIGVtcHR5LCBvciB0aGUgc21hbGxlc3QgZW50cnkgKi8KKwlwID0gaGVhZDsKK2ZvdW5kOgorCXByX2RlYnVnKCJsaW5lIGxpc3Q6IGFkZCBhIGxpbmUgJXVcbiIsIGxpbmUpOworCWxuID0gemFsbG9jKHNpemVvZihzdHJ1Y3QgbGluZV9ub2RlKSk7CisJRElFX0lGKGxuID09IE5VTEwpOworCWxuLT5saW5lID0gbGluZTsKKwlJTklUX0xJU1RfSEVBRCgmbG4tPmxpc3QpOworCWxpc3RfYWRkKCZsbi0+bGlzdCwgcCk7Cit9CisKKy8qIENoZWNrIGlmIHRoZSBsaW5lIGluIGxpbmUgbnVtYmVyIGxpc3QgKi8KK3N0YXRpYyBpbnQgbGluZV9saXN0X19oYXNfbGluZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLCB1bnNpZ25lZCBpbnQgbGluZSkKK3sKKwlzdHJ1Y3QgbGluZV9ub2RlICpsbjsKKworCS8qIFJldmVyc2Ugc2VhcmNoLCBiZWNhdXNlIG5ldyBsaW5lIHdpbGwgYmUgdGhlIGxhc3Qgb25lICovCisJbGlzdF9mb3JfZWFjaF9lbnRyeShsbiwgaGVhZCwgbGlzdCkKKwkJaWYgKGxuLT5saW5lID09IGxpbmUpCisJCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCisvKiBJbml0IGxpbmUgbnVtYmVyIGxpc3QgKi8KK3N0YXRpYyB2b2lkIGxpbmVfbGlzdF9faW5pdChzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCUlOSVRfTElTVF9IRUFEKGhlYWQpOworfQorCisvKiBGcmVlIGxpbmUgbnVtYmVyIGxpc3QgKi8KK3N0YXRpYyB2b2lkIGxpbmVfbGlzdF9fZnJlZShzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQoreworCXN0cnVjdCBsaW5lX25vZGUgKmxuOworCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgeworCQlsbiA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGxpbmVfbm9kZSwgbGlzdCk7CisJCWxpc3RfZGVsKCZsbi0+bGlzdCk7CisJCWZyZWUobG4pOworCX0KK30KKworLyogRHdhcmYgd3JhcHBlcnMgKi8KKworLyogRmluZCB0aGUgcmVhbHBhdGggb2YgdGhlIHRhcmdldCBmaWxlLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKmN1X2ZpbmRfcmVhbHBhdGgoRHdhcmZfRGllICpjdV9kaWUsIGNvbnN0IGNoYXIgKmZuYW1lKQoreworCUR3YXJmX0ZpbGVzICpmaWxlczsKKwlzaXplX3QgbmZpbGVzLCBpOworCWNvbnN0IGNoYXIgKnNyYzsKIAlpbnQgcmV0OwogCiAJaWYgKCFmbmFtZSkKLQkJcmV0dXJuIDA7CisJCXJldHVybiBOVUxMOwogCi0JcmV0ID0gZHdhcmZfc3JjZmlsZXMoY3VfZGllLCAmc3JjcywgJmNudCwgJl9fZHdfZXJyb3IpOwotCWlmIChyZXQgPT0gRFdfRExWX09LKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBjbnQgJiYgIWZvdW5kOyBpKyspIHsKLQkJCWlmIChzdHJ0YWlsY21wKHNyY3NbaV0sIGZuYW1lKSA9PSAwKQotCQkJCWZvdW5kID0gaSArIDE7Ci0JCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIHNyY3NbaV0sIERXX0RMQV9TVFJJTkcpOwotCQl9Ci0JCWZvciAoOyBpIDwgY250OyBpKyspCi0JCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIHNyY3NbaV0sIERXX0RMQV9TVFJJTkcpOwotCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIHNyY3MsIERXX0RMQV9MSVNUKTsKKwlyZXQgPSBkd2FyZl9nZXRzcmNmaWxlcyhjdV9kaWUsICZmaWxlcywgJm5maWxlcyk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gTlVMTDsKKworCWZvciAoaSA9IDA7IGkgPCBuZmlsZXM7IGkrKykgeworCQlzcmMgPSBkd2FyZl9maWxlc3JjKGZpbGVzLCBpLCBOVUxMLCBOVUxMKTsKKwkJaWYgKHN0cnRhaWxjbXAoc3JjLCBmbmFtZSkgPT0gMCkKKwkJCWJyZWFrOwogCX0KLQlpZiAoZm91bmQpCi0JCXByX2RlYnVnKCJmb3VuZCBmbm86ICVkXG4iLCAoaW50KWZvdW5kKTsKLQlyZXR1cm4gZm91bmQ7CisJcmV0dXJuIHNyYzsKIH0KIAotc3RhdGljIGludCBjdV9nZXRfZmlsZW5hbWUoRHdhcmZfRGllIGN1X2RpZSwgRHdhcmZfVW5zaWduZWQgZm5vLCBjaGFyICoqYnVmKQorc3RydWN0IF9fYWRkcl9kaWVfc2VhcmNoX3BhcmFtIHsKKwlEd2FyZl9BZGRyCWFkZHI7CisJRHdhcmZfRGllCSpkaWVfbWVtOworfTsKKworc3RhdGljIGludCBfX2RpZV9zZWFyY2hfZnVuY19jYihEd2FyZl9EaWUgKmZuX2RpZSwgdm9pZCAqZGF0YSkKIHsKLQlEd2FyZl9TaWduZWQgY250LCBpOwotCWNoYXIgKipzcmNzOwotCWludCByZXQgPSAwOworCXN0cnVjdCBfX2FkZHJfZGllX3NlYXJjaF9wYXJhbSAqYWQgPSBkYXRhOwogCi0JaWYgKCFidWYgfHwgIWZubykKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGR3YXJmX3RhZyhmbl9kaWUpID09IERXX1RBR19zdWJwcm9ncmFtICYmCisJICAgIGR3YXJmX2hhc3BjKGZuX2RpZSwgYWQtPmFkZHIpKSB7CisJCW1lbWNweShhZC0+ZGllX21lbSwgZm5fZGllLCBzaXplb2YoRHdhcmZfRGllKSk7CisJCXJldHVybiBEV0FSRl9DQl9BQk9SVDsKKwl9CisJcmV0dXJuIERXQVJGX0NCX09LOworfQogCi0JcmV0ID0gZHdhcmZfc3JjZmlsZXMoY3VfZGllLCAmc3JjcywgJmNudCwgJl9fZHdfZXJyb3IpOwotCWlmIChyZXQgPT0gRFdfRExWX09LKSB7Ci0JCWlmICgoRHdhcmZfVW5zaWduZWQpY250ID4gZm5vIC0gMSkgewotCQkJKmJ1ZiA9IHN0cmR1cChzcmNzW2ZubyAtIDFdKTsKLQkJCXJldCA9IDA7Ci0JCQlwcl9kZWJ1ZygiZm91bmQgZmlsZW5hbWU6ICVzXG4iLCAqYnVmKTsKLQkJfSBlbHNlCi0JCQlyZXQgPSAtRU5PRU5UOwotCQlmb3IgKGkgPSAwOyBpIDwgY250OyBpKyspCi0JCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIHNyY3NbaV0sIERXX0RMQV9TVFJJTkcpOwotCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIHNyY3MsIERXX0RMQV9MSVNUKTsKLQl9IGVsc2UKLQkJcmV0ID0gLUVJTlZBTDsKLQlyZXR1cm4gcmV0OworLyogU2VhcmNoIGEgcmVhbCBzdWJwcm9ncmFtIGluY2x1ZGluZyB0aGlzIGxpbmUsICovCitzdGF0aWMgRHdhcmZfRGllICpkaWVfZ2V0X3JlYWxfc3VicHJvZ3JhbShEd2FyZl9EaWUgKmN1X2RpZSwgRHdhcmZfQWRkciBhZGRyLAorCQkJCQkgIER3YXJmX0RpZSAqZGllX21lbSkKK3sKKwlzdHJ1Y3QgX19hZGRyX2RpZV9zZWFyY2hfcGFyYW0gYWQ7CisJYWQuYWRkciA9IGFkZHI7CisJYWQuZGllX21lbSA9IGRpZV9tZW07CisJLyogZHdhcmZfZ2V0c2NvcGVzIGNhbid0IGZpbmQgc3VicHJvZ3JhbS4gKi8KKwlpZiAoIWR3YXJmX2dldGZ1bmNzKGN1X2RpZSwgX19kaWVfc2VhcmNoX2Z1bmNfY2IsICZhZCwgMCkpCisJCXJldHVybiBOVUxMOworCWVsc2UKKwkJcmV0dXJuIGRpZV9tZW07Cit9CisKKy8qIFNpbWlsYXIgdG8gZHdhcmZfZ2V0ZnVuY3MsIGJ1dCByZXR1cm5zIGlubGluZWRfc3Vicm91dGluZSBpZiBleGlzdHMuICovCitzdGF0aWMgRHdhcmZfRGllICpkaWVfZ2V0X2lubGluZWZ1bmMoRHdhcmZfRGllICpzcF9kaWUsIER3YXJmX0FkZHIgYWRkciwKKwkJCQkgICAgIER3YXJmX0RpZSAqZGllX21lbSkKK3sKKwlEd2FyZl9EaWUgY2hpbGRfZGllOworCWludCByZXQ7CisKKwlyZXQgPSBkd2FyZl9jaGlsZChzcF9kaWUsIGRpZV9tZW0pOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlkbyB7CisJCWlmIChkd2FyZl90YWcoZGllX21lbSkgPT0gRFdfVEFHX2lubGluZWRfc3Vicm91dGluZSAmJgorCQkgICAgZHdhcmZfaGFzcGMoZGllX21lbSwgYWRkcikpCisJCQlyZXR1cm4gZGllX21lbTsKKworCQlpZiAoZGllX2dldF9pbmxpbmVmdW5jKGRpZV9tZW0sIGFkZHIsICZjaGlsZF9kaWUpKSB7CisJCQltZW1jcHkoZGllX21lbSwgJmNoaWxkX2RpZSwgc2l6ZW9mKER3YXJmX0RpZSkpOworCQkJcmV0dXJuIGRpZV9tZW07CisJCX0KKwl9IHdoaWxlIChkd2FyZl9zaWJsaW5nb2YoZGllX21lbSwgZGllX21lbSkgPT0gMCk7CisKKwlyZXR1cm4gTlVMTDsKIH0KIAogLyogQ29tcGFyZSBkaWVuYW1lIGFuZCB0bmFtZSAqLwotc3RhdGljIGludCBkaWVfY29tcGFyZV9uYW1lKER3YXJmX0RpZSBkd19kaWUsIGNvbnN0IGNoYXIgKnRuYW1lKQorc3RhdGljIGJvb2wgZGllX2NvbXBhcmVfbmFtZShEd2FyZl9EaWUgKmR3X2RpZSwgY29uc3QgY2hhciAqdG5hbWUpCiB7Ci0JY2hhciAqbmFtZTsKLQlpbnQgcmV0OwotCXJldCA9IGR3YXJmX2RpZW5hbWUoZHdfZGllLCAmbmFtZSwgJl9fZHdfZXJyb3IpOwotCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKLQlpZiAocmV0ID09IERXX0RMVl9PSykgewotCQlyZXQgPSBzdHJjbXAodG5hbWUsIG5hbWUpOwotCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIG5hbWUsIERXX0RMQV9TVFJJTkcpOwotCX0gZWxzZQotCQlyZXQgPSAtMTsKLQlyZXR1cm4gcmV0OwotfQotCi0vKiBDaGVjayB0aGUgYWRkcmVzcyBpcyBpbiB0aGUgc3VicHJvZ3JhbShmdW5jdGlvbikuICovCi1zdGF0aWMgaW50IGRpZV93aXRoaW5fc3VicHJvZ3JhbShEd2FyZl9EaWUgc3BfZGllLCBEd2FyZl9BZGRyIGFkZHIsCi0JCQkJIER3YXJmX1NpZ25lZCAqb2ZmcykKLXsKLQlEd2FyZl9BZGRyIGxvcGMsIGhpcGM7Ci0JaW50IHJldDsKLQotCS8qIFRPRE86IGNoZWNrIHJhbmdlcyAqLwotCXJldCA9IGR3YXJmX2xvd3BjKHNwX2RpZSwgJmxvcGMsICZfX2R3X2Vycm9yKTsKLQlESUVfSUYocmV0ID09IERXX0RMVl9FUlJPUik7Ci0JaWYgKHJldCA9PSBEV19ETFZfTk9fRU5UUlkpCi0JCXJldHVybiAwOwotCXJldCA9IGR3YXJmX2hpZ2hwYyhzcF9kaWUsICZoaXBjLCAmX19kd19lcnJvcik7Ci0JRElFX0lGKHJldCAhPSBEV19ETFZfT0spOwotCWlmIChsb3BjIDw9IGFkZHIgJiYgYWRkciA8IGhpcGMpIHsKLQkJKm9mZnMgPSBhZGRyIC0gbG9wYzsKLQkJcmV0dXJuIDE7Ci0JfSBlbHNlCi0JCXJldHVybiAwOwotfQotCi0vKiBDaGVjayB0aGUgZGllIGlzIGlubGluZWQgZnVuY3Rpb24gKi8KLXN0YXRpYyBEd2FyZl9Cb29sIGRpZV9pbmxpbmVkX3N1YnByb2dyYW0oRHdhcmZfRGllIGR3X2RpZSkKLXsKLQkvKiBUT0RPOiBjaGVjayBzdHJpY3RseSAqLwotCUR3YXJmX0Jvb2wgaW5sOwotCWludCByZXQ7Ci0KLQlyZXQgPSBkd2FyZl9oYXNhdHRyKGR3X2RpZSwgRFdfQVRfaW5saW5lLCAmaW5sLCAmX19kd19lcnJvcik7Ci0JRElFX0lGKHJldCA9PSBEV19ETFZfRVJST1IpOwotCXJldHVybiBpbmw7Ci19Ci0KLS8qIEdldCB0aGUgb2Zmc2V0IG9mIGFic3RydWN0X29yaWdpbiAqLwotc3RhdGljIER3YXJmX09mZiBkaWVfZ2V0X2Fic3RyYWN0X29yaWdpbihEd2FyZl9EaWUgZHdfZGllKQotewotCUR3YXJmX0F0dHJpYnV0ZSBhdHRyOwotCUR3YXJmX09mZiBjdV9vZmZzOwotCWludCByZXQ7Ci0KLQlyZXQgPSBkd2FyZl9hdHRyKGR3X2RpZSwgRFdfQVRfYWJzdHJhY3Rfb3JpZ2luLCAmYXR0ciwgJl9fZHdfZXJyb3IpOwotCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKLQlyZXQgPSBkd2FyZl9mb3JtcmVmKGF0dHIsICZjdV9vZmZzLCAmX19kd19lcnJvcik7Ci0JRElFX0lGKHJldCAhPSBEV19ETFZfT0spOwotCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1ZywgYXR0ciwgRFdfRExBX0FUVFIpOwotCXJldHVybiBjdV9vZmZzOworCWNvbnN0IGNoYXIgKm5hbWU7CisJbmFtZSA9IGR3YXJmX2RpZW5hbWUoZHdfZGllKTsKKwlESUVfSUYobmFtZSA9PSBOVUxMKTsKKwlyZXR1cm4gc3RyY21wKHRuYW1lLCBuYW1lKTsKIH0KIAogLyogR2V0IGVudHJ5IHBjKG9yIGxvdyBwYywgMXN0IGVudHJ5IG9mIHJhbmdlcykgIG9mIHRoZSBkaWUgKi8KLXN0YXRpYyBEd2FyZl9BZGRyIGRpZV9nZXRfZW50cnlwYyhEd2FyZl9EaWUgZHdfZGllKQorc3RhdGljIER3YXJmX0FkZHIgZGllX2dldF9lbnRyeXBjKER3YXJmX0RpZSAqZHdfZGllKQogewotCUR3YXJmX0F0dHJpYnV0ZSBhdHRyOwotCUR3YXJmX0FkZHIgYWRkcjsKLQlEd2FyZl9PZmYgb2ZmczsKLQlEd2FyZl9SYW5nZXMgKnJhbmdlczsKLQlEd2FyZl9TaWduZWQgY250OworCUR3YXJmX0FkZHIgZXBjOwogCWludCByZXQ7CiAKLQkvKiBUcnkgdG8gZ2V0IGVudHJ5IHBjICovCi0JcmV0ID0gZHdhcmZfYXR0cihkd19kaWUsIERXX0FUX2VudHJ5X3BjLCAmYXR0ciwgJl9fZHdfZXJyb3IpOwotCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKLQlpZiAocmV0ID09IERXX0RMVl9PSykgewotCQlyZXQgPSBkd2FyZl9mb3JtYWRkcihhdHRyLCAmYWRkciwgJl9fZHdfZXJyb3IpOwotCQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7Ci0JCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1ZywgYXR0ciwgRFdfRExBX0FUVFIpOwotCQlyZXR1cm4gYWRkcjsKLQl9Ci0KLQkvKiBUcnkgdG8gZ2V0IGxvdyBwYyAqLwotCXJldCA9IGR3YXJmX2xvd3BjKGR3X2RpZSwgJmFkZHIsICZfX2R3X2Vycm9yKTsKLQlESUVfSUYocmV0ID09IERXX0RMVl9FUlJPUik7Ci0JaWYgKHJldCA9PSBEV19ETFZfT0spCi0JCXJldHVybiBhZGRyOwotCi0JLyogVHJ5IHRvIGdldCByYW5nZXMgKi8KLQlyZXQgPSBkd2FyZl9hdHRyKGR3X2RpZSwgRFdfQVRfcmFuZ2VzLCAmYXR0ciwgJl9fZHdfZXJyb3IpOwotCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKLQlyZXQgPSBkd2FyZl9mb3JtcmVmKGF0dHIsICZvZmZzLCAmX19kd19lcnJvcik7Ci0JRElFX0lGKHJldCAhPSBEV19ETFZfT0spOwotCXJldCA9IGR3YXJmX2dldF9yYW5nZXMoX19kd19kZWJ1Zywgb2ZmcywgJnJhbmdlcywgJmNudCwgTlVMTCwKLQkJCQkmX19kd19lcnJvcik7Ci0JRElFX0lGKHJldCAhPSBEV19ETFZfT0spOwotCWFkZHIgPSByYW5nZXNbMF0uZHdyX2FkZHIxOwotCWR3YXJmX3Jhbmdlc19kZWFsbG9jKF9fZHdfZGVidWcsIHJhbmdlcywgY250KTsKLQlyZXR1cm4gYWRkcjsKKwlyZXQgPSBkd2FyZl9lbnRyeXBjKGR3X2RpZSwgJmVwYyk7CisJRElFX0lGKHJldCA9PSAtMSk7CisJcmV0dXJuIGVwYzsKIH0KIAotLyoKLSAqIFNlYXJjaCBhIERpZSBmcm9tIERpZSB0cmVlLgotICogTm90ZTogY3VyX2xpbmstPmRpZSBzaG91bGQgYmUgZGVhbGxvY2F0ZWQgaW4gdGhpcyBmdW5jdGlvbi4KLSAqLwotc3RhdGljIGludCBfX3NlYXJjaF9kaWVfdHJlZShzdHJ1Y3QgZGllX2xpbmsgKmN1cl9saW5rLAotCQkJICAgICBpbnQgKCpkaWVfY2IpKHN0cnVjdCBkaWVfbGluayAqLCB2b2lkICopLAotCQkJICAgICB2b2lkICpkYXRhKQorLyogR2V0IGEgdmFyaWFibGUgZGllICovCitzdGF0aWMgRHdhcmZfRGllICpkaWVfZmluZF92YXJpYWJsZShEd2FyZl9EaWUgKnNwX2RpZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgRHdhcmZfRGllICpkaWVfbWVtKQogewotCUR3YXJmX0RpZSBuZXdfZGllOwotCXN0cnVjdCBkaWVfbGluayBuZXdfbGluazsKKwlEd2FyZl9EaWUgY2hpbGRfZGllOworCWludCB0YWc7CiAJaW50IHJldDsKIAotCWlmICghZGllX2NiKQotCQlyZXR1cm4gMDsKKwlyZXQgPSBkd2FyZl9jaGlsZChzcF9kaWUsIGRpZV9tZW0pOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIE5VTEw7CiAKLQkvKiBDaGVjayBjdXJyZW50IGRpZSAqLwotCXdoaWxlICghKHJldCA9IGRpZV9jYihjdXJfbGluaywgZGF0YSkpKSB7Ci0JCS8qIENoZWNrIGNoaWxkIGRpZSAqLwotCQlyZXQgPSBkd2FyZl9jaGlsZChjdXJfbGluay0+ZGllLCAmbmV3X2RpZSwgJl9fZHdfZXJyb3IpOwotCQlESUVfSUYocmV0ID09IERXX0RMVl9FUlJPUik7Ci0JCWlmIChyZXQgPT0gRFdfRExWX09LKSB7Ci0JCQluZXdfbGluay5wYXJlbnQgPSBjdXJfbGluazsKLQkJCW5ld19saW5rLmRpZSA9IG5ld19kaWU7Ci0JCQlyZXQgPSBfX3NlYXJjaF9kaWVfdHJlZSgmbmV3X2xpbmssIGRpZV9jYiwgZGF0YSk7Ci0JCQlpZiAocmV0KQotCQkJCWJyZWFrOworCWRvIHsKKwkJdGFnID0gZHdhcmZfdGFnKGRpZV9tZW0pOworCQlpZiAoKHRhZyA9PSBEV19UQUdfZm9ybWFsX3BhcmFtZXRlciB8fAorCQkgICAgIHRhZyA9PSBEV19UQUdfdmFyaWFibGUpICYmCisJCSAgICAoZGllX2NvbXBhcmVfbmFtZShkaWVfbWVtLCBuYW1lKSA9PSAwKSkKKwkJCXJldHVybiBkaWVfbWVtOworCisJCWlmIChkaWVfZmluZF92YXJpYWJsZShkaWVfbWVtLCBuYW1lLCAmY2hpbGRfZGllKSkgeworCQkJbWVtY3B5KGRpZV9tZW0sICZjaGlsZF9kaWUsIHNpemVvZihEd2FyZl9EaWUpKTsKKwkJCXJldHVybiBkaWVfbWVtOwogCQl9CisJfSB3aGlsZSAoZHdhcmZfc2libGluZ29mKGRpZV9tZW0sIGRpZV9tZW0pID09IDApOwogCi0JCS8qIE1vdmUgdG8gbmV4dCBzaWJsaW5nICovCi0JCXJldCA9IGR3YXJmX3NpYmxpbmdvZihfX2R3X2RlYnVnLCBjdXJfbGluay0+ZGllLCAmbmV3X2RpZSwKLQkJCQkgICAgICAmX19kd19lcnJvcik7Ci0JCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKLQkJZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBjdXJfbGluay0+ZGllLCBEV19ETEFfRElFKTsKLQkJY3VyX2xpbmstPmRpZSA9IG5ld19kaWU7Ci0JCWlmIChyZXQgPT0gRFdfRExWX05PX0VOVFJZKQotCQkJcmV0dXJuIDA7Ci0JfQotCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1ZywgY3VyX2xpbmstPmRpZSwgRFdfRExBX0RJRSk7Ci0JcmV0dXJuIHJldDsKLX0KLQotLyogU2VhcmNoIGEgZGllIGluIGl0cyBjaGlsZHJlbidzIGRpZSB0cmVlICovCi1zdGF0aWMgaW50IHNlYXJjaF9kaWVfZnJvbV9jaGlsZHJlbihEd2FyZl9EaWUgcGFyZW50X2RpZSwKLQkJCQkgICAgaW50ICgqZGllX2NiKShzdHJ1Y3QgZGllX2xpbmsgKiwgdm9pZCAqKSwKLQkJCQkgICAgdm9pZCAqZGF0YSkKLXsKLQlzdHJ1Y3QgZGllX2xpbmsgbmV3X2xpbms7Ci0JaW50IHJldDsKLQotCW5ld19saW5rLnBhcmVudCA9IE5VTEw7Ci0JcmV0ID0gZHdhcmZfY2hpbGQocGFyZW50X2RpZSwgJm5ld19saW5rLmRpZSwgJl9fZHdfZXJyb3IpOwotCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKLQlpZiAocmV0ID09IERXX0RMVl9PSykKLQkJcmV0dXJuIF9fc2VhcmNoX2RpZV90cmVlKCZuZXdfbGluaywgZGllX2NiLCBkYXRhKTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi0vKiBGaW5kIGEgbG9jZGVzYyBjb3JyZXNwb25kaW5nIHRvIHRoZSBhZGRyZXNzICovCi1zdGF0aWMgaW50IGF0dHJfZ2V0X2xvY2Rlc2MoRHdhcmZfQXR0cmlidXRlIGF0dHIsIER3YXJmX0xvY2Rlc2MgKmRlc2MsCi0JCQkgICAgRHdhcmZfQWRkciBhZGRyKQotewotCUR3YXJmX1NpZ25lZCBsY250OwotCUR3YXJmX0xvY2Rlc2MgKipsbGJ1ZjsKLQlpbnQgcmV0LCBpOwotCi0JcmV0ID0gZHdhcmZfbG9jbGlzdF9uKGF0dHIsICZsbGJ1ZiwgJmxjbnQsICZfX2R3X2Vycm9yKTsKLQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7Ci0JcmV0ID0gRFdfRExWX05PX0VOVFJZOwotCWZvciAoaSA9IDA7IGkgPCBsY250OyArK2kpIHsKLQkJaWYgKGxsYnVmW2ldLT5sZF9sb3BjIDw9IGFkZHIgJiYKLQkJICAgIGxsYnVmW2ldLT5sZF9oaXBjID4gYWRkcikgewotCQkJbWVtY3B5KGRlc2MsIGxsYnVmW2ldLCBzaXplb2YoRHdhcmZfTG9jZGVzYykpOwotCQkJZGVzYy0+bGRfcyA9Ci0JCQkJbWFsbG9jKHNpemVvZihEd2FyZl9Mb2MpICogbGxidWZbaV0tPmxkX2NlbnRzKTsKLQkJCURJRV9JRihkZXNjLT5sZF9zID09IE5VTEwpOwotCQkJbWVtY3B5KGRlc2MtPmxkX3MsIGxsYnVmW2ldLT5sZF9zLAotCQkJCXNpemVvZihEd2FyZl9Mb2MpICogbGxidWZbaV0tPmxkX2NlbnRzKTsKLQkJCXJldCA9IERXX0RMVl9PSzsKLQkJCWJyZWFrOwotCQl9Ci0JCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1ZywgbGxidWZbaV0tPmxkX3MsIERXX0RMQV9MT0NfQkxPQ0spOwotCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIGxsYnVmW2ldLCBEV19ETEFfTE9DREVTQyk7Ci0JfQotCS8qIFJlbGVhc2luZyBsb29wICovCi0JZm9yICg7IGkgPCBsY250OyArK2kpIHsKLQkJZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBsbGJ1ZltpXS0+bGRfcywgRFdfRExBX0xPQ19CTE9DSyk7Ci0JCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1ZywgbGxidWZbaV0sIERXX0RMQV9MT0NERVNDKTsKLQl9Ci0JZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBsbGJ1ZiwgRFdfRExBX0xJU1QpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qIEdldCBkZWNsX2ZpbGUgYXR0cmlidXRlIHZhbHVlIChmaWxlIG51bWJlcikgKi8KLXN0YXRpYyBEd2FyZl9VbnNpZ25lZCBkaWVfZ2V0X2RlY2xfZmlsZShEd2FyZl9EaWUgc3BfZGllKQotewotCUR3YXJmX0F0dHJpYnV0ZSBhdHRyOwotCUR3YXJmX1Vuc2lnbmVkIGZubzsKLQlpbnQgcmV0OwotCi0JcmV0ID0gZHdhcmZfYXR0cihzcF9kaWUsIERXX0FUX2RlY2xfZmlsZSwgJmF0dHIsICZfX2R3X2Vycm9yKTsKLQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7Ci0JZHdhcmZfZm9ybXVkYXRhKGF0dHIsICZmbm8sICZfX2R3X2Vycm9yKTsKLQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7Ci0JZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBhdHRyLCBEV19ETEFfQVRUUik7Ci0JcmV0dXJuIGZubzsKLX0KLQotLyogR2V0IGRlY2xfbGluZSBhdHRyaWJ1dGUgdmFsdWUgKGxpbmUgbnVtYmVyKSAqLwotc3RhdGljIER3YXJmX1Vuc2lnbmVkIGRpZV9nZXRfZGVjbF9saW5lKER3YXJmX0RpZSBzcF9kaWUpCi17Ci0JRHdhcmZfQXR0cmlidXRlIGF0dHI7Ci0JRHdhcmZfVW5zaWduZWQgbG5vOwotCWludCByZXQ7Ci0KLQlyZXQgPSBkd2FyZl9hdHRyKHNwX2RpZSwgRFdfQVRfZGVjbF9saW5lLCAmYXR0ciwgJl9fZHdfZXJyb3IpOwotCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKLQlkd2FyZl9mb3JtdWRhdGEoYXR0ciwgJmxubywgJl9fZHdfZXJyb3IpOwotCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKLQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIGF0dHIsIERXX0RMQV9BVFRSKTsKLQlyZXR1cm4gbG5vOworCXJldHVybiBOVUxMOwogfQogCiAvKgpAQCAtMzk1LDQ3ICsyOTYsNDUgQEAKICAqLwogCiAvKiBTaG93IGEgbG9jYXRpb24gKi8KLXN0YXRpYyB2b2lkIHNob3dfbG9jYXRpb24oRHdhcmZfTG9jICpsb2MsIHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQorc3RhdGljIHZvaWQgc2hvd19sb2NhdGlvbihEd2FyZl9PcCAqb3AsIHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQogewotCUR3YXJmX1NtYWxsIG9wOwotCUR3YXJmX1Vuc2lnbmVkIHJlZ247Ci0JRHdhcmZfU2lnbmVkIG9mZnM7CisJdW5zaWduZWQgaW50IHJlZ247CisJRHdhcmZfV29yZCBvZmZzID0gMDsKIAlpbnQgZGVyZWYgPSAwLCByZXQ7CiAJY29uc3QgY2hhciAqcmVnczsKIAotCW9wID0gbG9jLT5scl9hdG9tOwotCisJLyogVE9ETzogc3VwcG9ydCBDRkEgKi8KIAkvKiBJZiB0aGlzIGlzIGJhc2VkIG9uIGZyYW1lIGJ1ZmZlciwgc2V0IHRoZSBvZmZzZXQgKi8KLQlpZiAob3AgPT0gRFdfT1BfZmJyZWcpIHsKKwlpZiAob3AtPmF0b20gPT0gRFdfT1BfZmJyZWcpIHsKKwkJaWYgKHBmLT5mYl9vcHMgPT0gTlVMTCkKKwkJCWRpZSgiVGhlIGF0dHJpYnV0ZSBvZiBmcmFtZSBiYXNlIGlzIG5vdCBzdXBwb3J0ZWQuXG4iKTsKIAkJZGVyZWYgPSAxOwotCQlvZmZzID0gKER3YXJmX1NpZ25lZClsb2MtPmxyX251bWJlcjsKLQkJb3AgPSBwZi0+ZmJsb2MubGRfc1swXS5scl9hdG9tOwotCQlsb2MgPSAmcGYtPmZibG9jLmxkX3NbMF07Ci0JfSBlbHNlCi0JCW9mZnMgPSAwOworCQlvZmZzID0gb3AtPm51bWJlcjsKKwkJb3AgPSAmcGYtPmZiX29wc1swXTsKKwl9CiAKLQlpZiAob3AgPj0gRFdfT1BfYnJlZzAgJiYgb3AgPD0gRFdfT1BfYnJlZzMxKSB7Ci0JCXJlZ24gPSBvcCAtIERXX09QX2JyZWcwOwotCQlvZmZzICs9IChEd2FyZl9TaWduZWQpbG9jLT5scl9udW1iZXI7CisJaWYgKG9wLT5hdG9tID49IERXX09QX2JyZWcwICYmIG9wLT5hdG9tIDw9IERXX09QX2JyZWczMSkgeworCQlyZWduID0gb3AtPmF0b20gLSBEV19PUF9icmVnMDsKKwkJb2ZmcyArPSBvcC0+bnVtYmVyOwogCQlkZXJlZiA9IDE7Ci0JfSBlbHNlIGlmIChvcCA+PSBEV19PUF9yZWcwICYmIG9wIDw9IERXX09QX3JlZzMxKSB7Ci0JCXJlZ24gPSBvcCAtIERXX09QX3JlZzA7Ci0JfSBlbHNlIGlmIChvcCA9PSBEV19PUF9icmVneCkgewotCQlyZWduID0gbG9jLT5scl9udW1iZXI7Ci0JCW9mZnMgKz0gKER3YXJmX1NpZ25lZClsb2MtPmxyX251bWJlcjI7CisJfSBlbHNlIGlmIChvcC0+YXRvbSA+PSBEV19PUF9yZWcwICYmIG9wLT5hdG9tIDw9IERXX09QX3JlZzMxKSB7CisJCXJlZ24gPSBvcC0+YXRvbSAtIERXX09QX3JlZzA7CisJfSBlbHNlIGlmIChvcC0+YXRvbSA9PSBEV19PUF9icmVneCkgeworCQlyZWduID0gb3AtPm51bWJlcjsKKwkJb2ZmcyArPSBvcC0+bnVtYmVyMjsKIAkJZGVyZWYgPSAxOwotCX0gZWxzZSBpZiAob3AgPT0gRFdfT1BfcmVneCkgewotCQlyZWduID0gbG9jLT5scl9udW1iZXI7CisJfSBlbHNlIGlmIChvcC0+YXRvbSA9PSBEV19PUF9yZWd4KSB7CisJCXJlZ24gPSBvcC0+bnVtYmVyOwogCX0gZWxzZQotCQlkaWUoIkR3YXJmX09QICVkIGlzIG5vdCBzdXBwb3J0ZWQuIiwgb3ApOworCQlkaWUoIkRXX09QICVkIGlzIG5vdCBzdXBwb3J0ZWQuIiwgb3AtPmF0b20pOwogCiAJcmVncyA9IGdldF9hcmNoX3JlZ3N0cihyZWduKTsKIAlpZiAoIXJlZ3MpCi0JCWRpZSgiJWxsZCBleGNlZWRzIG1heCByZWdpc3RlciBudW1iZXIuIiwgcmVnbik7CisJCWRpZSgiJXUgZXhjZWVkcyBtYXggcmVnaXN0ZXIgbnVtYmVyLiIsIHJlZ24pOwogCiAJaWYgKGRlcmVmKQotCQlyZXQgPSBzbnByaW50ZihwZi0+YnVmLCBwZi0+bGVuLAotCQkJCSAiICVzPSUrbGxkKCVzKSIsIHBmLT52YXIsIG9mZnMsIHJlZ3MpOworCQlyZXQgPSBzbnByaW50ZihwZi0+YnVmLCBwZi0+bGVuLCAiICVzPSslanUoJXMpIiwKKwkJCSAgICAgICBwZi0+dmFyLCAodWludG1heF90KW9mZnMsIHJlZ3MpOwogCWVsc2UKIAkJcmV0ID0gc25wcmludGYocGYtPmJ1ZiwgcGYtPmxlbiwgIiAlcz0lcyIsIHBmLT52YXIsIHJlZ3MpOwogCURJRV9JRihyZXQgPCAwKTsKQEAgLTQ0Myw1MiArMzQyLDM3IEBACiB9CiAKIC8qIFNob3cgYSB2YXJpYWJsZXMgaW4ga3Byb2JlIGV2ZW50IGZvcm1hdCAqLwotc3RhdGljIHZvaWQgc2hvd192YXJpYWJsZShEd2FyZl9EaWUgdnJfZGllLCBzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZikKK3N0YXRpYyB2b2lkIHNob3dfdmFyaWFibGUoRHdhcmZfRGllICp2cl9kaWUsIHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQogewogCUR3YXJmX0F0dHJpYnV0ZSBhdHRyOwotCUR3YXJmX0xvY2Rlc2MgbGQ7CisJRHdhcmZfT3AgKmV4cHI7CisJc2l6ZV90IG5leHByOwogCWludCByZXQ7CiAKLQlyZXQgPSBkd2FyZl9hdHRyKHZyX2RpZSwgRFdfQVRfbG9jYXRpb24sICZhdHRyLCAmX19kd19lcnJvcik7Ci0JaWYgKHJldCAhPSBEV19ETFZfT0spCisJaWYgKGR3YXJmX2F0dHIodnJfZGllLCBEV19BVF9sb2NhdGlvbiwgJmF0dHIpID09IE5VTEwpCiAJCWdvdG8gZXJyb3I7Ci0JcmV0ID0gYXR0cl9nZXRfbG9jZGVzYyhhdHRyLCAmbGQsIChwZi0+YWRkciAtIHBmLT5jdV9iYXNlKSk7Ci0JaWYgKHJldCAhPSBEV19ETFZfT0spCisJLyogVE9ETzogaGFuZGxlIG1vcmUgdGhhbiAxIGV4cHJzICovCisJcmV0ID0gZHdhcmZfZ2V0bG9jYXRpb25fYWRkcigmYXR0ciwgKHBmLT5hZGRyIC0gcGYtPmN1X2Jhc2UpLAorCQkJCSAgICAgJmV4cHIsICZuZXhwciwgMSk7CisJaWYgKHJldCA8PSAwIHx8IG5leHByID09IDApCiAJCWdvdG8gZXJyb3I7Ci0JLyogVE9ETz8gKi8KLQlESUVfSUYobGQubGRfY2VudHMgIT0gMSk7Ci0Jc2hvd19sb2NhdGlvbigmbGQubGRfc1swXSwgcGYpOwotCWZyZWUobGQubGRfcyk7Ci0JZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBhdHRyLCBEV19ETEFfQVRUUik7CisKKwlzaG93X2xvY2F0aW9uKGV4cHIsIHBmKTsKKwkvKiAqZXhwciB3aWxsIGJlIGNhY2hlZCBpbiBsaWJkdy4gRG9uJ3QgZnJlZSBpdC4gKi8KIAlyZXR1cm4gOwogZXJyb3I6CisJLyogVE9ETzogU3VwcG9ydCBjb25zdF92YWx1ZSAqLwogCWRpZSgiRmFpbGVkIHRvIGZpbmQgdGhlIGxvY2F0aW9uIG9mICVzIGF0IHRoaXMgYWRkcmVzcy5cbiIKIAkgICAgIiBQZXJoYXBzLCBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LiIsIHBmLT52YXIpOwogfQogCi1zdGF0aWMgaW50IHZhcmlhYmxlX2NhbGxiYWNrKHN0cnVjdCBkaWVfbGluayAqZGxpbmssIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHByb2JlX2ZpbmRlciAqcGYgPSAoc3RydWN0IHByb2JlX2ZpbmRlciAqKWRhdGE7Ci0JRHdhcmZfSGFsZiB0YWc7Ci0JaW50IHJldDsKLQotCXJldCA9IGR3YXJmX3RhZyhkbGluay0+ZGllLCAmdGFnLCAmX19kd19lcnJvcik7Ci0JRElFX0lGKHJldCA9PSBEV19ETFZfRVJST1IpOwotCWlmICgodGFnID09IERXX1RBR19mb3JtYWxfcGFyYW1ldGVyIHx8Ci0JICAgICB0YWcgPT0gRFdfVEFHX3ZhcmlhYmxlKSAmJgotCSAgICAoZGllX2NvbXBhcmVfbmFtZShkbGluay0+ZGllLCBwZi0+dmFyKSA9PSAwKSkgewotCQlzaG93X3ZhcmlhYmxlKGRsaW5rLT5kaWUsIHBmKTsKLQkJcmV0dXJuIDE7Ci0JfQotCS8qIFRPRE86IFN1cHBvcnQgc3RydWN0IG1lbWJlcnMgYW5kIGFycmF5cyAqLwotCXJldHVybiAwOwotfQotCiAvKiBGaW5kIGEgdmFyaWFibGUgaW4gYSBzdWJwcm9ncmFtIGRpZSAqLwotc3RhdGljIHZvaWQgZmluZF92YXJpYWJsZShEd2FyZl9EaWUgc3BfZGllLCBzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZikKK3N0YXRpYyB2b2lkIGZpbmRfdmFyaWFibGUoRHdhcmZfRGllICpzcF9kaWUsIHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQogewogCWludCByZXQ7CisJRHdhcmZfRGllIHZyX2RpZTsKIAorCS8qIFRPRE86IFN1cHBvcnQgc3RydWN0IG1lbWJlcnMgYW5kIGFycmF5cyAqLwogCWlmICghaXNfY192YXJuYW1lKHBmLT52YXIpKSB7CiAJCS8qIE91dHB1dCByYXcgcGFyYW1ldGVycyAqLwogCQlyZXQgPSBzbnByaW50ZihwZi0+YnVmLCBwZi0+bGVuLCAiICVzIiwgcGYtPnZhcik7CkBAIC00OTksNTggKzM4Myw1MSBAQAogCiAJcHJfZGVidWcoIlNlYXJjaGluZyAnJXMnIHZhcmlhYmxlIGluIGNvbnRleHQuXG4iLCBwZi0+dmFyKTsKIAkvKiBTZWFyY2ggY2hpbGQgZGllIGZvciBsb2NhbCB2YXJpYWJsZXMgYW5kIHBhcmFtZXRlcnMuICovCi0JcmV0ID0gc2VhcmNoX2RpZV9mcm9tX2NoaWxkcmVuKHNwX2RpZSwgdmFyaWFibGVfY2FsbGJhY2ssIHBmKTsKLQlpZiAoIXJldCkKKwlpZiAoIWRpZV9maW5kX3ZhcmlhYmxlKHNwX2RpZSwgcGYtPnZhciwgJnZyX2RpZSkpCiAJCWRpZSgiRmFpbGVkIHRvIGZpbmQgJyVzJyBpbiB0aGlzIGZ1bmN0aW9uLiIsIHBmLT52YXIpOwotfQogCi0vKiBHZXQgYSBmcmFtZSBiYXNlIG9uIHRoZSBhZGRyZXNzICovCi1zdGF0aWMgdm9pZCBnZXRfY3VycmVudF9mcmFtZV9iYXNlKER3YXJmX0RpZSBzcF9kaWUsIHN0cnVjdCBwcm9iZV9maW5kZXIgKnBmKQotewotCUR3YXJmX0F0dHJpYnV0ZSBhdHRyOwotCWludCByZXQ7Ci0KLQlyZXQgPSBkd2FyZl9hdHRyKHNwX2RpZSwgRFdfQVRfZnJhbWVfYmFzZSwgJmF0dHIsICZfX2R3X2Vycm9yKTsKLQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7Ci0JcmV0ID0gYXR0cl9nZXRfbG9jZGVzYyhhdHRyLCAmcGYtPmZibG9jLCAocGYtPmFkZHIgLSBwZi0+Y3VfYmFzZSkpOwotCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKLQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIGF0dHIsIERXX0RMQV9BVFRSKTsKLX0KLQotc3RhdGljIHZvaWQgZnJlZV9jdXJyZW50X2ZyYW1lX2Jhc2Uoc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCi17Ci0JZnJlZShwZi0+ZmJsb2MubGRfcyk7Ci0JbWVtc2V0KCZwZi0+ZmJsb2MsIDAsIHNpemVvZihEd2FyZl9Mb2NkZXNjKSk7CisJc2hvd192YXJpYWJsZSgmdnJfZGllLCBwZik7CiB9CiAKIC8qIFNob3cgYSBwcm9iZSBwb2ludCB0byBvdXRwdXQgYnVmZmVyICovCi1zdGF0aWMgdm9pZCBzaG93X3Byb2JlcG9pbnQoRHdhcmZfRGllIHNwX2RpZSwgRHdhcmZfU2lnbmVkIG9mZnMsCi0JCQkgICAgc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCitzdGF0aWMgdm9pZCBzaG93X3Byb2JlX3BvaW50KER3YXJmX0RpZSAqc3BfZGllLCBzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZikKIHsKIAlzdHJ1Y3QgcHJvYmVfcG9pbnQgKnBwID0gcGYtPnBwOwotCWNoYXIgKm5hbWU7CisJRHdhcmZfQWRkciBlYWRkcjsKKwlEd2FyZl9EaWUgZGllX21lbTsKKwljb25zdCBjaGFyICpuYW1lOwogCWNoYXIgdG1wW01BWF9QUk9CRV9CVUZGRVJdOwogCWludCByZXQsIGksIGxlbjsKKwlEd2FyZl9BdHRyaWJ1dGUgZmJfYXR0cjsKKwlzaXplX3Qgbm9wczsKKworCS8qIElmIG5vIHJlYWwgc3VicHJvZ3JhbSwgZmluZCBhIHJlYWwgb25lICovCisJaWYgKCFzcF9kaWUgfHwgZHdhcmZfdGFnKHNwX2RpZSkgIT0gRFdfVEFHX3N1YnByb2dyYW0pIHsKKwkJc3BfZGllID0gZGllX2dldF9yZWFsX3N1YnByb2dyYW0oJnBmLT5jdV9kaWUsCisJCQkJCQkgcGYtPmFkZHIsICZkaWVfbWVtKTsKKwkJaWYgKCFzcF9kaWUpCisJCQlkaWUoIlByb2JlIHBvaW50IGlzIG5vdCBmb3VuZCBpbiBzdWJwcm9ncmFtcy4iKTsKKwl9CiAKIAkvKiBPdXRwdXQgbmFtZSBvZiBwcm9iZSBwb2ludCAqLwotCXJldCA9IGR3YXJmX2RpZW5hbWUoc3BfZGllLCAmbmFtZSwgJl9fZHdfZXJyb3IpOwotCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKLQlpZiAocmV0ID09IERXX0RMVl9PSykgewotCQlyZXQgPSBzbnByaW50Zih0bXAsIE1BWF9QUk9CRV9CVUZGRVIsICIlcysldSIsIG5hbWUsCi0JCQkJKHVuc2lnbmVkIGludClvZmZzKTsKKwluYW1lID0gZHdhcmZfZGllbmFtZShzcF9kaWUpOworCWlmIChuYW1lKSB7CisJCWR3YXJmX2VudHJ5cGMoc3BfZGllLCAmZWFkZHIpOworCQlyZXQgPSBzbnByaW50Zih0bXAsIE1BWF9QUk9CRV9CVUZGRVIsICIlcyslbHUiLCBuYW1lLAorCQkJCSh1bnNpZ25lZCBsb25nKShwZi0+YWRkciAtIGVhZGRyKSk7CiAJCS8qIENvcHkgdGhlIGZ1bmN0aW9uIG5hbWUgaWYgcG9zc2libGUgKi8KIAkJaWYgKCFwcC0+ZnVuY3Rpb24pIHsKIAkJCXBwLT5mdW5jdGlvbiA9IHN0cmR1cChuYW1lKTsKLQkJCXBwLT5vZmZzZXQgPSBvZmZzOworCQkJcHAtPm9mZnNldCA9IChzaXplX3QpKHBmLT5hZGRyIC0gZWFkZHIpOwogCQl9Ci0JCWR3YXJmX2RlYWxsb2MoX19kd19kZWJ1ZywgbmFtZSwgRFdfRExBX1NUUklORyk7CiAJfSBlbHNlIHsKIAkJLyogVGhpcyBmdW5jdGlvbiBoYXMgbm8gbmFtZS4gKi8KLQkJcmV0ID0gc25wcmludGYodG1wLCBNQVhfUFJPQkVfQlVGRkVSLCAiMHglbGx4IiwgcGYtPmFkZHIpOworCQlyZXQgPSBzbnByaW50Zih0bXAsIE1BWF9QUk9CRV9CVUZGRVIsICIweCVqeCIsCisJCQkgICAgICAgKHVpbnRtYXhfdClwZi0+YWRkcik7CiAJCWlmICghcHAtPmZ1bmN0aW9uKSB7CiAJCQkvKiBUT0RPOiBVc2UgX3N0ZXh0ICovCiAJCQlwcC0+ZnVuY3Rpb24gPSBzdHJkdXAoIiIpOwotCQkJcHAtPm9mZnNldCA9IChpbnQpcGYtPmFkZHI7CisJCQlwcC0+b2Zmc2V0ID0gKHNpemVfdClwZi0+YWRkcjsKIAkJfQogCX0KIAlESUVfSUYocmV0IDwgMCk7CkBAIC01NTgsOCArNDM1LDE1IEBACiAJbGVuID0gcmV0OwogCXByX2RlYnVnKCJQcm9iZSBwb2ludCBmb3VuZDogJXNcbiIsIHRtcCk7CiAKKwkvKiBHZXQgdGhlIGZyYW1lIGJhc2UgYXR0cmlidXRlL29wcyAqLworCWR3YXJmX2F0dHIoc3BfZGllLCBEV19BVF9mcmFtZV9iYXNlLCAmZmJfYXR0cik7CisJcmV0ID0gZHdhcmZfZ2V0bG9jYXRpb25fYWRkcigmZmJfYXR0ciwgKHBmLT5hZGRyIC0gcGYtPmN1X2Jhc2UpLAorCQkJCSAgICAgJnBmLT5mYl9vcHMsICZub3BzLCAxKTsKKwlpZiAocmV0IDw9IDAgfHwgbm9wcyA9PSAwKQorCQlwZi0+ZmJfb3BzID0gTlVMTDsKKwogCS8qIEZpbmQgZWFjaCBhcmd1bWVudCAqLwotCWdldF9jdXJyZW50X2ZyYW1lX2Jhc2Uoc3BfZGllLCBwZik7CisJLyogVE9ETzogdXNlIGR3YXJmX2NmaV9hZGRyZnJhbWUgKi8KIAlmb3IgKGkgPSAwOyBpIDwgcHAtPm5yX2FyZ3M7IGkrKykgewogCQlwZi0+dmFyID0gcHAtPmFyZ3NbaV07CiAJCXBmLT5idWYgPSAmdG1wW2xlbl07CkBAIC01NjcsMjg5ICs0NTEsMzI3IEBACiAJCWZpbmRfdmFyaWFibGUoc3BfZGllLCBwZik7CiAJCWxlbiArPSBzdHJsZW4ocGYtPmJ1Zik7CiAJfQotCWZyZWVfY3VycmVudF9mcmFtZV9iYXNlKHBmKTsKKworCS8qICpwZi0+ZmJfb3BzIHdpbGwgYmUgY2FjaGVkIGluIGxpYmR3LiBEb24ndCBmcmVlIGl0LiAqLworCXBmLT5mYl9vcHMgPSBOVUxMOwogCiAJcHAtPnByb2Jlc1twcC0+Zm91bmRdID0gc3RyZHVwKHRtcCk7CiAJcHAtPmZvdW5kKys7CiB9CiAKLXN0YXRpYyBpbnQgcHJvYmVhZGRyX2NhbGxiYWNrKHN0cnVjdCBkaWVfbGluayAqZGxpbmssIHZvaWQgKmRhdGEpCi17Ci0Jc3RydWN0IHByb2JlX2ZpbmRlciAqcGYgPSAoc3RydWN0IHByb2JlX2ZpbmRlciAqKWRhdGE7Ci0JRHdhcmZfSGFsZiB0YWc7Ci0JRHdhcmZfU2lnbmVkIG9mZnM7Ci0JaW50IHJldDsKLQotCXJldCA9IGR3YXJmX3RhZyhkbGluay0+ZGllLCAmdGFnLCAmX19kd19lcnJvcik7Ci0JRElFX0lGKHJldCA9PSBEV19ETFZfRVJST1IpOwotCS8qIENoZWNrIHRoZSBhZGRyZXNzIGlzIGluIHRoaXMgc3VicHJvZ3JhbSAqLwotCWlmICh0YWcgPT0gRFdfVEFHX3N1YnByb2dyYW0gJiYKLQkgICAgZGllX3dpdGhpbl9zdWJwcm9ncmFtKGRsaW5rLT5kaWUsIHBmLT5hZGRyLCAmb2ZmcykpIHsKLQkJc2hvd19wcm9iZXBvaW50KGRsaW5rLT5kaWUsIG9mZnMsIHBmKTsKLQkJcmV0dXJuIDE7Ci0JfQotCXJldHVybiAwOwotfQotCiAvKiBGaW5kIHByb2JlIHBvaW50IGZyb20gaXRzIGxpbmUgbnVtYmVyICovCiBzdGF0aWMgdm9pZCBmaW5kX3Byb2JlX3BvaW50X2J5X2xpbmUoc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCiB7Ci0JRHdhcmZfU2lnbmVkIGNudCwgaSwgY2xtOwotCUR3YXJmX0xpbmUgKmxpbmVzOwotCUR3YXJmX1Vuc2lnbmVkIGxpbmVubyA9IDA7CisJRHdhcmZfTGluZXMgKmxpbmVzOworCUR3YXJmX0xpbmUgKmxpbmU7CisJc2l6ZV90IG5saW5lcywgaTsKIAlEd2FyZl9BZGRyIGFkZHI7Ci0JRHdhcmZfVW5zaWduZWQgZm5vOworCWludCBsaW5lbm87CiAJaW50IHJldDsKIAotCXJldCA9IGR3YXJmX3NyY2xpbmVzKHBmLT5jdV9kaWUsICZsaW5lcywgJmNudCwgJl9fZHdfZXJyb3IpOwotCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKwlyZXQgPSBkd2FyZl9nZXRzcmNsaW5lcygmcGYtPmN1X2RpZSwgJmxpbmVzLCAmbmxpbmVzKTsKKwlESUVfSUYocmV0ICE9IDApOwogCi0JZm9yIChpID0gMDsgaSA8IGNudDsgaSsrKSB7Ci0JCXJldCA9IGR3YXJmX2xpbmVfc3JjZmlsZW5vKGxpbmVzW2ldLCAmZm5vLCAmX19kd19lcnJvcik7Ci0JCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKLQkJaWYgKGZubyAhPSBwZi0+Zm5vKQotCQkJY29udGludWU7Ci0KLQkJcmV0ID0gZHdhcmZfbGluZW5vKGxpbmVzW2ldLCAmbGluZW5vLCAmX19kd19lcnJvcik7Ci0JCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKwlmb3IgKGkgPSAwOyBpIDwgbmxpbmVzOyBpKyspIHsKKwkJbGluZSA9IGR3YXJmX29uZXNyY2xpbmUobGluZXMsIGkpOworCQlkd2FyZl9saW5lbm8obGluZSwgJmxpbmVubyk7CiAJCWlmIChsaW5lbm8gIT0gcGYtPmxubykKIAkJCWNvbnRpbnVlOwogCi0JCXJldCA9IGR3YXJmX2xpbmVvZmYobGluZXNbaV0sICZjbG0sICZfX2R3X2Vycm9yKTsKLQkJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCQkvKiBUT0RPOiBHZXQgZmlsZW5vIGZyb20gbGluZSwgYnV0IGhvdz8gKi8KKwkJaWYgKHN0cnRhaWxjbXAoZHdhcmZfbGluZXNyYyhsaW5lLCBOVUxMLCBOVUxMKSwgcGYtPmZuYW1lKSAhPSAwKQorCQkJY29udGludWU7CiAKLQkJcmV0ID0gZHdhcmZfbGluZWFkZHIobGluZXNbaV0sICZhZGRyLCAmX19kd19lcnJvcik7Ci0JCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKLQkJcHJfZGVidWcoIlByb2JlIGxpbmUgZm91bmQ6IGxpbmVbJWRdOiV1LCVkIGFkZHI6MHglbGx4XG4iLAotCQkJIChpbnQpaSwgKHVuc2lnbmVkKWxpbmVubywgKGludCljbG0sIGFkZHIpOworCQlyZXQgPSBkd2FyZl9saW5lYWRkcihsaW5lLCAmYWRkcik7CisJCURJRV9JRihyZXQgIT0gMCk7CisJCXByX2RlYnVnKCJQcm9iZSBsaW5lIGZvdW5kOiBsaW5lWyVkXTolZCBhZGRyOjB4JWp4XG4iLAorCQkJIChpbnQpaSwgbGluZW5vLCAodWludG1heF90KWFkZHIpOwogCQlwZi0+YWRkciA9IGFkZHI7Ci0JCS8qIFNlYXJjaCBhIHJlYWwgc3VicHJvZ3JhbSBpbmNsdWRpbmcgdGhpcyBsaW5lLCAqLwotCQlyZXQgPSBzZWFyY2hfZGllX2Zyb21fY2hpbGRyZW4ocGYtPmN1X2RpZSwKLQkJCQkJICAgICAgIHByb2JlYWRkcl9jYWxsYmFjaywgcGYpOwotCQlpZiAocmV0ID09IDApCi0JCQlkaWUoIlByb2JlIHBvaW50IGlzIG5vdCBmb3VuZCBpbiBzdWJwcm9ncmFtcy4iKTsKKworCQlzaG93X3Byb2JlX3BvaW50KE5VTEwsIHBmKTsKIAkJLyogQ29udGludWluZywgYmVjYXVzZSB0YXJnZXQgbGluZSBtaWdodCBiZSBpbmxpbmVkLiAqLwogCX0KLQlkd2FyZl9zcmNsaW5lc19kZWFsbG9jKF9fZHdfZGVidWcsIGxpbmVzLCBjbnQpOwogfQogCi0vKiBTZWFyY2ggZnVuY3Rpb24gZnJvbSBmdW5jdGlvbiBuYW1lICovCi1zdGF0aWMgaW50IHByb2JlZnVuY19jYWxsYmFjayhzdHJ1Y3QgZGllX2xpbmsgKmRsaW5rLCB2b2lkICpkYXRhKQorLyogRmluZCBsaW5lcyB3aGljaCBtYXRjaCBsYXp5IHBhdHRlcm4gKi8KK3N0YXRpYyBpbnQgZmluZF9sYXp5X21hdGNoX2xpbmVzKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCisJCQkJIGNvbnN0IGNoYXIgKmZuYW1lLCBjb25zdCBjaGFyICpwYXQpCit7CisJY2hhciAqZmJ1ZiwgKnAxLCAqcDI7CisJaW50IGZkLCBsaW5lLCBubGluZXMgPSAwOworCXN0cnVjdCBzdGF0IHN0OworCisJZmQgPSBvcGVuKGZuYW1lLCBPX1JET05MWSk7CisJaWYgKGZkIDwgMCkKKwkJZGllKCJmYWlsZWQgdG8gb3BlbiAlcyIsIGZuYW1lKTsKKwlESUVfSUYoZnN0YXQoZmQsICZzdCkgPCAwKTsKKwlmYnVmID0gbWFsbG9jKHN0LnN0X3NpemUgKyAyKTsKKwlESUVfSUYoZmJ1ZiA9PSBOVUxMKTsKKwlESUVfSUYocmVhZChmZCwgZmJ1Ziwgc3Quc3Rfc2l6ZSkgPCAwKTsKKwljbG9zZShmZCk7CisJZmJ1ZltzdC5zdF9zaXplXSA9ICdcbic7CS8qIER1bW15IGxpbmUgKi8KKwlmYnVmW3N0LnN0X3NpemUgKyAxXSA9ICdcMCc7CisJcDEgPSBmYnVmOworCWxpbmUgPSAxOworCXdoaWxlICgocDIgPSBzdHJjaHIocDEsICdcbicpKSAhPSBOVUxMKSB7CisJCSpwMiA9ICdcMCc7CisJCWlmIChzdHJsYXp5bWF0Y2gocDEsIHBhdCkpIHsKKwkJCWxpbmVfbGlzdF9fYWRkX2xpbmUoaGVhZCwgbGluZSk7CisJCQlubGluZXMrKzsKKwkJfQorCQlsaW5lKys7CisJCXAxID0gcDIgKyAxOworCX0KKwlmcmVlKGZidWYpOworCXJldHVybiBubGluZXM7Cit9CisKKy8qIEZpbmQgcHJvYmUgcG9pbnRzIGZyb20gbGF6eSBwYXR0ZXJuICAqLworc3RhdGljIHZvaWQgZmluZF9wcm9iZV9wb2ludF9sYXp5KER3YXJmX0RpZSAqc3BfZGllLCBzdHJ1Y3QgcHJvYmVfZmluZGVyICpwZikKK3sKKwlEd2FyZl9MaW5lcyAqbGluZXM7CisJRHdhcmZfTGluZSAqbGluZTsKKwlzaXplX3QgbmxpbmVzLCBpOworCUR3YXJmX0FkZHIgYWRkcjsKKwlEd2FyZl9EaWUgZGllX21lbTsKKwlpbnQgbGluZW5vOworCWludCByZXQ7CisKKwlpZiAobGlzdF9lbXB0eSgmcGYtPmxjYWNoZSkpIHsKKwkJLyogTWF0Y2hpbmcgbGF6eSBsaW5lIHBhdHRlcm4gKi8KKwkJcmV0ID0gZmluZF9sYXp5X21hdGNoX2xpbmVzKCZwZi0+bGNhY2hlLCBwZi0+Zm5hbWUsCisJCQkJCSAgICBwZi0+cHAtPmxhenlfbGluZSk7CisJCWlmIChyZXQgPD0gMCkKKwkJCWRpZSgiTm8gbWF0Y2hlZCBsaW5lcyBmb3VuZCBpbiAlcy4iLCBwZi0+Zm5hbWUpOworCX0KKworCXJldCA9IGR3YXJmX2dldHNyY2xpbmVzKCZwZi0+Y3VfZGllLCAmbGluZXMsICZubGluZXMpOworCURJRV9JRihyZXQgIT0gMCk7CisJZm9yIChpID0gMDsgaSA8IG5saW5lczsgaSsrKSB7CisJCWxpbmUgPSBkd2FyZl9vbmVzcmNsaW5lKGxpbmVzLCBpKTsKKworCQlkd2FyZl9saW5lbm8obGluZSwgJmxpbmVubyk7CisJCWlmICghbGluZV9saXN0X19oYXNfbGluZSgmcGYtPmxjYWNoZSwgbGluZW5vKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIFRPRE86IEdldCBmaWxlbm8gZnJvbSBsaW5lLCBidXQgaG93PyAqLworCQlpZiAoc3RydGFpbGNtcChkd2FyZl9saW5lc3JjKGxpbmUsIE5VTEwsIE5VTEwpLCBwZi0+Zm5hbWUpICE9IDApCisJCQljb250aW51ZTsKKworCQlyZXQgPSBkd2FyZl9saW5lYWRkcihsaW5lLCAmYWRkcik7CisJCURJRV9JRihyZXQgIT0gMCk7CisJCWlmIChzcF9kaWUpIHsKKwkJCS8qIEFkZHJlc3MgZmlsdGVyaW5nIDE6IGRvZXMgc3BfZGllIGluY2x1ZGUgYWRkcj8gKi8KKwkJCWlmICghZHdhcmZfaGFzcGMoc3BfZGllLCBhZGRyKSkKKwkJCQljb250aW51ZTsKKwkJCS8qIEFkZHJlc3MgZmlsdGVyaW5nIDI6IE5vIGNoaWxkIGluY2x1ZGUgYWRkcj8gKi8KKwkJCWlmIChkaWVfZ2V0X2lubGluZWZ1bmMoc3BfZGllLCBhZGRyLCAmZGllX21lbSkpCisJCQkJY29udGludWU7CisJCX0KKworCQlwcl9kZWJ1ZygiUHJvYmUgbGluZSBmb3VuZDogbGluZVslZF06JWQgYWRkcjoweCVsbHhcbiIsCisJCQkgKGludClpLCBsaW5lbm8sICh1bnNpZ25lZCBsb25nIGxvbmcpYWRkcik7CisJCXBmLT5hZGRyID0gYWRkcjsKKworCQlzaG93X3Byb2JlX3BvaW50KHNwX2RpZSwgcGYpOworCQkvKiBDb250aW51aW5nLCBiZWNhdXNlIHRhcmdldCBsaW5lIG1pZ2h0IGJlIGlubGluZWQuICovCisJfQorCS8qIFRPRE86IGRlYWxsb2NhdGUgbGluZXMsIGJ1dCBob3c/ICovCit9CisKK3N0YXRpYyBpbnQgcHJvYmVfcG9pbnRfaW5saW5lX2NiKER3YXJmX0RpZSAqaW5fZGllLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBwcm9iZV9maW5kZXIgKnBmID0gKHN0cnVjdCBwcm9iZV9maW5kZXIgKilkYXRhOwogCXN0cnVjdCBwcm9iZV9wb2ludCAqcHAgPSBwZi0+cHA7Ci0Jc3RydWN0IGRpZV9saW5rICpsazsKLQlEd2FyZl9TaWduZWQgb2ZmczsKLQlEd2FyZl9IYWxmIHRhZzsKLQlpbnQgcmV0OwogCi0JcmV0ID0gZHdhcmZfdGFnKGRsaW5rLT5kaWUsICZ0YWcsICZfX2R3X2Vycm9yKTsKLQlESUVfSUYocmV0ID09IERXX0RMVl9FUlJPUik7Ci0JaWYgKHRhZyA9PSBEV19UQUdfc3VicHJvZ3JhbSkgewotCQlpZiAoZGllX2NvbXBhcmVfbmFtZShkbGluay0+ZGllLCBwcC0+ZnVuY3Rpb24pID09IDApIHsKLQkJCWlmIChwcC0+bGluZSkgewkvKiBGdW5jdGlvbiByZWxhdGl2ZSBsaW5lICovCi0JCQkJcGYtPmZubyA9IGRpZV9nZXRfZGVjbF9maWxlKGRsaW5rLT5kaWUpOwotCQkJCXBmLT5sbm8gPSBkaWVfZ2V0X2RlY2xfbGluZShkbGluay0+ZGllKQotCQkJCQkgKyBwcC0+bGluZTsKLQkJCQlmaW5kX3Byb2JlX3BvaW50X2J5X2xpbmUocGYpOwotCQkJCXJldHVybiAxOwotCQkJfQotCQkJaWYgKGRpZV9pbmxpbmVkX3N1YnByb2dyYW0oZGxpbmstPmRpZSkpIHsKLQkJCQkvKiBJbmxpbmVkIGZ1bmN0aW9uLCBzYXZlIGl0LiAqLwotCQkJCXJldCA9IGR3YXJmX2RpZV9DVV9vZmZzZXQoZGxpbmstPmRpZSwKLQkJCQkJCQkgICZwZi0+aW5sX29mZnMsCi0JCQkJCQkJICAmX19kd19lcnJvcik7Ci0JCQkJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOwotCQkJCXByX2RlYnVnKCJpbmxpbmUgZGVmaW5pdGlvbiBvZmZzZXQgJWxsZFxuIiwKLQkJCQkJIHBmLT5pbmxfb2Zmcyk7Ci0JCQkJcmV0dXJuIDA7CS8qIENvbnRpbnVlIHRvIHNlYXJjaCAqLwotCQkJfQotCQkJLyogR2V0IHByb2JlIGFkZHJlc3MgKi8KLQkJCXBmLT5hZGRyID0gZGllX2dldF9lbnRyeXBjKGRsaW5rLT5kaWUpOworCWlmIChwcC0+bGF6eV9saW5lKQorCQlmaW5kX3Byb2JlX3BvaW50X2xhenkoaW5fZGllLCBwZik7CisJZWxzZSB7CisJCS8qIEdldCBwcm9iZSBhZGRyZXNzICovCisJCXBmLT5hZGRyID0gZGllX2dldF9lbnRyeXBjKGluX2RpZSk7CisJCXBmLT5hZGRyICs9IHBwLT5vZmZzZXQ7CisJCXByX2RlYnVnKCJmb3VuZCBpbmxpbmUgYWRkcjogMHglanhcbiIsCisJCQkgKHVpbnRtYXhfdClwZi0+YWRkcik7CisKKwkJc2hvd19wcm9iZV9wb2ludChpbl9kaWUsIHBmKTsKKwl9CisKKwlyZXR1cm4gRFdBUkZfQ0JfT0s7Cit9CisKKy8qIFNlYXJjaCBmdW5jdGlvbiBmcm9tIGZ1bmN0aW9uIG5hbWUgKi8KK3N0YXRpYyBpbnQgcHJvYmVfcG9pbnRfc2VhcmNoX2NiKER3YXJmX0RpZSAqc3BfZGllLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwcm9iZV9maW5kZXIgKnBmID0gKHN0cnVjdCBwcm9iZV9maW5kZXIgKilkYXRhOworCXN0cnVjdCBwcm9iZV9wb2ludCAqcHAgPSBwZi0+cHA7CisKKwkvKiBDaGVjayB0YWcgYW5kIGRpZW5hbWUgKi8KKwlpZiAoZHdhcmZfdGFnKHNwX2RpZSkgIT0gRFdfVEFHX3N1YnByb2dyYW0gfHwKKwkgICAgZGllX2NvbXBhcmVfbmFtZShzcF9kaWUsIHBwLT5mdW5jdGlvbikgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlwZi0+Zm5hbWUgPSBkd2FyZl9kZWNsX2ZpbGUoc3BfZGllKTsKKwlpZiAocHAtPmxpbmUpIHsgLyogRnVuY3Rpb24gcmVsYXRpdmUgbGluZSAqLworCQlkd2FyZl9kZWNsX2xpbmUoc3BfZGllLCAmcGYtPmxubyk7CisJCXBmLT5sbm8gKz0gcHAtPmxpbmU7CisJCWZpbmRfcHJvYmVfcG9pbnRfYnlfbGluZShwZik7CisJfSBlbHNlIGlmICghZHdhcmZfZnVuY19pbmxpbmUoc3BfZGllKSkgeworCQkvKiBSZWFsIGZ1bmN0aW9uICovCisJCWlmIChwcC0+bGF6eV9saW5lKQorCQkJZmluZF9wcm9iZV9wb2ludF9sYXp5KHNwX2RpZSwgcGYpOworCQllbHNlIHsKKwkJCXBmLT5hZGRyID0gZGllX2dldF9lbnRyeXBjKHNwX2RpZSk7CiAJCQlwZi0+YWRkciArPSBwcC0+b2Zmc2V0OwogCQkJLyogVE9ETzogQ2hlY2sgdGhlIGFkZHJlc3MgaW4gdGhpcyBmdW5jdGlvbiAqLwotCQkJc2hvd19wcm9iZXBvaW50KGRsaW5rLT5kaWUsIHBwLT5vZmZzZXQsIHBmKTsKLQkJCXJldHVybiAxOyAvKiBFeGl0OyBubyBzYW1lIHN5bWJvbCBpbiB0aGlzIENVLiAqLworCQkJc2hvd19wcm9iZV9wb2ludChzcF9kaWUsIHBmKTsKIAkJfQotCX0gZWxzZSBpZiAodGFnID09IERXX1RBR19pbmxpbmVkX3N1YnJvdXRpbmUgJiYgcGYtPmlubF9vZmZzKSB7Ci0JCWlmIChkaWVfZ2V0X2Fic3RyYWN0X29yaWdpbihkbGluay0+ZGllKSA9PSBwZi0+aW5sX29mZnMpIHsKLQkJCS8qIEdldCBwcm9iZSBhZGRyZXNzICovCi0JCQlwZi0+YWRkciA9IGRpZV9nZXRfZW50cnlwYyhkbGluay0+ZGllKTsKLQkJCXBmLT5hZGRyICs9IHBwLT5vZmZzZXQ7Ci0JCQlwcl9kZWJ1ZygiZm91bmQgaW5saW5lIGFkZHI6IDB4JWxseFxuIiwgcGYtPmFkZHIpOwotCQkJLyogSW5saW5lZCBmdW5jdGlvbi4gR2V0IGEgcmVhbCBzdWJwcm9ncmFtICovCi0JCQlmb3IgKGxrID0gZGxpbmstPnBhcmVudDsgbGsgIT0gTlVMTDsgbGsgPSBsay0+cGFyZW50KSB7Ci0JCQkJdGFnID0gMDsKLQkJCQlkd2FyZl90YWcobGstPmRpZSwgJnRhZywgJl9fZHdfZXJyb3IpOwotCQkJCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKLQkJCQlpZiAodGFnID09IERXX1RBR19zdWJwcm9ncmFtICYmCi0JCQkJICAgICFkaWVfaW5saW5lZF9zdWJwcm9ncmFtKGxrLT5kaWUpKQotCQkJCQlnb3RvIGZvdW5kOwotCQkJfQotCQkJZGllKCJGYWlsZWQgdG8gZmluZCByZWFsIHN1YnByb2dyYW0uIik7Ci1mb3VuZDoKLQkJCS8qIEdldCBvZmZzZXQgZnJvbSBzdWJwcm9ncmFtICovCi0JCQlyZXQgPSBkaWVfd2l0aGluX3N1YnByb2dyYW0obGstPmRpZSwgcGYtPmFkZHIsICZvZmZzKTsKLQkJCURJRV9JRighcmV0KTsKLQkJCXNob3dfcHJvYmVwb2ludChsay0+ZGllLCBvZmZzLCBwZik7Ci0JCQkvKiBDb250aW51ZSB0byBzZWFyY2ggKi8KLQkJfQotCX0KLQlyZXR1cm4gMDsKKwl9IGVsc2UKKwkJLyogSW5saW5lZCBmdW5jdGlvbjogc2VhcmNoIGluc3RhbmNlcyAqLworCQlkd2FyZl9mdW5jX2lubGluZV9pbnN0YW5jZXMoc3BfZGllLCBwcm9iZV9wb2ludF9pbmxpbmVfY2IsIHBmKTsKKworCXJldHVybiAxOyAvKiBFeGl0OyBubyBzYW1lIHN5bWJvbCBpbiB0aGlzIENVLiAqLwogfQogCiBzdGF0aWMgdm9pZCBmaW5kX3Byb2JlX3BvaW50X2J5X2Z1bmMoc3RydWN0IHByb2JlX2ZpbmRlciAqcGYpCiB7Ci0Jc2VhcmNoX2RpZV9mcm9tX2NoaWxkcmVuKHBmLT5jdV9kaWUsIHByb2JlZnVuY19jYWxsYmFjaywgcGYpOworCWR3YXJmX2dldGZ1bmNzKCZwZi0+Y3VfZGllLCBwcm9iZV9wb2ludF9zZWFyY2hfY2IsIHBmLCAwKTsKIH0KIAogLyogRmluZCBhIHByb2JlIHBvaW50ICovCi1pbnQgZmluZF9wcm9iZXBvaW50KGludCBmZCwgc3RydWN0IHByb2JlX3BvaW50ICpwcCkKK2ludCBmaW5kX3Byb2JlX3BvaW50KGludCBmZCwgc3RydWN0IHByb2JlX3BvaW50ICpwcCkKIHsKLQlEd2FyZl9IYWxmIGFkZHJfc2l6ZSA9IDA7Ci0JRHdhcmZfVW5zaWduZWQgbmV4dF9jdWggPSAwOwotCWludCBjdV9udW1iZXIgPSAwLCByZXQ7CiAJc3RydWN0IHByb2JlX2ZpbmRlciBwZiA9IHsucHAgPSBwcH07CisJaW50IHJldDsKKwlEd2FyZl9PZmYgb2ZmLCBub2ZmOworCXNpemVfdCBjdWhsOworCUR3YXJmX0RpZSAqZGllcDsKKwlEd2FyZiAqZGJnOwogCi0JcmV0ID0gZHdhcmZfaW5pdChmZCwgRFdfRExDX1JFQUQsIDAsIDAsICZfX2R3X2RlYnVnLCAmX19kd19lcnJvcik7Ci0JaWYgKHJldCAhPSBEV19ETFZfT0spCisJZGJnID0gZHdhcmZfYmVnaW4oZmQsIERXQVJGX0NfUkVBRCk7CisJaWYgKCFkYmcpCiAJCXJldHVybiAtRU5PRU5UOwogCiAJcHAtPmZvdW5kID0gMDsKLQl3aGlsZSAoKytjdV9udW1iZXIpIHsKLQkJLyogU2VhcmNoIENVIChDb21waWxhdGlvbiBVbml0KSAqLwotCQlyZXQgPSBkd2FyZl9uZXh0X2N1X2hlYWRlcihfX2R3X2RlYnVnLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJJmFkZHJfc2l6ZSwgJm5leHRfY3VoLCAmX19kd19lcnJvcik7Ci0JCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKLQkJaWYgKHJldCA9PSBEV19ETFZfTk9fRU5UUlkpCi0JCQlicmVhazsKLQorCW9mZiA9IDA7CisJbGluZV9saXN0X19pbml0KCZwZi5sY2FjaGUpOworCS8qIExvb3Agb24gQ1VzIChDb21waWxhdGlvbiBVbml0KSAqLworCXdoaWxlICghZHdhcmZfbmV4dGN1KGRiZywgb2ZmLCAmbm9mZiwgJmN1aGwsIE5VTEwsIE5VTEwsIE5VTEwpKSB7CiAJCS8qIEdldCB0aGUgRElFKERlYnVnZ2luZyBJbmZvcm1hdGlvbiBFbnRyeSkgb2YgdGhpcyBDVSAqLwotCQlyZXQgPSBkd2FyZl9zaWJsaW5nb2YoX19kd19kZWJ1ZywgMCwgJnBmLmN1X2RpZSwgJl9fZHdfZXJyb3IpOwotCQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJCWRpZXAgPSBkd2FyZl9vZmZkaWUoZGJnLCBvZmYgKyBjdWhsLCAmcGYuY3VfZGllKTsKKwkJaWYgKCFkaWVwKQorCQkJY29udGludWU7CiAKIAkJLyogQ2hlY2sgaWYgdGFyZ2V0IGZpbGUgaXMgaW5jbHVkZWQuICovCiAJCWlmIChwcC0+ZmlsZSkKLQkJCXBmLmZubyA9IGN1X2ZpbmRfZmlsZW5vKHBmLmN1X2RpZSwgcHAtPmZpbGUpOworCQkJcGYuZm5hbWUgPSBjdV9maW5kX3JlYWxwYXRoKCZwZi5jdV9kaWUsIHBwLT5maWxlKTsKKwkJZWxzZQorCQkJcGYuZm5hbWUgPSBOVUxMOwogCi0JCWlmICghcHAtPmZpbGUgfHwgcGYuZm5vKSB7CisJCWlmICghcHAtPmZpbGUgfHwgcGYuZm5hbWUpIHsKIAkJCS8qIFNhdmUgQ1UgYmFzZSBhZGRyZXNzIChmb3IgZnJhbWVfYmFzZSkgKi8KLQkJCXJldCA9IGR3YXJmX2xvd3BjKHBmLmN1X2RpZSwgJnBmLmN1X2Jhc2UsICZfX2R3X2Vycm9yKTsKLQkJCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKLQkJCWlmIChyZXQgPT0gRFdfRExWX05PX0VOVFJZKQorCQkJcmV0ID0gZHdhcmZfbG93cGMoJnBmLmN1X2RpZSwgJnBmLmN1X2Jhc2UpOworCQkJaWYgKHJldCAhPSAwKQogCQkJCXBmLmN1X2Jhc2UgPSAwOwogCQkJaWYgKHBwLT5mdW5jdGlvbikKIAkJCQlmaW5kX3Byb2JlX3BvaW50X2J5X2Z1bmMoJnBmKTsKKwkJCWVsc2UgaWYgKHBwLT5sYXp5X2xpbmUpCisJCQkJZmluZF9wcm9iZV9wb2ludF9sYXp5KE5VTEwsICZwZik7CiAJCQllbHNlIHsKIAkJCQlwZi5sbm8gPSBwcC0+bGluZTsKIAkJCQlmaW5kX3Byb2JlX3BvaW50X2J5X2xpbmUoJnBmKTsKIAkJCX0KIAkJfQotCQlkd2FyZl9kZWFsbG9jKF9fZHdfZGVidWcsIHBmLmN1X2RpZSwgRFdfRExBX0RJRSk7CisJCW9mZiA9IG5vZmY7CiAJfQotCXJldCA9IGR3YXJmX2ZpbmlzaChfX2R3X2RlYnVnLCAmX19kd19lcnJvcik7Ci0JRElFX0lGKHJldCAhPSBEV19ETFZfT0spOworCWxpbmVfbGlzdF9fZnJlZSgmcGYubGNhY2hlKTsKKwlkd2FyZl9lbmQoZGJnKTsKIAogCXJldHVybiBwcC0+Zm91bmQ7CiB9CiAKLQotc3RhdGljIHZvaWQgbGluZV9yYW5nZV9hZGRfbGluZShzdHJ1Y3QgbGluZV9yYW5nZSAqbHIsIHVuc2lnbmVkIGludCBsaW5lKQotewotCXN0cnVjdCBsaW5lX25vZGUgKmxuOwotCXN0cnVjdCBsaXN0X2hlYWQgKnA7Ci0KLQkvKiBSZXZlcnNlIHNlYXJjaCwgYmVjYXVzZSBuZXcgbGluZSB3aWxsIGJlIHRoZSBsYXN0IG9uZSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShsbiwgJmxyLT5saW5lX2xpc3QsIGxpc3QpIHsKLQkJaWYgKGxuLT5saW5lIDwgbGluZSkgewotCQkJcCA9ICZsbi0+bGlzdDsKLQkJCWdvdG8gZm91bmQ7Ci0JCX0gZWxzZSBpZiAobG4tPmxpbmUgPT0gbGluZSkJLyogQWxyZWFkeSBleGlzdCAqLwotCQkJcmV0dXJuIDsKLQl9Ci0JLyogTGlzdCBpcyBlbXB0eSwgb3IgdGhlIHNtYWxsZXN0IGVudHJ5ICovCi0JcCA9ICZsci0+bGluZV9saXN0OwotZm91bmQ6Ci0JcHJfZGVidWcoIkRlYnVnOiBhZGQgYSBsaW5lICV1XG4iLCBsaW5lKTsKLQlsbiA9IHphbGxvYyhzaXplb2Yoc3RydWN0IGxpbmVfbm9kZSkpOwotCURJRV9JRihsbiA9PSBOVUxMKTsKLQlsbi0+bGluZSA9IGxpbmU7Ci0JSU5JVF9MSVNUX0hFQUQoJmxuLT5saXN0KTsKLQlsaXN0X2FkZCgmbG4tPmxpc3QsIHApOwotfQotCiAvKiBGaW5kIGxpbmUgcmFuZ2UgZnJvbSBpdHMgbGluZSBudW1iZXIgKi8KLXN0YXRpYyB2b2lkIGZpbmRfbGluZV9yYW5nZV9ieV9saW5lKHN0cnVjdCBsaW5lX2ZpbmRlciAqbGYpCitzdGF0aWMgdm9pZCBmaW5kX2xpbmVfcmFuZ2VfYnlfbGluZShEd2FyZl9EaWUgKnNwX2RpZSwgc3RydWN0IGxpbmVfZmluZGVyICpsZikKIHsKLQlEd2FyZl9TaWduZWQgY250LCBpOwotCUR3YXJmX0xpbmUgKmxpbmVzOwotCUR3YXJmX1Vuc2lnbmVkIGxpbmVubyA9IDA7Ci0JRHdhcmZfVW5zaWduZWQgZm5vOworCUR3YXJmX0xpbmVzICpsaW5lczsKKwlEd2FyZl9MaW5lICpsaW5lOworCXNpemVfdCBubGluZXMsIGk7CiAJRHdhcmZfQWRkciBhZGRyOworCWludCBsaW5lbm87CiAJaW50IHJldDsKKwljb25zdCBjaGFyICpzcmM7CisJRHdhcmZfRGllIGRpZV9tZW07CiAKLQlyZXQgPSBkd2FyZl9zcmNsaW5lcyhsZi0+Y3VfZGllLCAmbGluZXMsICZjbnQsICZfX2R3X2Vycm9yKTsKLQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJbGluZV9saXN0X19pbml0KCZsZi0+bHItPmxpbmVfbGlzdCk7CisJcmV0ID0gZHdhcmZfZ2V0c3JjbGluZXMoJmxmLT5jdV9kaWUsICZsaW5lcywgJm5saW5lcyk7CisJRElFX0lGKHJldCAhPSAwKTsKIAotCWZvciAoaSA9IDA7IGkgPCBjbnQ7IGkrKykgewotCQlyZXQgPSBkd2FyZl9saW5lX3NyY2ZpbGVubyhsaW5lc1tpXSwgJmZubywgJl9fZHdfZXJyb3IpOwotCQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7Ci0JCWlmIChmbm8gIT0gbGYtPmZubykKLQkJCWNvbnRpbnVlOwotCi0JCXJldCA9IGR3YXJmX2xpbmVubyhsaW5lc1tpXSwgJmxpbmVubywgJl9fZHdfZXJyb3IpOwotCQlESUVfSUYocmV0ICE9IERXX0RMVl9PSyk7CisJZm9yIChpID0gMDsgaSA8IG5saW5lczsgaSsrKSB7CisJCWxpbmUgPSBkd2FyZl9vbmVzcmNsaW5lKGxpbmVzLCBpKTsKKwkJcmV0ID0gZHdhcmZfbGluZW5vKGxpbmUsICZsaW5lbm8pOworCQlESUVfSUYocmV0ICE9IDApOwogCQlpZiAobGYtPmxub19zID4gbGluZW5vIHx8IGxmLT5sbm9fZSA8IGxpbmVubykKIAkJCWNvbnRpbnVlOwogCi0JCS8qIEZpbHRlciBsaW5lIGluIHRoZSBmdW5jdGlvbiBhZGRyZXNzIHJhbmdlICovCi0JCWlmIChsZi0+YWRkcl9zICYmIGxmLT5hZGRyX2UpIHsKLQkJCXJldCA9IGR3YXJmX2xpbmVhZGRyKGxpbmVzW2ldLCAmYWRkciwgJl9fZHdfZXJyb3IpOwotCQkJRElFX0lGKHJldCAhPSBEV19ETFZfT0spOwotCQkJaWYgKGxmLT5hZGRyX3MgPiBhZGRyIHx8IGxmLT5hZGRyX2UgPD0gYWRkcikKKwkJaWYgKHNwX2RpZSkgeworCQkJLyogQWRkcmVzcyBmaWx0ZXJpbmcgMTogZG9lcyBzcF9kaWUgaW5jbHVkZSBhZGRyPyAqLworCQkJcmV0ID0gZHdhcmZfbGluZWFkZHIobGluZSwgJmFkZHIpOworCQkJRElFX0lGKHJldCAhPSAwKTsKKwkJCWlmICghZHdhcmZfaGFzcGMoc3BfZGllLCBhZGRyKSkKKwkJCQljb250aW51ZTsKKworCQkJLyogQWRkcmVzcyBmaWx0ZXJpbmcgMjogTm8gY2hpbGQgaW5jbHVkZSBhZGRyPyAqLworCQkJaWYgKGRpZV9nZXRfaW5saW5lZnVuYyhzcF9kaWUsIGFkZHIsICZkaWVfbWVtKSkKIAkJCQljb250aW51ZTsKIAkJfQotCQlsaW5lX3JhbmdlX2FkZF9saW5lKGxmLT5sciwgKHVuc2lnbmVkIGludClsaW5lbm8pOworCisJCS8qIFRPRE86IEdldCBmaWxlbm8gZnJvbSBsaW5lLCBidXQgaG93PyAqLworCQlzcmMgPSBkd2FyZl9saW5lc3JjKGxpbmUsIE5VTEwsIE5VTEwpOworCQlpZiAoc3RydGFpbGNtcChzcmMsIGxmLT5mbmFtZSkgIT0gMCkKKwkJCWNvbnRpbnVlOworCisJCS8qIENvcHkgcmVhbCBwYXRoICovCisJCWlmICghbGYtPmxyLT5wYXRoKQorCQkJbGYtPmxyLT5wYXRoID0gc3RyZHVwKHNyYyk7CisJCWxpbmVfbGlzdF9fYWRkX2xpbmUoJmxmLT5sci0+bGluZV9saXN0LCAodW5zaWduZWQgaW50KWxpbmVubyk7CiAJfQotCWR3YXJmX3NyY2xpbmVzX2RlYWxsb2MoX19kd19kZWJ1ZywgbGluZXMsIGNudCk7CisJLyogVXBkYXRlIHN0YXR1cyAqLwogCWlmICghbGlzdF9lbXB0eSgmbGYtPmxyLT5saW5lX2xpc3QpKQogCQlsZi0+Zm91bmQgPSAxOworCWVsc2UgeworCQlmcmVlKGxmLT5sci0+cGF0aCk7CisJCWxmLT5sci0+cGF0aCA9IE5VTEw7CisJfQorfQorCitzdGF0aWMgaW50IGxpbmVfcmFuZ2VfaW5saW5lX2NiKER3YXJmX0RpZSAqaW5fZGllLCB2b2lkICpkYXRhKQoreworCWZpbmRfbGluZV9yYW5nZV9ieV9saW5lKGluX2RpZSwgKHN0cnVjdCBsaW5lX2ZpbmRlciAqKWRhdGEpOworCXJldHVybiBEV0FSRl9DQl9BQk9SVDsJLyogTm8gbmVlZCB0byBmaW5kIG90aGVyIGluc3RhbmNlcyAqLwogfQogCiAvKiBTZWFyY2ggZnVuY3Rpb24gZnJvbSBmdW5jdGlvbiBuYW1lICovCi1zdGF0aWMgaW50IGxpbmVmdW5jX2NhbGxiYWNrKHN0cnVjdCBkaWVfbGluayAqZGxpbmssIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IGxpbmVfcmFuZ2Vfc2VhcmNoX2NiKER3YXJmX0RpZSAqc3BfZGllLCB2b2lkICpkYXRhKQogewogCXN0cnVjdCBsaW5lX2ZpbmRlciAqbGYgPSAoc3RydWN0IGxpbmVfZmluZGVyICopZGF0YTsKIAlzdHJ1Y3QgbGluZV9yYW5nZSAqbHIgPSBsZi0+bHI7Ci0JRHdhcmZfSGFsZiB0YWc7Ci0JaW50IHJldDsKIAotCXJldCA9IGR3YXJmX3RhZyhkbGluay0+ZGllLCAmdGFnLCAmX19kd19lcnJvcik7Ci0JRElFX0lGKHJldCA9PSBEV19ETFZfRVJST1IpOwotCWlmICh0YWcgPT0gRFdfVEFHX3N1YnByb2dyYW0gJiYKLQkgICAgZGllX2NvbXBhcmVfbmFtZShkbGluay0+ZGllLCBsci0+ZnVuY3Rpb24pID09IDApIHsKLQkJLyogR2V0IHRoZSBhZGRyZXNzIHJhbmdlIG9mIHRoaXMgZnVuY3Rpb24gKi8KLQkJcmV0ID0gZHdhcmZfaGlnaHBjKGRsaW5rLT5kaWUsICZsZi0+YWRkcl9lLCAmX19kd19lcnJvcik7Ci0JCWlmIChyZXQgPT0gRFdfRExWX09LKQotCQkJcmV0ID0gZHdhcmZfbG93cGMoZGxpbmstPmRpZSwgJmxmLT5hZGRyX3MsICZfX2R3X2Vycm9yKTsKLQkJRElFX0lGKHJldCA9PSBEV19ETFZfRVJST1IpOwotCQlpZiAocmV0ID09IERXX0RMVl9OT19FTlRSWSkgewotCQkJbGYtPmFkZHJfcyA9IDA7Ci0JCQlsZi0+YWRkcl9lID0gMDsKLQkJfQotCi0JCWxmLT5mbm8gPSBkaWVfZ2V0X2RlY2xfZmlsZShkbGluay0+ZGllKTsKLQkJbHItPm9mZnNldCA9IGRpZV9nZXRfZGVjbF9saW5lKGRsaW5rLT5kaWUpOzsKKwlpZiAoZHdhcmZfdGFnKHNwX2RpZSkgPT0gRFdfVEFHX3N1YnByb2dyYW0gJiYKKwkgICAgZGllX2NvbXBhcmVfbmFtZShzcF9kaWUsIGxyLT5mdW5jdGlvbikgPT0gMCkgeworCQlsZi0+Zm5hbWUgPSBkd2FyZl9kZWNsX2ZpbGUoc3BfZGllKTsKKwkJZHdhcmZfZGVjbF9saW5lKHNwX2RpZSwgJmxyLT5vZmZzZXQpOworCQlwcl9kZWJ1ZygiZm5hbWU6ICVzLCBsaW5lbm86JWRcbiIsIGxmLT5mbmFtZSwgbHItPm9mZnNldCk7CiAJCWxmLT5sbm9fcyA9IGxyLT5vZmZzZXQgKyBsci0+c3RhcnQ7CiAJCWlmICghbHItPmVuZCkKLQkJCWxmLT5sbm9fZSA9IChEd2FyZl9VbnNpZ25lZCktMTsKKwkJCWxmLT5sbm9fZSA9IElOVF9NQVg7CiAJCWVsc2UKIAkJCWxmLT5sbm9fZSA9IGxyLT5vZmZzZXQgKyBsci0+ZW5kOwogCQlsci0+c3RhcnQgPSBsZi0+bG5vX3M7CiAJCWxyLT5lbmQgPSBsZi0+bG5vX2U7Ci0JCWZpbmRfbGluZV9yYW5nZV9ieV9saW5lKGxmKTsKLQkJLyogSWYgd2UgZmluZCBhIHRhcmdldCBmdW5jdGlvbiwgdGhpcyBzaG91bGQgYmUgZW5kLiAqLwotCQlsZi0+Zm91bmQgPSAxOworCQlpZiAoZHdhcmZfZnVuY19pbmxpbmUoc3BfZGllKSkKKwkJCWR3YXJmX2Z1bmNfaW5saW5lX2luc3RhbmNlcyhzcF9kaWUsCisJCQkJCQkgICAgbGluZV9yYW5nZV9pbmxpbmVfY2IsIGxmKTsKKwkJZWxzZQorCQkJZmluZF9saW5lX3JhbmdlX2J5X2xpbmUoc3BfZGllLCBsZik7CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTg1Nyw1NSArNzc5LDU1IEBACiAKIHN0YXRpYyB2b2lkIGZpbmRfbGluZV9yYW5nZV9ieV9mdW5jKHN0cnVjdCBsaW5lX2ZpbmRlciAqbGYpCiB7Ci0Jc2VhcmNoX2RpZV9mcm9tX2NoaWxkcmVuKGxmLT5jdV9kaWUsIGxpbmVmdW5jX2NhbGxiYWNrLCBsZik7CisJZHdhcmZfZ2V0ZnVuY3MoJmxmLT5jdV9kaWUsIGxpbmVfcmFuZ2Vfc2VhcmNoX2NiLCBsZiwgMCk7CiB9CiAKIGludCBmaW5kX2xpbmVfcmFuZ2UoaW50IGZkLCBzdHJ1Y3QgbGluZV9yYW5nZSAqbHIpCiB7Ci0JRHdhcmZfSGFsZiBhZGRyX3NpemUgPSAwOwotCUR3YXJmX1Vuc2lnbmVkIG5leHRfY3VoID0gMDsKKwlzdHJ1Y3QgbGluZV9maW5kZXIgbGYgPSB7LmxyID0gbHIsIC5mb3VuZCA9IDB9OwogCWludCByZXQ7Ci0Jc3RydWN0IGxpbmVfZmluZGVyIGxmID0gey5sciA9IGxyfTsKKwlEd2FyZl9PZmYgb2ZmID0gMCwgbm9mZjsKKwlzaXplX3QgY3VobDsKKwlEd2FyZl9EaWUgKmRpZXA7CisJRHdhcmYgKmRiZzsKIAotCXJldCA9IGR3YXJmX2luaXQoZmQsIERXX0RMQ19SRUFELCAwLCAwLCAmX19kd19kZWJ1ZywgJl9fZHdfZXJyb3IpOwotCWlmIChyZXQgIT0gRFdfRExWX09LKQorCWRiZyA9IGR3YXJmX2JlZ2luKGZkLCBEV0FSRl9DX1JFQUQpOworCWlmICghZGJnKQogCQlyZXR1cm4gLUVOT0VOVDsKIAorCS8qIExvb3Agb24gQ1VzIChDb21waWxhdGlvbiBVbml0KSAqLwogCXdoaWxlICghbGYuZm91bmQpIHsKLQkJLyogU2VhcmNoIENVIChDb21waWxhdGlvbiBVbml0KSAqLwotCQlyZXQgPSBkd2FyZl9uZXh0X2N1X2hlYWRlcihfX2R3X2RlYnVnLCBOVUxMLCBOVUxMLCBOVUxMLAotCQkJJmFkZHJfc2l6ZSwgJm5leHRfY3VoLCAmX19kd19lcnJvcik7Ci0JCURJRV9JRihyZXQgPT0gRFdfRExWX0VSUk9SKTsKLQkJaWYgKHJldCA9PSBEV19ETFZfTk9fRU5UUlkpCisJCXJldCA9IGR3YXJmX25leHRjdShkYmcsIG9mZiwgJm5vZmYsICZjdWhsLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJaWYgKHJldCAhPSAwKQogCQkJYnJlYWs7CiAKIAkJLyogR2V0IHRoZSBESUUoRGVidWdnaW5nIEluZm9ybWF0aW9uIEVudHJ5KSBvZiB0aGlzIENVICovCi0JCXJldCA9IGR3YXJmX3NpYmxpbmdvZihfX2R3X2RlYnVnLCAwLCAmbGYuY3VfZGllLCAmX19kd19lcnJvcik7Ci0JCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKwkJZGllcCA9IGR3YXJmX29mZmRpZShkYmcsIG9mZiArIGN1aGwsICZsZi5jdV9kaWUpOworCQlpZiAoIWRpZXApCisJCQljb250aW51ZTsKIAogCQkvKiBDaGVjayBpZiB0YXJnZXQgZmlsZSBpcyBpbmNsdWRlZC4gKi8KIAkJaWYgKGxyLT5maWxlKQotCQkJbGYuZm5vID0gY3VfZmluZF9maWxlbm8obGYuY3VfZGllLCBsci0+ZmlsZSk7CisJCQlsZi5mbmFtZSA9IGN1X2ZpbmRfcmVhbHBhdGgoJmxmLmN1X2RpZSwgbHItPmZpbGUpOworCQllbHNlCisJCQlsZi5mbmFtZSA9IDA7CiAKLQkJaWYgKCFsci0+ZmlsZSB8fCBsZi5mbm8pIHsKKwkJaWYgKCFsci0+ZmlsZSB8fCBsZi5mbmFtZSkgewogCQkJaWYgKGxyLT5mdW5jdGlvbikKIAkJCQlmaW5kX2xpbmVfcmFuZ2VfYnlfZnVuYygmbGYpOwogCQkJZWxzZSB7CiAJCQkJbGYubG5vX3MgPSBsci0+c3RhcnQ7CiAJCQkJaWYgKCFsci0+ZW5kKQotCQkJCQlsZi5sbm9fZSA9IChEd2FyZl9VbnNpZ25lZCktMTsKKwkJCQkJbGYubG5vX2UgPSBJTlRfTUFYOwogCQkJCWVsc2UKIAkJCQkJbGYubG5vX2UgPSBsci0+ZW5kOwotCQkJCWZpbmRfbGluZV9yYW5nZV9ieV9saW5lKCZsZik7CisJCQkJZmluZF9saW5lX3JhbmdlX2J5X2xpbmUoTlVMTCwgJmxmKTsKIAkJCX0KLQkJCS8qIEdldCB0aGUgcmVhbCBmaWxlIHBhdGggKi8KLQkJCWlmIChsZi5mb3VuZCkKLQkJCQljdV9nZXRfZmlsZW5hbWUobGYuY3VfZGllLCBsZi5mbm8sICZsci0+cGF0aCk7CiAJCX0KLQkJZHdhcmZfZGVhbGxvYyhfX2R3X2RlYnVnLCBsZi5jdV9kaWUsIERXX0RMQV9ESUUpOworCQlvZmYgPSBub2ZmOwogCX0KLQlyZXQgPSBkd2FyZl9maW5pc2goX19kd19kZWJ1ZywgJl9fZHdfZXJyb3IpOwotCURJRV9JRihyZXQgIT0gRFdfRExWX09LKTsKKwlwcl9kZWJ1ZygicGF0aDogJWx4XG4iLCAodW5zaWduZWQgbG9uZylsci0+cGF0aCk7CisJZHdhcmZfZW5kKGRiZyk7CiAJcmV0dXJuIGxmLmZvdW5kOwogfQogCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmggYi90b29scy9wZXJmL3V0aWwvcHJvYmUtZmluZGVyLmgKaW5kZXggOTcyYjM4Ni4uZDFhNjUxNyAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL3Byb2JlLWZpbmRlci5oCisrKyBiL3Rvb2xzL3BlcmYvdXRpbC9wcm9iZS1maW5kZXIuaApAQCAtMSw2ICsxLDcgQEAKICNpZm5kZWYgX1BST0JFX0ZJTkRFUl9ICiAjZGVmaW5lIF9QUk9CRV9GSU5ERVJfSAogCisjaW5jbHVkZSA8c3RkYm9vbC5oPgogI2luY2x1ZGUgInV0aWwuaCIKIAogI2RlZmluZSBNQVhfUEFUSF9MRU4JCSAyNTYKQEAgLTIwLDYgKzIxLDcgQEAKIAkvKiBJbnB1dHMgKi8KIAljaGFyCQkJKmZpbGU7CQkJLyogRmlsZSBuYW1lICovCiAJaW50CQkJbGluZTsJCQkvKiBMaW5lIG51bWJlciAqLworCWNoYXIJCQkqbGF6eV9saW5lOwkJLyogTGF6eSBsaW5lIHBhdHRlcm4gKi8KIAogCWNoYXIJCQkqZnVuY3Rpb247CQkvKiBGdW5jdGlvbiBuYW1lICovCiAJaW50CQkJb2Zmc2V0OwkJCS8qIE9mZnNldCBieXRlcyAqLwpAQCAtNDYsNTMgKzQ4LDQ2IEBACiAJY2hhcgkJCSpmdW5jdGlvbjsJCS8qIEZ1bmN0aW9uIG5hbWUgKi8KIAl1bnNpZ25lZCBpbnQJCXN0YXJ0OwkJCS8qIFN0YXJ0IGxpbmUgbnVtYmVyICovCiAJdW5zaWduZWQgaW50CQllbmQ7CQkJLyogRW5kIGxpbmUgbnVtYmVyICovCi0JdW5zaWduZWQgaW50CQlvZmZzZXQ7CQkJLyogU3RhcnQgbGluZSBvZmZzZXQgKi8KKwlpbnQJCQlvZmZzZXQ7CQkJLyogU3RhcnQgbGluZSBvZmZzZXQgKi8KIAljaGFyCQkJKnBhdGg7CQkJLyogUmVhbCBwYXRoIG5hbWUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpbmVfbGlzdDsJCS8qIFZpc2libGUgbGluZXMgKi8KIH07CiAKLSNpZm5kZWYgTk9fTElCRFdBUkYKLWV4dGVybiBpbnQgZmluZF9wcm9iZXBvaW50KGludCBmZCwgc3RydWN0IHByb2JlX3BvaW50ICpwcCk7CisjaWZuZGVmIE5PX0RXQVJGX1NVUFBPUlQKK2V4dGVybiBpbnQgZmluZF9wcm9iZV9wb2ludChpbnQgZmQsIHN0cnVjdCBwcm9iZV9wb2ludCAqcHApOwogZXh0ZXJuIGludCBmaW5kX2xpbmVfcmFuZ2UoaW50IGZkLCBzdHJ1Y3QgbGluZV9yYW5nZSAqbHIpOwogCi0vKiBXb3JrYXJvdW5kIGZvciB1bmRlZmluZWQgX01JUFNfU1pMT05HIGJ1ZyBpbiBsaWJkd2FyZi5oOiAqLwotI2lmbmRlZiBfTUlQU19TWkxPTkcKLSMgZGVmaW5lIF9NSVBTX1NaTE9ORwkJMAotI2VuZGlmCi0KICNpbmNsdWRlIDxkd2FyZi5oPgotI2luY2x1ZGUgPGxpYmR3YXJmLmg+CisjaW5jbHVkZSA8bGliZHcuaD4KIAogc3RydWN0IHByb2JlX2ZpbmRlciB7Ci0Jc3RydWN0IHByb2JlX3BvaW50CSpwcDsJCQkvKiBUYXJnZXQgcHJvYmUgcG9pbnQgKi8KKwlzdHJ1Y3QgcHJvYmVfcG9pbnQJKnBwOwkJLyogVGFyZ2V0IHByb2JlIHBvaW50ICovCiAKIAkvKiBGb3IgZnVuY3Rpb24gc2VhcmNoaW5nICovCi0JRHdhcmZfQWRkcgkJYWRkcjsJCQkvKiBBZGRyZXNzICovCi0JRHdhcmZfVW5zaWduZWQJCWZubzsJCQkvKiBGaWxlIG51bWJlciAqLwotCUR3YXJmX1Vuc2lnbmVkCQlsbm87CQkJLyogTGluZSBudW1iZXIgKi8KLQlEd2FyZl9PZmYJCWlubF9vZmZzOwkJLyogSW5saW5lIG9mZnNldCAqLwotCUR3YXJmX0RpZQkJY3VfZGllOwkJCS8qIEN1cnJlbnQgQ1UgKi8KKwlEd2FyZl9BZGRyCQlhZGRyOwkJLyogQWRkcmVzcyAqLworCWNvbnN0IGNoYXIJCSpmbmFtZTsJCS8qIEZpbGUgbmFtZSAqLworCWludAkJCWxubzsJCS8qIExpbmUgbnVtYmVyICovCisJRHdhcmZfRGllCQljdV9kaWU7CQkvKiBDdXJyZW50IENVICovCiAKIAkvKiBGb3IgdmFyaWFibGUgc2VhcmNoaW5nICovCi0JRHdhcmZfQWRkcgkJY3VfYmFzZTsJCS8qIEN1cnJlbnQgQ1UgYmFzZSBhZGRyZXNzICovCi0JRHdhcmZfTG9jZGVzYwkJZmJsb2M7CQkJLyogTG9jYXRpb24gb2YgQ3VycmVudCBGcmFtZSBCYXNlICovCi0JY29uc3QgY2hhcgkJKnZhcjsJCQkvKiBDdXJyZW50IHZhcmlhYmxlIG5hbWUgKi8KLQljaGFyCQkJKmJ1ZjsJCQkvKiBDdXJyZW50IG91dHB1dCBidWZmZXIgKi8KLQlpbnQJCQlsZW47CQkJLyogTGVuZ3RoIG9mIG91dHB1dCBidWZmZXIgKi8KKwlEd2FyZl9PcAkJKmZiX29wczsJLyogRnJhbWUgYmFzZSBhdHRyaWJ1dGUgKi8KKwlEd2FyZl9BZGRyCQljdV9iYXNlOwkvKiBDdXJyZW50IENVIGJhc2UgYWRkcmVzcyAqLworCWNvbnN0IGNoYXIJCSp2YXI7CQkvKiBDdXJyZW50IHZhcmlhYmxlIG5hbWUgKi8KKwljaGFyCQkJKmJ1ZjsJCS8qIEN1cnJlbnQgb3V0cHV0IGJ1ZmZlciAqLworCWludAkJCWxlbjsJCS8qIExlbmd0aCBvZiBvdXRwdXQgYnVmZmVyICovCisJc3RydWN0IGxpc3RfaGVhZAlsY2FjaGU7CQkvKiBMaW5lIGNhY2hlIGZvciBsYXp5IG1hdGNoICovCiB9OwogCiBzdHJ1Y3QgbGluZV9maW5kZXIgewotCXN0cnVjdCBsaW5lX3JhbmdlCSpscjsJCQkvKiBUYXJnZXQgbGluZSByYW5nZSAqLworCXN0cnVjdCBsaW5lX3JhbmdlCSpscjsJCS8qIFRhcmdldCBsaW5lIHJhbmdlICovCiAKLQlEd2FyZl9VbnNpZ25lZAkJZm5vOwkJCS8qIEZpbGUgbnVtYmVyICovCi0JRHdhcmZfVW5zaWduZWQJCWxub19zOwkJCS8qIFN0YXJ0IGxpbmUgbnVtYmVyICovCi0JRHdhcmZfVW5zaWduZWQJCWxub19lOwkJCS8qIEVuZCBsaW5lIG51bWJlciAqLwotCUR3YXJmX0FkZHIJCWFkZHJfczsJCQkvKiBTdGFydCBhZGRyZXNzICovCi0JRHdhcmZfQWRkcgkJYWRkcl9lOwkJCS8qIEVuZCBhZGRyZXNzICovCi0JRHdhcmZfRGllCQljdV9kaWU7CQkJLyogQ3VycmVudCBDVSAqLworCWNvbnN0IGNoYXIJCSpmbmFtZTsJCS8qIEZpbGUgbmFtZSAqLworCWludAkJCWxub19zOwkJLyogU3RhcnQgbGluZSBudW1iZXIgKi8KKwlpbnQJCQlsbm9fZTsJCS8qIEVuZCBsaW5lIG51bWJlciAqLworCUR3YXJmX0RpZQkJY3VfZGllOwkJLyogQ3VycmVudCBDVSAqLwogCWludAkJCWZvdW5kOwogfTsKIAotI2VuZGlmIC8qIE5PX0xJQkRXQVJGICovCisjZW5kaWYgLyogTk9fRFdBUkZfU1VQUE9SVCAqLwogCiAjZW5kaWYgLypfUFJPQkVfRklOREVSX0ggKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuYyBiL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuYwppbmRleCBjMzk3ZDRmLi5hMTc1OTQ5IDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3RyaW5nLmMKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N0cmluZy5jCkBAIC0yNjUsMjEgKzI2NSwyMSBAQAogCXJldHVybiBmYWxzZTsKIH0KIAotLyoqCi0gKiBzdHJnbG9ibWF0Y2ggLSBnbG9iIGV4cHJlc3Npb24gcGF0dGVybiBtYXRjaGluZwotICogQHN0cjogdGhlIHRhcmdldCBzdHJpbmcgdG8gbWF0Y2gKLSAqIEBwYXQ6IHRoZSBwYXR0ZXJuIHN0cmluZyB0byBtYXRjaAotICoKLSAqIFRoaXMgcmV0dXJucyB0cnVlIGlmIHRoZSBAc3RyIG1hdGNoZXMgQHBhdC4gQHBhdCBjYW4gaW5jbHVkZXMgd2lsZGNhcmRzCi0gKiAoJyonLCc/JykgYW5kIGNoYXJhY3RlciBjbGFzc2VzIChbQ0hBUlNdLCBjb21wbGVtZW50YXRpb24gYW5kIHJhbmdlcyBhcmUKLSAqIGFsc28gc3VwcG9ydGVkKS4gQWxzbywgdGhpcyBzdXBwb3J0cyBlc2NhcGUgY2hhcmFjdGVyICgnXCcpIHRvIHVzZSBzcGVjaWFsCi0gKiBjaGFyYWN0ZXJzIGFzIG5vcm1hbCBjaGFyYWN0ZXIuCi0gKgotICogTm90ZTogaWYgQHBhdCBzeW50YXggaXMgYnJva2VuLCB0aGlzIGFsd2F5cyByZXR1cm5zIGZhbHNlLgotICovCi1ib29sIHN0cmdsb2JtYXRjaChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCkKKy8qIEdsb2IvbGF6eSBwYXR0ZXJuIG1hdGNoaW5nICovCitzdGF0aWMgYm9vbCBfX21hdGNoX2dsb2IoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQsIGJvb2wgaWdub3JlX3NwYWNlKQogewogCXdoaWxlICgqc3RyICYmICpwYXQgJiYgKnBhdCAhPSAnKicpIHsKKwkJaWYgKGlnbm9yZV9zcGFjZSkgeworCQkJLyogSWdub3JlIHNwYWNlcyBmb3IgbGF6eSBtYXRjaGluZyAqLworCQkJaWYgKGlzc3BhY2UoKnN0cikpIHsKKwkJCQlzdHIrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChpc3NwYWNlKCpwYXQpKSB7CisJCQkJcGF0Kys7CisJCQkJY29udGludWU7CisJCQl9CisJCX0KIAkJaWYgKCpwYXQgPT0gJz8nKSB7CS8qIE1hdGNoZXMgYW55IHNpbmdsZSBjaGFyYWN0ZXIgKi8KIAkJCXN0cisrOwogCQkJcGF0Kys7CkBAIC0zMDgsMyArMzA4LDMyIEBACiAJcmV0dXJuICEqc3RyICYmICEqcGF0OwogfQogCisvKioKKyAqIHN0cmdsb2JtYXRjaCAtIGdsb2IgZXhwcmVzc2lvbiBwYXR0ZXJuIG1hdGNoaW5nCisgKiBAc3RyOiB0aGUgdGFyZ2V0IHN0cmluZyB0byBtYXRjaAorICogQHBhdDogdGhlIHBhdHRlcm4gc3RyaW5nIHRvIG1hdGNoCisgKgorICogVGhpcyByZXR1cm5zIHRydWUgaWYgdGhlIEBzdHIgbWF0Y2hlcyBAcGF0LiBAcGF0IGNhbiBpbmNsdWRlcyB3aWxkY2FyZHMKKyAqICgnKicsJz8nKSBhbmQgY2hhcmFjdGVyIGNsYXNzZXMgKFtDSEFSU10sIGNvbXBsZW1lbnRhdGlvbiBhbmQgcmFuZ2VzIGFyZQorICogYWxzbyBzdXBwb3J0ZWQpLiBBbHNvLCB0aGlzIHN1cHBvcnRzIGVzY2FwZSBjaGFyYWN0ZXIgKCdcJykgdG8gdXNlIHNwZWNpYWwKKyAqIGNoYXJhY3RlcnMgYXMgbm9ybWFsIGNoYXJhY3Rlci4KKyAqCisgKiBOb3RlOiBpZiBAcGF0IHN5bnRheCBpcyBicm9rZW4sIHRoaXMgYWx3YXlzIHJldHVybnMgZmFsc2UuCisgKi8KK2Jvb2wgc3RyZ2xvYm1hdGNoKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQoreworCXJldHVybiBfX21hdGNoX2dsb2Ioc3RyLCBwYXQsIGZhbHNlKTsKK30KKworLyoqCisgKiBzdHJsYXp5bWF0Y2ggLSBtYXRjaGluZyBwYXR0ZXJuIHN0cmluZ3MgbGF6aWx5IHdpdGggZ2xvYiBwYXR0ZXJuCisgKiBAc3RyOiB0aGUgdGFyZ2V0IHN0cmluZyB0byBtYXRjaAorICogQHBhdDogdGhlIHBhdHRlcm4gc3RyaW5nIHRvIG1hdGNoCisgKgorICogVGhpcyBpcyBzaW1pbGFyIHRvIHN0cmdsb2JtYXRjaCwgZXhjZXB0IHRoaXMgaWdub3JlcyBzcGFjZXMgaW4KKyAqIHRoZSB0YXJnZXQgc3RyaW5nLgorICovCitib29sIHN0cmxhenltYXRjaChjb25zdCBjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCkKK3sKKwlyZXR1cm4gX19tYXRjaF9nbG9iKHN0ciwgcGF0LCB0cnVlKTsKK30KZGlmZiAtLWdpdCBhL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuaCBiL3Rvb2xzL3BlcmYvdXRpbC9zdHJpbmcuaAppbmRleCAwMmVkZTU4Li41NDJlNDRkIDEwMDY0NAotLS0gYS90b29scy9wZXJmL3V0aWwvc3RyaW5nLmgKKysrIGIvdG9vbHMvcGVyZi91dGlsL3N0cmluZy5oCkBAIC0xMCw2ICsxMCw3IEBACiBjaGFyICoqYXJndl9zcGxpdChjb25zdCBjaGFyICpzdHIsIGludCAqYXJnY3ApOwogdm9pZCBhcmd2X2ZyZWUoY2hhciAqKmFyZ3YpOwogYm9vbCBzdHJnbG9ibWF0Y2goY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpOworYm9vbCBzdHJsYXp5bWF0Y2goY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpOwogCiAjZGVmaW5lIF9TVFIoeCkgI3gKICNkZWZpbmUgU1RSKHgpIF9TVFIoeCkKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL0tjb25maWcgYi92aXJ0L2t2bS9LY29uZmlnCmluZGV4IGRhZWNlMzYuLjdmMTE3OGYgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL0tjb25maWcKKysrIGIvdmlydC9rdm0vS2NvbmZpZwpAQCAtMTIsMyArMTIsNiBAQAogCiBjb25maWcgS1ZNX0FQSUNfQVJDSElURUNUVVJFCiAgICAgICAgYm9vbAorCitjb25maWcgS1ZNX01NSU8KKyAgICAgICBib29sCmRpZmYgLS1naXQgYS92aXJ0L2t2bS9hc3NpZ25lZC1kZXYuYyBiL3ZpcnQva3ZtL2Fzc2lnbmVkLWRldi5jCmluZGV4IGY3M2RlNjMuLjA1N2UyY2MgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2Fzc2lnbmVkLWRldi5jCisrKyBiL3ZpcnQva3ZtL2Fzc2lnbmVkLWRldi5jCkBAIC01MDQsMTIgKzUwNCwxMiBAQAogc3RhdGljIGludCBrdm1fdm1faW9jdGxfYXNzaWduX2RldmljZShzdHJ1Y3Qga3ZtICprdm0sCiAJCQkJICAgICAgc3RydWN0IGt2bV9hc3NpZ25lZF9wY2lfZGV2ICphc3NpZ25lZF9kZXYpCiB7Ci0JaW50IHIgPSAwOworCWludCByID0gMCwgaWR4OwogCXN0cnVjdCBrdm1fYXNzaWduZWRfZGV2X2tlcm5lbCAqbWF0Y2g7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAogCW11dGV4X2xvY2soJmt2bS0+bG9jayk7Ci0JZG93bl9yZWFkKCZrdm0tPnNsb3RzX2xvY2spOworCWlkeCA9IHNyY3VfcmVhZF9sb2NrKCZrdm0tPnNyY3UpOwogCiAJbWF0Y2ggPSBrdm1fZmluZF9hc3NpZ25lZF9kZXYoJmt2bS0+YXJjaC5hc3NpZ25lZF9kZXZfaGVhZCwKIAkJCQkgICAgICBhc3NpZ25lZF9kZXYtPmFzc2lnbmVkX2Rldl9pZCk7CkBAIC01MjYsNyArNTI2LDggQEAKIAkJciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KLQlkZXYgPSBwY2lfZ2V0X2J1c19hbmRfc2xvdChhc3NpZ25lZF9kZXYtPmJ1c25yLAorCWRldiA9IHBjaV9nZXRfZG9tYWluX2J1c19hbmRfc2xvdChhc3NpZ25lZF9kZXYtPnNlZ25yLAorCQkJCSAgIGFzc2lnbmVkX2Rldi0+YnVzbnIsCiAJCQkJICAgYXNzaWduZWRfZGV2LT5kZXZmbik7CiAJaWYgKCFkZXYpIHsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGhvc3QgZGV2aWNlIG5vdCBmb3VuZFxuIiwgX19mdW5jX18pOwpAQCAtNTQ4LDYgKzU0OSw3IEBACiAJcGNpX3Jlc2V0X2Z1bmN0aW9uKGRldik7CiAKIAltYXRjaC0+YXNzaWduZWRfZGV2X2lkID0gYXNzaWduZWRfZGV2LT5hc3NpZ25lZF9kZXZfaWQ7CisJbWF0Y2gtPmhvc3Rfc2VnbnIgPSBhc3NpZ25lZF9kZXYtPnNlZ25yOwogCW1hdGNoLT5ob3N0X2J1c25yID0gYXNzaWduZWRfZGV2LT5idXNucjsKIAltYXRjaC0+aG9zdF9kZXZmbiA9IGFzc2lnbmVkX2Rldi0+ZGV2Zm47CiAJbWF0Y2gtPmZsYWdzID0gYXNzaWduZWRfZGV2LT5mbGFnczsKQEAgLTU3Myw3ICs1NzUsNyBAQAogCX0KIAogb3V0OgotCXVwX3JlYWQoJmt2bS0+c2xvdHNfbG9jayk7CisJc3JjdV9yZWFkX3VubG9jaygma3ZtLT5zcmN1LCBpZHgpOwogCW11dGV4X3VubG9jaygma3ZtLT5sb2NrKTsKIAlyZXR1cm4gcjsKIG91dF9saXN0X2RlbDoKQEAgLTU4NSw3ICs1ODcsNyBAQAogCXBjaV9kZXZfcHV0KGRldik7CiBvdXRfZnJlZToKIAlrZnJlZShtYXRjaCk7Ci0JdXBfcmVhZCgma3ZtLT5zbG90c19sb2NrKTsKKwlzcmN1X3JlYWRfdW5sb2NrKCZrdm0tPnNyY3UsIGlkeCk7CiAJbXV0ZXhfdW5sb2NrKCZrdm0tPmxvY2spOwogCXJldHVybiByOwogfQpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vY29hbGVzY2VkX21taW8uYyBiL3ZpcnQva3ZtL2NvYWxlc2NlZF9tbWlvLmMKaW5kZXggMDRkNjljZC4uNTE2OTczNiAxMDA2NDQKLS0tIGEvdmlydC9rdm0vY29hbGVzY2VkX21taW8uYworKysgYi92aXJ0L2t2bS9jb2FsZXNjZWRfbW1pby5jCkBAIC05Miw0MSArOTIsNjQgQEAKIGludCBrdm1fY29hbGVzY2VkX21taW9faW5pdChzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb19kZXYgKmRldjsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlpbnQgcmV0OwogCisJcmV0ID0gLUVOT01FTTsKKwlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7CisJaWYgKCFwYWdlKQorCQlnb3RvIG91dF9lcnI7CisJa3ZtLT5jb2FsZXNjZWRfbW1pb19yaW5nID0gcGFnZV9hZGRyZXNzKHBhZ2UpOworCisJcmV0ID0gLUVOT01FTTsKIAlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiksIEdGUF9LRVJORUwpOwogCWlmICghZGV2KQotCQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBvdXRfZnJlZV9wYWdlOwogCXNwaW5fbG9ja19pbml0KCZkZXYtPmxvY2spOwogCWt2bV9pb2RldmljZV9pbml0KCZkZXYtPmRldiwgJmNvYWxlc2NlZF9tbWlvX29wcyk7CiAJZGV2LT5rdm0gPSBrdm07CiAJa3ZtLT5jb2FsZXNjZWRfbW1pb19kZXYgPSBkZXY7CiAKLQlyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sICZrdm0tPm1taW9fYnVzLCAmZGV2LT5kZXYpOworCW11dGV4X2xvY2soJmt2bS0+c2xvdHNfbG9jayk7CisJcmV0ID0ga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoa3ZtLCBLVk1fTU1JT19CVVMsICZkZXYtPmRldik7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPnNsb3RzX2xvY2spOwogCWlmIChyZXQgPCAwKQotCQlrZnJlZShkZXYpOworCQlnb3RvIG91dF9mcmVlX2RldjsKIAogCXJldHVybiByZXQ7CisKK291dF9mcmVlX2RldjoKKwlrZnJlZShkZXYpOworb3V0X2ZyZWVfcGFnZToKKwlfX2ZyZWVfcGFnZShwYWdlKTsKK291dF9lcnI6CisJcmV0dXJuIHJldDsKIH0KIAordm9pZCBrdm1fY29hbGVzY2VkX21taW9fZnJlZShzdHJ1Y3Qga3ZtICprdm0pCit7CisJaWYgKGt2bS0+Y29hbGVzY2VkX21taW9fcmluZykKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWt2bS0+Y29hbGVzY2VkX21taW9fcmluZyk7Cit9CisKIGludCBrdm1fdm1faW9jdGxfcmVnaXN0ZXJfY29hbGVzY2VkX21taW8oc3RydWN0IGt2bSAqa3ZtLAotCQkJCSAgICAgICAgIHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSAqem9uZSkKKwkJCQkJIHN0cnVjdCBrdm1fY29hbGVzY2VkX21taW9fem9uZSAqem9uZSkKIHsKIAlzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX2RldiAqZGV2ID0ga3ZtLT5jb2FsZXNjZWRfbW1pb19kZXY7CiAKIAlpZiAoZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JZG93bl93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKKwltdXRleF9sb2NrKCZrdm0tPnNsb3RzX2xvY2spOwogCWlmIChkZXYtPm5iX3pvbmVzID49IEtWTV9DT0FMRVNDRURfTU1JT19aT05FX01BWCkgewotCQl1cF93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZrdm0tPnNsb3RzX2xvY2spOwogCQlyZXR1cm4gLUVOT0JVRlM7CiAJfQogCiAJZGV2LT56b25lW2Rldi0+bmJfem9uZXNdID0gKnpvbmU7CiAJZGV2LT5uYl96b25lcysrOwogCi0JdXBfd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPnNsb3RzX2xvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xNDAsMTAgKzE2MywxMCBAQAogCWlmIChkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlkb3duX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOworCW11dGV4X2xvY2soJmt2bS0+c2xvdHNfbG9jayk7CiAKIAlpID0gZGV2LT5uYl96b25lczsKLQl3aGlsZShpKSB7CisJd2hpbGUgKGkpIHsKIAkJeiA9ICZkZXYtPnpvbmVbaSAtIDFdOwogCiAJCS8qIHVucmVnaXN0ZXIgYWxsIHpvbmVzCkBAIC0xNTgsNyArMTgxLDcgQEAKIAkJaS0tOwogCX0KIAotCXVwX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOworCW11dGV4X3VubG9jaygma3ZtLT5zbG90c19sb2NrKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vY29hbGVzY2VkX21taW8uaCBiL3ZpcnQva3ZtL2NvYWxlc2NlZF9tbWlvLmgKaW5kZXggNGI0OWYyNy4uOGE1OTU5ZSAxMDA2NDQKLS0tIGEvdmlydC9rdm0vY29hbGVzY2VkX21taW8uaAorKysgYi92aXJ0L2t2bS9jb2FsZXNjZWRfbW1pby5oCkBAIC0xLDMgKzEsNiBAQAorI2lmbmRlZiBfX0tWTV9DT0FMRVNDRURfTU1JT19IX18KKyNkZWZpbmUgX19LVk1fQ09BTEVTQ0VEX01NSU9fSF9fCisKIC8qCiAgKiBLVk0gY29hbGVzY2VkIE1NSU8KICAqCkBAIC03LDYgKzEwLDggQEAKICAqCiAgKi8KIAorI2lmZGVmIENPTkZJR19LVk1fTU1JTworCiAjZGVmaW5lIEtWTV9DT0FMRVNDRURfTU1JT19aT05FX01BWCAxMDAKIAogc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb19kZXYgewpAQCAtMTgsNyArMjMsMTcgQEAKIH07CiAKIGludCBrdm1fY29hbGVzY2VkX21taW9faW5pdChzdHJ1Y3Qga3ZtICprdm0pOwordm9pZCBrdm1fY29hbGVzY2VkX21taW9fZnJlZShzdHJ1Y3Qga3ZtICprdm0pOwogaW50IGt2bV92bV9pb2N0bF9yZWdpc3Rlcl9jb2FsZXNjZWRfbW1pbyhzdHJ1Y3Qga3ZtICprdm0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qga3ZtX2NvYWxlc2NlZF9tbWlvX3pvbmUgKnpvbmUpOwogaW50IGt2bV92bV9pb2N0bF91bnJlZ2lzdGVyX2NvYWxlc2NlZF9tbWlvKHN0cnVjdCBrdm0gKmt2bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb196b25lICp6b25lKTsKKworI2Vsc2UKKworc3RhdGljIGlubGluZSBpbnQga3ZtX2NvYWxlc2NlZF9tbWlvX2luaXQoc3RydWN0IGt2bSAqa3ZtKSB7IHJldHVybiAwOyB9CitzdGF0aWMgaW5saW5lIHZvaWQga3ZtX2NvYWxlc2NlZF9tbWlvX2ZyZWUoc3RydWN0IGt2bSAqa3ZtKSB7IH0KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvdmlydC9rdm0vZXZlbnRmZC5jIGIvdmlydC9rdm0vZXZlbnRmZC5jCmluZGV4IGE5ZDNmYzYuLjcwMTYzMTkgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2V2ZW50ZmQuYworKysgYi92aXJ0L2t2bS9ldmVudGZkLmMKQEAgLTQ3LDcgKzQ3LDYgQEAKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgIGdzaTsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgIGxpc3Q7CiAJcG9sbF90YWJsZSAgICAgICAgICAgICAgICBwdDsKLQl3YWl0X3F1ZXVlX2hlYWRfdCAgICAgICAgKndxaDsKIAl3YWl0X3F1ZXVlX3QgICAgICAgICAgICAgIHdhaXQ7CiAJc3RydWN0IHdvcmtfc3RydWN0ICAgICAgICBpbmplY3Q7CiAJc3RydWN0IHdvcmtfc3RydWN0ICAgICAgICBzaHV0ZG93bjsKQEAgLTE1OSw4ICsxNTgsNiBAQAogCQkJcG9sbF90YWJsZSAqcHQpCiB7CiAJc3RydWN0IF9pcnFmZCAqaXJxZmQgPSBjb250YWluZXJfb2YocHQsIHN0cnVjdCBfaXJxZmQsIHB0KTsKLQotCWlycWZkLT53cWggPSB3cWg7CiAJYWRkX3dhaXRfcXVldWUod3FoLCAmaXJxZmQtPndhaXQpOwogfQogCkBAIC00NjMsNyArNDYwLDcgQEAKIGt2bV9hc3NpZ25faW9ldmVudGZkKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pb2V2ZW50ZmQgKmFyZ3MpCiB7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICBwaW8gPSBhcmdzLT5mbGFncyAmIEtWTV9JT0VWRU5URkRfRkxBR19QSU87Ci0Jc3RydWN0IGt2bV9pb19idXMgICAgICAgICpidXMgPSBwaW8gPyAma3ZtLT5waW9fYnVzIDogJmt2bS0+bW1pb19idXM7CisJZW51bSBrdm1fYnVzICAgICAgICAgICAgICBidXNfaWR4ID0gcGlvID8gS1ZNX1BJT19CVVMgOiBLVk1fTU1JT19CVVM7CiAJc3RydWN0IF9pb2V2ZW50ZmQgICAgICAgICpwOwogCXN0cnVjdCBldmVudGZkX2N0eCAgICAgICAqZXZlbnRmZDsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgIHJldDsKQEAgLTUwOCw3ICs1MDUsNyBAQAogCWVsc2UKIAkJcC0+d2lsZGNhcmQgPSB0cnVlOwogCi0JZG93bl93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKKwltdXRleF9sb2NrKCZrdm0tPnNsb3RzX2xvY2spOwogCiAJLyogVmVyaWZ5IHRoYXQgdGhlcmUgaXNudCBhIG1hdGNoIGFscmVhZHkgKi8KIAlpZiAoaW9ldmVudGZkX2NoZWNrX2NvbGxpc2lvbihrdm0sIHApKSB7CkBAIC01MTgsMTggKzUxNSwxOCBAQAogCiAJa3ZtX2lvZGV2aWNlX2luaXQoJnAtPmRldiwgJmlvZXZlbnRmZF9vcHMpOwogCi0JcmV0ID0gX19rdm1faW9fYnVzX3JlZ2lzdGVyX2RldihidXMsICZwLT5kZXYpOworCXJldCA9IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KGt2bSwgYnVzX2lkeCwgJnAtPmRldik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gdW5sb2NrX2ZhaWw7CiAKIAlsaXN0X2FkZF90YWlsKCZwLT5saXN0LCAma3ZtLT5pb2V2ZW50ZmRzKTsKIAotCXVwX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOworCW11dGV4X3VubG9jaygma3ZtLT5zbG90c19sb2NrKTsKIAogCXJldHVybiAwOwogCiB1bmxvY2tfZmFpbDoKLQl1cF93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKKwltdXRleF91bmxvY2soJmt2bS0+c2xvdHNfbG9jayk7CiAKIGZhaWw6CiAJa2ZyZWUocCk7CkBAIC01NDIsNyArNTM5LDcgQEAKIGt2bV9kZWFzc2lnbl9pb2V2ZW50ZmQoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lvZXZlbnRmZCAqYXJncykKIHsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgIHBpbyA9IGFyZ3MtPmZsYWdzICYgS1ZNX0lPRVZFTlRGRF9GTEFHX1BJTzsKLQlzdHJ1Y3Qga3ZtX2lvX2J1cyAgICAgICAgKmJ1cyA9IHBpbyA/ICZrdm0tPnBpb19idXMgOiAma3ZtLT5tbWlvX2J1czsKKwllbnVtIGt2bV9idXMgICAgICAgICAgICAgIGJ1c19pZHggPSBwaW8gPyBLVk1fUElPX0JVUyA6IEtWTV9NTUlPX0JVUzsKIAlzdHJ1Y3QgX2lvZXZlbnRmZCAgICAgICAgKnAsICp0bXA7CiAJc3RydWN0IGV2ZW50ZmRfY3R4ICAgICAgICpldmVudGZkOwogCWludCAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gLUVOT0VOVDsKQEAgLTU1MSw3ICs1NDgsNyBAQAogCWlmIChJU19FUlIoZXZlbnRmZCkpCiAJCXJldHVybiBQVFJfRVJSKGV2ZW50ZmQpOwogCi0JZG93bl93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKKwltdXRleF9sb2NrKCZrdm0tPnNsb3RzX2xvY2spOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHAsIHRtcCwgJmt2bS0+aW9ldmVudGZkcywgbGlzdCkgewogCQlib29sIHdpbGRjYXJkID0gIShhcmdzLT5mbGFncyAmIEtWTV9JT0VWRU5URkRfRkxBR19EQVRBTUFUQ0gpOwpAQCAtNTY1LDEzICs1NjIsMTMgQEAKIAkJaWYgKCFwLT53aWxkY2FyZCAmJiBwLT5kYXRhbWF0Y2ggIT0gYXJncy0+ZGF0YW1hdGNoKQogCQkJY29udGludWU7CiAKLQkJX19rdm1faW9fYnVzX3VucmVnaXN0ZXJfZGV2KGJ1cywgJnAtPmRldik7CisJCWt2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYoa3ZtLCBidXNfaWR4LCAmcC0+ZGV2KTsKIAkJaW9ldmVudGZkX3JlbGVhc2UocCk7CiAJCXJldCA9IDA7CiAJCWJyZWFrOwogCX0KIAotCXVwX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOworCW11dGV4X3VubG9jaygma3ZtLT5zbG90c19sb2NrKTsKIAogCWV2ZW50ZmRfY3R4X3B1dChldmVudGZkKTsKIApkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaW9hcGljLmMgYi92aXJ0L2t2bS9pb2FwaWMuYwppbmRleCAzOGEyZDIwLi4zZGIxNWE4IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9pb2FwaWMuYworKysgYi92aXJ0L2t2bS9pb2FwaWMuYwpAQCAtMTAwLDYgKzEwMCwxOSBAQAogCXJldHVybiBpbmplY3RlZDsKIH0KIAorc3RhdGljIHZvaWQgdXBkYXRlX2hhbmRsZWRfdmVjdG9ycyhzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljKQoreworCURFQ0xBUkVfQklUTUFQKGhhbmRsZWRfdmVjdG9ycywgMjU2KTsKKwlpbnQgaTsKKworCW1lbXNldChoYW5kbGVkX3ZlY3RvcnMsIDAsIHNpemVvZihoYW5kbGVkX3ZlY3RvcnMpKTsKKwlmb3IgKGkgPSAwOyBpIDwgSU9BUElDX05VTV9QSU5TOyArK2kpCisJCV9fc2V0X2JpdChpb2FwaWMtPnJlZGlydGJsW2ldLmZpZWxkcy52ZWN0b3IsIGhhbmRsZWRfdmVjdG9ycyk7CisJbWVtY3B5KGlvYXBpYy0+aGFuZGxlZF92ZWN0b3JzLCBoYW5kbGVkX3ZlY3RvcnMsCisJICAgICAgIHNpemVvZihoYW5kbGVkX3ZlY3RvcnMpKTsKKwlzbXBfd21iKCk7Cit9CisKIHN0YXRpYyB2b2lkIGlvYXBpY193cml0ZV9pbmRpcmVjdChzdHJ1Y3Qga3ZtX2lvYXBpYyAqaW9hcGljLCB1MzIgdmFsKQogewogCXVuc2lnbmVkIGluZGV4OwpAQCAtMTM0LDYgKzE0Nyw3IEBACiAJCQllLT5iaXRzIHw9ICh1MzIpIHZhbDsKIAkJCWUtPmZpZWxkcy5yZW1vdGVfaXJyID0gMDsKIAkJfQorCQl1cGRhdGVfaGFuZGxlZF92ZWN0b3JzKGlvYXBpYyk7CiAJCW1hc2tfYWZ0ZXIgPSBlLT5maWVsZHMubWFzazsKIAkJaWYgKG1hc2tfYmVmb3JlICE9IG1hc2tfYWZ0ZXIpCiAJCQlrdm1fZmlyZV9tYXNrX25vdGlmaWVycyhpb2FwaWMtPmt2bSwgaW5kZXgsIG1hc2tfYWZ0ZXIpOwpAQCAtMjQxLDYgKzI1NSw5IEBACiB7CiAJc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IGt2bS0+YXJjaC52aW9hcGljOwogCisJc21wX3JtYigpOworCWlmICghdGVzdF9iaXQodmVjdG9yLCBpb2FwaWMtPmhhbmRsZWRfdmVjdG9ycykpCisJCXJldHVybjsKIAltdXRleF9sb2NrKCZpb2FwaWMtPmxvY2spOwogCV9fa3ZtX2lvYXBpY191cGRhdGVfZW9pKGlvYXBpYywgdmVjdG9yLCB0cmlnZ2VyX21vZGUpOwogCW11dGV4X3VubG9jaygmaW9hcGljLT5sb2NrKTsKQEAgLTM1Miw2ICszNjksNyBAQAogCWlvYXBpYy0+aW9yZWdzZWwgPSAwOwogCWlvYXBpYy0+aXJyID0gMDsKIAlpb2FwaWMtPmlkID0gMDsKKwl1cGRhdGVfaGFuZGxlZF92ZWN0b3JzKGlvYXBpYyk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qga3ZtX2lvX2RldmljZV9vcHMgaW9hcGljX21taW9fb3BzID0gewpAQCAtMzcyLDEzICszOTAsMjggQEAKIAlrdm1faW9hcGljX3Jlc2V0KGlvYXBpYyk7CiAJa3ZtX2lvZGV2aWNlX2luaXQoJmlvYXBpYy0+ZGV2LCAmaW9hcGljX21taW9fb3BzKTsKIAlpb2FwaWMtPmt2bSA9IGt2bTsKLQlyZXQgPSBrdm1faW9fYnVzX3JlZ2lzdGVyX2Rldihrdm0sICZrdm0tPm1taW9fYnVzLCAmaW9hcGljLT5kZXYpOwotCWlmIChyZXQgPCAwKQorCW11dGV4X2xvY2soJmt2bS0+c2xvdHNfbG9jayk7CisJcmV0ID0ga3ZtX2lvX2J1c19yZWdpc3Rlcl9kZXYoa3ZtLCBLVk1fTU1JT19CVVMsICZpb2FwaWMtPmRldik7CisJbXV0ZXhfdW5sb2NrKCZrdm0tPnNsb3RzX2xvY2spOworCWlmIChyZXQgPCAwKSB7CisJCWt2bS0+YXJjaC52aW9hcGljID0gTlVMTDsKIAkJa2ZyZWUoaW9hcGljKTsKKwl9CiAKIAlyZXR1cm4gcmV0OwogfQogCit2b2lkIGt2bV9pb2FwaWNfZGVzdHJveShzdHJ1Y3Qga3ZtICprdm0pCit7CisJc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IGt2bS0+YXJjaC52aW9hcGljOworCisJaWYgKGlvYXBpYykgeworCQlrdm1faW9fYnVzX3VucmVnaXN0ZXJfZGV2KGt2bSwgS1ZNX01NSU9fQlVTLCAmaW9hcGljLT5kZXYpOworCQlrdm0tPmFyY2gudmlvYXBpYyA9IE5VTEw7CisJCWtmcmVlKGlvYXBpYyk7CisJfQorfQorCiBpbnQga3ZtX2dldF9pb2FwaWMoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX2lvYXBpY19zdGF0ZSAqc3RhdGUpCiB7CiAJc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyA9IGlvYXBpY19pcnFjaGlwKGt2bSk7CkBAIC0zOTksNiArNDMyLDcgQEAKIAogCW11dGV4X2xvY2soJmlvYXBpYy0+bG9jayk7CiAJbWVtY3B5KGlvYXBpYywgc3RhdGUsIHNpemVvZihzdHJ1Y3Qga3ZtX2lvYXBpY19zdGF0ZSkpOworCXVwZGF0ZV9oYW5kbGVkX3ZlY3RvcnMoaW9hcGljKTsKIAltdXRleF91bmxvY2soJmlvYXBpYy0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9pb2FwaWMuaCBiL3ZpcnQva3ZtL2lvYXBpYy5oCmluZGV4IDQxOWM0M2IuLjhhNzUxYjcgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2lvYXBpYy5oCisrKyBiL3ZpcnQva3ZtL2lvYXBpYy5oCkBAIC00Niw2ICs0Niw3IEBACiAJc3RydWN0IGt2bSAqa3ZtOwogCXZvaWQgKCphY2tfbm90aWZpZXIpKHZvaWQgKm9wYXF1ZSwgaW50IGlycSk7CiAJc3RydWN0IG11dGV4IGxvY2s7CisJREVDTEFSRV9CSVRNQVAoaGFuZGxlZF92ZWN0b3JzLCAyNTYpOwogfTsKIAogI2lmZGVmIERFQlVHCkBAIC03MSw2ICs3Miw3IEBACiBpbnQga3ZtX2FwaWNfY29tcGFyZV9wcmlvKHN0cnVjdCBrdm1fdmNwdSAqdmNwdTEsIHN0cnVjdCBrdm1fdmNwdSAqdmNwdTIpOwogdm9pZCBrdm1faW9hcGljX3VwZGF0ZV9lb2koc3RydWN0IGt2bSAqa3ZtLCBpbnQgdmVjdG9yLCBpbnQgdHJpZ2dlcl9tb2RlKTsKIGludCBrdm1faW9hcGljX2luaXQoc3RydWN0IGt2bSAqa3ZtKTsKK3ZvaWQga3ZtX2lvYXBpY19kZXN0cm95KHN0cnVjdCBrdm0gKmt2bSk7CiBpbnQga3ZtX2lvYXBpY19zZXRfaXJxKHN0cnVjdCBrdm1faW9hcGljICppb2FwaWMsIGludCBpcnEsIGludCBsZXZlbCk7CiB2b2lkIGt2bV9pb2FwaWNfcmVzZXQoc3RydWN0IGt2bV9pb2FwaWMgKmlvYXBpYyk7CiBpbnQga3ZtX2lycV9kZWxpdmVyeV90b19hcGljKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9sYXBpYyAqc3JjLApkaWZmIC0tZ2l0IGEvdmlydC9rdm0vaW9tbXUuYyBiL3ZpcnQva3ZtL2lvbW11LmMKaW5kZXggMTUxNDc1OC4uODBmZDNhZCAxMDA2NDQKLS0tIGEvdmlydC9rdm0vaW9tbXUuYworKysgYi92aXJ0L2t2bS9pb21tdS5jCkBAIC0zMiwxMCArMzIsMTAgQEAKIHN0YXRpYyB2b2lkIGt2bV9pb21tdV9wdXRfcGFnZXMoc3RydWN0IGt2bSAqa3ZtLAogCQkJCWdmbl90IGJhc2VfZ2ZuLCB1bnNpZ25lZCBsb25nIG5wYWdlcyk7CiAKLWludCBrdm1faW9tbXVfbWFwX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwKLQkJCWdmbl90IGJhc2VfZ2ZuLCB1bnNpZ25lZCBsb25nIG5wYWdlcykKK2ludCBrdm1faW9tbXVfbWFwX3BhZ2VzKHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCkKIHsKLQlnZm5fdCBnZm4gPSBiYXNlX2dmbjsKKwlnZm5fdCBnZm4gPSBzbG90LT5iYXNlX2dmbjsKKwl1bnNpZ25lZCBsb25nIG5wYWdlcyA9IHNsb3QtPm5wYWdlczsKIAlwZm5fdCBwZm47CiAJaW50IGksIHIgPSAwOwogCXN0cnVjdCBpb21tdV9kb21haW4gKmRvbWFpbiA9IGt2bS0+YXJjaC5pb21tdV9kb21haW47CkBAIC01NCw3ICs1NCw3IEBACiAJCWlmIChpb21tdV9pb3ZhX3RvX3BoeXMoZG9tYWluLCBnZm5fdG9fZ3BhKGdmbikpKQogCQkJY29udGludWU7CiAKLQkJcGZuID0gZ2ZuX3RvX3Bmbihrdm0sIGdmbik7CisJCXBmbiA9IGdmbl90b19wZm5fbWVtc2xvdChrdm0sIHNsb3QsIGdmbik7CiAJCXIgPSBpb21tdV9tYXBfcmFuZ2UoZG9tYWluLAogCQkJCSAgICBnZm5fdG9fZ3BhKGdmbiksCiAJCQkJICAgIHBmbl90b19ocGEocGZuKSwKQEAgLTY5LDE3ICs2OSwxOSBAQAogCXJldHVybiAwOwogCiB1bm1hcF9wYWdlczoKLQlrdm1faW9tbXVfcHV0X3BhZ2VzKGt2bSwgYmFzZV9nZm4sIGkpOworCWt2bV9pb21tdV9wdXRfcGFnZXMoa3ZtLCBzbG90LT5iYXNlX2dmbiwgaSk7CiAJcmV0dXJuIHI7CiB9CiAKIHN0YXRpYyBpbnQga3ZtX2lvbW11X21hcF9tZW1zbG90cyhzdHJ1Y3Qga3ZtICprdm0pCiB7CiAJaW50IGksIHIgPSAwOworCXN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzOwogCi0JZm9yIChpID0gMDsgaSA8IGt2bS0+bm1lbXNsb3RzOyBpKyspIHsKLQkJciA9IGt2bV9pb21tdV9tYXBfcGFnZXMoa3ZtLCBrdm0tPm1lbXNsb3RzW2ldLmJhc2VfZ2ZuLAotCQkJCQlrdm0tPm1lbXNsb3RzW2ldLm5wYWdlcyk7CisJc2xvdHMgPSByY3VfZGVyZWZlcmVuY2Uoa3ZtLT5tZW1zbG90cyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgc2xvdHMtPm5tZW1zbG90czsgaSsrKSB7CisJCXIgPSBrdm1faW9tbXVfbWFwX3BhZ2VzKGt2bSwgJnNsb3RzLT5tZW1zbG90c1tpXSk7CiAJCWlmIChyKQogCQkJYnJlYWs7CiAJfQpAQCAtMTA0LDcgKzEwNiw4IEBACiAKIAlyID0gaW9tbXVfYXR0YWNoX2RldmljZShkb21haW4sICZwZGV2LT5kZXYpOwogCWlmIChyKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiYXNzaWduIGRldmljZSAleDoleC4leCBmYWlsZWQiLAorCQlwcmludGsoS0VSTl9FUlIgImFzc2lnbiBkZXZpY2UgJXg6JXg6JXguJXggZmFpbGVkIiwKKwkJCXBjaV9kb21haW5fbnIocGRldi0+YnVzKSwKIAkJCXBkZXYtPmJ1cy0+bnVtYmVyLAogCQkJUENJX1NMT1QocGRldi0+ZGV2Zm4pLAogCQkJUENJX0ZVTkMocGRldi0+ZGV2Zm4pKTsKQEAgLTEyNSw3ICsxMjgsOCBAQAogCQkJZ290byBvdXRfdW5tYXA7CiAJfQogCi0JcHJpbnRrKEtFUk5fREVCVUcgImFzc2lnbiBkZXZpY2U6IGhvc3QgYmRmID0gJXg6JXg6JXhcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgImFzc2lnbiBkZXZpY2UgJXg6JXg6JXguJXhcbiIsCisJCWFzc2lnbmVkX2Rldi0+aG9zdF9zZWduciwKIAkJYXNzaWduZWRfZGV2LT5ob3N0X2J1c25yLAogCQlQQ0lfU0xPVChhc3NpZ25lZF9kZXYtPmhvc3RfZGV2Zm4pLAogCQlQQ0lfRlVOQyhhc3NpZ25lZF9kZXYtPmhvc3RfZGV2Zm4pKTsKQEAgLTE1Miw3ICsxNTYsOCBAQAogCiAJaW9tbXVfZGV0YWNoX2RldmljZShkb21haW4sICZwZGV2LT5kZXYpOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgImRlYXNzaWduIGRldmljZTogaG9zdCBiZGYgPSAleDoleDoleFxuIiwKKwlwcmludGsoS0VSTl9ERUJVRyAiZGVhc3NpZ24gZGV2aWNlICV4OiV4OiV4LiV4XG4iLAorCQlhc3NpZ25lZF9kZXYtPmhvc3Rfc2VnbnIsCiAJCWFzc2lnbmVkX2Rldi0+aG9zdF9idXNuciwKIAkJUENJX1NMT1QoYXNzaWduZWRfZGV2LT5ob3N0X2RldmZuKSwKIAkJUENJX0ZVTkMoYXNzaWduZWRfZGV2LT5ob3N0X2RldmZuKSk7CkBAIC0yMTAsMTAgKzIxNSwxMyBAQAogc3RhdGljIGludCBrdm1faW9tbXVfdW5tYXBfbWVtc2xvdHMoc3RydWN0IGt2bSAqa3ZtKQogewogCWludCBpOworCXN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzOwogCi0JZm9yIChpID0gMDsgaSA8IGt2bS0+bm1lbXNsb3RzOyBpKyspIHsKLQkJa3ZtX2lvbW11X3B1dF9wYWdlcyhrdm0sIGt2bS0+bWVtc2xvdHNbaV0uYmFzZV9nZm4sCi0JCQkJICAgIGt2bS0+bWVtc2xvdHNbaV0ubnBhZ2VzKTsKKwlzbG90cyA9IHJjdV9kZXJlZmVyZW5jZShrdm0tPm1lbXNsb3RzKTsKKworCWZvciAoaSA9IDA7IGkgPCBzbG90cy0+bm1lbXNsb3RzOyBpKyspIHsKKwkJa3ZtX2lvbW11X3B1dF9wYWdlcyhrdm0sIHNsb3RzLT5tZW1zbG90c1tpXS5iYXNlX2dmbiwKKwkJCQkgICAgc2xvdHMtPm1lbXNsb3RzW2ldLm5wYWdlcyk7CiAJfQogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS92aXJ0L2t2bS9rdm1fbWFpbi5jIGIvdmlydC9rdm0va3ZtX21haW4uYwppbmRleCBhOTQ0YmUzLi41NDhmOTI1IDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1fbWFpbi5jCisrKyBiL3ZpcnQva3ZtL2t2bV9tYWluLmMKQEAgLTQ0LDYgKzQ0LDggQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NyY3UuaD4KKyNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+CiAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC01MSw5ICs1Myw3IEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9iaXRvcHMvbGUuaD4KIAotI2lmZGVmIEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVAogI2luY2x1ZGUgImNvYWxlc2NlZF9tbWlvLmgiCi0jZW5kaWYKIAogI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTCiAjaW5jbHVkZSA8dHJhY2UvZXZlbnRzL2t2bS5oPgpAQCAtODYsNiArODYsOCBAQAogc3RhdGljIGludCBoYXJkd2FyZV9lbmFibGVfYWxsKHZvaWQpOwogc3RhdGljIHZvaWQgaGFyZHdhcmVfZGlzYWJsZV9hbGwodm9pZCk7CiAKK3N0YXRpYyB2b2lkIGt2bV9pb19idXNfZGVzdHJveShzdHJ1Y3Qga3ZtX2lvX2J1cyAqYnVzKTsKKwogc3RhdGljIGJvb2wga3ZtX3JlYm9vdGluZzsKIAogc3RhdGljIGJvb2wgbGFyZ2VwYWdlc19lbmFibGVkID0gdHJ1ZTsKQEAgLTEzNiw3ICsxMzgsNyBAQAogCiAJemFsbG9jX2NwdW1hc2tfdmFyKCZjcHVzLCBHRlBfQVRPTUlDKTsKIAotCXNwaW5fbG9jaygma3ZtLT5yZXF1ZXN0c19sb2NrKTsKKwlyYXdfc3Bpbl9sb2NrKCZrdm0tPnJlcXVlc3RzX2xvY2spOwogCW1lID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWt2bV9mb3JfZWFjaF92Y3B1KGksIHZjcHUsIGt2bSkgewogCQlpZiAodGVzdF9hbmRfc2V0X2JpdChyZXEsICZ2Y3B1LT5yZXF1ZXN0cykpCkBAIC0xNTEsNyArMTUzLDcgQEAKIAkJc21wX2NhbGxfZnVuY3Rpb25fbWFueShjcHVzLCBhY2tfZmx1c2gsIE5VTEwsIDEpOwogCWVsc2UKIAkJY2FsbGVkID0gZmFsc2U7Ci0Jc3Bpbl91bmxvY2soJmt2bS0+cmVxdWVzdHNfbG9jayk7CisJcmF3X3NwaW5fdW5sb2NrKCZrdm0tPnJlcXVlc3RzX2xvY2spOwogCWZyZWVfY3B1bWFza192YXIoY3B1cyk7CiAJcmV0dXJuIGNhbGxlZDsKIH0KQEAgLTIxNSw3ICsyMTcsNyBAQAogCQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlzdHJ1Y3Qga3ZtICprdm0gPSBtbXVfbm90aWZpZXJfdG9fa3ZtKG1uKTsKLQlpbnQgbmVlZF90bGJfZmx1c2g7CisJaW50IG5lZWRfdGxiX2ZsdXNoLCBpZHg7CiAKIAkvKgogCSAqIFdoZW4gLT5pbnZhbGlkYXRlX3BhZ2UgcnVucywgdGhlIGxpbnV4IHB0ZSBoYXMgYmVlbiB6YXBwZWQKQEAgLTIzNSwxMCArMjM3LDEyIEBACiAJICogcHRlIGFmdGVyIGt2bV91bm1hcF9odmEgcmV0dXJuZWQsIHdpdGhvdXQgbm90aWNpbmcgdGhlIHBhZ2UKIAkgKiBpcyBnb2luZyB0byBiZSBmcmVlZC4KIAkgKi8KKwlpZHggPSBzcmN1X3JlYWRfbG9jaygma3ZtLT5zcmN1KTsKIAlzcGluX2xvY2soJmt2bS0+bW11X2xvY2spOwogCWt2bS0+bW11X25vdGlmaWVyX3NlcSsrOwogCW5lZWRfdGxiX2ZsdXNoID0ga3ZtX3VubWFwX2h2YShrdm0sIGFkZHJlc3MpOwogCXNwaW5fdW5sb2NrKCZrdm0tPm1tdV9sb2NrKTsKKwlzcmN1X3JlYWRfdW5sb2NrKCZrdm0tPnNyY3UsIGlkeCk7CiAKIAkvKiB3ZSd2ZSB0byBmbHVzaCB0aGUgdGxiIGJlZm9yZSB0aGUgcGFnZXMgY2FuIGJlIGZyZWVkICovCiAJaWYgKG5lZWRfdGxiX2ZsdXNoKQpAQCAtMjUyLDExICsyNTYsMTQgQEAKIAkJCQkJcHRlX3QgcHRlKQogewogCXN0cnVjdCBrdm0gKmt2bSA9IG1tdV9ub3RpZmllcl90b19rdm0obW4pOworCWludCBpZHg7CiAKKwlpZHggPSBzcmN1X3JlYWRfbG9jaygma3ZtLT5zcmN1KTsKIAlzcGluX2xvY2soJmt2bS0+bW11X2xvY2spOwogCWt2bS0+bW11X25vdGlmaWVyX3NlcSsrOwogCWt2bV9zZXRfc3B0ZV9odmEoa3ZtLCBhZGRyZXNzLCBwdGUpOwogCXNwaW5fdW5sb2NrKCZrdm0tPm1tdV9sb2NrKTsKKwlzcmN1X3JlYWRfdW5sb2NrKCZrdm0tPnNyY3UsIGlkeCk7CiB9CiAKIHN0YXRpYyB2b2lkIGt2bV9tbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9zdGFydChzdHJ1Y3QgbW11X25vdGlmaWVyICptbiwKQEAgLTI2NSw4ICsyNzIsOSBAQAogCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgZW5kKQogewogCXN0cnVjdCBrdm0gKmt2bSA9IG1tdV9ub3RpZmllcl90b19rdm0obW4pOwotCWludCBuZWVkX3RsYl9mbHVzaCA9IDA7CisJaW50IG5lZWRfdGxiX2ZsdXNoID0gMCwgaWR4OwogCisJaWR4ID0gc3JjdV9yZWFkX2xvY2soJmt2bS0+c3JjdSk7CiAJc3Bpbl9sb2NrKCZrdm0tPm1tdV9sb2NrKTsKIAkvKgogCSAqIFRoZSBjb3VudCBpbmNyZWFzZSBtdXN0IGJlY29tZSB2aXNpYmxlIGF0IHVubG9jayB0aW1lIGFzIG5vCkBAIC0yNzcsNiArMjg1LDcgQEAKIAlmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0ICs9IFBBR0VfU0laRSkKIAkJbmVlZF90bGJfZmx1c2ggfD0ga3ZtX3VubWFwX2h2YShrdm0sIHN0YXJ0KTsKIAlzcGluX3VubG9jaygma3ZtLT5tbXVfbG9jayk7CisJc3JjdV9yZWFkX3VubG9jaygma3ZtLT5zcmN1LCBpZHgpOwogCiAJLyogd2UndmUgdG8gZmx1c2ggdGhlIHRsYiBiZWZvcmUgdGhlIHBhZ2VzIGNhbiBiZSBmcmVlZCAqLwogCWlmIChuZWVkX3RsYl9mbHVzaCkKQEAgLTMxNCwxMSArMzIzLDEzIEBACiAJCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlzdHJ1Y3Qga3ZtICprdm0gPSBtbXVfbm90aWZpZXJfdG9fa3ZtKG1uKTsKLQlpbnQgeW91bmc7CisJaW50IHlvdW5nLCBpZHg7CiAKKwlpZHggPSBzcmN1X3JlYWRfbG9jaygma3ZtLT5zcmN1KTsKIAlzcGluX2xvY2soJmt2bS0+bW11X2xvY2spOwogCXlvdW5nID0ga3ZtX2FnZV9odmEoa3ZtLCBhZGRyZXNzKTsKIAlzcGluX3VubG9jaygma3ZtLT5tbXVfbG9jayk7CisJc3JjdV9yZWFkX3VubG9jaygma3ZtLT5zcmN1LCBpZHgpOwogCiAJaWYgKHlvdW5nKQogCQlrdm1fZmx1c2hfcmVtb3RlX3RsYnMoa3ZtKTsKQEAgLTM0MSwxNSArMzUyLDI2IEBACiAJLmNoYW5nZV9wdGUJCT0ga3ZtX21tdV9ub3RpZmllcl9jaGFuZ2VfcHRlLAogCS5yZWxlYXNlCQk9IGt2bV9tbXVfbm90aWZpZXJfcmVsZWFzZSwKIH07CisKK3N0YXRpYyBpbnQga3ZtX2luaXRfbW11X25vdGlmaWVyKHN0cnVjdCBrdm0gKmt2bSkKK3sKKwlrdm0tPm1tdV9ub3RpZmllci5vcHMgPSAma3ZtX21tdV9ub3RpZmllcl9vcHM7CisJcmV0dXJuIG1tdV9ub3RpZmllcl9yZWdpc3Rlcigma3ZtLT5tbXVfbm90aWZpZXIsIGN1cnJlbnQtPm1tKTsKK30KKworI2Vsc2UgIC8qICEoQ09ORklHX01NVV9OT1RJRklFUiAmJiBLVk1fQVJDSF9XQU5UX01NVV9OT1RJRklFUikgKi8KKworc3RhdGljIGludCBrdm1faW5pdF9tbXVfbm90aWZpZXIoc3RydWN0IGt2bSAqa3ZtKQoreworCXJldHVybiAwOworfQorCiAjZW5kaWYgLyogQ09ORklHX01NVV9OT1RJRklFUiAmJiBLVk1fQVJDSF9XQU5UX01NVV9OT1RJRklFUiAqLwogCiBzdGF0aWMgc3RydWN0IGt2bSAqa3ZtX2NyZWF0ZV92bSh2b2lkKQogewotCWludCByID0gMDsKKwlpbnQgciA9IDAsIGk7CiAJc3RydWN0IGt2bSAqa3ZtID0ga3ZtX2FyY2hfY3JlYXRlX3ZtKCk7Ci0jaWZkZWYgS1ZNX0NPQUxFU0NFRF9NTUlPX1BBR0VfT0ZGU0VUCi0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0jZW5kaWYKIAogCWlmIChJU19FUlIoa3ZtKSkKIAkJZ290byBvdXQ7CkBAIC0zNjMsMzkgKzM4NSwzNSBAQAogCUlOSVRfSExJU1RfSEVBRCgma3ZtLT5pcnFfYWNrX25vdGlmaWVyX2xpc3QpOwogI2VuZGlmCiAKLSNpZmRlZiBLVk1fQ09BTEVTQ0VEX01NSU9fUEFHRV9PRkZTRVQKLQlwYWdlID0gYWxsb2NfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Ci0JaWYgKCFwYWdlKSB7Ci0JCXIgPSAtRU5PTUVNOworCXIgPSAtRU5PTUVNOworCWt2bS0+bWVtc2xvdHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX21lbXNsb3RzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFrdm0tPm1lbXNsb3RzKQogCQlnb3RvIG91dF9lcnI7Ci0JfQotCWt2bS0+Y29hbGVzY2VkX21taW9fcmluZyA9Ci0JCQkoc3RydWN0IGt2bV9jb2FsZXNjZWRfbW1pb19yaW5nICopcGFnZV9hZGRyZXNzKHBhZ2UpOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NTVVfTk9USUZJRVIpICYmIGRlZmluZWQoS1ZNX0FSQ0hfV0FOVF9NTVVfTk9USUZJRVIpCi0JewotCQlrdm0tPm1tdV9ub3RpZmllci5vcHMgPSAma3ZtX21tdV9ub3RpZmllcl9vcHM7Ci0JCXIgPSBtbXVfbm90aWZpZXJfcmVnaXN0ZXIoJmt2bS0+bW11X25vdGlmaWVyLCBjdXJyZW50LT5tbSk7Ci0JCWlmIChyKSB7Ci0jaWZkZWYgS1ZNX0NPQUxFU0NFRF9NTUlPX1BBR0VfT0ZGU0VUCi0JCQlwdXRfcGFnZShwYWdlKTsKLSNlbmRpZgorCWlmIChpbml0X3NyY3Vfc3RydWN0KCZrdm0tPnNyY3UpKQorCQlnb3RvIG91dF9lcnI7CisJZm9yIChpID0gMDsgaSA8IEtWTV9OUl9CVVNFUzsgaSsrKSB7CisJCWt2bS0+YnVzZXNbaV0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX2lvX2J1cyksCisJCQkJCUdGUF9LRVJORUwpOworCQlpZiAoIWt2bS0+YnVzZXNbaV0pIHsKKwkJCWNsZWFudXBfc3JjdV9zdHJ1Y3QoJmt2bS0+c3JjdSk7CiAJCQlnb3RvIG91dF9lcnI7CiAJCX0KIAl9Ci0jZW5kaWYKKworCXIgPSBrdm1faW5pdF9tbXVfbm90aWZpZXIoa3ZtKTsKKwlpZiAocikgeworCQljbGVhbnVwX3NyY3Vfc3RydWN0KCZrdm0tPnNyY3UpOworCQlnb3RvIG91dF9lcnI7CisJfQogCiAJa3ZtLT5tbSA9IGN1cnJlbnQtPm1tOwogCWF0b21pY19pbmMoJmt2bS0+bW0tPm1tX2NvdW50KTsKIAlzcGluX2xvY2tfaW5pdCgma3ZtLT5tbXVfbG9jayk7Ci0Jc3Bpbl9sb2NrX2luaXQoJmt2bS0+cmVxdWVzdHNfbG9jayk7Ci0Ja3ZtX2lvX2J1c19pbml0KCZrdm0tPnBpb19idXMpOworCXJhd19zcGluX2xvY2tfaW5pdCgma3ZtLT5yZXF1ZXN0c19sb2NrKTsKIAlrdm1fZXZlbnRmZF9pbml0KGt2bSk7CiAJbXV0ZXhfaW5pdCgma3ZtLT5sb2NrKTsKIAltdXRleF9pbml0KCZrdm0tPmlycV9sb2NrKTsKLQlrdm1faW9fYnVzX2luaXQoJmt2bS0+bW1pb19idXMpOwotCWluaXRfcndzZW0oJmt2bS0+c2xvdHNfbG9jayk7CisJbXV0ZXhfaW5pdCgma3ZtLT5zbG90c19sb2NrKTsKIAlhdG9taWNfc2V0KCZrdm0tPnVzZXJzX2NvdW50LCAxKTsKIAlzcGluX2xvY2soJmt2bV9sb2NrKTsKIAlsaXN0X2FkZCgma3ZtLT52bV9saXN0LCAmdm1fbGlzdCk7CkBAIC00MDYsMTIgKzQyNCwxMiBAQAogb3V0OgogCXJldHVybiBrdm07CiAKLSNpZiBkZWZpbmVkKEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVCkgfHwgXAotICAgIChkZWZpbmVkKENPTkZJR19NTVVfTk9USUZJRVIpICYmIGRlZmluZWQoS1ZNX0FSQ0hfV0FOVF9NTVVfTk9USUZJRVIpKQogb3V0X2VycjoKIAloYXJkd2FyZV9kaXNhYmxlX2FsbCgpOwotI2VuZGlmCiBvdXRfZXJyX25vZGlzYWJsZToKKwlmb3IgKGkgPSAwOyBpIDwgS1ZNX05SX0JVU0VTOyBpKyspCisJCWtmcmVlKGt2bS0+YnVzZXNbaV0pOworCWtmcmVlKGt2bS0+bWVtc2xvdHMpOwogCWtmcmVlKGt2bSk7CiAJcmV0dXJuIEVSUl9QVFIocik7CiB9CkBAIC00NDYsMTMgKzQ2NCwxNyBAQAogdm9pZCBrdm1fZnJlZV9waHlzbWVtKHN0cnVjdCBrdm0gKmt2bSkKIHsKIAlpbnQgaTsKKwlzdHJ1Y3Qga3ZtX21lbXNsb3RzICpzbG90cyA9IGt2bS0+bWVtc2xvdHM7CiAKLQlmb3IgKGkgPSAwOyBpIDwga3ZtLT5ubWVtc2xvdHM7ICsraSkKLQkJa3ZtX2ZyZWVfcGh5c21lbV9zbG90KCZrdm0tPm1lbXNsb3RzW2ldLCBOVUxMKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2xvdHMtPm5tZW1zbG90czsgKytpKQorCQlrdm1fZnJlZV9waHlzbWVtX3Nsb3QoJnNsb3RzLT5tZW1zbG90c1tpXSwgTlVMTCk7CisKKwlrZnJlZShrdm0tPm1lbXNsb3RzKTsKIH0KIAogc3RhdGljIHZvaWQga3ZtX2Rlc3Ryb3lfdm0oc3RydWN0IGt2bSAqa3ZtKQogeworCWludCBpOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0ga3ZtLT5tbTsKIAogCWt2bV9hcmNoX3N5bmNfZXZlbnRzKGt2bSk7CkBAIC00NjAsMTIgKzQ4Miw5IEBACiAJbGlzdF9kZWwoJmt2bS0+dm1fbGlzdCk7CiAJc3Bpbl91bmxvY2soJmt2bV9sb2NrKTsKIAlrdm1fZnJlZV9pcnFfcm91dGluZyhrdm0pOwotCWt2bV9pb19idXNfZGVzdHJveSgma3ZtLT5waW9fYnVzKTsKLQlrdm1faW9fYnVzX2Rlc3Ryb3koJmt2bS0+bW1pb19idXMpOwotI2lmZGVmIEtWTV9DT0FMRVNDRURfTU1JT19QQUdFX09GRlNFVAotCWlmIChrdm0tPmNvYWxlc2NlZF9tbWlvX3JpbmcgIT0gTlVMTCkKLQkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWt2bS0+Y29hbGVzY2VkX21taW9fcmluZyk7Ci0jZW5kaWYKKwlmb3IgKGkgPSAwOyBpIDwgS1ZNX05SX0JVU0VTOyBpKyspCisJCWt2bV9pb19idXNfZGVzdHJveShrdm0tPmJ1c2VzW2ldKTsKKwlrdm1fY29hbGVzY2VkX21taW9fZnJlZShrdm0pOwogI2lmIGRlZmluZWQoQ09ORklHX01NVV9OT1RJRklFUikgJiYgZGVmaW5lZChLVk1fQVJDSF9XQU5UX01NVV9OT1RJRklFUikKIAltbXVfbm90aWZpZXJfdW5yZWdpc3Rlcigma3ZtLT5tbXVfbm90aWZpZXIsIGt2bS0+bW0pOwogI2Vsc2UKQEAgLTUxMiwxMiArNTMxLDEzIEBACiAJCQkgICAgc3RydWN0IGt2bV91c2Vyc3BhY2VfbWVtb3J5X3JlZ2lvbiAqbWVtLAogCQkJICAgIGludCB1c2VyX2FsbG9jKQogewotCWludCByOworCWludCByLCBmbHVzaF9zaGFkb3cgPSAwOwogCWdmbl90IGJhc2VfZ2ZuOwogCXVuc2lnbmVkIGxvbmcgbnBhZ2VzOwogCXVuc2lnbmVkIGxvbmcgaTsKIAlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90OwogCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3Qgb2xkLCBuZXc7CisJc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMsICpvbGRfbWVtc2xvdHM7CiAKIAlyID0gLUVJTlZBTDsKIAkvKiBHZW5lcmFsIHNhbml0eSBjaGVja3MgKi8KQEAgLTUzMiw3ICs1NTIsNyBAQAogCWlmIChtZW0tPmd1ZXN0X3BoeXNfYWRkciArIG1lbS0+bWVtb3J5X3NpemUgPCBtZW0tPmd1ZXN0X3BoeXNfYWRkcikKIAkJZ290byBvdXQ7CiAKLQltZW1zbG90ID0gJmt2bS0+bWVtc2xvdHNbbWVtLT5zbG90XTsKKwltZW1zbG90ID0gJmt2bS0+bWVtc2xvdHMtPm1lbXNsb3RzW21lbS0+c2xvdF07CiAJYmFzZV9nZm4gPSBtZW0tPmd1ZXN0X3BoeXNfYWRkciA+PiBQQUdFX1NISUZUOwogCW5wYWdlcyA9IG1lbS0+bWVtb3J5X3NpemUgPj4gUEFHRV9TSElGVDsKIApAQCAtNTUzLDcgKzU3Myw3IEBACiAJLyogQ2hlY2sgZm9yIG92ZXJsYXBzICovCiAJciA9IC1FRVhJU1Q7CiAJZm9yIChpID0gMDsgaSA8IEtWTV9NRU1PUllfU0xPVFM7ICsraSkgewotCQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzID0gJmt2bS0+bWVtc2xvdHNbaV07CisJCXN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnMgPSAma3ZtLT5tZW1zbG90cy0+bWVtc2xvdHNbaV07CiAKIAkJaWYgKHMgPT0gbWVtc2xvdCB8fCAhcy0+bnBhZ2VzKQogCQkJY29udGludWU7CkBAIC01NzksMTUgKzU5OSw3IEBACiAJCW1lbXNldChuZXcucm1hcCwgMCwgbnBhZ2VzICogc2l6ZW9mKCpuZXcucm1hcCkpOwogCiAJCW5ldy51c2VyX2FsbG9jID0gdXNlcl9hbGxvYzsKLQkJLyoKLQkJICogaHZhX3RvX3JtbWFwKCkgc2VyaWFsemllcyB3aXRoIHRoZSBtbXVfbG9jayBhbmQgdG8gYmUKLQkJICogc2FmZSBpdCBoYXMgdG8gaWdub3JlIG1lbXNsb3RzIHdpdGggIXVzZXJfYWxsb2MgJiYKLQkJICogIXVzZXJzcGFjZV9hZGRyLgotCQkgKi8KLQkJaWYgKHVzZXJfYWxsb2MpCi0JCQluZXcudXNlcnNwYWNlX2FkZHIgPSBtZW0tPnVzZXJzcGFjZV9hZGRyOwotCQllbHNlCi0JCQluZXcudXNlcnNwYWNlX2FkZHIgPSAwOworCQluZXcudXNlcnNwYWNlX2FkZHIgPSBtZW0tPnVzZXJzcGFjZV9hZGRyOwogCX0KIAlpZiAoIW5wYWdlcykKIAkJZ290byBza2lwX2xwYWdlOwpAQCAtNjQyLDggKzY1NCw5IEBACiAJCWlmICghbmV3LmRpcnR5X2JpdG1hcCkKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCW1lbXNldChuZXcuZGlydHlfYml0bWFwLCAwLCBkaXJ0eV9ieXRlcyk7CisJCS8qIGRlc3Ryb3kgYW55IGxhcmdlcGFnZSBtYXBwaW5ncyBmb3IgZGlydHkgdHJhY2tpbmcgKi8KIAkJaWYgKG9sZC5ucGFnZXMpCi0JCQlrdm1fYXJjaF9mbHVzaF9zaGFkb3coa3ZtKTsKKwkJCWZsdXNoX3NoYWRvdyA9IDE7CiAJfQogI2Vsc2UgIC8qIG5vdCBkZWZpbmVkIENPTkZJR19TMzkwICovCiAJbmV3LnVzZXJfYWxsb2MgPSB1c2VyX2FsbG9jOwpAQCAtNjUxLDM2ICs2NjQsNzIgQEAKIAkJbmV3LnVzZXJzcGFjZV9hZGRyID0gbWVtLT51c2Vyc3BhY2VfYWRkcjsKICNlbmRpZiAvKiBub3QgZGVmaW5lZCBDT05GSUdfUzM5MCAqLwogCi0JaWYgKCFucGFnZXMpCisJaWYgKCFucGFnZXMpIHsKKwkJciA9IC1FTk9NRU07CisJCXNsb3RzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9tZW1zbG90cyksIEdGUF9LRVJORUwpOworCQlpZiAoIXNsb3RzKQorCQkJZ290byBvdXRfZnJlZTsKKwkJbWVtY3B5KHNsb3RzLCBrdm0tPm1lbXNsb3RzLCBzaXplb2Yoc3RydWN0IGt2bV9tZW1zbG90cykpOworCQlpZiAobWVtLT5zbG90ID49IHNsb3RzLT5ubWVtc2xvdHMpCisJCQlzbG90cy0+bm1lbXNsb3RzID0gbWVtLT5zbG90ICsgMTsKKwkJc2xvdHMtPm1lbXNsb3RzW21lbS0+c2xvdF0uZmxhZ3MgfD0gS1ZNX01FTVNMT1RfSU5WQUxJRDsKKworCQlvbGRfbWVtc2xvdHMgPSBrdm0tPm1lbXNsb3RzOworCQlyY3VfYXNzaWduX3BvaW50ZXIoa3ZtLT5tZW1zbG90cywgc2xvdHMpOworCQlzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgma3ZtLT5zcmN1KTsKKwkJLyogRnJvbSB0aGlzIHBvaW50IG5vIG5ldyBzaGFkb3cgcGFnZXMgcG9pbnRpbmcgdG8gYSBkZWxldGVkCisJCSAqIG1lbXNsb3Qgd2lsbCBiZSBjcmVhdGVkLgorCQkgKgorCQkgKiB2YWxpZGF0aW9uIG9mIHNwLT5nZm4gaGFwcGVucyBpbjoKKwkJICogCS0gZ2ZuX3RvX2h2YSAoa3ZtX3JlYWRfZ3Vlc3QsIGdmbl90b19wZm4pCisJCSAqIAktIGt2bV9pc192aXNpYmxlX2dmbiAobW11X2NoZWNrX3Jvb3RzKQorCQkgKi8KIAkJa3ZtX2FyY2hfZmx1c2hfc2hhZG93KGt2bSk7Ci0KLQlzcGluX2xvY2soJmt2bS0+bW11X2xvY2spOwotCWlmIChtZW0tPnNsb3QgPj0ga3ZtLT5ubWVtc2xvdHMpCi0JCWt2bS0+bm1lbXNsb3RzID0gbWVtLT5zbG90ICsgMTsKLQotCSptZW1zbG90ID0gbmV3OwotCXNwaW5fdW5sb2NrKCZrdm0tPm1tdV9sb2NrKTsKLQotCXIgPSBrdm1fYXJjaF9zZXRfbWVtb3J5X3JlZ2lvbihrdm0sIG1lbSwgb2xkLCB1c2VyX2FsbG9jKTsKLQlpZiAocikgewotCQlzcGluX2xvY2soJmt2bS0+bW11X2xvY2spOwotCQkqbWVtc2xvdCA9IG9sZDsKLQkJc3Bpbl91bmxvY2soJmt2bS0+bW11X2xvY2spOwotCQlnb3RvIG91dF9mcmVlOworCQlrZnJlZShvbGRfbWVtc2xvdHMpOwogCX0KIAotCWt2bV9mcmVlX3BoeXNtZW1fc2xvdCgmb2xkLCBucGFnZXMgPyAmbmV3IDogTlVMTCk7Ci0JLyogU2xvdCBkZWxldGlvbiBjYXNlOiB3ZSBoYXZlIHRvIHVwZGF0ZSB0aGUgY3VycmVudCBzbG90ICovCi0Jc3Bpbl9sb2NrKCZrdm0tPm1tdV9sb2NrKTsKLQlpZiAoIW5wYWdlcykKLQkJKm1lbXNsb3QgPSBvbGQ7Ci0Jc3Bpbl91bmxvY2soJmt2bS0+bW11X2xvY2spOworCXIgPSBrdm1fYXJjaF9wcmVwYXJlX21lbW9yeV9yZWdpb24oa3ZtLCAmbmV3LCBvbGQsIG1lbSwgdXNlcl9hbGxvYyk7CisJaWYgKHIpCisJCWdvdG8gb3V0X2ZyZWU7CisKICNpZmRlZiBDT05GSUdfRE1BUgogCS8qIG1hcCB0aGUgcGFnZXMgaW4gaW9tbXUgcGFnZSB0YWJsZSAqLwotCXIgPSBrdm1faW9tbXVfbWFwX3BhZ2VzKGt2bSwgYmFzZV9nZm4sIG5wYWdlcyk7Ci0JaWYgKHIpCi0JCWdvdG8gb3V0OworCWlmIChucGFnZXMpIHsKKwkJciA9IGt2bV9pb21tdV9tYXBfcGFnZXMoa3ZtLCAmbmV3KTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dF9mcmVlOworCX0KICNlbmRpZgorCisJciA9IC1FTk9NRU07CisJc2xvdHMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qga3ZtX21lbXNsb3RzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFzbG90cykKKwkJZ290byBvdXRfZnJlZTsKKwltZW1jcHkoc2xvdHMsIGt2bS0+bWVtc2xvdHMsIHNpemVvZihzdHJ1Y3Qga3ZtX21lbXNsb3RzKSk7CisJaWYgKG1lbS0+c2xvdCA+PSBzbG90cy0+bm1lbXNsb3RzKQorCQlzbG90cy0+bm1lbXNsb3RzID0gbWVtLT5zbG90ICsgMTsKKworCS8qIGFjdHVhbCBtZW1vcnkgaXMgZnJlZWQgdmlhIG9sZCBpbiBrdm1fZnJlZV9waHlzbWVtX3Nsb3QgYmVsb3cgKi8KKwlpZiAoIW5wYWdlcykgeworCQluZXcucm1hcCA9IE5VTEw7CisJCW5ldy5kaXJ0eV9iaXRtYXAgPSBOVUxMOworCQlmb3IgKGkgPSAwOyBpIDwgS1ZNX05SX1BBR0VfU0laRVMgLSAxOyArK2kpCisJCQluZXcubHBhZ2VfaW5mb1tpXSA9IE5VTEw7CisJfQorCisJc2xvdHMtPm1lbXNsb3RzW21lbS0+c2xvdF0gPSBuZXc7CisJb2xkX21lbXNsb3RzID0ga3ZtLT5tZW1zbG90czsKKwlyY3VfYXNzaWduX3BvaW50ZXIoa3ZtLT5tZW1zbG90cywgc2xvdHMpOworCXN5bmNocm9uaXplX3NyY3VfZXhwZWRpdGVkKCZrdm0tPnNyY3UpOworCisJa3ZtX2FyY2hfY29tbWl0X21lbW9yeV9yZWdpb24oa3ZtLCBtZW0sIG9sZCwgdXNlcl9hbGxvYyk7CisKKwlrdm1fZnJlZV9waHlzbWVtX3Nsb3QoJm9sZCwgJm5ldyk7CisJa2ZyZWUob2xkX21lbXNsb3RzKTsKKworCWlmIChmbHVzaF9zaGFkb3cpCisJCWt2bV9hcmNoX2ZsdXNoX3NoYWRvdyhrdm0pOworCiAJcmV0dXJuIDA7CiAKIG91dF9mcmVlOgpAQCAtNjk3LDkgKzc0Niw5IEBACiB7CiAJaW50IHI7CiAKLQlkb3duX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOworCW11dGV4X2xvY2soJmt2bS0+c2xvdHNfbG9jayk7CiAJciA9IF9fa3ZtX3NldF9tZW1vcnlfcmVnaW9uKGt2bSwgbWVtLCB1c2VyX2FsbG9jKTsKLQl1cF93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKKwltdXRleF91bmxvY2soJmt2bS0+c2xvdHNfbG9jayk7CiAJcmV0dXJuIHI7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrdm1fc2V0X21lbW9yeV9yZWdpb24pOwpAQCAtNzI2LDcgKzc3NSw3IEBACiAJaWYgKGxvZy0+c2xvdCA+PSBLVk1fTUVNT1JZX1NMT1RTKQogCQlnb3RvIG91dDsKIAotCW1lbXNsb3QgPSAma3ZtLT5tZW1zbG90c1tsb2ctPnNsb3RdOworCW1lbXNsb3QgPSAma3ZtLT5tZW1zbG90cy0+bWVtc2xvdHNbbG9nLT5zbG90XTsKIAlyID0gLUVOT0VOVDsKIAlpZiAoIW1lbXNsb3QtPmRpcnR5X2JpdG1hcCkKIAkJZ290byBvdXQ7CkBAIC03ODAsOSArODI5LDEwIEBACiBzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpnZm5fdG9fbWVtc2xvdF91bmFsaWFzZWQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCiB7CiAJaW50IGk7CisJc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMgPSByY3VfZGVyZWZlcmVuY2Uoa3ZtLT5tZW1zbG90cyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwga3ZtLT5ubWVtc2xvdHM7ICsraSkgewotCQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90ID0gJmt2bS0+bWVtc2xvdHNbaV07CisJZm9yIChpID0gMDsgaSA8IHNsb3RzLT5ubWVtc2xvdHM7ICsraSkgeworCQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90ID0gJnNsb3RzLT5tZW1zbG90c1tpXTsKIAogCQlpZiAoZ2ZuID49IG1lbXNsb3QtPmJhc2VfZ2ZuCiAJCSAgICAmJiBnZm4gPCBtZW1zbG90LT5iYXNlX2dmbiArIG1lbXNsb3QtPm5wYWdlcykKQEAgLTgwMSwxMCArODUxLDE0IEBACiBpbnQga3ZtX2lzX3Zpc2libGVfZ2ZuKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuKQogewogCWludCBpOworCXN0cnVjdCBrdm1fbWVtc2xvdHMgKnNsb3RzID0gcmN1X2RlcmVmZXJlbmNlKGt2bS0+bWVtc2xvdHMpOwogCi0JZ2ZuID0gdW5hbGlhc19nZm4oa3ZtLCBnZm4pOworCWdmbiA9IHVuYWxpYXNfZ2ZuX2luc3RhbnRpYXRpb24oa3ZtLCBnZm4pOwogCWZvciAoaSA9IDA7IGkgPCBLVk1fTUVNT1JZX1NMT1RTOyArK2kpIHsKLQkJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCA9ICZrdm0tPm1lbXNsb3RzW2ldOworCQlzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICptZW1zbG90ID0gJnNsb3RzLT5tZW1zbG90c1tpXTsKKworCQlpZiAobWVtc2xvdC0+ZmxhZ3MgJiBLVk1fTUVNU0xPVF9JTlZBTElEKQorCQkJY29udGludWU7CiAKIAkJaWYgKGdmbiA+PSBtZW1zbG90LT5iYXNlX2dmbgogCQkgICAgJiYgZ2ZuIDwgbWVtc2xvdC0+YmFzZV9nZm4gKyBtZW1zbG90LT5ucGFnZXMpCkBAIC04MTQsMzMgKzg2OCw2OCBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoa3ZtX2lzX3Zpc2libGVfZ2ZuKTsKIAordW5zaWduZWQgbG9uZyBrdm1faG9zdF9wYWdlX3NpemUoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisJdW5zaWduZWQgbG9uZyBhZGRyLCBzaXplOworCisJc2l6ZSA9IFBBR0VfU0laRTsKKworCWFkZHIgPSBnZm5fdG9faHZhKGt2bSwgZ2ZuKTsKKwlpZiAoa3ZtX2lzX2Vycm9yX2h2YShhZGRyKSkKKwkJcmV0dXJuIFBBR0VfU0laRTsKKworCWRvd25fcmVhZCgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwl2bWEgPSBmaW5kX3ZtYShjdXJyZW50LT5tbSwgYWRkcik7CisJaWYgKCF2bWEpCisJCWdvdG8gb3V0OworCisJc2l6ZSA9IHZtYV9rZXJuZWxfcGFnZXNpemUodm1hKTsKKworb3V0OgorCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CisKKwlyZXR1cm4gc2l6ZTsKK30KKworaW50IG1lbXNsb3RfaWQoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCit7CisJaW50IGk7CisJc3RydWN0IGt2bV9tZW1zbG90cyAqc2xvdHMgPSByY3VfZGVyZWZlcmVuY2Uoa3ZtLT5tZW1zbG90cyk7CisJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCA9IE5VTEw7CisKKwlnZm4gPSB1bmFsaWFzX2dmbihrdm0sIGdmbik7CisJZm9yIChpID0gMDsgaSA8IHNsb3RzLT5ubWVtc2xvdHM7ICsraSkgeworCQltZW1zbG90ID0gJnNsb3RzLT5tZW1zbG90c1tpXTsKKworCQlpZiAoZ2ZuID49IG1lbXNsb3QtPmJhc2VfZ2ZuCisJCSAgICAmJiBnZm4gPCBtZW1zbG90LT5iYXNlX2dmbiArIG1lbXNsb3QtPm5wYWdlcykKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBtZW1zbG90IC0gc2xvdHMtPm1lbXNsb3RzOworfQorCiB1bnNpZ25lZCBsb25nIGdmbl90b19odmEoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4pCiB7CiAJc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdDsKIAotCWdmbiA9IHVuYWxpYXNfZ2ZuKGt2bSwgZ2ZuKTsKKwlnZm4gPSB1bmFsaWFzX2dmbl9pbnN0YW50aWF0aW9uKGt2bSwgZ2ZuKTsKIAlzbG90ID0gZ2ZuX3RvX21lbXNsb3RfdW5hbGlhc2VkKGt2bSwgZ2ZuKTsKLQlpZiAoIXNsb3QpCisJaWYgKCFzbG90IHx8IHNsb3QtPmZsYWdzICYgS1ZNX01FTVNMT1RfSU5WQUxJRCkKIAkJcmV0dXJuIGJhZF9odmEoKTsKIAlyZXR1cm4gKHNsb3QtPnVzZXJzcGFjZV9hZGRyICsgKGdmbiAtIHNsb3QtPmJhc2VfZ2ZuKSAqIFBBR0VfU0laRSk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChnZm5fdG9faHZhKTsKIAotcGZuX3QgZ2ZuX3RvX3BmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKK3N0YXRpYyBwZm5fdCBodmFfdG9fcGZuKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyKQogewogCXN0cnVjdCBwYWdlICpwYWdlWzFdOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAlpbnQgbnBhZ2VzOwogCXBmbl90IHBmbjsKIAogCW1pZ2h0X3NsZWVwKCk7CiAKLQlhZGRyID0gZ2ZuX3RvX2h2YShrdm0sIGdmbik7Ci0JaWYgKGt2bV9pc19lcnJvcl9odmEoYWRkcikpIHsKLQkJZ2V0X3BhZ2UoYmFkX3BhZ2UpOwotCQlyZXR1cm4gcGFnZV90b19wZm4oYmFkX3BhZ2UpOwotCX0KLQogCW5wYWdlcyA9IGdldF91c2VyX3BhZ2VzX2Zhc3QoYWRkciwgMSwgMSwgcGFnZSk7CiAKIAlpZiAodW5saWtlbHkobnBhZ2VzICE9IDEpKSB7CkBAIC04NjUsOCArOTU0LDMyIEBACiAJcmV0dXJuIHBmbjsKIH0KIAorcGZuX3QgZ2ZuX3RvX3BmbihzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlhZGRyID0gZ2ZuX3RvX2h2YShrdm0sIGdmbik7CisJaWYgKGt2bV9pc19lcnJvcl9odmEoYWRkcikpIHsKKwkJZ2V0X3BhZ2UoYmFkX3BhZ2UpOworCQlyZXR1cm4gcGFnZV90b19wZm4oYmFkX3BhZ2UpOworCX0KKworCXJldHVybiBodmFfdG9fcGZuKGt2bSwgYWRkcik7Cit9CiBFWFBPUlRfU1lNQk9MX0dQTChnZm5fdG9fcGZuKTsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2ZuX3RvX2h2YV9tZW1zbG90KHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QsIGdmbl90IGdmbikKK3sKKwlyZXR1cm4gKHNsb3QtPnVzZXJzcGFjZV9hZGRyICsgKGdmbiAtIHNsb3QtPmJhc2VfZ2ZuKSAqIFBBR0VfU0laRSk7Cit9CisKK3Bmbl90IGdmbl90b19wZm5fbWVtc2xvdChzdHJ1Y3Qga3ZtICprdm0sCisJCQkgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdCwgZ2ZuX3QgZ2ZuKQoreworCXVuc2lnbmVkIGxvbmcgYWRkciA9IGdmbl90b19odmFfbWVtc2xvdChzbG90LCBnZm4pOworCXJldHVybiBodmFfdG9fcGZuKGt2bSwgYWRkcik7Cit9CisKIHN0cnVjdCBwYWdlICpnZm5fdG9fcGFnZShzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbikKIHsKIAlwZm5fdCBwZm47CkBAIC0xODU0LDEyICsxOTY3LDcgQEAKIAkucHJpb3JpdHkgPSAwLAogfTsKIAotdm9pZCBrdm1faW9fYnVzX2luaXQoc3RydWN0IGt2bV9pb19idXMgKmJ1cykKLXsKLQltZW1zZXQoYnVzLCAwLCBzaXplb2YoKmJ1cykpOwotfQotCi12b2lkIGt2bV9pb19idXNfZGVzdHJveShzdHJ1Y3Qga3ZtX2lvX2J1cyAqYnVzKQorc3RhdGljIHZvaWQga3ZtX2lvX2J1c19kZXN0cm95KHN0cnVjdCBrdm1faW9fYnVzICpidXMpCiB7CiAJaW50IGk7CiAKQEAgLTE4NjgsMTMgKzE5NzYsMTUgQEAKIAogCQlrdm1faW9kZXZpY2VfZGVzdHJ1Y3Rvcihwb3MpOwogCX0KKwlrZnJlZShidXMpOwogfQogCiAvKiBrdm1faW9fYnVzX3dyaXRlIC0gY2FsbGVkIHVuZGVyIGt2bS0+c2xvdHNfbG9jayAqLwotaW50IGt2bV9pb19idXNfd3JpdGUoc3RydWN0IGt2bV9pb19idXMgKmJ1cywgZ3BhX3QgYWRkciwKK2ludCBrdm1faW9fYnVzX3dyaXRlKHN0cnVjdCBrdm0gKmt2bSwgZW51bSBrdm1fYnVzIGJ1c19pZHgsIGdwYV90IGFkZHIsCiAJCSAgICAgaW50IGxlbiwgY29uc3Qgdm9pZCAqdmFsKQogewogCWludCBpOworCXN0cnVjdCBrdm1faW9fYnVzICpidXMgPSByY3VfZGVyZWZlcmVuY2Uoa3ZtLT5idXNlc1tidXNfaWR4XSk7CiAJZm9yIChpID0gMDsgaSA8IGJ1cy0+ZGV2X2NvdW50OyBpKyspCiAJCWlmICgha3ZtX2lvZGV2aWNlX3dyaXRlKGJ1cy0+ZGV2c1tpXSwgYWRkciwgbGVuLCB2YWwpKQogCQkJcmV0dXJuIDA7CkBAIC0xODgyLDU5ICsxOTkyLDcxIEBACiB9CiAKIC8qIGt2bV9pb19idXNfcmVhZCAtIGNhbGxlZCB1bmRlciBrdm0tPnNsb3RzX2xvY2sgKi8KLWludCBrdm1faW9fYnVzX3JlYWQoc3RydWN0IGt2bV9pb19idXMgKmJ1cywgZ3BhX3QgYWRkciwgaW50IGxlbiwgdm9pZCAqdmFsKQoraW50IGt2bV9pb19idXNfcmVhZChzdHJ1Y3Qga3ZtICprdm0sIGVudW0ga3ZtX2J1cyBidXNfaWR4LCBncGFfdCBhZGRyLAorCQkgICAgaW50IGxlbiwgdm9pZCAqdmFsKQogewogCWludCBpOworCXN0cnVjdCBrdm1faW9fYnVzICpidXMgPSByY3VfZGVyZWZlcmVuY2Uoa3ZtLT5idXNlc1tidXNfaWR4XSk7CisKIAlmb3IgKGkgPSAwOyBpIDwgYnVzLT5kZXZfY291bnQ7IGkrKykKIAkJaWYgKCFrdm1faW9kZXZpY2VfcmVhZChidXMtPmRldnNbaV0sIGFkZHIsIGxlbiwgdmFsKSkKIAkJCXJldHVybiAwOwogCXJldHVybiAtRU9QTk9UU1VQUDsKIH0KIAotaW50IGt2bV9pb19idXNfcmVnaXN0ZXJfZGV2KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9pb19idXMgKmJ1cywKLQkJCSAgICAgc3RydWN0IGt2bV9pb19kZXZpY2UgKmRldikKKy8qIENhbGxlciBtdXN0IGhvbGQgc2xvdHNfbG9jay4gKi8KK2ludCBrdm1faW9fYnVzX3JlZ2lzdGVyX2RldihzdHJ1Y3Qga3ZtICprdm0sIGVudW0ga3ZtX2J1cyBidXNfaWR4LAorCQkJICAgIHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpCiB7Ci0JaW50IHJldDsKKwlzdHJ1Y3Qga3ZtX2lvX2J1cyAqbmV3X2J1cywgKmJ1czsKIAotCWRvd25fd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7Ci0JcmV0ID0gX19rdm1faW9fYnVzX3JlZ2lzdGVyX2RldihidXMsIGRldik7Ci0JdXBfd3JpdGUoJmt2bS0+c2xvdHNfbG9jayk7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi0vKiBBbiB1bmxvY2tlZCB2ZXJzaW9uLiBDYWxsZXIgbXVzdCBoYXZlIHdyaXRlIGxvY2sgb24gc2xvdHNfbG9jay4gKi8KLWludCBfX2t2bV9pb19idXNfcmVnaXN0ZXJfZGV2KHN0cnVjdCBrdm1faW9fYnVzICpidXMsCi0JCQkgICAgICBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2KQoteworCWJ1cyA9IGt2bS0+YnVzZXNbYnVzX2lkeF07CiAJaWYgKGJ1cy0+ZGV2X2NvdW50ID4gTlJfSU9CVVNfREVWUy0xKQogCQlyZXR1cm4gLUVOT1NQQzsKIAotCWJ1cy0+ZGV2c1tidXMtPmRldl9jb3VudCsrXSA9IGRldjsKKwluZXdfYnVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGt2bV9pb19idXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW5ld19idXMpCisJCXJldHVybiAtRU5PTUVNOworCW1lbWNweShuZXdfYnVzLCBidXMsIHNpemVvZihzdHJ1Y3Qga3ZtX2lvX2J1cykpOworCW5ld19idXMtPmRldnNbbmV3X2J1cy0+ZGV2X2NvdW50KytdID0gZGV2OworCXJjdV9hc3NpZ25fcG9pbnRlcihrdm0tPmJ1c2VzW2J1c19pZHhdLCBuZXdfYnVzKTsKKwlzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgma3ZtLT5zcmN1KTsKKwlrZnJlZShidXMpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQga3ZtX2lvX2J1c191bnJlZ2lzdGVyX2RldihzdHJ1Y3Qga3ZtICprdm0sCi0JCQkgICAgICAgc3RydWN0IGt2bV9pb19idXMgKmJ1cywKLQkJCSAgICAgICBzdHJ1Y3Qga3ZtX2lvX2RldmljZSAqZGV2KQorLyogQ2FsbGVyIG11c3QgaG9sZCBzbG90c19sb2NrLiAqLworaW50IGt2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYoc3RydWN0IGt2bSAqa3ZtLCBlbnVtIGt2bV9idXMgYnVzX2lkeCwKKwkJCSAgICAgIHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpCiB7Ci0JZG93bl93cml0ZSgma3ZtLT5zbG90c19sb2NrKTsKLQlfX2t2bV9pb19idXNfdW5yZWdpc3Rlcl9kZXYoYnVzLCBkZXYpOwotCXVwX3dyaXRlKCZrdm0tPnNsb3RzX2xvY2spOwotfQorCWludCBpLCByOworCXN0cnVjdCBrdm1faW9fYnVzICpuZXdfYnVzLCAqYnVzOwogCi0vKiBBbiB1bmxvY2tlZCB2ZXJzaW9uLiBDYWxsZXIgbXVzdCBoYXZlIHdyaXRlIGxvY2sgb24gc2xvdHNfbG9jay4gKi8KLXZvaWQgX19rdm1faW9fYnVzX3VucmVnaXN0ZXJfZGV2KHN0cnVjdCBrdm1faW9fYnVzICpidXMsCi0JCQkJIHN0cnVjdCBrdm1faW9fZGV2aWNlICpkZXYpCi17Ci0JaW50IGk7CisJbmV3X2J1cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrdm1faW9fYnVzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFuZXdfYnVzKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCWZvciAoaSA9IDA7IGkgPCBidXMtPmRldl9jb3VudDsgaSsrKQotCQlpZiAoYnVzLT5kZXZzW2ldID09IGRldikgewotCQkJYnVzLT5kZXZzW2ldID0gYnVzLT5kZXZzWy0tYnVzLT5kZXZfY291bnRdOworCWJ1cyA9IGt2bS0+YnVzZXNbYnVzX2lkeF07CisJbWVtY3B5KG5ld19idXMsIGJ1cywgc2l6ZW9mKHN0cnVjdCBrdm1faW9fYnVzKSk7CisKKwlyID0gLUVOT0VOVDsKKwlmb3IgKGkgPSAwOyBpIDwgbmV3X2J1cy0+ZGV2X2NvdW50OyBpKyspCisJCWlmIChuZXdfYnVzLT5kZXZzW2ldID09IGRldikgeworCQkJciA9IDA7CisJCQluZXdfYnVzLT5kZXZzW2ldID0gbmV3X2J1cy0+ZGV2c1stLW5ld19idXMtPmRldl9jb3VudF07CiAJCQlicmVhazsKIAkJfQorCisJaWYgKHIpIHsKKwkJa2ZyZWUobmV3X2J1cyk7CisJCXJldHVybiByOworCX0KKworCXJjdV9hc3NpZ25fcG9pbnRlcihrdm0tPmJ1c2VzW2J1c19pZHhdLCBuZXdfYnVzKTsKKwlzeW5jaHJvbml6ZV9zcmN1X2V4cGVkaXRlZCgma3ZtLT5zcmN1KTsKKwlrZnJlZShidXMpOworCXJldHVybiByOwogfQogCiBzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGt2bV9jcHVfbm90aWZpZXIgPSB7Cg==